diff --git a/.github/workflows/cate-workflow.yml b/.github/workflows/cate-workflow.yml index 52f87d3a3..f53bab794 100644 --- a/.github/workflows/cate-workflow.yml +++ b/.github/workflows/cate-workflow.yml @@ -8,8 +8,8 @@ on: jobs: unittest: env: - XCUBE_VERSION: 0.13.0.dev3 - XCUBE_CCI_VERSION: 0.9.7 + XCUBE_VERSION: 1.0.4 + XCUBE_CCI_VERSION: 0.9.8 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -40,7 +40,7 @@ jobs: tar xvzf v"${XCUBE_CCI_VERSION}".tar.gz cd xcube-cci-"${XCUBE_CCI_VERSION}" python setup.py install - mamba install -y -c conda-forge aiohttp nest-asyncio lxml pydap cartopy jsonschema + mamba install -y -c conda-forge aiohttp nest-asyncio lxml pydap==3.3 cartopy jsonschema - name: setup-cate shell: bash -l {0} run: | diff --git a/CHANGES.md b/CHANGES.md index 68c22a3a9..04a990e9a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,26 @@ -## Version 3.1.7 (in development) +## Version 4.0.0 (in development) + +* Cate is now designed to work inside of Jupyter Lab and standalone. + For this reason, the Cate App UI is now bundled with the Cate server + and served via the endpoint "/app". + + Current Cate App version is 4.0.0-dev.6. + +* Now using workspace identifiers instead of base directories in resource + URLs of the WebAPI. This way we no longer need to URL-encode workspace + directories in WebAPI URLs, which did not work with + [jupyter-server-proxy](https://jupyter-server-proxy.readthedocs.io/). + +* The "local" data store is now configured to use a given + server root path. + +* Cached data is now written into a sub-folder `cate-local/{data_store_id}` + within Cate server's root path unless another folder is specified. + +* Removed the `cate upd` CLI command. + +* Added support of environment variable `CATE_DATA_PATH` to set path where to + find basic cate configuration files. ## Version 3.1.6 diff --git a/appveyor.yml b/appveyor.yml index 436c411dc..f7cf79003 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -56,7 +56,7 @@ build_script: # Install xcube-cci - cd .. - cd xcube-cci - - mamba install -c conda-forge lxml pydap aiohttp nest-asyncio + - mamba install -c conda-forge lxml pydap==3.3 aiohttp nest-asyncio - pip install -e . # Install cate-specific packages - cd .. diff --git a/cate/cli/main.py b/cate/cli/main.py index 715792cde..b6d99e8bf 100644 --- a/cate/cli/main.py +++ b/cate/cli/main.py @@ -227,8 +227,11 @@ def _parse_write_arg(write_arg) -> Tuple[NullableStr, NullableStr, NullableStr]: name, path = name_and_path if len(name_and_path) == 2 else (None, write_arg) path_and_format = path.rsplit(',', maxsplit=1) path, format_name = path_and_format if len(path_and_format) == 2 else (path, None) - return name if name else None, path if path else None, format_name.upper() \ - if format_name else None + return ( + name if name else None, + path if path else None, + format_name.upper() if format_name else None + ) def _parse_op_args(raw_args: List[str], @@ -1374,129 +1377,6 @@ def _execute_copy(cls, command_args): "Please check constraint.") -class UpdateCommand(Command): - """ - The ``update`` command is used to update an existing cate environment to a specific or the - latest cate version. - """ - - @classmethod - def name(cls): - return 'upd' - - @classmethod - def parser_kwargs(cls): - return dict(help='Update an existing cate environment to a specific or to the latest cate ' - 'version', - description='Update an existing cate environment to a specific or to the ' - 'latest cate version.') - - @classmethod - def configure_parser(cls, parser): - parser.add_argument('-y', '--yes', dest='yes', action='store_true', default=False, - help='Do not ask for confirmation.') - parser.add_argument('-i', '--info', dest='show_info', action='store_true', default=False, - help='Show version information only; do not update yet.') - parser.add_argument('--dry-run', dest='dry_run', action='store_true', default=False, - help='Only display what would have been done.') - parser.add_argument('version', metavar='VERSION', nargs='?', default=None, - help='A cate version identifier, e.g. "1.0.3"; ' - 'the version identifier must have the form "major.minor.micro" ' - 'and may comprise a development release suffix, ' - 'e.g. "1.2.0.dev4"') - - def execute(self, command_args): - current_version = __version__ - desired_version = command_args.version - show_info = command_args.show_info - dry_run = command_args.dry_run - - from cate.util.process import run_subprocess - if sys.platform == 'win32': - conda_path = os.path.join(sys.prefix, 'Scripts', 'conda.exe') - else: - conda_path = os.path.join(sys.prefix, 'bin', 'conda') - - import subprocess - - package = 'cate-cli' - channel = 'ccitools' - command = [conda_path, 'search', '--channel', channel, package] - completed_process = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout = completed_process.stdout.decode("utf-8") if completed_process.stdout else None - stderr = completed_process.stderr.decode("utf-8") if completed_process.stderr else None - if stderr: - raise CommandError(stderr) - - available_versions = [] - latest_version = None - if stdout: - package_info = [row.split() for row in stdout.split('\n')] - package_info.reverse() - for entry in package_info: - available_version = None - if len(entry) == 4 and entry[0] == package and entry[-1] == channel: - available_version = entry[1] - elif len(entry) == 3 and entry[-1] == channel: - available_version = entry[0] - if available_version: - available_versions.append(available_version) - if not latest_version: - latest_version = available_version - - if not latest_version: - raise CommandError('failed to retrieve latest cate version') - - if show_info: - print('Latest version is %s' % latest_version) - print('Current version is %s' % current_version) - if desired_version: - available = desired_version in available_versions - print(f'Desired version is %s (%s)' - % (desired_version, 'available' if available else 'not available')) - print('Available versions:') - for available_version in available_versions: - print(' ', available_version) - return - - if not desired_version: - desired_version = latest_version - - if desired_version == current_version: - if latest_version == current_version: - print('Current cate version is %s and up-to-date' % current_version) - else: - print('Current cate version is already %s' % current_version) - return - - if desired_version not in available_versions: - raise CommandError(f'desired cate version {desired_version} is not available; ' - 'type "cate upd --info" to show available versions') - - if command_args.yes or dry_run: - answer = 'y' - else: - prompt = f'Do you really want to change from {current_version} to {desired_version} ' \ - f'(y/[n])? ' - answer = input(prompt) - if not answer or answer.lower() != 'y': - return - - command = [conda_path, 'install', '--yes', '--channel', - channel, '--channel', 'conda-forge'] - if dry_run: - command.append('--dry-run') - command.append('%s=%s' % (package, desired_version)) - - def stdout_handler(text): - sys.stdout.write(text) - - def stderr_handler(text): - sys.stdout.write(text) - - run_subprocess(command, stdout_handler=stdout_handler, stderr_handler=stderr_handler) - - class IOCommand(SubCommandCommand): """ The ``io`` command implements various operations w.r.t. supported data and file formats. @@ -1588,7 +1468,6 @@ def _execute_list(cls, command_args): ResourceCommand, RunCommand, IOCommand, - UpdateCommand, # PluginCommand, ] diff --git a/cate/conf/conf.py b/cate/conf/conf.py index 474c300a0..2198a85cb 100644 --- a/cate/conf/conf.py +++ b/cate/conf/conf.py @@ -24,7 +24,7 @@ import logging import os.path import sys -from typing import Any, Dict, Optional, Sequence, Union +from typing import Any, Dict, Optional, Sequence, Union, Hashable from .defaults import GLOBAL_CONF_FILE, LOCAL_CONF_FILE, LOCATION_FILE, VERSION_CONF_FILE, \ VARIABLE_DISPLAY_SETTINGS, DEFAULT_DATA_PATH, DEFAULT_VERSION_DATA_PATH, DEFAULT_COLOR_MAP, DEFAULT_RES_PATTERN, \ @@ -116,12 +116,13 @@ def get_http_proxy() -> Optional[str]: return http_proxy -def is_default_variable(var_name: str) -> bool: +def is_default_variable(var_name: Hashable) -> bool: default_variables = get_config().get('default_variables', DEFAULT_VARIABLES) return var_name in default_variables -def get_variable_display_settings(var_name: str) -> Optional[Dict[str, Any]]: +def get_variable_display_settings(var_name: Hashable) \ + -> Optional[Dict[str, Any]]: """ Get the global variable display settings which is a combination of defaults. :return: diff --git a/cate/conf/defaults.py b/cate/conf/defaults.py index 6b95f3256..707e38d9e 100644 --- a/cate/conf/defaults.py +++ b/cate/conf/defaults.py @@ -25,8 +25,11 @@ from ..version import __version__ +CATE_LOCAL_DIR_NAME = 'cate-local' + DEFAULT_DATA_DIR_NAME = '.cate' -DEFAULT_DATA_PATH = os.path.join(os.path.expanduser('~'), DEFAULT_DATA_DIR_NAME) +DEFAULT_DATA_PATH = os.environ.get('CATE_DATA_PATH', + os.path.join(os.path.expanduser('~'), DEFAULT_DATA_DIR_NAME)) DEFAULT_VERSION_DATA_PATH = os.path.join(DEFAULT_DATA_PATH, __version__) GLOBAL_CONF_FILE = os.path.join(DEFAULT_DATA_PATH, 'conf.py') diff --git a/cate/core/ds.py b/cate/core/ds.py index a3e2f0de2..b53568063 100644 --- a/cate/core/ds.py +++ b/cate/core/ds.py @@ -1,15 +1,15 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -85,7 +85,6 @@ import datetime import glob import logging -import re from typing import Sequence, Optional, Union, Any, Dict, Set, Tuple import geopandas as gpd @@ -100,6 +99,7 @@ from xcube.util.progress import add_progress_observers from .cdm import get_lon_dim_name, get_lat_dim_name from .types import PolygonLike, TimeRangeLike, VarNamesLike, ValidationError +from ..conf.defaults import CATE_LOCAL_DIR_NAME from ..util.monitor import ChildMonitor from ..util.monitor import Monitor @@ -110,14 +110,6 @@ "Norman Fomferra (Brockmann Consult GmbH), " \ "Marco Zühlke (Brockmann Consult GmbH)" -URL_REGEX = re.compile( - r'^(?:http|ftp)s?://' # http:// or https:// - r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain - r'localhost|' # localhost... - r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip - r'(?::\d+)?' # optional port - r'(?:/?|[/?]\S+)$', re.IGNORECASE) - _LOG = logging.getLogger('cate') DATA_STORE_POOL = xcube_store.DataStorePool() @@ -456,7 +448,8 @@ def open_dataset(dataset_id: str, with add_progress_observers(XcubeProgressObserver(ChildMonitor(monitor, cache_work))): dataset, dataset_id = make_local(data=dataset, local_name=local_ds_id, - orig_dataset_name=dataset_id) + orig_dataset_name=dataset_id, + data_store_id=data_store_id) return dataset, dataset_id @@ -464,7 +457,8 @@ def open_dataset(dataset_id: str, def make_local(data: Any, *, local_name: Optional[str] = None, - orig_dataset_name: Optional[str] = None) -> Tuple[Any, str]: + orig_dataset_name: Optional[str] = None, + data_store_id: Optional[str] = None) -> Tuple[Any, str]: local_data_store_id = 'local' local_store = DATA_STORE_POOL.get_store(local_data_store_id) if local_store is None: @@ -485,6 +479,10 @@ def make_local(data: Any, while local_store.has_data(local_name): i += 1 local_name = f'local.{orig_dataset_name}.{i}{extension}' + if '/' not in local_name: + local_name_prefix = f'{CATE_LOCAL_DIR_NAME}/{data_store_id}/' \ + if data_store_id is not None else f'{CATE_LOCAL_DIR_NAME}/' + local_name = local_name_prefix + local_name local_data_id = local_store.write_data(data=data, data_id=local_name, replace=True) diff --git a/cate/core/workspace.py b/cate/core/workspace.py index d1e3b595a..c33a3dd1c 100644 --- a/cate/core/workspace.py +++ b/cate/core/workspace.py @@ -1,28 +1,28 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. """ This module defines the ``Workspace`` class. """ - +import base64 import logging import os import shutil @@ -34,29 +34,40 @@ import pandas as pd import xarray as xr -from .workflow import Workflow, OpStep, NodePort, ValueCache -from ..conf import conf -from ..conf.defaults import WORKSPACE_DATA_DIR_NAME, WORKSPACE_WORKFLOW_FILE_NAME, DEFAULT_SCRATCH_WORKSPACES_PATH -from ..core.cdm import get_tiling_scheme -from ..core.op import OP_REGISTRY -from ..core.types import GeoDataFrame, ValidationError -from ..util.im import get_chunk_size -from ..util.misc import object_to_qualified_name, to_json, new_indexed_name, to_scalar -from ..util.monitor import Monitor -from ..util.namespace import Namespace -from ..util.opmetainf import OpMetaInfo -from ..util.safe import safe_eval -from ..util.undefined import UNDEFINED - -__author__ = "Norman Fomferra (Brockmann Consult GmbH)" - +from cate.conf import conf +from cate.conf.defaults import DEFAULT_SCRATCH_WORKSPACES_PATH +from cate.conf.defaults import WORKSPACE_DATA_DIR_NAME +from cate.conf.defaults import WORKSPACE_WORKFLOW_FILE_NAME +from cate.util.im import get_chunk_size +from cate.util.misc import new_indexed_name +from cate.util.misc import object_to_qualified_name +from cate.util.misc import to_json +from cate.util.misc import to_scalar +from cate.util.monitor import Monitor +from cate.util.namespace import Namespace +from cate.util.opmetainf import OpMetaInfo +from cate.util.safe import safe_eval +from cate.util.undefined import UNDEFINED +from .cdm import get_tiling_scheme +from .op import OP_REGISTRY +from .types import GeoDataFrame +from .types import ValidationError +from .workflow import NodePort +from .workflow import OpStep +from .workflow import ValueCache +from .workflow import Workflow +from functools import cached_property _LOG = logging.getLogger('cate') -_RESOURCE_PERSISTENCE_FORMATS = dict(netcdf4=('nc', xr.open_dataset, 'to_netcdf'), - zarr=('zarr', xr.open_zarr, 'to_zarr')) +_RESOURCE_PERSISTENCE_FORMATS = dict( + netcdf4=('nc', xr.open_dataset, 'to_netcdf'), + zarr=('zarr', xr.open_zarr, 'to_zarr') +) -#: An JSON-serializable operation argument is a one-element dictionary taking two possible forms: -#: 1. dict(value=Any): a value which may be any constant Python object which must JSON-serializable +#: An JSON-serializable operation argument is a one-element dictionary +# taking two possible forms: +#: 1. dict(value=Any): a value which may be any constant Python object +# which must JSON-serializable #: 2. dict(source=str): a reference to a step port name OpArg = Dict[str, Any] @@ -70,22 +81,27 @@ def mk_op_arg(arg) -> OpArg: """ Utility function which turns an argument into an operation argument. - If *args* is a ``str`` and starts with "@" it is turned into a "source" argument, - otherwise it is turned into a "value" argument. + If *args* is a ``str`` and starts with "@" it is turned into a + "source" argument, otherwise it is turned into a "value" argument. """ - return dict(source=arg[1:]) if isinstance(arg, str) and arg.startswith('@') else dict(value=arg) + return dict(source=arg[1:]) \ + if (isinstance(arg, str) + and arg.startswith('@')) \ + else dict(value=arg) def mk_op_args(*args) -> OpArgs: """ - Utility function which converts a list into positional operation arguments. + Utility function which converts a list into positional + operation arguments. """ return [mk_op_arg(arg) for arg in args] def mk_op_kwargs(**kwargs) -> OpKwArgs: """ - Utility function which converts a dictionary into operation keyword arguments. + Utility function which converts a dictionary into + operation keyword arguments. """ return OrderedDict([(kw, mk_op_arg(arg)) for kw, arg in kwargs.items()]) @@ -96,12 +112,17 @@ class Workspace: By design, workspace workflows have no inputs and every step is an output. """ - def __init__(self, base_dir: str, workflow: Workflow, is_modified: bool = False): + def __init__(self, + base_dir: str, + workflow: Workflow, + is_modified: bool = False): assert base_dir assert workflow self._base_dir = base_dir self._workflow = workflow - self._is_scratch = (base_dir or '').startswith(DEFAULT_SCRATCH_WORKSPACES_PATH) + self._is_scratch = (base_dir or '').startswith( + DEFAULT_SCRATCH_WORKSPACES_PATH + ) self._is_modified = is_modified self._is_closed = False self._resource_cache = ValueCache() @@ -111,20 +132,28 @@ def __init__(self, base_dir: str, workflow: Workflow, is_modified: bool = False) def __del__(self): self.close() + @classmethod + def get_base_dir_from_id(cls, workspace_id: str) -> str: + return base64.b16decode(workspace_id).decode('utf-8') + + @classmethod + def get_id_from_base_dir(cls, base_dir: str) -> str: + return base64.b16encode(bytes(base_dir, 'utf-8')).decode('utf-8') + @property def base_dir(self) -> str: - """The Workspace's container directory.""" + """The Workspace' container directory.""" return self._base_dir @property def workflow(self) -> Workflow: - """The Workspace's workflow.""" + """The Workspace' workflow.""" self._assert_open() return self._workflow @property def resource_cache(self) -> ValueCache: - """The Workspace's resource cache.""" + """The Workspace' resource cache.""" return self._resource_cache @property @@ -161,7 +190,8 @@ def get_workspace_data_dir(cls, base_dir) -> str: @classmethod def get_workflow_file(cls, base_dir) -> str: - return os.path.join(cls.get_workspace_data_dir(base_dir), WORKSPACE_WORKFLOW_FILE_NAME) + return os.path.join(cls.get_workspace_data_dir(base_dir), + WORKSPACE_WORKFLOW_FILE_NAME) @classmethod def new_workflow(cls, header: dict = None) -> Workflow: @@ -171,10 +201,15 @@ def new_workflow(cls, header: dict = None) -> Workflow: @classmethod def create(cls, base_dir: str, description: str = None) -> 'Workspace': - return Workspace(base_dir, Workspace.new_workflow(dict(description=description or ''))) + return Workspace(base_dir, + Workspace.new_workflow( + dict(description=description or '') + )) @classmethod - def open(cls, base_dir: str, monitor: Monitor = Monitor.NONE) -> 'Workspace': + def open(cls, + base_dir: str, + monitor: Monitor = Monitor.NONE) -> 'Workspace': if not os.path.isdir(cls.get_workspace_data_dir(base_dir)): raise ValidationError('Not a valid workspace: %s' % base_dir) workflow_file = cls.get_workflow_file(base_dir) @@ -182,7 +217,8 @@ def open(cls, base_dir: str, monitor: Monitor = Monitor.NONE) -> 'Workspace': workspace = Workspace(base_dir, workflow) # Read resources for persistent steps - persistent_steps = [step for step in workflow.steps if step.persistent] + persistent_steps = [step for step in workflow.steps + if step.persistent] if persistent_steps: with monitor.starting('Reading resources', len(persistent_steps)): for step in persistent_steps: @@ -192,13 +228,14 @@ def open(cls, base_dir: str, monitor: Monitor = Monitor.NONE) -> 'Workspace': return workspace def close(self): - if self._is_closed: - return with self._lock: + if self._is_closed: + return self._resource_cache.close() # Remove all resource files that are no longer required if os.path.isdir(self.workspace_data_dir): - persistent_ids = {step.id for step in self.workflow.steps if step.persistent} + persistent_ids = {step.id for step in self.workflow.steps + if step.persistent} for filename in os.listdir(self.workspace_data_dir): res_file = os.path.join(self.workspace_data_dir, filename) if os.path.isfile(res_file) and filename.endswith('.nc'): @@ -210,8 +247,8 @@ def close(self): _LOG.exception('closing workspace failed') def save(self, monitor: Monitor = Monitor.NONE): - self._assert_open() with self._lock: + self._assert_open() base_dir = self.base_dir if not os.path.isdir(base_dir): os.makedirs(base_dir) @@ -221,9 +258,11 @@ def save(self, monitor: Monitor = Monitor.NONE): self.workflow.store(self.workflow_file) # Write resources for all persistent steps - persistent_steps = [step for step in self.workflow.steps if step.persistent] + persistent_steps = [step for step in self.workflow.steps + if step.persistent] if persistent_steps: - with monitor.starting('Writing resources', len(persistent_steps)): + with monitor.starting('Writing resources', + len(persistent_steps)): for step in persistent_steps: self._write_resource_to_file(step.id) monitor.progress(1) @@ -233,28 +272,36 @@ def save(self, monitor: Monitor = Monitor.NONE): def _write_resource_to_file(self, res_name): res_value = self._resource_cache.get(res_name) if isinstance(res_value, xr.Dataset): - format_props = _RESOURCE_PERSISTENCE_FORMATS.get(conf.get_dataset_persistence_format()) + format_props = _RESOURCE_PERSISTENCE_FORMATS.get( + conf.get_dataset_persistence_format() + ) if format_props: ext, _, write_attr = format_props if hasattr(res_value, write_attr): write_method = getattr(res_value, write_attr) # noinspection PyBroadException try: - resource_file = os.path.join(self.workspace_data_dir, res_name + '.' + ext) + resource_file = os.path.join(self.workspace_data_dir, + res_name + '.' + ext) write_method(resource_file) except Exception: - _LOG.exception('writing resource "%s" to file failed' % res_name) + _LOG.exception( + 'writing resource "%s" to file failed' % res_name + ) def _read_resource_from_file(self, res_name): for ext, open_dataset, _ in _RESOURCE_PERSISTENCE_FORMATS.values(): - res_file = os.path.join(self.workspace_data_dir, res_name + '.' + ext) + res_file = os.path.join(self.workspace_data_dir, + res_name + '.' + ext) if os.path.exists(res_file): # noinspection PyBroadException try: res_value = open_dataset(res_file) self._resource_cache[res_name] = res_value except Exception: - _LOG.exception('reading resource "%s" from file failed' % res_name) + _LOG.exception( + 'reading resource "%s" from file failed' % res_name + ) def set_resource_persistence(self, res_name: str, persistent: bool): with self._lock: @@ -272,18 +319,21 @@ def from_json_dict(cls, json_dict): workflow_json = json_dict.get('workflow', {}) is_modified = json_dict.get('is_modified', False) workflow = Workflow.from_json_dict(workflow_json) - return Workspace(base_dir, workflow, is_modified=is_modified) + return Workspace(base_dir, + workflow, + is_modified=is_modified) def to_json_dict(self): with self._lock: self._assert_open() - return OrderedDict([('base_dir', self.base_dir), - ('is_scratch', self.is_scratch), - ('is_modified', self.is_modified), - ('is_saved', os.path.exists(self.workspace_data_dir)), - ('workflow', self.workflow.to_json_dict()), - ('resources', self._resources_to_json_list()) - ]) + return OrderedDict([ + ('base_dir', self.base_dir), + ('is_scratch', self.is_scratch), + ('is_modified', self.is_modified), + ('is_saved', os.path.exists(self.workspace_data_dir)), + ('workflow', self.workflow.to_json_dict()), + ('resources', self._resources_to_json_list()) + ]) def _resources_to_json_list(self): resource_descriptors = [] @@ -292,31 +342,59 @@ def _resources_to_json_list(self): res_name = res_step.id if res_name in resource_cache: res_id = self._resource_cache.get_id(res_name) - res_update_count = self._resource_cache.get_update_count(res_name) + res_update_count = self._resource_cache.get_update_count( + res_name) resource = resource_cache.pop(res_name) - resource_descriptor = self._get_resource_descriptor(res_id, res_update_count, res_name, resource) + resource_descriptor = self._get_resource_descriptor( + res_id, + res_update_count, + res_name, + resource + ) resource_descriptors.append(resource_descriptor) if len(resource_cache) > 0: - # We should not get here as all resources should have an associated workflow step! + # We should not get here as all resources should have + # an associated workflow step! for res_name, resource in resource_cache.items(): res_id = self._resource_cache.get_id(res_name) - res_update_count = self._resource_cache.get_update_count(res_name) - resource_descriptor = self._get_resource_descriptor(res_id, res_update_count, res_name, resource) + res_update_count = self._resource_cache.get_update_count( + res_name) + resource_descriptor = self._get_resource_descriptor( + res_id, + res_update_count, + res_name, + resource + ) resource_descriptors.append(resource_descriptor) return resource_descriptors @classmethod - def _get_resource_descriptor(cls, res_id: int, res_update_count: int, res_name: str, resource): + def _get_resource_descriptor(cls, + res_id: int, + res_update_count: int, + res_name: str, + resource: Any): data_type_name = object_to_qualified_name(type(resource)) - resource_json = dict(id=res_id, updateCount=res_update_count, name=res_name, dataType=data_type_name) + resource_json = dict(id=res_id, + updateCount=res_update_count, + name=res_name, + dataType=data_type_name) if isinstance(resource, xr.Dataset): - cls._update_resource_json_from_dataset(resource_json, resource) + cls._update_resource_json_from_dataset( + resource_json, resource + ) elif isinstance(resource, GeoDataFrame): - cls._update_resource_json_from_feature_collection(resource_json, resource.features) + cls._update_resource_json_from_feature_collection( + resource_json, resource.features + ) elif isinstance(resource, pd.DataFrame): - cls._update_resource_json_from_data_frame(resource_json, resource) + cls._update_resource_json_from_data_frame( + resource_json, resource + ) elif isinstance(resource, fiona.Collection): - cls._update_resource_json_from_feature_collection(resource_json, resource) + cls._update_resource_json_from_feature_collection( + resource_json, resource + ) return resource_json @classmethod @@ -327,24 +405,34 @@ def _update_resource_json_from_dataset(cls, resource_json, dataset): for var_name in var_names: if not var_name.endswith('_bnds'): variable = dataset.data_vars[var_name] - variable_descriptors.append(cls._get_xarray_variable_descriptor(variable)) + variable_descriptors.append( + cls._get_xarray_variable_descriptor(variable) + ) var_names = sorted(dataset.coords.keys()) for var_name in var_names: variable = dataset.coords[var_name] - coords_descriptors.append(cls._get_xarray_variable_descriptor(variable, is_coord=True)) + coords_descriptors.append( + cls._get_xarray_variable_descriptor(variable, is_coord=True) + ) # noinspection PyArgumentList - resource_json.update(dimSizes=to_json(dataset.dims), - attributes=Workspace._attrs_to_json_dict(dataset.attrs), - variables=variable_descriptors, - coordVariables=coords_descriptors) + resource_json.update( + dimSizes=to_json(dataset.dims), + attributes=Workspace._attrs_to_json_dict(dataset.attrs), + variables=variable_descriptors, + coordVariables=coords_descriptors + ) @classmethod - def _update_resource_json_from_data_frame(cls, resource_json, data_frame: pd.DataFrame): + def _update_resource_json_from_data_frame(cls, + resource_json, + data_frame: pd.DataFrame): variable_descriptors = [] var_names = list(data_frame.columns) for var_name in var_names: variable = data_frame[var_name] - variable_descriptors.append(cls._get_pandas_variable_descriptor(variable)) + variable_descriptors.append( + cls._get_pandas_variable_descriptor(variable) + ) # noinspection PyArgumentList,PyTypeChecker if len(data_frame.shape) == 2: @@ -366,10 +454,15 @@ def _update_resource_json_from_data_frame(cls, resource_json, data_frame: pd.Dat if isinstance(geom_type, pd.Series) and geom_type.size > 0: attributes['geom_type'] = str(geom_type.iloc[0]) - resource_json.update(variables=variable_descriptors, attributes=attributes) + resource_json.update(variables=variable_descriptors, + attributes=attributes) @classmethod - def _update_resource_json_from_feature_collection(cls, resource_json, features: fiona.Collection): + def _update_resource_json_from_feature_collection( + cls, + resource_json, + features: fiona.Collection + ): variable_descriptors = [] num_features = len(features) num_properties = 0 @@ -384,7 +477,8 @@ def _update_resource_json_from_feature_collection(cls, resource_json, features: }) if num_features == 1 and len(variable_descriptors) >= 1: - # For single rows we can provide feature values directly, given they are scalars + # For single rows we can provide feature values directly, + # given they are scalars feature = list(features)[0] if isinstance(feature, dict) and 'properties' in feature: feature_properties = feature['properties'] @@ -431,7 +525,9 @@ def _get_pandas_variable_descriptor(cls, variable: pd.Series): return variable_info @classmethod - def _get_xarray_variable_descriptor(cls, variable: xr.DataArray, is_coord=False): + def _get_xarray_variable_descriptor(cls, + variable: xr.DataArray, + is_coord=False): attrs = variable.attrs variable_info = { 'name': variable.name, @@ -452,8 +548,10 @@ def _get_xarray_variable_descriptor(cls, variable: xr.DataArray, is_coord=False) variable_info['isYFlipped'] = tiling_scheme.geo_extent.inv_y elif variable.ndim == 1: # Serialize data of coordinate variables. - # To limit data transfer volume, we serialize data arrays only if they are 1D. - # Note that the 'data' field is used to display coordinate labels in the GUI only. + # To limit data transfer volume, we serialize data arrays + # only if they are 1D. + # Note that the 'data' field is used to display coordinate + # labels in the GUI only. variable_info['data'] = to_json(variable.data) if variable.size == 1: @@ -468,7 +566,8 @@ def _get_xarray_variable_descriptor(cls, variable: xr.DataArray, is_coord=False) displayMax='display_max') for var_prop_name, display_settings_name in mapping.items(): if display_settings_name in display_settings: - variable_info[var_prop_name] = display_settings[display_settings_name] + variable_info[var_prop_name] \ + = display_settings[display_settings_name] return variable_info @@ -489,8 +588,11 @@ def delete_resource(self, res_name: str): dependent_steps.append(step.id) if dependent_steps: - raise ValidationError('Cannot delete resource "%s" because the following resource(s) ' - 'depend on it: %s' % (res_name, ', '.join(dependent_steps))) + raise ValidationError( + 'Cannot delete resource "%s" because the following' + ' resource(s) depend on it: %s' + % (res_name, ', '.join(dependent_steps)) + ) self.workflow.remove_step(res_step) if res_name in self._resource_cache: @@ -506,8 +608,11 @@ def rename_resource(self, res_name: str, new_res_name: str) -> None: if res_step_new is res_step: return if res_step_new is not None: - raise ValidationError('Resource "%s" cannot be renamed to "%s", ' - 'because "%s" is already in use.' % (res_name, new_res_name, new_res_name)) + raise ValidationError( + 'Resource "%s" cannot be renamed to "%s", ' + 'because "%s" is already in use.' + % (res_name, new_res_name, new_res_name) + ) res_step.set_id(new_res_name) @@ -521,17 +626,21 @@ def set_resource(self, overwrite: bool = False, validate_args=False) -> str: """ - Set a resource named *res_name* to the result of an operation *op_name* using the given operation arguments - *op_kwargs*. + Set a resource named *res_name* to the result of an operation + *op_name* using the given operation arguments *op_kwargs*. - :param res_name: An optional resource name. If given and not empty, it must be unique within this workspace. - If not provided, a workspace-unique resource name will be generated. + :param res_name: An optional resource name. + If given and not empty, it must be unique within this workspace. + If not provided, a workspace-unique resource name + will be generated. :param op_name: The name of a registered operation. - :param op_kwargs: The operation's keyword arguments. Each argument must be a dict having either a "source" or - "value" key. + :param op_kwargs: The operation's keyword arguments. + Each argument must be a dict having either a "source" or + "value" key. :param overwrite: :param validate_args: - :return: The resource name, either the one passed in or a generated one. + :return: The resource name, + either the one passed in or a generated one. """ assert op_name assert op_kwargs is not None @@ -543,7 +652,8 @@ def set_resource(self, with self._lock: if not res_name: default_res_pattern = conf.get_default_res_pattern() - res_pattern = op.op_meta_info.header.get('res_pattern', default_res_pattern) + res_pattern = op.op_meta_info.header.get('res_pattern', + default_res_pattern) res_name = self._new_resource_name(res_pattern) Workspace._validate_res_name(res_name) @@ -551,10 +661,12 @@ def set_resource(self, workflow = self.workflow - # This namespace will allow us to wire the new resource with existing workflow steps - # We only add step outputs, so we cannot reference another step's input neither. - # This is not a problem because a workspace's workflow doesn't have any inputs - # to be referenced anyway. + # This namespace will allow us to wire the new resource with + # existing workflow steps. + # We only add step outputs, so we cannot reference another + # step's input neither. + # This is not a problem because a workspace's workflow + # doesn't have any inputs to be referenced anyway. namespace = dict() for step in workflow.steps: output_namespace = step.outputs @@ -562,7 +674,9 @@ def set_resource(self, does_exist = res_name in namespace if not overwrite and does_exist: - raise ValidationError('A resource named "%s" already exists' % res_name) + raise ValidationError( + 'A resource named "%s" already exists' % res_name + ) if does_exist: # Prevent resource from self-referencing @@ -571,7 +685,10 @@ def set_resource(self, # Wire new op_step with outputs from existing steps for input_name, input_value in op_kwargs.items(): if input_name not in new_step.inputs: - raise ValidationError('"%s" is not an input of operation "%s"' % (input_name, op_name)) + raise ValidationError( + '"%s" is not an input of operation "%s"' + % (input_name, op_name) + ) input_port = new_step.inputs[input_name] if 'source' in input_value: @@ -584,24 +701,36 @@ def set_resource(self, elif isinstance(source, Namespace): # source is output_namespace of another step if OpMetaInfo.RETURN_OUTPUT_NAME not in source: - raise ValidationError('Illegal argument for input "%s" of operation "%s' % - (input_name, op_name)) - input_port.source = source[OpMetaInfo.RETURN_OUTPUT_NAME] + raise ValidationError( + 'Illegal argument for input "%s"' + ' of operation "%s' + % (input_name, op_name) + ) + input_port.source = source[ + OpMetaInfo.RETURN_OUTPUT_NAME + ] elif 'value' in input_value: # Constant value input_port.value = input_value['value'] else: - raise ValidationError('Illegal argument for input "%s" of operation "%s' % (input_name, op_name)) + raise ValidationError( + 'Illegal argument for input "%s" of operation "%s' + % (input_name, op_name) + ) if validate_args: inputs = new_step.inputs - input_values = {kw: inputs[kw].source or inputs[kw].value for kw, v in op_kwargs.items()} - # Validate all values except those of type NodePort (= the sources) - op.op_meta_info.validate_input_values(input_values, [NodePort]) + input_values = {kw: (inputs[kw].source or inputs[kw].value) + for kw, v in op_kwargs.items()} + # Validate all values except those of type + # NodePort (= the sources) + op.op_meta_info.validate_input_values(input_values, + [NodePort]) old_step = workflow.find_node(res_name) - # Collect keys of invalidated cache entries, initialize with res_name + # Collect keys of invalidated cache entries, + # initialize with res_name ids_of_invalidated_steps = {res_name} if old_step is not None: # Collect all IDs of steps that depend on old_step, if any @@ -615,7 +744,8 @@ def set_resource(self, workflow.add_step(new_step, can_exist=True) self._is_modified = True - # Remove any cached resource values, whose steps became invalidated + # Remove any cached resource values, + # whose steps became invalidated for key in ids_of_invalidated_steps: if key in self._resource_cache: self._resource_cache[key] = UNDEFINED @@ -638,18 +768,26 @@ def run_op(self, op_name: str, op_kwargs: OpKwArgs, monitor=Monitor.NONE): if 'should_return' == input_name and 'value' in input_value: returns = input_value['value'] elif 'source' in input_value: - unpacked_op_kwargs[input_name] = safe_eval(input_value['source'], self.resource_cache) + unpacked_op_kwargs[input_name] = safe_eval( + input_value['source'], + self.resource_cache + ) elif 'value' in input_value: unpacked_op_kwargs[input_name] = input_value['value'] - # Allow executing self.workflow.invoke() out of the locked context so we can run tasks in parallel + # Allow executing self.workflow.invoke() out of the locked + # context so we can run tasks in parallel with monitor.starting("Running operation '%s'" % op_name, 2): - self.workflow.invoke(context=self._new_context(), monitor=monitor.child(work=1)) - return_value = op(monitor=monitor.child(work=1), **unpacked_op_kwargs) + self.workflow.invoke(context=self._new_context(), + monitor=monitor.child(work=1)) + return_value = op(monitor=monitor.child(work=1), + **unpacked_op_kwargs) if returns: return return_value - def execute_workflow(self, res_name: str = None, monitor: Monitor = Monitor.NONE): + def execute_workflow(self, + res_name: str = None, + monitor: Monitor = Monitor.NONE): self._assert_open() steps = None @@ -660,12 +798,17 @@ def execute_workflow(self, res_name: str = None, monitor: Monitor = Monitor.NONE else: res_step = self.workflow.find_node(res_name) if res_step is None: - raise ValidationError('Resource "%s" not found' % res_name) + raise ValidationError( + 'Resource "%s" not found' % res_name + ) steps = self.workflow.find_steps_to_compute(res_step.id) - # Allow executing self.workflow.invoke_steps() out of the locked context so we can run tasks in parallel + # Allow executing self.workflow.invoke_steps() out of + # the locked context, so we can run tasks in parallel if steps and len(steps): - self.workflow.invoke_steps(steps, context=self._new_context(), monitor=monitor) + self.workflow.invoke_steps(steps, + context=self._new_context(), + monitor=monitor) return steps[-1].get_output_value() else: return None @@ -675,18 +818,23 @@ def _new_context(self): def _assert_open(self): if self._is_closed: - raise ValidationError('Workspace is already closed: ' + self._base_dir) + raise ValidationError( + 'Workspace is already closed: ' + self._base_dir + ) def _new_resource_name(self, res_pattern): - return new_indexed_name({step.id for step in self.workflow.steps}, res_pattern) + return new_indexed_name({step.id for step in self.workflow.steps}, + res_pattern) @staticmethod def _validate_res_name(res_name: str): if not res_name.isidentifier(): raise ValidationError( - "Resource name '%s' is not valid. " - "The name must only contain the uppercase and lowercase letters A through Z, the underscore _ and, " - "except for the first character, the digits 0 through 9." % res_name) + "Resource name '%s' is not valid." + " The name must only contain the uppercase" + " and lowercase letters A through Z, the underscore _ and," + " except for the first character," + " the digits 0 through 9." % res_name) def _to_json_scalar_value(value, nchars=1000): diff --git a/cate/core/wsmanag/__init__.py b/cate/core/wsmanag/__init__.py new file mode 100644 index 000000000..69934380d --- /dev/null +++ b/cate/core/wsmanag/__init__.py @@ -0,0 +1,23 @@ +# The MIT License (MIT) +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .abc import WorkspaceManager +from .fs import FSWorkspaceManager diff --git a/cate/core/wsmanag/abc.py b/cate/core/wsmanag/abc.py new file mode 100644 index 000000000..e8f67f9ef --- /dev/null +++ b/cate/core/wsmanag/abc.py @@ -0,0 +1,179 @@ +# The MIT License (MIT) +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from abc import ABCMeta, abstractmethod +from typing import List, Optional, Tuple, Any, Union + +from cate.core.workspace import OpKwArgs +from cate.core.workspace import Workspace +from cate.util.monitor import Monitor + + +class WorkspaceManager(metaclass=ABCMeta): + """ + Abstract base class which represents the ``WorkspaceManager`` interface. + """ + + @property + @abstractmethod + def root_path(self) -> Optional[str]: + pass + + @abstractmethod + def resolve_path(self, path: str) -> str: + """Turn *path* into a normalized, absolute path.""" + pass + + # TODO (forman): remove me! this method exists, + # because new_workspace() and save_workspace_as() take names + # instead of paths. Better to add flags to new_workspace() + # and save_workspace_as() to indicate + # they are not paths, but just names which will be + # relative to default "~/workspaces" location. + @abstractmethod + def resolve_workspace_dir(self, path_or_name: str) -> str: + pass + + @abstractmethod + def get_open_workspaces(self) -> List[Workspace]: + pass + + @abstractmethod + def get_workspace(self, base_dir: str) -> Workspace: + pass + + @abstractmethod + def list_workspace_names(self) -> List[str]: + pass + + @abstractmethod + def new_workspace(self, + workspace_dir: Optional[str], + description: str = None) -> Workspace: + pass + + @abstractmethod + def open_workspace(self, + workspace_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: + pass + + @abstractmethod + def close_workspace(self, workspace_dir: str) -> None: + pass + + @abstractmethod + def close_all_workspaces(self) -> None: + pass + + @abstractmethod + def save_workspace_as(self, + workspace_dir: str, + new_workspace_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: + pass + + @abstractmethod + def save_workspace(self, + workspace_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: + pass + + @abstractmethod + def save_all_workspaces(self, monitor: Monitor = Monitor.NONE) -> None: + pass + + @abstractmethod + def delete_workspace(self, + workspace_dir: str, + remove_completely: bool = False) -> None: + pass + + @abstractmethod + def clean_workspace(self, base_dir: str) -> Workspace: + pass + + @abstractmethod + def run_op_in_workspace( + self, + workspace_dir: str, + op_name: str, + op_args: OpKwArgs, + monitor: Monitor = Monitor.NONE + ) -> Optional[Any]: + pass + + @abstractmethod + def set_workspace_resource( + self, + workspace_dir: str, + op_name: str, + op_args: OpKwArgs, + res_name: Optional[str] = None, + overwrite: bool = False, + monitor: Monitor = Monitor.NONE + ) -> Tuple[Workspace, str]: + pass + + @abstractmethod + def rename_workspace_resource(self, + workspace_dir: str, + res_name: str, + new_res_name: str) -> Workspace: + pass + + @abstractmethod + def delete_workspace_resource(self, + workspace_dir: str, + res_name: str) -> Workspace: + pass + + @abstractmethod + def set_workspace_resource_persistence(self, + workspace_dir: str, + res_name: str, + persistent: bool) -> Workspace: + pass + + @abstractmethod + def write_workspace_resource(self, + workspace_dir: str, + res_name: str, + file_path: str, + format_name: str = None, + monitor: Monitor = Monitor.NONE) -> None: + pass + + @abstractmethod + def plot_workspace_resource(self, + workspace_dir: str, + res_name: str, + var_name: str = None, + file_path: str = None, + monitor: Monitor = Monitor.NONE) -> None: + pass + + @abstractmethod + def print_workspace_resource(self, + workspace_dir: str, + res_name_or_expr: str = None, + monitor: Monitor = Monitor.NONE) -> None: + pass diff --git a/cate/core/wsmanag.py b/cate/core/wsmanag/fs.py similarity index 58% rename from cate/core/wsmanag.py rename to cate/core/wsmanag/fs.py index aedf28bd5..c0e6d475a 100644 --- a/cate/core/wsmanag.py +++ b/cate/core/wsmanag/fs.py @@ -1,23 +1,23 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. import logging import os @@ -25,222 +25,121 @@ import pprint import shutil import uuid -from abc import ABCMeta, abstractmethod from typing import Dict, List, Optional, Tuple, Any -from .objectio import write_object -from .workflow import Workflow -from .workspace import Workspace, OpKwArgs -from ..conf.defaults import DEFAULT_SCRATCH_WORKSPACES_PATH, WORKSPACE_DATA_DIR_NAME, WORKSPACES_DIR_NAME, \ - DEFAULT_WORKSPACES_PATH, SCRATCH_WORKSPACES_DIR_NAME -from ..core.types import ValidationError -from ..util.misc import cwd -from ..util.monitor import Monitor -from ..util.safe import safe_eval -from ..util.undefined import UNDEFINED - -__author__ = "Norman Fomferra (Brockmann Consult GmbH)" +from cate.conf.defaults import DEFAULT_DATA_DIR_NAME +from cate.conf.defaults import DEFAULT_SCRATCH_WORKSPACES_PATH +from cate.conf.defaults import DEFAULT_WORKSPACES_PATH +from cate.conf.defaults import SCRATCH_WORKSPACES_DIR_NAME +from cate.conf.defaults import WORKSPACES_DIR_NAME +from cate.conf.defaults import WORKSPACE_DATA_DIR_NAME +from cate.core.objectio import write_object +from cate.core.types import ValidationError +from cate.core.workflow import Workflow +from cate.core.workspace import OpKwArgs +from cate.core.workspace import Workspace +from cate.util.misc import cwd +from cate.util.monitor import Monitor +from cate.util.safe import safe_eval +from cate.util.undefined import UNDEFINED +from .abc import WorkspaceManager _LOG = logging.getLogger('cate') -class WorkspaceManager(metaclass=ABCMeta): - """ - Abstract base class which represents the ``WorkspaceManager`` interface. - """ - - @property - @abstractmethod - def root_path(self) -> Optional[str]: - pass - - @abstractmethod - def resolve_path(self, path: str) -> str: - pass - - # TODO (forman): remove me! this method exists, because new_workspace() and save_workspace_as() take names - # instead of paths. Better to add flags to new_workspace() and save_workspace_as() to indicate - # they are not paths, but just names which will be relative to default "~/workspaces" location. - @abstractmethod - def resolve_workspace_dir(self, path_or_name: str) -> str: - pass - - @abstractmethod - def get_open_workspaces(self) -> List[Workspace]: - pass - - @abstractmethod - def get_workspace(self, workspace_dir: str) -> Workspace: - pass - - @abstractmethod - def list_workspace_names(self) -> List[str]: - pass - - @abstractmethod - def new_workspace(self, - workspace_dir: Optional[str], - description: str = None) -> Workspace: - pass - - @abstractmethod - def open_workspace(self, - workspace_dir: str, - monitor: Monitor = Monitor.NONE) -> Workspace: - pass - - @abstractmethod - def close_workspace(self, workspace_dir: str) -> None: - pass - - @abstractmethod - def close_all_workspaces(self) -> None: - pass - - @abstractmethod - def save_workspace_as(self, - workspace_dir: str, - new_workspace_dir: str, - monitor: Monitor = Monitor.NONE) -> Workspace: - pass - - @abstractmethod - def save_workspace(self, - workspace_dir: str, - monitor: Monitor = Monitor.NONE) -> Workspace: - pass - - @abstractmethod - def save_all_workspaces(self, monitor: Monitor = Monitor.NONE) -> None: - pass - - @abstractmethod - def delete_workspace(self, - workspace_dir: str, - remove_completely: bool = False) -> None: - pass - - @abstractmethod - def clean_workspace(self, base_dir: str) -> Workspace: - pass - - @abstractmethod - def run_op_in_workspace(self, - workspace_dir: str, - op_name: str, - op_args: OpKwArgs, - monitor: Monitor = Monitor.NONE) -> Optional[Any]: - pass - - @abstractmethod - def set_workspace_resource(self, - workspace_dir: str, - op_name: str, - op_args: OpKwArgs, - res_name: Optional[str] = None, - overwrite: bool = False, - monitor: Monitor = Monitor.NONE) -> Tuple[Workspace, str]: - pass - - @abstractmethod - def rename_workspace_resource(self, - workspace_dir: str, - res_name: str, - new_res_name: str) -> Workspace: - pass - - @abstractmethod - def delete_workspace_resource(self, - workspace_dir: str, - res_name: str) -> Workspace: - pass - - @abstractmethod - def set_workspace_resource_persistence(self, - workspace_dir: str, - res_name: str, - persistent: bool) -> Workspace: - pass - - @abstractmethod - def write_workspace_resource(self, - workspace_dir: str, - res_name: str, - file_path: str, - format_name: str = None, - monitor: Monitor = Monitor.NONE) -> None: - pass - - @abstractmethod - def plot_workspace_resource(self, - workspace_dir: str, - res_name: str, - var_name: str = None, - file_path: str = None, - monitor: Monitor = Monitor.NONE) -> None: - pass - - @abstractmethod - def print_workspace_resource(self, - workspace_dir: str, - res_name_or_expr: str = None, - monitor: Monitor = Monitor.NONE) -> None: - pass +class FSWorkspaceManager(WorkspaceManager): + """An implementation of the WorkspaceManager interface for + the local file system. + This class is used by Cate server to manage workspaces. -class FSWorkspaceManager(WorkspaceManager): + :param root_path: Optional root path. If given, this manager + will resolve incoming paths against the root path. + Note that incoming paths (from the Cate server client) + are usually always absolute, i.e. they always start with a + file path separator (single slash). + """ def __init__(self, root_path: str = None): self._open_workspaces: Dict[str, Workspace] = {} + self._root_path: Optional[str] = None + self._workspaces_dir_path = DEFAULT_WORKSPACES_PATH + self._scratch_workspaces_dir_path = DEFAULT_SCRATCH_WORKSPACES_PATH + if root_path: root_path = os.path.normpath(root_path) if not os.path.isabs(root_path): - raise ValueError('root directory must be given as absolute path') + raise ValueError( + 'root directory must be given as absolute path' + ) if not os.path.isdir(root_path): raise ValueError('root directory does not exist') + self._root_path = root_path + self._workspaces_dir_path = os.path.join( + root_path, + DEFAULT_DATA_DIR_NAME, + WORKSPACES_DIR_NAME + ) + self._scratch_workspaces_dir_path = os.path.join( + root_path, + DEFAULT_DATA_DIR_NAME, + SCRATCH_WORKSPACES_DIR_NAME + ) + os.makedirs(self._workspaces_dir_path, exist_ok=True) + if os.path.isdir(self._scratch_workspaces_dir_path): + shutil.rmtree(self._scratch_workspaces_dir_path) + os.makedirs(self._scratch_workspaces_dir_path, exist_ok=True) + _LOG.info(f"Workspaces directory:" + f" {self.workspaces_dir}") + _LOG.info(f"Scratch workspaces directory:" + f" {self.scratch_workspaces_dir}") @property - def scratch_workspaces_dir_path(self) -> str: - if self._root_path: - return os.path.join(self._root_path, SCRATCH_WORKSPACES_DIR_NAME) - return DEFAULT_SCRATCH_WORKSPACES_PATH + def workspaces_dir(self) -> str: + return self._workspaces_dir_path @property - def workspaces_dir(self) -> str: - if self._root_path: - return os.path.join(self._root_path, WORKSPACES_DIR_NAME) - return DEFAULT_WORKSPACES_PATH + def scratch_workspaces_dir(self) -> str: + return self._scratch_workspaces_dir_path @property def root_path(self) -> Optional[str]: return self._root_path def resolve_workspace_dir(self, path_or_name: str) -> str: - if self._is_no_path(path_or_name): + if self._is_plain_name(path_or_name): return os.path.join(self.workspaces_dir, path_or_name) else: return self.resolve_path(path_or_name) def resolve_path(self, path: str) -> str: - """Turn path into a normalized, absolute path.""" + """Resolve *path* against root_path, if any. + Return absolute path always. + """ if not self._root_path: # Not in sandbox mode, return normalized, absolute path return os.path.normpath(os.path.abspath(path)) - # In sandbox mode! + # In restricted sandbox mode! is_win = platform.system() == 'Windows' # If path is empty or root return root path. - # Return root path also for '.', because this does not exist in sandbox mode. - if path == '' or path == '.' or path == '/' or (is_win and path == '\\'): + # Return root path also for '.', + # because this does not exist in sandbox mode. + if (path == '' + or path == '.' + or path == '/' + or (is_win and path == '\\')): return self._root_path - # Test if absolute path. In sandbox mode, absolute paths are prefixed by just a slash. - if path.startswith('/') or (is_win and path.startswith('\\')): + # Test if absolute path. In sandbox mode, + # absolute paths are prefixed by just a slash. + if (path.startswith('/') + or (is_win and path.startswith('\\'))): # Trim trailing slash path = path[1:] @@ -256,8 +155,9 @@ def resolve_path(self, path: str) -> str: return path @classmethod - def _is_abs_path(self, path): - return os.path.isabs(path) or (platform == 'Windows' and os.path.isabs(path + '\\')) + def _is_abs_path(cls, path): + return (os.path.isabs(path) + or (platform == 'Windows' and os.path.isabs(path + '\\'))) def num_open_workspaces(self) -> int: return len(self._open_workspaces) @@ -270,41 +170,54 @@ def list_workspace_names(self) -> List[str]: if not os.path.isdir(workspaces_dir): return [] - dir_list = [] - with os.scandir(workspaces_dir) as scan_list: - for entry in scan_list: - if entry.is_dir() \ - and os.path.isdir(os.path.join(workspaces_dir, entry.name, WORKSPACE_DATA_DIR_NAME)): - dir_list.append(entry.name) - - return dir_list - - def get_workspace(self, workspace_dir: str) -> Workspace: - workspace = self._open_workspaces.get(workspace_dir, None) + # noinspection PyUnresolvedReferences + return [ + entry.name + for entry in os.scandir(workspaces_dir) + if entry.is_dir() and os.path.isdir( + os.path.join(workspaces_dir, + entry.name, + WORKSPACE_DATA_DIR_NAME) + ) + ] + + def get_workspace(self, base_dir: str) -> Workspace: + workspace = self._open_workspaces.get(base_dir, None) if workspace is None: - raise ValidationError('Workspace does not exist: %s' % workspace_dir) + raise ValidationError('Workspace does not exist: %s' + % base_dir) assert not workspace.is_closed # noinspection PyTypeChecker return workspace - def new_workspace(self, workspace_dir_or_name: Optional[str], description: str = None) -> Workspace: + def new_workspace(self, + workspace_dir_or_name: Optional[str], + description: str = None) -> Workspace: is_scratch = False if workspace_dir_or_name is None: scratch_dir_name = str(uuid.uuid4()) - workspace_dir = os.path.join(self.scratch_workspaces_dir_path, scratch_dir_name) + workspace_dir = os.path.join(self.scratch_workspaces_dir, + scratch_dir_name) os.makedirs(workspace_dir, exist_ok=True) is_scratch = True - elif self._is_no_path(workspace_dir_or_name): + elif self._is_plain_name(workspace_dir_or_name): # Just a name - workspace_dir = os.path.normpath(os.path.join(self.workspaces_dir, workspace_dir_or_name)) + workspace_dir = os.path.normpath( + os.path.join(self.workspaces_dir, + workspace_dir_or_name) + ) else: workspace_dir = os.path.normpath(workspace_dir_or_name) if workspace_dir in self._open_workspaces: - raise ValidationError('Workspace already opened: %s' % workspace_dir) + raise ValidationError( + 'Workspace already opened: %s' % workspace_dir + ) workspace_data_dir = Workspace.get_workspace_data_dir(workspace_dir) if os.path.isdir(workspace_data_dir): - raise ValidationError('Workspace exists, consider opening it: %s' % workspace_dir) + raise ValidationError( + 'Workspace exists, consider opening it: %s' % workspace_dir + ) workspace = Workspace.create(workspace_dir, description=description) if is_scratch: workspace.is_scratch = True @@ -314,16 +227,19 @@ def new_workspace(self, workspace_dir_or_name: Optional[str], description: str = return workspace @classmethod - def _is_no_path(self, path_or_name): + def _is_plain_name(cls, path_or_name): return '/' not in path_or_name and '\\' not in path_or_name - def open_workspace(self, workspace_dir: str, monitor: Monitor = Monitor.NONE) -> Workspace: + def open_workspace(self, + workspace_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: workspace = self._open_workspaces.get(workspace_dir, None) if workspace is not None: assert not workspace.is_closed return workspace with monitor.starting("Opening workspace", 100): - workspace = Workspace.open(workspace_dir, monitor=monitor.child(50)) + workspace = Workspace.open(workspace_dir, + monitor=monitor.child(50)) assert workspace_dir not in self._open_workspaces workspace.execute_workflow(monitor=monitor.child(50)) self._open_workspaces[workspace_dir] = workspace @@ -346,13 +262,16 @@ def save_workspace_as(self, monitor: Monitor = Monitor.NONE) -> Workspace: workspace = self.get_workspace(workspace_dir) - if self._is_no_path(new_workspace_dir_or_name): - new_workspace_dir = os.path.normpath(os.path.join(self.workspaces_dir, new_workspace_dir_or_name)) + if self._is_plain_name(new_workspace_dir_or_name): + new_workspace_dir = os.path.normpath( + os.path.join(self.workspaces_dir, new_workspace_dir_or_name) + ) else: new_workspace_dir = os.path.normpath(new_workspace_dir_or_name) empty_dir_exists = False - if os.path.realpath(workspace_dir) == os.path.realpath(new_workspace_dir): + if os.path.realpath(workspace_dir) \ + == os.path.realpath(new_workspace_dir): return workspace with monitor.starting('opening "%s"' % new_workspace_dir, 100): @@ -363,9 +282,14 @@ def save_workspace_as(self, if len(entries) == 0: empty_dir_exists = True else: - raise ValidationError('Directory is not empty: %s' % new_workspace_dir) + raise ValidationError( + 'Directory is not empty: %s' % new_workspace_dir + ) else: - raise ValidationError('A file with same name already exists: %s' % new_workspace_dir) + raise ValidationError( + 'A file with same name already exists: %s' + % new_workspace_dir + ) else: monitor.progress(work=5) @@ -373,8 +297,10 @@ def save_workspace_as(self, workspace.save(monitor=monitor.child(work=25)) workspace.close() - # if the given directory exists and is empty, we must delete it because - # shutil.copytree(workspace_dir, to_dir) expects to_dir to be non-existent + # if the given directory exists and is empty, + # we must delete it because + # shutil.copytree(workspace_dir, to_dir) expects + # to_dir to be non-existent if empty_dir_exists: os.rmdir(new_workspace_dir) monitor.progress(work=5) @@ -382,14 +308,21 @@ def save_workspace_as(self, shutil.copytree(workspace_dir, new_workspace_dir) monitor.progress(work=10) - # TODO (forman): with cwd() is a dirty hack here. A real solution finds the location of - # new_workspace_dir in relation to workspace_dir and applies the delta to all - # paths values in the workspace's workflow JSON. This is a bit of a pain, because - # we must to the replacement only for operation parameters of type 'file'. + # TODO (forman): with cwd() is a dirty hack here. + # A real solution finds the location of + # new_workspace_dir in relation to workspace_dir + # and applies the delta to all + # paths values in the workspace's workflow JSON. + # This is a bit of a pain, because + # we must to the replacement only for operation + # parameters of type 'file'. # with cwd(new_workspace_dir): # Reopen from new location - new_workspace = self.open_workspace(new_workspace_dir, monitor=monitor.child(work=50)) + new_workspace = self.open_workspace( + new_workspace_dir, + monitor=monitor.child(work=50) + ) # If it was a scratch workspace, delete the original if workspace.is_scratch: @@ -401,7 +334,9 @@ def save_workspace_as(self, monitor.progress(work=5) return new_workspace - def save_workspace(self, workspace_dir: str, monitor: Monitor = Monitor.NONE) -> Workspace: + def save_workspace(self, + workspace_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: workspace = self.get_workspace(workspace_dir) if workspace: workspace.save(monitor=monitor) @@ -428,19 +363,25 @@ def clean_workspace(self, workspace_dir: str) -> Workspace: if old_workspace: old_workspace.resource_cache.close() # Create new workflow but keep old header info - workflow = Workspace.new_workflow(header=old_workflow.op_meta_info.header if old_workflow else None) + workflow = Workspace.new_workflow( + header=old_workflow.op_meta_info.header if old_workflow else None + ) workspace = Workspace(workspace_dir, workflow) self._open_workspaces[workspace_dir] = workspace workspace.save() return workspace - def delete_workspace(self, workspace_dir: str, remove_completely: bool = False) -> None: + def delete_workspace(self, + workspace_dir: str, + remove_completely: bool = False) -> None: self.close_workspace(workspace_dir) if remove_completely: shutil.rmtree(workspace_dir) else: - workspace_data_dir = Workspace.get_workspace_data_dir(workspace_dir) + workspace_data_dir = Workspace.get_workspace_data_dir( + workspace_dir + ) if not os.path.isdir(workspace_data_dir): raise ValidationError('Not a workspace: %s' % workspace_dir) shutil.rmtree(workspace_data_dir) @@ -453,25 +394,33 @@ def run_op_in_workspace(self, workspace = self.get_workspace(workspace_dir) return workspace.run_op(op_name, op_args, monitor=monitor) - def set_workspace_resource(self, - workspace_dir: str, - op_name: str, - op_args: OpKwArgs, - res_name: Optional[str] = None, - overwrite: bool = False, - monitor: Monitor = Monitor.NONE) -> Tuple[Workspace, str]: + def set_workspace_resource( + self, + workspace_dir: str, + op_name: str, + op_args: OpKwArgs, + res_name: Optional[str] = None, + overwrite: bool = False, + monitor: Monitor = Monitor.NONE + ) -> Tuple[Workspace, str]: workspace = self.get_workspace(workspace_dir) - res_name = workspace.set_resource(op_name, op_args, res_name, overwrite=overwrite, validate_args=True) + res_name = workspace.set_resource(op_name, op_args, res_name, + overwrite=overwrite, + validate_args=True) workspace.execute_workflow(res_name=res_name, monitor=monitor) return workspace, res_name - def rename_workspace_resource(self, workspace_dir: str, - res_name: str, new_res_name: str) -> Workspace: + def rename_workspace_resource(self, + workspace_dir: str, + res_name: str, + new_res_name: str) -> Workspace: workspace = self.get_workspace(workspace_dir) workspace.rename_resource(res_name, new_res_name) return workspace - def delete_workspace_resource(self, workspace_dir: str, res_name: str) -> Workspace: + def delete_workspace_resource(self, + workspace_dir: str, + res_name: str) -> Workspace: workspace = self.get_workspace(workspace_dir) workspace.delete_resource(res_name) return workspace @@ -492,13 +441,17 @@ def write_workspace_resource(self, monitor: Monitor = Monitor.NONE) -> None: workspace = self.get_workspace(workspace_dir) target_path = file_path - with monitor.starting('Writing resource "%s"' % res_name, total_work=10): - obj = workspace.execute_workflow(res_name=res_name, monitor=monitor.child(work=9)) + with monitor.starting('Writing resource "%s"' % res_name, + total_work=10): + obj = workspace.execute_workflow(res_name=res_name, + monitor=monitor.child(work=9)) if obj is not None: write_object(obj, target_path, format_name=format_name) monitor.progress(work=1, msg='Writing file %s' % target_path) else: - monitor.progress(work=1, msg='No output, file %s NOT written' % target_path) + monitor.progress(work=1, + msg='No output,' + ' file %s NOT written' % target_path) def plot_workspace_resource(self, workspace_dir: str, @@ -536,7 +489,9 @@ def plot_workspace_resource(self, plt.plot(obj) plt.show() else: - raise ValidationError("Don't know how to plot an object of type \"%s\"" % type(obj)) + raise ValidationError( + "Don't know how to plot an object of type \"%s\"" % type(obj) + ) def print_workspace_resource(self, workspace_dir: str, @@ -554,8 +509,10 @@ def _get_resource_value(self, value = UNDEFINED if res_name_or_expr is None: value = workspace.resource_cache - elif res_name_or_expr.isidentifier() and workspace.workflow.find_node(res_name_or_expr) is not None: - value = workspace.execute_workflow(res_name=res_name_or_expr, monitor=monitor) + elif res_name_or_expr.isidentifier() and \ + workspace.workflow.find_node(res_name_or_expr) is not None: + value = workspace.execute_workflow(res_name=res_name_or_expr, + monitor=monitor) if value is UNDEFINED: value = safe_eval(res_name_or_expr, workspace.resource_cache) return value diff --git a/cate/ds/__init__.py b/cate/ds/__init__.py index 3409ae954..33d789b1b 100644 --- a/cate/ds/__init__.py +++ b/cate/ds/__init__.py @@ -1,68 +1,26 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -from xcube.util.assertions import assert_given +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. def cate_init(): - # Plugin initializer. - import yaml - import os - from xcube.core.store import DataStoreConfig - from xcube.core.store import get_data_store_params_schema - - from cate.conf import get_data_stores_path - from cate.conf.defaults import STORES_CONF_FILE - from cate.core.common import default_user_agent - from cate.core.ds import DATA_STORE_POOL - - dir_path = os.path.dirname(os.path.abspath(__file__)) - default_stores_file = os.path.join(dir_path, 'data/stores.yml') - - if os.path.exists(STORES_CONF_FILE): - with open(STORES_CONF_FILE, 'r') as fp: - store_configs = yaml.safe_load(fp) - else: - with open(default_stores_file, 'r') as fp: - store_configs = yaml.safe_load(fp) - - for store_name, store_config in store_configs.items(): - store_id = store_config.get('store_id') - assert_given(store_id, name='store_id', exception_type=RuntimeError) - - if store_id == 'file' \ - and 'store_params' in store_config \ - and store_config.get('store_params', {}).get('root') is None: - root = os.environ.get('CATE_LOCAL_DATA_STORE_PATH', - os.path.join(get_data_stores_path(), - store_name)) - # Note: even if the root directory doesn't exist yet, - # the xcube "file" data store will create it for us. - store_config['store_params']['root'] = root - - store_params_schema = get_data_store_params_schema(store_id) - if 'user_agent' in store_params_schema.properties: - if 'store_params' not in store_config: - store_config['store_params'] = {} - store_config['store_params']['user_agent'] = default_user_agent() - - store_config = DataStoreConfig.from_dict(store_config) - DATA_STORE_POOL.add_store_config(store_name, store_config) + """Cate plugin initializer.""" + from .stores import configure_data_stores + configure_data_stores() diff --git a/cate/ds/data/stores.yml b/cate/ds/data/stores.yml index 715150156..bf7d92f65 100644 --- a/cate/ds/data/stores.yml +++ b/cate/ds/data/stores.yml @@ -24,6 +24,10 @@ local: store_id: "file" store_params: root: null + max_depth: 4 + excludes: + - ".*" + - "*/.*" title: "File Data Sources" description: > This data store represents diff --git a/cate/ds/stores.py b/cate/ds/stores.py new file mode 100644 index 000000000..246c91779 --- /dev/null +++ b/cate/ds/stores.py @@ -0,0 +1,78 @@ +# The MIT License (MIT) +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import os +from typing import Optional + +import yaml + +from cate.conf import get_data_stores_path +from cate.conf.defaults import STORES_CONF_FILE +from cate.core.common import default_user_agent +from cate.core.ds import DATA_STORE_POOL +from xcube.core.store import DataStoreConfig +from xcube.core.store import get_data_store_params_schema +from xcube.util.assertions import assert_given + + +def configure_data_stores(local_root_path: Optional[str] = None): + """Configure Cate's data stores. + + :param local_root_path: Optional root path + for the data store named "local". + """ + + if os.path.exists(STORES_CONF_FILE): + with open(STORES_CONF_FILE, 'r') as fp: + store_configs = yaml.safe_load(fp) + else: + dir_path = os.path.dirname(os.path.abspath(__file__)) + default_stores_file = os.path.join(dir_path, 'data/stores.yml') + + with open(default_stores_file, 'r') as fp: + store_configs = yaml.safe_load(fp) + + for store_name, store_config in store_configs.items(): + store_id = store_config.get('store_id') + assert_given(store_id, name='store_id', exception_type=RuntimeError) + + if store_name == 'local': + if local_root_path is not None: + root = local_root_path + else: + root = store_config.get('store_params', {}).get('root') + if root is None: + root = os.environ.get('CATE_LOCAL_DATA_STORE_PATH', + os.path.join(get_data_stores_path(), + store_name)) + root = os.path.abspath(os.path.expanduser(root)) + # Note: even if the root directory doesn't exist yet, + # the xcube "file" data store will create it for us. + store_config['store_params']['root'] = root + + store_params_schema = get_data_store_params_schema(store_id) + if 'user_agent' in store_params_schema.properties: + if 'store_params' not in store_config: + store_config['store_params'] = {} + store_config['store_params']['user_agent'] = default_user_agent() + + store_config = DataStoreConfig.from_dict(store_config) + DATA_STORE_POOL.add_store_config(store_name, store_config) diff --git a/cate/version.py b/cate/version.py index 9ad2faae4..b8944f183 100644 --- a/cate/version.py +++ b/cate/version.py @@ -1,29 +1,29 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017, 2018 by the ESA CCI Toolbox development team and -# contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. -# Cate version string (PEP440-compatible), e.g. "0.8.0", "0.8.0.dev1", "0.8.0rc1", "0.8.0rc1.dev1" -__version__ = '3.1.7.dev0' +# Cate version string (PEP440-compatible), e.g. +# "0.8.0", "0.8.0.dev1", "0.8.0rc1", "0.8.0rc1.dev1" +__version__ = '4.0.0.dev6' -# Other package metainfo +# Other package meta-info __title__ = 'cate' __description__ = 'Cate - the ESA CCI Toolbox' __url__ = 'https://github.com/CCI-Tools/cate' diff --git a/cate/webapi/app/asset-manifest.json b/cate/webapi/app/asset-manifest.json new file mode 100644 index 000000000..eb0437f18 --- /dev/null +++ b/cate/webapi/app/asset-manifest.json @@ -0,0 +1,28 @@ +{ + "files": { + "main.css": "./static/css/main.aa591355.chunk.css", + "main.js": "./static/js/main.52d53f34.chunk.js", + "main.js.map": "./static/js/main.52d53f34.chunk.js.map", + "runtime-main.js": "./static/js/runtime-main.25eafddd.js", + "runtime-main.js.map": "./static/js/runtime-main.25eafddd.js.map", + "static/css/2.0bca3029.chunk.css": "./static/css/2.0bca3029.chunk.css", + "static/js/2.7342eb6f.chunk.js": "./static/js/2.7342eb6f.chunk.js", + "static/js/2.7342eb6f.chunk.js.map": "./static/js/2.7342eb6f.chunk.js.map", + "index.html": "./index.html", + "precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js": "./precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js", + "service-worker.js": "./service-worker.js", + "static/css/2.0bca3029.chunk.css.map": "./static/css/2.0bca3029.chunk.css.map", + "static/css/main.aa591355.chunk.css.map": "./static/css/main.aa591355.chunk.css.map", + "static/js/2.7342eb6f.chunk.js.LICENSE.txt": "./static/js/2.7342eb6f.chunk.js.LICENSE.txt", + "static/media/cate-icon-128.png": "./static/media/cate-icon-128.4edcc198.png", + "static/media/blueprint-icons.css": "./static/media/icons-20.cef8cdbb.woff", + "static/media/stylesheet.css": "./static/media/notesesareg-webfont.d1cb9435.svg" + }, + "entrypoints": [ + "static/js/runtime-main.25eafddd.js", + "static/css/2.0bca3029.chunk.css", + "static/js/2.7342eb6f.chunk.js", + "static/css/main.aa591355.chunk.css", + "static/js/main.52d53f34.chunk.js" + ] +} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json new file mode 100644 index 000000000..0dbf15782 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":0,"numberOfSamples":1000,"samples":[-0.002403025022753476,-2.5083047211757836e-5,-1.721638967214743e-8,-0.002402558217007106,-2.5020003017226545e-5,-1.7146589882925253e-8,-0.002402152743739069,-2.4908815008776256e-5,-1.7018183343380784e-8,-0.0024018177616850914,-2.4779340864272868e-5,-1.686693112266686e-8,-0.0024015512294922256,-2.4661265859267777e-5,-1.672851429567895e-8,-0.0024013415089134365,-2.4580601237402673e-5,-1.6634308307010567e-8,-0.0024011692853140917,-2.4557354638250633e-5,-1.660856911234815e-8,-0.0024010094083213077,-2.460379520847823e-5,-1.666634004388421e-8,-0.002400832781870665,-2.472274606391698e-5,-1.681138635859172e-8,-0.0024006088674261195,-2.490565851910724e-5,-1.7033840158805374e-8,-0.0024003096414815053,-2.513083477542098e-5,-1.7307985763326293e-8,-0.002399915678730765,-2.5363106308028472e-5,-1.759177707540246e-8,-0.0023994239684226163,-2.5557205638682287e-5,-1.7830822072448312e-8,-0.0023988549431304905,-2.566700881355288e-5,-1.7969488578482e-8,-0.0023982538707374547,-2.5660422954022525e-5,-1.7968844164137065e-8,-0.002397681821948537,-2.553480284678542e-5,-1.7825226886235993e-8,-0.0023971964165357008,-2.53237668313255e-5,-1.7578462540315414e-8,-0.002396830441918346,-2.50885777844268e-5,-1.7301586465142487e-8,-0.0023965800106651434,-2.4896546614298096e-5,-1.7075078798371497e-8,-0.0023964084361551537,-2.4797687943490375e-5,-1.695902560230991e-8,-0.002396262002993096,-2.481096708533641e-5,-1.6976666372280337e-8,-0.0023960882393536166,-2.4923817586803518e-5,-1.7113670694608337e-8,-0.002395849219877066,-2.5101106375207836e-5,-1.732863106912266e-8,-0.002395527525579831,-2.5297461255455714e-5,-1.756761197379987e-8,-0.0023951260596151974,-2.546854998291281e-5,-1.7777564319951067e-8,-0.0023946640036132836,-2.5579325396643004e-5,-1.7916241394922998e-8,-0.0023941708783994835,-2.5608875350224024e-5,-1.7958135357141878e-8,-0.0023936800199459637,-2.5552141704174967e-5,-1.7896681829365477e-8,-0.00239322243029576,-2.5418865388500117e-5,-1.774311016303839e-8,-0.0023928218677541743,-2.5230314934074022e-5,-1.7522587181791123e-8,-0.0023924917832175113,-2.5014690159013176e-5,-1.7268730448048223e-8,-0.0023922342643846748,-2.480218762163173e-5,-1.7017686942652696e-8,-0.0023920407464684762,-2.4620565317509125e-5,-1.6802798466007283e-8,-0.0023918939307276768,-2.4491771693316273e-5,-1.6650542584010726e-8,-0.0023917702332855676,-2.442975015807349e-5,-1.6577888357278284e-8,-0.002391642329452238,-2.443909807420655e-5,-1.6590679729922046e-8,-0.002391481763245852,-2.4514179502452957e-5,-1.6682551340715887e-8,-0.0023912619080620466,-2.4638499724969643e-5,-1.6834129065335303e-8,-0.002390961805205984,-2.478455800610903e-5,-1.701276797456279e-8,-0.00239057134744484,-2.4915132198915024e-5,-1.717399678816932e-8,-0.0023900974268101054,-2.4987729973603072e-5,-1.7266795508165544e-8,-0.0023895689055318833,-2.496391501976109e-5,-1.7244787681999786e-8,-0.002389036165074365,-2.4823284691699932e-5,-1.7083063873624844e-8,-0.002388560578292379,-2.4577378315217863e-5,-1.6794918110509053e-8,-0.0023881937570601162,-2.4274142413621198e-5,-1.643724545979219e-8,-0.0023879553394346147,-2.3985163329236852e-5,-1.6095335313882396e-8,-0.002387823242597225,-2.3778727505381422e-5,-1.5850778179207802e-8,-0.002387743703083488,-2.3693514905278695e-5,-1.575012576846581e-8,-0.002387654469699301,-2.3727803248252375e-5,-1.57919573836453e-8,-0.0023875068224310926,-2.384701163322787e-5,-1.5935693828749185e-8,-0.0023872766838733636,-2.4000872036063545e-5,-1.6121849968027748e-8,-0.0023869645383715133,-2.4139837531397063e-5,-1.6291451853276617e-8,-0.0023865890688437295,-2.4225578577636494e-5,-1.6398545934918142e-8,-0.002386179207668243,-2.4235415814278647e-5,-1.641560182566368e-8,-0.0023857671367677994,-2.4162608465253676e-5,-1.633403013000638e-8,-0.00238538293231372,-2.4014446579879058e-5,-1.6162059832962554e-8,-0.002385050648932289,-2.3809267842749758e-5,-1.5921265822080736e-8,-0.0023847856192039767,-2.357281279621325e-5,-1.564223465313254e-8,-0.002384592973846085,-2.333418942320294e-5,-1.5359717819261274e-8,-0.0023844674152753756,-2.3121781930974167e-5,-1.5107704928910368e-8,-0.0023843942234786524,-2.2959461734624766e-5,-1.491486592392592e-8,-0.002384351361188566,-2.2863520256191973e-5,-1.4800873864748202e-8,-0.0023843123252193354,-2.28406536006252e-5,-1.4773996666932113e-8,-0.0023842493365599203,-2.2887020091128393e-5,-1.4829969279080835e-8,-0.0023841366567967904,-2.2988230871289267e-5,-1.4951960812478233e-8,-0.0023839539952364617,-2.312021069380629e-5,-1.5111546301631272e-8,-0.00238369008534005,-2.3251022890859802e-5,-1.527079819049034e-8,-0.0023833464925758774,-2.3344139544444378e-5,-1.5386101234343148e-8,-0.002382941139623567,-2.336411463944466e-5,-1.5414884137776942e-8,-0.002382509826925251,-2.328539769468119e-5,-1.532618136616557e-8,-0.0023821027927208825,-2.3103440347943915e-5,-1.5114003628255345e-8,-0.002381773349088804,-2.284408291453904e-5,-1.4808671898883374e-8,-0.0023815590512039917,-2.2563826220574735e-5,-1.4477243667166011e-8,-0.002381463086871345,-2.233471929550198e-5,-1.4205559558666824e-8,-0.0023814485095478804,-2.221697578834785e-5,-1.4065641166745777e-8,-0.002381452228381859,-2.2233998994991225e-5,-1.4085907881538568e-8,-0.002381411455037569,-2.2365307161191684e-5,-1.424262147988882e-8,-0.0023812864408547367,-2.2559894107652725e-5,-1.447559680357265e-8,-0.002381068549780454,-2.2758766135733266e-5,-1.4714854003566721e-8,-0.0023807747559344136,-2.291337561706086e-5,-1.4902487127724783e-8,-0.002380436370789755,-2.2994297064707167e-5,-1.5003052078078702e-8,-0.0023800885646524635,-2.299177707261808e-5,-1.5004382649226507e-8,-0.00237976327801646,-2.291211671228343e-5,-1.4913466509235396e-8,-0.0023794853741548514,-2.277298527889861e-5,-1.4750994633350504e-8,-0.0023792708581126575,-2.2599122259547465e-5,-1.4546281765613793e-8,-0.0023791261518308006,-2.241861685502684e-5,-1.4332799297124966e-8,-0.002379048025038435,-2.2259517123002332e-5,-1.4144070736454437e-8,-0.002379024159088545,-2.214660348294054e-5,-1.4009774292460906e-8,-0.0023790344674725033,-2.209831973031592e-5,-1.395206580492697e-8,-0.0023790533562057336,-2.2124111902023713e-5,-1.3982415286808531e-8,-0.002379052917494198,-2.222265873839312e-5,-1.4099513692685225e-8,-0.0023790067355613062,-2.238139064397462e-5,-1.428869841454831e-8,-0.002378893869389061,-2.257747476862916e-5,-1.4523091866730754e-8,-0.002378702581053121,-2.2780337278386994e-5,-1.476653436627111e-8,-0.002378433361551305,-2.2955662245878917e-5,-1.4978254730954575e-8,-0.002378100828725866,-2.3070719458652143e-5,-1.511914018072533e-8,-0.0023777339193535064,-2.310095367991105e-5,-1.515956714522654e-8,-0.0023773732909614727,-2.303748192499462e-5,-1.5088399696609955e-8,-0.0023770645160716658,-2.2893966475516838e-5,-1.492131520640025e-8,-0.002376846389675512,-2.2709585344523315e-5,-1.4704506770614907e-8,-0.0023767362857042957,-2.2543662682762967e-5,-1.4508420483594385e-8,-0.0023767187552697256,-2.2459283627088534e-5,-1.4408307234147157e-8,-0.0023767459611238515,-2.2499820209175073e-5,-1.445625065299755e-8,-0.0023767538670920077,-2.2670163085399482e-5,-1.4658709621930782e-8,-0.0023766872411040843,-2.2934727415897178e-5,-1.4973964372283597e-8,-0.0023765193201164465,-2.323369224805631e-5,-1.5331258141108677e-8,-0.0023762563410213845,-2.350669143427009e-5,-1.5658866089500266e-8,-0.002375928430938125,-2.371079089789632e-5,-1.5905466616878e-8,-0.0023755754730009244,-2.382701217823089e-5,-1.6047996748580552e-8,-0.0023752354105984904,-2.3857755177899014e-5,-1.6088754695381856e-8,-0.002374937643938984,-2.3820288416794153e-5,-1.6047823960984603e-8,-0.002374700710601401,-2.3740166302795695e-5,-1.5955340321399732e-8,-0.0023745323579410426,-2.364615831678585e-5,-1.584546360315411e-8,-0.002374430478790293,-2.356666639934087e-5,-1.575205426032653e-8,-0.002374384221762089,-2.352701024171114e-5,-1.57053729084508e-8,-0.0023743752258978223,-2.3547031862098734e-5,-1.572919102890182e-8,-0.0023743792463522813,-2.3638741087943782e-5,-1.5837991897107692e-8,-0.002374368580960303,-2.380412406762251e-5,-1.60343866710735e-8,-0.002374315566041234,-2.403369636554169e-5,-1.6307405665562255e-8,-0.0023741969508027684,-2.4306554286211768E-05,-1.663253558578559e-8,-0.0023739984897390765,-2.4592488041431972e-5,-1.6974166769903272e-8,-0.0023737187937815855,-2.485635257581502e-5,-1.729069822860392e-8,-0.0023733713634909127,-2.506433547134887e-5,-1.75419012861819e-8,-0.002372983923689407,-2.5191127286277645e-5,-1.769739737193478e-8,-0.002372594652471399,-2.5226659292504724e-5,-1.774469317666995e-8,-0.0023722453489884105,-2.518097690876975e-5,-1.7695084665231785e-8,-0.0023719720500917853,-2.508558541252764e-5,-1.758542950683843e-8,-0.0023717945137316262,-2.4989429346639012e-5,-1.7473550411127092e-8,-0.002371707467356645,-2.494832237534192e-5,-1.7425795584798645e-8,-0.002371677894372136,-2.5008867215187453e-5,-1.7497939205762146e-8,-0.0023716521953735695,-2.519167607485704e-5,-1.7715125311405072e-8,-0.002371573067713854,-2.548183725590846e-5,-1.8060341886620035e-8,-0.0023713996123746663,-2.5833052724984733e-5,-1.8479137373701417e-8,-0.002371120733790304,-2.6184543627960917e-5,-1.8899572452170946e-8,-0.002370755545988175,-2.6481976563885553e-5,-1.925703522704526e-8,-0.0023703426289241364,-2.6692240399045317e-5,-1.951183288718046e-8,-0.002369925545652223,-2.6807480392539526e-5,-1.9654094044252732e-8,-0.0023695414256623836,-2.6840554567015164e-5,-1.969852847864199e-8,-0.0023692152111846727,-2.681698378371743e-5,-1.9675010651785046e-8,-0.0023689586030738027,-2.676742403134865e-5,-1.961971546979294e-8,-0.002368771517557994,-2.672230169153053e-5,-1.9568738474777108e-8,-0.0023686442754798733,-2.6708491821190418e-5,-1.9554090992955217e-8,-0.0023685596467347297,-2.6747237733667733e-5,-1.960116950419851e-8,-0.0023684946354959537,-2.68525198499682e-5,-1.97267938434712e-8,-0.002368422377939945,-2.7029396546161804e-5,-1.9937245693158044e-8,-0.002368314731930507,-2.7272358283705946e-5,-2.0226327583010683e-8,-0.002368145999280894,-2.7564325967266348e-5,-2.0574158419038293e-8,-0.0023678977178564387,-2.7877297359742607e-5,-2.0947880438817348e-8,-0.002367563716932125,-2.8175607003251493e-5,-2.13054362009557e-8,-0.0023671538835179904,-2.842219417818171e-5,-2.1602912348808545e-8,-0.0023666947656918185,-2.8587099112517685e-5,-2.1804557557978034e-8,-0.002366225711058261,-2.865603679897383e-5,-2.1892948933762033e-8,-0.0023657906850576426,-2.8636207775475263e-5,-2.1875955583981355e-8,-0.0023654275601418958,-2.855700316341736e-5,-2.178772414823076e-8,-0.0023651577407058874,-2.8464659629023123e-5,-2.168254086275059e-8,-0.002364979157822262,-2.8411626526095733e-5,-2.162241058543541e-8,-0.0023648650418965824,-2.8442979454826838e-5,-2.166103733977592e-8,-0.0023647696710966484,-2.858341235909699e-5,-2.182833892955203e-8,-0.0023646404647817425,-2.8828964162584613e-5,-2.2120438590644107e-8,-0.002364433315624853,-2.9147094222646294e-5,-2.2499504905555506e-8,-0.0023641258489594833,-2.9486173871872614e-5,-2.2904806040155516e-8,-0.0023637232753826293,-2.979130710829397e-5,-2.3271375506734424e-8,-0.0023632546433513643,-3.0020135017275484e-5,-2.3548762139194928e-8,-0.002362761919778162,-3.0152532930312014e-5,-2.371261331000258e-8,-0.002362287259213515,-3.019176737033716e-5,-2.3766181246292998e-8,-0.002361863354709199,-3.015895406508579e-5,-2.3733906423839642e-8,-0.0023615089325091636,-3.0084812691876054e-5,-2.3651770841389847e-8,-0.00236122863993826,-3.0002168291456246e-5,-2.355846990290136e-8,-0.002361015342081342,-2.9940748794497447e-5,-2.3489231721847384e-8,-0.002360853090462664,-2.99242064708113e-5,-2.347223119682423e-8,-0.0023607198261957722,-2.9968579872684983e-5,-2.352671480071416e-8,-0.0023605896206938806,-3.008134175253829e-5,-2.3661849584525067e-8,-0.002360434817332799,-3.0260449420114613e-5,-2.3875596082544623e-8,-0.002360228724551759,-3.049336232044938e-5,-2.4153533560309604e-8,-0.002359949398259028,-3.0756647438100245e-5,-2.4468344706144205e-8,-0.0023595845450922696,-3.1017291850921676e-5,-2.4781284325725616e-8,-0.0023591366902662777,-3.1236974924948935e-5,-2.5047141991886597e-8,-0.0023586265980894577,-3.1379935910133564e-5,-2.5223485405296768e-8,-0.0023580922330621156,-3.1423318194842274e-5,-2.5282880705071384e-8,-0.002357581446433621,-3.136654245445751e-5,-2.5224014627911062e-8,-0.0023571393504713037,-3.123511772789739e-5,-2.507629936540768e-8,-0.0023567945569627356,-3.107585378526121e-5,-2.4894381030997065e-8,-0.002356549808293787,-3.094425143746427e-5,-2.474345004782824e-8,-0.0023563808398743354,-3.088856588907149e-5,-2.468058353057825e-8,-0.002356243673347264,-3.093631165990455e-5,-2.473883210055294e-8,-0.0023560873309623623,-3.108742146766624e-5,-2.491898425872327e-8,-0.002355867681615853,-3.131543790559243e-5,-2.5190695953120915e-8,-0.0023555585115042363,-3.157564626292947e-5,-2.5501820575724358e-8,-0.0023551570793018816,-3.1817414987353845e-5,-2.5792819079502532e-8,-0.0023546830395721335,-3.199708556138092e-5,-2.601196397786125e-8,-0.0023541715928763573,-3.2087761735616844e-5,-2.612699814404651e-8,-0.0023536634728575476,-3.208356074308803e-5,-2.6130313106072467e-8,-0.002353195112875602,-3.199796079202877e-5,-2.6037164980856268e-8,-0.0023527917127598285,-3.185788963483199e-5,-2.5878832104811108e-8,-0.0023524643421163408,-3.1696231806253835e-5,-2.569384848742031e-8,-0.002352210558042157,-3.15451429795799e-5,-2.5520122001298037e-8,-0.002352017095867703,-3.1431404225224024e-5,-2.5389404645823923e-8,-0.0023518632011028735,-3.137387309610943e-5,-2.532421829510982e-8,-0.0023517237164243985,-3.138241693585632e-5,-2.5336544634470662e-8,-0.0023515716747720653,-3.1457557889187125e-5,-2.542738407693742e-8,-0.002351380666688492,-3.159026777706401e-5,-2.5586503563180176e-8,-0.002351127544409854,-3.1761819323126654e-5,-2.5792232842799336e-8,-0.002350795997438297,-3.194420346482523e-5,-2.601189004377488e-8,-0.00235038109753939,-3.210218902073709e-5,-2.620411988036901e-8,-0.0023498939766626002,-3.2198362784118887e-5,-2.6324761207664516e-8,-0.002349364441336059,-3.2201906185988056e-5,-2.6337171516754927e-8,-0.002348838300113838,-3.2099820884316304e-5,-2.622549250364978e-8,-0.002348367104865175,-3.1906193387378433E-05,-2.6005638953133388e-8,-0.002347991928908947,-3.16632964565759e-5,-2.572670334096174e-8,-0.0023477278385863123,-3.1430895046698076e-5,-2.5458524871709287e-8,-0.0023475573302447783,-3.1266834683295797e-5,-2.526903432937616e-8,-0.0023474365947856223,-3.1207840834265524e-5,-2.5201788974958383e-8,-0.0023473111312674834,-3.125926073193481e-5,-2.5263855985966862e-8,-0.0023471329217680113,-3.139668630853095e-5,-2.5427484190962568e-8,-0.0023468725828316842,-3.157629805487812e-5,-2.564195034641037e-8,-0.00234652400711633,-3.174838223286182e-5,-2.5849203831761563e-8,-0.0023461023891960834,-3.1869477830964374e-5,-2.5998061315297644e-8,-0.0023456379459007243,-3.191071358278629e-5,-2.6054089874945166e-8,-0.002345167714297938,-3.1861618822297345e-5,-2.6004274687434745e-8,-0.0023447273964050676,-3.1729710102991125e-5,-2.5856743363241975e-8,-0.0023443447623778383,-3.15367263237694e-5,-2.5636504725218675e-8,-0.002344035611415732,-3.1312828941514695e-5,-2.5378716588854288e-8,-0.0023438025868741026,-3.1090321324122036e-5,-2.5121307043493483e-8,-0.002343636419494298,-3.0898215687290654e-5,-2.4898533605619872e-8,-0.0023435187346924568,-3.075840762917019e-5,-2.473640851696107e-8,-0.002343425470101371,-3.06836209512552e-5,-2.4650217468068794e-8,-0.002343330156203922,-3.067678824239108e-5,-2.46437581014699e-8,-0.0023432067557343844,-3.0731268964403044e-5,-2.4709591242115973e-8,-0.002343032205144756,-3.083142896996042e-5,-2.482971769728214e-8,-0.0023427890317182145,-3.09534849684997e-5,-2.4976536733214626e-8,-0.002342468429998982,-3.1066960867543575e-5,-2.5114480866863458e-8,-0.0023420738829506476,-3.113759753821509e-5,-2.520334251191813e-8,-0.0023416245655075696,-3.113286617338482e-5,-2.5204692814982757e-8,-0.002341156456037676,-3.1030702451985074e-5,-2.5092155875587517e-8,-0.0023407180452088712,-3.083007768640861e-5,-2.4863906224778936e-8,-0.0023403583393829482,-3.055874873840108e-5,-2.4551880478986413e-8,-0.002340109110049135,-3.027131810595971e-5,-2.421961909495806e-8,-0.0023399695530012623,-3.0033690127916367e-5,-2.394416454197952e-8,-0.0023399035996637175,-2.9898874983898596e-5,-2.378781857784365e-8,-0.0023398534173924984,-2.9886919236503446e-5,-2.3774659522504135e-8,-0.002339761711113448,-2.9979953784273124e-5,-2.388461211409085e-8,-0.0023395905205925225,-3.0132912884441697e-5,-2.4065731184666787e-8,-0.002339328969507674,-3.0291463113513845e-5,-2.4254908440399182e-8,-0.0023389905263682936,-3.0407909014329455e-5,-2.439632805788379e-8,-0.002338604647812188,-3.0450610353352113e-5,-2.4452510933726005e-8,-0.002338207386718835,-3.0406942615971795e-5,-2.4407957962391716e-8,-0.002337833512955816,-3.0281802581374335e-5,-2.4267646192649814e-8,-0.002337510916804099,-3.009374007485284e-5,-2.405271127085375e-8,-0.00233725717872705,-2.9870050109659613e-5,-2.379481298482102e-8,-0.0023370780896862574,-2.96415499392353e-5,-2.3530020163429226e-8,-0.0023369679571642664,-2.943765111817507e-5,-2.3292964938693384e-8,-0.002336911380731853,-2.928228272071026e-5,-2.311196745938867e-8,-0.0023368860519105425,-2.9191004014698512e-5,-2.3005572673000774e-8,-0.0023368660995786595,-2.9169474421886248e-5,-2.2980719814710166e-8,-0.002336825467155114,-2.921325593941368e-5,-2.3032512896595408e-8,-0.0023367409423963475,-2.9308629309781252e-5,-2.3145193486284356e-8,-0.002336594789812839,-2.94340434461076e-5,-2.329383537317645e-8,-0.002336377141683103,-2.9562078747041886e-5,-2.3446595994696407e-8,-0.0023360882937399465,-2.9662099579462933e-5,-2.3567732219797592e-8,-0.0023357408585416017,-2.9704065354320472e-5,-2.36219691020052e-8,-0.0023353611169372288,-2.9664178807460198e-5,-2.3581074777115405e-8,-0.002334987901996926,-2.953256184083392e-5,-2.3432902238347995e-8,-0.002334666656879615,-2.9321444023828176e-5,-2.3191111499019182e-8,-0.002334437144125591,-2.906967526378198e-5,-2.2900614292587276e-8,-0.0023343170286952335,-2.8837540628692366e-5,-2.263164135915559e-8,-0.002334289377364724,-2.868863915936848e-5,-2.245863079739621e-8,-0.0023343042731189534,-2.8664576401788524e-5,-2.243065985991554e-8,-0.002334297427240077,-2.8766728884431434e-5,-2.2550060161150142e-8,-0.00233421602436304,-2.8956937999179782e-5,-2.277304822604038e-8,-0.0023340366493231914,-2.9175695277364925e-5,-2.3030723691705274e-8,-0.0023337675567428337,-2.9365148437702835e-5,-2.325572494540632e-8,-0.002333439019167699,-2.948499872544599e-5,-2.3400714149062195e-8,-0.002333090235900311,-2.9517803647735512e-5,-2.3444668908795366e-8,-0.002332758701346869,-2.9466638538369463e-5,-2.3390385484474364e-8,-0.0023324738052357035,-2.934937562502968e-5,-2.3258055105401835e-8,-0.0023322540424882687,-2.919255582833955e-5,-2.3078281732160556e-8,-0.0023321064600515273,-2.902614663617285e-5,-2.2885999487207492e-8,-0.002332027286009202,-2.8879263050207602e-5,-2.271540058262342e-8,-0.0023320033619865835,-2.877662704188809e-5,-2.259567613496163e-8,-0.002332014289946477,-2.873576097567269e-5,-2.2547631244607782e-8,-0.002332035177135321,-2.8765014379972653e-5,-2.2581326280258576e-8,-0.0023320398449503863,-2.8862571973660708e-5,-2.2694919143851268e-8,-0.0023320042471653172,-2.9016654866027363e-5,-2.287492871831799e-8,-0.0023319096779583115,-2.9206946607571382e-5,-2.3097917898279694e-8,-0.002331745434296553,-2.940702053860624e-5,-2.333330260051453e-8,-0.0023315107913132412,-2.9587554741398894e-5,-2.354703004535643e-8,-0.002331216183994399,-2.9720241445388588e-5,-2.370604059396504e-8,-0.0023308833968589734,-2.9782371874826208e-5,-2.378354402409868e-8,-0.0023305442821816677,-2.976211745161164e-5,-2.376519028712881e-8,-0.002330237019842478,-2.9664138028036154e-5,-2.3655730605611676e-8,-0.002329998741183291,-2.9513937315933643e-5,-2.3484296706424633e-8,-0.0023298543227104943,-2.935776247905231e-5,-2.3304483190610554e-8,-0.0023298039688696283,-2.9254146272590037e-5,-2.3184600111912306e-8,-0.0023298161627486316,-2.9255771124284795e-5,-2.3186513526067538e-8,-0.002329833717182933,-2.9387407680729007e-5,-2.3339799540173714e-8,-0.00232979429485865,-2.963251445919433e-5,-2.3625939095795707e-8,-0.0023296555485235837,-2.993876684354111e-5,-2.3984573422930422e-8,-0.002329410031430962,-3.0240089226068864e-5,-2.433902191722381e-8,-0.002329082684861528,-3.048133910260082e-5,-2.4624941076546366e-8,-0.002328716252266335,-3.063272313348873e-5,-2.4807118980201846e-8,-0.0023283552432151315,-3.0691090518933916e-5,-2.4881121231374615e-8,-0.002328035235814446,-3.067316204035687e-5,-2.486564617259907e-8,-0.002327778453652459,-3.060672619689269e-5,-2.4792504271784795e-8,-0.0023275936390781573,-3.052324005011218e-5,-2.4698123022970693e-8,-0.002327477917828302,-3.0452785078251434e-5,-2.461765146651857e-8,-0.002327419112590265,-3.0420884134364205E-05,-2.458113394257909e-8,-0.0023273980040969685,-3.0446326357327403e-5,-2.4610839446448034e-8,-0.002327390669521878,-3.0539531096370326e-5,-2.4719266183936192e-8,-0.0023273711094918687,-3.070139397965835e-5,-2.4907774784639605e-8,-0.002327314298389271,-3.0922803788878494e-5,-2.5166047977091938e-8,-0.002327199604182002,-3.118523180180453e-5,-2.5472802828543438e-8,-0.0023270141555905726,-3.146275582275373e-5,-2.579813850369303e-8,-0.002326755507257778,-3.1725524753218145e-5,-2.6107509797618743e-8,-0.002326433025242352,-3.194433915074523e-5,-2.636696380227279e-8,-0.00232606757107646,-3.2095816875852493E-05,-2.6549064620552972e-8,-0.0023256892347763903,-3.216744119251998e-5,-2.663874128588696e-8,-0.0023253330548705857,-3.216173673953351e-5,-2.6638224765391106e-8,-0.002325032753407156,-3.209873777588853e-5,-2.6570101510359574e-8,-0.0023248127299698297,-3.201549252585091e-5,-2.6476970450584947e-8,-0.002324679419257254,-3.1960909325668365e-5,-2.641563798078472e-8,-0.002324614738368727,-3.198471760129885e-5,-2.6444333423830437e-8,-0.0023245759518624605,-3.2121629871326e-5,-2.6604171937243653e-8,-0.002324505785473568,-3.237602913514e-5,-2.6901108196581215e-8,-0.0023243518127423596,-3.271591879496891e-5,-2.7298653087985366e-8,-0.00232408675837698,-3.308237216229446e-5,-2.772870037338478e-8,-0.0023237183421038277,-3.341134600686158e-5,-2.8116827565107905e-8,-0.0023232834120907914,-3.365603424276712e-5,-2.8408283829963784e-8,-0.0023228315250686865,-3.379852594585868e-5,-2.8581601521190148e-8,-0.0023224081917482394,-3.384823308876176e-5,-2.8646918820079517e-8,-0.0023220447513682056,-3.3832392487888304e-5,-2.8635163154902712e-8,-0.0023217556857669294,-3.378539642682306e-5,-2.8585851446400122e-8,-0.0023215406467797794,-3.374081042009061e-5,-2.8537897313167375e-8,-0.002321388188291431,-3.3726795999537757e-5,-2.8524238705810844e-8,-0.002321279357326137,-3.376398701175925e-5,-2.8569237172436706e-8,-0.002321190580067218,-3.3864561252015965e-5,-2.8687469509032147e-8,-0.0023210960815719848,-3.403170234189584e-5,-2.8883032294239802e-8,-0.0023209703112198727,-3.425921865422195e-5,-2.9149091545929388e-8,-0.0023207907692627456,-3.453153525414017e-5,-2.9467892708359517e-8,-0.002320541348280485,-3.4824632907782434e-5,-2.9811852888919886e-8,-0.002320215787982576,-3.510859047522046e-5,-3.014647119465895e-8,-0.002319820326628823,-3.5352020534393274e-5,-3.0435397604764066e-8,-0.002319374429235887,-3.5528027890910064e-5,-3.064726176518535e-8,-0.0023189086929537852,-3.562058707993201e-5,-3.0763027321289934e-8,-0.0023184596969337903,-3.562967431567573e-5,-3.078198150000386e-8,-0.0023180625159862473,-3.557348082881343e-5,-3.072444153370548e-8,-0.0023177424037032486,-3.548664144440317e-5,-3.062992075551395e-8,-0.0023175074984734543,-3.5414226963611394e-5,-3.0550393228261676e-8,-0.0023173444808164832,-3.5402047537825155e-5,-3.053919267474974e-8,-0.002317219043515323,-3.548478675955916e-5,-3.063722510387765e-8,-0.0023170825452282313,-3.567474791693208e-5,-3.085971138660794e-8,-0.0023168847150472982,-3.595522696647335e-5,-3.118819869005432e-8,-0.0023165894160324624,-3.628263070896687e-5,-3.157275232013399e-8,-0.0023161874027681608,-3.659879209134966e-5,-3.194610912976707e-8,-0.002315699674318987,-3.6849589557777495e-5,-3.224527727736699e-8,-0.002315169322935829,-3.7001624225642415e-5,-3.2430960432418255e-8,-0.002314646199700832,-3.704960690848625e-5,-3.249625130896201e-8,-0.0023141720768090047,-3.701289220350198e-5,-3.246278529929417e-8,-0.0023137719944856,-3.692533958583261e-5,-3.2369181497699095e-8,-0.002313452787336121,-3.682436937453514e-5,-3.225850415814049e-8,-0.002313206349815514,-3.674303927821273e-5,-3.216911319350878e-8,-0.002313014513893187,-3.6705975238209506e-5,-3.21298653443614e-8,-0.002312853494672486,-3.6728114464930174e-5,-3.215852030546475e-8,-0.0023126972338266515,-3.681481612065799e-5,-3.226175333094992e-8,-0.0023125198655322456,-3.696232465768661e-5,-3.24356389814037e-8,-0.002312297893017724,-3.7158178604489365e-5,-3.266612338087536e-8,-0.0023120126639769563,-3.7381726521067834e-5,-3.292962936131338e-8,-0.002311653424383115,-3.760539504033395e-5,-3.319450237088803e-8,-0.0023112206387045776,-3.7797568417562995e-5,-3.3424282093674193e-8,-0.002310728536788081,-3.7927679776685745e-5,-3.3583518129125895e-8,-0.0023102052694704335,-3.7973269632081315e-5,-3.3645883688399196e-8,-0.002309689114953737,-3.792741024238655e-5,-3.3602769741033175e-8,-0.002309220367796046,-3.780365018678395e-5,-3.34690861984953e-8,-0.0023088306454635615,-3.763560952953059e-5,-3.328295822689161e-8,-0.0023085331437765486,-3.7470095324169245e-5,-3.30979876994702e-8,-0.0023083175552887736,-3.7355299923970754e-5,-3.296981668241202e-8,-0.0023081517291295645,-3.732774019023125e-5,-3.2941121239366296e-8,-0.0023079897002703125,-3.740204716129852e-5,-3.302971182509186e-8,-0.0023077837234663535,-3.7566599907923365e-5,-3.322321468544985e-8,-0.0023074969972720206,-3.778618699150824e-5,-3.348181192736664e-8,-0.002307113642460123,-3.801111136025596e-5,-3.374850764245679e-8,-0.002306642967714749,-3.819047303514916e-5,-3.3964389987148476e-8,-0.0023061164179579287,-3.8285780849737995e-5,-3.40844388236443e-8,-0.0023055780533455137,-3.828042081343265e-5,-3.408864550347391e-8,-0.0023050720265702773,-3.818189606197478e-5,-3.3984813393723e-8,-0.0023046316398957264,-3.801683262139339e-5,-3.3802987367837267e-8,-0.00230427334288954,-3.7821682524135505e-5,-3.358486019035794e-8,-0.0023039963644423222,-3.7633111972824855e-5,-3.337272686138091e-8,-0.002303786336992908,-3.748100255910153e-5,-3.320135317605305e-8,-0.0023036204437704402,-3.738497046118624e-5,-3.3093833427999516e-8,-0.002303472191629436,-3.735370107695463e-5,-3.306068870435814e-8,-0.002303315004370737,-3.738581151208172e-5,-3.310077586295026e-8,-0.0023031247168510474,-3.7471158388023855e-5,-3.32027746012847e-8,-0.002302881512812013,-3.759204402485969e-5,-3.334659244660564e-8,-0.002302571933303701,-3.772437161974421e-5,-3.3504698526810776e-8,-0.0023021913377570913,-3.7839318120416736e-5,-3.364401288936653e-8,-0.0023017466592312736,-3.790639624397905e-5,-3.3729365113627754e-8,-0.002301258499438132,-3.789868982799408e-5,-3.3729469251606456e-8,-0.0023007607416336475,-3.780025860121621e-5,-3.362545368835861e-8,-0.0023002955727393715,-3.761398422436507e-5,-3.341996763976326e-8,-0.002299903135206751,-3.7366095073082776e-5,-3.314251715734096e-8,-0.002299608241321281,-3.7103131944292765e-5,-3.284613208267745e-8,-0.002299409859179875,-3.687991824381861e-5,-3.259369265324991e-8,-0.002299279285932504,-3.674229260682073e-5,-3.243819215569253e-8,-0.002299168823546775,-3.6712133551511284e-5,-3.240551750739637e-8,-0.002299027108588892,-3.678121604662647e-5,-3.248721326687466e-8,-0.0022988143521173038,-3.6915489318077446e-5,-3.2645093229978927e-8,-0.0022985121434507642,-3.706652291671608e-5,-3.282408232012828e-8,-0.0022981259731840605,-3.718510344513982e-5,-3.296765596479805e-8,-0.002297681444338649,-3.723291069296564e-5,-3.3031266622567177e-8,-0.0022972163826716816,-3.7189964304819385e-5,-3.299108395567988e-8,-0.002296771289655474,-3.705699893642229e-5,-3.284699771750507e-8,-0.0022963804162048507,-3.685301926143306e-5,-3.2620069474865724e-8,-0.0022960653412444033,-3.66092080660818e-5,-3.234570517089325e-8,-0.0022958321994601843,-3.6361104881873565e-5,-3.206471491834107e-8,-0.002295672602594345,-3.6141216362085723e-5,-3.181475278986125e-8,-0.002295567237924504,-3.5973699239903435e-5,-3.1624065630400416e-8,-0.0022954906243840873,-3.5871742882865936e-5,-3.150833328403298e-8,-0.002295415668514197,-3.583734289021038e-5,-3.1470303577740756e-8,-0.002295317231199662,-3.5862619387422194e-5,-3.15012747362056e-8,-0.002295174587684972,-3.593175025312556e-5,-3.158334026307848e-8,-0.0022949731503511582,-3.6022919077861825e-5,-3.169165951737354e-8,-0.0022947059593891967,-3.6110200777476796e-5,-3.1796616976641045e-8,-0.0022943752972072132,-3.616576445549112e-5,-3.186629056886203e-8,-0.002293994395917849,-3.616308491839482e-5,-3.1870055583428156e-8,-0.0022935884913046806,-3.608188698839053e-5,-3.1784218012190775e-8,-0.002293193570220022,-3.591490428985524e-5,-3.159981966187581e-8,-0.002292850700555697,-3.567488665407547e-5,-3.1330816136700846e-8,-0.0022925949121289655,-3.539799888834784e-5,-3.101814903088958e-8,-0.002292441079759657,-3.5138654460845667e-5,-3.072396888884776e-8,-0.0022923737482313526,-3.495377210004042e-5,-3.051367324612897e-8,-0.0022923487357085484,-3.4881645478195986e-5,-3.043169702193616e-8,-0.0022923082878944408,-3.492651926994169e-5,-3.048374540670587e-8,-0.0022922023645509603,-3.5057777584302726e-5,-3.063565736187704e-8,-0.002292004823110608,-3.522321745129158e-5,-3.0828335408719365e-8,-0.002291718031987991,-3.536782916311345e-5,-3.099901295008251e-8,-0.0022913672330241424,-3.544908418763723e-5,-3.109866179650461e-8,-0.002290990059070643,-3.544468044302114e-5,-3.1100956371175926e-8,-0.0022906260283061795,-3.535334262818601e-5,-3.1003445892457103e-8,-0.0022903084934227853,-3.5191150650947184e-5,-3.082366001102285e-8,-0.002290059645962504,-3.4985740590012e-5,-3.059271116004469e-8,-0.002289888308889336,-3.476990829758171e-5,-3.034806608016834e-8,-0.002289790112933232,-3.457553303386381e-5,-3.0126527996035566e-8,-0.0022897496397346197,-3.442855427528838e-5,-2.995832382862933e-8,-0.002289743927638933,-3.434557978525591e-5,-2.986303752963534e-8,-0.002289746588173612,-3.433235628935457e-5,-2.984772570762622e-8,-0.002289731806192985,-3.438399705495003e-5,-2.9907130752155833e-8,-0.0022896776371395563,-3.448658144544781e-5,-3.0025539997263514e-8,-0.002289568333240068,-3.4619516180843974e-5,-3.0179546880832127e-8,-0.002289395830989697,-3.47581192864351e-5,-3.034104020878307e-8,-0.0022891606980330746,-3.487624615385044e-5,-3.048017863245395e-8,-0.0022888727561433233,-3.494909690242651e-5,-3.0568516096956604e-8,-0.0022885513883073552,-3.4956571873741554e-5,-3.058275352336701e-8,-0.002288225022291335,-3.4887629910986334e-5,-3.050971134872694e-8,-0.0022879285346280604,-3.474558680788467e-5,-3.0352495822772635e-8,-0.002287697014005668,-3.4552914595581084e-5,-3.013619110840197e-8,-0.002287555258528512,-3.4352264826514714e-5,-2.990924381258495e-8,-0.002287505296293813,-3.419939650252042e-5,-2.9735499630763315e-8,-0.0022875185392014596,-3.414608973943245e-5,-2.9674650423240414e-8,-0.002287540654767576,-3.421841512072958e-5,-2.975725826269698e-8,-0.0022875109191809696,-3.44028369555647e-5,-2.9968681291149824e-8,-0.0022873866431173677,-3.4650463730046105e-5,-3.025373403994287e-8,-0.002287158332342123,-3.489747604808045e-5,-3.05398504214709e-8,-0.0022868484445149025,-3.5088852879194874e-5,-3.076405861695239e-8,-0.0022864982748903593,-3.519317267669936e-5,-3.0889870385194194e-8,-0.002286152562989151,-3.520525313625685e-5,-3.091044534452543e-8,-0.002285848351995372,-3.514064936767193e-5,-3.084259232463975e-8,-0.0022856095545583004,-3.5027359972136336e-5,-3.071759518882632e-8,-0.0022854458582351883,-3.4898128170332654e-5,-3.057260162184731e-8,-0.00228535406658743,-3.4784542000901826e-5,-3.0443888195242704e-8,-0.0022853205545476122,-3.471284955278595e-5,-3.0361936066289834e-8,-0.0022853242782383083,-3.4701131164836125e-5,-3.034799776992067e-8,-0.0022853401172956323,-3.475768108400181e-5,-3.0412079618106474e-8,-0.0022853423369857883,-3.488055943683937e-5,-3.055234935450222e-8,-0.0022853079331452636,-3.505829657473036e-5,-3.075595068991225e-8,-0.002285219540357508,-3.5271714452898415e-5,-3.1001145596984345e-8,-0.0022850675526555806,-3.5496617417606936e-5,-3.12604400979373e-8,-0.0022848513167228906,-3.5706935033342264e-5,-3.150417106161792e-8,-0.0022845794630886704,-3.587803665272236e-5,-3.170422273669897e-8,-0.0022842694256383967,-3.599011192601114e-5,-3.183778648177624e-8,-0.00228394612191299,-3.6031573527607656e-5,-3.1891182357691236e-8,-0.002283639559272516,-3.6002497987339216e-5,-3.1863829412209876e-8,-0.0022833807000028155,-3.591781523569677e-5,-3.17720571397393e-8,-0.002283194835117489,-3.580895633737797e-5,-3.1651234007313374e-8,-0.0022830926687873554,-3.572151453512309e-5,-3.155331255203707e-8,-0.0022830615120185546,-3.57062013456485e-5,-3.1536574359696766e-8,-0.002283061910144253,-3.5802515052971905e-5,-3.1646865496677e-8,-0.0022830358716624693,-3.602024681505544e-5,-3.1896238479571526e-8,-0.002282927452508825,-3.6329876875859376e-5,-3.2251745516056244e-8,-0.0022827062816265977,-3.667107036558002e-5,-3.264498114105585e-8,-0.0022823796709535715,-3.697658131461953e-5,-3.299928501542816e-8,-0.0022819864232603475,-3.719735460090399e-5,-3.325834215160285e-8,-0.0022815785791103415,-3.731532145924846e-5,-3.340080377913226e-8,-0.0022812032084957965,-3.734128205682896e-5,-3.3438034270071183e-8,-0.002280891871937716,-3.7304369843453694e-5,-3.3402379181189025e-8,-0.00228065814223643,-3.724061603780327e-5,-3.333439792808469e-8,-0.0022805000038872204,-3.718451764462349e-5,-3.327337443004344e-8,-0.0022804039844390635,-3.7164175330215406e-5,-3.325171023981485e-8,-0.002280349211641098,-3.7198996010101034e-5,-3.3292116454290506e-8,-0.0022803108906574855,-3.729879835377055e-5,-3.3406389414515064e-8,-0.002280263357184188,-3.746369139111816e-5,-3.359514042205903e-8,-0.0022801829142725643,-3.76845561343038e-5,-3.3848312986735143e-8,-0.0022800505440541212,-3.794419075362827e-5,-3.4146529008746734e-8,-0.002279854394613768,-3.821932509749697e-5,-3.446344080378021e-8,-0.002279591667380771,-3.8483592197162534e-5,-3.4769134737453335e-8,-0.0022792694769532365,-3.8711202674219674e-5,-3.503427192200282e-8,-0.002278904453787725,-3.888090559245803e-5,-3.523451107453436e-8,-0.002278520994022731,-3.897981593858639e-5,-3.5354790439935546e-8,-0.0022781481387727765,-3.900661067575245e-5,-3.539296714173588e-8,-0.002277815196272408,-3.897358681368924e-5,-3.536228182941742e-8,-0.0022775462453310945,-3.8907078916294634e-5,-3.5292063500544346e-8,-0.0022773537578315915,-3.88453723888866e-5,-3.5225611058902015e-8,-0.0022772323066882973,-3.88328268780596e-5,-3.5213664861948535e-8,-0.002277154719218136,-3.89093864059176e-5,-3.5302432695555914e-8,-0.0022770743013513575,-3.909671606337604e-5,-3.551757119061668e-8,-0.0022769361938568297,-3.93858582620144e-5,-3.584980135264396e-8,-0.0022766965332619883,-3.9734321357865546e-5,-3.625133407898208e-8,-0.002276341115211891,-4.007817531691193e-5,-3.664954907985626e-8,-0.0022758922917568173,-4.035551223226274e-5,-3.697373201351628e-8,-0.0022753992488523085,-4.0528709716748785e-5,-3.7180470529775404e-8,-0.0022749180581077707,-4.059371095721217e-5,-3.726429156698758e-8,-0.0022744933359550488,-4.057442247318822e-5,-3.7251455930854735e-8,-0.0022741491150162865,-4.0509294110553696e-5,-3.718495011122612e-8,-0.0022738888817427747,-4.043836498717976e-5,-3.7109976390399145e-8,-0.0022737006122365193,-4.0394935220934196e-5,-3.706454561541384e-8,-0.0022735628534328385,-4.0401953921682715e-5,-3.7075254422409025e-8,-0.0022734497848497666,-4.047142453162688e-5,-3.7156399239620105e-8,-0.0022733348583905645,-4.060512607912676e-5,-3.731060746631049e-8,-0.0022731934580261463,-4.0795705115488924e-5,-3.752998308750005e-8,-0.00227300512552994,-4.102789765037355e-5,-3.7797496246937914e-8,-0.0022727556876095496,-4.128004247365327e-5,-3.808875005360056e-8,-0.002272439315133133,-4.152626986166031e-5,-3.837450044928072e-8,-0.0022720601389120266,-4.173970137526162e-5,-3.862427282168575e-8,-0.0022716327599983676,-4.1896595491755895e-5,-3.8811002059216745e-8,-0.0022711810539608945,-4.1980908267824755e-5,-3.8916135263443654e-8,-0.00227073496835204,-4.1988409487146426e-5,-3.8934279948754235e-8,-0.002270325441507122,-4.192927899551331e-5,-3.8876227340469446e-8,-0.002269978122215947,-4.1828177158028644e-5,-3.8769219119330844e-8,-0.00226970702629286,-4.172123601459589e-5,-3.865378498185866e-8,-0.0022695094556672577,-4.1649926366732944e-5,-3.857700174244831e-8,-0.002269363629343624,-4.165219466353312e-5,-3.858250738357373e-8,-0.0022692306298698933,-4.175204263636338e-5,-3.869853604806306e-8,-0.0022690619905320303,-4.195007217268219e-5,-3.892687238355782e-8,-0.0022688127656313537,-4.22189359377569e-5,-3.923733305382498e-8,-0.0022684568851602466,-4.2507766167857475e-5,-3.9572560430991624e-8,-0.002267998326091102,-4.275672312180571e-5,-3.986449700076138e-8,-0.0022674714734245843,-4.291695195769548e-5,-4.005713795935709e-8,-0.0022669291597497737,-4.296662160132691e-5,-4.012487438155247e-8,-0.0022664242564903914,-4.2915295188340505e-5,-4.007760659904807e-8,-0.0022659940652150863,-4.279611123618072e-5,-3.995206908990567e-8,-0.002265653503930502,-4.265191244855833e-5,-3.979631362883339e-8,-0.0022653969340296893,-4.252261313043785e-5,-3.965552378432056e-8,-0.0022652046236925952,-4.243769493960012e-5,-3.95634861733223e-8,-0.002265049794477369,-4.241380155046763e-5,-3.9539697044729416e-8,-0.0022649041082798216,-4.245547864330964e-5,-3.9589986428501323e-8,-0.00226474124918325,-4.255711975844435e-5,-3.970856627954339e-8,-0.0022645391613217362,-4.270500455743162e-5,-3.988028806109427e-8,-0.0022642816799547678,-4.287910780361013e-5,-4.008272167427198e-8,-0.002263960087918555,-4.3054900809357125e-5,-4.028824466566982e-8,-0.002263574719130994,-4.320567695985923e-5,-4.0466687322319195e-8,-0.0022631362204558894,-4.330590165289405e-5,-4.058908270551296e-8,-0.0022626656639188536,-4.3335670173572484e-5,-4.063264302083518e-8,-0.0022621925719040524,-4.328569846595285e-5,-4.0586363627982455e-8,-0.0022617502460647106,-4.316153538197371e-5,-4.045582192050501e-8,-0.0022613686905826485,-4.298517863381172e-5,-4.02651379123331e-8,-0.002261066659628733,-4.279254577136207e-5,-4.0054328367112326e-8,-0.002260845254738966,-4.2626492298289355e-5,-3.9871642378719045e-8,-0.002260685452234943,-4.252671070386968e-5,-3.976228848354713e-8,-0.0022605509404802003,-4.251909481418603e-5,-3.9756384567982686e-8,-0.002260396131472639,-4.260760900980759e-5,-3.985954021720435e-8,-0.002260177694963087,-4.277131989594658e-5,-4.004914789052283e-8,-0.002259866766101412,-4.2968166060102e-5,-4.027830918497738e-8,-0.002259458210637815,-4.3145372744970057e-5,-4.048742944540769e-8,-0.0022589733613924707,-4.3254145791464096e-5,-4.062085419440258e-8,-0.002258454294531585,-4.326392054614321e-5,-4.064315339359069e-8,-0.0022579511436190353,-4.3170655978861896e-5,-4.0548734377790825e-8,-0.0022575073922757242,-4.2995916330466316e-5,-4.036104128218041e-8,-0.0022571489718927946,-4.2777865460527206e-5,-4.012258232791228e-8,-0.0022568805697357453,-4.255884861731508e-5,-3.988102778980891e-8,-0.0022566887016491335,-4.2374725671374876e-5,-3.967716426716014e-8,-0.002256548444902981,-4.2248875604791526e-5,-3.953799287615894e-8,-0.002256430457477919,-4.2190877177150564e-5,-3.9475031093020603e-8,-0.0022563063262742698,-4.219814048656945e-5,-3.9485967035225393e-8,-0.0022561518892659908,-4.225864272457631e-5,-3.9557654446514965e-8,-0.0022559490620141626,-4.235363463796422e-5,-3.9669178707093105e-8,-0.0022556869196150115,-4.245992921932744e-5,-3.9794503964805914e-8,-0.002255362650026142,-4.2551960746738174e-5,-3.990484416493067e-8,-0.00225498259128279,-4.260418776905965e-5,-3.9971363026047316e-8,-0.0022545629951551973,-4.259443556510106e-5,-3.996888136177645e-8,-0.002254129647814144,-4.2508371758274345e-5,-3.988086135327218e-8,-0.0022537151993712646,-4.234455193159232e-5,-3.970509132900266e-8,-0.00225335330209883,-4.2118407480589275e-5,-3.9458268320626675e-8,-0.0022530698916637996,-4.186263655252896e-5,-3.917660732834667e-8,-0.0022528740190121094,-4.162180095563857e-5,-3.8909958155369906e-8,-0.002252752217450626,-4.1441201489894646e-5,-3.870944411348118e-8,-0.0022526698614514173,-4.1353325375690816e-5,-3.861225482382609e-8,-0.0022525801000990234,-4.136713774543938e-5,-3.862947201208333e-8,-0.0022524373733573866,-4.146464933767827e-5,-3.8741929345072135e-8,-0.002252210525373519,-4.1605994325611274e-5,-3.89055852814104e-8,-0.0022518911377591767,-4.1740803405337114e-5,-3.906405012373955e-8,-0.0022514949999607,-4.182182996698903e-5,-3.9163825942864726e-8,-0.0022510569958787445,-4.181681135790668e-5,-3.916776403591502e-8,-0.002250621342141275,-4.171557236139564e-5,-3.906331946104076e-8,-0.0022502301294550285,-4.15308425955026e-5,-3.886378396708598e-8,-0.002249913449319389,-4.129306958437996e-5,-3.860271679338941e-8,-0.002249683726453224,-4.104130530740587e-5,-3.832383998911728e-8,-0.002249535283975047,-4.0813295369522146e-5,-3.8069884935159855e-8,-0.0022494483048860476,-4.0637702512655366e-5,-3.787370255806774e-8,-0.002249395075586441,-4.053008747505458e-5,-3.775352485809548e-8,-0.002249346228387429,-4.049258564563083e-5,-3.771239510768213e-8,-0.0022492755010270257,-4.0516052192387256e-5,-3.774046242612261e-8,-0.0022491626277783426,-4.058321264511812e-5,-3.7818520580070174e-8,-0.0022489947436900195,-4.0671780343274614e-5,-3.7921589641568395e-8,-0.002248766957445944,-4.075711343877572e-5,-3.8021986797907276e-8,-0.0022484826632076446,-4.081452585563666e-5,-3.8091951714669235e-8,-0.002248153838048646,-4.0821728247974105e-5,-3.8106341905870566e-8,-0.002247801079960905,-4.076195151424849e-5,-3.804605949402225e-8,-0.002247452593148405,-4.0628012018448585e-5,-3.790257146744856e-8,-0.0022471409301629466,-4.042682459236734e-5,-3.768302732502345e-8,-0.00224689646765886,-4.018263561138499e-5,-3.7414039313886286e-8,-0.0022467379334867687,-3.993603737751534e-5,-3.71407722402369e-8,-0.0022466629330224067,-3.973603731085064e-5,-3.6918205817805125e-8,-0.0022466437937668942,-3.962548372148706e-5,-3.679484541297912e-8,-0.0022466332626418345,-3.962510713746668e-5,-3.679475135912498e-8,-0.0022465795112438054,-3.972433968955547e-5,-3.690704831574807e-8,-0.002246443844399572,-3.988431149987231e-5,-3.7089012125681974e-8,-0.0022462127331009103,-4.005144641550452e-5,-3.728104124941213e-8,-0.002245899726127667,-4.017461828870116e-5,-3.742571513024981e-8,-0.0022455385610210964,-4.021870065905526e-5,-3.7482979092119534e-8,-0.002245171991501091,-4.017101257208119e-5,-3.743755699529912e-8,-0.0022448406857828573,-4.0040872064166135e-5,-3.729877117661851e-8,-0.002244574842630709,-3.985434389103751e-5,-3.709499167218068e-8,-0.00224438953153147,-3.964658315948225e-5,-3.6865281132306804e-8,-0.002244283739282433,-3.9453769098646514e-5,-3.6650395806950313e-8,-0.0022442425786291715,-3.9306138580895836e-5,-3.648483998275852e-8,-0.0022442417262513318,-3.9223235736532204e-5,-3.639130046745756e-8,-0.002244252825270072,-3.921193238763609e-5,-3.637818766334322e-8,-0.002244248580715095,-3.926701981343953e-5,-3.6440147045714485e-8,-0.002244206665010873,-3.9373614587264704e-5,-3.656072898333406e-8,-0.0022441120851505714,-3.9510449394149734e-5,-3.671615220159067e-8,-0.002243958158082218,-3.9653224799783987e-5,-3.687916687487293e-8,-0.002243746569982561,-3.977754481038861e-5,-3.702240992509356e-8,-0.0022434870012997396,-3.986143852984975e-5,-3.7121211995940224e-8,-0.002243196539261886,-3.9887788360821346e-5,-3.715623183345602e-8,-0.002242898748955786,-3.984704324325663e-5,-3.711640914072695e-8,-0.0022426218280860106,-3.974042123909537e-5,-3.7002547544910815e-8,-0.0022423948446182447,-3.9583186860967147e-5,-3.683110598566761e-8,-0.002242241179018976,-3.940641160112801e-5,-3.663638469156625e-8,-0.00224216956598242,-3.925442123747653e-5,-3.646787712775838e-8,-0.002242165743912653,-3.917522022806908e-5,-3.63796461283401e-8,-0.0022421904430927637,-3.92042809462743e-5,-3.641210968875951e-8,-0.0022421888363345576,-3.934800163595166e-5,-3.657333079382851e-8,-0.0022421101287026773,-3.957707112540881e-5,-3.683135600408295e-8,-0.0022419276065207064,-3.983591431005777e-5,-3.712457446970693e-8,-0.0022416477393448642,-4.0063753426798325e-5,-3.73851192566621e-8,-0.0022413045475564155,-4.0215340963561835e-5,-3.7561970560884604e-8,-0.0022409449338205603,-4.0271819274777205e-5,-3.7633148529958066e-8,-0.0022406136872176463,-4.0240309319839884e-5,-3.7605480019251675e-8,-0.002240343470877864,-4.0146522531138636e-5,-3.750668536605433e-8,-0.002240150677565745,-4.002533269708593e-5,-3.7375157741474976e-8,-0.002240035711440105,-3.991240818250783e-5,-3.725076167766338e-8,-0.002239985804253139,-3.9838071993125945e-5,-3.7167903625866e-8,-0.0022399789880449567,-3.9823368021104823e-5,-3.715090319780558e-8,-0.0022399885175577506,-3.9878050065343086e-5,-3.721146830451135e-8,-0.002239987272940578,-4.000036042511323e-5,-3.734824122526935e-8,-0.0022399516443405575,-4.017838712946535e-5,-3.7548239619326853e-8,-0.002239864499431365,-4.0392596449678075e-5,-3.778973496167977e-8,-0.0022397169957782525,-4.061908331716644e-5,-3.804599535317224e-8,-0.002239509163109704,-4.083302738834809e-5,-3.828923970936112e-8,-0.00223924945058436,-4.101186342286681e-5,-3.8494196874711744e-8,-0.002238953599371396,-4.113797301515876e-5,-3.8641048926455915e-8,-0.0022386430618668383,-4.120100796303263e-5,-3.871793082545036e-8,-0.002238342944066297,-4.1200001151770064e-5,-3.872324181388282e-8,-0.0022380791839847307,-4.114530686782865e-5,-3.866788607866194e-8,-0.002237874380510262,-4.1060002066053976e-5,-3.857703907310176e-8,-0.00223774180926945,-4.097948394853225e-5,-3.848995354296783e-8,-0.00223767825635013,-4.094712480839855e-5,-3.845528558322179e-8,-0.002237658399419641,-4.1004061797862145e-5,-3.851967858482813e-8,-0.0022376356888406273,-4.11738325963669e-5,-3.8710382858211906e-8,-0.0022375542283195344,-4.144791944811161e-5,-3.9018797372337954e-8,-0.002237369976256706,-4.178239537910177e-5,-3.939648342269923e-8,-0.0022370705865857117,-4.211192540677199e-5,-3.97707040733493e-8,-0.002236681021205403,-4.237528136520402e-5,-4.0072894403993155e-8,-0.0022362515136581293,-4.2537390808246587e-5,-4.026326754963274e-8,-0.0022358368811051695,-4.2596592517748946e-5,-4.033897314519272e-8,-0.002235479455892738,-4.257760540665977e-5,-4.032647668471118e-8,-0.0022352014732815342,-4.251839568376904e-5,-4.026725325138652e-8,-0.0022350055128588357,-4.245824814262653e-5,-4.0204769494537755e-8,-0.002234879072292001,-4.2429981973685345e-5,-4.017588031994506e-8,-0.002234800143287794,-4.245617891594765e-5,-4.020647152992803e-8,-0.0022347421748675988,-4.254810062132713e-5,-4.030997076660549e-8,-0.002234678089860464,-4.2706022024608e-5,-4.04874490318804e-8,-0.002234583596800719,-4.292040013149177e-5,-4.072877100486095e-8,-0.0022344399196055193,-4.3173776366831664e-5,-4.101470592062815e-8,-0.002234235865992565,-4.344333894544913e-5,-4.13198704377615e-8,-0.002233969089473579,-4.370403283753067e-5,-4.1616299339581775e-8,-0.0022336463289874286,-4.393200590097062e-5,-4.1877337327494744e-8,-0.002233282501130823,-4.410796757286399e-5,-4.2081351239347404e-8,-0.0022328987863395795,-4.422003807868895e-5,-4.2214822045642e-8,-0.0022325199496675764,-4.426587777665794e-5,-4.227465236873269e-8,-0.0022321710530385326,-4.4253972215963034e-5,-4.226962591744968e-8,-0.0022318736432929433,-4.420392191805795e-5,-4.2220888713159193e-8,-0.0022316414113256896,-4.414545555348796e-5,-4.216110347774086e-8,-0.0022314754270215662,-4.4115440270257426e-5,-4.213136166132721e-8,-0.002231359823442391,-4.415175418461966e-5,-4.217445054382591e-8,-0.0022312601532689185,-4.4283382554984865e-5,-4.232367827957026e-8,-0.002231127767120565,-4.4518168017474204e-5,-4.258888372588604e-8,-0.0022309127621388284,-4.483326721123653e-5,-4.2945429863533486e-8,-0.0022305832777618443,-4.5176107345948044e-5,-4.33350641470657e-8,-0.0022301417812274774,-4.548042189951665e-5,-4.3683804639003184e-8,-0.00222962696006888,-4.5691654474732635e-5,-4.3930355472978606e-8,-0.0022290982784922498,-4.578732224176004e-5,-4.404886114752745e-8,-0.0022286126995498105,-4.578096414425489e-5,-4.405337631430236e-8,-0.002228207126679372,-4.571064953482692e-5,-4.39852734699268e-8,-0.002227893056699919,-4.562206961243283e-5,-4.38947320909112e-8,-0.002227660846567752,-4.555526540573994e-5,-4.382620421038141e-8,-0.002227487702103169,-4.55379758899719e-5,-4.381102028222137e-8,-0.0022273451775774154,-4.558426004228901e-5,-4.386564409422788e-8,-0.0022272045720067527,-4.569590592468164e-5,-4.39929402649985e-8,-0.002227040330898362,-4.586469098944103e-5,-4.418444952301841e-8,-0.0022268322499077128,-4.607464729273845e-5,-4.4422813065954085e-8,-0.0022265671012077232,-4.6304319138032545e-5,-4.46843227290974e-8,-0.002226239866699384,-4.65292374402582e-5,-4.4941773047288794e-8,-0.002225854484890745,-4.6724799757426735e-5,-4.51677431041688e-8,-0.0022254237956320375,-4.6869601410910074e-5,-4.5338309138385286e-8,-0.002224968272659459,-4.694890763075256e-5,-4.543684582222292e-8,-0.002224513374267207,-4.695764552052053e-5,-4.545727907051517e-8,-0.0022240857042466885,-4.690227807341315e-5,-4.5406156340506795e-8,-0.0022237084214524207,-4.680103654287797e-5,-4.530300679993751e-8,-0.002223396530534961,-4.668216756519775e-5,-4.517860947561035e-8,-0.002223152787249789,-4.658014304122351e-5,-4.507104168252101e-8,-0.002222964935742375,-4.652995213290346e-5,-4.501951893274435e-8,-0.002222805166025817,-4.655966574712351e-5,-4.505611999008108e-8,-0.0022226330833182246,-4.6682000764129616e-5,-4.519616588800026e-8,-0.002222403496610867,-4.6886909508180545e-5,-4.542958762812166e-8,-0.002222079087811143,-4.7138819175493126e-5,-4.571749442657403e-8,-0.0022216449448798823,-4.738267384694757e-5,-4.59987335824701e-8,-0.002221118171827722,-4.7560111136303446e-5,-4.620795613858712e-8,-0.002220545312392466,-4.763048075773373e-5,-4.629917145710085e-8,-0.002219986393474025,-4.758588464850228e-5,-4.626262271116031e-8,-0.002219493466999461,-4.745169161788492e-5,-4.612549476134362e-8,-0.0022190950899372997,-4.727349057060608e-5,-4.5937616176018814e-8,-0.0022187928437108866,-4.709946526084481e-5,-4.575211981967887e-8,-0.0022185676608473866,-4.6967148258508964e-5,-4.561086581454774e-8,-0.0022183897340214403,-4.6897877865561347e-5,-4.5538205382200175e-8,-0.002218227112864587,-4.689730372738356e-5,-4.55412865670691e-8,-0.0022180511931498754,-4.6958726789225835e-5,-4.5613476972552826e-8,-0.002217839478448058,-4.706684563405332e-5,-4.573834204511953e-8,-0.002217576767892167,-4.720088385532349e-5,-4.5893088802846886e-8,-0.0022172557391592737,-4.7337099909682e-5,-4.605143273264397e-8,-0.0022168773700565656,-4.74510906017821e-5,-4.6186255635813826e-8,-0.0022164511799183666,-4.752034046529439e-5,-4.627248139736567e-8,-0.002215994899699834,-4.7527295848164124e-5,-4.629045712510837e-8,-0.002215532947978386,-4.746279506796771e-5,-4.622968509992351e-8,-0.0022150932151455763,-4.732912349998839e-5,-4.60921625117704e-8,-0.0022147021652644183,-4.714160221841957e-5,-4.589418230010463e-8,-0.002214378969883185,-4.692762570971198e-5,-4.566542228593394e-8,-0.0022141300645164186,-4.672255695780222e-5,-4.544463178449744e-8,-0.0022139458137362612,-4.6562850713633075e-5,-4.52722393117001e-8,-0.00221380060967952,-4.64777591528412e-5,-4.518126383051442e-8,-0.0022136569173281237,-4.648149783906708e-5,-4.518852648490155e-8,-0.0022134729343128413,-4.65678409922886e-5,-4.5288350736913463e-8,-0.002213212730213477,-4.670898079689068e-5,-4.545089717714251e-8,-0.002212856797894262,-4.686004182357243e-5,-4.562684735817594e-8,-0.0022124099074522273,-4.6969555866714336e-5,-4.575890861717408e-8,-0.0022119026018825377,-4.699407898397332e-5,-4.579813949784263e-8,-0.0022113839010346006,-4.691226389953383e-5,-4.5719800103478644e-8,-0.0022109065487812933,-4.673212611187127e-5,-4.553166994833471e-8,-0.0022105106421530336,-4.6487513953655795e-5,-4.52703652159344e-8,-0.002210212924897253,-4.622545023671105e-5,-4.498750033432147e-8,-0.0022100056515220326,-4.599082657138239e-5,-4.4732842639896e-8,-0.0022098634270506174,-4.58151562763414e-5,-4.454182124988341e-8,-0.002209753114187779,-4.5712337116466916e-5,-4.4430643000829475e-8,-0.0022096423610802776,-4.568024895658921e-5,-4.439779129857697e-8,-0.0022095048224221024,-4.570516696428774e-5,-4.4428692789315846e-8,-0.0022093223580628898,-4.576643434562114e-5,-4.45008081941231e-8,-0.0022090854104389146,-4.5840198863217866e-5,-4.458782308690369e-8,-0.002208792684048753,-4.590211841998753e-5,-4.4662757683266604e-8,-0.002208450773065764,-4.592949249699432e-5,-4.470041059236587e-8,-0.0022080738356743857,-4.590342965342051e-5,-4.467976024450722e-8,-0.0022076829208446235,-4.581149511652582e-5,-4.45868263584567e-8,-0.0022073042325302127,-4.565081152181556e-5,-4.441802397944935e-8,-0.002206965605216999,-4.5430915166275075e-5,-4.418331181075295e-8,-0.0022066909305378285,-4.51749843519472e-5,-4.390764665471133e-8,-0.0022064933389565914,-4.49177448738443e-5,-4.3628860219709356e-8,-0.0022063692939843756,-4.469903269899099e-5,-4.339076928750656e-8,-0.002206296459441618,-4.455384182826084e-5,-4.323234070924075e-8,-0.002206237344690818,-4.450182876565845e-5,-4.317610450389361e-8,-0.002206148437110928,-4.454022855258338e-5,-4.322014158498983e-8,-0.0022059920678573607,-4.464314996140854e-5,-4.333696738013364e-8,-0.002205747078655037,-4.47677698551155e-5,-4.3480006469238615e-8,-0.0022054149560458707,-4.4865453971987394e-5,-4.359562672668298e-8,-0.0022050197778874484,-4.4894469310904836e-5,-4.363714563703815e-8,-0.002204602080350687,-4.483081733338681e-5,-4.357698088947024e-8,-0.0022042082496701748,-4.4674256976108435e-5,-4.34136267011671e-8,-0.002203878355963061,-4.444767502332483e-5,-4.317130450908105e-8,-0.002203636131830214,-4.418988337579432e-5,-4.289227455216706e-8,-0.0022034842767954172,-4.3944313012475434e-5,-4.2624468807672645e-8,-0.0022034062225738905,-4.374765150444576e-5,-4.240888990786396e-8,-0.0022033728732570334,-4.362214656382595e-5,-4.22709113039624e-8,-0.0022033511472193176,-4.357325021474196e-5,-4.2217405326860426e-8,-0.002203311259278957,-4.359184072021775e-5,-4.2238963148967383e-8,-0.002203231161403219,-4.365884984553331e-5,-4.2314893940482235e-8,-0.0022030981896355236,-4.37501815219e-5,-4.241868804084055e-8,-0.0022029088590102435,-4.3840715442687394e-5,-4.252255845087228e-8,-0.002202667855443351,-4.390713159132299e-5,-4.2600676139939876e-8,-0.0022023869397814195,-4.392991328620103e-5,-4.263141972686281e-8,-0.002202083971331653,-4.389514078579005e-5,-4.259929970541784e-8,-0.0022017817509400405,-4.3796571313615305e-5,-4.2497155377534966e-8,-0.002201506019114991,-4.363807773550661e-5,-4.232878802184368e-8,-0.002201281829056389,-4.3435865519477696e-5,-4.211145676298463e-8,-0.0022011278651603286,-4.321905966755535e-5,-4.187668985882363e-8,-0.002201049428771376,-4.3026635343832115e-5,-4.166711799444936e-8,-0.0022010326564595945,-4.2899212226683795e-5,-4.1527605488542144e-8,-0.0022010438605880736,-4.2866701401245325e-5,-4.149168981230639e-8,-0.002201036815050561,-4.2936311524374124e-5,-4.156826007306663e-8,-0.0022009668005209242,-4.3087189621691026e-5,-4.1735408849570453e-8,-0.002200805687849186,-4.3275540935940235e-5,-4.194576010041846e-8,-0.0022005511147673534,-4.344845205145683e-5,-4.214141087930924e-8,-0.0022002261579351164,-4.356010243054483e-5,-4.2271627325288035e-8,-0.0021998709471877614,-4.3583870411128616e-5,-4.230621553318354e-8,-0.0021995306329296136,-4.351713167905666e-5,-4.2241049980976345e-8,-0.002199244012936336,-4.337907539302264e-5,-4.209604395428574e-8,-0.0021990354974688524,-4.3203716761038325e-5,-4.190782352683438e-8,-0.0021989114882803953,-4.303068697336216e-5,-4.1719808660383815e-8,-0.0021988611198272934,-4.2896143039547516e-5,-4.157220587465444e-8,-0.002198860529686386,-4.28256834219112e-5,-4.149400848221767e-8,-0.0021988792290551736,-4.283052362484336e-5,-4.149848437908441e-8,-0.0021988868020958604,-4.290728558961128e-5,-4.158266825085552e-8,-0.002198858332636107,-4.30407374421635e-5,-4.1730227888167276e-8,-0.0021987776559889718,-4.320815607531913e-5,-4.191627227789234e-8,-0.0021986383828306827,-4.338394252488224e-5,-4.211255171468341e-8,-0.0021984432617016725,-4.354352417484422e-5,-4.229189520363366e-8,-0.0021982026851288055,-4.366616419637895e-5,-4.243138177200893e-8,-0.002197932987833362,-4.373685585806035e-5,-4.2514400830429825e-8,-0.0021976547873646343,-4.374776948947891e-5,-4.2532145447490745e-8,-0.0021973912163822202,-4.3699666494011446e-5,-4.248507449934088e-8,-0.002197165565964018,-4.360339553726757e-5,-4.238455982416569e-8,-0.0021969976661542537,-4.348102472191013e-5,-4.2254266098886135e-8,-0.0021968986060033643,-4.3365344851824027e-5,-4.212983081364773e-8,-0.002196864488916266,-4.329582521635688e-5,-4.205462845468875e-8,-0.00219687177106506,-4.330950164594914e-5,-4.206983298743024e-8,-0.0021968783763478264,-4.342774012978813e-5,-4.219976819299261e-8,-0.002196833942465688,-4.364410781791684e-5,-4.2438344229764724e-8,-0.0021966974953614438,-4.392134829558463e-5,-4.274547229078794e-8,-0.0021964542822063117,-4.420215324008212e-5,-4.305868573313644e-8,-0.002196122004749595,-4.4429633911088055e-5,-4.3315482134634745e-8,-0.002195743141195934,-4.456667055575025e-5,-4.3474511881865136e-8,-0.0021953688213683063,-4.460502832877005e-5,-4.352567029416044e-8,-0.0021950430896256865,-4.456276883725236e-5,-4.34875261233581e-8,-0.00219479325103675,-4.447456387533459e-5,-4.339707996174946e-8,-0.0021946271302473947,-4.4380500039176534e-5,-4.329781770575668e-8,-0.0021945353071144784,-4.43168589575551e-5,-4.322972528487527e-8,-0.0021944959560133495,-4.4310062852754164e-5,-4.322252177775724e-8,-0.002194480563537203,-4.4373660852183527e-5,-4.32920524953864e-8,-0.0021944595227321863,-4.450786864707432e-5,-4.343945466521452e-8,-0.0021944069506842096,-4.4701191951449525e-5,-4.36527150890374e-8,-0.0021943042180325003,-4.49335617950116e-5,-4.391005375463803e-8,-0.002194141906377647,-4.518027077748843e-5,-4.4184332052663467e-8,-0.0021939201779301136,-4.5416019876788224e-5,-4.444764386522221e-8,-0.002193647790767406,-4.561847347713716e-5,-4.4675332295713537e-8,-0.0021933402416158846,-4.5770915859345256e-5,-4.484892453692752e-8,-0.00219301755709073,-4.586399243241319e-5,-4.495797173896476e-8,-0.0021927019881854267,-4.589680376520009e-5,-4.50011490514789e-8,-0.002192415581968075,-4.587758677189852e-5,-4.498696354861374e-8,-0.002192177416627541,-4.582404354917942e-5,-4.493420418458068e-8,-0.0021920001056428633,-4.576302032079154e-5,-4.487180284605771e-8,-0.0021918853630141493,-4.5728554041258204e-5,-4.483694086387648e-8,-0.0021918193971149852,-4.575678790110061e-5,-4.486962210563871e-8,-0.0021917704552939657,-4.5876737000029106e-5,-4.500249145208053e-8,-0.0021916921793231213,-4.609805171784536e-5,-4.524715951212536e-8,-0.002191535722030832,-4.640085504307758e-5,-4.558273256144663e-8,-0.002191268622527711,-4.673572239421093e-5,-4.5955562378608346e-8,-0.0021908911531643392,-4.703860588774864e-5,-4.6295536372601254e-8,-0.0021904389342049485,-4.725525462149562e-5,-4.654284579454351e-8,-0.0021899688757674282,-4.7361335435271427e-5,-4.667003748796585e-8,-0.002189537217572945,-4.736738240175443e-5,-4.66875152635767e-8,-0.002189182178099598,-4.730905371796731e-5,-4.6633131046491385e-8,-0.0021889175315774733,-4.723144495265606e-5,-4.655539679656418e-8,-0.0021887354256682617,-4.717574835041439e-5,-4.6499184056199204e-8,-0.0021886135162408732,-4.717157179860376e-5,-4.649736314449432e-8,-0.0021885224957076004,-4.723435333698451e-5,-4.656775348526145e-8,-0.002188432196672109,-4.736596568910569e-5,-4.671343301511786e-8,-0.0021883159915355365,-4.755688007918747e-5,-4.69247944722332e-8,-0.002188153797184117,-4.7789060056815985e-5,-4.7182558125506696e-8,-0.0021879339216937933,-4.8039252490120275e-5,-4.7461392605544466e-8,-0.0021876538472704776,-4.828243590852618e-5,-4.773381750934838e-8,-0.002187319992989988,-4.849521912185547e-5,-4.7974061450627616e-8,-0.0021869464613131022,-4.865894024085986e-5,-4.816152081756237e-8,-0.0021865528992877276,-4.87620998684626e-5,-4.828339410490294e-8,-0.0021861618199906937,-4.8801891534619e-5,-4.833627312095251e-8,-0.0021857956854069802,-4.878486309271509e-5,-4.832680892763946e-8,-0.0021854738600616984,-4.8726762987137e-5,-4.8271587194920043e-8,-0.0021852094900030724,-4.86515128943926e-5,-4.8196176656966384e-8,-0.002185006334014698,-4.858914285791343e-5,-4.8133122371377696e-8,-0.0021848556724831675,-4.8572182159752406e-5,-4.8118210423692764e-8,-0.0021847340908449993,-4.862969584851901e-5,-4.818398533821574e-8,-0.0021846040333787834,-4.8778729210677626e-5,-4.835019658202303e-8,-0.0021844197065521583,-4.901477659668526e-5,-4.861300583671992e-8,-0.002184139908137586,-4.9305740268685153e-5,-4.89380239589084e-8,-0.002183745208710712,-4.959578164277363e-5,-4.926436436193073e-8,-0.0021832508778272947,-4.9822400093252296e-5,-4.9523381452495355e-8,-0.0021827054179990426,-4.9940812964766306e-5,-4.9665452368679164e-8,-0.002182172657790118,-4.9941786271621964e-5,-4.967953305482646e-8,-0.0021817074157041024,-4.985220421423567e-5,-4.959386599256073e-8,-0.002181338673865619,-4.9720142395811015e-5,-4.945991919619401e-8,-0.0021810666706533364,-4.9595568980319e-5,-4.933166537295909e-8,-0.0021808703783844,-4.951657478515571e-5,-4.92507832762818e-8,-0.0021807181941960203,-4.950399504420421e-5,-4.924073730655143e-8,-0.0021805769182982548,-4.956218364039945e-5,-4.9307324380953e-8,-0.0021804174795038798,-4.968259370492711e-5,-4.9442212976376634e-8,-0.0021802179110294567,-4.9847836933814006e-5,-4.9627109424267564e-8,-0.002179964670767143,-5.003531159657192e-5,-4.983764252872737e-8,-0.0021796530724134083,-5.0220385609024966e-5,-5.004692161411961e-8,-0.002179287108625143,-5.0379309817940806e-5,-5.0228863268068284e-8,-0.0021788786984716967,-5.049197671212808e-5,-5.0361312329529946e-8,-0.0021784462256297563,-5.054452595703909e-5,-5.04289060225776e-8,-0.0021780122025803136,-5.053151803276535e-5,-5.042538797210063e-8,-0.002177600157916581,-5.045722929573454e-5,-5.035495070136917e-8,-0.0021772310966522526,-5.0335776567875636e-5,-5.023237210708531e-8,-0.002176919902460922,-5.0189932859938544e-5,-5.0081843179902245e-8,-0.00217667207082299,-5.004853269807545e-5,-4.993436120974221e-8,-0.0021764812441906808,-4.994249777622941e-5,-4.982363597059191e-8,-0.0021763280507105863,-4.98996114264398e-5,-4.978052270196503e-8,-0.0021761809437515654,-4.9938185981473035e-5,-4.982603516805561e-8,-0.002176000149806595,-5.006025793450334e-5,-4.9963621703133264e-8,-0.002175745817326205,-5.024622884164902e-5,-5.0172910484799115e-8,-0.002175390157594791,-5.0454365055776456e-5,-5.0408841281164365e-8,-0.002174930337153652,-5.06288459355e-5,-5.061036106903455e-8,-0.002174395353711165,-5.071699644838109e-5,-5.0719362989473973e-8,-0.0021738401034926535,-5.0689679713245726e-5,-5.0703131233504954e-8,-0.0021733265233010663,-5.055363671187018e-5,-5.056794205359903e-8,-0.0021729011128648096,-5.034775070284775e-5,-5.035513085813307e-8,-0.0021725811078602674,-5.012585939427826e-5,-5.012259516349527e-8,-0.0021723547388293137,-4.993700515060601e-5,-4.992354472562844e-8,-0.0021721915116131806,-4.9812811310871116e-5,-4.979285902848771e-8,-0.0021720546749986677,-4.976445626435847e-5,-4.9743630077680485e-8,-0.002171910550591354,-4.978612573658363e-5,-4.977057674929707e-8,-0.0021717334408312126,-4.986073223887547e-5,-4.985593590639394e-8,-0.0021715072056702122,-4.9965197761627746e-5,-4.997503848354697e-8,-0.002171225123681876,-5.007442062639999e-5,-5.010064735726323e-8,-0.0021708891541935235,-5.0164162613396194e-5,-5.020624123144993e-8,-0.002170509011565236,-5.021337352113505e-5,-5.026869269970753e-8,-0.0021701010201165194,-5.020633834079381e-5,-5.027067408474085e-8,-0.002169686481978018,-5.013479660142251e-5,-5.02029350445516e-8,-0.0021692892001323122,-4.999980622314807e-5,-5.006625128102955e-8,-0.002168932022375522,-4.9812758371010945e-5,-4.9872480658075486e-8,-0.002168632724515974,-4.95948957641629e-5,-4.96440934171442e-8,-0.0021683999304833723,-4.9374905475583854e-5,-4.94117279890712e-8,-0.0021682299884622017,-4.9184517024424835e-5,-4.9209644023520306e-8,-0.0021681057683319905,-4.905256550499114e-5,-4.906946354132325e-8,-0.0021679981084059274,-4.899850303697785e-5,-4.901315398366616e-8,-0.0021678702118165865,-4.902660625417457e-5,-4.904654790153962e-8,-0.002167684855459021,-4.912228342329066e-5,-4.915496722137846e-8,-0.002167413675346147,-4.9252117611135175e-5,-4.930287422769272e-8,-0.0021670467328493287,-4.9369236645834006e-5,-4.9439453319941026e-8,-0.0021665991445428225,-4.942457392269512e-5,-4.951084310411176e-8,-0.0021661107109958544,-4.9382031214902844e-5,-4.9476821013151695e-8,-0.0021656359860024264,-4.923205966050717e-5,-4.932584479686643e-8,-0.0021652269664645565,-4.8996524294130615e-5,-4.908058662160895e-8,-0.0021649159058167063,-4.872105249104496e-5,-4.878982557957179e-8,-0.002164706655984438,-4.8458301673946887e-5,-4.8510450968611894e-8,-0.0021645777385677746,-4.825084661063017e-5,-4.8288973195301046e-8,-0.0021644934054848965,-4.812122783466715e-5,-4.81506379139743e-8,-0.0021644159176900527,-4.8071024900689184e-5,-4.809815557247862e-8,-0.0021643141929952214,-4.808594061576428e-5,-4.81168922637752e-8,-0.002164167674411756,-4.814266053659258e-5,-4.818208341414474e-8,-0.0021639667146355628,-4.8214709519840826e-5,-4.8265144796799985e-8,-0.0021637113015193915,-4.8276471408607926e-5,-4.833815104674628e-8,-0.0021634093935051597,-4.8305717497990586e-5,-4.8376751136334334e-8,-0.0021630753860666465,-4.8285336142651836e-5,-4.836216222000512e-8,-0.0021627286667312874,-4.8204863846761885e-5,-4.828283802361071e-8,-0.002162391861482956,-4.8062097732630306e-5,-4.813613888210156e-8,-0.0021620882679398825,-4.786457221389886e-5,-4.792984469758117e-8,-0.0021618381966684985,-4.763020148052184e-5,-4.768283959318655e-8,-0.0021616544721947527,-4.738615688544101e-5,-4.74240049864915e-8,-0.0021615380479013072,-4.716519867376527e-5,-4.718845234479752e-8,-0.002161475302072799,-4.699937039553237e-5,-4.701091284755469e-8,-0.0021614386393250546,-4.6912154688658707e-5,-4.691736184216948e-8,-0.002161391201800069,-4.6911292679655636e-5,-4.691717630397373e-8,-0.002161295075484384,-4.698475296081406e-5,-4.6998506562417824e-8,-0.002161121034202,-4.710162372082691e-5,-4.712886694957854e-8,-0.002160857131367918,-4.7218339997966116e-5,-4.726153824963162e-8,-0.0021605135166616594,-4.728911357216719e-5,-4.734669635449493e-8,-0.002160121614640899,-4.727811102218645e-5,-4.7344670899897986e-8,-0.002159727070259186,-4.71700332472349e-5,-4.72376676723403e-8,-0.002159377681774251,-4.697546153405605e-5,-4.703590761080976e-8,-0.0021591097858532486,-4.672829423936533e-5,-4.677517141941328e-8,-0.002158938074167603,-4.6475408602648845e-5,-4.650582202815821e-8,-0.002158852916009944,-4.626235480050213e-5,-4.627738514230599e-8,-0.002158825801635166,-4.612087538018337e-5,-4.612493766194266e-8,-0.002158819709787541,-4.606270599802699e-5,-4.606214934513943e-8,-0.002158799607308813,-4.608051665422589e-5,-4.6081993496327766e-8,-0.0021587395273344563,-4.615361327504223e-5,-4.616267371658823e-8,-0.002158625286072611,-4.625494118904886e-5,-4.627511694149892e-8,-0.002158453953359905,-4.635691120285143e-5,-4.638936013416345e-8,-0.002158231790057722,-4.643523375110354e-5,-4.647887273854775e-8,-0.002157971911670394,-4.647108233605865e-5,-4.652305041561149e-8,-0.0021576922476335206,-4.6452294121769896e-5,-4.650856384345036e-8,-0.0021574138014324212,-4.637428430326153e-5,-4.6430286990051256e-8,-0.0021571587957101316,-4.624105015071745e-5,-4.629227406134107e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json new file mode 100644 index 000000000..b4be24167 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":1000,"numberOfSamples":1000,"samples":[-0.002156948117797158,-4.6066106188504274e-5,-4.610870837852341e-8,-0.0021567976844821175,-4.587262928957953e-5,-4.590411215695837e-8,-0.002156713908245568,-4.569170874283684e-5,-4.5711626484184725e-8,-0.0021566893595621928,-4.555761003533914e-5,-4.5568113732113295e-8,-0.002156700743371349,-4.549983445555494e-5,-4.5505741530892555e-8,-0.0021567115663395065,-4.5533671389188886e-5,-4.5541790676334716e-8,-0.0021566804178876843,-4.5652915406612466e-5,-4.5670622833809834e-8,-0.002156572912636481,-4.582870678241587e-5,-4.58621255953264e-8,-0.0021563728566239655,-4.601620142754535e-5,-4.6068577295811786e-8,-0.0021560880133587525,-4.616711622705171e-5,-4.623794070121091e-8,-0.002155748222189647,-4.62434863816923e-5,-4.6328641438483505e-8,-0.002155396920669294,-4.622782396424562e-5,-4.632067580425877e-8,-0.00215507933393081,-4.612686483113469e-5,-4.621997607570151e-8,-0.0021548310204559523,-4.596856314722607e-5,-4.605556460572259e-8,-0.0021546697448800787,-4.579380803487395e-5,-4.5870948767990285e-8,-0.0021545925009090403,-4.564545026639773e-5,-4.571243253541094e-8,-0.00215457808447119,-4.555777214888923e-5,-4.561767662258407e-8,-0.002154594019620961,-4.554927142265337e-5,-4.560764640929833e-8,-0.002154605368940617,-4.562040509803385e-5,-4.568383677005805e-8,-0.002154582628502511,-4.575613804937631e-5,-4.583074108471704e-8,-0.0021545067042819666,-4.593156748733217e-5,-4.602179515117175e-8,-0.0021543704349080905,-4.6118291920214145e-5,-4.6226298143065905e-8,-0.002154177429419203,-4.628970757896518e-5,-4.64152905393417e-8,-0.0021539395320203554,-4.642448039496704e-5,-4.656547403677698e-8,-0.0021536740325304696,-4.6508347419083976e-5,-4.6661248300741016e-8,-0.002153401212638439,-4.6534852085000904e-5,-4.669548060691322e-8,-0.0021531422886805827,-4.650565883599465e-5,-4.666974436961425e-8,-0.0021529174221249937,-4.6430830311047396e-5,-4.6594529114611347e-8,-0.002152743281384537,-4.632899782380846e-5,-4.648943285318694e-8,-0.0021526297364554913,-4.622682327908873e-5,-4.6382720029024235e-8,-0.0021525757781952213,-4.615665217809799e-5,-4.6309007987320986e-8,-0.0021525657635618595,-4.615111791560906e-5,-4.630363581540198e-8,-0.0021525683606683156,-4.623433111379003e-5,-4.639321479077921e-8,-0.0021525411131787307,-4.641162808298889e-5,-4.658444896551646e-8,-0.00215244181360915,-4.6662730585749126e-5,-4.685650807739798e-8,-0.002152243559761613,-4.69438336830974e-5,-4.716299443903288e-8,-0.0021519463173773905,-4.720028130623982e-5,-4.744536946490242e-8,-0.0021515783140552483,-4.738487646555355e-5,-4.7652539659263205e-8,-0.0021511863195340735,-4.7473012892754915e-5,-4.775714558013054e-8,-0.002150820158632104,-4.74681988823182e-5,-4.7761682951372046e-8,-0.0021505186509381763,-4.739759003524929e-5,-4.769404722497823e-8,-0.002150301454146949,-4.7301602034095665e-5,-4.75967746928141e-8,-0.002150167504080223,-4.722237577724007e-5,-4.751493736774092e-8,-0.0021500984653760494,-4.7194327180898005e-5,-4.7486029043007825e-8,-0.002150065007643072,-4.7238211715320985e-5,-4.753336591146179e-8,-0.002150034011848315,-4.735890504159874e-5,-4.7663329284699034e-8,-0.0021499752813515308,-4.754650144645341e-5,-4.7866189097583804e-8,-0.0021498666614940885,-4.777999559892799e-5,-4.811985529955003e-8,-0.002149696844734374,-4.8032435641353954e-5,-4.8395408706038154e-8,-0.0021494657462589853,-4.8276239272205825e-5,-4.866295866283441e-8,-0.0021491829316347584,-4.848761715432387e-5,-4.8896590036391526e-8,-0.002148864888882999,-4.864954755615883e-5,-4.9077698538029214e-8,-0.002148531969661492,-4.875324012053347e-5,-4.9196590948451486e-8,-0.00214820559302335,-4.879845385417849e-5,-4.925275811633043e-8,-0.0021479058723801398,-4.8793211725869386e-5,-4.9254476683867235e-8,-0.0021476494691693242,-4.875326148772683e-5,-4.921820529983365e-8,-0.0021474473356039884,-4.8701280224926454e-5,-4.916782927985692e-8,-0.002147302025734625,-4.8665427348109735e-5,-4.913330991550414e-8,-0.0021472046146883317,-4.867636961659977e-5,-4.914769826441347e-8,-0.0021471322071707254,-4.8761685544412094e-5,-4.924121019381598e-8,-0.0021470482597085038,-4.893732048233069e-5,-4.943192954490526e-8,-0.002146908584499707,-4.91979967179343e-5,-4.97152190263401E-08,-0.002146674363316176,-4.9511646656850674e-5,-5.0057427768996096e-8,-0.002146328667920062,-4.982422622000098e-5,-5.0400872447169334e-8,-0.0021458875359486144,-5.007688042712524e-5,-5.0682229364308553e-8,-0.002145397011314185,-5.0228379818507437e-5,-5.0856638807463407e-8,-0.0021449161791735768,-5.0270217445764416e-5,-5.091394422090286e-8,-0.002144495917953705,-5.0226434247242504e-5,-5.087865414824122e-8,-0.002144164522903363,-5.01408709895491e-5,-5.079660476566392e-8,-0.002143924532470479,-5.0060878640441164e-5,-5.0717902245852795e-8,-0.002143757959315198,-5.002483607513269e-5,-5.068379162791456e-8,-0.002143634896737234,-5.005585115815337e-5,-5.071984838493151e-8,-0.002143521842854634,-5.0160650756850324e-5,-5.083446444779818e-8,-0.002143388120717485,-5.0331651201626866e-5,-5.102064773664288e-8,-0.002143210184954386,-5.055054311417113e-5,-5.125954074459971e-8,-0.002142974117514982,-5.079251129394976e-5,-5.152482507010141e-8,-0.0021426765074378826,-5.103064468172294e-5,-5.178753018681961e-8,-0.0021423238391256607,-5.124006797853224e-5,-5.202065134245872e-8,-0.002141930651324379,-5.140134181465216e-5,-5.220297342970296e-8,-0.0021415168281439588,-5.150282446702924e-5,-5.2321688446799315e-8,-0.0021411044645297406,-5.154180999406271e-5,-5.237359158139016e-8,-0.0021407148054202576,-5.152449499997826e-5,-5.236496558245039e-8,-0.0021403655678020684,-5.146510002939213e-5,-5.231059043138093e-8,-0.002140068652238457,-5.138444270295482e-5,-5.2232268635753575e-8,-0.002139828133292629,-5.1308028225241545e-5,-5.2156950212399334e-8,-0.002139638422673149,-5.126350568803761e-5,-5.2114230564000163e-8,-0.00213948268691379,-5.1277018333799685e-5,-5.213259191254482e-8,-0.002139332290822501,-5.1367795817320406e-5,-5.223357239670482e-8,-0.0021391489883805194,-5.154098912009453e-5,-5.242383088390882e-8,-0.002138891970010422,-5.1780522562900146e-5,-5.268710604455327e-8,-0.0021385305995390066,-5.20462253084977e-5,-5.2980835455315765e-8,-0.002138059594008942,-5.2280784568316565e-5,-5.324353111816718e-8,-0.002137508049281609,-5.242840674319948e-5,-5.341489927661907e-8,-0.0021369333564798328,-5.245794992558174e-5,-5.3460757754233854e-8,-0.0021364000567887635,-5.237659280739311e-5,-5.338772944526506e-8,-0.0021359554177806913,-5.222499524366457e-5,-5.323816602452792e-8,-0.0021356157132549174,-5.205829004263862e-5,-5.307010206523827e-8,-0.002135367798385966,-5.1925718630202697e-5,-5.293584770307225e-8,-0.0021351802309842655,-5.185853393324863e-5,-5.2869237987871783e-8,-0.002135015709675917,-5.186747116928778e-5,-5.288277568269625e-8,-0.0021348401734937695,-5.194616985504687e-5,-5.2970891829753475e-8,-0.002134627758060293,-5.2076667370690687e-5,-5.311539888620349e-8,-0.002134362664862016,-5.22346501846903e-5,-5.329085053332862e-8,-0.0021340393185033547,-5.2393733389077045e-5,-5.3469096840437146e-8,-0.002133661644592146,-5.252894430972528e-5,-5.362316413179043e-8,-0.0021332416919183183,-5.2619642849676823e-5,-5.373058405670703e-8,-0.002132797639105352,-5.265187989316952e-5,-5.377605953151373e-8,-0.00213235123299873,-5.262008658853691e-5,-5.3753301407695094e-8,-0.0021319247547086106,-5.252787431710746e-5,-5.366582385721862e-8,-0.002131537812166341,-5.2387711692295135e-5,-5.3526527141880856e-8,-0.002131204386649835,-5.221948578729788e-5,-5.335616249926751e-8,-0.002130930436840616,-5.204813499564776e-5,-5.3180922715721016e-8,-0.0021307122475242276,-5.190051666082856e-5,-5.3029303636494595e-8,-0.002130535691096194,-5.1801663288743484e-5,-5.2928303953712826e-8,-0.002130376577415983,-5.1770519389418736e-5,-5.289893815879023e-8,-0.0021302025383327134,-5.1815158911048855e-5,-5.2950976313991277e-8,-0.002129977378036466,-5.192792796725971e-5,-5.3077407334747964E-08,-0.0021296688087945386,-5.208214555192072e-5,-5.325050928388623e-8,-0.0021292592998348823,-5.2233329336141494e-5,-5.342289782969275e-8,-0.002128757014872047,-5.2328224363975537e-5,-5.353718707965699e-8,-0.0021282003685288873,-5.232211388239153e-5,-5.354471701182651e-8,-0.0021276495587692528,-5.219820202071707e-5,-5.342650421322242e-8,-0.002127165444777017,-5.1977374748586926e-5,-5.32037987462269e-8,-0.002126786408919701,-5.1710339300552144e-5,-5.292980367635397e-8,-0.0021265166937946525,-5.145633618560855e-5,-5.2667177244896215e-8,-0.00212633105580082,-5.126167160748416e-5,-5.246538067689548e-8,-0.002126189328271234,-5.114869660600918e-5,-5.234897812409529e-8,-0.0021260510373621883,-5.111638783278097e-5,-5.231801132895357e-8,-0.002125884513579751,-5.114733030685652e-5,-5.235503053809026e-8,-0.0021256702248682435,-5.121572331910457e-5,-5.243327665430199e-8,-0.002125400455812279,-5.1293642979333694e-5,-5.252321996716058e-8,-0.0021250775059338096,-5.1355096043385815e-5,-5.259696904862907e-8,-0.0021247116610059085,-5.1378537621995244e-5,-5.2631164024147827e-8,-0.0021243192352671083,-5.134861185069034e-5,-5.2609026267915535e-8,-0.002123920533294502,-5.125749504161394e-5,-5.252187717870801e-8,-0.002123537513917045,-5.1105899487825944e-5,-5.237017732952232e-8,-0.0021231909824004935,-5.0903510148269925e-5,-5.21639052525058e-8,-0.002122897386272381,-5.066840160744641e-5,-5.192188374186477e-8,-0.0021226656718111524,-5.042508933637542e-5,-5.166975788992617e-8,-0.002122494839571998,-5.0201204525872756e-5,-5.143662126873064e-8,-0.0021223728064571974,-5.002307532138799e-5,-5.125052539179263e-8,-0.002122277063662247,-4.9910792187481684e-5,-5.1133373559448276e-8,-0.002122177350465051,-4.9873571668336e-5,-5.1095958839310544e-8,-0.002122040271899325,-4.990621895883855e-5,-5.113395766297128e-8,-0.002121835670220407,-4.998749569171908e-5,-5.122580454826739e-8,-0.002121544289358671,-5.008151805352115e-5,-5.133380683137773e-8,-0.0021211653940700756,-5.0143498952941705e-5,-5.141007127166793e-8,-0.0021207216447338448,-5.0130441492102875e-5,-5.1407976149345016e-8,-0.002120257496141451,-5.001520456175847e-5,-5.1297441102601807e-8,-0.002119828397979043,-4.9798850489622e-5,-5.107840402680578e-8,-0.0021194826754195456,-4.9513892869127156e-5,-5.078451782729881e-8,-0.002119244086201465,-4.921409445932999e-5,-5.0472444375840066e-8,-0.0021191046402436534,-4.8954748273117716e-5,-5.0200988226733736e-8,-0.002119031138708923,-4.8773978554723135e-5,-5.001124485406591e-8,-0.002118980101862301,-4.8684026206295004e-5,-4.991720030835334e-8,-0.00211891220827597,-4.867379334879302e-5,-4.990812813538284e-8,-0.0021188006530865576,-4.8717674424215837e-5,-4.9957631878584515e-8,-0.0021186330805224884,-4.878489183979079e-5,-5.003335885442783e-8,-0.002118409606923484,-4.8846210672363946e-5,-5.010414572430475e-8,-0.0021181395569648243,-4.887764161794287e-5,-5.0144131459874775e-8,-0.002117838428140765,-4.8862089859800686e-5,-5.013472762586503e-8,-0.0021175254797301053,-4.87900395563563e-5,-5.006548391793509e-8,-0.0021172217039225403,-4.865995177280172e-5,-4.9934517707598465e-8,-0.0021169477453683006,-4.8478584561881674e-5,-4.9748766630150475e-8,-0.002116721392799632,-4.8261007717598124e-5,-4.952391111144196e-8,-0.00211655455107997,-4.802973321358578e-5,-4.928344153787555e-8,-0.002116450096966629,-4.781233066898358e-5,-4.9056238260434893e-8,-0.0021163995074253497,-4.763723300556185e-5,-4.88723175000772e-8,-0.00211638238176434,-4.752806896211847e-5,-4.8757005535652654e-8,-0.0021163687749273766,-4.749765415455074e-5,-4.872463016284184e-8,-0.0021163245129189124,-4.75433801208055e-5,-4.8773504423959966e-8,-0.0021162186131261293,-4.7645689733550204e-5,-4.888400543678275e-8,-0.0021160311239636605,-4.7770598620135224e-5,-4.902087037517744e-8,-0.0021157594156345004,-4.787624496808221e-5,-4.913984622203423e-8,-0.0021154210653734945,-4.792249771712643e-5,-4.919779498322852e-8,-0.0021150518661444766,-4.788171611098116e-5,-4.916427157162084e-8,-0.0021146983037815758,-4.774784549571525e-5,-4.903151581702451e-8,-0.0021144054214774677,-4.754043449876239e-5,-4.881909664190108e-8,-0.002114203335655032,-4.730071511555959e-5,-4.857004998709531e-8,-0.0021140976257717674,-4.7079605315396366e-5,-4.8338297363515245e-8,-0.002114068243449401,-4.6921741162987395e-5,-4.817168920274723e-8,-0.0021140776517754515,-4.685238849929127e-5,-4.8097948508555413e-8,-0.002114084019446718,-4.6872596236596724e-5,-4.81192411375788e-8,-0.002114053227237637,-4.6963141965845496e-5,-4.821604606694751e-8,-0.002113965448400426,-4.7093502898033734e-5,-4.8356449951288814e-8,-0.0021138158726727416,-4.7231060835115885e-5,-4.8505867927921634e-8,-0.0021136117434029157,-4.73475915439524e-5,-4.863405741638106e-8,-0.002113368243224607,-4.742253450655109e-5,-4.8718797175518944e-8,-0.0021131048107557887,-4.7443958322278066e-5,-4.874708212682086e-8,-0.002112842390293642,-4.740840058984932e-5,-4.87150037508711e-8,-0.002112601402461571,-4.732044050097083e-5,-4.8627229494421786e-8,-0.002112399898104981,-4.71923458598116e-5,-4.84965171325286e-8,-0.0021122513870208202,-4.7043586695278016e-5,-4.834314259144425e-8,-0.002112162155506463,-4.689959768605062e-5,-4.8193650389836864e-8,-0.0021121284044120486,-4.678902511400128e-5,-4.807810872069021e-8,-0.002112134192586928,-4.6738909755118304e-5,-4.802520783954363e-8,-0.002112151736011111,-4.676805674809973e-5,-4.8055358790222776e-8,-0.0021121455008559073,-4.68802207502431e-5,-4.8173435647070684e-8,-0.002112080244306887,-4.705993268071947e-5,-4.8364140938563196e-8,-0.0021119310664213338,-4.727368018370931e-5,-4.8592931302070324e-8,-0.002111691895111901,-4.747730114612249e-5,-4.881352739322071e-8,-0.0021113788749667064,-4.7627699607907756e-5,-4.898012188224292e-8,-0.00211102704677318,-4.7694954771803144e-5,-4.9060201272908396e-8,-0.002110681352249585,-4.767075494556609e-5,-4.90436883734857e-8,-0.002110384874318121,-4.7570663804349934e-5,-4.894570849816082e-8,-0.0021101677401916797,-4.7429813825341904e-5,-4.8802430880724736e-8,-0.002110039696581039,-4.729335730533683e-5,-4.866125590022362e-8,-0.0021099884072854364,-4.7204358850854926e-5,-4.8568084600913465e-8,-0.002109983945387274,-4.7192708949043166e-5,-4.855543459993911e-8,-0.0021099879117350232,-4.726846620998511e-5,-4.863507382826351e-8,-0.0021099639576379094,-4.7421428985429237e-5,-4.879720662545984e-8,-0.0021098861854816123,-4.7626298326830003e-5,-4.901567331796005e-8,-0.002109743186109511,-4.7850789510772105e-5,-4.9256450069474826e-8,-0.002109537586825893,-4.8063526347891254e-5,-4.948609768053289e-8,-0.002109282655958739,-4.8239580975826655e-5,-4.967782243823404e-8,-0.0021089979409871034,-4.8363148343395243e-5,-4.981449771751667e-8,-0.002108705341277884,-4.8427999229028034e-5,-4.988923858233261e-8,-0.002108426170116319,-4.843672757019664e-5,-4.990457813568429e-8,-0.0021081790939703336,-4.8399655340769195e-5,-4.987120855545762e-8,-0.002107978462340765,-4.8333815691984267e-5,-4.98068240380907e-8,-0.0021078325085235445,-4.8261883157006745e-5,-4.973500790876879e-8,-0.002107741182028866,-4.8210487087105704e-5,-4.968358842430621e-8,-0.0021076938773007476,-4.820714020935879e-5,-4.9681591379790985e-8,-0.0021076680383246907,-4.827513281127266e-5,-4.975399170959863e-8,-0.002107630376401887,-4.842654419791798e-5,-4.991432609044488e-8,-0.0021075425159545343,-4.865523284848443e-5,-5.015711147352186e-8,-0.0021073713272879244,-4.893349928726431e-5,-5.045403692151433e-8,-0.002107101054149504,-4.921621165090497e-5,-5.075804312180078e-8,-0.00210674158544731,-4.9453141274911964e-5,-5.1016160495136004e-8,-0.0021063277292051657,-4.960526660686225e-5,-5.1186657637328415e-8,-0.0021059088236712936,-4.965767137535703e-5,-5.1252729209342855e-8,-0.002105533355710234,-4.962333434846008e-5,-5.122672710022117e-8,-0.002105235298687669,-4.953725574759237e-5,-5.114433301511661e-8,-0.0021050267301768173,-4.9444765358431426e-5,-5.105262008384059e-8,-0.0021048975954977385,-4.938895653500951e-5,-5.099704564916817e-8,-0.0021048209457205044,-4.940083264676395e-5,-5.1011036159970786e-8,-0.0021047611320736954,-4.9493878141675046e-5,-5.110997819652719e-8,-0.0021046825545899023,-4.9663315734863536e-5,-5.1290024568352304e-8,-0.002104557033149279,-4.98893453161492e-5,-5.1531150434198844e-8,-0.0021043684802190066,-5.0143026698940785e-5,-5.1803180748147716e-8,-0.002104114312419352,-5.0393089164750924e-5,-5.2073008844431506e-8,-0.0021038039107087792,-5.0611974369170696e-5,-5.2311154609061635e-8,-0.002103455142864527,-5.077997300985246e-5,-5.249634587215205e-8,-0.0021030901973043527,-5.088713159052434e-5,-5.261767665298347e-8,-0.002102731754757487,-5.093327497583167e-5,-5.2674658453290784e-8,-0.002102400038249737,-5.0926853473763044e-5,-5.267593710089334e-8,-0.002102110741705476,-5.088333895282607e-5,-5.2637516149960456e-8,-0.002101873489403106,-5.08235740242651e-5,-5.2580999673824274e-8,-0.0021016904381226816,-5.07720385838116e-5,-5.2531862498246874e-8,-0.0021015548084289933,-5.0754644122074386e-5,-5.2517309070279127e-8,-0.002101449525764805,-5.079541727592946e-5,-5.256294807274047e-8,-0.002101346863688587,-5.091147619245311e-5,-5.268753767417356e-8,-0.0021012107625705593,-5.110647842638639e-5,-5.2895930277749896e-8,-0.0021010036231113496,-5.1364431323432054e-5,-5.317225671965255e-8,-0.0021006978474307205,-5.164780092740599e-5,-5.347763770609452e-8,-0.0021002887607210427,-5.1904283966139336e-5,-5.3757151991875933e-8,-0.0020998017811831972,-5.2082983385010847e-5,-5.3956856249473105e-8,-0.002099287305051419,-5.2153786677272464e-5,-5.404424493360183e-8,-0.002098803714303415,-5.211938886395136e-5,-5.402099729340937e-8,-0.0020983970909576486,-5.201310176200273e-5,-5.392087032373497e-8,-0.0020980879471518285,-5.1884788106360025e-5,-5.379525398388802e-8,-0.0020978694594535633,-5.178355560077695e-5,-5.3695353664609535e-8,-0.0020977146033212875,-5.1744897802943776e-5,-5.3658858151211176e-8,-0.0020975867206337855,-5.17850538647107e-5,-5.370387698001164e-8,-0.002097449252174256,-5.1901448471996434e-5,-5.382901325735156e-8,-0.0020972727165282454,-5.2076755488728516e-5,-5.4017187239652266e-8,-0.002097038679265766,-5.228448053746355e-5,-5.424119501315798e-8,-0.002096741115512614,-5.2494770950254756e-5,-5.446974146690214e-8,-0.0020963856479537316,-5.267968073580639e-5,-5.467310941300608e-8,-0.0020959871806476727,-5.281730553664611e-5,-5.482773870037851e-8,-0.002095566547851664,-5.2894425618154075e-5,-5.49192091763326e-8,-0.0020951467983804607,-5.2907580747666326e-5,-5.494346629557186e-8,-0.0020947496865052926,-5.2862703551995284e-5,-5.490641407062349e-8,-0.00209439283463895,-5.277366064911636e-5,-5.482230500560337e-8,-0.002094087719578533,-5.266022168051224e-5,-5.471156076175677e-8,-0.0020938383034884785,-5.2545818362760925e-5,-5.459846822588298e-8,-0.00209364009071615,-5.245512424241938e-5,-5.4508786421523974e-8,-0.002093479524987209,-5.241128303972207e-5,-5.4467015989831044e-8,-0.002093333866675805,-5.243244496307399e-5,-5.449285675295966e-8,-0.002093172238328941,-5.25272454837531e-5,-5.459637339444828e-8,-0.002092959192295158,-5.2689536740216397e-5,-5.47721861308031e-8,-0.002092662162437497,-5.289419192472436e-5,-5.4994709404817255e-8,-0.002092262731012093,-5.3097515495686634e-5,-5.5218327291160634e-8,-0.0020917682925749906,-5.3246152076680836e-5,-5.5386719323868286e-8,-0.0020912168729252238,-5.32948950916572e-5,-5.5451705931345774e-8,-0.00209066831104737,-5.322638039161152e-5,-5.539407826225248e-8,-0.002090182976448214,-5.306061034027742e-5,-5.523368866112795e-8,-0.0020897991792229852,-5.2847036022818596e-5,-5.502129784760488e-8,-0.0020895220312050072,-5.264403046194828e-5,-5.481735951820511e-8,-0.002089327651578887,-5.2498344531242285e-5,-5.4670817165440435e-8,-0.002089176601984936,-5.243402752975581e-5,-5.46075905285881e-8,-0.002089027832962104,-5.2451886161662154e-5,-5.462976227025945e-8,-0.002088848145979607,-5.253524957931374e-5,-5.4721159636310425e-8,-0.002088616519163286,-5.265749417095675e-5,-5.485481113266398e-8,-0.0020883247601802828,-5.278870213189013e-5,-5.499971074275159e-8,-0.0020879761659435914,-5.290068935685728e-5,-5.512613172786507e-8,-0.002087583221816599,-5.297058683962383e-5,-5.520959628157752e-8,-0.002087164777385674,-5.29832296796577e-5,-5.5233626895864976e-8,-0.002086742950109644,-5.2932455223265686e-5,-5.519126877302781e-8,-0.002086339956581604,-5.282138748957507e-5,-5.508542075950947e-8,-0.0020859750527439137,-5.266171847400609e-5,-5.492801945295256e-8,-0.0020856618891764334,-5.247200185689632e-5,-5.4738177469182e-8,-0.0020854066000901466,-5.227520696881749e-5,-5.453962120190033e-8,-0.0020852067040709943,-5.209587655834655e-5,-5.4357819901512334e-8,-0.002085050761531667,-5.19570440334916e-5,-5.421693100956444e-8,-0.0020849188250382576,-5.187695475340274e-5,-5.4136513752244604e-8,-0.0020847838283227895,-5.1865633386018315e-5,-5.4127943797766366e-8,-0.002084614302700284,-5.192134366393279e-5,-5.4190517439071605e-8,-0.002084379177216386,-5.202743147570318e-5,-5.4307801867957737e-8,-0.0020840552632532838,-5.2151132764179095e-5,-5.444603412637725e-8,-0.0020836367229090016,-5.2246983387897786e-5,-5.4557508305702125e-8,-0.0020831432642481086,-5.226727446908682e-5,-5.45915998704627e-8,-0.00208262110484632,-5.217892051956154e-5,-5.451267651801983e-8,-0.0020821314693878165,-5.1979995231158984e-5,-5.4317639028435655e-8,-0.002081728580818981,-5.170500269403149e-5,-5.404156653193917e-8,-0.0020814384597434145,-5.1412711832119855e-5,-5.374512512192592e-8,-0.0020812512548079114,-5.1162601970100065e-5,-5.349017232141276e-8,-0.0020811301739922143,-5.0993981576040526e-5,-5.331814200443522e-8,-0.0020810288964036128,-5.091778800135395e-5,-5.324144113486929e-8,-0.0020809068797548306,-5.0920708246115815e-5,-5.324742058440525e-8,-0.002080737412895719,-5.0975044648063965e-5,-5.330822538299496e-8,-0.0020805090765344805,-5.104836915559959e-5,-5.339054776415609e-8,-0.0020802235105041346,-5.111032019083676e-5,-5.3462654102947513e-8,-0.0020798920087048986,-5.113645247824958e-5,-5.349856905196274e-8,-0.0020795322310856322,-5.111013067736273e-5,-5.3480319452971573e-8,-0.002079165270330489,-5.102337145825212e-5,-5.339903379738613e-8,-0.002078812929807196,-5.0877027322918444e-5,-5.325522084868336e-8,-0.0020784951021789507,-5.0680399754512935e-5,-5.3058323468374344e-8,-0.0020782272019827155,-5.0450194248135284e-5,-5.2825530483115977E-08,-0.002078017796904138,-5.020860124030872e-5,-5.257971627504764e-8,-0.002077866846658982,-4.998045829403398e-5,-5.234652763334412e-8,-0.002077764949227266,-4.9789769777337244e-5,-5.215090293742938e-8,-0.002077693796213007,-4.96559598259346e-5,-5.201333928555749e-8,-0.002077627945643406,-4.959024266445353e-5,-5.1946199184189877e-8,-0.0020775379573369774,-4.959258117963107e-5,-5.1950458272378425e-8,-0.002077394847759163,-4.964972754567608e-5,-5.20133946027985e-8,-0.0020771757956997636,-4.973494898228385e-5,-5.2107934240242226e-8,-0.0020768707597667575,-4.981047198397003e-5,-5.21948928946358e-8,-0.002076488719453658,-4.9833950263944744e-5,-5.222962698296795e-8,-0.0020760607752435137,-4.976947981592237e-5,-5.217368787144459e-8,-0.0020756363255762,-4.960119521007246e-5,-5.2009327355383566e-8,-0.0020752699804712604,-4.934370262592132e-5,-5.175068444401802e-8,-0.002075002258206543,-4.904167747827994e-5,-5.144355599514386e-8,-0.002074843505137487,-4.875527236421879e-5,-5.115030112001243e-8,-0.002074770885112081,-4.85375576824606e-5,-5.092642497342114e-8,-0.0020747400769557814,-4.841647775431193e-5,-5.080178737543361e-8,-0.00207470360549399,-4.839002227744564e-5,-5.077538800998163e-8,-0.0020746254988324455,-4.843356303392952e-5,-5.082265162308837e-8,-0.002074487411936633,-4.8512066229528486e-5,-5.090778965666528e-8,-0.002074287589063454,-4.8590652566310444e-5,-5.099462507142112e-8,-0.0020740364229402913,-4.864094211986411e-5,-5.105327235216716e-8,-0.0020737516117730406,-4.864364377231825e-5,-5.1063071939584795e-8,-0.0020734542779023923,-4.858893563414716e-5,-5.101324060777878e-8,-0.0020731661303226793,-4.847596434842968e-5,-5.090249495797251e-8,-0.0020729072209830705,-4.831209437291138e-5,-5.073826475982897e-8,-0.002072693884949742,-4.81119863715466e-5,-5.053563043378728e-8,-0.0020725366574624164,-4.789627336170478e-5,-5.031584456326077e-8,-0.002072438244777095,-4.76894406001386e-5,-5.0104114550785046e-8,-0.0020723920062757552,-4.751664405123388e-5,-4.992640119935618e-8,-0.002072381620741844,-4.7399626029792626e-5,-4.980535122260885e-8,-0.002072382493146707,-4.735231857382114e-5,-4.975587690759763e-8,-0.002072365126038206,-4.737703392101369e-5,-4.9781211913094104e-8,-0.0020723002115636837,-4.746229500170882e-5,-4.987048608611002e-8,-0.002072164686144449,-4.758318793891755e-5,-4.9998772052492005e-8,-0.0020719476479477516,-4.7704672733856255e-5,-5.0130175273880784e-8,-0.0020716548762382742,-4.778785681354576e-5,-5.0224127220180263E-08,-0.002071310506859259,-4.779875995902617e-5,-5.0244500497020163e-8,-0.0020709542977483263,-4.7718213318121765e-5,-5.017014103512715e-8,-0.002070633392768585,-4.755018007788747e-5,-5.0003890279004845e-8,-0.0020703892518739446,-4.7324560969728754e-5,-4.9775852540256276e-8,-0.002070243556064142,-4.709095642120351e-5,-4.953713265926498e-8,-0.002070189582318923,-4.690347790577672e-5,-4.93441179578025e-8,-0.002070194443298303,-4.6802416516879245e-5,-4.9239360290252976e-8,-0.002070211781957937,-4.680166452708117e-5,-4.923831183218621e-8,-0.0020701982102484394,-4.688757653287808e-5,-4.9327848095478144e-8,-0.0020701254502533,-4.702784331254064e-5,-4.947517696147768e-8,-0.002069984310820259,-4.718405080239909e-5,-4.9640685225447364e-8,-0.002069781881963152,-4.732196406548829e-5,-4.978861540585559e-8,-0.002069535727065262,-4.741708010271714e-5,-4.989300757237092e-8,-0.0020692682062174064,-4.7456088345065395e-5,-4.993946266170168e-8,-0.0020690022999483347,-4.743604483466135e-5,-4.9924473337753236e-8,-0.0020687589325963695,-4.736278778201662e-5,-4.9853830021207306e-8,-0.0020685552095647745,-4.724938104372905e-5,-4.9740931313843226e-8,-0.0020684029471759965,-4.7114721697835956e-5,-4.9605222607596616e-8,-0.002068307113632894,-4.698198596032385e-5,-4.9470525465095644e-8,-0.002068264210735056,-4.6876359384872586e-5,-4.936274057243991e-8,-0.0020682611085878133,-4.682161851644506e-5,-4.930645763105391e-8,-0.002068275207205279,-4.683559588593652e-5,-4.932042167102954e-8,-0.002068276840995726,-4.692525626768796e-5,-4.941250393336782e-8,-0.0020682343681795467,-4.708286526062035e-5,-4.9575641749325084e-8,-0.002068121336074826,-4.728509807584928e-5,-4.9786665145860586e-8,-0.002067923897843404,-4.7496385865671217e-5,-5.0009436305109905e-8,-0.0020676460373650566,-4.7676378285878495e-5,-5.0202301586995866e-8,-0.0020673105644500745,-4.77898332491647e-5,-5.032822287464823e-8,-0.002066955050994269,-4.781625324925658e-5,-5.036486940750825e-8,-0.0020666233471462645,-4.7756464778773514e-5,-5.0311739548860085e-8,-0.002066354580310086,-4.763398187934115e-5,-5.0191974764700023E-08,-0.0020661724200392493,-4.7490128745401975e-5,-5.004766473653001e-8,-0.0020660778693884388,-4.737345115377653e-5,-4.9929071504630356e-8,-0.002066048524221078,-4.732603099287772e-5,-4.9880421809209325e-8,-0.0020660453797246812,-4.737129330364156e-5,-4.992704483799921e-8,-0.0020660250285791494,-4.7508085193365105e-5,-5.006889477610717e-8,-0.0020659523841825966,-4.7713206060515434e-5,-5.028283650859611e-8,-0.0020658090029066624,-4.795053885650078e-5,-5.053188956294247e-8,-0.002065594771846483,-4.818222569886375e-5,-5.0776768516938594e-8,-0.002065324117375244,-4.837752105633615e-5,-5.0985184294608874e-8,-0.002065019767433622,-4.851728875182688e-5,-5.1136723525022014e-8,-0.0020647068446275245,-4.8594594783670716e-5,-5.1223668798557995e-8,-0.0020644086381638085,-4.861304972472082e-5,-5.124938607964203e-8,-0.002064144097864555,-4.8584434676873395e-5,-5.122584536957933e-8,-0.002063926468637026,-4.852647936788248e-5,-5.1171225339119544e-8,-0.0020637623786124806,-4.846100605905334e-5,-5.11079143446867e-8,-0.0020636508879348973,-4.841213269692522e-5,-5.106066445180714e-8,-0.002063582435238546,-4.8403934845334516e-5,-5.1054290024565175e-8,-0.002063538168965467,-4.8457018960260466e-5,-5.1110281108115146e-8,-0.002063490642966396,-4.858388401565267e-5,-5.12421042751145e-8,-0.002063407082221286,-4.8783799285689586e-5,-5.144985988199522e-8,-0.0020632559577338995,-4.9039126710606216e-5,-5.1716281192541857e-8,-0.0020630160427410785,-4.931581340272001e-5,-5.200696102828744e-8,-0.002062684941410063,-4.95699691789468e-5,-5.2276889335559116e-8,-0.0020622829172062315,-4.9759696099219955e-5,-5.2482526161209284e-8,-0.0020618491854511264,-4.9858113731482825e-5,-5.259526114699326e-8,-0.0020614313126430684,-4.98622055714111e-5,-5.261072103110058e-8,-0.0020610717124268244,-4.979388598943105e-5,-5.255018976438976e-8,-0.00206079622917913,-4.9693307260769264e-5,-5.2454091838812215e-8,-0.002060608259750969,-4.960738794563041e-5,-5.2370482519734586e-8,-0.0020604893759882652,-4.957747244117635e-5,-5.234243575739418e-8,-0.0020604054583355405,-4.962944279368117e-5,-5.239769021503708e-8,-0.00206031622426224,-4.976850689463904e-5,-5.254290844467591e-8,-0.0020601854537221713,-4.997959938080869e-5,-5.276367005121703e-8,-0.002059989171420568,-5.0232827495872717e-5,-5.3029781808228276e-8,-0.0020597197607184654,-5.049196909900188e-5,-5.330394627200139e-8,-0.002059385412596773,-5.0723251719086136e-5,-5.35509256812709e-8,-0.002059005920337264,-5.0901931837912855e-5,-5.374455696877302e-8,-0.0020586068325025636,-5.1015438910330984e-5,-5.387122879648511e-8,-0.0020582139353274493,-5.106332394108202e-5,-5.3929977985066915e-8,-0.0020578492211639973,-5.105516573900859e-5,-5.3930358175955645e-8,-0.002057528552028513,-5.100771436745336e-5,-5.388943054436595e-8,-0.0020572605931187234,-5.094215881551009e-5,-5.382886471043966e-8,-0.0020570463828137086,-5.088182315066045e-5,-5.3772543032440546e-8,-0.0020568790450358394,-5.0850080664488783e-5,-5.3744486331419684e-8,-0.0020567435004348058,-5.086799254343324e-5,-5.376655829843546e-8,-0.0020566165172875277,-5.0951144908211624e-5,-5.38553140117008e-8,-0.002056468009873697,-5.1105440079060466e-5,-5.40176449522486e-8,-0.002056264887091375,-5.13224346701609e-5,-5.4245796040435814e-8,-0.0020559784072281106,-5.157623756835036e-5,-5.451389058844007e-8,-0.0020555942713637253,-5.1825209665744814e-5,-5.4779432398487804e-8,-0.0020551217432332926,-5.202108670480498e-5,-5.4992587084446835e-8,-0.002054595971680873,-5.212442299521637e-5,-5.511211091620739e-8,-0.002054069540827032,-5.212000715115373e-5,-5.51213256728815e-8,-0.0020535954582683582,-5.202381128623128e-5,-5.503543356010499e-8,-0.002053209667556904,-5.187728707364314e-5,-5.48959111155173e-8,-0.002052921320923942,-5.1732422490422854e-5,-5.4755490408141264e-8,-0.0020527136286440546,-5.163540619096735e-5,-5.466165472016251e-8,-0.002052552370246584,-5.16152962902263e-5,-5.464504010682952e-8,-0.002052397089200715,-5.167979779085585e-5,-5.471483931427527e-8,-0.0020522111175157827,-5.1817015362214554e-5,-5.4860156203498216e-8,-0.002051968552414977,-5.200091488002448e-5,-5.505518884494557e-8,-0.002051657757119859,-5.219838699551085e-5,-5.5266251947721564e-8,-0.0020512816489339715,-5.237636228823249e-5,-5.5459107581815276e-8,-0.0020508553095427784,-5.2507832957142995e-5,-5.5605365688318714e-8,-0.0020504017421625635,-5.2575890404729004e-5,-5.568690921630114e-8,-0.002049946887543557,-5.257533993074332e-5,-5.5697769382127575e-8,-0.002049514984834118,-5.251207506856239e-5,-5.5643570315387093e-8,-0.0020491250330573053,-5.240083953067565e-5,-5.553919797775131e-8,-0.0020487886736325817,-5.226219084775036e-5,-5.540559549606092e-8,-0.002048509350314085,-5.211942672300324e-5,-5.526655233827838e-8,-0.0020482822912756475,-5.1995876311308334e-5,-5.514595440180733e-8,-0.0020480948969156336,-5.191250486751777e-5,-5.506543751527602e-8,-0.0020479273660762303,-5.188554270222557e-5,-5.5042078174011434e-8,-0.002047753716271682,-5.19237834715236e-5,-5.5085654827554707e-8,-0.002047543853386551,-5.202532476066097e-5,-5.5195172880639046e-8,-0.0020472677925593256,-5.2174216124140644e-5,-5.535514660858792e-8,-0.002046902870774027,-5.2338771760351975e-5,-5.553355877045675e-8,-0.0020464432837271392,-5.247451873274851e-5,-5.568470840459575e-8,-0.0020459084093877532,-5.253449204712567e-5,-5.575981860047395e-8,-0.002045343640214381,-5.2486027294355265e-5,-5.5724461720487053e-8,-0.002044808785656605,-5.2326853813685626e-5,-5.557525555895152e-8,-0.002044356731611969,-5.208986005362827e-5,-5.534487592771635e-8,-0.002044013525552351,-5.183141847200364e-5,-5.5090255370018856e-8,-0.002043771226817781,-5.160953417781544e-5,-5.48704621303244e-8,-0.0020435956589243583,-5.1464429347744986e-5,-5.472704260792385e-8,-0.0020434418674889353,-5.1410036594933055e-5,-5.4675282541850294e-8,-0.0020432684427998627,-5.14362548539681e-5,-5.470618039648655e-8,-0.0020430462096218717,-5.1516940304592496e-5,-5.4794150517663037e-8,-0.0020427612302023604,-5.161886518563504e-5,-5.490581755587025e-8,-0.002042413976632722,-5.170911019925943e-5,-5.50074620408479e-8,-0.0020420165420526716,-5.1760253982835196e-5,-5.5070471238764245e-8,-0.0020415890123641396,-5.1753638794210315e-5,-5.507496856439569e-8,-0.002041155494939975,-5.168102371657047e-5,-5.501178570621877e-8,-0.0020407401651533347,-5.154474405169965e-5,-5.488278817879703e-8,-0.0020403637204026146,-5.135653343018677e-5,-5.4699684377973364e-8,-0.002040040576882192,-5.113526412477106e-5,-5.448162890443747e-8,-0.002039777091455139,-5.09039490226065e-5,-5.425206240270826e-8,-0.0020395709362431877,-5.068649756636404e-5,-5.4035371776647424e-8,-0.002039411459954195,-5.050467571637247e-5,-5.385385724355181e-8,-0.002039280756574348,-5.037542727193322e-5,-5.372512326084712e-8,-0.0020391552857087123,-5.030852534711591e-5,-5.365977061904039e-8,-0.0020390080427771986,-5.030447590753775e-5,-5.365921376204627e-8,-0.002038811568452725,-5.0352607930303213e-5,-5.3713516384989046e-8,-0.0020385424324039243,-5.042973944197244e-5,-5.379970190700536e-8,-0.0020381875739485158,-5.050077044952324e-5,-5.388206675784495e-8,-0.0020377516616928775,-5.052330199125621e-5,-5.391680200972993e-8,-0.0020372625651711995,-5.045802416725423e-5,-5.386277190055731e-8,-0.0020367698775526524,-5.028392416035833e-5,-5.3697376840582164e-8,-0.0020363321435952564,-5.001196000452072e-5,-5.34308014077663e-8,-0.0020359951521852593,-4.968703486004547e-5,-5.310816086035136e-8,-0.0020357726478473404,-4.937288418461528e-5,-5.279414480895378e-8,-0.0020356419556401216,-4.9126855995544544e-5,-5.2547399322285394e-8,-0.002035556684070434,-4.897959533240644e-5,-5.2399885499866514e-8,-0.0020354668174017705,-4.892970414356411e-5,-5.2351307750795756e-8,-0.0020353344578759418,-4.8951698867931034e-5,-5.237686688565701e-8,-0.0020351402813209166,-4.900893595997211e-5,-5.2440021527677685e-8,-0.0020348825479860966,-4.906468718670452e-5,-5.250353037457378e-8,-0.0020345726105927375,-4.908894182699448e-5,-5.253641005057569e-8,-0.002034229863541913,-4.906144649731033e-5,-5.251727392128725e-8,-0.002033877432711455,-4.897243922319491e-5,-5.2435389666249733e-8,-0.002033538711092817,-4.882223756648143e-5,-5.2290488844127926e-8,-0.002033234470164266,-4.8620156756388854e-5,-5.2091736421230884e-8,-0.0020329804185158853,-4.838285072517303e-5,-5.185597492180308e-8,-0.0020327852353072594,-4.813206614562613e-5,-5.160531630998899e-8,-0.002032649254192641,-4.789178910703803e-5,-5.136415864036497e-8,-0.00203256409568354,-4.7684964149517676e-5,-5.115586867184493e-8,-0.002032513412831578,-4.7530207576543425e-5,-5.099954932398015e-8,-0.0020324746777436327,-4.743890663944881e-5,-5.0907215491822745e-8,-0.002032421864725609,-4.741298395352246e-5,-5.088156196373777e-8,-0.002032328861343699,-4.744359026821503e-5,-5.091451930689139e-8,-0.002032173443614939,-4.7510913626487626e-5,-5.098678990055797e-8,-0.002031941783002499,-4.75853718193778e-5,-5.106873150905396e-8,-0.0020316332829377146,-4.763092567556373e-5,-5.112349305662727e-8,-0.002031264678451989,-4.7611506845454626e-5,-5.111354889776993e-8,-0.0020308711459007655,-4.7500835256465015e-5,-5.101094070015697e-8,-0.002030501384939176,-4.7293891553481265e-5,-5.0809346057054425e-8,-0.0020302046550841244,-4.7015069114082157e-5,-5.053271389164446e-8,-0.002030012417735536,-4.6715860633814e-5,-5.023306514824246e-8,-0.0020299237206302333,-4.645858056483108e-5,-4.997393446583235e-8,-0.002029904534219609,-4.629246101907128e-5,-4.980599835191041e-8,-0.0020299027081861383,-4.6235733219535855e-5,-4.974874457112798e-8,-0.0020298691085456756,-4.6273355836021885e-5,-4.9787942532947575e-8,-0.002029772836986357,-4.6368492929145236e-5,-4.9886997870461254e-8,-0.0020296053518841788,-4.6478270704142267e-5,-5.0002696473796485e-8,-0.0020293762284797076,-4.6565779984025805e-5,-5.009732090515303e-8,-0.0020291058975264805,-4.660586503998099e-5,-5.0144678766039385e-8,-0.0020288190745721122,-4.658611551409667e-5,-5.013139050785385e-8,-0.0020285401833065263,-4.650544482721242e-5,-5.0055709880198454e-8,-0.0020282905163081324,-4.637198758862261e-5,-4.9925521941264115e-8,-0.0020280863812595215,-4.6201017541421475e-5,-4.975620376898143e-8,-0.002027937697407739,-4.6012910954525015e-5,-4.95684364968778e-8,-0.0020278468548150497,-4.5830932166805734e-5,-4.938584335030445e-8,-0.0020278079352926354,-4.5678563130217145e-5,-4.923225233991149e-8,-0.0020278066732735607,-4.5576287146234076e-5,-4.9128512005390405e-8,-0.0020278216052989797,-4.553814792964579e-5,-4.908913495339701e-8,-0.0020278266184087235,-4.5568694544187735e-5,-4.91192941943901e-8,-0.0020277947861438816,-4.566099727855335e-5,-4.921277950752152e-8,-0.0020277030598136164,-4.579640243999685e-5,-4.9351559556919325e-8,-0.0020275370670149273,-4.5946459644631754e-5,-4.950743825762933e-8,-0.0020272951641109476,-4.6077038467505365e-5,-4.964594133297112e-8,-0.0020269909380996286,-4.615441491887575e-5,-4.9732349917762104e-8,-0.002026653192492816,-4.615293081887066e-5,-4.973956903588067e-8,-0.002026322209052732,-4.606314805429271e-5,-4.965671815932576e-8,-0.0020260414134917063,-4.5898197313257225e-5,-4.949598467985722e-8,-0.002025845064816443,-4.569487890022771e-5,-4.929407616837752e-8,-0.0020257453978966516,-4.550622741121225e-5,-4.9104815330766504e-8,-0.0020257254701901042,-4.538541867435896e-5,-4.898274157296879e-8,-0.0020257433889951937,-4.536680350718691e-5,-4.89636608578841e-8,-0.0020257476215753702,-4.5453789008186565e-5,-4.905208248604179e-8,-0.002025695654193513,-4.562012774480506e-5,-4.922225373647776e-8,-0.0020255663701208917,-4.582262170758979e-5,-4.943082479997011e-8,-0.0020253618227586557,-4.6016984020625265e-5,-4.963283638283841e-8,-0.00202510099803616,-4.6169328034816214e-5,-4.979343944742674e-8,-0.002024811017417274,-4.626077683867761e-5,-4.989278000082901e-8,-0.002024519795827304,-4.6286832571634604e-5,-4.992561400738215e-8,-0.0020242514862415977,-4.625433913083903e-5,-4.989840752411386e-8,-0.002024024252686185,-4.617810969109077e-5,-4.982595556164917e-8,-0.0020238493406938953,-4.607808430854788e-5,-4.972841725462505e-8,-0.0020237306112493255,-4.597702408116703e-5,-4.96288581956967e-8,-0.002023664162763472,-4.589834984431947e-5,-4.955099750636145e-8,-0.0020236381094273855,-4.586365827157764e-5,-4.951673189348936e-8,-0.0020236329502209293,-4.5889656355000434e-5,-4.954314934249165e-8,-0.002023623153744319,-4.5984715081919234e-5,-4.963915423232379e-8,-0.0020235804546441657,-4.6145777376813115e-5,-4.980235686787022e-8,-0.002023478863220688,-4.635676148666589e-5,-5.0017332271608656e-8,-0.0020233006158513526,-4.658965624449702e-5,-5.025648223081647e-8,-0.002023041531229927,-4.6808945440860525e-5,-5.048423155390615e-8,-0.0020227139642913913,-4.6978896318268104e-5,-5.066420578545552e-8,-0.002022346013528821,-4.7072161309276584e-5,-5.0767917079637096e-8,-0.002021976583923614,-4.7077557162162256e-5,-5.0782829172766134e-8,-0.002021646938817805,-4.700482993717928e-5,-5.071753209060727e-8,-0.0020213903373314294,-4.688457071627136e-5,-5.060204845365824e-8,-0.00202122225761361,-4.676225438165741e-5,-5.048208770780828e-8,-0.002021134399579563,-4.668682793085823e-5,-5.040757499631068e-8,-0.0020210955157597492,-4.66964938733245e-5,-5.041810897949245e-8,-0.002021060207166187,-4.680660727557303e-5,-5.053039604591645e-8,-0.0020209831787395298,-4.700501284627893e-5,-5.073317426465869e-8,-0.0020208331782008877,-4.7257207541469374e-5,-5.0992163914768974e-8,-0.002020600749527367,-4.751873684499668e-5,-5.126249359928724e-8,-0.002020297495132843,-4.7748817668834114e-5,-5.150253416122725e-8,-0.002019949045350994,-4.791973032907616e-5,-5.168357842505219e-8,-0.002019586148214338,-4.801998291591459e-5,-5.1793273968425187e-8,-0.0020192374342056386,-4.8052601996660434e-5,-5.183409256541799e-8,-0.002018925159106304,-4.8031175323490096e-5,-5.181942050354247e-8,-0.0020186634942643855,-4.797571811880198e-5,-5.1769350061628944e-8,-0.002018458307559683,-4.7909321720409155e-5,-5.17071934570522e-8,-0.0020183074793059634,-4.7855657746552463e-5,-5.1656878184229704e-8,-0.0020182012242393878,-4.783688725574289e-5,-5.164083264519561e-8,-0.0020181224346406887,-4.7871384574551e-5,-5.167777089044754e-8,-0.002018047515893418,-4.797092449356852e-5,-5.177995991815182e-8,-0.0020179484270965854,-4.813745696818201e-5,-5.1950004632217014e-8,-0.0020177966111187182,-4.836022705575067e-5,-5.217785319666721e-8,-0.0020175689778127058,-4.861471743161788e-5,-5.243952149084699e-8,-0.0020172549083493363,-4.886518940475764e-5,-5.2699404555608824e-8,-0.0020168618491771245,-4.9071739379400246e-5,-5.291720278700551e-8,-0.0020164165457899337,-4.920074189090056e-5,-5.305839885690176e-8,-0.0020159601254947663,-4.923537724905972e-5,-5.310497994930823e-8,-0.0020155377782343923,-4.9182101111894395e-5,-5.3062208619770655e-8,-0.0020151863264922898,-4.9070186505180795e-5,-5.2958496549887175e-8,-0.0020149239683831454,-4.894424255995497e-5,-5.28381974040878e-8,-0.002014745466484543,-4.8852234007670655e-5,-5.2749744360003565e-8,-0.002014623980385843,-4.8832737442584404e-5,-5.2732795661562925E-08,-0.0020145187675945538,-4.8905033515197663e-5,-5.2807996323674024e-8,-0.002014386463354211,-4.9064737170752646e-5,-5.297217537397421e-8,-0.0020141926071653754,-4.928613889269881e-5,-5.3200321420099145e-8,-0.002013919923050992,-4.953032530867741e-5,-5.3453543629696204e-8,-0.002013571006866503,-4.975617191211685e-5,-5.369014468097558e-8,-0.0020131652167542056,-4.993046123284049e-5,-5.3875992139383384e-8,-0.002012731692604997,-5.0034158097124634e-5,-5.399109718532883e-8,-0.0020123014742402913,-5.0063845602625036e-5,-5.403129483295887e-8,-0.00201190121087524,-5.002933955111049e-5,-5.4005977959494064e-8,-0.002011549521326985,-4.994945558883987e-5,-5.393385164637899e-8,-0.002011255743455944,-4.984764678639762e-5,-5.383846809376056e-8,-0.0020110201985696686,-4.974843179222414e-5,-5.374453985485008e-8,-0.002010835083772604,-4.9674777295965575e-5,-5.367526613695328e-8,-0.0020106854277154628,-4.964606496865315e-5,-5.365032901804489e-8,-0.0020105500400673802,-4.9676073962541255e-5,-5.3683953076972764e-8,-0.0020104028617102853,-4.9770593190928885e-5,-5.3782559234610896e-8,-0.0020102154280196164,-4.992472116898015e-5,-5.39419945769669e-8,-0.002009961203093299,-5.01205774324166e-5,-5.4145045648848874e-8,-0.0020096220475094026,-5.032702956215601e-5,-5.436091558231032e-8,-0.0020091956873586328,-5.0503577918817376e-5,-5.454893403638213e-8,-0.0020087010935627442,-5.060963041617747e-5,-5.466782814365228e-8,-0.0020081776870822868,-5.06175125618987e-5,-5.468889528583259e-8,-0.0020076760813480246,-5.052404157729019e-5,-5.4607820427235687e-8,-0.0020072426309083852,-5.03543523152836e-5,-5.444874990717472e-8,-0.0020069043511348767,-5.015493124700536e-5,-5.42575575233768e-8,-0.0020066610667815107,-4.997871174697851e-5,-5.40871357697118e-8,-0.0020064875013838,-4.98690470565664e-5,-5.3981449732444325e-8,-0.0020063429428621477,-4.9848723760962696e-5,-5.396442162152271e-8,-0.0020061836818402717,-4.991653940438004e-5,-5.40361687618578e-8,-0.0020059740082301832,-5.005060728795719e-5,-5.4175883241144576e-8,-0.0020056933781890086,-5.021595398427699e-5,-5.434910207886136e-8,-0.0020053390005447076,-5.037374382076034e-5,-5.4516829286568113e-8,-0.0020049242019915922,-5.048986269802197e-5,-5.464425732666e-8,-0.0020044736538592134,-5.054119841472836e-5,-5.470733410760349e-8,-0.0020040170112563204,-5.0518666909647305e-5,-5.469609132681992e-8,-0.002003582651521957,-5.0426916644760484e-5,-5.461455429534083e-8,-0.002003192848389794,-5.028151267800684e-5,-5.4477987905210974e-8,-0.0020028610069787686,-5.010484787898947e-5,-5.430874706071043e-8,-0.0020025908720933084,-4.992194480586509e-5,-5.413196542421391e-8,-0.0020023771463984017,-4.9756918400443195e-5,-5.3971933421660555e-8,-0.002002206808863418,-4.963034306888264e-5,-5.384945799572805e-8,-0.0020020606277349035,-4.955729195151486e-5,-5.3779965287491494e-8,-0.002001914752160842,-4.9545629165052306e-5,-5.377186303277142e-8,-0.0020017426370449094,-4.959424701946217e-5,-5.382477021649585e-8,-0.0020015178700865826,-4.9691252782268014e-5,-5.392756337052816e-8,-0.002001218597218113,-4.981272984636775e-5,-5.4056892268100934e-8,-0.0020008337756181305,-4.9923598500677135e-5,-5.417780009747694e-8,-0.002000370096206164,-4.998267559890689e-5,-5.4248682766537245e-8,-0.0019998563334538166,-4.995319905600739e-5,-5.423191853970226e-8,-0.0019993405058199324,-4.981692900508882e-5,-5.4108211202206056e-8,-0.0019988771595501596,-4.958544642961348e-5,-5.388813032255459e-8,-0.001998508235516319,-4.930060305686856e-5,-5.361273486836377e-8,-0.0019982470792282445,-4.902112276864653e-5,-5.3340329163181614e-8,-0.001998074636703137,-4.880149849864028e-5,-5.31255233957502e-8,-0.0019979490776461596,-4.867431780069525e-5,-5.300163018068865e-8,-0.001997822100817167,-4.864355803151583e-5,-5.2973805172126e-8,-0.0019976535169998273,-4.8688691267618395e-5,-5.3022777123200866e-8,-0.001997419552504148,-4.8774601604832057e-5,-5.311433704727912e-8,-0.001997114744774493,-4.8862226688571974e-5,-5.320970261330998e-8,-0.0019967494607951706,-4.891701856579829e-5,-5.3273961127601174e-8,-0.0019963452028423133,-4.8914377496388965e-5,-5.328171644965104e-8,-0.0019959291743273603,-4.884227819040176e-5,-5.3220032150562435e-8,-0.0019955289872912786,-4.870151669163586e-5,-5.3088954045228216e-8,-0.001995168161878916,-4.850401085939419e-5,-5.289994962557313e-8,-0.0019948628903654394,-4.8269744288963775e-5,-5.267284224427861e-8,-0.0019946202670904343,-4.8023026531601735e-5,-5.2431967802807096e-8,-0.0019944379707342885,-4.7788675113880514e-5,-5.220224766362233e-8,-0.0019943051797844005,-4.7588659781935926e-5,-5.200579146376313e-8,-0.0019942042706509,-4.743954711749449e-5,-5.1859386167826104e-8,-0.001994112859914415,-4.735069680607469e-5,-5.1772781475901097e-8,-0.001994006037341234,-4.732295848864623e-5,-5.1747440313270875e-8,-0.001993858894812306,-4.7347710668200726e-5,-5.177551950964653e-8,-0.0019936496579878314,-4.740627635058635e-5,-5.18390919640976e-8,-0.001993363861819001,-4.7470190253398286e-5,-5.1910146838977426e-8,-0.0019929996205191062,-4.7503541595903896e-5,-5.195272017060764e-8,-0.0019925728195238626,-4.746902878186876e-5,-5.1928915188607375e-8,-0.001992119310680294,-4.7338527946317814e-5,-5.1809644671995214e-8,-0.001991689987214206,-4.710613654808492e-5,-5.1587956392584026e-8,-0.0019913363447532006,-4.6797293437381455e-5,-5.128838764343941e-8,-0.0019910904742861894,-4.6465669201456026e-5,-5.096398901617266e-8,-0.001990950368197197,-4.617513909028325e-5,-5.067840830528089e-8,-0.0019908806466250022,-4.5975167125504204e-5,-5.048140368418561e-8,-0.0019908285309041696,-4.5883747649525306e-5,-5.039181646697579e-8,-0.0019907446103717484,-4.588605349155747e-5,-5.039601315964357e-8,-0.0019905972795608703,-4.59456274268961e-5,-5.045866854053545e-8,-0.0019903769307380295,-4.601920467643337e-5,-5.053718566759492e-8,-0.001990092573971516,-4.60683822052351e-5,-5.059317403618827e-8,-0.0019897653271612717,-4.6066023946311286e-5,-5.059894157366422e-8,-0.0019894219047486518,-4.5998288524238066e-5,-5.0539804388693425e-8,-0.001989089388356069,-4.5864029542767294e-5,-5.041380553085208e-8,-0.001988791342582684,-4.5672889943786124e-5,-5.023002279694939e-8,-0.0019885450270769787,-4.544267119758317e-5,-5.000598811628438e-8,-0.001988359611822744,-4.519623780012269e-5,-4.9764511439258186e-8,-0.001988235373861473,-4.4958196634044265e-5,-4.9530237154278555e-8,-0.001988163874878257,-4.475155292368226e-5,-4.932622435749737e-8,-0.0019881291494703197,-4.4594624487372946e-5,-4.917088069716583e-8,-0.0019881097672433527,-4.449860634103792e-5,-4.907562319610449e-8,-0.0019880814361664893,-4.446599676205845e-5,-4.9043404078743095e-8,-0.001988019896370336,-4.448984902371915e-5,-4.90679788963876e-8,-0.0019879040251158317,-4.455382789815783e-5,-4.9133842968146527e-8,-0.001987719144006088,-4.463316087772778e-5,-4.921694042093964e-8,-0.001987460558236463,-4.46967620556441e-5,-4.9286514917244204e-8,-0.0019871370966062707,-4.471122399257981e-5,-4.9308929889939364e-8,-0.0019867735413332,-4.464753053386993e-5,-4.925440944020967e-8,-0.0019864096922321078,-4.449046879624519e-5,-4.910667619111871e-8,-0.001986093293887148,-4.424847454638656e-5,-4.887310764941467e-8,-0.0019858657165408035,-4.395851101024967e-5,-4.858986252843164e-8,-0.0019857444502105696,-4.36793761172567e-5,-4.831531748591886e-8,-0.0019857123157436644,-4.3471892985409506e-5,-4.811032585031551e-8,-0.001985722442942424,-4.3374678707536145e-5,-4.801403302963816e-8,-0.001985717837909519,-4.3389861516746215e-5,-4.802953349265059e-8,-0.0019856536347009303,-4.348657983914437e-5,-4.812711300883761e-8,-0.001985509793314366,-4.3617293200771854e-5,-4.826016677840372e-8,-0.001985291041141802,-4.373551017512467e-5,-4.8382599589213666e-8,-0.001985018982825112,-4.380710889702349e-5,-4.8460059289153266e-8,-0.00198472269519155,-4.381413163467009e-5,-4.8473904889146595e-8,-0.0019844313817317153,-4.3753602107519224e-5,-4.8420335013601454e-8,-0.0019841698777690116,-4.3634265418978614e-5,-4.830740886578302e-8,-0.00198395631013117,-4.347308097731399e-5,-4.815167459106861e-8,-0.00198380093609794,-4.32920529085931e-5,-4.7974972464015794e-8,-0.0019837056325942176,-4.311530044265703e-5,-4.7801388949448075e-8,-0.0019836639326078916,-4.2966205027643966e-5,-4.765430103584804e-8,-0.0019836616788419274,-4.2864560277764126e-5,-4.755351001687462e-8,-0.0019836784835310212,-4.2823816969524074e-5,-4.75125667742844e-8,-0.0019836901334029686,-4.284880913635948e-5,-4.753661876885519e-8,-0.0019836717844280323,-4.293443985340406e-5,-4.7621167559884083e-8,-0.001983601577361672,-4.306561983656408e-5,-4.775195443764006e-8,-0.00198346427639853,-4.321860830029743e-5,-4.79061064744248e-8,-0.001983254503428399,-4.3363817575379086e-5,-4.805466061004061e-8,-0.001982979128261479,-4.3470011868281195e-5,-4.8166508580713625e-8,-0.0019826583317162807,-4.350982227820718e-5,-4.8213806615591725e-8,-0.0019823245270563744,-4.346642997860529e-5,-4.817876549475533e-8,-0.0019820179079688013,-4.334055689306835e-5,-4.806092503305833e-8,-0.0019817776241884424,-4.315546627647395e-5,-4.788249609663614e-8,-0.001981629243341138,-4.295622121243347e-5,-4.768788218876515e-8,-0.00198157253207564,-4.279964969343516e-5,-4.753376447678903e-8,-0.0019815768110193243,-4.273555993575656e-5,-4.747031671641675e-8,-0.0019815896914275643,-4.2786939561310826e-5,-4.752132323658576e-8,-0.001981556964728314,-4.294065163758243e-5,-4.767470277125102e-8,-0.001981442898715948,-4.315455768342111e-5,-4.788935301045354e-8,-0.001981239994932547,-4.337586664281439e-5,-4.811318043326988e-8,-0.001980965615592369,-4.3559380683812036e-5,-4.830112897720887e-8,-0.001980651104271411,-4.3677669740602314e-5,-4.842535724700544e-8,-0.001980330622165264,-4.37224614567855e-5,-4.8476842035870866e-8,-0.001980033601616317,-4.370082309922366e-5,-4.846185712372692e-8,-0.001979781186553916,-4.362987461869388e-5,-4.8396913373778846e-8,-0.0019795853426471683,-4.35321462310607e-5,-4.8304189751421825e-8,-0.001979449164923876,-4.343211096476673e-5,-4.8208004801788516e-8,-0.001979367516891493,-4.335355049589747e-5,-4.81320762404166e-8,-0.0019793277939190233,-4.331724667908914e-5,-4.8097157631997425e-8,-0.0019793109779484602,-4.333865671006025e-5,-4.811875302716466e-8,-0.00197929334115372,-4.342552864224307e-5,-4.8204839307820454e-8,-0.0019792491585166726,-4.3575840607934675e-5,-4.835390191602501e-8,-0.0019791544719827683,-4.377676979296662e-5,-4.855390559455163e-8,-0.0019789914659854206,-4.400538864917376e-5,-4.878285284376596e-8,-0.001978752618067997,-4.423151487384888e-5,-4.9011380729146134e-8,-0.001978443571552841,-4.442266642057841e-5,-4.920743293376487e-8,-0.0019780837559768326,-4.455044155192306e-5,-4.93424419569069e-8,-0.001977704189216635,-4.459716325964112e-5,-4.9397956177720134e-8,-0.0019773423735596264,-4.4561466986321577e-5,-4.937141684655841e-8,-0.001977034607825835,-4.446140319979623e-5,-4.927959934097138e-8,-0.0019768066566202684,-4.433345001834858e-5,-4.915798984075471e-8,-0.0019766648048065616,-4.422600808807836e-5,-4.905454320636164e-8,-0.001976590642014865,-4.418718038152136e-5,-4.901754862575995e-8,-0.0019765433922679146,-4.424941926591262e-5,-4.908018505043689e-8,-0.0019764714799322142,-4.441704193678446e-5,-4.924782281001948e-8,-0.0019763299672662825,-4.466351711965738e-5,-4.949503779025665e-8,-0.0019760958592488333,-4.494111748014449e-5,-4.9774988214425593e-8,-0.001975773776278894,-4.519821653836421e-5,-5.003649186587927e-8,-0.001975390495162118,-4.539533451112828e-5,-5.0239976118785304e-8,-0.0019749831859174212,-4.551335871876182e-5,-5.0365773681986254e-8,-0.0019745879207018306,-4.555320514137526e-5,-5.041400386812903e-8,-0.0019742323786003236,-4.553037719774458e-5,-5.039938833552872e-8,-0.0019739331147513276,-4.5468406296927464e-5,-5.03448680797245e-8,-0.001973695819172792,-4.539349471122782e-5,-5.0276287499947574e-8,-0.0019735168135767726,-4.533089935511781e-5,-5.0218721062822205e-8,-0.0019733846944876474,-4.5302611923024283e-5,-5.019408501320979e-8,-0.0019732817668098417,-4.532562487218592e-5,-5.021939519624579e-8,-0.0019731854504376916,-4.5410207074392044e-5,-5.0305107394665245e-8,-0.0019730701622044603,-4.5557997564901036e-5,-5.045329830787116e-8,-0.001972910223039121,-4.576026673732602e-5,-5.0655959638034884e-8,-0.001972684031500541,-4.5997198476817514E-05,-5.0894198826261366e-8,-0.001972379090884328,-4.623929153514652e-5,-5.113944114811148e-8,-0.001971996635686588,-4.6451727228890164e-5,-5.135753400078218e-8,-0.0019715539766186102,-4.660160044857538e-5,-5.1515737334611745e-8,-0.0019710828542270687,-4.6666477609024985e-5,-5.159115485388241e-8,-0.001970623298040414,-4.664162896085638e-5,-5.1578016403124346e-8,-0.001970214212090245,-4.65432620191606e-5,-5.1491151948029e-8,-0.001969883242927487,-4.6406229230851866e-5,-5.1364075446337285e-8,-0.001969638857557791,-4.627639846031354e-5,-5.124174919757445e-8,-0.001969467008160238,-4.6199420166105754e-5,-5.116961866658035e-8,-0.0019693336914688433,-4.6208627966382286e-5,-5.1181552597747694e-8,-0.001969193371546135,-4.631535486871011e-5,-5.128996338486575e-8,-0.0019690015104308046,-4.650497733936632e-5,-5.148150977961362e-8,-0.001968727504736385,-4.6740821064600386e-5,-5.172064567922468e-8,-0.001968363316252578,-4.697522012612561e-5,-5.196041523031695e-8,-0.00196792440570595,-4.71636765838571e-5,-5.2156492160433425e-8,-0.001967443051877653,-4.727655930735045e-5,-5.227890703313716e-8,-0.0019669575953292872,-4.730437768201357e-5,-5.2317472555509746e-8,-0.0019665022928231123,-4.7256201646844035e-5,-5.228042290007389e-8,-0.0019661009362071376,-4.715377406937989e-5,-5.218873377314962e-8,-0.0019657647779907092,-4.702464970878444e-5,-5.206938544394163e-8,-0.001965493477560509,-4.689660585321579e-5,-5.194979398067257e-8,-0.001965277377825799,-4.6794002474408414e-5,-5.185413345399812e-8,-0.001965099914950498,-4.67357278760477e-5,-5.1801254050097615e-8,-0.0019649396611614903,-4.673397854378611e-5,-5.180348656861776e-8,-0.0019647721014879383,-4.6793187059781656e-5,-5.186563289514447e-8,-0.0019645716558417217,-4.690878647692816e-5,-5.1983771468773974e-8,-0.0019643145874512157,-4.706604455706395e-5,-5.214404907793817e-8,-0.001963983213520618,-4.7239795327600476e-5,-5.232226406608289e-8,-0.0019635711534783046,-4.7396399391850306e-5,-5.248560550378622e-8,-0.0019630881783210172,-4.749923158841316e-5,-5.2597912011238834e-8,-0.0019625620385825687,-4.7517783547080394e-5,-5.262860028092075e-8,-0.001962034600536159,-4.743810866143697e-5,-5.2563034466538445e-8,-0.001961551663459193,-4.7270187530390955e-5,-5.2409958425237556e-8,-0.0019611493437624405,-4.7047867070956564e-5,-5.2201684891901307e-8,-0.0019608425118726406,-4.682012526184868e-5,-5.198578136085175e-8,-0.001960620223510975,-4.663679110534357e-5,-5.1811253235307756e-8,-0.00196044964691645,-4.65343886842311e-5,-5.1714684022350806e-8,-0.001960286244385532,-4.652696232149927e-5,-5.171103424799668e-8,-0.0019600861987816276,-4.660393314075276e-5,-5.1791161198884274e-8,-0.001959817384072231,-4.673447845393499e-5,-5.192571546679343e-8,-0.0019594663672666632,-4.687647620848606e-5,-5.207366237327364e-8,-0.0019590402013480103,-4.69873681531962e-5,-5.219291849091948e-8,-0.0019585630459199917,-4.7034093216261266e-5,-5.2250281015410575e-8,-0.0019580689434451474,-4.699963912862847e-5,-5.222813797470916e-8,-0.001957593098636109,-4.6884855780413277E-05,-5.212650982795257e-8,-0.0019571642607120374,-4.6705755925512453e-5,-5.196056523166988e-8,-0.001956800031936092,-4.648795164335014e-5,-5.175520387715332e-8,-0.0019565055327110657,-4.626040613743492e-5,-5.1538868280151164e-8,-0.001956274664949442,-4.605019885705157e-5,-5.133830575689433e-8,-0.0019560927255029953,-4.587904903303501e-5,-5.117507505063576e-8,-0.001955939273522816,-4.5761480824035993e-5,-5.106372503209461e-8,-0.00195579066288265,-4.570401845100373e-5,-5.101104052329391e-8,-0.001955622211363207,-4.570476038673568e-5,-5.101566680936453e-8,-0.001955410378080181,-4.575298140689403e-5,-5.1067700552761083e-8,-0.0019551355106216866,-4.5828851541139104e-5,-5.114829612455283e-8,-0.0019547856381423576,-4.590392133545704e-5,-5.122995115968192e-8,-0.001954361197611504,-4.594364275569868e-5,-5.127880370114713e-8,-0.001953879361532978,-4.591336545457481e-5,-5.126044894606853e-8,-0.001953375159198017,-4.5788157126795125e-5,-5.114965466945004e-8,-0.0019528960573228693,-4.556404200060815e-5,-5.094156483201756e-8,-0.0019524888638265663,-4.52650121756844e-5,-5.0658773399677315e-8,-0.0019521829510683111,-4.493969555783338e-5,-5.03482415102804e-8,-0.001951978224705543,-4.4646436883604996e-5,-5.006686001308755e-8,-0.0019518449631389671,-4.4433199757164185e-5,-4.9861909053352045e-8,-0.0019517355290165363,-4.43223575013476e-5,-4.9756164208185047e-8,-0.0019516011374687279,-4.430667685873654e-5,-4.9743737900243164e-8,-0.0019514058087092413,-4.4355660121435736e-5,-4.979589561049797e-8,-0.0019511334488388776,-4.442707829644108e-5,-4.987196748279403e-8,-0.0019507882121724506,-4.4478635729643045e-5,-4.993057447552316e-8,-0.0019503903208332868,-4.447687118184344e-5,-4.9938400968221414e-8,-0.0019499696523796678,-4.440237013879302e-5,-4.9875550740711113e-8,-0.0019495587983859016,-4.425144642123595e-5,-4.973750799595954e-8,-0.0019491867583722598,-4.403481674939329e-5,-4.953408613857425e-8,-0.001948874170726926,-4.3773966244990976e-5,-4.928597425302703e-8,-0.0019486306854478142,-4.3496186610003896e-5,-4.901984567298104e-8,-0.0019484545808215287,-4.322941742227304e-5,-4.876319520040075e-8,-0.0019483342448092852,-4.299784164805793e-5,-4.853991498678627e-8,-0.0019482508367361243,-4.281882578092175e-5,-4.8367249272998265E-08,-0.0019481813406516451,-4.2701332047739913e-5,-4.8254265238426306e-8,-0.001948101431884755,-4.2645465612550796e-5,-4.820147285858156e-8,-0.0019479880023605153,-4.2642663695294445e-5,-4.820104258643957e-8,-0.0019478215084132696,-4.267621983914629e-5,-4.823725928348993e-8,-0.0019475884766814169,-4.2722120831818105e-5,-4.8287176766687065e-8,-0.001947284537476418,-4.2750605376743135e-5,-4.832193112023108e-8,-0.0019469179020162252,-4.272943149953421e-5,-4.830978464674593e-8,-0.001946512130701754,-4.2629987351193034e-5,-4.8222103668448865e-8,-0.0019461057920909896,-4.243645483759409e-5,-4.804249139879382e-8,-0.0019457459924259364,-4.2155871844775294e-5,-4.777688442978733e-8,-0.001945474433914433,-4.182357814670306e-5,-4.745909633402526e-8,-0.0019453099923769398,-4.149726260691403e-5,-4.7145127891331156e-8,-0.0019452376149965635,-4.123797713130104e-5,-4.689469161507122e-8,-0.0019452123501192205,-4.108646923628689e-5,-4.67481344270079e-8,-0.0019451775408544185,-4.104846697515171e-5,-4.671199913017461e-8,-0.001945086305653114,-4.10964890190002e-5,-4.67605464329462e-8,-0.00194491498170104,-4.118420798055841e-5,-4.6849415350206084e-8,-0.0019446649566739968,-4.1263439193324884e-5,-4.693190382853436e-8,-0.0019443564891179575,-4.129638690638195e-5,-4.6970831215838533e-8,-0.001944019871009889,-4.126124977537125e-5,-4.694416268183079e-8,-0.0019436874568431314,-4.115267744009283e-5,-4.6845757576426216e-8,-0.0019433878283089455,-4.097933082895468e-5,-4.668329117893592e-8,-0.0019431420227587768,-4.076018683375537e-5,-4.64748293924473e-8,-0.001942961425049852,-4.052037587530838e-5,-4.624478413720799e-8,-0.001942847090506267,-4.028693694379081e-5,-4.6019666043409794e-8,-0.001942790358890472,-4.008483999357206e-5,-4.5824064376144906e-8,-0.0019427745871054582,-3.9933607897037706e-5,-4.5677259981585586e-8,-0.0019427777616891982,-3.984486508728241e-5,-4.559083113158273e-8,-0.0019427755865315058,-3.982107608163827e-5,-4.556748866183424e-8,-0.0019427445679542873,-3.985544668643988e-5,-4.5601049016244416e-8,-0.0019426648249855798,-3.9932722126588916e-5,-4.5677213148583996e-8,-0.0019425225723483325,-4.003067731752825e-5,-4.577491057145826e-8,-0.00194231231186212,-4.0122223590998573e-5,-4.586815250812175e-8,-0.001942038840723702,-4.017825071467646e-5,-4.592859500544757e-8,-0.0019417189403766162,-4.017172995117602e-5,-4.592943591477745e-8,-0.0019413817963929902,-4.0083668653272205e-5,-4.5851299075569445e-8,-0.0019410663758636533,-3.9910612776753746e-5,-4.5689797651230024e-8,-0.0019408138567119492,-3.9671609827259084e-5,-4.546263553447091e-8,-0.0019406546006421536,-3.941021451110704e-5,-4.52117972507066e-8,-0.001940593319235403,-3.918608994782784e-5,-4.499543804327817e-8,-0.0019406012767298,-3.905498590278002e-5,-4.486832358067523e-8,-0.001940623920404477,-3.904542284858823e-5,-4.4859006867683975e-8,-0.0019406025544464632,-3.914639483061919e-5,-4.495769578301747e-8,-0.001940497520876102,-3.931411884703988e-5,-4.512260307194805e-8,-0.001940299698239888,-3.949212761192832e-5,-4.5299254342045724e-8,-0.0019400271696272137,-3.9631546521015266e-5,-4.5440050246729585e-8,-0.0019397134945464904,-3.970249901148748e-5,-4.55153769119164e-8,-0.0019393955892964717,-3.969592038203203e-5,-4.551557626730208e-8,-0.0019391053846128947,-3.961966037424788e-5,-4.544745102453445e-8,-0.0019388656601532564,-3.9492805816283906e-5,-4.532898685003671e-8,-0.0019386887618311728,-3.9340423201373115e-5,-4.518433473733331e-8,-0.0019385768153243493,-3.9189313030825355e-5,-4.5039624737876385e-8,-0.0019385226755074644,-3.9064588188579694e-5,-4.491950007652083e-8,-0.0019385113945777103,-3.89868350713039e-5,-4.4844233237342264e-8,-0.0019385222021650083,-3.8969763524809525e-5,-4.48273957066787e-8,-0.0019385310528990875,-3.9018436577778017e-5,-4.4874176736247263E-08,-0.001938513684450707,-3.912838732750907e-5,-4.498060099930697e-8,-0.0019384488723173468,-3.928589530112374e-5,-4.51338353807561e-8,-0.001938321483040145,-3.946943857740446e-5,-4.531354277085539e-8,-0.0019381250107120861,-3.965222629013153e-5,-4.5494184057548586e-8,-0.0019378633026130548,-3.9805684583894356e-5,-4.5648196322549064e-8,-0.0019375512317700392,-3.990367219926965e-5,-4.574992768613837e-8,-0.0019372141057675222,-3.9927275177831916e-5,-4.5780279834495175e-8,-0.0019368852732491004,-3.987006414845319e-5,-4.573198875575406e-8,-0.0019366009982821448,-3.9743041431457964e-5,-4.561474398462704e-8,-0.001936392008214114,-3.9577268369624826e-5,-4.545806912288991e-8,-0.0019362725887905185,-3.9421116423997146e-5,-4.530885190760244e-8,-0.0019362308367980837,-3.93293215936308e-5,-4.522070434461868e-8,-0.0019362265448863605,-3.934447117414749e-5,-4.5235796012735197e-8,-0.0019362021567699314,-3.947831204143984e-5,-4.5366449130396565e-8,-0.0019361044622756712,-3.9704499044345756e-5,-4.558787687093552e-8,-0.0019359055467726995,-3.9969038024905696e-5,-4.5848165191453386e-8,-0.001935610918476163,-4.0212436952495197e-5,-4.608967212085328e-8,-0.0019352522767100955,-4.0390248298052926e-5,-4.626892936144965e-8,-0.001934872343550989,-4.04826572347339e-5,-4.636602580928481e-8,-0.0019345110162189247,-4.0492973987788945e-5,-4.6383349171738214e-8,-0.0019341974042064007,-4.0440353373262014e-5,-4.633877244453355e-8,-0.00193394745527741,-4.035183976460438e-5,-4.6258113992407355e-8,-0.0019337648831009675,-4.025623586702828e-5,-4.6169223646382756e-8,-0.001933643297940725,-4.018010690860001e-5,-4.6098017218746215e-8,-0.0019335684391845415,-4.014524819687492e-5,-4.606588963420782e-8,-0.0019335202829593439,-4.016691288990378e-5,-4.608791074426844e-8,-0.001933475196842574,-4.025240778009302e-5,-4.617145854048994e-8,-0.0019334084174011334,-4.039999941699849e-5,-4.6315210257224784e-8,-0.0019332970460884604,-4.0598441631085976e-5,-4.6508730328468455e-8,-0.0019331234337040622,-4.0827636234276635e-5,-4.67330881859333e-8,-0.0019328784570221483,-4.1060782189105156e-5,-4.69628242270068e-8,-0.001932564016748744,-4.126806268614148e-5,-4.716934132885776e-8,-0.0019321940512386387,-4.14215942181376e-5,-4.732552837106896e-8,-0.001931793485630655,-4.1500945427768556e-5,-4.741103326315836e-8,-0.0019313948975945483,-4.149824340283206e-5,-4.741729676503009e-8,-0.0019310330346188518,-4.142188515293687e-5,-4.7351395895912765e-8,-0.0019307375352558293,-4.1297801414388954e-5,-4.723760067108958e-8,-0.0019305246932332914,-4.116693684145903e-5,-4.711522060800814e-8,-0.0019303901558369954,-4.107771840039374e-5,-4.7031429532281454e-8,-0.001930305702440573,-4.1073507327231025e-5,-4.70290097302363e-8,-0.001930223661133537,-4.117772149833033e-5,-4.71316652941459e-8,-0.0019300904151773313,-4.1382707713134946e-5,-4.733292449466249e-8,-0.0019298652063116251,-4.1649473063614e-5,-4.7595646288971316e-8,-0.0019295353407003367,-4.192078311450537e-5,-4.786461098057043e-8,-0.0019291195029987889,-4.214178037375372e-5,-4.8086494979264673e-8,-0.0019286581510240075,-4.227740391874418e-5,-4.822680388860586e-8,-0.0019281977027044515,-4.23190945630982e-5,-4.827648982478889e-8,-0.001927776949794641,-4.228093381957044e-5,-4.8248402386580654e-8,-0.0019274200721663662,-4.219051722902683e-5,-4.8168652620736966e-8,-0.001927135772707496,-4.20798850584923e-5,-4.8067954346620734e-8,-0.0019269198332215003,-4.197912027142969e-5,-4.797542280744417e-8,-0.0019267586318278405,-4.1912777277154615e-5,-4.7915023022203665e-8,-0.0019266323173630316,-4.189820026513446e-5,-4.7903834928403336e-8,-0.0019265173637764677,-4.194471819140883e-5,-4.795122144177823e-8,-0.0019263888011234276,-4.205308385953557e-5,-4.805829680961167e-8,-0.0019262225974915343,-4.221501646557592e-5,-4.821751718558146e-8,-0.0019259985568891125,-4.2413183674726635e-5,-4.8412658231367925e-8,-0.0019257037357562376,-4.262227688328076e-5,-4.861977364178274e-8,-0.0019253358507307667,-4.281183412618318e-5,-4.88097763412886e-8,-0.0019249056464002532,-4.295109158693287e-5,-4.895296804974039e-8,-0.00192443696510101,-4.3015405547280085e-5,-4.9025146674251664e-8,-0.001923963576351099,-4.299286159649854e-5,-4.901401418858055e-8,-0.0019235227456985294,-4.288907110417211e-5,-4.892397352513479e-8,-0.0019231466972611288,-4.2728295806226845e-5,-4.8777489495455956e-8,-0.0019228540148536525,-4.2549887097491935e-5,-4.861195243355361e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json new file mode 100644 index 000000000..771149a59 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":10000,"numberOfSamples":1000,"samples":[1.9197471616856318e-4,7.996600532056201e-6,-1.2597360486632112e-8,1.923979354906972e-4,8.059544161443208e-6,-1.2601754449986743e-8,1.9274745963100852e-4,8.18217092448731e-6,-1.2612185701149497e-8,1.9301410614298842e-4,8.328459694631899e-6,-1.2625220207854334e-8,1.9320200661086356e-4,8.46367290461882e-6,-1.263746635903232e-8,1.933256574311564e-4,8.557979990756902e-6,-1.264596926377846e-8,1.9340729897750835e-4,8.588749871695277e-6,-1.2648467217789009e-8,1.9347454382165973e-4,8.54234886551231e-6,-1.2643575641672086e-8,1.9355780445299317e-4,8.41580428718647e-6,-1.2630935191527253e-8,1.9368703586457032e-4,8.218144650907273e-6,-1.2611321617725655e-8,1.9388759494511673e-4,7.970728457914735e-6,-1.2586673932584885e-8,1.9417557384287807e-4,7.70570255454025e-6,-1.2559972916060515e-8,1.9455353413614596e-4,7.461994170668981e-6,-1.2534909842557773e-8,1.950079268750979e-4,7.278838435440244e-6,-1.2515320800328438e-8,1.9550946566497787e-4,7.1877009230743185e-6,-1.250443183656935e-8,1.9601716991058025e-4,7.204296880679899e-6,-1.2504049076168112e-8,1.964858622143666e-4,7.322751895738212e-6,-1.2513893072518937e-8,1.9687601817327312e-4,7.513719443070609e-6,-1.2531293180978063e-8,1.9716418145619786e-4,7.727807131336245e-6,-1.255143733487227e-8,1.9735148270881055e-4,7.904972006017888e-6,-1.256828984627858e-8,1.9746717430474582e-4,7.989189307001313e-6,-1.2576107854737417e-8,1.9756414464783983e-4,7.945391162788686e-6,-1.2571208909452543e-8,1.9770522673983343e-4,7.772936988045046e-6,-1.255336219063038e-8,1.9794335851555265e-4,7.508737590816236e-6,-1.2526112219574885e-8,1.9830340643788719e-4,7.216310774252375e-6,-1.2495704511570225e-8,1.9877444051722307e-4,6.9643475770128966e-6,-1.2468991956480241e-8,1.9931605492441463e-4,6.804754497374457e-6,-1.2451273955690413e-8,1.99874367496323e-4,6.7599548302468994e-6,-1.2444993679265321e-8,2.0039900027274713e-4,6.82270849799812e-6,-1.2449629419202722e-8,2.0085428305204736e-4,6.964723431631095e-6,-1.2462470630692901e-8,2.012230129828281e-4,7.147810040913146e-6,-1.2479705950981818e-8,2.015048844233702e-4,7.3331078822919305e-6,-1.2497376827881843e-8,2.0171260728942556e-4,7.4869143007848404e-6,-1.2512018298014086e-8,2.0186784837753266e-4,7.583663846056725e-6,-1.2521002574264202e-8,2.0199788115223623e-4,7.6072954724533325e-6,-1.252268798054521e-8,2.0213287762151582e-4,7.552075776678594e-6,-1.25164799413586e-8,2.023032713093168e-4,7.423389313956485e-6,-1.250287524528341e-8,2.025365492604393e-4,7.238354929979809e-6,-1.2483501654253962e-8,2.0285312487000682e-4,7.025543178481034e-6,-1.2461102098633864e-8,2.032615548180566e-4,6.822697696785637e-6,-1.2439358398961576e-8,2.037542292355152e-4,6.671464949679808e-6,-1.2422433892723618e-8,2.043054648544205e-4,6.609017340781519e-6,-1.241418367286807e-8,2.0487402079284614e-4,6.658061470286973e-6,-1.2417141084804209e-8,2.0541091916908847e-4,6.8183286453880834e-6,-1.2431576848491557e-8,2.0587131297464264e-4,7.063148440915905e-6,-1.2455025250029365e-8,2.0622704282800456e-4,7.343452105811302e-6,-1.2482583077772363e-8,2.064756840198449e-4,7.598950788494315e-6,-1.2508013979414962e-8,2.0664282168786132e-4,7.773572333271332e-6,-1.2525372054527937e-8,2.0677643799377142e-4,7.830732911241555e-6,-1.2530654293509096e-8,2.069346139971509e-4,7.763969732585166e-6,-1.252297208136234e-8,2.0716968071363143e-4,7.599507240572051e-6,-1.2504868071919612e-8,2.075133831394106e-4,7.389324388835024e-6,-1.2481637303243253e-8,2.079680047158014e-4,7.196295440443784e-6,-1.2459822238997104e-8,2.0850678511286473e-4,7.076223630712314e-6,-1.2445361216516968e-8,2.09083353603553e-4,7.063208010991012e-6,-1.2442027977015235e-8,2.0964607359171694e-4,7.163288146015455e-6,-1.245068068918884e-8,2.1015153998119444e-4,7.357300167494584e-6,-1.2469466055778998e-8,2.105729208467013e-4,7.6098914082299795e-6,-1.2494715588623496e-8,2.1090206952705673e-4,7.880059152858419e-6,-1.2522068534104855e-8,2.1114705135521922e-4,8.129688725332927e-6,-1.2547426277362978e-8,2.11327623932954e-4,8.328785948689606e-6,-1.2567558359396523e-8,2.1147063027153733e-4,8.45781981905388e-6,-1.2580371063842255e-8,2.116062170779773e-4,8.508318739735103e-6,-1.2584953522756101e-8,2.1176489219544155e-4,8.482821664273282e-6,-1.2581533889456395e-8,2.1197487908306462e-4,8.394780190546323e-6,-1.2571439050506965e-8,2.1225908578335732e-4,8.268336110121104e-6,-1.2557075378613995e-8,2.1263125815806694e-4,8.137282943263268e-6,-1.2541867403695375e-8,2.1309149641396343e-4,8.042041677157666e-6,-1.2530015745409708e-8,2.1362232923984473e-4,8.023413973770414e-6,-1.2525906367685887e-8,2.141877185477536e-4,8.112834049185048e-6,-1.2533095524318957e-8,2.1473774581068903e-4,8.3210914871919e-6,-1.2553050116063849e-8,2.1522011129794914e-4,8.630080126066386e-6,-1.2584142235542132e-8,2.1559591766686086e-4,8.992908412392393e-6,-1.2621531987775295e-8,2.1585357677476676e-4,9.344915051726786e-6,-1.2658284937238318e-8,2.1601416666211921e-4,9.622593263837225e-6,-1.2687427039128446e-8,2.1612534488552648e-4,9.78287653756447e-6,-1.2704087855205246e-8,2.1624652249650514e-4,9.81514982519467e-6,-1.2706860844017089e-8,2.1643148366610137e-4,9.742398905621779e-6,-1.2697982257149455e-8,2.1671439125053968e-4,9.612686075077394e-6,-1.2682472194826136e-8,2.1710262618754617e-4,9.484942883597433e-6,-1.2666663487275253e-8,2.1757724992220657e-4,9.413689438536168e-6,-1.2656583095773519e-8,2.180998881122663e-4,9.436636301726828e-6,-1.2656579120301334e-8,2.1862349866680082e-4,9.567821662343242e-6,-1.2668481926430359e-8,2.1910382506955763e-4,9.797254291937394e-6,-1.2691451235088495e-8,2.1950852180187367e-4,1.0096209406878957e-5,-1.2722473686840802e-8,2.1982203208259762e-4,1.0425814221374339e-5,-1.2757289563240955e-8,2.2004593990235762e-4,1.0746017377170483e-5,-1.279141904043139e-8,2.2019594725035345e-4,1.1022697089033848e-5,-1.2821004358988786e-8,2.2029723714439854e-4,1.1231954282858246e-5,-1.284332207805951e-8,2.2037976133546005e-4,1.1361792925413278e-5,-1.285697045584737e-8,2.204743050715671e-4,1.1412058566647195e-5,-1.2861837839761607e-8,2.2060942735678435e-4,1.139360836886871e-5,-1.2858986747465736e-8,2.2080886496210573e-4,1.1327297175898568e-5,-1.2850546480647196e-8,2.2108883199633075e-4,1.1242779422350658e-5,-1.2839626876663463e-8,2.2145479727229533e-4,1.117656313941561e-5,-1.2830179748791994e-8,2.218978524119614e-4,1.1168241380550244e-5,-1.2826654765479383e-8,2.223918274118358e-4,1.125368271022084e-5,-1.2833271066266854e-8,2.2289360923823234e-4,1.1454892795233024e-5,-1.2852838922138324e-8,2.2334970247736352e-4,1.1768728623398749e-5,-1.288537714386462e-8,2.2371036423718345e-4,1.2159917386077626e-5,-1.2927189221052759e-8,2.2394786325905398e-4,1.2565129918165497e-5,-1.2971236046903973e-8,2.2407012789687003e-4,1.2910776320851335e-5,-1.3009149058543156e-8,2.2412080512659326e-4,1.3138423398335554e-5,-1.3034156281509835e-8,2.2416403518024246e-4,1.3225258584550226e-5,-1.3043432270151873e-8,2.242617193073924e-4,1.31895428771349e-5,-1.303873108036752e-8,2.244545122747121e-4,1.3080514119203897e-5,-1.302529805681681e-8,2.247533541484739e-4,1.2960154137190002e-5,-1.3009918312410972e-8,2.2514149681588606e-4,1.288542370013457e-5,-1.2999015386017868e-8,2.2558304221404233e-4,1.2896057941767493e-5,-1.2997297157850649e-8,2.2603369392279116e-4,1.3009117176953077e-5,-1.3007061790201875e-8,2.264507770082446e-4,1.3219243737167519e-5,-1.3028087674737915e-8,2.2680097981678127e-4,1.3502917845584759e-5,-1.3057987443448877e-8,2.2706512925085745e-4,1.3825112165154655e-5,-1.3092899943215674e-8,2.2723980182644377e-4,1.4146844760246526e-5,-1.312835960370297e-8,2.2733606659061404e-4,1.4432176615984899e-5,-1.316015072754668e-8,2.2737613010144923e-4,1.4653552288310205e-5,-1.3184975709050629e-8,2.2738889061095103e-4,1.4794967275872633e-5,-1.3200846957566375e-8,2.2740539458427508e-4,1.485298630857986e-5,-1.3207200828708261e-8,2.2745491914188558e-4,1.48361020505556e-5,-1.3204810600297655e-8,2.2756189301271438e-4,1.4763163136429955e-5,-1.3195611648549548e-8,2.2774342945347363e-4,1.4661392768367974e-5,-1.318251654013457e-8,2.2800711646406744e-4,1.4564073938727435e-5,-1.3169225227622847e-8,2.2834878588194946e-4,1.4507553748530596e-5,-1.3159958692847593e-8,2.287503519544513e-4,1.4526782542924386e-5,-1.3158983635572145e-8,2.2917872878590236e-4,1.4648464790645952e-5,-1.3169782666393387e-8,2.2958798770619958e-4,1.4881779191418465e-5,-1.3193861131791164e-8,2.2992738155013117e-4,1.5208892056563145e-5,-1.3229487616666131e-8,2.3015629354228862e-4,1.5580637661667213e-5,-1.3271075564489491e-8,2.3026234150305317e-4,1.5924292688085457e-5,-1.331008459441756e-8,2.3027280889853033e-4,1.6165999528322054e-5,-1.3337725131374554e-8,2.3024916735463958e-4,1.6259694822258185e-5,-1.3348408049319169e-8,2.3026415545918469e-4,1.6206222473384533e-5,-1.334196191813377e-8,2.303737207873722e-4,1.6050930760160185e-5,-1.3323325049974134e-8,2.3059936656605264e-4,1.586282236461781e-5,-1.3300188674521488e-8,2.309273397309413e-4,1.5709080036263402e-5,-1.328019137069129e-8,2.3131987266427655e-4,1.5637160807724585e-5,-1.3268952807786755e-8,2.3172978464227394e-4,1.5668110115491378e-5,-1.3269276372437528e-8,2.3211253167230013e-4,1.579838872190477e-5,-1.3281222326984168e-8,2.3243381968418038e-4,1.6005968044664794e-5,-1.3302645758738719e-8,2.326732628860945e-4,1.6257565449448583e-5,-1.3329918467555854e-8,2.3282524674238283e-4,1.651551762610959e-5,-1.3358697686405669e-8,2.3289788056306504e-4,1.674381866600482e-5,-1.3384673664069943e-8,2.3291052997145164e-4,1.6913063406322665e-5,-1.3404220672953126e-8,2.3289032072172143e-4,1.700401500413197e-5,-1.3414875180816028e-8,2.3286803858424185e-4,1.7009620439693355e-5,-1.3415595856352999e-8,2.328739025738482e-4,1.6935397883075238e-5,-1.3406804390503862e-8,2.3293373693946084e-4,1.6798289595216762e-5,-1.3390246403408823e-8,2.3306590757557672e-4,1.6624355851294292e-5,-1.3368746419574027e-8,2.3327907598190837e-4,1.6445739810291813e-5,-1.334591547674048e-8,2.3357067709120252e-4,1.6297106752196225e-5,-1.3325815392409889e-8,2.3392604926032666e-4,1.621152078481189e-5,-1.3312532903507163e-8,2.3431832644508823e-4,1.6215461539974096e-5,-1.3309583151627188e-8,2.3470981296471905e-4,1.6322593851986297e-5,-1.3319074542987742e-8,2.350563586266793e-4,1.6526652827706943e-5,-1.3340700335972787e-8,2.3531635632917516e-4,1.6795606538324656e-5,-1.3370882993466678e-8,2.3546449597391608e-4,1.7071515543042718e-5,-1.3402687449686616e-8,2.3550651143611578e-4,1.7281479296035646e-5,-1.3427194538859864e-8,2.354860662292638e-4,1.736119067195648e-5,-1.3436455207389577e-8,2.354745423562714e-4,1.7282664410910297e-5,-1.3426879119078932e-8,2.3554413988636483e-4,1.7069422488256228e-5,-1.340100684306105e-8,2.3573843359821594e-4,1.678735137254538e-5,-1.3366380140959267e-8,2.3605794175604995e-4,1.6516440745440828e-5,-1.333226482032832e-8,2.364666128436858e-4,1.6321330128306323e-5,-1.3306309980540544e-8,2.369106704107837e-4,1.6235316784717564e-5,-1.329272307712745e-8,2.373372411284009e-4,1.6259841608278305e-5,-1.3292124623119489e-8,2.3770594596677692e-4,1.6372931299750227e-5,-1.3302373390412671e-8,2.37993246071328e-4,1.6539681380754335e-5,-1.3319651568231e-8,2.3819211939730327e-4,1.6721074059761234e-5,-1.3339438365960858e-8,2.3830961030271236e-4,1.6880231173799742e-5,-1.335727306140373e-8,2.3836375681855868e-4,1.6986636247061285e-5,-1.3369334013755532e-8,2.3838035533166568e-4,1.701905501777484e-5,-1.33728675782703e-8,2.383895323005555e-4,1.6967478698558967e-5,-1.3366467989198284e-8,2.38422070556946e-4,1.6834089647268072e-5,-1.3350197399653409e-8,2.3850556570700744e-4,1.6633066038275236e-5,-1.3325545739040455e-8,2.3866072662191243e-4,1.6388979589520194e-5,-1.32952356240298e-8,2.3889832942241776e-4,1.613376763873816e-5,-1.3262897145540119e-8,2.3921726251748584e-4,1.5902571416136462e-5,-1.3232645062727092e-8,2.3960391772207974e-4,1.5728837101970084e-5,-1.3208572512056224e-8,2.4003306897066437e-4,1.5639090729009958e-5,-1.3194159292205045e-8,2.4047031694471747e-4,1.5647770280759835e-5,-1.3191601366742145e-8,2.408763192909911e-4,1.5752441997243236e-5,-1.320109658813078e-8,2.4121332685415593e-4,1.593012198481269e-5,-1.3220221033409507e-8,2.414543324312317e-4,1.6136500786482835e-5,-1.3243695130072412e-8,2.4159379503856346e-4,1.631092961927605e-5,-1.3263965868818756e-8,2.416563493402631e-4,1.6389819439386743e-5,-1.327294423034196e-8,2.416971351728686e-4,1.6327839253466488e-5,-1.3264745691624821e-8,2.4178793488179986e-4,1.611933231700696e-5,-1.323839068662466e-8,2.4199092390150611e-4,1.580664719687679e-5,-1.3198809867441091e-8,2.4233282522947923e-4,1.546635588883893e-5,-1.315515486800695e-8,2.42795161206397e-4,1.5179028049018296e-5,-1.3117189496490207e-8,2.4332560646111933e-4,1.5000197877739287e-5,-1.3091844309906427e-8,2.4386095630435782e-4,1.494730909943296e-5,-1.3081612462610715e-8,2.443476230301867e-4,1.5004081626133282e-5,-1.3084945993000656e-8,2.447521154769013e-4,1.513382584235183e-5,-1.3097713318885834e-8,2.4506227529865664e-4,1.529290726155764e-5,-1.3114741963102495e-8,2.4528352222681816e-4,1.5440210476210758e-5,-1.3130971246521739e-8,2.454337577216843e-4,1.554235342838633e-5,-1.3142157207141877e-8,2.4553879145722154e-4,1.5576059836117717e-5,-1.3145250706278301e-8,2.456286535961741e-4,1.5529165859651303e-5,-1.313858102750454e-8,2.4573440156436537e-4,1.5401067537156352e-5,-1.312192399297445e-8,2.4588495016140917e-4,1.5202739157127264e-5,-1.3096479904399723e-8,2.4610367254958987e-4,1.4956012999883382e-5,-1.3064759078539774e-8,2.4640490122437197e-4,1.4691580503364029e-5,-1.3030343464314749e-8,2.467909300514352e-4,1.444531172938255e-5,-1.299749108332309e-8,2.472503716788958e-4,1.4252978327617077e-5,-1.2970574858005676e-8,2.4775861981413225e-4,1.4143991993889015e-5,-1.2953383025503955e-8,2.482808292580495e-4,1.4135196216785739e-5,-1.2948356913590524e-8,2.4877732410946555e-4,1.4225995061342692e-5,-1.295589775406787e-8,2.492108317402965e-4,1.439598151292376e-5,-1.297390984283666e-8,2.495546496005041e-4,1.4605934664835293e-5,-1.2997753852338253e-8,2.4980058126312243e-4,1.4802976706468473e-5,-1.3020791083393111e-8,2.499648122532091e-4,1.4930522578149964e-5,-1.3035648974352602e-8,2.500889719183307e-4,1.4942625206491755e-5,-1.3036141981384923e-8,2.502332948927713e-4,1.4819937637970325e-5,-1.301942657528763e-8,2.5046053996871437e-4,1.458121681939785e-5,-1.2987549154608683e-8,2.508142835955966e-4,1.4282610184457833e-5,-1.294739872783118e-8,2.513011655620707e-4,1.4000896174505066e-5,-1.2908626141535389e-8,2.5188749805877945e-4,1.3806467779425598e-5,-1.288027326783674e-8,2.5251290861910285e-4,1.3739666020847875e-5,-1.286777210466249e-8,2.531129543478528e-4,1.3801980509944972e-5,-1.2871727408598455e-8,2.5363851477171943e-4,1.3963248403024858e-5,-1.288867324663838e-8,2.5406475771490327e-4,1.4177059797621997e-5,-1.2912910633960826e-8,2.543902585935145e-4,1.4395467555977205e-5,-1.2938351134914312e-8,2.5463093937902145e-4,1.457846819591566e-5,-1.295977796036463e-8,2.54813136638039e-4,1.4698160028561238e-5,-1.2973461632588474e-8,2.54967981581639e-4,1.4739503755468211e-5,-1.2977324579518188e-8,2.551274405562864e-4,1.4699654562096109e-5,-1.2970877284779953e-8,2.5532142348084824e-4,1.4587027197628657e-5,-1.2955077061468487e-8,2.5557518672666003e-4,1.4420380583572636e-5,-1.2932175481281603e-8,2.5590650103593743e-4,1.4227567224019883e-5,-1.2905548350362233e-8,2.5632253366152845e-4,1.4043212860365394e-5,-1.287943866108471e-8,2.568170361656435e-4,1.3904585536052271e-5,-1.285851192094646e-8,2.5736901125437294e-4,1.384542362248093e-5,-1.2847155402873307e-8,2.5794421239109947e-4,1.388843946076878e-5,-1.2848556465930347e-8,2.5850035030317047e-4,1.403829277109537e-5,-1.2863749847957166e-8,2.589956924459188e-4,1.4277505943607658e-5,-1.2890953907157057e-8,2.5939924357184515e-4,1.4567459494134127e-5,-1.2925525776831505e-8,2.596996993209261e-4,1.4855178454192225e-5,-1.2960705554380696e-8,2.5991041763439313e-4,1.5084813281586183e-5,-1.2989066766874659e-8,2.6006856585053105e-4,1.5211326349834672e-5,-1.3004361087109885e-8,2.602278725687631e-4,1.5213126500508729e-5,-1.3003294012197764e-8,2.6044583194747623e-4,1.5100107540589441e-5,-1.2986715711409487e-8,2.607678954750293e-4,1.4913817381501574e-5,-1.2959760458590743e-8,2.6121309337834975e-4,1.471789554231206e-5,-1.2930675613196354e-8,2.617666739936158e-4,1.4580147819581488e-5,-1.2908507750034461e-8,2.623838952785086e-4,1.4551998820653167e-5,-1.2900372867353652e-8,2.6300436611455946e-4,1.465364176688067e-5,-1.2909389577639032e-8,2.6357084573760297e-4,1.4871017273617807e-5,-1.293411963262422e-8,2.640443869669923e-4,1.5164543154651873e-5,-1.2969586613798102e-8,2.64410737769705e-4,1.548385098723045e-5,-1.3009177614068972e-8,2.6467821443590807e-4,1.5781554620764703e-5,-1.304650817055167e-8,2.648707916531887e-4,1.602193715049497e-5,-1.3076659266674922e-8,2.650204220774552e-4,1.6184189121099728e-5,-1.309668323525758e-8,0.00026516090400317593,1.626199634794566e-5,-1.3105583832666333e-8,2.653238016446657e-4,1.626157432670227e-5,-1.3104045518856175e-8,2.6553584872296177e-4,1.619953400725645e-5,-1.3094120073806924e-8,2.6581694404772865e-4,1.6101034287601604e-5,-1.3078966785871532e-8,2.6617803512994057e-4,1.599792643257314e-5,-1.3062635061321467e-8,2.666186743112128e-4,1.5926127147520803e-5,-1.3049789195619948e-8,2.671247177812508e-4,1.5921303481340893e-5,-1.3045222202262528e-8,2.6766743265218185e-4,1.6012313493671894e-5,-1.3053032308258361e-8,2.682058449019524e-4,1.6212993883764293e-5,-1.3075494404843321e-8,2.6869381754198406e-4,1.6514662380160417e-5,-1.3111934310112453e-8,2.690915392547794e-4,1.688312459406304e-5,-1.3158158531168263e-8,2.693782808806831e-4,1.726356887424719e-5,-1.3206971608799833e-8,2.695612194819721e-4,1.7593764377538284e-5,-1.3249899145305468e-8,2.696757969225932e-4,1.7821710710339604e-5,-1.3279603194733367e-8,2.697766262792751e-4,1.7921174890309415e-5,-1.3292069257397106e-8,2.699221571586634e-4,1.7899381168918985e-5,-1.3287759748585721e-8,2.701585140051222e-4,1.7794662659770487e-5,-1.3271427248333769e-8,2.7050743193193414e-4,1.7665574219650932e-5,-1.3250774476406711e-8,2.70961263500747e-4,1.7575149467220522e-5,-1.3234415117476824e-8,2.714859046544607e-4,1.7574737909080554e-5,-1.3229680863399421e-8,2.7203052331977687e-4,1.769170100835547e-5,-1.324083414757745e-8,2.7254117585821244e-4,1.7924189075479015e-5,-1.3268167506586092e-8,2.729741997691505e-4,1.8244128847031433e-5,-1.3308232751599827e-8,2.733054105239225e-4,1.860683481743521e-5,-1.335506308671976e-8,2.7353289682521516e-4,1.896345349760831e-5,-1.3401893664246537E-08,2.73673842637392e-4,1.9271996265799993e-5,-1.3442759869942829e-8,2.737578282615282e-4,1.9504213337008058e-5,-1.3473535503050086e-8,2.738194967147241e-4,1.9647848480923535e-5,-1.3492301040760689e-8,2.7389256852830313e-4,1.9705491001702175e-5,-1.3499197079042159e-8,2.740058704701865e-4,1.9691777654711647e-5,-1.3496023246278775e-8,2.741810262902575e-4,1.9630334079578346e-5,-1.3485807494797274e-8,2.744310131178127e-4,1.9551058078948304e-5,-1.347245824705066e-8,2.747588655876082e-4,1.948759434125028e-5,-1.3460484076347776e-8,2.7515620852405575e-4,1.9474357175009086e-5,-1.3454669802832967e-8,2.7560192124283077e-4,1.954221941430565e-5,-1.3459536895858992e-8,2.760620815654129e-4,1.9712188518429024e-5,-1.3478446229307413e-8,2.764931140341487e-4,1.998747860898367e-5,-1.3512381587099931e-8,2.768499825458415e-4,2.0346447047745347e-5,-1.3558791588758346e-8,2.7709934818909317e-4,2.0740975236487897e-5,-1.3611211001438215e-8,2.7723376707050325e-4,2.1104902391710272e-5,-1.3660381144345922e-8,2.7727951721184677e-4,2.1372977512600064e-5,-1.3696942301516698e-8,2.7729156569639065e-4,2.150364337470411e-5,-1.371469511192883e-8,2.7733590146886866e-4,2.1494482605572527e-5,-1.3712813986364758e-8,2.7746730910535865e-4,2.1382407878183956e-5,-1.3695935779833347e-8,2.777129170467314e-4,2.1229571564400812e-5,-1.3672319050985458e-8,2.7806720281447627e-4,2.1102980963536406e-5,-1.3651166775522754e-8,2.7849753778370835e-4,2.105639774177976e-5,-1.3640203101975407e-8,2.7895571606205595e-4,2.1119312740397868e-5,-1.36440855384151e-8,2.7939082054513723e-4,2.129380639205303e-5,-1.3663777942921247e-8,2.797602560487331e-4,2.155785003144518e-5,-1.3696778046641539e-8,2.8003725820557e-4,2.1872858482824725e-5,-1.3738005196123418e-8,2.802142004107094e-4,2.219328394309847e-5,-1.3781099702460829e-8,2.8030175709160225e-4,2.2476143948988695e-5,-1.381982555271776e-8,2.8032472939190016e-4,2.268859947612066e-5,-1.3849251125167231e-8,2.803159812312574e-4,2.2812371570131774e-5,-1.386647093141835e-8,2.803101183459111e-4,2.2844791364820303e-5,-1.387080182051307e-8,2.8033821087907477e-4,2.2797146171930603e-5,-1.3863552789390385e-8,2.8042420340903043e-4,2.2691458727297488e-5,-1.3847561307081722e-8,2.8058292600206835e-4,2.2556824850266946e-5,-1.3826691726476474e-8,2.8081916298474405e-4,2.2425953925453616e-5,-1.3805403994071266e-8,2.8112721903985157e-4,2.2331951025042324e-5,-1.3788383591687185e-8,2.8149066344888076e-4,2.2304951530066296e-5,-1.3780134438421739e-8,2.8188238547674434e-4,2.2367947560152177e-5,-1.3784386060479597e-8,2.822658721965546e-4,2.2531246589409013e-5,-1.380320444288144e-8,2.8259936195518845e-4,2.278597036190299e-5,-1.38358812243578e-8,2.828444569445365e-4,2.3098866508920356e-5,-1.3877999412904191e-8,2.82979105364523e-4,2.341279564136978e-5,-1.3921401485040897e-8,2.8301103748081484e-4,2.3657751771110462e-5,-1.3955814384309308e-8,2.8298340770177647e-4,2.37731328817469e-5,-1.3972176264270338e-8,2.8296484207766603e-4,2.3733029889624773e-5,-1.3966353021702428e-8,2.830249037760498e-4,2.3559828091315065e-5,-1.3941085550751729e-8,2.832073180871705e-4,2.331632681640619e-5,-1.3904875495648811e-8,2.8351576155621184e-4,2.308077284889224e-5,-1.3868553787955135e-8,2.8391769853862014e-4,2.2919547763551398e-5,-1.384157822144315e-8,2.8436019434869387e-4,2.287017449835268e-5,-1.3829694080640847e-8,2.847876469600927e-4,2.2937814065198065e-5,-1.3834319348602738e-8,2.8515485284144533e-4,2.3101223801610495e-5,-1.3853146215244e-8,2.85433793371567e-4,2.332264590269975e-5,-1.3881308460203237e-8,2.856153143340677e-4,2.3557815709961442e-5,-1.3912679492992264e-8,2.857074693224336e-4,2.3764383273789843e-5,-1.3941085356826256e-8,2.8573186713930584e-4,2.390828726211465e-5,-1.3961325891680267e-8,2.857188696819171e-4,2.39679560926046e-5,-1.3969911360196299e-8,2.8570231452007376e-4,2.3936257400670855e-5,-1.3965439487283113e-8,2.857144182944666e-4,2.382028199606721e-5,-1.394860030825303e-8,2.8578147687363805e-4,2.3639260037550102e-5,-1.3921869960500952e-8,2.8592084201393037e-4,2.342114432945347e-5,-1.3889012634409748e-8,2.8613931356911184e-4,2.3198585473751224e-5,-1.3854531958188717e-8,2.864327166543551e-4,2.3004883616430312e-5,-1.3823159470958645e-8,2.867863494363946e-4,2.2870125806672398e-5,-1.3799380523453057e-8,2.8717609388622425e-4,2.2817452101605205e-5,-1.378693317459741e-8,2.8757018441867614e-4,2.2859200077940465e-5,-1.378819562942302e-8,2.8793216925267906e-4,2.2992674449651844e-5,-1.3803413833910311e-8,2.8822619040308e-4,2.3196048522297792e-5,-1.3829891060439484e-8,2.8842548394305867e-4,2.3426397377221117e-5,-1.386152544402009e-8,2.885234854253173e-4,2.362330839766609e-5,-1.3889296541301406e-8,2.885438986592403e-4,2.3721722641275258e-5,-1.3903263102308176e-8,2.885424114376653e-4,2.3674183477913317e-5,-1.3896003696172715e-8,2.885929118709168e-4,2.3474313471584593e-5,-1.3866152311867126e-8,2.8875979009874574e-4,2.316637368653028e-5,-1.3819777847051538e-8,2.890704395776163e-4,2.283074746827438e-5,-1.3768264842029872e-8,2.895049885128943e-4,2.2551813469805068e-5,-1.3723757443181604e-8,2.900082669629545e-4,2.2387357101861408e-5,-1.3694865214262721e-8,2.9051374253208817e-4,2.235489612947439e-5,-1.36846867449533e-8,2.909649021340734e-4,2.2436103025525936e-5,-1.3691271872221072e-8,2.9132650488845045e-4,2.2590621258034392e-5,-1.3709370985045623e-8,2.9158637691061105e-4,2.2770429252790272e-5,-1.3732329579321405e-8,2.917517969683068e-4,2.2930448877807925e-5,-1.3753577653967498e-8,2.9184401188628566e-4,2.303489006955536e-5,-1.3767628184703838e-8,2.918927671925494e-4,2.3060445344766418e-5,-1.3770682898745772e-8,2.919314014291164e-4,2.299749274559909e-5,-1.3760937852867262e-8,2.9199247847638013e-4,2.2849926468667013e-5,-1.3738629102849638e-8,2.921039092862608e-4,2.2633834466347406e-5,-1.370584503210565e-8,2.92285666948327e-4,2.2375057960451114e-5,-1.3666144851793793e-8,2.925473850976914e-4,2.2105676829510934e-5,-1.3624037426111123e-8,2.9288716836903646e-4,2.185972836237773e-5,-1.3584395520403735e-8,2.93291734444017e-4,2.1668667070356885e-5,-1.355186975838904e-8,2.937378250344291e-4,2.1556973898122735e-5,-1.3530315087571015e-8,2.941947974500097e-4,2.1538210800188506e-5,-1.3522214675142932e-8,2.9462828965697827e-4,2.161178421989162e-5,-1.3528102494893166e-8,2.950049836659742e-4,2.176062612107966e-5,-1.3546028771640402e-8,2.9529877895283186e-4,2.1950341406551685e-5,-1.3571220417731373e-8,2.95498425036084e-4,2.2131299035723218e-5,-1.3596256341667975e-8,2.956153580837951e-4,2.22458472466366e-5,-1.361215968484941e-8,2.9568840667843486e-4,2.224225736534045e-5,-1.3610641296881544e-8,2.957800686939963e-4,2.2093977823393965e-5,-1.3587181550703598e-8,2.9595999348482825e-4,2.181678085271199e-5,-1.3543713834794471e-8,2.9627849161117025e-4,2.1471574018712877e-5,-1.3489060449153417e-8,2.9674319322068856e-4,2.1145294614123724e-5,-1.343609251827474e-8,2.9731425733706953e-4,2.09172161107864e-5,-1.3396774613550436e-8,2.9792187015270356e-4,2.082994835974585e-5,-1.3377886272534408e-8,2.984942122206886e-4,2.0880413673918396e-5,-1.3379586077781747e-8,2.989796522647844e-4,2.1030612573302552e-5,-1.3396809617098212e-8,2.993552928593664e-4,2.1226817991504233e-5,-1.3421929704689853e-8,2.9962420917402626e-4,2.141632957853267e-5,-1.3447160232838052e-8,2.998076048709863e-4,2.155742331817498e-5,-1.3466074608348756e-8,2.999366508951447e-4,2.162322261659597e-5,-1.3474303011588651e-8,3.0004605342871587e-4,2.160194083120627e-5,-1.3469704117491014e-8,3.001694758979349e-4,2.1495566477339442e-5,-1.3452259987949643e-8,3.003361714790454e-4,2.131801033581268e-5,-1.34238210598226e-8,3.00568250260884e-4,2.109291783629834e-5,-1.3387751649168571e-8,3.0087835205456256e-4,2.0850953582104578e-5,-1.3348491679679161e-8,3.012678716217725e-4,2.062624812724149e-5,-1.3311032550608233e-8,3.0172620046434173e-4,2.045193589878053e-5,-1.3280308792564854e-8,3.0223147737772435e-4,2.0355180263715515e-5,-1.3260534503027968e-8,3.027530905670879e-4,2.03523675046193e-5,-1.3254528922034592e-8,3.0325589739471393e-4,2.0445234386801097e-5,-1.326309141038214e-8,3.0370584098537583e-4,2.061873537337817e-5,-1.3284535301274032e-8,3.0407635475241393e-4,2.084132023298335e-5,-1.3314523112149486e-8,3.043548220950259e-4,2.106807932262644e-5,-1.334635951759101e-8,3.0454817712909907e-4,2.1247259597402573e-5,-1.337190847136496e-8,3.0468606841306306e-4,2.1330590886984806e-5,-1.338324729373875e-8,3.048190993710789e-4,2.1286814653441683e-5,-1.337492842426596e-8,3.0500947292813136e-4,2.1115405047104646e-5,-1.3346293728374482e-8,3.0531334240780847e-4,2.0854333144826318e-5,-1.330280661991811e-8,3.0575933228971686e-4,2.057446009779354e-5,-1.3255246543245369e-8,3.063336126043048e-4,2.035786012500672e-5,-1.3216390908366007e-8,3.0698195437051866e-4,2.0267933422058764e-5,-1.3196404367399528e-8,3.076297906607286e-4,2.0326989761099988e-5,-1.3199302777510673e-8,3.0820929098613465e-4,2.051301152374637e-5,-1.3222284594361782e-8,3.086790667643346e-4,2.0774250916837253e-5,-1.3257795354211066e-8,3.0902959140693113e-4,2.1050411845724763e-5,-1.3296685507824527e-8,3.0927719251130383e-4,2.1289582840270976e-5,-1.3330825505471842e-8,3.0945357058928e-4,2.145674944124067e-5,-1.33545105445674e-8,3.095961699201846e-4,2.153531284308726e-5,-1.3364818313685573e-8,3.0974146708267824e-4,2.152488868920895e-5,-1.3361368767381744e-8,3.0992097203242546e-4,2.1438017800151246e-5,-1.3345858365688848e-8,3.1015887202686857e-4,2.1297039816659653e-5,-1.3321563576426557e-8,3.1047036154725256e-4,2.1131275414374563e-5,-1.3292871575557973e-8,3.1086020309551777e-4,2.0974113615666323e-5,-1.3264820449894448e-8,0.00031132159469673937,2.0859458460963544e-5,-1.3242589706398116e-8,3.118358892299663e-4,2.08172018406579e-5,-1.3230876462418405e-8,3.123739556176808e-4,2.0867961619606607e-5,-1.3233145002595053e-8,3.1289980273878425e-4,2.1017999708571363e-5,-1.3250835029635484e-8,3.133765322075633e-4,2.1255710514705023e-5,-1.3282711917019378e-8,3.1377389441996034e-4,2.1551170659549085e-5,-1.332461455740315e-8,3.1407592571305155e-4,2.1859774047728385e-5,-1.3369828669154369e-8,3.1428671803730246e-4,2.212997996013805e-5,-1.3410177045357869e-8,3.14432506824964e-4,2.2314131680739853e-5,-1.3437721540724634e-8,3.1455876362506394e-4,2.2380463429616143e-5,-1.3446783871977407e-8,3.1472170043465105e-4,2.2323641852085563e-5,-1.3435813847370838e-8,3.1497476110345693e-4,2.217044112756572e-5,-1.3408494160108003e-8,3.153526234579617e-4,2.1976994096751363e-5,-1.337345682081832e-8,3.1585774444304715e-4,2.1815602165497123e-5,-1.3342262745022897e-8,3.1645594131746787e-4,2.1753230588716412e-5,-1.332596859353312e-8,3.170852855440563e-4,2.1829339986754936e-5,-1.3331486306519194e-8,3.1767609064744373e-4,2.204329336795916e-5,-1.335938578246327e-8,3.1817307131503856e-4,2.2357437282565592e-5,-1.3404182809004631e-8,3.185496252597622e-4,2.2713150253212193e-5,-1.3456770258106373e-8,3.188097318692035e-4,2.305068096859074e-5,-1.350756753269062e-8,3.1898017607109944e-4,2.3324049974074164e-5,-1.3548973772346303e-8,3.1909924742474843e-4,2.3507561072834535e-5,-1.3576520061523686e-8,3.192068961684871e-4,2.359541331330978e-5,-1.3588911123510958e-8,3.1933831976116504e-4,2.3597783076813762e-5,-1.358746123971623e-8,3.1952065880791903e-4,2.3536160980096142e-5,-1.3575362908229614e-8,3.19771579080949e-4,2.3439311888661372e-5,-1.3557025218592592e-8,3.200985885643759e-4,2.3340011786561243e-5,-1.3537543756519094e-8,3.2049846336595103e-4,2.3272031254568778e-5,-1.3522245412330314e-8,3.2095680118528186e-4,2.3266656684082567e-5,-1.3516194501257755e-8,3.214482960990994e-4,2.3348264536126095e-5,-1.3523546070473995e-8,3.219387035953197e-4,2.352905494166589e-5,-1.3546710031825095e-8,3.2238945173181284e-4,2.3803973484541637e-5,-1.3585453917150966e-8,3.2276517284783867e-4,2.414782235178386e-5,-1.3636274656717374e-8,3.2304300787259485e-4,2.4516917684648338e-5,-1.369247871891746e-8,3.2322093588827404e-4,2.4856694790520883e-5,-1.374527463790208e-8,3.2332167991338466e-4,2.5114409674883268e-5,-1.3785796286515207e-8,3.233897052011945e-4,2.525357146846435e-5,-1.3807516666649438e-8,3.2348120921461983e-4,2.5265406266578555e-5,-1.3808261001094046e-8,3.2364963922767976e-4,2.5173284625345988e-5,-1.3791120413398418e-8,3.2393091613960477e-4,2.5028248522414485e-5,-1.3763924450587002e-8,3.243327110819311e-4,2.489645279708152e-5,-1.3737355303383892e-8,3.2483114194985555e-4,2.4841661933600615e-5,-1.3722151158493351e-8,3.253764637315329e-4,2.4907661106982096e-5,-1.3726145974744325e-8,3.2590667505080653e-4,2.5106163518978407e-5,-1.3752074004335538e-8,3.263648743232834e-4,2.5414592771149465e-5,-1.3796943801410434e-8,3.267142644419916e-4,2.5784562274762126e-5,-1.3853232512079237e-8,3.2694560655390203e-4,2.6157379978950974e-5,-1.3911368702242648e-8,3.2707552207375036e-4,2.64802029079398e-5,-1.3962446344578679e-8,3.2713809920406574e-4,2.6717260951139974e-5,-1.4000191368277358e-8,3.2717430412455535e-4,2.685395991046812e-5,-1.4021757723105099e-8,3.272230250199076e-4,2.6895095773412356e-5,-1.4027518182301305e-8,3.273154328546555e-4,2.6859988741622723e-5,-1.4020303863838187e-8,3.27472427946398e-4,2.6777052624059808e-5,-1.4004517409235265e-8,3.2770404819257206e-4,2.667917357422416e-5,-1.3985374637999391e-8,3.2800968800751206e-4,2.6600135622202087e-5,-1.396833964272351e-8,3.283784197698704e-4,2.65715822213231e-5,-1.3958675851617953e-8,3.2878934377281676e-4,2.661975357857392e-5,-1.3960963251046796e-8,3.2921252136175277e-4,2.6761429111553565e-5,-1.397844020247438e-8,3.2961152402647006e-4,2.699907821559547e-5,-1.4012129808211943e-8,3.29948753915105e-4,2.7316263206531952e-5,-1.4059921868231094e-8,3.3019401009220286e-4,2.7675690266479282e-5,-1.4116060189696021e-8,3.303348983515174e-4,2.8023052525526852e-5,-1.417164175112956e-8,3.303851664433875e-4,2.8298564869411255e-5,-1.4216501609523993e-8,3.303858174704456e-4,2.845434313568276e-5,-1.4242167403395092e-8,3.303959416014983e-4,2.847131185450436e-5,-1.424477933710207e-8,3.304753311960585e-4,2.8367701265917583e-5,-1.4226626167552076e-8,3.3066574499633107e-4,2.8194592527739406e-5,-1.4195561924860455e-8,3.3097847333721307e-4,2.8020371048836455e-5,-1.4162617817120332e-8,3.3139229136450047e-4,2.7910733393913838e-5,-1.4138840614943994e-8,3.318610576038761e-4,2.7911418740544573e-5,-1.4132437583694847e-8,3.32327158660616e-4,2.8038257552148033e-5,-1.4146944421067845e-8,3.3273630146328536e-4,2.8275956095937735e-5,-1.4180721826563061e-8,3.3304982043797914e-4,2.8584590280257757e-5,-1.4227750741366778e-8,3.332518772704476e-4,2.8911198090895583e-5,-1.4279413650778645e-8,3.3335044303321585e-4,2.9203016014443303e-5,-1.4326720121414798e-8,3.3337264600420897e-4,2.9418844303718548e-5,-1.4362340255230543e-8,3.333565716870711e-4,2.953593528593423e-5,-1.438192328577023e-8,3.333423100299153e-4,2.955156240787833e-5,-1.4384490907506754e-8,3.333646227280616e-4,2.9480245799448394e-5,-1.4372041376989542e-8,3.3344841055820307e-4,2.9348582447400512e-5,-1.434870041016347e-8,3.3360692534264394e-4,2.9189588504290738e-5,-1.4319770705147037e-8,3.338418939605668e-4,2.903780052882538e-5,-1.429092220642219e-8,3.341445478842576e-4,2.8925502238673784e-5,-1.4267598983776846e-8,3.3449686902692956e-4,2.8879716510260736e-5,-1.4254567192028621e-8,3.34872893630502e-4,2.8919305085978387e-5,-1.4255452413328958e-8,3.3524046998712566e-4,2.905162633610626e-5,-1.4272125495191893e-8,3.3556438983591447e-4,2.926868042533546e-5,-1.4303906971243346e-8,3.358120415655983e-4,2.9543700862908523e-5,-1.4346787820191492e-8,3.359620973953016e-4,2.9830621885824582e-5,-1.4393165436296007e-8,3.3601476557872876e-4,3.0069847654572008e-5,-1.4432765793470925e-8,3.3599911919222826e-4,3.020259394749606e-5,-1.4455159337401374e-8,3.3597110300592314e-4,3.019141034190686e-5,-1.4453385307179457e-8,3.35998526488256e-4,3.00380349093956e-5,-1.4427081304578546e-8,3.3613729850181856e-4,2.9787423935761663e-5,-1.4383225010504009e-8,3.3641053011372276e-4,2.9513350056419022e-5,-1.4333808242876725e-8,3.368014006431015e-4,2.9292449987817804e-5,-1.4291641185111276e-8,3.3726185452744576e-4,2.9179980574871958e-5,-1.4266408426820145e-8,3.377303740186198e-4,2.9197037823386694e-5,-1.4262469364142498e-8,3.3814986945613203e-4,2.9330730888683372e-5,-1.427863436126763e-8,3.3848010158714516e-4,2.9543115154846164e-5,-1.4309336642064932e-8,3.38703273259897e-4,2.9783603206552747e-5,-1.4346471770152776e-8,3.388238715787891e-4,3.0001002317025725e-5,-1.4381352417660723e-8,3.388645512106792e-4,3.015313826145052e-5,-1.4406430035573901e-8,3.388596992978482e-4,3.0213214891368453e-5,-1.441656210821404e-8,3.388480896868653e-4,3.0172579589435465e-5,-1.4409671063513486e-8,3.3886595201610624e-4,3.0040010984943417e-5,-1.4386745775937594e-8,3.389415616773652e-4,2.983826465857231e-5,-1.435129353309962e-8,3.3909197448769624e-4,2.9599024245251944e-5,-1.4308467177209232e-8,3.393219732788287e-4,2.935743690567301e-5,-1.4264115645959442e-8,3.396247872186201e-4,2.9147198599977515e-5,-1.4223960274082391e-8,3.3998384944594585e-4,2.8996680396776103e-5,-1.419298232822601e-8,3.4037497978542483e-4,2.8925994092867653e-5,-1.4174970094013113e-8,3.4076876816749476e-4,2.8944576739562157e-5,-1.4172101451461987e-8,3.4113333363185183e-4,2.9048903134653624e-5,-1.4184452613283302e-8,3.4143806830900614e-4,2.9220259014859665e-5,-1.4209426481068721e-8,3.416592313159679e-4,2.942335957385573e-5,-1.4241300071719586e-8,3.4178768959361645e-4,2.9607879560626548e-5,-1.4271351102299056e-8,3.418373350901813e-4,2.971582378240197e-5,-1.4289150939638257e-8,3.4184996084014505e-4,2.9696727082961728e-5,-1.4285356690807156e-8,3.418902633601011e-4,2.952827110856552e-5,-1.425546855762454e-8,3.420270707706498e-4,2.9232745927517535e-5,-1.4202771104298555e-8,3.4230607491550166e-4,2.8876464783064984e-5,-1.4138250014917669e-8,3.4272891522547444e-4,2.8547270391760742e-5,-1.4076783978948293e-8,3.432521860159393e-4,2.8320914566404532e-5,-1.4031512125887654e-8,3.4380643577638096e-4,2.8235399587572567e-5,-1.4009518407800017e-8,3.4432227839255926e-4,2.8284922903914585e-5,-1.4010681330376893e-8,3.4474989405392577e-4,2.8430706232186193e-5,-1.4029244458375631e-8,3.450667007921132e-4,2.8618389049455682e-5,-1.405649452639386e-8,3.4527564357985356e-4,2.879355388007985e-5,-1.4083250375345564e-8,3.453987654829163e-4,2.8912049121438285e-5,-1.4101646097180218e-8,3.45469585268103e-4,2.894525815503267e-5,-1.4106194425210915e-8,3.4552604642457406e-4,2.8881730901118583e-5,-1.4094281874326899e-8,3.4560455047242703e-4,2.8726431535401165e-5,-1.4066215283106948e-8,3.457351529958053e-4,2.84982490045257e-5,-1.4024875511406945e-8,3.459380666037131e-4,2.8226171437823553e-5,-1.397505116091795e-8,3.462216637718113e-4,2.794459723979762e-5,-1.3922581182171141e-8,3.4658209986642525e-4,2.7688322235778394e-5,-1.3873458405560078e-8,3.4700449561030034e-4,2.748781270498401e-5,-1.3833031101689292e-8,3.474653304988083e-4,2.7365322208472776e-5,-1.3805386540778746e-8,3.479355692431911e-4,2.7332084280176915e-5,-1.3792904236856692e-8,3.483841987506852e-4,2.738651159118678e-5,-1.3795909548384521e-8,3.48782076015223e-4,2.7513276120753096e-5,-1.3812375954175199e-8,3.4910623716508923e-4,2.768327317176719e-5,-1.3837706596348546e-8,3.493450066374296e-4,2.785497909947437e-5,-1.3864767635512509e-8,3.4950380428156456e-4,2.7978582520697178e-5,-1.388452258098352e-8,3.496101796449104e-4,2.800470747307293e-5,-1.3887648902006153e-8,3.4971470295323565e-4,2.7898579782032046e-5,-1.3867255990212172e-8,3.498829672228969e-4,2.7657103890016168e-5,-1.3822133605209417e-8,3.5017591926531956e-4,2.7320571946380355e-5,-1.375894735333673e-8,3.5062370726759935e-4,2.6967510508779796e-5,-1.3691352108885298e-8,3.512076836751679e-4,2.668829415482261e-5,-1.3635359280006073e-8,3.518645594543916e-4,2.6549168451208284e-5,-1.3603044848274974e-8,3.525120860381075e-4,2.6567976763254272e-5,-1.359825241655584e-8,3.530801471377777e-4,2.671440633051558e-5,-1.3616465703002289e-8,3.5353016455276417e-4,2.692942938290615e-5,-1.3647971513994665e-8,3.538577002956241e-4,2.7148881753446637e-5,-1.3681795510084634e-8,3.540840771794443e-4,2.7320151877578618e-5,-1.3708567939664234e-8,3.542449634789241e-4,2.740961864282937e-5,-1.372191839944505e-8,3.543805993034693e-4,2.7403434203548572e-5,-1.3718799059739425e-8,3.545289983413223e-4,2.730498627401825e-5,-1.3699233288566783e-8,3.547216624954893e-4,2.7131303055044464e-5,-1.366581028187246e-8,3.5498087228620824e-4,2.690928730173587e-5,-1.3623050830270064e-8,3.5531797095255416e-4,2.6671814970846222e-5,-1.3576675347345746e-8,3.557325408326314e-4,2.6453572621222732e-5,-1.3532810617513158e-8,3.562126332903402e-4,2.628664184351773e-5,-1.3497191162436568e-8,3.5673629776197384e-4,2.619610347960688e-5,-1.3474416118620455e-8,3.5727449108908464e-4,2.6196233744873596e-5,-1.3467331827186608e-8,3.577951171362706e-4,2.628789151186731e-5,-1.3476583429700484e-8,3.582677504977914e-4,2.6457485603445368e-5,-1.3500355686777276e-8,3.5866856083210973e-4,2.667773719840518e-5,-1.3534335889835297e-8,3.58984983565573e-4,2.691031135287597e-5,-1.3571967951946276e-8,3.592197788921785e-4,2.7110381522096033e-5,-1.3605104433755066e-8,3.5939395836391525e-4,2.723347733466807e-5,-1.3625211838772243e-8,3.5954731475294516e-4,2.7245005640118063e-5,-1.3625233122092842e-8,3.5973439287282456e-4,2.7131819567977223e-5,-1.3601941703224978e-8,3.600135954575884e-4,2.6912915110491107e-5,-1.355814290805302e-8,3.60429073295564e-4,2.664325075241653e-5,-1.3503526756102676e-8,3.60990418920039e-4,2.64034696792908e-5,-1.3452835801158697e-8,3.6166146352094975e-4,2.6273775898966717e-5,-1.3421074493356377e-8,3.623688032765512e-4,2.630225709809558e-5,-1.3417659611230746e-8,3.6302889191182174e-4,2.6485921915614753e-5,-1.3442821004948017e-8,3.635787000997205e-4,2.6775836053406942e-5,-1.3488337737398986e-8,3.6399313254539714e-4,2.7100845265447172e-5,-1.3541675775041822e-8,3.6428387361378935e-4,2.739386253867796e-5,-1.3590675845310196e-8,3.644865074909421e-4,2.7608376878739416e-5,-1.3626575377250361e-8,3.6464576613601913e-4,2.7723005292816395e-5,-1.364495582745406e-8,3.6480461555127395e-4,2.77383404850266e-5,-1.3645341642181487e-8,3.6499818740537e-4,2.76710053685678e-5,-1.3630271402829668e-8,3.6525122259954397e-4,2.754788664050142e-5,-1.360432815008887e-8,3.6557730310316335e-4,2.7401492817728636e-5,-1.357329062063108e-8,3.659787553882458e-4,2.72661665993695e-5,-1.3543394730429565e-8,3.6644689750384423e-4,2.7174555417879994e-5,-1.352065178127914e-8,3.669628241382334e-4,2.7153908983776746e-5,-1.3510179030065285e-8,3.674992016602788e-4,2.7222166045638933e-5,-1.3515526234079713e-8,3.68023539090487e-4,2.73843521332642e-5,-1.3538046023492725e-8,3.685030041719975e-4,2.7630228716345682e-5,-1.357642629855776e-8,3.689102801263324e-4,2.793415315314418e-5,-1.362653567100988e-8,3.692294796808659e-4,2.825781083626839e-5,-1.368173224189925e-8,3.694608523244996e-4,2.8555916027981706e-5,-1.3733727733496358e-8,3.6962307871807993e-4,2.8784249160797294e-5,-1.3773978177336275e-8,3.697522993353289e-4,2.8908903102290343e-5,-1.3795451641862713e-8,3.6989731803456434e-4,2.8915385836666257e-5,-1.3794521381371401e-8,3.701106527110447e-4,2.8815745762559872e-5,-1.3772576532502819e-8,3.704358354453675e-4,2.8651045702873957e-5,-1.3736749819577554e-8,3.7089307273516974e-4,2.8486040803253674e-5,-1.369908367506479e-8,3.714679608227572e-4,2.8394043726751596e-5,-1.3673710854101186e-8,3.7210991213757036e-4,2.843405066778115e-5,-1.3672440108961631e-8,3.7274498490128303e-4,2.8628554579815174e-5,-1.3700371291720451e-8,3.733002400374539e-4,2.8953884905579092e-5,-1.375383654447321e-8,3.737283127161456e-4,2.934966667201483e-5,-1.3821992572909582e-8,3.74019840199307e-4,2.9742318752869464e-5,-1.3891158565206442e-8,3.741996113300426e-4,3.0069483883304552e-5,-1.3949424588473654e-8,3.743121974552402e-4,3.0294519375517385e-5,-1.3989456769194334e-8,3.7440629029591007e-4,3.0408720943630665e-5,-1.4009040575435913e-8,3.745237271452724e-4,3.042555417326966e-5,-1.4010137999684472e-8,3.7469432233555345e-4,3.0372415163084517e-5,-1.399745265579277e-8,3.7493481407911624e-4,3.0283392801809747e-5,-1.3977121315336288e-8,3.7524974009757705e-4,3.0194074963467853e-5,-1.3955729687359219e-8,3.7563276072333213e-4,3.013796030115297e-5,-1.3939607838651707e-8,3.7606789752317216e-4,3.014358067755694e-5,-1.3934276197156442e-8,3.765308715945007e-4,3.0231593508346177e-5,-1.394391327502817e-8,3.769911447976581e-4,3.0411553226949515e-5,-1.3970762499094855e-8,3.774153866080384e-4,3.067874957136116e-5,-1.4014505540693484e-8,3.7777276900158004e-4,3.101223988098575e-5,-1.4071785355970582e-8,3.780416881621932e-4,3.137561973052833e-5,-1.4136185048005719e-8,3.782164562994042e-4,3.1721813892388676e-5,-1.4198962795870701e-8,3.7831168136817563e-4,3.2002044707192615e-5,-1.4250643304019193e-8,3.7836207867593326e-4,3.2177378338159576e-5,-1.4283213281041604e-8,3.784166470845473e-4,3.222972568760059e-5,-1.4292338201740607e-8,3.7852801727424653e-4,3.216882097511682e-5,-1.4278915068388991e-8,3.7873941235653586e-4,3.2032643792585974e-5,-1.4249424676350356e-8,3.7907250187723524e-4,3.1880386191779476e-5,-1.4214835935159804e-8,3.79519524138801e-4,3.1778859253417956e-5,-1.4188143257430748e-8,3.800425591675725e-4,3.1785057707013906e-5,-1.4180988668013144e-8,3.8058155833472476e-4,3.192941802742809e-5,-1.420023019579586e-8,3.810702007095623e-4,3.220552703223705e-5,-1.424564138430845e-8,3.814550608339061e-4,3.257118968284767e-5,-1.4309824655516338e-8,3.8171088610531375e-4,3.2961679962287354e-5,-1.4380610992098202e-8,3.818457030615165e-4,3.3310117296884816e-5,-1.444499449135639e-8,3.8189440825249304e-4,3.356630414228731e-5,-1.4492871054400158e-8,3.8190518456659355e-4,3.3706990005561714e-5,-1.4519156100786139e-8,3.8192545511999565e-4,3.3735939536645784e-5,-1.4523932873023375e-8,0.00038199221663132935,3.36770574780388e-5,-1.4511243699103591e-8,3.8212794959808886e-4,3.356532850735636e-5,-1.44874232515469e-8,3.8234068283503006e-4,3.3438964212912564e-5,-1.445961632653455e-8,3.826260695837975e-4,3.333397058547786e-5,-1.4434725361888601e-8,3.8296985541619517e-4,3.328078604508245e-5,-1.4418750654133305e-8,3.8335002714571484e-4,3.3302014460873146e-5,-1.441635218389012e-8,3.837387391287661e-4,3.341034772114456e-5,-1.4430449062814374e-8,3.841046361875188e-4,3.3606223967194986e-5,-1.4461732780659432e-8,3.844163948873668e-4,3.3875453388444264e-5,-1.4508108409027856e-8,3.846481026697538e-4,3.4187920503036706e-5,-1.4564283527851176e-8,3.8478626988731516e-4,3.449926174844078e-5,-1.4621926226168586e-8,3.8483677916458626e-4,3.475742957885683e-5,-1.4670832194101453e-8,3.8482854708888275e-4,3.491455839733871e-5,-1.4701226812136726e-8,3.8481043392111564e-4,3.4941584971485933e-5,-1.4706695752866484e-8,3.8484010168733006e-4,3.484013825587449e-5,-1.468664371357169e-8,3.8496755452253895e-4,3.464574228765504e-5,-1.4647105606473425e-8,3.852194666708856e-4,3.4419635873436564e-5,-1.4599384135326243e-8,3.8559051584685747e-4,3.4231768838361375e-5,-1.4556966089518085e-8,3.8604470174984556e-4,3.4141257634779535e-5,-1.4531832281699271e-8,3.8652549596401316e-4,3.4180796113487486e-5,-1.4531324827219252e-8,3.8697101818921484e-4,3.434917801281351e-5,-1.4556386882613265e-8,3.8732970092140794e-4,3.461318978913546e-5,-1.4601550234372074e-8,3.875723463890504e-4,3.491766325493246e-5,-1.4656605918405712e-8,3.8769763284319733e-4,3.5200524303996284e-5,-1.4709446876581307e-8,3.8772997811639925e-4,3.540841369879993e-5,-1.474921260370285e-8,3.877109937265693e-4,3.550840337825738e-5,-1.476877406003373e-8,3.8768778169230556e-4,3.5492866851361164e-5,-1.476588786722735e-8,3.877020190388187e-4,3.5377264492801586e-5,-1.4742916279944912e-8,3.8778272420060984e-4,3.519311331097323e-5,-1.4705540490345767e-8,3.8794354267678884e-4,3.497940485725285e-5,-1.4661111679795208e-8,3.88183621815305e-4,3.4775082366194856e-5,-1.4617171125102894e-8,3.8849040862005046e-4,3.4613774624727124e-5,-1.4580401934381552e-8,3.888429039948693e-4,3.452069902788002e-5,-1.4556015515333534e-8,3.8921458948142855e-4,3.45109299576898e-5,-1.4547412738969088e-8,3.8957597873680495e-4,3.4588150401447517e-5,-1.455591709815627e-8,3.8989728274007056e-4,3.474336635341969e-5,-1.4580440622513306e-8,3.9015195396758514e-4,3.495368121352255e-5,-1.4617090694513199e-8,3.9032177735499337e-4,3.5182101792084835e-5,-1.4658947568485471e-8,3.9040340540185385e-4,3.5380277120652675e-5,-1.4696467881042956e-8,3.904146306630224e-4,3.549631641986946e-5,-1.4719008759851094e-8,3.903967427080332e-4,3.548836893154207e-5,-1.4717615696219794e-8,3.9040860609677376e-4,3.534095270614115e-5,-1.468840935651692e-8,3.905107938530057e-4,3.507658782265891e-5,-1.4635025503981219e-8,3.9074435561294203e-4,3.4754301960084933e-5,-1.4568447883446436e-8,3.911142837911334e-4,3.445237060488615e-5,-1.4503769375063293e-8,3.915867065914306e-4,3.4242280516138355e-5,-1.4455241755727162e-8,3.9210098851033884e-4,3.416630020580259e-5,-1.4431921054112957e-8,3.9258978921974933e-4,3.42277415173893e-5,-1.4435583191215956e-8,3.92997891960016e-4,3.43949587943332e-5,-1.446115512515839e-8,3.9329397995157005e-4,3.4614214184008465e-5,-1.4498870429778417e-8,3.934741228294369e-4,3.482529654460197e-5,-1.4537116508416524e-8,3.935585439745504e-4,3.497539271070658e-5,-1.456516089516988e-8,3.935841244453831e-4,3.502882428209544e-5,-1.4575248316469991e-8,3.935950084123615e-4,3.497180118274077e-5,-1.4563798423281858e-8,3.9363335905265697e-4,3.4812268755863353e-5,-1.453161028551469e-8,3.9373196934599825e-4,3.457567997812712e-5,-1.4483168817569692e-8,3.9390985158140024e-4,3.4298244121273065e-5,-1.442534785326174e-8,3.941710735045695e-4,3.401951202215226e-5,-1.4365908871774454e-8,3.945062887672119e-4,3.377587091359689e-5,-1.431215883946541e-8,3.948959058166358e-4,3.3595868201667825e-5,-1.4269990715109863e-8,3.9531378332501087e-4,3.34975018387911e-5,-1.4243345355196083e-8,3.95730734118531e-4,3.348697905005418e-5,-1.4233969882786683e-8,3.9611767962868447e-4,3.3558268125866676e-5,-1.424129255710753e-8,3.964487102877791e-4,3.3693000306870486e-5,-1.4262290516375536e-8,3.9670457560232427e-4,3.386072530925677e-5,-1.429136009013897e-8,3.96877142245794e-4,3.402026478479182e-5,-1.4320404114221407e-8,3.96974675963087e-4,3.412377428846557e-5,-1.433955280018419e-8,3.970263033690597e-4,3.412534347773198e-5,-1.4338948576893425e-8,3.970821930901893e-4,3.3994646882125137E-05,-1.4311677516442803e-8,3.972051269460485e-4,3.373258641401384e-5,-1.4257126814339408e-8,3.9745171697619185e-4,3.3380857036472385e-5,-1.4183048350455968e-8,3.9784887548471545e-4,3.3015677815108926e-5,-1.4104376616313594e-8,3.983784208606685e-4,3.272315572911758e-5,-1.4038376360391643e-8,3.989810077392129e-4,3.2567028222608205e-5,-1.3998275239165507e-8,3.995784033932848e-4,3.256650678484111e-5,-1.3988808427858587e-8,4.001011450991133e-4,3.269479846358877e-5,-1.4005705396679457e-8,4.0050766556828905e-4,3.2894820685850835e-5,-1.4038489709830286e-8,4.0078956955466436e-4,3.310064022337845e-5,-1.407446327281956e-8,4.0096621978551547e-4,3.325505206119748e-5,-1.4102093289319672e-8,4.010745404447036e-4,3.3319672146671645e-5,-1.4113112716440347e-8,4.0115849496576356e-4,3.3278246778498246e-5,-1.4103416685224999e-8,4.0126036221118603e-4,3.3135359116825646e-5,-1.4073080729645138e-8,4.014143685471576e-4,3.291243375807629e-5,-1.4025773677232568e-8,4.0164265136440953e-4,3.264223661405534e-5,-1.3967743564302586e-8,4.019534608500238e-4,3.236272447032621e-5,-1.390655605379301e-8,4.023414451750576e-4,3.211102729665613e-5,-1.3849797898036786e-8,4.0278971307670453e-4,3.191824538468825e-5,-1.3803953237611915e-8,4.032731686233601e-4,3.18056089510052e-5,-1.3773602883065726e-8,4.037624347508987e-4,3.178228329803735e-5,-1.376099772735688e-8,4.0422776760387706e-4,3.184466222614487e-5,-1.3765925422093045e-8,4.0464271102872616e-4,3.1976751617668895e-5,-1.3785736315062855e-8,4.049875078121135e-4,3.2151373504918296e-5,-1.3815449042655647e-8,4.0525242347578963e-4,3.2332175019236376e-5,-1.3847964962952615e-8,4.0544119121250843e-4,3.2476862419152035e-5,-1.3874561986942388e-8,4.05574305140568e-4,3.254270756363941e-5,-1.3885979640020726e-8,4.0569066632959827e-4,3.249544686392352e-5,-1.3874369128060043e-8,4.0584474135106326e-4,3.232141920233108e-5,-1.3836033795223245e-8,4.060959597117366e-4,3.203981711665866e-5,-1.3774198864523915e-8,4.0648944202457856e-4,3.170776499799547e-5,-1.3700205970255192e-8,4.070339380710125e-4,3.14094387988266e-5,-1.3631320248747382e-8,4.076901544592694e-4,3.122757281338524e-5,-1.3584880382566213e-8,4.083808447150242e-4,3.1209812559531696e-5,-1.357136683146307e-8,4.090200221087287e-4,3.1349995147856346e-5,-1.3590446140588086e-8,4.0954443123187515e-4,3.1595103343674464e-5,-1.3632168430282483e-8,4.099303837683666e-4,3.187049880203468e-5,-1.3681872256090355e-8,4.101918277261662e-4,3.210671035463291e-5,-1.3725481876963942e-8,4.103671176469619e-4,3.225608889167277e-5,-1.3752883934071199e-8,4.1050398879131114e-4,3.2297665182539014e-5,-1.3759059927073484e-8,4.106480562172606e-4,3.223425978678608e-5,-1.3743742869076615e-8,4.108359107796797e-4,3.208637535174844e-5,-1.371041895829871e-8,4.1109180515318115e-4,3.188566709771694e-5,-1.366514943234374e-8,4.1142658815250326e-4,3.166901056491771e-5,-1.3615380156688916e-8,4.118380537063425e-4,3.147326545835003e-5,-1.3568790580043022e-8,4.123123872285276e-4,3.1330693322293186e-5,-1.3532246924646132e-8,4.1282660990819755e-4,3.12650855735152e-5,-1.3510937230181173e-8,4.1335194038861985e-4,3.12888232285669e-5,-1.3507759179538763e-8,0.00041385782791872523,3.14012402587035e-5,-1.3523006860697865e-8,4.143162097043059e-4,3.158851800056764e-5,-1.3554343762603742e-8,4.147055736697891e-4,3.182504325345812e-5,-1.3596998591413753e-8,4.150145461827425e-4,3.207610038134238e-5,-1.3644157727172217e-8,4.1524476893370035e-4,3.230183268389632e-5,-1.368759809958973e-8,4.1541284364256985e-4,3.2462481911037404e-5,-1.3718658948585584e-8,4.1555091775811174e-4,3.252513293742975e-5,-1.3729683805619488e-8,4.1570478512098117e-4,3.247211793603926e-5,-1.3715984522395111e-8,4.159276624200048e-4,3.2310116826504505e-5,-1.3678055124053507e-8,4.1626805702971783e-4,3.2076790804311726e-5,-1.3623245822332607e-8,4.167524617387805e-4,3.1839355536118996e-5,-1.3565610929515464e-8,4.173687071937988e-4,3.1679433606488e-5,-1.352271054257597e-8,4.180608672886187e-4,3.166480571656874e-5,-1.3509541984888306e-8,4.187443288713044e-4,3.182021371545731e-5,-1.353221487846181e-8,4.193369682737023e-4,3.211533218369021e-5,-1.3585218588590153e-8,4.1978931227977685e-4,3.247863499575709e-5,-1.3654153761093438e-8,4.2009704087509506e-4,3.282777137229304e-5,-1.3721983897773367e-8,4.202929904690921e-4,3.309778073197644e-5,-1.377490014751364e-8,4.2042859167406205e-4,3.325494568929429e-5,-1.3805267082687721e-8,4.2055631802961126e-4,3.329635406528146e-5,-1.3811685967344244e-8,4.207187075410816e-4,3.324181570289828e-5,-1.3797529601781316e-8,4.209438553744661e-4,3.312430221578908e-5,-1.376914696052265e-8,4.212450114021482e-4,3.29820290127452e-5,-1.3734307231289387e-8,4.2162200611876914e-4,3.285276439909095e-5,-1.3700985550654417e-8,4.220632466273461e-4,3.276974175556986e-5,-1.3676406563612262e-8,4.225479806825113e-4,3.275847057478871e-5,-1.3666274054639809e-8,4.2304896717371235e-4,3.283409778896946e-5,-1.367416405793029e-8,4.23535782825238e-4,3.299935006506142e-5,-1.3701088573561653e-8,4.2397886988324306e-4,3.3243478824476034e-5,-1.374527589841765e-8,4.2435406637511227e-4,3.354279531934157e-5,-1.3802236076034794e-8,4.246470102477941e-4,3.3863147891369016e-5,-1.3865160722445153e-8,4.248566904943515e-4,3.4164346787876715e-5,-1.392568757735148e-8,4.249974307882397e-4,3.4406249583597606e-5,-1.3975043403899051e-8,4.2509869023787635e-4,3.455590008719841e-5,-1.4005525482322397e-8,4.252022353167417e-4,3.4594902384809774e-5,-1.4012200930378964e-8,4.2535628227180944e-4,3.452606191561703e-5,-1.3994602436161527e-8,4.2560627053101944e-4,3.437774195887487e-5,-1.3957997791203556e-8,4.259826655671023e-4,3.42033544248866e-5,-1.3913552496987838e-8,4.2648812302165757e-4,3.407288572264099e-5,-1.3876612700332113e-8,4.2708920644435e-4,3.405490071168592e-5,-1.3862734860228985e-8,4.2771960286236156e-4,3.419246160656786e-5,-1.388224482934693e-8,4.2829858276369735e-4,3.4483331127508464e-5,-1.39356667397566e-8,4.287591800201008e-4,3.487711132752329e-5,-1.401286696741407e-8,4.2907189221625086e-4,3.529375343362766e-5,-1.4096933853643936e-8,4.2925111181198606e-4,3.5653822332007866e-5,-1.4170691079982273e-8,4.293431436633978e-4,3.590386737424457e-5,-1.422220020649449e-8,4.294057069943159e-4,3.602629900089709e-5,-1.4246968028465437e-8,4.2949028887441184e-4,3.603476243390713e-5,-1.4247107509361492e-8,4.296326637699373e-4,3.596258975350247e-5,-1.422906114426545e-8,4.298507830160587e-4,3.585122067538412e-5,-1.4201284229219959e-8,4.30146821619837e-4,3.574178595192985e-5,-1.4172502101488057e-8,4.305105528179752e-4,3.567004669500458e-5,-1.4150577469349977e-8,4.309225690144668e-4,3.566353502127585e-5,-1.4141794633184363e-8,4.3135708115020477e-4,3.5739694174433475e-5,-1.4150368611616155e-8,4.3178466029482305e-4,3.5904363120716595e-5,-1.4178070671429282e-8,4.321754230960808e-4,3.615055457113382e-5,-1.4223940930016515e-8,4.3250300470527235e-4,3.645801938170371e-5,-1.4284152898436964e-8,4.327492141671965e-4,3.6794455062480333e-5,-1.4352180111878265e-8,4.329086361301494e-4,3.711914037777242e-5,-1.441944170755436e-8,4.329919362284678e-4,3.738922622588004e-5,-1.4476525706585657e-8,4.3302648954548616e-4,3.756805202918171e-5,-1.4514923144055002e-8,4.330533235187689e-4,3.763391300210855e-5,-1.4528989528198715e-8,4.331202330514279e-4,3.7587099620632155e-5,-1.4517675625248134e-8,4.33271953934643e-4,3.7453099149815584e-5,-1.4485529520827118e-8,4.335391170749413e-4,3.728040086638992e-5,-1.4442540122095772e-8,4.3392835970523195e-4,3.713209968463934e-5,-1.4402528788363379e-8,4.344165500758634e-4,3.707165347756771e-5,-1.4380064897967802e-8,4.3495230062594813e-4,3.714511840207765e-5,-1.438637838413005e-8,4.3546692736868404e-4,3.7364868229131036e-5,-1.4425430174624792e-8,4.3589372030768185e-4,3.7701867510223756e-5,-1.4491842764582526e-8,4.361893091351183e-4,3.8092289800798756e-5,-1.4572120153155367e-8,4.3634757852403625e-4,3.8457985039809324e-5,-1.464910812938325e-8,4.363991796352178e-4,3.8732147174392066e-5,-1.4707727290935779e-8,4.3639763452364114e-4,3.887826414780291e-5,-1.4739264857224268e-8,4.364001722647106e-4,3.889525252824335e-5,-1.474263969373984e-8,4.364523016838084e-4,3.881021476354108e-5,-1.4722977299200551e-8,4.365804771433114e-4,3.866556340462599e-5,-1.468896039574687e-8,4.367919722871205e-4,3.8506926413442914e-5,-1.4650297668231218e-8,4.370786669043261e-4,3.837491837753309e-5,-1.4615939698352876e-8,4.3742177567648004e-4,3.8300841711920557e-5,-1.4593067497875068e-8,4.377959505900983e-4,3.830495380523125e-5,-1.4586611379527836e-8,4.3817246361271725e-4,3.839583492266989e-5,-1.4599028669935255e-8,4.385219262133009e-4,3.856996202628723e-5,-1.4630154871815322e-8,4.388172474094774e-4,3.881133934777927e-5,-1.4677068982739351e-8,4.3903736753377824e-4,3.909172438758446e-5,-1.4734059655137036e-8,4.39171785700476e-4,3.9372492362129876e-5,-1.4792916472356046e-8,4.392250878709724e-4,3.9609287825052854e-5,-1.48438349018792e-8,4.392197841418492e-4,3.9760010138741e-5,-1.4877110525214467e-8,4.391952872335693e-4,3.9795215836805176e-5,-1.488546114998337e-8,4.392015028478242e-4,3.9708130526000964e-5,-1.4866368508482124e-8,4.392874740657098e-4,3.9520303226885334e-5,-1.4823547388579492e-8,4.3948798661524503e-4,3.927964654825381e-5,-1.4766788554084115e-8,4.3981252877586845e-4,3.905019462021475e-5,-1.4709963203151688e-8,4.4024057367895406e-4,3.889606668889953e-5,-1.4667637174980205e-8,4.407251019923313e-4,3.886426054421898e-5,-1.465121537204819e-8,4.4120371732378895e-4,3.897130268161372e-5,-1.4665702138134793e-8,4.4161456567829924e-4,3.919776198075389e-5,-1.4708062006301217e-8,4.41912806692747e-4,3.949272215218089e-5,-1.4767828043097781e-8,4.4208268554817335e-4,3.978761101197567e-5,-1.4829982902345276e-8,4.421409699762284e-4,4.001548958358082e-5,-1.4879284623686034e-8,4.421303237867017e-4,4.012928886396741e-5,-1.4904509091663218e-8,4.4210531633417574e-4,4.011254468451751e-5,-1.4901064005645254e-8,4.421168168722615e-4,3.997960143327207e-5,-1.487124044964496e-8,4.422004451507053e-4,3.9767094807069e-5,-1.4822485598136494e-8,4.4237183113721076e-4,3.9521669753076244e-5,-1.4764783122292205e-8,4.426279491665109e-4,3.928881642907068e-5,-1.4708204056709783e-8,4.429518454747351e-4,3.91054375635812e-5,-1.4661205248835662e-8,4.433181067887932e-4,3.899632725145631e-5,-1.4629752573422735e-8,4.436975223791884e-4,3.8973357147412855e-5,-1.4617048273316101e-8,4.4406056405082626e-4,3.903590468819179e-5,-1.4623561502714967e-8,4.4438008650014344e-4,3.91715076460056e-5,-1.4647122090138582e-8,4.446339768961001e-4,3.935646602380224e-5,-1.4682981479505956e-8,4.448083963396037e-4,3.955684978592832e-5,-1.4723927049201846e-8,4.4490177030358924e-4,3.973098128986008e-5,-1.4760714274992125e-8,4.4492878725670593e-4,3.9834759260079374e-5,-1.4783179135015065e-8,4.4492247041699046e-4,3.983068781073579e-5,-1.4782276848273152e-8,4.4493150521741963e-4,3.9699639584905065e-5,-1.4752832416571488e-8,4.4501065268293756e-4,3.945150399211428e-5,-1.4696101798232349e-8,4.452051621230111e-4,3.912878232058367e-5,-1.4620773630123115e-8,4.4553450758414917e-4,3.879851843897706e-5,-1.4541367888067542e-8,4.459831270119789e-4,3.853341144760553e-5,-1.4474199279655483e-8,4.4650334228181737e-4,3.83892962100095e-5,-1.4432428557074345e-8,4.470294963479162e-4,3.838843851633301e-5,-1.4422210720894016e-8,4.474971022466872e-4,3.8514644123259556e-5,-1.4441268698217063e-8,4.4785977033990704e-4,3.872025545847296e-5,-1.4480033042680275e-8,4.480991934681107e-4,3.8940889744311725e-5,-1.4524608121518424e-8,4.48226794522255e-4,3.911257774162124e-5,-1.4560498684405491e-8,4.482780588321118e-4,3.918669829382871e-5,-1.457607889926847e-8,4.4830195410043057e-4,3.913954024565277e-5,-1.4565007306195704e-8,4.483485381147606e-4,3.8974954360315984e-5,-1.4527125710483059e-8,4.484579671969714e-4,3.872030337677846e-5,-1.4467791545713628e-8,4.4865345969394e-4,3.841765061935548e-5,-1.4396030200337683e-8,4.489392960449042e-4,3.811327623924533e-5,-1.4322193270630174e-8,4.4930320331229367e-4,3.7848511485026534e-5,-1.4255821744391228e-8,4.497213338957374e-4,3.765366154702086e-5,-1.4204163537672068e-8,4.5016388935185643e-4,3.7545304813913294e-5,-1.4171463776027224e-8,4.5060002058532647e-4,3.752619081927828e-5,-1.415888242467012e-8,4.5100150770761724e-4,3.758652962581753e-5,-1.4164756572674547e-8,4.5134546376081325e-4,3.7705677615177184e-5,-1.4184941935731645e-8,4.5161665818218725e-4,3.785383751499737e-5,-1.4213111016563784e-8,4.518100423627256e-4,3.7994051971822126e-5,-1.4241074681839239e-8,4.5193371514478737e-4,3.8085369823532785e-5,-1.4259379743515523e-8,4.5201173652522936e-4,3.808847352382779e-5,-1.4258553184670598e-8,4.5208492668352473e-4,3.797471001575803e-5,-1.4231251193107125e-8,4.522066971808626e-4,3.77376787180318e-5,-1.4175095272905575e-8,4.5243135935849304e-4,3.7403252871591634e-5,-1.4095172040726785e-8,4.5279582657719995e-4,3.7030874343293475e-5,-1.4004497095542028e-8,4.5330172975054594e-4,3.6700112219684904e-5,-1.3921072538958264e-8,4.539088056613535e-4,3.648437266876659e-5,-1.3861984223206524e-8,4.545461169138244e-4,3.642372882885231e-5,-1.3837216692123784e-8,4.5513658700048617e-4,3.651138922317251e-5,-1.3846408129259836e-8,4.556220323441288e-4,3.66997016694241e-5,-1.3879890283223254e-8,4.559775185965056e-4,3.691969978430192e-5,-1.3922769386842146e-8,4.562122242740801e-4,3.710309854736905e-5,-1.3959682858114987e-8,4.5636084388552884e-4,3.7198647914217366e-5,-1.397848887776796e-8,4.564712492187718e-4,3.7180239677984124e-5,-1.3972296643507357e-8,4.5659257815677795e-4,3.7047788247771294e-5,-1.393998633269255e-8,4.5676585962010804e-4,3.682314037864092e-5,-1.3885605024489333e-8,4.57017899354544e-4,3.65430985371316e-5,-1.3816998895031419e-8,4.573585513254664e-4,3.625115082842816e-5,-1.3743986972765052e-8,4.5778120823241134e-4,3.5989329685002914e-5,-1.367641965358165e-8,4.582659310878471e-4,3.579152347703973e-5,-1.3622494409608255e-8,4.587842300484169e-4,3.567911872805785e-5,-1.3587614246913989e-8,4.5930436312677383e-4,3.565921697959824e-5,-1.357389940117045e-8,4.5979615512869434e-4,3.572510183973148e-5,-1.358027877351196e-8,4.6023475988321376e-4,3.585820060660067e-5,-1.360294284347647e-8,4.6060335832733674e-4,3.6030722091809204e-5,-1.3635911870639802e-8,4.60895139188042e-4,3.6208528902177354e-5,-1.3671590860836431e-8,4.6111494690815154e-4,3.635429757026502e-5,-1.3701352069797334e-8,4.612807925415506e-4,3.6431488839050474e-5,-1.3716346193401218e-8,4.614247987373746e-4,3.6410027954227026e-5,-1.3708835750741679e-8,4.6159205914533125e-4,3.62743262879114e-5,-1.3674231350069227e-8,4.6183498055835207e-4,3.6032773953528615e-5,-1.3613573886357206e-8,4.6220096368370197e-4,3.572504366766511e-5,-1.3535497406452498e-8,4.627142460022724e-4,3.5420516607509466e-5,-1.345601089443765e-8,4.633589570077975e-4,3.520158587923049e-5,-1.339462640412944e-8,4.640754895656249e-4,3.5133781640715624e-5,-1.336732887285183e-8,4.6477797333421513e-4,3.523710146370312e-5,-1.337976511947418e-8,4.653863109243403e-4,3.5476761963375476e-5,-1.3424888861955243e-8,4.658546211216421e-4,3.577942568893229e-5,-1.3486488367131025e-8,4.661813358342299e-4,3.6063351831523195e-5,-1.3545965988268696e-8,4.664004611033069e-4,3.626473218857858e-5,-1.3588320959816941e-8,4.665639958352068e-4,3.6350407228647365e-5,-1.360513303776225e-8,4.6672541684679767e-4,3.631790496298228e-5,-1.3594788762173888e-8,4.6692865416770923e-4,3.618845377576418e-5,-1.3561187150119446e-8,4.672026368560225e-4,3.5997925297469526e-5,-1.3511940939945172e-8,4.6755982834898976e-4,3.5788386314177225e-5,-1.3456575605413407e-8,4.67997179408685e-4,3.5601078032541834e-5,-1.3404875559273569e-8,4.684985923176623e-4,3.5470812389852354e-5,-1.3365423942936016e-8,4.6903849108559164e-4,3.542180047068913e-5,-1.3344439413006975e-8,4.695861596821659e-4,3.546508508953634e-5,-1.3345040436527447e-8,4.7011041192164126e-4,3.559772500847251e-5,-1.3367006714160734e-8,4.705840542170844e-4,3.580375537789526e-5,-1.3407016011675667e-8,4.7098759753275935e-4,3.6056678871433476e-5,-1.3459233547938723e-8,4.7131190949890184e-4,3.632298007574168e-5,-1.3516078049011552e-8,4.71559790690804e-4,3.6566204934469644e-5,-1.3569053058169974e-8,4.717465735754899e-4,3.6751383530202755E-05,-1.3609647477316639e-8,4.718998124130554e-4,3.684981905601746e-5,-1.3630405599256602e-8,4.7205781579265745e-4,3.684452081682734e-5,-1.3626310087204059e-8,4.7226605766033966e-4,3.673637051258554e-5,-1.3596506069195115e-8,4.725699924678846e-4,3.654994787786842e-5,-1.3546025765795578e-8,4.730033180778431e-4,3.6336041112372295e-5,-1.3486667699711668e-8,4.7357300089362716e-4,3.616604739808837e-5,-1.3435763281303896e-8,4.74246972161772e-4,3.611397064008277e-5,-1.3411769997669891e-8,4.7495468950762464e-4,3.6228226616847743e-5,-1.342728801093758e-8,4.756075265498231e-4,3.6506596772157785e-5,-1.3482806498111208e-8,4.761324789643435e-4,3.68921215314555e-5,-1.3565521966204982e-8,4.76500027685036e-4,3.729587464380291e-5,-1.3654665288008376e-8,4.7672987690625123e-4,3.763293743393644e-5,-1.3730017018062513e-8,4.768749775046739e-4,3.7850136442992455e-5,-1.3778472109271951e-8,4.7699763159739244e-4,3.7934345672070496e-5,-1.379606231317544e-8,4.7715085690734735e-4,3.790502947009683e-5,-1.3786386207802384e-8,4.7736947329048336e-4,3.780076670277705e-5,-1.3757715344810296e-8,4.7766881383462853e-4,3.7666865402247315e-5,-1.3720316041747617e-8,4.780473761409701e-4,3.7546640888132714e-5,-1.368447808114495e-8,4.7849069816615584e-4,3.747611264933771e-5,-1.3659170952435136e-8,4.789752246660876e-4,3.748091718942398e-5,-1.3651117518452754e-8,4.7947201707088224e-4,3.757448492495361e-5,-1.3664168314897276e-8,4.799505077512641e-4,3.775714321569889e-5,-1.3698971973992664e-8,4.803824002412184e-4,3.801622409426613e-5,-1.3752971782310215e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json new file mode 100644 index 000000000..765f637b6 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":11000,"numberOfSamples":1000,"samples":[4.807455898115237e-4,3.832746570992544e-5,-1.3820749559112586e-8,4.810276804026849e-4,3.8657939483712816e-5,-1.3894708855793208e-8,4.8122851144731977e-4,3.897037866353488e-5,-1.3966029941865335e-8,4.8136122169643126e-4,3.922846753666153e-5,-1.4025813189547578e-8,4.8145158055841605e-4,3.94025277918899e-5,-1.406634943105251e-8,4.815355041583503e-4,3.9474978459853574e-5,-1.408245537787128e-8,4.8165478219839815e-4,3.9445013590506954e-5,-1.4072791780691197e-8,4.8185089652025466e-4,3.933196966399209e-5,-1.4041008026015441e-8,4.8215671196515623e-4,3.9176311765079673e-5,-1.3996340784096513e-8,4.825864763543066e-4,3.9036228711670225e-5,-1.3953028790341758e-8,4.8312623641597524e-4,3.897747212754661e-5,-1.3927849119148707e-8,4.837291888970253e-4,3.9055456474574426e-5,-1.3935510387344442e-8,4.843221611312391e-4,3.929313827217236e-5,-1.3982860442730526e-8,4.848265247112546e-4,3.966499254457847e-5,-1.4064616609993489e-8,4.8518733416020557e-4,4.009980545620315e-5,-1.4163881241573302e-8,4.853950931909375e-4,4.050581912340954e-5,-1.425830655995102e-8,4.854866151667581e-4,4.080574058134305e-5,-1.4328715323638037e-8,4.85525688196407e-4,4.096178493042818e-5,-1.4365239392562207e-8,4.855772001398806e-4,4.0979862819758134e-5,-1.4368394366073396e-8,4.856885804979649e-4,4.089713112766541e-5,-1.4346234987150922e-8,4.8588326125485515e-4,4.076435074414623e-5,-1.4310345248447114e-8,4.8616296080937287e-4,4.063161994000118e-5,-1.4272594843316575e-8,4.865136173432042e-4,4.054008405187016e-5,-1.4243172616081504e-8,4.8691142789272524e-4,4.051847158520118e-5,-1.4229620182921136e-8,4.8732762934217247e-4,4.0582299326150006e-5,-1.4236433463507242e-8,4.8773212709177916e-4,4.07341134689005e-5,-1.4264941962397524e-8,4.880965967034294e-4,4.096407600183585e-5,-1.4313353517338398e-8,4.88397573177068e-4,4.1250927252936434e-5,-1.4376959666340294e-8,4.886197129387349e-4,4.1563798332032156e-5,-1.4448564853229553e-8,4.887589435265532e-4,4.1865488207741994e-5,-1.451924254306548e-8,4.888247307700336e-4,4.211748974787741e-5,-1.4579476522027053e-8,4.888405100767859e-4,4.228641181812268e-5,-1.462064263346648e-8,4.888415356313333e-4,4.235083017747227e-5,-1.463666315611464e-8,4.888699069788087e-4,4.2307124574301165e-5,-1.462554429370797e-8,4.889672434197426e-4,4.2172729191325406e-5,-1.459042628142175e-8,4.89166100944331e-4,4.198561886052198e-5,-1.4539802909504917e-8,4.894815424795779e-4,4.179941029790374e-5,-1.4486638095790344e-8,4.899045597653066e-4,4.16738571918689e-5,-1.4446179472955758e-8,4.903995543457572e-4,4.1661226263416274e-5,-1.4432491631334258e-8,4.909084078410756e-4,4.179064877681403e-5,-1.4454232713012669e-8,4.913629055658968e-4,4.205495921373214e-5,-1.4510927067288458e-8,4.917043498415898e-4,4.2406630471518614e-5,-1.4591584452824552e-8,4.919041260653661e-4,4.2768455240018365e-5,-1.4677226547185713e-8,4.91975143734432e-4,4.30581023135401e-5,-1.4747087713819914e-8,4.919667281492841e-4,4.321634341236769e-5,-1.4785795141156964e-8,4.919450134806429e-4,4.322488299346272e-5,-1.4787918091785175e-8,4.919696544610528e-4,4.310619995991277e-5,-1.4758043194016052e-8,4.920780610928328e-4,4.2909134196637064e-5,-1.4707389424281414e-8,4.922813225790399e-4,4.269033595193827e-5,-1.464944226297227e-8,4.925688425220637e-4,4.249988199139718e-5,-1.4596537842685818e-8,4.92916302217559e-4,4.2373819969799324e-5,-1.4557994767186664e-8,4.932930424762773e-4,4.233227598512297e-5,-1.4539483417289066e-8,4.936673798735039e-4,4.2380499169877454e-5,-1.4543082916464466e-8,4.940100632622315e-4,4.251078828128216e-5,-1.4567604259159937e-8,4.942967406427109e-4,4.27043504794895e-5,-1.4608973846901326e-8,4.945102476677884e-4,4.2933063498730834e-5,-1.4660638792530654e-8,4.946431248320447e-4,4.316170803770033e-5,-1.4714088579726986e-8,4.947001929114915e-4,4.335150966562856e-5,-1.4759675319273507e-8,4.947003518474758e-4,4.3465620460088586e-5,-1.4787908056141978e-8,4.946762700491294e-4,4.3476391218321277e-5,-1.4791230435817252e-8,4.946706632709735e-4,4.337312853241991e-5,-1.4766006598097854e-8,4.947286919062398e-4,4.316792790944356e-5,-1.4714140745679074e-8,4.948875598480194e-4,4.289680338026428e-5,-1.46436248866499e-8,4.951660198459949e-4,4.261431606960693e-5,-1.4567507684274658e-8,4.955572023782361e-4,4.238205390573295e-5,-1.4501266960766878e-8,4.960275056948562e-4,4.225356593077395e-5,-1.4459112508157139e-8,4.965226079965434e-4,4.225970770296015e-5,-1.445012992875491e-8,4.969797348841862e-4,4.239855798309805e-5,-1.4475344797421208e-8,4.973435745501257e-4,4.263333074298414e-5,-1.452672530286383e-8,4.975817616767804e-4,4.290011641573763e-5,-1.4588789841322534e-8,4.976949342797306e-4,4.31246291984686e-5,-1.4642736998874316e-8,4.977169933512843e-4,4.32435191844831e-5,-1.4671952404593025e-8,4.977043744489744e-4,4.3222752491909916e-5,-1.4666876259907704e-8,4.977180995272924e-4,4.30657402384419e-5,-1.4627283126456636e-8,4.978060190996614e-4,4.280844975449757e-5,-1.4561258969220208e-8,4.979920722311104e-4,4.2505071693506214e-5,-1.4481783123106343e-8,4.982749931993637e-4,4.221149461163865e-5,-1.4402704387878677e-8,4.986341351162414e-4,4.1972812399652274e-5,-1.4335614319282961e-8,4.99038023174974e-4,4.181724732728816e-5,-1.4288203371298527e-8,4.994521132236064e-4,4.1755451375511826e-5,-1.4263899128169458e-8,4.998442497099592e-4,4.1782774302784495e-5,-1.4262268021020732e-8,5.001879318353291e-4,4.1882399162322495e-5,-1.4279703860248156e-8,5.004642516735846e-4,4.202823461485221e-5,-1.4310113798395751e-8,5.006634317541689e-4,4.218742398465999e-5,-1.4345522650409268e-8,5.007865154243883e-4,4.232301933686223e-5,-1.4376697915433863e-8,5.008471450808845e-4,4.239771827120947e-5,-1.4394026271468186e-8,5.008726192415792e-4,4.237947661390274e-5,-1.4388889379628621e-8,5.009027064025104e-4,4.224906691188224e-5,-1.4355605708386248e-8,5.009844664141034e-4,4.200814399437556e-5,-1.4293595372097094e-8,5.011622958425812e-4,4.168457799010023e-5,-1.4208933086185455e-8,5.014648490094809e-4,4.133098997158663e-5,-1.4114222164068199e-8,5.018933871908035e-4,4.1014046129932506e-5,-1.4026120755346876e-8,5.024172779489319e-4,4.079629120466331e-5,-1.3960894019653134e-8,5.029800978344093e-4,4.0716851663191706e-5,-1.3929502673170868e-8,5.035149205751237e-4,4.0778803174321974e-5,-1.3934148788121047e-8,5.039631026052139e-4,4.0948067350335475e-5,-1.3967574412809247e-8,5.042898951464934e-4,4.116358529728348e-5,-1.4015214047407058e-8,5.044923433820881e-4,4.1354546447450864e-5,-1.405930760929713e-8,5.045980853346142e-4,4.145904379395495e-5,-1.4083628433054094e-8,5.046562864241187e-4,4.143903113694813e-5,-1.4077491031220824e-8,5.047237703547672e-4,4.128796116298141e-5,-1.4038013428869964e-8,5.048504577142612e-4,4.1029648300892024e-5,-1.3970152894372228e-8,5.050682042868694e-4,4.070946922079784e-5,-1.3884718542673423e-8,5.053857892959258e-4,4.038129871002777e-5,-1.3795175637434057e-8,5.057904773855169e-4,4.0094587167200846e-5,-1.3714342555419928e-8,5.062542972907671e-4,3.988514116215506e-5,-1.3651908298048012e-8,5.067420758582822e-4,3.9771018930213065e-5,-1.36131932106548e-8,5.072186700798977e-4,3.9752847710952766e-5,-1.3599056334601855e-8,5.076541049257842e-4,3.981679039448647e-5,-1.3606552572220539e-8,5.080265636895346e-4,3.993839829792082e-5,-1.3629887915207912e-8,5.083239056768367e-4,4.008625429723009e-5,-1.366134539027628e-8,5.085445405312649e-4,4.02251540015048e-5,-1.3692068130210929e-8,5.086982215653529e-4,4.031923748367069e-5,-1.3712790472901225e-8,5.088067942896942e-4,4.033585746282454e-5,-1.3714758380114217e-8,5.089042016332715e-4,4.0250984480183826e-5,-1.369110873241738e-8,5.090342370463796e-4,4.005630209267127e-5,-1.36387919547938e-8,5.09244162874289e-4,3.976656292219734e-5,-1.3560660497017656e-8,5.095732393487734e-4,3.942360984383623e-5,-1.3466737784983145e-8,5.100381218559963e-4,3.9092145563312785e-5,-1.3373334502326575e-8,5.106211663506831e-4,3.884421714299498e-5,-1.3299185546533904e-8,5.112695708256073e-4,3.873558642398053e-5,-1.325938777322804e-8,5.119093049859852e-4,3.878426446529394e-5,-1.3259745614206067e-8,5.124690770718819e-4,3.896273593345075e-5,-1.3294485083970076e-8,5.129030399538616e-4,3.920805997219822e-5,-1.3348486880023718e-8,5.13202292093832e-4,3.944384781038976e-5,-1.3402621757432825e-8,5.133926118135372e-4,3.9603311868793384e-5,-1.3439524368879208e-8,5.135225876503645e-4,3.964513077729718e-5,-1.344773648237942e-8,5.136484244188965e-4,3.955939833262208e-5,-1.3423498173910979e-8,5.138202846515992e-4,3.936503101320661e-5,-1.337045078206997e-8,5.140727251366115e-4,3.9101620258126494e-5,-1.3297891578819023e-8,5.144200439889327e-4,3.8818723273896924e-5,-1.3218230049065295e-8,5.148563248939854e-4,3.8565076244178615e-5,-1.31442269252279e-8,5.153592942705727e-4,3.8379720577811564e-5,-1.3086552229207539e-8,5.158965586590853e-4,3.8286402743178446e-5,-1.3052102047767048e-8,5.164325300028227e-4,3.829166482457637e-5,-1.3043289492522785e-8,5.169345624266961e-4,3.838611140678518e-5,-1.3058250794240458e-8,5.173773998025525e-4,3.854777091398222e-5,-1.3091694599441699e-8,5.177457469094699e-4,3.8746318140652295E-05,-1.3136024508001314e-8,5.180353753683765e-4,3.894721737733719e-5,-1.3182422098429487e-8,5.182533801875123e-4,3.9115464526579055e-5,-1.322176802538456e-8,5.184180207872244e-4,3.9219155018714586e-5,-1.3245479826195314e-8,5.185582174206982e-4,3.923339887816621e-5,-1.3246473160946539e-8,5.187121920390923e-4,3.9145162676454723e-5,-1.3220474590964729e-8,0.00051892397371530155,3.895909776742693e-5,-1.316773040159988e-8,5.192361363727685e-4,3.8702959631497384e-5,-1.3094695644609137e-8,5.19678041196177e-4,3.8429183553321686e-5,-1.3014701920521112e-8,5.20251698135249e-4,3.820781513346968e-5,-1.2946243125940887e-8,5.209217831712024e-4,3.810779889170091e-5,-1.2908049988956758e-8,5.216188239536118e-4,3.817071047034634e-5,-1.2912046211167408e-8,5.222596846655533e-4,3.8389929217076366e-5,-1.295764933741635e-8,5.227776981227885e-4,3.870942493105218e-5,-1.3031193682067312e-8,5.231462221446176e-4,3.90449333361414e-5,-1.3111251595486714e-8,5.233834624169179e-4,3.9315346546736246e-5,-1.3176687479802485e-8,5.235394281321812e-4,3.946752696132619e-5,-1.3213083897284422e-8,5.236754233317036e-4,3.9485713744511626e-5,-1.3215295714260378e-8,5.238462568216775e-4,3.9387314888452363e-5,-1.3186630329662888e-8,5.240896667697123e-4,3.921173128856953e-5,-1.3136310014778118e-8,5.244226644038686e-4,3.900801174331826e-5,-1.3076572242619164e-8,5.248426426550115e-4,3.882439799199982e-5,-1.3020069826079723e-8,5.253311937372029e-4,3.870065090327242e-5,-1.2977767650741354e-8,5.258593061790778e-4,3.8663123547147846e-5,-1.2957402470289928e-8,5.263931056407179e-4,3.8722437005912813e-5,-1.2962597830659435e-8,5.268994400545242e-4,3.887355383309786e-5,-1.2992693609541672e-8,5.273506944811689e-4,3.909786013135494e-5,-1.304323238147115e-8,5.277283618928682e-4,3.9366737045691754e-5,-1.310693161469982e-8,5.280251104455353e-4,3.964596224958332e-5,-1.3174889451303355e-8,5.282454335082373e-4,3.990022972843365e-5,-1.3237768428264953e-8,5.284052231946588e-4,4.009736888639202e-5,-1.3286836033079106e-8,5.285305494829884e-4,4.021225325537939e-5,-1.3314912562979519e-8,5.286557060394544e-4,4.0230579521206196e-5,-1.3317363974876683e-8,5.288202403339737e-4,4.015271335318547e-5,-1.3293259523465599e-8,5.290641459351538e-4,3.999743645858218e-5,-1.3246644881952389e-8,5.29420183065172e-4,3.980429049478516e-5,-1.3187490243689071e-8,5.299032094367221e-4,3.963165594186321e-5,-1.313141009986588e-8,5.304988417193463e-4,3.9546878333224285e-5,-1.3097054263167734e-8,5.311574317731786e-4,3.96065921173356e-5,-1.3100650126240523e-8,5.318014578119245e-4,3.98319165292681e-5,-1.3149038022273758e-8,5.32349611324718e-4,4.019180005671327e-5,-1.3234910936428494e-8,5.327485204893838e-4,4.0608738174731215e-5,-1.3338177317094923e-8,5.32993774836213e-4,4.098800442554419e-5,-1.3433731281722263e-8,5.331274981533502e-4,4.125409164773492e-5,-1.3501160283562443e-8,5.332164335123858e-4,4.137379163363762e-5,-1.353087213849061e-8,5.333259193608972e-4,4.13576666322837e-5,-1.3524569124303872e-8,5.335024650995162e-4,4.124644008992089e-5,-1.3491904463169542e-8,5.337679129261047e-4,4.109355822924989e-5,-1.3446225415098136e-8,5.341216559001369e-4,4.0951180469202836e-5,-1.340113134321436e-8,5.345463734211426e-4,4.0861572281668134e-5,-1.3368231159593744e-8,5.350143019353962e-4,4.0852955656746325e-5,-1.3355852072504397e-8,5.354928423825327e-4,4.093817556745151e-5,-1.3368381791204466e-8,5.359493976739728e-4,4.111506478866112e-5,-1.3406093750610092e-8,5.363555591240247e-4,4.136805710751307e-5,-1.3465430533373401e-8,5.366906062535734e-4,4.167087291184944e-5,-1.353970510439085e-8,5.369441549435876e-4,4.199017748541348e-5,-1.3620131233801054e-8,5.371176836764395e-4,4.229004758300979e-5,-1.3697055796399448e-8,5.372246939412618e-4,4.2536815840649555e-5,-1.376122922588961e-8,5.372894831724115e-4,4.2703741062777625e-5,-1.3804984921125316e-8,5.373446669618185e-4,4.277512234113474e-5,-1.3823300988072162e-8,0.00053742757544824975,4.27496117961429e-5,-1.3814764582700658e-8,5.375755603610683e-4,4.264248462223457e-5,-1.3782413644499372e-8,5.378200593904353e-4,4.2486472593883745e-5,-1.373430126808111e-8,5.381792508290428e-4,4.233015478549633e-5,-1.368338167500512e-8,5.386499283189473e-4,4.223204705859813e-5,-1.3646059069466792e-8,5.392010226639216e-4,4.224848840771485e-5,-1.3638780125339982e-8,5.397734225659609e-4,4.2415447202705524e-5,-1.3672723821927818e-8,5.402914650870005e-4,4.272937436938092e-5,-1.3748141826012162e-8,5.406870951769552e-4,4.3138228021123006e-5,-1.3851605137995859e-8,5.409276624223462e-4,4.355360016244392e-5,-1.3959259082476329e-8,5.410308634400444e-4,4.388299832113226e-5,-1.404572807505199e-8,5.410560312127462e-4,4.406544519190341e-5,-1.409387560046213e-8,5.410774246421454e-4,4.4090008179269903e-5,-1.4099829500317099e-8,5.411566007764416e-4,4.399025355105983e-5,-1.4071552354515442e-8,5.413273035270495e-4,4.3823916588713976e-5,-1.4023612135435341e-8,5.415945168970027e-4,4.365179453199496e-5,-1.3971835246327046e-8,5.41941678191083e-4,4.3523829968479546e-5,-1.3929763987744986e-8,5.423397870270695e-4,4.3473105445618066e-5,-1.3906988846966135e-8,5.427550475932729e-4,4.3515132910834864e-5,-1.3908697960636151e-8,5.431542404764803e-4,4.364960885200329e-5,-1.393582992804166e-8,5.435083954292767e-4,4.386290135691708e-5,-1.3985503452994463e-8,5.437955680521673e-4,4.413075019834189e-5,-1.4051648813651171e-8,5.440031193610353e-4,4.442130458093591e-5,-1.4125847171957948e-8,5.441294904295869e-4,4.4698775986850106e-5,-1.4198377383350764e-8,5.441851609821107e-4,4.4927902109817414e-5,-1.4259451932272639e-8,5.44192274379237e-4,4.5079042801761985e-5,-1.4300570677415424e-8,5.441825131835359e-4,4.513324877772769e-5,-1.4315854380231034e-8,5.441931678314615e-4,4.508643514283918e-5,-1.4303200161377657e-8,5.442616930190452e-4,4.495182030705989e-5,-1.4265097005812744e-8,5.444193252662113e-4,4.475992062198913e-5,-1.420891194830896e-8,5.446845113517835e-4,4.455563870804244e-5,-1.4146439051286658e-8,5.450570012046475e-4,4.439214140356481e-5,-1.4092482439868092e-8,5.455138259491807e-4,4.432123995689494e-5,-1.4062247519459378e-8,5.460091567979519e-4,4.4380529159655735e-5,-1.4067548181360422e-8,5.464806332929459e-4,4.457933352573298e-5,-1.411246534473196e-8,5.468639351101996e-4,4.488842557502628e-5,-1.41900303462031e-8,5.471137114483806e-4,4.5240836901430264e-5,-1.4282186009332701e-8,5.472228700801882e-4,4.5549104705021665e-5,-1.436459415403402e-8,5.472286408053625e-4,4.573542557700775e-5,-1.4415174862346914e-8,5.471991045330296e-4,4.576046398285103e-5,-1.4422216878027767e-8,5.47206448294467e-4,4.56349055279638e-5,-1.4387623676551349e-8,5.473019740297997e-4,4.5409058585348715e-5,-1.4324164571538933e-8,5.475045890269017e-4,4.5149831126079944e-5,-1.4249406835206891e-8,5.47803705825606e-4,4.4918876045973197e-5,-1.4180002072172085e-8,5.481698176479473e-4,4.4759851057189094e-5,-1.412830013525889e-8,5.48565692247331e-4,4.469494792163449e-5,-1.410125538583461e-8,5.489546078069922e-4,4.4727065395722936e-5,-1.4100722236229494e-8,5.493051789854964e-4,4.484400912140682e-5,-1.4124308082445898e-8,5.495938405083384e-4,4.5022613923846395e-5,-1.4166321890606745e-8,5.498062624304646e-4,4.523222436300298e-5,-1.4218687392005276e-8,5.499384595504489e-4,4.54378852388539e-5,-1.4271863647322725e-8,5.49997724894559e-4,4.560386201037831e-5,-1.4315865288538859e-8,5.500030030438457e-4,4.5697985530979016e-5,-1.434147018981161e-8,5.499839508065228e-4,4.5696843463098964e-5,-1.4341625669559141e-8,5.499779032270899e-4,4.559110119398946e-5,-1.4312908167490931e-8,5.500244181110129e-4,4.5389582007094315e-5,-1.4256724128095877e-8,5.50157883005538e-4,4.512048381923619e-5,-1.417984329569152e-8,5.503995686945172e-4,4.482844257285975e-5,-1.4093882581779136e-8,5.507511242321261e-4,4.456714389146746e-5,-1.4013561269086788e-8,5.511914791808575e-4,4.438847474538031e-5,-1.3953862718354635e-8,5.516785262955729e-4,4.43302010252111e-5,-1.3926532510634918e-8,5.521561635635225e-4,4.4404755979930705e-5,-1.3936611787065186e-8,5.525663239678071e-4,4.459220322119048e-5,-1.3979975801327925e-8,5.528642063231052e-4,4.484065587117192e-5,-1.4043007349154969e-8,5.530328973052125e-4,4.507661529127626e-5,-1.4105288308440919e-8,5.530916519570143e-4,4.522480506594574e-5,-1.4145236907282978e-8,5.530923528858961e-4,4.523202408225343e-5,-1.4147030087645297e-8,5.531031506537776e-4,4.5085084291692684e-5,-1.4105860437065999e-8,5.531855430718504e-4,4.4813819040833696e-5,-1.4028958709191986e-8,5.533755526889687e-4,4.447784879142051e-5,-1.3932084645392354e-8,5.536768815553462e-4,4.41448232435347e-5,-1.3833668292310375e-8,5.540662856310166e-4,4.387093911013423e-5,-1.3749517436350942e-8,5.545054107827476e-4,4.369036706870036e-5,-1.3689826206305373e-8,5.549526056740539e-4,4.3613801028485625e-5,-1.3658542876311258e-8,5.553711420623051e-4,4.363257224331595e-5,-1.3654223719707622e-8,5.55733434845886e-4,4.3724503286497815e-5,-1.3671440617076656e-8,5.560225166865299e-4,4.385919757848827e-5,-1.3702164569045507e-8,5.56232263778228e-4,4.400211587684637e-5,-1.3736921152732457e-8,5.563673733728169e-4,4.4117846392702796e-5,-1.376575922796316e-8,5.564433941300915e-4,4.4173372568585065e-5,-1.3779194966470485e-8,5.564864419333089e-4,4.414206095567587e-5,-1.3769317275568825e-8,5.565317072407061e-4,4.4008603643539826E-05,-1.373115531210439e-8,5.566196665612034e-4,4.377426004116058e-5,-1.3664180386757936e-8,5.567893255742785e-4,4.3460653879901505e-5,-1.3573495648336821e-8,5.5706903259323e-4,4.3109638309396154e-5,-1.3470018373719109e-8,5.574671621600434e-4,4.277713905643178e-5,-1.3369019224232388e-8,5.579663031544923e-4,4.25209069743737e-5,-1.3286905991693288e-8,5.585242506155931e-4,4.2385091814629774e-5,-1.323695369887385e-8,5.590827837639093e-4,4.238670958930531e-5,-1.322532616995296e-8,5.595820943030839e-4,4.2508928121728134e-5,-1.324879527303495e-8,5.599765436803205e-4,4.270375260425213e-5,-1.3295025360336303e-8,5.602470647653046e-4,4.290357624198227e-5,-1.3345467218010926e-8,5.604066433327727e-4,4.3038521618008536e-5,-1.3380135565607916e-8,5.604971361354452e-4,4.305496671614097e-5,-1.3382982052173816e-8,5.605778644400599e-4,4.293002467591174e-5,-1.3346289025681776e-8,5.607089623263255e-4,4.267729978794635e-5,-1.3272636519098559e-8,5.609347399582315e-4,4.234165410834814e-5,-1.3173718674744843e-8,5.61272824224999e-4,4.1984822487049506e-5,-1.3066489427049024e-8,5.617125088503604e-4,4.1667542738988164e-5,-1.2968201743518012e-8,5.622215885905281e-4,4.1434866394617e-5,-1.289219032748799e-8,5.627575830200749e-4,4.130882130901546e-5,-1.2845587660872705e-8,5.632786025023382e-4,4.1288594336048484e-5,-1.2829102735199409e-8,5.637508743402848e-4,4.135555763250854e-5,-1.2838217765699319e-8,5.641523616550949e-4,4.147987966628914e-5,-1.2864954028178306e-8,5.644734987008431e-4,4.1626480056051095e-5,-1.2899567931198906e-8,5.647164882240774e-4,4.1759528984558676e-5,-1.2931887162585448e-8,5.648942535231952e-4,4.184578296212132e-5,-1.2952297818560158e-8,5.650294889116143e-4,4.1857547900959665e-5,-1.2952577895423737e-8,5.651535715361088e-4,4.177605896823371e-5,-1.2926828568155383e-8,5.653044894483615e-4,4.159567182824132e-5,-1.287267633441649e-8,5.655225692094629e-4,4.132839759346974e-5,-1.279266224815386e-8,5.658430328778544e-4,4.100697766475647e-5,-1.2695307297663935e-8,5.662857653330005e-4,4.068344030322492e-5,-1.2594934042639526e-8,5.668451659124272e-4,4.042019197207262e-5,-1.2509327194232984e-8,5.674853336557398e-4,4.027347907363591e-5,-1.2455107328985577e-8,5.681455713211361e-4,4.027408208489247e-5,-1.244214622307206e-8,5.68756746685192e-4,4.0414004798879e-5,-1.2469513131187434e-8,5.692626340933667e-4,4.0646580039138516e-5,-1.2525133623159566e-8,5.696369955166504e-4,4.090066807453131e-5,-1.2589478046435055e-8,5.698896665275624e-4,4.110245921092196e-5,-1.2641551835441664e-8,5.700608716068607e-4,4.1195953729986446e-5,-1.2664715990718236e-8,5.702077505850598e-4,4.1155798139361454e-5,-1.2650540717421748e-8,5.703884759901265e-4,4.099042424392756e-5,-1.2600051493450478e-8,5.706483903579017e-4,4.073662588412746e-5,-1.2522583891047876e-8,5.710109691405875e-4,4.0448332338844876e-5,-1.243290518949643e-8,5.714748841309391e-4,4.0182934684654553E-05,-1.2347452802728689e-8,5.720170435890389e-4,3.9988544477136714e-5,-1.2280615128135358e-8,5.726001321744273e-4,3.9895057969472874e-5,-1.2241921421025485e-8,5.731821206679281e-4,3.991064069654339e-5,-1.2234717623019245e-8,5.737250198595423e-4,4.002343402058786e-5,-1.2256397133360156e-8,5.742009861844149e-4,4.0206784374766535e-5,-1.2299779958393722e-8,5.745952088943357e-4,4.042579305071043e-5,-1.2355009254206567e-8,5.749061274942017e-4,4.064339540438695e-5,-1.2411383146639144e-8,5.751440773201222e-4,4.0825069665894794e-5,-1.2458778726029885e-8,5.753293799587323e-4,4.094221059405223e-5,-1.2488629625521792e-8,5.754904006567578e-4,4.097477176506438e-5,-1.2494646793562146e-8,5.756615125629631e-4,4.0913864151746437e-5,-1.2473547362790684e-8,5.758803459554417e-4,4.076472695839921e-5,-1.24259847650868e-8,5.761832436211499e-4,4.0549772255380785e-5,-1.2357617600292305e-8,5.765979379808243e-4,4.0310124351701156e-5,-1.2279811549458918e-8,5.771336876089873e-4,4.010269549721812e-5,-1.2209012413795871e-8,5.777716895829274e-4,3.9989598090760646e-5,-1.2163757626176808e-8,5.784616465902294e-4,4.001937776225071e-5,-1.2159125570823381e-8,5.791308482835355e-4,4.020580099469462e-5,-1.2200322952745242e-8,5.797065295022585e-4,4.0515899636114696e-5,-1.2278907274980914e-8,5.80142457888133e-4,4.087731150446172e-5,-1.2374661952472232e-8,5.804354401798264e-4,4.120363917341638e-5,-1.2462792256088949e-8,5.806232139856671e-4,4.142456024104346e-5,-1.2522577976320966e-8,5.807671988462954e-4,4.1505812543823224e-5,-1.2543184545504214e-8,5.809309310098887e-4,4.145299058481706e-5,-1.2524943479233836e-8,5.811633911987712e-4,4.130273058000135e-5,-1.2477155055317291e-8,5.814906054594975e-4,4.110843349549538e-5,-1.241437134424403e-8,5.819145513730104e-4,4.092617541810449e-5,-1.2352610977888855e-8,5.824169208822125e-4,4.0803658015597504e-5,-1.2306198503680667e-8,5.829655041898003e-4,4.077300848955851e-5,-1.2285457641107754e-8,5.835216304790936e-4,4.08473506951388e-5,-1.2295353076190144e-8,5.840475044047213e-4,4.1020878040647856e-5,-1.2335168157344423e-8,5.845123946407954e-4,4.1271912795883656e-5,-1.2399194688289209e-8,5.848968676341912e-4,4.1568009920163966e-5,-1.247819580484653e-8,5.851947152164219e-4,4.1871931312817365e-5,-1.2561243079423654e-8,5.854127287371877e-4,4.214737362730478e-5,-1.2637501168654626e-8,5.855689082537816e-4,4.236363657066199e-5,-1.2697641820982583e-8,5.856898580934266e-4,4.2498978178316354e-5,-1.2734800220127118e-8,5.85807889067023e-4,4.254292268264029e-5,-1.2745207957826337e-8,5.859579513795578e-4,4.249795347224145e-5,-1.272871639020561e-8,5.861741086786202e-4,4.2380895742717424e-5,-1.2689360718495551e-8,5.8648484953241e-4,4.2223796026970555e-5,-1.2635890084310931e-8,5.869065735812319e-4,4.2073073991807874e-5,-1.2581801894459312e-8,5.874356319421588e-4,4.19846475120227e-5,-1.2544061137121026e-8,5.880413756125081e-4,4.201259995003142e-5,-1.2539678227518325e-8,5.886653049404993e-4,4.219108683589354e-5,-1.2580052638216501e-8,5.8923238679551e-4,4.2514839582835756e-5,-1.266480189970253e-8,5.896756386652956e-4,4.2930283800824865e-5,-1.2778839288959433e-8,5.89964101552167e-4,4.334851356362142e-5,-1.2896139522771572e-8,5.901171113360668e-4,4.367814905014522e-5,-1.298951948589008e-8,5.901947880698806e-4,4.38602737483596e-5,-1.3040992057450742e-8,5.902714285460607e-4,4.3885736496831144e-5,-1.3046861211874255e-8,5.904086373518427e-4,4.3789236335983746e-5,-1.3016096632518927e-8,5.90640488345573e-4,4.362965960038413e-5,-1.2964884842237333e-8,5.90971946441086e-4,4.34695603945582e-5,-1.2911008855333938e-8,5.913852195337234e-4,4.336092270372908e-5,-1.2869904121306538e-8,5.918485774305888e-4,4.333812126088688e-5,-1.285252461742886e-8,5.923245446952727e-4,4.3416150897318016e-5,-1.2864501648532461e-8,5.927764593066211e-4,4.359190961413261e-5,-1.2906114467297666e-8,5.931734732856898e-4,4.384714236114294e-5,-1.2972841846778543e-8,5.934942150203255e-4,4.4152466088083324e-5,-1.3056421398296158e-8,5.937291030815587e-4,4.447215885443439e-5,-1.3146311817982143e-8,5.938811933955622e-4,4.47693426906656e-5,-1.3231356330999967e-8,5.93965485886057e-4,4.5011077674093984e-5,-1.3301399351245954e-8,5.94006799600864e-4,4.5172770496475155e-5,-1.334862131885749e-8,5.940365840398179e-4,4.5241413682133494e-5,-1.336846818500244e-8,5.940891110207756e-4,4.521750624615486e-5,-1.3360212923084611e-8,5.941973595900601e-4,4.511571456359875e-5,-1.3327250246980502e-8,5.943887128092454e-4,4.4964352725929755e-5,-1.3277177720368145e-8,5.946803298205737e-4,4.480359021479988e-5,-1.3221572693952441E-08,5.950740552025116e-4,4.4681698944798734e-5,-1.3175121289205661e-8,5.955515209880322e-4,4.4648007751150914e-5,-1.3153551831570361e-8,5.960715426732222e-4,4.474149532569575e-5,-1.3169977028198143e-8,5.965733804112413e-4,4.4975795704802126e-5,-1.3229934760324216e-8,5.969897334847129e-4,4.5325368620618036e-5,-1.3326761651752678e-8,5.972695820723137e-4,4.572244176421522e-5,-1.3440440521292401e-8,5.974020923934746e-4,4.607385900358259e-5,-1.3542760448690568e-8,5.974260041454101e-4,4.6295468638069834e-5,-1.3607887991505155e-8,5.974149745012774e-4,4.63461491160932e-5,-1.3622690856111841e-8,5.974464645346873e-4,4.62408255489987e-5,-1.3590608456208522e-8,5.975733330563519e-4,4.603711609863486e-5,-1.3527729382284185e-8,5.978120949073726e-4,4.5808229996933905e-5,-1.3455010772294891e-8,5.981476506938362e-4,4.561887790575258e-5,-1.3391473757723922e-8,5.985457456463102e-4,4.551241536514983e-5,-1.3350535217826406e-8,5.989652880636257e-4,4.550820785410715e-5,-1.3339057205444769e-8,5.993671400674556e-4,4.560473672048171e-5,-1.3357888193002322e-8,5.997192571010954e-4,4.578464443118222e-5,-1.340296607210915e-8,5.999993638835912e-4,4.601975491101805e-5,-1.3466562670281527e-8,6.001963194062474e-4,4.627562551405624e-5,-1.353859250547407e-8,6.003106951839153e-4,4.651585668922163e-5,-1.3607999789540018e-8,6.003545828554706e-4,4.670640694476506e-5,-1.3664190858733449e-8,6.003504102879558e-4,4.681993271445912e-5,-1.3698426655564152e-8,6.003285040062579e-4,4.6839792267256964e-5,-1.3705039077842174e-8,6.003233654665366e-4,4.6763054815347505e-5,-1.3682318721009288e-8,6.00368980029104e-4,4.6601915443853456e-5,-1.3632979669015082e-8,6.004936892972919e-4,4.638313791509782e-5,-1.3564152706925421e-8,6.007152397239569e-4,4.6145339984406526e-5,-1.348684271745055e-8,6.010365913857648e-4,4.5934168128419516e-5,-1.3414767746104295e-8,6.014429942225124e-4,4.5795480210201754e-5,-1.3362464203894209e-8,6.019011057532637e-4,4.576653383496385e-5,-1.334252963495435e-8,6.023615895275835e-4,4.586559553492988e-5,-1.3362105344807452e-8,6.027669935205449e-4,4.608188309838632e-5,-1.3419300705541302e-8,6.030658883371729e-4,4.6370003546858796e-5,-1.350105745458068e-8,6.032312519987232e-4,4.66548633865428e-5,-1.3584497719127712e-8,6.032758091670896e-4,4.685133527899667e-5,-1.3643100300052348e-8,6.032535495762095e-4,4.6894725810143705e-5,-1.365628640799527e-8,6.03241729155245e-4,4.6767362660908595e-5,-1.3617683021674188e-8,6.033108166392385e-4,4.65049510596044e-5,-1.3537085025814027e-8,6.034993182490741e-4,4.617895985207165e-5,-1.3435213551070888e-8,6.038060843341433e-4,4.5867317225684895e-5,-1.3335114749071355e-8,6.041994185155103e-4,4.563018257654167e-5,-1.3255104395874068e-8,6.046332663829588e-4,4.549926714185694e-5,-1.3205572436516151e-8,6.05061438746373e-4,4.5478931464839044e-5,-1.3189054107180226e-8,6.054462336936745e-4,4.555306960662015e-5,-1.3201909329785792e-8,6.05762009514742e-4,4.5692876070382345e-5,-1.3236331295070042e-8,6.059957599659084e-4,4.586321651672058e-5,-1.3282117826334546e-8,6.061465022300673e-4,4.6027351570760987e-5,-1.332813231699191e-8,6.062243702543427e-4,4.615066462844048e-5,-1.3363565264245378e-8,6.062495021200464e-4,4.620409516581872e-5,-1.3379104609315037e-8,6.062503718534889e-4,4.616766157689615e-5,-1.3368067825864579e-8,6.062610395188557e-4,4.6033924576426214e-5,-1.3327457601791911e-8,6.063169469718518e-4,4.581063544655485e-5,-1.3258772884036288e-8,6.064494044595206e-4,4.55215188896636e-5,-1.3168331958415403e-8,6.066795318747286e-4,4.52042881604833e-5,-1.3066866709055663e-8,6.070128998625647e-4,4.490545427349359e-5,-1.2968213330564991e-8,6.074363111856063e-4,4.467226793872749e-5,-1.2887087372606102e-8,6.079179098524724e-4,4.4543009907630994e-5,-1.2836174421477544e-8,6.084112436310817e-4,4.453736700212919e-5,-1.282297992625794e-8,6.08863370461571e-4,4.464886329443632e-5,-1.2847073663286673e-8,6.092264758703546e-4,4.4841679024146196e-5,-1.289860746681526e-8,6.094712937410751e-4,4.505445305432866e-5,-1.2959127922180999e-8,6.095987972448405e-4,4.521292039621171e-5,-1.3005410854173592e-8,6.096448764943399e-4,4.5250510079934645e-5,-1.3016030794821033e-8,6.096730138384927e-4,4.513114561506076e-5,-1.2978711001202054e-8,6.097545631549566e-4,4.486402580498518e-5,-1.2895124516848801e-8,6.099439852908066e-4,4.450134061490781e-5,-1.2780348513948726e-8,6.102610819546051e-4,4.4118743907326676e-5,-1.265702267633818e-8,6.106884949894511e-4,4.378880296374916e-5,-1.2547376438516559e-8,6.111831302385094e-4,4.356052924504412e-5,-1.2467023709897674e-8,6.116930853079845e-4,4.3451843285146805e-5,-1.2422507196552202e-8,6.121718091847651e-4,4.3453283807383274e-5,-1.2412110270198072e-8,6.125859229567852e-4,4.3537061943772174e-5,-1.242828767855344e-8,6.129174051327997e-4,4.3666315988779066e-5,-1.2460290569013057e-8,6.131625421240779e-4,4.380214478201701e-5,-1.249629588729844e-8,6.133297797994605e-4,4.390824915390768e-5,-1.2524935334363993e-8,6.134376059320164e-4,4.395405443660182e-5,-1.2536392208869133e-8,6.135126429920539e-4,4.391729178049016e-5,-1.2523285610369912e-8,6.135875232541355e-4,4.37866565556534e-5,-1.248151062142838e-8,6.136978474050366e-4,4.3564553195397556e-5,-1.2411078877572878e-8,6.138776204707606e-4,4.3269171658970975e-5,-1.2316794930864575e-8,6.141531157431434e-4,4.293451537346142e-5,-1.2208394276352459e-8,6.145360882992824e-4,4.260690395661579e-5,-1.2099680577646451e-8,6.150183068876578e-4,4.233718420343913e-5,-1.2006354865178858e-8,6.155698862543469e-4,4.216944569007125e-5,-1.194266561911202e-8,6.161432780116315e-4,4.212893829735594e-5,-1.191760894514987e-8,6.166829962369822e-4,4.221304211145604e-5,-1.1931838226690434e-8,6.171390028809723e-4,4.2388733189199025e-5,-1.1976435073662864e-8,6.174801786565707e-4,4.2598204728411776e-5,-1.2034228597516467e-8,6.177039713164523e-4,4.2771969148489644e-5,-1.2083631887323418e-8,6.178390324477566e-4,4.284658717591776e-5,-1.2104190944765916e-8,6.179391490155112e-4,4.2782467541547576e-5,-1.2082381407395732e-8,6.180690499519215e-4,4.257622589977647e-5,-1.2015807665370394e-8,6.182856981106309e-4,4.2262641290182364e-5,-1.1914142478848567e-8,6.186214061728539e-4,4.1904306638940616e-5,-1.1796159869780265e-8,6.190753692770967e-4,4.1572254817565175e-5,-1.168386155567887e-8,6.196167242703293e-4,4.1325277041778395e-5,-1.1596058210408694e-8,6.201967488488639e-4,4.119594759437842e-5,-1.1543865254199268e-8,6.20764019662867e-4,4.118716574602068e-5,-1.1529328261415304e-8,6.21276549030351e-4,4.127757978552318e-5,-1.154678533548196e-8,6.217080946567695e-4,4.143120927489927e-5,-1.1585638643255654e-8,6.220491812385284e-4,4.1606888823869886e-5,-1.1633240123016763e-8,6.223049974865838e-4,4.176527688606243e-5,-1.1677161479087305e-8,6.224922388533137e-4,4.1873203335198556e-5,-1.1706688765447071e-8,6.226360955927154e-4,4.1906205539858945e-5,-1.1713717885084007e-8,6.227676718629662e-4,4.185030251602371e-5,-1.1693341505436549E-08,6.229214415278793e-4,4.1703735041523074e-5,-1.1644381723185078e-8,6.231319853664534e-4,4.147878640125714e-5,-1.1569970337746821e-8,6.234292802965761e-4,4.120299476324085e-5,-1.1478018587251494e-8,6.238323413543623e-4,4.0918246606836314e-5,-1.1381111507640178e-8,6.243421835840833e-4,4.067585345858345e-5,-1.1295177991775304e-8,6.249366570621865e-4,4.052646987191822e-5,-1.1236482520549367e-8,6.255707246045346e-4,4.0506051125566727e-5,-1.1217220872998886e-8,6.261847863392266e-4,4.062225481812146e-5,-1.124105993740093e-8,6.267202336075681e-4,4.08475845493812e-5,-1.1300642714626034e-8,6.271371716095217e-4,4.112393555640522e-5,-1.1378640363826194e-8,6.274272002337375e-4,4.137818217173511e-5,-1.1452374173663731e-8,6.276160661029025e-4,4.1543172110683946e-5,-1.1500321761911784e-8,6.277555903893943e-4,4.157642470580568e-5,-1.1508102924530854e-8,6.27908422691926e-4,4.147064598947023e-5,-1.1472061584588963e-8,6.281309101857208e-4,4.125382444025051e-5,-1.1399670417759892e-8,6.284589806615875e-4,4.0979990293322234e-5,-1.1307001676311571e-8,6.289004951050204e-4,4.071397673517665e-5,-1.1214196847662963e-8,6.294355537344494e-4,4.051475934856745e-5,-1.1140281814471427e-8,6.300239373611482e-4,4.0422039237037176e-5,-1.1098767800734435e-8,6.306167817204206e-4,4.044943019418976e-5,-1.1095165829009265e-8,6.311685570877783e-4,4.058515042629986e-5,-1.1126836428171848e-8,6.316459742628735e-4,4.079850842401508e-5,-1.1184776656645354e-8,6.320322305868174e-4,4.104897677346346e-5,-1.1256406714476454e-8,6.323269912046183e-4,4.129481071708473e-5,-1.1328374881368757e-8,6.325436800244089e-4,4.149944694038418e-5,-1.138873428162963e-8,6.327057717418874e-4,4.16353572641571e-5,-1.142829124798009e-8,6.3284320211077e-4,4.168599958414399e-5,-1.144127484924841e-8,6.329892507073682e-4,4.1646813714983565e-5,-1.1425641935138297e-8,6.331776221375067e-4,4.1525972124440285e-5,-1.1383308731724334e-8,6.334390698103364e-4,4.134505386970275e-5,-1.1320431548573354e-8,6.337968406765966e-4,4.1139068109295805e-5,-1.1247577530122925e-8,6.342606793062239e-4,4.0954382499360176e-5,-1.1179279984573037e-8,6.34820349377044e-4,4.084256691331992e-5,-1.1132243894526839e-8,6.354414692002509e-4,4.084884439949683e-5,-1.1121682761778917e-8,6.360679001502076e-4,4.0996568100376256e-5,-1.1156195968997953e-8,6.366339468110234e-4,4.1273455162251384e-5,-1.1233067444498262e-8,6.370847593082296e-4,4.162814226045832e-5,-1.1336844237008164e-8,6.37396720814852e-4,4.1982708229566924e-5,-1.1443112874876232e-8,6.375870858518857e-4,4.225789061658065e-5,-1.1526456467575253e-8,6.377074182492132e-4,4.239935949578947e-5,-1.1568844891267493e-8,6.378247532323368e-4,4.239301187350808e-5,-1.1564617122042744e-8,6.380001550354765e-4,4.226467189936685e-5,-1.1520634437041544e-8,6.382730696351323e-4,4.20678159364482e-5,-1.145275407366425e-8,6.386547983664781e-4,4.186642207611976e-5,-1.1380759726833166e-8,6.391301491825187e-4,4.1718969727590826e-5,-1.1323481608403951e-8,6.396645134501095e-4,4.16669354931265E-05,-1.1295058824572489e-8,6.402135211432802e-4,4.1728883630486846e-5,-1.130272523179324e-8,6.407329313863037e-4,4.189994975384543e-5,-1.1346210158588048e-8,6.411869273337647e-4,4.215579668992807e-5,-1.141864418294653e-8,6.415535317098374e-4,4.245951292741821e-5,-1.1508603446175233e-8,6.418266451670236e-4,4.276953906141313e-5,-1.160268944345754e-8,6.420150711981394e-4,4.3046889911181794e-5,-1.168800792468656e-8,6.42139481568027e-4,4.326056338850396e-5,-1.1754073581974093e-8,6.422284650134046e-4,4.3390762964130205e-5,-1.1793939423120785e-8,6.423145863944254e-4,4.343025232088572e-5,-1.1804643333497793e-8,6.424308611712833e-4,4.3384560725109035e-5,-1.1787259369334247e-8,6.426075271147033e-4,4.327164998942055e-5,-1.1746830998873365e-8,6.428686772623222e-4,4.312121499188235e-5,-1.1692290186969063e-8,6.43228211111064e-4,4.297319789412587e-5,-1.163620160738782e-8,6.436849034127897e-4,4.2874338512484316e-5,-1.1593853762600689e-8,6.442175178239869e-4,4.287106863696716e-5,-1.1581024865378009e-8,6.447826241944376e-4,4.299769946587701e-5,-1.1610003778983072e-8,6.453192106631316e-4,4.326148989808878e-5,-1.1684410461728622e-8,6.457633643151136e-4,4.363072674477005e-5,-1.179495428359945e-8,6.460709780358178e-4,4.403539258500074e-5,-1.1919425251124777e-8,6.46238269440531e-4,4.438654427814625e-5,-1.202896701159812e-8,6.463067360377512e-4,4.460863357575101e-5,-1.2098638955452586e-8,6.463473522053487e-4,4.466782983677177e-5,-1.2116629130642991e-8,6.464328198700985e-4,4.458091988511223e-5,-1.2087172530117929e-8,6.466134080396352e-4,4.440296244483021e-5,-1.2026767218001455e-8,6.469062893985017e-4,4.420432212394621e-5,-1.1957162905655501e-8,6.472980673486538e-4,4.4049415375376975e-5,-1.1898899064049858e-8,6.477545569824074e-4,4.398348465637827e-5,-1.1867178141227173e-8,6.482321283936542e-4,4.402769158632383e-5,-1.1870077472484313e-8,6.486874451684293e-4,4.4180110616365914e-5,-1.190843181001741e-8,6.490845942283705e-4,4.442004791255551e-5,-1.1976767655848106e-8,6.493996674170178e-4,4.471399475420608e-5,-1.2064930829832403e-8,6.496230132730473e-4,4.502224997790057e-5,-1.2160170877601224e-8,6.497593165315699e-4,4.530541463222377e-5,-1.2249376594925378e-8,6.498257985589669e-4,4.5530023897967826e-5,-1.2321106524374785e-8,6.498490150835266e-4,4.5672787320462324e-5,-1.2367125184429808e-8,6.49860849248668e-4,4.5723111388483726e-5,-1.2383285624306336e-8,6.498943459428724e-4,4.56838734642481e-5,-1.2369777794004631e-8,6.499798483583396e-4,4.5570805788698724e-5,-1.2330940194194202e-8,6.50141540921297e-4,4.5410946737608354e-5,-1.2274858062634918e-8,6.50394252361549e-4,4.524034632505981e-5,-1.2212820673742356e-8,6.507402898474811e-4,4.510081644081227e-5,-1.2158498221920027e-8,6.511662941424877e-4,4.503501619399875e-5,-1.2126476181320007e-8,6.516409652377725e-4,4.507883196177047e-5,-1.2129687005367259e-8,6.521158333795178e-4,4.525065636203942e-5,-1.2175577965498676e-8,6.525322031476455e-4,4.553941364164363e-5,-1.2261726884082065e-8,6.528365381010586e-4,4.5896913451435045e-5,-1.2372957541494924e-8,6.53001864278318e-4,4.6243075736359524e-5,-1.2482966177543175e-8,6.530450153429226e-4,4.6489294263523875e-5,-1.2562182212005331e-8,6.530262302326049e-4,4.657300931178719e-5,-1.2589338662501737e-8,6.530266241761063e-4,4.6484341852986244e-5,-1.2560253186849565e-8,6.531153745404709e-4,4.626789168937222e-5,-1.248839206681805e-8,6.533259500794602e-4,4.600025166059354e-5,-1.2397689341809364e-8,6.536518626923442e-4,4.5759473698595974e-5,-1.2312978138197302e-8,6.540578644141293e-4,4.56028117197643e-5,-1.2253084886290816e-8,6.544960449519266e-4,4.555825704891566e-5,-1.222809841334969e-8,6.549192256583115e-4,4.562646405711048e-5,-1.2239671643138295e-8,6.552892641813089e-4,4.578752220519903e-5,-1.2282737836356728e-8,6.555809511761707e-4,4.6008638879196065e-5,-1.23475952409882e-8,6.557831063329746e-4,4.625097547136351e-5,-1.2421941128098137e-8,6.558981448308248e-4,4.647540239116749e-5,-1.2492798538365653e-8,6.559406151232579e-4,4.664739366488725e-5,-1.2548313680324879e-8,6.55934795368779e-4,4.674108669115587e-5,-1.2579299722569738e-8,6.559114262674878e-4,4.674234926529412e-5,-1.258037528172128e-8,6.559037475636952e-4,4.6650576798607184e-5,-1.2550589153337167e-8,6.559431799480559e-4,4.647890047352641e-5,-1.2493483386171588e-8,6.560551490320222e-4,4.625272895401807e-5,-1.241665830734056e-8,6.562554736211841e-4,4.6006843480568736e-5,-1.2330965549949725e-8,6.565475621712678e-4,4.5781298533340715e-5,-1.224938677601268e-8,6.569205673771478e-4,4.561626701972796e-5,-1.2185538559539806e-8,6.573487109405446e-4,4.554580590585966e-5,-1.2151659149246088e-8,6.577924153502072e-4,4.5590415220543125e-5,-1.215594635662814e-8,6.58202593113294e-4,4.574881097857109e-5,-1.2199412084801173e-8,6.585297262397721e-4,4.59909687918636e-5,-1.2273096298199133e-8,6.587382425042407e-4,4.62568085760598e-5,-1.2357324481940705e-8,6.588231495329708e-4,4.646624084061321e-5,-1.2425073606254522e-8,6.588204978599106e-4,4.65431768960108e-5,-1.2450244405357208e-8,6.588012287440477e-4,4.644637290291428e-5,-1.2418191579088436e-8,6.588458419334591e-4,4.61899779128904e-5,-1.2332619928155143e-8,6.590119357198074e-4,4.5838877755827045e-5,-1.2214031205022718e-8,6.593137391720427e-4,4.548068499544168e-5,-1.2090617955505468e-8,6.597236153319567e-4,4.519227164557173e-5,-1.1987544773090963e-8,6.601895628610029e-4,4.5018724180246425e-5,-1.1920237507966108e-8,6.606554423138694e-4,4.49697296954195e-5,-1.189308702067798e-8,6.610749674083071e-4,4.502738150794323e-5,-1.1901620274760557e-8,6.614178803084616e-4,4.515738862713096e-5,-1.1935726383931564e-8,6.616706357616994e-4,4.531887849385159e-5,-1.1982572911828448e-8,6.61834447382716e-4,4.547133072107415e-5,-1.2028824379413137e-8,6.6192264137107e-4,4.5579126378920714e-5,-1.2062283892577649e-8,6.619580115031964e-4,4.561475770029697e-5,-1.2073180904243843e-8,6.619700433900955e-4,4.556135838574398e-5,-1.2055197467963607e-8,6.61991699576438e-4,4.5414661343623503e-5,-1.200620365179172e-8,6.620555712945934e-4,4.51840896179602e-5,-1.1928622796913211e-8,6.621894741458482e-4,4.489240920507422e-5,-1.182931385336294e-8,6.624119923538018e-4,4.457342997377879e-5,-1.1718880084197724e-8,6.627287685916333e-4,4.4267655432898346e-5,-1.1610397059841187e-8,6.631303288208212e-4,4.401622188040044e-5,-1.1517614629584648e-8,6.635920520441031e-4,4.3853814799379214e-5,-1.1452739383809711e-8,6.640766309640293e-4,4.3801500136949246e-5,-1.1423990223408127e-8,6.645391547065707e-4,4.3860465762502585e-5,-1.1433213609765761e-8,6.649348907757294e-4,4.400781803244625e-5,-1.1474022268078109e-8,6.652295738743438e-4,4.4196208170768975e-5,-1.1531237312247409e-8,6.654109062286146e-4,4.435975285734818e-5,-1.1582666541464982e-8,6.654978651706966e-4,4.442827675775156e-5,-1.1603994416442983e-8,6.655421492594667e-4,4.434891282437948e-5,-1.1576365369570233e-8,6.656163939754637e-4,4.410816482066763e-5,-1.1494114352982963e-8,6.657897957674164e-4,4.3742356818358154e-5,-1.136844192019311e-8,6.661014873919342e-4,4.332714263267976e-5,-1.1223980436229123e-8,6.66546435586102e-4,4.294919512763321e-5,-1.1089453851181167e-8,6.670813088959861e-4,4.267547632709114e-5,-1.0987569771282318e-8,6.676444956798761e-4,4.2535713727573955e-5,-1.0929181332560628e-8,6.681774843805674e-4,4.252258156620681e-5,-1.0913107238000703e-8,6.686384044883153e-4,4.260325002735994e-5,-1.0929587800350869e-8,6.690062161390295e-4,4.2733346818073974e-5,-1.0964592948012124e-8,6.692787368457985e-4,4.286787118068754e-5,-1.1003310653399214e-8,6.694682707915127e-4,4.296777011126571e-5,-1.1032406940396475e-8,6.695972389198812e-4,4.300322240539698e-5,-1.1041321064106932e-8,6.696946149272839e-4,4.295523829967347e-5,-1.1023008875669534e-8,6.697929196037282e-4,4.2816698354687566e-5,-1.0974419442589062e-8,6.699251733474295e-4,4.2593196764431914e-5,-1.0896807753560433e-8,6.701212865700194e-4,4.230341044442153e-5,-1.0795842637994127e-8,6.704037174690174e-4,4.1978221761531796e-5,-1.0681328919295532e-8,6.707828559139265e-4,4.1657672615155404e-5,-1.0566288547495148e-8,6.712532690016723e-4,4.138524242901553e-5,-1.0465216530512158e-8,6.717922865944109e-4,4.119981360746378e-5,-1.0391550497627238e-8,6.723621835534646e-4,4.112674104581725e-5,-1.0354712996658229e-8,6.729163674503193e-4,4.117028254115718e-5,-1.0357404924622589e-8,6.734087601805087e-4,4.1309743555585105e-5,-1.0393953428156289e-8,6.738045432664134e-4,4.150094656252346e-5,-1.0450378613876328e-8,6.740899326696811e-4,4.168357203370962e-5,-1.0506544084907395e-8,6.742784623792691e-4,4.1793849405908306e-5,-1.0540362360195925e-8,6.744112537778521e-4,4.178074134045985e-5,-1.053345924363471e-8,6.745493044657425e-4,4.1621948675312874e-5,-1.0476951591107518e-8,6.747577135709221e-4,4.1334207987166106e-5,-1.0375304924468307e-8,6.750854372839487e-4,4.097200972504231e-5,-1.0246168788815136e-8,6.755482329271165e-4,4.0612262569480024e-5,-1.0115334350837037e-8,6.761231653952755e-4,4.032957409188221e-5,-1.0008413784011982e-8,6.767578521833027e-4,4.017301604488647e-5,-9.94290139609733e-9,6.773894310269758e-4,4.015465619698559e-5,-9.924065754328441e-9,6.779636072244319e-4,4.025271194279116e-5,-9.945684323589636e-9,6.784462992592076e-4,4.042426218751692e-5,-9.994032077050076e-9,6.788262531519046e-4,4.0619750895181834e-5,-1.0052621713449427e-8,6.791114670866537e-4,4.0793953317949755e-5,-1.0105937498144301e-8,6.793233103813246e-4,4.091197852871128e-5,-1.0141630257049476e-8,6.794909850969935e-4,4.0951453051865014e-5,-1.01514585939184e-8,6.7964728168145e-4,4.090274064307937e-5,-1.0131510062344522e-8,6.798254076015645e-4,4.076859742149239e-5,-1.0082138915684628e-8,6.800561699820016e-4,4.0563850495158245e-5,-1.0007849266961698e-8,6.8036477449427e-4,4.031492566409186e-5,-9.917132870207206e-9,6.807668440871827e-4,4.0058407100975396e-5,-9.822042726828585e-9,6.812639721347429e-4,3.98374389784475e-5,-9.737104678895134e-9,6.818400995093161e-4,3.9695020030860256e-5,-9.677186556046806e-9,6.824608377364019e-4,3.966437272967973e-5,-9.65429089058683e-9,6.830778514977682e-4,3.975846050622824e-5,-9.673896804332269e-9,6.8363893699842e-4,3.996251016407234e-5,-9.732153955509115e-9,6.841017372567231e-4,4.023361206932423e-5,-9.815394137449953e-9,6.844466228191916e-4,4.05092582535884e-5,-9.902727164968086e-9,6.846838738110617e-4,4.072297495515305e-5,-9.971213593928136e-9,6.848523051199315e-4,4.082220466885166e-5,-1.000201594026922e-8,6.850095982123903e-4,4.07828469698932e-5,-9.98560223372568e-9,6.852171873960667e-4,4.0616222783899834e-5,-9.924483469796086e-9,6.855238737488718e-4,4.036653532224773e-5,-9.832728989987601e-9,6.859526224257744e-4,4.00993290741107e-5,-9.732322816114245e-9,6.86494446675017e-4,3.988386503340198e-5,-9.647264291981038e-9,6.871115650576727e-4,3.977452661168896e-5,-9.597109977300679e-9,6.877489646437295e-4,3.979728759741124e-5,-9.592045225736865e-9,6.883501673843535e-4,3.994563772478752e-5,-9.631095222420986e-9,6.888714062386018e-4,4.018638516815171e-5,-9.70376889018204e-9,6.89289773006254e-4,4.047168422173579e-5,-9.79400284884246e-9,6.896042371432542e-4,4.075196513064055e-5,-9.884614283434994e-9,6.898314601928995e-4,4.0985699460782386e-5,-9.960814485912439e-9,6.899994707481199e-4,4.114457896454388e-5,-1.0012195088317796e-8,6.901416346331935e-4,4.1214864630885974e-5,-1.0033353714839723e-8,6.902920197616812e-4,4.119656099349532e-5,-1.0023683572674945e-8,6.904821165138293e-4,4.1101881144250444e-5,-9.986848350330236e-9,6.907382638650003e-4,4.09537582206849e-5,-9.930264533573738e-9,6.910790024415842e-4,4.0784383529647454e-5,-9.864646068425661e-9,6.915118287645734e-4,4.06330723894299e-5,-9.803388502339166e-9,6.92029478921974e-4,4.054225759251511e-5,-9.761330963984282e-9,6.926069404711696e-4,4.055042383207215e-5,-9.752392841996608e-9,6.93201577440324e-4,4.068187369966381e-5,-9.785963135087253e-9,6.937591702126083e-4,4.0935603885594335e-5,-9.86281521804032e-9,6.942270330740719e-4,4.1278405821690475e-5,-9.972398042232453e-9,6.945712632534799e-4,4.164815702606528e-5,-1.0093706764041374e-8,6.947908016139201e-4,4.196965425274466e-5,-1.0200641875276863e-8,6.949204861200494e-4,4.217816671559534e-5,-1.027018519806173e-8,6.950204845917e-4,4.2240436893643125e-5,-1.0289782773011855e-8,6.951568783835051e-4,4.2163991349505506e-5,-1.0260761389728324e-8,6.953820071952732e-4,4.1992296890793167e-5,-1.0196951522017627e-8,6.957214881833488e-4,4.1789873918597023e-5,-1.0119904592446122e-8,6.961704254910497e-4,4.162399139921554e-5,-1.0052855248199617e-8,6.966977464138914e-4,4.154851515582117e-5,-1.0015196278929336e-8,6.972559483814732e-4,4.159322790104321e-5,-1.0018554243928807e-8,6.977931798100247e-4,4.1759927789965654e-5,-1.006500579411969e-8,6.982647541256812e-4,4.202510292476047e-5,-1.0147554437825793e-8,6.986416504509654e-4,4.23477429452799e-5,-1.0252547579380231e-8,6.989144432942709e-4,4.267979568978907e-5,-1.0363254734980224e-8,6.990924889111561e-4,4.297633660441667e-5,-1.046354978955787e-8,6.991995765864698e-4,4.3203125469473766e-5,-1.0540778184890215e-8,6.992679525856361e-4,4.334055988722916e-5,-1.0587341630078698e-8,6.993324737511327e-4,4.338433788379723e-5,-1.0601042222300012e-8,6.994259422448656e-4,4.33439373540044e-5,-1.0584573537885036e-8,6.995758178822197e-4,4.324016014019141e-5,-1.0544655239898046e-8,6.998018846283525e-4,4.310255497934784e-5,-1.049116419505745e-8,7.001142366953494e-4,4.296687167505949e-5,-1.0436353487376878e-8,7.00511078834245e-4,4.28720812612912e-5,-1.0393964239501379e-8,7.009763426032131e-4,4.285598693783195e-5,-1.0377799290857615e-8,7.014781075470884e-4,4.294835757893481e-5,-1.0399281482030315e-8,7.01969994354906e-4,4.316142500987284e-5,-1.0463892261942207e-8,7.023982919714376e-4,4.3479848296496525E-05,-1.0567290124078954e-8,7.027162843902773e-4,4.385542505735799e-5,-1.0693127635927223e-8,7.029027821209852e-4,4.42135354664673e-5,-1.0815191406563102e-8,7.029758681401383e-4,4.44744496722845e-5,-1.0904987723913586e-8,7.029914590549362e-4,4.458263269534113e-5,-1.0942205658178163e-8,7.030240973959722e-4,4.4528749813272105e-5,-1.0922540209312683e-8,7.031394395161471e-4,4.435182467687107e-5,-1.0858532246731884e-8,7.033730001998939e-4,4.412187581728143e-5,-1.0773708033050758e-8,7.037236525719877e-4,4.391449186565976e-5,-1.0694038600834027e-8,7.041603691418619e-4,4.378961991431415e-5,-1.0640801646843702e-8,7.046353875274154e-4,4.378031259963003e-5,-1.0626632482199593e-8,7.050976569019387e-4,4.3890906265389334e-5,-1.0654550090175343e-8,7.055033512381783e-4,4.4101463726791514e-5,-1.0719012226212606e-8,7.058225832089542e-4,4.4375368649487437e-5,-1.0808140470310517e-8,7.060425584939559e-4,4.4667972118194066e-5,-1.0906544945457309e-8,7.061676354241381e-4,4.4934992978476056e-5,-1.0998328320161188e-8,7.062167941862384e-4,4.513963638656883e-5,-1.1069817830506132e-8,7.062192461146077e-4,4.525758094198104e-5,-1.1111586225981603e-8,7.062091365135665e-4,4.527941172781372e-5,-1.1119497270185845e-8,7.062203187254132e-4,4.521057587191405e-5,-1.1094762027694266e-8,7.062819845440831e-4,4.5069391812404094e-5,-1.1043233702560278e-8,7.06415505665796e-4,4.488393907460559e-5,-1.0974313413837001e-8,7.066323612634319e-4,4.4688540962570335e-5,-1.089978106738531e-8,7.069327966070445e-4,4.452012245181196e-5,-1.0832652650027417e-8,7.073048809528734e-4,4.4414291049901125e-5,-1.0785940512482935e-8,7.077239303819673e-4,4.4400593182769026e-5,-1.0771010723654536e-8,7.081530282662858e-4,4.449628480384157e-5,-1.0795218004047385e-8,7.08546309372772e-4,4.4698728013663695e-5,-1.0858860998889045e-8,7.088570074624559e-4,4.497837061391854e-5,-1.0952277710884579e-8,7.090511764918637e-4,4.527680031930541e-5,-1.1054882078469456e-8,7.091242875412201e-4,4.551603875633128e-5,-1.1138494306429178e-8,7.091120498076681e-4,4.562208888687946e-5,-1.117598713005094e-8,7.090846177539748e-4,4.5555482629709526e-5,-1.1152408119707443e-8,7.091216217038918e-4,4.533143658656323e-5,-1.1072207380177586e-8,7.092802036001695e-4,4.501504148607371e-5,-1.0957523637321026e-8,7.095747795025035e-4,4.469379194735881e-5,-1.0838617797559788e-8,7.099779924341384e-4,4.4444886939645104e-5,-1.0742641317809363e-8,7.104372322708001e-4,4.431417690490606e-5,-1.0686428868332595e-8,7.108944427121056e-4,4.43116119214771e-5,-1.067478403156329e-8,7.113007184917924e-4,4.441806234799192e-5,-1.0702470480375884e-8,7.11623679367533e-4,4.459632083759559e-5,-1.0757592826290675e-8,7.118492538786992e-4,4.480161570626685e-5,-1.0824953711808661e-8,7.11980233791131e-4,4.4989876558258635e-5,-1.0888886188899312e-8,7.120332870788396e-4,4.512373743613871e-5,-1.093553525218388e-8,7.120351830951165e-4,4.517671189813642e-5,-1.0954618391336977e-8,7.12018506314901e-4,4.513573773315998e-5,-1.094058962873492e-8,7.12017114163592e-4,4.500208629716573e-5,-1.0893112309757543e-8,7.120616914124563e-4,4.47905968840482e-5,-1.0816818974571956e-8,7.121758530794824e-4,4.452730583824109e-5,-1.0720449941183935e-8,7.12373225808455e-4,4.424582850797638e-5,-1.0615582948149321e-8,7.126557056969058e-4,4.3983020894276823E-05,-1.0515185840291802e-8,7.130128748690027e-4,4.377430370445033e-5,-1.0432097453514521e-8,7.134225026408814e-4,4.364884043657226e-5,-1.0377410518766734e-8,7.138521296875519e-4,4.3624612316220915e-5,-1.0358662531311387e-8,7.142621087199356e-4,4.370335181858926e-5,-1.0377769717223068e-8,7.146110340123279e-4,4.386580901383108e-5,-1.0428929632440784e-8,7.148644843579355e-4,4.406916289330847e-5,-1.0497305281474699e-8,7.150068229220568e-4,4.424991700273873e-5,-1.0559887164612516e-8,7.150530524366479e-4,4.4336178298709344e-5,-1.0590042672540263e-8,7.15053734810595e-4,4.42704276374271e-5,-1.056605287956476e-8,7.150846291680763e-4,4.403576931514396e-5,-1.0480847359923442e-8,7.152198511851885e-4,4.3670120179829765e-5,-1.0347183403858284e-8,7.155008744882165e-4,4.325529287265698e-5,-1.019372183871818e-8,7.159202063701489e-4,4.288442453165478e-5,-1.0053486378649688e-8,7.164288382090401e-4,4.262714020159595e-5,-9.95164253828637e-9,7.169595712173114e-4,4.2511112636761016e-5,-9.899008498589871e-9,7.174506599694499e-4,4.2524020942925516e-5,-9.892540841677029e-9,7.178598144621892e-4,4.2627404619268514e-5,-9.91983987587705e-9,7.181678446769699e-4,4.27721963699476e-5,-9.964266310840572e-9,7.183759126586623e-4,4.291045343841636e-5,-1.0008908875743132e-8,7.18500405594647e-4,4.300234497131943e-5,-1.0039122755238085e-8,7.185677828556197e-4,4.30196320106107e-5,-1.0044007543963475e-8,7.186101042079086e-4,4.294717412168661e-5,-1.001723346601736e-8,7.186610533817944e-4,4.278335317154585e-5,-9.957406051808767e-9,7.18752168284341e-4,4.253964376045135e-5,-9.867997924772748e-9,7.189091853091514e-4,4.2239192867652126e-5,-9.756827287293615e-9,7.191486680453425e-4,4.191412441845834e-5,-9.635062646698978e-9,7.194753833185204e-4,4.1601472907260915e-5,-9.515794554155215e-9,7.198809710473828e-4,4.1338056243998875e-5,-9.412302783608438e-9,7.203442861506658e-4,4.115483206636226e-5,-9.33615368049298e-9,7.208335901116579e-4,4.107136650050428e-5,-9.295250483512817e-9,7.21310582686931e-4,4.109113767836152e-5,-9.292009746461441e-9,7.217361374829578e-4,4.1198376722348027e-5,-9.321908690989147e-9,7.220776248483091e-4,4.135721706930838e-5,-9.372781644989014e-9,7.223174798075731e-4,4.151444248885548e-5,-9.42550576306746e-9,7.224616572947125e-4,4.160760778234224e-5,-9.456878589667109e-9,7.225448756233372e-4,4.157965702183735e-5,-9.445137808270311e-9,7.226279081272899e-4,4.139838628719147e-5,-9.377400707335786e-9,7.22782831518834e-4,4.107397411941798e-5,-9.256348015631858e-9,7.230679109607896e-4,4.066348908937088e-5,-9.10200491377539e-9,7.235030324353299e-4,4.025454393631868e-5,-8.94585670514005e-9,7.240604349135902e-4,3.993307278447048e-5,-8.819235976789946e-9,7.246770474161983e-4,3.9752475639384204e-5,-8.74220271896425e-9,7.25280167562206e-4,3.972032945361145e-5,-8.71863631377646e-9,7.258112499168408e-4,3.980545137139982e-5,-8.738490452126625e-9,7.262379795707331e-4,3.995588791311808e-5,-8.783922245220665e-9,7.265545698200255e-4,4.011659749582939e-5,-8.83541706972929e-9,7.267755339873465e-4,4.024105833074878e-5,-8.875936197311278e-9,7.269279845271264e-4,4.029652987094112e-5,-8.892976574019021e-9,7.270451450548466e-4,4.026516750216042e-5,-8.879235354411228e-9,7.271616327638609e-4,4.014326976173892e-5,-8.832575722188413e-9,7.273099551577129e-4,3.993996905439593e-5,-8.755682817923396e-9,7.275175140387404e-4,3.9675705000669275e-5,-8.65552457776656e-9,7.278037036096325e-4,3.938023732409923e-5,-8.542589315450922e-9,7.281770882665271e-4,3.9089662899162196e-5,-8.429786504232964e-9,7.286331360591269e-4,3.884197223268564e-5,-8.330888585721539e-9,7.291533677555678e-4,3.867120217350354e-5,-8.258515599405508e-9,7.297067738756757e-4,3.860090558086704e-5,-8.221844583454592e-9,7.302539666578742e-4,3.8638182704821905e-5,-8.224400957513714e-9,7.307538962269374e-4,3.876983049784128e-5,-8.262452625865695e-9,7.311722092434422e-4,3.896204742743471e-5,-8.324571705863522e-9,7.314897527645678e-4,3.9164524285314036e-5,-8.3927927962959e-9,7.317094414493923e-4,3.931904431090589e-5,-8.445566122962981e-9,7.318594845103638e-4,3.937201425400375e-5,-8.462392890762826e-9,7.319908066651358e-4,3.928917259530832e-5,-8.42948659848983e-9,7.321669790530052e-4,3.906885058053107e-5,-8.345010771919948e-9,7.324469928605998e-4,3.8748281868431985e-5,-8.22172192559327e-9,7.328651675913713e-4,3.839739804730499e-5,-8.084889760603431e-9,7.334166535442571e-4,3.809868218835139e-5,-7.964969302770367e-9,7.340570593855317e-4,3.791967584824037e-5,-7.88746795733556e-9,7.347180158889726e-4,3.789093829132095e-5,-7.864694610367329e-9,7.35330978895752e-4,3.799999059049531e-5,-7.893257941684946e-9,7.358473549973659e-4,3.820188625552753e-5,-7.95762224232136e-9,7.36247320859895e-4,3.8438037090302746e-5,-8.036768609057542e-9,7.365375874964547e-4,3.865343008418449e-5,-8.110432460280896e-9,7.367432165561168e-4,3.880698844533339e-5,-8.163005946748622e-9,7.368986354207467e-4,3.8875061863166875e-5,-8.185035831936871e-9,7.370405983510341e-4,3.885061218849014e-5,-8.173156102939069e-9,7.372035548293182e-4,3.8740714185469477e-5,-8.129326522098361e-9,7.374166923744471e-4,3.8563901864775714e-5,-8.05990590565618e-9,7.377017025310008e-4,3.834777065479802e-5,-7.974743340507008e-9,7.38070622142274e-4,3.8126512150255426e-5,-7.886238130470689e-9,7.385236155784789e-4,3.7937678633434624e-5,-7.80816935910351e-9,7.390471872462534e-4,3.7817479218706066e-5,-7.754041850862354e-9,7.39613896733862e-4,3.779443638936219e-5,-7.734832514708064e-9,7.401848806728716e-4,3.788221163124379e-5,-7.75635096994411e-9,7.407160397257579e-4,3.807351780711525e-5,-7.816863716772319e-9,7.411675017627108e-4,3.83377342940748e-5,-7.905958120875292e-9,7.415142919555773e-4,3.8624442718095306e-5,-8.005552813609206e-9,7.417549191637427e-4,3.887335159084064e-5,-8.093346705012602e-9,7.419146387750976e-4,3.902868594401002e-5,-8.14809060536792e-9,7.420415466924796e-4,3.9054260051663074e-5,-8.155305505607456e-9,7.421957712450767e-4,3.894484020912841e-5,-8.111780096870276e-9,7.424340938914088e-4,3.873006125504485e-5,-8.02737573183699e-9,7.42793899355561e-4,3.846880194086285e-5,-7.923264854219435e-9,7.432812620141698e-4,3.823437454532318e-5,-7.82664187542525e-9,7.438677441412036e-4,3.809405520022208e-5,-7.763143694430137e-9,7.444981839003461e-4,3.808955287654943e-5,-7.749409650064826e-9,7.451073361538792e-4,3.822586805072566e-5,-7.788599612458683e-9,7.456389114710405e-4,3.847282903416642e-5,-7.870587084328902e-9,7.460595325375159e-4,3.8777620572790256e-5,-7.97634017132848e-9,7.463633344203971e-4,3.90818258416466e-5,-8.084164382373755e-9,7.465679154850866e-4,3.9335967587656355e-5,-8.175197120055171e-9,7.467056704916095e-4,3.950769387356267e-5,-8.236653653676395e-9,7.468147802209882e-4,3.958364471163843e-5,-8.262748556136644e-9,7.469323302937862e-4,3.956728801685668e-5,-8.25406326448367e-9,7.470900224543724e-4,3.947522924674709e-5,-8.21625230612436E-09,7.473117786206921e-4,3.9333574246693434e-5,-8.15868872939971e-9,7.476122444451707e-4,3.917483364161524e-5,-8.093285230637837e-9,7.479954258414936e-4,3.9035053263447094e-5,-8.033430521419e-9,7.484532171378763e-4,3.8950407831258895e-5,-7.992775209673987e-9,7.489642810589979e-4,3.895244597740534e-5,-7.983527194781351e-9,7.494944525688141e-4,3.906165830601274e-5,-8.014060469529422e-9,7.500002746529996e-4,3.9280174203610924e-5,-8.086078232861302e-9,7.504369055959056e-4,3.9586013083436254e-5,-8.192238951203957e-9,7.507699029120727e-4,3.993257848288867e-5,-8.31570446363603e-9,7.509875768828624e-4,4.025651618290501e-5,-8.432888245201967e-9,7.511084739632404e-4,4.049377684511111e-5,-8.519412651981377e-9,7.511792950330379e-4,4.059903216808652e-5,-8.557453460506901e-9,7.51262580818493e-4,4.056073182061699e-5,-8.541545996409175e-9,7.514184424281146e-4,4.040549547796316e-5,-8.480474453332119e-9,7.516871944073718e-4,4.019036204144835e-5,-8.394680466844668e-9,7.520786833722089e-4,3.998634873333417e-5,-8.31041577663291e-9,7.525708694622507e-4,3.985920059382761e-5,-8.252707967838128e-9,7.531170338310043e-4,3.985300180192867e-5,-8.239147244363815e-9,7.536588526186752e-4,3.998070036708499e-5,-8.276008258796359e-9,7.541413990265233e-4,4.022342678605548e-5,-8.357544078241255e-9,7.54525863865062e-4,4.05380201242533e-5,-8.468421354961952e-9,7.547967008719969e-4,4.0869815523018587e-5,-8.588335122366214e-9,7.549619635945633e-4,4.116635887970118e-5,-8.697206288555848e-9,7.550480101612701e-4,4.1388047065979665e-5,-8.779387588935774e-9,7.550913554910073e-4,4.151357045899603e-5,-8.825967420826681e-9,7.551305842522161e-4,4.154031612162445e-5,-8.835132581061215e-9,7.552001895864037e-4,4.148139165922518e-5,-8.811164119887681e-9,7.55326828426084e-4,4.1361260126847735e-5,-8.762820923675844e-9,7.555274925687125e-4,4.12114438663705e-5,-8.70170647458801e-9,7.558087203055979e-4,4.1066871518413693e-5,-8.640891785799208e-9,7.561661037027524e-4,4.09626519740274e-5,-8.593743073534889e-9,7.565837873294337e-4,4.0930595848213674e-5,-8.572674913245856e-9,7.570343023719693e-4,4.0994708019895345e-5,-8.58746909968765e-9,7.574798432523166e-4,4.116526167701248e-5,-8.642942450707564e-9,7.578766597453443e-4,4.143219506580418e-5,-8.736227826676889e-9,7.581839700006578e-4,4.1760430647830195e-5,-8.85472089607003e-9,7.583769007372872e-4,4.209143613341075e-5,-8.97646260497755e-9,7.584593350854895e-4,4.235492678888832e-5,-9.074535079715516e-9,7.584693326984003e-4,4.249010700473473e-5,-9.125223368184249e-9,7.58470988460264e-4,4.246860282595259e-5,-9.116849569321388e-9,7.585337351705025e-4,4.230716762507732e-5,-9.054700673282172e-9,7.587083994551931e-4,4.206260627237825e-5,-8.959261900385463e-9,7.590114511903744e-4,4.181169099700161e-5,-8.858889905876627e-9,7.594231618304254e-4,4.162653730197789e-5,-8.780808674797843e-9,7.598974502542237e-4,4.155567159126383e-5,-8.744091746991325e-9,7.603770701441117e-4,4.161547883315085e-5,-8.756261200644959e-9,7.608083072352005e-4,4.1791395294714015e-5,-8.813314074637931e-9,7.611518311466191e-4,4.204568142158321e-5,-8.902175671211233e-9,7.613885521055572e-4,4.232834360337178e-5,-9.004492689727314e-9,7.615206177534766e-4,4.258845489577387e-5,-9.100837967244961e-9,7.61568322961355e-4,4.2783817580922045e-5,-9.174529986143186e-9,7.615641863347267e-4,4.288746563387388e-5,-9.214382010099968e-9,7.615458421224065e-4,4.289030424473849e-5,-9.215981555878051e-9,7.615493776879412e-4,4.280020160465099e-5,-9.181526671744856e-9,7.616042486398303e-4,4.26385797343642e-5,-9.118594656166542e-9,7.61730210455046e-4,4.2435795379432153e-5,-9.03837554219817e-9,7.61936050598561e-4,4.222646210520275e-5,-8.953874020503188e-9,7.622194897874063e-4,4.204535712200338e-5,-8.87837427683221e-9,7.625676250645121e-4,4.1923882039288665e-5,-8.824153587401546e-9,7.629576171601758e-4,4.188660389994002e-5,-8.801211913123232e-9,0.00076335781686778445,4.194730410322629e-5,-8.815719768604965e-9,7.637301806589586e-4,4.210424149540176e-5,-8.868024377405146e-9,7.640353866362429e-4,4.233530176320579e-5,-8.950502771608857e-9,7.642418368971225e-4,4.259542541961727e-5,-9.046295943306457e-9,7.643379706413167e-4,4.282042794217269e-5,-9.130652554192153e-9,7.643436783033333e-4,4.29411494887276e-5,-9.176459932444947e-9,7.643128225427903e-4,4.290719105443412e-5,-9.163573390875584e-9,7.643198908851147e-4,4.27107298651634e-5,-9.088104238947882e-9,7.644329712891078e-4,4.23954390951903e-5,-8.965872528852865e-9,7.646866633436667e-4,4.204199444422708e-5,-8.826934866527333e-9,7.650704200976676e-4,4.17372669333947e-5,-8.704057045239502e-9,7.655369936842672e-4,4.154471093131832e-5,-8.621706108552556e-9,7.660227565342318e-4,4.1489461027239444e-5,-8.590446292021975e-9,7.664679096395077e-4,4.155968867214678e-5,-8.60719762281304e-9,7.668295552510263e-4,4.1717667344140696e-5,-8.65897698447111e-9,7.670867797953163e-4,4.191334217832278e-5,-8.727615499482921e-9,7.672399375245228e-4,4.209611415617943e-5,-8.794011363368658e-9,7.673067113076542e-4,4.2223374435902354e-5,-8.841422117427617e-9,7.673167461421355e-4,4.226589688328241e-5,-8.857772846673981e-9,7.673057770691697e-4,4.221051342646373e-5,-8.837001052988211e-9,7.673098402283448e-4,4.206030802892788e-5,-8.779391079594279e-9,7.673601781277127e-4,4.18326361185597e-5,-8.690943756311483e-9,7.674793660680467e-4,4.1555511526051535e-5,-8.58199870451685e-9,7.676789770593695e-4,4.126301892957958e-5,-8.465429763661297e-9,7.679588364412986e-4,4.0990480338567314e-5,-8.354768907767848e-9,7.683075907368027e-4,4.077001331558171e-5,-8.262536838002104e-9,7.687041577968274e-4,4.062672035544098e-5,-8.198843955832656e-9,7.691197778494181e-4,4.057536670843389e-5,-8.170131786714939e-9,7.69520695114969e-4,4.061730481647757e-5,-8.17788778750396e-9,7.698719236009533e-4,4.073758088267318e-5,-8.217289031700045e-9,7.701429410375053e-4,4.090284202188645e-5,-8.276083307954193e-9,7.703158959245221e-4,4.106194157234824e-5,-8.334583011415699e-9]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json new file mode 100644 index 000000000..ed067a159 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":12000,"numberOfSamples":1000,"samples":[7.703954280162467e-4,4.1152337826266915e-5,-8.368108119871265e-9,7.704163319665058e-4,4.111507788730868e-5,-8.352989399151336e-9,7.704421464154993e-4,4.091720944904923e-5,-8.275542352848811e-9,7.705485092428724e-4,4.05724562623383e-5,-8.140252864992262e-9,7.707939985966856e-4,4.014524130054576e-5,-7.971353086916377e-9,7.71193504222048e-4,3.972957759547678e-5,-7.80469566907836e-9,7.717115053607008e-4,3.9412072212316335e-5,-7.673655282248528e-9,7.722792203821364e-4,3.924081276169691e-5,-7.597334312683116e-9,7.728228927422465e-4,3.921592014800571e-5,-7.576902082499595e-9,7.732865636479628e-4,3.930044006202883e-5,-7.599469965429773e-9,7.736417360467977e-4,3.9439508716162856e-5,-7.645015059481085e-9,7.738862021781628e-4,3.9577299627356655e-5,-7.692550022805146e-9,7.740375781067476e-4,3.9667776867413035e-5,-7.724156675043192e-9,7.741257583521852e-4,3.9679734947780095e-5,-7.727075835179889e-9,7.741863193020013e-4,3.959810915098842e-5,-7.69451274251175e-9,7.742552430288779e-4,3.9423328672554246e-5,-7.625696494804441e-9,7.743646142276804e-4,3.9169548057952974e-5,-7.525395913350832e-9,7.745390796275454e-4,3.886191912277735e-5,-7.4029175785362335e-9,7.747931611691499e-4,3.853296073940333e-5,-7.2706518736087654e-9,7.751296404933389e-4,3.821816871539602e-5,-7.14230656603222e-9,7.75539277044951e-4,3.795118644851318e-5,-7.03102083378519e-9,7.760019965895818e-4,3.7759097444815016e-5,-6.947589780698099e-9,7.764894114568546e-4,3.7658393030000226e-5,-6.898960011119357e-9,7.769683935525284e-4,3.765194567776308e-5,-6.887041206138857e-9,7.77405468600329e-4,3.7727187339015794e-5,-6.907852463658269e-9,7.777719367210197e-4,3.7855696317654865e-5,-6.951096001721251e-9,7.780497715515111e-4,3.799465132874708e-5,-7.000433114460731e-9,7.782381033839588e-4,3.809125972066116e-5,-7.035036448543083e-9,7.783590131789634e-4,3.809174285674149e-5,-7.033143881376136e-9,7.784595953194529e-4,3.795570392998253e-5,-6.97793131163529e-9,7.786057068107846e-4,3.767368510457848e-5,-6.864708360881282e-9,7.78863996118783e-4,3.728037531656348e-5,-6.706310810691064e-9,7.792756265371022e-4,3.685219468959701e-5,-6.532225465482031e-9,7.798348397283327e-4,3.648330405006227e-5,-6.379231745544197e-9,7.804875774404013e-4,3.624915992465997e-5,-6.277220111165846e-9,7.811532791147602e-4,3.6178446406365796e-5,-6.238248751260801e-9,7.817563618614648e-4,3.624887846641678e-5,-6.254752293779451e-9,7.822492066349364e-4,3.6404572752001926e-5,-6.305999039127454e-9,7.826184621073835e-4,3.658034238992342e-5,-6.367226110433409e-9,7.828786448897808e-4,3.672020080806501e-5,-6.416659701095429e-9,7.830611528872669e-4,3.678622737434062e-5,-6.439002339589363e-9,7.83204269111392e-4,3.6760045223355876e-5,-6.4262288080890655e-9,7.83346116265409e-4,3.6640538094929564e-5,-6.376990645821899e-9,7.835202865150684e-4,3.644047816686522e-5,-6.2955425776532835e-9,7.837530585274323e-4,3.618322636043522e-5,-6.190565289506217e-9,7.840613538345039e-4,3.5899528490766174e-5,-6.073894295370791e-9,7.844511692520874e-4,3.56240404001225e-5,-5.959079652820332e-9,7.849166362486965e-4,3.5391266889247926e-5,-5.859734881539029e-9,7.854401461991078e-4,3.5230870470624936e-5,-5.787703349498604e-9,7.85994077008628e-4,3.516280326863614e-5,-5.751203618221222e-9,7.865443681490566e-4,3.519312942196211e-5,-5.753224515569559e-9,7.870557121649313e-4,3.531147041257569e-5,-5.790462278713693e-9,7.874977374834473e-4,3.549084781661851e-5,-5.8530751899271e-9,7.878512977067683e-4,3.5690381696580056e-5,-5.925483082828172e-9,7.88113902130303e-4,3.586089281430252e-5,-5.9883395159535995e-9,7.883033069918536e-4,3.595324388575569e-5,-6.021732124830117e-9,7.884579960410935e-4,3.5929083510116866e-5,-6.009544248256601e-9,7.886327975757129e-4,3.577280030598468e-5,-5.9444715378693474e-9,7.888879780100181e-4,3.550164046195876e-5,-5.832367391647236e-9,7.8927192870103e-4,3.51687389345516e-5,-5.693704861085736e-9,7.898018205719634e-4,3.4853326117873307e-5,-5.559814012217819e-9,7.904515896948133e-4,3.4636846056963114e-5,-5.463410169207496e-9,7.911567365586743e-4,3.457328365667514e-5,-5.426733674861982e-9,7.91836723351535e-4,3.4669207955395765e-5,-5.453450884163303e-9,7.924237202788972e-4,3.488486649734166e-5,-5.5288267094573905e-9,7.928824548961669e-4,3.515389152880303e-5,-5.627269436403621e-9,7.932136820118008e-4,3.540839736028799e-5,-5.722097489506235e-9,7.934449059141124e-4,3.5597063748403574e-5,-5.792673659357338e-9,7.936168882573704e-4,3.569210775996662e-5,-5.827295173952732e-9,7.937723217445624e-4,3.568791359332356e-5,-5.822884193637893e-9,7.93948800831336e-4,3.559595323883983e-5,-5.783216738249511e-9,7.941754088277288e-4,3.543933477989003e-5,-5.716920600537979e-9,7.944713320113322e-4,3.524834071649752e-5,-5.635744464363097e-9,7.948452117223364e-4,3.505690102972568e-5,-5.5531067119024055e-9,7.952946621025866e-4,3.489936168856889e-5,-5.482741290558481e-9,7.958060134527227e-4,3.4806877971801684e-5,-5.437234302862502e-9,7.963548356244236e-4,3.4803064153757236e-5,-5.4263155715433935e-9,7.969080873912969e-4,3.4899187129560714e-5,-5.454979598662578e-9,7.974285582348853e-4,3.50899868901018e-5,-5.521799771482021e-9,7.978815595783528e-4,3.53517139310461e-5,-5.618028402827992e-9,7.982428279621153e-4,3.5643920541599894e-5,-5.728107579266846e-9,7.985056927078104e-4,3.591576113045357e-5,-5.8319638327390805e-9,7.986852279968585e-4,3.6116131940588234e-5,-5.908914090462572e-9,7.988176580367524e-4,3.620557989303193e-5,-5.942429308719043e-9,7.989544079791842e-4,3.616720864975489e-5,-5.924668401918435e-9,7.991513656849079e-4,3.601375362426653e-5,-5.859607617947738e-9,7.994550428476274e-4,3.5788266373648105e-5,-5.763648882378041e-9,7.99888593020665e-4,3.5556588356057684e-5,-5.662870662485801e-9,8.004419741134302e-4,3.539153188530321e-5,-5.586797190304597e-9,8.010710698253013e-4,3.5351857597047766e-5,-5.559879219657929e-9,8.017086298947224e-4,3.546304659868737e-5,-5.5935163200738305e-9,8.022846671415112e-4,3.5708577068191366e-5,-5.6822096378184195e-9,8.027481145977655e-4,3.603666410112383e-5,-5.805964874906324e-9,8.03080122412991e-4,3.637928126071499e-5,-5.9377647708489825e-9,8.032943410005627e-4,3.66738652272459e-5,-6.0522761139605395e-9,8.034269249007324e-4,3.687843167960255e-5,-6.132033879229968e-9,8.035230519879982e-4,3.697653334579644e-5,-6.1696217748146e-9,8.036257380118303e-4,3.6974206946549126e-5,-6.166656508896828e-9,8.037692352128727e-4,3.689330257374978e-5,-6.131278442552063e-9,8.039764427338145e-4,3.6764723596644845e-5,-6.075520263494496e-9,8.042586457584074e-4,3.662315128777011e-5,-6.013183162784273e-9,8.046160819092535e-4,3.6503272989771094e-5,-5.9582713714511854e-9,8.050385231957502e-4,3.643678976682334e-5,-5.9237473528870625e-9,8.055057955743184e-4,3.644934285412461e-5,-5.920288595123292e-9,8.05988792090945e-4,3.655676717208342e-5,-5.95478706400642e-9,8.064519656770659e-4,3.676075426661275e-5,-6.028574833606665e-9,8.068582848986766e-4,3.7045013088594046e-5,-6.1357749440002495e-9,8.071769237677392e-4,3.737399900933667e-5,-6.26261951082692e-9,8.073924491758243e-4,3.769659412573422e-5,-6.388754892200863e-9,8.075124666197616e-4,3.7955997865778476e-5,-6.491115253060035e-9,8.075698393218493e-4,3.8104352666225344e-5,-6.549812033282912e-9,8.07616918266904e-4,3.811755258854625e-5,-6.5542030392740885e-9,8.077125028108634e-4,3.8004458985452114e-5,-6.506795533466793e-9,8.079056000982033e-4,3.780654452780539e-5,-6.4233624926436094e-9,8.082214227720043e-4,3.758774308343327e-5,-6.3291414262697445e-9,8.086539871520523e-4,3.741775103981728e-5,-6.252328710187585e-9,8.091672759069606e-4,3.7353752588214316e-5,-6.216752306565877e-9,8.097045052884347e-4,3.742558962134468e-5,-6.235686559437506e-9,8.10203012993122e-4,3.7628423384850995e-5,-6.308502277607127e-9,8.106106251449948e-4,3.792510731679957e-5,-6.421212634856097e-9,8.108985322821864e-4,3.8257644162653106e-5,-6.550833196339432e-9,8.11066628774171e-4,3.856383400569566e-5,-6.6720638631456955e-9,8.111401568994287e-4,3.8793232686939005e-5,-6.763879623403471e-9,8.111600098107639e-4,3.89173073971411e-5,-6.813868422693099e-9,8.111711107269196e-4,3.893182181341246e-5,-6.8194280235812216e-9,8.112128636990658e-4,3.8852913529948424e-5,-6.786357912765378e-9,8.1131356935384e-4,3.8710088334482416e-5,-6.726121364291298e-9,8.114885730374386e-4,3.853908980505929e-5,-6.652976845483148e-9,8.117408037071133e-4,3.837625006855202e-5,-6.5816575047402725e-9,8.120622864326276e-4,3.825456404102906e-5,-6.5257403552766695e-9,8.124357145823514e-4,3.82008938099246e-5,-6.496493824519633e-9,8.128358550233297e-4,3.823344877076438e-5,-6.50185004606853e-9,8.132312194083829e-4,3.8358874558908814e-5,-6.54518991660995e-9,8.135869354214777e-4,3.856887726212377e-5,-6.623869747140799e-9,8.138698868858205e-4,3.8837323813125146e-5,-6.727869263055802e-9,8.140566018155787e-4,3.91199837876055e-5,-6.83950023112515e-9,8.141427039935174e-4,3.935979230186433e-5,-6.9354371500791985e-9,8.14150262656473e-4,3.949946847388898e-5,-6.9918722744796985e-9,8.141277285832854e-4,3.949960053306327e-5,-6.991994835378283e-9,8.141388942367572e-4,3.935526219250151e-5,-6.93289197521611e-9,8.142430879224422e-4,3.910207785679162e-5,-6.8281493368907015e-9,8.144749296276758e-4,3.880686864520632e-5,-6.704223833237992e-9,8.1483306083408e-4,3.854646680042599e-5,-6.592073096421126e-9,8.152821053230805e-4,3.838435896231063e-5,-6.5178631025860026e-9,8.157651947313659e-4,3.835428291873892e-5,-6.49629781434836e-9,8.162207450781731e-4,3.845478693315215e-5,-6.528135674230928e-9,8.16597684699937e-4,3.865376270796675e-5,-6.60159629155916e-9,8.168657158061926e-4,3.889947743847334e-5,-6.69644446442954e-9,8.170194049574676e-4,3.913422953807289e-5,-6.7893400986806185e-9,8.17076394641524e-4,3.930728020730456e-5,-6.85914255437804e-9,8.170710316645813e-4,3.938449175604022e-5,-6.891061862959034e-9,8.170454569870298e-4,3.935306732398158e-5,-6.878882809994513e-9,8.170405722878981e-4,3.9221105681444305e-5,-6.825033584806315e-9,8.1708896023377e-4,3.901310215359767e-5,-6.7388979016364186e-9,8.172108407223391e-4,3.87633764776707e-5,-6.634171213681119e-9,8.174130175522054e-4,3.850938229687362e-5,-6.526094414707984e-9,8.176899834395489e-4,3.8286205079792516e-5,-6.4291520891420515e-9,8.180260959470649e-4,3.812267075009407e-5,-6.3554492104173685e-9,8.183979894619872e-4,3.803873780290355e-5,-6.313637763487015e-9,8.187769116206049e-4,3.804351923521837e-5,-6.308093725118056e-9,8.191312129866966e-4,3.813337134793312e-5,-6.338063937256885e-9,8.194296942684052e-4,3.8289922698924704e-5,-6.396704673018225e-9,8.196467238419641e-4,3.847879781237149e-5,-6.470354270719354e-9,8.197695294206804e-4,3.8650968100779566e-5,-6.538921130269099e-9,8.19806513649201e-4,3.874943540462814e-5,-6.5785960033068025e-9,8.197929489727498e-4,3.8723134804595094e-5,-6.5676898771434025e-9,8.197883002079536e-4,3.854613941350416e-5,-6.4947236728071645e-9,8.198609759695765e-4,3.823403064971981e-5,-6.365297279203114e-9,8.200636944477346e-4,3.784594464219167e-5,-6.203000857389413e-9,0.000820411436661712,3.746667085519243e-5,-6.042172936215794e-9,8.208749674671344e-4,3.7176223092774686e-5,-5.915617415305801e-9,8.213932248000017e-4,3.7022992160726405e-5,-5.843759010230899e-9,8.218961027605576e-4,3.701275044446644e-5,-5.830076453078521e-9,8.223254904904929e-4,3.711435819021485e-5,-5.863118056849916e-9,8.226473843906112e-4,3.727482958449793e-5,-5.922239824745653e-9,8.228545590175748e-4,3.7435687186837764e-5,-5.983966399587255e-9,8.229627474394682e-4,3.7545885310616436e-5,-6.027176921838554e-9,8.230036090129152e-4,3.756990148797665e-5,-6.036554527428151e-9,8.230167806825249e-4,3.749138311092206e-5,-6.004372061981051e-9,8.230423185742567e-4,3.731317666393389e-5,-5.930818699795622e-9,8.231143493501816e-4,3.705449505134662e-5,-5.823063768625377e-9,8.23256553209646e-4,3.674606808012696e-5,-5.693352353058202e-9,8.234798189428454e-4,3.642429612693932e-5,-5.556571384393087e-9,8.237820413355269e-4,3.6125418828181186e-5,-5.427765212931279e-9,8.241496751844597e-4,3.588054059534543e-5,-5.320016584338888e-9,8.245603883153199e-4,3.571199342395666e-5,-5.242923452023574e-9,8.249861688108776e-4,3.563099782478505e-5,-5.201638270344065e-9,8.253965549120751e-4,3.563626588694151e-5,-5.1962726434097535e-9,8.257620082869455e-4,3.571323197160154e-5,-5.221486300041849e-9,8.260577695440884e-4,3.583385451251235e-5,-5.266230045559657e-9,8.262687299902825e-4,3.595753207818218e-5,-5.313924512584801e-9,8.263954241197148e-4,3.6034603798458864e-5,-5.343784865943491e-9,8.264598903887887e-4,3.601442540484084e-5,-5.334201311502159e-9,8.265081515702821e-4,3.585914554288692e-5,-5.268642284511385e-9,8.26604385596247e-4,3.556101693181241e-5,-5.143074426032549e-9,8.268132192939278e-4,3.515537353926115e-5,-4.971501142912185e-9,8.271738744510702e-4,3.471782861774951e-5,-4.7848532086355065e-9,8.276795586094963e-4,3.4340322196190036e-5,-4.621118053741745e-9,8.282766891716653e-4,3.4095760039524445e-5,-4.5108069909192165e-9,8.288861464980373e-4,3.401140563924369e-5,-4.465996728964361e-9,8.29433355059079e-4,3.406500941237964e-5,-4.4785874372255114e-9,8.298704729894737e-4,3.420103631857123e-5,-4.526688711410476e-9,8.301833096396713e-4,3.4353709967328716e-5,-4.583790454622501e-9,8.303862100769367e-4,3.446546478614344e-5,-4.626173157513306e-9,8.305118250621173e-4,3.449687603771798e-5,-4.6370194576684565e-9,8.306008664699762e-4,3.442941009341466e-5,-4.607762309491803e-9,8.306940322478887e-4,3.426386875947961e-5,-4.537752547464339e-9,8.308263261536525e-4,3.401682527001027e-5,-4.4330652748613145e-9,8.310232819304966e-4,3.371620106257414e-5,-4.304822699303797e-9,8.312987280593526e-4,3.339641097448233e-5,-4.167187973746248e-9,8.31653979219806e-4,3.309335744578138e-5,-4.0351952674026125e-9,8.32078417238307e-4,3.283958122742209e-5,-3.9226242940869606e-9,8.325514069439921e-4,3.26599656110982e-5,-3.8401496329485945e-9,8.330453353948687e-4,3.256846904668967e-5,-3.793977723288974e-9,8.335293651888821e-4,3.2566169333962955e-5,-3.785049055168084e-9,8.33973516225973e-4,3.264061001145597e-5,-3.808740687729704e-9,8.343528580041156e-4,3.2766396288388346e-5,-3.855005633134729e-9,8.346517248312861e-4,3.290709657118518e-5,-3.9089874063833434e-9,8.348679389439184e-4,3.301872928211123e-5,-3.95230090306051e-9,8.350167359300278e-4,3.305558632640454e-5,-3.965393684369818e-9,8.351331058149185e-4,3.297932755397413e-5,-3.9314416005053e-9,8.352699660831031e-4,3.277126367429032e-5,-3.8417220291605366e-9,8.354889117471341e-4,3.244507340953231e-5,-3.7012047953805833e-9,8.358419691208809e-4,3.205326833172769e-5,-3.531440109697599e-9,8.36348763283404e-4,3.167867290599403e-5,-3.3670502139274996e-9,8.369813197061595e-4,3.140782451156133e-5,-3.244586908337016e-9,8.376693061030729e-4,3.129669563122999e-5,-3.1881493598681102e-9,8.383263658012633e-4,3.134863920078477e-5,-3.200051972071662e-9,8.388826052155265e-4,3.151766556410064e-5,-3.2619908468242225e-9,8.393050072888866e-4,3.173205489277276e-5,-3.344664087646371e-9,8.395988757541516e-4,3.192172100776251e-5,-3.419003963066664e-9,8.397963286098811e-4,3.203621272799185e-5,-3.46362815353071e-9,8.399416326313247e-4,3.205061679819683e-5,-3.4674080518768483e-9,8.400794992423449e-4,3.1963263817541386e-5,-3.4287495907215916e-9,8.402479103687121e-4,3.179002909330446e-5,-3.3534888117140308e-9,8.404745687451004e-4,3.155830071326884e-5,-3.2525737289196144e-9,8.407754646399417e-4,3.130173895136262e-5,-3.1399368209433314e-9,8.41154541388092e-4,3.1055764720891035e-5,-3.0305415711644196e-9,8.416041280544131e-4,3.085345156272672e-5,-2.9385364426828023e-9,8.421061656017975e-4,3.072164283076384e-5,-2.8755213785209154e-9,8.426344113814458e-4,3.067736638925079e-5,-2.8490015368691745e-9,8.431577953645121e-4,3.072498523450466e-5,-2.8612024549307127e-9,8.436447971117692e-4,3.085470440573325e-5,-2.9084547718786858e-9,8.440683720702881e-4,3.1042869672780824e-5,-2.981273689818602e-9,8.444108321936859e-4,3.125426055813509e-5,-3.065198477158535e-9,8.446680629527056e-4,3.144642492558669e-5,-3.142451937358192e-9,8.448524507159502e-4,3.15759057443261e-5,-3.194437005461156e-9,8.449938340091091e-4,3.160610588444374e-5,-3.2050494314965393e-9,8.451374660071655e-4,3.151638576719877e-5,-3.1646699302547115e-9,8.453375715697237e-4,3.1311130994121866e-5,-3.0742611477808833e-9,8.456453986738488e-4,3.1025780835067146e-5,-2.94819557957702e-9,8.46092653379528e-4,3.0725045293271956e-5,-2.81368862948315e-9,8.466753220872281e-4,3.0488818598972834e-5,-2.704879810332908e-9,8.473471109643087e-4,3.038640446510119e-5,-2.6518278127619258e-9,8.480305696476147e-4,3.0449024854662588e-5,-2.668679548466348e-9,8.486441257401572e-4,3.065628903781551e-5,-2.7477040330430985e-9,8.491313375173792e-4,3.094576582096809e-5,-2.8631317709746885e-9,8.494766164139384e-4,3.123946697058364e-5,-2.9822273668107125e-9,8.497020423260754e-4,3.1471127846907625e-5,-3.0767866876898872e-9,8.498521170161459e-4,3.16017891014394e-5,-3.129775126187276e-9,8.499770409409726e-4,3.1621830699592834e-5,-3.1363362066964675e-9,8.501209480543094e-4,3.1544720456021056e-5,-3.1013685836141294e-9,8.503161532077362e-4,3.1398399640952655e-5,-3.036097487468567e-9,8.505816546173871e-4,3.1217759899263695e-5,-2.9550165687006546e-9,8.509236995527479e-4,3.103916188717301e-5,-2.8735662703891047e-9,8.513369862483362e-4,3.0896507607776705e-5,-2.8063743424389867e-9,8.518060495699486e-4,3.081805794501351e-5,-2.7657886014572145e-9,8.523069735798167e-4,3.082345930368575e-5,-2.7605358876292335e-9,8.528098318936862e-4,3.0920864735206294e-5,-2.79447672381635e-9,8.532822991542584e-4,3.110457416848017e-5,-2.8656065993726486e-9,8.536945524033567e-4,3.1354085988535145e-5,-2.965633018689591e-9,8.540249574865114e-4,3.163548969538209e-5,-3.080489694586202e-9,8.542654720972812e-4,3.190574453586719e-5,-3.192028596537508e-9,8.544254041595665e-4,3.211974836915866e-5,-3.28090202256463e-9,8.545322236510779e-4,3.2239278828225266e-5,-3.3303148632010992e-9,8.546285733291039e-4,3.224218246448245e-5,-3.330007151957699e-9,8.547652672831671e-4,3.2129878781118014e-5,-3.279649312494011e-9,8.549907364400541e-4,3.193111420486313e-5,-3.1907193571916717e-9,8.553382926807156e-4,3.1699773222277685e-5,-3.0858345714949625e-9,8.558140144434115e-4,3.150496484434305e-5,-2.9946769942906606e-9,8.563897321781071e-4,3.1413455736156216e-5,-2.9464704670555277e-9,8.570061787799461e-4,3.1468304822318046e-5,-2.960646903904852e-9,8.575886586831152e-4,3.167199701229673e-5,-3.039317862345337e-9,8.580709942206223e-4,3.198346246211776e-5,-3.1656988018487623e-9,8.584171135061124e-4,3.233248147476386e-5,-3.310099393214403e-9,8.586297960336273e-4,3.264478971416768e-5,-3.440645754903185e-9,8.587438963877701e-4,3.286515489171303e-5,-3.5332321749884526e-9,8.58810255130539e-4,3.2968897888927814e-5,-3.5765784450704622e-9,8.588794391843271e-4,3.2960802961293873e-5,-3.5719305847910328e-9,8.589911009932855e-4,3.2866533850223576e-5,-3.529577019202463e-9,8.591697919005255e-4,3.272249454060714e-5,-3.4646650245504987e-9,8.594251730433313e-4,3.256765883619841e-5,-3.393767811079765e-9,8.597541389353542e-4,3.2438210292960187e-5,-3.3325521813766835e-9,8.601432315592983e-4,3.236427582707883e-5,-3.2942803106507433e-9,8.605707893509768e-4,3.236765846754327e-5,-3.2887387933129255e-9,8.610090272757816e-4,3.245976837958149e-5,-3.3212886990489386e-9,8.614266330715411e-4,3.2639496241471747e-5,-3.3919234343927197e-9,8.617925265638105e-4,3.289145361493536e-5,-3.4944824234170423e-9,8.620810773671341e-4,3.318566240946574e-5,-3.616455097562243e-9,8.62278291344594e-4,3.3480062508905175e-5,-3.7399625948591e-9,8.623874686730959e-4,3.372681857367478e-5,-3.844371487446432e-9,8.624320722870976e-4,3.38822001208865e-5,-3.910489310686052e-9,8.624536695365803e-4,3.391801974913249e-5,-3.925509323340507e-9,8.625041693741896e-4,3.3831145103447495e-5,-3.887217720697746e-9,8.626336863724894e-4,3.364749744285424e-5,-3.805912914971897e-9,8.628771728569449e-4,3.34184061309152e-5,-3.703085242205503e-9,8.632436901356097e-4,3.3209472451514874e-5,-3.606852247536402e-9,8.637117164869609e-4,3.30843353744748e-5,-3.5450791305814132e-9,8.64232526978409e-4,3.30874054017447e-5,-3.537852982664476e-9,8.647417259564168e-4,3.32305264787094e-5,-3.591449619924816e-9,8.651764977358669e-4,3.348834402295054e-5,-3.695963620118213e-9,8.654934113410493e-4,3.380514974584113e-5,-3.827962144226022e-9,8.65680227216288e-4,3.411174050293928e-5,-3.957644664897803e-9,8.657570330287688e-4,3.4346041766830635e-5,-4.057808965225653e-9,8.657669387277931e-4,3.446932313815453e-5,-4.11101586076775e-9,8.657613435022625e-4,3.4472588411529344e-5,-4.112539581686109e-9,8.657862135868558e-4,3.4373094380466114e-5,-4.069050533975013e-9,8.658735763707832e-4,3.4205060581144676e-5,-3.99475967321788e-9,8.660388852455758e-4,3.400943296480929e-5,-3.907091687927469e-9,8.66282466493992e-4,3.3825844969993364e-5,-3.823219696797409e-9,8.665927137849105e-4,3.3687619719216236e-5,-3.7578388388344435e-9,8.669494024009601e-4,3.361913423273398e-5,-3.7219299984715987e-9,8.673264891657124e-4,3.363439881774626e-5,-3.7220625465320145e-9,8.676945418145927e-4,3.373592694579208e-5,-3.7598487309122184e-9,8.680234235964354e-4,3.391351714465576e-5,-3.831368929963179e-9,8.682859972296471e-4,3.4143297256214016e-5,-3.926691202132316e-9,8.684632880644983e-4,3.4388163647136244e-5,-4.029972466578756e-9,8.685506814790997e-4,3.460127638371885e-5,-4.120889818604067e-9,8.685633840062911e-4,3.4734023180121915e-5,-4.178058611548191e-9,8.685380720783138e-4,3.4748252417980764e-5,-4.184372534042753e-9,8.685276349437916e-4,3.462966914812959e-5,-4.132901756292709e-9,8.685883291320915e-4,3.439669502663824e-5,-4.030854924441111e-9,8.687628382465881e-4,3.409933619952682e-5,-3.8992420211352555e-9,8.690658895057307e-4,3.3806647123293056e-5,-3.767634596223998e-9,8.694785799556857e-4,3.358696397155016e-5,-3.66578227162126e-9,8.69953568550893e-4,3.348840676249508e-5,-3.6152232829612797e-9,8.704286241585501e-4,3.352635120659295e-5,-3.623705146793659e-9,8.708434233092473e-4,3.36810197345908e-5,-3.6838087593563796e-9,8.711544860856722e-4,3.390464015558857e-5,-3.775680273187482e-9,8.713445725476498e-4,3.4135193673201416e-5,-3.872743220397276e-9,8.714246913321904e-4,3.4312587501143965e-5,-3.948669842514471e-9,8.714288385999942e-4,3.4392832306213484e-5,-3.983673438771948e-9,8.714035709437477e-4,3.4356588349835174e-5,-3.968454991877816e-9,8.713959401397892e-4,3.4210390500048455e-5,-3.904979500162979e-9,8.714434314935408e-4,3.398142071965159e-5,-3.80439632081465e-9,8.715682144280527e-4,3.370866502664886e-5,-3.6833035835006632e-9,8.717760142029626e-4,3.343373250814609e-5,-3.5597712152619653e-9,8.720583485322628e-4,3.3193644320049306e-5,-3.450143545804329e-9,8.723963305223968e-4,3.301640385510928e-5,-3.367013852901416e-9,8.727645877754009e-4,3.2918942751948914e-5,-3.318240190622122e-9,8.731346053164378e-4,3.290646426016532e-5,-3.3065975355143806e-9,8.734775263631105e-4,3.297227361968222e-5,-3.329661479803068e-9,8.737669246598247e-4,3.3097659941762863e-5,-3.3797021541565744e-9,8.739822501713752e-4,3.325204966262417e-5,-3.443668277316694e-9,8.741134429392175e-4,3.339441456133996e-5,-3.5037068763647772e-9,8.741663973729802e-4,3.347758868121113e-5,-3.538992779628764e-9,8.741674829281171e-4,3.3457101736264556e-5,-3.529614543781381e-9,8.741636709228396e-4,3.33044797175946e-5,-3.4624919926690294e-9,8.742144615830622e-4,3.302135267114131e-5,-3.337668517116169e-9,8.743747932608298e-4,3.264687423555464e-5,-3.1716545924770886e-9,8.746743840366114e-4,3.2251051243278426e-5,-2.9946081022665746e-9,8.751039489192597e-4,3.1913364921373566e-5,-2.841130150424048e-9,8.75616678903275e-4,3.169573821909346e-5,-2.738595983860198e-9,8.761445007935473e-4,3.162302292091491e-5,-2.698649906049282e-9,8.766203447195945e-4,3.167892308982781e-5,-2.715236885002451e-9,8.769963987697803e-4,3.18159383463042e-5,-2.7686104110067445e-9,8.772531062745815e-4,3.197221978649029e-5,-2.8323654947714774e-9,8.773990475854998e-4,3.2088299096119665e-5,-2.880564943726866e-9,8.774645762292172e-4,3.211954673233677e-5,-2.893205151464858e-9,8.774924155916585e-4,3.204298846969703e-5,-2.8593905607603026e-9,8.775277330636137e-4,3.185874387139908e-5,-2.778242446816188e-9,8.776094585559394e-4,3.158700840416259e-5,-2.657838435817586e-9,8.777641128132043e-4,3.126183960920271e-5,-2.5126548703569532e-9,8.78002877757191e-4,3.092341017264447e-5,-2.360210638245288e-9,8.78321864386743e-4,3.061051760107952e-5,-2.217716237311034e-9,8.787048132667152e-4,3.0354696413936292e-5,-2.0993733631963004e-9,8.791271129207127e-4,3.0176554948077197e-5,-2.0146576508170057e-9,8.795600526842855e-4,3.0084265265720063e-5,-1.9675904842138486e-9,8.799746005764623e-4,3.0073592700195904e-5,-1.9567272155798592e-9,8.803445685727407e-4,3.0128701933306585e-5,-1.9754931411414064e-9,8.806494724082241e-4,3.0223295863434567e-5,-2.012635250546257e-9,8.808775707256542e-4,3.0322170015652122e-5,-2.052817626545346e-9,8.810294629751855e-4,3.0383874541022066e-5,-2.077700737209661e-9,8.811219817814094e-4,3.0365784932921254e-5,-2.068140259899549e-9,8.811907881742122e-4,3.0232911390513986e-5,-2.0081342888122047e-9,8.812885190182023e-4,2.997035224275941e-5,-1.8904615726488688e-9,8.814748050867232e-4,2.9595882363843328e-5,-1.7223897108962145e-9,8.817972325406356e-4,2.9164896341324755e-5,-1.5279575596742727e-9,8.822694105023639e-4,2.8759323793384683e-5,-1.343146342028477e-9,8.828590048460752e-4,2.846005103322195e-5,-1.203784176843767e-9,8.834961316970444e-4,2.8315408404152892e-5,-1.1317019817736651e-9,8.840994293836644e-4,2.83238474756633e-5,-1.1270381711241277e-9,8.846048503517724e-4,2.8439563876848128e-5,-1.1705107836514342e-9,8.849825261434277e-4,2.859423427913567e-5,-1.2327153363012424e-9,8.852377405673897e-4,2.872082247503333e-5,-1.2843809606697235e-9,8.854014350719654e-4,2.876976020388615e-5,-1.303411303612948e-9,8.855175691600622e-4,2.8715569658327886e-5,-1.277894686911527e-9,8.856319414654461e-4,2.8556383656666185e-5,-1.2061264571813115e-9,8.857841196699158e-4,2.8309570284204513e-5,-1.0949624616496077e-9,8.86002414496257e-4,2.800577749822175e-5,-9.574157297751806e-10,8.863013254260068e-4,2.7682541703841347e-5,-8.099261480403505e-10,8.866810883604368e-4,2.737801278175877e-5,-6.695408320630273e-10,8.871291034948231e-4,2.712535762590261e-5,-5.513048593649785e-10,8.876228817584209e-4,2.6948399119048687e-5,-4.661876242949888e-10,8.881339924077757e-4,2.6858865286951922e-5,-4.197713685400893e-10,8.886323956855838e-4,2.6855412138336997e-5,-4.1179225649502044e-10,8.890905424093482e-4,2.6924258581403914e-5,-4.3643441475982406e-10,8.89486876270744e-4,2.704096977561104e-5,-4.831197421077393e-10,8.898087302066524e-4,2.7172978043164845e-5,-5.375765842824722e-10,8.900547902185537e-4,2.7282747178927522e-5,-5.831513974124379e-10,8.902372653753913e-4,2.733186854749421e-5,-6.02542926548089e-10,8.903834851144673e-4,2.7286782595027556e-5,-5.803341451115104e-10,8.905356820182493e-4,2.712678713758405e-5,-5.066546828876249e-10,8.907466490935431e-4,2.6853822167289743e-5,-3.817222697006188e-10,8.910687379135351e-4,2.650095008026581e-5,-2.1981389275727818e-10,8.915358613141435e-4,2.613316302797963e-5,-4.974968918210426e-11,8.921441557986117e-4,2.583341569558239e-5,9.130127597938247e-11,8.928435576312597e-4,2.5673648601187617e-5,1.7077634639135572e-10,8.935508750856743e-4,2.5683679634147847e-5,1.7468326592194504e-10,8.941811428365587e-4,2.5837610180360195e-5,1.1381510218411522e-10,8.946793739990621e-4,2.6067113585673513e-5,1.8006901262402275e-11,8.950349091826171e-4,2.6291644820413183e-5,-7.717084794839584e-11,8.952750213494531e-4,2.6446389435700407e-5,-1.427663814093566e-10,8.954475970296075e-4,2.64960814946439e-5,-1.625988001066087e-10,8.956041887442954e-4,2.6435196735103513e-5,-1.334689640026147e-10,8.957887712051753e-4,2.6280905283114967e-5,-6.224871917615731e-11,8.960323226691599e-4,2.6064317323041538e-5,3.777765165941726e-11,8.963513575114935e-4,2.5822815459411318e-5,1.5017549800954496e-10,8.96748509792149e-4,2.5594124919428984e-5,2.5799083696445723e-10,8.972140957359525e-4,2.5411712108030967e-5,3.459131555119787e-10,8.97728398380985e-4,2.5301088813513795e-5,4.0208667445015245e-10,8.982646818886401e-4,2.5276973108559064e-5,4.19511702332487e-10,8.987928885022273e-4,2.5341491278246515e-5,3.969097854818967e-10,8.992838386101128e-4,2.548373838032777e-5,3.389148700251626e-10,8.997135067687896e-4,2.5680959581705512e-5,2.5551799630259e-10,9.000668011166033e-4,2.590128913974731e-5,1.6084571383571664e-10,9.003404075887244e-4,2.610773225553987e-5,7.143433854803536e-11,9.005444531271067e-4,2.626306035931546e-5,4.124552392039377e-12,9.00702826310028e-4,2.6335350498633444e-5,-2.636373164642357e-11,9.008518990331428e-4,2.6304027478397698e-5,-1.0173572691243059e-11,9.010369750715351e-4,2.616622985452215e-5,5.4685092455799334e-11,9.013053376731691e-4,2.5942528849006335e-5,1.5954350428825642e-10,9.016950534266347e-4,2.5679451672258137e-5,2.8372503804596007e-10,9.022205066966907e-4,2.544470577148632e-5,3.9657633063202955e-10,9.028595081446744e-4,2.5311299328910574e-5,4.6464848630157026e-10,9.035509621163673e-4,2.5331826054565013e-5,4.634519661365919e-10,9.042106403831823e-4,2.5513725417149697e-5,3.8884970955208253e-10,9.047617243836385e-4,2.5811755065389144e-5,2.60664002639359e-10,9.051639505218222e-4,2.614554976562279e-5,1.1486292999309726e-10,9.054243849394402e-4,2.6432431256007105e-5,-1.1230224109221291e-11,9.055864786501333e-4,2.6615750824420068e-5,-9.174245642919217e-11,9.057083348203511e-4,2.6675961252054152e-5,-1.1728835587695205e-10,9.05843511575355e-4,2.6625694545636095e-5,-9.286576972832296e-11,9.06030514980889e-4,2.649764658641052e-5,-3.258481232105302e-11,9.06290090659766e-4,2.6332711316700743e-5,4.5492394804177083e-11,9.066269079166894e-4,2.617147979221003e-5,1.230902666428942e-10,9.07032727485054e-4,2.6049140781842117e-5,1.8405636274430814e-10,9.074895537591257e-4,2.5992565692749985e-5,2.1580884693763228e-10,9.079725233622418e-4,2.601842289978903e-5,2.1034058494702972e-10,9.08452843161885e-4,2.6131794189518346e-5,1.649501949413581e-10,9.089011187176733e-4,2.632531969086917e-5,8.266582317282753e-11,9.092912509323934e-4,2.657930002330282e-5,-2.7811191372744197e-11,9.096046947811349e-4,2.686337600497953e-5,-1.5287896453951608e-10,9.098343835696975e-4,2.7140160235303376e-5,-2.756580777618742e-10,9.099874027396871e-4,2.737067976970732e-5,-3.7839683569915226e-10,9.100856080701482e-4,2.7521019033657425e-5,-4.4541806075215186e-10,9.101636727790192e-4,2.756915427471307e-5,-4.662024595936307e-10,9.102644580498961e-4,2.751076592587584e-5,-4.3810314345020306E-10,9.104319511252228e-4,2.736291054800073e-5,-3.681879685719245e-10,9.107022221916946e-4,2.7164432891512126e-5,-2.736553609265788e-10,9.110933354507029e-4,2.6971680885033756e-5,-1.800824904443576e-10,9.11596330532063e-4,2.6848117080263942e-5,-1.167738231171905e-10,9.121710507471927e-4,2.6847793958635906e-5,-1.0913815308381964e-10,9.12751534970597e-4,2.6996070209376236e-5,-1.6964949395235283e-10,9.132634636288651e-4,2.72756008370633e-5,-2.9115810444199527e-10,9.136492992958313e-4,2.762733566158342e-5,-4.471383736182009e-10,9.138892892803114e-4,2.797002314543524e-5,-6.005507786510418e-10,9.140064810409892e-4,2.8229735821653137e-5,-7.173953360843062e-10,9.140537060586121e-4,2.8363778381520954e-5,-7.777099880424133e-10,9.14091744347561e-4,2.8368259804342512e-5,-7.790964097262822e-10,9.141707165736832e-4,2.8270290432506036e-5,-7.332676996715194e-10,9.143209375298112e-4,2.811333903517838e-5,-6.595294780294835e-10,9.145523676781168e-4,2.7943782175206335e-5,-5.787922436801097e-10,9.148586524660526e-4,2.780218073489562e-5,-5.09645207598181e-10,9.15222213264884e-4,2.771907523928594e-5,-4.663750532641056e-10,9.156186000215372e-4,2.771356286516508e-5,-4.581833019385022e-10,9.160198239972885e-4,2.7793018214471577e-5,-4.889247071998724e-10,9.163971548837643e-4,2.795307226790254e-5,-5.570122799444724e-10,9.167240149473723e-4,2.8177711329907586e-5,-6.554310086134877e-10,9.169794235753807e-4,2.8439962674449603e-5,-7.720472188029496e-10,9.171519825482253e-4,2.870402885777489e-5,-8.905750008556582e-10,9.172436935254598e-4,2.8929649817970348e-5,-9.925419838939779e-10,9.172722940063046e-4,2.9078832692983632e-5,-1.0603291660817625e-9,9.172706400546866e-4,2.912409780548574e-5,-1.080924584550345e-9,9.17282157849279e-4,2.9056323329246427e-5,-1.0495469582952546e-9,9.17352548715972e-4,2.8889652042343435e-5,-9.719977617501207e-10,9.175193386587934e-4,2.8661331040972106e-5,-8.647637143988589e-10,9.178017998224793e-4,2.842566755332037e-5,-7.524533284368034e-10,9.181939299909826e-4,2.824278153652306e-5,-6.627971222401617e-10,9.186627846165465e-4,2.8164133229208014e-5,-6.200278774014088e-10,9.19153691738718e-4,2.8217986087638425e-5,-6.380459293784765e-10,9.196025451004935e-4,2.8398984740483134E-05,-7.153326477966576e-10,9.199531003263491e-4,2.8666337663424036e-5,-8.338087002295918e-10,9.201741950295597e-4,2.8953522843619235e-5,-9.631226655409933e-10,9.202698561839225e-4,2.918802920852016e-5,-1.0697405631849333e-9,9.202770539297086e-4,2.9313951870328424e-5,-1.1274657767908662e-9,9.20251788073042e-4,2.9307694253609973e-5,-1.1248038587933661e-9,9.202503631241845e-4,2.918064509705824e-5,-1.0663142394564279e-9,9.203142811661418e-4,2.897003743896867e-5,-9.68530131895985e-10,9.204634699590332e-4,2.8724513202568727e-5,-8.534492296718607e-10,9.206973132387841e-4,2.849110787091789e-5,-7.426352211365498e-10,9.209999773637789e-4,2.8307067355278376e-5,-6.534492842105844e-10,9.213465790289916e-4,2.8196472237938423e-5,-5.974035621587512e-10,9.21708293335506e-4,2.8169942280115928e-5,-5.798940312517992e-10,9.220560080914304e-4,2.8225631349565033e-5,-6.005462214024394e-10,9.223629986190541e-4,2.8350410654034294e-5,-6.536955210792199e-10,9.226073866112044e-4,2.8520935298446312e-5,-7.28851240962084e-10,9.227750120124014e-4,2.8705005688838147e-5,-8.113094184352923e-10,9.228628541636617e-4,2.886416079327547e-5,-8.833278120249603e-10,9.228823589672353e-4,2.895853283479903e-5,-9.263428574000358e-10,9.228611534120579e-4,2.8954410829763517e-5,-9.244525203760215e-10,9.22841094274703e-4,2.8833597004887607e-5,-8.687589669821464e-10,9.228711087655056e-4,2.860178543460586e-5,-7.612984631604381e-10,9.229952903879357e-4,2.8291928119182712e-5,-6.167002132570091e-10,9.232395355675018e-4,2.7959342967609063e-5,-4.600776629160696e-10,9.236018170315074e-4,2.766851040299726e-5,-3.211006337196332e-10,9.240504121843283e-4,2.7475443382623978e-5,-2.2596816610665073e-10,9.24531262399518e-4,2.741170749626898e-5,-1.8999789985040983e-10,9.249820629694834e-4,2.747542499218661e-5,-2.1326498107148244e-10,9.25348579660942e-4,2.7631811895541113e-5,-2.805432543382063e-10,9.255984900902482e-4,2.7822723222327646e-5,-3.6544697746303546e-10,9.257290496695094e-4,2.798233184373522e-5,-4.3755816439126784e-10,9.25766534088789e-4,2.80545120609564e-5,-4.705154590635174e-10,9.257576987930197e-4,2.800685278340508e-5,-4.4865598588417815e-10,9.257561138535627e-4,2.7837106293070436e-5,-3.701910247767966e-10,9.258080615404461e-4,2.757056376533481e-5,-2.4616627976356377e-10,9.259425348434525e-4,2.7250326470559132e-5,-9.609656809923689e-11,9.261676807511085e-4,2.6924824434891593e-5,5.773311606893498e-11,9.264731188036599e-4,2.663697142690499e-5,1.9528968966108854e-10,9.268356351407438e-4,2.6417432659609167e-5,3.019901995562894e-10,9.272255509647921e-4,2.6282152592361178e-5,3.6997091936557287e-10,9.276120574189009e-4,2.6232846291373425e-5,3.9797540595297546e-10,9.279670116931762e-4,2.6258881085469936e-5,3.9055441141759986e-10,9.282675227858236e-4,2.633942937784366e-5,3.570959163618194e-10,9.284980234511821e-4,2.644547284239765e-5,3.109050504872678e-10,9.286524796636579e-4,2.654193492234242e-5,2.6822927772623276e-10,9.287369625751979e-4,2.6590780100069592e-5,2.468431766251289e-10,9.287720369209947e-4,2.6556135305642376e-5,2.636822102111064e-10,9.287934339306461e-4,2.6412028824363202e-5,3.312264037819188e-10,9.288486997992517e-4,2.6151880961107663e-5,4.530300718778846e-10,9.289878720362526e-4,2.5796515725207018e-5,6.199146734068698e-10,9.292487589067231e-4,2.5395465656098757e-5,8.092647167352129e-10,9.29641666352082e-4,2.5017209649756432e-5,9.894516360464816e-10,9.301413876496481e-4,2.472917795980915e-5,1.1290141747255939e-9,9.306922559167429e-4,2.4575229989538544e-5,1.2070780979559616e-9,9.312251819721861e-4,2.4561109000296633e-5,1.2202059312944135e-9,9.316789667520669e-4,2.465414560968802e-5,1.1827604254879246e-9,9.320169043861123e-4,2.479571175444768e-5,1.1213819953507269e-9,9.322336847376593e-4,2.4919677271373376e-5,1.0666004249723868e-9,9.323526991819391e-4,2.496981318218703e-5,1.044792681412822e-9,9.324168167771345e-4,2.4911728305382368e-5,1.072537792680831e-9,9.324763341556606e-4,2.473779692662344e-5,1.1541348440936524e-9,9.32577287240139e-4,2.446550131433796e-5,1.2821529509168165e-9,9.327524775390439e-4,2.4130741138395573e-5,1.440358563370683e-9,9.330166395630526e-4,2.3778318046824064e-5,1.608044416470438e-9,9.333661039477023e-4,2.345210977652227e-5,1.7646106799430005e-9,9.337821762564567e-4,2.3187164366326925e-5,1.8933448565731633e-9,9.342366534787011e-4,2.3004991867956138e-5,1.983756984261391e-9,9.346977645863617e-4,2.2912152275451638e-5,2.0323646948176415e-9,9.351352665974508e-4,2.2901360219547865e-5,2.0422501912195693e-9,9.355241516458479e-4,2.2953966611580642e-5,2.021915505548688e-9,9.358471024062418e-4,2.3042848220487e-5,1.983917263664366e-9,9.360962029673838e-4,2.313526295966051e-5,1.9435240421953627e-9,9.362744148421519e-4,2.319579877368126e-5,1.9173555450183216e-9,9.363970340869479e-4,2.3190008396632788e-5,1.921714213936969e-9,9.364926985739199e-4,2.3089580081948874e-5,1.970175219873316e-9,9.366025595028989e-4,2.287954350737153e-5,2.070174683549589e-9,9.367754583789063e-4,2.256662486320555e-5,2.219009962619075e-9,9.370572543760401e-4,2.2185503816041416e-5,2.40080151825208e-9,9.374749898088448e-4,2.179746684581724e-5,2.5870254829646286e-9,9.380215496738124e-4,2.1476617739059208e-5,2.7428988022427817e-9,9.386504920238448e-4,2.1285143976963856e-5,2.8389345262250392e-9,9.392879545260637e-4,2.124847926412409e-5,2.8626284858923288e-9,9.398581363504856e-4,2.1344635824425707e-5,2.8236063659948714e-9,9.403092110193681e-4,2.1513973951784947e-5,2.749245885993131e-9,9.406269138130842e-4,2.1682634723939766e-5,2.67386501863676e-9,9.408323763286779e-4,2.178648157968665e-5,2.6275885831474924e-9,9.409696504997068e-4,2.1786146578814432e-5,2.6292808737827737e-9,9.410906514838015e-4,2.1671298131321062e-5,2.6844268786052037e-9,9.41242649635597e-4,2.145702236312698e-5,2.786633456564728e-9,9.414601509848395e-4,2.1176178630965497e-5,2.9210047073092557e-9,9.417610200086401e-4,2.0870608445111807e-5,3.0681179766648086e-9,9.421460370053103e-4,2.0582809873944577e-5,3.207899651127782e-9,9.426010936837508e-4,2.0348968697412414e-5,3.3229824926066307e-9,9.431012540259686e-4,2.0193985304551373e-5,3.401195641488044e-9,9.436158120570794e-4,2.012884842892798e-5,3.436951038320817e-9,9.441134784478598e-4,2.015031500623975e-5,3.4314859276191417e-9,9.44566950904901e-4,2.0242534645964484e-5,3.3921135298370826e-9,9.449563631171996e-4,2.0379982085524475e-5,3.330805785534591e-9,9.45271517348029e-4,2.0530961708450033e-5,3.2625023737391606e-9,9.455131621575188e-4,2.0661233197895548e-5,3.203395247216593e-9,9.456936234191719e-4,2.0737740900431553e-5,3.1692023079153e-9,9.458369007988554e-4,2.073272466669384e-5,3.1732674706314038e-9,9.459779040524844e-4,2.0628653770206123e-5,3.224233945190357e-9,9.461597634391267e-4,2.0424167988906754e-5,3.3231751090821356e-9,9.46427574458297e-4,2.014003684687474e-5,3.4606600272122213e-9,9.468173676227388e-4,1.98221812789624e-5,3.615192303367057e-9,9.473413942934375e-4,1.9537012097558103e-5,3.755318583394564e-9,9.479753457182548e-4,1.9355058402098106e-5,3.847349600926752e-9,9.486571399076209e-4,1.9325058394134616e-5,3.867688552958027e-9,9.493040520760504e-4,1.9450539767815956e-5,3.814066075128484e-9,9.498430651538646e-4,1.9684623094334385e-5,3.7081770948540923e-9,9.502378728614017e-4,1.994861501821484e-5,3.5870008241428506e-9,9.504975307118342e-4,2.01632840220824e-5,3.4880374073031084e-9,9.506654032765242e-4,2.0274709481559317e-5,3.437068799563959e-9,9.507989420812344e-4,2.0264365859063468e-5,3.4433449550727618e-9,9.509516863480496e-4,2.0145143002205663e-5,3.5013586813003237e-9,9.511626032896819e-4,1.9950604861647016e-5,3.595755007819909e-9,9.514523625841899e-4,1.972359867900281e-5,3.7065483148110366e-9,9.518240846294337e-4,1.9507126203245064e-5,3.813351896094841e-9,9.522662841079077e-4,1.933798514493866e-5,3.898421280054506e-9,9.527567177104721e-4,1.9242649321887765e-5,3.94873970416592e-9,9.532666534200279e-4,1.9234898009828817e-5,3.9573083496472175e-9,9.537653046836214e-4,1.931500888982162e-5,3.923656171525834e-9,9.542241491314553e-4,1.9470419469034043e-5,3.853573929853045e-9,9.546208269205008e-4,1.967778168597357e-5,3.758113485784791e-9,9.549422337944906e-4,1.990624356532854e-5,3.6519733720235854e-9,9.551864658672643e-4,2.012153016907811e-5,3.5515235649189295e-9,9.553635348866212e-4,2.029033148993112e-5,3.4727284456947125e-9,9.554949463176509e-4,2.0384734278047446e-5,3.429079651875691e-9,9.55612166139684e-4,2.03866030610309e-5,3.4295402733541126e-9,9.557537872596488e-4,2.029183687422643e-5,3.4764900665650733e-9,9.559608378031081e-4,2.0114246891201803e-5,3.563775485379721e-9,9.562694312086343e-4,1.988802000189864e-5,3.6753836672060575e-9,9.567005353306505e-4,1.9666425812314765e-5,3.785918859393363e-9,9.572485741343938e-4,1.951354653734905e-5,3.864486310112931e-9,9.57873847869679e-4,1.9487015195238054e-5,3.8829949935352816e-9,9.58506375185627e-4,1.961495423927636e-5,3.827353654574862e-9,9.590658554599388e-4,1.9878214338844435e-5,3.706183686441474e-9,9.59491778185771e-4,2.021167822462048e-5,3.5503480856677113e-9,9.597671996149698e-4,2.0528378965229346e-5,3.4014299519401243e-9,9.599217284447296e-4,2.0753552855409916e-5,3.295380207449077e-9,9.600140258223889e-4,2.084893939258985e-5,3.2508500223577976e-9,9.601071466008167e-4,2.081721898662703e-5,3.2670417811981256e-9,9.602500853369318e-4,2.0691028420511654e-5,3.3288768573415605e-9,9.604701387776805e-4,2.051709319339869e-5,3.4144264007709955e-9,9.60773545484276e-4,2.034297332174702e-5,3.501100421052396e-9,9.611500679665309e-4,2.0208786324005668e-5,3.569552864573399e-9,9.615783591656324e-4,2.014318881895291e-5,3.6056735200335207e-9,9.620307130834803e-4,2.0161937110386437e-5,3.6014269400379457e-9,9.62477113531018e-4,2.0267731706648574e-5,3.5550823882264824e-9,9.628889049217328e-4,2.0450864920827385e-5,3.4710012484743916e-9,9.632422415170349e-4,2.069066577730867e-5,3.3589647822421636e-9,9.635212754316284e-4,2.0957906935666852e-5,3.2329849290971195e-9,9.637208099389389e-4,2.1218360815741975e-5,3.1095519476630494e-9,9.638478893925641e-4,2.143740445538196e-5,3.0054061149790872e-9,9.639218361763492e-4,2.158517204251695e-5,2.9350831633136274e-9,9.639725275225862e-4,2.164161332623286e-5,2.9085171189180765e-9,9.64036920303166e-4,2.1600821946777073e-5,2.928960887667208e-9,9.641539462469475e-4,2.1473982466179215e-5,2.991503500896854e-9,9.643579665181983e-4,2.129029021121154e-5,3.0824929931979146e-9,9.646710825382556e-4,2.1095019009386883e-5,3.180304929063653e-9,9.650951414487477e-4,2.0943493593642626e-5,3.2581268817857795e-9,9.656055505064805e-4,2.08898021785074e-5,3.2893920797482204e-9,9.661506527532753e-4,2.0970707862049013e-5,3.2556740154475738e-9,9.666609700686485e-4,2.1188936127107843e-5,3.154989219151684e-9,9.670695157136533e-4,2.1504456001118907e-5,3.0062342252277902e-9,9.673367523603838e-4,2.1842686062608042e-5,2.8453160317467475e-9,9.674669505838162e-4,2.2120216315934066e-5,2.7126670331229932e-9,9.675052672091475e-4,2.227588153984791e-5,2.6381300324599617e-9,9.67517310975436e-4,2.2290098639572074e-5,2.631571812351488e-9,9.675641549386202e-4,2.2184188610723864e-5,2.683192639935835e-9,9.676856175598294e-4,2.20050732406217e-5,2.770831293998539e-9,9.678958345343047e-4,2.1806797104405777e-5,2.8687326779884426e-9,9.681874796128061e-4,2.1636899335670483e-5,2.953998363007588e-9,9.685391645791842e-4,2.152957275673156e-5,3.00987037631748e-9,9.689223645110006e-4,2.150393434528262e-5,3.0266647100820593e-9,9.693065461435913e-4,2.1564905127593073e-5,3.0015027830697376e-9,9.696627464705727e-4,2.170489096403e-5,2.9376390040777005e-9,9.699663713453124e-4,2.190558400417185e-5,2.843664610904784e-9,9.701997585934131e-4,2.213998368625858e-5,2.732536103734538e-9,9.703546573483743e-4,2.2375052452482884e-5,2.6202568912921775e-9,9.704343769114892e-4,2.2575473791547756e-5,2.524023751178972e-9,9.70454924970594e-4,2.2708679506424222e-5,2.4597828841057676e-9,9.704442684490575e-4,2.2750680548228815e-5,2.4394191096140195e-9,9.70439123002729e-4,2.269163919856002e-5,2.4680675742140396e-9,9.704792630519241e-4,2.2539791907013454e-5,2.542185695856593e-9,9.706000419416595e-4,2.2322356320565065e-5,2.6490241837254375e-9,9.708244225247657e-4,2.208254490993235e-5,2.7679330778128663e-9,9.711561348596273e-4,2.1872563135784633e-5,2.8736116004682885e-9,9.715756674472968e-4,2.1743144202396543e-5,2.9411105609226534e-9,9.720408542324096e-4,2.1730926538918943e-5,2.952015717458691e-9,9.724936339510598e-4,2.1846219921065344e-5,2.9005828036571425e-9,9.728734724452532e-4,2.206526684943893e-5,2.797753482524233e-9,9.73135268736305e-4,2.2331915022099625e-5,2.670534930423955e-9,9.732656869873846e-4,2.2571721047228047e-5,2.5551777813643346e-9,9.732896097496811e-4,2.2715649390846857e-5,2.4855509251822116e-9,9.732616414073596e-4,2.272350320648063e-5,2.481624710067114e-9,9.732459633450723e-4,2.2595527734851322e-5,2.5437609524692543e-9,9.732948670608518e-4,2.2367393624596813e-5,2.6551037957679194e-9,9.73435775314028e-4,2.2093662920085047e-5,2.7895237218060307e-9,9.736697513088091e-4,2.18295826774539e-5,2.9203430820786453e-9,9.739779823635234e-4,2.1618463822268142e-5,3.0263986928152343e-9,9.743307630656896e-4,2.14864286442583e-5,3.094632000552376e-9,9.746951934172733e-4,2.1442559653592196e-5,3.120143478228777e-9,9.75040337470858e-4,2.1481561948537084e-5,3.105047155900916e-9,9.753402753088035e-4,2.1586872020260996e-5,3.0570669881734935e-9,9.755760407850127e-4,2.1733399542332765e-5,2.9882432258541283e-9,9.757372606998641e-4,2.1890007987213578e-5,2.913710103700545e-9,9.758238522467932e-4,2.2022308074060718e-5,2.8502981225779335e-9,9.758475695193567e-4,2.2096463822383953e-5,2.814649675643213e-9,9.75832592759985e-4,2.208441265972937e-5,2.8206647589847394e-9,9.758139779570534e-4,2.1970120824932505e-5,2.8764536267483205e-9,9.758329513980938e-4,2.1755459239150598e-5,2.9814657729990575e-9,9.759289405456378e-4,2.146343405290607e-5,3.1248755506446147e-9,9.761297562449015e-4,2.1136469459250627e-5,3.2863308207215907e-9,9.764427844228285e-4,2.0828722875066234e-5,3.4395760619971846e-9,9.768504235625822e-4,2.05936578116549e-5,3.558401665094199e-9,9.773119310828517e-4,2.047011212383905e-5,3.623414500991834e-9,9.777718670258082e-4,2.0470907088346007e-5,3.627703453703138e-9,9.781733258317801e-4,2.057752945621449e-5,3.5796494003707138e-9,9.784727031122457e-4,2.0742968740602736e-5,3.501766797457081e-9,9.786520083386822e-4,2.090280873294008e-5,3.4254174178099575e-9,9.787247391817811e-4,2.099234249163606e-5,3.3824366972435045e-9,9.787325073239532e-4,2.0964978181006943e-5,3.3960258792809006e-9,9.787325574450096e-4,2.080554329966027e-5,3.474116418782361e-9,9.78780386798012e-4,2.053316629811452e-5,3.607853339306525e-9,9.78914283306498e-4,2.0192836373745813e-5,3.7756288344559166e-9,9.79147450149718e-4,1.9840040928541138e-5,3.9505044744465266e-9,9.794691393037586e-4,1.9525344833017023e-5,4.107694790089413e-9,9.798520178516646e-4,1.928413468832371e-5,4.229601723499455e-9,9.802613780058582e-4,1.9132999458968806e-5,4.30768523320254e-9,9.806628425931363e-4,1.9071152761889917e-5,4.341903576740723e-9,9.810273134182267e-4,1.9084239326578834e-5,4.338962357581536e-9,9.81333537072951e-4,1.9148443642578993e-5,4.310353550740631e-9,9.81569296115634e-4,1.9233976343823555e-5,4.2706388260183405e-9,9.817321483998952e-4,1.9307966381521585e-5,4.235993167701627e-9,9.81830219636952e-4,1.933733918927407e-5,4.222757802688705e-9,9.818829501630556e-4,1.9292467400002797e-5,4.245632427234919e-9,9.819209964844942e-4,1.9152168044642423e-5,4.315222825428222e-9,9.8198392831691e-4,1.890983975966044e-5,4.435029642934434e-9,9.821143377150008e-4,1.857919889488635e-5,4.59861659028588e-9,9.823480141006478e-4,1.819663416702158e-5,4.788408783691395e-9,9.827021678395676e-4,1.781681352429813e-5,4.977767747591471e-9,9.8316630954625e-4,1.750019208422675e-5,5.1370239028109335e-9,9.837010460599907e-4,1.729533464359589e-5,5.242087342349132e-9,9.842471758127079e-4,1.722284340206006e-5,5.282365711457081e-9,9.847423799112572e-4,1.7267922501442923e-5,5.2645551112541595e-9,9.851390392167326e-4,1.7384650541422545e-5,5.210737350473865e-9,9.85416712413494e-4,1.7509721680699187e-5,5.151788515618179e-9,9.855858656559924e-4,1.7580163367743918e-5,5.118732221992248e-9,9.856830005405348e-4,1.754937325800318e-5,5.134813103943706e-9,9.857596419803308e-4,1.7397498039928058e-5,5.210281577132254e-9,9.858686370143312e-4,1.7134242430752782e-5,5.340872784086539e-9,9.860514093620037e-4,1.6794137806137563e-5,5.509998145968244e-9,9.863293550422345e-4,1.6426136917274978e-5,5.693759305662125e-9,9.867012674118518e-4,1.6080882897378395e-5,5.867166202605813e-9,9.871466831850105e-4,1.5799461394281728e-5,6.009706321470195e-9,9.876331363464859e-4,1.560644168178504e-5,6.108876220456722e-9,9.881244546795737e-4,1.5508013115131364e-5,6.16123561320287e-9,9.885877203164924e-4,1.5494168132305846e-5,6.1714423956312695e-9,9.889977731607897e-4,1.554301218967708e-5,6.150173958810571e-9,9.89339357154404e-4,1.5625438489487203e-5,6.11180328305642e-9,9.896077069428486e-4,1.5709163928471263e-5,6.072354236231378e-9,9.898084641090051e-4,1.5761986455145772e-5,6.047846128949401e-9,9.89957481892549e-4,1.575472773264608e-5,6.052821432389052e-9,9.900805416390554e-4,1.5664564164811243e-5,6.098708901861965e-9,9.902123484409752e-4,1.5479331179479615e-5,6.191709401312268e-9,9.903935258545628e-4,1.5202748222706768e-5,6.33020714370356e-9,9.906641160678208e-4,1.4859172652645127e-5,6.502381741232603e-9,9.910530106883304e-4,1.4494749524882107e-5,6.685572808518867e-9,9.915653761885476e-4,1.4170939529055735e-5,6.8494023081549725e-9,9.92173804543939e-4,1.3948485846748767e-5,6.963646567409606e-9,9.92820439606734e-4,1.3865800846189006e-5,7.008937764536123e-9,9.934330686488335e-4,1.3922023616282452e-5,6.98524850756154e-9,9.939493480964887e-4,1.4075052891534514e-5,6.91302227434678e-9,9.943372374337234e-4,1.4256527274009431e-5,6.825888020437902e-9,9.946022722861765e-4,1.4395571285888233e-5,6.75895614654633e-9,9.947808856143072e-4,1.4439740434982362e-5,6.738430832136037e-9,9.949257957257986e-4,1.4366093115323758e-5,6.776065172871318e-9,9.950905167510095e-4,1.418186073054903e-5,6.868729017701459e-9,9.953173989064848e-4,1.391790875148587e-5,7.001518418367263e-9,9.95630713119781e-4,1.3618756991412558e-5,7.152573416875709e-9,9.960345799292754e-4,1.3332040182830323e-5,7.29822948174995e-9,9.965148922381106e-4,1.3099245727471433e-5,7.4176277467670906e-9,9.970441941477112e-4,1.294893783688122e-5,7.496180701557594e-9,9.975882397394037e-4,1.2893264734091967e-5,7.527452492986098e-9,9.98112746713271e-4,1.2927881166143136e-5,7.513323955728468e-9,9.985890416039868e-4,1.3034634044303174e-5,7.462717843178684e-9,9.98997826875862e-4,1.3185900947308538e-5,7.389423516943071e-9,9.993309205324102e-4,1.3349405125668461e-5,7.3096360810763596e-9,9.99591375901445e-4,1.3492586365441474e-5,7.2397137309556e-9,9.99792668555754e-4,1.3586170648049899e-5,7.19436794380859e-9,9.999574846180697e-4,1.3607159236305784e-5,7.185183536470915e-9,0.0010001162353076604,1.3541721843540724e-5,7.219205045654568e-9,0.0010003049165363592,1.3388426048463978e-5,7.297338394204071e-9,0.0010005613623854227,1.3161776667357265e-5,7.4125560623676355e-9,0.0010009186855654698,1.2894930291567578e-5,7.548472365832492e-9,0.001001395431805748,1.2638913929780974e-5,7.679645009834532e-9,0.0010019842716833783,1.2454704246940159e-5,7.775465670467849e-9,0.0010026447567112351,1.2396089240531763e-5,7.80872345265965e-9,0.0010033080233894881,1.2487217081785896e-5,7.766920829338294e-9,0.0010038972478855197,1.2706548445498057e-5,7.660458605367358e-9,0.0010043565504526115,1.2989946449421098e-5,7.521224770364038e-9,0.001004672231437384,1.3254551939388285e-5,7.390681026669133e-9,0.0010048741581043606,1.3430195374539308e-5,7.304097230213788e-9,0.001005019125368549,1.3480998017901777e-5,7.27969563649755e-9,0.001005168386359312,1.340941335065461e-5,7.316596454133312e-9,0.0010053704906546521,1.3246930061867809e-5,7.3994046186029145e-9,0.0010056532197300141,1.3040000118914438e-5,7.505138119129774e-9,0.0010060229091539998,1.2837303701281687e-5,7.609490773330097e-9,0.0010064679702872599,1.2680694358525935e-5,7.691325334965295e-9,0.00100696410900686,1.2599802055308625e-5,7.73543576837147e-9,0.0010074799303969257,1.2609453088105831e-5,7.733972018905462e-9,0.0010079824262810555,1.270927137545503e-5,7.68678360040066e-9,0.001008441983199197,1.2885166585695294e-5,7.600766502657164e-9,0.0010088364680810365,1.3112382500046945e-5,7.488348827427479e-9,0.0010091540147537904,1.3359627618872047e-5,7.365366043977686e-9,0.0010093942793346546,1.3593707411098743e-5,7.248659658443538e-9,0.0010095681767792678,1.3783993741249416e-5,7.15377885761242e-9,0.0010096964280629517,1.3906222158150544e-5,7.093063507146875e-9,0.0010098073351207102,1.3945501108580383e-5,7.074156161434548e-9,0.001009933998475673,1.3898670498425644e-5,7.098839141011301e-9,0.0010101108925560731,1.3776156395851466e-5,7.162087545997906e-9,0.0010103693537762879,1.3603229200616472e-5,7.2513716092129284e-9,0.001010731370310706,1.3419833637562037e-5,7.3466457393835305e-9,0.0010112016762827962,1.3277108498864683e-5,7.422018074019115e-9,0.0010117598625822178,1.3228209751310446e-5,7.450356500270065e-9,0.0010123568768607588,1.3312347000828476e-5,7.411421404428368e-9,0.0010129222480500654,1.3535582819181508e-5,7.301724939909382e-9,0.001013385331984101,1.3858804132080293e-5,7.140781390672817e-9,0.001013703707706818,1.4205000113155494e-5,6.967497490960027e-9,0.0010138822454817784,1.448749274687313e-5,6.825833236491937e-9,0.0010139696115598694,1.464433393257325e-5,6.747309515966404e-9,0.001014034960781267,1.4658559233696529e-5,6.740744459985028e-9,0.0010141406929217946,1.4555765436898252e-5,6.793498539548968e-9,0.0010143254890754552,1.4386576477060897e-5,6.880297884166936e-9,0.0010146008251386124,1.420706593101242e-5,6.973012537470857e-9,0.0010149561275081414,1.4065065181815716e-5,7.047465907773897e-9,0.00101536675460542,1.3993570240248546e-5,7.0867457546242325e-9,0.0010158013574818438,1.4009210516690739e-5,7.0820601273590445e-9,0.0010162275161801665,1.4113340727320419e-5,7.032323770553171e-9,0.0010166159146742558,1.429419134817385e-5,6.943198192930504e-9,0.0010169435907143895,1.4529570251940101e-5,6.825790427443894e-9,0.001017196458485237,1.4790107827825064e-5,6.695003258799705e-9,0.0010173710222833715,1.5043063994411697e-5,6.5675509780237646e-9,0.0010174750556951806,1.5256600380969255e-5,6.459732390817189e-9,0.001017526963278131,1.5404159828331004e-5,6.385177403566588e-9,0.0010175537373666459,1.5468376233596634e-5,6.352868110860509e-9,0.001017587717364337,1.544402654131814e-5,6.365661713647204e-9,0.0010176624605994554,1.5339717534360233e-5,6.419435210938414e-9,0.0010178080063839555,1.5178075945731396e-5,6.502944076621323e-9,0.0010180457452669584,1.4994254410299033e-5,6.598491835633543e-9,0.001018383064035031,1.4832381264038678e-5,6.6836353960864175e-9,0.0010188083316972948,1.47391332796154e-5,6.734397667122887e-9,0.0010192878609278002,1.475363974145172e-5,6.730438678602947e-9,0.0010197678046505864,1.4894272655654495e-5,6.661915015952189e-9,0.00102018443463024,1.5145950174105276e-5,6.5361350999692345e-9,0.0010204836747962334,1.5455522234757765e-5,6.380048705078234e-9,0.0010206437243931602,1.5743334912936524e-5,6.2343512371156256e-9,0.0010206877187796243,1.5931055263172206e-5,6.139179160224897e-9,0.0010206758978202743,1.5972669549953236e-5,6.118206896081988e-9,0.0010206802785743953,1.587040614601252e-5,6.170538509004209e-9,0.0010207572457502255,1.5667653115910527e-5,6.274358304487625e-9,0.0010209325449119094,1.5426977239675342e-5,6.398084889086976e-9,0.0010212017498908892,1.520786821074164e-5,6.511580983868921e-9,0.0010215398590799887,1.5053291656116975e-5,6.5929010127443566e-9,0.001021912431934167,1.498569502034724e-5,6.630329259183798e-9,0.0010222841435015692,1.5008880327172054e-5,6.621529648464819e-9,0.0010226239917599095,1.5112068113238198e-5,6.571614831742929e-9,0.0010229080944826484,1.527401144689631e-5,6.491159177179544e-9,0.0010231212780165244,1.5466570242856973e-5,6.394419794620523e-9,0.001023258140679252,1.565799311163615e-5,6.29764201481796e-9,0.001023323723746117,1.581631986787821e-5,6.217269214912676e-9,0.0010233335657502231,1.5913194832607108e-5,6.1679458224003706e-9,0.001023312652942418,1.592801691867029e-5,6.160375068918902e-9,0.0010232928007281963,1.5851837316847298e-5,6.199331981376249e-9,0.0010233083950897286,1.5690131829775294e-5,6.282255337576482e-9,0.0010233908943278179,1.5463603240336597e-5,6.398818557630599e-9,0.0010235628682748299,1.5206365333078503e-5,6.531796793225194e-9,0.001023832615986048,1.4961295414609502e-5,6.659351030318273e-9,0.0010241904386357422,1.4772889164037382e-5,6.75860252344733e-9,0.001024607567166903,1.4678269177210256e-5,6.810218842264442e-9,0.001025038835875019,1.4697338813962965e-5,6.803536849223181e-9,0.0010254302198467145,1.4824014543455562e-5,6.7412161836967475e-9,0.001025731571596928,1.5021882123837198e-5,6.641636326261475e-9,0.0010259126052034333,1.522848767407803e-5,6.536783150416774e-9,0.0010259765363499528,1.5370953906319304e-5,6.464197088487894e-9,0.0010259633245588596,1.5390062552732196e-5,6.454503675266422e-9,0.0010259374918061134,1.5262568774086813e-5,6.519889575291671e-9,0.0010259645518792863,1.5009405517106155e-5,6.649894303135918e-9,0.0010260881771412683,1.4685110812366908e-5,6.816835676346961e-9,0.0010263193576777233,1.4355638624471758e-5,6.98711790063453e-9,0.0010266398889383535,1.4077159844329356e-5,7.1319926882616635e-9,0.001027014226018415,1.388425288732607e-5,7.2335633845970444e-9,0.0010274020414492461,1.3788133610311604e-5,7.285745723386852e-9,0.0010277670997235588,1.378095198171993e-5,7.292187151879546e-9,0.0010280818168414282,1.384189253769118e-5,7.263261955630348e-9,0.0010283288268859772,1.3942614549109414e-5,7.213352520340318e-9,0.0010285011445110084,1.405139140764495e-5,7.158731665697266e-9,0.0010286019408435882,1.413632711989153e-5,7.115870597147311e-9,0.0010286442540053864,1.4168322568558104e-5,7.09986088584424e-9,0.0010286504037499457,1.4124365397943462e-5,7.12268504128625e-9,0.0010286504791455998,1.3991292700524017e-5,7.191271681234185e-9,0.0010286791648484964,1.3769478993510954e-5,7.3056080066068604e-9,0.0010287705469715204,1.3475266008978337e-5,7.457494460578409e-9,0.001028951327632887,1.3140689311306862e-5,7.630660550566689e-9,0.0010292338285229816,1.280935564220711e-5,7.802822009644976e-9,0.0010296108825569928,1.2528353458002378e-5,7.949760843038067e-9,0.0010300546940236487,1.233759347627838e-5,8.050755726164393e-9,0.0010305208273311641,1.2259178009605778e-5,8.094075186049836e-9,0.0010309570900584187,1.2289732755782155e-5,8.08103476461809e-9,0.0010313157392175553,1.239822992254162e-5,8.027273387668908e-9,0.0010315663465513536,1.2530919495367793e-5,7.960336714121893e-9,0.0010317058209335492,1.2623500762804774e-5,7.913435014428099e-9,0.001031761762409121,1.2618455216019864e-5,7.916445804350526e-9,0.0010317863213620134,1.2482715648861428e-5,7.986708154305847e-9,0.0010318409415092163,1.2218875567850196e-5,8.123174915224233e-9,0.0010319770490094284,1.1864341225077265e-5,8.306813126168584e-9,0.00103222073763433,1.1478137897328902e-5,8.507363432120657e-9,0.001032567744181653,1.1121486498340977e-5,8.693293502779717e-9,0.001032989301697024,1.084087419509298e-5,8.840491614529463e-9,0.0010334441429188832,1.065944919603051e-5,8.936740074754993e-9,0.0010338905402688494,1.0577173083741774e-5,8.981736505163395e-9,0.0010342945423151325,1.0576383955421915e-5,8.98433665789792e-9,0.00103463375858786,1.0628837350001691e-5,8.958991422832772e-9,0.0010348979793146607,1.0701777354861157e-5,8.922621233770985e-9,0.0010350882727302663,1.0762337371071754e-5,8.89230185881902e-9,0.0010352157191526022,1.0780632780980312e-5,8.883608858628518e-9,0.0010353002554859072,1.0732303407048932e-5,8.90925860516677e-9,0.0010353694431257166,1.0601227344865006e-5,8.977690201699487e-9,0.0010354564618759658,1.0382697470573208e-5,9.09143350297743e-9,0.0010355964502504992,1.008658752883728e-5,9.245490273873833e-9,0.00103582062126145,9.739174784541215e-6,9.426394426544935e-9,0.001036148531357024,9.381685552026843e-6,9.612933762557046e-9,0.001036580411402926,9.063860868442835e-6,9.779418101910907e-9,0.0010370928511063498,8.832500434599207e-6,9.901545674027221e-9,0.0010376410685493903,8.717740287966906e-6,9.963490318062588e-9,0.001038168776362179,8.722090107823838e-6,9.963639543713632e-9,0.001038623174432724,8.817117820241822e-6,9.916433090139891e-9,0.0010389699638132367,8.949806345046257e-6,9.849185263172341e-9,0.0010392031310252545,9.056681538401306e-6,9.794814136056429e-9,0.0010393464417650642,9.081041880969784e-6,9.7828832107339e-9,0.0010394465445357972,8.98803121924295e-6,9.831716602058708e-9,0.0010395599652596504,8.773379181090786e-6,9.943793307826468e-9,0.0010397377850124105,8.463527638538071e-6,1.010562028455275e-8,0.0010400124740567555,8.107264085356009e-6,1.0292016552047566e-8,0.0010403907983126954,7.761647465210934e-6,1.047336668482392e-8,0.0010408546068110553,7.476975351250501e-6,1.0623406725890964e-8,0.0010413683448417354,7.285608742141655e-6,1.0725068130866081e-8,0.0010418898199738098,7.197436696745734e-6,1.077292879202111e-8,0.0010423802623030689,7.201792582882333e-6,1.0772323696065717e-8,0.0010428110604212102,7.273401012350935e-6,1.0736320365516424e-8,0.0010431666141344895,7.3794054706384364e-6,1.0682066369385867e-8,0.0010434442537033133,7.485424438284342e-6,1.062758834085327e-8,0.001043652630466233,7.559908129853109e-6,1.0589456096467488e-8,0.0010438096899647942,7.577040457584126e-6,1.0581220954317427e-8,0.0010439407598399314,7.518874452397437e-6,1.0612288493742078e-8,0.0010440766580099585,7.3774053804267025e-6,1.0686856280073861e-8,0.0010442511917944904,7.1569232978676465e-6,1.0802719477653824e-8,0.0010444971593526165,6.876269078840813e-6,1.0950114569202205e-8,0.001044840195797599,6.569674575005575e-6,1.1111270660756568e-8,0.0010452907905748228,6.284047442282688e-6,1.1261780001466925e-8,0.0010458366657182785,6.070632446913745e-6,1.1374885918198315e-8,0.0010464397212440041,5.970991705073476e-6,1.1428761032437083e-8,0.0010470419129418023,6.0012650636924906e-6,1.1414752486565529e-8,0.0010475808873286244,6.142246342171787e-6,1.134266195270011e-8,0.0010480101442759484,6.342031857499272e-6,1.1239472124113928e-8,0.0010483145665516262,6.531775462877667e-6,1.1141164514740623e-8,0.0010485141839921832,6.647674109549178e-6,1.1081204358546142e-8,0.0010486555927916323,6.649554437643226e-6,1.1080769771562399e-8,0.0010487962274780228,6.52970014858732e-6,1.1144090607712959e-8,0.001048988161110087,6.311113549640392e-6,1.1259318747852037e-8,0.001049266135585487,6.038217412853158e-6,1.140334069973273e-8,0.0010496417708631659,5.764112342343603e-6,1.1548386965958874e-8,0.001050103884713581,5.538005408647266e-6,1.1668579695155248e-8,0.0010506236688532541,5.395419538643018e-6,1.1745084312143063e-8,0.001051162793625547,5.352737678222033e-6,1.176905039772956e-8,0.0010516822059403249,5.4065291012566944e-6,1.1742069546748452e-8,0.0010521495626468031,5.5369304279269275e-6,1.1674479004989727e-8,0.0010525439851890206,5.7134564555245825e-6,1.1582329111142928e-8,0.0010528578438257308,5.9014015084172195e-6,1.1483979856274418e-8,0.0010530961263485919,6.067417747217445e-6,1.139710095373138e-8,0.0010532743691075914,6.1835874192326255e-6,1.133647354846759e-8,0.0010534160834845703,6.230045791333779e-6,1.1312589735762775e-8,0.001053550198721015,6.1966823130205854e-6,1.1330774854534354e-8,0.0010537085154161126,6.0844906794547615e-6,1.1390513063025623e-8,0.0010539227224054864,5.906847205676181e-6,1.1484802633572627e-8,0.00105422025687308,5.690435278638442e-6,1.1599668036115498e-8,0.0010546184278993171,5.4746708261865515e-6,1.1714426246353476e-8,0.001055117156275193,5.307635025766357e-6,1.1803769941651274e-8,0.001055692545616445,5.236529243510756e-6,1.184274644058134e-8,0.001056295705931545,5.292689648675187e-6,1.1814655608677331e-8,0.0010568617072468647,5.4757403210461624e-6,1.1719477956429268e-8,0.0010573293783666506,5.74604326804144e-6,1.157796966652239e-8,0.0010576645165347547,6.033560344798371e-6,1.1427058221344922e-8,0.0010578737870635731,6.261973517443829e-6,1.1307094518131505e-8,0.0010580009637449824,6.3760497725166996e-6,1.1247346419441141e-8,0.001058108517330219,6.358165356812837e-6,1.1257242872632262e-8,0.0010582556001528874,6.228289144348805e-6,1.1326384333356857e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json new file mode 100644 index 000000000..d7e3be98a --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":13000,"numberOfSamples":1000,"samples":[0.0010584823083198346,6.031818825503171e-6,1.14309469118811e-8,0.0010588036033781425,5.823520864538709e-6,1.1542103150393909e-8,0.0010592110744742987,5.6537248748726675e-6,1.1633248752700286e-8,0.0010596790894540058,5.559275280564943e-6,1.1684765345343194e-8,0.0010601724727019367,5.559236240846307e-6,1.1686339583847125e-8,0.0010606540091394276,5.654379293057021e-6,1.163732802349451e-8,0.0010610908819856466,5.829497270171977e-6,1.1545624012790231e-8,0.0010614594503400023,6.057715047147503e-6,1.1425423187205381e-8,0.001061747989835144,6.305862037083749e-6,1.1294367431781857e-8,0.0010619573719630783,6.539955951254238e-6,1.1170587469196216e-8,0.0010620999645025674,6.73003410085884e-6,1.107008326599654e-8,0.0010621972572704668,6.85379996171742e-6,1.1004756707165859e-8,0.0010622768540195135,6.898913123430779e-6,1.098119849532928e-8,0.0010623693266318172,6.864185869807982e-6,1.1000078885400938e-8,0.0010625050436689565,6.760079817880366e-6,1.1055907410923635e-8,0.001062710756522555,6.608668374463369e-6,1.1137052470541557e-8,0.0010630055440594903,6.442842455479279e-6,1.122613014857253e-8,0.0010633958133875673,6.303928192637586e-6,1.1301216346173524e-8,0.0010638698300656857,6.236227673998108e-6,1.1338700200742188e-8,0.0010643938207032379,6.277096687541316e-6,1.1318549017049607e-8,0.0010649135018336272,6.443029009602109e-6,1.1231761017071778e-8,0.0010653652534506645,6.716334917457601e-6,1.1087554932954997e-8,0.0010656971998236583,7.041447402084115e-6,1.0915428186536279e-8,0.0010658919742331224,7.338860744797124e-6,1.0757744815379704e-8,0.0010659770288683225,7.534292063466726e-6,1.0654138240953239e-8,0.001066013886508743,7.587831708115414e-6,1.0625935223163422e-8,0.0010660723258305996,7.506181686783977e-6,1.0669662265910576e-8,0.0010662052115061964,7.3335686443663195e-6,1.0761922260944352e-8,0.0010664358470525873,7.130863915281745e-6,1.0870481691937031e-8,0.0010667588393153595,6.955633515934309e-6,1.0964801902708683e-8,0.0010671485918925085,6.8498410434954626e-6,1.1022511941646397e-8,0.0010675694409390784,6.835426550329633e-6,1.1031759374762615e-8,0.0010679841615469535,6.915158645441867e-6,1.0990824083116765e-8,0.0010683599657830244,7.076052103195604e-6,1.0906394119921115e-8,0.0010686723933572796,7.293685466136946e-6,1.0791343615514796e-8,0.00106890765095213,7.536822311352906e-6,1.0662299642942404e-8,0.0010690635977016276,7.77211139688823e-6,1.0537115853861746e-8,0.001069149428980129,7.968577301214409e-6,1.0432429890255657e-8,0.0010691841550370862,8.101601929648258e-6,1.036149374624633e-8,0.0010691940071483454,8.156061538266819e-6,1.0332478423133815e-8,0.001069209055658057,8.128266563717782e-6,1.03474435063982e-8,0.0010692594713290538,8.026593480405271e-6,1.0402013164716527e-8,0.0010693717459872535,7.870945267100574e-6,1.0485664177770738e-8,0.0010695649713014753,7.691125951702836e-6,1.05825672334285e-8,0.0010698471837835711,7.524020444771572e-6,1.0673046459330192e-8,0.0010702118794917663,7.409199319244088e-6,1.073588364535248e-8,0.0010706353190277158,7.382260325524803e-6,1.0751866255570777e-8,0.0010710762838212979,7.465490347225327e-6,1.0708824642405977e-8,0.0010714809682874885,7.6570210693528492E-06,1.0607528738465052e-8,0.0010717954666795326,7.92266264450533e-6,1.0466162353522634e-8,0.0010719849482146093,8.197549025520211e-6,1.031948512559187e-8,0.0010720518335533688,8.403355641842077e-6,1.0209555077841326e-8,0.0010720405373210041,8.477632103826806e-6,1.0169920153450947e-8,0.001072021738228369,8.400092320472587e-6,1.021150931330851e-8,0.0010720635198379748,8.199374023477202e-6,1.0319075409549964e-8,0.0010722065788787624,7.937147885028722e-6,1.0459750886515433e-8,0.00107245583521534,7.681893768449438e-6,1.0597036740148054e-8,0.0010727875503866039,7.487659268153709e-6,1.0702071381753594e-8,0.0010731630002383215,7.384581405590331e-6,1.075864496894142e-8,0.0010735409195010803,7.379180450137632e-6,1.0763066178824929e-8,0.001073885642552888,7.459556157906894e-6,1.0721462765445143e-8,0.0010741711464074789,7.60167164073378e-6,1.064650717664984e-8,0.0010743824677307964,7.774854624539591e-6,1.05545292946971e-8,0.0010745158753886549,7.946253107214568e-6,1.0463140800736486e-8,0.0010745783975093434,8.084663970024577e-6,1.0389154063601514e-8,0.0010745867148931046,8.164015707520659e-6,1.0346669113505363e-8,0.0010745652935797434,8.166515928713906e-6,1.0345347414447921e-8,0.0010745436064007652,8.085247843115634e-6,1.0389003625916266e-8,0.001074552414002862,7.925732239563838e-6,1.04747713355022e-8,0.0010746194263179607,7.705947602888145e-6,1.0593098065321354e-8,0.0010747649179418883,7.45457851834404e-6,1.0728675241616273e-8,0.0010749978735612412,7.207509835919612e-6,1.0862287758949862e-8,0.0010753131883688583,7.0027414856204215e-6,1.0973502950806292e-8,0.0010756904320888402,6.874033979996817e-6,1.1044059873554255e-8,0.0010760947834755237,6.8436529769841505e-6,1.1061787085804026e-8,0.001076481049891446,6.914886396186059e-6,1.1024693263841812e-8,0.0010768018290682909,7.066051634150347e-6,1.0944283327208556e-8,0.0010770200321076698,7.249261634913781e-6,1.0846289489249666e-8,0.001077123420982185,7.39804993243476e-6,1.076656197635394e-8,0.0010771348797026668,7.44585714263904e-6,1.0741042838621376e-8,0.0010771101367558554,7.350779981649652e-6,1.0792371226593277e-8,0.0010771194563272597,7.114340819791003e-6,1.091978472227473e-8,0.0010772207158111727,6.781925749825741e-6,1.1098942285178267e-8,0.001077438751988009,6.423598569950669e-6,1.1292263291924475e-8,0.0010777614606054466,6.107174429654953e-6,1.1463350840217734e-8,0.001078150988925822,5.878278442603043e-6,1.1587643347827043e-8,0.0010785602961386523,5.753858224937523e-6,1.1655892460490189e-8,0.0010789465240847547,5.72623912615062e-6,1.167203738632892e-8,0.0010792781883616845,5.7715171050260465e-6,1.1648769383961856e-8,0.0010795372547668179,5.857715055435001e-6,1.1603202812664468e-8,0.001079718408317149,5.950842140755552e-6,1.1553633958985417e-8,0.0010798274054571314,6.018931123532262e-6,1.1517348515355086e-8,0.0010798793764046966,6.034916081994106e-6,1.150903056702829e-8,0.0010798970957694128,5.979082561969348e-6,1.1539400992860876e-8,0.0010799088782759599,5.841386795654391e-6,1.1613943229511664e-8,0.001079945671266815,5.6234999239785664e-6,1.1731800417280663e-8,0.0010800370563297977,5.339960624404898e-6,1.1885168170973472e-8,0.0010802063626677298,5.017558699714286e-6,1.2059638070394361e-8,0.001080465709873069,4.692281975823613e-6,1.2235836282107038e-8,0.0010808121845919524,4.403722523375394e-6,1.239241282362964e-8,0.0010812263927673289,4.1875776377249006e-6,1.2510056790341688e-8,0.0010816742755761358,4.067606126441703e-6,1.2575830541311822e-8,0.0010821124162932766,4.048764490048608e-6,1.2586910279254428e-8,0.001082496394029135,4.1132067224480435e-6,1.2552812557360103e-8,0.0010827911400719823,4.220728194789922e-6,1.2495218049522599e-8,0.0010829814407256138,4.315035608807498e-6,1.2444602628550136e-8,0.0010830795939978,4.336331558319785e-6,1.2433397469308228e-8,0.0010831263014689158,4.238515418925506e-6,1.2486625405764085e-8,0.0010831815716910997,4.005888907583e-6,1.2612831618416838e-8,0.0010833062871192334,3.6615290203470267e-6,1.2799568273597161e-8,0.0010835411795810717,3.261162454656364e-6,1.3016729071965934e-8,0.0010838933778462134,2.8737930394674124e-6,1.3227010267237029e-8,0.001084337034999438,2.5585169726812227e-6,1.3398407369065678e-8,0.0010848260137734957,2.3486087687672093e-6,1.351281176227918e-8,0.0010853104715353803,2.2479370425633493e-6,1.3567994079646327e-8,0.0010857496852788604,2.2371567972056594e-6,1.3574322546551323e-8,0.0010861181451779231,2.2837281191620208e-6,1.3549388239562281e-8,0.0010864060912470594,2.3509882779473265e-6,1.351309848109019e-8,0.001086617167375567,2.4043382300803017e-6,1.348429676688557e-8,0.0010867653789912383,2.414780175748046e-6,1.3478800918996513e-8,0.0010868723951977914,2.36090336349784e-6,1.3508287044674754e-8,0.0010869652859729975,2.230320299619587e-6,1.357949036950374e-8,0.0010870742527047388,2.0210940838380106e-6,1.3693435401754393e-8,0.0010872297036982135,1.7431263470573831e-6,1.3844706627164613e-8,0.0010874581583647045,1.4188304041524766e-6,1.4021110351396713e-8,0.0010877770309646244,1.0819285734700634e-6,1.420434005833336e-8,0.0010881892473587201,7.732394508393998e-7,1.4372250040797893e-8,0.0010886795450963712,5.330813350595426e-7,1.4502949312721697e-8,0.001089214649730255,3.9140243490344096e-7,1.458013766244398e-8,0.0010897487258969283,3.584072521389756e-7,1.459820749252219e-8,0.0010902335819651038,4.191729634013468e-7,1.4565214418600275e-8,0.0010906310187498445,5.348153076480196e-7,1.4502295396028616e-8,0.0010909236281021046,6.506177348026824e-7,1.443926695100913e-8,0.001091120685014961,7.092800663955221e-7,1.4407391615029013e-8,0.001091257136747916,6.658869235087142e-7,1.4431183604022623e-8,0.0010913854479859381,5.005821622148568e-7,1.4521478794650966e-8,0.0010915618860652314,2.251478759511052e-7,1.467185398741576e-8,0.0010918307189155313,-1.1924299742407577e-7,1.4859864732950039e-8,0.0010922113493534546,-4.734372432057817e-7,1.5053255310459487e-8,0.0010926932935980337,-7.775556028587294e-7,1.5219334684945516e-8,0.0010932410472572044,-9.877102401363634e-7,1.533407805988485e-8,0.0010938063797259453,-1.0859165470122615e-6,1.5387566050399254e-8,0.001094342455259391,-1.080589230442882e-6,1.5384321095468852e-8,0.00109481445675083,-9.995980021090122e-7,1.5339569592932147e-8,0.0010952043212414967,-8.803420527904827e-7,1.5273828324478645e-8,0.0010955103354372215,-7.608506842509845e-7,1.520800473466209e-8,0.0010957438947718288,-6.738297010954895e-7,1.516008890171015e-8,0.0010959255739260278,-6.435882030741187e-7,1.514342886133524e-8,0.0010960816844447629,-6.848008439732961e-7,1.516603611113632e-8,0.001096241543978873,-8.02004725041787e-7,1.5230321629549556e-8,0.0010964350536024304,-9.891361497491146e-7,1.5332873831182345e-8,0.0010966898752015986,-1.2290044827439803e-6,1.5464206803068726e-8,0.0010970275583669783,-1.4932930260580311e-6,1.5608784981685757e-8,0.0010974584822657629,-1.7443109645131954e-6,1.574598051452959e-8,0.0010979764965260918,-1.9399561880694465e-6,1.5852762521604583e-8,0.0010985554895813923,-2.0426623918831098e-6,1.590856103716042e-8,0.0010991510076969397,-2.031063016383569e-6,1.590164521848076e-8,0.0010997091337757634,-1.9102678540224635e-6,1.5834788151340182e-8,0.0011001814643931509,-1.7151290714917107e-6,1.5727115299126148e-8,0.0011005408546707206,-1.5028952094650604e-6,1.5610105905041306e-8,0.001100790948640354,-1.3368393448549428e-6,1.5518581808694086e-8,0.001100965184316589,-1.2672952194125447e-6,1.5480237846173764e-8,0.0011011161176956588,-1.3175209969869768e-6,1.5507843040213407e-8,0.0011012998469212088,-1.4787697248972343e-6,1.5596542078759433e-8,0.001101561065014156,-1.7146998910046917e-6,1.5726308035865734e-8,0.0011019226990827457,-1.9724071175410574e-6,1.586801490545639e-8,0.001102382007116548,-2.196363356079692e-6,1.5991084228148263e-8,0.0011029132667145561,-2.3416096021800094e-6,1.6070722292919825e-8,0.0011034757514399483,-2.38310916619068e-6,1.6093077245681256e-8,0.0011040244786115357,-2.31927776315323e-6,1.6057225467888683e-8,0.0011045205794044041,-2.1694385072843676e-6,1.597381802522786e-8,0.0011049385690624493,-1.966838354498544e-6,1.5861252045493124e-8,0.0011052692443645087,-1.750001842086337e-6,1.5740883086523665e-8,0.0011055186380034719,-1.5550353774155559e-6,1.5632734001830676e-8,0.0011057045369247066,-1.4103695910270938e-6,1.5552549745965977e-8,0.0011058522277989002,-1.3341378137981495e-6,1.551032955262108e-8,0.0011059906217503908,-1.3335025490994153e-6,1.5509962936515426e-8,0.001106149150194748,-1.404950501845874e-6,1.5549420079728942e-8,0.0011063551807779252,-1.5348143523852197e-6,1.5621073311654e-8,0.0011066313631327655,-1.6998081049754247e-6,1.5712016164878937e-8,0.0011069922927926747,-1.8679853774396568e-6,1.580459705808824e-8,0.0011074402507398938,-2.0011637405826746e-6,1.5877740607269027e-8,0.0011079607077455421,-2.060248709035317e-6,1.5909858156164228e-8,0.001108519738968454,-2.0144254988523965e-6,1.588390462537339e-8,0.0011090667951459137,-1.8531436940924132e-6,1.5794016241904865e-8,0.0011095457522609323,-1.5962893152773853E-06,1.5651187561937485e-8,0.0011099131036531966,-1.295286315591519e-6,1.548393416264128e-8,0.0011101558729649911,-1.0201697065466408e-6,1.5331133204623056e-8,0.0011102988958696094,-8.358929741676526e-7,1.5228836499800212e-8,0.001110396160826366,-7.792957175517323e-7,1.519745019538023e-8,0.00111051078357651,-8.4832733122868e-7,1.5235767590110828e-8,0.0011106942753399312,-1.0069042485667557e-6,1.5323711725274e-8,0.00111097368196469,-1.1999692577389667e-6,1.5430718007157876e-8,0.0011113487938456635,-1.370515245006706e-6,1.5525164027079777e-8,0.0011117968919402519,-1.472886234678616e-6,1.5581716379428368e-8,0.00111228126468647,-1.4803580618799743e-6,1.5585522069862342e-8,0.0011127605283525728,-1.38735025143936e-6,1.553345118973782e-8,0.0011131969606502966,-1.207467615593322e-6,1.5433042494833323e-8,0.0011135628384484684,-9.68609089136904e-7,1.5299812786382335e-8,0.0011138441430138264,-7.063766770539463e-7,1.515359787677788e-8,0.0011140413969519087,-4.5716749529745555e-7,1.5014692696968984e-8,0.0011141679771116317,-2.5224292949749117e-7,1.4900524553462284e-8,0.0011142467106409985,-1.1360505719006956e-7,1.4823340179212186e-8,0.0011143057375622243,-5.1947099677121166e-8,1.478906414284595e-8,0.0011143745275428235,-6.641623982905153e-8,1.479718055412551e-8,0.0011144805411490116,-1.4554045014367347e-7,1.4841267716474989e-8,0.0011146465039405943,-2.6868186327244643e-7,1.4909818722617364e-8,0.0011148879464543517,-4.077487512787168e-7,1.4987193531681402e-8,0.0011152106069133069,-5.293572049765862e-7,1.5054810350341645e-8,0.001115607505557431,-5.981354506604627e-7,1.5092967998964315e-8,0.0011160562278251995,-5.82238372920153e-7,1.508390498897239e-8,0.0011165181858738054,-4.617774614729789e-7,1.5016501585294573e-8,0.0011169427756374372,-2.3916486858598275e-7,1.489207589936706e-8,0.001117279123695704,5.281074662320559e-8,1.4728931150574154e-8,0.0011174945353303808,3.5238253651923323e-7,1.4561593636104278e-8,0.0011175918891919794,5.85237341776037e-7,1.4431602483043102e-8,0.001117613973298778,6.922600246158575e-7,1.4371955080154304e-8,0.0011176285284481737,6.540692000960255e-7,1.4393394122909386e-8,0.0011177012518909313,4.973859584028976e-7,1.4480914676359373e-8,0.0011178724639969737,2.807665191832271e-7,1.4601797634793543e-8,0.0011181484319527568,7.064887876481905e-8,1.4718987525011862e-8,0.0011185068668504749,-7.890745011779789e-8,1.4802357637019236e-8,0.0011189091709123736,-1.3646153918415363e-7,1.4834384089423755e-8,0.0011193126105248509,-9.43931094899234e-8,1.48108065335213e-8,0.0011196792366973227,3.5164048593491474e-8,1.473837430297344e-8,0.0011199811858316087,2.26369559642981e-7,1.4631494218090753e-8,0.0011202031869314724,4.4589422366034254e-7,1.4508776239873582e-8,0.00112034310520379,6.586854121746841e-7,1.4389816343386903e-8,0.0011204109385747102,8.330417415667043e-7,1.4292352649188305e-8,0.0011204265234972595,9.446967691452359e-7,1.4229970169917528e-8,0.0011204162785695454,9.796302768584618e-7,1.4210520366177409e-8,0.0011204093914756884,9.354136766252925e-7,1.423536740670385e-8,0.0011204339509095645,8.210357617533893e-7,1.4299488573279187e-8,0.0011205135047749502,6.554492436680685e-7,1.4392288214421408e-8,0.0011206642577800594,4.652528434009131e-7,1.4498888367884619e-8,0.001120892869175372,2.817729973787914e-7,1.4601751044198787e-8,0.0011211947550755549,1.3757495990860276e-7,1.4682621069015419e-8,0.0011215528883894927,6.21872975976025e-8,1.4724918735586556e-8,0.001121937523487324,7.657802320904832e-8,1.471684663627745e-8,0.0011223081121608392,1.862337483495964e-7,1.4655293964103262e-8,0.0011226193191337492,3.7406125879550593e-7,1.4549846746055096e-8,0.001122832579558784,5.965725646991329e-7,1.4424943518651694e-8,0.001122931860338344,7.888398809784377e-7,1.4317073347269448e-8,0.0011229368584202211,8.823540066354003e-7,1.42646972284513e-8,0.0011229030163360236,8.31978931560535e-7,1.4293081372632381e-8,0.0011229027871189272,6.377983868581165e-7,1.4402074372500076e-8,0.0011229961745440554,3.466313844851877e-7,1.4565346045514696e-8,0.0011232080312209413,3.131213495657076e-8,1.4742059226319447e-8,0.0011235241667242122,-2.384517151272013e-7,1.4893183747109764e-8,0.0011239038866639104,-4.1705069829968125e-7,1.4993199888376666e-8,0.0011242978045176068,-4.891837396590307e-7,1.5033552385496457e-8,0.0011246618087164136,-4.650533911979487e-7,1.501996092483476e-8,0.0011249644073865193,-3.712956185955165e-7,1.4967350495564534e-8,0.0011251887847238463,-2.4226609099827207e-7,1.489497804254355e-8,0.0011253319323496448,-1.1342860023329529e-7,1.4822732804632492e-8,0.001125402634959825,-1.6748392335343594e-8,1.476855463336166e-8,0.0011254190551908455,2.2583818610430424e-8,1.4746592428163293e-8,0.001125406006350285,-1.147849811646348e-8,1.4765866874794957e-8,0.0011253918703925659,-1.2428284425453638e-7,1.4829389975213278e-8,0.001125405153669,-3.098575433825358e-7,1.4933811618400424e-8,0.001125470825285484,-5.515007109536961e-7,1.5069747750744837e-8,0.0011256068473051415,-8.237402109522106e-7,1.522287862447306e-8,0.0011258213742378021,-1.0955210324600928e-6,1.5375735433027346e-8,0.001126110953640497,-1.33434576076099e-6,1.551002392607651e-8,0.0011264599688784321,-1.5110754595557068e-6,1.5609325258051984e-8,0.0011268415324472347,-1.6050367155868619e-6,1.5661979950811296e-8,0.0011272200850014037,-1.6091063327225863e-6,1.5663968705012574e-8,0.0011275562307977297,-1.5342861631028003e-6,1.5621508044081852e-8,0.0011278144681279808,-1.4124327608801717e-6,1.5552595027563792e-8,0.001127973697196369,-1.2945868803236955e-6,1.548604925928786e-8,0.0011280382587597413,-1.2418556395565706e-6,1.5456333428887506e-8,0.0011280441049613882,-1.3076713541081708e-6,1.5493515389976944e-8,0.0011280530903307478,-1.5159246352740396e-6,1.5610950547436537e-8,0.001128132778175655,-1.8463668689740967e-6,1.579711977668449e-8,0.0011283296134604944,-2.238778351585612e-6,1.601804452302929e-8,0.0011286507402838491,-2.6162893563312223e-6,1.6230430827785135e-8,0.001129064849116733,-2.914505922934018e-6,1.639803217786027e-8,0.0011295188883964043,-3.1003495271215335e-6,1.650223555792818e-8,0.0011299585096496848,-3.1743954370268017e-6,1.6543390761059785e-8,0.0011303422387863712,-3.1616614223987634e-6,1.6535639899295777e-8,0.0011306468543703053,-3.099226465392222e-6,1.649993957729718e-8,0.0011308665355909385,-3.026115926253836e-6,1.6458343678529448e-8,0.0011310092877528594,-2.97696670198988e-6,1.643041637428008e-8,0.0011310930107738839,-2.9787150579821667e-6,1.643135725219101e-8,0.0011311420979546502,-3.048971357365785e-6,1.6471083224590702e-8,0.0011311844863316548,-3.1951543584245246e-6,1.655374177555831e-8,0.0011312487969415517,-3.4140426711787296e-6,1.667746050617603e-8,0.001131361247585663,-3.6918347099299193e-6,1.683438659836271e-8,0.0011315422288500833,-4.005155407124281e-6,1.701126248263884e-8,0.0011318028686057846,-4.323516118603748e-6,1.719082210152812e-8,0.001132142305142021,-4.613386976593811e-6,1.7354095519871995e-8,0.001132546459390808,-4.843583003603475e-6,1.7483454475893005e-8,0.0011329889427781129,-4.991272754047409e-6,1.7566013688537354e-8,0.0011334344413259357,-5.047541910774497e-6,1.7596784618951905e-8,0.001133844458183822,-5.021292733474158e-6,1.7580889129752105e-8,0.0011341848700335095,-4.94040959890774e-6,1.753421475919338e-8,0.0011344344119443499,-4.8491916969188745e-6,1.748193700907113e-8,0.0011345925814498685,-4.801059066100088e-6,1.745434825021528e-8,0.001134684387300292,-4.846227082445247e-6,1.7479841111046328e-8,0.0011347584805635495,-5.0160858158737145e-6,1.7576061597522453e-8,0.0011348759327808268,-5.309263400214288e-6,1.7742064468409605e-8,0.0011350908173706725,-5.6869034120381485e-6,1.7955706489080888e-8,0.0011354299176144932,-6.082800701089851e-6,1.8179418623203863e-8,0.0011358822190113598,-6.426124898603051e-6,1.8373054177066374e-8,0.0011364043809356825,-6.665757949870108e-6,1.8507648393622844e-8,0.0011369384853650538,-6.7840861137196476e-6,1.8573247563186413e-8,0.0011374316455507916,-6.795823634017219e-6,1.8578280026159067e-8,0.001137848673807987,-6.736604005607285e-6,1.85430965640259e-8,0.001138175543947817,-6.649378408098194e-6,1.8492219634553844e-8,0.0011384164599360274,-6.574091986083006e-6,1.8448433493018965e-8,0.0011385884812031334,-6.5420367269707E-06,1.8429543600599157e-8,0.0011387163515221173,-6.573764105960214e-6,1.844718403120001e-8,0.0011388284833158092,-6.678850501571657e-6,1.8506697577031452e-8,0.0011389539421612653,-6.856289459219892e-6,1.8607380918886297e-8,0.0011391198567281403,-7.094990988364993e-6,1.8742791852569966e-8,0.0011393486909906535,-7.374470404067843e-6,1.8901162544082247e-8,0.001139655105173082,-7.666288253826918e-6,1.9066235687773136e-8,0.0011400426757558419,-7.936983461486883e-6,1.921894205864218e-8,0.0011405013577337874,-8.152936837249098e-6,1.9340168556050783e-8,0.0011410069453844265,-8.286904307477137e-6,1.941447163411268e-8,0.001141523687978373,-8.325052062458535e-6,1.943407977800105e-8,0.0011420104921204704,-8.272482966705914e-6,1.940204081740356e-8,0.0011424298885641681,-8.155032071176124e-6,1.9333238629293002e-8,0.0011427577026877223,-8.01590505046847e-6,1.9252449665323856e-8,0.0011429907616206283,-7.907174957399983e-6,1.9189445751876634e-8,0.0011431501649271265,-7.877608061907913e-6,1.917200273740673e-8,0.0011432784491987938,-7.9594886944176e-6,1.9218374972079383e-8,0.0011434302434748492,-8.157983701078854e-6,1.9331275036921774e-8,0.0011436578055424847,-8.446881947193677e-6,1.949552477305666e-8,0.00114399515501405,-8.773659928063834e-6,1.9681008281834052e-8,0.001144446522983574,-9.073972603149053e-6,1.9850948567032337e-8,0.0011449845240813815,-9.291172843971188e-6,1.997301868872744e-8,0.0011455595354737658,-9.393027652032006e-6,2.0028869806567677e-8,0.0011461161009334714,-9.378716130867975e-6,2.001814630971795e-8,0.0011466089029168024,-9.274461172054308e-6,1.9956008806800238e-8,0.0011470122988015584,-9.121833292035425e-6,1.9866427698242803e-8,0.00114732188508422,-8.96496066277439e-6,1.977481168122164e-8,0.001147550426654242,-8.84115873090527e-6,1.970259092640148e-8,0.0011477216937115396,-8.776250220560751e-6,1.966451506584681e-8,0.0011478647584178116,-8.783503033521037e-6,1.966805944170667e-8,0.0011480097210303582,-8.864451422748417e-6,1.971393023358895e-8,0.0011481847339456337,-9.010282799110149e-6,1.9796897029095008e-8,0.0011484137013095736,-9.203162855983934e-6,1.9906583070119853e-8,0.0011487139621447924,-9.417536219790016e-6,2.0028232082651543e-8,0.0011490935669522466,-9.622008265590576e-6,2.0143797216780358e-8,0.0011495483701545808,-9.782674812070154e-6,2.0233850339937727e-8,0.0011500598968202766,-9.868530899457088e-6,2.0280675342107168e-8,0.001150595576793416,-9.858788234789456e-6,2.027245503525575e-8,0.0011511130407411538,-9.750551556433113e-6,2.0207673116114426e-8,0.0011515690958261268,-9.563815939238883e-6,2.0097983923800655e-8,0.0011519316806153635,-9.340392670730376e-6,1.9967584121287674e-8,0.001152190749497022,-9.135185026245966e-6,1.9848156573524196e-8,0.0011523634382926925,-9.001659265593388e-6,1.9770455193964563e-8,0.0011524907957058544,-8.976351650421527e-6,1.975535707782608e-8,0.0011526268209164589,-9.067935946616826e-6,1.9807599727437817e-8,0.0011528235054923113,-9.25449432683755e-6,1.9914294904382524e-8,0.0011531166414686328,-9.489552149459594e-6,2.0048491573720485e-8,0.0011535164504243166,-9.71476019621844e-6,2.0176519619224113e-8,0.0011540055000518578,-9.875454353321969e-6,2.0266935867828633e-8,0.0011545443526542588,-9.934597905884134e-6,2.029851857027083e-8,0.0011550830429836547,-9.881012223473731e-6,2.026498429883669e-8,0.0011555744937682764,-9.729706251418504e-6,2.0175168201088018e-8,0.0011559854772124829,-9.51504938883692e-6,2.0049071556327196e-8,0.0011563021464909625,-9.280042396553756e-6,1.991163982225793e-8,0.0011565296752859802,-9.065727818539686e-6,1.9786613888511836e-8,0.001156687736425848,-8.903688987058367e-6,1.9692182364519e-8,0.0011568044046975123,-8.8125619957311e-6,1.9638981965480233e-8,0.0011569105458751,-8.797789715304598e-6,1.9629991386652268e-8,0.0011570356151798416,-8.853178776230065e-6,1.9661469660227554e-8,0.0011572048275839113,-8.963029002850191e-6,1.9724213131765286e-8,0.0011574371573823965,-9.104180604326605e-6,1.9804750235027096e-8,0.0011577435098976399,-9.247950130788989e-6,1.9886461799431398e-8,0.0011581246406424353,-9.362476184699034e-6,1.9950934601369646e-8,0.001158568958664678,-9.41631267388031e-6,1.9980033554842147e-8,0.001159051135572797,-9.383982662467644e-6,1.9959107105592105e-8,0.0011595332400694842,-9.253407196201551e-6,1.988127948054991e-8,0.0011599704116754437,-9.033473617199929e-6,1.9751830591591057e-8,0.001160321905079089,-8.757962164306107e-6,1.9590469326886845e-8,0.0011605651381540996,-8.481352968156326e-6,1.9428884611557018e-8,0.0011607066977102414,-8.264780100526713e-6,1.9302555692561575e-8,0.0011607835786356816,-8.156211653841857e-6,1.9239208531028127e-8,0.001160852303938451,-8.173672131833849e-6,1.9249082973678126e-8,0.0011609704050213417,-8.299502401002055e-6,1.9321670102197103e-8,0.0011611786600939425,-8.487524842860316e-6,1.942996472795716e-8,0.00116149085756971,-8.678548440956826e-6,1.9539526753642373e-8,0.0011618930476837161,-8.817263786054158e-6,1.961829467481908e-8,0.0011623502480845786,-8.865197369246996e-6,1.9644073624203352e-8,0.0011628170462849206,-8.807345064885849e-6,1.9608343243756524e-8,0.001163248772606246,-8.652436380407108e-6,1.9516370694754277e-8,0.0011636107636861521,-8.42810745764086e-6,1.9384372461534673e-8,0.0011638841503945102,-8.17290291549061e-6,1.9234838808357553e-8,0.0011640675332915647,-7.927309243105636e-6,1.9091306227406572e-8,0.001164174910574985,-7.725934562782125e-6,1.897381570422459e-8,0.0011642310911780206,-7.592301438636944e-6,1.8895911963434465e-8,0.001164266183153776,-7.536686249750781e-6,1.8863426101585725e-8,0.0011643105098843333,-7.556534996681924e-6,1.8874751833990127e-8,0.0011643907219274397,-7.638508383357229e-6,1.892205030520054e-8,0.0011645272144765674,-7.761166811425134e-6,1.8992807601442906e-8,0.0011647324707863098,-7.897651936164617e-6,1.9071379900299287e-8,0.0011650098094900412,-8.018265814666975e-6,1.914048233352255e-8,0.0011653521888236509,-8.093307790327415e-6,1.9182839583695098e-8,0.001165741133615056,-8.096798948189496e-6,1.9183362843101123e-8,0.0011661465394286383,-8.01169930545659e-6,1.913219846759754e-8,0.0011665289267256526,-7.836536321099879e-6,1.9028592765835697e-8,0.0011668460658409007,-7.591725078170206e-6,1.8884569456476698e-8,0.0011670647742319771,-7.321672629410377e-6,1.872613603007408e-8,0.0011671752536712213,-7.087778965397692e-6,1.8589162929747138e-8,0.0011672007945532352,-6.950506281680236e-6,1.8508875117680157e-8,0.0011671946165852476,-6.946270276537636e-6,1.8506350208028936e-8,0.0011672219724961402,-7.071417197234697e-6,1.8579216055933185e-8,0.0011673358746302342,-7.283275108892446e-6,1.8702356985605753e-8,0.0011675594159570796,-7.517413113909867e-6,1.8838061377010595e-8,0.0011678822015231747,-7.710561368063675e-6,1.8949420655493054e-8,0.0011682689261397071,-7.818135372925264e-6,1.9010538692202126e-8,0.0011686730493583339,-7.821696462300443e-6,1.90108499425854e-8,0.0011690494583318888,-7.727720962976632e-6,1.8954353489254236e-8,0.0011693632444199163,-7.56134032774171e-6,1.885590552632025e-8,0.00116959424227111,-7.358324729191973e-6,1.8736493783482777e-8,0.0011697381322427927,-7.157289319737172e-6,1.861866602390422e-8,0.001169805015940991,-6.993028321525914e-6,1.852264983791331e-8,0.0011698161546601542,-6.891491872816817e-6,1.8463458014440653e-8,0.0011697995747586565,-6.866806023143072e-6,1.8449195474681566e-8,0.001169785345145261,-6.9204124414224666e-6,1.8480593608555368e-8,0.0011698012390084927,-7.0420511084665356e-6,1.8551596753815423e-8,0.0011698692959780039,-7.212115770190638e-6,1.865072612237821e-8,0.001170003535115469,-7.40476340602822e-6,1.876287162320732e-8,0.0011702087001298016,-7.591191261412983e-6,1.887118665962335e-8,0.001170479701385697,-7.742851069545861e-6,1.895896527939579e-8,0.0011708015200401624,-7.834746251544546e-6,1.9011588216858993e-8,0.0011711496211634048,-7.849130822009977e-6,1.9018713426567524e-8,0.0011714913924403504,-7.779910197998646e-6,1.8976869060788222e-8,0.0011717897544849946,-7.637523831636095e-6,1.889230519205385e-8,0.001172010309956273,-7.452738502943907e-6,1.8783182601489195e-8,0.0011721323598993924,-7.275994332800178e-6,1.867913794942048e-8,0.0011721611281580594,-7.168155593634209e-6,1.861581265298405e-8,0.0011721343191450696,-7.1813051484193844e-6,1.862357539268324e-8,0.0011721149049607846,-7.335813716215587e-6,1.87141217167984e-8,0.001172168800567516,-7.607145133330706e-6,1.8872833135365767e-8,0.0011723380208572738,-7.933227173421569e-6,1.9063184028057393e-8,0.0011726252496139771,-8.239481077610759e-6,1.924143891636807e-8,0.0011729975280554965,-8.466260519538257e-6,1.9372719916227837e-8,0.0011734031858778484,-8.584501548552111e-6,1.944016181411194e-8,0.001173790302185874,-8.596454295920204e-6,1.944531693494591e-8,0.0011741190787508823,-8.527161410478187e-6,1.9403109104349883e-8,0.0011743669348481497,-8.413502697600549e-6,1.933534155711618e-8,0.0011745284115409797,-8.294793736602777e-6,1.9265131227668844e-8,0.0011746124079364151,-8.206190261184355e-6,1.9213032276832187e-8,0.0011746385065752375,-8.174556373859033e-6,1.9194649111671876e-8,0.0011746330915234392,-8.216052103381338e-6,1.9219279634408336e-8,0.0011746253880197785,-8.335082109550146e-6,1.9289350289034145e-8,0.0011746435809791025,-8.524542340119898e-6,1.9400586230916127e-8,0.0011747112692470335,-8.767280557710057e-6,1.954286430798587e-8,0.0011748445359639791,-9.03865596643075e-6,1.9701692857538592e-8,0.0011750499632298852,-9.309966660718363e-6,1.9860201817912727e-8,0.001175323799399941,-9.552298843262974e-6,2.0001396821218872e-8,0.00117565222379474,-9.740381416028808e-6,2.0110439466007515e-8,0.0011760125740055314,-9.856258828588306e-6,2.0176834214821782e-8,0.001176375524771259,-9.89270749701017e-6,2.0196458357561633e-8,0.0011767084198622795,-9.856295447680713e-6,2.0173355725141192e-8,0.0011769802534832457,-9.769680052766479e-6,2.0121046365166935e-8,0.001177168799588408,-9.671871258832764e-6,2.0062613323586582e-8,0.0011772694476469777,-9.6141384720008e-6,2.002822704058926e-8,0.0011773031276615976,-9.649130357389883e-6,2.004871269724044e-8,0.001177317927990144,-9.813195811093411e-6,2.0145182911243707e-8,0.0011773784774201084,-1.0107742086366462e-5,2.031816622647421e-8,0.0011775429199502576,-1.0491244705205072e-5,2.054301185498362e-8,0.001177837880102486,-1.0891186429975976e-5,2.077695811502661e-8,0.0011782469508336748,-1.1232228758863288e-5,2.0975685618500445e-8,0.0011787199252995327,-1.1464270048217633e-5,2.1109807093236463e-8,0.001179195117857407,-1.1575096317836384e-5,2.1172327792887724e-8,0.0011796204060343677,-1.1585333083324484e-5,2.117567378298927e-8,0.001179964253721622,-1.153426084540048e-5,2.1143276835969646e-8,0.001180216947487361,-1.1465789942356163e-5,2.1101215758474892e-8,0.0011803864077251783,-1.1418915216628996e-5,2.107252293342305e-8,0.0011804924552570766,-1.1422849945557147e-5,2.1074313204903283e-8,0.0011805616351961057,-1.149534972563153e-5,2.111684828473406e-8,0.0011806231296561194,-1.164260838042896e-5,2.1203547272920038e-8,0.001180705405349917,-1.185983590457733e-5,2.133138289587363e-8,0.0011808332022572984,-1.2132380829244001e-5,2.1491566451183692e-8,0.0011810247593277404,-1.2437538534793616e-5,2.1670609888946692e-8,0.00118128939658047,-1.2747235945817167e-5,2.1851893747692842e-8,0.0011816258296817952,-1.3031688632184382e-5,2.2017816721285344e-8,0.0011820217409164156,-1.3263766786722557e-5,2.215238102483769e-8,0.0011824549343442512,-1.3423476824073942e-5,2.224386173036045e-8,0.0011828960923008392,-1.3501908143475178e-5,2.228715845248425e-8,0.0011833129578829248,-1.3504032616951642e-5,2.2285447254115404e-8,0.0011836756314048944,-1.3449812928952117e-5,2.2250794275112108e-8,0.001183962592413837,-1.3373153848677134e-5,2.2203458812617827e-8,0.0011841669322909438,-1.3318065327970467e-5,2.2169537514422055e-8,0.0011843016926503368,-1.3331175884827947e-5,2.2176482373441217e-8,0.0011844020642103072,-1.3450260247773386e-5,2.2246332098472546e-8,0.001184521202676278,-1.3690428025695983e-5,2.2387640451217336e-8,0.0011847171293863903,-1.4032994909381187e-5,2.2589027933433944e-8,0.001185032463777717,-1.4424743371322873e-5,2.281883562996951e-8,0.0011854755677246913,-1.4792794984495582e-5,2.3033918419938312e-8,0.0011860147396502052,-1.507088024578483e-5,2.319513060443558e-8,0.0011865905179456926,-1.5223319477673633e-5,2.328150001628114e-8,0.0011871389466646689,-1.5253718038456167e-5,2.3295410581307743e-8,0.0011876123061146714,-1.519648813755946e-5,2.3257586969311357e-8,0.0011879885113928858,-1.5099845661934605e-5,2.3196940123018956e-8,0.0011882695341677578,-1.501035144178206e-5,2.31412842396481e-8,0.0011884742356245803,-1.4963788315746421e-5,2.3111852364620775e-8,0.001188630530564791,-1.4982034546106686e-5,2.3121452402727265e-8,0.0011887692807419578,-1.507353292827563e-5,2.3174817880824452e-8,0.0011889202463939105,-1.5235106883747588e-5,2.3269772227890994e-8,0.0011891093972103773,-1.5453904219857056e-5,2.3398442893928934e-8,0.001189356787492648,-1.5709243646093957e-5,2.3548380493865156e-8,0.001189674562434833,-1.597465760311393e-5,2.3703767108688843e-8,0.0011900650705906138,-1.622059546320253e-5,2.3847010207390837e-8,0.0011905194959919482,-1.641817450904896e-5,2.396096721453941e-8,0.0011910177895063875,-1.6543919681829082e-5,2.403177226492937e-8,0.0011915306556030559,-1.6584788766736868e-5,2.4051839818261955e-8,0.001192023898945927,-1.6542298384545826e-5,2.4022324070467803e-8,0.001192464757553144,-1.643440146715635e-5,2.3954211093486313e-8,0.001192829119799411,-1.629404609753833e-5,2.3867395750016865e-8,0.001193108027212104,-1.6164104458207515e-5,2.3787569044241983e-8,0.0011933118430555575,-1.608921071912973e-5,2.3741272731391792e-8,0.0011934707320330146,-1.6105658509481013e-5,2.374985781205688e-8,0.0011936303976635173,-1.623111932778949e-5,2.3823425330801796e-8,0.0011938425904213918,-1.6456797947603263e-5,2.3956291913805633e-8,0.0011941512693824246,-1.6745405678767475e-5,2.4125926378533872e-8,0.0011945777513011316,-1.703806116613979e-5,2.4297131106293858e-8,0.0011951108176325653,-1.7270552184130284e-5,2.4431706269672658e-8,0.0011957078826386161,-1.7394145331375484e-5,2.4500786304503858e-8,0.001196308651953773,-1.7391670563142902e-5,2.4494397478295562e-8,0.0011968553574094527,-1.7280885870127336e-5,2.442346637634852e-8,0.0011973097438809756,-1.7104486121415902e-5,2.4313830319614202e-8,0.0011976600271846305,-1.6913544964189015e-5,2.4196263777647027e-8,0.0011979178287977973,-1.6752823815132273e-5,2.4097605696463648e-8,0.0011981097707620147,-1.6652578579863055e-5,2.4035827004151324e-8,0.0011982686801686477,-1.6626751066110573e-5,2.401899572758425e-8,0.0011984270612510747,-1.6674980003615707e-5,2.4046572026728495e-8,0.0011986131998672476,-1.6785856209140574e-5,2.411144126081378e-8,0.00119884907936858,-1.6939967517406705e-5,2.4201781684558578e-8,0.0011991490988296598,-1.7112385016964997e-5,2.430255743190104e-8,0.0011995189044720176,-1.727490968716899e-5,2.4396846663078468e-8,0.0011999541434850292,-1.73987053704685e-5,2.446740213138539e-8,0.0012004395264967585,-1.7457927525291007e-5,2.4498820966803372E-08,0.0012009491082435547,-1.743451264755266e-5,2.4480422287605266e-8,0.001201448900782843,-1.7323465817622007e-5,2.4409425154034857e-8,0.0012019025457898729,-1.713703206787251e-5,2.429344400128628e-8,0.0012022796375072394,-1.6905527800039264e-5,2.415095110327444e-8,0.001202564674709609,-1.66730256383639e-5,2.4008615527302114e-8,0.0012027634568679232,-1.6487847620334767e-5,2.3895505198766226e-8,0.001202904030611828,-1.6390163394670685e-5,2.3835574955575874e-8,0.0012030311028923925,-1.6400516224166192e-5,2.384078723594285e-8,0.0012031951747230444,-1.6513004713512284e-5,2.390712060734509e-8,0.001203439368777117,-1.6695385826531313e-5,2.4014786720648956e-8,0.0012037875416534632,-1.6896357132806125e-5,2.413273573212916e-8,0.0012042369997383238,-1.7058417430140396e-5,2.422642990299439e-8,0.001204758270153749,-1.7133153462624448e-5,2.42669920335499e-8,0.0012053027296240449,-1.7094557087145528e-5,2.4239131779032624e-8,0.001205816243419089,-1.694576087819249e-5,2.414512189749825e-8,0.001206254208107606,-1.671652593603102e-5,2.4003224447649546e-8,0.0012065924774887938,-1.6452686017868706e-5,2.3841274764580573e-8,0.0012068306855210508,-1.6202252980745935e-5,2.3688257288772364e-8,0.0012069882451567506,-1.6003642610002783e-5,2.3567193058502826e-8,0.0012070962548821874,-1.5879317737007825e-5,2.3491350212189728e-8,0.0012071891126864752,-1.5834987172204415e-5,2.3463848234982794e-8,0.0012072982435586271,-1.5862395994595704e-5,2.3479429419473134E-08,0.0012074484919681056,-1.5943390285158226e-5,2.3526960795175952e-8,0.0012076565349967772,-1.6053727644420263e-5,2.3591735054261115e-8,0.0012079303224518817,-1.6166109640853678e-5,2.3657270713232458e-8,0.0012082687433021958,-1.625265566416613e-5,2.370677465035961e-8,0.0012086611896754904,-1.6287448494366172e-5,2.372466631141001e-8,0.0012090872917999832,-1.6249836702848495e-5,2.3698580523446967e-8,0.0012095176855486077,-1.6128815528154758e-5,2.3622028928013453e-8,0.0012099170613362122,-1.592798579392285e-5,2.349739986274672e-8,0.0012102505659388227,-1.566936060894537e-5,2.3338237567455915e-8,0.0012104933479661164,-1.5393153749585413e-5,2.316906420901978e-8,0.0012106406191476266,-1.5150881099106516e-5,2.302113572545944e-8,0.001210713427762985,-1.4991745019339821e-5,2.2924136337323242e-8,0.0012107557250189674,-1.4946543294335746e-5,2.2896419733099684e-8,0.0012108221716802248,-1.5016161651831003e-5,2.293810304377412e-8,0.0012109612315525406,-1.5170264902251345e-5,2.3030401775421017e-8,0.0012112005956738774,-1.535671009607627e-5,2.3141465559964834e-8,0.0012115402123723076,-1.551722648703216e-5,2.3235958218962858e-8,0.0012119541203185218,-1.5603217342101987e-5,2.32846361790215e-8,0.0012123989690091418,-1.558704649773601e-5,2.32711262155396e-8,0.0012128258188160085,-1.546672637976945e-5,2.3194667025593706e-8,0.0012131919055231588,-1.526397476343263e-5,2.306882035076686e-8,0.001213469672752588,-1.5016981076206275e-5,2.2916988632259907e-8,0.0012136512717100716,-1.4770193242323362e-5,2.2766165374691033e-8,0.0012137479589100495,-1.4563974629347552e-5,2.2640665341646183e-8,0.0012137852603573004,-1.4426773355970368e-5,2.255743926778347e-8,0.0012137959093788662,-1.4371343522844578e-5,2.2523883713028728e-8,0.0012138128365966673,-1.439499826481813e-5,2.2538091856692798e-8,0.0012138638400819995,-1.4482668698853964e-5,2.2590762305896745e-8,0.0012139685086682349,-1.4611158244269921e-5,2.2667775734842887e-8,0.0012141370773553156,-1.4753294457875256e-5,2.2752669276880412e-8,0.0012143704447298367,-1.4881339284913565e-5,2.2828655628043122e-8,0.0012146606157735983,-1.4969696583580246e-5,2.2880242761076628e-8,0.0012149911979015464,-1.499739616837105e-5,2.2894754107216863e-8,0.001215338074413792,-1.495094088433912e-5,2.286409075695815e-8,0.0012156709220629822,-1.4827860365214653e-5,2.278691472150337e-8,0.0012159566967008494,-1.4640607873998432e-5,2.2671006872583375e-8,0.0012161661678526474,-1.4419214392042551e-5,2.253482998176492e-8,0.0012162834218881762,-1.4209794962010202e-5,2.2406545421342624e-8,0.001216315642396274,-1.4065845309811994e-5,2.2318651755283653e-8,0.0012162975273846636,-1.4032046896515793e-5,2.229810801795348e-8,0.001216284646636957,-1.412603160851158e-5,2.2355282871068613e-8,0.0012163354726003424,-1.4328040488737538e-5,2.2477767363016963e-8,0.0012164899159747096,-1.4585949126754397e-5,2.263355123417095e-8,0.001216755574130199,-1.4833892797710722e-5,2.278243853374842e-8,0.0012171078245810246,-1.5014490026863692e-5,2.2889603737556964e-8,0.001217501208749591,-1.5094377647005056e-5,2.2935034657986378e-8,0.0012178847630020077,-1.5068934395509631e-5,2.2916347417685273e-8,0.0012182150285436164,-1.4958137548021152e-5,2.2846155074825506e-8,0.0012184640069405344,-1.4797783644600629e-5,2.2746590779909395e-8,0.0012186220505673322,-1.4629683731770791e-5,2.2643235920746163e-8,0.001218696822913379,-1.449297270290909e-5,2.2559801522444672e-8,0.0012187095811834294,-1.4417539138099393e-5,2.2514186857630122e-8,0.0012186898663968694,-1.4420061297596525e-5,2.2516180023635898e-8,0.0012186696633395672,-1.4502833252156467e-5,2.2566860603567102e-8,0.0012186780735641304,-1.4655108434294776e-5,2.2659490899290508e-8,0.0012187372918174148,-1.4856253456001961e-5,2.2781443114298367e-8,0.001218860273629298,-1.5079824490775369e-5,2.2916635639418696e-8,0.0012190500435946263,-1.5297700051893458e-5,2.3047988343221898e-8,0.001219300200263371,-1.548365519236493e-5,2.3159560794279936e-8,0.0012195960618367548,-1.5616237415079354e-5,2.3238309613797606e-8,0.0012199161265676276,-1.568118550987916e-5,2.3275603178996437e-8,0.0012202338545077081,-1.567373100870673e-5,2.326866879195279e-8,0.0012205201561264112,-1.560100091808706e-5,2.3222067337371707e-8,0.001220747382989795,-1.5484226141098953e-5,2.3148995007320677e-8,0.0012208955835540899,-1.535941411892994e-5,2.3071605072069785e-8,0.0012209607427107806,-1.5274050539459638e-5,2.3018902382756045e-8,0.001220962475274646,-1.5277280997782236e-5,2.3020705792687032e-8,0.0012209458731045407,-1.5403436960660497e-5,2.309762894932575e-8,0.0012209717976255354,-1.565448470536381e-5,2.3250476497938733e-8,0.0012210955463632595,-1.5992317511104423e-5,2.345566341649283e-8,0.0012213435678971353,-1.634934524496698e-5,2.367175263118225e-8,0.0012217022640911984,-1.6653999885394203e-5,2.3855040758167472e-8,0.0012221254162641652,-1.685673242853055e-5,2.397543609100118e-8,0.0012225539172616843,-1.694295513018085e-5,2.4024369111537456e-8,0.0012229355612905532,-1.6930207344080828e-5,2.4013018459709848e-8,0.0012232368258948774,-1.6856088422204816e-5,2.3964815471614588e-8,0.001223445818883135,-1.6764870074623695e-5,2.3907108196114857e-8,0.0012235694616662836,-1.66972195773145e-5,2.3864781052871904e-8,0.0012236282176459417,-1.668400111843338e-5,2.3856473140188308e-8,0.0012236504409797394,-1.6743379709783217e-5,2.3892909894168513e-8,0.0012236671763620997,-1.6880175503808295e-5,2.3976645895061022e-8,0.001223707624433692,-1.708683221483701e-5,2.4102766441136323e-8,0.0012237954317209335,-1.734565340062886e-5,2.426029685357651e-8,0.0012239459921608604,-1.7631973134540477e-5,2.4434117926847972e-8,0.0012241649213519893,-1.791791608308859e-5,2.4607207076905056e-8,0.0012244478183697678,-1.817632574317451e-5,2.476299133590999e-8,0.0012247812244358886,-1.838435464330882e-5,2.4887533086232756e-8,0.0012251444556581857,-1.8526399189167512e-5,2.4971356499031972e-8,0.001225512030680893,-1.8596356874691012e-5,2.5010875116620252e-8,0.0012258566090267735,-1.8599249204608337e-5,2.500940666446154e-8,0.0012261525206215848,-1.8552184327634754e-5,2.4977727871947743e-8,0.0012263801754533244,-1.8484389126531722e-5,2.4934001023126065e-8,0.001226531589440995,-1.8435353897332787e-5,2.4902521731442044e-8,0.0012266163824655456,-1.844942436845583e-5,2.4910327037782435e-8,0.0012266658987470957,-1.8565429063659797e-5,2.498085133256966e-8,0.0012267312754294553,-1.880207278591228e-5,2.5125090674904964e-8,0.0012268713258371598,-1.914430998630717e-5,2.533341535608457e-8,0.001227131022819862,-1.954022969406463e-5,2.557377342250434e-8,0.0012275202373195173,-1.991570456003484e-5,2.5800673545950185e-8,0.0012280066605481112,-2.0202550073462475e-5,2.5972399157529153e-8,0.0012285289260753722,-2.036442274620531e-5,2.6066887113834473e-8,0.0012290215337736447,-2.0405843598096857e-5,2.608730247250189e-8,0.0012294364792536673,-2.0362831684957532e-5,2.605626237353159e-8,0.0012297525480403702,-2.0285001528169813e-5,2.600470001447718e-8,0.001229973287643303,-2.0219675206655426e-5,2.596192790923771e-8,0.00123011945294299,-2.0202577079814657e-5,2.5949829286862887e-8,0.0012302208090147813,-2.0254570927893388e-5,2.598089556577197e-8,0.001230309575850642,-2.0382079862008366e-5,2.6058620701201978e-8,0.0012304158345859968,-2.0579100696291248e-5,2.6178889594627654e-8,0.0012305643517482184,-2.0829746668818747e-5,2.6331638580619262e-8,0.0012307723235892732,-2.1111062515209374e-5,2.6502607204116547e-8,0.0012310478548748765,-2.1396114777007075e-5,2.6675202086625746e-8,0.0012313891899758615,-2.1657391046044656e-5,2.6832534064826254e-8,0.0012317848985939483,-2.187044513583133e-5,2.6959629716658373e-8,0.001232215249623264,-2.2017430944470345e-5,2.7045614719736176e-8,0.0012326547447966258,-2.209001773221379e-5,2.7085542859440893e-8,0.0012330755592392312,-2.2091326924775106e-5,2.70816135899996e-8,0.0012334516279752959,-2.203663011034868e-5,2.7043580150642033e-8,0.001233763101802164,-2.1952544155669515e-5,2.6988170698065287e-8,0.001234000846053606,-2.1874499915341305e-5,2.6937404354593894e-8,0.0012341705639102628,-2.184212653370876e-5,2.691563704449534e-8,0.0012342956223987628,-2.1891979650956894e-5,2.6945050302677308e-8,0.001234416688585595,-2.2047557895417835e-5,2.7039585964648845e-8,0.0012345855888722889,-2.23083766412273e-5,2.719839449139654e-8,0.0012348517249173988,-2.2642708147870215e-5,2.7401545144008608e-8,0.0012352433616983397,-2.2990593392258627e-5,2.7611962377998624e-8,0.0012357521897338616,-2.328103233247334e-5,2.778596961972363e-8,0.0012363319390749912,-2.3458241076732956e-5,2.7889391237730747e-8,0.001236914832205126,-2.3503051358274284e-5,2.7910738893106944e-8,0.0012374372602634584,-2.34370143285074e-5,2.7863779646029196e-8,0.0012378600978094599,-2.3308844078715344e-5,2.7779123129400366e-8,0.001238175025995959,-2.3173834169043024e-5,2.7691345091404345e-8,0.0012383987375117022,-2.3077516654817154e-5,2.7628715793488518e-8,0.0012385621901050622,-2.304804267920002e-5,2.7608434146434345e-8,0.001238700730871274,-2.3095701387628564e-5,2.7636418998067664e-8,0.0012388473917175444,-2.321606101218933e-5,2.7709418024290113e-8,0.0012390291726658905,-2.339397590953754e-5,2.781763697063455e-8,0.001239265187271221,-2.3607198404592336e-5,2.7947049692492793e-8,0.0012395656932513142,-2.3829477290720274e-5,2.808131142382676e-8,0.001239931567574002,-2.4033454791804963e-5,2.8203502070202986e-8,0.001240354197034772,-2.419368952870141e-5,2.8297948187087624e-8,0.0012408160639877112,-2.4289979933212816e-5,2.835226322126063e-8,0.0012412924936616241,-2.431076507997636e-5,2.835947104322042e-8,0.001241754847581157,-2.4255949556786933e-5,2.8319783468064274e-8,0.0012421750027906508,-2.413837942889537e-5,2.8241514856497743e-8,0.0012425305735050856,-2.398330917104594e-5,2.8140695039591662e-8,0.001242810041407821,-2.3825431793646963e-5,2.803911624686781e-8,0.0012430167548026835,-2.3703494765039817e-5,2.796086702784852e-8,0.0012431707595330977,-2.3653019187846447e-5,2.792773776976358e-8,0.0012433075282853305,-2.3697965910599013e-5,2.7954078812129726e-8,0.0012434727173970845,-2.3842679769997022e-5,2.8041949740427052e-8,0.001243712463212426,-2.4066405760676784e-5,2.8177927469785303e-8,0.0012440601035040232,-2.432362427984792e-5,2.8333484399655164e-8,0.0012445228361571915,-2.4553159928907133e-5,2.84706844897476e-8,0.001245074558848186,-2.469598742631698e-5,2.8553156726817562e-8,0.0012456608862963842,-2.4715959349908565e-5,2.8558858281151512e-8,0.001246216708050109,-2.4613291013679496e-5,2.8488399775580813e-8,0.001246688489499405,-2.4423038202625592e-5,2.8364074640010765e-8,0.0012470500759516796,-2.4199802086790886e-5,2.8220269933140577e-8,0.0012473056186578205,-2.3997923243581362e-5,2.8091007067191165e-8,0.0012474816718979766,-2.3856832628854112e-5,2.8000725693752732e-8,0.0012476152297567857,-2.3795467178827526e-5,2.796083255759579e-8,0.0012477434727424471,-2.3813936544781482e-5,2.797087896365848e-8,0.0012478974825907967,-2.3898538079999737e-5,2.802185450423327e-8,0.0012480994715242364,-2.4027063105389873e-5,2.8099607177080368e-8,0.0012483620860405254,-2.4173063448967265e-5,2.8187527217003586e-8,0.0012486885425988454,-2.4309038643380227e-5,2.8268487756534477e-8,0.0012490729604937483,-2.4409048929309893e-5,2.832640747738927e-8,0.0012495008229754566,-2.4451320673572244e-5,2.8347832218140762e-8,0.0012499499393055541,-2.442119484453209e-5,2.8323772418069707e-8,0.0012503925365264328,-2.4314275664468087e-5,2.8251695604431464e-8,0.0012507990005257714,-2.4139030867608762e-5,2.8137171704645568e-8,0.001251143262636996,-2.391768914256767e-5,2.7994415164953935e-8,0.0012514090363835088,-2.368426701735876e-5,2.7844976389814205e-8,0.0012515953110546903,-2.3479107716070564e-5,2.771421375274228e-8,0.0012517191350728285,-2.3340474530020665e-5,2.7625933544735366e-8,0.0012518141482856812,-2.3295030625602135e-5,2.7596407518891168e-8,0.00125192444142756,-2.334975383124914e-5,2.7629401271552236e-8,0.0012520946514939732,-2.348776438369355e-5,2.7713746828686006e-8,0.0012523583631477433,-2.3669877510084097e-5,2.7824516476769492e-8,0.0012527277286170939,-2.38425421336231e-5,2.7928118057615044e-8,0.0012531876409788102,-2.3951178423680048e-5,2.7990642199443437e-8,0.0012536974445180235,-2.395580939174183e-5,2.7987543221912417e-8,0.0012542012794675764,-2.3843814405731823e-5,2.7911488512020674e-8,0.0012546444912580575,-2.3634230998913443e-5,2.7774939914552914e-8,0.0012549898708866338,-2.337098949679818e-5,2.760582318235473e-8,0.0012552269467497428,-2.31078977299701e-5,2.7438033142794907e-8,0.0012553712247767674,-2.2892283909759187e-5,2.730112602560997e-8,0.001255455539610628,-2.2753872111695107e-5,2.7213370434487382e-8,0.0012555187275849952,-2.2701515499694785e-5,2.7179817449245153e-8,0.0012555962675502516,-2.2726235663317327e-5,2.719436714414756e-8,0.0012557148843836085,-2.280713457832666e-5,2.724360162183075e-8,0.001255890687072248,-2.2917285638186973e-5,2.7310518757386415e-8,0.001256129398595488,-2.3028282424195017e-5,2.7377340966423323e-8,0.0012564273842037858,-2.3113398094334926e-5,2.742741470506988e-8,0.001256772748129926,-2.3149894992070267e-5,2.7446594516070987e-8,0.0012571463545275083,-2.3121157899020574e-5,2.7424565261140528e-8,0.0012575231640768645,-2.3019131476612913e-5,2.7356401669610725e-8,0.001257874612111306,-2.284700440575688e-5,2.7244296214391676e-8,0.0012581727000068063,-2.2621361371800596e-5,2.7098925268443296e-8,0.0012583959412701018,-2.2372382207858894e-5,2.6939533510837228e-8,0.0012585362273141267,-2.2140433227805133e-5,2.6791698499354605e-8,0.0012586042852673735,-2.196814660205169e-5,2.6682241581275458e-8,0.0012586306549829782,-2.1889126806689826e-5,2.6632055608261722e-8,0.0012586601311620252,-2.1916855981065547e-5,2.664914718129419e-8,0.0012587403517282045,-2.2038399148444123e-5,2.672480002912566e-8,0.0012589081308858302,-2.2216070066749486e-5,2.6834805998698666e-8,0.001259178401966701,-2.2397001174915816e-5,2.6945651229235044e-8,0.0012595395662738137,-2.2527436600423014e-5,2.7023591961309044e-8,0.0012599565073977735,-2.2567114697326255e-5,2.704368259177285e-8,0.0012603800277351954,-2.249955563699239e-5,2.6996141762203254e-8,0.0012607598300570521,-2.2335587057110256e-5,2.6888416016816608e-8,0.0012610573544834757,-2.2109330675960614e-5,2.674249136516303e-8,0.0012612547690560867,-2.186800615213288e-5,2.6588343449294578e-8,0.0012613575758832708,-2.1658922356915117e-5,2.6455686208838244e-8,0.001261390591051946,-2.151793017938794e-5,2.6366737636690552e-8,0.00126138947197204,-2.146269522919313e-5,2.6332111564846554e-8,0.001261391218294045,-2.1491868003257122e-5,2.635046486548411e-8,0.0012614266428808319,-2.15888902989852e-5,2.641103229929555e-8,0.0012615162216082754,-2.1727952954471072e-5,2.6497431575663864e-8,0.0012616690635331466,-2.187983048108349e-5,2.6591299115901463e-8,0.0012618838439774989,-2.2016383972793845e-5,2.6675035116793972e-8,0.0012621505235054361,-2.2113585277586392e-5,2.6733624171416905e-8,0.0012624521180612978,-2.2153524616584108e-5,2.6755867859438524e-8,0.00126276632102878,-2.2126043067001626e-5,2.6735440962205498e-8,0.0012630672801498218,-2.2030481309721585e-5,2.6672051476437688e-8,0.0012633282001385453,-2.1877576094169603e-5,2.6572675677080794e-8,0.0012635254927225803,-2.1690821374928485e-5,2.6452399559931268e-8,0.0012636447200479173,-2.150581193844573e-5,2.6333924961939377e-8,0.0012636873694712005,-2.1365630790647973e-5,2.62445471842398e-8,0.001263675689203714,-2.1311092535360135e-5,2.6209908895091034e-8,0.001263651583389443,-2.1367352542053175e-5,2.624553285893486e-8,0.0012636669236140193,-2.1532112858698217e-5,2.6349454998586358e-8,0.0012637672086514252,-2.1772261625864342e-5,2.6500247615930587e-8,0.0012639754671761418,-2.2032532614826404e-5,2.666264158225693e-8,0.001264284192241647,-2.2253087100624153e-5,2.679874434506354e-8,0.0012646586664950854,-2.238799657886381e-5,2.687976398338216e-8,0.001265048952007261,-2.2417146448438736e-5,2.68935001124463e-8,0.0012654046375396352,-2.2348637976309602e-5,2.6845743928639548e-8,0.001265687166465729,-2.2213199967963506e-5,2.6756558234120423e-8,0.0012658770847539854,-2.205411237295862e-5,2.6653709859809845e-8,0.0012659757694239995,-2.1916095275190147e-5,2.6565519875628988e-8,0.0012660024992930466,-2.1835733466883678e-5,2.6514812194613012e-8,0.0012659883363219941,-2.183504682483079e-5,2.6514975770749016e-8,0.001265968564043513,-2.1918984668542527e-5,2.656857289282304e-8,0.0012659755016867593,-2.2076758125450218e-5,2.666835322071545e-8,0.0012660331867845541,-2.2286013655878877e-5,2.6799978389807436e-8,0.0012661546447266811,-2.2518299270481508e-5,2.6945459630868268e-8,0.0012663416011667139,-2.2744366594706175e-5,2.708642168120064e-8,0.0012665859156780787,-2.2938374403736194e-5,2.720666230998871e-8,0.0012668718340026004,-2.308069895407578e-5,2.729387607334129e-8,0.0012671783608418628,-2.315961813842999e-5,2.7340731279403066e-8,0.0012674815022603028,-2.3172399530941718e-5,2.734561490457562e-8,0.0012677565540440863,-2.3126206424985553e-5,2.7313258391016998e-8,0.0012679809078356128,-2.3038880813856224e-5,2.7255232108115096e-8,0.0012681379667225815,-2.293909764723427e-5,2.718996925380211e-8,0.001268222410981478,-2.2864607647463806e-5,2.714153350665855e-8,0.0012682458991817589,-2.285674137919671e-5,2.7136033101520892e-8,0.0012682404442877298,-2.294997743206441e-5,2.7194986348181077e-8,0.0012682552261359058,-2.3158135615329883e-5,2.732665258099185e-8,0.0012683438357439264,-2.3463184370203866e-5,2.751908579692521e-8,0.0012685445912806244,-2.381508922712379e-5,2.774017528295886e-8,0.0012688635218484556,-2.4146813037913072e-5,2.794723304902699e-8,0.0012692705636366676,-2.439852622614259e-5,2.8102383947438925e-8,0.0012697114811386142,-2.453808374801821e-5,2.818558432617654e-8,0.0012701278926337827,-2.456798692026666e-5,2.8199025785485304E-08,0.0012704747097447653,-2.451874191640579e-5,2.8162796580241977e-8,0.0012707290511519327,-2.4435369716645258e-5,2.8106093111468987e-8,0.00127089082105009,-2.4363968771578763e-5,2.8058468845464867e-8,0.0012709780445711418,-2.4341966719446985e-5,2.804354865594735e-8,0.0012710200656264432,-2.439279816146933e-5,2.8075722588673664e-8,0.001271050641705294,-2.4524258495752033e-5,2.8159296031538897e-8,0.0012711018882705825,-2.4729497552478398e-5,2.8289339641440367e-8,0.0012711994916664129,-2.4989923105568873e-5,2.8453680377103202e-8,0.0012713595362361608,-2.5279401250563086e-5,2.863560229913506e-8,0.0012715871496310693,-2.5568988582094783e-5,2.8816787886148046e-8,0.0012718768697763392,-2.5831442116825033e-5,2.898007870930307e-8,0.0012722144010838205,-2.6044933071783422e-5,2.911175618979125e-8,0.0012725792455093397,-2.619559555621507e-5,2.9203144635270495e-8,0.001272947626786604,-2.627888618297095e-5,2.9251514544716158e-8,0.0012732953571026233,-2.630006763486035e-5,2.9260441855358742e-8,0.0012736006475878774,-2.6274127894061375e-5,2.9239767557704245e-8,0.0012738470763975945,-2.6225193166156763e-5,2.9205161411702542e-8,0.0012740270157430664,-2.6185124088254545e-5,2.9177104177386633e-8,0.0012741455908807501,-2.6190414429344983e-5,2.9178785414269988e-8,0.001274224316427514,-2.62760887589678e-5,2.9232165679184445e-8,0.0012743020615554482,-2.646586880061536e-5,2.935178899471236e-8,0.001274429803943883,-2.6760187731966526e-5,2.9537333686976303e-8,0.0012746566213436674,-2.712756647179489e-5,2.976831346906732e-8,0.0012750096385508432,-2.7507546288788524e-5,3.0006033761210905e-8,0.0012754781610912526,-2.7829406560484464e-5,3.020548189174035e-8,0.001276013858158292,-2.8039650417442057e-5,3.033279425528792e-8,0.0012765492750488386,-2.812244159011328e-5,3.0378310890776146e-8,0.001277023642649741,-2.810137217333263e-5,3.035772861075833e-8,0.0012774012466509133,-2.802473521408781e-5,3.0302589247883327e-8,0.0012776758745853178,-2.7945890596938154e-5,3.024749497268067e-8,0.0012778647758220772,-2.79085430819153e-5,3.022048134829472e-8,0.001277998800793535,-2.793980262467159e-5,3.0238533240266736e-8,0.0012781132813501053,-2.804931557698271e-5,3.0307171318946226e-8,0.0012782413834105137,-2.8231718287190717e-5,3.042226138414893e-8,0.0012784098972853835,-2.8470294804898002e-5,3.0572571320992245e-8,0.0012786367518833218,-2.8740849073584766e-5,3.074235593251752e-8,0.0012789297433653374,-2.9015619036969142e-5,3.091384476109464e-8,0.0012792863683563302,-2.9267159831319898e-5,3.10696300382083e-8,0.0012796947422641365,-2.9471974501639326e-5,3.119488465856777e-8,0.0012801355484260517,-2.9613619515355336e-5,3.127929159311357e-8,0.0012805848824221722,-2.9684936207415627e-5,3.131847898599492e-8,0.001281017638662968,-2.968910490383866e-5,3.131473845451968e-8,0.0012814109964758992,-2.963950002011583e-5,3.1276957457645865e-8,0.0012817477332364437,-2.9558493616968298e-5,3.1219814796159154e-8,0.0012820192456920046,-2.9475284638605605e-5,3.116227933862801e-8,0.001282228197848576,-2.9422701983244574e-5,3.1125420021043346e-8,0.001282390606699797,-2.943268070189973e-5,3.112941115271035e-8,0.0012825366317504978,-2.9529907636028162e-5,3.118948519163852e-8,0.0012827084194776662,-2.9723676059624966e-5,3.131088059813362e-8,0.0012829528288665348,-2.9999700516418604e-5,3.1483844908667825e-8,0.0012833079130263225,-3.0316201547194518e-5,3.168132285335997e-8,0.0012837859765342673,-3.061020073146328e-5,3.1863018658290956e-8,0.0012843618450062628,-3.081684226297564e-5,3.198765635324121e-8,0.0012849765874220782,-3.089521995994752e-5,3.20294184946202e-8,0.0012855586318208988,-3.084588285428632e-5,3.1989175468429604e-8,0.0012860510837547415,-3.0708540178211655e-5,3.189304549666774e-8,0.001286429391721135,-3.054259065273131e-5,3.1779790208841204e-8,0.0012867022080911398,-3.0404062537684042e-5,3.1685762437681995e-8,0.001286900377279203,-3.0330777585708804e-5,3.163518182633183e-8,0.001287063300987379,-3.0338387143386424e-5,3.163759774986754e-8,0.001287228565364857,-3.042354922701865e-5,3.1690131287687944e-8,0.0012874261434639106,-3.056970632894269e-5,3.1781451277475414e-8,0.0012876761011276928,-3.075264889043229e-5,3.189554315979008e-8,0.001287988197340863,-3.094489886686548e-5,3.201458498978887e-8,0.0012883622633117567,-3.111913753711612e-5,3.2121090216733314e-8,0.0012887890246263095,-3.125116421789353e-5,3.219969606469643e-8,0.0012892514436496775,-3.1322610080414284e-5,3.223881626240157e-8,0.0012897267572810904,-3.132337450102907e-5,3.223217751474067e-8,0.0012901893827250341,-3.125348366035541e-5,3.2180042784654345e-8,0.0012906146194111945,-3.1123848609875844e-5,3.208974051574626e-8,0.0012909826969805158,-3.0955505293186115e-5,3.197517438868874e-8,0.0012912825565626971,-3.0777215881050795e-5,3.185520292845642e-8,0.0012915147687625943,-3.0621540642874033e-5,3.175097395022615e-8,0.001291693035842951,-3.0519716537336427E-05,3.168249183610786e-8,0.0012918438362249742,-3.0495841413462402e-5,3.1664819795655e-8,0.0012920037928547566,-3.056087693364674e-5,3.1704304670211076e-8,0.0012922141715474165,-3.0707282053063105e-5,3.17953364867465e-8,0.001292512034520009,-3.090599709338316e-5,3.1918661500173786e-8,0.0012929187002381516,-3.110850773894603e-5,3.2042880122178096e-8,0.0012934285950733568,-3.1256693423193994e-5,3.213078673276235e-8,0.0012940044453168913,-3.1300498297250774e-5,3.215061328521406e-8,0.001294584877820033,-3.12176444133966e-5,3.20885883560331e-8,0.001295104589766634,-3.102462475607171e-5,3.195596529494129e-8,0.0012955179603695564,-3.077085167751126e-5,3.178521309227125e-8,0.0012958131840410975,-3.0518540566581096e-5,3.1616916955709714e-8,0.0012960105999187787,-3.032026641965267e-5,3.148511085415194e-8,0.0012961495978159076,-3.0205433323736027e-5,3.140845109678617e-8,0.0012962734470908504,-3.0178565979806494e-5,3.1389212768773746e-8,0.0012964186126221632,-3.022527856628844e-5,3.141738252834504e-8,0.0012966099467786687,-3.032037295760454e-5,3.1476126820308665e-8,0.0012968600751613467,-3.043465498738407e-5,3.154631955101938e-8,0.0012971707339509185,-3.0539529403013107e-5,3.160949484610287e-8,0.0012975345391934867,-3.0609886172662965e-5,3.164960498486348e-8,0.0012979366525891216,-3.062613758462698e-5,3.1654217987039235e-8,0.0012983564533401342,-3.057599296156603e-5,3.1615600298714555e-8,0.0012987695840761062,-3.0456167864014533e-5,3.1531828857941956e-8,0.0012991507884455799,-3.027379091331488e-5,3.140775068646107e-8,0.0012994777236449333,-3.004683999448522e-5,3.125530194558217e-8,0.0012997353921117309,-2.9802813505353085e-5,3.1092622133109445e-8,0.0012999202861004046,-2.9575139003558806e-5,3.09416264273142e-8,0.0013000430270444395,-2.93974130243819e-5,3.0824133092212875e-8,0.001300128331498118,-2.9296350396882437e-5,3.075718715872455e-8,0.0013002116679433546,-2.928500804947685e-5,3.074866956412388e-8,0.0013003328193243616,-2.935801434543197e-5,3.0794343521651624e-8,0.001300527308605543,-2.9490231267340253e-5,3.0877225135393917e-8,0.0013008171756119307,-2.9639869058835446e-5,3.0969838317194383e-8,0.0013012031591031939,-2.9756515314625574e-5,3.10395465251122e-8,0.0013016609455879465,-2.9793446563434323e-5,3.105650235031395e-8,0.0013021442562541905,-2.972172931898944e-5,3.100263591424007e-8,0.0013025961177511457,-2.9541337275106654e-5,3.087867894617946e-8,0.0013029660006317406,-2.9283509335878423e-5,3.0705543544897195e-8,0.0013032261586196996,-2.9001308736517474e-5,3.051808034793436e-8,0.0013033793833759004,-2.875164122635431e-5,3.035331118242153e-8,0.0013034547749617115,-2.8577237008618275e-5,3.023868954419752e-8,0.0013034950005774671,-2.8496554952853205e-5,3.018561791167246e-8,0.0013035422626375217,-2.8503927091162528e-5,3.018972942257647e-8,0.0013036286487182313,-2.8576659673191224e-5,3.023572044825167e-8,0.0013037723920898197,-2.8683998777921855e-5,3.0303320007544866e-8,0.0013039784710675347,-2.8794434907111588e-5,3.037204952208462e-8,0.0013042411712836108,-2.8880283437659195e-5,3.042410362765577e-8,0.0013045469059940415,-2.8920083977942182e-5,3.044577741719525e-8,0.0013048765892900785,-2.8899827777303695e-5,3.042817208710491e-8,0.0013052076096280716,-2.8813836177220682e-5,3.0367751697282956e-8,0.0013055158699504063,-2.8665686201342626e-5,3.026699500311816e-8,0.0013057784723598796,-2.8469027833693583e-5,3.0134989400730604e-8,0.0013059774012722158,-2.824758312302742e-5,2.998744624708401e-8,0.0013061039917527009,-2.803329661145913e-5,2.984543622349855e-8,0.0013061631500154798,-2.786174715368294e-5,2.973227959525612e-8,0.0013061755169066931,-2.7764752904717206e-5,2.966860348764004e-8,0.0013061756394885842,-2.7761595595907e-5,2.9666567318660748e-8,0.0013062052931786697,-2.785175086959786e-5,2.972518749832201e-8,0.001306303142538855,-2.801230059159129e-5,2.9828826603746476e-8,0.0013064938194895942,-2.820182285028999e-5,2.9949955265754234e-8,0.001306780086361943,-2.8370168467178228e-5,3.005571106771042e-8,0.0013071407644421912,-2.8471378373462444e-5,3.0116392578181026e-8,0.0013075352201250116,-2.8475996159682643e-5,3.011342304590286e-8,0.001307913334487316,-2.8379292346448963e-5,3.0044539506056616e-8,0.0013082284553436203,-2.820295608258615e-5,2.992467194139616e-8,0.001308449795111905,-2.798934380814309e-5,2.9781980996995586e-8,0.0013085703641908598,-2.7789555942438875e-5,2.9649940584985727e-8,0.0013086075992558702,-2.7649081856834136e-5,2.9557946510256037e-8,0.0013085965713823258,-2.7596068441511594e-5,2.9523765739778143e-8,0.001308578775603071,-2.763613069992761e-5,2.9550353019012925e-8,0.0013085910545795772,-2.7754483402330733e-5,2.9627464816654964e-8,0.0013086582864577261,-2.7923038311927625e-5,2.973644409629548e-8,0.00130879097813508,-2.810881146934206e-5,2.985573633256056e-8,0.0013089866559391336,-2.8280794299983097e-5,2.9965288371083946e-8,0.0013092330853364449,-2.841421177594859e-5,3.004918959647898e-8,0.0013095117218239086,-2.849249915857971e-5,3.00968495932514e-8,0.0013098006051115334,-2.8507901829533638e-5,3.010335322333937e-8,0.0013100766331532816,-2.8461574612671678e-5,3.006956699423517e-8,0.00131031764281404,-2.8363692896845595e-5,3.0002285569679514e-8,0.0013105049028917662,-2.823351948220192e-5,2.991431821194102e-8,0.0013106264457913824,-2.809877946612421e-5,2.9824048280105456e-8,0.001310681133427025,-2.7993271777071674e-5,2.9753766780009736e-8,0.0013106824426351005,-2.795161269268233e-5,2.972610709291234e-8,0.0013106598420135267,-2.8000824017845768e-5,2.975846481850516e-8,0.001310655166280242,-2.8150479328616627e-5,2.9856575254154354e-8,0.0013107127876955784,-2.8385509043680695e-5,3.000993471753322e-8,0.0013108657814568222,-2.866643869990418e-5,3.0192141079751784e-8,0.0013111236756196114,-2.8939129152693387e-5,3.036744088323199e-8,0.0013114677764056418,-2.915104009753794e-5,3.0501486920959236e-8,0.001311856492484787,-2.9267251923133067e-5,3.0571854184595145e-8,0.001312238049311916,-2.9279859822208612e-5,3.057411525864111e-8,0.0013125651169096678,-2.9208198159179714e-5,3.0521802359526976e-8,0.0013128064021552001,-2.909142250826646e-5,3.044129361786551e-8,0.0013129525886068233,-2.897698933927629e-5,3.0364030849243177e-8,0.001313016206816826,-2.890865807546817e-5,3.031854722956662e-8,0.001313026461668143,-2.8916887043806896e-5,3.0324238748257375e-8,0.0013130209243820167,-2.901349026915853e-5,3.0388075426164644e-8,0.0013130364508609068,-2.91912467162573e-5,3.050460897562148e-8,0.0013131016267059507,-2.9427863667728573e-5,3.0658773423636455e-8,0.00131323234339437,-2.9692576163541312e-5,3.0830280966021656e-8,0.0013134309224520154,-2.9953194080713292e-5,3.099817761610996e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json new file mode 100644 index 000000000..e8e2db514 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":14000,"numberOfSamples":1000,"samples":[0.0013136880538731968,-3.0181825300251084e-5,3.1144455018197914e-8,0.0013139862307697747,-3.0358458604268804e-5,3.125626468859012e-8,0.0013143034381558063,-3.0472498704118995e-5,3.1326857923882795e-8,0.001314616342296335,-3.0522889122674205e-5,3.135568412117831e-8,0.0013149028238326915,-3.051757614543907e-5,3.134810730752583e-8,0.0013151441476950397,-3.0472812693602606e-5,3.1315005489895234e-8,0.001315327245423572,-3.041233669157899e-5,3.127221966442859e-8,0.0013154474985632677,-3.0365940022199845e-5,3.1239522569258994e-8,0.0013155119761371786,-3.0366482616605727e-5,3.123852579233063e-8,0.0013155421786821661,-3.044428590458291e-5,3.1288903751562086e-8,0.0013155741637083083,-3.061859253490029e-5,3.140279579367739e-8,0.0013156532826805987,-3.08878545724263e-5,3.15785553459714e-8,0.0013158221093964287,-3.122350814634265e-5,3.179684474210843e-8,0.0013161043666861684,-3.1573152017452694e-5,3.202287220092828e-8,0.001316492562279381,-3.187552478285449e-5,3.221630534507893e-8,0.0013169475071545026,-3.2081986318948946e-5,3.234541530079332e-8,0.0013174114482328236,-3.217362581767834e-5,3.2398333198900105e-8,0.0013178279759007432,-3.216549962188907e-5,3.238578137269618e-8,0.0013181587209702065,-3.209786877058771e-5,3.233512178519737e-8,0.0013183908584672483,-3.202101456924127e-5,3.2280078366949867e-8,0.0013185355723118594,-3.198087692229784e-5,3.22510415181099e-8,0.0013186210256550192,-3.200948903377424e-5,3.226871171627078e-8,0.001318683516304464,-3.212087078817048e-5,3.2341550899422565e-8,0.0013187592325329092,-3.2311333689063695e-5,3.246626921888799e-8,0.0013188777975085585,-3.256278527721231e-5,3.263027897225073e-8,0.0013190580943835157,-3.28478210560236e-5,3.281520552707126e-8,0.001319306537685271,-3.3135522599053245e-5,3.30007052286256e-8,0.0013196176305973269,-3.339691167788335e-5,3.3167938459672674e-8,0.0013199762931723731,-3.360923943949643e-5,3.330224076991175e-8,0.001320361240591444,-3.3758679883073964e-5,3.339478932604852e-8,0.0013207486407314094,-3.3841371491741154e-5,3.3443266039948134e-8,0.0013211154170834028,-3.3863122696377714e-5,3.345170814905867e-8,0.0013214419486963593,-3.3838325595684376e-5,3.342984862739796e-8,0.0013217143059939618,-3.3788485178276064e-5,3.3392152957732015e-8,0.0013219262892678202,-3.374042925569602e-5,3.3356565064026065e-8,0.0013220814837101608,-3.37239298755937e-5,3.334280561542386e-8,0.0013221952658236343,-3.3768093745891034e-5,3.336987271475884e-8,0.0013222959339579021,-3.389572813238187e-5,3.345230413051685e-8,0.0013224231012386285,-3.411559264521433e-5,3.359518483099222e-8,0.001322620987373266,-3.44143314836092e-5,3.378904291433436e-8,0.0013229254974994617,-3.47525377055976e-5,3.4007455453146385e-8,0.0013233481259613213,-3.507078420316715e-5,3.421110391244622e-8,0.0013238651644779758,-3.5307915680853196e-5,3.435980179531848e-8,0.0013244214578083684,-3.5424988893193025e-5,3.4428250117923195e-8,0.0013249498096669955,-3.5421322382391885e-5,3.441665080515855e-8,0.0013253957656545127,-3.533284530570563e-5,3.4349593606930406e-8,0.0013257341054285624,-3.521518782185486e-5,3.4264687362774436e-8,0.0013259708733802966,-3.5122901891955616e-5,3.4198504380576074e-8,0.0013261345823387194,-3.509485421874728e-5,3.4176685340857736e-8,0.0013262639590043055,-3.514877227589115e-5,3.421034115508173e-8,0.0013263974759466818,-3.5282692478288204e-5,3.42972534612874e-8,0.0013265664975942637,-3.547980948220061e-5,3.4425417060696266e-8,0.00132679174008558,-3.5714173837029465e-5,3.457707337361339e-8,0.0013270820868991236,-3.595606011854193e-5,3.473236215303623e-8,0.0013274350277215283,-3.617667618018595e-5,3.487237396855363e-8,0.0013278383205704806,-3.6352045676457e-5,3.4981566469251094e-8,0.0013282725585155749,-3.6465885830951754e-5,3.504952018493835e-8,0.0013287143399232126,-3.651136884131447e-5,3.507202780552796e-8,0.001329139723468503,-3.649166207236073e-5,3.5051459488144146e-8,0.0013295275370495275,-3.6419245769639135e-5,3.499636143139478e-8,0.0013298621741601225,-3.631427873602864e-5,3.492040029054349e-8,0.0013301357987788196,-3.620233676919433e-5,3.484081953074903e-8,0.0013303500182077856,-3.6111625895291846e-5,3.4776475543805855e-8,0.0013305170072328,-3.606960581815073e-5,3.4745462642883064e-8,0.0013306599051258836,-3.609882203418703e-5,3.4762278550856455e-8,0.0013308118536023116,-3.621166286686944e-5,3.483441417239421e-8,0.0013310123518564367,-3.64043217054422e-5,3.495855682409469e-8,0.0013312994223816388,-3.6651762152887505e-5,3.511751481890027e-8,0.0013316973518746693,-3.6907391838432765e-5,3.528018149292224e-8,0.0013322032136629622,-3.711186898684884e-5,3.540737536800615e-8,0.0013327798493111566,-3.721219549322923e-5,3.546437127639159e-8,0.0013333634934342639,-3.718420813249119e-5,3.543571757580381e-8,0.001333886255019829,-3.70450465515009e-5,3.53335093009964e-8,0.0013343019613464686,-3.6846215847581066e-5,3.5192757078025216e-8,0.001334600413137058,-3.6651362298198277e-5,3.505642654975122e-8,0.0013348042208097524,-3.6512872822752915e-5,3.495958564720737e-8,0.0013349544109773996,-3.6458841744971036e-5,3.49205708479965e-8,0.0013350949386154267,-3.649215529746224e-5,3.49404840851344e-8,0.0013352621732775469,-3.659679818886342e-5,3.500770195061645e-8,0.001335480179315456,-3.6746003522191745e-5,3.510363508802379e-8,0.0013357600358690303,-3.6909212409168185e-5,3.520756323936493e-8,0.0013361011544938224,-3.705705068984642e-5,3.52999605336332e-8,0.00133649332519081,-3.7164741980348925e-5,3.536463540591373e-8,0.0013369190829818159,-3.7214510810799346e-5,3.539015342857483e-8,0.0013373563443612583,-3.719721204638616e-5,3.537079341232845e-8,0.0013377813051418917,-3.711323131523201e-5,3.530711046883947e-8,0.0013381715937814552,-3.697254005026054e-5,3.520601101140213e-8,0.0013385094912165925,-3.6793660324817705e-5,3.5080116340020854e-8,0.0013387847813319696,-3.660147627572446e-5,3.494630461274569e-8,0.0013389968351418553,-3.642410292771776e-5,3.482354178926302e-8,0.0013391557003256266,-3.628905404552198e-5,3.473019081800264e-8,0.0013392819820180002,-3.621893946658274e-5,3.468102678374732e-8,0.0013394052631200586,-3.622700347066692e-5,3.468425016446891e-8,0.0013395607383982387,-3.631286700900988e-5,3.473878515860904e-8,0.0013397835600754613,-3.645915330073845e-5,3.483228424044899e-8,0.0013401005623555385,-3.663056453013473e-5,3.494077405219707e-8,0.0013405202232471124,-3.6777887727110934e-5,3.5031461893425745e-8,0.0013410241084409612,-3.684910446392256e-5,3.5070089714356354e-8,0.0013415655317836142,-3.68068037108336e-5,3.503236888286036e-8,0.0013420805713068025,-3.664539114072159e-5,3.491530557749418e-8,0.0013425100358751974,-3.6397470548011556e-5,3.47413920987351e-8,0.00134282186684753,-3.6122771266874264e-5,3.455114282299104e-8,0.0013430210440999052,-3.5884585735838275e-5,3.438718523558038e-8,0.0013431424937006674,-3.5727401868071906e-5,3.427912167202074e-8,0.00134323392387406,-3.5666709476200635e-5,3.423668442759081e-8,0.0013433393957544833,-3.569188452387105e-5,3.425186840423222e-8,0.0013434898472930886,-3.577592172660759e-5,3.430576805004325e-8,0.0013437006458960645,-3.588557734935549e-5,3.4375631883152696e-8,0.0013439733632099559,-3.598872432152733e-5,3.443987682266083e-8,0.0013442990272794215,-3.6058572131738544e-5,3.448082578605249e-8,0.0013446613049089872,-3.6075754726357985e-5,3.44859220020242e-8,0.001345039248616876,-3.6029368037547205e-5,3.444825503332818e-8,0.0013454098213895693,-3.591751673460431e-5,3.436684759254604e-8,0.0013457504724702282,-3.57474829484819e-5,3.424678910825797e-8,0.0013460419605556845,-3.5535332633184876e-5,3.409904369034362e-8,0.0013462713941414768,-3.530453678562293e-5,3.3939575913952353e-8,0.0013464350440412546,-3.5083247688415916e-5,3.3787496601098456e-8,0.001346540218956281,-3.490026072080504e-5,3.366224387151234e-8,0.0013466055506973335,-3.478008498355249e-5,3.358013732940204e-8,0.001346659241019408,-3.4737853074248655e-5,3.355088149022233e-8,0.0013467351263881956,-3.477505002897689e-5,3.3574748237485566e-8,0.0013468668157807983,-3.487707274585662e-5,3.36411293630354e-8,0.0013470805087412794,-3.501350818296307e-5,3.3728992049500143e-8,0.0013473874871725111,-3.5141989537112516e-5,3.3809694862078156e-8,0.0013477779846166242,-3.5216299066590065e-5,3.385250575241212e-8,0.0013482190793279586,-3.5198369687471605e-5,3.3832555330064887e-8,0.001348659613978359,-3.507162618165665e-5,3.3739577083562544e-8,0.001349043468490627,-3.485031268644354e-5,3.358395470384573e-8,0.001349327999366581,-3.4578485620740276e-5,3.3395893343763146e-8,0.0013494994616960665,-3.431622032059404e-5,3.321604676365601e-8,0.001349576900362316,-3.411840812110945e-5,3.3081186820720924e-8,0.0013496024923671088,-3.4016892922365775e-5,3.3012189592066463e-8,0.0013496246279193777,-3.401415154718749e-5,3.300992090644571e-8,0.0013496829179363164,-3.408870967312186e-5,3.305913434321514e-8,0.0013498005419856707,-3.420638364611618e-5,3.313629142245499e-8,0.001349983766265312,-3.433103577998142e-5,3.3216931742549514e-8,0.001350225503188383,-3.443167213616684e-5,3.328041116125517e-8,0.001350509870791549,-3.44857855079198e-5,3.3311987997451824e-8,0.001350816111848709,-3.44802776149318e-5,3.330325655153641e-8,0.0013511215354534733,-3.44113203272646e-5,3.325193674476666e-8,0.0013514038266242718,-3.428394324938091e-5,3.3161588903372553e-8,0.0013516432294084326,-3.41115562702498e-5,3.3041366067246576e-8,0.0013518249947347244,-3.391515061958602e-5,3.29055587983786e-8,0.0013519421489563276,-3.372159161237384e-5,3.277246672853169e-8,0.0013519981162253448,-3.35604192219653e-5,3.2662172488743894e-8,0.0013520082488663807,-3.345899609113347e-5,3.259313778399188e-8,0.0013519991491952143,-3.343655294053388e-5,3.257806735071459e-8,0.0013520049886915973,-3.349849264305731e-5,3.262004101630264e-8,0.0013520609158930905,-3.36328575909331e-5,3.2710241377374956e-8,0.0013521948074782938,-3.3810651240403614e-5,3.2828394204526694e-8,0.0013524194680195325,-3.399070247049815e-5,3.2946301667474426e-8,0.0013527275548078518,-3.412846985252045e-5,3.3033954284171145e-8,0.0013530910516223313,-3.41870260521444e-5,3.306696170857802e-8,0.0013534662186818406,-3.414758958099839e-5,3.303351712767489e-8,0.0013538036921596796,-3.401650121264336e-5,3.293885919569297e-8,0.0013540617630267778,-3.3825695437600704e-5,3.280532715743045e-8,0.0013542189655621978,-3.3625013396523797e-5,3.2666968653528377e-8,0.0013542809896239987,-3.3467679762926974e-5,3.255963827369867e-8,0.0013542783419837156,-3.3394020433318414e-5,3.251003853738814e-8,0.0013542554119995557,-3.342020697923614e-5,3.252828382153754e-8,0.0013542560140103023,-3.3536391035527796e-5,3.2606892142050424e-8,0.0013543116989025482,-3.371353007933651e-5,3.2725642792952345e-8,0.0013544365308802784,-3.391431273365121e-5,3.285910327271554e-8,0.0013546280975285543,-3.410316353858851e-5,3.2983383466057345e-8,0.0013548720539619643,-3.4252552907384106e-5,3.308026489902493e-8,0.001355147353668992,-3.43454908576762e-5,3.313870075252464e-8,0.0013554305468037433,-3.437553330264171e-5,3.315467676927687e-8,0.0013556988011802253,-3.434572357619407e-5,3.313045281129339e-8,0.0013559320038673691,-3.426735815892247e-5,3.30737806614842e-8,0.0013561145343338845,-3.415887769336406e-5,3.299724375590522e-8,0.0013562372346350193,-3.40446430953795e-5,3.291748056072256e-8,0.001356299729968249,-3.395293821719811e-5,3.285379960496967e-8,0.0013563126464800305,-3.39124616274109e-5,3.2825694374099335e-8,0.0013562986345168043,-3.394695718115785e-5,3.284908231937111e-8,0.0013562906901488832,-3.406854808973949e-5,3.2931730931658255e-8,0.0013563265580224901,-3.4271700357362895e-5,3.3069227097465745e-8,0.0013564394803830895,-3.453081024388408e-5,3.3243512234392763e-8,0.001356647830444362,-3.480395690125668e-5,3.342564568063368e-8,0.0013569477158602284,-3.504296952579012e-5,3.358281757335669e-8,0.0013573120584085639,-3.52068525793514e-5,3.368754392194241e-8,0.001357697050412798,-3.5273779767518736e-5,3.3725762172275216e-8,0.0013580538346326509,-3.524742322405932e-5,3.3700952947215904e-8,0.0013583414729187431,-3.515577457801083e-5,3.3633068996217375e-8,0.0013585373183607017,-3.504326814963739e-5,3.3552899090837633e-8,0.0013586421139425234,-3.4958781479045985e-5,3.3493719387707e-8,0.001358678685937704,-3.494290707046618e-5,3.3482624669021657e-8,0.001358684778336174,-3.501803608967189e-5,3.353396129882613e-8,0.001358702322909947,-3.518405715028354e-5,3.36466993389363e-8,0.0013587666406036992,-3.542061521536396e-5,3.380626499920978e-8,0.0013588989123856205,-3.5694495803273485e-5,3.398974496696862e-8,0.001359103663247866,-3.5969025766868755e-5,3.417229612867719e-8,0.0013593708567535968,-3.621226756590788e-5,3.4332592451649465e-8,0.0013596806793210175,-3.640207539916034e-5,3.4456072169122394e-8,0.0013600088338772479,-3.6527817297702786e-5,3.4535941490019846e-8,0.0013603309085686056,-3.6589745925869715e-5,3.4572666368770736e-8,0.0013606253906847028,-3.659727205627579e-5,3.4572817000381455e-8,0.0013608755966453268,-3.656705235731982e-5,3.45478428901892e-8,0.0013610710755603856,-3.652125748003627e-5,3.4512957394544435e-8,0.0013612090115036409,-3.648585481662091e-5,3.448596151433922e-8,0.0013612958461505,-3.648833256815448e-5,3.448560847301663e-8,0.0013613487825353768,-3.655412453139295e-5,3.452905427534737e-8,0.0013613960977975756,-3.6701245140876124e-5,3.4628141465119906e-8,0.0013614745650237811,-3.693358561190437e-5,3.4784884782548805e-8,0.0013616224205170902,-3.7235042204870165e-5,3.4987633233731027e-8,0.001361868091522445,-3.756832421090297e-5,3.521045772248526e-8,0.001362218255945228,-3.788197415238886e-5,3.541808383563176e-8,0.0013626514699812326,-3.812539193249165e-5,3.557619486093644e-8,0.001363122322234058,-3.8266165560665596e-5,3.566324383611881e-8,0.0013635754647547845,-3.830134386399334e-5,3.5678079037798024e-8,0.0013639630780626708,-3.825738313571894e-5,3.563975015298319e-8,0.001364258080357862,-3.817994201829989e-5,3.5580274568062977e-8,0.0013644589434662312,-3.811922202797349e-5,3.5534332460088205e-8,0.0013645865742663128,-3.81166924124298e-5,3.5530027944857735e-8,0.0013646762446455044,-3.819653354824757e-5,3.558310331044814e-8,0.001364767819829093,-3.8362605590993256e-5,3.569514079478911e-8,0.0013648967631197295,-3.8600238344742254e-5,3.585514627803409e-8,0.0013650874946786213,-3.888148752071901e-5,3.60434300221522e-8,0.0013653499642588421,-3.917227000116867e-5,3.62365942886353e-8,0.00136567964200512,-3.943967176457917e-5,3.6412451385441956e-8,0.0013660603709506384,-3.965784039600382e-5,3.65538578644758e-8,0.0013664688889499187,-3.981147629204727e-5,3.665089579529965e-8,0.0013668796761675812,-3.989679821734419e-5,3.6701401260529234e-8,0.0013672690955396569,-3.992052333462929e-5,3.6710241547116054e-8,0.0013676183253096337,-3.9897716306200194e-5,3.668789735721834e-8,0.0013679151464472477,-3.984932666566189e-5,3.664884493646582e-8,0.0013681550099158162,-3.979985343784534e-5,3.660997364210455e-8,0.0013683418187992174,-3.977508572660584e-5,3.658897704031485e-8,0.0013684886345164064,-3.9799531863791056e-5,3.6602481816290366e-8,0.0013686181140462686,-3.989297417404592e-5,3.6663608773571173e-8,0.0013687618136698219,-4.006569078124706e-5,3.677873040014451e-8,0.0013689567976789784,-4.031268759372785e-5,3.6943686509812775e-8,0.0013692379960220952,-4.0608958982055686e-5,3.714077674900414e-8,0.0013696263976024602,-4.0909688045915914e-5,3.733908018595111e-8,0.001370116858706226,-4.115943735403728e-5,3.7500783826076915e-8,0.0013706730192843547,-4.131030892561659e-5,3.759353716751259e-8,0.0013712357655380756,-4.1341651354543865e-5,3.760387092264407e-8,0.001371743681640421,-4.1269733274189294e-5,3.754378869036469e-8,0.0013721549303818486,-4.114093707006044e-5,3.744600118910848e-8,0.0013724590038156602,-4.1013018078885606e-5,3.7350822712677154e-8,0.0013726746583584263,-4.0935524588789915e-5,3.7292433498253575e-8,0.0013728388253621247,-4.093780361015353e-5,3.7290504667023286e-8,0.0013729936653109317,-4.102619609853645e-5,3.7348411588796894e-8,0.001373176359782013,-4.118762655376452e-5,3.745605098886693e-8,0.0013734130133102524,-4.139607981819826e-5,3.759467361926248e-8,0.0013737161837680623,-4.161950138762874e-5,3.7741869452387925e-8,0.0013740850229568907,-4.182594710895547e-5,3.787581954548767e-8,0.0013745072421834012,-4.198858396882682e-5,3.797857502949695e-8,0.0013749623837124778,-4.208926335925624e-5,3.803827857381001e-8,0.0013754258276343432,-4.2120407717748035e-5,3.8050265155743136e-8,0.001375872892622539,-4.2085198307853355e-5,3.801710263943968e-8,0.001376282469925798,-4.199628974034897e-5,3.7947728565110885e-8,0.0013766397572874227,-4.187345120748918e-5,3.7855899666402347e-8,0.0013769379150291574,-4.1740698791756187e-5,3.775826686919178e-8,0.0013771788132807986,-4.162339046388268e-5,3.76723488673647e-8,0.0013773731537905993,-4.154540420571933e-5,3.7614493141915814e-8,0.0013775401104706387,-4.1526264618012495e-5,3.759779228022895e-8,0.0013777064032593797,-4.157796597586423e-5,3.762987031680914e-8,0.001377904267471179,-4.170125910920436e-5,3.771044184184231e-8,0.0013781672206391812,-4.188175848661827e-5,3.78288749397831e-8,0.00137852256618738,-4.2087548328483725e-5,3.7962807628071696e-8,0.0013789809169083302,-4.2271422389212076e-5,3.807982991820045e-8,0.0013795260580142504,-4.238109909941585e-5,3.8144447194615674e-8,0.0013801120459359865,-4.237742637005507e-5,3.813041208095439e-8,0.0013806741263976,-4.225334424947585e-5,3.8033625865393774e-8,0.0013811520519300435,-4.2041187655938626e-5,3.787713159675286e-8,0.0013815136370865081,-4.180098864064637e-5,3.7703002181980215e-8,0.0013817644462791729,-4.159593522969593e-5,3.755522195444356e-8,0.0013819398040921613,-4.146995772891535e-5,3.7463973571636786e-8,0.0013820873195676013,-4.143814444971667e-5,3.74389528223684e-8,0.0013822508297504756,-4.1489856674521627e-5,3.747173694159376e-8,0.0013824612018183504,-4.159808318168086e-5,3.7542636676095634e-8,0.001382733677333939,-4.172918004101423e-5,3.76277743218216e-8,0.0013830692173663335,-4.185025959459586e-5,3.7704340994960595e-8,0.0013834575067367659,-4.193387127219509e-5,3.7753754368892116e-8,0.00138388030970731,-4.196070426809343e-5,3.776329962305264e-8,0.0013843148322871465,-4.1921028124019695e-5,3.7726878625517075e-8,0.0013847370777409624,-4.181512286564115e-5,3.7645150528966244e-8,0.0013851250900450299,-4.165273271465304e-5,3.752512539985943e-8,0.0013854619058602147,-4.145156074913463e-5,3.737919056711855e-8,0.0013857379458243554,-4.123483834305219e-5,3.722351350041851e-8,0.0013859525067954938,-4.1028195536964666e-5,3.707590164867331e-8,0.001386114186987945,-4.08562465832129e-5,3.6953376917189425e-8,0.0013862402914967716,-4.0739217947163935e-5,3.6869727504020365e-8,0.0013863552819137583,-4.068981038566365e-5,3.683325080139284e-8,0.0013864882812566375,-4.071045407698197e-5,3.684488191793497e-8,0.0013866695093654466,-4.0791084850707254e-5,3.689683217641563e-8,0.0013869252570760705,-4.0907845082072896e-5,3.6971967000828836e-8,0.0013872711358115565,-4.102392437415202e-5,3.7044638632372434e-8,0.0013877044103900269,-4.10944872644231e-5,3.708418444800822e-8,0.0013881982022425643,-4.107730918647336e-5,3.70621554354846e-8,0.0013887024507251455,-4.094823201885367e-5,3.696274535980045e-8,0.0013891560996636264,-4.071545369969397e-5,3.6792453536201996e-8,0.0013895088976246747,-4.042264374578624e-5,3.658214577314118e-8,0.0013897421255975183,-4.013475017712353e-5,3.637717862062872e-8,0.0013898751358086116,-3.99123909946508e-5,3.621955119697095e-8,0.0013899539157585976,-3.97898760399196e-5,3.613256495667892e-8,0.0013900305358917047,-3.976825529054825e-5,3.611605869920365e-8,0.0013901459897183817,-3.982280938552323e-5,3.615187595826213e-8,0.001390322583927315,-3.9916483926864295e-5,3.621354110721034e-8,0.0013905644815372748,-4.00116379826972e-5,3.627465691377648e-8,0.001390862196549241,-4.007719389834769e-5,3.6313891042696686e-8,0.0013911977272878053,-4.009168854677753e-5,3.631692015857626e-8,0.001391548803289706,-4.004388985804637e-5,3.627660019245447e-8,0.0013918921108757572,-3.9932383942914886e-5,3.619246897144912e-8,0.001392205925877442,-3.976474847087717e-5,3.607009012040189e-8,0.001392472481833256,-3.9556371616133894e-5,3.592027726302581e-8,0.0013926801795685095,-3.932876436594814e-5,3.5758025153182566e-8,0.0013928255206943443,-3.910712261197275e-5,3.5600891948591315e-8,0.0013929143574365078,-3.891704325009154e-5,3.546670424830646e-8,0.0013929619662561058,-3.878067864465175e-5,3.5370785800753655e-8,0.0013929916634681091,-3.8712865216251155e-5,3.5323145245009847e-8,0.0013930319212074739,-3.871783709874851e-5,3.532613964822986e-8,0.0013931121650108214,-3.878718027241075e-5,3.537313617747967e-8,0.0013932576761824852,-3.889956926863257e-5,3.544855030305457e-8,0.0013934841205019005,-3.902264562679513e-5,3.5529430896809445e-8,0.0013937923389470475,-3.911747336501126e-5,3.558876680690813e-8,0.0013941645951322254,-3.9146037401005566e-5,3.560072677257016e-8,0.0013945643433518572,-3.908149684330105e-5,3.554760976148454e-8,0.0013949419740809537,-3.8919080012482775e-5,3.54271205202408e-8,0.0013952477277678645,-3.868301987054237e-5,3.525691407233159e-8,0.001395448996586115,-3.842366805801884e-5,3.507242835859129e-8,0.0013955441184541493,-3.8202198743737096e-5,3.491619511363628e-8,0.001395563841894682,-3.806835542580855e-5,3.482237329132881e-8,0.0013955584098649994,-3.804297850225461e-5,3.4804676331452736e-8,0.0013955778157443777,-3.8114400232592614e-5,3.4854056156277526e-8,0.0013956561830292,-3.8248114880291454e-5,3.4945709067619815e-8,0.0013958061096767589,-3.840169374270801e-5,3.504970300817749e-8,0.001396021525706078,-3.853707477095065e-5,3.513962678304474e-8,0.0013962843041433993,-3.8627076516026636e-5,3.5197026880596114e-8,0.0013965707576988314,-3.865699570879773e-5,3.521229439063478e-8,0.0013968563725718281,-3.8623536025609064e-5,3.5183688298750485e-8,0.0013971187911648243,-3.8532907044979155e-5,3.511587978476073e-8,0.001397339741657006,-3.8398963032655006e-5,3.501866053362015e-8,0.0013975065707011172,-3.824149273866268e-5,3.490584928664414e-8,0.0013976137214529206,-3.808437691328442e-5,3.47941124837482e-8,0.0013976641337538325,-3.795316224892923e-5,3.470130668547223e-8,0.0013976701313359334,-3.787171824233571e-5,3.4644083108582145e-8,0.0013976530803277948,-3.785809777299285e-5,3.4634877223998395e-8,0.0013976411745630901,-3.792027581554576e-5,3.467883721971932e-8,0.0013976651171231898,-3.8052873706371765e-5,3.477154552196402e-8,0.001397752138213877,-3.8236151892252456e-5,3.489846164729002e-8,0.0013979195447783234,-3.8438219455829296e-5,3.5036710195449224e-8,0.0013981694399458889,-3.862056128580171e-5,3.515918741519236e-8,0.001398486147697437,-3.874608834560939e-5,3.524031957876636e-8,0.0013988374531938928,-3.878827062153085e-5,3.526239348503685e-8,0.001399180229735303,-3.873936055813441e-5,3.5221074317918304e-8,0.0013994701906148062,-3.861521125226919e-5,3.5128449985403174e-8,0.0013996740998213511,-3.845410205611195e-5,3.501191367250836e-8,0.0013997808979702491,-3.830798334251088e-5,3.490787420794603e-8,0.0013998068841861602,-3.822734029112152e-5,3.485117466616385e-8,0.0013997912690781416,-3.824484084870901e-5,3.486381492238321e-8,0.001399782875381604,-3.836511152067367e-5,3.494805808686753e-8,0.0013998239209614296,-3.856545057793629e-5,3.508720829151086e-8,0.0013999383452429608,-3.880618248898522e-5,3.5253069111989446e-8,0.001400128687982977,-3.9044513556967366e-5,3.5415721677933286e-8,0.0014003803140351105,-3.924559928935504e-5,3.555119946742358e-8,0.0014006688652410718,-3.938796884383357e-5,3.564509648433299e-8,0.0014009672459019793,-3.946401158692379e-5,3.569268613464028e-8,0.0014012504631784645,-3.9477773714654874e-5,3.5697219627372335e-8,0.0014014983378744935,-3.9442025791079544e-5,3.566783351875651e-8,0.0014016968485090753,-3.937562123845998e-5,3.561776933093947e-8,0.0014018389311078144,-3.930135009856592e-5,3.556297869454529e-8,0.0014019252611881805,-3.924395351028988e-5,3.552079791655267e-8,0.0014019650674987158,-3.922771502573723e-5,3.550823547292913e-8,0.0014019765254487317,-3.927316184126799e-5,3.5539561321083074e-8,0.0014019859072127623,-3.939286678870541e-5,3.562326047613582e-8,0.0014020245683540645,-3.9587049026522654e-5,3.57589225433063e-8,0.0014021232793080098,-3.984050350448809e-5,3.5935183683834784e-8,0.0014023045619820167,-4.0122876368864325e-5,3.613011664758931e-8,0.001402575188517273,-4.0393711578013267e-5,3.631499515737404e-8,0.0014029218430838034,-4.0611873294491905e-5,3.6461068646827724e-8,0.0014033123169753285,-4.074679499372091e-5,3.654749216388009e-8,0.0014037026283073234,-4.078780138232347e-5,3.6567752091281347e-8,0.0014040481592061073,-4.074819558912667e-5,3.653228462529379e-8,0.0014043154629272954,-4.0662606574106574e-5,3.646629348386904e-8,0.0014044912857379814,-4.057825582912705e-5,3.640333363998543e-8,0.001404586199481951,-4.054249152292174e-5,3.6376420565956945E-08,0.0014046315916832204,-4.059001163717845e-5,3.640913312668297e-8,0.0014046706036646942,-4.073363552405963e-5,3.650939734711049e-8,0.0014047457709805932,-4.096173679938644e-5,3.6668033280187714e-8,0.0014048875975041877,-4.1243138982900314e-5,3.686248986601918e-8,0.0014051079231287907,-4.153727189609017e-5,3.706412048229687e-8,0.0014053996891925462,-4.180543919169627e-5,3.724605723962737e-8,0.0014057418851642401,-4.201928520354164e-5,3.7388982979293707e-8,0.0014061067325829505,-4.216459310863377e-5,3.748357386154352e-8,0.0014064662792454632,-4.2240904034702006e-5,3.75300453375767e-8,0.001406796935332708,-4.225873123662221e-5,3.753610982343233e-8,0.0014070818711074016,-4.223609237701761e-5,3.7514565091294765e-8,0.0014073119283782146,-4.219538055815336e-5,3.748118402098386e-8,0.0014074858454996213,-4.216086923191445e-5,3.7453036902211475e-8,0.0014076103837110468,-4.215657537536124e-5,3.744699428145286e-8,0.001407700482867457,-4.2203893189522455e-5,3.7477990165415446e-8,0.0014077790394113716,-4.231848459825597e-5,3.755673767593618e-8,0.0014078754676845311,-4.250633958081457e-5,3.768691664581742e-8,0.0014080219967517041,-4.275967059593405e-5,3.7862358742113034e-8,0.0014082470158322466,-4.305438268393406e-5,3.8065444478173206e-8,0.0014085662107764442,-4.3351709842482535e-5,3.826846229183665e-8,0.0014089744868300872,-4.360598119993927e-5,3.843922404533621e-8,0.0014094431536157055,-4.377765422595991e-5,3.8550288702544655e-8,0.0014099256069116926,-4.384699363489847e-5,3.8588547143931624e-8,0.001410370621965012,-4.3822017616625005e-5,3.8560684416864574e-8,0.0014107379906385569,-4.373660777036701e-5,3.8491618344667396e-8,0.001411009964557524,-4.363969764258664e-5,3.841657689536917e-8,0.0014111946000197385,-4.3580512043394426e-5,3.8370420063415034e-8,0.0014113211867777273,-4.359545857298468e-5,3.837829828573306e-8,0.0014114306461733982,-4.3700232323209964e-5,3.8450239351540594e-8,0.001411564408632792,-4.388818610139138e-5,3.858035161105931e-8,0.0014117547305501578,-4.4134232812283986e-5,3.874997182226532e-8,0.0014120184750084578,-4.440248212920195e-5,3.8933324817321076e-8,0.0014123552829552618,-4.4655279826922307e-5,3.910396017989396e-8,0.0014127498958597165,-4.4861304314633954e-5,3.924032595412258e-8,0.0014131773611926266,-4.500092974261656e-5,3.932930729967511e-8,0.0014136092759243295,-4.5068124233728125e-5,3.9367328715653395e-8,0.001414019350464863,-4.50693223258045e-5,3.9359414083827914e-8,0.001414387280570928,-4.5020436860496765e-5,3.931705416718012e-8,0.0014147007530842784,-4.4943253683445574e-5,3.925572649703533e-8,0.0014149560140847756,-4.486209219785531e-5,3.919262101512192e-8,0.0014151576551419522,-4.4801074437002196e-5,3.914474595500056e-8,0.001415318136201093,-4.478183557739158e-5,3.912726793698288e-8,0.0014154572003696824,-4.482122856836196e-5,3.9151802563573214e-8,0.0014156009001108517,-4.492859041749618e-5,3.9224425325897754e-8,0.0014157795097893533,-4.5102449376290346e-5,3.93433918158505e-8,0.0014160233109937125,-4.532727500167816e-5,3.94970098303655e-8,0.0014163555567608258,-4.557201265798743e-5,3.96628298780135e-8,0.0014167833913719533,-4.579313198730899e-5,3.980996986060289e-8,0.0014172901012929602,-4.594441145983626e-5,3.990606550755613e-8,0.0014178341748209257,-4.599235373069634e-5,3.9928088314464635e-8,0.0014183591944381855,-4.593096157451421e-5,3.987268351609923e-8,0.0014188124373602864,-4.5787093578951006e-5,3.975984439233655e-8,0.001419163393834719,-4.561185313227637e-5,3.9626636645945325e-8,0.0014194126920989531,-4.5462152420401115e-5,3.951386849890556e-8,0.0014195882504336435,-4.5382171232237414e-5,3.945270542300551e-8,0.0014197329253106763,-4.539256577330823e-5,3.9456983564371725e-8,0.0014198906236090039,-4.548923231726588e-5,3.952257759491028e-8,0.001420095771986858,-4.5648857684138e-5,3.963175850856077e-8,0.0014203677362581296,-4.5837385340540104e-5,3.975959325884974e-8,0.0014207096597213865,-4.601850510949015e-5,3.988016811818957e-8,0.0014211104809135435,-4.616063637726872e-5,3.9971495331700885e-8,0.0014215489510336552,-4.624177480943514e-5,4.001871904464167e-8,0.0014219986351035052,-4.6251956591088596e-5,4.0015574979438314e-8,0.0014224329376801295,-4.619339291718908e-5,3.996426457805398e-8,0.001422829353219783,-4.607871301987465e-5,3.9874120697775513e-8,0.0014231724530763103,-4.592798447099774e-5,3.9759530620922137e-8,0.0014234554326269762,-4.57652124151591e-5,3.9637548056577846e-8,0.0014236803642659415,-4.561496504861187e-5,3.952556952558051e-8,0.0014238575838519927,-4.5499512314608026e-5,3.943929979142778e-8,0.0014240046262760098,-4.543644346492547e-5,3.9390987574810174e-8,0.0014241448474782898,-4.543650107068099e-5,3.938780661528568e-8,0.0014243055769598875,-4.55014025622324e-5,3.943030334635427e-8,0.0014245153230789524,-4.562160361393435e-5,3.951093333991738e-8,0.0014247992679477627,-4.5774516750711624e-5,3.9613026810845106e-8,0.0014251725776000539,-4.592471607435623e-5,3.97111673534239e-8,0.0014256324150758487,-4.6028499832087334e-5,3.9774539919194244e-8,0.0014261519278773282,-4.604466942670059e-5,3.97745103455597e-8,0.0014266816106519023,-4.595018557846401e-5,3.9695557904295956e-8,0.0014271621257017225,-4.575388705227969e-5,3.9544859389287236e-8,0.0014275457311608392,-4.549845458283125e-5,3.935358890200528e-8,0.001427815306107102,-4.524605002091276e-5,3.916657774531871e-8,0.0014279894860666584,-4.505443172790813e-5,3.9025101307670685e-8,0.001428111845943068,-4.4957151971777735e-5,3.895259664595886e-8,0.0014282324457039898,-4.4956997998443266e-5,3.8950037799349965e-8,0.0014283921152246375,-4.5031813061035744e-5,3.9000405529012745e-8,0.001428614503799861,-4.514594302658012e-5,3.907728510090153e-8,0.0014289052039444517,-4.526123102336767e-5,3.915303573565249e-8,0.0014292549887714064,-4.5344780633131716e-5,3.9204408290150735e-8,0.0014296445351593818,-4.537328317671618e-5,3.921546485399938e-8,0.0014300491927835234,-4.533479827914965e-5,3.917854634066426e-8,0.0014304433224275918,-4.522881772940035e-5,3.909403114722347e-8,0.001430804033341362,-4.5065037434135e-5,3.896929881664266e-8,0.001431114134170649,-4.486114602985143e-5,3.8817147411994384e-8,0.001431364173594574,-4.463995090524377e-5,3.8653843304944497e-8,0.001431553477665542,-4.4426110315797016e-5,3.8496905092415785e-8,0.0014316900992935974,-4.4242818950062476e-5,3.8362786478080485e-8,0.0014317897941557708,-4.410886020323244e-5,3.8264727869013804e-8,0.0014318743099349634,-4.403620954390451e-5,3.8210949087253464e-8,0.0014319691565770345,-4.402814004867514e-5,3.8203232744223565e-8,0.0014321008288139233,-4.407781633250867e-5,3.823596615193787e-8,0.0014322933132242908,-4.4167493057523215e-5,3.829575167824442e-8,0.0014325635783059797,-4.426874231918825e-5,3.8361828243839776e-8,0.0014329159984174987,-4.4344806916418694e-5,3.8407962919808685e-8,0.0014333367610415697,-4.435666435111393e-5,3.840682171688473e-8,0.0014337910720800594,-4.4273697098380086e-5,3.833742616530986e-8,0.0014342273731959762,-4.408716016137151e-5,3.819450047412489e-8,0.0014345914434781843,-4.382020957560829e-5,3.79954130449742e-8,0.0014348470970175808,-4.352582193219588e-5,3.7778581483576264e-8,0.0014349925697684392,-4.326902649537983e-5,3.759070188014273e-8,0.0014350613489107376,-4.3101343714786775e-5,3.746837044387351e-8,0.0014351064354383872,-4.304237393549526e-5,3.74248666578265e-8,0.0014351786308693037,-4.3077895175319485e-5,3.744893988723652e-8,0.001435311120145527,-4.3171511316731736e-5,3.751349253798805e-8,0.001435514983638263,-4.3280124103506245e-5,3.7587031889058094e-8,0.0014357827442222175,-4.33657644870084e-5,3.764234602726513e-8,0.0014360950176135047,-4.340168328161423e-5,3.766080981694061e-8,0.0014364268982985113,-4.3373918763642415e-5,3.7633249662091946e-8,0.0014367527843651797,-4.328039694830718e-5,3.755898187846603e-8,0.0014370497401466067,-4.312909776010434e-5,3.7444270646673757e-8,0.0014372999251545048,-4.29358844997081e-5,3.730070931627148e-8,0.0014374923724849156,-4.2722063680720855e-5,3.71435536648068e-8,0.0014376241618117747,-4.251167408721932e-5,3.6989920136254e-8,0.0014377009262072043,-4.2328490779715396e-5,3.6856738666764285e-8,0.0014377364788064743,-4.2192837572660376e-5,3.675846863045126e-8,0.0014377513692969844,-4.2118585485798534e-5,3.6704856042820815e-8,0.001437770451447845,-4.2110786884528316e-5,3.669912913273134e-8,0.0014378196981251372,-4.21642244916051e-5,3.6736925449717485e-8,0.0014379224790505686,-4.226308798281828e-5,3.680616377621557e-8,0.0014380955334853483,-4.238200534606743e-5,3.6888012155040675e-8,0.0014383449114242503,-4.2488670304332985e-5,3.6959034935254815e-8,0.0014386623333420816,-4.254848883471872e-5,3.69946922542799e-8,0.001439023053413255,-4.253172746547254e-5,3.6974437223496824e-8,0.00143938722951177,-4.242284653717159e-5,3.688818009449981e-8,0.001439707137154768,-4.222971419566938e-5,3.674257304428873e-8,0.0014399409659193428,-4.198781671588203e-5,3.656376280190634e-8,0.001440069459918548,-4.1753765044836575e-5,3.6392606119182155e-8,0.001440106597622063,-4.158679104094984e-5,3.6271381464065536e-8,0.0014400959148385573,-4.1525832600832144e-5,3.622739349459521e-8,0.0014400927711180566,-4.15752438414865e-5,3.626283531393904e-8,0.0014401429180055368,-4.170699406909172e-5,3.635659541946491e-8,0.0014402691460889587,-4.1875615871244114e-5,3.6475292110604114e-8,0.0014404700687453444,-4.20353985030447e-5,3.658586574851633e-8,0.0014407270427852904,-4.215187194132588e-5,3.666388371140973e-8,0.001441013130719309,-4.220595818615349e-5,3.6696359973947585e-8,0.0014413003263376396,-4.219308157288958e-5,3.6680826446642095e-8,0.001441564033217401,-4.212012924590863e-5,3.662287749152233e-8,0.0014417853809006085,-4.2002181831792545e-5,3.653368462176073e-8,0.0014419523959797523,-4.185969337729201e-5,3.642799751790315e-8,0.0014420606999227586,-4.171600435622608e-5,3.632248964966348e-8,0.0014421139198980406,-4.159487387718513e-5,3.623411674528073e-8,0.0014421237028206181,-4.151777055500738e-5,3.6178218018737015e-8,0.0014421089934266833,-4.150085444996026e-5,3.6166287820635e-8,0.0014420941576250958,-4.155198804294638e-5,3.620370937664565e-8,0.0014421057972856064,-4.166845338362705e-5,3.628802792965738e-8,0.0014421685219863218,-4.183607922736202e-5,3.6408352528175015e-8,0.0014423002757643633,-4.203032172674412e-5,3.65463031098458e-8,0.0014425080608542666,-4.22195472333642e-5,3.667862994977846e-8,0.001442784991572208,-4.237031728117714e-5,3.6781252110025435e-8,0.0014431095090614871,-4.245409762385614e-5,3.6834180674033206e-8,0.0014434474962299161,-4.245454297942441e-5,3.682664986919906e-8,0.0014437579597159325,-4.237398291446551e-5,3.676149381934002e-8,0.0014440024218877274,-4.2236870836770005e-5,3.665727124065034e-8,0.0014441566692500326,-4.208735480065546e-5,3.654623465415403e-8,0.0014442210777839057,-4.197894413823149e-5,3.646678154580181e-8,0.0014442238639085503,-4.1957657259825583e-5,3.6451395741224957e-8,0.001444213177633174,-4.204514955028633e-5,3.6514704020701185e-8,0.0014442400148779796,-4.2230738483301597e-5,3.664799820937176e-8,0.001444340327612597,-4.2477002171248194e-5,3.6823531208232587E-08,0.0014445252831045401,-4.273521305190709e-5,3.700583739358809e-8,0.001444782633063003,-4.296167146369278e-5,3.716358146341754e-8,0.0014450854085491184,-4.312785702347721e-5,3.727679374827056e-8,0.001445401951167018,-4.322288651739154e-5,3.733842340885731e-8,0.001445703365975638,-4.3250813436262515e-5,3.735212787958807e-8,0.0014459674945798882,-4.32260760357198e-5,3.73288004390637e-8,0.001446180300220262,-4.316923443732345e-5,3.728344873718978e-8,0.0014463359582635035,-4.310370309668452e-5,3.723292189167686e-8,0.0014464365687389773,-4.305328850624032e-5,3.719426687269874e-8,0.0014464918465855834,-4.304002473972689e-5,3.718325365119318e-8,0.0014465186728166825,-4.308181819575483e-5,3.721266618215463e-8,0.0014465400355141305,-4.3189687170519945e-5,3.7290221487352145e-8,0.0014465827531187007,-4.336489798552785e-5,3.741640893771544e-8,0.0014466736056468219,-4.3596841039752464e-5,3.758294229173246e-8,0.0014468340922974643,-4.386279199894946e-5,3.77726972029659e-8,0.0014470748301542683,-4.413057535440872e-5,3.7961848327240886e-8,0.0014473912922101449,-4.4364408720834884e-5,3.812432810558878e-8,0.0014477626657607462,-4.453297875666711e-5,3.8237820661230854e-8,0.001448154854433801,-4.461771816489685e-5,3.828974037644961e-8,0.0014485274030723117,-4.461890202134063e-5,3.8281447589952853e-8,0.0014488429638407447,-4.455758179245559e-5,3.822931479912126e-8,0.001449077126957026,-4.447225398864734e-5,3.816195570741389e-8,0.001449226023125882,-4.441032020245069e-5,3.8113794316332475e-8,0.0014493090755652274,-4.441579020404974e-5,3.8116125833806295e-8,0.001449364947092221,-4.451633994090186e-5,3.818794133287042e-8,0.0014494407057380814,-4.471426477041007e-5,3.832972073058778e-8,0.0014495774144823556,-4.498555350055323e-5,3.8523117853081915e-8,0.0014497978450341655,-4.5288121537755064e-5,3.873716648698755e-8,0.001450101396289851,-4.557563857325436e-5,3.89383696430426e-8,0.0014504674700356046,-4.581077178440381e-5,3.9100206897818924e-8,0.001450864329811925,-4.59729347684755e-5,3.920855010190983e-8,0.001451258767715561,-4.605934108050844e-5,3.92621859121156e-8,0.001451623153623208,-4.608136827590191e-5,3.926997648012008e-8,0.0014519388956488832,-4.605924560935e-5,3.9246910208725725e-8,0.0014521971379447417,-4.6017229535460886e-5,3.9210629613232204e-8,0.0014523980389310705,-4.5980057149587095e-5,3.917896492879653e-8,0.0014525496603379358,-4.597051953376308e-5,3.9168276920308264e-8,0.0014526669574361673,-4.600759430739576e-5,3.9192135619664394e-8,0.0014527708281076104,-4.610453020282936e-5,3.9259884840940946e-8,0.0014528867245701964,-4.626654176388048e-5,3.9374895639106777e-8,0.0014530421048613528,-4.648831416903428e-5,3.9532731387203335e-8,0.0014532621468013511,-4.6752190201937326e-5,3.971990995005398e-8,0.0014535637916342824,-4.7028515568426274e-5,3.9914326393312656e-8,0.0014539493947660874,-4.727971460801391e-5,4.008841173852169e-8,0.0014544025921314587,-4.7468597955633217e-5,4.021531201044032e-8,0.0014548892922685616,-4.7569142347220584e-5,4.027675511472258e-8,0.0014553650558184153,-4.7575810436338764e-5,4.026972977663235e-8,0.0014557870851216873,-4.750717265528638e-5,4.020889782847651e-8,0.0014561265502366723,-4.7401772022354576e-5,4.012327246018735e-8,0.0014563767220609832,-4.730757137609055e-5,4.004821937536077e-8,0.00145655435776092,-4.726880621379515e-5,4.001569186801683e-8,0.001456694463586125,-4.73144514864003e-5,4.004587627083997e-8,0.0014568404770532691,-4.7451327393656046e-5,4.0142460997834714e-8,0.0014570327641523222,-4.7663290283813975e-5,4.029246947753112e-8,0.001457298519145466,-4.7916441311999795e-5,4.047043105356473e-8,0.0014576457793189451,-4.816871716330359e-5,4.064555627563837e-8,0.0014580630692166065,-4.8380870254886153e-5,4.07896946312839e-8,0.0014585242916217804,-4.85254475628263e-5,4.0883660976549706e-8,0.0014589966823086494,-4.859135992178545e-5,4.092028278391199e-8,0.0014594488895383127,-4.8583561201735886e-5,4.0903922552317477e-8,0.0014598568660654338,-4.851917902858856e-5,4.084752107398645e-8,0.001460206718017994,-4.8422238333548e-5,4.0768741953613706e-8,0.0014604949812930131,-4.831876578154884e-5,4.068648768877478e-8,0.0014607274013576004,-4.823314160900414e-5,4.0618350180221016e-8,0.0014609172150457537,-4.8185712318530414e-5,4.057893429465176e-8,0.001461083502746424,-4.8191179258434105E-05,4.0578670798416085e-8,0.001461249671904525,-4.82571706133708e-5,4.0622715345642995e-8,0.001461441693727446,-4.838261929000545e-5,4.07097296081658e-8,0.0014616854233344243,-4.8556014057686534e-5,4.083066061163576e-8,0.0014620023267894015,-4.8754249269082786e-5,4.0968058990523775e-8,0.0014624034953483796,-4.894358809285292e-5,4.109698020827211e-8,0.0014628831941533296,-4.908464338861261e-5,4.118875936509696e-8,0.0014634150433660768,-4.914226299762998e-5,4.121824393937142e-8,0.0014639548020531532,-4.9098224861191336e-5,4.117296927439143e-8,0.001464451637979818,-4.8961091183785824e-5,4.106020733296679e-8,0.0014648646915946838,-4.8766820370606e-5,4.090722801199529e-8,0.0014651772883869003,-4.8568009313809076e-5,4.075319349404685e-8,0.0014654017214941388,-4.8416426777365386e-5,4.063612262558724e-8,0.0014655731149098806,-4.834715390556542e-5,4.05811408271586e-8,0.0014657366598345033,-4.8370472978448067e-5,4.0594648027202523e-8,0.0014659342958094506,-4.847253437725393e-5,4.066516335293664e-8,0.0014661950114605521,-4.862215666828612e-5,4.076876008564538e-8,0.0014665301910791108,-4.8780249807602064e-5,4.0876316291687736e-8,0.0014669336173157724,-4.8909088442915184e-5,4.096041061837196e-8,0.0014673849869394323,-4.89797010783182e-5,4.10005813588427e-8,0.0014678556191269404,-4.8976435201010984e-5,4.0986359543432826e-8,0.0014683149714162325,-4.889830880085964e-5,4.091793502517985e-8,0.0014687365529222206,-4.875735290426732e-5,4.080472681276175e-8,0.0014691021142846357,-4.857481423921316e-5,4.0662543710692137e-8,0.0014694036337962362,-4.8376450354823765e-5,4.0510213167388694e-8,0.0014696432745798936,-4.8188046898087444e-5,4.0366429937764576e-8,0.0014698319277800106,-4.803190530328035e-5,4.0247286006004545e-8,0.0014699871102827962,-4.7924526915939426e-5,4.0164595796703556e-8,0.0014701307848855516,-4.787522027490336e-5,4.012482396092963e-8,0.0014702872622128149,-4.788517195205734e-5,4.012834089633514e-8,0.0014704809975428358,-4.794666693736669e-5,4.0168855709075365e-8,0.0014707338344027386,-4.804244009905834e-5,4.0233062784634995e-8,0.0014710611213139102,-4.814566107532364e-5,4.030084085232558e-8,0.0014714665413726273,-4.822181569590968e-5,4.034683134470572e-8,0.001471936732554558,-4.823419676772928e-5,4.0344537351810816e-8,0.0014724385787785134,-4.815393883152968e-5,4.02735824939934e-8,0.0014729232921461939,-4.7972708991935915e-5,4.012881131104992e-8,0.001473339733380658,-4.771194684085152e-5,3.99268721108642e-8,0.0014736534482333627,-4.7420811459529796e-5,3.97045678271898e-8,0.0014738614631978186,-4.716016424666695e-5,3.9506949528936975e-8,0.0014739933492919856,-4.697982067329245e-5,3.937043540172194e-8,0.0014740979744279096,-4.690167112469379e-5,3.931032980142313e-8,0.0014742246024554207,-4.691644256644111e-5,3.9318604552850936e-8,0.0014744082651071803,-4.69922299640802e-5,3.9370563974310175e-8,0.0014746637140043946,-4.708756851895923e-5,3.943489870131204e-8,0.0014749866046875014,-4.7162958123676244e-5,3.948243157993727e-8,0.001475358543065385,-4.71883294842356e-5,3.949159654624633e-8,0.001475753210166725,-4.714652817698946e-5,3.945074236392933e-8,0.001476142078096254,-4.7033888847950614e-5,3.9358189832320374e-8,0.0014764992123982724,-4.685887934392134e-5,3.9220928510260014e-8,0.0014768049713061416,-4.663938791887539e-5,3.905248086942313e-8,0.001477048391317066,-4.639911917690382e-5,3.8870289051615004e-8,0.0014772281442441146,-4.61636413222774e-5,3.86929540003015e-8,0.0014773521218631534,-4.595660324837137e-5,3.8537604231317574e-8,0.0014774358574483667,-4.579659133441228e-5,3.841765492707048e-8,0.0014775001956065402,-4.569496823083304e-5,3.8341186816552856e-8,0.0014775686820781154,-4.565470129067433e-5,3.830999686167372e-8,0.0014776649243166784,-4.566994456347111e-5,3.8319233095593914e-8,0.0014778099359220231,-4.5726192560117234e-5,3.83575570353092e-8,0.0014780193244124584,-4.580097117160524e-5,3.840782891730723e-8,0.0014783000450939625,-4.5865328797617776e-5,3.8448445201550915e-8,0.0014786467079729625,-4.588696439857752e-5,3.845582251437362e-8,0.0014790384080720245,-4.583611242343526e-5,3.840873944588172e-8,0.0014794383527260398,-4.56945594107753e-5,3.82947864626867e-8,0.001479799398450005,-4.5465999161076066e-5,3.811769435150879e-8,0.0014800774121277783,-4.518250806512075e-5,3.790185132520664e-8,0.0014802492942168032,-4.489995809258601e-5,3.768879845012064e-8,0.0014803258879004637,-4.467961171000656e-5,3.7523621216932424e-8,0.0014803496588216847,-4.456364916372832e-5,3.7436882425543227E-08,0.0014803767789849922,-4.455914717389837e-5,3.743285124826617e-8,0.00148045471663273,-4.463944669785187e-5,3.749072374826842e-8,0.0014806079903739232,-4.4759080332929866e-5,3.757599995374444e-8,0.0014808363575325631,-4.4871298219932226e-5,3.7653765328709984e-8,0.0014811213748755097,-4.49400791113898e-5,3.7697698950566665e-8,0.0014814353063795221,-4.494494148911797e-5,3.769349125262831e-8,0.0014817486607833878,-4.488064489949951e-5,3.7638296039217246e-8,0.0014820352591590176,-4.475444899156155e-5,3.75383511170801e-8,0.001482275222988769,-4.458271568201399e-5,3.740624045556785e-8,0.0014824566343186552,-4.438752806725547e-5,3.7258364186440963e-8,0.0014825762933425046,-4.41933973514123e-5,3.711263205430016e-8,0.0014826396781233982,-4.402407385189993e-5,3.698628868785702e-8,0.0014826601038704105,-4.3899537486014864e-5,3.689381745950238e-8,0.0014826570290835308,-4.3833355408042506e-5,3.684500249109746e-8,0.0014826535665252642,-4.383076384824262e-5,3.684342893133268e-8,0.0014826734964349505,-4.388776027353641e-5,3.688571137475423e-8,0.0014827381250709867,-4.3991250197185465e-5,3.696157870415823e-8,0.0014828632277558774,-4.4120225732295084e-5,3.7054853705114773e-8,0.0014830562790585913,-4.424796254416029e-5,3.7145299091021524e-8,0.001483314114902658,-4.4345226853738956e-5,3.721123064884487e-8,0.0014836212427355765,-4.438471351759688e-5,3.723292906691934e-8,0.0014839495880320053,-4.434704884177869e-5,3.719700534277648e-8,0.0014842612053440878,-4.4227969750309367e-5,3.7101437221589655e-8,0.001484515578411819,-4.4044706083483356e-5,3.6959930289161086e-8,0.0014846818321571568,-4.383767436946015e-5,3.6802887599284104e-8,0.001484752665298912,-4.366282494601175e-5,3.6671649941767425e-8,0.0014847523079773632,-4.357345179251354e-5,3.6605110282143873e-8,0.0014847306685902028,-4.3598461730291396e-5,3.662379044416523e-8,0.0014847439416985908,-4.372996532663204e-5,3.672084767057359e-8,0.001484832455576805,-4.392834159757466e-5,3.6866053246575335e-8,0.0014850084524969315,-4.414052139172515e-5,3.701958292803764e-8,0.0014852579225742377,-4.4319394962506785e-5,3.7146574635816525e-8,0.00148555111690797,-4.443521318072178e-5,3.7225576915926685e-8,0.0014858540251273446,-4.447773434048518e-5,3.724992857383376e-8,0.0014861364543161625,-4.445270363925244e-5,3.722482225495067e-8,0.0014863760913723298,-4.437656318307988e-5,3.716309655277369e-8,0.0014865597532513933,-4.427164451826376e-5,3.708154822513582e-8,0.0014866832683675857,-4.4162460074345484e-5,3.699824191460888e-8,0.0014867508559287582,-4.407282323694022e-5,3.693054466535894e-8,0.0014867742340000237,-4.402339782503651e-5,3.68934712540527e-8,0.0014867713714220555,-4.402943420367354e-5,3.689807422058526e-8,0.0014867646564762282,-4.409867285281513e-5,3.6949844467746125e-8,0.0014867782740302412,-4.422973621937711e-5,3.7047415402730984e-8,0.0014868348754921309,-4.441152508594255e-5,3.718204520461165e-8,0.0014869519465962582,-4.462400182095811e-5,3.733824048865543e-8,0.0014871384186216602,-4.484053098879151e-5,3.749566462993671e-8,0.0014873921480441546,-4.5031733174503954e-5,3.7632239067973675e-8,0.0014876988747097991,-4.517047600970056e-5,3.772804673560034e-8,0.0014880330851069787,-4.5237407062414714e-5,3.776948065811721e-8,0.0014883611336936045,-4.522638867386191e-5,3.7753106366925946e-8,0.0014886470419661934,-4.5148829423299135e-5,3.768853679617695e-8,0.0014888610099375744,-4.503511107630251e-5,3.75991142701746e-8,0.0014889893734640611,-4.493078727593386e-5,3.7518833390943256e-8,0.0014890426802024238,-4.4885939658503095e-5,3.74844077895564e-8,0.0014890568559620368,-4.493900359979849e-5,3.752344755667185e-8,0.0014890836459080803,-4.5101175184416406e-5,3.7643181361237684e-8,0.001489172305795643,-4.535029512050693e-5,3.7826206234394064e-8,0.0014893513815948645,-4.5639131365739326e-5,3.803685162170241e-8,0.0014896203853677792,-4.591379586939746e-5,3.8234980089391865e-8,0.0014899543663838013,-4.613185728141613e-5,3.8389462478218916e-8,0.0014903162297077394,-4.6271946349084726e-5,3.848520377485263e-8,0.0014906691385107214,-4.6333741604474694e-5,3.852289537208366e-8,0.0014909844428688587,-4.6332267253878814e-5,3.851449641139075e-8,0.0014912446994979787,-4.629096295265064e-5,3.8477884251820716e-8,0.001491443475023993,-4.623604922293549e-5,3.843262815520471e-8,0.0014915838036451312,-4.61927449105687e-5,3.8397284898482245e-8,0.0014916764513131834,-4.618284796155863e-5,3.838776175182558e-8,0.0014917383357409837,-4.622298504810592e-5,3.8416126988273096e-8,0.0014917909428913139,-4.632303584535767e-5,3.848944739748476e-8,0.0014918583550758398,-4.648458412369112e-5,3.860856466449232e-8,0.0014919645095770773,-4.669969166698596e-5,3.8767106301308565e-8,0.001492129594339425,-4.695065290037247e-5,3.895130296913219e-8,0.0014923659795207224,-4.721144655663761e-5,3.914118664687933e-8,0.0014926745732702724,-4.745133715731877e-5,3.931347861780057e-8,0.0014930428020581202,-4.764050267803905e-5,3.944599080200351e-8,0.0014934453287540244,-4.77567381989998e-5,3.952272977792478e-8,0.0014938479976421455,-4.7791615726440825e-5,3.9538419803086526e-8,0.0014942145959709434,-4.775437268653611e-5,3.950114664854367e-8,0.0014945152548361581,-4.7672147717775885e-5,3.943216537025932e-8,0.0014947347496844735,-4.758571958330954e-5,3.936237614997539e-8,0.0014948784839529095,-4.754071729882442e-5,3.9325587712150906e-8,0.001494973688060228,-4.7575580700830986e-5,3.934960606065222e-8,0.001495063893699758,-4.7709339668887554e-5,3.9447410821275483e-8,0.0014951967819727924,-4.793386974666786e-5,3.961177012530231e-8,0.0014954089548056488,-4.82150113356529e-5,3.9816407071216556e-8,0.001495713972368483,-4.8503439552528306e-5,4.0024278257678855e-8,0.0014960992299929698,-4.875088216767253e-5,4.0199671339311314e-8,0.0014965325627533485,-4.892426755697233e-5,4.031863181757441e-8,0.0014969742965597005,-4.9012244353112056e-5,4.037361715514292e-8,0.0014973887060458133,-4.90234527916337e-5,4.037196030438772e-8,0.0014977509975768778,-4.897987925534544e-5,4.033069659995429e-8,0.0014980493699429142,-4.8909370842569586e-5,4.0270872530960104e-8,0.0014982838272042372,-4.8839785143966184e-5,4.0213214367086265e-8,0.0014984636893112296,-4.879533379597899e-5,4.017552829673121e-8,0.0014986050564438516,-4.879459745805125e-5,4.0171351190536136e-8,0.0014987286878216618,-4.884940264365551e-5,4.020917276631506e-8,0.0014988581486848397,-4.8963892845157507e-5,4.029171690125393e-8,0.0014990177337836207,-4.9133541633318104e-5,4.0415144161886566e-8,0.0014992296650089489,-4.934439725353427e-5,4.056846910653133e-8,0.0014995103608385159,-4.957328780427341e-5,4.073379081419653e-8,0.0014998661313054954,-4.978992849651283e-5,4.0888033317214166E-08,0.001500289438846751,-4.996169395570395e-5,4.100670227701081e-8,0.0015007575640223773,-5.00609271009138e-5,4.1069476582698656e-8,0.0015012354183340914,-5.0073132062903215e-5,4.106633523245191e-8,0.001501682931435136,-5.000313393611321e-5,4.10020124318666e-8,0.0015020653958463235,-4.9876318236111225e-5,4.089664152349184e-8,0.001502363510762478,-4.973362668651773e-5,4.078166708635209e-8,0.0015025796036362987,-4.9621359434477365e-5,4.06919240015438e-8,0.001502737788613337,-4.957881774687852e-5,4.0656280257301776e-8,0.0015028778851812186,-4.9627518948032364e-5,4.0689710099869005e-8,0.001503044775055048,-4.9765138003926926e-5,4.078912007859041e-8,0.001503276131990282,-4.9966042084288354e-5,4.093418214974257e-8,0.0015035921340975534,-5.0188522911167886e-5,4.109307745813918e-8,0.0015039904959644906,-5.038664086853307e-5,4.12314822617478e-8,0.0015044484479765602,-5.052272450607022e-5,4.1321828260849926e-8,0.0015049305867960681,-5.057627006151882e-5,4.1349724488542334e-8,0.0015053992671028003,-5.0546698588028124e-5,4.1315734395285215e-8,0.001505823682333701,-5.0450202162379264e-5,4.123276774522326e-8,0.0015061851264551991,-5.03131376162049e-5,4.1120991139124105e-8,0.00150647810650972,-5.0164985415371416e-5,4.100254562995308e-8,0.0015067085911635734,-5.003289045076868e-5,4.0897557578942296e-8,0.0015068910568689683,-4.9938339881018866e-5,4.0821788084939146e-8,0.0015070455081733843,-4.989557017837055e-5,4.078553560863914e-8,0.0015071949768719031,-4.991095762554463e-5,4.079319265895584e-8,0.0015073634330199596,-4.998270255847455e-5,4.0842964940455486e-8,0.001507573648758257,-5.0100484272582855e-5,4.092657881678172e-8,0.001507844474226869,-5.024531275080717e-5,4.1029213145852093E-08,0.0015081872475477102,-5.039029477878423e-5,4.113020982278904e-8,0.001508601639381369,-5.0503348351200574e-5,4.1205288990591655e-8,0.0015090721800536042,-5.0552825964399286e-5,4.123090271547341e-8,0.0015095677542445187,-5.051598845732162e-5,4.119061726808571e-8,0.0015100464398749296,-5.0388137396494456e-5,4.1081869583940654e-8,0.0015104661524490966,-5.0188150732697904e-5,4.091992886992478e-8,0.0015107980562968522,-4.995626598255443e-5,4.073597315450068e-8,0.0015110369884425087,-4.974323096834382e-5,4.056865503257804e-8,0.0015112037636235288,-4.9594689096187027e-5,4.0452143784550536e-8,0.0015113382538688342,-4.9537390122333774e-5,4.040571885063075e-8,0.001511486651518908,-4.9572491390367476e-5,4.0428949376900265e-8,0.0015116882343063284,-4.9677288522526345e-5,4.0503412055625985e-8,0.001511965832908493,-4.981328246977489e-5,4.0599203239587485e-8,0.0015123218678560742,-4.993712667865752e-5,4.0683458185044255e-8,0.0015127398774388951,-5.001120491259384e-5,4.072833176366586e-8,0.0015131902459503254,-5.0011430442294444e-5,4.0716651632460574e-8,0.0015136381639806527,-4.9930908725903795e-5,4.064433406034829e-8,0.0015140516272895985,-4.977923819466192e-5,4.051953249837382e-8,0.0015144075622012096,-4.9578319631606846e-5,4.035928102066704e-8,0.0015146949683276282,-4.9356355695184494e-5,4.0184938821169755e-8,0.0015149150502128804,-4.9141887980333486e-5,4.0017799643976816e-8,0.0015150791746275875,-4.895917584109024e-5,3.9875772118617474e-8,0.0015152057997848073,-4.8825388632539786e-5,3.977139653273003e-8,0.0015153173317295856,-4.874940504486354e-5,3.971098695425316e-8,0.0015154374095433952,-4.8731643689852686e-5,3.9694467703771245e-8,0.0015155886318726306,-4.876432642304724e-5,3.971551230211538e-8,0.0015157903988936615,-4.8831866635134174e-5,3.976183295261236e-8,0.0015160564336704537,-4.891150797550089e-5,3.9815759747989534e-8,0.001516391691608481,-4.8974788479225625e-5,3.985552106330658e-8,0.0015167888924818176,-4.899079602098747e-5,3.985786664037715e-8,0.0015172258993118245,-4.893217400965164e-5,3.9802659015735863e-8,0.0015176663030841539,-4.878381729040918e-5,3.967934665594565e-8,0.0015180658418397924,-4.855185669703154e-5,3.9493549812086156e-8,0.0015183852145058741,-4.8267882631723335e-5,3.927002879151628e-8,0.001518605245428821,-4.7983227159816685E-05,3.904816418536927e-8,0.0015187364109845078,-4.7752853667001454e-5,3.8869607112691156e-8,0.0015188162107197098,-4.76157007253304e-5,3.876330623471329e-8,0.0015188951081814535,-4.7581646967552716e-5,3.87356971621642e-8,0.0015190187423242043,-4.763095682004308e-5,3.877055536279872e-8,0.0015192148843438057,-4.7724206359166875e-5,3.883693164021174e-8,0.0015194889111096335,-4.7816122036906335e-5,3.890001525702813e-8,0.0015198265573875282,-4.78675190041975e-5,3.893034461914193e-8,0.0015202006147450764,-4.785267690604367e-5,3.8909281403952436e-8,0.0015205786058022936,-4.776206764521024e-5,3.883074987792664e-8,0.001520929655959892,-4.7601511265561416e-5,3.8700210594517606e-8,0.0015212297485279174,-4.73889457227636e-5,3.853192522081979e-8,0.001521464985636384,-4.714978616986874e-5,3.834534142739313e-8,0.001521632714070136,-4.691181862109943e-5,3.8161308626593714e-8,0.0015217407259916819,-4.6700544473304215e-5,3.7998737945680615e-8,0.001521805050737679,-4.653561112622005e-5,3.7872078917049705e-8,0.0015218469609350476,-4.6428620942574455e-5,3.77897496515343e-8,0.0015218898209953303,-4.638232433864213e-5,3.7753505077697286e-8,0.0015219562588472324,-4.63908829784902e-5,3.775855431522331e-8,0.0015220657852472567,-4.644073196168358e-5,3.779415592915643e-8,0.0015222326849345393,-4.6511768353575117e-5,3.78445580321092e-8,0.0015224639302797234,-4.6578917633677744e-5,3.789033821231449e-8,0.0015227569400496383,-4.6614434070743716e-5,3.791035015751786e-8,0.0015230973823843132,-4.659163295010869e-5,3.788469386599491e-8,0.0015234580899453059,-4.6490764418833046e-5,3.779915028577375e-8,0.0015238011301948635,-4.630679101973296e-5,3.765088713532935e-8,0.0015240852672769784,-4.6056717425461094e-5,3.7453737167092474e-8,0.001524279176362041,-4.578158370729293e-5,3.723946842777562e-8,0.0015243761207970313,-4.5537893273890615e-5,3.7051147789336374e-8,0.0015244012465784203,-4.537833811089991e-5,3.692846975976653e-8,0.0015244043069810233,-4.5330485030194646e-5,3.689159982476225e-8,0.001524440051851727,-4.5386093677926136e-5,3.693319329946158e-8,0.0015245475921702796,-4.550706901455292e-5,3.70231970685862e-8,0.001524739631177373,-4.564256280847005e-5,3.712221109997426e-8,0.0015250039821238194,-4.574645320979391e-5,3.719506196713576e-8,0.001525312469978232,-4.57880724817201e-5,3.7219009823727845e-8,0.0015256311465300198,-4.575529177708597e-5,3.71858758629502e-8,0.0015259283156329572,-4.5652460184988825e-5,3.710009588757813e-8,0.001526179490549331,-4.549604863952453e-5,3.697504333756095e-8,0.0015263698298762106,-4.5309863016883735e-5,3.682918922629797e-8,0.0015264948690534665,-4.5120549024834013e-5,3.668269874859717e-8,0.0015265600057452486,-4.495356643058214e-5,3.65545436819091e-8,0.0015265789603062382,-4.4829825029204026e-5,3.646015826369734e-8,0.0015265714591917814,-4.476317621887072e-5,3.640967597256171e-8,0.001526560393019653,-4.47588814097071e-5,3.6406785222506725e-8,0.0015265687425595057,-4.481319012855167e-5,3.6448328955322366e-8,0.001526616673386339,-4.491402171639455e-5,3.6524727155707175e-8,0.001526719088838322,-4.5042478706087005e-5,3.662110821247449e-8,0.001526883671120863,-4.517492388060347e-5,3.671899335520608e-8,0.001527109357997393,-4.528556689050531e-5,3.679846629243785e-8,0.0015273852648541443,-4.5349660451110904e-5,3.684080865883039e-8,0.0015276902649918051,-4.5347572784252786e-5,3.683168213824624e-8,0.0015279940023550515,-4.5269982630066084e-5,3.676496818810432e-8,0.001528260741500139,-4.5123660491407865e-5,3.664687940483986e-8,0.0015284573649040436,-4.493568923535388e-5,3.649883068748661e-8,0.0015285651819203082,-4.475224028990135e-5,3.6356268024786054e-8,0.001528591522529057,-4.462799322930828e-5,3.6260564495138095e-8,0.0015285733068809862,-4.4606708170989893e-5,3.6244339332635135e-8,0.0015285663015500417,-4.4701580903939586e-5,3.631667920617675e-8,0.001528623057978843,-4.4888075568297965e-5,3.645788182105769e-8,0.0015287721301055885,-4.511488889181742e-5,3.662804240559266e-8,0.0015290104785997134,-4.532567197125326e-5,3.678385405657058e-8,0.0015293104382067145,-4.547810886081325e-5,3.689331286542308e-8,0.0015296334898081117,-4.555238252513215e-5,3.6942127930790746e-8,0.0015299425822774475,-4.5549875508693376e-5,3.6932458321921016e-8,0.0015302094618059117,-4.5487012585997464e-5,3.687784149123152e-8,0.0015304173593234294,-4.538838777224406e-5,3.6797650641900755e-8,0.0015305608012845585,-4.5281191160702335e-5,3.6712741731269536e-8,0.0015306441945146152,-4.5191250244956506e-5,3.664253537729438e-8,0.0015306800306723414,-4.514019365633332e-5,3.660306514411148e-8,0.0015306868440561443,-4.5143317412885504e-5,3.660554118454364e-8,0.0015306868688130097,-4.5208046874071456e-5,3.665525950628058e-8,0.001530703372269813,-4.533304361844633e-5,3.675088279926432e-8,0.0015307577071024677,-4.550816475509205e-5,3.6884311766138235e-8,0.0015308663545292767,-4.5715530714938635e-5,3.7041438425744794e-8,0.001531038403461839,-4.5931705831679506e-5,3.7203859056823594e-8,0.0015312738096312358,-4.613076201647923e-5,3.7351380006003594e-8,0.001531562647587085,-4.628797631784266e-5,3.7465058196804165e-8,0.001531885540287841,-4.638388948223532e-5,3.753045447184219e-8,0.0015322154350115606,-4.6408424099129384e-5,3.75407624833672e-8,0.0015325210181051422,-4.636473481435046e-5,3.749952617090675e-8,0.0015327722562987192,-4.62720299113284e-5,3.742243109933671e-8,0.0015329482178092664,-4.616568661040811e-5,3.7337038635539955e-8,0.0015330459667584296,-4.60922941785365e-5,3.7278814888025735e-8,0.001533087023241133,-4.609795126881395e-5,3.728225619249699e-8,0.001533115983708838,-4.621153374983078e-5,3.736837190134323e-8,0.0015331876400693626,-4.643018459294151e-5,3.753391652633899e-8,0.0015333461088477486,-4.6716886718747485e-5,3.7749779963297116e-8,0.001533607077938741,-4.701413330082583e-5,3.797158062251958e-8,0.0015339536898771556,-4.7266463413301e-5,3.8156979046495933e-8,0.0015343469210881689,-4.7438804933053115e-5,3.827972461061156e-8,0.0015347420400233514,-4.7522609577066365e-5,3.833423468532848e-8,0.0015351018922789568,-4.75311913550837e-5,3.833175719045527e-8,0.0015354032268769953,-4.7490536847499134e-5,3.8293014468682244e-8,0.0015356372503282487,-4.7430749661384474e-5,3.8241437080403724e-8,0.0015358072060457936,-4.738020854009638e-5,3.819867181103716e-8,0.0015359252275494756,-4.736231090740194e-5,3.818223813016995e-8,0.0015360095332831896,-4.739380510817324e-5,3.820445815928393e-8,0.0015360820478136717,-4.748383499571379e-5,3.82718722773441e-8,0.001536166141831675,-4.763330834665019e-5,3.838478548063725e-8,0.001536284194639195,-4.783458629340891e-5,3.8536969464764897e-8,0.0015364548174580863,-4.8071792138992605e-5,3.871582755825761e-8,0.001536689888308331,-4.832221693893701e-5,3.890347256035087e-8,0.001536991949021952,-4.8559125680806725e-5,3.907898810591917e-8,0.0015373526882001662,-4.875585201501901e-5,3.9221757056841037E-08,0.0015377531409755225,-4.889068042494506e-5,3.931538272353313e-8,0.0015381659828674545,-4.895167436888976e-5,3.9351451406966635e-8,0.0015385598715198048,-4.894040830492917e-5,3.9332267184161023e-8,0.0015389053503828088,-4.887366805568127e-5,3.927184980018389e-8,0.0015391815674583567,-4.878238533919379e-5,3.919473310592367e-8,0.0015393827610044833,-4.870713902780217e-5,3.913220935194622e-8,0.001539522826925547,-4.868983638924286e-5,3.911586463438951e-8,0.001539635551012186,-4.8762258491063296e-5,3.916897922140672e-8,0.0015397681169518995,-4.893424373568861e-5,3.929783969200081e-8,0.0015399675307219867,-4.9186670824232385e-5,3.9486747633733346e-8,0.0015402639575685848,-4.94746582698892e-5,3.970072063670472e-8,0.001540658896768355,-4.974203898215638e-5,3.989665648604e-8,0.0015411250260262703,-4.9940960584229624e-5,4.0038309783718896e-8,0.0015416177088270302,-5.0046684404287795e-5,4.010752915400204e-8,0.0015420911707916128,-5.006124568783706e-5,4.010688682435594e-8,0.0015425111740769344,-5.000709715400226e-5,4.00545534176231e-8,0.0015428603593231258,-4.9916572907574924e-5,3.9975967592465016e-8,0.001543137348004615,-4.9822560505639655e-5,3.9896549730067413e-8,0.0015433527728847896,-4.9752685894152456e-5,3.983728353617607e-8,0.0015435248853113634,-4.972672630231794e-5,3.981289716560943e-8,0.0015436759860362377,-4.975595477250484e-5,3.9831537088095255e-8,0.0015438297952060482,-4.984325147671539e-5,3.989494979643839e-8,0.0015440093369692496,-4.998334813656624e-5,3.999866380557658e-8,0.0015442348151259754,-5.016309804535865e-5,4.013214246585282e-8,0.0015445211154071746,-5.0362121259628284e-5,4.027925529887606e-8,0.0015448749611662643,-5.055446980018576e-5,4.0419618992163206e-8,0.0015452923005028491,-5.071189862384606e-5,4.053125674762409e-8,0.0015457569800726891,-5.0808855828295383E-05,4.059460327889975e-8,0.0015462418900000286,-5.082850879931722e-5,4.059724221672877e-8,0.0015467132993301472,-5.076823346637892e-5,4.0538094268894254e-8,0.0015471380038922773,-5.064252614673594e-5,4.042945683138028e-8,0.0015474916360774626,-5.048174585710053e-5,4.0295709244955134e-8,0.0015477657624747324,-5.0326348408581844e-5,4.016852598729084e-8,0.0015479715584376128,-5.02176988612463e-5,4.00795759607021e-8,0.001548138675163666,-5.018759931395581e-5,4.0052468864238434e-8,0.001548309019173918,-5.0249167170106635e-5,4.0095999848332944e-8,0.001548526363415651,-5.039173011559901e-5,4.020064552392213e-8,0.001548824072026234,-5.0581979693915296e-5,4.033985817256759e-8,0.0015492146318262102,-5.0772290610955474e-5,4.047669746431854e-8,0.0015496851936439822,-5.091443598787875e-5,4.057438892398452e-8,0.001550201601146154,-5.0973893683465014e-5,4.0607169310144533e-8,0.001550719547427848,-5.093895551994056e-5,4.0567056747315524e-8,0.0015511979549022272,-5.082132789363123e-5,4.0464060310906736e-8,0.001551609085796503,-5.064930767517722e-5,4.032070429909841e-8,0.001551942485882253,-5.045777032215602e-5,4.0164179972009266e-8,0.001552203365741154,-5.027932903282667e-5,4.0019527762343134e-8,0.0015524080338778475,-5.0138911795649996e-5,3.990557662144009e-8,0.0015525789206599471,-5.005169954767954e-5,3.983352487266917e-8,0.0015527405622942454,-5.0023207216840704e-5,3.980713258549693e-8,0.001552916795278977,-5.005024771803662e-5,3.982350168918181e-8,0.0015531287739189376,-5.012197934084325e-5,3.987384769919168e-8,0.0015533932025365111,-5.022080731770897e-5,3.99441559610026e-8,0.0015537202826231122,-5.03234457482546e-5,4.0016025565273536e-8,0.0015541112665716941,-5.0402810390084915e-5,4.0068239562396716e-8,0.0015545561079804125,-5.0431489448755314e-5,4.007959506236113e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json new file mode 100644 index 000000000..c6ac96168 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":15000,"numberOfSamples":1000,"samples":[0.001555032396790159,-5.038717964716439e-5,4.003321453737454e-8,0.001555507240340409,-5.025945257220019e-5,3.992178064606655e-8,0.0015559433318249748,-5.005568561411016e-5,3.975199831316558e-8,0.0015563086828940746,-4.9802949292686764e-5,3.9545822083813816e-8,0.001556587031841404,-4.9543375923704664e-5,3.9336583092513e-8,0.0015567845028372617,-4.93232976794034e-5,3.9160317297773175e-8,0.0015569291408115862,-4.9179757456819175e-5,3.904518941710335e-8,0.0015570631279621951,-4.912957061070448e-5,3.90031151041951e-8,0.0015572306984882043,-4.916483994647903e-5,3.902661169621281e-8,0.0015574660511056152,-4.9255840502179806e-5,3.9091477245714126e-8,0.0015577847760354089,-4.9359606772293576e-5,3.9163823082464017e-8,0.001558180685115808,-4.943135773630568e-5,3.920908834205859e-8,0.0015586283968716341,-4.943566203060656e-5,3.920059314584998e-8,0.0015590906701226305,-4.9354497209498185e-5,3.9125494924869697e-8,0.001559528261058972,-4.919020584318819e-5,3.8986728207848124e-8,0.0015599093591160292,-4.896289913685733e-5,3.880070214408021e-8,0.0015602159244718476,-4.870367300374791e-5,3.8591890031225615e-8,0.001560445583043622,-4.844627081761637e-5,3.838637217885279e-8,0.0015606095190522666,-4.821988699048854e-5,3.8206389463064e-8,0.001560728059333107,-4.80447105719932e-5,3.8067072967328046e-8,0.0015608258215469178,-4.7930366808124216e-5,3.797538689472998e-8,0.0015609276655558022,-4.787644642721989e-5,3.793059714039383e-8,0.0015610558505919753,-4.7874043041353836e-5,3.792543115973339e-8,0.0015612281647851558,-4.7907464781617856e-5,3.794734148986789e-8,0.0015614564996265033,-4.795579391508165e-5,3.797969902153523e-8,0.0015617453775785114,-4.7994480662788104e-5,3.8003106795686565e-8,0.001562090231917282,-4.799751763502489e-5,3.7997236526191586e-8,0.0015624757732016965,-4.7940913074933274e-5,3.7943666553683704e-8,0.0015628755385377238,-4.780797264952134e-5,3.783002608138753e-8,0.0015632543909054244,-4.759591895225801e-5,3.765503864336205e-8,0.0015635755508337965,-4.7321569326116703e-5,3.743272490582087e-8,0.0015638118247210714,-4.702212301492192e-5,3.719276938020053e-8,0.0015639572183669657,-4.674759666086147e-5,3.697442350326965e-8,0.0015640325431972783,-4.654548661616456e-5,3.681443353406246e-8,0.0015640803149591668,-4.644389332460276e-5,3.673389012822279e-8,0.0015641503210691414,-4.644165242496307e-5,3.673070606589074e-8,0.0015642829369577056,-4.651013021168292e-5,3.678135043023996e-8,0.0015644977495392904,-4.660446073429612e-5,3.685000664095114e-8,0.001564790749643378,-4.6677917336542896e-5,3.6900071652951433e-8,0.001565138707406003,-4.66938238368795e-5,3.690350083708066e-8,0.0015655073435626183,-4.663241657433939e-5,3.6845954665167155e-8,0.0015658602190323327,-4.649255514773499e-5,3.672776169544263e-8,0.0015661663607259592,-4.628936931980565e-5,3.656170224679889e-8,0.0015664055799049252,-4.6049225283354464e-5,3.636883604376693e-8,0.001566571002171141,-4.580336936715299e-5,3.6173502381504967e-8,0.0015666687673390187,-4.558160277952096e-5,3.599852488215996e-8,0.0015667154033415197,-4.5407215387777025e-5,3.586148463513818e-8,0.0015667338355941623,-4.529393320932333e-5,3.577253994149994e-8,0.0015667490993197454,-4.524500274399756e-5,3.573380667359368e-8,0.0015667846174289822,-4.5254024907903564e-5,3.57399848967389e-8,0.001566859497029681,-4.5306834496840176e-5,3.5779734964378544e-8,0.0015669868024443458,-4.5383715412729446e-5,3.583733887760147e-8,0.001567172455798627,-4.546158479647085e-5,3.5894430294282084e-8,0.0015674144103284765,-4.551618411695069e-5,3.593183701499408e-8,0.001567701899164982,-4.5524599621765035e-5,3.593172347162997e-8,0.0015680149455750063,-4.5468646452923546e-5,3.588034316011282e-8,0.001568325023881159,-4.533952995396979e-5,3.577163595791014e-8,0.001568598375261144,-4.514331996072684e-5,3.561129614715066e-8,0.0015688033307539359,-4.490516831986402e-5,3.5419775786897466e-8,0.0015689213635770478,-4.4668520678280764e-5,3.5231422956829793e-8,0.0015689580930293371,-4.448560774152507e-5,3.508694038347068e-8,0.001568947072838441,-4.439966029933874e-5,3.501951652065551e-8,0.0015689406813127415,-4.442653532989222e-5,3.5040594280255434e-8,0.0015689905208410501,-4.454694343553021e-5,3.5134005465375e-8,0.0015691279470960945,-4.471462114836585e-5,3.526264408522862e-8,0.001569355167197491,-4.4874982251366504e-5,3.5383351783517066e-8,0.0015696491590304815,-4.498328840192346e-5,3.5461324901144965e-8,0.0015699730086184231,-4.5014843868502684e-5,3.547806086334234e-8,0.0015702878466824224,-4.496644962533722e-5,3.5432227789964445e-8,0.0015705615045717492,-4.48522455988792e-5,3.5336015448358164e-8,0.0015707731361774711,-4.469737825179658e-5,3.520983386424041e-8,0.0015709146371371892,-4.453167337270511e-5,3.507720338549927e-8,0.0015709899450492496,-4.4384204168804375e-5,3.4960569188722246e-8,0.0015710129446352492,-4.427899769327988e-5,3.487815813513884e-8,0.0015710044338982897,-4.4232035758685976e-5,3.484187409746818e-8,0.0015709885901114629,-4.424966839076787e-5,3.48562113954969e-8,0.0015709893763831153,-4.4328433769242266e-5,3.491813422291662e-8,0.0015710273252120134,-4.4456174728882454e-5,3.501786728147512e-8,0.001571117095259444,-4.4614146603934006e-5,3.514044529398255e-8,0.0015712659471281585,-4.4779625550250765e-5,3.526772890807883e-8,0.0015714729990209998,-4.492865339998087e-5,3.5380643711257126e-8,0.0015717290886569444,-4.503882672267935e-5,3.5461540303863484e-8,0.0015720171486412,-4.509218250304847e-5,3.549662088853352e-8,0.0015723131710548195,-4.507838065681111e-5,3.547847663955526e-8,0.0015725883317389549,-4.499835421555663e-5,3.540880348366659e-8,0.001572813307826608,-4.486786800809496e-5,3.5300892636416496e-8,0.0015729655070056204,-4.47191603474519e-5,3.518058646081875e-8,0.0015730384980441499,-4.459776227937817e-5,3.5083578249073555e-8,0.0015730502214990328,-4.4551776967474605e-5,3.504702004926623e-8,0.0015730436787471955,-4.461436338745037e-5,3.5095992048822466e-8,0.0015730749295945277,-4.478695231412046e-5,3.5230609633398364e-8,0.00157319126570817,-4.5034672737442647e-5,3.542266299781257e-8,0.0015734115792861226,-4.529940702276995e-5,3.562602881073632e-8,0.0015737208148722149,-4.552319788898638e-5,3.5795178558746185e-8,0.0015740799139331147,-4.5667994072365434e-5,3.590075376760617e-8,0.0015744426094396393,-4.572297761098429e-5,3.593523410445762e-8,0.0015747694654922382,-4.570060260613509e-5,3.5909545233455296e-8,0.0015750350883362262,-4.56275210357777e-5,3.584556214181634e-8,0.0015752294134122743,-4.5535604842148e-5,3.576877953266378e-8,0.0015753556604648073,-4.545534529408837e-5,3.5703062165524755e-8,0.0015754271119554817,-4.541175214597163e-5,3.566756900441209e-8,0.0015754637850900197,-4.5422021566715475e-5,3.567516845886349e-8,0.0015754892419881964,-4.549435685857388e-5,3.5731726192643936e-8,0.0015755275323007985,-4.562767745693644e-5,3.5835969133508226e-8,0.0015756002822981585,-4.581213815904196e-5,3.597985887669808e-8,0.0015757240290649212,-4.603051129355547e-5,3.6149580268519345e-8,0.0015759080778055216,-4.626046736804536e-5,3.632726928230143e-8,0.0015761532032229398,-4.6477532670966515e-5,3.6493374497356665e-8,0.0015764513190264005,-4.66583682351069e-5,3.662937540080888e-8,0.0015767861221216862,-4.6784116146357104e-5,3.67205887315865e-8,0.0015771347357232419,-4.6843579857850895e-5,3.6758772560147956e-8,0.0015774703483009739,-4.683599304438294e-5,3.67442426941251e-8,0.0015777659552356682,-4.677317302149219e-5,3.66873186351272e-8,0.0015779995237324785,-4.668049190430199e-5,3.660873387655922e-8,0.0015781605555831091,-4.659528839149842e-5,3.6538079166891776e-8,0.0015782567852510353,-4.656091594072024e-5,3.650901070819981e-8,0.0015783179633283798,-4.6615418475760236e-5,3.655049543919046e-8,0.0015783922903835324,-4.677665068892878e-5,3.667544840847755e-8,0.0015785325756434202,-4.703036852583066e-5,3.687171431896692e-8,0.0015787756427616659,-4.733035159097787e-5,3.7102367094230025e-8,0.0015791259181678027,-4.761430923312568e-5,3.731827295238525e-8,0.0015795538411506713,-4.7828037828527396e-5,3.747709330858676e-8,0.0015800096969891477,-4.7943878769038486E-05,3.7557792145692596e-8,0.0015804431624417705,-4.796481847401571e-5,3.756375094216574e-8,0.0015808178057632656,-4.791635491291735e-5,3.7516101368887467e-8,0.0015811164141571583,-4.783405291768669e-5,3.744360223405161e-8,0.0015813392677104443,-4.775314048922322e-5,3.737423693485045e-8,0.0015814993203580124,-4.7702326404354844e-5,3.733035174588052e-8,0.0015816171643790661,-4.7701193814970105e-5,3.7326791516613286e-8,0.0015817169630395575,-4.775965776778595e-5,3.737071389079256e-8,0.001581823347515752,-4.787832470052812e-5,3.7462041637598934e-8,0.0015819588828547596,-4.8049258257063996e-5,3.7594106726625155e-8,0.0015821417963573898,-4.8257082895207296e-5,3.775446258471748e-8,0.0015823838479101892,-4.848060164321304e-5,3.792608585212836e-8,0.001582688504544025,-4.869520808633535e-5,3.8089269531459865e-8,0.0015830498625370153,-4.887615170356731e-5,3.822428825087552e-8,0.0015834527637300596,-4.9002351733972964e-5,3.8314560752223585e-8,0.0015838743628422021,-4.906026034512833e-5,3.834982706901485e-8,0.001584287221216587,-4.904715037019271e-5,3.832875105474419e-8,0.001584663741938823,-4.897310145628491e-5,3.826032241557493e-8,0.001584981463061841,-4.8861079857009655e-5,3.8163607031293117e-8,0.0015852285820703014,-4.874466991235223e-5,3.8065608345197424e-8,0.0015854088600154176,-4.8662962215500585e-5,3.7997004979177486e-8,0.0015855444217866606,-4.86522846509656e-5,3.798563784368472e-8,0.001585674261819128,-4.8735533803462465e-5,3.804836085608511e-8,0.001585846375312292,-4.891189807186035e-5,3.818334234181005e-8,0.00158610348310477,-4.9151982596995845e-5,3.836657757562266e-8,0.001586466654834368,-4.9403489989380824e-5,3.8556531405909456e-8,0.0015869251102463237,-4.960807810621859e-5,3.870740581132169e-8,0.0015874391429179613,-4.9722343633764594e-5,3.8785587350351096e-8,0.0015879553631793688,-4.973190214442801e-5,3.878064452942808e-8,0.001588425577199708,-4.9652024693980827e-5,3.870567071163837e-8,0.00158881977381429,-4.951725979120483e-5,3.8588846273972866e-8,0.0015891295065786543,-4.936775952074638e-5,3.84623889278333e-8,0.001589364066660281,-4.9238715531157035e-5,3.8354092314337146e-8,0.001589543909685928,-4.9154994199223596e-5,3.8283168581558065e-8,0.0015896945618050432,-4.9129902713118106e-5,3.825948659678869e-8,0.0015898422153512498,-4.916611627099987e-5,3.8284520145138256e-8,0.001590010859028341,-4.925727610695112e-5,3.8352726691160195e-8,0.0015902202966968217,-4.938958761833569e-5,3.845280876708773e-8,0.0015904844846205953,-4.954336749390981e-5,3.8568874325898195e-8,0.0015908099083882816,-4.969485381752708e-5,3.868182932013065e-8,0.0015911941068452644,-4.98187279964764e-5,3.8771413773902485e-8,0.0015916248545581027,-4.989160905264646e-5,3.881908380631811e-8,0.0015920807276100831,-4.9896318601345885e-5,3.881152013111638e-8,0.0015925336582621405,-4.982618528736371e-5,3.874409592893164e-8,0.0015929536328127007,-4.9688213379708714e-5,3.862330576383604e-8,0.0015933149629505758,-4.950379940089145e-5,3.846710078351864e-8,0.001593602808933612,-4.930610263244153e-5,3.830248200720968e-8,0.0015938182399501703,-4.913404445176729e-5,3.8160453318297506e-8,0.0015939802243672306,-4.902380951458289e-5,3.806916042959481e-8,0.0015941233988982489,-4.899946750049259e-5,3.8046581250505863e-8,0.0015942911880484664,-4.906498251129774e-5,3.80945375169188e-8,0.0015945249563040758,-4.920032285756388e-5,3.8196040630227036e-8,0.0015948515164234465,-4.9364207196608636e-5,3.8317796980507725e-8,0.001595273159867582,-4.950449066879408e-5,3.841854809931519e-8,0.0015957650230228916,-4.9573895929635576e-5,3.846143646287539e-8,0.0015962822947114133,-4.954513058246872e-5,3.842577890144347e-8,0.0015967748230214939,-4.941856956430488e-5,3.8312929742037596e-8,0.001597202494943064,-4.921934317902047e-5,3.814375061431865e-8,0.0015975448239908775,-4.898645979137916e-5,3.794978155712491e-8,0.0015978022649466863,-4.876005227964857e-5,3.7762998553756675e-8,0.0015979913135114392,-4.85719625681952e-5,3.76083609760703e-8,0.0015981373497028673,-4.84414879329937e-5,3.750059586381275e-8,0.0015982682896983585,-4.837523496803743e-5,3.744429677813117e-8,0.0015984102235238262,-4.8369073369492696e-5,3.743563223650375e-8,0.0015985848577516198,-4.8410619737028296e-5,3.746436079232389e-8,0.0015988080578801715,-4.848147621960483e-5,3.751556089859576e-8,0.0015990887787054714,-4.8559129023742496e-5,3.7571077107145096e-8,0.0015994279675657184,-4.861890144868653e-5,3.761106919377434e-8,0.0015998175105410416,-4.8636534469734454e-5,3.761614354464905e-8,0.0016002397772522405,-4.859177185400766e-5,3.757032802152641e-8,0.0016006686543139628,-4.84728413566226e-5,3.74647259539885e-8,0.0016010729910405593,-4.828097347843213e-5,3.7301095421887124e-8,0.0016014227983081818,-4.8033231546302496e-5,3.709395135898375e-8,0.0016016972164009232,-4.776158920159305e-5,3.686957478771082e-8,0.001601891799677878,-4.750708267512769e-5,3.6661070725469196e-8,0.0016020220967839574,-4.730984733590426e-5,3.65002268054441e-8,0.0016021214376728508,-4.7197895387483466e-5,3.640855159267248e-8,0.0016022329539292035,-4.7178441191331395e-5,3.6390568883612766e-8,0.001602398098868516,-4.723486700987873e-5,3.64317778525816e-8,0.0016026451775172069,-4.7330459524417435e-5,3.6502037536061675e-8,0.0016029812826023223,-4.741790311922242e-5,3.6563402100527594e-8,0.0016033900211863004,-4.7451924030049034e-5,3.658023478305435e-8,0.0016038359142873748,-4.7401493578198037e-5,3.65287527576269e-8,0.0016042743565764664,-4.725778830099e-5,3.6403069368047857e-8,0.0016046639296792753,-4.703526837810497e-5,3.621574128865795e-8,0.0016049768310006606,-4.676579911472799e-5,3.599284252644777e-8,0.0016052041001474093,-4.6488499312397777e-5,3.576575444073776e-8,0.0016053547788864799,-4.623936983449527e-5,3.556292473478258e-8,0.0016054506685802667,-4.604404725371659e-5,3.540424269592429e-8,0.00160551955904301,-4.591491456251917e-5,3.529894528530359e-8,0.0016055893304846428,-4.585176544402924e-5,3.5246319584402404e-8,0.0016056839738281931,-4.584435487657563e-5,3.523780378361235e-8,0.0016058214226180075,-4.58754099005351e-5,3.525934967930275e-8,0.0016060125662822487,-4.5923316964371105e-5,3.5293484731850514e-8,0.0016062607469574757,-4.5964330399595076e-5,3.5321033008763995e-8,0.0016065612721366269,-4.597465556251913e-5,3.5322825752794e-8,0.001606900939181552,-4.5932990607520925e-5,3.528185027009399e-8,0.0016072580949436541,-4.582396800827508e-5,3.518611857277115e-8,0.0016076041773001588,-4.564246758849356e-5,3.503214741997083e-8,0.001607907835484071,-4.539791130326102e-5,3.482829369055841e-8,0.001608142149154005,-4.511646354493401e-5,3.4596304332457856e-8,0.0016082937279128775,-4.483839603063741e-5,3.4368956580540236e-8,0.001608370164011681,-4.460905850485839e-5,3.418262319337986e-8,0.0016084013367679887,-4.4465215778220584e-5,3.4066244784300986e-8,0.0016084321421592992,-4.442209614898366e-5,3.4031040378216796e-8,0.0016085087032214472,-4.4467328910789975e-5,3.406590890538271e-8,0.001608663854204168,-4.4564751128790306e-5,3.414084287148784e-8,0.0016089078261996121,-4.466603533873435e-5,3.4216585652257157e-8,0.0016092268749752002,-4.472491235101269e-5,3.425621097733665e-8,0.0016095888815234746,-4.470896660568734e-5,3.4234524970492415e-8,0.00160995294459917,-4.46061700180591e-5,3.414304169545714e-8,0.0016102797685153603,-4.442554150736995e-5,3.39901449867369e-8,0.001610540291413511,-4.41928249660299e-5,3.379729090404697e-8,0.001610720877149768,-4.3942959524330366e-5,3.3592785051752095e-8,0.0016108243718107255,-4.3711535533740247e-5,3.340493987008991e-8,0.0016108673896750982,-4.352740556905542e-5,3.325631883018611e-8,0.0016108751528596623,-4.340803798367828e-5,3.31602500419108e-8,0.0016108756639389974,-4.3358117340029234e-5,3.31199083561361e-8,0.00161089471982018,-4.33708154841172e-5,3.312942713946964e-8,0.0016109525410755215,-4.34306101333567e-5,3.317612870807587e-8,0.0016110620470242626,-4.351655218140907e-5,3.3243045504261954e-8,0.001611228317562383,-4.360524372648092e-5,3.331122931252226e-8,0.0016114486396584151,-4.367330914275547e-5,3.336174083792286e-8,0.0016117127150576606,-4.3699607289291936e-5,3.33775293772246e-8,0.0016120029665654158,-4.366764384768521e-5,3.3345510827283086e-8,0.0016122953248352881,-4.35685848202546e-5,3.3259070099345036e-8,0.0016125613483437497,-4.340490324202378e-5,3.312093756709973e-8,0.0016127727551766623,-4.319382193216696e-5,3.294576076085041e-8,0.0016129088996316033,-4.296843215561775e-5,3.276074107332174e-8,0.0016129659137071207,-4.277350269527232e-5,3.260204841704383e-8,0.0016129634518711477,-4.2654123502679954e-5,3.250560511019986e-8,0.0016129434192342419,-4.263951160928507e-5,3.249413087936494e-8,0.0016129578689934336,-4.272950726670111e-5,3.25664702196115e-8,0.001613050232896208,-4.2892278302879625e-5,3.2696007974918103e-8,0.0016132395138366183,-4.307566567224347e-5,3.2840080832235315e-8,0.0016135153781361821,-4.3225967007183096e-5,3.295532521363271e-8,0.0016138447598283675,-4.330446141592195e-5,3.3011068605873004e-8,0.0016141845061787268,-4.329558915141256e-5,3.299579503566333e-8,0.0016144937858859182,-4.320654916003372e-5,3.29165093334752e-8,0.0016147426836319956,-4.3061418898431364e-5,3.2793617549553344e-8,0.0016149162538619413,-4.28932148940195e-5,3.2654235700933185e-8,0.0016150148382885333,-4.273622151749938e-5,3.252591778532962e-8,0.0016150517857130536,-4.261972946654225e-5,3.243173477682972e-8,0.001615049514803641,-4.256367933918242e-5,3.238701919898679e-8,0.0016150347633862986,-4.2576490174574447e-5,3.239787068664833e-8,0.0016150339039934956,-4.265505690214593e-5,3.24613058418649e-8,0.0016150690590622733,-4.278649690659109e-5,3.2566675877575025e-8,0.0016151554483356746,-4.2951022505443604e-5,3.269788817933618e-8,0.0016153001048231429,-4.312527285417708e-5,3.283598386574173e-8,0.0016155017602802555,-4.328548587995333e-5,3.2961656880308e-8,0.0016157514557302796,-4.3410193344149555e-5,3.305749480030836e-8,0.0016160335151886938,-4.348253336100209e-5,3.310998203842222e-8,0.0016163267962227231,-4.3492450229067064e-5,3.311139396130571e-8,0.001616606420595729,-4.343902077762299e-5,3.306167660919614e-8,0.001616846570836147,-4.3332918110579625e-5,3.297027424956425e-8,0.0016170251774682734,-4.319829401359851e-5,3.285736904569684e-8,0.0016171308087405997,-4.307222907662207e-5,3.2753160720529384e-8,0.0016171704476762414,-4.299915965162309e-5,3.2693234113441636e-8,0.0016171742841552047,-4.301865193973153e-5,3.2708769773927315e-8,0.0016171918923307148,-4.314894035091985e-5,3.281350053431754e-8,0.0016172768691222427,-4.337450691395369e-5,3.299396166424684e-8,0.0016174652144145727,-4.364756211844907e-5,3.321089173978478e-8,0.0016177597932134746,-4.390561146011057e-5,3.341354613711286e-8,0.0016181304852361284,-4.4095543629212986e-5,3.3559243265705895e-8,0.0016185284692897027,-4.4190547319258514e-5,3.362705585213057e-8,0.0016189045522376445,-4.4193243891010715e-5,3.362020601659291e-8,0.0016192223969067512,-4.412817824935237e-5,3.355967969498163e-8,0.0016194638193470891,-4.403063195720452e-5,3.34748138358053e-8,0.0016196280163832983,-4.393679585500097e-5,3.339511192107193e-8,0.0016197277267549035,-4.3877154423368346e-5,3.334489133236136e-8,0.0016197845593948158,-4.387287847418416e-5,3.334056960624522e-8,0.0016198245204375643,-4.3934319125600074e-5,3.3389732573910446e-8,0.0016198739737394417,-4.4060948688515964e-5,3.3491313790702704e-8,0.001619956137050907,-4.424248547766236e-5,3.3636593203828094e-8,0.0016200882954145463,-4.4460987523551896e-5,3.381084517949932e-8,0.0016202798937417601,-4.469366279624242e-5,3.399550450501883e-8,0.0016205316675254457,-4.4916122131234496e-5,3.417072218106146e-8,0.0016208358841783572,-4.51056635939364e-5,3.431804144775011e-8,0.0016211775123474187,-4.524417861154815e-5,3.442285758382958e-8,0.0016215360341788234,-4.532053562216261e-5,3.447647579529873e-8,0.0016218877589150979,-4.5332465127465866e-5,3.4477688314315185e-8,0.0016222086413283134,-4.528794941479019e-5,3.4433800071019065e-8,0.0016224777898770169,-4.520602795248432e-5,3.436102856785716e-8,0.0016226820080681198,-4.511649275684907e-5,3.428394416218811e-8,0.0016228212897336288,-4.505716598228851e-5,3.423303906504118e-8,0.0016229139005976808,-4.50670885186496e-5,3.423920259833186e-8,0.0016229978830992289,-4.51749217202737e-5,3.432456868826437e-8,0.0016231246866747196,-4.538503437297744e-5,3.449162408965321e-8,0.0016233428870291516,-4.566853319778398e-5,3.4716252957965794e-8,0.0016236772248806965,-4.596812991238768e-5,3.495178509204106e-8,0.0016241152647686152,-4.621869465816446e-5,3.514559949367053e-8,0.0016246116056889723,-4.637312377459764e-5,3.526003661180751e-8,0.0016251072872445914,-4.6418152194176277e-5,3.5285198490338464e-8,0.0016255516901675028,-4.637296697358738e-5,3.523771443245092e-8,0.0016259155653828902,-4.627592173555477e-5,3.5149685697300395e-8,0.0016261928281600965,-4.616943668607092e-5,3.5056106184870745e-8,0.0016263953747431522,-4.608946050777786e-5,3.4986134383754507e-8,0.00162654592076792,-4.606055522365073e-5,3.4959174040392114e-8,0.0016266717530924076,-4.6094961601108544e-5,3.498436583192719e-8,0.0016268002162611959,-4.619362578856872e-5,3.506170277704274e-8,0.0016269555762756986,-4.6347898809298577e-5,3.5183591772346576e-8,0.0016271567027249208,-4.654151467710764e-5,3.533649211716943e-8,0.0016274153179251607,-4.675286847043376e-5,3.550269075582101e-8,0.0016277348011426761,-4.695766887346226e-5,3.566236234788382e-8,0.0016281097039318963,-4.7132008983412574e-5,3.5796030279421156e-8,0.0016285262644494334,-4.7255678611228e-5,3.5887315314142226e-8,0.001628964073625187,-4.731526564371127e-5,3.5925567937765023E-08,0.0016293987695045343,-4.7306594472402196e-5,3.5907931482636357e-8,0.0016298055166128098,-4.723617482978707e-5,3.5840485560798704e-8,0.0016301629750232944,-4.7121376003895105e-5,3.573820180050115e-8,0.0016304574112304933,-4.698912835410786e-5,3.562359354313474e-8,0.001630686636381212,-4.687296006046646e-5,3.552402309108488e-8,0.001630863266571223,-4.6807921698255846e-5,3.546744809793738e-8,0.001631016074302961,-4.6822961021669483e-5,3.5476346222796364e-8,0.0016311873490471736,-4.6931285427303824e-5,3.556023149782128e-8,0.0016314241196807519,-4.712134705140385e-5,3.570874980570606e-8,0.0016317631244090534,-4.7353656267366736e-5,3.5889370924150126e-8,0.0016322143049490748,-4.756904084464057e-5,3.605411987293246e-8,0.0016327523237028758,-4.770869469055887e-5,3.615570802256036e-8,0.001633323721960312,-4.7737093003807625e-5,3.616600609540491e-8,0.0016338673630050457,-4.7654512699828896e-5,3.608614967055138e-8,0.0016343363161102794,-4.7492623882838964e-5,3.59428498486487e-8,0.0016347097760828822,-4.729839554612501e-5,3.577507367476015e-8,0.0016349924051370127,-4.7117130386448616e-5,3.5619987353530545e-8,0.0016352061343948639,-4.6981902350859326e-5,3.550426387925348e-8,0.0016353807083681227,-4.691028273741784e-5,3.544154910868567e-8,0.0016355464804455415,-4.690570628738172e-5,3.543383998937961e-8,0.001635730112170018,-4.696057989449839e-5,3.5474262687520425e-8,0.0016359523601496132,-4.705941012943231e-5,3.5549738432914185e-8,0.0016362269041772656,-4.718145036852111e-5,3.56431208201011e-8,0.0016365595879771274,-4.730304536267612e-5,3.5735016865504467e-8,0.0016369478987237219,-4.7400035126582016e-5,3.58056778292684e-8,0.0016373808483354118,-4.7450543227840547e-5,3.583728050603426e-8,0.0016378397017732427,-4.7438197284311285e-5,3.581663456998011e-8,0.0016383000265438497,-4.7355354305080354e-5,3.573790790644766e-8,0.001638735210162438,-4.720557229499285e-5,3.5604668453241686e-8,0.0016391211394910926,-4.700451726643738e-5,3.5430520082254106e-8,0.001639441306452008,-4.6778640180967995e-5,3.5237790208829276e-8,0.0016396912690668532,-4.6561377647454084e-5,3.5054142350092676e-8,0.0016398813658379573,-4.63872399230719e-5,3.490753406266736e-8,0.0016400368292994823,-4.628458200577974e-5,3.4820292858860436e-8,0.0016401946504560447,-4.6268117996810935e-5,3.480322538106792e-8,0.0016403967479677747,-4.6332728578918845e-5,3.485095674241419e-8,0.001640679685853359,-4.645083249127904e-5,3.494018708827335e-8,0.0016410627568417529,-4.657595311703952e-5,3.5032828146860476e-8,0.0016415385136823188,-4.665404102506928e-5,3.5085209016852697e-8,0.0016420712361589218,-4.6640593747802424e-5,3.506183028304087e-8,0.0016426066758982037,-4.651680204060536e-5,3.49483030632206e-8,0.0016430902029990438,-4.6296213477060036e-5,3.4756616314912035e-8,0.0016434846325752775,-4.601807762842053e-5,3.451956176891535e-8,0.0016437792010674768,-4.573164001443794e-5,3.4277753576294015e-8,0.0016439873944463735,-4.5480182565328244e-5,3.406648234300473e-8,0.0016441377649539473,-4.5291435015766347e-5,3.390791520498886e-8,0.0016442637177816871,-4.517553440841134e-5,3.38096166616314e-8,0.0016443960339398652,-4.512789702654878e-5,3.376713660815342e-8,0.0016445588953631549,-4.5133752929414504e-5,3.3767884966551584e-8,0.0016447684565497988,-4.517231429766106e-5,3.3794572068923304e-8,0.001645032669366525,-4.521994135279829e-5,3.382772789479797e-8,0.0016453514524502528,-4.5252519765481794e-5,3.3847558228796395e-8,0.0016457168505185967,-4.524759349498278e-5,3.38356608525806e-8,0.001646113327512554,-4.51867851078022e-5,3.3777059144320585e-8,0.0016465187233436285,-4.5058731090684236e-5,3.366270182651552e-8,0.0016469065595708819,-4.4862213010709696e-5,3.349209230451183e-8,0.0016472501485759548,-4.460855757214049e-5,3.327522050357837e-8,0.0016475282892311342,-4.43219688174928e-5,3.303267631530774e-8,0.001647731361928809,-4.40365769207798e-5,3.279298525555044e-8,0.0016478658173717641,-4.378990661504161e-5,3.2587010223876336e-8,0.001647955012278325,-4.361395560197095e-5,3.244050743190803e-8,0.0016480353368982224,-4.352634140384957e-5,3.236693816783387e-8,0.0016481481573200063,-4.352430208745986e-5,3.236282743263174e-8,0.0016483294908475749,-4.358362185466893e-5,3.240727442369534e-8,0.001648600066709863,-4.366323577305269e-5,3.2466074614676396e-8,0.0016489585077819739,-4.371486073861877e-5,3.249977289857885e-8,0.0016493799815096145,-4.369565905864213e-5,3.247396466644824e-8,0.0016498216574363398,-4.35805854427313e-5,3.236916312326058e-8,0.0016502342591044501,-4.337016148742985e-5,3.2186868815840264e-8,0.0016505762173780565,-4.309020706568123e-5,3.194909432152713e-8,0.0016508250968513124,-4.278317246005813e-5,3.1691092721698956e-8,0.0016509819009967624,-4.24946924788503e-5,3.1450271221881416e-8,0.0016510674183862332,-4.226105950962592e-5,3.125597438215787e-8,0.0016511135338679924,-4.210202576888828e-5,3.112374663814163e-8,0.0016511538874274358,-4.201993406387043e-5,3.105483497910188e-8,0.0016512170388640625,-4.200324771532353e-5,3.1039256218679945e-8,0.0016513230147448136,-4.2031673250908966e-5,3.106005739207479e-8,0.0016514824899899535,-4.2080862105879425e-5,3.109711887696447e-8,0.0016516973653265966,-4.212590433392133e-5,3.1129923067476226e-8,0.001651961729402234,-4.214373526750093e-5,3.113947244255304e-8,0.001652262709403183,-4.2115034434587586e-5,3.11098777670916e-8,0.001652581282236162,-4.20262355409554e-5,3.103010807540562e-8,0.001652893563089459,-4.1871968498026697e-5,3.089609413234407e-8,0.0016531733119630543,-4.165773999853627e-5,3.071294747399099e-8,0.001653396304072018,-4.1401950749318465e-5,3.0496512296258735e-8,0.0016535465337220673,-4.113559677284715e-5,3.027291157231968e-8,0.00165362283822673,-4.08978653952933e-5,3.007468972951524e-8,0.001653643051829214,-4.072709688518788e-5,2.993320892854408e-8,0.0016536425379715574,-4.064915069866908e-5,2.986905479463843e-8,0.0016536658656256423,-4.0667642322225216e-5,2.988415848613424e-8,0.0016537538623654171,-4.076077998128367e-5,2.995949305378407e-8,0.0016539310239152949,-4.088682206365838e-5,3.0059909699632935e-8,0.0016541982039326847,-4.099610396545309e-5,3.0144299811144e-8,0.0016545328263749025,-4.1044953793367646e-5,3.0177129842224954e-8,0.0016548957129889686,-4.100692229408898e-5,3.013755445295461e-8,0.0016552417765755723,-4.0878540058739154e-5,3.0023865014476645e-8,0.0016555313813681053,-4.0678744800547455e-5,2.985267628556814e-8,0.0016557394578348126,-4.0442706059349526e-5,2.965356616713717e-8,0.0016558602205119905,-4.0212091256584694e-5,2.9460936650144332e-8,0.0016559066064064827,-4.002467175107929e-5,2.9305507808049016e-8,0.0016559051411805651,-3.990618815504244e-5,2.9207810627581598e-8,0.0016558883208421219,-3.986641734804314e-5,2.9175190181454984e-8,0.0016558871094012825,-3.989970995789232e-5,2.920244204328383e-8,0.0016559255239323612,-3.9988717521732396e-5,2.9274958922300416e-8,0.0016560179934640134,-4.010939295998521e-5,2.9372803922459204e-8,0.0016561690600313398,-4.023567907279301e-5,2.947446435780696e-8,0.0016563744709726966,-4.0343077329543915e-5,2.9559704687070583e-8,0.0016566227473716701,-4.04110569171678e-5,2.9611550177314757e-8,0.0016568967011817656,-4.0424765170366424e-5,2.9617783814663727e-8,0.0016571748725286567,-4.03766005139679e-5,2.9572361572399208e-8,0.001657433277921752,-4.026798280415287e-5,2.9476932544257488e-8,0.0016576481341211992,-4.011122108290574e-5,2.9342315929308953e-8,0.0016578002161897344,-3.993068140079735e-5,2.918927620055278e-8,0.0016578808882250792,-3.97616016784514e-5,2.904730413787855e-8,0.0016578983842147038,-3.964455859766971e-5,2.894986463588264e-8,0.0016578810457861806,-3.961480375790006e-5,2.8925550308629004e-8,0.0016578735047228827,-3.968893422226867e-5,2.8987194852995764e-8,0.0016579242628156493,-3.985510074322592e-5,2.9124022121367424e-8,0.0016580686098759247,-4.007348282468502e-5,2.9302307407495906e-8,0.001658315212483153,-4.028875236110224e-5,2.9475907260284677e-8,0.0016586433615687947,-4.044883713349159e-5,2.9601907087753384e-8,0.0016590113970561915,-4.0520869931719907e-5,2.9653810852602028e-8,0.0016593709065407672,-4.049825768358674e-5,2.9627222749183985e-8,0.0016596801558158162,-4.039855087642855e-5,2.953777937619335e-8,0.0016599128451770951,-4.025546688761349e-5,2.9414208659192474e-8,0.001660061372670357,-4.010894002692455e-5,2.928985879812469e-8,0.0016601355508499426,-3.999598249842553e-5,2.9195098085642385e-8,0.0016601582578794414,-3.994386969418339e-5,2.9151836997324146e-8,0.0016601594601349523,-3.9966285990856224e-5,2.9170608546724392E-08,0.0016601699239930832,-4.006254573710791e-5,2.9250175101477995e-8,0.0016602158041532625,-4.021951416375853e-5,2.9379253301896273e-8,0.0016603149537395255,-4.041536412718664e-5,2.9539614735345927e-8,0.00166047527124585,-4.062408817363606e-5,2.970971399095024e-8,0.0016606948895783432,-4.081978853524619e-5,2.986812443718438e-8,0.0016609636296508186,-4.098007900947471e-5,2.9996308350286483e-8,0.0016612650174455234,-4.108841983012459e-5,3.0080601450579956e-8,0.0016615783991599132,-4.113565076063209e-5,3.01135932639863e-8,0.00166188105966781,-4.11211016170598e-5,3.009513534055636e-8,0.001662150531071203,-4.105352714493535e-5,3.0033097660775586e-8,0.0016623675379770072,-4.095183539624763e-5,2.994381510048298e-8,0.0016625201033940193,-4.0844962473662907e-5,2.98517361833591e-8,0.0016626087554811723,-4.0769446539057265e-5,2.9787188477707118e-8,0.0016626514160071732,-4.0762994359918156e-5,2.9780965991072815e-8,0.0016626848298044925,-4.0853432310140516e-5,2.9855291758414986e-8,0.0016627585180696237,-4.104557297078488e-5,3.001319945286181e-8,0.0016629196343020275,-4.1312810810254054e-5,3.023184378109478e-8,0.0016631936622173485,-4.1601319751516236e-5,3.046615302114082e-8,0.0016635717482644979,-4.1848343784879263e-5,3.0664058183648755e-8,0.0016640132555107746,-4.200576477773202e-5,3.0786057280139574e-8,0.0016644620386205267,-4.205590491481198e-5,3.0818301607812385e-8,0.001664866364125141,-4.201279974388258e-5,3.0773509768777413e-8,0.001665192705554029,-4.1912072651471524e-5,3.068227045198648e-8,0.0016654301308830564,-4.1797159168452974e-5,3.0581274453788686e-8,0.0016655875286445104,-4.170783384293948e-5,3.050359333944092e-8,0.001665687465604892,-4.167319984191924e-5,3.0472896827926416e-8,0.0016657594905155892,-4.170874776273719e-5,3.050124412626773e-8,0.0016658342301060726,-4.181625386895793e-5,3.058929521132896e-8,0.0016659386770511526,-4.1985505643195065e-5,3.0727965256502515e-8,0.0016660927790692734,-4.2197234556937535e-5,3.0900934221248055e-8,0.001666307394327278,-4.242676039351328e-5,3.108761361993264e-8,0.0016665836116936171,-4.2647885737481854e-5,3.1266263776837525e-8,0.0016669133750296294,-4.2836615240290816e-5,3.141699700450582e-8,0.0016672812040082632,-4.29742538784887e-5,3.1524353127941986e-8,0.001667666583854231,-4.3049585079543835e-5,3.157918783389978e-8,0.0016680466219054927,-4.306016694156729e-5,3.1579840829446867e-8,0.0016683988209936053,-4.3012919060955386e-5,3.153264421759085e-8,0.0016687039684606657,-4.2924075892586436e-5,3.145177637443578e-8,0.001668949248977301,-4.281847186208641e-5,3.135844372913255e-8,0.001669131786259909,-4.272775819299064e-5,3.127914542178871e-8,0.0016692623804481766,-4.268653070428464e-5,3.1242302733313314e-8,0.0016693680627836978,-4.272526972232355e-5,3.1272440060728026e-8,0.0016694908319522278,-4.286013130087455e-5,3.138195636848311e-8,0.0016696795079151228,-4.3082236687797025e-5,3.156257050561017e-8,0.0016699738397906113,-4.335263606913009e-5,3.178138863954782e-8,0.0016703860640257925,-4.3610062290433165e-5,3.1987399692878435e-8,0.0016708909850968417,-4.3792311883293744e-5,3.212916881254575e-8,0.0016714333005318656,-4.3861116917503015e-5,3.217546090751692e-8,0.0016719492822700806,-4.3815726814167675e-5,3.2126524444803504e-8,0.0016723897475633752,-4.368843070089595e-5,3.201025739742718e-8,0.0016727324810957033,-4.352796787840965e-5,3.1868119479992646e-8,0.0016729818078562674,-4.338203342372647e-5,3.174024705968066e-8,0.001673160510358554,-4.3286058936851166e-5,3.165596355869807e-8,0.0016733001997954202,-4.325918304672302e-5,3.1630534790235667e-8,0.0016734335563792723,-4.3305040518058526e-5,3.166611119385737e-8,0.0016735892269826305,-4.3414715646800075e-5,3.1754482304429493e-8,0.0016737888324904195,-4.357023755789901e-5,3.188016234879414e-8,0.0016740453537005702,-4.3748057320064645e-5,3.202330368510447e-8,0.0016743624861162748,-4.392241829557162e-5,3.216241408654458e-8,0.0016747348092937828,-4.406860454410632e-5,3.227695616684352e-8,0.0016751487805059524,-4.416603666815915e-5,3.234987839857888e-8,0.001675584637718124,-4.420100590072595e-5,3.236992864406305e-8,0.0016760191120139118,-4.4168658691226686e-5,3.23333885762874e-8,0.0016764286255676625,-4.407397693962139e-5,3.224493873197347e-8,0.0016767926831136699,-4.393169599546051e-5,3.211753662941352e-8,0.001677097237930815,-4.3765093105344423e-5,3.197123217472216e-8,0.00167733777658621,-4.360358105039846e-5,3.183091478114156e-8,0.001677521869398556,-4.347902774846859e-5,3.172303510741116e-8,0.0016776707408900074,-4.342049118287758e-5,3.167116295241453e-8,0.0016778187422698135,-4.3447130391136005e-5,3.1690241873688606e-8,0.0016780089503785252,-4.3560098509420256e-5,3.178016652122048e-8,0.0016782833720448765,-4.373614563117936e-5,3.192080369790514e-8,0.0016786683666438333,-4.3927655024510755e-5,3.207221484054373e-8,0.001679160369115784,-4.407367191046424e-5,3.2183808817329206e-8,0.0016797209875307913,-4.412114009758808e-5,3.221188471697183e-8,0.0016802880403294148,-4.404672142738793e-5,3.213771971384632e-8,0.001680798773740542,-4.386597338792192e-5,3.197519004817064e-8,0.0016812121713359505,-4.362439078443936e-5,3.176318558267004e-8,0.0016815186777889915,-4.337739128303645e-5,3.1548644038694827e-8,0.0016817358173011794,-4.317163234212843e-5,3.137068706839119e-8,0.0016818964774662018,-4.303518866881324e-5,3.125235326029229e-8,0.0016820373053456571,-4.2976515779093504e-5,3.1199916976096325e-8,0.0016821908517579908,-4.298835334932385e-5,3.120645643391533e-8,0.001682381643870257,-4.305295001771544e-5,3.125647495228362e-8,0.0016826248641123465,-4.314669659029766e-5,3.1329875743603594e-8,0.0016829262935964223,-4.3243765750394774e-5,3.1404959032322505e-8,0.0016832827993444842,-4.3319058823132525e-5,3.1460773886099394e-8,0.0016836831808576592,-4.335081474193989e-5,3.147921387142313e-8,0.0016841094761317773,-4.332309858073908e-5,3.144709006843145e-8,0.0016845389965708768,-4.322812581928537e-5,3.1358136502702837e-8,0.0016849472827916928,-4.30680097516396e-5,3.121454317459761e-8,0.001685311817324549,-4.28553785051464e-5,3.102747616737498e-8,0.0016856160259362443,-4.2612465496661675e-5,3.081620600067579e-8,0.0016858529647612876,-4.2368472572295754e-5,3.060568908899294e-8,0.0016860279929869306,-4.2155252212118004e-5,3.042272064814904e-8,0.0016861597397253318,-4.2001707138160697e-5,3.029110352696416e-8,0.001686278802546357,-4.192753075558542e-5,3.0226450956112963e-8,0.0016864236511896307,-4.1937096150845514e-5,3.023131644925384e-8,0.0016866333005143353,-4.20148809990313e-5,3.029172471873377e-8,0.0016869370383114897,-4.212468985170035e-5,3.0376837396555156e-8,0.0016873432300061099,-4.221528826700933e-5,3.0443795692792346e-8,0.0016878316433975797,-4.223370069387507e-5,3.044875659726567e-8,0.0016883549945588567,-4.214339067565662e-5,3.0361907947096335e-8,0.0016888524992501178,-4.193939125212146e-5,3.017996755366323e-8,0.0016892708942925403,-4.165129888299081e-5,2.992858118803242e-8,0.0016895823148465297,-4.1331399559831654e-5,2.9652240492607542e-8,0.0016897900659125485,-4.103474076847829e-5,2.9397395175287495e-8,0.0016899216625505006,-4.080203475990938e-5,2.919799465346154e-8,0.0016900157054978312,-4.0652031392961096e-5,2.906915313908238e-8,0.0016901099208097574,-4.058288462987776e-5,2.900853004866035e-8,0.0016902339270298944,-4.057817378667731e-5,2.900165126974593e-8,0.0016904065626526063,-4.061354355146046e-5,2.9027644312851774e-8,0.0016906360051758417,-4.0661950119559325e-5,2.9063648467584324e-8,0.0016909209995482196,-4.069723028481099e-5,2.9087710885649258e-8,0.0016912522654108416,-4.069653884596306e-5,2.9080721860103752e-8,0.0016916138646757722,-4.064230977992161e-5,2.9028017183053914e-8,0.0016919847467131485,-4.052416230559773e-5,2.8921020015667242e-8,0.0016923408945919195,-4.034078146507427e-5,2.8758904768726176e-8,0.0016926584456100585,-4.0101338254094135e-5,2.854984370404633e-8,0.0016929177886920088,-3.98256830559316e-5,2.8311126828899853e-8,0.001693108077881154,-3.954252987433632e-5,2.8067479641023334e-8,0.0016932310746483276,-3.928519728252996e-5,2.7847258747180767e-8,0.0016933029691601435,-3.908519792267514e-5,2.767686433700739e-8,0.0016933530634665743,-3.896487647791898e-5,2.7574483226122663e-8,0.0016934189419301243,-3.893091195901987e-5,2.7544749748504323e-8,0.0016935386906464923,-3.897054727601237e-5,2.7575867805514548e-8,0.001693741560057379,-3.905203356829756e-5,2.7640332995878002e-8,0.0016940391412425884,-3.9130122676386634e-5,2.7699808677760945e-8,0.0016944196388182435,-3.9156405028759944e-5,2.7713881316001143e-8,0.0016948479443695268,-3.909270277009998e-5,2.7651188701418565e-8,0.0016952732925359264,-3.892369137957591e-5,2.749979593321849e-8,0.0016956435737868081,-3.8663481150373246e-5,2.7272496371780773e-8,0.001695921508217519,-3.835205250275875e-5,2.7003629854952092e-8,0.0016960956761315402,-3.804202367397545e-5,2.67378143191e-8,0.0016961815319577094,-3.778160361537539e-5,2.6515529524935576e-8,0.001696213032473906,-3.7601416121365983e-5,2.6362069074866936e-8,0.0016962301457196613,-3.750973613700963e-5,2.628370233701135e-8,0.0016962680770975457,-3.749551816840239e-5,2.627045669394839e-8,0.0016963512376621233,-3.753538910232288e-5,2.63021853253086e-8,0.0016964917453452192,-3.7600818583413475e-5,2.635465438290942e-8,0.001696690651419292,-3.766350660714986e-5,2.6404007688425848e-8,0.001696940137771745,-3.769874102950349e-5,2.642947829630893e-8,0.0016972256658882062,-3.7687335396604675e-5,2.6414948818137022e-8,0.0016975277902204365,-3.761694740849289e-5,2.635007890531258e-8,0.001697823895555182,-3.7483365373189244e-5,2.6231474474216885e-8,0.0016980904064073249,-3.729186542931282e-5,2.6063916854335785e-8,0.0016983059629982868,-3.705818431813839e-5,2.5861193564983613e-8,0.00169845567523588,-3.6808209557159376e-5,2.5645733638452276e-8,0.0016985358748413822,-3.6575286342219624e-5,2.544614117888997e-8,0.0016985578725676185,-3.6394393189292205e-5,2.5292069524213555e-8,0.0016985486004877865,-3.629367901585675e-5,2.5206946956193076e-8,0.001698546470920179,-3.628561471787852e-5,2.5200532434859682e-8,0.0016985925376170278,-3.6361141746669543e-5,2.5264171502710526e-8,0.0016987192823167937,-3.648970911878939e-5,2.537113473313952e-8,0.0016989407603901555,-3.66260131869023e-5,2.548261022146134e-8,0.0016992475797464068,-3.672165020583402e-5,2.5557724392811732e-8,0.0016996084606618878,-3.673811638230782e-5,2.5564517650592807e-8,0.001699977956475142,-3.6657310285023185e-5,2.5488638588697726e-8,0.0017003082070326627,-3.648654916289649e-5,2.5337305501061796e-8,0.001700561508238771,-3.625653060246809e-5,2.5137301531646965e-8,0.0017007199892369825,-3.601259358681587e-5,2.492738326789755e-8,0.0017007892677775634,-3.580192599678626e-5,2.474739066190967e-8,0.0017007949978842718,-3.566104751616369e-5,2.462773297309177e-8,0.0017007740285271689,-3.560774970729352e-5,2.4582760104628268e-8,0.001700763881614479,-3.5639540723169225e-5,2.4609678123756305e-8,0.0017007942876682992,-3.5737747088271245e-5,2.4692199666377635e-8,0.0017008827935677405,-3.5874468764077714e-5,2.48064931342209e-8,0.0017010342865269056,-3.601946403066804e-5,2.4926953335125145e-8,0.0017012429683338664,-3.614526778038245e-5,2.503041713192252e-8,0.0017014952046849267,-3.623023427960677e-5,2.5098644185563178e-8,0.001701772238022168,-3.626002631665762e-5,2.5119562344499273e-8,0.0017020524196195597,-3.6228338899696296e-5,2.5087946189913077e-8,0.0017023131682198593,-3.613749747676565e-5,2.500601481098576e-8,0.0017025331952084945,-3.599911636755302e-5,2.488403054979358e-8,0.001702695545569224,-3.583443484893609e-5,2.4740519688495516e-8,0.001702791658995604,-3.567341761960704e-5,2.4601345097724025e-8,0.001702825905263925,-3.5551336305842663e-5,2.449660803475595e-8,0.0017028188818827854,-3.550180632355494e-5,2.4454604213756933e-8,0.001702806735149731,-3.5546798682885895e-5,2.4493348244526906e-8,0.0017028341827005904,-3.5686793861779424e-5,2.4612368548798255e-8,0.0017029417119942861,-3.589622192692521e-5,2.4789084250634145e-8,0.001703151464359933,-3.612826882154989e-5,2.4983140816697334e-8,0.0017034584180842351,-3.632857896050061e-5,2.514822835935455e-8,0.0017038313132765339,-3.645226816286234e-5,2.5246595649292e-8,0.0017042226379164888,-3.647699395454146e-5,2.5260079820686068e-8,0.0017045828447247262,-3.640761249596701e-5,2.5193854756660187e-8,0.0017048733046878682,-3.627237682470769e-5,2.5072903100127402e-8,0.0017050744960167964,-3.611354589471979e-5,2.4933747465570844e-8,0.0017051883610562926,-3.597597816658294e-5,2.4814589910546375e-8,0.0017052354342512147,-3.5896752180398834e-5,2.4746512664333185e-8,0.0017052482576193312,-3.589793749996182e-5,2.4747526264296278e-8,0.001705263072666433,-3.598363726072869e-5,2.482032549880074e-8,0.0017053119227668128,-3.614137236019604e-5,2.4953695706256513e-8,0.0017054169711461474,-3.6346798808851755e-5,2.5126630491637535e-8,0.001705587948875609,-3.656997064057401e-5,2.5313627491764613e-8,0.0017058225445119196,-3.678132058142517e-5,2.548965965479151e-8,0.0017061087821257628,-3.69561651974611e-5,2.563388881603951e-8,0.0017064282269366776,-3.70773600928232e-5,2.5731871018470053e-8,0.0017067591018042412,-3.713639521195745e-5,2.5776518819360373e-8,0.0017070789070781516,-3.71335783856623e-5,2.576833424327725e-8,0.001707366647808429,-3.7077896034809675e-5,2.5715344204894712e-8,0.0017076050669122245,-3.6986775316050295e-5,2.563286430776859e-8,0.0017077833482693745,-3.6885519284883346e-5,2.5542879446377526e-8,0.0017079005422884115,-3.6805662765103294e-5,2.547244983570222e-8,0.0017079692563718653,-3.678101653653675e-5,2.545019000338502e-8,0.0017080179220300188,-3.684031594380135e-5,2.549999137370553e-8,0.0017080887479602191,-3.699691368462634e-5,2.5632392147724558e-8,0.001708228641281455,-3.723898589582162e-5,2.583648649016691e-8,0.0017084735851781347,-3.752657719115359e-5,2.607763848747086e-8,0.0017088326289339622,-3.7800822890985845e-5,2.6305464895935834e-8,0.0017092809717665692,-3.800389880699946e-5,2.6470864658603684e-8,0.001709767617820864,-3.810010719756817e-5,2.6543979991628234e-8,0.0017102337850382358,-3.8086965178193554e-5,2.6523588534275293e-8,0.0017106319934249428,-3.799214504651016e-5,2.6434316445958196e-8,0.0017109375331463164,-3.786074079930412e-5,2.6315481437475767e-8,0.0017111503518974585,-3.774050858751181e-5,2.6208213356204093e-8,0.0017112901426587356,-3.767043065840216e-5,2.6145574168089167e-8,0.001711388473927356,-3.767435097338324e-5,2.6147233879245078e-8,0.0017114807478860903,-3.7759148181293965e-5,2.6218181852708225e-8,0.0017115993915441882,-3.791616629237784e-5,2.6350243451075947e-8,0.0017117688340202747,-3.812478479964005e-5,2.6525321161408846e-8,0.0017120025462314225,-3.8357269218783055e-5,2.671957407701288e-8,0.0017123022368902155,-3.858401705662783e-5,2.690781030939024e-8,0.0017126589667248331,-3.8778319536625255e-5,2.706742096037333e-8,0.0017130556713426438,-3.892000575518932e-5,2.718139609955358e-8,0.0017134704463890348,-3.8997637220543705e-5,2.72401837338603e-8,0.0017138799079658143,-3.900926090925543e-5,2.7242381927571813e-8,0.0017142621560916798,-3.896209930041389e-5,2.719452965369347e-8,0.0017145992769997747,-3.887164408049795e-5,2.7110327165076998e-8,0.0017148795732618073,-3.876038090260755e-5,2.7009443934541433e-8,0.0017150997739135154,-3.8656079592503165e-5,2.691587804537622e-8,0.0017152674011576832,-3.858919935674702e-5,2.6855564023675893e-8,0.001715402930080424,-3.858850645778573e-5,2.68525620088811e-8,0.0017155403030105689,-3.867411814540851e-5,2.6923223505940072e-8,0.001715723354598753,-3.884849496986257e-5,2.706875788258036e-8,0.0017159957908326042,-3.9088518326831626e-5,2.7268754434345864e-8,0.0017163851403779347,-3.9344697300168935e-5,2.748066663980295e-8,0.001716886993958065,-3.955318428218216e-5,2.7650053898035193e-8,0.0017174602847125158,-3.965909042471542e-5,2.773040269966326e-8,0.001718040134972025,-3.963938085916244e-5,2.770265841257851e-8,0.0017185625897166842,-3.9511228867599055e-5,2.758236823583223e-8,0.0017189868062355465,-3.932167724591736e-5,2.7410713552494807e-8,0.001719303790073166,-3.912724285345024e-5,2.7236765021706585e-8,0.0017195315916373054,-3.897569321704473e-5,2.710159348901865e-8,0.0017197039490144403,-3.889639604552238e-5,2.7029929542711243e-8,0.001719859026622647,-3.889874932274322e-5,2.7028998797406246e-8,0.0017200313178398767,-3.897534491821806e-5,2.7091549749431207e-8,0.0017202469671751624,-3.910684938799904e-5,2.7200319928931065e-8,0.001720521602018453,-3.926695176135516e-5,2.7332412797781222e-8,0.001720859794259045,-3.942689817955544e-5,2.7463158757262513e-8,0.001721255728863236,-3.955955466122989e-5,2.756947544016638e-8,0.0017216948873827532,-3.9642868900642176e-5,2.7632707506931933e-8,0.001722156569161592,-3.966254350579579e-5,2.764085344336467e-8,0.0017226170439005363,-3.9613697538888915e-5,2.7590003469533287e-8,0.001723052976870324,-3.9501301872358064e-5,2.7484764624405265e-8,0.0017234446600947672,-3.933941901930363e-5,2.733763268972299e-8,0.001723778754377761,-3.914951517199835e-5,2.7167486552635708e-8,0.0017240504576373702,-3.8958063040786535e-5,2.6997386666773607e-8,0.0017242650711087881,-3.8793531002493264e-5,2.6851810256787167e-8,0.0017244389431611393,-3.868270733259092e-5,2.675337383241879e-8,0.0017245995113033862,-3.864602832841346e-5,2.671885005626151e-8,0.0017247834536315045,-3.8691681327300336e-5,2.6754311849929e-8,0.0017250313802367769,-3.880929377612953e-5,2.6850034141866425e-8,0.001725377842565471,-3.896581169015178e-5,2.697723630726428e-8,0.0017258375470063556,-3.910800396460535e-5,2.7090318371162557e-8,0.0017263930836693708,-3.917572346874251e-5,2.7138107085967308e-8,0.0017269933872087041,-3.912436180795919e-5,2.7082925689746156e-8,0.0017275689865215494,-3.8945638522437385e-5,2.691835379492017e-8,0.0017280585048235183,-3.86727214245852e-5,2.6673635556659343e-8,0.001728431073422244,-3.836534884152783e-5,2.6400818438587404e-8,0.0017286923868734853,-3.808504387510162e-5,2.61532106623058e-8,0.0017288748816655678,-3.787530232705404e-5,2.5968120288942417e-8,0.0017290217154868146,-3.7754199534558863E-05,2.5860493154658515e-8,0.0017291734675064128,-3.771726995413944e-5,2.582562501534354e-8,0.0017293607820238672,-3.7744848247661723E-05,2.584579636728525e-8,0.001729602000315515,-3.780948874960963e-5,2.5896883802857644e-8,0.001729903599395464,-3.788165973355425e-5,2.595331727889163e-8,0.0017302617181777903,-3.7933690493989186e-5,2.5991389794231897e-8,0.0017306640141175572,-3.794259510943676e-5,2.5991547940454676e-8,0.001731091755867424,-3.789224556048095e-5,2.594015958103042e-8,0.001731522255539111,-3.7775051882364856e-5,2.5830937167328825e-8,0.0017319317604426708,-3.7593037290670407e-5,2.5665905426726304e-8,0.0017322987686243735,-3.735795299004614e-5,2.545555029736884e-8,0.0017326074067128012,-3.709011144855787e-5,2.5217806685687195e-8,0.0017328503457029842,-3.6815919057722917e-5,2.4975834819967113e-8,0.001733030801250284,-3.6564297546596944e-5,2.4754770932095832e-8,0.001733163245050693,-3.636230112525841e-5,2.4577788776660804e-8,0.0017332725692263016,-3.6230386059595666e-5,2.446195888578073e-8,0.001733391561335409,-3.6177777041230204e-5,2.4414354594100277e-8,0.0017335564073636222,-3.619837183913728e-5,2.4428778625296542e-8,0.001733799814146551,-3.626816379255833e-5,2.4483858210644657e-8,0.0017341419144584454,-3.634606741287226e-5,2.454398795466479e-8,0.0017345806750870597,-3.638048933612316e-5,2.4565021790145197e-8,0.0017350858869240476,-3.632295309658755e-5,2.4505843202086038e-8,0.0017356024788424108,-3.614624025006184e-5,2.4343764994910206e-8,0.0017360663216553012,-3.585874629062718e-5,2.408675934782713e-8,0.0017364275421104804,-3.550486845228883e-5,2.377374351553505e-8,0.001736668888599713,-3.514850340937432e-5,2.34602712311622e-8,0.001736808661045457,-3.4848567953173e-5,2.3197265336036242e-8,0.001736888544939611,-3.464037865199596e-5,2.301485336433552e-8,0.0017369558513605297,-3.4530440416808935e-5,2.29179595201377e-8,0.001737049707092597,-3.4502354376221574e-5,2.289165624475731e-8,0.0017371947516276504,-3.4526982344086895e-5,2.2910199010581445e-8,0.0017374008073448293,-3.4571512886728264e-5,2.2944984052831473e-8,0.001737665467048844,-3.460545560147143e-5,2.2969695297045837e-8,0.001737977290689824,-3.460390307791772e-5,2.296299541437974e-8,0.0017383186141002541,-3.454918032334136e-5,2.290982677063709e-8,0.0017386679295325906,-3.4431804356590167e-5,2.2802188582601254e-8,0.0017390021734525031,-3.42511906097866e-5,2.2639776047910924e-8,0.0017392992945751758,-3.40160914722638e-5,2.243042545250072e-8,0.0017395413117880889,-3.374434814309473e-5,2.2189933916874547e-8,0.0017397176600680104,-3.346135952529788e-5,2.1940688488459516e-8,0.0017398281621878566,-3.319689225605055e-5,2.170877243418754e-8,0.0017398847366847004,-3.2980307378858836e-5,2.1519663391740078e-8,0.00173991100205662,-3.283480466826047e-5,2.1393128136041958e-8,0.0017399392899709579,-3.27718231350248e-5,2.1338379242105724e-8,0.00174000521831946,-3.278698042141254e-5,2.1350723083240454e-8,0.001740140572588363,-3.285870325852261e-5,2.1410652793135758e-8,0.0017403655886877377,-3.295034303669861e-5,2.1485963701877946e-8,0.0017406820927880144,-3.301629939579607e-5,2.153721791335664e-8,0.0017410695269251995,-3.301209684177935e-5,2.152643905078453e-8,0.001741486310794703,-3.290702867540473e-5,2.1427864745405244e-8,0.0017418784545159788,-3.269589869418132e-5,2.1237862433750336e-8,0.0017421948525763043,-3.2404476839655194e-5,2.097945465702013e-8,0.001742404370709457,-3.208389090653782e-5,2.069734831489266e-8,0.001742506671572139,-3.179415040864402e-5,2.0443603476147352e-8,0.0017425307722198473,-3.158389373995162e-5,2.0260073766504838e-8,0.0017425223974869423,-3.147622681133658e-5,2.0166207874633754e-8,0.0017425275508909542,-3.146622368211866e-5,2.0157058325399752e-8,0.0017425801811898768,-3.152827253738807e-5,2.020986020759265e-8,0.0017426972860252556,-3.162719052466486e-5,2.02938080720638e-8,0.001742880085460341,-3.172780363660379e-5,2.0378372619537326e-8,0.001743118076178938,-3.180084546028723e-5,2.0438317988914532e-8,0.0017433934077427334,-3.1825558838409014e-5,2.045583270732787e-8,0.0017436844082488409,-3.179033969714021e-5,2.0421013873564265e-8,0.001743968178512343,-3.169263001235832e-5,2.0331783624667846e-8,0.0017442227209409098,-3.153871728518193e-5,2.0193782525411485e-8,0.0017444291701622036,-3.134350069999404e-5,2.002022746940685e-8,0.0017445744879534223,-3.112978763186553e-5,1.9831294365844262e-8,0.0017446545474839863,-3.092639446856581e-5,1.9652370870985962e-8,0.0017446769299296102,-3.0764373350770444e-5,1.9510621046903156e-8,0.0017446621867443558,-3.067120727891532e-5,1.9429795770389297e-8,0.001744642159515886,-3.066382603124781e-5,1.9424111620866493e-8,0.0017446545782597647,-3.074243219545489e-5,1.9492972810802038e-8,0.0017447345609175441,-3.088764647827402e-5,1.961870511808151e-8,0.0017449051754598907,-3.106281392238331e-5,1.9768826171514667e-8,0.0017451700230479688,-3.122163105108318e-5,1.9902887093021913e-8,0.001745510408947374,-3.1319374667683715e-5,1.9982307573413395e-8,0.001745888357283682,-3.1324766347923475e-5,1.998060209584599e-8,0.0017462551360621196,-3.122919694479231e-5,1.989118907219179e-8,0.0017465634988662125,-3.105046157655002e-5,1.9730384470556232e-8,0.001746780545164631,-3.0829192817083005e-5,1.9534083265630877e-8,0.0017468971763283654,-3.06181089004315e-5,1.9348284579479396e-8,0.0017469304559974707,-3.0466979567041213e-5,1.921600927524104e-8,0.001746917542182514,-3.0408580265584186e-5,1.916519343229281e-8,0.001746903536584843,-3.0450937289348743e-5,1.9202135362128732e-8,0.0017469283478326418,-3.057824727716383e-5,1.931250208156185e-8,0.0017470175401144699,-3.075870969388561e-5,1.9468283092315117e-8,0.0017471793662891689,-3.095489208974001e-5,1.9636835355944387e-8,0.00174740696584924,-3.1132521919019314e-5,1.978845734405289e-8,0.0017476831047323403,-3.126577909856488e-5,1.9900875698021727e-8,0.0017479851225330183,-3.1339285687671686e-5,1.9960887050540934e-8,0.0017482888771933986,-3.134799753916344e-5,1.9964247391127438e-8,0.001748571500534339,-3.1296247023240655e-5,1.9914888607216414e-8,0.0017488134063673208,-3.1196725784627565e-5,1.9824099003596076e-8,0.0017490001909731922,-3.106955308858083e-5,1.970973106837139e-8,0.0017491248720657058,-3.0941022082626086e-5,1.9595042768266226e-8,0.0017491904664698418,-3.084128927975832e-5,1.9506546090950694e-8,0.0017492122725144203,-3.080019758367981e-5,1.9470218613974216e-8,0.0017492184473760612,-3.084086291599031e-5,1.950583763271849e-8,0.0017492470171063378,-3.097194995726486e-5,1.9620297100766168e-8,0.0017493381646387358,-3.1181363894115793e-5,1.980227981843363e-8,0.0017495228601829887,-3.143510381205071e-5,2.0021485851797534e-8,0.0017498116793050868,-3.168386290175472e-5,2.023458425088819e-8,0.0017501889553554505,-3.18764773563137e-5,2.039704390946832e-8,0.001750615655745262,-3.197543249573554e-5,2.0476649055390935e-8,0.0017510402683068693,-3.1968199999134966e-5,2.0463276536587624e-8,0.0017514133531797574,-3.187031880307763e-5,2.037138563020928e-8,0.0017517005273633118,-3.1719998107685436e-5,2.0235063634656074e-8,0.001751890219662361,-3.156694813316782e-5,2.009806183335921e-8,0.0017519948081852045,-3.1459214757831945e-5,2.0002203745109712e-8,0.0017520456413406555,-3.14316280501743e-5,1.99773642676767e-8,0.001752083843670919,-3.149863525213701e-5,2.0035412948970665e-8,0.0017521497040240116,-3.1652918673865666e-5,2.0169255510395947e-8,0.0017522736069611874,-3.186951297035694e-5,2.0356620338662876e-8,0.0017524707370152176,-3.211356229077129e-5,2.056690037038114e-8,0.0017527403103441905,-3.234896981308914e-5,2.076865466262888e-8,0.0017530684808992239,-3.254545176213017e-5,2.0935651692450514e-8,0.0017534331318351181,-3.2682714956734884e-5,2.1050408448247448e-8,0.0017538088119477358,-3.275180452227584e-5,2.110531752462392e-8,0.0017541707526388716,-3.275447431229004e-5,2.1102114748483773e-8,0.0017544976901405082,-3.270162706579011e-5,2.105056824283674e-8,0.0017547738024637697,-3.2611589026689284e-5,2.096699993899653e-8,0.0017549902985381242,-3.250844445279376e-5,2.0872790992964694e-8,0.001755147084288628,-3.242014951493518e-5,2.0792620166438958e-8,0.001755254570490484,-3.2375793594230804e-5,2.0751927960372814e-8,0.001755335063281145,-3.2401220502996406e-5,2.0772996896363735e-8,0.0017554223357314845,-3.251259859283147e-5,2.0869356621329078e-8,0.0017555573977173214,-3.2708863724273736e-5,2.1039332104000612e-8,0.0017557790984082053,-3.29660727723672e-5,2.126132814313656e-8,0.0017561108323753565,-3.3238262436040336e-5,2.1494763264115556e-8,0.0017565485849542516,-3.346811995275699e-5,2.1689479904005575e-8,0.0017570576145160576,-3.360552772869162e-5,2.1801953478252693e-8,0.001757581785070488,-3.362585143779291e-5,2.1811245999041253e-8,0.0017580620722044517,-3.353851148587489e-5,2.1726427797049774e-8,0.001758455202278241,-3.3382035778471196e-5,2.158208310470156e-8,0.0017587444079113072,-3.320959575010596e-5,2.1425399176948597e-8,0.0017589399770165945,-3.307263661221911e-5,2.130160656072588e-8,0.0017590722808459125,-3.3008502295315075e-5,2.1243072677899854e-8,0.001759181556547813,-3.3034286998855964e-5,2.1264051244620618e-8,0.0017593078653479616,-3.314644102862432e-5,2.1360602034657684e-8,0.0017594831921096522,-3.332452486865661e-5,2.1514143545573805e-8,0.0017597265437465275,-3.353738875474003e-5,2.1697021326259336e-8,0.001760042245970357,-3.3750244753001815e-5,2.1878713640531822e-8,0.001760421146334321,-3.393124357669487e-5,2.2031497920959415e-8,0.0017608439638752132,-3.405644801825657e-5,2.2134681640893213e-8,0.0017612857471203435,-3.411264048046515e-5,2.2176972713998292e-8,0.0017617204091223166,-3.409797973084421e-5,2.2157031793999206e-8,0.0017621245438929386,-3.402096746414191e-5,2.208259287114386e-8,0.0017624801775086999,-3.3898450706873454e-5,2.1968740632231774e-8,0.0017627765982876126,-3.3753300304850276e-5,2.183585863215288e-8,0.001763011621842634,-3.3612016549370004e-5,2.1707446371806972e-8,0.0017631925713161728,-3.350214912888116e-5,2.1607729651469524e-8,0.0017633370417948848,-3.344913871513708e-5,2.1558783250075647e-8,0.0017634730174059953,-3.347197967528787e-5,2.1576714714329268e-8,0.0017636371116576798,-3.357742597786236e-5,2.1666704084487572e-8,0.0017638691979690627,-3.3753723774377576e-5,2.181772916999189e-8,0.0017642023031790117,-3.396680513750332e-5,2.1999445627985694e-8,0.0017646491667109299,-3.4163476660183754e-5,2.2165086343053056e-8,0.0017651911849654452,-3.428501454789286e-5,2.226334653764835e-8,0.001765778160698935,-3.428858702670496e-5,2.2257091907866984e-8,0.0017663432093342334,-3.416606996623403e-5,2.213983656780172e-8,0.0017668269543614896,-3.3948415208319496e-5,2.193955489711035e-8,0.001767197842766506,-3.369259112538415e-5,2.17070724834961e-8,0.0017674586193811824,-3.34596154530708e-5,2.1496498412280247e-8,0.001767639060592299,-3.329574652596208e-5,2.1348468166328244e-8,0.0017677821871205088,-3.3223440312985864e-5,2.1282180173486558e-8,0.0017679311822968995,-3.324154570836546e-5,2.129578103953367e-8,0.001768120512436396,-3.333086353608994e-5,2.1371561635770116e-8,0.0017683715270797181,-3.346142626072527e-5,2.148260408851196e-8,0.0017686914318105862,-3.3599409128902524e-5,2.1598953117881766e-8,0.0017690744739801523,-3.371291615094851e-5,2.1692652330809286e-8,0.0017695045695388376,-3.3776430454713476e-5,2.1741529840179073e-8,0.0017699588242402324,-3.3773791444695706e-5,2.1731694812881347e-8,0.0017704114732510778,-3.369964876976124e-5,2.1658752122008647e-8,0.0017708378094016797,-3.355943690940463e-5,2.152778106353521e-8,0.0017712176390383754,-3.336799684118138e-5,2.1352151053456795e-8,0.0017715378651225137,-3.314720089247531e-5,2.1151437607701027e-8,0.0017717941126926234,-3.2923077927578334e-5,2.0948840418387312e-8,0.0017719915599731899,-3.272273093629134e-5,2.0768364307715262e-8,0.0017721450953806894,-3.257108279253322e-5,2.063183815712094e-8,0.001772278789586462,-3.248736044869667e-5,2.0555760321616602e-8,0.0017724243969323124,-3.2481099228891417e-5,2.0547838756955484e-8,0.0017726180377305497,-3.2547672204280884e-5,2.06032360891902e-8,0.001772893902096436,-3.26643881516983e-5,2.070137445010743e-8,0.0017732745145420026,-3.278970120097843e-5,2.0805422495871913e-8,0.0017737592672930375,-3.286910117515717e-5,2.0867510935645095e-8,0.0017743165104114895,-3.285007607212869e-5,2.0841794381781585e-8,0.0017748868641271837,-3.27030730663727e-5,2.0702786663879134e-8,0.0017754014530360297,-3.2437768348831866e-5,2.0459662686927267e-8,0.0017758080743716612,-3.2102608481630945e-5,2.015584789108212e-8,0.0017760903595036206,-3.17656634260758e-5,1.985200104905266e-8,0.0017762693117928238,-3.1488255206219554e-5,1.9602496536206447e-8,0.0017763894591366236,-3.13062590108772e-5,1.9438747273234566e-8,0.001776500414190258,-3.12255836885439e-5,1.9365283650061506e-8,0.0017766430268873303,-3.1228419406428315e-5,1.9365541425495753e-8,0.0017768429247380117,-3.128342719222774e-5,1.9411160162745227e-8,0.0017771097947912773,-3.1355028823638904e-5,1.9470365609482324e-8,0.0017774396800211817,-3.141000926638304e-5,1.9513809181670135e-8,0.0017778182926467716,-3.142162035464175e-5,1.951808140830944e-8,0.0017782244717445747,-3.137198226709649e-5,1.946769186203101e-8,0.0017786336024299082,-3.12533185341731e-5,1.9356066032986675e-8,0.0017790209705546684,-3.1068226775794e-5,1.9185763398043137e-8,0.0017793650121143564,-3.08290205222032e-5,1.8967926769402895e-8,0.001779650296646995,-3.055604937514018e-5,1.8720829744334336e-8,0.0017798698743530228,-3.0274995636721267e-5,1.846747256260845e-8,0.001780026632235612,-3.001344158238894e-5,1.8232467517967285e-8,0.0017801335374979842,-2.9797089846618077e-5,1.8038579085288705e-8,0.0017802127450977066,-2.964590951538579e-5,1.7903218620709243e-8,0.0017802935187865058,-2.9570467972433672e-5,1.783518762572123e-8,0.0017804088777299578,-2.9568714404354944e-5,1.7831942719272197e-8,0.0017805907080136712,-2.9623577448738986e-5,1.7877681205500904e-8,0.0017808630276179797,-2.97023326731302e-5,1.7943009994474517e-8,0.0017812337934054229,-2.97595557883807e-5,1.7987695659313328e-8,0.0017816872967592035,-2.9745687070046982e-5,1.7968220015004007e-8,0.0017821813976015835,-2.962172070135213e-5,1.7850629717166458e-8,0.0017826548299887984,-2.9376324177287026e-5,1.762553130680372e-8,0.0017830461959892749,-2.903634032102028e-5,1.731731488754778e-8,0.0017833176117902473,-2.866124927995671e-5,1.6979208783705445e-8,0.001783469533852475,-2.832122375637814e-5,1.6673724822837606e-8,0.0017835376035968266,-2.80706105762117e-5,1.6448993998207882e-8,0.0017835749164607615,-2.793168172891396e-5,1.6324306949224888e-8,0.0017836317390693452,-2.7894493168831586e-5,1.6290136262871556e-8,0.0017837425116183111,-2.7927737072698468e-5,1.6318029727125984e-8,0.0017839222251040216,-2.7991952248573566e-5,1.6372552649405453e-8,0.0017841690180765415,-2.804960543379875e-5,1.6420305148628225e-8,0.0017844690921453375,-2.8070762770376914e-5,1.6434881896134044e-8,0.001784801494145308,-2.803540319002629e-5,1.6398785045025665e-8,0.0017851419554334824,-2.7933929717305372e-5,1.6303760303012625e-8,0.0017854659718042635,-2.7766907604290468e-5,1.6150522430904983e-8,0.0017857515136427459,-2.7544366750350456e-5,1.5948164497142894e-8,0.0017859816002243757,-2.7284609584283965e-5,1.571315251966609e-8,0.0017861467536977667,-2.7012260273114013e-5,1.5467614316026404e-8,0.0017862470230057806,-2.6755286369400636e-5,1.5236648496569402e-8,0.0017862930134701384,-2.654104265296623e-5,1.504470406978934e-8,0.001786305424195102,-2.6391773125555355e-5,1.491146539228525e-8,0.0017863128449208082,-2.6320220335777346e-5,1.4847885035371189e-8,0.0017863478278571186,-2.632612309632168e-5,1.4853112441925018e-8,0.0017864415524204687,-2.639440009895842e-5,1.491303463720827e-8,0.0017866176433893105,-2.649564870787032e-5,1.500094022968379e-8,0.0017868858723667914,-2.6589505322540724e-5,1.5080702406757717e-8,0.0017872368982414784,-2.66314436018206e-5,1.5112903973863852e-8,0.0017876399981771522,-2.6583121415397484e-5,1.5063969741293373e-8,0.0017880463839678022,-2.6424855833963814e-5,1.4917086903880453e-8,0.0017884001103203367,-2.61662566626825e-5,1.4681479769128718e-8,0.0017886554421320897,-2.5848825556468653e-5,1.439459563665528e-8,0.0017887942451537537,-2.5535601758596886e-5,1.4112816495281188e-8,0.0017888338091817063,-2.5289736988679483e-5,1.3892330893168733e-8,0.0017888195185604239,-2.515213106178181e-5,1.3769205429052592e-8,0.0017888063464290775,-2.5129846263159923e-5,1.3749151498984439e-8,0.0017888398156686227,-2.5199537269306553e-5,1.3810764966794239e-8,0.0017889451574657782,-2.5320670226036306e-5,1.391749936516575e-8,0.0017891262814678304,-2.544988601042015e-5,1.4030567902762325e-8,0.0017893708634015488,-2.5550922719877188e-5,1.4117760285831568e-8,0.0017896570726811836,-2.5599109255723216e-5,1.4157333008626661e-8,0.0017899592671993573,-2.5582042811262578e-5,1.4138489270469296e-8,0.0017902519438446774,-2.5498478260559e-5,1.4060321791036643e-8,0.0017905123629933307,-2.535677868794753e-5,1.3930440496755607e-8,0.0017907225488373376,-2.51734072821892e-5,1.3763682625522863e-8,0.0017908711693659085,-2.4971322438834654e-5,1.3580725771725944e-8,0.0017909554371954345,-2.4777821665357153e-5,1.3406151734326352e-8,0.0017909827283962571,-2.462135499749847e-5,1.3265522508586063e-8,0.001790971202300491,-2.4527148765017287e-5,1.3181360162542386e-8,0.0017909485628708425,-2.4512064252896147e-5,1.316846906372442e-8,0.0017909483769799933,-2.457975629539259e-5,1.3229610662378395e-8,0.0017910040460442844,-2.4717652977466054e-5,1.3352913035006776e-8,0.001791141441592685,-2.4897216452611835e-5,1.3512291120867038e-8,0.0017913719494893788,-2.5078198784446382e-5,1.367144672572904e-8,0.0017916878464235458,-2.5216509648907783e-5,1.3791025050547342e-8,0.0017920615866127356,-2.5274345945545365e-5,1.3837668829362787e-8,0.0017924499408709217,-2.5230505604992228e-5,1.3793113821811035e-8,0.001792803043549295,-2.508822447015411e-5,1.3660997294053245e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json new file mode 100644 index 000000000..bf8935107 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":16000,"numberOfSamples":1000,"samples":[0.0017930770944964171,-2.487756201187732e-5,1.3468791504217692e-8,0.0017932476264231187,-2.464987080068864e-5,1.3262714904077391e-8,0.0017933184724985877,-2.446409956071231e-5,1.3095425337680572e-8,0.0017933216314600794,-2.436869143477916e-5,1.3009865564682467e-8,0.0017933067138776958,-2.438639601001157e-5,1.3025800857085489e-8,0.0017933242278720884,-2.450889654783832e-5,1.3135191695059903e-8,0.0017934104016406212,-2.470298517826634e-5,1.330788790362845e-8,0.0017935796118112995,-2.4923857068963115e-5,1.35036193070344e-8,0.0017938254296263332,-2.512860398380717e-5,1.3684062401894767e-8,0.001794127049257825,-2.5285096932882215e-5,1.3820701756483629e-8,0.0017944568919538132,-2.537530987356056e-5,1.389769075082024e-8,0.0017947867111250417,-2.5394724503292413e-5,1.3911234845185292e-8,0.0017950914943699093,-2.5349982163249467e-5,1.3867468677974076e-8,0.0017953516485814604,-2.5256290869559507e-5,1.3780165902829643e-8,0.0017955543110713956,-2.513520274015715e-5,1.3668792904120013e-8,0.0017956944918898108,-2.501264398241291e-5,1.3556752559378335e-8,0.0017957763330320648,-2.4916631576514276e-5,1.3469287614057573e-8,0.0017958142078399008,-2.487403171878831e-5,1.343048298157746e-8,0.0017958328475770424,-2.4906014603702265e-5,1.3459107884232579e-8,0.001795865353512456,-2.5022541802827092e-5,1.3563657130380593e-8,0.001795948122041468,-2.521726303763574e-5,1.3737855679584164e-8,0.0017961127345561176,-2.546517299188524e-5,1.395871521848886e-8,0.0017963766324439365,-2.572537619201675e-5,1.4189187885469435e-8,0.0017967359302593923,-2.5949711291697144e-5,1.4386024761031048e-8,0.0017971637506210216,-2.6095329969824996e-5,1.451109103127541e-8,0.0017976155937020869,-2.6137143168968956e-5,1.4542469045381444e-8,0.0017980404371389018,-2.607573723966647e-5,1.4481422712615806e-8,0.001798394095120732,-2.5938065908348892e-5,1.4352832525648934e-8,0.0017986508156540284,-2.5770774714917362e-5,1.4199014670934582e-8,0.0017988099091846071,-2.5628118914854457e-5,1.4068743101640252e-8,0.0017988956039585806,-2.555773604555096e-5,1.4004458068040699e-8,0.0017989500158965364,-2.558822796060149e-5,1.4031230788508505e-8,0.0017990211621026053,-2.5722340085414784e-5,1.415084222610123e-8,0.0017991498357205768,-2.593791853046823e-5,1.4342850551324464e-8,0.0017993597382745207,-2.6195968610161597e-5,1.4571956673982097e-8,0.0017996538157950808,-2.645239065855816e-5,1.4798559267271849e-8,0.0018000169294873425,-2.666894130169837e-5,1.498852497549383e-8,0.0018004224996779246,-2.6820193009237008e-5,1.5119328433877708e-8,0.0018008399579285909,-2.6895709367472842e-5,1.5181911626012463e-8,0.0018012407279650508,-2.6898643187987404e-5,1.5179375808053418e-8,0.0018016019580566775,-2.6842624017871885e-5,1.512418529733506e-8,0.0018019083507358257,-2.6748422125539742e-5,1.503519386765796e-8,0.0018021529000758112,-2.664111066735776e-5,1.4935106313335826e-8,0.0018023373010458653,-2.654770620791294e-5,1.4848328300519829e-8,0.0018024724205052492,-2.6494772143160663e-5,1.4798742963175621e-8,0.0018025786668415908,-2.6505317999914305e-5,1.4806850211476605e-8,0.0018026854955645365,-2.659451656531552e-5,1.4885891179718516e-8,0.0018028287921071594,-2.6764406036804033e-5,1.5037147763755564e-8,0.0018030448604636129,-2.6999007434058543e-5,1.5245693907824705e-8,0.0018033608554715635,-2.726276700041339e-5,1.5479157196478573e-8,0.0018037839756043577,-2.750560873314212e-5,1.5692371417557645e-8,0.0018042943907072807,-2.767567790489397e-5,1.583886014992919e-8,0.0018048471164087917,-2.7736268154231167e-5,1.5886025345858665e-8,0.0018053841995643509,-2.7679480289528892e-5,1.582737530167465e-8,0.0018058526507647669,-2.752969711011927e-5,1.5685558185452904e-8,0.001806220217685462,-2.73353380759272e-5,1.550478294473961e-8,0.0018064829196074033,-2.715336860705409e-5,1.533667607943918e-8,0.001806663117932587,-2.7033305913710596e-5,1.5225741546222746e-8,0.001806800801895628,-2.7005730814722615e-5,1.5199028506319084e-8,0.0018069420013151019,-2.7077300335566203e-5,1.5261811538653193e-8,0.0018071276684187964,-2.7232000211422743e-5,1.5398964117004876e-8,0.0018073853085648632,-2.7437165696606414e-5,1.5580585890886757e-8,0.0018077246572371043,-2.7652248535832284e-5,1.576998693661435e-8,0.0018081377800550024,-2.7838089562507862e-5,1.5932006675260243e-8,0.0018086029626342595,-2.7964541054522235e-5,1.603977518121356e-8,0.0018090908374324907,-2.8014926126988497e-5,1.607861859878816e-8,0.00180957084697334,-2.7986978508900445e-5,1.6046829753568754e-8,0.0018100165314672806,-2.7890983536707856e-5,1.5953965389800106e-8,0.0018104089137041853,-2.774636589803873e-5,1.5817776136232783e-8,0.0018107380434183873,-2.7577939639375955e-5,1.5660833269492737e-8,0.0018110032945058872,-2.7412588632335316e-5,1.5507519669488106e-8,0.0018112130984671998,-2.727650820984009e-5,1.5381492498527788e-8,0.0018113845185778008,-2.719266881496396e-5,1.5303331370154355e-8,0.0018115426463610783,-2.7177984586301253e-5,1.5287947407869493e-8,0.0018117192686648675,-2.7239724617485946e-5,1.5341380468993828e-8,0.001811949680932402,-2.7371212382235838e-5,1.545703888127489e-8,0.0018122663836599232,-2.754807176709037e-5,1.561247872864076e-8,0.0018126893601793177,-2.772785807579092e-5,1.57692019263019e-8,0.001813215168157243,-2.7856683016959833e-5,1.5878661656300398e-8,0.001813810503341971,-2.788443523714781e-5,1.589593222254393e-8,0.0018144169960900853,-2.7784424994027194e-5,1.5797369795099836e-8,0.0018149690546354657,-2.7567238609616395e-5,1.5593102180247856e-8,0.0018154173615913274,-2.7279217321055754e-5,1.532562475157829e-8,0.001815745477353155,-2.698524284095293e-5,1.5054105867581623e-8,0.001815971625884253,-2.674564379645672e-5,1.4833294082824518e-8,0.0018161376350310534,-2.6598869981665784e-5,1.4697715161200344e-8,0.0018162930699050063,-2.6555272801256695e-5,1.46561098570472e-8,0.0018164816791041126,-2.6600309925083196e-5,1.4694563048089877e-8,0.001816733162707175,-2.6702680190249542e-5,1.4784125685246063e-8,0.0018170600913158257,-2.682355433898887e-5,1.4889335877885533e-8,0.0018174585911996668,-2.6924764974141972e-5,1.4975656178105195e-8,0.0018179114635388195,-2.697514492077015e-5,1.5015123550887387e-8,0.0018183927840198378,-2.69547379106428e-5,1.499003182489609e-8,0.0018188731580403156,-2.6856711418009936e-5,1.4894556739454665e-8,0.001819324793629755,-2.6687029559253713e-5,1.473440683021408e-8,0.0018197256785068433,-2.6462277654925132e-5,1.4524849413287513e-8,0.001820062373922574,-2.6206258898886165e-5,1.428764312060864e-8,0.001820331254382838,-2.5946127881015275e-5,1.4047536963377575e-8,0.001820538445168254,-2.5708755861324498e-5,1.3828946837314153e-8,0.0018206989383891886,-2.5517624437804906e-5,1.365308557110985e-8,0.0018208352337955717,-2.5390152599451144e-5,1.3535489407026761e-8,0.0018209755912363625,-2.5335207243642732e-5,1.34837573147026e-8,0.001821151632775928,-2.5350517985874814e-5,1.3495281869197622e-8,0.0018213945362785741,-2.5420047270152325e-5,1.3555011738893574e-8,0.0018217289276931587,-2.551235675360919e-5,1.363413439824075e-8,0.001822164406689718,-2.5582239942904856e-5,1.3691653129699898e-8,0.001822686655285152,-2.557849948022469e-5,1.3681411343723724e-8,0.0018232531039378613,-2.5459295222371094e-5,1.3565889406493894e-8,0.0018237998026180275,-2.5211254782313133e-5,1.3333435451442727e-8,0.0018242618025331551,-2.48617013791813e-5,1.300934477782622e-8,0.0018245988973076108,-2.4473013353101097e-5,1.2650735273151976e-8,0.0018248114805428112,-2.4119027032174727e-5,1.2325005783849212e-8,0.0018249369229238492,-2.3856916289854328e-5,1.2084104532181132e-8,0.0018250308362240503,-2.371030618670482e-5,1.1949100841989596e-8,0.001825146047330891,-2.366910915234589e-5,1.1910159201163204e-8,0.0018253190675345766,-2.3700474694523012e-5,1.1936747643950821e-8,0.0018255659145471929,-2.3762271034004848e-5,1.1990121606287427e-8,0.0018258842445968248,-2.3813805840709907e-5,1.2033166516185259e-8,0.001826258169929863,-2.382242826521537e-5,1.2036355717542334e-8,0.0018266634773100754,-2.3766769983762126e-5,1.1980573637170289e-8,0.001827072388230482,-2.363782080690576e-5,1.1857967699394822e-8,0.0018274577516185762,-2.343858881848419e-5,1.1671564450583e-8,0.0018277966526101797,-2.318264021823313e-5,1.1433927158541618e-8,0.0018280733241575382,-2.2891668446499556e-5,1.1164967072672481e-8,0.0018282811577905753,-2.259224023359341e-5,1.0889004337993399e-8,0.001828423551827078,-2.231201801919025e-5,1.0631321018346868e-8,0.0018285135003267157,-2.207596922814408e-5,1.0414665395833809e-8,0.0018285721071275558,-2.1903000912757984e-5,1.0256127104231967e-8,0.0018286262706814032,-2.1803209435120533e-5,1.0164594038831645e-8,0.001828705702435555,-2.177583438325039e-5,1.0138909579633824e-8,0.001828839337656277,-2.1807956588344662e-5,1.0166784524005633e-8,0.0018290509329571627,-2.1874064192536067e-5,1.0224554437432966e-8,0.0018293535538177238,-2.1937215282132975e-5,1.027838557907086e-8,0.0018297433561300666,-2.1953289747187514e-5,1.0288214837085777e-8,0.0018301945153309169,-2.1879869760203124e-5,1.0215787794044302e-8,0.001830658946308421,-2.168992779500395e-5,1.0036992338479185e-8,0.0018310753618979378,-2.138679258668782e-5,9.755367998113473e-9,0.0018313889838965569,-2.1011704357252705e-5,9.40893730399691e-9,0.0018315746329431721,-2.063467135717398e-5,9.061841978804914e-9,0.0018316490783180249,-2.0328796754628263e-5,8.780851241439044e-9,0.0018316632653398112,-2.0141677331726018e-5,8.60917634137112e-9,0.001831679395233614,-2.0080681978185537e-5,8.55305072202464e-9,0.0018317476612021335,-2.0117816834583795e-5,8.586332987307337e-9,0.0018318940208144653,-2.0206428881992914e-5,8.665969743081962e-9,0.0018321201082134187,-2.0298263194615822e-5,8.747708166164193e-9,0.001832409908402203,-2.0354458317239478e-5,8.796142458866711e-9,0.00183273774398109,-2.035003732644327e-5,8.788718700893353e-9,0.001833074770107819,-2.027416826766039e-5,8.715846695855356e-9,0.001833393452426999,-2.0128529716534936e-5,8.579316424344743e-9,0.0018336705866361742,-1.992511730302927e-5,8.390268759309309e-9,0.0018338894912187423,-1.968387735533606e-5,8.167058601271752e-9,0.0018340416791292305,-1.943010095958344e-5,7.932910852662894e-9,0.0018341280134618974,-1.9191384559990707e-5,7.713154507289564e-9,0.0018341590816821458,-1.8994066898046752e-5,7.53193522572574e-9,0.0018341544149850127,-1.885940649167221e-5,7.40865932392435e-9,0.0018341403815578727,-1.8800038802715472e-5,7.3546966523347715e-9,0.0018341468535115438,-1.8817250628981883e-5,7.370872897137305e-9,0.0018342029234141627,-1.889956862277312e-5,7.446231414582977e-9,0.0018343321227258867,-1.9023083174690816e-5,7.558447698209529e-9,0.0018345476553118807,-1.9153707945490168e-5,7.676042116963366e-9,0.0018348481083950683,-1.9251549921866032e-5,7.762491329140837e-9,0.0018352144196331546,-1.9277769509678416e-5,7.782530133022137e-9,0.0018356096596253435,-1.920398976117508e-5,7.710681424220857e-9,0.0018359837763515755,-1.9022957466042443e-5,7.540865396769042e-9,0.0018362849741516284,-1.8756908829736255e-5,7.293910761478627e-9,0.0018364766833233455,-1.8457870012827724e-5,7.017737181329629e-9,0.0018365538571077135,-1.8194914639068882e-5,6.775647214996834e-9,0.001836548563460727,-1.803024372589666e-5,6.624410847690285e-9,0.0018365187675594202,-1.7995409567851337e-5,6.592525088216024e-9,0.0018365252877235454,-1.8081331449302935e-5,6.671177914624835e-9,0.0018366101542084223,-1.8246672589318575e-5,6.822077045534804e-9,0.0018367869375824912,-1.8436994200718304e-5,6.995122222991016e-9,0.001837043888830328,-1.8602938875977135e-5,7.145101322978344e-9,0.0018373537387537482,-1.8710583772040503e-5,7.241122599512904e-9,0.0018376837337121634,-1.8743874840279134e-5,7.2687428712580284e-9,0.0018380027530075403,-1.8702372696090056e-5,7.227808403795434e-9,0.0018382852635966235,-1.8597450955179613e-5,7.128926096284541e-9,0.001838513176276471,-1.8448670412689796e-5,6.990149973877557e-9,0.0018386767249291653,-1.8280754164638692e-5,6.8342449477846595e-9,0.0018387750038904136,-1.812090639012062e-5,6.686252226411574e-9,0.0018388162973281307,-1.799601728606697e-5,6.570911706461216e-9,0.0018388179260978472,-1.7929389648419776e-5,6.509607695224068e-9,0.0018388050594228275,-1.7937016075237906e-5,6.516893378261047e-9,0.0018388079846011016,-1.8023966004633595e-5,6.597145459559734e-9,0.001838857713922728,-1.818180313357647e-5,6.742223335637884e-9,0.0018389803552352245,-1.838806035919854e-5,6.9310780933096055e-9,0.0018391912530982262,-1.860858891245793e-5,7.132034188312767e-9,0.0018394902971468079,-1.88029481324306e-5,7.3078518212857724e-9,0.0018398597310770378,-1.8932177661136858e-5,7.422918615431776e-9,0.0018402654168871984,-1.896772954162206e-5,7.451423914551764e-9,0.0018406621235211068,-1.8899934385024923e-5,7.385028293072869e-9,0.0018410028729857332,-1.8743806537061265e-5,7.238049462551088e-9,0.0018412512510457238,-1.8539475868505472e-5,7.047719368366382e-9,0.0018413937282192889,-1.834483799071887e-5,6.86733900839635e-9,0.0018414470718991932,-1.8220140618210308e-5,6.752093172557913e-9,0.0018414557581306575,-1.8208514775956216e-5,6.741217444212319e-9,0.0018414780209857879,-1.8320709364073575e-5,6.844095149750602e-9,0.001841565803992494,-1.8532077021471085e-5,7.037638298125493e-9,0.0018417482230087799,-1.8793447944416692e-5,7.276395121919292e-9,0.001842025845932932,-1.9049480082961622e-5,7.509453930519011e-9,0.001842376034057044,-1.925507263145096e-5,7.69549565376883e-9,0.0018427639401787223,-1.9383990375315344e-5,7.810647629678605e-9,0.0018431531413094465,-1.942958955901095e-5,7.849070713791684e-9,0.0018435127392187048,-1.940088549418417e-5,7.8192866216250315E-09,0.001843820730492911,-1.9317320377072763e-5,7.739348166296656e-9,0.0018440648885501498,-1.9204160908646343e-5,7.632620118984367e-9,0.001844242531542363,-1.9089035068363377e-5,7.524612793811735e-9,0.0018443600647661403,-1.8999259868333292e-5,7.440521812341918e-9,0.001844432549312981,-1.8959307662865297e-5,7.402863667254894e-9,0.0018444829953387927,-1.8987874349045107e-5,7.428729689176291e-9,0.0018445407209490732,-1.9094430440071465e-5,7.52658268876082e-9,0.0018446380463958871,-1.9275761849198014e-5,7.693093256534828e-9,0.001844804951317121,-1.9513700180089063e-5,7.911127592194227e-9,0.0018450622049142106,-1.9775670897407012e-5,8.15036239379623e-9,0.0018454146537959305,-2.0019361155694627e-5,8.37168352380671e-9,0.0018458471645658634,-2.020149491512519e-5,8.53532123115057e-9,0.001846325472916595,-2.0288852030465627e-5,8.610991677718667e-9,0.001846802738334875,-2.0268255874207588e-5,8.587035433849896e-9,0.0018472305526570348,-2.0152106866842266e-5,8.475412368243551e-9,0.0018475714841345342,-1.99772538420524e-5,8.31053358635742e-9,0.0018478096100095864,-1.9796940495792812e-5,8.141712154172403e-9,0.0018479558587613187,-1.9667497884298463e-5,8.020816057287474e-9,0.0018480460497650023,-1.9633092096664974e-5,7.988216118779569e-9,0.0018481313475885142,-1.97130435184807e-5,8.061204673026506e-9,0.0018482635125553158,-1.989628715353263e-5,8.229056332405201e-9,0.0018484798977238869,-2.014547254945726e-5,8.45695909902495e-9,0.0018487937859131421,-2.0409270039150275e-5,8.697434490355547e-9,0.0018491933464550954,-2.0637777460108637e-5,8.904531720257321e-9,0.001849648388562267,-2.0794981895125802e-5,9.04525543618406e-9,0.0018501208603383453,-2.0864590650255843e-5,9.104868950596546e-9,0.0018505745805460858,-2.0849287684095834e-5,9.086145203825255e-9,0.0018509815951685388,-2.0766006244656177e-5,9.004964655845875e-9,0.0018513249009249032,-2.0640121265863943e-5,8.88493947825769e-9,0.0018515986248674762,-2.0500399014916906e-5,8.75275158592604e-9,0.0018518069924697927,-2.037529947986055e-5,8.634737803338043e-9,0.0018519630574627775,-2.029034519449881e-5,8.55444480376467e-9,0.0018520875544509319,-2.0265862670398454e-5,8.530515515536571e-9,0.0018522076118006106,-2.0314479503742223e-5,8.574357895458459e-9,0.001852354640478269,-2.043817792207266e-5,8.68743961998716e-9,0.0018525605725263623,-2.0625343158510295e-5,8.85862825193293e-9,0.0018528519045839407,-2.0849110173348045e-5,9.06276525797922e-9,0.0018532420360760945,-2.1069073571299936e-5,9.262339779435322e-9,0.001853724130935122,-2.123818424609054e-5,9.413907129041965e-9,0.0018542681745039775,-2.13146965067963e-5,9.479118156772436e-9,0.001854825500677946,-2.1275855803305648e-5,9.437327265942164e-9,0.0018553411001434338,-2.1127603421251835e-5,9.294511094167757e-9,0.001855769808091963,-2.0905197786356253e-5,9.083769325899609e-9,0.001856089934500493,-2.066366542445483e-5,8.856377940750694e-9,0.001856309055157489,-2.0461827016597087e-5,8.66688007773098e-9,0.0018564605291198604,-2.0346009610590452e-5,8.557941716365146e-9,0.0018565929794966702,-2.0338609963516525e-5,8.549815123998282e-9,0.0018567566935258077,-2.0434095465034442e-5,8.636794189047838e-9,0.0018569909246059376,-2.0602544164462002e-5,8.790679141975657e-9,0.001857315247217037,-2.079894845221756e-5,8.96952007306406e-9,0.0018577267622189627,-2.097526582003082e-5,9.12880609280628e-9,0.001858203223977554,-2.109175679528336e-5,9.231914666619509e-9,0.0018587104540100233,-2.1124682017155018e-5,9.257156442445109e-9,0.0018592113115679834,-2.106890188932159e-5,9.200104828967708e-9,0.0018596735056705283,-2.0935816127821806e-5,9.07163153057935e-9,0.0018600745996205108,-2.0748452915729757e-5,8.89332379757743e-9,0.0018604039664238258,-2.0535775690622106e-5,8.692194187757801e-9,0.0018606624467996109,-2.032768021272182e-5,8.496037214902576e-9,0.0018608607937328295,-2.0151290741381685e-5,8.329989644194028e-9,0.0018610177895546044,-2.0028404875289557e-5,8.214148845006132e-9,0.0018611584243115355,-1.9973516875703052e-5,8.161728802068476e-9,0.0018613119834204608,-1.999186368250376e-5,8.17725592983337e-9,0.0018615094730483387,-2.0077264157555704e-5,8.254611200906061e-9,0.0018617795921467622,-2.021010824142319e-5,8.375250055651793e-9,0.0018621426777235635,-2.0356759570897997e-5,8.507743574528015e-9,0.0018626030974959807,-2.0472527218197918e-5,8.610594760757943e-9,0.001863142529370494,-2.0510266452106173e-5,8.640213095127023e-9,0.001863718542838287,-2.0434462278556232e-5,8.563932655985352e-9,0.0018642726717816077,-2.0236362154722935e-5,8.374014217097276e-9,0.0018647478436570396,-1.9942109211313427e-5,8.095175761587323e-9,0.001865108368948935,-1.960728289796133e-5,7.779474788722417e-9,0.0018653524017467537,-1.9298711898535704e-5,7.4892916930745e-9,0.0018655107551995035,-1.9072315354648044e-5,7.27659510756275e-9,0.0018656340820196373,-1.895724351204022e-5,7.168151304633016e-9,0.0018657758320747826,-1.895135064135561e-5,7.161416176012306e-9,0.0018659780113648356,-1.9026593337249196e-5,7.229749985625541e-9,0.0018662631207856332,-1.9139791481250695e-5,7.332602529333776e-9,0.0018666323647777408,-1.9244376015289706e-5,7.426524029334083e-9,0.0018670686302071045,-1.93003096381889e-5,7.474374412439072e-9,0.0018675424105708905,-1.9280847880737214e-5,7.451532270409492e-9,0.0018680189994260549,-1.9175704489265866e-5,7.348747503653877e-9,0.0018684654564785955,-1.8990736169104185e-5,7.171778438188237e-9,0.0018688561260398076,-1.8744836865035615e-5,6.938463114669843e-9,0.0018691760026911882,-1.8465188498455326e-5,6.674284503730649e-9,0.001869421833270251,-1.818207784859466e-5,6.407542925266269e-9,0.0018696013388690184,-1.7924257543533537e-5,6.165035437391302e-9,0.0018697312745747144,-1.77154221714517e-5,5.968767927016784e-9,0.0018698350512996898,-1.7571817919185243e-5,5.8337191006715384e-9,0.0018699402886244905,-1.750060390009367e-5,5.76630978226681e-9,0.0018700762544792589,-1.7498573862310598e-5,5.763229760950721e-9,0.0018702708423503566,-1.7551071627329354e-5,5.8104800416812336e-9,0.0018705465025051088,-1.763137263486119e-5,5.882878383752786e-9,0.0018709146903029294,-1.770161615547732e-5,5.945007935726127e-9,0.0018713693790612124,-1.771717503436893e-5,5.955326079857078e-9,0.001871882005628167,-1.7636224585071255e-5,5.875056690709975e-9,0.0018724021730790383,-1.7434179833481032e-5,5.681589270232072e-9,0.0018728684333721528,-1.7118167658035483e-5,5.3819353393236815e-9,0.0018732287172204356,-1.6732355540166632e-5,5.017686966724454e-9,0.0018734616898216,-1.6346704189132433e-5,4.654472798669768e-9,0.0018735862278335242,-1.6031827206181716e-5,4.358367558462995e-9,0.0018736526901350647,-1.583326478782647e-5,4.1717537065880975e-9,0.0018737219046122688,-1.5758804508346698e-5,4.10148922345258e-9,0.0018738443004110933,-1.578241850439683e-5,4.12273758898688e-9,0.0018740479774201498,-1.5858384906640113e-5,4.192354118637595e-9,0.0018743368377812267,-1.5936813363410486e-5,4.2635170100055776e-9,0.0018746952507608576,-1.5975245333576563e-5,4.296582563572818e-9,0.001875095253598817,-1.594505681652756e-5,4.265000879239349e-9,0.0018755037392833745,-1.5833619336192383e-5,4.157239354603041e-9,0.0018758885761289046,-1.5643635440476038e-5,3.976084601740173e-9,0.001876223379869671,-1.539063040568846e-5,3.736258860742264e-9,0.0018764908158095375,-1.5099215718405392e-5,3.460921341786339e-9,0.0018766843555797306,-1.4798700313825205e-5,3.1775739251165955e-9,0.001876808514204054,-1.4518593640800304e-5,2.913862771528727e-9,0.001876877684600156,-1.428449594527703e-5,2.6937304046643276e-9,0.0018769138794313335,-1.4114849713635936e-5,2.534362112040424e-9,0.001876943877891384,-1.4018784813808756e-5,2.444153315210054e-9,0.0018769961556297737,-1.3994930354196748e-5,2.4215928014478305e-9,0.0018770976892354386,-1.4030988542626093e-5,2.454884423634573e-9,0.0018772705481379275,-1.4104015382463982e-5,2.5222631987773908e-9,0.001877528051302119,-1.4181603792678899e-5,2.5931789806121115e-9,0.0018778703569376982,-1.4224713941675174e-5,2.6310160704288327e-9,0.0018782801543122864,-1.4193451439422243e-5,2.598529820729149e-9,0.0018787205590664604,-1.405678212300852e-5,2.4669139600598395e-9,0.0018791386692319275,-1.3805285464980217e-5,2.2276810492311913e-9,0.0018794780123360833,-1.3462303276611882e-5,1.9030504386180313e-9,0.0018796988460152687,-1.3085081939944344e-5,1.5469771882351445e-9,0.001879797376121251,-1.2749246711917046e-5,1.2305366805810725e-9,0.001879810814909188,-1.2520431987685998e-5,1.0152379061173355e-9,0.0018798025069450173,-1.2428480565797385e-5,9.28792039154265e-10,0.0018798356637794984,-1.2459405930458762e-5,9.576569245815327e-10,0.0018799514652937973,-1.2567147881760806e-5,1.058227207885944e-9,0.0018801611228964044,-1.2694459694026742e-5,1.1765668337490139e-9,0.0018804504286041776,-1.2790844470236134e-5,1.2652815802583089e-9,0.0018807898296935043,-1.2822211239622132e-5,1.2925348480468322e-9,0.001881144296639176,-1.2773137375766395e-5,1.244082520275377e-9,0.001881480541304962,-1.2644829708590756e-5,1.1212779543347608e-9,0.0018817714830373492,-1.2451442593087324e-5,9.37573033027889e-10,0.0018819987877392661,-1.2216113471832141e-5,7.147943106851535e-10,0.0018821541835679256,-1.1967040551517974e-5,4.79481554800589e-10,0.001882239823342938,-1.1733614321682521e-5,2.592733145950963e-10,0.0018822677333682823,-1.1542659347071796e-5,7.937878641490489e-11,0.001882258290813125,-1.1414929386642006e-5,-4.073055482831923e-11,0.00188223769665013,-1.1362192719985607e-5,-9.008293919875422e-11,0.001882234648515446,-1.1385337979164145e-5,-6.800108198389007e-11,0.0018822765976668182,-1.147373068275585e-5,1.529829570741141e-11,0.0018823859220090569,-1.1605863972995146e-5,1.3934936610352848e-10,0.0018825762769299201,-1.1751333204930212e-5,2.7535196640362164e-10,0.001882849356696919,-1.1874174668779581e-5,3.8937810798312383e-10,0.0018831923326353601,-1.1937760844475924e-5,4.470257514000792e-10,0.0018835766745060477,-1.1911660763090492e-5,4.198775427362523e-10,0.0018839599006157666,-1.1780441166968134e-5,2.937343558620432e-10,0.0018842923200876947,-1.1552816367157377e-5,7.714292268036392e-11,0.0018845300065070212,-1.1267101431234662e-5,-1.935563353070176e-10,0.001884651848842402,-1.0986979616266467e-5,-4.582805070815646e-10,0.0018846729512961321,-1.0783668473551395e-5,-6.500369715974631e-10,0.001884644026311698,-1.0709107993313308e-5,-7.201687612284614e-10,0.0018846329849430254,-1.0774324376780514e-5,-6.586566194780138e-10,0.0018846977991100334,-1.0946622650667459e-5,-4.966346506891892e-10,0.0018848664449174443,-1.1166459365350037e-5,-2.9038739613313543e-10,0.0018851332005309256,-1.1371807843700045e-5,-9.836030862044166e-11,0.00188546833284025,-1.1516483567944784e-5,3.6072174092010136e-11,0.0018858320534413794,-1.1577196587717038e-5,9.118298144119174e-11,0.0018861858170151932,-1.1551897946543376e-5,6.526251494340663e-11,0.0018864988368209698,-1.1454250824736898e-5,-2.8641386320276168e-11,0.0018867506997908348,-1.130771157982184e-5,-1.683171289939276e-10,0.0018869317981828468,-1.114067253953726e-5,-3.269535468848281e-10,0.00188704288267068,-1.0982683580718171e-5,-4.766790893169354e-10,0.00188709425157458,-1.0861262431198378e-5,-5.915582605683498e-10,0.0018871045582005074,-1.0798915164720963e-5,-6.504092600231872e-10,0.0018870989904794264,-1.0810255077489202e-5,-6.395398827368157e-10,0.0018871065171513206,-1.089946266139451e-5,-5.551558313967678e-10,0.0018871561148395357,-1.1058676341069262e-5,-4.048719775294948e-10,0.0018872723151573511,-1.1267948529405112e-5,-2.077232698081918e-10,0.0018874707273317042,-1.1497174238386989e-5,7.702962172308863e-12,0.0018877543345839755,-1.1710094620244999e-5,2.0709679356946207e-10,0.0018881113731507087,-1.1870079468074387e-5,3.5592247332806187e-10,0.0018885154354453212,-1.1947025394181564e-5,4.2594198011051527e-10,0.0018889282709940963,-1.1924554434572256e-5,4.0198452420754266e-10,0.0018893057509901104,-1.180642796887354e-5,2.8793937793174093e-10,0.0018896072155190882,-1.1620319815144137e-5,1.102325230061882e-10,0.0018898073174633363,-1.141620503858083e-5,-8.378045830706647e-11,0.0018899072882816023,-1.1256680872880053e-5,-2.350144500265779e-10,0.00188994004525897,-1.1199004466727915e-5,-2.8962303888349816e-10,0.0018899634124805416,-1.1274091765243815e-5,-2.187662588737686e-10,0.0018900409279768637,-1.1472911999612212e-5,-3.133758064503063e-11,0.0018902183761997377,-1.1749297526970216e-5,2.2880621691449785e-10,0.0018905085190595347,-1.2038537620544541e-5,5.004579398597872e-10,0.0018908911977333046,-1.2281010673800587e-5,7.273646082903298e-10,0.0018913257026649535,-1.2438746635557551e-5,8.738262880584713e-10,0.001891766418942364,-1.2500025159169855e-5,9.289921702418269e-10,0.0018921745217345054,-1.2474898759061678e-5,9.025856295473614e-10,0.0018925235949496604,-1.2387224374957897e-5,8.173373978207359e-10,0.0018928006012498605,-1.2267242724669224e-5,7.019521780489794e-10,0.001893004532648849,-1.2146219309942353e-5,5.860420989860535e-10,0.0018931444568213974,-1.2052958305120446e-5,4.968374482519974e-10,0.0018932376922635935,-1.201136506885249e-5,4.5688395279176046e-10,0.0018933080932005942,-1.203830971069964e-5,4.820179060546816e-10,0.0018933840198379344,-1.2141431704543413e-5,5.792878687063079e-10,0.0018934954432214392,-1.2317048491958935e-5,7.449904944807481e-10,0.0018936698433884116,-1.2548874791752978e-5,9.63493451044306e-10,0.0018939271289290503,-1.2808571057900438e-5,1.207801973263226e-9,0.0018942745270844783,-1.3059009801183272e-5,1.4426931836520661e-9,0.0018947029628015445,-1.3260512884313262e-5,1.6306445395104082e-9,0.0018951865409454112,-1.3379240786205856e-5,1.739776196090901e-9,0.0018956861193035659,-1.339582085200682e-5,1.7520006276159735e-9,0.001896156784362993,-1.3311821218936873e-5,1.6691149414387627e-9,0.0018965578833635218,-1.315201628144059e-5,1.5148888736049156e-9,0.0018968634955145083,-1.2961201862073039e-5,1.3319718714925833e-9,0.0018970707895216053,-1.27953186054354e-5,1.1734090967998433e-9,0.0018972035254706415,-1.270792499395131e-5,1.0897877058615488e-9,0.0018973082905004745,-1.2734836504746565e-5,1.1147159041982071e-9,0.0018974426469162598,-1.2881765897702211e-5,1.2532161191392723e-9,0.0018976577334179135,-1.3120638566367633e-5,1.4783604413576136e-9,0.0018979817061840188,-1.3397830754750496e-5,1.7391592222003208e-9,0.001898411458923872,-1.3651830597880485e-5,1.9773042111285594e-9,0.0018989162166529016,-1.3832467412215963e-5,2.1453543532283e-9,0.0018994501504002229,-1.3913394698958246e-5,2.218528300226893e-9,0.0018999670934915821,-1.3894285229865015e-5,2.1967560935101533e-9,0.0019004313205916007,-1.3794987368719163e-5,2.0991062793393773e-9,0.0019008222473536457,-1.3646563923406225e-5,1.9552477096692173e-9,0.0019011342862434643,-1.3483210869567092e-5,1.7977502645593472e-9,0.0019013742670453792,-1.3336710126712298e-5,1.656805182705815e-9,0.0019015583445810035,-1.3233251710861967e-5,1.557210441490532e-9,0.0019017093215130678,-1.3191683234416556e-5,1.516718948288368e-9,0.0019018544551819409,-1.322222486221346e-5,1.5448335845441187e-9,0.0019020232614363063,-1.332508798252e-5,1.641518474045382e-9,0.0019022446122891282,-1.3489036976123344e-5,1.7958687511443292e-9,0.0019025425844261994,-1.369058867045455e-5,1.985394636394811e-9,0.0019029310998461496,-1.3895103526272778e-5,2.177098013812628e-9,0.0019034084130146504,-1.4061158291373949e-5,2.3316432829741173e-9,0.0019039536403952983,-1.4148798826174367e-5,2.411188360481643e-9,0.00190452798036301,-1.4130390523376207e-5,2.3896713112052716e-9,0.0019050821403015848,-1.4000599135125858e-5,2.262277159589695e-9,0.0019055688083909521,-1.3781106731241096e-5,2.0499028297317794e-9,0.0019059562148011579,-1.3517137805515713e-5,1.795813482384683e-9,0.0019062378216281627,-1.3266226807941069e-5,1.55488479026225e-9,0.0019064346707243743,-1.3082876840158903e-5,1.3789321851604236e-9,0.0019065897975290977,-1.300402884385789e-5,1.3028645792247607e-9,0.0019067566525288243,-1.3039478647258866e-5,1.335631681489911e-9,0.0019069848668208623,-1.3169664466781716e-5,1.458241594737562e-9,0.0019073072088376596,-1.3351363244590194e-5,1.6292950121476715e-9,0.0019077314104704636,-1.35297729754093e-5,1.7965331398129217e-9,0.0019082393455308658,-1.3653389545506359e-5,1.910981408664566e-9,0.0019087936495511212,-1.368692249063571e-5,1.9391998920108105e-9,0.0019093490888763,-1.36182247050182e-5,1.8698433679372743e-9,0.0019098643504093444,-1.3457815665676977e-5,1.7131785903247102e-9,0.0019103104535418381,-1.3232664882104302e-5,1.49513174647234e-9,0.001910674199703993,-1.2977653683504635e-5,1.2491153226176072e-9,0.001910957383345947,-1.2727836569487273e-5,1.0086216538112337e-9,0.0019111736376836673,-1.2513095263658599e-5,8.021151208985223e-10,0.0019113446910483782,-1.2355262008813369e-5,6.502990133921028e-10,0.0019114970699477254,-1.2266914435896981e-5,5.649887739956633e-10,0.001911659458251913,-1.2250863989869682e-5,5.48651037755953e-10,0.0019118603142655674,-1.2299688915426472e-5,5.939871771107086e-10,0.0019121250704395051,-1.2395224103850199e-5,6.83479516283135e-10,0.001912472298250459,-1.2508553962420433e-5,7.894175597020551e-10,0.0019129086995072113,-1.2601732458062466e-5,8.755614362231623e-10,0.0019134238587510172,-1.2632856875682743e-5,9.019823758839568e-10,0.0019139872139001782,-1.2565475255362356e-5,8.340185275907759e-10,0.0019145507149744756,-1.2380996991705414e-5,6.541016494998854e-10,0.0019150594943169597,-1.208942059331609e-5,3.720012705806915e-10,0.0019154687355826697,-1.1731803189978585e-5,2.7186751351475117e-11,0.0019157599073696201,-1.1370438510631843e-5,-3.2059589419623007e-10,0.0019159480871280882,-1.1069433649940181e-5,-6.099776897920081e-10,0.0019160765242110884,-1.0874351161307604e-5,-7.975067244527357e-10,0.001916201638240862,-1.0799731954230843e-5,-8.695695269755934e-10,0.0019163757206690922,-1.0828066294132719e-5,-8.432736692445251e-10,0.001916633663319116,-1.0918083407511515e-5,-7.583931686950212e-10,0.0019169865545414935,-1.1017681518618213e-5,-6.649208970516302e-10,0.0019174220148160516,-1.1077138327480256e-5,-6.104228457140029e-10,0.001917909652400136,-1.1059628873658679e-5,-6.300141180862712e-10,0.0019184095373273615,-1.0947442807596206e-5,-7.404583107456317e-10,0.0019188815145464583,-1.074336196537258e-5,-9.388858115135974e-10,0.0019192932808213034,-1.0467594123611643e-5,-1.20575358697917e-9,0.0019196256213150462,-1.0151606595075532e-5,-1.5107725145640873e-9,0.0019198741582867806,-9.830831037267878e-6,-1.8199155582087304e-9,0.001920048034328906,-9.53810189496491e-6,-2.101716952530784e-9,0.00192016664884815,-9.298985720095432e-6,-2.3317451423285186e-9,0.0019202557299710247,-9.129284586844093e-6,-2.4949779817672822e-9,0.0019203436982262987,-9.03425635494825e-6,-2.5865276762768656e-9,0.0019204586561453517,-9.008766308266697e-6,-2.6114761398253937e-9,0.0019206257964393613,-9.037767379553837e-6,-2.584400459288261e-9,0.0019208647556760669,-9.096934635335611e-6,-2.528749375572851e-9,0.0019211863918376449,-9.153791617985142e-6,-2.475744453410305e-9,0.0019215887893763244,-9.170318069016814e-6,-2.4618619106144695e-9,0.0019220532680969222,-9.108486698013456e-6,-2.5235177511399977e-9,0.0019225426370994027,-8.93968667282501e-6,-2.6880381102716844e-9,0.0019230051437690364,-8.656881355420935e-6,-2.9620064184294193e-9,0.0019233868768198299,-8.284641843373393e-6,-3.321635583237772e-9,0.0019236508865696793,-7.87924983238811e-6,-3.7126811593957043e-9,0.0019237944180940756,-7.513626152701059e-6,-4.064969808739745e-9,0.0019238530642237287,-7.251346875133989e-6,-4.317442787274023e-9,0.0019238875264319904,-7.123184534446885e-6,-4.440727658128514e-9,0.0019239602849499028,-7.118772335068044e-6,-4.445080751689829e-9,0.0019241150340064711,-7.195410187776e-6,-4.3718032484889515e-9,0.0019243672115235493,-7.296057858543114e-6,-4.275859784550209e-9,0.0019247056490780219,-7.366796576870663e-6,-4.209081160263236e-9,0.001925100638222425,-7.368390575798459e-6,-4.2090899838722325e-9,0.0019255136991263675,-7.28124033598263e-6,-4.29459094897082e-9,0.0019259062934330908,-7.105313322498182e-6,-4.465474633111174e-9,0.001926246455241092,-6.8569503429279765e-6,-4.705904064104801e-9,0.001926513155176582,-6.563908504672785e-6,-4.989086595641599e-9,0.0019266984060524598,-6.259565315487143e-6,-5.28285207654197e-9,0.0019268072181901595,-5.977125716265304e-6,-5.555231795710813e-9,0.0019268557194206991,-5.744607949504135e-6,-5.779286983994542e-9,0.001926867956789526,-5.581192829623622e-6,-5.93661711990306e-9,0.0019268720688889452,-5.495252817643273e-6,-6.019245563941074e-9,0.0019268965365545243,-5.483964670467983e-6,-6.029980211505466e-9,0.0019269669147046517,-5.534047865259946e-6,-5.981698489668393e-9,0.0019271030607710645,-5.623188311924287e-6,-5.895977467639949e-9,0.0019273166863302753,-5.7219540024492885e-6,-5.8012471529754476e-9,0.001927608964943563,-5.7963044626612365e-6,-5.730359732741071e-9,0.001927968073137577,-5.811296023443038e-6,-5.716996716285913e-9,0.001928367327868175,-5.736968151573158e-6,-5.789976737812062e-9,0.0019287657529438592,-5.556881102280313e-6,-5.965023129181158e-9,0.0019291137044280984,-5.2780252562612125e-6,-6.235225744033611e-9,0.0019293656129909568,-4.9378508432014095e-6,-6.564293224012181e-9,0.0019294981647026979,-4.601333003765205e-6,-6.88943201632588e-9,0.001929525485728095,-4.342876353937429e-6,-7.138863176862139e-9,0.0019294994801223031,-4.217696588858802e-6,-7.25946537969358e-9,0.0019294908116161604,-4.238299439230228e-6,-7.239417461315074e-9,0.001929560314582812,-4.371015270438031e-6,-7.111424613284696e-9,0.0019297377118852202,-4.55344246107046e-6,-6.935795233464066e-9,0.001930017314096714,-4.719917590952116e-6,-6.775858205910853e-9,0.001930367658027968,-4.821014209853837e-6,-6.679201920416775e-9,0.0019307459008136353,-4.8316120263198285e-6,-6.669947990797228e-9,0.0019311099639047478,-4.749855588336907e-6,-6.749791325681373e-9,0.001931426078730715,-4.591648798416053e-6,-6.903320619292728e-9,0.0019316723240502833,-4.384152509840636e-6,-7.104284083463843e-9,0.00193183957714851,-4.159855661523347e-6,-7.321298468100921e-9,0.0019319309590358179,-3.951522849872863e-6,-7.522721099309414e-9,0.001931960272729608,-3.7879464393165173e-6,-7.680755766459321e-9,0.0019319496225054618,-3.690498897752296e-6,-7.774788967531755e-9,0.0019319263202685097,-3.6706055523742944e-6,-7.793831867149322e-9,0.001931919267959071,-3.7283927164905087e-6,-7.737819257871908e-9,0.0019319552108667095,-3.852716726614077e-6,-7.617573393096083e-9,0.0019320552988749142,-4.02248969024826e-6,-7.453520879166667e-9,0.0019322322171346693,-4.209066647074804e-6,-7.27339092546293e-9,0.0019324880384187753,-4.379522397329557e-6,-7.109051304871561e-9,0.0019328128907126745,-4.5006846976982455e-6,-6.9926006585541975e-9,0.001933184500922892,-4.543960637217014e-6,-6.951680008281516e-9,0.0019335690805746674,-4.491239132575197e-6,-7.0037418708715674e-9,0.0019339247854987158,-4.3417098714221724e-6,-7.149447726110859e-9,0.0019342092422925217,-4.118009382523817e-6,-7.366743932940767e-9,0.0019343916827004838,-3.868204312684253e-6,-7.608992772716862e-9,0.001934467361572726,-3.658733712507117e-6,-7.811866984567964e-9,0.001934467204138646,-3.5553083996379697e-6,-7.911879053399946e-9,0.0019344532495840499,-3.5966460829545584e-6,-7.871776332288663e-9,0.0019344968195731504,-3.7753114217998696e-6,-7.698978894623498e-9,0.0019346495112623097,-4.03947689724567e-6,-7.443761240396356e-9,0.0019349242390860283,-4.315579736048795e-6,-7.177294842177374e-9,0.0019352959799658958,-4.537209508290387e-6,-6.9637480873944295e-9,0.0019357174371195988,-4.664295527601881e-6,-6.8417869033334726e-9,0.0019361376429321514,-4.687227031264865e-6,-6.820621053087697e-9,0.0019365149604292852,-4.620518272556331e-6,-6.886137513437268e-9,0.001936822735002006,-4.4930784615761195e-6,-7.01030959332819e-9,0.0019370497573068866,-4.3395817761451026e-6,-7.159541983283873e-9,0.0019371982714750445,-4.194332245529059e-6,-7.300606086896117e-9,0.0019372813098119841,-4.0872389658178436e-6,-7.404541171072901e-9,0.0019373200047168263,-4.041081596253815e-6,-7.449311969194115e-9,0.0019373408698219712,-4.06951090543502e-6,-7.421751862826817e-9,0.0019373728401152071,-4.175601163817662e-6,-7.318959872347354e-9,0.0019374438984557292,-4.351140097040351e-6,-7.14897163907601e-9,0.0019375773878386295,-4.577090029110529e-6,-6.930294004143148e-9,0.0019377884492321462,-4.8255307456941e-6,-6.690013847281935e-9,0.0019380811458521296,-5.063086450380342e-6,-6.460482833914179e-9,0.0019384468078961414,-5.2556340897116115e-6,-6.274765644942493e-9,0.001938864070694948,-5.373859826780817e-6,-6.161257575262624e-9,0.0019393008815218134,-5.39900090253849e-6,-6.138107237175963e-9,0.0019397185968336869,-5.328108998262378e-6,-6.208094891699568e-9,0.0019400783924782288,-5.178029968915432e-6,-6.3547673684562564e-9,0.001940350064460665,-4.986568248040517e-6,-6.541330751226949e-9,0.0019405222410656135,-4.808507589956162e-6,-6.714561951692604e-9,0.0019406110279473565,-4.704360703335738e-6,-6.815780527851394e-9,0.0019406619186682263,-4.722099909779016e-6,-6.798592282970913e-9,0.0019407397828170951,-4.877341093394415e-6,-6.6480630164182626e-9,0.0019409070239167167,-5.142645237546104e-6,-6.3909979796592525e-9,0.0019411991246476956,-5.455021750594156e-6,-6.08859132515089e-9,0.0019416113591816284,-5.739907638638507e-6,-5.813170806092759e-9,0.0019421039399188788,-5.938379623146413e-6,-5.621848443746926e-9,0.001942620441220814,-6.023358180511173e-6,-5.540825654139379e-9,0.0019431076064300335,-6.000155352616885e-6,-5.564854280690739e-9,0.0019435278468381142,-5.896618797745685e-6,-5.66679479290207e-9,0.0019438629592743444,-5.750852545969404e-6,-5.809548326748877e-9,0.0019441120808416875,-5.601534475667561e-6,-5.955480832384088e-9,0.001944287443752201,-5.482065741624393e-6,-6.072125549617999e-9,0.0019444101506376872,-5.417660736467644e-6,-6.135020234542866e-9,0.001944506708268009,-5.424015514502002e-6,-6.12900103028505e-9,0.0019446061453395735,-5.5065945921930115e-6,-6.048882321230036e-9,0.0019447372317435117,-5.660164219490716e-6,-5.899883466024544e-9,0.0019449253683826993,-5.8687316263243564E-06,-5.6976552684035205e-9,0.001945189030333371,-6.106463427556881e-6,-5.467362321854533e-9,0.001945536161431122,-6.340235377640483e-6,-5.241200084831334e-9,0.0019459613750219223,-6.534129514976202e-6,-5.0540407206024526E-09,0.0019464450016517627,-6.655627092463941e-6,-4.9374385215283745e-9,0.0019469548828858596,-6.682567740270542e-6,-4.912878296775678e-9,0.001947451269570495,-6.60932933283276e-6,-4.985758640608991e-9,0.0019478943525422965,-6.450513493834239e-6,-5.14178782748562e-9,0.0019482532181079584,-6.2407756398245034e-6,-5.347142200685174e-9,0.0019485145355209999,-6.029956846976695e-6,-5.553227818359947e-9,0.001948688832848761,-5.8732962326046545e-6,-5.706255960069141e-9,0.0019488117889920867,-5.817657136586249e-6,-5.76069054929591e-9,0.001948938125527602,-5.886667676818439e-6,-5.69370500652984e-9,0.0019491274075020232,-6.0699856033129015e-6,-5.515569915679763e-9,0.0019494249289553265,-6.3227915401508744E-06,-5.270071903094241e-9,0.001949845257742566,-6.578590377092514e-6,-5.022021831291358e-9,0.0019503668701211755,-6.771379833246088e-6,-4.8356927104913765e-9,0.001950941025999169,-6.857006618888046e-6,-4.754047856449597e-9,0.0019515098360051739,-6.823912357418047e-6,-4.788264987953578e-9,0.0019520240658229982,-6.690500284410137e-6,-4.920280238133386e-9,0.0019524536244067533,-6.49382548244997e-6,-5.113816259747165e-9,0.0019527895094792508,-6.276752315075202e-6,-5.326941081183438e-9,0.0019530401509459683,-6.078332438438705e-6,-5.521497393189113e-9,0.001953225817980965,-5.928567237035448e-6,-5.668236483345585e-9,0.0019533734478342783,-5.84651286102268e-6,-5.74866469745462e-9,0.0019535127069048035,-5.840135760566559e-6,-5.755159455452236e-9,0.0019536730713173847,-5.906707798229399e-6,-5.690546687804252e-9,0.0019538812761171337,-6.033223898987462e-6,-5.567654612994196e-9,0.0019541585144023286,-6.197000707763707e-6,-5.408699430107965e-9,0.0019545171385095907,-6.367107479822374e-6,-5.243879262195881e-9,0.0019549572076320533,-6.5074833444539475e-6,-5.108346058501838e-9,0.0019554639201165612,-6.582363249082454e-6,-5.03694129358835e-9,0.001956007498430186,-6.563809875728904e-6,-5.0568720809815e-9,0.001956546986261798,-6.4398326830353245e-6,-5.179789317621606e-9,0.001957038319601614,-6.220390777973844e-6,-5.3959025305882386e-9,0.001957445211377807,-5.938406346561329e-6,-5.6729623501463044E-09,0.0019577497434098727,-5.6441961139281294e-6,-5.961701088875459e-9,0.00195795905198493,-5.3940117834603315e-6,-6.207071934832427e-9,0.001958105475933685,-5.235595818058769e-6,-6.362420055449834e-9,0.0019582395183540724,-5.194843437985116e-6,-6.402542072145623e-9,0.001958417079498149,-5.267559275761301e-6,-6.331712684108876e-9,0.0019586841391798864,-5.419208397437096e-6,-6.183867152169376e-9,0.0019590632992368684,-5.5936274617679324e-6,-6.0140407497047866e-9,0.0019595468572287758,-5.728796846682779e-6,-5.882943397267424e-9,0.001960099404208329,-5.774659859002328e-6,-5.8395474337831e-9,0.0019606692273000065,-5.706491547132605e-6,-5.908007246472056e-9,0.001961203875844111,-5.5290734820936245e-6,-6.083550911233866e-9,0.001961663710892444,-5.271294504247528e-6,-6.33775249294814e-9,0.0019620291042840325,-4.974990706173587e-6,-6.62948408349352e-9,0.0019623006544432146,-4.683271223898374e-6,-6.916401377222745e-9,0.001962494734377491,-4.432015613971804e-6,-7.163317469825513e-9,0.00196263744876942,-4.24555166449937e-6,-7.3464495352867865e-9,0.001962759151531451,-4.135625053205161e-6,-7.454405906541533e-9,0.0019628903475563684,-4.102163162853727e-6,-7.487397138171459e-9,0.001963058825873597,-4.134581772027361e-6,-7.45591629508366e-9,0.0019632873735704035,-4.2130275752858015e-6,-7.37949782948698e-9,0.001963591384460584,-4.309670509689841e-6,-7.285447272084761e-9,0.001963976034392938,-4.390698571258319e-6,-7.2069014925367394E-09,0.00196443330876546,-4.419933657794488e-6,-7.1793089036528066e-9,0.0019649399761413515,-4.364865771727716e-6,-7.23453490273262e-9,0.001965458415821613,-4.2050069352158806e-6,-7.392670556572303e-9,0.0019659423021510165,-3.940624693125234e-6,-7.653438357820787e-9,0.001966347619651084,-3.5979703831828426e-6,-7.991020087185636e-9,0.001966646410720784,-3.2268073690315724e-6,-8.35646294373238e-9,0.001966837804951861,-2.88866026076316e-6,-8.6892469084276e-9,0.0019669507350560987,-2.638942552458159e-6,-8.93489923720782e-9,0.001967036219204756,-2.509897091168396e-6,-9.061792188439865e-9,0.0019671521102095036,-2.5011703515333097e-6,-9.070385947269845e-9,0.001967346338386762,-2.5810055380569523e-6,-8.992002968155938e-9,0.0019676443316525953,-2.696486676324743e-6,-8.878723391163976e-9,0.0019680437540308916,-2.788602202893239e-6,-8.788584213578214e-9,0.00196851699192739,-2.8074134547524235e-6,-8.77069512204032e-9,0.0019690198105688102,-2.723406029950918e-6,-8.854087293070188e-9,0.001969503286514971,-2.5325606025790628e-6,-9.042705655591e-9,0.0019699255438227234,-2.2545503651888572e-6,-9.317149614451272e-9,0.0019702602048416143,-1.9254253998824907e-6,-9.64186138287465e-9,0.0019704998243126686,-1.587626778063647e-6,-9.974977396460062e-9,0.001970654436207738,-1.2805361083925496e-6,-1.0277671836369529E-08,0.001970746848452303,-1.0338220010957484e-6,-1.0520734387427998e-8,0.001970806813276138,-8.642671882979529e-7,-1.0687691080751363e-8,0.0019708657346138646,-7.754852094272468e-7,-1.0775054263680461e-8,0.001970952685885467,-7.59358064857489e-7,-1.0790873734095068e-8,0.001971091690133412,-7.980785287859418e-7,-1.075270881326718e-8,0.0019712997330186763,-8.661819417994633e-7,-1.0685635082892515e-8,0.001971584912381313,-9.325958251431366e-7,-1.0620251655417039e-8,0.001971944386893563,-9.632389319096306e-7,-1.0590148555848218e-8,0.0019723623172643737,-9.250101036695197e-7,-1.0627989281767547e-8,0.001972808830631805,-7.919702181976068e-7,-1.0759406320346234e-8,0.0019732419679683944,-5.536462457545765e-7,-1.0994779047683153e-8,0.001973614823661226,-2.2335933302557065e-7,-1.1320973812675675e-8,0.0019738884737286657,1.5799990717252462e-7,-1.1697589927724113e-8,0.0019740473224203847,5.280347963458416e-7,-1.2062959771330483e-8,0.00197410928803649,8.20358883314744e-7,-1.2351497457826083e-8,0.001974123317235958,9.877098265902934e-7,-1.251656570489879e-8,0.001974153255924493,1.0192999814429548e-6,-1.2547588496020676e-8,0.0019742556717545824,9.434428611000109e-7,-1.2472576911245205e-8,0.0019744623865517686,8.154180584666158e-7,-1.2346103517772794e-8,0.001974774135226251,6.982018680757243e-7,-1.2230299564424663e-8,0.001975164866836536,6.44800593857355e-7,-1.2177471453811616e-8,0.001975592187135106,6.871905621175031e-7,-1.221921769330186e-8,0.001976009248334955,8.327104581488337e-7,-1.2362852376014084e-8,0.0019763749925609457,1.0663971388143509e-6,-1.259366276420492e-8,0.001976661273607453,1.3571121056137057e-6,-1.2880913658228117e-8,0.0019768563928079714,1.6655158949823804e-6,-1.3185711559255818e-8,0.001976965150873674,1.9522178827619e-6,-1.3469078659361015e-8,0.0019770060231024044,2.1846215565256827e-6,-1.3698753468466588e-8,0.001977006519814771,2.3414551764659016e-6,-1.3853691582153881E-08,0.0019769979445145433,2.4146980122888094e-6,-1.3925966248255384e-8,0.0019770105929741008,2.409217344158514e-6,-1.3920387497226856e-8,0.0019770700502998715,2.340825972519958e-6,-1.3852563760087515e-8,0.0019771946962903715,2.233613597212906e-6,-1.3746268263541514e-8,0.001977394083641216,2.117137695108602e-6,-1.3630691930216664e-8,0.00197766776849491,2.02355937158754e-6,-1.353764934893884e-8,0.0019780043391657534,1.9844130263776497e-6,-1.3498405475263642e-8,0.001978380746958981,2.0264143260061553e-6,-1.353951384539365e-8,0.001978762774876461,2.1656876800633962e-6,-1.3677055583687163e-8,0.00197910834678161,2.4005955486988004e-6,-1.3909478074330424e-8,0.0019793755690996236,2.7052325640155345e-6,-1.4211108687579435e-8,0.0019795358980323765,3.0280329593492748e-6,-1.4530782563116931e-8,0.0019795888602322726,3.3008762468395384e-6,-1.4800926854883546e-8,0.001979569909580966,3.4602522751505376e-6,-1.4958607317158036e-8,0.0019795428292347273,3.4729664075210322e-6,-1.4971007396679774e-8,0.0019795766858330343,3.3517185374406653e-6,-1.485078131230214e-8,0.001979719097725177,3.150012236996182e-6,-1.4650917551003886e-8,0.0019799807430923235,2.939717703579574e-6,-1.4442508997057445e-8,0.001980337179051505,2.785210747885825e-6,-1.4289220607364234e-8,0.001980742604001265,2.726455749296866e-6,-1.423061560237119e-8,0.0019811460867675897,2.7744247605888214e-6,-1.4277633511904348e-8,0.001981503955526798,2.915383589334282e-6,-1.4416788031389436e-8,0.0019817866606374806,3.119072655949307e-6,-1.4618203584318185e-8,0.0019819810541467733,3.3472878569643014e-6,-1.4844069697144964e-8,0.0019820896686203603,3.5612914305410776e-6,-1.5055977587760283e-8,0.00198212818028609,3.7276910519524167e-6,-1.522077511487346e-8,0.0019821217200457113,3.822702343827983e-6,-1.531483119915164e-8,0.001982100526968717,3.8346574475360094e-6,-1.5326546430867445e-8,0.001982095446197697,3.7647342774013897e-6,-1.525707214555077e-8,0.0019821337647565624,3.626027788928867e-6,-1.511936833404366e-8,0.00198223586051072,3.441229396883561e-6,-1.4935887639064302e-8,0.00198241295750562,3.2394074768603723e-6,-1.4735395171384388e-8,0.001982665941468611,3.0524134698759988e-6,-1.4549442314482317e-8,0.0019829850278711707,2.9111670054398966e-6,-1.4408723058841443e-8,0.0019833501452222605,2.841809897117393e-6,-1.4339272286988301e-8,0.0019837320752173157,2.8615334931783054e-6,-1.4358293854803897e-8,0.001984094861776407,2.9738376767734945e-6,-1.4469388182609625e-8,0.001984400625925791,3.163606036205151e-6,-1.465759406565055e-8,0.001984617903763515,3.39387177161666e-6,-1.4886148324894974e-8,0.001984733239124418,3.6078493427449448e-6,-1.5098540495896356e-8,0.001984762586708769,3.740319866084089e-6,-1.522990885918146e-8,0.001984755051949164,3.739151728899739e-6,-1.5228487094580237e-8,0.0019847812506757346,3.589373742862749e-6,-1.507949371776934e-8,0.0019849070018280613,3.324884794977739e-6,-1.481665653780441e-8,0.0019851657075547475,3.017077739740492e-6,-1.4510837813089766e-8,0.001985546337819205,2.7455641756043497e-6,-1.4240999293311826e-8,0.0019860027126962026,2.5689052542741243e-6,-1.4065234505030063e-8,0.001986474911058454,2.5102785475177926e-6,-1.4006586884914449e-8,0.001986909190146146,2.5597820777408202e-6,-1.4055310223533645e-8,0.001987269141598994,2.685729541695863e-6,-1.4180024373601416e-8,0.001987538415975901,2.8470244196991636e-6,-1.4339955147058143e-8,0.0019877184535379826,3.0026745725009918e-6,-1.4494369758932575e-8,0.001987824315689395,3.1178169485181043e-6,-1.4608579499453113e-8,0.0019878803285720108,3.1671431670578377e-6,-1.4657380747630862e-8,0.001987916017903525,3.1367378731829e-6,-1.4626916752757822e-8,0.00198796225735607,3.0248075252962984e-6,-1.4515412078652403e-8,0.001988047562103157,2.8413753222055076e-6,-1.4332850735856531e-8,0.0019881946131477435,2.60687216740141e-6,-1.4099542829987458e-8,0.001988417298411971,2.349527873938127e-6,-1.3843513258288562e-8,0.0019887187102340417,2.1016769841030624e-6,-1.3596844711551368e-8,0.001989090425727029,1.895388778983732e-6,-1.3391377619170956e-8,0.001989513160461744,1.7578895979745178e-6,-1.3254203612054567e-8,0.001989958770446367,1.7071788559904026e-6,-1.3203316404532476e-8,0.001990393534070427,1.7481911434179824e-6,-1.3243755974189393e-8,0.0019907827350952195,1.8697874359525122e-6,-1.336454230925692e-8,0.00199109681028482,2.0431157285996407e-6,-1.3536978415285554e-8,0.001991319151058384,2.222726763531207e-6,-1.371574429721612e-8,0.0019914544946981836,2.3526243150694117e-6,-1.3844968523515149e-8,0.0019915347809361574,2.379086977407752e-6,-1.3871077631016254e-8,0.001991617224389839,2.269346242030513e-6,-1.376144811926663e-8,0.0019917698902892863,2.0294384279911193e-6,-1.3522157951942242e-8,0.0019920466456429435,1.7095202837346074e-6,-1.3203206351826863e-8,0.001992463423863107,1.3885001624897012e-6,-1.288317749571206e-8,0.0019929908638321907,1.143480512993817e-6,-1.2638853847306288e-8,0.0019935682104733686,1.0214708448982725e-6,-1.2517091776224162e-8,0.0019941285130815195,1.0283869976145581e-6,-1.2523846927649901e-8,0.0019946200002937324,1.1365035316745898e-6,-1.2631538348227922e-8,0.001995015574720192,1.300685938679259e-6,-1.2795181679410482e-8,0.0019953118522825736,1.4734595686959486e-6,-1.2967407715671091e-8,0.0019955231121392253,1.6145721408287418e-6,-1.3108023269665573e-8,0.001995674485554681,1.6953207844439172e-6,-1.3188361405392658e-8,0.001995796372307964,1.6996250991069645e-6,-1.3192379686625797e-8,0.0019959203169879858,1.6236696505985474e-6,-1.3116312565503816e-8,0.0019960757921594096,1.475055708754886e-6,-1.2967807444551166e-8,0.0019962873383381975,1.271613814117125e-6,-1.2764702800757431e-8,0.001996571813660661,1.039617664310189e-6,-1.253321173415832e-8,0.001996935876688311,8.10987734279826e-7,-1.2305124592895642e-8,0.0019973742307001037,6.19237649378676e-7,-1.2113796509748371e-8,0.0019978693382533895,4.943937406260044e-7,-1.198913399233764e-8,0.0019983931254425164,4.575767847518032e-7,-1.1952232495962723e-8,0.0019989108215040154,5.162092500765573e-7,-1.2010593106379118e-8,0.0019993866344011147,6.609218430927506e-7,-1.215498240158599e-8,0.001999790531775251,8.650472468204294e-7,-1.2358850045151053e-8,0.0020001051872744658,1.0872195388065961e-6,-1.258086799786539e-8,0.0020003320300538583,1.2774384887276872e-6,-1.2770987731393865e-8,0.0020004948833237455,1.386820963278251e-6,-1.2880238021882123e-8,0.0020006389899060112,1.380409164658492e-6,-1.2873596607745973e-8,0.0020008230599442827,1.250445294729628e-6,-1.2743295658742569e-8,0.0020011035292148414,1.0248522465183068e-6,-1.2517287786395435e-8,0.0020015145004623476,7.642707366236366e-7,-1.2256256246504428e-8,0.002002052224806011,5.444286659134359e-7,-1.203598958625036e-8,0.0020026739455431216,4.2948544136936147e-7,-1.1920745495741174e-8,0.002003313579512777,4.496948714502562e-7,-1.1940890619262743e-8,0.0020039058326337656,5.94885512572639e-7,-1.208630936784008e-8,0.0020044058510690797,8.245709877731227e-7,-1.2316460457905977e-8,0.002004796841439746,1.0859096843776425e-6,-1.2578353220820108e-8,0.0020050868112686674,1.3296101468781744e-6,-1.2822521486441082e-8,0.0020053001577274294,1.5190539612688328e-6,-1.3012215262669332e-8,0.002005469139021302,1.6331027930982382e-6,-1.3126245137314179e-8,0.0020056275325741548,1.6652065850658668e-6,-1.3158091335992063e-8,0.0020058066106900104,1.6211993428942383e-6,-1.3113673482230696e-8,0.0020060325903481888,1.5170686408574125e-6,-1.3009079439298547e-8,0.002006324650222416,1.3769637497429265e-6,-1.2868534813545612e-8,0.0020066929754689877,1.2310800018681066e-6,-1.2722269046986007e-8,0.002007136798951896,1.1127780991151567e-6,-1.2603647647411476e-8,0.0020076429784578894,1.054378781853201e-6,-1.254500526328362e-8,0.002008186099861188,1.081598763449451e-6,-1.2572118807769247e-8,0.0020087311297168646,1.2074288608481698e-6,-1.2698088673752461e-8,0.002009239103287181,1.4270773152031296e-6,-1.2918234760844035e-8,0.0020096752789058284,1.716007875070945e-6,-1.3208055118895744e-8,0.0020100179652990918,2.0326550064858777e-6,-1.352587734554098e-8,0.0020102654993804938,2.3260539621831587e-6,-1.3820486693134687e-8,0.0020104390771972405,2.547030253336762e-6,-1.4042386690680413e-8,0.002010580106295075,2.6604804750482006e-6,-1.4156191902665433e-8,0.0020107419502173964,2.6557832329077294e-6,-1.4151139319925016e-8,0.0020109771879805558,2.5523069324261464e-6,-1.4046647718123685e-8,0.0020113229426591533,2.397375789826293e-6,-1.3890280276741745e-8,0.0020117884211216064,2.2554114694326285e-6,-1.3746841070905745e-8,0.0020123497341117697,2.1898980519676447e-6,-1.3680257875013628e-8,0.002012955651515441,2.2438213886840194e-6,-1.3733900181722728e-8,0.0020135433728180985,2.4266447610087438e-6,-1.39174182558369e-8,0.0020140579317852875,2.71366437476233e-6,-1.4206014604787913e-8,0.0020144668228012324,3.057204948402956e-6,-1.4551671002974376e-8,0.0020147647475891694,3.403199418756304e-6,-1.4899863316082618e-8,0.0020149692079483423,3.7055522989431925e-6,-1.520408419186706e-8,0.00201511150064555,3.9340846123691215e-6,-1.5433892567141782e-8,0.0020152277251075717,4.076173637410506e-6,-1.5576577887703656e-8,0.002015352239871468,4.134536644454852e-6,-1.563490853663456e-8,0.0020155138461719147,4.123692670047893e-6,-1.5623536213635403e-8,0.002015733840614426,4.0666243269108735e-6,-1.55656072328393e-8,0.0020160248674950276,3.992054942875605e-6,-1.549001455038565e-8,0.002016389829459018,3.93198510839712e-6,-1.542893704410032e-8,0.0020168206820040395,3.918765993757011e-6,-1.541493242521958e-8,0.0020172975756185623,3.980985777701276e-6,-1.5476833726911856E-08,0.0020177894153615887,4.137875398081949e-6,-1.5634127210906082e-8,0.002018257233673766,4.392939175307108e-6,-1.589050240627824e-8,0.0020186613266694954,4.728908346737077e-6,-1.6228694079735292e-8,0.0020189715206215524,5.107091194937329e-6,-1.660975065177038e-8,0.0020191776486713324,5.473615092617835e-6,-1.6979292753435012e-8,0.002019295779758033,5.772429950864491e-6,-1.7280651483171656e-8,0.002019366518176988,5.961349214838775e-6,-1.7471108259171236e-8,0.0020194449006417144,6.025194125173232e-6,-1.7535205282025255e-8,0.0020195851788385455,5.980999551576999e-6,-1.7490022440756466e-8,0.0020198257279237858,5.873603143711555e-6,-1.7380744515888384e-8,0.0020201787279912464,5.763467291729197e-6,-1.7268403150332105e-8,0.002020627231636164,5.710627551405569e-6,-1.7213706810198902e-8,0.002021130054639501,5.7592346508056935e-6,-1.7261429057047976e-8,0.002021632985760314,5.926817997082376e-6,-1.7429501306651574e-8,0.0020220830928120654,6.20118699778434e-6,-1.7705783145695567e-8,0.0020224418380563767,6.54565640069781e-6,-1.8053264624984565e-8,0.002022693062944097,6.910491614078083e-6,-1.842162169656846e-8,0.0020228439203432147,7.246330768272015e-6,-1.876083414523109e-8,0.00202291967499455,7.515105216752511e-6,-1.9032294027402762e-8,0.002022955371584404,7.695808702277565e-6,-1.9214681031198905e-8,0.0020229876289183193,7.785067752112486e-6,-1.9304540519772036e-8,0.002023048591573068,7.794246700981407e-6,-1.931333154928886e-8,0.0020231624980154585,7.745203409912733e-6,-1.926311028183914e-8,0.0020233442466032186,7.666212202219833e-6,-1.918240528759956e-8,0.0020235989734061375,7.588624354679677e-6,-1.9102866270263047e-8,0.002023921859131006,7.544034825291021e-6,-1.9056442936228402e-8,0.0020242978850773183,7.561308638331777e-6,-1.907241483206435e-8,0.0020247018586647472,7.662755338235264e-6,-1.9173526603769192e-8,0.0020250996748987574,7.859045107714878e-6,-1.9370801266084847e-8,0.0020254522736660083,8.143408211325172e-6,-1.9657586738974178e-8,0.0020257235021321623,8.487284167289417e-6,-2.0005064388235096e-8,0.0020258914008579325,8.841089839559924e-6,-2.0362983469746076e-8,0.0020259593522022504,9.143502782538063e-6,-2.0669092452411597e-8,0.002025960886878649,9.339097586877438e-6,-2.0867079499950275e-8,0.0020259529258870486,9.398254944606137e-6,-2.0926796085751366e-8,0.0020259980842913805,9.329515946722925e-6,-2.085676872498728e-8,0.0020261436498098338,9.177436067364245e-6,-2.0702003689784143e-8,0.002026406976788043,9.007145260904893e-6,-2.0528373390696197e-8,0.0020267726311981303,8.883574211806648e-6,-2.0401649057662443e-8,0.002027200045442295,8.85396367750792e-6,-2.0369837232274553e-8,0.00202763668051562,8.938366466169523e-6,-2.0453528387901555e-8,0.002028031669042613,9.128606584898225e-6,-2.0644735364591285e-8,0.0020283466335991557,9.39376249959402e-6,-2.0912327645621907e-8,0.00202856210099846,9.689503075361093e-6,-2.121142268331872e-8,0.002028679138809268,9.968698912730516e-6,-2.1494151041399055e-8,0.0020287166795685033,1.0191047732068404e-5,-2.1719481725996414e-8,0.0020287057358542504,1.0329897581158466e-5,-2.186021727137697e-8,0.0020286822638829623,1.0375287950705e-5,-2.1906123600102078e-8,0.0020286804677956084,1.0333353870444897e-5,-2.186332802988044e-8,0.0020287278066525257,1.022312602899354e-5,-2.175105158087606e-8,0.0020288421647846723,1.0072112218170743e-5,-2.1597111262225863e-8,0.0020290308875681577,9.911875842701016e-6,-2.143344844153332e-8,0.0020292909665944156,9.774243576700235e-6,-2.129232494824514e-8,0.0020296097239808366,9.688113323346603e-6,-2.1203133387480477e-8,0.0020299656877050217,9.67644684934271e-6,-2.11893658424898e-8,0.0020303297882378582,9.752905982662366e-6,-2.1265165055571597e-8,0.0020306676073327287,9.917766980710009e-6,-2.1431087980682735e-8,0.002030943934628873,1.0153584998504719e-5,-2.1669593622508353e-8,0.0020311306708723493,1.0422590466425067e-5,-2.1942323425636325e-8,0.002031217579951732,1.0669289798588603e-5,-2.219275019954811e-8,0.002031222335730858,1.0831796516238949e-5,-2.235778014634001e-8,0.002031193048301995,1.0861890930176747e-5,-2.2388241959551486e-8,0.00203119703859634,1.0746492481003186e-5,-2.2270735146629827e-8,0.002031297195154339,1.0517768776177442e-5,-2.2037844471414716e-8,0.0020315273094421984,1.0243291108028e-5,-2.1758092239078608e-8,0.0020318802493412753,1.0000530434740792e-5,-2.1510081000851584e-8,0.002032314137298937,9.850022664826762e-6,-2.1355340836590286e-8,0.002032770207259545,9.81982278786599e-6,-2.132258299426645e-8,0.0020331917199350323,9.904280503784482e-6,-2.14063888568104e-8,0.002033536949342053,1.0072489993620747e-5,-2.157566092331201e-8,0.0020337847861032054,1.0280151984724976e-5,-2.178555756437125e-8,0.002033934644404204,1.0480633734434917e-5,-2.1988684509594312e-8,0.002034002956023895,1.0633476288885205e-5,-2.2143773497299168e-8,0.0020340179562521273,1.0710065550269308e-5,-2.222152752762457e-8,0.002034013813275749,1.0696609639052564e-5,-2.2207730651406188e-8,0.002034024860105363,1.0594604521297306e-5,-2.2103765848150748e-8,0.002034080587443095,1.0419122419825089e-5,-2.19248717814829e-8,0.0020342019278727854,1.0195455518673118e-5,-2.169670062200928e-8,0.0020343991620295483,9.954802844166271e-6,-2.145091239995425e-8,0.0020346714321390342,9.729785129053017e-6,-2.122063084652677e-8,0.0020350074824118905,9.550386709694598e-6,-2.103636451097717e-8,0.002035387185509016,9.440493583899565e-6,-2.0922533216016104e-8,0.0020357836037984364,9.414912608424384e-6,-2.089444107511516e-8,0.0020361655489376162,9.476655420791237e-6,-2.0955452598258494e-8,0.002036501001353076,9.614310232276557e-6,-2.1094206564680248e-8,0.002036762210872142,9.79994037620005e-6,-2.1282363869390327e-8,0.0020369330481708123,9.989184837192771e-6,-2.1474658477092256e-8,0.002037017771296381,1.012628359366276e-5,-2.1614061269663444e-8,0.002037047915437464,1.015658110540848e-5,-2.164463677168314e-8,0.0020370813026867737,1.0046056108125668e-5,-2.153154985964805e-8,0.0020371875508600258,9.800650799576031e-6,-2.1280773292665346e-8,0.002037421936656467,9.472336381754918e-6,-2.094520101904596e-8,0.0020378005857027153,9.143072453333508e-6,-2.0608270685343048e-8,0.0020382928899801513,8.892876275813154e-6,-2.035149508235166e-8,0.0020388358398022157,8.770499811406708e-6,-2.0224669132370346e-8,0.002039359770557812,8.781941663669052e-6,-2.0234157130035133e-8,0.0020398103504522254,8.897729739466089e-6,-2.0350211586612295e-8,0.0020401588643933475,9.069382952218172e-6,-2.0523629149456965e-8,0.0020404019625274035,9.245293559122839e-6,-2.0701866584475123e-8,0.002040555827693921,9.381504609670853e-6,-2.0840025781472896e-8,0.0020406489259659406,9.447228151930216e-6,-2.0906536788607898e-8,0.0020407154331214734,9.426696770852405e-6,-2.088512838607746e-8,0.00204078985578392,9.318873354513713e-6,-2.077459998128169e-8,0.00204090271395194,9.135845367544504e-6,-2.0587206452044835e-8,0.0020410771407216085,8.900239108317796e-6,-2.034599700431967e-8,0.002041326419699712,8.641807325844239e-6,-2.0081292128129632e-8,0.0020416526435947345,8.393337339943669e-6,-1.982648942593215e-8,0.002042046703171445,8.186237577472187e-6,-1.9613586261310882e-8,0.0020424895896427346,8.046339142518472e-6,-1.9468954219893878e-8,0.0020429547843234747,7.990305000968632e-6,-1.940972395069631e-8,0.0020434115251253306,8.022843551834938e-6,-1.9440936885743926e-8,0.002043828782565443,8.134892448156656e-6,-1.9553616311880043e-8,0.0020441798602190554,8.302917025788585e-6,-1.972393223071845e-8,0.0020444477519546617,8.4896969525292e-6,-1.9913901817449882e-8,0.0020446311903293338,8.647706547103258e-6,-2.0074815114312748e-8,0.0020447501973034107,8.726723226422148e-6,-2.0155077328217368e-8,0.002044848244940901,8.686627904246379e-6,-2.011341515541943e-8,0.0020449867383772256,8.513737749746249e-6,-1.9935671842505055e-8,0.002045228541166259,8.234144633017872e-6,-1.964846070320371e-8,0.0020456134638839763,7.913572361465218e-6,-1.931898185881672e-8,0.0020461377861319533,7.63729312921591e-6,-1.9034476270744172e-8,0.0020467521585061633,7.477202828544634e-6,-1.8868592712503943e-8,0.002047381272856939,7.464688941483806e-6,-1.8853644549237028e-8,0.0020479532062943314,7.58431837206364e-6,-1.8974080315531745e-8,0.0020484215587382487,7.78774400789283e-6,-1.918060677428675e-8,0.0020487722662357426,8.015405362121847e-6,-1.941233147259879e-8,0.002049018198077936,8.214197838192044e-6,-1.9614843383185996e-8,0.0020491889216315115,8.346735295295853e-6,-1.9749735808637718e-8,0.0020493210512069144,8.393632060507522e-6,-1.979700451228811e-8,0.0020494512449664246,8.351957607960816e-6,-1.9753525015406534e-8,0.0020496117250101715,8.23232744734854e-6,-1.963010652990153e-8,0.002049827426776408,8.055769435622714e-6,-1.944827439536342e-8,0.002050114053526486,7.850558869214728e-6,-1.9236989441846953e-8,0.0020504767490431433,7.648847136675355e-6,-1.9029157282885984e-8,0.0020509094756088818,7.482854532348159e-6,-1.8857725613841873e-8,0.002051395453334524,7.380623768682452e-6,-1.8751377321085998e-8,0.0020519090052662243,7.361760387571575e-6,-1.8730230620980626e-8,0.0020524188593675297,7.433818308990292e-6,-1.8802173480598776e-8,0.0020528926844391848,7.589950602549962e-6,-1.8960428834936324e-8,0.0020533024421489844,7.808390524123514e-6,-1.9182928498524213e-8,0.0020536299340462158,8.054192913403938e-6,-1.9433978306497595e-8,0.0020538718361486044,8.283434195619361e-6,-1.9668482974938482e-8,0.0020540434289632683,8.45004521906672e-6,-1.9838956797592828e-8,0.0020541797514216247,8.515402796906978e-6,-1.99054534057615e-8,0.0020543322054149753,8.459930706160225e-6,-1.984759651675978e-8,0.0020545585952090927,8.293944827313858e-6,-1.9675807879402267e-8,0.0020549063810787,8.062431097372e-6,-1.9436246264897823e-8,0.0020553934153247633,7.837497117823304e-6,-1.920304947832446e-8,0.002055995700465939,7.696451661454231e-6,-1.9055809090821722e-8,0.002056651811353018,7.693154521324639e-6,-1.9050112336143213e-8,0.0020572846695030584,7.837818600247798e-6,-1.919671296351236e-8,0.002057829365555983,8.096658859821898e-6,-1.946106441052887e-8,0.002058252145844519,8.409493816274429e-6,-1.978134730901258e-8,0.0020585536030746266,8.712990432294358e-6,-2.0092375696100318e-8,0.002058759808669095,8.957877739096902e-6,-2.0343349339844396e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json new file mode 100644 index 000000000..4dcccb37b --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":17000,"numberOfSamples":1000,"samples":[0.0020589095356776037,9.116105504093818e-6,-2.0505272164235435e-8,0.002059043510293161,9.180255067418492e-6,-2.0570390059257767e-8,0.0020591976431414568,9.159302745262173e-6,-2.054785882824188e-8,0.002059399625909375,9.073759899582225e-6,-2.045874721325323e-8,0.0020596674746746844,8.95148439515232e-6,-2.033170765436402e-8,0.00206000888513569,8.824207938457376e-6,-2.019937465729761e-8,0.002060420904195782,8.724308617167852e-6,-2.0095032184184587e-8,0.0020608899779143205,8.68132520947309e-6,-2.0049049012491025e-8,0.0020613928365786132,8.717972919315283e-6,-2.008482719556681e-8,0.0020618988348358,8.845955809078727e-6,-2.021453482958727e-8,0.002062374125258358,9.062441716260134e-6,-2.0435474508193457e-8,0.0020627874895708226,9.348364762479418e-6,-2.072826871336509e-8,0.0020631169945883126,9.669654112154566e-6,-2.1058015950605946e-8,0.0020633560604633263,9.98198746864013e-6,-2.137908652587735e-8,0.002063517288428266,1.023877017749716e-5,-2.164330411583651e-8,0.002063632645942536,1.0401139220424818e-5,-2.1810299545772995e-8,0.0020637491502467223,1.0448183572471843e-5,-2.185815206205818e-8,0.0020639198525462597,1.0385066085844465e-5,-2.1791885352537092e-8,0.002064190922547863,1.0246206042140799e-5,-2.1646843352671344e-8,0.002064587291919049,1.0090636415679369e-5,-2.1483949591921145e-8,0.0020651014652658243,9.988078798241432e-6,-2.13753442005915e-8,0.002065691367589172,9.998026570269695e-6,-2.1382754626188622e-8,0.002066291012197917,1.0149230388591655e-5,-2.153622147579785e-8,0.002066831501387849,1.0429452683376921e-5,-2.182338975756979e-8,0.002067263169333099,1.0791237145000513e-5,-2.2195367611649683e-8,0.002067568557615017,1.1170401662074308e-5,-2.2585814103541868e-8,0.0020677618994642912,1.1507219742502304e-5,-2.2932879418767003e-8,0.0020678786593962845,1.1760992660056131e-5,-2.319433420100162e-8,0.00206796228678175,1.1914801500387303e-5,-2.3352529680849556e-8,0.0020680536670884195,1.1972789302221374e-5,-2.3411612372762594e-8,0.002068185083895209,1.1954165594086708e-5,-2.339133460421787e-8,0.0020683778972125345,1.1887104070253944e-5,-2.3320744180844544e-8,0.002068642307553408,1.180390121082168e-5,-2.3233173740066774e-8,0.002068977856263579,1.1737393814191125e-5,-2.3162537647244684e-8,0.002069373999389383,1.1717978706675388e-5,-2.3140267827765654e-8,0.0020698107873335274,1.1770514429890422e-5,-2.3192140613020073e-8,0.0020702602014525747,1.1910715973072524e-5,-2.3334573248691355e-8,0.002070688939508567,1.2141252692424613e-5,-2.3570578997251697e-8,0.0020710632916822844,1.2448527390387745e-5,-2.3886375187523575e-8,0.002071356066541742,1.2801803268012288e-5,-2.4250382510760558e-8,0.0020715543319876706,1.3156451701310057e-5,-2.4616491549786515e-8,0.00207166551766087,1.3462116971780244e-5,-2.493246716960177e-8,0.002071719050649512,1.3674624989544023e-5,-2.5152297788431047e-8,0.0020717617377544535,1.3768431742533288e-5,-2.524915847137308e-8,0.0020718472574079074,1.374550081599251e-5,-2.5224700784713937e-8,0.0020720223622184525,1.363727582508806e-5,-2.5111195478472052e-8,0.0020723137031515636,1.3498471162329926e-5,-2.496519243244624e-8,0.002072719191338335,1.339381780152275e-5,-2.485385332221292e-8,0.002073206795757431,1.338096643139214e-5,-2.483723759380846e-8,0.0020737219362692,1.3494245133198445e-5,-2.4951381108780162e-8,0.00207420211020392,1.373455339359368e-5,-2.5197661804572466e-8,0.0020745944143773383,1.4069430089365293e-5,-2.554271199173207e-8,0.002074869746023746,1.4443723774723879e-5,-2.5929405831806994e-8,0.0020750285128816304,1.479667972622433e-5,-2.6294607590510123e-8,0.0020750966176363173,1.5078544268788864e-5,-2.6586483364644268e-8,0.0020751148669499956,1.5260889492796408e-5,-2.677529701011583e-8,0.0020751270004247535,1.5338783722705668e-5,-2.6855711891848633e-8,0.0020751704833224575,1.5326746513909972e-5,-2.684261106263222e-8,0.0020752715762822763,1.5251984116094389e-5,-2.6764080409271047e-8,0.002075444009124103,1.5147762629496005e-5,-2.6654533703698157e-8,0.002075689729548116,1.504827746606285e-5,-2.6549398220846943e-8,0.002076000366210549,1.4985082629739757e-5,-2.6481430881895264e-8,0.002076358657231711,1.498441301720375e-5,-2.6477967033587838e-8,0.0020767397992757677,1.5064587977735741e-5,-2.6558240543651232e-8,0.002077113259954405,1.5233004156103975e-5,-2.6730240753699176e-8,0.0020774459186594374,1.548284453443912e-5,-2.6987226620384064e-8,0.002077707337417931,1.5790500049088474e-5,-2.7304945193864276e-8,0.002077877261826839,1.6115682164498162e-5,-2.764165309505029e-8,0.0020779538822941765,1.6406603632449e-5,-2.7943458192743133e-8,0.0020779594398716464,1.6611353072832964e-5,-2.8156170195329946e-8,0.0020779390055978278,1.6693382219093287e-5,-2.824146792653341e-8,0.0020779502913158923,1.6645409426593984e-5,-2.8191416586278918e-8,0.002078046844161103,1.6494938438233428e-5,-2.803425405045996e-8,0.0020782610782756087,1.6297779276038386e-5,-2.782772424649056e-8,0.0020785941150732565,1.612175588363035e-5,-2.7642241561896423e-8,0.0020790159587568842,1.6027141518751153e-5,-2.754063775278662e-8,0.0020794748756735038,1.6050743503202965e-5,-2.756160492638588e-8,0.0020799118940896845,1.619791239208086e-5,-2.7711253577368164e-8,0.0020802757626315633,1.6443513592555717e-5,-2.7963924844698012e-8,0.0020805345246273253,1.674043522617959e-5,-2.8270877063799093e-8,0.002080681226938013,1.7032634096537527e-5,-2.857380300224129e-8,0.002080732951995497,1.7268943244941685e-5,-2.881925151534997e-8,0.002080724194408864,1.7413982316484317e-5,-2.8970092565580946e-8,0.0020806971435383278,1.745367834708195e-5,-2.901136620869484e-8,0.0020806920260737966,1.7394912621893336e-5,-2.8949975367327408e-8,0.002080739988704213,1.72607815502705e-5,-2.8809768850635676e-8,0.002080859515267317,1.70838985357426e-5,-2.8624560861473263e-8,0.0020810559636607064,1.6899885539921436e-5,-2.8431349761988563e-8,0.0020813230557203376,1.6742274751481572e-5,-2.8265022453786016e-8,0.0020816451171855417,1.6639033795220282e-5,-2.8154767386943654e-8,0.0020819993189068113,1.6610203007369465e-5,-2.812164312243963e-8,0.0020823577851628115,1.6665911699555345e-5,-2.817650914736122e-8,0.0020826899633292987,1.680426930790959e-5,-2.8317770861029884e-8,0.002082966018551884,1.7009150846059025e-5,-2.852896394235378e-8,0.002083162073066397,1.7248756752608075e-5,-2.8777135556946513e-8,0.0020832674579102563,1.7476932878513038e-5,-2.9014151463292816e-8,0.0020832924694833593,1.7639846001218737e-5,-2.9183675584427234e-8,0.0020832727739094805,1.7689422424584678e-5,-2.9235274256026354e-8,0.0020832653064138955,1.7601030960855478e-5,-2.9142946193151746e-8,0.0020833330245630757,1.7387646058308056e-5,-2.8919920603682593e-8,0.002083522753935488,1.7100955802243916e-5,-2.8619808329920083e-8,0.0020838468179513333,1.6815710705222776e-5,-2.8320330725747508e-8,0.002084278439419095,1.6604039049236554e-5,-2.8096659219011013e-8,0.0020847625566020353,1.6512511531122853e-5,-2.799759622144117e-8,0.002085235023267062,1.6551414097566436e-5,-2.8034351982823543e-8,0.0020856408987005555,1.6697366798988196e-5,-2.8183104552679034e-8,0.0020859461245631033,1.690450794263447e-5,-2.8396456266918066e-8,0.0020861415082864985,1.7118421130651345e-5,-2.8617819915088376e-8,0.0020862405867537945,1.7288696492304295e-5,-2.8794501922373435e-8,0.0020862736330299575,1.737809826474195e-5,-2.8887350772104285e-8,0.002086279804006059,1.7367702998098975e-5,-2.8876251011356654e-8,0.0020862990421835854,1.7258011428210435e-5,-2.8761400589556528e-8,0.002086365115922038,1.7066487746353264e-5,-2.8560802190087286e-8,0.0020865008408489875,1.682256943694604e-5,-2.8305053907286174e-8,0.002086715919263949,1.656156014476701e-5,-2.8030941270095572e-8,0.0020870071990390262,1.6318714925791584e-5,-2.7775237638634485e-8,0.0020873606761909773,1.612444436636325e-5,-2.7569706696292268e-8,0.0020877543487093165,1.6001012803300085e-5,-2.7437694306513178e-8,0.0020881612220372825,1.596050578626689e-5,-2.7392040420271822e-8,0.002088552230288847,1.6003549082607828e-5,-2.7433729548710437e-8,0.0020888992435952967,1.611837191802468e-5,-2.7550832366391624e-8,0.0020891786471092483,1.6280160651193357e-5,-2.7717702617435652e-8,0.0020893761169842166,1.6451350603092855e-5,-2.7895164399045403e-8,0.002089492678959948,1.6584503687808136e-5,-2.803347849401429e-8,0.0020895506186168747,1.6629975070205594e-5,-2.8080421596796448e-8,0.0020895956639829702,1.654957839540818e-5,-2.799570583593579e-8,0.002089690395538273,1.6333804471878623e-5,-2.7769090685971695e-8,0.002089896033722322,1.6014373257708863e-5,-2.7433529126734662e-8,0.0020902475806469254,1.5661140369289124e-5,-2.7061908434893643e-8,0.002090735796633609,1.5359270098771867e-5,-2.67432120407e-8,0.00209130859780546,1.5176778132377433e-5,-2.6548672939580005e-8,0.002091891842946931,1.5140754055244766e-5,-2.6506954770801897e-8,0.0020924165245282877,1.5233761825979138e-5,-2.660030176659009e-8,0.002092838108888907,1.5407435049015967e-5,-2.6778581186473033e-8,0.0020931426145603437,1.5602073463539797e-5,-2.697961713028947e-8,0.002093342524197185,1.576303163752042e-5,-2.7146256028244872e-8,0.0020934681224012187,1.5850536534203465e-5,-2.7236664035016808e-8,0.002093558330924372,1.584356238962605e-5,-2.7228488040135843e-8,0.002093652929189025,1.5739702587511593e-5,-2.711885649216876e-8,0.002093786585558144,1.5552692842214613e-5,-2.6921891528832596e-8,0.002093984610700063,1.530847635566744e-5,-2.6664625730728237e-8,0.002094260408522702,1.5040327883243397e-5,-2.6381866829385993e-8,0.0020946146605398033,1.4783590396206654e-5,-2.6110629573656682e-8,0.0020950361908124754,1.4570612940870071e-5,-2.5884801421741135e-8,0.002095504287982403,1.4426464136665532e-5,-2.573066979561237e-8,0.0020959920098880948,1.436589162782448e-5,-2.566378974830331e-8,0.0020964698904481064,1.4391654082877689e-5,-2.568727581986414e-8,0.002096909672107035,1.4494027260271335e-5,-2.5791262682142066e-8,0.002097287955238897,1.4651254484391914e-5,-2.595327902709219e-8,0.0020975898588619776,1.483086589384205e-5,-2.6139490483611765e-8,0.0020978129239909112,1.4992194433574303e-5,-2.6307227096703933e-8,0.002097971126731232,1.5091109530391926e-5,-2.6409931481351222e-8,0.002098097703998993,1.5088284225384236e-5,-2.6405927211233465e-8,0.002098243998954342,1.4961356647547054e-5,-2.6271336291410024e-8,0.002098470643735973,1.4718558663920096e-5,-2.601451060716538e-8,0.002098829142769062,1.4406847413029446e-5,-2.568461021728266e-8,0.002099338584112944,1.4104891981013634e-5,-2.5364227738068856e-8,0.002099970577078888,1.389718581053549e-5,-2.51422113367583e-8,0.0021006554024350413,1.3839945599057747e-5,-2.5077873022135188e-8,0.0021013089162565824,1.3939075366767634e-5,-2.5177804466452004e-8,0.0021018642410454017,1.4152966541286029e-5,-2.5398697748388907e-8,0.002102290544234685,1.4414719463911722e-5,-2.5670555129297722e-8,0.002102593458372229,1.4657717276490355e-5,-2.5923475251490083e-8,0.002102803823419274,1.4832523419603329e-5,-2.610539494337901e-8,0.002102963997051854,1.4912874042482475e-5,-2.6188440763515092e-8,0.00210311701985688,1.489429901720448e-5,-2.6167581509441245e-8,0.00210329981316489,1.4789514144286761e-5,-2.605589711490424e-8,0.0021035395604685125,1.4623216960515582e-5,-2.5879181897882027e-8,0.002103852012857229,1.4427256816148642e-5,-2.5670874573032203e-8,0.0021042409306866908,1.4236166858646234e-5,-2.546731313778813e-8,0.002104698454320543,1.4082882456060734e-5,-2.53031751996881e-8,0.0021052064752133293,1.3994654154339699e-5,-2.5207158431920774e-8,0.0021057391315831625,1.3989407920046565e-5,-2.519818244598461e-8,0.002106266387320575,1.4073050130678136e-5,-2.5282607415599342e-8,0.002106758334830071,1.423820083636465e-5,-2.5452924691916057e-8,0.0021071897012097697,1.4464569256647e-5,-2.568810271807864e-8,0.0021075440763852053,1.4720984983073159e-5,-2.5955605114652786e-8,0.002107817455023985,1.4968991587208612e-5,-2.6215033812032676e-8,0.0021080207898770947,1.5167881763610569e-5,-2.6423345985019315e-8,0.0021081811782254606,1.52812712911579e-5,-2.6541802838830476e-8,0.002108340721814446,1.5285367127017497e-5,-2.6544815228638046e-8,0.002108551393130802,1.5178224387244792e-5,-2.6429882679400344e-8,0.0021088642657054028,1.4987405902763008e-5,-2.6225817522741596e-8,0.0021093131823441873,1.477109413125047e-5,-2.5993980396136906e-8,0.0021098973634679687,1.4606796678395606e-5,-2.5816350529623914e-8,0.0021105729078048107,1.4566334520348138e-5,-2.5769076832392603e-8,0.0021112628777701157,1.4686483996552583e-5,-2.589140375989459e-8,0.002111884963727069,1.49524858304974e-5,-2.616814292368397e-8,0.0021123820416213326,1.530564027223351e-5,-2.653758083888853e-8,0.002112738443062604,1.566943862865359e-5,-2.6919021383359056e-8,0.0021129763380782042,1.597734406587063e-5,-2.7242128079128386e-8,0.002113139906608551,1.6188913189144726e-5,-2.7463982116337144e-8,0.0021132785147635735,1.6292255587917617e-5,-2.7571731956963736e-8,0.002113435244892276,1.6298231436790853e-5,-2.7576542617677282e-8,0.002113641467647694,1.623231108640538e-5,-2.750507948119659e-8,0.0021139155020888497,1.612742596429646e-5,-2.739200662875825e-8,0.002114263195353226,1.601868102419684e-5,-2.7274398004963558e-8,0.002114679097938746,1.5939462619916927e-5,-2.7187584649230205e-8,0.002115147857818045,1.591820498712063e-5,-2.7161697731839154e-8,0.0021156460082405507,1.5975354031712748e-5,-2.7218453269601503e-8,0.0021161445333496127,1.6120489838517026e-5,-2.736813658476198e-8,0.002116612541248858,1.6350066999505276e-5,-2.7607239032229045e-8,0.002117021983644663,1.6646569377117553e-5,-2.791754490148783e-8,0.002117352837098394,1.697979911393296e-5,-2.826741083990463e-8,0.0021175978015787107,1.731065634053247e-5,-2.8615637817191073e-8,0.00211776543378165,1.759725263509948e-5,-2.8917829165943654e-8,0.002117880769420787,1.7802584133189674e-5,-2.9134478291953385e-8,0.002117982886203447,1.7902584529889876e-5,-2.9239569317390042e-8,0.002118119198387002,1.7893289828263934e-5,-2.922832774864068e-8,0.002118336487991736,1.7795584944785858e-5,-2.9122440610658274e-8,0.0021186692843823997,1.7655389538035962e-5,-2.8970402749374115e-8,0.0021191276345471233,1.7536852324466382e-5,-2.8840362727093884e-8,0.0021196884143433207,1.7507199823531867e-5,-2.880401634238384e-8,0.002120295925762307,1.7615411346021366e-5,-2.8913861014445143e-8,0.0021208758106100725,1.787247903713528e-5,-2.9182079529307654e-8,0.002121359406182991,1.8244267405424016e-5,-2.9572807067690778e-8,0.0021217074721560777,1.8663209769622012e-5,-3.0014474124992184e-8,0.0021219209004431955,1.905356541542978e-5,-3.042663828206199e-8,0.0021220343298265485,1.9356536768551152e-5,-3.0746705244532125e-8,0.002122099166839674,1.954377814105041e-5,-3.094431491310143e-8,0.002122166330543905,1.9617217855782224e-5,-3.102119259421685e-8,0.0021222752180405586,1.9600531064406503e-5,-3.100215517299388e-8,0.002122449658514504,1.952878967527067e-5,-3.092419165467688e-8,0.0021226984612435964,1.9440127761138346e-5,-3.082765962692926e-8,0.002123017846957808,1.9370314072744265e-5,-3.075052790344494e-8,0.0021233940681903195,1.934948928989278e-5,-3.0724888774326296e-8,0.0021238056794888474,1.9399952935627528e-5,-3.077458440678296e-8,0.002124225682580438,1.9534193054597844e-5,-3.091310551719368e-8,0.002124624113565031,1.9752886458047202e-5,-3.1141464105636413e-8,0.002124971655833702,2.0043233580223036e-5,-3.144639940286134e-8,0.00212524450155675,2.037859705176521e-5,-3.179992728445566e-8,0.002125429949440885,2.0720660307119964e-5,-3.216153381034379e-8,0.0021255313735390655,2.1024952911718785e-5,-3.2483951488909524e-8,0.0021255706390746042,2.1249553405534983e-5,-3.272236244662322e-8,0.0021255862274255134,2.136531580176944e-5,-3.284530096658392e-8,0.002125626472329969,2.136477599867833e-5,-3.2844230643420137e-8,0.0021257389764561077,2.1266765123494018e-5,-3.273861136499655e-8,0.0021259586471253046,2.1114766388613177e-5,-3.2574325849611996e-8,0.0021262973922635143,2.0968604798671925e-5,-3.241497651320302e-8,0.0021267384416393392,2.0890666115759917e-5,-3.2327268627746654e-8,0.0021272376715695132,2.0929425811587144e-5,-3.236339970670092e-8,0.002127733046172089,2.110460424404699e-5,-3.2545061768599696e-8,0.00212816092546539,2.1399236109442378e-5,-3.2854762929754035e-8,0.0021284746737500223,2.176302809822261e-5,-3.3239236614057686e-8,0.002128658496133636,2.212740460159936e-5,-3.362543623506609e-8,0.0021287304336883744,2.2426834845535454e-5,-3.3943333219980947e-8,0.0021287335646911943,2.2617434207905126e-5,-3.414584047635682e-8,0.0021287204228760234,2.2685679731977404e-5,-3.421817395035784e-8,0.0021287380406940413,2.264602236182866e-5,-3.417535947240264e-8,0.002128818715188701,2.2531501692113913e-5,-3.4052283410800604e-8,0.002128977344015476,2.2382911676892006e-5,-3.3892197642410027e-8,0.002129213263803856,2.2240213464310166e-5,-3.373760006185234e-8,0.0021295139322477768,2.2137245808817076e-5,-3.362460002842891e-8,0.0021298586205894944,2.2099046795842652e-5,-3.358004972356987e-8,0.0021302214146577676,2.2140545104573738e-5,-3.362013028869592e-8,0.0021305737006618716,2.2265607580957118e-5,-3.374931398457121e-8,0.0021308867762918587,2.2466010723704024e-5,-3.39592257518173e-8,0.002131135293920836,2.2720594046935103e-5,-3.4227667717305434e-8,0.0021313019334212695,2.2995565753170124e-5,-3.451884933521096e-8,0.0021313829342262734,2.3247460182788705e-5,-3.4786456209133385e-8,0.0021313929103826883,2.3430080081429465e-5,-3.4981018338903236e-8,0.0021313662623369065,2.35053775592328e-5,-3.506154647311194e-8,0.002131352534668617,2.3455775394926864e-5,-3.500875472352498e-8,0.0021314050619435174,2.3293157757724045e-5,-3.483475480248656e-8,0.0021315656878382726,2.305959461858975e-5,-3.458394904972025e-8,0.002131851148769884,2.2817817875395575e-5,-3.432300884872676e-8,0.002132246675708553,2.2634145895239077e-5,-3.412278123476084e-8,0.0021327093056224787,2.255991732479814e-5,-3.4038512859965103e-8,0.0021331794386085386,2.261762912569421e-5,-3.4094941293936804e-8,0.002133596614516856,2.2795606804280943e-5,-3.4280365800889207e-8,0.0021339148569076657,2.3052078776754165e-5,-3.455073970041519e-8,0.0021341135296762083,2.3327034579694484e-5,-3.484217778475803e-8,0.0021342009716787884,2.355832491670355e-5,-3.508814955727273e-8,0.0021342101969445745,2.3697300658380293e-5,-3.523629751598651e-8,0.0021341884075972216,2.3719450332254015e-5,-3.525994944230765e-8,0.002134184081791398,2.3627331849970435e-5,-3.5161372712859956e-8,0.002134235900463689,2.3446066878692636e-5,-3.4967036409302774e-8,0.0021343663946126897,2.321429430328426e-5,-3.471798296710547e-8,0.0021345807976598918,2.2974350116389325e-5,-3.4459344612988514e-8,0.0021348696549837566,2.2764450779378168e-5,-3.4231980765256686e-8,0.0021352131046345666,2.2613905870942357e-5,-3.4067347153649095e-8,0.0021355851791665065,2.25409643711599e-5,-3.398518306415485e-8,0.002135957353588875,2.255223300982052e-5,-3.3992879723749303e-8,0.0021363013822437923,2.264265540717151e-5,-3.408542886166249e-8,0.0021365919676518924,2.279553658100697e-5,-3.4245382178955386e-8,0.0021368099415358917,2.298274820199354e-5,-3.444296877039347e-8,0.0021369464146205742,2.3165964903851673e-5,-3.463731317033913e-8,0.0021370076236995232,2.3300428516159704e-5,-3.4780406073762714e-8,0.0021370188901841084,2.334275576213467e-5,-3.482548254690987e-8,0.002137024662802771,2.3262920180390915e-5,-3.473993474880969e-8,0.0021370813223880038,2.3057492795026685e-5,-3.451958523389752e-8,0.002137241889275746,2.2757801904735166e-5,-3.41974981982623e-8,0.0021375370262618257,2.2426116340509338e-5,-3.3839966919214845e-8,0.002137961316631726,2.213800200907653e-5,-3.3527737842564464e-8,0.0021384728126343628,2.1957459800264673e-5,-3.332951347872889e-8,0.002139006670366777,2.191643370582827e-5,-3.3280036206354196e-8,0.0021394959229136664,2.2007302232413204e-5,-3.3371904617377737e-8,0.0021398901271324055,2.2189143712365275e-5,-3.3562023526722955e-8,0.002140166006414651,2.2402515162981413e-5,-3.378718549615929e-8,0.002140329077781706,2.2586184572995143e-5,-3.398186921720036e-8,0.0021404083035632985,2.2691063196128188e-5,-3.409319354061641e-8,0.002140446731689183,2.2688976940126358e-5,-3.409045739764433e-8,0.002140490895281052,2.2575699890952926e-5,-3.396857223236857e-8,0.0021405812375513067,2.2368761539972847e-5,-3.374586429282327e-8,0.002140745261299301,2.21013187905107e-5,-3.345758704823717e-8,0.002140994332456639,2.181402372302832e-5,-3.314720913566537e-8,0.002141324077070165,2.15469856889004e-5,-3.285775427864785e-8,0.002141717448243737,2.1333424920190157e-5,-3.262494699138589e-8,0.0021421491254591573,2.1195757227350775e-5,-3.247299004550511e-8,0.0021425900057506363,2.1143998775028036e-5,-3.2412859574264454e-8,0.002143011062769476,2.117578153748411e-5,-3.2442332125159627e-8,0.0021433864887417924,2.1277166088685482e-5,-3.254683206575627e-8,0.0021436964440635616,2.142377656843826e-5,-3.270056832632809e-8,0.0021439298869587705,2.1582271289495213e-5,-3.2867992137633203e-8,0.0021440878674806683,2.1712763255525305e-5,-3.3006289361086e-8,0.002144187054590783,2.1773439803346106e-5,-3.3070310510598916e-8,0.002144262009093983,2.172867744059509e-5,-3.302135431596869e-8,0.002144363336494184,2.156066898233932e-5,-3.2839788635029706e-8,0.0021445484486645283,2.128161554298987e-5,-3.253826914107641e-8,0.0021448640499980975,2.093968006406232e-5,-3.216820242252745e-8,0.0021453256085358927,2.0610778355504582e-5,-3.181096877059883e-8,0.002145905198301666,2.0374493068902587e-5,-3.155211428654284e-8,0.00214653761622983,2.028404497865664e-5,-3.144915450204835e-8,0.002147143609271417,2.0346789600608755e-5,-3.151058660106004e-8,0.0021476575414585346,2.0525272704293914e-5,-3.1696854344447995e-8,0.002148045581613403,2.0755200980876327e-5,-3.193942834876001e-8,0.0021483090662633483,2.0968393190590092e-5,-3.2165288983192186e-8,0.002148476685362016,2.111059951237463e-5,-3.231601401750927e-8,0.002148592188673189,2.115054857145032e-5,-3.235756967674147e-8,0.0021487026050471423,2.108140192452833e-5,-3.2282037014221544e-8,0.002148849218208448,2.091738286919093e-5,-3.2104180012498956e-8,0.0021490617141141114,2.0687943158359667e-5,-3.185531826563116e-8,0.0021493552248900965,2.043093865495207e-5,-3.1576037272193084e-8,0.0021497299103959574,2.018578295980443e-5,-3.1308781112487576e-8,0.0021501726730506327,1.99873898678633e-5,-3.109124846202539e-8,0.0021506604730088547,1.986152543363258e-5,-3.0951322070678607e-8,0.0021511645783630928,1.9821951349432184e-5,-3.0903980935864254e-8,0.0021516549924586936,1.986945352369192e-5,-3.0950285248140185e-8,0.0021521044365688485,1.9992440843010033e-5,-3.107804747030246e-8,0.0021524916686676407,2.016856874486101e-5,-3.126355090492214e-8,0.0021528042317079527,2.0367018571783807e-5,-3.147390414350625e-8,0.002153040804545645,2.0551375958833374e-5,-3.167000555671362e-8,0.002153213305985311,2.0683403675124328e-5,-3.181050955508008e-8,0.002153348503797179,2.0728467991859314e-5,-3.185767901736995e-8,0.002153487865791758,2.06633838486928e-5,-3.178596101433709e-8,0.002153683336498533,2.0486260716953912e-5,-3.159278162166714e-8,0.0021539866168050876,2.022543685029994e-5,-3.130833435668043e-8,0.0021544317139913717,1.9941401323367558e-5,-3.099772567279643e-8,0.0021550161923323133,1.9714632358069782e-5,-3.074786370682314e-8,0.002155692720036186,1.961840203113644e-5,-3.0638105864892124e-8,0.0021563809762338523,1.9688010875520684e-5,-3.070702518398803e-8,0.0021569972223773057,1.990511081944595e-5,-3.0935392402114285e-8,0.002157485124027573,2.0207307545267066e-5,-3.125638734645144e-8,0.002157830955696959,2.0515501898373752e-5,-3.1584963952577884e-8,0.0021580591073866546,2.0761657983135865e-5,-3.1847730058857165e-8,0.0021582161445200332,2.0904745124936695e-5,-3.200013957830926e-8,0.0021583539825240404,2.0933500471754782e-5,-3.20295538061186e-8,0.0021585179343003775,2.0861021855106574e-5,-3.194956386357729e-8,0.0021587404344839763,2.071653038410741e-5,-3.179127525102121e-8,0.0021590389475030915,2.0537441620192218e-5,-3.159486520542445e-8,0.0021594163239126024,2.0362778417702688e-5,-3.140248197378161e-8,0.002159862527034524,2.02278948399552e-5,-3.12524698579826e-8,0.002160357285130327,2.0160345669093216e-5,-3.117480508185589e-8,0.002160873478204498,2.017687657565958e-5,-3.1187780101922056e-8,0.002161381090914999,2.028164028054539e-5,-3.1296077539601465e-8,0.0021618514304895253,2.0465857833124282e-5,-3.1490443368311834e-8,0.0021622611359319007,2.0709012451658273e-5,-3.174899334089471e-8,0.002162595566211041,2.0981352258249935e-5,-3.203986438715612e-8,0.0021628513653473066,2.1247405686018214e-5,-3.232489338007879e-8,0.0021630380775924086,2.1470340095996585e-5,-3.256419591015205e-8,0.0021631786722644116,2.1617083222566323e-5,-3.272164177108625e-8,0.00216330868415945,2.1664275769114177e-5,-3.277135694153426e-8,0.0021634731281762807,2.1605065487863532e-5,-3.2705257492733154e-8,0.0021637197852005,2.1455812436603205e-5,-3.254053477237097e-8,0.0021640877997709013,2.1259948537739125e-5,-3.232400898296171e-8,0.002164592603377122,2.108438739205041e-5,-3.212829934769005e-8,0.0021652124263154904,2.1004045458292953e-5,-3.2034996857797784e-8,0.002165885927123784,2.107545579977581e-5,-3.21059404679378e-8,0.002166528501769656,2.1310646054636276e-5,-3.235474767326647e-8,0.0021670632549307834,2.1668132745757332e-5,-3.273691349900394e-8,0.0021674499574846086,2.2069275229952522e-5,-3.3167461209084994e-8,0.002167695398646148,2.2430414143251984e-5,-3.355576152777364e-8,0.0021678424617177497,2.2691454458900874e-5,-3.383651203996052e-8,0.002167948850623929,2.2828166985303557e-5,-3.398307877885336e-8,0.0021680682294110717,2.2848871903014454e-5,-3.400396925492826e-8,0.002168239621410091,2.2783477264658934e-5,-3.393109259567893e-8,0.0021684843405062296,2.2671975588932204e-5,-3.380744770218485e-8,0.0021688073255370847,2.2555681481195456e-5,-3.367771500329707e-8,0.0021692001470083005,2.247154601714925e-5,-3.358207900819488e-8,0.0021696442585630864,2.2448607182279223e-5,-3.355228837104354e-8,0.0021701141864079454,2.250565226458912e-5,-3.360901884393857e-8,0.0021705808201399487,2.2649663627314837e-5,-3.376013066261044e-8,0.002171014994842116,2.2875029470842755e-5,-3.399981066861581e-8,0.0021713914000250586,2.3163823595123173e-5,-3.430889349840126e-8,0.002171692521788873,2.348758011808522e-5,-3.4656770876542255e-8,0.0021719120261017694,2.381072758144914e-5,-3.500503838425244e-8,0.002172056961163761,2.4095477309522668e-5,-3.531268029929626e-8,0.002172148267756013,2.430773141450824e-5,-3.5542386815216575e-8,0.0021722192183669113,2.4423369339532766e-5,-3.5667380799741086e-8,0.0021723115797911727,2.443412716691192e-5,-3.567793407850738e-8,0.002172469370856416,2.435222243916228e-5,-3.558662383347489e-8,0.002172730141133899,2.4212483806263987e-5,-3.5430893243344456e-8,0.0021731143123856107,2.406994280862633e-5,-3.527059410845282e-8,0.0021736147553494305,2.399049051461565e-5,-3.517783640369402e-8,0.0021741911382967354,2.4033616638707532e-5,-3.5218066388396594e-8,0.0021747750128882433,2.4230582571380168e-5,-3.542607458320517e-8,0.0021752887669595176,2.4567528571206925e-5,-3.5787372573666643e-8,0.002175673052155437,2.49852415759974e-5,-3.623781078312394e-8,0.002175908854725856,2.5399662837313294e-5,-3.668591393596756e-8,0.0021760215228088064,2.5733306593570758e-5,-3.704716213606398e-8,0.002176065901163682,2.5940343519971294e-5,-3.727134201842648e-8,0.0021761034783204496,2.6014370722419524e-5,-3.735101978943853e-8,0.0021761840080405325,2.598057227504093e-5,-3.731306905929495e-8,0.0021763370696546024,2.5881272618678495e-5,-3.7203079961238056e-8,0.002176571964578955,2.5762734966788867e-5,-3.7071131130532555e-8,0.002176881812643163,2.5666444320064544e-5,-3.6962369095902545e-8,0.002177248530362033,2.562462645803108e-5,-3.6912097310867254e-8,0.0021776471185262275,2.56583990067598e-5,-3.694366624460091e-8,0.0021780490847102727,2.577707907708006e-5,-3.706762059466764e-8,0.002178425470464016,2.5977906113517757e-5,-3.7281338682605485e-8,0.002178749995054507,2.6246122306122735e-5,-3.7569099018844795e-8,0.00217900258816672,2.6555835903572176e-5,-3.7903003824289374e-8,0.0021791731432856958,2.687235363923373e-5,-3.8245472427078433e-8,0.002179264774642755,2.715651610226576e-5,-3.8553882093067663e-8,0.0021792954993946666,2.737100012726711e-5,-3.878734993897014e-8,0.0021792972905228126,2.7487801409019163e-5,-3.891485525836279e-8,0.0021793118845096627,2.7495392292255558e-5,-3.8923106738733907e-8,0.0021793835257311045,2.740366279969572e-5,-3.8822101383632065e-8,0.0021795497062576503,2.7244969924330507e-5,-3.864650695887784e-8,0.0021798315902990814,2.70702521421955e-5,-3.845164962605757e-8,0.0021802262299320907,2.693987847972113e-5,-3.8303651911103566e-8,0.0021807030536763806,2.6909868400577606e-5,-3.826434729027413e-8,0.002181207209043901,2.7015773686396604e-5,-3.837346895969279e-8,0.002181671386070132,2.7258810728352984e-5,-3.8633200520179275e-8,0.0021820347882051537,2.7600628586197033e-5,-3.9002200115334744e-8,0.002182263235355336,2.7971926183414146e-5,-3.940491263576584e-8,0.0021823611556105044,2.829417321789066e-5,-3.9755366604696456e-8,0.0021823687183090976,2.8505597620353956e-5,-3.9985695960752894e-8,0.002182345504518596,2.8579166128070304e-5,-4.006587420492795e-8,0.00218234968005574,2.852535965389795e-5,-4.000679786407413e-8,0.0021824224556048176,2.838187447749541e-5,-3.984911376569704e-8,0.0021825822079256305,2.8198197432587352e-5,-3.964648840870845e-8,0.002182826606343748,2.802230424969246e-5,-3.9451180587015695e-8,0.0021831385394179867,2.7892584515013404e-5,-3.930524420287103e-8,0.002183492363313434,2.7834558372804433e-5,-3.9236882225582924e-8,0.00218385884397354,2.7860496490932013e-5,-3.9259933128383583e-8,0.0021842086588251997,2.7970168372585447e-5,-3.937460019364952e-8,0.0021845150758582356,2.815172900254157e-5,-3.956836422313752e-8,0.0021847565668936496,2.838260505830918e-5,-3.9816914283289737e-8,0.002184919839335821,2.8630898322059892e-5,-4.0085638458821643e-8,0.002185003215576358,2.885819450463714e-5,-4.033263381846127e-8,0.00218501956630861,2.9024619642616696e-5,-4.0514173513386934e-8,0.002184997331671042,2.9096343678574037e-5,-4.0592881414629923e-8,0.0021849779434766005,2.9054458176741742e-5,-4.054747138967016e-8,0.0021850086809995705,2.890265974050007e-5,-4.0381253019101765e-8,0.0021851317555203866,2.867039550492026e-5,-4.012573894978999e-8,0.002185372477190764,2.8408972654841787e-5,-3.983659301605007e-8,0.002185730455124099,2.8180528313815657e-5,-3.958174677758403e-8,0.0021861771693066417,2.804251014407566e-5,-3.942450075684918e-8,0.002186661265337064,2.803206489062113e-5,-3.940634962351665e-8,0.0021871205644257144,2.8154906091556042e-5,-3.953453886956924e-8,0.0021874978725242504,2.8382145494403323e-5,-3.977826745766282e-8,0.002187756423815575,2.865671184733779e-5,-4.0075466582978284e-8,0.0021878902551987,2.8908425992492547e-5,-4.0349239996036213E-08,0.0021879255831569328,2.907366219308399e-5,-4.052949755270081e-8,0.002187912085216684,2.9112986253584563e-5,-4.057244739063578e-8,0.0021879072199879612,2.9020292931549317e-5,-4.0470759660277784E-08,0.0021879598630596396,2.8820635503511565e-5,-4.025130399634947e-8,0.0021880992812219192,2.855917509608077e-5,-3.996313733776403e-8,0.002188332056726784,2.8287020621832985e-5,-3.9662060963515264e-8,0.0021886456060208528,2.804939262502735e-5,-3.9397673106991304e-8,0.0021890148819920466,2.7878715380127772e-5,-3.9205757381181164e-8,0.002189409156221178,2.7792378102702624e-5,-3.9105747978824426e-8,0.0021897972687176166,2.7793455583849522e-5,-3.9101439536603146e-8,0.0021901511374968234,2.7872602070577086e-5,-3.9183008468822456e-8,0.0021904481235000325,2.80099950384596e-5,-3.932910624744156e-8,0.002190673074057688,2.8177065500827853e-5,-3.950871255388833e-8,0.0021908206554662854,2.8338483116444323e-5,-3.9683248872783535e-8,0.002190898034144987,2.8455330491275332e-5,-3.980999342254779e-8,0.002190927155960091,2.8490498477234655e-5,-3.9847964078533655e-8,0.0021909449561215767,2.841676049523602e-5,-3.9766800450551744e-8,0.002190999293289918,2.8226395593368268e-5,-3.955740530076425e-8,0.0021911391604951622,2.7938931175521973e-5,-3.924055987672371e-8,0.0021914004248092763,2.7602074739011113e-5,-3.886808440988153e-8,0.00219179202133541,2.7282286475806473e-5,-3.851264350198292e-8,0.002192289357213238,2.704625873866707e-5,-3.82475557684289e-8,0.0021928392696263337,2.6940105864173445e-5,-3.812399760810237e-8,0.0021933752027235077,2.697500409955819e-5,-3.815512007691709e-8,0.002193836370061701,2.712470614302269e-5,-3.8313049345572726e-8,0.0021941837606845793,2.7334592335765326e-5,-3.8538514178115646e-8,0.0021944084668189573,2.753776194502866e-5,-3.875830475133487e-8,0.002194531286417225,2.7672583796492192e-5,-3.890450991618433e-8,0.002194595052600508,2.769704623340426e-5,-3.893040017878978e-8,0.0021946525033668582,2.759686253141467e-5,-3.881953924029014e-8,0.002194753120305771,2.7386090076476726e-5,-3.858667842959779e-8,0.0021949323250686314,2.7100914061041817e-5,-3.82710888669168e-8,0.0021952055424206626,2.678902702000713e-5,-3.792497063521771e-8,0.0021955679291575467,2.6498107213706706e-5,-3.760078207771899e-8,0.0021959986568907772,2.626660204683497e-5,-3.73410335002723e-8,0.0021964674766541165,2.6118501228737073e-5,-3.7172439057852775e-8,0.0021969413113013753,2.60620374695922e-5,-3.7104408935529385e-8,0.0021973894608135576,2.6091132908844254e-5,-3.7130604436828466e-8,0.00219778705276762,2.6188108161646412e-5,-3.7231911539965425e-8,0.0021981171577645352,2.6326541689641457e-5,-3.7379570709525906e-8,0.0021983722862443157,2.647389410124768e-5,-3.753800898406534e-8,0.0021985558494707763,2.6594192238440678e-5,-3.766770585522208e-8,0.0021986837479933113,2.6651537795907375e-5,-3.772898009889921e-8,0.0021987855132714115,2.6615420265459276e-5,-3.76878288712398e-8,0.0021989034252902504,2.646839864760911e-5,-3.752446513210713e-8,0.002199087291365176,2.621516384114665e-5,-3.7243437839789706e-8,0.002199383129417582,2.588937576288623e-5,-3.688130790905145e-8,0.0021998169911259277,2.555241378810931e-5,-3.650538638656394e-8,0.0022003802001003703,2.5279351320183844e-5,-3.619836871761591e-8,0.0022010254563611044,2.513422877506996e-5,-3.603114654032077e-8,0.002201679461595271,2.5145548720641303e-5,-3.603578324988553e-8,0.0022022676262901954,2.5295397762231912e-5,-3.619337702747384e-8,0.0022027384098715387,2.552770043771887e-5,-3.6442911016991864e-8,0.0022030761947726936,2.5769490088737933e-5,-3.6704451465803936e-8,0.0022032999837505608,2.5953710056367697e-5,-3.690413133727294e-8,0.002203452495899009,2.6035101872089713e-5,-3.699166081129466e-8,0.00220358608653898,2.5996726968420892e-5,-3.6947657521712005e-8,0.0022037500668679825,2.584868135819004e-5,-3.678246540474378e-8,0.0022039815599960576,2.562183741456571e-5,-3.6529498934363496e-8,0.0022043004146107474,2.5359154396673204e-5,-3.6235824598435174e-8,0.0022047079845341367,2.510642092784503e-5,-3.595198121736966e-8,0.002205189271399241,2.490392157422305e-5,-3.5722695471243174e-8,0.0022057175485827437,2.4780291065975067e-5,-3.557995202152093e-8,0.002206260229099632,2.4749273402388118E-05,-3.553929040719807e-8,0.0022067847011294868,2.4809362891213233e-5,-3.559935513770356e-8,0.002207263133432532,2.494571788740346e-5,-3.574402276444476e-8,0.0022076757646234684,2.5133391696059046e-5,-3.594599847110066e-8,0.0022080127950028375,2.534094893318031e-5,-3.61707958606488e-8,0.0022082753512539274,2.5533983406702185e-5,-3.6380543421501094e-8,0.0022084759594946783,2.5678586499651885e-5,-3.653770547250637e-8,0.0022086387115195184,2.5745202620986414e-5,-3.6609273231779453e-8,0.002208798772150077,2.5713550443386234e-5,-3.6572240060008746e-8,0.002208999993716592,2.557900040024047e-5,-3.6420802882875486e-8,0.0022092887458073814,2.5359488384672675e-5,-3.6174216899908184e-8,0.0022097025167608603,2.5099812062111692e-5,-3.588172643050776e-8,0.0022102543881308777,2.4867936743048755e-5,-3.56185625830845e-8,0.0022109195242995543,2.4738476511340537e-5,-3.5467648422950415e-8,0.002211634051687777,2.4765337819048855e-5,-3.5489237515539794e-8,0.002212313150289902,2.495636083716276e-5,-3.5692713187243686e-8,0.0022128823429647753,2.526671790565515e-5,-3.602912278257172e-8,0.0022133046472050132,2.5616981016093155e-5,-3.641102991172894e-8,0.0022135888531115686,2.5924578071327065e-5,-3.6747220225829005e-8,0.0022137783155401383,2.6130440340332528e-5,-3.69721280559337e-8,0.0022139309577410685,2.6210438172246873e-5,-3.705850643683236e-8,0.0022141014474845195,2.6172901848814536e-5,-3.7014821330468624e-8,0.0022143303324376486,2.604895373490618e-5,-3.687478915277662e-8,0.002214639802017609,2.5881451700368056e-5,-3.668537821684993e-8,0.0022150338963010646,2.5715502764954452e-5,-3.649643735626844e-8,0.0022155011447347337,2.5591302194405776e-5,-3.6352737563078843e-8,0.0022160184567097205,2.553907975187675e-5,-3.628822151576024e-8,0.0022165557263009628,2.5575938852458807e-5,-3.63223191891732e-8,0.0022170807551756427,2.5704576800506107e-5,-3.6458407892383054e-8,0.002217564030701961,2.591385422119361e-5,-3.668441906146322e-8,0.0022179828448299827,2.6181049859668053e-5,-3.697537858622144e-8,0.0022183242804138395,2.6475407977684876e-5,-3.729737331333177e-8,0.002218586851652362,2.6762362021212276e-5,-3.7612202106384365e-8,0.002218780907528584,2.7007899392426868e-5,-3.7882116402540654e-8,0.00221892800983572,2.718282261799535e-5,-3.807443917791746e-8,0.0022190594291572868,2.7266897794539164e-5,-3.816614008581418e-8,0.002219213643884262,2.7253074171586324e-5,-3.814862701576736e-8,0.0022194321448706397,2.7151812912431053e-5,-3.8032782192625904e-8,0.0022197524438374,2.699457943246866e-5,-3.785310248538782e-8,0.0022201977516507457,2.6834004944931882e-5,-3.7668058896544666e-8,0.0022207647596439554,2.6736960739406968e-5,-3.755241769514929e-8,0.002221414588087056,2.6767401671111417e-5,-3.757801963905858e-8,0.0022220754445295104,2.696116773143545e-5,-3.778551747050506e-8,0.002222662982074354,2.7304481080951647e-5,-3.81602371398771e-8,0.002223112492580615,2.7732335963690483e-5,-3.8630272100101265e-8,0.0022234048892087036,2.815262001038408e-5,-3.9093316095525206e-8,0.002223570353579146,2.8482812379548647e-5,-3.9457507211628694e-8,0.0022236698422765312,2.8677471002609632e-5,-3.9671972494411865e-8,0.002223768955546225,2.8734606819302868e-5,-3.973390147896533e-8,0.002223918561912486,2.8685068606721128e-5,-3.9676852435000445e-8,0.002224146947177898,2.857614254949019e-5,-3.955275079853739e-8,0.002224460584546953,2.8457539680318737e-5,-3.9416539001133896e-8,0.0022248488878112726,2.8372409677147155e-5,-3.931628151961653e-8,0.0022252897394614136,2.8352697862785916e-5,-3.9287926512737694e-8,0.002225754439448891,2.8417200189247082e-5,-3.9352956850409215e-8,0.0022262119752000306,2.8571064147124517e-5,-3.9517646409515605e-8,0.0022266329015272588,2.8806246946617162e-5,-3.977346217838114e-8,0.002226992971723243,2.9102919767945163e-5,-4.009861614536306e-8,0.002227276408541931,2.9431986686848863e-5,-4.046090776146395e-8,0.002227478443459657,2.975881765135786e-5,-4.082189498635584e-8,0.0022276066367046955,3.00479536480172e-5,-4.114208286135804e-8,0.0022276806541805206,3.0268246647568305e-5,-4.1386550741833944e-8,0.0022277304168021564,3.0397850263698415e-5,-4.153044218187168e-8,0.0022277927064168696,3.0428497299104088e-5,-4.1563769098494404e-8,0.0022279064138012593,3.036858246513481e-5,-4.149502940286735e-8,0.002228106506621653,3.0244655302837534e-5,-4.13531517818982e-8,0.0022284166785792644,3.0100550888706932e-5,-4.1186794221321944e-8,0.0022288411897262855,2.9992625796661267e-5,-4.10591614928939e-8,0.0022293578310589434,2.997937361758266e-5,-4.1036340003927136e-8,0.002229915827113162,3.0105006870106393e-5,-4.116870189588894e-8,0.0022304437011137785,3.0380336855881893e-5,-4.146920822621145e-8,0.0022308696821551816,3.0770008843180174e-5,-4.189889481023213e-8,0.0022311489278408515,3.119747911794132e-5,-4.237238494059883e-8,0.002231282975267909,3.157105128869589e-5,-4.278709882978031e-8,0.0022313182697664352,3.181892335039289e-5,-4.3062523712161575e-8,0.0022313244787628863,3.1913280890993805e-5,-4.316712531818715e-8,0.0022313668866389517,3.187208721013959e-5,-4.312031825412391e-8,0.0022314877691962513,3.174329917730292e-5,-4.297493790279011e-8,0.0022317016189136243,3.1584440533183345e-5,-4.2794660080913634e-8,0.0022320000376087473,3.1447193001066374e-5,-4.263700565313382e-8,0.0022323599775302527,3.1369544649942365e-5,-4.2544629399779314e-8,0.0022327512669868426,3.13736485445689e-5,-4.254281430583861e-8,0.0022331420789577098,3.146660704082846e-5,-4.264014632464142e-8,0.002233502662649728,3.164221547907365e-5,-4.283028278424188e-8,0.0022338081602597494,3.188287847991798e-5,-4.309400116155361e-8,0.0022340411058888376,3.216172283638613e-5,-4.340155202858812e-8,0.002234193788318541,3.244531827001491e-5,-4.371572186288535e-8,0.002234270215537642,3.269748772071455e-5,-4.399608728756532e-8,0.0022342870174345488,3.288434625146084e-5,-4.4204595810092806e-8,0.0022342725300309807,3.298010211189754e-5,-4.431198509478476e-8,0.00223426358719864,3.297265366270278e-5,-4.430402838113176e-8,0.002234300042169446,3.28677210223566e-5,-4.4186255163092324e-8,0.0022344176501358816,3.269023712664952e-5,-4.398572890389884e-8,0.0022346404530500393,3.248215526411121e-5,-4.374887676761402e-8,0.0022349739993351363,3.229642695778004e-5,-4.3534981383312984e-8,0.002235400846601725,3.218729338221004e-5,-4.3405375317758714e-8,0.0022358801294424515,3.2197598996961654e-5,-4.3409074494626946e-8,0.0022363531613351687,3.234518444318427e-5,-4.356719715545998e-8,0.0022367562584270713,3.26124404623423e-5,-4.386088239969612e-8,0.002237039364916164,3.2944799036726895e-5,-4.4229360674700297e-8,0.002237184585255663,3.3263008754100455e-5,-4.458371191536925e-8,0.0022372152097443723,3.348808466964168e-5,-4.4835003790813605e-8,0.002237188268790842,3.356890037152168e-5,-4.492538522979582e-8,0.002237172973766367,3.3498373396684425e-5,-4.4846285550617134e-8,0.002237226446062347,3.331063740330506e-5,-4.463527151098567e-8,0.0022373785866876966,3.306356285861056e-5,-4.435657408777556e-8,0.0022376301801785795,3.281796598936418e-5,-4.407798109343235e-8,0.002237960293002327,3.262266212632057e-5,-4.385422435645071e-8,0.0022383364907900727,3.250798890852662e-5,-4.371970523753345e-8,0.002238723456645966,3.2485676809755455e-5,-4.3688197681211816e-8,0.0022390886143439774,3.255173487689696e-5,-4.3755889161178954e-8,0.002239405282078471,3.2689939993701276e-5,-4.390514695537152e-8,0.002239654500276259,3.2874917872497975e-5,-4.410791058122196e-8,0.002239826466603891,3.3074841894149056e-5,-4.43287154816248e-8,0.0022399219825763365,3.325431872964785e-5,-4.452793608909369e-8,0.00223995372724577,3.337818442270938e-5,-4.466602508507044e-8,0.002239946609945796,3.341665474095889e-5,-4.4709250539583116e-8,0.0022399361149010558,3.335152643078121e-5,-4.463662869840457e-8,0.0022399637177205746,3.318214901741799e-5,-4.4446666383878356e-8,0.0022400692719222156,3.292908438196356e-5,-4.4161604326662625e-8,0.0022402815961347503,3.263324461259011e-5,-4.382667142532589e-8,0.0022406097829435986,3.234928937051243e-5,-4.35029200728048e-8,0.0022410381982317313,3.2133989991873885e-5,-4.325433505758617e-8,0.002241527366860039,3.2032192958380706e-5,-4.31320710589e-8,0.002242021338402319,3.206407169227447e-5,-4.315991919307524e-8,0.002242460373611949,3.22173758634287e-5,-4.3325235858678146e-8,0.0022427962572554097,3.244758975145919e-5,-4.3578759913273076e-8,0.002243006285647738,3.268735329396462e-5,-4.384500203668317e-8,0.002243101254106713,3.2863977904254935e-5,-4.4041959824776854e-8,0.002243123492551911,3.292048609982193e-5,-4.410494856355586e-8,0.0022431341784470964,3.283271918257909e-5,-4.400603585822717e-8,0.002243194132145136,3.261533508896748e-5,-4.376093452019552e-8,0.0022433459529788004,3.2314277942817154e-5,-4.342065606321087e-8,0.0022436045440565053,3.198999227156275e-5,-4.305276261895022e-8,0.002243958133515982,3.169947891807182e-5,-4.2721289735892826e-8,0.002244376640907042,3.148388477407264e-5,-4.2472798095789184e-8,0.0022448221512804886,3.136378685678507e-5,-4.233096289601714e-8,0.0022452575632132565,3.134045113321896e-5,-4.2297823602288997e-8,0.002245652005153063,3.139999666608745e-5,-4.2358322241039085e-8,0.002245983472810847,3.151802159817808e-5,-4.248543069195238e-8,0.0022462398578507008,3.166353197668659e-5,-4.2644554056704593e-8,0.002246419446397792,3.180211929402931e-5,-4.2797108244559135e-8,0.0022465314514837314,3.1898991863196846e-5,-4.290391686790522e-8,0.0022465964763423293,3.192267915682146e-5,-4.292934587877446e-8,0.0022466461542808808,3.185001140863545e-5,-4.2846882077462555e-8,0.0022467207138888905,3.1672240851810194e-5,-4.264604611928958e-8,0.0022468631990779767,3.140089843834509e-5,-4.2339079016408486e-8,0.0022471100388813652,3.1070610463486265e-5,-4.196427300171984e-8,0.002247479746499827,3.073566784992554e-5,-4.158230565870342e-8,0.0022479638331529823,3.045874199951375e-5,-4.1263714808448154e-8,0.002248524763253154,3.02937857422682e-5,-4.1069733388505545e-8,0.002249103611883865,3.0268960024283786e-5,-4.1032988729356464e-8,0.0022496357222364597,3.0376558929030593e-5,-4.114590430823665e-8,0.002250068824548509,3.0574158665270486e-5,-4.1361647414439126e-8,0.0022503772247836114,3.07964029825346e-5,-4.160710741763205e-8,0.002250567802057482,3.097301904580212e-5,-4.1803061544443096e-8,0.002250676749711126,3.1047324392743566e-5,-4.188509138902905e-8,0.0022507586723131802,3.099010340839463e-5,-4.1819420951854353e-8,0.002250871480347393,3.080538471041008e-5,-4.1609680129912226e-8,0.0022510615188335178,3.052699532297764e-5,-4.1293253390966694e-8,0.002251353179262093,3.0207520227351978e-5,-4.092900157619033e-8,0.0022517456031207373,2.990365199999711e-5,-4.058081653528731e-8,0.002252216441744965,2.966277801546249e-5,-4.0302454700107246e-8,0.0022527301904458124,2.9514465763670236e-5,-4.012779775956819e-8,0.0022532475943158755,2.9467955847632948e-5,-4.0067851081194045e-8,0.0022537333307623537,2.9514413442723212e-5,-4.0113146302274113E-08,0.0022541607881451917,2.9631644844628163e-5,-4.023900335211374e-8,0.002254514189838657,2.9789237110179563e-5,-4.041133614434692e-8,0.0022547890266936274,2.9952985275678716e-5,-4.059167064094272e-8,0.0022549917913854377,3.0088440765969818e-5,-4.074114160771088e-8,0.0022551396035145384,3.016407696389352e-5,-4.08240201186456e-8,0.0022552597216511264,3.015481429148342e-5,-4.081164539487939e-8,0.0022553882919875423,3.0046508802163843e-5,-4.0687495180085486e-8,0.002255567099077569,2.9841357504034444e-5,-4.045337540522603e-8,0.0022558369388607233,2.9562838755949134e-5,-4.0135156504026914e-8,0.0022562271875581842,2.9257130726269753e-5,-3.978455631529007e-8,0.0022567436326642507,2.898714903281843e-5,-3.947255364662877e-8,0.0022573598823487835,2.8817209579511943e-5,-3.927213390100102e-8,0.002258018966071855,2.8791605493017066e-5,-3.923404737454537e-8,0.002258648117312685,2.891633036493332e-5,-3.936599702943412e-8,0.0022591820275492096,2.9154153382066135e-5,-3.962682189325287e-8,0.0022595839247476135,2.9436595028559185e-5,-3.993977198480979e-8,0.00225985505008105,2.9686790215993037e-5,-4.021816649643196e-8,0.002260030241699472,2.9842461088519565e-5,-4.039130403089442e-8,0.002260164133587199,2.9870701143892955e-5,-4.042125712911031e-8,0.0022603147060398874,2.9772008334002676e-5,-4.0307640364203134e-8,0.002260529356679789,2.957539212424842e-5,-4.008236218492744e-8,0.0022608360709949985,2.9328088618681445e-5,-3.9798262676794195e-8,0.002261240279369694,2.9083351681059975e-5,-3.951545849385412e-8,0.0022617268003365322,2.888909043567816e-5,-3.9288472509905356e-8,0.0022622655482008036,2.8779388123142624e-5,-3.915647214350556e-8,0.002262819189102602,2.8770098261314698e-5,-3.913805732001187e-8,0.002263350798057785,2.88586129564398e-5,-3.92308125522209e-8,0.0022638299762149723,2.9026875547142857e-5,-3.9414639258724473e-8,0.00226423666135669,2.9246199189130553e-5,-3.9657234352431613e-8,0.0022645626786873415,2.9482478245198007e-5,-3.992005306099529e-8,0.0022648116674165116,2.9700822468235492e-5,-4.016358408751382e-8,0.0022649981596772123,2.9869345096513426e-5,-4.0351602493104255e-8,0.00226514630501003,2.9962411033835785e-5,-4.04547762743576e-8,0.002265288298830657,2.9963862391270176e-5,-4.045428268554886e-8,0.0022654620702153745,2.9870664852001304e-5,-4.034600056798178e-8,0.002265707212446325,2.969691295175194e-5,-4.0145217890832345e-8,0.002266057956294179,2.947691133511338e-5,-3.9890345763315734e-8,0.0022665329039003286,2.926444328548644e-5,-3.964227072360827e-8,0.0022671236887107245,2.9124484378898093e-5,-3.9475022511818455E-08,0.002267788240646869,2.9115420126813518e-5,-3.945552451759843e-8,0.0022684561262601086,2.9265821438624493e-5,-3.9617054061131354e-8,0.0022690490903026677,2.955733641213853e-5,-3.993960157280089e-8,0.002269509515122626,2.992626254599793e-5,-4.035147042985752e-8,0.00226982162214845,3.0286068029203308e-5,-4.0754733553186254e-8,0.0022700138757717004,3.055897303667495e-5,-4.1061025649979134e-8,0.0022701436737226793,3.069989577380529e-5,-4.1218699906638504e-8,0.00227027517647685,3.070387520696665e-5,-4.122131101616223e-8,0.002270461042897145,3.059919619723711e-5,-4.1100011651257346e-8,0.002270732689133939,3.0433729733369717e-5,-4.090835113136894e-8,0.002271098337780852,3.026097227227714e-5,-4.070670005595391e-8,0.002271546105525531,3.012906258930677e-5,-4.0549886052690306e-8,0.002272049606456396,3.007354356655947e-5,-4.0478868217575704e-8,0.0022725744638758933,3.011354728086309e-5,-4.051615436512521e-8,0.0022730847790649704,3.0250954443169037e-5,-4.066458322488583e-8,0.002273548838725809,3.047206367789406e-5,-4.0909059104787467e-8,0.0022739434936463994,3.075113090835044e-5,-4.1220551846418976e-8,0.0022742568636345524,3.105504186902545e-5,-4.156147942044127e-8,0.0022744892839467825,3.134835492335001e-5,-4.189151521878511e-8,0.0022746527416301044,3.159798737144839e-5,-4.217292294439811e-8,0.0022747692873981264,3.177714018497166e-5,-4.237495585906838e-8,0.0022748688113758886,3.186850606857967e-5,-4.247743480535395e-8,0.002274986290774487,3.186699225575003e-5,-4.2473855910760004e-8,0.0022751583117732004,3.178213127539921e-5,-4.237427673206388e-8,0.0022754182619907173,3.1640017291713195e-5,-4.2207768491395545e-8,0.0022757894556965316,3.1483670873694755e-5,-4.202308555544977e-8,0.0022762763149492913,3.1369490725813464e-5,-4.188476186116999e-8,0.002276855832823401,3.135697026894548e-5,-4.186133900931318e-8,0.0022774744421386866,3.1490633861351893e-5,-4.200454099581501e-8,0.0022780569340058936,3.177865036092299e-5,-4.232457983909165e-8,0.0022785298502353986,3.217986098398422e-5,-4.277512950721424e-8,0.002278850878859694,3.261186828087253e-5,-4.326249088421801e-8,0.002279027127460274,3.29810254809563e-5,-4.3679853601427606e-8,0.0022791101135152944,3.3218485070021266e-5,-4.3948435338700015e-8,0.0022791716138773816,3.33017751806445e-5,-4.404203618293163e-8,0.0022792763622203156,3.325354630218967e-5,-4.3985619723857855e-8,0.0022794650184009696,3.312474867222378e-5,-4.3836336864797965e-8,0.0022797502493714416,3.297479872131966e-5,-4.3661248003750406e-8,0.00228012142820996,3.285672340462785e-5,-4.35206528604119e-8,0.0022805525144040995,3.2809069538178984e-5,-4.3458910771532503e-8,0.002281009749824412,3.28530678199272e-5,-4.350102367560977e-8,0.002281457946481573,3.299290573495884e-5,-4.3652647942342574e-8,0.0022818653863613037,3.3217663060474e-5,-4.390203862093646e-8,0.0022822076095379298,3.350430854908523e-5,-4.4223341324998374e-8,0.0022824701581385626,3.38215008984268e-5,-4.458094556850484e-8,0.0022826501909389498,3.413398695711384e-5,-4.493459121134231e-8,0.0022827568168762593,3.44073498830337e-5,-4.524485208989148e-8,0.0022828100447377627,3.4612658901913384e-5,-4.547843105508966e-8,0.0022828384740465075,3.4730475087631895e-5,-4.561266796396316e-8,0.002282876011570533,3.475388096679199e-5,-4.5638964500433376e-8,0.002282957848421652,3.469040464851831e-5,-4.5565062411767125e-8,0.0022831158204580496,3.456271833872463e-5,-4.541606069616092e-8,0.0022833731202049406,3.440786048574832e-5,-4.5233819572801423e-8,0.0022837383081319583,3.427425554837967e-5,-4.507378989735375e-8,0.0022841992424606486,3.42151255976047e-5,-4.4997528462908375e-8,0.0022847190630679586,3.427694413898361e-5,-4.505929978605274e-8,0.0022852381039333777,3.448341082476899e-5,-4.528736898920922e-8,0.002285686017006873,3.4819631970934466e-5,-4.566551541864208e-8,0.0022860045965692596,3.522625967483624e-5,-4.6126130449042295e-8,0.0022861729555042707,3.5613274931110104e-5,-4.65660689031637e-8,0.002286219685653516,3.5892392446296056e-5,-4.688394305335418e-8,0.002286211691889868,3.601177133491025e-5,-4.7019944247694604e-8,0.002286225505956513,3.5972626779050686e-5,-4.697479161031815e-8,0.0022863188543598124,3.58205873724714e-5,-4.6799832485411654e-8,0.00228651668635773,3.562198060753e-5,-4.6570120297171264e-8,0.002286812966928041,3.5440632292562546e-5,-4.635820450409294e-8,0.002287180868527256,3.532389707738892e-5,-4.6218365864022434e-8,0.002287583967878681,3.5298098790532246e-5,-4.618136168410986e-8,0.0022879848284268977,3.536980504236021e-5,-4.6255633734096165e-8,0.0022883504197809537,3.552946613083765e-5,-4.643115703668337e-8,0.002288655274879669,3.575541538610793e-5,-4.668378554344655e-8,0.0022888834463104927,3.60176745468646e-5,-4.697952823998258e-8,0.002289029789277668,3.6281738912671874e-5,-4.727893103740416e-8,0.002289100595889158,3.65126058036671e-5,-4.754178038619249e-8,0.0022891133320047745,3.667916372430841e-5,-4.773217946936401e-8,0.0022890950961498148,3.675871799412574e-5,-4.782371311654076e-8,0.0022890795607725576,3.674100774676719e-5,-4.7804003549630296e-8,0.002289102527511509,3.663093644990813e-5,-4.767785241181172e-8,0.002289196541348638,3.644938070154096e-5,-4.746830614559982e-8,0.0022893851939173337,3.6231636872978196e-5,-4.7215134114218746e-8,0.002289677840039512,3.602331407239086e-5,-4.6970406519053876e-8,0.0022900654708520327,3.58736629553553e-5,-4.679101983320465e-8,0.002290518708418688,3.582634915501503e-5,-4.6728061346799346e-8,0.0022909894789891827,3.590809695929047e-5,-4.681348212371508e-8,0.002291418352774001,3.611712058525191e-5,-4.704638370723802e-8,0.002291748752111823,3.641569025232455e-5,-4.7384109668672996e-8,0.0022919460643483626,3.6733133288591057e-5,-4.774556420547209e-8,0.0022920143328060607,3.6983858880081674e-5,-4.803206329891999e-8,0.002291999814615806,3.7096977477987554e-5,-4.8161604641847836e-8,0.002291975474626928,3.704374634491269e-5,-4.8100515063701843e-8,0.0022920128248449328,3.6846970662485426e-5,-4.787422973248501e-8,0.0022921567275596033,3.656759825553701e-5,-4.7551933742153225e-8,0.0022924155206640656,3.627866505605262e-5,-4.721685937218435e-8,0.0022927669894349093,3.6041857596996885e-5,-4.6939648387720506e-8,0.002293172035520522,3.589533984270876e-5,-4.676448884083824e-8,0.002293587774220062,3.585234950794764e-5,-4.670737294106673e-8,0.00229397625599273,3.5905780732209896e-5,-4.676107434656356e-8,0.0022943087935883965,3.603438248915831e-5,-4.690198432790658e-8,0.0022945674627496593,3.6208248273547327e-5,-4.709625363021303e-8,0.0022947453752612396,3.639309951270794e-5,-4.730469355160464e-8,0.002294846618012875,3.655385217382977e-5,-4.748694572871607e-8,0.0022948859966711527,3.6658142221179055e-5,-4.760561192507473e-8,0.0022948882229804706,3.66802485027254e-5,-4.7630789899419904e-8,0.002294885915277481,3.660536515102313e-5,-4.754496057001509e-8,0.0022949158390162044,3.64335141641052e-5,-4.7347464493291285e-8,0.002295013303258485,3.6181877526743895e-5,-4.705723761896796e-8,0.0022952053707549756,3.5884255428738196e-5,-4.6712359540665154e-8,0.0022955042500871392,3.558678939109289e-5,-4.6365392836542746e-8,0.002295902637857623,3.534001900618766e-5,-4.607449202272132e-8,0.002296372603345501,3.518847407688666e-5,-4.5891531629784525e-8,0.002296868936882388,3.515979486113663e-5,-4.584945571699113e-8,0.002297337100875107,3.525571375908133e-5,-4.595154991513938e-8,0.0022977251112613487,3.54474663309797e-5,-4.6165727461002804e-8,0.002297997511006086,3.567828648084553e-5,-4.642708208073091e-8,0.0022981479038201797,3.587486868504097e-5,-4.665101902295781e-8,0.0022982048890346418,3.59670990491837e-5,-4.6756152857442506e-8,0.0022982264993906746,3.591076706084595e-5,-4.66907281238414e-8,0.00229828244392896,3.570370688981107e-5,-4.645139989864305e-8,0.0022984305793150974,3.538654013029307e-5,-4.6084187811529834e-8,0.002298698613153666,3.502687277549902e-5,-4.5666380520174655e-8,0.0022990791902976694,3.4695334694455384e-5,-4.5279093849930466e-8,0.0022995381727997865,3.4445276278051516e-5,-4.49839970221804e-8,0.002300029218953335,3.430321854904224e-5,-4.4812265883725474e-8,0.0023005071520190556,3.426970567379333e-5,-4.4765358220823394e-8,0.0023009363058259054,3.432593949783263e-5,-4.4822399265362546e-8,0.0023012938617268945,3.444159290053393e-5,-4.494899788620879e-8,0.002301570006953491,3.458126436569647e-5,-4.51046246777301e-8,0.002301766800108603,3.470904311234521e-5,-4.524791553057968e-8,0.002301896888738061,3.479179416047871e-5,-4.534053254240823e-8,0.002301982375857608,3.480208071788327e-5,-4.535057802732492e-8,0.0023020534602801847,3.472142304601621e-5,-4.525634915545079e-8,0.0023021460538406057,3.454404162586172e-5,-4.505063369302154e-8,0.002302297520970304,3.4280415377693827e-5,-4.474483116108385e-8,0.00230254017354546,3.395911142067943e-5,-4.4371164167657605e-8,0.0023028932564570586,3.3624877587848964e-5,-4.398066536436923e-8,0.0023033555964254958,3.333152309155398e-5,-4.3635188638132984e-8,0.0023039020503271127,3.312995217770553e-5,-4.339376844190064e-8,0.002304486385520222,3.305425894193706e-5,-4.329658172175806e-8,0.002305051035348368,3.3110519998397165e-5,-4.335181227808648e-8,0.0023055413708626526,3.3272560571329226e-5,-4.353040435431237e-8,0.0023059202737308734,3.348666573581906e-5,-4.3771124818958763e-8,0.0023061786570983014,3.368428524135492e-5,-4.3994995923487775e-8,0.0023063388048928817,3.379947725797813e-5,-4.412542796611055e-8,0.0023064492323863275,3.378653186463361e-5,-4.410875759920423e-8,0.0023065718780325255,3.363277880294064e-5,-4.392931753536871e-8,0.0023067648430645355,3.336223440573916e-5,-4.361391666217241e-8,0.0023070660644278905,3.302816568314063e-5,-4.322345795297547e-8,0.002307483727852774,3.269679339994018e-5,-4.2834243518091083e-8,0.0023079967124393116,3.242829025455311e-5,-4.2516054578377455e-8,0.002308563857239961,3.2262195589673835e-5,-4.2315205384790976e-8,0.0023091372052619127,3.221149782256434e-5,-4.224750159055635e-8,0.002309673844341424,3.2265073740245427e-5,-4.2300823774791806e-8,0.0023101432068525158,3.239501720334835e-5,-4.244342832539441e-8,0.0023105295861446016,3.256496006872504e-5,-4.2633513685632894e-8,0.0023108314009869526,3.2736917316135974e-5,-4.282717939490637e-8,0.002311059046577513,3.287596311964373e-5,-4.298390962236588e-8,0.0023112325956021447,3.2953249680788354e-5,-4.30701110947523e-8,0.00231137979665109,3.294831861010061e-5,-4.306178209267358e-8,0.0023115340997543143,3.285151044406728e-5,-4.2947275355292e-8,0.0023117319317365243,3.2666777386046935e-5,-4.2730561942988145e-8,0.0023120082445560355,3.241439708027806e-5,-4.243445694518821e-8,0.0023123897136956896,3.213200948149292e-5,-4.210197938273945e-8,0.002312886188388601,3.1871514418046985e-5,-4.179294978549619e-8,0.0023134830361791667,3.168968477884489e-5,-4.157326718028376e-8,0.0023141388246951094,3.163282940214068e-5,-4.149718047268907e-8,0.002314792329840861,3.172005820484998e-5,-4.158778555622238e-8,0.002315378896673669,3.193290371843414e-5,-4.182474929661659e-8,0.0023158505127047306,3.2217740072628357e-5,-4.214680612835947e-8,0.0023161909435828218,3.2501262856054346e-5,-4.2469442360932653e-8,0.002316419671183998,3.271254277366566e-5,-4.27103290681903e-8,0.0023165841921237427,3.2802780436011716e-5,-4.2812247472897776e-8,0.0023167450214273137,3.2756541656388914e-5,-4.275628838705075e-8,0.0023169591271539453,3.259272819167442e-5,-4.256326379538918e-8,0.0023172663812004936,3.2356898186037265e-5,-4.228512778642178e-8,0.0023176817453812227,3.2108186977599e-5,-4.199006993769168e-8,0.002318194185054491,3.1904582986137214e-5,-4.174553762547756e-8,0.00231877176791076,3.1790160014621046e-5,-4.1603324561922454e-8,0.002319371007020906,3.1787119353049104e-5,-4.159008391244041e-8,0.0023199475183516252,3.189400454355314e-5,-4.17049622110272e-8,0.0023204650305293554,3.20894591354611e-5,-4.1923747329153166e-8,0.002320900868517307,3.2339315150879754e-5,-4.220702939293869e-8,0.0023212476092142357,3.260440417190498e-5,-4.2509329097549e-8,0.0023215118356965506,3.284715719192341e-5,-4.278686762213579e-8,0.0023217113982006393,3.3036182323788574e-5,-4.300295310375987e-8,0.002321872364162279,3.314903836216729e-5,-4.313120169100703e-8,0.0023220262092654128,3.3173971066507745e-5,-4.315751282036905e-8,0.002322207158400309,3.311135649858902e-5,-4.3081732272613976e-8,0.0023224491028571363,3.297521373884765e-5,-4.291948491394481e-8,0.002322781228382118,3.279447518776715e-5,-4.270382165655561e-8,0.0023232216822924234,3.261266466520483e-5,-4.248505510679363e-8,0.002323769722566849,3.2483621858754785e-5,-4.2325943183644296e-8,0.002324398904211897,3.2460944922610885e-5,-4.228942774440365e-8,0.002325056179267136,3.258120401470381e-5,-4.241896142727533e-8,0.002325671964702718,3.2846122159074696e-5,-4.271751943685757e-8,0.00232618144268266,3.321386581244003e-5,-4.3137207029593565e-8,0.0023265488268709705,3.36082031220369e-5,-4.3589753742231386e-8,0.0023267814240886583,3.394420957442691e-5,-4.397636855767629e-8,0.0023269254239565483,3.415782391829717e-5,-4.422212158225807e-8,0.002327046906947544,3.422452814123435e-5,-4.429770088385412e-8,0.002327209206277997,3.4160981089080925e-5,-4.422143906155781e-8,0.002327456336525311,3.401357864203633e-5,-4.4046282714445835E-08,0.002327805923589105,3.384194337626255e-5,-4.384093488623098e-8,0.002328250166554385,3.37036441574621e-5,-4.3672328614357636e-8,0.002328761740259225,3.364315089403521e-5,-4.3592791245387643e-8,0.002329301915681379,3.36856352720997e-5,-4.3632602011700155e-8,0.002329829055291661,3.383516729126079e-5,-4.379753708045467e-8,0.0023303062390849644,3.407663050535043e-5,-4.407078165874924e-8,0.0023307070359199853,3.438049828740393e-5,-4.441833484198168e-8,0.0023310187619350036,3.470925636680583e-5,-4.4796515547741785e-8,0.0023312431048083324,3.502410718649536e-5,-4.515990686671555e-8,0.002331394528886721,3.5290797443504604e-5,-4.5468276438613356e-8,0.002331497260081565,3.5483844383961805e-5,-4.569154976787356e-8,0.002331581733856791,3.558904226640621e-5,-4.581270005257149e-8,0.0023316810811048884,3.560465423137779e-5,-4.582909582100883e-8,0.002331827771099224,3.5541816076164474e-5,-4.575300867708182e-8,0.0023320501595354027,3.542447396167401e-5,-4.561169901534009e-8,0.0023323683909373285,3.528871876135906e-5,-4.5446880835164095e-8,0.0023327891822946096,3.51805346933835e-5,-4.531231018055253e-8,0.002333299958278486,3.515015003696038e-5,-4.52672578511267e-8,0.0023338645432176663,3.5241270465413334e-5,-4.5363790266725256e-8,0.002334424562220092,3.5475412457926315e-5,-4.562814505895616e-8,0.0023349112408662287,3.583613212030472e-5,-4.6041947983230845e-8,0.002335268146958933,3.626338247097496e-5,-4.6535418255023436e-8,0.0023354760591965088,3.666773954728629e-5,-4.700402689339779e-8,0.0023355644528050535,3.696270836812873e-5,-4.7346394509497067e-8,0.002335600051392683,3.7098371862978543e-5,-4.75036656435806e-8,0.002335658860810056,3.707695140177438e-5,-4.747763880896117e-8,0.0023357987401432536,3.694435600604198e-5,-4.732093922172631e-8,0.002336045463982361,3.6767616798790464e-5,-4.711093689128459e-8,0.002336393449628172,3.661235323283033e-5,-4.6923808409687194e-8,0.00233681482692482,3.6528212315890726e-5,-4.68177625437056e-8,0.002337270388702322,3.6542959451067806e-5,-4.682607312286444e-8,0.0023377189367930666,3.66625719363429e-5,-4.6956871248297825e-8,0.002338124071548144,3.687450363014641e-5,-4.7196561629315964e-8,0.002338458716826444,3.71523445299233e-5,-4.75149713046986e-8,0.0023387078440758034,3.7461115310449495e-5,-4.787144263559505e-8,0.002338869585723431,3.7762817841687184e-5,-4.822140859107426e-8,0.0023389547817296704,3.802184043837775e-5,-4.852287616148231e-8,0.0023389850485431105,3.820974950563554e-5,-4.87421532200505e-8,0.002338989627065774,3.830895059743735e-5,-4.885815585004515e-8,0.0023390014899789605,3.8314840733578865e-5,-4.8864887051675046e-8,0.002339053227796983,3.823643256374001e-5,-4.8772155817743224e-8,0.0023391730470084114,3.809565596331883e-5,-4.860485990028719e-8,0.002339381007965399,3.7925524692509784e-5,-4.840106376674009e-8,0.0023396854228536312,3.776719520424567e-5,-4.82088209371393e-8,0.0023400793116841023,3.76654727255943e-5,-4.808107898018889e-8,0.002340537481346002,3.766178500501879e-5,-4.8067398459253976e-8,0.0023410160318337752,3.778395059438169e-5,-4.820166978989883e-8,0.0023414571514578423,3.8033753723512084e-5,-4.8487112668261064e-8,0.002341802014567862,3.837655741982126e-5,-4.888372230559299e-8,0.0023420114228051465,3.874102641968516e-5,-4.930783648964436e-8,0.0023420863661792065,3.9036695298684036e-5,-4.965293287954776e-8,0.0023420745217566197,3.918717458210972e-5,-4.982885057806455e-8,0.0023420538209714603,3.91622722916344e-5,-4.9799546790811774e-8,0.0023421004046062298,3.8988852688015025e-5,-4.959573407663678e-8,0.0023422602630217295,3.8734768578304047e-5,-4.9296049457022376e-8,0.0023425391360975905,3.847893082192605e-5,-4.899224673303789e-8,0.0023429102765989336,3.828568044273994e-5,-4.8759531463412606e-8,0.0023433299940436355,3.819251167163617e-5,-4.8642341136861975e-8,0.0023437518655280796,3.8209551159922836e-5,-4.865357708177263e-8,0.0023441359775748295,3.8325147109487965e-5,-4.87807783260245e-8,0.002344453495623456,3.8512988018584136e-5,-4.8994075741131246e-8,0.002344688236531956,3.873852777500904e-5,-4.9253489797137967e-8,0.0023448367420634006,3.896429832747165e-5,-4.951513690495988e-8,0.002344907563344286,3.915445172418351e-5,-4.973668851539436e-8,0.002344919846223446,3.927885131661452e-5,-4.9882338277690744e-8,0.0023449010717055798,3.9316757036171124e-5,-4.992722780668246e-8,0.0023448838074805536,3.925979958184939e-5,-4.986094461349622e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json new file mode 100644 index 000000000..f46c700e5 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":18000,"numberOfSamples":1000,"samples":[0.002344901558802442,3.911368303105064e-5,-4.968948981883951e-8,0.002344984132234963,3.8898163040661456e-5,-4.9435280092255396e-8,0.002345153076453194,3.8645137911801235e-5,-4.913505665071581e-8,0.0023454177649364274,3.8394882701718704e-5,-4.883571430956027e-8,0.0023457726182683734,3.8190636084535106e-5,-4.858818570335279e-8,0.0023461958479369647,3.8071833815956895e-5,-4.8439580759263195E-08,0.0023466502566154754,3.806617270836784e-5,-4.8423700396250246e-8,0.0023470871667342188,3.818099295284342e-5,-4.855052067391149e-8,0.0023474547964515697,3.8395736841710905e-5,-4.8796864492445077e-8,0.002347711548848421,3.865908630266998e-5,-4.9102715263344044e-8,0.0023478420825502667,3.889571950044163e-5,-4.937914952780937e-8,0.00234786961391877,3.902607152063935e-5,-4.9531851099022974e-8,0.0023478548636246925,3.899526350333567e-5,-4.949545923878963e-8,0.002347876570857601,3.8797420616696476e-5,-4.926230021920203e-8,0.0023480009856264934,3.8479554435582394e-5,-4.888691218568922e-8,0.002348257394842648,3.81212678497871e-5,-4.8462214576854004e-8,0.0023486326479069406,3.7803093228172886e-5,-4.8082513592352674e-8,0.0023490835964367573,3.75814623825538e-5,-4.781433129307214e-8,0.002349556312825578,3.747939916176964e-5,-4.768549705089819e-8,0.002350001794120482,3.7490379203984336e-5,-4.768944037993623e-8,0.002350384381521822,3.758800212452211e-5,-4.779618621991062e-8,0.0023506841057128985,3.773572437125139e-5,-4.796348785816809e-8,0.0023508956980960788,3.7894232799687954e-5,-4.814536983155262e-8,0.00235102648099269,3.802641740658273e-5,-4.829803528414698e-8,0.002351094173287532,3.810084978765315e-5,-4.838411531070628e-8,0.0023511246964647747,3.8094608924835005e-5,-4.837614007717066e-8,0.0023511496348331447,3.799585924542727e-5,-4.825963731338258e-8,0.0023512029179003826,3.780605403700456e-5,-4.803571540037979e-8,0.002351316493203054,3.754110540847055e-5,-4.772242618165293e-8,0.002351515254331023,3.723065606146325e-5,-4.7353971759481864e-8,0.0023518120205759476,3.6914840723378074e-5,-4.697706960436158e-8,0.0023522036900594134,3.663842066327486e-5,-4.664428486396447e-8,0.0023526697415857454,3.6442835626573675e-5,-4.6404850464569947E-08,0.0023531739492806607,3.635743472275251e-5,-4.629433098034591e-8,0.0023536695969230293,3.639153741844735e-5,-4.632502065598751e-8,0.002354107963028887,3.65290387843179e-5,-4.64791633358682e-8,0.0023544493334192655,3.672744771866113e-5,-4.670739713326941e-8,0.0023546748244885193,3.692340046714689e-5,-4.693502893752279e-8,0.0023547957604870243,3.704596407123413e-5,-4.707779081016492e-8,0.002354855915443392,3.703656572046711e-5,-4.70656375977696e-8,0.0023549223160394474,3.68699978500431e-5,-4.6867843166706427e-8,0.002355064610704272,3.656683381659626e-5,-4.65078344897485e-8,0.002355330456332751,3.6188645949168455e-5,-4.605762360942627e-8,0.0023557290800031,3.581614088997792e-5,-4.561209830788785e-8,0.0023562313149006323,3.552104851024793e-5,-4.525598622392911e-8,0.002356784170343763,3.534573263514571e-5,-4.503985226093692e-8,0.00235733028458666,3.529761527789713e-5,-4.49733843052568e-8,0.002357823000083982,3.535587514723036e-5,-4.503300722505471e-8,0.0023582334607192713,3.548324139112816e-5,-4.517550230472812e-8,0.0023585511399880337,3.5636946080439145e-5,-4.535076312918837e-8,0.002358780962041987,3.577633956909642e-5,-4.551078335076926e-8,0.0023589395842511522,3.5867314155800855e-5,-4.561499749370089e-8,0.002359052080351249,3.588475773629073e-5,-4.563332272362631e-8,0.002359149147828655,3.58142084645814e-5,-4.554820350082022e-8,0.0023592643626533377,3.565335730415486e-5,-4.5356402142557453E-08,0.002359430841246486,3.541339537933329e-5,-4.507057121932486e-8,0.0023596768567981123,3.511952535451973e-5,-4.471987460114685e-8,0.0023600205188522927,3.480948168500788e-5,-4.4348345490610194e-8,0.0023604644698905536,3.452896471445555e-5,-4.400967986329848e-8,0.002360992350010294,3.432364769813786e-5,-4.375798612579386e-8,0.002361569042366369,3.422878850205881e-5,-4.363559641492016e-8,0.0023621460051594665,3.4259012492440044e-5,-4.3660883375380844e-8,0.0023626713616961515,3.440164922381125e-5,-4.3820080092443e-8,0.002363102567048767,3.4616447316981465e-5,-4.4066547053651594e-8,0.002363418276529288,3.484277697645849e-5,-4.432896661511161e-8,0.002363625904080295,3.501331834422755e-5,-4.452741922922826e-8,0.002363762140673494,3.50713100177352e-5,-4.459391491625094e-8,0.0023638851680286292,3.498694287747205e-5,-4.449207573009896e-8,0.0023640594734086117,3.4767688893707976e-5,-4.422967279774819e-8,0.002364337052724743,3.44579776897352e-5,-4.385849503168624e-8,0.0023647414089119547,3.412668761857231e-5,-4.345970698104098e-8,0.002365260922020612,3.3846152104623893e-5,-4.3119075143364176e-8,0.0023658544426327192,3.367093165302294e-5,-4.290180278936738e-8,0.0023664660490979486,3.362478090509265e-5,-4.2836928949552116e-8,0.002367041894211088,3.3699477499923e-5,-4.29156715149733e-8,0.0023675425813141815,3.3863070665591675e-5,-4.3100929149056666e-8,0.002367948361133545,3.407186155979982e-5,-4.334131276515742e-8,0.0023682583104001854,3.4281125480317074e-5,-4.358383945165417e-8,0.002368486347050624,3.4452289918945094e-5,-4.378254145392837e-8,0.002368656569458454,3.455667745010834e-5,-4.3903037676489125e-8,0.002368799213631667,3.457704329979657e-5,-4.39244496666408e-8,0.0023689474323752143,3.450818698611703e-5,-4.384015205758009e-8,0.0023691344170632556,3.4357416482385305e-5,-4.3658308045106786e-8,0.002369390127550806,3.4144946605107745e-5,-4.340234799568976e-8,0.002369737050180081,3.390358038895181e-5,-4.311066755298774e-8,0.0023701849761484078,3.367640314542406e-5,-4.283404275674573e-8,0.002370725808074802,3.351105695568608e-5,-4.262900855450118e-8,0.0023713306372070224,3.344998149691437e-5,-4.254638292238252e-8,0.0023719519724518553,3.351806525291478e-5,-4.261657041710548e-8,0.0023725329401571575,3.371175366291013e-5,-4.283642668257849e-8,0.0023730222295828053,3.3995002702351264e-5,-4.316414308379054e-8,0.002373389973065274,3.430578520129685e-5,-4.3526671192005085e-8,0.0023736381505010734,3.4572328983584834e-5,-4.38388242013889e-8,0.0023738010098588143,3.473355012811767e-5,-4.402752760022938e-8,0.00237393531167498,3.4756315512409036e-5,-4.40524591922618e-8,0.0023741041518875864,3.4643979531241987e-5,-4.391644020525929e-8,0.0023743597715574142,3.443428581685144e-5,-4.366325823519776e-8,0.002374730275263065,3.418808569592938e-5,-4.336456918047751e-8,0.0023752135991477064,3.397259983293269e-5,-4.3100208376556956e-8,0.002375779941817866,3.384415723124978e-5,-4.293768908589405e-8,0.0023763813960745914,3.383531261076801e-5,-4.2916694132470866e-8,0.0023769653178674142,3.394966546843266e-5,-4.304258701004152e-8,0.0023774870203995034,3.416488144273135e-5,-4.3289677344681276e-8,0.002377918235263097,3.444154087954113e-5,-4.3611544323386645e-8,0.0023782499725694506,3.473394751413563e-5,-4.3953871457543554e-8,0.002378490676997382,3.499948400810439e-5,-4.4265690042450136e-8,0.002378661785361829,3.520478219905836e-5,-4.45068771402646e-8,0.0023787927125148967,3.5328684667322306e-5,-4.465179236135274e-8,0.0023789164661922424,3.5362982250262976e-5,-4.4690190041228925e-8,0.002379066168330197,3.531210837114164e-5,-4.462683919511151e-8,0.0023792721073279486,3.519257964256899e-5,-4.448085699607398e-8,0.0023795586569317585,3.50323249823028e-5,-4.4284979324380445e-8,0.0023799404698155602,3.486935159153574e-5,-4.408411931944888e-8,0.00238041786411957,3.4748539855140206e-5,-4.39317205628605e-8,0.0023809723866902452,3.471506365948844e-5,-4.38820214882267e-8,0.0023815649852208134,3.48036933953732e-5,-4.397726798401748e-8,0.0023821401857936045,3.502563195655052e-5,-4.423182507960411e-8,0.0023826385643343764,3.535804096673262e-5,-4.461940477123716e-8,0.002383015549616911,3.574351081297848e-5,-4.507218244911266e-8,0.0023832590121007622,3.610394768843331e-5,-4.549722500288198e-8,0.0023833960729126107,3.6365403192313095e-5,-4.5806082879119395e-8,0.0023834844707587666,3.6482794911242564e-5,-4.594430660481812e-8,0.0023835926131679144,3.6453070353420245e-5,-4.5907232417809996e-8,0.0023837780068744117,3.6312527567923084e-5,-4.573698815443366e-8,0.002384072504190872,3.612228458903607e-5,-4.550549834835012e-8,0.002384477540262076,3.594951747525463e-5,-4.529245938741677e-8,0.0023849679834993427,3.5850894327466484e-5,-4.516576690664186e-8,0.0023855013057676516,3.586164050491832e-5,-4.5168379713013465e-8,0.0023860287687607305,3.599113018920311e-5,-4.5312724744731254e-8,0.002386506003294634,3.6224400739596276e-5,-4.558208417162952e-8,0.0023869010817420566,3.65281921996621e-5,-4.5937482125035984e-8,0.0023871989250919125,3.685955147899608e-5,-4.632784241705567e-8,0.002387401820865755,3.7174763898084735e-5,-4.6700739768763154e-8,0.002387526785819297,3.7436733765039484e-5,-4.701140163670798e-8,0.0023876010849905364,3.761979915266924e-5,-4.7228628272774645e-8,0.00238765727041805,3.771186667545958e-5,-4.733742080218521e-8,0.002387728725155376,3.7714449644070145e-5,-4.7339022820513065e-8,0.0023878460686218663,3.764152424039279e-5,-4.724953688088123e-8,0.002388034216505095,3.751792399775393e-5,-4.709805432518741e-8,0.0023883096269505005,3.7377464417580596e-5,-4.692455759226862e-8,0.002388677274146209,3.726041803036959e-5,-4.677709598428318e-8,0.0023891272588487315,3.720938268477899e-5,-4.6706986835451093e-8,0.0023896319399229,3.7262272101778856e-5,-4.6760418636059854e-8,0.0023901458647094826,3.7441849520893325e-5,-4.696572132812101e-8,0.002390611746871633,3.774354152197786e-5,-4.731844757029362e-8,0.0023909747687158945,3.81269601588696e-5,-4.777091840959034e-8,0.002391202906290385,3.8519192870702565e-5,-4.823603735908806e-8,0.0023913040660786186,3.883476948556154e-5,-4.8611270833999345e-8,0.002391328128732739,3.9006667440986484e-5,-4.881589018117696e-8,0.00239134943562406,3.90124026913742e-5,-4.882222941094568e-8,0.002391438487576229,3.8880411452464615e-5,-4.866331475848319e-8,0.0023916383708005662,3.867507853522781e-5,-4.841510309828039e-8,0.00239195590432241,3.847153998643774e-5,-4.816669872463936e-8,0.0023923668018147257,3.833341819751815e-5,-4.799408876442468e-8,0.002392828007801345,3.830015839190798e-5,-4.794511807386538e-8,0.0023932907590552147,3.8383856123547755e-5,-4.8035481865629606e-8,0.00239371096036409,3.857245714578611e-5,-4.82521178047072e-8,0.0023940559931876475,3.883616405890264e-5,-4.856042818085454e-8,0.0023943082930363074,3.9134985874419545e-5,-4.891304887908877e-8,0.0023944662220829185,3.9426309839536574e-5,-4.925889576057055e-8,0.0023945426540706474,3.967167832740828e-5,-4.955145041930234e-8,0.0023945617795173573,3.984206233309221e-5,-4.975530429415886e-8,0.002394554803373748,3.992121054124771e-5,-4.985033218746083e-8,0.00239455526447015,3.990695202747839e-5,-4.983330111917577e-8,0.002394594661569528,3.9810623353083994e-5,-4.971716322616409e-8,0.0023946988252229935,3.965513390937551e-5,-4.952874150407233e-8,0.0023948850777624304,3.9472259325648355e-5,-4.9305586614794425e-8,0.00239515997526318,3.9299439114975593e-5,-4.909233045733194e-8,0.0023955174021503037,3.9175945382072434e-5,-4.893628682300761e-8,0.002395937007932476,3.9137890421156826e-5,-4.8881533371822775e-8,0.002396383695909191,3.921131979781866e-5,-4.896047917113908e-8,0.0023968099593563576,3.9403258047878505e-5,-4.918277327372618e-8,0.002397163497613983,3.969252739918278e-5,-4.952387416863947e-8,0.0023974015854493413,4.002518309701328e-5,-4.99193026544001e-8,0.002397509675261247,4.0321678158350774e-5,-5.027326909845036e-8,0.0023975151824612907,4.049998955523513e-5,-5.048669925554299e-8,0.0023974844671535013,4.050819106081807e-5,-5.049657166197553e-8,0.002397499090668801,4.034853438152713e-5,-5.0304833087084466e-8,0.0023976229322382613,4.007667775600651e-5,-4.997738881179162e-8,0.002397879519985696,3.977656534145411e-5,-4.96140773901125E-08,0.0023982502957491016,3.9527801939768744e-5,-4.93098968993077e-8,0.002398689129527083,3.938302665345923e-5,-4.912820157919039e-8,0.002399141121851689,3.936112368628708e-5,-4.9092584839070415e-8,0.002399557122870482,3.945190021821551e-5,-4.919217196871091e-8,0.002399901681190261,3.9625470595205126e-5,-4.939240127952472e-8,0.0024001557140803276,3.9841782493496445e-5,-4.9646053324931454e-8,0.00240031603823306,4.0058414074826275e-5,-4.990243651972935e-8,0.0024003933848322214,4.02365269468108e-5,-5.0114610330648764e-8,0.0024004095942288745,4.034539638022784e-5,-5.0245052214989265e-8,0.0024003941453741816,4.0365693589607254e-5,-5.0269831914895396e-8,0.0024003801497172756,4.0291449589680024e-5,-5.018110199371788e-8,0.0024004000531943383,4.013054961443052e-5,-4.9987707246810776e-8,0.0024004814327914467,3.990360304898532e-5,-4.9713797552627094e-8,0.0024006433784475078,3.96412645683471e-5,-4.9395635374628664e-8,0.002400893829350257,3.938038444905259e-5,-4.907710595026679e-8,0.0024012280072063545,3.9159384872200925e-5,-4.88043653842751e-8,0.002401627983789423,3.901309599496099e-5,-4.861979177381442e-8,0.0024020634684160267,3.896712290496793e-5,-4.8555194568685595e-8,0.0024024942344411503,3.903172416614497e-5,-4.862420076639316e-8,0.0024028751869229125,3.919562945854613e-5,-4.881439962151439e-8,0.0024031652429550516,3.942160059336088e-5,-4.908159561584208e-8,0.0024033401183291706,3.964740296327271e-5,-4.9350792145343485e-8,0.002403406122558092,3.9796826052265784e-5,-4.952959530944614e-8,0.0024034075771528214,3.9802695108078196e-5,-4.953626629721684e-8,0.002403418663533099,3.963531471377749e-5,-4.933424264248788e-8,0.002403517483513351,3.9320414167136537e-5,-4.895377104664041e-8,0.00240375400559779,3.893213949475224e-5,-4.848339885001966e-8,0.0024041310350306584,3.856275056172833e-5,-4.803360539427687e-8,0.002404608522803643,3.8287467657906244e-5,-4.7694797328705657e-8,0.002405124618903588,3.814364277978108e-5,-4.7512463896821273e-8,0.002405618526611032,3.812961405164927e-5,-4.748570334517685e-8,0.0024060450436589023,3.821594093326314e-5,-4.7580367143404314e-8,0.002406379515424713,3.8359386346411104e-5,-4.774544974096198e-8,0.0024066165603803674,3.851416440298249e-5,-4.7926337409967924e-8,0.002406766193043988,3.863916072047892e-5,-4.8073452764022304e-8,0.0024068496190933135,3.870200493814187e-5,-4.814731567974312e-8,0.0024068954751543747,3.8681384728337856e-5,-4.812157280049673e-8,0.0024069363302526986,3.8568469741027326e-5,-4.7984907944708237e-8,0.002407005092363638,3.8367620010703626e-5,-4.774197343294295e-8,0.0024071311642991904,3.8096143001373596e-5,-4.741307791637707e-8,0.00240733648448139,3.7782662926820594e-5,-4.703219316231057e-8,0.0024076319591230843,3.746376601902139e-5,-4.664296180742872e-8,0.0024080150100535243,3.717901842199488e-5,-4.629284851707181e-8,0.0024084688627471237,3.6964873105139e-5,-4.6025986316963574e-8,0.002408963950387803,3.684822663195842e-5,-4.587550926484438e-8,0.002409461535231225,3.6840528070730786e-5,-4.585634918576009e-8,0.0024099194289861434,3.6933325176103526e-5,-4.595954827428758e-8,0.002410299639091284,3.709615129870326e-5,-4.6149286023116704e-8,0.0024105775736920194,3.727809719448076e-5,-4.636443290545415e-8,0.0024107515290991625,3.7414947503234764e-5,-4.652707276927955e-8,0.0024108494422053167,3.744332346904537e-5,-4.6559778833502254e-8,0.0024109280582808607,3.732068196771385e-5,-4.641012552830863e-8,0.0024110599588631028,3.704486401008396e-5,-4.6074593882075726e-8,0.0024113092457543352,3.666207745630117e-5,-4.560832165779338e-8,0.0024117058579894443,3.625440453889971e-5,-4.511002792620606e-8,0.00241223320394758,3.590984658345839e-5,-4.468591059086578e-8,0.0024128367433007784,3.569068786073452e-5,-4.4411566261216975e-8,0.002413447167854588,3.561679042361314e-5,-4.431182379727306e-8,0.002414003943390364,3.566857531655897e-5,-4.4364131508880796e-8,0.002414468917828636,3.5802128924618506e-5,-4.45164528407243e-8,0.0024148287689588913,3.596582802687616e-5,-4.4707042649597976e-8,0.0024150906323866994,3.6112294226174406e-5,-4.487876186163635e-8,0.0024152756199526553,3.620466985756144e-5,-4.4986732147043753e-8,0.002415412983422486,3.621886433437632e-5,-4.5001246595991545e-8,0.002415535705571361,3.614384708305006e-5,-4.490832914512481e-8,0.0024156771163272757,3.59813440871689e-5,-4.470949129805716e-8,0.0024158678193869285,3.5745351613970705e-5,-4.442116416614326e-8,0.002416132416351302,3.546120330008051e-5,-4.4073537242749924e-8,0.0024164859220694446,3.516352548830468e-5,-4.370808294460031e-8,0.00241693034169506,3.4892359785693274e-5,-4.337295078484064e-8,0.0024174524408001833,3.468719086143528e-5,-4.3115900098566585e-8,0.002418023930833043,3.457944258321774e-5,-4.2975364635792224e-8,0.002418604957254082,3.4584872568489474e-5,-4.297126534219297e-8,0.002419150952416655,3.469789771516463e-5,-4.30979643194712e-8,0.0024196218300455495,3.48898251884466e-5,-4.3321783064122653e-8,0.0024199916518604678,3.51121471359681e-5,-4.3584618304832864e-8,0.002420256595170644,3.5304987746849386e-5,-4.381393076419317e-8,0.002420439070447764,3.54098460734516e-5,-4.393818240200917e-8,0.002420585972638163,3.5384692412318615e-5,-4.39053621156832e-8,0.0024207596255476035,3.521796937688811e-5,-4.3700303187940916e-8,0.00242102169533141,3.493649672842064e-5,-4.335458114598203e-8,0.0024214136673983418,3.460203389622349e-5,-4.294254391313394e-8,0.0024219412696859064,3.4294397281599166e-5,-4.2560928350924536e-8,0.002422570997871016,3.40859042454751e-5,-4.2297873198728576e-8,0.002423241774708797,3.401825188013031e-5,-4.220478688725671e-8,0.002423886226246646,3.4092534703597756e-5,-4.2284029344064495e-8,0.002424450990286084,3.4275193790697986e-5,-4.2495842308161056e-8,0.002424907897269756,3.4513860089160096e-5,-4.277731373829174e-8,0.002425254646420478,3.475404717614502e-5,-4.306250514379759e-8,0.0024255087764721997,3.495073098604035e-5,-4.329653600382793e-8,0.0024256997145779124,3.5073628211510956e-5,-4.344214009667556e-8,0.0024258619447215263,3.510795400575972e-5,-4.3480765687463235e-8,0.002426030203565686,3.505305808974759e-5,-4.341105272837135e-8,0.0024262362674914877,3.4920608081784176e-5,-4.3246676601309794e-8,0.0024265064422872465,3.473295174654087e-5,-4.3014350394663596e-8,0.0024268589868617334,3.4521461493677566e-5,-4.275180769052857e-8,0.002427301138503399,3.432410975088323e-5,-4.250490759677728e-8,0.0024278260913050916,3.418129571204661e-5,-4.2322676945393295e-8,0.002428411097108386,3.4129280643721544e-5,-4.2249456747169526e-8,0.002429018449007624,3.4191654643649516e-5,-4.231457750259257e-8,0.002429600921945329,3.4370848029145066e-5,-4.2521942446609057e-8,0.002430111852543173,3.464306742421111e-5,-4.284362752322127e-8,0.0024305177078212167,3.4960014332554184e-5,-4.322166147588011e-8,0.0024308089963019476,3.525864256604065e-5,-4.3579634420191055e-8,0.0024310052103568625,3.54768490791095e-5,-4.3841674275576033e-8,0.0024311514832499894,3.5570331945046896e-5,-4.3953026184890535e-8,0.0024313076209347257,3.552531869349453e-5,-4.389576556823521e-8,0.0024315325810961527,3.5363327353876604e-5,-4.369491031447773e-8,0.0024318686265469066,3.513647254223246e-5,-4.341303915546696e-8,0.0024323294873825944,3.491423748049786e-5,-4.3134445579347336e-8,0.002432896167264619,3.476495141289254e-5,-4.294268271529085e-8,0.0024335222309093078,3.4737272570903575e-5,-4.2897907650809233e-8,0.0024341473034816276,3.484777220801906e-5,-4.3021473228785095e-8,0.0024347141143896403,3.5078911481254485e-5,-4.3293103813853885e-8,0.0024351828565165653,3.5387420696509406e-5,-4.3660807647483854e-8,0.0024355382696882246,3.571869639847352e-5,-4.4058284519528546e-8,0.0024357886769330174,3.602113490945862e-5,-4.442243365076725e-8,0.0024359595899447976,3.6255981177570735e-5,-4.470551282002724e-8,0.002436085616257832,3.64014787157889e-5,-4.4880378715262854e-8,0.002436203431207954,3.645261201880796e-5,-4.49403083766768e-8,0.002436346881699283,3.641860110716656e-5,-4.489600455109322e-8,0.0024365439720128446,3.631989439005647e-5,-4.477193408814986e-8,0.002436814886263786,3.618547757967348e-5,-4.460305079373914e-8,0.0024371701965660787,3.605043991849035e-5,-4.443187709405474e-8,0.0024376087810835056,3.5953118153448417e-5,-4.430512313890507e-8,0.002438115638816738,3.593080766479197e-5,-4.42685612060324e-8,0.0024386606910261066,3.601319060175138e-5,-4.43590417894124e-8,0.0024392005329820178,3.621366124796751e-5,-4.459380937231256e-8,0.0024396852406738875,3.652073535771226e-5,-4.495979153559817e-8,0.002440070792536112,3.689393707336404e-5,-4.540830813754903e-8,0.0024403341938348043,3.7269028978704966e-5,-4.586125501539923e-8,0.0024404847869948067,3.757420212930339e-5,-4.6230801286461525e-8,0.0024405649339235085,3.775253295873212e-5,-4.6446847061845124e-8,0.0024406379971211724,3.778108573313487e-5,-4.6480442904616754e-8,0.0024407684360130493,3.7678040163525975e-5,-4.635265130274541e-8,0.002441002576816896,3.749564568269083e-5,-4.6126207922268527e-8,0.0024413569455008703,3.730344562480743e-5,-4.58853778897302e-8,0.0024418164775716804,3.716885726843634e-5,-4.571251766869334e-8,0.002442341086211704,3.7141004685513786e-5,-4.566838003723965e-8,0.002442877339190302,3.72411338432493e-5,-4.5780171769525656e-8,0.002443371731515466,3.746064251142103e-5,-4.603872319654958e-8,0.002443782406429579,3.7766052234272806e-5,-4.640413953378797e-8,0.002444086872764397,3.810893879139721e-5,-4.681768347059421e-8,0.002444284388309687,3.843785498667255e-5,-4.721633349478445e-8,0.002444393232414692,3.8709012326829734e-5,-4.7546011694557105e-8,0.002444444549161754,3.889334328329184e-5,-4.7770454539860257e-8,0.002444475074792687,3.8979187827749855e-5,-4.787468720267451e-8,0.0024445206944451194,3.8971331473534686e-5,-4.7863936944109584e-8,0.0024446118314487707,3.8887888173957045e-5,-4.775982946018779e-8,0.0024447706911564257,3.8756507830295623e-5,-4.7595742185117445e-8,0.002445009754862674,3.861079858955392e-5,-4.741246632391835e-8,0.002445330792627307,3.848709249206566e-5,-4.7254353116952106e-8,0.0024457239072774276,3.84210898084392e-5,-4.7165331531864033e-8,0.002446166646694304,3.844355610942536e-5,-4.71836986496915e-8,0.002446624062616858,3.857428817952799e-5,-4.733464480752854e-8,0.0024470514934107203,3.88144481598043e-5,-4.762062321108293e-8,0.002447402125327943,3.913928762815128e-5,-4.801212199106996e-8,0.0024476400881559847,3.9495739935443694e-5,-4.8444475535150416e-8,0.0024477561339314394,3.981049166716775e-5,-4.8827712071902615e-8,0.002447778077693695,4.001077266348328e-5,-4.9072160123498955e-8,0.0024477670483197492,4.005148747549024e-5,-4.9121840338880554e-8,0.0024477974812433497,3.993465087268592e-5,-4.897832831402965e-8,0.002447929926440992,3.9709268450711776e-5,-4.870064967828901e-8,0.0024481909223161946,3.9451954414470326e-5,-4.838174394154787e-8,0.0024485684783898502,3.923993501418732e-5,-4.811575988446022e-8,0.0024490213965491316,3.9129377699806304e-5,-4.797180052202577e-8,0.0024494948154261892,3.91451644029732e-5,-4.798138431887394e-8,0.002449935069477873,3.928119976470324e-5,-4.8138482471436045e-8,0.002450300397506881,3.9507323269912974e-5,-4.840749035993413e-8,0.0024505668157711494,3.9779044908857327e-5,-4.8734735279841313E-08,0.0024507297637555462,4.004759573096723e-5,-4.906061161920809e-8,0.002450802394303154,4.02688488745371e-5,-4.9330599704006644e-8,0.0024508113644507706,4.0410128173367605e-5,-4.95038655686505e-8,0.002450791125069385,4.0454212555310635e-5,-4.955844487476108e-8,0.0024507778465312773,4.040035570468197e-5,-4.949267054201453e-8,0.0024508040198822152,4.026270069107783e-5,-4.932327950223557e-8,0.0024508944505534447,4.006688255862525e-5,-4.908122347286046e-8,0.0024510638634689867,3.984580917053899e-5,-4.880648823794057e-8,0.00245131584498336,3.963541528939374e-5,-4.854295462312273e-8,0.002451642653661857,3.9470681141633724e-5,-4.833364518839405e-8,0.002452025536044154,3.938176083843848e-5,-4.8216083300638214e-8,0.002452435488543121,3.938977033584164e-5,-4.8217107227132724e-8,0.002452835048062748,3.950174696583605e-5,-4.8346481745672895e-8,0.0024531824507044967,3.970500384005907e-5,-4.858962496972789e-8,0.0024534396241559695,3.9962702831889606e-5,-4.890182990265696e-8,0.0024535843268946146,4.021443150526203e-5,-4.920880941676828e-8,0.002453623652929858,4.0386636134526066e-5,-4.9419622792017125e-8,0.002453601452891794,4.041499005959166e-5,-4.945444695873122e-8,0.0024535904575645672,4.0272043808040254e-5,-4.9278768855135644e-8,0.002453667088416081,3.9984366591700615e-5,-4.892445528448971e-8,0.0024538804961186404,3.9625472135700606e-5,-4.8481018851177726e-8,0.002454234041076148,3.9286627001372286e-5,-4.8059919577965076e-8,0.002454688758937021,3.90430339964667e-5,-4.7753378723272426e-8,0.002455182859858328,3.893307901809375e-5,-4.760913419343073e-8,0.0024556538362148746,3.895585698194267e-5,-4.762729962876685e-8,0.0024560537286482022,3.908100050787737e-5,-4.777201985779246e-8,0.00245635559786168,3.92623565237223e-5,-4.7987768345426784e-8,0.002456553543520675,3.945013089553443e-5,-4.821391608652092e-8,0.002456659304914327,3.9599666210168044e-5,-4.839543997652059e-8,0.002456697551274787,3.9677063676223765e-5,-4.849000855734107e-8,0.002456700822614684,3.966238759049165e-5,-4.847222180997126e-8,0.0024567044573505052,3.9550907364328136e-5,-4.833540821334541e-8,0.0024567417680072287,3.935256550822404e-5,-4.8091109193474636e-8,0.0024568398052084747,3.9089819952275556e-5,-4.776643242859904e-8,0.002457016102034005,3.879409971555748e-5,-4.739964644423014e-8,0.0024572767266246858,3.850135084065896e-5,-4.7034702557923994e-8,0.002457615714144817,3.8247292949526414e-5,-4.671548886753261e-8,0.002458015719767934,3.806281830374309e-5,-4.648030512056859e-8,0.0024584497093368225,3.7969709899505705e-5,-4.6356668032574766e-8,0.0024588835950892117,3.797672416493626e-5,-4.6356402548602995e-8,0.002459280019112911,3.8076035091713856e-5,-4.647098884390965e-8,0.0024596039507214372,3.8240450757803655e-5,-4.666776031810568e-8,0.0024598307142160007,3.842294852242427e-5,-4.68890281670926e-8,0.002459955918353923,3.8561282527527495e-5,-4.7057687283657186e-8,0.0024600044256263562,3.85906258738798e-5,-4.7093002809037085e-8,0.0024600323640595525,3.846469351560399e-5,-4.693699010582562e-8,0.002460115198327215,3.817888591278212e-5,-4.658318142014719e-8,0.0024603211513315733,3.778139333481038e-5,-4.609033001301854e-8,0.0024606816896058582,3.7360118141523624e-5,-4.5566248750844804e-8,0.0024611773581020993,3.700873869629158e-5,-4.5126111329188663e-8,0.0024617480565587665,3.679136890764092e-5,-4.484915535672109e-8,0.0024623194040428297,3.6725241793431914e-5,-4.4757458521259293e-8,0.002462828313114861,3.6785610286324895e-5,-4.4821776764596e-8,0.0024632368323780508,3.692313753770688e-5,-4.49825480110503e-8,0.002463533911415987,3.7081973038857536e-5,-4.517174974987359e-8,0.002463730207416001,3.72123954530806e-5,-4.5328262829285335e-8,0.0024638508339381053,3.727738907944816e-5,-4.540602228952397e-8,0.0024639287406243806,3.725496815222289e-5,-4.537712390347134e-8,0.002463999440178538,3.7138246844026674e-5,-4.523220853693909e-8,0.002464096769834068,3.693441043162565e-5,-4.4979410248424785e-8,0.002464249278477507,3.6662920271676045e-5,-4.464221452771284e-8,0.0024644771058909905,3.6352892349154964e-5,-4.4256185173269244e-8,0.0024647894963774355,3.60394813223482e-5,-4.3864446992286476e-8,0.00246518333004217,3.575928664507124e-5,-4.3512032388348086e-8,0.00246564308966862,3.5545192829730305e-5,-4.323961698689231e-8,0.002466142462746481,3.54212599682058e-5,-4.30773347216381e-8,0.0024666475561435836,3.539825611996659e-5,-4.303928925890125e-8,0.002467121549800276,3.5470424064565755e-5,-4.311941218583528e-8,0.002467530510301026,3.5614038369783264e-5,-4.328936880925462e-8,0.0024678501018424014,3.578830836147025e-5,-4.3499317664747304e-8,0.00246807277205011,3.5939557401127685e-5,-4.368284640476247e-8,0.0024682141340358534,3.6009986170699735e-5,-4.3767824546787344e-8,0.002468315806348312,3.595167953042106e-5,-4.369398422338407e-8,0.002468440719277613,3.574403825458124e-5,-4.343483114258189e-8,0.0024686576285004418,3.5408406295791984e-5,-4.301598790135291e-8,0.002469016756628685,3.5009868675168896e-5,-4.251749277816247e-8,0.002469527016305481,3.4639085816369505e-5,-4.2051331770138575e-8,0.0024701491272457075,3.437918303108398e-5,-4.172053655964463e-8,0.0024708107727132163,3.4275108324639473e-5,-4.1581346163947136e-8,0.0024714349391305145,3.432221330845508e-5,-4.162900742123513e-8,0.0024719649634269477,3.447673339527891e-5,-4.181047415170179e-8,0.0024723756773897968,3.4677347990773343e-5,-4.2050733510056084e-8,0.0024726711706196352,3.486498141779451e-5,-4.227704642717137e-8,0.002472875776800631,3.499457801076819e-5,-4.243345755026598e-8,0.002473024311147267,3.5039164456257024e-5,-4.248596282344877e-8,0.002473154485424879,3.49892258455584e-5,-4.24219893311207e-8,0.0024733018836487117,3.485023256564978e-5,-4.224757508831041e-8,0.0024734966693373177,3.4639859686924084e-5,-4.198405931463602e-8,0.002473761122223743,3.4385249288497285e-5,-4.166470061647262e-8,0.0024741075410927692,3.412005527399114e-5,-4.1330957835760266e-8,0.0024745365035125336,3.388081280598191e-5,-4.1027956557272016e-8,0.0024750358991933777,3.3702298329276224e-5,-4.0798783384882296e-8,0.002475581446443766,3.361205682415149e-5,-4.0677810154140694e-8,0.0024761393094790735,3.362488283309667e-5,-4.068393655070341e-8,0.00247667099923248,3.3738415010136826e-5,-4.081509111115514e-8,0.0024771401592741794,3.393112591255991e-5,-4.104553604679316e-8,0.0024775202300596727,3.4163782098038836e-5,-4.132736396042357e-8,0.0024778015552186553,3.4384841805604154e-5,-4.15968981141725e-8,0.002477996355230064,3.453957481857277e-5,-4.178587242689799e-8,0.002478139925461257,3.4582095835946386e-5,-4.183646089222978e-8,0.0024782863608294597,3.448855008036613e-5,-4.171792894077942e-8,0.002478497599215119,3.426810101996982e-5,-4.1440616533293496e-8,0.002478826423475806,3.3966768621773196e-5,-4.106097101147728e-8,0.002479297655651806,3.365920201414745e-5,-4.067146491268234e-8,0.0024798956470742607,3.3427359889743966e-5,-4.0374142208359564e-8,0.002480566263107198,3.333281657692773e-5,-4.0246164098665086e-8,0.0024812348815230548,3.339569240715765e-5,-4.031349099874403e-8,0.002481832069138389,3.359098154088289e-5,-4.054608293176884e-8,0.0024823140828337882,3.3862509899205475e-5,-4.087496962472572e-8,0.0024826701499891905,3.4144843169478624e-5,-4.121926049669797e-8,0.0024829174589391183,3.438196398751778e-5,-4.150927531351717e-8,0.002483090231395934,3.453716218275256e-5,-4.169890994247633e-8,0.0024832289273681676,3.459479555529096e-5,-4.1768010969739914e-8,0.0024833725099405357,3.455739202683464e-5,-4.171898971311369e-8,0.002483553953461178,3.444130953944551e-5,-4.1571586234288615e-8,0.002483797896582137,3.42726872143246e-5,-4.135789466565913e-8,0.002484119250717028,3.408404982664835e-5,-4.111811949072816e-8,0.0024845220544084173,3.3911157045767064e-5,-4.08966177191401e-8,0.0024849984608592214,3.378942234513219e-5,-4.073744810316272e-8,0.002485528319030998,3.37493393541924e-5,-4.0678740705520224e-8,0.0024860802611576817,3.381090099062003e-5,-4.07458217081001e-8,0.002486615292822404,3.3977887022200906e-5,-4.094410565553709e-8,0.0024870933615432594,3.4233776242617746e-5,-4.1253884823212716e-8,0.0024874822433588704,3.454145160287273e-5,-4.162972775740252e-8,0.0024877666980437367,3.4848325612800404e-5,-4.200659476353093e-8,0.002487954948091704,3.5096872718110185e-5,-4.2312767159825944e-8,0.0024880797904155523,3.523845842873798e-5,-4.248704298833028e-8,0.002488193043039279,3.5246843277377304e-5,-4.249570636640487e-8,0.0024883539592743067,3.512738494103619e-5,-4.234426909230887e-8,0.0024886140602875923,3.49187025600563e-5,-4.207987071532803e-8,0.002489002194927896,3.468515900952789e-5,-4.178219564842183e-8,0.0024895143834379584,3.450085337149065e-5,-4.1543686661381805e-8,0.002490112692358687,3.4428839747837344e-5,-4.144362746866002e-8,0.002490735095733774,3.4502254176917696e-5,-4.152441444489307e-8,0.002491313820334456,3.47148501990305e-5,-4.177943206499539e-8,0.0024917952057646542,3.5025110867509906e-5,-4.21578484386859e-8,0.002492153108185882,3.537166319265242e-5,-4.2583614770799746e-8,0.0024923915653697563,3.569250545655623e-5,-4.297938359576452e-8,0.0024925381077774505,3.594019773552308e-5,-4.328553882965522e-8,0.0024926327298874706,3.608907519420701e-5,-4.346936640882342e-8,0.0024927174854313663,3.6135139860801745e-5,-4.352511605516019e-8,0.0024928293045150462,3.6091731116077385e-5,-4.3468759712982866e-8,0.0024929962078651933,3.598404077227055e-5,-4.3331234070503576e-8,0.002493235828937878,3.584424198247867e-5,-4.315237723752643e-8,0.002493554988497319,3.5707654226319e-5,-4.297612739315671e-8,0.002493949475402431,3.560950550536974e-5,-4.284648196073154e-8,0.002494403814902926,3.558150409860973e-5,-4.2803251027824265e-8,0.0024948914829334063,3.5647523756435825e-5,-4.287670742727347e-8,0.0024953765911673344,3.581825773142045e-5,-4.308089582356996e-8,0.0024958182908375675,3.608573040867354e-5,-4.340666705533066e-8,0.0024961786512342457,3.641986140806195e-5,-4.381718846972339e-8,0.0024964332001036105,3.677013333856981e-5,-4.424981283072611e-8,0.002496580985875428,3.707466125980302e-5,-4.4627260595163124e-8,0.00249664942189288,3.7275972463325826e-5,-4.487730097257107e-8,0.002496690103679088,3.733875515066651e-5,-4.4954995613220536e-8,0.0024967655193018647,3.726250067358835e-5,-4.485864320894178e-8,0.002496931013734003,3.7083456871196986e-5,-4.46324458229267e-8,0.0024972186148263043,3.686490845186074e-5,-4.435466169172905e-8,0.002497628180291189,3.6679510733870065e-5,-4.411582351619956e-8,0.002498128079111284,3.658972340409257e-5,-4.3994441199673844e-8,0.0024986644042137227,3.663208106121771e-5,-4.4037246854020054e-8,0.0024991755753180833,3.680926861936187e-5,-4.4248953740883185e-8,0.002499608064555356,3.709163133072151e-5,-4.459370765840227e-8,0.0024999288144117358,3.742710477725366e-5,-4.500715060851872e-8,0.0025001310412585205,3.775603780312682e-5,-4.5414811573711545e-8,0.0025002324917523817,3.8025992028683344e-5,-4.57506862741052e-8,0.002500267909808244,3.82021913744237e-5,-4.5970516699009e-8,0.0025002791334092648,3.827161818741498e-5,-4.6057156152074936e-8,0.002500306150636883,3.824142696912959e-5,-4.601877616789812e-8,0.002500381023813219,3.813396254515294e-5,-4.588273798227383e-8,0.002500524917925695,3.7980819109320463e-5,-4.5688184530668866e-8,0.002500747387946369,3.781755623906785e-5,-4.547941847511398e-8,0.0025010467943652028,3.7679593748579237e-5,-4.530076608806616e-8,0.002501411000812327,3.759894473403009e-5,-4.5192519652786e-8,0.002501818061535664,3.76010451065458e-5,-4.518700349120371e-8,0.002502237249305373,3.7700983349453346e-5,-4.530383549196263e-8,0.002502631391630373,3.789891117462528e-5,-4.5544060670952407e-8,0.0025029618245448393,3.817544639615828e-5,-4.588418136956523e-8,0.0025031968555852867,3.8489391629367015e-5,-4.6273070203581374e-8,0.002503322900130418,3.878132383082006e-5,-4.6636329847159344e-8,0.0025033544659702643,3.898595666221756e-5,-4.689179674409995e-8,0.0025033366866835474,3.9052160624291637e-5,-4.6974744631872444e-8,0.002503335424761968,3.8963286204251026e-5,-4.686346369928086e-8,0.002503416415545243,3.874697513072474e-5,-4.659163332249408e-8,0.002503622458507168,3.846773122092755e-5,-4.623914977805023e-8,0.0025039595976610314,3.820530008492874e-5,-4.590530882256746e-8,0.002504397631776516,3.802946606966512e-5,-4.5677537488936655e-8,0.002504882299547712,3.798169372682445e-5,-4.560852435839345e-8,0.002505352221421315,3.806826004220745e-5,-4.570743517294879e-8,0.00250575432324309,3.8263797822131395e-5,-4.59439244261933e-8,0.0025060542893460607,3.852145546614233e-5,-4.6260390338084265e-8,0.002506241100184328,3.878568465963214e-5,-4.658768272125083e-8,0.0025063261680084966,3.900454144029845e-5,-4.686046599932783e-8,0.0025063382859264074,3.913932359754488e-5,-4.702948014495108e-8,0.0025063160483484925,3.917014569025023e-5,-4.706882713849625e-8,0.002506299694580531,3.9097007570934184e-5,-4.697758835500036e-8,0.0025063241642786917,3.893705066219002e-5,-4.677655197485161e-8,0.002506414458106024,3.8719469291395064e-5,-4.650187612960767e-8,0.002506583529031959,3.847966713294664e-5,-4.6197729527279165e-8,0.0025068322231723375,3.825390939784268e-5,-4.5909552105830005e-8,0.00250715042643049,3.8075081039815325e-5,-4.5678747389959236e-8,0.002507518671035578,3.79694315028609e-5,-4.553864588391083e-8,0.002507909881434134,3.7953757863868274e-5,-4.551099211154035e-8,0.0025082914429322,3.8032479762118567e-5,-4.560219705504129e-8,0.0025086283062298424,3.819441369790588e-5,-4.5799089344806656e-8,0.002508888222288745,3.8409920504514224e-5,-4.6065065644875405e-8,0.002509049867274366,3.863051042059274e-5,-4.633938175836797e-8,0.002509113004638694,3.879425510226927e-5,-4.654391267553016e-8,0.0025091068429147767,3.883993594289078e-5,-4.6601084959132783e-8,0.0025090898042000585,3.872875934821506e-5,-4.6461387254399373e-8,0.002509134996273683,3.846495952331999e-5,-4.6129379088556667e-8,0.002509303823785431,3.810176136963081e-5,-4.567118163005868e-8,0.0025096206611317003,3.77249340788089e-5,-4.519386918014874e-8,0.0025100635025889603,3.742094334698776e-5,-4.480570179737146e-8,0.0025105750725739227,3.7247279761174246e-5,-4.4579149479260436e-8,0.0025110856597778002,3.721891833235642e-5,-4.4533963341258614e-8,0.0025115347336513087,3.7312355209207396e-5,-4.464198908935113e-8,0.0025118837717088426,3.7479672497395944e-5,-4.4844363555259744e-8,0.0025121197805155586,3.766434463552293e-5,-4.507092241835546e-8,0.0025122524606316582,3.781403239390384e-5,-4.5256039989766344e-8,0.002512308218517646,3.788897265948401e-5,-4.534921710684068e-8,0.002512323198993744,3.7866377431753216e-5,-4.532087455967344e-8,0.0025123364352792246,3.774164049515155e-5,-4.5164209733579505e-8,0.002512383722153255,3.752690440451212e-5,-4.4893662222274306e-8,0.0025124927690744884,3.724752495244522e-5,-4.454058376296237e-8,0.0025126800686300593,3.6937187041074546e-5,-4.4147073781900625e-8,0.002512949640805612,3.663249847498581e-5,-4.3759102263850506e-8,0.0025132935154346414,3.636784559588725e-5,-4.3419995601533096e-8,0.0025136935134270817,3.6171127440481755e-5,-4.3165098457630535e-8,0.002514123766723244,3.606055777639336e-5,-4.301781026749884e-8,0.002514553618955688,3.604231707921164e-5,-4.298663815376317e-8,0.0025149508839445193,3.610876316223164e-5,-4.306282715704458e-8,0.0025152857940081257,3.6237122105096005e-5,-4.321846926867821e-8,0.0025155362609611655,3.6389174493579715e-5,-4.3405830751730746e-8,0.002515694790395706,3.651350376824656e-5,-4.356001367114698e-8,0.002515776049335391,3.6552764092910476e-5,-4.360815615449484e-8,0.0025158217306482694,3.64579617376964e-5,-4.348766977365181e-8,0.002515896936537497,3.620833883698536e-5,-4.317158041654697e-8,0.002516073071847446,3.5828669318152446e-5,-4.269046581534293e-8,0.002516399987719169,3.539060604592482e-5,-4.213413246847748e-8,0.0025168814606322987,3.499021840014745e-5,-4.162331415721513e-8,0.0025174707936113064,3.4710531005774946e-5,-4.126263149227772e-8,0.002518090589616577,3.459078644678115e-5,-4.1102057661954364e-8,0.002518663524727177,3.4618912918017596e-5,-4.112741399925282e-8,0.0025191361740298083,3.474582741761788e-5,-4.1278096176040484e-8,0.0025194875406559848,3.490802432070915e-5,-4.147510457868247e-8,0.002519725292742549,3.504638962014763e-5,-4.16444050552658e-8,0.0025198766141857846,3.5116951628882e-5,-4.173036446018124e-8,0.002519978706172601,3.509468993429849e-5,-4.1700694202266914e-8,0.002520071130482626,3.497310385097045e-5,-4.154621540106111e-8,0.002520190252699242,3.4761794687652565e-5,-4.1278135639874127e-8,0.0025203652372844786,3.448316626617987e-5,-4.092409555262571e-8,0.002520615191656812,3.416849468288395e-5,-4.05232510677893e-8,0.002520947440465501,3.385345763496335e-5,-4.0120551152513905e-8,0.002521357059662189,3.3573332103171066e-5,-3.976057689732734e-8,0.0025218278023055253,3.335822588172072e-5,-3.9481488035551096e-8,0.0025223344083919984,3.3228896480038676e-5,-3.930979257938309e-8,0.0025228460215779803,3.319367073788616e-5,-3.925652251261835e-8,0.0025233303087924958,3.324669892834196e-5,-3.9315015622613785e-8,0.0025237579626117535,3.336760095667987e-5,-3.946031753109398e-8,0.0025241074151963775,3.352256518500154e-5,-3.9650309128366536e-8,0.0025243697315655363,3.366716014331096e-5,-3.982900185191263e-8,0.002524553460207322,3.375163915239177e-5,-3.9933128485974816e-8,0.002524688300114605,3.37298851909107e-5,-3.9903559505638475e-8,0.002524824998114826,3.357240651657453e-5,-3.970202211903166e-8,0.0025250277665400896,3.328120777325597e-5,-3.933021967054159e-8,0.002525356611076024,3.289990453199541e-5,-3.8842803606554595e-8,0.0025258428381231134,3.250914558990305e-5,-3.834160036262284e-8,0.0025264698957574395,3.220189906693548e-5,-3.794432342774024e-8,0.0025271741566565867,3.2047197639093385e-5,-3.773873488953271e-8,0.002527868930050737,3.206296769477658e-5,-3.7748283537389005e-8,0.002528477957775852,3.2214078628227146e-5,-3.792951338789108e-8,0.0025289589671146006,3.243333093220877e-5,-3.8198347470684486e-8,0.002529308244893737,3.2649160481611736e-5,-3.8464834618929027e-8,0.002529551044230285,3.280554245702909e-5,-3.8658136766423037e-8,0.0025297276422903844,3.286996887218826e-5,-3.873662679239773e-8,0.0025298816375502052,3.283279972249427e-5,-3.8687266747971134e-8,0.002530052440279624,3.2702708511500886e-5,-3.852013964263886e-8,0.0025302712732322313,3.250144171865661e-5,-3.8262077101730963E-08,0.002530559210242333,3.22591991158146e-5,-3.7950935413685944e-8,0.002530926148178654,3.2010602838034795e-5,-3.7630466201304596e-8,0.002531370351391248,3.1790798148834993e-5,-3.7345270529438355e-8,0.0025318786907376338,3.1631370951251876e-5,-3.713553615551818e-8,0.0025324279262051433,3.155608559611767e-5,-3.703162366365894e-8,0.0025329874164920214,3.1576901848478516e-5,-3.704907123537745e-8,0.0025335233363896095,3.1691081346079224e-5,-3.71849683887019e-8,0.002534004013295205,3.1880164541897305e-5,-3.741660475396124e-8,0.0025344056658638974,3.211134266810114e-5,-3.770302889521404e-8,0.0025347176716889862,3.234141683476799e-5,-3.798981805268735e-8,0.0025349464931195965,3.25231453918205e-5,-3.821692596727692e-8,0.002535117468766687,3.261356425395861e-5,-3.832919965284332e-8,0.002535273522037362,3.25837585549067e-5,-3.828894828785741e-8,0.0025354694854592633,3.242890013057747e-5,-3.808899818124254e-8,0.0025357608919522735,3.217582413424165e-5,-3.776263794934066e-8,0.002536187666940124,3.1883621764644e-5,-3.738458087106923e-8,0.0025367568259437178,3.1632385404099197e-5,-3.7056717765237276e-8,0.0025374327525164407,3.1499190159307474e-5,-3.687752844703763e-8,0.0025381439662942977,3.152925181564535e-5,-3.690529396896161e-8,0.00253880714969785,3.1717495544648184e-5,-3.7134493175846014e-8,0.002539357012067217,3.201212311537006e-5,-3.7500132915228656e-8,0.002539765928854451,3.233760649167408e-5,-3.79067823651572e-8,0.0025400453147970577,3.2622583246552875e-5,-3.82638918563021e-8,0.0025402331112333227,3.281872156862578e-5,-3.850972952935261e-8,0.002540377487382661,3.290621872055572e-5,-3.8618458257282727e-8,0.002540524155092487,3.288979390474908e-5,-3.8595246105451726e-8,0.0025407093934606078,3.279105867884921e-5,-3.846681028316092e-8,0.002540957537634892,3.2641231271875194e-5,-3.827233474111451e-8,0.002541280815381751,3.247562338960235e-5,-3.805651702208651e-8,0.0025416799467947535,3.232966235413645e-5,-3.786445609457888e-8,0.002542144857740274,3.223562798311164e-5,-3.7737407372711096e-8,0.002542655579590631,3.221938662051105e-5,-3.7708565661377785e-8,0.0025431838362320446,3.229680174430522e-5,-3.779849423590047e-8,0.0025436960054889923,3.247013233511464e-5,-3.8010564296692125e-8,0.00254415790798978,3.272542643389036e-5,-3.8327620226833e-8,0.002544541182956549,3.303226997284184e-5,-3.871155421654684e-8,0.0025448301444755037,3.334704611861932e-5,-3.9107270584671315e-8,0.0025450273211040327,3.3620069672829226e-5,-3.9451574837501164e-8,0.002545155729501141,3.380568399136757e-5,-3.968592063249876e-8,0.002545256556630443,3.387319471601984e-5,-3.977037692107729e-8,0.0025453820443540687,3.3816009067509984e-5,-3.969547432241733e-8,0.002545584452323269,3.365650342624907e-5,-3.948871602576002e-8,0.0025459029162299583,3.344455147949948e-5,-3.9213016496428415e-8,0.0025463510522096334,3.324840420752361e-5,-3.895529090102889e-8,0.002546909232956193,3.3138246514345544e-5,-3.8805530645937213e-8,0.002547525817875957,3.31656565561402e-5,-3.883045961997576e-8,0.002548129745697608,3.334578366524815e-5,-3.9050513834874766e-8,0.002548651901131051,3.3650693689135876e-5,-3.9431034299941284e-8,0.00254904685669721,3.4018656743914485e-5,-3.989388291545174e-8,0.002549305056062235,3.4375770534290136e-5,-4.034493649891447e-8,0.002549450755241978,3.465939649203068e-5,-4.070401123079711e-8,0.0025495291586907494,3.4833241697630345e-5,-4.092420182378461e-8,0.002549590687379239,3.4890489219274215e-5,-4.099602575860678e-8,0.0025496789205144556,3.4848031855415884e-5,-4.0940251920067316e-8,0.0025498244612649898,3.473730209237217e-5,-4.079637327911076e-8,0.0025500436032672657,3.459585033605535e-5,-4.061196445682029e-8,0.002550339547154352,3.4461308211710806e-5,-4.0434988555481746e-8,0.0025507043433619027,3.4367523260307965e-5,-4.030880973480197e-8,0.0025511206731693597,3.4341897944161364e-5,-4.0268729945377805e-8,0.002551563424104876,3.4402972367080165e-5,-4.03388608138628e-8,0.002552001606617659,3.4557690980306746e-5,-4.0528610973922175e-8,0.002552401461273141,3.479848664498499e-5,-4.082892216673805e-8,0.0025527314827823774,3.510120673609544e-5,-4.120952912256527e-8,0.002552969364218686,3.542565410114826e-5,-4.161951137566323e-8,0.0025531095580215266,3.572058968524942e-5,-4.19935413975739e-8,0.002553168729760865,3.59339104478195e-5,-4.226480110017664e-8,0.0025531858573809097,3.602631744383978e-5,-4.238244913932361e-8,0.0025532150611217693,3.598419299693054e-5,-4.232817322961466e-8,0.002553312233386756,3.582648549097322e-5,-4.212517282076237e-8,0.0025535195183206613,3.560220174300033e-5,-4.1835212060668614e-8,0.002553852830502855,3.537869695525301e-5,-4.15439349344679e-8,0.0025542964378125308,3.5224255096316406e-5,-4.133880357556166e-8,0.002554806195557747,3.519005643611671e-5,-4.1286055750094206e-8,0.002555320571266334,3.5296537354939525e-5,-4.141303722830442e-8,0.0025557766128750385,3.552799805828805e-5,-4.170091750744843e-8,0.002556126465171574,3.583732608559857e-5,-4.209034923582469e-8,0.002556349360987087,3.615973932622834e-5,-4.249882289419115e-8,0.0025564551410904254,3.6431100822784126e-5,-4.284408179364047e-8,0.0025564785276809823,3.6604393384032696e-5,-4.306534222497807e-8,0.002556467160589559,3.6658984478097046e-5,-4.3135357610844236e-8,0.002556468510402671,3.660096821231846e-5,-4.306106582894111e-8,0.0025565200544311623,3.645675748916501e-5,-4.28755593884766e-8,0.0025566445046864778,3.626394236750845e-5,-4.262649174123844e-8,0.0025568493925952245,3.606285126280341e-5,-4.236530656389189e-8,0.002557129168848333,3.589047078361781e-5,-4.213942711868888e-8,0.0025574680949682657,3.5776750212926264e-5,-4.1987475893609535e-8,0.0025578429268030643,3.574244515459497e-5,-4.193647233080398e-8,0.002558225197975276,3.579750560221392e-5,-4.1999734310573656e-8,0.0025585835602312756,3.593934241195524e-5,-4.217460204810126e-8,0.002558887016647417,3.61509584570488e-5,-4.2439939751589254e-8,0.0025591098618594843,3.639984373749989e-5,-4.2754572922321514e-8,0.002559238497448476,3.663948624180955e-5,-4.305908526809104e-8,0.002559278835866122,3.6815737799850185e-5,-4.3283910146574906e-8,0.002559261046831353,3.68791601038681e-5,-4.336518833602966e-8,0.0025592372774527606,3.680125222475687e-5,-4.3265665007869605e-8,0.0025592697003744484,3.658826729490232e-5,-4.299250430234186e-8,0.0025594113266689754,3.6284623802832374e-5,-4.260177686092147e-8,0.0025596874257284618,3.596177093402923e-5,-4.218437109225698e-8,0.0025600863540812774,3.569620677368294e-5,-4.183807532178788e-8,0.002560563687246403,3.554623400075656e-5,-4.1637989758230514e-8,0.002561056690233244,3.553661609585996e-5,-4.161684553067492e-8,0.0025615023865055877,3.565507989845713e-5,-4.176023644906828e-8,0.002561853048804872,3.585927599621287e-5,-4.20151041647804e-8,0.0025620856129585094,3.6090108860365954e-5,-4.230643641429664e-8,0.0025622040446008454,3.628699041834416e-5,-4.255663518033421e-8,0.0025622353918832905,3.6401300490328786e-5,-4.270283147309331e-8,0.0025622213473997326,3.6405401558346106e-5,-4.2708678956345274e-8,0.0025622078408738705,3.6295813489391095e-5,-4.256872173084837e-8,0.0025622353848293975,3.609068615788058e-5,-4.230540259760305e-8,0.00256233232102081,3.582322550250386e-5,-4.1960772840867707e-8,0.002562511863801732,3.553353735483984e-5,-4.158605612885912e-8,0.0025627725248878294,3.526111693837438e-5,-4.123196242121757e-8,0.00256310070883618,3.503928727808233e-5,-4.0941482037820396e-8,0.0025634741471409566,3.4891828381175004e-5,-4.074551346356165e-8,0.002563865248603042,3.483125361276283e-5,-4.066063228427299e-8,0.002564244075042713,3.4857926898380974e-5,-4.068793102758481e-8,0.002564581202623444,3.495942454822687e-5,-4.0812119542659516e-8,0.00256485109943431,3.5110048036088305e-5,-4.100075191629571e-8,0.0025650367242128005,3.527118210779312e-5,-4.120451556732618e-8,0.002565135498337338,3.539413055019303e-5,-4.136076151439963e-8,0.0025651654120114266,3.5427525351978796e-5,-4.1403038721833427e-8,0.0025651680412939974,3.533045146974794e-5,-4.127809559426407e-8,0.0025652038004362098,3.508913423679075e-5,-4.096749224333056e-8,0.0025653363340437958,3.472992631684516e-5,-4.050439181559414e-8,0.0025656093621240807,3.431861032240273e-5,-3.997271395936973e-8,0.0025660270415399614,3.394124366569468e-5,-3.9482630402027894e-8,0.0025665499166005316,3.367374522340637e-5,-3.913169321930131e-8,0.0025671094737676993,3.3555941288687166e-5,-3.8971649823626466e-8,0.0025676326398133926,3.358238507761676e-5,-3.899658257921173e-8,0.00256806353887396,3.3710715096302974e-5,-3.915332696323073e-8,0.0025683748955028416,3.387946611070678e-5,-3.936392740831083e-8,0.0025685688159335627,3.402630843529469e-5,-3.954873741392243e-8,0.0025686706264498697,3.410151913115822e-5,-3.96436201055269e-8,0.002568719735740128,3.4075375284090386e-5,-3.9609586863852165e-8,0.0025687602388208127,3.3940249039981586e-5,-3.9435794394587893e-8,0.002568832735617296,3.370870760914346e-5,-3.913743671001868e-8,0.0025689681542897694,3.340879250968684e-5,-3.874991257803349e-8,0.0025691840551694215,3.307763210742136e-5,-3.832068947589197e-8,0.002569483538443005,3.275462578485857e-5,-3.790047634512565e-8,0.00256985645494049,3.2475309573827486e-5,-3.753521316052912e-8,0.0025702822795653883,3.226668899010827e-5,-3.725997236190257e-8,0.002570733820216625,3.214437650152126e-5,-3.70952464417701e-8,0.002571181033117111,3.211133565934368e-5,-3.70453424363933e-8,0.0025715946013054125,3.215772517602418e-5,-3.7098167201791944e-8,0.002571949318347555,3.226144137496881e-5,-3.722583343084536e-8,0.002572227570996682,3.2389277195387017e-5,-3.738598474604562e-8,0.0025724233208959243,3.249913626791757e-5,-3.752447594345222e-8,0.002572546572517723,3.2544481248383096e-5,-3.7581027423136185e-8,0.002572627105263867,3.248253008845186e-5,-3.7499865346558056e-8,0.0025727146254667485,3.2286766565557764e-5,-3.7246045798024494e-8,0.0025728713746888203,3.196144702345607e-5,-3.6824362906102526e-8,0.0025731546573224077,3.1551122395760685e-5,-3.6291732875808416e-8,0.0025735930611439093,3.113531128318894e-5,-3.5750349486020505e-8,0.0025741686669498156,3.080383281342957e-5,-3.5315932671875985e-8,0.002574818793527538,3.0622158898999846e-5,-3.5073179334983326e-8,0.002575459250901792,3.0606384083367444e-5,-3.5043561582390667e-8,0.0025760157713347175,3.072183306088944e-5,-3.518340880366333e-8,0.0025764462366678763,3.0902486165110045e-5,-3.5408643786040035e-8,0.0025767458975593516,3.107681621716422e-5,-3.562773879707096e-8,0.0025769394739584782,3.118739906047621e-5,-3.5766760816977004e-8,0.0025770682803444704,3.12001551469743e-5,-3.5781267605868635e-8,0.0025771782767451306,3.110525759781823e-5,-3.565767914468704e-8,0.0025773113662062915,3.091339865537416e-5,-3.540879179965687e-8,0.0025774999609862632,3.065026064735654e-5,-3.5066958787603745e-8,0.0025777640357551542,3.035060945700293e-5,-3.4676643389330934e-8,0.002578110043284982,3.0052507451921462e-5,-3.428694627394564e-8,0.002578531397055513,2.9791926281541815e-5,-3.3944523195161236e-8,0.0025790103290381297,2.9598057935518227e-5,-3.368738209113566e-8,0.0025795209096909134,2.948965519446499e-5,-3.354007538112134e-8,0.002580032896739608,2.94727630782897e-5,-3.351077440578792e-8,0.0025805159234916397,2.954000878094914e-5,-3.3590389005577315e-8,0.002580943592558336,2.9671294779383406e-5,-3.375345201478358e-8,0.0025812972568394475,2.983567962877638e-5,-3.3960441519085414e-8,0.002581569412426488,2.9994385199715056e-5,-3.416148972868799e-8,0.002581766674986788,3.0105076417356167e-5,-3.430175679860849e-8,0.0025819120683374308,3.0127919994288804e-5,-3.4329229444587715e-8,0.002582045519993052,3.0034048227300084e-5,-3.420579656011638e-8,0.0025822203949664234,2.9816100977510195e-5,-3.392112802616561e-8,0.002582493526172687,2.9498181435378302e-5,-3.3505790908997055e-8,0.0025829078467866826,2.913934269067586e-5,-3.3035889417979293e-8,0.002583471922975573,2.8823154006253027e-5,-3.261957918279001e-8,0.0025841475821974037,2.8630944686295138e-5,-3.236241863773583e-8,0.0025848575009842015,2.860875020177161e-5,-3.23245690882075e-8,0.0025855132051104206,2.8747336224273945e-5,-3.249487409873808e-8,0.0025860483870083825,2.898840096044825e-5,-3.279872884323055e-8,0.0025864386289602428,2.925160284354101e-5,-3.31328354281292e-8,0.0025867003344974215,2.9464434140691195e-5,-3.340364643567008e-8,0.0025868758817611977,2.9580498213838604e-5,-3.355089908895895e-8,0.0025870163518221215,2.958356532888121e-5,-3.3552916689574256e-8,0.00258716874146591,2.948254760991543e-5,-3.342033057128494e-8,0.0025873690254704456,2.930331685653275e-5,-3.31857940505852e-8,0.0025876396104315717,2.908092911135896e-5,-3.289416461028243e-8,0.0025879892061104566,2.88534249664018e-5,-3.259456856612757e-8,0.0025884138089266786,2.8656989162023898e-5,-3.2334059412977954e-8,0.002588898359017111,2.8521979692271508e-5,-3.215231454490244e-8,0.002589419062272378,2.8469586189780088e-5,-3.2077164254932806e-8,0.002589946473323683,2.8509159090307877e-5,-3.212107523599057e-8,0.002590449393316276,2.8636563050092073e-5,-3.227904091415366e-8,0.002590899361197364,2.8834057391279875e-5,-3.2528461699677137e-8,0.00259127520629838,2.9071975778584452e-5,-3.2831291645010475e-8,0.0025915670649930126,2.9312176621478835e-5,-3.313838678718475e-8,0.0025917793326626975,2.951309804139549e-5,-3.33958896106978e-8,0.0025919320721802777,2.96361235160836e-5,-3.355336698452127e-8,0.002592060388232209,2.9652876016196784e-5,-3.357329612354791e-8,0.0025922110409532205,2.9552949250428954e-5,-3.344128213388367e-8,0.0025924352611730508,2.9350891816452204e-5,-3.3175402893513874e-8,0.0025927770732672843,2.908978789339379e-5,-3.2831114881942346e-8,0.0025932582302109035,2.8837351096213648e-5,-3.2496316807290324e-8,0.0025938644424488276,2.8670845449783314e-5,-3.2271752176790486e-8,0.00259454130569729,2.8651787572331885e-5,-3.223802204062918e-8,0.0025952073153012044,2.880006435961552e-5,-3.242178048536644e-8,0.0025957820237779284,2.9082752023308125e-5,-3.2781025144444316e-8,0.002596215451355888,2.942669394122801e-5,-3.3221292787055197e-8,0.0025965024447693404,2.9748129367640864e-5,-3.3634051131772567e-8,0.0025966765282158253,2.998185229157122e-5,-3.3934507817174133e-8,0.002596791242167228,3.009622528063916e-5,-3.408109516064842e-8,0.0025969011572768027,3.0092558261656323e-5,-3.4074756512656124e-8,0.002597049688176753,2.9995632087270322e-5,-3.3946851949197073e-8,0.0025972643186138377,2.9842572236855614e-5,-3.3744958806311066e-8,0.002597556681278304,2.9673938276303314e-5,-3.3521470462183287e-8,0.002597924726275709,2.9527819877394803e-5,-3.332595043754231e-8,0.0025983552864050196,2.9436122490796813e-5,-3.320019805897644e-8,0.002598826556628034,2.9421965307062316e-5,-3.3174709416024415e-8,0.0025993106853013,2.949756098639174e-5,-3.32658027069346e-8,0.002599776848353735,2.9662467082486734e-5,-3.347330412600232e-8,0.0026001951252648077,2.99025861685836e-5,-3.377926073172787e-8,0.0026005411717937273,3.019067108816419e-5,-3.414860105393843e-8,0.002600801115884702,3.048904747005782e-5,-3.453261736501532e-8,0.0026009756449572323,3.075479964565841e-5,-3.487558988314453e-8,0.0026010821201373643,3.094704699047445e-5,-3.512412559281178e-8,0.0026011537374556978,3.103526998712179e-5,-3.523794137373505e-8,0.0026012352359606815,3.100711111394474e-5,-3.52001023446636e-8,0.0026013752640351045,3.08739211784446e-5,-3.5024463414013454e-8,0.0026016160874248713,3.0672358090410115e-5,-3.475804093991398e-8,0.0026019820559800674,3.0460335902351476e-5,-3.447598865451195e-8,0.0026024694362678106,3.0306029731080202e-5,-3.4267389520307465e-8,0.0026030416290290835,3.0270338541856285e-5,-3.421233572704718e-8,0.0026036342474958208,3.0386657894908002e-5,-3.435533680675956e-8,0.0026041720030882468,3.064594194570206e-5,-3.4685549028801975e-8,0.0026045930310347977,3.09961293659131e-5,-3.513578419828963e-8,0.0026048698621258057,3.1359222083486464e-5,-3.560466452625087e-8,0.002605016277847952,3.165875436058266e-5,-3.5992435719287957e-8,0.0026050775582436726,3.1843809880593544e-5,-3.623231983185307e-8,0.0026051114117463955,3.1899280024474e-5,-3.630395313793583e-8,0.0026051700508598736,3.184180085895025e-5,-3.622821835659225e-8,0.0026052897100294578,3.1707923332180516e-5,-3.605202198717156e-8,0.0026054879335475844,3.154166996092474e-5,-3.5832271992857454e-8,0.0026057657097087847,3.138536625159791e-5,-3.5624031184444675e-8,0.0026061113393798714,3.1274330301516524e-5,-3.5473569113068227e-8,0.0026065041725679677,3.123426843754492e-5,-3.5414846395313414e-8,0.0026069176827509784,3.127995084377525e-5,-3.54676479866181e-8,0.0026073221793504135,3.141424395457776e-5,-3.563622226078849e-8,0.002607687760832499,3.162725534231478e-5,-3.590812143263662e-8,0.002607988052610515,3.189600175406857e-5,-3.6253749808592313e-8,0.0026082048747776295,3.218555030603266e-5,-3.662781876104157e-8,0.0026083332526672066,3.2452725750126513e-5,-3.697411627683993e-8,0.0026083853531278017,3.265297934002162e-5,-3.72343878712858e-8,0.0026083914259650088,3.2749867670578894e-5,-3.736065308576354e-8,0.002608396133617845,3.272507890931113e-5,-3.732831038939484e-8,0.0026084499787289036,3.258582024132688e-5,-3.714589715717855e-8,0.0026085974212649975,3.236651424287259e-5,-3.6857515677651e-8,0.0026088647679620098,3.2123260707560836e-5,-3.65358635683691e-8,0.002609251366434725,3.1921661831404596e-5,-3.6266559361749115e-8,0.0026097270315835943,3.182058662536569e-5,-3.612701970627575e-8,0.002610237284691165,3.185588171012813e-5,-3.6165054551592994e-8,0.002610716126815699,3.202876234196642e-5,-3.6383392719986345e-8,0.0026111037028992033,3.23033372673764e-5,-3.6736088564341154e-8,0.0026113636304113436,3.261570097552551e-5,-3.714014721843922e-8,0.002611493434829786,3.2892780986458314e-5,-3.750008482171149e-8,0.002611523495367077,3.307418573417459e-5,-3.7736560791061143E-08,0.002611505142783382,3.312826382278772e-5,-3.780750968567028e-8,0.002611493763715752,3.3056708359165294e-5,-3.771431792722278e-8,0.0026115341933477952,3.2888214172239555e-5,-3.749370515848177e-8,0.0026116528511147953,3.266635873779777e-5,-3.7202054725746606e-8,0.0026118568135878677,3.2437504850753895e-5,-3.6899719726700316e-8,0.0026121372770168093,3.22421675305727e-5,-3.663975855845446e-8,0.0026124744813415092,3.2110441667230555e-5,-3.646188211570326e-8,0.002612842227916604,3.206036322123708e-5,-3.639018811094762e-8,0.00261321139785924,3.2097696128144984e-5,-3.64327692480781e-8,0.00261355274464152,3.2216066114155835e-5,-3.658181139714531e-8,0.0026138396427348816,3.2397063044748426e-5,-3.681367790345908e-8,0.0026140514872013475,3.261067171343822e-5,-3.708942654441659e-8,0.0026141780311365196,3.2817050683532635e-5,-3.7357080590710184e-8,0.002614224114800926,3.297101014117252e-5,-3.7557436147006555e-8,0.002614213119889088,3.303013696291152e-5,-3.7634673802280204e-8,0.002614186549965068,3.296599359632987e-5,-3.755103806085695e-8,0.0026141973753741167,3.277534783937561e-5,-3.7301599143301795e-8,0.002614297046902401,3.248635183237581e-5,-3.69224435741917e-8,0.0026145197475576695,3.215508644569542e-5,-3.648630993783964e-8,0.002614870090159904,3.185171140863245e-5,-3.608467312200419e-8,0.0026153197674543857,3.164059402548646e-5,-3.5801927989370486e-8,0.0026158147703580206,3.156177686629293e-5,-3.569118447274441e-8,0.0026162903077401106,3.1620210993565046e-5,-3.5760006489734524e-8,0.0026166880991987354,3.1785560398102544e-5,-3.5969814749259693e-8,0.002616970841721617,3.200160523740788e-5,-3.624783231824479e-8,0.002617130261397801,3.220181753315225e-5,-3.65072435138508e-8,0.0026171871606737534,3.232655585316976e-5,-3.6669675925902054e-8,0.00261718397046602,3.233719347395405e-5,-3.6683842036219965e-8,0.0026171724016019787,3.222347506708292e-5,-3.6535405177033614e-8,0.0026172002283405987,3.200264024737339e-5,-3.624607593524087e-8,0.0026173011810684,3.171173130676567e-5,-3.586373455846947e-8,0.0026174902392406083,3.139662825485608e-5,-3.544818102047367e-8,0.0026177642440258567,3.110164755113335e-5,-3.5057518398642445e-8,0.0026181060091383474,3.086218416322592e-5,-3.4738433135395185e-8,0.0026184896650506663,3.070099873181416e-5,-3.452121062024481e-8,0.0026188855768160607,3.062736487635263e-5,-3.441851050195791e-8,0.0026192641644238587,3.063776642104189e-5,-3.44262138034998e-8,0.0026195987827379364,3.071705603650061e-5,-3.452490184616867e-8,0.0026198682621240295,3.083960982102611e-5,-3.4681327174304134e-8,0.0026200597799300902,3.0970713580179304e-5,-3.485016751422272e-8,0.0026201724252346513,3.106906901777973e-5,-3.497724556731821e-8,0.002620221032692184,3.1091763777759243e-5,-3.500601824118333e-8,0.0026202386178564006,3.10028288611161e-5,-3.4888839501679675e-8,0.0026202745150329704,3.0784947027866455e-5,-3.4602410900141006e-8,0.0026203852922867623,3.0450819216758257e-5,-3.416279062923851e-8,0.002620618265425924,3.0047622079189514e-5,-3.363132109745287e-8,0.002620992870319827,2.9648323815135033e-5,-3.31033303947174e-8,0.0026214894619416536,2.932979763141325e-5,-3.267956343422445e-8,0.0026220531242507274,2.9146566799369495e-5,-3.2431878766493014e-8,0.002622611657445149,2.9112958080091928e-5,-3.237984681690709e-8,0.0026230987533740094,2.9201352737337322e-5,-3.248826516711856e-8,0.0026234720422993033,2.935474709537481e-5,-3.268331002587069e-8,0.002623720696604966,2.950580934218716e-5,-3.28772184813543e-8,0.002623863141320352,2.9594733190630928e-5,-3.2991532941629956e-8,0.002623938403472255,2.9581523567624585e-5,-3.2973239176112444e-8,0.0026239948751797743,2.945153944445875e-5,-3.280223748832211e-8,0.002624079352158989,2.9214975075539966e-5,-3.249095709508292e-8,0.0026242282334253994,2.8901697565596798e-5,-3.207786296841002e-8,0.0026244620668671175,2.855315053807396e-5,-3.161700102240202e-8,0.0026247839524003213,2.821331655109691e-5,-3.116615430893701e-8,0.0026251814438661785,2.7920728883389294e-5,-3.077624804492969e-8,0.002625630821426735,2.770290261143587e-5,-3.048387523980967e-8,0.0026261023194173497,2.7573621615054672e-5,-3.030759911853844e-8,0.0026265650867071107,2.753272069170523e-5,-3.024760371638935e-8,0.0026269911754542366,2.7567495629662442e-5,-3.0287542037181364e-8,0.0026273585031503107,2.7654808956776647e-5,-3.0397305793839284e-8,0.0026276531846827346,2.776337289842733e-5,-3.0535989704684127e-8,0.0026278717322375995,2.785627661607388e-5,-3.0655133830369624e-8,0.0026280234298139303,2.7894361322732897e-5,-3.0703083939648824e-8,0.0026281325803872136,2.7841478039741167e-5,-3.063189326845691e-8,0.0026282392000712505,2.7672557297109677e-5,-3.040802070948686e-8,0.0026283955437060506,2.7384085700415085e-5,-3.002625965469175e-8,0.00262865565196701,2.700371371201096e-5,-2.9522515841626875e-8,0.002629057605315128,2.6592301817640855e-5,-2.897657699704715e-8,0.0026296042239974493,2.623136467768682e-5,-2.8495630917078668e-8,0.0026302538309996223,2.599585843503772e-5,-2.8178505464655922e-8,0.002630930614107705,2.5924188462011436e-5,-2.807623809106079e-8,0.0026315519205043305,2.6002942441934412e-5,-2.8171931342658712e-8,0.002632057542513618,2.6175113742488016e-5,-2.8391396121084223e-8,0.0026324258329257447,2.6364726212698507e-5,-2.8635308308118833e-8,0.002632672462723894,2.6502714775448774e-5,-2.881304110057633e-8,0.0026328380412312087,2.6543357889184606e-5,-2.8864178132588297e-8,0.0026329731241864014,2.6469411774491017e-5,-2.8765333495100423e-8,0.0026331258609140727,2.6289281768524357e-5,-2.852665947748336e-8,0.0026333338989213834,2.6030282261764095e-5,-2.8183285436663457e-8,0.002633620171689503,2.573080090149753e-5,-2.7785262712895203e-8,0.002633991642655656,2.5432731091922993e-5,-2.7387706234444074e-8,0.0026344403222787766,2.517473880061446e-5,-2.7041855038120544e-8,0.002634946113457011,2.498684705051351e-5,-2.6787753182580472e-8,0.0026354809501950237,2.4886802821856877e-5,-2.6649271729928865e-8,0.0026360135612485953,2.487845151655501e-5,-2.66318567861711e-8,0.0026365141657436557,2.4952076373098923e-5,-2.672296922722169e-8,0.002636958487571637,2.508635806998142e-5,-2.6894714182866534e-8,0.002637330770592852,2.5251345857424093e-5,-2.7107782135658014e-8,0.0026376258574601534,2.541191401004594e-5,-2.731596108184508e-8,0.002637850566159729,2.5531539580490765e-5,-2.747102088376633e-8,0.002638024527826738,2.557660264320669e-5,-2.7528304916922454e-8,0.0026381802741849004,2.552172015255805e-5,-2.7453780860784707e-8,0.0026383615500640014,2.535654692073106e-5,-2.7233147342018143e-8,0.0026386179885873363,2.5093413410281484e-5,-2.6882116638732477e-8,0.002638994289794082,2.4773009859853065e-5,-2.6454097522886618e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json new file mode 100644 index 000000000..270577e9a --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":19000,"numberOfSamples":1000,"samples":[0.00263951402096563,2.446275040491078e-5,-2.6038117688221015e-8,0.0026401631724560673,2.4241976200195275e-5,-2.5739261712150362e-8,0.002640884349598046,2.417407411008679e-5,-2.5641764129475454e-8,0.0026415912918163185,2.4277459627606698e-5,-2.577057311285661e-8,0.0026422007751247287,2.4514250198517228e-5,-2.6076268743377622e-8,0.002642664329828072,2.4806135401016956e-5,-2.6455914313675208e-8,0.002642981408758501,2.5067420523334124e-5,-2.6796599674782414e-8,0.0026431902581784475,2.523476738670862e-5,-2.701462116287926e-8,0.0026433473077564114,2.5280434293348607e-5,-2.707291191164421e-8,0.0026435080278592402,2.5209814035850336e-5,-2.6977864625794997e-8,0.0026437153058168224,2.5051197769627946e-5,-2.6766036632474325e-8,0.002643995008250455,2.4844553414124373e-5,-2.6489610125027892e-8,0.002644356096346505,2.4632482174508258e-5,-2.6204648569688263e-8,0.002644792866933108,2.4453878979516923e-5,-2.5962750928942762e-8,0.002645287958825506,2.433962413644026e-5,-2.580522022561437e-8,0.0026458157625529125,2.4309628109960647e-5,-2.5758941317575327e-8,0.00264634623063722,2.4371028134717308e-5,-2.5833817493889664e-8,0.0026468490048528843,2.4517626043978552e-5,-2.6021955503015233e-8,0.002647297629221693,2.473075415894809e-5,-2.629884122598041e-8,0.002647673419069512,2.498168300232041e-5,-2.6626587976528904e-8,0.0026479684516871804,2.5235364563765828e-5,-2.6958906132239313e-8,0.0026481873145099825,2.54550480044092e-5,-2.724714977923732e-8,0.0026483474854581976,2.5607329200806667e-5,-2.744689859121178e-8,0.002648478321749667,2.5667306663201197e-5,-2.7524725198145248e-8,0.002648618565417001,2.562364143904652e-5,-2.746495256788262e-8,0.002648811933829168,2.548331398325493e-5,-2.7276137128600436e-8,0.002649099993304903,2.5275225022656478e-5,-2.6996080239347117e-8,0.0026495118344468096,2.5050470037239995e-5,-2.6692385337925312e-8,0.0026500516782408433,2.4875937156110125e-5,-2.6454031394300517e-8,0.0026506887377273874,2.481830242231187e-5,-2.637005584696817e-8,0.0026513571570154788,2.4919878684211346e-5,-2.649732055333089e-8,0.0026519727576500727,2.5176293414199947e-5,-2.6830682803784936e-8,0.00265246347865712,2.553137242424813e-5,-2.7296067819030845e-8,0.0026527977885291948,2.5897092428559638e-5,-2.777691417282513e-8,0.0026529937872264786,2.6188736914085377e-5,-2.8160834927125474e-8,0.0026531053400488365,2.6354405340763377e-5,-2.8378742435525895e-8,0.002653197143730883,2.6384803835271885e-5,-2.8417798104530085e-8,0.0026533237489522734,2.630496073324375e-5,-2.8310488620170042e-8,0.002653519415667135,2.61584941720321e-5,-2.8113966146280626e-8,0.0026537972075638358,2.5993391727317396e-5,-2.7891437296909137e-8,0.0026541528220946162,2.5852711656499893e-5,-2.7699980495729533e-8,0.002654569583467504,2.576980469437125e-5,-2.758418502662082e-8,0.002655022888269817,2.5766321279371505e-5,-2.7573341150534074e-8,0.0026554838903719694,2.5851487346184455e-5,-2.7680269328933923e-8,0.0026559228543872925,2.6021962722230312e-5,-2.7900982114737346e-8,0.0026563125592436493,2.6262270927647677e-5,-2.8215210320601784e-8,0.0026566318822620954,2.6546159408893735e-5,-2.8588246183577963e-8,0.0026568693325829773,2.683937297731775e-5,-2.8974675169938895e-8,0.00265702588046726,2.7104047119859548e-5,-2.9324209301872344e-8,0.0026571162804157502,2.730439944298196e-5,-2.9589182861804454e-8,0.002657168287578267,2.741298625135473e-5,-2.973278593466467e-8,0.002657219506910407,2.7416528074622072e-5,-2.9736788701860016e-8,0.002657312004454739,2.7320200846281446e-5,-2.9607346163960382e-8,0.0026574851280428084,2.714945498836805e-5,-2.9377627673142143e-8,0.0026577671410715864,2.6948550466389847e-5,-2.9106116594645743e-8,0.0026581666337407396,2.677480114515534e-5,-2.8869130261933987e-8,0.002658665644369953,2.668759153112913e-5,-2.874622335182529e-8,0.0026592177642860556,2.673249924766369e-5,-2.8798893801029236e-8,0.0026597551845333914,2.6923863313585407e-5,-2.9047096880029876e-8,0.0026602066278280773,2.7233239467283458e-5,-2.945360447347533e-8,0.0026605218701161496,2.759279450344971e-5,-2.992839322576825e-8,0.002660691339317348,2.791687831695263e-5,-3.0357403494703774e-8,0.0026607489650131524,2.813307297178182e-5,-3.064397603742436e-8,0.002660756316410744,2.820629128228656e-5,-3.0740975280116455e-8,0.00266077813131762,2.814444053347429e-5,-3.0658329382785926e-8,0.0026608626181401033,2.7987094517445165e-5,-3.044802835863527e-8,0.002661033282093157,2.7787369099427664e-5,-3.018018911351549e-8,0.002661290670229049,2.759646253123286e-5,-2.992268275086257e-8,0.002661618847227499,2.745466279524221e-5,-2.9729256636510297e-8,0.002661992324996788,2.7388048564438633e-5,-2.9635075082451442e-8,0.0026623814914065623,2.740846380825369e-5,-2.9656508743774662e-8,0.0026627564064791672,2.751469021981976e-5,-2.9792508338229933e-8,0.002663089657287003,2.769378081550649e-5,-3.002626101217006e-8,0.0026633589993581537,2.7922422231694105e-5,-3.032697532756177e-8,0.0026635502049094915,2.816877186333765e-5,-3.065235507227498e-8,0.002663660058606214,2.8395509491539593e-5,-3.095269273591784e-8,0.0026636988226479592,2.8564683516255168e-5,-3.1177317725720975e-8,0.0026636910185861354,2.8644267020628355e-5,-3.128328931824663e-8,0.002663673368164203,2.8615444636392442e-5,-3.124507257083623e-8,0.0026636892999802016,2.847882357726595e-5,-3.106284172552677e-8,0.0026637804953454328,2.8257367087954442e-5,-3.076651119240239e-8,0.0026639771539304236,2.7994347029093748e-5,-3.041320967031577e-8,0.002664289390944928,2.7745919962196963e-5,-3.0077603120369135e-8,0.0026647021583839263,2.7569343911087362e-5,-2.983632036881539e-8,0.002665175574611234,2.7508966541401323e-5,-2.9749234062979572e-8,0.002665651753105894,2.758308150002246e-5,-2.9841711448467954e-8,0.0026660679387967637,2.777557445101302e-5,-3.009314804079612e-8,0.002666373652606828,2.8036422130212083e-5,-3.043735504000154e-8,0.0026665467921051737,2.8293485634668975e-5,-3.0778184924067085e-8,0.002666601852555459,2.8473726055012245e-5,-3.1017907545195027e-8,0.0026665852853927806,2.8526301970881325e-5,-3.1088172804032435e-8,0.002666559122253182,2.843738526897907e-5,-3.0969895282801916e-8,0.0026665805053176046,2.823043592843639e-5,-3.069370740064932e-8,0.0026666863526158286,2.795380188020402e-5,-3.032352927191644e-8,0.002666888030781808,2.7663438827002143e-5,-2.993366290807507e-8,0.0026671748130789254,2.7408493516036183e-5,-2.958966680282094e-8,0.0026675216046985984,2.722333376093842e-5,-2.933771824724552e-8,0.0026678967932506742,2.7125467417972392e-5,-2.920171724683057e-8,0.002668268174343812,2.7116928055334394e-5,-2.918496557666993e-8,0.0026686067536675503,2.718687142750966e-5,-2.9273488870256556e-8,0.002668889153521843,2.7314125916714938e-5,-2.9439367095546293e-8,0.0026690995240611494,2.7469415229723713e-5,-2.9643692403226327e-8,0.002669231588881734,2.761768401200625e-5,-2.983969287822529e-8,0.0026692909045567758,2.772137604439484e-5,-2.9977123836592665e-8,0.002669296689582548,2.7745483589062654e-5,-3.0009007656812204e-8,0.0026692818814056923,2.76645400450632e-5,-2.9900964988722216e-8,0.002669289786419154,2.7470487600255673e-5,-2.9641735210395685e-8,0.0026693663135547675,2.7178855682651955e-5,-2.9251483856010147e-8,0.002669548600717101,2.6829814064937723e-5,-2.8783321052296953e-8,0.002669853232704221,2.6481571864986507e-5,-2.8314646721668814e-8,0.0026702686612265127,2.6196540227162797e-5,-2.792883344868289e-8,0.0026707555410017745,2.6024208042934442e-5,-2.769243626155642e-8,0.0026712556999075863,2.5986573478360687e-5,-2.7635653186376986e-8,0.002671707089748267,2.6071129511972674e-5,-2.7742712797765785e-8,0.0026720600901569886,2.6233603318288687e-5,-2.795522462078366e-8,0.002672290443135009,2.640954156364561e-5,-2.818742186699068e-8,0.0026724052428170825,2.653145786869803e-5,-2.8349002218997386e-8,0.002672440220313686,2.6546752821712073e-5,-2.8369163632258638e-8,0.0026724489957256573,2.6431102842522592e-5,-2.8214673922745004e-8,0.002672487698917711,2.6193125149463324e-5,-2.789629736013679e-8,0.0026726001820109838,2.586916578069951e-5,-2.746199942230688e-8,0.002672808644915501,2.551090053887501e-5,-2.6980507296689357e-8,0.0026731118372536797,2.5170934360175597e-5,-2.6522128760281473e-8,0.0026734896589889912,2.4891330726868854e-5,-2.6143393330707435e-8,0.0026739109227287,2.4697549447807037e-5,-2.5878832880513e-8,0.0026743410670043246,2.4597486622909633e-5,-2.5739543146492245e-8,0.002674747998989801,2.458373190904632e-5,-2.5716071958711425e-8,0.0026751057440529678,2.463704675194214e-5,-2.57830039780471e-8,0.0026753964831346907,2.47297865751725e-5,-2.5903529531835557e-8,0.00267561183646005,2.4828867315808e-5,-2.6033429491443315e-8,0.0026757540793394046,2.489859900654912e-5,-2.6124877326598502e-8,0.00267583747024861,2.4904174485618595e-5,-2.6131104709850983e-8,0.0026758891320712635,2.4816671777239062e-5,-2.6013096260213478e-8,0.0026759481268225807,2.4619877273035702e-5,-2.5748745104085175e-8,0.002676060878740094,2.4317891637757816e-5,-2.534308690420903e-8,0.002676271641860672,2.3940547910458253e-5,-2.4835628594163594e-8,0.0026766089922976954,2.3542240639262514e-5,-2.429887410844018e-8,0.002677072911743146,2.3190810939116947e-5,-2.3823549830955104e-8,0.002677629384711697,2.2947801471423495e-5,-2.349226195279842e-8,0.0026782174373540597,2.284747447523584e-5,-2.3351420427147178e-8,0.002678767190753552,2.2884450527373708e-5,-2.3394574904936935e-8,0.002679221246387928,2.3015772470718473e-5,-2.3564955982734086e-8,0.0026795504594499405,2.31755695605357e-5,-2.3774871289120044e-8,0.002679759170591716,2.3295137206169125e-5,-2.393243272963582e-8,0.0026798803135628544,2.3320917185443094e-5,-2.3965602905995443e-8,0.0026799640145154023,2.322577558520088e-5,-2.3837397612610006e-8,0.0026800639314745046,2.3012215146842673e-5,-2.3550384713622862E-08,0.0026802248899573116,2.2708392050599457e-5,-2.3141585163499967e-8,0.0026804742934984,2.235906805897442e-5,-2.2670554977751216e-8,0.0026808185968568944,2.2014267511493717e-5,-2.220428842578894e-8,0.0026812448336239396,2.171854636264718e-5,-2.180280461715125e-8,0.0026817259374465234,2.150323880680172e-5,-2.1508611094251824e-8,0.00268222781652349,2.1382809836528223e-5,-2.1341628366433782e-8,0.0026827161726339327,2.1355034347562173e-5,-2.1299284836488415e-8,0.0026831617535715744,2.140378470911418e-5,-2.1360196730420277e-8,0.0026835436457758872,2.1502965966267144e-5,-2.1489465414133864e-8,0.0026838509543692596,2.16204854567272e-5,-2.1644050147128995e-8,0.002684083542702058,2.1721810919128004e-5,-2.1777567204648777e-8,0.0026842524063363047,2.1773296218550722e-5,-2.184473901283113e-8,0.0026843798793523676,2.174584592951199e-5,-2.1806283785570994e-8,0.002684499254751002,2.1619604754520625e-5,-2.1635208600026604e-8,0.002684652615539522,2.1389936125771377e-5,-2.132488556836351e-8,0.0026848851553524585,2.1073684595338914e-5,-2.0897551736655894e-8,0.002685234761333537,2.071276203290809e-5,-2.040922349572789e-8,0.0026857179492677428,2.0370460882582813e-5,-1.9944823185549678e-8,0.002686317392056504,2.0116807827503108e-5,-1.9598553255649772e-8,0.002686979523907763,2.0004912349695077e-5,-1.9442129284992614e-8,0.0026876280837219843,2.0048512671163523e-5,-1.949455243073783e-8,0.0026881899249303247,2.0214024293583018e-5,-1.9711294931862544e-8,0.002688620249435145,2.043285656095454e-5,-2.000069039920413e-8,0.002688914623014258,2.0626936406510176e-5,-2.0258093448061607e-8,0.002689104448499188,2.073370425998305e-5,-2.0399378529749706e-8,0.0026892419298627126,2.0720641518941455e-5,-2.038044359813892e-8,0.00268938312888527,2.0587598019377475e-5,-2.0200427284762034e-8,0.002689574768650333,2.0360579482662567e-5,-1.989355990805515e-8,0.0026898465947728313,2.0081670543145843e-5,-1.9515867700560127e-8,0.0026902088053080623,1.9798500950558975e-5,-1.913120086648592e-8,0.002690653320029833,1.9555086732382298e-5,-1.8798959747669437e-8,0.0026911577108349486,1.9384918317815483e-5,-1.856468027518342e-8,0.0026916907283687213,1.9306783846534458e-5,-1.8454204375709315e-8,0.0026922183440946422,1.932346249716126e-5,-1.8471725008849565e-8,0.0026927093194704355,1.9422959535281348e-5,-1.8601349303398246e-8,0.002693139577075912,1.9581620030571056e-5,-1.8811304655394267e-8,0.0026934949979082095,1.9768275469618075e-5,-1.905959980051295e-8,0.0026937727037630865,1.9948579211282313e-5,-1.9299928293298172e-8,0.002693981227014739,2.008903816565814e-5,-1.9487102008012012e-8,0.0026941399761876384,2.0160743594175506e-5,-1.958202828436642e-8,0.002694278150304583,2.014308771745926e-5,-1.9556669135148625e-8,0.002694432839134833,2.0027814972522264e-5,-1.939951202924289e-8,0.0026946454407021474,1.9823465164879817e-5,-1.912164795226923e-8,0.002694955118743798,1.9559228013221924e-5,-1.876210188452582e-8,0.0026953885604227568,1.9285588555638527e-5,-1.8388822887488567e-8,0.002695947389646158,1.906784792733087e-5,-1.8090003030037158e-8,0.002696598361371597,1.8969529356223275e-5,-1.7951673808881418e-8,0.0026972747172651123,1.9028183067974308e-5,-1.8024976958726027e-8,0.002697894448259002,1.923482567582152e-5,-1.82982964892157e-8,0.0026983903263144058,1.953167385178543e-5,-1.8694084270395405e-8,0.0026987355972708806,1.9833273175935162e-5,-1.9097304148343785e-8,0.002698950451980689,2.005962260427181e-5,-1.9400090848296767e-8,0.0026990880859063043,2.016241265792062e-5,-1.9537100067242948e-8,0.0026992117922432905,2.013345355569334e-5,-1.949684506615443e-8,0.002699375647089422,1.999759245364751e-5,-1.9312213181089278e-8,0.002699614261285006,1.9798830819145078e-5,-1.9041939056218857e-8,0.0026999406340535597,1.9586801508834097e-5,-1.8752604336031518e-8,0.0027003488738597202,1.9406767550178475e-5,-1.850529554434705e-8,0.002700818970481651,1.9293437948365567e-5,-1.8347238284879605e-8,0.0027013220497049467,1.9267719508964687e-5,-1.8307237617048195e-8,0.002701825549465035,1.9335593552310834e-5,-1.839393020569358e-8,0.0027022980757690288,1.9488723621636194e-5,-1.8596431789749385e-8,0.002702713662607276,1.970654001153539e-5,-1.8887103092774177e-8,0.002703055157533248,1.9959543955443707e-5,-1.9226073522447195e-8,0.002703316448267429,2.0213520540267606e-5,-1.9567030088327615e-8,0.0027035033133196956,2.0434152409261692e-5,-1.986350378693203e-8,0.0027036329373279133,2.059147843487134e-5,-2.0074871352699753e-8,0.002703732317100221,2.0663912104588616e-5,-2.017172044859481e-8,0.002703835708462897,2.064176391337209e-5,-2.0140576017720335e-8,0.002703981045779454,2.0530222225002636e-5,-1.9987983238696774e-8,0.002704204955540068,2.0351562676141675e-5,-1.9743638549377247e-8,0.0027045358067139627,2.014570325430151e-5,-1.9461313750205066e-8,0.002704984805772576,1.996714707688034e-5,-1.92148397591981e-8,0.0027055368649279493,1.987574577050617e-5,-1.9085611169575944e-8,0.002706145685078051,1.9919963553539275e-5,-1.913981275734757e-8,0.0027067395839023285,2.0115935619329194e-5,-1.9399872245807953e-8,0.002707241964949466,2.0432627984345386e-5,-1.9824189275903496e-8,0.002707600561978769,2.079591363745013e-5,-2.031258854203578e-8,0.0027078094546453073,2.1114943868623784e-5,-2.0742078873478338e-8,0.0027079095029694275,2.1317626509160715e-5,-2.101494646065448e-8,0.002707967740739984,2.1374638784031844e-5,-2.1091231796414332e-8,0.0027080501916891273,2.1301291919555723e-5,-2.0991196408044287e-8,0.002708202805321296,2.1142645928582355e-5,-2.0775234408464792e-8,0.0027084452776870867,2.0954316120813476E-05,-2.0518098346501502e-8,0.002708774162575712,2.078764131629634e-5,-2.028905117718749e-8,0.002709169810830763,2.0681479161499233e-5,-2.014086685744763e-8,0.0027096034430987557,2.065925821172407e-5,-2.0105765910602988e-8,0.0027100428652535534,2.0729021182110605e-5,-2.0195268624788187e-8,0.0027104568599029245,2.088478077558925e-5,-2.0401806622108805e-8,0.0027108187654351296,2.1108546115977512e-5,-2.0701327617105837e-8,0.002711109496587725,2.1372986326076458e-5,-2.10568899223502e-8,0.002711319970232938,2.1644827851250796e-5,-2.142334211249965e-8,0.002711452708090201,2.1889050652350722e-5,-2.1753098561200446e-8,0.002711522206080725,2.207368852602839e-5,-2.2002679141313222e-8,0.002711553726110139,2.2174663760722812e-5,-2.2139227350930035e-8,0.0027115804817427185,2.2179989492678676E-05,-2.214615199321869e-8,0.0027116394229722046,2.2092790600064617e-5,-2.2027220749220564e-8,0.002711765902353902,2.1932661136871404e-5,-2.1808497541801675e-8,0.0027119875265561675,2.17349102139576e-5,-2.153749682666738e-8,0.0027123175594141167,2.154714321577371e-5,-2.1278725972971384e-8,0.002712748677090166,2.1422310197924048e-5,-2.1104340382649643e-8,0.0027132489457220156,2.1407462817094904e-5,-2.107881988743877e-8,0.002713763222707799,2.1528939153101463e-5,-2.12386510801654e-8,0.002714223539826301,2.17779711508261e-5,-2.1572526893751845e-8,0.0027145692235508168,2.210462782438041e-5,-2.201294395593925e-8,0.0027147705289971287,2.242831272043591e-5,-2.245045363896241e-8,0.002714842961370987,2.26651374401677e-5,-2.2770961975807826e-8,0.0027148417371246187,2.2759728481484883e-5,-2.2899019449501894e-8,0.0027148384646546696,2.270361220246182e-5,-2.2822761360270927e-8,0.002714894133814566,2.253147752919397e-5,-2.2588785865962968e-8,0.002715042481976411,2.230178058034443e-5,-2.227589996373742e-8,0.0027152877602880654,2.2075146022270574e-5,-2.196600255000497e-8,0.0027156119658795414,2.189977200438472e-5,-2.1724460810982776e-8,0.0027159847379479274,2.180547085498409e-5,-2.1592064109398672e-8,0.0027163717326484887,2.18037059038195e-5,-2.158495102003217e-8,0.0027167402462662167,2.189035707386248e-5,-2.169814943921391e-8,0.0027170626329077376,2.204902136902486e-5,-2.1909862774099005e-8,0.002717318577686348,2.225407880034124e-5,-2.2185536220454567e-8,0.002717496917322223,2.247368848952755e-5,-2.2481941172479003e-8,0.0027175971570509785,2.2673148098990517e-5,-2.2751819980273843e-8,0.002717630437619656,2.2818986025088118e-5,-2.2949521472554347e-8,0.002717619374232879,2.2883830547347417e-5,-2.3037639752791775e-8,0.0027175960863589687,2.2851508344780233e-5,-2.29939131948583e-8,0.002717598071460584,2.27213176952526e-5,-2.281699857396905e-8,0.0027176621709201596,2.2510260056520727e-5,-2.2529529271382513e-8,0.0027178174751903974,2.22521853070832e-5,-2.2177067543554316e-8,0.0027180784671276526,2.1993333213934358e-5,-2.1822217623532972e-8,0.0027184398641318065,2.178448760758116e-5,-2.153411268172913e-8,0.0027188745594770346,2.1670561409178468e-5,-2.137429317301222e-8,0.0027193360025531545,2.1679009178246315e-5,-2.1380826619141587e-8,0.002719766138446254,2.1809462677510583e-5,-2.1553961002315126e-8,0.00272010902935972,2.2028302823201387e-5,-2.184847600516649e-8,0.0027203278821346134,2.2272524858974438e-5,-2.2178797892063562e-8,0.0027204196799707763,2.24654419229855e-5,-2.2440404566424472e-8,0.002720419476537429,2.2541182151501676e-5,-2.2543308403420168e-8,0.002720389514355453,2.246792006086709e-5,-2.2443785172222848e-8,0.0027203968580779593,2.2257868624423312e-5,-2.2157995797522724e-8,0.0027204907531003454,2.1959156500183422e-5,-2.17509487518943e-8,0.0027206903780250197,2.1635680043467534e-5,-2.1309184877300774e-8,0.0027209858546815508,2.1346417556349277e-5,-2.0912787442917073e-8,0.002721347808163526,2.1132433058736414e-5,-2.06177932502233e-8,0.002721738732659261,2.101302770424033e-5,-2.045091160605777e-8,0.002722121842089695,2.0988064107378192e-5,-2.0412526919188236e-8,0.0027224663072612032,2.104272221321373e-5,-2.0482980964473065e-8,0.0027227497312666536,2.1152219247249398e-5,-2.0628864697851955e-8,0.0027229592187699085,2.1285646420264224e-5,-2.0808205423364215e-8,0.002723092024279769,2.140915534170127e-5,-2.0974851448080727e-8,0.002723156140984944,2.14891410191427e-5,-2.108288393508341e-8,0.002723170606461795,2.149605797679514e-5,-2.1091870780846034e-8,0.0027231647986974373,2.140913982897247e-5,-2.0973305086363463e-8,0.002723175747615389,2.122154123906254e-5,-2.0717585989345948e-8,0.0027232427667478894,2.094452464224403e-5,-2.0339705819586754e-8,0.0027233996145755853,2.0608713479640643e-5,-1.9880992713257535e-8,0.002723665721382843,2.026060892275378e-5,-1.9404470170278227e-8,0.0027240391567136266,1.9953854594028393e-5,-1.898310231028625e-8,0.002724494146855511,1.9736789731948312e-5,-1.8682948875842208e-8,0.002724984781134481,1.9639562245665583e-5,-1.8545605329381536e-8,0.002725454640230336,1.9664591180140306e-5,-1.8575060281540082e-8,0.0027258502841296267,1.978346436416098e-5,-1.8733227690675876e-8,0.0027261353236396123,1.9941877016394326e-5,-1.894645849238284e-8,0.002726301248658682,2.007230249813052e-5,-1.912271463933041e-8,0.0027263713289722514,2.011187104949174e-5,-1.9175991154117115e-8,0.002726395138448426,2.002057957804487e-5,-1.905127428909273e-8,0.002726434196991114,1.9793401183908815e-5,-1.8741182852925098e-8,0.0027265433420372793,1.946100805656228e-5,-1.828705235095383e-8,0.0027267551469351914,1.9078518607560066e-5,-1.7763682989189432e-8,0.002727073366580046,1.870747687105405e-5,-1.7254861286109985e-8,0.0027274765293817524,1.8398952985918913e-5,-1.683037011094019e-8,0.002727927993060576,1.818353027833995e-5,-1.6532295654523488e-8,0.0027283871266923043,1.8069347217504134e-5,-1.637222675764901e-8,0.0027288178204516824,1.804577514014172e-5,-1.633611041703065e-8,0.0027291931918580247,1.8089300870504294e-5,-1.6392157254153952e-8,0.0027294972768002954,1.816913014448269e-5,-1.649844892067187e-8,0.0027297251046408027,1.8251552466542002e-5,-1.660892918346911e-8,0.0027298822811575333,1.830324285422369e-5,-1.6677976929709144e-8,0.0027299846109979653,1.8294199006395545e-5,-1.6664471571957215e-8,0.0027300576392803658,1.8201084382144078e-5,-1.6536379482566312e-8,0.002730135367558795,1.801142871411346e-5,-1.6276481194654895e-8,0.0027302569950561194,1.772835840690819e-5,-1.5888815400112085e-8,0.002730460675000141,1.7374367034465673e-5,-1.540383280991605e-8,0.002730774317388617,1.6991538671805468e-5,-1.487874681986958e-8,0.002731205492992096,1.663554986253649e-5,-1.4389430286252634e-8,0.0027317346225685167,1.6362736100393333e-5,-1.401285392592605e-8,0.0027323159732417688,1.6213321694122396e-5,-1.3804237823242727e-8,0.0027328882043883593,1.6197272773221976e-5,-1.377768292956184e-8,0.002733391477933123,1.628923403372551e-5,-1.3899104903846669e-8,0.0027337846859482747,1.6435087027299024e-5,-1.4095004537599963e-8,0.002734056500043612,1.656745755001094e-5,-1.4273511480543449e-8,0.0027342271115420556,1.6624323330041047e-5,-1.4349761230979106e-8,0.002734341218625606,1.6564849873113524e-5,-1.4267579057934553e-8,0.0027344551943848145,1.6378505391622318e-5,-1.4012046808109738e-8,0.002734622289801755,1.608581588143182e-5,-1.3610682506044439e-8,0.0027348797656559553,1.5731229116967588e-5,-1.312384293400565e-8,0.0027352411979116873,1.5370487927067927e-5,-1.262758861964929e-8,0.0027356956705479342,1.5056407177672457e-5,-1.2194285616455754e-8,0.002736213318040265,1.4827270079832405e-5,-1.1876677483532097e-8,0.0027367546090290257,1.4700733657187753e-5,-1.169940036745348e-8,0.002737279962922846,1.4673731384326293e-5,-1.16586767454608e-8,0.0027377570640155654,1.4726736350655366e-5,-1.1728029197099415e-8,0.0027381648557289963,1.482989457646782e-5,-1.1866648191392354e-8,0.0027384946423735903,1.4948942426058718e-5,-1.2027544616739114e-8,0.002738749434445084,1.504985821963847e-5,-1.216399804528127e-8,0.0027389426406392242,1.5102225647928979e-5,-1.2234218749741384e-8,0.0027390967313658887,1.508190848938774e-5,-1.2205022203274869e-8,0.0027392418828776502,1.497377683520103e-5,-1.2055543818857391e-8,0.0027394140032673863,1.4774979914795335e-5,-1.1781703210623261e-8,0.0027396510558396095,1.449859754939216e-5,-1.1401214646296961e-8,0.0027399865631337478,1.4176337452192784e-5,-1.0957324233453986e-8,0.0027404401157403325,1.3857589419184968e-5,-1.0517579850249122e-8,0.002741006988407936,1.3601649709835046e-5,-1.016324470539438e-8,0.002741651946643131,1.3461932237357087e-5,-9.967701894510386e-9,0.0027423134297618586,1.3466164991872435e-5,-9.969292325791265e-9,0.0027429204127412043,1.3602045380436758e-5,-1.0151559338201335e-8,0.0027434161980657615,1.381781057785335e-5,-1.0443902181835858e-8,0.0027437775903663983,1.403930043979941e-5,-1.0744867582233018e-8,0.00274402026056172,1.4195086586668818e-5,-1.0956551973741348e-8,0.002744189707180539,1.4237647948831023e-5,-1.101361813162918e-8,0.0027443444308235623,1.4153214739371446e-5,-1.0896808965594635e-8,0.0027445391212823013,1.3960083614703103e-5,-1.063071839494125e-8,0.0027448126229584063,1.369940353501182e-5,-1.0271311517205686e-8,0.0027451820491002014,1.342296064314159e-5,-9.889353385649206e-9,0.0027456424369939375,1.3181296837245952e-5,-9.554228595057486e-9,0.0027461706266553357,1.301415215625418e-5,-9.320814951324564e-9,0.0027467319065318033,1.2944348784452829e-5,-9.220945708603037e-9,0.0027472878430236675,1.297566686114043e-5,-9.26028974478475e-9,0.0027478036209455806,1.3094521161716708e-5,-9.420488426281658e-9,0.0027482535395967965,1.3274409109423844e-5,-9.665206228210173e-9,0.002748624017387072,1.3481665911821765e-5,-9.94808846615289e-9,0.002748914201993835,1.3681151040180056e-5,-1.0220678594459335e-8,0.002749134840466332,1.3840922486020028e-5,-1.0438925666362003e-8,0.0027493062755827883,1.3935617636275572e-5,-1.0567851392877573e-8,0.0027494561978375956,1.3948871850020234e-5,-1.0584841736813426e-8,0.002749617298368145,1.3875330877006017e-5,-1.0482372438320108e-8,0.002749824478571436,1.3722661790345272e-5,-1.0270772986168708e-8,0.002750110830763187,1.3513482353169196e-5,-9.98093410823438e-9,0.00275050148863685,1.3286167853943228e-5,-9.665504146217214e-9,0.0027510052007713166,1.3092282740735443e-5,-9.395433012835077e-9,0.0027516054627253683,1.2987797311630384e-5,-9.247916863310523e-9,0.0027522560077975567,1.3016795714357577e-5,-9.283940992366734e-9,0.002752887270832192,1.3191513005764179e-5,-9.520705716744854e-9,0.0027534268750110877,1.3479307947422266e-5,-9.913575792228905e-9,0.002753827252818105,1.380820104122874e-5,-1.0363635022831688e-8,0.002754085066367869,1.4092408000508905e-5,-1.0752843979321471e-8,0.002754240423604777,1.4264671631161601e-5,-1.0988570669126968e-8,0.0027543577158397454,1.4297504261183262e-5,-1.1032801675695634e-8,0.0027545010082918016,1.4205075789953122e-5,-1.0904699986993847e-8,0.0027547161998007054,1.4030591799180186e-5,-1.0663283329901377e-8,0.0027550240194078655,1.3829185117178249e-5,-1.0384043206256625e-8,0.002755421453020713,1.3653474454465471e-5,-1.0139258403077382e-8,0.0027558875196220835,1.3544259564344984e-5,-9.985280220478687e-9,0.0027563903321073395,1.3525955479519786e-5,-9.956181654857124e-9,0.0027568938904163395,1.3605460183974092e-5,-1.0062009063794016e-8,0.002757364073561223,1.3773418082126131e-5,-1.029030898978133e-8,0.0027577735523741467,1.4007312606634619e-5,-1.0610254942756665e-8,0.002758105281049702,1.4275878871466236e-5,-1.0978721485269755e-8,0.0027583543129910426,1.4544196144378514e-5,-1.1347397176404875e-8,0.002758527884760369,1.4778781498711986e-5,-1.1669921998794136e-8,0.0027586439565762334,1.495202207329257e-5,-1.1908062139585563e-8,0.0027587286752269713,1.5045486741457556e-5,-1.2036263263573345e-8,0.002758813283168323,1.5052079543374385e-5,-1.2044567346228864e-8,0.0027589307562035483,1.497726783006875e-5,-1.1940277717807085e-8,0.0027591121400170103,1.4839587044545021e-5,-1.1748696271030066e-8,0.002759382258301141,1.4670374331164395e-5,-1.1512860934478634e-8,0.0027597543590631487,1.4512060743916354e-5,-1.1291303651724086e-8,0.002760223851724849,1.4413504572653444e-5,-1.1151667518328181e-8,0.002760762772812467,1.4420577561528979e-5,-1.1157671499436408e-8,0.002761318710750578,1.4561512390203414e-5,-1.1348746558323507e-8,0.00276182335825203,1.483046758444795e-5,-1.171717072812087e-8,0.002762213232767044,1.5178600777388183e-5,-1.2195628938203373e-8,0.0027624561618459875,1.5523579998102924e-5,-1.2670370954457433e-8,0.002762568055471419,1.577896645887847e-5,-1.3021911778698365e-8,0.002762607053442844,1.588892345218556e-5,-1.3173036202525945e-8,0.0027626477535367317,1.5847494556313896e-5,-1.3115353264673006e-8,0.002762752148698717,1.5693341116187472e-5,-1.290193227055894e-8,0.002762952717258098,1.5488291251018845e-5,-1.2617722370350503e-8,0.0027632510418019677,1.5294686690858635e-5,-1.2348462136331391e-8,0.0027636259344087917,1.5160707656321381e-5,-1.2160612203495138e-8,0.002764043924793039,1.511465428428553e-5,-1.2093523880228672e-8,0.002764468105360931,1.5165219435121325e-5,-1.2159711904489318e-8,0.0027648642771565795,1.5304554776486206e-5,-1.2348881160795975e-8,0.00276520491193756,1.551214917612753e-5,-1.2633083740317827e-8,0.0027654717421526196,1.5758859205074683e-5,-1.2972187445271782e-8,0.0027656573615933593,1.601108180866163e-5,-1.331966747011974e-8,0.0027657658412326984,1.623508143758839e-5,-1.3628693916074076e-8,0.0027658122315612965,1.6401336192405455e-5,-1.385824500072823e-8,0.0027658208032614435,1.64885423505343e-5,-1.397868551819702e-8,0.0027658220656359834,1.6486733828388484e-5,-1.397605157394892e-8,0.002765848891824904,1.639909794692674e-5,-1.3854513826157042e-8,0.0027659321674139512,1.6242317878778517e-5,-1.3636849548780435e-8,0.002766096303503263,1.6045369593808686e-5,-1.3362857387789591e-8,0.0027663548615603564,1.5846730676314847e-5,-1.308562701077851e-8,0.0027667064826740096,1.5689835021215877e-5,-1.2865361853446855e-8,0.002767131628491153,1.5616253392744474e-5,-1.2759959238257351e-8,0.002767591541465577,1.565613932350352e-5,-1.2811680422273687e-8,0.0027680318643640033,1.581672526418174e-5,-1.3031031172521404e-8,0.0027683935757452003,1.607229328191158e-5,-1.3382687188492964e-8,0.0027686315906423767,1.6362317419807093e-5,-1.3782849249591848e-8,0.0027687352106116232,1.660487394222258e-5,-1.4117902190796029e-8,0.002768738239820442,1.6725105080637398e-5,-1.4283993588661351e-8,0.0027687087079556953,1.6685822510540136e-5,-1.422947633870195e-8,0.0027687213527381837,1.650176304721841e-5,-1.3974559220475729e-8,0.0027688289978741332,1.622925799770131e-5,-1.3596908755438644e-8,0.002769048363398059,1.594031700512789e-5,-1.3195832869032236e-8,0.00276936337344147,1.569769408859385e-5,-1.2857958409166736e-8,0.002769738192543268,1.5541237964123733e-5,-1.2638499739393606e-8,0.002770130857577132,1.5485700596560033e-5,-1.2558236264973412e-8,0.0027705028435936804,1.5525121557837643e-5,-1.2609441752677153e-8,0.002770824104016123,1.5639139817898094e-5,-1.2764417778794309e-8,0.0027710750382562957,1.579871667179225e-5,-1.298325399628226e-8,0.002771246995946245,1.5970684935818387e-5,-1.322007185623983e-8,0.0027713422068845884,1.6121524757386047e-5,-1.3428307331702114e-8,0.0027713733059165882,1.622087961293736e-5,-1.3565689517813172e-8,0.0027713622519797507,1.6245092710609566e-5,-1.3599228831309594e-8,0.002771338258376431,1.6180665568763176e-5,-1.3510033682923686e-8,0.0027713344138243505,1.6027070557930125e-5,-1.3297175460530656e-8,0.0027713830768532144,1.579813080854103e-5,-1.2979564370243544e-8,0.0027715105782646693,1.5521323628688927e-5,-1.2595002061998987e-8,0.002771732045267941,1.5234636665673235e-5,-1.2195915802458485e-8,0.002772047301432447,1.4981007805899022e-5,-1.1841777298032802e-8,0.002772438752589332,1.4800880562158318e-5,-1.1588867502371844e-8,0.0027728720133379584,1.4723695349422957e-5,-1.1478455258934069e-8,0.0027733000270757664,1.475936384689405e-5,-1.1524829287417343e-8,0.0027736714038943994,1.4891518683271445e-5,-1.1705728640433002e-8,0.002773942949580787,1.5075513691583893e-5,-1.1959405556781578e-8,0.002774094298536084,1.5244784160866828e-5,-1.2193420369479077e-8,0.00277413935771806,1.5327642621168224e-5,-1.2308056164262575e-8,0.002774127095241945,1.5271382737278492e-5,-1.222991079233378e-8,0.002774127125267959,1.5063483024427677e-5,-1.1941373736095969e-8,0.002774204509579759,1.4737530909312808e-5,-1.1488800019336111e-8,0.0027743965548067697,1.43593324733346e-5,-1.0963210259393599e-8,0.0027747034985702353,1.4001351538615448e-5,-1.0464911437262635e-8,0.0027750951364715324,1.3719672259939094e-5,-1.007167416389651e-8,0.002775526051367617,1.3542754928601997e-5,-9.823200461899074e-9,0.0027759503581378433,1.3472044653032601e-5,-9.721903248961207e-9,0.0027763311030684443,1.3489110782461308e-5,-9.742655844025204e-9,0.0027766441055164853,1.356402503429683e-5,-9.84425800476849e-9,0.002776878237542247,1.3662175145885656e-5,-9.978801364369811e-9,0.00277703421910064,1.3749001999510627e-5,-1.0098250340897997e-8,0.002777123145672282,1.3793304300500613e-5,-1.0159108468992627e-8,0.002777165069365021,1.3769948799978488e-5,-1.012627712891473e-8,0.002777187380425079,1.366257139239754e-5,-9.976865115490197e-9,0.002777222427192686,1.3466379006569386e-5,-9.704079704233e-9,0.002777303795784524,1.3190508945819256e-5,-9.32046418862628e-9,0.0027774610887294536,1.285887005615791e-5,-8.859037531642524e-9,0.00277771379236086,1.250829794191475e-5,-8.370757335750319e-9,0.0027780656045215007,1.2183280121571277e-5,-7.917278908180143e-9,0.00277850108054271,1.1927476784055753e-5,-7.559280656595044e-9,0.002778986285044394,1.1773582658743977e-5,-7.3424319327927995e-9,0.0027794741941447932,1.1734065609188585e-5,-7.284473669250357e-9,0.0027799142794985264,1.1795451333347614e-5,-7.367127372081157e-9,0.00278026452821218,1.1918270864807826e-5,-7.535846169209884e-9,0.0027805032458643373,1.204384768123753e-5,-7.709138116829781e-9,0.0027806373209791524,1.2107676158375936e-5,-7.797171506191644e-9,0.002780703452468078,1.2057033090757864e-5,-7.726358310931846e-9,0.002780759925646668,1.186787561236933e-5,-7.46295792291357e-9,0.002780869728653987,1.155427127221588e-5,-7.026249491461181e-9,0.002781080498337681,1.1164946271353642e-5,-6.483757041896363e-9,0.002781409786732128,1.0767143875816982e-5,-5.928845847483083e-9,0.0027818421004138097,1.04248448157659e-5,-5.450501229246064e-9,0.0027823377629871307,1.0181105245430409e-5,-5.10879819574084e-9,0.002782847735319512,1.0050699713777196e-5,-4.924616944992279e-9,0.002783327243787241,1.0022856728953502e-5,-4.883325460734916e-9,0.0027837440651562097,1.0069594711575953e-5,-4.94624874966697e-9,0.0027840812269027786,1.015483206039899e-5,-5.063271670053514e-9,0.0027843360787357524,1.024152532104462e-5,-5.1827770304128115e-9,0.002784517883012557,1.0296305457586499e-5,-5.258162067166841e-9,0.0027846452783812006,1.0292292461840592e-5,-5.251838399917288e-9,0.002784744078074569,1.0211053940810853e-5,-5.138017383006263e-9,0.0027848451722726508,1.004447040455388e-5,-4.905319130341186e-9,0.002784981869337182,9.796760182050914e-6,-4.559563393831464e-9,0.0027851859388087303,9.486172936094592e-6,-4.1260871182282976e-9,0.0027854820195520776,9.145128566965864e-6,-3.649923337373014e-9,0.0027858809685050146,8.817212839408479e-6,-3.1916519447886542e-9,0.002786374004344479,8.549858663854469e-6,-2.8172810988601715e-9,0.002786930516713693,8.38311526590999e-6,-2.5826759770245543e-9,0.0027875021251903167,8.337323332657525e-6,-2.5164033042951878e-9,0.002788033442730153,8.404341144331321e-6,-2.6074358965324996e-9,0.0027884768663511967,8.546587963184419e-6,-2.8036922561923524e-9,0.002788806444515096,8.705359435428541e-6,-3.023511191011914e-9,0.002789025898946628,8.816155454370437e-6,-3.1769693624562517e-9,0.00278916808580964,8.826174280013064e-6,-3.1902919454504053e-9,0.0027892861494492062,8.708654066453408e-6,-3.0259083522581603e-9,0.002789439024007953,8.46996585135858e-6,-2.6924102085292982e-9,0.0027896754169786063,8.14743898998842e-6,-2.2415918566646356e-9,0.002790020989298804,7.798481749683577e-6,-1.7533598997337004e-9,0.0027904727105389194,7.484380983397801e-6,-1.3132102122914294e-9,0.0027910019465777094,7.254182931369871e-6,-9.89761674395551e-10,0.0027915644996498075,7.133899378245067e-6,-8.196308089392246e-10,0.002792113334641582,7.123723332179867e-6,-8.034153427098901e-10,0.0027926094573086616,7.202432983697204e-6,-9.117101623954198e-10,0.002793028233302452,7.335726174669705e-6,-1.0966748720526548e-9,0.0027933609484635524,7.4849003149403414e-6,-1.3041707157630382e-9,0.002793613109513304,7.61360949860106e-6,-1.4832721372423023e-9,0.002793801331699417,7.692125726622039e-6,-1.5923023708007069e-9,0.0027939501157332436,7.699650544928369e-6,-1.602113739190793e-9,0.0027940890449749374,7.62559574208575e-6,-1.4978805430814948e-9,0.0027942502546082484,7.47061613566804e-6,-1.2805101597583769e-9,0.002794465545354246,7.247708832349798e-6,-9.681400023267961e-10,0.0027947623730721393,6.982972729165114e-6,-5.97180208495864e-10,0.002795158293619206,6.714815163187818e-6,-2.2122179168722028e-10,0.0027956544044971682,6.489842552957791e-6,9.465788350054435e-11,0.0027962298905296608,6.353985618709735e-6,2.862426270105938e-10,0.0027968413003591638,6.339329590931643e-6,3.085594249353236e-10,0.002797430023565606,6.450574770211097e-6,1.5483829055035215e-10,0.0027979381407812233,6.657939065789282e-6,-1.33481326751483e-10,0.0027983274370340884,6.9023050870562255e-6,-4.73865860969561e-10,0.0027985929487883057,7.112534229482264e-6,-7.668664513252449e-10,0.0027987644712778367,7.227889781129287e-6,-9.274873085756629e-10,0.002798895846497114,7.215922522318092e-6,-9.102130577481535e-10,0.0027990476214502418,7.07954168609196e-6,-7.189055791823305e-10,0.002799270159329704,6.8528184660678055e-6,-4.0097058487487015e-10,0.0027995921098042825,6.589150394962895e-6,-3.089155205840986e-11,0.0028000160559371254,6.346543838175632e-6,3.10246237176008e-10,0.0028005208861621384,6.174077528739478e-6,5.536306075559972e-10,0.002801069138807742,6.102332622183427e-6,6.561508599671992e-10,0.002801616887775129,6.139228531226112e-6,6.063570042587458e-10,0.0028021235424224794,6.271340195284573e-6,4.227738196672006e-10,0.0028025593261495505,6.469448209654452e-6,1.462323628969768e-10,0.002802909202716053,6.696171451931554e-6,-1.7081556781815749e-10,0.0028031732715659992,6.913472533175175e-6,-4.748902722777455e-10,0.002803364595060627,7.088522312131387e-6,-7.198047146353163e-10,0.002803505761944061,7.197381055746142e-6,-8.718919784335805e-10,0.002803625279954858,7.226791581760613e-6,-9.125259098952547e-10,0.0028037543398572442,7.1748236665111314e-6,-8.389867042693141e-10,0.0028039239008144736,7.051055423278122e-6,-6.646711695244907e-10,0.0028041616337651505,6.8765748079719594e-6,-4.190817695600791e-10,0.0028044880974484863,6.6835013555270844e-6,-1.471822583423747e-10,0.0028049117634366405,6.5130028002482435e-6,9.333211200818222e-11,0.002805423407949294,6.410183518830969e-6,2.391581525590211e-10,0.0028059919682429956,6.414458134729057e-6,2.348761811647254e-10,0.0028065656354558507,6.545964496883274e-6,5.204916047160679e-11,0.0028070820322286597,6.792467980851788e-6,-2.923256812302114e-10,0.0028074875111325586,7.1049452709561795e-6,-7.295484999982558e-10,0.002807758398439204,7.408801568743201e-6,-1.1549479735996095e-9,0.002807912309953183,7.629016879277494e-6,-1.4632184010996237e-9,0.0028080018600268285,7.717209899264664e-6,-1.5864308892715257e-9,0.00280809416469148,7.666574793887121e-6,-1.5149558263742769e-9,0.0028082476851966315,7.509156810078956e-6,-1.293585924107478e-9,0.0028084967768828226,7.300588647517751e-6,-1.0001414868267381e-9,0.002808847262739549,7.101610708252468e-6,-7.196587372359342e-10,0.0028092805508106752,6.9632211202788204e-6,-5.236849754708002e-10,0.0028097620700029556,6.9179843415002716e-6,-4.5813084509820613e-10,0.0028102506436204987,6.977109497128568e-6,-5.3909443895529e-10,0.002810706875116468,7.1318269763759485e-6,-7.546337294862254e-10,0.002811099653827845,7.357649721019065e-6,-1.0705937383009498e-9,0.0028114103186717213,7.620360090645017e-6,-1.4389400470211245e-9,0.0028116342841793644,7.882562522965005e-6,-1.8069960493090511e-9,0.002811780336556491,8.109700436176797e-6,-2.1259981185286337e-9,0.0028118681577567702,8.274759500587497e-6,-2.3578054290919355e-9,0.002811924804212133,8.361260065829955e-6,-2.479149299892737e-9,0.002811980892546883,8.36454527445245e-6,-2.4834224476780367e-9,0.0028120670235339054,8.291786877210306e-6,-2.380638941437992e-9,0.002812210545938763,8.161235186498023e-6,-2.196355734372293e-9,0.0028124324269317093,8.000947582996757e-6,-1.9699141477060387e-9,0.0028127438794841287,7.846806856187975e-6,-1.7517213264542863e-9,0.002813142552806622,7.739137129470781e-6,-1.5985536553676695e-9,0.002813608808015108,7.716755992795095e-6,-1.5652027889490953e-9,0.002814103934259319,7.807540942446503e-6,-1.6911479779159391e-9,0.0028145735374341036,8.016337002635303e-6,-1.9834359406417603e-9,0.0028149593679730016,8.31455967856922e-6,-2.4019489267911616e-9,0.0028152192752681693,8.639495206008205e-6,-2.858393347499628e-9,0.002815347491924279,8.910155826623826e-6,-3.238690313459153e-9,0.0028153820992645705,9.056877288906372e-6,-3.444739279219633e-9,0.0028153917225959865,9.049565373279847e-6,-3.434183721829044e-9,0.0028154478006963196,8.907688181128402e-6,-3.234368005566589e-9,0.0028155987912163055,8.687766600877536e-6,-2.924641731063571e-9,0.002815858796138938,8.458997654451106e-6,-2.6021037702235526e-9,0.0028162112125574854,8.281283974367032e-6,-2.3508457347741356e-9,0.002816620244870729,8.193045999255578e-6,-2.2249439851131193e-9,0.002817043196425516,8.208464494140208e-6,-2.2446042949535775e-9,0.0028174399451113383,8.320583317078408e-6,-2.4004250119473305e-9,0.0028177788955663485,8.506869283546043e-6,-2.661052702041974e-9,0.0028180401266746525,8.735196722855205e-6,-2.9814634943747566e-9,0.002818216618208338,8.969546300902432e-6,-3.3109360361838935e-9,0.0028183139820533165,9.175233421802618e-6,-3.600466281728827e-9,0.0028183488727125663,9.323413400084446e-6,-3.809217986798757e-9,0.0028183463049050498,9.39458305470024e-6,-3.90954465122841e-9,0.0028183361606477814,9.380837778898787e-6,-3.890194719106599e-9,0.002818349263122649,9.286671155840795e-6,-3.757406772881838e-9,0.002818413492033781,9.128333531433483e-6,-3.53396419516556e-9,0.0028185502773691137,8.932029054209705e-6,-3.2566550844126667e-9,0.0028187715560268277,8.731181934898563e-6,-2.972477812164968e-9,0.0028190771735186674,8.562773878565448e-6,-2.7335615331514525e-9,0.002819452811212173,8.462515809163019e-6,-2.5904087552382515e-9,0.0028198689659859892,8.458399189389392e-6,-2.5827732791303527e-9,0.0028202823760493027,8.562461789260582e-6,-2.7279409911836136e-9,0.0028206420530898016,8.76203294867925e-6,-3.0082465413739715e-9,0.0028209016970371353,9.01428419331315e-6,-3.3633026041725225e-9,0.0028210372630595158,9.250300643214355e-6,-3.695772409602383e-9,0.0028210625026776777,9.393515552182452e-6,-3.897503770163006e-9,0.0028210309762700552,9.388841811821506e-6,-3.890735771174717e-9,0.0028210180397079793,9.227581680220804e-6,-3.6632088806019304e-9,0.002821090430482207,8.951597895319539e-6,-3.273910330543877e-9,0.002821281364602508,8.633748034245999e-6,-2.8253997402826636e-9,0.0028215841712364,8.34816387734706e-6,-2.4219756103304343e-9,0.0028219629940235817,8.147536600047868e-6,-2.1378075495426764e-9,0.0028223698510740254,8.054819543764938e-6,-2.0053439921519466e-9,0.002822758897752516,8.06627654451556e-6,-2.0195926662397562e-9,0.0028230947143213737,8.159510301354147e-6,-2.149322407764077e-9,0.0028233554406812823,8.301852148391436e-6,-2.348744115947894e-9,0.00282353282593384,8.45708600749022e-6,-2.5668892800147934e-9,0.002823630975521782,8.590367413029983e-6,-2.754534233626674e-9,0.002823664602469181,8.671985233133684e-6,-2.869577271902303e-9,0.0028236568220320374,8.680413957217215e-6,-2.881448031847007e-9,0.002823636368151626,8.604700974308771e-6,-2.77454826352887e-9,0.00282363417253053,8.446003171394267e-6,-2.55042869198829e-9,0.0028236793809163405,8.217892940976991e-6,-2.2281801649158934e-9,0.0028237951897224314,7.945063459574405e-6,-1.8425677017566835e-9,0.0028239951055245996,7.660380146708828e-6,-1.4398777251617586e-9,0.0028242801645024245,7.40050743300998e-6,-1.0718072754261351e-9,0.0028246375107151937,7.200455492493439e-6,-7.878393942073073e-10,0.002825040666646605,7.087470503711195e-6,-6.266431600801484e-10,0.002825451877475943,7.074723084324243e-6,-6.071044899922806e-10,0.00282582713879414,7.155466286875476e-6,-7.199525343266866e-10,0.0028261246005233435,7.299190176080726e-6,-9.222045847808211e-10,0.00282631625064073,7.452589468357933e-6,-1.138486076576167e-9,0.002826400528199012,7.5487591099507736e-6,-1.2740885116638722e-9,0.002826410104662908,7.52604944408374e-6,-1.2417419852670848e-9,0.0028264072933222306,7.3519489307029926e-6,-9.95445629992879e-10,0.002826464019776748,7.0400481913062265e-6,-5.543990372405558e-10,0.0028266339859106117,6.6478080126638315e-6,2.5428477574195166e-13,0.002826932486316038,6.254009951919073e-6,5.573195548555597e-10,0.002827334926475173,5.928910433440534e-6,1.017639188279871e-9,0.0028277917797869642,5.7135131054699254E-06,1.3232757200131534e-9,0.002828248468891538,5.614983691413445e-6,1.4639603114758254e-9,0.0028286601533812237,5.614073569452187e-6,1.4666632447107474e-9,0.0028289983913868215,5.676607424183315e-6,1.379463686399024e-9,0.002829251626940915,5.763552361016194e-6,1.257411163440545e-9,0.0028294226533315623,5.8378051497912814e-6,1.1529709034080448e-9,0.002829525391442807,5.868127420486881e-6,1.1104318965864509e-9,0.002829581983388046,5.831461400637911e-6,1.162556397104102e-9,0.0028296201636700017,5.714584370675174e-6,1.3281613329217984e-9,0.0028296704970861516,5.515438234757098e-6,1.610201352537694e-9,0.0028297631021037386,5.243980536622576e-6,1.9945855887171813e-9,0.0028299236827314406,4.922012339098648e-6,2.4504737826893106e-9,0.0028301691569658544,4.581263003820374e-6,2.933023335426697e-9,0.0028305037217332307,4.259296600010102e-6,3.3891673170969797e-9,0.002830916459461489,3.993408191619676e-6,3.766190530193445e-9,0.0028313814792820546,3.8133369601973606e-6,4.021977064794002e-9,0.0028318611572783646,3.7341893056990802e-6,4.135010647324168e-9,0.0028323123871055148,3.7511839643312496e-6,4.1118687449955575e-9,0.002832695135207755,3.837639289960757e-6,3.990171251095755e-9,0.0028329821184355144,3.947374265896908e-6,3.835263147375323e-9,0.0028331678013638183,4.02244680576321e-6,3.7292680413861366e-9,0.002833273994081028,4.0063226672806816e-6,3.752376733977591e-9,0.0028333486086335536,3.8605677828823e-6,3.959124752584863e-9,0.0028334548656437477,3.5800588386143807e-6,4.356815088093346e-9,0.0028336519146150165,3.199196575199989e-6,4.896744085319297e-9,0.002833973775156948,2.7832242943678695e-6,5.486528461109836e-9,0.002834417043797699,2.4062456980927005e-6,6.021220646396547e-9,0.002834944056387233,2.1262318186002894e-6,6.418661302859258e-9,0.0028354988875670265,1.969203084860813e-6,6.641874660667108e-9,0.0028360266300474844,1.927913656213458e-6,6.70098348403756e-9,0.0028364871221820765,1.971420933258333e-6,6.639725869469694e-9,0.0028368601012207684,2.0580493155069e-6,6.517137481949485e-9,0.002837143798391918,2.146084523307919e-6,6.392404569592256e-9,0.0028373505649315713,2.200262702481213e-6,6.315634711039505e-9,0.0028375022225614853,2.194747581939334e-6,6.323580516384682e-9,0.002837626278744532,2.1141632193792574e-6,6.438118184879123e-9,0.002837752983195648,1.9539503821470446e-6,6.665710573780227e-9,0.002837912672316925,1.720635357079953e-6,6.997035491702147e-9,0.0028381327625960472,1.4319563558805509e-6,7.406851308263388e-9,0.0028384339774149996,1.1162175023410766e-6,7.85496469067567e-9,0.0028388259645027686,8.098741102245192e-7,8.289678744088075e-9,0.0028393032769971362,5.525056854996284e-7,8.654901931555912e-9,0.002839843390194472,3.791424868007549e-7,8.900980702450035e-9,0.0028404085467517684,3.1124743347196077e-7,8.997452128487504e-9,0.002840952357445899,3.4901622113740223e-7,8.943973785765355e-9,0.002841430295633725,4.68119085106208e-7,8.775000509935415e-9,0.0028418113735728568,6.229385663401742e-7,8.555251582211405e-9,0.0028420874546643236,7.562180083845292e-7,8.366042862071104e-9,0.002842277186103206,8.12928826496597e-7,8.28557717186452e-9,0.0028424229792514757,7.548341939316745e-7,8.368220742089385e-9,0.0028425812098529235,5.718152359385369e-7,8.628388634888865e-9,0.002842807562695609,2.864119988032696e-7,9.034090564959052e-9,0.0028431411958904427,-5.075784686922267e-8,9.513435790152513e-9,0.002843592795816794,-3.745954342178899e-7,9.973922781259542e-9,0.00284414136383234,-6.243541079214667e-7,1.0329162879331443e-8,0.0028447415293055118,-7.608178796241404e-7,1.0523290713005752e-8,0.0028453383289325533,-7.7516339165713e-7,1.0543619193061516e-8,0.0028458829874018483,-6.870431643594794e-7,1.0418002465363624e-8,0.002846343745861855,-5.347045473568402e-7,1.0200845400060194e-8,0.002846709393672464,-3.626758819940621e-7,9.955588339874181e-9,0.0028469868913886353,-2.1168976993434465e-7,9.740321417669294e-9,0.0028471961486281772,-1.1277953739782726e-7,9.5993194186896e-9,0.002847364587199702,-8.507667609072321e-8,9.559858106078426e-9,0.0028475227795878447,-1.357926730672906e-7,9.63217247842041e-9,0.0028477012760148397,-2.6098770439544055e-7,9.810568108142715e-9,0.0028479280799226956,-4.4634904759132186e-7,1.0074568307647262e-8,0.002848226026012085,-6.678989044547163e-7,1.038996413878128e-8,0.002848609485491815,-8.932110104100397e-7,1.0710570698878495e-8,0.0028490803883028048,-1.08421348997412e-6,1.0982211998329638e-8,0.0028496244808374053,-1.2027066912850638e-6,1.1150545368581883e-8,0.0028502098087099434,-1.2189535497820264e-6,1.117325646547346e-8,0.0028507899812964224,-1.1218694346857707e-6,1.1034558640475975e-8,0.0028513137786630493,-9.269848437980516e-7,1.0756559639854864e-8,0.0028517396184371633,-6.772541783626091e-7,1.040045521595228e-8,0.002852049745857075,-4.3383629160081065e-7,1.0053410747715433e-8,0.002852257667938162,-2.588555502582333e-7,9.80397507841194e-9,0.0028524050176591494,-1.966808876808624e-7,9.715373390453078e-9,0.002852549088431962,-2.610733914805113e-7,9.807193562515353e-9,0.002852746181827145,-4.3236107396414083e-7,1.0051389365553414e-8,0.002853036583500799,-6.643300296990387e-7,1.0382115635541902e-8,0.0028534351813685878,-8.975086395893872e-7,1.0714629219647167e-8,0.002853929365115319,-1.0745790729053187e-6,1.096719853065988e-8,0.0028544839144717562,-1.1539281212368752e-6,1.1080391616891132e-8,0.002855051068247713,-1.1181731669905117e-6,1.1029268499031812e-8,0.002855582768565016,-9.75875355579879e-7,1.0825912624788529e-8,0.0028560415652221956,-7.566392276976092e-7,1.051252610395587e-8,0.0028564073406055135,-5.018534207721013e-7,1.0148247915315251e-8,0.002856678785926064,-2.5444286344771827e-7,9.794490668368394e-9,0.002856870524742683,-5.058886026101649e-8,9.503046426891806e-9,0.002857007914873242,8.512852095070961e-8,9.30908662963937e-9,0.0028571215454132087,1.412895044493818e-7,9.22891211852966e-9,0.002857242681589101,1.1896856287060092e-7,9.260923881079643e-9,0.0028573999738171854,3.009713316077348e-8,9.38800232202608e-9,0.0028576170512156747,-1.0428600410014353e-7,9.580041432918065e-9,0.002857910332403342,-2.5568229132032263e-7,9.796312889070212e-9,0.002858286478980994,-3.900984786692505e-7,9.988259642955946e-9,0.002858739364701392,-4.712582429285285e-7,1.0104059717794627e-8,0.00285924729195101,-4.661759280679692e-7,1.0096572400747676e-8,0.002859772355326098,-3.5361998523694726e-7,9.935435750221926e-9,0.0028602647405304277,-1.3415193562808552e-7,9.621442048735044e-9,0.0028606740590430527,1.6248167838119398e-7,9.197139078236257e-9,0.0028609662384943444,4.78853899398024e-7,8.74468806781909e-9,0.002861139063409164,7.44255750862787e-7,8.365236229068475e-9,0.002861226934688806,8.984655386532225e-7,8.144871394043985e-9,0.002861290126468282,9.137233591571715e-7,8.123196247026203e-9,0.0028613933351704225,8.035260371148903e-7,8.280824203979028e-9,0.002861584483698411,6.150660520729815e-7,8.55027050948895e-9,0.0028618827041504077,4.113854839993796e-7,8.841474477305177e-9,0.0028622775767180642,2.524378755512151e-7,9.068802254899132e-9,0.0028627363987564036,1.8135003911035153e-7,9.17060221962431e-9,0.0028632149243848224,2.1781405590917407e-7,9.118624569170666e-9,0.002863668101326738,3.577669060595684e-7,8.918529212376947e-9,0.0028640588395250108,5.775725882547501e-7,8.603998240368662e-9,0.002864363874395403,8.409557603452859e-7,8.226895323903023e-9,0.002864576317683268,1.1070964706719793e-6,7.845700967819764e-9,0.0028647049562361203,1.3383042800297684e-6,7.514484405755572e-9,0.0028647709664122996,1.505912805444349e-6,7.274393180785887e-9,0.0028648031644739605,1.5936658590036488e-6,7.148753085068565e-9,0.0028648329825001757,1.5985844872876452e-6,7.141820831205116e-9,0.0028648901078107145,1.5298597346848266e-6,7.240401923975936e-9,0.0028649992237887115,1.40662889791498e-6,7.417073022953166e-9,0.002865177723667968,1.255395999935133e-6,7.63388684017037e-9,0.002865433962330402,1.1074017364182093e-6,7.84611558047985e-9,0.0028657656359532793,9.9575507730559e-7,8.006322067477023e-9,0.002866158158739561,9.517297115380463e-7,8.069644697438206e-9,0.0028665835690910722,9.99411061201828e-7,8.001485323787432e-9,0.0028670015032235038,1.1483302317519537e-6,7.788115041184415e-9,0.002867364559705957,1.3852827350377053e-6,7.448455109494122e-9,0.0028676299233594852,1.6691386030128764e-6,7.041536345565719e-9,0.0028677759678411305,1.9347439744128324e-6,6.660862146080923e-9,0.0028678167309223023,2.1103546939003207e-6,6.409323306547407e-9,0.0028678034788689843,2.144698261273195e-6,6.3603400593137696e-9,0.0028678078376921227,2.029720577821034e-6,6.525302617003996e-9,0.0028678938191672595,1.8044434865642015e-6,6.8481776203151215e-9,0.002868094666236441,1.5376263800915127e-6,7.230454856236507e-9,0.002868405913933894,1.3009574329347206e-6,7.569539411050057e-9,0.0028687938676968555,1.1474463535309566e-6,7.789602788927635e-9,0.002869210861589051,1.1019524188615657e-6,7.855057338570128e-9,0.002869609334325944,1.1622461307956396e-6,7.769013139741857e-9,0.002869951231852881,1.3057241037395412e-6,7.563711223382599e-9,0.002870212677215331,1.4976923875705954e-6,7.288744102079043e-9,0.002870385194690064,1.699062535904297e-6,7.000097817318875e-9,0.002870474725317542,1.8727935944983242e-6,6.75093165594071e-9,0.002870499135165648,1.988954290042755e-6,6.584275013804583e-9,0.00287048464138741,2.0282382639665136e-6,6.527917653518532e-9,0.0028704616140799583,1.9837809533528225e-6,6.5917562221991524E-09,0.0028704602549171655,1.8612665906276216e-6,6.767640226165102e-9,0.002870506668811975,1.6774673462495774e-6,7.031500508441279e-9,0.0028706197689758587,1.457604560662817e-6,7.34716419913411e-9,0.0028708091655566463,1.2320673332684813e-6,7.671058717135242e-9,0.0028710739127016565,1.0328358362055718e-6,7.957305852913069e-9,0.0028714019528153388,8.896734068155328e-7,8.163146833604354e-9,0.0028717702214416355,8.259448522978371e-7,8.254940922690583e-9,0.0028721457505871515,8.537612288983449e-7,8.215181934479207e-9,0.0028724887943640687,9.684630238408015e-7,8.050494120702066e-9,0.0028727594429303256,1.1436800035455436e-6,7.798780069504199e-9,0.0028729285817180555,1.3300651297795598e-6,7.531028042365649e-9,0.0028729915695690435,1.462263368762386e-6,7.341218977444032e-9,0.002872978448805743,1.4772429274966988e-6,7.3198920236120235e-9,0.002872951252863827,1.339998687991839e-6,7.517195289934864e-9,0.0028729836176172785,1.0630678713911078e-6,7.914951705548082e-9,0.0028731308183241877,7.051695488262558e-7,8.42876029911416e-9,0.0028734078884947605,3.473260311513201e-7,8.942348496380804e-9,0.0028737882087745852,6.114666054513867e-8,9.353047158655345e-9,0.002874219668384876,-1.1272126322969022e-7,9.602619303010073e-9,0.0028746456433421104,-1.6888577001482716e-7,9.683354937474298e-9,0.002875020314855133,-1.291094150016922e-7,9.626438926383505e-9,0.00287531548780091,-3.018828501717634e-8,9.484597230108128e-9,0.0028755210579180877,8.668647485398011e-8,9.31689120875924e-9,0.0028756422882183752,1.8328829012502568e-7,9.178200849892443e-9,0.002875696134402279,2.288312141503027e-7,9.112800066087184e-9,0.002875707547399061,2.025805089596482e-7,9.150562494597015e-9,0.002875705846174958,9.52630333672185e-8,9.304873938120105e-9,0.0028757210926035038,-9.052120703341189e-8,9.57200496741452e-9,0.0028757804866157105,-3.4091383411167794e-7,9.932003851136088e-9,0.002875904942563708,-6.325855214179894e-7,1.035130470799866e-8,0.0028761062305016523,-9.357358663929467e-7,1.0787070613173603e-8,0.002876385114451254,-1.2180331505464313e-6,1.1192851470911072e-8,0.002876730724811969,-1.4490859095561661e-6,1.1524975361779462e-8,0.002877121258656621,-1.6050876840491572e-6,1.174919121731711e-8,0.002877526072604426,-1.6732673197605107e-6,1.1847070930135468e-8,0.0028779092664162932,-1.6557908710847165e-6,1.1821668584018685e-8,0.0028782350578963945,-1.5726563757144414e-6,1.1701746720225946e-8,0.002878475324870978,-1.4624372605699738e-6,1.1542873713258664e-8,0.0028786189483200725,-1.3787231489666856e-6,1.1422265207849368e-8,0.002878680701003052,-1.3798468481290254e-6,1.1423915368175761e-8,0.002878704787159146,-1.5113471987390404e-6,1.1613291349036044e-8,0.002878756903957089,-1.785757177929549e-6,1.2008265758302951e-8,0.002878902862502164,-2.1705939820080316e-6,1.2561939708202041e-8,0.0028791817969540797,-2.5954920375929927e-6,1.3173007501556022e-8,0.002879589402551466,-2.9784185508799e-6,1.3723483959784089e-8,0.0028800817252932734,-3.2567032182663314e-6,1.4123284543802338e-8,0.0028805956227206074,-3.4055518723271702e-6,1.4336808076009957e-8,0.00288107208392016,-3.4376003397330977e-6,1.4382284035630344e-8,0.0028814710783001875,-3.3898579305011365e-6,1.43129954824349e-8,0.0028817755563885373,-3.3082580675083343e-6,1.4195060433588716e-8,0.002881988308033612,-3.2361154678533363e-6,1.4090836012607044e-8,0.0028821262129773463,-3.207791533507497e-6,1.4049812193983022e-8,0.0028822147082530657,-3.246215519180097e-6,1.4105033781258338e-8,0.0028822834027905776,-3.36241780936278e-6,1.4272395487930903e-8,0.002882362616150177,-3.5558741422002764e-6,1.4551103140709693e-8,0.0028824803465096684,-3.815258525621979e-6,1.4924750790070064e-8,0.002882659335415783,-4.119686711663455e-6,1.5363142882474208e-8,0.0028829141547347752,-4.440809412356523e-6,1.5825359058537653e-8,0.0028832486380844327,-4.746136382797398e-6,1.626457640078978e-8,0.0028836543274357697,-5.003595714935634e-6,1.6634632356475022e-8,0.0028841105948802857,-5.186858658952929e-6,1.6897660746955784e-8,0.0028845868380229104,-5.280659678729527e-6,1.703172244416492e-8,0.0028850468268388713,-5.285119178421869e-6,1.703703042675255e-8,0.0028854548808014517,-5.2180136555174015e-6,1.693924927655556e-8,0.00288578318588404,-5.1141539701945615e-6,1.678862920440044e-8,0.0028860192930803964,-5.021207939658294e-6,1.6653980349342108e-8,0.0028861723562649236,-4.991365507388845e-6,1.6610608238690897e-8,0.0028862757956466495,-5.06888921218822e-6,1.6722303008240677e-8,0.0028863833910300974,-5.2754810860775145e-6,1.7020219754766915e-8,0.002886556622110814,-5.598336802918629e-6,1.7485702072118628e-8,0.0028868448006271175,-5.988001271290007e-6,1.804727106737048e-8,0.0028872654738177545,-6.371171534302883e-6,1.8599132347397268e-8,0.002887795844354059,-6.675623117016277e-6,1.903710691825924e-8,0.0028883812762736244,-6.855447025490349e-6,1.9295003604406827e-8,0.0028889563468819752,-6.903610854021034e-6,1.9362747686658358e-8,0.0028894665800328696,-6.847559620219423e-6,1.9280059028761153e-8,0.0028898810668172878,-6.734011844686922e-6,1.911450684067196e-8,0.0028901940052642504,-6.612662324206851e-6,1.893795127279494e-8,0.0028904191547270935,-6.524988204859821e-6,1.881034874825922e-8,0.002890582222841485,-6.4992181867616665e-6,1.8772471855239283e-8,0.0028907142743236822,-6.549601240706169e-6,1.8844849350322546e-8,0.0028908470537224477,-6.677663335062472e-6,1.9029580088897277e-8,0.0028910098168515577,-6.87394958687946e-6,1.9312855656179486e-8,0.0028912269035187145,-7.1197167658875545e-6,1.966742957177217e-8,0.0028915154465618195,-7.388703555439692e-6,2.0055217248474415e-8,0.002891882983346302,-7.649501334948221e-6,2.0430764834169687e-8,0.002892325261621495,-7.869140909601243e-6,2.0746451553512368e-8,0.002892825069667161,-8.018140622490618e-6,2.095977025193972e-8,0.0028933531569161294,-8.0765493987099e-6,2.1042023401707183e-8,0.0028938720607829473,-8.039749741569616e-6,2.0986676926427616e-8,0.002894342905333149,-7.92219781746215e-6,2.081475472290096e-8,0.0028947341280570267,-7.757261613370963e-6,2.0574609101836252e-8,0.0028950300744023127,-7.592178937176516e-6,2.033462657209387e-8,0.0028952370056188714,-7.47855706718128e-6,2.0169463592427875e-8,0.0028953844081573035,-7.460137255342665e-6,2.0142316838205095e-8,0.00289552034348127,-7.560525475110968e-6,2.0287169809216575e-8,0.0028957008077851775,-7.774273461944861e-6,2.0595931401456922e-8,0.0028959747760086865,-8.06484752748952e-6,2.1015565228355683e-8,0.0028963687909720668,-8.37202856618837e-6,2.1458840848969644e-8,0.002896876822197008,-8.628384556733143e-6,2.1828161536226112e-8,0.002897460687328443,-8.779917072525279e-6,2.2045408873836965e-8,0.0028980621551318326,-8.802502597728348e-6,2.207573173944743e-8,0.002898621746734977,-8.706920074860234e-6,2.1934852495291796e-8,0.0028990957821008693,-8.531279911183452e-6,2.1678125082780306e-8,0.002899465167343782,-8.326114196731398e-6,2.137891611386844e-8,0.0028997348041497496,-8.13959047569529e-6,2.110712912790612e-8,0.002899926963249216,-8.007836040779991e-6,2.091513975889782e-8,0.002900073067994656,-7.951291908204955e-6,2.0832502054918495e-8,0.002900206831484279,-7.975306429587075e-6,2.0866828269500727e-8,0.002900359629928538,-8.072622529241776e-6,2.1007425546019428e-8,0.0029005576921144888,-8.226159990315293e-6,2.1229360644075667e-8,0.0029008202589749987,-8.411462892954981e-6,2.1497037476612273e-8,0.0029011579526491515,-8.59892006014462e-6,2.176744153154923e-8,0.0029015709907129882,-8.756361710375036e-6,2.1993920303424827e-8,0.002902047505571332,-8.85279154909494e-6,2.2131593765595492e-8,0.0029025628872768883,-8.863671727157463e-6,2.2145000075912374e-8,0.0029030815052825793,-8.777345014016352e-6,2.2017385091665053e-8,0.0029035620496829224,-8.600986341434939e-6,2.175931513310784e-8,0.002903966637114285,-8.363362576374002e-6,2.141266869690318e-8,0.0029042717781266334,-8.111634884846253e-6,2.1045980547935134e-8,0.002904477372654277,-7.901280532790563e-6,2.073978444425112e-8,0.002904609628244343,-7.781372369153714e-6,2.0565217145761693e-8,0.002904715791276944,-7.780057503835996e-6,2.056294239996993e-8,0.0029048518634546975,-7.895457374774159e-6,2.0729997122619613e-8,0.0029050672122561154,-8.095212921731798e-6,2.1019213111936452e-8,0.0029053908949938285,-8.324795261790677e-6,2.1351336711916632e-8,0.002905823673533291,-8.52201545814966e-6,2.1636089845854755e-8,0.0029063379482547036,-8.63355664871243e-6,2.1796127132877224e-8,0.00290688567731947,-8.628754999473182e-6,2.178700899956975e-8,0.002907411886688896,-8.506448804640417e-6,2.1607149038605026e-8,0.002907869313118284,-8.29292031099503e-6,2.1294847433827952e-8,0.002908229337953015,-8.032291094367549e-6,2.0914343210019756e-8,0.002908486197412823,-7.773494661513888e-6,2.0536855496935417e-8,0.0029086544808403334,-7.5585686559262325e-6,2.0223523711567358e-8,0.0029087623904295403,-7.415402414785589e-6,2.001484051067057e-8,0.002908843981353781,-7.35553482324306e-6,1.9927459583560743e-8,0.002908932726752054,-7.375649943051864e-6,1.9956406208574644e-8,0.0029090572536835126,-7.460809532075294e-6,2.0079817615799907e-8,0.002909238952715364,-7.5879228762615555e-6,2.0264014865399943e-8,0.0029094906884145105,-7.728775534689363e-6,2.0467914700593435e-8,0.0029098158523242937,-7.852662044244406e-6,2.064685157630933e-8,0.002910207338650096,-7.929175550194102e-6,2.0756624253538985e-8,0.0029106466203267355,-7.931911576665453e-6,2.0758877958416994e-8,0.002911103814377557,-7.843588459108618e-6,2.062855490190973e-8,0.0029115402023730556,-7.66224497593975e-6,2.0362916420013977e-8,0.002911914696322001,-7.406730952055019e-6,1.998953139422466e-8,0.0029121945161994208,-7.118129171687856e-6,1.9568325801371748e-8,0.0029123675377467186,-6.853478439441242e-6,1.918239985768633e-8,0.002912450734123804,-6.670885447814342e-6,1.8916298524169225e-8,0.002912488859188778,-6.610394269086291e-6,1.88281387438807e-8,0.0029125417695362995,-6.679120462312963e-6,1.8928018749465943e-8,0.0029126652147423104,-6.848070988212437e-6,1.9173497757355166e-8,0.0029128935517388484,-7.061935206702308e-6,1.9483944368025575e-8,0.002913231037578079,-7.256695642236208e-6,1.9766193972595816e-8,0.0029136533209005457,-7.377571585707302e-6,1.9940619511564884e-8,0.0029141165252539614,-7.391701575272796e-6,1.9959524190801965e-8,0.0029145697689046887,-7.293322714917477e-6,1.981463990082668e-8,0.0029149673788549375,-7.1018310443380406e-6,1.953430007430907e-8,0.002915278149714961,-6.8545563898393026e-6,1.9172935518929185e-8,0.002915490151865234,-6.596725101954491e-6,1.8796465187354656e-8,0.0029156107375936115,-6.371248850546456e-6,1.846741356078346e-8,0.002915662539790091,-6.210673245514143e-6,1.8233164243708407e-8,0.0029156771594396804,-6.1327104522359935e-6,1.8119444504375368e-8,0.002915688499493966,-6.139498762978267e-6,1.812926086634637e-8,0.0029157272510905927,-6.219687203803143e-6,1.824596696099231e-8,0.0029158172217261446,-6.3520114728173305e-6,1.843850247261238e-8,0.002915973412501954,-6.5091582694995025e-6,1.8667034188020637e-8,0.0029162012640837876,-6.6612268782975755e-6,1.888798608393158e-8,0.0029164964235661433,-6.778735787311186e-6,1.9058396783844645e-8,0.002916844658644618,-6.835584702079287e-6,1.91402221340199e-8,0.0029172220097263466,-6.812552966048134e-6,1.910544630322981e-8,0.002917595884444303,-6.7017614420562816e-6,1.8942618913472558e-8,0.002917928412307093,-6.511815863831633e-6,1.8664385893287575e-8,0.00291818347875855,-6.2719153866716e-6,1.8313480562819844e-8,0.002918337682433519,-6.031490122748525e-6,1.7962147335797165e-8,0.002918392453911434,-5.8514246809711895e-6,1.7699255420367632e-8,0.0029183808220965175,-5.785913109725185e-6,1.760375851831056e-8,0.002918361694896576,-5.860827931022856e-6,1.7713146738291097e-8,0.0029184005478205227,-6.060277614749884e-6,1.8003943123245615e-8,0.0029185450818061424,-6.330635628385983e-6,1.8397723097046376e-8,0.002918808813042895,-6.6005652769916755e-6,1.8790403319492904e-8,0.002919169951357401,-6.805733183674234e-6,1.908827114831872e-8,0.0029195829508730235,-6.906435273516535e-6,1.92336174657321e-8,0.002919994648581057,-6.893430674434389e-6,1.9213166424777753e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json new file mode 100644 index 000000000..7805bb3bf --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":2000,"numberOfSamples":1000,"samples":[-0.0019226433452019043,-4.2400202047522655e-5,-4.847209139509104e-8,-0.0019224915279308452,-4.232138293995991e-5,-4.839917575682174e-8,-0.0019223575599970867,-4.2339533342532786e-5,-4.841941987929699e-8,-0.0019221925201880694,-4.2455757141232014e-5,-4.853500256368106e-8,-0.0019219535221161883,-4.264378690983704e-5,-4.87214377132331e-8,-0.0019216173050324704,-4.285653639574512e-5,-4.893368444013015e-8,-0.0019211878632388768,-4.304035090341533e-5,-4.911986351109583e-8,-0.0019206944269591652,-4.3151566455827686e-5,-4.923733483565604e-8,-0.001920180782153211,-4.316840557061996e-5,-4.9264336921476375e-8,-0.0019196912154135558,-4.3093903838697776e-5,-4.920299044056076e-8,-0.001919259170950511,-4.2950548434361e-5,-4.9074301884897993e-8,-0.0019189019210674083,-4.277089886837732e-5,-4.8909249976046343e-8,-0.0019186208521778832,-4.258868047478004e-5,-4.8740241599705884e-8,-0.001918404926768647,-4.243272605567538e-5,-4.859521792579728e-8,-0.0019182349450095773,-4.2323928794774185e-5,-4.849461482060666e-8,-0.0019180872700253946,-4.2274266862589164E-05,-4.8450338629402915e-8,-0.001917936666180632,-4.228680533004299e-5,-4.846574052979398e-8,-0.00191775854316843,-4.2355896173164964e-5,-4.8535824807684226e-8,-0.0019175311877270766,-4.246735024004276e-5,-4.864742159638906e-8,-0.0019172384671460499,-4.25989290061144e-5,-4.877961167038227e-8,-0.0019168730864799963,-4.2721876682799584e-5,-4.890508625070886e-8,-0.0019164398837302117,-4.280432151427329e-5,-4.8993279677066866e-8,-0.0019159579014177714,-4.281706315274191e-5,-4.901583883335078e-8,-0.0019154594243000278,-4.27412144250086e-5,-4.8953968414289994e-8,-0.001914984557283099,-4.2575562469439085e-5,-4.880561552483321e-8,-0.0019145716125768752,-4.234039279521026e-5,-4.858934382627422e-8,-0.0019142459086730812,-4.207501807745824e-5,-4.834220694952108e-8,-0.0019140111182697102,-4.1828569489815494e-5,-4.811113500434928e-8,-0.0019138468399848853,-4.1646650455964184e-5,-4.794024685992306e-8,-0.0019137136475314569,-4.155842585264431e-5,-4.785840090516636e-8,-0.0019135639168575628,-4.156847538008292e-5,-4.787112479174571e-8,-0.001913354878178476,-4.165575436672902e-5,-4.795925785880041e-8,-0.001913060039736298,-4.1779660100407035e-5,-4.808445425303678e-8,-0.0019126758326174886,-4.189128905126362e-5,-4.8199834042895305e-8,-0.0019122216639617473,-4.194655693717889e-5,-4.8262624541360104e-8,-0.0019117335388331718,-4.191721880810053e-5,-4.8244930247959284e-8,-0.0019112535774869718,-4.17965282482666e-5,-4.8139407883790543e-8,-0.0019108191058004997,-4.159831661316574e-5,-4.795859671838348e-8,-0.001910454761111615,-4.13507805095086e-5,-4.7729094163578805e-8,-0.0019101693588310655,-4.108797784158734e-5,-4.74834365018481e-8,-0.0019099571113809235,-4.084210928294797e-5,-4.725264424568893e-8,-0.0019098014051956349,-4.06383521782112e-5,-4.706116300989979e-8,-0.001909679232807439,-4.049244367589526e-5,-4.6924445600308274e-8,-0.0019095650792493577,-4.041027304587661e-5,-4.684851156054176e-8,-0.0019094338706790138,-4.038850509596943e-5,-4.6830551880131895e-8,-0.0019092631960406178,-4.041545998091156e-5,-4.685979719885473e-8,-0.0019090353342274217,-4.0471961726856714e-5,-4.691831881589462e-8,-0.0019087395911655302,-4.053242839868951e-5,-4.698199191766588e-8,-0.0019083750969175394,-4.0566889485238066e-5,-4.7022295836454817e-8,-0.0019079535950202848,-4.05448090409642e-5,-4.7009857068801336e-8,-0.0019075008929219535,-4.0441352326518995e-5,-4.692041592595363e-8,-0.0019070548602137859,-4.024557340002766e-5,-4.674274417153859e-8,-0.0019066581194424014,-3.996789525520936e-5,-4.648596905336088e-8,-0.0019063458229643833,-3.964246667720178e-5,-4.618202616974119e-8,-0.001906132593687367,-3.932066250072738e-5,-4.5879631296205274e-8,-0.001906005112413036,-3.9056140911694693e-5,-4.563013841888741e-8,-0.0019059250849624966,-3.888725831245831e-5,-4.547077730150599e-8,-0.0019058418160187416,-3.882488208844757e-5,-4.541289156609024e-8,-0.0019057084893034362,-3.885058262649113e-5,-4.5439933455113804e-8,-0.0019054953071705263,-3.892448678948119e-5,-4.551462448108332e-8,-0.0019051956015066044,-3.899818092129441e-5,-4.559102248754266e-8,-0.001904824751066378,-3.902764552633575e-5,-4.562680789434229e-8,-0.0019044139453100216,-3.898286178877979e-5,-4.5592592314242095e-8,-0.0019040014133682513,-3.8852641286461894e-5,-4.547679044559279e-8,-0.0019036234930003598,-3.864464423892581e-5,-4.5285911009026024e-8,-0.0019033074182967,-3.838144973804248e-5,-4.504099501526467e-8,-0.0019030670807785748,-3.809414814477403e-5,-4.477156044224583e-8,-0.0019029021776647626,-3.7815292683842436e-5,-4.4508817510060506e-8,-0.001902800227035411,-3.757290803529455e-5,-4.427982585191298e-8,-0.0019027403062597105,-3.738655521525043e-5,-4.410361508352597e-8,-0.0019026972766109718,-3.726562021454014e-5,-4.3989482282936625e-8,-0.0019026455605967178,-3.720939282853564e-5,-4.393706825168861e-8,-0.001902562049494492,-3.720819681311018e-5,-4.393747898583925e-8,-0.0019024282429587474,-3.7244887169539354e-5,-4.397474157144386e-8,-0.0019022320167928473,-3.7296417780327447e-5,-4.402726172840666e-8,-0.0019019694121183246,-3.733563521997301e-5,-4.406942025345132e-8,-0.0019016466101295054,-3.7333817380047615e-5,-4.4073850286943826e-8,-0.001901281721675244,-3.72647279533573e-5,-4.401521158739995e-8,-0.0019009051492186858,-3.7110772537172744e-5,-4.387608872624823e-8,-0.0019005564761927897,-3.687070357499274e-5,-4.365449081610721e-8,-0.0019002760006965934,-3.656614621766662e-5,-4.3370288285066725e-8,-0.0019000913323042824,-3.624205466668279e-5,-4.306583828633659e-8,-0.0019000039601944792,-3.5956706816941076e-5,-4.279656932567122e-8,-0.0018999840816792122,-3.576226105855051e-5,-4.261250079410351e-8,-0.0018999792883793371,-3.568461104514584e-5,-4.253901137884262e-8,-0.001899933981398471,-3.5713853399087564e-5,-4.2567602344540055e-8,-0.0018998090711157681,-3.581022732657273e-5,-4.266128735242672e-8,-0.0018995924498515157,-3.5920529128532807E-05,-4.27699363285063e-8,-0.0018992979805863262,-3.599552540735251e-5,-4.284667515898346e-8,-0.001898956996465333,-3.60016505232314e-5,-4.2859033641491364e-8,-0.0018986077115788766,-3.5925404995038095e-5,-4.2793327231141533e-8,-0.0018982861274868695,-3.5772115322624845e-5,-4.2653762704726326e-8,-0.0018980197803509253,-3.556151123416992e-5,-4.245848237196928e-8,-0.0018978243192027849,-3.532201505409536e-5,-4.2234258129154944e-8,-0.0018977025183165013,-3.5084842908056075e-5,-4.201085903922587e-8,-0.001897645338891351,-3.487865622253372e-5,-4.181584089370757e-8,-0.001897634548299051,-3.472539749417785e-5,-4.1670438822720854e-8,-0.0018976462592206278,-3.4637684651986404E-05,-4.158699002545304e-8,-0.0018976547528813345,-3.461783260192269e-5,-4.156798431104482e-8,-0.0018976360025567379,-3.465835456450116e-5,-4.160658512785339e-8,-0.0018975704668702292,-3.474353699435762e-5,-4.168818028849286e-8,-0.0018974450856599756,-3.485154582856132e-5,-4.179238643199875e-8,-0.0018972547032642363,-3.4956750270050015e-5,-4.189517808310863e-8,-0.0018970031462578617,-3.5032293373468896e-5,-4.1971187462921197e-8,-0.001896704041121835,-3.5053177068163955e-5,-4.199649895495414e-8,-0.0018963811064912409,-3.500033872352196e-5,-4.195247884233675e-8,-0.0018960669388229457,-3.486606242620335e-5,-4.183101890714069e-8,-0.0018957986732221059,-3.466005594878666e-5,-4.1640536726904226e-8,-0.0018956091571617987,-3.441367338006517e-5,-4.141024300465335e-8,-0.0018955143084655717,-3.417789714991304e-5,-4.11883959487616e-8,-0.0018955015199407235,-3.401103934461799e-5,-4.103064766105313e-8,-0.0018955276091062383,-3.395751831846302e-5,-4.097979506922786e-8,-0.0018955320612609062,-3.4027724788744977e-5,-4.104650552871127e-8,-0.001895460925824634,-3.419213691026499e-5,-4.120354608540807e-8,-0.0018952876637236959,-3.439431347479264e-5,-4.139792350116541e-8,-0.0018950194973305701,-3.4574094187676726e-5,-4.157273141268476e-8,-0.00189468901820827,-3.468727701743215e-5,-4.168573954249668e-8,-0.0018943393648524587,-3.471417304124221e-5,-4.171758103848185e-8,-0.001894011175966523,-3.4658126432902484e-5,-4.1670568510380554e-8,-0.0018937347654549707,-3.4538913747532676e-5,-4.156270803527193e-8,-0.0018935271586108895,-3.438520384909261e-5,-4.1420753571334326e-8,-0.0018933922404869188,-3.4228171385826936e-5,-4.127420869753851e-8,-0.0018933224519850319,-3.409667569558539e-5,-4.115067186901395e-8,-0.001893301244193991,-3.40137190510597e-5,-4.10723266568858e-8,-0.0018933060255165923,-3.399399788202456e-5,-4.105348708812609e-8,-0.0018933114133081418,-3.404253904550354e-5,-4.109924608197351e-8,-0.0018932925837213562,-3.415443233452324e-5,-4.120524021833533e-8,-0.0018932284621856921,-3.431570348176952e-5,-4.135853030487643e-8,-0.001893104383091029,-3.4505267334039883e-5,-4.1539480078514925e-8,-0.00189291393259836,-3.469764551964496e-5,-4.172428673891212e-8,-0.0018926599383916741,-3.486610463956082e-5,-4.188783776156979e-8,-0.0018923546511316431,-3.498605241766292e-5,-4.2006785198344876e-8,-0.001892019101621626,-3.5038631408074926e-5,-4.206286015466167e-8,-0.0018916814855736094,-3.5014534367428806e-5,-4.204652314564249e-8,-0.001891374040852943,-3.491799599962725e-5,-4.196092987201902e-8,-0.0018911275262606326,-3.477018738663742e-5,-4.182542386637248e-8,-0.0018909628356181614,-3.460994197225293e-5,-4.167647877700423e-8,-0.0018908809794151223,-3.448870510773402e-5,-4.1563025636714426e-8,-0.001890855680381783,-3.4457266426274074e-5,-4.1533801407386716e-8,-0.0018908353879217353,-3.454621539121781e-5,-4.1618610494880996e-8,-0.0018907590601062614,-3.474930510512576e-5,-4.1812322746267864e-8,-0.0018905806559135173,-3.502183484605819e-5,-4.2073175486873276e-8,-0.0018902883688857062,-3.529801938551741e-5,-4.233914044230188e-8,-0.0018899068551920142,-3.551742428610809e-5,-4.255290749642152e-8,-0.001889483249018912,-3.564481602849056e-5,-4.268065997382881e-8,-0.0018890679245541686,-3.567523527632135e-5,-4.2716955210695495e-8,-0.00188870032072965,-3.562727788606181e-5,-4.267856906938492e-8,-0.0018884030745074487,-3.5532202829357725e-5,-4.2594437460528625e-8,-0.0018881823723488097,-3.54243921208098e-5,-4.2496795451858114e-8,-0.0018880312102406572,-3.533504994855418e-5,-4.2415230301185514e-8,-0.0018879332139387782,-3.5288747014991394e-5,-4.237330143238159e-8,-0.0018878660597741292,-3.5301680267534746e-5,-4.23867434249854e-8,-0.001887804493950075,-3.5380813257388804e-5,-4.246254511061698e-8,-0.0018877231921547025,-3.552361030820859e-5,-4.259866804167272e-8,-0.0018875996014664324,-3.5718391160070784e-5,-4.278440830777563e-8,-0.0018874167566322304,-3.594551788242534e-5,-4.300154835611885e-8,-0.0018871657927251448,-3.617965687985636e-5,-4.322647911791066e-8,-0.0018868476636197298,-3.639308212496223e-5,-4.3433238917490384e-8,-0.0018864736576865142,-3.655967876258171e-5,-4.359717299143751e-8,-0.0018860644895497603,-3.66591992046944e-5,-4.369885112248462e-8,-0.0018856478855353213,-3.668124668546799e-5,-4.37278181581545e-8,-0.0018852547440176993,-3.6628421846668554e-5,-4.3685686879638724e-8,-0.0018849140165977931,-3.651813115392309e-5,-4.358808695279573e-8,-0.0018846464338938206,-3.638236555382138e-5,-4.346473580791103e-8,-0.0018844576056432885,-3.6264235942699986e-5,-4.3356365793623564e-8,-0.0018843321784880178,-3.6209913884206997e-5,-4.3307130103906174e-8,-0.0018842322632395324,-3.625576306513159e-5,-4.335226126403655e-8,-0.0018841040436168481,-3.641349949400654e-5,-4.350374571050373e-8,-0.0018838940566287233,-3.6660400894427665e-5,-4.374080127460915e-8,-0.001883570085252579,-3.694276386559895e-5,-4.401301964778491e-8,-0.001883135475562002,-3.7194520085842316e-5,-4.425796870583932e-8,-0.001882627578444282,-3.73621475032825e-5,-4.442477583414205e-8,-0.0018821014403124572,-3.742201299485457e-5,-4.4490542846202025e-8,-0.001881609313986513,-3.7382507458315104e-5,-4.4462439215216833e-8,-0.0018811865907120172,-3.7274116019286886e-5,-4.436849914685254e-8,-0.001880847632416261,-3.713591350573811e-5,-4.424508395808057e-8,-0.00188058871037337,-3.7004918805228556e-5,-4.4126962304448526e-8,-0.0018803936614843618,-3.691021781204701e-5,-4.4041748300567786e-8,-0.0018802392951189633,-3.6870851790922326e-5,-4.400778710220607e-8,-0.0018800994849178696,-3.68957089255605e-5,-4.40339130327419e-8,-0.0018799481169941405,-3.698411204251374e-5,-4.411991825255021e-8,-0.0018797614670353787,-3.7126553405316096e-5,-4.425722892864331e-8,-0.0018795204776576248,-3.730559347706619e-5,-4.442976975442706e-8,-0.0018792131464299988,-3.749729428555327e-5,-4.46153152223929e-8,-0.0018788368365865878,-3.7673694011914794e-5,-4.4787772369335294e-8,-0.0018783998781203336,-3.780658890837698e-5,-4.492065092723705e-8,-0.0018779216417479986,-3.787236867220032e-5,-4.4991520603290696e-8,-0.0018774304478634798,-3.785712894848209e-5,-4.4986782858554793e-8,-0.001876959132956837,-3.776087580238688e-5,-4.490568783170876e-8,-0.001876538772816988,-3.759950843431477e-5,-4.476237298058196e-8,-0.0018761917084975216,-3.740363503756282e-5,-4.458499652618009e-8,-0.0018759253154816227,-3.721393836510612e-5,-4.441161416080866e-8,-0.0018757279816746558,-3.7073377257336396e-5,-4.4282962063134714e-8,-0.0018755687920489152,-3.701708377818567e-5,-4.4232881827984826e-8,-0.0018754023218197238,-3.706175871807319e-5,-4.427809041286009e-8,-0.0018751791516401983,-3.71976903316632e-5,-4.4410338519050925e-8,-0.0018748606150037481,-3.738752598197328e-5,-4.4594994984169714e-8,-0.0018744330348925565,-3.7574982787928245E-05,-4.47791613026569e-8,-0.0018739145177022712,-3.770239276914684e-5,-4.490826020461936e-8,-0.0018733495373167643,-3.773009490362128e-5,-4.4944415378813574e-8,-0.0018727931908080317,-3.764831441568e-5,-4.487773977743384e-8,-0.0018722931442570632,-3.7476441825173546e-5,-4.472576455407728e-8,-0.0018718776143170825,-3.72522449686114e-5,-4.452343076403651e-8,-0.0018715526178116695,-3.701813258333055e-5,-4.431030817274317e-8,-0.0018713062231411261,-3.681055615655657e-5,-4.4120686585272034e-8,-0.001871115468151383,-3.665468354723957e-5,-4.397851191896047e-8,-0.001870952694577932,-3.6563328602725056e-5,-4.389625440586987e-8,-0.0018707900517583916,-3.653811265418476e-5,-4.3875885637797216e-8,-0.0018706023334060244,-3.6571255822349916e-5,-4.391050608580251e-8,-0.0018703688700737859,-3.664722159578986e-5,-4.398588937722728e-8,-0.0018700751930006965,-3.6744157938658e-5,-4.408184554328447e-8,-0.0018697148769254426,-3.683557666976917e-5,-4.4173775089313205e-8,-0.0018692914772034106,-3.6892936200826666e-5,-4.423502611041501e-8,-0.0018688199023591616,-3.688965083963331e-5,-4.424057092448585e-8,-0.0018683261082645549,-3.680648604854699e-5,-4.4172010900809014e-8,-0.0018678439684996118,-3.663736658049673e-5,-4.4023038613393244e-8,-0.0018674088734324848,-3.639364723333976e-5,-4.3803546879327065e-8,-0.0018670490319146785,-3.610454803253589e-5,-4.354021989210011e-8,-0.001866776960604691,-3.581233195531623e-5,-4.327223113044107e-8,-0.0018665842545617494,-3.556274227869284e-5,-4.304246095848443e-8,-0.0018664419014308188,-3.539322985208859e-5,-4.2886518844144926e-8,-0.001866306540510951,-3.532250177755452e-5,-4.282282625286369e-8,-0.0018661311596336301,-3.5344543323723834e-5,-4.284673828172474e-8,-0.0018658774885188531,-3.542898898557433e-5,-4.293057236042494e-8,-0.0018655268253949977,-3.55281941668765e-5,-4.303001094315354e-8,-0.0018650860333417425,-3.55896847358241e-5,-4.309572055327366e-8,-0.0018645862558132557,-3.557072469934887e-5,-4.3087114771064386e-8,-0.001864074064290464,-3.54502290003869e-5,-4.298370377047688e-8,-0.0018635978679334747,-3.523359331224885e-5,-4.278980205390345e-8,-0.0018631947076426666,-3.494883476042089e-5,-4.2531058883068645e-8,-0.0018628822307316867,-3.4636347734627516E-05,-4.224496475448857e-8,-0.0018626577466252,-3.433705755884229e-5,-4.196979779298566e-8,-0.0018625028468491243,-3.408334448344101e-5,-4.173608792809358e-8,-0.0018623903292806535,-3.389462368841906e-5,-4.1562378749819724e-8,-0.001862290600784725,-3.377697613200107e-5,-4.145477037782527e-8,-0.0018621762300559555,-3.3725088096835355e-5,-4.14086669723388e-8,-0.0018620246347852986,-3.372488473601601e-5,-4.141123207304418e-8,-0.0018618195632346566,-3.375593156589706e-5,-4.1443656121148575e-8,-0.0018615521548540242,-3.3793432453618705e-5,-4.148302730689643e-8,-0.001861222100187459,-3.3810221048498295E-05,-4.15041470998425e-8,-0.0018608389284970092,-3.377941053241642e-5,-4.148192086511341e-8,-0.0018604228570434176,-3.367833230390359e-5,-4.139496124109246e-8,-0.0018600040268228783,-3.3493942425028966e-5,-4.123062094176194e-8,-0.001859618642548962,-3.322877352067173e-5,-4.0990619843655576e-8,-0.0018593011806838898,-3.290498445207031e-5,-4.0694967467908326e-8,-0.001859073836432133,-3.256319848003421e-5,-4.038105550600808e-8,-0.0018589370096645738,-3.225400787141628e-5,-4.0095898376829484e-8,-0.0018588658572420299,-3.202355089014602e-5,-3.988278237900221e-8,-0.001858815953690681,-3.1898535195761845e-5,-3.9767279252543205e-8,-0.0018587365322608792,-3.187731481624273e-5,-3.974875641256137e-8,-0.001858585847420525,-3.193072891426777e-5,-3.9800881931187754e-8,-0.0018583427276889898,-3.201157846011818e-5,-3.988018363222736e-8,-0.001858011024484624,-3.206838339685549e-5,-3.993871620605644e-8,-0.0018576168661056972,-3.2058722129593e-5,-3.993651170976707e-8,-0.001857200628294303,-3.1958785793748546e-5,-3.98506487342928e-8,-0.0018568063178679155,-3.1767390735336565e-5,-3.9679225404044e-8,-0.0018564711830394505,-3.150417991339459e-5,-3.943989843936122e-8,-0.0018562180244630548,-3.120309508365586e-5,-3.916393604405171e-8,-0.001856051832860989,-3.0903287984785486e-5,-3.888777991719524e-8,-0.0018559610387409902,-3.0640165715613776e-5,-3.864464037772421e-8,-0.0018559222165318323,-3.043888182499085e-5,-3.845831450517588e-8,-0.0018559062367179708,-3.031135180046263e-5,-3.8340287099323454e-8,-0.0018558839785556914,-3.025648674119293e-5,-3.828987583339211e-8,-0.0018558305005729916,-3.0262498510445098e-5,-3.829637141557298e-8,-0.0018557274688207667,-3.030998413607464e-5,-3.8341946180221575e-8,-0.0018555642923261315,-3.0374874455143256e-5,-3.8404431294548646e-8,-0.0018553386335638984,-3.043096245585696e-5,-3.8459652833342595e-8,-0.0018550567897867762,-3.0452262426219995e-5,-3.8483550463237314e-8,-0.0018547340635318174,-3.041572528206477e-5,-3.8454603062521525e-8,-0.0018543947164707576,-3.03048875961989e-5,-3.835716288178646e-8,-0.0018540704590361671,-3.0114692323656852e-5,-3.81859702743685e-8,-0.0018537960249984855,-2.985666954648834e-5,-3.79511015108531e-8,-0.0018536008786521339,-2.9562027461414482e-5,-3.768102528692731e-8,-0.0018534981424192035,-2.927893614320846e-5,-3.742024332911934e-8,-0.0018534751696137296,-2.9061233360087007e-5,-3.72188887172703e-8,-0.0018534923481789171,-2.8950357584252507e-5,-3.711593484750272e-8,-0.0018534940550578869,-2.8958436077817732e-5,-3.7123378482837e-8,-0.0018534282008300274,-2.9062277323979435e-5,-3.722046668883958e-8,-0.0018532645332598092,-2.921211788923309e-5,-3.736159207290112e-8,-0.0018530028720135114,-2.934986972526837e-5,-3.7493050320642694e-8,-0.0018526694542170326,-2.942727873570747e-5,-3.756982425163037e-8,-0.0018523058642196187,-2.9417150023504876e-5,-3.7566073539067835e-8,-0.0018519564866905035,-2.9316192868627697e-5,-3.7477965536880444e-8,-0.0018516584089416203,-2.9141557732680905e-5,-3.7320700414486564e-8,-0.001851435208412855,-2.8923992161479002e-5,-3.712235494419344e-8,-0.001851294541339165,-2.869997092993335e-5,-3.691666372244825e-8,-0.0018512288972952473,-2.850431556199019e-5,-3.673612972502268e-8,-0.0018512187605911334,-2.8364293030248146e-5,-3.6606422818222735e-8,-0.0018512372743969517,-2.8295880091963878e-5,-3.6542771387623024e-8,-0.001851255373367241,-2.830245486957463e-5,-3.654865101402205e-8,-0.0018512464347500161,-2.837567990696616e-5,-3.661658029509977e-8,-0.0018511897654824728,-2.849797616767571e-5,-3.6730452314410044e-8,-0.0018510726455833026,-2.864577894127868e-5,-3.6868605111867225e-8,-0.0018508911239511774,-2.879283048085962e-5,-3.700688885749968e-8,-0.0018506500169525825,-2.891316386992196e-5,-3.712138235946777e-8,-0.0018503624659893852,-2.8983841434482034e-5,-3.719083313132091e-8,-0.001850049192722774,-2.8987717253845237e-5,-3.719912582085492e-8,-0.00184973724683297,-2.8916604783197052e-5,-3.7138199915807674e-8,-0.0018494574590516221,-2.877500685094965e-5,-3.7011601488886906e-8,-0.001849239457271444,-2.8583618727700412e-5,-3.6837917133073514e-8,-0.001849103637120204,-2.8380420558935783e-5,-3.665199142573758e-8,-0.0018490512556514666,-2.8216113176951286e-5,-3.650082802289004e-8,-0.0018490568923369543,-2.814133170477168e-5,-3.643173901900574e-8,-0.001849070044366471,-2.8187498919253204e-5,-3.6474479853762786e-8,-0.0018490301023305032,-2.835027238269989e-5,-3.662573037762882e-8,-0.0018488899067574623,-2.8587217166636767e-5,-3.6846766146306595e-8,-0.0018486348257891318,-2.883361606393152e-5,-3.707797543919425e-8,-0.0018482863056600417,-2.902755950667316e-5,-3.726201459105288e-8,-0.0018478899852914469,-2.9130064005063796e-5,-3.736241363816512e-8,-0.0018474976562760789,-2.91321131307372e-5,-3.737016828147584e-8,-0.0018471524750899352,-2.905016180405401e-5,-3.729976063286029e-8,-0.0018468812786227445,-2.8916268553225196e-5,-3.718025357565311e-8,-0.0018466931172711491,-2.876806315238052e-5,-3.7046173746412294e-8,-0.0018465815057894385,-2.8640983775258864e-5,-3.6930365429741035e-8,-0.00184652829693714,-2.8563136245366806e-5,-3.685914654239289e-8,-0.0018465080445311866,-2.8552306292304803e-5,-3.6849396405970724e-8,-0.0018464923711327586,-2.8614698711177184e-5,-3.69072585309602e-8,-0.0018464540475209713,-2.874515858709884e-5,-3.702828145510411e-8,-0.001846370522506678,-2.8928669467886978e-5,-3.7198811661589566e-8,-0.001846226627091265,-2.9142919199792575e-5,-3.739840984195331e-8,-0.0018460161773210895,-2.936159596526058e-5,-3.7602928735736206e-8,-0.0018457424092981416,-2.9557907441157696e-5,-3.7787745528739335e-8,-0.0018454174436069045,-2.9707932709951874e-5,-3.793078679950588e-8,-0.001845060979936064,-2.9793682517744152e-5,-3.8015266553066575e-8,-0.0018446983139210466,-2.9805837685586976e-5,-3.803216933965162e-8,-0.001844357663506958,-2.974619611849742e-5,-3.7982560537325245e-8,-0.0018440664544479193,-2.9629797711193566e-5,-3.7879707314877856e-8,-0.001843845950446449,-2.948601531108566e-5,-3.775030341662861e-8,-0.0018437041818345754,-2.9356851092842417e-5,-3.763307774716062e-8,-0.0018436286704259478,-2.929018395984869e-5,-3.7572610524337075e-8,-0.0018435826591715672,-2.9326650546160026e-5,-3.7607099199983846e-8,-0.001843510243611047,-2.9482479522100277e-5,-3.7752270839027916e-8,-0.0018433534878047207,-2.9736569576451163e-5,-3.798922207122916e-8,-0.001843076228620517,-3.003258999787417e-5,-3.826624809927366e-8,-0.0018426810050820315,-3.0299279226205748e-5,-3.851758748645876e-8,-0.0018422077376924746,-3.0478508169391107e-5,-3.8689353289091895e-8,-0.0018417156239789582,-3.054470317700498e-5,-3.875746335719129e-8,-0.0018412606553196052,-3.050710730095082e-5,-3.872977574482587e-8,-0.001840880483325183,-3.0398882257686496e-5,-3.8636192256924036e-8,-0.001840590004125507,-3.026250677128237e-5,-3.851540126764517e-8,-0.0018403844397698059,-3.013820957242196e-5,-3.840435285169504e-8,-0.001840245361005513,-3.0057347763451893e-5,-3.8332152701456324e-8,-0.0018401466765782936,-3.0039751280580974e-5,-3.831749547487945e-8,-0.0018400595016326148,-3.0093363332831677e-5,-3.836817784862127e-8,-0.0018399559497764423,-3.0215015910877106e-5,-3.848169905675189e-8,-0.001839812170196447,-3.039186553279613e-5,-3.864654273812751e-8,-0.0018396108283989022,-3.060338054950594e-5,-3.884402378562721e-8,-0.0018393430417674114,-3.082394307346604e-5,-3.905071575977295e-8,-0.001839009544828154,-3.1026114366856945e-5,-3.924146216346563e-8,-0.0018386207708631277,-3.1184328723264915e-5,-3.939273712194119e-8,-0.0018381957305413437,-3.127857148136643e-5,-3.948596451419425e-8,-0.0018377597459139795,-3.1297656724416976e-5,-3.95104860508152e-8,-0.001837341137178437,-3.1241751125251476e-5,-3.946590292406994e-8,-0.0018369670512292443,-3.112376810976386e-5,-3.9363472022820164e-8,-0.0018366586561733092,-3.096932899220622e-5,-3.922626209101001e-8,-0.0018364258708403016,-3.0814812173559905e-5,-3.9087559514838445e-8,-0.0018362621920370473,-3.070252357614279e-5,-3.8986539372919337e-8,-0.0018361412688580824,-3.067203929167175e-5,-3.896025500527251e-8,-0.0018360180816703487,-3.0748042684471684e-5,-3.903223795898209e-8,-0.0018358378502917804,-3.092774827382751e-5,-3.920064225747588e-8,-0.0018355532968053283,-3.1174550168373766e-5,-3.9432189756387474e-8,-0.0018351446756584952,-3.142525945238052e-5,-3.966879216514516e-8,-0.001834631257077125,-3.161182618802566e-5,-3.9847630332795574e-8,-0.001834065391188641,-3.168747068911088e-5,-3.992527940095902e-8,-0.0018335116541834382,-3.164236364109196e-5,-3.989214970654177e-8,-0.0018330236496004874,-3.1501495858562004e-5,-3.977056585296882e-8,-0.0018326302885483708,-3.130976247069251e-5,-3.960119517536447e-8,-0.0018323344622033428,-3.111494455177007e-5,-3.94275962437217e-8,-0.0018321196002908996,-3.095597209536023e-5,-3.928554181120305e-8,-0.0018319582888422555,-3.085789845493625e-5,-3.919836392406287e-8,-0.0018318194757880513,-3.083157342368737e-5,-3.9176511626126014e-8,-0.0018316733480543946,-3.0875483927058214e-5,-3.9219089175635253e-8,-0.0018314943794796696,-3.097812687524317e-5,-3.931593991989682e-8,-0.0018312633560748676,-3.1120334429811935e-5,-3.9449760179892773e-8,-0.001830968913688379,-3.1277592120351454e-5,-3.9598246635518696e-8,-0.0018306087634235733,-3.14226374107931e-5,-3.9736499110668715e-8,-0.0018301904168349817,-3.152864766531905e-5,-3.9839932121797345e-8,-0.0018297309265778968,-3.1573033171681355e-5,-3.988771007373838e-8,-0.0018292551760944991,-3.154139489645285e-5,-3.986633134180522e-8,-0.0018287925523648566,-3.1430926466745534e-5,-3.977274223006469e-8,-0.0018283721888019805,-3.125244172846257e-5,-3.961626454205167e-8,-0.0018280173510476312,-3.1030241019074e-5,-3.941861928815817e-8,-0.0018277399014371466,-3.079933897322065e-5,-3.921157228495376e-8,-0.0018275359237807758,-3.060002936908609e-5,-3.9032106768399976e-8,-0.0018273836315456557,-3.0470075984707517e-5,-3.891530628053033e-8,-0.0018272448509398856,-3.0435259419920423e-5,-3.8885571590877783e-8,-0.0018270713806662069,-3.0500042234658058e-5,-3.8947817158765014e-8,-0.0018268166773114957,-3.064158208297821e-5,-3.908171343754616e-8,-0.0018264509824322654,-3.081128525962225e-5,-3.924294928095106e-8,-0.0018259745066705093,-3.0946791653507584e-5,-3.937422858396294e-8,-0.001825421200068397,-3.0992294321174295e-5,-3.942401662190722e-8,-0.001824848707194268,-3.091859675203208e-5,-3.936503312287334e-8,-0.0018243181665254498,-3.0732388589482095e-5,-3.920280801715213e-8,-0.0018238741939498265,-3.047033281073113e-5,-3.897033103345112e-8,-0.0018235344222076416,-3.0182968256406758e-5,-3.871343791162342e-8,-0.0018232907112232296,-2.9917962061241705e-5,-3.8475612220985564e-8,-0.0018231175915879915,-2.9709470223528575e-5,-3.8288287874661005e-8,-0.0018229820547856707,-2.9574767415543407e-5,-3.8167680241916334e-8,-0.0018228511227224586,-2.951575072500136e-5,-3.811601209651671e-8,-0.0018226963993247997,-2.9522399260808083e-5,-3.812455102291935e-8,-0.001822496346012939,-2.9576313361484465e-5,-3.817679071516764e-8,-0.00182223736569908,-2.9653667368211555e-5,-3.82511596794088e-8,-0.001821914484007764,-2.9727713244422272e-5,-3.8323339418991535e-8,-0.0018215319226575477,-2.9771325860086927e-5,-3.836859871537784e-8,-0.0018211033649289739,-2.9760077349048065e-5,-3.8364575828414726e-8,-0.0018206513209798074,-2.967600860452736e-5,-3.82946771372016e-8,-0.001820204868578569,-2.95117106918752e-5,-3.815177651088395e-8,-0.001819795308698592,-2.9273717903851084e-5,-3.7941337848129227e-8,-0.0018194499553985499,-2.8983792765006212e-5,-3.768268339819807e-8,-0.001819185216669178,-2.867678407238349e-5,-3.74071910297524e-8,-0.0018190008974349288,-2.83945853396037e-5,-3.715294339073842e-8,-0.001818877777254797,-2.8177048843502435e-5,-3.69565401325332e-8,-0.001818779842287521,-2.8051892787703585e-5,-3.684386725138177e-8,-0.0018186613648890997,-2.8026242318695985e-5,-3.682221547238342e-8,-0.0018184777104345217,-2.8082404782524753e-5,-3.687617397457534e-8,-0.0018181975534309522,-2.8179856821560048e-5,-3.6969212144048666e-8,-0.001817813196202531,-2.8264185854983048e-5,-3.705172966271644e-8,-0.001817345167041442,-2.8281685470529075e-5,-3.707441588866618e-8,-0.0018168381018592475,-2.8195553966210703e-5,-3.7003162870434875e-8,-0.0018163479603249767,-2.799754849487948e-5,-3.6829836985857307e-8,-0.0018159250008670967,-2.770979157575244e-5,-3.657403648862273e-8,-0.0018155995956956029,-2.7375894624095573e-5,-3.6275093682421794e-8,-0.0018153764219808644,-2.704596699485922e-5,-3.5978494998850386e-8,-0.0018152377869368145,-2.6762455524996808e-5,-3.572301447864534e-8,-0.001815152477201721,-2.6551760020655958e-5,-3.553302574177351e-8,-0.0018150853173970892,-2.6422470662984083e-5,-3.541677798998169e-8,-0.0018150042988686545,-2.6368080187245047e-5,-3.5368740905128105e-8,-0.001814884542944513,-2.637140326946383e-5,-3.5373559468304656e-8,-0.0018147098501943748,-2.640883213452553e-5,-3.540992975432918e-8,-0.001814472968339351,-2.6453705314678775e-5,-3.5453704890593495e-8,-0.0018141754822484056,-2.6478914642215583e-5,-3.548029701796509e-8,-0.0018138277280354835,-2.645933668573588e-5,-3.54668779570484e-8,-0.0018134485433922909,-2.63746995002284e-5,-3.539493771542412e-8,-0.0018130641999637516,-2.6213143484268603e-5,-3.525347116797519e-8,-0.0018127056529817164,-2.5975139443379584e-5,-3.504252776569707e-8,-0.0018124034131899443,-2.5676611824827752e-5,-3.477610412804476e-8,-0.0018121801872194175,-2.534931109205454e-5,-3.448259855575883e-8,-0.0018120429840718477,-2.503646524431114e-5,-3.420100849172037e-8,-0.0018119778375527472,-2.4783230392470123e-5,-3.3972382770939356e-8,-0.001811950347330866,-2.462408751833058e-5,-3.3828419190625865e-8,-0.0018119132838824324,-2.4571574822020067e-5,-3.3781151941416513e-8,-0.0018118193692635378,-2.461097139426063e-5,-3.381793208892705e-8,-0.0018116348830005524,-2.470333459138878e-5,-3.390395510139745e-8,-0.0018113494195414132,-2.479592830408992e-5,-3.399155855798691e-8,-0.0018109788397635016,-2.483652227449304e-5,-3.403315775348767e-8,-0.0018105608775236578,-2.4787225178468724e-5,-3.399388280325552e-8,-0.001810144903993606,-2.4634019749026035e-5,-3.386038668968676e-8,-0.0018097788424705386,-2.438943653685379e-5,-3.364343809426621e-8,-0.0018094970976968308,-2.408776623021186e-5,-3.3373712923926915e-8,-0.0018093131065530167,-2.3774611485516244e-5,-3.3092397700764274e-8,-0.0018092184234519324,-2.3494490111001275e-5,-3.283995827133673e-8,-0.0018091877331322158,-2.3280593294754563e-5,-3.2646790853564697e-8,-0.0018091871161683125,-2.314939866682767e-5,-3.252822506211939e-8,-0.0018091823293289193,-2.31004611501778e-5,-3.248421726376951e-8,-0.0018091448540584615,-2.311978262620908e-5,-3.250233499343941e-8,-0.0018090550794540737,-2.3184591180723153e-5,-3.2562086291900066e-8,-0.0018089031861997175,-2.3267897328885993e-5,-3.2639095018153503e-8,-0.0018086887334329814,-2.3342085624690892e-5,-3.2708403157821664e-8,-0.0018084198247745962,-2.338158487023955e-5,-3.2746898333729124e-8,-0.0018081122968712463,-2.3365150542970265e-5,-3.273533916353727e-8,-0.001807788822855228,-2.3278370617031e-5,-3.2660558495518114e-8,-0.0018074773359588981,-2.3116713555088714e-5,-3.251818044986732e-8,-0.0018072078836895496,-2.2888860456224638e-5,-3.231565942478291e-8,-0.0018070071067168634,-2.2619145607374683e-5,-3.2074584949186564e-8,-0.0018068904090166695,-2.2346867579039005e-5,-3.18301977417072e-8,-0.001806853807850492,-2.2119984734449717e-5,-3.162581546841964e-8,-0.0018068696241016469,-2.198255341150245e-5,-3.150153125112428e-8,-0.0018068904530553504,-2.195926967130759e-5,-3.1480191546692454e-8,-0.0018068624614854115,-2.2044177423088666e-5,-3.155704270849953e-8,-0.0018067433270976935,-2.2200245280886165e-5,-3.1699156433731375e-8,-0.0018065165630427827,-2.2371032429944445e-5,-3.1855811466588946e-8,-0.0018061958896326482,-2.2498959032548624e-5,-3.197492592167717e-8,-0.0018058190557784669,-2.2542034459431462e-5,-3.201819263383411e-8,-0.0018054353226003737,-2.2483393859611878e-5,-3.196979945333175e-8,-0.001805091981515879,-2.2332389766442987e-5,-3.183757466667896e-8,-0.0018048237525921153,-2.211905907663405e-5,-3.1648156894879373e-8,-0.0018046468284378982,-2.1884874969180767e-5,-3.1438765962970895e-8,-0.0018045577965828564,-2.167257080863706e-5,-3.124804952076372e-8,-0.0018045367469031802,-2.1517256483314775e-5,-3.1108003719807276e-8,-0.0018045532547471112,-2.1440415901790588e-5,-3.103843208390343e-8,-0.0018045734964459543,-2.1447606975861767e-5,-3.1044738831155513e-8,-0.0018045667264467702,-2.1529672691860464e-5,-3.111893588046535e-8,-0.0018045098804961046,-2.1666384245823865e-5,-3.1242914374253404e-8,-0.0018043898839023068,-2.183112130503548e-5,-3.1392708760228225e-8,-0.001804203954475141,-2.1995397908962797e-5,-3.1542638797071024e-8,-0.0018039586205425583,-2.2132522471774145e-5,-3.166864148494045e-8,-0.0018036682150897336,-2.222029327998615e-5,-3.1750683255942955e-8,-0.0018033532774611,-2.2243105107731316e-5,-3.1774601732825967e-8,-0.0018030388535303287,-2.2193945397383773e-5,-3.173385130063672e-8,-0.0018027522942073136,-2.2076575061598045e-5,-3.1631467135425805e-8,-0.0018025198123736337,-2.1907738260673892e-5,-3.148213395270582e-8,-0.0018023610503111382,-2.171835234695091e-5,-3.131339673265721e-8,-0.0018022817446064101,-2.155153029171974e-5,-3.1164020013668663e-8,-0.0018022664981731129,-2.145492195250491e-5,-3.107715875834362e-8,-0.0018022761116299893,-2.1466616576633423e-5,-3.1087611729159285e-8,-0.001802254637597213,-2.1598488185100718e-5,-3.1206666940015674e-8,-0.0018021472428660756,-2.182595909351053e-5,-3.1412695010306495e-8,-0.0018019218634438376,-2.2092822584774562e-5,-3.1655360838329714e-8,-0.0018015825756897933,-2.2331161258804622e-5,-3.187351846210822e-8,-0.0018011669858702807,-2.2485932648024347e-5,-3.2017362632812046e-8,-0.0018007305205330378,-2.2531424552391003e-5,-3.20632837968358e-8,-0.0018003274466781097,-2.247396849454174e-5,-3.201639378115172e-8,-0.001799997044701253,-2.2344006761817026e-5,-3.190352915618942e-8,-0.0017997576968600084,-2.2183994777753875e-5,-3.1762527108728355e-8,-0.0017996074214415598,-2.2037129804367622e-5,-3.163218737463046e-8,-0.0017995281388526994,-2.1939134700851098e-5,-3.1544874466880096e-8,-0.001799491474118722,-2.191336925847295e-5,-3.1522014871558e-8,-0.0017994648236848451,-2.196879034163294e-5,-3.157211653547259e-8,-0.0017994169612412726,-2.210030852102367e-5,-3.1690969385098476e-8,-0.0017993225970557186,-2.2291116208268445e-5,-3.1863685374065217e-8,-0.0017991654559053219,-2.2516364846537557e-5,-3.2068017711543623e-8,-0.0017989396964144166,-2.2747470340719118e-5,-3.2278281986817246e-8,-0.001798649733945888,-2.2956364822787877e-5,-3.246922246142647e-8,-0.0017983088087218547,-2.3119105042172602e-5,-3.2619262744900355e-8,-0.0017979368481374199,-2.3218557224021916e-5,-3.271288686018867e-8,-0.001797558043108042,-2.3246284945411038e-5,-3.274229168261259e-8,-0.0017971982454755217,-2.3203905608775542e-5,-3.2708591798824984e-8,-0.0017968820442133351,-2.3104089519329166e-5,-3.2622768771998037e-8,-0.0017966291126735867,-2.297111342990777e-5,-3.250628913382254e-8,-0.0017964493540700971,-2.2840186859440642e-5,-3.239064633254201e-8,-0.001796337092370337,-2.2753871040159905e-5,-3.231424590201427e-8,-0.001796266176874397,-2.2753701692947285e-5,-3.2314867821004395e-8,-0.0017961898758915664,-2.2866622884127602e-5,-3.241733430757836e-8,-0.0017960501969663332,-2.3089920943539757e-5,-3.261975895170297e-8,-0.0017957976108034395,-2.3383568322421448e-5,-3.288650179068292e-8,-0.0017954135250510931,-2.3679171476829465e-5,-3.315617804332179e-8,-0.0017949215447578652,-2.390518557869303e-5,-3.336437672142568e-8,-0.0017943787200954949,-2.401500851776904e-5,-3.3468942402757484e-8,-0.0017938521133034476,-2.400161061140643e-5,-3.346310636110839e-8,-0.0017933953283730748,-2.3893135268437862e-5,-3.3371567284018426e-8,-0.0017930360672664986,-2.3736813868647664e-5,-3.323619106299432e-8,-0.0017927757839283627,-2.3582117106361543e-5,-3.310107169625848e-8,-0.0017925963117210405,-2.3469363688785598e-5,-3.300241303329868e-8,-0.0017924682328384592,-2.342451096539411e-5,-3.296382113706184e-8,-0.0017923581550719071,-2.345828625550179e-5,-3.299539036168371e-8,-0.001792234150133278,-2.356759742598324e-5,-3.309481410911366e-8,-0.0017920696405059335,-2.3737980155055785e-5,-3.324947345493431e-8,-0.0017918461088012336,-2.3946656287756952e-5,-3.343914759620848e-8,-0.0017915547494891267,-2.416604836192296e-5,-3.363918826601897e-8,-0.0017911970460121622,-2.4367571375549456e-5,-3.382396166819764e-8,-0.0017907841940512808,-2.4525457139788785e-5,-3.3970302096064133e-8,-0.0017903353488858134,-2.4620205356925683e-5,-3.4060599419872674e-8,-0.001789874928831574,-2.464121873006898e-5,-3.408513361013069e-8,-0.0017894293545302076,-2.458842006514815e-5,-3.404350871950484e-8,-0.001789023505241213,-2.4472837169482275e-5,-3.394520600674971e-8,-0.0017886770648342907,-2.431614883409421e-5,-3.3809267595780996e-8,-0.0017884008200234735,-2.4149141187628658e-5,-3.366304609271047e-8,-0.001788192903348495,-2.4008712245158947e-5,-3.353964297579916e-8,-0.0017880354372265181,-2.393253545893989e-5,-3.347316905691076e-8,-0.0017878931539800256,-2.3950554353910987e-5,-3.34910405981934e-8,-0.0017877167144701928,-2.4073806065351983e-5,-3.360377068735919e-8,-0.001787453569690734,-2.428392045087678e-5,-3.379534491041236e-8,-0.0017870663495322726,-2.4530220442592966e-5,-3.402051298850108e-8,-0.0017865519910194932,-2.4741563720019448e-5,-3.4215448424805376e-8,-0.0017859491906381667,-2.4852189071213217e-5,-3.4321023197333045e-8,-0.001785325958533287,-2.482869995671932e-5,-3.4307016493753474e-8,-0.0017847528767015353,-2.4681669420333632e-5,-3.418245486606978e-8,-0.0017842781208460322,-2.4456188730650273e-5,-3.3987154219619505e-8,-0.0017839168488831807,-2.4210443635923462e-5,-3.3772695142451446e-8,-0.0017836554356915608,-2.3996010205156732e-5,-3.358499104157047e-8,-0.0017834629055072672,-2.384722325415727e-5,-3.345487005540549e-8,-0.0017833022278605421,-2.377911957973221e-5,-3.33961693481918e-8,-0.0017831382257718895,-2.3790191594592873e-5,-3.340803787799357e-8,-0.0017829420119458068,-2.386664304225821e-5,-3.347858835271957e-8,-0.0017826931337199766,-2.3986439556649512e-5,-3.35884337520014e-8,-0.001782380554182279,-2.4122805007119548e-5,-3.37138034186474e-8,-0.0017820030107513522,-2.424741808773985e-5,-3.382943346932811e-8,-0.0017815688268330704,-2.4333593880854584e-5,-3.391144581214018e-8,-0.0017810949919451016,-2.435957061890063e-5,-3.3940296734933424e-8,-0.0017806052023764001,-2.4311695591746605e-5,-3.3903609380761455e-8,-0.001780126733231539,-2.4186960953258744e-5,-3.3798419210927013e-8,-0.001779686389109376,-2.3994309151659606e-5,-3.363234575116789e-8,-0.0017793060255654567,-2.3754312161234117e-5,-3.3423362014270186e-8,-0.0017789982504817423,-2.3497003448101446e-5,-3.319796437690346e-8,-0.0017787629677499328,-2.325789658218794e-5,-3.2987743056121986e-8,-0.0017785853328477087,-2.307245026259536e-5,-3.2824528494159e-8,-0.001778435693719291,-2.29692203202828e-5,-3.2734270343295896e-8,-0.0017782724447692514,-2.2962114363640616e-5,-3.2729999425653523e-8,-0.0017780489744251891,-2.304310446279494e-5,-3.2805121499466924e-8,-0.0017777252482119056,-2.3178271529330762e-5,-3.292970232577239e-8,-0.0017772823647096638,-2.331129259651724e-5,-3.305351428606098e-8,-0.0017767346083272459,-2.3377529158287416e-5,-3.311868318348257e-8,-0.001776130764697321,-2.3326480780226323e-5,-3.3079844371637935e-8,-0.0017755397912121303,-2.3142506066602418e-5,-3.292267378791187e-8,-0.001775025923089456,-2.285130228165791e-5,-3.2669641431352325e-8,-0.001774626618706956,-2.2507845107702927e-5,-3.2369284423643596e-8,-0.0017743445685003865,-2.217390512592298e-5,-3.207630409849978e-8,-0.0017741544806826274,-2.1898231682136928e-5,-3.1834061464338805e-8,-0.0017740169436090173,-2.1707118952548065e-5,-3.166620956255327e-8,-0.001773891219541728,-2.1604779152879516e-5,-3.157692307526984e-8,-0.0017737432310165142,-2.157882930216389e-5,-3.155562491937049e-8,-0.0017735489504333692,-2.1606679331330368e-5,-3.1582552828697624e-8,-0.0017732949817235678,-2.1660754250425577e-5,-3.163336707176071e-8,-0.0017729779982578978,-2.1712249139899234e-5,-3.1682516270717386e-8,-0.0017726039251191308,-2.1733947237802756e-5,-3.170578892729579e-8,-0.0017721870422029683,-2.170274238348413e-5,-3.168258293259854e-8,-0.001771748742021881,-2.160228540957275e-5,-3.1598253034946674e-8,-0.001771315436498432,-2.142574791419228e-5,-3.144654198656495e-8,-0.0017709151725227585,-2.1178148251122183e-5,-3.123163082063926e-8,-0.0017705729667818262,-2.0877318554922502e-5,-3.096901728522543e-8,-0.00177030549185305,-2.055260685325797e-5,-3.0684433448224743e-8,-0.0017701162882080364,-2.0240789383713746e-5,-3.041032430169265e-8,-0.0017699929466398218,-1.99794218315807e-5,-3.018005089313501e-8,-0.0017699074633654773,-1.9798779288104986e-5,-3.002078373264498e-8,-0.0017698202590316055,-1.971411094245867e-5,-2.994657558110185e-8,-0.0017696875886955075,-1.9720002942223983e-5,-2.9953206911113435e-8,-0.0017694714315701055,-1.9788544043428927e-5,-3.0016365819494506e-8,-0.001769150179508032,-1.9872824099373976e-5,-3.009460999645151e-8,-0.0017687273917546744,-1.9916635597634004e-5,-3.013794933369788e-8,-0.0017682349328222557,-1.986951675134688e-5,-3.0101278511672435e-8,-0.00176772710105645,-1.970328034493384e-5,-2.995916376833186e-8,-0.0017672653670454336,-1.942323674398719e-5,-2.9715881402750377e-8,-0.0017668987135009146,-1.906762066737871e-5,-2.9404951820690843e-8,-0.0017666484557888058,-1.8694185914153163e-5,-2.9077305426574343e-8,-0.0017665045683398996,-1.836037649987278e-5,-2.8783779540595175e-8,-0.0017664336822339468,-1.810670803004512e-5,-2.85604298531802e-8,-0.0017663927590512497,-1.7949525459591675e-5,-2.8422063980110166e-8,-0.0017663414629926905,-1.7882936783559632e-5,-2.8363836548011972e-8,-0.001766249541876796,-1.7885707909765793e-5,-2.8367242121714928e-8,-0.001766099266242993,-1.7928819727490756e-5,-2.8406756909275128e-8,-0.0017658847993394775,-1.798137782732972e-5,-2.8455090069843767e-8,-0.001765610393070421,-1.8014480188581894e-5,-2.8486659197502897e-8,-0.0017652885448722823,-1.800366604960887e-5,-2.8479796999216368e-8,-0.0017649384258213695,-1.7930802219111313e-5,-2.8418420896184835e-8,-0.0017645842871166185,-1.778602853787445e-5,-2.829372109660203e-8,-0.0017642532352409623,-1.7569903288050705e-5,-2.81060198076404e-8,-0.001763971759473834,-1.7295278259522374e-5,-2.786641950500421e-8,-0.0017637607807011494,-1.698782162266873e-5,-2.7597305393828584e-8,-0.0017636298282722234,-1.668378910785923e-5,-2.7330463361969477e-8,-0.0017635720325075124,-1.6424062245120354e-5,-2.7101919283812356e-8,-0.0017635623160880396,-1.624485381333525e-5,-2.6943804573923697e-8,-0.0017635607308321933,-1.6167370096356146e-5,-2.6875224575923194e-8,-0.0017635211289864948,-1.6190012162179073e-5,-2.68952735608918e-8,-0.0017634030561349838,-1.6286391210993562e-5,-2.6981120973846906e-8,-0.0017631832067511017,-1.6410496829813158e-5,-2.7092420717209323e-8,-0.001762862804611093,-1.650784066444652e-5,-2.7181070789573557e-8,-0.001762468592752757,-1.6529538541808296e-5,-2.720366625840219e-8,-0.001762046894151369,-1.6445530812446836e-5,-2.713326263374019e-8,-0.0017616519554521687,-1.6253198861825676e-5,-2.696709599279156e-8,-0.0017613315225252794,-1.5978453405918325e-5,-2.672764292807032e-8,-0.0017611140058775958,-1.5668350101802668e-5,-2.645617877953825e-8,-0.0017610016624053787,-1.5377341425857762e-5,-2.6200694380823762e-8,-0.001760972152477191,-1.5152050261090025e-5,-2.6002466768736517e-8,-0.0017609872896826445,-1.5020078162915458e-5,-2.5886132235295784e-8,-0.0017610048499390252,-1.4986153105280482e-5,-2.585618781524479e-8,-0.0017609887967856529,-1.5035267740803247e-5,-2.5899659894477047e-8,-0.0017609151979063953,-1.5139768158020223e-5,-2.5992305073980463e-8,-0.001760773716567572,-1.5266958060346903e-5,-2.610532992986437e-8,-0.0017605661687073292,-1.5385079455718696e-5,-2.6210718388494383e-8,-0.0017603038826338377,-1.5467116653328303e-5,-2.6284636330568005e-8,-0.0017600050563999715,-1.5492918931559058e-5,-2.630931543163531e-8,-0.00175969254649456,-1.5450515709074643e-5,-2.6274181953792665e-8,-0.0017593918639489119,-1.5337330423786408e-5,-2.617687582404043e-8,-0.0017591287810466108,-1.516152233340109e-5,-2.6024399594225813e-8,-0.0017589258943309788,-1.4943092225619993e-5,-2.5834108333616962e-8,-0.0017587977883399433,-1.4713698844311321e-5,-2.563361964748376e-8,-0.001758745306123578,-1.4513557060983797e-5,-2.5458186180871662e-8,-0.0017587508567577885,-1.4384033445413648e-5,-2.534426611652559e-8,-0.0017587779139626098,-1.4356303112866524e-5,-2.5319563744401592e-8,-0.0017587774818432792,-1.4439371548397277e-5,-2.5392423095802513e-8,-0.0017587014180465244,-1.461308765223457e-5,-2.5545545630735418e-8,-0.0017585182143315644,-1.4831017637906244e-5,-2.573837988454579e-8,-0.001758224300036135,-1.5033522952700285e-5,-2.5918544356983626e-8,-0.0017578456814572269,-1.5165890121277228e-5,-2.6037769834404815e-8,-0.0017574296827317477,-1.5194062164951215e-5,-2.6065783871821737e-8,-0.0017570309130902051,-1.5112670663097581e-5,-2.5997452534758276e-8,-0.001756696813994369,-1.4944139321311835e-5,-2.5852086776316284e-8,-0.0017564568402563836,-1.473071652369088e-5,-2.566653582995585e-8,-0.0017563173354597894,-1.4522642160396031e-5,-2.548486082353178e-8,-0.0017562624354948073,-1.4365851015030895e-5,-2.5347546705261553e-8,-0.0017562599735600776,-1.4292151664489295e-5,-2.5282821848690496e-8,-0.001756270345717931,-1.4313890299943314e-5,-2.5301868529854778e-8,-0.0017562557588578422,-1.4423796145213121e-5,-2.5398581829437754e-8,-0.0017561874812613571,-1.4599191257972496e-5,-2.5553204717269587e-8,-0.0017560497205785389,-1.4808590783445874e-5,-2.573812424229174e-8,-0.0017558401001670073,-1.501849889141526e-5,-2.5923886858305346e-8,-0.0017555677036126833,-1.5198851791683837e-5,-2.6084035700955837e-8,-0.0017552499882569114,-1.5326523211685818e-5,-2.6198219746351277e-8,-0.0017549096171388453,-1.5387143092883683e-5,-2.625378099409158e-8,-0.0017545716844747704,-1.5375917958639373e-5,-2.624643446693762e-8,-0.0017542612485054693,-1.5298085448759974e-5,-2.618062930004095e-8,-0.0017540007404882867,-1.5169273450952789e-5,-2.6069861979063126e-8,-0.0017538066861335557,-1.5015531634949477e-5,-2.593675647987724e-8,-0.0017536853789179659,-1.4872118319182157e-5,-2.5812093138283254e-8,-0.0017536279768385933,-1.4779491480665109e-5,-2.5731383005018647e-8,-0.001753606952723239,-1.477510058162383e-5,-2.5727704626657337e-8,-0.0017535772625469973,-1.4881293853944655e-5,-2.5821044107833472e-8,-0.0017534854838303832,-1.5093084239007569e-5,-2.600743669074431e-8,-0.001753286710863749,-1.5372854528035302e-5,-2.6254185280220255e-8,-0.0017529628465813953,-1.5658309245887e-5,-2.650676375421154e-8,-0.0017525321779777868,-1.5882916451512282e-5,-2.6706754294287406e-8,-0.0017520438774256833,-1.599931632431093e-5,-2.6812413521358316e-8,-0.0017515603547515798,-1.599389242849295e-5,-2.6811474485739375e-8,-0.0017511370747768787,-1.58870721613282e-5,-2.6721446136561115e-8,-0.0017508085426400448,-1.5722498178991464e-5,-2.6580205900138525e-8,-0.001750583522276346,-1.5552126055896935e-5,-2.6433054088095324e-8,-0.0017504477988545496,-1.5423007708300132e-5,-2.6321212129111954e-8,-0.001750371174214469,-1.5368439711583733e-5,-2.62740633198849e-8,-0.001750315851837096,-1.5403810993203438e-5,-2.630543047416448e-8,-0.0017502443819633047,-1.552642617773328e-5,-2.641330452405617e-8,-0.0017501260881107377,-1.5718366270618406e-5,-2.6582255837826362e-8,-0.001749941315168841,-1.595138996435713e-5,-2.6787687878177625e-8,-0.0017496832210316077,-1.6192740022060927e-5,-2.7000937830024997e-8,-0.0017493572693855985,-1.6410744434680557e-5,-2.719422519070173e-8,-0.001748978948913387,-1.6579358203906588e-5,-2.7344668887639668e-8,-0.0017485704968312657,-1.6681163415333903e-5,-2.74369274282324e-8,-0.0017481574240992264,-1.670883282721197e-5,-2.7464466784574147e-8,-0.0017477653066889829,-1.666547427544194e-5,-2.742983935525184e-8,-0.0017474168841164288,-1.6564305460559376e-5,-2.7344394725503e-8,-0.001747129279233854,-1.6427879931202274e-5,-2.722763656186771e-8,-0.0017469110243550452,-1.6286771476204226e-5,-2.7106146180372478e-8,-0.0017467586534195868,-1.6177063093025705e-5,-2.7011472007132247e-8,-0.0017466533463252492,-1.6135412490742596e-5,-2.6975864478472212e-8,-0.0017465594178202246,-1.6190686058868135e-5,-2.7024931986323628e-8,-0.0017464276261986936,-1.6352739951425828e-5,-2.7167717614836124e-8,-0.0017462061719448097,-1.6602042086509395e-5,-2.7387475511613235e-8,-0.0017458589390846183,-1.688727509586495e-5,-2.7639480984314817e-8,-0.001745383793112345,-1.7137548063945405e-5,-2.7861723308800773e-8,-0.001744819115139456,-1.7287659579105718e-5,-2.7997065592867195e-8,-0.0017442316274042247,-1.7303833560797986e-5,-2.8015768007836517e-8,-0.0017436912573285538,-1.7194973975304273e-5,-2.7925287860788828e-8,-0.001743247452036388,-1.7004614184730193e-5,-2.7763247275154654e-8,-0.0017429180130239536,-1.6791404372740664e-5,-2.758049651565357e-8,-0.0017426913839497045,-1.6609904370917028e-5,-2.7424492345162885e-8,-0.001742536475141356,-1.649859690995107e-5,-2.7328913073261393e-8,-0.0017424137905466815,-1.6475754777084468e-5,-2.731001280582881e-8,-0.0017422844622990985,-1.6540670952381766e-5,-2.7367575703814308e-8,-0.001742116355369948,-1.6677544114767887e-5,-2.7488179361086792e-8,-0.0017418876343611228,-1.686031928037145e-5,-2.764933739189588e-8,-0.0017415883616594284,-1.70577248174131e-5,-2.782387438953023e-8,-0.0017412205022093819,-1.7238115114124338e-5,-2.7984175560639326e-8,-0.0017407965855088022,-1.737379930727008e-5,-2.8106002984605667e-8,-0.0017403372333003285,-1.744456666693547e-5,-2.81716008451723e-8,-0.0017398678463401798,-1.7440083829039737e-5,-2.817179627356715e-8,-0.0017394149398974874,-1.7360942313155324e-5,-2.8106908907450188e-8,-0.0017390025998627163,-1.7218462503755394e-5,-2.7986581351569095e-8,-0.0017386492629266872,-1.7033516940844868e-5,-2.78287765345854e-8,-0.0017383648667583472,-1.6834511621145167e-5,-2.7658071698212013e-8,-0.0017381483860776027,-1.6654526309760896e-5,-2.750323777098479e-8,-0.0017379857880764208,-1.6527352718845074e-5,-2.7393844848311547e-8,-0.0017378488996451671,-1.6481799532138352e-5,-2.735530264547702e-8,-0.0017376966372265247,-1.653390656976417e-5,-2.7402002468754002e-8,-0.0017374807521994074,-1.6678137811977933e-5,-2.752950967892001e-8,-0.0017371577619254865,-1.6881003467352378e-5,-2.7708880462880502e-8,-0.0017367058418978965,-1.7082956805723142e-5,-2.7888277038928824e-8,-0.0017361397871615877,-1.7213636041267133e-5,-2.8006313607759834e-8,-0.0017355130919502622,-1.7217983517437767e-5,-2.8014887489228886e-8,-0.0017349010873700975,-1.7080148864802256e-5,-2.789998107144859e-8,-0.0017343723348015217,-1.6829898005292252e-5,-2.7687166142917287e-8,-0.0017339647832955254,-1.6527764114669422e-5,-2.742869117101087e-8,-0.0017336786370508808,-1.6239846977128967e-5,-2.718170516827529e-8,-0.0017334849605685624,-1.6017009429821272e-5,-2.6990333500378085e-8,-0.0017333407869161536,-1.588567181395312e-5,-2.6877727087182345e-8,-0.0017332024740586718,-1.5848606242811324e-5,-2.6846667644146168e-8,-0.0017330340615586818,-1.5890746362680283e-5,-2.68844715727071e-8,-0.0017328110493750382,-1.598598400945783e-5,-2.696877596915934e-8,-0.00173252127473545,-1.6103053832416733e-5,-2.7072598915931684e-8,-0.0017321643150833425,-1.6210210138051937e-5,-2.716841036510506e-8,-0.0017317501140170313,-1.6278998147010685e-5,-2.723144593688566e-8,-0.0017312970188940173,-1.6287366080985484e-5,-2.7242447571344237e-8,-0.0017308292084595779,-1.6222185622260528e-5,-2.7189872388028625e-8,-0.001730373452436675,-1.6081006942388617e-5,-2.7071418830950497e-8,-0.0017299553582569695,-1.5872667604661172e-5,-2.6894553273205772e-8,-0.0017295955423252537,-1.5616500957420817e-5,-2.6675832877706237e-8,-0.0017293061873740823,-1.5340170469505593e-5,-2.6439061947713e-8,-0.0017290883470865532,-1.507625010199129e-5,-2.6212382075122478e-8,-0.0017289303472872032,-1.485771739629063e-5,-2.6024423253133448e-8,-0.0017288076171489378,-1.4712600788592941e-5,-2.5899692716363257e-8,-0.0017286843786890062,-1.4657982104751628e-5,-2.5853345982890227e-8,-0.0017285179920752429,-1.469378801204321e-5,-2.5885710544355952e-8,-0.0017282669016267444,-1.4797809692912494e-5,-2.597784298491023e-8,-0.0017279022709099565,-1.4924826606494031e-5,-2.6090678957383975e-8,-0.0017274210330882648,-1.5013539408658058e-5,-2.6171041964052904e-8,-0.0017268544886931924,-1.500339980186787e-5,-2.6166307322124555e-8,-0.0017262646488298942,-1.4857541654773406e-5,-2.6044338623451537e-8,-0.0017257250829835684,-1.4580494467278208e-5,-2.5808814537283378e-8,-0.0017252937794389228,-1.4218526667931194e-5,-2.5499476937908507e-8,-0.0017249930231404602,-1.3840794807331261e-5,-2.517585149150039e-8,-0.0017248067699141875,-1.351270711306445e-5,-2.4894335555473773e-8,-0.0017246934534974646,-1.3276295708485894e-5,-2.4691333401292228e-8,-0.0017246038274408126,-1.314433765536367e-5,-2.4578159853052325e-8,-0.0017244948196652298,-1.3105269854769773e-5,-2.454517288778279e-8,-0.0017243364526524838,-1.3132362073222714e-5,-2.456957312402072e-8,-0.0017241132667976712,-1.3192342565411862e-5,-2.4622786661510245e-8,-0.0017238228661482834,-1.325163183139236e-5,-2.4675851118792835e-8,-0.0017234735662261548,-1.3280343921097598e-5,-2.470291409721152e-8,-0.0017230820075737141,-1.3254924222723466e-5,-2.4683557620105018e-8,-0.0017226707950760843,-1.3160121817767504e-5,-2.4604525475472103e-8,-0.001722265910630456,-1.2990581890931382e-5,-2.4461095384133306e-8,-0.001721893605087852,-1.275194862461917e-5,-2.4258014835579526e-8,-0.0017215766694778005,-1.2461004044485085e-5,-2.400961012256891e-8,-0.0017213304202050618,-1.2144266502687791e-5,-2.373858904526001e-8,-0.0017211591144521662,-1.1834740035222872e-5,-2.3473278345894057e-8,-0.0017210536379387664,-1.15669121811399e-5,-2.3243368159746304e-8,-0.0017209912434660293,-1.137053703664978e-5,-2.3074600444917153e-8,-0.00172093786428734,-1.126418106526938e-5,-2.2983213066028008e-8,-0.0017208531150557185,-1.1249725559581083e-5,-2.2971150222902847e-8,-0.0017206977257007766,-1.1309037278010377e-5,-2.3023095245395752e-8,-0.0017204427559582552,-1.1404176889886242e-5,-2.3106548502949438e-8,-0.0017200791234227555,-1.1482681882738014e-5,-2.3176327687590162e-8,-0.0017196246541953794,-1.148889330573019e-5,-2.3184350335903796e-8,-0.001719124641958263,-1.1380227657635337e-5,-2.3093722950941158e-8,-0.0017186423638384035,-1.114361781624759e-5,-2.289295661201278e-8,-0.0017182400231541156,-1.0804036814357762e-5,-2.2603315828948557e-8,-0.0017179572397719124,-1.0418304686722344e-5,-2.2273489276189473e-8,-0.0017177979779009823,-1.0055136813138216e-5,-2.1962468500676522e-8,-0.0017177326568771723,-9.771363476111051e-6,-2.171915971274942e-8,-0.0017177126940655086,-9.59618259083335e-6,-2.1568855933039855e-8,-0.0017176882158911563,-9.528664202440341e-6,-2.151102115154199e-8,-0.0017176207842986657,-9.54532916023194e-6,-2.152570092195504e-8,-0.001717488539588401,-9.61114215968148e-6,-2.1582903167043163e-8,-0.0017172856020235222,-9.688935408136953e-6,-2.1650695633700068e-8,-0.0017170188075453885,-9.745503388018222e-6,-2.1700489974222203e-8,-0.001716704030343493,-9.75481187740589e-6,-2.1709853665659155e-8,-0.001716363051667733,-9.699527683861308e-6,-2.1663854398151375e-8,-0.0017160209740540878,-9.571902058244573e-6,-2.155581284513286e-8,-0.0017157037275235207,-9.374493289871258e-6,-2.1387892099804606e-8,-0.0017154351582843574,-9.12063251889091e-6,-2.1171465309349033e-8,-0.0017152334371241793,-8.834059379219236e-6,-2.0926792740536966e-8,-0.0017151070380174468,-8.54691461997685e-6,-2.0681324010697784e-8,-0.0017150511747853247,-8.295434661355793e-6,-2.0466057621787945e-8,-0.0017150460711992154,-8.113332137404114e-6,-2.030992124260642e-8,-0.0017150584488687581,-8.023886119027629e-6,-2.0233017236108107e-8,-0.0017150469068009022,-8.032794681682757e-6,-2.0240470470753276E-08,-0.0017149705846409252,-8.124212126971078e-6,-2.031895666669989e-8,-0.0017147992299687779,-8.261786867259084e-6,-2.043750161115691e-8,-0.0017145220766764634,-8.39524066367176e-6,-2.0553060054856926e-8,-0.001714152932724592,-8.471588872493842e-6,-2.062012893709478e-8,-0.0017137294505731322,-8.448766698921679e-6,-2.0602470471424994e-8,-0.0017133056268037235,-8.30827935977141e-6,-2.0484010951138584e-8,-0.0017129382965746429,-8.062726137621993e-6,-2.0275329834940626e-8,-0.0017126708829768335,-7.754388283059394e-6,-2.0012476947012425e-8,-0.0017125200757254853,-7.443621313326269e-6,-1.9747060849152198e-8,-0.0017124712795059404,-7.190431363037621e-6,-1.9530504080148718e-8,-0.001712485108463056,-7.0366396458408515e-6,-1.9398773754969298e-8,-0.0017125116285125956,-6.995979960543143e-6,-1.9363850589301513e-8,-0.0017125055152946264,-7.054904126090996e-6,-1.941433171688431e-8,-0.0017124362267456486,-7.181290036679982e-6,-1.9522819783303132e-8,-0.0017122912356786113,-7.33559115667751e-6,-1.9655458212988638e-8,-0.0017120739679193392,-7.480041670713854e-6,-1.9779851901213196e-8,-0.0017117993662422982,-7.584250733816216e-6,-1.9869913460128613e-8,-0.0017114893374762983,-7.627641340691138e-6,-1.9907989660052855e-8,-0.0017111690927208221,-7.6000125055850025e-6,-1.9885345225042433e-8,-0.0017108644073861132,-7.501412760528949e-6,-1.9802025000362843e-8,-0.0017105992780522003,-7.341978719606794e-6,-1.966667578346078e-8,-0.0017103933189507282,-7.1417111820099305e-6,-1.949632951528594e-8,-0.0017102585004460788,-6.929573781906971e-6,-1.9315642219774395e-8,-0.0017101954017993111,-6.7409497837180035e-6,-1.9154764556717096e-8,-0.0017101899463117245,-6.612514274616833e-6,-1.904501927146042e-8,-0.0017102124219094009,-6.574302226505446e-6,-1.9012164611844463e-8,-0.0017102208546907933,-6.640381461484933e-6,-1.906841604034119e-8,-0.0017101696872487946,-6.801430426475136e-6,-1.920604126355059e-8,-0.0017100221870999638,-7.023203351349197e-6,-1.939596217498844e-8,-0.0017097624173563275,-7.2532026779098715e-6,-1.959339512897098e-8,-0.0017094018542985613,-7.4343348959541015e-6,-1.9749511339903364e-8,-0.0017089776595243197,-7.520980981562084e-6,-1.982519953065219e-8,-0.0017085430785728673,-7.491875094526717e-6,-1.98021064005799e-8,-0.0017081533169143335,-7.355782261528479e-6,-1.968751486928549e-8,-0.0017078512816734047,-7.148736530329722e-6,-1.9512013140907094e-8,-0.0017076570788535014,-6.924050653939927e-6,-1.9321004792382517e-8,-0.0017075639301940206,-6.73805286028801e-6,-1.9162573935492407e-8,-0.0017075414744693901,-6.635623404704152e-6,-1.9075152574921577e-8,-0.0017075452538536885,-6.6397481673598866e-6,-1.907856769945405e-8,-0.0017075291279762277,-6.74799680854229e-6,-1.917095975773456e-8,-0.001707456464753147,-6.936270654025548e-6,-1.9331909124735297e-8,-0.001707306873839935,-7.167486224038338e-6,-1.9529815014463757e-8,-0.0017070774940020905,-7.40150152130711e-6,-1.9730384470556232e-8,-0.001706780055599116,-7.603160648750164e-6,-1.9903542367193303e-8,-0.0017064359548183703,-7.747073464223104e-6,-2.0027552034501053e-8,-0.0017060712869391593,-7.819370843360752e-6,-2.009053088308096e-8,-0.0017057128647851082,-7.81750689300007e-6,-2.0090272816758505e-8,-0.0017053853475831233,-7.749258787440385e-6,-2.0033369653230264e-8,-0.0017051090246987348,-7.63165252439743e-6,-1.9934273203516424e-8,-0.0017048976130836205,-7.48990374053086e-6,-1.9814391821666054e-8,-0.0017047556071532683,-7.355870167993619e-6,-1.9700800557958514e-8,-0.0017046752314598494,-7.265069438578037e-6,-1.962374814999241e-8,-0.001704633907873945,-7.251176602605976e-6,-1.9612010035070857e-8,-0.0017045942123405239,-7.337574074837141e-6,-1.968569133958673e-8,-0.0017045088636094908,-7.527447475358424e-6,-1.984773628854404e-8,-0.0017043321125059295,-7.796609969145614e-6,-2.0077728553648004e-8,-0.0017040352892301902,-8.094628881719389e-6,-2.033278529821439e-8,-0.0017036199174814714,-8.357321757473915e-6,-2.0558199710134475e-8,-0.0017031207453830734,-8.527279641554265e-6,-2.07049674527795e-8,-0.0017025957211632837,-8.573251713438601e-6,-2.0746330786424403e-8,-0.0017021073995130097,-8.499347348814524e-6,-2.0685612575558143e-8,-0.0017017044497118188,-8.341162243397592e-6,-2.0552915628861326e-8,-0.0017014101770728533,-8.152663137236833e-6,-2.0393996128262026e-8,-0.001701220123087332,-7.99029114266652e-6,-2.0256802195303342e-8,-0.0017011069963663247,-7.899440803721392e-6,-2.0180015465234488e-8,-0.0017010298088642021,-7.905934485141747e-6,-2.0185786978182623e-8,-0.0017009442845075707,-8.013087611659719e-6,-2.0277176829621546e-8,-0.001700812271449088,-8.203778005991368e-6,-2.043983579510598e-8,-0.001700608518360257,-8.446292559298515e-6,-2.0646923134808663e-8,-0.0017003238336688721,-8.702227743979316e-6,-2.086581340902206e-8,-0.0016999645473487364,-8.934420936028888e-6,-2.106486263485468e-8,-0.00169954913513485,-9.113190354238928e-6,-2.1218747636263865e-8,-0.0016991033874861217,-9.22001102864717e-6,-2.1311618593498575e-8,-0.0016986554807616981,-9.248647435155238e-6,-2.13380740034121e-8,-0.0016982318855080062,-9.204399731118582e-6,-2.1302519561850147e-8,-0.0016978543995590132,-9.10238542444722e-6,-2.121770451114759e-8,-0.0016975380294125626,-8.965565187764711e-6,-2.1103046899748445e-8,-0.0016972892355614753,-8.822716746064468e-6,-2.0982928734896224e-8,-0.001697104147393287,-8.706075816679848e-6,-2.0884721675880377e-8,-0.0016969666972081788,-8.647926619789557e-6,-2.0835920379221263e-8,-0.00169684740011825,-8.675181170249637e-6,-2.0859546028640884e-8,-0.0016967045804855362,-8.801519162920972e-6,-2.0967436610679105e-8,-0.0016964905065300056,-9.01844333619171e-6,-2.1152579343920042e-8,-0.0016961639731149969,-9.289415793960601e-6,-2.138406153842879e-8,-0.001695707106127775,-9.553311743058151e-6,-2.160998864081665e-8,-0.0016951385176591758,-9.741104001052941e-6,-2.1771702413548394e-8,-0.0016945128063564176,-9.801298769835388e-6,-2.1825425829586347e-8,-0.001693902985101117,-9.720976758235634e-6,-2.176009941619977e-8,-0.0016933741666031645,-9.529958261736527e-6,-2.1600847624303437e-8,-0.0016929627649807358,-9.286767509844959e-6,-2.1397063223247418e-8,-0.0016926700984223038,-9.056285660978077e-6,-2.1203544267075215e-8,-0.0016924690855679811,-8.890755742029625e-6,-2.1064502321326876e-8,-0.0016923170302585921,-8.819805710338477e-6,-2.1005150945671767e-8,-0.0016921682214408472,-8.8489478525651e-6,-2.1030391509463162e-8,-0.0016919833229793798,-8.963433333096914e-6,-2.1127991678712995e-8,-0.0016917350451069605,-9.1345146397534e-6,-2.1273812337831973e-8,-0.0016914106590955637,-9.326304850307346e-6,-2.1437577987506275e-8,-0.0016910119930584138,-9.50234733555081e-6,-2.158843896357954e-8,-0.0016905533915853798,-9.631291450467526e-6,-2.1699798048136526e-8,-0.0016900581754099764,-9.69110899668149e-6,-2.1752905508392625e-8,-0.0016895542586885487,-9.671493446052107e-6,-2.1738910779710982e-8,-0.0016890696305639124,-9.574362283327237e-6,-2.1659302094648493e-8,-0.0016886283866275086,-9.412685663855614e-6,-2.1524925607916213e-8,-0.001688247743667381,-9.208192002297713e-6,-2.1354054577412935e-8,-0.0016879360364431592,-8.98854909081757e-6,-2.1170017704178606e-8,-0.0016876914563649197,-8.784322466768402e-6,-2.0998642806816554e-8,-0.0016875013089274406,-8.625690463057586e-6,-2.086549585606093e-8,-0.0016873417279686287,-8.53858560005698e-6,-2.0792626469016813e-8,-0.001687178325547085,-8.539692110101775e-6,-2.079432297753112e-8,-0.0016869691166023061,-8.630151987089456e-6,-2.0871746461888742e-8,-0.0016866715029369072,-8.789267347131455e-6,-2.100754636158876e-8,-0.001686254318023176,-8.97163165767185e-6,-2.1163398058176738e-8,-0.0016857129301765929,-9.112940780203801e-6,-2.1284938230037018e-8,-0.0016850801573558933,-9.148161471228022e-6,-2.1317184884815498e-8,-0.001684422796496244,-9.037763226930734e-6,-2.122672379094548e-8,-0.0016838198027999708,-8.787797426035769e-6,-2.1018591580797273e-8,-0.0016833318949512636,-8.44940531154977e-6,-2.0735764854021037e-8,-0.0016829803888256231,-8.096954946202853e-6,-2.0440726785689123e-8,-0.0016827459755191082,-7.799047296914452e-6,-2.0191141842253217e-8,-0.001682583454796451,-7.598483392665845e-6,-2.0023083749209106e-8,-0.0016824406087873034,-7.507046345778621e-6,-1.9946647297024858e-8,-0.00168227233893414,-7.511005682637191e-6,-1.995050767444206e-8,-0.0016820477635596358,-7.580629314178077e-6,-2.0009840918065495e-8,-0.0016817519149339769,-7.679226904576688e-6,-2.0093885939198342e-8,-0.0016813844563981313,-7.770076038468931e-6,-2.017176810577966e-8,-0.00168095711875254,-7.821310599237092e-6,-2.02166337334569e-8,-0.0016804905773571324,-7.809332280904686e-6,-2.020854689581189e-8,-0.001680010953275545,-7.72105576611143e-6,-2.013639837823021e-8,-0.001679546036692029,-7.555014866778501e-6,-1.999884849506686e-8,-0.0016791214090587767,-7.3212178391739496e-6,-1.9804212819061585e-8,-0.0016787568208649483,-7.0396326381076e-6,-1.956919439356282e-8,-0.0016784633058374865,-6.737431280764423e-6,-1.9316573595337173e-8,-0.0016782413530992905,-6.445394475960026e-6,-1.907219462969039e-8,-0.001678080222805157,-6.193862700986028e-6,-1.8861571689255484e-8,-0.0016779584103784654,-6.008506027515523e-6,-1.8706342929766363e-8,-0.001677845249146384,-5.906093833141004e-6,-1.8620715185890165e-8,-0.0016777038192801804,-5.890290612856807e-6,-1.8607914310898255e-8,-0.0016774958004093384,-5.947719194763358e-6,-1.8656841222782147e-8,-0.0016771890493794792,-6.04551842846217e-6,-1.873997969081269e-8,-0.001676767832841618,-6.132885965309012e-6,-1.8814675758844495e-8,-0.0016762435242489034,-6.149771262434435e-6,-1.8830466334363702e-8,-0.0016756602448421592,-6.044400624246342e-6,-1.8743841862040513e-8,-0.001675087945535953,-5.795520152856072e-6,-1.8536922752685177e-8,-0.001674600133436057,-5.427392994706577e-6,-1.8229981102522346e-8,-0.0016742451149479186,-5.004926323171685e-6,-1.7877295972549893e-8,-0.0016740276746855878,-4.608399079730942e-6,-1.7546004506771972e-8,-0.0016739119980301556,-4.302510944871832e-6,-1.729026756861099e-8,-0.0016738412334485694,-4.117301795986611e-6,-1.7135338860309113e-8,-0.0016737597260480786,-4.047201977927108e-6,-1.7076725758927597e-8,-0.0016736272940627243,-4.062129813392705e-6,-1.708939796436854e-8,-0.0016734236526182423,-4.121225593287399e-6,-1.7139232302019368e-8,-0.0016731464204356393,-4.183527382690121e-6,-1.719194905092986e-8,-0.001672806667024793,-4.214324596648135e-6,-1.721846074771176e-8,-0.0016724243936852225,-4.1882372375009135e-6,-1.7197481453770475e-8,-0.0016720247121886067,-4.090499672781078e-6,-1.71166177315317e-8,-0.001671634560924054,-3.9173958791691575e-6,-1.697273167292582e-8,-0.0016712796064216253,-3.676148262014399e-6,-1.677183719774153e-8,-0.0016709811132979546,-3.3841381804794744e-6,-1.6528438089025636e-8,-0.001670752839878428,-3.067097445950772e-6,-1.626401154436992e-8,-0.0016705983902454557,-2.755995668689129e-6,-1.6004410253319553e-8,-0.0016705096420609104,-2.4827410471397807e-6,-1.5776279333381472e-8,-0.0016704667555038147,-2.2751486697532836e-6,-1.5602864533974782e-8,-0.001670440054529566,-2.151829226592785e-6,-1.5499751063543376e-8,-0.001670393800312215,-2.117817669325008e-6,-1.5471212409242127e-8,-0.001670291584102462,-2.1617204405963794e-6,-1.5507814775575798e-8,-0.0016701029794063543,-2.2550054075283997e-6,-1.5585801952800447e-8,-0.0016698110099757678,-2.354258371242796e-6,-1.5668961170856538e-8,-0.0016694193436379667,-2.4075797922360825e-6,-1.5713962061550806e-8,-0.0016689568880535386,-2.3659216383981152e-6,-1.5679837674904023e-8,-0.001668476255894404,-2.198389705642687e-6,-1.5540770761251108e-8,-0.0016680427111036224,-1.9070635849955495e-6,-1.5298448763090533e-8,-0.0016677138985701416,-1.5331708742942751e-6,-1.49871845626283e-8,-0.001667517861434114,-1.147223731015582e-6,-1.4665690841976024e-8,-0.0016674416245268775,-8.243545513833562e-7,-1.4396566986045408e-8,-0.0016674379465091208,-6.170824570407865e-7,-1.4223645290633774e-8,-0.0016674458929825874,-5.401446955353702e-7,-1.415932767755485e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json new file mode 100644 index 000000000..ddc7d4dd9 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":20000,"numberOfSamples":1000,"samples":[0.002920358133904192,-6.784113942412794e-6,1.9052440314477163e-8,0.0029206413912713745,-6.613636446664559e-6,1.880279195741177e-8,0.0029208307139081857,-6.4248857259363685e-6,1.8526799455172666e-8,0.002920930147853429,-6.259580496894272e-6,1.8285299846459358e-8,0.002920958301557765,-6.151401288497133e-6,1.8127384394993633e-8,0.002920943527534336,-6.121517965926748e-6,1.8083876197142136e-8,0.002920918375602291,-6.176714362040785e-6,1.816459054828576e-8,0.0029209142523147777,-6.309966452545619e-6,1.8359183512205728e-8,0.0029209570493570875,-6.502919273456435e-6,1.864078390277559e-8,0.0029210641805222245,-6.729529878146821e-6,1.8971329337261025e-8,0.0029212431239192664,-6.960111764971586e-6,1.9307474224319167e-8,0.0029214911994797127,-7.165144308668532e-6,1.960613535377138e-8,0.002921796120285953,-7.318617634903727e-6,1.982935162046132e-8,0.002922137007124233,-7.4010933087209115e-6,1.994874542519259e-8,0.0029224858842140738,-7.402792330024526e-6,1.9950053694911065e-8,0.0029228100891597296,-7.3269133160290385e-6,1.9838013786501703e-8,0.0029230765056806078,-7.192875581754198e-6,1.9641124744988003e-8,0.002923258593947595,-7.038021661925838e-6,1.941411030247615e-8,0.0029233461420444737,-6.914897975233613e-6,1.9233867338703342e-8,0.0029233550561071457,-6.88082642372724e-6,1.9184132872670825e-8,0.002923331035256764,-6.979157664713172e-6,1.9328047777690732e-8,0.002923340142385916,-7.2183869507838524e-6,1.9677702094935728e-8,0.002923445583922481,-7.561828631160178e-6,2.0179192009197127e-8,0.002923681317946548,-7.937980661899995e-6,2.072789220706034e-8,0.0029240384097172193,-8.268180631197756e-6,2.1208898937220332e-8,0.0029244717828463846,-8.495446917109097e-6,2.1539128515592525e-8,0.0029249206337382287,-8.5993447870362e-6,2.168897594018406e-8,0.0029253292642615033,-8.593866031641322e-6,2.1679150221309016e-8,0.002925659785723746,-8.515407336314436e-6,2.1563040883823154e-8,0.0029258958667452545,-8.409144036535884e-6,2.140676187245665e-8,0.0029260405842169023,-8.318330424117874e-6,2.1273515340970926e-8,0.0029261116369550147,-8.277597083016847e-6,2.1213831819462888e-8,0.0029261360482877165,-8.309529221173803e-6,2.1260608728115165e-8,0.0029261452014683505,-8.42340926017503e-6,2.142729184107828e-8,0.002926170313882796,-8.615486024606374e-6,2.1708269585437497e-8,0.00292623844165663,-8.870566448345604e-6,2.2081201504360447e-8,0.00292636924853009,-9.164729529600066e-6,2.2511001728707966e-8,0.0029265727710682966,-9.46889441648262e-6,2.295507952203869e-8,0.0029268483980316373,-9.752900430721535e-6,2.336931848773817e-8,0.0029271851539575938,-9.989600330613871e-6,2.371405611551756e-8,0.0029275631112714875,-1.0158516530347245e-5,2.3959412562508196e-8,0.002927955664309901,-1.0248883948905652e-5,2.408973052847181e-8,0.002928332543885939,-1.0262052169211477e-5,2.4107097524156514e-8,0.002928663659626732,-1.0213176614852856e-5,2.4033835922844377e-8,0.002928924086482032,-1.0131859571605514e-5,2.391343414198871e-8,0.002929100469893201,-1.006068720901442e-5,2.380835533385682e-8,0.00292919825272032,-1.0049779074946679e-5,2.3791978424671676e-8,0.0029292472514429032,-1.0145544621233506e-5,2.3932078427797663e-8,0.0029293008561212352,-1.0374107175155202e-5,2.4266580620660107e-8,0.0029294238469290295,-1.0725024417737487e-5,2.4779841229322424e-8,0.002929669111734987,-1.114611883277768e-5,2.539521780426727e-8,0.0029300535325597157,-1.1558053316444333e-5,2.599647534430263e-8,0.0029305485124082784,-1.1884615009568598e-5,2.647210161222967e-8,0.0029310923955805034,-1.2081611605397568e-5,2.675757842754958e-8,0.002931616304399638,-1.2148069338781219e-5,2.6851763811636517e-8,0.002932067285150511,-1.2117575796211164e-5,2.6804177118692685e-8,0.002932418917621506,-1.2040100109443465e-5,2.6688285414068273e-8,0.002932670230039864,-1.1965464765100921e-5,2.657720810322275e-8,0.0029328387680504554,-1.1933289258766363e-5,2.6528961772784398e-8,0.00293295270881014,-1.196897681852962e-5,2.658062017342903e-8,0.002933044376699607,-1.2083490982675024e-5,2.67480469420976e-8,0.0029331455921541476,-1.2274805413081184e-5,2.7028061070784242e-8,0.002933284292138651,-1.2529877406152909e-5,2.7401345594697467e-8,0.00293348183921598,-1.2826952297089921e-5,2.7835835906596038e-8,0.0029337508490475143,-1.3138354603080276e-5,2.829083170402535e-8,0.002934093645838865,-1.3433894030281315e-5,2.872201713802254e-8,0.0029345016544849406,-1.3684880135773215e-5,2.908736254701938e-8,0.0029349561406361926,-1.386840837531521e-5,2.935340201831078e-8,0.002935430486740117,-1.3971275110489517e-5,2.95009506018706e-8,0.002935893835760189,-1.3992889279387817e-5,2.9529348563241594e-8,0.002936315747796631,-1.3946693107954746e-5,2.9458526641335536e-8,0.0029366714399644074,-1.3859725730502529e-5,2.9328347332084718e-8,0.0029369471463227275,-1.3770076163005065e-5,2.919483182596872e-8,0.0029371450608840764,-1.3721886782902614e-5,2.912277265954847e-8,0.002937286864066753,-1.3757394229001907e-5,2.917400350300773e-8,0.0029374138979444495,-1.3905986529102212e-5,2.9391340967481903e-8,0.002937581299334286,-1.4172039349156543e-5,2.9780814874648412e-8,0.002937844163109093,-1.45262281968288e-5,3.029905020497397e-8,0.0029382377175291947,-1.4907319198974039e-5,3.085599616240686e-8,0.0029387598782889463,-1.5239082205155629e-5,3.13397558100923e-8,0.0029393676298225253,-1.5457827043506526e-5,3.165695446938089e-8,0.002939992216838139,-1.5536378976067384e-5,3.1767915909756623e-8,0.0029405653190518453,-1.5490797301223943e-5,3.169654522724492e-8,0.002941041254771594,-1.536815347138079e-5,3.151235350452084e-8,0.00294140542344543,-1.5225670745632641e-5,3.129971116966001e-8,0.0029416699353257774,-1.511314588614597e-5,3.113191036723647e-8,0.002941863403875871,-1.5063955018859357e-5,3.105791466104839e-8,0.002942020994539501,-1.5093505935668198e-5,3.110013611490886e-8,0.002942177366646585,-1.520170158147927e-5,3.125814014183412e-8,0.0029423625508156873,-1.537654151057894e-5,3.1514004634474597e-8,0.002942599690849947,-1.559743059921687e-5,3.183721614696178e-8,0.00294290359336924,-1.5838011990550073e-5,3.2188849522134435e-8,0.00294327957060671,-1.606891948600009e-5,3.252562907878252e-8,0.002943722566359027,-1.626091105834113e-5,3.2804552667574874e-8,0.0029442169460562008,-1.6388674978272435e-5,3.2988495583917805e-8,0.002944737613991192,-1.643514977217652e-5,3.3052553288382284e-8,0.002945253028492552,-1.6395599116742716e-5,3.299000825108424e-8,0.0029457301748656087,-1.6280316984019043e-5,3.2816276383530096e-8,0.0029461409054937337,-1.6114844458962526e-5,3.2569189442586106e-8,0.002946468467779173,-1.59369584836108e-5,3.230452078197805e-8,0.0029467127007430827,-1.5790452065963385e-5,3.20867790313752e-8,0.002946892484190752,-1.571653783339316e-5,3.19765091292342e-8,0.0029470444074099875,-1.574421226294738e-5,3.201610119609517e-8,0.00294721700040216,-1.5881334913556607e-5,3.2216717921521556e-8,0.002947460426363542,-1.6108825234197094e-5,3.2549869520431156e-8,0.002947812788728661,-1.6380947123874963e-5,3.294795449427606e-8,0.002948286406491707,-1.663423983095662e-5,3.3317466246604255e-8,0.0029488597757889802,-1.6805051579412595e-5,3.356478318315856e-8,0.0029494809972528905,-1.6850594771345913e-5,3.362711592054566e-8,0.0029500837834087173,-1.6764027436157334e-5,3.3494691584581735e-8,0.002950609547099543,-1.65754022846451e-5,3.321214488618771e-8,0.0029510248489415226,-1.6338277873894157e-5,3.285874310463184e-8,0.002951326908519711,-1.6110067758768604e-5,3.251932528889389e-8,0.002951537740617979,-1.5935923031543694e-5,3.226045946019777e-8,0.002951692897861342,-1.5841154803625142e-5,3.2119268917177497e-8,0.0029518308167177263,-1.5831373922113136e-5,3.210371527010424e-8,0.002951985680243071,-1.5896753371837802e-5,3.219898309769699e-8,0.0029521838394617654,-1.6017149276703177e-5,3.237510141211502e-8,0.0029524425171660266,-1.6166416508957604e-5,3.259333287301716e-8,0.002952769476479237,-1.631566760743691e-5,3.281097659429368e-8,0.0029531628666808734,-1.6435949662826805e-5,3.298530817637135e-8,0.002953611072809355,-1.6501010877409013e-5,3.307765926789581e-8,0.0029540929521073237,-1.6490693620487103e-5,3.305842467294873e-8,0.002954579264429746,-1.639499922671663e-5,3.291305556929234e-8,0.00295503617946976,-1.6218085914775832e-5,3.264794315872196e-8,0.0029554312636725514,-1.598068794654785e-5,3.2293958485677294e-8,0.002955741283648492,-1.5719093070127868e-5,3.1904895652031e-8,0.002955959806034109,-1.547937573783238e-5,3.154889715991773e-8,0.0029561017019983917,-1.5307268455907255e-5,3.129343797151466e-8,0.002956202124345455,-1.5236171399037398e-5,3.118759456372629e-8,0.002956309344895545,-1.5277053681785616e-5,3.124717312307237e-8,0.002956473061121083,-1.5413664099591182e-5,3.144774573045378e-8,0.002956731321048645,-1.56048785559379e-5,3.1728248939181924e-8,0.00295709965139376,-1.5793981380019647e-5,3.20047831722283e-8,0.002957565526219128,-1.592284518104132e-5,3.2191570296512827e-8,0.002958090281759539,-1.5947524626471783e-5,3.2223937815342005e-8,0.0029586188407144266,-1.5850738642942996e-5,3.2076690446522256e-8,0.002959094945026436,-1.5646720190761735e-5,3.177121976954928e-8,0.002959476848073268,-1.5376083073574004e-5,3.136786811924238e-8,0.0029597476091094625,-1.5092533249955837e-5,3.094622473963542e-8,0.0029599165389014807,-1.4847001851064014e-5,3.058161120537158e-8,0.0029600126576895124,-1.4675368085643121e-5,3.032691574396036e-8,0.0029600742944759875,-1.4593152680899354e-5,3.020479859533819e-8,0.0029601393336397405,-1.4596748310243467e-5,3.020960605628144e-8,0.002960238698290419,-1.4668406120361078e-5,3.031483113270092e-8,0.002960393348094185,-1.4782054688900286e-5,3.048176038556993e-8,0.0029606137208240614,-1.4908213038661743e-5,3.0666732803764704e-8,0.002960900307724539,-1.5017561814104221e-5,3.082638893027108e-8,0.002961244434757364,-1.50835587775595e-5,3.092151102287129e-8,0.0029616289196745093,-1.508481954343969e-5,3.092053838966425e-8,0.0029620288994349014,-1.5007922270276185e-5,3.080373072655211e-8,0.002962413625758523,-1.485083932757977e-5,3.056826258788275e-8,0.0029627502369207145,-1.4626387490437281e-5,3.023332794121676e-8,0.002963010182597418,-1.4364071234967201e-5,2.9842834228472035E-08,0.002963177767764606,-1.4107920694885702e-5,2.9462135061082662e-8,0.002963258245024794,-1.390835698351417e-5,2.9165907356940043e-8,0.002963281197327158,-1.3808595017261191e-5,2.9017964910745684e-8,0.0029632955592347656,-1.3829869002871433e-5,2.9049396981577167e-8,0.0029633562901483323,-1.396211303207011e-5,2.9244867118890364e-8,0.002963507429295757,-1.4165122782118485e-5,2.9544476640865564e-8,0.0029637685076608447,-1.4380196230406393e-5,2.986111941278739e-8,0.0029641293995320965,-1.4547336536681909e-5,3.010599812437667e-8,0.0029645544477331213,-1.462147944059388e-5,3.021262159737794e-8,0.002964993199433165,-1.4582947790407866e-5,3.015220993420224e-8,0.002965393786237881,-1.4440252912374524e-5,2.993775541428279e-8,0.002965715263846332,-1.4225700000439636e-5,2.9617431791449873e-8,0.002965936105661564,-1.3985740295725363e-5,2.926023813664994e-8,0.0029660572013795127,-1.3768956215185547e-5,2.893816297894991e-8,0.0029660991821764673,-1.361495218959358e-5,2.8709729777681658e-8,0.0029660954822132313,-1.3546940317984253e-5,2.8609061319606824e-8,0.0029660836753954115,-1.3569374678669404e-5,2.86424548981107e-8,0.002966097715672726,-1.3670152439685494e-5,2.8791723939980673e-8,0.002966162758787371,-1.382559151959131e-5,2.9021622975413763e-8,0.002966292909415142,-1.4006141463460001e-5,2.9288313696922994e-8,0.0029664912327432187,-1.4181368889154244e-5,2.9546719679842586e-8,0.00296675098439865,-1.432364071392131e-5,2.975594063607446e-8,0.0029670571768570203,-1.441068763053631e-5,2.988302426452729e-8,0.0029673880824924595,-1.4427641005829092e-5,2.990599124607975e-8,0.0029677168251591012,-1.4369146872198044e-5,2.9817001755657374e-8,0.002968013691011178,-1.4241810907193253e-5,2.962601250879183e-8,0.0029682500709710805,-1.4066513065220714e-5,2.93642059457502e-8,0.002968404731954602,-1.387910107568484e-5,2.9084963591962518e-8,0.002968471978193223,-1.3727039399383037e-5,2.88588007731629e-8,0.002968469059433979,-1.3659767445614165e-5,2.875897632722551e-8,0.0029684378958154877,-1.3713145157645224e-5,2.8838395498620046e-8,0.00296843646941631,-1.3893353069001035e-5,2.9105800690051132e-8,0.0029685202671800416,-1.4169383669450605e-5,2.9514779524273305e-8,0.0029687215722676882,-1.4480741544933563e-5,2.997532983204709e-8,0.0029690374925616814,-1.4758063993347154e-5,3.038452227517716e-8,0.002969432550313911,-1.494625005415047e-5,3.0660807023103234e-8,0.0029698527534371528,-1.501941615613648e-5,3.076614564288683e-8,0.002970242975131316,-1.4983590593674082e-5,3.070991787329774e-8,0.002970560707010411,-1.486978332026129e-5,3.053852833456252e-8,0.002970783380041674,-1.4722598896256202e-5,3.031840881526067e-8,0.0029709096528671933,-1.4588664344004444e-5,3.01187930361603e-8,0.0029709563531596737,-1.4507263299708571e-5,2.999782950169233e-8,0.0029709528196634203,-1.450412607323851e-5,2.9993430059943106e-8,0.0029709340930672533,-1.4588613765477793e-5,3.011917526326649e-8,0.0029709342235076834,-1.4754157039491757e-5,3.036503994043903e-8,0.0029709808089967682,-1.4981337496558506e-5,3.070201327711546e-8,0.0029710914938153535,-1.524256500555707e-5,3.1089054340748793e-8,0.0029712726180356206,-1.5507206205397086e-5,3.1480689014010646e-8,0.0029715197167699482,-1.5746211713835314e-5,3.1833846061620287e-8,0.002971819217195222,-1.5935676545529305e-5,3.211310994113541e-8,0.0029721506391493777,-1.6059298169857467e-5,3.2294356226821274e-8,0.002972488915422919,-1.6110085669579795e-5,3.236730284468479e-8,0.0029728068475521232,-1.609171171330991e-5,3.233754856855953e-8,0.0029730780491342918,-1.6019684593364873e-5,3.2228331099957483e-8,0.002973280996517472,-1.5922014544477006e-5,3.2081488017266414e-8,0.002973404663571169,-1.5838170077771026e-5,3.195582334149546e-8,0.0029734552005521004,-1.581431674792034e-5,3.1919928221359786e-8,0.002973461188362297,-1.589302000644207e-5,3.2036819078499595e-8,0.0029734728689441363,-1.609792381140514e-5,3.234121094806937e-8,0.0029735507610109523,-1.6418860094304986e-5,3.281753040259766e-8,0.002973744280704623,-1.6807320664665265e-5,3.3393348896120576e-8,0.0029740698756861514,-1.7189700640362698e-5,3.395915574472174e-8,0.002974502213153519,-1.7494403406110863e-5,3.4408643234550394e-8,0.002974984560957685,-1.767802825408724e-5,3.4677597890506306e-8,0.0029754513730213712,-1.773672456282881e-5,3.476073805538473e-8,0.002975849730807777,-1.7700253301847003e-5,3.470280180238341e-8,0.0029761508530331345,-1.7616516953682456e-5,3.4575409590022556e-8,0.0029763511916333146,-1.7535807952942615e-5,3.445351817065031e-8,0.0029764671850589274,-1.7499734982786542e-5,3.439891544803893e-8,0.002976527814731713,-1.753553605886131e-5,3.445182277720747e-8,0.0029765674333753333,-1.7654482487030005e-5,3.462863214504655e-8,0.0029766197783471023,-1.785285028144174e-5,3.4923452338110174e-8,0.002976713303471049,-1.8114495901758313e-5,3.531200044507124e-8,0.00297686786306883,-1.841450460826479e-5,3.575704849602197e-8,0.002977092820345906,-1.8723439945705067e-5,3.6214741069552453E-08,0.0029773865940886136,-1.9011730919729806e-5,3.6641106825301627e-8,0.00297773758195352,-1.9253744086145604e-5,3.6998098021908325e-8,0.002978126225410339,-1.9431077092030192e-5,3.725847234837322e-8,0.002978527778364898,-1.953481608938666e-5,3.740914085341509e-8,0.0029789154040244796,-1.9566826718393777e-5,3.7453087807647996e-8,0.002979263474936315,-1.9540223734977267e-5,3.741007038668588e-8,0.002979551126528603,-1.9479037319080024e-5,3.731610210216535e-8,0.002979766242014358,-1.9416859969519788e-5,3.722137847792964e-8,0.0029799099497124348,-1.9393715173435276e-5,3.7185523694292244e-8,0.002980000915971834,-1.94498533312271e-5,3.7268276541520824e-8,0.0029800772524500073,-1.9615566721707554e-5,3.7514326950814606e-8,0.002980192469529219,-1.9898167604817833e-5,3.7934040287157073e-8,0.0029804022602219083,-2.0271164712515565e-5,3.8487521814506124e-8,0.0029807434701728474,-2.067424132501533e-5,3.9084720785291444e-8,0.0029812147089178787,-2.1030261025836366e-5,3.961077233026522e-8,0.0029817719928732045,-2.127449949752043e-5,3.99694784583061e-8,0.0029823449666828935,-2.1379992430783766e-5,4.0121037663042906e-8,0.0029828645165091085,-2.136410513008704e-5,4.009182899623436e-8,0.0029832854451143304,-2.127531976246566e-5,3.995464665032265e-8,0.002983594498668351,-2.1171712511966522e-5,3.97964527218785e-8,0.0029838054954291746,-2.1103248487216302e-5,3.9691834147374094e-8,0.002983948836829765,-2.110276132606735e-5,3.968953147631429e-8,0.002984061290257191,-2.1184288397485705e-5,3.981006008442894e-8,0.002984178513731084,-2.1345484561751207E-05,4.004945855912969e-8,0.00298433040769511,-2.157146104983014e-5,4.0385128619668554e-8,0.002984538433971821,-2.183875045296736e-5,4.078179890719198e-8,0.002984814157245484,-2.2119128743535838e-5,4.1197228817699106e-8,0.0029851587068223267,-2.2383338100873876e-5,4.158774803164346e-8,0.0029855631058775885,-2.260472386163859e-5,4.191366897386889e-8,0.002986009558291577,-2.2762699849510053e-5,4.214444460091879e-8,0.002986473810408079,-2.2845709776562213e-5,4.226307152736928e-8,0.0029869284555065143,-2.285321248440732e-5,4.226903134195116e-8,0.0029873468009023675,-2.279640960153469e-5,4.217934987696174e-8,0.0029877069362470323,-2.2697618488155953e-5,4.202762496290873e-8,0.002987995706883981,-2.2588196005956238e-5,4.186087368514205e-8,0.0029882122724941918,-2.250493424394035e-5,4.173407992678916e-8,0.002988370845250907,-2.2484777608857293e-5,4.170223881865493e-8,0.0029885017936435655,-2.255756728162393e-5,4.180950622118746e-8,0.002988649508545319,-2.2737002269993502e-5,4.20757789848222e-8,0.002988864944534272,-2.3011660125789477e-5,4.248345478531366e-8,0.0029891917531914853,-2.3340375925996207e-5,4.2970713042447454e-8,0.0029896486141179545,-2.3657833305475466e-5,4.3439950290240724e-8,0.002990215930999584,-2.3893473135528555e-5,4.378597223794274e-8,0.0029908371871804683,-2.399812996226874e-5,4.393568517521914e-8,0.0029914382467285117,-2.396417191820179e-5,4.3878147729951906e-8,0.0029919551613743003,-2.38265851199188e-5,4.3666186218943454e-8,0.0029923547556799392,-2.364535922564181e-5,4.33899815622375e-8,0.0029926388924618567,-2.34815530183942e-5,4.314111317342226e-8,0.0029928352743501543,-2.3379858232251807e-5,4.298635560434982e-8,0.002992983643000855,-2.3362211966869825e-5,4.2958145653724355e-8,0.002993124239325345,-2.3429729514789833e-5,4.305762336091702e-8,0.0029932908205783236,-2.3568260581625195e-5,4.3263117748307686e-8,0.0029935075467194595,-2.3754218892099406e-5,4.353897939933425e-8,0.002993788115402275,-2.3959322132927218e-5,4.3842700238288005e-8,0.002994135865131543,-2.415427368613513e-5,4.413039745178603e-8,0.002994544317604473,-2.431187474329782e-5,4.436143642962751e-8,0.0029949981369148688,-2.4409940834154676e-5,4.4502773677267694e-8,0.002995474733920963,-2.4434159363146072e-5,4.453322269139798e-8,0.002995946867852737,-2.438065412063379e-5,4.444727962470359e-8,0.0029963863997792425,-2.4257633800533217e-5,4.425756592263305e-8,0.0029967688850502656,-2.4085455016201706e-5,4.399488097416399e-8,0.002997078338300538,-2.3894673268282683e-5,4.370522458009922e-8,0.002997311349129843,-2.3721945852451404e-5,4.344359182276227e-8,0.002997479656226587,-2.360404297666528e-5,4.32649398235654e-8,0.0029976103593761477,-2.357065305448074e-5,4.3213385803306306e-8,0.002997743110787153,-2.3636926496027646e-5,4.3311086910764544e-8,0.002997923748088096,-2.379704664473801e-5,4.354874311053949e-8,0.0029981942175954005,-2.4020889171051923e-5,4.388077348084879e-8,0.0029985799058661606,-2.4256592745038067e-5,4.422930981774514e-8,0.0029990778745615423,-2.444143335305884e-5,4.450051619084297e-8,0.002999651934402648,-2.4520419116148653e-5,4.461236561595702e-8,0.003000240119555401,-2.4466536425871935e-5,4.452486712152954e-8,0.0030007744382348467,-2.4292342453891288e-5,4.4257372821343864e-8,0.0030012043836071256,-2.4045254021272564e-5,4.388146492212079e-8,0.003001512146798215,-2.3788596603881732E-05,4.3492440534199405e-8,0.003001713011004348,-2.3579216292932016e-5,4.3175608587979206e-8,0.0030018440201570076,-2.345253767991309e-5,4.298382851303703e-8,0.0030019492490419297,-2.3418849803166555e-5,4.293202980731309e-8,0.0030020683571267115,-2.3467794115789163e-5,4.300412504387121e-8,0.003002230577040951,-2.3575924418412295e-5,4.3164515275253525e-8,0.0030024530481396073,-2.371369072928725e-5,4.336864156691746e-8,0.0030027414546316424,-2.3850507219765965e-5,4.357057053753451e-8,0.0030030914014577796,-2.395813305179184e-5,4.3728004665977624e-8,0.003003489836964812,-2.4013129247926298e-5,4.3805913400348664e-8,0.003003916505986112,-2.3999045197511412e-5,4.3779791639210484e-8,0.0030043458018004154,-2.3908648392456543e-5,4.3639009503235175e-8,0.003004749546491452,-2.3746015567883387e-5,4.338995688522113e-8,0.0030051010544452283,-2.3527756377723387e-5,4.305786620408989e-8,0.003005380278727441,-2.3282359290256304e-5,4.268578367873625e-8,0.0030055791218540325,-2.3046814799346892e-5,4.232942511550203e-8,0.003005705403471987,-2.2860300990568903e-5,4.2047613637055405e-8,0.0030057838269298923,-2.2755768795899834e-5,4.188959157506121e-8,0.0030058528292368726,-2.275134395340437e-5,4.188212374752424e-8,0.003005957307061821,-2.2843946110056914e-5,4.2020014794074985E-08,0.003006138413427418,-2.300724171618979e-5,4.226319699714995e-8,0.0030064225790959894,-2.319527741556905e-5,4.254234844837243e-8,0.003006812562702178,-2.335201743558618e-5,4.277330694714285e-8,0.0030072836012702583,-2.3425444976355578e-5,4.2878234687331705e-8,0.003007787264335132,-2.3382901257872224e-5,4.280856410095554e-8,0.003008263689228249,-2.3222450315454287e-5,4.2561953877304193e-8,0.0030086592071474436,-2.2974830200955383e-5,4.218511547518296e-8,0.0030089426676550976,-2.26937486182808e-5,4.17591305405803e-8,0.00300911333844383,-2.2438134195979213e-5,4.137267939823414e-8,0.003009197487585295,-2.225432969879038e-5,4.1095226879594374e-8,0.003009236757661162,-2.216547948200621e-5,4.0961121500672567e-8,0.003009274709149118,-2.217043771176245e-5,4.09681037873079e-8,0.0030093468102407217,-2.224960297551781e-5,4.108625065125137e-8,0.003009475717436156,-2.2373205783984607e-5,4.1270546851323725e-8,0.003009670815179887,-2.250862585044295e-5,4.147189797251425e-8,0.0030099299700386954,-2.2625428795493783e-5,4.164463699013084e-8,0.00301024187402901,-2.269838136100306e-5,4.1750971465696804e-8,0.003010588197802463,-2.2709282253166442e-5,4.17636812926794e-8,0.0030109454772800953,-2.2648401738654642e-5,4.1668279995880246e-8,0.0030112871514783373,-2.2515993789587058e-5,4.1465320020488957e-8,0.003011586410402015,-2.2323777967550487e-5,4.1172650945728414e-8,0.003011820354517727,-2.2095615453953176e-5,4.082642765490463e-8,0.0030119753682766987,-2.1866121724890676e-5,4.0478962804724885e-8,0.0030120526329220835,-2.167596603147096e-5,4.019155827324615e-8,0.003012071619005174,-2.1563470526289128e-5,4.002177521312465e-8,0.0030120689879420764,-2.1553983387326334e-5,4.0007412510859045e-8,0.0030120914835277484,-2.1650539471334874e-5,4.015251477306536e-8,0.003012183981443884,-2.1829957093484467e-5,4.0421644155871945e-8,0.003012376436940448,-2.2046872823385574e-5,4.074612539538994e-8,0.003012674385510726,-2.2245060636632923e-5,4.104120937557746e-8,0.003013056385483303,-2.237249037808146e-5,4.122877520759659e-8,0.003013479206572159,-2.2395363336080645e-5,4.125840285038834e-8,0.00301388907552939,-2.2307009988112173e-5,4.112064949092303e-8,0.003014235716569667,-2.21292539477236e-5,4.0848957479960844e-8,0.0030144852458368573,-2.1905904722336058e-5,4.0509715506145036e-8,0.003014628140393211,-2.1690273931464643e-5,4.0183354013727575e-8,0.0030146798861370155,-2.1530670765035162e-5,3.9942465173289727e-8,0.003014674513909391,-2.1458647516230403e-5,3.9834154839566405e-8,0.0030146539150070514,-2.1483480978725524e-5,3.9871866653527925e-8,0.003014657045850174,-2.159355446238517e-5,4.003762590554032e-8,0.0030147123189946208,-2.1762610361229233e-5,4.029158028075859e-8,0.0030148344079461886,-2.1957660138997936e-5,4.0583952504102195e-8,0.003015024723893025,-2.214588593896058e-5,4.0865392615269084e-8,0.0030152739036193445,-2.22993320272481e-5,4.109395623141755e-8,0.0030155648211872598,-2.239750335835605e-5,4.123893927793968e-8,0.0030158753159103555,-2.242862410171888e-5,4.1282740545661414e-8,0.0030161804959735242,-2.239035571976067e-5,4.122196425411615e-8,0.0030164549748184135,-2.2290484655788065e-5,4.106850249505057e-8,0.0030166756785176938,-2.2147566876471484e-5,4.085053467582822e-8,0.0030168257902463656,-2.1990840651876128e-5,4.0612367627877493e-8,0.0030168998356597245,-2.185809576971141e-5,4.041113557692705e-8,0.003016908801918456,-2.1790004412026398e-5,4.030814374624823e-8,0.0030168827390098687,-2.1820318277313286e-5,4.035402021045058e-8,0.0030168675107474373,-2.19637983748077e-5,4.057054444845606e-8,0.003016913871536386,-2.220687703617631e-5,4.09366942603126e-8,0.003017061280745224,-2.2507121073764624e-5,4.138801109760418e-8,0.0030173232653145413,-2.28042122748035e-5,4.1833304318833444e-8,0.0030176816547766365,-2.3038752114974032e-5,4.218308051823787e-8,0.003018092461901088,-2.317060860472061e-5,4.2377204037070425e-8,0.0030185000617629827,-2.3189358211647577e-5,4.240056434796237e-8,0.0030188531890023565,-2.3114278349446322e-5,4.2282916648184983e-8,0.0030191172695145925,-2.298608274263823e-5,4.2086230161827244e-8,0.003019280521670172,-2.2854616393563075e-5,4.188596434454325e-8,0.00301935377876645,-2.27664496809722e-5,4.1752283274555145e-8,0.0030193653932179577,-2.2755137035095014e-5,4.173540981919782e-8,0.0030193531828910203,-2.2835689436507088e-5,4.185743087774839e-8,0.003019355569264338,-2.3003756094996915e-5,4.211123646364793e-8,0.003019403958407845,-2.323899690414335e-5,4.246574371735947e-8,0.003019517875462904,-2.3511172447957385e-5,4.2875145551518413e-8,0.003019703373553423,-2.3786991097561844e-5,4.328922423781491e-8,0.003019954219332213,-2.4036029761377636e-5,4.3662218358333147e-8,0.003020254766068992,-2.423482031971884e-5,4.395891153209101e-8,0.003020583367897793,-2.4369010761043288e-5,4.415784033020523e-8,0.0030209155492026242,-2.4434102956819604e-5,4.425239523927991e-8,0.0030212267021837735,-2.443546844269732e-5,4.4250868318591255e-8,0.0030214945520319145,-2.438812313993975e-5,4.417614262844354e-8,0.0030217018620748537,-2.4316298536123176e-5,4.406504030121207e-8,0.0030218398456035413,-2.4252307744576375e-5,4.396654725060574e-8,0.003021912331535931,-2.4233602777596313e-5,4.39372627104561e-8,0.0030219396761021347,-2.429662036167427e-5,4.4032012805518794e-8,0.0030219599100410016,-2.4466782499552282e-5,4.4288740896769435e-8,0.00302202361177359,-2.4746531459929342e-5,4.47105455738881e-8,0.003022180395983599,-2.5107010582484676e-5,4.525329764117915e-8,0.003022460057180725,-2.5490814286278737e-5,4.5829951905006934e-8,0.003022857627761485,-2.5828964736561783e-5,4.633626256410645e-8,0.003023332267934383,-2.6065721301283244e-5,4.668826880948124e-8,0.003023821927221237,-2.6178133626157623e-5,4.685181828073514e-8,0.0030242654527104103,-2.618060722133502e-5,4.6849397702988095e-8,0.00302462064736006,-2.6115003315723564e-5,4.674500325784846e-8,0.003024872054652819,-2.6034210741007566e-5,4.661907867346306e-8,0.003025029247398639,-2.5987096868666402e-5,4.654559337911846e-8,0.003025119674183166,-2.600869221520683e-5,4.657718713531259e-8,0.0030251798618585422,-2.6115962524536738e-5,4.6738915646380234e-8,0.003025247304514287,-2.6307892425086884e-5,4.702858653637406e-8,0.0030253540345252404,-2.6568373656992416e-5,4.742130825887169e-8,0.003025522180290973,-2.6870812112854194e-5,4.7876552038498893e-8,0.0030257616742353777,-2.718362842899639e-5,4.834647617031556e-8,0.0030260701248843638,-2.7475754898200334e-5,4.878418797216237e-8,0.003026434531440565,-2.7721296131052857e-5,4.915072369570908e-8,0.003026834267375794,-2.790282528074767e-5,4.941997646359749e-8,0.003027244652317317,-2.801310467185596e-5,4.958126578195143e-8,0.00302764045789911,-2.8055375984440208e-5,4.963976761859313e-8,0.0030279989828120874,-2.8042678247256376e-5,4.961548465878466e-8,0.003028302732030385,-2.7996614735003015e-5,4.9541371336797554e-8,0.0030285419382640503,-2.7945668380696642e-5,4.946074008271887e-8,0.0030287171664962805,-2.7922799028450726e-5,4.9423540183523226e-8,0.003028841979820805,-2.796162115926255e-5,4.948048077466765e-8,0.0030289448272879803,-2.8090202994150213e-5,4.967360897101288e-8,0.00302906808799766,-2.832216698757468e-5,5.002291747065914e-8,0.003029261393516597,-2.8646859820436187e-5,5.051165188848918e-8,0.0030295674732655794,-2.9023648863821986e-5,5.107788139765754e-8,0.0030300035036457318,-2.9387468552092513e-5,5.1622994265168756e-8,0.003030547654439084,-2.966892547984612e-5,5.204210187529804e-8,0.0030311419708281494,-2.9821700123341288e-5,5.226546402242462e-8,0.003031713429022907,-2.9841451121119933e-5,5.228710697781398e-8,0.0030322015269454838,-2.9764614366811912e-5,5.216297581619774e-8,0.003032576700297681,-2.964992539693665e-5,5.1982771928407634e-8,0.0030328427049061664,-2.95558177823456e-5,5.18354400080819e-8,0.0030330273738204275,-2.952483864326578e-5,5.178537523848844e-8,0.0030331699517057442,-2.9577898541893805e-5,5.1863748181959154e-8,0.0030333104138618784,-2.9715604944099784e-5,5.207074030425486e-8,0.003033482465717576,-2.9922976396352082e-5,5.238294189196952e-8,0.0030337098242709487,-3.017493755703473e-5,5.276185486031358e-8,0.0030340047066781646,-3.0441434203506502e-5,5.316170038656006e-8,0.0030343677318868385,-3.069201162682167e-5,5.353632168723621e-8,0.0030347889661070187,-3.089987345211356e-5,5.384526338775909e-8,0.0030352499978571756,-3.104524236184448e-5,5.405880170678398e-8,0.0030357268634388502,-3.111778908424594e-5,5.416158516454266e-8,0.0030361935715449567,-3.1117887001919675e-5,5.415451590233293e-8,0.003036625814699871,-3.105651407747209e-5,5.4054586154864e-8,0.003037004388893214,-3.095390233892545e-5,5.3892806738359834e-8,0.003037318044491069,-3.083722670992275e-5,5.3710656905416486e-8,0.0030375656938618433,-3.073753439132445e-5,5.355535566628204e-8,0.0030377579336559293,-3.068595891553895e-5,5.347403607373892e-8,0.0030379177300265737,-3.0709070813912385e-5,5.350663829087113e-8,0.00303807966723912,-3.0823076928323533e-5,5.367713979638666e-8,0.0030382864205653216,-3.102708512509555e-5,5.3983480616954495e-8,0.003038580787609243,-3.1297162733261364e-5,5.438876948576837e-8,0.0030389926926067358,-3.158502205672186e-5,5.481947606929273e-8,0.003039524072818,-3.1826340398447944e-5,5.517809779127173e-8,0.0030401396754807146,-3.196074975273588e-5,5.5373393880473416e-8,0.0030407732402690456,-3.1956872342941396e-5,5.5358273365942866e-8,0.0030413506216760183,-3.1827784431995975e-5,5.515324561172027e-8,0.0030418182463314066,-3.1625541651179424e-5,5.4838080988230775e-8,0.003042160215499455,-3.141800758364335e-5,5.4516451859117366e-8,0.003042396527409552,-3.126315753054347e-5,5.4276642795710085e-8,0.003042568426483442,-3.119410063882663e-5,5.416865946881467e-8,0.0030427219468042673,-3.121729790939866e-5,5.4201628447496637e-8,0.0030428965072263536,-3.131876817788899e-5,5.435349924198628e-8,0.0030431195875498325,-3.1472417249374476e-5,5.4583966139684054e-8,0.003043405671120528,-3.164719823662061e-5,5.48454888443154e-8,0.003043757278206,-3.181220441401584e-5,5.509103044165085e-8,0.0030441666670632966,-3.194016210578213e-5,5.527928024881129e-8,0.0030446177728978936,-3.2010055857858906e-5,5.537854846801234e-8,0.0030450884814295937,-3.200922767702134e-5,5.5369895852801475e-8,0.003045553386619406,-3.193493319092446e-5,5.524947681257876e-8,0.003045987115545042,-3.179510076572901e-5,5.502968803317016e-8,0.0030463680745412454,-3.1607871380829794e-5,5.473845618856727e-8,0.0030466821164058687,-3.139963516825679e-5,5.441621391559135e-8,0.0030469255028017037,-3.120163298944072e-5,5.4110664553357935e-8,0.003047106649642553,-3.1045429760949075e-5,5.3869815322197836e-8,0.003047246264489913,-3.0957724333207185e-5,5.373401644060654e-8,0.0030473756148905722,-3.0955076276420677e-5,5.372793333790556e-8,0.0030475327337165107,-3.10391075449408e-5,5.385333611732599e-8,0.0030477562593878016,-3.119291882112134e-5,5.408383161903094e-8,0.0030480767420623433,-3.138019112187306e-5,5.436371344206401e-8,0.003048506271394186,-3.154923496407961e-5,5.461427067933738e-8,0.003049029398017934,-3.164403612417949e-5,5.4750595244403097E-08,0.003049600741217892,-3.162181473782961e-5,5.470817249590223e-8,0.0030501546590933595,-3.147129459702184e-5,5.447053534930495e-8,0.0030506267199089275,-3.122124129326912e-5,5.408216609011085e-8,0.003050977543809847,-3.0931489493301834e-5,5.363475132421305e-8,0.0030512056349143645,-3.066970206362606e-5,5.323164358366911e-8,0.0030513427951945633,-3.048709541508865e-5,5.2950735410073135e-8,0.0030514375272195533,-3.0405493613713788e-5,5.2824725934812176e-8,0.0030515374213706445,-3.0418359774685625e-5,5.284287745599565e-8,0.003051677995809869,-3.050014466075965e-5,5.296553808075435e-8,0.0030518790092155215,-3.061696562449272e-5,5.314062781446654e-8,0.003052145625853913,-3.073469977610028e-5,5.3316031028704927e-8,0.0030524714707749288,-3.082377392153637e-5,5.344682144560079e-8,0.0030528417493476028,-3.086160174564249e-5,5.34988474804598e-8,0.0030532358836312897,-3.0833881042707114e-5,5.345060667689741e-8,0.003053629879526026,-3.0735485986035706e-5,5.3294565854492434e-8,0.0030539988364117142,-3.0571146292916206e-5,5.30382059792326e-8,0.0030543199507090837,-3.0355674406952507e-5,5.270438907050841e-8,0.0030545760956502454,-3.0113150877368533e-5,5.233010961195881e-8,0.00305475954547292,-2.9874438142143042e-5,5.1962653663563995e-8,0.003054874940487383,-2.967277780668974e-5,5.165280031939516e-8,0.0030549404324154324,-2.9537825570307475e-5,5.144563962738253e-8,0.0030549861390338404,-2.9489134143288323e-5,5.137059250576423e-8,0.0030550495976808005,-2.953061394193003e-5,5.143300630399881e-8,0.003055168710759939,-2.9647526534915528e-5,5.160970828560753e-8,0.0030553733364540553,-2.9807121158297693e-5,5.1850176986509324e-8,0.0030556770688369554,-2.9963521348213533e-5,5.208418350889287e-8,0.0030560711382057876,-3.0066914121891328e-5,5.223590149011024e-8,0.003056522783852153,-3.007606385331831e-5,5.224295582005858e-8,0.0030569803906741184,-2.9971466768568165e-5,5.207634125974998e-8,0.0030573862107332603,-2.9764480348069197e-5,5.1754164969916074e-8,0.0030576939719519337,-2.9497043921062268e-5,5.134105271121149e-8,0.0030578844960596806,-2.9229485363525857e-5,5.092940536552576e-8,0.0030579714726823846,-2.9020378842860718e-5,5.060856308901679e-8,0.00305799430929109,-2.890783769790072e-5,5.0436246780448754e-8,0.0030580024833647516,-2.8900743931462217e-5,5.042530128741445e-8,0.0030580398139917744,-2.8981793723107103e-5,5.0548579370877406e-8,0.0030581349144192635,-2.9117796452997896e-5,5.075489270553819e-8,0.0030582989710085853,-2.927092112731661e-5,5.0986296117823764e-8,0.00305852838098303,-2.9406906130383003e-5,5.1190589621726315e-8,0.00305880913029923,-2.9499417804318987e-5,5.132784410791377e-8,0.0030591209014314944,-2.9531615236497716e-5,5.1372652866946216e-8,0.003059440241717404,-2.949633831159525e-5,5.131434068941656e-8,0.00305974298908132,-2.9395907947313022e-5,5.1156659354477445e-8,0.0030600065090859636,-2.9241933794825013e-5,5.091753916282965e-8,0.00306021229511157,-2.9054948323373344e-5,5.062856693783168e-8,0.003060349177847135,-2.8863199511689882e-5,5.033312632870034e-8,0.003060416814008068,-2.8699745555567035e-5,5.008188395273282e-8,0.0030604284223485962,-2.8597283966096064e-5,4.992478512143156e-8,0.0030604111977471983,-2.858098323762389e-5,4.990002248696701e-8,0.0030604029204521956,-2.8660871126497475e-5,5.002240613766968e-8,0.0030604443802250266,-2.8826475438747818e-5,5.027527520898142e-8,0.0030605691021830185,-2.9046441406551585e-5,5.061009175503469e-8,0.00306079346737266,-2.927436144349517e-5,5.0955543464884993e-8,0.0030611106463299936,-2.945974872572592e-5,5.123445153963956e-8,0.003061490627398194,-2.9561147187201426e-5,5.1383839021491824e-8,0.0030618866932196325,-2.9557585511589545e-5,5.137235223398255e-8,0.0030622468460100747,-2.9455021239405097e-5,5.1209933881528055e-8,0.0030625273270125427,-2.9285654512983767e-5,5.0946554534423536e-8,0.0030627045011972953,-2.909970499319971e-5,5.065943900038011e-8,0.003062781223049597,-2.8951506243513924e-5,5.043168206571564e-8,0.0030627851170516554,-2.8884214842026012e-5,5.032886811317642e-8,0.003062759221135395,-2.8918582214671775e-5,5.038203695084455e-8,0.0030627487734678108,-2.9049687038960627e-5,5.0582911500186546e-8,0.0030627893702877065,-2.9251814457828465e-5,5.0891584468485985e-8,0.0030629003148716434,-2.9488179827505706e-5,5.1251525998749074e-8,0.0030630839037973016,-2.972103318011528e-5,5.160504457192073e-8,0.0030633288315558426,-2.9918997653759335e-5,5.190441062046527e-8,0.003063615124797014,-3.0060785653816723e-5,5.211739828811116e-8,0.003063918729338474,-3.013609360645597e-5,5.222854366679751e-8,0.003064214995878956,-3.014497667576545e-5,5.223815136496016e-8,0.0030644811540353513,-3.0096760320048008e-5,5.2160662139867385e-8,0.003064698316991432,-3.0009023509637796e-5,5.202315302953461e-8,0.0030648536429064674,-2.990656924730143e-5,5.1863784882354814e-8,0.0030649429933266646,-2.9819741475536308e-5,5.1729180727117875e-8,0.0030649738454125133,-2.9781167475517766e-5,5.166933721709507e-8,0.0030649674206902153,-2.98201748061254e-5,5.172897531156119e-8,0.0030649581828044383,-2.9955006804012056e-5,5.19355879701887e-8,0.0030649887015580467,-3.0184701153387606e-5,5.2287079973691934e-8,0.0030650993228122743,-3.048438554024296e-5,5.274472973817438e-8,0.0030653151426291397,-3.080799959377198e-5,5.3237545317571995e-8,0.0030656356436287177,-3.109971429626911e-5,5.36798936350581e-8,0.003066032397083313,-3.131062399609393e-5,5.3997123564829124e-8,0.0030664566457068772,-3.141392264624986e-5,5.414878191396371e-8,0.003066853673243906,-3.141241782904111e-5,5.414000445922996e-8,0.003067178107954643,-3.1336255718859404e-5,5.401782535141934e-8,0.003067405017322031,-3.123297452844401e-5,5.385569119674471e-8,0.0030675342967685115,-3.115406523908855e-5,5.3732673458228506e-8,0.0030675883450696387,-3.1142126616185284e-5,5.3713731593782084e-8,0.003067604598905477,-3.122165258980363e-5,5.3835712946092174e-8,0.0030676253853558076,-3.139518885501176e-5,5.41016984091395e-8,0.0030676878955794595,-3.164514859820826e-5,5.448403678006608e-8,0.0030678167760080873,-3.1940102956282886e-5,5.4934156079083943e-8,0.00306802082106185,-3.22432379520567e-5,5.539556794925043e-8,0.0030682938008947383,-3.252038055262967e-5,5.581610023286302e-8,0.003068618188348601,-3.2745712319185725e-5,5.6156527333722295e-8,0.0030689700372110436,-3.290455445210272e-5,5.63947158589191e-8,0.0030693235621584002,-3.299368835276426e-5,5.652604281911584e-8,0.0030696546829265168,-3.302018003318915e-5,5.656158441311524e-8,0.003069943501781531,-3.299964329710182e-5,5.652548727111865e-8,0.0030701761356594238,-3.295448884467991e-5,5.6452316329964884e-8,0.0030703464351241215,-3.2912168983386934e-5,5.6384348797087725e-8,0.0030704579205523843,-3.290292724600728e-5,5.6368046064395786e-8,0.0030705257705411666,-3.2956240209135014e-5,5.6448491101539555e-8,0.003070577902929506,-3.3095212754677564e-5,5.666072725949836e-8,0.003070653303256023,-3.332901887976236e-5,5.7018206275630994e-8,0.0030707954675129484,-3.3645317050531466e-5,5.750131258839977e-8,0.003071040281409215,-3.4006866132882734e-5,5.805237688321617e-8,0.003071401442066699,-3.435724590922433e-5,5.858460257890024e-8,0.003071860664240823,-3.463707718078335e-5,5.900700173455468e-8,0.003072369948294953,-3.4805077484133635e-5,5.9256687131385314e-8,0.0030728668933984586,-3.4853323968064e-5,5.932224867940723e-8,0.00307329574470014,-3.4808729472292477e-5,5.9245906426521214e-8,0.0030736238628414326,-3.472127382584356e-5,5.910521892617646e-8,0.0030738476136962186,-3.4646440956723325e-5,5.898583976281836e-8,0.0030739883560582247,-3.462984017376718e-5,5.895772090868357e-8,0.0030740829181741033,-3.46981445897087e-5,5.906122528438606e-8,0.0030741729261370603,-3.485661305223858e-5,5.930354340403719e-8,0.0030742957031104122,-3.509154811261891e-5,5.966276668283171e-8,0.0030744779277463736,-3.537572740023708e-5,6.00964697542749e-8,0.0030747323559975367,-3.5675189893930766e-5,6.055223916889516e-8,0.003075057487670119,-3.5956061174078274e-5,6.097812908001633e-8,0.0030754397046584866,-3.619027550379833e-5,6.133134047523962e-8,0.0030758570531433604,-3.6359408441814945e-5,6.158398173260262e-8,0.0030762836935755364,-3.645637499575067e-5,6.17255797130405e-8,0.0030766941332692503,-3.6485215974385064e-5,6.176270393282051e-8,0.00307706662715048,-3.645952970605651e-5,6.17165520944473e-8,0.0030773855806581914,-3.64002479832436e-5,6.161954383422073e-8,0.0030776432027652626,-3.63332416409525e-5,6.151163570192726e-8,0.003077840759611733,-3.628682113866609e-5,6.143643256726638e-8,0.003077989627912044,-3.628885788142236e-5,6.143667890109774e-8,0.0030781120193623807,-3.6363006241524466e-5,6.154837667649236e-8,0.0030782405956229293,-3.652349964920907e-5,6.179278977302228e-8,0.0030784153961581056,-3.6768720995789186e-5,6.216668724687254e-8,0.003078676287039924,-3.707542807113103e-5,6.263368664319519e-8,0.0030790504999446576,-3.739763323181358e-5,6.312273725650803e-8,0.0030795385416962856,-3.767491089624212e-5,6.354097060212617e-8,0.0030801063485889927,-3.7851372011602716E-05,6.380282181650783e-8,0.003080691860843348,-3.789839797156401e-5,6.3864909335135015E-08,0.0030812263089583505,-3.782804205247127e-5,6.374660437345014e-8,0.0030816595018051856,-3.768799022595951e-5,6.352218567186832e-8,0.003081975175275685,-3.754141745986299e-5,6.328960513196501e-8,0.0030821904003572086,-3.7444257862379394e-5,6.313520651894206e-8,0.003082343638281676,-3.743069219176931e-5,6.311124043335557e-8,0.0030824800552818033,-3.7509564541134194e-5,6.323047245576145e-8,0.0030826400072475326,-3.7668452785068254e-5,6.347276711043042e-8,0.003082852413765722,-3.788093848520992e-5,6.379661295313797e-8,0.003083132266538477,-3.811403698482697e-5,6.415076333549884e-8,0.0030834808667202927,-3.833449478651092e-5,6.448396137955909e-8,0.0030838877341181153,-3.8513714836371074e-5,6.475242681002939e-8,0.0030843336004778847,-3.8631288755844996e-5,6.49251538042667e-8,0.003084794042322366,-3.867707285475078e-5,6.49869875714132e-8,0.0030852433321181686,-3.865183435490819e-5,6.49395475346079e-8,0.0030856581339217173,-3.856655888053119e-5,6.48001336398034e-8,0.0030860206460516367,-3.844058492853828e-5,6.459884806542256e-8,0.0030863208771382037,-3.8298947069799535e-5,6.437449277747022e-8,0.0030865580404335806,-3.816935596666206e-5,6.416988298112212e-8,0.0030867412223701774,-3.807898089265322e-5,6.402682842646071e-8,0.0030868893766480983,-3.8050984731237867e-5,6.398072676630348e-8,0.0030870304944824955,-3.810068561233592e-5,6.405462439468387e-8,0.003087199430753806,-3.823122572618231e-5,6.425261522376926e-8,0.0030874333446925814,-3.842914766591009e-5,6.455320872359164e-8,0.0030877636895722525,-3.866159342862816e-5,6.490525234810125e-8,0.0030882049718960573,-3.887836166676586e-5,6.523127311346362e-8,0.003088743561312213,-3.9022341755227606e-5,6.544356507347711e-8,0.003089333590640843,-3.904860755320145e-5,6.547348840413299e-8,0.0030899071036917716,-3.894510170953161e-5,6.530322358465656e-8,0.0030903979050176593,-3.8742004346281896e-5,6.498015271661827e-8,0.003090767228006569,-3.8501181533249536e-5,6.460049051721142e-8,0.0030910160608724553,-3.8290854101103754e-5,6.426997931057188e-8,0.0030911786470456865,-3.816087723268984e-5,6.406549047523721e-8,0.003091304636594572,-3.81308943961482e-5,6.401668515462453e-8,0.0030914415331645385,-3.819243835001492e-5,6.410948319588161e-8,0.003091624053373996,-3.831851468248846e-5,6.430123035197483e-8,0.0030918706623143453,-3.8474104361764894e-5,6.453722136219927e-8,0.0030921846709144477,-3.8624255014770126e-5,6.476330985906157e-8,0.0030925572633731823,-3.8739191826344275e-5,6.493373044917373e-8,0.0030929709124494467,-3.879722444333691e-5,6.501542077873879e-8,0.003093402731555433,-3.8786312162609277e-5,6.499027635350036e-8,0.0030938277663450082,-3.870467412242986e-5,6.485599547202599e-8,0.0030942222139669767,-3.856054410640383e-5,6.462566902485165e-8,0.003094566519648795,-3.8371053174280506e-5,6.432606100579885e-8,0.0030948481721392368,-3.816012347433993e-5,6.399436069664364e-8,0.003095063804553022,-3.795541247827492e-5,6.36734419165358e-8,0.003095220250846101,-3.778464042825393e-5,6.34061366452044e-8,0.003095334440344874,-3.76716671513097e-5,6.322910755980504e-8,0.00309543208101415,-3.76325912073004e-5,6.316677889485286e-8,0.0030955450293822886,-3.767217508425234e-5,6.32258396731875e-8,0.003095707183071852,-3.778095740397159e-5,6.339090801722296e-8,0.00309594862334514,-3.793365750566644e-5,6.36222778804018e-8,0.003096287931628474,-3.80901905074783e-5,6.385770713701393e-8,0.0030967236941520254,-3.8201303672671125e-5,6.402124536059043e-8,0.003097228280907147,-3.822036947682624e-5,6.404140759803494e-8,0.0030977490184312755,-3.8120022723220564e-5,6.387670810024808e-8,0.0030982210755350135,-3.7907147081520453e-5,6.353864073301886e-8,0.0030985900761617553,-3.762610731223205e-5,6.309655120907573e-8,0.0030988336384995293,-3.734434007536094e-5,6.265523738702239e-8,0.003098968816215725,-3.7126254709522466e-5,6.231441792645098e-8,0.003099041425769494,-3.7010331236075636e-5,6.213318613669418e-8,0.0030991055833493103,-3.7000963291756114e-5,6.211747094970239e-8,0.0030992057850765756,-3.707503307238412e-5,6.223050579274813e-8,0.0030993681475792695,-3.719515769679686e-5,6.241367766141261e-8,0.0030996000182369945,-3.7321886461173106e-5,6.260562024590069e-8,0.0030998940056717068,-3.742152940130405e-5,6.275433238229519e-8,0.003100233021590866,-3.7469791909199243e-5,6.282264287237035e-8,0.0031005946146256498,-3.74527865541713e-5,6.278957087078115e-8,0.0031009543309571943,-3.7366892039579344e-5,6.264995951136436e-8,0.003101288498980592,-3.721816385706405e-5,6.241351573364313e-8,0.0031015767979117176,-3.702139137135275e-5,6.210337620395833e-8,0.0031018047687390517,-3.679862687950359e-5,6.175387343947005e-8,0.0031019661991720264,-3.657686241831285e-5,6.140695022313485e-8,0.0031020649564957345,-3.638462538015085e-5,6.110684934249384e-8,0.0031021156285978737,-3.624768225270253e-5,6.089338495755532e-8,0.003102142484188417,-3.6184428286903e-5,6.079473351831937e-8,0.0031021765631752685,-3.620172937410701e-5,6.082097958568538e-8,0.0031022510076930674,-3.629208197157182e-5,6.095979473559371e-8,0.0031023950750430954,-3.643289906673445e-5,6.117550104443778e-8,0.0031026275545373554,-3.658852828809345e-5,6.141241349154455e-8,0.0031029505897565103,-3.6715498961018746e-5,6.160314515690131e-8,0.0031033454561945222,-3.677128760644678e-5,6.168223979401771e-8,0.0031037725875075316,-3.672594194239396e-5,6.160407633853862e-8,0.0031041783170027994,-3.6573890333345214e-5,6.13609507617016e-8,0.0031045091130757767,-3.634081561194844e-5,6.099349544356457e-8,0.0031047297909969312,-3.607980110758601e-5,6.058452494813771e-8,0.0031048374201034855,-3.585494963702326e-5,6.023352619407363e-8,0.003104862516995215,-3.5718644691785436e-5,6.002135737673514e-8,0.003104856093193385,-3.569405931092349e-5,5.998319444364333e-8,0.0031048700872880267,-3.577137790618058e-5,6.010288490586609e-8,0.003104941604094109,-3.5916960865466545e-5,6.032745899023271e-8,0.00310508658575867,-3.608784938858073e-5,6.058987181278256e-8,0.003105301813939656,-3.6244129061960325e-5,6.082825896614451e-8,0.0031055709169320175,-3.6355939860998774e-5,6.099670423139435e-8,0.003105870647986892,-3.6405690275413666e-5,6.106846533436347e-8,0.0031061756914431407,-3.638750956805874e-5,6.103492926911871e-8,0.0031064618740461935,-3.630572623697611e-5,6.090315332297189e-8,0.0031067083897661323,-3.617327510332381e-5,6.069340518034317e-8,0.0031068996748370463,-3.6010179052804656e-5,6.043687697777326e-8,0.0031070273067826453,-3.5841809895788134e-5,6.017304374810048e-8,0.003107091924907097,-3.569640763286369e-5,5.994580924865879e-8,0.003107104690948129,-3.5601421586642455e-5,5.979775912534584e-8,0.0031070874280543044,-3.557871974140187e-5,5.976263364692894e-8,0.0031070705639987084,-3.563939705212548e-5,5.985721638430891e-8,0.00310708845076731,-3.577953751271076e-5,6.007479140748683e-8,0.0031071724854550274,-3.597857902840596e-5,6.0382741421625e-8,0.003107343449944664,-3.620155104969642e-5,6.072622362437715e-8,0.0031076051132779385,-3.640540195274204e-5,6.10381901744192e-8,0.0031079410880545904,-3.6548419234103456e-5,6.125412657583635e-8,0.0031083163328670636,-3.6600797795219e-5,6.132843658673388e-8,0.003108683776045806,-3.655377779638129e-5,6.12484672972554e-8,0.0031089953478281146,-3.642449473760269e-5,6.104178540723422e-8,0.0031092151923365167,-3.6254006005909544e-5,6.077284786520125e-8,0.003109331132111241,-3.6097367552710236e-5,6.052739707346827e-8,0.00310935954808475,-3.6007610042852635e-5,6.038750927329051e-8,0.0031093404361101393,-3.601917120844064e-5,6.04059490162074e-8,0.0031093239113226005,-3.6137917913298556e-5,6.059089030936383e-8,0.003109354124427072,-3.6341991680345246e-5,6.090751315544337e-8,0.0031094576079410963,-3.6591899919457295e-5,6.12939239128099e-8,0.003109639723574992,-3.684400498898479e-5,6.168222747975021e-8,0.003109888172433052,-3.706155993675539e-5,6.201562972733295e-8,0.003110179865335902,-3.7220522609188814e-5,6.225730522644977e-8,0.0031104876813696455,-3.731061864999249e-5,6.239184703464731e-8,0.00311078539719096,-3.733367074941028e-5,6.242252235980394e-8,0.0031110506840359895,-3.730106234421321e-5,6.236728729470829e-8,0.003111266829818254,-3.723134017143124e-5,6.225510727514509e-8,0.0031114239398752712,-3.7148181411718e-5,6.212287206499815e-8,0.0031115201531575613,-3.7078419428024274e-5,6.201236188919679e-8,0.003111562975299694,-3.7049500972479054e-5,6.196625586571644e-8,0.003111570240611829,-3.7085775629295866e-5,6.20222732746493e-8,0.0031115696907623807,-3.720350361712773e-5,6.220533256957703e-8,0.003111595961660061,-3.740535774526301e-5,6.251900193071125e-8,0.0031116842348012787,-3.7676298720104116e-5,6.293919212979045e-8,0.0031118612256879658,-3.798340020650173e-5,6.341407163920447e-8,0.003112136139777003,-3.828150901245256e-5,6.387306782824209e-8,0.003112495379209596,-3.852427301854293e-5,6.424415997620797e-8,0.003112903926884855,-3.867726198381603e-5,6.447432367142958e-8,0.0031133136874417224,-3.872848224078679e-5,6.454579824951314e-8,0.0031136761793375063,-3.8692456923064395E-05,6.448222652228261e-8,0.0031139554371912236,-3.860656882561176e-5,6.434267804320025e-8,0.0031141372703484766,-3.8521032659985596e-5,6.420576709598722e-8,0.0031142324513703736,-3.848555621137015e-5,6.414873497201981e-8,0.003114273122112332,-3.85363882869955e-5,6.422732768153216e-8,0.0031143034616922818,-3.868736365238427e-5,6.446208120483557e-8,0.0031143674207793413,-3.892758353008189e-5,6.483503018920008e-8,0.003114497459059395,-3.9226240381586666e-5,6.529750515880651e-8,0.0031147078121036174,-3.954245370409532e-5,6.578559894383833e-8,0.00311499378960663,-3.983627974908429e-5,6.623730004445356e-8,0.0031153360888836355,-4.007726426013293e-5,6.660567612073376e-8,0.0031157075151952004,-4.024868825724295e-5,6.686529743458914e-8,0.00311607947574405,-4.034776414925683e-5,6.701237492469503e-8,0.0031164267230209515,-4.038331710088937e-5,6.706105409678788e-8,0.0031167301083817336,-4.037260325837689e-5,6.703845169512361e-8,0.003116977890976981,-4.033831580823609e-5,6.698004129434217e-8,0.0031171663505323325,-4.030610095786534e-5,6.692583316158584e-8,0.0031173002857739405,-4.030233658179883e-5,6.691691302618574e-8,0.0031173935830516013,-4.035158745219613e-5,6.699141672014888e-8,0.003117469472534857,-4.047311163717984e-5,6.71790093138832e-8,0.0031175594775110223,-4.067616621474953e-5,6.749354678239481e-8,0.0031176996760878236,-4.095478103045957e-5,6.792501578391407e-8,0.003117923245200117,-4.1284097202451735e-5,6.843400804444655e-8,0.003118249965451604,-4.162156390749211e-5,6.895378532468487e-8,0.0031186762577232225,-4.1915651713568604e-5,6.940399276282996e-8,0.0031191714040973333,-4.212116830683181e-5,6.971456663709166e-8,0.0031196840741649716,-4.2215346438736336e-5,6.985077033810668e-8,0.003120157847027817,-4.220674667049533e-5,6.98269624957057e-8,0.0031205489414833265,-4.2132362620646234e-5,6.97018734876997e-8,0.0031208383916512266,-4.20448327662397e-5,6.955836204462521e-8,0.003121034785095203,-4.199616018547974e-5,6.947774286240719e-8,0.003121168632125931,-4.202421267565137e-5,6.951862361251391e-8,0.0031212820770698153,-4.214528318978495e-5,6.970544612819716e-8,0.0031214177248149594,-4.235306877230772e-5,7.002722768273191e-8,0.0031216092731973467,-4.2622792035729374e-5,7.044435725304227e-8,0.0031218754919343627,-4.2918580516760454e-5,7.090035608149642e-8,0.0031222181803268524,-4.320209457310386e-5,7.133539946884241e-8,0.003122623947005099,-4.344044848734895e-5,7.169857291254788e-8,0.00312306884485219,-4.361179467816571e-5,7.195639886437939e-8,0.003123524289638139,-4.370774340490241e-5,7.209642624241596e-8,0.0031239626656890764,-4.373282262997294e-5,7.21262580887302e-8,0.0031243615440335547,-4.3701909396077086e-5,7.206948965492392e-8,0.0031247061538028763,-4.3636780471882876e-5,7.196033443639855e-8,0.0031249903765416783,-4.356272900897019e-5,7.183837800351165e-8,0.0031252168682957006,-4.3505688790359626e-5,7.174410685588453e-8,0.0031253968441908885,-4.348975073626395e-5,7.17150048965672e-8,0.0031255497310814042,-4.35346390742139e-5,7.178155313739291e-8,0.00312570246406995,-4.3652662272077505e-5,7.196242839516862e-8,0.0031258876523310264,-4.384487979547073e-5,7.225856364534224e-8,0.003126139361453899,-4.409699636109416e-5,7.26468964950289e-8,0.003126485461480311,-4.437689592985936e-5,7.307674195249288e-8,0.003126937079372063,-4.4637120813428204e-5,7.347383911846252e-8,0.003127478854765807,-4.482535361453673e-5,7.375675854161458e-8,0.0031280666690904416,-4.490213927602775e-5,7.386449999496449e-8,0.0031286382404406153,-4.4858518891369295e-5,7.37839353542856e-8,0.0031291344460409416,-4.472272685316552e-5,7.356017852034121e-8,0.0031295207052957296,-4.455029894921475e-5,7.328095575302624e-8,0.0031297969026368396,-4.440289276125083e-5,7.304320913549977e-8,0.0031299925059136854,-4.4327735522592144e-5,7.292069128837017e-8,0.0031301525953489643,-4.4346566926362245e-5,7.294663172919162e-8,0.003130323040755186,-4.44552245163689e-5,7.311334170083266e-8,0.0031305398839340287,-4.463002091424208e-5,7.338260528006618e-8,0.00313082404631057,-4.483652215332876e-5,7.369977824422968e-8,0.0031311803606072124,-4.503787355813529e-5,7.400698484506922e-8,0.0031315994383132096,-4.5201450522542784e-5,7.425347439859536e-8,0.0031320612381614877,-4.530356848674249e-5,7.440279963037097e-8,0.0031325396046175753,-4.533218545978504e-5,7.443682235158883e-8,0.003133007088926917,-4.528754210138793e-5,7.435654510846008e-8,0.003133439334571156,-4.51809403698077e-5,7.41801159799911e-8,0.003133818472273233,-4.503213230381495e-5,7.393873233871031e-8,0.003134135205289634,-4.486591093923118e-5,7.367133504974223e-8,0.0031343895555660316,-4.470855447784281e-5,7.34190699593144e-8,0.003134590575431148,-4.4584622562577654e-5,7.322027017012072e-8,0.0031347554245567386,-4.451420562905288e-5,7.310611312884732e-8,0.0031349080100163845,-4.451044644791041e-5,7.309669605942408e-8,0.0031350771198854635,-4.457710742852157e-5,7.319723119373661e-8,0.0031352936217133444,-4.47060605212665e-5,7.339422020383135e-8,0.0031355858958112227,-4.487510826442938e-5,7.365224958348347e-8,0.003135972822388433,-4.5047645339306655e-5,7.391369496033267e-8,0.0031364549294214225,-4.517674188187485e-5,7.410524949995039e-8,0.003137006880828943,-4.521608014150156e-5,7.415499865583744e-8,0.0031375773084138556,-4.513707215275879e-5,7.401903658596108e-8,0.003138101428611319,-4.494515854131807e-5,7.370680978793502e-8,0.0031385245037932065,-4.468383466731007e-5,7.328731665396651e-8,0.0031388241332245405,-4.441996388809048e-5,7.286597138629206e-8,0.003139017499846824,-4.421722026618582e-5,7.254276438257211e-8,0.003139150157383647,-4.411342074013215e-5,7.237653893372397e-8,0.0031392756212672386,-4.411288523762928e-5,7.237306272266767e-8,0.003139437968769991,-4.4192948719133804e-5,7.249557334607343e-8,0.0031396632755686426,-4.431658177299298e-5,7.268500837724008e-8,0.0031399588406845693,-4.444412071309936e-5,7.287870894461722e-8,0.0031403166737552367,-4.454122642373622e-5,7.302295817715162e-8,0.0031407183126958165,-4.4583109623867075e-5,7.307944575839242e-8,0.0031411394477191415,-4.4556196731207386e-5,7.302762227868937e-8,0.0031415539994911366,-4.445830099035177e-5,7.28647417048713e-8,0.003141937728993228,-4.429775179132686e-5,7.260437295376374e-8,0.0031422713373744243,-4.4091609934731785e-5,7.227358181570472e-8,0.0031425429027575314,-4.386309308749254e-5,7.190893225978437e-8,0.0031427494576673834,-4.363836426557965e-5,7.155149576181157e-8,0.0031428974772572276,-4.3442976873453624e-5,7.124128957024562e-8,0.003143002214192302,-4.329843267004607e-5,7.101185038058907e-8,0.003143086052266109,-4.321920239699395e-5,7.088551186228275e-8,0.0031431760678829164,-4.3210361139567735e-5,7.086966698763124e-8,0.0031433008971223707,-4.3265945431617366e-5,7.09542336198036e-8,0.003143486895319873,-4.336813785078726e-5,7.111052058211447e-8,0.0031437533847702066,-4.348759147027911e-5,7.12919612296051e-8,0.0031441069213620117,-4.358585463469756e-5,7.143813366953108e-8,0.003144535476545944,-4.362139298757207e-5,7.148429942205696e-8,0.003145005091611609,-4.3560203673701036e-5,7.137795505629189e-8,0.003145463126681861,-4.3389675112285365e-5,7.11003324650128e-8,0.003145851574927433,-4.3129979926205826e-5,7.068402441148508e-8,0.0031461283507413433,-4.2833959953962696e-5,7.021264040871186e-8,0.003146286100171612,-4.257032356693477e-5,6.979432110562806e-8,0.0031463558591178996,-4.239669820392884e-5,6.951932082306872e-8,0.003146392327049763,-4.233819904869464e-5,6.942631862677053e-8,0.0031464507043553205,-4.2383168839997224e-5,6.94958958380317e-8,0.0031465688651928546,-4.249459392815535e-5,6.966883115670779e-8,0.0031467612849682977,-4.262689345829094e-5,6.987285185595196e-8,0.0031470222789782287,-4.273918499304871e-5,7.004366315740973e-8,0.0031473330289561153,-4.2802158807808166e-5,7.013567759431403e-8,0.003147668417268007,-4.279983806022786e-5,7.01245308551207e-8,0.0031480021049310764,-4.272860133319068e-5,7.00052672228628e-8,0.0031483099313495784,-4.259528124034335e-5,6.978916831189976e-8,0.0031485723125253334,-4.241509647530167e-5,6.950045735299453e-8,0.0031487761173877083,-4.2209454417396814e-5,6.917289890407978e-8,0.0031489161538580373,-4.2003459881328945e-5,6.884596295593158e-8,0.003148996162170557,-4.1822953882087386e-5,6.856021556609623e-8,0.003149028978654053,-4.169106752864223e-5,6.835188836388549e-8,0.003149035482429731,-4.162464544196019e-5,6.824720046102467e-8,0.003149042199251593,-4.163112014627014e-5,6.825739085675065e-8,0.00314907771956232,-4.170639233813112e-5,6.837538674971382e-8,0.0031491682653819867,-4.18342132313785e-5,6.857492364962827e-8,0.0031493329122884942,-4.198742613049102e-5,6.881267918772647e-8,0.003149579039836493,-4.213120402571019e-5,6.903358555963276e-8,0.0031498986271138838,-4.2228420130555436e-5,6.91794432100356e-8,0.0031502664228729867,-4.2247298350746497e-5,6.920097199180307e-8,0.003150641701734798,-4.217078712182122e-5,6.907238815589541e-8,0.0031509754961388586,-4.200545381164349e-5,6.880509810771359e-8,0.0031512238608324395,-4.1785638196682574e-5,6.845392811745735e-8,0.0031513640821730364,-4.1567794289340616e-5,6.810802378555436e-8,0.003151406157010707,-4.141327484247085e-5,6.786370323995615e-8,0.0031513912510576945,-4.136560918026271e-5,6.778876311671728e-8,0.003151375804577231,-4.1434395174820625e-5,6.789730029476199e-8,0.0031514098642566202,-4.159482257943738e-5,6.81492342574456e-8,0.0031515215625475173,-4.18012216288661e-5,6.847194098192803e-8,0.0031517136174996478,-4.200494130433833e-5,6.878861599395965e-8,0.0031519692707481077,-4.216756787951769e-5,6.903911030241721e-8,0.003152261517243071,-4.2266490087485424e-5,6.918851693440988e-8,0.0031525610670786637,-4.229461685062819e-5,6.922644943555905e-8,0.0031528414655990046,-4.22573706176436e-5,6.9162068457332e-8,0.003153081775375267,-4.216923255662013e-5,6.901853417953314e-8,0.0031532678798198805,-4.205077312180638e-5,6.882835975902144e-8,0.0031533932546355388,-4.192616457967239e-5,6.862959482793142e-8,0.0031534595708972847,-4.1820803001536924e-5,6.84621653927876e-8,0.0031534770784778826,-4.175861379115542e-5,6.836364650161207e-8,0.0031534643622982412,-4.17588032667655e-5,6.836409543908077e-8,0.0031534468701465957,-4.183228856251606e-5,6.848035579602831e-8,0.003153453782052926,-4.197854007215975e-5,6.871105220452271e-8,0.003153513263736754,-4.218384148552481e-5,6.903390427614672e-8,0.0031536467429532566,-4.242196322172231e-5,6.940693592124387e-8,0.003153863430347162,-4.265783483101526e-5,6.977446531891138e-8,0.003154156585993926,-4.285397543340932e-5,7.007742427316526e-8,0.00315450279718283,-4.2978622186424466e-5,7.026625449926472e-8,0.0031548650041122103,-4.301400854080456e-5,7.031388230440871e-8,0.00315519943918034,-4.296289169347691e-5,7.022577473855363e-8,0.003155465859320983,-4.285109888117147e-5,7.00436294628589e-8,0.0031556391659936065,-4.272394847220358e-5,6.983943122484468e-8,0.0031557188612724523,-4.263555517927237e-5,6.969842457165365e-8,0.0031557317728420436,-4.263280101975123e-5,6.969387032889604e-8,0.0031557249027450757,-4.2739520543408744e-5,6.98623192302485e-8,0.0031557498994496218,-4.294833096833603e-5,7.019104128047928e-8,0.00315584589866597,-4.322452786249621e-5,7.062447804376743e-8,0.0031560287243041687,-4.3519737897634517e-5,7.108598411323216e-8,0.003156290210848438,-4.378791545601902e-5,7.150311106554863e-8,0.0031566054069980037,-4.3996660675542415e-5,7.182534984786604e-8,0.0031569423808284628,-4.4131253208340974e-5,7.203026754938302e-8,0.003157270337523358,-4.4192994871844845e-5,7.212064457656072e-8,0.003157564470837877,-4.419496903596624e-5,7.211761487890475e-8,0.003157808015852627,-4.415761251223253e-5,7.205364259861087e-8,0.0031579926823708912,-4.4105138784809375e-5,7.196695049477917e-8,0.0031581184957774153,-4.406285452731199e-5,7.189738913692536e-8,0.003158193599416625,-4.4054911516432865e-5,7.188294750699247e-8,0.003158234031798483,-4.4101897275740684e-5,7.195593087373301e-8,0.003158263018098467,-4.421788006294162e-5,7.213822712040806e-8,0.003158309054218505,-4.440704337455989e-5,7.243594276621938e-8,0.0031584021289597524,-4.466069514352587e-5,7.283470938809992e-8,0.0031585679463628875,-4.495603322513259e-5,7.329786169090022e-8,0.003158821045759386,-4.5258255933040026e-5,7.37699600181512e-8,0.003159158924190263,-4.5526890236963015e-5,7.418696615489833e-8,0.0031595597943583466,-4.572549126524957e-5,7.44916678688917e-8,0.003159985788919604,-4.5832004494916494e-5,7.465002833083531e-8,0.003160391467505701,-4.5846244908167024e-5,7.466284408960723e-8,0.003160735390904223,-4.5791651761595475e-5,7.456824370500927e-8,0.003160991329864051,-4.5710340506587154e-5,7.443354724124745e-8,0.0031611557652805296,-4.56525958579643e-5,7.433840211999739e-8,0.0031612493653574466,-4.566356507695597e-5,7.43536688058528e-8,0.0031613116320375638,-4.577082683019708e-5,7.452191859422641e-8,0.00316138983687732,-4.5976704493927694e-5,7.484561016922063e-8,0.0031615255351170207,-4.625816721714404e-5,7.52873081576349e-8,0.00316174330606514,-4.6574539940815696e-5,7.578215147025375e-8,0.0031620456464795553,-4.687999059605023e-5,7.625769376845123e-8,0.003162415165519021,-4.713588347181678e-5,7.665335200741533e-8,0.003162822036835446,-4.731880660958561e-5,7.693289460631574e-8,0.0031632329785881486,-4.7422738256966696e-5,7.708762391075058e-8,0.0031636185498555743,-4.7456548574135615e-5,7.713222429686289e-8,0.003163957394531511,-4.743930170684533e-5,7.709723112409955e-8,0.003164237749092535,-4.7395460395258866e-5,7.702145770310557e-8,0.0031644572629982944,-4.735103026805132e-5,7.694598016390119e-8,0.0031646221440750945,-4.733077694987257e-5,7.690981863864776e-8,0.003164746262745098,-4.735610332844896e-5,7.694660644621445e-8,0.003164850315648308,-4.744295341822404e-5,7.708123668442743e-8,0.003164960615211108,-4.7599282087552986e-5,7.732580598792541e-8,0.00316510674443353,-4.7822150507262595e-5,7.767502077308712e-8,0.0031653173075884386,-4.809522158373371e-5,7.810233831505504e-8,0.003165613500816317,-4.8388234367153477e-5,7.855932068502407e-8,0.003166001527547761,-4.8660505245747866e-5,7.898136490858256e-8,0.0031664667240323473,-4.886967395690606e-5,7.930165483686465e-8,0.0031669732473650035,-4.898427913808119e-5,7.947106008168446e-8,0.0031674717018881997,-4.899555012818512e-5,7.94766938590658e-8,0.0031679131839261526,-4.892263568963575e-5,7.934999749978144e-8,0.0031682643359964833,-4.8808002238974886e-5,7.91591853553536e-8,0.0031685171259444567,-4.8704610129976645e-5,7.898863798646383e-8,0.003168689888016564,-4.866027347872532e-5,7.891391738685978e-8,0.0031688203554882553,-4.870497925930795e-5,7.898168134647224e-8,0.0031689541483683986,-4.884458925824059e-5,7.919995944645049e-8,0.003169132666912061,-4.90615415154104e-5,7.953967154409288e-8,0.0031693835370994743,-4.932123743816433e-5,7.994513150365482e-8,0.0031697155633991425,-4.958174182690445e-5,8.034963065946353e-8,0.0031701188096189092,-4.9803993111668386e-5,8.069160780662406e-8,0.0031705690690595756,-4.995993501816825e-5,8.092735112553882e-8,0.0031710349046023332,-5.003685841512912e-5,8.103761860361142e-8,0.003171484997353245,-5.003758483585365e-5,8.10276899103105e-8,0.0031718939250299756,-4.997743721292307e-5,8.092241368604767e-8,0.0031722454763997874,-4.98796363572316e-5,8.075886678430627e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json new file mode 100644 index 000000000..841a3deb4 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":21000,"numberOfSamples":1000,"samples":[0.0031725336341924394,-4.9770637985046546e-5,8.057900832626396e-8,0.0031727619720193665,-4.967631255249218e-5,8.042370582661394e-8,0.0031729423213677447,-4.961918610821703e-5,8.032842301827844e-8,0.003173093301004051,-4.9616439750269165e-5,8.032005503717977e-8,0.0031732388512125246,-4.9678142521825614e-5,8.04140915834666e-8,0.003173406461172115,-4.980531114277095e-5,8.061152056197695e-8,0.003173624434517486,-4.998780080363393e-5,8.089554409980637e-8,0.0031739174410596086,-5.02027153676187e-5,8.122921958837977e-8,0.0031743000569504428,-5.0414905317985565e-5,8.155645946622467e-8,0.0031747693572844707,-5.058170552271261e-5,8.1809696462639e-8,0.003175299754099858,-5.066328166614758e-5,8.192630588543693e-8,0.003175844728509721,-5.06368615606572e-5,8.187106223913913e-8,0.003176348378152092,-5.0508762136083794e-5,8.16550486069026e-8,0.0031767639923363524,-5.0316402748498936e-5,8.133866443459827e-8,0.0031770709661550177,-5.011689791600365e-5,8.101329428919594e-8,0.0031772811274633317,-4.9967147620633346e-5,8.076944687326912e-8,0.003177432030673561,-4.9905479367471625e-5,8.066745206192551e-8,0.003177572270523811,-4.994259580574966e-5,8.072317955227706e-8,0.003177746439699948,-5.0063033684474547e-5,8.091070950808379e-8,0.0031779848344744835,-5.0233470557248106e-5,8.117598151931799e-8,0.0031782992076989803,-5.0413262606724425e-5,8.145387798184555e-8,0.003178683508504494,-5.056397454491497e-5,8.168346678500409e-8,0.0031791178624765563,-5.0656360805938936e-5,8.181895509495128e-8,0.003179574229733301,-5.067436252240991e-5,8.183576329438713e-8,0.003180022490647086,-5.0616168724939576e-5,8.173192449420742e-8,0.0031804358927458322,-5.049270511433461e-5,8.152548156884965e-8,0.0031807950553075313,-5.0324297904340744e-5,8.124910490024964e-8,0.0031810901697997096,-5.013646650496189e-5,8.094342997127281e-8,0.003181321456190578,-4.995570801310683e-5,8.065043893174666e-8,0.0031814982527144423,-4.9805917795511555e-5,8.040785329190629e-8,0.0031816373210504898,-4.970574993088201e-5,8.024497887522197e-8,0.0031817608717426495,-4.9666782981278536e-5,8.017978161620004e-8,0.0031818944706078238,-4.969213348437762e-5,8.021665586604609e-8,0.003182064656150664,-4.977526990474911e-5,8.034455083019423e-8,0.0031822958582123618,-4.9899054210053294e-5,8.053555151866265e-8,0.0031826060765792474,-5.00355420814562e-5,8.074475516704612e-8,0.0031830011463665404,-5.014786026254351e-5,8.091345990457809e-8,0.0031834686693217383,-5.0195995982255704e-5,8.097846711663703e-8,0.0031839746468371897,-5.01475748419181e-5,8.088913626890179e-8,0.0031844673261262986,-4.999173257679851e-5,8.062922765445895e-8,0.003184891172592454,-4.974957666882377e-5,8.023331134917238e-8,0.0031852075073160895,-4.9472597723993216e-5,7.978406694492346e-8,0.0031854111053174357,-4.922574084934537e-5,7.938518959159813e-8,0.0031855320833315435,-4.9062718900561163e-5,7.912193983519057e-8,0.003185621952271365,-4.9007423813544054e-5,7.903149987919705e-8,0.003185733140730741,-4.905026352546958e-5,7.909733195325303e-8,0.003185903073154297,-4.915750209942922e-5,7.926446313102022e-8,0.0031861477150601954,-4.9285511618747645e-5,7.946261622724468e-8,0.0031864630412842053,-4.9393086955828754e-5,7.962606325736776e-8,0.0031868305582437354,-4.944910682330027e-5,7.970578335261417e-8,0.0031872237417380285,-4.9435815064372105e-5,7.967442526435043e-8,0.003187613799646374,-4.934910556784959e-5,7.952642648280632e-8,0.0031879743406409483,-4.919701658863508e-5,7.927535204629794e-8,0.0031882849181979036,-4.899707191619981e-5,7.894954072044581e-8,0.0031885333705692622,-4.8772886247731465e-5,7.85867133852273e-8,0.0031887169235430774,-4.8550472591157195e-5,7.82281831475899e-8,0.0031888421191353347,-4.8354611885566905e-5,7.791317453714298e-8,0.0031889236591736768,-4.820561826479776e-5,7.767373204135999e-8,0.003188982392912168,-4.811685191685343e-5,7.753076281390647e-8,0.0031890428229633568,-4.80931088914721e-5,7.749144001256398e-8,0.003189130371339149,-4.8129751866914776e-5,7.754779717892457e-8,0.0031892684093893045,-4.821248076042052e-5,7.767640704932689e-8,0.003189474936144377,-4.8317827589117846e-5,7.78393091488724e-8,0.003189758740824415,-4.841472688601514e-5,7.798671830001753e-8,0.0031901151496382964,-4.846801130205281e-5,7.806277470675716e-8,0.0031905224205677797,-4.844497532884705e-5,7.801604196463123e-8,0.003190941284990858,-4.8325353983456495e-5,7.781525298490396e-8,0.0031913210506145494,-4.811258839800113e-5,7.746697340533311e-8,0.0031916141519961177,-4.784055752540146e-5,7.702604990677442e-8,0.003191795418319783,-4.7568255887754585e-5,7.658695371946121e-8,0.0031918755740832448,-4.73600221174305e-5,7.625217949764229e-8,0.003191898603829455,-4.725988960279658e-5,7.609132297246147e-8,0.0031919229650166662,-4.7275184045738147e-5,7.611500607230232e-8,0.003191998333085281,-4.737827479416436e-5,7.62779363395227e-8,0.0031921508881996145,-4.752216804202383e-5,7.65041794434679e-8,0.003192381393929433,-4.765854984268982e-5,7.671628736820805e-8,0.0031926718219546014,-4.7750056416319196e-5,7.685497758163076e-8,0.003192994371773742,-4.7775167613736925e-5,7.688676322707986e-8,0.0031933191121518447,-4.7727892633397725e-5,7.680310882032987e-8,0.0031936191057208192,-4.761498877639121e-5,7.661565929511285e-8,0.0031938734231599622,-4.74525826505499e-5,7.635065824624502e-8,0.0031940688710230926,-4.7262880918771545e-5,7.60436847923047e-8,0.0031942008964133926,-4.707097737875328e-5,7.573466367930087e-8,0.0031942737606263116,-4.6901719035824056e-5,7.546299629687368e-8,0.003194299972841271,-4.6776661718682426e-5,7.526278957837741e-8,0.003194298887206334,-4.6711226468842323e-5,7.51583342891208e-8,0.003194294386829285,-4.671240074914931e-5,7.516039741374076e-8,0.0031943118407074603,-4.6777394668392805e-5,7.526403312546946e-8,0.0031943746893159835,-4.6893437644436546e-5,7.544826377873212e-8,0.0031945009495270385,-4.7038759907479775e-5,7.567773903852656e-8,0.0031946998830175675,-4.7184820903478814e-5,7.590646855791671e-8,0.0031949691011137634,-4.729986237129749e-5,7.608369607755573e-8,0.0031952925157211496,-4.735397448743149e-5,7.616211706606225e-8,0.003195640046002511,-4.7325873413935426e-5,7.610866131565764e-8,0.0031959707011487326,-4.721084275969199e-5,7.591694218179518e-8,0.0031962407678702612,-4.7027544120006907e-5,7.561778712416466e-8,0.0031964172220154555,-4.68193172139658e-5,7.528100427078354e-8,0.003196492459990767,-4.664522204584982e-5,7.500092425591764e-8,0.003196492024360513,-4.6560407478603466e-5,7.486507180241458e-8,0.0031964677331033607,-4.6593856889802264e-5,7.491877034751068e-8,0.003196477403032644,-4.673659702635629e-5,7.514654134177191e-8,0.0031965625176653793,-4.694773588519694e-5,7.548204705047288e-8,0.0031967362693748544,-4.717322873987367e-5,7.583837429474331e-8,0.003196985533609338,-4.73651776342118e-5,7.613905990916508e-8,0.0031972812138878572,-4.74929888958597e-5,7.633588427653374e-8,0.003197589462630078,-4.7545490933105095e-5,7.64119965822908e-8,0.0031978796496195555,-4.752757942989125e-5,7.637620017022061e-8,0.00319812848863574,-4.745512493931714e-5,7.625453549820702e-8,0.00319832144886984,-4.73503257355979e-5,7.608275219379998e-8,0.003198452856742482,-4.723812082730018e-5,7.590064580016247e-8,0.0031985255501511783,-4.7143356527051194e-5,7.57476813144896e-8,0.0031985502819583764,-4.708825806567633e-5,7.565908112945316e-8,0.003198544736531598,-4.708995351933302e-5,7.566191375034777e-8,0.0031985318797554075,-4.7158036203798245e-5,7.577116598009077e-8,0.0031985373474858482,-4.729251335254058e-5,7.598640463765804e-8,0.003198585869566576,-4.7482775567525455e-5,7.629010685976644e-8,0.003198697155597323,-4.77081476564717e-5,7.664860219081877e-8,0.0031988819238857836,-4.794029858008897e-5,7.701607636820799e-8,0.003199138852327985,-4.8147471043280815e-5,7.734153154992998e-8,0.003199453210956632,-4.830010600773658e-5,7.757794512375888e-8,0.003199797758983186,-4.8377126251611665e-5,7.769236057072432e-8,0.0032001363178023106,-4.8371976704389703e-5,7.767540881795748e-8,0.0032004303140051693,-4.829716076321788e-5,7.754825940028813e-8,0.0032006480922657813,-4.818534649742223e-5,7.736402060215561e-8,0.0032007754503471137,-4.8084736666072045e-5,7.720004750070717e-8,0.0032008237523528764,-4.804734673697885e-5,7.713910918442968e-8,0.0032008304786310298,-4.811209016681051e-5,7.724247975155619e-8,0.0032008488052868407,-4.828932206014769e-5,7.75255161602495e-8,0.0032009288771208118,-4.8555592301733185e-5,7.794960329169746e-8,0.0032010998408043487,-4.886272668875077e-5,7.843695977208304e-8,0.003201361960637265,-4.915635461273817e-5,7.89004476629134e-8,0.0032016912406135044,-4.939361188750261e-5,7.927192014721211e-8,0.0032020513707647475,-4.955240233850549e-5,7.951689650027676e-8,0.003202405716929175,-4.963141986809062e-5,7.963431614369855e-8,0.003202725094131901,-4.964474472975755e-5,7.96475824883057e-8,0.0032029909049170156,-4.961523348656123e-5,7.959378125967193e-8,0.0032031952157390927,-4.9569099471490336e-5,7.951497736532009e-8,0.003203339535741044,-4.9532218017991734e-5,7.945241230521701e-8,0.003203433394698867,-4.9527674213515084e-5,7.944273135170713e-8,0.003203493051170196,-4.9573859322178696e-5,7.951503476725994e-8,0.0032035401504446515,-4.968261143955701e-5,7.968790885396807e-8,0.003203599881864006,-4.9857248372708116e-5,7.996622623173358e-8,0.0032036981474841027,-5.009083623491609e-5,8.033833401588e-8,0.003203857560932273,-5.036549668524096e-5,8.077497791863144e-8,0.003204092697562571,-5.0653692877754714e-5,8.123148677107812e-8,0.003204405679190628,-5.092213317310819e-5,8.165420910353239e-8,0.0032047836194003913,-5.1138171334250516e-5,8.199093925766638e-8,0.0032051993388942314,-5.1277508026645685e-5,8.220333981594443e-8,0.0032056159214573134,-5.1331152612609345e-5,8.227803147217174e-8,0.003205994476325643,-5.130950962968257e-5,8.223291039616594e-8,0.0032063034747539243,-5.124205747668012e-5,8.211628608958799e-8,0.0032065274675029567,-5.117202959915313e-5,8.199800522314307e-8,0.0032066727907678195,-5.114661833837934e-5,8.195353656090792e-8,0.003206768020942503,-5.120449980278048e-5,8.204400434520673e-8,0.003206857735831905,-5.1363916576045276e-5,8.229736031489842e-8,0.0032069901253816147,-5.161569359479557e-5,8.269759795845019e-8,0.0032072020803685336,-5.192501441612641e-5,8.318797642795423e-8,0.0032075077397297554,-5.2242393867866604e-5,8.368882847285539e-8,0.0032078955532431,-5.251946367429561e-5,8.412289258504691e-8,0.0032083345384939406,-5.272262269658563e-5,8.443706503733802e-8,0.0032087857334492185,-5.2839458337762004e-5,8.461246000974382e-8,0.0032092132683576424,-5.287735806351859e-5,8.466190722367029e-8,0.003209591378752329,-5.285732676741347e-5,8.461980304623928e-8,0.0032099067777057117,-5.28068081968459e-5,8.45304822826286e-8,0.0032101578456377655,-5.275393921740916e-5,8.443903221733049e-8,0.0032103524731652163,-5.272386017376191e-5,8.438550073902889e-8,0.003210505786562472,-5.273660287213019e-5,8.440164096217491e-8,0.0032106382225371155,-5.280577247081059e-5,8.450886182259405e-8,0.0032107738321281018,-5.293736316606222e-5,8.471631689347386e-8,0.0032109383060951215,-5.312841217033488e-5,8.501870672494748e-8,0.0032111560978738906,-5.3365752533195204e-5,8.53942849508674e-8,0.0032114462795934918,-5.362571089155793e-5,8.580446840164302e-8,0.003211817437324192,-5.3875979778961625e-5,8.619700739786424e-8,0.003212262941595191,-5.408075100149098e-5,8.651439387397291e-8,0.0032127589082548043,-5.42090965214644e-5,8.670741201761251e-8,0.003213267160170133,-5.4244595572723914e-5,8.675057308886833e-8,0.0032137438024166646,-5.419248668805494e-5,8.665344939450431e-8,0.003214151231767454,-5.4080711291759844e-5,8.646208359285265e-8,0.0032144693035585834,-5.395352361443707e-5,8.624839037585663e-8,0.003214701461565474,-5.385958237500533e-5,8.609072790016972e-8,0.003214873783886847,-5.383864063516811e-5,8.605238679805011e-8,0.0032150276171485034,-5.391105610832501e-5,8.616487457733809e-8,0.003215208326315366,-5.4072889410851724e-5,8.642041535988369e-8,0.0032154533705997484,-5.429755486548332e-5,8.677506471248515e-8,0.0032157828754069747,-5.4543390211428154e-5,8.716123185097693e-8,0.0032161952720170784,-5.47649828140714e-5,8.750601063943785e-8,0.0032166691643119804,-5.492483570390711e-5,8.7749822276115e-8,0.003217170484883344,-5.500177601999277e-5,8.785966932376333e-8,0.0032176621369899984,-5.499386164298536e-5,8.783350388091249e-8,0.0032181127441866936,-5.491583634520034e-5,8.76958803060696e-8,0.003218502126948113,-5.479314994168618e-5,8.748819344576886e-8,0.0032188229483265337,-5.465521433334049e-5,8.72578166749344e-8,0.0032190794757014783,-5.452988429357098e-5,8.704931644272088e-8,0.0032192849457666393,-5.443991014971355e-5,8.689888287838887e-8,0.003219458734952503,-5.440110974291796e-5,8.683149639470852e-8,0.003219623918717538,-5.442154904813298e-5,8.685964506488469e-8,0.0032198052118412182,-5.45010330062948e-5,8.698248405259667e-8,0.0032200268668433098,-5.463053766414709e-5,8.718490554543236e-8,0.0032203099278025797,-5.479171920972871e-5,8.743680309860852e-8,0.0032206683696555803,-5.4957218224956276e-5,8.769370344416006e-8,0.003221104252445989,-5.509302127948437e-5,8.790074530833945e-8,0.0032216031987040658,-5.516423932315975e-5,8.800209652952139e-8,0.003222132914621037,-5.514457142603367e-5,8.795617458979574e-8,0.003222647901010924,-5.502711200558859e-5,8.775290593353369e-8,0.0032231013851103294,-5.483131338436564e-5,8.74247239172623e-8,0.003223460966712298,-5.4600702849415643e-5,8.704264763661174e-8,0.003223720696988658,-5.43901749473945e-5,8.66955543476372e-8,0.0032239032022557705,-5.4248004296358326e-5,8.646099319840247e-8,0.003224051050262102,-5.4200944786757004e-5,8.638114273675721e-8,0.003224212268778945,-5.424827912428962e-5,8.645345453958669e-8,0.0032244265358801734,-5.4365234327404105e-5,8.663660081008881e-8,0.003224716276502034,-5.451231450454134e-5,8.686597920410975e-8,0.003225083737911467,-5.4646403659949004e-5,8.707189019189658e-8,0.0032255131188312245,-5.473059972318432e-5,8.719538813836393e-8,0.0032259761006378034,-5.4741087113638165e-5,8.719911679190398e-8,0.0032264390598020325,-5.467034723233956e-5,8.707212789604444e-8,0.003226870334335864,-5.452668660564738e-5,8.682879510984012e-8,0.0032272460710804887,-5.4330699940323715e-5,8.65029138253738e-8,0.0032275536298945894,-5.4109915442819836e-5,8.613902532997006e-8,0.003227792304669776,-5.389313593906661e-5,8.5783374691673e-8,0.0032279718677233277,-5.370570458175747e-5,8.547642058179856e-8,0.003228109845550558,-5.356634066004432e-5,8.524786544988952e-8,0.003228228456413095,-5.348557339633553e-5,8.511420042723426e-8,0.0032283518197443535,-5.346531342893715e-5,8.507801310989298e-8,0.0032285035568127823,-5.349896832429377e-5,8.512814037196994e-8,0.003228704536722173,-5.357174984312455e-5,8.524016481482288e-8,0.0032289703539402797,-5.366119984972382e-5,8.537735462686527e-8,0.00322930813206437,-5.373842092470895e-5,8.549282323459017e-8,0.003229712689921856,-5.377103839587337e-5,8.553448506801853e-8,0.0032301631836865975,-5.3729107718665944e-5,8.545465152637074e-8,0.0032306227277087924,-5.359428799950994e-5,8.522472059019744e-8,0.0032310441986026,-5.337012969281068e-5,8.48515280839209e-8,0.0032313836582013745,-5.30879790841398e-5,8.438660592029636e-8,0.0032316176061930268,-5.280197806460897e-5,8.391790250084734e-8,0.0032317548261706127,-5.2571609399665335e-5,8.354146004605948e-8,0.0032318343808087915,-5.243934120871027e-5,8.332524114371036e-8,0.00323190997001867,-5.24157284474321e-5,8.328513968311465e-8,0.003232029903870015,-5.247922773889295e-5,8.33849749888785e-8,0.0032322230037252673,-5.2587959715898925e-5,8.355594128527012e-8,0.0032324945300250224,-5.269508974157829e-5,8.372185756843382e-8,0.0032328299476484103,-5.2761097382812485e-5,8.381914925073835e-8,0.0032332022647684135,-5.2760565068347416e-5,8.380767128683809e-8,0.0032335796804347913,-5.268412304439345e-5,8.367349551296979e-8,0.003233931955256522,-5.2537170491451925e-5,8.342645104170425e-8,0.00323423510297691,-5.2336755010051395e-5,8.309480474079313e-8,0.003234474406802793,-5.210743061617814e-5,8.271847665355266e-8,0.0032346457437325534,-5.187668488346703e-5,8.234172294838152e-8,0.003234755280902423,-5.167055575138879e-5,8.200621219761825e-8,0.003234817807050895,-5.150997501251897e-5,8.174527616602243e-8,0.00323485410132211,-5.140821394599531e-5,8.157988013641992e-8,0.0032348878601373273,-5.1369622605597356e-5,8.15166024002056e-8,0.003234942697918216,-5.138953284328997e-5,8.154743911983669e-8,0.00323503947037617,-5.1454958354580704e-5,8.16508993774942e-8,0.0032351938886941546,-5.154582187779148e-5,8.179401797604287e-8,0.0032354142832091816,-5.16366609641141e-5,8.193524012891515e-8,0.003235699333554656,-5.1699018157927345e-5,8.202847891428973e-8,0.0032360358332845078,-5.170513116825102e-5,8.202923924758582e-8,0.003236397395298634,-5.163367599192616e-5,8.190391001440081e-8,0.0032367460274376706,-5.147751296830587e-5,8.164208997353886e-8,0.003237038911014802,-5.125146075858404e-5,8.126881868503913e-8,0.0032372413519731985,-5.099546813545693e-5,8.084938120768122e-8,0.0032373424767896393,-5.076735769152771e-5,8.04773994266105e-8,0.003237364737593232,-5.0623575968753e-5,8.024369261604461e-8,0.0032373583817348877,-5.0595930934664296e-5,8.01987556722749e-8,0.0032373814263608053,-5.067835383782129e-5,8.033154293976049e-8,0.0032374767927001143,-5.0831888417986464e-5,8.05778502518239e-8,0.0032376595358681605,-5.100299476696643e-5,8.08503013355666e-8,0.0032379179830066707,-5.1142929781694154e-5,8.106998345596535e-8,0.0032382234578475634,-5.121949714913483e-5,8.118548183125027e-8,0.0032385413765336594,-5.1220034229706235e-5,8.117745244402647e-8,0.0032388396301233986,-5.1148784000511076e-5,8.105395968506553e-8,0.00323909343633175,-5.1022080757357263e-5,8.084232217504016e-8,0.003239287476598087,-5.086344596635564e-5,8.058099601387515e-8,0.003239416418574005,-5.06993062299847e-5,8.031267394281034e-8,0.0032394844711164405,-5.055531403368913e-5,8.007849327535253e-8,0.0032395041778899027,-5.0453203864372276e-5,7.991313554603084e-8,0.003239494528968082,-5.0408228290502986e-5,7.98408045445796e-8,0.0032394784475627734,-5.0427301336513986e-5,7.987225828658261e-8,0.003239479791896909,-5.050810067219918e-5,8.000332058699083e-8,0.0032395202194974377,-5.063931236648878e-5,8.021522493846629e-8,0.003239616293252338,-5.080193546123921e-5,8.047671952390412e-8,0.003239777049036872,-5.097147176821398e-5,8.074769163503124e-8,0.003240002171167665,-5.112088531384368e-5,8.098412232278307e-8,0.0032402808961741075,-5.122423243494423e-5,8.114415044682696e-8,0.0032405918090109447,-5.126100829262938e-5,8.119521335082708e-8,0.003240904131438615,-5.122133435508816e-5,8.112236888320618e-8,0.003241181684719136,-5.111146117220087e-5,8.093692711688671e-8,0.003241390622446391,-5.095766931217798e-5,8.068237971757372e-8,0.0032415106650658305,-5.080520775946731e-5,8.04323546602781e-8,0.003241546514068598,-5.070868740467566e-5,8.027494782684523e-8,0.0032415324844812794,-5.071373081832885e-5,8.028313812372978e-8,0.003241523709398545,-5.083705921425271e-5,8.048281634683229e-8,0.0032415751240446157,-5.1057319994444045e-5,8.083823631077988e-8,0.003241719537245258,-5.132391935969942e-5,8.126660197144499e-8,0.0032419576140943988,-5.157842278878715e-5,8.167296421774885e-8,0.0032422632301883753,-5.177516910115313e-5,8.198373070848606e-8,0.0032425973491017465,-5.189151237656024e-5,8.216316480911329e-8,0.003242921385633165,-5.192728220314501e-5,8.221219939811576e-8,0.003243205429064354,-5.1898436692860174e-5,8.215775773060924e-8,0.0032434313058024543,-5.182970678799692e-5,8.204054311489319e-8,0.0032435923938506023,-5.1748673330064326e-5,8.190536290404036e-8,0.0032436920809447035,-5.1681708633171465e-5,8.179466859600291e-8,0.0032437419250657485,-5.165123951677518e-5,8.17443236041018e-8,0.0032437597611700603,-5.167373948957442e-5,8.178051974505204e-8,0.0032437676397874047,-5.1758154968282606e-5,8.191729901686929e-8,0.003243789408658554,-5.190473825027876e-5,8.215464440259327e-8,0.0032438478099100776,-5.2104555505873134e-5,8.247762756783664e-8,0.0032439612563935362,-5.234009583257239e-5,8.28573715553115e-8,0.0032441407595725984,-5.258721229750601e-5,8.325425050664329e-8,0.0032443875424479525,-5.281834024054875e-5,8.36232428780749e-8,0.0032446918276209393,-5.300675228469284e-5,8.392100559929466e-8,0.0032450332255609038,-5.3131371114476176e-5,8.411381289746435e-8,0.00324538295404514,-5.318148371486626e-5,8.418520437848297e-8,0.003245707983573782,-5.316071079859441e-5,8.414223757206918e-8,0.0032459772192329835,-5.3089364431137183e-5,8.401896535485175e-8,0.0032461694781570896,-5.300370532228837e-5,8.387484551908885e-8,0.003246281847351533,-5.2950284714670026e-5,8.37853066862844e-8,0.0032463352544695014,-5.297443793121066e-5,8.382308719834454e-8,0.0032463728424833803,-5.310479309421307e-5,8.403337508404443e-8,0.003246448216996769,-5.333992759564566e-5,8.441256609303461e-8,0.0032466062921121183,-5.364552457477591e-5,8.49040114435253e-8,0.0032468659901151594,-5.396605828032138e-5,8.541718992475005e-8,0.003247214553528512,-5.424562065011762e-5,8.586156956307863e-8,0.003247615679936334,-5.444642162568678e-5,8.617657458590432e-8,0.003248024912597425,-5.455655514944839e-5,8.634399975468773e-8,0.003248403432332568,-5.458687626580262e-5,8.638262859372707e-8,0.0032487255353343303,-5.4562352771310106e-5,8.633386467620277e-8,0.00324898008935198,-5.451326661190067e-5,8.624724859115626e-8,0.0032491685238771285,-5.4468896133598934e-5,8.617020704301661e-8,0.0032493017385686698,-5.44538837415368e-5,8.614231992982142e-8,0.0032493972235823195,-5.448639212370825e-5,8.619253072529561e-8,0.0032494766715691,-5.4577106999117414e-5,8.633766110669544e-8,0.003249563821635595,-5.4728537878472483e-5,8.658130339795376e-8,0.0032496821379050258,-5.4934496846960336e-5,8.691293350608795e-8,0.0032498520196944476,-5.5180047124981716e-5,8.730779131766455e-8,0.0032500875683692987,-5.544249647615775e-5,8.772852392629017e-8,0.0032503934051933206,-5.569395062737085e-5,8.812944569042736e-8,0.0032507623946056432,-5.5905572624570456e-5,8.846361811302392e-8,0.0032511752416808635,-5.60531534073218e-5,8.869203900002466e-8,0.0032516027189509527,-5.6122949655416366e-5,8.879316740083876e-8,0.003252010653866079,-5.6116271961945236e-5,8.87702629117698e-8,0.0032523669850277413,-5.605136928982403e-5,8.865417136694602e-8,0.0032526495630223616,-5.596163996267052e-5,8.850004846746351e-8,0.003252852996146235,-5.588978132512746e-5,8.837752315420322e-8,0.0032529925562878982,-5.58782471815996e-5,8.83550511189378e-8,0.003253103082055259,-5.595758026448335e-5,8.848108953757554e-8,0.0032532314776745693,-5.613576384150119e-5,8.876716640678854e-8,0.0032534234568621025,-5.6393001850667115e-5,8.917985280515563e-8,0.0032537084871765787,-5.668575826548498e-5,8.964767779069584e-8,0.0032540894242032077,-5.696017640428366e-5,9.008307761306017e-8,0.00325454214619616,-5.716962075359378e-5,9.041084937999461e-8,0.0032550252674333844,-5.728830620990315e-5,9.059011621990187e-8,0.003255494511827089,-5.731556283163272e-5,9.06209904156305e-8,0.003255914883576044,-5.7271048375594106e-5,9.0536487245569e-8,0.003256266746644497,-5.71854418674298e-5,9.03871423788393e-8,0.003256546050101389,-5.709145577327869e-5,9.022629331978918e-8,0.003256761198809244,-5.701770488175832e-5,9.010018411835402e-8,0.0032569290319573213,-5.6985589687069876e-5,9.004308407198988e-8,0.0032570712782715805,-5.700820517414628e-5,9.007569729439265e-8,0.003257211829634789,-5.709019855395602e-5,9.02050273070369e-8,0.003257374555642879,-5.722785472994945e-5,9.042451477474267e-8,0.0032575811280771455,-5.740918789972536e-5,9.07141464433097e-8,0.0032578484112563417,-5.761434937787547e-5,9.104111671626653e-8,0.003258185352705804,-5.781702102123823e-5,9.136217618930464e-8,0.0032585898547709312,-5.7987501554828986e-5,9.162880083070914e-8,0.003259046711760422,-5.8097856157750106e-5,9.179571951463989e-8,0.0032595281106661137,-5.812865707175766e-5,9.183195308320635e-8,0.003259997899742414,-5.807559874358659e-5,9.173151942039728e-8,0.003260419534272522,-5.7953377600878414e-5,9.151954278320197e-8,0.003260765818064894,-5.7794560130481856e-5,9.125009531413922e-8,0.0032610273094332534,-5.7642803315349266e-5,9.099481763997835e-8,0.0032612163205118245,-5.754195090058938e-5,9.082492438170712e-8,0.0032613648222029144,-5.752416949150301e-5,9.07918667306029e-8,0.0032615165714595593,-5.7600716096652344e-5,9.09125486368035e-8,0.003261715522120589,-5.7758163232549566e-5,9.116362370356967e-8,0.003261993680028687,-5.796146329096944e-5,9.148694570509478e-8,0.0032623620293660872,-5.8163394938097374e-5,9.180524978805767e-8,0.003262807665272582,-5.8317766793719975e-5,9.20437012761951e-8,0.0032632983134054426,-5.839199548958222e-5,9.215020451540345e-8,0.0032637924706452283,-5.8374669624859956e-5,9.210741718701442e-8,0.0032642511156409566,-5.827592207902026e-5,9.193302480930112e-8,0.0032646467560847373,-5.8121634092867766e-5,9.167002565308534e-8,0.003264967464613854,-5.794476140729533e-5,9.137245205768258e-8,0.0032652161360441057,-5.777729029325265e-5,9.109227604970783e-8,0.0032654068966987506,-5.764485386744147e-5,9.087078295628466e-8,0.003265560763456718,-5.756421591411039e-5,9.073466938213295e-8,0.0032657018358711034,-5.754278131830879e-5,9.069539608026732e-8,0.0032658544101094944,-5.757911789189286e-5,9.075008999633211e-8,0.0032660408074434333,-5.766372839766714e-5,9.088277448331733e-8,0.003266279396647697,-5.777976701135738e-5,9.106550153542938e-8,0.003266582301739539,-5.790395532285883e-5,9.12598753635655e-8,0.0032669526451217174,-5.80083795326496e-5,9.142009964322477e-8,0.003267381767555401,-5.8063972041273024e-5,9.149881185930952e-8,0.0032678476163183977,-5.804619770493952e-5,9.145646309337639e-8,0.003268316164476314,-5.79424713012002e-5,9.12733988533491e-8,0.0032687475221006164,-5.7759070899220414e-5,9.096097972973574e-8,0.003269106529960257,-5.7523825509117984e-5,9.056570793575683e-8,0.0032693746058921917,-5.7281393394498796e-5,9.01612217244734e-8,0.0032695575700859222,-5.7081169177186004e-5,8.982829299441299e-8,0.003269685200835826,-5.696205583363011e-5,8.962983858648573e-8,0.003269802214385346,-5.69404396125155e-5,8.959138558936853e-8,0.0032699545344188102,-5.700604476264368e-5,8.969464615227079e-8,0.0032701763009091883,-5.7126338282034846e-5,8.988518777066455e-8,0.003270481677542585,-5.725676162404585e-5,9.008956185060092e-8,0.0032708629470038705,-5.735286992395743e-5,9.023531943545998e-8,0.00327129431081459,-5.73809369580062e-5,9.026823726629858e-8,0.003271739599354458,-5.7324683909892404e-5,9.0162995318363e-8,0.0032721614993477402,-5.7187059246788255e-5,8.992569167509696e-8,0.0032725298445275717,-5.698731841848309e-5,8.958873870059514e-8,0.0032728270521627735,-5.675482647236528e-5,8.920055536744774e-8,0.003273049851570274,-5.652171851946322e-5,8.881356947561132e-8,0.0032732076970815966,-5.6316492523811355e-5,8.847388481842329e-8,0.003273319145670565,-5.615979289425225e-5,8.821459453534936e-8,0.0032734076545255755,-5.6062581528121386e-5,8.80529729256984e-8,0.003273497839452653,-5.602614665502433e-5,8.799058220459504e-8,0.003273612612866018,-5.604313201827532e-5,8.801494830994981e-8,0.0032737710867281598,-5.609888691693807e-5,8.81017115844299e-8,0.0032739868282610452,-5.617282175496241e-5,8.821681580619211e-8,0.0032742660365082388,-5.6239927611709573e-5,8.831905491514963e-8,0.003274605453936708,-5.627300819139812e-5,8.836386764965425e-8,0.0032749903608651097,-5.624637481283029e-5,8.830953041101465e-8,0.0032753938061936853,-5.614154823740327e-5,8.812653176627841e-8,0.0032757789936782864,-5.595449360495289e-5,8.78092919463083e-8,0.003276106647287594,-5.5701960526054305e-5,8.738628367074491e-8,0.0032763471421135533,-5.5422576587764e-5,8.692152997987455e-8,0.003276493258995722,-5.516877259292599e-5,8.650115186701256e-8,0.0032765664014518425,-5.499014654352684e-5,8.6206007430559e-8,0.003276610999942624,-5.491529491512299e-5,8.608196484440229e-8,0.00327667876464851,-5.494164014254628e-5,8.612345199946136e-8,0.0032768108494707626,-5.5038149965003114e-5,8.627829358674474e-8,0.0032770262708863127,-5.5157998227194705e-5,8.646888984364038e-8,0.0032773198064892668,-5.525387498988542e-5,8.661760852501955e-8,0.003277667339223204,-5.528988528837087e-5,8.666631731922832e-8,0.0032780346135977243,-5.5247658906088445e-5,8.658614562003795e-8,0.0032783860663120725,-5.512713483912658e-5,8.637835326428021e-8,0.0032786918994025917,-5.494363190933129e-5,8.606912261480339e-8,0.0032789327276445193,-5.472280951801439e-5,8.570104945011115e-8,0.003279101674465376,-5.449476059083265e-5,8.532342409842275e-8,0.0032792040453030104,-5.4288301754132294e-5,8.498301212375031e-8,0.0032792550494914192,-5.4126402494692005e-5,8.471678473867611e-8,0.00327927635003745,-5.402331015253779e-5,8.454741469132955e-8,0.003279292261048445,-5.398344931011103e-5,8.448159405887646e-8,0.0032793262697919023,-5.4001841681931624e-5,8.451073771217038e-8,0.0032793983038223334,-5.406554644950239e-5,8.461328637466328e-8,0.003279522775013503,-5.4155543035676e-5,8.475773055077884e-8,0.0032797071337421773,-5.4248736184423704e-5,8.490590178054932e-8,0.0032799506498463736,-5.432014534373688e-5,8.501666483516674e-8,0.003280243299674806,-5.434560660615751e-5,8.505051210231342e-8,0.003280565004985942,-5.430549748269372e-5,8.497579494488648e-8,0.003280886168989561,-5.4189871664097075e-5,8.47771184438119e-8,0.003281171139090372,-5.4004474659509736e-5,8.446499011144445e-8,0.003281386101154559,-5.377533480404946e-5,8.408301336304262e-8,0.0032815110470657827,-5.354778435894943e-5,8.370597725390225e-8,0.003281551525320081,-5.3376005048922325e-5,8.342256462979238e-8,0.0032815423544261006,-5.3303997698127796e-5,8.330417977081286e-8,0.0032815375199139597,-5.334662167257096e-5,8.337402779899631e-8,0.003281589425999078,-5.3482477388724635e-5,8.359571772677401e-8,0.003281729077837722,-5.366347603158219e-5,8.388931201996357e-8,0.0032819577992785165,-5.383448660629819e-5,8.416390530143764e-8,0.003282252028816867,-5.3951461208844274e-5,8.434755805679241e-8,0.003282575064733863,-5.399087527054447e-5,8.440270284958065e-8,0.0032828888308288045,-5.395041499415586e-5,8.432692167156779e-8,0.0032831620823933123,-5.384442525035143e-5,8.414501783308623e-8,0.003283374577592845,-5.369758720472906e-5,8.389827797025655e-8,0.0032835182149421297,-5.3538900495709054e-5,8.363445972132653e-8,0.003283596317507677,-5.3396677990892325e-5,8.339967143688218e-8,0.0032836217594359217,-5.3294597136367996e-5,8.323212142857587e-8,0.0032836142689651616,-5.3248868881598726e-5,8.31577096068053e-8,0.0032835972456282487,-5.326663219322064e-5,8.318754756177193e-8,0.003283594445314077,-5.33455619881586e-5,8.331735797629278e-8,0.003283626858166137,-5.34746355750414e-5,8.35286872417797e-8,0.0032837101355881193,-5.363590835227975e-5,8.379175121758466e-8,0.0032838527983820075,-5.3806929427041975e-5,8.406937560267436e-8,0.003284055181100754,-5.396343946274494e-5,8.432148778286718e-8,0.0032843089773761463,-5.40822511951771e-5,8.450998775388706e-8,0.003284597358913076,-5.414438100313206e-5,8.460404446842303e-8,0.003284895834787221,-5.413857912979374e-5,8.458595257932233e-8,0.003285174445296768,-5.406532947278778e-5,8.445757818292492e-8,0.0032854023338345904,-5.3940697089698616e-5,8.424636958756322e-8,0.0032855554831677934,-5.379806390910282e-5,8.400782714837921e-8,0.003285626815766494,-5.3684562539693467e-5,8.38193737194727e-8,0.0032856347701112503,-5.3649414340871245e-5,8.376117760633833e-8,0.0032856235616832005,-5.3725485877918647e-5,8.38860837426238e-8,0.003285650142636974,-5.391249164401037e-5,8.419236027689752e-8,0.0032857616382241683,-5.4173556173630084e-5,8.461836300416228e-8,0.003285976011289329,-5.444965808100916e-5,8.50665090145353e-8,0.003286277545198635,-5.468347961861177e-5,8.544264341871019e-8,0.0032866275363075573,-5.483838580460321e-5,8.568728752895917e-8,0.0032869809330381304,-5.490461627338049e-5,8.578565026164803e-8,0.0032872996339806037,-5.489474335285152e-5,8.575977711296552e-8,0.003287559053510933,-5.48347345844862e-5,8.565341922089876e-8,0.0032877491677817746,-5.475543920672599e-5,8.551775502054806e-8,0.0032878725457978937,-5.4686451467669074e-5,8.540127833973602e-8,0.0032879413934742783,-5.465235422268597e-5,8.534381381044643e-8,0.003287974597188788,-5.4670536130827427e-5,8.53731992403231e-8,0.003287994886136215,-5.474993658443841e-5,8.550343585455102e-8,0.003288026004617243,-5.489052942074253e-5,8.573393033814724e-8,0.0032880898877680324,-5.508355309891816e-5,8.604985500404462e-8,0.003288203921857211,-5.5312587539400495e-5,8.642385409484243e-8,0.0032883785505384453,-5.5555608027442216E-05,8.681938148259401e-8,0.0032886156357365445,-5.578790705412445e-5,8.719554080619211e-8,0.0032889078436774757,-5.5985521987479445e-5,8.751283667062376e-8,0.003289239125545009,-5.612881998939157e-5,8.77392146012537e-8,0.003289586318797038,-5.620594849831879e-5,8.78558281449679e-8,0.0032899218910641607,-5.621585137160659e-5,8.786195042061433e-8,0.0032902179191576634,-5.617054021271309e-5,8.77784760736655e-8,0.0032904515278464005,-5.609599525829377e-5,8.764903319639631e-8,0.003290611690989794,-5.603034994237022e-5,8.753663675600585e-8,0.0032907060886177963,-5.601757230920074e-5,8.751312401969255e-8,0.0032907648315062244,-5.60957001758165e-5,8.763993271030684e-8,0.00329083651219213,-5.628175714456582e-5,8.794367269940098e-8,0.003290973902945432,-5.656023599277606e-5,8.839762192953688e-8,0.003291213321631433,-5.6884077700507716e-5,8.892363541663668e-8,0.003291558763057707,-5.7191191598862794e-5,8.941943124269481e-8,0.0032919809643103797,-5.742839856654776e-5,8.979798297636507e-8,0.0032924313677109907,-5.756902600419823e-5,9.001640079964623e-8,0.0032928611324823196,-5.7616237434723784e-5,9.008120657162066e-8,0.003293234884122227,-5.759476981903807e-5,9.003437623650073e-8,0.003293535602904595,-5.753893290328132e-5,8.993321103832823e-8,0.003293762927268325,-5.7482792094576774e-5,8.983397854989548e-8,0.003293928650397064,-5.745439610101603e-5,8.978246898705095e-8,0.003294052074754002,-5.7473344437337244e-5,8.981023130920463e-8,0.003294156313027807,-5.755021904012821e-5,8.993390698836747e-8,0.0032942654733313977,-5.768674160814335e-5,9.01556607176256e-8,0.0032944022662521263,-5.787621616364838e-5,9.046394738638393e-8,0.003294585697181951,-5.810428412374258e-5,9.083470767938509e-8,0.003294828730883638,-5.835025192829971e-5,9.123350329312376e-8,0.0032951361110117538,-5.858935210068161e-5,9.161924961334033e-8,0.003295502862145243,-5.879608733804884e-5,9.194981099819587e-8,0.0032959140922813155,-5.894836427269165e-5,9.218894166181916e-8,0.003296346501630117,-5.903178845858687e-5,9.2313465377073e-8,0.0032967716942378903,-5.904330752969372e-5,9.231927451156279e-8,0.003297161013652729,-5.8993325195830865e-5,9.222465017716898e-8,0.0032974912528637187,-5.8905595820280855e-5,9.206977518622295e-8,0.0032977504065195102,-5.881449638135142e-5,9.191186754025751e-8,0.003297942473857903,-5.875940209359208e-5,9.181563871498607e-8,0.0032980898714052753,-5.877616173854993e-5,9.183921908280787e-8,0.0032982314957932714,-5.88866346272826e-5,9.201718962789459e-8,0.0032984146833885644,-5.908904162486795e-5,9.23451566292984e-8,0.0032986812779857745,-5.935379884542151e-5,9.277334751463147e-8,0.003299051997951586,-5.962945134656554e-5,9.321663709787946e-8,0.003299516827886728,-5.985901363351853e-5,9.358146928311346e-8,0.0033000378122319263,-5.999998453310655e-5,9.379868554416737e-8,0.003300563468977945,-6.003775679601342e-5,9.384541959529023e-8,0.003301046759699778,-5.9986342425414024e-5,9.374604054768167e-8,0.0033014576765286454,-5.987863396959832e-5,9.355579500500295e-8,0.003301786809054379,-5.975339670750789e-5,9.33390980278829e-8,0.0033020419823445663,-5.964508164161518e-5,9.315264867329e-8,0.0033022421362587082,-5.9578548895871055e-5,9.303685979764736e-8,0.003302411561432909,-5.9567748630520254e-5,9.301394192772079e-8,0.0033025757102160976,-5.961647141519134e-5,9.308938092423752e-8,0.003302758454813665,-5.971971311326604e-5,9.32543085753427e-8,0.003302980149123383,-5.986499809573707e-5,9.348767984635991e-8,0.0033032558966772426,-6.003362496588928e-5,9.375826851834662e-8,0.003303593705146403,-6.0202192353766145e-5,9.402715772445558e-8,0.0033039926166897105,-6.034495084095433e-5,9.425167222522078e-8,0.003304441386900897,-6.043737478577002e-5,9.439138689843304e-8,0.003304918618617791,-6.046082993353868e-5,9.441594479608006e-8,0.0033053952081656575,-6.040751190609572e-5,9.431324511412548e-8,0.0033058394190006372,-6.028418972979809e-5,9.409552551950787e-8,0.0033062239072710452,-6.011307792870043e-5,9.380056022170947e-8,0.0033065329819612454,-5.99287475949815e-5,9.348622559924204e-8,0.003306767914704313,-5.977122717532698e-5,9.321879190076651e-8,0.003306948486177933,-5.9676703637333575e-5,9.305741226162379e-8,0.0033071098761496675,-5.966803032891732e-5,9.303855751819586e-8,0.003307295078633383,-5.974750722150152e-5,9.316446634613662e-8,0.003307544114132092,-5.9894223093106617E-05,9.339925812123948e-8,0.0033078824817017226,-6.006764076265878e-5,9.367527554290179e-8,0.003308312428674662,-6.021771715946743e-5,9.390997219756039e-8,0.003308810868846452,-6.02993136284251e-5,9.402960860305769e-8,0.003309335890088662,-6.028585030600706e-5,9.39915224159716e-8,0.003309839846317023,-6.017646168426142e-5,9.379561381316522e-8,0.003310283495942255,-5.999380790271972e-5,9.348042402784567e-8,0.0033106453888089448,-5.977450811021991e-5,9.310709708273535e-8,0.0033109239015205183,-5.955734946844783e-5,9.273979011758474e-8,0.003311133299984977,-5.937407692846487e-5,9.243051520461885e-8,0.0033112972340637236,-5.924481776115903e-5,9.221178385233012e-8,0.0033114426199441147,-5.917750316763905e-5,9.209590179549796e-8,0.0033115952609545363,-5.9169497804775444e-5,9.207784107991695e-8,0.003311777204723194,-5.920987375766593e-5,9.213904652853273e-8,0.0033120052080999,-5.92814938356559e-5,9.225082851606375e-8,0.003312289594904694,-5.936274846059623e-5,9.237717028262174e-8,0.003312633024578902,-5.942929679557276e-5,9.247760893901174e-8,0.003313029137070735,-5.945642637260442e-5,9.251122688928723e-8,0.0033134615879803833,-5.942257807852542e-5,9.244260873645003e-8,0.0033139044987459776,-5.931413137224047e-5,9.22498336783901e-8,0.0033143255654085853,-5.913063940039792e-5,9.193309185903323e-8,0.003314692523404364,-5.888852657791199e-5,9.152061902109267e-8,0.003314982071759978,-5.862063074863608e-5,9.106765658072329e-8,0.0033151883441194956,-5.836990960235362e-5,9.064573525743296e-8,0.003315327061036844,-5.817820907612507e-5,9.032387007253822e-8,0.003315432756404787,-5.807381239007963e-5,9.014792415786519e-8,0.003315549502730872,-5.80625870862475e-5,9.012617527068651e-8,0.0033157184572218204,-5.8126053541180765e-5,9.022654455023874e-8,0.003315966551858763,-5.8226689676969886e-5,9.038585941639497e-8,0.0033162996332138915,-5.831825523870404e-5,9.052728727571216e-8,0.0033167015288640424,-5.835787971070538e-5,9.058041563143791e-8,0.0033171388754599613,-5.8316694902620264e-5,9.049864230177064e-8,0.003317570199537387,-5.818631498100734e-5,9.026951683504713e-8,0.0033179566224040904,-5.7979533462259516e-5,8.99154851350754e-8,0.0033182710352989515,-5.772533753434543e-5,8.94853309482593e-8,0.003318503156852944,-5.746022504077495e-5,8.903967082003617e-8,0.003318659520612165,-5.721893166409305e-5,8.863565691424088e-8,0.0033187593907932924,-5.7027409664830245e-5,8.831554830627552e-8,0.0033188288152567313,-5.6899447070337116e-5,8.810136402150192e-8,0.0033188949683195744,-5.683663868685322e-5,8.799503967854189e-8,0.0033189820031886176,-5.683044444173091e-5,8.79819251290983e-8,0.0033191086079180677,-5.686498657172212e-5,8.80353851458633e-8,0.0033192868090701146,-5.6919687627007744e-5,8.812108202417043e-8,0.0033195213608058194,-5.6971468212093134e-5,8.820056393045532e-8,0.003319809205334997,-5.6996756676009524e-5,8.823463939940167e-8,0.0033201388682853913,-5.6973850769248384e-5,8.818741927408212e-8,0.0033204901645404743,-5.688617916715095e-5,8.803185327819643e-8,0.0033208351653437364,-5.672667481568836e-5,8.775700668157399e-8,0.0033211417606726764,-5.650258196722333e-5,8.737589343481958e-8,0.0033213807589085697,-5.623860290952227e-5,8.693042466255639e-8,0.003321535704580842,-5.5975194089382036e-5,8.64882803546673e-8,0.003321611779853912,-5.575964063734652e-5,8.612788421461543e-8,0.0033216383488875716,-5.563121550563371e-5,8.591372038897917e-8,0.00332166160133251,-5.560648771923718e-5,8.587208299016034e-8,0.003321729332346463,-5.567246407025703e-5,8.597999999454416e-8,0.0033218749696411454,-5.5791288194139026e-5,8.617344710132884e-8,0.003322108078793622,-5.591357362818337e-5,8.636987047930183e-8,0.003322414074917141,-5.599359775464645e-5,8.649361999558831e-8,0.0033227610657908736,-5.600062818328033e-5,8.649468343439781e-8,0.0033231098129842453,-5.592409172339057e-5,8.635693899550423e-8,0.003323423401229845,-5.577304858807897e-5,8.60968278743868e-8,0.0033236746106560327,-5.5571625019046895e-5,8.57553706414179e-8,0.0033238501378285963,-5.535223551652658e-5,8.538670353148495e-8,0.003323951512978097,-5.5148243821503265e-5,8.504591708672522e-8,0.0033239930515267515,-5.4987516475655016e-5,8.477855814651931e-8,0.003323997693098464,-5.4888022929405465e-5,8.461360179444422e-8,0.0033239919654675055,-5.485601986581888e-5,8.456067453943338e-8,0.0033240012834951657,-5.4886614374086276e-5,8.461111130656435e-8,0.00332404640453801,-5.496599005265156e-5,8.474164448132102e-8,0.003324141328817078,-5.507438956499113e-5,8.491926542726227e-8,0.003324292421254159,-5.5189074106772154e-5,8.510604823670503e-8,0.0033244982624229583,-5.528690636714247e-5,8.526342573891019e-8,0.0033247498139609742,-5.534665974060568e-5,8.5356116539381e-8,0.003325030738318475,-5.535139742517621e-5,8.535622814349039e-8,0.003325318078773487,-5.529132808874682e-5,8.524810407518335e-8,0.0033255840434287193,-5.516732559483926e-5,8.503412127897562e-8,0.003325800025884042,-5.4994500283684165e-5,8.474038755337137e-8,0.003325943636647162,-5.4803921202816106e-5,8.441925947919739e-8,0.003326007954119694,-5.463949661780294e-5,8.414386557641033e-8,0.0033260093929748016,-5.454751850488496e-5,8.39906316797749e-8,0.0033259881913321188,-5.4560143825206843e-5,8.401195873056964e-8,0.0033259972865628765,-5.4680122236649234e-5,8.421112518435034e-8,0.003326082679984568,-5.4876669269890736e-5,8.453576539427439e-8,0.0033262656698723574,-5.509660108184346e-5,8.489670021080734e-8,0.0033265367421952,-5.528454025680654e-5,8.520177547374201e-8,0.0033268625692368203,-5.540089651290604e-5,8.53858406600953e-8,0.0033271997836301316,-5.5430263445104554e-5,8.542454745717457e-8,0.00332750801243725,-5.538020410605459e-5,8.533193941439912e-8,0.0033277582273325535,-5.527451512296222e-5,8.514878834424156e-8,0.0033279360985943923,-5.514504454421498e-5,8.492865234127454e-8,0.0033280417206101223,-5.502443713341801e-5,8.47257264967664e-8,0.0033280872119350394,-5.494062573953781e-5,8.458583816329359e-8,0.0033280931856418602,-5.4913121909954754e-5,8.454056432249686e-8,0.003328084687829209,-5.49510529651956e-5,8.460424445406648e-8,0.003328087119786794,-5.505287514330795e-5,8.477367296994299e-8,0.003328122619004344,-5.520754438276987e-5,8.503008040542494e-8,0.0033282072794208633,-5.539681605654844e-5,8.534289014342119e-8,0.0033283494784650124,-5.559823205385741e-5,8.567459021016955e-8,0.0033285493241682613,-5.5788247308437714e-5,8.5985886311372e-8,0.0033287989546007955,-5.594511202878772e-5,8.624053969095568e-8,0.0033290834152926,-5.605145404558202e-5,8.640978601385084e-8,0.0033293820025522038,-5.609665354800625e-5,8.647641681844645e-8,0.00332967012765513,-5.607914249037254e-5,8.64386360154981e-8,0.003329922108265471,-5.600868372770514e-5,8.63137014691309e-8,0.003330115618151409,-5.590807269377462e-5,8.614043768918587e-8,0.0033302381328333365,-5.58126677029861e-5,8.597808953775239e-8,0.0033302943335076583,-5.5765475825965935e-5,8.589791861426393e-8,0.0033303112431023363,-5.580611329656748e-5,8.596488539474054e-8,0.003330335893358347,-5.595512706192685e-5,8.621187561535514e-8,0.0033304217950196257,-5.620076748901601e-5,8.661809726569148e-8,0.0033306077541668403,-5.649824615334275e-5,8.710815973363818e-8,0.003330900673735715,-5.678551821777345e-5,8.757850948338549e-8,0.0033312733708816735,-5.7007580014031255e-5,8.793794593475561e-8,0.003331677827847687,-5.713506396332166e-5,8.81385544183494e-8,0.0033320641462310304,-5.7168762976044525e-5,8.818303689777447e-8,0.003332394888741356,-5.713232454494835e-5,8.81121521924967e-8,0.003332650948899174,-5.706056072566515e-5,8.79848172366316e-8,0.0033328307387244707,-5.69892054818512e-5,8.786079588531413e-8,0.003332946103134148,-5.6948270940260595e-5,8.7789662082767e-8,0.003333017524013881,-5.695869565914077e-5,8.780546633003202e-8,0.003333069785980845,-5.7031151550971855e-5,8.79250644837299e-8,0.003333128293176569,-5.7166122827538784e-5,8.814848616597651e-8,0.003333215942814037,-5.735486447701515e-5,8.846062555209589e-8,0.003333350526081416,-5.758107712399529e-5,8.883400189972032e-8,0.003333542711568079,-5.782323256543382e-5,8.923255045240708e-8,0.0033337948024626724,-5.805748921759443e-5,8.961641831353482e-8,0.0033341004955474854,-5.826092281925177e-5,8.994735848331943e-8,0.0033344456574180216,-5.8414663420069585e-5,9.019404254409442e-8,0.0033348099763535065,-5.850667539814434e-5,9.033680470762473e-8,0.0033351693972139954,-5.8534013007029704e-5,9.037145788055351e-8,0.0033354992652454255,-5.850435337312846e-5,9.031176994724097e-8,0.003335778150817505,-5.8436628216984924e-5,9.019026948162117e-8,0.0033359924676545083,-5.836033415719681e-5,9.005674088553579e-8,0.003336141696475799,-5.831247259530645e-5,8.99728131408324e-8,0.003336242937122228,-5.833081796090152e-5,9.000064726389226e-8,0.003336332072852576,-5.844314497737879e-5,9.018519988192054e-8,0.003336457993721301,-5.8654611621949015e-5,9.053364701309959e-8,0.003336668034416213,-5.8939341334053395e-5,9.100181248328803e-8,0.0033369886308538366,-5.9243988034202145e-5,9.15003563787348e-8,0.0033374117211466396,-5.950577741976175e-5,9.192485569877443e-8,0.0033378966406314506,-5.9676814334938345e-5,9.219623025373824e-8,0.003338387060585492,-5.974061238822445e-5,9.228818050131115e-8,0.003338832161640395,-5.9712769824558396e-5,9.222809662066525e-8,0.003339200660884803,-5.9629238348668325e-5,9.207713490030904e-8,0.0033394839946629365,-5.9531508527586526e-5,9.19051435138701e-8,0.00333969194933606,-5.9455615021928336e-5,9.177216062406416e-8,0.0033398456958361393,-5.9426735296063406e-5,9.171952556625893e-8,0.0033399714625476887,-5.94580076063395e-5,9.176821138029921e-8,0.0033400959454044452,-5.9551503177061825e-5,9.19207583444299e-8,0.003340243216604815,-5.969991931487511e-5,9.21642828744451e-8,0.003340432528612182,-5.988845372977386e-5,9.247363390315894e-8,0.00334067661964073,-6.009682747560091e-5,9.281470236403697e-8,0.003340980391006287,-6.0301603901974886e-5,9.314821825194654e-8,0.0033413400860247433,-6.047899922745841e-5,9.34344253905957e-8,0.0033417433406987395,-6.0608161718892285e-5,9.363861218700703e-8,0.0033421704338331562,-6.0674530868574566e-5,9.373681434940468e-8,0.003342596793867571,-6.067274472862805e-5,9.372073186756808e-8,0.003342996619504433,-6.060857747387037e-5,9.360092417739725e-8,0.0033433472973181913,-6.049938316515723e-5,9.340736779360886e-8,0.003343634076313921,-6.037265637678459e-5,9.318674843140178e-8,0.003343854352958671,-6.026253039672385e-5,9.29962869527095e-8,0.0033440207974379525,-6.02040503597778e-5,9.289398103642671e-8,0.00334416209570793,-6.0225227664861864e-5,9.292540486542561e-8,0.0033443195738953684,-6.033783862182839e-5,9.310869759814082e-8,0.0033445382535737425,-6.052967926745262e-5,9.342213643036966e-8,0.0033448528768625176,-6.076271261213488e-5,9.380146725962548e-8,0.0033452733341006566,-6.098129519580642e-5,9.415379750598335e-8,0.0033457773304763423,-6.11302103754188e-5,9.43875995339562e-8,0.003346316441695281,-6.117498982465232e-5,9.444642575943193e-8,0.0033468338086486238,-6.111354333006799e-5,9.432810795018451e-8,0.0033472838692474196,-6.097324927755117e-5,9.4079645301939e-8,0.0033476441985163447,-6.0797240704200516e-5,9.377398884436344e-8,0.0033479163084475117,-6.062888070521747e-5,9.348385258171712e-8,0.003348119017326552,-6.050124738963157e-5,9.326410433273226e-8,0.0033482798563691583,-6.043317112036643e-5,9.314535120928058e-8,0.0033484280459571253,-6.0429873261064216e-5,9.313533471622201e-8,0.0033485900303240564,-6.0485597297215256e-5,9.322360188274091e-8,0.0033487870427821647,-6.058650061285441e-5,9.338645264051759e-8,0.003349033779148276,-6.071317745669125e-5,9.359112405668456e-8,0.003349337512154647,-6.084287930407258e-5,9.379941019517652e-8,0.0033496973868342426,-6.0951778738148076e-5,9.39713912066027e-8,0.0033501040189214903,-6.1017654657638296e-5,9.406994902831682e-8,0.003350539852327468,-6.102313701204754e-5,9.406628005534092e-8,0.0033509808424563464,-6.0959184102096446e-5,9.394579478956938e-8,0.0033513997985662727,-6.0828035243102085e-5,9.371305998195274e-8,0.003351771242630648,-6.064464806465786e-5,9.339407682046672e-8,0.0033520770502697586,-6.043567280060645e-5,9.303431185934628e-8,0.0033523115992083793,-6.023549059632611e-5,9.269175686275925e-8,0.0033524849538567095,-6.0079656147178764e-5,9.242570667708549e-8,0.003352622868607595,-5.999683644913714e-5,9.228321247007672e-8,0.0033527629108964156,-6.0000858451751614e-5,9.228598308330152e-8,0.0033529466888537886,-6.0084899028015664e-5,9.242109352946563e-8,0.003353209163212818,-6.0220101719581925e-5,9.263915942649568e-8,0.003353567452423346,-6.036056292024498e-5,9.286301996208644e-8,0.003354013074553909,-6.045506176241125e-5,9.300742375322236e-8,0.003354511938151932,-6.0462793179074204e-5,9.300515855826013e-8,0.003355013937094379,-6.036701837740332e-5,9.282957547814603e-8,0.0033554690078815767,-6.018006277425595e-5,9.250263119120252e-8,0.0033558424476254254,-5.9937221757790955e-5,9.208440293612802e-8,0.0033561228412348943,-5.9683282240027307e-5,9.165030735952862e-8,0.003356320744440452,-5.9458664926667036e-5,9.126781835699132e-8,0.003356461215846782,-5.929059997108527e-5,9.09818074709203e-8,0.0033565749791113304,-5.919060979973586e-5,9.081060603989335e-8,0.0033566915189816907,-5.915640839670276e-5,9.07494897969949e-8,0.0033568350305881473,-5.91755770416691e-5,9.077702401431161e-8,0.003357022613830941,-5.9229226963443656e-5,9.086121990946202e-8,0.003357263701159578,-5.929496452229679e-5,9.096440629587108e-8,0.003357559911226247,-5.934921839576949e-5,9.104702421945221e-8,0.0033579049385909485,-5.9369383956175455e-5,9.1071192375381e-8,0.0033582845835001054,-5.9336313704812116e-5,9.100494733703145e-8,0.00335867744667257,-5.923739982099832e-5,9.082751861971475e-8,0.003359057001605932,-5.906997363720898e-5,9.053508695821385e-8,0.003359395616398978,-5.884413276926084e-5,9.014546329210125e-8,0.003359670484111321,-5.858354614172143e-5,8.96992412648217e-8,0.003359870306372325,-5.83227294745991e-5,8.925494292974744e-8,0.003360000476205311,-5.8100244081356475e-5,8.887733886137964e-8,0.0033600842939887445,-5.794905158876692e-5,8.862112733910623e-8,0.0033601588394004405,-5.7886876867381644e-5,8.851484939281549e-8,0.0033602660797591934,-5.790993390908707e-5,8.85506789176601e-8,0.003360441674025316,-5.799244505104898e-5,8.868407215376571e-8,0.003360704848971143,-5.809247460735285e-5,8.884397868653839e-8,0.003361052408555661,-5.8162610399993446e-5,8.895098477449679e-8,0.0033614587985430038,-5.816263041067814e-5,8.893850581578914e-8,0.003361882595100984,-5.807055435201572e-5,8.877103313526498e-8,0.0033622778382321966,-5.788851232418176e-5,8.845357733079992e-8,0.003362606646946412,-5.764123357960088e-5,8.802875740347297e-8,0.003362848722009863,-5.736772166360094e-5,8.756257923304475e-8,0.003363004624307182,-5.710951428610873e-5,8.712465566458204e-8,0.0033630925651310676,-5.690004657624532e-5,8.677046271557997e-8,0.0033631411170110623,-5.6758424875231495e-5,8.653114040510852e-8,0.003363181256001812,-5.668835779717318e-5,8.641199419472419e-8,0.0033632402740149748,-5.6680785627308535e-5,8.639713164955336e-8,0.0033633383786634027,-5.67180183840242e-5,8.64564805526587e-8,0.0033634874868962595,-5.6777755378881375e-5,8.65524655651299e-8,0.0033636912810481303,-5.683628445550697e-5,8.66452477529796e-8,0.003363945718484768,-5.687086249094485e-5,8.669663650025481e-8,0.0033642395389277832,-5.686171426360383e-5,8.667346696354637e-8,0.0033645548029027344,-5.6794222114151424e-5,8.655138743646585e-8,0.0033648679728196743,-5.6661634264931834e-5,8.631952160889124e-8,0.003365152316192434,-5.646808727765676e-5,8.598556119531746e-8,0.0033653823440695273,-5.6231009443925796e-5,8.557966538825618e-8,0.003365540348867742,-5.598115619209057e-5,8.515425825459867e-8,0.0033656236291926926,-5.5758262063050816e-5,8.477643543829795e-8,0.003365649237974656,-5.5601580627967396e-5,8.451187493962213e-8,0.003365652653538818,-5.5537505781072915e-5,8.440402629396734e-8,0.0033656789459104476,-5.5569291146105796e-5,8.445703766415184e-8,0.003365769023611574,-5.5674099565599833e-5,8.463116901817921e-8,0.003365946605285959,-5.580935658495085e-5,8.485389455646114e-8,0.003366211262409989,-5.592573091926771e-5,8.504204720695987e-8,0.0033665395943343838,-5.598132333980049e-5,8.512577176624952e-8,0.003366892961472996,-5.59521898282755e-5,8.506604596898847e-8,0.003367228357217615,-5.583677491599288e-5,8.486175343471328e-8,0.0033675090217883843,-5.565418314517531e-5,8.454632832083293e-8,0.0033677122812087027,-5.543770395775392e-5,8.417651191158752e-8,0.0033678331653782018,-5.522579913828783e-5,8.381704806824443e-8,0.0033678834944036373,-5.50530389308712e-5,8.352552276592036e-8,0.0033678872697589877,-5.494321345418341e-5,8.334103225252462e-8,0.003367874119813055,-5.490600237086945e-5,8.327889130742978e-8,0.0033678728417263332,-5.493731937946403e-5,8.333146207894089e-8,0.003367906582298691,-5.50223028120182e-5,8.347329601819736e-8,0.003367990240931756,-5.5139459330814e-5,8.36680693328067e-8,0.003368129820921837,-5.5264706650024884e-5,8.387526013174893e-8,0.0033683230141878383,-5.53746278372721e-5,8.405550425907457e-8,0.0033685602874602904,-5.544884667401181e-5,8.417455801548991e-8,0.0033688260245799536,-5.5471875403664845e-5,8.420648096017351e-8,0.0033690996964164,-5.54349217648513e-5,8.41368044105891e-8,0.0033693574390171246,-5.533796983745346e-5,8.396611154911362e-8,0.003369574738556079,-5.51920190230235e-5,8.371373979967595e-8,0.0033697309471166486,-5.502062543221554e-5,8.342014676700197e-8,0.0033698157191195807,-5.4858963662490004e-5,8.314502135403152e-8,0.00336983588693757,-5.4748211466438515e-5,8.295758836096101e-8,0.003369819180796456,-5.472435396786891e-5,8.291770942984493e-8,0.0033698103447281362,-5.4804144817696605e-5,8.305241791698605e-8,0.0033698580327925177,-5.497509215486744e-5,8.333937840761425e-8,0.00336999704671909,-5.519660736781785e-5,8.370918090270701e-8,0.003370235023755808,-5.541355414664154e-5,8.406846696487325e-8,0.0033705505910493,-5.557548077177791e-5,8.43325066766928e-8,0.0033709027002781183,-5.565191209448797e-5,8.445094442884492e-8,0.0033712449573918956,-5.563811944371171e-5,8.441726573141519e-8,0.0033715383281370122,-5.5551947479558465e-5,8.426301455023264e-8,0.0033717588003342688,-5.5425603682988634e-5,8.404350744757277e-8,0.0033718997534319347,-5.529628730757146e-5,8.382176259040501e-8,0.0033719703516509663,-5.519808521396885e-5,8.365483265879684e-8,0.0033719915125817105,-5.515616301581334e-5,8.358424368986457e-8,0.003371990670460589,-5.5183508520810655e-5,8.363084262341449e-8,0.003371996312094328,-5.5280222125438397e-5,8.37938999603007e-8,0.0033720332014755966,-5.543506986883743e-5,8.405389123547616e-8,0.0033721189855487107,-5.56286157858378e-5,8.437778720791833e-8,0.003372262458821144,-5.5837078683713314e-5,8.472545698884107e-8,0.0033724633940253805,-5.603614789623234e-5,8.505597653427594e-8,0.003372713546608454,-5.620417709122976e-5,8.533294234846123e-8,0.0033729982668022603,-5.632452546423462e-5,8.552844070193068e-8,0.00337329829570848,-5.6387235045065904e-5,8.562597120345452e-8,0.003373591662554191,-5.639037939243083e-5,8.56228158420924e-8,0.0033738558827816345,-5.634128823507716e-5,8.553209949381927e-8,0.0033740709065428706,-5.625757728164715e-5,8.538435984518772e-8,0.0033742233614416587,-5.6167318041165296e-5,8.522753464272809e-8,0.0033743120850930324,-5.6106839883563096e-5,8.512295286558207e-8,0.0033743535182657845,-5.6114284681771475e-5,8.51343302306435e-8,0.003374383584560917,-5.621816091412462e-5,8.530860378052354e-8,0.003374451653711905,-5.642363033026548e-5,8.565316246357324e-8,0.003374604874548048,-5.670392651341919e-5,8.612176775673318e-8,0.003374868363272367,-5.700515151316815e-5,8.662290807184912e-8,0.0033752327666612806,-5.726543902108981e-5,8.705223569982031e-8,0.003375657734454065,-5.743861941957818e-5,8.733251492462779e-8,0.00337608883276525,-5.7508964679654286e-5,8.743842547911098e-8,0.0033764770314720334,-5.749109053497066e-5,8.739613430904317e-8,0.003376791288154108,-5.741928432963936e-5,8.726484516431357e-8,0.003377021873463669,-5.733428391425587e-5,8.711405749206888e-8,0.003377177244553692,-5.727289468373037e-5,8.700584615729924e-8,0.0033772782065038614,-5.7261975296652276e-5,8.698482352101486e-8,0.003377351897211726,-5.731608876134401e-5,8.707450164078988e-8,0.0033774266600864046,-5.743750053577925e-5,8.727765185706965e-8,0.0033775279397840904,-5.761758344607225e-5,8.757892428997106e-8,0.0033776751676794963,-5.783921764291742e-5,8.794897670651642e-8,0.0033778797227997696,-5.807988352583364e-5,8.834963725304223e-8,0.0033781440270615184,-5.831509017006301e-5,8.873957895692964e-8,0.0033784617768650477,-5.8521803894550365e-5,8.908001953560924e-8,0.003378819238634322,-5.868149381761238e-5,8.933984781642511e-8,0.003379197323670683,-5.8782439093002966e-5,8.949957584080041e-8,0.003379574066231394,-5.882122050843463e-5,8.955393397490966e-8,0.003379927308581292,-5.880351542948081e-5,8.951323372093641e-8,0.0033802375736910525,-5.8744255904977356e-5,8.940353066295135e-8,0.003380491220639322,-5.86670851430349e-5,8.92654614473728e-8,0.003380684061250688,-5.8602724717853605e-5,8.915117457299559e-8,0.003380825238790617,-5.8585283278155506e-5,8.911787039413452e-8,0.0033809400725077258,-5.8645366370736766e-5,8.921617853680288e-8,0.0033810692089788217,-5.8799874204040243e-5,8.947323513780382e-8,0.003381260821250198,-5.904106722336901e-5,8.987469296042821e-8,0.0033815547925915685,-5.933123263112307e-5,9.0356110182332e-8,0.003381964109575867,-5.961028832185029e-5,9.081592148861166e-8,0.0033824647851254143,-5.981713959083937e-5,9.1151422106769e-8,0.003383003169851391,-5.9914358833980524e-5,9.130033548932249e-8,0.0033835175357943767,-5.9901254032734106e-5,9.126278647579509e-8,0.0033839605590798446,-5.980890433849116e-5,9.10926902260356e-8,0.00338431099616989,-5.968366488858203e-5,9.086948355865654e-8,0.0033845727837585357,-5.9570442762593056e-5,9.066948346775116e-8,0.0033847670858004075,-5.950243521857609e-5,9.05484296124944e-8,0.0033849232362922243,-5.9497727807565615e-5,9.053594275132374e-8,0.0033850716583332255,-5.956024397003957e-5,9.063751388399143e-8,0.0033852393421935963,-5.9682490187505253e-5,9.083949487511646e-8,0.0033854472176725985,-5.984859127500225e-5,9.111441080009529e-8,0.0033857086133339863,-6.003720459463659e-5,9.142588647628522e-8,0.0033860284271986017,-6.022439650227471e-5,9.173340583043047e-8,0.003386402955846923,-6.038656005091193e-5,9.199713865518988e-8,0.003386820462731965,-6.0503374088305864e-5,9.218289744117541e-8,0.003387262658810295,-6.05606230682693e-5,9.226693315388558e-8,0.0033877071395750856,-6.0552452997181255e-5,9.223981379163578e-8,0.0033881305330445235,-6.048266726105932e-5,9.210864890465263e-8,0.0033885120041810286,-6.036487174837796e-5,9.189727295160823e-8,0.003388836782278121,-6.022136221100909e-5,9.164417689053099e-8,0.003389099364723984,-6.008071140194549e-5,9.139814912203612e-8,0.003389306087909998,-5.9974056769629564e-5,9.121173103792565e-8,0.0033894766507592314,-5.992991778520634e-5,9.113234376727132e-8,0.0033896436217253243,-5.9967392439029444e-5,9.119094033650632e-8,0.003389848331184142,-6.00884494472235e-5,9.138938243016609e-8,0.003390131696696725,-6.027176738671097e-5,9.169052134537972e-8,0.003390520408645742,-6.0472489173007385e-5,9.20181223124543e-8,0.003391013048776062,-6.0632291852483944e-5,9.227391611926006e-8,0.003391574685345615,-6.069936708195099e-5,9.237117323434914e-8,0.0033921465752053356,-6.0649508463182645e-5,9.227013011226155e-8,0.003392668019375996,-6.049561955058757e-5,9.199390213601754e-8,0.003393098109249708,-6.027985582758634e-5,9.161498325294656e-8,0.003393425788317697,-6.005472021645174e-5,9.12229510324662e-8,0.00339366621882231,-5.986502345047448e-5,9.089367784604274e-8,0.003393849764889761,-5.973824800765525e-5,9.067301795341194e-8,0.0033940108887349028,-5.9683418753718195e-5,9.057517474706375e-8,0.0033941806177451347,-5.969475502631139e-5,9.058927390461232e-8,0.0033943828082887316,-5.9756555264083074e-5,9.068792616803152e-8,0.0033946329021984417,-5.984744069403636e-5,9.083450585144963e-8,0.003394937808251754,-5.994358255246006e-5,9.098854172687638e-8,0.003395296161910116,-6.002127117598997e-5,9.110993548500498e-8,0.003395698804414143,-6.0059267214638514e-5,9.116285658288206e-8,0.0033961296425301405,-6.004122350292775e-5,9.111984405853812e-8,0.0033965672449549665,-5.995817702591761e-5,9.096608893871411e-8,0.0033969875056327195,-5.9810681332088226e-5,9.070310529653611e-8,0.0033973673472186662,-5.960989551896998e-5,9.035055940505286e-8,0.0033976890073721226,-5.937702862808381e-5,8.994519524467432e-8,0.00339794414966279,-5.914078600227383e-5,8.953626954603158e-8,0.00339813686265762,-5.893285864413488e-5,8.91776383701858e-8,0.0033982846760873316,-5.8782022201718587e-5,8.891757350029357e-8,0.0033984170426695744,-5.8707756459061303e-5,8.878796990728907e-8,0.0033985710041651773,-5.8714419523522015e-5,8.879474808736464e-8,0.003398783964213327,-5.8787308590801815e-5,8.891163690828701e-8,0.003399084097724401,-5.889244323337396e-5,8.908026373626042e-8,0.003399480270250761,-5.898203293481756e-5,8.921967011645284e-8,0.0033999551699554283,-5.900646431000797e-5,8.924656326463904e-8,0.003400466358786225,-5.893049216975236e-5,8.91024588459512e-8,0.003400957801068039,-5.8747104648884236e-5,8.877683281588798e-8,0.003401378527359106,-5.848118000125292e-5,8.831304298309702e-8,0.0034016995373273343,-5.817987411373497e-5,8.779181892187154e-8,0.0034019205448226966,-5.789489120259509e-5,8.730103063936285e-8,0.0034020649231812825,-5.7666180030203005e-5,8.690798801868969e-8,0.003402168049287801,-5.751375176227864e-5,8.664571506488682e-8,0.003402265858276145,-5.743804869788241e-5,8.651389470980682e-8,0.00340238747932283,-5.742519852330234e-5,8.64881096032888e-8,0.0034025522455255973,-5.7453234933997976e-5,8.653057385184077e-8,0.0034027695489980392,-5.7497130460310654e-5,8.659865614011625e-8,0.003403039886903058,-5.753221388492227e-5,8.665054230622828e-8,0.0034033560870460524,-5.753644074444263e-5,8.664895352331391e-8,0.0034037044047870047,-5.7492186034072585e-5,8.656414307834132e-8,0.003404065680014834,-5.738807359108861e-5,8.637705347880114e-8,0.0034044170305128105,-5.722099116240365e-5,8.60828262613509e-8,0.003404734597935735,-5.6997926909140374e-5,8.569395943787588e-8,0.003404997558905359,-5.6736793275923886e-5,8.524163215191012e-8,0.0034051929890715296,-5.646520876211743e-5,8.477344074418974e-8,0.003405320408160798,-5.621648018227168e-5,8.434631513995815e-8,0.003405394300451476,-5.6022900264124296e-5,8.40149123124777e-8,0.0034054430646795236,-5.590772696450894e-5,8.381791884209707e-8,0.0034055038606741876,-5.587815564824331e-5,8.376626228374444e-8,0.0034056142384550816,-5.59216390476811e-5,8.383721738396868e-8,0.003405802567121793,-5.600706841995555e-5,8.397686437719106e-8,0.003406079762115114,-5.609104831024885e-5,8.411111539414267e-8,0.0034064347003346877,-5.6128202268790945e-5,8.416335082003054e-8,0.0034068351738956544,-5.6083285215666045e-5,8.407483916197228e-8,0.003407235151776666,-5.594181500695267e-5,8.382243623901492e-8,0.0034075871596243503,-5.5715353849958e-5,8.342714398589868e-8,0.0034078560389337632,-5.543856994368361e-5,8.294878555047174e-8,0.0034080288015259303,-5.5158405656903775e-5,8.246741739171249e-8,0.003408116556022004,-5.491960304745137e-5,8.20587213493105e-8,0.0034081483496585887,-5.475262430635319e-5,8.17736335484883e-8,0.0034081606287834965,-5.466819510979342e-5,8.162935251217643e-8,0.003408187213574958,-5.465879991060622e-5,8.161218884734959e-8,0.0034082529479952245,-5.470438823302094e-5,8.168747464274309e-8,0.0034083714747449156,-5.477893708194855e-5,8.181075694408507e-8,0.0034085458513296286,-5.4855751000708015e-5,8.193669718795236e-8,0.003408770414545297,-5.4910925975911326e-5,8.202480039048432e-8,0.003409032781106392,-5.4925363401297566e-5,8.204274072682829e-8,0.0034093155318804143,-5.488606600123461e-5,8.196858076576507e-8,0.0034095977133735593,-5.478735913882586e-5,8.179294852554372e-8,0.0034098566636729913,-5.463228818846857e-5,8.1521508229844755E-08,0.003410070752139286,-5.443391476149148e-5,8.117715796819658e-8,0.0034102233957102024,-5.4215684339399623e-5,8.0800505879973e-8,0.003410308068531649,-5.400958289018258e-5,8.044648266424068e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json new file mode 100644 index 000000000..5a65685cc --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":22000,"numberOfSamples":1000,"samples":[0.003410332914201753,-5.3850894022675106e-5,8.017517098961131e-8,0.003410322528879365,-5.376958194615e-5,8.003701237438996e-8,0.0034103145652221627,-5.3780481135696216e-5,8.005617875605212e-8,0.0034103506775372276,-5.3876274061593275e-5,8.021888857849169e-8,0.003410464307410866,-5.402707135418975e-5,8.047308167596654e-8,0.003410669971601388,-5.4187778507499705e-5,8.074133887896081e-8,0.003410958362427396,-5.431078402439631e-5,8.094271511350002e-8,0.0034112988966924413,-5.435925986441926e-5,8.101538020005893e-8,0.0034116483046836123,-5.431671386401488e-5,8.093263501288651e-8,0.0034119621492173344,-5.41904204198061e-5,8.070834304160092e-8,0.0034122059256284677,-5.400841636122217e-5,8.039138838903804e-8,0.0034123629141804617,-5.38113276447821e-5,8.005145827068325e-8,0.003412436926427523,-5.3641509849942013e-5,7.976047048128742e-8,0.0034124495366027988,-5.3532666321671336e-5,7.957504010808949e-8,0.0034124330661485227,-5.350283981451321e-5,7.952484351765614e-8,0.0034124218722404974,-5.3552370565715433e-5,7.960947036368768e-8,0.0034124447457084236,-5.3666539079328896e-5,7.980316491937519e-8,0.0034125202858526367,-5.382106091332426e-5,8.00642647210325e-8,0.0034126555868305777,-5.398815305369993e-5,8.034545908014444e-8,0.0034128473776592204,-5.414152490629849e-5,8.06021342297411e-8,0.0034130843642180496,-5.425966542015235e-5,8.079783644736344e-8,0.0034133497512128354,-5.4327618445658844e-5,8.090725685897239e-8,0.003413623435855102,-5.4337869912637006e-5,8.091781018622006e-8,0.003413883907454681,-5.429097539492461e-5,8.083081580105819e-8,0.0034141102665403125,-5.419622361028624e-5,8.066268207707981e-8,0.0034142849136512055,-5.407215162017978e-5,8.044570051432896e-8,0.00341439730488426,-5.394617096384391e-5,8.022718223765307e-8,0.003414448551881033,-5.385201336379878e-5,8.006482802604857e-8,0.0034144554442633347,-5.382365677022172e-5,8.001619006311863e-8,0.003414451133210198,-5.388562472720168e-5,8.012215438343905e-8,0.0034144795115925615,-5.4042269894100845e-5,8.038890648236031e-8,0.003414582717752921,-5.427144088560471e-5,8.077748959286917e-8,0.0034147858366957128,-5.452785635760065e-5,8.120990068433355e-8,0.003415086335408109,-5.475685197042185e-5,8.159276299340531e-8,0.0034154541675420077,-5.491264135361651e-5,8.184854560101504e-8,0.003415842328369328,-5.497241133679643e-5,8.19395012048398e-8,0.0034162020648540446,-5.494079694397467e-5,8.187500799224558e-8,0.0034164960597480513,-5.484509224563486e-5,8.170297816008171e-8,0.003416705855690934,-5.472520370648011e-5,8.14923147861858e-8,0.0034168331491478627,-5.462263220717812e-5,8.131389578844407e-8,0.003416896425673255,-5.457135459703978e-5,8.122506662590603e-8,0.003416924864737033,-5.459196701501527e-5,8.125992201462119e-8,0.0034169512624180483,-5.468942093895768e-5,8.142580537893595e-8,0.0034170054267853647,-5.485407812356393e-5,8.17054100824689e-8,0.0034171092005408077,-5.506533196508355e-5,8.206310391954363e-8,0.0034172737893538854,-5.529662285957986e-5,8.24534661992994e-8,0.0034174994368857004,-5.552057481406241e-5,8.282992315001632e-8,0.0034177769459542693,-5.5713266654435735e-5,8.315188937008223e-8,0.0034180902481047706,-5.58571185539423e-5,8.338960767448971e-8,0.0034184192209990544,-5.594239734507513e-5,8.352672714006698e-8,0.0034187422744122974,-5.5967759795049916e-5,8.356130894842189e-8,0.0034190386613258106,-5.5940313585960716e-5,8.350600300356605e-8,0.0034192907451060053,-5.5875438829459745e-5,8.338772029482915e-8,0.0034194865853197334,-5.5796286755981725e-5,8.324661178228372e-8,0.0034196231618546383,-5.573239332743332e-5,8.313343416160889e-8,0.0034197100026956712,-5.571629566234729e-5,8.310353167794132e-8,0.0034197718373557965,-5.5777017730924494e-5,8.320565011677361e-8,0.0034198476546487924,-5.593045265235306e-5,8.346570742357244e-8,0.0034199832418701356,-5.6169307155583144e-5,8.387000547866622e-8,0.0034202166393619616,-5.64584557493018e-5,8.435767926960611e-8,0.0034205614639800535,-5.67418663020452e-5,8.483274082655738e-8,0.003420997727034218,-5.696140593963007e-5,8.51962311929662e-8,0.0034214773558268368,-5.707879301142648e-5,8.538365211417604e-8,0.0034219421419332224,-5.708851047552745e-5,8.538688805157197e-8,0.0034223438059788605,-5.701585691614104e-5,8.525060072019697e-8,0.0034226564954146083,-5.690413699843295e-5,8.504993386503595e-8,0.003422878920363075,-5.679944106094893e-5,8.486413227000239e-8,0.0034230291674335464,-5.6739176541925223e-5,8.475681081074442e-8,0.003423136660697731,-5.6746178962097036e-5,8.476606168603778e-8,0.0034232343831674863,-5.682746769406769e-5,8.490269488349289e-8,0.0034233527024106186,-5.697594757338996e-5,8.515352124084064e-8,0.003423515048462373,-5.717372366496969e-5,8.548725451920484e-8,0.003423735360724929,-5.739623453008071e-5,8.586162778920173e-8,0.0034240171921175824,-5.761661689063496e-5,8.623076555625632e-8,0.003424354282394761,-5.7809781532945634e-5,8.655200921001188e-8,0.003424732337212298,-5.795580012171021e-5,8.679159414405439e-8,0.0034251316600929604,-5.804228112995662e-5,8.692867283680107e-8,0.0034255301389273553,-5.8065571370678764e-5,8.695739993818016e-8,0.0034259061435299876,-5.8030942708281336e-5,8.68873016976559e-8,0.003426241192945239,-5.7952061490074354e-5,8.674237096252997e-8,0.003426522442310002,-5.784987818084441e-5,8.655906513984539e-8,0.0034267450710929025,-5.775090698206635e-5,8.638314938058331e-8,0.0034269146613510586,-5.768461436478088e-5,8.626498016672915e-8,0.0034270492888037753,-5.7679206341423455e-5,8.625215296635437e-8,0.0034271801115048016,-5.775513150463932e-5,8.637847340111039e-8,0.003427348318837799,-5.791673040416302e-5,8.66500111928406e-8,0.003427596290732135,-5.814466196255829e-5,8.703260278195282e-8,0.0034279529627239238,-5.8394327194921334e-5,8.744949479355945e-8,0.003428418470586544,-5.860576263431353e-5,8.77983298726461e-8,0.00342895785967562,-5.872474275422114e-5,8.79870966366347e-8,0.0034295111225311516,-5.872520138069127e-5,8.797231646130829e-8,0.0034300159367414112,-5.8619276575255356e-5,8.777608739665868e-8,0.003430429936364875,-5.8449346719175054e-5,8.747221956219683e-8,0.0034307409539403753,-5.8269005362368705e-5,8.715330218992734e-8,0.0034309636874953423,-5.812488879415304e-5,8.689927969838687e-8,0.0034311290547955646,-5.804651663753494e-5,8.676002574361577e-8,0.0034312730856115364,-5.804431513186724e-5,8.675224016919222e-8,0.003431428842749821,-5.811258599710215e-5,8.686495556850346e-8,0.003431621833748501,-5.823424073945281e-5,8.706799112634763e-8,0.0034318679871170456,-5.838549788451625e-5,8.732014432177786e-8,0.0034321731793053077,-5.854001187955921e-5,8.757621999925782e-8,0.0034325337535511193,-5.8672442465983527E-05,8.779300375802679e-8,0.0034329377969641297,-5.876149483775846e-5,8.79343338304245e-8,0.0034333670820067457,-5.8792422402358875e-5,8.7975316488367e-8,0.0034337996533433854,-5.875886549720411e-5,8.790547650809066e-8,0.0034342129023982814,-5.8663743295375374e-5,8.773032040338553e-8,0.0034345867528595554,-5.8519040728693963E-05,8.747098149349937e-8,0.00343490662495616,-5.834457618854895e-5,8.716204139286165e-8,0.003435165997133961,-5.816584043444344e-5,8.684766473704805e-8,0.003435368377604481,-5.8010940498476064e-5,8.657614158669101e-8,0.003435528469312809,-5.79066894188021e-5,8.639300030976978e-8,0.0034356721817477088,-5.787374966119817e-5,8.633265875065238e-8,0.0034358346431882215,-5.7920805816179714e-5,8.640865043476558e-8,0.00343605489737805,-5.8038637339463834e-5,8.660388209222903e-8,0.0034363663675272185,-5.8196543664505935e-5,8.686495377469283e-8,0.003436784132872785,-5.834498191690136e-5,8.710692888866458e-8,0.003437293776835478,-5.8427735873480615e-5,8.72341254787051e-8,0.0034378497110881335,-5.8402092841660325e-5,8.717442687949159e-8,0.0034383882973978448,-5.8257765502926945e-5,8.691145603639477e-8,0.003438851408713721,-5.802240303565348e-5,8.649384664598423e-8,0.0034392073380863355,-5.774932951993929e-5,8.601401185593557e-8,0.0034394577744100104,-5.749559608304214e-5,8.557022184800596e-8,0.003439630233895451,-5.7303386349150334e-5,8.523451882013677e-8,0.0034397639148655676,-5.71921018810065e-5,8.503923334835471e-8,0.003439897152082377,-5.716002300749245e-5,8.498019404726612e-8,0.0034400599773055985,-5.719061355114749e-5,8.502796230293353e-8,0.0034402713672934656,-5.725932344600479e-5,8.513976877355545e-8,0.0034405393098027363,-5.7338962376120295e-5,8.52687687250456e-8,0.0034408620305790096,-5.7403458295962594e-5,8.5370360365332e-8,0.0034412295639111826,-5.74305399376233e-5,8.540661686558558e-8,0.0034416255077720182,-5.7403819017073256e-5,8.534975049941572e-8,0.0034420290593737894,-5.7314494475115625e-5,8.518502074925517e-8,0.0034424175204084556,-5.7162649725107814e-5,8.491300299198063e-8,0.0034427693744096327,-5.695780291358059e-5,8.45505703435799e-8,0.003443067694390436,-5.671827027498391e-5,8.412977141244271e-8,0.0034433033585062117,-5.6469137408961e-5,8.369422260683416e-8,0.003443477522363603,-5.6238888006486065e-5,8.329312068593308e-8,0.0034436028265143223,-5.6054927768332085e-5,8.297335687745774e-8,0.0034437028776761053,-5.593849466785818e-5,8.277067663956046e-8,0.0034438096971042514,-5.589961405993521e-5,8.270110737924363e-8,0.0034439589152577502,-5.593284157050621e-5,8.275395289466784e-8,0.0034441825909026142,-5.601493075148707e-5,8.288821797121621e-8,0.0034445001635288017,-5.610621465702858e-5,8.303535737202917e-8,0.0034449095226591654,-5.615762951966539e-5,8.311147869532069e-8,0.0034453821233687756,-5.612393855092263e-5,8.303989847633601e-8,0.003445866927768903,-5.598013860657117e-5,8.277898571579688e-8,0.003446305117155568,-5.573359851034611e-5,8.234268399454156e-8,0.003446650688170405,-5.54237541297035e-5,8.179975395214818e-8,0.003446886420895123,-5.5107576665760024e-5,8.124862318937609e-8,0.0034470267259821934,-5.483846667724602e-5,8.078097385183255e-8,0.00344710766051307,-5.464993566767857e-5,8.04536936374894e-8,0.003447171789706657,-5.455038535028025e-5,8.028012646114274e-8,0.0034472558389312216,-5.452741901483898e-5,8.02378602589795e-8,0.003447384454009153,-5.455622510521429e-5,8.028347230580017e-8,0.003447569166450617,-5.460748845901849e-5,8.036626359875367e-8,0.003447810144196527,-5.465292154467429e-5,8.043768722291936e-8,0.0034480987268725206,-5.466849659176279e-5,8.045671557812648e-8,0.003448419783191651,-5.46362499989435e-5,8.039277888315682e-8,0.003448753772593059,-5.45454637568273e-5,8.022774113086465e-8,0.0034490787902391605,-5.439364106836301e-5,7.995762374625734e-8,0.003449372967644381,-5.41872734508112e-5,7.959400330433788e-8,0.0034496174799257423,-5.394199608711304e-5,7.916430464845655e-8,0.003449800033082265,-5.368150494101013e-5,7.870985989025718e-8,0.0034499182123150364,-5.343472982432336e-5,7.828086678372597e-8,0.003449981722370573,-5.323117506956941e-5,7.792815673433031e-8,0.0034500124919465153,-5.30949612652312e-5,7.769278778854012e-8,0.0034500419488425822,-5.303878495366926e-5,7.759565134357626e-8,0.003450105483013042,-5.305939695552917e-5,7.762989261880157e-8,0.0034502349108771345,-5.3136052000312036E-05,7.775860628781301e-8,0.00345045036327994,-5.3232896856317525e-5,7.791934553656435e-8,0.0034507534559009615,-5.330563477313901e-5,7.803586216602371e-8,0.0034511239123253042,-5.331189940292976e-5,7.80359816725961e-8,0.0034515217741313154,-5.3223411868618484e-5,7.787229296285301e-8,0.0034518963778732035,-5.303630985682997e-5,7.753954870439826e-8,0.003452200772443476,-5.277494601652743e-5,7.708083438603485e-8,0.0034524067233620208,-5.24857622131667e-5,7.657676351766069e-8,0.003452513539318852,-5.222238745671445e-5,7.611970105647155e-8,0.003452546358006263,-5.202834487641089e-5,7.578401494859984e-8,0.003452545316805372,-5.1925238857953614e-5,7.56059228122419e-8,0.0034525517079226162,-5.1910531969244896e-5,7.55799748568084e-8,0.0034525973425899702,-5.1963341595560646e-5,7.566935879164173e-8,0.003452699860306806,-5.2053492925631584e-5,7.582168477769657e-8,0.003452863075258511,-5.2149607426261665e-5,7.598291155508565e-8,0.0034530799060755258,-5.222439818684115e-5,7.61063070119408e-8,0.003453335818338361,-5.2257343532068194e-5,7.615685892232103e-8,0.003453611766785339,-5.223571891965294e-5,7.61129377116946e-8,0.0034538864899658996,-5.215494408708145e-5,7.596690383151867e-8,0.003454138506384482,-5.201882998128307e-5,7.572562427973521e-8,0.003454348337076918,-5.183978826068164e-5,7.541091271463072e-8,0.0034545013314538756,-5.1638552963418784e-5,7.505903324803353e-8,0.003454591043269122,-5.144265642680074e-5,7.47179322561575e-8,0.0034546224963198295,-5.128290588661151e-5,7.444094709790633e-8,0.003454614029832736,-5.118756231866206e-5,7.427657654620211e-8,0.0034545960964780477,-5.117499667449252e-5,7.425575471974446e-8,0.0034546059759224725,-5.124696696840789e-5,7.438038383349255e-8,0.003454678971542103,-5.13853618139435e-5,7.46180167622108e-8,0.003454838496800186,-5.155451806553497e-5,7.490622976898416e-8,0.003455088410098183,-5.170923490366474e-5,7.516676020545438e-8,0.0034554104312331923,-5.18063784397559e-5,7.53256558047392e-8,0.0034557677626890567,-5.181660232781692e-5,7.533338722547459e-8,0.003456114043853787,-5.173270086815992e-5,7.517894604581043e-8,0.0034564052677747885,-5.157212308820495e-5,7.48937718027089e-8,0.003456611436614271,-5.1372648185342906e-5,7.454392055414663e-8,0.0034567244663298784,-5.118206849108857e-5,7.421205085109125e-8,0.0034567595924578005,-5.104487112438851e-5,7.397444303572169e-8,0.0034567496932292933,-5.0990411029647274e-5,7.388079046187029e-8,0.0034567348219838017,-5.1026634462844345E-05,7.394368941315555e-8,0.0034567511208470503,-5.1140910162072285e-5,7.41404001886787e-8,0.003456822969488365,-5.130640701071599e-5,7.442407063670418e-8,0.0034569600809666373,-5.149059048477161e-5,7.473844540174441e-8,0.003457158836079232,-5.166263101478568e-5,7.503054191154755e-8,0.0034574058624226842,-5.179814342816616e-5,7.525864485773623e-8,0.0034576819982162126,-5.188131487414444e-5,7.53958236160267e-8,0.003457965624434055,-5.190529764163641e-5,7.543055726802653e-8,0.003458235153642075,-5.187182989119657e-5,7.536613158997809e-8,0.003458470988800748,-5.179074706531707e-5,7.52198852644471e-8,0.0034586575036994354,-5.1679536585510255e-5,7.502247538759579e-8,0.0034587855033521653,-5.156254212189298e-5,7.481641900418598e-8,0.0034588552057932243,-5.1469030724573484e-5,7.465256143383775e-8,0.0034588791061978532,-5.142920657003421e-5,7.458297859873786e-8,0.003458883218149259,-5.1467660711166246e-5,7.464955268013278e-8,0.0034589045776179444,-5.159510836468649e-5,7.48697763858947e-8,0.0034589835250980615,-5.180135000044591e-5,7.522485150187091e-8,0.0034591517840109193,-5.205370320062124e-5,7.56573232920082e-8,0.0034594206555359705,-5.2303828254811026e-5,7.608317761780516e-8,0.0034597750906966754,-5.250174966429808e-5,7.641623908985145e-8,0.0034601771049745287,-5.2611539439694236e-5,7.659526793472266e-8,0.003460577222136936,-5.262200185778321e-5,7.660223703442587e-8,0.003460928903507887,-5.254861496345348e-5,7.646534203758294e-8,0.003461200559315436,-5.2427345790902366e-5,7.624789704143432e-8,0.0034613819623500147,-5.230371513415596e-5,7.602909490634815e-8,0.00346148446467581,-5.2220931733726785e-5,7.58833715008536e-8,0.003461536103359664,-5.2210117968981436e-5,7.586364467457609e-8,0.003461573517811942,-5.2284544913011865e-5,7.599167543503633e-8,0.0034616329485504336,-5.243864613206289e-5,7.625673698865155e-8,0.003461742549106104,-5.265142211148723e-5,7.662177846795173e-8,0.003461917703165235,-5.2892782274308036e-5,7.703449448843473e-8,0.0034621599737674246,-5.313072477304534e-5,7.74396760194996e-8,0.0034624591084389793,-5.33374098966768e-5,7.778955053911857e-8,0.003462796779292467,-5.349304510582412e-5,7.805033191515012e-8,0.003463150686187144,-5.3587487694671127e-5,7.820488911072816e-8,0.0034634980867577683,-5.362014291759816e-5,7.825256020973388e-8,0.0034638184347490337,-5.35989854743125e-5,7.820751398896041e-8,0.0034640953366142095,-5.353936163065365e-5,7.809672470592285e-8,0.0034643182806015373,-5.3462782486652334e-5,7.795785220255605e-8,0.0034644845501561154,-5.339545627403919e-5,7.783656035226323e-8,0.0034646014413177184,-5.336592005983549e-5,7.778221516267927e-8,0.0034646882637985664,-5.3400881599815127e-5,7.78405393635882e-8,0.003464776653159077,-5.351867683920702e-5,7.804231285445772e-8,0.003464906957150965,-5.372111733504216e-5,7.838949782169935e-8,0.0034651189235659127,-5.398689725856593e-5,7.884418711991946e-8,0.0034654377510551313,-5.427171287388532e-5,7.932912268318844e-8,0.003465861181889111,-5.45189747063227e-5,7.974637922620187e-8,0.0034663557995089868,-5.4679006723517416e-5,8.001057810235294e-8,0.003466866832075317,-5.4727667638690595e-5,8.008101605182355e-8,0.003467337213583027,-5.467430917764118e-5,7.997525515932372e-8,0.0034677259185634294,-5.45558137956383e-5,7.975848386026634e-8,0.0034680175758430914,-5.4421850197762574e-5,7.951758779610465e-8,0.003468221945391668,-5.431943863471243e-5,7.93341221303494e-8,0.003468366749984431,-5.4282189894998705e-5,7.926564782173139e-8,0.003468488253575451,-5.432554626942201e-5,7.933775100923389e-8,0.003468622577673265,-5.4446940976185534e-5,7.954473091422483e-8,0.00346879910386759,-5.4629139136083834e-5,7.985575566520995e-8,0.003469036315266957,-5.484531500646757e-5,8.022385234336574e-8,0.0034693400970225562,-5.506482644748267e-5,8.05959068464886e-8,0.003469704347103154,-5.525874833196587e-5,8.09221138287859e-8,0.003470113426848338,-5.54043045866477e-5,8.116348069551332e-8,0.003470545719066106,-5.548767615842907e-5,8.129655797854296e-8,0.0034709775149081618,-5.550506450046016e-5,8.131522490515083e-8,0.0034713865350294564,-5.546223505877917e-5,8.122990831469518e-8,0.00347175466700389,-5.537307165347207e-5,8.10651077332558e-8,0.003472069935483391,-5.5257707024367603e-5,8.085614780070984e-8,0.0034723279767847086,-5.514048489525153e-5,8.064555763367976e-8,0.0034725332728849033,-5.504767565387728e-5,8.047894670947377e-8,0.0034727002510506733,-5.5004592720721175e-5,8.039983781883514e-8,0.003472853897452726,-5.5031486682279284e-5,8.044249502323219e-8,0.0034730286883273595,-5.513778809238864e-5,8.062209526950794e-8,0.003473263973229728,-5.531544130156531e-5,8.092351809161323e-8,0.0034735943076693245,-5.553413717659481e-5,8.129347436960563e-8,0.003474035665897499,-5.574326882078972e-5,8.16441259001113e-8,0.0034745731955609315,-5.5884742086398796e-5,8.18752580591423e-8,0.0034751596486798657,-5.5914583892773785e-5,8.19115493205368e-8,0.003475729749079442,-5.5822556153648676e-5,8.173640984494093e-8,0.0034762246796353497,-5.563705319293436e-5,8.140033666182622e-8,0.003476612701492186,-5.541203574155975e-5,8.099801039245487e-8,0.003476895422108325,-5.52051656998577e-5,8.063001150121857e-8,0.0034771002354880218,-5.50597528893753e-5,8.037124816213464e-8,0.003477266808137206,-5.499678333889154e-5,8.025718895626209e-8,0.003477434878777277,-5.501575513956466e-5,8.028567476587208e-8,0.0034776364077081026,-5.510010155564282e-5,8.042677847876208e-8,0.0034778919129647623,-5.522370891534653e-5,8.063443431098723e-8,0.003478209655577147,-5.53567664624354e-5,8.085668027157581e-8,0.003478586484780268,-5.547053781197861e-5,8.104383769654996e-8,0.003479009745324267,-5.5541137233202974e-5,8.115488223399064e-8,0.0034794599661624203,-5.55522999409954e-5,8.116209039532e-8,0.00347991406310937,-5.5497055559913984e-5,8.105385714697197e-8,0.00348034877409459,-5.5378226962704636e-5,8.083554656447708e-8,0.003480743967899695,-5.5207701396177e-5,8.052824678244802e-8,0.003481085399356866,-5.500462615502403e-5,8.016563989201027e-8,0.003481366669257658,-5.4792906661938594e-5,7.978960191727658e-8,0.0034815903954937507,-5.459831114198394e-5,7.944505128213398e-8,0.003481768645435652,-5.444530524158718e-5,7.917429462220676e-8,0.003481922641158277,-5.435363020679066e-5,7.901097650404148e-8,0.003482081557943241,-5.43344611388244e-5,7.897344901624152e-8,0.0034822796949849086,-5.438607219406785e-5,7.90574880741661e-8,0.0034825508886991334,-5.4489814677525574e-5,7.922969966297901e-8,0.003482919510198329,-5.460863179618924e-5,7.942530879637457e-8,0.00348338922468968,-5.4691530175031036e-5,7.955606784582527e-8,0.0034839341482262006,-5.468684887826709e-5,7.953314250976801e-8,0.003484500044929782,-5.456236411226566e-5,7.930171563250027e-8,0.003485020395764967,-5.432242661163013e-5,7.887051211495277e-8,0.003485441830665722,-5.4009666442778456e-5,7.831463037203127e-8,0.003485744308334187,-5.3687830051453043e-5,7.774555423085291e-8,0.003485944356059249,-5.341619454208322e-5,7.726643890430705e-8,0.0034860824605426953,-5.323068031905013e-5,7.69391413336341e-8,0.003486205192699337,-5.313887848336849e-5,7.677573716104043e-8,0.003486351616487765,-5.312585818689202e-5,7.674902644824243e-8,0.003486546989851855,-5.3163832246076e-5,7.680975614919294e-8,0.003486802071512451,-5.322081037736187e-5,7.690188262653895e-8,0.003487115234474545,-5.326655085161755e-5,7.697289095930539e-8,0.003487475361305784,-5.3276107450321254e-5,7.697977967690026e-8,0.00348786468748232,-5.323188756023941e-5,7.689243976502786e-8,0.003488261541112851,-5.3124867656400085e-5,7.669564695902987e-8,0.0034886431118577687,-5.2955187271283527e-5,7.639006967152842e-8,0.0034889883345022694,-5.273207584356439e-5,7.599217164183895e-8,0.00348928082718179,-5.247287143335613e-5,7.553253065060545e-8,0.0034895115406157772,-5.220092938007728e-5,7.505217138911657e-8,0.0034896806403166163,-5.194253721386278e-5,7.45970984578306e-8,0.003489798281891112,-5.17231700616895e-5,7.421163449310192e-8,0.003489884081885023,-5.156346255637453e-5,7.393127924950925e-8,0.0034899651917605482,-5.1475349070217194e-5,7.37759579390884e-8,0.0034900730046242873,-5.145880727187514e-5,7.374448490150087e-8,0.0034902384487222934,-5.149957504391051e-5,7.38108940008001e-8,0.003490485713360978,-5.1568581097192085e-5,7.392383226896056e-8,0.0034908247516596694,-5.162452953725788e-5,7.401135645851316e-8,0.0034912442178913756,-5.162129070334261e-5,7.399384833356589e-8,0.0034917082870866084,-5.152067046187914e-5,7.380600775763368e-8,0.003492161919526589,-5.1307906470345714e-5,7.342344472404727e-8,0.0034925468003312904,-5.100251708159784e-5,7.28812436475048e-8,0.0034928230231711763,-5.065567102917774e-5,7.22692085054129e-8,0.00349298480607223,-5.0332008284307815e-5,7.170010948102879e-8,0.003493060486880091,-5.008509810197167e-5,7.126687367301145e-8,0.0034930978108644877,-4.994040408769448e-5,7.10129659368693e-8,0.003493144812116986,-4.989292212429899e-5,7.092852991350264e-8,0.003493236329890927,-4.991616821749949e-5,7.09664233386691e-8,0.003493389382240401,-4.997451260323819e-5,7.106400377600212e-8,0.0034936049670886314,-5.003303046878982e-5,7.116036558566628e-8,0.0034938724850190725,-5.006315699024087e-5,7.120605641471014e-8,0.003494174181710002,-5.004500801825621e-5,7.116689888635155e-8,0.003494488647240114,-4.9967898958017656e-5,7.10247226686362e-8,0.003494793491455296,-4.983017838931351e-5,7.077701977191036e-8,0.0034950676495118685,-4.963883343406836e-5,7.043629688622425e-8,0.0034952936893218015,-4.940884123717768e-5,7.00290073852739e-8,0.0034954602703394025,-4.91619116469257e-5,6.959337044053813e-8,0.003495564525333123,-4.8924164351532744e-5,6.917524860206665e-8,0.0034956137545527114,-4.872255946766232e-5,6.882178267966077e-8,0.003495625715726868,-4.858035828766625e-5,6.857332667336269e-8,0.003495626962793271,-4.8512296531638016e-5,6.845495049254806e-8,0.003495649053141319,-4.852049680516395e-5,6.846936904534974e-8,0.00349572299679345,-4.859225484338337e-5,6.859329915473242e-8,0.0034958728136478237,-4.870052145709375e-5,6.877863372874697e-8,0.003496109274904872,-4.8807474643686194e-5,6.895900381066696e-8,0.0034964250870034323,-4.887130098211752e-5,6.906179269833887e-8,0.0034967931639454048,-4.885581409325789e-5,6.902485348345956e-8,0.0034971698712657363,-4.874139651093061e-5,6.881530246607359e-8,0.0034975044920154213,-4.853405294472491e-5,6.84449092255104e-8,0.0034977539089692195,-4.82679369446728e-5,6.797415829244196e-8,0.0034978977356623906,-4.799750824878962e-5,6.749837862946622e-8,0.003497946438249529,-4.778016802970108e-5,6.71174247409688e-8,0.003497937170337883,-4.765667743097292e-5,6.690162413586374e-8,0.0034979190953097782,-4.763908471093491e-5,6.687094352623798e-8,0.003497936251514583,-4.771117288133363e-5,6.699607854306233e-8,0.0034980160892215074,-4.783863709240464e-5,6.72164958349271e-8,0.0034981665960245093,-4.798196106874302e-5,6.746304065721289e-8,0.0034983797653029723,-4.810632101892896e-5,6.7675162011292e-8,0.003498637465113023,-4.818668505636025e-5,6.780961989824135e-8,0.003498916867361659,-4.820909523255125e-5,6.784251930616007e-8,0.0034991943722301896,-4.816994545602405e-5,6.77679407084832e-8,0.003499448182358842,-4.8074658565751284e-5,6.759564195017042e-8,0.003499660159392372,-4.793641707463699e-5,6.734892080114882e-8,0.003499817561197899,-4.777495464323169e-5,6.70625616249293e-8,0.0034999149556601225,-4.761498368904733e-5,6.678005875369204e-8,0.0034999561644388504,-4.7483672003196496e-5,6.654908362581237e-8,0.003499955598723389,-4.7406752130685654e-5,6.64145242188782e-8,0.003499937981419274,-4.7403373506660164e-5,6.64093764187308e-8,0.0034999354725625304,-4.748062569635709e-5,6.654518620862992e-8,0.0034999818663642855,-4.762947778629249e-5,6.680512211808298e-8,0.003500104737353191,-4.782411608126126e-5,6.714310459443665e-8,0.0035003176166506283,-4.802589279357225e-5,6.749101949715656e-8,0.0035006147541124916,-4.819155958831892e-5,6.777333062458293e-8,0.0035009704717046735,-4.8283900302600454e-5,6.79257035406021e-8,0.0035013438418472647,-4.828195062171539e-5,6.791269545624289e-8,0.0035016879794580935,-4.818789700989003e-5,6.77394776851162e-8,0.00350196195728518,-4.8028314713332036e-5,6.7453611515929e-8,0.0035021422800556846,-4.784851634702435e-5,6.713486096804716e-8,0.0035022301857497284,-4.770064526201016e-5,6.687425034339409e-8,0.0035022515726871335,-4.762872570098612e-5,6.674801281177754e-8,0.003502248809025409,-4.76559744371242e-5,6.6795665439382e-8,0.0035022673478896467,-4.777938593190681e-5,6.701087743219682e-8,0.003502342631637575,-4.7973344665574994e-5,6.734808187955503e-8,0.0035024922414820824,-4.819969702053791e-5,6.774024524213613e-8,0.003502715017307082,-4.841926028605082e-5,6.811897897486228e-8,0.0035029954034810603,-4.8600480484494276e-5,6.842952899629088e-8,0.003503309784163736,-4.872362633221379e-5,6.863790981889476e-8,0.0035036322351094896,-4.878127146575032e-5,6.873159448741184e-8,0.0035039386022962613,-4.877672372667128e-5,6.871671928860393e-8,0.003504208970165578,-4.87218399559206e-5,6.861430714964363e-8,0.003504429141433504,-4.863501729753385e-5,6.845682584882933e-8,0.00350459182981821,-4.853945290340068e-5,6.828516088744188e-8,0.0035046979735865453,-4.846124060565817e-5,6.814520400131455e-8,0.00350475808642424,-4.842667362547513e-5,6.808297903800876e-8,0.00350479302443529,-4.845822639406622e-5,6.813746753851686e-8,0.003504833027239744,-4.8569169986268695e-5,6.833115419174137e-8,0.003504913702238319,-4.8757838383985466e-5,6.866012446657687e-8,0.0035050683853181447,-4.900391199350466e-5,6.908782646579392e-8,0.0035053182256271995,-4.926964452673352e-5,6.954751938057267e-8,0.003505663509814919,-4.950767016413277e-5,6.995616209346973e-8,0.003506080502214955,-4.967398233611283e-5,7.023720489982495e-8,0.0035065262851390663,-4.974153435641874e-5,7.034430756266863e-8,0.003506950416802348,-4.970896615211756e-5,7.027638385694825e-8,0.003507309058355678,-4.960110682063593e-5,7.0078148342398e-8,0.003507576569966767,-4.9461571981689524e-5,6.982680430100155e-8,0.003507751260505524,-4.9340525835212706e-5,6.961036660223815e-8,0.0035078543380118467,-4.928155435713404e-5,6.950463542881697e-8,0.003507923017411245,-4.931120710474176e-5,6.955507505634865e-8,0.003508000088817847,-4.943373386134086e-5,6.976794205386932e-8,0.0035081230318595195,-4.9631997266688886e-5,7.011223942234489e-8,0.003508315707408989,-4.987372010955851e-5,7.053089174394624e-8,0.003508584634184765,-5.012067906449034e-5,7.095689951327328e-8,0.003508920154172877,-5.033779131119303e-5,7.13291488630146e-8,0.0035093011174319503,-5.0499608977751295e-5,7.16036029544808e-8,0.0035097008909079027,-5.059322819724562e-5,7.175822123658268e-8,0.003510092795370233,-5.0618099620991336e-5,7.179252228933486e-8,0.0035104540074803628,-5.058396686418179e-5,7.172395576915468e-8,0.0035107678630634256,-5.050815563358695e-5,7.15831936559844e-8,0.0035110250474179707,-5.041300190160958e-5,7.140965978633763e-8,0.003511224303772449,-5.0323602655051194e-5,7.124755864747469e-8,0.003511373081760116,-5.026556563032649e-5,7.114182180173342e-8,0.0035114881227789486,-5.026219499321855e-5,7.113303314780363e-8,0.003511595434404246,-5.0330578468163386e-5,7.125049337013055e-8,0.003511728512620591,-5.047647794780582e-5,7.15033405278639e-8,0.0035119233836461974,-5.0689046876978714e-5,7.187153222950117e-8,0.003512209769178392,-5.093800093324406e-5,7.230120436607415e-8,0.003512599955153083,-5.1176799888461815e-5,7.271049692322936e-8,0.003513080034794742,-5.135392592457402e-5,7.300940477436388e-8,0.003513609502076132,-5.14298349934786e-5,7.312941724983363e-8,0.0035141320281950124,-5.139216413429823e-5,7.305001548325024e-8,0.0035145936629104664,-5.1261041454466944e-5,7.28077595651944e-8,0.003514959887450534,-5.108168091747994e-5,7.248300624823855e-8,0.0035152241266274524,-5.090867675710344e-5,7.217204520177112e-8,0.0035154059396990682,-5.078968882418096e-5,7.195828527441259e-8,0.0035155420813633245,-5.075426745699315e-5,7.189270617613542e-8,0.0035156751083582306,-5.0809654038145116e-5,7.198679130075311e-8,0.003515843117254807,-5.094257374417173e-5,7.221607476825528e-8,0.0035160725094786714,-5.112494538587068e-5,7.253048594280297e-8,0.0035163744088703465,-5.132142690619098e-5,7.286773029032713e-8,0.0035167446049327736,-5.1497064920155425e-5,7.316666417595633e-8,0.003517166385541075,-5.1623642515698906e-5,7.337826896105822e-8,0.0035176151934762446,-5.168374224689177e-5,7.347259275945112e-8,0.0035180638474490854,-5.167220679053694e-5,7.344117159692746e-8,0.003518487230567752,-5.159533656149261e-5,7.329555446259182e-8,0.0035188657466365884,-5.146856119474064e-5,7.306321274190783e-8,0.0035191873567905307,-5.13134535075297e-5,7.278232032475649e-8,0.0035194484899109596,-5.1154771029381724e-5,7.249655785721567e-8,0.0035196543025420254,-5.101775638284942e-5,7.225031546170417e-8,0.0035198186084428556,-5.0925530397301455e-5,7.208400788541844e-8,0.0035199635105888586,-5.089622436322815e-5,7.202894163244655e-8,0.003520118343208592,-5.093945103045378e-5,7.210112224469392e-8,0.0035203169511922577,-5.105206016209678e-5,7.229397007328736e-8,0.003520592065648051,-5.1214188069510806e-5,7.2571689142489e-8,0.00352096625240208,-5.138810927673326e-5,7.286756429012272e-8,0.0035214411001403445,-5.1523353653888815e-5,7.309310451119305e-8,0.0035219896591436894,-5.15702050538723e-5,7.316168179423694e-8,0.0035225589618442157,-5.149859927706176e-5,7.302152157725176e-8,0.003523085668432638,-5.1313067895405906e-5,7.268175566529078e-8,0.003523518917940908,-5.105359802726036e-5,7.221375246224139e-8,0.003523838095962248,-5.0780520742168284e-5,7.17243210762634e-8,0.0035240564761216146,-5.0552185506667285e-5,7.13161973079306e-8,0.003524211505779421,-5.040730619616483e-5,7.105688273569124e-8,0.003524349502340482,-5.035813602950126e-5,7.096680808680643e-8,0.0035245122820342207,-5.039321453053906e-5,7.102455458373297e-8,0.003524729076631242,-5.0485092313253465e-5,7.1180850127246e-8,0.003525013583176288,-5.059899047337806e-5,7.137404304621766e-8,0.003525364590777378,-5.070022815478351e-5,7.154318300099117e-8,0.0035257686958330417,-5.075977742115368e-5,7.163764186847562e-8,0.003526204144558562,-5.075793251795897e-5,7.16233638631601e-8,0.003526645154897335,-5.06861406598159e-5,7.148591957241648e-8,0.003527066167471657,-5.0547118838004726e-5,7.123062042100954e-8,0.0035274455836368955,-5.03535175473795e-5,7.088014482938875e-8,0.003527768623758874,-5.012545639882056e-5,7.047021401502236e-8,0.0035280290362206864,-4.988738877980477e-5,7.004408058198917e-8,0.0035282296839363246,-4.966483945398808e-5,6.964675729891865e-8,0.003528382291270085,-4.9481325891113706e-5,6.931952735975422e-8,0.003528506567199636,-4.935546278755109e-5,6.909476075587484e-8,0.003528628724271695,-4.929815291741338e-5,6.899092748257108e-8,0.0035287791842859104,-4.9309749713025403e-5,6.900767973450815e-8,0.0035289888641371506,-4.9377284113068966e-5,6.912119895490268e-8,0.003529283256307753,-4.947268367777429e-5,6.92813827041382e-8,0.0035296742313782816,-4.955407009659888e-5,6.941439827038625e-8,0.003530151349516904,-4.957278427309963e-5,6.943511266213218e-8,0.0035306772094212354,-4.948747198735312e-5,6.92717079077621e-8,0.003531192964839601,-4.928195652942658e-5,6.889685346018671e-8,0.0035316365215482056,-4.89774365236009e-5,6.834895029601523e-8,0.003531966575744259,-4.862874958980648e-5,6.772540073203424e-8,0.0035321786442322665,-4.830377164926679e-5,6.714615431489767e-8,0.003532303511122255,-4.805750770984733e-5,6.670788672264682e-8,0.0035323910644271955,-4.7915439884981005e-5,6.645464473265158e-8,0.003532490905278016,-4.787198094158151e-5,6.637538089556046e-8,0.0035326391070453276,-4.7899603242805185e-5,6.6420465804465665E-08,0.003532853457600977,-4.79609329089279e-5,6.652335567882734e-8,0.003533134764875135,-4.801870810507902e-5,6.661826425948239e-8,0.0035334709225311187,-4.80420607780708e-5,6.6651124930788e-8,0.0035338414892082007,-4.800969554135657e-5,6.658497123133597e-8,0.003534221883309781,-4.791109649069916e-5,6.640185991590025e-8,0.0035345870911481937,-4.774650430734176e-5,6.610271983901248e-8,0.003534914922415681,-4.7525956167852065e-5,6.570564041722356e-8,0.003535188784668761,-4.726751897573049e-5,6.524278234784632e-8,0.003535399869757837,-4.699475689773158e-5,6.475593288560843e-8,0.003535548488616758,-4.673352273796198e-5,6.429082959559262e-8,0.0035356443027719678,-4.6508419457597334e-5,6.389085743601263e-8,0.003535705452163371,-4.633936348530399e-5,6.359090277517784e-8,0.0035357567090917945,-4.623851257366044e-5,6.341187165168234e-8,0.003535826730715225,-4.6207747236638295e-5,6.335626221346214e-8,0.0035359444328626815,-4.62369186224868e-5,6.340521229944e-8,0.0035361343987252193,-4.6303140463713727e-5,6.351750974087675e-8,0.0035364112077063,-4.637182901460024e-5,6.363172583245652e-8,0.0035367731674912405,-4.640084478194753e-5,6.367372155706706e-8,0.003537197303637594,-4.634911429135081e-5,6.357183762261232e-8,0.0035376391122535576,-4.618966433176537e-5,6.327964211385549e-8,0.003538041119459337,-4.592349949638268e-5,6.280007246840904e-8,0.0035383510638224264,-4.558644822183458e-5,6.219724757422401e-8,0.0035385429814836127,-4.524104977366377e-5,6.158200500178063e-8,0.0035386287865788782,-4.495389988038994e-5,6.107183348045023e-8,0.003538652157842681,-4.477026159769317e-5,6.074602879654554e-8,0.0035386688439036844,-4.47004078804151e-5,6.062170724859673e-8,0.003538726003163398,-4.4722809906257866e-5,6.065974926915645e-8,0.0035388505435425223,-4.4797903515981296e-5,6.078947944701308e-8,0.003539047874416657,-4.488281287540454e-5,6.093489620785433e-8,0.0035393068814284787,-4.4941391084842396e-5,6.103238884542969e-8,0.003539606554146499,-4.494882794965666e-5,6.103867464873075e-8,0.003539921676724328,-4.4892499760318906e-5,6.093205597538492e-8,0.003540226919719803,-4.477102781459113e-5,6.07105950251088e-8,0.0035404997394379314,-4.4592754938286915e-5,6.03893845810904e-8,0.0035407226338242614,-4.437398906963968e-5,5.999749164758063e-8,0.003540885022134315,-4.413694086471505e-5,5.957436958624628e-8,0.0035409847601478635,-4.3907158055120185e-5,5.91653320895687e-8,0.003541029039603609,-4.371029443432704e-5,5.881578782502931e-8,0.003541034222876167,-4.3568356911767184e-5,5.856451374224705e-8,0.0035410242820919035,-4.34959360356527e-5,5.843690932693798e-8,0.0035410278165807162,-4.349704460319828e-5,5.8439391136652944e-8,0.003541073866467474,-4.35631774348635e-5,5.8556051173999174e-8,0.003541186954993939,-4.367314619920436e-5,5.874856491748497e-8,0.0035413819586960823,-4.379504612211161e-5,5.895993621631804e-8,0.003541659481115643,-4.389056974908652e-5,5.9122364071120686e-8,0.0035420026717852874,-4.392188556736655e-5,5.9169501196338025e-8,0.0035423770266627625,-4.386091460591744e-5,5.9052739202674654e-8,0.003542735137307152,-4.369954534362978e-5,5.8758966934382756e-8,0.003543027709928473,-4.345726115647605e-5,5.8323693696870554e-8,0.003543219432923343,-4.318096116450492e-5,5.783045574779396e-8,0.0035433037039722254,-4.293306375151269e-5,5.7389662664115485e-8,0.003543307510625984,-4.2770211481893025e-5,5.710096925546551e-8,0.003543281657416864,-4.2722564889928e-5,5.7016803661170176e-8,0.0035432808969128654,-4.2784998811324036e-5,5.7127048886294805e-8,0.003543345083182791,-4.29237431526913e-5,5.7371094348610354e-8,0.0035434901225729534,-4.309218173774192e-5,5.766603094543882e-8,0.0035437096200434323,-4.324625449648452e-5,5.793397699501254e-8,0.003543982437111229,-4.335377416740421e-5,5.811844457672117e-8,0.003544280963361055,-4.339731616568985e-5,5.81892230593214e-8,0.003544577345674607,-4.337307492070495e-5,5.814014309175838e-8,0.0035448472547188253,-4.328818788598209e-5,5.798423922921832e-8,0.003545071945356522,-4.315800457900615e-5,5.774893393946444e-8,0.0035452395202854154,-4.300371531604833e-5,5.7471914844255585e-8,0.0035453459408502194,-4.285012265748278e-5,5.719723861116069e-8,0.0035453958923160433,-4.2723120313231096e-5,5.697084279090594e-8,0.0035454032149012556,-4.264651128545993e-5,5.683482254338785e-8,0.0035453903011499546,-4.2638151061864956e-5,5.682050114724788e-8,0.003545385835098054,-4.270593783651835e-5,5.6941284815840156e-8,0.0035454206037119564,-4.2844639289619016e-5,5.718710304786205e-8,0.003545521737679013,-4.3034763683612925e-5,5.7522579910149e-8,0.0035457064554863466,-4.3244478586494526e-5,5.7890672855239426e-8,0.0035459768841103315,-4.343484771283477e-5,5.822218243869248e-8,0.0035463175130871715,-4.35676865911608e-5,5.8449803092231185e-8,0.003546696374372438,-4.361459001005239e-5,5.852408386886376e-8,0.003547070408275864,-4.3565227278255075e-5,5.842791123349795e-8,0.0035473947092906958,-4.343266116837182e-5,5.8185596798430805e-8,0.003547634245769986,-4.3253317404532224e-5,5.786248016398101e-8,0.003547775128552845,-4.307980993012999e-5,5.755198880500784e-8,0.0035478310759871168,-4.296686019185961e-5,5.7350653828112885e-8,0.003547840931561206,-4.295416001320256e-5,5.732790326738767e-8,0.003547856465191098,-4.305323561587963e-5,5.7503072995357236e-8,0.0035479251065484753,-4.3244764513410865e-5,5.7840967381065036e-8,0.0035480755467052556,-4.3487437490787506e-5,5.82678059755974e-8,0.003548312159234838,-4.3733132149183526e-5,5.869821561074207e-8,0.003548618609759482,-4.394085957403888e-5,5.9059893258797215e-8,0.0035489665155445534,-4.4084657379925696e-5,5.930742385274079e-8,0.0035493243155301293,-4.4155064485646884e-5,5.94246850590516e-8,0.0035496635912923074,-4.415657349882108e-5,5.942017343141657e-8,0.003549962454933137,-4.4103723515838815e-5,5.932002348157367e-8,0.0035502068853032385,-4.401745537774121e-5,5.91615814739689e-8,0.0035503910919313167,-4.392223541541534e-5,5.898836758135166e-8,0.0035505176599334156,-4.3843716170544275e-5,5.884594653272736e-8,0.0035505977261718136,-4.3806355923926305e-5,5.877765373835154e-8,0.0035506509029348764,-4.38304481117814e-5,5.881923373523053e-8,0.0035507042417583052,-4.392838644885185e-5,5.8992150582505356e-8,0.003550789375607358,-4.4100629561268414e-5,5.9296460179193444e-8,0.0035509372747178996,-4.4332623510118206e-5,5.970549942120029e-8,0.0035511709877155606,-4.459455929913146e-5,6.016568287046157e-8,0.0035514981633926815,-4.4845618151110135e-5,6.060425933750863e-8,0.0035519062473257645,-4.504285818124529e-5,6.094521953949166e-8,0.003552363010141798,-4.515265199572119e-5,6.112959670344877e-8,0.0035528232538145662,-4.516091931665212e-5,6.113348597576136e-8,0.0035532400588138987,-4.5078419810363994e-5,6.097717700290937e-8,0.0035535771481694945,-4.4939099071296303e-5,6.07218955472018e-8,0.0035538186514130496,-4.479186991256323e-5,6.045492489427308e-8,0.0035539735035672354,-4.4688098423139305e-5,6.02672442098929e-8,0.0035540731748337205,-4.466810631879039e-5,6.022963420680442e-8,0.0035541630731403067,-4.475043551216551e-5,6.037388305148787e-8,0.003554289865126375,-4.4927280773815736e-5,6.068503341769779e-8,0.0035544886846951913,-4.516779476639947e-5,6.110755581298996e-8,0.0035547745839082123,-4.542805241964009e-5,6.156319330980759e-8,0.0035551408759050616,-4.5663759910920776e-5,6.197350799964669e-8,0.003555563963135248,-4.5841008864221135e-5,6.227883337795943e-8,0.0035560116876657694,-4.5941979139417047e-5,6.24482093400329e-8,0.0035564516280192447,-4.596527201117455e-5,6.24798008660841e-8,0.003556857010155012,-4.592266312849646e-5,6.239502440655055e-8,0.003557209714814007,-4.5834565631833704e-5,6.223046308066282e-8,0.003557501080364987,-4.572581403912075e-5,6.203040815733011e-8,0.0035577315537230697,-4.562240269450946e-5,6.184110140786349e-8,0.003557910036471095,-4.554903608560832e-5,6.170637764909142e-8,0.0035580533024840793,-4.552692161730423e-5,6.166368747736406e-8,0.0035581853049642667,-4.557119728743023e-5,6.173946177102266e-8,0.0035583356940717664,-4.568768485662425e-5,6.194333838364082e-8,0.0035585365708927026,-4.586927857225371e-5,6.226185510588425e-8,0.0035588166627198116,-4.609326999183041e-5,6.265390851272246e-8,0.003559193137323904,-4.632193829336071e-5,6.30520372167614e-8,0.003559663281878733,-4.650876999059089e-5,6.337362542760012e-8,0.003560200245713937,-4.661063021140253e-5,6.354254648899662e-8,0.0035607569317794813,-4.6602396654738655e-5,6.351506594055439e-8,0.003561278648384015,-4.6487494514614917e-5,6.32983887923139e-8,0.0035617199935504846,-4.6298558243764545e-5,6.29516014692535e-8,0.003562058627582537,-4.608741314362649e-5,6.256758166751812e-8,0.0035623004672044175,-4.5909078533960046e-5,6.224430829280521e-8,0.003562475581175662,-4.5806486601264316e-5,6.205760310203278e-8,0.0035626279001984354,-4.580067735294027e-5,6.204384806523509e-8,0.003562802954124633,-4.5888015756848204e-5,6.219537779330008e-8,0.003563037055132452,-4.6043654273636875e-5,6.246701201447148e-8,0.003563350070700666,-4.622932203076322e-5,6.27901620525839e-8,0.0035637427913076075,-4.6403085941301916e-5,6.309025042503193e-8,0.003564198880158738,-4.6528682381631946e-5,6.330320173165173e-8,0.0035646903766327347,-4.658232632749611e-5,6.338736538669235e-8,0.0035651848849890845,-4.6555732749513495e-5,6.332870370697999e-8,0.0035656523705938485,-4.645535269046844e-5,6.313929883122431e-8,0.0035660700713561725,-4.6298937321714985e-5,6.285117367268997e-8,0.003566425004528302,-4.611096934697695e-5,6.250815533966789e-8,0.0035667143995241142,-4.591827694533483e-5,6.215809174271331e-8,0.0035669448573334944,-4.574655007561588e-5,6.184666832943819e-8,0.0035671310343054594,-4.561778706202556e-5,6.161284724828767e-8,0.0035672942787601126,-4.554824175451044e-5,6.148516952915002e-8,0.0035674611803288114,-4.5546361387194964e-5,6.147805454901015e-8,0.003567661543033928,-4.5610385548273515e-5,6.158757512312564e-8,0.003567924912442449,-4.5725767445714075e-5,6.178702994408387e-8,0.0035682748142848095,-4.5863544983274e-5,6.202428486357496e-8,0.0035687207877180566,-4.598192357438832e-5,6.222480065079293e-8,0.0035692503506583244,-4.603366023380281e-5,6.230484445613422e-8,0.0035698255742100237,-4.597995195287227e-5,6.219611092854864e-8,0.0035703895352063105,-4.580682740172019e-5,6.187471998839677e-8,0.003570883632004423,-4.553525834522834e-5,6.137904502638934e-8,0.003571268864222055,-4.521699225352601e-5,6.080211684283172e-8,0.0035715396695708015,-4.4916408899932836e-5,6.025908338968015e-8,0.003571723198393817,-4.468799023289393e-5,5.984686372144387e-8,0.003571866379697392,-4.456067955242553e-5,5.961625196141818e-8,0.0035720191409290983,-4.453406964456066e-5,5.956536150564443e-8,0.0035722211083410766,-4.458410992868764e-5,5.965019352482582e-8,0.003572494625911943,-4.4673173061435514e-5,5.980293252365561e-8,0.0035728434568544545,-4.476028636567257e-5,5.995034390494367e-8,0.0035732552997467812,-4.480936493091201e-5,6.002839604720158e-8,0.003573706429317807,-4.479480285769821e-5,5.99920413721776e-8,0.0035741673042217212,-4.4704415364411226e-5,5.982025244393188e-8,0.0035746082437256763,-4.45398457623661e-5,5.951659167339322e-8,0.003575004335958261,-4.43147481520429e-5,5.9105889956792483e-8,0.003575338940318722,-4.405137481478573e-5,5.862814161090186e-8,0.0035756054724064797,-4.3776367002100296e-5,5.81310100746709e-8,0.0035758075061845546,-4.3516565870462726e-5,5.766237414128631e-8,0.0035759576042431298,-4.32955011747464e-5,5.726406668644314e-8,0.003576075473322457,-4.313078064462699e-5,5.696719548910158e-8,0.0035761858511276887,-4.3032185858342236e-5,5.678871564724287e-8,0.0035763162079560256,-4.300017921430965e-5,5.672876610846801e-8,0.0035764940524594456,-4.3024605140873026e-5,5.6768438605918676e-8,0.0035767432881861085,-4.30836704446525e-5,5.686814868430869e-8,0.0035770790275487753,-4.314407216803266e-5,5.6968106744896594e-8,0.0035775010573515023,-4.3164050813275044e-5,5.699394484154996e-8,0.003577987803146952,-4.310136895375068e-5,5.6870952361826546e-8,0.0035784948165471183,-4.292678335936257e-5,5.65479221696561e-8,0.003578962840272767,-4.2639405852658924e-5,5.602429479005061e-8,0.003579336851006414,-4.227498438897039e-5,5.536473452635238e-8,0.003579588685688661,-4.18979968512765e-5,5.468488805835137e-8,0.0035797296080622783,-4.1578011198993515e-5,5.4109049105691114e-8,0.0035798042114301037,-4.1363105981440804e-5,5.372259413331688e-8,0.0035798702564199783,-4.126542984896543e-5,5.354626012529212e-8,0.0035799774382410184,-4.126391236459329e-5,5.354128307652321e-8,0.003580154993927935,-4.1317791469285e-5,5.363395239974795e-8,0.003580409608935486,-4.1381581597515776e-5,5.374262013811699e-8,0.003580729783643385,-4.1415934670145685e-5,5.3797139133405634e-8,0.003581092408746188,-4.139336320909661e-5,5.3748926352074026e-8,0.003581469034566333,-4.130007224972205e-5,5.357400193982709e-8,0.0035818310034735766,-4.1135487314135264e-5,5.3271956810880735e-8,0.0035821534692491988,-4.0910476824976e-5,5.286268340386592e-8,0.003582418418358619,-4.06446935945381e-5,5.238161243589318e-8,0.0035826166797022483,-4.0363280171443215e-5,5.187384845082181e-8,0.00358274884529989,-4.009317462540421e-5,5.1387588037206476e-8,0.003582824995614943,-3.985933882274082e-5,5.096737917280055e-8,0.0035828632611508504,-3.9681384105172434e-5,5.064806914993073e-8,0.0035828875139954875,-3.957098298811167e-5,5.045014818249678e-8,0.003582924529544475,-3.953016479695639e-5,5.0376688098463605e-8,0.00358300081862799,-3.955047708564117e-5,5.0411877426842314e-8,0.0035831392261010796,-3.961300640930363e-5,5.052117648958689e-8,0.003583355214352302,-3.968931328155379e-5,5.065319072165797e-8,0.0035836526718863154,-3.974377438611344e-5,5.074407946967609e-8,0.003584019676710392,-3.973841845099247e-5,5.072633320424865e-8,0.0035844258489106545,-3.9641235948389545e-5,5.0543575221023724e-8,0.003584824176308066,-3.943762986883524e-5,5.0170788891649215e-8,0.0035851605988330357,-3.914173842671066e-5,4.963424297277142e-8,0.0035853918960880448,-3.880043670747472e-5,4.9018405921792256e-8,0.003585505322328108,-3.848249328671764e-5,4.844644654517097e-8,0.003585527515563994,-3.8253569503164206e-5,4.803549689485371e-8,0.0035855144146158527,-3.8149888897543195e-5,4.784960245800021e-8,0.0035855273906091824,-3.8166487904675314e-5,4.787887836846632e-8,0.0035856104495281117,-3.8265157169492204e-5,4.805402080142565e-8,0.0035857798816200707,-3.8393560363288984e-5,4.828082047147677e-8,0.0035860268763078557,-3.8503227747035004e-5,4.847250586230702e-8,0.003586326680961035,-3.855986372475001e-5,4.8568113786697065e-8,0.003586648121636525,-3.8546152355993225e-5,4.853728942981486e-8,0.0035869605978639182,-3.846010828728895e-5,4.837710529272839e-8,0.003587238303345829,-3.8311783073421156e-5,4.810602981932446e-8,0.0035874625495865785,-3.811982896336047e-5,4.775775329407981e-8,0.00358762304655042,-3.790829412712801e-5,4.7375493462969575e-8,0.003587718543212155,-3.7703539314087314e-5,4.700651815697953e-8,0.0035877568854504843,-3.753109690746856e-5,4.669652828927809e-8,0.0035877543189045003,-3.741240911193318e-5,4.648378792509094e-8,0.0035877337821993926,-3.736170012036886e-5,4.639348279578213e-8,0.003587722146397466,-3.738348798138e-5,4.643324183247487e-8,0.003587746637258956,-3.747117499085622e-5,4.659063494568057e-8,0.0035878308010265218,-3.760702188597041e-5,4.683321176191194e-8,0.0035879904688035855,-3.776372946249842e-5,4.7111485215557924e-8,0.0035882302134709367,-3.790765307608103e-5,4.736488113389693e-8,0.0035885407027646038,-3.800358818517712e-5,4.753047496748133e-8,0.0035888975265631912,-3.802122612155703e-5,4.755460390198331e-8,0.003589262683625903,-3.7943134492679234e-5,4.740703403510289e-8,0.003589590313060849,-3.777295305645327e-5,4.709535929441549e-8,0.0035898376636516174,-3.754070148435225e-5,4.6674180657203245e-8,0.003589979939820703,-3.730052104784748e-5,4.6240824276023414e-8,0.003590023371945228,-3.711708048632642e-5,4.5910925049693536e-8,0.0035900077501635065,-3.7042871910765236e-5,4.577784781514526e-8,0.0035899933020088546,-3.709707415007798e-5,4.587502096050476e-8,0.003590037208575344,-3.725873614994456e-5,4.6163979998570615e-8,0.0035901730111987757,-3.747812082032692e-5,4.655494611376622e-8,0.0035904033060219416,-3.769784537258867e-5,4.6944876133643913e-8,0.003590705852666982,-3.787137405914086e-5,4.725061888805473e-8,0.0035910458330059257,-3.7972004750569304e-5,4.7424881917477886e-8,0.0035913870901548824,-3.799305368319623e-5,4.7456342834723396e-8,0.003591699210907479,-3.794340612840332e-5,4.736148608065085e-8,0.0035919606768198722,-3.7842095199116786e-5,4.7174801397497153e-8,0.0035921596171359957,-3.7713708795726786e-5,4.6940568127754947e-8,0.003592293558379161,-3.758490512066759e-5,4.6706667488679346e-8,0.0035923688823323,-3.7481625279828046e-5,4.651961895285797e-8,0.0035924001126666325,-3.742650014676788e-5,4.641991343171655e-8,0.003592408782381076,-3.743612894819133e-5,4.643708427178588e-8,0.0035924214411165024,-3.751830128528744e-5,4.6584688608919025e-8,0.0035924664696293106,-3.7669705308534085e-5,4.685621045027915e-8,0.003592569774155505,-3.7874901547291835e-5,4.7223301285490726e-8,0.003592749902450613,-3.810728859606727e-5,4.763765035237718e-8,0.0035930135281971444,-3.833251364146036e-5,4.8037268016193544e-8,0.003593352477999401,-3.85142094254474e-5,4.835692293551611e-8,0.003593743318325711,-3.862124028617287e-5,4.8541211620976406e-8,0.0035941500803349773,-3.8635219635304036e-5,4.855799005285224e-8,0.0035945303054739485,-3.8556856029829644e-5,4.8409563859566875e-8,0.0035948441441678958,-3.84093266238022e-5,4.8138450958546775e-8,0.0035950652932258955,-3.823653707192244e-5,4.7823971958565097E-08,0.003595191000352243,-3.809453371200407e-5,4.7566669363102354e-8,0.003595246796889517,-3.803631027123147e-5,4.7461060314247433E-08,0.0035952816700368603,-3.809404780623166e-5,4.756396298769029e-8,0.0035953529476908017,-3.826654280703843e-5,4.7872228760978966e-8,0.0035955064360887307,-3.851914359448242e-5,4.832290540180464e-8,0.0035957614102684605,-3.8797097685212365e-5,4.8817364790469434e-8,0.0035961074408753227,-3.904519065318432e-5,4.925659081088645e-8,0.0035965125426542463,-3.922380619036841e-5,4.9569925989950274e-8,0.0035969362675940465,-3.9315732962972006e-5,4.972712682605005e-8,0.003597341109482439,-3.932441886961113e-5,4.9735041797245097e-8,0.0035976991308152764,-3.9267828750470704e-5,4.962644042986901e-8,0.0035979941492756103,-3.917176770050048e-5,4.944797265987095e-8,0.0035982212646163817,-3.906461231436291e-5,4.925073309806581e-8,0.0035983853864858173,-3.8973731332623625e-5,4.9083882869826816e-8,0.003598499705108412,-3.8923037020490345e-5,4.899027237780294e-8,0.003598584313547959,-3.893093107139329e-5,4.900272753215885e-8,0.003598664665047769,-3.900814200916675e-5,4.914012707459969e-8,0.003598769295912446,-3.91554181102269e-5,4.940325446403414e-8,0.003598926296552057,-3.936159589408526e-5,4.9771395938974046e-8,0.0035991584178781378,-3.9603052569638225e-5,5.020149262688757e-8,0.0035994774570306106,-3.9845742495034574e-5,5.063196470603437e-8,0.003599879456446016,-4.0050595060088164e-5,5.099254875986903e-8,0.0036003427551529487,-4.018188155414745e-5,5.121939647495595e-8,0.0036008305267239238,-4.021666105614067e-5,5.127201267350899e-8,0.003601298082359539,-4.015241628723848e-5,5.114683795044416e-8,0.0036017034785005065,-4.001010080325409e-5,5.0882498429844205e-8,0.0036020186446318633,-3.983102151691306e-5,5.055393791953197e-8,0.00360223784043595,-3.966773922720605e-5,5.025583994965174e-8,0.0036023807275160397,-3.957088011118183e-5,5.0078834765566855e-8,0.0036024884440489483,-3.957514576006304e-5,5.008445593779248e-8,0.003602612836630004,-3.9688759093846825e-5,5.028643421396089e-8,0.003602801507346342,-3.9890448396384285e-5,5.064559582445518e-8,0.0036030837132397233,-4.013591224250133e-5,5.1081729897139555e-8,0.0036034625787910108,-4.037175117016467e-5,5.149873123423126e-8,0.0036039164745840613,-4.0551277524241955e-5,5.181297742668326e-8,0.0036044080529050305,-4.0646004294966926e-5,5.197384946590186e-8,0.00360489619893693,-4.064945869958866e-5,5.197041780922286e-8,0.0036053460251226866,-4.0574082061552914e-5,5.182570742191499e-8,0.0036057344318386826,-4.044453999591332e-5,5.158455566701788e-8,0.0036060514579108944,-4.029075668722807e-5,5.130104481965624e-8,0.003606299011004411,-4.01424970484346e-5,5.1028778692332877e-8,0.0036064885833287518,-4.0025849226308426e-5,5.081459498933569e-8,0.003606638973317254,-3.9961099891688534e-5,5.069476213733481e-8,0.003606774332411993,-3.9961203232245695e-5,5.069221405358963e-8,0.0036069222452277806,-4.003023028212907e-5,5.081374865009258e-8,0.0036071112182922568,-4.016168303508934e-5,5.1047028727656355e-8,0.003607366963232316,-4.033714988858951e-5,5.135826999643147e-8,0.0036077072303672525,-4.0526398781894345e-5,5.169257162187404e-8,0.0036081358410376746,-4.069044856608033e-5,5.19795998409735e-8,0.00360863791472181,-4.0788768684664725e-5,5.214662964419998e-8,0.0036091792602710175,-4.079000858969095e-5,5.2137837160242114e-8,0.003609712280943959,-4.068309768113012e-5,5.1934170132578293e-8,0.0036101880918484254,-4.04838562463079e-5,5.1565076095717744e-8,0.0036105710604826644,-4.0233135214053623e-5,5.11049366675387e-8,0.0036108500263461432,-3.998610781681087e-5,5.065355467128838e-8,0.003611041677968052,-3.9796540409886596e-5,5.0307660035659015e-8,0.0036111851665100313,-3.970186618515915e-5,5.0134017422303575e-8,0.0036113304864999287,-3.971382372907988e-5,5.0152753919674675e-8,0.0036115247250119607,-3.98167918000583e-5,5.033467938084641e-8,0.0036118001491949494,-3.997345877334354e-5,5.061180843179813e-8,0.003612167114637999,-4.013564216404726e-5,5.089703004119631e-8,0.0036126132814578962,-4.025692196720492e-5,5.110687626163271e-8,0.0036131087640671185,-4.0303479742982214e-5,5.118093281193777e-8,0.0036136150876857724,-4.026034802700086e-5,5.109292725088119e-8,0.003614094856008835,-4.0132016043704154e-5,5.085165351686192e-8,0.0036145193074628326,-3.993836208888382e-5,5.0493512681573206e-8,0.003614872292763547,-3.9708210576448246e-5,5.0070825982924494e-8,0.003615150815762236,-3.947285164647236e-5,4.9640137095099506e-8,0.0036153632808230353,-3.926096931140428e-5,4.9253097195019005e-8,0.0036155267616432177,-3.909538048400595e-5,4.89506275147321e-8,0.0036156642392711075,-3.8991230807476714e-5,4.8759693003331155e-8,0.0036158021749105296,-3.895495080175904e-5,4.86914245950835e-8,0.0036159682275933073,-3.8983383111791493e-5,4.873955389149923e-8,0.003616188577386115,-3.9062911493915725e-5,4.887889729439448e-8,0.0036164842465590077,-3.9168981167351876e-5,4.906461395007111e-8,0.003616866127419069,-3.926707099410478e-5,4.9234122993500053E-08,0.003617329348913702,-3.931673398289274e-5,4.9314522167269587e-8,0.003617849150796829,-3.928001916208648e-5,4.923780665633049e-8,0.003618381798653043,-3.913360777112033e-5,4.896267227430695e-8,0.0036188735440883186,-3.888055553865431e-5,4.849554188132768e-8,0.003619276853702225,-3.855491658006466e-5,4.789873129478229e-8,0.0036195676184713646,-3.821416389457841e-5,4.7276580612196774e-8,0.0036197545025373444,-3.792090095161403e-5,4.6742254073388355e-8,0.0036198753513412853,-3.772222272857822e-5,4.6380371688515686e-8,0.0036199830801991757,-3.763623905030227e-5,4.6222755173165736e-8,0.00362012849213772,-3.7650144684676776e-5,4.624521707582522e-8,0.003620346940104583,-3.77278873639625e-5,4.6381754134727366e-8,0.0036206519317770578,-3.7822429509832206e-5,4.654694600928876e-8,0.0036210353347296935,-3.788800232657244e-5,4.6658156643896576e-8,0.0036214722356083732,-3.7889552847069945e-5,4.665250017723497e-8,0.0036219282737146377,-3.7808250334028e-5,4.6496606350338104e-8,0.003622367558528604,-3.764294604213074e-5,4.618907856043481e-8,0.003622759613618764,-3.740807222574171e-5,4.5756568470016735e-8,0.003623084197594277,-3.7129000539556704e-5,4.524531717165578e-8,0.0036233334897944123,-3.6836271033352585e-5,4.471070197478162e-8,0.003623511822352105,-3.656004150987419e-5,4.42072171491852e-8,0.003623633625770037,-3.632568696345636e-5,4.378055463898182e-8,0.0036237204746564565,-3.615095303416537e-5,4.3462496938331666e-8,0.0036237980238943072,-3.604451542869379e-5,4.326833725239851e-8,0.0036238932087061873,-3.600542881626248e-5,4.3195891834918523e-8,0.0036240316260941043,-3.6022998605292114e-5,4.322528366433578e-8,0.003624234754252283,-3.6076927455552074E-05,4.331926852948421e-8,0.0036245165668879796,-3.613800749232242e-5,4.34246123367742e-8,0.003624879311897084,-3.617023187311202e-5,4.3476066000601294e-8,0.0036253090835464646,-3.6135726391495956e-5,4.3405390637871034e-8,0.0036257732585274127,-3.6003592967351125e-5,4.315733397260209e-8,0.0036262232058954036,-3.576186980901324e-5,4.271111422394686e-8,0.003626605331546473,-3.542823247726426e-5,4.209956869519151e-8,0.003626879436036661,-3.50518579454549e-5,4.1412337399755736e-8,0.0036270365079126123,-3.470071004044956e-5,4.0772704917605835e-8,0.0036271047904969573,-3.443736111457935e-5,4.029373159298715e-8,0.0036271389316380864,-3.429581521273013e-5,4.003629528591115e-8,0.0036271983746661196,-3.427189565117347e-5,3.999186380888534e-8,0.0036273272627723543,-3.433001504928174e-5,4.009507060595036e-8,0.0036275443605000503,-3.441929039714666e-5,4.02532013146905e-8,0.003627843559349204,-3.448978456372097e-5,4.037574941419381e-8,0.0036282007307444626,-3.450355291645972e-5,4.039436204166938e-8,0.0036285824334346233,-3.443962968437811e-5,4.027168052144104e-8,0.003628953774846586,-3.4294406238919776e-5,4.000181674287031e-8,0.003629284453436167,-3.4079224683629005e-5,3.960585055025596e-8,0.00362955288864694,-3.381643465683662e-5,3.912462715686188e-8,0.0036297485036715003,-3.353465476085004e-5,3.8610171191587416e-8,0.0036298722480067286,-3.3263883330298314e-5,3.811684927278125e-8,0.003629935574821214,-3.303104643643447e-5,3.769332757952957e-8,0.003629958188257625,-3.285642390889165e-5,3.737611903004188e-8,0.003629964993502037,-3.275128511796277e-5,3.7185320702803963e-8,0.0036299828010852926,-3.271683137367501e-5,3.712271268820873e-8,0.003630037189355566,-3.274419552984249e-5,3.7171770693712e-8,0.003630149597490292,-3.281517977483511e-5,3.729903127915843e-8,0.0036303345419651353,-3.290362286671258e-5,3.7456641443449155e-8,0.0036305967997701106,-3.297753462876925e-5,3.758635247116539e-8,0.003630928513207681,-3.300252642506156e-5,3.762587782766384e-8,0.0036313068265694214,-3.294744940956532e-5,3.7519188323039196e-8,0.00363169380297549,-3.2792780456482834e-5,3.7231652891866554e-8,0.0036320412779389313,-3.254062980327011e-5,3.676798183842747e-8,0.0036323028298620714,-3.222229600651305e-5,3.618566999286661e-8,0.00363245144150968,-3.1896535693968474e-5,3.559165692670533e-8,0.003632494924818845,-3.163343128727202e-5,3.5112974053962996e-8,0.003632477752238004,-3.148784739433187e-5,3.4848610971418145e-8,0.0036324645616411712,-3.147677766139223e-5,3.4828549478256566e-8,0.003632513929295136,-3.1574620316264846e-5,3.5005434477029905e-8,0.0036326579319382944,-3.1727711619258e-5,3.528122902984301e-8,0.0036328967617592235,-3.187682011716218e-5,3.554823526809591e-8,0.0036332061434049393,-3.197502524181992e-5,3.572156454636925e-8,0.0036335495974229026,-3.1995847248725226e-5,3.575374279393732e-8,0.003633889293870905,-3.19333227910892e-5,3.563461873953822e-8,0.003634193172744235,-3.17978842240923e-5,3.538369154094479e-8,0.003634438615965457,-3.161109030916799e-5,3.504045625380042e-8,0.003634613855985011,-3.1400671454106465e-5,3.465541572534082e-8,0.003634718071699902,-3.11961575856113e-5,3.428219175465637e-8,0.003634760562279025,-3.102500639946222e-5,3.3970535921702535e-8,0.0036347591134491177,-3.0909251987672765e-5,3.376025962304962e-8,0.003634737607805422,-3.086278268132625e-5,3.367629517795057e-8,0.0036347229490649663,-3.088948453492992e-5,3.372533325761154e-8,0.003634741563228235,-3.0982560065987805e-5,3.389460784514429e-8,0.003634815901229414,-3.112512713113596e-5,3.4153020033679004e-8,0.0036349612766972193,-3.129198170965659e-5,3.4454394956192596e-8,0.003635183245992869,-3.145240784677646e-5,3.4742669582784826e-8,0.0036354757079425717,-3.1573956992053166e-5,3.495886526255861e-8,0.0036358199160614058,-3.1627212256825974e-5,3.504983415027823e-8,0.0036361849045063073,-3.159171660721317e-5,3.4979039620345153e-8,0.003636530479561921,-3.1462895172653124e-5,3.473901011215707e-8,0.0036368142578559253,-3.1258495477149596e-5,3.436280051338025e-8,0.003637003387374721,-3.102115681331883e-5,3.3928392231956515e-8,0.003637088755021439,-3.081237158304347e-5,3.35475459720963e-8,0.003637094946225761,-3.069500019812094e-5,3.333402234292594e-8,0.0036370770559699434,-3.0708848592774254e-5,3.335935424561485e-8,0.0036371013292986853,-3.085231309250355e-5,3.361973574732224e-8,0.0036372186076369544,-3.108268917674487e-5,3.4036836713625407e-8,0.0036374461301725914,-3.133543760619602e-5,3.449300493597974e-8,0.0036377666800752285,-3.154966294649507e-5,3.4877648547478624e-8,0.003638141297749838,-3.1685759118405125e-5,3.511925103365506e-8,0.0036385252843173046,-3.173024090401332e-5,3.5193980505349496e-8,0.0036388799750885084,-3.1691380373824776e-5,3.5117541386689996e-8,0.003639178463924923,-3.1591479016366276e-5,3.493096321710203e-8,0.003639406831918024,-3.145964120367891e-5,3.4687408289269027e-8,0.0036395631103395176,-3.132641488984484e-5,3.444246310972407e-8,0.003639655535314708,-3.122008096808154e-5,3.4247456211883176e-8,0.0036397006665107633,-3.1163893875378406e-5,3.414448139816457e-8,0.003639721329488939,-3.1173806420359784e-5,3.416226804857164e-8,0.0036397441644748767,-3.125655767899938e-5,3.431270209771732e-8,0.003639796568166988,-3.140832386339877e-5,3.458839076722247e-8,0.0036399030331303018,-3.161441580614675e-5,3.49621599593727e-8,0.0036400812861970703,-3.1850493516183555e-5,3.538933414193512e-8,0.0036403388783366928,-3.2085469069802425e-5,3.581309683606768e-8,0.003640670899708472,-3.228595888933305e-5,3.617266898678714e-8,0.003641059410890908,-3.242184074945234e-5,3.6413480741849684e-8,0.003641474976614793,-3.2472192397990765e-5,3.6497992784001544e-8,0.0036418804736073327,-3.243081777099901e-5,3.6415684316993066e-8,0.0036422373048892133,-3.231046066567557e-5,3.619054998193656e-8,0.003642513965287651,-3.2144261682321465e-5,3.588351146600024e-8,0.0036426959856221573,-3.198235682061668e-5,3.5586005065773693e-8,0.0036427944977556605,-3.1881697208743154e-5,3.5401356745524745e-8,0.0036428486849075714,-3.188933045907144e-5,3.5414444145402196e-8,0.0036429173685921887,-3.202403752604784e-5,3.565852233264122e-8,0.0036430596414088368,-3.226577445343364e-5,3.609629779052436e-8,0.0036433124954249867,-3.2561078847616284e-5,3.66299793816928e-8,0.0036436776177795477,-3.284337212027593e-5,3.713830880496045e-8,0.0036441242313400286,-3.3057030277970586e-5,3.7520345040000954e-8,0.0036446041810241324,-3.317277180321848e-5,3.772337507096917e-8,0.0036450692490085615,-3.3189738563198884e-5,3.7746545722749065e-8,0.003645482899676809,-3.3128175256394194e-5,3.7627357042686266e-8,0.0036458246434632187,-3.301933774306142e-5,3.7423151774873677e-8,0.003646089234413236,-3.289707990184836e-5,3.71957515176344e-8,0.003646283665094115,-3.279244336538491e-5,3.7001641525103554e-8,0.0036464239349174375,-3.273067656021924e-5,3.6886607019548715e-8,0.0036465323149864697,-3.272957018214073e-5,3.6882747854165715e-8,0.0036466349961541663,-3.279825429446103e-5,3.700630533575309e-8,0.0036467596710251142,-3.2936106766617314e-5,3.725568811188398e-8,0.0036469325807821826,-3.313193807407561e-5,3.7610026698915855e-8,0.0036471748124150484,-3.3364069240662704e-5,3.802938859382088e-8,0.003647498169133209,-3.360210126412473e-5,3.845809149088258e-8,0.0036479015316435363,-3.38109253939106e-5,3.883209072712449e-8,0.003648368986541947,-3.395689666898082e-5,3.909027582893097e-8,0.003648870921029724,-3.401521748118757e-5,3.9187927000580045e-8,0.0036493686380024244,-3.397675991479839e-5,3.91090927084104e-8,0.0036498219897588453,-3.385230235314705e-5,3.887418894134722e-8,0.0036501985693956885,-3.367263505175776e-5,3.854000701640252e-8,0.0036504824684245895,-3.348382883038354e-5,3.819088250354824e-8,0.003650680396759058,-3.333785800459016e-5,3.792145205144569e-8,0.003650822939161007,-3.3279840876376515e-5,3.781338373671198e-8,0.003650959134371577,-3.3334613467666114e-5,3.791106516073476e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json new file mode 100644 index 000000000..3f54533a6 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":23000,"numberOfSamples":1000,"samples":[0.003651144035305788,-3.3496975736922465e-5,3.820410327566936e-8,0.0036514219143992843,-3.3730554777606135e-5,3.862552436820353e-8,0.0036518112676496577,-3.397791609056264e-5,3.907035721036122e-8,0.00365229870095008,-3.417907449598782e-5,3.9429383363913e-8,0.00365284489977173,-3.4290356787269744e-5,3.962343833009104e-8,0.0036533992613388363,-3.429527055965991e-5,3.962310443890886e-8,0.003653915601993734,-3.4204210437811016e-5,3.9448034728001705e-8,0.0036543625588809866,-3.404606217387052e-5,3.915149562803171e-8,0.003654726821743164,-3.385745548023324e-5,3.880065521411588e-8,0.003655011114586897,-3.367402646076845e-5,3.846060844958942e-8,0.003655229952491537,-3.352516388562213e-5,3.818482941081412e-8,0.0036554053665251193,-3.343165583497147e-5,3.8010946814686524e-8,0.0036555634966590643,-3.3404964167691095e-5,3.7959478606448984e-8,0.0036557319972541605,-3.3447035834001456e-5,3.803352192134055e-8,0.0036559377077366316,-3.355009646938942e-5,3.821840523078073e-8,0.003656203941986329,-3.3696494348695236e-5,3.848145228658821e-8,0.0036565469978612378,-3.3859223781751256e-5,3.877301569526761e-8,0.0036569720596978405,-3.4004124438745524e-5,3.9030579556823116e-8,0.003657469498455847,-3.40947073072433e-5,3.918763315500793e-8,0.003658013393850613,-3.409978236972752e-5,3.918760770228968e-8,0.0036585642841328063,-3.400250012732713e-5,3.9000338042948336e-8,0.003659077039174998,-3.380774452480385e-5,3.8635466490843415e-8,0.0036595124517896076,-3.354428513728769e-5,3.8146233975437406e-8,0.0036598488695074555,-3.325957393919969e-5,3.761980345160911e-8,0.0036600895177045143,-3.30080589998171e-5,3.7155744789631976e-8,0.0036602626699706706,-3.2836659874036776e-5,3.6839414480127626e-8,0.0036604145345912036,-3.277203283919482e-5,3.671875744486885e-8,0.003660597076071134,-3.281332359526204e-5,3.679128814107534e-8,0.0036608541980586175,-3.293230507705976e-5,3.700462952878297e-8,0.003661210012998719,-3.308093000187256e-5,3.7270537712529526e-8,0.003661662575751951,-3.320440094368456e-5,3.74888633727299e-8,0.003662185161327315,-3.325597408349231e-5,3.7574542846225874e-8,0.003662734729255613,-3.320874898829924e-5,3.747900861351535e-8,0.0036632644530644296,-3.3060666580031256e-5,3.719917570818271e-8,0.003663735688217234,-3.283177311008349e-5,3.677230797634811e-8,0.003664125550367317,-3.255600900274537e-5,3.6260899113540797e-8,0.0036644288159946347,-3.227144312843095e-5,3.573475239964142e-8,0.003664655379067319,-3.20122786606644e-5,3.525635740926294e-8,0.0036648256060508692,-3.180406776074698e-5,3.487218993328028e-8,0.0036649655917790954,-3.166186058055134e-5,3.460940215582945e-8,0.003665103342555086,-3.15901849968733e-5,3.4475849367541365e-8,0.003665265988254904,-3.158372346364206e-5,3.4461364201339914e-8,0.003665477540567749,-3.162801003528849e-5,3.4539055157405407e-8,0.0036657565338192736,-3.17000936026722e-5,3.466655892539428e-8,0.0036661130590637785,-3.176968248208968e-5,3.478820502904388e-8,0.003666545202793297,-3.180174937323968e-5,3.483986629008923e-8,0.003667035788941662,-3.1761745550580205e-5,3.475855435760227e-8,0.0036675514497473767,-3.162389916152661e-5,3.449759311569503e-8,0.003668046654744528,-3.138114071038292e-5,3.404470126419763e-8,0.0036684741721542814,-3.105261032794423e-5,3.343560777759723e-8,0.003668799974560434,-3.068345735179965e-5,3.2753539214570226e-8,0.0036690165364966303,-3.0334013759936222e-5,3.2109244036842246e-8,0.0036691474276989216,-3.0061206934846583e-5,3.160683200695938e-8,0.0036692401145173264,-2.9900241087574385e-5,3.131020806459519e-8,0.0036693503292834495,-2.9854613982101406e-5,3.122493185911916e-8,0.003669525187357138,-2.989751080207272e-5,3.1301037813817e-8,0.0036697912282753556,-2.9982013376298203e-5,3.1452001909760237e-8,0.003670149929656101,-3.0055069990531985e-5,3.15804774867729e-8,0.00367058012275416,-3.007069224005011e-5,3.160245845426072e-8,0.003671045233915078,-2.9999480736268876e-5,3.14646043020311e-8,0.00367150289146305,-2.9833136999524488e-5,3.1152343179196404e-8,0.0036719145236925356,-2.9583830819543413e-5,3.068856987855197e-8,0.0036722528819754623,-2.9279274289988172e-5,3.012451965536157e-8,0.0036725060723375516,-2.8955216659429878e-5,2.9525956515840337e-8,0.003672677754130943,-2.864755268356975e-5,2.895869275364607e-8,0.003672784291843022,-2.838594682136872e-5,2.8476927435519246e-8,0.0036728502871910297,-2.8189969093245898e-5,2.8116221838894727e-8,0.0036729039195573616,-2.8067750927584617e-5,2.7891105878276732e-8,0.0036729730472076353,-2.8016458620949784e-5,2.7795998669456532e-8,0.0036730823256591566,-2.8023639314141942e-5,2.7807699502206006e-8,0.0036732510393670506,-2.806876922500443e-5,2.7888233842029837e-8,0.0036734911388206174,-2.8124848250507907e-5,2.7987802985082756e-8,0.003673805048096844,-2.8160365318995213e-5,2.8048454388623762e-8,0.0036741831643614118,-2.8142417714421486e-5,2.800989211450284e-8,0.0036746017845311393,-2.8042014596425726e-5,2.781926303572099e-8,0.003675023305396148,-2.7842042600133794e-5,2.7445742165138232e-8,0.003675401277467576,-2.7546573380207877e-5,2.6897486202051013e-8,0.0036756920590245525,-2.718737099853137e-5,2.623340000871415e-8,0.0036758711240840844,-2.682142732552505e-5,2.555844943167183e-8,0.0036759465937811365,-2.6515692647237495e-5,2.499551903112205e-8,0.0036759605227197774,-2.6323182982489206e-5,2.464151777744949e-8,0.0036759744983032644,-2.6262593443452535e-5,2.4530039671133795e-8,0.0036760466285700347,-2.6312844659637143e-5,2.462156779143457e-8,0.0036762123044454384,-2.6424126112870143e-5,2.4824015221802194e-8,0.003676476786014314,-2.6537239075107872e-5,2.5028430559382807e-8,0.0036768192350094923,-2.6601221243758545e-5,2.5141395201407517e-8,0.0036772028513650874,-2.658386925131194e-5,2.5104237965815816e-8,0.0036775858883604795,-2.6474864491415744e-5,2.4898599976612817e-8,0.0036779306440379686,-2.6283647779182486e-5,2.4542371246482394e-8,0.003678209538973982,-2.603439997978615e-5,2.408037372138913e-8,0.003678408358108114,-2.5759783494692988e-5,2.357282896906436e-8,0.003678526948850447,-2.5494493653466036e-5,2.308351403533256e-8,0.0036785777355817883,-2.5269467883076505e-5,2.2669143006386352e-8,0.003678582593628918,-2.5107461818455048e-5,2.2371273529194018e-8,0.003678568782474355,-2.5020417507422695e-5,2.2211520779320994e-8,0.0036785647042003374,-2.500871973525351e-5,2.21902445854814e-8,0.0036785961805071692,-2.5062054156622615e-5,2.228816628316454e-8,0.003678683593958781,-2.5161266743696174e-5,2.24697994986493e-8,0.003678839813725382,-2.528068865976697e-5,2.268772363615898e-8,0.0036790686589521994,-2.5390721102639514e-5,2.28873548323344e-8,0.0036793636633603534,-2.5460766843175067e-5,2.301239734670839e-8,0.0036797070625050198,-2.5462938404665122e-5,2.3011746096490555e-8,0.0036800695540226,-2.5377224112577794e-5,2.2849032250097418e-8,0.0036804123072578534,-2.5198284596178738e-5,2.251506689142407e-8,0.003680693157902537,-2.4942526484895308E-05,2.2040681988927512e-8,0.003680878158399637,-2.4651854910035483e-5,2.150341156448466e-8,0.0036809565821238504,-2.4388619881055524e-5,2.101802531841774e-8,0.003680952179938686,-2.4218042502926116e-5,2.0704157135192892e-8,0.003680920788736872,-2.418258152607271e-5,2.063924897056901e-8,0.0036809307429876595,-2.428216159309294e-5,2.082238656290625e-8,0.0036810354111426534,-2.4473729304710523e-5,2.1173726237950885e-8,0.003681253971997315,-2.4690578711906134e-5,2.1570233191745147e-8,0.0036815697161010955,-2.4868511669727512e-5,2.1893875946001677e-8,0.00368194233743989,-2.4964629040890916e-5,2.2066135288962184e-8,0.003682324212490332,-2.496342898745231e-5,2.2059068741709067e-8,0.0036826731166814996,-2.4873277705717296e-5,2.1888636709994033e-8,0.0036829591588462465,-2.4718729832185195e-5,2.1600441398920033e-8,0.003683167023967205,-2.4532594782350245e-5,2.1255080252265367e-8,0.0036832954099022645,-2.4349370543578626e-5,2.0916081024659693e-8,0.0036833550335923348,-2.4200218198591833e-5,2.0640692551785886e-8,0.0036833658565634006,-2.410924176009306e-5,2.047307011231562e-8,0.00368335380237866,-2.4090944865297163e-5,2.0439619325797367e-8,0.0036833471475006176,-2.4148859135246296e-5,2.054650508300012e-8,0.003683372810946003,-2.4275435196936255e-5,2.07794955328708e-8,0.003683452919780664,-2.445325289733475e-5,2.110623168930102e-8,0.003683602046501696,-2.465734339942249e-5,2.1480525304410102e-8,0.003683825298735307,-2.4858264023953814e-5,2.184802813428788e-8,0.0036841172991974114,-2.5025683730293013e-5,2.2152849985111426e-8,0.0036844620856947494,-2.5132324086251992e-5,2.234486049199623e-8,0.003684833943600737,-2.5158192450841574e-5,2.2387540094785343e-8,0.0036851994497372497,-2.5095227283073492e-5,2.226654684123872e-8,0.003685521611166236,-2.495214102688181e-5,2.199854944989616e-8,0.0036857671361551635,-2.4758044853092278e-5,2.1637716007903936e-8,0.0036859169029455434,-2.4561976529873085E-05,2.127462522493109e-8,0.0036859772914223593,-2.44246555966739e-5,2.102094321803886e-8,0.0036859863765741317,-2.4400569866343113e-5,2.0976459090247287e-8,0.0036860072100742725,-2.451503865503077e-5,2.1187033549314085e-8,0.0036861059724534228,-2.4748908547852973e-5,2.1616674172997784e-8,0.003686324629094954,-2.504318975211854e-5,2.2156284356747038e-8,0.003686664486266351,-2.5323155005089623e-5,2.2668137696737203e-8,0.0036870898114569946,-2.5527244493044108e-5,2.303909962374833e-8,0.003687546149128421,-2.5624766795011134e-5,2.3213143420424893e-8,0.00368798044731879,-2.5617338941137874e-5,2.3193859568407812e-8,0.0036883539373483384,-2.5529670793774248e-5,2.3027315403045705e-8,0.0036886463867155743,-2.5397760191839542e-5,2.2780188658898496e-8,0.003688854693802478,-2.5259351496340612e-5,2.2522155643143783e-8,0.0036889891708466456,-2.5147850491353615e-5,2.231471497123031e-8,0.0036890695533378795,-2.5088946206269493e-5,2.2205016955307542e-8,0.0036891214131626097,-2.5098827308126288e-5,2.222261384963983e-8,0.0036891729137179556,-2.518329063537529e-5,2.2377841591020216e-8,0.0036892516769625227,-2.5337494371236543e-5,2.2661397865423784e-8,0.0036893816097385863,-2.554645169281843e-5,2.3045303929869593e-8,0.0036895797925711486,-2.578657672893664e-5,2.3485809567516533e-8,0.0036898538468566012,-2.6028463573269312e-5,2.392855402626147e-8,0.003690200266554174,-2.624073990187162e-5,2.431568410168666e-8,0.0036906040827712275,-2.6394652975592825e-5,2.4594312535909952e-8,0.0036910401320671615,-2.646892578198544e-5,2.4725481010514338e-8,0.0036914760290490357,-2.6454258869800837e-5,2.469246723504824e-8,0.0036918767628710283,-2.6356872170899155e-5,2.450728188668473e-8,0.003692210885339878,-2.6200462392483775e-5,2.4214168577148188e-8,0.0036924581686777775,-2.602543095805307e-5,2.388800430693621e-8,0.003692617733382483,-2.5883626505455566e-5,2.362443103435925e-8,0.0036927139953002153,-2.58271594885082e-5,2.3519158494680385e-8,0.0036927961075991973,-2.5891978747853797e-5,2.3637775773338626e-8,0.0036929267649546634,-2.6081277797364088e-5,2.398538810384016e-8,0.0036931609455419815,-2.6358161739026842e-5,2.4493348826303326e-8,0.0036935234174346435,-2.665549718890737e-5,2.5037572254635175e-8,0.003693998101314756,-2.6900775812927172e-5,2.5484402286752192e-8,0.0036945360219985063,-2.7042710855034788e-5,2.5739608547857825e-8,0.0036950760446270714,-2.7065371302568437e-5,2.57743737612283e-8,0.003695565661023816,-2.6985691375977797e-5,2.5620578062499176e-8,0.00369597274607554,-2.684069713273219e-5,2.5347080120574853e-8,0.003696287324292012,-2.667345195030066e-5,2.5033662232297028e-8,0.0036965173262114045,-2.6523010525635966e-5,2.4752456189175374e-8,0.0036966825886261623,-2.6419227346433036e-5,2.455840471365584e-8,0.003696809522700842,-2.6380986372349695e-5,2.4486064306819182e-8,0.0036969270936339123,-2.6416117172469423e-5,2.454950799475654e-8,0.0036970637745599656,-2.6521893503182198e-5,2.4743286277766767e-8,0.0036972449046433265,-2.6685737210574117e-5,2.504376987032764e-8,0.0036974900334030988,-2.6886274245188e-5,2.541115595707101e-8,0.003697810176347896,-2.7095219934198905e-5,2.5793006605434385e-8,0.0036982053804941253,-2.728057365079077e-5,2.613018555159297e-8,0.003698663356525077,-2.7411217452902692e-5,2.6365357275177697e-8,0.0036991599725369096,-2.7462484334453646e-5,2.6453253365305067e-8,0.0036996621606698965,-2.7421763096580724e-5,2.6370997112730044e-8,0.00370013328491362,-2.729281033021235e-5,2.6126029195423446e-8,0.0037005403211717563,-2.7097411250876837e-5,2.5759105766375958e-8,0.0037008616198824073,-2.6873458549975153e-5,2.534063229254157e-8,0.0037010937154705065,-2.6669054268328128e-5,2.4959623377691335e-8,0.0037012553893138378,-2.6532771677849146e-5,2.470560529795536e-8,0.003701386925754609,-2.6501162935385394e-5,2.464554459140342e-8,0.0037015427319560873,-2.65862451416973e-5,2.4800881221936585e-8,0.0037017770840136652,-2.6767600671031702e-5,2.5133175185444305e-8,0.003702126226889177,-2.6994365678892358e-5,2.5547991564237983e-8,0.003702594034496086,-2.7199503702774686e-5,2.5921361512321817e-8,0.003703149146929241,-2.7322124217394617e-5,2.6140992193989e-8,0.0037037362260185593,-2.732763109091641e-5,2.6143421934714618e-8,0.003704295665546802,-2.721607872496196e-5,2.5929372282700263e-8,0.0037047816795343263,-2.7016566312550213e-5,2.5553267597604028e-8,0.003705171555362991,-2.6773370862474705e-5,2.509745527697299e-8,0.003705465407158616,-2.6531809403462105e-5,2.4645955131628586e-8,0.0037056802842188206,-2.6328749558537203e-5,2.4266888380384873e-8,0.003705842962671197,-2.6188473724591307e-5,2.4004889346311846e-8,0.0037059839388316924,-2.6122241314280676e-5,2.3880388417301026e-8,0.0037061332623507665,-2.6129556128220352e-5,2.3892034999399584e-8,0.003706317770909461,-2.6199800840217618e-5,2.4019772205175913e-8,0.0037065589557418377,-2.6313745875571078e-5,2.4227665838511646e-8,0.003706870840343872,-2.644512355745995e-5,2.4466855843329514e-8,0.003707257688373799,-2.6562856852741105e-5,2.4679720562225874e-8,0.003707711915905993,-2.6634592082949376e-5,2.4806441695489335e-8,0.003708213120455237,-2.663186058357122e-5,2.479455939697902e-8,0.0037087294412449907,-2.6536451255494063e-5,2.4610743259413702e-8,0.003709222214515911,-2.6346543661015368e-5,2.4252099963225886e-8,0.0037096538724641567,-2.6080329046030495e-5,2.3752812169666824e-8,0.003709997524539029,-2.577492734907529e-5,2.3182040780489726e-8,0.0037102454227998637,-2.5479672505274922e-5,2.263137359655951e-8,0.0037104132986381126,-2.524481178501241e-5,2.219379012489409e-8,0.0037105385684950997,-2.5108446768208215e-5,2.1939440481081604e-8,0.003710672201591465,-2.5085405601484373e-5,2.1895121723236657e-8,0.0037108659074224157,-2.5161493732589e-5,2.2033822651041703e-8,0.0037111577917986476,-2.5295461489293446e-5,2.2278586025456243e-8,0.0037115606470070174,-2.542917933201141e-5,2.2521498478199035e-8,0.0037120571654388006,-2.5503837048517596e-5,2.2653719725711947e-8,0.003712604656330799,-2.5477070966070233e-5,2.259714366597435e-8,0.0037131481138471807,-2.5334611035146297e-5,2.232587717598007e-8,0.0037136365417578987,-2.509202414715311e-5,2.1869364929837613e-8,0.0037140360486028587,-2.4786787143587042e-5,2.1297584304020552e-8,0.0037143354755474435,-2.4465255139622436e-5,2.069678054959071e-8,0.003714544467024974,-2.4170306202152613e-5,2.0146497047207724e-8,0.003714687020580643,-2.393338515246342e-5,1.9704838425664365e-8,0.0037147941125955726,-2.3771532108372094e-5,1.9403042636394202e-8,0.0037148976705766875,-2.3687944947412868e-5,1.924662719845783e-8,0.0037150265340877417,-2.367419895466894e-5,1.9219583030809972e-8,0.003715204015883382,-2.37127525260934e-5,1.928905809182854e-8,0.0037154462776015544,-2.377915294824585e-5,1.9409457545578542e-8,0.0037157608120527794,-2.384409788521174e-5,1.9526274662557453e-8,0.0037161447586631148,-2.387597552240848e-5,1.9580823667812967e-8,0.003716583383528966,-2.384460787773986e-5,1.9517213785745727e-8,0.0037170496879362957,-2.372665990986959e-5,1.929240272445178e-8,0.003717506623292282,-2.3512366057301022e-5,1.8888665065491976e-8,0.003717913280569818,-2.3211764390501293e-5,1.832510925529357e-8,0.0037182350231976446,-2.2857213753819283e-5,1.766226069432184e-8,0.0037184549931704456,-2.2499015996168416e-5,1.69938183046161e-8,0.0037185822522199053,-2.2193400184984013e-5,1.642422937600723e-8,0.0037186520125712316,-2.1986125984029035e-5,1.6038180871423233e-8,0.0037187166025020217,-2.1897980951190913e-5,1.5873715102312037e-8,0.0037188302313518797,-2.1918094714878887e-5,1.5909975868926e-8,0.0037190333250862505,-2.200738683831528e-5,1.6073822676410523e-8,0.003719341736464505,-2.211021106517147e-5,1.6261616807192078e-8,0.003719743573072058,-2.216979978548509e-5,1.636795341593824e-8,0.0037202036700935363,-2.214280148765948e-5,1.631260873446929e-8,0.0037206737661205037,-2.2009147434640982e-5,1.6058763393847896e-8,0.0037211051970497504,-2.1775071201819367e-5,1.5618506174731158e-8,0.003721460458739193,-2.1469112666244478e-5,1.5045318183279198e-8,0.0037217205729197273,-2.113297412457324e-5,1.4417004888548999e-8,0.0037218868002361744,-2.081050254733132e-5,1.3815164650950308e-8,0.0037219772900882707,-2.0538209327698315e-5,1.3307554545741322e-8,0.003722020789722907,-2.033950176989565e-5,1.2937408851043707e-8,0.00372204987109083,-2.022296133826621e-5,1.2720322617019088e-8,0.0037220953992123298,-2.018363795951063e-5,1.2646747001885697e-8,0.0037221828649194387,-2.0205878245740093e-5,1.26873047206367e-8,0.0037223303313133104,-2.02664502220618e-5,1.2798609312135926e-8,0.003722547317866394,-2.0337344535813425e-5,1.292845264550573e-8,0.0037228339677174557,-2.0388317730423293e-5,1.3020518278734751e-8,0.003723180190839855,-2.0389705420379754e-5,1.3019629712220013e-8,0.0037235650128087322,-2.0316187736311858e-5,1.2878799919059847e-8,0.003723957027956693,-2.0152005616268402e-5,1.256897561523051e-8,0.003724317479797812,-1.9897320189773163e-5,1.2090860847159705e-8,0.0037246074892309214,-1.9573777293026863e-5,1.1485194896322013e-8,0.0037247994563825186,-1.922551672634567e-5,1.0834500081040653e-8,0.003724889413287953,-1.8911635022200557e-5,1.024891375539621e-8,0.003724903860006442,-1.8689419208005423e-5,9.834890386340725e-9,0.0037248950039658825,-1.8593936835862856e-5,9.657227552497414e-9,0.0037249241617011717,-1.8624070004157957e-5,9.713213497022367e-9,0.0037250406734058938,-1.874272347827841e-5,9.933231932671707e-9,0.003725266442256563,-1.889068343187049e-5,1.0206743013046786e-8,0.003725591957814072,-1.900639132302381e-5,1.0419161121580107e-8,0.0037259828367480837,-1.9042941445738243e-5,1.0483445088589561e-8,0.0037263919105630754,-1.8977532859680972e-5,1.0357575288150131e-8,0.0037267718541946424,-1.8812970780198845e-5,1.004722544629047e-8,0.0037270852122032435,-1.857321752592454e-5,9.597390829866145e-9,0.0037273105106150057,-1.829556589372417e-5,9.077766944676528e-9,0.0037274442822466383,-1.8021665816886436e-5,8.566019197106112e-9,0.003727499446205275,-1.7789180452793088e-5,8.132238797880786e-9,0.0037275009651962054,-1.762549477405663e-5,7.827238632585327e-9,0.003727480107433613,-1.7544324987777415e-5,7.676278027300595e-9,0.003727468693735596,-1.7545252223564655e-5,7.678260381961283e-9,0.0037274943796830745,-1.7615546114334517e-5,7.809198521585769e-9,0.0037275775048591624,-1.773333185341448e-5,8.028155894012631e-9,0.003727729461688348,-1.7871140037744037e-5,8.283855986333845e-9,0.0037279521045785026,-1.7999224672154963e-5,8.520831022886832e-9,0.0037282376812551145,-1.80885880022614e-5,8.685033780576021e-9,0.0037285690243083164,-1.8114038809190196e-5,8.729555432946514e-9,0.003728920113641478,-1.8057767593507887e-5,8.621345067804234e-9,0.0037292576952676747,-1.7913835381609194e-5,8.349624258909386e-9,0.0037295452618239825,-1.769325645659619e-5,7.935342096310923e-9,0.003729750685610381,-1.742782377238727e-5,7.438195143004906e-9,0.0037298573864923707,-1.7169070621178025e-5,6.954523489002591e-9,0.0037298756982351187,-1.6978346810287705e-5,6.598664526266755e-9,0.003729847357057938,-1.690734999300974e-5,6.466620041821976e-9,0.0037298361456615196,-1.6976011363689884e-5,6.594939654273422e-9,0.0037299052651525726,-1.716065001020904e-5,6.938856540972064e-9,0.003730092529452638,-1.7401587629302746e-5,7.386701385086378e-9,0.0037303974273488636,-1.7626624987369516e-5,7.803782958842304e-9,0.0037307856005640463,-1.7776600142330956e-5,8.080023637204767e-9,0.0037312048557727917,-1.782075236454326e-5,8.158500185359126e-9,0.0037316025984929033,-1.7758874434021704e-5,8.039315141398938e-9,0.003731938096263313,-1.7614499874872118e-5,7.76676690099454e-9,0.0037321881752387263,-1.7424800949631686e-5,7.410439462798648e-9,0.003732347832913049,-1.7230987288991442e-5,7.047285654047261e-9,0.003732427807332729,-1.7070752855394434e-5,6.747564430999931e-9,0.0037324505819447216,-1.6972951318685194e-5,6.564937105062063e-9,0.0037324456392299724,-1.695435236964585e-5,6.530439072511247e-9,0.003732444524964121,-1.701842445824136e-5,6.650238763256346e-9,0.0037324762624747466,-1.7155994000405556e-5,6.906918712508451e-9,0.003732563584080442,-1.734745000939961e-5,7.263649467205659e-9,0.003732720347862681,-1.7566052220995436e-5,7.670403442963853e-9,0.003732950305259306,-1.7781762662003478e-5,8.071102483695934e-9,0.003733247046701793,-1.796503766997897e-5,8.410658713739836e-9,0.003733594793483443,-1.8090329320746774e-5,8.641476568061361e-9,0.003733969829689655,-1.8139333953936072e-5,8.729522514097567e-9,0.0037343425695851745,-1.8104141430392796e-5,8.660245887318678e-9,0.003734680606263795,-1.7990430125363365e-5,8.444572497323546e-9,0.003734953553838489,-1.782034694147802e-5,8.124239420623847e-9,0.003735140403146867,-1.7633507226156773e-5,7.77352976095781e-9,0.003735238848109435,-1.748329459267977e-5,7.4921953391734e-9,0.003735273477531778,-1.742550583944127e-5,7.384151459049214e-9,0.0037352966592492363,-1.749922907883764e-5,7.52182191537506e-9,0.0037353759026406193,-1.7706708770883272e-5,7.908742842178216e-9,0.003735568740471046,-1.8005201420696946e-5,8.464598259716825e-9,0.003735897522340255,-1.8320262806021934e-5,9.050180658370451e-9,0.0037363400742964556,-1.8575326378219387e-5,9.522633384422312e-9,0.0037368415776035976,-1.8720037863678725e-5,9.788290822532997e-9,0.0037373380712256233,-1.874245668787921e-5,9.825363797506921e-9,0.0037377771555825133,-1.8663787364666786e-5,9.673974471483982e-9,0.0037381282616453346,-1.852433494079792e-5,9.409797508911304e-9,0.0037383834002827367,-1.8369540890756483e-5,9.117901324121186e-9,0.003738552757404369,-1.824019873721411e-5,8.874473223547163e-9,0.003738658809558917,-1.8167100505264942e-5,8.736870253285727e-9,0.003738730844138739,-1.8168783218842287e-5,8.739462794445459e-9,0.0037388003329487827,-1.8251037280980622e-5,8.892751862877826e-9,0.00373889698628947,-1.8407514500518183e-5,9.18453775255549e-9,0.0037390453516148825,-1.8621272393550024e-5,9.582855243041857e-9,0.0037392620029640536,-1.886722395403692e-5,1.0040612490717398e-8,0.0037395535311001136,-1.9115464924135617e-5,1.0501851379362463e-8,0.0037399156645016815,-1.9335279841595094e-5,1.0909231443508442e-8,0.003740333727271666,-1.949936503986908e-5,1.1211879486748627e-8,0.0037407843754003085,-1.9587781487259298e-5,1.1372730485053469e-8,0.00374123843967038,-1.9591286559904284e-5,1.1374739407503882e-8,0.003741664694071747,-1.951376722599113e-5,1.1225445494692067e-8,0.003742034426709988,-1.9373566096839915e-5,1.0959456056172562e-8,0.0037423268826330203,-1.9203348136011737e-5,1.0638143074060602e-8,0.0037425355319994974,-1.9047512251718933e-5,1.0344682395521544e-8,0.003742674153842459,-1.8955552707843683e-5,1.0171510875620036e-8,0.003742780075672932,-1.897020365172007e-5,1.0198117014107015e-8,0.003742910352084255,-1.91115247419747e-5,1.0461391980825988e-8,0.003743127236642866,-1.936274082819314e-5,1.0929372494595087e-8,0.0037434748877366456,-1.966787992300605e-5,1.1497025901544866e-8,0.0037439582292228346,-1.994830716850865e-5,1.2017239417133448e-8,0.0037445380916303205,-2.0132874757777342e-5,1.235715857869903e-8,0.003745147304945264,-2.018475709919423e-5,1.24483095139559e-8,0.003745717536123864,-2.0110039024257403e-5,1.2302602979977455e-8,0.0037462009957385913,-1.994718213155144e-5,1.1992528512288664e-8,0.003746578533952196,-1.9748112336383324e-5,1.1615631205305184e-8,0.0037468562058775336,-1.9561943110626034e-5,1.1263957057301948e-8,0.0037470568320752493,-1.942580720910747e-5,1.1006894832462288e-8,0.003747211591296955,-1.936188801722068e-5,1.0885690830408487e-8,0.0037473537091404366,-1.937798694893093e-5,1.0914592901045096e-8,0.00374751426169476,-1.9469411529319156e-5,1.1084443738119213e-8,0.003747719306811906,-1.9621107982094123e-5,1.1366715498674678e-8,0.003747987653823677,-1.98098865025236e-5,1.171772196127629e-8,0.0037483289877986337,-2.00069900657524e-5,1.2083476553019989e-8,0.0037487424409848157,-2.018133651430223e-5,1.2405790481457967e-8,0.003749216049729212,-2.0303576953806943e-5,1.262985740223278e-8,0.0037497276616432853,-2.0350656359240593e-5,1.2712744009555985e-8,0.0037502476097356495,-2.0310161881186038e-5,1.263147987969798e-8,0.0037507430698388022,-2.01836052339569e-5,1.238917732256602e-8,0.003751183640813286,-1.9987806416820744e-5,1.201762072309364e-8,0.003751547358372743,-1.975377558398845e-5,1.1575159589463945e-8,0.0037518262278624856,-1.9522888966651756e-5,1.1139487350292194e-8,0.003752030366449994,-1.9340357022812065e-5,1.0795307888503861e-8,0.003752189575101569,-1.9246075080711368e-5,1.0617115929008991e-8,0.00375235065514588,-1.926362082860626e-5,1.0648597353873207e-8,0.00375256874733072,-1.9389760757096198e-5,1.0883103913087454e-8,0.0037528923589819,-1.95889336244771e-5,1.1253515334163685e-8,0.003753345377221318,-1.9798233653190108e-5,1.1641722277737352e-8,0.003753914085684261,-1.9945444226348306e-5,1.1912441558529761e-8,0.0037545482183929373,-1.997468342657704e-5,1.1961217063101045e-8,0.003755178268860511,-1.9866841003214947e-5,1.1752664664935419e-8,0.003755740498054235,-1.9643572837075e-5,1.132790926630942e-8,0.003756196287862252,-1.9354386897528227e-5,1.078027677361611e-8,0.0037565380292510645,-1.9056473937833167e-5,1.02173374524946e-8,0.003756783287516352,-1.879808625982981e-5,9.729641408606765e-9,0.003756964059188642,-1.8610299848009276e-5,9.375278483928095e-9,0.0037571168822495586,-1.850601029274588e-5,9.178087064121487e-9,0.0037572761536310796,-1.8482743679660896e-5,9.133032553034088e-9,0.003757470458105261,-1.8526444575679007e-5,9.213386299761704e-9,0.003757720726876309,-1.8614862202039136e-5,9.377117285257808e-9,0.0037580391353763576,-1.8720347719301517e-5,9.572164083264661e-9,0.0037584281701537876,-1.88124868526117e-5,9.741392613497707e-9,0.003758879845331222,-1.886115999095588e-5,9.828343171502811e-9,0.003759375547369298,-1.884045521805883e-5,9.784556157303305e-9,0.0037598873171901443,-1.8733336140393533e-5,9.578297218737537e-9,0.0037603812993048536,-1.8536245409891986e-5,9.20316322759362e-9,0.003760823522734917,-1.826223272290799e-5,8.683933253519903e-9,0.0037611872682305502,-1.794102306496649e-5,8.07668074991078e-9,0.003761460322951104,-1.761495849043393e-5,7.461118830695648e-9,0.003761649939215854,-1.7330967802997768e-5,6.925453527388214e-9,0.003761783669047966,-1.7130080930370736e-5,6.546618226195867e-9,0.0037619052215471355,-1.7036850169632218e-5,6.370380696093653e-9,0.0037620655927134623,-1.7051287457088965e-5,6.396265383341771e-9,0.0037623107889809214,-1.7145824206739997e-5,6.571987750426438e-9,0.0037626686506996173,-1.7269316797664524e-5,6.8011328521040325e-9,0.0037631385620556235,-1.7358826009662052e-5,6.965369983083214e-9,0.003763688525936491,-1.735727517214488e-5,6.957620478797519e-9,0.0037642627046168722,-1.7231514285195872e-5,6.7159383377332736e-9,0.003764798192409383,-1.6983144070799588e-5,6.243784790204022e-9,0.003765244475384821,-1.6646684177942917e-5,5.606514320308481e-9,0.003765577041731878,-1.6276113749033035e-5,4.905976489211403e-9,0.0037658001496303955,-1.5926872483978327e-5,4.246574565661419e-9,0.003765940043113608,-1.5641428521669665e-5,3.7080826046676444e-9,0.0037660339883212393,-1.5442580188857785e-5,3.3330932819261697e-9,0.0037661202972565054,-1.533378212849883e-5,3.1277370664346276e-9,0.0037662317987403426,-1.530331931720143e-5,3.0696368494463564e-9,0.00376639269783391,-1.5329353706236113e-5,3.117459743615627e-9,0.0037666175999535394,-1.5384239766858776e-5,3.2190461479142756e-9,0.003766911424015544,-1.5437798596845338e-5,3.3175546155956647e-9,0.0037672694199051165,-1.5460010735471215e-5,3.3565118674225895e-9,0.003767677144880793,-1.5423844881946676e-5,3.285127707090549e-9,0.0037681108405431198,-1.5308808573030386e-5,3.0649759961602738e-9,0.00376853909328297,-1.5105335091860154e-5,2.678249819012819e-9,0.0037689267978603287,-1.4819271966290807e-5,2.1362017496681052e-9,0.0037692419464796334,-1.4474679157593949e-5,1.4843891964449467e-9,0.003769464408607395,-1.4112525842013234e-5,8.001758661740843e-10,0.0037695940570376656,-1.3783562552421724e-5,1.7924187200268179e-10,0.003769654513644912,-1.3535943066435279e-5,-2.877953882684514e-10,0.003769689655352273,-1.3401132828683478e-5,-5.419454827697908e-10,0.0037697528877103145,-1.3383352936094304e-5,-5.756719343471206e-10,0.0037698924838657317,-1.3456848768446041e-5,-4.379133873754168e-10,0.0037701379529232566,-1.3572133855236433e-5,-2.2219011005250034e-10,0.0037704917152187136,-1.36690613658659e-5,-4.190341608565942e-11,0.003770928286669406,-1.3692704936665648e-5,-4.184426881656405e-13,0.003771400984222682,-1.360764722503169e-5,-1.6419689144365008e-10,0.0037718542846100875,-1.3406801484918508e-5,-5.462400593197952e-10,0.0037722383742051645,-1.3112239502991186e-5,-1.1045888736203505e-9,0.0037725215280944423,-1.2767820548965187e-5,-1.756277314541145e-9,0.003772696517123917,-1.2426225277517897e-5,-2.4018373226817705e-9,0.003772779492258509,-1.2135018031827889e-5,-2.9516198186066968e-9,0.0037728027992608884,-1.1926333275018554e-5,-3.345233937647147e-9,0.003772805248437262,-1.1812618336310583e-5,-3.559509949169215e-9,0.0037728234022769208,-1.1787985186950563e-5,-3.605855082757096e-9,0.003772885871274732,-1.1832888997680663e-5,-3.5213519611769673e-9,0.0037730107830056705,-1.1919671821302818e-5,-3.3582733409701644e-9,0.0037732054834411486,-1.201738319949041e-5,-3.1750111515168823e-9,0.0037734672788120238,-1.2095393134790393e-5,-3.029308059715573e-9,0.0037737843623683997,-1.2126141515841897e-5,-2.9731078275435696e-9,0.0037741366633792803,-1.2087713479066177e-5,-3.0477005332985616e-9,0.0037744969434948855,-1.1966854684521575e-5,-3.2780044851181107e-9,0.0037748329505799573,-1.1762652811277419e-5,-3.665584516120736e-9,0.0037751117090649177,-1.1490296257088035e-5,-4.1815534879312055e-9,0.003775306671071242,-1.1183066734645489e-5,-4.762857357367671e-9,0.0037754069823609203,-1.0889694911885241e-5,-5.3173572358538974e-9,0.0037754256798606545,-1.0664706834353456e-5,-5.742147928915882e-9,0.003775401726689244,-1.0552455653838138e-5,-5.953742048116789e-9,0.003775391866454253,-1.0570337492320954e-5,-5.9196954740658214E-09,0.0037754533346908404,-1.069965404964022e-5,-5.6757115830877735e-9,0.0037756245234761812,-1.0889973474384802e-5,-5.3172574611983255e-9,0.0037759125769722722,-1.1075505491388981e-5,-4.9685789284492975e-9,0.0037762927653174714,-1.119569145297422e-5,-4.743856103245313e-9,0.0037767180710236953,-1.1211551456236634e-5,-4.716422581730153e-9,0.0037771336262513635,-1.1113289439129748e-5,-4.904484620551893e-9,0.0037774906920141566,-1.0919093669290008e-5,-5.273435637376515e-9,0.0037777568305629415,-1.0667562119560446e-5,-5.750186818487831e-9,0.0037779208867569462,-1.0406866195721732e-5,-6.243650787702565e-9,0.003777992767016646,-1.018352746019933e-5,-6.665958168127169e-9,0.0037779989182269913,-1.0033140590648544e-5,-6.949989656900959e-9,0.0037779751011073896,-9.97469904417571e-6,-7.060078675057539e-9,0.0037779584786724603,-1.0009194292538516e-5,-6.994608417451776e-9,0.0037779809048557934,-1.0121958368840203e-5,-6.781516708789922e-9,0.0037780645720082466,-1.0287344353781977e-5,-6.469394097223917e-9,0.003778220234630747,-1.047413085648688e-5,-6.1172540917545026e-9,0.003778447456985994,-1.0650388607779883e-5,-5.785368244403539e-9,0.003778735979536752,-1.078723859059365e-5,-5.528224279977244e-9,0.0037790674522738318,-1.086163687447547e-5,-5.3893085312301e-9,0.0037794172242492487,-1.0858682366088469e-5,-5.396741791551607e-9,0.003779756331525049,-1.0773944571270184e-5,-5.55883105247937e-9,0.0037800542820276006,-1.0616049404699768e-5,-5.859127603922072e-9,0.0037802835715694304,-1.0409041615552987e-5,-6.251958361016585e-9,0.0037804265587483227,-1.019284428731572e-5,-6.661632999833887e-9,0.0037804839392265306,-1.0019107510829138e-5,-6.990419724209726e-9,0.003780481632655872,-9.940027335123063e-6,-7.139785874260027e-9,0.003780470551458204,-9.990760852975178e-6,-7.043636122099973e-9,0.0037805145003715693,-1.0171924492472818e-5,-6.701260118724001e-9,0.0037806679024364473,-1.0443026877787217e-5,-6.189548974586507e-9,0.003780953749669685,-1.0734040814978671e-5,-5.640990002948598e-9,0.003781354446672115,-1.0970848138577473e-5,-5.195569712053512e-9,0.0037818202123343133,-1.1100878236964057e-5,-4.952398320323635e-9,0.0037822885451625726,-1.1106690075405191e-5,-4.9441331682067115e-9,0.0037827037918562686,-1.1004732221553931e-5,-5.139393429677356e-9,0.003783029580921028,-1.083450210581651e-5,-5.463297256101165e-9,0.0037832528926456414,-1.0645014240624529e-5,-5.8230619263333884E-09,0.003783382008619057,-1.0483107839539345e-5,-6.130107278142606e-9,0.0037834411521074293,-1.0385293670330903e-5,-6.315462602182711e-9,0.003783463866855065,-1.0373167422302901e-5,-6.338434431871988e-9,0.003783486346677699,-1.0451924135314523e-5,-6.1894075059543604e-9,0.0037835415059761126,-1.0611498941792025e-5,-5.887657773983901e-9,0.0037836543994592214,-1.0829747870240204e-5,-5.475280541301254e-9,0.0037838393893894684,-1.1076912436351042e-5,-5.00868499477498e-9,0.0037840991940355684,-1.1320547095963303e-5,-4.549244861849569e-9,0.0037844256115939245,-1.1530111692398709e-5,-4.154636535393267e-9,0.003784801380528869,-1.168067724546158e-5,-3.871892905681978e-9,0.0037852026131201958,-1.1755664641185652e-5,-3.732277813199833e-9,0.0037856015155439153,-1.1748839795853997e-5,-3.747515652641209e-9,0.003785969367532291,-1.166580442859177e-5,-3.906921033511718e-9,0.00378628001510182,-1.1525110745466617e-5,-4.175235589964458e-9,0.003786514449205436,-1.1358637205725354e-5,-4.491921267897067e-9,0.0037866667919770496,-1.1209875032777431e-5,-4.774493370527981e-9,0.0037867507548969247,-1.1128029735137191e-5,-4.929817589830909e-9,0.0037868036489551913,-1.1156279232741838e-5,-4.8764159931144795e-9,0.0037868831215570773,-1.1315159538627571e-5,-4.575860551166065e-9,0.0037870524179700496,-1.1587432273622035e-5,-4.061235434398263e-9,0.0037873563096598654,-1.1915434657407038e-5,-3.441960618087722e-9,0.0037877994416602927,-1.2218268853877623e-5,-2.871179678081107e-9,0.00378834159065941,-1.2422814649923206e-5,-2.4871089224278254e-9,0.0037889140278449785,-1.249102829822317e-5,-2.361451809750297e-9,0.0037894464319104034,-1.2428832387716597e-5,-2.4826372919214795e-9,0.003789888854569995,-1.2276000741283246e-5,-2.775033513542293e-9,0.003790220598166225,-1.2087372015433666e-5,-3.13458685349092e-9,0.003790447689810322,-1.1915907774812648e-5,-3.4609407828149515e-9,0.0037905948035725874,-1.1802236082212254e-5,-3.6772233896817644e-9,0.003790696401172688,-1.1770385986698964e-5,-3.73808626895047e-9,0.003790789335206898,-1.1827575732369238e-5,-3.6300747743801807e-9,0.003790907337032187,-1.1966138926110403e-5,-3.3679632150517645e-9,0.0037910770946163676,-1.2166553303929558e-5,-2.9889909055131355e-9,0.0037913156361942314,-1.2401135693384962e-5,-2.545809144827838e-9,0.0037916289168516333,-1.263815898674036e-5,-2.0986190900712304e-9,0.0037920116463947694,-1.2846175399722612e-5,-1.7069510131467538e-9,0.0037924484233062025,-1.299819527970367e-5,-1.4217770124520617e-9,0.0037929160329965078,-1.3075228465631499e-5,-1.2788768709480869e-9,0.0037933865555892653,-1.3068858631174979e-5,-1.294030013439374e-9,0.0037938309814365434,-1.2982776331081918e-5,-1.4601266957738199e-9,0.0037942231481280977,-1.283322743822306e-5,-1.7462770627408988e-9,0.003794543866539171,-1.2648304256008901e-5,-2.0991058430070644e-9,0.003794785242433129,-1.2465858940810928e-5,-2.4467144889246194e-9,0.0037949550625008244,-1.232927438422763e-5,-2.7067816859225326e-9,0.003795080187817642,-1.2279927284374798e-5,-2.8009626097236014e-9,0.0037952065161867134,-1.2345871523227187e-5,-2.6763892980301933e-9,0.0037953921373555235,-1.2528542983790664e-5,-2.3307936469979733e-9,0.0037956913857025054,-1.2793157015980988e-5,-1.8305356927816436e-9,0.003796132776286854,-1.3071563213552118e-5,-1.3050406169510527e-9,0.0037967017325761278,-1.328280143626571e-5,-9.077926254452141e-10,0.0037973411548898497,-1.3364516232244082e-5,-7.568234874396928e-10,0.0037979727650269374,-1.3297561018064426e-5,-8.881042448926196e-10,0.003798527090663047,-1.3109356495992466e-5,-1.2492122368724608e-9,0.003798964917021712,-1.28570520619648e-5,-1.7313517826797332e-9,0.0037992820034057637,-1.2603783737617608e-5,-2.2145093402545987e-9,0.003799500926082306,-1.240063635168012e-5,-2.6017407417391375e-9,0.0037996585584883936,-1.2278587025970907e-5,-2.8344302677579545e-9,0.0037997952173949366,-1.2248205620853774e-5,-2.892780987975255e-9,0.0037999474748775944,-1.2303191954665917e-5,-2.789037696090718e-9,0.003800144171209063,-1.2424890429828608e-5,-2.5588855394347242e-9,0.0038004044225855666,-1.2586549203308632e-5,-2.2533402981175947e-9,0.003800736709459013,-1.2757180681021012e-5,-1.9313801867040904e-9,0.0038011386726849684,-1.2905234943333781e-5,-1.6529274004774604e-9,0.0038015976307220777,-1.300228941643676e-5,-1.4718298071475957e-9,0.0038020920655212837,-1.3026745702081325e-5,-1.4288825387251392e-9,0.0038025942999659027,-1.2967137471847075e-5,-1.5456250913598982e-9,0.0038030742779153713,-1.2824453504739554e-5,-1.8199956009474816e-9,0.0038035040835843223,-1.2613005619355985e-5,-2.224696148359336e-9,0.003803862725819495,-1.2359515273662385e-5,-2.7088896073266286e-9,0.0038041406058219682,-1.210021971862752e-5,-3.203654961905564e-9,0.003804343039903815,-1.187601536262798e-5,-3.6312222314006306e-9,0.0038044921992625045,-1.172572264151848e-5,-3.9178384073525195e-9,0.00380462650870891,-1.1677577510893996e-5,-4.010014190249887e-9,0.0038047960105914956,-1.1739750231113836e-5,-3.892553967922982e-9,0.0038050522524015824,-1.1892359741202971e-5,-3.603641811340095e-9,0.0038054328722651374,-1.2085474055587181e-5,-3.238495369877979e-9,0.003805944893983198,-1.224821847258572e-5,-2.931950879082715e-9,0.003806555314129275,-1.2310374852742212e-5,-2.8173999266934114e-9,0.003807197680863527,-1.2229146407934576e-5,-2.9759540232212596e-9,0.0038077950074467274,-1.2006673466743497e-5,-3.4031768325958983e-9,0.003808287639007238,-1.1687444632760447e-5,-4.014049779331443e-9,0.003808650970431554,-1.1338022030420527e-5,-4.681632012604156e-9,0.003808896131037573,-1.1022265614456972e-5,-5.284306129734353e-9,0.0038090582406506883,-1.0784417102233183e-5,-5.738002868905132e-9,0.0038091815513970188,-1.0643809594594406e-5,-6.006202185145872e-9,0.003809307974440942,-1.0597903969188504e-5,-6.094047127429888e-9,0.0038094707196667066,-1.062865600428072e-5,-6.036147477861492e-9,0.0038096919065528753,-1.070881560223071e-5,-5.8845641294033734e-9,0.003809982306819115,-1.0806887438420577e-5,-5.699365884995947e-9,0.003810341878982876,-1.0890883083801036e-5,-5.541482188826337e-9,0.003810760558410313,-1.0931470433055232e-5,-5.466698369518253e-9,0.003811219360612792,-1.0905036479831683e-5,-5.5198308461602985e-9,0.003811692191355198,-1.0796853778255012e-5,-5.728734249431048e-9,0.0038121488378866334,-1.0604042188757008e-5,-6.098714331775193e-9,0.0038125593293713445,-1.0337543772812268e-5,-6.608803289335694e-9,0.003812899313522184,-1.0022178567600895e-5,-7.211652084835195e-9,0.003813155569947561,-9.694053505107579e-6,-7.838435889364233e-9,0.003813330410478557,-9.395101236701062e-6,-8.409236512806301e-9,0.0038134436413059824,-9.165292526420089e-6,-8.847896464769259e-9,0.0038135310890633975,-9.033789295919845e-6,-9.098924795496566e-9,0.0038136392405932478,-9.010703935907942e-6,-9.143237881021444e-9,0.0038138161247166904,-9.081404582108e-6,-9.008993457535895e-9,0.003814099382214336,-9.205645720023213e-6,-8.773169562587337e-9,0.0038145038512597245,-9.323767143029389e-6,-8.549656250554983e-9,0.003815012795942145,-9.370894020933878e-6,-8.462137200027408e-9,0.0038155779477628124,-9.29673571143693E-06,-8.606350895718982e-9,0.0038161315938342274,-9.08397255339519e-6,-9.015063906599803e-9,0.0038166080185463146,-8.755923206484596e-6,-9.64348405426532e-9,0.003816965037754244,-8.368207760136484e-6,-1.0385219024877421e-8,0.003817195248806939,-7.988222530295059e-6,-1.1111520776134655e-8,0.0038173229340541176,-7.673167559394442e-6,-1.1713278449963451e-8,0.0038173910001939285,-7.456361956860252e-6,-1.212711923818663e-8,0.0038174460930694254,-7.344703089557365e-6,-1.234016488954878e-8,0.0038175278039535875,-7.323953104584782e-6,-1.2379836417372083e-8,0.00381766349450458,-7.3667834734719346E-06,-1.2298441630227018e-8,0.003817867345920316,-7.44006181186134e-6,-1.2159268639340678e-8,0.003818141527292887,-7.510114938000029e-6,-1.2026573341010378e-8,0.003818477933177015,-7.546220680736763e-6,-1.1958946292781465e-8,0.003818859819405176,-7.523169308927341e-6,-1.2004439996582582e-8,0.0038192634063506886,-7.4236603910782554e-6,-1.2196000644852678e-8,0.0038196599709800997,-7.2408663983656445e-6,-1.254657877456703e-8,0.003820019070571289,-6.980898470168708e-6,-1.3044426574530458e-8,0.0038203132898458427,-6.664287919255013e-6,-1.3650268900585339e-8,0.0038205242460868597,-6.325154432293589e-6,-1.4298887743684189e-8,0.0038206486164603457,-6.006817141678243e-6,-1.4907506500728048e-8,0.0038207020750147184,-5.75354803338733e-6,-1.5391558345619086e-8,0.0038207189146382747,-5.599839594091006e-6,-1.568521212544733e-8,0.0038207461938191602,-5.560151445206347e-6,-1.5760970711142652e-8,0.00382083315281559,-5.622636517693993e-6,-1.5641635859755003e-8,0.003821018492077559,-5.749455228146534e-6,-1.5399662200224305e-8,0.0038213190875863523,-5.884391306755396e-6,-1.5142562499287096e-8,0.0038217235693960125,-5.966361142703782e-6,-1.4987076158289204e-8,0.0038221931563597426,-5.9456270845393625e-6,-1.502819170366169e-8,0.0038226704818977797,-5.798272337779563e-6,-1.531149257821805e-8,0.0038230947974088572,-5.5340664292121286e-6,-1.581812655956149e-8,0.0038234191450172406,-5.194116998158923e-6,-1.6469310260958883e-8,0.003823623312951976,-4.838285790666961e-6,-1.7150435861376128e-8,0.0038237175482825378,-4.526986941152714e-6,-1.7745939341755873e-8,0.0038237362016777052,-4.3046651521168036e-6,-1.8170927741837015e-8,0.003823725137708133,-4.1908453164058315e-6,-1.8388262055022257e-8,0.003823728754133948,-4.180212251173304e-6,-1.8408322336149633e-8,0.0038237809830387044,-4.2490079943162265e-6,-1.8276693046141356e-8,0.0038239015028385787,-4.363551982793333e-6,-1.8057833412152605e-8,0.003824095946593768,-4.487740674388706e-6,-1.7820751134813358e-8,0.003824358126063857,-4.588281903972761e-6,-1.7629039709488436e-8,0.0038246727136478013,-4.637862217435199e-6,-1.753487003336477e-8,0.003825017627068585,-4.61711276381841e-6,-1.7575256806811815e-8,0.003825366118825118,-4.516259894351772e-6,-1.7768895996776932e-8,0.0038256891088083935,-4.336919177129825e-6,-1.8112701958105336e-8,0.0038259584950023394,-4.093846046758095e-6,-1.8578421203903003e-8,0.00382615197722384,-3.815735474025295e-6,-1.9111084395452904e-8,0.0038262592364493595,-3.543489200549398e-6,-1.963234108463913e-8,0.0038262880282502877,-3.3242349858685718e-6,-2.005195595532296e-8,0.0038262672917729517,-3.200584377536259e-6,-2.0288421016364784e-8,0.0038262439982333636,-3.197318624244381e-6,-2.029444817156697e-8,0.003826272400189211,-3.3105522427901474e-6,-2.0077656752741834e-8,0.0038263982363601133,-3.505059768382942e-6,-1.9705603558615896e-8,0.003826643866615569,-3.7224637285441357e-6,-1.929005491723827e-8,0.003827000550067141,-3.897808129259171e-6,-1.8955276671465806e-8,0.0038274307773840765,-3.9781801362031975e-6,-1.8802446818552187e-8,0.0038278791501668245,-3.936838386802747e-6,-1.8882656721060616e-8,0.003828287511464482,-3.7789936758587133e-6,-1.91858484343628e-8,0.003828609599833306,-3.538639788532877e-6,-1.9646859993872794e-8,0.0038288214789188135,-3.2682591437941436e-6,-2.01651251887211e-8,0.0038289254924217973,-3.0247269062595245e-6,-2.0631684713590868e-8,0.0038289472814131997,-2.855414110560565e-6,-2.0955834728401942e-8,0.0038289273259179074,-2.788188187669053e-6,-2.108429624581785e-8,0.0038289100096469695,-2.827593307999e-6,-2.100851341943847e-8,0.0038289336504991763,-2.957270847791984e-6,-2.0759969177050435e-8,0.0038290239989857604,-3.1466075062872564e-6,-2.0397397678011425e-8,0.0038291919363631554,-3.358735621529485e-6,-1.9991428033826533e-8,0.0038294345412146105,-3.5575484015966483e-6,-1.9611153660184545e-8,0.0038297379974115684,-3.7126062375014595e-6,-1.931477643950267e-8,0.0038300809546290265,-3.8019422327944494e-6,-1.9144289526878937e-8,0.003830437556664625,-3.813471476213471e-6,-1.9122815383613343e-8,0.0038307800423785735,-3.7458453013279217e-6,-1.925296167705247e-8,0.0038310813355700818,-3.6092600087004904e-6,-1.951522260747604e-8,0.003831318289772106,-3.4261620143933223e-6,-1.9866570427390518e-8,0.0038314761727888578,-3.2310651372663914e-6,-2.024078705408704e-8,0.003831554328173983,-3.067891478985199e-6,-2.0553606536838275e-8,0.00383157155253598,-2.9829338185445362e-6,-2.071629056719002e-8,0.0038315679388297268,-3.0127134004410304e-6,-2.0658964500687748e-8,0.0038315991481782685,-3.1692879484097765e-6,-2.0358751628086406e-8,0.0038317214021556132,-3.429727904878386e-6,-1.9859827008455862e-8,0.0038319713636641617,-3.7377031114383478e-6,-1.9270251199510938e-8,0.003832350581616624,-4.0199454376947184e-6,-1.8730381252591345e-8,0.003832823444733821,-4.211063811726861e-6,-1.8365375552540856e-8,0.0038333298168283644,-4.2746105018214276e-6,-1.82449115700899e-8,0.0038338051698647065,-4.211439514210527e-6,-1.8367216874901712e-8,0.003834198761806769,-4.0546278942909735e-6,-1.8668806860764246e-8,0.003834484151940069,-3.856273197654131e-6,-1.9049773936193798e-8,0.0038346613147808603,-3.6724518049993973e-6,-1.940260611015573e-8,0.0038347524550533677,-3.550605899014387e-6,-1.9636361789940677e-8,0.0038347942577808274,-3.52127028068912e-6,-1.969253972068335e-8,0.0038348288874075678,-3.5944825007219915e-6,-1.9551978029488838e-8,0.0038348954913967792,-3.7604912766397788e-6,-1.9233502467926943e-8,0.0038350235792819626,-3.9939514459539405e-6,-1.8785861778853742e-8,0.0038352291926199416,-4.260277158951203e-6,-1.8275496622939114e-8,0.003835514073341714,-4.522523088560736e-6,-1.7773291753942183e-8,0.0038358673369616493,-4.7473979554075516E-06,-1.7343025332758908e-8,0.0038362687210526454,-4.9095732722181525e-6,-1.7033139263666595e-8,0.00383669236799276,-4.99408908331157e-6,-1.6872194841765404e-8,0.003837110381916312,-4.997253315309627e-6,-1.6867206012024054e-8,0.0038374959397268127,-4.926686817006647e-6,-1.7003556999435392e-8,0.003837826168240292,-4.800973729438346e-6,-1.724561889505605e-8,0.0038380852198412027,-4.64897087800454e-6,-1.7538006826362915e-8,0.0038382680055769084,-4.508244405378731e-6,-1.780856000998818e-8,0.0038383845372422826,-4.4213473667315845e-6,-1.7975542156029803e-8,0.0038384635487548452,-4.428331072852901e-6,-1.7962111992879813e-8,0.003838552412999034,-4.554891468079644e-6,-1.7719129920892407e-8,0.003838709449637709,-4.79857611780019e-6,-1.7251579776228027e-8,0.003838986727658379,-5.120008018211622e-6,-1.6635275122453434e-8,0.0038394080255532118,-5.448208410521412e-6,-1.6006525398447498e-8,0.0038399539523913803,-5.703228860578149e-6,-1.5518689679738132e-8,0.003840565607656355,-5.826728491288216e-6,-1.5283563189269852e-8,0.0038411666084649057,-5.803303992373885e-6,-1.5330502316579828e-8,0.003841690669226006,-5.6615015185918996e-6,-1.5604511736937722e-8,0.0038421002535852433,-5.457713918832178e-6,-1.5997183329700725e-8,0.0038423907809453407,-5.254822630049416e-6,-1.6387728287251544e-8,0.003842584084612968,-5.1054363205735894e-6,-1.6675159725889587e-8,0.0038427176193724898,-5.043044755021766e-6,-1.6795248365588627e-8,0.003842834018332966,-5.07989312250766e-6,-1.6724578044920652e-8,0.003842972942410085,-5.209054269116863e-6,-1.6476567824802356e-8,0.0038431654789848045,-5.4086399567047076e-6,-1.60933997922233e-8,0.00384343077449617,-5.647036470412883e-6,-1.563595510392797e-8,0.00384377466746861,-5.888566057774086e-6,-1.5172890552403953e-8,0.003844190175581018,-6.098988812967744e-6,-1.477000694122479e-8,0.0038446595948861905,-6.250255466342545e-6,-1.4481091439427506e-8,0.003845157818995818,-6.324023724179862e-6,-1.4341201409106802e-8,0.0038456562996112983,-6.313615647304992e-6,-1.4362989566193652e-8,0.003846127011783707,-6.224437602563978e-6,-1.4535971378501742e-8,0.003846546039512686,-6.073206328661482e-6,-1.4828020425045514e-8,0.0038468967151338742,-5.886318244836747e-6,-1.518844046641186e-8,0.0038471724104394123,-5.6974965543184785e-6,-1.5552409101517088e-8,0.0038473791476006172,-5.544524492413738e-6,-1.5847232591313744e-8,0.0038475379016441485,-5.464345014145458e-6,-1.6001824499551356e-8,0.0038476855030219305,-5.485613097100651e-6,-1.596112434254084e-8,0.003847871879727775,-5.6186931393504005e-6,-1.5705383768277254e-8,0.0038481508803807564,-5.845389848453475e-6,-1.526986177286528e-8,0.003848563503714657,-6.114171536753636e-6,-1.4753886498476955e-8,0.0038491178160156275,-6.348715588209728e-6,-1.4304328128888127e-8,0.0038497770085141143,-6.472740813382431e-6,-1.4067840281603289e-8,0.0038504673064347367,-6.441502007513236e-6,-1.4130328256331074e-8,0.0038511053849232322,-6.261082594443713e-6,-1.4479857491646347e-8,0.003851629844832358,-5.983091492067725e-6,-1.5016874116127136e-8,0.003852018859395578,-5.680152288202065e-6,-1.5601434430578248e-8,0.0038522882875718684,-5.418923444947771e-6,-1.6105201466218447e-8,0.0038524776393092323,-5.243503092060938e-6,-1.644339124890214e-8,0.0038526343526436983,-5.171293042120779e-6,-1.658266798991624e-8,0.0038528022610099396,-5.196803821713961e-6,-1.6533754071038998e-8,0.003853015203081441,-5.2983925912731155e-6,-1.6338444310091512e-8,0.003853294442269686,-5.444945618229092e-6,-1.6056762373860484e-8,0.0038536482567425854,-5.601504835855946e-6,-1.5756133822008962e-8,0.0038540726814287585,-5.7339517789242305e-6,-1.550233250246981e-8,0.0038545530770026947,-5.813032433141409e-6,-1.535167747524828e-8,0.003855066511348219,-5.817774971569551e-6,-1.5344433001374196e-8,0.0038555849763886965,-5.738119863076067e-6,-1.5499788248752717e-8,0.0038560793166990247,-5.576384824864866e-6,-1.5813120373490353e-8,0.0038565234608473496,-5.347216994734051e-6,-1.6256150387493468e-8,0.0038568984147355433,-5.075979025649893e-6,-1.678004601450871e-8,0.00385719557764678,-4.795731754718215e-6,-1.7321162029551486e-8,0.0038574190570229696,-4.543041028615571e-6,-1.780903983008837e-8,0.003857586762326891,-4.352859428110214e-6,-1.817625138390654e-8,0.003857730049101876,-4.252572787910336e-6,-1.8369938134093778e-8,0.0038578912513364937,-4.255213948707043e-6,-1.8364992404288677e-8,0.003858117874957074,-4.3525404651654585e-6,-1.8177456727680517e-8,0.003858452354547486,-4.510210597999658e-6,-1.7873784612501723e-8,0.003858917791777117,-4.669051428707108e-6,-1.756829129472984e-8,0.003859503672194377,-4.756979406824098e-6,-1.7400082133742694e-8,0.003860160107605068,-4.712384004790362e-6,-1.7487936966225806e-8,0.0038608091664962376,-4.510570068775836e-6,-1.7879323414882926e-8,0.003861372398538454,-4.177424357879907e-6,-1.8524047943606895e-8,0.003861800506333025,-3.7795425476321384e-6,-1.9293349565570984e-8,0.0038620880164654562,-3.396288792625095e-6,-2.0033913711143205e-8,0.003862267166860147,-3.0911799396654256e-6,-2.062317555474824e-8,0.0038623893494130436,-2.8966628210158406e-6,-2.099867596807234e-8,0.003862506563495998,-2.8140990119499413e-6,-2.115798768293966e-8,0.0038626598321244918,-2.822389550608056e-6,-2.114198102596278e-8,0.003862874873005275,-2.8882527356427605e-6,-2.1014973901108832e-8,0.003863162336153394,-2.9744902195046028e-6,-2.0848814677809523e-8,0.0038635199304515298,-3.045533830271848e-6,-2.0712205478631623e-8,0.0038639348992436243,-3.0710234770790767e-6,-2.066378398501029e-8,0.0038643864355204357,-3.028367117469868e-6,-2.0747147455070232e-8,0.00386484822728367,-2.904831494192115e-6,-2.0986801911394604e-8,0.0038652914752601592,-2.699236644680084e-6,-2.1384920240420773e-8,0.003865688624510196,-2.4228755743300013e-6,-2.191962018272638e-8,0.00386601767419727,-2.0990064949875313e-6,-2.2545976090700474e-8,0.003866266452299767,-1.760409030734062e-6,-2.3200715561079226e-8,0.0038664359843247702,-1.4449098341719433e-6,-2.3810796904036255e-8,0.0038665420780329414,-1.1892409375748905e-6,-2.4305217895457498e-8,0.003866614450261009,-1.0220808697119544e-6,-2.4628464023641513e-8,0.0038666931331427633,-9.574329517630934e-7,-2.4753373068809092e-8,0.00386682224894407,-9.894664267422647e-7,-2.469119648990868e-8,0.0038670414158975728,-1.0900193002419434e-6,-2.449647640784153e-8,0.0038673755149895308,-1.2103925169421118e-6,-2.4263553007702945e-8,0.0038678247276590877,-1.2892296045959293e-6,-2.4111252377403624e-8,0.003868358444959499,-1.267252656795297e-6,-2.4154311249935473e-8,0.0038689178723244452,-1.106609395965305e-6,-2.446591385034712e-8,0.0038694306364283385,-8.077989637281885e-7,-2.504494355576824e-8,0.0038698345342124824,-4.141703486132289e-7,-2.5807311711834674e-8,0.003870099809101716,1.7314109784301966e-9,-2.661245619101961e-8,0.0038702378083155316,3.6458720020279093e-7,-2.7314567339474627e-8,0.0038702920854368386,6.214663267685033e-7,-2.7811317375819918e-8,0.0038703190910244194,7.53858335647063e-7,-2.8067074676155508e-8,0.00387036974897286,7.748010931081934e-7,-2.8107228302703305e-8,0.0038704788581488724,7.175311052953002e-7,-2.7996153658333026e-8,0.0038706626331334653,6.232083040671878e-7,-2.781347285744613e-8,0.0038709211656908133,5.318687125353667e-7,-2.7636609917695287e-8,0.003871242513436442,4.772284502188831e-7,-2.753078648423058e-8,0.003871606525933271,4.841804967947889e-7,-2.754418615260003e-8,0.0038719879135084533,5.675785755217659e-7,-2.7705577960566147e-8,0.003872358880346966,7.314004543716178e-7,-2.8022675148351287e-8,0.0038726919022138077,9.680249185641712e-7,-2.8480732932027746e-8,0.003872963138652044,1.2579586782204766e-6,-2.9042030043767234e-8,0.00387315657601737,1.5708285211382788e-6,-2.9647789466682646e-8,0.0038732683373289547,1.86855923238929e-6,-3.0224309921934445e-8,0.0038733099271485473,2.1112153111972303e-6,-3.069424612561177e-8,0.003873308852725411,2.2650543922665764e-6,-3.0992188082449424e-8,0.0038733053736022243,2.3111642765606837e-6,-3.108140596859698e-8,0.003873345192169577,2.2521788410355123e-6,-3.0966904370240415e-8,0.0038734693367986866,2.1146262125177263e-6,-3.0700024716839653e-8,0.003873703593536369,1.9454980220390796e-6,-3.037183659191588e-8,0.0038740502205765353,1.8030645268901052e-6,-3.009534652539585e-8,0.003874484463380578,1.7433559304306285e-6,-2.997927136727451e-8,0.003874957745425761,1.805067475563303e-6,-3.009872427079351e-8,0.0038754081819814224,1.9969121911983876e-6,-3.0470633717663e-8,0.0038757768904046563,2.2921729176794824e-6,-3.104314330933098e-8,0.0038760255596562514,2.6342273406501153e-6,-3.1706344087442033e-8,0.003876148467003275,2.953007064522305e-6,-3.232426651598912e-8,0.003876173208269964,3.1867247516892045e-6,-3.2777089184574225e-8,0.0038761496228379723,3.299682974732298e-6,-3.2995681880150156e-8,0.0038761325461103228,3.2890272755367357e-6,-3.297463097922817e-8,0.003876166403606068,3.179714693762658e-6,-3.276239593634084e-8,0.003876276896591104,3.0126859225590633e-6,-3.243833774524097e-8,0.0038764701624275557,2.8325579269208208e-6,-3.208888404389721e-8,0.0038767365992111737,2.6787515873070964e-6,-3.1790385133102694e-8,0.003877056148306675,2.580816495240054e-6,-3.160009687833867e-8,0.003877403029010765,2.556826343211539e-6,-3.1553084495681475e-8,0.0038777493008821016,2.613289973686861e-6,-3.166203618942354e-8,0.0038780675614554605,2.745446505360736e-6,-3.191780672517262e-8,0.003878333476381656,2.937524412643369e-6,-3.2289889347489e-8,0.0038785287779384415,3.1632353044676755e-6,-3.2727348319001116e-8,0.0038786449743421613,3.38733667833281e-6,-3.3161835770498974e-8,0.0038786873128192818,3.569409484611795e-6,-3.351491898098499e-8,0.003878677591593657,3.6707118908738144e-6,-3.371139093728882e-8,0.003878653651155005,3.663736005572876e-6,-3.369782934114989e-8,0.003878663611183559,3.5420997935283253e-6,-3.346179770353897e-8,0.003878754731082063,3.3267106762652564e-6,-3.304380167421774e-8,0.003878959662882301,3.0642480397399228e-6,-3.2534349810315585e-8,0.0038792851193151815,2.8166766000497898e-6,-3.2053637071171815e-8,0.003879707781335941,2.644580007151263e-6,-3.171924924585675e-8,0.003880179414535661,2.590044261113597e-6,-3.161296170025512e-8,0.003880639462395093,2.664856929841553e-6,-3.175779169109812e-8,0.003881030963909623,2.847441295081661e-6,-3.211196330829822e-8,0.003881315132026455,3.088989773401876e-6,-3.258074793403881e-8,0.003881480673019954,3.3267950065992406e-6,-3.304234350010906e-8,0.0038815453906210946,3.500934082932849e-6,-3.33803219040278e-8,0.0038815497710628015,3.5694288741531944e-6,-3.3513127109619604e-8,0.003881544796778198,3.5173837589184617e-6,-3.341184114435914e-8,0.003881578212321525,3.3577257039687044e-6,-3.310159999772678e-8,0.0038816837406748395,3.1243817248589497e-6,-3.264830861127478e-8,0.0038818760151617553,2.8614164265762064e-6,-3.213752525507882e-8,0.0038821512694009203,2.612341272483004e-6,-3.165370238768937e-8,0.0038824917692874394,2.4124461107722537e-6,-3.1265314802538124e-8,0.003882871480346175,2.2849072067360234e-6,-3.1017329356398934e-8,0.0038832611824149987,2.2398928027330586e-6,-3.0929494207351274e-8,0.0038836323245214632,2.275318774487282e-6,-3.099781618751069e-8,0.0038839597921307414,2.378108423025778e-6,-3.119699030134757e-8,0.0038842242152507703,2.5254286212354412e-6,-3.148275781095068e-8,0.0038844144663355965,2.686059250390416e-6,-3.179451894543604e-8,0.0038845306688387576,2.822639547206788e-6,-3.2059675183163195e-8,0.003884587357003466,2.8959475224504465e-6,-3.220196455639171e-8,0.0038846153737523,2.8722310269464106e-6,-3.21557550736718e-8,0.003884660056959134,2.7333387608771316e-6,-3.18857668919105e-8,0.0038847732762158013,2.4869046599035173e-6,-3.1406851357082614e-8,0.0038849991252745794,2.1712642698410145e-6,-3.0793495921892944e-8,0.0038853574442500984,1.8496451423368823e-6,-3.016850650976043e-8,0.0038858330515733975,1.5925789224385644e-6,-2.9668865383990577e-8,0.003886377556622482,1.4547566015723252e-6,-2.940082528056271e-8,0.0038869241473787107,1.4569552475180457e-6,-2.9404819127186324e-8,0.0038874085176017156,1.5809669809562609e-6,-2.9645564220367717e-8,0.003887786800305342,1.7780034980890623e-6,-3.002832302171855e-8,0.0038880447159318995,1.9850173646662214e-6,-3.0430573951043864e-8,0.0038881971924163384,2.1420596256770285e-6,-3.073574438290413e-8,0.003888280961175994,2.205781072292864e-6,-3.085948449380518e-8,0.0038883435694981065,2.1568374784550173e-6,-3.076410840731744e-8,0.0038884319296096136,2.0009593416802778e-6,-3.0460718017368735e-8,0.00388858281744708,1.7646673454508626e-6,-3.000089846925649e-8,0.003888816937092785,1.487387634284406e-6,-2.9461380448588014e-8,0.003889137213009564,1.2122368285186793e-6,-2.8926083312790018e-8,0.0038895308769200843,9.77741933194379e-7,-2.8469964105098837e-8,0.0038899740437511265,8.120453633245923e-7,-2.81477220260484e-8,0.003890437171818333,7.300902557734322e-7,-2.7988343358411724e-8,0.0038908900772970704,7.333723847624609e-7,-2.7994672649499975e-8,0.0038913058202770783,8.11313345377628e-7,-2.8146131740211625e-8,0.003891663485624368,9.432958331578632e-7,-2.8402680159512044e-8,0.0038919502946732623,1.1008399990349611e-6,-2.8708996787877187e-8,0.0038921635340459903,1.2499486900889057e-6,-2.8998973546822423e-8,0.0038923125934744473,1.3541502616078596e-6,-2.9201603267134142e-8,0.0038924208408559866,1.379197734291158e-6,-2.9250157793629576e-8,0.0038925260361622285,1.3003034856014153e-6,-2.909634192665132e-8,0.0038926769630940033,1.1115916402400212e-6,-2.8728743103664676e-8,0.0038929238963934187,8.34996763450161e-7,-2.819013439953649e-8,0.003893302729372596,5.229491681716229e-7,-2.7582633768285374e-8,0.0038938176635446077,2.486270920040773e-7,-2.704868519022275e-8,0.0038944323474479204,8.290889866841129e-8,-2.6726217478885122e-8,0.0038950779585628413,6.71542862886964e-8,-2.6695708784190685e-8,0.0038956768103849595,1.9679611586948285e-7,-2.694825472718397e-8,0.003896169311776245,4.2495370109331924e-7,-2.73925766726845e-8,0.003896530677936019,6.822594553111313e-7,-2.7893606935094835e-8,0.0038967721729981984,9.007324311420936e-7,-2.8318972956552194e-8,0.003896930972109137,1.0312737312306008e-6,-2.8573056292209646e-8,0.0038970560356940956,1.0512333616440805e-6,-2.8611714898809007e-8,0.0038971954492596143,9.637576168076825e-7,-2.84410251401411e-8,0.0038973875128366286,7.922909732076531e-7,-2.8106623400673385e-8,0.003897655773663217,5.73039745366953e-7,-2.7679078820458593e-8,0.0038980074203048315,3.470975623162463e-7,-2.723855936562174e-8,0.003898434383602654,1.532557749678879e-7,-2.686076811069166e-8,0.003898916483642837,2.2273778031217942e-8,-2.6605698033749048e-8,0.003899425869944706,-2.6879705272445377e-8,-2.651026260606674e-8,0.003899931946443452,1.135752503116599e-8,-2.658517606455315e-8,0.003900405988380751,1.2952483923987927e-7,-2.6815784333920333e-8,0.0039008248607193337,3.0902597073996624e-7,-2.7165815642283763e-8,0.0039011736945926885,5.228355224148576e-7,-2.7582659172522265e-8,0.003901447733469793,7.385703341824681e-7,-2.800327930437387e-8,0.0039016535931530446,9.218576909926763e-7,-2.8360689234556944e-8,0.003901810063641041,1.0402342282423203e-6,-2.8591513682344532e-8,0.0039019482346590566,1.068114437545263e-6,-2.8645727584383664e-8,0.0039021099156309434,9.933162871447647e-7,-2.8499486010026745e-8,0.0039023425147539973,8.245733393134014e-7,-2.816985246159411e-8,0.0039026886667243655,5.973876226969504e-7,-2.7726207946250197e-8,0.0039031709184319144,3.732053312467776e-7,-2.728856993304565e-8,0.003903776436955178,2.2643689124575264e-7,-2.7002203145251322e-8,0.0039044517336320776,2.1908852626009318e-7,-2.6988107235954432e-8,0.0039051160269753435,3.7343990320735743e-7,-2.728970832405026e-8,0.0039056904602020087,6.597257455398579e-7,-2.7848816986833218e-8,0.0039061274952976715,1.008182754458275e-6,-2.8529159419230002e-8,0.003906424029832539,1.337864454440272e-6,-2.917267690733211e-8,0.0039066143239121455,1.584673185538172e-6,-2.9654276855512307e-8,0.003906751629333246,1.7160417124478927e-6,-2.991045051383723e-8,0.003906889981347287,1.7312807173328777e-6,-2.993987957694521e-8,0.003907072257425082,1.6535639424178371e-6,-2.978777180552823e-8,0.003907324953080964,1.5196860399174986e-6,-2.9525923596991393e-8,0.003907657617907691,1.3710174126904936e-6,-2.9235136326534077e-8,0.003908064791635279,1.246627938272527e-6,-2.8991808582392042e-8,0.003908529121213566,1.178355331974727e-6,-2.8858246582644022e-8,0.0039090251008069895,1.1874723538953122e-6,-2.8876064406570793e-8,0.0039095231741027164,1.2828026766380307e-6,-2.9062457134925734e-8,0.003909993971965604,1.4602429723720258e-6,-2.940930205385144e-8,0.003910412376088683,1.7037257014122688e-6,-2.9885126077279e-8,0.003910760972899444,1.9875614267849495e-6,-3.043974711070414e-8,0.003911032543742426,2.279815827653438e-6,-3.1010855542352346e-8,0.003911231493909528,2.5463069029857515e-6,-3.153173238001942e-8,0.003911374222650876,2.7549910335127733e-6,-3.193972170951845e-8,0.003911488384327841,2.880624085469085e-6,-3.218531726661661e-8,0.003911610864352182,2.909667982481857e-6,-3.224183476086153e-8,0.003911783886839922,2.84536194505679e-6,-3.211546429333361e-8,0.003912048236733935,2.7121190655270843e-6,-3.1853969077637996e-8,0.003912432956737331,2.5569177610852085e-6,-3.1549408250500364e-8,0.003912942711842446,2.4439948046497946e-6,-3.13276712957956e-8,0.003913547494005578,2.439525781374463e-6,-3.1318405148871284e-8,0.003914182801008766,2.587612510786791e-6,-3.160796365905382e-8,0.00391476670682019,2.8876813198392386e-6,-3.219515496038958e-8,0.003915229878465214,3.288612511808708e-6,-3.297977441605243e-8,0.00391554262842195,3.707168304776008e-6,-3.3798756641249064e-8,0.003915722816780819,4.061134667377567e-6,-3.449114586943816e-8,0.0039158221519932715,4.297554871760769e-6,-3.495337435976911e-8,0.003915902612886247,4.403020028690837e-6,-3.5159304982510026e-8,0.003916016771863963,4.3972762305046315e-6,-3.51476057496457e-8,0.003916198069716032,4.319425094326008e-6,-3.499472431255641e-8,0.003916459596845121,4.214738888555488e-6,-3.4789167335719515e-8,0.003916797401300606,4.125457418511884e-6,-3.46135897824814e-8,0.003917195121291198,4.085545626385126e-6,-3.453456558879286e-8,0.003917628376812855,4.118078743411213e-6,-3.459741276197698e-8,0.00391806864547818,4.234057023541767e-6,-3.4823781820516536e-8,0.0039184868549933145,4.432100524385358e-6,-3.521100643460954e-8,0.003918856894454718,4.698942282664103e-6,-3.5733089149345645e-8,0.003919159062997544,5.010909292212568e-6,-3.634366398414867e-8,0.003919383180819294,5.336673361384431e-6,-3.698142096457321e-8,0.003919530829987342,5.641296545403175e-6,-3.757799607711368e-8,0.0039196162213828035,5.891218249778886e-6,-3.8067651883344666e-8,0.0039196653747344806,6.059652716046391e-6,-3.8397777275256785E-08,0.003919713456096689,6.131770978781817e-6,-3.853905013964011e-8,0.003919800276775679,6.108967573413839e-6,-3.849390802272054e-8,0.003919964045053333,6.011521522845613e-6,-3.830191792649171e-8,0.003920233494230299,5.878730153642338e-6,-3.804014811232711e-8,0.003920618992780859,5.764983763374026e-6,-3.781547454419313e-8,0.00392110459247313,5.730010496430183e-6,-3.7745352062984805e-8,0.0039216448866342514,5.822802882578071e-6,-3.792614771435408e-8,0.00392217165582521,6.062441369382195e-6,-3.839540769990899e-8,0.003922612784897084,6.424343781374744e-6,-3.910483982583697e-8,0.003922918279510956,6.842549813656679e-6,-3.9924854655693004e-8,0.0039230801956615,7.231684285990491e-6,-4.068779460101494e-8,0.003923134148926395,7.5187772284920845e-6,-4.125047503163074e-8,0.003923141833425455,7.667435752105012e-6,-4.1541586012182924e-8,0.003923166269325025,7.683166138878378e-6,-4.1571999586433136e-8,0.003923253198934327,7.602234341381125e-6,-4.1412808153840096e-8,0.00392342418128479,7.474463541507354e-6,-4.1161593315289665e-8,0.003923678875818511,7.348774715809465e-6,-4.091417238620076e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json new file mode 100644 index 000000000..509a7d10c --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":24000,"numberOfSamples":1000,"samples":[0.003924001349468574,7.264665173102422e-6,-4.0747989552475184e-8,0.003924366586169156,7.248790607297544e-6,-4.0715438046854016e-8,0.0039247455983737215,7.31449699975775e-6,-4.084288354023843e-8,0.003925109134008881,7.462510402409807e-6,-4.1131928535769936e-8,0.003925430619334403,7.681943579661476e-6,-4.156132990390201e-8,0.003925688916221978,7.9515663056217e-6,-4.208949033990723e-8,0.003925871139610513,8.241724001493012e-6,-4.26582543580377e-8,0.003925975343160025,8.517452558510482e-6,-4.319903585164052e-8,0.003926012408625573,8.743124708146312e-6,-4.364190844664137e-8,0.0039260062351111815,8.888393011087458e-6,-4.392721436513869e-8,0.0039259914819518545,8.934553769547599e-6,-4.401802379763859e-8,0.003926008601681654,8.87995541059872e-6,-4.391078722925618e-8,0.003926096603853184,8.742886424791559e-6,-4.364111335220435e-8,0.003926284700461693,8.560700555841224e-6,-4.328218871863738e-8,0.003926584419799495,8.38460458304358e-6,-4.293463839580567e-8,0.003926983982520055,8.27018419490559e-6,-4.270791978660203e-8,0.003927446933578442,8.26450952654458e-6,-4.269489056436631e-8,0.003927917035426422,8.392007583137403e-6,-4.294388907717355e-8,0.003928330548152765,8.643213090672838e-6,-4.343648270886796e-8,0.003928634404239271,8.97202431142347e-6,-4.4082022548759444e-8,0.003928804571353034,9.306016764539644e-6,-4.473798796749362e-8,0.003928855847415065,9.568840746130847e-6,-4.525415343428905e-8,0.0039288366735898165,9.705875342600683e-6,-4.552310678124801e-8,0.003928810708523999,9.70075387287824e-6,-4.5512697637589113e-8,0.003928834802404048,9.575566014901797e-6,-4.526632710582171e-8,0.003928943827175889,9.377534807333275e-6,-4.487669985208786e-8,0.003929146690245219,9.161289638700064e-6,-4.445102369531869e-8,0.003929431010766044,8.97479258527682e-6,-4.408344678591044e-8,0.003929771249439363,8.851942834798086e-6,-4.3840594450064106e-8,0.003930136299987928,8.810775413828423e-6,-4.375803213461219e-8,0.0039304949376361325,8.854733935909684e-6,-4.3842713182813283e-8,0.003930819251349883,8.97490756364095e-6,-4.4077307493303816e-8,0.003931086911330102,9.152169769274805e-6,-4.442436000944777e-8,0.0039312831240633185,9.359120650070548e-6,-4.4830096409770687e-8,0.003931402736278697,9.562353565431697e-6,-4.522888479978551e-8,0.0039314523679986994,9.725809891954073e-6,-4.554983213541918e-8,0.003931451821677968,9.81581544058732e-6,-4.572667330703574e-8,0.0039314335373014,9.807739373223678e-6,-4.5710846370490446e-8,0.003931438847422937,9.693139686684408e-6,-4.5485541526462294e-8,0.003931510540598468,9.485126741041124e-6,-4.507628154878644e-8,0.0039316827752822045,9.21922505098598e-6,-4.455269004539336e-8,0.003931971055312627,8.947933809120098e-6,-4.401789076476449e-8,0.0039323657307728825,8.729358784614993e-6,-4.358622919525109e-8,0.003932831731699162,8.612643855888081e-6,-4.335462841531593e-8,0.003933315344617792,8.62429738570606e-6,-4.337560654570439e-8,0.003933756715300976,8.759463349484685e-6,-4.363994931455601e-8,0.003934105106059232,8.981053856326873e-6,-4.407485811762412e-8,0.003934332913929343,9.227877438043526e-6,-4.4559891225405716e-8,0.0039344440871193175,9.430525068002884e-6,-4.4958286576969273e-8,0.003934473402796723,9.530858688927084e-6,-4.5155432327327116e-8,0.003934475863914978,9.498545685117723e-6,-4.509149078422063e-8,0.003934509718222492,9.33827824991407e-6,-4.47756142603218e-8,0.003934619792227327,9.085158588882537e-6,-4.427682786107174e-8,0.003934827415641757,8.791280140237335e-6,-4.369760258181166e-8,0.00393512933343696,8.510038014808986e-6,-4.31429928445453e-8,0.0039355035636141015,8.284081649552148e-6,-4.269695029529051e-8,0.003935918018543304,8.139406686077033e-6,-4.241070000822375e-8,0.003936338353846052,8.084775818140693e-6,-4.2301584302013366e-8,0.003936733445406277,8.114176353890525e-6,-4.235787766689351e-8,0.0039370785461212525,8.210197709692123e-6,-4.254541828860122e-8,0.003937356971767464,8.347130480599071e-6,-4.281369430236631e-8,0.003937561263758311,8.493567783692922e-6,-4.310094762045791e-8,0.003937694438031615,8.615002843389891e-6,-4.333926631812809e-8,0.003937771330134241,8.67725650150846e-6,-4.346131796842194e-8,0.003937819322870859,8.651508326884634e-6,-4.3410256470381495e-8,0.003937877058427044,8.521099894445721e-6,-4.3153137231452934e-8,0.003937989463885939,8.288931327634417e-6,-4.269550841092151e-8,0.003938198228981029,7.982475866423666e-6,-4.209131265757179e-8,0.003938529202136906,7.652421272823026e-6,-4.144024574779018e-8,0.003938981172624146,7.362348631112524e-6,-4.086748201679056e-8,0.003939521858698951,7.171057158621901e-6,-4.048891544782165e-8,0.003940094615197016,7.113880374154503e-6,-4.0374365707466556e-8,0.0039406342007793785,7.190918645244552e-6,-4.052432522098116e-8,0.003941085456845227,7.366953288287352e-6,-4.086966435709471e-8,0.003941417979926735,7.582297213206803e-6,-4.1292902967637985e-8,0.003941632550878733,7.769811582108233e-6,-4.1661704613367465e-8,0.0039417586573959,7.872367731094012e-6,-4.186332403044912e-8,0.00394184498935138,7.856147459827803e-6,-4.183089280710224e-8,0.003941946090056001,7.716963831159671e-6,-4.155595404739903e-8,0.003942108844751583,7.478721284531861e-6,-4.1085488184775086e-8,0.003942362280649743,7.1851264448118275e-6,-4.0505610055412035e-8,0.003942713056297738,6.887545188092401e-6,-3.9917635489093076e-8,0.003943147094181412,6.63285056822077e-6,-3.9414089140640513e-8,0.00394363576055283,6.45458746493619e-6,-3.906122521138246e-8,0.003944143851940386,6.3689698481875325e-6,-3.889108334065558e-8,0.003944636869159611,6.375238897636767e-6,-3.89021835862169e-8,0.003945086178514301,6.458758785510235e-6,-3.906566285644976e-8,0.003945471885644119,6.595087712929455e-6,-3.9333345409787816e-8,0.003945784062145488,6.75381682031183e-6,-3.96453240801719e-8,0.0039460231949269235,6.9018086924852714e-6,-3.993631138475404e-8,0.003946200484182494,7.0061699834473986e-6,-4.0141443325436696e-8,0.003946338123548155,7.037663514739489e-6,-4.020297398706976e-8,0.003946469030517169,6.975321308310946e-6,-4.007939202239149e-8,0.0039466347171631935,6.8125615268396335e-6,-3.9757548945000605e-8,0.003946879526314831,6.563781000662389e-6,-3.926572917290399e-8,0.003947240113576192,6.26832771088985e-6,-3.8681519815076635e-8,0.00394773162032693,5.987155767768718e-6,-3.8125213666258697e-8,0.00394833606959585,5.788678511154436e-6,-3.7731893344309e-8,0.0039490010315956,5.726070108611301e-6,-3.760663760887806e-8,0.003949653254363835,5.815841448021564e-6,-3.778221021701663e-8,0.003950222933085804,6.029784395114221e-6,-3.8203094717768544e-8,0.003950666763769117,6.305251283013329e-6,-3.874572335149639e-8,0.003950978997636163,6.567633107643007e-6,-3.926282625402561e-8,0.003951187946508848,6.753390037519353e-6,-3.9628897768472654e-8,0.003951342970045106,6.82499234587586e-6,-3.9769697357740485e-8,0.00395149899125544,6.775528812781524e-6,-3.9671369919487616e-8,0.003951703461040263,6.625121099539185e-6,-3.9373432374454456e-8,0.003951987858015527,6.412572497682793e-6,-3.8952382552237284e-8,0.003952363959429004,6.185216687773946e-6,-3.8501729618800614e-8,0.003952824318389738,5.9890392604355895e-6,-3.811248119847719e-8,0.003953346084383744,5.8605580191022866e-6,-3.7857015174201214e-8,0.003953896995412957,5.821583390244034e-6,-3.777860582122305e-8,0.003954442092751837,5.877359468380301e-6,-3.7887672658214384e-8,0.003954949781935346,6.017769412892624e-6,-3.816417373000497e-8,0.003955396289717578,6.220694202785564e-6,-3.856432318594815e-8,0.003955768174884203,6.456367672750993e-6,-3.902927598979735e-8,0.003956063179994125,6.691705169501888e-6,-3.949369249275251e-8,0.003956290051901221,6.894111093467348e-6,-3.989319559509603e-8,0.003956467854520423,7.034854759428582e-6,-4.017095218887658e-8,0.0039566249669400816,7.092436622888951e-6,-4.0284290088954386e-8,0.003956797478346305,7.056481487425291e-6,-4.021245059161304e-8,0.003957025994777186,6.932388600346256e-6,-3.996590300588929e-8,0.003957349414623954,6.7458410699163445e-6,-3.959537173887109e-8,0.003957794778545756,6.544498614818847e-6,-3.9195220973930975e-8,0.003958364489074411,6.392651543668574e-6,-3.889283923884582e-8,0.003959026190955713,6.355295837039837e-6,-3.881705762450065e-8,0.003959713978117959,6.473712946892012e-6,-3.904975388942963e-8,0.003960346658841707,6.743821961530491e-6,-3.958294960032686e-8,0.003960857575990237,7.112323350996538e-6,-4.031115186969541e-8,0.0039612197932018854,7.496174919039376e-6,-4.10699402100219e-8,0.003961452306299503,7.814588012843276e-6,-4.169936348567501e-8,0.003961606574536528,8.01530911676443e-6,-4.209596468724888e-8,0.003961744529834369,8.08439052342442e-6,-4.223205431160473e-8,0.003961919898203691,8.041055608842375e-6,-4.2145503385516964e-8,0.003962167934107929,7.92540646416268e-6,-4.1915471608097986e-8,0.003962502766954194,7.785608877629877e-6,-4.1637175222764884e-8,0.003962919504652272,7.667738377555936e-6,-4.140189174962666e-8,0.00396339860412415,7.6088866362392024e-6,-4.128330394764023e-8,0.003963911081389532,7.633028280277278e-6,-4.132919427751386e-8,0.003964423927548092,7.749152914604407e-6,-4.1557593105492124e-8,0.003964905318504584,7.951432583245587e-6,-4.1957026443146924e-8,0.003965329172806784,8.221199670866641e-6,-4.249046155503989e-8,0.0039656786145144665,8.530378408627668e-6,-4.310220299700377e-8,0.003965947990889918,8.845841392371245e-6,-4.37266017606286e-8,0.003966143368775138,9.134007815143316e-6,-4.429715430491004e-8,0.003966281763390242,9.365126081644348e-6,-4.475489492347632e-8,0.003966389432433808,9.517028569907252e-6,-4.50557398961551e-8,0.0039664994413490615,9.578380169243303e-6,-4.517691762130738e-8,0.003966648478154706,9.551562333274848e-6,-4.512279719134597e-8,0.003966872442131501,9.455213790585541e-6,-4.493010285476397e-8,0.003967200009096507,9.325645135291122e-6,-4.4670856835179115e-8,0.003967643942139405,9.215087087823338e-6,-4.4448923046119814e-8,0.0039681916280942,9.183905742556441e-6,-4.438445858297688e-8,0.003968799131557344,9.284666046934797e-6,-4.4582129386551373e-8,0.003969395714603861,9.540259293398974e-6,-4.508756258136944e-8,0.0039699037202130414,9.926237027984614e-6,-4.585222439096121e-8,0.003970268552470416,1.0371684773005795e-5,-4.673521137896835e-8,0.003970482142169558,1.078412203468818e-5,-4.755282003004367e-8,0.0039705843561092195,1.10860283048514e-5,-4.815115477383973e-8,0.003970642360386332,1.1241376583518066e-5,-4.845874452293147e-8,0.003970722821708415,1.125981504453911e-5,-4.8494689966727235e-8,0.0039708723071808566,1.11829441885822e-5,-4.834134805360363e-8,0.003971110919069601,1.1065211622363857e-5,-4.810650188240576e-8,0.003971435431608885,1.0958632735931508e-5,-4.7893216781566505e-8,0.003971826265812919,1.0903990546723049e-5,-4.778250186894762e-8,0.003972254586729742,1.0927283245886881e-5,-4.782624238951511e-8,0.003972688105211575,1.1039249843146977e-5,-4.8046116883982526e-8,0.0039730955939297884,1.1236386675066273e-5,-4.843545087392066e-8,0.00397345054557075,1.1502799362280447e-5,-4.8962807876693554e-8,0.003973734208169738,1.1812792318729848e-5,-4.9577158828296015e-8,0.003973937950405579,1.2134265111817801e-5,-5.021471558067026e-8,0.003974064679006379,1.2432918992578263e-5,-5.080734411592102e-8,0.003974128944467808,1.2676973960732623e-5,-5.129190491821449e-8,0.003974155556457899,1.2841827542246017e-5,-5.1619414061577866e-8,0.0039741767870729505,1.2914097734147498e-5,-5.1763003268766806e-8,0.003974228381508199,1.2894585117898373e-5,-5.1723840310494984e-8,0.0039743446740342315,1.2799778794775203e-5,-5.1534278839920305e-8,0.003974553031218095,1.2661651645222267e-5,-5.1257656952560386e-8,0.00397486770830553,1.252526192551265e-5,-5.0983665712715536e-8,0.003975283624309093,1.244306855380536e-5,-5.081702986908633e-8,0.003975771762776541,1.2464764616558008e-5,-5.085712444532777e-8,0.003976279358595454,1.2622668128129355e-5,-5.1168686224427466e-8,0.003976738806949802,1.2915806066879637e-5,-5.174997205879499e-8,0.00397708712480231,1.3300494013523065e-5,-5.251398213335525e-8,0.003977290708495544,1.3697307875515348e-5,-5.3302462984544026e-8,0.003977362035950759,1.4017395454687275e-5,-5.393846232144907e-8,0.003977355858695399,1.4196719691249908e-5,-5.429455632185751e-8,0.003977345605575303,1.4218583669657343e-5,-5.433755885903962e-8,0.003977394646971235,1.4112859234273654e-5,-5.412679978292305e-8,0.003977538120767945,1.3937040535825622e-5,-5.377637606636613e-8,0.003977780313015663,1.3753373811437281e-5,-5.3409789340420174E-08,0.0039781024005110955,1.361276026355333e-5,-5.312812805725196e-8,0.003978473023124186,1.3547849219766439e-5,-5.299644136530384e-8,0.003978857094370713,1.3572654477401475e-5,-5.304293291262342e-8,0.00397922161367756,1.3685187261991948e-5,-5.326404503945597e-8,0.0039795391090315735,1.387078103509612e-5,-5.363091484811033e-8,0.003979789799970764,1.4105237357237993e-5,-5.4095556401576257e-8,0.0039799632178153825,1.4357845076354077e-5,-5.45968922420498e-8,0.003980059500806607,1.4594673222991368e-5,-5.506737604277994e-8,0.003980090142970023,1.4782539911570218e-5,-5.5440930753357645e-8,0.003980077642195864,1.4893710156689642e-5,-5.566226817310781e-8,0.003980053468419345,1.4910803096605801e-5,-5.56965853216742e-8,0.0039800541106269635,1.4830983623911673e-5,-5.553787293347947e-8,0.0039801154418540406,1.466838142817004e-5,-5.5213797919344863e-8,0.003980266139921954,1.4453775388946017e-5,-5.478524269653043e-8,0.003980521287767714,1.4231023369268172e-5,-5.4339391697161045e-8,0.003980877353979621,1.4050315119139707e-5,-5.397640762167942e-8,0.003981309717837675,1.395868469966156e-5,-5.3790488944141864e-8,0.003981774090037387,1.3988628469092594e-5,-5.3846999457069773e-8,0.003982213281677193,1.4146764402475845e-5,-5.415961657859051e-8,0.003982570011449755,1.4406143821260008e-5,-5.467482526558627e-8,0.003982804131697453,1.47071498764841e-5,-5.527369286809923e-8,0.003982908778352366,1.4970992193698437e-5,-5.579891732093303e-8,0.003982916824397885,1.5124448073961797e-5,-5.6104337480320424e-8,0.003982891263406429,1.5126160410236833e-5,-5.610742482232311e-8,0.00398290215454356,1.4980743595872157e-5,-5.581730514030468e-8,0.0039830019202654705,1.4733222541316497e-5,-5.532354528930037e-8,0.003983211326857249,1.4448727937037265e-5,-5.4755680309660146e-8,0.003983520104257227,1.4189885389384998e-5,-5.423828496751849e-8,0.003983897259054235,1.4001826693159665e-5,-5.386125283385029e-8,0.003984303459136277,1.3907216352427944e-5,-5.366993275012876e-8,0.003984700579759181,1.3908279420985249e-5,-5.3669095525382856e-8,0.003985057207973846,1.399170223752423e-5,-5.3832563887307894e-8,0.00398535107067196,1.4133635001783242e-5,-5.411306762933109e-8,0.003985569881970607,1.4303771905497005e-5,-5.445033306625039e-8,0.0039857117052029475,1.4468652878353123e-5,-5.4777689929636526e-8,0.003985785248092382,1.4594817843348775e-5,-5.502840613731594e-8,0.003985809897015252,1.4652472383143383e-5,-5.514301337657362e-8,0.003985814826438397,1.4619974837042523e-5,-5.5078226609295487e-8,0.0039858363205629195,1.4488750116827408e-5,-5.481669944437828e-8,0.003985912714645442,1.426742833517886e-5,-5.4375274115178266e-8,0.003986077146685968,1.3983468945714063e-5,-5.380829619913038e-8,0.003986349418788184,1.3680607655818763e-5,-5.320267121504874e-8,0.003986729243878734,1.3411429492368585e-5,-5.266321054783875e-8,0.003987193368925278,1.3226052188088213e-5,-5.229014065094215e-8,0.0039876982347206835,1.3159498917999302e-5,-5.2153854337675876E-08,0.00398818833657533,1.3221106579292605e-5,-5.227358445765773e-8,0.003988608901007278,1.338916970518754e-5,-5.260647556617648e-8,0.003988920183252699,1.3613194193081244e-5,-5.3051916801022585e-8,0.003989109646982799,1.3824650626505712e-5,-5.347299765131535e-8,0.003989197746223967,1.3954767944424933e-5,-5.373215558025435e-8,0.003989233827788415,1.3954763566654355e-5,-5.373171638754063e-8,0.003989281800794039,1.3811236850979288e-5,-5.3444699852450874e-8,0.003989400134260441,1.3549823535973889e-5,-5.292209959911019e-8,0.003989624365284392,1.3225093106393183e-5,-5.227268643727621e-8,0.003989959279866753,1.290162083662521e-5,-5.1625249279043706e-8,0.0039903824814073756,1.2635093520500604e-5,-5.109093995112096e-8,0.00399085532254792,1.2460509228031144e-5,-5.0739748289693165e-8,0.003991335096141489,1.2389290014694273e-5,-5.0594703090057124e-8,0.003991784193685639,1.2412788238110021e-5,-5.063879306432595e-8,0.0039921750376531425,1.2508400657934924e-5,-5.082710027342623e-8,0.0039924916979013365,1.264552801312763e-5,-5.109866380876292e-8,0.003992729733420645,1.2790244411010073e-5,-5.138580639540977e-8,0.003992895505481774,1.2908774182592685e-5,-5.162109554086806e-8,0.003993005539841018,1.2970483448082949e-5,-5.1743325651077926e-8,0.003993085805853583,1.2951169554634605e-5,-5.170407528089941e-8,0.0039931702182065525,1.2837098930575677e-5,-5.1475750096119304e-8,0.003993297356816803,1.2629535465925717e-5,-5.106062222453551e-8,0.003993504537036869,1.2348458326471559e-5,-5.04982889205154e-8,0.00399381928261621,1.2033164964636035e-5,-4.9866956012253766e-8,0.003994250001187529,1.1737322154317254e-5,-4.9273662215669775e-8,0.0039947794474397376,1.1517572315967707e-5,-4.883161802180583e-8,0.003995364932969854,1.1417909076784898e-5,-4.8629022529340004e-8,0.0039959471867255245,1.145512467560501e-5,-4.8699907040692296e-8,0.003996465923696541,1.1611411554188564e-5,-4.9009176717670445e-8,0.003996876828671035,1.1837637422183225e-5,-4.9458966925161574e-8,0.003997163971009506,1.2066380201857806e-5,-4.991458667779847e-8,0.003997343759283495,1.2230228260355551e-5,-5.024110820721207e-8,0.003997459714537061,1.227962356731739e-5,-5.033913205513782e-8,0.0039975700174394516,1.2195246540345806e-5,-5.016966528746188e-8,0.0039977315793668896,1.199171433994848e-5,-4.9761614483588085e-8,0.003997985303974457,1.1711837911922054e-5,-4.920037428897476e-8,0.003998346858193554,1.1413566865496914e-5,-4.8601769213070115e-8,0.0039988053495900785,1.1154143067304714e-5,-4.808037527313077e-8,0.0039993293627035445,1.0976671983429418e-5,-4.7722620398013583e-8,0.003999877225762814,1.0902767894712806e-5,-4.7571985490559816e-8,0.004000407493370264,1.0931979187466173e-5,-4.762776490445662e-8,0.00400088668699902,1.1046120607170104e-5,-4.785368769200271e-8,0.0040012933178902805,1.1215681826101956e-5,-4.8190753288722657e-8,0.004001618824597613,1.140602944436198e-5,-4.856968419517292e-8,0.004001866716617343,1.1582292382143262e-5,-4.8920729394387654e-8,0.004002051089467816,1.1712900988527266e-5,-4.9180732644461024e-8,0.004002195134543225,1.1772393926335084e-5,-4.9298705411811596e-8,0.0040023296147842545,1.1744241358596293e-5,-4.9241438831947997e-8,0.004002490702025333,1.1624164492064202e-5,-4.9000150214148706e-8,0.004002716177242634,1.1423787492992013e-5,-4.859784391910101e-8,0.0040030390227214704,1.1173356864132723e-5,-4.8094833920023865e-8,0.004003478361347815,1.0920997712239193e-5,-4.7587334303852796e-8,0.004004029802038545,1.0725563863908767e-5,-4.719320099784125e-8,0.004004659792221574,1.0641953511935584e-5,-4.7022548424382676e-8,0.004005309358395405,1.0702231547952575e-5,-4.713991105371558e-8,0.004005909305357476,1.0900742430031743e-5,-4.7534332339053704e-8,0.004006402231050277,1.1192022790909333e-5,-4.8115061170983004e-8,0.004006761493609258,1.1504328555145381e-5,-4.8738556290387605e-8,0.004006998416788491,1.1762810600434922e-5,-4.925487801263246e-8,0.0040071557972175655,1.1911802199676452e-5,-4.955234189469917e-8,0.004007292492485376,1.1928068755813912e-5,-4.9584090451901684e-8,0.004007466154921649,1.182270536529946e-5,-4.9371962164986925e-8,0.004007719484345561,1.1633960677447274e-5,-4.8992235679285965e-8,0.004008072516982853,1.1415035698476774e-5,-4.855132546462214e-8,0.004008521247009628,1.1220739757355388e-5,-4.81591306861145e-8,0.004009041556486812,1.1095986552782165e-5,-4.790595409748483e-8,0.004009596684482728,1.1068126254001404e-5,-4.784699794194256e-8,0.004010146061004549,1.1144061978931795e-5,-4.799641499742937e-8,0.0040106533603855915,1.1311869844993711e-5,-4.833044905420133e-8,0.004011092236707525,1.1545566812726804e-5,-4.8796997573800546e-8,0.004011449171177877,1.1811239466230054e-5,-4.9327987188523245e-8,0.004011723764818403,1.2072971677857698e-5,-4.985134835693644e-8,0.00401192736389657,1.2297623888833959e-5,-5.0300619813788786e-8,0.004012080963416897,1.2458294160137046e-5,-5.06218316152855e-8,0.004012212952149902,1.2536886563441079e-5,-5.077857415701251e-8,0.004012356748830488,1.2526361690877996e-5,-5.075648134300845e-8,0.004012547921684051,1.2433048238960548e-5,-5.0567928963629637e-8,0.0040128199805693305,1.2278886932150372e-5,-5.025666471468604e-8,0.004013197985529161,1.2102470950470938e-5,-4.990002190519058e-8,0.00401369000353784,1.1956510006150005e-5,-4.960388878819715e-8,0.004014278532066863,1.1898883530667995e-5,-4.948472066423443e-8,0.0040149167491389135,1.197622246061075e-5,-4.963648586630433e-8,0.004015535619726837,1.2203997061740317e-5,-5.0090569001978953e-8,0.004016064005360639,1.2553240036393509e-5,-5.0789018255737813e-8,0.0040164548830214815,1.2954750430225737e-5,-5.1592962190804215e-8,0.004016703733644348,1.3322431746732769e-5,-5.232951731508461e-8,0.004016848431434354,1.3584310465564186e-5,-5.2854110685949694e-8,0.004016951977140229,1.3704978067918915e-5,-5.309550581731473e-8,0.00401707918422125,1.3690726517722423e-5,-5.3066050186417026e-8,0.004017278464444657,1.3580022117076173e-5,-5.284257367174307e-8,0.004017573349390648,1.3427603643939568e-5,-5.253461517336548e-8,0.004017962524787026,1.3289293461804937e-5,-5.2254123260796106e-8,0.004018424992325505,1.3210932934703492e-5,-5.2093339215260626e-8,0.0040189273729024705,1.3221997414880813e-5,-5.211190437947683e-8,0.0040194315062708425,1.3333214209773679e-5,-5.2331872879317006e-8,0.004019901334926071,1.3537385768781908e-5,-5.273915282943784e-8,0.00402030839443015,1.3812681913253474e-5,-5.3290015781132485e-8,0.004020635440219238,1.4127527132908653e-5,-5.392095666905157e-8,0.004020878035146411,1.4446146519830484e-5,-5.455996088115213e-8,0.004021044226821732,1.473392798977689e-5,-5.513737746601209e-8,0.00402115275112109,1.496191131793451e-5,-5.559493860655362e-8,0.004021230393628464,1.5110074592057919e-5,-5.589227823087387e-8,0.004021308993990323,1.5169566143298608e-5,-5.601133518705951e-8,0.004021422225284333,1.5144214158221058e-5,-5.595940175161358e-8,0.0040216019835709,1.505150937068162e-5,-5.57712373201424e-8,0.004021873939755527,1.4922916833095616e-5,-5.550989215428107e-8,0.0040222517467002885,1.4802621499919506e-5,-5.5264327043482085e-8,0.004022730175355548,1.4742845077977562e-5,-5.513999395696767e-8,0.00402327924617558,1.4793651408929851e-5,-5.5238179247849234e-8,0.004023843665981839,1.498685836194858e-5,-5.562340967782772e-8,0.004024352851506316,1.5318263529964064e-5,-5.62874975195311e-8,0.004024743118745088,1.573836892528872e-5,-5.7130821512435726e-8,0.004024984194842726,1.6162535861771282e-5,-5.7982877436069443E-08,0.004025094377176705,1.6501026274800637e-5,-5.866291758713605e-8,0.004025133037057492,1.6693810177365013e-5,-5.9050065212816505e-8,0.0040251747474465615,1.6730082192383597e-5,-5.912247029379822e-8,0.004025281332087344,1.6644195416193686e-5,-5.894897656672424e-8,0.004025485746450353,1.6495866969054968e-5,-5.864930998217878e-8,0.004025790429201538,1.634835179138792e-5,-5.8350370181822665e-8,0.0040261746462862255,1.6253223052331517e-5,-5.815584387978385e-8,0.0040266044641294775,1.624327250382378e-5,-5.813200951807451e-8,0.004027041638836209,1.633135361213576e-5,-5.8305293951082345e-8,0.00402745025711566,1.6512469372403883e-5,-5.866622925242898e-8,0.00402780134494779,1.6767326438795646e-5,-5.917637987828972e-8,0.004028075926393701,1.7066612366788847e-5,-5.977686171643531e-8,0.004028266748303052,1.7375686093179322e-5,-6.039784671300595e-8,0.004028378700267617,1.7659404592882538e-5,-6.096841423803015e-8,0.004028427921096438,1.7886793273255926e-5,-6.142604364033798e-8,0.00402843964084909,1.8035151508268353e-5,-6.172486403108444e-8,0.004028445012514573,1.809312331270539e-5,-6.184175008856881e-8,0.0040284773268235005,1.8062494703952662e-5,-6.177988665082503e-8,0.004028567910222432,1.7958723498241694e-5,-6.156990468255793e-8,0.004028741861400401,1.781021131030546e-5,-6.12686094634135e-8,0.0040290136622913525,1.765619786846825e-5,-6.095496322789188e-8,0.0040293826809504,1.754280016104753e-5,-6.07222216328837e-8,0.004029829124215082,1.751619084809753e-5,-6.066410876225836e-8,0.004030312256108125,1.7612020509539247e-5,-6.085324393616324e-8,0.004030774031389632,1.7841815454699297e-5,-6.131341293797681e-8,0.00403115142107213,1.8180564860966387e-5,-6.199433879515745e-8,0.0040313974300052735,1.8563852856182064e-5,-6.27659191383855e-8,0.004031503203472192,1.8902856758312773e-5,-6.344869780801121e-8,0.004031507215610012,1.9116091643266002e-5,-6.387812802255732e-8,0.004031481930153734,1.916242569246173e-5,-6.397118926916185e-8,0.004031503768949901,1.9055383830683572e-5,-6.375504333127174e-8,0.004031624504421274,1.885153534554923e-5,-6.334344369125224e-8,0.00403185885677837,1.8623798019755862e-5,-6.288296518438462e-8,0.004032189274944319,1.8436620157024645e-5,-6.250321630029159e-8,0.004032579178971542,1.83324637336343e-5,-6.228981683190497e-8,0.004032986090714059,1.8329161981569122e-5,-6.227911243671427e-8,0.0040333708125981456,1.8423493871162983e-5,-6.246522183995398e-8,0.004033702484811329,1.8596808258675e-5,-6.281112340841897e-8,0.0040339608469825575,1.882045266602357e-5,-6.325939983367222e-8,0.004034137070431829,1.906045203237547e-5,-6.374161530130195e-8,0.004034233855241526,1.928170635220029e-5,-6.41868612531973e-8,0.004034264876079334,1.9452018078757834e-5,-6.453000617107153e-8,0.004034253391531761,1.9546047063260236e-5,-6.47197441623075e-8,0.004034229755724816,1.9548977882390267e-5,-6.472596597020264e-8,0.004034227730682795,1.9459320969577683e-5,-6.454533452522716e-8,0.004034279865723162,1.9290186380915923e-5,-6.420383235003002e-8,0.004034412486171448,1.9068594732676885e-5,-6.375547510633614e-8,0.00403464093034948,1.8832637893526655e-5,-6.327679436677401e-8,0.004034965687074627,1.8626536313167505e-5,-6.285707244922939e-8,0.004035370034247165,1.8493819644007736e-5,-6.258465123000945e-8,0.004035819874790727,1.846886648562048e-5,-6.252971679787746e-8,0.004036266904185114,1.856732169763407e-5,-6.272465029492704e-8,0.0040366565598250765,1.8777113738250836e-5,-6.31455681508602e-8,0.0040369414612311345,1.9053783781087113e-5,-6.370271942688705e-8,0.004037098344333292,1.932539834606959e-5,-6.42504851948613e-8,0.004037141902942749,1.951083270094533e-5,-6.462457097034529e-8,0.004037125865169994,1.954813798447868e-5,-6.46995458547251e-8,0.004037125861820998,1.9419995141300983e-5,-6.444028053955575e-8,0.00403721048480607,1.9160768124473176e-5,-6.391602935018678e-8,0.004037416430514758,1.88403649270376e-5,-6.326771012194285e-8,0.0040377405727112705,1.853563684839144e-5,-6.265022145619625e-8,0.004038149143064464,1.8305856043064805e-5,-6.218312567891382e-8,0.004038594479970898,1.8181596820678142e-5,-6.192833669694351e-8,0.004039029805036155,1.8165835433560526e-5,-6.189230839848963e-8,0.004039418015136255,1.8241197474729e-5,-6.204049708155263e-8,0.0040397350446880215,1.837815198734788e-5,-6.231370568667206e-8,0.004039969999138671,1.8541650006683282e-5,-6.264136381327966e-8,0.004040124041563737,1.8695860404660215e-5,-6.295108921511804e-8,0.004040209074777056,1.8807706049100226e-5,-6.317591860236914e-8,0.004040246363654397,1.88500021655281e-5,-6.32607471793734e-8,0.004040264737547788,1.8804636954320954e-5,-6.316879237455187e-8,0.004040297831687618,1.866571824947087e-5,-6.288791561688243e-8,0.004040379958326903,1.844201983765977e-5,-6.243550964565625e-8,0.004040540705219954,1.8157672301950075e-5,-6.185990253089828e-8,0.004040799030115895,1.7850119174229367e-5,-6.123634554926798e-8,0.0040411581509778,1.7564868093298403e-5,-6.065660011340943e-8,0.004041602732207329,1.734741098407994e-5,-6.021277355052825e-8,0.0040420995762303815,1.7233639004230466e-5,-5.997796689164541e-8,0.004042602323436688,1.724067110935005e-5,-5.998756494201581e-8,0.00404305992163886,1.736012884995211e-5,-6.022533875758978e-8,0.004043427966196684,1.7555910433464828e-5,-6.061865961283453e-8,0.0040436810936756275,1.7768500926616962e-5,-6.104709566844615e-8,0.004043823230883101,1.7927149455153616e-5,-6.1367140862782e-8,0.004043891164479845,1.7968977540453174e-5,-6.145110341710769e-8,0.004043947176700689,1.7860007267002482e-5,-6.122984744605595e-8,0.0040440603521150744,1.760913353792817e-5,-6.072111082777755e-8,0.004044282997667049,1.726658843338252e-5,-6.002633777071843e-8,0.004044633306112802,1.6905912165610116e-5,-5.929416783466505e-8,0.0040450925842591984,1.6598297213721576e-5,-5.866858772554347e-8,0.004045616463144047,1.6391968202125593e-5,-5.824729428445154e-8,0.004046152091763345,1.630410509649094e-5,-5.80653572847142e-8,0.004046652760383014,1.6324348036651065e-5,-5.8102214711525505e-8,0.004047085929565268,1.6424100266681775e-5,-5.830035937199191e-8,0.004047435228495953,1.6566189179488793e-5,-5.8584786032397173e-8,0.004047698959744002,1.671216642566975e-5,-5.8877737365682856e-8,0.004047887444712365,1.6826943646276348e-5,-5.9108127517374904e-8,0.00404802049508203,1.6881670483517197e-5,-5.9217433706880595e-8,0.004048125273323472,1.6855947238255258e-5,-5.9164217502915826e-8,0.004048234127401434,1.674008799311883e-5,-5.8928701076803824e-8,0.004048381670060571,1.6537530470193916e-5,-5.851761039418674e-8,0.004048600436416601,1.6266746291805815e-5,-5.796802584768781e-8,0.004048914984056892,1.5961326425245878e-5,-5.734760338043135e-8,0.004049335282066074,1.566668088020222e-5,-5.674801447212363e-8,0.0040498513719114376,1.5432414454828066e-5,-5.626965875165331e-8,0.004050431921230339,1.5301075079280176e-5,-5.5998974280483204e-8,0.004051028668995067,1.5296083993458358e-5,-5.598395649797168e-8,0.004051586738790464,1.5412983005455173e-5,-5.62162478465142e-8,0.004052058328986434,1.5617600591062285e-5,-5.6627167195976384e-8,0.004052415758160085,1.5852514347711364e-5,-5.7100596870077054e-8,0.004052659913064241,1.6050494133565283e-5,-5.7500160816537554e-8,0.0040528214440387015,1.6151570852562244e-5,-5.7703907353645075e-8,0.004052953861013157,1.611931020329749e-5,-5.763746552942237e-8,0.004053119682835466,1.595162622613579e-5,-5.729612717276807e-8,0.004053373025435257,1.5682212292362576e-5,-5.6747852350428666e-8,0.004053744027610918,1.537106055446932e-5,-5.611410681536437e-8,0.004054230846152612,1.5086637935810276e-5,-5.553375453822118e-8,0.004054802304411898,1.488624806595296e-5,-5.5123232299645195e-8,0.0040554095026198176,1.4802029857689209e-5,-5.494808734565473e-8,0.004056000829014219,1.4836834906018199e-5,-5.501449222707493e-8,0.0040565344012080526,1.496913360261363e-5,-5.527907211829798e-8,0.004056984713435475,1.5162646600086324e-5,-5.5668377746635783e-8,0.004057343673139978,1.537616244421555e-5,-5.609881419197702e-8,0.004057618154709957,1.5570907870645105e-5,-5.6491651348612124e-8,0.004057826336088842,1.571498161585009e-5,-5.678207302107251e-8,0.004057994236563965,1.5785663812756403e-5,-5.692387796847087e-8,0.004058152876449292,1.5770755436499932e-5,-5.6892175274642595e-8,0.004058335730497766,1.56698047725992e-5,-5.6685842838322767e-8,0.004058575736492297,1.5495479753201927e-5,-5.6330312045967666e-8,0.004058901067412491,1.5274593050186677e-5,-5.587969998232432e-8,0.0040593292989023755,1.504744016568601e-5,-5.541556302293769e-8,0.004059860688647646,1.4863522530534258e-5,-5.5038323485976716e-8,0.004060472924789321,1.4772178278052189e-5,-5.484831991380623e-8,0.004061121016256655,1.4808824187926628e-5,-5.491786333355384e-8,0.004061745398388068,1.4980995070619321e-5,-5.526278213620586e-8,0.0040622878335508355,1.5260905424743596e-5,-5.58271445794069e-8,0.00406270977840194,1.5589957864201896e-5,-5.6492254117461846e-8,0.004063005280007226,1.5895053516072876e-5,-5.71096919262533e-8,0.004063202722944347,1.611033761314179e-5,-5.7545486920249105e-8,0.004063355322523949,1.6195737978189514e-5,-5.7717829505718655e-8,0.004063524982892078,1.614629397440836e-5,-5.761611433490631e-8,0.0040637654881181635,1.5990874718776372e-5,-5.729846921069878e-8,0.0040641096822484745,1.5782374878243806e-5,-5.687200018963553e-8,0.004064563196214051,1.558309622417832e-5,-5.646323142518138e-8,0.004065105372946402,1.5449401160722053e-5,-5.6186965778914343e-8,0.004065696400389077,1.5419375479983378e-5,-5.612111731815594e-8,0.004066288252635861,1.5506240841777267e-5,-5.6293121212787874e-8,0.004066836155862962,1.5698542971993716e-5,-5.668010909236039e-8,0.004067307459695976,1.5966009975132922e-5,-5.7220705532581126e-8,0.00406768613309999,1.6268363193234948e-5,-5.783296271933897e-8,0.004067972917711898,1.6564106468153707e-5,-5.8432340733695405e-8,0.004068182486831887,1.681727652571284e-5,-5.894554234053274e-8,0.00406833933892352,1.7001503611134662e-5,-5.931880776278692e-8,0.004068473756113949,1.7101841750667816e-5,-5.952159722920657e-8,0.004068618388467829,1.7115337876791556e-5,-5.9547687041123166e-8,0.004068805319711415,1.7051183194416186e-5,-5.941546370891142e-8,0.004069063045413328,1.693080237181354e-5,-5.9168176976249445e-8,0.004069412642286213,1.6787584460103433e-5,-5.887352588619779e-8,0.004069862675046376,1.6665125654505054e-5,-5.862021049541122e-8,0.0040704033862420915,1.6612132979317868e-5,-5.8507611354420696e-8,0.004071002433343476,1.6672362317351996e-5,-5.8625252169843815e-8,0.004071606146962371,1.6870078458229394e-5,-5.90230533337598e-8,0.004072150180031084,1.7195707718266797e-5,-5.968194828764344e-8,0.004072579327330133,1.7600304654934825e-5,-6.050250155157372e-8,0.004072869038903364,1.800622384140864e-5,-6.132663264350784e-8,0.004073036765467772,1.8332569931295446e-5,-6.1989505493645e-8,0.004073135737926338,1.852349328887892e-5,-6.237718185712606e-8,0.004073234663677566,1.85650892687075e-5,-6.246099877342193e-8,0.004073394556097025,1.848476914851136e-5,-6.229627231999442e-8,0.004073652726352091,1.833737723399551e-5,-6.199414171839608e-8,0.004074017372470005,1.818678426452505e-5,-6.168431508746106e-8,0.0040744707750797445,1.808984214398682e-5,-6.148259812586677e-8,0.004074977337424825,1.8085790232343694e-5,-6.14693541796517e-8,0.004075493263269258,1.8191439776279438e-5,-6.167952512829171e-8,0.004075975798354961,1.840124607827241e-5,-6.210249277646861e-8,0.004076390776901895,1.8691144047334405e-5,-6.268964660170682e-8,0.004076717622217568,1.902494399145827e-5,-6.336732629192284e-8,0.004076951353972912,1.9361837440099986e-5,-6.405219775676581e-8,0.004077101746210127,1.96635091438295e-5,-6.46659095300111e-8,0.0040771903314508785,1.989970237527024e-5,-6.514655672234517e-8,0.004077246262806788,2.005165635670929e-5,-6.545569860243698e-8,0.004077302032084395,2.0113486301099913e-5,-6.558109876386352e-8,0.0040773896466789,2.0092092019349717e-5,-6.553647593087778e-8,0.004077537342209875,2.0006253451383885e-5,-6.535969647604283e-8,0.004077766555167821,1.988527789663943e-5,-6.511016738314298e-8,0.004078088689458051,1.976710784085783e-5,-6.486516989220184e-8,0.004078501328342447,1.96951136887764e-5,-6.471343334262049e-8,0.004078984379126887,1.971216651307541e-5,-6.474300004433253e-8,0.004079498090171917,1.985082590723176e-5,-6.502100525056876e-8,0.004079986278779378,2.0120252289371937e-5,-6.55667052274478e-8,0.004080388235941525,2.0494122797303468e-5,-6.632662153528476e-8,0.004080659282108669,2.0908086133771597e-5,-6.716933519624624e-8,0.0040807921628955995,2.1274886377819846e-5,-6.791652262392293e-8,0.004080825530396653,2.151542116556529e-5,-6.840653341073122e-8,0.00408083076942298,2.1590301346052778e-5,-6.855881484240877e-8,0.00408088328291802,2.1513241158620907e-5,-6.84010788689678e-8,0.004081035155949392,2.134019848115492e-5,-6.804703209129059e-8,0.004081302546732209,2.1144355238359504e-5,-6.764545015636383e-8,0.004081668918553097,2.0992072249557375e-5,-6.733141248227607e-8,0.00408209685499066,2.092848134334002e-5,-6.719713964870882e-8,0.004082540990125184,2.09731231952271e-5,-6.72830951751148e-8,0.004082958197133572,2.112218615191573e-5,-6.758231956110174e-8,0.00408331422869279,2.1353847294547875e-5,-6.805099975797541e-8,0.0040835874057665485,2.1634567155020024e-5,-6.862106700376206e-8,0.004083770116681637,2.1925434668298697e-5,-6.921309213990532e-8,0.004083868551366543,2.218816882099307e-5,-6.974866033503243e-8,0.0040839008942840345,2.239039499761978e-5,-7.016132947403248e-8,0.004083894232067077,2.250978778831476e-5,-7.0405207142333e-8,0.004083880571241067,2.25366960163881e-5,-7.046030306590217e-8,0.00408389252947929,2.2475031488631666e-5,-7.033426314434203e-8,0.004083959249418965,2.2341562177163083e-5,-7.00608865512821e-8,0.004084102836943754,2.2163971654346905e-5,-6.969625158825354e-8,0.004084335399848269,2.1977972812721735e-5,-6.931302372966625e-8,0.004084656614019778,2.1823582213426522e-5,-6.899305140282665e-8,0.004085051725131036,2.1740298666453316e-5,-6.881758196303943e-8,0.00408549043013785,2.1760499615591525e-5,-6.88536205880247e-8,0.004085928134416261,2.1900671848150498e-5,-6.913569532030017e-8,0.0040863118371121795,2.215161693360532e-5,-6.964550832191338e-8,0.004086592559838579,2.2471365259167905e-5,-7.029728262333709e-8,0.004086743511323791,2.278742626781085e-5,-7.094245749548945e-8,0.004086777069432108,2.3014650869490377e-5,-7.140649996468963e-8,0.004086748324489586,2.3086554162397423e-5,-7.155319319147187e-8,0.004086737210606845,2.298478523801362e-5,-7.134486880118048e-8,0.0040868162246094596,2.274751838270059e-5,-7.085933294161156e-8,0.004087022774633262,2.245098166859568e-5,-7.025197183973786e-8,0.004087351063401967,2.21773293531232e-5,-6.969023534135919e-8,0.004087762942117613,2.1988078250473938e-5,-6.929965848306815e-8,0.004088206426731321,2.1912888693068682e-5,-6.914113536613453e-8,0.0040886315320029145,2.1951514131721826e-5,-6.921484527465759e-8,0.004088999563181579,2.2082048330308014e-5,-6.947683655171173e-8,0.004089286694209541,2.227007195705091e-5,-6.985740065000953e-8,0.0040894840997412005,2.2476260228544262e-5,-7.027641992708612e-8,0.004089596524746182,2.2662126678655353e-5,-7.065510425729817e-8,0.004089640201779963,2.2794420332461283e-5,-7.092513321189004e-8,0.0040896402838893646,2.284862699133553e-5,-7.103599943485881e-8,0.004089627705490863,2.2811697616913437e-5,-7.096068474456991e-8,0.004089635411507748,2.2683801109797253e-5,-7.069921973276663e-8,0.004089694115390104,2.2478677051700234e-5,-7.027932793650815e-8,0.004089828036207196,2.2222286505042233e-5,-6.975365444924291e-8,0.004090051161470819,2.1949786269337134e-5,-6.919369964114232e-8,0.004090364511991667,2.170103932630054e-5,-6.86808528694382e-8,0.004090754790796106,2.151498959955255e-5,-6.829506592183514e-8,0.004091194666195651,2.142330844766789e-5,-6.810185855541579e-8,0.004091644993372157,2.1443624281504225e-5,-6.813824314344391e-8,0.0040920596967446154,2.1572833523424404e-5,-6.83986719144852e-8,0.004092394222561333,2.1782031162445324e-5,-6.88243378416857e-8,0.00409261763274889,2.2016102025325163e-5,-6.93022303226837e-8,0.0040927261558925485,2.2201941671687712e-5,-6.968213454108016e-8,0.004092752390399775,2.226781056753669e-5,-6.98165868041908e-8,0.004092761828782771,2.217010941896625e-5,-6.961594162020133e-8,0.004092832347522563,2.191489742469643e-5,-6.90924145000651e-8,0.004093023916310563,2.1559197363135236e-5,-6.836256507621499e-8,0.004093355382863215,2.1188443825140062e-5,-6.760103065423595e-8,0.004093801442773309,2.0883140487863215e-5,-6.697239893387999e-8,0.004094308353665391,2.0693642127327703e-5,-6.657980636574702e-8,0.004094815962852751,2.0632674505226746e-5,-6.644971858931919e-8,0.0040952745320277885,2.068224872375703e-5,-6.654596569206641e-8,0.0040956524926629954,2.0806194730034872e-5,-6.67951505187713e-8,0.004095937126088291,2.0961685991746184e-5,-6.711000602505771e-8,0.004096131713874594,2.1107263596701378e-5,-6.740571701477901e-8,0.004096251810518326,2.1207630473032185e-5,-6.760979080112129e-8,0.004096321810660583,2.123646163530461e-5,-6.766796655208107e-8,0.004096371868974252,2.117828020698269e-5,-6.754820351325027e-8,0.004096434786498749,2.102987222746858e-5,-6.724363080817744e-8,0.0040965424713340064,2.0801158863912584e-5,-6.677428971329367e-8,0.004096721827951759,2.0514974467630822e-5,-6.618661611930796e-8,0.004096990403276643,2.0205057223031076e-5,-6.554934138305202e-8,0.004097352573177603,1.9911884762201487e-5,-6.494509874821933e-8,0.0040977972420050135,1.9676507214749987e-5,-6.445798705026133e-8,0.00409829795293573,1.953307645034436e-5,-6.415839226662203e-8,0.00409881595753222,1.950131413892924e-5,-6.408749767114518e-8,0.0040993062317397294,1.958041987144307e-5,-6.424454113672405e-8,0.004099725949858662,1.9745840788228674e-5,-6.457984351456717e-8,0.004100044534043069,1.9950335607570126e-5,-6.499672432697775e-8,0.004100253632198516,2.013084019847643e-5,-6.536554032319219e-8,0.004100374104936217,2.0221969791798727e-5,-6.555157283498206e-8,0.004100455954183344,2.017477740412432e-5,-6.545379905395303e-8,0.0041005675891791,1.9975516702515512e-5,-6.504358355699308e-8,0.004100774805833544,1.965545542492212e-5,-6.438482789008002e-8,0.004101116885460426,1.928372582152993e-5,-6.361922074229146e-8,0.004101591870619371,1.894360567216253e-5,-6.291755062884213e-8,0.004102159238000308,1.8703470116557066e-5,-6.242018269746027e-8,0.00410275747591571,1.859703517591237e-5,-6.219659152435074e-8,0.0041033257619690735,1.8620141853715126e-5,-6.223872071816769e-8,0.004103819526959297,1.874065523208672e-5,-6.248114525442182e-8,0.004104216341986781,1.8912959818053868e-5,-6.283064370406833e-8,0.004104514378076207,1.909031638156852e-5,-6.319144791179558e-8,0.004104727475774354,1.9232607115184218e-5,-6.348113509152911e-8,0.004104879851426564,1.931006277488053e-5,-6.363836365897142e-8,0.004105001750774871,1.9304641429037065e-5,-6.362581755356893e-8,0.004105126061105588,1.9210481227772614e-5,-6.343120965738759e-8,0.004105285298052878,1.903412670485694e-5,-6.306774716776545e-8,0.004105508333763851,1.879451414608241e-5,-6.257405625726658e-8,0.004105816518487927,1.8522105372562953e-5,-6.201237977882163e-8,0.004106219408261088,1.8256224455901378e-5,-6.146316659960243e-8,0.004106711031782206,1.8039834534071813e-5,-6.101448588822051e-8,0.00410726820104739,1.7911758794004197e-5,-6.074620274769431e-8,0.00410785241819564,1.7897526858302653e-5,-6.071123337928272e-8,0.004108416180285091,1.8001212401072268e-5,-6.091866896065255e-8,0.0041089130241994485,1.820113748087769e-5,-6.132469615222139e-8,0.004109309104207408,1.8451646262672002e-5,-6.183595690444914e-8,0.0041095931983087045,1.869153552715818e-5,-6.232669811154938e-8,0.004109782084836411,1.8857869433917337e-5,-6.266717936609684e-8,0.004109919049387194,1.890226775739589e-5,-6.275732940350907e-8,0.004110064678761718,1.8805497319272342e-5,-6.255697025959145e-8,0.004110281124285083,1.858555641793577e-5,-6.210261238000375e-8,0.004110613703963449,1.829511610327427e-5,-6.150227952510236e-8,0.004111076186029953,1.8007169267841526e-5,-6.090602884987728e-8,0.004111646199815092,1.779292050803584e-5,-6.046048759796877e-8,0.0041122733354077975,1.770055011084275e-5,-6.026514317284309e-8,0.0041128962379817155,1.774357289428051e-5,-6.034829633072815e-8,0.004113460777981091,1.790224628658376e-5,-6.06698069713779e-8,0.004113932211375858,1.8134726118468195e-5,-6.114390913053563e-8,0.004114298813701848,1.8391239948785017e-5,-6.166830949707429e-8,0.004114568894174971,1.862570592744579e-5,-6.214811466500701e-8,0.004114764817887481,1.8802594772439982e-5,-6.251002429640857e-8,0.004114916941016438,1.8899611324047082e-5,-6.270792853777051e-8,0.004115058788903396,1.8907892822336005e-5,-6.272336282371548e-8,0.004115223529956793,1.883126597625609e-5,-6.256398245923092e-8,0.00411544112890223,1.8685396522870248e-5,-6.226179188618023e-8,0.004115735426728429,1.8496880076378558e-5,-6.187126850283822e-8,0.004116120670135077,1.830166124887891e-5,-6.146615285795259e-8,0.0041165976094830435,1.8141735245261587e-5,-6.113275473128614e-8,0.0041171501459813615,1.8059102673713814e-5,-6.095761535265301e-8,0.0041177444298378775,1.808677278934742e-5,-6.100903876410642e-8,0.0041183326482072515,1.8238377845822922e-5,-6.131565461947553e-8,0.004118862644895194,1.8500025366803055e-5,-6.184947666116739e-8,0.004119291845670744,1.882888305936909e-5,-6.252277761117837e-8,0.004119600995524518,1.916129270179671e-5,-6.320463576506777e-8,0.004119802051454148,1.9429176950619105e-5,-6.375467477591138e-8,0.004119936452241972,1.9579389208801835e-5,-6.406297574667329e-8,0.004120063979010977,1.958911524116044e-5,-6.408192449547398e-8,0.004120246088908799,1.9472222424355246e-5,-6.383944294513096e-8,0.00412052913259154,1.927501773422856e-5,-6.343041897475507e-8,0.004120932292519319,1.906320686341203e-5,-6.299000026420115e-8,0.0041214433902594435,1.890409343719484e-5,-6.265701578056743e-8,0.004122023468462977,1.884920647966687e-5,-6.253815085908088e-8,0.004122618451191795,1.8922390072082127e-5,-6.268323571647604e-8,0.004123173897075194,1.911656377839061e-5,-6.307832429936484e-8,0.0041236480036418895,1.939920158835302e-5,-6.365677983994343e-8,0.004124019202185466,1.9723461236942205e-5,-6.432213367561228e-8,0.004124287288244285,2.0040448516884058e-5,-6.49734234542431e-8,0.004124469567213898,2.0308896945277934e-5,-6.552527867409888e-8,0.004124594685466592,2.050066336393985e-5,-6.591937018917111e-8,0.004124696486907284,2.0602417835979338e-5,-6.61279466825767e-8,0.004124809121272801,2.0614914334906605e-5,-6.615231627858997e-8,0.00412496354787499,2.055127128513555e-5,-6.601926590271963e-8,0.004125184918062037,2.0435134717556e-5,-6.57772755655983e-8,0.004125490124622406,2.029885113054249e-5,-6.549281651963915e-8,0.004125884999648892,2.0181120072676474e-5,-6.524562199853932e-8,0.004126361187835996,2.012312227810521e-5,-6.512079755335909e-8,0.004126893637683346,2.016202160381174e-5,-6.519543374690128e-8,0.0041274407643772945,2.0321520249793008e-5,-6.551902559572129e-8,0.0041279499280898095,2.0601210358685798e-5,-6.609131944530118e-8,0.00412836969991199,2.0969274287628928e-5,-6.684706034379096e-8,0.004128666706476001,2.1364544730577544e-5,-6.766013860494177e-8,0.0041288402130868545,2.1711284432474734e-5,-6.837410979895914e-8,0.0041289260941142205,2.1943052421982018e-5,-6.88515335136089e-8,0.0041289863790102055,2.2025323150899638e-5,-6.902071138081227e-8,0.004129088666642758,2.1966206179071726e-5,-6.889782614187511e-8,0.0041292849632450085,2.1811418243791324e-5,-6.857662713945957e-8,0.0041295982485091585,2.1627811881081866e-5,-6.819461136355642e-8,0.004130019713586947,2.1483464269815928e-5,-6.789215710034456e-8,0.004130514847826705,2.1431037977969292e-5,-6.777831067919666e-8,0.004131034556120914,2.1497848193685356e-5,-6.79102050168444e-8,0.0041315275855180284,2.1683260008845836e-5,-6.828741599827955e-8,0.0041319514162801475,2.196236627165169e-5,-6.885922779761631e-8,0.0041322797208666745,2.2294052841138688e-5,-6.95410620986726e-8,0.004132505435793167,2.2631076927335552e-5,-7.023526137874012e-8,0.004132639559466678,2.2929656701609897e-5,-7.085103297987233e-8,0.0041327068073958445,2.3156619956378226e-5,-7.131941152567361e-8,0.004132739789933165,2.329325563893979e-5,-7.160135080100659e-8,0.0041327732697304005,2.3336073204430915e-5,-7.168931655885992e-8,0.004132839498526474,2.3295362222597494e-5,-7.160425905283545e-8,0.00413296489491445,2.319267720853539e-5,-7.139037898864675e-8,0.004133167727447015,2.3058081690060263e-5,-7.110948143247038e-8,0.004133456251584568,2.2927368246838634e-5,-7.083536734083875e-8,0.004133826864680379,2.2838893766911416e-5,-7.064744138921729e-8,0.004134262246139552,2.2829234263837425e-5,-7.062178621276581e-8,0.004134730285875639,2.2926717969593375e-5,-7.081769093706275e-8,0.004135185707911027,2.31425991815179e-5,-7.125916402041035e-8,0.0041355769071945506,2.346164589422353e-5,-7.191520269449173e-8,0.004135859441965122,2.383687117408675e-5,-7.268874415754124e-8,0.00413601369908566,2.4195039750171892e-5,-7.342810252300716e-8,0.004136058529573073,2.4456681249135846e-5,-7.396855759155849e-8,0.004136050487278654,2.456513384479195e-5,-7.419258398190955e-8,0.004136065019007573,2.4509860369459744e-5,-7.407805053129414e-8,0.004136168231272512,2.4330162569653813e-5,-7.370577611668552e-8,0.004136394459822497,2.409789030051738e-5,-7.322376999160329e-8,0.0041367395368764786,2.389056192725738e-5,-7.279186780905995e-8,0.0041371686481556655,2.3768649735412706e-5,-7.253505860848046e-8,0.004137631091783037,2.3763952092816136e-5,-7.251957894397494e-8,0.0041380747660009765,2.3878490225956004e-5,-7.275049880309497e-8,0.004138456791204421,2.4090059448810835e-5,-7.318286374029693e-8,0.004138749601503419,2.4360668956780575e-5,-7.37387885346733e-8,0.004138943194899096,2.4645468588374668e-5,-7.4325712073413e-8,0.004139044422775969,2.49009409295305e-5,-7.485336553975188e-8,0.0041390740178470385,2.509158954761269e-5,-7.52478055388981e-8,0.004139062078858488,2.519450532721772e-5,-7.546109277291754e-8,0.004139042857680081,2.5201537323836e-5,-7.547591881161818e-8,0.004139049681730755,2.5119185084212284e-5,-7.530538123596477e-8,0.004139110696144454,2.4966623708413148e-5,-7.498882514872912e-8,0.004139245793706889,2.4772544989273615e-5,-7.458527889421062e-8,0.004139464664095014,2.4571523457755883e-5,-7.416602259172535e-8,0.0041397656452513715,2.4400247311316832e-5,-7.380696250121588e-8,0.004140135103394312,2.4293510720908743e-5,-7.358048043260725e-8,0.004140547313718007,2.427954414351527e-5,-7.354575599206736e-8,0.004140965413628404,2.4374141223041407e-5,-7.373639326420042e-8,0.004141344873455721,2.457362346913388e-5,-7.414551482757032e-8,0.004141641326420783,2.48483642172095e-5,-7.471205791422762e-8,0.0041418235765014145,2.5141002654557318e-5,-7.53169965475809e-8,0.004141889215372904,2.537511100337642e-5,-7.58014858398564e-8,0.004141874921065243,2.5477517766043897e-5,-7.601342829768719e-8,0.004141851043315424,2.5408217951499304e-5,-7.58696248028512e-8,0.004141897199717203,2.5181416417097176e-5,-7.539927233814727e-8,0.004142070032062376,2.4862233791190885e-5,-7.473692425033855e-8,0.004142382136416294,2.4539521848464896e-5,-7.406615519129582e-8,0.004142802962387187,2.4291862821753357e-5,-7.354938496791458e-8,0.004143276515293847,2.4165133492908547e-5,-7.328171206236878e-8,0.004143742610608551,2.416776805253065e-5,-7.328119646301892e-8,0.004144152149564842,2.427840550811608e-5,-7.350451056510971e-8,0.004144474270556827,2.4457891470911152e-5,-7.387144252687797e-8,0.004144697408744952,2.4660435604785124e-5,-7.428767698568889e-8,0.004144827026181618,2.484202674459949e-5,-7.466207837487929e-8,0.004144881994566124,2.4966196964502726e-5,-7.491871231531306e-8,0.0041448905048311665,2.500781452275799e-5,-7.500493400442998e-8,0.004144885711446158,2.4955282841337656e-5,-7.489617429690564e-8,0.004144901261135358,2.481120187725696e-5,-7.459741678649363e-8,0.004144966982912023,2.4591489692204364e-5,-7.41413441693972e-8,0.004145105121592094,2.4322991873659133e-5,-7.358329870301691e-8,0.004145327544473218,2.403980237268326e-5,-7.299364256044502e-8,0.004145634190738719,2.377879003345024e-5,-7.24485997969921e-8,0.0041460127758167105,2.3574818073592004e-5,-7.202053283003591e-8,0.00414643966336036,2.3455929817344242e-5,-7.17680808924154e-8,0.004146881876040019,2.343860803994068e-5,-7.172625974921142e-8,0.0041473004753961136,2.3523144481116746e-5,-7.189658153429537e-8,0.004147656007247302,2.3689506623327728e-5,-7.223811648289735e-8,0.004147916808771172,2.3895221603221915e-5,-7.266284458651311e-8,0.0041480699650081705,2.4078275121643128e-5,-7.304167053080141e-8,0.004148132195104441,2.4168654642653938e-5,-7.322864004199276e-8,0.004148154320381181,2.4109831376965727e-5,-7.310586674653458e-8,0.004148211444887462,2.388423375298592e-5,-7.263656875158706e-8,0.004148377033934869,2.3528252738308904e-5,-7.189610084153054e-8,0.004148691963497075,2.3123109596003326e-5,-7.105280147716092e-8,0.0041491473031022115,2.27629923552026e-5,-7.030185625864194e-8,0.004149691355374006,2.251899382813585e-5,-6.979067613092937e-8,0.004150253959921051,2.2418989460666156e-5,-6.957735617198645e-8,0.0041507716459602394,2.2449203170718728e-5,-6.963393426794152e-8,0.0041512023452277315,2.2568972898863263e-5,-6.987681903782312e-8,0.004151528686471275,2.2727414027209948e-5,-7.020106669410957e-8,0.004151754402958528,2.287579296648152e-5,-7.050582576156142e-8,0.004151898371708361,2.2974592076086222e-5,-7.070894000466604e-8,0.004151988885126911,2.2996670531363484e-5,-7.075363347500511e-8,0.004152058955955876,2.2928322974470473e-5,-7.061092750138042e-8,0.004152142382845093,2.2769356506527704e-5,-7.02799821925708e-8,0.0041522701226427315,2.253246200945357e-5,-6.978684571499767e-8,0.004152466791086021,2.2241707192617996e-5,-6.91812637823709e-8,0.004152747431065876,2.192983419561754e-5,-6.853098876725601e-8,0.004153115009949348,2.163416853510276e-5,-6.791329347391853e-8,0.004153559267504416,2.1391372281000134e-5,-6.740420502635174e-8,0.004154057371060857,2.1231670864169294e-5,-6.706668724391143e-8,0.004154576533781043,2.1173336928637963e-5,-6.693925978559595e-8,0.004155078480972005,2.121824985076246e-5,-6.702665399660066e-8,0.00415552544495053,2.1349266802329204e-5,-6.729405133405011e-8,0.004155887326128362,2.153005321203464e-5,-6.76663910045802e-8,0.004156149549489265,2.1708297200182368e-5,-6.803485371706521e-8,0.004156320429207047,2.18236504091612e-5,-6.827342868724723e-8,0.004156435436193511,2.1821325191162423e-5,-6.826745995209362e-8,0.004156554325266331,2.1670061717922965e-5,-6.795132318021076e-8,0.004156747395736589,2.137880483492358e-5,-6.734326680703699e-8,0.004157071827894007,2.100211751024774e-5,-6.655662407843876e-8,0.004157547507220719,2.0626045399976664e-5,-6.577030263586701e-8,0.004158146618620178,2.033725265562143e-5,-6.516458127082557e-8,0.0041588047435924405,2.0191197783449442e-5,-6.485500848833399e-8,0.00415944679960301,2.0196654226797564e-5,-6.486025586921148e-8,0.004160012347865569,2.0321627878139327e-5,-6.51143438105989e-8,0.004160468885463152,2.0512010737360385e-5,-6.550526134746365e-8,0.004160812154099564,2.071068901280456e-5,-6.591452917912113e-8,0.004161059067630895,2.087014425419266e-5,-6.624331294613351e-8,0.004161239040043181,2.095792204410952e-5,-6.642382604808944e-8,0.004161386829742425,2.095738077188751e-5,-6.642102047979822e-8,0.0041615375835493676,2.0866361049708102e-5,-6.622998144256762e-8,0.004161723445766619,2.069540030448162e-5,-6.587231810027344e-8,0.004161970833005958,2.0465957657424777e-5,-6.53924752623177e-8,0.004162297807662163,2.0208374532718804e-5,-6.485342857751e-8,0.004162711465524075,1.9958972538912966e-5,-6.433060157681065e-8,0.004163205788963567,1.9755721872438256e-5,-6.390289279020207e-8,0.004163760874885751,1.9632401292486634e-5,-6.364064398012052e-8,0.0041643445126078645,1.9611945515193513e-5,-6.359191191485507e-8,0.004164916661599382,1.9700370056451175e-5,-6.376982675484982e-8,0.004165436593260296,1.9883038081479463e-5,-6.414465536185601e-8,0.004165871533002719,2.0124840290481865e-5,-6.464389273479223e-8,0.004166204973161034,2.03750141868381e-5,-6.516203187808346e-8,0.0041664427071129,2.0576291719662896e-5,-6.557950750839939e-8,0.004166614831251215,2.067725739446178e-5,-6.578854573835485e-8,0.004166772201513261,2.064596860090837e-5,-6.572180046924913e-8,0.004166976394844767,2.0481684872547044e-5,-6.537706967734264e-8,0.004167283762105637,2.0220289969068403e-5,-6.482876722062341e-8,0.0041677270966903575,1.9928853053708316e-5,-6.42166276496646e-8,0.004168301889621721,1.9687639520167372e-5,-6.370817178698891e-8,0.004168964945397345,1.9564346141463034e-5,-6.344493463573707e-8,0.0041696482095524585,1.9591663234778752e-5,-6.349560115607152e-8,0.004170281928490304,1.975909669494271e-5,-6.383883261318782e-8,0.004170815776114936,2.002177562328637e-5,-6.438149484450375e-8,0.004171229165072177,2.0319307693815556e-5,-6.499787658365365e-8,0.004171529641595815,2.0594371506068787e-5,-6.556842529790701e-8,0.004171744205095692,2.08044574697309e-5,-6.600426377969002e-8,0.004171909319060356,2.0925909999591906e-5,-6.625570255367975e-8,0.004172063035543002,2.095283945319605e-5,-6.631007474738575e-8,0.004172240006446445,2.0893942567726186e-5,-6.618518936112582e-8,0.004172468631381149,2.0769185793469826e-5,-6.592244924085984e-8,0.00417276921141435,2.0606998287037323e-5,-6.558098507505531e-8,0.004173152263607924,2.044171213681954e-5,-6.523229587640529e-8,0.004173616699217774,2.0310521591751063e-5,-6.49539193513707e-8,0.004174148228173609,2.0249146804649307e-5,-6.482044670278411e-8,0.0041747190205534725,2.0285797724636808e-5,-6.489100076513135e-8,0.004175290038969232,2.043401685070224e-5,-6.519431780277011e-8,0.004175817138082009,2.0686286120805764e-5,-6.571531492271147e-8,0.004176260742955059,2.1011275247548487e-5,-6.638915896100802e-8,0.004176596947866172,2.135738903704526e-5,-6.710846106930013e-8,0.004176826283818876,2.1663316572518304e-5,-6.774516430718877e-8,0.004176976440504031,2.187329985370935e-5,-6.818241888125293e-8,0.004177097171342621,2.1952541600749897e-5,-6.834687461472092e-8,0.004177248393652027,2.1897850265493772e-5,-6.823110493770005e-8,0.004177484698447774,2.1740143881249863e-5,-6.789904756326871e-8,0.004177840456289382,2.153777152476557e-5,-6.74722389787032e-8,0.004178319648003268,2.1361956093379974e-5,-6.709951969906079e-8,0.004178893720907776,2.1277850737766288e-5,-6.69174602353876e-8,0.004179508920172153,2.1326593435868438e-5,-6.701273548062968e-8,0.00418010143870764,2.1514398644594126e-5,-6.739909921106913e-8,0.004180615325979776,2.181278040040501e-5,-6.801760816720763e-8,0.004181016588925626,2.2169477458321236e-5,-6.875930338309788e-8,0.004181298828271539,2.2524986894682156e-5,-6.949975199756988e-8,0.004181480040607371,2.282791399696808e-5,-7.013122390191389e-8,0.0041815939531634075,2.304443453220907e-5,-7.058260201965475e-8,0.004181680312312281,2.3160968578745368e-5,-7.082508197011263e-8,0.0041817771738139765,2.31820016723154e-5,-7.086767934850143e-8,0.004181916138040746,2.3125777208913207e-5,-7.074824050457918e-8,0.004182119981389813,2.301988109644779e-5,-7.052420786013162e-8,0.004182401587912403,2.2897560902910874e-5,-7.026493333350233e-8,0.004182763226082177,2.279464572132352e-5,-7.004528039888718e-8,0.004183195714757309,2.27463722411251e-5,-6.993905040066949e-8,0.0041836776903782045,2.2783245722880823e-5,-7.001037080800247e-8,0.004184175936522711,2.2925337371297516e-5,-7.030174363642383e-8,0.004184648351533992,2.3175376573468616e-5,-7.081948145094982e-8,0.00418505106926234,2.351265779926658e-5,-7.152078397866612e-8,0.00418534981740814,2.3891456557676195e-5,-7.231026107348822e-8,0.004185532699444083,2.4247798955379997e-5,-7.305402455302344e-8,0.0041856186975773695,2.4515523630203316e-5,-7.361333203789702e-8,0.004185656116733408,2.4647127383329684e-5,-7.388829334143641e-8,0.004185709463990267,2.4630561585255983e-5,-7.385309068068146e-8,0.004185839553237669,2.4494045601495442e-5,-7.356612233607162e-8,0.004186085175026919,2.4297013898756418e-5,-7.315119149276783e-8,0.004186453058714402,2.4111865678345753e-5,-7.275951997366621e-8,0.00418691819641979,2.4003918546233812e-5,-7.252797509274851e-8,0.004187432570247736,2.4015686123816057e-5,-7.254618294928173e-8,0.004187938527366445,2.4158751006996613e-5,-7.283932258420115e-8,0.00418838289655064,2.4413937365967342e-5,-7.336815666881627e-8,0.004188728513422404,2.4738606360928003e-5,-7.404399556996649e-8,0.00418896077263449,2.5078536869024493e-5,-7.475342352649681e-8,0.004189088187108331,2.5380979408035573e-5,-7.538568393181177e-8,0.004189137637378765,2.560542386655624e-5,-7.585541248978948e-8,0.004189146482758514,2.5729746333905715e-5,-7.611571356090715e-8,0.004189154226481784,2.5751295531856018e-5,-7.616056328669566e-8,0.004189195811872894,2.5684118435083626e-5,-7.601902615037475e-8,0.004189297432699497,2.55542284301067e-5,-7.574531169066045e-8,0.004189474640743976,2.539461358412779e-5,-7.54082984053367e-8,0.004189731923761839,2.5240920754474522e-5,-7.508253449426259e-8,0.004190062893369365,2.5127892543049684e-5,-7.484086743090381e-8,0.004190450577587119,2.508605327542561e-5,-7.474758404267058e-8,0.004190867863493793,2.5137902888573805e-5,-7.48504270355493e-8,0.004191278851066964,2.5293029167128904e-5,-7.517021445445091e-8,0.004191642553303303,2.55423836176811e-5,-7.568861108228818e-8,0.004191920429727899,2.585359199989586e-5,-7.633807975528864e-8,0.004192087961726734,2.6171043691637975e-5,-7.700197953776512e-8,0.0041921473996541884,2.6425138639552714e-5,-7.753404214212685e-8,0.004192134962329874,2.655208648022618e-5,-7.780007245043969e-8,0.004192114992464122,2.6518357750800253e-5,-7.772933711625707e-8,0.004192159595389882,2.6337159580545134e-5,-7.734907825665287e-8,0.0041923223662205,2.6066037508450072e-5,-7.677941655751047e-8,0.004192619875803577,2.578592305862587e-5,-7.618950486964727e-8,0.0041930293080447165,2.557321200031067e-5,-7.57392457018824e-8,0.004193500258489232,2.5478197525003033e-5,-7.553431849801728e-8,0.004193972401104941,2.5516253407646417e-5,-7.560771560475328e-8,0.004194391412284077,2.5670481527066318e-5,-7.592504671513956e-8,0.004194719476384159,2.5901118869691845e-5,-7.640387556528128e-8,0.004194939943894964,2.6157253045760205e-5,-7.693795310378307e-8,0.004195057196908215,2.6387965736528168e-5,-7.742045708403442e-8,0.004195093049339342,2.655137914482246e-5,-7.776307074307687e-8,0.0041950809049979216,2.662075619193178e-5,-7.790902792572845e-8,0.0041950589164355375,2.6587196549228087e-5,-7.783901651533447e-8,0.004195063418449753,2.6459035460426867e-5,-7.75700484300396e-8,0.004195123687424457,2.6258649342688074e-5,-7.714875237095379e-8,0.004195258624765763,2.6017731648806405e-5,-7.664139315682479e-8,0.0041954753979068695,2.5772178721423704e-5,-7.612311259338277e-8,0.004195769575099257,2.5557431308106203e-5,-7.566822001278618e-8,0.004196126138573454,2.540453466231477e-5,-7.534204817948078e-8,0.004196520954855405,2.53367037714102e-5,-7.51938225051339e-8,0.004196922622790946,2.5365966871741377e-5,-7.524954946219042e-8,0.004197295156724912,2.5489504985313087e-5,-7.550410520029874e-8,0.004197602564194241,2.5685951525308174e-5,-7.591317047680027e-8,0.004197816369561635,2.5913292788382522e-5,-7.638861304882352e-8,0.004197925960352721,2.6111518336327034e-5,-7.68040568734833e-8,0.004197949030411529,2.6213720596972247e-5,-7.701841069760118e-8,0.004197935777056729,2.6166841984154432e-5,-7.691972134593537e-8,0.004197959246279704,2.5955973534895593e-5,-7.647632694596954e-8,0.004198090449018128,2.561816100677808e-5,-7.576574198158926e-8,0.0041983690577137925,2.523320397695459e-5,-7.495518310321368e-8,0.00419878704502883,2.4893403872054307e-5,-7.423809664192561e-8,0.004199294657828197,2.466944744060831e-5,-7.37627848726335e-8,0.004199822567905109,2.4590529631573546e-5,-7.35909004360926e-8,0.004200305861270729,2.4644214422214637e-5,-7.369713717322046e-8,0.0042006995521685,2.478930388189759e-5,-7.399597656866322e-8,0.0042009837510207735,2.497203494463084e-5,-7.437531825774549e-8,0.004201161612568837,2.5139530804678885e-5,-7.472443695283559e-8,0.0042012538478359,2.524867550071118e-5,-7.495254886807737e-8,0.004201292331705662,2.527094607106964e-5,-7.49991216701699e-8,0.00420131393742547,2.5194311755950153e-5,-7.483814941996342e-8,0.004201354951284227,2.502295376661067e-5,-7.447781373617757e-8,0.0042014462866753815,2.4775206437341213e-5,-7.395626000164893e-8,0.004201609778427287,2.448005996210069e-5,-7.333420007618452e-8,0.004201855844869758,2.4172631007671907e-5,-7.268529378705414e-8,0.004202182698645817,2.3889171851144942e-5,-7.208562808425933e-8,0.004202577017310062,2.3662279170995062e-5,-7.160372968477706e-8,0.004203015758641201,2.351672818202007e-5,-7.129194406720078e-8,0.004203468829726377,2.3466037764782944e-5,-7.11792747736706e-8,0.004203902457944527,2.3509754658052647e-5,-7.126556074908164e-8,0.004204283346550584,2.3631449505063676e-5,-7.151698648158335e-8,0.004204584061959764,2.3797752657327603e-5,-7.186374646115213e-8,0.0042047900364866496,2.3959694992948275e-5,-7.22027000677904e-8,0.0042049075001769935,2.4058568751254713e-5,-7.240978381987185e-8,0.004204969667533672,2.4038460412971196e-5,-7.23666645880367e-8,0.004205036113172845,2.386531479855544e-5,-7.200115046387884e-8,0.004205179685910332,2.3546624248548318e-5,-7.132872503889457e-8,0.0042054607744250174,2.313929579412769e-5,-7.046897812798647e-8,0.00420589989798239,2.27347232082449e-5,-6.961404483515537e-8,0.004206466015888612,2.242427014344388e-5,-6.895601774624227e-8,0.004207089445384607,2.2264274521212205e-5,-6.861351443079364e-8,0.004207690765000283,2.2260358548173973e-5,-6.859880736537034e-8,0.004208207794816714,2.2375384589948536e-5,-6.883449347627073e-8,0.004208608832725967,2.2550256047354552e-5,-6.919700655526116e-8,0.004208892174623421,2.2724239908018644e-5,-6.955907850228315e-8,0.0042090782601795,2.284808125073127e-5,-6.981713891001085e-8,0.004209200296160906,2.2889691428958756e-5,-6.990328564693268e-8,0.004209296350094005,2.283492007234416e-5,-6.97870980120373e-8,0.004209403565906254,2.268592751806816e-5,-6.947247890090181e-8,0.004209554005893156,2.2458595057271006e-5,-6.899240475833879e-8,0.004209771538720962,2.2179411033598958e-5,-6.840241608206303e-8,0.00421006954601963,2.1881833085248087e-5,-6.777287276654248e-8,0.0042104495193963105,2.1602047665670182e-5,-6.717991814560981e-8,0.0042109008189892645,2.137421177667367e-5,-6.669544160393412e-8,0.004211401868604031,2.1225620883696596e-5,-6.637699983388579e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json new file mode 100644 index 000000000..ea9010347 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":25000,"numberOfSamples":1000,"samples":[0.0042119228229227776,2.117242668988509e-5,-6.625892772821196e-8,0.00421242951621424,2.1216421815835606e-5,-6.634559593072919e-8,0.004212888396602669,2.1343324948057996e-5,-6.660764965178544e-8,0.004213272077688695,2.1522955697259163e-5,-6.698208934125665e-8,0.004213565153061029,2.171164617537871e-5,-6.737707330135306e-8,0.004213769823711238,2.1857483451438128e-5,-6.768286051317844e-8,0.004213910198871436,2.190927122349849e-5,-6.779084064030356e-8,0.004214032922657624,2.1829493537962127e-5,-6.762116816618272e-8,0.004214200852587069,2.160938196621095e-5,-6.71548148810529e-8,0.004214477322022827,2.1280462370500936e-5,-6.645802296286292e-8,0.004214903100503305,2.091373094832423e-5,-6.568048925307495e-8,0.004215475880773675,2.0600151223130995e-5,-6.501412598684065e-8,0.004216145898744334,2.0417442948628495e-5,-6.462301093688222e-8,0.004216833579580056,2.0400376819345232e-5,-6.458079850055622e-8,0.004217459970123071,2.053157579362677e-5,-6.485132807375522e-8,0.004217972502130171,2.0755398012646987e-5,-6.531780445307867e-8,0.004218354775674382,2.100283844312381e-5,-6.583514699901046e-8,0.004218621473875984,2.1213061032032433e-5,-6.627523661803764e-8,0.004218806437975746,2.1344829856945014e-5,-6.655094448616457e-8,0.0042189509605779895,2.1378863630848206e-5,-6.662115374902181e-8,0.004219095409105211,2.1315105530184897e-5,-6.648517553484988e-8,0.004219274283414654,2.1168357298914947e-5,-6.617374421911176e-8,0.0042195135261831026,2.0964046864058137e-5,-6.574021509881736e-8,0.0042198289277669875,2.0734467344645254e-5,-6.52526270229363e-8,0.004220225061155502,2.0515161357874974e-5,-6.478598265567233e-8,0.004220694716869642,2.0341013243499278e-5,-6.441392136515793e-8,0.004221219187507694,2.024179213121955e-5,-6.419932023758131e-8,0.004221769966808666,2.0237378693578086e-5,-6.418431147260425e-8,0.0042223122778394,2.033346797221274e-5,-6.438129961003437e-8,0.004222810379006872,2.051879431947242e-5,-6.47670814186124e-8,0.0042232340746766765,2.0764877854194254e-5,-6.528213506219293e-8,0.004223565395287756,2.1029006330211313e-5,-6.583665389689409e-8,0.004223804128873946,2.1260585340412296e-5,-6.632374566900979e-8,0.004223970876957566,2.1410361180324564e-5,-6.663887945834917e-8,0.004224106369310762,2.14415465441151e-5,-6.670356203916723e-8,0.0042242657983087495,2.134115638552841e-5,-6.648957977625455e-8,0.004224507399419219,2.112855412696634e-5,-6.603731852191216e-8,0.004224876159364572,2.085686994094544e-5,-6.545888489491197e-8,0.004225386732174476,2.0603067839644234e-5,-6.491709513429656e-8,0.004226013160943935,2.0446027498544085e-5,-6.457905743766462e-8,0.004226693128151923,2.043932475634994e-5,-6.45585312505897e-8,0.004227347974683707,2.059163946791718e-5,-6.487440472016235e-8,0.004227909703767054,2.086563813515611e-5,-6.544822544194953e-8,0.004228341362829596,2.1195202646072075e-5,-6.614053530613902e-8,0.004228642402086946,2.1510125092377255e-5,-6.680302045077538e-8,0.004228840647210552,2.1755805619472572e-5,-6.732012834688552e-8,0.004228978598476052,2.190213346099413e-5,-6.762786101905045e-8,0.0042291010496863166,2.194302357527711e-5,-6.771287814009528e-8,0.0042292470592518745,2.1891133200885374e-5,-6.760145956889963e-8,0.004229446049571827,2.1771621167792976e-5,-6.73464393792848e-8,0.004229716468222322,2.1616855272094037e-5,-6.701607817399818e-8,0.004230065522044785,2.146232151279719e-5,-6.668539495546459e-8,0.004230489183412082,2.134317016838142e-5,-6.642880367863476e-8,0.004230972374903851,2.12906866823376e-5,-6.631261090471438e-8,0.004231489771832401,2.132821216102119e-5,-6.638640134078987e-8,0.00423200798906628,2.1466603019303647e-5,-6.667347585959588e-8,0.004232489876042049,2.1700112891328544e-5,-6.716214332465655e-8,0.004232901078212662,2.2004253231900497e-5,-6.780110661848243e-8,0.0042332180115707534,2.233735468493118e-5,-6.850259405413669e-8,0.004233435294041164,2.264690582136456e-5,-6.915558955274176e-8,0.004233570081750011,2.288024682846949e-5,-6.964836523197342e-8,0.004233661175459219,2.299740945877807e-5,-6.989570010663392e-8,0.00423376212210765,2.298272324126421e-5,-6.986362270031153e-8,0.004233929261141872,2.2851697779811398e-5,-6.958422181245012e-8,0.004234207211841524,2.2650495622957343e-5,-6.915475814576002e-8,0.004234615425259081,2.2446809897144912e-5,-6.871849564593151e-8,0.004235140014210337,2.231313047848069e-5,-6.842929415254376e-8,0.004235734703969059,2.230620625541042e-5,-6.840801170460767e-8,0.004236332511029088,2.2449320169543877e-5,-6.870475534746973e-8,0.004236865352914913,2.2724777630289437e-5,-6.928273029224622e-8,0.004237284245080581,2.3080599212484498e-5,-7.003223837757029e-8,0.004237571736415137,2.3448608166368112E-05,-7.080893495957507e-8,0.004237742342841121,2.3765484141766943e-5,-7.147847424023432e-8,0.004237833085799702,2.3988137660734125e-5,-7.194917126202141e-8,0.004237890189882673,2.4099447950975766e-5,-7.218425790080511e-8,0.004237957595590428,2.4105773514283147e-5,-7.219670738284095e-8,0.004238069919582637,2.4030269658422523e-5,-7.203516533111505e-8,0.004238249618365501,2.39056679238968e-5,-7.176871236223504e-8,0.004238506777009503,2.376842054507791e-5,-7.14744782604305e-8,0.004238839960336995,2.3654485763485328e-5,-7.122870298290076e-8,0.004239237195182148,2.359612316887198e-5,-7.109993006965748e-8,0.00423967689584437,2.3618836515735366e-5,-7.114251881836275e-8,0.00424012919339875,2.3737839999153642e-5,-7.138914208350213e-8,0.004240558555859129,2.3954028829091893e-5,-7.184219988672258e-8,0.004240928632216016,2.425035359666654e-5,-7.246603747851151e-8,0.004241209686151803,2.4590515496345863e-5,-7.31840475098621e-8,0.004241387602314709,2.4922420371615704e-5,-7.388587732093796e-8,0.00424147157146284,2.5187961743731242e-5,-7.44481247159738e-8,0.004241496426214619,2.5338027012562994e-5,-7.476619148263978e-8,0.004241516665120159,2.53481927416961e-5,-7.478765248745461e-8,0.004241592614544567,2.5228750538790737e-5,-7.453362965654456e-8,0.004241773093309497,2.5024267468472517e-5,-7.409800415341168e-8,0.004242080828456248,2.480219962828495e-5,-7.362345063271682e-8,0.004242505642303187,2.463448176734963e-5,-7.326256531566072e-8,0.004243007230734643,2.4578174120876555e-5,-7.313688342900408e-8,0.004243526169055569,2.4660842178798045e-5,-7.330574786416262e-8,0.004243999680967984,2.4874463362710607e-5,-7.375310120416703e-8,0.0042443776570801894,2.5179193207145155e-5,-7.439515440950807e-8,0.004244634361830328,2.551555261019759e-5,-7.510602778954726e-8,0.0042447725833558445,2.5820973313206575e-5,-7.575282082432305e-8,0.004244819645713096,2.6045265557054406e-5,-7.622855268466984e-8,0.004244817657500771,2.6160427534331055e-5,-7.647316726976563e-8,0.004244812063322777,2.6162998914343238e-5,-7.647870316326475e-8,0.004244842201737484,2.6070232563465724e-5,-7.628128320228887e-8,0.004244935733735506,2.5913058455968382e-5,-7.594622609168704e-8,0.004245106822619801,2.572872050475992e-5,-7.555241538069889e-8,0.004245356804103788,2.5554802441117856e-5,-7.517960510152853e-8,0.004245675934005867,2.5425040582432493e-5,-7.48995353162313e-8,0.004246045266184226,2.53664067068817e-5,-7.47697603900719e-8,0.004246438382144604,2.5396616745149382e-5,-7.482836234073875e-8,0.004246823330043397,2.552139706651534e-5,-7.508808847131201e-8,0.004247165619004974,2.5731389115804212e-5,-7.55296442638736e-8,0.004247433275937945,2.5999499171301278e-5,-7.609589214748047e-8,0.0042476044631466715,2.6280705900143398e-5,-7.669131102787287e-8,0.004247676613223559,2.6517177808645175e-5,-7.719284879324458e-8,0.004247673609435171,2.6650746595202952e-5,-7.747651982304646e-8,0.004247645708001549,2.66412350943042e-5,-7.74564776254694e-8,0.004247658309913079,2.6483856580341366e-5,-7.712204781528955e-8,0.004247771456591539,2.6216061034290582e-5,-7.655226898516179e-8,0.004248018640476505,2.590800755606473e-5,-7.589568494417051e-8,0.004248395212570714,2.563994069145496e-5,-7.532244221725396e-8,0.004248861259489376,2.5477021622606432e-5,-7.497104067998361e-8,0.00424935590167607,2.5452038700586148e-5,-7.491170753332291e-8,0.004249815624233812,2.5560514080836893e-5,-7.513587325912593e-8,0.0042501900081495896,2.5766672608186727e-5,-7.556853344785969e-8,0.004250451383611506,2.6015861961209102e-5,-7.609427999654669e-8,0.0042505977356969114,2.6248914551540066e-5,-7.658758795271883e-8,0.0042506498090625795,2.6415031884901112e-5,-7.694017883491166e-8,0.004250644097952955,2.648096828203765e-5,-7.708071584908982e-8,0.0042506237812728765,2.6435303290169302e-5,-7.698415129034421e-8,0.004250629816343292,2.6287691938557887e-5,-7.667036324682085e-8,0.0042506940711203485,2.6064200669597658e-5,-7.619435383064163e-8,0.00425083548128867,2.5800616341765846e-5,-7.563201480582007e-8,0.004251059186062351,2.5535598231431913e-5,-7.506549954746807e-8,0.004251357853991461,2.5304981396812947e-5,-7.457106386619228e-8,0.004251714123475805,2.5137752884505912e-5,-7.421052674232194e-8,0.004252103288002902,2.5053445751813735e-5,-7.402578044122805e-8,0.0042524958808914486,2.5060282096586535e-5,-7.403485203242214e-8,0.004252860347046862,2.5153483119387155e-5,-7.422821487858902e-8,0.004253166420302202,2.5313592833064807e-5,-7.4565027741937e-8,0.004253390056795452,2.5505445065978426e-5,-7.497072826604751e-8,0.004253520373611728,2.567954717105097e-5,-7.533987563241299e-8,0.004253567583483577,2.5778553226866115e-5,-7.555000192971296e-8,0.004253568477479618,2.57508981459835e-5,-7.549083696491824e-8,0.004253583802551681,2.5570092233629636e-5,-7.51055603806773e-8,0.004253683035294351,2.5251865633977112e-5,-7.44273175308893e-8,0.0042539191944363595,2.4857202588394434e-5,-7.35855734003273e-8,0.004254305764216735,2.447438286380503e-5,-7.276784994537231e-8,0.004254809815918776,2.4186839495990022e-5,-7.215147164839955e-8,0.004255365549942023,2.40441206534225e-5,-7.184200794898621e-8,0.004255899200387112,2.4050089820884473e-5,-7.184826829956902e-8,0.0042563516080044266,2.416972185021108e-5,-7.209662433728606e-8,0.004256690396141003,2.434605252160264e-5,-7.246675786316027e-8,0.0042569115892744334,2.4517943449023026e-5,-7.282912443145628e-8,0.0042570344588616455,2.463347637775471e-5,-7.30732558512375e-8,0.0042570934805204125,2.465775417313392e-5,-7.312438614433928e-8,0.004257129932313604,2.4575925834567138e-5,-7.295011734563332e-8,0.0042571843494951115,2.4392667825468296e-5,-7.255962537821784e-8,0.00425729039774817,2.4129023933815476e-5,-7.199717208281165e-8,0.004257470606229811,2.3817370327804808e-5,-7.133146006679518e-8,0.004257734255741909,2.349544247400287e-5,-7.064283667735547e-8,0.004258077393204028,2.3200390137071024e-5,-7.001050679824002e-8,0.004258484618862725,2.2963666553012255e-5,-6.950158216921607e-8,0.004258932027056634,2.2807293789006354e-5,-6.916316297269846e-8,0.0042593906153518026,2.2741586385370254e-5,-6.901757022449099e-8,0.0042598297434363165,2.276399055898611e-5,-6.905989169541386e-8,0.004260220606168873,2.2858651267932304e-5,-6.925694232532747e-8,0.004260539991874552,2.2996585299082128e-5,-6.954740578872719e-8,0.004260774793749827,2.3136869567961894e-5,-6.984415171021355e-8,0.004260927452055153,2.3230106921002925e-5,-7.004155848425731e-8,0.004261021309681241,2.3226075701983406e-5,-7.003196358517582e-8,0.004261102938290243,2.308688722779646e-5,-6.9733984200722e-8,0.004261236712509181,2.2804045770392858e-5,-6.912910597515336e-8,0.004261487734137989,2.2412204909363093e-5,-6.829103484152083e-8,0.004261895857940792,2.1987951130290533e-5,-6.738297115674651e-8,0.004262453748847359,2.1626559517556065e-5,-6.660796308383029e-8,0.004263104835077354,2.14049565306401e-5,-6.613002381831203e-8,0.004263765230072934,2.1352073118542486e-5,-6.601108302348439e-8,0.004264356348996169,2.14434400684497e-5,-6.619951822339648e-8,0.00426482929740014,2.1618744627758198e-5,-6.656745990661841e-8,0.004265171943391067,2.1807560186110623e-5,-6.696539410340849e-8,0.004265402331610535,2.194966411597293e-5,-6.726522140368924e-8,0.004265556764276095,2.2005321336605362e-5,-6.738204521109695e-8,0.004265678484351986,2.1957407300082035e-5,-6.727876331639272e-8,0.004265809259589074,2.1808924150594526e-5,-6.696101507231523e-8,0.004265983904005325,2.1578682448027443e-5,-6.646826954849454e-8,0.004266226920993157,2.1296504146896058e-5,-6.586379168206377e-8,0.004266550629286272,2.0998265292050864e-5,-6.522408289024045e-8,0.004266954602654954,2.072086530767614e-5,-6.46280184319503e-8,0.0042674264408546,2.0497353315112702e-5,-6.414629674705478e-8,0.004267943861511287,2.0352576012947905e-5,-6.383209365453901e-8,0.004268477960877023,2.0299833661802612e-5,-6.371398436365584e-8,0.004268997253092252,2.0338959047789847e-5,-6.379193925228933e-8,0.004269472004022922,2.0455923406950072e-5,-6.403649435074647e-8,0.004269878504480831,2.0623872099556896e-5,-6.439082513227808e-8,0.004270203091943123,2.0805512560485156e-5,-6.477560803074754e-8,0.004270445852852126,2.0956944805511876e-5,-6.509700275244613e-8,0.004270623800199121,2.10334314266037e-5,-6.525895403540025e-8,0.004270772558072353,2.0997890319405713e-5,-6.518152289098647e-8,0.00427094441011345,2.083220432249813e-5,-6.482534637528951e-8,0.004271199798210908,2.05492416329248e-5,-6.421755267416815e-8,0.00427159041645784,2.0199863007888447e-5,-6.346677840095314e-8,0.004272137010630017,1.986641311092636e-5,-6.274914812415897e-8,0.004272812866192905,1.9637907019181664e-5,-6.225512618287865e-8,0.004273546661830289,1.957484111226967e-5,-6.211428300886088e-8,0.004274248084309201,1.9683554754882735e-5,-6.234052528862284e-8,0.004274842584556,1.9916585609271047e-5,-6.283284863669002e-8,0.004275294989396107,2.0196932839426866e-5,-6.34271221447608e-8,0.004275612111248886,2.044876157713103e-5,-6.396157774097112e-8,0.004275829854443942,2.0618302854561106e-5,-6.432132893338302e-8,0.004275996344867708,2.068048102350494e-5,-6.445246254988373e-8,0.004276158761153353,2.0635703336763096e-5,-6.435525871581819e-8,0.00427635575964747,2.050278681984088e-5,-6.406929194779216e-8,0.004276614264766545,2.03118344130943e-5,-6.365844604760266e-8,0.004276948681532183,2.0098462742130343e-5,-6.319870838452115e-8,0.00427736112987467,1.9899240304877655e-5,-6.276838480380487e-8,0.004277842211255956,1.974773290141609e-5,-6.243949971073313e-8,0.004278372391904025,1.967077619426468e-5,-6.226968673760751e-8,0.004278924276628769,1.9684968915617704e-5,-6.229464867897638e-8,0.00427946603046503,1.9793798937027695e-5,-6.252207128612635e-8,0.004279965907331355,1.9986115124125946e-5,-6.292842834492383e-8,0.004280397398965965,2.0236567080278434e-5,-6.345990398536185e-8,0.004280744247696593,2.0508303055502708e-5,-6.403801521126411e-8,0.004281004505802116,2.075787626038736e-5,-6.45698971255669e-8,0.004281192901995228,2.0941958152062637e-5,-6.496252518206134e-8,0.004281340930710332,2.1025255578912166e-5,-6.513969573609285e-8,0.004281494037741554,2.0988991621400003e-5,-6.506040387677097e-8,0.004281705020143845,2.083884172795236e-5,-6.473613988226346e-8,0.004282022932066112,2.0609966237029076e-5,-6.424190093837948e-8,0.004282478182800925,2.0365345667199266e-5,-6.371269223823294e-8,0.004283067616495902,2.018344302717714e-5,-6.331700549222439e-8,0.004283747241477742,2.0134651144824004e-5,-6.320619458649664e-8,0.0042844407554519515,2.0253973496551404e-5,-6.345578723847007e-8,0.004285064598384449,2.0524555265033713e-5,-6.403009214368057e-8,0.004285558228008341,2.0883667246896797e-5,-6.479498002189184e-8,0.004285903068305841,2.1248575485531713e-5,-6.557331881327865e-8,0.004286121591209917,2.1546759971092086e-5,-6.620971443688664e-8,0.004286261550244254,2.173512138139228e-5,-6.661161891835543e-8,0.004286377010822107,2.1803562222643158e-5,-6.675698118613891e-8,0.004286514639174886,2.1767962224157696e-5,-6.667927461907289e-8,0.004286707249844844,2.1659831340824737e-5,-6.644549978914754e-8,0.004286972651294204,2.1517288514130502e-5,-6.613702981233638e-8,0.004287315036407035,2.137879459328305e-5,-6.583625969488997e-8,0.004287726996196279,2.1279125575024203e-5,-6.561792724729806e-8,0.00428819142343141,2.1246497524740444e-5,-6.554282703858169e-8,0.004288683412819257,2.1300005175710134e-5,-6.56522121072733e-8,0.004289172646002349,2.144705325197606e-5,-6.596225331674356e-8,0.004289626831671317,2.1681083267848825e-5,-6.64591918001667e-8,0.004290016489747565,2.1980505883871905e-5,-6.709706780234995e-8,0.0042903207017423875,2.2309974166205005e-5,-6.780039689973465e-8,0.004290532704681695,2.2624802256956494e-5,-6.847351420232322e-8,0.004290663720481053,2.2878545281189634e-5,-6.901668815447957e-8,0.004290743428588021,2.3032647343331645e-5,-6.934675430215987e-8,0.004290816160740989,2.3066060527652307e-5,-6.941783186631997e-8,0.004290932973482719,2.298241860165485e-5,-6.923692897416443e-8,0.004291140720082246,2.281268438762679e-5,-6.886989001401675e-8,0.004291469988513568,2.261171092999127e-5,-6.843422945885471e-8,0.0042919245712092595,2.244789438370406e-5,-6.807700264279899e-8,0.004292475971297328,2.238658804783379e-5,-6.793912075922681e-8,0.004293066649609138,2.2470558774809148e-5,-6.811318501504072e-8,0.004293623937526895,2.2703998892035536e-5,-6.860890598586648e-8,0.0042940818493636184,2.304812006375384e-5,-6.934344898792616e-8,0.004294402362672422,2.3432831436448893e-5,-7.016645002765099e-8,0.004294586104386337,2.378055743966283e-5,-7.091121590795328e-8,0.004294667795317409,2.4030920659155234e-5,-7.144780929009046e-8,0.004294700566059802,2.4155324165777983e-5,-7.171440891510901e-8,0.004294738209100082,2.4157840931771394e-5,-7.171925710040148e-8,0.0042948226573763385,2.4066452881318333e-5,-7.152192906009953e-8,0.004294978812281802,2.3921337639631674e-5,-7.120830502904449e-8,0.004295214901080934,2.3765000948817973e-5,-7.08694876550506e-8,0.004295525436407369,2.363587044291823e-5,-7.058807624485363e-8,0.004295894601684546,2.3564786623837452E-05,-7.04305813207749e-8,0.004296299122201778,2.357308522950433e-5,-7.044321503200956e-8,0.004296710657229467,2.367115187319423e-5,-7.064870539544668e-8,0.004297098295590391,2.38568917503796e-5,-7.104295898373251e-8,0.004297431906932636,2.4114275885103977e-5,-7.159190498213205e-8,0.004297686870625992,2.4412901902798002e-5,-7.223050607165677e-8,0.004297849991681794,2.4710049162891303e-5,-7.286710575334312e-8,0.00429792530231652,2.4956591162591826e-5,-7.339606327152146e-8,0.004297937372396556,2.5107015043400802e-5,-7.371925088269417e-8,0.004297929510021779,2.5131737805527713e-5,-7.377254984435431e-8,0.004297955548234345,2.5027789983162344e-5,-7.354890403274291e-8,0.004298066575615005,2.4823310836198834e-5,-7.310812995376074e-8,0.004298296552607654,2.4573070322224938e-5,-7.256747872959403e-8,0.004298651648983001,2.434559188780995e-5,-7.207413756368472e-8,0.004299106911661393,2.4205518413300738e-5,-7.176741926718479e-8,0.004299611453430702,2.4196312655059432e-5,-7.174150839999789e-8,0.0043001009376553104,2.4328171010078167e-5,-7.201924724959771e-8,0.004300514215980978,2.45747458074727e-5,-7.254478183774332e-8,0.00430080955408668,2.4880164403869278e-5,-7.319841098782959e-8,0.00430097535914321,2.5174795560467062e-5,-7.383040760602065e-8,0.004301031639911904,2.5394822709818133e-5,-7.430318462394381e-8,0.004301021854896047,2.549876742515806e-5,-7.452698087324046e-8,0.004300998826632299,2.5475424898201563e-5,-7.447707677090092e-8,0.0043010105133326326,2.5341837209243172e-5,-7.418955573869462e-8,0.00430109035070397,2.513426620792213e-5,-7.374198268112992e-8,0.004301253742716078,2.48970164755011e-5,-7.32294267491531e-8,0.004301499427306543,2.467299592201586e-5,-7.274417707510015e-8,0.0043018132999952385,2.4497627550464064e-5,-7.236262240548909e-8,0.004302172657874503,2.4395814589290057e-5,-7.213867310051331e-8,0.004302549817683467,2.4380785913499932e-5,-7.210122313442096e-8,0.0043029149958991805,2.44536492446394e-5,-7.225313252007961e-8,0.004303238964457443,2.460296377691644e-5,-7.2570238773880585E-08,0.00430349625434463,2.4804348391217722e-5,-7.300042578258291e-8,0.0043036695281246816,2.50209511462533e-5,-7.34645445614565e-8,0.0043037550770795956,2.5206324498041653e-5,-7.386254745634518e-8,0.004303768148276709,2.5311391686062272e-5,-7.408849797523384e-8,0.004303745290754547,2.5296058710614142e-5,-7.405564302472968e-8,0.0043037402219377715,2.5143263129179642e-5,-7.372674513257676e-8,0.004303811401843918,2.486984655474745e-5,-7.31375476237472e-8,0.004304003924871586,2.452738717704159e-5,-7.239861410051003e-8,0.004304332998053507,2.4189634346796077e-5,-7.166837537127397e-8,0.004304777053220583,2.3930305794275484e-5,-7.110548942813876e-8,0.0043052839373079,2.380055815885997e-5,-7.082046368346776e-8,0.004305786979287081,2.381512406074437e-5,-7.084577599968396e-8,0.004306223908680077,2.3950918898359302e-5,-7.113265222969439e-8,0.0043065521824008435,2.4156359154944985e-5,-7.157081214482665e-8,0.00430675720105395,2.4366745878058644e-5,-7.202132826384251e-8,0.00430685272341944,2.452074994873828e-5,-7.235202054839195e-8,0.0043068746876313785,2.457397362237289e-5,-7.246674040986775e-8,0.004306870807432403,2.450692094765032e-5,-7.232274420159353e-8,0.0043068889333198876,2.4326274108967804e-5,-7.193368553734489e-8,0.004306967157178836,2.4060115372153373e-5,-7.135951482856131e-8,0.004307127792060001,2.3749312473508598e-5,-7.068800846487233e-8,0.004307375847549257,2.3437998378882705e-5,-7.001424126954424e-8,0.0043077011487614265,2.316559033074148e-5,-6.942331161839482e-8,0.004308082476774727,2.296156998550824e-5,-6.897901648309085e-8,0.004308492160407662,2.2843008936849732e-5,-6.871848008341235e-8,0.00430890014225028,2.2814028032551207e-5,-6.865098180169714e-8,0.004309277281921247,2.2866200020617407e-5,-6.875880227967708e-8,0.004309598220494261,2.2979234337591817e-5,-6.899862356038913e-8,0.004309844408536244,2.3121853538730567e-5,-6.930329429478826e-8,0.0043100078615668095,2.3253479651415424e-5,-6.95853524949172e-8,0.004310095640386761,2.3328083445441076e-5,-6.974529757037752e-8,0.0043101338257101485,2.3301787131791224e-5,-6.968807200575135e-8,0.004310168187241177,2.3144787924465443e-5,-6.934892854607553e-8,0.004310257826444425,2.285531683637069e-5,-6.872365125157918e-8,0.004310459684221365,2.2469228310805165e-5,-6.788925321183882e-8,0.0043108073193948325,2.2056750050369026e-5,-6.699692997284909e-8,0.004311294032439131,2.170255209789584e-5,-6.622910378436072e-8,0.004311871307369093,2.1476062378587954e-5,-6.573553756794064e-8,0.004312465198993063,2.1407057452158824e-5,-6.558081946270183e-8,0.004313001977162613,2.147859710794636e-5,-6.572910476913147e-8,0.00431343005920553,2.1637960989153616e-5,-6.606750631843108e-8,0.004313730316577628,2.181691089414023e-5,-6.644950764688654e-8,0.004313914738250244,2.1951418489715036e-5,-6.673726332891451e-8,0.004314017860593639,2.1995240270097538e-5,-6.6830778021755e-8,0.00431408563427076,2.1926188546349096e-5,-6.668152880876458e-8,0.004314164844430976,2.1746350005664837e-5,-6.62931915957548e-8,0.00431429466372932,2.1478088191753095e-5,-6.571331506627689e-8,0.004314501024681896,2.1157447735519515e-5,-6.501929657323107e-8,0.004314794068269408,2.0826407239506826e-5,-6.430170217264929e-8,0.004315168523400873,2.0525388218328684e-5,-6.364798919827755e-8,0.00431560642180513,2.0287173353931803e-5,-6.31292183912412e-8,0.0043160812455876356,2.0132909454777427e-5,-6.279132138753954e-8,0.004316562520177888,2.007033177327738e-5,-6.265126152698634e-8,0.00431702006617794,2.00938082788825e-5,-6.269717769742918e-8,0.004317427588706235,2.018551638500187e-5,-6.28909388180351e-8,0.004317765712734754,2.0317234227004703e-5,-6.317193328846631e-8,0.004318024775138963,2.0452628316515763e-5,-6.34618604024906e-8,0.00431820770093002,2.0550394730606987e-5,-6.367139110618334e-8,0.004318332893899484,2.0569188001987255e-5,-6.371081436092053e-8,0.004318436011644906,2.04754635624101e-5,-6.350712260775898e-8,0.0043185681789404615,2.0254385622796044e-5,-6.302778494565895e-8,0.004318787523787666,1.9921423273137004e-5,-6.230594134708772e-8,0.004319142414166795,1.9528518015015e-5,-6.145372829533996e-8,0.004319650180655444,1.9156534321257355e-5,-6.064588141621515e-8,0.004320282432594846,1.8890460254098007e-5,-6.006610839445816e-8,0.00432096924731175,1.8786257539194468e-5,-5.983551079099197e-8,0.004321623889974825,1.8848028753740572e-5,-5.996331107102821e-8,0.004322174856199251,1.9029232241916958e-5,-6.03494594472305e-8,0.004322587553187694,1.9254995930678356e-5,-6.083272565155132e-8,0.004322867520357473,1.9450265918529555e-5,-6.125132934634046e-8,0.004323049667978551,1.956007946768571e-5,-6.148655784160723e-8,0.004323182862961931,1.9557648041747735e-5,-6.148015369528662e-8,0.004323316556168647,1.9443050480583164e-5,-6.123159791433297e-8,0.004323491840940722,1.9237131005163212e-5,-6.0785188942898e-8,0.004323736659978244,1.8974013586600857e-5,-6.021415798447603e-8,0.00432406401637427,1.8693883726101143e-5,-5.960523413418266e-8,0.004324472264424686,1.8436553474490432e-5,-5.904470094336049e-8,0.004324946983099295,1.8236033860153257e-5,-5.860648003866715e-8,0.004325464084859797,1.811635649105119e-5,-5.8342897748555724e-8,0.004325993794135984,1.8088868183602328e-5,-5.8278740560323874e-8,0.004326505053826906,1.8151193617222837e-5,-5.84090469392405e-8,0.004326969827564337,1.8287871460248693e-5,-5.870057233852731e-8,0.004327366867667058,1.8472348280178974e-5,-5.909613070587311e-8,0.004327684784604043,1.8669955227489085e-5,-5.952094345795759e-8,0.004327924409123366,1.8841706401499647e-5,-5.989069354469142e-8,0.004328100446453682,1.8948978694444737e-5,-6.012153384588638e-8,0.004328242207755195,1.8959396499784854e-5,-6.014285604854431e-8,0.00432839251061342,1.8854306712077532e-5,-5.991366270790545e-8,0.004328602976287375,1.8637363771232864e-5,-5.9441399495521534e-8,0.004328923808193235,1.834172061702968e-5,-5.879768517306489e-8,0.0043293877420519525,1.803074398317214e-5,-5.8119858923673065e-8,0.004329992303019424,1.7786082973530267e-5,-5.7585025996974733e-8,0.0043306904239555155,1.768141014178147e-5,-5.735306902442807e-8,0.004331400140317573,1.7751344357086818e-5,-5.749928204325917e-8,0.00433203358321681,1.797402614272783e-5,-5.79766211094402e-8,0.004332530332663138,1.828016466901793e-5,-5.8635303908857e-8,0.004332875915402321,1.858298602165903e-5,-5.928765562337491e-8,0.00433309804217549,1.8810034258350935e-5,-5.977689798049865e-8,0.004333248483983109,1.8921204984793378e-5,-6.001607106531904e-8,0.00433338344031064,1.891050947589809e-5,-5.999178553599807e-8,0.004333550076056095,1.879802272931174e-5,-5.974688447449809e-8,0.00433378028617974,1.8619161178224815e-5,-5.935746777534596e-8,0.004334089547866698,1.841532739235039e-5,-5.891288378805079e-8,0.004334478361386218,1.8227051919153682e-5,-5.8500987248132956e-8,0.004334934676237755,1.8089192813388756e-5,-5.819765687811798e-8,0.004335436753461419,1.8027479513569926e-5,-5.805910095808496e-8,0.0043359564346629785,1.805604332199269e-5,-5.8116315662884676e-8,0.004336462854060841,1.8175905259323786e-5,-5.837173979925861e-8,0.0043369265589401195,1.8374650843245116e-5,-5.8798606028170783e-8,0.0043373237749320314,1.8627644789034814e-5,-5.9343665372251605e-8,0.004337640287689868,1.8900903887741546e-5,-5.993342885257249e-8,0.004337874393414731,1.915541028175581e-5,-6.0483416036833585E-08,0.004338038508031595,1.935252810257927e-5,-6.090974291052553e-8,0.004338159117798005,1.9460134108828392e-5,-6.114232980148806e-8,0.004338274774933433,1.9459013263327866e-5,-6.113884811203717e-8,0.004338431681466829,1.9348999136279857e-5,-6.089826911602292e-8,0.004338676165081497,1.9153806772625883e-5,-6.047161761109011e-8,0.004339043688685932,1.8922294391678095e-5,-5.996487910391701e-8,0.004339545635601907,1.872276095381814e-5,-5.952661815361361e-8,0.004340158161930944,1.8627380820978457e-5,-5.9314042383671195e-8,0.004340820587457169,1.8688023122385006e-5,-5.944030774359304e-8,0.0043414499059315215,1.8912570225124942e-5,-5.992294543545765e-8,0.004341969354982378,1.9256317958197064e-5,-6.066513104038634e-8,0.00434233727438235,1.963727956575248e-5,-6.148895689362684e-8,0.004342559700425284,1.9968375421524345e-5,-6.22053917653275e-8,0.004342681194553419,2.0187890581981525e-5,-6.268039485374884e-8,0.004342762928135588,2.0273446998614515e-5,-6.286515201466919e-8,0.004342861762115175,2.0238340874590014e-5,-6.278807051788223e-8,0.0043430181177510525,2.0118621313219873e-5,-6.25268278416331e-8,0.004343252686041884,1.9959504096147545e-5,-6.217910056180777e-8,0.004343568466291725,1.9805367104343365e-5,-6.184105171446118e-8,0.004343954731686096,1.9693836953182042e-5,-6.159455561595036e-8,0.004344390973704534,1.9652723436851773e-5,-6.150043408182522e-8,0.004344850331140559,1.969838524407601e-5,-6.159471002910778e-8,0.004345302792489047,1.9834740731576415e-5,-6.188629404236862e-8,0.004345718569954192,2.0052786388798823e-5,-6.235588467085406e-8,0.004346071890108299,2.0330942481172956e-5,-6.295676357140448e-8,0.004346345120939216,2.0636843362656404e-5,-6.361874562488397e-8,0.004346532649407227,2.0931092520010435e-5,-6.425633112670948e-8,0.004346643556812209,2.1172987348254808e-5,-6.478105282775598e-8,0.004346702139067369,2.1327622981692872e-5,-6.511679997367014e-8,0.004346745608778673,2.137326837845882e-5,-6.521581332631904e-8,0.004346818808370958,2.130755124320618e-5,-6.507223672428581e-8,0.004346966320702236,2.1150975510158874e-5,-6.472999399619078e-8,0.004347222824520035,2.0946473775532036e-5,-6.428207114555517e-8,0.004347603087958219,2.0753784072168932e-5,-6.385844812624413e-8,0.004348093942432825,2.0637814013072452e-5,-6.36007815326696e-8,0.004348651739160019,2.0651659508830847e-5,-6.36252925003523e-8,0.0043492091234758985,2.0818025289423062e-5,-6.398208836552688e-8,0.004349692649033529,2.1116545144798856e-5,-6.462735152225057e-8,0.004350046851532632,2.148558579412229e-5,-6.542717677117046e-8,0.004350254077818288,2.1841590704683874e-5,-6.619972247540033e-8,0.004350339218690546,2.2108334127427978e-5,-6.677897296497183e-8,0.0043503570289232605,2.2241363549602545e-5,-6.706795464383658e-8,0.004350370300956235,2.2236598604831392e-5,-6.705740408002692e-8,0.004350430646805905,2.2122994339245096e-5,-6.680980212150948e-8,0.004350568672542956,2.1947338186704e-5,-6.642641374111236e-8,0.004350793241612556,2.1759652050497017e-5,-6.601571687264844e-8,0.0043510958731244245,2.1603418432720286e-5,-6.567227801223937e-8,0.004351456464205779,2.1510811396030194e-5,-6.546638399293138e-8,0.004351848247956533,2.1501213936502228e-5,-6.544069492800358e-8,0.004352241536665431,2.1581184167779784e-5,-6.560999904068952e-8,0.00435260671995346,2.174478040527643e-5,-6.596178678053824e-8,0.004352917203110646,2.1974004373243897e-5,-6.645716600620018e-8,0.004353152776554337,2.2239771173006768e-5,-6.70329889115276e-8,0.0043533034557195595,2.250423557099356e-5,-6.760694213289382e-8,0.004353373159793762,2.2725320394767957e-5,-6.808739588456914e-8,0.004353381934028024,2.2863721397970617e-5,-6.838860655220757e-8,0.004353365144473504,2.2891593869259356e-5,-6.844958399294913e-8,0.004353368520464555,2.2800891768739177e-5,-6.825225963723115e-8,0.004353439178980252,2.2608536352457108e-5,-6.783284315230564e-8,0.004353614398994551,2.235592337679717e-5,-6.728093363331758e-8,0.004353911091254241,2.210179351953395e-5,-6.672420060605343e-8,0.004354319093981324,2.1909457854221882e-5,-6.63007028625976e-8,0.00435480070535855,2.183105798865961e-5,-6.612459579585697e-8,0.004355297564439238,2.1892701313526038e-5,-6.62535720399581e-8,0.004355744274261172,2.208486894760374e-5,-6.666768156040473e-8,0.004356085988373349,2.2362140804206785e-5,-6.72684784304803e-8,0.004356294790867451,2.265429960519879e-5,-6.790310472655907e-8,0.004356378446729466,2.2886711643210605e-5,-6.840875002736263e-8,0.004356377083974059,2.300287959510685e-5,-6.866191818023424e-8,0.004356348835649946,2.2979906602058662e-5,-6.861222380829316e-8,0.004356351070803769,2.283100298627068e-5,-6.828791603511024e-8,0.0043564253033482265,2.2596103437619816e-5,-6.777550831067574e-8,0.004356590438485916,2.232692894571213e-5,-6.71873398673657e-8,0.004356843977258533,2.207328036231141e-5,-6.663181407464889e-8,0.00435716773989199,2.1874255200302816e-5,-6.619429149558181e-8,0.0043575345277402245,2.17545974438534e-5,-6.592907552880914e-8,0.00435791364940389,2.1724473774609717e-5,-6.585880479157714e-8,0.004358274835255978,2.1780736857639492e-5,-6.597708420358102e-8,0.00435859102021611,2.190842428008057e-5,-6.625166759485598e-8,0.004358840788105637,2.2082124326210005e-5,-6.66273960160543e-8,0.004359011140673432,2.2267590761594875e-5,-6.702970759557112e-8,0.004359100770459174,2.2424521416654e-5,-6.737069654700543e-8,0.0043591232349589806,2.2511572931629804e-5,-6.756005138998922e-8,0.004359108521787183,2.2494178942973776e-5,-6.752211476792377e-8,0.004359100878157092,2.235434252364082e-5,-6.721725820444066e-8,0.004359151203790916,2.209952344550378e-5,-6.666129656422452e-8,0.004359304391648528,2.1766202486049173e-5,-6.59333189575158e-8,0.004359585156155929,2.141440124607869e-5,-6.516384241477555e-8,0.004359988028082468,2.1112991988769316e-5,-6.450292098818624e-8,0.004360476321122433,2.0920264451710092e-5,-6.407788779132097e-8,0.004360991139310915,2.0866833130000284e-5,-6.395608344448584e-8,0.0043614672632936585,2.094691373648151e-5,-6.412567446990825e-8,0.00436185047259702,2.1120373710730043e-5,-6.449986452881506e-8,0.004362111124733698,2.1324180464702604e-5,-6.4941620161576e-8,0.004362250570187353,2.1489435250093217e-5,-6.53007002748905e-8,0.004362299121386524,2.155913544719217e-5,-6.54524253343876e-8,0.004362306490900004,2.1501808725852057e-5,-6.532755100187959e-8,0.004362327761153033,2.131732881203479e-5,-6.492513324816661e-8,0.0043624093738372635,2.103373524474476e-5,-6.430576510522246e-8,0.0043625793884881775,2.0697054625575986e-5,-6.356950528095524e-8,0.004362844207020741,2.0358383999011046e-5,-6.282776240788013e-8,0.004363191208127825,2.006260880711081e-5,-6.217865603614356e-8,0.004363594835992581,1.984133466131531e-5,-6.169150041406605e-8,0.004364023394089613,1.971031936272081e-5,-6.140108548051583e-8,0.004364444713893855,1.9670147056786693e-5,-6.130906149278202e-8,0.004364830116595006,1.9708457183723877e-5,-6.13887614197793e-8,0.004365157008842049,1.9802456355045293e-5,-6.159066614971228e-8,0.0043654108447642925,1.9921222630134676e-5,-6.184741174273681e-8,0.004365587133171469,2.002805687530203e-5,-6.207888714985402e-8,0.004365693773882021,2.0083687956816993e-5,-6.219920719112305e-8,0.004365753261816067,2.0051413982690625e-5,-6.21279557727769e-8,0.004365803266929434,1.990492580654581e-5,-6.18073352015643e-8,0.004365893211815998,1.963812772857377e-5,-6.122369196067238e-8,0.00436607468587738,1.9273718051626967e-5,-6.042630561545666e-8,0.004366386030933518,1.8864892817626648e-5,-5.953112197574838e-8,0.004366836077417156,1.8485075349996475e-5,-5.869834534688314e-8,0.004367395636384049,1.8206114824510273e-5,-5.808489610024617e-8,0.0043680034475078715,1.807342018736887e-5,-5.779018629925774e-8,0.004368585429190273,1.8090183319349116e-5,-5.7821670584522674e-8,0.004369078205338029,1.8218018646954217e-5,-5.8096130493753056e-8,0.004369446485515545,1.8391914972714372e-5,-5.8472137246485704e-8,0.00436968898915749,1.854111673960781e-5,-5.879546235081837e-8,0.004369833869388169,1.8607666783746486e-5,-5.893945230499611e-8,0.004369927829734204,1.8558083076927652e-5,-5.883053071818364e-8,0.0043700232722843815,1.8387261432697222e-5,-5.845686139765173e-8,0.004370166642890487,1.8115771799109823e-5,-5.78626810222891e-8,0.004370389908592708,1.778250420799372e-5,-5.7132479090411445e-8,0.004370706190176643,1.7434832951346612e-5,-5.63696521066772e-8,0.004371109765100231,1.7118586178875612e-5,-5.5674571774707e-8,0.00437157972214823,1.6869939219546253e-5,-5.5126719806860253e-8,0.004372085769119738,1.671054970042191e-5,-5.477386649502183e-8,0.004372594495239376,1.6646123535862942e-5,-5.462880762363998e-8,0.004373074761423813,1.6667710334556395e-5,-5.467217352867607e-8,0.004373501568673639,1.675457816700928e-5,-5.485876153998176e-8,0.004373858478157565,1.687756120804058e-5,-5.5124896858937915e-8,0.004374139111879542,1.7002287531392034e-5,-5.5395470307775045e-8,0.0043743482958161295,1.7092346989803696e-5,-5.559079621301812e-8,0.004374503133939031,1.7112951246571128e-5,-5.5634563689226273e-8,0.004374633720251839,1.7035925052044434e-5,-5.546478116239983e-8,0.00437478225005965,1.6846665517467146e-5,-5.504911354774486e-8,0.0043749983953135655,1.6552475631203626e-5,-5.440324873724291e-8,0.004375328872488854,1.618927976830758e-5,-5.360566541222857e-8,0.0043758013925030695,1.5821068508656155e-5,-5.2796405543630164e-8,0.004376408267399701,1.552634116046679e-5,-5.214735730105396e-8,0.004377099954417064,1.5371900421595234E-05,-5.180488666204743e-8,0.004377797060914417,1.5385036173928835e-5,-5.182897065432117e-8,0.004378418187720637,1.5540645773084347e-5,-5.2165003016123936e-8,0.004378909008357041,1.5771884933839974e-5,-5.266706122898232e-8,0.0043792572209281865,1.599719360222389e-5,-5.315697219265368e-8,0.004379488986244382,1.6147744983164754e-5,-5.34842622002332e-8,0.004379653735493992,1.6183696763184442e-5,-5.356159676976171e-8,0.004379807029548539,1.6097454183882332e-5,-5.337188796430934e-8,0.004379997377027852,1.5908215829117925e-5,-5.2956489809098333e-8,0.004380258535441446,1.5652790384862128e-5,-5.239536296392365e-8,0.004380606499311609,1.5376010872551103e-5,-5.178635373794103e-8,0.00438103981704955,1.5122274389860483e-5,-5.122678455064238e-8,0.0043815422062817,1.4928716380928159e-5,-5.079841505994918e-8,0.0043820867949589636,1.4820349015323273e-5,-5.055656434916802e-8,0.004382641303252554,1.4807475268811135e-5,-5.052422039228374e-8,0.004383173380248949,1.4885420145896664e-5,-5.0691348370280644e-8,0.004383655356796422,1.5036302184118528e-5,-5.1018815625741976e-8,0.004384067847834171,1.5232293344004387e-5,-5.144564428159387e-8,0.0043844019828522774,1.543961315370945e-5,-5.1897827868784535e-8,0.004384660446837142,1.5622634657119858e-5,-5.229728990740927e-8,0.0043848576711448175,1.5747902572815793e-5,-5.257058563354719e-8,0.0043850193932531934,1.5788236658408824e-5,-5.2657827564574646e-8,0.0043851814481957125,1.572732220635757e-5,-5.252279948825495e-8,0.004385386970873339,1.5565072314536914e-5,-5.216487783723147e-8,0.004385680534183977,1.532309143986357e-5,-5.163119876709418e-8,0.004386097920633204,1.5047759637200314e-5,-5.102352030618483e-8,0.004386652021040343,1.4806503360449029e-5,-5.0490006751438264e-8,0.004387319473877426,1.4672634763753373e-5,-5.019184730718326e-8,0.004388037475553013,1.4699180145777687e-5,-5.024571194944651e-8,0.004388719358254085,1.4892581471994294e-5,-5.066597535539156e-8,0.004389286252243407,1.5203884862031068e-5,-5.1345376667470573e-8,0.00438969797548042,1.5546829342512437e-5,-5.209476228885879e-8,0.004389964650890107,1.583302129175502e-5,-5.272030351592314e-8,0.004390134913807563,1.6002864742013964e-5,-5.309129370757188e-8,0.004390272271287374,1.6037840528340582e-5,-5.3166940446750974e-8,0.004390434097429688,1.595511112825302e-5,-5.298445643173724e-8,0.004390660057645578,1.579392903294117e-5,-5.262936255347156e-8,0.004390969109008046,1.5602006407262715e-5,-5.220585215637865e-8,0.0043913615412258964,1.542537772061049e-5,-5.1814795817357e-8,0.004391823037389939,1.5302039558842245e-5,-5.153985439117854e-8,0.004392329121287766,1.5258332624760626e-5,-5.143939304550827e-8,0.004392849551497714,1.5307073316800725e-5,-5.1542117695367437e-8,0.004393352682154456,1.54470359086033e-5,-5.18457185429351e-8,0.00439380971458905,1.566375392426153e-5,-5.23185628529972e-8,0.004394198597306122,1.5931683059558592e-5,-5.2904527284831545e-8,0.004394507186734965,1.621768345692803e-5,-5.353077333402549e-8,0.004394735227108045,1.6485492657756142e-5,-5.411762647781867e-8,0.004394894902223298,1.6700626893534787e-5,-5.45892803278868e-8,0.004395009971871057,1.6835218512750443e-5,-5.48843068576531e-8,0.004395113603586854,1.687246367982367e-5,-5.496537371682426e-8,0.004395244949411491,1.6810475067017456e-5,-5.482779901120044e-8,0.0043954442427448425,1.6665347947444088e-5,-5.450649984627839e-8,0.004395745883391455,1.6472740140844224e-5,-5.407968384406357e-8,0.0043961693024316155,1.6286178870649144e-5,-5.366522773031633e-8,0.0043967088244268844,1.616943709032258e-5,-5.340384348847231e-8,0.00439732633496883,1.6180870696195093e-5,-5.342443633742838e-8,0.004397953375547895,1.635135413255929e-5,-5.379535836427356e-8,0.0043985084347460835,1.6664842817597192e-5,-5.448152340898046e-8,0.004398926535594353,1.7055762545965226e-5,-5.533868602056141e-8,0.004399186184162931,1.7430878674003617e-5,-5.616169045398201e-8,0.004399316502889809,1.7706012639717648e-5,-5.676535310620799e-8,0.004399380619391071,1.7836085828877507e-5,-5.7050496127308454e-8,0.0043994479138703985,1.782330059445976e-5,-5.70217692683362e-8,0.004399571685962228,1.7705329205192075e-5,-5.676158687960766e-8,0.004399779842592975,1.7535919356775476e-5,-5.6387604272475e-8,0.004400076250313624,1.736849329520766e-5,-5.601691660456328e-8,0.0044004470021380936,1.7246443601718784e-5,-5.574493496590799e-8,0.0044008672958289925,1.7199144884804796e-5,-5.5636639903815625e-8,0.004401307044890794,1.724130099925887e-5,-5.572497188992369e-8,0.00440173510197177,1.737368836590099e-5,-5.6012208288017816e-8,0.004402122691783258,1.7584415933249197e-5,-5.6472543144591716e-8,0.004402446537357039,1.785064042267672e-5,-5.705582151470724e-8,0.004402691816659508,1.8141037663291022e-5,-5.7693066337959046e-8,0.004402854735432183,1.841939830699297e-5,-5.8304506128850546e-8,0.0044029441466111215,1.86494319283523e-5,-5.88101859483882e-8,0.004402981550175842,1.8800342453498846e-5,-5.914217622460607e-8,0.004402999067764595,1.8852377164001726e-5,-5.925669183407802e-8,0.004403035359985339,1.8801411674438728e-5,-5.914416507577008e-8,0.0044031298139103415,1.866162281600663e-5,-5.883524829467042e-8,0.004403315601073636,1.8465518632622366e-5,-5.8401102927705954e-8,0.004403612303337892,1.8260820798133723e-5,-5.794674902359043e-8,0.00440401903455858,1.810360352195355e-5,-5.7596036212635465e-8,0.004404509752154576,1.8047165882872968e-5,-5.746702598309528e-8,0.004405033516436402,1.812725114889848e-5,-5.763917890945277e-8,0.004405522902615492,1.834684093381671e-5,-5.8119578846809494e-8,0.0044059119457882465,1.866727755270758e-5,-5.8823215461512124e-8,0.004406159440016461,1.9013925428711905e-5,-5.958550245976834e-8,0.004406266628248096,1.9299284542711648e-5,-6.021339687547807e-8,0.004406277737108989,1.945484969608813e-5,-6.055575571644973e-8,0.004406261496645234,1.9454837423611572e-5,-6.055559500071444e-8,0.004406284449775708,1.9319660877416878e-5,-6.025761062267969e-8,0.00440639062788073,1.910099176720538e-5,-5.977521664665257e-8,0.004406594829344743,1.886022453602534e-5,-5.924323335780905e-8,0.004406887078573716,1.8651292088100253e-5,-5.878025539400848e-8,0.004407241761031286,1.8511880264080445e-5,-5.846944211875105e-8,0.0044076263524043535,1.8461551898719056e-5,-5.835435137480919e-8,0.0044080076754981525,1.8503530268696664e-5,-5.8442683603324096e-8,0.00440835579500999,1.862755742929406e-5,-5.871235534719573e-8,0.004408646532290339,1.881262321625275e-5,-5.911736690258402e-8,0.004408863496128932,1.9029458207028737e-5,-5.959328119831901e-8,0.004409000066919958,1.924325840921723e-5,-6.006330961355848e-8,0.004409061253908856,1.9417302526743488e-5,-6.044637646552229e-8,0.004409064800155661,1.9517894893698925e-5,-6.066804549783033e-8,0.00440904055014602,1.9520391771617026e-5,-6.067376479634501e-8,0.004409027212339246,1.9415263477098266e-5,-6.044217579738232e-8,0.004409066265143777,1.9212538136596372e-5,-5.99949182565613e-8,0.004409193715141178,1.8942795303234154e-5,-5.939893403493536e-8,0.0044094314113227616,1.865344497733075e-5,-5.875845298339941e-8,0.004409780143242562,1.8400286623901103e-5,-5.8196555817766816e-8,0.004410216569539457,1.8235638567657733e-5,-5.782905216370578e-8,0.004410695422717016,1.8195238170461436e-5,-5.773546974239403e-8,0.004411157650944433,1.8286844900537162e-5,-5.7933659296607315e-8,0.004411543971861461,1.8484117436023682e-5,-5.836601541020027e-8,0.004411811395675748,1.8729348317482946e-5,-5.890535923731313e-8,0.004411947793992804,1.89470109132833e-5,-5.938486561457419e-8,0.0044119780011767805,1.906592214848751e-5,-5.964712702981143e-8,0.004411956808968038,1.9042277832868503e-5,-5.9595124411453214e-8,0.004411950401682743,1.8873156757466962e-5,-5.92220569871064e-8,0.004412014554899769,1.8594182067809693e-5,-5.8606156280090905e-8,0.004412179536671111,1.8263848967560027e-5,-5.7876134214088945e-8,0.0044124466739733125,1.7943581917926447e-5,-5.716729690606632e-8,0.004412794575472388,1.7682304086576782e-5,-5.6587619247160394e-8,0.004413189368832398,1.7509204078874898e-5,-5.6201810628385806e-8,0.004413594086340192,1.743345530047553e-5,-5.603059765879325e-8,0.004413975065031127,1.7447630029714103e-5,-5.605809066694707e-8,0.004414305472350097,1.7532025516451413e-5,-5.6241179923360305e-8,0.004414567041261399,1.7658503065552773e-5,-5.651793566777759e-8,0.004414751115520992,1.779363418722658e-5,-5.681456751260478e-8,0.004414859663338807,1.7901658854669397e-5,-5.7052019121006296e-8,0.0044149062993784445,1.794805755027884e-5,-5.7153915757579485e-8,0.004414916691840586,1.7904389601374315e-5,-5.7057269944060924e-8,0.004414927200000021,1.77543682378513e-5,-5.672588204884182e-8,0.0044149804922138025,1.750003314877578e-5,-5.616395099473292e-8,0.00441511759337999,1.7165714561544804e-5,-5.542484487782527e-8,0.004415367428776234,1.679696126662312e-5,-5.460881274387819e-8,0.0044157368984729635,1.64525946058128e-5,-5.3845568238601775e-8,0.0044162055472075626,1.6190716787134946e-5,-5.3263516737987664e-8,0.004416727899593218,1.6052589799655223e-5,-5.295419024084609e-8,0.0044172437234548155,1.6049869174066154e-5,-5.294395078197559e-8,0.004417693384688244,1.615974344870538e-5,-5.3183040430361466e-8,0.004418033663467096,1.6329784446188893e-5,-5.355607037861073e-8,0.004418249405605174,1.6491255741248804e-5,-5.391129234465096e-8,0.004418357633513688,1.657727659886784e-5,-5.41007360539825e-8,0.004418402673640693,1.6540796109409133e-5,-5.4020027084270734e-8,0.004418443391223361,1.636694373579072e-5,-5.3635805163711675e-8,0.004418536429934856,1.6075637077552477e-5,-5.2991599870440183e-8,0.004418721153570862,1.5713686813819345e-5,-5.219048380509432e-8,0.004419011327149181,1.5339827180016276e-5,-5.136208116526004e-8,0.004419395436149071,1.5008693642004086e-5,-5.062720950800594e-8,0.004419843763828487,1.475917925423041e-5,-5.0072119853676645e-8,0.004420318190940414,1.4609543041482485e-5,-4.973758066953034e-8,0.004420781006999231,1.455837640529271e-5,-4.9620879180614367e-8,0.004421200875707693,1.4588855571197866e-5,-4.9685116993361385e-8,0.004421555921818236,1.4673832615992423e-5,-4.9870423302738325e-8,0.004421834861138942,1.4780363310829798e-5,-5.0103979045361175e-8,0.004422037237442245,1.4873349197413976e-5,-5.030810679146616e-8,0.0044221735003303324,1.4918708687383351e-5,-5.0407314602882546e-8,0.004422265076734925,1.488684665139391e-5,-5.0335987892971714e-8,0.004422343894139628,1.4757129675741033e-5,-5.004829930915722e-8,0.004422450182798508,1.4523472760162985e-5,-4.953057889944237e-8,0.004422627129488367,1.4199935359410018e-5,-4.8813710361903955e-8,0.004422911606825086,1.382367526534905e-5,-4.7979688149729203e-8,0.004423322237828266,1.3451651182103001e-5,-4.715436315562399e-8,0.00442384901396835,1.3148639319550321e-5,-4.6480995689175956e-8,0.004424450465700748,1.2968277830758903e-5,-4.6078384882655163e-8,0.004425062411682258,1.2934115116972632e-5,-4.599895383332543e-8,0.004425616532075163,1.3029713949506274e-5,-4.620678002907812e-8,0.00442606125460747,1.3203026493029452e-5,-4.658713648167632e-8,0.004426376247492937,1.3382921571667098e-5,-4.698291956016331e-8,0.0044265757656095205,1.3500398155340669e-5,-4.7241493967355725e-8,0.0044267015746751685,1.3506656906523134e-5,-4.7254652877251136e-8,0.004426809564985756,1.3383317501207797e-5,-4.698127400556689e-8,0.004426954798878417,1.3143641854113754e-5,-4.645015416988944e-8,0.004427178862902963,1.282611238434304e-5,-4.574598280569655e-8,0.004427502065621027,1.248309395401886e-5,-4.498442593684408e-8,0.004427921557662274,1.2167909243147152e-5,-4.4283605507852286e-8,0.0044284149290582065,1.1923590626574095e-5,-4.373914849628887e-8,0.004428947492553156,1.1775726251332769e-5,-4.340818287378602e-8,0.0044294807498054785,1.1730276245194692e-5,-4.330431159108967e-8,0.00442997978210213,1.1775616157272551e-5,-4.3402016286169154e-8,0.004430418284203898,1.1887104697408922e-5,-4.3646763807176316e-8,0.004430781078167451,1.2032394059880673e-5,-4.396683813881441e-8,0.004431064723837474,1.2176260557030221e-5,-4.428411771350637e-8,0.0044312770935376515,1.228454666456542e-5,-4.452283720664672e-8,0.004431436570445023,1.2327479539015128e-5,-4.4616919616307796e-8,0.004431571073044788,1.2282959424570596e-5,-4.451723465126646e-8,0.004431716519505703,1.2140402085948442e-5,-4.420012359781004e-8,0.004431913708413011,1.190525144918933e-5,-4.367745401611296e-8,0.004432202271488714,1.1603137979985335e-5,-4.3005902031456583e-8,0.00443261096494701,1.128105558813796e-5,-4.228959825337529e-8,0.004433145658560025,1.1001798769206879e-5,-4.166779716993523e-8,0.004433779801368679,1.082900401217352e-5,-4.12817006687968e-8,0.004434454646972603,1.0805123199301839e-5,-4.122560821070611e-8,0.004435094025680583,1.093179184586048e-5,-4.1503363883340675e-8,0.004435629850168535,1.1164738583475233e-5,-4.20170322203088e-8,0.004436026030782993,1.1428372850655338e-5,-4.259921088755147e-8,0.004436288544140871,1.1642827137621819e-5,-4.30729574358741e-8,0.00443645852333741,1.1749408550127374e-5,-4.33081550485094e-8,0.004436594888881352,1.1724150687214207e-5,-4.3251474414460785e-8,0.004436755874140951,1.1577909422798677e-5,-4.292656969019233e-8,0.00443698556045168,1.134743368171151e-5,-4.241440383930332e-8,0.004437307141160754,1.1082923092713402e-5,-4.1825890935872864e-8,0.004437722000943753,1.0835997728485317e-5,-4.1275427325207346e-8,0.004438212894918262,1.0650076781292515e-5,-4.0859608303239765e-8,0.004438749638289341,1.055393982394728e-5,-4.0642808497137944e-8,0.004439295959152751,1.0558721353467244e-5,-4.065026502851615e-8,0.004439816265453436,1.065819146280534e-5,-4.0868482817672476e-8,0.004440281272009354,1.0831676496297347e-5,-4.1251640135869176e-8,0.004440671831938921,1.1048643543678123e-5,-4.173183848769729e-8,0.004440980777783971,1.1273898329578631e-5,-4.2230779881881195e-8,0.00444121303269828,1.1472474912977608e-5,-4.267071508775094e-8,0.004441384565236301,1.1613723431763203e-5,-4.298351149337096e-8,0.004441520716355006,1.1674659260946504e-5,-4.311801611635916e-8,0.004441654103827259,1.1642927188475744e-5,-4.304658575328331e-8,0.004441821893723169,1.151970903380154e-5,-4.277157863485106e-8,0.004442061733825511,1.1322569755221519e-5,-4.2331789891194374e-8,0.004442405367359218,1.1087324544257746e-5,-4.1806717475930976e-8,0.004442869542993695,1.0866655575333044e-5,-4.1313536007648224e-8,0.004443445735403163,1.0722317764963522e-5,-4.0989728756109695e-8,0.004444093284368835,1.0708865030730829e-5,-4.0956817567218523e-8,0.0044447430760904995,1.085167507562386e-5,-4.127142029165161e-8,0.004445316435740319,1.1129602124610225e-5,-4.1886642259513546e-8,0.004445754128237322,1.1475626607160576e-5,-4.2653546623268654e-8,0.004446040101964218,1.180003031512926e-5,-4.3372752883896014e-8,0.004446205530673317,1.2024629257590159e-5,-4.387057130415036e-8,0.004446312162708855,1.2108771182796773e-5,-4.405669777283164e-8,0.004446427135514646,1.2055740045207085e-5,-4.3938284164400834e-8,0.004446602819718554,1.1902415131929761e-5,-4.3596893302424874e-8,0.004446867462772274,1.1702280581489064e-5,-4.3150880569211476e-8,0.00444722502652385,1.1510013581017392e-5,-4.272141346034424e-8,0.004447660112373166,1.1371009258943887e-5,-4.240940734950581e-8,0.004448144592351008,1.1315808141326373e-5,-4.228315760058449e-8,0.00444864413440166,1.1358103698667109e-5,-4.237371725707588e-8,0.004449124029971733,1.1495141539025288e-5,-4.2675501313854964e-8,0.004449554153193063,1.1709878328814522e-5,-4.315087896932633e-8,0.004449912835517964,1.1974488478859295e-5,-4.373794004970734e-8,0.004450189440411732,1.2254789064169708e-5,-4.4360459045246395e-8,0.004450385488268202,1.2515133469631053e-5,-4.493894052335691e-8,0.004450514285615522,1.2723218588808307e-5,-4.540139076746559e-8,0.004450599251519201,1.285424788009527e-5,-4.569253626675187e-8,0.0044506713012207,1.2894201090678989e-5,-4.578100104332719e-8,0.004450765540459394,1.2842246866083047e-5,-4.5664633203186566e-8,0.004450917284953617,1.2712332911019386e-5,-4.537412450667041e-8,0.004451157155322636,1.2533780867555994e-5,-4.497450577626395e-8,0.004451504873237557,1.2350163721766086e-5,-4.45628020467471e-8,0.004451961919675364,1.2214876307893983e-5,-4.425820466465791e-8,0.004452504731610211,1.218142064773772e-5,-4.418032467973815e-8,0.004453082319776596,1.2287689702351628e-5,-4.441399178406356e-8,0.0044536237576869794,1.2537566429059222e-5,-4.496809227303929e-8,0.004454058600129623,1.2889221277017663e-5,-4.5749448011482285e-8,0.004454344557171657,1.3261764007055407e-5,-4.657774011379726e-8,0.004454487209756872,1.356321056345686e-5,-4.724799032523849e-8,0.004454537817108847,1.3726577222573843e-5,-4.761103975360433e-8,0.004454569953530231,1.3733042945322505e-5,-4.762500825386583e-8,0.0044546503114754445,1.3611019367534598e-5,-4.7353008192290663e-8,0.004454819540444871,1.3417353161617989e-5,-4.692121901981639e-8,0.004455088006355839,1.3214963151419203e-5,-4.6469264458608674e-8,0.0044554417320164475,1.3056798315819873e-5,-4.6114776888332594e-8,0.00445585181070049,1.2978205618864193e-5,-4.5936593073707565e-8,0.004456283063848414,1.2995515360089378e-5,-4.597157388372203e-8,0.004456700455403941,1.3107894323916252e-5,-4.621850553884396e-8,0.0044570734879752745,1.3300386432833933e-5,-4.664459015113946e-8,0.004457379329847273,1.354733210799182e-5,-4.719288460843296e-8,0.004457605083715164,1.381611653844664e-5,-4.779065425340231e-8,0.004457749208594007,1.4071308351959136e-5,-4.835873390854053e-8,0.004457821935847933,1.4279162754995978e-5,-4.882171487818592e-8,0.004457844413589892,1.4412244841220207e-5,-4.9118304592704225e-8,0.004457846392811299,1.4453606997495086e-5,-4.9210578647334747e-8,0.004457862579541846,1.4399892313824196e-5,-4.909080557286075e-8,0.004457928006711199,1.4262935015950712e-5,-4.878499921089497e-8,0.0044580728160356475,1.406956442522464e-5,-4.835259699152093e-8,0.004458316817654614,1.385936585539174e-5,-4.7881662798881046e-8,0.004458664213340158,1.3680097018682372e-5,-4.7478820736234354e-8,0.004459099197509258,1.3580228791160693e-5,-4.725262339870064e-8,0.004459584026033035,1.3598195514992196e-5,-4.728940689142557e-8,0.004460062199621417,1.3749252092781208e-5,-4.762371409222547e-8,0.0044604695823886415,1.4013664681784223e-5,-4.8211740969940616e-8,0.004460753777901616,1.4333327715772738e-5,-4.8923755358978294e-8,0.004460895857321044,1.4624178301927179e-5,-4.957195585635171e-8,0.00446092230560696,1.4804495669279922e-5,-4.997383459421404e-8,0.004460896977374359,1.4826692738442146e-5,-5.002318300311229e-8,0.004460895349738283,1.4694329378561483e-5,-4.972790533985917e-8,0.004460976016780967,1.4455254987504552e-5,-4.919452719357374e-8,0.0044611646111219405,1.4178234027314433e-5,-4.857603680579923e-8,0.004461454185855782,1.3928460573193122e-5,-4.801746458935442e-8,0.0044618157539403095,1.3752419469232318e-5,-4.7622364855750946e-8,0.0044622107137216325,1.3673354803297678e-5,-4.7442825841443116e-8,0.00446260043945746,1.369354382664959e-5,-4.7484455725649896e-8,0.004462952022908023,1.3799219006272274e-5,-4.7717131725367e-8,0.004463241121058138,1.3965553328710682e-5,-4.8085882901992276e-8,0.004463453324834858,1.4160873361938923e-5,-4.852016867099879e-8,0.0044635849469705675,1.435036495631774e-5,-4.894218569650978e-8,0.004463643417515637,1.4499782775240661e-5,-4.9275285274911396e-8,0.004463647051016639,1.4579493829923948e-5,-4.945312739285398e-8,0.004463623708041326,1.456882906403381e-5,-4.9429429021382195e-8,0.004463607842406662,1.4460176219189537e-5,-4.918704040982184e-8,0.0044636357910401445,1.4261818394534823e-5,-4.874420470914212e-8,0.0044637397511841466,1.3998495202235436e-5,-4.815581116683994e-8,0.004463941391235043,1.3708962880863763e-5,-4.7508063679370155e-8,0.004464246337336341,1.3440376771153735e-5,-4.6906117413019404e-8,0.0044646407956383674,1.3240001878015215e-5,-4.645569825673976e-8,0.004465091381001237,1.3145269848031426e-5,-4.624087973870854e-8,0.004465549066273715,1.3173598219246631e-5,-4.6301165592733985e-8,0.004465957939694511,1.3314136875100861e-5,-4.661280004540448e-8,0.004466268576327031,1.352468763662037e-5,-4.708169932958065e-8,0.00446645372428031,1.3737541360524216e-5,-4.7556478385599956e-8,0.004466520878302181,1.3876287526487771e-5,-4.786615773013864e-8,0.004466514326078782,1.3880445157377903e-5,-4.7875375783545784e-8,0.004466502142877897,1.3727918531229615e-5,-4.753461483998569e-8,0.004466552086217613,1.344312403337607e-5,-4.689826847344771e-8,0.0044667082651349286,1.3085819784721498e-5,-4.609959388131855e-8,0.004466980019477852,1.2727550786706039e-5,-4.529813388914731e-8,0.004467345755137234,1.2428783962732317e-5,-4.4628795806165725e-8,0.004467765779943532,1.2225982089979055e-5,-4.4173112494455235e-8,0.004468196005854024,1.2129693991677846e-5,-4.395498255353792e-8,0.004468597642816224,1.2129490543834448e-5,-4.395156917433471e-8,0.00446894206410521,1.2201011417455164e-5,-4.410885737385981e-8,0.00446921225500677,1.2312244640502023e-5,-4.43555394468987e-8,0.004469402654481283,1.2428213420078234e-5,-4.46134499502362e-8,0.0044695185950805304,1.2514503621319245e-5,-4.48055188286882e-8,0.004469575723049835,1.2540430548831996e-5,-4.486296672886854e-8,0.004469599148903078,1.2482479511679878e-5,-4.473308223481721e-8,0.004469621667375493,1.2328204497541601e-5,-4.4387945702341005e-8,0.004469680258111596,1.2080054076724377e-5,-4.38329250854799e-8,0.004469810440791369,1.1757832861630705e-5,-4.3112118745779403e-8,0.004470038938882233,1.139812552580378e-5,-4.2307071423256166e-8,0.004470376233823944,1.1049363336854192e-5,-4.1525836645826615e-8,0.004470811437085582,1.0762470256707936e-5,-4.088220096014905e-8,0.004471311827050345,1.057885493987764e-5,-4.046892914926202e-8,0.004471828174441778,1.0518954079644614e-5,-4.0332120643179816e-8,0.00447230517930829,1.057478045414597e-5,-4.045439322306815e-8,0.004472694773246646,1.0709058764895794e-5,-4.075274930775221e-8,0.004472969079340785,1.0862056909000877e-5,-4.1093716830421817e-8,0.004473129460972397,1.096542999972803e-5,-4.1324306385980915e-8,0.004473208349376754,1.0960344314636686e-5,-4.131265117419883e-8,0.004473261801176122,1.0814980769902441e-5,-4.098727821687716e-8,0.004473353611162491,1.0535090952922028e-5,-4.036078520359405e-8,0.004473535890618031,1.0162456216834655e-5,-3.952640941680167e-8,0.004473833792415958,9.760956408521302e-6,-3.862688960352953e-8,0.004474240602953426,9.396173414810474e-6,-3.7808898628385294e-8,0.004474724001444978,9.11738920258227e-6,-3.718281945206038e-8,0.004475238859403357,8.948272943174389e-6,-3.6801887768029544e-8,0.0044757402350894555,8.887048525787006e-6,-3.6662466891908055e-8,0.004476192324498001,8.912754115928486e-6,-3.6717928510436886e-8,0.004476572466872101,8.99328366656885e-6,-3.689655835364853e-8,0.004476871540255352,9.092325994737656e-6,-3.711706737226179e-8,0.0044770926280973825,9.174281950373387e-6,-3.7299643889725875e-8,0.004477249315061717,9.207572991317009e-6,-3.737343689531388e-8,0.0044773641629216165,9.167232096321902e-6,-3.7282422144220036e-8,0.004477467204936426,9.037578898248145e-6,-3.699141801660316e-8,0.004477593756950581,8.815347168589488e-6,-3.649307148880597e-8,0.00447778058690321,8.512872182307729e-6,-3.5814955514758316e-8,0.004478059745215661,8.159958224253264e-6,-3.502372164908136e-8,0.004478450365817333,7.802247766408065e-6,-3.4221459193305144e-8,0.004478950468601355,7.494062159631074e-6,-3.3529720730520204e-8,0.004479532465119492,7.285542176108168e-6,-3.3060801908352687e-8,0.004480146136971822,7.2072554470058906e-6,-3.288331103792207e-8,0.004480730224220354,7.258279349781589e-6,-3.2995444030558204e-8,0.004481229449583244,7.4035582392112385e-6,-3.331896233314279e-8,0.004481610689525678,7.582522644393277e-6,-3.371838931973838e-8,0.004481872292063173,7.725939025928392e-6,-3.403868938062639e-8,0.00448204374844317,7.774910697168804e-6,-3.414782399457034e-8,0.004482176671298304,7.696059172490782e-6,-3.397078855811176e-8,0.004482330435030019,7.4890430319435334e-6,-3.350650916046562e-8,0.004482556672721601,7.1850969128227755e-6,-3.282465246101726e-8,0.0044828866992572885,6.837522641746615e-6,-3.2044432737991846e-8,0.0044833250857910616,6.507056498926579e-6,-3.130192899832561e-8,0.004483850858172803,6.24650987263678e-6,-3.071570165203201e-8,0.004484425307959444,6.08924159396039e-6,-3.036088489326645e-8,0.004485003194359061,6.044356934728174e-6,-3.025827024763154e-8,0.004485543401858622,6.098712850233066e-6,-3.0378643182073185e-8,0.004486016219005494,6.2234233182378906e-6,-3.0657287324259747e-8,0.0044864064166258944,6.3817652026060565e-6,-3.1011736157922704e-8,0.004486712974298434,6.536100940869929e-6,-3.135738930785751e-8,0.004486946987567679,6.652794334948827e-6,-3.16186317416998e-8,0.0044871290855611435,6.705289352964788e-6,-3.173578594963119e-8,0.004487287039748156,6.676139966458214e-6,-3.1669660514816774e-8,0.004487453549021817,6.558809591876483e-6,-3.1405558068106883e-8,0.004487663626245549,6.359694715241642e-6,-3.095779699979666e-8,0.004487950667436226,6.100153211559874e-6,-3.0374268126452117e-8,0.004488340386805238,5.817319379742182e-6,-2.973828357636435e-8,0.004488842722498734,5.561454687988725e-6,-2.9162651978515495e-8,0.004489443758855133,5.387386078451001e-6,-2.87704753805209e-8,0.00449010207955269,5.339481305214199e-6,-2.866142686948672e-8,0.004490754688042762,5.434077367358827e-6,-2.887228736862537e-8,0.004491334130057058,5.647948607453723e-6,-2.9351019643881805e-8,0.004491791249757919,5.921297869142392e-6,-2.99634549511861e-8,0.004492112629279643,6.17644552752166e-6,-3.0535254824106297e-8,0.00449232388491216,6.343735825162951e-6,-3.0910079891972617e-8,0.004492478423788278,6.3824291151391336e-6,-3.0996454297399085e-8,0.0044926387333911215,6.288994539844147e-6,-3.078631234061721e-8,0.004492858636300761,6.092913739653983e-6,-3.0345562453837724e-8,0.004493171588724417,5.844789364045817e-6,-2.9787493231587065e-8,0.00449358619792652,5.60206433789655e-6,-2.9240893731404095e-8,0.004494087869175982,5.4161245069199806e-6,-2.882123891207294e-8,0.004494644740160421,5.322864554289205e-6,-2.8609503663609465e-8,0.004495216006784931,5.337654872160231e-6,-2.864069875751362e-8,0.004495760772876803,5.45491845871229e-6,-2.8902689986086383e-8,0.00449624562807949,5.6517357057193595e-6,-2.9344127629553888e-8,0.004496649625176552,5.894052353282223e-6,-2.988837234120634e-8,0.004496966197981279,6.14368973988668e-6,-3.044936038422412e-8,0.004497202413708704,6.364618307242032e-6,-3.094585642668188e-8,0.004497376491928267,6.527582409948589e-6,-3.131194447327545e-8,0.004497514640436966,6.6129278100694005e-6,-3.150337999113445e-8,0.004497647925917268,6.612117621637158e-6,-3.150093270015358e-8,0.004497809336845073,6.528610724443239e-6,-3.131231070153016e-8,0.004498030707089667,6.3785361876222695e-6,-3.09736925859592e-8,0.004498338829174895,6.191080665260008e-6,-3.055066942661581e-8,0.004498750077775436,6.0076683654676744e-6,-3.013646953689903e-8,0.004499263612814337,5.8780642609847445e-6,-2.9843203850422515e-8,0.004499854940636369,5.851244450515609e-6,-2.9781269629881294E-08,0.004500473936466841,5.960397636023314e-6,-3.002551100540538e-8,0.004501052719345036,6.205775394502228e-6,-3.057655086561226e-8,0.00450152565398311,6.544818406940442e-6,-3.133855594471292e-8,0.004501855052718436,6.89991925988118e-6,-3.213677936923044e-8,0.004502048299394567,7.184984577129539e-6,-3.277745584916125e-8,0.00450215485481849,7.337928245096862e-6,-3.312096524996092e-8,0.004502244939964075,7.34104622514252e-6,-3.31275673941889e-8,0.0045023832883471036,7.220589179745083e-6,-3.285626158580508e-8,0.0045026110823796145,7.030850470500054e-6,-3.2428926008768215e-8,0.0045029404092560505,6.834169236371335e-6,-3.198546698313869e-8,0.004503358106314494,6.685082210089396e-6,-3.1648403907449894e-8,0.004503833931529304,6.621199922123047e-6,-3.150250475699595e-8,0.004504329393182454,6.659916022098113e-6,-3.158735035096041e-8,0.004504805490228415,6.79906815339101e-6,-3.18986098972113e-8,0.0045052288712172945,7.020052500014815e-6,-3.239479081077634e-8,0.004505576291020284,7.292536290791366e-6,-3.300768877577651e-8,0.004505837190189702,7.580099251624076e-6,-3.3655110613896705e-8,0.0045060143045280365,7.846042790020471e-6,-3.42541110553583e-8,0.004506122446663604,8.058625318459529e-6,-3.473295260761845e-8,0.0045061858442556986,8.195104654863028e-6,-3.504028264202122e-8,0.004506234642510104,8.244233774000591e-6,-3.515070923594395e-8,0.004506301185498216,8.20730170658394e-6,-3.506705303538336e-8,0.004506416396345633,8.098093426558627e-6,-3.482021907021817e-8,0.004506606235169193,7.94206498498607e-6,-3.446740371929097e-8,0.004506887964378976,7.774744655900673e-6,-3.4088620681013444e-8,0.004507265898608951,7.63883680811971e-6,-3.378026681707891e-8,0.004507726866888514,7.578827637892328e-6,-3.364294154809401e-8,0.0045082369085281135,7.631796357853752e-6,-3.376059550196789e-8,0.0045087423408103665,7.81442404265071e-6,-3.4171064362557586e-8,0.004509179270358261,8.109527450340536e-6,-3.48355963905556e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json new file mode 100644 index 000000000..d989a12f4 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":26000,"numberOfSamples":1000,"samples":[0.004509493310776733,8.460255546355793e-6,-3.5625800851343465e-8,0.004509663584584268,8.78152154032578e-6,-3.634960149730122e-8,0.004509716789810693,8.989819707723907e-6,-3.681866430913203e-8,0.004509719059465651,9.037418772725032e-6,-3.692552117143939e-8,0.004509748243703133,8.930185223519827e-6,-3.668355434778159e-8,0.004509863647122957,8.719470842231082e-6,-3.620846132642241e-8,0.004510089653785742,8.476972036399517e-6,-3.5661533171045015e-8,0.004510416800722429,8.269299770251092e-6,-3.51925282944491e-8,0.004510813094911667,8.1427235238956e-6,-3.4905561743649874e-8,0.004511237012805131,8.118815983827459e-6,-3.4849442039030304e-8,0.004511647598100416,8.19695215375018e-6,-3.5023237901990346e-8,0.004512010754110658,8.359585736620415e-6,-3.538793530902102e-8,0.004512302608721269,8.577895407180773e-6,-3.5878908014654e-8,0.004512511101780664,8.817020399356672e-6,-3.6417590410461715e-8,0.004512636407156604,9.040913865577355e-6,-3.692247406897225e-8,0.004512690307657771,9.216869444768706e-6,-3.7319489010541575e-8,0.004512694498577715,9.319590010896785e-6,-3.755134208751638e-8,0.004512677812454461,9.33448051439994e-6,-3.758499305360356e-8,0.004512672525088187,9.259714461186162e-6,-3.74162487552752e-8,0.004512710155956202,9.106773676260358e-6,-3.7070886445067697e-8,0.004512817232229619,8.899452134994748e-6,-3.660239062283695e-8,0.004513011361703757,8.671416905011533e-6,-3.6086549932726506e-8,0.0045132978459024205,8.462410007400726e-6,-3.561303803422552e-8,0.00451366700674806,8.313087368408677e-6,-3.5273853268424084e-8,0.004514092641922462,8.258223307030978e-6,-3.5147920393724736e-8,0.004514532771288454,8.318077690988317e-6,-3.5281410931936163e-8,0.004514934630932754,8.4888481118899e-6,-3.566597134940736e-8,0.004515245854344678,8.735374126556136e-6,-3.622214330179837e-8,0.0045154316998782295,8.991891199064452e-6,-3.6801147360575755e-8,0.004515492902915043,9.176856590224277e-6,-3.7218586920753816e-8,0.004515473030595792,9.22132948769478e-6,-3.731873347690093e-8,0.004515445973338222,9.09843419372188e-6,-3.704104339955742e-8,0.00451548682469044,8.835578371895206e-6,-3.644751863773576e-8,0.00451564268107663,8.500985857177386e-6,-3.5692080359945736e-8,0.0045159197183348996,8.174205711565663e-6,-3.495399269113799e-8,0.004516289609363855,7.91891452501725e-6,-3.437668106843999e-8,0.004516706111846334,7.769533914623208e-6,-3.403776290168179e-8,0.004517121078763411,7.73134067417984e-6,-3.3949388348932536e-8,0.0045174946878258695,7.787734155315276e-6,-3.4074540770568025e-8,0.004517799867137044,7.908923469211388e-6,-3.434642142253354e-8,0.004518023021591153,8.059160327422076e-6,-3.468456742654183e-8,0.004518163140214663,8.202005982025426e-6,-3.50066650311153e-8,0.004518230411948181,8.30424890030949e-6,-3.523747823122548e-8,0.004518244570725208,8.33915192550796e-6,-3.531634932075353e-8,0.004518232782286238,8.28935594403696e-6,-3.5203891163581475e-8,0.004518226774465987,8.149365170645358e-6,-3.488762043767852e-8,0.004518259006711036,7.927116613346235e-6,-3.438542274392408e-8,0.004518358060544222,7.643963370228097e-6,-3.3745425584923236e-8,0.004518543856405558,7.332621283429884e-6,-3.3041356370972954e-8,0.004518823498710852,7.0329632269025115e-6,-3.236314547040654e-8,0.004519188579967757,6.785903929501321e-6,-3.180325247605029e-8,0.004519614661144808,6.626048418181081e-6,-3.14401232958339e-8,0.0045200634304379044,6.5740276672578925e-6,-3.132079397132222e-8,0.004520487966458727,6.62956304606739e-6,-3.144502131997278e-8,0.00452084147546764,6.766843341505083e-6,-3.175463526314589e-8,0.004521089187148414,6.934764185105069e-6,-3.2134004538126606e-8,0.004521221269959029,7.065025688552307e-6,-3.2428442843453624e-8,0.004521261859102045,7.089574850293132e-6,-3.248384715700535e-8,0.0045212674299407694,6.964089990219654e-6,-3.2199939344201606e-8,0.004521310513078177,6.687544084459722e-6,-3.1574464342686096e-8,0.004521453447203763,6.305670157088708e-6,-3.071085821791362e-8,0.0045217253573987225,5.893958647960642e-6,-2.9779688167653515e-8,0.004522114733755025,5.529133856038296e-6,-2.8954214723599135e-8,0.004522579377927455,5.264744210794258e-6,-2.8355366465152043e-8,0.004523065009217748,5.120982847527676e-6,-2.802885167464862e-8,0.004523521972907846,5.088150002782038e-6,-2.7952986672350293e-8,0.004523914736487703,5.136932989628306e-6,-2.8061821235107004e-8,0.004524224518460753,5.229079919518181e-6,-2.8269112293518485e-8,0.004524447866784532,5.325356167857952e-6,-2.8486202260608446e-8,0.004524593830297251,5.390497834119252e-6,-2.8633216627973057e-8,0.004524681160259874,5.396171432205578e-6,-2.864585654482284e-8,0.004524735849207278,5.323027317101781e-6,-2.8480176026552257e-8,0.0045247886943237964,5.16249823096028e-6,-2.8116730602371682e-8,0.004524872353940403,4.918444281738836e-6,-2.7564280225240977e-8,0.0045250174349796965,4.608134848323794e-6,-2.68619228883987e-8,0.004525247591606092,4.261615509273891e-6,-2.6077583364155316e-8,0.004525574321292053,3.918549452938378e-6,-2.530086898948843e-8,0.00452599277311532,3.622150479587777e-6,-2.462943302074595e-8,0.0045264801545203655,3.4107258886289212e-6,-2.4149954956603862e-8,0.004526998018263306,3.308450392319929e-6,-2.3917312554474847e-8,0.004527498775693957,3.317760005942039e-6,-2.3937301228621522e-8,0.00452793558120547,3.415707219466181e-6,-2.415823276235786e-8,0.00452827373820132,3.555942963102195e-6,-2.4475281614218993e-8,0.004528501076735233,3.677053577969154e-6,-2.4749321189987848e-8,0.004528634255226658,3.7166708540264696e-6,-2.4838951555615288e-8,0.00452871788049019,3.6288209284880697e-6,-2.4639908971730102e-8,0.004528814461392247,3.399578871249497e-6,-2.4120586107355082e-8,0.004528986348915549,3.0544546974012395e-6,-2.3338735228699577e-8,0.004529275447593868,2.652362755159554e-6,-2.2427751850493508e-8,0.0045296894826229355,2.266809562799965e-6,-2.1554061940523532e-8,0.004530201357681512,1.962172998408435e-6,-2.0863453384503786e-8,0.004530761107800889,1.7757792179593227e-6,-2.044053421769499e-8,0.004531313427122603,1.7122786235617054e-6,-2.0295983770420518e-8,0.0045318125655776954,1.749367675975404e-6,-2.037944352447753e-8,0.004532230187937357,1.8490802478591477e-6,-2.0605011670815894e-8,0.00453255650096998,1.968861091375431e-6,-2.08762767548505e-8,0.004532797413529103,2.069429992863889e-6,-2.1104137100273155e-8,0.004532970455627508,2.1191957801873115e-6,-2.121685754164669e-8,0.004533101006844266,2.0963386322046738e-6,-2.1164869031366592e-8,0.004533219236241922,1.9898190337828303e-6,-2.09231193072752e-8,0.004533357423629913,1.8001513809640854e-6,-2.0492836790277707e-8,0.004533546992225019,1.540165048997408e-6,-1.9903207651827864e-8,0.004533814625910253,1.2352637227640804e-6,-1.9211889086172134e-8,0.0045341773121543635,9.220902568912064e-7,-1.8501932634248034e-8,0.004534637007950439,6.443360771918933e-7,-1.7872295458798828e-8,0.004535176664792075,4.4499167138597644e-7,-1.7420339103780497e-8,0.004535760035304328,3.557925328380303e-7,-1.7217978115692215e-8,0.004536337215533742,3.866412902473646e-7,-1.728772350881937e-8,0.004536855876733859,5.191842687487436e-7,-1.7588072274695526e-8,0.004537275385870752,7.081369882607212e-7,-1.8016430469229954e-8,0.004537579125593926,8.912435030713721e-7,-1.8431639886474907e-8,0.004537780530744449,1.005317578228007e-6,-1.8690357071296403e-8,0.004537920538034231,1.0034699039837472e-6,-1.868616129977461e-8,0.0045380570398233745,8.682810605385142e-7,-1.837946472292758e-8,0.004538249294644987,6.169983072998986e-7,-1.780931248930263e-8,0.004538541670781989,2.970358272201004e-7,-1.708319176747392e-8,0.004538951579800054,-2.7231731686069303e-8,-1.634711520277816e-8,0.004539465565272268,-2.9245638234442717e-7,-1.5744867236873657e-8,0.004540044817016876,-4.530987714794202e-7,-1.537993968878856e-8,0.004540637691521912,-4.913904592554641e-7,-1.5292863661002783e-8,0.0045411941681401885,-4.179588426089708e-7,-1.545968048557915e-8,0.0045416771529875445,-2.646725790176748e-7,-1.580808820140591e-8,0.004542067915028178,-7.389589463817978e-8,-1.624181308946475e-8,0.004542365941693601,1.1161571806108388e-7,-1.6663601282918254e-8,0.004542585366851695,2.557719936323004e-7,-1.6991327574329404e-8,0.004542750301596352,3.328556897280507e-7,-1.7166487509062615e-8,0.004542890539772055,3.288339048433999e-7,-1.7157205799619142e-8,0.004543038110357333,2.4148307307612337e-7,-1.6958505979006495e-8,0.00454322442352209,8.020747945813414e-8,-1.659185787564851e-8,0.004543477357567356,-1.341554185295706e-7,-1.6104693284517906e-8,0.0045438176089469635,-3.6995599015852086e-7,-1.5568968349127696e-8,0.004544254057927853,-5.868612278189073e-7,-1.507632289085078e-8,0.004544778812882803,-7.409000787411416e-7,-1.4726631776247386e-8,0.0045453638821404034,-7.933529756111925e-7,-1.4607830316871693e-8,0.004545962512626217,-7.226259496806341e-7,-1.4768947865738407e-8,0.004546517831531095,-5.353354038386974e-7,-1.5194914668309396e-8,0.004546978401910495,-2.705801777601392e-7,-1.5796839796783648e-8,0.004547315606031961,7.426064280520287e-9,-1.6428760347708144e-8,0.00454753489003374,2.2771495362971647e-7,-1.6929398929145512e-8,0.004547674975302893,3.348200634734904e-7,-1.7172762210130373e-8,0.004547795269270398,3.0546407671952013e-7,-1.7106022758788838e-8,0.004547957342816333,1.5361082419481356e-7,-1.6760923023671023e-8,0.004548207818776337,-7.620926519655014e-8,-1.623857269178295e-8,0.004548567688113334,-3.2310178950335675e-7,-1.5677235728358874e-8,0.004549029689400049,-5.261904517049809e-7,-1.5215224434557068e-8,0.004549562879332015,-6.387181991297879e-7,-1.4958938590346338e-8,0.004550122119909111,-6.369676213818445e-7,-1.4962560924246113e-8,0.004550659547407562,-5.227487180281773e-7,-1.522226203843342e-8,0.00455113503524916,-3.198295674394947e-7,-1.568415057741117e-8,0.004551523306381531,-6.614611648123595e-8,-1.6261898726347644e-8,0.004551816641272785,1.9551328796095916e-7,-1.685796274830549e-8,0.004552023601182218,4.2580724108011224e-7,-1.7382583753550408e-8,0.004552165189758773,5.945892816202448e-7,-1.7766991018379748e-8,0.004552270093790798,6.837932410099917e-7,-1.7970026091410244e-8,0.004552370226282839,6.880617875256065e-7,-1.797954851084639e-8,0.004552497089156715,6.141061808103928e-7,-1.781091130786019e-8,0.004552678823971549,4.796156243032983e-7,-1.7504429067141582e-8,0.004552937441607541,3.1202357072442164e-7,-1.7122570952647516e-8,0.004553285657210565,1.4683488458868566e-7,-1.6746191281231358e-8,0.004553723072438308,2.461230159602889e-8,-1.6467701649164962e-8,0.004554232297584862,-1.4673606685835707e-8,-1.6378198838017022e-8,0.004554776931368462,5.916408340345163e-8,-1.654648595704409e-8,0.004555304544316013,2.5471410996338887e-7,-1.699210890005788e-8,0.004555757580182239,5.487508779098537e-7,-1.766206390844868e-8,0.00455609163018589,8.847980560550384e-7,-1.8427567403072217e-8,0.004556294266149341,1.1862585904106192e-6,-1.9114066338961307e-8,0.00455639356224145,1.3819276275300728e-6,-1.955944643880223e-8,0.004556449423840962,1.4320994076717743e-6,-1.967347844662727e-8,0.00455653146260646,1.3415196289400694e-6,-1.9467164239301853e-8,0.004556695250636879,1.1538974614742377e-6,-1.9040064669564954e-8,0.00455696762660136,9.337292242152009e-7,-1.8538868697838413e-8,0.004557344253094815,7.457228920368247e-7,-1.8110674855141883e-8,0.004557796262614695,6.393184058846508e-7,-1.7867944352973605e-8,0.004558280964655819,6.408021303045762e-7,-1.7870661006435703e-8,0.004558752717751708,7.521507776956689e-7,-1.812364701480733e-8,0.004559171865542613,9.545520907436515e-7,-1.8584396920373626e-8,0.004559510918417762,1.214685417394258e-6,-1.9177186559210626e-8,0.0045597577345257365,1.492268065989241e-6,-1.9810175736451022e-8,0.004559915758252532,1.747525782261627e-6,-2.0392490975707653e-8,0.004560001790681829,1.947399946982737e-6,-2.084852456530275e-8,0.004560042130719432,2.069755428846989e-6,-2.112766147211479e-8,0.004560068031127442,2.105379942421046e-6,-2.1208875035905857e-8,0.004560111313149676,2.0580137470542224e-6,-2.110073390215724e-8,0.004560200668904181,1.943025512553438e-6,-2.083829693588606e-8,0.004560358702285993,1.785412603296129e-6,-2.0478523102675264e-8,0.004560599413535639,1.6174458646150957e-6,-2.009495393525646e-8,0.004560925771429382,1.4758038902445344e-6,-1.977126696599221e-8,0.004561327227637577,1.3976103681723366e-6,-1.9592281027131787e-8,0.004561777687863393,1.414475222692563e-6,-1.963031184849548e-8,0.004562235579990404,1.5439760444566057e-6,-1.9925614673578647e-8,0.004562648675447503,1.7796412722016043e-6,-2.046341689014831e-8,0.004562966076598825,2.0834817290894464e-6,-2.1156859279096877e-8,0.004563156563769151,2.3880171788488707e-6,-2.1851733662215338e-8,0.004563226026995868,2.6134961406077906e-6,-2.236596297709388e-8,0.004563222002259049,2.697182257226839e-6,-2.255654425324677e-8,0.004563218140920344,2.6200473503104345e-6,-2.2380369070183947e-8,0.004563285177328307,2.4142697533356353e-6,-2.1911080480621846e-8,0.00456346510562536,2.1474700508499156e-6,-2.1302898831592876e-8,0.0045637614855055355,1.8952029862123072e-6,-2.0727876983910757e-8,0.004564146109374209,1.717390042126911e-6,-2.0322347502066937e-8,0.004564573586655692,1.6467160412382832e-6,-2.0160696512706902e-8,0.004564995621143562,1.6879982482464885e-6,-2.025403919365333e-8,0.004565371098880404,1.823849272809698e-6,-2.0563061761098215e-8,0.004565671575998424,2.0224636955771143e-6,-2.1015577494141815e-8,0.004565883304822525,2.2451570701558744e-6,-2.1523520714831093e-8,0.004566007062175339,2.4528861969496664e-6,-2.1997743592595424e-8,0.004566056469157245,2.6116666971517507e-6,-2.23604574329312e-8,0.004566055109573586,2.6967378051573467e-6,-2.2554903643749895e-8,0.004566032787591015,2.6952576374760298e-6,-2.2551638035756678e-8,0.004566021340058094,2.6074130943391173e-6,-2.2351082445335482e-8,0.004566050456020915,2.445916611802514e-6,-2.198229461679592e-8,0.004566143978834918,2.234071638222029e-6,-2.1498460356284963e-8,0.004566316991076654,2.002834908710053e-6,-2.0970174692905903e-8,0.004566573698773829,1.7872369419549948e-6,-2.047735188978444e-8,0.004566906025496633,1.6222415688750605e-6,-2.009987915744285e-8,0.004567292941820179,1.5378947751270364e-6,-1.9906572258774763e-8,0.0045677009482845456,1.5534732761251689e-6,-1.9941722705096247e-8,0.004568086845586504,1.6706423254153708e-6,-2.0209304708076832e-8,0.004568404479915657,1.8669001932336232e-6,-2.065787129431821e-8,0.004568616641222311,2.0927296815380814e-6,-2.1174057753546027e-8,0.004568710628782926,2.277737563029436e-6,-2.159677431671749e-8,0.004568710906383361,2.3496980887248315e-6,-2.1760931647364762e-8,0.004568678450507578,2.2627328227331568e-6,-2.1561913449607736e-8,0.004568690934995052,2.0202730399911163e-6,-2.100789416692359e-8,0.004568811461316786,1.6765736725135978e-6,-2.0223021008261412e-8,0.004569064102334118,1.3138502582226867e-6,-1.939501198865483e-8,0.00456942983638702,1.0095623883627573e-6,-1.870048308376553e-8,0.0045698609228537225,8.126805895776015e-7,-1.8250956905805127e-8,0.004570301299600792,7.370286449055343e-7,-1.8077863586350383e-8,0.004570702395164331,7.675146472653699e-7,-1.8146849034032396e-8,0.004571031105591736,8.712119800734532e-7,-1.838299920858834e-8,0.004571271553897738,1.0077872223193491e-6,-1.8694474593890068e-8,0.004571423431715869,1.1371794672960694e-6,-1.898988427190855e-8,0.00457149912894306,1.224623094486609e-6,-1.9189713805360918e-8,0.004571520661368493,1.2439529482437433e-6,-1.9233970167685107e-8,0.004571516461258664,1.1798659800376192e-6,-1.90875063062554e-8,0.004571517887299565,1.0292685411183112e-6,-1.874320617434184e-8,0.00457155544903053,8.015811947188519e-7,-1.822266996676711e-8,0.004571654890494846,5.177527012148897e-7,-1.757386049492885e-8,0.0045718335249696285,2.0776980474633583e-7,-1.686531683855287e-8,0.004572097388308316,-9.323396016944465e-8,-1.6177255542095043e-8,0.004572439665645757,-3.4987692521596087e-7,-1.5590463436344316e-8,0.004572840644505964,-5.31972816140779e-7,-1.5173961796713732e-8,0.004573269348815289,-6.200415053200593e-7,-1.4972436045635267e-8,0.004573687024026574,-6.10406095595246e-7,-1.4994491965318193e-8,0.004574052809641157,-5.192579563073559e-7,-1.520320779417572e-8,0.00457433198222599,-3.843987328357727e-7,-1.5512049283710714e-8,0.004574506433080039,-2.6231970700412053e-7,-1.57915871799184e-8,0.004574585098804139,-2.1787955603130257e-7,-1.5893271807468845e-8,0.0045746091849351205,-3.056827632750247e-7,-1.569220003592137e-8,0.004574645498676162,-5.476968892825376e-7,-1.513834525051923e-8,0.004574765267068838,-9.184797312588896e-7,-1.4290196294897466e-8,0.00457501606601899,-1.3499749934384158e-6,-1.3303575679860455e-8,0.004575402559457306,-1.7569182650377685e-6,-1.2373436343486388e-8,0.00457588755670308,-2.0690376161348062e-6,-1.1660288023729968e-8,0.004576410675222101,-2.2521266223356963e-6,-1.1242149216779647e-8,0.004576911396180024,-2.3103385627944873e-6,-1.1109414454615705e-8,0.004577344958268909,-2.275047092560445e-6,-1.119036156480763e-8,0.004577688009744958,-2.190125367673378e-6,-1.1384764724171442e-8,0.00457793703023403,-2.1001362793857524e-6,-1.1590799048558753e-8,0.004578103680851678,-2.0432033769984585e-6,-1.1721260373927869e-8,0.004578209903486739,-2.0476287663152695e-6,-1.1711299731405369e-8,0.00457828387494594,-2.1305649056463137e-6,-1.1521549135013692e-8,0.004578356691217041,-2.2974938653969773e-6,-1.113942510021554e-8,0.004578459254883159,-2.5420904405371936e-6,-1.0579494532798996e-8,0.004578618975408969,-2.8466169571197294e-6,-9.882523233547e-9,0.004578856169100808,-3.183321162571054e-6,-9.112167432714705e-9,0.004579180478803452,-3.5174083811508843e-6,-8.34808453913955e-9,0.004579588120477424,-3.8118316727193404e-6,-7.674971745318212e-9,0.004580060934558044,-4.03352156185739e-6,-7.168392305513895e-9,0.0045805679854873955,-4.1600968235078126e-6,-6.87951141941344e-9,0.0045810699651512255,-4.185692981165825e-6,-6.821782230335321e-9,0.00458152603375295,-4.124467505914989e-6,-6.962856854404446e-9,0.004581902189684743,-4.010657797913334e-6,-7.224349646031663e-9,0.004582179915574498,-3.894438306832133e-6,-7.491268811747432e-9,0.004582363424246814,-3.833098119282915e-6,-7.632267271587255e-9,0.004582483126184382,-3.8777855317296025e-6,-7.53011848341852e-9,0.004582592398102796,-4.057840675385612e-6,-7.117693448106915e-9,0.004582755475052093,-4.367487092300224e-6,-6.408428922268497e-9,0.004583027684494128,-4.761913130848646e-6,-5.505193981758026e-9,0.004583434904318093,-5.1682652158940795e-6,-4.575001218916299e-9,0.004583962740856525,-5.509717091332434e-6,-3.793847647778333e-9,0.004584562235224711,-5.731726984261732e-6,-3.286608037184449e-9,0.0045851690079899594,-5.8173444046123675e-6,-3.092013230972495e-9,0.004585724984926677,-5.785936446522613e-6,-3.1655856948169594e-9,0.004586192672434863,-5.680003803249362e-6,-3.4098510201368928e-9,0.004586558909587067,-5.549240041603622e-6,-3.710862720240599e-9,0.004586831090544941,-5.438473165345392e-6,-3.965824489806852e-9,0.004587030516411275,-5.381337431846182e-6,-4.097587491428378e-9,0.004587186126494469,-5.398361853965937e-6,-4.059053627389166e-9,0.0045873298103882906,-5.49731379182367e-6,-3.8324359563939324e-9,0.004587493095288864,-5.6741958005571095e-6,-3.427014054705955e-9,0.0045877044693880785,-5.914235263036652e-6,-2.876857912876998e-9,0.004587986651218072,-6.192958116809043e-6,-2.238299632400325e-9,0.004588353448843592,-6.477950803344133e-6,-1.5858038797377467e-9,0.004588806428404769,-6.73216177730537e-6,-1.0043412823020856e-9,0.00458933233628059,-6.919340188748711e-6,-5.769299288868636e-10,0.004589902743292579,-7.011376771941958e-6,-3.6786881572565e-10,0.004590477310455618,-6.996130497857601e-6,-4.0485922692968167e-10,0.004591011167147137,-6.883260760486553e-6,-6.656513658249578e-10,0.0045914652682251846,-6.705371049354524e-6,-1.075393733113511e-9,0.004591817010039603,-6.512924106794449e-6,-1.5182606557942965e-9,0.004592067796621043,-6.363468442006583e-6,-1.8621675068497396e-9,0.004592244944227824,-6.307637731525589e-6,-1.9909320328163395e-9,0.004592396800370081,-6.375463343972728e-6,-1.835720290287429e-9,0.004592581636072272,-6.566741952320174e-6,-1.397147556305703e-9,0.004592852503308843,-6.848670800862258e-6,-7.506592754098574e-10,0.0045932418347822595,-7.16265852740837e-6,-3.085310633349787e-11,0.004593750787773998,-7.439775464126724e-6,6.039907256439864e-10,0.004594348004365676,-7.620693551409611e-6,1.0176568839792315e-9,0.004594979307958952,-7.67285027729872e-6,1.1353900564086016e-9,0.004595584733360852,-7.597882344516838e-6,9.60993606260401e-10,0.004596115629330661,-7.427042036220201e-6,5.663444100107817e-10,0.004596545284004681,-7.208277314545172e-6,6.172570217697634e-11,0.004596870828408168,-6.9916428475073475e-6,-4.377209163440163e-10,0.004597108555701069,-6.818392915343977e-6,-8.371051908542961e-10,0.004597286586221487,-6.715617670183615e-6,-1.0741512526115635e-9,0.004597438018468549,-6.6953943241077795e-6,-1.1211643140079087e-9,0.004597595917342151,-6.7563461785649045e-6,-9.814428534041288e-10,0.0045977900559172604,-6.8858632210796456e-6,-6.841521467843064e-10,0.004598044659033155,-7.062128212677125e-6,-2.796287018101613e-10,0.004598376318128057,-7.255916920005681e-6,1.6480339335871812e-10,0.004598791545151504,-7.4327601793754e-6,5.698408862789437e-10,0.004599284036273952,-7.55641510487658e-6,8.521963256757693e-10,0.004599832545317101,-7.59449169585154e-6,9.37519703522967e-10,0.004600401089893143,-7.526267837569374e-6,7.783330705853753e-10,0.0046009435048163455,-7.351117380604259e-6,3.7337668699399923e-10,0.004601413323426574,-7.094082392306315e-6,-2.1959916877791475e-10,0.004601777276461345,-6.804398311453375e-6,-8.872456883447427e-10,0.004602027574734469,-6.544807205465784e-6,-1.4852269544859042e-9,0.004602187108824936,-6.373998484428838e-6,-1.878640796994688e-9,0.004602304305622246,-6.328662725555859e-6,-1.983290254130587e-9,0.004602439234285484,-6.4122851305789306e-6,-1.7913894121004542e-9,0.004602646341656962,-6.59454075292182e-6,-1.372856112257814e-9,0.004602959791749618,-6.820555679744346e-6,-8.539567811146143e-10,0.004603385401025903,-7.026168406663905e-6,-3.8223413598513426e-10,0.004603900535041509,-7.154432726648315e-6,-8.862971018962839e-11,0.004604461221360877,-7.16909923779504e-6,-5.6530923583887666e-11,0.004605014161836207,-7.061911347469658e-6,-3.0496913721986693e-10,0.004605510173710997,-6.852198505821913e-6,-7.894778705239851e-10,0.004605915231864156,-6.579480498016876e-6,-1.4190378636351609e-9,0.004606216233404941,-6.291994615044852e-6,-2.0824711583876744e-9,0.00460642071017142,-6.035108556079831e-6,-2.675171494544614e-9,0.00460655193149057,-5.842863718623184e-6,-3.1186589302558516e-9,0.004606641995139615,-5.733972110264688e-6,-3.369853455113043e-9,0.004606725264452894,-5.711711571864843e-6,-3.4213163304000836e-9,0.0046068334424430035,-5.7661813773756325e-6,-3.2960088168680032e-9,0.004606992447073734,-5.877366283212291e-6,-3.0401786490361465e-9,0.004607220525040382,-6.01804827384349e-6,-2.7166204947669695e-9,0.004607526828035787,-6.156368380259616e-6,-2.3987754818787228e-9,0.004607909878637184,-6.2584771004198995e-6,-2.1646433927517645e-9,0.004608355861891447,-6.292108699703443e-6,-2.0885544550141327e-9,0.004608837460403657,-6.231941022115572e-6,-2.2288041686048496e-9,0.004609314869247811,-6.066944432541149e-6,-2.610692390028512e-9,0.004609741181179981,-5.808287594175388e-6,-3.208296374163034e-9,0.004610073532643847,-5.494016982094601e-6,-3.9337217762102935e-9,0.004610288280096579,-5.185259144008995e-6,-4.645941435360547e-9,0.004610393895995997,-4.950873931477467e-6,-5.186269288801948e-9,0.004610433184336685,-4.844246198175972e-6,-5.431895389162019e-9,0.004610470758879338,-4.8829096485003395e-6,-5.342766223918112e-9,0.0046105707030473,-5.0419564476459976e-6,-4.976589310976798e-9,0.004610775446429694,-5.26417400954597e-6,-4.465310329754646e-9,0.004611094963682681,-5.480348310975678e-6,-3.968302033161426e-9,0.00461150823724263,-5.62972692844612e-6,-3.625329611994953e-9,0.004611973094222571,-5.673786679284628e-6,-3.524987578971608e-9,0.0046124390559712505,-5.60146915226002e-6,-3.692726761576285e-9,0.004612859222188488,-5.427288532920816e-6,-4.095184948750271e-9,0.004613199097686521,-5.184761096077944e-6,-4.655216115005645e-9,0.00461344157660515,-4.917463952163088e-6,-5.272388730713527e-9,0.004613587996069912,-4.669665926120923e-6,-5.844552407820035e-9,0.004613655691602776,-4.478251084401866e-6,-6.28652082530562e-9,0.004613673077859672,-4.367267921755222e-6,-6.542744128551488e-9,0.00461367367651798,-4.345651474038695e-6,-6.592631310893555e-9,0.0046136904516331,-4.407814373872608e-6,-6.449178045460803e-9,0.004613751389181142,-4.536239263420983e-6,-6.152919507168062e-9,0.004613876649815567,-4.704994955452618e-6,-5.763751856803909e-9,0.004614077028175075,-4.883303608630905e-6,-5.352690069082215e-9,0.004614353162834188,-5.038827337005442e-6,-4.994329710158694e-9,0.004614695036423012,-5.140875843306533e-6,-4.759499974144619e-9,0.004615081647533657,-5.164078436357073e-6,-4.706796509128987e-9,0.004615481345908867,-5.093156815280933e-6,-4.871507157630509e-9,0.004615854140456318,-4.928932317867542e-6,-5.251665030544923e-9,0.004616157793161933,-4.694284295014727e-6,-5.794263848231378e-9,0.004616358878782183,-4.436656622864292e-6,-6.389541647842568e-9,0.004616447225878722,-4.222062557520083e-6,-6.884973524270293e-9,0.004616447316459371,-4.117217975337249e-6,-7.126660174101772e-9,0.0046164171712829195,-4.163817419832329e-6,-7.018720722844495e-9,0.004616430002982171,-4.358091358751388e-6,-6.5703061256921416e-9,0.004616545920780777,-4.64955458388336e-6,-5.898225015384205e-9,0.004616789519416018,-4.961068379082266e-6,-5.180477898492885e-9,0.004617144952363664,-5.21797868115541e-6,-4.5890532040936815e-9,0.004617567428571435,-5.370589400078979e-6,-4.238257150629672e-9,0.004618001377383055,-5.4024523567296e-6,-4.165786813726474e-9,0.00461839617858386,-5.326689531338634e-6,-4.341319230810882e-9,0.004618715659086564,-5.176427103811998e-6,-4.688546619249612e-9,0.004618941704013463,-4.994299138923035e-6,-5.1092602716603065e-9,0.0046190738457956015,-4.823500218588578e-6,-5.503860695653606e-9,0.004619126539673815,-4.701021915286869e-6,-5.786919842108562e-9,0.00461912513350184,-4.6530002781485684e-6,-5.897985711351209e-9,0.004619101113456684,-4.692128922859444e-6,-5.8076723886911916e-9,0.004619087174435325,-4.817110070681227e-6,-5.5190059356818914e-9,0.004619112672785507,-5.013950645613634e-6,-5.064416509080086e-9,0.004619199956383798,-5.258745206492392e-6,-4.499227652478228e-9,0.004619361925076508,-5.521396310506229e-6,-3.892989039720409e-9,0.004619600861690062,-5.769630238686212e-6,-3.3201995651143257e-9,0.0046199082837785595,-5.972903127371703e-6,-2.851352592334347e-9,0.004620265553426885,-6.106140175320044e-6,-2.5443702178223045e-9,0.004620645157437597,-6.15344235394916e-6,-2.4360418005486742e-9,0.004621012910332626,-6.111969284666793e-6,-2.5329705998129033e-9,0.004621331889116244,-5.995896088586415e-6,-2.8023280874564467e-9,0.004621569196957076,-5.839257062531263e-6,-3.16525563366286e-9,0.004621705946598681,-5.6949592448301445e-6,-3.499245426945735e-9,0.0046217486369424686,-5.626269776579186e-6,-3.6579976183436843e-9,0.004621736346891752,-5.688589628394338e-6,-3.5136773121236357e-9,0.004621735560203208,-5.9056093086997374e-6,-3.011976455429588e-9,0.004621818663207311,-6.252544277839716e-6,-2.2106262735571202e-9,0.004622034186749106,-6.660327133482274e-6,-1.269447535738715e-9,0.004622386277920894,-7.0421296244785226e-6,-3.8895869566759596e-10,0.004622835921998608,-7.326987257096725e-6,2.672247922603419e-10,0.004623320597655784,-7.481387241366695e-6,6.22078154458821e-10,0.004623778166074979,-7.511256501722334e-6,6.895832720469361e-10,0.0046241631750252934,-7.4503005879202574e-6,5.476957123973267e-10,0.0046244526906444455,-7.344777280885875e-6,3.031921981158643e-10,0.004624644751104253,-7.241142852555951e-6,6.324918068849496e-11,0.0046247535293354415,-7.178329664083658e-6,-8.227089394819571e-11,0.004624803929537004,-7.1838293799132266e-6,-6.982495105222414e-11,0.004624826696230001,-7.272134715425384e-6,1.3414464882997706e-10,0.004624854095060916,-7.444583539571314e-6,5.327371256362688e-10,0.004624916026302616,-7.690267618702546e-6,1.1006291093985203e-9,0.004625036574007785,-7.98793405485864e-6,1.7885067099525766e-9,0.004625231133799637,-8.30888821439031e-6,2.5298802519654072e-9,0.004625504428824734,-8.620815020618825e-6,3.2500039740028935e-9,0.004625849747329165,-8.892151827359156e-6,3.875986187591585e-9,0.0046262495157665465,-9.09652545200698e-6,4.346970267559263e-9,0.004626677147753625,-9.216883627944467e-6,4.623605244888573e-9,0.004627100098948487,-9.249002221467704e-6,4.6961442314090165e-9,0.004627484100502901,-9.204044867914665e-6,4.590434874603475e-9,0.004627798689161824,-9.109776567161958e-6,4.3708109803278244e-9,0.004628024187515499,-9.0095003276215e-6,4.1376398888795614e-9,0.004628159602392367,-8.956974239448121e-6,4.015455545081188e-9,0.004628229255540625,-9.005485803645908e-6,4.127521100134283e-9,0.004628283803510658,-9.1910726190435e-6,4.556926589182645e-9,0.004628390435834369,-9.514454774165462e-6,5.304877259037512e-9,0.004628610918423801,-9.931843970056032e-6,6.269651296939101e-9,0.004628975503068454,-1.03648245865506e-5,7.2696549997176675e-9,0.004629467998225569,-1.0728850454589621e-5,8.10939549229837e-9,0.004630032512152586,-1.0965482676576773e-5,8.65397700401509e-9,0.004630597398772655,-1.1060056137677217e-5,8.86984853736169e-9,0.004631101082919748,-1.1038122203419039e-5,8.816457412620772e-9,0.004631507147841215,-1.0948389067229884e-5,8.606690701628071e-9,0.004631806481354592,-1.0844288661248472e-5,8.364204739480547e-9,0.004632011465302068,-1.0771358781577292e-5,8.194291991699351e-9,0.004632147892557216,-1.0761401585255883e-5,8.170455351365712e-9,0.004632247893263616,-1.0831308542105932e-5,8.331728476942694e-9,0.00463234477781505,-1.0984114505098195e-5,8.685073680741978e-9,0.004632469369290628,-1.1210771926742844e-5,9.209415190899736e-9,0.004632647141513031,-1.1492171204089592e-5,9.860291714348777e-9,0.004632895765556187,-1.1801489544677315e-5,1.0575356211698413e-8,0.004633222987185644,-1.2107161747595294e-5,1.1281365019742708e-8,0.004633625109689717,-1.2376748980879223e-5,1.1903214390625413e-8,0.004634086659004174,-1.2581610090192167e-5,1.2374746891829162e-8,0.004634581752502566,-1.2701806877036646e-5,1.2650024924146413e-8,0.004635077356706937,-1.273044813037253e-5,1.2713298103112125e-8,0.004635538281190807,-1.2676599340062202e-5,1.2585709492729057e-8,0.004635933426539173,-1.2565907068775515e-5,1.2326775887080312e-8,0.0046362425090470906,-1.2438342120984666e-5,1.202920592778017e-8,0.004636462294497865,-1.234271921279755e-5,1.1806193185873564e-8,0.004636611028747824,-1.232775517799123e-5,1.1770617073140064e-8,0.004636729067608224,-1.2429993538057063e-5,1.2006973681361427e-8,0.004636873204322435,-1.2660614669240317e-5,1.2540806146547426e-8,0.004637103047741207,-1.2995764214321633e-5,1.3316407776853431e-8,0.004637461294852211,-1.3376967540621544e-5,1.4197950262497705e-8,0.00463795534065098,-1.3726217412767458e-5,1.5004554273269622e-8,0.004638550845381015,-1.3972478316380603e-5,1.5571711376454045e-8,0.004639183148953752,-1.4077211752893863e-5,1.5810383357853653e-8,0.0046397812865391925,-1.4045280259926954e-5,1.5732214181573113e-8,0.0046402914283477465,-1.3917086868911308e-5,1.5431235497281092e-8,0.004640688992994678,-1.3749519789539588e-5,1.50396004361683e-8,0.004640977811977925,-1.3597154104758875e-5,1.4683939035007512e-8,0.0046411816590931215,-1.3500634643284917e-5,1.4458435271925997e-8,0.004641334337283517,-1.3482814716284878e-5,1.4415936504639937e-8,0.004641471841569615,-1.3549864644392499e-5,1.45705737914381e-8,0.004641627345314647,-1.36943373473814e-5,1.4904873429144573e-8,0.004641828265389255,-1.3898382253809021e-5,1.5377192152694978e-8,0.004642094369945667,-1.4136568493739574e-5,1.592827642183505e-8,0.004642436229981527,-1.4378530825307724e-5,1.648746362443435e-8,0.004642853793025203,-1.4591962398589605e-5,1.6979710468902657e-8,0.00464333536372152,-1.4746476784586312e-5,1.7334602810121096e-8,0.004643857739129038,-1.481845010519349e-5,1.749756817785199e-8,0.00464438837763796,-1.479624509342569e-5,1.7441917675913e-8,0.0046448901141322415,-1.4684572553892183e-5,1.7178880316379137e-8,0.00464532817306209,-1.4506395760338885e-5,1.676197448758261e-8,0.0046456782783954416,-1.4300948688484878e-5,1.628240091514535e-8,0.004645933875498211,-1.4117326680498562e-5,1.5854168093428857e-8,0.004646110289799332,-1.4004423473821114e-5,1.5590715394014384e-8,0.004646244116896511,-1.399911276381716e-5,1.5577449679665026e-8,0.004646387005593405,-1.41153100211975e-5,1.5846355805771457e-8,0.004646594141764705,-1.4337032558028205e-5,1.6359950354097322e-8,0.004646909305258094,-1.4618613247030586e-5,1.701188561366317e-8,0.0046473503812339495,-1.4894178333601433e-5,1.7649042879564176e-8,0.004647900916773948,-1.5095625610264924e-5,1.811329983033688e-8,0.004648512809389593,-1.5173842404411922e-5,1.829077431406508e-8,0.004649120903019922,-1.5114403601433032e-5,1.8148248545685655e-8,0.004649663817187577,-1.4940331193331636e-5,1.7739550224659373e-8,0.004650101646361556,-1.4701189768492982e-5,1.7180166575556488e-8,0.004650423559198932,-1.4455016176381626e-5,1.6605176919502795e-8,0.004650644665764515,-1.4251827770794912e-5,1.613086614501808e-8,0.004650796624019296,-1.4124141025250696e-5,1.583268895658235e-8,0.004650917415804542,-1.4084914955533756e-5,1.5740543813909623e-8,0.004651043598431591,-1.4130241265291127e-5,1.5845089278510927e-8,0.0046512057278376125,-1.4243729279101672e-5,1.6107974164142077e-8,0.0046514261340793615,-1.4400690454054686e-5,1.6471579916206996e-8,0.00465171789456136,-1.4571531090473221e-5,1.6866922638427443e-8,0.004652084137226091,-1.4724599130893931e-5,1.7220302263998086e-8,0.00465251732741125,-1.4829134893015994e-5,1.746020024223448e-8,0.004652998819609395,-1.4859005735948932e-5,1.7525983107701823e-8,0.004653499526234626,-1.4797478165342453e-5,1.7378984205893643e-8,0.004653982822792938,-1.4642447874902636e-5,1.701461884775316e-8,0.004654410522758944,-1.4410540357957179e-5,1.6471859896107837e-8,0.004654751676673082,-1.4137726039344877e-5,1.5834608479389963e-8,0.0046549921899199246,-1.3874312315314267e-5,1.5219993013443092e-8,0.004655141733859297,-1.3673984905797297e-5,1.4752835810267254e-8,0.004655234441725839,-1.3579420898515158e-5,1.4532174851046341e-8,0.00465532189043984,-1.3609191262358246e-5,1.460084197006534e-8,0.00465545992364021,-1.3750758727023153e-5,1.4929278998332993e-8,0.004655693328327301,-1.3962304090208998e-5,1.5419907146882814e-8,0.004656043110456753,-1.4183068768481111e-5,1.5931259431933548e-8,0.0046565001678516875,-1.434927671056179e-5,1.631501554350779e-8,0.004657027305155954,-1.4411158052329369e-5,1.6455548921583325e-8,0.004657569281103155,-1.434612452943196e-5,1.630052615942731e-8,0.004658068049326739,-1.41639120076071e-5,1.5872851697627348e-8,0.0046584782426453645,-1.3901969676808915e-5,1.525993191601153e-8,0.0046587776708922075,-1.3613082255371558e-5,1.458484088844579e-8,0.004658969832612916,-1.3350233172794423e-5,1.397103491590227e-8,0.004659079003760188,-1.3154157206487545e-5,1.3513330900768914e-8,0.004659141208384155,-1.3046837117797856e-5,1.3262761688597618e-8,0.004659194957403009,-1.3031068730407019e-5,1.3225604937819598e-8,0.004659274330167408,-1.3094026415269862e-5,1.3371747416260096e-8,0.0046594050651191455,-1.3212282800757067e-5,1.3646426315830232e-8,0.004659602999671059,-1.3356523513515203e-5,1.3981232874721674e-8,0.004659873789227049,-1.3495310852038219E-05,1.430287645128278e-8,0.004660213024776066,-1.359808005239616e-5,1.4540151248134795e-8,0.00466060633304002,-1.3637992835869933e-5,1.4630579714044076e-8,0.00466102965981684,-1.3595349253137439e-5,1.4528372069494455e-8,0.004661450563042212,-1.3461902340691184e-5,1.421449651710166e-8,0.004661831730217652,-1.3245578696188559e-5,1.3707678548966238e-8,0.004662137755511344,-1.2973872164911173e-5,1.307227092715899e-8,0.004662344999202101,-1.2693012432152884e-5,1.2416231574338447e-8,0.0046624519407560735,-1.2460082818593682E-05,1.1872648439435237e-8,0.004662485004202495,-1.2327880026386206e-5,1.1564379854227212e-8,0.004662494901102442,-1.2327021407297365e-5,1.1562375295099926e-8,0.004662542595555069,-1.24533420275431e-5,1.185644126351985e-8,0.0046626799506357805,-1.2667322066857839e-5,1.2354101779958266e-8,0.004662933402383711,-1.2906251170550697e-5,1.2909087247827492e-8,0.004663297073919368,-1.3103506845817271e-5,1.3366273288023952e-8,0.004663736575308624,-1.3207064274389993e-5,1.360471420722314e-8,0.00466420034455511,-1.3191474217760806e-5,1.3565421464328888e-8,0.004664633821846689,-1.3061257113502004e-5,1.3259181775894936e-8,0.0046649923454657955,-1.284657142486857e-5,1.2756441236261749e-8,0.0046652500093320995,-1.2593575575264028e-5,1.2164869400910327e-8,0.004665403125135055,-1.2352518526780268e-5,1.160163133759852e-8,0.004665468293837048,-1.2166612359423423e-5,1.1167452954822372e-8,0.004665476372929213,-1.2064179756235221e-5,1.092829431744967e-8,0.004665464527011558,-1.205536188602705e-5,1.090765701107904e-8,0.00466546866248559,-1.2133139463074206e-5,1.1088976843000324e-8,0.004665517840456056,-1.2277264814901737e-5,1.1424838647350068e-8,0.00466563119751025,-1.245936221956031e-5,1.1848924275875613e-8,0.004665817006354218,-1.2647802841822536e-5,1.2287410809984839e-8,0.004666073053110041,-1.281166414378168e-5,1.2668190698852117e-8,0.004666387542373383,-1.292381306206243e-5,1.2928022906658796e-8,0.004666740117300406,-1.2963606556451226e-5,1.3018805625924864e-8,0.004667103089208761,-1.2919782368290056e-5,1.2914336858847914e-8,0.004667443516313451,-1.2793855787151033e-5,1.261828935995056e-8,0.004667727216102982,-1.2603634007130076e-5,1.2172443742013038e-8,0.004667925717887047,-1.2385223968453717e-5,1.1661335221281164e-8,0.004668025982969037,-1.2190587373047782e-5,1.1206425769168459e-8,0.004668040124918859,-1.2077562615726495e-5,1.0942668267392677e-8,0.004668009332740903,-1.2092131257680859e-5,1.0977046211594681e-8,0.004667995963365245,-1.2248776168792324e-5,1.1342816317376177e-8,0.004668063394253834,-1.2519839245074089e-5,1.1974895693262607e-8,0.004668252213447853,-1.2842352538933383e-5,1.272604191553377e-8,0.004668565476656956,-1.3140346753934688e-5,1.3419026252516424e-8,0.004668970137839872,-1.3350798188378615e-5,1.390712963685913e-8,0.00466941145688206,-1.3440881943664238e-5,1.4114239617360718e-8,0.004669831352637258,-1.3411820715628956e-5,1.4043647933471819e-8,0.004670183125758375,-1.3292231840828618e-5,1.3762398499525709e-8,0.004670439551567326,-1.3126587614643615e-5,1.3374333363953765e-8,0.0046705947835942166,-1.2963357965618242e-5,1.2992486691062576e-8,0.004670661871582767,-1.2845325839862214e-5,1.2716578643366719e-8,0.004670667699865216,-1.2802931475699457e-5,1.2617538625965364e-8,0.004670646681376949,-1.2850763728081769e-5,1.2729307862896565e-8,0.00467063427678483,-1.2987111806417097e-5,1.304775137827414e-8,0.004670661343090428,-1.3196164916613432e-5,1.353577457443399e-8,0.004670750064167247,-1.3452020070287972e-5,1.4132715042564545e-8,0.004670911777831962,-1.3723508501828329e-5,1.4765677409608379e-8,0.004671146597861861,-1.397894625705489e-5,1.5360669460035923e-8,0.004671444375319671,-1.4190158848444865e-5,1.5851986140975655e-8,0.004671786392194452,-1.4335593144657587e-5,1.6189419371909977e-8,0.004672147385320302,-1.440277455442945e-5,1.634395024210514e-8,0.004672497882915822,-1.439047323877524e-5,1.63128171558708e-8,0.004672807221955093,-1.4310754474099981e-5,1.6124358297051074e-8,0.004673047967062916,-1.4190585450886653e-5,1.5841798023873977e-8,0.004673202402940901,-1.4071681804180103e-5,1.556283414706472e-8,0.004673270739720579,-1.4006175424222032e-5,1.5409373309145138e-8,0.004673278417874302,-1.4045585886180635e-5,1.5501616287218707e-8,0.0046732771097705355,-1.4223112429589761e-5,1.5916656213600744e-8,0.0046733335426375954,-1.4535231411889031e-5,1.6645637433110732e-8,0.0046735060396706435,-1.4934337773744007e-5,1.7576826633511244e-8,0.004673819189801707,-1.5341741234222534e-5,1.852618723245616e-8,0.004674252268579398,-1.5677278964770178e-5,1.9306615085994873e-8,0.004674748944885229,-1.5888924620635015e-5,1.9797027686382072e-8,0.004675240882951573,-1.5966460031890974e-5,1.997414641383107e-8,0.004675670613593522,-1.593625842060622e-5,1.9900119679567408e-8,0.0046760041793818975,-1.5845643844857367e-5,1.9685820881802324e-8,0.00467623309851158,-1.5746690960885734e-5,1.945294625392006e-8,0.004676369818220206,-1.568457041001168e-5,1.930686205008403e-8,0.004676440772138309,-1.5691203227189234e-5,1.932191376955323e-8,0.004676479528732202,-1.5782987495501686e-5,1.9536206216259085e-8,0.004676520954653062,-1.5961033347667108e-5,1.995215400474037e-8,0.004676596422060922,-1.6212951573783454e-5,2.0540610281932875e-8,0.004676730027189161,-1.6515837372076925e-5,2.1247813816331533e-8,0.004676935979999788,-1.6840152095742693e-5,2.2004505046599017e-8,0.004677217318990602,-1.7154102391278926e-5,2.2736247570911134e-8,0.00467756602649892,-1.7428077777037665e-5,2.3373860561672378e-8,0.004677964479425937,-1.763863379374355e-5,2.3862716425329537e-8,0.0046783879238457065,-1.7771596392012232e-5,2.4169923607945506e-8,0.004678807583239352,-1.782417897198473e-5,2.4289203675387195e-8,0.004679194192743565,-1.780618647288843e-5,2.4243687912563586e-8,0.004679521978008149,-1.7740311713799754e-5,2.4086639550366526e-8,0.0046797732769125674,-1.7661270247751158e-5,2.3899445231071237e-8,0.004679943926326737,-1.7612934963310745e-5,2.378485408762777e-8,0.00468004874105327,-1.76419904879494e-5,2.38520116422879e-8,0.0046801248137174605,-1.7786845602176726e-5,2.4190427202702886e-8,0.004680228593309382,-1.806263404032576e-5,2.4834927068767032e-8,0.004680422650323219,-1.844760764224442e-5,2.5734020536887993e-8,0.0046807527992763975,-1.8880759513499523e-5,2.674458018490809e-8,0.0046812254701966765,-1.9278549072575866e-5,2.7671099756894892e-8,0.004681800427430815,-1.9566523632612258e-5,2.8339657629219468e-8,0.004682406079741662,-1.9708395147643984e-5,2.8665861411746463e-8,0.004682968366748158,-1.9715465849410977e-5,2.867679352392317e-8,0.004683435608529261,-1.9634266355882566e-5,2.8481924313167707e-8,0.0046837883337889595,-1.952439154406978e-5,2.822106187628867e-8,0.004684035487230924,-1.9439673756009193e-5,2.8020203083391307e-8,0.004684204485088165,-1.941806770279495e-5,2.7967929163297136e-8,0.00468433116167156,-1.9479029937500837e-5,2.8109428435669545e-8,0.004684452186456466,-1.9625176187452407e-5,2.845049597540157e-8,0.004684600168465979,-1.984553498761316e-5,2.896517248241957e-8,0.0046848006032723915,-2.0118998764571928e-5,2.9603786467988204e-8,0.0046850698397548065,-2.041773635670475e-5,3.0300926191513015e-8,0.004685413783371999,-2.0710763850050337e-5,3.098384943257845e-8,0.00468582740770953,-2.096777642395736e-5,3.1581541361914726e-8,0.004686295292293071,-2.1163165376747107e-5,3.203417446835051e-8,0.004686793459251504,-2.127986172954694e-5,3.230208207219933e-8,0.004687292561605285,-2.1312386356273433e-5,3.2372809600881676e-8,0.0046877621105637915,-2.126854613740853e-5,3.2264991110637834e-8,0.004688175258111988,-2.1169442043346494e-5,3.202831932504239e-8,0.004688513640797768,-2.104761290672734e-5,3.173919627450822e-8,0.004688771804655766,-2.0943260277204035e-5,3.149188772523059e-8,0.004688960704666771,-2.089847309766487e-5,3.138494951118754e-8,0.004689109427812848,-2.0949239557927876e-5,3.150244410680444e-8,0.0046892635417487075,-2.111546408427255e-5,3.189053130139887e-8,0.004689477922148566,-2.139077308886334e-5,3.253367882818093e-8,0.004689802698454854,-2.1736387602686895e-5,3.3340499356742825e-8,0.004690264446209853,-2.2085256460148676e-5,3.415361339714332e-8,0.004690850572478942,-2.2360461861946586e-5,3.4792836260214054e-8,0.004691507905376526,-2.2503277074614084e-5,3.512087981369812e-8,0.0046921603699025816,-2.2496547289027997e-5,3.5098078105129547e-8,0.004692737515622717,-2.2369205648309436e-5,3.4792895698371355e-8,0.0046931977430484575,-2.218033828194287e-5,3.434443116540985e-8,0.004693535450245421,-2.19946049648199e-5,3.390460552743203e-8,0.004693773572452373,-2.1862829343110403e-5,3.359254933534034e-8,0.0046939501630360635,-2.181362607661693e-5,3.3475032195887265e-8,0.004694106408800557,-2.1853986931876104e-5,3.356800326714713e-8,0.004694278929507639,-2.1974145041739544e-5,3.384814078091561e-8,0.004694495986966662,-2.2153135943492177e-5,3.4265942399950725e-8,0.00469477605708682,-2.236343686777121e-5,3.475658838964401e-8,0.004695127385027143,-2.25745849279392e-5,3.5248415385464474e-8,0.004695547882976639,-2.2756322352379375e-5,3.567032900021728e-8,0.004696025355911659,-2.2881787560675736e-5,3.595935203368904e-8,0.004696538399017729,-2.2930998865573962e-5,3.6068830865346576e-8,0.0046970585118214685,-2.2894428695522926e-5,3.597678695177047e-8,0.0046975538398428066,-2.277591695522771e-5,3.569266368776685e-8,0.004697994417085737,-2.2593897361128732e-5,3.52601055038316e-8,0.004698358163045725,-2.238005741037552e-5,3.475374675121492e-8,0.0046986364344812365,-2.2175013783692378e-5,3.4269031535764016e-8,0.0046988377483364,-2.2021316841364653e-5,3.3905777612987485e-8,0.004698988505350433,-2.1954843872662592E-05,3.3747957039559153e-8,0.00469913001615439,-2.199603289469974e-5,3.384312019587815e-8,0.004699311555481439,-2.2142626039551497e-5,3.418542095617081e-8,0.004699579681160445,-2.2366028659942287e-5,3.470720003209844e-8,0.004699965159038889,-2.261379023439517e-5,3.528496641002932e-8,0.0047004707613474824,-2.2820209470544427e-5,3.576439822294622e-8,0.004701065275270101,-2.29245915141501e-5,3.600321104272019e-8,0.0047016890656927665,-2.2891951736126434e-5,3.591970431021748e-8,0.004702272011748362,-2.2726666777386748e-5,3.5524736397453896e-8,0.004702756920507253,-2.2470877734699576e-5,3.491788013206634e-8,0.004703116987165939,-2.2187808782063738e-5,3.4248104068405246e-8,0.004703359534640568,-2.193925935774467e-5,3.3660754039070295e-8,0.004703517130520162,-2.176842696306175e-5,3.325714330433221e-8,0.004703633418269326,-2.1693450292192006e-5,3.3079469125848756e-8,0.004703750784664788,-2.1710014565138826e-5,3.311710181821752e-8,0.004703902999268972,-2.1798210735348334e-5,3.332284229703271e-8,0.00470411241473192,-2.1929606093883388e-5,3.362958798550564e-8,0.004704389870876045,-2.207267688476105e-5,3.396308166894864e-8,0.0047047356012256255,-2.2196523423997598e-5,3.425061394883235e-8,0.004705140226676658,-2.2273583221930157e-5,3.4427402906015455e-8,0.004705585684179088,-2.2282131344618075e-5,3.444250019797068e-8,0.004706046484988976,-2.2209080754436687e-5,3.426539393023329e-8,0.004706492021561705,-2.205305499960459e-5,3.389321201807501e-8,0.004706890608130669,-2.182697129221664e-5,3.3356730967267744e-8,0.00470721539646339,-2.1558758464267093e-5,3.2721977504560417e-8,0.004707451321018943,-2.12887104727388e-5,3.208392178194558e-8,0.004707601124258925,-2.1062650368795808e-5,3.1550339335174934e-8,0.004707687923092548,-2.092164673284272e-5,3.1217597646232705e-8,0.004707752373939844,-2.0890881213821516e-5,3.1144495257733445e-8,0.004707844271649323,-2.097124597532204e-5,3.1332583670419434e-8,0.004708010475613604,-2.113670162270532e-5,3.172008981581706e-8,0.004708282385389394,-2.1338748014371744e-5,3.219257613945702e-8,0.0047086664359290925,-2.15173693706775e-5,3.2608780636782456e-8,0.0047091404880734164,-2.161606952423453e-5,3.283599569519555e-8,0.004709657840613588,-2.159728736032355e-5,3.278626927707014e-8,0.0047101587972046815,-2.14536381865304e-5,3.244275536750323e-8,0.004710587092019814,-2.1210639927389882e-5,3.1866026733256766e-8,0.004710905784652387,-2.0918934500008726e-5,3.11756702803512e-8,0.004711106530119068,-2.0638435018091832e-5,3.051288304831013e-8,0.004711208865517889,-2.0420804081158147e-5,2.999917704131898e-8,0.004711250995690448,-2.029710843358638e-5,2.9707348003223693e-8,0.004711277151420492,-2.0274053881011356e-5,2.9652724627549498e-8,0.00471132674977426,-2.033766978305856e-5,2.9801983439850805e-8,0.00471142806619857,-2.046071242907155e-5,3.009067825446045e-8,0.004711596296366146,-2.061020016312087e-5,3.044100612335261e-8,0.004711834389857875,-2.0753171954947886e-5,3.077533281366249e-8,0.004712134965726818,-2.086041685204148e-5,3.1024925417154556e-8,0.004712482251510385,-2.090882235568343e-5,3.1135456149055995e-8,0.004712853737906606,-2.0883211847782863e-5,3.107133595210802e-8,0.004713221881139335,-2.0778334625325025e-5,3.082042383122008e-8,0.004713556597760101,-2.0601134262572815e-5,3.0399376917884984e-8,0.004713829354068818,-2.037263915355485e-5,2.9858068237885336e-8,0.004714019207495355,-2.0127999853239356e-5,2.9279591365504785e-8,0.004714120040236812,-1.9912737159773322e-5,2.8771311538676714e-8,0.00471414655809,-1.9773869991005393e-5,2.8443873226592142e-8,0.004714135386249772,-1.9746861801332327e-5,2.83804276963628e-8,0.004714138370032906,-1.984258160661189e-5,2.8606000254505665e-8,0.004714208596707071,-2.004036454826956e-5,2.9071316232283385e-8,0.004714383927031075,-2.029154199139544e-5,2.966130936884501e-8,0.00471467478824134,-2.0532945180363846e-5,3.022705867006223e-8,0.004715061013315357,-2.070513244011117e-5,3.0628741349271914e-8,0.00471549819391272,-2.076855953990602e-5,3.0773644450018024e-8,0.004715930398805945,-2.0712828599232458e-5,3.06378229761092e-8,0.00471630479798327,-2.0557372487725065e-5,3.02675794944921e-8,0.00471658419168978,-2.0344538606421003e-5,2.9763064924636998e-8,0.004716754587575241,-2.012762846230072e-5,2.9250034311585e-8,0.004716826391143379,-1.9957347775696705e-5,2.8847903519089865e-8,0.004716829482927148,-1.9870328926400146e-5,2.8642734974974278e-8,0.004716804183631088,-1.9882591570309303e-5,2.8671899620700577e-8,0.004716791192796836,-1.9989005281011388e-5,2.8922902741116466e-8,0.004716823437325514,-2.016770532199581e-5,2.934387756265717e-8,0.004716921469150951,-2.0387043502867066e-5,2.986002387931219e-8,0.0047170924226144694,-2.0612596164450385e-5,3.0390138793191444e-8,0.004717331446500595,-2.081266616228881e-5,3.085955828244744e-8,0.00471762425529221,-2.0961852660023846e-5,3.120852397033979e-8,0.004717949786709429,-2.104309008518074e-5,3.139695112234478e-8,0.004718282560551554,-2.104890203008696e-5,3.1407378398035346e-8,0.00471859492533725,-2.0982516486430054e-5,3.1247623321056654e-8,0.004718859796079545,-2.0859052414961204e-5,3.0953605446153896e-8,0.004719054624823485,-2.0706285041295662e-5,3.059112867970817e-8,0.004719167008269947,-2.0563643657749342e-5,3.025342322589191e-8,0.0047192012609654915,-2.0477478018717793e-5,3.00498426889888e-8,0.00471918345441392,-2.0491050133859172e-5,3.0082155472353386e-8,0.004719160711673773,-2.0630138351970563e-5,3.041060704503147e-8,0.004719191097019601,-2.0889406258420564e-5,3.1021931692673706e-8,0.004719325043469325,-2.1227769789697886e-5,3.181866698159706e-8,0.0047195859260143365,-2.1578468896618452e-5,3.264310559084911e-8,0.004719960156972756,-2.187111814865657e-5,3.3329373513019146e-8,0.004720402230039262,-2.2055137896671795e-5,3.375863627291979e-8,0.004720851199728154,-2.211368644516015e-5,3.3891818178741824e-8,0.004721249742534635,-2.2064084478755165e-5,3.3770422384395773e-8,0.004721558271420089,-2.194802371751545e-5,3.349326327499581e-8,0.004721761248337392,-2.181765833721016e-5,3.318355542341268e-8,0.004721866556401599,-2.1722520963282726e-5,3.295805030285286e-8,0.004721900238871268,-2.169987115382176e-5,3.29043510790176e-8,0.004721898892204645,-2.176929055241197e-5,3.306826983285239e-8,0.004721901529417458,-2.193141803818353e-5,3.345092527192641e-8,0.004721942348745987,-2.2170269412426117e-5,3.401426136456454e-8,0.004722045516212493,-2.2458138717909424e-5,3.4692640398515564e-8,0.004722222546618573,-2.2761699487966296e-5,3.540726851507083e-8,0.0047224722135377,-2.3047940802877143e-5,3.6080226653327896e-8,0.004722782394577666,-2.3288951948910685e-5,3.6645758612571877e-8,0.004723132980101565,-2.3465103100195668e-5,3.7057739558551584e-8,0.004723499026608934,-2.3566743782828097e-5,3.729363200615465e-8,0.004723853726366984,-2.3594919509001365e-5,3.7356145869933e-8,0.004724171226410891,-2.356158846622636e-5,3.727375668144662e-8,0.00472442964344223,-2.3489522051841577e-5,3.710048713221879e-8,0.004724614776565834,-2.3411574874169688e-5,3.691415587823861e-8,0.004724724794459883,-2.3368277341243487e-5,3.6810591870453345e-8,0.0047247752100325596,-2.340213360934399e-5,3.6890033197833116e-8,0.004724801818033701,-2.354741153860014e-5,3.723294414462482e-8,0.00472485768521177,-2.3816423663497148e-5,3.786770260091306e-8,0.004725000635390749,-2.418751526032683e-5,3.8742466858000376e-8,0.004725272431033011,-2.4603620051597823e-5,3.972202334985268e-8,0.0047256788219663705,-2.4987702204493527e-5,4.062439541897351e-8,0.004726183285667441,-2.5270759185625143e-5,4.128696584233639e-8,0.004726720126803429,-2.541754230471784e-5,4.162712542300643e-8,0.004727219448344189,-2.5435941739691993e-5,4.166429361538732e-8,0.004727629770664268,-2.536784151980682e-5,4.149811650246318e-8,0.00472792886355938,-2.5270329894455154e-5,4.126387077300937e-8,0.00472812265068321,-2.5197835046972124e-5,4.109015364379114e-8,0.0047282373150355555,-2.5190669974525258e-5,4.1071880240448236e-8,0.004728309665470908,-2.5270343003186838e-5,4.125937504726307e-8,0.004728378624615121,-2.543968430350618e-5,4.165883422548709e-8,0.004728478767596398,-2.5685707126707573e-5,4.223916565564198e-8,0.004728635885651726,-2.5983880913205705e-5,4.294209090323031e-8,0.004728864409439411,-2.6303109090072288e-5,4.369389967187808e-8,0.00472916659618418,-2.6610845597161917e-5,4.44175634064523e-8,0.004729533321857145,-2.687781278328495e-5,4.5043926732075706e-8,0.00472994622235607,-2.708187235910797e-5,4.55208730022123e-8,0.004730380793270376,-2.721067737099242e-5,4.5819553184842186e-8,0.004730809906752847,-2.7262961196945158e-5,4.593735403726144e-8,0.004731207297948036,-2.724866569169805e-5,4.589813042879811e-8,0.004731550882303068,-2.7188193463415645e-5,4.5750407942570875e-8,0.004731825972564864,-2.7110878798737e-5,4.5563763450471336e-8,0.004732028530653421,-2.7052515132200603e-5,4.54229491228676e-8,0.004732168446389242,-2.7051350258781955e-5,4.541834024160813e-8,0.004732272116670077,-2.714157631827611e-5,4.563044734216501e-8,0.004732382358303023,-2.734381236381859e-5,4.610740117539504e-8,0.004732552676207028,-2.765400554259749e-5,4.6838853150868065e-8,0.004732833512182073,-2.803550331529912e-5,4.773748847006038e-8,0.004733252285295634,-2.842190019560124e-5,4.864598097253564e-8,0.004733796293531172,-2.8735835655547945e-5,4.9381511830951945e-8,0.004734411109839088,-2.891853713979851e-5,4.980557132802008e-8,0.004735019503554785,-2.895397730306729e-5,4.9880998252676156e-8,0.004735551138537044,-2.887270533546891e-5,4.9680920882470014e-8,0.00473596575267552,-2.873482839748109e-5,4.9348284107208375e-8,0.004736259519104328,-2.8605104853960317e-5,4.903667122874668e-8,0.004736457060975534,-2.8533821667809858e-5,4.886493863585071e-8,0.0047365979415711565,-2.85485921602435e-5,4.88979128990018e-8,0.004736724583238949,-2.8654807118183317e-5,4.914769787656253e-8,0.0047368742116397,-2.8840382877356432e-5,4.958511728727826e-8,0.004737074552126241,-2.9081541619000465e-5,5.015347478913712e-8,0.004737342012367782,-2.934812648323624e-5,5.078111482310837e-8,0.004737681309886265,-2.960821833601568e-5,5.139231870366264e-8,0.004738086098954303,-2.9832193363411564e-5,5.191692419486976e-8,0.004738540469209245,-2.9996259595434974e-5,5.229874245767923e-8,0.0047390212881655396,-3.0085394338945098e-5,5.2502529913061444e-8,0.004739501377336211,-3.0095423581682325e-5,5.251886124976056e-8,0.004739953305782397,-3.0033870472254683e-5,5.236603682676017e-8,0.004740353348319325,-2.9919407976351642e-5,5.208868447062693e-8,0.004740685200385828,-2.9779991128983356e-5,5.175327771239827e-8,0.004740943182403257,-2.9649741613378564e-5,5.1440738209547884e-8,0.004741134674185391,-2.9564621576085497e-5,5.1236171222247815e-8,0.004741281429687509,-2.955689735080932e-5,5.121571324845782e-8,0.004741419089674041,-2.9648317114137292e-5,5.1430346955513816e-8,0.004741593583568248,-2.984236535396184e-5,5.18876132323745e-8,0.0047418528064249385,-3.0117417530783683e-5,5.2535574522677666e-8,0.004742232999460031,-3.0424697664623252e-5,5.325821214909581e-8,0.004742742611363063,-3.069609207813721e-5,5.3894094209571386e-8,0.004743351393757184,-3.086414788615748e-5,5.4283751424790724e-8,0.004743994368040548,-3.088836563852584e-5,5.433186801908802e-8,0.004744593460110826,-3.0773559410401626e-5,5.4050676811265004e-8,0.004745086788273111,-3.0567784478253706e-5,5.3554919237006306e-8,0.004745448989905369,-3.034083898991905e-5,5.301067418598428e-8,0.0047456930853903715,-3.015732469647893e-5,5.257126350003612e-8,0.004745857698513026,-3.00585998089884e-5,5.233439298931279e-8,0.004745990240669041,-3.0058200221043662e-5,5.233146185427817e-8,0.004746133999600095,-3.01466801907586e-5,5.2539325380684306e-8,0.004746321325199566,-3.0299826522431672e-5,5.289999214373297e-8,0.004746571565708012,-3.048628868783824e-5,5.333878061980279e-8,0.004746891547053987,-3.067323831866283e-5,5.377769034777425e-8,0.004747276976592629,-3.083031101807034e-5,5.414468688672485e-8,0.0047477141402886116,-3.09325591886319E-05,5.4380693556431183e-8,0.004748181886555148,-3.096289364885244e-5,5.444541244979396e-8,0.004748654088097438,-3.09141513535335e-5,5.432224087989675e-8,0.004749102826477359,-3.079058892868887e-5,5.4021765189798875e-8,0.0047495023578297945,-3.060826542501298e-5,5.358256772490767e-8,0.004749833466407175,-3.0393770407297746e-5,5.306810148158317e-8,0.0047500874842839194,-3.018108231591561e-5,5.2559163277776153e-8,0.004750269208928283,-3.000667785776047e-5,5.214226026089898e-8,0.004750398005292498,-2.990333609399654e-5,5.1894905169507964e-8,0.004750506508683392,-2.9893424852776115e-5,5.186969825178604e-8,0.004750636541043871,-2.9982645840082855e-5,5.2079533030619567e-8,0.0047508320083346,-3.0155421919572188e-5,5.248676449937229e-8,0.004751128908639331,-3.037369192805859e-5,5.300052553271625e-8,0.0047515437134295745,-3.058146946640733e-5,5.348771766126394e-8,0.004752063484848125,-3.071700733657849e-5,5.380196084787112e-8,0.0047526432287152715,-3.073156493559227e-5,5.382809002665862e-8,0.004753215530274019,-3.060859876345908e-5,5.352758456900073e-8,0.004753711939495655,-3.0373149193153703e-5,5.2960713748294996e-8,0.004754087100048578,-3.0083973403278307e-5,5.226769683183297e-8,0.00475433293603724,-2.98112136590755e-5,5.1615475629158006e-8,0.004754476264544549,-2.9611822552670604e-5,5.113920082596975e-8,0.004754563953700199,-2.9514823359041654e-5,5.0907249040929476e-8,0.0047546455613278705,-2.9520016886330627e-5,5.0918372072733805e-8,0.004754761071596459,-2.9605722627759065e-5,5.112036823852704e-8,0.004754935662167024,-2.9739033755819657e-5,5.143462572713782e-8,0.0047551796096890735,-2.988434036747737e-5,5.1776389895648226e-8,0.004755490589258526,-3.0008869624587908e-5,5.206783588245407e-8,0.004755856442393838,-3.008584029224015e-5,5.224546763974042e-8,0.004756257668350731,-3.0096339668500227e-5,5.2264540791731686e-8,0.004756669706745484,-3.0030731792701057e-5,5.210242554479061e-8,0.004757065414585785,-2.9889908539192638e-5,5.176159886049536e-8,0.004757418195542284,-2.968619040159789e-5,5.1271759843174285e-8,0.00475770601363651,-2.9443203318333868e-5,5.0689459342253564e-8,0.004757915965546911,-2.9193873541743718e-5,5.009323271378707e-8,0.004758048438176281,-2.8975983699953833e-5,4.957295059706262e-8,0.0047581194741599594,-2.882542250153593e-5,4.921372935448555e-8,0.004758160019778779,-2.876818870394926e-5,4.9076934374705044e-8,0.004758211358591651,-2.8813062505827567e-5,4.9182827912228046e-8,0.004758317093348088,-2.894711954955259e-5,4.950002836532726e-8,0.004758513086696229,-2.913579719092093e-5,4.994582695633771e-8,0.004758817511140333,-2.932837760191171e-5,5.03993731608605e-8,0.004759223605850981,-2.9468701036464705e-5,5.072723219425754e-8,0.004759697867909933,-2.9509504216527897e-5,5.0817464553032814e-8,0.004760185864983653,-2.942696235017769e-5,5.061410130962157e-8,0.0047606259543624555,-2.9230317643366145e-5,5.0139889000795495e-8,0.004760967607467908,-2.896139174117637e-5,4.9494965504536796e-8,0.004761187350905263,-2.8682116608214554e-5,4.882704196243258e-8,0.004761294966547717,-2.8454389880011927e-5,4.828336259201367e-8,0.004761327275387122,-2.8321230768383856e-5,4.796585845162461e-8,0.004761333553681048,-2.829714704173953e-5,4.790836114893017e-8,0.0047613601652829966,-2.8369688621673795e-5,4.808053312846534e-8,0.004761440321646852,-2.8508399895063426e-5,4.8409387338905586e-8,0.004761590551451071,-2.8675522491192136e-5,4.880485640357133e-8,0.004761812082991868,-2.883449707617644e-5,4.917998782520274e-8,0.004762094385548418,-2.8955069947828657e-5,4.946298307321452e-8,0.004762418882065095,-2.9015693696433737e-5,4.960280392062293e-8,0.0047627620311700624,-2.9004461174501594e-5,4.95713500331758e-8,0.004763097828331392,-2.8919547543918302e-5,4.936452599578333e-8,0.004763400221147088,-2.8769621484632385e-5,4.90032528762637e-8,0.004763646058855578,-2.8574085268911304e-5,4.8534040160042696e-8,0.004763818946533213,-2.8362398774863e-5,4.802731915464349e-8,0.004763913739565946,-2.8171404920085826e-5,4.757097276326134e-8,0.004763940543520972,-2.8039773963918373e-5,4.725700354486537e-8,0.004763926283878361,-2.7999613583819032e-5,4.7161505527736824e-8,0.004763911790083301,-2.806694015820014e-5,4.732201788368541e-8,0.004763943561668426,-2.8234348316907707e-5,4.772020956502153e-8,0.004764061768513518,-2.846950262937871e-5,4.827848357257109e-8,0.004764288248044224,-2.8721294087771193e-5,4.8874818169044365e-8,0.004764618840848933,-2.893247019251986e-5,4.93729414401414e-8,0.004765022978940383,-2.905493603698263e-5,4.965875709174304e-8,0.004765450868508584,-2.9062967578863874e-5,4.967170122917772e-8,0.004765846191254104,-2.8960399760946087e-5,4.942169071629253e-8,0.00476616076776282,-2.8779715550303997e-5,4.8986766544630736e-8,0.004766367084636814,-2.8573141543301774e-5,4.849172329484978e-8,0.004766464911858467,-2.839814847115955e-5,4.807347695622499e-8,0.00476647980983421,-2.8301831799976193e-5,4.784386143983262e-8,0.004766454199070231,-2.830937480805551e-5,4.7862255367856655e-8,0.004766434603844106,-2.8420157629011527e-5,4.8126495550133353e-8,0.004766459867818386,-2.861169104607286e-5,4.8582435764613466e-8,0.004766553900979995,-2.8848469249434867e-5,4.9145161379864336e-8,0.004766723895020026,-2.9091731049801776e-5,4.9722271610959204e-8,0.004766962652236033,-2.9307102792118214e-5,5.023203099217928e-8,0.004767252783211253,-2.946903329270971e-5,5.061383669831442e-8,0.004767570966247876,-2.956252059197733e-5,5.083224211036534e-8,0.00476789143265435,-2.9583263200849124e-5,5.0877272768619633e-8,0.004768188657904238,-2.9537233992896767e-5,5.076341708753041e-8,0.004768439713838026,-2.9440208044921784e-5,5.0528530531352904e-8,0.004768626910754468,-2.9317193423369705e-5,5.0232483468787865e-8,0.004768741178477299,-2.9201099070795987e-5,4.9953931538163455e-8,0.004768786027644776,-2.9129513499080413e-5,4.978252629146496e-8,0.004768780936853772,-2.9138496012208616e-5,4.980400285879896e-8,0.0047687618966803106,-2.9253256552848995e-5,5.007792821246455e-8,0.004768776430770757,-2.94777909524039e-5,5.0613091054872876e-8,0.004768871988096792,-2.9788111750287958e-5,5.13515752527904e-8,0.004769080444607102,-3.013432954967566e-5,5.2173957718739495e-8,0.004769405284770623,-3.0453486715106665e-5,5.293006343952431e-8,0.004769818220406904,-3.0688999004594416e-5,5.3485350267577706e-8,0.00477026743433048,-3.080834002271513e-5,5.376298803352503e-8,0.004770693577738604,-3.081168201237658e-5,5.3764285152528835e-8,0.004771046589895863,-3.072935915638893e-5,5.3562407814568835e-8,0.004771297631526678,-3.0610999818195513e-5,5.3276237909610404e-8,0.004771443711692161,-3.051122681918304e-5,5.303613422492912e-8,0.004771505396973143,-3.047631542556714e-5,5.295212013490912e-8,0.004771519499267242,-3.0534710642808274e-5,5.3091406911566415e-8,0.004771529205577235,-3.0692816320908944e-5,5.346855026149306e-8,0.00477157418650815,-3.0936189653487376e-5,5.404847750248202e-8,0.004771682921045021,-3.123511651048176e-5,5.4759893534474465e-8,0.004771868687189363,-3.1552574400663744e-5,5.551430977654335e-8,0.004772129449714966,-3.1852223337845775e-5,5.622508871487745e-8,0.004772450721118148,-3.210457768014518e-5,5.682212037646142e-8,0.0047728099065585915,-3.2290564110685556e-5,5.726024480323222e-8,0.004773180754965365,-3.240266257319448e-5,5.752190311025016e-8,0.004773537085899212,-3.244442374528547e-5,5.761592957241243e-8,0.004773855633711976,-3.242925814099788e-5,5.757463774878549e-8,0.004774118342142201,-3.237905496994603e-5,5.7450525834272396e-8,0.004774314614586185,-3.23226647010406e-5,5.731264700502641e-8,0.004774443914942631,-3.2293765111534964e-5,5.724146147285952e-8,0.004774518652136438,-3.232717786829844e-5,5.731994509929363e-8,0.0047745663374796085,-3.245259117379958e-5,5.761852250142311e-8,0.004774628801644312,-3.268548015279706e-5,5.817341730913397e-8,0.004774755642402249,-3.301726301171104e-5,5.896332753649877e-8,0.004774990554962329,-3.340982109567715e-5,5.989660608993938e-8,0.004775353818295921,-3.3800784181514464e-5,6.082409330155231e-8,0.004775829687604098,-3.412186477507274e-5,6.158296115132251e-8,0.004776367868533359,-3.4323594773016025e-5,6.205572173406188e-8,0.004776900497853547,-3.439347655809735e-5,6.22134491263007e-8,0.004777365818310518,-3.435798439395554e-5,6.21203712505869e-8,0.004777726423271264,-3.426947678704886e-5,6.190234646575702e-8,0.004777975587727213,-3.418704078505039e-5,6.170085067616404e-8,0.004778133031878161,-3.416016772550692e-5,6.163388088984261e-8,0.004778235183303571,-3.42193194337018e-5,6.177353927618648e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json new file mode 100644 index 000000000..2cb27659e --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":27000,"numberOfSamples":426,"samples":[0.004778324486778677,-3.437325503603603e-5,6.213990841775234e-8,0.0047784403655323285,-3.4611193149972956e-5,6.270647293317436e-8,0.004778612794687001,-3.490776213298559e-5,6.34120907874662e-8,0.004778858592736182,-3.52292773450405e-5,6.41760174740733e-8,0.004779180332297561,-3.554033000747647e-5,6.491361305699471e-8,0.0047795676373042825,-3.580972313910667e-5,6.555048782196374e-8,0.004780000304382801,-3.601491695515349e-5,6.603309632804475e-8,0.00478045244087296,-3.61445559073166e-5,6.63347373647879e-8,0.004780896788498023,-3.619907152539314e-5,6.64569282050896e-8,0.004781308537182374,-3.6189716300693844e-5,6.642701476463283e-8,0.004781668287402928,-3.613665338138569e-5,6.62935418736394e-8,0.004781964263597514,-3.606664631235279e-5,6.612070094818705e-8,0.004782194088007322,-3.6010502207012165e-5,6.598220199376154e-8,0.004782366358377176,-3.600003307813221e-5,6.595397202033107e-8,0.004782501973157172,-3.6063967015481664e-5,6.610431957871602e-8,0.004782634428155468,-3.622211612037997e-5,6.647996630880908e-8,0.004782807312744113,-3.647777437681964e-5,6.708796154697767e-8,0.004783066725500625,-3.681018070253991e-5,6.787788985789277e-8,0.004783447527929692,-3.717158351927006e-5,6.873512189479286e-8,0.004783956543699519,-3.749495769285591e-5,6.949941757309266e-8,0.004784561694818515,-3.7714824470447004e-5,7.001467512930746e-8,0.00478519734376055,-3.779386901530488e-5,7.019245393058328e-8,0.004785787298279908,-3.773988586048272e-5,7.005238005891471e-8,0.004786273540716633,-3.760159745695435e-5,6.971198893123057e-8,0.004786634261718939,-3.7446681679021194e-5,6.93338948131939e-8,0.004786883955125812,-3.7336538281738074e-5,6.90651418882107e-8,0.004787060855944783,-3.731025026111713e-5,6.89987545085644e-8,0.004787211498019626,-3.738052485901743e-5,6.916423518663561e-8,0.004787378723491085,-3.753768633517913e-5,6.953747098677388e-8,0.004787594743852002,-3.775688736390837e-5,7.005827277528313e-8,0.004787878341866488,-3.8005421267547694e-5,7.064797754466723e-8,0.004788234677867704,-3.824887091042978e-5,7.122411974828502e-8,0.004788656578890198,-3.845602832364749e-5,7.171211724931977e-8,0.004789126866304347,-3.8602762874008655e-5,7.205447458736902e-8,0.004789621527438917,-3.867476505188969e-5,7.221733392634786e-8,0.004790113453092092,-3.866900598852055e-5,7.219394452663505e-8,0.004790576389242894,-3.859380569021363e-5,7.200475975629059e-8,0.004790988658217021,-3.846749668906106e-5,7.169414035802423e-8,0.004791336185455692,-3.831592746623132e-5,7.132428928460062e-8,0.004791614602286293,-3.8169236193829984e-5,7.096748066882624e-8,0.004791830442019499,-3.8058199395276177E-05,7.069730505809583e-8,0.00479200147328233,-3.8010251494226334e-5,7.057912997799612e-8,0.00479215608282581,-3.8045112493544786e-5,7.065962097547686e-8,0.004792331243570715,-3.816988109148568e-5,7.095502401154791e-8,0.00479256801539422,-3.837391090721481e-5,7.143902873254914e-8,0.004792903356231363,-3.8625101009650084e-5,7.203412021826269e-8,0.00479335809982377,-3.887092912081732e-5,7.261428947824125e-8,0.004793923998139211,-3.904832069801235e-5,7.302876037880577e-8,0.004794557121329183,-3.910366330394545e-5,7.314982344552248e-8,0.004795186187943556,-3.901641098772414e-5,7.292918982979318e-8,0.004795737032643518,-3.881216157437762e-5,7.242916797983955e-8,0.004796161501972789,-3.855411099464743e-5,7.180203477009054e-8,0.004796453566145229,-3.831658356890081e-5,7.122636889591443e-8,0.004796644767523727,-3.815714860499036e-5,7.084000022037542e-8,0.004796785949434881,-3.8101951194646106e-5,7.070485098911682e-8,0.004796928139441377,-3.8146598603855446e-5,7.080934608157665e-8,0.004797110480654036,-3.8265789851055167e-5,7.109188904690533e-8,0.004797355877127002,-3.8424311612934556e-5,7.146748579270787e-8,0.004797671612426517,-3.8585616852327366e-5,7.184835086333892e-8,0.004798052093481322,-3.8717282547673696e-5,7.215687639979793e-8,0.004798481982683185,-3.879416904832568e-5,7.233306811500727e-8,0.0047989392109531745,-3.880032466659669e-5,7.233903786826962e-8,0.004799398014519919,-3.873014716490181e-5,7.216177815700216e-8,0.004799832156249859,-3.858883316916818e-5,7.181423253686315e-8,0.004800218353251468,-3.839193072968296e-5,7.133417138730679e-8,0.004800539728226463,-3.816370201797726e-5,7.07801739212383e-8,0.004800788798428815,-3.7934150450836535e-5,7.022440790334248e-8,0.004800969422381577,-3.773493298607536e-5,6.97427737273164e-8,0.004801097307136082,-3.7594608437565975e-5,6.940350057998089e-8,0.004801198860837516,-3.753375575082618e-5,6.925545753494772e-8,0.004801308307002621,-3.7560557353341817e-5,6.931760143740602e-8,0.004801463061629263,-3.766739513003747e-5,6.957089748412672e-8,0.0048016973159992595,-3.7829085241195104e-5,6.995424232825527e-8,0.004802033897188718,-3.800393663211438e-5,7.036721161540528e-8,0.004802475381486049,-3.8139426649914707e-5,7.068384881196978e-8,0.004802997237534293,-3.8183940325160886e-5,7.078086051437349e-8,0.0048035477616877155,-3.810365748834886e-5,7.057799420498539e-8,0.004804059432364746,-3.789890582121566e-5,7.007704800926735e-8,0.004804471058177286,-3.76100617891968e-5,6.93758159734603e-8,0.004804751226949466,-3.730566920695092e-5,6.863938578566553e-8,0.0048049094711126545,-3.705654492532993e-5,6.803781398940207e-8,0.004804988697932718,-3.691017647857788e-5,6.768458911635844e-8,0.004805045208603211,-3.687881976068849e-5,6.760819207952647e-8,0.004805128912216125,-3.6943695478478026e-5,6.776250536534154e-8,0.004805272128763522,-3.706800766501402e-5,6.805842303113509e-8,0.0048054875443432725,-3.72102043926267e-5,6.839587172762585e-8,0.004805771578807736,-3.733305531184578e-5,6.868556225257375e-8,0.004806109373196501,-3.740819210339049e-5,6.885971585954908e-8,0.004806479267214914,-3.741763766075652e-5,6.887556737614801e-8,0.00480685624919262,-3.7353970688048305e-5,6.871568343569287e-8,0.00480721474503835,-3.722005965565962e-5,6.838732853486281e-8,0.004807531254878627,-3.70285788369557e-5,6.792132402469517e-8,0.004807787168840347,-3.680107359176237e-5,6.736978068548045e-8,0.0048079717908961535,-3.656606685754552e-5,6.680147748275388e-8,0.004808085124176199,-3.635572067784862e-5,6.629375291303479e-8,0.0048081395655390005,-3.6201003683608846e-5,6.59208353445968e-8,0.004808159619935799,-3.61259119702826e-5,6.573995300854134e-8,0.004808179052187587,-3.614182096799145e-5,6.577781399967254e-8,0.0048082354644977225,-3.624339663861216e-5,6.602088125342372e-8,0.004808363016906486,-3.640739698014146e-5,6.641263422122376e-8,0.004808584568140996,-3.659514206004428e-5,6.685967165663355e-8,0.004808904762436531,-3.6758854267688404e-5,6.724710168628325e-8,0.00480930579650223,-3.685155258136531e-5,6.746239580653564e-8,0.0048097478566896616,-3.683927126708737e-5,6.742470100953433e-8,0.004810176029910032,-3.6712847565078014e-5,6.711298772615927e-8,0.0048105340254307105,-3.649482817530326e-5,6.658239512536003e-8,0.004810781727205723,-3.62365842449442e-5,6.595705126594526e-8,0.004810909644980501,-3.6003671889103674e-5,6.539470778083783e-8,0.004810942478516832,-3.5853999525254e-5,6.503419712779448e-8,0.004810929054258762,-3.581891665158464e-5,6.495006857326439e-8,0.0048109239580987374,-3.589619723046781e-5,6.513597488805307e-8,0.0048109704482596355,-3.605632765339819e-5,6.552011162684835e-8,0.004811091479469972,-3.625616637154878e-5,6.599830095926331e-8,0.0048112894999106535,-3.645235261818129e-5,6.646628961790225e-8,0.004811551496979631,-3.661003899809157e-5,6.684062633294758e-8,0.004811855326073649,-3.6706519877171644e-5,6.706718834733222e-8,0.004812175008010524,-3.673147922115121e-5,6.71216166824625e-8,0.00481248442724685,-3.668578285980148e-5,6.70063528600365e-8,0.004812759857408077,-3.6580011791983614e-5,6.67471364140862e-8,0.004812982021847438,-3.643312892218514e-5,6.638984182107787e-8,0.004813138260380984,-3.627105788419161e-5,6.599705939990736e-8,0.004813224984539436,-3.612453739463318e-5,6.56428706687843e-8,0.004813250027706149,-3.6025539008764395e-5,6.540413556464342e-8,0.004813233901618618,-3.600194055235022e-5,6.53476083256435e-8,0.004813208641342787,-3.6070981482546236e-5,6.55141956879046e-8,0.004813213185891162,-3.623309956685937e-5,6.590422431888505e-8,0.0048132853329533815,-3.6468577247922494e-5,6.646953796652841e-8,0.00481345196089862,-3.6739232782648675e-5,6.711775543238068e-8,0.004813720524850067,-3.699585543676539e-5,6.773031548224511e-8,0.004814074915372328,-3.718990777229592e-5,6.819070851646075e-8,0.004814477519636433,-3.7286327454266165e-5,6.841524919716474e-8,0.004814877412507499,-3.727371265226798e-5,6.837744468682739e-8,0.004815222824200392,-3.71687674239285e-5,6.811846623591315e-8,0.004815474776181273,-3.70132472069625e-5,6.773954080785747e-8,0.0048156180606356,-3.686348225678969e-5,6.737652512252384e-8,0.004815665783668138,-3.677486127562191e-5,6.716247159200004e-8,0.004815655222405848,-3.678604759224073e-5,6.718971555136587e-8,0.004815636005506843,-3.690868613654817e-5,6.74853269118757e-8,0.004815655154643246,-3.712641741469069e-5,6.800902880734398e-8,0.0048157448657402905,-3.740272786418989e-5,6.86723392503097e-8,0.004815916982414414,-3.769330697538445e-5,6.936842915828944e-8,0.004816164398472773,-3.79575991566434e-5,6.999989097850887e-8,0.004816466732888395,-3.8166161444911164e-5,7.049630552378684e-8,0.004816796998892661,-3.830332545250297e-5,7.082047667647441e-8,0.004817127128752034,-3.8366574426466915e-5,7.096680517792435e-8,0.004817431716377734,-3.8364425072400815e-5,7.095614538559232e-8,0.00481769031494261,-3.831406952629976e-5,7.0830151666776e-8,0.004817889007363463,-3.823930287395324e-5,7.064632660863894e-8,0.004818021924002364,-3.81685964240486e-5,7.047337979987863e-8,0.004818092995005395,-3.8132677946559405e-5,7.038533637487357e-8,0.004818117609598462,-3.8160829347254704e-5,7.045252292139183e-8,0.0048181231757472446,-3.8275439457385075e-5,7.072838433001155e-8,0.004818147032808319,-3.848524220234855e-5,7.123323584537503e-8,0.004818230263552585,-3.877913888410908e-5,7.193954194116859e-8,0.004818407376247594,-3.9123929426344404e-5,7.276667979907158e-8,0.004818694517905241,-3.946919365675648e-5,7.359290131063591e-8,0.004819081226702352,-3.975987623674142e-5,7.428575222689352e-8,0.004819530473516512,-3.99528372131395e-5,7.474192447320143e-8,0.004819988207444505,-4.003071053802827e-5,7.492052207630327e-8,0.0048203989246250615,-4.000728896884301e-5,7.485582965376748e-8,0.004820721175466344,-3.99227597487728e-5,7.464556945092878e-8,0.004820937782280773,-3.9831445677784674e-5,7.442110541926777e-8,0.004821058434419171,-3.978679151255124e-5,7.431111753324506e-8,0.004821115078288102,-3.982808284365596e-5,7.44096350669423e-8,0.0048211522270188,-3.9972043873461636e-5,7.475600152324611e-8,0.004821215190839854,-4.021085655268812e-5,7.533039650683856e-8,0.004821339447086454,-4.051642323333889e-5,7.606436621672032e-8,0.004821543793180569,-4.084903826994292e-5,7.686186217830935e-8,0.004821828560137223,-4.11675330397259e-5,7.762370019061549e-8,0.00482217843219588,-4.143791773110746e-5,7.826830249781045e-8,0.004822568060222116,-4.163862375087511e-5,7.874420409142698e-8,0.004822968276370532,-4.176204785493435e-5,7.903364411314588e-8,0.0048233512962861805,-4.1813332547424874e-5,7.914952587908982e-8,0.004823694268337095,-4.180773689787612e-5,7.912902718095061e-8,0.004823981341733217,-4.176770959006623e-5,7.902653839294732e-8,0.004824204843306262,-4.172022434438517e-5,7.890725119874452e-8,0.004824366170721857,-4.169434217802275e-5,7.884127164436675e-8,0.0048244767088938545,-4.1718500655906905e-5,7.889702962949885e-8,0.004824558542278362,-4.1816828861910714e-5,7.9132317175072e-8,0.004824644046356498,-4.2004005130913916e-5,7.958186192139638e-8,0.004824772810595939,-4.227902970506275e-5,8.02424031086156e-8,0.004824984330163837,-4.261986981161869e-5,8.105999852427741e-8,0.0048253063789773926,-4.2982701249766916e-5,8.192845535537351e-8,0.004825742302472369,-4.330968240475467e-5,8.2708249557431e-8,0.004826263889668254,-4.354578668059347e-5,8.326714000557609e-8,0.004826816164327769,-4.365883275531775e-5,8.352838122738419e-8,0.004827334389224904,-4.3652515189787744e-5,8.350199407923697e-8,0.0048277656748831246,-4.356505406150206e-5,8.328128245698638e-8,0.00482808475136242,-4.3454640222978786e-5,8.300742298950006e-8,0.0048282979694060126,-4.337986978855226e-5,8.282198985286413e-8,0.004828436715004647,-4.3383781338829196e-5,8.28283556019412e-8,0.004828545452468338,-4.3485739353153795e-5,8.307227830943268e-8,0.004828669442671055,-4.368097256269977e-5,8.354112596095182e-8,0.004828845131978453,-4.394543747541324e-5,8.417594361299053e-8,0.004829094332003,-4.42434357404026e-5,8.489003053203357e-8,0.004829422222056958,-4.453594609792681e-5,8.558908046994333e-8,0.004829818689134246,-4.4788154520325726e-5,8.618928271603903e-8,0.004830262162433468,-4.497503014521456e-5,8.663067376891177e-8,0.004830724791376845,-4.508429236527066e-5,8.688419593273334e-8,0.004831177763389958,-4.5116784857431304e-5,8.695250414418422e-8,0.0048315958105310045,-4.50848066644472e-5,8.686584714086303e-8,0.004831960372320328,-4.50092207251216e-5,8.667501419792826e-8,0.004832261385448886,-4.4916181410082026e-5,8.644339426785272e-8,0.004832498085672877,-4.4834021165063305e-5,8.623945104183476e-8,0.004832679280731162,-4.479034989518507e-5,8.612971656792317e-8,0.004832823322580668,-4.480906858922817e-5,8.61715560370843e-8,0.004832957631610085,-4.490685000713927e-5,8.640463908636807e-8,0.0048331170643941285,-4.508874878499018e-5,8.684036295819687e-8,0.004833339822081472,-4.5343323574385394e-5,8.745021561454051e-8,0.004833659599911437,-4.5639123415037367e-5,8.815754137046817e-8,0.004834094074838598,-4.592604139982e-5,8.884105976880853e-8,0.004834633097564738,-4.6145321609871045e-5,8.935914049205118e-8,0.004835233759482804,-4.624855257649796e-5,8.959560230484134e-8,0.004835829415303181,-4.621862951064732e-5,8.951018080070509e-8,0.004836352230776127,-4.6080232054244594e-5,8.916366565204528e-8,0.0048367583349983355,-4.589150422661235e-5,8.869757625100208e-8,0.004837041591904654,-4.572106996194247e-5,8.827831621545146e-8,0.004837230223456968,-4.562385027524527e-5,8.803847379686291e-8,0.004837371762779652,-4.562714338453696e-5,8.804318221037112e-8,0.004837516153686477,-4.572936473719342e-5,8.828738354028514e-8,0.004837703559825233,-4.590705729913291e-5,8.871321255880796e-8,0.00483795842100459,-4.6124666861455577e-5,8.923395641208231e-8,0.0048382884248457615,-4.634354743735913e-5,8.975592732878355e-8,0.004838686449812278,-4.652885932931713e-5,9.019505444720963e-8,0.004839134059291325,-4.6654302346770156e-5,9.048817401084265e-8,0.00483960577414928,-4.670490119196287e-5,9.059963781515475e-8,0.004840073592346507,-4.6677962776577816e-5,9.052354945919353e-8,0.004840511260350432,-4.6582397345525144e-5,9.028205993460479e-8,0.004840897899231785,-4.643670396318439e-5,8.992042145949509e-8,0.004841220660300779,-4.626596989787898e-5,8.949965282921296e-8,0.004841476202205037,-4.6098371678003375e-5,8.908802385796573e-8,0.004841671077489782,-4.596168029442229e-5,8.875259106524241e-8,0.004841821307091204,-4.587997080031785e-5,8.855125453694367e-8,0.004841951292609372,-4.587045888723051e-5,8.852512147964674e-8,0.004842091964053706,-4.5940344193465115e-5,8.869088863412212e-8,0.004842277739297711,-4.6083631809650075e-5,8.903322182845005e-8,0.004842541493972926,-4.627838807084122e-5,8.949828371537751e-8,0.004842906839177331,-4.648600438823033e-5,8.999219477976895e-8,0.004843378264295116,-4.665522221668618e-5,9.039097681872455e-8,0.004843932381435793,-4.6733606371812626e-5,9.056834871587784e-8,0.004844516593310677,-4.6686017948423326e-5,9.044026966797496e-8,0.004845061297440305,-4.651301745333522e-5,9.000924058638993e-8,0.004845504427784852,-4.6256995746914114e-5,8.93789350952813e-8,0.004845816313409309,-4.598827316210438e-5,8.872033893206934e-8,0.004846009719910427,-4.5777184591241536e-5,8.820391758061302e-8,0.004846129972474116,-4.566860671556084e-5,8.793778061329034e-8,0.0048462338316596935,-4.567181248329228e-5,8.794324136066889e-8,0.004846370227429732,-4.576600567215227e-5,8.816863162886767e-8,0.0048465699861102345,-4.591338738919411e-5,8.852141023091782e-8,0.004846844129874208,-4.6071908146491065e-5,8.889930925992923e-8,0.004847187112262369,-4.6204138643279386e-5,8.921179902089594e-8,0.004847581703514996,-4.6282067896565305e-5,8.939150694429025e-8,0.004848003735402131,-4.6289076937789076e-5,8.939877769506586e-8,0.004848426256645651,-4.6220321509909585e-5,8.922246700657916e-8,0.004848823209408606,-4.608209856359733e-5,8.887836627853265e-8,0.004849172664527739,-4.58903562975773e-5,8.840557932192903e-8,0.0048494595475039315,-4.5668426291373705e-5,8.786099087737668e-8,0.0048496777143903665,-4.544400174802944e-5,8.731188333905859e-8,0.004849831083297237,-4.524549703219852e-5,8.682706510070045e-8,0.0048499335706496585,-4.5098191704872816e-5,8.646751496052212e-8,0.004850007839811998,-4.502058698290767e-5,8.627758023189437e-8,0.004850082971399407,-4.502123491055191e-5,8.627733894012528e-8,0.00485019108473835,-4.509627653317102e-5,8.645669590689583e-8,0.004850362866722029,-4.522799803925022e-5,8.677198648497969e-8,0.004850621906510939,-4.5384910987798636e-5,8.71463393443206e-8,0.004850977946640694,-4.552441540774088e-5,8.747633199424684e-8,0.00485142013660625,-4.5599608404899196e-5,8.764862963748815e-8,0.0048519131380055204,-4.557121093968653e-5,8.756886324253519e-8,0.004852400538216197,-4.5422915883702246e-5,8.719862480298039e-8,0.004852819081156075,-4.517383633579113e-5,8.658536065820687e-8,0.004853121273694221,-4.4878623615075926e-5,8.586240756352643e-8,0.004853295526580276,-4.461012521329985e-5,8.52067471895604e-8,0.004853370910340709,-4.443133874108983e-5,8.477085726904584e-8,0.004853402989489355,-4.437253239360528e-5,8.462723494908248e-8,0.004853450340338429,-4.442557395851914e-5,8.475489986913897e-8,0.004853555566747505,-4.4554520782041413e-5,8.506551757055743e-8,0.004853737798332979,-4.471246662007726e-5,8.54446544743408e-8,0.00485399486389547,-4.485554721718429e-5,8.57858896141624e-8,0.004854309864890948,-4.495075979662197e-5,8.600964247263456e-8,0.00485465803028982,-4.497849770452831e-5,8.6069040778254e-8,0.00485501203358417,-4.493206747983682e-5,8.594850455856457e-8,0.00485534568228858,-4.481608527441229e-5,8.565974574854902e-8,0.004855636618776108,-4.464461889212684e-5,8.523726941055656e-8,0.004855868536584048,-4.4439150233652795e-5,8.473347207406128e-8,0.0048560330722339125,-4.422617519806977e-5,8.421282174134603e-8,0.004856131296365982,-4.4034205116743515e-5,8.374453608584602e-8,0.004856174444895931,-4.389004599187381e-5,8.339349699528367e-8,0.004856183359155293,-4.381463425405478e-5,8.321012126246628e-8,0.004856186304500604,-4.381908244061987e-5,8.322079181766202e-8,0.0048562152009108475,-4.3901681750652377e-5,8.342065742125228e-8,0.004856300584346492,-4.4046572784289005e-5,8.37705159905011e-8,0.004856465867596215,-4.422466583704176e-5,8.419918887759595e-8,0.004856721671702306,-4.439714167069116e-5,8.46121777512187e-8,0.004857061176355107,-4.452169624559631e-5,8.490696041970339e-8,0.004857457829840346,-4.456149265628484e-5,8.499476400738042e-8,0.00485786732258919,-4.4495941699599566e-5,8.482662558070934e-8,0.0048582357611451545,-4.433064375541632e-5,8.44172762033907e-8,0.004858514335168011,-4.4101716857274364e-5,8.385533918607352e-8,0.004858676764439197,-4.386931833014717e-5,8.32873433067394e-8,0.004858731337204977,-4.369916734671689e-5,8.287271910808891e-8,0.004858719353578516,-4.363884359422422e-5,8.272626402178683e-8,0.004858699079100403,-4.370113971203409e-5,8.287790899006382e-8,0.004858723862983524,-4.3863152455982114e-5,8.32708541147057e-8,0.004858826040038608,-4.4079389942548624e-5,8.379377681762571e-8,0.00485901243298159,-4.429951477497208e-5,8.432416681478761e-8,0.004859269289883763,-4.448198863401187e-5,8.476146671893096e-8,0.004859570954995191,-4.460045524794661e-5,8.504236029963514e-8,0.004859887795941977,-4.464428204949593e-5,8.514179476144743e-8,0.004860191622124641,-4.461614115330714e-5,8.506688634502332e-8,0.004860458789785439,-4.452889224023546e-5,8.48492775788132e-8,0.004860671945597038,-4.440278682495274e-5,8.453839235720549e-8,0.004860821241729715,-4.426305156165498e-5,8.419563819915824e-8,0.004860905419245433,-4.4137473414217795e-5,8.388856225560573e-8,0.004860932724572903,-4.405349915154474e-5,8.368376120026044e-8,0.004860921196088654,-4.403452027360999e-5,8.363778704610134e-8,0.004860897562807879,-4.4095524083173727e-5,8.378654746993848e-8,0.004860894101884112,-4.4238943389541296e-5,8.413526183041853e-8,0.0048609433408634845,-4.4451997534014956e-5,8.465211854456047e-8,0.004861071294856948,-4.470688491827875e-5,8.526891053304732e-8,0.004861290736213975,-4.4964675805282034e-5,8.589067031036176e-8,0.004861596402411748,-4.518269904195639e-5,8.641375721967553e-8,0.00486196380325942,-4.5324110154403064e-5,8.674916232953769e-8,0.0048623525742310615,-4.536760086172835e-5,8.684603658726279e-8,0.004862714420798966,-4.531482706925229e-5,8.670954354944289e-8,0.004863004623796651,-4.519303097661249e-5,8.640693812132527e-8,0.004863194723425296,-4.505076964306804e-5,8.605688184505726e-8,0.0048632825102846704,-4.494612337857568e-5,8.58005774809639e-8,0.004863294732214557,-4.492967036023607e-5,8.576036145889535e-8,0.004863279646140609,-4.50281209417457e-5,8.600009804265731e-8,0.004863291238192513,-4.5235972657266385e-5,8.650521261792416e-8,0.004863371875000471,-4.5519265521149334e-5,8.719217023603693e-8,0.004863541092600532,-4.5828989880735264e-5,8.794132978880563e-8,0.0048637941431590335,-4.611699389480268e-5,8.863570335939151e-8,0.004864108348633099,-4.6347665140982225e-5,8.918925654220265e-8,0.00486445241548828,-4.650270904600831e-5,8.95582979767788e-8,0.0048647945683711405,-4.658026758675538e-5,8.973908538631549e-8,0.004865107760312099,-4.659122884457311e-5,8.975868058567857e-8,0.004865372216069882,-4.655509521210519e-5,8.966485595145175e-8,0.004865576369720018,-4.649651590121914e-5,8.95177115085765e-8,0.004865717179949249,-4.644257685804242e-5,8.938315205316097e-8,0.004865800395588709,-4.642041241650156e-5,8.932709842864613e-8,0.004865840829426269,-4.6454505120622764e-5,8.940887781848442e-8,0.004865862139653059,-4.656317873149144e-5,8.967262906616372e-8,0.00486589520436499,-4.675433988431925e-5,9.013692766243163e-8,0.00486597415698355,-4.7021367342236717e-5,9.07848659725663e-8,0.004866129742279287,-4.7340909048838094e-5,9.15588685419079e-8,0.004866380968437412,-4.7674714425056845e-5,9.236536298478788e-8,0.004866727661902241,-4.797676853483728e-5,9.309231162293983e-8,0.004867147324684734,-4.8204752728047944e-5,9.363717379329655e-8,0.004867598631309231,-4.833237436364809e-5,9.393686151571851e-8,0.00486803127888161,-4.835807099496604e-5,9.398874966956663e-8,0.004868399226752945,-4.8306738611208255e-5,9.385460419655338e-8,0.0048686730911499205,-4.8223736532853264e-5,9.364566598366033e-8,0.004868847969216985,-4.816304071077976e-5,9.349354754634237e-8,0.0048689445715649204,-4.817300077705271e-5,9.351546946352385e-8,0.004869003383995121,-4.8283613222312364e-5,9.378341924616291e-8,0.004869073380924081,-4.849890638879081e-5,9.43059380023238e-8,0.0048691985524858695,-4.8796843985408144e-5,9.50282614209952e-8,0.004869406558763143,-4.9136789945777165e-5,9.585077822881535e-8,0.0048697031730176215,-4.947169627205198e-5,9.665881714263925e-8,0.004870073718317038,-4.9760441298475204e-5,9.735263346838005e-8,0.004870489786100687,-4.9976304469416066e-5,9.786787764373727e-8,0.004870917867218918,-5.010990840288102e-5,9.818254906626896e-8,0.004871326805083185,-5.016747905294032e-5,9.831256717497081e-8,0.004871692531052498,-5.016661596207553e-5,9.830134495028733e-8,0.004872000142688164,-5.0131652452055496e-5,9.820844897666668e-8,0.004872244237261572,-5.008976155652556e-5,9.810014547881626e-8,0.004872428488982316,-5.0068019068499616e-5,9.804229692860984e-8,0.004872565118915182,-5.0091037618228904e-5,9.809461966944169e-8,0.0048726744092658725,-5.017854275436142e-5,9.830475483883204e-8,0.004872783856378547,-5.034234927557437e-5,9.870086948139556e-8,0.00487292606572329,-5.058265619676878e-5,9.928265588588883e-8,0.0048731343054660824,-5.0884445663438285e-5,1.0001269113882292e-7,0.004873435129492483,-5.1215919899950034e-5,1.0081284930929764e-7,0.0048738390660209,-5.153170034332811e-5,1.015723136253397e-7,0.004874332805219763,-5.178266204412348e-5,1.0217165527867006e-7,0.004874877889632444,-5.1930947916088274e-5,1.0251939608479708e-7,0.004875419222669628,-5.196437324983978e-5,1.0258697726965176e-7,0.004875901546822159,-5.190279042143044e-5,1.0242405238386324e-7,0.004876286929160504,-5.179247995187442e-5,1.0214451691172397e-7,0.004876565554442809,-5.1691121210262656e-5,1.0188954108256096e-7,0.004876756238178176,-5.165032541885692e-5,1.0178476106510073e-7,0.004876898311797196,-5.170234825273362e-5,1.0190790776405611e-7,0.004877039291090606,-5.185415619525043e-5,1.0227463542533915e-7,0.004877222603926023,-5.20886997024062e-5,1.0284205932149231e-7,0.004877478233490123,-5.237148471881915e-5,1.0352515418660084e-7,0.004877817707882309,-5.2659998699574115e-5,1.0421992098956346e-7,0.004878233764547773,-5.291357147653802e-5,1.0482740644614637e-7,0.004878704103850562,-5.310151400306657e-5,1.0527339067231532e-7,0.0048791978095219886,-5.3207947753445196e-5,1.0551996632875121e-7,0.004879682486508378,-5.323275948828798e-5,1.055676880907866e-7,0.0048801303140343175,-5.318929968967715e-5,1.0544982140066945e-7,0.004880521970866183,-5.3100190207577814e-5,1.0522202640813102e-7,0.004880848294653186,-5.299267897057388e-5,1.0495098947741473e-7,0.0048811102117961675,-5.289457264711433e-5,1.0470451475918726e-7,0.004881317747189281,-5.2831136722353006e-5,1.045440020638691e-7,0.004881488756100408,-5.282274765893747e-5,1.0451875219165502e-7,0.004881647595748994,-5.2882791831743e-5,1.0466084584560046e-7,0.004881823499265498,-5.301535663747745e-5,1.0497951455693293e-7,0.004882047968987757,-5.321257874700818e-5,1.0545473459947656e-7,0.004882350207115018,-5.34522364381064e-5,1.0603152097503244e-7,0.004882749931583773,-5.3697319596594616e-5,1.0661911602920183e-7,0.004883248411975124,-5.390029444311228e-5,1.0710159048430002e-7,0.004883821223283848,-5.40142565780382e-5,1.0736509452548331e-7,0.004884418535029374,-5.400964585550486e-5,1.07338516263783e-7,0.004884977331862179,-5.388945231346987e-5,1.0703038492932809e-7,0.004885442982784979,-5.369291520334631e-5,1.0653767571805211e-7,0.0048857896031786405,-5.348285896525935e-5,1.060146273029446e-7,0.004886027899428079,-5.33225701704739e-5,1.0561598542362421e-7,0.004886197488183362,-5.3254761974328e-5,1.0544546399226637e-7,0.004886350220054461,-5.329186339414478e-5,1.0553216327134056e-7,0.00488653376420074,-5.341832436145469e-5,1.058366269418165e-7,0.004886780973520583,-5.3599972431194304e-5,1.0627419538425782e-7,0.004887105836022719,-5.379505921217329e-5,1.0674231474866518e-7,0.00488750437159898,-5.3963749688183614e-5,1.071437647657893e-7,0.004887958428542934,-5.4074868096297026e-5,1.074029666188478e-7,0.004888440866556042,-5.410987220354813e-5,1.0747544257958971e-7,0.004888921197063378,-5.406429862465683e-5,1.0735113586693954e-7,0.004889370931079509,-5.3946902121682926e-5,1.0705217492870693e-7,0.004889767913025726,-5.377692855867965e-5,1.0662613496775146e-7,0.004890099148351,-5.3580229669963764e-5,1.0613649899040003e-7,0.0048903619623596834,-5.3384985707783635e-5,1.0565218481282615e-7,0.004890563646224889,-5.321774155887791e-5,1.0523787065252472e-7,0.004890720050330306,-5.310023848256073e-5,1.0494629332969267e-7,0.00489085365033552,-5.304708763981897e-5,1.0481260896297154e-7,0.004890991351657461,-5.306401912048959e-5,1.0485014474108545e-7]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json new file mode 100644 index 000000000..9767b1b50 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":3000,"numberOfSamples":1000,"samples":[-0.0016674126654346861,-5.729007527752374e-7,-1.4186514962201376e-8,-0.0016673064653587321,-6.734015165127343e-7,-1.4270276706700349e-8,-0.0016671184978181936,-7.942288639572809e-7,-1.4371055120518062e-8,-0.0016668581653082658,-8.937549802808163e-7,-1.4454094104781238e-8,-0.0016665462863460693,-9.416288807763305e-7,-1.4494058993362982e-8,-0.0016662092022260732,-9.201664606449159e-7,-1.4476216298494372e-8,-0.0016658745541862263,-8.237755484396502e-7,-1.4395945891238539e-8,-0.0016655683268689287,-6.578186550518726e-7,-1.4257765362438796e-8,-0.0016653124526036561,-4.3741842925891825e-7,-1.4074304544820363e-8,-0.0016651224530400707,-1.8607276082775895e-7,-1.3865132894139859e-8,-0.0016650049642489826,6.643303169026634e-8,-1.3655018765663274e-8,-0.0016649554928538104,2.8739437967418395e-7,-1.347113935991257e-8,-0.0016649572160637774,4.4604795424859426e-7,-1.3339056817593825e-8,-0.0016649817855313575,5.194876808583452e-7,-1.3277813795917761e-8,-0.0016649928181043465,4.985157505581373e-7,-1.329507262967021e-8,-0.00166495207648607,3.9179414860133283e-7,-1.3383654246342673e-8,-0.0016648274069321705,2.26664827416035e-7,-1.352084347660865e-8,-0.001664600739494372,4.5708357821865315e-8,-1.367124421905444e-8,-0.001664274219706894,-1.0088239670451744e-7,-1.3793127784445051e-8,-0.0016638726869829803,-1.6616023108150796e-7,-1.3847473701249546e-8,-0.0016634410124484337,-1.1869904209770958e-7,-1.3808176255662588e-8,-0.0016630354517974334,4.659577780072841e-8,-1.3671009811639623e-8,-0.001662709627560605,3.030262655914423e-7,-1.3458136463059741e-8,-0.0016624982880314673,5.958730436677693e-7,-1.3214963229037875e-8,-0.001662404794976831,8.568537842964569e-7,-1.2998163907749735e-8,-0.0016623988702162175,1.0254972177202318e-6,-1.2857973826241794e-8,-0.0016624271346917532,1.0685455003698803e-6,-1.2822084766277138e-8,-0.0016624319248438782,9.883600460942418e-7,-1.2888614390257493e-8,-0.001662369242835807,8.174787260993229e-7,-1.3030565315055226e-8,-0.0016622183938909184,6.041843871353809e-7,-1.3207794337616674e-8,-0.0016619818565370786,3.9717316279278375e-7,-1.3379782718210806e-8,-0.0016616789185444716,2.3502260822879676e-7,-1.3514435597222689e-8,-0.0016613377123989804,1.417265131744283e-7,-1.3591822041815075e-8,-0.0016609886089808544,1.2662367606576446e-7,-1.360423147824086e-8,-0.0016606598282278315,1.863922842656112e-7,-1.3554490273298172e-8,-0.0016603748199426104,3.0744517886406376e-7,-1.3453938412913645e-8,-0.0016601505255394024,4.680421085231016e-7,-1.3320649411749458e-8,-0.0016599957713533597,6.402384067973255e-7,-1.3177803860265977e-8,-0.0016599094977454972,7.922656339357963e-7,-1.3051723165875262e-8,-0.0016598791098382528,8.920717595398815e-7,-1.296895475612751e-8,-0.0016598798337515695,9.124839151887528e-7,-1.2952012505708826e-8,-0.001659876379622952,8.376861160842476e-7,-1.3014014454721298e-8,-0.0016598280484381447,6.695105801256583e-7,-1.3153456420237919e-8,-0.0016596973256014155,4.309782162426044e-7,-1.3351256087288848e-8,-0.001659460185844518,1.644717783767708e-7,-1.3572258355341262e-8,-0.0016591147270322442,-7.656124715275952e-8,-1.3772130406953462e-8,-0.0016586845140589572,-2.408327142852044e-7,-1.3908356700286018e-8,-0.0016582146152118225,-2.934361433791715e-7,-1.3952042824758485e-8,-0.0016577609941446497,-2.2641155822799227e-7,-1.3896646268225657e-8,-0.0016573762399432718,-6.21980795145008e-8,-1.3760786009222337e-8,-0.0016570956693766155,1.5125835864904947e-7,-1.3584155440668849e-8,-0.0016569277304044742,3.526938844470182e-7,-1.3417439166449944e-8,-0.0016568517179810498,4.838995413033776e-7,-1.3308801583491872e-8,-0.0016568239567060939,5.055051370474298e-7,-1.329085416886814e-8,-0.0016567907846579653,4.069873023778711e-7,-1.3372361772156796e-8,-0.0016567038867919353,2.0748592272561992e-7,-1.3537525963856996e-8,-0.001656532487673912,-5.231661404744325e-8,-1.375267653077842e-8,-0.0016562685745488837,-3.2332365832738283e-7,-1.3977143471321514e-8,-0.0016559247754694372,-5.607837026808751e-7,-1.4173848477561865e-8,-0.0016555275418913935,-7.327632792039998e-7,-1.4316343411791168e-8,-0.0016551092006448183,-8.233258722118555e-7,-1.4391445802169112e-8,-0.0016547013993568505,-8.316848376668471e-7,-1.439852456672699e-8,-0.0016543308264849162,-7.693391900307951e-7,-1.4347111821174578e-8,-0.0016540168884855639,-6.568154472154755e-7,-1.4254194224863743e-8,-0.00165377050241833,-5.208100635030763e-7,-1.4141844859881727e-8,-0.001653593196269087,-3.917048152325665e-7,-1.4035172614624135e-8,-0.001653476129350162,-3.0088888763530243e-7,-1.3960118899539777e-8,-0.0016533992421155022,-2.7714172882948965e-7,-1.3940479436687606e-8,-0.0016533313967630901,-3.4151069511884616e-7,-1.3993675666328718e-8,-0.001653232946576946,-5.008677652271779e-7,-1.4125420729844042e-8,-0.001653062183142646,-7.418000865678651e-7,-1.4324648124704472e-8,-0.0016527858361718897,-1.0281008249946432e-6,-1.456142157572885e-8,-0.0016523911376223348,-1.305464686483764e-6,-1.4790826634502255e-8,-0.0016518942603108112,-1.5146795210217696e-6,-1.4963914427081036e-8,-0.001651339688429203,-1.609920243457309e-6,-1.5042853245080335e-8,-0.0016507887609035258,-1.5746267527137686e-6,-1.501402985970417e-8,-0.0016503014049699613,-1.4275884845194972e-6,-1.4893009020259092e-8,-0.0016499186673924447,-1.2167625516751627e-6,-1.4719368976416159e-8,-0.0016496525262988243,-1.0042695210536724e-6,-1.4544312694847968e-8,-0.0016494852722868205,-8.488903215522008e-7,-1.4416272286595473e-8,-0.0016493768933366411,-7.916520763817829e-7,-1.4369068693422452e-8,-0.0016492770441696662,-8.477319335831267e-7,-1.441525088113211e-8,-0.0016491379089976894,-1.005586142802875e-6,-1.454535921366001e-8,-0.0016489247906258263,-1.2324077723442385e-6,-1.4732398295614608e-8,-0.0016486222435663186,-1.483745124523919e-6,-1.4939753931208416e-8,-0.0016482349077829455,-1.714387062746813e-6,-1.5130169934377415e-8,-0.0016477837047942081,-1.8876251196414704e-6,-1.5273388453025773e-8,-0.0016472992687706423,-1.9809318567924716e-6,-1.53508288088995e-8,-0.0016468148667739665,-1.987610693939075e-6,-1.5356941194346824e-8,-0.0016463605427636564,-1.915263460295526e-6,-1.529794271457019e-8,-0.0016459592556230336,-1.7824940981911972e-6,-1.5189110139549575e-8,-0.0016456248820582223,-1.6151699815473968e-6,-1.5051713360546717e-8,-0.0016453614347904178,-1.4430148462818047e-6,-1.4910218742385646e-8,-0.0016451628120618224,-1.2966201405178637e-6,-1.4789829372760213e-8,-0.0016450127057533186,-1.2044728826030512e-6,-1.4714032583746818e-8,-0.0016448847709624051,-1.1893868953393184e-6,-1.4701653351213367e-8,-0.0016447437874436506,-1.2638103881750775e-6,-1.4762980827432679e-8,-0.0016445491773054968,-1.4241708565546202e-6,-1.48951005064794e-8,-0.0016442623193067107,-1.645902905672155e-6,-1.5077791633897704e-8,-0.0016438578535539828,-1.8825890625995552e-6,-1.5272828105373147e-8,-0.0016433361724119703,-2.073293524915233e-6,-1.5430051194420875e-8,-0.0016427306855190664,-2.1595591992381907e-6,-1.5501400836018825e-8,-0.0016421028587470339,-2.107131410238427e-6,-1.545878784662949e-8,-0.0016415236596336047,-1.921503495197351e-6,-1.5306805835881395e-8,-0.0016410491716874508,-1.6475995048951014e-6,-1.508237666232406e-8,-0.0016407026930217476,-1.3532595827599134e-6,-1.4841150585489634e-8,-0.0016404710798181709,-1.1058220927750292e-6,-1.4638324030823384e-8,-0.0016403140434198668,-9.529880693486804e-7,-1.4513000663883932e-8,-0.0016401794241349037,-9.138189075949228e-7,-1.4480834585139251e-8,-0.001640017698453548,-9.79444485492997e-7,-1.4534599598191043e-8,-0.0016397921504842823,-1.1199629554508742e-6,-1.46498259445195e-8,-0.001639483962540219,-1.2938873374757163e-6,-1.4792536911725107e-8,-0.0016390929025693608,-1.4576102121358978e-6,-1.492701055511908e-8,-0.0016386346780947172,-1.5734220969873702e-6,-1.5022352898574618e-8,-0.0016381360741017184,-1.615194314249089e-6,-1.50571474431728e-8,-0.0016376290513289884,-1.5712506992188948e-6,-1.502179647791281e-8,-0.0016371449438908516,-1.4444928408342774e-6,-1.4918620999811586e-8,-0.0016367096648583616,-1.25031555175269e-6,-1.4760165902237422e-8,-0.0016363404739891797,-1.0131188796195411e-6,-1.4566365366279228e-8,-0.0016360443826047542,-7.623240043753878e-7,-1.4361298196704363e-8,-0.0016358178081207191,-5.285826195157557e-7,-1.4170084868955413e-8,-0.0016356469788772767,-3.4036970890659786e-7,-1.4016082203265821e-8,-0.001635508814606122,-2.207663722595964e-7,-1.3918227118982464e-8,-0.0016353723164385856,-1.840892669518823e-7,-1.3888261221685396e-8,-0.0016352009622329746,-2.3204470491520787e-7,-1.3927578205263703e-8,-0.0016349571713373055,-3.4963943026521634e-7,-1.4023883873503605e-8,-0.0016346099310555375,-5.023932688054426e-7,-1.4148931817790818e-8,-0.0016341454885156152,-6.3792299560969e-7,-1.4259849140121573e-8,-0.0016335782650784292,-6.955174267981529e-7,-1.4307009536395608e-8,-0.0016329555381133835,-6.248455078933967e-7,-1.4249353069369657e-8,-0.001632348566823429,-4.0811994916454653e-7,-1.4072462495238987e-8,-0.0016318292392897165,-7.307325909948915e-8,-1.3799065103672127e-8,-0.0016314426223732346,3.1411804635436726e-7,-1.348317422928833e-8,-0.0016311911484804568,6.740899862647185e-7,-1.3189486706427881e-8,-0.0016310385568320672,9.431757478148973e-7,-1.2969887537649966e-8,-0.0016309281956906096,1.0909595365989285e-6,-1.284917620325891e-8,-0.0016308035869936743,1.1218851358131656e-6,-1.2823744428951683e-8,-0.001630622539391083,1.0659851233981184e-6,-1.286910999649688e-8,-0.0016303628898681499,9.662126791094569e-7,-1.2950244535657924e-8,-0.0016300220532569065,8.673019924964457e-7,-1.303067628890683e-8,-0.0016296132995635643,8.078877149326865e-7,-1.3078931636879651e-8,-0.001629160810966706,8.157006448712503e-7,-1.3072446478192921e-8,-0.0016286945140845575,9.051596921306019e-7,-1.2999506114425888e-8,-0.001628245126395128,1.0769022975441644e-6,-1.285960415768863e-8,-0.0016278397306271277,1.3189544201936767e-6,-1.266248230864526e-8,-0.001627498165347806,1.6092434451098838e-6,-1.2426094284497363e-8,-0.0016272305284777825,1.919140067868813e-6,-1.2173739988352222e-8,-0.0016270360259148394,2.2175661941671596e-6,-1.1930728972988056e-8,-0.0016269031154630333,2.475096567993343e-6,-1.1721030329836182e-8,-0.0016268106690123906,2.6677037698851066e-6,-1.1564201830643506e-8,-0.0016267299509751117,2.7800877693262435e-6,-1.1472661493037969e-8,-0.0016266273869119789,2.808609891480967e-6,-1.1449301618478332e-8,-0.0016264683188791577,2.7638226285538478e-6,-1.148545475645509e-8,-0.001626222281076474,2.6722456015579204e-6,-1.1559486532781036e-8,-0.0016258702666007566,2.576093825543154e-6,-1.1637054006801947e-8,-0.001625413368763386,2.528652681956703e-6,-1.1674892793466553e-8,-0.0016248800163113045,2.5829769218688514e-6,-1.163000825805575e-8,-0.0016243264182511817,2.7739410660516134e-6,-1.147422855629942e-8,-0.001623824448257784,3.0994362029174313e-6,-1.1209399713251122e-8,-0.0016234371005962335,3.5125193005639037e-6,-1.0873674286989874e-8,-0.0016231924460283597,3.934280626806754e-6,-1.0531046713794774e-8,-0.0016230722116879442,4.2839261521980505e-6,-1.0247004462157263e-8,-0.0016230223920017024,4.509022315061528e-6,-1.0064052989792204e-8,-0.001622977701628644,4.599308318664541e-6,-9.990503166746648e-9,-0.0016228844735368534,4.580979504172208e-6,-1.0005062897292258e-8,-0.0016227124043607017,4.500425340947215e-6,-1.007001881606373e-8,-0.0016224552660553113,4.4079367639713336E-06,-1.0144494972609784e-8,-0.001622125516269599,4.346659224530802e-6,-1.0193467505461069e-8,-0.001621747326018003,4.347159211571133e-6,-1.0192193851439426e-8,-0.001621350394160166,4.425844840376646e-6,-1.0127472727933714e-8,-0.0016209651093993971,4.585398795260131e-6,-9.99724721593909e-9,-0.001620618755614523,4.816205832030953e-6,-9.809405621898151e-9,-0.0016203324293711152,5.0984795936064065e-6,-9.580037457445881e-9,-0.0016201185778446112,5.4050620808012625e-6,-9.331168050521922e-9,-0.0016199792751218015,5.7049341968223675e-6,-9.087925536625024e-9,-0.0016199055449921847,5.967355112173079e-6,-8.875191668941198e-9,-0.0016198780222882233,6.166231880713312e-6,-8.714053321567563e-9,-0.0016198689897785872,6.284171358720325e-6,-8.618507598772804e-9,-0.0016198456428020592,6.315766071306402e-6,-8.59280112903386e-9,-0.001619774385405621,6.26973000154361e-6,-8.629727496350617e-9,-0.0016196259296935819,6.169525357590731e-6,-8.710169915500509e-9,-0.0016193810015156772,6.052090182629365e-6,-8.804188184311565e-9,-0.0016190363271137104,5.963922429773775e-6,-8.87422587160706e-9,-0.0016186098081281857,5.953407381087274e-6,-8.88131796854117e-9,-0.0016181424573248472,6.058817784323751e-6,-8.794748910421731e-9,-0.0016176935536342239,6.293589642068541e-6,-8.60386918296675e-9,-0.001617326219104022,6.634329004002173e-6,-8.327694536227654e-9,-0.0016170853930605306,7.020289243504353e-6,-8.015286175478002e-9,-0.0016169778930223832,7.370415677596483e-6,-7.732028934152944e-9,-0.0016169675000937544,7.6131522800298654E-06,-7.535643904942126e-9,-0.0016169901136538418,7.713155380487486e-6,-7.454642010804234e-9,-0.0016169800837689205,7.679978347262525e-6,-7.481256003272846e-9,-0.0016168922572558102,7.556948303108508e-6,-7.580374851378752e-9,-0.0016167104555515727,7.400752728903742e-6,-7.706059646917471e-9,-0.0016164437683271215,7.26360821746386e-6,-7.816027752541982e-9,-0.0016161173530747812,7.183346466944154e-6,-7.879724076888564e-9,-0.0016157633104902577,7.180632707092512e-6,-7.880570755501255e-9,-0.0016154140207041772,7.260286490250837e-6,-7.814851788477083e-9,-0.001615098001463881,7.414069548772224e-6,-7.689396067402687e-9,-0.001614837378113596,7.623584166153096e-6,-7.519187049980965e-9,-0.0016146461104334338,7.863038966555796e-6,-7.325110558075486e-9,-0.0016145285922477045,8.102151822196889e-6,-7.13161729702838e-9,-0.0016144786655525626,8.30954750461279e-6,-6.963995681741373e-9,-0.0016144794389958994,8.456851025280304e-6,-6.8450772368244266e-9,-0.0016145044863076245,8.523247037034214e-6,-6.791555454796449e-9,-0.0016145208238440725,8.499790759989043e-6,-6.810504300559879e-9,-0.0016144936330299336,8.392510891781708e-6,-6.896885929710203e-9,-0.001614392228170857,8.223343280763281e-6,-7.032834909617165e-9,-0.0016141963521061268,8.028183732838383e-6,-7.189288356946133e-9,-0.0016139016436967962,7.851860839942969e-6,-7.330101133146092e-9,-0.0016135231106711163,7.740313336524296e-6,-7.4183830864822594e-9,-0.0016130954016894184,7.730606125699386e-6,-7.424519615650904e-9,-0.0016126685428214326,7.840105042654435e-6,-7.334806831697677e-9,-0.0016122981087462733,8.057474208610399e-6,-7.1585873366644e-9,-0.0016120303080747725,8.339676729142519e-6,-6.930579850289531e-9,-0.001611885615787256,8.619402313112867e-6,-6.704899178695777e-9,-0.0016118481928508355,8.824139607217275e-6,-6.539785116730204e-9,-0.001611868604140801,8.90107812285037e-6,-6.477642765675682e-9,-0.001611881154272387,8.835912981377337e-6,-6.529915716142489e-9,-0.0016118277460059921,8.655388821984905e-6,-6.674986610903632e-9,-0.001611675919713035,8.41338736769802e-6,-6.869352972909047e-9,-0.0016114237381993468,8.169993921702883e-6,-7.06452679210035e-9,-0.001611093177231819,7.974354515474472e-6,-7.220908293079042e-9,-0.0016107187721478148,7.856385780125358e-6,-7.3144902295771e-9,-0.0016103373933631776,7.826230747315016e-6,-7.33726541883732e-9,-0.0016099815773490676,7.877830737849756e-6,-7.294288237410739e-9,-0.0016096761674665666,7.993507370107692e-6,-7.199928950656389e-9,-0.0016094369744081014,8.147984768505116e-6,-7.074608444117655e-9,-0.0016092702451640983,8.311598200694667e-6,-6.942216930039938e-9,-0.00160917228355665,8.453152537768642e-6,-6.827830668858108e-9,-0.001609129179254943,8.543077992903146e-6,-6.755189047281374e-9,-0.0016091171262881026,8.557333011262786e-6,-6.743558851885236e-9,-0.0016091041391435737,8.481979668330493e-6,-6.804049103358642e-9,-0.0016090539129368906,8.317618601666572e-6,-6.9360391917084e-9,-0.0016089320065604345,8.082194724983374e-6,-7.1249350615802805e-9,-0.0016087135318696238,7.810443188597418e-6,-7.342654995567478e-9,-0.0016083904469439763,7.548814847622212e-6,-7.551773316743061e-9,-0.0016079759933311404,7.346151109873746e-6,-7.71307892483668e-9,-0.0016075042761180575,7.242056143792723e-6,-7.794939036152872e-9,-0.00160702430711951,7.255973870729432e-6,-7.782022387653911e-9,-0.0016065893832426634,7.380066935880531e-6,-7.680904798184895e-9,-0.0016062439692449664,7.578337494266571e-6,-7.520654677956422e-9,-0.0016060111996290365,7.793284040925081e-6,-7.347429731587253e-9,-0.001605884722251656,7.959699219668078e-6,-7.2134347447406345e-9,-0.0016058284903456366,8.02276170190471e-6,-7.162490523129645e-9,-0.001605786300256652,7.954794950983538e-6,-7.216659725347376e-9,-0.0016056989183379042,7.763856680531235e-6,-7.3693711382787e-9,-0.0016055223349501092,7.489910937153623e-6,-7.5884774454684e-9,-0.0016052394922760655,7.190282869697641e-6,-7.827929734487749e-9,-0.0016048613732839356,6.9214213509586415e-6,-8.042440056461898e-9,-0.0016044191014809085,6.724717813606781e-6,-8.19887721405118e-9,-0.0016039523942876091,6.620315668122966e-6,-8.281210552001504e-9,-0.0016034994404368291,6.608103489245576e-6,-8.289661775609236e-9,-0.00160309058100955,6.672612775449543e-6,-8.236730302719379e-9,-0.0016027456251598608,6.788717605477168e-6,-8.142605180973005e-9,-0.0016024734564696638,6.92643298585074e-6,-8.031328805630021e-9,-0.001602272562723833,7.054461000471735e-6,-7.927975303945096e-9,-0.0016021316395473646,7.1429733909865235e-6,-7.85643420942448e-9,-0.001602030096147785,7.166416618010949e-6,-7.837159326460504e-9,-0.0016019389325304322,7.106967943498292e-6,-7.884384590805072e-9,-0.001601822909317285,6.958748005321464e-6,-8.002733282683978e-9,-0.001601645025670833,6.732028706082511e-6,-8.183846196126166e-9,-0.0016013737843991493,6.455595568760507e-6,-8.404514185145453e-9,-0.0016009923060795966,6.174736476004758e-6,-8.628343547216521e-9,-0.0016005063926833,5.943025935706647e-6,-8.81240660038963e-9,-0.001599947436018963,5.80863970378304e-6,-8.918249717289788e-9,-0.0015993671346443959,5.799343297164342e-6,-8.923895711975885e-9,-0.001598824450917896,5.912206177088279e-6,-8.831981049727163e-9,-0.0015983691261643967,6.112691262219383e-6,-8.670353040535608e-9,-0.001598027750726865,6.34370842368762e-6,-8.484735141405814e-9,-0.001597796970333321,6.541210365541908e-6,-8.32624668865039e-9,-0.0015976453400901444,6.6511270032490696e-6,-8.237927113772566e-9,-0.0015975225826418882,6.642865882163979e-6,-8.244027233433758e-9,-0.0015973733172837778,6.5160674645092064e-6,-8.344671256899067e-9,-0.0015971514460371861,6.299134854850162e-6,-8.517063826659138e-9,-0.0015968312197721644,6.040236787256278e-6,-8.722695998097968e-9,-0.0015964119337554,5.793741677183589e-6,-8.918192024461737e-9,-0.0015959153524303371,5.606512708157547e-6,-9.066246268690955e-9,-0.0015953776009036073,5.508240931702783e-6,-9.143302312759663e-9,-0.0015948390145066778,5.5079279870896205e-6,-9.142302190616902e-9,-0.0015943353730508711,5.595937570596819e-6,-9.07100224242127E-09,-0.0015938924112206762,5.749295724445448e-6,-8.947734194601513e-9,-0.0015935237022038366,5.937745603497693e-6,-8.796600268425784e-9,-0.0015932308952599915,6.128923308494835e-6,-8.643381449495809e-9,-0.0015930050349990598,6.292138592490837e-6,-8.512542405787741e-9,-0.0015928280496299403,6.401112560124816e-6,-8.425039499555748e-9,-0.001592674118163697,6.436402325511549e-6,-8.396358552439093e-9,-0.001592511242825915,6.388162226916735e-6,-8.434284847973138e-9,-0.0015923038548076277,6.259479463662382e-6,-8.536238644079333e-9,-0.0015920175360308354,6.069704190545227e-6,-8.686647143544019e-9,-0.0015916265581974022,5.855945053772369e-6,-8.855809836079169e-9,-0.0015911234432686942,5.66982094337028e-6,-9.002557749844637e-9,-0.0015905271902137126,5.566980643098267e-6,-9.082660120678599e-9,-0.0015898846649755427,5.5901058549402035e-6,-9.062364074658102e-9,-0.0015892607401442954,5.751420421663427e-6,-8.932240034166934e-9,-0.0015887185141690312,6.0241142294602755e-6,-8.713870498328418e-9,-0.0015882979764191441,6.3490168297115175e-6,-8.454426383873467e-9,-0.0015880035039804617,6.654182728757788e-6,-8.211064945180594e-9,-0.0015878052699886624,6.877775058584288e-6,-8.032786882775957e-9,-0.0015876517590710897,6.984489838970192e-6,-7.947450754328946e-9,-0.0015874863779336544,6.971221701182685e-6,-7.957325293941682e-9,-0.0015872619917445506,6.863185748489404e-6,-8.042215733171648e-9,-0.0015869502414554443,6.704200258300083e-6,-8.167230467721707e-9,-0.0015865450265327885,6.544861833301743e-6,-8.292209810873044e-9,-0.001586060881771174,6.431419708027262e-6,-8.380562643969391e-9,-0.0015855275390838218,6.397223103243651e-6,-8.4060105625722e-9,-0.001584982293378186,6.457920516330214e-6,-8.356321717507075e-9,-0.0015844620349776742,6.61081898948137e-6,-8.233749425801078e-9,-0.0015839966677754043,6.837813403661317e-6,-8.052680242552925e-9,-0.0015836049744388627,7.110512974486875e-6,-7.83558877254055e-9,-0.00158329313272495,7.39599782801762e-6,-7.60852007937778e-9,-0.0015830553572955281,7.661943418484884e-6,-7.397063210929995e-9,-0.0015828757453601038,7.88048537908479e-6,-7.223288825216026e-9,-0.0015827305073950087,8.030921094971425e-6,-7.103576255489422e-9,-0.0015825902239223386,8.10175707948008e-6,-7.046953362750228e-9,-0.0015824222470464458,8.09261347207407e-6,-7.0535751904136625e-9,-0.0015821938020142208,8.016239439311893e-6,-7.1131587433406575e-9,-0.001581876678930113,7.90023529461386e-6,-7.203688583790658e-9,-0.0015814541506088944,7.786937005316729e-6,-7.291589958387156e-9,-0.001580929437716428,7.72886735500687e-6,-7.33539011103742e-9,-0.001580332627237802,7.777305469592599e-6,-7.294769075619663e-9,-0.0015797203731629178,7.964409090283794e-6,-7.144630568893987e-9,-0.0015791630814620142,8.285391603077017e-6,-6.889058321940481e-9,-0.001578720878001717,8.692298812053108e-6,-6.566101724486824e-9,-0.001578419502984907,9.10747486170557e-6,-6.2370916464480965e-9,-0.0015782405062512823,9.452091527792786e-6,-5.9641611304561455e-9,-0.0015781312909732138,9.674079549613374e-6,-5.7882606428250385e-9,-0.001578027360075597,9.761402781761969e-6,-5.718703551331627e-9,-0.0015778737449317608,9.738155742011253e-6,-5.736256424581671e-9,-0.0015776373992268053,9.650582774239132e-6,-5.804222309092312e-9,-0.0015773098917586672,9.551555633876995e-6,-5.88077278945436e-9,-0.0015769037319662415,9.488450878456881e-6,-5.928572703455147e-9,-0.001576445875891479,9.49569390768316e-6,-5.920653078048749e-9,-0.001575970674530697,9.591327497139855e-6,-5.84304192231517e-9,-0.0015755133171369835,9.77658865659438e-6,-5.694997471322311e-9,-0.0015751042615903047,1.003778163139329e-5,-5.487458624638412e-9,-0.001574765041689377,1.0349895109118027e-5,-5.240176643150512e-9,-0.0015745057554236149,1.0681318357532525e-5,-4.978030419643896e-9,-0.001574324361526077,1.0998934195309128e-5,-4.727059345412328e-9,-0.0015742076584801335,1.1272847997949395e-5,-4.510760254880358e-9,-0.0015741334933916324,1.148015300643822e-5,-4.347106597166391e-9,-0.0015740736145208995,1.1607546540740536e-5,-4.2464524410951475e-9,-0.0015739967905234456,1.165297766004052e-5,-4.210215818202505e-9,-0.0015738721019847755,1.1626573124438477e-5,-4.230176567081147e-9,-0.0015736725816667494,1.1550994953670337e-5,-4.288272760115865e-9,-0.0015733796828682138,1.1460984868635478e-5,-4.357060355334619e-9,-0.0015729888863822469,1.1400977627530216e-5,-4.401668546947189e-9,-0.001572515654131937,1.1418948321355508e-5,-4.38465144129614e-9,-0.0015719991378984194,1.155499016771094e-5,-4.27489553861985e-9,-0.0015714991590845522,1.1825387317786e-5,-4.059992614526739e-9,-0.0015710820407434478,1.2207971645261938e-5,-3.757587705347629e-9,-0.00157079647604091,1.2639630181296142e-5,-3.4172617851035963e-9,-0.0015706506457699233,1.3034205729014649e-5,-3.106531606911105e-9,-0.0015706061696304065,1.3315507185698884e-5,-2.885049906609442e-9,-0.0015705947849098492,1.3446774868260129e-5,-2.7815199812259615e-9,-0.0015705471798354855,1.3439686701807493e-5,-2.7865797392088607e-9,-0.0015704165589056223,1.3341690442592115e-5,-2.8627232184856177e-9,-0.0015701872847721412,1.3213818456770147e-5,-2.9617956699222407e-9,-0.0015698706765883304,1.3111683729022345e-5,-3.0400379076245207e-9,-0.0015694951802119525,1.3074916344619818e-5,-3.0664473087197053e-9,-0.0015690965559719964,1.3124045477720016e-5,-3.02518922812497E-09,-0.0015687104237655423,1.3261776187223445e-5,-2.914483963298332e-9,-0.0015683672849147719,1.3476135614623932e-5,-2.744017121960997e-9,-0.001568089331561201,1.3744221248213585e-5,-2.531925583923272e-9,-0.001567888481635352,1.4036199389495978e-5,-2.301652902586154e-9,-0.0015677654444036897,1.431949385617295e-5,-2.0787019259425203e-9,-0.001567709854690696,1.4563082634763757e-5,-1.8873090716874538e-9,-0.0015677016010537767,1.474164561397543e-5,-1.7472081474154697e-9,-0.0015677133377832947,1.4839081201440235e-5,-1.6708576042155112e-9,-0.0015677139033290711,1.4850945784761677e-5,-1.6615071481920558e-9,-0.001567672273456403,1.4785614343760266e-5,-1.712298071717079e-9,-0.001567561728035762,1.4664077909571058e-5,-1.8064872373507266e-9,-0.001567363964362006,1.4518342278869283e-5,-1.9188087740274477e-9,-0.0015670730416101715,1.4388371092908044e-5,-2.017975036911366e-9,-0.001566699009351379,1.4317124795163991e-5,-2.0706086887569183e-9,-0.001566270342050259,1.434288706438812e-5,-2.0471994116831762e-9,-0.0015658331609196012,1.4488670512990482e-5,-1.9302484376469083e-9,-0.0015654445000836176,1.4750408147840926e-5,-1.72331580198987e-9,-0.0015651576376926135,1.5088818242514955e-5,-1.4572399696723894e-9,-0.0015650016611725502,1.543273520838367e-5,-1.1875289074112136e-9,-0.0015649646525930018,1.5699315031914638e-5,-9.786981777112633e-10,-0.0015649932080395524,1.5825615668091956e-5,-8.797288461446118e-10,-0.0015650127561441629,1.5794360168681763e-5,-9.039460652179229e-10,-0.0015649578766231919,1.5637909598140213e-5,-1.0258340424130335e-9,-0.0015647946888691952,1.5419919015121727e-5,-1.1953572908828253e-9,-0.001564525408102832,1.5208671664966406e-5,-1.3589165068917122e-9,-0.0015641786040441487,1.5056893076463547e-5,-1.4752664574075088e-9,-0.00156379486909857,1.4993534545273575e-5,-1.521981552315444e-9,-0.0015634150399108117,1.5024788854757072e-5,-1.4945831313107964e-9,-0.0015630731490801214,1.5139317110787819e-5,-1.4023153307767539e-9,-0.0015627932503844573,1.5314097884522007e-5,-1.2634546568637839e-9,-0.0015625884467632353,1.5519419283943223e-5,-1.1013546330723007e-9,-0.001562460875346721,1.5722949233932406e-5,-9.412785609553453e-10,-0.0015624021479970563,1.5893311969822037e-5,-8.076525173200512e-10,-0.0015623942663999986,1.600355815982286e-5,-7.213957276926135e-10,-0.0015624113087739449,1.603464562664121e-5,-6.972120092446669e-10,-0.0015624222244725121,1.5978599480086515e-5,-7.411073308205331e-10,-0.0015623947894483653,1.5840685366149302e-5,-8.486840929629714e-10,-0.0015623003825704094,1.563995164582476e-5,-1.0047498832725248e-9,-0.00156211896716867,1.5407677934949402e-5,-1.1846143530044873e-9,-0.0015618434715127026,1.5183522199556461e-5,-1.3572122413585078e-9,-0.001561482731818114,1.5009579708722523e-5,-1.4898312300154014e-9,-0.0015610623229379093,1.492287455651844e-5,-1.553978673492256e-9,-0.0015606225925568506,1.4946887881331915e-5,-1.5318866836714567e-9,-0.001560212971251659,1.5083203136375069e-5,-1.422837639342225e-9,-0.0015598818401117295,1.530556706953706e-5,-1.2475983890907835e-9,-0.0015596626235708532,1.5560011265301256e-5,-1.0482226412439358e-9,-0.001559559627593272,1.577486934926789e-5,-8.802955933378288e-10,-0.0015595405570984476,1.5881538273988095e-5,-7.9692043926817e-10,-0.0015595430360532403,1.5839771966023374e-5,-8.291538101517867e-10,-0.0015594959955338393,1.5654660779172335e-5,-9.72801001056983e-10,-0.0015593463001946208,1.5374391353418983e-5,-1.190114515735307e-9,-0.0015590762116928854,1.5069709060576866e-5,-1.4258030022227316e-9,-0.001558703847788798,1.4807611900845037e-5,-1.6276153266680996e-9,-0.0015582703547364113,1.4632787290015397e-5,-1.7608768873779355e-9,-0.00155782354477752,1.4561962806159921e-5,-1.812864234105201e-9,-0.0015574055106049006,1.4587994709651823e-5,-1.7895075593158592e-9,-0.0015570463687551211,1.4687835068240819e-5,-1.7090593224017948e-9,-0.0015567627265973315,1.4830172836249719e-5,-1.5960694700656643e-9,-0.0015565585721585488,1.4981143223910987e-5,-1.4769346528028385e-9,-0.0015564268779924705,1.5108248878273527e-5,-1.3768878228299211e-9,-0.001556351184307716,1.5183283689987646e-5,-1.3177718726983572e-9,-0.0015563071846080817,1.518499355836712e-5,-1.3159931882651027e-9,-0.001556264759061091,1.5101840586844419e-5,-1.3803631127402186e-9,-0.0015561910289953722,1.493467497760959e-5,-1.5099983155967233e-9,-0.001556054769142461,1.4698525876528096e-5,-1.692928407678446e-9,-0.0015558319325716652,1.4422419435365395e-5,-1.9062865699394374e-9,-0.00155551134062967,1.4146276673803998e-5,-2.118820791349384e-9,-0.0015550990200105716,1.3914554215767493e-5,-2.2959501362179986e-9,-0.0015546195256492723,1.376733680242155e-5,-2.406755127218841e-9,-0.001554113115567492,1.3730683214261952e-5,-2.4314473667369036e-9,-0.001553628664032215,1.3808584379673326e-5,-2.367474165297039e-9,-0.0015532132442453931,1.3978822784027847e-5,-2.232532482775318e-9,-0.0015529002123789554,1.4194626461009348e-5,-2.063117347756414e-9,-0.0015526985302697924,1.439325938164884e-5,-1.907804521574992e-9,-0.0015525869004329388,1.4511149461068737e-5,-1.8155962076796212e-9,-0.0015525163561113226,1.4502518791870292e-5,-1.821618126894051e-9,-0.0015524229966605255,1.4355340596169604e-5,-1.934861536785402e-9,-0.0015522480046320417,1.4097085782131253e-5,-2.1337720574238567e-9,-0.0015519570630758844,1.3785964147240603e-5,-2.373056019133126e-9,-0.0015515502090884452,1.3490805690072358e-5,-2.5993134735632945e-9,-0.0015510581583219735,1.3269136012428824e-5,-2.7680732374480753e-9,-0.0015505287216183647,1.3153018247135854e-5,-2.8547493909096727e-9,-0.0015500111337097319,1.3146302784594268e-5,-2.8566824400189927e-9,-0.0015495446374244918,1.3230505435768768e-5,-2.788469542937826e-9,-0.001549153320614908,1.3373991814169866e-5,-2.6747740927702085e-9,-0.0015488458317407083,1.3540368315253085e-5,-2.543818936185515e-9,-0.0015486175736199625,1.3694424215569561e-5,-2.422826603784886e-9,-0.0015484534953238353,1.3805782453544893e-5,-2.335244042665086e-9,-0.0015483305799586244,1.3851194736815257e-5,-2.2989915178837034e-9,-0.0015482199989999771,1.3816427644258473e-5,-2.3249912029369815e-9,-0.001548089463216438,1.369826171317471e-5,-2.41558809311908e-9,-0.0015479064843226234,1.3506495043573231e-5,-2.5629790637511724e-9,-0.0015476430650823826,1.3265142070830212e-5,-2.748308110889761e-9,-0.0015472817047777522,1.3011433188873347e-5,-2.9425170054115522e-9,-0.0015468215378123499,1.2791153939947237e-5,-3.1100615838046316e-9,-0.0015462823008519895,1.264978126784404e-5,-3.2158634430605283e-9,-0.0015457034820694632,1.2620793299373853e-5,-3.23437207800151e-9,-0.0015451371557708795,1.271461979911524e-5,-3.1580199349164043e-9,-0.0015446354809309358,1.2912598720449401e-5,-3.001718234269623e-9,-0.0015442364302565255,1.3169086681883902e-5,-2.801040276875315e-9,-0.0015439524938185769,1.342193894043896e-5,-2.604019123633512e-9,-0.0015437662068975597,1.3608488064402962e-5,-2.4588197532468753e-9,-0.0015436340713854192,1.3682357584886e-5,-2.4008622169249547e-9,-0.001543497962354699,1.3626252232787606e-5,-2.4430807619033354e-9,-0.00154330101649021,1.3456844397511336e-5,-2.572263294225788e-9,-0.0015430034083978895,1.3219882326718478e-5,-2.7529027871083723e-9,-0.0015425929181858147,1.2976711436722279e-5,-2.937645646025132e-9,-0.0015420866882192013,1.278670592403656e-5,-3.080856310691857e-9,-0.00154152398796979,1.2691851204048305e-5,-3.1504613502583297e-9,-0.001540953480044075,1.2708519035282108e-5,-3.1341863973903237e-9,-0.0015404202334010281,1.2827867903263539e-5,-3.039126457904035e-9,-0.0015399566733843208,1.302256759212801e-5,-2.886485245993735e-9,-0.0015395788942260255,1.325586308652444e-5,-2.7045866919813093e-9,-0.0015392872954454852,1.3489692472678766e-5,-2.5226746116671805e-9,-0.0015390695180788213,1.3690362719305401e-5,-2.3666060094382767e-9,-0.0015389039426561332,1.3831829101966165e-5,-2.2563601055744896e-9,-0.0015387628159656927,1.3897428531583792e-5,-2.20469239650718e-9,-0.0015386148936828994,1.388103058929039e-5,-2.2162086122068876e-9,-0.0015384280799308537,1.3788188762037226e-5,-2.28644706084773e-9,-0.0015381727896268602,1.3637252599749298e-5,-2.4010335015984904e-9,-0.00153782662638598,1.3459685165893791e-5,-2.5355047694054314e-9,-0.0015373803606947806,1.3298103454663454e-5,-2.6569224773298658e-9,-0.0015368439449366434,1.3200271754010526e-5,-2.7285944715443808e-9,-0.0015362497069414172,1.3208268582747388e-5,-2.7184455758695063e-9,-0.0015356491281297727,1.3344727868614513e-5,-2.609535624585385e-9,-0.0015351012857119798,1.3601376685119754e-5,-2.4087144532296773e-9,-0.001534655333305587,1.3936432395579682e-5,-2.1484399499017215e-9,-0.0015343338675460306,1.4284442308400234e-5,-1.8790986065537597e-9,-0.001534124900712501,1.4575769360907748e-5,-1.6540268609434805e-9,-0.001533986063403117,1.4757650849527079e-5,-1.5134089313619608e-9,-0.0015338585577077514,1.4808523097929115e-5,-1.4733758294952858e-9,-0.001533684646016743,1.4741520547899112e-5,-1.5234227094639102e-9,-0.001533422629589494,1.4597945041350879e-5,-1.6315309243635806e-9,-0.0015330556633583313,1.4434363097761433e-5,-1.7541719141681908e-9,-0.0015325932941699795,1.43077142414427e-5,-1.8477863331828831e-9,-0.0015320665277323265,1.426230754346835e-5,-1.878725396982042e-9,-0.0015315185461519663,1.4321473573738102e-5,-1.8295328556822685e-9,-0.001530993934766879,1.4485180350014558e-5,-1.7006180859558923e-9,-0.001530529287402824,1.4733246178698408e-5,-1.5076755247691595e-9,-0.0015301472235543963,1.5032273750256648e-5,-1.2763383865137975e-9,-0.001529854434526647,1.5343751423442615e-5,-1.0360201232972493e-9,-0.0015296430494533845,1.5631173065596047e-5,-8.145421075795626e-10,-0.0015294939224596445,1.5865044960165455e-5,-6.343581941131169e-10,-0.0015293804665335667,1.6025681201232713e-5,-5.104211518947967e-10,-0.0015292721800424954,1.6104406698012555e-5,-4.492264661427397e-10,-0.0015291376898846022,1.610398838942385e-5,-4.484456737093128e-10,-0.0015289476443276155,1.6038826092304203e-5,-4.967851368558057e-10,-0.0015286780300962212,1.5934920116292352e-5,-5.7407767303816e-10,-0.0015283144581671828,1.5828995706173513e-5,-6.520649957069123e-10,-0.001527857433495814,1.5765420962771622e-5,-6.968641554284709e-10,-0.0015273273599870595,1.578919190086431e-5,-6.74377333345776e-10,-0.001526766307082904,1.5934197950098757e-5,-5.592021348606761e-10,-0.0015262325434225242,1.6208917896855537e-5,-3.454009983392546e-10,-0.0015257856016340661,1.6585900155219326e-5,-5.434009904032178e-11,-0.001525465322369261,1.7003376453317625e-5,2.6667254099619e-10,-0.0015252747715500247,1.738282006332563e-5,5.577945753003107e-10,-0.0015251774516648478,1.765614484759572e-5,7.673293029466002e-10,-0.0015251111941016761,1.778888314628154e-5,8.693422948032573e-10,-0.0015250108675460873,1.7788373699605145e-5,8.698678813149482e-10,-0.0015248284104435656,1.769597096092772e-5,8.008933904221264e-10,-0.001524543138352943,1.7570342537972436e-5,7.074837082249667e-10,-0.001524161958697962,1.747014596631279e-5,6.344307222398109e-10,-0.00152371290844506,1.7441141511317046e-5,6.163780060845438e-10,-0.001523235851785127,1.7509215448337496e-5,6.72585413499027e-10,-0.0015227730669315363,1.7678694633934106e-5,8.058200670495614e-10,-0.0015223612736943114,1.7934688640477055e-5,1.0043203383510617e-9,-0.0015220259505717274,1.82482101335355e-5,1.2458005545171251e-9,-0.0015217783771147274,1.858278154644696e-5,1.502482588468059e-9,-0.0015216153779278,1.8901176203271382e-5,1.7461563926156706e-9,-0.001521521286606779,1.9171184850908933e-5,1.9524855806838318e-9,-0.0015214713531420381,1.936973086375099e-5,2.1040967574472464e-9,-0.0015214357043695024,1.9485117407839795e-5,2.1923000740043392e-9,-0.001521383137404215,1.9517692447771478e-5,2.217627952739704e-9,-0.0015212844821984616,1.9479511468266107e-5,2.1895835175049778e-9,-0.0015211156742934025,1.939342867657197e-5,2.1258913140746853e-9,-0.0015208608563400331,1.9291673965034527e-5,2.0512979780619082e-9,-0.001520515854495682,1.9213505125941906e-5,1.995657851135691e-9,-0.0015200919884612346,1.9200901897949216e-5,1.9905876211772794e-9,-0.0015196190517206686,1.9290978781291798e-5,2.0637415938522103e-9,-0.001519144803733725,1.9504713196396947e-5,2.2304122471037216e-9,-0.001518727462232059,1.9834280591372538e-5,2.484141135478913e-9,-0.0015184192950395239,2.0235367514319987e-5,2.7910634415758664e-9,-0.0015182452262433325,2.0633099952696904e-5,3.0944338572009063e-9,-0.0015181877354138221,2.094520859440517e-5,3.3320858875781925e-9,-0.0015181899043198905,2.1113683302729238e-5,3.4603240998125803e-9,-0.0015181776587180065,2.1127106051478163e-5,3.4708520228233463e-9,-0.0015180885131474918,2.1021030404410242e-5,3.391091106264991e-9,-0.0015178909438639508,2.0859213783789e-5,3.2698730446144373e-9,-0.0015175877233646422,2.0709171992738493e-5,3.1587082248994756e-9,-0.0015172073558787026,2.0623842481949752e-5,3.0977101310951086e-9,-0.0015167914191089214,2.063317965218757e-5,3.109204821067375e-9,-0.0015163832619076432,2.0743705953134367e-5,3.1975368071754336e-9,-0.0015160200669873704,2.0942485608743105e-5,3.3523023756736195e-9,-0.0015157281682930876,2.1202788343014117e-5,3.5528268410564887e-9,-0.0015155208240000008,2.1490072546112796e-5,3.7727761422749006e-9,-0.0015153978329193042,2.1767775800983042e-5,3.984512020996164e-9,-0.0015153466823297202,2.2002561279956053e-5,4.162975427671088e-9,-0.0015153449752000046,2.2168662578104594e-5,4.2888951154383054e-9,-0.0015153638372301824,2.225102728825126e-5,4.351136659371982e-9,-0.001515371889179471,2.2246993016359994e-5,4.3479874066622305e-9,-0.0015153392563930425,2.216641597337143e-5,4.287271959233951e-9,-0.001515241213541778,2.2030490914074532e-5,4.1854284582402095e-9,-0.0015150613338686283,2.1869574703626888e-5,4.065761994294679e-9,-0.0015147941551076818,2.1720147110229897e-5,3.956004055400928e-9,-0.0015144474064621842,2.1620798118500058e-5,3.885163322724043e-9,-0.0015140436280418352,2.160676344805545e-5,3.879380610579873e-9,-0.0015136202312386242,2.1702388771875214e-5,3.956357484574458e-9,-0.001513226034844196,2.191177437422689e-5,4.1185205826258535e-9,-0.0015129120080209172,2.221001677650227e-5,4.346649078495528e-9,-0.001512715541928629,2.254041791686142e-5,4.597890678761155e-9,-0.001512642323751254,2.282451516198137e-5,4.8132638236435735e-9,-0.001512656112032841,2.2987226657755368e-5,4.936448725917021e-9,-0.0015126871339836351,2.2987814401065566e-5,4.937036368579893e-9,-0.0015126589666124984,2.283832816494508e-5,4.824488181507253e-9,-0.0015125191642603442,2.2596939508072832e-5,4.643164810446097e-9,-0.001512255771697461,2.234135481963672e-5,4.452159952580022e-9,-0.0015118937115124553,2.2139907404171068e-5,4.303255975411923e-9,-0.00151147883232571,2.203443093930126e-5,4.227845582902372e-9,-0.001511060993239207,2.2037202305538674e-5,4.234671953457867e-9,-0.0015106824975225093,2.213657085421608e-5,4.314282868663287e-9,-0.0015103725536317254,2.2305348342064856e-5,4.4455958177446396e-9,-0.001510145935250769,2.2508543748264166e-5,4.601885979825811e-9,-0.0015100037941396729,2.27093975733727e-5,4.75536669510632e-9,-0.0015099353530227085,2.2873996336669858e-5,4.880600371514767e-9,-0.0015099200916151164,2.2974973370313923e-5,4.957188134048892e-9,-0.0015099304637137257,2.2994496007904244e-5,4.971952359005194e-9,-0.0015099352286913673,2.2926461766264454e-5,4.920579998432417e-9,-0.0015099033645110472,2.277759522000927e-5,4.808472749402745e-9,-0.0015098082535331882,2.256704567886276e-5,4.650450638927179e-9,-0.0015096316019525189,2.2324318804894625e-5,4.469136915658275e-9,-0.0015093665766133704,2.208567924099814e-5,4.2921241199986e-9,-0.0015090197629728298,2.1889299652124044e-5,4.148176635499323e-9,-0.0015086116448405531,2.1769507934527783e-5,4.062815296740895e-9,-0.0015081753500045245,2.1750466832938717e-5,4.05360291565382e-9,-0.0015077531763032308,2.183960388547096e-5,4.125383508132904e-9,-0.0015073900399322092,2.202167990402843e-5,4.2660809956394935e-9,-0.0015071232263286609,2.225573764208077e-5,4.44462415416496e-9,-0.0015069693776782423,2.2478572667533146e-5,4.6136193435732875e-9,-0.0015069127900212765,2.261830809440704e-5,4.719430802140069e-9,-0.0015069025568193628,2.2617773461514468e-5,4.719545121206075e-9,-0.0015068654430890603,2.2459193836491986e-5,4.601005606662283e-9,-0.001506732732291867,2.2175454413684737e-5,4.388897633440769e-9,-0.0015064676102254564,2.1838262916960467e-5,4.1374773793336535e-9,-0.0015060770908259737,2.152899176668202e-5,3.9081543995164606e-9,-0.0015056034531821725,2.130964096087466e-5,3.747499605308365e-9,-0.0015051039831142801,2.120817745888039e-5,3.67616765940978e-9,-0.0015046318558587788,2.121994692951462e-5,3.6900798243215312e-9,-0.0015042251268647423,2.1317953608248667e-5,3.768369282876351e-9,-0.0015039036630436163,2.1464388035088392e-5,3.88222893943776e-9,-0.0015036707819547192,2.1619516091843104e-5,4.001665844105285e-9,-0.0015035165886605325,2.1747302655433718e-5,4.099689013291884e-9,-0.00150342132600212,2.1818716266063703e-5,4.154695925069204e-9,-0.001503358325448771,2.1813879500024203e-5,4.1519986156729824e-9,-0.0015032968462424501,2.1723736492507323e-5,4.08503905892022e-9,-0.0015032052341075262,2.155133538091197e-5,3.956368101994074e-9,-0.0015030546872407823,2.1312355770057032e-5,3.778071180337243e-9,-0.0015028235326783174,2.103420332333634e-5,3.5710789610787957e-9,-0.0015025013887804367,2.075307806093682e-5,3.362886440108658e-9,-0.0015020922453497882,2.0508886287330707e-5,3.183598559287639e-9,-0.0015016154742786625,2.0338452391119222e-5,3.0607104114683997e-9,-0.0015011040515861569,2.0268076034948164e-5,3.0134867470089806e-9,-0.001500599804274013,2.030688168146457e-5,3.04807733049152e-9,-0.0015001460726057133,2.044239395900025e-5,3.154424023362247e-9,-0.00149977856352969,2.0639604039527855e-5,3.305819021705255e-9,-0.0014995156172464786,2.0844817059723325e-5,3.461959279396227e-9,-0.0014993500137638414,2.0995399978085027e-5,3.576249789876038e-9,-0.0014992456432738306,2.1035335583678028e-5,3.60729449457631e-9,-0.0014991428844553212,2.0933644184201608e-5,3.532476786791916e-9,-0.0014989745730104767,2.0698804268457708e-5,3.3586078624101303e-9,-0.0014986888360896111,2.0380406021878866e-5,3.1231135922833585e-9,-0.0014982686733544998,2.0053717417477414e-5,2.88245886837212e-9,-0.001497737525690711,1.979300837962255e-5,2.692135997911263e-9,-0.001497148017881539,1.9647196210900128e-5,2.588415637713842e-9,-0.0014965613991866607,1.9629093705834248e-5,2.5803785904338805e-9,-0.0014960289411646245,1.971968706434261e-5,2.653283174951249e-9,-0.0014955820412908304,1.9880736800477454e-5,2.778157555940626e-9,-0.0014952309905867504,2.006787897714019e-5,2.9216817011335566e-9,-0.0014949687552116315,2.0239968863611068e-5,3.053154202397362e-9,-0.001494776174475137,2.0364131096063462e-5,3.1481831138080597e-9,-0.0014946265704327824,2.0417849223123522e-5,3.1901577490234746e-9,-0.0014944892845262566,2.038968095963877e-5,3.170735822070018e-9,-0.001494332545660484,2.0279629489477603e-5,3.090127645122555e-9,-0.0014941263545837618,2.009946410020862e-5,2.957370145196969e-9,-0.0014938459444002585,1.9872625600314708e-5,2.7902699955053625e-9,-0.0014934759328347927,1.9632856641228426e-5,2.614335134584265e-9,-0.0014930145655336932,1.9420569813598002e-5,2.4599538294097267e-9,-0.001492476702076429,1.9276431553751654e-5,2.3574741074222654e-9,-0.001491893815555032,1.923270705234934e-5,2.3306640563010123e-9,-0.0014913096645020614,1.930428755097455e-5,2.3900526656468323e-9,-0.0014907716135890666,1.9482318555866433e-5,2.5283426168944e-9,-0.0014903193643921373,1.973316438958572e-5,2.7198781518158167e-9,-0.0014899741448074898,2.0003956799043533e-5,2.9249937542774248e-9,-0.0014897315523588778,2.023395845028581e-5,3.098573729705269e-9,-0.0014895604078392077,2.036929696434408e-5,3.200967785115278e-9,-0.0014894086578894246,2.0377579597678796e-5,3.2087039570247428e-9,-0.0014892158047863976,2.0258385868426954e-5,3.122098731804692e-9,-0.001488929416536435,2.00457625312811e-5,2.9669485121319134e-9,-0.0014885210657221955,1.9800292408669174e-5,2.7885218058526498e-9,-0.0014879957071757151,1.9591794282292342e-5,2.6386436925550972e-9,-0.0014873899746012964,1.9478359809753334e-5,2.5601312681883347e-9,-0.0014867596618360918,1.949011570768919e-5,2.5748323704033555e-9,-0.0014861620498762876,1.96239922223134e-5,2.6799132147527057e-9,-0.0014856407320978139,1.9849868774778618e-5,2.8525944425785092e-9,-0.0014852179082245765,2.0123138972227992e-5,3.0595746869390322e-9,-0.001484894404555705,2.0397436089605455e-5,3.266468246613373e-9,-0.0014846544662120268,2.063358248057847e-5,3.444366312054756e-9,-0.0014844719149976677,2.080401172999627e-5,3.573026893968126e-9,-0.0014843155256631664,2.089389600951698e-5,3.6416569247405195e-9,-0.0014841529717873015,2.0900677734307805e-5,3.6485643076621275e-9,-0.0014839536957402732,2.083324538196875e-5,3.6005774495059056e-9,-0.0014836914694317035,2.0711220588510544e-5,3.5125354304605184e-9,-0.0014833473561297718,2.0564086382282243e-5,3.406608295349423e-9,-0.0014829133688975399,2.0429297886048457e-5,3.3108019367196984e-9,-0.0014823963710327067,2.0348185310062236e-5,3.25579730356668E-09,-0.0014818207428450856,2.0358734524199104e-5,3.269510016130022e-9,-0.0014812274772494347,2.048563738802864e-5,3.369725367338494e-9,-0.0014806675693328044,2.0730221397913308e-5,3.556767697544755e-9,-0.0014801896123771137,2.106481501301274e-5,3.809538836492915e-9,-0.0014798249253679303,2.143590416769047e-5,4.088059593597637e-9,-0.0014795761455542354,2.177709692752412e-5,4.3431788306475135e-9,-0.0014794146511569793,2.202796158292254e-5,4.530508461441201e-9,-0.0014792883061481331,2.21516328538685e-5,4.623353141774396e-9,-0.0014791364524373138,2.2144870224967428e-5,4.620002061129199e-9,-0.001478906684187595,2.203791530288745e-5,4.543444647931511e-9,-0.0014785683235115793,2.1885258092804413e-5,4.434360357647662e-9,-0.0014781193401062422,2.1750689691606835e-5,4.339933827235743e-9,-0.0014775854795386373,2.169092982823376e-5,4.3017291032046366e-9,-0.001477012299802205,2.1742145708306606e-5,4.345842348530162e-9,-0.0014764526498468376,2.191281179061359e-5,4.477843345187745e-9,-0.0014759534363243591,2.2184454181331846e-5,4.683549499194312e-9,-0.0014755455960484022,2.2519217855883682e-5,4.93475027814799e-9,-0.0014752396898019221,2.2870962823821085e-5,5.1974073013490225e-9,-0.0014750271342094889,2.3195958122338928e-5,5.439457561441334e-9,-0.0014748851544931095,2.3460421517391652e-5,5.636259530417908e-9,-0.0014747829673421675,2.3644120169039524e-5,5.773169265596725e-9,-0.001474687320693333,2.374080291527646e-5,5.845840169919798e-9,-0.0014745666070528286,2.3756880234768512e-5,5.859274017653767e-9,-0.0014743937130802754,2.370958754850038e-5,5.826487086509059e-9,-0.0014741482569230124,2.3625217663658505e-5,5.767179828898929e-9,-0.001473818894785108,2.353730629244631e-5,5.7063097259063755e-9,-0.0014734060778071696,2.3484074946004946e-5,5.672082995091509e-9,-0.001472924981874492,2.3504008874457454e-5,5.692603170476783e-9,-0.0014724072644037177,2.3628534088270373e-5,5.790480507708103e-9,-0.0014718991918354172,2.387197597384268e-5,5.975569281186334e-9,-0.0014714535304005726,2.422153315886059e-5,6.2378093646216116e-9,-0.0014711147480171334,2.463284924493281e-5,6.5441791770475725e-9,-0.0014709018005976526,2.5037149761910478e-5,6.844044438239558e-9,-0.0014707971735682401,2.5361087416693702e-5,7.08371765685339e-9,-0.0014707499231823534,2.5551998946229314e-5,7.224937628064112e-9,-0.0014706928556039132,2.559617122586235e-5,7.2582251778159335e-9,-0.0014705654035565266,2.5521412187611647e-5,7.204692681405604e-9,-0.0014703314954858874,2.5384704814681434e-5,7.106814374546921e-9,-0.001469986538679709,2.5252782134341083e-5,7.013936096625625e-9,-0.0014695540981764408,2.5183955143550453e-5,6.968766442288963e-9,-0.0014690762900327096,2.5215950258180403e-5,6.998456432120111e-9,-0.0014686020708823385,2.5360870206104967e-5,7.1110940673169154e-9,-0.001468176386598783,2.5606318665205407e-5,7.296811789583651e-9,-0.001467831922902369,2.592100301791191e-5,7.532134484148677e-9,-0.0014675843884544473,2.6263002803544234e-5,7.786145194716698e-9,-0.0014674316308986469,2.6588795756606222e-5,8.027060457500164e-9,-0.0014673561469447757,2.6861167542429433e-5,8.22790296065784e-9,-0.001467329858105644,2.7054651629686617e-5,8.370365121482301e-9,-0.0014673197245071011,2.7158013293985568e-5,8.446566196624374e-9,-0.0014672929285562525,2.717410966689769e-5,8.458950180331899e-9,-0.0014672208834997042,2.7118011201820044e-5,8.4189307986924e-9,-0.0014670820001531884,2.7014370775278294e-5,8.34495143072538e-9,-0.0014668636033767842,2.6894642929169563e-5,8.260369284515231e-9,-0.0014665634811135814,2.6794222102966245e-5,8.19123024785904e-9,-0.0014661914098972825,2.674909228562432e-5,8.163696466874626e-9,-0.001465770520724381,2.679114846664634e-5,8.200590836488431e-9,-0.001465337400999473,2.6941364730020337e-5,8.316505230393117e-9,-0.0014649388274165344,2.720105595585084e-5,8.511638713086152e-9,-0.0014646228477321868,2.7543744071366404e-5,8.766111014759959e-9,-0.0014644237187200332,2.791300341092992e-5,9.03854416039646e-9,-0.001464344966501293,2.8232690622237343e-5,9.273507511061049e-9,-0.00146435037296069,2.8431059296295023e-5,9.418980704214775e-9,-0.0014643722903750673,2.8469546292426055e-5,9.447272055057291e-9,-0.0014643365365555757,2.835968319109381e-5,9.367378735882624e-9,-0.0014641906956874835,2.8157374663821298e-5,9.220801767421116e-9,-0.0014639203699168175,2.793907130398366e-5,9.063972153156974e-9,-0.001463547743641747,2.777469392086682e-5,8.94819704622287e-9,-0.0014631181589848093,2.770971394278009e-5,8.906400483072525e-9,-0.0014626840013922983,2.7759615661242276e-5,8.949152904876544e-9,-0.0014622919778576426,2.7913376841285792e-5,9.067487925009645e-9,-0.0014619755187329977,2.8141209895819113e-5,9.238874894232356e-9,-0.0014617515941158011,2.840319839203045e-5,9.43374255358404e-9,-0.0014616206414562979,2.8657228590944903e-5,9.621316724398479e-9,-0.0014615686117483452,2.88656511750599e-5,9.77438646312151e-9,-0.0014615705063021332,2.9000359578134314e-5,9.872855466969257e-9,-0.0014615948598680729,2.9046009835060456e-5,9.905967029354836e-9,-0.001461608579480747,2.900124632155569e-5,9.873148682283592e-9,-0.0014615815016667387,2.8877991973552452e-5,9.783504838835818e-9,-0.001461490094774729,2.86991569091944e-5,9.65415693656674e-9,-0.0014613200429391873,2.8495379357004293e-5,9.507823393054517e-9,-0.0014610677949529376,2.8301325099769305e-5,9.370010304543687e-9,-0.0014607412749224225,2.8151769243240655e-5,9.266016170060544e-9,-0.001460359934266054,2.807741831222614e-5,9.217802419101563e-9,-0.001459954104262802,2.810012125881796e-5,9.240548810429125e-9,-0.0014595629027557774,2.8227079611997363e-5,9.338632920695437e-9,-0.001459229207373408,2.8444570378339046e-5,9.501348366973721e-9,-0.0014589903312328463,2.8713478214577256e-5,9.699906185659169e-9,-0.0014588646330113623,2.8970928160528702e-5,9.888704607981145e-9,-0.0014588380390138703,2.9143000527045176e-5,1.0014441084658272e-8,-0.0014588592510678298,2.916941323267889e-5,1.0033827086917958e-8,-0.0014588523821274818,2.9030953044343186e-5,9.933409035109415e-9,-0.0014587456644553276,2.8762477106263568e-5,9.739062259576716e-9,-0.001458501091057045,2.844024437257861e-5,9.506799999855063e-9,-0.001458127143420008,2.8150315430128008e-5,9.299622484807696e-9,-0.001457669435461303,2.7957472722960843e-5,9.164649386359438e-9,-0.0014571891196582215,2.788982620398424e-5,9.12181556433836e-9,-0.001456742655817562,2.7940470402478702e-5,9.1652351867303225E-09,-0.0014563700347164715,2.807848674258035e-5,9.271524962474886e-9,-0.0014560912588836175,2.826144010513699e-5,9.409190716108027e-9,-0.0014559078903742333,2.8445360201978687e-5,9.546033498517481e-9,-0.0014558067229891146,2.859145029300421e-5,9.65399985693406e-9,-0.0014557639343839687,2.867025540336573e-5,9.712068997365372e-9,-0.0014557492065120391,2.8664138594720785e-5,9.707890097359682e-9,-0.0014557298001960863,2.8568493551007577e-5,9.638560286519974e-9,-0.0014556745936851589,2.839177608483774e-5,9.510625422205857e-9,-0.0014555579370875656,2.815423714782051e-5,9.339183329667601e-9,-0.0014553629537277198,2.788526924195518e-5,9.14595894628804e-9,-0.0014550838573302906,2.7619586166606147e-5,8.95646433151999e-9,-0.0014547270310782067,2.7392671032165182e-5,8.796565507284847e-9,-0.0014543107698863327,2.7235881381529104e-5,8.688803061502544e-9,-0.0014538636547068316,2.7171559156514596e-5,8.648806078255112e-9,-0.0014534215710303232,2.7208440099601352e-5,8.68207399305285e-9,-0.001453023162629078,2.7337595874378007e-5,8.781285876904159e-9,-0.0014527031545351094,2.7529636906441165e-5,8.924571639210088e-9,-0.0014524833008458392,2.7735059993107925e-5,9.075970709988018e-9,-0.0014523621957538728,2.7890571544417234e-5,9.19001842577633e-9,-0.0014523077282724134,2.793379091660291e-5,9.22219677030714e-9,-0.0014522585937687897,2.7825223830983982e-5,9.144582317840528e-9,-0.0014521403795198652,2.7569149189017554e-5,8.960821255109384e-9,-0.001451893505617349,2.7219493141957345e-5,8.71038541518176e-9,-0.0014514989868257015,2.6862149989671336e-5,8.455773632611902e-9,-0.0014509858377754307,2.6581283086955036e-5,8.257991564297597e-9,-0.0014504161415827162,2.642918854125528e-5,8.154588223766253e-9,-0.0014498591074915373,2.6414918608475404e-5,8.151437565096828e-9,-0.0014493694267968629,2.6511849721997745e-5,8.228438049517682e-9,-0.001448977429522189,2.667403387196817e-5,8.351639483937653e-9,-0.0014486894408670674,2.6851542282472955e-5,8.484552463610772e-9,-0.0014484932417684118,2.700055872143433e-5,8.595494996252945e-9,-0.0014483645278005612,2.7088384874182358e-5,8.661115546099852e-9,-0.0014482724252906584,2.709519725146361e-5,8.667505390416874e-9,-0.0014481837922433506,2.7014246607076915e-5,8.610209915657879e-9,-0.0014480667630384213,2.6851367625677863e-5,8.493819386236972e-9,-0.0014478939985973695,2.6623968239600285e-5,8.331252341426477e-9,-0.0014476458307236476,2.635924813759418e-5,8.142498231074953e-9,-0.00144731311061095,2.6091231865376743e-5,7.952456649511876e-9,-0.0014468992107673786,2.5856444834127285e-5,7.787722099695875e-9,-0.0014464205463444633,2.5688537660867144e-5,7.672567457310853e-9,-0.0014459051593164764,2.5612502082256553e-5,7.624669465502379e-9,-0.0014453891705153014,2.5639343311066898e-5,7.651283894303304e-9,-0.0014449112632642608,2.5762226244715e-5,7.746636370364774e-9,-0.0014445057152640856,2.595501245227754e-5,7.891145026699935e-9,-0.0014441946694093064,2.6173960497131583e-5,8.052917461887092e-9,-0.0014439806475695987,2.636349963132186e-5,8.192048807278225e-9,-0.0014438411873451745,2.646690890427581e-5,8.268250609640819e-9,-0.0014437286296687954,2.6441511003512633e-5,8.251567637578792e-9,-0.001443578444853297,2.6275165731848128e-5,8.1339948899965e-9,-0.0014433273202660133,2.5997083928831833e-5,7.937096006765073e-9,-0.001442936409115405,2.567444219779277e-5,7.709508223593939e-9,-0.0014424086701659907,2.5391506100637698e-5,7.511889392046065e-9,-0.0014417892862947695,2.5219227646515815e-5,7.3950023164529674e-9,-0.001441147821285167,2.5191187270965408e-5,7.382424698161206e-9,-0.0014405525671188652,2.5297654232244746e-5,7.46642211059057e-9,-0.0014400506984845914,2.549697136888099e-5,7.616367322101587e-9,-0.0014396609875323325,2.573422047511667e-5,7.792362299919142e-9,-0.0014393770763216152,2.595731091946943e-5,7.956884889193762e-9,-0.0014391755390315833,2.6126299063856226e-5,8.081435414644157e-9,-0.0014390240648945822,2.621661961154909e-5,8.14872862017226e-9,-0.0014388876944924675,2.6218749094750767e-5,8.152319004850451e-9,-0.0014387330155882449,2.6136521805769236e-5,8.095315097039274e-9,-0.0014385310964584244,2.5985249879172986e-5,7.98902323659588e-9,-0.0014382599562942464,2.578984727441783e-5,7.851630723953415e-9,-0.001437907000473791,2.558258430097201e-5,7.706602007982529e-9,-0.0014374713475980292,2.539984818095332e-5,7.580298299298504e-9,-0.0014369654370357835,2.5277430919184726E-05,7.498481675769508e-9,-0.0014364149450387434,2.524445155724815e-5,7.481837634246073e-9,-0.0014358560907401488,2.531680732424275e-5,7.541239382042651e-9,-0.0014353299421923447,2.549174348391302e-5,7.67395063074306e-9,-0.0014348742608147498,2.5745447771436074e-5,7.862124322155557e-9,-0.0014345144552345818,2.6035180886781052e-5,8.074600559849243e-9,-0.0014342558619612528,2.6306381027453562e-5,8.272200047331242e-9,-0.001434079589311781,2.6503932782313694e-5,8.415841468953633e-9,-0.0014339437223416472,2.658569469617018e-5,8.476099349229682e-9,-0.0014337909162949274,2.653533090809111e-5,8.442148816768944e-9,-0.0014335620776601706,2.6370518693983798e-5,8.32738512813637e-9,-0.0014332136074441035,2.614232716045764e-5,8.16878953155742e-9,-0.0014327328436069065,2.592319956427502e-5,8.01823403658462e-9,-0.0014321447131647473,2.5785451237951414e-5,7.927095900408931e-9,-0.0014315049081303302,2.5778022969174607e-5,7.92972291182139e-9,-0.001430881462440153,2.591187567232032e-5,8.0331743458699e-9,-0.0014303331772278684,2.616035797685171e-5,8.217711692267238e-9,-0.0014298944934438224,2.6472481447071226e-5,8.446469961108673e-9,-0.0014295714210435305,2.6790920056085873e-5,8.67839265732808e-9,-0.0014293466416022695,2.706669905365202e-5,8.878682424407924e-9,-0.0014291886521796292,2.726698482237647e-5,9.024249768378522e-9,-0.0014290605250002484,2.7376714200605378e-5,9.104750656058354e-9,-0.0014289262535661926,2.7396668664601868e-5,9.121125674470142e-9,-0.0014287546376585928,2.734037378186705e-5,9.083361209742851e-9,-0.0014285215854872378,2.7231132652078738e-5,9.008387004102195e-9,-0.0014282118094740023,2.7099446056366132e-5,8.91824477219024e-9,-0.0014278205169719102,2.6980369162120895e-5,8.838165817857077e-9,-0.0014273551041353886,2.6910052790540644e-5,8.794014126806641e-9,-0.001426836217410468,2.692081607168585e-5,8.808668492982802e-9,-0.0014262969989791532,2.703467650249471e-5,8.897360695655925e-9,-0.0014257791653392638,2.7256366225002294e-5,9.062761040100194e-9,-0.0014253252294257476,2.7568169951920956e-5,9.291482753990074e-9,-0.0014249678412150235,2.7929586139618507e-5,9.554082763102208e-9,-0.001424719247272349,2.8283922152095817e-5,9.8099633515569e-9,-0.0014245649540888968,2.857138997614607e-5,1.0016784431585915e-8,-0.001424464819701088,2.874523105273305e-5,1.0141889729331605e-8,-0.0014243621807249333,2.8785614912595313e-5,1.0172034668321106e-8,-0.001424198594399113,2.8706550061364885e-5,1.0118076747905602e-8,-0.0014239298298215845,2.855338333973738e-5,1.0012952173362216e-8,-0.0014235384273948743,2.8391359153604704e-5,9.903332600293055e-9,-0.001423039068963574,2.8288237213866135e-5,9.837163726172813e-9,-0.0014224748046457894,2.8295862255426144e-5,9.850620457112531e-9,-0.0014219048911750486,2.8436423102220665e-5,9.95855573897215e-9,-0.0014213881167722824,2.8698019217145672e-5,1.0151643259449534e-8,-0.001420967450066756,2.9040746996965335e-5,1.0400951762124473e-8,-0.0014206611416994707,2.941022918094345e-5,1.066766982712532e-8,-0.001420462210050991,2.9752840746124096e-5,1.0913884054961945e-8,-0.0014203445464611544,3.0027360180390388e-5,1.111072374244291e-8,-0.0014202718523974758,3.0210625033603962e-5,1.1242230035220288e-8,-0.0014202059478694213,3.0297793467362173e-5,1.130543514634517e-8,-0.0014201126851082163,3.0299379741317255e-5,1.1308212546961511e-8,-0.001419965354967399,3.023722740125861e-5,1.126641797154726e-8,-0.0014197463754245395,3.0140745523510838e-5,1.1201222166966375e-8,-0.0014194482287997765,3.004374201377961e-5,1.1136832656018542e-8,-0.0014190743137684472,2.9981438465230445e-5,1.1098298258684281e-8,-0.001418639809555389,2.9986901963587264e-5,1.1108885328964141e-8,-0.001418171968272546,3.008617815680982e-5,1.1186579824169502e-8,-0.0014177085861886171,3.0291942135319834e-5,1.133964646008498e-8,-0.001417293059956346,3.05967206924271e-5,1.1562003200599675e-8,-0.0014169650708668305,3.0968510049347896e-5,1.1830355814926381e-8,-0.0014167481369272308,3.135278601208798e-5,1.210581797947972e-8,-0.0014166384270926171,3.168371673086619e-5,1.2341922339142801e-8,-0.001416601011852032,3.1903068064781095e-5,1.2497950944243014e-8,-0.001416577597530908,3.197990561297152e-5,1.2552765821321245e-8,-0.001416504023895075,3.192205189348772e-5,1.2512782170450044e-8,-0.0014163303334027324,3.177388113563488e-5,1.241023118085146e-8,-0.0014160352058320256,3.160197306166359e-5,1.2292773285630224e-8,-0.00141563020412267,3.147525183817631e-5,1.2209223647116733e-8,-0.001415154182806351,3.144686499940079e-5,1.219665427065755e-8,-0.0014146612944608804,3.1542588220823e-5,1.2272337128455885e-8,-0.0014142068212377667,3.17574992652059e-5,1.2431711044918489e-8,-0.0014138345495532411,3.206030619328251e-5,1.2651790954942593e-8,-0.0014135683760217552,3.240316711893786e-5,1.2898338055852669e-8,-0.0014134095167311366,3.273394154711765e-5,1.3134557510283644e-8,-0.0014133391618895421,3.300757270905415e-5,1.3329020931988017e-8,-0.0014133249690354472,3.31939594183018e-5,1.34610409333419e-8,-0.0014133289896605121,3.328119077205221e-5,1.3522794560786908e-8,-0.001413314822460721,3.3274656159752014e-5,1.3518607273504532e-8,-0.0014132527079583823,3.3193518643689525e-5,1.3462443644765452e-8,-0.0014131223461608018,3.3066195373724894e-5,1.3374722960227905e-8,-0.001412913992766144,3.292604615376844e-5,1.3279258055873786e-8,-0.0014126286522506636,3.2807704536436217e-5,1.3200599557144906e-8,-0.0014122779793304208,3.274378481004234e-5,1.3161617579820244e-8,-0.0014118840527596287,3.276134215889836e-5,1.318093997452497e-8,-0.0014114785988180107,3.287744387268909e-5,1.3269863918137662e-8,-0.0014111005438624472,3.309364278437632e-5,1.3428626290622916e-8,-0.0014107903444190032,3.339035361538781e-5,1.3642698341029341e-8,-0.0014105801213301545,3.372401496582465e-5,1.388102605623399e-8,-0.0014104809172316352,3.403140528598448e-5,1.4099169038639324e-8,-0.0014104721889999377,3.4244418459823575e-5,1.4249623837810556e-8,-0.0014105012730983308,3.431313016865975e-5,1.4297897851110098e-8,-0.0014104976530675871,3.4227232153276674e-5,1.4237483279052317e-8,-0.0014103978203613941,3.4023102917727105e-5,1.409478258989675e-8,-0.0014101683041605874,3.37710788967813e-5,1.3920030577394821e-8,-0.0014098152448564095,3.3549879175073367e-5,1.3769043937615413e-8,-0.0014093780596700428,3.342166325020871e-5,1.3685419104499984e-8,-0.0014089135400348065,3.341756238018929e-5,1.3690309226175862e-8,-0.0014084788334548454,3.3535493238112093e-5,1.37811189010826e-8,-0.0014081186845767038,3.374669781848928e-5,1.3936497322555077e-8,-0.0014078585339577186,3.400633332696204e-5,1.4124144409347155e-8,-0.0014077028508541673,3.42645878758073e-5,1.4308805334751806e-8,-0.0014076373664685578,3.4476340111075574e-5,1.4459025629545484e-8,-0.0014076339312917433,3.4608360343685586e-5,1.4552028310657353e-8,-0.0014076568208633863,3.464345854701809e-5,1.457641017245677e-8,-0.001407669277186434,3.458141606859998e-5,1.4532638817739162e-8,-0.0014076391876356137,3.443714237304597e-5,1.4431695615751243e-8,-0.0014075431589499628,3.42369134134312e-5,1.4292440206539112e-8,-0.0014073687088618709,3.401369363319955e-5,1.4138337135936162e-8,-0.0014071148025871514,3.380247774740365e-5,1.3994150056515684e-8,-0.0014067912957618034,3.363619137526845e-5,1.3882976655598566e-8,-0.001406417785833611,3.3542132876375727e-5,1.3823657520053249e-8,-0.0014060220696082155,3.3538605100390865e-5,1.3828389059174037e-8,-0.0014056380007306819,3.363132267047934e-5,1.3900311168766636e-8,-0.0014053019647113963,3.3809476163547754e-5,1.403098639393186e-8,-0.0014050467952829435,3.404235090138576e-5,1.4198316878603361e-8,-0.0014048925106380783,3.427900969237467e-5,1.4366522015636952e-8,-0.0014048352740607154,3.4454830578689884e-5,1.4490717899879615e-8,-0.0014048394576729162,3.450785686877302e-5,1.452817586539771e-8,-0.0014048405652307403,3.4402642110255266e-5,1.4454790297227312e-8,-0.001404764049178016,3.415061768516878e-5,1.4279243287251102e-8,-0.0014045544794032856,3.381223147440442e-5,1.4044512501709342e-8,-0.001404199019517501,3.34753415760048e-5,1.3812662721467575e-8,-0.0014037308928993113,3.322120032523223e-5,1.3640780805957817e-8,-0.0014032126628860826,3.309751484531842e-5,1.3561886833224022e-8,-0.0014027118105852483,3.311012467826726e-5,1.3579138976547671e-8,-0.0014022815504324637,3.3230920394382554e-5,1.3671690150678322e-8,-0.0014019518800177807,3.341272421638346e-5,1.3805518700988216e-8,-0.0014017290980962978,3.360354473780993e-5,1.3943711301648619e-8,-0.0014016000243125806,3.375694744860536e-5,1.4053807349603574e-8,-0.001401537920759662,3.383830386691697e-5,1.4112051071441454e-8,-0.001401508516602354,3.38278961316903e-5,1.4105333153706423e-8,-0.0014014756088146735,3.372177220527613e-5,1.4031568509718768e-8,-0.0014014060660440912,3.353076489929489e-5,1.3898885331730495e-8,-0.0014012739860668733,3.327793091957308e-5,1.3723815329935129e-8,-0.0014010636973225197,3.2994742987017955e-5,1.3528667448275764e-8,-0.0014007713279077503,3.271646976821572e-5,1.3338315101143095e-8,-0.0014004048383781237,3.247734073521475e-5,1.3176767910392181e-8,-0.001399982720160362,3.230609707347399e-5,1.3063963984102755e-8,-0.0013995317115542282,3.222223618554686e-5,1.3013065431940527e-8,-0.0013990837824146862,3.223298100013896e-5,1.3028362806501945e-8,-0.0013986724408224693,3.2330914871978444e-5,1.310378977963939e-8,-0.0013983280897938944,3.249234472603756e-5,1.3222059543851011e-8,-0.0013980719157413676,3.26771022098923e-5,1.3354806377875613e-8,-0.001397908301055983,3.2831582187595467E-05,1.3464847011626819e-8,-0.001397817347062273,3.289747667782527e-5,1.3512189019105797e-8,-0.001397751512132713,3.28277047548693e-5,1.3464871106866769e-8,-0.0013976423203658295,3.260691801970788e-5,1.3312974762696126e-8,-0.0013974208313565252,3.2266892279175194e-5,1.3079220779759064e-8,-0.0013970462170215551,3.188350281420138e-5,1.2816866134850941e-8,-0.001396526429072313,3.15504266134185e-5,1.2591347003175733e-8,-0.0013959162362914407,3.134208482490942e-5,1.2454319312828303e-8,-0.0013952934212709952,3.12876940613365e-5,1.2425488800691024e-8,-0.0013947290248052181,3.1368994960239776e-5,1.2491155941132685e-8,-0.0013942677926455445,3.153656609401135e-5,1.2615901943459306e-8,-0.001393923604268954,3.173094679442987e-5,1.2757639356311874e-8,-0.0013936850245932673,3.189863660685751e-5,1.287894027262053e-8,-0.0013935243292366379,3.20005016684368e-5,1.295286703830315e-8,-0.0013934059148908537,3.2014351751696166e-5,1.2964583482053157e-8,-0.0013932926868055352,3.193431439306784e-5,1.29106853876459e-8,-0.0013931506171936453,3.176890244780789e-5,1.279767711238989e-8,-0.0013929521622677431,3.153852371658084e-5,1.2640170940633758e-8,-0.0013926789463034916,3.1272453315631026e-5,1.2458806214965603e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json new file mode 100644 index 000000000..fb9e3f35a --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":4000,"numberOfSamples":1000,"samples":[-0.0013923237156324762,3.10051313115372e-5,1.227772476593132e-8,-0.0013918913030339685,3.0771749723490945e-5,1.2121506307793586e-8,-0.0013913982265213998,3.060338976954708e-5,1.2011722091998317e-8,-0.0013908707040811456,3.052231698115309e-5,1.1963565646016446e-8,-0.001390341194667023,3.053811122326968e-5,1.198311590315129e-8,-0.0013898437960375297,3.064516965374932e-5,1.206567850949141e-8,-0.0013894089283486013,3.0821985171837794e-5,1.219550046257788e-8,-0.0013890577325521491,3.103246124664618e-5,1.234697235237071e-8,-0.001388796542557306,3.12295787680487e-5,1.2487412403812631e-8,-0.0013886120720738905,3.136210718279558e-5,1.2581786671309725e-8,-0.0013884688947041909,3.1385084006792996e-5,1.2599819994917749e-8,-0.0013883119458332274,3.127360474065753e-5,1.2525244839418013e-8,-0.0013880771300425396,3.103666131759266e-5,1.2365079707027838e-8,-0.0013877108551321243,3.072388276790292e-5,1.2154123117817592e-8,-0.0013871929430152989,3.0416606360292832e-5,1.1948741207200948e-8,-0.001386550391714903,3.0201205713724095e-5,1.1808429582903155e-8,-0.0013858506737383077,3.01357997768827e-5,1.1772803776767341e-8,-0.0013851759104291312,3.0229273883448915e-5,1.1847175892297428e-8,-0.001384592881220668,3.0443874540562336e-5,1.2004550146250928e-8,-0.0013841349373795028,3.0716035009628255e-5,1.2200281016361826e-8,-0.0013838008265632472,3.098058540822912e-5,1.2389009867920565e-8,-0.0013835645353088798,3.118712181259742e-5,1.2536034707260684e-8,-0.0013833877106148682,3.130621279611001e-5,1.2621499602221395e-8,-0.0013832296076505604,3.132862793970199e-5,1.2639667607070031e-8,-0.0013830533398082588,3.12615629520694e-5,1.2596119024238894e-8,-0.0013828292717648978,3.1124447793189026e-5,1.2504739208443173e-8,-0.001382536894290198,3.094526718665489e-5,1.238515875044467e-8,-0.001382166093661862,3.0757242436986546e-5,1.2260502826500002e-8,-0.0013817180828804721,3.059536687843876e-5,1.2155030689028627e-8,-0.0013812057662645032,3.0492356610198686e-5,1.2091316281131741e-8,-0.001380652965115511,3.0473944416237442e-5,1.2086924984252354e-8,-0.0013800918794172976,3.055405387965315e-5,1.2151015510603047e-8,-0.0013795585330693598,3.073089776278415e-5,1.2281664264941277e-8,-0.0013790865545975047,3.098519781713838e-5,1.2464780864846123e-8,-0.0013787002512115332,3.128152698517288e-5,1.2675280274755086e-8,-0.0013784083744284533,3.1573186320784075e-5,1.2880703491497357e-8,-0.0013782000273174174,3.181021399913377e-5,1.3046891803617532e-8,-0.0013780438976636682,3.19495350745652e-5,1.3144947940134445E-08,-0.0013778917807731484,3.1965865743675875e-5,1.3158522917130986e-8,-0.0013776871187557247,3.186125601721507e-5,1.3090054814128084e-8,-0.0013773784345414448,3.167005542915762e-5,1.2963872114938864e-8,-0.0013769355296510653,3.145540027821075e-5,1.2823586040322064e-8,-0.0013763632310821636,3.129451925350386e-5,1.2721957602677264e-8,-0.0013757051938257864,3.12548297658547e-5,1.2704580862237566e-8,-0.0013750325167593762,3.136980980661643e-5,1.2793513871866098e-8,-0.0013744200205683455,3.162705495398507e-5,1.297932656913296e-8,-0.001373921486003332,3.197529339541822e-5,1.3226141868971426e-8,-0.0013735559011152846,3.2345581764334165e-5,1.348632479099502e-8,-0.001373308834962327,3.267443076739067e-5,1.371638565723486e-8,-0.0013731440063741707,3.2918760928589506e-5,1.3887174851188765e-8,-0.0013730169969555664,3.306017025212218e-5,1.3986670884338575e-8,-0.001372885707505598,3.310177282032628e-5,1.4017645484980559e-8,-0.0013727161916267327,3.3062157152929236e-5,1.3993385650784678e-8,-0.0013724849650755444,3.2969528124314865e-5,1.3933613214447525e-8,-0.0013721795043743403,3.2857132549704686e-5,1.3861350571725312e-8,-0.001371798199420233,3.275975393211377e-5,1.3800541749182052e-8,-0.001371350267391638,3.2710546394120883e-5,1.3773879566233536e-8,-0.0013708554660210265,3.273748651144435e-5,1.3800332746004124e-8,-0.0013703429392595617,3.285908614832062e-5,1.3892159705457934e-8,-0.0013698482842253537,3.3079732505826116e-5,1.4051723281032588e-8,-0.0013694081789119867,3.33859216188847e-5,1.4269017354682299e-8,-0.0013690527752354515,3.3745292715916165e-5,1.4521206280880815e-8,-0.0013687973523058758,3.411026251376824e-5,1.4775341685527618e-8,-0.001368635864809167,3.442685430142285e-5,1.4994571911094206e-8,-0.001368539190809793,3.464725058126877e-5,1.5146764379461272e-8,-0.0013684596653155585,3.474271507765218e-5,1.5213225547749854e-8,-0.001368341412275528,3.471292842213015e-5,1.519483961915156e-8,-0.0013681340963783179,3.458864103148684e-5,1.5113572919781048e-8,-0.001367806641243441,3.442624486265195e-5,1.50084742827696e-8,-0.0013673571913396174,3.429481060775766e-5,1.492663952720893e-8,-0.0013668159712882611,3.425816744323766e-5,1.4910976651613327e-8,-0.0013662389537410337,3.4356679623137404e-5,1.4987969233571176e-8,-0.0013656929127156684,3.45948313307106e-5,1.5159539607809455e-8,-0.0013652362239514341,3.493996318255312e-5,1.540252269790559e-8,-0.0013649025854399397,3.533339206451559e-5,1.5676457844807535e-8,-0.001364694017006319,3.5709311516460834e-5,1.5936510012581336e-8,-0.0013645848390629765,3.6013317990182196e-5,1.6146000719145376e-8,-0.001364533006244744,3.6213785847992433e-5,1.6284003030435945e-8,-0.0013644928514191061,3.630413358810897e-5,1.6346724249025713e-8,-0.0013644247321696538,3.629841553527456e-5,1.6344369702902035e-8,-0.0013643001276189908,3.622421100892573e-5,1.6296216699097295e-8,-0.0013641030557909385,3.611585301733881e-5,1.6225972675099123e-8,-0.001363829489218644,3.6009284510185593e-5,1.6158272516967093e-8,-0.0013634861732545276,3.59384398039273e-5,1.6116209694143087e-8,-0.0013630895393642458,3.593237657339973e-5,1.6119355456194334e-8,-0.0013626646638417342,3.601230966247092e-5,1.618170797397962e-8,-0.001362243629102119,3.61880268938273e-5,1.6309266089582144e-8,-0.0013618622841067652,3.64538655276576e-5,1.6497393820657673e-8,-0.0013615544772974737,3.6785502430891855e-5,1.6728827194428735e-8,-0.0013613437161679772,3.713991173468955e-5,1.697386187057922e-8,-0.001361234021080087,3.746108911824493e-5,1.719439828116546e-8,-0.0013612037638524796,3.7692536866159856e-5,1.7352457140518053e-8,-0.001361206847971344,3.779396838960132e-5,1.742144636974678e-8,-0.0013611832374142226,3.7756031020244054e-5,1.7396011201743785e-8,-0.001361076191644119,3.7606086154550635e-5,1.7295762883204998e-8,-0.0013608496577971183,3.7401677631123275e-5,1.716059227166306e-8,-0.0013604990488915285,3.721408821670011e-5,1.7039232838343093e-8,-0.0013600520125571307,3.710835900255645e-5,1.697551683056106e-8,-0.0013595600099726545,3.712640498271043e-5,1.699695432191236e-8,-0.0013590841935409244,3.727760024130748e-5,1.71086275657347e-8,-0.001358679890204125,3.7538440708709115e-5,1.7293378278633092e-8,-0.00135838372132039,3.7860514706880266e-5,1.7517577456580113e-8,-0.0013582064390924846,3.818407848658802e-5,1.7740504047095585e-8,-0.0013581329272131877,3.845318903981301e-5,1.7924558906917483e-8,-0.0013581286541984837,3.862806850028087e-5,1.804345582610699e-8,-0.0013581498661130592,3.869159882723496e-5,1.8086397228283904e-8,-0.0013581539476281528,3.8649261142348775e-5,1.8057850041261867e-8,-0.0013581071226586598,3.8524189345567815e-5,1.7974088393725628e-8,-0.0013579883897526658,3.835008509330396e-5,1.7858356144320932e-8,-0.00135779018044884,3.8164384929534315e-5,1.7736239335068338e-8,-0.001357517027048097,3.800295694389865e-5,1.7632074255281237e-8,-0.0013571835099064594,3.789645286761099e-5,1.7566453802397066e-8,-0.0013568122323385436,3.786770844912354e-5,1.7554432313878906e-8,-0.0013564319146861178,3.792940545542113e-5,1.760394100218013e-8,-0.0013560751230173448,3.808144637277682e-5,1.771409396726125e-8,-0.001355774723096159,3.830809315615486e-5,1.7873437098055103e-8,-0.0013555581129589143,3.85759738967685e-5,1.805883775217439e-8,-0.0013554390847187276,3.883530834118127e-5,1.8236503204011578e-8,-0.001355409076240439,3.9027250633763036e-5,1.836699003058032e-8,-0.0013554321238842734,3.909874292882928e-5,1.8415131641263553e-8,-0.0013554490528045462,3.90218298649933e-5,1.836291168093209e-8,-0.0013553934777036426,3.88088274293409e-5,1.8219570358978306e-8,-0.0013552148739573212,3.8513364752411945e-5,1.8022193158569097e-8,-0.0013548976458011926,3.821394753241361e-5,1.7824422483376295e-8,-0.0013544662886432806,3.7987376502045904e-5,1.767824374087245e-8,-0.001353975167144596,3.788495877740173e-5,1.7617747380746665e-8,-0.0013534897169433626,3.792082265498023e-5,1.765132964873523e-8,-0.0013530679623867672,3.807359000944715e-5,1.776318309780284e-8,-0.0013527479846985185,3.82970266342332e-5,1.7920945154219862e-8,-0.0013525427737545379,3.8534126622979775e-5,1.8085549434599747e-8,-0.0013524413684721215,3.8730475725509086e-5,1.8220348872787433e-8,-0.0013524143580498815,3.8844550459139665e-5,1.829793515757917e-8,-0.0013524218120327396,3.885388259987187e-5,1.830403299861606e-8,-0.0013524218425320289,3.8756778190668846e-5,1.8238389323156565e-8,-0.0013523781464381873,3.857000249417001e-5,1.8113029207340084e-8,-0.0013522652859119853,3.832360437107422e-5,1.7948697828581297e-8,-0.0013520711816035556,3.805446144349454e-5,1.7770522740602527e-8,-0.0013517970474576544,3.7800026057570636e-5,1.760383303417335e-8,-0.0013514555502732262,3.759328234789039e-5,1.7470765883749638e-8,-0.0013510681406707162,3.745922197053802e-5,1.7387859156658665e-8,-0.0013506622145259056,3.741251692416933e-5,1.7364450412879974e-8,-0.0013502682953014952,3.7455843878886433e-5,1.7401577299135237e-8,-0.0013499170098815133,3.757843888576176e-5,1.749114206947162e-8,-0.0013496352319221148,3.775487577483726e-5,1.7615323797154796e-8,-0.001349440649488639,3.794495617766193e-5,1.7746750386563e-8,-0.0013493347424008647,3.809671819615431e-5,1.7850659872577422e-8,-0.001349295890582923,3.8155046902679206e-5,1.7890635669466993e-8,-0.0013492766959825838,3.807708327935155e-5,1.783874654599152e-8,-0.0013492110735612106,3.785133903622449e-5,1.768815260529381e-8,-0.001349033855976422,3.751108479626499e-5,1.7461969909133265e-8,-0.0013487069795288752,3.71303580506857e-5,1.7210535401503925e-8,-0.0013482379377772538,3.67993136705882e-5,1.6994726215196717e-8,-0.001347678208637462,3.659042766946213e-5,1.6863046213677397e-8,-0.0013471024913643088,3.6534216931232214e-5,1.6835204236635903e-8,-0.0013465817610538201,3.661531138061667e-5,1.6899639174625656e-8,-0.0013461637307948591,3.67855921967629e-5,1.702274689456107e-8,-0.0013458659040266978,3.698362593147122e-5,1.716236688366139e-8,-0.0013456786096961092,3.715150481672573e-5,1.7279353443021854e-8,-0.0013455729607305563,3.7245547989349e-5,1.7344764650321256e-8,-0.0013455098437546319,3.724113849988471e-5,1.7342896275356996e-8,-0.0013454479816408654,3.713333537401668e-5,1.7271384802952297e-8,-0.0013453504339775678,3.693472237791048e-5,1.7139497446621565e-8,-0.0013451893773290563,3.66714125531848e-5,1.69653115025737e-8,-0.001344949053305138,3.6377906041960216e-5,1.677225728879621e-8,-0.0013446268270830342,3.6091487557028635e-5,1.658542561013439e-8,-0.0013442324429496473,3.584683872566402e-5,1.642801203779135e-8,-0.0013437858000863968,3.567151610583387e-5,1.6318286339007397e-8,-0.0013433138090793446,3.5582718952246464e-5,1.6267381969080993e-8,-0.0013428468552322856,3.5585336135370534e-5,1.6277959343087233e-8,-0.0013424151246411572,3.567102736278635e-5,1.6343650045473796e-8,-0.0013420448217986622,3.581815905326798e-5,1.6449191850671144e-8,-0.0013417540843769415,3.5992621037087415e-5,1.6571231526067074e-8,-0.0013415482762467888,3.6150103914661236e-5,1.6680073457991738e-8,-0.0013414149103668283,3.624123041516313e-5,1.6743183400191018e-8,-0.0013413198868642417,3.622112481074397e-5,1.6731446982117347e-8,-0.00134120845189209,3.606369069563323e-5,1.662842184473864e-8,-0.0013410151654745213,3.577732086480887e-5,1.644054815603201e-8,-0.0013406846000409867,3.5413460407537786e-5,1.6202722853245097e-8,-0.0013401964609990825,3.505743910760731e-5,1.597215167212452e-8,-0.001339580425708274,3.479926151774641e-5,1.5808809507200667e-8,-0.0013389081886428587,3.4697739505285814e-5,1.5751417893888703e-8,-0.0013382653066040724,3.475913717423584e-5,1.5803205836748927e-8,-0.0013377198411129057,3.494136132320177e-5,1.593492656261746e-8,-0.0013373043650111932,3.517656334298736e-5,1.610030358752367e-8,-0.001337015439682562,3.5396327466275055e-5,1.6253166407767607e-8,-0.0013368239990238354,3.5548502293726705e-5,1.6358821610884963e-8,-0.0013366882809558854,3.560374914900627e-5,1.639832805964985e-8,-0.001336564467218173,3.55549452941308e-5,1.636783817572624e-8,-0.001336413776905145,3.541320348266067e-5,1.627564290331889e-8,-0.0013362066349266496,3.520293709170862e-5,1.6138666700184393e-8,-0.0013359249232274644,3.4956909941254224e-5,1.5979096337218204e-8,-0.001335562924155841,3.4711420854670354e-5,1.582122151313896e-8,-0.0013351271377057652,3.4501629448674695e-5,1.568840971408109e-8,-0.0013346349529169633,3.435711455278746e-5,1.5600199028356044e-8,-0.0013341121333342526,3.429797828590833e-5,1.5569686455152157e-8,-0.0013335892705868344,3.433199575848479e-5,1.5601580165570786e-8,-0.0013330975858291425,3.4453164621146024e-5,1.5691228226897585e-8,-0.0013326644706178011,3.464175000353744e-5,1.5824749599259128e-8,-0.0013323090899715643,3.4865868704546576e-5,1.5980301002253026e-8,-0.001332038338966892,3.508467362609938e-5,1.6130447896255385e-8,-0.0013318434113794785,3.525330077002587e-5,1.6245627748951825e-8,-0.0013316975322695253,3.5330051294305984e-5,1.629891139049964e-8,-0.001331556286785722,3.528619312938393e-5,1.6272293810409786e-8,-0.0013313628892067757,3.5117465072944155e-5,1.6163989779264318e-8,-0.0013310606240185723,3.485372509921916e-5,1.5994525193249938e-8,-0.001330612092239529,3.4560074860567006e-5,1.5807325007709106e-8,-0.0013300188819388664,3.432251695865668e-5,1.5659203035008636e-8,-0.0013293294672254824,3.4218415257834896e-5,1.5600856484188996e-8,-0.0013286258106659328,3.4284781738908746e-5,1.565595284409048e-8,-0.0013279927272366466,3.45034557497139e-5,1.5811466092247673e-8,-0.001327487245815521,3.481218305757908e-5,1.6025241776050835e-8,-0.0013271243297834456,3.5132573390047304e-5,1.6244759544611692e-8,-0.0013268819281744182,3.539726971412401e-5,1.6425301589944376e-8,-0.0013267165573191055,3.556482846968116e-5,1.6539830337867083e-8,-0.0013265791200544272,3.5621827657685704e-5,1.65802341767557e-8,-0.0013264257556151145,3.5577571686315266e-5,1.6553560503722946e-8,-0.0013262233226004878,3.5456646993180176e-5,1.6476832678516347e-8,-0.0013259512363842734,3.529220284957108e-5,1.637245418374682e-8,-0.001325601512184336,3.512067149730725e-5,1.626470172512635e-8,-0.0013251780734556981,3.497753493359976e-5,1.6177001160356565e-8,-0.0013246955832461917,3.4893601735033355e-5,1.6129548566876927e-8,-0.0013241776457557696,3.48914999010468e-5,1.6137021291032074e-8,-0.001323654076904617,3.4982458503977466e-5,1.6206426975212878e-8,-0.001323157041794967,3.5163901163299414e-5,1.633548781930137e-8,-0.0013227162371304468,3.5418581049974166e-5,1.651211397605036e-8,-0.001322353687199993,3.571581068946272e-5,1.6715367990939248e-8,-0.0013220789387146789,3.601504810064792e-5,1.6918061706656873e-8,-0.0013218855424575772,3.627176280866538e-5,1.7090842854582353e-8,-0.0013217496703317407,3.644508967537851e-5,1.720733490398808e-8,-0.0013216315923340778,3.65064979819164e-5,1.7249749168249524e-8,-0.0013214807524120568,3.644842841848515e-5,1.7214291107647377e-8,-0.0013212451222116156,3.6291038759722376e-5,1.711523751546295e-8,-0.0013208846495029996,3.60839095678969e-5,1.6985751198887913e-8,-0.0013203863550454039,3.5898854230369885e-5,1.6873006904681262e-8,-0.0013197752519399667,3.581166273538234e-5,1.682623169287687e-8,-0.0013191132255276836,3.587626651540886e-5,1.6879911863534467e-8,-0.0013184815790603076,3.610241659999537e-5,1.7039381967031404e-8,-0.0013179528033887597,3.645020189165614e-5,1.7277474450637978e-8,-0.0013175658344386403,3.684610326885073e-5,1.7545256584706124e-8,-0.0013173174371027003,3.721139594219093e-5,1.7790800848516823e-8,-0.0013171711591591722,3.7487162393554715e-5,1.797564920289059e-8,-0.0013170751083556422,3.764583818573417e-5,1.8082333520008842e-8,-0.0013169783809209286,3.768958704883004e-5,1.8113134460390254e-8,-0.001316841058972772,3.764169488899078e-5,1.8084193168326844e-8,-0.001316637900558923,3.7536910324560003e-5,1.8018963620713753e-8,-0.0013163581227781179,3.74137736701684e-5,1.7943079177386814e-8,-0.0013160036253867771,3.730942928907114e-5,1.7880963442603383e-8,-0.0013155869869080489,3.725613444561233e-5,1.7853614375631473e-8,-0.0013151295414577234,3.7278505354125304e-5,1.787686235519351e-8,-0.0013146592408699255,3.7390914042800114e-5,1.7959684433815758e-8,-0.0013142077768859126,3.759497729467439e-5,1.8102557862085905e-8,-0.0013138065061219567,3.787768395385184e-5,1.829626511989185e-8,-0.0013134811566555547,3.821118959139425e-5,1.852186865762894e-8,-0.0013132460042088404,3.855535190871637e-5,1.8752556581883928e-8,-0.0013130988888896927,3.886358760935178e-5,1.895768052314085e-8,-0.0013130187880983333,3.9091668685304416e-5,1.9108648012779857e-8,-0.0013129673945528086,3.920788927157972e-5,1.9185567048502283e-8,-0.001312895240496861,3.920217618512819e-5,1.918302681873874e-8,-0.001312751730863596,3.9091588709663886e-5,1.911338071545348e-8,-0.0013124973851131767,3.892009752658912e-5,1.9006243630838438e-8,-0.0013121156803837925,3.875132474201483e-5,1.8903462645629538e-8,-0.0013116210944716046,3.865427657691962e-5,1.884969011796569e-8,-0.0013110596023093825,3.868436788208665e-5,1.8880112079492577e-8,-0.0013104989534392041,3.8865074759319735e-5,1.9008779400316116e-8,-0.0013100096397849926,3.917783531577995e-5,1.9222392671536106e-8,-0.001309642829716195,3.9566441267412706e-5,1.9483464693369486e-8,-0.0013094148936341004,3.995569860122959e-5,1.974262974906959e-8,-0.0013093055437344233,4.027611457180882e-5,1.9954738594955732e-8,-0.001309269039156997,4.048329051082387e-5,2.0091415425642147e-8,-0.0013092512762208149,4.0565121305456764e-5,2.0145608286767512e-8,-0.001309204630257768,4.053753924890765e-5,2.012862157893427e-8,-0.0013090962818779034,4.043433842048082e-5,2.0063277178960123e-8,-0.0013089102465701447,4.029664197237238e-5,1.997689758602726e-8,-0.0013086455823332675,4.0164989376255385e-5,1.9896096938048397e-8,-0.0013083132488531785,4.0074480065967925e-5,1.984365052124649e-8,-0.0013079330725531747,4.005204604799757e-5,1.9836785608003348e-8,-0.0013075312073712847,4.011466197911539e-5,1.9886069633644747e-8,-0.001307137746835643,4.026767679567208e-5,1.9994358344677895e-8,-0.0013067837953618638,4.0503094151805196e-5,2.01557240211866e-8,-0.001306497350497541,4.079836018355392e-5,2.0354765247593485e-8,-0.0013062978171497592,4.111688713507512e-5,2.0567103458832157e-8,-0.0013061898867567608,4.141184316071489e-5,2.076202115095573e-8,-0.0013061586859034154,4.163420723263055e-5,2.0907824211338083e-8,-0.001306168888940125,4.174442656977121e-5,2.097944515467198e-8,-0.0013061699709006594,4.1724685296821706e-5,2.0966324787464215e-8,-0.0013061076049721034,4.1587191985985025e-5,2.0877595932876798e-8,-0.0013059383156452651,4.137443165518275e-5,2.0741958445759947e-8,-0.0013056425938951044,4.115010375057371e-5,2.060146632532868e-8,-0.0013052319085176942,4.098302152604378e-5,2.0500810520890916e-8,-0.001304747148248314,4.092874780265062e-5,2.0475326047336553e-8,-0.0013042487662768554,4.101434730128175e-5,2.0541288681716853e-8,-0.0013038012226081626,4.1230688242288156e-5,2.0691321547541416e-8,-0.0013034559571685768,4.153480564579156e-5,2.0896370294196396e-8,-0.0013032379646765557,4.186207205593781e-5,2.111390047210881e-8,-0.0013031404096450596,4.214456168589532e-5,2.1299885763046148e-8,-0.0013031290193728036,4.232935992827865e-5,2.1420571741681682e-8,-0.0013031540596875038,4.23905340975399e-5,2.1460031357444974e-8,-0.0013031647722243158,4.233156537247573e-5,2.1421513055924925e-8,-0.0013031210288061141,4.217942322107834e-5,2.132339132411696e-8,-0.0013029993698451085,4.19743987627646e-5,2.1192421768565933e-8,-0.0013027936105723457,4.175999540557228e-5,2.1057114924379603e-8,-0.0013025120277159838,4.157542941681899e-5,2.094288448231488e-8,-0.0013021733414850117,4.145125605159004e-5,2.0869268627645957e-8,-0.001301802931785606,4.1407329810052036e-5,2.08486684580033e-8,-0.0013014297605223135,4.1451908374797514e-5,2.0885812894513818e-8,-0.001301083724057496,4.158098532303902e-5,2.097737756976615e-8,-0.0013007927456693646,4.177756479690925e-5,2.1111607157953057e-8,-0.0013005788777021498,4.201134797256275e-5,2.126826146359011e-8,-0.0013004531008736547,4.224008178027535e-5,2.1419659516259312e-8,-0.0013004095063849311,4.241435176037529e-5,2.1533904163364884e-8,-0.001300421059288809,4.248719684661846e-5,2.1581120022324038e-8,-0.0013004404355749176,4.2427837091928494e-5,2.154224223145945e-8,-0.0013004089398097013,4.223528221728633e-5,2.1417667998620045e-8,-0.001300273032166463,4.194483810430357e-5,2.1231287584532605e-8,-0.0013000028044365167,4.162178844603964e-5,2.1026176296912758e-8,-0.0012996038559836165,4.13426408192214e-5,2.0852193780685487e-8,-0.0012991166051237216,4.117141562699113e-5,2.075042537733095e-8,-0.0012986036072820868,4.11409724530234e-5,2.0741091404972655e-8,-0.00129813093698426,4.1245817779201306e-5,2.0819172199719124e-8,-0.0012977508063343123,4.144686388868798e-5,2.095795336418839e-8,-0.001297490230837804,4.168441992169005e-5,2.1117875653405696e-8,-0.0012973474395914163,4.1894427134593377e-5,2.1257279803455193e-8,-0.001297295439153459,4.2023506126082147e-5,2.1342116234441085e-8,-0.001297290782074011,4.2039616230905444e-5,2.135260920238544e-8,-0.0012972848326498105,4.193654440887813e-5,2.1285844007437435e-8,-0.0012972345579685953,4.173200901824314e-5,2.1154255926592056e-8,-0.0012971103085002236,4.146082617494708e-5,2.0981029477300475e-8,-0.0012968992859630204,4.116578087591e-5,2.0794135694006106e-8,-0.0012966049398672192,4.0888917956883526e-5,2.062073980233298e-8,-0.0012962436295018886,4.066503581169255e-5,2.048307865442981e-8,-0.0012958401889284622,4.051793533458231e-5,2.039611146731544e-8,-0.0012954236654983476,4.045897416475759e-5,2.036662737785466e-8,-0.001295023782419015,4.0486965044612695e-5,2.039320583348045e-8,-0.0012946679941183582,4.058855472756083e-5,2.04665171281949e-8,-0.001294378612670228,4.0738730472340536e-5,2.056977240662803e-8,-0.0012941693814056939,4.0901748941956324e-5,2.0679500965812705e-8,-0.0012940411451917645,4.1033526442706687e-5,2.0767257575044023e-8,-0.0012939771911233996,4.108715604463087e-5,2.0803239961642293e-8,-0.0012939403977219072,4.102298074380838e-5,2.0762689854466084e-8,-0.0012938758566673656,4.082263405184535e-5,2.0634736809638925e-8,-0.0012937224662835883,4.050242606522025e-5,2.04308134609819e-8,-0.0012934330065076513,4.0117530900919203e-5,2.0187204767311665e-8,-0.00129299496709262,3.974958987689844e-5,1.995693470396842e-8,-0.0012924399284722028,3.947942732467301e-5,1.97920270271869e-8,-0.0012918341252307118,3.935776650460108e-5,1.9724509449887175e-8,-0.0012912547182092019,3.938930857514804e-5,1.97562193674393e-8,-0.001290764690673244,3.9536318616132313E-05,1.9861433777957795e-8,-0.0012903973760540492,3.973598386964465e-5,1.999850762256767e-8,-0.001290153512484858,3.992107605315687e-5,2.0123564778314824e-8,-0.0012900074223779303,4.003630507822636e-5,2.0201177921784495e-8,-0.0012899173653183767,4.0047651738485965e-5,2.0210256251888748e-8,-0.001289836338458807,3.9945200597234635e-5,2.0145554957262593e-8,-0.0012897212998023743,3.9741174964429464E-05,2.0016045030261284e-8,-0.0012895399514628268,3.946480109359224e-5,1.984132894245313e-8,-0.001289274703109967,3.915530609271689e-5,1.9647018285539673e-8,-0.0012889236983102278,3.885435148165427e-5,1.9459904493796818e-8,-0.0012884992067051736,3.8599204907948656e-5,1.9303690980758627e-8,-0.0012880241094008248,3.841760919532316e-5,1.919581678542283e-8,-0.0012875274288492854,3.832480054634275e-5,1.9145604099175267e-8,-0.0012870398381923532,3.8322598965528926e-5,1.9153682307136752e-8,-0.001286589752637628,3.840001624621069e-5,1.921238243257403e-8,-0.001286200095515784,3.853470660398659e-5,1.9306731004946026e-8,-0.0012858854886256378,3.86948874374072e-5,1.9415831342562718e-8,-0.001285649499877651,3.8841815281819475e-5,1.9514646939711093e-8,-0.0012854817125208561,3.893347048250045e-5,1.9576511347082232e-8,-0.0012853550995704204,3.893063802338816e-5,1.957702413451274e-8,-0.0012852255062502298,3.880636244566652e-5,1.9499927026725242e-8,-0.0012850362965845573,3.855807120421911e-5,1.9344575221523857e-8,-0.0012847311762881526,3.821819412132976e-5,1.9132471126811794e-8,-0.0012842747415224602,3.785512960173213e-5,1.8907745295762985e-8,-0.0012836727720354248,3.755682902569352e-5,1.8726620068053298e-8,-0.0012829784848701268,3.739895052372073e-5,1.863702330001396e-8,-0.0012822761530718633,3.7413406126274804e-5,1.86584821716486e-8,-0.0012816490975353263,3.7576622715437714e-5,1.8774747376732938e-8,-0.0012811506382189232,3.782352818577273e-5,1.8943030423325083e-8,-0.001280792436308164,3.8075703038799706e-5,1.9112370169816575e-8,-0.0012805506354879592,3.8266803390174146e-5,1.924016463208864e-8,-0.001280380738437669,3.835616719714332e-5,1.9300925603521577e-8,-0.0012802324630361284,3.833113206068958e-5,1.9287565495948508e-8,-0.0012800605197691444,3.820264194508425e-5,1.920823586964087e-8,-0.0012798308757682997,3.799830026151315e-5,1.9081529959526996e-8,-0.001279523586304221,3.775524645033635e-5,1.8931707405877297e-8,-0.0012791333774328948,3.751366233471992e-5,1.8784512978711527e-8,-0.0012786686262423056,3.731102412992637e-5,1.866362274807214e-8,-0.001278148993439162,3.717726455085912e-5,1.858772206348688e-8,-0.001277601942460214,3.7131143654458575e-5,1.8568311190285357e-8,-0.001277058498171101,3.717813474632904e-5,1.860839408251708e-8,-0.0012765487555219646,3.7310038774287194e-5,1.8702216632045073e-8,-0.0012760977084929888,3.750624505138479e-5,1.8836075192321827e-8,-0.0012757217769639956,3.773626898786361e-5,1.8990020553034313e-8,-0.0012754261510291623,3.796321117292025e-5,1.9140234836138346e-8,-0.0012752029370164196,3.814797161205375e-5,1.92619071682081e-8,-0.0012750300928311285,3.825433491231409e-5,1.9332571089335484e-8,-0.0012748715426223701,3.825537269909844e-5,1.933609650898041e-8,-0.0012746797344262949,3.814138317428424e-5,1.926746861138821e-8,-0.0012744025805871105,3.7928235466975745e-5,1.9137729803848053e-8,-0.0012739963106319753,3.76626292022581e-5,1.897701998328715e-8,-0.0012734431088101711,3.741827327675125e-5,1.8832033009774208e-8,-0.0012727667106644165,3.7277449564075795e-5,1.875439150470419e-8,-0.0012720341118107905,3.730026444876515e-5,1.8781318347441222e-8,-0.0012713356167803904,3.749648014380484e-5,1.8917966913490027e-8,-0.0012707503868975216,3.7818967997163176e-5,1.913345694695096e-8,-0.0012703173742792029,3.818460780063819e-5,1.937431495323869e-8,-0.0012700276843224567,3.850870965846999e-5,1.958648929745315e-8,-0.0012698377681131297,3.873234768920965e-5,1.9732821725893906e-8,-0.0012696906468235986,3.883226562099348e-5,1.9799315570624595e-8,-0.0012695333572401244,3.881646913695297e-5,1.9792123553590806e-8,-0.0012693264687479164,3.8713735516634753e-5,1.9730552119127156e-8,-0.0012690470332673868,3.856312435152506e-5,1.9640099461015192e-8,-0.0012686878191508922,3.840594630060172e-5,1.9547213377593627E-08,-0.0012682550883168057,3.8280251328920796e-5,1.9475836828836382e-8,-0.0012677659821863632,3.8216972883763434e-5,1.9445125675948716e-8,-0.0012672456478990807,3.823702573972687e-5,1.9467782522189376e-8,-0.0012667239315270157,3.834915450270301e-5,1.954879813655444e-8,-0.0012662315252516165,3.8548712365379255e-5,1.9684700622829385e-8,-0.0012657956741872701,3.881779556352557e-5,1.9863631777743846E-08,-0.0012654358895180374,3.9127111421915734e-5,2.0066562567351532e-8,-0.0012651603219259492,3.943960149495701e-5,2.0269701099621573e-8,-0.0012649633922718845,3.97155188282893e-5,2.044787773900412e-8,-0.0012648251191054683,3.991847051986315e-5,2.0578512385264233e-8,-0.0012647124020133814,4.002181530954318e-5,2.0645672703362345e-8,-0.0012645824423290432,4.0014854271467307e-5,2.0643806946391964e-8,-0.001264388687972703,3.99081829052254e-5,2.0580779083148893e-8,-0.001264089784429187,3.973682895821391e-5,2.0479457047750557e-8,-0.0012636612589438738,3.955863316563664e-5,2.0376410433125773e-8,-0.001263107692385635,3.944474943991824e-5,2.031587286383709e-8,-0.0012624700916807313,3.9460627398303827e-5,2.0337965483915675e-8,-0.0012618210646095807,3.9641206055020366e-5,2.0463436185732815e-8,-0.0012612438544760331,3.997186027742948e-5,2.0682014530823786e-8,-0.0012608019231333165,4.03889145758586e-5,2.095293879084057e-8,-0.001260515403514942,4.080331509500292e-5,2.1219900523197546e-8,-0.0012603580066779792,4.1134769690694334e-5,2.143251915066937e-8,-0.0012602736669382706,4.133709908764442e-5,2.156229199212994e-8,-0.0012602001674625438,4.140455790552599e-5,2.1606510199617428e-8,-0.0012600871138250655,4.13627425982667e-5,2.1582334626039323e-8,-0.0012599037723692542,4.125395520943257e-5,2.1517286350261602e-8,-0.001259639059405887,4.112448324373034e-5,2.1440993984703374e-8,-0.0012592978126801822,4.1016374406620794e-5,2.1379934028673295e-8,-0.0012588963729254486,4.096310517242658e-5,2.1354792900167895e-8,-0.0012584587728795547,4.0987516848376617e-5,2.13793433801656e-8,-0.0012580135545439072,4.110070043061135e-5,2.145990419081642e-8,-0.001257590729174874,4.130124851631068e-5,2.1594960240885516e-8,-0.0012572184068382751,4.1574933436424366e-5,2.1774990856265992e-8,-0.0012569188758809874,4.1895365866185666e-5,2.198290829395347e-8,-0.0012567044061644376,4.2226400284913416e-5,2.2195638913385633e-8,-0.0012565736154616957,4.252676325544257e-5,2.2387154231576545e-8,-0.0012565095347204847,4.275674007069808e-5,2.2532803702984725e-8,-0.001256480413149145,4.2886024148070224e-5,2.261430451888185e-8,-0.0012564438185601924,4.290116127527485e-5,2.262433259898739e-8,-0.0012563537977570908,4.2810748157597085e-5,2.256953566001536e-8,-0.0012561701266762151,4.264685474788228e-5,2.2471059965738813e-8,-0.001255868216795208,4.246161786198218e-5,2.2362052663867524e-8,-0.00125544775922725,4.2318356345838705e-5,2.2281882031267264e-8,-0.0012549374800614776,4.22774052795677e-5,2.226731056823057e-8,-0.0012543928884045982,4.237873413357958e-5,2.2341924508824796e-8,-0.0012538846382849707,4.262624486160383e-5,2.2506767656905367e-8,-0.0012534783871114205,4.2981135163356555e-5,2.2736596297391955e-8,-0.0012532126561929605,4.3370682260662835e-5,2.2985558206766268e-8,-0.0012530852538086268,4.3711798272939364e-5,2.3201876301994538e-8,-0.0012530559769681426,4.393918260812166e-5,2.3345305957001018e-8,-0.0012530638749481211,4.4024288239515566e-5,2.3398863033464984e-8,-0.0012530490271740113,4.3977672971138264e-5,2.3370162208987406e-8,-0.0012529684380834512,4.383778762251783e-5,2.3284209882351702e-8,-0.0012528018888721966,4.365500575092296e-5,2.317318439808869e-8,-0.001252549834499636,4.34782797526141e-5,2.3067930135885604e-8,-0.0012522276998212633,4.334721846604825e-5,2.2992993745712078e-8,-0.0012518599576908918,4.3288848879161106e-5,2.2964722563118695e-8,-0.0012514754687159037,4.331706400168195e-5,2.299109201556656e-8,-0.0012511041057524219,4.343305080609753e-5,2.3072114029472213e-8,-0.0012507740089569535,4.362583037811218e-5,2.3200256491004583e-8,-0.001250508740600051,4.387284960062057e-5,2.336086149484763e-8,-0.0012503238892904954,4.414121645053139e-5,2.353297738143989e-8,-0.0012502232383400124,4.439057639247119e-5,2.3691245534858623e-8,-0.0012501953913701654,4.4578519987771495e-5,2.380937649691334e-8,-0.0012502124466062187,4.466862199857083e-5,2.386522426953918e-8,-0.0012502324655709908,4.463985453790723e-5,2.38466230351851e-8,-0.0012502066668911443,4.449465916127025e-5,2.3756267679178933e-8,-0.0012500904907569506,4.4262301368479445e-5,2.3613540810084584e-8,-0.0012498556988007213,4.3995081325114545e-5,2.3451824758728542e-8,-0.0012494996714732477,4.375734202677175e-5,2.3311357072906797e-8,-0.0012490486343557058,4.360978994232384e-5,2.3229326501100328e-8,-0.0012485532799728183,4.359328030608507e-5,2.3229896399582473e-8,-0.001248077323762565,4.3716595091107244e-5,2.331696995481848e-8,-0.0012476814413027032,4.395208150458591e-5,2.3471965518926978e-8,-0.0012474066926813987,4.424143994728845e-5,2.3657815110514976e-8,-0.001247262641945451,4.4511219507711075e-5,2.3828756487483382e-8,-0.0012472248755787513,4.469382181566311e-5,2.3943301525145774e-8,-0.0012472435198697964,4.474664503382738e-5,2.3975912178036033e-8,-0.001247259506344416,4.466205719091103e-5,2.3922954185837815e-8,-0.0012472217473297215,4.446513739596869e-5,2.3801066644975018e-8,-0.0012470987187946957,4.420202198632878e-5,2.3639715221988536e-8,-0.0012468817729012385,4.392519162060175e-5,2.3471897838937096e-8,-0.0012465817445801888,4.368137901444268e-5,2.3326586331146017e-8,-0.0012462224178688196,4.3504603084736476e-5,2.3224476425034505e-8,-0.0012458339394664786,4.3413868956406416e-5,2.317671064191687e-8,-0.0012454477067935401,4.341371210977519e-5,2.318536732956266e-8,-0.001245092875503066,4.349582099726864e-5,2.3244572533892913e-8,-0.001244793861427751,4.364070138997217e-5,2.334159650208275e-8,-0.0012445680145702208,4.381919330597018e-5,2.3457855646996076e-8,-0.0012444228840729505,4.399437802864513e-5,2.35701808197754e-8,-0.0012443530695937283,4.4124913953168016e-5,2.3652983748257247e-8,-0.0012443375127046577,4.4170905959475854e-5,2.36819578137255e-8,-0.001244339050323051,4.410267397222573e-5,2.3639490947179656e-8,-0.0012443085409083597,4.391102098493597e-5,2.352090842966235e-8,-0.0012441949428326805,4.361529559426061e-5,2.3339274923289387e-8,-0.0012439599109511782,4.3264248999509696e-5,2.3125688607710063e-8,-0.0012435919172900148,4.292632418466513e-5,2.2923014333021052e-8,-0.0012431132807987672,4.2670863701421686e-5,2.2774032688701237e-8,-0.0012425758812366372,4.2547004754978845e-5,2.2708303443627026e-8,-0.001242046681417017,4.256875652229016e-5,2.273310098467663e-8,-0.0012415887940260054,4.2711639999148036e-5,2.2831736522023835e-8,-0.0012412448848635037,4.292095325018456e-5,2.2969151481539737e-8,-0.0012410276081992223,4.312771971755229e-5,2.310214052847942e-8,-0.0012409187405165644,4.3266945611404475e-5,2.3190749585606232e-8,-0.001240876179833917,4.329319757536537e-5,2.3207763152117412e-8,-0.0012408462077011405,4.3189822733976015e-5,2.314410023143346e-8,-0.001240777320283415,4.297005585476495e-5,2.3009154427995445e-8,-0.0012406317702474867,4.267059575677806e-5,2.2826536022629307e-8,-0.0012403919863629748,4.234042689642282e-5,2.26269926746929e-8,-0.0012400610415698615,4.2028799199970334e-5,2.2440951581700866e-8,-0.0012396584394359302,4.1775753442481906e-5,2.229275950494211e-8,-0.001239213642370792,4.160681735016447e-5,2.2197568374873713e-8,-0.001238759622997134,4.153164993599383e-5,2.21606545642313e-8,-0.0012383277669794706,4.154532626799311e-5,2.217831390256571e-8,-0.0012379443945620973,4.163077699858882e-5,2.223941511624005e-8,-0.0012376284470835346,4.17613701854737e-5,2.2327028899360917e-8,-0.0012373896362990083,4.190335157601163e-5,2.2420000164546246e-8,-0.001237226498897373,4.201852746249583e-5,2.2494706995441768e-8,-0.0012371242703294284,4.2068080603654364e-5,2.2527507113518604e-8,-0.0012370533291036505,4.201858038815096e-5,2.249845761104157e-8,-0.001236970018387961,4.18506164139745e-5,2.239652980094868e-8,-0.0012368223070618539,4.1568658962976625e-5,2.2225481522563593e-8,-0.0012365619116138991,4.120801712255095e-5,2.2007914498811416e-8,-0.0012361611416612153,4.083280694899721e-5,2.1783828379414836e-8,-0.001235627714205694,4.052073423663693e-5,2.1601104914924004e-8,-0.0012350082702082678,4.0337708897671565e-5,2.149979267276202e-8,-0.0012343757042772982,4.031356310619789e-5,2.1497194944095898e-8,-0.0012338050721628741,4.043155020851939e-5,2.1581628688838263e-8,-0.001233349834870539,4.063630930677973e-5,2.1717708568439122e-8,-0.0012330286624901638,4.0854394434720134e-5,2.1859385815913868e-8,-0.001232825543872876,4.1016780529853954e-5,2.1964061307544442e-8,-0.0012326994687433222,4.1075328421856106e-5,2.20027389188401e-8,-0.001232597984556413,4.1010377237678075e-5,2.196447509602127e-8,-0.0012324701701386766,4.083038763729262e-5,2.1855784862297425e-8,-0.0012322765508626758,4.0566046838917725e-5,2.1696628675659008e-8,-0.0012319949600370919,4.026131873137667e-5,2.151464212796346e-8,-0.0012316222127142264,3.996359807215556e-5,2.1339009160521587e-8,-0.0012311720726316338,3.971485937041825e-5,2.1195127901571155e-8,-0.001230670573013148,3.954524762662862e-5,2.1100877649413684e-8,-0.0012301501032358588,3.946977464651513e-5,2.1064790494578928e-8,-0.0012296436170803153,3.9487963552311815e-5,2.108595595697376e-8,-0.0012291799191749856,3.958568949318732e-5,2.1155185653788322e-8,-0.0012287803742935324,3.973818698101526e-5,2.1256853700710867e-8,-0.001228456809047748,3.991337515449703e-5,2.1370956879184295e-8,-0.0012282101383242943,4.007518264093764e-5,2.1475236423481508e-8,-0.0012280293349605576,4.0187061533075706e-5,2.1547450730279715e-8,-0.0012278906587169442,4.0216265386799466e-5,2.1568075140606426e-8,-0.001227757733952711,4.0139660658889306e-5,2.152381649965794e-8,-0.001227584040852701,3.995131561109933e-5,2.141206714008766e-8,-0.0012273199557392438,3.9670437193476325e-5,2.1245481814044025e-8,-0.0012269256617048919,3.934568255249432e-5,2.1054357934419238e-8,-0.001226387988600605,3.9049849819512705e-5,2.088324803621528e-8,-0.0012257337792927004,3.886073981427376e-5,2.077925099285005e-8,-0.001225029176986983,3.8832259555441034e-5,2.0774438780732722e-8,-0.0012243597146831978,3.897014608672804e-5,2.087118383561181e-8,-0.001223799174185458,3.922790438935534e-5,2.1039910874573118e-8,-0.0012233842237546633,3.952612757691313e-5,2.123118242844517e-8,-0.001223107335217403,3.9782946538246464e-5,2.139456934167179e-8,-0.0012229273220081428,3.993907780657064e-5,2.1494114292522025e-8,-0.001222787747765819,3.996887325239496e-5,2.1515041468992588e-8,-0.0012226337779387417,3.987869845089384e-5,2.1462498186417195e-8,-0.0012224231672501788,3.9698352797038394e-5,2.135591073507243e-8,-0.001222131287192134,3.94706075535104e-5,2.1222223071618265e-8,-0.0012217517999359017,3.924165377627985e-5,2.1089871554669243e-8,-0.0012212945943425393,3.905340977839935e-5,2.0984126176207197e-8,-0.0012207820344604945,3.8937868022761935e-5,2.0923847255017387e-8,-0.0012202442110411317,3.891356765329418e-5,2.0919587003276005e-8,-0.0012197138193019857,3.898419985757117e-5,2.0972925719657997e-8,-0.0012192212575737466,3.913919956043711e-5,2.1076902982625034e-8,-0.0012187904880345962,3.9356035455342134e-5,2.1217396945348294e-8,-0.001218436045934365,3.960367962125383e-5,2.1375213106972125e-8,-0.00121816125440768,3.9846620466140236e-5,2.1528562534707792e-8,-0.0012179574526165029,4.004903399140244e-5,2.165570613461297e-8,-0.0012178040605647724,4.0179078031285165e-5,2.1737684879836926e-8,-0.001217669467291421,4.021348370120589e-5,2.1761144819940345e-8,-0.0012175131332450237,4.014272182328031e-5,2.1721351070588032e-8,-0.001217289990042325,3.997662689165655e-5,2.162532349147562e-8,-0.0012169585457825218,3.9749007528304005e-5,2.1494297600574853e-8,-0.0012164931847068905,3.9517836703297245e-5,2.136358703249228e-8,-0.0012158983378917096,3.9356329110915773e-5,2.1277115324960004e-8,-0.0012152176438466392,3.9332104759699913E-05,2.127493647531436e-8,-0.001214528479586985,3.947928991470707e-5,2.1376600643727462e-8,-0.0012139177363669367,3.9778311663362115e-5,2.1569180758206194e-8,-0.0012134484162272517,4.015900048914238e-5,2.180933946924029e-8,-0.0012131363021741985,4.052837642935356e-5,2.2040280902569133e-8,-0.0012129497831343294,4.080665261167639e-5,2.2213672818770073e-8,-0.0012128291159121656,4.095125233841926e-5,2.230428148992462e-8,-0.001212710628911282,4.096082546243361e-5,2.2312340353820234e-8,-0.0012125440419645064,4.0864936103992574e-5,2.2257017392004202e-8,-0.0012122998065612566,4.070927702557695e-5,2.2167052698862267e-8,-0.001211969092054254,4.054291261138361e-5,2.207270204179144e-8,-0.0012115601294701622,4.04096307802744e-5,2.2000393390250897e-8,-0.0012110935055385707,4.034290695442932e-5,2.1969806882960636e-8,-0.001210597514896922,4.0363263803066746e-5,2.1992540281281542e-8,-0.001210103734529621,4.047720018381726e-5,2.2071717239761007e-8,-0.0012096427900898502,4.0677387217859966e-5,2.22022573473533e-8,-0.0012092403935229314,4.094407090176532e-5,2.237175494917936e-8,-0.0012089138646246408,4.124773087837309e-5,2.2562054742508997e-8,-0.001208669509931094,4.155294488543246e-5,2.2751575294808985e-8,-0.0012085012343950414,4.1823087158483395e-5,2.2918206290301382e-8,-0.0012083905541689021,4.20253509279023e-5,2.304245225579731e-8,-0.0012083080279941285,4.213570362400274e-5,2.3110503419034456e-8,-0.0012082161114372763,4.2143459888724324e-5,2.3116949841108062e-8,-0.0012080735324706796,4.2055159230597596e-5,2.3066900585552403e-8,-0.001207841533426535,4.189723091537656e-5,2.297724001603263e-8,-0.0012074923383279116,4.171613868549196e-5,2.2876363669851336e-8,-0.001207019283053891,4.157362669411139e-5,2.2801120538061767e-8,-0.0012064459189305014,4.1534493783767346e-5,2.2789521758592166e-8,-0.0012058286024298984,4.164656524482071e-5,2.2869009240234377e-8,-0.0012052460554162017,4.19184087749905e-5,2.3043477200400544e-8,-0.0012047743940046401,4.2307229374438395e-5,2.3286316882609802e-8,-0.0012044572585227797,4.272895499439604e-5,2.3546579750409415e-8,-0.001204288381331058,4.308962693418823e-5,2.376779519103741e-8,-0.0012042176630236775,4.332107815521141e-5,2.390938507508682e-8,-0.0012041753802073372,4.340093341660907e-5,2.3958706867713977e-8,-0.00120409843142815,4.335014281596996e-5,2.3929491995290315e-8,-0.0012039461046134032,4.3216266495513626e-5,2.3851510393422998e-8,-0.0012037033879847602,4.305483536435831e-5,2.3758982441867673e-8,-0.001203376539335363,4.291599030590616e-5,2.368228317218689e-8,-0.00120298613557427,4.283755592078561e-5,2.364376268900528e-8,-0.00120256066507784,4.2842730196850536e-5,2.365655954004364e-8,-0.0012021315896690958,4.29401323049733e-5,2.3724918753893763e-8,-0.0012017295357681474,4.3124764351869256e-5,2.384500705422323e-8,-0.0012013810188355309,4.3379445958178134e-5,2.400589014719376e-8,-0.0012011053959982453,4.367684303151363e-5,2.4190760318183176e-8,-0.0012009120711434845,4.3982426851927915e-5,2.4378686124360526e-8,-0.001200798320179096,4.4258666524398955e-5,2.4547135559008024e-8,-0.0012007483813156155,4.447035815567847e-5,2.4675237441635286e-8,-0.0012007344048218429,4.45904789956841e-5,2.4747373111654414e-8,-0.0012007195396916456,4.4605667043112055E-05,2.475647427648304e-8,-0.0012006630679124704,4.4520319606676825e-5,2.4706349244549025e-8,-0.0012005271433299393,4.435834252862902e-5,2.4612444809990292e-8,-0.0012002844344340745,4.416178423355356e-5,2.450065938028214e-8,-0.0011999257549066937,4.39856842762662e-5,2.4403951995426074e-8,-0.0011994662184232547,4.3888471317910234e-5,2.435650342589999e-8,-0.001198947460842372,4.3917923813857226e-5,2.43855173915342e-8,-0.001198432684587654,4.409482178445086e-5,2.4501884310528832e-8,-0.0011979921332492878,4.43998509534339e-5,2.469284335350204e-8,-0.00119768078598594,4.4772044938470945e-5,2.492136091235081e-8,-0.0011975168459692923,4.512476493318901e-5,2.5135693210741254e-8,-0.00119747326559844,4.53756385533257e-5,2.528710231716238e-8,-0.0011974888649364393,4.547604253094459e-5,2.5347319618533324e-8,-0.0011974930862349044,4.542451975687877e-5,2.5316491092253453e-8,-0.0011974302262546881,4.525952548655604e-5,2.5218719541367353e-8,-0.0011972721728209824,4.5039793706352555e-5,2.509006550443868e-8,-0.0011970183063790395,4.48245155389913e-5,2.4966396418741908e-8,-0.001196687932279745,4.4660550904328974e-5,2.487559033145641e-8,-0.0011963111623788396,4.457738285834904e-5,2.4834604037411308e-8,-0.0011959215436754737,4.45871920184613e-5,2.4849769736576936e-8,-0.0011955511692190652,4.468712727908596e-5,2.4918432734679642e-8,-0.0011952275920148667,4.486193679281758e-5,2.5030717037665653e-8,-0.001194971551310585,4.508639373150898e-5,2.5171047327290172e-8,-0.001194794863314542,4.5327777567539424e-5,2.5319623085596163e-8,-0.001194698341899172,4.554901617532855e-5,2.5454274898017947e-8,-0.0011946701458042791,4.5713081220382614e-5,2.555310251854561e-8,-0.0011946854231435274,4.5788787339589856e-5,2.5597980508971714e-8,-0.0011947082714650892,4.575734391539159e-5,2.5578493326096783e-8,-0.0011946966519119835,4.561819225984636e-5,2.5495358009355167e-8,-0.0011946100335258174,4.539218001394653e-5,2.536213072497259e-8,-0.0011944184455051122,4.512031317912244e-5,2.5204163446924352e-8,-0.0011941107653257608,4.485734384224478e-5,2.5054453515492776e-8,-0.0011936999083235803,4.466088478508766e-5,2.4946937452023213e-8,-0.0011932230592092813,4.457796164782929e-5,2.4908499047797812e-8,-0.001192735881163747,4.463180004644925e-5,2.4951402925395812e-8,-0.0011923007264965835,4.481237616870531e-5,2.506816181625162e-8,-0.001191970530689217,4.507461064861558e-5,2.523093820360962e-8,-0.0011917724140860335,4.5347229185161454e-5,2.5397066980609755e-8,-0.0011916972032087528,4.5552150560644986e-5,2.552053976524705e-8,-0.0011917008223672682,4.5628853227269786e-5,2.55662585680403e-8,-0.001191718836140086,4.55536438037028e-5,2.5521241678494558e-8,-0.0011916882079971906,4.534483429463704e-5,2.5397506076360736e-8,-0.0011915661764232738,4.50523352358896e-5,2.52256885925892e-8,-0.0011913387387294007,4.47385355732246e-5,2.504346293478613e-8,-0.0011910180546011024,4.446011631860293e-5,2.4884567965759092e-8,-0.0011906333941084394,4.425692301702829e-5,2.4772196056940904e-8,-0.0011902211184680275,4.414860982271032e-5,2.4717178867113547e-8,-0.0011898169790774708,4.4136455261757274e-5,2.4719329452121577e-8,-0.0011894514485054754,4.420725000515381e-5,2.4769977404092045e-8,-0.0011891472970888017,4.43372203473938e-5,2.4854416724191735e-8,-0.0011889182539292847,4.449528806773453e-5,2.4953861754942293e-8,-0.0011887678749798924,4.464592966057503e-5,2.504712463555681e-8,-0.0011886883030289687,4.4752380198887884e-5,2.5112510632544797e-8,-0.0011886592771498138,4.478098874931083e-5,2.5130424449580425e-8,-0.0011886483992062577,4.4707117457076194e-5,2.5086889829383304e-8,-0.0011886140329250244,4.4522010180780784e-5,2.4977592415005244e-8,-0.0011885119078034235,4.4238713784012066e-5,2.4811273251672534e-8,-0.0011883051844906306,4.3894051675223444e-5,2.461069041472246e-8,-0.0011879756183442926,4.354386275480496e-5,2.4409531085824178e-8,-0.0011875317045031677,4.3250911754683235e-5,2.4244998266980886e-8,-0.001187009814984017,4.306830808202916e-5,2.4147865942933328e-8,-0.0011864667588603476,4.302388062774488e-5,2.4133330210664937e-8,-0.0011859656180111609,4.3111034611001064e-5,2.4195943412766552e-8,-0.0011855592107146609,4.328925296709795e-5,2.4310387221332328e-8,-0.0011852761111206852,4.349413359054941e-5,2.443782423047731e-8,-0.0011851131455521931,4.3654131747047644e-5,2.4535986395746288e-8,-0.0011850365116463047,4.370946428713365e-5,2.4570271546609728e-8,-0.0011849914632903148,4.362784368851426e-5,2.4522773768495008e-8,-0.001184917896100419,4.341215487751708e-5,2.43964861556252e-8,-0.0011847668283073867,4.3097519747167916e-5,2.4213256739576758e-8,-0.001184512183165127,4.273915270154866e-5,2.400637699709233e-8,-0.001184154359433377,4.239606712181469e-5,2.381082880477647e-8,-0.001183715829325232,4.211673537541401e-5,2.3654834718410355e-8,-0.001183232091457753,4.193072848064575e-5,2.355508585492585e-8,-0.001182742076052658,4.184692919527811e-5,2.351593181722576e-8,-0.001182280783554334,4.185637277082278e-5,2.3531280291149167e-8,-0.0011818749650736491,4.193705913158789e-5,2.3587563717348847e-8,-0.0011815412371566454,4.20587459208501e-5,2.3666591547139997e-8,-0.001181285518418681,4.218688550045602e-5,2.374784651401943e-8,-0.0011811028444095974,4.2285853886151184e-5,2.381037385561812e-8,-0.001180977123076948,4.232217251513254e-5,2.3834703066651765e-8,-0.0011808810539391222,4.2268560697046846e-5,2.3805269882627502e-8,-0.0011807771612472478,4.2109361969074505e-5,2.3713602572318883e-8,-0.0011806214602274067,4.1846957049957275e-5,2.356200196449372e-8,-0.0011803711677501327,4.150714518977967e-5,2.3366529209186637e-8,-0.0011799963986054275,4.113978509884284e-5,2.3157162420999488e-8,-0.0011794927933482826,4.08108363408142e-5,2.2972909369344754e-8,-0.0011788890049142986,4.058504354233647e-5,2.2851491515976213e-8,-0.0011782430294203484,4.050438512482597e-5,2.2816671906510717e-8,-0.0011776263052778516,4.0571991173592686e-5,2.2868981508891815e-8,-0.0011771016155169122,4.074982996867079e-5,2.2984703383283737e-8,-0.0011767044632477951,4.097122380197114e-5,2.3123630234264177e-8,-0.0011764349839248737,4.1161829736862925e-5,2.3241707139593455e-8,-0.0011762614801303043,4.1260299791107996e-5,2.330328303434297e-8,-0.0011761320404088328,4.1232336783918625e-5,2.328924297558214e-8,-0.0011759893133244327,4.1075838938516295e-5,2.3199711124094704e-8,-0.0011757842580515552,4.081779203779472e-5,2.3051819147004552e-8,-0.001175486057786376,4.050513963720658e-5,2.2873984543674025e-8,-0.0011750866908770193,4.0192525827399625e-5,2.2698514425147638e-8,-0.0011745998913217442,3.9930000443378806e-5,2.2554401861589946e-8,-0.0011740555181366963,3.975350915748105e-5,2.2461942074838184e-8,-0.0011734914447389271,3.967996159531561e-5,2.2430123462058758e-8,-0.001172945410878914,3.970705295686038e-5,2.245677720924922e-8,-0.0011724486794790487,3.981662159239835e-5,2.2530685939862905e-8,-0.0011720222605774908,3.997974255206267e-5,2.263458529327139e-8,-0.0011716754580197422,4.0161947727554296e-5,2.274816904236688e-8,-0.0011714059108263474,4.032766224367516e-5,2.285064391621753e-8,-0.0011712002787532773,4.044378850159482e-5,2.2922839703133115e-8,-0.001171035100466492,4.048293650443117e-5,2.2949153547451752e-8,-0.0011708778846540614,4.042697766162125e-5,2.2919658210313572e-8,-0.0011706891457959967,4.0271429475899425e-5,2.2832600750891778e-8,-0.001170426728995793,4.0030416719605716e-5,2.269711830719015e-8,-0.0011700538042031948,3.9740414742010276e-5,2.253517245414926e-8,-0.0011695506069301434,3.945916078722506e-5,2.2380689483545792e-8,-0.0011689268944945577,3.9255517922141815e-5,2.227353935744273e-8,-0.001168228173677312,3.918909798715985e-5,2.224769728531718e-8,-0.0011675279781217165,3.9285907063139966e-5,2.2317220439852915e-8,-0.0011669049542857158,3.952322670802093e-5,2.24676871654407e-8,-0.0011664145207980038,3.9834885125080155e-5,2.265953681114611e-8,-0.001166070295452867,4.013563731944959e-5,2.2842517129925196e-8,-0.0011658440641923867,4.035108613749354e-5,2.2973299450432576e-8,-0.0011656808972777184,4.043846993678506e-5,2.302764914878378e-8,-0.0011655191438936243,4.039246802510346e-5,2.300366653105076e-8,-0.0011653067613803536,4.023909875147127e-5,2.291788321046429e-8,-0.001165010689103841,4.002390781978695e-5,2.2797942341975254e-8,-0.0011646197556137458,3.979940906101893e-5,2.2674938420648966e-8,-0.0011641429633779334,3.961443280877213e-5,2.2577103601577477e-8,-0.0011636049134929856,3.950632417993853e-5,2.252541402741315e-8,-0.0011630396411959254,3.9496218494349576e-5,2.253115281543781e-8,-0.001162483900516477,3.95874667786907e-5,2.2595320378682432e-8,-0.0011619709327954436,3.976699600781008e-5,2.2709638135691125e-8,-0.0011615255979191684,4.000893838449559e-5,2.2858712233979922e-8,-0.0011611613858706039,4.0279582776409567e-5,2.3022849008527116e-8,-0.001160879376169587,4.054263299169933e-5,2.3181024514051384e-8,-0.0011606687592218374,4.076394687408465e-5,2.3313608208272293e-8,-0.0011605083240079387,4.09154288041749e-5,2.3404666156265128e-8,-0.00116036847554564,4.097823517679709e-5,2.34438834621506e-8,-0.0011602136824594566,4.0945659648512586e-5,2.3428227761797474e-8,-0.0011600057215318002,4.0826012397539306e-5,2.3363471925632195e-8,-0.0011597086232655231,4.0645264473458956e-5,2.326545539839303e-8,-0.0011592962457193116,4.0447999006798314e-5,2.3160337368834338e-8,-0.00115876229853727,4.0293821820255384e-5,2.3082332980724006e-8,-0.0011581301558147067,4.0245920350732926e-5,2.3067127381392428e-8,-0.0011574563121098651,4.035081622828792e-5,2.3140425634618856e-8,-0.0011568199270357543,4.061526212816023e-5,2.3304961265381497e-8,-0.0011562968471505665,4.099409631845051e-5,2.353376588241085e-8,-0.0011559290458727804,4.140161770840252e-5,2.3776854904296303e-8,-0.0011557078806939019,4.1744238983237644e-5,2.3980097768470524e-8,-0.0011555814912751524,4.195588110422897e-5,2.4105697188319998E-08,-0.001155479481195814,4.201658493401853e-5,2.4142985129680127e-8,-0.00115533863075793,4.194919447273282e-5,2.4106395513946268e-8,-0.0011551182129401877,4.1802901903976074e-5,2.4025610864818883e-8,-0.0011548035981328402,4.163510488935334e-5,2.3934641492285587e-8,-0.0011544024679921467,4.149790402491649e-5,2.3863731188845464e-8,-0.0011539381598193543,4.143037373269924e-5,2.3834886083816383e-8,-0.0011534428504190312,4.145529592249755e-5,2.3860242372633465e-8,-0.0011529515734318722,4.157867605802834e-5,2.3942156152824156e-8,-0.001152497126030711,4.17910018793201e-5,2.407424330087287e-8,-0.00115210581430915,4.2069853360416185e-5,2.4243037050196697e-8,-0.001151794185245135,4.238365328686831e-5,2.4430139497299415e-8,-0.0011515669930675036,4.269628302794372e-5,2.461478437537122e-8,-0.0011514166348674099,4.2972125399724006e-5,2.4776661433350763e-8,-0.0011513241096236361,4.318091082678523e-5,2.4898702175336794e-8,-0.0011512612721551612,4.330181717597658e-5,2.496949457208967e-8,-0.001151194039557355,4.332656629776271e-5,2.4985098203453446e-8,-0.0011510862887999457,4.326145348232724e-5,2.4950132422663092e-8,-0.0011509043845628019,4.312830423117919e-5,2.4878096818187747e-8,-0.0011506225888506414,4.296414251839801e-5,2.4790856099194497e-8,-0.0011502295873348479,4.281860836006933e-5,2.4716871495239724e-8,-0.0011497354598191344,4.27473669523015e-5,2.4687324428481763e-8,-0.0011491767132249047,4.27998987093043e-5,2.4729297172923822e-8,-0.0011486149745644995,4.300208635109734e-5,2.4856210146960896e-8,-0.0011481242788471762,4.333890754543513e-5,2.505836780419132e-8,-0.0011477663805973333,4.37484335258334e-5,2.529978271595454e-8,-0.0011475638693054652,4.413754488074797e-5,2.552713565537854e-8,-0.0011474880690233208,4.441675095791563e-5,2.5689536506059154e-8,-0.0011474716437174161,4.4535329714636256e-5,2.5758576446798924e-8,-0.0011474381423005444,4.4496153607781065e-5,2.573686319342581e-8,-0.0011473298248947472,4.434525522139947e-5,2.5651963688180006e-8,-0.0011471206519927625,4.4148021131686344e-5,2.5542431090685233e-8,-0.0011468143867924144,4.396712744434881e-5,2.5444745012451112e-8,-0.001146435178096694,4.384958556407789e-5,2.538566338712817e-8,-0.0011460173053052653,4.382244135856911e-5,2.537984964690841e-8,-0.0011455972066733823,4.389369052636168e-5,2.543072424927479e-8,-0.001145208205189756,4.4055310810386594e-5,2.553258147049571e-8,-0.0011448771116926027,4.4286732802865605e-5,2.5672846892049696e-8,-0.001144621838537778,4.455834866317327e-5,2.5834176207532318e-8,-0.0011444496596464482,4.483524010238264e-5,2.5996533958276677e-8,-0.0011443561757723407,4.508136367107901e-5,2.6139484084071172e-8,-0.001144325302176957,4.526422796836885e-5,2.624479996609313e-8,-0.0011443306796744088,4.5359678801102835e-5,2.629920696942144e-8,-0.001144338684074093,4.535607232962796e-5,2.6296805202445227e-8,-0.0011443128443530714,4.525711697688811e-5,2.6240674007741413e-8,-0.0011442192204715602,4.5082805045375516e-5,2.6143256225398415e-8,-0.0011440321422607781,4.4868033997148654e-5,2.6025290536327584e-8,-0.0011437397009143968,4.465876200865301e-5,2.5913293776335838e-8,-0.0011433483936894827,4.450556201387472e-5,2.5835666573269417e-8,-0.0011428859132346458,4.4454301330230345e-5,2.5817407374967364e-8,-0.0011424002463549068,4.4534205124580296e-5,2.587362598157788e-8,-0.0011419527122034946,4.474530750720313e-5,2.600289980431649e-8,-0.0011416033368196802,4.505002810376823e-5,2.618294554588382e-8,-0.001141390428908636,4.5375931822066494e-5,2.6372385764556846e-8,-0.0011413123883100827,4.5634818511907473e-5,2.6521473534591453e-8,-0.001141323589395823,4.5754058078499044e-5,2.6589641295518906e-8,-0.0011413505127724332,4.570482861131677e-5,2.65614039044391e-8,-0.0011413207093381398,4.5510745451041515e-5,2.6451239643199213e-8,-0.001141188094617734,4.523323032317512e-5,2.6295158823665544e-8,-0.0011409425267060696,4.494512245552072e-5,2.613539055975473e-8,-0.0011406039242835295,4.470782444666231e-5,2.6007055239340012e-8,-0.001140209199720666,4.455976514490526e-5,2.5931497221064563e-8,-0.0011397998215520568,4.451513360626569e-5,2.591575701768682e-8,-0.001139413450043509,4.456814837601221e-5,2.595536246540539e-8,-0.0011390795966643849,4.469876670368622e-5,2.60379203690528e-8,-0.0011388178217883774,4.487777100093782e-5,2.614620234117578e-8,-0.001138637029323737,4.507087406977781e-5,2.6260499784491232e-8,-0.0011385351171898522,4.524231213375679e-5,2.636058011508952e-8,-0.001138498908997064,4.5358536475447353e-5,2.6427687830903223e-8,-0.001138504742717813,4.539239795883406e-5,2.6446876610957435e-8,-0.0011385203577618363,4.5327686077719404e-5,2.6409596426616204e-8,-0.001138508626476679,4.5163215308385346e-5,2.6316020938140107e-8,-0.001138433164520453,4.491524922861346e-5,2.617635271007851e-8,-0.0011382651611644248,4.461705208805853e-5,2.60103768433134e-8,-0.0011379901212315725,4.431475914112068e-5,2.5844832363761734e-8,-0.0011376128472153897,4.405962607495448e-5,2.5708742448517676e-8,-0.0011371591432191399,4.38977377850055e-5,2.5627459120037902e-8,-0.0011366732292220137,4.385892899825392e-5,2.561652405049774e-8,-0.0011362103950232623,4.394710877414942e-5,2.5676581411835278e-8,-0.0011358251542952108,4.413475261191414e-5,2.5790765942044402e-8,-0.0011355565320898134,4.436471443508226e-5,2.5926126309661128e-8,-0.0011354142388612493,4.456177182242592e-5,2.6040272006294392e-8,-0.0011353715564004837,4.4653360616528623e-5,2.6092925147649926e-8,-0.0011353705510015804,4.459362909579968e-5,2.605922322764486e-8,-0.0011353404038372476,4.4380227560943225e-5,2.5938971302698022e-8,-0.0011352217466509087,4.405454262243014e-5,2.5756616732937143e-8,-0.0011349852948189293,4.368490247039827e-5,2.5551578991552723e-8,-0.0011346366674042077,4.334216194977203e-5,2.5364227495662016e-8,-0.001134208126523297,4.307971922662928e-5,2.5224447033233243e-8,-0.0011337443916172296,4.292448780803408e-5,2.5146609857361533e-8,-0.0011332897864486306,4.287791196077834e-5,2.5130427988720302e-8,-0.0011328801743606684,4.292232941936807e-5,2.5164886702881576e-8,-0.0011325395437544183,4.302832693352377e-5,2.5232645329543546e-8,-0.0011322795036267984,4.316082969546979e-5,2.5313558114926845e-8,-0.0011320999644248192,4.328354167402069e-5,2.538712994851353e-8,-0.0011319900022255828,4.336233306022805e-5,2.5434328063291953e-8,-0.0011319286947636842,4.336840808418778e-5,2.5439298179225213e-8,-0.0011318863330729578,4.328188187579225e-5,2.5391365668682646e-8,-0.001131826798984989,4.309582777844892e-5,2.5287327028303578e-8,-0.0011317119237820342,4.282000536402383e-5,2.513352362103692e-8,-0.0011315081184450266,4.248267021715128e-5,2.4946745756693704e-8,-0.0011311944679122136,4.212855215251888e-5,2.47528810798855e-8,-0.001130770145740669,4.181171313272162e-5,2.458263730132284e-8,-0.0011302581872849279,4.158375073838242e-5,2.446470685820663e-8,-0.0011297031604086858,4.1480108144529596e-5,2.4418045723061402e-8,-0.001129162188693781,4.15087736209508e-5,2.4445738038119535e-8,-0.001128691235841923,4.164541695493883e-5,2.453267453652789e-8,-0.0011283303644603515,4.1837167858544846e-5,2.464812593336712e-8,-0.0011280922029762194,4.201470996660632e-5,2.4752841228200912e-8,-0.0011279572033331556,4.2109977185660934e-5,2.480903447905591e-8,-0.0011278777807429035,4.2074869072542864e-5,2.4790706388729773e-8,-0.0011277911058960631,4.189530837193729e-5,2.4691226160505966e-8,-0.0011276372138476932,4.15954194176583e-5,2.4525357679971217e-8,-0.0011273763094417542,4.1229584247699144e-5,2.4324526909304625e-8,-0.0011269987883137111,4.0865150594873515e-5,2.4126913313744505e-8,-0.0011265246487921932,4.056282496645149e-5,2.396636013648397e-8,-0.0011259939870450367,4.0362229990203176e-5,2.3864352719984643e-8,-0.0011254538280006646,4.027651035222083e-5,2.3827236887481313e-8,-0.0011249466443459084,4.029509964658356e-5,2.3848081936514294e-8,-0.0011245033782163948,4.0390924133027086e-5,2.3910968573532058e-8,-0.0011241409403492657,4.052829514471608e-5,2.3995517170635476e-8,-0.00112386263638038,4.066934213518109e-5,2.4080458369857855e-8,-0.001123659844043524,4.077852227744454e-5,2.4146059818045725e-8,-0.0011235138537491161,4.082575535334954e-5,2.417579891950277e-8,-0.0011233975399612892,4.078906093563617e-5,2.4157813543967808e-8,-0.0011232772130354719,4.065741806846923e-5,2.4086515680471002e-8,-0.0011231154772805123,4.043402590037051e-5,2.3964410167377178e-8,-0.0011228760409062776,4.0139252991621545e-5,2.380366568263808e-8,-0.0011225309508780508,3.9811507466245704e-5,2.362643573893063e-8,-0.0011220694021852218,3.9503593998477884e-5,2.3462607402847364e-8,-0.0011215052868612503,3.927276808058977e-5,2.334405693151438e-8,-0.0011208791815421717,3.916532907922445e-5,2.32959719470691e-8,-0.0011202512996662164,3.9200465609938846e-5,2.332793726446843e-8,-0.001119685750452599,3.936055511280073e-5,2.3428801926640012e-8,-0.0011192313624241938,3.959351310628623e-5,2.3568365483427852e-8,-0.0011189067970222813,3.982728786145331e-5,2.370580293829856e-8,-0.0011186957125675833,3.9990849821071303e-5,2.380156013682102e-8,-0.0011185529359586416,4.003380335406222e-5,2.382827657042045e-8,-0.0011184183604654927,3.9938559297950844e-5,2.3777363910180102e-8,-0.0011182335261142832,3.972257873820071e-5,2.365991178424167e-8,-0.0011179561348970367,3.943138742499119e-5,2.3502406776038373e-8,-0.0011175690250342211,3.9125231705559594e-5,2.333898219278873e-8,-0.0011170818909624026,3.8863484851492184e-5,2.3202592856615218e-8,-0.0011165261146400343,3.869113689297805e-5,2.3117576365828163e-8,-0.0011159450191786187,3.863070018781825e-5,2.309541688994295e-8,-0.001115382950846316,3.8680782729081375e-5,2.3134291481037248e-8,-0.0011148763323054643,3.88202433349568e-5,2.3221657136516122e-8,-0.0011144484116093652,3.9015366788503146e-5,2.333836405534532e-8,-0.0011141077300649053,3.922741200952648e-5,2.3462821981382622e-8,-0.0011138492060015412,3.941880989590515e-5,2.357433208540127e-8,-0.0011136564631223104,3.955748183796071e-5,2.3655382121537695e-8,-0.001113504398766395,3.961966181875024e-5,2.3693174947865333e-8,-0.0011133616119702572,3.9591985478981636e-5,2.3680806672121074e-8,-0.0011131929173312004,3.9473502927766754e-5,2.3618399758240768e-8,-0.001112962646214551,3.927781992830418e-5,2.3514237054040706e-8,-0.0011126396430199091,3.903476453581059e-5,2.338553477815076e-8,-0.0011122044622860591,3.878987372235069e-5,2.325794563447264e-8,-0.0011116579050496058,3.859916050478475e-5,2.3162471082326266e-8,-0.0011110277638066819,3.8517161490373446e-5,2.3128770665243614e-8,-0.0011103686318442126,3.857932217863279e-5,2.317550345585091e-8,-0.0011097504345893342,3.878498007287958e-5,2.3301147042226735e-8,-0.0011092368658773112,3.909083067031221e-5,2.348067606937274e-8,-0.001108862561025627,3.9421677057301995e-5,2.3671766690779e-8,-0.0011086207894536008,3.969541345367182e-5,2.3828789988108746e-8,-0.001108467784835197,3.9850203582443234e-5,2.3917930158623212e-8,-0.0011083400223898265,3.986149013467848e-5,2.3926558339224554e-8,-0.0011081749835332257,3.9744019406875444e-5,2.3864144977322292e-8,-0.0011079272311021648,3.954206227866765e-5,2.3756473773474773e-8,-0.0011075764036130426,3.9314276041815806e-5,2.3636846724881514e-8,-0.0011071276513506274,3.911872082508301e-5,2.353751460723729e-8,-0.001106606712234522,3.9001210256697606e-5,2.3483218868648787e-8,-0.0011060519911277476,3.8988244203939216e-5,2.3487531140898155e-8,-0.001105505670300844,3.908468395961993e-5,2.3551953376769463e-8,-0.001105005565791467,3.927568764132802e-5,2.3667339954019526e-8,-0.0011045790708096976,3.9531788880221474e-5,2.3816896490402398e-8,-0.0011042398847317478,3.9815546406795756e-5,2.397985579796228e-8,-0.0011039874767033147,4.008822786866677e-5,2.413504494817365e-8,-0.0011038086569949937,4.031539899273079e-5,2.4263827315283715e-8,-0.0011036803427045844,4.047087645509333e-5,2.4352204679952328e-8,-0.0011035726966564098,4.053916604625667e-5,2.4392162684179795e-8,-0.0011034522434320714,4.051692930416066e-5,2.438250815301555e-8,-0.0011032850399023103,4.041397991610771e-5,2.4329393420554233e-8,-0.0011030403485004744,4.0253960514007384e-5,2.424655679752155e-8,-0.001102695483905325,4.0074227905403326e-5,2.415503580398189e-8,-0.001102242193580227,3.992352368685253e-5,2.4081660659305638e-8,-0.0011016936673696796,3.985525563697915e-5,2.4055253488353385e-8,-0.0011010891641663526,3.991473667135059e-5,2.409971221190807e-8,-0.0011004912378463276,4.012168328025906e-5,2.422468321626409e-8,-0.0010999711538006204,4.045477360482803e-5,2.4417430252093232e-8,-0.0010995842055226655,4.084938248726866e-5,2.4641830821643385e-8,-0.0010993460929871167,4.121581701041971e-5,2.484844677700392e-8,-0.0010992250658169746,4.1472215284716905e-5,2.4992557013455944e-8,-0.0010991556460179283,4.1574464276116506e-5,2.505058969589844e-8,-0.0010990652089385281,4.1527398961356164e-5,2.5026265284520233e-8,-0.001098898156768374,4.1375312448001e-5,2.4945200752454744e-8,-0.0010986280334354423,4.118167475058328e-5,2.484337320183111e-8,-0.0010982574815838655,4.100937470290851e-5,2.4755843824772127e-8,-0.0010978110406426043,4.090738485072404e-5,2.4709226856153248e-8,-0.0010973257121964122,4.0904499228446404e-5,2.471836767874099e-8,-0.0010968421791160742,4.10083665738254e-5,2.4786177550209052e-8,-0.0010963977347210852,4.120779805968306e-5,2.4905329142025246e-8,-0.0010960210677344888,4.147702335351955e-5,2.506090255556026e-8,-0.0010957289251758702,4.178110279291195e-5,2.5233456325869303e-8,-0.001095524697387541,4.2081778366454555e-5,2.540215364575196e-8,-0.0010953988246681838,4.2343079153780506e-5,2.5547670181248777e-8,-0.0010953307583887954,4.253610901231246e-5,2.5654681311269465e-8,-0.0010952920447938042,4.264254236325311e-5,2.571372890267199e-8,-0.0010952499739452775,4.2656633559821643e-5,2.5722338660353446e-8,-0.0010951713587064734,4.2585944785351156e-5,2.5685421940828945e-8,-0.0010950263137780906,4.245110365085979e-5,2.5615053368196092e-8,-0.001094792159453469,4.2284683294743016e-5,2.5529653777638224e-8,-0.0010944577225138132,4.212890345796607e-5,2.5452477208888395e-8,-0.0010940280855575993,4.2031223829935575e-5,2.5409021613321293e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json new file mode 100644 index 000000000..3a712547f --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":5000,"numberOfSamples":1000,"samples":[-0.001093528836966317,4.203642676149489e-5,2.5422725793163846e-8,-0.0010930072646208094,4.217440867148639e-5,2.5508574660559997e-8,-0.0010925265640548522,4.2445448281040656e-5,2.566549440168746e-8,-0.0010921498584701538,4.280927315836898e-5,2.5870776828536737e-8,-0.0010919163003251823,4.318794211770871e-5,2.6081780444674054e-8,-0.001091820523294629,4.348883154959585e-5,2.624831762871915e-8,-0.00109181029138295,4.364045659227296e-5,2.6331989440280285e-8,-0.0010918072934319603,4.362110831307491e-5,2.6321766949888615e-8,-0.0010917391971531742,4.346321105608486e-5,2.6236404835428295e-8,-0.0010915640090047574,4.323393624900339e-5,2.611370862534541e-8,-0.0010912766199280236,4.3007345034387695e-5,2.599493426705449e-8,-0.0010909009016498547,4.284299979150903e-5,2.5912727223068096e-8,-0.001090476431342811,4.277625215835485e-5,2.5885719367964947e-8,-0.0010900465218413144,4.2817753215300766e-5,2.5918503099339365e-8,-0.0010896499951765957,4.2957752709860237e-5,2.6004412180594708e-8,-0.0010893164869373976,4.3171842376795946e-5,2.612906955898042e-8,-0.0010890641035068592,4.34265580743787e-5,2.6273675178051805e-8,-0.0010888984776027527,4.3684563677071033e-5,2.6417842719480934e-8,-0.0010888129019089097,4.3909513777838174e-5,2.65421057988998e-8,-0.0010887895341848287,4.407054827337014e-5,2.663018859077577e-8,-0.0010888016920848876,4.4146217427231046e-5,2.667102788931276e-8,-0.001088817192482838,4.4127450376416946e-5,2.6660363442769395e-8,-0.0010888024752733671,4.401909753500576e-5,2.6601590837686793e-8,-0.0010887270459753056,4.383981898364833e-5,2.65056658451493e-8,-0.0010885677996571497,4.362036647066958e-5,2.639002532249307e-8,-0.0010883129235325867,4.3400346577718806e-5,2.627658759927833e-8,-0.0010879651578661836,4.322346930498476e-5,2.6188934255361087e-8,-0.001087544097987234,4.313109216854214e-5,2.6148709458164907e-8,-0.001087086674855694,4.315374123594729e-5,2.617116796712862e-8,-0.001086644066498112,4.330094126455337e-5,2.6260046435218025e-8,-0.0010862728381159504,4.3551620609182124e-5,2.640284239026193e-8,-0.00108601928226965,4.38502022017017e-5,2.656903579292576e-8,-0.0010859001135970722,4.411523709589743e-5,2.6714781887700585e-8,-0.0010858889754997796,4.426383145393484e-5,2.6795876138844725e-8,-0.0010859203351680025,4.424423453619814e-5,2.6785128110422738e-8,-0.001085913618912209,4.4058578601592776e-5,2.668460538734044e-8,-0.001085805393800295,4.376072785978275e-5,2.6524487039470494e-8,-0.0010855708545136362,4.343117507166159e-5,2.6349304657863846e-8,-0.0010852250584937636,4.314592290426317e-5,2.620071963961655e-8,-0.0010848090868554553,4.295570916633156e-5,2.6105975798650347e-8,-0.001084372654611788,4.2880291469861494e-5,2.6074830737518084e-8,-0.0010839610398885847,4.291308032542563e-5,2.6102403255115617e-8,-0.0010836081790852113,4.302959653013973e-5,2.6174200961517643e-8,-0.0010833344520610171,4.3195574161869046e-5,2.6270850944433867e-8,-0.001083146945167361,4.3373198164366636e-5,2.637160337223827e-8,-0.0010830405767407777,4.352569954505452e-5,2.645674242392391e-8,-0.0010829995124754573,4.3621083270509026e-5,2.6509425138913995e-8,-0.001082998991414148,4.363548696163819e-5,2.6517334874121295e-8,-0.0010830078695757855,4.3556232067080865e-5,2.6474252100274967e-8,-0.0010829921546684827,4.338421730365343e-5,2.638134536379059e-8,-0.0010829195457739626,4.313495597945831e-5,2.6247737743075178e-8,-0.0010827645199852117,4.2837568459182473e-5,2.6089894868217516e-8,-0.0010825131481838203,4.2531405839397756e-5,2.5929625306960433e-8,-0.0010821667257754604,4.2260415291339646e-5,2.5790800121408916e-8,-0.001081743391863589,4.2065789758412284e-5,2.5695202717475755e-8,-0.0010812771260442285,4.197779093233889e-5,2.5658116797976546e-8,-0.00108081368235774,4.2007788209395396e-5,2.5684279138019833e-8,-0.0010804030553122393,4.214188129809646e-5,2.5764875776401685e-8,-0.0010800884167244415,4.2338329128859495e-5,2.5876603076949472e-8,-0.001079892778156456,4.2531881372048156e-5,2.598424858567189e-8,-0.001079807154698478,4.264767562282009e-5,2.6048107274120274e-8,-0.0010797867060579334,4.262394191909685e-5,2.6035904077434437e-8,-0.001079760973783162,4.243610779021697e-5,2.593546226975552e-8,-0.0010796577282035234,4.210950720238184e-5,2.5761387251077892e-8,-0.00107942993302375,4.171117273294466e-5,2.555057096694696e-8,-0.001079071274203828,4.132383281774707e-5,2.5348037433669575e-8,-0.001078613065447523,4.101676275871758e-5,2.5191031444188244e-8,-0.0010781076445001167,4.082789625905243e-5,2.509930154443339e-8,-0.0010776094725232313,4.076147500814069e-5,2.507401361434535e-8,-0.0010771620659250866,4.079616385676292e-5,2.5102488709573008e-8,-0.001076792527426751,4.089624684549766e-5,2.5164595184415124e-8,-0.001076511483357941,4.102115014348993e-5,2.523807558214155e-8,-0.001076315486299618,4.1131846253385905e-5,2.530198861820359e-8,-0.00107618985214185,4.1194730844247526e-5,2.533864785318205e-8,-0.0010761111699562399,4.118418519494565e-5,2.5334821170315685e-8,-0.0010760496321073894,4.1084740905426734e-5,2.5282775112651636e-8,-0.0010759717151872302,4.089317638698599e-5,2.5181368331821842e-8,-0.0010758437806077928,4.062025720268964e-5,2.5037000465379675e-8,-0.001075636874965737,4.029124488214523e-5,2.4863872287821255e-8,-0.001075332344175619,3.994403311673042e-5,2.4682887122784044e-8,-0.0010749270772761371,3.962409533524119e-5,2.4518755050929554e-8,-0.0010744366625150808,3.937631781230898e-5,2.439541151761965e-8,-0.0010738948032005251,3.92350369958662e-5,2.433057466908826e-8,-0.0010733481764564313,3.9214698025557454e-5,2.433083409288902e-8,-0.0010728472503692334,3.930384295442124e-5,2.4388737863373705e-8,-0.0010724347731497891,3.94645175457536e-5,2.44828950313044e-8,-0.0010721343835682733,3.9638151634969455e-5,2.458148402653822e-8,-0.001071942205574794,3.9757775235519326e-5,2.4648932372444277e-8,-0.001071824440490328,3.976485588304506e-5,2.4654800605721794e-8,-0.0010717234455627444,3.962693202706781e-5,2.4582909766611626e-8,-0.0010715727554048086,3.935008138551149e-5,2.4437676459267312e-8,-0.0010713175244551965,3.8979848282591754e-5,2.4244352737564492e-8,-0.0010709326265880106,3.858785169979547e-5,2.4041693976913273e-8,-0.0010704300073954966,3.8248525783302696e-5,2.386941805332488e-8,-0.0010698520086136918,3.801636200014798e-5,2.375603419291011e-8,-0.0010692550526086402,3.791333074165718e-5,2.371227592816189e-8,-0.0010686922574283954,3.792939556885814e-5,2.3731673323543086e-8,-0.0010682017404291997,3.80320722103819e-5,2.379598347049132e-8,-0.0010678024504110503,3.8178531959137147e-5,2.3881867002065674e-8,-0.001067495548138812,3.832556322890049e-5,2.3966240581430207e-8,-0.001067268273277274,3.843582509864842e-5,2.4029501058277472e-8,-0.0010670980487706369,3.848102746680633e-5,2.4057051807740725e-8,-0.0010669558863532884,3.844342728250387e-5,2.4039967070581163e-8,-0.001066809160826231,3.8316803241082525e-5,2.3975457859135465e-8,-0.0010666243579828204,3.810746586828673e-5,2.386741669396789e-8,-0.0010663705574710293,3.7835149903862285e-5,2.3726898442079206e-8,-0.0010660241691441985,3.753288897009294e-5,2.3571997852970833e-8,-0.0010655747063436035,3.724442359481839e-5,2.3426335194630528e-8,-0.0010650302250668731,3.701779702157739e-5,2.331547794071486e-8,-0.0010644199291991467,3.68949742785659e-5,2.3261297539301097e-8,-0.001063791223981958,3.6899545236002384e-5,2.327544760228617e-8,-0.0010632000453968727,3.7026820203446666e-5,2.335429289972638e-8,-0.0010626963599818942,3.7241111127013385e-5,2.3477789197827204e-8,-0.0010623095681190381,3.748268981872828e-5,2.3613519575245354e-8,-0.0010620391726174265,3.768289862153553e-5,2.3724946388273585e-8,-0.0010618540779868658,3.7782581455481364e-5,2.3781234371721873e-8,-0.0010617006609737272,3.7748061352030124e-5,2.3765573920194672e-8,-0.0010615170480434892,3.758012724746697e-5,2.367965267011593e-8,-0.0010612495768359004,3.731371428715724e-5,2.3543130785882002e-8,-0.0010608669746345562,3.700835235428079e-5,2.3388256328231037e-8,-0.001060368182069979,3.6731912216637085e-5,2.325105313533104e-8,-0.0010597813426304625,3.654245594481344e-5,2.316169727120985e-8,-0.0010591544075762823,3.647402066316346e-5,2.313718174627855e-8,-0.0010585410167500333,3.653074230958909e-5,2.317853751683003e-8,-0.001057986920975386,3.669012758790272e-5,2.327290785733631e-8,-0.0010575211579176061,3.691257472653399e-5,2.339881300069309e-8,-0.001057153350837812,3.715260399430297e-5,2.3532138314401993e-8,-0.0010568758374386459,3.736812754225494e-5,2.365093104713143e-8,-0.0010566681914793606,3.752620921432137e-5,2.3738273286109503e-8,-0.0010565020401735535,3.760563844652094e-5,2.378349597906288e-8,-0.0010563451015339039,3.759754719033252e-5,2.3782437194464704e-8,-0.0010561643423562313,3.750528822528541e-5,2.3737377447389552e-8,-0.001055928777775758,3.734426906295574e-5,2.365696343832137e-8,-0.0010556126783150875,3.714173971895337e-5,2.3556054900511646e-8,-0.0010551998123746519,3.693577609363618e-5,2.3455071168099988e-8,-0.0010546886977346502,3.677200754758798e-5,2.3378106802298378e-8,-0.001054097575413405,3.66964742503015e-5,2.33490503669857e-8,-0.001053466266416154,3.674410830929957e-5,2.338552532428398e-8,-0.0010528513171096396,3.6925144473778674e-5,2.3491902560416617e-8,-0.0010523125721679219,3.721530665965493e-5,2.365441113669717e-8,-0.0010518941136466624,3.7556866487537555e-5,2.384196911473466e-8,-0.001051607652331739,3.787365765176419e-5,2.4014260649323585e-8,-0.0010514271013640408,3.809514403546298e-5,2.4134458275138142e-8,-0.001051297410707953,3.8178799703989044e-5,2.4180962088243847e-8,-0.001051153003686843,3.812136015142763e-5,2.415318391268279e-8,-0.00105093733776516,3.795628189484318e-5,2.4069945427589834e-8,-0.001050616809646753,3.7741095264425834e-5,2.396246019827039e-8,-0.0010501863481547247,3.754067586859115e-5,2.3865199592522806e-8,-0.0010496673073456411,3.7411575394765774e-5,2.380750812194908e-8,-0.0010490998191358019,3.739064048823195e-5,2.380774834712807e-8,-0.0010485322021737509,3.748944550858809e-5,2.38707245777141e-8,-0.0010480100257824426,3.769477583367159e-5,2.398835336975793e-8,-0.0010475672083879396,3.797425178348991e-5,2.4142928600404912e-8,-0.0010472208647171518,3.8285082197056416e-5,2.4311824887822292e-8,-0.0010469704046910332,3.858335909600687e-5,2.4472287017073512e-8,-0.0010468001087383734,3.883168894481607e-5,2.4605240478689e-8,-0.0010466836675630368,3.900401645641016e-5,2.469763622155349e-8,-0.0010465891449321784,3.9087623690885925e-5,2.4743396088065535e-8,-0.00104648333056439,3.908308679776768e-5,2.4743374271449885e-8,-0.0010463351903678341,3.900321589613522e-5,2.4704818833201865e-8,-0.0010461187174899236,3.887169112109677e-5,2.4640634398441143e-8,-0.0010458157657489216,3.872153411276594e-5,2.456847676636226e-8,-0.0010454194198092652,3.8592904649491364e-5,2.4509434847279802e-8,-0.0010449379598351336,3.85290470767447e-5,2.4485769249212857e-8,-0.0010443983417922637,3.8568960460999586e-5,2.4517067123617403e-8,-0.0010438466104127784,3.8736263817727636e-5,2.4614598497805885e-8,-0.0010433416549984493,3.902636136480175e-5,2.477493404220497e-8,-0.0010429399987465788,3.9398027050649106e-5,2.4975871277955936e-8,-0.0010426746362297934,3.9777843434769186e-5,2.5178904654138547e-8,-0.0010425380922074639,4.0081503788804406e-5,2.5340291710930592e-8,-0.0010424814444555638,4.0244644241275436e-5,2.5427023133151833e-8,-0.0010424322947735387,4.024690202392131e-5,2.5429321392407133e-8,-0.0010423219582340482,4.01162830340403e-5,2.5362869290134385e-8,-0.0010421073140257824,3.9914219183457514e-5,2.526080398688154e-8,-0.0010417790504298643,3.9712303792083824e-5,2.5161204349048078e-8,-0.001041357514815806,3.957206053756882e-5,2.509620077309175e-8,-0.0010408820867983744,3.953305791576254e-5,2.5085701841939114e-8,-0.0010403994183290342,3.960922925354849e-5,2.5135719972456448e-8,-0.001039953473752625,3.979097235888994e-5,2.5239903766051643e-8,-0.0010395783534878653,4.005056096735985e-5,2.538278306056733e-8,-0.0010392939602767437,4.034918264408066e-5,2.5543680164653243e-8,-0.001039104389012981,4.0644480901831106e-5,2.5700644896490313e-8,-0.0010389988421567525,4.089757785496551e-5,2.5833941072896978e-8,-0.0010389545970551956,4.107865514075927e-5,2.5928726316951552e-8,-0.0010389412824983889,4.11705030871186e-5,2.5976731161695342e-8,-0.001038925600905446,4.116986580467381e-5,2.5976894786312716e-8,-0.0010388757116827172,4.108687415422475e-5,2.5935077860987764e-8,-0.0010387648487817887,4.094320887370908e-5,2.586310945168862e-8,-0.0010385741873378635,4.0769583233729096e-5,2.5777407288912374e-8,-0.0010382952268426782,4.0602784133407614e-5,2.569728649515853e-8,-0.0010379320091739295,4.04820837611387e-5,2.564292327050562e-8,-0.0010375031926033312,4.0444330838904017e-5,2.56327270085341e-8,-0.0010370431136598767,4.0516825192555824e-5,2.5679750881275533e-8,-0.0010365998252919112,4.07078727032145e-5,2.5787103029239512e-8,-0.0010362274507746704,4.0997023108730364e-5,2.59432896351184e-8,-0.0010359711779905647,4.133023718538513e-5,2.6120005918730713e-8,-0.0010358476721283505,4.1627586877103866e-5,2.6276137158887212e-8,-0.0010358308191826967,4.180745449119192e-5,2.6370052259346927e-8,-0.0010358552027499252,4.18193769451226e-5,2.6376375102413223e-8,-0.0010358403135057738,4.166678727036104e-5,2.6297719124715485e-8,-0.0010357228189093813,4.140456572009227e-5,2.6163449539399887e-8,-0.0010354780401623975,4.111391003936417e-5,2.6016503918615263e-8,-0.0010351214402610947,4.0871490524131414e-5,2.5897043112633257e-8,-0.0010346952781462417,4.0728626709958974e-5,2.5831362930703574e-8,-0.0010342513894169626,4.070496768499591e-5,2.582864079884688e-8,-0.0010338376130666347,4.0792468598692156e-5,2.588333975697396e-8,-0.001033489928572441,4.09637112677769e-5,2.5979990127741127e-8,-0.0010332292836012598,4.118057987218832e-5,2.6098059615421084e-8,-0.0010330613284611158,4.140165888760393e-5,2.6215931638488723e-8,-0.0010329777530100068,4.158819846524718e-5,2.631390656871405e-8,-0.0010329586810779521,4.170886241656704e-5,2.6376437158564403e-8,-0.001032975936317296,4.1743274993385874e-5,2.6393736765147437e-8,-0.0010329969885598913,4.168421213030391e-5,2.636277559384442e-8,-0.0010329892783965391,4.153821954893292e-5,2.62875676595281e-8,-0.0010329244588995863,4.132454750884092e-5,2.6178635261370543e-8,-0.001032782060381272,4.10726094101633e-5,2.6051674387741775e-8,-0.0010325522769319654,4.0818357819433007e-5,2.5925576579428118e-8,-0.0010322377709549141,4.0599882712942876e-5,2.5819988038191913e-8,-0.0010318544785740738,4.045240035953763e-5,2.575258468299546e-8,-0.001031431325710975,4.0402610592020545e-5,2.5736166079833738e-8,-0.0010310082903914864,4.04622844238969e-5,2.577556155474702e-8,-0.0010306315696239265,4.062155526853457e-5,2.586455506912295e-8,-0.0010303445107737654,4.084394736602622e-5,2.5983723580936618e-8,-0.00103017415051348,4.106712011714914e-5,2.6101034286724267e-8,-0.00103011645990442,4.121429379152592e-5,2.617762452180817e-8,-0.0010301283373702107,4.1218183604357294e-5,2.617978519094077e-8,-0.0010301360479824519,4.1049891214193474e-5,2.6093535091742128e-8,-0.0010300617418679534,4.073592787552085e-5,2.5933314593629573e-8,-0.0010298552834028627,4.0349707833675383e-5,2.5737635695545288e-8,-0.0010295123624857808,3.9981058901976845e-5,2.555325702866578e-8,-0.0010290699371210256,3.970266737753418e-5,2.541762182017323e-8,-0.0010285862799355606,3.95510226577242e-5,2.5348871652570656e-8,-0.001028119665030133,3.952567217658717e-5,2.5345604153804084e-8,-0.0010277146398166707,3.9599592103778894e-5,2.5392608827923747e-8,-0.0010273969445857086,3.9732019239784237e-5,2.54679029136312e-8,-0.0010271741439923543,3.987889635605635e-5,2.554837330653049e-8,-0.0010270387420002831,3.999979218338487e-5,2.5613362144150908e-8,-0.0010269717730998133,4.006209216467498e-5,2.564665439659544e-8,-0.0010269462335600545,4.004361181148552e-5,2.563758062373979e-8,-0.001026930475247916,3.993429582593155e-5,2.5581696150718296e-8,-0.0010268917955752411,3.9737131056284514e-5,2.54811632465487e-8,-0.0010268003254188763,3.946803547779058e-5,2.5344696049297998e-8,-0.001026633045285693,3.9154302349015926e-5,2.51867793373167e-8,-0.001026377413673644,3.883136780108241e-5,2.502596843310329e-8,-0.0010260339595217747,3.8538067531633994e-5,2.4882331374804033e-8,-0.00102561729797183,3.8310807330376756e-5,2.477430480252826e-8,-0.0010251551932449294,3.8177261675103885e-5,2.471538175976041e-8,-0.001024685487708184,3.8150384280356484e-5,2.4711128828705612e-8,-0.0010242508292970316,3.822352571453758e-5,2.475696413222644e-8,-0.0010238910923221203,3.836763523516221e-5,2.4837113045173785e-8,-0.0010236336767047106,3.853222377882937e-5,2.492543131105467e-8,-0.0010234830537858264,3.865239008611646e-5,2.49891058187856e-8,-0.0010234129983969168,3.8663590948988006e-5,2.4996031285257513e-8,-0.0010233670245726736,3.852273512816904e-5,2.492524814844594e-8,-0.001023271959887443,3.822833359285693e-5,2.4776942964655382e-8,-0.0010230632432314934,3.782769524653137e-5,2.4575998844550145e-8,-0.0010227107525744934,3.740279961889332e-5,2.436473371991324e-8,-0.0010222302402959167,3.703969137491942e-5,2.418716232193019e-8,-0.0010216740030515826,3.6798124988745376e-5,2.4073362152007457e-8,-0.001021108290579188,3.669683896443461e-5,2.4031974626159863e-8,-0.0010205912572348655,3.6717350983459955e-5,2.4052398420585333e-8,-0.0010201604372997207,3.681830406381751e-5,2.411249122180296e-8,-0.0010198303307530497,3.6950727918991715e-5,2.418666800590093e-8,-0.0010195960756659162,3.706898533184759e-5,2.4251597017513103e-8,-0.001019439056359185,3.713670445797552e-5,2.4289132019925126e-8,-0.001019332059571601,3.7129221763336125e-5,2.428734485125245e-8,-0.0010192433493335681,3.70343141516297e-5,2.4240686043212892e-8,-0.0010191400194511332,3.685229866278754e-5,2.4149908608415946e-8,-0.0010189911883879065,3.659580376531763e-5,2.402192783224623e-8,-0.0010187714343872375,3.628895436908966e-5,2.3869435845986977e-8,-0.0010184645132939021,3.596533710163379e-5,2.3709873676371996e-8,-0.001018066855839815,3.566412672527142e-5,2.3563393719128077e-8,-0.0010175898667280023,3.542425031334137e-5,2.3449761052332165e-8,-0.0010170599390659412,3.5277162817117435e-5,2.3384558945173422e-8,-0.001016515394012989,3.523949770501541e-5,2.3375440811865953e-8,-0.0010160002224420199,3.530738001007149e-5,2.3419397704779323e-8,-0.0010155553831384591,3.545419198619564e-5,2.3501928264935122e-8,-0.001015209142874551,3.563302488615149e-5,2.3598624983890202e-8,-0.0010149684067089226,3.5784346527384886e-5,2.3679292211144022e-8,-0.0010148133891465872,3.584860072421633e-5,2.3714344288769612e-8,-0.0010146982630651578,3.5782055660811007E-05,2.3682629377636572e-8,-0.0010145599654888093,3.557207326886522e-5,2.3578848270284908e-8,-0.0010143351722388912,3.5245823371830506e-5,2.3417678410022003e-8,-0.0010139811800521554,3.486632047924191e-5,2.3231576085062046e-8,-0.001013492050599654,3.4513974439642034e-5,2.3061330561170134e-8,-0.0010129013184621315,3.4259974954934804e-5,2.2942555475658693e-8,-0.0010122691652813616,3.4143842428325755e-5,2.289440024171102e-8,-0.001011660964001645,3.416527319904436e-5,2.291564249859294e-8,-0.0010111280235503381,3.429134318278579e-5,2.2988645742694414e-8,-0.0010106976785511353,3.447205752042876e-5,2.3087503664077148e-8,-0.0010103730798261847,3.465571175252602e-5,2.3185940039964153e-8,-0.0010101387428839818,3.479919616418346e-5,2.3262469964226124e-8,-0.0010099675794849883,3.487271276682596e-5,2.3302608900919384e-8,-0.0010098269209837737,3.4860699206272e-5,2.3299134968487392e-8,-0.0010096829020666328,3.476102080226269e-5,2.3251535621906485e-8,-0.0010095036482449427,3.4583741581220033e-5,2.316533851284319e-8,-0.00100926202814437,3.434990375649573e-5,2.3051517011118484e-8,-0.0010089385902406682,3.409004467856952e-5,2.2925769286763956e-8,-0.0010085248696185096,3.384168830235557e-5,2.2807227493595864e-8,-0.0010080265806791115,3.3644931550302674e-5,2.2716140262856692e-8,-0.0010074654828322916,3.353571640167953e-5,2.26703687608163e-8,-0.0010068782778092742,3.353743271134205e-5,2.268110345686206e-8,-0.0010063112194841138,3.36528689313314e-5,2.274888894220196e-8,-0.0010058104572475534,3.3859569732431347e-5,2.286150383963712e-8,-0.0010054101212326877,3.411145176628525e-5,2.2995062591133473e-8,-0.0010051217418514823,3.434769733360527e-5,2.3118734876600543e-8,-0.0010049287823506632,3.450726125747007e-5,2.3202145373587556e-8,-0.0010047886815621875,3.454511779650876e-5,2.3223469127649264e-8,-0.001004642523791172,3.444551550645358e-5,2.317587375654054e-8,-0.0010044301777682276,3.4228082912857005e-5,2.307029016040388e-8,-0.0010041070053985303,3.394428660482434e-5,2.293333606477324e-8,-0.0010036572007801948,3.366424530591849e-5,2.280046957873214e-8,-0.0010030989670374397,3.3457142010512746e-5,2.2706067870780697e-8,-0.001002478977520436,3.3371580578821594e-5,2.2673661179006083e-8,-0.0010018578283530568,3.342312200493025e-5,2.2709939398912565e-8,-0.0010012922882052613,3.359334378293894e-5,2.2804621910948108e-8,-0.0010008212275209021,3.3839363188058443e-5,2.2935524319804295e-8,-0.0010004594328713067,3.410840614322706e-5,2.3076001992787873e-8,-0.0010001992187818722,3.4351274842747164e-5,2.320166356575127e-8,-0.0010000167281470184,3.453101661995363e-5,2.3294552412610813e-8,-9.998793317252265e-4,3.462633409658824e-5,2.3344654270450874e-8,-9.997518470452732e-4,3.4631318428131296e-5,2.3349607127017085e-8,-9.996009199043014e-4,3.455348552109253e-5,2.3313647478180466e-8,-9.9939795849614e-4,3.44114906802232e-5,2.3246470434010358e-8,-9.99121407187035e-4,3.4233040893128126e-5,2.3162210737379513e-8,-9.987590833800812e-4,3.405276743515656e-5,2.3078368950141786e-8,-9.983108679056524e-4,3.390926822320403e-5,2.3014265042933495e-8,-9.97791306534957e-4,3.384032770146051e-5,2.2988554306834156e-8,-9.972307991430098e-4,3.3875718713881964e-5,2.3015580148524872e-8,-9.966733564831009e-4,3.4028221102158114e-5,2.310094837163757e-8,-9.961691020362934e-4,3.428546408696686e-5,2.3237638825588425e-8,-9.957615865134595e-4,3.46069401339788e-5,2.3404762682669036e-8,-9.954733186501152e-4,3.493021100327155e-5,2.357086532821176e-8,-9.952956330342465e-4,3.5186762200118035e-5,2.370192787102682e-8,-9.95188477807128e-4,3.532262383638006e-5,2.377162507367407e-8,-9.950913872963697e-4,3.5315508210565336e-5,2.376975873492727e-8,-9.94941500795456e-4,3.518154860532421e-5,2.3705430116577784e-8,-9.946916452042978e-4,3.496972133573339e-5,2.3603993034892922e-8,-9.943224955306555e-4,3.4747072949003844e-5,2.3499389344168517e-8,-9.938459958236127e-4,3.458033160070616e-5,2.3424766870853507e-8,-9.933002965673123e-4,3.451936283405707e-5,2.3404222600228282e-8,-9.92738532106868e-4,3.4586492210376424e-5,2.34477123751599e-8,-9.922149570488884e-4,3.47737697346077e-5,2.35500702634693e-8,-9.917723365169562e-4,3.504802300243e-5,2.369389615669735e-8,-9.91433801696836e-4,3.536137626092322e-5,2.385500900287136e-8,-9.912006576782077e-4,3.566352992413874e-5,2.4008564476421496e-8,-9.910555099664157e-4,3.591217265700787e-5,2.4134077453991628e-8,-9.909685467225334e-4,3.607935109184319e-5,2.4218367354514807e-8,-9.90904493799253e-4,3.615353059249766e-5,2.4256393376223053e-8,-9.90828480212809e-4,3.613845925610944e-5,2.4250587005171246e-8,-9.90710154736621e-4,3.605041340979941e-5,2.420946428455628e-8,-9.905262925749175e-4,3.5915102415850375e-5,2.4146106990416895e-8,-9.902625674466235e-4,3.576480559520487e-5,2.407673810359449e-8,-9.899151595612757e-4,3.563558997580312e-5,2.4019285840091026e-8,-9.894925239248037e-4,3.556393259086711e-5,2.399161892926978e-8,-9.890169789091286e-4,3.558183032668142e-5,2.400906596769323e-8,-9.885248529442735e-4,3.570977187754583e-5,2.4080982598891237e-8,-9.880631022206629e-4,3.594816942793109e-5,2.4206693186517794e-8,-9.876803749587692e-4,3.6270078383065484e-5,2.4372152484305683e-8,-9.874125517596248e-4,3.662032117452578e-5,2.4549731590826265e-8,-9.872671120179847e-4,3.6926008414473374e-5,2.470348797116585e-8,-9.872146960178598e-4,3.7118461255131244e-5,2.4799926090503432e-8,-9.871951531337715e-4,3.715829143129886e-5,2.482028574407889e-8,-9.871375620403313e-4,3.705077677427379e-5,2.476806781996489e-8,-9.869847448893906e-4,3.684329236067619e-5,2.466765451933042e-8,-9.867105450566658e-4,3.660725536650436e-5,2.4555140657066402e-8,-9.86323904247596e-4,3.641469724773145e-5,2.4466432455541804e-8,-9.858615016007492e-4,3.631928880259697e-5,2.442766534764061e-8,-9.85374633250025e-4,3.634645237112784e-5,2.4450388419430107e-8,-9.849156337300748e-4,3.649235218034662e-5,2.453139904021426e-8,-9.845270231932197e-4,3.672923823051199e-5,2.465582036281864e-8,-9.842346708626541e-4,3.7014300862134964e-5,2.4801822245291615e-8,-9.840451716688692e-4,3.729969081586018e-5,2.4945700886248175e-8,-9.839470708571595e-4,3.754181375466232e-5,2.5066377411016933e-8,-9.839150653915634e-4,3.770836043790428e-5,2.514864253568232e-8,-9.83915845150665e-4,3.778218739727299e-5,2.5184832131647895e-8,-9.839141440703577e-4,3.776204586365129e-5,2.5175023720621267e-8,-9.838778946578378e-4,3.7660825559131726e-5,2.5126110722890017e-8,-9.837819111355383e-4,3.750231363693385e-5,2.5050212268447694e-8,-9.83610120160167e-4,3.731747931219535e-5,2.4962853060990782e-8,-9.833567922937184e-4,3.714089212336408e-5,2.4881163070795294e-8,-9.830272886633775e-4,3.700727412351498e-5,2.4822096717103307e-8,-9.826385911278707e-4,3.69477424015823e-5,2.4800505830703303e-8,-9.82219396284537e-4,3.698509836147771e-5,2.4826830050034716e-8,-9.818087670899545e-4,3.712771767756578e-5,2.4904243886600084e-8,-9.814515702841564e-4,3.7362648046258683e-5,2.5025539421476875e-8,-9.811889802018954e-4,3.7650571338024e-5,2.5170939795615703e-8,-9.810442154511204e-4,3.792755371116602e-5,2.5309102919604293e-8,-9.810080333830023e-4,3.811864493199592e-5,2.5403711739960307e-8,-9.81033207624282e-4,3.8163102204115404e-5,2.5425633123846726e-8,-9.810462359989666e-4,3.804100654306584e-5,2.5365828059548833e-8,-9.809743731534347e-4,3.778505688611488e-5,2.524112956896296e-8,-9.807739041156364e-4,3.746843502401319e-5,2.508825210734586e-8,-9.804438663459916e-4,3.717577379911337e-5,2.4949313572355698e-8,-9.800204118408863e-4,3.697428727925494e-5,2.485733884169189e-8,-9.795593431768212e-4,3.6897909348930136e-5,2.4828320900585492e-8,-9.791176972697106e-4,3.694613487266822e-5,2.4860822858248447e-8,-9.78740821256568e-4,3.709208601691692e-5,2.4940346749398108e-8,-9.784561041063255e-4,3.7293678129001164e-5,2.5045249521682385e-8,-9.782718489133458e-4,3.7504071244625615e-5,2.5152145120602866e-8,-9.781792758595254e-4,3.7679941882763186e-5,2.5239992535436655e-8,-9.781562333794412e-4,3.778745647138105e-5,2.5292850462091087e-8,-9.781718882523143e-4,3.780606999115621e-5,2.530147602469855e-8,-9.781918620216884e-4,3.773013883351006e-5,2.5263886480747403e-8,-9.781832167389938e-4,3.7568458080856365e-5,2.518501010675023e-8,-9.78118742072559e-4,3.7342042791065954e-5,2.507558218052921e-8,-9.779801236071979e-4,3.708061130398327e-5,2.4950452157285786e-8,-9.777597868775496e-4,3.681839353569755e-5,2.4826535622686178e-8,-9.774615375963498e-4,3.6589861622145944e-5,2.47206704952449e-8,-9.771002958644923e-4,3.642562803302159e-5,2.464752335844287e-8,-9.767011177636903e-4,3.6348412775412787e-5,2.461757103592887e-8,-9.762974059618317e-4,3.636884684333104e-5,2.463512177599872e-8,-9.759277035517238e-4,3.648101405343806e-5,2.4696356361916733e-8,-9.75629951246629e-4,3.665840901177218e-5,2.4787660934629145e-8,-9.754322748465593e-4,3.685252659570957e-5,2.4885193908702775e-8,-9.75340987613693e-4,3.699788916582287e-5,2.495739454375517e-8,-9.753299684090048e-4,3.702722840929396e-5,2.4972198717358794e-8,-9.753395265608093e-4,3.689599167738356e-5,2.490869287630752e-8,-9.752920720559031e-4,3.6606102877796636e-5,2.4768523544825133e-8,-9.751219280535475e-4,3.62127126348543e-5,2.457919604533296e-8,-9.748035378869218e-4,3.580501071706199e-5,2.4384716721739845e-8,-9.743604317943561e-4,3.5470563709328834E-05,2.4228018734390125e-8,-9.738510761405169e-4,3.526450154078282e-5,2.4135686744524703e-8,-9.733435765106256e-4,3.519840608946445e-5,2.411249078547065e-8,-9.728943634004211e-4,3.5247780682422384e-5,2.4145284649450995e-8,-9.725377477092212e-4,3.536768335651393e-5,2.4211049479849402e-8,-9.722848444423038e-4,3.550754893515966e-5,2.428448154165182e-8,-9.72127563371285e-4,3.562150854076412e-5,2.4343174928178926e-8,-9.720441769973178e-4,3.567417242302132e-5,2.437035998268252e-8,-9.720046367152485e-4,3.56432887461309e-5,2.4355963585866076e-8,-9.719752390974952e-4,3.552063301357858e-5,2.4296779131561367e-8,-9.719228596586245e-4,3.531171554305102e-5,2.4196141313711178e-8,-9.718188423673552e-4,3.503437202507118e-5,2.406317927089353e-8,-9.716423998941957e-4,3.471621408885309e-5,2.3911605715671775e-8,-9.713832408989576e-4,3.439096166140005e-5,2.3757978780585042e-8,-9.710430366130846e-4,3.409389102193965e-5,2.361948593481193e-8,-9.70635446133547e-4,3.3856923351839665e-5,2.3511491505683215e-8,-9.701846919981149e-4,3.370390574741038e-5,2.3445165212560717e-8,-9.697228228770885e-4,3.364647614797688e-5,2.342546325722505e-8,-9.692857745624962e-4,3.368081166293388e-5,2.3449670440655165e-8,-9.689081926968012e-4,3.378557365972413e-5,2.3506650641077334e-8,-9.686168099705691e-4,3.392170644199995e-5,2.357703705485365e-8,-9.684224658620934e-4,3.4035563171401795e-5,2.3634937383161203e-8,-9.68312113340623e-4,3.406746818840269e-5,2.3652061632635778e-8,-9.682443258694862e-4,3.396706662113197e-5,2.3604922859051918e-8,-9.681538286062369e-4,3.371329935534211e-5,2.348419799835916e-8,-9.679692761326831e-4,3.333058404686902e-5,2.330235800983941e-8,-9.676407409410866e-4,3.2888734991917684e-5,2.3093584924486144e-8,-9.671629996624705e-4,3.2480309923178234e-5,2.2902797651000153e-8,-9.665791080763037e-4,3.2184835146996645e-5,2.276825671546724e-8,-9.659613244934983e-4,3.204046428493923e-5,2.270778086296016e-8,-9.653822640887052e-4,3.203767611505963e-5,2.2715798323767404e-8,-9.648929276683705e-4,3.213287335072607e-5,2.2770213229558723e-8,-9.645149837962753e-4,3.226903530996189e-5,2.2842729866168465e-8,-9.642442355567376e-4,3.239247708087407e-5,2.2907171397624284e-8,-9.640587530216115e-4,3.24620993246358e-5,2.2943963859402317e-8,-9.639270001539048e-4,3.245248074250296e-5,2.2941464499432092e-8,-9.638140578411377e-4,3.235353569481727e-5,2.2895550510650823e-8,-9.6368595444148e-4,3.2168912493880215e-5,2.28086319018673e-8,-9.635128997527551e-4,3.191410788621952e-5,2.2688634455621677e-8,-9.632720633656184e-4,3.161432337084309e-5,2.2547969983926774e-8,-9.629500908473864e-4,3.1301728190777524e-5,2.2402276055104036e-8,-9.625451789726969e-4,3.101176374193039e-5,2.226867575507521e-8,-9.620681774777247e-4,3.077836455776551e-5,2.216345368450055e-8,-9.615420329416084e-4,3.0628500411465295e-5,2.209935540113096e-8,-9.609991467969121e-4,3.057690888665009e-5,2.2082994490797295e-8,-9.604766797714861e-4,3.062205911343596e-5,2.2112942498469528e-8,-9.600102747775835e-4,3.074434601472043e-5,2.2179018433807102e-8,-9.596270214263777e-4,3.090724439259373e-5,2.2263089974248304e-8,-9.593386562986945e-4,3.1061771792007744e-5,2.2341454918293274e-8,-9.591361349101454e-4,3.1154428547892235e-5,2.2388764734143828e-8,-9.589871735461636e-4,3.113854434292479e-5,2.2383389507898628e-8,-9.588390052667267e-4,3.0987899671081076e-5,2.23137088373979e-8,-9.586285812047179e-4,3.0709291166627064e-5,2.2183841699676357e-8,-9.583004549904042e-4,3.034807980718291e-5,2.20160808943815e-8,-9.578277490469907e-4,2.9980170319710332e-5,2.1846942684937246e-8,-9.572262091683876e-4,2.968886340238766e-5,2.1716059377740093e-8,-9.565515092747311e-4,2.953507814969651e-5,2.1651963566920276e-8,-9.558790138711099e-4,2.9536365304518656e-5,2.166217296734255e-8,-9.552767930981623e-4,2.9665583334704913e-5,2.173278583758932e-8,-9.547860467171304e-4,2.9867061406297094e-5,2.1836474927304304e-8,-9.544158266696612e-4,3.0078540975903094e-5,2.1943173400982044e-8,-9.541492278461368e-4,3.024805141205629e-5,2.20281932369835e-8,-9.539540335951516e-4,3.034185193150517e-5,2.2075920768301698e-8,-9.537924048895253e-4,3.0345247140230987e-5,2.208000983233228e-8,-9.536275311546465e-4,3.025982229495277e-5,2.204185499562896e-8,-9.534275077413425e-4,3.0099841725022342e-5,2.1968736705240954e-8,-9.531675967845711e-4,2.9889041402266785e-5,2.187225621318765e-8,-9.528318988517542e-4,2.9657867759765324e-5,2.1767059789256722e-8,-9.524149404686213e-4,2.9440645440285744e-5,2.1669541941369942e-8,-9.519231274636026e-4,2.9272003957849185e-5,2.1596154336982085e-8,-9.513754532627277e-4,2.9182105324352853e-5,2.156109047838405e-8,-9.508024505321581e-4,2.9190878090889825e-5,2.1573483188737836e-8,-9.502424663511357e-4,2.9302351813132366e-5,2.1634700321363326e-8,-9.49735030418587e-4,2.9500882232911995e-5,2.1736638845838566e-8,-9.493122042363756e-4,2.975120128025421e-5,2.1861931766478845e-8,-9.489899450602254e-4,3.0003488125871785e-5,2.19865714491652e-8,-9.487620601966599e-4,3.020311750055373e-5,2.2084695992892515e-8,-9.485988957950232e-4,3.030316317880326e-5,2.2134553407674564e-8,-9.484518091654521e-4,3.0276810472256283e-5,2.2124270364054122e-8,-9.482632222856166e-4,3.0126538386465414e-5,2.205597301242971e-8,-9.479807554179524e-4,2.9887047408005317e-5,2.194689841841948e-8,-9.475724436270446e-4,2.961960692398054e-5,2.1826477535904775e-8,-9.470384606933393e-4,2.9397309036501518e-5,2.1729216202936675e-8,-9.464140919087501e-4,2.9284117233135745e-5,2.168479093152599e-8,-9.457607135250013e-4,2.931474722874649e-5,2.1708699518209903e-8,-9.451468703045619e-4,2.948415363474355e-5,2.179756824154432e-8,-9.446272642077682e-4,2.975166154093429e-5,2.19313942223417e-8,-9.442287741878977e-4,3.005706659105484e-5,2.2081348790756766e-8,-9.439480612138644e-4,3.0340177706433605e-5,2.2219059244211306e-8,-9.437587330039747e-4,3.05555047742844e-5,2.232346391891961e-8,-9.436224123828684e-4,3.0678595514250895e-5,2.2383640253534496e-8,-9.434987028230832e-4,3.0705355294702186e-5,2.2398300631400305e-8,-9.433518093842979e-4,3.0647746413302585e-5,2.2373619930447855e-8,-9.431539596951896e-4,3.052879162175852e-5,2.2320812424416252e-8,-9.42886827941632e-4,3.0378337056025078e-5,2.2254139731918605e-8,-9.425421763466582e-4,3.0229750427711546e-5,2.2189391361884014e-8,-9.421224563862095e-4,3.011700715597695e-5,2.2142531937943215e-8,-9.416414774327706e-4,3.0071346469157127e-5,2.212810620989906e-8,-9.411245660268458e-4,3.0116816661240038e-5,2.215710354642401e-8,-9.406070615964384e-4,3.026467552618603e-5,2.2234316233793085e-8,-9.40129838692488e-4,3.050774422637882e-5,2.2355753528190237e-8,-9.397312194328286e-4,3.0817081031483444e-5,2.2507225708871276e-8,-9.394363651629871e-4,3.1143952690525606e-5,2.266544635054926e-8,-9.39247469629382e-4,3.14289902634384e-5,2.2802467253505157e-8,-9.391392811567771e-4,3.161734154321736e-5,2.28928419535772e-8,-9.390631834203985e-4,3.1675072753920046e-5,2.292128485717643e-8,-9.389595011470184e-4,3.160054917881444e-5,2.2887892684632222e-8,-9.38774017044829e-4,3.142629938669554e-5,2.2808821851867562E-08,-9.384731170441491e-4,3.121073248180759e-5,2.2712144428496986e-8,-9.380529653295315e-4,3.102263562512172e-5,2.2630329259409035e-8,-9.37540421932073e-4,3.0923179639618185e-5,2.2591680785415607e-8,-9.369857583175107e-4,3.095034383443137e-5,2.261312414301245e-8,-9.364492385837592e-4,3.1109898640259824e-5,2.269626110812058e-8,-9.359853619300495e-4,3.137546064701527e-5,2.2827755619925506e-8,-9.356295240548179e-4,3.16974681512932e-5,2.2983821119346855e-8,-9.353911527823038e-4,3.2017802198202046e-5,2.313717510433112e-8,-9.35254811672147e-4,3.228479107023496e-5,2.326399499414142e-8,-9.351875597689146e-4,3.2463820357644084e-5,2.3348709349042408e-8,-9.351488611202442e-4,3.2541398176328435e-5,2.338570291153537e-8,-9.350994833205346e-4,3.25234996917194e-5,2.3378386345866902e-8,-9.350074661012362e-4,3.2430678404906835e-5,2.333682380228043e-8,-9.348510276335349e-4,3.229243028857118e-5,2.3275080016553152e-8,-9.346193314669444e-4,3.214231620297721e-5,2.3208959235950077e-8,-9.34312262797197e-4,3.2014221186669155e-5,2.3154273367792384e-8,-9.339400414025882e-4,3.193933185076618e-5,2.3125418905859264e-8,-9.33522913696338e-4,3.194305448645945e-5,2.3133910756853474e-8,-9.330904862493931e-4,3.204115275895757e-5,2.3186578394138074e-8,-9.326796244283101e-4,3.223492294630654e-5,2.3283386135426127e-8,-9.323295184334296e-4,3.250635238251842e-5,2.3415326287966734e-8,-9.320730236673442e-4,3.281574833663746e-5,2.356349553000111e-8,-9.319252711366798e-4,3.310543782936856e-5,2.3700943505328696e-8,-9.318736216132645e-4,3.331219177128394e-5,2.3798471243414568e-8,-9.318752640651988e-4,3.338676318697942e-5,2.3833655432768257e-8,-9.31866963948998e-4,3.331301147491189e-5,2.3799668733206908e-8,-9.317849968972861e-4,3.311655040946259e-5,2.3709231637614105e-8,-9.315865645433877e-4,3.2857438239323513e-5,2.3591073380549135e-8,-9.312628626536916e-4,3.2610345594110236e-5,2.3480457903216238e-8,-9.308393005661033e-4,3.24417200448329e-5,2.3408301483171562e-8,-9.303651936824847e-4,3.239281090859414e-5,2.339318150193606e-8,-9.298986864069065e-4,3.24725338782039e-5,2.343818307136948e-8,-9.29492219127464e-4,3.265959531263871e-5,2.3532245846076462e-8,-9.291818021359038e-4,3.2911055999915944e-5,2.3654527540462002e-8,-9.289814804693926e-4,3.317408157338681e-5,2.3780107907133812e-8,-9.28883102878134e-4,3.339795710135585e-5,2.3885603751994195e-8,-9.288606081706539e-4,3.3543937048918637e-5,2.3953598676844333e-8,-9.288772589118661e-4,3.3591181371482934e-5,2.3975172255395918e-8,-9.288937419745458e-4,3.353814016920971e-5,2.395033272948154e-8,-9.288751893623011e-4,3.340004673214571e-5,2.3886721538417358e-8,-9.287959268978146e-4,3.320403594462646e-5,2.3797303763589087e-8,-9.286417064222096e-4,3.298355112980294e-5,2.369778683496962e-8,-9.284099392258089e-4,3.277328729013441e-5,2.3604298515993387e-8,-9.281087947963245e-4,3.260518664063019e-5,2.3531530406527254e-8,-9.277558922978596e-4,3.25053020042501e-5,2.3491259018736307e-8,-9.27376881127838e-4,3.2490978444289704E-05,2.349102519309791e-8,-9.270036743482587e-4,3.2567791005183e-5,2.3532761106056747e-8,-9.266715169341242e-4,3.2726055504754945e-5,2.361130945511728e-8,-9.264137151151058e-4,3.293770276831043e-5,2.3713172494102367e-8,-9.262532777753961e-4,3.315574465668824e-5,2.3816439311101114e-8,-9.261924253535585e-4,3.331972423030237e-5,2.389335984974595e-8,-9.262040127993932e-4,3.336992217268715e-5,2.3916815814377182e-8,-9.262317722939682e-4,3.326872605091641e-5,2.3870037451283865e-8,-9.26204733848964e-4,3.3020183443077696e-5,2.3755545743126395e-8,-9.260627882338456e-4,3.267485106444268e-5,2.3597373291928313e-8,-9.257806549268176e-4,3.2313603001887904e-5,2.343349628055146e-8,-9.253766285983505e-4,3.201794497161325e-5,2.3301884783205278e-8,-9.249026226141552e-4,3.1842977355389055e-5,2.3227766419155888e-8,-9.244236141866019e-4,3.1804942562237756e-5,2.321783898637054e-8,-9.239978305283136e-4,3.188429203691447e-5,2.3261932645223352e-8,-9.236643245273065e-4,3.203781785436325e-5,2.3339012154274225e-8,-9.234386977616611e-4,3.221281488408803e-5,2.3424069805742805e-8,-9.233147289125141e-4,3.235906739356297e-5,2.3493825767808208e-8,-9.232692914346888e-4,3.243722377144107e-5,2.3530540271546322e-8,-9.232686902572398e-4,3.242362191865267e-5,2.3524031114582375e-8,-9.232753070314963e-4,3.231198064538372e-5,2.347219924760264e-8,-9.232537561991422e-4,3.211234823824068e-5,2.3380345332508162e-8,-9.231758558037119e-4,3.1847866001873865e-5,2.3259584838009844e-8,-9.230239270817444e-4,3.155012781518374e-5,2.3124710835478002e-8,-9.227922362546493e-4,3.1253999746506684e-5,2.299185234886264e-8,-9.224867387452752e-4,3.0992724464646724e-5,2.2876250708263638e-8,-9.221236055597706e-4,3.079385597163362e-5,2.27903811393233e-8,-9.217270560533948e-4,3.067609570471294e-5,2.2742468990955336e-8,-9.213267796337176e-4,3.064680318714811e-5,2.2735346156833847e-8,-9.20954912564315e-4,3.0699934328855683e-5,2.2765581416612138e-8,-9.206421478418023e-4,3.08143607477365e-5,2.2822873109824424e-8,-9.204122660196305e-4,3.095320827010874e-5,2.2889943688910157e-8,-9.202747886912586e-4,3.106597764009101e-5,2.2943650815208422e-8,-9.20216936947342e-4,3.1095988189358365e-5,2.2958395502173376e-8,-9.201985234595585e-4,3.099497926622176e-5,2.2912665548665453e-8,-9.201557642877907e-4,3.074296687634402e-5,2.2797948208220792e-8,-9.200186966514138e-4,3.0364621739963786e-5,2.2626137511840795e-8,-9.197385636888824e-4,2.9929213138156976e-5,2.242949417390068e-8,-9.193108394574188e-4,2.9527970187913423e-5,2.225019669376877e-8,-9.187785340875029e-4,2.9238845703639758e-5,2.2123997801802605e-8,-9.182134225021054e-4,2.9098989670442113e-5,2.2067447146301895e-8,-9.176879830111815e-4,2.9098589555165532e-5,2.2075132170368005e-8,-9.17253784391652e-4,2.9193712335522423e-5,2.212586268610836e-8,-9.169332050515159e-4,2.932621852597383e-5,2.2192168520093514e-8,-9.167219505579218e-4,2.944065181810668e-5,2.224829932694638e-8,-9.165966656263807e-4,2.949439756587482e-5,2.2274934020959177e-8,-9.165233093736817e-4,2.9461840863147958e-5,2.226094758259148e-8,-9.164642868928159e-4,2.9334685108527463e-5,2.220331133229603e-8,-9.163839913645998e-4,2.9120232422900573e-5,2.2106066579955823e-8,-9.162530317647461e-4,2.883851348103519e-5,2.1978863978225656e-8,-9.160513185398048e-4,2.8518597058158136e-5,2.1835244906513958e-8,-9.15769988624412e-4,2.8194298243653313e-5,2.1690730238489156e-8,-9.154120664548803e-4,2.7899535170271005e-5,2.1560765750180442e-8,-9.149917488095805e-4,2.7663738874698725e-5,2.1458654195702416e-8,-9.145323801553542e-4,2.7507851429598272e-5,2.1393709233720136e-8,-9.140634112563936e-4,2.744128142921948e-5,2.136983448703116e-8,-9.136166435043148e-4,2.745994641856036e-5,2.1384644526880326e-8,-9.13221944692427e-4,2.754549808736449e-5,2.1429208794373388e-8,-9.129024910120398e-4,2.7665888640565562e-5,2.148847949703196e-8,-9.126694819496386e-4,2.7777706431344518e-5,2.154253176218981e-8,-9.125166098566058e-4,2.7831321553144563e-5,2.156899691685832e-8,-9.124157000485842e-4,2.7780165658292776e-5,2.1547232079309533e-8,-9.123165267733067e-4,2.759442992476146e-5,2.1464373542698462e-8,-9.121548623777333e-4,2.7276427140508372e-5,2.1322119221499095e-8,-9.118711019526034e-4,2.6870144591949852e-5,2.114094313683426e-8,-9.114350063079968e-4,2.6455006129514234e-5,2.0957209029743784e-8,-9.108634742462995e-4,2.6120092101343845e-5,2.081139801841706e-8,-9.102178200814272e-4,2.5929424367736944e-5,2.0732255869559906e-8,-9.095797117160946e-4,2.5898353086471822e-5,2.0726067368364644e-8,-9.090202329768966e-4,2.5993933266429337e-5,2.077699539719869e-8,-9.085793014011967e-4,2.615479802733407e-5,2.0856387709915296e-8,-9.082619863653898e-4,2.6315579246745158e-5,2.09341239475786e-8,-9.080467696016204e-4,2.6424152758084614e-5,2.098656643738969e-8,-9.078974977973308e-4,2.6448875948786817e-5,2.0999792057647626e-8,-9.077736775849799e-4,2.6378608518081082e-5,2.0969414117202983e-8,-9.076374388060467e-4,2.621931034153885e-5,2.089880711320176e-8,-9.074576563940846e-4,2.598981028468818e-5,2.0797007293920687e-8,-9.072123555606045e-4,2.5717763310892864e-5,2.067680801973962e-8,-9.068901702931364e-4,2.543581375595846e-5,2.055305287961445e-8,-9.064910919600087e-4,2.51777245706118e-5,2.044096225969404e-8,-9.060264239903059e-4,2.497429600456872e-5,2.0354350101638346e-8,-9.055176396903595e-4,2.4849147035049042e-5,2.0303725663131417e-8,-9.049938331462582e-4,2.48148520431951e-5,2.0294513960783498e-8,-9.044877759473634e-4,2.487013629166907e-5,2.0325761996341625e-8,-9.040309431041147e-4,2.4998716181532725e-5,2.0389648367651206e-8,-9.036480496186143e-4,2.5170219741609872e-5,2.0472012539751645e-8,-9.033517513971097e-4,2.534346091236584e-5,2.0553994872596846e-8,-9.031382345469437e-4,2.5472113323665762e-5,2.0614734900078757e-8,-9.029845516590252e-4,2.5512741628428336e-5,2.0635033273204925e-8,-9.028490149929373e-4,2.5434954827073677e-5,2.0601836238167363e-8,-9.026764902106563e-4,2.5232408447057923e-5,2.0513003051675774e-8,-9.02410173775587e-4,2.4931333305205534e-5,2.03809375747986e-8,-9.020092509206674e-4,2.459113424824214e-5,2.0232703367730958e-8,-9.014671775780341e-4,2.4291763948560345e-5,2.0104263036672917e-8,-9.008206650653747e-4,2.4108119510329703e-5,2.0028949316011377e-8,-9.001407652157997e-4,2.40815816794724e-5,2.002473027343289e-8,-8.995076036470077e-4,2.4204454860463047e-5,2.0087372224985797e-8,-8.989819618378563e-4,2.442640209534498e-5,2.0193550978397385e-8,-8.985886426926948e-4,2.4677367529835956e-5,2.0311351442965695e-8,-8.983168875609791e-4,2.489249041554455e-5,2.0411570672683616e-8,-8.981321994515865e-4,2.5027742305275945e-5,2.0474734817052442e-8,-8.979905680705888e-4,2.506411353886881e-5,2.0492861273368607e-8,-8.978493659111419e-4,2.50042478933684e-5,2.0467761838839778e-8,-8.976735626310779e-4,2.486629512223054e-5,2.040810250953443e-8,-8.974383807300419e-4,2.46779904367794e-5,2.0326637181998767e-8,-8.971300793370073e-4,2.447195277178342e-5,2.0238087853917463e-8,-8.967460299014721e-4,2.4281946492655756e-5,2.0157529321890946e-8,-8.962944874862408e-4,2.41394984040332e-5,2.009894778188007e-8,-8.957939342688571e-4,2.4070383811391924e-5,2.0073707412014148e-8,-8.952715333108823e-4,2.4090842783267837e-5,2.0088849549234874e-8,-8.94760107898572e-4,2.420397021695154e-5,2.014545178891125e-8,-8.942933680114259e-4,2.4397265038716906e-5,2.0237535845060154e-8,-8.938997498069575e-4,2.4642474151023778e-5,2.0352064205131918e-8,-8.935958998883974e-4,2.4898610660257977E-05,2.047041270308535e-8,-8.933813137979958e-4,2.5118392150347438e-5,2.057138082449648e-8,-8.932357382837027e-4,2.525738915614616e-5,2.0635360425476936e-8,-8.931205738507962e-4,2.5284299096435977e-5,2.0648906749984923e-8,-8.929848689198422e-4,2.5190265415252555e-5,2.0608774843090036e-8,-8.927757350545704e-4,2.4994824362930195e-5,2.052437537467493e-8,-8.924519189134882e-4,2.4745797708676503e-5,2.0417514294488545e-8,-8.919975931406865e-4,2.4510848006438183e-5,2.031846414448125e-8,-8.914314961573257e-4,2.436039906856739e-5,2.0258291785338553e-8,-8.908058509117407e-4,2.4345690900774747e-5,2.0259156353576073e-8,-8.901923458736179e-4,2.4480408023514104e-5,2.032632704668696e-8,-8.896591855754514e-4,2.473538117757218e-5,2.0446077286436584e-8,-8.892494467896753e-4,2.505003874490458e-5,2.0590986107984132e-8,-8.889707658958967e-4,2.5354671159387962e-5,2.0729934824061592e-8,-8.887992171195747e-4,2.5592069573353648e-5,2.0837712880844427e-8,-8.886922966930062e-4,2.572983863637043e-5,2.0900398514110002e-8,-8.886031916452067e-4,2.576187327548421e-5,2.0915874009217856e-8,-8.884910916697882e-4,2.5702806387382103e-5,2.0891201501616617e-8,-8.883263469942507e-4,2.5580247122862124e-5,2.0839048300129043e-8,-8.880918126579759e-4,2.5427917810549098e-5,2.0774582188619598e-8,-8.877822930623571e-4,2.528066113611859e-5,2.071327182632323e-8,-8.874034503409459e-4,2.51709375729389e-5,2.0669390176493168e-8,-8.869707261418254e-4,2.5125989723721748e-5,2.0654810035291582e-8,-8.865081500699982e-4,2.5164954314173364e-5,2.067774642510077e-8,-8.86046435520712e-4,2.5295625909005256e-5,2.074132329135633e-8,-8.856195799846079e-4,2.5511276908268373e-5,2.0842176511925037e-8,-8.852594627043434e-4,2.578871501824554e-5,2.0969645761179816e-8,-8.849887434082308e-4,2.6089236359805585e-5,2.1106290594163275e-8,-8.848135668142814e-4,2.6363915683878577e-5,2.12303363316089e-8,-8.847186517320325e-4,2.6563437790964064e-5,2.132009779085571e-8,-8.846674515235134e-4,2.6650601378864086e-5,2.1359523275735847e-8,-8.846087189309281e-4,2.66117823350549e-5,2.1343206192558952e-8,-8.844884826177575e-4,2.6463259603390726e-5,2.1279054822091283e-8,-8.84264302201615e-4,2.6249677950410016e-5,2.1187425909026206e-8,-8.839176546726403e-4,2.6034332006823362e-5,2.109662263366006e-8,-8.83460649868888e-4,2.588342561020468e-5,2.1035784916221402e-8,-8.82934630955511e-4,2.584833167410523e-5,2.102703848956324e-8,-8.824002202963414e-4,2.595091364572211e-5,2.1079174189276926e-8,-8.81920975885244e-4,2.61768927835987e-5,2.1185003004173495e-8,-8.815456299885851e-4,2.648030419312936e-5,2.132360042425762e-8,-8.812952960849518e-4,2.6797977084991984e-5,2.146685384949102e-8,-8.811602994497689e-4,2.7068443874576867e-5,2.1587808754275467e-8,-8.811068251980501e-4,2.7247856141716944e-5,2.1667584069800153e-8,-8.81089260979772e-4,2.7317788146902162e-5,2.169866440830599e-8,-8.810626671495409e-4,2.7284359038585255e-5,2.168436095027221e-8,-8.809914703339173e-4,2.7171697969967655e-5,2.1635803660338795e-8,-8.80853375306616e-4,2.7013728986054004e-5,2.1568241334736312e-8,-8.806396376131523e-4,2.6847076911299085e-5,2.14978976330453e-8,-8.803534902028214e-4,2.670608170906783e-5,2.1439805851815076e-8,-8.800081064751453e-4,2.661959400830792e-5,2.140644761622855e-8,-8.796247407013677e-4,2.6608697363742646e-5,2.1406789555317838e-8,-8.792309875330124e-4,2.668453948521081e-5,2.1445354689839482e-8,-8.788585456571649e-4,2.684586308158884e-5,2.152116684744657e-8,-8.78539601693883e-4,2.7076554888474195e-5,2.162673250547703e-8,-8.783011687268403e-4,2.7344451028370228e-5,2.1747606543339466e-8,-8.781575952511767e-4,2.760340690883203e-5,2.1863392752506867e-8,-8.781030584565838e-4,2.780060405021578e-5,2.1951002414711444e-8,-8.781075985026394e-4,2.7889387640801088e-5,2.1990279643567898e-8,-8.781205807905475e-4,2.7844561840664714e-5,2.197066505165757e-8,-8.780829418086908e-4,2.767387999018061e-5,2.1896173090185512e-8,-8.779448870805086e-4,2.74194206923248e-5,2.178590013371832e-8,-8.776820355245091e-4,2.7146767973214645e-5,2.166911671129024e-8,-8.773032995196551e-4,2.692589193920319e-5,2.157667830482182e-8,-8.768478522267831e-4,2.6811226903755186e-5,2.153215088316852e-8,-8.763733034865937e-4,2.6827771709541934e-5,2.1545755773169187e-8,-8.759398672705631e-4,2.6966612293309254e-5,2.1612637371882027e-8,-8.75595423955086e-4,2.718972268856917e-5,2.171528609991872e-8,-8.753651397527334e-4,2.744156484383133e-5,2.182888124213572e-8,-8.75247681912975e-4,2.766380317219204e-5,2.1927841507686533e-8,-8.752182834583848e-4,2.7809084316441637e-5,2.1991802394858896e-8,-8.752370705991506e-4,2.78503969031841e-5,2.2009553750829985e-8,-8.752596751637627e-4,2.7784140827711733e-5,2.1980196488628183e-8,-8.752468743315799e-4,2.7627256123099378e-5,2.1911727125109708e-8,-8.751709906385506e-4,2.741056684869909e-5,2.181802519722558e-8,-8.750184292407893e-4,2.717106230583093e-5,2.1715442258405405e-8,-8.747891179445456e-4,2.6945211256019782e-5,2.161989799005169e-8,-8.744942264117304e-4,2.6764246324536103e-5,2.1544865267399724e-8,-8.741534012510591e-4,2.6651298588158375e-5,2.1500162537119337e-8,-8.73792188217311e-4,2.6619664630001775e-5,2.1491228293641114e-8,-8.734396730616577e-4,2.6671435073366737e-5,2.1518551762450664e-8,-8.731258580016011e-4,2.679606382670435e-5,2.1577100432093963e-8,-8.7287798682881e-4,2.696908317973565e-5,2.165584590639723e-8,-8.727151324958717e-4,2.7152056798777518e-5,2.1737843898724333e-8,-8.726411876491597e-4,2.7295776371153268e-5,2.180169400597056e-8,-8.72638123277193e-4,2.7348884643569248e-5,2.1825288578833227e-8,-8.726635290724197e-4,2.7272385770363037e-5,2.1792059497611342e-8,-8.726572026318421e-4,2.7056308642078688e-5,2.16981558387545e-8,-8.725583379939474e-4,2.673014546177635e-5,2.1556946339519295e-8,-8.723277672615219e-4,2.6358529275551267e-5,2.1397083391496553e-8,-8.719640776249092e-4,2.6020955368897574e-5,2.1253534423843147e-8,-8.715045501738401e-4,2.5784651947306544e-5,2.1155571953329428e-8,-8.71011034255676e-4,2.5683903518439307e-5,2.1117663450457478e-8,-8.705491307552995e-4,2.5713812934991007e-5,2.113685431521052e-8,-8.701702166525884e-4,2.5837496324388218e-5,2.119617587482424e-8,-8.699014006819977e-4,2.6000426627921144e-5,2.1271201276789622e-8,-8.697436570127698e-4,2.6145631661998167e-5,2.1336868320268546e-8,-8.696759171271625e-4,2.6225891752515828E-05,2.137282593288771e-8,-8.696624900426764e-4,2.621144415050257e-5,2.136666972028361e-8,-8.696616766384265e-4,2.609309797451578e-5,2.1315093592520665e-8,-8.696339802855976e-4,2.58812240139253e-5,2.1223246173929514e-8,-8.695486258957221e-4,2.560145694153938e-5,2.1102720086846007e-8,-8.693875014404906e-4,2.5288439658636282e-5,2.096877998090809e-8,-8.691463110554454e-4,2.4979158898865863e-5,2.083749001199522e-8,-8.688333814216199e-4,2.4707133641329762e-5,2.0723252879501703e-8,-8.684669509396333e-4,2.449818770419122e-5,2.0637035505226535e-8,-8.680718625220174e-4,2.4367943926356345e-5,2.0585317375536392e-8,-8.676763190924599e-4,2.432063005736646e-5,2.0569587886541e-8,-8.673088635246923e-4,2.4348592526606557e-5,2.0586157121313442e-8,-8.669953180759233e-4,2.4432155464044134e-5,2.0626149014017224e-8,-8.667551694766482e-4,2.4539935083866278e-5,2.0675728630559995e-8,-8.665969051568935e-4,2.4630410220170644e-5,2.0716875446414914e-8,-8.665124727648299e-4,2.4656354944466406e-5,2.0729342915038327e-8,-8.664725697134575e-4,2.4573949994687252e-5,2.0694555012387574e-8,-8.664264664054185e-4,2.43569138231536e-5,2.0601608133330403e-8,-8.663110139622543e-4,2.401199304406164e-5,2.0453867175701917e-8,-8.660704693962533e-4,2.3586965902470763e-5,2.0272378725582345e-8,-8.656806366986982e-4,2.316147155005631e-5,2.0091868871878088e-8,-8.651633988921566e-4,2.281978312873848e-5,1.9948869925345905e-8,-8.645805810525198e-4,2.2618527290404762e-5,1.9867633866200034e-8,-8.640097643843145e-4,2.256770525095591e-5,1.9851904328723277e-8,-8.635166675543678e-4,2.2633614094821955e-5,1.9886336038762515e-8,-8.63137948012429e-4,2.2757311910044172e-5,1.9944743482180508e-8,-8.628781813717942e-4,2.2875933655872637e-5,1.9999555353413913e-8,-8.62716501594731e-4,2.2938215554097242e-5,2.0028639520069148e-8,-8.626167844185233e-4,2.291219190087368e-5,2.0018587878018706e-8,-8.625373867297079e-4,2.2786717609544522e-5,1.9965210231098124e-8,-8.624388179572647e-4,2.256927580919071e-5,1.987237287145151e-8,-8.62289189850553e-4,2.2281913356921493e-5,1.975006320331657e-8,-8.620677332013985e-4,2.195621272300181e-5,1.9612130462789248e-8,-8.617664966194991e-4,2.16277997444501e-5,1.9473928068892485e-8,-8.613902656342819e-4,2.1330954467429593e-5,1.935006757875441e-8,-8.609548908336364e-4,2.109389378252815e-5,1.9252475069560743e-8,-8.60484364617139e-4,2.0935189055747062e-5,1.9188905233103563e-8,-8.600071436128826e-4,2.086164348674763e-5,1.91620410767755e-8,-8.595522857630777e-4,2.086763182325774e-5,1.916920143547591e-8,-8.591457649603986e-4,2.0935595960451394e-5,1.9202563113239573e-8,-8.588070106868445e-4,2.103741778004402e-5,1.9249802291736785e-8,-8.585455278490724e-4,2.1136657572340328e-5,1.9295144248855717e-8,-8.583574459539792e-4,2.119206027325631e-5,1.9320951414396224e-8,-8.582223041875423e-4,2.1163256231024873e-5,1.9310193204886934e-8,-8.581015046639913e-4,2.1019633830437e-5,1.9250187621650533e-8,-8.579412331421961e-4,2.0752106826417253e-5,1.913751847356446e-8,-8.576831677947019e-4,2.0384459053393114e-5,1.898276909784322e-8,-8.572838524692297e-4,1.997686961930766e-5,1.8811952221028124e-8,-8.567366035007616e-4,1.9613260947646273e-5,1.8661045623987466e-8,-8.560824766647061e-4,1.9371935268362093e-5,1.8563376708157653e-8,-8.553990379155328e-4,1.9293084341216936e-5,1.8535706064271064e-8,-8.547703530167884e-4,1.936321412352537e-5,1.8571651992880513e-8,-8.542559556665059e-4,1.952555465174852e-5,1.864632532315067e-8,-8.538756727449201e-4,1.970687106733324e-5,1.8727989569739696e-8,-8.536133022643489e-4,1.9843141688829028e-5,1.8789169711081318e-8,-8.534305325201742e-4,1.989357508587466e-5,1.8812667709058706e-8,-8.532814843157356e-4,1.984307509264013e-5,1.879252452479186e-8,-8.531232008002682e-4,1.969807749884717e-5,1.8732068113313398e-8,-8.529215833508998e-4,1.9480194465247334e-5,1.864101205609392e-8,-8.526540395091069e-4,1.9220106769211913e-5,1.8532719999846374e-8,-8.523103008730304e-4,1.8952387630912345e-5,1.8421969114052342e-8,-8.518922166171214e-4,1.8711017815063302e-5,1.83230973754797e-8,-8.514126718644334e-4,1.8525339647629737e-5,1.8248378472723516e-8,-8.508935758492765e-4,1.8416482805648164e-5,1.820658103690855e-8,-8.503628746581636e-4,1.839451037204468e-5,1.8201787199229734e-8,-8.498506739728784e-4,1.8456726342008194e-5,1.823266217066025e-8,-8.493848597949864e-4,1.858755364818312e-5,1.8292382925859e-8,-8.489867877928165e-4,1.8760075533750793e-5,1.8369304773500778e-8,-8.486675197616957e-4,1.8939094885436825e-5,1.8448317961918758e-8,-8.484249414374999e-4,1.908551666785093e-5,1.8512794690847823e-8,-8.482420318448436e-4,1.9161892414962764e-5,1.854700959220887e-8,-8.480866947760388e-4,1.9139120485201888e-5,1.853898427741999e-8,-8.47914089849887e-4,1.9004229019293404e-5,1.8483705191242097e-8,-8.476729841454053e-4,1.8768219337488148e-5,1.8386304668266145e-8,-8.473174336537129e-4,1.847105600233066e-5,1.8264025543393118e-8,-8.46823043761053e-4,1.8178888378359918e-5,1.814493877116609e-8,-8.462024594710862e-4,1.7968779622830955e-5,1.8061442704564362e-8,-8.455100213327113e-4,1.790201857047041e-5,1.8039011781499097e-8,-8.44827387250912e-4,1.7997506299222376e-5,1.8085063263440332e-8,-8.442336473553949e-4,1.82219741246474e-5,1.8184995677384506e-8,-8.437761660142642e-4,1.8504766407932626e-5,1.8308588065556925e-8,-8.434584576481965e-4,1.8767662195956877e-5,1.842267679658266e-8,-8.4324815382798e-4,1.895151458304113e-5,1.8502419193258396e-8,-8.430953104809079e-4,1.9028223922689918e-5,1.853631028756183e-8,-8.429494942284543e-4,1.8998849917980934e-5,1.852528741826402e-8,-8.427701821877676e-4,1.8884905878580218e-5,1.8478909462789927E-08,-8.425307640973115e-4,1.8718917804788393e-5,1.8411232187863652e-8,-8.4221863676526e-4,1.853706175763964e-5,1.8337626368837928e-8,-8.418337179676496e-4,1.837420046907955e-5,1.827269721178165e-8,-8.413866423383756e-4,1.8260484347668602e-5,1.822893007494307e-8,-8.408968704231464e-4,1.8218648925198794e-5,1.821564458019552e-8,-8.403904546985228e-4,1.8261602613572497e-5,1.8238040596675744e-8,-8.398971047784783e-4,1.8390365569227584e-5,1.8296347683661744e-8,-8.394462933471349e-4,1.859286581010708e-5,1.8385307406524103e-8,-8.390625554693548e-4,1.8844349042141637e-5,1.849434016111365e-8,-8.387606740926772e-4,1.9109956838288736e-5,1.86086555425353e-8,-8.38541735765671e-4,1.934955354341349e-5,1.871133966197072e-8,-8.383910411803681e-4,1.9524369896896514e-5,1.8786212347626552e-8,-8.382786396254357e-4,1.9604517498810704e-5,1.882101552190826e-8,-8.381628606157513e-4,1.957613104080785e-5,1.8810378176449664e-8,-8.379968680478822e-4,1.9446885164135782e-5,1.8758024552986323e-8,-8.377380159940519e-4,1.924845999124919e-5,1.8677651607636933e-8,-8.373591718549969e-4,1.9034058927322546e-5,1.8591733411884385e-8,-8.368597531357094e-4,1.886904423475679e-5,1.8527502435010273e-8,-8.362722099438048e-4,1.881422597460021e-5,1.8509963766801086e-8,-8.356585036787218e-4,1.890516421021724e-5,1.8553367099453363e-8,-8.350935969910999e-4,1.913599743885326e-5,1.865465529485676e-8,-8.346403242080155e-4,1.945802313397077e-5,1.8793064946602195e-8,-8.34327545916489e-4,1.979670869488179e-5,1.893732043323308e-8,-8.341432058884843e-4,2.0079064624085877e-5,1.905704488089487e-8,-8.340443957116498e-4,2.0256813697895776e-5,1.9132370964305275e-8,-8.339762461212966e-4,2.0315496394862994e-5,1.915767659009268e-8,-8.338890176634837e-4,2.0269954024688864e-5,1.9139616310843984e-8,-8.337477088005211e-4,2.015310994528189e-5,1.9092327487425826e-8,-8.335344195487556e-4,2.0004740360878148e-5,1.9032641784256222e-8,-8.332464619472108e-4,1.9863456916696745e-5,1.897669433393755e-8,-8.328930721117551e-4,1.9762094713418337e-5,1.8938027533986976e-8,-8.32492297882966e-4,1.9725314418621403e-5,1.8926665101186917e-8,-8.32068415293489e-4,1.97681582273195e-5,1.8948588036477114e-8,-8.316495311428089e-4,1.9894810847537727e-5,1.900526818571205e-8,-8.312647852018803e-4,2.0097427747145573e-5,1.909320121864192e-8,-8.309406311115315e-4,2.0355522535096095e-5,1.9203660731413604e-8,-8.306961138447342e-4,2.0636898921431595e-5,1.9323105247655924e-8,-8.305378232200559e-4,2.0901137965268803e-5,1.9434664802670044e-8,-8.304559556956476e-4,2.1106081507306507e-5,1.9520878928693548e-8,-8.304232734093543e-4,2.121667553013109e-5,1.9567400873830927e-8,-8.303983658234531e-4,2.121422167099143e-5,1.9566836162855173e-8,-8.303333870477527e-4,2.1103220227911646e-5,1.952153119702011e-8,-8.301848490250651e-4,2.0913258553630374e-5,1.9444248405592745e-8,-8.299248979192241e-4,2.069466744819484e-5,1.935621254368111e-8,-8.295501421522738e-4,2.0508232040964325e-5,1.928269583340997e-8,-8.290853574454966e-4,2.0410715377186484e-5,1.9246942812164235e-8,-8.285801055587781e-4,2.0439332177392955e-5,1.9263794111536346e-8,-8.2809766077195e-4,2.059951905236773e-5,1.9334808940806114e-8,-8.276980402284858e-4,2.086083916102179e-5,1.944680759157122e-8,-8.274201421640853e-4,2.1164367562493242e-5,1.957510063623294e-8,-8.272700826664273e-4,2.1440488239337026e-5,1.9690891838981256e-8,-8.272211164209307e-4,2.163042771909038e-5,1.9770119508971764e-8,-8.272248984694739e-4,2.1702369405362463e-5,1.980002378644996e-8,-8.27228099796603e-4,2.1656229173428763e-5,1.9781034701150995e-8,-8.271868289199328e-4,2.151765544352276e-5,1.9724204114230814e-8,-8.270743741962598e-4,2.1326531390819485e-5,1.9646358599563786e-8,-8.26882219952542e-4,2.1125677324855516e-5,1.9565355735798533e-8,-8.266169368517766e-4,2.095292185174144e-5,1.94967870339568e-8,-8.262957480189584e-4,2.0836914464318622e-5,1.9452286083130493e-8,-8.25942474644233e-4,2.0795532754586838e-5,1.9438941053262905e-8,-8.255843718992038e-4,2.083550384946244e-5,1.9459206265133282e-8,-8.252495647333255e-4,2.095228065573517e-5,1.9510899184512012e-8,-8.249644062349847e-4,2.112985311313308e-5,1.958715392852858e-8,-8.247500865889223e-4,2.1340896571258705e-5,1.96765117319045e-8,-8.24618243855376e-4,2.1548299489712724e-5,1.9763583444848516e-8,-8.245661579256653e-4,2.1709369314150928e-5,1.983081139445514e-8,-8.245731982415894e-4,2.1783542272099323e-5,1.9861656355918796e-8,-8.246010337711906e-4,2.174293624505869e-5,1.9844932417100713e-8,-8.24599762693081e-4,2.1582829143363222e-5,1.9779092489063103e-8,-8.245199320168276e-4,2.1327443144663598e-5,1.9674559193285197e-8,-8.243271463267552e-4,2.1027056964939968e-5,1.9552443886955017e-8,-8.240137478913354e-4,2.0745880537874062E-05,1.9439417625111437e-8,-8.236027048837928e-4,2.054443207807126e-5,1.9360323569771445e-8,-8.231420981185931e-4,2.046260583006955e-5,1.9331166390175837e-8,-8.226923062309316e-4,2.050897293837082e-5,1.9354816716611825e-8,-8.223101620532402e-4,2.065914064149752e-5,1.9420558033546697e-8,-8.220346412416486e-4,2.0863033376546166e-5,1.9507310836051278e-8,-8.218778118280972e-4,2.1058697312165184e-5,1.958944171580837e-8,-8.218233231961076e-4,2.1188662210092975e-5,1.964349015093813e-8,-8.218326197553458e-4,2.1214125651217814e-5,1.9653903415513317e-8,-8.21856605729153e-4,2.112285109501725e-5,1.9616154125454246e-8,-8.218486723198633e-4,2.092896166987658e-5,1.9536534435121197e-8,-8.21774900682099e-4,2.0665900016862456e-5,1.9429164058162805e-8,-8.216189955439171e-4,2.0376078120981753e-5,1.9311669317101807e-8,-8.213819939742871e-4,2.010103213726683e-5,1.9201115798957357e-8,-8.210785719648872e-4,1.987447711399243e-5,1.911118281263017e-8,-8.20732153301422e-4,1.9718757169934105e-5,1.905076891931154e-8,-8.203703758138432e-4,1.964388881521585e-5,1.9023668998090353e-8,-8.200215277640999e-4,1.9647991667492965e-5,1.9028805308153496e-8,-8.197118007420141e-4,1.971813517172542e-5,1.906061049159396e-8,-8.194627667111748e-4,1.983118207998987e-5,1.910940136475893e-8,-8.192884188063901e-4,1.99548908795387e-5,1.9161861647232118e-8,-8.191914615513263e-4,2.005020377589606e-5,1.920200887423933e-8,-8.191593400069361e-4,2.0076033762683125e-5,1.92131658914827e-8,-8.191616964490206e-4,1.999753215727303e-5,1.918132541360626e-8,-8.191520734989105e-4,1.9797250015148836e-5,1.909967483876304e-8,-8.190765586708921e-4,1.948575838000759e-5,1.8972896885336155e-8,-8.188893026085382e-4,1.9105659284594878e-5,1.881876618035338e-8,-8.185698549347501e-4,1.8723588649551148e-5,1.8664805935860888e-8,-8.181336800547649e-4,1.8410527065246534e-5,1.8540121068539456e-8,-8.176292682317155e-4,1.8218322499468568e-5,1.8465698823274743e-8,-8.171225750854558e-4,1.816336880244077e-5,1.844774602721915e-8,-8.166763753560664e-4,1.8224017124166648e-5,1.8476781130729858e-8,-8.163333375780404e-4,1.8350561857245017e-5,1.853193523194076e-8,-8.16107745214289e-4,1.8481632209535812e-5,1.8587831243527868e-8,-8.159860616604793e-4,1.8560533642340127e-5,1.8621333711184525e-8,-8.159338548044192e-4,1.8547406867931718e-5,1.8616474714546974e-8,-8.159059685028022e-4,1.8425544094309115e-5,1.856691337547998e-8,-8.158571772717478e-4,1.8201877478809365e-5,1.8475986230218312e-8,-8.157511568267292e-4,1.790263037304738e-5,1.8354797984609146e-8,-8.155662647845826e-4,1.756578402681822e-5,1.8219061692464088e-8,-8.152974777324008e-4,1.7232463817564305e-5,1.80855624276064e-8,-8.149548380423059e-4,1.6939285910434784e-5,1.79690735294896e-8,-8.14559552341495e-4,1.6713010048744217e-5,1.7880250136234366e-8,-8.141391520903434e-4,1.6567887899189816e-5,1.7824625038532265e-8,-8.13722894907782e-4,1.65052911686815e-5,1.7802510165505718e-8,-8.133380240113629e-4,1.6514764792978118e-5,1.7809448528021547e-8,-8.130068823177181e-4,1.6575692411162992e-5,1.7836899066496914e-8,-8.127444898746023e-4,1.6659173301351172e-5,1.787301036505299e-8,-8.12556110967037e-4,1.6730231029844328e-5,1.79035428156178e-8,-8.1243455505061e-4,1.6751012160459823e-5,1.7913194389418595e-8,-8.123576337801389e-4,1.6686038010803166e-5,1.7887740556088877e-8,-8.122873281432063e-4,1.6510317217035855e-5,1.7817300812807638e-8,-8.12173296759821e-4,1.6219656866485414e-5,1.7700472205744483e-8,-8.119633169768517e-4,1.5839706948872637e-5,1.754794502201198e-8,-8.116204935794114e-4,1.5427302108426434e-5,1.7382995748216617e-8,-8.111412381260521e-4,1.5058049525129414e-5,1.723638629723847e-8,-8.105632272728717e-4,1.4801145884299286e-5,1.713607209252042e-8,-8.099554919138893e-4,1.4692744717581516e-5,1.7096374287795603e-8,-8.093939263332287e-4,1.4722847634811913e-5,1.7112747706322244e-8,-8.089353936498745e-4,1.484233801753127e-5,1.7164799969601408e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json new file mode 100644 index 000000000..36daa4505 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":6000,"numberOfSamples":1000,"samples":[-8.086030009769924e-4,1.4983810405869992e-5,1.7224897231104907e-8,-8.083859978917138e-4,1.5083891420443416e-5,1.7267300877946733e-8,-8.082495498012613e-4,1.5098334698112563e-5,1.727428602498279e-8,-8.08147627922185e-4,1.5007880436382382e-5,1.72384405012867e-8,-8.080344588306433e-4,1.4817024022017442e-5,1.716203842239244e-8,-8.078727223656254e-4,1.4548770451198794e-5,1.705477562558989e-8,-8.076383715174149e-4,1.4237727414253643e-5,1.6930867623711068e-8,-8.07322519250199e-4,1.3922902257012772e-5,1.6806096847405343e-8,-8.069308512481781e-4,1.3641062334595963e-5,1.6695163186853533e-8,-8.064810674365431e-4,1.3421371907981373e-5,1.6609600165603765e-8,-8.059989962711845e-4,1.3281793410593358e-5,1.65564122262766e-8,-8.055140919096513e-4,1.3227437282497666e-5,1.6537470119423336e-8,-8.050550211507427e-4,1.3250758311506548e-5,1.654960752689265e-8,-8.046459011976815e-4,1.3333167640947059e-5,1.658525704041747e-8,-8.04303377210941e-4,1.3447472960351647e-5,1.6633415280209964e-8,-8.040343930544604e-4,1.3560785131852206e-5,1.6680814883554258e-8,-8.038344371049681e-4,1.3637887698738715e-5,1.6713305884428016e-8,-8.036861808400415e-4,1.3645376246194308e-5,1.6717552173535383e-8,-8.035588881624019e-4,1.355715046434086e-5,1.668324932697258e-8,-8.034098545481887e-4,1.3361633179672876e-5,1.660599824235996e-8,-8.031899161995416e-4,1.3069806636622722e-5,1.6490473396248044e-8,-8.028548171317579e-4,1.2720836118968e-5,1.635260915989386e-8,-8.023817298130074e-4,1.2379672673151174e-5,1.6218567533971117e-8,-8.017848916609258e-4,1.21214866090865e-5,1.6118432225501397e-8,-8.011195394685814e-4,1.2004672862047483e-5,1.6075358566152277e-8,-8.004664161243661e-4,1.2045064498369676e-5,1.6095295025865495e-8,-7.999018683719954e-4,1.2207888551202842e-5,1.6163899894807838e-8,-7.994702224832471e-4,1.242340488168506e-5,1.625294935668257e-8,-7.991732540075557e-4,1.2615665237930678e-5,1.6331930886767175e-8,-7.989782632286061e-4,1.2727385321542004e-5,1.6378010390939176e-8,-7.988353176257354e-4,1.2731278778766297e-5,1.6380533700705246e-8,-7.98693545654588e-4,1.262891363153558e-5,1.6340492793338305e-8,-7.985117563218257e-4,1.2443008649451221e-5,1.6267331548458157e-8,-7.982633092416262e-4,1.2208291416633506e-5,1.617517573988445e-8,-7.97937024226046e-4,1.1963551111059878e-5,1.6079587401967125e-8,-7.975359220318068e-4,1.1745517867734186e-5,1.5995123017000115e-8,-7.970748169146011e-4,1.1584298423249006e-5,1.5933578635139873e-8,-7.96577147084504e-4,1.1500116000004205e-5,1.59027823489698e-8,-7.960712612774264e-4,1.1501312858278244e-5,1.5905873133149612e-8,-7.955863788122124e-4,1.1583659586297626e-5,1.5941057128577827e-8,-7.951485028139105e-4,1.1731083070377464e-5,1.6001886167851592e-8,-7.947767272267163e-4,1.191780985300591e-5,1.607808021319529e-8,-7.944803671342594e-4,1.2111620389700717e-5,1.615680382240154e-8,-7.942570988685387e-4,1.2277833661532118e-5,1.622426162217438e-8,-7.940921495251726e-4,1.2383811890041994e-5,1.6267523534675877e-8,-7.939586304605242e-4,1.2403888228974189e-5,1.627651653757225e-8,-7.938193280601158e-4,1.2324675476991541e-5,1.6246136706354253e-8,-7.936307142675456e-4,1.2150538325271284e-5,1.6178380649204796e-8,-7.933502814410618e-4,1.1908091876990174e-5,1.608405253597014e-8,-7.929477558193591e-4,1.164701184564693e-5,1.5982993948326116e-8,-7.924185834346178e-4,1.1433225812865484e-5,1.5901308272972388e-8,-7.91794201526995e-4,1.1331683271163489e-5,1.5864503448445484e-8,-7.911404620961953e-4,1.1381697803054312e-5,1.5887775959579784e-8,-7.905387505296019e-4,1.1576581858174432e-5,1.5968081661271605e-8,-7.900557579253249e-4,1.1862063556780149e-5,1.6083659449037498e-8,-7.897185238722374e-4,1.2157584885353175e-5,1.6202533533502623e-8,-7.895090488599649e-4,1.238821600505574e-5,1.629512295943271e-8,-7.893784662655317e-4,1.2508703453700893e-5,1.6343711956180873e-8,-7.892687928634058e-4,1.2510154891614356e-5,1.6345059350363414e-8,-7.891303130012338e-4,1.2412762325594466e-5,1.630746636423513e-8,-7.889301607306106e-4,1.22532563576661e-5,1.6245726990312346e-8,-7.886537075923972e-4,1.207350096757021e-5,1.6176528951831164e-8,-7.883021088407754e-4,1.1912612868365128e-5,1.611529698390703e-8,-7.878886554381245e-4,1.1802366938175958e-5,1.6074404646753326e-8,-7.874351827903575e-4,1.1764678405500699e-5,1.606225725212218e-8,-7.869686785579548e-4,1.1810193745663737e-5,1.6082821884922013e-8,-7.865178808041266e-4,1.1937644143326378e-5,1.613543027797478e-8,-7.861097334099989e-4,1.2134002375285157e-5,1.621485643068633e-8,-7.857657050956631e-4,1.2375715139896458e-5,1.631178566628287e-8,-7.854982761710509e-4,1.2631342722271491e-5,1.6413830995212057e-8,-7.853082129742637e-4,1.2865627763957707e-5,1.650712800670973e-8,-7.851832404152557e-4,1.3044611801087987e-5,1.6578365268496393e-8,-7.850984979333072e-4,1.3141234772513003e-5,1.661701655440917e-8,-7.850189859904393e-4,1.314074642924285e-5,1.6617484545055545e-8,-7.849040783473408e-4,1.3045167089176555e-5,1.658083277620777e-8,-7.847140887854131e-4,1.2875989940709468e-5,1.6515781106734278e-8,-7.84418739673568e-4,1.2674020385660439e-5,1.643854403323704e-8,-7.840067264380274e-4,1.2494690124657561e-5,1.637089555624342e-8,-7.834940629310338e-4,1.2397202649814611e-5,1.633586078646625e-8,-7.829269123445694e-4,1.242762480633356e-5,1.6351121218225165e-8,-7.823738580167101e-4,1.2600199243328678e-5,1.6421819173272966e-8,-7.819059640317111e-4,1.2886068491034284e-5,1.6536310251172648e-8,-7.815711190078477e-4,1.3218908359013295e-5,1.6668481029581357e-8,-7.813760467322517e-4,1.3518369457025356e-5,1.678692018769316e-8,-7.812866097556989e-4,1.3719738169680302e-5,1.6866455278038853e-8,-7.81245043675736e-4,1.3793772038801468e-5,1.689586528796916e-8,-7.811924892995569e-4,1.3748855436262393e-5,1.6878708749903426e-8,-7.810853126995724e-4,1.3619700644445478e-5,1.6828864667497608e-8,-7.809012145161698e-4,1.3452099763330615e-5,1.6764485192192976e-8,-7.806376216935296e-4,1.3290653946538645e-5,1.6703112676782687e-8,-7.803066615377375e-4,1.31716120529323e-5,1.6658847878700447e-8,-7.799298430182615e-4,1.311988593603372e-5,1.6641219568441624e-8,-7.795337437080761e-4,1.3148379669826384e-5,1.665500141543589e-8,-7.791466519745774e-4,1.3258192670318894e-5,1.6700371540229692e-8,-7.787956166079658e-4,1.3439123013885566e-5,1.6773161126941902e-8,-7.785034521569552e-4,1.3670540636302536e-5,1.6865211246133127e-8,-7.782855194761558e-4,1.3923070098588027e-5,1.6965022456657025e-8,-7.781465158733033e-4,1.4161671472159447e-5,1.705894395665733e-8,-7.780780274644127e-4,1.4350439747166847e-5,1.713304166764391e-8,-7.780578724819625e-4,1.4458808126371696e-5,1.717552433911576e-8,-7.780520945693767e-4,1.4468165316748068e-5,1.7179332308174036e-8,-7.780199264883032e-4,1.4377381074197417e-5,1.7144283672725583e-8,-7.779212697790456e-4,1.42055818063788e-5,1.707811591367681e-8,-7.777254715128031e-4,1.399092160934568e-5,1.6995928407681764e-8,-7.774196852037493e-4,1.37848241088391e-5,1.691784077706239e-8,-7.770148281025337e-4,1.3641905255902624e-5,1.68649932739021e-8,-7.7654695118254e-4,1.3606723344494496e-5,1.6854386908037733e-8,-7.760719733956719e-4,1.3699981752654324e-5,1.6893614104122298e-8,-7.756528920660803e-4,1.3908611710779359e-5,1.6977171984468366e-8,-7.753414973715193e-4,1.4185135339496087e-5,1.708636928482128e-8,-7.751607783545031e-4,1.4459758828692502e-5,1.7194078255654558e-8,-7.750965022472446e-4,1.4662655192892729e-5,1.7273331572288793e-8,-7.751031768498831e-4,1.4747011345581016e-5,1.730618293517172e-8,-7.751215862559233e-4,1.4701900854900151e-5,1.7288656969080978e-8,-7.750986283316115e-4,1.45502732264208e-5,1.7229950783472687e-8,-7.750005720993924e-4,1.4336090541435382e-5,1.714739884303355e-8,-7.748166257563864e-4,1.4108830030091316e-5,1.7060381671628664e-8,-7.74555246270904e-4,1.3911680743308552e-5,1.6985680755460048e-8,-7.742375216046733e-4,1.3775437312394145e-5,1.6935101840957774e-8,-7.738908672395347e-4,1.3716934985120997e-5,1.691492118059338e-8,-7.735443296708602e-4,1.373987657547806e-5,1.6926288994825302e-8,-7.732253688257358e-4,1.3836379992091725e-5,1.6965903557041073e-8,-7.729574201870145e-4,1.398850143961783e-5,1.702664562074045e-8,-7.727575479089458e-4,1.41697546103367e-5,1.7098179346093112e-8,-7.726338127068317e-4,1.4347167415583573e-5,1.7167741915981117e-8,-7.72582526013079e-4,1.4484672906976143e-5,1.7221441721592798e-8,-7.725862452751478e-4,1.4548420666369706e-5,1.724630156120042e-8,-7.726138958417847e-4,1.4513823225779425e-5,1.723297684502607e-8,-7.726244080267737e-4,1.4372974279860863e-5,1.717861929269323e-8,-7.725743889406402e-4,1.4139927504773041e-5,1.708890500581759e-8,-7.724286327675101e-4,1.3851021527237483e-5,1.6978122122320604e-8,-7.721705055599232e-4,1.3558663671444288e-5,1.6866694872960056e-8,-7.718085762849863e-4,1.3319387181004731e-5,1.6776479385700888e-8,-7.713767987397502e-4,1.3179295367351444e-5,1.6725086614472134e-8,-7.709275714331829e-4,1.3161122848693512e-5,1.6720920077215314e-8,-7.705191844169844e-4,1.3256827859980563e-5,1.6760442718757147e-8,-7.702008063045723e-4,1.3428227793557443e-5,1.6828582942267516e-8,-7.699990644679152e-4,1.361618554202354e-5,1.6902388068197547e-8,-7.699104039245936e-4,1.3756467861176603e-5,1.6957151603506948e-8,-7.699023224946573e-4,1.3797806695198463e-5,1.697331252819716e-8,-7.69923693570122e-4,1.3715970518988264e-5,1.6941802014512077e-8,-7.699204730517889e-4,1.3518607018056203e-5,1.686585566047806e-8,-7.698506029324883e-4,1.3239647040700348e-5,1.675881321149357e-8,-7.696928309426752e-4,1.292679553392078e-5,1.663924458294889e-8,-7.694477547487295e-4,1.2627916951666916e-5,1.6525649634657365e-8,-7.691330174202381e-4,1.2380977939982187e-5,1.6432564147368763e-8,-7.687761526504343e-4,1.2209237379755138e-5,1.6368739832210366e-8,-7.684079653894965e-4,1.2120781661778011e-5,1.633703602331063e-8,-7.680577369530784e-4,1.2110432408898472e-5,1.6335228492463344e-8,-7.677501944254693e-4,1.21623329271923e-5,1.6357054465017322e-8,-7.675035516029946e-4,1.2252353588631538e-5,1.6393155437041988e-8,-7.673278510063229e-4,1.2350244031443248e-5,1.6431898304259127e-8,-7.672231013092557e-4,1.2422047112441263e-5,1.6460286860244704e-8,-7.671772688900853e-4,1.243363156115782e-5,1.6465302548663993e-8,-7.671649640707796e-4,1.2356108383738767e-5,1.6435971563363704e-8,-7.671484101972802e-4,1.2173134658280302e-5,1.6366160768870968e-8,-7.670825263514741e-4,1.188858814480631e-5,1.6257519307403445e-8,-7.669249561884815e-4,1.153125860759139e-5,1.6121270567197454e-8,-7.666492306156377e-4,1.115245465159126e-5,1.5977261511360678e-8,-7.662560978121537e-4,1.0814456656206232e-5,1.5849466079461248e-8,-7.657770512027595e-4,1.05724402594284e-5,1.5758977593618244e-8,-7.65267023298901e-4,1.0456872508954073e-5,1.571723833544501e-8,-7.647885985095952e-4,1.0463873633946137e-5,1.5722417018223885e-8,-7.643941100002343e-4,1.0557097979145212e-5,1.5760262592280024e-8,-7.641121194876584e-4,1.0679365871370066e-5,1.580868049828012e-8,-7.639418824019487e-4,1.0769014504534602e-5,1.5844044262621295e-8,-7.63856040874777e-4,1.0775642632836637e-5,1.5847200884499e-8,-7.638095816807227e-4,1.067134664327151e-5,1.5807708446849496e-8,-7.637520719001363e-4,1.0455341968064698e-5,1.5725533933861105e-8,-7.636398633410946e-4,1.015159717703648e-5,1.5610082730947348e-8,-7.634452271731003e-4,9.80080001717917e-6,1.547706895850993e-8,-7.63160419406769e-4,9.449412193445568e-6,1.5344290126782374e-8,-7.627963935193374e-4,9.13916163473737e-6,1.522760366709052e-8,-7.623775983584871e-4,8.899634906261868e-6,1.5138131787055436e-8,-7.619351862275943e-4,8.745021320744058e-6,1.5081084100568852e-8,-7.615007251523846e-4,8.674467790722235e-6,1.5055961298020598E-08,-7.611015754607918e-4,8.674636046522299e-6,1.5057573206547553e-8,-7.607580727699104e-4,8.723012138457471e-6,1.507730793528806e-8,-7.604819845856674e-4,8.79104729455283e-6,1.5104310215033872e-8,-7.602755220059144e-4,8.84693302571431e-6,1.512651308174354e-8,-7.60130395955743e-4,8.858401879917029e-6,1.5131688225382546e-8,-7.600268787531797e-4,8.796280560370882e-6,1.5108794499177295e-8,-7.599335469922736e-4,8.639531259323042e-6,1.5049899963453894e-8,-0.000759809210702789,8.381910431287344e-6,1.495271925500096e-8,-7.596089689111743e-4,8.038852722231386e-6,1.4823230368913413e-8,-7.592954714676379e-4,7.651012523481406e-6,1.4677004696445236e-8,-7.588534536653339e-4,7.279557888325591e-6,1.4537373653592984e-8,-7.583012167940397e-4,6.990438849818558e-6,1.4429384557414762e-8,-7.576907836367265e-4,6.831496399448591e-6,1.4371061617021388e-8,-7.570930731261787e-4,6.813281142864784e-6,1.4366159181078007e-8,-7.56573893838745e-4,6.904553518906711e-6,1.440256548875904e-8,-7.561728030269616e-4,7.044803405478948e-6,1.445716559337654e-8,-7.55894167206311e-4,7.166043359666975e-6,1.450415417168199e-8,-7.55711412564325e-4,7.212993883249746e-6,1.4522671727194704e-8,-7.555791656848098e-4,7.1549930276133835e-6,1.4501273602714309e-8,-7.554470640511585e-4,6.988776194001312e-6,1.443893097512812e-8,-7.552712370159999e-4,6.734529749762169e-6,1.4343479112262025e-8,-7.550218631592772e-4,6.428246653777687e-6,1.422866437274883e-8,-7.546866678361489e-4,6.112788824185316e-6,1.4110719482184918e-8,-7.542707923333388e-4,5.8292867079302145e-6,1.400510243390426e-8,-7.537936783321645e-4,5.610111184424559e-6,1.392387568318107e-8,-7.532839358400108e-4,5.474383321977379e-6,1.3874075234006555e-8,-7.527734587962739e-4,5.42640635004478e-6,1.3857186797906472e-8,-7.522919859404003e-4,5.45669894844625e-6,1.386957766596827e-8,-7.518629339501932e-4,5.544851652733658e-6,1.3903575419281547e-8,-7.515008253699221e-4,5.66324214311497e-6,1.3948838400251825e-8,-7.51210094786353e-4,5.780767390543559e-6,1.3993723032625362e-8,-7.509847483529711e-4,5.866229168685598e-6,1.4026532943938554e-8,-7.508084438557491e-4,5.891537175053618e-6,1.4036723339664531e-8,-7.506548991499108e-4,5.835186884660035e-6,1.4016225902040902e-8,-7.504890649576297e-4,5.6865153995048614e-6,1.3961069522205696e-8,-7.502702069824309e-4,5.450810519333698e-6,1.3873309470797243e-8,-7.499584705215199e-4,5.154093641144201e-6,1.376281194863296e-8,-7.495258303846799e-4,4.844492327076601e-6,1.3647730610076522e-8,-7.489697010459084e-4,4.585680212391129e-6,1.3551982235163058e-8,-7.483229773845283e-4,4.439424944083938e-6,1.3498642646116442e-8,-7.47651384167147e-4,4.441135789993236e-6,1.3500781498633393e-8,-7.47033630108719e-4,4.5810783550153105e-6,1.3554518828823992e-8,-7.465319640685318e-4,4.8048662841334895e-6,1.3639340521473976e-8,-7.461696806020518e-4,5.035072310667735e-6,1.3726250888424918e-8,-7.45927649234082e-4,5.200984456189078e-6,1.3788876550238137e-8,-7.457581262680648e-4,5.260058265685222e-6,1.3811432021938078e-8,-7.456046602651826e-4,5.203880705388684e-6,1.3790914319102578e-8,-7.454181631269655e-4,5.052110434397819e-6,1.373481274651468e-8,-7.451656280700271e-4,4.841472760620587e-6,1.3656958068869079e-8,-7.448325507537849e-4,4.61494382342504e-6,1.357343640410499e-8,-7.444214445461733e-4,4.413322175715639e-6,1.3499417669267064e-8,-7.439484346229335e-4,4.2694368736615086e-6,1.3447009746671435e-8,-7.434389857049532e-4,4.204518303627032e-6,1.3423957631836567e-8,-7.429232000552066e-4,4.22642353337615e-6,1.3433047936838739e-8,-7.424310713391792e-4,4.3296407656193255e-6,1.3472159698785832e-8,-7.419881612882491e-4,4.496920195240808e-6,1.3534885426142835e-8,-7.416121363128246e-4,4.702242436589464e-6,1.3611614172495427e-8,-7.413105280088105e-4,4.9146848337064315e-6,1.369092983616905e-8,-7.410798564648585e-4,5.102579289552534e-6,1.3761123342581654e-8,-7.409059284613239e-4,5.2374620959614515e-6,1.3811649751762265e-8,-7.40765021747722e-4,5.2976581500819286e-6,1.3834473325427858e-8,-7.406258251361314e-4,5.271569720175211e-6,1.3825313013330133e-8,-7.404522940607082e-4,5.16079816624066e-6,1.3784817350730312e-8,-7.402080188256512e-4,4.982998369865964e-6,1.3719616164717567e-8,-7.398629579022926e-4,4.773502162654375e-6,1.3642888630399176e-8,-7.394027814983437e-4,4.583451075155526e-6,1.3573616754794363e-8,-7.388391120671625e-4,4.471358391383276e-6,1.3533406453527241e-8,-7.382156353710173e-4,4.486293417993243e-6,1.3540246689754017e-8,-7.376025584177996e-4,4.646263952038066e-6,1.360057244394542e-8,-7.370753966750942e-4,4.923220958661702e-6,1.3703844593894654e-8,-7.366853493943496e-4,5.247831278658755e-6,1.3824412277992002e-8,-7.364384127765779e-4,5.535851078356583e-6,1.3931243008841947e-8,-7.362964904189415e-4,5.721421847439438e-6,1.400013251189647e-8,-7.361977969831083e-4,5.777834083495166e-6,1.4021317172913075e-8,-7.360817614101209e-4,5.717840477241389e-6,1.3999596259483795e-8,-7.359055977095308e-4,5.580085272187351e-6,1.3949330970951832e-8,-7.356494891230436e-4,5.412741838724204e-6,1.3888375540751401e-8,-7.353140711726487e-4,5.2611317114854454e-6,1.3833462198014537e-8,-7.349148352444343e-4,5.160747629068616e-6,1.3797605620566516e-8,-7.34476381499244e-4,5.134402307300587e-6,1.378907362699951e-8,-7.340275945238301e-4,5.1916865952263e-6,1.3811240956866352e-8,-7.335976379390709e-4,5.3295409738639065e-6,1.386285790594125e-8,-7.332124264851362e-4,5.533583318487555e-6,1.393857552488052e-8,-7.328914883847182e-4,5.780224195792896e-6,1.4029729175094004e-8,-7.326453464977734e-4,6.039657534633526e-6,1.412541622107681e-8,-7.324737353478441e-4,6.279722160979335e-6,1.4213885118568412e-8,-7.323650721376349e-4,6.470322863277057e-6,1.4284138014656952e-8,-7.322974036581984e-4,6.587844288483066e-6,1.4327549734585913e-8,-7.322407659586676e-4,6.619032470350085e-6,1.4339305787613665e-8,-7.321607813179032e-4,6.563928060747684e-6,1.4319492082724502e-8,-7.320233046863541e-4,6.4374966021072834e-6,1.4273690279829042e-8,-7.317999978283977e-4,6.269641412024475e-6,1.4212954276300681e-8,-7.314747508146167e-4,6.103003158628865e-6,1.415295567438129e-8,-7.310503956340962e-4,5.987372946262786e-6,1.4111888222525968e-8,-7.30553886574779e-4,5.969501086118192e-6,1.4106716472582734e-8,-7.300364338939657e-4,6.078516230287104e-6,1.4147877299553037e-8,-7.295642924788504e-4,6.3107236580662384e-6,1.4233817360402606e-8,-7.29198788762624e-4,6.622175486804494e-6,1.4348383535941494e-8,-7.289720333664855e-4,6.9380135239147e-6,1.4464270004578152e-8,-7.288720132220635e-4,7.178968146684719e-6,1.4552629285696456e-8,-7.288478475491566e-4,7.292033122646066e-6,1.4594189017363577e-8,-7.288324425920637e-4,7.267653302542506e-6,1.4585519239748402e-8,-7.287681356467766e-4,7.1358561174840265e-6,1.4537665753835853e-8,-7.286220514824529e-4,6.9483598487620115e-6,1.4469630977301123e-8,-7.28388085845522e-4,6.7592678922152605e-6,1.4401275496516345e-8,-7.280804913481166e-4,6.612273121504457e-6,1.4348581630811597e-8,-7.277252407959589e-4,6.5354231757555416e-6,1.4321716844225746e-8,-7.273527660572583e-4,6.540950211029966e-6,1.4324997142073501e-8,-7.269930114233965e-4,6.6273182842564705e-6,1.4357691570767854e-8,-7.26672240266485e-4,6.781718300136292e-6,1.4414990002890305e-8,-7.264107154812758e-4,6.982473886382033e-6,1.4488915944389668e-8,-7.262207318281119e-4,7.201524453767113e-6,1.4569238469116222e-8,-7.261048945983162e-4,7.407366857871365e-6,1.464452799757507e-8,-7.260549073749619e-4,7.568797659062485e-6,1.4703494431167381e-8,-7.26051465526772e-4,7.659436861891897e-6,1.4736614332348274e-8,-7.260658689683676e-4,7.662469338693832e-6,1.4737849783051846e-8,-7.260636091525101e-4,7.574690894230019e-6,1.4706123818166879e-8,-7.260097162467727e-4,7.408843381596091e-6,1.4646170303919831e-8,-7.258751869359084e-4,7.193327753172565e-6,1.4568414770672015e-8,-7.256434329193616e-4,6.968816351578809e-6,1.4487705994885722e-8,-7.253155606930208e-4,6.781829885047062e-6,1.4420936000282275e-8,-7.249132562182546e-4,6.6756763505280914e-6,1.4383719471977372e-8,-7.244778292372096e-4,6.679612946037396e-6,1.438647617104953e-8,-7.240638597492315e-4,6.798235959896041e-6,1.443065370266917e-8,-7.237266826504071e-4,7.004766318589259e-6,1.4506391489857573e-8,-7.235054613225411e-4,7.243025516191428e-6,1.4593301323513466e-8,-7.2340765660686e-4,7.441405783647142e-6,1.4665511557876749e-8,-7.234034010785615e-4,7.53631382926181e-6,1.4700082991218885e-8,-7.234351925205399e-4,7.495034347391305e-6,1.468523799630331e-8,-7.234393429224217e-4,7.325932982914151e-6,1.462407472647779e-8,-7.233679091640017e-4,7.071240070168453e-6,1.4531993918580552e-8,-7.2320061796834e-4,6.7884821942071435e-6,1.4429962503804012e-8,-7.229442000740695e-4,6.531515408382787e-6,1.4337580335722595e-8,-7.226237824510028e-4,6.338676971745417e-6,1.4268730878278133e-8,-7.222726609371696e-4,6.229186086844068e-6,1.4230270463511608e-8,-7.219243370456767e-4,6.204979076589403e-6,1.4222735101428858e-8,-7.216077209136364e-4,6.254637305234233e-6,1.424182454315981e-8,-7.213447052154808e-4,6.357313551246988e-6,1.427987548429127e-8,-7.211489353260135e-4,6.485977719230195e-6,1.432706196354135e-8,-7.210249390732579e-4,6.610178726644471e-6,1.4372391800318248e-8,-7.209673047686168e-4,6.69888928465445e-6,1.440471413451235e-8,-7.209601280974389e-4,6.7240278150433335e-6,1.4413965009805703e-8,-7.20977427897608e-4,6.664882671759e-6,1.4392744472576701e-8,-7.209854343714221e-4,6.51295128433434e-6,1.4338056762127022e-8,-7.209473640933031e-4,6.27595967171071e-6,1.4252764848687728e-8,-7.20830498270342e-4,5.979351536502665e-6,1.4146129546232638e-8,-7.206142541252474e-4,5.663667819126294e-6,1.4032848951131945e-8,-7.202969652261338e-4,5.377288241995543e-6,1.3930404038766788e-8,-7.198989165010806e-4,5.1656853148451214e-6,1.3855144520274798e-8,-7.194600346572165e-4,5.059761967389392e-6,1.381807600558674e-8,-7.190320840484526e-4,5.066413372274996e-6,1.3821501796020195e-8,-7.186667008859963e-4,5.164217116728777e-6,1.3857550892980985e-8,-7.184018625214499e-4,5.306290101127747e-6,1.3909277458429183e-8,-7.182503872805278e-4,5.430848543585556e-6,1.3954476928807232e-8,-7.181945402363831e-4,5.477745639924967e-6,1.3971593615188382e-8,-7.181899363308149e-4,5.406401461740874e-6,1.3946114620028615e-8,-7.181787956068019e-4,5.208432912413644e-6,1.3875092760960466e-8,-7.181080232052682e-4,4.909307597908525e-6,1.3767756999698908e-8,-7.179446434546303e-4,4.558250395919083e-6,1.3641890350548404e-8,-7.176825410055812e-4,4.2115104900122955e-6,1.3517783575060329e-8,-7.173394303115774e-4,3.9166207270580965e-6,1.3412530864261023e-8,-7.169476918402883e-4,3.7030604472824477e-6,1.3336657086835069e-8,-7.165441754546074e-4,3.5802790936875876e-6,1.3293434686648582e-8,-7.161624370313028e-4,3.540740334466443e-6,1.3280030267105057e-8,-7.158283342384227e-4,3.5648889198243974e-6,1.3289336702046267e-8,-7.155582446948228e-4,3.6259309695520506e-6,1.3311712356351884e-8,-7.153587035969551e-4,3.6936410852722728e-6,1.3336343509346127e-8,-7.152264834437153e-4,3.7373251672731826e-6,1.3352284086218272e-8,-7.151486443905965e-4,3.7285507918335262e-6,1.3349406474614047e-8,-7.151027106872547e-4,3.6443643170977546e-6,1.3319531867733131e-8,-7.150577088567976e-4,3.471371309569102e-6,1.3257885044742072e-8,-7.149771233861474e-4,3.2102934517910352e-6,1.3164734543938834e-8,-7.148246566289133e-4,2.879607352494538e-6,1.304671174381637e-8,-7.145727155168279e-4,2.5159715205526265e-6,1.2916970172838227e-8,-7.14211741474117e-4,2.1691340011926946e-6,1.2793345447593278e-8,-7.13756704294834e-4,1.8907340958244058e-6,1.2694309938959155e-8,-7.13246867286023e-4,1.7195895090076379e-6,1.263368292154631e-8,-7.127372110269032e-4,1.6687917986243744e-6,1.2616035558109819e-8,-7.122837106314069e-4,1.7200599947476228e-6,1.2634736954970411e-8,-7.11927625851379e-4,1.8279231828251246e-6,1.2673513419775649e-8,-7.116842639270483e-4,1.9322272870562014e-6,1.2710931582090524e-8,-7.115395372739504e-4,1.9745795969288553e-6,1.2726232447310445e-8,-7.114547557725002e-4,1.9136654302389338e-6,1.270474472926178e-8,-7.113777961538001e-4,1.735292690655213e-6,1.2641441637291946e-8,-7.112572859060644e-4,1.4546876493828617e-6,1.2541763992937194e-8,-7.110556761496227e-4,1.1107338000528394e-6,1.2419577806846834e-8,-7.107574398631749e-4,7.542984399074633e-7,1.2293006190122626e-8,-7.103703854584871e-4,4.3467766591549663e-7,1.2179579666103922e-8,-7.099206413352514e-4,1.8848792044254664e-7,1.209227121863942e-8,-7.094440058956009e-4,3.38112439872334e-8,1.2037433652280913e-8,-7.089770272256449e-4,-3.005946575574514e-8,1.2014751159396523e-8,-7.085502677011695e-4,-1.8942666134325098e-8,1.2018584823579895e-8,-7.081845728037587e-4,4.1504324056836106e-8,1.2039859175127503e-8,-7.078898530136206e-4,1.2085396250360532e-7,1.2067846450829226e-8,-7.07665357590904e-4,1.8796389173417595e-7,1.2091574008084617e-8,-7.075005062641622e-4,2.1404627281451953e-7,1.2100880394544461e-8,-7.073757642706145e-4,1.7527949313218791e-7,1.2087321949694448e-8,-7.072636271028598e-4,5.563556618695607e-8,1.2045175593473184e-8,-7.07130371455471e-4,-1.496666377152965e-7,1.1972682276401499e-8,-7.069396260706627e-4,-4.3038263800395507e-7,1.1873415802529695e-8,-7.06658736467273e-4,-7.585342773530107e-7,1.1757266370952408e-8,-7.062679103912365e-4,-1.0893111587869973e-6,1.164011958067034e-8,-7.057699493448573e-4,-1.3683565279279107e-6,1.1541242460665835e-8,-7.051958014848092e-4,-1.546143275736306e-6,1.1478149826314971e-8,-7.046006461074884e-4,-1.5955509000684547e-6,1.1460378253613378e-8,-7.040489785775769e-4,-1.5244730508863847e-6,1.1485082661954835e-8,-7.035938487042454e-4,-1.3758182686775965e-6,1.1537113738876136e-8,-7.032597812034259e-4,-1.2137575651664247e-6,1.1593901613711014e-8,-7.030369079407669e-4,-1.1027795845962554e-6,1.1632801609042198e-8,-7.028872532957906e-4,-1.0889580682558247e-6,1.1637630789638363e-8,-7.027584678100196e-4,-1.1897271998792792e-6,1.1602238033439061e-8,-7.025988796732991e-4,-1.3932883666335377e-6,1.1530725736851102e-8,-7.02369467900341e-4,-1.6652872066721532e-6,1.1435125811886794e-8,-7.020507465969052e-4,-1.959328698109832e-6,1.1331711320640786e-8,-7.016442939978633e-4,-2.2282184952551496e-6,1.1237034626369414e-8,-7.011697035243303e-4,-2.4335618600813347e-6,1.1164544945400339e-8,-7.006583801112918e-4,-2.5521150452073807e-6,1.1122365961218336e-8,-7.001460060304543e-4,-2.5781375982917395e-6,1.1112496075816941e-8,-6.996655112290227e-4,-2.5220161431554106e-6,1.1131319063948755e-8,-6.992418776281199e-4,-2.4062965783673872e-6,1.1171004748331547e-8,-6.988893060139256e-4,-2.260591788360715e-6,1.1221277939326513e-8,-6.986105278643894e-4,-2.1166353920163535e-6,1.1271116834225942e-8,-6.983975667488254e-4,-2.0042272969958953e-6,1.1310137596645092e-8,-6.982331775114807e-4,-1.948167868728002e-6,1.1329646935505253e-8,-6.980924984224593e-4,-1.9658036073505293e-6,1.1323502940205919e-8,-6.979449169280985e-4,-2.064692866216944e-6,1.128895545665963e-8,-6.977566158534427e-4,-2.240091878769088e-6,1.1227562045779688e-8,-6.974946560896657e-4,-2.4725062008836e-6,1.1146078731656455e-8,-6.971334322778307e-4,-2.7265579611108132e-6,1.1056870056968845e-8,-6.966634001809645e-4,-2.9535495920723803e-6,1.0976992639682918e-8,-6.960998225694706e-4,-3.1003923112501523e-6,1.0925024976391107e-8,-6.954864809875409e-4,-3.125514095301827e-6,1.0915470365326537e-8,-6.94888405730523e-4,-3.0171655312078273e-6,1.0952385872816837e-8,-6.943721615170897e-4,-2.8040956720319907e-6,1.1025740558355747e-8,-6.939812476892919e-4,-2.5493950355256136e-6,1.111363121856989e-8,-6.937199582600355e-4,-2.328052856844355e-6,1.119007794880418e-8,-6.935545525919977e-4,-2.199995786806156e-6,1.123431816683279e-8,-6.93429179173718e-4,-2.1924546956316556e-6,1.1236874298485071e-8,-6.932862200777068e-4,-2.2974342328778687e-6,1.1200440938200634e-8,-6.930818299262455e-4,-2.4806963116481874e-6,1.1136809772812793e-8,-6.927932877982263e-4,-2.69515791678022e-6,1.1062250907052743e-8,-6.924193527516066e-4,-2.8932872464684024e-6,1.0993214408490107e-8,-6.919763333906085e-4,-3.036081365862266e-6,1.0943205101581768e-8,-6.91492215226939e-4,-3.098326934476717e-6,1.0920952638432522e-8,-6.910002904512773e-4,-3.070683044984637e-6,1.0929697707612377e-8,-6.905331356871504e-4,-2.959140124946023e-6,1.0967394783237994e-8,-6.90117596465121e-4,-2.7823877442401985e-6,1.1027633804261848e-8,-6.897712626577218e-4,-2.567793687719598e-6,1.1101026790081565e-8,-6.895006358475275e-4,-2.3467550008997916e-6,1.1176795508382824e-8,-6.89300944615274e-4,-2.150115599113473e-6,1.1244329229978124e-8,-6.891573100006782e-4,-2.00424231133623e-6,1.1294520632905088e-8,-6.890467540316551e-4,-1.9280356409594636e-6,1.1320793607430406e-8,-6.889406381638624e-4,-1.930734024848246e-6,1.1319874885504703e-8,-6.888074504279619e-4,-2.0102414136189414e-6,1.1292397488351405e-8,-6.886161724085662e-4,-2.1518695593095066e-6,1.1243363432643985e-8,-6.883407101463712e-4,-2.327739840236361e-6,1.1182368829498123e-8,-6.879658514959947e-4,-2.497813089077346e-6,1.1123245267791766e-8,-6.874944007746656e-4,-2.6143891697839814e-6,1.108247815801189e-8,-6.869533275424424e-4,-2.6320148015926607e-6,1.1075749525894508e-8,-6.863944546199724e-4,-2.522826202578732e-6,1.1112635168862053e-8,-6.858844538666012e-4,-2.2926275030821306e-6,1.1191109583836215e-8,-6.854832279089802e-4,-1.9877298379677976e-6,1.1295269233710088e-8,-6.852191743942243e-4,-1.6834486218362717e-6,1.1399318636952878e-8,-6.850762207670568e-4,-1.4561494259965552e-6,1.1477115718733162e-8,-6.850017506227822e-4,-1.353885669014518e-6,1.1512169978020316e-8,-6.849299395502611e-4,-1.382232489232581e-6,1.1502489363880025e-8,-6.848057305429362e-4,-1.5099055715152289e-6,1.1458706325152704e-8,-6.845983153559325e-4,-1.6859188037799119e-6,1.1398245647313847e-8,-6.843027428170722e-4,-1.8571846721204412e-6,1.1339299333489303e-8,-6.839342878524915e-4,-1.9804742909492373e-6,1.1296704524613013e-8,-6.83520537940993e-4,-2.0280142608472192e-6,1.1280001238857747e-8,-6.830941226507634e-4,-1.9884992920636643e-6,1.1293074773063915e-8,-6.826870433621648e-4,-1.8656132505174621e-6,1.13346680053564e-8,-6.823264387413217e-4,-1.6753696630438363e-6,1.1399305110651174e-8,-6.82031487121087e-4,-1.4427423697938251e-6,1.1478456664893744e-8,-6.818114056550049e-4,-1.1978017957364357e-6,1.1561864398442774e-8,-6.816645845240956e-4,-9.716026242010502e-7,1.1638940368353777e-8,-6.81578901101889e-4,-7.920793248862827e-7,1.1700156773758746e-8,-6.815332503350359e-4,-6.803319074311323e-7,1.173830361103633e-8,-6.815001275355418e-4,-6.477490111422285e-7,1.1749467706559448e-8,-6.814489184104265e-4,-6.941843501332436e-7,1.1733661035226025e-8,-6.813496403718091e-4,-8.071935459534741e-7,1.1695093476635976e-8,-6.81177053403738e-4,-9.623862476189849e-7,1.164206416834527e-8,-6.809151476327394e-4,-1.1251098518570805e-6,1.158639073471916e-8,-6.80561933977751e-4,-1.254012468855875e-6,1.154218474453644e-8,-6.801338767888566e-4,-1.307464024167702e-6,1.1523643336190613e-8,-6.79668066854345e-4,-1.2535982747354408e-6,1.1541612761355467e-8,-6.792188902309273e-4,-1.0830088825351644e-6,1.1599275967291585e-8,-6.78845970446115e-4,-8.196398734036575e-7,1.1688487599342648e-8,-6.785938804680131e-4,-5.21865523976247e-7,1.1789443842818592e-8,-6.784716853381285e-4,-2.670917135713526e-7,1.1875898145539714e-8,-6.784454801674145e-4,-1.229862560247459e-7,1.1924869708763637e-8,-6.78451422731065e-4,-1.2039502744957288e-7,1.1925808501975738e-8,-6.784224136183189e-4,-2.4413852327126643e-7,1.188376744728601e-8,-6.783122474568518e-4,-4.450160638167141e-7,1.1815400961230667e-8,-6.781056774875232e-4,-6.622121589485789e-7,1.1741382274874111e-8,-6.778146379208505e-4,-8.426921141446391e-7,1.1679787181502826e-8,-6.774678679897052e-4,-9.513665380458594e-7,1.1642596348323024e-8,-6.771004646386013e-4,-9.730261227384026e-7,1.163500954750871e-8,-6.767463032638174e-4,-9.096388229470013e-7,1.165635793010542e-8,-6.764335621130428e-4,-7.761178639860844e-7,1.170155308564171e-8,-6.761823408651586e-4,-5.962181208590508e-7,1.1762500661860506e-8,-6.76003339470729e-4,-3.9886548663780184e-7,1.1829366116277767e-8,-6.758971746004418e-4,-2.1465214616865e-7,1.189177429067364e-8,-6.75854349008327e-4,-7.229850977163453e-8,1.1940006997847552e-8,-6.758560464209218e-4,4.947983413017979e-9,1.1966210837941946e-8,-6.75876029123182e-4,2.7488136745964224e-9,1.196554475242547e-8,-6.758837935815457e-4,-8.161918553295126e-8,1.1937085753012027e-8,-6.758487615666738e-4,-2.3790708629766936e-7,1.1884286585775744e-8,-6.757450114730958e-4,-4.432901815565406e-7,1.1814847546413683e-8,-6.75555981832124e-4,-6.647221873892998e-7,1.1739927591423942e-8,-6.752785440219556e-4,-8.632714013106472e-7,1.1672680443195546e-8,-6.749257989924772e-4,-1.0003070529774613e-6,1.1626159710092367e-8,-6.745277736728225e-4,-1.04533785405786e-6,1.1610666373841045e-8,-6.74128768082691e-4,-9.849061499935828e-7,1.1630749295767326e-8,-6.737798662443241e-4,-8.306924641557072e-7,1.1682486866486084e-8,-6.735259935027122e-4,-6.231378273326227e-7,1.1752281613645974e-8,-6.733897881249691e-4,-4.257941722485988e-7,1.1818755484053001e-8,-6.733589931298577e-4,-3.0779861157673254e-7,1.185861347121806e-8,-6.733862647382449e-4,-3.189045445843042e-7,1.1855019353474524e-8,-6.734052719418553e-4,-4.6933352922082787e-7,1.1804407956455615e-8,-6.73356095178138e-4,-7.26669545411652e-7,1.1717608951207223e-8,-6.732058920007578e-4,-1.03135768079192e-6,1.1614681309859787e-8,-6.729549688437168e-4,-1.3203085634674708e-6,1.1516948301661333e-8,-6.726292231984343e-4,-1.5456410863813466e-6,1.1440629950089799e-8,-6.722669138054278e-4,-1.6825813512472906e-6,1.1394139323916218e-8,-6.719069745690607e-4,-1.728292691642922e-6,1.1378462534167964e-8,-6.715817867987357e-4,-1.6963310651301452e-6,1.1389032635968985e-8,-6.713140269531039e-4,-1.6104898771342205e-6,1.1417818254359392e-8,-6.711159576172181e-4,-1.4997911391117643e-6,1.1455027849828653e-8,-6.7098967808978e-4,-1.3947627025395655e-6,1.1490377166722129e-8,-6.709276170943395e-4,-1.3244157649111584e-6,1.1514110299334853e-8,-6.709132260466664e-4,-1.3133527174552276e-6,1.1517964713543777e-8,-6.709221924822578e-4,-1.3787160274900425e-6,1.1496180968261428e-8,-6.709246793383498e-4,-1.5271024239717297e-6,1.144652479963841e-8,-6.708890101922466e-4,-1.7521057789037506e-6,1.1371108056069637e-8,-6.707867329827515e-4,-2.03349427394575e-6,1.1276673671676083e-8,-6.705983390374779e-4,-2.3389296906621046e-6,1.1174033427878806e-8,-6.703183942720542e-4,-2.6286525837106187e-6,1.1076507144233978e-8,-6.699586275639561e-4,-2.862764821608109e-6,1.0997482902064068e-8,-6.695477636789244e-4,-3.009877260332382e-6,1.0947514998244096e-8,-6.691275106414471e-4,-3.0553669347500317e-6,1.093155672567259e-8,-6.687448110835039e-4,-3.0073333148598256e-6,1.0946969098039167e-8,-6.684411914721439e-4,-2.8982694801256994e-6,1.09829603567278e-8,-6.682410506419115e-4,-2.7805932569171573e-6,1.1022061743662119e-8,-6.681420923177971e-4,-2.7151112480580224e-6,1.1043947687668447e-8,-6.681122430425281e-4,-2.7538322953627776e-6,1.103115103055556e-8,-6.680967532338296e-4,-2.922229780866871e-6,1.0975005824736362e-8,-6.680351768836946e-4,-3.208938989025025e-6,1.0879155445024393e-8,-6.678818198079746e-4,-3.569206800689314e-6,1.07584697087957e-8,-6.676199799142348e-4,-3.941264216912157e-6,1.0633592515886972e-8,-6.672637124200508e-4,-4.26723863883779e-6,1.0523919613312888e-8,-6.668484745365341e-4,-4.508722102625259e-6,1.0442353880863865e-8,-6.664173881818245e-4,-4.652194081672177e-6,1.0393476953270497e-8,-6.660096559372878e-4,-4.705856726945458e-6,1.0374609216835914e-8,-6.6565400917304e-4,-4.692450116383464e-6,1.0378215067070535e-8,-6.65366691378365e-4,-4.641992506869934e-6,1.0394325668100645e-8,-6.651520724436302e-4,-4.586289293999795e-6,1.0412367136578511e-8,-6.650041770194664e-4,-4.555288303349263e-6,1.0422370733593156e-8,-6.649082145975189e-4,-4.574557922642622e-6,1.0415807035090087e-8,-6.648419516531094e-4,-4.663098319825658e-6,1.0386306849815094e-8,-6.647772977923628e-4,-4.830967209773467e-6,1.0330446811403125e-8,-6.64682793482468e-4,-5.0767082913095886e-6,1.0248610310513204e-8,-6.645276535009935e-4,-5.385272368662441e-6,1.014569716509483e-8,-6.642874935506787e-4,-5.727739295789978e-6,1.0031241672519338e-8,-6.639508926581502e-4,-6.064303841982294e-6,9.918438764338643e-9,-6.635248175263377e-4,-6.351327713612035e-6,9.821803180388749e-9,-6.630363208422775e-4,-6.551644593751551e-6,9.753736842483382e-9,-6.625286011154107e-4,-6.6453412099685115e-6,9.720943269391243e-9,-6.620515220562129e-4,-6.637210765563028e-6,9.721958663164957e-9,-6.616490030515382e-4,-6.557815458928014e-6,9.746799934408593e-9,-6.613470434299081e-4,-6.457206611119339e-6,9.779019488102298e-9,-6.611460182660693e-4,-6.3927400851426745e-6,9.799687434697574e-9,-6.610196289517972e-4,-6.414181155194645e-6,9.79227361540468e-9,-6.609211623926225e-4,-6.550090663171576e-6,9.747151909141079e-9,-6.607958578615187e-4,-6.799453044112043e-6,9.664428684028409e-9,-6.605961968829965e-4,-7.131600161094896e-6,9.554052462247139e-9,-6.602952658559864e-4,-7.495192731900008e-6,9.432897717263338e-9,-6.59893337291204e-4,-7.833471097170003e-6,9.319721647992294e-9,-6.594154199307799e-4,-8.10003951822256e-6,9.229912967892944e-9,-6.589015974741606e-4,-8.26940720505979e-6,9.171982193286219e-9,-6.583948475325114e-4,-8.339570999084169e-6,9.146702941363071e-9,-6.579310057521284e-4,-8.32782653290947e-6,9.1484953460235e-9,-6.575332522116057e-4,-8.26326332931551e-6,9.167892353553748e-9,-6.572109057110091e-4,-8.179301464685762e-6,9.193979644439203e-9,-6.569608894446945e-4,-8.108097437895046e-6,9.21621770862212e-9,-6.56770170806039e-4,-8.077049399664383e-6,9.225578151807406e-9,-6.566181353193237e-4,-8.106736580969876e-6,9.2152178288862e-9,-6.56478602741209e-4,-8.209430423295186e-6,9.18097422655523e-9,-6.563217982510564e-4,-8.387533414582957e-6,9.121895607077113e-9,-6.561169927829369e-4,-8.631800308226666e-6,9.04085550962115e-9,-6.558365936151278e-4,-8.91992576094595e-6,8.945052981019506e-9,-6.55462020900297e-4,-9.216878126763627e-6,8.845932484547084e-9,-6.549905970801155e-4,-9.47883318251498e-6,8.757896962005024e-9,-6.544410174747893e-4,-9.66200422791736e-6,8.695387849400742e-9,-6.538536905887626e-4,-9.73541782277881e-6,8.668667779698704e-9,-6.532830284212719e-4,-9.693338183562016e-6,8.679746644976681e-9,-6.527824423394355e-4,-9.561069012846983e-6,8.72050444633388e-9,-6.523874598641779e-4,-9.389804754378765e-6,8.77438033627454e-9,-6.521043283306284e-4,-9.24162630277522e-6,8.821227300503736e-9,-6.519088365606864e-4,-9.170835057503315e-6,8.843328210896267e-9,-6.517549256998489e-4,-9.20896440435165e-6,8.83024338053133e-9,-6.515887679402991e-4,-9.35797527614904e-6,8.781065819974303e-9,-6.513631828401716e-4,-9.592194273994584e-6,8.703882366870197e-9,-6.510485784423071e-4,-9.866901365965093e-6,8.613066195460134e-9,-6.506383852720353e-4,-1.0130449155765347e-5,8.525370284901691e-9,-6.501484713535216e-4,-1.0336665778532513e-5,8.455876704000505e-9,-6.496113485493177e-4,-1.0454609877589606e-5,8.414782975243667e-9,-6.490671674646127e-4,-1.0473577830441985e-5,8.405737418544261e-9,-6.485542315122563e-4,-1.0402716045749107e-5,8.42594207718587e-9,-6.48101570190052e-4,-1.0266290315339773e-5,8.467673384414735e-9,-6.477249772667448e-4,-1.0096801161149698e-5,8.520499798179897e-9,-6.474264817325805e-4,-9.928189624151298e-6,8.573469231980985e-9,-6.471962142913522e-4,-9.790591753984345e-6,8.616798727509629e-9,-6.470153398393853e-4,-9.707072173579713e-6,8.642931881769316e-9,-6.4685902944632e-4,-9.691946903899617e-6,8.647090904414083e-9,-6.466990567131604e-4,-9.749935634588221e-6,8.627569008879582e-9,-6.465061945891082e-4,-9.875497327061216e-6,8.585973740369635e-9,-6.462529770962636e-4,-1.005213254042066e-5,8.527489357020453e-9,-6.459175297868126e-4,-1.0252057697941712e-5,8.46101921967877e-9,-6.454888874271263e-4,-1.0437434177263124e-5,8.398808897746156e-9,-6.449732096697071e-4,-1.0564966265109888e-5,8.354946495019238e-9,-6.4439852831923e-4,-1.0595381812212404e-5,8.34225639995346e-9,-6.438138844513587e-4,-1.0507072144502154e-5,8.367854756241516e-9,-6.432790367365826e-4,-1.0308974899831868e-5,8.428993979308454e-9,-6.428454586197086e-4,-1.0044472629606271e-5,8.511840347096126e-9,-6.425364546618369e-4,-9.780404242463435e-6,8.595019151624936e-9,-6.423374992473061e-4,-9.584105091257316e-6,8.656940621566346e-9,-6.422025862017104e-4,-9.499924509528801e-6,8.683268961814048e-9,-6.420723318815535e-4,-9.536788226021915e-6,8.6709032555823e-9,-6.418937058551346e-4,-9.670339340684684e-6,8.62736165406817e-9,-6.416333150807353e-4,-9.854985606826542e-6,8.567021549391805e-9,-6.412819489618678e-4,-1.0038675384978085e-5,8.506456394204669e-9,-6.40852233208935e-4,-1.0175358821881159e-5,8.460459308358457e-9,-6.403723843214741e-4,-1.0233119886925515e-5,8.439407583253215e-9,-6.398785177155639e-4,-1.0197922583846564e-5,8.44800812947473e-9,-6.394070755339369e-4,-1.0073651943128085e-5,8.485229457435074e-9,-6.389883923031362e-4,-9.879211991447938e-6,8.545190825663756e-9,-6.386421940044092e-4,-9.643564938301254e-6,8.61872891621823e-9,-6.383754932638375e-4,-9.399866438278023e-6,8.695270282083074e-9,-6.381828126059341e-4,-9.179868626602678e-6,8.764629424150486e-9,-6.380482197594612e-4,-9.009455497870036e-6,8.818449463555083e-9,-6.379484020972791e-4,-8.905757191846968e-6,8.851137444227476e-9,-6.378559844764216e-4,-8.875794396678722e-6,8.860308373744816e-9,-6.37742611576723e-4,-8.916182840260416e-6,8.846890961194638e-9,-6.375817826161573e-4,-9.013389503892508e-6,8.815063136955268e-9,-6.373517365413405e-4,-9.144324590548281e-6,8.772088767448038e-9,-6.37038822435467e-4,-9.277480646007872e-6,8.727983133697308e-9,-6.366416476230471e-4,-9.375433709051482e-6,8.69473010267958e-9,-6.361755073060954e-4,-9.400076070259292e-6,8.68460137525384e-9,-6.356751215483993e-4,-9.321725715954837e-6,8.70721463674457e-9,-6.351921226563311e-4,-9.131431137281154e-6,8.765577089452952e-9,-6.34783668220924e-4,-8.851983055038034e-6,8.852573074499977e-9,-6.34492590110691e-4,-8.53933103808297e-6,8.950528563696693e-9,-6.343273922649219e-4,-8.26772377613986e-6,9.035920785086607e-9,-6.342551582389573e-4,-8.102013804904856e-6,9.088118007656425e-9,-6.342142013915741e-4,-8.071933386762328e-6,9.097504097485443e-9,-6.341394360266019e-4,-8.163387841999844e-6,9.06827899549311e-9,-6.339853162802021e-4,-8.329403778276332e-6,9.01508325066568e-9,-6.337359214736137e-4,-8.510810762680521e-6,8.956528860220945e-9,-6.334023030696212e-4,-8.65473815155575e-6,8.909374863487501e-9,-6.330132471509208e-4,-8.725202991217194e-6,8.885158614041552e-9,-6.326051717095914e-4,-8.706169178413972e-6,8.889176992237429e-9,-6.32214019748295e-4,-8.599843727994052e-6,8.920959050065301e-9,-6.318697327111989e-4,-8.422780448879686e-6,8.975440229886825e-9,-6.315928418750007e-4,-8.20125617049522e-6,9.044392176943476e-9,-6.313926873838825e-4,-7.966459175451952e-6,9.117945199759327e-9,-6.31267082506243e-4,-7.749777386235528e-6,9.186104282521891e-9,-6.312033160743475e-4,-7.5785372180136775e-6,9.240130028371382e-9,-6.311803126735913e-4,-7.472534294452365e-6,9.273661681811642e-9,-6.311716770969148e-4,-7.441681249593242e-6,9.283469414099118e-9,-6.311491861629334e-4,-7.484987837433047e-6,9.269772409499044e-9,-6.310862639818491e-4,-7.590780571477355e-6,9.236162458649285e-9,-6.309612058273856e-4,-7.737892241529536e-6,9.189230845951367e-9,-6.307601275839634e-4,-7.897660405035442e-6,9.137956611667645e-9,-6.304796987183105e-4,-8.036756534142556e-6,9.09284140190737e-9,-6.301296693209371e-4,-8.121168651637492e-6,9.064674114885852e-9,-6.297347052073675e-4,-8.122014010732786e-6,9.062695008476826e-9,-6.293340333682221e-4,-8.02357893613418e-6,9.092032490280441e-9,-6.289764922907992e-4,-7.832498886235678e-6,9.150771158405365e-9,-6.287088356458074e-4,-7.584313389584958e-6,9.227855564074418e-9,-6.285582300395714e-4,-7.340955663643736e-6,9.303857526237659e-9,-6.285162181702288e-4,-7.173981894358338e-6,9.35622506385365e-9,-6.28535844534191e-4,-7.137050918742098e-6,9.367918818323381e-9,-6.285482266619833e-4,-7.242236086511384e-6,9.334891322630107e-9,-6.284908233474023e-4,-7.4556587282647425e-6,9.267547066221383e-9,-6.28330425274692e-4,-7.714648020679488e-6,9.185435045716488e-9,-6.28069302206002e-4,-7.95377724697567e-6,9.109102634548203e-9,-6.277362671666278e-4,-8.124785819023314e-6,9.053825972438715e-9,-6.273721375619873e-4,-8.204270724462586e-6,9.02715680817319e-9,-6.27017398081553e-4,-8.191793049541557e-6,9.029461806338658e-9,-6.267047725449272e-4,-8.103665827061228e-6,9.055810702686439e-9,-6.26456043916988e-4,-7.966249400547607e-6,9.098033223137005e-9,-6.26281416479543e-4,-7.810389877515416e-6,9.146451274581206e-9,-6.261800463441795e-4,-7.667092566462788e-6,9.191260130576387e-9,-6.261411718711373e-4,-7.564004290537873e-6,9.223675064183579e-9,-6.261457836463466e-4,-7.522438367703082e-6,9.23690378724907e-9,-6.261689058554466e-4,-7.554911651594159e-6,9.226935824039986e-9,-6.26182575765119e-4,-7.663394769762143e-6,9.193084339014298e-9,-6.261594321595429e-4,-7.83867655737204e-6,9.138166390547462e-9,-6.26076519398364e-4,-8.061135092227624e-6,9.068247870454783e-9,-6.259188201018052e-4,-8.302926480673475e-6,8.991964522431026e-9,-6.256821123187454e-4,-8.531474630101965e-6,8.919455933728389e-9,-6.253747887567023e-4,-8.714062415411706e-6,8.860964423618094e-9,-6.250183114255093e-4,-8.823240323023451e-6,8.825167866103795e-9,-6.246458882436894e-4,-8.842823215536685e-6,8.817300503612222e-9,-6.242985755887415e-4,-8.774026346559433e-6,8.837199099376945e-9,-6.240177934968095e-4,-8.640273119230142e-6,8.87774343727035e-9,-6.238340168367981e-4,-8.487734929015043e-6,8.924628410892147e-9,-6.237537835039231e-4,-8.37786762163323e-6,8.958649435262117e-9,-6.237508622334895e-4,-8.370050553809897e-6,8.961109428361436e-9,-6.237694285501078e-4,-8.498608243715725e-6,8.921029687418638e-9,-6.237425116459058e-4,-8.75592709653261e-6,8.840509552635665e-9,-6.236182223750581e-4,-9.0935440897417e-6,8.734482255018053e-9,-6.233789176946422e-4,-9.44210315649724e-6,8.62453087546554e-9,-6.230431618178639e-4,-9.738006393072087e-6,8.530559779025655e-9,-6.226528415322329e-4,-9.942072412796151e-6,8.464944949980187e-9,-6.222558156538971e-4,-1.0044216892862036e-5,8.431044644216811e-9,-6.218928123420268e-4,-1.0057759649626142e-5,8.424931676993069e-9,-6.215911924046659e-4,-1.0010051523072495e-5,8.438260126232764e-9,-6.213639804945358e-4,-9.934048776771606e-6,8.460847692598394e-9,-6.212115296909202e-4,-9.862436775050359e-6,8.482499035264433e-9,-6.211238864357817e-4,-9.823973462843352e-6,8.494171700339035e-9,-6.210830596535341e-4,-9.841115150435778e-6,8.488757155704299e-9,-6.210651942122257e-4,-9.928215073960674e-6,8.461672312188594e-9,-6.210429443543682e-4,-1.0090001829574346e-5,8.411340895070526e-9,-6.209883936927952e-4,-1.032045635967511e-5,8.339532086435201e-9,-6.208766895726924e-4,-1.0602611237518307e-5,8.251410557946112e-9,-6.206901011511374e-4,-1.0909904384581257e-5,8.155117882712867e-9,-6.204217801816662e-4,-1.1209428967393452e-5,8.060785794006027e-9,-6.200783346355796e-4,-1.1467000570356854e-5,7.978999665257574e-9,-6.196803527606607e-4,-1.1653487857353938e-5,7.918867885019981e-9,-6.192602675084233e-4,-1.1751341629004252e-5,7.886009589301413e-9,-6.18857430993645e-4,-1.1760013081941588e-5,7.880853644284182e-9,-6.185107199373036e-4,-1.1698990162283051e-5,7.897639687734814e-9,-6.182494033759342e-4,-1.1607106693188978e-5,7.924550386176266e-9,-6.180837782626559e-4,-1.1536704553317361e-5,7.945441153139379e-9,-6.17998354061986e-4,-1.1541930108901036e-5,7.943422534415343e-9,-6.179514865732182e-4,-1.1662608663681637e-5,7.905878369024749e-9,-6.178847530264709e-4,-1.1908666705688085e-5,7.829382187794986e-9,-6.177413716940561e-4,-1.225291771545529e-5,7.722050838337925e-9,-6.174866683392963e-4,-1.2638281908291842e-5,7.601388082277714e-9,-6.171202061499132e-4,-1.2997807711744528e-5,7.488094639614473e-9,-6.166733164451345e-4,-1.3277552122048224e-5,7.398956214429256e-9,-6.161948260617495e-4,-1.3451111439177265e-5,7.342324255674225e-9,-6.157338992816079e-4,-1.3521276834735159e-5,7.317585667968248e-9,-6.153277910312762e-4,-1.351221220619276e-5,7.3175400954822244e-9,-6.149969832299286e-4,-1.345864223227892e-5,7.331678474457581e-9,-6.147459001310118e-4,-1.3396792379450818e-5,7.3489284361196675e-9,-6.14566195981989e-4,-1.335865891362545e-5,7.3594093806847335e-9,-6.144404163975216e-4,-1.3369061432935648e-5,7.3553652588823905e-9,-6.143451013492217e-4,-1.3444276092296466e-5,7.331624223806665e-9,-6.142533201726146e-4,-1.3591271145411236e-5,7.285864502738724e-9,-6.141370824533147e-4,-1.3807054893883965e-5,7.2188286363125555e-9,-6.139701752177742e-4,-1.4078197634895255e-5,7.134475176715785e-9,-6.137317622253945e-4,-1.4381127354302392e-5,7.03989660873347e-9,-6.13410548401449e-4,-1.4684067691371548e-5,6.944744457685035e-9,-6.130086364730966e-4,-1.4951295234998012e-5,6.8599511266353936e-9,-6.125436581487522e-4,-1.5149749237378634e-5,6.795727421966501e-9,-6.120476639627279e-4,-1.5256983677622905e-5,6.759136642679807e-9,-6.115619176413706e-4,-1.5268340231572266e-5,6.751886205597447e-9,-6.111281095430912e-4,-1.520077746265615e-5,6.769114447606619e-9,-6.107779587857513e-4,-1.5091461683002552e-5,6.799746818271109e-9,-6.10524015294988e-4,-1.4990666324170982e-5,6.828571027830531e-9,-6.103544553284269e-4,-1.4950126437351983e-5,6.839718154874809e-9,-6.10233932630094e-4,-1.5009403395997819e-5,6.820816675408024e-9,-6.101112797303565e-4,-1.5183860384006196e-5,6.7667449207401965e-9,-6.099330136988942e-4,-1.5458296216177136e-5,6.6817180549403645e-9,-6.096591780398321e-4,-1.5789545255279567e-5,6.578625916310926e-9,-6.092759401267423e-4,-1.611861496564348e-5,6.475384794437283e-9,-6.087995316766636e-4,-1.638857118742033e-5,6.389456320634693e-9,-6.082696917744599e-4,-1.656102986792536e-5,6.332762451172584e-9,-6.07735931357823e-4,-1.6624724248411486e-5,6.309028251969762e-9,-6.07243028636269e-4,-1.659408062376702e-5,6.314176973263146e-9,-6.068212130456064e-4,-1.6500688633924005e-5,6.3388763395423195e-9,-6.064828882107512e-4,-1.6382732655089433e-5,6.3716957047222936e-9,-6.062244250029457e-4,-1.6276375396916556e-5,6.401688363734559e-9,-6.060303124501623e-4,-1.6210566121514825e-5,6.41997117246288e-9,-6.058775295989655e-4,-1.6204774019256874e-5,6.420448907864246e-9,-6.057391575612956e-4,-1.6268443228459086e-5,6.400024095330046e-9,-6.055871563899351e-4,-1.640110876257458e-5,6.358597590462493e-9,-6.053947651586242e-4,-1.6592563064539658e-5,6.299040120511544e-9,-6.051391799853258e-4,-1.6823062293831563e-5,6.2271479239230684e-9,-6.04804958969757e-4,-1.7064185629920318e-5,6.15140407656365e-9,-6.043880305658054e-4,-1.7281339145854306e-5,6.082244629251485e-9,-6.038993664978827e-4,-1.743882255386278e-5,6.03054138334135e-9,-6.033664982363028e-4,-1.7507647128342022e-5,6.005236775662678e-9,-6.028306776843586e-4,-1.747471621344875e-5,6.0105545030052955e-9,-6.02338498179153e-4,-1.7350074414647643e-5,6.043785475000533e-9,-6.019293636463869e-4,-1.7168208077473955e-5,6.094852354472843e-9,-6.016229799273229e-4,-1.6981102965108023e-5,6.148328418570691e-9,-6.014120043088848e-4,-1.6844415703121967e-5,6.1875079574704055e-9,-6.012631542790681e-4,-1.6801491798937394e-5,6.199152357907398e-9,-6.011264926259588e-4,-1.687094638850435e-5,6.177250027198649e-9,-6.009494858060641e-4,-1.7041783355707502e-5,6.124605564008008e-9,-6.006912495843881e-4,-1.7277030403387907e-5,6.051910031149934e-9,-6.003329547922971e-4,-1.7524265175610315e-5,5.974701125327572e-9,-5.998817609412311e-4,-1.7729749635034893e-5,5.909152133979997e-9,-5.993674834698096e-4,-1.7852060415235455e-5,5.8679359897686786e-9,-5.98833377167506e-4,-1.7871308208750187e-5,5.857377281089162e-9,-5.983242961249349e-4,-1.7791603804934904e-5,5.876628602108236e-9,-5.978761089750183e-4,-1.763692721889734e-5,5.9188348328191164e-9,-5.97509246371083e-4,-1.744281060909608e-5,5.973566370425565e-9,-5.972272340443155e-4,-1.724717783696112e-5,6.029530158965291e-9,-5.970191412732754e-4,-1.708303930127975e-5,6.076760853223087e-9,-5.968639601907031e-4,-1.6974182393121108e-5,6.107949062772968e-9,-5.967351618909186e-4,-1.6933562355692315e-5,6.1189757620988596e-9,-5.966044914543551e-4,-1.6963408114122988e-5,6.108924653343465e-9,-5.964448552706594e-4,-1.7056054741231575e-5,6.079858424794432e-9,-5.962326779452772e-4,-1.719488339402509e-5,6.036551327657856e-9,-5.959503269411983e-4,-1.7355296242159556e-5,5.9862122504836265e-9,-5.955890709894159e-4,-1.7506243438176608e-5,5.9380510048463094e-9,-5.951525234145372e-4,-1.7613258416163484e-5,5.902393637339857e-9,-5.946596553230791e-4,-1.764400034962936e-5,5.889033529766786e-9,-5.941454005656148e-4,-1.757658081028564e-5,5.9047300999132285e-9,-5.936562505153676e-4,-1.740909145309199e-5,5.9503386560754e-9,-5.932393300043767e-4,-1.7166185049999746e-5,6.018820818675055e-9,-5.929270253618056e-4,-1.6897363809678338e-5,6.095715953083003e-9,-5.927235829331455e-4,-1.6664334583585255e-5,6.162832492505709e-9,-5.926012168281408e-4,-1.6521086061127168e-5,6.204080876826821e-9,-5.925088318791681e-4,-1.6495650783895652e-5,6.2108462578212325e-9,-5.923893296595289e-4,-1.6581983910685432e-5,6.18445634623603e-9,-5.921973240230338e-4,-1.6744373968298434e-5,6.135018198325406e-9,-5.919105305805832e-4,-1.6930486544110382e-5,6.077709827522491e-9,-5.915325837551485e-4,-1.708674963487434e-5,6.028320742756395e-9,-5.910887401414671e-4,-1.7171114333858196e-5,5.999481940305171e-9,-5.906173977802621e-4,-1.7160751663905477e-5,5.998318193545036e-9,-5.901602907269286e-4,-1.7054266849847147e-5,6.025679671747184e-9,-5.897536026274595e-4,-1.6869186278252847e-5,6.076768658723353e-9,-5.894215706944987e-4,-1.6636088071657184e-5,6.142787676934763e-9,-5.891734417193177e-4,-1.639112845867565e-5,6.21311247089221e-9,-5.890037891503861e-4,-1.616881901687457e-5,6.277444531418832e-9,-5.888953870874903e-4,-1.599649526801642e-5,6.32750261058349e-9,-5.888234156540204e-4,-1.5891120266408232e-5,6.358035497480615e-9,-5.887598278097893e-4,-1.585830828911002e-5,6.36716114540014e-9,-5.886770911880141e-4,-1.5892951435849457e-5,6.356201350362242e-9,-5.88551067772663e-4,-1.598065881617845e-5,6.329251478975357e-9,-5.883632730491481e-4,-1.609944079656462e-5,6.292675486505938e-9,-5.881029486085081e-4,-1.622153632414498e-5,6.254574948934901e-9,-5.877692932525501e-4,-1.6315735016464423e-5,6.224131558643309e-9,-5.873738337045345e-4,-1.6350916709415508e-5,6.2105932820424296e-9,-5.869421485315761e-4,-1.630165097021894e-5,6.221632150191717e-9,-5.865131121598357e-4,-1.6156063475258574e-5,6.261002414793579e-9,-5.861331744440621e-4,-1.592434760802166e-5,6.325989749491587e-9,-5.858441940187316e-4,-1.5643598634390996e-5,6.405942312898085e-9,-5.856671951075539e-4,-1.5373106219251778e-5,6.483607719282582e-9,-5.855897763285556e-4,-1.517729276675414e-5,6.540086767802591e-9,-5.855664407766135e-4,-1.5101743305100796e-5,6.561819413722951e-9,-5.855345304499817e-4,-1.5154956209859986e-5,6.545946710766161e-9,-5.854378007236991e-4,-1.5306366023333386e-5,6.500984799091855e-9,-5.852448952227367e-4,-1.550045098503084e-5,6.442830961710452e-9,-5.849551516575722e-4,-1.567734639813534e-5,6.388848412759949e-9,-5.845930082893017e-4,-1.5789777542943528e-5,6.352965558410412e-9,-5.841969678310368e-4,-1.5811729052473348e-5,6.343113417189745e-9,-5.838084552194186e-4,-1.5739511632880423e-5,6.360814546463471e-9,-5.834633032295308e-4,-1.5588003820527e-5,6.402145833924053e-9,-5.831864760835484e-4,-1.538472081382847e-5,6.4593502606737386e-9,-5.829896181558738e-4,-1.5163375096637597e-5,6.5226561160815544e-9,-5.828708999533577e-4,-1.4957769589611858e-5,6.582074977801076e-9,-5.828167555766546e-4,-1.479662672105976e-5,6.628984531476504e-9,-5.828049993600993e-4,-1.46998740108272e-5,6.657304486326205e-9,-5.828086784632086e-4,-1.4676619073704028e-5,6.664156600488167e-9,-5.828000486403008e-4,-1.472477456925716e-5,6.649997471487258e-9,-5.827541399829672e-4,-1.4832100153552331e-5,6.618295601842242e-9,-5.826515746817173e-4,-1.4978198357449995e-5,6.574915976578972e-9,-5.824806499688132e-4,-1.5136975222470618e-5,6.5273858129103555e-9,-0.00058223891266244855,-1.5279382997478107e-5,6.484113573877451e-9,-5.819343932522649e-4,-1.537659130322262e-5,6.453510098108357e-9,-5.815864337643335e-4,-1.540395190071223e-5,6.442875322162274e-9,-5.812255138914551e-4,-1.5346207013270155e-5,6.456887019322757e-9,-5.808906783087563e-4,-1.5203879326331496e-5,6.495696015125998e-9,-5.806227398257667e-4,-1.4999252917115385e-5,6.553106536171523e-9,-5.804523980144355e-4,-1.4778150938693694E-05,6.6159779015583296e-9,-5.803857787226134e-4,-1.460244790593015e-5,6.666344613112382e-9,-5.803949019080188e-4,-1.453107430828226e-5,6.68691651811743e-9,-5.804222577193308e-4,-1.4595598468279076e-5,6.6681996557004115e-9,-5.804015691477434e-4,-1.4784365571006996e-5,6.613182223466211e-9,-5.802844416075218e-4,-1.504659664064087e-5,6.536251455252701e-9,-5.800572407115345e-4,-1.5314205201811868e-5,6.456956105272316e-9,-5.79740462121484e-4,-1.5527257460748158e-5,6.392682319350163e-9,-5.793754455308698e-4,-1.564997575685766e-5,6.354031421288331e-9,-5.79008526869674e-4,-1.5673984575231003E-05,6.3438332685434564e-9,-5.786793595545836e-4,-1.561305703577987e-5,6.358555023821292e-9,-5.78414926698478e-4,-1.5494822966848187e-5,6.390561211013941e-9,-5.782279782895778e-4,-1.535291284406682e-5,6.430282529202295e-9,-5.781179986625985e-4,-1.5220866757312826e-5,6.467953037038186e-9,-5.780733038593612e-4,-1.5127728821522725e-5,6.494942808591026e-9,-5.780737214613339e-4,-1.5094878202343984e-5,6.5047765753731806e-9,-5.780937304323509e-4,-1.5133945325895573e-5,6.493829724860568e-9,-5.781059012122124e-4,-1.5245845768728994e-5,6.461654192249107e-9,-5.780844231366714e-4,-1.5420967008494582E-05,6.410916404303534e-9,-5.780084375089962e-4,-1.5640566187065733e-5,6.346952753693187e-9,-5.778647777628711e-4,-1.5879285361295647e-5,6.277008199105833e-9,-5.776498175490725e-4,-1.6108436934896513e-5,6.209288793870668e-9,-5.773703656839252e-4,-1.6299721111280603e-5,6.151931069035016e-9,-5.770436111533959e-4,-1.6429208290678547e-5,6.111913238799296e-9,-5.766960225533119e-4,-1.6481506020845262e-5,6.093889659946264e-9,-5.763608734161528e-4,-1.6454038016908552e-5,6.098936037071565e-9,-5.760736744361726e-4,-1.6361021724264736e-5,6.123317511020036e-9,-5.758647102549619e-4,-1.6235696451862072e-5,6.157725998483951e-9,-5.757488547335339e-4,-1.612803540234014e-5,6.1878352067051535e-9,-5.757153315080947e-4,-1.609480237938911e-5,6.197125012537102e-9,-5.757234435926061e-4,-1.6181340271018654e-5,6.17217305833007e-9,-5.757111211388329e-4,-1.6400971995423106e-5,6.108703432860775e-9,-5.756170143529824e-4,-1.6724228696811727e-5,6.014819069588441e-9,-5.754058752564376e-4,-1.7087730422599016e-5,5.908527015219574e-9,-5.750819117894468e-4,-1.7419566737748216e-5,5.810457691770534e-9,-5.746829127406637e-4,-1.7665934924859706e-5,5.736209930949652e-9,-5.742617293776332e-4,-1.7804887133825812e-5,5.692403621165638e-9,-5.738676244788915e-4,-1.7844643668928444e-5,5.677123312045796e-9,-5.735352118200017e-4,-1.781324586487339e-5,5.682774688163753e-9,-5.732813705044003e-4,-1.774712544477777e-5,5.699224028512855e-9,-5.731070706253558e-4,-1.7682465513048927e-5,5.716183635261324e-9,-5.730010810481334e-4,-1.7650014543434743e-5,5.7246996299768535e-9,-5.729437243720952e-4,-1.7672436560521165e-5,5.717992329661441e-9,-5.729101327422091e-4,-1.77629912703616e-5,5.691943387538161e-9,-5.728732254490138e-4,-1.7924881686606425e-5,5.645364913125561e-9,-5.728066872098459e-4,-1.8151183111504288e-5,5.580046983978404e-9,-5.726880446715707e-4,-1.8425518479711568e-5,5.500544376149344e-9,-5.725017360320156e-4,-1.8723776519021976e-5,5.4136497171616706e-9,-5.722417478110209e-4,-1.901709758465021e-5,5.327525281669176e-9,-5.719132058612187e-4,-1.9275973453983113e-5,5.250556794951275e-9,-5.715324599224961e-4,-1.9474966424702655e-5,5.190061549896955e-9,-5.711254487065863e-4,-1.9597425970417595e-5,5.150993130292952e-9,-5.707243215314012e-4,-1.963951786184574e-5,5.134796911166756e-9,-5.703624645452386e-4,-1.961289496480425e-5,5.138582384870229e-9,-5.700681701023597e-4,-1.9545349551733103e-5,5.154808129149603e-9,-5.698573617980196e-4,-1.947850234148492e-5,5.171796776237571e-9,-5.697265168248463e-4,-1.946126166119291e-5,5.175504776714801e-9,-5.696483046445741e-4,-1.9538307489946467e-5,5.152814866181088e-9,-5.695737447050487e-4,-1.9735023712205888e-5,5.095954657144991e-9,-5.694440581573207e-4,-2.0044122435153433e-5,5.006492424902162e-9,-5.692107976121244e-4,-2.0422259733411498e-5,4.896447185420986e-9,-5.688556702159739e-4,-2.080239735784011e-5,4.784807248298537e-9,-5.683984430252771e-4,-2.1118146298752406e-5,4.69055903235853e-9,-5.678877874524411e-4,-2.1327200844530532e-5,4.6259837892894646e-9,-5.673813072802742e-4,-2.1421699487486857e-5,4.593705379214873e-9,-5.669266461901139e-4,-2.1423333992840117e-5,4.588040913127525e-9,-5.665515251973581e-4,-2.1370168449335505e-5,4.598631280140418e-9,-5.66262954244887e-4,-2.1303510202976556e-5,4.614029495947506e-9,-5.660516519242294e-4,-2.1259150169743164e-5,4.624106881604416e-9,-5.658977760906469e-4,-2.1263246516499423e-5,4.621241923637268e-9,-5.657758344743934e-4,-2.1331262909287216e-5,4.600715978969188e-9,-5.656582879656547e-4,-2.146824690958318e-5,4.560744399958647e-9,-5.655182799852074e-4,-2.166944979816653e-5,4.502372881234427e-9,-5.653320939464026e-4,-2.19210611198664e-5,4.429288721729575e-9,-5.650817267772786e-4,-2.2201302733604196e-5,4.347494108741701e-9,-5.647576281566446e-4,-2.248238891148829e-5,4.2647329227178e-9,-5.64361175875774e-4,-2.273385814627313e-5,4.1895539317782425e-9,-5.639060211063388e-4,-2.2927360460003696e-5,4.129994037758887e-9,-5.634173669126164e-4,-2.3042324624474837e-5,4.092025805841426e-9,-5.629285951340259e-4,-2.3071330028784256e-5,4.078067292741761e-9,-5.624753358397186e-4,-2.3023652525244365e-5,4.085953126634584e-9,-5.620879235594856e-4,-2.2925599059856908e-5,4.1087412604200885e-9,-5.617838311213657e-4,-2.2816948292584702e-5,4.13556726191145e-9,-5.615618506350042e-4,-2.274366245931516e-5,4.1535543827756625e-9,-5.613996862607292e-4,-2.2747751693369897e-5,4.150602400752755e-9,-5.61256426475516e-4,-2.2855979724977274e-5,4.1186293748158945e-9,-5.61080812039059e-4,-2.307016575944345e-5,4.056477812301431e-9,-5.608247544560862e-4,-2.3362823347901296e-5,3.971353014138016e-9,-5.6045888275338e-4,-2.3681771753724775e-5,3.877666551810311e-9,-5.599840255643514e-4,-2.3964648029816697e-5,3.7929726560466655e-9,-5.594323224548366e-4,-2.4158896301923775e-5,3.732284697554104e-9,-5.588562140180068e-4,-2.4238382403495358e-5,3.7033386543166194e-9,-5.583104935056323e-4,-2.4208922097151482e-5,3.7049913841555217e-9,-5.578362118896362e-4,-2.4101634993633252e-5,3.729013562684922e-9,-5.574526700823866e-4,-2.395959922159319e-5,3.763717738012945e-9,-5.571580150477938e-4,-2.3824918225424018e-5,3.7974724057465164e-9,-5.56934945270612e-4,-2.3730431642789787e-5,3.820986693463586e-9,-5.567575402096818e-4,-2.369650431855389e-5,3.828264474037562e-9,-5.565968561839238e-4,-2.3731175634325677e-5,3.81667238499676e-9,-5.564247258473144e-4,-2.383170766272784e-5,3.786608603817477e-9,-5.562162343773809e-4,-2.3986308687498875e-5,3.741076017959136e-9,-5.559516320965893e-4,-2.41756410521933e-5,3.6852669334650524e-9,-5.556182989939095e-4,-2.4374329729557413e-5,3.626126257835752e-9,-5.552129829469255e-4,-2.455308708972398e-5,3.5717509128408136e-9,-5.547439478003086e-4,-2.4682169708976556e-5,3.5304410056635687e-9,-5.542320441001034e-4,-2.4736519034990855e-5,3.509299202176376e-9,-5.537093394875636e-4,-2.470209240070845e-5,3.5124945121858324e-9,-5.532141884717492e-4,-2.4581739735308707e-5,3.539625413001244e-9,-5.527827987017785e-4,-2.4398065123244182e-5,3.584874043486559e-9,-5.524392207026548e-4,-2.419093064879187e-5,3.6375935558350362E-09,-5.521871673866484e-4,-2.400904254983496e-5,3.6845003460724823e-9,-5.52006996859421e-4,-2.3897600320895216e-5,3.7129769442225496e-9,-5.518594417411545e-4,-2.3885806156130697e-5,3.714505319352247e-9,-5.516952472542898e-4,-2.3978206075858976e-5,3.6871706513466653e-9,-5.514680023266997e-4,-2.415252676916681e-5,3.636467576060659e-9,-5.511466570996784e-4,-2.436472997812125e-5,3.5741160763841065e-9,-5.507243054631822e-4,-2.456016575596165e-5,3.5151030037156743e-9,-5.502204943898792e-4,-2.4688078368491355e-5,3.4736716022299434e-9,-5.49675845316952e-4,-2.4715297420699776e-5,3.4594450841273604e-9,-5.491403496431156e-4,-2.4634524609268043e-5,3.475010754579904e-9,-5.486594079579832e-4,-2.4464309834586896e-5,3.5158016687115214e-9,-5.482626949453814e-4,-2.424130364105868e-5,3.572121989232335e-9,-5.479593003710058e-4,-2.400859263852101e-5,3.6322781071167195e-9,-5.477393924139225e-4,-2.380483572567349e-5,3.685543859039702e-9,-5.475800136344878e-4,-2.365734300350956e-5,3.7241138416981567e-9,-5.47451900115605e-4,-2.3579686113701558e-5,3.743864278401933e-9,-5.473251545092862e-4,-2.3572576485177517e-5,3.744220422532077e-9,-5.471730460260657e-4,-2.3626248739021626e-5,3.727569108803425e-9,-5.469742478632765e-4,-2.3723043848052887e-5,3.6985616396725427e-9,-5.467142469598954e-4,-2.3839630731377964e-5,3.6634824609621807e-9,-5.463866264206015e-4,-2.3948973655604125e-5,3.6296880385067596e-9,-5.4599456793534e-4,-2.4022629138410048e-5,3.604980769764583e-9,-5.455523444943196e-4,-2.4034135649642785e-5,3.5967054365603564e-9,-5.450858818683846e-4,-2.396401744104895e-5,3.6104037986387385e-9,-5.446308564687652e-4,-2.380610222496027e-5,3.648086038965713e-9,-5.442267710418497e-4,-2.3573376044700058e-5,3.7065940327411654e-9,-5.43906780201333e-4,-2.3300037015731352e-5,3.776970362392915e-9,-5.436858585814063e-4,-2.303631065445945e-5,3.8457757017923984e-9,-5.43552613478327e-4,-2.28353475000358e-5,3.898554409891338e-9,-5.434699258623914e-4,-2.2736277504907688e-5,3.924381501274142e-9,-5.433855832143338e-4,-2.275078970747129e-5,3.919540539705527e-9,-5.43248646299094e-4,-2.285936214945721e-5,3.888688548443496e-9,-5.430245801652687e-4,-2.3018194797770242e-5,3.8431759853901846e-9,-5.427037893107168e-4,-2.3172944399802506e-5,3.7974973736510936e-9,-5.423020260258028e-4,-2.3273629234107787e-5,3.765329016282113e-9,-5.418542195221602e-4,-2.328631805513169e-5,3.756319626683319e-9,-5.414045400541133e-4,-2.3199382210688513e-5,3.774257587440266e-9,-5.409955890221134e-4,-2.302384304625818e-5,3.8167930066406206e-9,-5.406592269132189e-4,-2.2788582348018324e-5,3.876564618794517e-9,-5.404109156371855e-4,-2.253214165155441e-5,3.943315026925249e-9,-5.402484736817223e-4,-2.2293496058127136e-5,4.00637464546443e-9,-5.401548723226671e-4,-2.210423231623976e-5,4.056855142789439e-9]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json new file mode 100644 index 000000000..f56819cf3 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":7000,"numberOfSamples":1000,"samples":[-5.401035826582183e-4,-2.1983771746004456e-5,4.089071108861903e-9,-5.400645679375473e-4,-2.1937995914044596e-5,4.1010390739496695e-9,-5.400093979365809e-4,-2.1960549237341188e-5,4.094200825458988e-9,-5.399147607226752e-4,-2.203560775605646e-5,4.072680770337793e-9,-5.397644338651072e-4,-2.2140989396072942e-5,4.0424039620270295e-9,-5.395502643031555e-4,-2.2250959079911428e-5,4.010291455194114e-9,-5.392727708698771e-4,-2.233868896010399e-5,3.983582390762636e-9,-5.389417235021638e-4,-2.2378792834005243e-5,3.969178139964558e-9,-5.385766058145648e-4,-2.235055698671764e-5,3.972815745495291e-9,-5.382062428829531e-4,-2.2242365349685453e-5,3.9978965146973945e-9,-5.378662132655593e-4,-2.205712418011711e-5,4.043993326717811e-9,-5.375924932704364e-4,-2.181705877637256e-5,4.105479870305896e-9,-5.374109340395555e-4,-2.1564488189815053e-5,4.171221914461289e-9,-5.373252109046606e-4,-2.13546121672999e-5,4.226432351021938e-9,-5.373095626709229e-4,-2.123923851906108e-5,4.256999417283581e-9,-5.373130817418842e-4,-2.1246850964482913e-5,4.25485673473855e-9,-5.372765380678705e-4,-2.136960735856047e-5,4.221561718856039e-9,-5.371540300970259e-4,-2.156549994879516e-5,4.167859343731849e-9,-5.36928145915775e-4,-2.177449463181616e-5,4.109507993256763e-9,-5.36612298142394e-4,-2.193926959851254e-5,4.061836554881471e-9,-5.362421974391817e-4,-2.202084762893932e-5,4.035594559950374e-9,-5.358628658080441e-4,-2.200502185841941e-5,4.035163172736923e-9,-5.355167351147426e-4,-2.1900830823744038e-5,4.058798324504693e-9,-5.35235449411885e-4,-2.173439788390032e-5,4.100071676730384e-9,-5.350357193602122e-4,-2.15410881740401e-5,4.14980207032798e-9,-5.349185757880749e-4,-2.135782693181579e-5,4.198050291539687e-9,-5.348712290073628e-4,-2.121657442592248e-5,4.2359280087428855e-9,-5.348708000481933e-4,-2.1139615342117445e-5,4.257004944159546e-9,-5.348890826615417e-4,-2.113709309176623e-5,4.258128208977309e-9,-5.348974104172614e-4,-2.1206799246401138e-5,4.239584522007182e-9,-5.348708384321045e-4,-2.1335822917691524e-5,4.204678615706449e-9,-5.347911231697716e-4,-2.1503424398811796e-5,4.158913513206647e-9,-5.346483663470459e-4,-2.1684383203511062e-5,4.109023325019758e-9,-5.344415971986584e-4,-2.185222293312799e-5,4.062070768370815e-9,-5.341787121227865e-4,-2.198213649495927e-5,4.024683100836483e-9,-5.338760303296781e-4,-2.2053786749643512e-5,4.002365575691231e-9,-5.335574557412858e-4,-2.2054309116071213e-5,3.998758028608726e-9,-5.332528017860458e-4,-2.198181627770456e-5,4.014702338546216e-9,-5.32994271803446e-4,-2.1849184863030615e-5,4.047158626760407e-9,-5.328099775273082e-4,-2.1686695872980368E-05,4.088373074123842e-9,-5.327143982259301e-4,-2.1540670747909262e-5,4.1261167888255816e-9,-5.326982547305342e-4,-2.146472539588816e-5,4.145954976805639e-9,-5.327237676269208e-4,-2.150269819024173e-5,4.135827219007261e-9,-5.32732172820136e-4,-2.166880035547954e-5,4.091442962833996e-9,-5.32664363807273e-4,-2.193675634261866e-5,4.019307535221708e-9,-5.324850262715923e-4,-2.2247356034033065e-5,3.93482109123221e-9,-5.321959712692641e-4,-2.253169043764306e-5,3.856170494966331e-9,-5.318318024819819e-4,-2.2736299986202895e-5,3.797697407775919e-9,-5.314434001136979e-4,-2.283727543038531e-5,3.7661716224598815e-9,-5.310801862783224e-4,-2.2840328090950416e-5,3.760701663621395e-9,-5.307784695622606e-4,-2.277209911293882e-5,3.774865010501329e-9,-5.305570300482153e-4,-2.2669296597542187e-5,3.799377675031908e-9,-5.304177923198672e-4,-2.2569563199808032e-5,3.824373068544768e-9,-5.303490345079164e-4,-2.2505211219014473e-5,3.841055895162692e-9,-5.303294436667859e-4,-2.2499458669989806e-5,3.842819986704146e-9,-5.303323047521583e-4,-2.2564506861846283e-5,3.825934653411622e-9,-5.303295770130921e-4,-2.2701095439328812e-5,3.78981094362531e-9,-5.302956400451363e-4,-2.2899349303107257e-5,3.736840685640963e-9,-5.30210473665667e-4,-2.314073527658426e-5,3.6718507329490764e-9,-5.300620142371433e-4,-2.340093393614476e-5,3.601265981895817e-9,-5.298474349228372e-4,-2.3653284469214588e-5,3.532132956929273e-9,-5.29573308984056e-4,-2.3872320401723e-5,3.4711768964710575e-9,-5.292548431176042e-4,-2.403707365259649e-5,3.4239812057610383e-9,-5.289143407918906e-4,-2.4134058857944783e-5,3.3942741989696835e-9,-5.285789266630395e-4,-2.4159906281443744e-5,3.3832709646259577e-9,-5.282773952237134e-4,-2.4123609199085298e-5,3.389033411558258e-9,-5.280357364388392e-4,-2.404808982327215e-5,3.4059246595776906e-9,-5.278708810726782e-4,-2.3969949940549298e-5,3.4245089739342943e-9,-5.277831391864141e-4,-2.3935357712190903e-5,3.4325187746853774e-9,-5.277497546540487e-4,-2.3990053843999665e-5,3.417490568679712e-9,-5.277243373408124e-4,-2.416362760309801e-5,3.371043381811958e-9,-5.276472969010053e-4,-2.4453303594010498e-5,3.2933522318209953e-9,-5.274672038760931e-4,-2.4817592116745615e-5,3.1949762152372857e-9,-5.271634422555336e-4,-2.5188059386224728e-5,3.0937979755767632e-9,-5.267559068389037e-4,-2.549567899523349e-5,3.008057415556971e-9,-5.262952781608044e-4,-2.569664316277229e-5,2.9495561606916857e-9,-5.258412694183832e-4,-2.5783493066863733e-5,2.9207489680924703e-9,-5.254425066389419e-4,-2.5779503885456728e-5,2.9161612247094987e-9,-5.251263833011977e-4,-2.5724489785007588e-5,2.925940256027055e-9,-5.248986095698239e-4,-2.566102959629115e-5,2.9392604634341714e-9,-5.247480432907525e-4,-2.5625368004893986e-5,2.946595015690205e-9,-5.246528338231885e-4,-2.5643091786020372e-5,2.940887498147975e-9,-5.245858121778989e-4,-2.572797628618578e-5,2.918009092055048e-9,-5.245186697908287e-4,-2.5882406676612352e-5,2.8768303754599108e-9,-5.244252403009383e-4,-2.6098529986454154e-5,2.8190430572214277e-9,-5.242842104460674e-4,-2.6359918036558112e-5,2.748752781998075e-9,-5.240813809095547e-4,-2.664376012583758e-5,2.6718566779627634e-9,-5.23811405473642e-4,-2.6923697743507696e-5,2.5952305181850944e-9,-5.234786998958045e-4,-2.7173303690041893e-5,2.5257824612885647e-9,-5.230971720563157e-4,-2.7369871435687406e-5,2.4694878843742183e-9,-5.226886747385083e-4,-2.749801736194075e-5,2.4305157487672832e-9,-5.222802740203602e-4,-2.7552679878417226e-5,2.410501767346455e-9,-5.219004721067165e-4,-2.7541114744677728e-5,2.4080150610133087e-9,-5.215746064004773e-4,-2.748348611429587e-5,2.4182963593044943e-9,-5.213196916609409e-4,-2.741169261001642e-5,2.433387542607336e-9,-5.211390633776294e-4,-2.7365830864708946e-5,2.442883976030173e-9,-5.210177939670833e-4,-2.7387386588784694e-5,2.4356382416405185e-9,-5.2092103264559e-4,-2.7508753633437043e-5,2.4025749182162106e-9,-5.207983793056417e-4,-2.7740648686792387e-5,2.3401865242185253e-9,-5.205966266482828e-4,-2.806223642295004e-5,2.253350576167634e-9,-5.202789824851698e-4,-2.8421269302758358e-5,2.1554312055901617e-9,-5.198423209709797e-4,-2.8748981292602243e-5,2.064380772209385e-9,-5.193213569961983e-4,-2.8985277857182498e-5,1.996093068377223e-9,-5.187754286828383e-4,-2.9100856801229018e-5,1.95860814721846e-9,-5.182654734879904e-4,-2.910408008464851e-5,1.950328402209735e-9,-5.17834468885133e-4,-2.903146570281326e-5,1.9624204795998646e-9,-5.174994717055985e-4,-2.8930642345991606e-5,1.9830589980046977e-9,-5.172543344144145e-4,-2.8845521813800735e-5,2.0010793286060667e-9,-5.170775031307184e-4,-2.8808046397317225e-5,2.0080420772500573e-9,-5.169400421587481e-4,-2.883586587420426e-5,1.998918998843043e-9,-5.168116638617822e-4,-2.8933416322078027e-5,1.9719933681402133e-9,-5.166645952694134e-4,-2.9094191480639365e-5,1.928446821526537e-9,-5.16476024252827e-4,-2.930309443473024e-5,1.8718459878098334e-9,-5.162298604848831e-4,-2.9538674218475745e-5,1.8075644448687839e-9,-5.15918183163581e-4,-2.9775463189840496e-5,1.7421226458261029e-9,-5.155423951219354e-4,-2.9986754143992856e-5,1.682415416929058e-9,-5.151137407302886e-4,-3.0148054298078004e-5,1.6348102041026057e-9,-5.14652612618079e-4,-3.024103796625174e-5,1.6041685250154395e-9,-5.141862173715009e-4,-3.025736743569097e-5,1.5929194416540232e-9,-5.137445594032925e-4,-3.0201544061071227e-5,1.6003442662174793e-9,-5.133551073665073e-4,-3.0091913298744713e-5,1.6222546448333353e-9,-5.130369284461957e-4,-2.9959105712960137e-5,1.651244127376648e-9,-5.127954099507898e-4,-2.9841663506552026e-5,1.6776263789056898e-9,-5.126187743607301e-4,-2.977911818282605e-5,1.6910763709352394e-9,-5.124775920139699e-4,-2.980317215645477e-5,1.6828919402962205e-9,-5.123285291058596e-4,-2.992827896807966e-5,1.6485704768880652e-9,-5.121232184702717e-4,-3.0144080674584436e-5,1.5900146804836555e-9,-5.118216874803194e-4,-3.041333535976552e-5,1.5163090868023582e-9,-5.114069216089788e-4,-3.06788578426189e-5,1.4420450362417905e-9,-5.108941341159282e-4,-3.087997193374652e-5,1.383045829244638e-9,-5.103283884814538e-4,-3.097314754523197e-5,1.350950290890561e-9,-5.097696659935665e-4,-3.0946985077149386e-5,1.3492802047218747e-9,-5.092722871601308e-4,-3.0823751756630565e-5,1.3729826486285837e-9,-5.088689790088103e-4,-3.064783528784369e-5,1.4112787115572115e-9,-5.085657929059659e-4,-3.046880866802487e-5,1.4518356546063253e-9,-5.08346811352875e-4,-3.032757248561428e-5,1.4841879987672864e-9,-5.081833205273989e-4,-3.024951848205968e-5,1.5014927928567059e-9,-5.080425577921641e-4,-3.024389232124672e-5,1.5008319918093534e-9,-5.078937898414977e-4,-3.0306504584070308e-5,1.4827093655212703e-9,-5.077117106050379e-4,-3.042331137863873e-5,1.4502784815439696e-9,-5.074781087294359e-4,-3.0573627604291196e-5,1.4085697181512755e-9,-5.071827632231985e-4,-3.0732762305829554e-5,1.363783212066794e-9,-5.068241386956512e-4,-3.087440447664662e-5,1.322616276444108e-9,-5.064099743494193e-4,-3.097328317084115e-5,1.2915471371343079e-9,-5.059573813360568e-4,-3.100850766576199e-5,1.2759963019804067e-9,-5.054917280931815e-4,-3.09675266499804e-5,1.2793674539120017e-9,-5.050436028710859e-4,-3.085000943630236e-5,1.3021016279347987e-9,-5.046435847782699e-4,-3.067039629349787e-5,1.3410151010863194e-9,-5.043154041700915e-4,-3.0457621016956392e-5,1.3892739397176436e-9,-5.040690924503929e-4,-3.025093383015183e-5,1.4372920683562972e-9,-5.038963498673596e-4,-3.0091976510982597e-5,1.4745708467378526e-9,-5.037701041335682e-4,-3.001474285367648e-5,1.4921523724764496e-9,-5.036491510419384e-4,-3.0036038672483e-5,1.4850891219563646e-9,-5.034873278369172e-4,-3.0149240525066758e-5,1.4542250103523055e-9,-5.032453132593057e-4,-3.032361586041559e-5,1.4066373962624775e-9,-5.029021178492986e-4,-3.0510322165871625e-5,1.3543382658568904e-9,-5.024627404979756e-4,-3.06545113386691e-5,1.3112907864465489e-9,-5.01958677253733e-4,-3.0710749963624354e-5,1.2894420761309303e-9,-5.014397693770699e-4,-3.065674386674007e-5,1.2951067361437504e-9,-5.009594637119274e-4,-3.0499774007028698e-5,1.327181960804589e-9,-5.005591265624038e-4,-3.027289359707675e-5,1.3779593095465411e-9,-5.002577464773517e-4,-3.002286754188913e-5,1.4360302437884732e-9,-5.000502980916162e-4,-2.9795642680252517e-5,1.4898545010720947e-9,-4.999135018056022e-4,-2.96252177016554e-5,1.530564984614016e-9,-4.998148703059288e-4,-2.9528734833433275e-5,1.5533180663703762e-9,-4.997210391324866e-4,-2.9507108813167577e-5,1.557313949211449e-9,-4.996033580441727e-4,-2.95486805281199e-5,1.5450349761472517e-9,-4.994407134467235e-4,-2.963354086042027e-5,1.5212284427432084e-9,-4.99220513807549e-4,-2.9737275227078863e-5,1.4919412361183264e-9,-4.989388300780407e-4,-2.9833867578447486e-5,1.4637165471569636e-9,-4.986003615032496e-4,-2.989808300652266e-5,1.442933990607473e-9,-4.982184149831263e-4,-2.9907927865987277e-5,1.4351810441446417e-9,-4.978145252172193e-4,-2.9847712851288548e-5,1.4445248582206659e-9,-4.974169169914042e-4,-2.971176155615385e-5,1.4726359068551763e-9,-4.970569165391165e-4,-2.9508056286774713e-5,1.517893845763169e-9,-4.967628303390822e-4,-2.926026998042455e-5,1.574829976621728e-9,-4.96551978398408e-4,-2.900608455871382e-5,1.634431128285346e-9,-4.96423302209712e-4,-2.879027553840682e-5,1.6857146709917446e-9,-4.963541060645736e-4,-2.865323310167557e-5,1.7184681499924557e-9,-4.963036761354488e-4,-2.861842652841363e-5,1.7263462753477494e-9,-4.962236841992082e-4,-2.8683800491744274e-5,1.7091218148852898e-9,-4.960720233794146e-4,-2.8820919804120417e-5,1.673117417745899e-9,-4.958250916601518e-4,-2.898244031513813e-5,1.6295915726764063e-9,-4.954843911405692e-4,-2.911516518981793e-5,1.591663143962164e-9,-4.950757567029083e-4,-2.9174289607850693e-5,1.5708062654753593e-9,-4.946419883627445e-4,-2.9134683182893188e-5,1.5739443674704452e-9,-4.942313197632331e-4,-2.899634780038582e-5,1.601897900139963e-9,-4.938850760519116e-4,-2.8782878175581034e-5,1.6495407345080696e-9,-4.936280480341194e-4,-2.8533738897703263e-5,1.707525662802973e-9,-4.934641902772148e-4,-2.8293088750190768e-5,1.7649546067683797e-9,-4.933783032088761e-4,-2.80988640410467e-5,1.8121051613246878e-9,-4.933422254005704e-4,-2.7975289802310766e-5,1.8424210940995162e-9,-4.933227875226166e-4,-2.793022331205908e-5,1.853363241919422e-9,-4.932888738289174e-4,-2.7956735636432285e-5,1.8461872237371115e-9,-4.932160962554518e-4,-2.8037116641906087e-5,1.8250326211687373e-9,-4.930889594766327e-4,-2.8147435486230603e-5,1.7957702854856959e-9,-4.929012427190119e-4,-2.8261502965497104e-5,1.7649326447086253e-9,-4.926554961798312e-4,-2.835390391705434e-5,1.7388763334173934e-9,-4.923623095573031e-4,-2.8402349479687208e-5,1.7231683216680764e-9,-4.920395867133475e-4,-2.8389889647024718e-5,1.722073563894763e-9,-4.917115540492151e-4,-2.8307497965287012e-5,1.7379836944677346e-9,-4.914067695061618e-4,-2.815714883271202e-5,1.7707008124423624e-9,-4.911541935152892e-4,-2.7954758530073625e-5,1.8166878141640076e-9,-4.9097673506944e-4,-2.773135265619518e-5,1.868683014872907e-9,-4.908829819257416e-4,-2.753002578310636e-5,1.9163130986412e-9,-4.908600342594571e-4,-2.7396792960745575e-5,1.9482274136412787e-9,-4.908721173909682e-4,-2.736633164669827e-5,1.9555585722015448e-9,-4.908685218729858e-4,-2.7447945016454782e-5,1.935427847646306e-9,-4.907995565142859e-4,-2.7619289411182313e-5,1.8926347984558103e-9,-4.906336832509187e-4,-2.7832348344015255e-5,1.8383867655335314e-9,-4.903676923646972e-4,-2.802925951189207e-5,1.7865984348223615e-9,-4.900260027571856e-4,-2.81603898676814e-5,1.7495716625922467e-9,-4.89651135545775e-4,-2.8197278587712897e-5,1.7348223698973235e-9,-4.892906052692192e-4,-2.8137212384925217e-5,1.7438257478064728e-9,-4.889850187707911e-4,-2.800028120231637e-5,1.7725003438639047e-9,-4.887600631930353e-4,-2.782169608840279e-5,1.8128296668897378e-9,-4.886231415493295e-4,-2.764229676123075e-5,1.8550063239660704e-9,-4.885642484701803e-4,-2.7499550273375093e-5,1.8896080581632753e-9,-4.88560103003217e-4,-2.7420633789239168e-5,1.9094190965771907e-9,-4.885802098906471e-4,-2.741859369588705e-5,1.9105887095828677e-9,-4.885932963466409e-4,-2.749186494528233e-5,1.892958847920264e-9,-4.885727070221833e-4,-2.7626586385723848e-5,1.8596151082628022e-9,-4.884999125827284e-4,-2.780056601507957e-5,1.815912403162441e-9,-4.883659918181414e-4,-2.7987688626019622e-5,1.7683031663824352e-9,-4.881714965792303e-4,-2.8161857991136438e-5,1.7232621331153711e-9,-4.879253817230721e-4,-2.8300053385778088e-5,1.6864793191295907e-9,-4.876435954604153e-4,-2.838460913858599e-5,1.6623231380987314e-9,-4.87347570898538e-4,-2.8405127125376862e-5,1.6534487206287574e-9,-4.870624676766653e-4,-2.8360400428380635e-5,1.660397458157364e-9,-4.8681464921107224e-4,-2.8260451760282097e-5,1.6810999234867354e-9,-4.8662762504571956e-4,-2.8128194590838857e-5,1.710378936760407e-9,-4.865159493111669e-4,-2.7999259061439134e-5,1.7398402884595435e-9,-4.864778001628795e-4,-2.7917688216241995e-5,1.758782346831438e-9,-4.864891773662556e-4,-2.7925623648319725e-5,1.7566564873211407e-9,-4.8650469881442816e-4,-2.8048055389582203e-5,1.7268436941845679e-9,-4.8646900022718986e-4,-2.8278862045047066e-5,1.6701987909042514e-9,-4.863366661408441e-4,-2.8577505119019685e-5,1.596014686119699e-9,-4.8609095859314307e-4,-2.888149066944309e-5,1.5191180487893385e-9,-4.8575031131327785e-4,-2.9129303897496962e-5,1.4543917377772392e-9,-4.853594628443761e-4,-2.928127077721007e-5,1.4117786999065398e-9,-4.8497195747729835e-4,-2.932864068445588e-5,1.394071849831376e-9,-4.846337505125269e-4,-2.92901557766113e-5,1.397598481510503e-9,-4.8437354423659196e-4,-2.9201624636557654e-5,1.4144787727407432e-9,-4.842002284292061e-4,-2.9104393029698005e-5,1.4351477859261177e-9,-4.841052181270292e-4,-2.903609161431683e-5,1.4504558263885193e-9,-4.84067228217977e-4,-2.9024670479161186e-5,1.4531643834621424e-9,-4.840577748119623e-4,-2.90853939257728e-5,1.438879930124667e-9,-4.8404655015113853e-4,-2.9220176531956694e-5,1.4064663055144139e-9,-4.840061936266715e-4,-2.9418854952069273e-5,1.3579222509944927e-9,-4.839159970403585e-4,-2.9661986241126522e-5,1.2977592972372048e-9,-4.8376421255598803e-4,-2.99245694584744e-5,1.2320364517035848e-9,-4.8354887698368103e-4,-3.0180063885511402e-5,1.1672683012708056e-9,-4.832772700501507e-4,-3.0404142004948953e-5,1.1094257627540442e-9,-4.829643557323166e-4,-3.0577722626730395e-5,1.06319106972272e-9,-4.826306810340864e-4,-3.068915192762852e-5,1.0314937573263063e-9,-4.823000236618913e-4,-3.073572511170575e-5,1.0152261736262526e-9,-4.819967854440488e-4,-3.07247596187981e-5,1.0130129991719876e-9,-4.8174290438235536e-4,-3.067424662353938e-5,1.0209817846856487e-9,-4.8155387647187757e-4,-3.061273027346073e-5,1.032629336411569e-9,-4.814336608023644e-4,-3.057734555154527e-5,1.0391143981355627e-9,-4.813692597631775e-4,-3.060832201910778e-5,1.0304832601707698e-9,-4.813275459614071e-4,-3.073869463472397e-5,9.981998565152625e-10,-4.812585659790297e-4,-3.09804507134622e-5,9.386721541243323e-10,-4.811087866201458e-4,-3.1312961751180574e-5,8.56262021686922e-10,-4.8084200197442165e-4,-3.168291882514008e-5,7.634346976835111e-10,-4.804573453938174e-4,-3.202098523525012e-5,6.767668830172286e-10,-4.799919742448245e-4,-3.226863232885468e-5,6.104833504614054e-10,-4.7950561722214457e-4,-3.239963129412474e-5,5.713324640502453e-10,-4.7905711130771735e-4,-3.2424683834516966e-5,5.57489239643948e-10,-4.7868648919253005e-4,-3.2380572165611614e-5,5.61014998658449e-10,-4.78408756745913e-4,-3.231372536823076e-5,5.715060758294507e-10,-0.00047821695541208484,-3.226672810540936e-5,5.790543339561175e-10,-4.780892929635116e-4,-3.2270696159169436e-5,5.759797425532569e-10,-4.7799654019284706e-4,-3.2342694027153804e-5,5.575709307492149e-10,-4.7790798337904856e-4,-3.2486240286347094e-5,5.222191413059654e-10,-4.7779572256916394e-4,-3.269322339193252e-5,4.712137846897875e-10,-4.776377532430203e-4,-3.294643314889626e-5,4.0828191455557877e-10,-4.7742011900052996e-4,-3.322255415686779e-5,3.3887550315425643e-10,-4.7713813362436103e-4,-3.3495522236272236e-5,2.692723543611399e-10,-4.767966058786844e-4,-3.374005506219493e-5,2.0561845121165476e-10,-4.764089810761079e-4,-3.3935100660724256e-5,1.5304719488686107e-10,-4.759953978571277e-4,-3.4066794130658526e-5,1.150012473363178e-10,-4.75579914293648e-4,-3.4130529894258694e-5,9.281539758685568e-11,-4.7518726401693057e-4,-3.4132012358599385e-5,8.552166664277137e-11,-4.7483937947707337e-4,-3.4087283256587925e-5,8.9808001360197e-11,-4.745518134530909e-4,-3.402168289331611e-5,1.0012352749726892e-10,-4.743301302744044e-4,-3.396758918434555e-5,1.0901384685598315e-10,-4.7416643965561046e-4,-3.3960444197777966e-5,1.0790405985855532e-10,-4.740368979791793e-4,-3.4032281179469596e-5,8.86169595898152e-11,-4.739021227586955e-4,-3.420250408423377e-5,4.5725881072999446e-11,-4.7371326042227083e-4,-3.446757033559661e-5,-2.0710561717845824e-11,-4.734254927457585e-4,-3.479429725681101e-5,-1.0330249928567228e-10,-4.7301639236006836e-4,-3.5123672220509924e-5,-1.881476569178234e-10,-4.725000431178112e-4,-3.5388839961071916e-5,-2.591876480176443e-10,-4.7192604541348076e-4,-3.554105374407855e-5,-3.044707002743182e-10,-4.7136099969806975e-4,-3.556883779945993e-5,-3.206993534357789e-10,-4.7086294225468346e-4,-3.549888047725581e-5,-3.1342792392102554e-10,-4.7046352272326177e-4,-3.538050951555742e-5,-2.935213287305637e-10,-4.7016473226171217e-4,-3.5265590743997314e-5,-2.726806915020762e-10,-4.699464136836216e-4,-3.5194260656001715e-5,-2.6030955535709985e-10,-4.697770469616606e-4,-3.518932915329649e-5,-2.622205939252974e-10,-4.696228012465099e-4,-3.5256920462369833e-5,-2.8060094716625834e-10,-4.6945333703288087e-4,-3.538992906669341e-5,-3.145484253008059e-10,-4.69244867902677e-4,-3.5571919634512485e-5,-3.607624652693146e-10,-4.6898164086817774e-4,-3.5780529452895425e-5,-4.1425452821863957e-10,-4.686566863176195e-4,-3.5990449974228233e-5,-4.690962154934373e-10,-4.6827208786035787e-4,-3.617631589754077e-5,-5.192139267408718e-10,-4.678386863652773e-4,-3.631568320727738e-5,-5.591870571551936e-10,-4.6737497335989225e-4,-3.6392083291211825e-5,-5.849904896303589e-10,-4.6690488301707415e-4,-3.639782201853782e-5,-5.94602599597509e-10,-4.6645445102384944e-4,-3.633592139146378e-5,-5.883906819014525e-10,-4.660476945176547e-4,-3.6220661871468307e-5,-5.692228942796334e-10,-4.657022695838701e-4,-3.6076407131886816e-5,-5.422815071321678e-10,-4.6542554666657507e-4,-3.5934607127357874e-5,-5.145430862929582e-10,-4.6521176990474016e-4,-3.582914597600692e-5,-4.93889587145379e-10,-4.650408921003716e-4,-3.579037660247443e-5,-4.878228226654467e-10,-4.6487973809540686e-4,-3.583822677071e-5,-5.017887049330647e-10,-4.646864289969452e-4,-3.5975183793548686e-5,-5.37296846788472e-10,-4.64418929535433e-4,-3.618107017587765e-5,-5.903807450996709e-10,-4.640473748557744e-4,-3.641280549063968e-5,-6.513004445318026e-10,-4.6356706963375163e-4,-3.6612571972860786e-5,-7.064066461510136e-10,-4.6300573393137634e-4,-3.672503075757567e-5,-7.42296675743031e-10,-4.624182914159778e-4,-3.671797163766815e-5,-7.508047679955584e-10,-4.6186855565977626e-4,-3.659550128472903e-5,-7.321670756526646e-10,-4.614064225580401e-4,-3.6395389241618036e-5,-6.944563282812404e-10,-4.610528332327597e-4,-3.6172385710832e-5,-6.498299076742612e-10,-4.607987283925611e-4,-3.597801715887471e-5,-6.100320374056605e-10,-4.6061468507508637e-4,-3.5846959612404006e-5,-5.833503649471653e-10,-4.6046349004600013e-4,-3.579313229929127e-5,-5.736387227312834e-10,-4.6030994274539054e-4,-3.5812705095171745e-5,-5.807834219497946e-10,-4.601262422144594e-4,-3.588972134772124e-5,-6.017486078129592e-10,-4.5989390505752053e-4,-3.600142119002202e-5,-6.316505581854882e-10,-4.596038614192552e-4,-3.61222398339944e-5,-6.646706362294414e-10,-4.592559568531993e-4,-3.6226694452753686e-5,-6.948193567656552e-10,-4.5885834703375316e-4,-3.629175808199892e-5,-7.166060109300918e-10,-4.584267277797475e-4,-3.629920933167143e-5,-7.25651034334448e-10,-4.5798303120869814e-4,-3.623817319516776e-5,-7.192617233124736e-10,-4.575530806030977e-4,-3.610762730040304e-5,-6.969458465337379e-10,-4.571628892970559e-4,-3.591815255208761e-5,-6.607620683323364e-10,-4.56833823604343e-4,-3.569198142091502e-5,-6.153534493322551e-10,-4.5657747279228704e-4,-3.54605678450924e-5,-5.675121322431022e-10,-4.5639155317605325e-4,-3.525945503013983e-5,-5.251872676244543e-10,-4.562582877399368e-4,-3.5121101489857186e-5,-4.960025021303906e-10,-4.561462404911574e-4,-3.5067166813251846e-5,-4.855281510313871e-10,-4.560157354184803e-4,-3.510209657136758e-5,-4.956760285975314e-10,-4.558271844438492e-4,-3.520973052125918e-5,-5.23642942124648e-10,-4.555509722539143e-4,-3.5354377231198915e-5,-5.618485388203806e-10,-4.551767900011865e-4,-3.5487271728465515e-5,-5.99216862288837e-10,-4.547194931700101e-4,-3.555821241925147e-5,-6.238372524193589e-10,-4.5421824807652514e-4,-3.553016757808225e-5,-6.264728450339745e-10,-4.537270827198009e-4,-3.539206308847836e-5,-6.037125880351339e-10,-4.532987076358123e-4,-3.5163679660655164e-5,-5.592847955933052e-10,-4.5296792741134556e-4,-3.488912728160238e-5,-5.027086388929701e-10,-4.527422313081323e-4,-3.462138798450755e-5,-4.458766460131134e-10,-4.5260323410913533e-4,-3.4405453702598874e-5,-3.9926413768010085e-10,-4.5251644486876176e-4,-3.426740951649623e-5,-3.6938487658784766e-10,-4.5244332300902997e-4,-3.421213627964388e-5,-3.5808595438001316e-10,-4.523505626185003e-4,-3.4227480505678286e-5,-3.632636675315268e-10,-4.5221482312207624e-4,-3.4290899461766846e-5,-3.8020116677613763e-10,-4.5202375557595886e-4,-3.437554371425792e-5,-4.029081427514244e-10,-4.5177505774483904e-4,-3.445460262322402e-5,-4.251869797649234e-10,-4.514749547370295e-4,-3.4504079311446706e-5,-4.4139362238526164e-10,-4.5113679020358777e-4,-3.450468018923218e-5,-4.469651496899405e-10,-4.507797731939009e-4,-3.444350711070474e-5,-4.388225099902334e-10,-4.504274678763231e-4,-3.431595710739258e-5,-4.1574789980056126e-10,-4.501053968208255e-4,-3.412772239306382e-5,-3.7876689398194317e-10,-4.49837245052929e-4,-3.3896171321560205e-5,-3.3143923698792594e-10,-4.4963967883302245e-4,-3.364990241377015e-5,-2.7982500286964254e-10,-4.495167350280108e-4,-3.342519780636138e-5,-2.3182893325347959e-10,-4.494557916595384e-4,-3.32588698365336e-5,-1.9575098987866422e-10,-4.494275238613324e-4,-3.317868246084438e-5,-1.7822526619476317e-10,-4.493912544321645e-4,-3.319433112785999e-5,-1.8215182067943742e-10,-4.4930491559363935e-4,-3.329257874488547e-5,-2.0541584757431906e-10,-4.491366544886963e-4,-3.343893518934762e-5,-2.409915239755049e-10,-4.4887423428689434e-4,-3.358582747083409e-5,-2.785249749837473e-10,-4.4852918924545023e-4,-3.3684857564196356e-5,-3.069592004180854e-10,-4.481345025764483e-4,-3.3699547562141865E-05,-3.174400965017838e-10,-4.477364173205387e-4,-3.36150453685436e-5,-3.056899582009406e-10,-4.473824653024104e-4,-3.3442075559446554e-5,-2.731645840371916e-10,-4.471089794236686e-4,-3.3213746559910004e-5,-2.2659609678642381e-10,-4.4693193476726584e-4,-3.2975892326254515e-5,-1.7600234698550785e-10,-4.4684415933761597e-4,-3.2774072581832724e-5,-1.318180279743324e-10,-4.468195596048631e-4,-3.264180812728822e-5,-1.0215906621877542e-10,-4.468221350963377e-4,-3.259390394722096e-5,-9.111564082088563e-11,-4.468159270102211e-4,-3.262613831507543e-5,-9.843768488394674e-11,-4.4677253154619184e-4,-3.271981887431175e-5,-1.2037327381122013e-10,-4.466747593938944e-4,-3.2848326037323585e-5,-1.5107991793165482e-10,-4.465169535590928e-4,-3.298315215165685e-5,-1.8405170853296948e-10,-4.4630337571044507e-4,-3.309824656748056e-5,-2.1323351666357844e-10,-4.4604597579605345e-4,-3.317263929462189e-5,-2.337308573244723e-10,-4.45762317539977e-4,-3.3191928530204014e-5,-2.421841171496663e-10,-4.454738218877487e-4,-3.314935956184844e-5,-2.369644191333686e-10,-4.4520398080873634e-4,-3.304699535971351e-5,-2.1835135532547503e-10,-4.449759188950929e-4,-3.289697404544757e-5,-1.887628854791514e-10,-4.448087241116615e-4,-3.2722220146874976e-5,-1.529489231537002e-10,-4.4471242614531716e-4,-3.2555363695373645e-5,-1.1787226547448037e-10,-4.446825403539786e-4,-3.2434324371631275e-5,-9.188130706746193e-11,-4.4469655992664646e-4,-3.2393735943472714e-5,-8.291075104452407e-11,-4.4471563063769776e-4,-3.245364245052461e-5,-9.596818943647909e-11,-4.446933654754844e-4,-3.2609831845342675e-5,-1.3086158754423952e-10,-4.445900359888028e-4,-3.2831347836709934e-5,-1.814400172328324e-10,-4.4438642125605143e-4,-3.306811219248421e-5,-2.370680722983898e-10,-4.4409080264432883e-4,-3.326622792760892e-5,-2.858581212801058e-10,-4.437360837083105e-4,-3.33843518504114e-5,-3.1823887552277983e-10,-4.433690949210459e-4,-3.340463330407339e-5,-3.294487374573945e-10,-4.430370755530498e-4,-3.3335321031998855e-5,-3.203184353265311e-10,-4.427759960089928e-4,-3.320596713714179e-5,-2.9650278742528307e-10,-4.4260339341241914e-4,-3.305809413124731e-5,-2.666935334285821e-10,-4.425164934095727e-4,-3.293443729480453e-5,-2.403889490512539e-10,-4.424951037855245e-4,-3.286939195932481e-5,-2.2573681301802528e-10,-4.4250792553513906e-4,-3.2882577323854434e-5,-2.2789539745179735e-10,-4.425203905633074e-4,-3.297653466831185e-5,-2.4823497974085815e-10,-4.425019734590562e-4,-3.313848660280707e-5,-2.8448803781729026e-10,-4.424313311491289e-4,-3.334499881923905e-5,-3.3168004394333305e-10,-4.422985572981347e-4,-3.3567784931305844e-5,-3.834657566606249e-10,-4.4210484891880924e-4,-3.377905354369237e-5,-4.3346022827032136e-10,-4.4186050614891556e-4,-3.3955460677570604e-5,-4.762630706971752e-10,-0.00044158229376506733,-3.408047587119074e-5,-5.080560853142402e-10,-4.4129088951131405e-4,-3.4145537682724034e-5,-5.268328707022444e-10,-4.4100864451780675e-4,-3.415060214756904e-5,-5.324321778308508e-10,-4.4075744431709034e-4,-3.4104538515809105e-5,-5.265509515466792e-10,-4.405562048159596e-4,-3.402543308853396e-5,-5.128193797311413e-10,-4.4041749799388676e-4,-3.394031824044413e-5,-4.968520411437988e-10,-4.4034317371603764e-4,-3.388321666420194e-5,-4.859836819661576e-10,-4.4031985380117906e-4,-3.389003663385937e-5,-4.882781596747447e-10,-4.4031667309458187e-4,-3.398947734201114e-5,-5.105417250572887e-10,-4.40288726603928e-4,-3.419139460117802e-5,-5.556392875995702e-10,-4.4018852720764694e-4,-3.447763007612022e-5,-6.202734840122589e-10,-4.3998312776834925e-4,-3.4802253044518366e-5,-6.948530997978604e-10,-4.396688525708522e-4,-3.510470657110431e-5,-7.662719727894685e-10,-4.3927463938373874e-4,-3.533108692677226e-5,-8.225278615720626e-10,-4.388514849831018e-4,-3.545261924397217e-5,-8.567545923869293e-10,-4.384542114569926e-4,-3.5472467064472854e-5,-8.687704570663886e-10,-4.381250309194333e-4,-3.542007387575285e-5,-8.640367362840351e-10,-4.3788477725332484e-4,-3.533865244353876e-5,-8.512299465652137e-10,-4.377321566231613e-4,-3.52722511840646e-5,-8.396926899517458e-10,-4.3764830456916964e-4,-3.525614476523123e-5,-8.374333127536711e-10,-4.376036478383992e-4,-3.531151963905395e-5,-8.498330044244647e-10,-4.3756499698159503e-4,-3.544392307484552e-5,-8.790159276265403e-10,-4.3750174764789934e-4,-3.56445680225368e-5,-9.238259471745557e-10,-4.3739057794072914e-4,-3.5893675770702265e-5,-9.803621067461992e-10,-4.372182577922428e-4,-3.6165025749781834e-5,-1.042950971201023e-9,-4.369824734841252e-4,-3.6430802734025703e-5,-1.1053246753441703e-9,-4.36690901264442e-4,-3.6665949804834746e-5,-1.1617407465670032e-9,-4.3635900542241446e-4,-3.685147801086402e-5,-1.2078249534317108e-9,-4.360071976804138e-4,-3.697647114841903e-5,-1.2410262063482944e-9,-4.356579555231565e-4,-3.7038915732516285e-5,-1.260728985867218e-9,-4.353331667358742e-4,-3.704575670653252e-5,-1.2681800873321904e-9,-4.350516275750907e-4,-3.701249208677096e-5,-1.2663789075441324e-9,-4.348264748497907e-4,-3.696235632581322e-5,-1.2599873663792249e-9,-4.3466228069439307e-4,-3.692480626009468e-5,-1.2551736513394884e-9,-4.3455177288540366e-4,-3.6932510170417106e-5,-1.25912798564809e-9,-4.3447301468774706e-4,-3.701572674939781e-5,-1.278902275184977e-9,-4.3438916026796164e-4,-3.71935894381788e-5,-1.3194060826546412e-9,-4.3425376802956616e-4,-3.74638561498117e-5,-1.3809346111075104e-9,-4.340236163024067e-4,-3.779593543622154e-5,-1.4574024307369292e-9,-4.3367640876553675e-4,-3.8134118564692025e-5,-1.5369256916288049e-9,-4.332244241737091e-4,-3.8414502041651824e-5,-1.6055222702572017e-9,-4.3271386018431076e-4,-3.858948430017033e-5,-1.652481129483999e-9,-4.3220787923143326e-4,-3.864607462666557e-5,-1.6743270763616353e-9,-4.317629656468537e-4,-3.860761863456337e-5,-1.6752156913577408e-9,-4.3141176547786695e-4,-3.8520414864384305e-5,-1.6642240440609935e-9,-4.3115868222643985e-4,-3.8435327419660585e-5,-1.651702421749401e-9,-4.3098557996193025e-4,-3.8393580822086956e-5,-1.6464759363415677e-9,-4.3086147835504085e-4,-3.841992287116871e-5,-1.65440671246263e-9,-4.307516674336233e-4,-3.8521823132790755e-5,-1.6780078303099869e-9,-4.306243804306794e-4,-3.8692067403099935e-5,-1.716664885505569e-9,-4.3045497513185133e-4,-3.891267180424769e-5,-1.7671843133691706e-9,-4.302282105989142e-4,-3.9159095494623204e-5,-1.824566327370246e-9,-4.299390751286171e-4,-3.940438880534627e-5,-1.8829431790449586e-9,-4.295924025130069e-4,-3.9623034498814555e-5,-1.936562263178734e-9,-4.292014630930585e-4,-3.9794261037469396e-5,-1.9806593157273097e-9,-4.287856876623859e-4,-3.9904630596068394e-5,-2.0120950226613972e-9,-4.28367754503315e-4,-3.994964610903417e-5,-2.0296763544745215e-9,-4.279704452993792e-4,-3.9934237516808346e-5,-2.0341813886434956e-9,-4.276136265667553e-4,-3.987227137249826e-5,-2.0282039753249915e-9,-4.273114688402678e-4,-3.978527077197651e-5,-2.0159259234067885e-9,-4.2706992488113834e-4,-3.9700366198973295e-5,-2.002829069662559e-9,-4.268845197863682e-4,-3.964737840173896e-5,-1.9952647642030475e-9,-4.267386265969893e-4,-3.965471131576109e-5,-1.999700373052887e-9,-4.266029510717304e-4,-3.9743544324180614e-5,-2.0214358793739664e-9,-4.26437834568534e-4,-3.992039295746758e-5,-2.0627867533072652e-9,-4.2620038657907274e-4,-4.016980373449743e-5,-2.1212012265236316e-9,-4.2585728334790284e-4,-4.0451299582123726e-5,-2.1883606719571155e-9,-4.25400265363133e-4,-4.070596598753596e-5,-2.25155109322746e-9,-4.248561337280175e-4,-4.0874859811857436e-5,-2.2977411834001216e-9,-4.242820619720334e-4,-4.092274432793028e-5,-2.3187965446079723e-9,-4.237451316903482e-4,-4.085341822572131e-5,-2.3147791360394584e-9,-4.2329694415442286e-4,-4.070654441064251e-5,-2.2932869092235596e-9,-4.229578411734412e-4,-4.0538947222353454e-5,-2.2656447239000503e-9,-4.2271688421275413e-4,-4.040304127911455e-5,-2.2426165588610284e-9,-4.225427433080427e-4,-4.0333144803596924e-5,-2.231704275563879e-9,-4.223968689264773e-4,-4.0342043136537935e-5,-2.2363639652971267e-9,-4.222434398179648e-4,-4.042433106460874e-5,-2.256430112670042e-9,-4.220548334090586e-4,-4.056222883882198e-5,-2.2890006714688703e-9,-4.218136677594013e-4,-4.073117018433807e-5,-2.3293788637137593e-9,-4.21512946299068e-4,-4.0904258616967875e-5,-2.3719643641673716e-9,-4.2115531676598317e-4,-4.105575217512033e-5,-2.4111025484600863e-9,-4.207517952197999e-4,-4.1163907229954436e-5,-2.441863734119646e-9,-4.203200113401336e-4,-4.121333480514526e-5,-2.460678044086568e-9,-4.198819221794372e-4,-4.119688223171917e-5,-2.4657691210332674e-9,-4.194609188969578e-4,-4.111682572964086e-5,-2.4573520283086842e-9,-4.1907848888926417e-4,-4.0985005162454883e-5,-2.4375869987131062e-9,-4.1875086145044143e-4,-4.082171835588424e-5,-2.4103369791762464e-9,-4.1848604840921634e-4,-4.065342570658751e-5,-2.3807851127628465e-9,-4.182816061708275e-4,-4.050935427302264e-5,-2.3549026071762925e-9,-4.1812347686722286e-4,-4.041715861848515e-5,-2.3387103150409148e-9,-4.1798629068454416e-4,-4.039789505126642e-5,-2.337275945283984e-9,-4.178356307985684e-4,-4.046059638808345e-5,-2.353438615303446e-9,-4.1763304542852736e-4,-4.0597133531294696e-5,-2.3864309135234715e-9,-4.17344485054109e-4,-4.07791348421971e-5,-2.4308988000567276e-9,-4.1695157842682465e-4,-4.095991780817399e-5,-2.477108670627579e-9,-4.16462448119742e-4,-4.108433698392642e-5,-2.5130503328766345e-9,-4.15915771968092e-4,-4.1106404871525956e-5,-2.528346010590168e-9,-4.153721159190534e-4,-4.100833523430551e-5,-2.5184530965389194e-9,-4.1489323356661917e-4,-4.0810007275967356e-5,-2.4867440031700544e-9,-4.1451934265011636e-4,-4.056149998336314e-5,-2.443004015897615e-9,-4.14257057163492e-4,-4.032253315069391e-5,-2.399280027476654e-9,-4.140829643037679e-4,-4.014115402159914e-5,-2.365624213252662e-9,-4.139573594589503e-4,-4.004203540654317e-5,-2.347719850083814e-9,-4.1383883902764264e-4,-4.0026135838993726e-5,-2.346648557292666e-9,-4.1369395521428763e-4,-4.007714518494776e-5,-2.359918634965156e-9,-4.1350116283010187e-4,-4.0169438678037385e-5,-2.3828275358386247e-9,-4.132509204849382e-4,-4.02745458009851e-5,-2.409672202656709e-9,-4.12944098431814e-4,-4.036544899383293e-5,-2.434693727626981e-9,-4.1259003312596384e-4,-4.0419283786942026e-5,-2.4528076757501718e-9,-4.1220463180241106e-4,-4.041920894315126e-5,-2.460165886913844e-9,-4.118084241146482e-4,-4.035589750016881e-5,-2.4545551866637317e-9,-4.114243079808707e-4,-4.0228769440772255e-5,-2.4356339267987566e-9,-4.1107472547243434e-4,-4.004674770704506e-5,-2.4050065497151834e-9,-4.107782411517076e-4,-3.982801465533893e-5,-2.3661110631512318e-9,-4.1054594259781567e-4,-3.959827057314572e-5,-2.3238887851075064e-9,-4.10378395758591e-4,-3.938732383127705e-5,-2.2842171118400988e-9,-4.1026395191599125e-4,-3.922422342717951e-5,-2.2530908614786637e-9,-4.101791123460307e-4,-3.9131562701737556e-5,-2.23557803383868e-9,-4.100913745510124e-4,-3.911997116984464e-5,-2.2346619299068557e-9,-4.099645570075549e-4,-3.9183950507037974e-5,-2.250178149363926e-9,-4.097661972198411e-4,-3.930021397784681e-5,-2.278150153434694e-9,-4.0947612025577423e-4,-3.9429780090729804e-5,-2.310922006873919e-9,-4.090943862753506e-4,-3.952493336780649e-5,-2.338459230035468e-9,-4.086456517799025e-4,-3.954111611657848e-5,-2.3508883014153373e-9,-4.081763984351799e-4,-3.945141594102922e-5,-2.34172318966217e-9,-4.0774310491620253e-4,-3.9258165010706924e-5,-2.3105104000586573e-9,-4.0739410414728915e-4,-3.899487440782558e-5,-2.2634068239480487e-9,-4.071530517716821e-4,-3.8715380711305496e-5,-2.2110648360130516e-9,-4.07012517735472e-4,-3.8474663908117465e-5,-2.1647814676881445e-9,-4.0694031503661626e-4,-3.83111097332982e-5,-2.132885090794267e-9,-4.0689355328915437e-4,-3.823811500140989e-5,-2.118905391336737e-9,-4.0683245131795863e-4,-3.824611552137267e-5,-2.121744169365106e-9,-4.0672875066320724e-4,-3.83106584547127e-5,-2.137053712749919e-9,-4.065681541205749e-4,-3.8401284561318635e-5,-2.1588842425524963e-9,-4.063489170280104e-4,-3.848820200325258e-5,-2.181051087605659e-9,-4.0607899542711783e-4,-3.854620981262006e-5,-2.198080022710527e-9,-4.0577321760118843e-4,-3.855665233157998e-5,-2.2057933114142437e-9,-4.054509336224549e-4,-3.850839314776131e-5,-2.2016348705458945e-9,-4.051339790749997e-4,-3.839848304650612e-5,-2.1848218714545927e-9,-4.0484452728607707e-4,-3.8232763492249975e-5,-2.1563917184551757e-9,-4.046024009615301e-4,-3.8026166396044666e-5,-2.1191704389762e-9,-4.0442170184689123e-4,-3.780206287518215e-5,-2.0776109012345515e-9,-4.043071522932379e-4,-3.7589916539575194e-5,-2.037394588277785e-9,-4.0425112417486777e-4,-3.7420805564781884e-5,-2.0046841607319565e-9,-4.0423270413599097e-4,-3.732108474951415e-5,-1.9850017433876396e-9,-4.042199941499895e-4,-3.7305461211264305e-5,-1.9818909364028005e-9,-4.041759729458141e-4,-3.7371576180890595e-5,-1.995722476799383e-9,-4.040669367934563e-4,-3.749819781395151e-5,-2.023080949156707e-9,-4.038714430168704e-4,-3.764824543910441e-5,-2.0570719150784504e-9,-4.0358723837979936e-4,-3.777652245214125e-5,-2.088652532821821e-9,-4.0323392522940814e-4,-3.784066890271968e-5,-2.108786263221883e-9,-4.028499668827034e-4,-3.7812733764463005e-5,-2.110917795052249e-9,-4.024839213955273e-4,-3.768809159565209e-5,-2.0930452841422504e-9,-4.0218154105103323e-4,-3.748838143603014e-5,-2.0586134771402745e-9,-4.0197245691300375e-4,-3.7256296497542606e-5,-2.0156987881971886e-9,-4.0186148165965595e-4,-3.7042976733979594e-5,-1.974586200188155e-9,-4.018283808339541e-4,-3.6892494178303976e-5,-1.944623987475064e-9,-4.0183608868270894e-4,-3.6829760565161567e-5,-1.9316327261505804e-9,-4.0184323029191903e-4,-3.685629057238657e-5,-1.9367984159228025e-9,-4.0181540972463755e-4,-3.6953941902521246e-5,-1.9571606390107712e-9,-4.0173160962337696e-4,-3.7093205760581396e-5,-1.9871078224997477e-9,-4.015852743493223e-4,-3.724183204408453e-5,-2.0200937211791826e-9,-4.013819118193629e-4,-3.737112093517171e-5,-2.0500268935527753e-9,-4.0113546642722405e-4,-3.745934046666174e-5,-2.072145790532876e-9,-4.008649162475529e-4,-3.749303145455463e-5,-2.0834320591036338e-9,-4.005915876567197e-4,-3.746722429672266e-5,-2.0827005722215756e-9,-4.00337051736825e-4,-3.7385338843855984e-5,-2.0705219071079996e-9,-4.0012112723467486e-4,-3.725911600757237e-5,-2.0491068141487655e-9,-3.9995945006566694e-4,-3.710838880148392e-5,-2.02219878218256e-9,-3.9986036290861937e-4,-3.696000071532959e-5,-1.9948926212214277e-9,-3.9982147601925637e-4,-3.684496081292581e-5,-1.9731958999948373e-9,-3.998270224104261e-4,-3.6793151712941985e-5,-1.9631309255681626e-9,-3.9984782850540707e-4,-3.6825820017548094e-5,-1.9693326621769157e-9,-3.9984567314217234e-4,-3.6947721487253395e-5,-1.9934475370821446e-9,-3.997823060669654e-4,-3.714229558595796e-5,-2.0329994613703186e-9,-3.996308094008664e-4,-3.7373115060623765e-5,-2.0814266273117242e-9,-3.99384988712439e-4,-3.759249203934011e-5,-2.1295566994293455e-9,-3.9906271036433164e-4,-3.775472405457742e-5,-2.1681019565900638e-9,-3.987016202917927e-4,-3.7829193936713294e-5,-2.190272534708571e-9,-3.9834887836798216e-4,-3.780875269054671e-5,-2.193608295241445e-9,-3.980485538263064e-4,-3.7711034648837475e-5,-2.1805271009791155e-9,-3.978305141809676e-4,-3.75729460791574e-5,-2.157555028882998e-9,-3.9770366530245046e-4,-3.744037328616604e-5,-2.1335311050243456e-9,-3.9765504299890545e-4,-3.735613027207092e-5,-2.1172878104897155e-9,-3.976546923721489e-4,-3.7349520461290274e-5,-2.1154458093897077e-9,-3.976645841027215e-4,-3.7430385886824955e-5,-2.1309453027747796e-9,-3.9764857481630915e-4,-3.7588969553787584e-5,-2.16269710822895e-9,-3.975803240688057e-4,-3.78008285196242e-5,-2.206328545718188e-9,-3.9744725472712117e-4,-3.8034406317778884e-5,-2.2556260006985536e-9,-3.972504331599879e-4,-3.825848207709496e-5,-2.304116143937135e-9,-3.970016678082849e-4,-3.8447576129588216e-5,-2.346328968114079e-9,-3.967195597523896e-4,-3.85847761019194e-5,-2.378535140950185e-9,-3.9642580202908984e-4,-3.8662499543895226e-5,-2.3989805580658325e-9,-3.9614227617272086e-4,-3.8682093918056946e-5,-2.407778956750608e-9,-3.9588887819566896e-4,-3.865305185717903e-5,-2.406662527805749e-9,-3.9568165300506234e-4,-3.8592229765188354e-5,-2.3987512411946675e-9,-3.9553072846361295e-4,-3.852295871827556e-5,-2.3883867003944353e-9,-3.9543774790634314e-4,-3.847345808670505e-5,-2.3809297326839213e-9,-3.9539305003282924e-4,-3.847364136251777e-5,-2.382287114028292e-9,-3.9537371824626544e-4,-3.854948972135635e-5,-2.397910865159832e-9,-3.9534454501332527e-4,-3.8715107497318946e-5,-2.4312142198376576e-9,-3.952641095528031e-4,-3.896460770802551e-5,-2.4818178598376683e-9,-3.9509636929992376e-4,-3.9268210077471814e-5,-2.5445577437541576e-9,-3.9482433024793544e-4,-3.957704143478872e-5,-2.6102337078048142e-9,-3.944590437311957e-4,-3.983728465279895e-5,-2.66827632892777e-9,-3.9403811672779804e-4,-4.000826568398732e-5,-2.7102607573795425e-9,-3.936136334447647e-4,-4.007582516475161e-5,-2.732568246881595e-9,-3.932354489171214e-4,-4.005509986930359e-5,-2.7370829288428234e-9,-3.9293735005261444e-4,-3.9983124149450465e-5,-2.730028550413103e-9,-3.927304162113228e-4,-3.990616554842289e-5,-2.7198283129693987e-9,-3.926037104670152e-4,-3.986712394333029e-5,-2.7148744382944538e-9,-3.925300340245018e-4,-3.989630581245046e-5,-2.721726552456415e-9,-3.924740322961887e-4,-4.000673567964125e-5,-2.7439566656949624e-9,-3.9240044960224226e-4,-4.0193797020507027e-5,-2.781711773518208e-9,-3.9228100027058804e-4,-4.043835453992976e-5,-2.8319939335662753e-9,-3.920988397429943e-4,-4.071220949346134e-5,-2.8895632795737313e-9,-3.918501286346216e-4,-4.098447018044798e-5,-2.9482215655903276e-9,-3.915428759247042e-4,-4.1227354423628e-5,-3.002126932202798e-9,-3.911938860598323e-4,-4.142035578932055e-5,-3.0468184632871506e-9,-3.908248865257149e-4,-4.1552391217979064e-5,-3.079773043002786e-9,-3.904587877773441e-4,-4.162213920665322e-5,-3.100490246668063e-9,-3.901166540589265e-4,-4.163716629526032e-5,-3.1102498369570066e-9,-3.898154596295406e-4,-4.1612528206521545e-5,-3.1117545046976984e-9,-3.895663343014008e-4,-4.15692477287104e-5,-3.108816873159751e-9,-3.893729274795302e-4,-4.1532643167673676e-5,-3.106122424164249e-9,-3.8922964958095066e-4,-4.1530120920376783e-5,-3.108959796232942e-9,-3.8911993547672825e-4,-4.158773400879558e-5,-3.1226873440949273e-9,-3.890154780111431e-4,-4.172477613316137e-5,-3.1516937951170783e-9,-3.8887832398421657e-4,-4.1946490302301866e-5,-3.1978260954989524e-9,-3.8866798799491536e-4,-4.2236923527193535e-5,-3.2587392014650204e-9,-3.883541075724722e-4,-4.255643026767475e-5,-3.3271796700881e-9,-3.879309179981178e-4,-4.2848970224092304e-5,-3.3923178303223024e-9,-3.874252936797595e-4,-4.3060086306725585e-5,-3.4432808142227515e-9,-3.8689085406422015e-4,-4.315822428367038e-5,-3.473343383367832e-9,-3.863889877673784e-4,-4.3147231358598694e-5,-3.4823712443678767e-9,-3.859670303418556e-4,-4.306282988945449e-5,-3.476235200012914e-9,-3.856450179732965e-4,-4.29567332020061e-5,-3.4640108169692097e-9,-3.8541502948697586e-4,-4.287851646215824e-5,-3.4548315486565543e-9,-3.852493149355605e-4,-4.2863147399264384e-5,-3.4556957290431317e-9,-3.851111325842977e-4,-4.2926194690833945e-5,-3.4704676625369628e-9,-3.849641750666217e-4,-4.306488479653104e-5,-3.4997555963823663e-9,-3.8477904449105344e-4,-4.326230537360815e-5,-3.541315667419064e-9,-3.845368505256895e-4,-4.349269606106779e-5,-3.5907716079917845e-9,-3.842305470775176e-4,-4.372677264988809e-5,-3.6425556238611925e-9,-3.838644713396162e-4,-4.393662457551494e-5,-3.690971057311515e-9,-3.834524001017426e-4,-4.4099766813166904e-5,-3.731195660582228e-9,-3.8301455462920074e-4,-4.4201952462350065e-5,-3.760022682061001e-9,-3.8257407697839317e-4,-4.42385677285092e-5,-3.776219192075404e-9,-3.821534971407641e-4,-4.42146190699868e-5,-3.78049345493217e-9,-3.8177167811354886e-4,-4.414353188785048e-5,-3.775176115440497e-9,-3.814415037458072e-4,-4.404520966037506e-5,-3.763795599090132e-9,-3.811682438952999e-4,-4.3943745048884684e-5,-3.750686091708826e-9,-3.8094841874788385e-4,-4.3864881721126706e-5,-3.740645067077998e-9,-3.807690606418496e-4,-4.383310219135978e-5,-3.738542478624394e-9,-3.8060747113549404e-4,-4.3868015094879415e-5,-3.7487069852998005e-9,-3.8043212896826716e-4,-4.397964230952124e-5,-3.77392849591353e-9,-3.8020614214202126e-4,-4.416283549922484e-5,-3.814126337469046e-9,-3.7989477348660916e-4,-4.43925934432593e-5,-3.8651369785543476e-9,-3.7947723172862823e-4,-4.462397219530305e-5,-3.918497560033356e-9,-3.789593875598948e-4,-4.4800964639163135e-5,-3.96317158934382e-9,-3.783796554624242e-4,-4.487522211492297e-5,-3.989310173516736e-9,-3.7780028171270733e-4,-4.482731494297352e-5,-3.992457390009027e-9,-3.772848187336151e-4,-4.4677289049787794e-5,-3.975587279866091e-9,-3.768738589342568e-4,-4.4476302813578715e-5,-3.947557776892742e-9,-3.765731596693725e-4,-4.4284647088400656e-5,-3.919157973229763e-9,-3.763583684669076e-4,-4.415011216339383e-5,-3.8993178944763496e-9,-3.7618935482083637e-4,-4.409689236608701e-5,-3.893153730927883e-9,-3.760245905568384e-4,-4.412564418670974e-5,-3.901816527226052e-9,-3.758305281239963e-4,-4.4219737409461237e-5,-3.923290331122069e-9,-3.755856622553639e-4,-4.435289044370741e-5,-3.953443754350989e-9,-3.752809867131644e-4,-4.449563849145108e-5,-3.987032034029203e-9,-3.749186681115099e-4,-4.462002058569582e-5,-4.018598786101294e-9,-3.745100126286204e-4,-4.4702883418774216e-5,-4.043293546650498e-9,-3.740730272909859e-4,-4.472824114947566e-5,-4.057558558959361e-9,-3.736296275242296e-4,-4.4688796131403827e-5,-4.059581153155581e-9,-3.732025909944763e-4,-4.4586579231906474e-5,-4.049448013925343e-9,-3.7281240901532864e-4,-4.4432606619089756e-5,-4.029008414573869e-9,-3.724743361521061e-4,-4.4245446122239154e-5,-4.001513612609417e-9,-3.7219604683176886e-4,-4.404881315412431e-5,-3.971147889469539e-9,-3.719761559946201e-4,-4.386851506422404e-5,-3.942550572712875e-9,-3.718036869016746e-4,-4.3729011292962504e-5,-3.920339561133363e-9,-3.716585476438696e-4,-4.364979112255484e-5,-3.908574248164302e-9,-3.715130942800803e-4,-4.364173138022532e-5,-3.910078188684471e-9,-3.713350457921283e-4,-4.370352841575415e-5,-3.925586069346227e-9,-3.7109238380513845e-4,-4.3818651024463044e-5,-3.9528488394828995e-9,-3.707607845405598e-4,-4.395425389302266e-5,-3.986112633364346e-9,-3.7033298488081413e-4,-4.406449097933762e-5,-4.01659369367896e-9,-3.698271408886742e-4,-4.4100617660546984e-5,-4.034478858226037e-9,-3.6928850300559833e-4,-4.402761136944001e-5,-4.032309510928544e-9,-3.6877886950402043e-4,-4.3841161627626426e-5,-4.008397336623387e-9,-3.68354844176475e-4,-4.3574127073054776e-5,-3.9681227490621515e-9,-3.680456442399449e-4,-4.328536888044946e-5,-3.921896540270247e-9,-3.678438514995482e-4,-4.303605390842075e-5,-3.88088052714649e-9,-3.6771344272492777e-4,-4.286765668321312e-5,-3.853066475373028e-9,-3.6760744211130974e-4,-4.279271827029995e-5,-3.841571155142976e-9,-3.6748400287878505e-4,-4.279868404809011e-5,-3.845110101089603e-9,-3.6731503805980255e-4,-4.2858040425471004e-5,-3.859505188909107e-9,-3.670878782353395e-4,-4.293828963274571e-5,-3.879232548481663e-9,-3.668030259099282e-4,-4.300887457302174e-5,-3.8986149146387406e-9,-3.664707239972699e-4,-4.304497730933188e-5,-3.912649349560868e-9,-3.6610775839668016e-4,-4.302929792015812e-5,-3.917575783781463e-9,-3.657347454762509e-4,-4.295287241734541e-5,-3.911245377621743e-9,-3.653736412651876e-4,-4.2815417391808795e-5,-3.893281236926014e-9,-3.650452228879931e-4,-4.2625259277326516e-5,-3.865029786249455e-9,-3.6476641984123815e-4,-4.239866016669585e-5,-3.8293301914713776e-9,-3.645476115673927e-4,-4.215819173345968e-5,-3.790137077788593e-9,-3.643903517009124e-4,-4.192994909126311e-5,-3.752032661708107e-9,-3.642861036996599e-4,-4.173977362622034e-5,-3.71966635491313e-9,-3.642164327955368e-4,-4.160892942215545e-5,-3.697132215015159e-9,-3.641549093482707e-4,-4.1549858066543754e-5,-3.6872863278909777e-9,-3.6407072313266787e-4,-4.1562773802817286e-5,-3.6910546876715064e-9,-3.639337297548633e-4,-4.1633785245227165e-5,-3.706842402789998e-9,-3.637205402382895e-4,-4.17351263688552e-5,-3.730239026226662e-9,-3.634210733541716e-4,-4.182826882524199e-5,-3.7543125950062615e-9,-3.6304426985984744e-4,-4.187077889867399e-5,-3.770791848359487e-9,-3.626205679360432e-4,-4.1827023967553126e-5,-3.772195287003563e-9,-3.621980590998262e-4,-4.168082324199709e-5,-3.754465893092228e-9,-3.6183040236259707e-4,-4.144515737090433e-5,-3.719051514202747e-9,-3.615588707716338e-4,-4.1162290906568653e-5,-3.6731031521314867e-9,-3.61396538504054e-4,-4.089083947416614e-5,-3.627175685529882e-9,-3.6132387086853867e-4,-4.0684523717909506e-5,-3.5913642442355727e-9,-3.612984871112935e-4,-4.057381858184938e-5,-3.57191628278744e-9,-3.6127263538453984e-4,-4.0559572504084276e-5,-3.5699106570700582e-9,-3.6120844626298833e-4,-4.061897653845609e-5,-3.5820719173724824e-9,-3.610852118619653e-4,-4.0717434213808e-5,-3.6026558942381903e-9,-3.608991626924136e-4,-4.0819528038116416e-5,-3.625305177385425e-9,-3.6065929725962267e-4,-4.0895889554540754e-5,-3.644354040211268e-9,-3.6038248887045136e-4,-4.092611299111932e-5,-3.6555594903413846e-9,-3.6008948797461456e-4,-4.089924983103489e-5,-3.6564197922185135e-9,-3.598020583044798e-4,-4.0813324951301555e-5,-3.6462285238279096e-9,-3.5954081132138837e-4,-4.06746448702424e-5,-3.625955167087689e-9,-3.593232203764928e-4,-4.049706401005377e-5,-3.5980159849031315e-9,-3.591614767911618e-4,-4.030096233320472e-5,-3.5659792059672047e-9,-3.5906017581369425e-4,-4.011143008152642e-5,-3.5342021902016163e-9,-3.590142746293756e-4,-3.9955202075565014e-5,-3.5073577657903728e-9,-3.5900813493897933e-4,-3.9856294031816824e-5,-3.4898049410216977e-9,-3.590165228657977e-4,-3.9830885148132995e-5,-3.484809323888809e-9,-3.5900811619758537e-4,-3.988259608517585e-5,-3.4937187933879266e-9,-3.589513508368191e-4,-3.9999692692636196e-5,-3.515316951993148e-9,-3.588215300116031e-4,-4.015553409221791e-5,-3.5456245459726613e-9,-3.586074994236263e-4,-4.031277515563591e-5,-3.578347724118303e-9,-3.5831611404968134e-4,-4.0430887172238557e-5,-3.6060328154525907e-9,-3.5797300106842354e-4,-4.0475752013014714e-5,-3.621798180660383e-9,-3.5761860209188446e-4,-4.0429328523306393E-05,-3.6212892232579545e-9,-3.572993273213688e-4,-4.029669010026284e-5,-3.604282007806e-9,-3.5705516107877836e-4,-4.01074134564653e-5,-3.575261109336151e-9,-3.56907171864305e-4,-3.990910227757714e-5,-3.542466178765705e-9,-3.5685000952815797e-4,-3.975360446642084e-5,-3.51546370509442e-9,-3.568535768631939e-4,-3.968060851260814e-5,-3.502095452651505e-9,-3.568738387353768e-4,-3.9705767185260144e-5,-3.506123139270059e-9,-3.568676969066613e-4,-3.981847075560239e-5,-3.526548679024781e-9,-3.568050583051709e-4,-3.9988930782059254e-5,-3.558632436406407e-9,-3.56673931076042e-4,-4.017965642244248e-5,-3.595815124716367e-9,-3.564788653472729e-4,-4.035578451744323e-5,-3.631596410599711e-9,-3.562358193015023e-4,-4.049130472750036e-5,-3.6608170038248088e-9,-3.5596655047241536e-4,-4.057119598922274e-5,-3.6802591959901357e-9,-3.556941971200325e-4,-4.059099060777297e-5,-3.688733399766354e-9,-3.554403466676326e-4,-4.055530827745248e-5,-3.6868596918516015e-9,-3.552231502274103e-4,-4.047630480756108e-5,-3.6767210257453985e-9,-3.550558309426621e-4,-4.0372330118324426e-5,-3.6615103358701634e-9,-3.549450842029947e-4,-4.0266541812810685e-5,-3.6452166207126978e-9,-3.5488926874896996e-4,-4.018488717008979e-5,-3.6323023478007748e-9,-3.5487679855453013e-4,-4.0152863925988295e-5,-3.6272565039705226e-9,-3.5488564634128154e-4,-4.019082120417089e-5,-3.6339063053833576e-9,-3.548851821818268e-4,-4.030831790087331e-5,-3.6544836887830023e-9,-3.548412788564619e-4,-4.049915486044093e-5,-3.6886696467672877e-9,-3.547243771613122e-4,-4.073952000048624e-5,-3.733057102710848e-9,-3.5451840841679887e-4,-4.0991294984085655e-5,-3.781467494098887e-9,-3.5422725173712733e-4,-4.121070540757682e-5,-3.826258266543762e-9,-3.538757710829669e-4,-4.136004087638724e-5,-3.8603033376723175e-9,-3.53504443877645e-4,-4.1418554823238366e-5,-3.879000807542093e-9,-3.5315908496719346e-4,-4.1388813578662445e-5,-3.881636157749867e-9,-3.528788443462086e-4,-4.1296476166252965e-5,-3.871679975513234e-9,-3.5268596813342254e-4,-4.118364620333568e-5,-3.855939529728651e-9,-3.525801622010045e-4,-4.109766926615156e-5,-3.84277572321506e-9,-3.5253922633776333e-4,-4.107846753507557e-5,-3.839853266345332e-9,-3.5252589900936437e-4,-4.1148172477191464e-5,-3.852089139473279e-9,-3.5249873593641004e-4,-4.130635182893659e-5,-3.880468677924388e-9,-3.524232758040045e-4,-4.153215835850133e-5,-3.922098707575269e-9,-3.5227977421103506e-4,-4.179200475176239e-5,-3.971370515911904e-9,-3.5206553777650213e-4,-4.2049383308559924e-5,-4.02168889154195e-9,-3.517923456022032e-4,-4.22732706596802e-5,-4.067108127961648e-9,-3.5148116482799436e-4,-4.2443054420599876e-5,-4.103423630040207e-9,-3.5115656427665365e-4,-4.254990072284108e-5,-4.128602719456839e-9,-3.508422977149487e-4,-4.259571927212223e-5,-4.1426852963775e-9,-3.505584283820493e-4,-4.2591075740938084e-5,-4.1473814440995675e-9,-3.503196597354921e-4,-4.2553010117369735e-5,-4.145588069811775e-9,-3.5013425081355416e-4,-4.250315194947812e-5,-4.140977734111264e-9,-3.5000296732766683e-4,-4.246594915992028e-5,-4.1376949637137355e-9,-3.4991789475969336e-4,-4.2466442610266224e-5,-4.140069290235601e-9,-3.4986146693382345e-4,-4.252696515740907e-5,-4.152177172551735e-9,-3.498066307483597e-4,-4.266243723623054e-5,-4.177099698568324e-9,-3.497195305195477e-4,-4.287472041112924e-5,-4.215884841538455e-9,-3.495659175480646e-4,-4.31478811621325e-5,-4.266536865943841e-9,-3.4932096349046604e-4,-4.3447520413318964e-5,-4.323660910585198e-9,-3.4897946134101256e-4,-4.372699512012349e-5,-4.379354851830018e-9,-3.4856132871286715e-4,-4.394038767390347e-5,-4.425380590164783e-9,-3.481082489458901e-4,-4.4057719624662955e-5,-4.455829749739181e-9,-3.4767160295073125e-4,-4.407548988414973e-5,-4.469069235668393e-9,-3.4729671592580966e-4,-4.401761276765464e-5,-4.468122927844235e-9,-3.470101043459885e-4,-4.392694681445468e-5,-4.459514042827404e-9,-3.4681399513372885e-4,-4.3851866775344917e-5,-4.4512484058967996e-9,-3.466884675872167e-4,-4.383320048423082e-5,-4.450711814114548e-9,-3.465989335162038e-4,-4.3895141685846634e-5,-4.463003731704032e-9,-3.4650592936654275e-4,-4.404155435899953e-5,-4.4899789588464385e-9,-3.4637451628011674e-4,-4.425746261242522e-5,-4.53010146035591e-9,-3.46181278482088e-4,-4.451449326164072e-5,-4.579071229769213e-9,-3.459177599712526e-4,-4.477844122387709e-5,-4.631023039653653e-9,-3.4559013570456575e-4,-4.501691233562397e-5,-4.679952084717743e-9,-3.452158716119919e-4,-4.520525913805162e-5,-4.720973867124305e-9,-3.4481879495999203e-4,-4.532981541959789e-5,-4.7511223937350465e-9,-3.4442408015957925e-4,-4.538843813449534e-5,-4.769589480143558e-9,-3.440542089166945e-4,-4.5389084894805184e-5,-4.7774936884748956e-9,-3.437263070319252e-4,-4.534740102436488e-5,-4.77738576894948e-9,-3.4345067735983324e-4,-4.5284143124787143e-5,-4.772713716467364e-9,-3.4323003778487113e-4,-4.5222842054429787e-5,-4.76739691027074e-9,-3.4305901194424496e-4,-4.518761784714889e-5,-4.765524511352927e-9,-3.429236989818069e-4,-4.52007347246193e-5,-4.771068404277782e-9,-3.428015696217947e-4,-4.5279382227483e-5,-4.787430575127021e-9,-3.426625060919474e-4,-4.543136538951815e-5,-4.8166784633623644E-09,-3.424723163020663e-4,-4.565015092623224e-5,-4.858517932523486e-9,-3.4219991287895055e-4,-4.591113849483137e-5,-4.9093917591879784e-9,-3.418278103507178e-4,-4.6172490727433865e-5,-4.962406765475092e-9,-3.413624942079579e-4,-4.6383736833411844e-5,-5.008742784565768e-9,-3.408383536332906e-4,-4.650185695871724e-5,-5.040476506469633e-9,-3.4030994982600497e-4,-4.650853684917004e-5,-5.053640312983224e-9,-3.398339484712107e-4,-4.641889431496161e-5,-5.0498114969366615e-9,-3.394494690556336e-4,-4.627597601679743e-5,-5.03533340901495e-9,-3.3916682212753793e-4,-4.6134299214963423e-5,-5.018789578479401e-9,-3.389684970747851e-4,-4.60416761329767e-5,-5.0082068715226695e-9,-3.388189563580666e-4,-4.602714616208865e-5,-5.009119290870518e-9,-3.386770001401216e-4,-4.609734320211425e-5,-5.023773996416256e-9,-3.385060967047203e-4,-4.623938128036451e-5,-5.051224680335727e-9,-3.382808819877009e-4,-4.642712042057251e-5,-5.0879722483668916e-9,-3.3798991630609986e-4,-4.662831095629719e-5,-5.128915587919849e-9,-3.3763548039858775e-4,-4.6811176467318076e-5,-5.16845422831316e-9,-3.3723121913479214e-4,-4.694969103565298e-5,-5.201576989894772e-9,-3.367983998553216e-4,-4.7027084779648636e-5,-5.224733145745607e-9,-3.3636159656376993e-4,-4.703738149569362e-5,-5.236319126134027e-9,-3.359445418555763e-4,-4.698513068870385e-5,-5.236724866703748e-9,-3.3556670577894265e-4,-4.688372871358966e-5,-5.228009274195705e-9,-3.3524095168534554e-4,-4.675286146676685e-5,-5.213367901026198e-9,-3.3497229454820115e-4,-4.661567260074138e-5,-5.196589566113095e-9,-3.3475746495397114e-4,-4.6496053972731513e-5,-5.181629379466889e-9,-3.3458496403935856e-4,-4.6416067332450106e-5,-5.172290074158099e-9,-3.3443550989848553e-4,-4.639329367171046e-5,-5.171902756508261e-9,-3.3428303229029717e-4,-4.64378573046309e-5,-5.182859497219969e-9,-3.3409679136510515e-4,-4.654895942300463e-5,-5.205901867299847e-9,-3.3384565314112754e-4,-4.671137333713532e-5,-5.2392644177281354e-9,-3.3350538321036714e-4,-4.689360879171389e-5,-5.278078891925973e-9,-3.330683964243518e-4,-4.705068211910057e-5,-5.314688239576653e-9,-3.3255256023083976e-4,-4.713428191609814e-5,-5.340419822664278e-9,-3.320027438393118e-4,-4.71097541805525e-5,-5.3486420687704235e-9,-3.314797357602177e-4,-4.6972927801329136e-5,-5.337761831657595e-9,-3.3103860655846234e-4,-4.67558263411006e-5,-5.312260680512601e-9,-3.307076685003807e-4,-4.651535747158061e-5,-5.28090259224886e-9,-3.30480214378984e-4,-4.6310845214460665e-5,-5.2532057684234896e-9,-3.303220348953695e-4,-4.618357322333606e-5,-5.236272390095169e-9,-3.301874844254908e-4,-4.61477186883596e-5,-5.233313814606197e-9,-3.3003452239918076e-4,-4.619282888887948e-5,-5.243799607308075e-9,-3.2983367667361197e-4,-4.6292393090905275e-5,-5.264447531098321e-9,-3.2957087722242947e-4,-4.6413211027825386e-5,-5.2904004316313725e-9,-3.2924630863698787e-4,-4.652281087401979e-5,-5.316302669134748e-9,-3.288714144932077e-4,-4.659436358753661e-5,-5.337217434375077e-9,-3.284653025069503e-4,-4.6609576179093505e-5,-5.349376028202255e-9,-3.2805103471112654e-4,-4.656006986482792e-5,-5.35069069746132e-9,-3.2765205016821133e-4,-4.6447489372098676E-05,-5.340948027169847e-9,-3.2728894386480116e-4,-4.628254233746377e-5,-5.321669265696422e-9,-3.2697676918230653e-4,-4.608314579988514e-5,-5.295709141439522e-9,-3.2672307735294367e-4,-4.5871826451843845e-5,-5.266715731905392e-9,-3.265269163253492e-4,-4.567268490866273e-5,-5.238595811180517e-9,-3.263787833299249e-4,-4.5508326939279494e-5,-5.2150856928611045e-9,-3.262613612892449e-4,-4.5396953226487785e-5,-5.199410066665686e-9,-3.26150973687626e-4,-4.5349627530952965e-5,-5.193932690177878e-9,-3.2601983786595027e-4,-4.5367769831319596e-5,-5.1997081785981995e-9,-3.2583937029624085e-4,-4.544098475670977e-5,-5.215918457321146e-9,-3.2558503734766617e-4,-4.554569690961154e-5,-5.2393381578890325e-9,-3.252430307869566e-4,-4.5645933134909383e-5,-5.264196058241929e-9,-3.248178384294444e-4,-4.56983335628188e-5,-5.282923877448141e-9,-3.2433764411315686e-4,-4.566298738150629e-5,-5.288101154267343e-9,-3.238524934028116e-4,-4.55187894312056e-5,-5.275271384380036e-9,-3.2342122598822694e-4,-4.527677794176033e-5,-5.245365700942163e-9,-3.230898582700321e-4,-4.498163827286755e-5,-5.205044425823437e-9,-3.228725935037573e-4,-4.469651453348592e-5,-5.164266989512154e-9,-3.2274750094473347e-4,-4.4478159074842894e-5,-5.13235180184745e-9,-3.226689152698676e-4,-4.435700005748701e-5,-5.114830829337623e-9,-3.225871774071815e-4,-4.433186738587753e-5,-5.112508862693316e-9,-3.2246425807672813e-4,-4.437776497525427e-5,-5.1224162241922625e-9,-3.2228031504722966e-4,-4.445858657848031e-5,-5.139485592758135e-9,-3.2203286741891803e-4,-4.4538062588412724E-05,-5.1580709737048375e-9,-3.217324318411406e-4,-4.4586481028774453E-05,-5.173027330322962e-9,-3.213975733128406e-4,-4.458364652752997e-5,-5.180397855754135e-9,-3.210507152123642e-4,-4.451955192695055e-5,-5.177821168001773e-9,-3.20714821071863e-4,-4.43939735421001e-5,-5.164703758157465e-9,-3.2041064399458284e-4,-4.421548906702248e-5,-5.1421458139077516e-9,-3.2015437220027257e-4,-4.400000934734236e-5,-5.112638550353013e-9,-3.199556359923085e-4,-4.3768795235697604e-5,-5.079609309330488e-9,-3.1981598750983545e-4,-4.354585021416585e-5,-5.046904699548832e-9,-3.197281840014739e-4,-4.3354726543107915e-5,-5.018289250760496e-9,-3.196765829420705e-4,-4.321510531744181e-5,-4.997015044656991e-9,-3.1963870183165634e-4,-4.313959806056474e-5,-4.985452141399794e-9,-3.195878597550035e-4,-4.313112514042971e-5,-4.984725308729074e-9,-3.1949679113388595e-4,-4.318123126172128e-5,-4.994338339842217e-9,-3.1934206103072054e-4,-4.326970683766678e-5,-5.0118522340722995e-9,-3.191090769027233e-4,-4.336592775766331e-5,-5.032784985900198e-9,-3.1879727330728615e-4,-4.3432619842126424e-5,-5.0510003085641095e-9,-3.184242585414621e-4,-4.3432905625344e-5,-5.059844813029959e-9,-3.180265341602522e-4,-4.3340679734383175e-5,-5.054050804727019e-9,-3.1765375634226675e-4,-4.315212077889462e-5,-5.031931810784182e-9,-3.173550483018549e-4,-4.289299386726835e-5,-4.996837554368338e-9,-3.1716080997909414e-4,-4.261505262909454e-5,-4.9567039021442e-9,-3.170692069796597e-4,-4.237923706416617e-5,-4.921374850462595e-9,-3.170465026363197e-4,-4.223264659485568e-5,-4.898891858407981e-9,-3.170418960140496e-4,-4.21921256965402e-5,-4.892790866082162e-9,-3.1700761388347835e-4,-4.224278875220216e-5,-4.901672313350512e-9,-3.169131831034806e-4,-4.234911923149743e-5,-4.920678900423363e-9,-3.16749371627084e-4,-4.246978287171236e-5,-4.943593716023741e-9,-3.165243898644444e-4,-4.2568904032282556e-5,-4.964541739482594e-9,-3.1625720934575716e-4,-4.262161789567898e-5,-4.9789925323940574e-9,-3.159714090148497e-4,-4.2615163483100204e-5,-4.984192983307216e-9,-3.1569080936814757e-4,-4.254769010175503e-5,-4.979239205595006e-9,-3.154366980394452e-4,-4.242640923152246e-5,-4.964927408765917e-9,-3.1522594108550356e-4,-4.226576420878259e-5,-4.9434488536958256e-9,-3.150694594909588e-4,-4.2085617046374826e-5,-4.9179780034059015e-9,-3.1497088780468846e-4,-4.190919872197873e-5,-4.892216555795521e-9,-3.1492551795328115e-4,-4.1760510317359374e-5,-4.869937621819285e-9,-3.1491993926755705e-4,-4.166103135750512e-5,-4.85453930904946e-9,-3.1493292291119807e-4,-4.162602317937051e-5,-4.8486082924002386e-9,-3.149378852148921e-4,-4.166109759027768e-5,-4.853496717228234e-9,-3.149068763252208e-4,-4.1759869297922245e-5,-4.8689420569251265e-9,-3.1481563886056355e-4,-4.1903492821241635e-5,-4.892817724760096e-9,-3.146489018901334e-4,-4.206263788736928e-5,-4.921152563389806e-9,-3.1440486675449474e-4,-4.220199291018188e-5,-4.948556753677259e-9,-3.1409782736031844e-4,-4.2286972882281444e-5,-4.969141215356648e-9,-3.1375783301927705e-4,-4.229193221838251e-5,-4.9779020409811375e-9,-3.1342629281164673e-4,-4.2208473219180394e-5,-4.972322659694826e-9,-3.131469410284784e-4,-4.205134100763301e-5,-4.953675901336095e-9,-3.129532228356514e-4,-4.185850783786602e-5,-4.927339367737182e-9,-3.128559402293983e-4,-4.168268583803075e-5,-4.901590331357037e-9,-3.128372712174129e-4,-4.157504774094596e-5,-4.884996661975068e-9,-3.1285591758021213e-4,-4.1567376446027606e-5,-4.883435028626847e-9,-3.1286216261514294e-4,-4.166161325502891e-5,-4.898203035129861e-9,-3.128152510161355e-4,-4.1832011412133305e-5,-4.926093299613993e-9,-3.1269456478840265e-4,-4.2037319835952676e-5,-4.96108661782143e-9,-3.1250114325379443e-4,-4.2235381879465134e-5,-4.996540702951394e-9,-3.1225205877241923e-4,-4.239361488219513e-5,-5.026892948270938e-9,-3.119724750885652e-4,-4.249330688871886e-5,-5.048533140222312e-9,-3.116889276893549e-4,-4.252921835778996e-5,-5.059987008882629e-9,-3.1142503078342897e-4,-4.25069961860904e-5,-5.0616921955618265e-9,-3.111992283429283e-4,-4.244023805497469e-5,-5.055583300773006e-9,-3.1102368764590496e-4,-4.234797844643438e-5,-5.044617784933671e-9,-3.1090358734081304e-4,-4.22526006575234e-5,-5.032321067688745e-9,-3.108364399804756e-4,-4.217778740604939e-5,-5.022387283844178e-9,-3.108115257297438e-4,-4.214600986581236e-5,-5.018313830814128e-9,-3.1080993296466673e-4,-4.2175257475328325e-5,-5.023008475613783e-9,-3.1080593916080375e-4,-4.227521362395652e-5,-5.038322479284464e-9,-3.1077034837130563e-4,-4.244369565068855e-5,-5.06453984568056e-9,-3.1067585579162317e-4,-4.266468404943358e-5,-5.099969884051941e-9,-3.105035849258535e-4,-4.290936505875487e-5,-5.140877929168914e-9,-3.1024899896644803e-4,-4.314094465863473e-5,-5.181956628701638e-9,-3.0992505626402714e-4,-4.332264950955875e-5,-5.217361941575282e-9,-3.095610883380589e-4,-4.342700451466909e-5,-5.2421145403966415e-9,-3.091971222357173e-4,-4.3443817524911114e-5,-5.253502474396329e-9,-3.088746927985775e-4,-4.338445254519018e-5,-5.252067765269822e-9,-3.086262289687441e-4,-4.328075377912741e-5,-5.241813665026146e-9,-3.084657459880443e-4,-4.317815751980895e-5,-5.229427402694319e-9,-3.083838136062314e-4,-4.312402180818095e-5,-5.222569664693657e-9,-3.083492587428513e-4,-4.315408297432371e-5,-5.227650075739371e-9,-3.083181203766566e-4,-4.328165458806027e-5,-5.247856867561176e-9,-3.082471429138195e-4,-4.349411061585933e-5,-5.2822613795529054e-9,-3.081064848257633e-4,-4.375827146070421e-5,-5.3263709887758225e-9,-3.0788661043989416e-4,-4.403198008161343e-5,-5.373792020884821e-9,-3.0759759139367557e-4,-4.4276497491867025e-5,-5.418190385136207e-9,-3.072628362842785e-4,-4.4465056129220834e-5,-5.454790327401472e-9,-3.0691106900856074e-4,-4.458588788817899e-5,-5.481074258715986e-9,-3.0656967318466223e-4,-4.4640878311394534e-5,-5.496772186340735e-9,-3.0626062010192915e-4,-4.464213768265969e-5,-5.5034243148592386e-9,-3.0599865177202766e-4,-4.460833959835805e-5,-5.503787246380918e-9,-3.057908013060658e-4,-4.4561687503291136e-5,-5.501265100167681e-9,-3.0563641143263365e-4,-4.4525580714277986e-5,-5.4994619326435316e-9,-3.0552715792361276e-4,-4.4522582031122806e-5,-5.501861033144501e-9,-3.0544706109613843e-4,-4.457210286773981e-5,-5.511548919490009e-9,-0.00030537297561927964,-4.4687381552856436e-5,-5.5308628299553145e-9]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json new file mode 100644 index 000000000..2eec9421f --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":8000,"numberOfSamples":1000,"samples":[-3.0527640252829807e-4,-4.487182696660493e-5,-5.56088448082571e-9,-3.051274863200565e-4,-4.511556230951057e-5,-5.6008437940501195e-9,-3.049014822200931e-4,-4.5393887171247894e-5,-5.647698563779582e-9,-3.045865825423837e-4,-4.566978863347711e-5,-5.696284894052496e-9,-3.041902526794886e-4,-4.590165294193654e-5,-5.7403050551512475e-9,-3.0374053440293064e-4,-4.605480630272924e-5,-5.774008768966934e-9,-3.032803042778928e-4,-4.6112832816305496e-5,-5.793973590280497e-9,-3.028557483245855e-4,-4.608383761616052e-5,-5.800251345674449e-9,-3.025032355259023e-4,-4.599882516164128e-5,-5.796427523208801e-9,-3.022393949447573e-4,-4.5902896545994185e-5,-5.788631331365615e-9,-3.020574267495867e-4,-4.5842714571687194e-5,-5.7838921806700334e-9,-3.019300694661608e-4,-4.585434504667538e-5,-5.7883384069394884e-9,-3.0181769376023336e-4,-4.595468543172006e-5,-5.805682519418446e-9,-3.0167899235319e-4,-4.613834629665025e-5,-5.83635658405951e-9,-3.014813398322303e-4,-4.638044052124705e-5,-5.877534282545917e-9,-3.0120806044062887e-4,-4.664417952898078e-5,-5.924029708374941e-9,-3.008608032921932e-4,-4.689076983299546e-5,-5.969769115749644e-9,-3.004568895018775e-4,-4.70885065576558e-5,-6.009334760264992e-9,-3.000232042040917e-4,-4.7218579979817117e-5,-6.039104695872155e-9,-2.995891071912802e-4,-4.72766796425179e-5,-6.057736521969508e-9,-2.9918053358217385e-4,-4.7271135672653113e-5,-6.066024169441235e-9,-2.9881634126882297e-4,-4.721922325858296e-5,-6.066350982343671e-9,-2.9850682571005375e-4,-4.714317647578276e-5,-6.0620073426491385e-9,-2.982536857147729e-4,-4.706682514849363e-5,-6.056588919504954e-9,-2.9805063249734796e-4,-4.7013055973122464e-5,-6.053577596287479e-9,-2.978841024009395e-4,-4.700177778028711e-5,-6.0560846647952315e-9,-2.97733963612634e-4,-4.7047861809806975e-5,-6.066639640409404e-9,-2.975745746966664e-4,-4.715862391952254e-5,-6.086875521052076e-9,-2.9737697702912646e-4,-4.733079302488828e-5,-6.117026762619431e-9,-2.9711318240313096e-4,-4.754766231303244e-5,-6.1553289826818086e-9,-2.967630328757633e-4,-4.777820603997843e-5,-6.1976547684464505e-9,-2.963225516133362e-4,-4.7980702799556336e-5,-6.237878353608434e-9,-2.9581034269964766e-4,-4.8112531767448336e-5,-6.26929277722192e-9,-2.952671701271256e-4,-4.8144449769795835e-5,-6.286810452998715e-9,-2.9474584957997816e-4,-4.807330163392616e-5,-6.28897999422168e-9,-2.942942146728656e-4,-4.7925741507049555e-5,-6.278697823265868e-9,-2.939390776646052e-4,-4.774982986598883e-5,-6.2621933111198565e-9,-2.9367888471910724e-4,-4.759858957460034e-5,-6.246887112949443e-9,-2.9348722961036977e-4,-4.751366495959348e-5,-6.239195834786848e-9,-2.933236015115482e-4,-4.7515401306169104e-5,-6.243051945843658e-9,-2.9314581436119905e-4,-4.760093779409941e-5,-6.2593279168203955e-9,-2.9292007500896937e-4,-4.774844549298213e-5,-6.286013467788338e-9,-2.926269983387905e-4,-4.792463505513392e-5,-6.318926256564662e-9,-2.9226350769051096e-4,-4.80930810595307e-5,-6.352759512595941e-9,-2.918412941194005e-4,-4.822168516898902e-5,-6.382264012712696e-9,-2.9138274761924426e-4,-4.8288192173938596e-5,-6.4033284884177525e-9,-2.9091546827443674e-4,-4.828307144331461e-5,-6.4137142155758484e-9,-2.904666459630382e-4,-4.820960531850297e-5,-6.413290100567614e-9,-2.9005845372039675e-4,-4.808169188193544e-5,-6.403779607548024e-9,-2.897051121066428e-4,-4.7920298339887756e-5,-6.388175539851937e-9,-2.894117280467004e-4,-4.77495594070045e-5,-6.3700487926475646e-9,-2.891745460224369e-4,-4.7593309240161246e-5,-6.352958916462981e-9,-2.889819981834109e-4,-4.7472392700331755e-5,-6.340071065896678e-9,-2.8881605249833365e-4,-4.740260960082055e-5,-6.333942633116508e-9,-2.886536932128631e-4,-4.739292957383811e-5,-6.336355114475078e-9,-2.884687014832789e-4,-4.7443667570689896e-5,-6.348050662755428e-9,-2.8823427250380447e-4,-4.754452904089668e-5,-6.368308311532382e-9,-2.879272735231633e-4,-4.767303651414079e-5,-6.394467888137689e-9,-2.875345818250315e-4,-4.7794856179294424e-5,-6.4217381728864196e-9,-2.8706055734247936e-4,-4.786832012302628e-5,-6.443756519509059e-9,-2.865324198422822e-4,-4.785486234755549e-5,-6.4542037210419195e-9,-2.859983895327293e-4,-4.773390713864742e-5,-6.449179015088165e-9,-2.8551497623516194e-4,-4.7515537099475336e-5,-6.429222290163076e-9,-2.8512656698742036e-4,-4.724172825041583e-5,-6.399602792241161e-9,-2.8484791237568235e-4,-4.697228518879425e-5,-6.368414825098121e-9,-2.846599731981497e-4,-4.676227057336778e-5,-6.343524830079535e-9,-2.845204990113826e-4,-4.664360730421715e-5,-6.330077698450703e-9,-2.8438137789211793e-4,-4.661903031892221e-5,-6.32954910609419e-9,-2.842033332610527e-4,-4.666740117899054e-5,-6.340163616828402e-9,-2.8396352830062366e-4,-4.6754274987887116e-5,-6.357961127061933e-9,-2.836566692220362e-4,-4.684229725179311e-5,-6.377959739889069e-9,-2.8329216427076527e-4,-4.689886773239183e-5,-6.395189096969708e-9,-2.828896488527907e-4,-4.6900720390375284e-5,-6.405540596281919e-9,-2.824742018907562e-4,-4.6836037546351875e-5,-6.4064023526000905e-9,-2.8207178859335354e-4,-4.670471097933904e-5,-6.397002591025266e-9,-2.817052464373959e-4,-4.6517083949337426e-5,-6.378389721142845e-9,-2.8139115347079264e-4,-4.629149712487325e-5,-6.3530658178796655e-9,-2.811378256204399e-4,-4.605106192105769e-5,-6.324396845660935e-9,-2.8094456582733565e-4,-4.582011369839805e-5,-6.295969795469077e-9,-2.8080213121061873e-4,-4.562084808863251e-5,-6.271061910825657e-9,-2.806941282722342e-4,-4.547056083835451e-5,-6.252305778500468e-9,-2.805989529923734e-4,-4.537959014034061e-5,-6.241511789741509e-9,-2.80492067241958e-4,-4.5349843601162954e-5,-6.239532828776588e-9,-2.803485913613245e-4,-4.5373805665704785e-5,-6.246068068716576e-9,-2.8014639891832464e-4,-4.543399639996473e-5,-6.259380228216586e-9,-2.7987013346108646e-4,-4.550321157816095e-5,-6.276047783203556e-9,-2.795162996405821e-4,-4.5546626057891795e-5,-6.291045688354151e-9,-2.790984739623287e-4,-4.5527321372703615e-5,-6.298505516465384e-9,-2.7865004000894166e-4,-4.541620148794469e-5,-6.2933199008508685e-9,-2.7822043288384707e-4,-4.520484869900707e-5,-6.273276588202333e-9,-2.7786184532760936e-4,-4.4915535087074116e-5,-6.240723143326448e-9,-2.776091852793529e-4,-4.459975553570474e-5,-6.202458787212566e-9,-2.774638632702066e-4,-4.432123225548417e-5,-6.167368360824802e-9,-2.7739275622409024e-4,-4.41307893297388e-5,-6.142942429461774e-9,-2.7734363791847937e-4,-4.404793703195258e-5,-6.132712569902154e-9,-2.772666481119829e-4,-4.405873879426259e-5,-6.135803693451539e-9,-2.7712954630060494e-4,-4.41272344392883e-5,-6.148198003690473e-9,-2.769220926915838e-4,-4.421078330515423e-5,-6.164515668643785e-9,-2.7665243775120893e-4,-4.4271847046803456e-5,-6.179465722684056e-9,-2.7634044414996943e-4,-4.42840858576599e-5,-6.188763867311319e-9,-2.760112787880964e-4,-4.4233969441495255e-5,-6.1896325079837635e-9,-2.7569053678467995e-4,-4.4119908832911274e-5,-6.1810143630256235e-9,-2.7540081443001705e-4,-4.395037973603709e-5,-6.1635500652351195e-9,-2.7515925763830574e-4,-4.374163186724933e-5,-6.13931893200916e-9,-2.7497583229343773e-4,-4.351509382685275e-5,-6.1113765985356755e-9,-2.7485228599034487e-4,-4.3294504323835476e-5,-6.083191373407955e-9,-2.747818899337699e-4,-4.3102814240736015e-5,-6.0580978536060394e-9,-2.7475014030275356e-4,-4.2959058861573174e-5,-6.038863549547172e-9,-2.747364727847155e-4,-4.287561578709453e-5,-6.027414092691353e-9,-2.7471679197166814e-4,-4.2856211898555225e-5,-6.024680664675889e-9,-2.74666552518033e-4,-4.2894856634732136e-5,-6.0304870842090665e-9,-2.745641634544586e-4,-4.297583426922976e-5,-6.043429961128174e-9,-2.7439449831047824e-4,-4.307484329777695e-5,-6.060781782144661e-9,-2.7415239183585174e-4,-4.316139154284506e-5,-6.078538519547611e-9,-2.738458939963984e-4,-4.320289628151456e-5,-6.0918223659286445e-9,-2.7349833665268886e-4,-4.317111271140737e-5,-6.095829254040278e-9,-2.731473286401864e-4,-4.305077016877184e-5,-6.087300751131777e-9,-2.728384066406977e-4,-4.284850797286421e-5,-6.0661306830069746e-9,-2.726122464122091e-4,-4.2597682445614436e-5,-6.036317211131248e-9,-2.724883882208636e-4,-4.2353186226421395e-5,-6.005346149629137e-9,-2.724538993112942e-4,-4.21739660621937e-5,-5.981721324392774e-9,-2.7246601864680027e-4,-4.209994110375406e-5,-5.971667694606237e-9,-2.724694960632973e-4,-4.2136627145050584e-5,-5.976871636177898e-9,-2.724184831524113e-4,-4.225643997788255e-5,-5.9944559253544774e-9,-2.7229051896981396e-4,-4.241362759713718e-5,-6.018773549341146e-9,-2.720878961454436e-4,-4.2562043557314734e-5,-6.043635716054438e-9,-2.718303929497391e-4,-4.266714123706157e-5,-6.063913242192316e-9,-2.715458512132313e-4,-4.271024379125761e-5,-6.076285881259704e-9,-2.712626659453091e-4,-4.268748746246162e-5,-6.07938776767281e-9,-2.710052329722968e-4,-4.260653559518088e-5,-6.073631332430156e-9,-2.707916949070718e-4,-4.248307887576607e-5,-6.060863861100873e-9,-2.7063291676093104e-4,-4.233782096456377e-5,-6.043919283576518e-9,-2.70531999054325e-4,-4.2193858972839276e-5,-6.026112658845783e-9,-2.7048412159524855e-4,-4.207417276834723e-5,-6.010749252660998e-9,-2.704768085276078e-4,-4.199898085891688e-5,-6.0007083249929064e-9,-2.7049091718653486e-4,-4.198292846456885e-5,-5.998122765150181e-9,-2.705026716692996e-4,-4.203245930769175e-5,-6.0041500657964715e-9,-2.704867786001442e-4,-4.2143960157053555e-5,-6.018813110137525e-9,-2.7042033326989443e-4,-4.2303217237346e-5,-6.0408918160634616e-9,-2.702869966792254e-4,-4.248659500899885e-5,-6.067897441023674e-9,-2.7008072908028737e-4,-4.26641123975258e-5,-6.096212887106141e-9,-2.698083301299173e-4,-4.2804202514864496e-5,-6.121495193355481e-9,-2.6949017078992116e-4,-4.287971029548579e-5,-6.139410707238995e-9,-2.6915846953213103e-4,-4.287457712691834e-5,-6.146692366322419e-9,-2.688523188530164e-4,-4.2790136468926805e-5,-6.142330933965789e-9,-2.6860905054935876e-4,-4.2648942394378234e-5,-6.128480097984698e-9,-2.684529386021688e-4,-4.249325511328419e-5,-6.110525799006696e-9,-2.683846561272461e-4,-4.237577162193681e-5,-6.0958916495610374e-9,-2.6837713845480256e-4,-4.2343242447415576e-5,-6.091676533973367e-9,-2.6838259865424467e-4,-4.241897119821026e-5,-6.1020278393601044e-9,-2.6834954243159544e-4,-4.259356052706968e-5,-6.126618946744287e-9,-2.682414538672124e-4,-4.282968580925502e-5,-6.161071746178656e-9,-2.680473788683876e-4,-4.307777590451198e-5,-6.198928228542621e-9,-2.6778068952418554e-4,-4.329323584064263e-5,-6.233932842908828e-9,-2.6746984498891765e-4,-4.3447294758245534e-5,-6.261585257801009e-9,-2.6714767994234935e-4,-4.3529579126087075e-5,-6.279696539448954e-9,-2.6684354540698494e-4,-4.3545106782298875e-5,-6.288235271926127e-9,-2.6657927046700944e-4,-4.3509317188260445e-5,-6.288838671033637e-9,-2.6636794026195363e-4,-4.3443465401146905e-5,-6.284232359286678e-9,-2.662140688653375e-4,-4.33711394559145e-5,-6.277670357631493e-9,-2.661141777281877e-4,-4.331570058397092e-5,-6.272450417208355e-9,-2.660574130223562e-4,-4.329813146063895e-5,-6.271533343649169e-9,-2.6602631028516745e-4,-4.3334832510506525e-5,-6.277259574999488e-9,-2.6599810856047266e-4,-4.3435186752350394e-5,-6.291119283070944e-9,-2.6594709819864e-4,-4.35991710667151e-5,-6.313534449691571e-9,-2.6584826187483416e-4,-4.3815728146144786e-5,-6.3436577175095264e-9,-2.6568197080015167e-4,-4.406282185693006e-5,-6.379260979809167e-9,-2.654388737832523e-4,-4.4309976961368614e-5,-6.416844899921613e-9,-2.651235904796523e-4,-4.452352360454744e-5,-6.45208973946681e-9,-2.6475574490715504e-4,-4.467379291793127e-5,-6.480660100582804e-9,-2.643674413816663e-4,-4.474263772198858e-5,-6.499235785255884e-9,-2.639972203386808e-4,-4.472932230357101e-5,-6.506524425656316e-9,-2.636814333534693e-4,-4.4652981742684745e-5,-6.50394943475184e-9,-2.6344474410546685e-4,-4.455031096217054e-5,-6.4957052750673075e-9,-2.6329215242018296e-4,-4.446797824163044e-5,-6.487971527226249e-9,-2.6320539661309406e-4,-4.445066132419316e-5,-6.487318143828218e-9,-2.63146231141766e-4,-4.452761326611089e-5,-6.498693327228091e-9,-2.630670795117471e-4,-4.4702593314460794e-5,-6.523735117410233e-9,-2.629259962418986e-4,-4.495205403355389e-5,-6.560195481816707e-9,-2.626998326199566e-4,-4.523322969000845e-5,-6.6028055138425835e-9,-2.6238984542081514e-4,-4.5498615964264204e-5,-6.645151128486782e-9,-2.620181139265042e-4,-4.57101034480172e-5,-6.681643636040315e-9,-2.6161796896905014e-4,-4.584720776675456e-5,-6.7088001834994565e-9,-2.6122365300701173e-4,-4.590801043953323e-5,-6.725594759670876e-9,-2.608629732320002e-4,-4.590508421570969e-5,-6.733110680725014e-9,-2.605538971319134e-4,-4.585973386898697e-5,-6.733869753505527e-9,-2.6030410219870376e-4,-4.5796853823059685e-5,-6.731122265893311e-9,-2.601120119629486e-4,-4.574121346938611e-5,-6.728248726724007e-9,-2.5996821459528486e-4,-4.571499884470834e-5,-6.728333811525041e-9,-2.5985675252670267e-4,-4.573601546615178e-5,-6.733900781581118e-9,-2.597563470776258e-4,-4.581593891770877e-5,-6.7467347208660815e-9,-2.596420276961034e-4,-4.5958327928148174e-5,-6.76770494879153e-9,-2.594877524327709e-4,-4.6156630892450285e-5,-6.796534200413236e-9,-2.5927042693107434e-4,-4.6392942692009576e-5,-6.8315565589601714e-9,-2.589751849875842e-4,-4.663871238482509e-5,-6.86962752289666e-9,-2.586008062635789e-4,-4.685864046342157e-5,-6.906416881867135e-9,-2.5816311466290005e-4,-4.7018104873896896e-5,-6.937219567577798e-9,-2.5769402554871504e-4,-4.70926588010539e-5,-6.9581636155644655e-9,-2.5723517884218273e-4,-4.707644773329669e-5,-6.967428938305518e-9,-2.568273908815006e-4,-4.6986025040791123e-5,-6.966001210496018e-9,-2.564992393431867e-4,-4.685748280218821e-5,-6.957630999254399e-9,-2.5625871902160277e-4,-4.6737400412949545e-5,-6.947966529409689e-9,-2.5609074998136574e-4,-4.667043573132832e-5,-6.943105351110571e-9,-2.5596122517727485e-4,-4.6687347367702306e-5,-6.947967062704738e-9,-2.5582634783583117e-4,-4.6796866950713174e-5,-6.964938644351132e-9,-2.5564461158371896e-4,-4.698373076282578e-5,-6.993209196686726e-9,-2.553879109156633e-4,-4.7213518226825917E-05,-7.029044733220987e-9,-2.5504832832596024e-4,-4.744277599023395e-5,-7.066933407213379e-9,-2.5463858429774843e-4,-4.7630969964505535e-5,-7.1011838454172516e-9,-2.541865650862485e-4,-4.775023325017012e-5,-7.127396703046114e-9,-2.537265402404863e-4,-4.7790107831489385e-5,-7.143345909601783e-9,-2.532904918374822e-4,-4.775683549761495e-5,-7.1491178104008635e-9,-2.529021042786563e-4,-4.766889086299671e-5,-7.146663004807935e-9,-2.525741732148423e-4,-4.7551249353078e-5,-7.139062192878236e-9,-2.5230871169483677e-4,-4.743029000875771e-5,-7.129782907503167e-9,-2.5209851175530824e-4,-4.733012368995658e-5,-7.12209759254885e-9,-2.519291245187472e-4,-4.7270279788107355e-5,-7.1187265860613594e-9,-2.517806968882801e-4,-4.726422556842384e-5,-7.12166746585097e-9,-2.5162963986732293e-4,-4.731809415808857e-5,-7.132097650423624e-9,-2.514505510713131e-4,-4.742927313984141e-5,-7.1502341423829864e-9,-2.512190030433243e-4,-4.758501628393123e-5,-7.175103678264232e-9,-2.5091568236328035e-4,-4.7761815907209246e-5,-7.204305121348925e-9,-2.5053181294401e-4,-4.7926849500478765e-5,-7.233991717484305e-9,-2.500746237911642e-4,-4.804301276238442e-5,-7.259360514494356e-9,-2.495701519604955e-4,-4.8078046570921506e-5,-7.275783141609628e-9,-2.490601882212913e-4,-4.8015746621047336e-5,-7.280321967292176e-9,-2.4859206990471175e-4,-4.786450499113676e-5,-7.272987851368456e-9,-2.4820404096295365e-4,-4.7657974491023386e-5,-7.2570490683069305e-9,-2.479123719305355e-4,-4.744593983612639e-5,-7.238137844085153e-9,-2.477062542180496e-4,-4.7278801363755583e-5,-7.2225323219480234e-9,-2.475523859045091e-4,-4.719243023421515e-5,-7.2153509223338515e-9,-2.4740634073176207e-4,-4.7199163254914456e-5,-7.21928276128765e-9,-2.472256149075255e-4,-4.728689651818537e-5,-7.234113502680999e-9,-2.469800996566623e-4,-4.742481447800407e-5,-7.2570090226968695e-9,-2.4665781472638505e-4,-4.757279635380423e-5,-7.283374548153914e-9,-2.462655369996502e-4,-4.769151536169288e-5,-7.308038135183422e-9,-2.458251322065457e-4,-4.775085456159175e-5,-7.326465854721028e-9,-2.4536711100036463e-4,-4.77350886691006e-5,-7.3357152755733405e-9,-2.4492329122390537e-4,-4.764420066221715e-5,-7.334911212083219e-9,-2.4452039783219196e-4,-4.749169496663902e-5,-7.3251748443696005e-9,-2.441758732145271e-4,-4.7300134577938174e-5,-7.309112821670338e-9,-2.4389627170717684e-4,-4.7095968591426874e-5,-7.2900891206745445e-9,-2.4367780651202367e-4,-4.6904922721911e-5,-7.2715143086660904e-9,-2.4350820404063506e-4,-4.674862028056588e-5,-7.2563236900772534e-9,-2.4336901910568495e-4,-4.6642494199979074e-5,-7.246701350541432e-9,-2.4323787902715116e-4,-4.6594604978692496e-5,-7.243991435989502e-9,-2.4309057272598025e-4,-4.6604855006113405e-5,-7.248666445835073e-9,-2.4290326713360635e-4,-4.666429753503088e-5,-7.260234391154556e-9,-2.4265533867043101e-4,-4.67546250155109e-5,-7.2770527231963495e-9,-2.4233328045250883e-4,-4.684845105661854e-5,-7.29615811529741e-9,-2.4193563237893614e-4,-4.6911622727816726e-5,-7.313363425619466e-9,-2.4147769061437337e-4,-4.690904210391057e-5,-7.323911274472526e-9,-2.409931846698145e-4,-4.68145030450435e-5,-7.3237831866979765e-9,-2.405293638181594e-4,-4.6622304985804496e-5,-7.311327256640174e-9,-2.4013397134164407e-4,-4.6354911420302454e-5,-7.288398575368516e-9,-2.3983792521253927e-4,-4.606009583001144e-5,-7.260171753226957e-9,-2.396424964711392e-4,-4.579591722183568e-5,-7.233460507133913e-9,-2.3951876787466002e-4,-4.561007369104896e-5,-7.21434469153871e-9,-2.394196251219914e-4,-4.552433842374012e-5,-7.206304347525716e-9,-2.3929702425245816e-4,-4.553082614515197e-5,-7.209572961363757e-9,-2.3911604156302504e-4,-4.559902693265397e-5,-7.221607636814043e-9,-2.3886148969033618e-4,-4.56878141259867e-5,-7.238141334743658e-9,-2.385376124584638e-4,-4.57569458542221e-5,-7.25434375948497e-9,-2.381635151221613e-4,-4.5775227331894453e-5,-7.265844606590987e-9,-2.3776689984276165e-4,-4.57248113055291e-5,-7.26951760352044e-9,-2.3737775512568452e-4,-4.560224089873021e-5,-7.26396202658587e-9,-2.3702288262502963e-4,-4.541701560695537e-5,-7.249620171308552e-9,-2.3672182048234104e-4,-4.518837706556744e-5,-7.228512886555455e-9,-2.3648451210419064e-4,-4.494110071809932e-5,-7.203679129923876e-9,-2.3631073766417756e-4,-4.470112417759971e-5,-7.1784915077864556e-9,-2.3619104748406788e-4,-4.449166637344944e-5,-7.156032804897266e-9,-2.361087730659606e-4,-4.433028327220373e-5,-7.138674148007875e-9,-2.3604256281260482e-4,-4.422705852302139e-5,-7.1278965459513375e-9,-2.3596896071219697e-4,-4.41837594790764e-5,-7.124282211477298e-9,-2.358648734407393e-4,-4.419359846967748e-5,-7.127541904743606e-9,-2.3571005457793368e-4,-4.424139308519803e-5,-7.136477505700135e-9,-2.3548986076137152e-4,-4.4304182265018096e-5,-7.148875985336727e-9,-2.3519855436410849e-4,-4.435271161882365e-5,-7.16145714276836e-9,-2.348430390860336e-4,-4.4354724701945077e-5,-7.170110582162483e-9,-2.3444587375598763e-4,-4.428117792866847e-5,-7.170657306550671e-9,-2.3404509111068765e-4,-4.411557127942225e-5,-7.1601656476032516e-9,-2.3368771973065835e-4,-4.386412570504797e-5,-7.138447255205115e-9,-2.334157329157928e-4,-4.356117057573164e-5,-7.108920211252188e-9,-2.3324859251575434e-4,-4.326304457334257e-5,-7.077986722810363e-9,-2.3317225159038513e-4,-4.3029164658112595e-5,-7.0528241170588876e-9,-2.3314325821755143e-4,-4.289880884221161e-5,-7.038651316312173e-9,-2.3310674475310233e-4,-4.287707539508815e-5,-7.037006731343113e-9,-2.330173793949718e-4,-4.2937138101060195e-5,-7.045793591462278e-9,-2.3285221519255721e-4,-4.303448249497462e-5,-7.060613085178226e-9,-2.3261221161084732e-4,-4.312326355963217e-5,-7.076380098752534e-9,-2.3231616237874106e-4,-4.3167782922615494e-5,-7.0885642907420745e-9,-2.3199226213489643e-4,-4.3147504709399666e-5,-7.093925360427784e-9,-2.3167066135599025e-4,-4.305722178644823e-5,-7.090854405127532e-9,-2.3137815592412457e-4,-4.290464072813479e-5,-7.079431225173229e-9,-2.3113482317374794e-4,-4.2706990561187926e-5,-7.061239222047379e-9,-2.3095210624270325e-4,-4.248733394858226e-5,-7.0389514644621475e-9,-2.3083209319112942e-4,-4.22708356697799e-5,-7.0157556508521975e-9,-2.3076787058155768e-4,-4.208124244565444e-5,-6.994754152444318e-9,-2.3074481404720975e-4,-4.193779429781794e-5,-6.978475418029599e-9,-2.3074269629111773e-4,-4.185278131262165e-5,-6.9685812919441475e-9,-2.3073838954341724e-4,-4.183002690679065e-5,-6.9657828504140465e-9,-2.307087773182823e-4,-4.1864416184094224e-5,-6.969890191920407e-9,-2.3063358371772487e-4,-4.19423194920427e-5,-6.979881232260712e-9,-2.304980447362638e-4,-4.204276810737836e-5,-6.993919691136392e-9,-2.3029541532778425e-4,-4.2139396145542684e-5,-7.00935383163725e-9,-2.3002929420596648e-4,-4.220331442258605e-5,-7.022821179996584e-9,-2.297155277725766e-4,-4.220735882242904e-5,-7.0306406913778314e-9,-2.2938274641947577e-4,-4.2132214476566026e-5,-7.029632424365228e-9,-2.2906972807424893e-4,-4.197407643695822e-5,-7.018296801761733e-9,-2.2881761972917472e-4,-4.175160042946605e-5,-6.997961873684011e-9,-2.286567093282979e-4,-4.15075256296687e-5,-6.9732029722847966e-9,-2.2859182172845228e-4,-4.129977684881916e-5,-6.9508561159118375e-9,-2.2859518852719337e-4,-4.118158264999498e-5,-6.937623078004585e-9,-2.2861445669427582e-4,-4.1179317366699686e-5,-6.937368890191579e-9,-2.2859373178187907e-4,-4.128165726085842e-5,-6.949709434593278e-9,-2.2849535207625107e-4,-4.144683429672747e-5,-6.970641653126126e-9,-2.283102601143957e-4,-4.162180946726997e-5,-6.994513297007544e-9,-2.280546314648973e-4,-4.1760936140705576e-5,-7.015996457807604e-9,-2.2775905137933017e-4,-4.1836162324814815e-5,-7.0312662464705675e-9,-2.2745750303615093e-4,-4.183854159207291e-5,-7.038384862713035e-9,-2.2717978153226345e-4,-4.1774688473891304e-5,-7.037214328561364e-9,-2.269476550317656e-4,-4.166168283592476e-5,-7.029107904443636e-9,-2.2677360769187676e-4,-4.152239765949198e-5,-7.016489998134974e-9,-2.2666086428735168e-4,-4.13817553708349e-5,-7.002360297324509e-9,-2.2660400530891817e-4,-4.126365474609324e-5,-6.989766583218536e-9,-2.2659004542151717e-4,-4.1188304668478054e-5,-6.981333927974789e-9,-2.266000219235072e-4,-4.116989011754661e-5,-6.978931288333946e-9,-2.266111881676761e-4,-4.12146495166316e-5,-6.9835033237536505e-9,-2.2659985001449061e-4,-4.131967774449151e-5,-6.9950455254666655e-9,-2.2654460748588225e-4,-4.147283960401956e-5,-7.012666563520272e-9,-2.264295628693442e-4,-4.165394006870694e-5,-7.034672741319516e-9,-2.2624709886908756e-4,-4.183709352380845e-5,-7.058654437906543e-9,-2.259998866238783e-4,-4.1994173550205136e-5,-7.081632424729571e-9,-2.2570180047419192e-4,-4.20991362790095e-5,-7.100361989265034e-9,-2.2537742095192945e-4,-4.213298776272619e-5,-7.111886301353217e-9,-2.2505959382885995e-4,-4.208912506154797e-5,-7.114348718520941e-9,-2.2478421898691062e-4,-4.197821401236689e-5,-7.107904138739319e-9,-2.2458174592226204e-4,-4.1830607186345735e-5,-7.0953504217620375e-9,-2.244663606137209e-4,-4.169327376221295e-5,-7.081979987657558e-9,-2.2442665203386655e-4,-4.1618683723854355e-5,-7.074284006802257e-9,-2.2442408061700852e-4,-4.1646821969372816e-5,-7.077692877238242e-9,-2.2440397415766895e-4,-4.178786877968106e-5,-7.0943342038050634e-9,-2.2431615173148974e-4,-4.201628734466668e-5,-7.122132208245681e-9,-2.2413418489370047e-4,-4.2281316841771065e-5,-7.155838491573877e-9,-2.238625036955378e-4,-4.252762716447894e-5,-7.189267752364687e-9,-2.2352958981585374e-4,-4.271389191467571e-5,-7.217364886846549e-9,-2.231742512295794e-4,-4.2821232086966055e-5,-7.2372470959088515e-9,-2.2283320562756947e-4,-4.285179730744506e-5,-7.2482661351785805e-9,-2.2253387205703278e-4,-4.282232746248896e-5,-7.2515555960049095e-9,-2.2229206566917885e-4,-4.275713751688142e-5,-7.2494356512215224e-9,-2.2211260756237194e-4,-4.2682685880708425e-5,-7.244838453971768e-9,-2.2199099538278396e-4,-4.262399641811782e-5,-7.240796077498677e-9,-2.2191514949620428e-4,-4.260230497054901e-5,-7.240011891369483e-9,-2.2186707232957353e-4,-4.26332616889838e-5,-7.244543832697758e-9,-2.2182464125580366e-4,-4.2725338241283515e-5,-7.255615619695993e-9,-2.217638453501513e-4,-4.287842690194515e-5,-7.273534478793906e-9,-2.2166170729793913e-4,-4.308298693357485e-5,-7.2976765517466445e-9,-2.2149980429336165e-4,-4.332033803452491e-5,-7.326522432477613e-9,-2.2126785688274673e-4,-4.3564584276414805e-5,-7.357751075488498e-9,-2.20966584781167e-4,-4.3786290015324124e-5,-7.388436436288333e-9,-2.2060898292754956e-4,-4.395759483340187e-5,-7.415404439706891e-9,-2.202193504707468e-4,-4.405796910551689e-5,-7.435775583366592e-9,-2.1982983813928416e-4,-4.407947682940211e-5,-7.4476444040565705e-9,-2.1947474914701923e-4,-4.403040203489803e-5,-7.450766846569757e-9,-2.1918316392070605e-4,-4.393615767618415e-5,-7.447040423172644e-9,-2.1897091886597989e-4,-4.3836355658260945e-5,-7.440501159279104e-9,-2.188338255077648e-4,-4.3777167322247025e-5,-7.4366017543605706e-9,-2.187450180632313e-4,-4.379926707359548e-5,-7.440747299185002e-9,-2.1865951766138927e-4,-4.3924079338995526e-5,-7.456451577868975e-9,-2.1852701523895825e-4,-4.414394644131482e-5,-7.48388495394003e-9,-2.1830915181893224e-4,-4.442241000664643e-5,-7.51964660486929e-9,-2.1799327092026865e-4,-4.47064341649404e-5,-7.558021886353412e-9,-2.1759542948186208e-4,-4.4945093539923776e-5,-7.593080121112747e-9,-2.1715190572061313e-4,-4.510525927973701e-5,-7.62051102463403e-9,-2.1670511352975532e-4,-4.5177775919498044e-5,-7.63846614779529e-9,-2.1629130702600425e-4,-4.5174263035486545e-5,-7.647414111500688e-9,-2.1593400226015044e-4,-4.511913434864514e-5,-7.649461867526958e-9,-2.1564283671687278e-4,-4.504151932089862e-5,-7.647573809127245e-9,-2.1541555700511315e-4,-4.496945565191675e-5,-7.644907915657562e-9,-2.152409460728591e-4,-4.4926547873120016E-05,-7.644326527091175e-9,-2.1510150205944102e-4,-4.493027145003056e-5,-7.648080390942638e-9,-2.1497560662559327e-4,-4.499101379307958e-5,-7.65764086825275e-9,-2.1483945926710325e-4,-4.511125926355644e-5,-7.673632641449619e-9,-2.1466926637521481e-4,-4.528477274004901e-5,-7.695803268049495e-9,-2.144441173207301e-4,-4.549613641988964e-5,-7.722992976764426e-9,-2.1414962209211983e-4,-4.572138551931352e-5,-7.753133503949428e-9,-2.137817825713578e-4,-4.5930557875204e-5,-7.783365806364265e-9,-2.1334992695909555e-4,-4.609259275443571e-5,-7.810385927253544e-9,-2.1287718132165904e-4,-4.6182138061975344e-5,-7.831058043246478e-9,-2.123972901802133e-4,-4.618667111745394e-5,-7.843194529569795e-9,-2.1194776550871445e-4,-4.611156504767954e-5,-7.846275859882824e-9,-2.1156084382754122e-4,-4.598097245517623e-5,-7.841849026160612e-9,-2.1125475027746477e-4,-4.5833615902049135e-5,-7.833415837621815e-9,-2.1102786191385352e-4,-4.57141563789811e-5,-7.825754714870187e-9,-2.1085766176323766e-4,-4.5662121102797614e-5,-7.823773717687805e-9,-2.1070526783781765e-4,-4.570112440445812e-5,-7.831148800367581e-9,-2.1052503260910168e-4,-4.5831388471697066e-5,-7.84914193292144e-9,-2.1027715631769618e-4,-4.602835716858338e-5,-7.876058836978009e-9,-2.0993957436240816e-4,-4.6248926026246374e-5,-7.90766713758257e-9,-2.095146194759454e-4,-4.644402823389973e-5,-7.938509723459188e-9,-2.0902749841148404e-4,-4.6573103373786205e-5,-7.963593692431587e-9,-2.085173003005473e-4,-4.6614726939852604e-5,-7.979751223426029e-9,-2.080247685004384e-4,-4.656971988276465e-5,-7.986202202748241e-9,-2.0758195037667867e-4,-4.645702153575651e-5,-7.984303236040702e-9,-2.0720680107128868e-4,-4.630568678322192e-5,-7.976805592462343e-9,-2.069027746736158e-4,-4.6146864470554793E-05,-7.967006829227965e-9,-2.0666149949068237e-4,-4.6008053738656595e-5,-7.958051544835984e-9,-2.0646643337144435e-4,-4.591001322147901e-5,-7.952478950941206e-9,-2.0629619473845173e-4,-4.586558575032321e-5,-7.952010523962518e-9,-2.0612715730170046e-4,-4.587946155808738e-5,-7.957511462395227e-9,-2.0593551752786214e-4,-4.594814009737746e-5,-7.969025447952002e-9,-2.0569936999224403e-4,-4.6059814191126656e-5,-7.985789917193825e-9,-2.054013396767555e-4,-4.619444426954505e-5,-8.006201300389058e-9,-2.0503200586908336e-4,-4.632476440606799e-5,-8.027795774410303e-9,-2.0459370977526643e-4,-4.6419232557928356e-5,-8.04739911864323e-9,-2.0410341514187733e-4,-4.644771828424737e-5,-8.061606874456355e-9,-2.0359249297940358e-4,-4.6389591386022976e-5,-8.06761967917358e-9,-2.0310152417526018e-4,-4.6241943470151586e-5,-8.064208675557398e-9,-2.026701314330422e-4,-4.602412220191169e-5,-8.05238930586289e-9,-2.0232482212882342e-4,-4.5775201703916056e-5,-8.035415203185357e-9,-2.0206981769589567e-4,-4.5543952383211005e-5,-8.017995799141722e-9,-2.0188503857131567e-4,-4.5374719563007136e-5,-8.005002937932091e-9,-2.0173208974531864e-4,-4.5294685661682146e-5,-8.000132839061242e-9,-2.0156558865288865e-4,-4.530694102432007e-5,-8.004940251523124e-9,-2.0134563404935994e-4,-4.5390862347908655e-5,-8.018476540387911e-9,-2.010477628284383e-4,-4.5508700213428396e-5,-8.037583629336856e-9,-2.0066816008643582e-4,-4.56159424839469e-5,-8.05775420557668e-9,-2.002233040454102e-4,-4.5672547498502866e-5,-8.074324603901956e-9,-1.9974456130923202e-4,-4.5652156194690424e-5,-8.083656540042794e-9,-1.992695170896543e-4,-4.554701856445397e-5,-8.083957366931921e-9,-1.9883270591920156e-4,-4.5367698049175715e-5,-8.075522287619769e-9,-1.9845841745310465e-4,-4.513832170771045e-5,-8.060398815725766e-9,-1.981572124953109e-4,-4.488951139782889e-5,-8.041672208553757e-9,-1.9792619199168255e-4,-4.46514605035761e-5,-8.022654713173082e-9,-1.97751818665741e-4,-4.444885607769098e-5,-8.006221420156825e-9,-1.9761372928278598e-4,-4.429815409582809e-5,-7.994418534127477e-9,-1.9748834183331958e-4,-4.4206787770554826e-5,-7.988349103172298e-9,-1.9735172150645567e-4,-4.417347840913245e-5,-7.988243219864344e-9,-1.9718177685405577e-4,-4.4188897515318655e-5,-7.993577576316224e-9,-1.969602185929472e-4,-4.423633228093872e-5,-8.003137811219496e-9,-1.96674791367231e-4,-4.429249144944042e-5,-8.01500158984719e-9,-1.9632209229852586e-4,-4.43290434847933e-5,-8.026530943997656e-9,-1.9591072087203853e-4,-4.4315855466975366e-5,-8.03455558004738e-9,-1.9546352222861362e-4,-4.422685189198833e-5,-8.035926730100295e-9,-1.9501665604001342e-4,-4.404835137258371e-5,-8.028456381532183e-9,-1.9461311284592976e-4,-4.3787482447394696e-5,-8.011956426634773e-9,-1.9429036612252486e-4,-4.3475903590539156e-5,-7.988819905738023e-9,-1.9406609579109184e-4,-4.31641133352837e-5,-7.963631507898714e-9,-1.939293801808378e-4,-4.290607476846081e-5,-7.941776010191559e-9,-1.9384326424020214e-4,-4.274050836180446e-5,-7.927647618378034e-9,-1.9375801371840964e-4,-4.267820492195053e-5,-7.923311832665135e-9,-1.9362806935360174e-4,-4.270088509049269e-5,-7.928124868965717e-9,-1.934249241067107e-4,-4.277008015595093e-5,-7.93923136862352e-9,-1.931422172148227e-4,-4.284026359050476e-5,-7.952533831849908e-9,-1.9279378906395382e-4,-4.287086605432226e-5,-7.963753390058145e-9,-1.9240746774724533e-4,-4.283438753175265e-5,-7.96935681810304e-9,-1.9201729184363728e-4,-4.272004332166115e-5,-7.967224995384466e-9,-1.9165604145344355e-4,-4.253352928312996e-5,-7.956980058119363e-9,-1.9134921912310286e-4,-4.229384282667856e-5,-7.939923003820991e-9,-1.9111121492372828e-4,-4.202818834980984e-5,-7.91860535841166e-9,-1.9094402083634387e-4,-4.176615800307559e-5,-7.896162848299419e-9,-1.9083831639714896e-4,-4.1534410208336746e-5,-7.87561120850624e-9,-1.9077625422079947e-4,-4.1352743879738196e-5,-7.859295143438076e-9,-1.9073505303328413e-4,-4.123196142628293e-5,-7.848605195695082e-9,-1.9069054410135802e-4,-4.1173414159399545e-5,-7.843964753064974e-9,-1.906201224278099e-4,-4.116971136664543e-5,-7.844982280018888e-9,-1.905050256123524e-4,-4.1205978856558556e-5,-7.850625899117948e-9,-1.9033218543530693e-4,-4.126132493487268e-5,-7.859318656901609e-9,-1.9009597946679268e-4,-4.131052250053904e-5,-7.868951080561997e-9,-1.8980014139863044e-4,-4.1326260782891054e-5,-7.876912836277283e-9,-1.8945967012305145e-4,-4.128269700216912e-5,-7.880323549005257e-9,-1.8910169760086778e-4,-4.116102678475968e-5,-7.876614821307504e-9,-0.00018876338867391296,-4.0956863108143176e-5,-7.864445949430287e-9,-1.884847853602136e-4,-4.0687258733253435e-5,-7.844654109638144e-9,-1.8829616966925856e-4,-4.039278804799636e-5,-7.820672655457958e-9,-1.88203845813791e-4,-4.012954778719805e-5,-7.797856014628003e-9,-1.8818277508791647e-4,-3.995054240701812e-5,-7.781684520999545e-9,-1.881832875362198e-4,-3.988448188439229e-5,-7.77566376533795e-9,-1.8815018874959586e-4,-3.992443525486756e-5,-7.780096416824334e-9,-1.880434791354815e-4,-4.003285000490112e-5,-7.792321866458137e-9,-1.8784973035415947e-4,-4.015822215563545e-5,-7.808013539986401e-9,-1.8758115050261835e-4,-4.025292234742e-5,-7.822655543413694e-9,-1.872668184883031e-4,-4.02846843903453e-5,-7.832609350063291e-9,-1.869421745375567e-4,-4.024036343886389e-5,-7.835668960723405e-9,-1.866405011096358e-4,-4.012421563344865e-5,-7.831233109466725e-9,-1.8638746606769327e-4,-3.9953517066443375e-5,-7.820209997762073e-9,-1.8619833336478678e-4,-3.9753447846682424E-05,-7.804705559277455e-9,-1.8607713456172942e-4,-3.955211791223761e-5,-7.787528077260694e-9,-1.8601733956143633e-4,-3.937609305312275e-5,-7.771594675631029e-9,-1.8600372362801028e-4,-3.924671808006975e-5,-7.759377516311174e-9,-1.860151033940145e-4,-3.9177490549839045e-5,-7.752521038826082e-9,-1.86027579535179e-4,-3.917265795237302e-5,-7.751697825195558e-9,-1.8601784500762417e-4,-3.922712275877602e-5,-7.756683939980297e-9,-1.859660991240961e-4,-3.932748873083235e-5,-7.76655338904938e-9,-1.858583415306685e-4,-3.945386020008228e-5,-7.779863803220138e-9,-1.856880765199331e-4,-3.9582104032858643e-5,-7.794764745634513e-9,-1.8545751111847034e-4,-3.968648336286518e-5,-7.80905273811186e-9,-1.8517832726768282e-4,-3.974272194646584e-5,-7.820277095975539e-9,-1.8487191715710737e-4,-3.973182286832981e-5,-7.826043324454552e-9,-1.84568326062585e-4,-3.964498003485806e-5,-7.824607063924266e-9,-1.8430252736954805e-4,-3.948909619720772e-5,-7.81567723225054e-9,-1.841068015813026e-4,-3.9290916557531185e-5,-7.801120265142914e-9,-1.8399941650295114e-4,-3.9096168023688346e-5,-7.785080204503404e-9,-1.8397315757144196e-4,-3.8959732030985414e-5,-7.773061430941858e-9,-1.8399121969710352e-4,-3.892667494260442e-5,-7.769999153806498e-9,-1.8399720413110593e-4,-3.9012062532908605e-5,-7.778165646339316e-9,-1.8393709799280938e-4,-3.919247414624714e-5,-7.796192327999907e-9,-1.837809253347292e-4,-3.94159913142451e-5,-7.81983562463752e-9,-1.835314504140859e-4,-3.9624174692404916e-5,-7.843866044999501e-9,-1.832175926465497e-4,-3.9772376929694886e-5,-7.863852973816922e-9,-0.00018288007799367867,-3.983939802399363e-5,-7.877101234873762e-9,-1.825581525567214e-4,-3.9826609012344015e-5,-7.88278698428171e-9,-1.8228153953364634e-4,-3.975151493070294e-5,-7.881673076367993e-9,-1.8206747389102235e-4,-3.96403257759107e-5,-7.87567869457065e-9,-1.8192093438847728e-4,-3.952183195728649e-5,-7.867403264403688e-9,-1.818363144226791e-4,-3.94230088792691e-5,-7.859627774104685e-9,-1.8179960057993597e-4,-3.9365938879669173e-5,-7.854836651382487e-9,-1.817908037429815e-4,-3.9365650403408574e-5,-7.85483970570868e-9,-1.817866154295425e-4,-3.9428705477013426e-5,-7.860566324909944e-9,-1.81763290141203e-4,-3.955254076382139e-5,-7.872043997922005e-9,-1.8169966125836646e-4,-3.9725745338659054e-5,-7.888521312020506e-9,-1.8157997375724025e-4,-3.992943179925509e-5,-7.908654800013727e-9,-1.8139615201193202e-4,-4.01395859443014e-5,-7.930677800847704e-9,-1.8114926843234067e-4,-4.0330149429537525e-5,-7.952524911278175e-9,-1.808500494869329e-4,-4.047662276442048e-5,-7.971962158343955e-9,-1.8051827933978514e-4,-4.055992560857808e-5,-7.986810256067089e-9,-1.8018101316444614e-4,-4.0570277674346596e-5,-7.995336625795394e-9,-1.7986930754112723e-4,-4.0510916503467394e-5,-7.996822725172099e-9,-1.796128754203871e-4,-4.0400967753350356e-5,-7.992167447243349e-9,-1.7943243126465743e-4,-4.027577035424067e-5,-7.984224841668468e-9,-1.793308527151646e-4,-4.0182267013651894e-5,-7.97751603843064e-9,-1.7928650189256697e-4,-4.016762654034507e-5,-7.977085620844553e-9,-1.7925412028238575e-4,-4.026237728195528e-5,-7.986681974367066e-9,-1.791774416147169e-4,-4.046502137035069e-5,-8.007050548514257e-9,-1.79010578141659e-4,-4.07384889308924e-5,-8.03541534862946e-9,-1.7873692411944845e-4,-4.102346717380981e-5,-8.066621496285543e-9,-1.783741420058078e-4,-4.1261830836882335e-5,-8.095249938080533e-9,-1.7796361074475225e-4,-4.1416463164230464e-5,-8.117421582789139e-9,-1.7755290410782594e-4,-4.1478368578888085e-5,-8.131520449449486e-9,-1.7718135033389617e-4,-4.146198733197798e-5,-8.13797055610707e-9,-1.768730990346715e-4,-4.139529321745453e-5,-8.138602365296292e-9,-1.766365818208645e-4,-4.131042648440153e-5,-8.135996394797593e-9,-1.7646729539195152e-4,-4.123728457209718e-5,-8.132931548149722e-9,-1.7635140912427015e-4,-4.119998363428822e-5,-8.131940782911007e-9,-1.7626901592075078e-4,-4.1215139264067615e-5,-8.13497319552361e-9,-1.7619688175239353e-4,-4.129104627639256e-5,-8.143187102834443e-9,-1.7611095329391106e-4,-4.142731358893801e-5,-8.156888519239014e-9,-1.7598889716912629e-4,-4.1614887437690714e-5,-8.17558928584182e-9,-1.7581281192462515e-4,-4.183670829192403e-5,-8.198133122013413e-9,-1.7557194116890116e-4,-4.206939570725801e-5,-8.222846596370708e-9,-1.7526489185315834e-4,-4.2286145337228534e-5,-8.247693685378518e-9,-1.749007892130791e-4,-4.246067239676419e-5,-8.27045287578726e-9,-1.7449889291473196e-4,-4.257177890837406e-5,-8.288966601271894e-9,-1.7408636134491067e-4,-4.260785569445014e-5,-8.301502622549816e-9,-1.7369417612683185e-4,-4.257044116629862e-5,-8.307207425135431e-9,-1.733515749373912e-4,-4.247603925671317e-5,-8.306560538240727e-9,-1.7307951561946385e-4,-4.235546258407321e-5,-8.301660768772593e-9,-1.7288404300892215e-4,-4.224980670333177e-5,-8.296116391034056e-9,-1.7275126742316764e-4,-4.220232082429011e-5,-8.29435675977847e-9,-1.7264662508130276e-4,-4.2246603872407674e-5,-8.300377709365537e-9,-1.7252121501086634e-4,-4.239390927424923e-5,-8.316260399484159e-9,-1.723259194563172e-4,-4.262512746453453e-5,-8.341125038747223e-9,-1.7202921853819408e-4,-4.289359303196469e-5,-8.371205255110296e-9,-1.7163005621497463e-4,-4.314027956941037e-5,-8.401196120311941e-9,-1.7115808212438073e-4,-4.3314891182245837e-5,-8.426208336859534e-9,-1.706611339045414e-4,-4.3391899781138715e-5,-8.4432830383759e-9,-1.701876762651756e-4,-4.3374419715413495e-5,-8.4518562411058e-9,-1.6977323193821857e-4,-4.328714577136297e-5,-8.4533209117178e-9,-1.6943492968409378e-4,-4.316484300779904e-5,-8.450215049832509e-9,-1.691728141266524e-4,-4.304229490465962e-5,-8.445454567334958e-9,-1.689743734967421e-4,-4.294814563749508e-5,-8.441762371783732e-9,-1.6881942342299218e-4,-4.2902261156559144e-5,-8.441296223429344e-9,-1.6868404487941965e-4,-4.291519214458628e-5,-8.445444774098598e-9,-1.6854347563705814e-4,-4.2988495594045744e-5,-8.454766529152133e-9,-1.6837439851704656e-4,-4.3115257163194266e-5,-8.469036389597806e-9,-1.681571293442517e-4,-4.3280710287122344e-5,-8.487346444855007e-9,-1.6787800682957013e-4,-4.3463272785180736e-5,-8.508217625345404e-9,-1.675319055511752e-4,-4.363653952219832e-5,-8.529718093993882e-9,-1.6712433065999726e-4,-4.3772654109465174e-5,-8.549625270960761e-9,-1.6667221550076703e-4,-4.3847053130506195e-5,-8.565688893545171e-9,-1.6620251090174813e-4,-4.384394863589244e-5,-8.576022891083493e-9,-1.6574805161057994e-4,-4.3761243185843136e-5,-8.57958137502147e-9,-1.653410166729793e-4,-4.361321227414499e-5,-8.57659196538238e-9,-1.6500526069332353e-4,-4.3429595920686075e-5,-8.568780938240553e-9,-1.6474941938175833e-4,-4.325061380526027e-5,-8.559242374508827e-9,-1.6456278474184848e-4,-4.311845658282386e-5,-8.551872091484495e-9,-1.6441558827007797e-4,-4.306679435913246e-5,-8.55041163875152e-9,-1.6426459590353389e-4,-4.31107428021797e-5,-8.55731514316368e-9,-1.6406370565747632e-4,-4.324040567689213e-5,-8.572814975918328e-9,-1.6377738091422734e-4,-4.3421136814201817e-5,-8.594619277300757e-9,-1.6339259528422065e-4,-4.360218549923664e-5,-8.618509053213847e-9,-1.6292403742707357e-4,-4.3731933663244515e-5,-8.639692356752142e-9,-1.6240945516230828e-4,-4.3773994492029846e-5,-8.654343911008955e-9,-1.618968607756375e-4,-4.371721460881521e-5,-8.660647603934844e-9,-1.614295836691662e-4,-4.357579691594396e-5,-8.658990171403235e-9,-1.6103554540079272e-4,-4.338116258064244e-5,-8.65143750147207e-9,-1.6072371734170566e-4,-4.317072694826411e-5,-8.640899300411265e-9,-1.60486597377181e-4,-4.2978486922922624e-5,-8.630346264051817e-9,-1.6030553083480994e-4,-4.28295955015562e-5,-8.622255741822829e-9,-1.6015613527411944e-4,-4.2738546072660895e-5,-8.618310231123223e-9,-1.6001252941236853e-4,-4.270953342717434e-5,-8.619310983523769e-9,-1.5985023392522713e-4,-4.27376696865566e-5,-8.62524258194941e-9,-1.5964820616548375e-4,-4.281026269130828e-5,-8.635407427994393e-9,-1.5939063606626693e-4,-4.290797545834162e-5,-8.648555381100611e-9,-1.5906893911632526e-4,-4.300622619989431e-5,-8.662980381924239e-9,-1.586839320425307e-4,-4.307745905419132e-5,-8.6766176574788e-9,-1.5824763893893554e-4,-4.309485149551601e-5,-8.687224944489166e-9,-1.577836553301402e-4,-4.303761508032331e-5,-8.692728743322592e-9,-1.5732473003351639e-4,-4.2897150815443866e-5,-8.691735505534104e-9,-1.5690673041701025e-4,-4.2682099455994495e-5,-8.684069583127032e-9,-1.5655967783061677e-4,-4.241963218334136e-5,-8.671100768675983e-9,-1.5629842252569848e-4,-4.215106331379977e-5,-8.65564776892293e-9,-1.5611654367897435e-4,-4.1922027222526855e-5,-8.641393519477788e-9,-1.5598634365727104e-4,-4.1769990723229766e-5,-8.631943434242865e-9,-1.558655337576891e-4,-4.171332468953909e-5,-8.62980875112357e-9,-1.55708599326998e-4,-4.1745676230751626e-5,-8.635639653747643e-9,-1.5547926756793228e-4,-4.183738871643539e-5,-8.64796410233513e-9,-1.5516040876164026e-4,-4.194344529267842e-5,-8.663544317198107e-9,-1.5475857077794318e-4,-4.2015642345345564e-5,-8.678275332417251e-9,-1.5430178219828054e-4,-4.2015487508945786e-5,-8.688346657903147e-9,-1.538312653883322e-4,-4.1923888974596855e-5,-8.691272266061803e-9,-1.5338985144061818e-4,-4.174464729428951e-5,-8.686443715723425e-9,-1.5301108912570144e-4,-4.150107912857046e-5,-8.675074640975934e-9,-1.5271247020407983e-4,-4.1227745509928506e-5,-8.659650972450587e-9,-1.5249412865362623e-4,-4.096082102643691e-5,-8.643154944543995e-9,-1.5234202142190386e-4,-4.0730361657362306e-5,-8.628341074666747e-9,-1.522332666590427e-4,-4.0556036818412694e-5,-8.617240877586801e-9,-1.5214146355814283e-4,-4.044607832465574e-5,-8.610948820189256e-9,-1.5204082770238207e-4,-4.0398276306418136e-5,-8.609649713449356e-9,-1.5190894966737008e-4,-4.040182404940597e-5,-8.612791693953891e-9,-1.5172855998777816e-4,-4.04392073340307e-5,-8.619289651721801e-9,-1.5148890221367985e-4,-4.048788673301634e-5,-8.627671304566296e-9,-1.511871960678653e-4,-4.052207249406931e-5,-8.636154913727928e-9,-1.5083025434630082e-4,-4.051521495503619e-5,-8.642725787473477e-9,-1.5043574158394175e-4,-4.044383852156764e-5,-8.645327734018624e-9,-1.500319353466808e-4,-4.029297377626192e-5,-8.642261093560134e-9,-1.496544166579292e-4,-4.006242686937451e-5,-8.632759521112276e-9,-1.4933857066749907e-4,-3.9771500609913104e-5,-8.61753525645397e-9,-1.4910878327908136e-4,-3.9458613965874134e-5,-8.598961074703302e-9,-1.4896817540041468e-4,-3.9173255620837376e-5,-8.580634729706417e-9,-1.4889434793359147e-4,-3.896143953895252e-5,-8.566369717397555e-9,-1.488446779231985e-4,-3.885027635490195e-5,-8.558992598500318e-9,-1.4876971971684565e-4,-3.883878985692342e-5,-8.559461170923111e-9,-1.4862882605840358e-4,-3.889897430693147e-5,-8.566637964807312e-9,-1.484015496846831e-4,-3.8985699273179814e-5,-8.577719545041904e-9,-1.4809146958670756e-4,-3.9050500471712874e-5,-8.589075917670951e-9,-1.4772283139077166e-4,-3.90541832810773e-5,-8.597200861671296e-9,-1.4733252302452735e-4,-3.8975093804996464e-5,-8.599531021666814e-9,-1.46960319709348e-4,-3.8811988524448995e-5,-8.594969943036304e-9,-1.4663989849332713e-4,-3.8581911562734315e-5,-8.58402541962936e-9,-1.4639243737691714e-4,-3.831439622032589e-5,-8.568556760394407e-9,-1.4622381432699978e-4,-3.8043832331238845e-5,-8.551221326080342e-9,-1.4612546696149864e-4,-3.780203085357788e-5,-8.534793996272362e-9,-1.4607800835754142e-4,-3.761267871861787e-5,-8.521560570514165e-9,-1.46056126596556e-4,-3.748848840769632e-5,-8.512936995642796e-9,-1.4603336462438332e-4,-3.743087337648366e-5,-8.509368863912567e-9,-1.4598588657925202e-4,-3.743138625583485e-5,-8.510465027645555e-9,-1.4589496353338089e-4,-3.747399290628529e-5,-8.515247763091069e-9,-1.4574843347403674e-4,-3.753744263121957e-5,-8.522385868843517e-9,-1.4554162934537264e-4,-3.759745129656199e-5,-8.530332304446479e-9,-1.4527818133022795e-4,-3.7628889350479104e-5,-8.537375532161534e-9,-1.4497079464529807e-4,-3.76084521534279e-5,-8.541699439939246e-9,-1.446416124057033e-4,-3.751836753687077e-5,-8.541581339326527e-9,-1.4432111704455668e-4,-3.7351398285757994e-5,-8.535812444372269e-9,-1.4404404714688575e-4,-3.711638518574359e-5,-8.524282605408122e-9,-1.438412079624837e-4,-3.684187866182322e-5,-8.508477097627533e-9,-1.4372811461076546e-4,-3.657397293866363e-5,-8.491503673689153e-9,-1.436949746655447e-4,-3.636532952138359e-5,-8.477371791217123e-9,-1.437049148338037e-4,-3.625715011489158e-5,-8.469647157873269e-9,-1.4370460041685984e-4,-3.626225419817731e-5,-8.470096677118393e-9,-1.436435657655829e-4,-3.6359182629031623e-5,-8.478059693349249e-9,-1.4349217679652826e-4,-3.650097828056397e-5,-8.49083875172551e-9,-1.4324944734727836e-4,-3.663301747612782e-5,-8.50476357027434e-9,-1.4293924274250757e-4,-3.6710244446883646e-5,-8.516318183217591e-9,-1.42599606440927e-4,-3.670734481993864e-5,-8.522934387042323e-9,-1.4227107692698355e-4,-3.66208983276144e-5,-8.523380609554418e-9,-1.4198762087161575e-4,-3.646586091026803e-5,-8.517827359725516e-9,-1.4177127123896665e-4,-3.626931158012475e-5,-8.507668428407443e-9,-1.4163010445375599e-4,-3.606360234221836e-5,-8.495144285064709e-9,-1.4155881398565556e-4,-3.588006957388633e-5,-8.482821921176052e-9,-1.4154122929864088e-4,-3.574396664003745e-5,-8.473039059830415e-9,-1.4155410250967632e-4,-3.5671120527783085e-5,-8.467454781925923e-9,-1.4157137341078065e-4,-3.5666522461359366e-5,-8.46681890030178e-9,-1.4156819516112225e-4,-3.572468450852716e-5,-8.4709875707388e-9,-1.4152418460917606e-4,-3.58313730753767e-5,-8.47912807725831e-9,-1.4142558873947818e-4,-3.59661705458511e-5,-8.489992557926502e-9,-1.412664184643966e-4,-3.6105261696455e-5,-8.502137383045136e-9,-1.4104888166358994e-4,-3.6224110895191465e-5,-8.514032189748423e-9,-1.4078340386514088e-4,-3.630008132933925e-5,-8.524097794432883e-9,-1.4048831120426743e-4,-3.6315244359799485e-5,-8.530777751256682e-9,-1.4018893987105985e-4,-3.6259700669489686e-5,-8.532761075544734e-9,-1.399154045802046e-4,-3.613554770648095e-5,-8.529406358796928e-9,-1.396978493880879e-4,-3.5960758369385744e-5,-8.5212719609298e-9,-1.395584274220083e-4,-3.5770777754258144e-5,-8.510484614118273e-9,-1.395010799090941e-4,-3.5614419533547606e-5,-8.500584815712752e-9,-1.3950347955379841e-4,-3.554134224026499e-5,-8.495600252331792e-9,-1.395181326667312e-4,-3.5583057711782186e-5,-8.49852886633527e-9,-1.3948692048425989e-4,-3.573661667274257e-5,-8.509976577861838e-9,-1.3936409233349114e-4,-3.596248146847602e-5,-8.52783178092342e-9,-1.3913464178440764e-4,-3.6200002121230084e-5,-8.548219699136488e-9,-1.3881747770678196e-4,-3.6391341144876804e-5,-8.567072309384218e-9,-1.384540237025143e-4,-3.650005380239695e-5,-8.581375137160207e-9,-1.380914704582618e-4,-3.6517145395985524e-5,-8.589669620504838e-9,-1.3776939627770373e-4,-3.645667302158028e-5,-8.591982763540148e-9,-1.375129529417687e-4,-3.634680402050186e-5,-8.589508759325445e-9,-1.373315794560991e-4,-3.622095854655851e-5,-8.584220023840957e-9,-1.3722091216789167e-4,-3.61110737959683e-5,-8.578448656336925e-9,-1.3716598999432205e-4,-3.6043161150447865e-5,-8.574449379800085e-9,-1.37144819913883e-4,-3.6034601772228566e-5,-8.573995788120039e-9,-1.3713202193536196e-4,-3.60927847497726e-5,-8.578098184526851e-9,-1.3710237308793484e-4,-3.621495858814332e-5,-8.586914569799196e-9,-1.3703402980724396e-4,-3.6389181641333254e-5,-8.5998516774355e-9,-1.36911205202354e-4,-3.65962542961265e-5,-8.615789199981454e-9,-1.3672602214730465e-4,-3.68124573584491e-5,-8.633327431858329e-9,-1.36479349089764e-4,-3.701271677512592e-5,-8.650970819822634e-9,-1.3618068653054776e-4,-3.717379627140313e-5,-8.667222550115315e-9,-1.358472662707308e-4,-3.7277344343605105e-5,-8.680647089426607e-9,-1.3550242612119607e-4,-3.731274903926245e-5,-8.68999424871703e-9,-1.3517320152061808e-4,-3.727978006702851e-5,-8.694459140313209e-9,-1.3488680793789882e-4,-3.719092897384664e-5,-8.694073713436727e-9,-1.3466544021457864e-4,-3.707279073129639e-5,-8.69010051987593e-9,-1.3451925275556113e-4,-3.696481485133304e-5,-8.685177236944263e-9,-1.344388658671642e-4,-3.69131046298267e-5,-8.682934876706395e-9,-1.3439108416693466e-4,-3.695778715724225e-5,-8.68695839392729e-9,-1.3432331140892352e-4,-3.7116200157038535e-5,-8.699334814541392e-9,-1.3417981211901297e-4,-3.737010340084863e-5,-8.71951455375979e-9,-1.339246580951755e-4,-3.7667420214442775e-5,-8.744316749020727e-9,-1.3355816900488716e-4,-3.7941435370631326e-5,-8.769244026211392e-9,-1.3311593340372153e-4,-3.813725721253883e-5,-8.79029609068621e-9,-1.3265197371800877e-4,-3.8229929052285945e-5,-8.80518898519348e-9,-1.3221793913426716e-4,-3.822643977336777e-5,-8.813555366407018e-9,-1.318492290963614e-4,-3.8155740932226004e-5,-8.816480101901048e-9,-1.3156091565529496e-4,-3.8055615871408505e-5,-8.815891247203971e-9,-1.3135036452187486e-4,-3.796239043644523e-5,-8.814051427765528e-9,-1.31202438800492e-4,-3.7905049072083586e-5,-8.813160873514698e-9,-1.3109463784149872e-4,-3.79028210263575e-5,-8.81503385420893e-9,-1.3100122611687848e-4,-3.796469387651649e-5,-8.820852830416448e-9,-1.3089648863076503e-4,-3.80897908046812e-5,-8.83104051118581e-9,-1.3075748536931842e-4,-3.826825886682798e-5,-8.84527997381368e-9,-1.3056648321026467e-4,-3.848267424904795e-5,-8.862659526172724e-9,-1.3031305885508222e-4,-3.871009371470224e-5,-8.881878607082005e-9,-1.2999564462678402e-4,-3.8924886973358905e-5,-8.90144922639146e-9,-1.296221126551315e-4,-3.9102224081252054e-5,-8.919852317394064e-9,-1.292091137554164e-4,-3.9221787764163894e-5,-8.935653170963314e-9,-1.287801342980387e-4,-3.9271231345139034e-5,-8.947626178113364e-9,-1.2836237102655372e-4,-3.924893370147562e-5,-8.954946573809908e-9,-1.2798264289840097e-4,-3.916561004732102e-5,-8.957459750970044e-9,-1.2766262594780724e-4,-3.9044431207776e-5,-8.955969094344736e-9,-1.2741366297480022e-4,-3.891923161696911e-5,-8.952404162384802e-9,-1.2723168997357461e-4,-3.883000967390067e-5,-8.949679509496966e-9,-1.27093748029005e-4,-3.881487829910734e-5,-8.951097831921052e-9,-1.2695870357679422e-4,-3.8898685950468335e-5,-8.959323326278861e-9,-1.267751555869125e-4,-3.908106724078372e-5,-8.975233990146882e-9,-1.2649729890266872e-4,-3.933002315131596e-5,-8.997238422616873e-9,-1.2610380646318407e-4,-3.958793924368254e-5,-9.021623338742478e-9,-1.2560933231630603e-4,-3.979117636916569e-5,-9.043949542052622e-9,-1.250601064281325e-4,-3.989428803618717e-5,-9.060747657363913e-9,-1.2451535807132656e-4,-3.988519479442612e-5,-9.070550347589108e-9,-1.2402584828578883e-4,-3.978414776435241e-5,-9.073886011159246e-9,-1.236205981940215e-4,-3.963065544738354e-5,-9.07260038223968e-9,-1.2330492479386814e-4,-3.946804731107443e-5,-9.06907791995821e-9,-1.2306592379153069e-4,-3.9332584341514184e-5,-9.065663183276685e-9,-1.228800828847495e-4,-3.9248605036294036e-5,-9.064298093394783e-9,-1.2271974809462355e-4,-3.9227959023930204e-5,-9.066308761174449e-9,-1.2255751932836511e-4,-3.9271422800291845e-5,-9.07230522767062e-9,-1.2236902385258616e-4,-3.937056825807537e-5,-9.082190481665708e-9,-1.2213485314795255e-4,-3.950953825587356e-5,-9.0952670217167e-9,-1.2184219766310128e-4,-3.966680598205627e-5,-9.110401741288104e-9,-1.2148636162885278e-4,-3.981726696521993e-5,-9.12619905571748e-9,-1.2107197250418744e-4,-3.9935062083796264e-5,-9.141156188037495e-9,-1.2061333772280514e-4,-3.9997258003077964e-5,-9.153805898123638e-9,-1.2013331124746263e-4,-3.998800386203117e-5,-9.162873756252375e-9,-1.1966030668005657e-4,-3.990236796499482e-5,-9.167476141008514e-9,-1.1922355711720542e-4,-3.9748848224879454e-5,-9.16735668291749e-9,-1.1884727409519039e-4,-3.9549573910041856e-5,-9.163106709226148e-9,-1.1854484500946807e-4,-3.9337626281964046e-5,-9.156273357353645e-9,-1.1831435745928925e-4,-3.9151554868869843e-5,-9.149247534449742e-9,-1.1813661119487769e-4,-3.9027669333984225e-5,-9.144851147026704e-9,-1.1797667960421902e-4,-3.899110483450793e-5,-9.145628060950681e-9,-1.1778991790734548e-4,-3.904737063700308e-5,-9.15299150810211e-9,-1.175325624741728e-4,-3.9177091689939015e-5,-9.166537396277783e-9,-1.1717523308225653e-4,-3.933731131848976e-5,-9.183898816605155e-9,-1.1671489921126038e-4,-3.947171279421601e-5,-9.20137620436505e-9,-1.1617906373001206e-4,-3.952820645458404e-5,-9.215188158288917e-9,-1.1561807446250038e-4,-3.947694802803824e-5,-9.222771080593783e-9,-1.1508795403832579e-4,-3.931977427169145e-5,-9.223487247363517e-9,-1.1463218392673738e-4,-3.9086539305895255e-5,-9.21849929028679e-9,-1.142709592978943e-4,-3.8821745934336895e-5,-9.210076040428456e-9,-1.1400074179654687e-4,-3.856946273893001e-5,-9.20078618611514e-9,-1.1380094799943816e-4,-3.836294492571193e-5,-9.192886631995141e-9,-1.1364261812623197e-4,-3.822069459714716e-5,-9.1879765359956e-9,-1.1349551541127026e-4,-3.814719957123449e-5,-9.186871306246775e-9,-1.1333258761490281e-4,-3.8135736535814055e-5,-9.189633338269424e-9,-1.1313230069867286e-4,-3.817141008984336e-5,-9.195706259883106e-9,-1.1287982382393343e-4,-3.823369291997683e-5,-9.204097657482591e-9,-1.1256786310513337e-4,-3.829851605574717e-5,-9.213553802888529e-9,-1.1219751803139118e-4,-3.8340376762559447e-5,-9.22269414066259e-9,-1.1177904223869293e-4,-3.833503671167999e-5,-9.230116686601745e-9,-1.1133191698447232e-4,-3.826315103578705e-5,-9.234523255112086e-9,-1.1088335748373442e-4,-3.811461096830071e-5,-9.234910233392347e-9,-1.1046449079987319e-4,-3.789262697562118e-5,-9.230826308386785e-9,-1.1010413601670693e-4,-3.7615910350771354e-5,-9.222627139411862e-9,-1.0982130517158393e-4,-3.731722308065027e-5,-9.21160402770721e-9,-1.0961868889767661e-4,-3.703748088216355e-5,-9.199872312326249e-9,-1.0947969429209346e-4,-3.681630820680492e-5,-9.189976537874282e-9,-1.0937067838856088e-4,-3.668157414423921e-5,-9.184272074658242e-9,-1.0924829447019257e-4,-3.664109554625678e-5,-9.18424056176897e-9,-1.0907020550257687e-4,-3.667913877536005e-5,-9.189954915184103e-9,-1.0880642515705916e-4,-3.6759033088402764e-5,-9.199907267392656e-9,-1.0844824947981108e-4,-3.683171835853091e-5,-9.211326762762983e-9,-1.0801195079731945e-4,-3.684853152381634e-5,-9.220949393187014e-9,-1.0753533107081977e-4,-3.6774884340293415e-5,-9.225997564122934e-9,-1.0706735543311275e-4,-3.6600269285523224e-5,-9.22499909034669e-9,-1.0665405844386353e-4,-3.634060345263345e-5,-9.218128116932532e-9,-1.0632599695639417e-4,-3.6031911809698865e-5,-9.206981038369621e-9,-1.0609189824736788e-4,-3.5718319405997615e-5,-9.19395506438557e-9,-1.0593992002165717e-4,-3.543962353913638e-5,-9.181522987160879e-9,-1.0584432970216088e-4,-3.5222894444418944e-5,-9.171654265312317e-9,-1.0577377509585269e-4,-3.5079615353876484e-5,-9.165501882736301e-9,-1.0569811427307857e-4,-3.500714701067259e-5,-9.163352800650679e-9,-1.0559264518508524e-4,-3.499226206662488e-5,-9.164771801813917e-9,-1.0544004786505433e-4,-3.5014920510423576e-5,-9.16883982493074e-9,-1.0523095671395252e-4,-3.5051391464275926e-5,-9.174389778026609e-9,-1.0496405295401565e-4,-3.507665669286638e-5,-9.180172150801203e-9,-1.0464618835727268e-4,-3.506655725701059e-5,-9.184939032839345e-9,-1.0429252092118758e-4,-3.500030193581135e-5,-9.187495988674884e-9,-1.039261276946598e-4,-3.48637823947789e-5,-9.186800523449334e-9,-1.0357615793353864e-4,-3.46536541858101e-5,-9.182170455832e-9,-1.0327350441689744e-4,-3.4381246691956354e-5,-9.173580720955574e-9,-1.0304364939716516e-4,-3.4074253186413085e-5,-9.161923230549191e-9,-1.0289802766204464e-4,-3.3773697803369534e-5,-9.149039646343281e-9,-1.0282725778280255e-4,-3.3524929232600696e-5,-9.137394421723031e-9,-1.0280029662432293e-4,-3.336441855594974e-5,-9.129418606410994e-9,-1.0277162008556858e-4,-3.3307298589755e-5,-9.126750143428798e-9,-1.0269452672034878e-4,-3.334132380659976e-5,-9.129679824022376e-9,-1.0253530901109662e-4,-3.3430128766657056e-5,-9.137028969170211e-9,-1.0228281327026914e-4,-3.352418168582912e-5,-9.146483951023313e-9,-1.0195058478501845e-4,-3.357486167811767e-5,-9.155243273725392e-9,-1.0157200536431759e-4,-3.354696552794696e-5,-9.160762004820197e-9,-1.0119077576295845e-4,-3.3426523116505044e-5,-9.161389983981338e-9,-1.0084972538708518e-4,-3.322258471680729e-5,-9.1567428994038e-9,-1.0058085340582454e-4,-3.296319855077416e-5,-9.1477233287177e-9,-1.0039895151362752e-4,-3.268715204906611e-5,-9.13620386476633e-9,-1.0030009479870362e-4,-3.243403248359135e-5,-9.124482475916777e-9,-1.0026481761500761e-4,-3.2235448634192776e-5,-9.114685797381227e-9,-1.002643617789796e-4,-3.210959204158094e-5,-9.108299298278605e-9,-1.0026767382911762e-4,-3.205986487873324e-5,-9.105941746310106e-9,-1.0024717983614368e-4,-3.207681406252085e-5,-9.107401083971613e-9,-1.0018239318013028e-4,-3.214184576455504e-5,-9.111860642617299e-9,-1.0006142614792553e-4,-3.223125875718116e-5,-9.118191582072067e-9,-9.988108258667136e-5,-3.2319691729833556e-5,-9.1251948611398e-9,-9.964632646321523e-5,-3.238278403756544e-5,-9.131729422340635e-9,-9.936964829441685e-5,-3.239938756272473e-5,-9.136742201877834e-9,-9.907040628933112e-5,-3.2353857807257145e-5,-9.139278262243717e-9,-9.877374852922494e-5,-3.22388541842853e-5,-9.138569270716463e-9,-9.850827687016545e-5,-3.2058685656720396e-5,-9.13425646517205e-9,-9.830143939364078e-5,-3.1832365719454527e-5,-9.126703455871307e-9,-9.817223068137955e-5,-3.159432274657247e-5,-9.117234559865558e-9,-9.812252419680496e-5,-3.138997708142053e-5,-9.108071823699427e-9,-9.813089016549055e-5,-3.126452109365012e-5,-9.10182146027846e-9,-9.815412222958905e-5,-3.124710157480261e-5,-9.100604093125194e-9,-9.813914491830552e-5,-3.1337456387429606e-5,-9.105211374499513e-9,-9.804153498796248e-5,-3.150322611607172e-5,-9.11475449547984e-9,-9.784154686536156e-5,-3.1690737195221436e-5,-9.127000792101932e-9,-9.754967528636868e-5,-3.1843765894223964e-5,-9.139172281973027e-9,-9.720055366819144e-5,-3.192085559051927e-5,-9.148776150107598e-9,-9.684015327249356e-5,-3.1904655488520306e-5,-9.154172659673398e-9,-9.651257696551535e-5,-3.180236177111936e-5,-9.154822358487452e-9,-9.62504127431069e-5,-3.163996841124646e-5,-9.151274976782774e-9,-9.60698168291565e-5,-3.145374077091899e-5,-9.144961054288212e-9,-9.596984265486474e-5,-3.128151423757891e-5,-9.137828523893096e-9,-9.593497386265119e-5,-3.115537334164327e-5,-9.131885483864583e-9,-9.593976606922285e-5,-3.109656681303233e-5,-9.128751308860314e-9,-9.595447136657913e-5,-3.111310201829616e-5,-9.129337933414458e-9,-9.595049936624177e-5,-3.119999178987712e-5,-9.133745810921736e-9,-9.590477548725535e-5,-3.134160856925637e-5,-9.141380171958168e-9,-9.580246226255177e-5,-3.151529116825042e-5,-9.151211708597388e-9,-9.563797539391283e-5,-3.16952830703858e-5,-9.162060481302314e-9,-9.541467373049275e-5,-3.185625961327806e-5,-9.172796825714589e-9,-9.514380915860319e-5,-3.197615493895167e-5,-9.182419310694514e-9,-9.48431552537596e-5,-3.2038443093745316e-5,-9.190051974883061e-9,-9.453543133902659e-5,-3.2034182987011704e-5,-9.194952520053085e-9,-9.424633486772374e-5,-3.1964113362905855e-5,-9.19662086089252e-9,-9.400158823504068e-5,-3.18408340759899e-5,-9.195038235111904e-9,-9.382220633420554e-5,-3.169033305608827e-5,-9.19095818861579e-9,-9.371778135278529e-5,-3.155104568024974e-5,-9.186065400464665e-9,-9.367914980804929e-5,-3.1468046822899884e-5,-9.182785199579648e-9,-9.367412170350315e-5,-3.1480918711509026e-5,-9.183626205872267e-9,-9.365156347345576e-5,-3.160755715402989e-5,-9.19020294586336e-9,-9.355668865963729e-5,-3.183175941432533e-5,-9.202419571888166e-9,-9.335267713728581e-5,-3.210430056471749e-5,-9.218371347956345e-9,-9.303667906521569e-5,-3.236020861117679e-5,-9.235103819495216e-9,-9.264032211325917e-5,-3.2543385860012626e-5,-9.249755228307922e-9,-9.221548591093086e-5,-3.262483810785695e-5,-9.26041652356236e-9,-9.181507378196565e-5,-3.260698117914955e-5,-9.266413523353581e-9,-9.147845491400025e-5,-3.251632942914815e-5,-9.268166415699002e-9,-9.122520847559706e-5,-3.239154168921172e-5,-9.266889513425695e-9,-9.105564635912965e-5,-3.227244723700269e-5,-9.2642646836748e-9,-9.095498913811478e-5,-3.219240887699171e-5,-9.262101784399266e-9,-9.08987318910297e-5,-3.217406213098664e-5,-9.261994204243429e-9,-9.085793054099272e-5,-3.222762121230062e-5,-9.265019829464496e-9,-9.080392835417925e-5,-3.2351052738033134e-5,-9.271567916967034e-9,-9.071228168806134e-5,-3.253168391369461e-5,-9.28134185774094e-9,-9.056569168800201e-5,-3.2748874236925676e-5,-9.293522462109239e-9,-9.035578936575062e-5,-3.297739074658915e-5,-9.307015941925984e-9,-9.008365802729651e-5,-3.319108369388331e-5,-9.32068773621464e-9,-8.975916266917992e-5,-3.336636099032471e-5,-9.33350717957054e-9,-8.939940883763627e-5,-3.348509546284864e-5,-9.344592008056796e-9,-8.902663953210632e-5,-3.353691102753202e-5,-9.353211946825554e-9,-8.866569313938621e-5,-3.352090126483869e-5,-9.35883336145802e-9,-8.834103551839693e-5,-3.3446806313605515e-5,-9.361261938630803e-9,-8.807317448099914e-5,-3.333560303798455e-5,-9.360872293875294e-9,-8.787408489854848e-5,-3.321895898344246e-5,-9.35881896249169e-9,-8.774178162211213e-5,-3.313618048205553e-5,-9.357051719661311e-9,-8.765551941425548e-5,-3.312704407820512e-5,-9.357971217288903e-9,-8.75747733839315e-5,-3.3219976944643985e-5,-9.363691049098633e-9,-8.74461410016907e-5,-3.341812218722618e-5,-9.375114762347986e-9,-8.7220065678816e-5,-3.3690479945789706e-5,-9.391311854138805e-9,-8.687212463896635e-5,-3.397702246395055e-5,-9.409699673510456e-9,-8.641654285989432e-5,-3.420979174434094e-5,-9.427069578077248e-9,-8.590181922728967e-5,-3.433967242416912e-5,-9.440848661633535e-9,-8.539061620032401e-5,-3.435314501297649e-5,-9.44984340985916e-9,-8.493672097339013e-5,-3.4271269582614564e-5,-9.454233252297501e-9,-8.45709727893319e-5,-3.413584988272384e-5,-9.45513539359531e-9,-8.429907159057472e-5,-3.399315338192215e-5,-9.454135610822126e-9,-8.410710066635141e-5,-3.388222278476255e-5,-9.452932691116559e-9,-8.39694300761685e-5,-3.382927951155617e-5,-9.453065287658341e-9,-8.385576288840835e-5,-3.384661045247159e-5,-9.455682021020762e-9,-8.373632656338405e-5,-3.39337961074905e-5,-9.461372860972362e-9,-8.358545827544782e-5,-3.407987563331084e-5,-9.470111676055729e-9,-8.338408132706894e-5,-3.426590539557689e-5,-9.481331913003121e-9,-8.312136430352067e-5,-3.446778153328366e-5,-9.494105686910258e-9,-8.279564587432089e-5,-3.465932720987703e-5,-9.507355644814983e-9,-8.241450667287213e-5,-3.481564090403858e-5,-9.520030613693909e-9,-8.19937854235765e-5,-3.491646452503521e-5,-9.531207314372736e-9,-8.155553782746594e-5,-3.494912799250977e-5,-9.540129776878508e-9,-8.112514759519504e-5,-3.491073158250606e-5,-9.546243568285508e-9,-8.072780222779476e-5,-3.480934834136822e-5,-9.549283156140592e-9,-8.038456389393579e-5,-3.466401475530754e-5,-9.549426224657887e-9,-8.010831362600719e-5,-3.450333338545574e-5,-9.54746360191402e-9,-7.989980971585162e-5,-3.4362440274271346e-5,-9.544875278633311e-9,-7.974437782718713e-5,-3.427773727254322e-5,-9.543676237437192e-9,-7.961061805952735e-5,-3.427884237468908e-5,-9.545950110564333e-9,-7.945341861300056e-5,-3.437837958684637e-5,-9.553132576768602e-9,-7.922353858236074e-5,-3.456254513569184e-5,-9.56529984876067e-9,-7.888371631202135e-5,-3.478810345141471e-5,-9.580865713138687e-9,-7.842594949679023e-5,-3.499174125974583e-5,-9.597013547859506e-9,-7.787972052612896e-5,-3.5111823238104886e-5,-9.61077091176288e-9,-7.730339317992335e-5,-3.5112654366270275e-5,-9.620133730535203e-9,-7.676190727235558e-5,-3.4997103078953485e-5,-9.624598331243174e-9,-7.630368913524509e-5,-3.480106932702219e-5,-9.62496228087358e-9,-7.594864786183333e-5,-3.457584341541249e-5,-9.622755990773589e-9,-7.568955618661085e-5,-3.4369955647098174e-5,-9.619710536672963e-9,-7.550120699012476e-5,-3.4218070735318946e-5,-9.617407235355379e-9,-7.53506844299028e-5,-3.4137703834965904e-5,-9.617061902570326e-9,-7.520512620818642e-5,-3.4130887726558557e-5,-9.619389347609227e-9,-7.503635353608889e-5,-3.4187713250424024e-5,-9.624544759331411e-9,-7.482323554456231e-5,-3.4289930549698735e-5,-9.63216195796353e-9,-7.455284746952063e-5,-3.441408243113663e-5,-9.641484197830746e-9,-7.422104933606681e-5,-3.4534311144901265e-5,-9.651545196785234e-9,-7.383266982034839e-5,-3.4625139821498456e-5,-9.661340808730684e-9,-7.340115252227199e-5,-3.466447763315732e-5,-9.669951148188559e-9,-7.29472860281118e-5,-3.4636811794840895e-5,-9.676610258024069e-9,-7.249670181575391e-5,-3.453612755069931e-5,-9.680751536488109e-9,-7.207617225320659e-5,-3.436789907206864e-5,-9.682071150846721e-9,-7.170907254595313e-5,-3.414954611457939e-5,-9.680633872207702e-9,-7.141062395474628e-5,-3.39088790257861e-5,-9.676997430229804e-9,-7.118375946617258e-5,-3.3680346460547944e-5,-9.672282908069223e-9,-7.101650731517465e-5,-3.349931488623629e-5,-9.668098481187566e-9,-7.088172523947388e-5,-3.33948756399492e-5,-9.666247026220778e-9,-7.074007291564022e-5,-3.3381977619494795e-5,-9.668224096412342e-9,-7.054706001923604e-5,-3.345448175111133e-5,-9.674640120668145e-9,-7.026421186175586e-5,-3.358188659485631e-5,-9.68481262676929e-9,-6.987236648803186e-5,-3.371310919852034e-5,-9.69679586348801e-9,-6.938216497629712e-5,-3.3789366876241454e-5,-9.707962916374584e-9,-6.883511643281062e-5,-3.376368965928737e-5,-9.715940864866819e-9,-6.829161852117123e-5,-3.3618736578177726e-5,-9.719434092883315e-9,-6.781005922500603e-5,-3.337302815858778e-5,-9.718519685799377e-9,-6.742756648217968e-5,-3.307197650765509e-5,-9.714369050431293e-9,-6.715167109481134e-5,-3.276964162612763e-5,-9.70868572509175e-9,-6.696431540140377e-5,-3.251149483555875e-5,-9.703181489926008e-9,-6.683272014943683e-5,-3.23249804831107e-5,-9.699229967536756e-9,-6.672046595425307e-5,-3.221830593712131e-5,-9.69768646622021e-9,-6.659514882482948e-5,-3.218413792480631e-5,-9.69883261424372e-9,-6.643222102070501e-5,-3.2204715407059465e-5,-9.702422223220024e-9,-6.621623206383647e-5,-3.225639014403438e-5,-9.707811412099236e-9,-6.594084229704343e-5,-3.231307689206832e-5,-9.714134303646899e-9,-6.560847130759857e-5,-3.234892257240772e-5,-9.720473000120565e-9,-6.522984548096849e-5,-3.2340745725612146e-5,-9.725978398839142e-9,-6.482324202400488e-5,-3.227068092840828e-5,-9.72993539962299e-9,-6.441292964570893e-5,-3.212909927557402e-5,-9.731798587080863e-9,-6.402628163536215e-5,-3.1917364877182857e-5,-9.731239839313383e-9,-6.368937200887575e-5,-3.164953586182567e-5,-9.728232443086724e-9,-6.342148728367543e-5,-3.135192586641782e-5,-9.723155862069091e-9,-6.3229704409613e-5,-3.105968506127635e-5,-9.716864968224381e-9,-6.310518395759158e-5,-3.081035792541784e-5,-9.710646408580894e-9,-6.302274843342547e-5,-3.0635492967811876e-5,-9.706009068758345e-9,-6.294459210654977e-5,-3.055226083848084e-5,-9.704313675315504e-9,-6.282790628516361e-5,-3.0557342633427204e-5,-9.706329094269245e-9,-6.263513206345579e-5,-3.062513212686725e-5,-9.711875217337033e-9]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json new file mode 100644 index 000000000..76c3a68e8 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json @@ -0,0 +1 @@ +{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":9000,"numberOfSamples":1000,"samples":[-6.23446137633139e-5,-3.071164556992463e-5,-9.719731332151204e-9,-6.19586809157847e-5,-3.076438157665265e-5,-9.727914890125598e-9,-6.150587794551883e-5,-3.073654937098242e-5,-9.734280833128142e-9,-6.1034943329782044e-5,-3.060168191808949e-5,-9.737216476929997e-9,-6.0601038606681665e-5,-3.036287029042388e-5,-9.736134809126074e-9,-6.024888746053323e-5,-3.0051869736974383e-5,-9.731565682588457e-9,-5.999994090928063e-5,-2.971789522758825e-5,-9.724862066857019e-9,-5.9848834314815545e-5,-2.9411354882677176e-5,-9.71770907732456e-9,-5.976923198886019e-5,-2.916989718887004e-5,-9.711648469978378e-9,-5.972462316432335e-5,-2.9011586735457638e-5,-9.707751149758674e-9,-5.967870819510338e-5,-2.8935387308633597e-5,-9.70647628370283e-9,-5.9602228253192676e-5,-2.89259970676844e-5,-9.707695687073557e-9,-5.947591112549622e-5,-2.8959747148304846e-5,-9.710838540242717e-9,-5.929077173354268e-5,-2.9009608654381066e-5,-9.715094525623705e-9,-5.904719567985657e-5,-2.9048773862964067e-5,-9.71960852884578e-9,-5.8753773367436014e-5,-2.9053136374370507e-5,-9.72361187781754e-9,-5.842624685184096e-5,-2.9003338061866847e-5,-9.726475623750488e-9,-5.8086360356536405e-5,-2.8886966009567993e-5,-9.727714468149827e-9,-5.776002754298137e-5,-2.870105742876016e-5,-9.726995392498005e-9,-5.74741651198525e-5,-2.845449366073143e-5,-9.72419549652686e-9,-5.725183467800746e-5,-2.8169256139263426e-5,-9.71951151762819e-9,-5.7106100541113594e-5,-2.7879041181757347e-5,-9.713564114276547e-9,-5.7034227249689176e-5,-2.7623923778951554e-5,-9.707405962417725e-9,-5.7014849044397024e-5,-2.744114170465607e-5,-9.702361282140308e-9,-5.701050918052841e-5,-2.735425399096375e-5,-9.699698830847758e-9,-5.697609718243167e-5,-2.7364576162975244e-5,-9.700232368303819e-9,-5.6871038817050416e-5,-2.7448633497066595e-5,-9.704002376450864e-9,-5.667116781282969e-5,-2.7563221973356075e-5,-9.710182005555758e-9,-5.637617678776307e-5,-2.765667320675218e-5,-9.717264987992663e-9,-5.601027591624169e-5,-2.7682736375781414e-5,-9.723480590272698e-9,-5.561600483675091e-5,-2.7612936285683867e-5,-9.727297528384073e-9,-5.524303937361784e-5,-2.7443956618506687e-5,-9.727850312943274e-9,-5.493513840003189e-5,-2.7197955922928915e-5,-9.725154651913568e-9,-5.471906725691787e-5,-2.6915691607899557e-5,-9.72005407261872e-9,-5.4598911019501836e-5,-2.6644703453075705e-5,-9.713934027115233e-9,-5.455730383150816e-5,-2.64266189741069e-5,-9.708311206523093e-9,-5.4562420129529145e-5,-2.6287768574123053e-5,-9.704433569738843e-9,-5.457752704343605e-5,-2.623553492658023e-5,-9.703008653848694e-9,-5.456957532646678e-5,-2.6260220049275858e-5,-9.704121931504624e-9,-5.451464446828428e-5,-2.6340246599419492e-5,-9.707335422027123e-9,-5.439995050230707e-5,-2.6448131932234545e-5,-9.711898924726039e-9,-5.422339633670513e-5,-2.6555532499365036e-5,-9.716981565914689e-9,-5.399194066121386e-5,-2.663678226094542e-5,-9.721842938139277e-9,-5.37197431734721e-5,-2.667116151947731e-5,-9.725902670942154e-9,-5.342650643560834e-5,-2.6644534881516494e-5,-9.728727486336505e-9,-5.313587618209729e-5,-2.655097739679037e-5,-9.729995225631237e-9,-5.287334596399925e-5,-2.639462790136861e-5,-9.72950469114869e-9,-5.266297173036476e-5,-2.619143036945524e-5,-9.727266597271218e-9,-5.252243553464907e-5,-2.596971389861331e-5,-9.723645863256587e-9,-5.245681707745194e-5,-2.5767877042401753e-5,-9.719459836489783e-9,-5.245295661436816e-5,-2.562748717562385e-5,-9.715914975816248e-9,-5.247784135201871e-5,-2.558182145120203e-5,-9.714321344765071e-9,-5.248433005910525e-5,-2.5643167778965002e-5,-9.71565414605581e-9,-5.242443255043768e-5,-2.5794981125069657e-5,-9.720157774265109e-9,-5.2265507859568556e-5,-2.599424952537427e-5,-9.727205074415084e-9,-5.200192042456586e-5,-2.6184413784918434e-5,-9.735490249337039e-9,-5.165673914621095e-5,-2.6313264574752945e-5,-9.743443035999223e-9,-5.127351919687404e-5,-2.6348054742647138e-5,-9.749667801257827e-9,-5.0902725125982576e-5,-2.6282713166082426e-5,-9.75326720347049e-9,-5.0588284184408174e-5,-2.6136491038281e-5,-9.754009356253531e-9,-5.0357993370069754e-5,-2.5946393683606597e-5,-9.752342082004198e-9,-5.0219232993974796e-5,-2.5756667981670227e-5,-9.749262933352734e-9,-5.015982106504244e-5,-2.5608303159542794e-5,-9.746061951023208e-9,-5.0152906269271166e-5,-2.5530759317958693e-5,-9.743991748123502e-9,-5.016424167598713e-5,-2.5537314473559887e-5,-9.743957229389409e-9,-5.015987799753719e-5,-2.5624510658344092e-5,-9.746324283706057e-9,-5.011244865581866e-5,-2.5775123374663638e-5,-9.750904754883811e-9,-5.000492623338741e-5,-2.596321755352963e-5,-9.757101352467545e-9,-4.9831698223674514e-5,-2.6159651038122543e-5,-9.764134932390347e-9,-4.959756293540752e-5,-2.6336794409959954e-5,-9.77125471218565e-9,-4.9315586018946434e-5,-2.6471880876366733e-5,-9.777857341227311e-9,-4.900467765247903e-5,-2.6549048296052148e-5,-9.78350042703132e-9,-4.868733505302663e-5,-2.6560573645593127e-5,-9.787854781108205e-9,-4.8387507995782974e-5,-2.6507830841147043e-5,-9.790671063781774e-9,-4.812820015775109e-5,-2.640221991296037e-5,-9.791823659827242e-9,-4.792822925558667e-5,-2.626586053182433e-5,-9.791440657019166e-9,-4.7797688235235664e-5,-2.6131146731513124e-5,-9.790058210807481e-9,-4.7732434736905576e-5,-2.603750245204811e-5,-9.788680030956192e-9,-4.770949127982192e-5,-2.602362103765612e-5,-9.788622629016349e-9,-4.768699088683465e-5,-2.6115132800391774e-5,-9.791115783371455e-9,-4.7612514838547504e-5,-2.6311416798164514e-5,-9.796791594098938e-9,-4.744004786748611e-5,-2.6579162837951064e-5,-9.805340798551625e-9,-4.714894275327642e-5,-2.68596183979786e-5,-9.81558384504337e-9,-4.675409408145582e-5,-2.7088789244523173e-5,-9.82593563524379e-9,-4.63007016373858e-5,-2.7220538865820394e-5,-9.834966162719081e-9,-4.584698755933853e-5,-2.7240537539346205e-5,-9.841756608580806e-9,-4.544489497457328e-5,-2.716612358051693e-5,-9.845989371386469e-9,-4.512720869220526e-5,-2.7035870592725035e-5,-9.847894204339548e-9,-4.490350340869352e-5,-2.6895966227287968e-5,-9.848150476851382e-9,-4.4762813526265216e-5,-2.6788619054627426e-5,-9.847749002642056e-9,-4.467974944751262e-5,-2.6744535726717833e-5,-9.847788854326644e-9,-4.4621551529998665e-5,-2.67793858092927e-5,-9.849227199555758e-9,-4.4554711427458415e-5,-2.6893402551401513e-5,-9.852654250504786e-9,-4.445048423814215e-5,-2.7073346152810357e-5,-9.858177344922723e-9,-4.428881976659844e-5,-2.7296183901073322e-5,-9.865455416384905e-9,-4.406041691263042e-5,-2.753370714423536e-5,-9.873857188997167e-9,-4.376691930956634e-5,-2.7757247847319554e-5,-9.882664459772306e-9,-4.3419538053046194e-5,-2.7941805347373132e-5,-9.891234414250543e-9,-4.303660454191013e-5,-2.8069095603610774e-5,-9.899069051818642e-9,-4.264069174434751e-5,-2.8129368229640377e-5,-9.90579879900749e-9,-4.2255769073996823e-5,-2.8122238695490774e-5,-9.911139409555858e-9,-4.1904486407320275e-5,-2.8056896725693683e-5,-9.914892497705433e-9,-4.160543814119917e-5,-2.7951878164291356e-5,-9.9170275201943e-9,-4.137010911506443e-5,-2.783431847991674e-5,-9.917825281106567e-9,-4.119921521788755e-5,-2.7738086497587085e-5,-9.917998408072091e-9,-4.107878264055179e-5,-2.769954625238172e-5,-9.91867215364473e-9,-4.097763615938715e-5,-2.7749689768273665e-5,-9.921139370467895e-9,-4.0849404904229084e-5,-2.7902797854934692e-5,-9.926407792259145e-9,-4.0642441010064514e-5,-2.8145057541786642e-5,-9.934713814169385e-9,-4.031787237599612e-5,-2.8430538779043658e-5,-9.945298702787681e-9,-3.9868810330146976e-5,-2.8691908882654146e-5,-9.9566665170196e-9,-3.932833565054289e-5,-2.8864961803409028e-5,-9.967212572062042e-9,-3.875854394725441e-5,-2.891437192128338e-5,-9.975808367109482e-9,-3.822616913640833e-5,-2.8845330760606945e-5,-9.98201180056612e-9,-3.777943806979286e-5,-2.869613572190929e-5,-9.98594693625295e-9,-3.743725664498184e-5,-2.8519754654329504e-5,-9.98810862349428e-9,-3.719134397363045e-5,-2.8366020937962917e-5,-9.989234069973608e-9,-3.701525587842487e-5,-2.8270836040562245e-5,-9.99020103086058e-9,-3.6874340673262915e-5,-2.8252557552493445E-05,-9.991881928374356e-9,-3.6733633947777075e-5,-2.831302992680173e-5,-9.994958846882884e-9,-3.656313374093195e-5,-2.844073037686516e-5,-9.999766501751608e-9,-3.634100881655143e-5,-2.8614561011922926e-5,-1.000623541918002e-8,-3.605533964519792e-5,-2.8807801587885512e-5,-1.0013957531492734e-8,-3.570465334841229e-5,-2.8992079074828512e-5,-1.0022338457116705e-8,-3.529734816247884e-5,-2.914116709250595e-5,-1.0030762046344616e-8,-3.485006993645185e-5,-2.92343805861204e-5,-1.0038702615702036e-8,-3.4385142229079815e-5,-2.9259238226273796e-5,-1.0045757091094494e-8,-3.3927359255493513e-5,-2.9213049460563632e-5,-1.0051621058011619e-8,-3.350058407226353e-5,-2.9103332940466208e-5,-1.0056066702504657e-8,-3.3124457063630464e-5,-2.8947189972084985e-5,-1.0058976990550987e-8,-3.2811366323358286e-5,-2.8769735723801098e-5,-1.0060445345746964e-8,-3.256375787328263e-5,-2.8601623226662544e-5,-1.0060897143616392e-8,-3.2371816097269846e-5,-2.8475488693954947e-5,-1.0061145174295647e-8,-3.221189052935458e-5,-2.842075314931494e-5,-1.0062287880142022e-8,-3.204694100578321e-5,-2.8456309260332803e-5,-1.0065415316236122e-8,-3.183109485034811e-5,-2.8581804503757855e-5,-1.007118993199182e-8,-3.152026648812525e-5,-2.877048997646703e-5,-1.0079484318373714e-8,-3.108835216793204e-5,-2.8969238348406404e-5,-1.0089312218910324e-8,-3.0542974461299724e-5,-2.911131486583659e-5,-1.0099182540644034e-8,-2.992994780628945e-5,-2.9140766616140142e-5,-1.0107715115987456e-8,-2.9319253695152042e-5,-2.9036541761832005e-5,-1.0114124886146775e-8,-2.877809393386789e-5,-2.8820960229194144e-5,-1.0118307228329601e-8,-2.8346852894650365e-5,-2.8547443251060635e-5,-1.0120625267983092e-8,-2.803055359693186e-5,-2.8277133796314353e-5,-1.0121677071264258e-8,-2.7805852942645365e-5,-2.8058810315545394e-5,-1.0122171969069935e-8,-2.7634885870697304e-5,-2.7919586021142028e-5,-1.0122851241518537e-8,-2.7477784344898564e-5,-2.7865136011979794e-5,-1.0124374041290903e-8,-2.73005681768325e-5,-2.788470342701019e-5,-1.0127178785398857e-8,-2.707876938176712e-5,-2.7957027015369363e-5,-1.0131386580299943e-8,-2.6798428484780897e-5,-2.8055381987984983e-5,-1.0136799525049531e-8,-2.6455880523470634e-5,-2.8151496961065997e-5,-1.0142993650083491e-8,-2.6056989964450905e-5,-2.8218751221123247e-5,-1.0149458252670142e-8,-2.5615936366383297e-5,-2.82350089513246e-5,-1.0155717100330529e-8,-2.5153423477268736e-5,-2.8185218808561722e-5,-1.0161389371918144e-8,-2.469410784372093e-5,-2.80636100261117e-5,-1.0166188348621973e-8,-2.426321414819864e-5,-2.787501653366006e-5,-1.0169893731105325e-8,-2.3882668480529245e-5,-2.763487038497263e-5,-1.01723489245492e-8,-2.3567286234310905e-5,-2.7367666919278267e-5,-1.017351616196784e-8,-2.332156842397692e-5,-2.7103905438103306e-5,-1.017357593949472e-8,-2.3137641969046203e-5,-2.6875705732266855e-5,-1.0173013410180529e-8,-2.299476051584912e-5,-2.6711500845227497E-05,-1.017261329344951e-8,-2.2860705750699917e-5,-2.663018704620786e-5,-1.0173308322342749e-8,-2.2695665047880168e-5,-2.663518611623227e-5,-1.017589092482202e-8,-2.2459337873909423e-5,-2.6709603552242226e-5,-1.0180685150351775e-8,-2.212140867809451e-5,-2.6814846177850375e-5,-1.0187337375833014e-8,-2.1673671732367735e-5,-2.6895869468464378e-5,-1.0194873028803975e-8,-2.1139047774474032e-5,-2.68952440266726e-5,-1.0202044877588625e-8,-2.0570501852735378e-5,-2.6773653165214853e-5,-1.0207808391111026e-8,-2.0035779945461135e-5,-2.6527596262472074e-5,-1.0211650200164242e-8,-1.95929968856085e-5,-2.6192859779762135e-5,-1.0213616507492086e-8,-1.9270119523824262e-5,-2.5830075681245798e-5,-1.021413380368983e-8,-1.905933904298975e-5,-2.5500927912146165e-5,-1.021381348729072e-8,-1.892657043021345e-5,-2.5248592103061754e-5,-1.0213321886218076e-8,-1.8827443033921196e-5,-2.5090146839981592e-5,-1.0213277816654462e-8,-1.8720869387209668e-5,-2.5019585350191788e-5,-1.0214142627298827e-8,-1.8576464284264876e-5,-2.5015668692887527e-5,-1.0216127260583814e-8,-1.8376611843414558e-5,-2.504980617624261e-5,-1.0219166169699748e-8,-1.8115567499788158e-5,-2.5091878000311348e-5,-1.022297593256864e-8,-1.77975879404375e-5,-2.511396168920078e-5,-1.0227169183059294e-8,-1.743505293856026e-5,-2.5092754555130803e-5,-1.0231368833090536e-8,-1.7046707371919865e-5,-2.5011456803880348e-5,-1.0235274298180084e-8,-1.6655740859370975e-5,-2.4861532084328557e-5,-1.023866489114029e-8,-1.6287282974612118e-5,-2.464432330060455e-5,-1.0241365206381334e-8,-1.596501252310151e-5,-2.4372025169081737e-5,-1.024321801882643e-8,-1.570702113141324e-5,-2.406725812436014e-5,-1.0244103967347291e-8,-1.552160951313559e-5,-2.376063009939192e-5,-1.0244017040254267e-8,-1.5404061827608693e-5,-2.3486101581026236e-5,-1.0243161489551215e-8,-1.5335535519959935e-5,-2.327460877469775e-5,-1.0242006517918706e-8,-1.5284891552236783e-5,-2.314712391361825e-5,-1.0241237021644048e-8,-1.5213603604440276e-5,-2.3108728191468194e-5,-1.0241580512137116e-8,-1.5083201808082548e-5,-2.3145172717351075e-5,-1.0243555303704379e-8,-1.4864218209902013e-5,-2.32231622645874e-5,-1.0247243960115732e-8,-1.4545036900022462e-5,-2.3295366098052616e-5,-1.0252208937023976e-8,-1.4138251105215157e-5,-2.3310524416851092e-5,-1.0257614027791928e-8,-1.368146422366092e-5,-2.322748601135849e-5,-1.0262512342819018e-8,-1.322989051622768e-5,-2.3029486169829173e-5,-1.0266164007946504e-8,-1.2840855736179594e-5,-2.2732545405069593e-5,-1.0268236392507776e-8,-1.2555169579427251e-5,-2.238231187733215e-5,-1.0268825150242116e-8,-1.2383914527037539e-5,-2.2038912589209548e-5,-1.0268347802691693e-8,-1.2307249887307113e-5,-2.1756613087809175e-5,-1.0267393640885903e-8,-1.2284812012886326e-5,-2.156813016555327e-5,-1.0266572608916944e-8,-1.2270971936084373e-5,-2.1479552451146128e-5,-1.0266376938115249e-8,-1.2227457536302338e-5,-2.1474911265539056e-5,-1.0267077590847187e-8,-1.2129749205895953e-5,-2.1525263563921737e-5,-1.0268689111523196e-8,-1.1967892292312714e-5,-2.1597450054922837e-5,-1.0271017429226725e-8,-1.174422548889918e-5,-2.166023896731968e-5,-1.0273764819876203e-8,-1.1470257655664928e-5,-2.1687790859828148e-5,-1.0276640831595281e-8,-1.1163872918540682e-5,-2.16613873970703e-5,-1.0279429528370393e-8,-1.0847087574647729e-5,-2.1570437594962387e-5,-1.0281991235380007e-8,-1.0544002989509588e-5,-2.141339145539365e-5,-1.0284216045362617e-8,-1.0278390240021108e-5,-2.1198652865103365e-5,-1.0285974464584003e-8,-1.0070447996162899e-5,-2.0945037086426453e-5,-1.028711043152021e-8,-9.932690801530476e-6,-2.068088652200719e-5,-1.028749799157689e-8,-9.86563644678306e-6,-2.0440844298465255e-5,-1.0287141168707594e-8,-9.854764583517574e-6,-2.0259766952748523e-5,-1.028626273479879e-8,-9.870619619233569e-6,-2.01644508838674e-5,-1.0285319481300823e-8,-9.8733786193769e-6,-2.0165339281957866e-5,-1.0284908068411034e-8,-9.821625784056985e-6,-2.0251252759600633e-5,-1.0285579389915266e-8,-9.683168074476673e-6,-2.0389683901633625e-5,-1.0287635145367275e-8,-9.444561568473699e-6,-2.053338593781372e-5,-1.0290997813059452e-8,-9.116224347150207e-6,-2.063177957102368e-5,-1.0295216467786993e-8,-8.731339354531077e-6,-2.0644132770129046e-5,-1.0299605534523448e-8,-8.338457137712565e-6,-2.055092931652111e-5,-1.030345694288755e-8,-7.98933323349338e-6,-2.0360097137701205e-5,-1.0306242488373733e-8,-7.72506620945875e-6,-2.0105711184980106e-5,-1.0307743277604975e-8,-7.564775484823967e-6,-1.983876173135379e-5,-1.0308080804889762e-8,-7.500921681843046e-6,-1.9612526930376168e-5,-1.0307656350511951e-8,-7.503139782780013e-6,-1.946768074753192e-5,-1.0307019062928134e-8,-7.528820005869814e-6,-1.9422601531502887e-5,-1.0306699910081859e-8,-7.535794278292598e-6,-1.947177763761887e-5,-1.0307063665786794e-8,-7.492269894596984e-6,-1.959128917115925e-5,-1.0308233957531626e-8,-7.381486721375345e-6,-1.974765598713154e-5,-1.0310113143840973e-8,-7.201498312177095e-6,-1.990624677978869e-5,-1.031247670749912e-8,-6.962107167616799e-6,-2.0037161470478344e-5,-1.031508699283958e-8,-6.680993863389137e-6,-2.011834907841151e-5,-1.0317770097194946e-8,-6.380273436048308e-6,-2.0136768138740442e-5,-1.032042648831648e-8,-6.0838277247680745e-6,-2.0088636779103125e-5,-1.0322983928965702e-8,-5.815108860030673e-6,-1.9979521669310532e-5,-1.0325335032912242e-8,-5.594817165694961e-6,-1.9824453315227466e-5,-1.0327309582072665e-8,-5.437930590768389e-6,-1.9647685779100526e-5,-1.0328712972235372e-8,-5.349939383493514e-6,-1.948122710398913e-5,-1.0329423078834094e-8,-5.3228826376455855e-6,-1.936095973346019e-5,-1.0329498903693821e-8,-5.332864110333339e-6,-1.9319532507723174e-5,-1.0329235310495402e-8,-5.341522628441661e-6,-1.9376734531154476e-5,-1.0329117209882681e-8,-5.303353476159965e-6,-1.953039383977173e-5,-1.0329676054612896e-8,-5.17823507516099e-6,-1.9752454282041895e-5,-1.0331308373795825e-8,-4.945019491343102e-6,-1.9993909540435985e-5,-1.0334140752283602e-8,-4.610138350751177e-6,-2.019829297048899e-5,-1.0337995748268947e-8,-4.206914461260477e-6,-2.0318725218684748e-5,-1.0342450652703292e-8,-3.7858145479968068e-6,-2.033162353691172e-5,-1.0346947057188743e-8,-3.3999204340748854e-6,-2.0242322080569558e-5,-1.0350921705190584e-8,-3.090978422107698e-6,-2.0081863583639396e-5,-1.035394277316305e-8,-2.879939472361453e-6,-1.9897267305424163e-5,-1.0355827001534681e-8,-2.7637461044958318e-6,-1.9738805558921248e-5,-1.035669501194934e-8,-2.7182918430026305e-6,-1.9647845328083208e-5,-1.0356930437472887e-8,-2.706078182001334e-6,-1.964815539595743e-5,-1.0357046501868146e-8,-2.6861280184476436e-6,-1.9742416449230415e-5,-1.035751449251452e-8,-2.623356484294166e-6,-1.9914165200530054e-5,-1.0358627867133187e-8,-2.495051690997066e-6,-2.0133848461016657e-5,-1.0360457505484327e-8,-2.2933525948354025e-6,-2.0366613404506264e-5,-1.0362901596694904e-8,-2.024101506874866e-6,-2.057945330065126e-5,-1.036578541391425e-8,-1.703438490176005e-6,-2.0746243231691587e-5,-1.0368950180661795e-8,-1.353670649395772e-6,-2.085034603832491e-5,-1.0372285844231933e-8,-9.995092065925437e-7,-2.0885306200609506e-5,-1.0375703780683756e-8,-6.650892091385618e-7,-2.085449651147433e-5,-1.0379079635308058e-8,-3.715968940342627e-7,-2.0770428531116953e-5,-1.0382217349452199e-8,-1.3503446063713592e-7,-2.065397945826239e-5,-1.0384871607393536e-8,3.635039213145238e-8,-2.053328258334241e-5,-1.0386834569506982e-8,1.451554926153161e-7,-2.0441523455916053e-5,-1.038805057918194e-8,2.0789280435282035e-7,-2.041250688557186e-5,-1.0388697272151172e-8,2.56355366977416e-7,-2.047315309918241e-5,-1.0389176849844525e-8,3.3464806040304173e-7,-2.0633626967615144e-5,-1.039000389350313e-8,4.896682666698106e-7,-2.0878520990299207e-5,-1.0391635630909641e-8,7.558554175414243e-7,-2.1164864508976094e-5,-1.0394332164603972e-8,1.1400137473200676e-6,-2.143168146622313e-5,-1.039811235383832e-8,1.6149011662753742e-6,-2.161972150492724e-5,-1.040278944838272e-8,2.1267889603254867e-6,-2.169252145724684e-5,-1.0408016370122865e-8,2.613791080986166e-6,-2.1648099623553002e-5,-1.0413314414030032e-8,3.0255611796536674e-6,-2.1516600834236966e-5,-1.0418136661790554e-8,3.335896657502066e-6,-2.1347475609993867e-5,-1.0422008383847894e-8,3.5455028334495375e-6,-2.1193595706788387e-5,-1.0424695027343131e-8,3.6771057866818085e-6,-2.1098205117584193e-5,-1.0426297045670991e-8,3.766730983759074e-6,-2.1087212163472165e-5,-1.0427207186394536e-8,3.8543118584060025e-6,-2.116678673670468e-5,-1.0427955059979016e-8,3.97556153049034e-6,-2.1325112935168602e-5,-1.0429021553114722e-8,4.156112148298531e-6,-2.1536968915716497e-5,-1.043071137120023e-8,4.4083884967787636e-6,-2.1769858276116903e-5,-1.0433124870667529e-8,4.731238299426264e-6,-2.199039967092715e-5,-1.0436213182297564e-8,5.111871251593329e-6,-2.216982148981789e-5,-1.0439862617282118e-8,5.5293180610449155e-6,-2.228781360239789e-5,-1.0443951826756803e-8,5.958483105439134e-6,-2.2334471279948907e-5,-1.0448355486385057e-8,6.3739591557127685e-6,-2.2310548005592115e-5,-1.0452908274701619e-8,6.753167656295747e-6,-2.2226596306971968e-5,-1.0457371227043073e-8,7.0788641774440105e-6,-2.2101555638768476e-5,-1.0461442256004719e-8,7.341270437022586e-6,-2.19610250197676e-5,-1.0464828194753588e-8,7.540107011405848e-6,-2.18351220744106e-5,-1.0467357564690674e-8,7.686656069240698e-6,-2.1755428418429816e-5,-1.0469080980364281e-8,7.805377469636384e-6,-2.175014455624397e-5,-1.047029980195859e-8,7.933563002743403e-6,-2.1836872868918745e-5,-1.0471493607166954e-8,8.116719413656968e-6,-2.2013889674084526e-5,-1.0473170238320335e-8,8.397782946960609e-6,-2.2253242470900754e-5,-1.0475713376965965e-8,8.801167458084262e-6,-2.2501424654771112e-5,-1.0479313312473675e-8,9.31809147430383e-6,-2.2692544610459407e-5,-1.0483994091602052e-8,9.903277804372193e-6,-2.2771894060168208e-5,-1.0489651043077342e-8,1.0488693236733184e-5,-2.2718401944810526e-5,-1.0496011071352977e-8,1.1008517592282977e-5,-2.2552507598399298e-5,-1.0502567400688094e-8,1.14214527653244e-5,-2.2325484053898436e-5,-1.0508639692043991e-8,1.1719729539192924e-5,-2.2098427892878435e-5,-1.051360321451119e-8,1.192434757606461e-5,-2.192293983959106e-5,-1.0517149141774825e-8,1.2073148493867486e-5,-2.1830348879371115e-5,-1.0519399549919799e-8,1.2208507379845121e-5,-2.1829582167914723e-5,-1.0520823108331641e-8,1.2368142087573956e-5,-2.1910517424363665e-5,-1.0522026852220468e-8,1.2579647860001937e-5,-2.204963465047748e-5,-1.0523548294514526e-8,1.2858046046948135e-5,-2.2216044306126058e-5,-1.052573427092128e-8,1.3205504635807662e-5,-2.2377097194277054e-5,-1.0528728383253077e-8,1.3612660353343853e-5,-2.2503232700248113e-5,-1.0532528837699294e-8,1.4061128311368573e-5,-2.257179941745656e-5,-1.053705767622001e-8,1.4526835423976653e-5,-2.2569659248670465e-5,-1.0542194374134102e-8,1.4983796312142356e-5,-2.2494425657141477e-5,-1.0547763574333112e-8,1.5407831934948618e-5,-2.2354282969079747e-5,-1.0553504640982075e-8,1.5779770461427512e-5,-2.2166624359187616e-5,-1.0559067684047334e-8,1.608797482690634e-5,-2.195590135189993e-5,-1.0564065337397685e-8,1.6330245854374478e-5,-2.1750905552668204e-5,-1.0568177866410433e-8,1.6515130621988764e-5,-2.1581513602797013e-5,-1.0571271898841906e-8,1.6662595891771928e-5,-2.1474755707688038e-5,-1.0573475716392125e-8,1.680367989659793e-5,-2.144982680559584e-5,-1.0575164031555221e-8,1.6977991855744892e-5,-2.15119081550659e-5,-1.0576851619497795e-8,1.7227451460833117e-5,-2.164590037929872e-5,-1.0579043607594197e-8,1.758528349482335e-5,-2.1813063305720084e-5,-1.0582122319913347e-8,1.8061786594786307e-5,-2.1955189701945334e-5,-1.058632473338257e-8,1.8632948981106676e-5,-2.200995658499017e-5,-1.0591773118012249e-8,1.9241195983456193e-5,-2.193466323120593e-5,-1.0598445172373046e-8,1.981317133003406e-5,-2.1726452282952587e-5,-1.0606040069575834e-8,2.0287448616256157e-5,-2.1425281858291863e-5,-1.061388459734303e-8,2.0636332778655594e-5,-2.109672690297479e-5,-1.0621077002227759e-8,2.087033260256244e-5,-2.0805852875933422e-5,-1.0626847060734854e-8,2.1026869693195923e-5,-2.0597119217422514e-5,-1.0630882019558624e-8,2.115329294074093e-5,-2.0487273010198692e-5,-1.0633405474768798e-8,2.129300028400665e-5,-2.0468775249628576e-5,-1.0635008899056331e-8,2.1477766769687902e-5,-2.0517857674518222e-5,-1.0636384654839218e-8,2.172530639983127e-5,-2.0602735888928814e-5,-1.0638109815842078e-8,2.203989369531137e-5,-2.0690072956350867e-5,-1.0640550610319622e-8,2.2414327228279076e-5,-2.0749586688981025e-5,-1.0643876480653403e-8,2.2832428864176618e-5,-2.075731437602081e-5,-1.0648123545462657e-8,2.327186373709147e-5,-2.06979052512023e-5,-1.065324691100052e-8,2.370725263408254e-5,-2.056607264478361e-5,-1.065912813728469e-8,2.4113571523498897e-5,-2.0367140342581537e-5,-1.0665546197757955e-8,2.4469666599175597e-5,-2.011644324456059e-5,-1.067215081453571e-8,2.4761457155718238e-5,-1.9837455761494462e-5,-1.0678483547801098e-8,2.4984396740016067e-5,-1.9558825643028435e-5,-1.0684064625935296e-8,2.5144939672969598e-5,-1.9310587473940774e-5,-1.0688525639022025e-8,2.5260818881569855e-5,-1.9119802585786575e-5,-1.06917361236997e-8,2.535994562171527e-5,-1.9005914717674657e-5,-1.069386581323808e-8,2.5477696466233576e-5,-1.897609088271257e-5,-1.0695349149176802e-8,2.5652094341733997e-5,-1.902096367210599e-5,-1.0696767956414568e-8,2.5916298087693046e-5,-1.9111975005796678e-5,-1.0698709732170148e-8,2.628859728374691e-5,-1.9202643001807574e-5,-1.0701666562329869e-8,2.6762094197675117e-5,-1.9236556751696734e-5,-1.0705996336353121e-8,2.729911355674748e-5,-1.9163344524585584e-5,-1.0711891767678148e-8,2.783684602254258e-5,-1.895885387153898e-5,-1.0719277613221644e-8,2.8306670586864564e-5,-1.8639334239086277e-5,-1.072766183557865e-8,2.8659855505782475e-5,-1.8258763113995928e-5,-1.073612159190717e-8,2.8885279659063856e-5,-1.7888184927921706e-5,-1.0743575505291491e-8,2.9009231738796605e-5,-1.7588764782654586e-5,-1.0749225136080199e-8,2.908000233439939e-5,-1.7393518711195572e-5,-1.0752864147570606e-8,2.914855079008243e-5,-1.7304111401313012e-5,-1.0754868997586099e-8,2.9254770735155143e-5,-1.7298721919266967e-5,-1.0755947029287413e-8,2.9421960148790195e-5,-1.73433769434448e-5,-1.0756840443938963e-8,2.9657262395368594e-5,-1.7401543433202763e-5,-1.075813349050785e-8,2.9954830790562838e-5,-1.7440335048629465e-5,-1.0760197584755174e-8,3.0299471035757358e-5,-1.7433879737981824e-5,-1.0763229561035464e-8,3.066988743140981e-5,-1.7365039408173015e-5,-1.0767308977273792e-8,3.104156445903691e-5,-1.7226340848682806e-5,-1.0772421289059723e-8,3.138958150404849e-5,-1.7020431608455362e-5,-1.0778433463519163e-8,3.169160978062888e-5,-1.67599800034654e-5,-1.0785050830896731e-8,3.193113385062856e-5,-1.6466649719056538e-5,-1.0791801522036606e-8,3.2100549457274216e-5,-1.6168735086317945e-5,-1.0798090040294278e-8,3.2203473041458363e-5,-1.5897357896149383e-5,-1.080332573716205e-8,3.225558795119785e-5,-1.568153341658853e-5,-1.0807089151843031e-8,3.2283527758016355e-5,-1.5542734995758057e-5,-1.0809272801144117e-8,3.232156973954858e-5,-1.548986537631878e-5,-1.0810136690642487e-8,3.24062788787755e-5,-1.551564386066977e-5,-1.0810253821627843E-08,3.256954672694955e-5,-1.5595319915829232e-5,-1.0810370807169095e-8,3.2830743045217534e-5,-1.5688646392023816e-5,-1.0811243374832355e-8,3.318930936264058e-5,-1.5746136030541182e-5,-1.0813499406816032e-8,3.362016828548337e-5,-1.572010074949781e-5,-1.0817540474292183e-8,3.4075238666891787e-5,-1.5579179787124913e-5,-1.0823450353064908e-8,3.449382518613816e-5,-1.532196370613026e-5,-1.0830892582439516e-8,3.482107455406541e-5,-1.498254328611866e-5,-1.0839063244369992e-8,3.502767239053273e-5,-1.4622079522363778e-5,-1.0846829814097262e-8,3.5120439857015004e-5,-1.4307820231652071e-5,-1.085309302508078e-8,3.51375862864246e-5,-1.4089687106817873e-5,-1.085719959088525e-8,3.513199200269295e-5,-1.3986345854532377e-5,-1.085914650566585e-8,3.51525500412995e-5,-1.3985560988209588e-5,-1.085947705163363e-8,3.523209339490654e-5,-1.4054646803086456e-5,-1.0858988747294016e-8,3.5384088933798624e-5,-1.4153334684894148e-5,-1.0858452300955869e-8,3.560538153213612e-5,-1.4243709791482467e-5,-1.0858457682387729e-8,3.5881218350812025e-5,-1.4295764431560704e-5,-1.0859389106431877e-8,3.619005612992247e-5,-1.4289538747822578e-5,-1.0861464399875234e-8,3.650727263331189e-5,-1.4215445163763979e-5,-1.0864770150441248e-8,3.680795793798622e-5,-1.4073968871802461e-5,-1.0869255064842456e-8,3.7069338849790505e-5,-1.3875233842953704e-5,-1.0874690311021376e-8,3.7273324238066565e-5,-1.3638322204225281e-5,-1.0880636211450608e-8,3.740935211446729e-5,-1.338984019635138e-5,-1.0886460859978193e-8,3.747723555199965e-5,-1.3161108246832657e-5,-1.0891439508632244e-8,3.748918890039127e-5,-1.2983612439641286e-5,-1.0894923864558378e-8,3.746992648426565e-5,-1.2882969889767162e-5,-1.0896531846094513e-8,3.745388166964016e-5,-1.2872486930655807e-5,-1.089628939077259e-8,3.7479301400060466e-5,-1.2948111531254483e-5,-1.089466332568615e-8,3.758006931596514e-5,-1.3086710784613064e-5,-1.0892467653005773e-8,3.7777099336497654e-5,-1.3248905734680901e-5,-1.0890674230236611e-8,3.807156828641263e-5,-1.3386503835473725e-5,-1.0890190192257392e-8,3.844207700891592e-5,-1.3453370708504295e-5,-1.0891659080748418e-8,3.8847217212184006e-5,-1.341755372714709e-5,-1.0895313751720727e-8,3.9234030267991595e-5,-1.3271607631699584e-5,-1.090089279363746e-8,3.955132226947631e-5,-1.3037539781839813e-5,-1.0907643242370493e-8,3.976462669241938e-5,-1.2763223288738137e-5,-1.0914452499003047e-8,3.9867493531828635e-5,-1.250952451713426e-5,-1.0920130006578416e-8,3.988372523989806e-5,-1.2331758085782543e-5,-1.0923768775661982e-8,3.9858740281902724e-5,-1.226291312067013e-5,-1.0925025267279314e-8,3.98438771345933e-5,-1.2305852412647015e-5,-1.0924174807119913e-8,3.988096864166715e-5,-1.2436775734862486e-5,-1.092193559817097e-8,3.9993234799773925e-5,-1.2616327199137168e-5,-1.0919186656117713e-8,4.0184029323987886e-5,-1.2802124998079611e-5,-1.0916728214422174e-8,4.0441034122307655e-5,-1.295806215039957e-5,-1.0915158387722742e-8,4.07423430323965e-5,-1.3059008181614689e-5,-1.0914851840032176e-8,4.106194258997215e-5,-1.309190696252388e-5,-1.0915982377055156e-8,4.137369026554492e-5,-1.305496471159586e-5,-1.0918538217819229e-8,4.165397699143815e-5,-1.295627528662622e-5,-1.0922312589289403e-8,4.188372567499801e-5,-1.281253335343146e-5,-1.0926886273075621e-8,4.205038798547874e-5,-1.2647779157268254e-5,-1.0931637253225023e-8,4.2150263329725885e-5,-1.2491600175957169e-5,-1.0935808929506866e-8,4.219089514943613e-5,-1.2376014975777942e-5,-1.0938645719799141e-8,4.219264556971658e-5,-1.2330443038611213e-5,-1.0939574041035733e-8,4.2187994684927e-5,-1.2374868917154073e-5,-1.0938381011529256e-8,4.221708942536862e-5,-1.251262722220375e-5,-1.0935330563847715e-8,4.2319148750577894e-5,-1.272563608677644e-5,-1.0931164753811414e-8,4.252146931834362e-5,-1.2975210570017808e-5,-1.0926967333923104e-8,4.282981205890698e-5,-1.3209939979367455e-5,-1.0923913734952636e-8,4.3224317253663856e-5,-1.3379021269503886e-5,-1.092296888156952e-8,4.3663191015489984e-5,-1.3446687017306154e-5,-1.0924616375420668e-8,4.40932553261884e-5,-1.3402692615521834e-5,-1.0928699864093918e-8,4.446391154055205e-5,-1.3265486287865059e-5,-1.0934436131087437e-8,4.4740262897078254e-5,-1.3077370375528966e-5,-1.0940609312170373e-8,4.491180449520049e-5,-1.2893262674070154e-5,-1.0945898968800855e-8,4.49944176700801e-5,-1.2766207079580588e-5,-1.0949239480507803e-8,4.502512200115446e-5,-1.273370298418019e-5,-1.0950092267772875e-8,4.505116850684658e-5,-1.2808910095088956e-5,-1.0948539845884595e-8,4.511705275984765e-5,-1.2979305349759284e-5,-1.0945188231944347e-8,4.5253768849291526e-5,-1.3212635289537497e-5,-1.0940942427650663e-8,4.547343858202198e-5,-1.3467274984818715e-5,-1.093675586758881e-8,4.576991139681106e-5,-1.370288962080165e-5,-1.0933437996680767e-8,4.6123562686564354e-5,-1.3888173614010929e-5,-1.0931552459312198e-8,4.6507586318521756e-5,-1.4004532581867268e-5,-1.0931388495325245e-8,4.689364295154041e-5,-1.404638935558007e-5,-1.0932970781736282e-8,4.725592017948633e-5,-1.401955872819049e-5,-1.0936077710211673e-8,4.7573669880768315e-5,-1.3939013934426217e-5,-1.0940262282537435e-8,4.783282623871706e-5,-1.3826794886489019e-5,-1.0944887017204275e-8,4.8027394648472436e-5,-1.3710116999369636e-5,-1.0949190756732851e-8,4.816102679731794e-5,-1.361918978051325e-5,-1.095239527820225e-8,4.824866180786038e-5,-1.3583965343721564e-5,-1.0953844774146032e-8,4.8317389669767263E-05,-1.3629077500997938e-5,-1.0953156144793383e-8,4.8404937665998705e-5,-1.3766894228811147e-5,-1.0950352515756894e-8,4.85539270343216e-5,-1.3990186698127629e-5,-1.094594628661613e-8,4.880120852726276e-5,-1.4267952993854126e-5,-1.0940929580088114e-8,4.9164604434804093e-5,-1.4548760923785778e-5,-1.0936627198037842e-8,4.963284107903462e-5,-1.4773613411439147e-5,-1.0934389782899522e-8,5.016508945338154e-5,-1.4894876338232566e-5,-1.0935178671721424e-8,5.070227547728938e-5,-1.4892932210451892e-5,-1.0939190020118924e-8,5.118560276541905e-5,-1.4782534477633037e-5,-1.0945713139716886e-8,5.157392379064546e-5,-1.4606625431828425e-5,-1.095332893238933e-8,5.185338963389235e-5,-1.4421810233716862e-5,-1.0960371481365232e-8,5.203770610741841e-5,-1.4282157086463557e-5,-1.0965440644733544e-8,5.216122418436789e-5,-1.422646572966351e-5,-1.0967760623641757e-8,5.226841451573015e-5,-1.4271353392898255e-5,-1.0967288706004566e-8,5.2402901302713924e-5,-1.4410350265664105e-5,-1.0964601820102489e-8,5.2598368352539667e-5,-1.4617978010402564e-5,-1.0960658830434025e-8,5.2872840342696726e-5,-1.4857176091440661e-5,-1.0956540629101209e-8,5.322704970841118e-5,-1.5088075305254894e-5,-1.0953236332976238e-8,5.364663492512684e-5,-1.5275993367745722e-5,-1.0951500603035131e-8,5.410696514106418e-5,-1.539698624027727e-5,-1.095178087382418e-8,5.457893133346143e-5,-1.5440298921740233e-5,-1.0954194761142424e-8,5.50342383558213e-5,-1.540806131983914e-5,-1.0958542424790509e-8,5.544932692850507e-5,-1.5313173657149106e-5,-1.096434545062792e-8,5.580777697902618e-5,-1.5176465955951547e-5,-1.0970910845978872e-8,5.610161114139606e-5,-1.502389729946295e-5,-1.0977420875607443e-8,5.633207828382777e-5,-1.4883981469539802e-5,-1.0983045974823884e-8,5.651030827952544e-5,-1.4785143953867945e-5,-1.0987069782932988e-8,5.6657843445042456E-05,-1.475241870537396e-5,-1.098900869828785e-8,5.68064043339674e-5,-1.480281230944594e-5,-1.0988713689162896e-8,5.6995445257911e-5,-1.493919710310919e-5,-1.0986451645489575e-8,5.726569833881333e-5,-1.5144085304198487e-5,-1.0982961665724738e-8,5.7647873217573626e-5,-1.537676462498628e-5,-1.097945336000276e-8,5.8148783022304093e-5,-1.5578618482013747e-5,-1.0977468969124607e-8,5.8741629395056166e-5,-1.5689303712884644e-5,-1.0978518978595156e-8,5.936880170599819e-5,-1.5669452550320848e-5,-1.0983516728908241e-8,5.995982222233368e-5,-1.5518212400740367e-5,-1.0992265385709335e-8,6.045655109961612e-5,-1.5274524989521094e-5,-1.100336461316192e-8,6.083213388443301e-5,-1.500128721893175e-5,-1.1014687824535179e-8,6.109517706905173e-5,-1.476232162248893e-5,-1.1024177858417426e-8,6.128078642644321e-5,-1.4603933293794295e-5,-1.1030515003487311e-8,6.14360565632286e-5,-1.4546623392676997e-5,-1.1033379525122147e-8,6.160676979381152e-5,-1.4585862441534919e-5,-1.1033325129027129e-8,6.182836446050053e-5,-1.4698115916188576e-5,-1.103144492460905e-8,6.212137962144658e-5,-1.4848716247797194e-5,-1.1029016395917635e-8,6.249043218855688e-5,-1.499957486442772e-5,-1.1027231651313366e-8,6.292575713367833e-5,-1.5115848315998846e-5,-1.1027035010884309e-8,6.340659244996193e-5,-1.5171078050374148e-5,-1.1029042575856415e-8,6.39057084276371e-5,-1.5150397168465046e-5,-1.1033511588368882e-8,6.439430170432664e-5,-1.5051632264841132e-5,-1.1040338007405747e-8,6.484651366485014e-5,-1.4884453987230887e-5,-1.1049078955669309e-8,6.524295871579131e-5,-1.4668006957840344e-5,-1.1059009733669053e-8,6.557293822920603e-5,-1.4427696477046931e-5,-1.106922243082436e-8,6.583546021894932e-5,-1.4191801641639522e-5,-1.1078757988711264e-8,6.603942429151922e-5,-1.3988227254888844e-5,-1.1086754263160646e-8,6.620324712438544e-5,-1.3841351539194972e-5,-1.1092584244638724e-8,6.635399675116738e-5,-1.376871069724712e-5,-1.1095960923446284e-8,6.652567539394843e-5,-1.377713360613599e-5,-1.1097002545640146e-8,6.675562941069513e-5,-1.3858317394900903e-5,-1.109626926494747e-8,6.707780774668518e-5,-1.3985038180359028e-5,-1.1094780789983727e-8,6.751241829499467e-5,-1.4110813964274978e-5,-1.1093985695546706e-8,6.805398404589733e-5,-1.4176969697956724e-5,-1.1095592658974113e-8,6.866384590550756e-5,-1.4129570457204582e-5,-1.1101140430408416e-8,6.927548828970987e-5,-1.3942193950697216e-5,-1.1111323602410547e-8,6.981586375490909e-5,-1.3632135932979031e-5,-1.1125409233657399e-8,7.023376113526364e-5,-1.3257268294156674e-5,-1.1141255562749935e-8,7.051856313032443e-5,-1.2893039413830864e-5,-1.1156102060587921e-8,7.06990864524921e-5,-1.2603544775620664e-5,-1.1167680283957444e-8,7.082667807448929e-5,-1.2422764469719474e-5,-1.1174960488599823e-8,7.095499623308146e-5,-1.2351727669469376e-5,-1.1178226969257668e-8,7.112590319904138e-5,-1.2366745927631601e-5,-1.1178667858819269e-8,7.136360199813396e-5,-1.2431038164156497e-5,-1.117783577309838e-8,7.167471562637514e-5,-1.2504825814492575e-5,-1.1177222677717251e-8,7.20513073116622e-5,-1.2552337068439892e-5,-1.1178022183958767e-8,7.247483939519828e-5,-1.2546082636510993e-5,-1.1181041603564716e-8,7.292025057925622e-5,-1.2469246626440453e-5,-1.1186692155499417e-8,7.335996924164086e-5,-1.2316707228409032e-5,-1.1195001134773114e-8,7.376777185043507e-5,-1.2094851223874839e-5,-1.1205627668886617e-8,7.41223204444516e-5,-1.1820215935622424e-5,-1.1217891224875756e-8,7.441008632046292e-5,-1.1516986111407657e-5,-1.1230839822596301e-8,7.462727595584035e-5,-1.121357421653002e-5,-1.1243374292470443e-8,7.478054238337684e-5,-1.0938760084437633e-5,-1.1254418929902535e-8,7.48865297826223e-5,-1.0717820966566956e-5,-1.1263107130437595e-8,7.497036903850236e-5,-1.0568904309436396e-5,-1.1268942299422062e-8,7.506321783824891e-5,-1.0499811842188604e-5,-1.1271900341615984e-8,7.519881869817697e-5,-1.0505257389349248e-5,-1.1272463646632064e-8,7.540869080999105e-5,-1.056479190521469e-5,-1.1271600290428743e-8,7.571546174872404e-5,-1.0642370424357846e-5,-1.1270700670162078e-8,7.61246291272292e-5,-1.0689513165947758e-5,-1.1271446895380041e-8,7.661678435223831e-5,-1.0654320433158899e-5,-1.1275546237460665e-8,7.71448147730922e-5,-1.0497201563490087e-5,-1.1284249952033519e-8,7.764205458950148e-5,-1.0209521680141907e-5,-1.1297711821998253e-8,7.804347387462571e-5,-9.824875614952504e-6,-1.1314530735816466e-8,7.831185681715099e-5,-9.411967862924406e-6,-1.133196933848187e-8,7.84533388443129e-5,-9.048847109690942e-6,-1.134696307423481e-8,7.851205357156255e-5,-8.792740654590127e-6,-1.1357361358067248e-8,7.854866512846068e-5,-8.662856311024963e-6,-1.1362623719687482e-8,7.861729582289454e-5,-8.642245361453145e-6,-1.1363680031735883e-8,7.875197622822127e-5,-8.691794929389404e-6,-1.1362277223349593e-8,7.896418283479847e-5,-8.765841602924702e-6,-1.1360297098831838e-8,7.924709191886245e-5,-8.823284793479496e-6,-1.1359315593534433e-8,7.95818503140842e-5,-8.833269852576455e-6,-1.1360426738010168e-8,7.994322616848324e-5,-8.777041367256928e-6,-1.1364233495034238e-8,8.030394161526125e-5,-8.647855079034407e-6,-1.1370898907447606e-8,8.063800618353983e-5,-8.450099063104403e-6,-1.13801913797548e-8,8.092351739561471e-5,-8.197986994855086e-6,-1.139151507594174e-8,8.114517708580553e-5,-7.913748681025796e-6,-1.1403947928868321e-8,8.129649091610874e-5,-7.625053643838189e-6,-1.1416325803923466e-8,8.13812925714093e-5,-7.361498470228608e-6,-1.1427396960663914e-8,8.141408671042445e-5,-7.150374877007221e-6,-1.143603391639288e-8,8.141887617018724e-5,-7.012246466696308e-6,-1.1441458496670813e-8,8.142639354204631e-5,-6.9569547070524565e-6,-1.1443423882852663e-8,8.146989071188947e-5,-6.980733178277085e-6,-1.1442305223764873e-8,8.157988588747373e-5,-7.0650386142183395e-6,-1.1439079612900346e-8,8.177834068751832e-5,-7.177494714956207e-6,-1.1435206339439226e-8,8.207274310460953e-5,-7.275416748518267e-6,-1.1432431508335396e-8,8.24510452990543e-5,-7.312655501458012e-6,-1.1432513684254343e-8,8.287939415777408e-5,-7.250137973215447e-6,-1.14368513607406e-8,8.330545375814392e-5,-7.068926237825051e-6,-1.1446018896562171e-8,8.366980628525399e-5,-6.781801504635946e-6,-1.1459328098698728e-8,8.392475651610919e-5,-6.436424280153653e-6,-1.147469615909485e-8,8.405365240588183e-5,-6.103856380286995e-6,-1.1489120917511639e-8,8.407948845031888e-5,-5.853970011362507e-6,-1.1499731792143241e-8,8.405583920133282e-5,-5.729599983451548e-6,-1.1504887252346792e-8,8.404479026302159e-5,-5.733734864168806e-6,-1.1504668019600196e-8,8.409487550610288e-5,-5.8348805222652595e-6,-1.1500567610929476e-8,8.422953279231353e-5,-5.983832090974439e-6,-1.1494726575699467e-8,8.44475135877195e-5,-6.130958240035688e-6,-1.1489203384318796e-8,8.473016954110671e-5,-6.237308506807428e-6,-1.1485549198160168e-8,8.504997460131159e-5,-6.278822698858891e-6,-1.1484684339034437e-8,8.537722202659041e-5,-6.24604350020151e-6,-1.1486947837148801e-8,8.56843216611937e-5,-6.141962433049987e-6,-1.149219497561945e-8,8.594839135529726e-5,-5.979584647913548e-6,-1.1499878642207251e-8,8.615303700245352e-5,-5.7797022876110846e-6,-1.1509108282661373e-8,8.628989016331793e-5,-5.568700527437504e-6,-1.1518717192858226e-8,8.636003840534361e-5,-5.3759285752394796e-6,-1.1527377565087991e-8,8.637502793286532e-5,-5.230188533993722e-6,-1.1533784620290696e-8,8.635675385529202e-5,-5.155286769746592e-6,-1.1536897415011626e-8,8.63355224875678e-5,-5.165182714998419e-6,-1.1536184302568082e-8,8.634591892159362e-5,-5.259775561616308e-6,-1.1531803962477889e-8,8.642073115040163e-5,-5.4226586174864975e-6,-1.152465872996433e-8,8.65839351077441e-5,-5.622046886179956e-6,-1.1516287597576716e-8,8.684430755827092e-5,-5.8153923203604484e-6,-1.1508609070013934e-8,8.719130249188195e-5,-5.95728092691672e-6,-1.1503558232602766e-8,8.759455242721197e-5,-6.009491974966764e-6,-1.150267039330855e-8,8.800800850055604e-5,-5.95147211987009e-6,-1.1506668360848453e-8,8.837913286366379e-5,-5.7886627769627485e-6,-1.1515138637633855e-8,8.866225574551908e-5,-5.555373933240397e-6,-1.1526431984484355e-8,8.883301404506053e-5,-5.309063543337344e-6,-1.1537937388838975e-8,8.889840023466499e-5,-5.115164449411993e-6,-1.1546777723907165e-8,8.889656623832367e-5,-5.026383401286591e-6,-1.1550737585091733e-8,8.888441107440784e-5,-5.065123260574208e-6,-1.154900893343037e-8,8.891787950494431e-5,-5.21765631045529e-6,-1.1542374452129857e-8,8.903443511633252e-5,-5.442337151279303e-6,-1.1532775965427147e-8,8.924516874443352e-5,-5.686194762207577e-6,-1.1522563607641413e-8,8.953744138069596e-5,-5.90108623252899e-6,-1.1513813593362013e-8,8.988360538093972e-5,-6.053558073616242e-6,-1.1507938669655695e-8,9.025045498071756e-5,-6.127657333921901e-6,-1.1505594789433005e-8,9.06062942791196e-5,-6.123105910016481e-6,-1.1506768232466762e-8,9.092503624012695e-5,-6.051676523403866e-6,-1.1510921388865986e-8,9.118813404710323e-5,-5.933591903961702e-6,-1.1517128603869335e-8,9.138545565664259e-5,-5.794575433039127e-6,-1.1524189430321015e-8,9.151591271894805e-5,-5.66334449111308e-6,-1.1530742462923101e-8,9.158811085003475e-5,-5.568946066028995e-6,-1.1535410442970295e-8,9.162072310193748e-5,-5.537335450390624e-6,-1.1536995250412474e-8,9.164182458652515e-5,-5.58694690455087e-6,-1.1534711584048976e-8,9.168620213239225e-5,-5.723696108466005e-6,-1.152841879943091e-8,9.178992959661302e-5,-5.936777568263604e-6,-1.1518779345972147e-8,9.198249027190544e-5,-6.197337314678204e-6,-1.1507263760530225e-8,9.227820821065515e-5,-6.461935833751877e-6,-1.1495944136778205e-8,9.266993147833276e-5,-6.6812950165578724e-6,-1.1487076652143873e-8,9.31278874804674e-5,-6.8125918600802576e-6,-1.1482550916430714e-8,9.360510332344588e-5,-6.831677883244499e-6,-1.1483350519634967e-8,9.404841563306238e-5,-6.741163582188049e-6,-1.1489195433374426e-8,9.441208477567966e-5,-6.57151688468949e-6,-1.1498505989231926e-8,9.467017588287623e-5,-6.374429642810231e-6,-1.1508741618074349e-8,9.482411049793587e-5,-6.20983930092064e-6,-1.1517053215341923e-8,9.490280063124226e-5,-6.12986333255191e-6,-1.1521069363394867e-8,9.49546446025167e-5,-6.164351503798526e-6,-1.1519561592846616e-8,9.503343971679581e-5,-6.312991752990002e-6,-1.1512751366586703e-8,9.518296893644879e-5,-6.546957614728857e-6,-1.1502154648514587e-8,9.54258618892581e-5,-6.819249442704191e-6,-1.1490053068776307e-8,9.576033063758811e-5,-7.079181183195936e-6,-1.147882172959562e-8,9.616458460450145e-5,-7.285251177458946e-6,-1.1470361003639736e-8,9.660557779129375e-5,-7.412533789784719e-6,-1.1465779950685564e-8,9.70480253349657e-5,-7.454061673847203e-6,-1.1465342600263835e-8,9.746107955264904e-5,-7.418094434670623e-6,-1.1468592015480105e-8,9.782204348641294e-5,-7.323724614127018e-6,-1.1474549309030842e-8,9.811778004559563e-5,-7.196576837891347e-6,-1.1481914889362466e-8,9.834488254743438e-5,-7.065336659585935e-6,-1.1489242896633806e-8,9.85094970832235e-5,-6.958985648334306e-6,-1.1495095179541215e-8,9.862717385640469e-5,-6.90413645241066e-6,-1.1498196338733799e-8,9.8722513616579e-5,-6.921815594705209e-6,-1.1497607920369037e-8,9.882784972662761e-5,-7.023345607949021e-6,-1.1492923262731212e-8,9.897986411696639e-5,-7.205665995436498e-6,-1.148446098537155e-8,9.921318771121227e-5,-7.447586546246423e-6,-1.1473395307025696e-8,9.955120060763667e-5,-7.709619295232465e-6,-1.146172404791077e-8,9.999642762624879e-5,-7.940035443749168e-6,-1.1451968869426325e-8,1.0052494732063333e-4,-8.087647613726074e-6,-1.1446579632065744e-8,1.0108913471724907e-4,-8.117933472199266e-6,-1.1447169892722494e-8,1.016297505105532e-4,-8.025879558080473e-6,-1.1453875399227287e-8,1.0209339869072522e-4,-7.839290063002508e-6,-1.1465163461608666e-8,1.0244827762320929e-4,-7.610760831100816e-6,-1.1478236898852096e-8,1.0269227243374284e-4,-7.4019405703705335e-6,-1.1489879553959839e-8,1.0285149371859283e-4,-7.266368505272329e-6,-1.1497391887392736e-8,1.0297118136782965e-4,-7.236336161787715e-6,-1.1499280042755185e-8,1.0310270675950262e-4,-7.316726316035047e-6,-1.1495523318503002e-8,1.0329056362595021e-4,-7.486349598341804e-6,-1.148742159707798e-8,1.0356255453322497e-4,-7.705430672579288e-6,-1.1477144225777614e-8,1.0392519544575366e-4,-7.926623660176716e-6,-1.1467147125266295e-8,1.0436481553339658e-4,-8.106347722194308e-6,-1.1459615835618466e-8,1.048532139215313e-4,-8.213492770649762e-6,-1.1456056721422704e-8,1.0535556460250918e-4,-8.23373787288498e-6,-1.1457100913129077e-8,1.0583805546501133e-4,-8.169439622731186e-6,-1.1462518463608636e-8,1.0627352735391126e-4,-8.036400609196678e-6,-1.1471385560392026e-8,1.066445607363988e-4,-7.859266130393587e-6,-1.1482325768957206e-8,1.0694441306334356e-4,-7.666977342055716e-6,-1.1493758257334187e-8,1.0717666268625118e-4,-7.489017281889044e-6,-1.1504111986789331e-8,1.0735435490295485e-4,-7.35244966639261e-6,-1.1511999323604564e-8,1.0749903983642938e-4,-7.2792806829164845e-6,-1.1516363131548234e-8,1.0763957831135115e-4,-7.283580274524651e-6,-1.151661702847303e-8,1.0781007680501017e-4,-7.368012685883945e-6,-1.1512793302970118e-8,1.0804590054700001e-4,-7.520061810504988e-6,-1.1505692043057436e-8,1.0837680611466255e-4,-7.709425069854278e-6,-1.1496977420176755e-8,1.0881740161785823e-4,-7.889347522041987e-6,-1.1489103221812277e-8,1.0935759791410143e-4,-8.004876957400208e-6,-1.1484917776821892e-8,1.099584343313986e-4,-8.008601428695032e-6,-1.1486882532745956e-8,1.1055881062444225e-4,-7.879155597116695e-6,-1.1496092004950944e-8,1.1109371258594231e-4,-7.633039843956237e-6,-1.1511581608136922E-08,1.1151663459051103e-4,-7.321605202687162e-6,-1.1530431309502565e-8,1.1181492903404441e-4,-7.013454241810893e-6,-1.1548741122352925e-8,1.1201106022014476e-4,-6.771340174468865e-6,-1.1562985724005811e-8,1.1215140197415839e-4,-6.634405209780007e-6,-1.1571068149846324e-8,1.1228984212495073e-4,-6.611278102413541e-6,-1.1572697123814852e-8,1.1247315925664164e-4,-6.6831267112462406e-6,-1.1569144942454731e-8,1.127316993096942e-4,-6.812598750203812e-6,-1.156266778319374e-8,1.1307579932787652e-4,-6.954602663343077e-6,-1.1555859496188551e-8,1.1349688400417341e-4,-7.066217820959545e-6,-1.1551101049908461e-8,1.139717903089487e-4,-7.114299397794903e-6,-1.1550167056351804e-8,1.1446891416054345e-4,-7.080077937874377e-6,-1.1554002562827165e-8,1.149548174283551e-4,-6.960537575809596e-6,-1.1562667346861427e-8,1.1540007923220339e-4,-6.766933444370123e-6,-1.1575426285469924e-8,1.1578354861211906e-4,-6.521295786051894e-6,-1.1590947546989276e-8,1.1609463410885247e-4,-6.2519478086589645e-6,-1.160756007562344e-8,1.1633376296363593e-4,-5.989012039941205e-6,-1.1623518348194946e-8,1.1651156393922294e-4,-5.760573051355079e-6,-1.1637234212047214e-8,1.1664740182339614e-4,-5.589622358594828e-6,-1.1647459659802337e-8,1.1676759334021895e-4,-5.4915067272458905e-6,-1.1653428976732367e-8,1.1690326783015823e-4,-5.471531648050538e-6,-1.1654974611229112e-8,1.1708746557034123e-4,-5.5225030012895636e-6,-1.1652632718742514e-8,1.1735068033667883e-4,-5.622479874781477e-6,-1.1647735276380047e-8,1.1771412944112854e-4,-5.734062550996382e-6,-1.1642435438662262e-8,1.1818113725851937e-4,-5.8076621481172495e-6,-1.163954187668793e-8,1.1872926880585935e-4,-5.791344442245663e-6,-1.1642004245374285e-8,1.1930855430309953e-4,-5.647553044674574e-6,-1.1651984086518556e-8,1.1985155215788543e-4,-5.371443175151925e-6,-1.1669760410394222e-8,1.2029547121095116e-4,-4.99995084485974e-6,-1.1693115291372944e-8,1.2060678781026997e-4,-4.6024408688642385e-6,-1.1717833613867049e-8,1.2079400904598451e-4,-4.255199093046226e-6,-1.173926368756903e-8,1.2090126966665237e-4,-4.0137842781003e-6,-1.1754062382778059e-8,1.2098843584166365e-4,-3.897678566972292e-6,-1.176115704922468e-8,1.2111008984554611e-4,-3.891400665164609e-6,-1.1761637208694449e-8,1.213022496940009e-4,-3.95630760713687e-6,-1.1757971241563372e-8,1.2157839399120963e-4,-4.044896229076136e-6,-1.1753097167220337e-8,1.2193195516922581e-4,-4.112420305157807e-6,-1.1749718015863004e-8,1.2234182152848596e-4,-4.124267718560327e-6,-1.174987984666976e-8,1.227785275255919e-4,-4.059624660286843e-6,-1.1754780294877045e-8,1.2321007408265877e-4,-3.9124489345179326e-6,-1.1764728817057517e-8,1.2360698042256985e-4,-3.6904598768444323e-6,-1.1779212189448352e-8,1.2394631226203136e-4,-3.4126109266878824e-6,-1.1797041115608418e-8,1.242144823774108e-4,-3.1055077065965403e-6,-1.1816559520484416e-8,1.2440867826661164e-4,-2.799226073876711e-6,-1.1835897138338729e-8,1.2453685337986063e-4,-2.523031477587932e-6,-1.1853238148010125e-8,1.2461646512564885e-4,-2.301547896694e-6,-1.186706784611472e-8,1.2467235994619418e-4,-2.1516861724259745e-6,-1.1876371614580685e-8,1.2473410454800834e-4,-2.0803083645591164e-6,-1.1880779589050701e-8,1.2483283115915695e-4,-2.0825349597226646e-6,-1.1880660082478308e-8,1.2499748069359724e-4,-2.14069314709482e-6,-1.1877165836353078e-8,1.2525010295091812e-4,-2.2241823656063393e-6,-1.1872226457607199e-8,1.2559995192754653e-4,-2.2912602137460035e-6,-1.1868437590207958e-8,1.2603705811992328e-4,-2.2945068883105327e-6,-1.1868742828901586e-8,1.2652772420829495e-4,-2.191539426597471e-6,-1.1875794007561012e-8,1.2701630641300356e-4,-1.9604423994929207e-6,-1.1890987874401511e-8,1.2743771444703272e-4,-1.6147035257241735e-6,-1.1913481241468902e-8,1.2774003479321577e-4,-1.2075860053489198e-6,-1.1939854087612531e-8,1.2790733523272295e-4,-8.17705683285339e-7,-1.1965019553764724e-8,1.279679628288094e-4,-5.194673008425952e-7,-1.1984174542305361e-8,1.279816584662349e-4,-3.5470155045429583e-7,-1.1994671485721905e-8,1.280138942373341e-4,-3.2155917529888203e-7,-1.1996712018024326e-8,1.2811314916667707e-4,-3.832848611376374e-7,-1.1992721904466058e-8,1.2830082617175774e-4,-4.869902782138533e-7,-1.198611016092719e-8,1.2857305116365837e-4,-5.810461096132203e-7,-1.1980164163535222E-08,1.289084172136336e-4,-6.257202090277428e-7,-1.197740043466469e-8,1.2927653296285668e-4,-5.972525154990381e-7,-1.1979329944634138e-8,1.2964491995966202e-4,-4.877474608997493e-7,-1.1986472365228349e-8,1.2998387075651414e-4,-3.031311612369654e-7,-1.1998477370081351e-8,1.3026979244258862e-4,-6.038288953220458e-8,-1.2014282732417834e-8,1.3048752957989842e-4,2.1562191863560383e-7,-1.2032296857404085e-8,1.3063183983413705e-4,4.956069602951913e-7,-1.2050612633462722e-8,1.3070798712429174e-4,7.49696777087375e-7,-1.2067254493324593e-8,1.3073127127371782e-4,9.513984761652111e-7,-1.2080450782354818e-8,1.3072533232997706e-4,1.0813761032640532e-6,-1.2088898078971734e-8,1.3071932425519906e-4,1.1305045965556356e-6,-1.2091976791290884e-8,1.3074424349902703e-4,1.1018477731859764e-6,-1.2089887050399828e-8,1.3082870101893535e-4,1.0113362985932872e-6,-1.2083690937629776e-8,1.3099441618179766e-4,8.869501908669666e-7,-1.2075251931326807e-8,1.3125168068481923e-4,7.662116754938402e-7,-1.2067066918911372e-8,1.3159510738595574e-4,6.915586905267705e-7,-1.2061965515433264e-8,1.3200056820097142e-4,7.028841658829567e-7,-1.2062624571151364e-8,1.3242528918228636e-4,8.270198550287169e-7,-1.2070869118686841e-8,1.3281385380364976e-4,1.0657937989025924e-6,-1.2086852795495238e-8,1.3311208615874337e-4,1.3873940278361398e-6,-1.2108442324416934e-8,1.3328674475046086e-4,1.728378788589479e-6,-1.2131335420364398e-8,1.333423026531807e-4,2.011359960326922e-6,-1.2150284217646462e-8,1.333230859574093e-4,2.173641367897251e-6,-1.2161076558038903e-8,1.3329628509418603e-4,2.1916886718834704e-6,-1.2162183678561086e-8,1.3332488742110422e-4,2.0869799011873835e-6,-1.2155091872515184e-8,1.3344631607287334e-4,1.9118834458728775e-6,-1.214330168860428e-8,1.3366614959370036e-4,1.7270017762180142e-6,-1.213081977253317e-8,1.339647660819936e-4,1.5827822630531564e-6,-1.2120978054806648e-8,1.3430900171919165e-4,1.5107505188582636e-6,-1.2115885232530696e-8,1.346625507586368e-4,1.5227555156633589e-6,-1.2116379839448163e-8,1.3499278908367805e-4,1.6143357752029857e-6,-1.2122232655650623e-8,1.352743630890875e-4,1.7691319425712106e-6,-1.2132411706736463e-8,1.3549082147805045e-4,1.9628976716705375e-6,-1.214532559179744e-8,1.3563536205606977e-4,2.1669414090184472e-6,-1.2159041601093816e-8,1.3571114539193986e-4,2.3513531864422336e-6,-1.2171504657912729e-8,1.3573115122892719e-4,2.488365757099318e-6,-1.218077928907646e-8,1.3571726302195615e-4,2.555989521491244e-6,-1.2185316078541546e-8,1.3569814446294577e-4,2.5416602671032738e-6,-1.2184217684665625e-8,1.3570568585111713e-4,2.4452206623935392e-6,-1.2177449976565543e-8,1.3577024230789847e-4,2.280427964073108e-6,-1.216594442676682e-8,1.3591527737192273e-4,2.0743135607314645e-6,-1.2151550454018783e-8,1.361522991152803e-4,1.8640121265254014e-6,-1.213681987513195e-8,1.3647708727637718e-4,1.6911483786144465e-6,-1.2124630980449703e-8,1.3686810998498884e-4,1.5943000966245994e-6,-1.211767957644585e-8,1.3728794824521178e-4,1.6002951590033876e-6,-1.2117875538135754e-8,1.376885995265603e-4,1.715563961241601e-6,-1.2125719871977474e-8,1.380212492054774e-4,1.9198116421548985e-6,-1.2139827416802713e-8,1.3824979653251647e-4,2.16545754172393e-6,-1.2156862702966804e-8,1.3836476748777283e-4,2.3863798766054845e-6,-1.2172165361997345e-8,1.3839118089512586e-4,2.516681597723158e-6,-1.2181109204786456e-8,1.383836958661086e-4,2.5139173425388923e-6,-1.2180756018019766e-8,1.3840809682379775e-4,2.3754960365028225e-6,-1.2170971847677191e-8,1.3851731397930713e-4,2.1385549249810985e-6,-1.2154358737266609e-8,1.387345180742526e-4,1.8635150257748393e-6,-1.2135089041809021e-8,0.00013905061657867654,1.6115027181214983e-6,-1.21173713319074e-8,1.3943376606727773e-4,1.4271981388203693e-6,-1.2104305360794658e-8,1.3984300364040437e-4,1.3321511005655048e-6,-1.2097427842395805e-8,1.4023941764179271e-4,1.3266107575433846e-6,-1.2096814698533307e-8,1.4059252722173118e-4,1.3952876797859035e-6,-1.2101447432625885e-8,1.4088264636512158e-4,1.5134604515907064e-6,-1.2109616882522158e-8,1.4110100645417162e-4,1.651840139911393e-6,-1.211925900245617e-8,1.4124909369002032e-4,1.780117071596497e-6,-1.212821380203447e-8,1.41337902381737e-4,1.8698047521882043e-6,-1.2134441476175163e-8,1.413871243968482e-4,1.897057213198281e-6,-1.2136236886680415e-8,1.4142383018431504e-4,1.845841427761066e-6,-1.2132461012287831e-8,1.4147997719204125e-4,1.7113175489430788e-6,-1.2122777537746821e-8,1.4158823504138685e-4,1.502646517645388e-6,-1.2107840476713205e-8,1.4177619737628733e-4,1.2439767012537168e-6,-1.2089354094720186e-8,1.420599003828967e-4,9.723315462248096e-7,-1.206992596215161e-8,1.4243837480090518e-4,7.317359454874271e-7,-1.205266945550483e-8,1.428912639706557e-4,5.641719353741576e-7,-1.2040586686537376e-8,1.4338097885540922e-4,4.993306811954009e-7,-1.2035847099509482e-8,1.4385960277296563e-4,5.458783176763343e-7,-1.2039139663143369e-8,1.4427940471458366e-4,6.868122641353136e-7,-1.2049291370737595e-8,1.4460478846783334e-4,8.807411239238364e-7,-1.2063317321420302e-8,1.4482281559751307e-4,1.069839105541091e-6,-1.2076991054963683e-8,0.00014494904837242869,1.1937309248725323e-6,-1.2085887289049307e-8,1.4502568900064648e-4,1.2064426101944527e-6,-1.208665562177113e-8,1.4511070047506638e-4,1.0911379333922037e-6,-1.2078100163221958e-8,1.4526028585175462e-4,8.663198283372468e-7,-1.2061600256805915e-8,1.4551122674497707e-4,5.797058648325919e-7,-1.204063541031233e-8,1.45870714182893e-4,2.919007977922922e-7,-1.2019605889673682e-8,1.4631756661427476e-4,5.7383281304037876e-8,-1.2002481688680475e-8,1.4681257082234934e-4,-8.908235910099019e-8,-1.199182771411262e-8,1.4731178048653533e-4,-1.3681974382092278e-7,-1.1988462719314775e-8,1.4777718123388823e-4,-9.589928020150776e-8,-1.1991666707489123e-8,1.4818241807458256e-4,9.827970495226143e-9,-1.1999669866292774e-8,1.4851424057603252e-4,1.4975826284681487e-7,-1.2010174857616424e-8,1.4877150780700368e-4,2.9190903564939884e-7,-1.2020776035974408e-8,1.4896338718739874e-4,4.064988238931833e-7,-1.2029249027716422e-8,1.491076446423247e-4,4.6841038637613003e-7,-1.2033745868534184e-8,1.4922916257107874e-4,4.5938546572257956e-7,-1.2032953779941988e-8,1.493582247095228e-4,3.705242197180493e-7,-1.2026262139108474e-8,1.4952777954767635e-4,2.051005400277564e-7,-1.2013946805018194e-8,1.4976894050346446e-4,-1.904479417246828e-8,-1.19973299130609e-8,1.5010454947427974e-4,-2.6906541765304796e-7,-1.1978814248321542e-8,1.5054183504320976e-4,-5.005400438808663e-7,-1.1961656886072548e-8,1.510667193509588e-4,-6.659267765992611e-7,-1.1949384554955782e-8,1.5164312623254563e-4,-7.269820831206918e-7,-1.1944897119523432e-8,1.5221953156980696e-4,-6.673181911368249e-7,-1.1949511382214759e-8,1.5274192731700445e-4,-4.998737686083151e-7,-1.1962335916114308e-8,1.5316902981055573e-4,-2.655106490847173e-7,-1.198030645635063e-8,1.5348421088217352e-4,-2.266891378647792e-8,-1.1998944827432675e-8,1.537000877768807e-4,1.6834438575237464e-7,-1.2013585861232607e-8,1.538547110431581e-4,2.613132906223005e-7,-1.2020649305678164e-8,1.5400096519828458e-4,2.3581112219275996e-7,-1.2018566303697278e-8,1.5419235863208593e-4,1.0173672189554832e-7,-1.2008120314198619e-8,1.5446908544374386e-4,-1.043344103221339e-7,-1.1992147545698048e-8,1.548482390991489e-4,-3.2985719788034745e-7,-1.1974709621771796e-8,1.5532098094650596e-4,-5.207662508907146e-7,-1.1959996690102956e-8,1.5585716932915963e-4,-6.350241871756243e-7,-1.1951293605787887e-8,1.5641522266013897e-4,-6.511187991959759e-7,-1.1950307300835039e-8,1.569532769257661e-4,-5.697016549164902e-7,-1.1957005001839564e-8,1.5743798528095797e-4,-4.09469379855435e-7,-1.1969906863521253e-8,1.5784917981561064e-4,-2.0015710169451744e-7,-1.1986632887038163e-8,1.5818066995231428e-4,2.4528128874972442e-8,-1.2004482272335572e-8,1.584385964221662e-4,2.3238212408654543e-7,-1.2020894960770384e-8,1.5863886107822444e-4,3.9624199560292434e-7,-1.2033748244121223e-8,1.588046247824748e-4,4.961257588820515e-7,-1.2041519855910776e-8,1.5896414577085214e-4,5.208075434900433e-7,-1.2043387212766305e-8,1.5914861628490783e-4,4.6946391491526275e-7,-1.2039325589190074e-8,1.5938926955830503e-4,3.53541008361074e-7,-1.2030232908600866e-8,1.5971294009466412e-4,1.982741610365036e-7,-1.2018050074089633e-8,1.601357000258253e-4,4.2346553631336995e-8,-1.2005764507559371e-8,1.6065547610377416e-4,-6.653262914643824e-8,-1.199711354071502e-8,1.6124655500583345e-4,-8.178371801242496e-8,-1.1995829366236498e-8,1.618604147678731e-4,2.7237558855628032e-8,-1.200446695222325e-8,1.624361983654284e-4,2.6113543526894443e-7,-1.2023214939678597e-8,1.6291924082183584e-4,5.850389636777833e-7,-1.2049358081100115e-8,1.6328002909722807e-4,9.37029053897171e-7,-1.2077889657121621e-8,1.6352419934365228e-4,1.2479123374621913e-6,-1.2103126439366304e-8,1.6368904604779273e-4,1.4631281062483648e-6,-1.2120552485357369e-8,1.6382956183236765e-4,1.557395384432055e-6,-1.2128060940280816e-8,1.6400122926582002e-4,1.5381144862877748e-6,-1.2126239058948575e-8,1.6424588726093894e-4,1.439208355081074e-6,-1.2117853915445577e-8,1.6458370748174056e-4,1.3096328102448778e-6,-1.2106913755361764e-8,1.6501154402339606e-4,1.200644338827852e-6,-1.2097641160415495e-8,1.6550648589063686e-4,1.1547586852730628e-6,-1.2093577694547275e-8,1.6603290776267415e-4,1.198176070928625e-6,-1.209694831318382e-8,1.665511035023388e-4,1.3375614745420673e-6,-1.2108362039271342e-8,1.6702550418416318e-4,1.5612138983333382e-6,-1.2126873437650308e-8,1.674307780932752e-4,1.8436692523999273e-6,-1.2150349328123835e-8,1.677549195800197e-4,2.152050182706575e-6,-1.2176009110305286e-8,1.6799940801179606e-4,2.4524165413076667e-6,-1.2200981766056503e-8,1.6817724583540448e-4,2.7148658232038214e-6,-1.2222754118217347e-8,1.683099873280913e-4,2.9168866968960664e-6,-1.2239454785978735e-8,1.6842467146592558e-4,3.0452180407235236e-6,-1.224999322944638e-8,1.6855102695086848e-4,3.0968539557096263e-6,-1.2254119042353992e-8,1.6871880126855085e-4,3.079744230574199e-6,-1.2252464324778996e-8,1.6895472067160068e-4,3.0133940896606534e-6,-1.2246598903420829e-8,1.6927840464195295e-4,2.9289893043908684e-6,-1.2239070910506032e-8,1.6969685867088022e-4,2.8677904600524987e-6,-1.2233319274918822e-8,1.7019831718506845e-4,2.875824828445984e-6,-1.2233272151029017e-8,1.7074810284391787e-4,2.993272269193482e-6,-1.224246480019927e-8,1.7129098425295404e-4,3.2394101336393448e-6,-1.2262719249205929e-8,1.7176398102373194e-4,3.5987654038797006e-6,-1.2292867630372567e-8,1.7211809981800891e-4,4.018086806079489e-6,-1.2328398800877828e-8,1.723391427347796e-4,4.420818917734477e-6,-1.2362681188303285e-8,1.7245473153053103e-4,4.734662467285292e-6,-1.2389396409868513e-8,1.7252252726735316e-4,4.917578549027333e-6,-1.2404843785782865e-8,1.726071540897258e-4,4.968749604148368e-6,-1.2408893192054333e-8,1.727589046978858e-4,4.9221724964740185e-6,-1.2404411962237101e-8,1.7300260344177033e-4,4.83048076677902e-6,-1.2395876284086118e-8,1.7333699122422784e-4,4.748210739532242e-6,-1.2387966354953343e-8,1.7374060169450008e-4,4.719717242328655e-6,-1.2384556320964524e-8,1.7417998643729247e-4,4.77276442662093e-6,-1.2388155529251713e-8,1.7461775716833916e-4,4.916710446013261e-6,-1.2399710045232228e-8,1.7501937203030822e-4,5.1438468128633355e-6,-1.24186647572412e-8,1.7535828951289732e-4,5.432860035887848e-6,-1.2443225854658522e-8,1.756192629618798e-4,5.753664444472852e-6,-1.247077258016822e-8,1.7579965373443565e-4,6.07283129609336e-6,-1.249834752183416e-8,1.7590884946030766e-4,6.358829228718526e-6,-1.2523139875377372e-8,1.759661130968674e-4,6.586381943570775e-6,-1.2542883039875933e-8,1.759974500115724e-4,6.739459298134962e-6,-1.2556116611078232e-8,1.760321637278397e-4,6.812845618154416e-6,-1.2562313354106072e-8,1.7609950601134763e-4,6.812603660833107e-6,-1.2561914546371991e-8,1.7622548831381987e-4,6.755770295736606e-6,-1.2556315384687489e-8,1.7642970412317874e-4,6.669448359319251e-6,-1.2547819558221092e-8,1.7672181959903853e-4,6.589129298634931e-6,-1.2539538164845853e-8,1.7709754531837021e-4,6.555409184978373e-6,-1.253513882005936e-8,1.7753484841258758e-4,6.6077367992058346e-6,-1.2538298544744623e-8,1.7799261074736457e-4,6.774298835042637e-6,-1.2551762208519981e-8,1.7841520147040621e-4,7.059131678797954e-6,-1.2576102085454612e-8,1.7874610453487877e-4,7.431432411420299e-6,-1.2608660039097732e-8,1.7894917443968755e-4,7.825953175386766e-6,-1.264353962001558e-8,1.7902774380033063e-4,8.161207083206408e-6,-1.2673296174765145e-8,1.790278108183074e-4,8.37057801926549e-6,-1.2691829535203863e-8,1.7902000252517539e-4,8.429111940731165e-6,-1.2696822098010562e-8,1.7907052731275117e-4,8.359865779353108e-6,-1.2690259514578959e-8,1.792184376056174e-4,8.218710920752939e-6,-1.2677033409507345e-8,1.7946899122588982e-4,8.070217272528202e-6,-1.2662824877992331e-8,1.798005516314884e-4,7.968098174834111e-6,-1.2652431102927129e-8,1.8017678902342154e-4,7.945639373964074e-6,-1.2648941656457344e-8,1.8055783018827178e-4,8.014489469180937e-6,-1.2653594995131369e-8,1.809079743025977e-4,8.167991049630246e-6,-1.2666002492302427e-8,1.8120015594670137e-4,8.386055770599257e-6,-1.2684515636010646e-8,1.81418169137406e-4,8.640136272423779e-6,-1.2706635648062213e-8,1.8155745362714864e-4,8.897929471115659e-6,-1.2729437938407207e-8,1.816247890930127e-4,9.127778918254038e-6,-1.2749994232411722e-8,1.8163698371062952e-4,9.302709168045539e-6,-1.2765766433492419e-8,1.8161856182727902e-4,9.403888438419948e-6,-1.2774938041748913e-8,1.815985642893323e-4,9.423138551089404e-6,-1.2776645313126941e-8,1.8160681506560852e-4,9.36415692920561e-6,-1.2771087603012172e-8,1.8167007529985502e-4,9.242389932513445e-6,-1.2759527269267482e-8,1.8180839374719023e-4,9.083630182385395e-6,-1.2744194260900506e-8,1.8203189191582484e-4,8.921407254932055e-6,-1.272809684680252e-8,1.8233811686921964e-4,8.793234923543979e-6,-1.271472568547752e-8,1.8271007573164471e-4,8.735513832696627e-6,-1.2707603433132443e-8,1.831156226205783e-4,8.776587215035303e-6,-1.2709611967731912e-8,1.835098044135818e-4,8.927979072561361e-6,-1.2722097762312471e-8,1.8384221630675696e-4,9.175500192615347e-6,-1.27439367278731e-8,1.840705475552472e-4,9.474371020128938e-6,-1.2771002906062082e-8,1.841780628060236e-4,9.754616948466088e-6,-1.279667951127827e-8,1.8418683651227492e-4,9.940934290960093e-6,-1.281380356682737e-8,1.8415563603335129e-4,9.98187460304554e-6,-1.281747050358581e-8,1.8415861263877017e-4,9.872544364405676e-6,-1.2807136409084753e-8,1.842552921475183e-4,9.65575714304891e-6,-1.278665574601449e-8,1.8446960989311107e-4,9.401323160175794e-6,-1.2762350921109002e-8,1.847878917819339e-4,9.177921705907351e-6,-1.274048999348862e-8,1.851716145817177e-4,9.033077144764868e-6,-1.2725517880425859e-8,1.8557404333119885e-4,8.98674862545095e-6,-1.2719465951244568e-8,1.8595285565285299e-4,9.03489153155634e-6,-1.2722206457539776e-8,1.8627673471227903e-4,9.156961441484826e-6,-1.2732052732514901e-8,1.8652737698281774e-4,9.323291635298407e-6,-1.2746379558568107e-8,1.8669908398996258e-4,9.500851281252383e-6,-1.276214259667023e-8,1.867974540649122e-4,9.657494220093313e-6,-1.2776296198795173e-8,1.868377674238962e-4,9.765290802188679e-6,-1.2786140679959678e-8,1.8684306967336814e-4,9.803397871508996e-6,-1.2789619363565743e-8,1.868417147083351e-4,9.760610094037025e-6,-1.2785567727151342e-8,1.8686412458466885e-4,9.637324414561794e-6,-1.2773894189412115e-8,1.8693880886411663e-4,9.44635537749392e-6,-1.2755655110877828e-8,1.8708806034181723e-4,9.212124471751703e-6,-1.2732996276901077e-8,1.873239407935784e-4,8.968006164774606e-6,-1.2708946706398693e-8,1.8764524855502274e-4,8.751851247504868e-6,-1.2687053344743047e-8,1.8803613506589658e-4,8.600047003777075e-6,-1.267086308882513e-8,1.884668350213392e-4,8.540750156571121e-6,-1.266327943929974e-8,1.8889688401037388e-4,8.586957156317759e-6,-1.2665841049346619e-8,1.892813662336039e-4,8.7303677532984365E-06,-1.2678028004774141e-8,1.8958055151708885e-4,8.937957777496288e-6,-1.269682650981506e-8,1.8977205698003573e-4,9.154221964303619e-6,-1.2716894887330907e-8,1.8986226816951858e-4,9.312023948278568e-6,-1.2731645634466873e-8,1.8989097282145473e-4,9.3523306591095e-6,-1.2735235873700964e-8,1.899229344963519e-4,9.246977657328054e-6,-1.2724818924541804e-8,1.9002600500419477e-4,9.012639158824845e-6,-1.2701873808086355e-8,1.90245267253111e-4,8.705899735453676e-6,-1.267169944090641e-8,1.9058743747324758e-4,8.400731767561984e-6,-1.2641284800066107e-8,1.9102317062649488e-4,8.161375525659737e-6,-1.261678823134974e-8,1.915028135995743e-4,8.024638131175617e-6,-1.2601877107848063e-8]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/Images/bing_maps_credit.png b/cate/webapi/app/cesium/Assets/Images/bing_maps_credit.png new file mode 100644 index 000000000..15109db3c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Images/bing_maps_credit.png differ diff --git a/cate/webapi/app/cesium/Assets/Images/cesium_credit.png b/cate/webapi/app/cesium/Assets/Images/cesium_credit.png new file mode 100644 index 000000000..4d1722b6b Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Images/cesium_credit.png differ diff --git a/cate/webapi/app/cesium/Assets/Images/google_earth_credit.png b/cate/webapi/app/cesium/Assets/Images/google_earth_credit.png new file mode 100644 index 000000000..a7622d822 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Images/google_earth_credit.png differ diff --git a/cate/webapi/app/cesium/Assets/Images/ion-credit.png b/cate/webapi/app/cesium/Assets/Images/ion-credit.png new file mode 100644 index 000000000..71b7bdf1c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Images/ion-credit.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/LensFlare/DirtMask.jpg b/cate/webapi/app/cesium/Assets/Textures/LensFlare/DirtMask.jpg new file mode 100644 index 000000000..53299020e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/LensFlare/DirtMask.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/LensFlare/StarBurst.jpg b/cate/webapi/app/cesium/Assets/Textures/LensFlare/StarBurst.jpg new file mode 100644 index 000000000..b54ac0910 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/LensFlare/StarBurst.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg new file mode 100644 index 000000000..0cad64662 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg new file mode 100644 index 000000000..7e63bd63e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg new file mode 100644 index 000000000..e65f1c78b Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg new file mode 100644 index 000000000..605f63f13 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg new file mode 100644 index 000000000..319458e12 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg new file mode 100644 index 000000000..a6a3859d6 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg new file mode 100644 index 000000000..6913a2b08 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg new file mode 100644 index 000000000..df89ed220 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg new file mode 100644 index 000000000..8f27415e2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg new file mode 100644 index 000000000..ce2b06ecb Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg new file mode 100644 index 000000000..e3c031201 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg new file mode 100644 index 000000000..f3ec32150 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg new file mode 100644 index 000000000..b59816c01 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg new file mode 100644 index 000000000..795f21227 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg new file mode 100644 index 000000000..822b06514 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg new file mode 100644 index 000000000..4dd18ea4e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg new file mode 100644 index 000000000..4540c7c94 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg new file mode 100644 index 000000000..32c6e5ae2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg new file mode 100644 index 000000000..7c3909481 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg new file mode 100644 index 000000000..3e7abe713 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg new file mode 100644 index 000000000..0e0f1e9b1 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg new file mode 100644 index 000000000..732c32f95 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg new file mode 100644 index 000000000..576ec70e7 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg new file mode 100644 index 000000000..6347041f9 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg new file mode 100644 index 000000000..300aa5803 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg new file mode 100644 index 000000000..cd70fcad1 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg new file mode 100644 index 000000000..eabb83c79 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg new file mode 100644 index 000000000..54e6b0076 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg new file mode 100644 index 000000000..311241c8d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg new file mode 100644 index 000000000..5ba398c58 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg new file mode 100644 index 000000000..e03c0c077 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg new file mode 100644 index 000000000..01a1caf81 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg new file mode 100644 index 000000000..372e3ef5b Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg new file mode 100644 index 000000000..fbcfa628f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg new file mode 100644 index 000000000..334ab2581 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg new file mode 100644 index 000000000..ebbc3a099 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg new file mode 100644 index 000000000..c3a8e97c8 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg new file mode 100644 index 000000000..8f730f364 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg new file mode 100644 index 000000000..75235d6f8 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg new file mode 100644 index 000000000..036d682ec Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg new file mode 100644 index 000000000..dfd214467 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg new file mode 100644 index 000000000..82c2a34aa Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml new file mode 100644 index 000000000..d7734cce0 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml @@ -0,0 +1,14 @@ + + + NE2_HR_LC_SR_W_DR_recolored.tif + + EPSG:4326 + + + + + + + + + diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg new file mode 100644 index 000000000..67192282d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg new file mode 100644 index 000000000..3dfe883b3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg new file mode 100644 index 000000000..7ef2363f2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg new file mode 100644 index 000000000..f5d0d8b1e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg new file mode 100644 index 000000000..a8421113e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg new file mode 100644 index 000000000..5efcc76e2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/airfield.png b/cate/webapi/app/cesium/Assets/Textures/maki/airfield.png new file mode 100644 index 000000000..b77468424 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/airfield.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/airport.png b/cate/webapi/app/cesium/Assets/Textures/maki/airport.png new file mode 100644 index 000000000..44a8413a7 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/airport.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/alcohol-shop.png b/cate/webapi/app/cesium/Assets/Textures/maki/alcohol-shop.png new file mode 100644 index 000000000..b75a5d9ea Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/alcohol-shop.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/america-football.png b/cate/webapi/app/cesium/Assets/Textures/maki/america-football.png new file mode 100644 index 000000000..5a2c6ba6f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/america-football.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/art-gallery.png b/cate/webapi/app/cesium/Assets/Textures/maki/art-gallery.png new file mode 100644 index 000000000..a663512ef Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/art-gallery.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/bakery.png b/cate/webapi/app/cesium/Assets/Textures/maki/bakery.png new file mode 100644 index 000000000..9735d5e53 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/bakery.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/bank.png b/cate/webapi/app/cesium/Assets/Textures/maki/bank.png new file mode 100644 index 000000000..a67cee06e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/bank.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/bar.png b/cate/webapi/app/cesium/Assets/Textures/maki/bar.png new file mode 100644 index 000000000..8c2812fba Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/bar.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/baseball.png b/cate/webapi/app/cesium/Assets/Textures/maki/baseball.png new file mode 100644 index 000000000..23f344bbf Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/baseball.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/basketball.png b/cate/webapi/app/cesium/Assets/Textures/maki/basketball.png new file mode 100644 index 000000000..7ed3bfce3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/basketball.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/beer.png b/cate/webapi/app/cesium/Assets/Textures/maki/beer.png new file mode 100644 index 000000000..a15cf9911 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/beer.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/bicycle.png b/cate/webapi/app/cesium/Assets/Textures/maki/bicycle.png new file mode 100644 index 000000000..fb871be48 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/bicycle.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/building.png b/cate/webapi/app/cesium/Assets/Textures/maki/building.png new file mode 100644 index 000000000..885f1128a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/building.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/bus.png b/cate/webapi/app/cesium/Assets/Textures/maki/bus.png new file mode 100644 index 000000000..783050234 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/bus.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cafe.png b/cate/webapi/app/cesium/Assets/Textures/maki/cafe.png new file mode 100644 index 000000000..2050cba3c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cafe.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/camera.png b/cate/webapi/app/cesium/Assets/Textures/maki/camera.png new file mode 100644 index 000000000..ec54e12a2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/camera.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/campsite.png b/cate/webapi/app/cesium/Assets/Textures/maki/campsite.png new file mode 100644 index 000000000..36e0a92de Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/campsite.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/car.png b/cate/webapi/app/cesium/Assets/Textures/maki/car.png new file mode 100644 index 000000000..2075afa58 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/car.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cemetery.png b/cate/webapi/app/cesium/Assets/Textures/maki/cemetery.png new file mode 100644 index 000000000..df244fda0 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cemetery.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cesium.png b/cate/webapi/app/cesium/Assets/Textures/maki/cesium.png new file mode 100644 index 000000000..ce2755ded Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cesium.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/chemist.png b/cate/webapi/app/cesium/Assets/Textures/maki/chemist.png new file mode 100644 index 000000000..eb1ea3574 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/chemist.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cinema.png b/cate/webapi/app/cesium/Assets/Textures/maki/cinema.png new file mode 100644 index 000000000..56b692561 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cinema.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/circle-stroked.png b/cate/webapi/app/cesium/Assets/Textures/maki/circle-stroked.png new file mode 100644 index 000000000..88689e47f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/circle-stroked.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/circle.png b/cate/webapi/app/cesium/Assets/Textures/maki/circle.png new file mode 100644 index 000000000..fbbd5822f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/circle.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/city.png b/cate/webapi/app/cesium/Assets/Textures/maki/city.png new file mode 100644 index 000000000..37d8fad88 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/city.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/clothing-store.png b/cate/webapi/app/cesium/Assets/Textures/maki/clothing-store.png new file mode 100644 index 000000000..ff5f8a2b1 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/clothing-store.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/college.png b/cate/webapi/app/cesium/Assets/Textures/maki/college.png new file mode 100644 index 000000000..102638704 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/college.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/commercial.png b/cate/webapi/app/cesium/Assets/Textures/maki/commercial.png new file mode 100644 index 000000000..fdf3b63c3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/commercial.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cricket.png b/cate/webapi/app/cesium/Assets/Textures/maki/cricket.png new file mode 100644 index 000000000..6642a3af2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cricket.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/cross.png b/cate/webapi/app/cesium/Assets/Textures/maki/cross.png new file mode 100644 index 000000000..8945b3b4f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/cross.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/dam.png b/cate/webapi/app/cesium/Assets/Textures/maki/dam.png new file mode 100644 index 000000000..aed88a88f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/dam.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/danger.png b/cate/webapi/app/cesium/Assets/Textures/maki/danger.png new file mode 100644 index 000000000..9479572c3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/danger.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/disability.png b/cate/webapi/app/cesium/Assets/Textures/maki/disability.png new file mode 100644 index 000000000..1cc355097 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/disability.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/dog-park.png b/cate/webapi/app/cesium/Assets/Textures/maki/dog-park.png new file mode 100644 index 000000000..3483e35b9 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/dog-park.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/embassy.png b/cate/webapi/app/cesium/Assets/Textures/maki/embassy.png new file mode 100644 index 000000000..46b7e1e1c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/embassy.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/emergency-telephone.png b/cate/webapi/app/cesium/Assets/Textures/maki/emergency-telephone.png new file mode 100644 index 000000000..fac623968 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/emergency-telephone.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/entrance.png b/cate/webapi/app/cesium/Assets/Textures/maki/entrance.png new file mode 100644 index 000000000..b0ba8c5d6 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/entrance.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/farm.png b/cate/webapi/app/cesium/Assets/Textures/maki/farm.png new file mode 100644 index 000000000..7b03e825f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/farm.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/fast-food.png b/cate/webapi/app/cesium/Assets/Textures/maki/fast-food.png new file mode 100644 index 000000000..9488c263f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/fast-food.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/ferry.png b/cate/webapi/app/cesium/Assets/Textures/maki/ferry.png new file mode 100644 index 000000000..58c2f27a8 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/ferry.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/fire-station.png b/cate/webapi/app/cesium/Assets/Textures/maki/fire-station.png new file mode 100644 index 000000000..427512f1d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/fire-station.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/fuel.png b/cate/webapi/app/cesium/Assets/Textures/maki/fuel.png new file mode 100644 index 000000000..dc6059b90 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/fuel.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/garden.png b/cate/webapi/app/cesium/Assets/Textures/maki/garden.png new file mode 100644 index 000000000..265edb8d6 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/garden.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/gift.png b/cate/webapi/app/cesium/Assets/Textures/maki/gift.png new file mode 100644 index 000000000..866263e16 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/gift.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/golf.png b/cate/webapi/app/cesium/Assets/Textures/maki/golf.png new file mode 100644 index 000000000..2169d9158 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/golf.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/grocery.png b/cate/webapi/app/cesium/Assets/Textures/maki/grocery.png new file mode 100644 index 000000000..05b09d4af Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/grocery.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/hairdresser.png b/cate/webapi/app/cesium/Assets/Textures/maki/hairdresser.png new file mode 100644 index 000000000..68fbe1e85 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/hairdresser.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/harbor.png b/cate/webapi/app/cesium/Assets/Textures/maki/harbor.png new file mode 100644 index 000000000..2814f3cd5 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/harbor.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/heart.png b/cate/webapi/app/cesium/Assets/Textures/maki/heart.png new file mode 100644 index 000000000..82e98082c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/heart.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/heliport.png b/cate/webapi/app/cesium/Assets/Textures/maki/heliport.png new file mode 100644 index 000000000..953828d9e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/heliport.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/hospital.png b/cate/webapi/app/cesium/Assets/Textures/maki/hospital.png new file mode 100644 index 000000000..faf294e87 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/hospital.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/ice-cream.png b/cate/webapi/app/cesium/Assets/Textures/maki/ice-cream.png new file mode 100644 index 000000000..323c96494 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/ice-cream.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/industrial.png b/cate/webapi/app/cesium/Assets/Textures/maki/industrial.png new file mode 100644 index 000000000..9b3b525db Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/industrial.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/land-use.png b/cate/webapi/app/cesium/Assets/Textures/maki/land-use.png new file mode 100644 index 000000000..f86b21bcd Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/land-use.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/laundry.png b/cate/webapi/app/cesium/Assets/Textures/maki/laundry.png new file mode 100644 index 000000000..53fd20de4 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/laundry.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/library.png b/cate/webapi/app/cesium/Assets/Textures/maki/library.png new file mode 100644 index 000000000..8564e84a3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/library.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/lighthouse.png b/cate/webapi/app/cesium/Assets/Textures/maki/lighthouse.png new file mode 100644 index 000000000..a78e21a5b Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/lighthouse.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/lodging.png b/cate/webapi/app/cesium/Assets/Textures/maki/lodging.png new file mode 100644 index 000000000..4e41ea6f6 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/lodging.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/logging.png b/cate/webapi/app/cesium/Assets/Textures/maki/logging.png new file mode 100644 index 000000000..4aeef0b7a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/logging.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/london-underground.png b/cate/webapi/app/cesium/Assets/Textures/maki/london-underground.png new file mode 100644 index 000000000..94972f7dd Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/london-underground.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/marker-stroked.png b/cate/webapi/app/cesium/Assets/Textures/maki/marker-stroked.png new file mode 100644 index 000000000..f00d11239 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/marker-stroked.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/marker.png b/cate/webapi/app/cesium/Assets/Textures/maki/marker.png new file mode 100644 index 000000000..825eeca69 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/marker.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/minefield.png b/cate/webapi/app/cesium/Assets/Textures/maki/minefield.png new file mode 100644 index 000000000..60e174abb Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/minefield.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/mobilephone.png b/cate/webapi/app/cesium/Assets/Textures/maki/mobilephone.png new file mode 100644 index 000000000..a40ef9c1f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/mobilephone.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/monument.png b/cate/webapi/app/cesium/Assets/Textures/maki/monument.png new file mode 100644 index 000000000..5b8b7debd Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/monument.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/museum.png b/cate/webapi/app/cesium/Assets/Textures/maki/museum.png new file mode 100644 index 000000000..23c179003 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/museum.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/music.png b/cate/webapi/app/cesium/Assets/Textures/maki/music.png new file mode 100644 index 000000000..dbef56f22 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/music.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/oil-well.png b/cate/webapi/app/cesium/Assets/Textures/maki/oil-well.png new file mode 100644 index 000000000..a421f5aae Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/oil-well.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/park.png b/cate/webapi/app/cesium/Assets/Textures/maki/park.png new file mode 100644 index 000000000..741110e37 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/park.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/park2.png b/cate/webapi/app/cesium/Assets/Textures/maki/park2.png new file mode 100644 index 000000000..5f60dcc4d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/park2.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/parking-garage.png b/cate/webapi/app/cesium/Assets/Textures/maki/parking-garage.png new file mode 100644 index 000000000..b91a811a8 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/parking-garage.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/parking.png b/cate/webapi/app/cesium/Assets/Textures/maki/parking.png new file mode 100644 index 000000000..6a843d93e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/parking.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/pharmacy.png b/cate/webapi/app/cesium/Assets/Textures/maki/pharmacy.png new file mode 100644 index 000000000..d82e4716f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/pharmacy.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/pitch.png b/cate/webapi/app/cesium/Assets/Textures/maki/pitch.png new file mode 100644 index 000000000..a8205e802 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/pitch.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/place-of-worship.png b/cate/webapi/app/cesium/Assets/Textures/maki/place-of-worship.png new file mode 100644 index 000000000..29f7c3172 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/place-of-worship.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/playground.png b/cate/webapi/app/cesium/Assets/Textures/maki/playground.png new file mode 100644 index 000000000..5270d3c42 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/playground.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/police.png b/cate/webapi/app/cesium/Assets/Textures/maki/police.png new file mode 100644 index 000000000..9787a05e9 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/police.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/polling-place.png b/cate/webapi/app/cesium/Assets/Textures/maki/polling-place.png new file mode 100644 index 000000000..b2d02a904 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/polling-place.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/post.png b/cate/webapi/app/cesium/Assets/Textures/maki/post.png new file mode 100644 index 000000000..ee7aaca7d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/post.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/prison.png b/cate/webapi/app/cesium/Assets/Textures/maki/prison.png new file mode 100644 index 000000000..355cba44a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/prison.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rail-above.png b/cate/webapi/app/cesium/Assets/Textures/maki/rail-above.png new file mode 100644 index 000000000..e48d7eac7 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rail-above.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rail-light.png b/cate/webapi/app/cesium/Assets/Textures/maki/rail-light.png new file mode 100644 index 000000000..895565e00 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rail-light.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rail-metro.png b/cate/webapi/app/cesium/Assets/Textures/maki/rail-metro.png new file mode 100644 index 000000000..86078c91f Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rail-metro.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rail-underground.png b/cate/webapi/app/cesium/Assets/Textures/maki/rail-underground.png new file mode 100644 index 000000000..42cfeb7e1 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rail-underground.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rail.png b/cate/webapi/app/cesium/Assets/Textures/maki/rail.png new file mode 100644 index 000000000..8af055dde Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rail.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/religious-christian.png b/cate/webapi/app/cesium/Assets/Textures/maki/religious-christian.png new file mode 100644 index 000000000..201bc81ca Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/religious-christian.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/religious-jewish.png b/cate/webapi/app/cesium/Assets/Textures/maki/religious-jewish.png new file mode 100644 index 000000000..e3c75f6b3 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/religious-jewish.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/religious-muslim.png b/cate/webapi/app/cesium/Assets/Textures/maki/religious-muslim.png new file mode 100644 index 000000000..25cbf08aa Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/religious-muslim.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/restaurant.png b/cate/webapi/app/cesium/Assets/Textures/maki/restaurant.png new file mode 100644 index 000000000..816282a6e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/restaurant.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/roadblock.png b/cate/webapi/app/cesium/Assets/Textures/maki/roadblock.png new file mode 100644 index 000000000..539f0ed84 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/roadblock.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/rocket.png b/cate/webapi/app/cesium/Assets/Textures/maki/rocket.png new file mode 100644 index 000000000..e6ed71877 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/rocket.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/school.png b/cate/webapi/app/cesium/Assets/Textures/maki/school.png new file mode 100644 index 000000000..fb20bf4e2 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/school.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/scooter.png b/cate/webapi/app/cesium/Assets/Textures/maki/scooter.png new file mode 100644 index 000000000..41f741649 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/scooter.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/shop.png b/cate/webapi/app/cesium/Assets/Textures/maki/shop.png new file mode 100644 index 000000000..11a6b755a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/shop.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/skiing.png b/cate/webapi/app/cesium/Assets/Textures/maki/skiing.png new file mode 100644 index 000000000..4fc11e2e5 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/skiing.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/slaughterhouse.png b/cate/webapi/app/cesium/Assets/Textures/maki/slaughterhouse.png new file mode 100644 index 000000000..9b094cabd Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/slaughterhouse.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/soccer.png b/cate/webapi/app/cesium/Assets/Textures/maki/soccer.png new file mode 100644 index 000000000..2385daf91 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/soccer.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/square-stroked.png b/cate/webapi/app/cesium/Assets/Textures/maki/square-stroked.png new file mode 100644 index 000000000..fce75b0d8 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/square-stroked.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/square.png b/cate/webapi/app/cesium/Assets/Textures/maki/square.png new file mode 100644 index 000000000..babc9c531 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/square.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/star-stroked.png b/cate/webapi/app/cesium/Assets/Textures/maki/star-stroked.png new file mode 100644 index 000000000..242e42e20 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/star-stroked.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/star.png b/cate/webapi/app/cesium/Assets/Textures/maki/star.png new file mode 100644 index 000000000..447dd384a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/star.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/suitcase.png b/cate/webapi/app/cesium/Assets/Textures/maki/suitcase.png new file mode 100644 index 000000000..a94f562e7 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/suitcase.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/swimming.png b/cate/webapi/app/cesium/Assets/Textures/maki/swimming.png new file mode 100644 index 000000000..b9fbdcc5d Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/swimming.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/telephone.png b/cate/webapi/app/cesium/Assets/Textures/maki/telephone.png new file mode 100644 index 000000000..6d57dc61a Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/telephone.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/tennis.png b/cate/webapi/app/cesium/Assets/Textures/maki/tennis.png new file mode 100644 index 000000000..6cb632054 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/tennis.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/theatre.png b/cate/webapi/app/cesium/Assets/Textures/maki/theatre.png new file mode 100644 index 000000000..772c96e4e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/theatre.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/toilets.png b/cate/webapi/app/cesium/Assets/Textures/maki/toilets.png new file mode 100644 index 000000000..e87cf19c0 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/toilets.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/town-hall.png b/cate/webapi/app/cesium/Assets/Textures/maki/town-hall.png new file mode 100644 index 000000000..1af5c7ce4 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/town-hall.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/town.png b/cate/webapi/app/cesium/Assets/Textures/maki/town.png new file mode 100644 index 000000000..416616951 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/town.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/triangle-stroked.png b/cate/webapi/app/cesium/Assets/Textures/maki/triangle-stroked.png new file mode 100644 index 000000000..131c7d94c Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/triangle-stroked.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/triangle.png b/cate/webapi/app/cesium/Assets/Textures/maki/triangle.png new file mode 100644 index 000000000..d9c47f421 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/triangle.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/village.png b/cate/webapi/app/cesium/Assets/Textures/maki/village.png new file mode 100644 index 000000000..2650af502 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/village.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/warehouse.png b/cate/webapi/app/cesium/Assets/Textures/maki/warehouse.png new file mode 100644 index 000000000..910f1e4c9 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/warehouse.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/waste-basket.png b/cate/webapi/app/cesium/Assets/Textures/maki/waste-basket.png new file mode 100644 index 000000000..a71f9e4d7 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/waste-basket.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/water.png b/cate/webapi/app/cesium/Assets/Textures/maki/water.png new file mode 100644 index 000000000..159a557de Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/water.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/wetland.png b/cate/webapi/app/cesium/Assets/Textures/maki/wetland.png new file mode 100644 index 000000000..1e8dec832 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/wetland.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/maki/zoo.png b/cate/webapi/app/cesium/Assets/Textures/maki/zoo.png new file mode 100644 index 000000000..480229993 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/maki/zoo.png differ diff --git a/cate/webapi/app/cesium/Assets/Textures/moonSmall.jpg b/cate/webapi/app/cesium/Assets/Textures/moonSmall.jpg new file mode 100644 index 000000000..47f52522e Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/moonSmall.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/pin.svg b/cate/webapi/app/cesium/Assets/Textures/pin.svg new file mode 100644 index 000000000..7892c3682 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/Textures/pin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Assets/Textures/waterNormals.jpg b/cate/webapi/app/cesium/Assets/Textures/waterNormals.jpg new file mode 100644 index 000000000..eb1baa2d6 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/waterNormals.jpg differ diff --git a/cate/webapi/app/cesium/Assets/Textures/waterNormalsSmall.jpg b/cate/webapi/app/cesium/Assets/Textures/waterNormalsSmall.jpg new file mode 100644 index 000000000..57b19d8f4 Binary files /dev/null and b/cate/webapi/app/cesium/Assets/Textures/waterNormalsSmall.jpg differ diff --git a/cate/webapi/app/cesium/Assets/approximateTerrainHeights.json b/cate/webapi/app/cesium/Assets/approximateTerrainHeights.json new file mode 100644 index 000000000..92e52a3b7 --- /dev/null +++ b/cate/webapi/app/cesium/Assets/approximateTerrainHeights.json @@ -0,0 +1 @@ +{"6-0-0":[10.66,26.9],"6-0-1":[6.74,20.61],"6-0-2":[4.04,14.2],"6-0-3":[2.99,8.89],"6-0-4":[0.89,6.8],"6-0-5":[0.83,4.22],"6-0-6":[1.01,996.64],"6-0-7":[1.65,1473.8],"6-0-8":[4.23,1405.42],"6-0-9":[3.78,9.42],"6-0-10":[0.33,10.41],"6-0-11":[0.37,9.42],"6-0-12":[-1.21,10.72],"6-0-13":[-24.75,1797.13],"6-0-14":[-25.53,3.24],"6-0-15":[-12.72,0.06],"6-0-16":[-21.01,-5.62],"6-0-17":[-25.65,-10.79],"6-0-18":[-25.81,-11.56],"6-0-19":[-23.99,-9.29],"6-0-20":[-21.03,-8.01],"6-0-21":[-17.26,28.36],"6-0-22":[-10.44,-0.18],"6-0-23":[-6.09,1.27],"6-0-24":[0.2,8.96],"6-0-25":[4.5,13.87],"6-0-26":[6.42,18.94],"6-0-27":[9.26,23.03],"6-0-28":[10.92,27.13],"6-0-29":[12.68,32.43],"6-0-30":[15.67,36.44],"6-0-31":[17.17,41.7],"6-0-32":[18.65,43.91],"6-0-33":[19.85,48.69],"6-0-34":[21.11,56.5],"6-0-35":[26.26,79],"6-0-36":[33,95.12],"6-0-37":[17.36,1242.86],"6-0-38":[17.56,1197.83],"6-0-39":[46.88,149.88],"6-0-40":[49.39,105.09],"6-0-41":[41.61,101.97],"6-0-42":[20.68,550.11],"6-0-43":[17.2,92.57],"6-0-44":[16.92,77.99],"6-0-45":[18.56,46.63],"6-0-46":[12.38,43.07],"6-0-47":[3.4,29.35],"6-0-48":[-19.81,6.49],"6-0-49":[-39.19,-4.52],"6-0-50":[-57.57,-19.1],"6-0-51":[-76.36,-29.46],"6-0-52":[-88.35,-37.9],"6-0-53":[-97.62,-44.45],"6-0-54":[-101.65,-48.19],"6-0-55":[-119.7,-51.12],"6-0-56":[-126.97,-57.56],"6-0-57":[-126.3,-60.82],"6-0-58":[-126.26,-59.93],"6-0-59":[-119.1,-54.84],"6-0-60":[-110.88,-48.64],"6-0-61":[-96.62,258.8],"6-0-62":[-90.74,2997.38],"6-0-63":[-31.67,3098.17],"6-1-0":[10.71,26.95],"6-1-1":[7.14,20.8],"5-0-0":[6.74,26.95],"6-1-2":[3.89,15.04],"6-1-3":[3.37,8.36],"5-0-1":[2.99,15.04],"6-1-4":[-0.61,6.83],"6-1-5":[-0.55,4.83],"5-0-2":[-0.61,6.83],"6-1-6":[-0.38,343.9],"6-1-7":[0.43,308.3],"5-0-3":[-0.38,1473.8],"6-1-8":[1.88,906.96],"6-1-9":[4.01,286.65],"5-0-4":[1.88,1405.42],"6-1-10":[3.66,14],"6-1-11":[1.5,14.18],"5-0-5":[0.33,14.18],"6-1-12":[2.47,10.46],"6-1-13":[-22.06,1734.24],"5-0-6":[-24.75,1797.13],"6-1-14":[-20.71,6.52],"6-1-15":[-11.23,1.31],"5-0-7":[-25.53,6.52],"6-1-16":[-20.51,-4.75],"6-1-17":[-25.7,-10],"5-0-8":[-25.7,-4.75],"6-1-18":[-26.19,-12.15],"6-1-19":[-25.87,-9.22],"5-0-9":[-26.19,-9.22],"6-1-20":[-22.92,-7.87],"6-1-21":[-16.03,0.26],"5-0-10":[-22.92,28.36],"6-1-22":[-9.59,9.27],"6-1-23":[-2.9,6.54],"5-0-11":[-10.44,9.27],"6-1-24":[0.86,11.17],"6-1-25":[4.31,18.66],"5-0-12":[0.2,18.66],"6-1-26":[6.61,18.19],"6-1-27":[8.7,22.85],"5-0-13":[6.42,23.03],"6-1-28":[9.96,23.64],"6-1-29":[9.97,31.23],"5-0-14":[9.96,32.43],"6-1-30":[13.01,34.4],"6-1-31":[16.28,38.74],"5-0-15":[13.01,41.7],"6-1-32":[16.81,39.97],"6-1-33":[17.68,44.11],"5-0-16":[16.81,48.69],"6-1-34":[18.54,49.53],"6-1-35":[22.64,65.95],"5-0-17":[18.54,79],"6-1-36":[28.21,188.59],"6-1-37":[34.36,262.29],"5-0-18":[17.36,1242.86],"6-1-38":[45.21,1074.21],"6-1-39":[25.48,561.48],"5-0-19":[17.56,1197.83],"6-1-40":[23.5,105.17],"6-1-41":[23.63,99.7],"5-0-20":[23.5,105.17],"6-1-42":[19.32,82.54],"6-1-43":[18.61,61.85],"5-0-21":[17.2,550.11],"6-1-44":[20.07,55.81],"6-1-45":[18.77,46.46],"5-0-22":[16.92,77.99],"6-1-46":[8.68,36.12],"6-1-47":[-36.78,306.25],"5-0-23":[-36.78,306.25],"6-1-48":[-22.66,5.19],"6-1-49":[-42.82,-11.13],"5-0-24":[-42.82,6.49],"6-1-50":[-57.85,-19.1],"6-1-51":[-75.69,-29.65],"5-0-25":[-76.36,-19.1],"6-1-52":[-86.83,-37.51],"6-1-53":[-96.13,-43.07],"5-0-26":[-97.62,-37.51],"6-1-54":[-101.17,-47.18],"6-1-55":[-120.92,-50.74],"5-0-27":[-120.92,-47.18],"6-1-56":[-127.84,-59.08],"6-1-57":[-130.41,-62.14],"5-0-28":[-130.41,-57.56],"6-1-58":[-130.18,-59.59],"6-1-59":[-119.25,-55.12],"5-0-29":[-130.18,-54.84],"6-1-60":[-110.99,-49.4],"6-1-61":[-97.87,-11.15],"5-0-30":[-110.99,258.8],"6-1-62":[-91.52,3443.81],"6-1-63":[-29.54,3102.34],"5-0-31":[-91.52,3443.81],"6-2-0":[10.72,26.98],"6-2-1":[7.83,20.82],"6-2-2":[3.58,15.73],"6-2-3":[2.54,7.2],"6-2-4":[-0.61,5.79],"6-2-5":[-0.51,5.62],"6-2-6":[-0.51,2.52],"6-2-7":[0.49,3.57],"6-2-8":[1.45,1107.58],"6-2-9":[4.33,935.49],"6-2-10":[6.38,447.82],"6-2-11":[2.78,22.33],"6-2-12":[4.36,15.33],"6-2-13":[-21.97,1546.34],"6-2-14":[-15.6,10.11],"6-2-15":[-8.94,3.51],"6-2-16":[-19.28,-3.75],"6-2-17":[-25.1,-8.48],"6-2-18":[-26.22,-11.53],"6-2-19":[-26.62,-11.45],"6-2-20":[-24.22,-7.64],"6-2-21":[-15.31,-2.94],"6-2-22":[-9.58,22.84],"6-2-23":[0.06,13.16],"6-2-24":[3.65,16.58],"6-2-25":[5.95,18.75],"6-2-26":[7.56,18.27],"6-2-27":[8.72,22.69],"6-2-28":[9.83,22.16],"6-2-29":[9.86,26.06],"6-2-30":[12.2,32.28],"6-2-31":[13.89,34.73],"6-2-32":[14.45,36.73],"6-2-33":[14.44,38.35],"6-2-34":[17.75,45.33],"6-2-35":[20.66,56.51],"6-2-36":[14.56,1897.33],"6-2-37":[21.73,602.11],"6-2-38":[6.52,258.3],"6-2-39":[23.9,87.93],"6-2-40":[24.73,68.5],"6-2-41":[28.76,71.42],"6-2-42":[24.12,69.11],"6-2-43":[21.79,60.23],"6-2-44":[16.26,53.69],"6-2-45":[9.6,38.48],"6-2-46":[4.35,25.76],"6-2-47":[-8.34,16.06],"6-2-48":[-23.66,-1.78],"6-2-49":[-43.1,-12.47],"6-2-50":[-57.44,-20.26],"6-2-51":[-75.02,-28.99],"6-2-52":[-85.43,-36.15],"6-2-53":[-94.37,-42.32],"6-2-54":[-100.35,-45.74],"6-2-55":[-118.16,-50.3],"6-2-56":[-127.84,-57.37],"6-2-57":[-132.46,-63.72],"6-2-58":[-131.21,-59.33],"6-2-59":[-117.94,-55.1],"6-2-60":[-110.83,-49.58],"6-2-61":[-98.68,-43.95],"6-2-62":[-90.63,3904.3],"6-2-63":[-29.54,3104.92],"6-3-0":[10.72,27.03],"6-3-1":[7.91,20.82],"5-1-0":[7.83,27.03],"6-3-2":[3.44,16.58],"6-3-3":[2.11,6.48],"5-1-1":[2.11,16.58],"4-0-0":[2.11,27.03],"6-3-4":[-0.03,6.76],"6-3-5":[-0.56,6.63],"5-1-2":[-0.61,6.76],"6-3-6":[-1.04,3.03],"6-3-7":[0.58,2.79],"5-1-3":[-1.04,3.57],"4-0-1":[-1.04,1473.8],"6-3-8":[1.26,912.84],"6-3-9":[4.33,618.8],"5-1-4":[1.26,1107.58],"6-3-10":[6.38,21.82],"6-3-11":[-9.62,311.37],"5-1-5":[-9.62,447.82],"4-0-2":[-9.62,1405.42],"6-3-12":[5.53,24.46],"6-3-13":[-16.08,1745.85],"5-1-6":[-21.97,1745.85],"6-3-14":[-2.94,13.6],"6-3-15":[-7.31,5.28],"5-1-7":[-15.6,13.6],"4-0-3":[-25.53,1797.13],"6-3-16":[-15.66,-3.16],"6-3-17":[-22.96,-8.29],"5-1-8":[-25.1,-3.16],"6-3-18":[-26.21,-10.93],"6-3-19":[-27.23,-12.17],"5-1-9":[-27.23,-10.93],"4-0-4":[-27.23,-3.16],"6-3-20":[-24.81,-7.64],"6-3-21":[-14.34,0.47],"5-1-10":[-24.81,0.47],"6-3-22":[-3.34,23.06],"6-3-23":[2.58,22.37],"5-1-11":[-9.58,23.06],"4-0-5":[-24.81,28.36],"6-3-24":[6.28,19.36],"6-3-25":[8.08,21.32],"5-1-12":[3.65,21.32],"6-3-26":[1.66,34.68],"6-3-27":[8.88,23.51],"5-1-13":[1.66,34.68],"4-0-6":[0.2,34.68],"6-3-28":[10.27,25.7],"6-3-29":[10.85,24.86],"5-1-14":[9.83,26.06],"6-3-30":[11.93,28.27],"6-3-31":[13.63,30.64],"5-1-15":[11.93,34.73],"4-0-7":[9.83,41.7],"6-3-32":[14.74,33.87],"6-3-33":[11.58,35.79],"5-1-16":[11.58,38.35],"6-3-34":[16.56,41.34],"6-3-35":[18.05,51.07],"5-1-17":[16.56,56.51],"4-0-8":[11.58,79],"6-3-36":[19.63,771.39],"6-3-37":[21.73,997.06],"5-1-18":[14.56,1897.33],"6-3-38":[22.85,125.79],"6-3-39":[22.68,58.96],"5-1-19":[6.52,258.3],"4-0-9":[6.52,1897.33],"6-3-40":[21.12,59.21],"6-3-41":[21.12,57.29],"5-1-20":[21.12,71.42],"6-3-42":[19,55.57],"6-3-43":[19,45.14],"5-1-21":[19,69.11],"4-0-10":[17.2,550.11],"6-3-44":[12.68,42.37],"6-3-45":[7.26,30.69],"5-1-22":[7.26,53.69],"6-3-46":[1.07,18.1],"6-3-47":[-14.03,6.67],"5-1-23":[-14.03,25.76],"4-0-11":[-36.78,306.25],"6-3-48":[-25.52,-4.53],"6-3-49":[-40.76,-13.01],"5-1-24":[-43.1,-1.78],"6-3-50":[-55.85,-20.05],"6-3-51":[-71.88,-27.95],"5-1-25":[-75.02,-20.05],"4-0-12":[-76.36,6.49],"6-3-52":[-83.23,-35.08],"6-3-53":[-91.13,-41.07],"5-1-26":[-94.37,-35.08],"6-3-54":[-99.02,-44.5],"6-3-55":[-114.54,-49.53],"5-1-27":[-118.16,-44.5],"4-0-13":[-120.92,-35.08],"6-3-56":[-126.73,-56.74],"6-3-57":[-132.79,-63.72],"5-1-28":[-132.79,-56.74],"6-3-58":[-132.21,-59.46],"6-3-59":[-117.45,-55.06],"5-1-29":[-132.21,-55.06],"4-0-14":[-132.79,-54.84],"6-3-60":[-110.9,-50.05],"6-3-61":[-98.89,-43.58],"5-1-30":[-110.9,-43.58],"6-3-62":[-87.67,3970.41],"6-3-63":[-29.54,3106.07],"5-1-31":[-90.63,3970.41],"4-0-15":[-110.99,3970.41],"6-4-0":[10.72,27.07],"6-4-1":[8.58,20.88],"6-4-2":[3.21,17.11],"6-4-3":[2.1,7.09],"6-4-4":[1.19,8.01],"6-4-5":[-0.22,6.22],"6-4-6":[-1.08,2.41],"6-4-7":[0.39,611.05],"6-4-8":[1.07,1101.35],"6-4-9":[4.69,428.48],"6-4-10":[9.22,653.36],"6-4-11":[10.76,27.57],"6-4-12":[-14.99,1825.97],"6-4-13":[-15.6,2084.32],"6-4-14":[3.47,18.16],"6-4-15":[-5.56,6.15],"6-4-16":[-15.54,-2.51],"6-4-17":[-23.21,-7.81],"6-4-18":[-26.71,-10.93],"6-4-19":[-28,-11.62],"6-4-20":[-24.27,-7.94],"6-4-21":[-14.62,0.97],"6-4-22":[-0.2,17.55],"6-4-23":[2.53,28.15],"6-4-24":[7.62,19.59],"6-4-25":[8.14,21.94],"6-4-26":[9.01,22.24],"6-4-27":[10.38,25.71],"6-4-28":[11.65,27.19],"6-4-29":[12.01,27.84],"6-4-30":[12.52,28.27],"6-4-31":[13.6,29.58],"6-4-32":[14.29,32.89],"6-4-33":[15.45,34.86],"6-4-34":[16.24,35.6],"6-4-35":[15.79,39.9],"6-4-36":[15.18,43.72],"6-4-37":[15.33,45.71],"6-4-38":[15.37,48.56],"6-4-39":[15.29,45.88],"6-4-40":[15.09,44.41],"6-4-41":[14.97,42.29],"6-4-42":[13.73,42.26],"6-4-43":[12.06,37.32],"6-4-44":[10.39,32.28],"6-4-45":[5.84,25.33],"6-4-46":[-0.37,17.65],"6-4-47":[-16.61,1.08],"6-4-48":[-26.32,-7.42],"6-4-49":[-40.76,-13.57],"6-4-50":[-53.73,-20.05],"6-4-51":[-70.17,-26.95],"6-4-52":[-80.79,-33.29],"6-4-53":[-89,-39.39],"6-4-54":[-97.35,-43.1],"6-4-55":[-113.49,-49.01],"6-4-56":[-126.75,-56.1],"6-4-57":[-131.59,-62.78],"6-4-58":[-131.91,-58.9],"6-4-59":[-117.3,-55.06],"6-4-60":[-111.07,-49.97],"6-4-61":[-98.75,-43.61],"6-4-62":[-87.85,3807.76],"6-4-63":[-29.54,3106.13],"6-5-0":[10.78,27.12],"6-5-1":[8.58,21.1],"5-2-0":[8.58,27.12],"6-5-2":[3.17,17.66],"6-5-3":[0.92,7.26],"5-2-1":[0.92,17.66],"6-5-4":[-0.48,8],"6-5-5":[-2.17,1.64],"5-2-2":[-2.17,8.01],"6-5-6":[-0.74,0.57],"6-5-7":[-0.44,977.81],"5-2-3":[-1.08,977.81],"6-5-8":[1.07,1285.63],"6-5-9":[5.92,689.98],"5-2-4":[1.07,1285.63],"6-5-10":[9.22,574.41],"6-5-11":[12.46,29.76],"5-2-5":[9.22,653.36],"6-5-12":[-36.25,2863.96],"6-5-13":[-3.12,25.08],"5-2-6":[-36.25,2863.96],"6-5-14":[3.54,19.59],"6-5-15":[-6.33,5.94],"5-2-7":[-6.33,19.59],"6-5-16":[-17.4,-2.51],"6-5-17":[-24.54,-7.99],"5-2-8":[-24.54,-2.51],"6-5-18":[-27.22,-11.55],"6-5-19":[-27.57,-11.81],"5-2-9":[-28,-10.93],"6-5-20":[-24.98,-7.94],"6-5-21":[-15.88,-0.19],"5-2-10":[-24.98,0.97],"6-5-22":[-3.57,8.23],"6-5-23":[3.2,68.18],"5-2-11":[-3.57,68.18],"6-5-24":[7.47,18.67],"6-5-25":[7.19,18.1],"5-2-12":[7.19,21.94],"6-5-26":[7.38,20.47],"6-5-27":[8.56,27.76],"5-2-13":[7.38,27.76],"6-5-28":[11.8,30.78],"6-5-29":[12.82,30.66],"5-2-14":[11.65,30.78],"6-5-30":[13.61,32.3],"6-5-31":[13.86,32.65],"5-2-15":[12.52,32.65],"6-5-32":[14.35,32.3],"6-5-33":[15.09,34.31],"5-2-16":[14.29,34.86],"6-5-34":[14.43,33.96],"6-5-35":[14.39,37.54],"5-2-17":[14.39,39.9],"6-5-36":[12.64,37.44],"6-5-37":[11.66,31.1],"5-2-18":[11.66,45.71],"6-5-38":[11.75,38.62],"6-5-39":[12.15,31.7],"5-2-19":[11.75,48.56],"6-5-40":[10.41,30.13],"6-5-41":[10.41,29.27],"5-2-20":[10.41,44.41],"6-5-42":[10.26,28.59],"6-5-43":[8.59,25.16],"5-2-21":[8.59,42.26],"6-5-44":[6.7,23.39],"6-5-45":[4.27,19.09],"5-2-22":[4.27,32.28],"6-5-46":[-1.36,10.74],"6-5-47":[-17.27,-0.35],"5-2-23":[-17.27,17.65],"6-5-48":[-26.4,-8.28],"6-5-49":[-40.48,-13.41],"5-2-24":[-40.76,-7.42],"6-5-50":[-51.99,-19.83],"6-5-51":[-66.22,-25.93],"5-2-25":[-70.17,-19.83],"6-5-52":[-77.24,-31.84],"6-5-53":[-85.9,-37.71],"5-2-26":[-89,-31.84],"6-5-54":[-96.28,-42.09],"6-5-55":[-112.03,-48.58],"5-2-27":[-113.49,-42.09],"6-5-56":[-123.43,-55.02],"6-5-57":[-130.93,-62.4],"5-2-28":[-131.59,-55.02],"6-5-58":[-131.32,-59.02],"6-5-59":[-121.42,-54.72],"5-2-29":[-131.91,-54.72],"6-5-60":[-111.23,146.66],"6-5-61":[-98.4,-43.74],"5-2-30":[-111.23,146.66],"6-5-62":[-87.94,3579.75],"6-5-63":[-29.55,3100.28],"5-2-31":[-87.94,3807.76],"6-6-0":[10.89,27.18],"6-6-1":[8.99,21.34],"6-6-2":[3.2,17.98],"6-6-3":[0.5,6.62],"6-6-4":[-2.95,6.62],"6-6-5":[-3.68,0.42],"6-6-6":[-2.02,37.03],"6-6-7":[-1.02,1376.89],"6-6-8":[3.71,982.62],"6-6-9":[7.43,985.82],"6-6-10":[11.94,1234.98],"6-6-11":[13.11,705.14],"6-6-12":[-89.41,2536.32],"6-6-13":[3.4,22.83],"6-6-14":[2.65,19.52],"6-6-15":[-7.99,5.64],"6-6-16":[-18.67,-3.61],"6-6-17":[-26.52,-9.15],"6-6-18":[-29.62,-12.33],"6-6-19":[-29.54,-12.54],"6-6-20":[-27.32,-8.27],"6-6-21":[-18.45,-1.95],"6-6-22":[-6.48,7.14],"6-6-23":[3.01,190.01],"6-6-24":[6.51,138.47],"6-6-25":[5.69,15.96],"6-6-26":[5.4,16.51],"6-6-27":[6.05,22.74],"6-6-28":[9.02,28.21],"6-6-29":[-17.46,51.55],"6-6-30":[13.15,50.16],"6-6-31":[15.34,33.27],"6-6-32":[14.32,31.91],"6-6-33":[13.67,32.66],"6-6-34":[12.2,30.79],"6-6-35":[8.78,41.94],"6-6-36":[9.46,29.88],"6-6-37":[9.15,25.29],"6-6-38":[9.38,32.55],"6-6-39":[9.54,25.04],"6-6-40":[7.99,24.13],"6-6-41":[6.63,21.25],"6-6-42":[6.03,21.21],"6-6-43":[5.82,20.07],"6-6-44":[4.24,16.55],"6-6-45":[2.14,12.64],"6-6-46":[-4.05,7.66],"6-6-47":[-16.62,-0.23],"6-6-48":[-26.47,-8.01],"6-6-49":[-39.59,-13.39],"6-6-50":[-50.27,-19.08],"6-6-51":[-63.69,-24.71],"6-6-52":[-73.99,-30.15],"6-6-53":[-84.19,-35.56],"6-6-54":[-95.47,-40.93],"6-6-55":[-110.06,-48.04],"6-6-56":[-123.5,-54.77],"6-6-57":[-129.75,-61.69],"6-6-58":[-129.75,-62.06],"6-6-59":[-121.74,-53.84],"6-6-60":[-109.45,382.35],"6-6-61":[-98.13,-36.44],"6-6-62":[-87.49,3110.85],"6-6-63":[-29.55,3090.17],"6-7-0":[11.05,27.23],"6-7-1":[8.99,21.62],"5-3-0":[8.99,27.23],"6-7-2":[3.11,18.02],"6-7-3":[-1.88,4.75],"5-3-1":[-1.88,18.02],"4-1-0":[-1.88,27.23],"6-7-4":[-2.23,3.16],"6-7-5":[-10.48,-0.69],"5-3-2":[-10.48,6.62],"6-7-6":[-6.6,40.51],"6-7-7":[4.26,1489.28],"5-3-3":[-6.6,1489.28],"4-1-1":[-10.48,1489.28],"3-0-0":[-10.48,1489.28],"6-7-8":[5.88,1063.92],"6-7-9":[20.7,1104.57],"5-3-4":[3.71,1104.57],"6-7-10":[14.91,1599.96],"6-7-11":[-8.97,1740.57],"5-3-5":[-8.97,1740.57],"4-1-2":[-8.97,1740.57],"6-7-12":[-61.85,2512.65],"6-7-13":[5.57,22.76],"5-3-6":[-89.41,2536.32],"6-7-14":[0.64,18.21],"6-7-15":[-12.27,3.05],"5-3-7":[-12.27,19.52],"4-1-3":[-89.41,2863.96],"3-0-1":[-89.41,2863.96],"6-7-16":[-22.25,-4.09],"6-7-17":[-29.14,-10.07],"5-3-8":[-29.14,-3.61],"6-7-18":[-31.98,-13.47],"6-7-19":[-31.86,-13.83],"5-3-9":[-31.98,-12.33],"4-1-4":[-31.98,-2.51],"6-7-20":[-30.11,-10],"6-7-21":[-23.56,-3.54],"5-3-10":[-30.11,-1.95],"6-7-22":[-13.91,4.69],"6-7-23":[0.99,14.6],"5-3-11":[-13.91,190.01],"4-1-5":[-30.11,190.01],"3-0-2":[-31.98,190.01],"6-7-24":[3.42,1613.09],"6-7-25":[5.02,15.52],"5-3-12":[3.42,1613.09],"6-7-26":[3.25,11],"6-7-27":[3.44,17.46],"5-3-13":[3.25,22.74],"4-1-6":[3.25,1613.09],"6-7-28":[7.09,27.01],"6-7-29":[10.93,32.99],"5-3-14":[-17.46,51.55],"6-7-30":[11.96,44.95],"6-7-31":[15.14,36.64],"5-3-15":[11.96,50.16],"4-1-7":[-17.46,51.55],"3-0-3":[-17.46,1613.09],"6-7-32":[14.44,33.46],"6-7-33":[12.08,29.13],"5-3-16":[12.08,33.46],"6-7-34":[9.43,27.02],"6-7-35":[7.86,36.94],"5-3-17":[7.86,41.94],"4-1-8":[7.86,41.94],"6-7-36":[7.22,22.36],"6-7-37":[6.79,18.93],"5-3-18":[6.79,29.88],"6-7-38":[1.56,124.3],"6-7-39":[2.32,568.37],"5-3-19":[1.56,568.37],"4-1-9":[1.56,568.37],"3-0-4":[1.56,1897.33],"6-7-40":[4.25,19.09],"6-7-41":[3.01,14.77],"5-3-20":[3.01,24.13],"6-7-42":[2.34,12.33],"6-7-43":[2.29,11.63],"5-3-21":[2.29,21.21],"4-1-10":[2.29,44.41],"6-7-44":[1.26,10.73],"6-7-45":[0.76,8.15],"5-3-22":[0.76,16.55],"6-7-46":[-6.78,4.11],"6-7-47":[-16.16,-2.7],"5-3-23":[-16.62,7.66],"4-1-11":[-17.27,32.28],"3-0-5":[-36.78,550.11],"6-7-48":[-26.58,-6.48],"6-7-49":[-40.15,-13.72],"5-3-24":[-40.15,-6.48],"6-7-50":[-47.56,-19.18],"6-7-51":[-60.03,-23.45],"5-3-25":[-63.69,-19.08],"4-1-12":[-70.17,-6.48],"6-7-52":[-69.12,-28.3],"6-7-53":[-81.45,-33.85],"5-3-26":[-84.19,-28.3],"6-7-54":[-93.97,-39.48],"6-7-55":[-109.85,-47.07],"5-3-27":[-110.06,-39.48],"4-1-13":[-113.49,-28.3],"3-0-6":[-120.92,6.49],"6-7-56":[-122.72,-54.61],"6-7-57":[-128.44,-60.84],"5-3-28":[-129.75,-54.61],"6-7-58":[-128.99,-62.74],"6-7-59":[-122.71,340.29],"5-3-29":[-129.75,340.29],"4-1-14":[-131.91,340.29],"6-7-60":[-107.62,329.56],"6-7-61":[-97.3,5.39],"5-3-30":[-109.45,382.35],"6-7-62":[-86.37,3872.33],"6-7-63":[-29.55,3078.77],"5-3-31":[-87.49,3872.33],"4-1-15":[-111.23,3872.33],"3-0-7":[-132.79,3970.41],"6-8-0":[11.25,27.28],"6-8-1":[8.74,21.81],"6-8-2":[2.69,17.9],"6-8-3":[-2.96,4.36],"6-8-4":[-4.02,0.26],"6-8-5":[-11.5,-1.15],"6-8-6":[-10.53,46.22],"6-8-7":[12.55,2230.09],"6-8-8":[36.02,2322.75],"6-8-9":[40.43,1231.31],"6-8-10":[15.75,1286.11],"6-8-11":[-30.38,2365.52],"6-8-12":[7.93,340.69],"6-8-13":[5.51,23.37],"6-8-14":[-1.67,15.39],"6-8-15":[-16.52,0.65],"6-8-16":[-24.69,-6.49],"6-8-17":[-32.29,-11.47],"6-8-18":[-35.39,-14.68],"6-8-19":[-34.56,-15.15],"6-8-20":[-31.71,-12.28],"6-8-21":[-26.05,-7.16],"6-8-22":[-18.78,1],"6-8-23":[-3.52,7.31],"6-8-24":[-3.45,4224.76],"6-8-25":[1,4199.19],"6-8-26":[0.32,10.2],"6-8-27":[0.52,13.28],"6-8-28":[4.26,20.81],"6-8-29":[8.36,29.82],"6-8-30":[12.88,34],"6-8-31":[-1.72,39.3],"6-8-32":[14.17,33.54],"6-8-33":[6.64,33.65],"6-8-34":[6.42,29.43],"6-8-35":[5.61,18.21],"6-8-36":[5.17,15.57],"6-8-37":[5.39,18.43],"6-8-38":[3.83,14.4],"6-8-39":[3.25,45.92],"6-8-40":[1.53,11.5],"6-8-41":[0.06,8],"6-8-42":[-0.02,5.43],"6-8-43":[0.21,5.22],"6-8-44":[-2.28,4.54],"6-8-45":[-2.62,2.59],"6-8-46":[-8.98,1.16],"6-8-47":[-17.03,-3.98],"6-8-48":[-25.84,-6.48],"6-8-49":[-38.78,-13.07],"6-8-50":[-45.69,-18.94],"6-8-51":[-56.6,-22.56],"6-8-52":[-66.31,-26.79],"6-8-53":[-78.98,-32.27],"6-8-54":[-91.83,-38.18],"6-8-55":[-109.23,-46.25],"6-8-56":[-120.92,-53.72],"6-8-57":[-127.6,-60.42],"6-8-58":[-128.14,-62.51],"6-8-59":[-122.71,772.25],"6-8-60":[-106.38,254.93],"6-8-61":[-97.02,77.33],"6-8-62":[-84.41,3797.09],"6-8-63":[-29.55,3066.33],"6-9-0":[11.45,27.35],"6-9-1":[8.74,22.1],"5-4-0":[8.74,27.35],"6-9-2":[2.31,17.45],"6-9-3":[-4.87,3.84],"5-4-1":[-4.87,17.9],"6-9-4":[-6.12,-0.5],"6-9-5":[-15.2,-2.83],"5-4-2":[-15.2,0.26],"6-9-6":[-15.2,52.5],"6-9-7":[4.19,2249.45],"5-4-3":[-15.2,2249.45],"6-9-8":[56.64,1957.92],"6-9-9":[69.73,3549.52],"5-4-4":[36.02,3549.52],"6-9-10":[-8.73,3498.22],"6-9-11":[-44.9,2301.61],"5-4-5":[-44.9,3498.22],"6-9-12":[6.61,28.12],"6-9-13":[5.07,22.28],"5-4-6":[5.07,340.69],"6-9-14":[-6.22,10.49],"6-9-15":[-22.36,-1.66],"5-4-7":[-22.36,15.39],"6-9-16":[-30.48,-8.53],"6-9-17":[-38.55,-13.07],"5-4-8":[-38.55,-6.49],"6-9-18":[-40.53,-16.27],"6-9-19":[-40.96,-16.03],"5-4-9":[-40.96,-14.68],"6-9-20":[-37.32,-13.34],"6-9-21":[-28.36,-9.72],"5-4-10":[-37.32,-7.16],"6-9-22":[-23.57,-3.51],"6-9-23":[-16.83,1.38],"5-4-11":[-23.57,7.31],"6-9-24":[-11.52,8.24],"6-9-25":[-7.91,8.27],"5-4-12":[-11.52,4224.76],"6-9-26":[-7.04,2.76],"6-9-27":[-5.19,7.73],"5-4-13":[-7.04,13.28],"6-9-28":[1.39,14.78],"6-9-29":[5.73,25.09],"5-4-14":[1.39,29.82],"6-9-30":[10.36,28.45],"6-9-31":[12.39,30.86],"5-4-15":[-1.72,39.3],"6-9-32":[13.54,31.34],"6-9-33":[10.49,28.46],"5-4-16":[6.64,33.65],"6-9-34":[7.62,22.63],"6-9-35":[4.58,15.89],"5-4-17":[4.58,29.43],"6-9-36":[2.95,11.11],"6-9-37":[-14.06,364.92],"5-4-18":[-14.06,364.92],"6-9-38":[1.83,11.45],"6-9-39":[-0.79,7.86],"5-4-19":[-0.79,45.92],"6-9-40":[-2.81,87.14],"6-9-41":[-2.9,2.06],"5-4-20":[-2.9,87.14],"6-9-42":[-3.32,0.4],"6-9-43":[-4.29,0.66],"5-4-21":[-4.29,5.43],"6-9-44":[-7.14,0.22],"6-9-45":[-8.9,-1.28],"5-4-22":[-8.9,4.54],"6-9-46":[-12.57,-1.34],"6-9-47":[-20.7,-5.15],"5-4-23":[-20.7,1.16],"6-9-48":[-26.09,-8.73],"6-9-49":[-37.6,-13.13],"5-4-24":[-38.78,-6.48],"6-9-50":[-45.9,-17.8],"6-9-51":[-53.38,-22.53],"5-4-25":[-56.6,-17.8],"6-9-52":[-62.81,-25.9],"6-9-53":[-76.09,-30.77],"5-4-26":[-78.98,-25.9],"6-9-54":[-90.63,-37.36],"6-9-55":[-107.41,-45.63],"5-4-27":[-109.23,-37.36],"6-9-56":[-119.96,-53.04],"6-9-57":[-125.63,-58.67],"5-4-28":[-127.6,-53.04],"6-9-58":[-126.31,-58.13],"6-9-59":[-119.94,1007.23],"5-4-29":[-128.14,1007.23],"6-9-60":[-106.59,462.57],"6-9-61":[-96,462.57],"5-4-30":[-106.59,462.57],"6-9-62":[-84.94,2783.57],"6-9-63":[-29.55,3039.73],"5-4-31":[-84.94,3797.09],"6-10-0":[11.66,27.39],"6-10-1":[8.8,22.47],"6-10-2":[2.11,17.55],"6-10-3":[-5.07,2.92],"6-10-4":[-6.14,-2.32],"6-10-5":[-16.63,-2.83],"6-10-6":[-16.98,31.96],"6-10-7":[-2.48,2250.87],"6-10-8":[75.19,1714.22],"6-10-9":[30.42,6207.28],"6-10-10":[-317.19,2318.12],"6-10-11":[5.09,380.19],"6-10-12":[6.09,24.81],"6-10-13":[0.81,18.21],"6-10-14":[-11.19,6.41],"6-10-15":[-27.78,-4.11],"6-10-16":[-35.96,-11.54],"6-10-17":[-43.9,-15.64],"6-10-18":[-45.01,-19.38],"6-10-19":[-44.42,-18.81],"6-10-20":[-43.08,-14.67],"6-10-21":[-34.29,-11.93],"6-10-22":[-28.41,-8.91],"6-10-23":[-23.59,-5.93],"6-10-24":[-20.03,-3.95],"6-10-25":[-15.21,-3.18],"6-10-26":[-11.97,-2.83],"6-10-27":[-7.59,2.35],"6-10-28":[-2.35,10.55],"6-10-29":[2.75,19.96],"6-10-30":[6.93,24.2],"6-10-31":[9.9,28.1],"6-10-32":[11.26,27.88],"6-10-33":[8.09,27.31],"6-10-34":[4.97,20.7],"6-10-35":[0.28,29.22],"6-10-36":[0.02,34.33],"6-10-37":[-7.05,982.44],"6-10-38":[-47,1738.21],"6-10-39":[-8.61,368.88],"6-10-40":[-9.1,399.3],"6-10-41":[-6.13,-0.9],"6-10-42":[-5.03,-1.07],"6-10-43":[-7.02,-1.37],"6-10-44":[-10.1,-2.29],"6-10-45":[-14.95,-3.92],"6-10-46":[-16.66,-4.4],"6-10-47":[-23.64,-6.94],"6-10-48":[-27.68,-10.44],"6-10-49":[-35.5,-13.58],"6-10-50":[-42.84,-16.97],"6-10-51":[-51.64,-20.99],"6-10-52":[-60.08,-24.38],"6-10-53":[-74.73,-29.94],"6-10-54":[-88.65,-36.56],"6-10-55":[-106.09,-44.4],"6-10-56":[-116.67,-51.74],"6-10-57":[-123.8,-57.34],"6-10-58":[-124.5,-55.65],"6-10-59":[-112.82,883.88],"6-10-60":[-105.11,570.37],"6-10-61":[-5.84,549.47],"6-10-62":[-84.94,2425.34],"6-10-63":[-29.55,3008.67],"6-11-0":[11.74,27.45],"6-11-1":[8.8,23.16],"5-5-0":[8.8,27.45],"6-11-2":[1.89,18.15],"6-11-3":[-6.35,2.66],"5-5-1":[-6.35,18.15],"4-2-0":[-6.35,27.45],"6-11-4":[-8.07,-2.32],"6-11-5":[-16.52,-3.47],"5-5-2":[-16.63,-2.32],"6-11-6":[-17.37,5.59],"6-11-7":[-2.46,2337.17],"5-5-3":[-17.37,2337.17],"4-2-1":[-17.37,2337.17],"6-11-8":[96.66,1624.53],"6-11-9":[111.02,4180.16],"5-5-4":[30.42,6207.28],"6-11-10":[-100.65,4014.2],"6-11-11":[5.56,27.09],"5-5-5":[-317.19,4014.2],"4-2-2":[-317.19,6207.28],"6-11-12":[4.91,20.02],"6-11-13":[-4.06,12.89],"5-5-6":[-4.06,24.81],"6-11-14":[-18.2,1.04],"6-11-15":[-33.3,-7.02],"5-5-7":[-33.3,6.41],"4-2-3":[-33.3,340.69],"6-11-16":[-42.2,-14.25],"6-11-17":[-50.16,-18.62],"5-5-8":[-50.16,-11.54],"6-11-18":[-52.64,-21.88],"6-11-19":[-51.01,-21.95],"5-5-9":[-52.64,-18.81],"4-2-4":[-52.64,-6.49],"6-11-20":[-49.53,-17.94],"6-11-21":[-42.64,-14.48],"5-5-10":[-49.53,-11.93],"6-11-22":[-34.91,-12.52],"6-11-23":[-31.5,-10.6],"5-5-11":[-34.91,-5.93],"4-2-5":[-49.53,7.31],"6-11-24":[-29.55,-8.2],"6-11-25":[-23.86,-6.38],"5-5-12":[-29.55,-3.18],"6-11-26":[-19.87,-4.46],"6-11-27":[-13.37,-1.47],"5-5-13":[-19.87,2.35],"4-2-6":[-29.55,4224.76],"6-11-28":[-8.39,3.39],"6-11-29":[-0.38,13.1],"5-5-14":[-8.39,19.96],"6-11-30":[3.79,18.24],"6-11-31":[7.04,23.18],"5-5-15":[3.79,28.1],"4-2-7":[-8.39,39.3],"6-11-32":[8.41,23.23],"6-11-33":[6.61,21.8],"5-5-16":[6.61,27.88],"6-11-34":[1.94,15.53],"6-11-35":[-0.83,8.74],"5-5-17":[-0.83,29.22],"4-2-8":[-0.83,33.65],"6-11-36":[-5.27,4.25],"6-11-37":[-19.17,108.86],"5-5-18":[-19.17,982.44],"6-11-38":[-10.07,418.12],"6-11-39":[-13.37,-1.41],"5-5-19":[-47,1738.21],"4-2-9":[-47,1738.21],"6-11-40":[-14.02,394.12],"6-11-41":[-9.37,-2.74],"5-5-20":[-14.02,399.3],"6-11-42":[-11.22,-2.09],"6-11-43":[-11.68,-2.6],"5-5-21":[-11.68,-1.07],"4-2-10":[-14.02,399.3],"6-11-44":[-14.51,-3.6],"6-11-45":[-18.66,-5.6],"5-5-22":[-18.66,-2.29],"6-11-46":[-22.45,-7.76],"6-11-47":[-26.05,-8.93],"5-5-23":[-26.05,-4.4],"4-2-11":[-26.05,4.54],"6-11-48":[-29.53,-11.9],"6-11-49":[-34.85,-13.59],"5-5-24":[-35.5,-10.44],"6-11-50":[-40.97,-16.5],"6-11-51":[-48.53,-20.15],"5-5-25":[-51.64,-16.5],"4-2-12":[-56.6,-6.48],"6-11-52":[-58.21,-23.76],"6-11-53":[-72.99,-29.48],"5-5-26":[-74.73,-23.76],"6-11-54":[-86.21,-36.12],"6-11-55":[-103.18,-43.08],"5-5-27":[-106.09,-36.12],"4-2-13":[-109.23,-23.76],"6-11-56":[-113.79,-50.3],"6-11-57":[-120.63,-55.96],"5-5-28":[-123.8,-50.3],"6-11-58":[-122.11,-30.17],"6-11-59":[-109.73,896.34],"5-5-29":[-124.5,896.34],"4-2-14":[-128.14,1007.23],"6-11-60":[-50.89,667.99],"6-11-61":[119.31,564.8],"5-5-30":[-105.11,667.99],"6-11-62":[-24.93,3379.23],"6-11-63":[-29.55,2977.45],"5-5-31":[-84.94,3379.23],"4-2-15":[-106.59,3797.09],"6-12-0":[11.81,27.54],"6-12-1":[9.27,23.85],"6-12-2":[1.81,18.51],"6-12-3":[-7.36,2.56],"6-12-4":[-10.2,-3.36],"6-12-5":[-14.2,-3.64],"6-12-6":[-17.25,-1.46],"6-12-7":[-2.4,2626.58],"6-12-8":[127.44,1971.14],"6-12-9":[267.44,4964.36],"6-12-10":[-3.84,5003.13],"6-12-11":[5.53,17.77],"6-12-12":[1.22,17.44],"6-12-13":[-9.28,8.08],"6-12-14":[-24.33,-2.54],"6-12-15":[-38.37,-10.05],"6-12-16":[-46.59,-16.83],"6-12-17":[-57.08,-21.69],"6-12-18":[-58.76,-25],"6-12-19":[-58.51,-24.8],"6-12-20":[-55.3,-22.36],"6-12-21":[-47.72,-17.53],"6-12-22":[-42.01,-15.94],"6-12-23":[-37.95,-14.94],"6-12-24":[-36.96,-12.18],"6-12-25":[-32.38,-10.05],"6-12-26":[-27.79,-7.26],"6-12-27":[-19.35,-4.41],"6-12-28":[-13.92,-0.37],"6-12-29":[-6.27,6.6],"6-12-30":[-0.21,13.43],"6-12-31":[3.37,18.86],"6-12-32":[5.2,19.08],"6-12-33":[3.85,16.44],"6-12-34":[1,12.4],"6-12-35":[-5.91,3.06],"6-12-36":[-9.39,-0.47],"6-12-37":[-17.5,26.39],"6-12-38":[-14.85,15.85],"6-12-39":[-17.05,13.14],"6-12-40":[-17.31,-5.04],"6-12-41":[-154.99,367.1],"6-12-42":[-15.2,-4.66],"6-12-43":[-16.85,-5.49],"6-12-44":[-17.72,-5.68],"6-12-45":[-20.88,-7.48],"6-12-46":[-23.23,-9.37],"6-12-47":[-28.2,-11.32],"6-12-48":[-31.15,-13.01],"6-12-49":[-35.22,-15.16],"6-12-50":[-39.72,-16.79],"6-12-51":[-47.41,-19.15],"6-12-52":[-57.34,-23.29],"6-12-53":[-72.24,-28.77],"6-12-54":[-84.64,-35.59],"6-12-55":[-100.6,-41.81],"6-12-56":[-110.81,-48.6],"6-12-57":[-116.73,-54.27],"6-12-58":[-118.77,732.21],"6-12-59":[-106.63,1118.71],"6-12-60":[70.79,697.82],"6-12-61":[154.07,547.44],"6-12-62":[132.66,3177.52],"6-12-63":[-29.55,2958.4],"6-13-0":[11.89,27.69],"6-13-1":[9.27,24.72],"5-6-0":[9.27,27.69],"6-13-2":[1.77,18.69],"6-13-3":[-8.12,2.29],"5-6-1":[-8.12,18.69],"6-13-4":[-12.79,-3.7],"6-13-5":[-16.12,-5.11],"5-6-2":[-16.12,-3.36],"6-13-6":[-16.46,-1.51],"6-13-7":[-4.5,2443.65],"5-6-3":[-17.25,2626.58],"6-13-8":[159.96,1955.52],"6-13-9":[264.67,3305.19],"5-6-4":[127.44,4964.36],"6-13-10":[-0.63,5501.18],"6-13-11":[3.4,16.19],"5-6-5":[-3.84,5501.18],"6-13-12":[-4.33,12.53],"6-13-13":[-18.11,1.23],"5-6-6":[-18.11,17.44],"6-13-14":[-32.01,-5.03],"6-13-15":[-45.8,-13.68],"5-6-7":[-45.8,-2.54],"6-13-16":[-52.61,-19.6],"6-13-17":[-65.07,-24.29],"5-6-8":[-65.07,-16.83],"6-13-18":[-66.2,-29.09],"6-13-19":[-65.62,-28.05],"5-6-9":[-66.2,-24.8],"6-13-20":[-61.26,-25.11],"6-13-21":[-55.52,-21.57],"5-6-10":[-61.26,-17.53],"6-13-22":[-51.8,-19.25],"6-13-23":[-47.07,-19.08],"5-6-11":[-51.8,-14.94],"6-13-24":[-46.24,-17.09],"6-13-25":[-43.41,-14.52],"5-6-12":[-46.24,-10.05],"6-13-26":[-38.71,-10.51],"6-13-27":[-27.96,-7.34],"5-6-13":[-38.71,-4.41],"6-13-28":[-23.22,-4.17],"6-13-29":[-16.97,-0.2],"5-6-14":[-23.22,6.6],"6-13-30":[-9.11,5.15],"6-13-31":[-0.62,10.05],"5-6-15":[-9.11,18.86],"6-13-32":[1.62,10.97],"6-13-33":[1.64,9.15],"5-6-16":[1.62,19.08],"6-13-34":[-12.01,574],"6-13-35":[-8.4,3.2],"5-6-17":[-12.01,574],"6-13-36":[-12.41,-2.96],"6-13-37":[-12.61,18.94],"5-6-18":[-17.5,26.39],"6-13-38":[-17.05,15.14],"6-13-39":[-23.08,21.33],"5-6-19":[-23.08,21.33],"6-13-40":[-20.89,-7.97],"6-13-41":[-20.89,-4.36],"5-6-20":[-154.99,367.1],"6-13-42":[-17.41,-4.92],"6-13-43":[-19.71,-8.03],"5-6-21":[-19.71,-4.66],"6-13-44":[-19.71,-8.36],"6-13-45":[-23.09,-9.22],"5-6-22":[-23.09,-5.68],"6-13-46":[-26.22,-10.62],"6-13-47":[-29.93,-11.92],"5-6-23":[-29.93,-9.37],"6-13-48":[-33.2,-14.27],"6-13-49":[-36.69,-15.88],"5-6-24":[-36.69,-13.01],"6-13-50":[-37.72,-16.79],"6-13-51":[-46.58,-18.04],"5-6-25":[-47.41,-16.79],"6-13-52":[-56.13,-21.69],"6-13-53":[-71.1,-28.36],"5-6-26":[-72.24,-21.69],"6-13-54":[-82.17,-35.16],"6-13-55":[-96.84,-41.49],"5-6-27":[-100.6,-35.16],"6-13-56":[-107.17,-47.12],"6-13-57":[-113.4,-52.39],"5-6-28":[-116.73,-47.12],"6-13-58":[-113.8,799.79],"6-13-59":[542.77,1415.24],"5-6-29":[-118.77,1415.24],"6-13-60":[220.94,696.8],"6-13-61":[196.25,578.81],"5-6-30":[70.79,697.82],"6-13-62":[157.82,2807.42],"6-13-63":[-29.55,2933.27],"5-6-31":[-29.55,3177.52],"6-14-0":[11.98,27.81],"6-14-1":[9.31,25.28],"6-14-2":[1.78,18.69],"6-14-3":[-8.42,2.84],"6-14-4":[-14.71,-4.24],"6-14-5":[-17.71,-6.65],"6-14-6":[-16.95,-3.21],"6-14-7":[-6.95,1629.08],"6-14-8":[241.64,2195.84],"6-14-9":[291.07,2352.25],"6-14-10":[-17.81,5990.12],"6-14-11":[-1.23,1250.79],"6-14-12":[-8.91,5.47],"6-14-13":[-24.35,-2.9],"6-14-14":[-37.36,-9.51],"6-14-15":[-50.8,-17],"6-14-16":[-57.16,-23.13],"6-14-17":[-69.06,-26.79],"6-14-18":[-71.13,-32.26],"6-14-19":[-70.57,-30.63],"6-14-20":[-66.49,-28.02],"6-14-21":[-61.06,-25.99],"6-14-22":[-58.98,-23.49],"6-14-23":[-55.47,-22.95],"6-14-24":[-54.23,-21.9],"6-14-25":[-50.55,-19.65],"6-14-26":[-46.21,-14.46],"6-14-27":[-36.47,-11.82],"6-14-28":[-32.84,-8.88],"6-14-29":[-24.98,-4.86],"6-14-30":[-17.66,-0.54],"6-14-31":[-8.29,3.14],"6-14-32":[-4.33,4.38],"6-14-33":[-3.04,4.04],"6-14-34":[-30.12,444.87],"6-14-35":[-45.64,1253.85],"6-14-36":[-15.82,-4.2],"6-14-37":[-18.57,11.81],"6-14-38":[-20.38,12.56],"6-14-39":[-34.53,29.28],"6-14-40":[-23.61,-9.96],"6-14-41":[-23.65,-8.25],"6-14-42":[-22.26,-7.63],"6-14-43":[-21.36,-8.79],"6-14-44":[-21.36,-9.44],"6-14-45":[-23.95,-9.8],"6-14-46":[-26.93,-11.59],"6-14-47":[-30.83,-13.34],"6-14-48":[-34.25,-14.96],"6-14-49":[-36.46,-16.64],"6-14-50":[-38.97,-17.15],"6-14-51":[-43.17,-17.84],"6-14-52":[-55.2,-20.47],"6-14-53":[-70.32,-27.45],"6-14-54":[-81.47,-34.2],"6-14-55":[-94.24,-40.37],"6-14-56":[-103.99,-46.19],"6-14-57":[-110.48,-50.32],"6-14-58":[-111.11,1501.65],"6-14-59":[649.8,1730.64],"6-14-60":[290.61,752.21],"6-14-61":[298.29,587.99],"6-14-62":[230.04,3232.04],"6-14-63":[-29.54,2914.46],"6-15-0":[12.07,27.95],"6-15-1":[9.31,25.8],"5-7-0":[9.31,27.95],"6-15-2":[2,18.62],"6-15-3":[-9.36,3.57],"5-7-1":[-9.36,18.69],"4-3-0":[-9.36,27.95],"6-15-4":[-15.66,-4.24],"6-15-5":[-19.9,-7.76],"5-7-2":[-19.9,-4.24],"6-15-6":[-18.71,-3.02],"6-15-7":[-10.73,1677.33],"5-7-3":[-18.71,1677.33],"4-3-1":[-19.9,2626.58],"3-1-0":[-19.9,2626.58],"6-15-8":[6.28,2201.64],"6-15-9":[372.06,2244.89],"5-7-4":[6.28,2352.25],"6-15-10":[-3.5,3286.53],"6-15-11":[-24.01,4338.49],"5-7-5":[-24.01,5990.12],"4-3-2":[-24.01,5990.12],"6-15-12":[-16,0.26],"6-15-13":[-30.5,-5.77],"5-7-6":[-30.5,5.47],"6-15-14":[-41.91,-12.56],"6-15-15":[-54.89,-19.83],"5-7-7":[-54.89,-9.51],"4-3-3":[-54.89,17.44],"3-1-1":[-317.19,6207.28],"2-0-0":[-317.19,6207.28],"6-15-16":[-61.53,-25.72],"6-15-17":[-71.96,-29.35],"5-7-8":[-71.96,-23.13],"6-15-18":[-74.97,-34.5],"6-15-19":[-75.35,-33.7],"5-7-9":[-75.35,-30.63],"4-3-4":[-75.35,-16.83],"6-15-20":[-73.32,-31.19],"6-15-21":[-69.11,-29.89],"5-7-10":[-73.32,-25.99],"6-15-22":[-67.31,-28.48],"6-15-23":[-66.05,-27.68],"5-7-11":[-67.31,-22.95],"4-3-5":[-73.32,-14.94],"3-1-2":[-75.35,7.31],"6-15-24":[-64.91,-26.11],"6-15-25":[-62.05,-23.7],"5-7-12":[-64.91,-19.65],"6-15-26":[-58.25,-19.12],"6-15-27":[-49.51,-17.07],"5-7-13":[-58.25,-11.82],"4-3-6":[-64.91,-4.41],"6-15-28":[-44.78,-13.51],"6-15-29":[-35.93,-9.36],"5-7-14":[-44.78,-4.86],"6-15-30":[-28.32,-5.14],"6-15-31":[-19.14,-2.71],"5-7-15":[-28.32,3.14],"4-3-7":[-44.78,18.86],"3-1-3":[-64.91,4224.76],"2-0-1":[-75.35,4224.76],"6-15-32":[-13.73,-1.71],"6-15-33":[-10.63,-1.49],"5-7-16":[-13.73,4.38],"6-15-34":[-10.78,-2.12],"6-15-35":[-13.93,-2.93],"5-7-17":[-45.64,1253.85],"4-3-8":[-45.64,1253.85],"6-15-36":[-18.78,-4.46],"6-15-37":[-22.12,-7.9],"5-7-18":[-22.12,11.81],"6-15-38":[-22.48,7.98],"6-15-39":[-23.83,16.82],"5-7-19":[-34.53,29.28],"4-3-9":[-34.53,29.28],"3-1-4":[-47,1738.21],"6-15-40":[-25.6,210.54],"6-15-41":[-26.63,-11.38],"5-7-20":[-26.63,210.54],"6-15-42":[-26.15,-10.1],"6-15-43":[-23.47,-10.22],"5-7-21":[-26.15,-7.63],"4-3-10":[-154.99,367.1],"6-15-44":[-23.37,-10.28],"6-15-45":[-24.8,-10.38],"5-7-22":[-24.8,-9.44],"6-15-46":[-27.57,-12.05],"6-15-47":[-31.68,-13.68],"5-7-23":[-31.68,-11.59],"4-3-11":[-31.68,-5.68],"3-1-5":[-154.99,399.3],"2-0-2":[-154.99,1897.33],"6-15-48":[-33.83,-15.28],"6-15-49":[-36.24,-16.57],"5-7-24":[-36.46,-14.96],"6-15-50":[-40.85,-17.93],"6-15-51":[-40.81,-17.17],"5-7-25":[-43.17,-17.15],"4-3-12":[-47.41,-13.01],"6-15-52":[-53.46,-20.29],"6-15-53":[-68.22,-26.61],"5-7-26":[-70.32,-20.29],"6-15-54":[-79.48,-33.55],"6-15-55":[-91.99,-40.09],"5-7-27":[-94.24,-33.55],"4-3-13":[-100.6,-20.29],"3-1-6":[-109.23,-6.48],"6-15-56":[-99.15,-44.2],"6-15-57":[-105.53,-47.94],"5-7-28":[-110.48,-44.2],"6-15-58":[-105.53,1582.81],"6-15-59":[752.2,3280.76],"5-7-29":[-111.11,3280.76],"4-3-14":[-118.77,3280.76],"6-15-60":[370.12,1055.95],"6-15-61":[342.75,583.66],"5-7-30":[290.61,1055.95],"6-15-62":[359.13,3299.77],"6-15-63":[-29.54,2899.4],"5-7-31":[-29.54,3299.77],"4-3-15":[-29.55,3299.77],"3-1-7":[-128.14,3797.09],"2-0-3":[-132.79,3970.41],"6-16-0":[12.18,28.06],"6-16-1":[9.42,26.44],"6-16-2":[2.35,18.81],"6-16-3":[-9.47,3.62],"6-16-4":[-15.5,-4.65],"6-16-5":[-19.9,-6.14],"6-16-6":[-18.71,-2.92],"6-16-7":[-13.51,358.63],"6-16-8":[4.93,2700.74],"6-16-9":[524.03,2379.96],"6-16-10":[138.16,2349.52],"6-16-11":[-19.04,3089.83],"6-16-12":[-32.37,1191.79],"6-16-13":[-32.78,1099.24],"6-16-14":[-42.73,-15.25],"6-16-15":[-55.78,-21.82],"6-16-16":[-62.13,-27.45],"6-16-17":[-73.82,-31.05],"6-16-18":[-77.86,-35.86],"6-16-19":[-79.19,-36.66],"6-16-20":[-78.8,-34.53],"6-16-21":[-75.08,-33.65],"6-16-22":[-74.19,-33.08],"6-16-23":[-73.6,-32.44],"6-16-24":[-71.56,-31.17],"6-16-25":[-70.97,-29.12],"6-16-26":[-66.99,-25.12],"6-16-27":[-59.8,-22.61],"6-16-28":[-53.63,-18.47],"6-16-29":[-44.99,-14.42],"6-16-30":[-35.2,-9.88],"6-16-31":[-25.62,-7.01],"6-16-32":[-19.94,-5.38],"6-16-33":[-16.2,-5.07],"6-16-34":[-15.92,-4.9],"6-16-35":[-16.42,-5.38],"6-16-36":[-19.23,-6.96],"6-16-37":[-22.12,-9.38],"6-16-38":[-22.83,-10.64],"6-16-39":[-23.64,-10.88],"6-16-40":[-25.6,395.5],"6-16-41":[-27.18,-12.58],"6-16-42":[-27.19,-11.89],"6-16-43":[-25.25,-11.48],"6-16-44":[-23.89,-10.73],"6-16-45":[-25.51,-11.64],"6-16-46":[-27.55,-12.42],"6-16-47":[-30.38,-13.83],"6-16-48":[-32.72,-14.63],"6-16-49":[-36.23,-15.29],"6-16-50":[-40.57,-17.57],"6-16-51":[-40.62,-17.17],"6-16-52":[-52.6,-20.03],"6-16-53":[-67.1,-26.24],"6-16-54":[-78.95,-32.27],"6-16-55":[-88.41,-38.74],"6-16-56":[-94.87,-42.36],"6-16-57":[-102.31,-45.37],"6-16-58":[-102.31,2780.28],"6-16-59":[1055.94,3057.06],"6-16-60":[561.63,1251.61],"6-16-61":[360.22,729.54],"6-16-62":[569.39,3324.73],"6-16-63":[-29.54,2887.59],"6-17-0":[12.28,28.2],"6-17-1":[9.42,27.09],"5-8-0":[9.42,28.2],"6-17-2":[2.44,19.47],"6-17-3":[-9.26,3.4],"5-8-1":[-9.47,19.47],"6-17-4":[-12.46,-4.27],"6-17-5":[-17.6,-3.54],"5-8-2":[-19.9,-3.54],"6-17-6":[-16.97,-3.57],"6-17-7":[-17.03,450.81],"5-8-3":[-18.71,450.81],"6-17-8":[-1,2409.04],"6-17-9":[729.41,2941.77],"5-8-4":[-1,2941.77],"6-17-10":[639.5,2300.19],"6-17-11":[-7.73,3041.41],"5-8-5":[-19.04,3089.83],"6-17-12":[-40.41,2709.89],"6-17-13":[-36.12,1110.77],"5-8-6":[-40.41,2709.89],"6-17-14":[-44.38,-16.38],"6-17-15":[-55.37,-22.03],"5-8-7":[-55.78,-15.25],"6-17-16":[-62.03,-26.24],"6-17-17":[-74.43,-30.62],"5-8-8":[-74.43,-26.24],"6-17-18":[-79.53,-36.84],"6-17-19":[-81.78,-38.94],"5-8-9":[-81.78,-35.86],"6-17-20":[-81.39,-38.14],"6-17-21":[-82.89,-37.3],"5-8-10":[-82.89,-33.65],"6-17-22":[-83.1,-37.32],"6-17-23":[-82.35,-36.18],"5-8-11":[-83.1,-32.44],"6-17-24":[-81.19,-36.06],"6-17-25":[-80.32,-33.99],"5-8-12":[-81.19,-29.12],"6-17-26":[-77.62,-31.19],"6-17-27":[-70.94,-27.45],"5-8-13":[-77.62,-22.61],"6-17-28":[-64.31,-23.68],"6-17-29":[-54,-18.06],"5-8-14":[-64.31,-14.42],"6-17-30":[-43.73,-13.82],"6-17-31":[-34.31,-10.34],"5-8-15":[-43.73,-7.01],"6-17-32":[-28.04,-8.32],"6-17-33":[-22.53,-7.81],"5-8-16":[-28.04,-5.07],"6-17-34":[-20.71,-7.81],"6-17-35":[-20.22,-8],"5-8-17":[-20.71,-4.9],"6-17-36":[-18.91,-8.25],"6-17-37":[-21.69,-9.44],"5-8-18":[-22.12,-6.96],"6-17-38":[-22.79,-10.07],"6-17-39":[-23.64,-11.06],"5-8-19":[-23.64,-10.07],"6-17-40":[-25.6,315.4],"6-17-41":[-27.15,-11.32],"5-8-20":[-27.18,395.5],"6-17-42":[-27.2,-12.55],"6-17-43":[-25.3,-11.22],"5-8-21":[-27.2,-11.22],"6-17-44":[-23.39,-10.83],"6-17-45":[-25.69,-11.63],"5-8-22":[-25.69,-10.73],"6-17-46":[-27.32,-12.29],"6-17-47":[-29.02,-13.43],"5-8-23":[-30.38,-12.29],"6-17-48":[-30.31,-14],"6-17-49":[-34.83,-14.43],"5-8-24":[-36.23,-14],"6-17-50":[-36.28,-15.71],"6-17-51":[-39.91,-16.54],"5-8-25":[-40.62,-15.71],"6-17-52":[-49.95,-19.22],"6-17-53":[-64.39,-24.43],"5-8-26":[-67.1,-19.22],"6-17-54":[-75.83,-31.35],"6-17-55":[-84.15,-37.16],"5-8-27":[-88.41,-31.35],"6-17-56":[-89.73,-39.94],"6-17-57":[-97.13,-43.44],"5-8-28":[-102.31,-39.94],"6-17-58":[-96.35,2730.02],"6-17-59":[1251.6,2341.32],"5-8-29":[-102.31,3057.06],"6-17-60":[646.73,1350.33],"6-17-61":[434.89,803.49],"5-8-30":[360.22,1350.33],"6-17-62":[729.53,3573.17],"6-17-63":[-29.54,2879.05],"5-8-31":[-29.54,3573.17],"6-18-0":[12.4,28.31],"6-18-1":[10.07,27.6],"6-18-2":[2.4,20.08],"6-18-3":[-8.33,2.75],"6-18-4":[-10.4,-2.36],"6-18-5":[-18.83,-3.43],"6-18-6":[-22.53,142.08],"6-18-7":[-18.17,429.97],"6-18-8":[-0.16,2151.79],"6-18-9":[348.42,2614.23],"6-18-10":[9.51,2710.75],"6-18-11":[294.75,2698.9],"6-18-12":[-24.66,2746.59],"6-18-13":[-259.61,2747.57],"6-18-14":[-46.28,1843.49],"6-18-15":[-53.35,-22.18],"6-18-16":[-60.66,-26.44],"6-18-17":[-73.74,-29.66],"6-18-18":[-79.72,-35.92],"6-18-19":[-82.56,-39.87],"6-18-20":[-83.14,-40.29],"6-18-21":[-87.25,-40.68],"6-18-22":[-88.44,-41.38],"6-18-23":[-87.74,-40.45],"6-18-24":[-87.08,-40.24],"6-18-25":[-86.36,-38.8],"6-18-26":[-83.25,-35.89],"6-18-27":[-78.02,-32.16],"6-18-28":[-71.88,-27.65],"6-18-29":[-60.18,-22.1],"6-18-30":[-49.79,-17.75],"6-18-31":[-40.43,-14.23],"6-18-32":[-34.17,-11.43],"6-18-33":[-27.72,-10.12],"6-18-34":[-24.22,-9.98],"6-18-35":[-22.71,-9.16],"6-18-36":[-19.05,-9.09],"6-18-37":[-20.03,-8.96],"6-18-38":[-21.83,-9.07],"6-18-39":[-23.26,-10.05],"6-18-40":[-22.96,30.18],"6-18-41":[-25.64,-10.66],"6-18-42":[-26.07,-11.58],"6-18-43":[-24.63,-10.9],"6-18-44":[-23.29,-10.9],"6-18-45":[-24.95,-11.37],"6-18-46":[-26.58,-12.17],"6-18-47":[-27.96,-12.57],"6-18-48":[-28.66,-12.73],"6-18-49":[-31.29,-12.64],"6-18-50":[-33.1,-13.52],"6-18-51":[-38.3,-14.77],"6-18-52":[-46.75,-18.61],"6-18-53":[-62.71,-23.22],"6-18-54":[-73.11,-30.4],"6-18-55":[-79.89,-35.13],"6-18-56":[-85.72,-38.01],"6-18-57":[-91.81,-40.53],"6-18-58":[-89.38,2750.5],"6-18-59":[1350.32,2817.84],"6-18-60":[749.4,1490.05],"6-18-61":[552.13,901.46],"6-18-62":[803.48,3682.63],"6-18-63":[-29.54,2878.07],"6-19-0":[12.49,28.44],"6-19-1":[10.07,28.63],"5-9-0":[10.07,28.63],"6-19-2":[2.33,20.54],"6-19-3":[-8.14,2.42],"5-9-1":[-8.33,20.54],"4-4-0":[-9.47,28.63],"6-19-4":[-13.58,-2.05],"6-19-5":[-21.21,283.5],"5-9-2":[-21.21,283.5],"6-19-6":[-26.63,317.55],"6-19-7":[-24.44,581.34],"5-9-3":[-26.63,581.34],"4-4-1":[-26.63,581.34],"6-19-8":[-7.43,973.14],"6-19-9":[6.63,2480.85],"5-9-4":[-7.43,2614.23],"6-19-10":[-1.43,2228.73],"6-19-11":[399.03,2929.86],"5-9-5":[-1.43,2929.86],"4-4-2":[-19.04,3089.83],"6-19-12":[587.41,2399.44],"6-19-13":[-30.31,3974.94],"5-9-6":[-259.61,3974.94],"6-19-14":[-46.53,2829.29],"6-19-15":[-55.15,2131.34],"5-9-7":[-55.15,2829.29],"4-4-3":[-259.61,3974.94],"6-19-16":[-60.39,1592.47],"6-19-17":[-71.31,1595.59],"5-9-8":[-73.74,1595.59],"6-19-18":[-78.96,251.63],"6-19-19":[-83.12,-38.05],"5-9-9":[-83.12,251.63],"4-4-4":[-83.12,1595.59],"6-19-20":[-84.9,-41.29],"6-19-21":[-89.63,-42.03],"5-9-10":[-89.63,-40.29],"6-19-22":[-92.74,-43.78],"6-19-23":[-93.19,-43.92],"5-9-11":[-93.19,-40.45],"4-4-5":[-93.19,-32.44],"6-19-24":[-93.06,-43.61],"6-19-25":[-92.29,-42.14],"5-9-12":[-93.06,-38.8],"6-19-26":[-89.24,-39.76],"6-19-27":[-85.23,-36.36],"5-9-13":[-89.24,-32.16],"4-4-6":[-93.06,-22.61],"6-19-28":[-78.96,-31.27],"6-19-29":[-67.42,-25.3],"5-9-14":[-78.96,-22.1],"6-19-30":[-57.07,-21.14],"6-19-31":[-48.07,-17.54],"5-9-15":[-57.07,-14.23],"4-4-7":[-78.96,-7.01],"6-19-32":[-41.41,-14.6],"6-19-33":[-33.3,-12.43],"5-9-16":[-41.41,-10.12],"6-19-34":[-28.55,-11.75],"6-19-35":[-23.48,-9.55],"5-9-17":[-28.55,-9.16],"4-4-8":[-41.41,-4.9],"6-19-36":[-19.4,-8.58],"6-19-37":[-18.07,-7.73],"5-9-18":[-20.03,-7.73],"6-19-38":[-19.41,-7.69],"6-19-39":[-21.4,-8.18],"5-9-19":[-23.26,-7.69],"4-4-9":[-23.64,-6.96],"6-19-40":[-21.19,0.38],"6-19-41":[-23.26,-9.49],"5-9-20":[-25.64,30.18],"6-19-42":[-23.81,-10.86],"6-19-43":[-23.19,-10.71],"5-9-21":[-26.07,-10.71],"4-4-10":[-27.2,395.5],"6-19-44":[-23.63,-10.75],"6-19-45":[-24.65,-11.33],"5-9-22":[-24.95,-10.75],"6-19-46":[-24.92,-11.97],"6-19-47":[-25.67,-11.81],"5-9-23":[-27.96,-11.81],"4-4-11":[-30.38,-10.73],"6-19-48":[-25.62,-11.54],"6-19-49":[-26.6,-11.36],"5-9-24":[-31.29,-11.36],"6-19-50":[-29.05,-11.87],"6-19-51":[-37.03,-13.23],"5-9-25":[-38.3,-11.87],"4-4-12":[-40.62,-11.36],"6-19-52":[-44.46,-17.75],"6-19-53":[-60.61,-22.7],"5-9-26":[-62.71,-17.75],"6-19-54":[-69.03,-29.59],"6-19-55":[-75.62,-33.5],"5-9-27":[-79.89,-29.59],"4-4-13":[-88.41,-17.75],"6-19-56":[-80.8,-36.68],"6-19-57":[-87.74,-39.43],"5-9-28":[-91.81,-36.68],"6-19-58":[-80.06,2986.57],"6-19-59":[1490.04,3530.83],"5-9-29":[-89.38,3530.83],"4-4-14":[-102.31,3530.83],"6-19-60":[865.9,1514.1],"6-19-61":[606.22,956.54],"5-9-30":[552.13,1514.1],"6-19-62":[901.45,3114.64],"6-19-63":[-29.54,2878.57],"5-9-31":[-29.54,3682.63],"4-4-15":[-29.54,3682.63],"6-20-0":[12.6,28.55],"6-20-1":[10.43,29.48],"6-20-2":[2.27,20.82],"6-20-3":[-7.48,2.38],"6-20-4":[-13.58,105.36],"6-20-5":[-22.77,360.51],"6-20-6":[-29.85,693.54],"6-20-7":[-27.48,842.66],"6-20-8":[101.52,662.44],"6-20-9":[38.73,1501.83],"6-20-10":[-7.86,1335.36],"6-20-11":[265.12,2410.7],"6-20-12":[394.15,2580.47],"6-20-13":[176.29,3118.01],"6-20-14":[-26.42,3265.41],"6-20-15":[-24.65,4373.52],"6-20-16":[-14.17,3180.62],"6-20-17":[-27.55,4292.74],"6-20-18":[-76.12,2093.71],"6-20-19":[-82.77,1757.21],"6-20-20":[-84.77,-39.45],"6-20-21":[-90.02,-41.79],"6-20-22":[-93.63,-44.7],"6-20-23":[-95.18,-46.27],"6-20-24":[-95.41,-46.25],"6-20-25":[-94.65,-44.61],"6-20-26":[-91.54,-43],"6-20-27":[-87.87,-39.48],"6-20-28":[-81.88,-34.42],"6-20-29":[-70.45,-28.53],"6-20-30":[-61.33,-24.48],"6-20-31":[-52.2,-20.85],"6-20-32":[-45.21,-17.01],"6-20-33":[-35.82,-14.29],"6-20-34":[-30,-12.23],"6-20-35":[-24.98,-9.38],"6-20-36":[-19.21,-7.52],"6-20-37":[-16.88,-6.21],"6-20-38":[-16.13,-6.04],"6-20-39":[-17.89,-6.16],"6-20-40":[-18.62,-6.82],"6-20-41":[-21.61,-7.83],"6-20-42":[-22.22,-9.86],"6-20-43":[-23.83,-10.66],"6-20-44":[-24.73,-11.26],"6-20-45":[-25.79,-11.42],"6-20-46":[-25.8,-11.97],"6-20-47":[-24.13,-11.21],"6-20-48":[-23.48,-10.65],"6-20-49":[-23.65,-10.31],"6-20-50":[-26.04,-10.7],"6-20-51":[-35.46,-11.92],"6-20-52":[-44.23,-15.93],"6-20-53":[-59.19,-21.91],"6-20-54":[-66.26,-28.4],"6-20-55":[-73.37,-32.29],"6-20-56":[-79.03,-35.55],"6-20-57":[-84.12,-37.56],"6-20-58":[-79.02,1956.61],"6-20-59":[1514.09,2297.87],"6-20-60":[953.69,1535.12],"6-20-61":[812.01,1063],"6-20-62":[956.53,2865.19],"6-20-63":[-29.59,2878.57],"6-21-0":[12.69,28.95],"6-21-1":[10.43,30.37],"5-10-0":[10.43,30.37],"6-21-2":[2.27,21.72],"6-21-3":[-4.05,2.72],"5-10-1":[-7.48,21.72],"6-21-4":[-14.88,306.82],"6-21-5":[-25.82,454.87],"5-10-2":[-25.82,454.87],"6-21-6":[-33.35,413.74],"6-21-7":[-35.21,781.37],"5-10-3":[-35.21,842.66],"6-21-8":[126.37,696.58],"6-21-9":[137.72,880.39],"5-10-4":[38.73,1501.83],"6-21-10":[-10.46,833.93],"6-21-11":[299.05,1099.39],"5-10-5":[-10.46,2410.7],"6-21-12":[314.78,3253.8],"6-21-13":[300.79,3939.1],"5-10-6":[176.29,3939.1],"6-21-14":[196.37,2946.16],"6-21-15":[15.24,2851.96],"5-10-7":[-26.42,4373.52],"6-21-16":[351.22,2953.97],"6-21-17":[661.98,3100.13],"5-10-8":[-27.55,4292.74],"6-21-18":[-17.49,4387.58],"6-21-19":[-41.7,4242],"5-10-9":[-82.77,4387.58],"6-21-20":[-83.6,610.58],"6-21-21":[-89.13,1248.21],"5-10-10":[-90.02,1248.21],"6-21-22":[-93.13,-43.26],"6-21-23":[-95.04,-45.42],"5-10-11":[-95.18,-43.26],"6-21-24":[-95.32,-46.3],"6-21-25":[-94.74,-45.23],"5-10-12":[-95.41,-44.61],"6-21-26":[-91.98,-43.77],"6-21-27":[-87.81,-40.96],"5-10-13":[-91.98,-39.48],"6-21-28":[-82.67,-36.11],"6-21-29":[-71.2,-30.73],"5-10-14":[-82.67,-28.53],"6-21-30":[-63.31,-26.83],"6-21-31":[-54.81,-22.8],"5-10-15":[-63.31,-20.85],"6-21-32":[-47.82,-18.67],"6-21-33":[-38.41,-15.13],"5-10-16":[-47.82,-14.29],"6-21-34":[-32.21,-12.89],"6-21-35":[-25.63,-9.33],"5-10-17":[-32.21,-9.33],"6-21-36":[-19.3,-6.07],"6-21-37":[-14.54,-4.67],"5-10-18":[-19.3,-4.67],"6-21-38":[-12.06,-4.21],"6-21-39":[-13.18,-4.21],"5-10-19":[-17.89,-4.21],"6-21-40":[-15.05,-5.08],"6-21-41":[-19.58,-6.52],"5-10-20":[-21.61,-5.08],"6-21-42":[-21.17,-9.26],"6-21-43":[-22.89,-10.44],"5-10-21":[-23.83,-9.26],"6-21-44":[-24.5,-11.31],"6-21-45":[-26.05,-12.01],"5-10-22":[-26.05,-11.26],"6-21-46":[-26.03,-11.96],"6-21-47":[-24,-10.76],"5-10-23":[-26.03,-10.76],"6-21-48":[-22.24,-10.03],"6-21-49":[-21.6,-9.78],"5-10-24":[-23.65,-9.78],"6-21-50":[-23.2,-10.14],"6-21-51":[-31.43,-11.33],"5-10-25":[-35.46,-10.14],"6-21-52":[-42.02,-14.72],"6-21-53":[-56.28,-21.16],"5-10-26":[-59.19,-14.72],"6-21-54":[-63.59,-26.87],"6-21-55":[-71.43,-31.11],"5-10-27":[-73.37,-26.87],"6-21-56":[-74.31,-34.39],"6-21-57":[-79.17,-34.74],"5-10-28":[-84.12,-34.39],"6-21-58":[-75.47,1699.95],"6-21-59":[1495.5,2538.05],"5-10-29":[-79.02,2538.05],"6-21-60":[1062.99,1626.41],"6-21-61":[869.71,1241.73],"5-10-30":[812.01,1626.41],"6-21-62":[1025.91,2638.67],"6-21-63":[-29.63,2874.63],"5-10-31":[-29.63,2878.57],"6-22-0":[12.8,29.12],"6-22-1":[11.43,30.77],"6-22-2":[2.33,22.89],"6-22-3":[-2.3,5.53],"6-22-4":[-15.36,459.75],"6-22-5":[-28.86,707.55],"6-22-6":[-33.69,562.23],"6-22-7":[-36.83,561.11],"6-22-8":[106.74,731.19],"6-22-9":[124.49,633.28],"6-22-10":[-20.19,980.63],"6-22-11":[221.72,953.84],"6-22-12":[291.67,1945.45],"6-22-13":[407.7,3751.07],"6-22-14":[373.13,3467.23],"6-22-15":[143.66,2981.68],"6-22-16":[498.91,2953.81],"6-22-17":[1005.33,3455.03],"6-22-18":[-109.13,3616.13],"6-22-19":[-115.5,3677.07],"6-22-20":[-106.82,3055.54],"6-22-21":[-87.07,2579.5],"6-22-22":[-90.86,227.36],"6-22-23":[-93.31,-36.74],"6-22-24":[-93.47,-43.31],"6-22-25":[-92.56,-42.61],"6-22-26":[-90.46,-41.08],"6-22-27":[-87.11,-38.63],"6-22-28":[-81.94,-34.92],"6-22-29":[-71.11,-31.11],"6-22-30":[-63.37,-27.03],"6-22-31":[-54.82,-23.61],"6-22-32":[-48,-19.66],"6-22-33":[-38.67,-15.78],"6-22-34":[-32.33,-12.28],"6-22-35":[-25.13,-8],"6-22-36":[-18.53,-4.62],"6-22-37":[-11.89,-3.04],"6-22-38":[-9.24,-2.78],"6-22-39":[-10.03,-2.97],"6-22-40":[-12.55,-3.88],"6-22-41":[-18.46,-5.52],"6-22-42":[-20.42,-8.14],"6-22-43":[-22.66,-9.88],"6-22-44":[-24.44,-11.12],"6-22-45":[-25.51,-11.47],"6-22-46":[-25.48,-11.33],"6-22-47":[-23.5,-10.26],"6-22-48":[-21.38,-9.66],"6-22-49":[-20.27,-9.52],"6-22-50":[-22.59,-10.1],"6-22-51":[-29.7,-11.32],"6-22-52":[-41.54,-14.53],"6-22-53":[-53.67,-21.14],"6-22-54":[-61.27,-25.86],"6-22-55":[-68.78,-29.95],"6-22-56":[-72.33,-32.84],"6-22-57":[-76.5,-32.9],"6-22-58":[-76.53,3383.56],"6-22-59":[1286.48,3626.49],"6-22-60":[1241.72,1694.94],"6-22-61":[987.52,1432.98],"6-22-62":[1168.67,2576.08],"6-22-63":[-29.54,2863.29],"6-23-0":[12.92,29.14],"6-23-1":[11.53,30.89],"5-11-0":[11.43,30.89],"6-23-2":[2.57,24.53],"6-23-3":[-2.86,9.47],"5-11-1":[-2.86,24.53],"4-5-0":[-7.48,30.89],"6-23-4":[-17.92,409.2],"6-23-5":[-35.37,754.53],"5-11-2":[-35.37,754.53],"6-23-6":[-35.77,628.59],"6-23-7":[-51.79,437.77],"5-11-3":[-51.79,628.59],"4-5-1":[-51.79,842.66],"3-2-0":[-51.79,842.66],"6-23-8":[212,620.34],"6-23-9":[126.79,595],"5-11-4":[106.74,731.19],"6-23-10":[-25.96,952.89],"6-23-11":[181.68,969.04],"5-11-5":[-25.96,980.63],"4-5-2":[-25.96,2410.7],"6-23-12":[362.56,1217.71],"6-23-13":[599.34,3152.73],"5-11-6":[291.67,3751.07],"6-23-14":[584.02,3396.83],"6-23-15":[496.5,3385.15],"5-11-7":[143.66,3467.23],"4-5-3":[-26.42,4373.52],"3-2-1":[-259.61,4373.52],"6-23-16":[739.26,3846.98],"6-23-17":[1261.06,3659.45],"5-11-8":[498.91,3846.98],"6-23-18":[342.66,3960.27],"6-23-19":[53.25,2781.72],"5-11-9":[-115.5,3960.27],"4-5-4":[-115.5,4387.58],"6-23-20":[-43.42,2074.25],"6-23-21":[-53.91,2324.4],"5-11-10":[-106.82,3055.54],"6-23-22":[-86.07,1902.28],"6-23-23":[-86.2,-37.16],"5-11-11":[-93.31,1902.28],"4-5-5":[-106.82,3055.54],"3-2-2":[-115.5,4387.58],"6-23-24":[-86.54,-38.53],"6-23-25":[-85.65,238.06],"5-11-12":[-93.47,238.06],"6-23-26":[-84.32,-36.65],"6-23-27":[-80.64,-34.81],"5-11-13":[-90.46,-34.81],"4-5-6":[-95.41,238.06],"6-23-28":[-76.59,-32.08],"6-23-29":[-68.37,-29.04],"5-11-14":[-81.94,-29.04],"6-23-30":[-61.8,-25.29],"6-23-31":[-52.78,-21.98],"5-11-15":[-63.37,-21.98],"4-5-7":[-82.67,-20.85],"3-2-3":[-95.41,238.06],"6-23-32":[-46.8,-18.42],"6-23-33":[-38.04,-15],"5-11-16":[-48,-15],"6-23-34":[-31.41,-10.65],"6-23-35":[-23.03,-6.84],"5-11-17":[-32.33,-6.84],"4-5-8":[-48,-6.84],"6-23-36":[-15.57,-3.94],"6-23-37":[-8.42,-2.35],"5-11-18":[-18.53,-2.35],"6-23-38":[-5.83,-1.99],"6-23-39":[-7.6,-2.19],"5-11-19":[-10.03,-1.99],"4-5-9":[-19.3,-1.99],"3-2-4":[-48,-1.99],"6-23-40":[-10.38,-3.43],"6-23-41":[-16.03,-5],"5-11-20":[-18.46,-3.43],"6-23-42":[-19.19,-6.88],"6-23-43":[-22.06,-9.07],"5-11-21":[-22.66,-6.88],"4-5-10":[-23.83,-3.43],"6-23-44":[-22.86,-10.1],"6-23-45":[-23.63,-10.53],"5-11-22":[-25.51,-10.1],"6-23-46":[-23.44,-10.4],"6-23-47":[-22.17,-9.8],"5-11-23":[-25.48,-9.8],"4-5-11":[-26.05,-9.8],"3-2-5":[-30.38,395.5],"6-23-48":[-20.39,-9.35],"6-23-49":[-21.17,-9.35],"5-11-24":[-21.38,-9.35],"6-23-50":[-23.21,-10.18],"6-23-51":[-30.13,-11.53],"5-11-25":[-30.13,-10.1],"4-5-12":[-35.46,-9.35],"6-23-52":[-43.45,-14.72],"6-23-53":[-51.53,-21.48],"5-11-26":[-53.67,-14.53],"6-23-54":[-58.95,-25.37],"6-23-55":[-65.3,-28.82],"5-11-27":[-68.78,-25.37],"4-5-13":[-73.37,-14.53],"3-2-6":[-88.41,-9.35],"6-23-56":[-69.37,-31.18],"6-23-57":[-72.56,-32.31],"5-11-28":[-76.5,-31.18],"6-23-58":[-73.42,2010.01],"6-23-59":[1105.43,2194.6],"5-11-29":[-76.53,3626.49],"4-5-14":[-84.12,3626.49],"6-23-60":[1418.33,1763.02],"6-23-61":[1252.11,1638.58],"5-11-30":[987.52,1763.02],"6-23-62":[1432.97,2755.16],"6-23-63":[-29.54,2834.96],"5-11-31":[-29.54,2863.29],"4-5-15":[-29.63,2878.57],"3-2-7":[-102.31,3682.63],"6-24-0":[13.08,29.1],"6-24-1":[12.77,30.89],"6-24-2":[3.36,25.8],"6-24-3":[-3.5,11.12],"6-24-4":[-19.26,404.18],"6-24-5":[-38.9,404.18],"6-24-6":[-40.02,637.43],"6-24-7":[-57.55,369.52],"6-24-8":[70.59,618.66],"6-24-9":[123.35,643.83],"6-24-10":[-27.38,442.7],"6-24-11":[174.59,841.05],"6-24-12":[373.57,849.8],"6-24-13":[495.56,1071.09],"6-24-14":[572.57,2114.96],"6-24-15":[720.4,3889.28],"6-24-16":[1325.33,4191.26],"6-24-17":[1258.65,4109.88],"6-24-18":[857.52,3690.6],"6-24-19":[364.31,3824.21],"6-24-20":[-26.57,3235.29],"6-24-21":[-39.57,2589.58],"6-24-22":[-71.54,1702.94],"6-24-23":[-79.57,2045.21],"6-24-24":[-78.3,-33.29],"6-24-25":[-77.08,268.06],"6-24-26":[-75.28,-31.52],"6-24-27":[-72.83,-29.62],"6-24-28":[-69.63,-28.02],"6-24-29":[-63.34,-25.65],"6-24-30":[-58.09,-23.11],"6-24-31":[-49.64,-20.2],"6-24-32":[-43.76,-17.27],"6-24-33":[-35.9,-13.42],"6-24-34":[-29.87,-9.91],"6-24-35":[-20.23,-6.43],"6-24-36":[-13.61,-3.86],"6-24-37":[-7.43,-2.32],"6-24-38":[-4.95,-1.94],"6-24-39":[-7.06,-2.13],"6-24-40":[-9.67,-3.32],"6-24-41":[-13.81,-4.7],"6-24-42":[-17.75,-6.09],"6-24-43":[-20.18,-8.32],"6-24-44":[-21.4,-9.34],"6-24-45":[-21.96,-9.83],"6-24-46":[-21.96,-10],"6-24-47":[-20.69,-9.66],"6-24-48":[-19.53,-9.43],"6-24-49":[-21.86,-9.46],"6-24-50":[-23.63,-10.52],"6-24-51":[-30.13,-11.8],"6-24-52":[-42.54,-14.64],"6-24-53":[-50.73,-20.34],"6-24-54":[-56.68,-24.59],"6-24-55":[-62.37,-27.15],"6-24-56":[-67.75,-29.51],"6-24-57":[-69.33,-30.92],"6-24-58":[-67.75,2438.84],"6-24-59":[821.95,3441.15],"6-24-60":[1593.3,1871.81],"6-24-61":[1391.7,1816.7],"6-24-62":[1638.57,2575.14],"6-24-63":[-29.54,2813.19],"6-25-0":[13.28,29.06],"6-25-1":[12.99,30.67],"5-12-0":[12.77,30.89],"6-25-2":[4.33,27.3],"6-25-3":[-3.6,11.88],"5-12-1":[-3.6,27.3],"6-25-4":[-18.48,293.97],"6-25-5":[-39.75,334.46],"5-12-2":[-39.75,404.18],"6-25-6":[-44.82,387.52],"6-25-7":[-63.28,308.5],"5-12-3":[-63.28,637.43],"6-25-8":[-63.06,598.61],"6-25-9":[119.88,600.19],"5-12-4":[-63.06,643.83],"6-25-10":[-28.15,610.76],"6-25-11":[175.34,613.75],"5-12-5":[-28.15,841.05],"6-25-12":[357,741.32],"6-25-13":[154.24,852.58],"5-12-6":[154.24,1071.09],"6-25-14":[529.75,2093.28],"6-25-15":[667.15,3842.68],"5-12-7":[529.75,3889.28],"6-25-16":[1046.96,4204.45],"6-25-17":[1396.76,3751.43],"5-12-8":[1046.96,4204.45],"6-25-18":[1174.25,4348.39],"6-25-19":[1345.74,3458.34],"5-12-9":[364.31,4348.39],"6-25-20":[852.06,3295.69],"6-25-21":[84.61,3091.23],"5-12-10":[-39.57,3295.69],"6-25-22":[-38.22,3268.31],"6-25-23":[-66.41,2081.23],"5-12-11":[-79.57,3268.31],"6-25-24":[-67.95,-28.52],"6-25-25":[-66.59,-26.44],"5-12-12":[-78.3,268.06],"6-25-26":[-65.05,-25.22],"6-25-27":[-63.06,-24.16],"5-12-13":[-75.28,-24.16],"6-25-28":[-59.26,-15.52],"6-25-29":[-54.35,-22.31],"5-12-14":[-69.63,-15.52],"6-25-30":[-50.44,-20.5],"6-25-31":[-45,-18.74],"5-12-15":[-58.09,-18.74],"6-25-32":[-39.97,-16.22],"6-25-33":[-33.52,-12.95],"5-12-16":[-43.76,-12.95],"6-25-34":[-26.73,-9.78],"6-25-35":[-19.19,-6.51],"5-12-17":[-29.87,-6.43],"6-25-36":[-14.52,-4.01],"6-25-37":[-8.87,-2.5],"5-12-18":[-14.52,-2.32],"6-25-38":[-6.34,-2.18],"6-25-39":[-6.84,-2.3],"5-12-19":[-7.06,-1.94],"6-25-40":[-9.41,-3.32],"6-25-41":[-32.1,501.96],"5-12-20":[-32.1,501.96],"6-25-42":[-16.08,-5.36],"6-25-43":[-18.48,-7.5],"5-12-21":[-20.18,-5.36],"6-25-44":[-19.58,-8.5],"6-25-45":[-20.51,-9.34],"5-12-22":[-21.96,-8.5],"6-25-46":[-20.66,-9.34],"6-25-47":[-19.83,-8.98],"5-12-23":[-21.96,-8.98],"6-25-48":[-19.6,-9.09],"6-25-49":[-22.09,-9.67],"5-12-24":[-22.09,-9.09],"6-25-50":[-24.31,-10.8],"6-25-51":[-29.53,-11.99],"5-12-25":[-30.13,-10.52],"6-25-52":[-38.65,-14.61],"6-25-53":[-48.88,-19.4],"5-12-26":[-50.73,-14.61],"6-25-54":[-53.27,-23.18],"6-25-55":[-58.77,-25.88],"5-12-27":[-62.37,-23.18],"6-25-56":[-65.35,-28.74],"6-25-57":[-65.63,-29.51],"5-12-28":[-69.33,-28.74],"6-25-58":[-63.65,821.96],"6-25-59":[726.87,1676.69],"5-12-29":[-67.75,3441.15],"6-25-60":[1630.88,1996.28],"6-25-61":[1569.89,1996.28],"5-12-30":[1391.7,1996.28],"6-25-62":[1816.69,2606.34],"6-25-63":[-29.54,2795.26],"5-12-31":[-29.54,2813.19],"6-26-0":[13.54,29.14],"6-26-1":[13.94,30.48],"6-26-2":[5.28,27.87],"6-26-3":[-3.32,281.71],"6-26-4":[-18.48,308.77],"6-26-5":[-40.42,381.74],"6-26-6":[-46.86,317.75],"6-26-7":[-64.69,215.89],"6-26-8":[-2.27,571.32],"6-26-9":[116.78,565.77],"6-26-10":[-32.41,599.94],"6-26-11":[208.28,611.84],"6-26-12":[299.93,731.39],"6-26-13":[318.89,749.4],"6-26-14":[470.62,993.24],"6-26-15":[555.47,1446.2],"6-26-16":[932.52,3114.6],"6-26-17":[1209.86,4338.56],"6-26-18":[1296.53,4383.25],"6-26-19":[1070.65,3998.98],"6-26-20":[855.68,3617.02],"6-26-21":[658.3,2970.04],"6-26-22":[417.64,3258.01],"6-26-23":[-28.6,3307.88],"6-26-24":[-62.73,2734.41],"6-26-25":[-59.49,2861.69],"6-26-26":[-52.9,-18.54],"6-26-27":[-50.46,-18.19],"6-26-28":[-48.34,-18.13],"6-26-29":[-46.35,-18.06],"6-26-30":[-44.41,-17.73],"6-26-31":[-40.44,-17.02],"6-26-32":[-37.32,-15.49],"6-26-33":[-31.86,-12.9],"6-26-34":[-26.47,-10],"6-26-35":[-21.25,-7.31],"6-26-36":[-17.78,-4.66],"6-26-37":[-11.76,-3.18],"6-26-38":[-7.87,-2.8],"6-26-39":[-6.79,-2.9],"6-26-40":[-7.79,-2.88],"6-26-41":[-10.71,8.49],"6-26-42":[-14.63,-4.56],"6-26-43":[-16.88,-6.59],"6-26-44":[-18.57,-7.39],"6-26-45":[-19.41,-7.99],"6-26-46":[-19.51,-8.34],"6-26-47":[-18.58,-8.35],"6-26-48":[-19.11,-8.37],"6-26-49":[-22.08,-9.26],"6-26-50":[-24.14,-10.47],"6-26-51":[-29.38,-11.82],"6-26-52":[-38.33,-14.03],"6-26-53":[-46.19,-17.49],"6-26-54":[-51.2,-21.67],"6-26-55":[-57.5,-24.38],"6-26-56":[-63.64,-27.72],"6-26-57":[-62.82,189.45],"6-26-58":[-60.91,881.64],"6-26-59":[740.64,1748.55],"6-26-60":[1676.68,2076.65],"6-26-61":[1756.34,2181.07],"6-26-62":[1948.76,2606.49],"6-26-63":[-29.54,2777.84],"6-27-0":[13.6,29.49],"6-27-1":[13.94,31.09],"5-13-0":[13.54,31.09],"6-27-2":[6.45,27.9],"6-27-3":[-0.42,320.5],"5-13-1":[-3.32,320.5],"4-6-0":[-3.6,320.5],"6-27-4":[-16.49,372.69],"6-27-5":[-40.21,294.13],"5-13-2":[-40.42,381.74],"6-27-6":[-53.85,132.2],"6-27-7":[-71.25,117.7],"5-13-3":[-71.25,317.75],"4-6-1":[-71.25,637.43],"6-27-8":[-10.85,325.53],"6-27-9":[25.92,428.65],"5-13-4":[-10.85,571.32],"6-27-10":[-36.63,567.14],"6-27-11":[275.4,510.84],"5-13-5":[-36.63,611.84],"4-6-2":[-63.06,841.05],"6-27-12":[177.93,779.83],"6-27-13":[230.46,797.9],"5-13-6":[177.93,797.9],"6-27-14":[353.23,843.62],"6-27-15":[486.44,1208.11],"5-13-7":[353.23,1446.2],"4-6-3":[154.24,3889.28],"6-27-16":[469.53,2194.75],"6-27-17":[827.22,1798.51],"5-13-8":[469.53,4338.56],"6-27-18":[821.28,2635.83],"6-27-19":[656.62,2159.53],"5-13-9":[656.62,4383.25],"4-6-4":[364.31,4383.25],"6-27-20":[633.52,1925.95],"6-27-21":[300.28,2697.84],"5-13-10":[300.28,3617.02],"6-27-22":[335.31,2999.92],"6-27-23":[921.89,3424.3],"5-13-11":[-28.6,3424.3],"4-6-5":[-79.57,3617.02],"6-27-24":[401.21,3479.94],"6-27-25":[-46.8,4234.29],"5-13-12":[-62.73,4234.29],"6-27-26":[-39.05,-13],"6-27-27":[-35.28,-12.54],"5-13-13":[-52.9,-12.54],"4-6-6":[-78.3,4234.29],"6-27-28":[-35.2,-12.85],"6-27-29":[-35.34,-13.41],"5-13-14":[-48.34,-12.85],"6-27-30":[-35.17,-14.09],"6-27-31":[-34.89,-14.93],"5-13-15":[-44.41,-14.09],"4-6-7":[-69.63,-12.85],"6-27-32":[-33.67,-14.66],"6-27-33":[-30.24,-13.29],"5-13-16":[-37.32,-12.9],"6-27-34":[-28.13,-11.02],"6-27-35":[-24.66,-9.21],"5-13-17":[-28.13,-7.31],"4-6-8":[-43.76,-6.43],"6-27-36":[-20.45,-6.32],"6-27-37":[-14.71,-4.11],"5-13-18":[-20.45,-3.18],"6-27-38":[-10.7,-3.46],"6-27-39":[-7.82,-2.95],"5-13-19":[-10.7,-2.8],"4-6-9":[-20.45,-1.94],"6-27-40":[-6.36,-2.12],"6-27-41":[-8.91,-2.07],"5-13-20":[-10.71,8.49],"6-27-42":[-12.62,-3.64],"6-27-43":[-14.88,-5.64],"5-13-21":[-16.88,-3.64],"4-6-10":[-32.1,501.96],"6-27-44":[-15.67,-6.12],"6-27-45":[-17.16,-6.68],"5-13-22":[-19.41,-6.12],"6-27-46":[-17.14,-7.46],"6-27-47":[-16.64,-6.9],"5-13-23":[-19.51,-6.9],"4-6-11":[-21.96,-6.12],"6-27-48":[-18.13,-7.16],"6-27-49":[-20.76,-8.23],"5-13-24":[-22.08,-7.16],"6-27-50":[-23.03,-9.75],"6-27-51":[-27.57,-10.56],"5-13-25":[-29.38,-9.75],"4-6-12":[-30.13,-7.16],"6-27-52":[-33.04,-12.47],"6-27-53":[-43.05,-16],"5-13-26":[-46.19,-12.47],"6-27-54":[-47.85,-20.49],"6-27-55":[-55.33,-23.04],"5-13-27":[-57.5,-20.49],"4-6-13":[-62.37,-12.47],"6-27-56":[-59.57,-26.31],"6-27-57":[-57.3,647.09],"5-13-28":[-63.64,647.09],"6-27-58":[-55.25,899.06],"6-27-59":[799.61,1803.34],"5-13-29":[-60.91,1803.34],"4-6-14":[-69.33,3441.15],"6-27-60":[1748.54,2159.56],"6-27-61":[1868.06,2197.16],"5-13-30":[1676.68,2197.16],"6-27-62":[2095.95,2581.41],"6-27-63":[-29.54,2769.5],"5-13-31":[-29.54,2777.84],"4-6-15":[-29.54,2813.19],"6-28-0":[13.6,29.98],"6-28-1":[13.97,31.76],"6-28-2":[7.61,27.9],"6-28-3":[-0.98,311.23],"6-28-4":[-14.04,373.55],"6-28-5":[-35.5,302.69],"6-28-6":[-52.23,269.04],"6-28-7":[-71.46,37.53],"6-28-8":[-13.78,273.39],"6-28-9":[-36.74,404.25],"6-28-10":[-38.45,438.24],"6-28-11":[60.84,436.49],"6-28-12":[151.71,375.47],"6-28-13":[182.44,807.5],"6-28-14":[219.33,785.89],"6-28-15":[355.34,755.87],"6-28-16":[348.26,1090.39],"6-28-17":[415.18,1115.44],"6-28-18":[336.8,1003.31],"6-28-19":[247.09,1013.68],"6-28-20":[245.51,909.81],"6-28-21":[22.35,784.58],"6-28-22":[2.36,3697.19],"6-28-23":[-6.03,3685.36],"6-28-24":[-7.33,3903.97],"6-28-25":[-32.6,5379.65],"6-28-26":[-33.85,1685.03],"6-28-27":[-25.73,-8.02],"6-28-28":[-27.14,-9.26],"6-28-29":[-28.13,-9.53],"6-28-30":[-29.73,-10.39],"6-28-31":[-30.49,-11.78],"6-28-32":[-30.3,-13.08],"6-28-33":[-29.11,-13.91],"6-28-34":[-28.13,-12.68],"6-28-35":[-25.46,-10.25],"6-28-36":[-21.32,-7.52],"6-28-37":[-14.78,-5.33],"6-28-38":[-12.03,-4.05],"6-28-39":[-8.07,-2.41],"6-28-40":[-6.04,-1.06],"6-28-41":[-7.12,-1.06],"6-28-42":[-10.83,-2.79],"6-28-43":[-12.78,-4.7],"6-28-44":[-13.74,-5.3],"6-28-45":[-14.99,-5.28],"6-28-46":[-15.4,-5.56],"6-28-47":[-15.79,-5.29],"6-28-48":[-15.93,-5.65],"6-28-49":[-19.25,-6.88],"6-28-50":[-20.66,-7.71],"6-28-51":[-24.63,-9.26],"6-28-52":[-31.19,-11.53],"6-28-53":[-40.85,-14.84],"6-28-54":[-45.75,-18.97],"6-28-55":[-52.39,-21.7],"6-28-56":[-55.08,-24.38],"6-28-57":[-50.79,721.39],"6-28-58":[-51.45,799.62],"6-28-59":[687.23,1812.13],"6-28-60":[1803.33,2299.62],"6-28-61":[1923.59,2175.98],"6-28-62":[1878.69,2429.87],"6-28-63":[-29.54,2761.57],"6-29-0":[13.6,30.78],"6-29-1":[13.97,32.5],"5-14-0":[13.6,32.5],"6-29-2":[8.58,28.94],"6-29-3":[-0.22,604.78],"5-14-1":[-0.98,604.78],"6-29-4":[-10.79,424.86],"6-29-5":[-29.34,367.02],"5-14-2":[-35.5,424.86],"6-29-6":[-48.96,423.04],"6-29-7":[-71.03,188.06],"5-14-3":[-71.46,423.04],"6-29-8":[-71.03,258.97],"6-29-9":[-40.7,265.48],"5-14-4":[-71.03,404.25],"6-29-10":[-45.67,362.54],"6-29-11":[35.43,333.9],"5-14-5":[-45.67,438.24],"6-29-12":[69.29,353.36],"6-29-13":[176.64,297.08],"5-14-6":[69.29,807.5],"6-29-14":[185.4,507.51],"6-29-15":[216.94,624.77],"5-14-7":[185.4,785.89],"6-29-16":[248.19,602.11],"6-29-17":[227.87,668.28],"5-14-8":[227.87,1115.44],"6-29-18":[151.81,558.27],"6-29-19":[87.66,500.16],"5-14-9":[87.66,1013.68],"6-29-20":[11.41,489.46],"6-29-21":[-74.48,534.68],"5-14-10":[-74.48,909.81],"6-29-22":[-59.51,197.1],"6-29-23":[-60.32,1437.08],"5-14-11":[-60.32,3697.19],"6-29-24":[-52.89,3376.08],"6-29-25":[-16.39,5601.19],"5-14-12":[-52.89,5601.19],"6-29-26":[-23.21,3710.87],"6-29-27":[-17.72,-5.43],"5-14-13":[-33.85,3710.87],"6-29-28":[-18.29,-5.37],"6-29-29":[-20.02,-5.8],"5-14-14":[-28.13,-5.37],"6-29-30":[-22.85,-7.34],"6-29-31":[-25.68,-8.54],"5-14-15":[-30.49,-7.34],"6-29-32":[-27.33,-11.17],"6-29-33":[-28.21,-12.92],"5-14-16":[-30.3,-11.17],"6-29-34":[-27.93,-12.74],"6-29-35":[-25.57,-10.37],"5-14-17":[-28.13,-10.25],"6-29-36":[-21.38,-7.55],"6-29-37":[-14.75,-5.87],"5-14-18":[-21.38,-5.33],"6-29-38":[-12.1,-3.7],"6-29-39":[-7.93,-1.6],"5-14-19":[-12.1,-1.6],"6-29-40":[-4.73,-0.26],"6-29-41":[-5.16,-0.14],"5-14-20":[-7.12,-0.14],"6-29-42":[-8.49,-1.41],"6-29-43":[-11.27,-3.5],"5-14-21":[-12.78,-1.41],"6-29-44":[-11.15,-3.82],"6-29-45":[-11.69,-3.55],"5-14-22":[-14.99,-3.55],"6-29-46":[-12.81,-3.56],"6-29-47":[-11.24,-3.95],"5-14-23":[-15.79,-3.56],"6-29-48":[-12.87,-3.81],"6-29-49":[-15.22,-6.07],"5-14-24":[-19.25,-3.81],"6-29-50":[-18.28,-7.31],"6-29-51":[-22.81,-8.44],"5-14-25":[-24.63,-7.31],"6-29-52":[-28.28,-10.9],"6-29-53":[-37.41,-12.86],"5-14-26":[-40.85,-10.9],"6-29-54":[-42.1,-16.84],"6-29-55":[-48.36,-19.69],"5-14-27":[-52.39,-16.84],"6-29-56":[-54.2,-22.1],"6-29-57":[-47.44,695.16],"5-14-28":[-55.08,721.39],"6-29-58":[-44.62,1067.53],"6-29-59":[697.67,1825.18],"5-14-29":[-51.45,1825.18],"6-29-60":[1812.12,2484.31],"6-29-61":[1887.54,2200.25],"5-14-30":[1803.33,2484.31],"6-29-62":[1867.75,2364.99],"6-29-63":[-29.54,2744.46],"5-14-31":[-29.54,2761.57],"6-30-0":[13.6,31.47],"6-30-1":[14.83,32.77],"6-30-2":[9.25,30.01],"6-30-3":[1.4,1609.72],"6-30-4":[-8.83,717.95],"6-30-5":[-23.57,477.26],"6-30-6":[-38.7,559.29],"6-30-7":[-70.31,433.78],"6-30-8":[-70.31,458.53],"6-30-9":[-96.36,174.74],"6-30-10":[-99.28,106.11],"6-30-11":[-98.53,228.76],"6-30-12":[-14.62,294.27],"6-30-13":[195.65,456.57],"6-30-14":[57.99,564.92],"6-30-15":[181.53,584.49],"6-30-16":[173.46,471.28],"6-30-17":[26.59,446.09],"6-30-18":[123.08,490.81],"6-30-19":[2.26,806.41],"6-30-20":[-9.4,204.36],"6-30-21":[-55.44,125.4],"6-30-22":[-65.74,-25.61],"6-30-23":[-65.69,-25.42],"6-30-24":[-54.87,-14.04],"6-30-25":[-36.51,2490.71],"6-30-26":[-21.02,2540.82],"6-30-27":[-19.24,-2.77],"6-30-28":[-11.27,-1.84],"6-30-29":[-14.57,-2.28],"6-30-30":[-17.25,-4.28],"6-30-31":[-22.13,-5.31],"6-30-32":[-25.32,-8.63],"6-30-33":[-27.51,-11.24],"6-30-34":[-27.51,-12.14],"6-30-35":[-24.98,-9.83],"6-30-36":[-20.94,-7.4],"6-30-37":[-14.81,-5.53],"6-30-38":[-11.87,-2.8],"6-30-39":[-6.86,-0.38],"6-30-40":[-3,1.26],"6-30-41":[-2.62,1.53],"6-30-42":[-6.47,0.16],"6-30-43":[-9.48,-1.41],"6-30-44":[-9.48,-2.83],"6-30-45":[-7.66,-2.16],"6-30-46":[-9.07,-1.93],"6-30-47":[-9.84,-2.8],"6-30-48":[-11.72,-2.88],"6-30-49":[-14.44,-4.07],"6-30-50":[-16.72,-6.13],"6-30-51":[-22.37,-7.94],"6-30-52":[-24.41,-9.85],"6-30-53":[-33.43,-11.71],"6-30-54":[-38.58,-14.81],"6-30-55":[-43.96,-16.85],"6-30-56":[-52.81,-19.97],"6-30-57":[-46.56,310.04],"6-30-58":[-43.55,1562.01],"6-30-59":[790.59,1824.22],"6-30-60":[1816.77,2275.03],"6-30-61":[1789.45,2180.52],"6-30-62":[1867.26,2328.81],"6-30-63":[-29.54,2744.46],"6-31-0":[13.6,32.23],"6-31-1":[15.06,32.84],"5-15-0":[13.6,32.84],"6-31-2":[10.78,881.84],"6-31-3":[4.92,2250.64],"5-15-1":[1.4,2250.64],"4-7-0":[-0.98,2250.64],"6-31-4":[-5.46,1374.08],"6-31-5":[-22.85,583.45],"5-15-2":[-23.57,1374.08],"6-31-6":[-45.86,413.34],"6-31-7":[-57.79,429.71],"5-15-3":[-70.31,559.29],"4-7-1":[-71.46,1374.08],"3-3-0":[-71.46,2250.64],"6-31-8":[-36.15,577.62],"6-31-9":[-96.7,282.12],"5-15-4":[-96.7,577.62],"6-31-10":[-99.12,-46.98],"6-31-11":[-98.49,190.58],"5-15-5":[-99.28,228.76],"4-7-2":[-99.28,577.62],"6-31-12":[-15.94,324],"6-31-13":[204.84,447.15],"5-15-6":[-15.94,456.57],"6-31-14":[150.72,671.12],"6-31-15":[147.71,604.9],"5-15-7":[57.99,671.12],"4-7-3":[-15.94,807.5],"3-3-1":[-99.28,3889.28],"2-1-0":[-259.61,4373.52],"6-31-16":[142.69,422.75],"6-31-17":[82.02,300.32],"5-15-8":[26.59,471.28],"6-31-18":[37.49,509.53],"6-31-19":[3.75,590.45],"5-15-9":[2.26,806.41],"4-7-4":[2.26,1115.44],"6-31-20":[-28.13,146.09],"6-31-21":[-51.46,78.7],"5-15-10":[-55.44,204.36],"6-31-22":[-60.53,-24.95],"6-31-23":[-60.55,-17],"5-15-11":[-65.74,-17],"4-7-5":[-74.48,3697.19],"3-3-2":[-79.57,4383.25],"6-31-24":[-51.3,129.8],"6-31-25":[-28.09,2495.76],"5-15-12":[-54.87,2495.76],"6-31-26":[-31.81,4217.93],"6-31-27":[-39.22,1667.28],"5-15-13":[-39.22,4217.93],"4-7-6":[-54.87,5601.19],"6-31-28":[-3.69,3.56],"6-31-29":[-7.94,1.79],"5-15-14":[-14.57,3.56],"6-31-30":[-10.64,-0.95],"6-31-31":[-23.38,1700.45],"5-15-15":[-23.38,1700.45],"4-7-7":[-30.49,1700.45],"3-3-3":[-78.3,5601.19],"2-1-1":[-115.5,5601.19],"1-0-0":[-317.19,6207.28],"6-31-32":[-321.59,1684.42],"6-31-33":[-25.17,-8.12],"5-15-16":[-321.59,1684.42],"6-31-34":[-25.23,-10.22],"6-31-35":[-23.47,-8.63],"5-15-17":[-27.51,-8.63],"4-7-8":[-321.59,1684.42],"6-31-36":[-19.5,-5.98],"6-31-37":[-14.17,-4.58],"5-15-18":[-20.94,-4.58],"6-31-38":[-10.89,-1.76],"6-31-39":[-4.99,1.04],"5-15-19":[-11.87,1.04],"4-7-9":[-21.38,1.04],"3-3-4":[-321.59,1684.42],"6-31-40":[-0.46,3.59],"6-31-41":[0.15,3.57],"5-15-20":[-3,3.59],"6-31-42":[-1.87,3.33],"6-31-43":[-5.77,-0.19],"5-15-21":[-9.48,3.33],"4-7-10":[-12.78,3.59],"6-31-44":[-6.17,-2.1],"6-31-45":[-5.45,-1.19],"5-15-22":[-9.48,-1.19],"6-31-46":[-4.53,-0.73],"6-31-47":[-5.48,-0.93],"5-15-23":[-9.84,-0.73],"4-7-11":[-15.79,-0.73],"3-3-5":[-32.1,501.96],"2-1-2":[-321.59,1684.42],"6-31-48":[-7.3,-1.03],"6-31-49":[-11.96,-1.38],"5-15-24":[-14.44,-1.03],"6-31-50":[-15.08,-4.16],"6-31-51":[-19.15,-5.73],"5-15-25":[-22.37,-4.16],"4-7-12":[-24.63,-1.03],"6-31-52":[-21.76,-8.28],"6-31-53":[-29.28,-9.98],"5-15-26":[-33.43,-8.28],"6-31-54":[-34.04,-12.93],"6-31-55":[-39.77,-14.37],"5-15-27":[-43.96,-12.93],"4-7-13":[-52.39,-8.28],"3-3-6":[-62.37,-1.03],"6-31-56":[-43.43,1365.62],"6-31-57":[-44.81,282.19],"5-15-28":[-52.81,1365.62],"6-31-58":[-39.76,1267.01],"6-31-59":[957.9,1887.87],"5-15-29":[-43.55,1887.87],"4-7-14":[-55.08,1887.87],"6-31-60":[1730.62,2175.26],"6-31-61":[1639.46,1987.13],"5-15-30":[1639.46,2275.03],"6-31-62":[1752.65,2714.87],"6-31-63":[-29.54,2744.46],"5-15-31":[-29.54,2744.46],"4-7-15":[-29.54,2761.57],"3-3-7":[-69.33,3441.15],"2-1-3":[-102.31,3682.63],"1-0-1":[-321.59,3970.41],"6-32-0":[13.6,32.71],"6-32-1":[15.63,32.84],"6-32-2":[12.53,1148.73],"6-32-3":[3.54,1723.08],"6-32-4":[-3.48,1337.96],"6-32-5":[-22.64,684.11],"6-32-6":[-45.53,367.14],"6-32-7":[-63.11,395.57],"6-32-8":[-72.93,546.23],"6-32-9":[-93.99,248.1],"6-32-10":[-96.39,-44.47],"6-32-11":[-97.86,87.35],"6-32-12":[-57.46,240.44],"6-32-13":[116.07,415.1],"6-32-14":[116.17,599.34],"6-32-15":[138.68,568.7],"6-32-16":[-2.59,551.43],"6-32-17":[75.12,291.63],"6-32-18":[-24.24,294.32],"6-32-19":[4.68,321.49],"6-32-20":[-31.39,211.56],"6-32-21":[-63.34,90.38],"6-32-22":[-63.11,-25.22],"6-32-23":[-57.23,-7.65],"6-32-24":[-31.37,200.24],"6-32-25":[-33.45,1010.31],"6-32-26":[-35.51,3009.32],"6-32-27":[-28.36,2376.93],"6-32-28":[-3.22,10.91],"6-32-29":[-1.77,10.51],"6-32-30":[-4.68,6.74],"6-32-31":[-7.35,73.07],"6-32-32":[-18.67,716.38],"6-32-33":[-20.88,-4.49],"6-32-34":[-21.38,-6.53],"6-32-35":[-20.18,-6.02],"6-32-36":[-17.05,-4.75],"6-32-37":[-11.75,-2.76],"6-32-38":[-9,-0.28],"6-32-39":[-2.87,3.56],"6-32-40":[0.59,5.45],"6-32-41":[1.56,6.31],"6-32-42":[-0.2,5.55],"6-32-43":[-3.93,1.13],"6-32-44":[-5.26,-0.57],"6-32-45":[-4.78,-0.14],"6-32-46":[-2.44,1.43],"6-32-47":[-2.43,2.72],"6-32-48":[-2.64,1.56],"6-32-49":[-7.99,-0.1],"6-32-50":[-11.84,-1.81],"6-32-51":[-16.4,-4.23],"6-32-52":[-18.97,-6.57],"6-32-53":[-25.69,-8.31],"6-32-54":[-28.75,-11.31],"6-32-55":[-35.05,-12.68],"6-32-56":[-41.26,-14.17],"6-32-57":[-36.6,248.01],"6-32-58":[-36.6,1290.61],"6-32-59":[1072.47,2685.38],"6-32-60":[1460.89,2381.84],"6-32-61":[1444.34,1985.53],"6-32-62":[1435.21,2244.93],"6-32-63":[-29.54,2744.46],"6-33-0":[13.6,33.18],"6-33-1":[15.63,33.39],"5-16-0":[13.6,33.39],"6-33-2":[13.83,1617.96],"6-33-3":[3.54,1701.03],"5-16-1":[3.54,1723.08],"6-33-4":[-1.3,1540.67],"6-33-5":[-21.29,1009.47],"5-16-2":[-22.64,1540.67],"6-33-6":[-36.75,819.86],"6-33-7":[-62.77,557.56],"5-16-3":[-63.11,819.86],"6-33-8":[-72.83,444.35],"6-33-9":[-88.51,366.68],"5-16-4":[-93.99,546.23],"6-33-10":[-95.62,-42.25],"6-33-11":[-97.09,-45.96],"5-16-5":[-97.86,87.35],"6-33-12":[-96.12,205.42],"6-33-13":[26.23,323.91],"5-16-6":[-96.12,415.1],"6-33-14":[40.15,604.67],"6-33-15":[99.8,613.05],"5-16-7":[40.15,613.05],"6-33-16":[103.99,486.54],"6-33-17":[42.02,356.67],"5-16-8":[-2.59,551.43],"6-33-18":[73.98,611.43],"6-33-19":[-2.39,1256.4],"5-16-9":[-24.24,1256.4],"6-33-20":[-18.21,703.65],"6-33-21":[-62.86,133.72],"5-16-10":[-63.34,703.65],"6-33-22":[-63.05,-24.55],"6-33-23":[-54.77,-15.6],"5-16-11":[-63.11,-7.65],"6-33-24":[-55.01,38.89],"6-33-25":[-31.18,-5.73],"5-16-12":[-55.01,1010.31],"6-33-26":[-16.7,2458.87],"6-33-27":[-29.38,2108.97],"5-16-13":[-35.51,3009.32],"6-33-28":[-12.99,2165.37],"6-33-29":[3.88,21.34],"5-16-14":[-12.99,2165.37],"6-33-30":[-9.95,580.04],"6-33-31":[-3.66,9.28],"5-16-15":[-9.95,580.04],"6-33-32":[-8.84,4.83],"6-33-33":[-12.48,2.13],"5-16-16":[-20.88,716.38],"6-33-34":[-13.36,-2.74],"6-33-35":[-13.27,-2.88],"5-16-17":[-21.38,-2.74],"6-33-36":[-11.47,-2.69],"6-33-37":[-8.95,-0.74],"5-16-18":[-17.05,-0.74],"6-33-38":[-5.14,2.74],"6-33-39":[-0.29,8.08],"5-16-19":[-9,8.08],"6-33-40":[1.94,9.43],"6-33-41":[2.8,10.75],"5-16-20":[0.59,10.75],"6-33-42":[0.89,8.51],"6-33-43":[-0.58,5.53],"5-16-21":[-3.93,8.51],"6-33-44":[-2.13,3.55],"6-33-45":[-1.46,3.29],"5-16-22":[-5.26,3.55],"6-33-46":[-0.15,6.87],"6-33-47":[1.07,7.73],"5-16-23":[-2.44,7.73],"6-33-48":[-0.11,7.04],"6-33-49":[-2.91,4.01],"5-16-24":[-7.99,7.04],"6-33-50":[-7.73,0.65],"6-33-51":[-12.58,-2.01],"5-16-25":[-16.4,0.65],"6-33-52":[-14.99,-3.66],"6-33-53":[-21.95,-5.75],"5-16-26":[-25.69,-3.66],"6-33-54":[-24.52,-9.25],"6-33-55":[-29.3,-10.49],"5-16-27":[-35.05,-9.25],"6-33-56":[-30.53,-11.38],"6-33-57":[-34.54,-11.65],"5-16-28":[-41.26,248.01],"6-33-58":[-34.69,1304.63],"6-33-59":[163.09,4721.94],"5-16-29":[-36.6,4721.94],"6-33-60":[441.12,2555.4],"6-33-61":[1232.67,1732.44],"5-16-30":[441.12,2555.4],"6-33-62":[1251.83,2245.57],"6-33-63":[-29.54,2744.47],"5-16-31":[-29.54,2744.47],"6-34-0":[13.6,33.57],"6-34-1":[16.2,34.27],"6-34-2":[15.09,1823.83],"6-34-3":[5.88,1627.27],"6-34-4":[0.78,1272.1],"6-34-5":[-16.01,1913.68],"6-34-6":[-22.87,1056.55],"6-34-7":[-53.19,570.75],"6-34-8":[-67.08,613.97],"6-34-9":[-84.49,433.17],"6-34-10":[-91.94,-38.64],"6-34-11":[-96.06,-44.35],"6-34-12":[-95.88,171.79],"6-34-13":[-46,145.12],"6-34-14":[-3.04,594.92],"6-34-15":[117.38,614.36],"6-34-16":[124.05,432.14],"6-34-17":[17.53,436.84],"6-34-18":[94.64,1652.42],"6-34-19":[35.46,2004.7],"6-34-20":[-31.34,358.2],"6-34-21":[-56.91,76.45],"6-34-22":[-52.24,86.32],"6-34-23":[-53.41,678.56],"6-34-24":[-46.91,565.42],"6-34-25":[-34.3,19.57],"6-34-26":[-32.9,735.54],"6-34-27":[-24.67,729.46],"6-34-28":[-18.58,3818.31],"6-34-29":[-17.79,1199.76],"6-34-30":[0.98,213.98],"6-34-31":[2.04,21.13],"6-34-32":[2.12,20.08],"6-34-33":[-5.46,10.12],"6-34-34":[-5.77,0.8],"6-34-35":[-6.05,2.96],"6-34-36":[-5.94,2.96],"6-34-37":[-5.13,6.17],"6-34-38":[-1.3,9.8],"6-34-39":[1.64,14.13],"6-34-40":[4.23,15.17],"6-34-41":[4.47,14.04],"6-34-42":[3.4,12.02],"6-34-43":[3.4,11.01],"6-34-44":[1.55,10.91],"6-34-45":[1.48,9.3],"6-34-46":[1.54,11.81],"6-34-47":[3.72,12.77],"6-34-48":[2.17,11.75],"6-34-49":[0.41,7.88],"6-34-50":[-3.25,5.77],"6-34-51":[-6.93,1.5],"6-34-52":[-11.33,-1.44],"6-34-53":[-18.26,-3.74],"6-34-54":[-20.79,-6.34],"6-34-55":[-25.29,-7.54],"6-34-56":[-27.01,-9.25],"6-34-57":[-33.98,-10.94],"6-34-58":[-34.8,1241.13],"6-34-59":[-52.36,1732.84],"6-34-60":[-52.36,2250.43],"6-34-61":[873,1480.75],"6-34-62":[1247.41,2251.13],"6-34-63":[-29.54,2745.47],"6-35-0":[13.6,34.16],"6-35-1":[16.51,35.76],"5-17-0":[13.6,35.76],"6-35-2":[16.38,1923.59],"6-35-3":[9.49,2313.91],"5-17-1":[5.88,2313.91],"4-8-0":[3.54,2313.91],"6-35-4":[3.3,2252.73],"6-35-5":[-8.04,1712.44],"5-17-2":[-16.01,2252.73],"6-35-6":[-16.63,1559.44],"6-35-7":[-53.78,272.32],"5-17-3":[-53.78,1559.44],"4-8-1":[-63.11,2252.73],"6-35-8":[-65.49,185.61],"6-35-9":[-76.1,184.52],"5-17-4":[-84.49,613.97],"6-35-10":[-88.72,293.27],"6-35-11":[-92.71,81.87],"5-17-5":[-96.06,293.27],"4-8-2":[-97.86,613.97],"6-35-12":[-92.66,123.7],"6-35-13":[-45.82,181.36],"5-17-6":[-95.88,181.36],"6-35-14":[-26.92,536.17],"6-35-15":[122.02,651.7],"5-17-7":[-26.92,651.7],"4-8-3":[-96.12,651.7],"6-35-16":[27.96,701.76],"6-35-17":[-8.6,951.43],"5-17-8":[-8.6,951.43],"6-35-18":[-44.79,1713.99],"6-35-19":[-37.13,1476.72],"5-17-9":[-44.79,2004.7],"4-8-4":[-44.79,2004.7],"6-35-20":[-74.33,139.84],"6-35-21":[-74.18,28.94],"5-17-10":[-74.33,358.2],"6-35-22":[-68.27,63.37],"6-35-23":[-53.75,293.76],"5-17-11":[-68.27,678.56],"4-8-5":[-74.33,703.65],"6-35-24":[-62.66,1104.62],"6-35-25":[-46.42,14.26],"5-17-12":[-62.66,1104.62],"6-35-26":[-24.54,8.26],"6-35-27":[-12.35,357.63],"5-17-13":[-32.9,735.54],"4-8-6":[-62.66,3009.32],"6-35-28":[-9.05,1960.73],"6-35-29":[-38,1563.96],"5-17-14":[-38,3818.31],"6-35-30":[10.56,29.2],"6-35-31":[-34,2816.32],"5-17-15":[-34,2816.32],"4-8-7":[-38,3818.31],"6-35-32":[-39.36,6286.78],"6-35-33":[-56.73,4458.62],"5-17-16":[-56.73,6286.78],"6-35-34":[-63.32,4118.74],"6-35-35":[-8.38,458.91],"5-17-17":[-63.32,4118.74],"4-8-8":[-63.32,6286.78],"6-35-36":[-1.45,18],"6-35-37":[2.19,21.77],"5-17-18":[-5.94,21.77],"6-35-38":[3.78,22.14],"6-35-39":[5.81,20.12],"5-17-19":[-1.3,22.14],"4-8-9":[-17.05,22.14],"6-35-40":[6.54,19.83],"6-35-41":[-22.92,470.08],"5-17-20":[-22.92,470.08],"6-35-42":[5.5,19.63],"6-35-43":[-88.44,1091.31],"5-17-21":[-88.44,1091.31],"4-8-10":[-88.44,1091.31],"6-35-44":[-23.76,1289.29],"6-35-45":[4.72,16.91],"5-17-22":[-23.76,1289.29],"6-35-46":[4.86,18.8],"6-35-47":[6.11,18.78],"5-17-23":[1.54,18.8],"4-8-11":[-23.76,1289.29],"6-35-48":[4.51,19.18],"6-35-49":[3.21,14.36],"5-17-24":[0.41,19.18],"6-35-50":[1.45,11.01],"6-35-51":[-2.17,8.59],"5-17-25":[-6.93,11.01],"4-8-12":[-16.4,19.18],"6-35-52":[-5.6,3.45],"6-35-53":[-12,-1.41],"5-17-26":[-18.26,3.45],"6-35-54":[-13.82,-3.08],"6-35-55":[-20.59,-4.15],"5-17-27":[-25.29,-3.08],"4-8-13":[-35.05,3.45],"6-35-56":[-21.6,-7],"6-35-57":[-30.21,327.46],"5-17-28":[-33.98,327.46],"6-35-58":[-30.73,1088.67],"6-35-59":[-49.4,1067.5],"5-17-29":[-52.36,1732.84],"4-8-14":[-52.36,4721.94],"6-35-60":[-49.4,1223.59],"6-35-61":[548.47,1388.03],"5-17-30":[-52.36,2250.43],"6-35-62":[1139.79,2260.72],"6-35-63":[-29.54,2745.47],"5-17-31":[-29.54,2745.47],"4-8-15":[-52.36,2745.47],"6-36-0":[13.6,34.61],"6-36-1":[16.93,36.8],"6-36-2":[17.48,2230.75],"6-36-3":[8.2,2258.08],"6-36-4":[6.48,1817.36],"6-36-5":[1.34,2118.71],"6-36-6":[-14.9,1862.67],"6-36-7":[-49.69,611.89],"6-36-8":[-62.21,282.83],"6-36-9":[-68.81,575.77],"6-36-10":[-79.91,428.02],"6-36-11":[-45.31,430.05],"6-36-12":[-47.68,408.97],"6-36-13":[-44.52,406.33],"6-36-14":[126.58,610.85],"6-36-15":[16.43,575.3],"6-36-16":[12.09,700.02],"6-36-17":[-45.25,927.51],"6-36-18":[-64.5,1201.61],"6-36-19":[-85.54,191.41],"6-36-20":[-89.06,-36.24],"6-36-21":[-93.16,-34.13],"6-36-22":[-90.89,29.15],"6-36-23":[-82.17,55.76],"6-36-24":[-67.36,1947.58],"6-36-25":[-49.86,2231.33],"6-36-26":[-37.01,0.98],"6-36-27":[-29.93,-2.92],"6-36-28":[-18.96,1449.86],"6-36-29":[-29.88,4212.67],"6-36-30":[-37.47,5414.88],"6-36-31":[-328.06,5809.48],"6-36-32":[167.64,5906.18],"6-36-33":[112.46,4149.93],"6-36-34":[77.11,5607.45],"6-36-35":[-116.39,6754.44],"6-36-36":[-49.49,5914.69],"6-36-37":[-7.04,824.13],"6-36-38":[10.05,32.11],"6-36-39":[9.18,30.01],"6-36-40":[9.06,28.91],"6-36-41":[9.77,29.26],"6-36-42":[8.85,27.55],"6-36-43":[7.85,26.75],"6-36-44":[8.15,25.78],"6-36-45":[8.09,22.48],"6-36-46":[8.44,23.14],"6-36-47":[9.17,22.91],"6-36-48":[7.17,22.45],"6-36-49":[4.69,22.45],"6-36-50":[4.05,19.43],"6-36-51":[1.95,10.14],"6-36-52":[-2.07,8.34],"6-36-53":[-5.89,2.43],"6-36-54":[-7.67,1],"6-36-55":[-16.43,-0.39],"6-36-56":[-17.96,4.83],"6-36-57":[-24.97,322.6],"6-36-58":[-25.5,1069.77],"6-36-59":[-46.79,1055.47],"6-36-60":[-49.8,832.48],"6-36-61":[240.99,1288.62],"6-36-62":[1054.14,2281.25],"6-36-63":[-29.54,2745.47],"6-37-0":[13.6,35.4],"6-37-1":[17.14,38.45],"5-18-0":[13.6,38.45],"6-37-2":[18.24,2437.47],"6-37-3":[7.27,2148.92],"5-18-1":[7.27,2437.47],"6-37-4":[7.89,1260.24],"6-37-5":[4.77,32.77],"5-18-2":[1.34,2118.71],"6-37-6":[-1.92,1808.19],"6-37-7":[-40.5,1101.49],"5-18-3":[-49.69,1862.67],"6-37-8":[-50.59,282.61],"6-37-9":[-60.82,642.27],"5-18-4":[-68.81,642.27],"6-37-10":[-29.59,648.16],"6-37-11":[-23.76,410.19],"5-18-5":[-79.91,648.16],"6-37-12":[-40.73,516.43],"6-37-13":[163.41,654.15],"5-18-6":[-47.68,654.15],"6-37-14":[225.34,700.01],"6-37-15":[-96.6,889.43],"5-18-7":[-96.6,889.43],"6-37-16":[-33.29,1597.57],"6-37-17":[-113.29,1241.62],"5-18-8":[-113.29,1597.57],"6-37-18":[-86.48,7.41],"6-37-19":[-97.81,-12.11],"5-18-9":[-97.81,1201.61],"6-37-20":[-102.6,-42.73],"6-37-21":[-100.62,-43.8],"5-18-10":[-102.6,-34.13],"6-37-22":[-95.92,-41.08],"6-37-23":[-92.86,26.27],"5-18-11":[-95.92,55.76],"6-37-24":[-83.2,1217.95],"6-37-25":[-62.64,2330.69],"5-18-12":[-83.2,2330.69],"6-37-26":[-56.44,-14.96],"6-37-27":[-48.4,871.95],"5-18-13":[-56.44,871.95],"6-37-28":[-49.02,5700.22],"6-37-29":[-23.52,3844.52],"5-18-14":[-49.02,5700.22],"6-37-30":[169,5315.89],"6-37-31":[170.25,3836.77],"5-18-15":[-328.06,5809.48],"6-37-32":[117.06,443.38],"6-37-33":[81.67,324.59],"5-18-16":[81.67,5906.18],"6-37-34":[90.99,2362.22],"6-37-35":[136.3,5683.59],"5-18-17":[-116.39,6754.44],"6-37-36":[213.99,5564.58],"6-37-37":[-123.53,5547.75],"5-18-18":[-123.53,5914.69],"6-37-38":[11.41,41.12],"6-37-39":[13.52,40.44],"5-18-19":[9.18,41.12],"6-37-40":[13.77,39.3],"6-37-41":[13.66,37.5],"5-18-20":[9.06,39.3],"6-37-42":[12.71,34.42],"6-37-43":[9.07,32.14],"5-18-21":[7.85,34.42],"6-37-44":[8.29,34.46],"6-37-45":[-18.71,1376.54],"5-18-22":[-18.71,1376.54],"6-37-46":[-29.59,1061.25],"6-37-47":[-7.31,1414.25],"5-18-23":[-29.59,1414.25],"6-37-48":[-36.85,4026.29],"6-37-49":[-269.44,3587.09],"5-18-24":[-269.44,4026.29],"6-37-50":[-96.77,2789.91],"6-37-51":[-222.29,1172.63],"5-18-25":[-222.29,2789.91],"6-37-52":[1.79,13.51],"6-37-53":[0.72,11.28],"5-18-26":[-5.89,13.51],"6-37-54":[-0.4,8.59],"6-37-55":[-7.66,4.36],"5-18-27":[-16.43,8.59],"6-37-56":[-8.53,510.52],"6-37-57":[-19.03,669.28],"5-18-28":[-24.97,669.28],"6-37-58":[-21.41,1660.76],"6-37-59":[-46.84,796.88],"5-18-29":[-46.84,1660.76],"6-37-60":[-52.31,243.32],"6-37-61":[219.34,1153.83],"5-18-30":[-52.31,1288.62],"6-37-62":[921.3,2321.18],"6-37-63":[-29.54,2745.47],"5-18-31":[-29.54,2745.47],"6-38-0":[13.6,36.29],"6-38-1":[17.42,39.8],"6-38-2":[18.96,2116.63],"6-38-3":[6.6,2052.81],"6-38-4":[10,1115.32],"6-38-5":[12.54,35.55],"6-38-6":[0.83,1713.29],"6-38-7":[-34.12,1625.19],"6-38-8":[-39.93,332.82],"6-38-9":[-52.52,633.8],"6-38-10":[-48.57,658.27],"6-38-11":[-23.61,464.64],"6-38-12":[271.57,704.35],"6-38-13":[334.3,1114.61],"6-38-14":[-30.94,1053.24],"6-38-15":[-69.08,1266.55],"6-38-16":[-76.04,1888.88],"6-38-17":[-77.04,507.57],"6-38-18":[-86.89,-36.02],"6-38-19":[-98.41,-42.87],"6-38-20":[-103.24,-47.88],"6-38-21":[-104.42,-47.93],"6-38-22":[-104.14,-46.84],"6-38-23":[-103.56,-41.22],"6-38-24":[-101.46,1152.74],"6-38-25":[-85.84,3067.99],"6-38-26":[-70.73,-20.78],"6-38-27":[-65.4,833.1],"6-38-28":[-114.23,4925.73],"6-38-29":[10.54,5356.84],"6-38-30":[61.91,3882.23],"6-38-31":[106.5,839.2],"6-38-32":[68.16,474.29],"6-38-33":[63.39,249.13],"6-38-34":[103.34,384.58],"6-38-35":[184.94,644.83],"6-38-36":[252.99,6360.34],"6-38-37":[-22.39,6449.41],"6-38-38":[-1.33,5847.77],"6-38-39":[12.47,42.32],"6-38-40":[-9.89,2677.33],"6-38-41":[-3.78,2243.25],"6-38-42":[5.25,5156.32],"6-38-43":[2.3,5062.63],"6-38-44":[-10.81,5023.3],"6-38-45":[10.45,4724.4],"6-38-46":[-49.62,3766.16],"6-38-47":[-60.04,2585.5],"6-38-48":[-22.3,3553.09],"6-38-49":[7.67,3257.62],"6-38-50":[-72.84,2695.15],"6-38-51":[-106.71,1949.61],"6-38-52":[4.99,21.78],"6-38-53":[5.46,21.13],"6-38-54":[2.62,15.36],"6-38-55":[0.1,12.23],"6-38-56":[-3.35,2784.58],"6-38-57":[-15.5,1731.59],"6-38-58":[-15.5,1790.22],"6-38-59":[-44.23,1401.52],"6-38-60":[-50.33,332.2],"6-38-61":[241.75,1029.44],"6-38-62":[742.55,2346.02],"6-38-63":[-29.54,2745.47],"6-39-0":[13.6,37.58],"6-39-1":[17.68,41.29],"5-19-0":[13.6,41.29],"6-39-2":[16.51,1723.34],"6-39-3":[6.84,1651.25],"5-19-1":[6.6,2116.63],"4-9-0":[6.6,2437.47],"6-39-4":[11.11,1535.69],"6-39-5":[13.7,38.14],"5-19-2":[10,1535.69],"6-39-6":[2.98,1492.45],"6-39-7":[-1.86,1664.51],"5-19-3":[-34.12,1713.29],"4-9-1":[-49.69,2118.71],"3-4-0":[-63.11,2437.47],"6-39-8":[-16.42,932.96],"6-39-9":[-42.68,781.05],"5-19-4":[-52.52,932.96],"6-39-10":[-44.28,360.51],"6-39-11":[-41.88,596.29],"5-19-5":[-48.57,658.27],"4-9-2":[-79.91,932.96],"6-39-12":[51.44,869.29],"6-39-13":[188,1077.82],"5-19-6":[51.44,1114.61],"6-39-14":[-31.13,916.29],"6-39-15":[-25.79,1579.36],"5-19-7":[-69.08,1579.36],"4-9-3":[-96.6,1579.36],"3-4-1":[-97.86,1579.36],"6-39-16":[-56.2,1114.21],"6-39-17":[-75.76,23.87],"5-19-8":[-77.04,1888.88],"6-39-18":[-85.75,-37.02],"6-39-19":[-95.04,-41.17],"5-19-9":[-98.41,-36.02],"4-9-4":[-113.29,1888.88],"6-39-20":[-101.46,-44.35],"6-39-21":[-103.88,-46.85],"5-19-10":[-104.42,-44.35],"6-39-22":[-105.29,-49.02],"6-39-23":[-104.93,-50.05],"5-19-11":[-105.29,-41.22],"4-9-5":[-105.29,55.76],"3-4-2":[-113.29,2004.7],"6-39-24":[-129.9,-42.27],"6-39-25":[-132.42,1440.94],"5-19-12":[-132.42,3067.99],"6-39-26":[-85.88,-29.52],"6-39-27":[-89.53,1217.96],"5-19-13":[-89.53,1217.96],"4-9-6":[-132.42,3067.99],"6-39-28":[-34.01,3550.67],"6-39-29":[-4.7,404.14],"5-19-14":[-114.23,5356.84],"6-39-30":[19.1,759.95],"6-39-31":[49.74,984.95],"5-19-15":[19.1,3882.23],"4-9-7":[-328.06,5809.48],"3-4-3":[-328.06,5809.48],"6-39-32":[-0.58,880.62],"6-39-33":[34.67,244.67],"5-19-16":[-0.58,880.62],"6-39-34":[68,300.39],"6-39-35":[108.3,433.23],"5-19-17":[68,644.83],"4-9-8":[-116.39,6754.44],"6-39-36":[155.88,5347.83],"6-39-37":[202.17,6455.95],"5-19-18":[-22.39,6455.95],"6-39-38":[2.92,6600.28],"6-39-39":[3.78,6222.25],"5-19-19":[-1.33,6600.28],"4-9-9":[-123.53,6600.28],"3-4-4":[-123.53,6754.44],"6-39-40":[25.81,6775.96],"6-39-41":[366.3,6919.9],"5-19-20":[-9.89,6919.9],"6-39-42":[645.96,6300.89],"6-39-43":[493.64,6969.13],"5-19-21":[2.3,6969.13],"4-9-10":[-9.89,6969.13],"6-39-44":[407.92,5888.33],"6-39-45":[231.75,3998.13],"5-19-22":[-10.81,5888.33],"6-39-46":[248.58,2022.28],"6-39-47":[173.83,1957.39],"5-19-23":[-60.04,3766.16],"4-9-11":[-60.04,5888.33],"3-4-5":[-88.44,6969.13],"6-39-48":[-0.14,1353.11],"6-39-49":[-111.83,1097.15],"5-19-24":[-111.83,3553.09],"6-39-50":[-1.5,605.9],"6-39-51":[-63.31,2581.84],"5-19-25":[-106.71,2695.15],"4-9-12":[-269.44,4026.29],"6-39-52":[7.24,30.32],"6-39-53":[8.16,28.42],"5-19-26":[4.99,30.32],"6-39-54":[5.99,24.52],"6-39-55":[4.94,1701.66],"5-19-27":[0.1,1701.66],"4-9-13":[-16.43,1701.66],"3-4-6":[-269.44,4026.29],"6-39-56":[2.04,2876.77],"6-39-57":[-5.16,2323.88],"5-19-28":[-15.5,2876.77],"6-39-58":[-5.16,2011.29],"6-39-59":[-38.71,1401.52],"5-19-29":[-44.23,2011.29],"4-9-14":[-46.84,2876.77],"6-39-60":[-48.69,398.96],"6-39-61":[152.3,947.43],"5-19-30":[-50.33,1029.44],"6-39-62":[609.13,2348.16],"6-39-63":[-29.54,2745.47],"5-19-31":[-29.54,2745.47],"4-9-15":[-52.31,2745.47],"3-4-7":[-52.36,4721.94],"6-40-0":[13.58,38.54],"6-40-1":[18.42,42.48],"6-40-2":[14.03,1837.18],"6-40-3":[9.2,1301.31],"6-40-4":[16.61,1474.89],"6-40-5":[15.16,294.75],"6-40-6":[5.31,35.39],"6-40-7":[0.08,1690.53],"6-40-8":[-12.78,2057.19],"6-40-9":[-31.21,1148.56],"6-40-10":[-39,1032.11],"6-40-11":[-38.87,935.94],"6-40-12":[283.81,898.04],"6-40-13":[24.76,1031.68],"6-40-14":[-26.02,1255.33],"6-40-15":[-50.51,787.13],"6-40-16":[-51.94,269.07],"6-40-17":[-74.05,-24.93],"6-40-18":[-82.04,-34.93],"6-40-19":[-88.7,-36.77],"6-40-20":[-92.93,48.35],"6-40-21":[-98.06,-42.9],"6-40-22":[-101.84,-47.14],"6-40-23":[-104.68,-50.45],"6-40-24":[-138.65,-50.2],"6-40-25":[-141.12,1288.29],"6-40-26":[-90.28,-35.91],"6-40-27":[-82.71,92.4],"6-40-28":[-60.97,2718.19],"6-40-29":[-37.5,2385.74],"6-40-30":[52.53,2826.62],"6-40-31":[41.04,2785.87],"6-40-32":[-10.01,1058.3],"6-40-33":[7.09,158.16],"6-40-34":[23.99,203.5],"6-40-35":[68.74,470.48],"6-40-36":[117.6,267.64],"6-40-37":[126.79,5469.94],"6-40-38":[191.91,5778.21],"6-40-39":[986.52,6050.05],"6-40-40":[396.34,6388.87],"6-40-41":[262.61,6039.42],"6-40-42":[156.73,4549.07],"6-40-43":[232.7,2816.12],"6-40-44":[196.61,812.73],"6-40-45":[94.32,598.59],"6-40-46":[-102.43,1675.56],"6-40-47":[0.8,1125.83],"6-40-48":[-8.45,672.86],"6-40-49":[1.67,282.56],"6-40-50":[9.92,25.99],"6-40-51":[-12.01,1141.97],"6-40-52":[12.59,33.62],"6-40-53":[14.04,33.98],"6-40-54":[10.79,32.1],"6-40-55":[7.94,2110.84],"6-40-56":[7.14,2245.41],"6-40-57":[1.76,2040.57],"6-40-58":[-14.94,2090.43],"6-40-59":[-38.71,870.91],"6-40-60":[-48.69,230.81],"6-40-61":[-53.09,864.87],"6-40-62":[549.51,2344.27],"6-40-63":[-29.59,2745.47],"6-41-0":[13.58,39.48],"6-41-1":[19.11,44.26],"5-20-0":[13.58,44.26],"6-41-2":[13.19,951.78],"6-41-3":[11.37,1019.58],"5-20-1":[9.2,1837.18],"6-41-4":[17.37,1639.31],"6-41-5":[16.47,47.31],"5-20-2":[15.16,1639.31],"6-41-6":[12.24,47.31],"6-41-7":[6.36,1076.43],"5-20-3":[0.08,1690.53],"6-41-8":[-2.21,1785.63],"6-41-9":[-5.15,768.08],"5-20-4":[-31.21,2057.19],"6-41-10":[-18.25,1491.48],"6-41-11":[-32.03,1587.28],"5-20-5":[-39,1587.28],"6-41-12":[-13.09,864.36],"6-41-13":[25.94,1005.83],"5-20-6":[-13.09,1031.68],"6-41-14":[-40.09,588],"6-41-15":[-62.23,347.02],"5-20-7":[-62.23,1255.33],"6-41-16":[-51.62,265.73],"6-41-17":[-68.99,-25.54],"5-20-8":[-74.05,269.07],"6-41-18":[-71.61,-29.96],"6-41-19":[-78.01,-32.58],"5-20-9":[-88.7,-29.96],"6-41-20":[-85.81,18.12],"6-41-21":[-94.07,-39.59],"5-20-10":[-98.06,48.35],"6-41-22":[-102.75,-46.49],"6-41-23":[-105.57,-50.83],"5-20-11":[-105.57,-46.49],"6-41-24":[-129.54,-50.47],"6-41-25":[-129.48,1103.9],"5-20-12":[-141.12,1288.29],"6-41-26":[-90.4,869.54],"6-41-27":[-83.95,203.34],"5-20-13":[-90.4,869.54],"6-41-28":[-92.41,2565.59],"6-41-29":[-92.52,2449.21],"5-20-14":[-92.52,2718.19],"6-41-30":[126.29,2659.72],"6-41-31":[-0.89,2129.57],"5-20-15":[-0.89,2826.62],"6-41-32":[-35.4,103.23],"6-41-33":[-58.32,106.3],"5-20-16":[-58.32,1058.3],"6-41-34":[-8.15,187.29],"6-41-35":[3.69,1127.71],"5-20-17":[-8.15,1127.71],"6-41-36":[121.95,684.67],"6-41-37":[141.32,910.63],"5-20-18":[117.6,5469.94],"6-41-38":[214.18,4327.46],"6-41-39":[236.72,4098.61],"5-20-19":[191.91,6050.05],"6-41-40":[173.14,2622.25],"6-41-41":[94.42,1259.46],"5-20-20":[94.42,6388.87],"6-41-42":[68.09,1956.16],"6-41-43":[84.73,1847.62],"5-20-21":[68.09,4549.07],"6-41-44":[37.81,370.32],"6-41-45":[-42.53,1242.87],"5-20-22":[-42.53,1242.87],"6-41-46":[-22.19,172.48],"6-41-47":[-31.67,129.69],"5-20-23":[-102.43,1675.56],"6-41-48":[11.07,24.28],"6-41-49":[10.94,26.76],"5-20-24":[-8.45,672.86],"6-41-50":[10.24,27.93],"6-41-51":[-32.01,987.97],"5-20-25":[-32.01,1141.97],"6-41-52":[13.89,37.69],"6-41-53":[15.64,37.01],"5-20-26":[12.59,37.69],"6-41-54":[14.31,2255.29],"6-41-55":[8.72,2099.32],"5-20-27":[7.94,2255.29],"6-41-56":[6.99,2890.49],"6-41-57":[-1.96,2528.76],"5-20-28":[-1.96,2890.49],"6-41-58":[-28.3,1987.4],"6-41-59":[-36.07,-12.83],"5-20-29":[-38.71,2090.43],"6-41-60":[-47.6,-17.93],"6-41-61":[-51.95,806.53],"5-20-30":[-53.09,864.87],"6-41-62":[471.29,2332.43],"6-41-63":[-29.59,2745.47],"5-20-31":[-29.59,2745.47],"6-42-0":[13.6,39.87],"6-42-1":[20.07,45.77],"6-42-2":[13.39,636.09],"6-42-3":[13.39,1412.39],"6-42-4":[19.15,1850.85],"6-42-5":[16.99,99.21],"6-42-6":[19.11,50.32],"6-42-7":[14.3,47.47],"6-42-8":[7.19,1284.77],"6-42-9":[7.19,31.28],"6-42-10":[-1.45,19.12],"6-42-11":[-15.72,1027.48],"6-42-12":[-15.45,846.11],"6-42-13":[-12.9,704.1],"6-42-14":[-35.16,560.68],"6-42-15":[-28.74,626.18],"6-42-16":[-51.65,12.82],"6-42-17":[-59.93,-22.72],"6-42-18":[-63.96,-25.31],"6-42-19":[-70.71,-27.67],"6-42-20":[-79.19,-32.63],"6-42-21":[-92.99,-37.86],"6-42-22":[-102.26,-44.04],"6-42-23":[-104.51,-48.01],"6-42-24":[-109.89,-46.13],"6-42-25":[-127.72,350.69],"6-42-26":[-127.8,1415.28],"6-42-27":[-108.65,1174.77],"6-42-28":[-95.38,906.03],"6-42-29":[-54.23,2236.77],"6-42-30":[-7.39,2551.06],"6-42-31":[-5.06,1982.48],"6-42-32":[-47.66,394.84],"6-42-33":[-73.31,139.4],"6-42-34":[-32.27,379.21],"6-42-35":[37.28,586.16],"6-42-36":[152.35,742.16],"6-42-37":[128.07,1176.05],"6-42-38":[126.79,1325.79],"6-42-39":[110.1,644.34],"6-42-40":[97.77,249.8],"6-42-41":[34.67,233.97],"6-42-42":[2.15,142.11],"6-42-43":[-47.95,159.46],"6-42-44":[8.07,171.01],"6-42-45":[-24.24,773.01],"6-42-46":[11.51,27.54],"6-42-47":[5.16,24.63],"6-42-48":[5.16,23.27],"6-42-49":[8.2,25.72],"6-42-50":[-14.47,710.18],"6-42-51":[7.63,36.26],"6-42-52":[18.27,39.83],"6-42-53":[15.15,41.77],"6-42-54":[17.24,2109.78],"6-42-55":[9.82,2069.8],"6-42-56":[4.32,269.27],"6-42-57":[-10.08,1250.11],"6-42-58":[-23.74,1211.47],"6-42-59":[-36.14,-12.1],"6-42-60":[-49.12,-17.94],"6-42-61":[-51.95,889.65],"6-42-62":[706.64,2326.44],"6-42-63":[-29.54,2745.48],"6-43-0":[13.6,39.93],"6-43-1":[20.42,46.12],"5-21-0":[13.6,46.12],"6-43-2":[15.74,633.11],"6-43-3":[17.13,1941.41],"5-21-1":[13.39,1941.41],"4-10-0":[9.2,1941.41],"6-43-4":[99.2,2238.22],"6-43-5":[18.2,1021.33],"5-21-2":[16.99,2238.22],"6-43-6":[19.11,56.07],"6-43-7":[20.15,55.35],"5-21-3":[14.3,56.07],"4-10-1":[0.08,2238.22],"6-43-8":[17.02,49.44],"6-43-9":[9.89,42.39],"5-21-4":[7.19,1284.77],"6-43-10":[5.25,33.28],"6-43-11":[0.68,23.83],"5-21-5":[-15.72,1027.48],"4-10-2":[-39,2057.19],"6-43-12":[-8.86,1193.16],"6-43-13":[-13.28,895.93],"5-21-6":[-15.45,1193.16],"6-43-14":[-20.12,804.73],"6-43-15":[-48.44,566.65],"5-21-7":[-48.44,804.73],"4-10-3":[-62.23,1255.33],"6-43-16":[-45.14,-4.42],"6-43-17":[-49.88,-13.27],"5-21-8":[-59.93,12.82],"6-43-18":[-53.59,-19.77],"6-43-19":[-63.3,-23.07],"5-21-9":[-70.71,-19.77],"4-10-4":[-88.7,269.07],"6-43-20":[-73.49,-28.47],"6-43-21":[-87.06,-33.6],"5-21-10":[-92.99,-28.47],"6-43-22":[-94.59,-38.95],"6-43-23":[-97.23,-43.01],"5-21-11":[-104.51,-38.95],"4-10-5":[-105.57,48.35],"6-43-24":[-97.15,-43.83],"6-43-25":[-102.43,-45.56],"5-21-12":[-127.72,350.69],"6-43-26":[-113.66,-45.85],"6-43-27":[-108.06,-44.72],"5-21-13":[-127.8,1415.28],"4-10-6":[-141.12,1415.28],"6-43-28":[-95.84,-31.87],"6-43-29":[-77.21,502.55],"5-21-14":[-95.84,2236.77],"6-43-30":[-149.21,1207.52],"6-43-31":[87.42,1109.8],"5-21-15":[-149.21,2551.06],"4-10-7":[-149.21,2826.62],"6-43-32":[-59.96,483.8],"6-43-33":[-57.01,412.4],"5-21-16":[-73.31,483.8],"6-43-34":[2.73,657.03],"6-43-35":[87.58,621.44],"5-21-17":[-32.27,657.03],"4-10-8":[-73.31,1127.71],"6-43-36":[215.28,689.04],"6-43-37":[74.01,949.21],"5-21-18":[74.01,1176.05],"6-43-38":[58.91,1245.78],"6-43-39":[66.15,856.34],"5-21-19":[58.91,1325.79],"4-10-9":[58.91,6050.05],"6-43-40":[22.81,738.99],"6-43-41":[-2.88,703.38],"5-21-20":[-2.88,738.99],"6-43-42":[24.1,362.62],"6-43-43":[-5.9,395.29],"5-21-21":[-47.95,395.29],"4-10-10":[-47.95,6388.87],"6-43-44":[-44.85,228.24],"6-43-45":[-41.29,445.18],"5-21-22":[-44.85,773.01],"6-43-46":[2.65,26.5],"6-43-47":[0.53,19.67],"5-21-23":[0.53,27.54],"4-10-11":[-102.43,1675.56],"6-43-48":[0.24,14.06],"6-43-49":[3.69,25.65],"5-21-24":[0.24,25.72],"6-43-50":[3.62,714.59],"6-43-51":[5.69,38.8],"5-21-25":[-14.47,714.59],"4-10-12":[-32.01,1141.97],"6-43-52":[18.27,41.03],"6-43-53":[15.15,44.21],"5-21-26":[15.15,44.21],"6-43-54":[19.28,1728.16],"6-43-55":[9.82,37.01],"5-21-27":[9.82,2109.78],"4-10-13":[7.94,2255.29],"6-43-56":[1.8,22.37],"6-43-57":[-9.86,6.91],"5-21-28":[-10.08,1250.11],"6-43-58":[-23.43,-4.86],"6-43-59":[-35.85,-11.97],"5-21-29":[-36.14,1211.47],"4-10-14":[-38.71,2890.49],"6-43-60":[-50.63,-17.94],"6-43-61":[-51.01,1371.37],"5-21-30":[-51.95,1371.37],"6-43-62":[889.64,2317.26],"6-43-63":[-29.54,2745.48],"5-21-31":[-29.54,2745.48],"4-10-15":[-53.09,2745.48],"6-44-0":[13.6,39.84],"6-44-1":[20.3,45.86],"6-44-2":[17.47,772.13],"6-44-3":[19.23,2089.38],"6-44-4":[1020.94,2319.04],"6-44-5":[23.12,1708.39],"6-44-6":[23.37,1880.96],"6-44-7":[23.02,1854.07],"6-44-8":[21.54,1029.06],"6-44-9":[17.35,54.28],"6-44-10":[12.02,44.62],"6-44-11":[7.84,35.64],"6-44-12":[1.92,148.72],"6-44-13":[-20.3,486.61],"6-44-14":[-16.93,577.05],"6-44-15":[-12.05,408.54],"6-44-16":[-25.93,8.57],"6-44-17":[-39.16,-6.77],"6-44-18":[-44.89,-11.09],"6-44-19":[-56.94,-15.52],"6-44-20":[-66.17,-21.28],"6-44-21":[-77.89,-27.12],"6-44-22":[-85.04,-32.05],"6-44-23":[-89.27,-36.06],"6-44-24":[-91.01,-38.75],"6-44-25":[-96.71,-40.68],"6-44-26":[-98.96,-43.31],"6-44-27":[-95.93,-44.41],"6-44-28":[-95.18,-38.68],"6-44-29":[-81.6,14.37],"6-44-30":[-61.24,1030.82],"6-44-31":[94.48,889.3],"6-44-32":[-68.02,823.15],"6-44-33":[-38.49,487.97],"6-44-34":[67.74,694.41],"6-44-35":[161.68,753.33],"6-44-36":[228.41,612.29],"6-44-37":[103.13,914.71],"6-44-38":[86.09,880.42],"6-44-39":[114.58,752.75],"6-44-40":[106.53,799.57],"6-44-41":[70.48,899.62],"6-44-42":[35.31,584.15],"6-44-43":[1.97,482.27],"6-44-44":[-15.03,526.4],"6-44-45":[1.5,25.03],"6-44-46":[-0.35,22.2],"6-44-47":[-1.19,4.24],"6-44-48":[-2.11,6.22],"6-44-49":[-0.03,20.82],"6-44-50":[4.52,23.4],"6-44-51":[4.37,37.14],"6-44-52":[17.75,41.14],"6-44-53":[20.43,1523.88],"6-44-54":[16.01,578.59],"6-44-55":[7.53,38.03],"6-44-56":[-1.38,22.22],"6-44-57":[-9.33,2.32],"6-44-58":[-22.52,-3.02],"6-44-59":[-35.85,-11.88],"6-44-60":[-51.01,204.79],"6-44-61":[-50.72,1540.95],"6-44-62":[1083.33,2298.91],"6-44-63":[-29.54,2745.48],"6-45-0":[13.6,39.31],"6-45-1":[20,45.87],"5-22-0":[13.6,45.87],"6-45-2":[18.2,829.3],"6-45-3":[45.54,2185.38],"5-22-1":[17.47,2185.38],"6-45-4":[1552.61,2333.41],"6-45-5":[1247.03,2344.97],"5-22-2":[23.12,2344.97],"6-45-6":[26.83,2399.4],"6-45-7":[22.92,1842.92],"5-22-3":[22.92,2399.4],"6-45-8":[27.1,2229.6],"6-45-9":[22.31,1280.25],"5-22-4":[17.35,2229.6],"6-45-10":[19.37,59.8],"6-45-11":[16.17,52.29],"5-22-5":[7.84,59.8],"6-45-12":[14.52,48.25],"6-45-13":[12.67,43.66],"5-22-6":[-20.3,486.61],"6-45-14":[-9.6,301],"6-45-15":[-18.2,337.49],"5-22-7":[-18.2,577.05],"6-45-16":[-9.43,30.39],"6-45-17":[-20.11,6.02],"5-22-8":[-39.16,30.39],"6-45-18":[-27.17,-1.97],"6-45-19":[-40.58,-6.64],"5-22-9":[-56.94,-1.97],"6-45-20":[-50.81,-12.66],"6-45-21":[-62.29,-18.14],"5-22-10":[-77.89,-12.66],"6-45-22":[-68.68,-23.39],"6-45-23":[-75.93,-27.38],"5-22-11":[-89.27,-23.39],"6-45-24":[-80.15,-31.4],"6-45-25":[-85.3,-34.94],"5-22-12":[-96.71,-31.4],"6-45-26":[-89.68,-37.87],"6-45-27":[-90.85,-41.31],"5-22-13":[-98.96,-37.87],"6-45-28":[-90.85,-40.13],"6-45-29":[-87.64,-32.13],"5-22-14":[-95.18,14.37],"6-45-30":[-71.92,795.54],"6-45-31":[-78.81,615.02],"5-22-15":[-78.81,1030.82],"6-45-32":[-60.65,667.42],"6-45-33":[-29.07,524.34],"5-22-16":[-68.02,823.15],"6-45-34":[114.46,806.95],"6-45-35":[140.16,772.15],"5-22-17":[67.74,806.95],"6-45-36":[148.33,508.2],"6-45-37":[188.03,1020.26],"5-22-18":[103.13,1020.26],"6-45-38":[279.54,1043.99],"6-45-39":[226.83,630.24],"5-22-19":[86.09,1043.99],"6-45-40":[218.51,1344.63],"6-45-41":[192.34,1399.29],"5-22-20":[70.48,1399.29],"6-45-42":[-18.16,1093.19],"6-45-43":[-20.19,529.24],"5-22-21":[-20.19,1093.19],"6-45-44":[-0.71,38.77],"6-45-45":[-4.23,9.67],"5-22-22":[-15.03,526.4],"6-45-46":[-4.6,2.28],"6-45-47":[-5.77,-0.34],"5-22-23":[-5.77,22.2],"6-45-48":[-6.99,-0.02],"6-45-49":[-2.71,15],"5-22-24":[-6.99,20.82],"6-45-50":[5.01,17.57],"6-45-51":[6.24,35.37],"5-22-25":[4.37,37.14],"6-45-52":[17.75,40.41],"6-45-53":[20.22,47.29],"5-22-26":[17.75,1523.88],"6-45-54":[13.66,45.08],"6-45-55":[7.53,29.37],"5-22-27":[7.53,578.59],"6-45-56":[-1.7,15.36],"6-45-57":[-5.7,-0.8],"5-22-28":[-9.33,22.22],"6-45-58":[-21.59,-2.49],"6-45-59":[-34.95,-11.26],"5-22-29":[-35.85,-2.49],"6-45-60":[-51.02,354.31],"6-45-61":[-49.77,1979.94],"5-22-30":[-51.02,1979.94],"6-45-62":[1259.39,2275.47],"6-45-63":[-29.54,2745.48],"5-22-31":[-29.54,2745.48],"6-46-0":[13.6,38.72],"6-46-1":[19.71,46.42],"6-46-2":[19.83,660.34],"6-46-3":[405.24,2285.51],"6-46-4":[1894.84,2457.14],"6-46-5":[1860.54,2475.02],"6-46-6":[29.19,2542.84],"6-46-7":[26.42,1831.68],"6-46-8":[29.81,2027.72],"6-46-9":[29.48,2175.1],"6-46-10":[26.25,1494.43],"6-46-11":[24.84,68.28],"6-46-12":[21.59,63.25],"6-46-13":[21.59,55.81],"6-46-14":[17.39,52.22],"6-46-15":[15.17,53.92],"6-46-16":[5.41,41.06],"6-46-17":[-3.66,21.16],"6-46-18":[-11.78,10.12],"6-46-19":[-24.71,1.96],"6-46-20":[-35.15,-2.52],"6-46-21":[-46.25,-7.81],"6-46-22":[-53.6,-12.92],"6-46-23":[-62.78,-17.62],"6-46-24":[-68.86,-22.4],"6-46-25":[-75.75,-26.93],"6-46-26":[-82.25,-30.53],"6-46-27":[-86.6,-34.57],"6-46-28":[-87.21,-38.79],"6-46-29":[-85.59,-35.95],"6-46-30":[-76.08,-28.51],"6-46-31":[-60.98,35.72],"6-46-32":[-80.07,69.74],"6-46-33":[-95.49,521.39],"6-46-34":[51.02,882.74],"6-46-35":[105.36,737.91],"6-46-36":[127.52,1154.07],"6-46-37":[227.19,1475.44],"6-46-38":[312.64,1034.42],"6-46-39":[301.73,1075.16],"6-46-40":[-51.68,1855.39],"6-46-41":[-37.26,1825.17],"6-46-42":[-24.64,1827.75],"6-46-43":[-6.23,13.98],"6-46-44":[-9.69,10.93],"6-46-45":[-8.47,-0.7],"6-46-46":[-8.58,-1.87],"6-46-47":[-7.32,-2.14],"6-46-48":[-8.38,-2.22],"6-46-49":[-4.74,9.5],"6-46-50":[1.02,14.82],"6-46-51":[8.24,36.85],"6-46-52":[18.32,40.45],"6-46-53":[18.15,42.54],"6-46-54":[13.5,40.62],"6-46-55":[8,27.69],"6-46-56":[-0.82,15.99],"6-46-57":[-4.02,0.15],"6-46-58":[-20.54,-1.51],"6-46-59":[-34.25,437.71],"6-46-60":[-50.27,631.96],"6-46-61":[-48.16,1965.25],"6-46-62":[1373.28,2268.09],"6-46-63":[-29.54,2745.48],"6-47-0":[13.6,37.99],"6-47-1":[19.55,47.53],"5-23-0":[13.6,47.53],"6-47-2":[20.29,700.91],"6-47-3":[443.21,2373.94],"5-23-1":[19.83,2373.94],"4-11-0":[13.6,2373.94],"6-47-4":[2285.5,2625.24],"6-47-5":[2286.78,2882.05],"5-23-2":[1860.54,2882.05],"6-47-6":[1707.24,2840.8],"6-47-7":[1101.27,2476.32],"5-23-3":[26.42,2840.8],"4-11-1":[22.92,2882.05],"3-5-0":[0.08,2882.05],"6-47-8":[1301.32,2769.8],"6-47-9":[1356.57,2769.95],"5-23-4":[29.48,2769.95],"6-47-10":[33.06,2452.69],"6-47-11":[31.62,81.26],"5-23-5":[24.84,2452.69],"4-11-2":[7.84,2769.95],"6-47-12":[29.54,78.26],"6-47-13":[24.7,72.82],"5-23-6":[21.59,78.26],"6-47-14":[23.65,69.47],"6-47-15":[21.38,70.1],"5-23-7":[15.17,70.1],"4-11-3":[-20.3,577.05],"3-5-1":[-62.23,2769.95],"2-2-0":[-97.86,2882.05],"6-47-16":[13.6,55.71],"6-47-17":[5.96,40.64],"5-23-8":[-3.66,55.71],"6-47-18":[1.95,29.54],"6-47-19":[-2.64,22.06],"5-23-9":[-24.71,29.54],"4-11-4":[-56.94,55.71],"6-47-20":[-11.83,15.19],"6-47-21":[-23.15,4.78],"5-23-10":[-46.25,15.19],"6-47-22":[-31.32,-2.17],"6-47-23":[-42.51,-7.52],"5-23-11":[-62.78,-2.17],"4-11-5":[-89.27,15.19],"3-5-2":[-105.57,269.07],"6-47-24":[-50.68,-13.69],"6-47-25":[-59.08,-19.14],"5-23-12":[-75.75,-13.69],"6-47-26":[-65.46,-24.58],"6-47-27":[-76.9,-25.66],"5-23-13":[-86.6,-24.58],"4-11-6":[-98.96,-13.69],"6-47-28":[-76.9,-30.33],"6-47-29":[-77.77,-32.04],"5-23-14":[-87.21,-30.33],"6-47-30":[-72.57,-28.65],"6-47-31":[-64.4,-23.15],"5-23-15":[-76.08,35.72],"4-11-7":[-95.18,1030.82],"3-5-3":[-149.21,2826.62],"2-2-1":[-328.06,5809.48],"6-47-32":[-64.98,198.92],"6-47-33":[-52.12,442.32],"5-23-16":[-95.49,521.39],"6-47-34":[64.01,663.07],"6-47-35":[165.38,868.81],"5-23-17":[51.02,882.74],"4-11-8":[-95.49,882.74],"6-47-36":[242.55,1657.87],"6-47-37":[397.4,1576.13],"5-23-18":[127.52,1657.87],"6-47-38":[443.95,1269.93],"6-47-39":[482.05,2353.32],"5-23-19":[301.73,2353.32],"4-11-9":[86.09,2353.32],"3-5-4":[-95.49,6050.05],"6-47-40":[-47.11,2413.32],"6-47-41":[-19.83,2.39],"5-23-20":[-51.68,2413.32],"6-47-42":[-16.52,2.77],"6-47-43":[-15,-2.9],"5-23-21":[-24.64,1827.75],"4-11-10":[-51.68,2413.32],"6-47-44":[-12.7,-3.31],"6-47-45":[-12.43,-4],"5-23-22":[-12.7,10.93],"6-47-46":[-12.93,-3],"6-47-47":[-9.68,-2.76],"5-23-23":[-12.93,-1.87],"4-11-11":[-15.03,526.4],"3-5-5":[-102.43,6388.87],"2-2-2":[-123.53,6969.13],"6-47-48":[-7.97,-2.42],"6-47-49":[-5.09,12.36],"5-23-24":[-8.38,12.36],"6-47-50":[0.94,19.2],"6-47-51":[9.93,36.67],"5-23-25":[0.94,36.85],"4-11-12":[-8.38,37.14],"6-47-52":[18.32,42.39],"6-47-53":[18.15,853.58],"5-23-26":[18.15,853.58],"6-47-54":[14.52,46.03],"6-47-55":[8,29.24],"5-23-27":[8,46.03],"4-11-13":[7.53,1523.88],"3-5-6":[-32.01,2255.29],"6-47-56":[0.14,16.45],"6-47-57":[-4.25,0.82],"5-23-28":[-4.25,16.45],"6-47-58":[-18.57,-1.51],"6-47-59":[-29.56,457.63],"5-23-29":[-34.25,457.63],"4-11-14":[-35.85,457.63],"6-47-60":[-47.37,731.02],"6-47-61":[-47.53,1373.29],"5-23-30":[-50.27,1965.25],"6-47-62":[1353.9,2263.16],"6-47-63":[-29.54,2745.98],"5-23-31":[-29.54,2745.98],"4-11-15":[-51.02,2745.98],"3-5-7":[-53.09,2890.49],"2-2-3":[-269.44,4721.94],"6-48-0":[13.6,37.61],"6-48-1":[19.52,48.06],"6-48-2":[23.04,949.4],"6-48-3":[418.15,2469.75],"6-48-4":[2373.93,2812.59],"6-48-5":[2625.23,3024.06],"6-48-6":[2476.31,3047.68],"6-48-7":[2357.41,2826.07],"6-48-8":[1710.88,2785.17],"6-48-9":[45.47,2833.9],"6-48-10":[-226.59,2803.26],"6-48-11":[39.09,92.57],"6-48-12":[36.79,90.15],"6-48-13":[33.05,85.22],"6-48-14":[32.05,78.86],"6-48-15":[27.85,72.39],"6-48-16":[21.23,65.89],"6-48-17":[15.6,54.55],"6-48-18":[11.42,45.38],"6-48-19":[8.36,39.31],"6-48-20":[2.88,32.2],"6-48-21":[-3.8,23.36],"6-48-22":[-13.7,10.3],"6-48-23":[-26.69,-1.49],"6-48-24":[-36.66,-9.03],"6-48-25":[-48.75,-14.66],"6-48-26":[-52.31,-19.6],"6-48-27":[-60.66,-21.73],"6-48-28":[-65.09,-22.59],"6-48-29":[-65.14,-24.57],"6-48-30":[-64.07,-23.02],"6-48-31":[-58.56,-22.33],"6-48-32":[-70.5,80.25],"6-48-33":[-60.53,366.28],"6-48-34":[46.82,588.21],"6-48-35":[175.94,1298.57],"6-48-36":[374.95,1756.49],"6-48-37":[264.86,1788.77],"6-48-38":[158.3,2047.81],"6-48-39":[-0.94,2789.25],"6-48-40":[-170.49,2060.99],"6-48-41":[-22.35,-6.95],"6-48-42":[-21.25,-7.27],"6-48-43":[-16.43,-5.74],"6-48-44":[-15.08,-5.85],"6-48-45":[-14.74,-5.73],"6-48-46":[-15.44,-5.21],"6-48-47":[-14.07,-3.49],"6-48-48":[-9.34,-1.35],"6-48-49":[-3.65,16.97],"6-48-50":[3.91,17.53],"6-48-51":[9.5,35.69],"6-48-52":[17.4,41.28],"6-48-53":[19.29,277.84],"6-48-54":[14.49,46.03],"6-48-55":[8.34,28.56],"6-48-56":[0.81,16.97],"6-48-57":[-6.67,1.37],"6-48-58":[-16.22,-2.35],"6-48-59":[-31.72,213.73],"6-48-60":[-45.8,701.38],"6-48-61":[-47.53,1548.87],"6-48-62":[1362.57,2265.71],"6-48-63":[-29.54,2746.48],"6-49-0":[13.6,37.46],"6-49-1":[19.53,48.73],"5-24-0":[13.6,48.73],"6-49-2":[24.05,1459.96],"6-49-3":[919.34,2462.17],"5-24-1":[23.04,2469.75],"6-49-4":[2354.99,2812.59],"6-49-5":[2629.11,3141.21],"5-24-2":[2354.99,3141.21],"6-49-6":[2784.52,3182.09],"6-49-7":[2634.56,3042.62],"5-24-3":[2357.41,3182.09],"6-49-8":[44.4,2652.87],"6-49-9":[44.54,2012.55],"5-24-4":[44.4,2833.9],"6-49-10":[46.28,334.77],"6-49-11":[44.97,101.28],"5-24-5":[-226.59,2803.26],"6-49-12":[43.91,102],"6-49-13":[40.13,98.24],"5-24-6":[33.05,102],"6-49-14":[36.75,93.09],"6-49-15":[33.71,86.06],"5-24-7":[27.85,93.09],"6-49-16":[28.95,81.48],"6-49-17":[23.81,73.88],"5-24-8":[15.6,81.48],"6-49-18":[21.4,66.2],"6-49-19":[17.36,60.53],"5-24-9":[8.36,66.2],"6-49-20":[13.7,55.5],"6-49-21":[5.84,39.04],"5-24-10":[-3.8,55.5],"6-49-22":[-1.5,22.35],"6-49-23":[-16.89,4.59],"5-24-11":[-26.69,22.35],"6-49-24":[-26.78,-4.39],"6-49-25":[-37.71,-9.55],"5-24-12":[-48.75,-4.39],"6-49-26":[-42.33,-13.76],"6-49-27":[-43.85,-16.48],"5-24-13":[-60.66,-13.76],"6-49-28":[-45.31,-15.23],"6-49-29":[-49.21,-15.42],"5-24-14":[-65.14,-15.23],"6-49-30":[-47.15,-16.29],"6-49-31":[-46.81,-15.86],"5-24-15":[-64.07,-15.86],"6-49-32":[-46.81,79.72],"6-49-33":[-74.23,1125.05],"5-24-16":[-74.23,1125.05],"6-49-34":[53.15,966.21],"6-49-35":[149.22,1272.47],"5-24-17":[46.82,1298.57],"6-49-36":[99.05,2017.31],"6-49-37":[0.38,1423.16],"5-24-18":[0.38,2017.31],"6-49-38":[-51.4,1567.33],"6-49-39":[-41.56,2863.35],"5-24-19":[-51.4,2863.35],"6-49-40":[-24.02,694.74],"6-49-41":[-23.57,-9.82],"5-24-20":[-170.49,2060.99],"6-49-42":[-21.49,-7.66],"6-49-43":[-17.46,-7.18],"5-24-21":[-21.49,-5.74],"6-49-44":[-15.24,-6.72],"6-49-45":[-14.63,-6.41],"5-24-22":[-15.24,-5.73],"6-49-46":[-15.67,-6.33],"6-49-47":[-14.71,-4.79],"5-24-23":[-15.67,-3.49],"6-49-48":[-10.04,-0.71],"6-49-49":[-1.58,15],"5-24-24":[-10.04,16.97],"6-49-50":[3.4,15.14],"6-49-51":[6.24,37.34],"5-24-25":[3.4,37.34],"6-49-52":[17.4,40.03],"6-49-53":[19.24,44.9],"5-24-26":[17.4,277.84],"6-49-54":[14.63,42.23],"6-49-55":[8.34,28.46],"5-24-27":[8.34,46.03],"6-49-56":[1.36,16.69],"6-49-57":[-9.07,1.88],"5-24-28":[-9.07,16.97],"6-49-58":[-13.8,-3.51],"6-49-59":[-31.95,-7.78],"5-24-29":[-31.95,213.73],"6-49-60":[-42.5,467.1],"6-49-61":[-22.1,1679.35],"5-24-30":[-47.53,1679.35],"6-49-62":[1548.86,2265.71],"6-49-63":[-29.54,2746.48],"5-24-31":[-29.54,2746.48],"6-50-0":[13.6,37.63],"6-50-1":[19.61,49.96],"6-50-2":[24.84,1457.67],"6-50-3":[1097.61,2355],"6-50-4":[2249.23,2629.12],"6-50-5":[2558.1,3200.74],"6-50-6":[3042.61,3253.39],"6-50-7":[2639.66,3209.33],"6-50-8":[45.07,3108.37],"6-50-9":[45.74,106.81],"6-50-10":[49.27,105.78],"6-50-11":[49.5,111.91],"6-50-12":[49.85,112.69],"6-50-13":[46.54,108.32],"6-50-14":[43.24,103.27],"6-50-15":[40.73,96.8],"6-50-16":[37.48,93],"6-50-17":[33.1,87.83],"6-50-18":[30.85,80.4],"6-50-19":[27.75,76.44],"6-50-20":[20.59,68.85],"6-50-21":[12.03,47.85],"6-50-22":[3.31,31.01],"6-50-23":[-8.2,12.45],"6-50-24":[-17.97,2.19],"6-50-25":[-27.35,-2.98],"6-50-26":[-32.47,-5.75],"6-50-27":[-35.27,-10.36],"6-50-28":[-34.69,-9.18],"6-50-29":[-34.54,-8.11],"6-50-30":[-34.03,-8.32],"6-50-31":[-34.84,-8.32],"6-50-32":[-34.84,-10.92],"6-50-33":[-44.76,1106.52],"6-50-34":[4.53,1190.32],"6-50-35":[-49.15,1083.8],"6-50-36":[-42.94,626.82],"6-50-37":[-28.08,986.18],"6-50-38":[-23.73,124.34],"6-50-39":[-23.06,-5.86],"6-50-40":[-23.22,-8.26],"6-50-41":[-22.24,-6.03],"6-50-42":[-20.02,-1.95],"6-50-43":[-15.06,-2.36],"6-50-44":[-14.73,-4.64],"6-50-45":[-13.41,-4.06],"6-50-46":[-13.54,-3.83],"6-50-47":[-13.35,-3.1],"6-50-48":[-9.2,0.55],"6-50-49":[-0.72,12.98],"6-50-50":[2.9,23.35],"6-50-51":[-44.49,2738.7],"6-50-52":[19.49,41.64],"6-50-53":[20.4,44],"6-50-54":[14.13,41.06],"6-50-55":[7.93,28.3],"6-50-56":[1.73,16.49],"6-50-57":[-9.57,2.54],"6-50-58":[-12.44,-2.31],"6-50-59":[-30.93,-7.27],"6-50-60":[-38.74,776.2],"6-50-61":[467.09,1715.15],"6-50-62":[1679.34,2262.46],"6-50-63":[-29.54,2746.48],"6-51-0":[13.6,37.87],"6-51-1":[19.71,51.91],"5-25-0":[13.6,51.91],"6-51-2":[25.09,1225.55],"6-51-3":[563.18,2251.74],"5-25-1":[24.84,2355],"4-12-0":[13.6,2469.75],"6-51-4":[2064.18,2558.11],"6-51-5":[2479.15,3116.18],"5-25-2":[2064.18,3200.74],"6-51-6":[2863.3,3190.72],"6-51-7":[842.84,3318.44],"5-25-3":[842.84,3318.44],"4-12-1":[842.84,3318.44],"6-51-8":[51.79,2952.11],"6-51-9":[51.81,111.55],"5-25-4":[45.07,3108.37],"6-51-10":[52.28,118.01],"6-51-11":[54.03,122.71],"5-25-5":[49.27,122.71],"4-12-2":[-226.59,3108.37],"6-51-12":[56.06,122.31],"6-51-13":[52.06,118.71],"5-25-6":[46.54,122.31],"6-51-14":[49.47,113.3],"6-51-15":[47.29,108.7],"5-25-7":[40.73,113.3],"4-12-3":[27.85,122.31],"6-51-16":[45.13,107.59],"6-51-17":[41.29,102.26],"5-25-8":[33.1,107.59],"6-51-18":[39.59,98.78],"6-51-19":[34.86,94.27],"5-25-9":[27.75,98.78],"4-12-4":[8.36,107.59],"6-51-20":[25.6,77.17],"6-51-21":[16.22,56.25],"5-25-10":[12.03,77.17],"6-51-22":[7.85,41.92],"6-51-23":[2.04,22.97],"5-25-11":[-8.2,41.92],"4-12-5":[-26.69,77.17],"6-51-24":[-2.99,19.11],"6-51-25":[-9.54,11.37],"5-25-12":[-27.35,19.11],"6-51-26":[-18.24,4.22],"6-51-27":[-22.86,-3.86],"5-25-13":[-35.27,4.22],"4-12-6":[-60.66,19.11],"6-51-28":[-21.86,-3.45],"6-51-29":[-16.16,0.32],"5-25-14":[-34.69,0.32],"6-51-30":[-15.02,0.32],"6-51-31":[-23.52,-1.06],"5-25-15":[-34.84,0.32],"4-12-7":[-65.14,0.32],"6-51-32":[-24.99,-5.27],"6-51-33":[-25.2,315.67],"5-25-16":[-44.76,1106.52],"6-51-34":[-43.64,1194.05],"6-51-35":[-34.81,1027.17],"5-25-17":[-49.15,1194.05],"4-12-8":[-74.23,1298.57],"6-51-36":[-25.89,-9.5],"6-51-37":[-26.03,-8.12],"5-25-18":[-42.94,986.18],"6-51-38":[-21.09,-6.58],"6-51-39":[-20.12,-3.54],"5-25-19":[-23.73,124.34],"4-12-9":[-51.4,2863.35],"6-51-40":[-17.91,-6.14],"6-51-41":[-15.72,-2.7],"5-25-20":[-23.22,-2.7],"6-51-42":[-11.25,4.88],"6-51-43":[-8.51,4.82],"5-25-21":[-20.02,4.88],"4-12-10":[-170.49,2060.99],"6-51-44":[-8.8,-0.42],"6-51-45":[-8.93,-0.49],"5-25-22":[-14.73,-0.42],"6-51-46":[-7.5,-0.3],"6-51-47":[-7.21,0.52],"5-25-23":[-13.54,0.52],"4-12-11":[-15.67,0.52],"6-51-48":[-5.84,5.1],"6-51-49":[0.54,16.37],"5-25-24":[-9.2,16.37],"6-51-50":[6.57,28.17],"6-51-51":[0.07,2916.19],"5-25-25":[-44.49,2916.19],"4-12-12":[-44.49,2916.19],"6-51-52":[19.49,44.42],"6-51-53":[20.67,45.57],"5-25-26":[19.49,45.57],"6-51-54":[13.2,41.85],"6-51-55":[7.93,27.24],"5-25-27":[7.93,41.85],"4-12-13":[7.93,277.84],"6-51-56":[1.43,15.82],"6-51-57":[-8.96,2.59],"5-25-28":[-9.57,16.49],"6-51-58":[-10.69,-0.69],"6-51-59":[-26.21,682.83],"5-25-29":[-30.93,682.83],"4-12-14":[-31.95,682.83],"6-51-60":[-38.69,818.98],"6-51-61":[776.19,1785.3],"5-25-30":[-38.74,1785.3],"6-51-62":[1715.14,2257.85],"6-51-63":[-29.54,2746.48],"5-25-31":[-29.54,2746.48],"4-12-15":[-47.53,2746.48],"6-52-0":[13.6,38],"6-52-1":[19.75,52.83],"6-52-2":[26.3,1141.68],"6-52-3":[39.31,2076.74],"6-52-4":[1811.24,2521.51],"6-52-5":[2242.7,2887.36],"6-52-6":[2056.01,3023.83],"6-52-7":[55.87,3002.57],"6-52-8":[54.97,1206.68],"6-52-9":[54.3,120.01],"6-52-10":[55.78,125.87],"6-52-11":[59.31,126.28],"6-52-12":[59.58,122.56],"6-52-13":[56.65,121.98],"6-52-14":[54.49,120.69],"6-52-15":[53.73,118.59],"6-52-16":[51.45,117.92],"6-52-17":[49.39,956.08],"6-52-18":[47.13,292.1],"6-52-19":[38.59,98.45],"6-52-20":[29.29,80.32],"6-52-21":[22.35,62.32],"6-52-22":[12.18,49.65],"6-52-23":[9.78,32.21],"6-52-24":[6.18,30.74],"6-52-25":[2.46,27.03],"6-52-26":[-6.88,18.42],"6-52-27":[-11.61,3.79],"6-52-28":[-11.61,1.81],"6-52-29":[-6.04,9.77],"6-52-30":[-1.63,10.1],"6-52-31":[-11.81,9.72],"6-52-32":[-15.72,1.12],"6-52-33":[-24.61,236.48],"6-52-34":[-22.93,-6.99],"6-52-35":[-23.03,-9.64],"6-52-36":[-21.93,-7.29],"6-52-37":[-18.49,-6.71],"6-52-38":[-16.29,-5.18],"6-52-39":[-15.68,-4.33],"6-52-40":[-15.61,-5.17],"6-52-41":[-11.29,0.3],"6-52-42":[-4.72,5.27],"6-52-43":[-1.14,6.16],"6-52-44":[-1.59,8.81],"6-52-45":[-1.75,7.35],"6-52-46":[-1.79,8.03],"6-52-47":[-1.07,9.11],"6-52-48":[0.32,11.62],"6-52-49":[3.14,20.83],"6-52-50":[10.63,31.49],"6-52-51":[8.47,44.15],"6-52-52":[20.98,48.11],"6-52-53":[20.05,47.57],"6-52-54":[12.4,39.99],"6-52-55":[6.84,24.84],"6-52-56":[1.3,15.07],"6-52-57":[-6.52,2.36],"6-52-58":[-10.53,-0.06],"6-52-59":[-21.87,1124.55],"6-52-60":[-37.76,910.74],"6-52-61":[818.39,1887.29],"6-52-62":[1785.29,2271.2],"6-52-63":[-29.54,2746.48],"6-53-0":[13.6,38.04],"6-53-1":[19.67,53.58],"5-26-0":[13.6,53.58],"6-53-2":[26.45,988.3],"6-53-3":[357.17,1866.38],"5-26-1":[26.3,2076.74],"6-53-4":[1590.54,2511.91],"6-53-5":[1504.88,2633.93],"5-26-2":[1504.88,2887.36],"6-53-6":[50.54,2633.93],"6-53-7":[54.99,3982.86],"5-26-3":[50.54,3982.86],"6-53-8":[57.33,121.21],"6-53-9":[57.33,128.08],"5-26-4":[54.3,1206.68],"6-53-10":[60.52,129.5],"6-53-11":[60.77,127.45],"5-26-5":[55.78,129.5],"6-53-12":[59.99,122.28],"6-53-13":[59.83,127.23],"5-26-6":[56.65,127.23],"6-53-14":[60.04,129.8],"6-53-15":[59.64,129.69],"5-26-7":[53.73,129.8],"6-53-16":[58.28,129.28],"6-53-17":[56.51,123.07],"5-26-8":[49.39,956.08],"6-53-18":[49.22,2346.09],"6-53-19":[40.38,100.63],"5-26-9":[38.59,2346.09],"6-53-20":[31.82,83.95],"6-53-21":[25.24,69.72],"5-26-10":[22.35,83.95],"6-53-22":[17.36,52.25],"6-53-23":[15.16,40.62],"5-26-11":[9.78,52.25],"6-53-24":[15.01,37.08],"6-53-25":[10.17,36.9],"5-26-12":[2.46,37.08],"6-53-26":[3.36,31.78],"6-53-27":[0.38,19.03],"5-26-13":[-11.61,31.78],"6-53-28":[0.23,13.16],"6-53-29":[1.8,18.26],"5-26-14":[-11.61,18.26],"6-53-30":[5.2,18.06],"6-53-31":[0.58,16.65],"5-26-15":[-11.81,18.06],"6-53-32":[-9.18,11.61],"6-53-33":[-14,-1.77],"5-26-16":[-24.61,236.48],"6-53-34":[-21.18,-5.37],"6-53-35":[-21.12,-7.87],"5-26-17":[-23.03,-5.37],"6-53-36":[-19.03,-7.1],"6-53-37":[-14.64,-6.55],"5-26-18":[-21.93,-6.55],"6-53-38":[-14.32,-5.31],"6-53-39":[-22.84,584.18],"5-26-19":[-22.84,584.18],"6-53-40":[-12.77,-3.59],"6-53-41":[-8.93,2.46],"5-26-20":[-15.61,2.46],"6-53-42":[0.26,10.35],"6-53-43":[2.82,13.56],"5-26-21":[-4.72,13.56],"6-53-44":[2.99,18.1],"6-53-45":[3.74,19.28],"5-26-22":[-1.75,19.28],"6-53-46":[4.18,19.28],"6-53-47":[4.92,20.12],"5-26-23":[-1.79,20.12],"6-53-48":[4.93,21.48],"6-53-49":[6.89,25.29],"5-26-24":[0.32,25.29],"6-53-50":[10.63,32.32],"6-53-51":[8.47,44.34],"5-26-25":[8.47,44.34],"6-53-52":[22.07,48.37],"6-53-53":[20.05,48.14],"5-26-26":[20.05,48.37],"6-53-54":[11.81,40.04],"6-53-55":[6.84,22.99],"5-26-27":[6.84,40.04],"6-53-56":[1.22,13.57],"6-53-57":[-4.92,1.98],"5-26-28":[-6.52,15.07],"6-53-58":[-10.25,-0.09],"6-53-59":[-16.53,1294.14],"5-26-29":[-21.87,1294.14],"6-53-60":[-35.54,1634.18],"6-53-61":[910.73,1960.78],"5-26-30":[-37.76,1960.78],"6-53-62":[1887.28,2301.31],"6-53-63":[-29.54,2746.48],"5-26-31":[-29.54,2746.48],"6-54-0":[13.6,38.03],"6-54-1":[19.6,54.55],"6-54-2":[26.58,989.93],"6-54-3":[31.94,1631.63],"6-54-4":[1236.12,2416.2],"6-54-5":[47.32,2217.34],"6-54-6":[48.05,2458.39],"6-54-7":[54.4,2560.61],"6-54-8":[59.36,127.95],"6-54-9":[61.22,130.4],"6-54-10":[62.35,130.18],"6-54-11":[60.84,126.55],"6-54-12":[60.65,122.78],"6-54-13":[60.63,127.15],"6-54-14":[62.98,131.06],"6-54-15":[64.62,132.17],"6-54-16":[60.84,129.76],"6-54-17":[57.33,122.83],"6-54-18":[41.12,1086.32],"6-54-19":[38.34,100.89],"6-54-20":[31.04,82.99],"6-54-21":[26.81,66.49],"6-54-22":[21.12,53.95],"6-54-23":[17.1,42.86],"6-54-24":[18.44,45.39],"6-54-25":[15.88,1434.62],"6-54-26":[10.32,41.69],"6-54-27":[7.13,30.03],"6-54-28":[6.53,22.91],"6-54-29":[6.71,23.82],"6-54-30":[8.3,22.61],"6-54-31":[6.31,20.6],"6-54-32":[-2.33,18.27],"6-54-33":[-10.41,1.49],"6-54-34":[-15.53,-1.98],"6-54-35":[-16.6,-5.32],"6-54-36":[-16.29,-6.18],"6-54-37":[-15.52,-6.1],"6-54-38":[-15.32,-6.3],"6-54-39":[-13.65,-5.14],"6-54-40":[-12.51,-0.74],"6-54-41":[-6.03,5.66],"6-54-42":[1.39,12.5],"6-54-43":[4.87,19.2],"6-54-44":[7.12,24.93],"6-54-45":[8.92,26.98],"6-54-46":[9.52,27.23],"6-54-47":[9.52,28],"6-54-48":[10.95,28.86],"6-54-49":[10.95,32.39],"6-54-50":[15.14,35.56],"6-54-51":[2.7,43.39],"6-54-52":[3.95,1349.09],"6-54-53":[10.78,1035.34],"6-54-54":[10.99,38.39],"6-54-55":[6.04,21.85],"6-54-56":[1.32,12.69],"6-54-57":[-4.19,2.98],"6-54-58":[-8.55,102.38],"6-54-59":[-11.49,1507.45],"6-54-60":[282.95,1787.39],"6-54-61":[1151.7,2012.99],"6-54-62":[1960.77,2336.23],"6-54-63":[-29.54,2746.48],"6-55-0":[13.6,37.95],"6-55-1":[19.57,55.69],"5-27-0":[13.6,55.69],"6-55-2":[26.3,766.89],"6-55-3":[31.3,1410.95],"5-27-1":[26.3,1631.63],"4-13-0":[13.6,2076.74],"6-55-4":[33.45,2030.68],"6-55-5":[42.85,2071.97],"5-27-2":[33.45,2416.2],"6-55-6":[49.24,2327.64],"6-55-7":[55.03,1988.61],"5-27-3":[48.05,2560.61],"4-13-1":[33.45,3982.86],"3-6-0":[13.6,3982.86],"6-55-8":[59.61,1471.32],"6-55-9":[64.12,194.14],"5-27-4":[59.36,1471.32],"6-55-10":[60.83,129.91],"6-55-11":[60.83,126.1],"5-27-5":[60.83,130.18],"4-13-2":[54.3,1471.32],"6-55-12":[59.88,126.1],"6-55-13":[60,126.13],"5-27-6":[59.88,127.15],"6-55-14":[62.57,129.01],"6-55-15":[62.57,131.88],"5-27-7":[62.57,132.17],"4-13-3":[53.73,132.17],"3-6-1":[-226.59,3108.37],"6-55-16":[59.45,129.91],"6-55-17":[53.56,120.26],"5-27-8":[53.56,129.91],"6-55-18":[41.9,1131.62],"6-55-19":[36.6,100.95],"5-27-9":[36.6,1131.62],"4-13-4":[36.6,2346.09],"6-55-20":[30.32,76.17],"6-55-21":[26.98,63.94],"5-27-10":[26.81,82.99],"6-55-22":[22.3,55.85],"6-55-23":[20.15,50.59],"5-27-11":[17.1,55.85],"4-13-5":[9.78,83.95],"3-6-2":[-26.69,2346.09],"6-55-24":[19.98,51.75],"6-55-25":[2.58,2003.8],"5-27-12":[2.58,2003.8],"6-55-26":[-31.78,2815.55],"6-55-27":[12.13,37.39],"5-27-13":[-31.78,2815.55],"4-13-6":[-31.78,2815.55],"6-55-28":[11.03,31.14],"6-55-29":[11.25,32.89],"5-27-14":[6.53,32.89],"6-55-30":[10.59,30.93],"6-55-31":[9.61,23.87],"5-27-15":[6.31,30.93],"4-13-7":[-11.81,32.89],"3-6-3":[-65.14,2815.55],"6-55-32":[1.48,20.71],"6-55-33":[-3.02,8.19],"5-27-16":[-10.41,20.71],"6-55-34":[-9.54,4],"6-55-35":[-12.07,-1.23],"5-27-17":[-16.6,4],"4-13-8":[-24.61,236.48],"6-55-36":[-12.66,-2.77],"6-55-37":[-14.13,-3.24],"5-27-18":[-16.29,-2.77],"6-55-38":[-14.42,-3.25],"6-55-39":[-12.99,-2.51],"5-27-19":[-15.32,-2.51],"4-13-9":[-22.84,584.18],"3-6-4":[-74.23,2863.35],"6-55-40":[-10.22,3.34],"6-55-41":[-0.75,11.75],"5-27-20":[-12.51,11.75],"6-55-42":[3.17,18.07],"6-55-43":[7.05,25.53],"5-27-21":[1.39,25.53],"4-13-10":[-15.61,25.53],"6-55-44":[9.9,32.41],"6-55-45":[13.07,35.35],"5-27-22":[7.12,35.35],"6-55-46":[13.58,36.95],"6-55-47":[13.63,36.98],"5-27-23":[9.52,36.98],"4-13-11":[-1.79,36.98],"3-6-5":[-170.49,2060.99],"6-55-48":[14.16,36.96],"6-55-49":[14.19,37.24],"5-27-24":[10.95,37.24],"6-55-50":[16.34,39.76],"6-55-51":[3.61,42.27],"5-27-25":[2.7,43.39],"4-13-12":[0.32,44.34],"6-55-52":[3.95,37.89],"6-55-53":[9.63,38.97],"5-27-26":[3.95,1349.09],"6-55-54":[10.3,35.96],"6-55-55":[6.04,20.47],"5-27-27":[6.04,38.39],"4-13-13":[3.95,1349.09],"3-6-6":[-44.49,2916.19],"6-55-56":[1.74,12.02],"6-55-57":[-4.2,3.22],"5-27-28":[-4.2,12.69],"6-55-58":[-6.28,557.2],"6-55-59":[102.37,1604.48],"5-27-29":[-11.49,1604.48],"4-13-14":[-21.87,1604.48],"6-55-60":[378.53,1737.31],"6-55-61":[1187.19,2103.65],"5-27-30":[282.95,2103.65],"6-55-62":[2012.98,2360.08],"6-55-63":[-29.54,2746.48],"5-27-31":[-29.54,2746.48],"4-13-15":[-37.76,2746.48],"3-6-7":[-47.53,2746.48],"6-56-0":[13.6,37.87],"6-56-1":[19.57,55.73],"6-56-2":[25.75,654.04],"6-56-3":[28.03,1529.13],"6-56-4":[28.03,995.54],"6-56-5":[38.36,1653.87],"6-56-6":[49.95,1002],"6-56-7":[55.4,671.1],"6-56-8":[61.97,1784.7],"6-56-9":[62.67,1475.57],"6-56-10":[60.06,128.25],"6-56-11":[60.24,126.29],"6-56-12":[59.56,126.29],"6-56-13":[59.86,126.21],"6-56-14":[61.49,126.55],"6-56-15":[60.3,127.18],"6-56-16":[56.77,126.5],"6-56-17":[50.99,117.02],"6-56-18":[43.52,106.96],"6-56-19":[36.6,92.67],"6-56-20":[32.36,81.82],"6-56-21":[27.93,72.03],"6-56-22":[25.77,65.54],"6-56-23":[23.87,64.24],"6-56-24":[23.73,52.11],"6-56-25":[24.85,53.98],"6-56-26":[18.69,52.63],"6-56-27":[15.51,44.22],"6-56-28":[15.28,40.2],"6-56-29":[15.58,37.67],"6-56-30":[12.32,36.23],"6-56-31":[11.02,26.97],"6-56-32":[4.25,25.11],"6-56-33":[2.15,15.56],"6-56-34":[-2.11,11.93],"6-56-35":[-5.35,8.47],"6-56-36":[-7.16,4.11],"6-56-37":[-7.33,0.85],"6-56-38":[-8.48,0.68],"6-56-39":[-8.31,1.89],"6-56-40":[-4.64,8.4],"6-56-41":[2.15,16.04],"6-56-42":[6.23,22.14],"6-56-43":[9.62,30.63],"6-56-44":[15.59,36.65],"6-56-45":[16.37,40.5],"6-56-46":[18.42,43.37],"6-56-47":[18.42,44.13],"6-56-48":[18.16,43.98],"6-56-49":[18.16,41.79],"6-56-50":[20.3,41.65],"6-56-51":[20.3,42.33],"6-56-52":[17.44,40.96],"6-56-53":[15.9,41.96],"6-56-54":[9.77,33.92],"6-56-55":[6.16,19.63],"6-56-56":[1.72,12.29],"6-56-57":[-2.06,3.98],"6-56-58":[-5.82,819.33],"6-56-59":[421.04,1695.38],"6-56-60":[516.59,1629.01],"6-56-61":[1285.43,2172.84],"6-56-62":[2103.64,2379.92],"6-56-63":[-29.54,2746.48],"6-57-0":[13.6,37.8],"6-57-1":[19.62,55.09],"5-28-0":[13.6,55.73],"6-57-2":[25.6,59.23],"6-57-3":[28.3,1436.69],"5-28-1":[25.6,1529.13],"6-57-4":[28.3,681.94],"6-57-5":[38.01,949.92],"5-28-2":[28.03,1653.87],"6-57-6":[51.09,115.49],"6-57-7":[57.7,126.66],"5-28-3":[49.95,1002],"6-57-8":[62.46,1937.43],"6-57-9":[60.84,2123.62],"5-28-4":[60.84,2123.62],"6-57-10":[59.7,124.91],"6-57-11":[58.97,123.99],"5-28-5":[58.97,128.25],"6-57-12":[58.91,123.99],"6-57-13":[57.13,122.5],"5-28-6":[57.13,126.29],"6-57-14":[58.08,124.14],"6-57-15":[58.53,123],"5-28-7":[58.08,127.18],"6-57-16":[54.18,119.6],"6-57-17":[49.49,110.36],"5-28-8":[49.49,126.5],"6-57-18":[43.12,101.63],"6-57-19":[40.71,95.46],"5-28-9":[36.6,106.96],"6-57-20":[36.01,1880.85],"6-57-21":[32.18,2439.69],"5-28-10":[27.93,2439.69],"6-57-22":[30.53,1522.97],"6-57-23":[25.18,68.01],"5-28-11":[23.87,1522.97],"6-57-24":[-14.49,116.51],"6-57-25":[25.65,60.59],"5-28-12":[-14.49,116.51],"6-57-26":[1.56,171.48],"6-57-27":[18.28,57.96],"5-28-13":[1.56,171.48],"6-57-28":[17.32,53.31],"6-57-29":[17.61,43.04],"5-28-14":[15.28,53.31],"6-57-30":[14.23,37.19],"6-57-31":[11.87,33.41],"5-28-15":[11.02,37.19],"6-57-32":[8.76,34.41],"6-57-33":[6.71,26.59],"5-28-16":[2.15,34.41],"6-57-34":[4.93,24.73],"6-57-35":[2.81,19.54],"5-28-17":[-5.35,24.73],"6-57-36":[0.84,14.19],"6-57-37":[0.34,10.34],"5-28-18":[-7.33,14.19],"6-57-38":[-0.06,10.45],"6-57-39":[-0.17,10.33],"5-28-19":[-8.48,10.45],"6-57-40":[1.37,15.84],"6-57-41":[5.03,21.64],"5-28-20":[-4.64,21.64],"6-57-42":[8.34,26.94],"6-57-43":[11.9,34.46],"5-28-21":[6.23,34.46],"6-57-44":[15.59,40.42],"6-57-45":[18.81,45.89],"5-28-22":[15.59,45.89],"6-57-46":[20.61,49.37],"6-57-47":[22.02,50.19],"5-28-23":[18.42,50.19],"6-57-48":[21.38,50.16],"6-57-49":[20.47,48.13],"5-28-24":[18.16,50.16],"6-57-50":[20.4,45.48],"6-57-51":[20.34,44.16],"5-28-25":[20.3,45.48],"6-57-52":[19.71,42.18],"6-57-53":[15.9,42.48],"5-28-26":[15.9,42.48],"6-57-54":[9.16,31.18],"6-57-55":[6.21,18.19],"5-28-27":[6.16,33.92],"6-57-56":[2.3,13.36],"6-57-57":[0.42,11.7],"5-28-28":[-2.06,13.36],"6-57-58":[-1.9,1093.26],"6-57-59":[819.32,1811.71],"5-28-29":[-5.82,1811.71],"6-57-60":[814.02,1663.61],"6-57-61":[1522.35,2225.4],"5-28-30":[516.59,2225.4],"6-57-62":[2172.83,2420.8],"6-57-63":[-29.54,2746.48],"5-28-31":[-29.54,2746.48],"6-58-0":[13.6,37.78],"6-58-1":[19.71,53.62],"6-58-2":[25.56,61.94],"6-58-3":[29.9,345.15],"6-58-4":[30,79.45],"6-58-5":[38.66,105.36],"6-58-6":[50.37,116.37],"6-58-7":[58.46,124.92],"6-58-8":[60.43,1885.38],"6-58-9":[60.01,2140.58],"6-58-10":[58.42,121.69],"6-58-11":[57.73,123.87],"6-58-12":[56.63,123.87],"6-58-13":[57.04,123.14],"6-58-14":[55.87,119.28],"6-58-15":[55.11,118.34],"6-58-16":[50.41,118.05],"6-58-17":[47.21,106.08],"6-58-18":[45.73,104.94],"6-58-19":[42.88,99.37],"6-58-20":[28.43,1402.2],"6-58-21":[13.23,3730.85],"6-58-22":[29.84,1980.83],"6-58-23":[-10.67,745.87],"6-58-24":[-18.64,535.71],"6-58-25":[-14.6,356.34],"6-58-26":[-1.62,135.29],"6-58-27":[-20.7,301.55],"6-58-28":[0.18,458.6],"6-58-29":[18.93,63.46],"6-58-30":[15.77,41.91],"6-58-31":[13.35,38.21],"6-58-32":[13.47,38.21],"6-58-33":[12.71,33.98],"6-58-34":[-2.23,864.67],"6-58-35":[7.45,27.57],"6-58-36":[5.05,20.06],"6-58-37":[4.98,16.73],"6-58-38":[4.46,16.62],"6-58-39":[4.41,17.65],"6-58-40":[5.55,22.04],"6-58-41":[8.28,26.07],"6-58-42":[11.11,30.34],"6-58-43":[13.85,35.77],"6-58-44":[17.65,40.21],"6-58-45":[20.04,47.1],"6-58-46":[23.2,50.18],"6-58-47":[24.78,52.72],"6-58-48":[24.35,54.26],"6-58-49":[24.35,51.82],"6-58-50":[22.38,49.92],"6-58-51":[21.5,46.02],"6-58-52":[18.45,42.72],"6-58-53":[13.3,41.86],"6-58-54":[9.11,28.68],"6-58-55":[6.73,17.29],"6-58-56":[3.08,13.48],"6-58-57":[2.25,357.87],"6-58-58":[2.48,1674.63],"6-58-59":[1093.25,1949.57],"6-58-60":[1289.31,1790.34],"6-58-61":[1663.6,2289.94],"6-58-62":[2225.39,2460.86],"6-58-63":[-29.54,2746.48],"6-59-0":[13.6,37.79],"6-59-1":[19.8,52.18],"5-29-0":[13.6,53.62],"6-59-2":[25.75,63.75],"6-59-3":[30.49,64.24],"5-29-1":[25.56,345.15],"4-14-0":[13.6,1529.13],"6-59-4":[30.51,84.68],"6-59-5":[41.87,100.49],"5-29-2":[30,105.36],"6-59-6":[50.16,115.8],"6-59-7":[56.81,119.95],"5-29-3":[50.16,124.92],"4-14-1":[28.03,1653.87],"6-59-8":[57.71,1189.75],"6-59-9":[59.83,125.87],"5-29-4":[57.71,2140.58],"6-59-10":[55.41,120.74],"6-59-11":[54.59,121.48],"5-29-5":[54.59,123.87],"4-14-2":[54.59,2140.58],"6-59-12":[54.73,121.88],"6-59-13":[57.85,123],"5-29-6":[54.73,123.87],"6-59-14":[52.82,118.25],"6-59-15":[49.92,112.43],"5-29-7":[49.92,119.28],"4-14-3":[49.92,127.18],"6-59-16":[47.92,112.43],"6-59-17":[45.53,102.32],"5-29-8":[45.53,118.05],"6-59-18":[43.5,103.1],"6-59-19":[40.18,98.54],"5-29-9":[40.18,104.94],"4-14-4":[36.6,126.5],"6-59-20":[40.18,88.87],"6-59-21":[34.44,731.97],"5-29-10":[13.23,3730.85],"6-59-22":[-35.01,609.23],"6-59-23":[182.63,951.26],"5-29-11":[-35.01,1980.83],"4-14-5":[-35.01,3730.85],"6-59-24":[63.41,838.62],"6-59-25":[2.52,699.41],"5-29-12":[-18.64,838.62],"6-59-26":[4.84,480.98],"6-59-27":[22.18,1567.34],"5-29-13":[-20.7,1567.34],"4-14-6":[-20.7,1567.34],"6-59-28":[-24.77,1463.87],"6-59-29":[1.22,935.28],"5-29-14":[-24.77,1463.87],"6-59-30":[17.76,49.38],"6-59-31":[15.91,40.51],"5-29-15":[13.35,49.38],"4-14-7":[-24.77,1463.87],"6-59-32":[17.61,40.61],"6-59-33":[15.36,39.26],"5-29-16":[12.71,40.61],"6-59-34":[13.68,36.87],"6-59-35":[10.36,29.33],"5-29-17":[-2.23,864.67],"4-14-8":[-5.35,864.67],"6-59-36":[8.78,22.54],"6-59-37":[8.23,21.11],"5-29-18":[4.98,22.54],"6-59-38":[8.08,23.26],"6-59-39":[8.16,24.61],"5-29-19":[4.41,24.61],"4-14-9":[-8.48,24.61],"6-59-40":[9.22,25.8],"6-59-41":[11.68,28.54],"5-29-20":[5.55,28.54],"6-59-42":[13.34,31.4],"6-59-43":[15.33,35.12],"5-29-21":[11.11,35.77],"4-14-10":[-4.64,35.77],"6-59-44":[17.37,39.98],"6-59-45":[15,2060.11],"5-29-22":[15,2060.11],"6-59-46":[22.8,50.12],"6-59-47":[24.47,52.47],"5-29-23":[22.8,52.72],"4-14-11":[15,2060.11],"6-59-48":[25.92,55.19],"6-59-49":[25.17,55.91],"5-29-24":[24.35,55.91],"6-59-50":[23.47,53.48],"6-59-51":[21.5,49.06],"5-29-25":[21.5,53.48],"4-14-12":[18.16,55.91],"6-59-52":[18.45,44.55],"6-59-53":[13.3,39.12],"5-29-26":[13.3,44.55],"6-59-54":[8.95,26.98],"6-59-55":[6.73,17.28],"5-29-27":[6.73,28.68],"4-14-13":[6.16,44.55],"6-59-56":[4.68,14.62],"6-59-57":[4.84,608.1],"5-29-28":[2.25,608.1],"6-59-58":[10.52,2647.27],"6-59-59":[1580.6,2213.91],"5-29-29":[2.48,2647.27],"4-14-14":[-5.82,2647.27],"6-59-60":[1486.82,1899.59],"6-59-61":[1790.33,2337.34],"5-29-30":[1289.31,2337.34],"6-59-62":[2289.93,2494.91],"6-59-63":[-29.54,2746.48],"5-29-31":[-29.54,2746.48],"4-14-15":[-29.54,2746.48],"6-60-0":[13.6,37.78],"6-60-1":[19.82,52.11],"6-60-2":[26.07,63.8],"6-60-3":[31.53,68.91],"6-60-4":[32.12,88.61],"6-60-5":[43.35,100.59],"6-60-6":[50.16,660.73],"6-60-7":[54.73,115.86],"6-60-8":[55.53,123.35],"6-60-9":[56.93,123.85],"6-60-10":[54.77,119.67],"6-60-11":[36.3,467.08],"6-60-12":[54.66,847.15],"6-60-13":[31.72,1061.19],"6-60-14":[50.82,118.9],"6-60-15":[46.84,106.06],"6-60-16":[46.52,848.03],"6-60-17":[45.68,934.31],"6-60-18":[43.52,948.19],"6-60-19":[36.29,97.22],"6-60-20":[36.5,3428.78],"6-60-21":[36.12,3435.16],"6-60-22":[183.32,753.26],"6-60-23":[203.99,625.45],"6-60-24":[208.98,621.86],"6-60-25":[126.64,616.33],"6-60-26":[54.15,571.22],"6-60-27":[72.56,986.01],"6-60-28":[266.59,1965.58],"6-60-29":[-0.28,1465.14],"6-60-30":[10.1,448.45],"6-60-31":[17.88,41.59],"6-60-32":[19,40.1],"6-60-33":[17.4,38.62],"6-60-34":[14.28,36.87],"6-60-35":[11.08,29.16],"6-60-36":[9.95,23.09],"6-60-37":[10.09,23.78],"6-60-38":[10.53,25.27],"6-60-39":[11.82,25.49],"6-60-40":[12.34,27.11],"6-60-41":[13.01,29.48],"6-60-42":[14.24,30.5],"6-60-43":[15.07,32.66],"6-60-44":[15.81,38.1],"6-60-45":[18.29,45.5],"6-60-46":[6.47,931.45],"6-60-47":[23.42,51.85],"6-60-48":[24.91,56.45],"6-60-49":[26.78,56.31],"6-60-50":[24.85,54.12],"6-60-51":[23.88,51.29],"6-60-52":[18.84,47.16],"6-60-53":[13.07,37.45],"6-60-54":[8.97,27.21],"6-60-55":[7.29,18.18],"6-60-56":[6.69,18.97],"6-60-57":[8.72,1445.48],"6-60-58":[608.09,2647.27],"6-60-59":[1819.4,2378.63],"6-60-60":[1773.2,2084.27],"6-60-61":[1899.58,2371.33],"6-60-62":[2337.33,2524.96],"6-60-63":[-29.54,2746.49],"6-61-0":[13.6,37.76],"6-61-1":[19.78,52.5],"5-30-0":[13.6,52.5],"6-61-2":[26.07,61.81],"6-61-3":[29.91,75.45],"5-30-1":[26.07,75.45],"6-61-4":[34.23,88.45],"6-61-5":[43.49,100.68],"5-30-2":[32.12,100.68],"6-61-6":[49.89,2067.72],"6-61-7":[51.02,110.49],"5-30-3":[49.89,2067.72],"6-61-8":[51.94,113.62],"6-61-9":[52.94,792.85],"5-30-4":[51.94,792.85],"6-61-10":[54.18,472.86],"6-61-11":[40.34,998.82],"5-30-5":[36.3,998.82],"6-61-12":[47.75,911.33],"6-61-13":[45.76,978.67],"5-30-6":[31.72,1061.19],"6-61-14":[51.83,275.17],"6-61-15":[44.76,105.85],"5-30-7":[44.76,275.17],"6-61-16":[42.99,2441.8],"6-61-17":[63.03,2479.29],"5-30-8":[42.99,2479.29],"6-61-18":[21.6,1153.69],"6-61-19":[35.43,1045.54],"5-30-9":[21.6,1153.69],"6-61-20":[43.2,3969.25],"6-61-21":[321.36,3240.15],"5-30-10":[36.12,3969.25],"6-61-22":[327.42,538.03],"6-61-23":[228.84,581.24],"5-30-11":[183.32,753.26],"6-61-24":[207.9,518.07],"6-61-25":[135.48,456.49],"5-30-12":[126.64,621.86],"6-61-26":[189.7,487.98],"6-61-27":[282.45,725.34],"5-30-13":[54.15,986.01],"6-61-28":[245.42,1263.81],"6-61-29":[98.59,1793.46],"5-30-14":[-0.28,1965.58],"6-61-30":[9.64,563.59],"6-61-31":[17.84,40.64],"5-30-15":[9.64,563.59],"6-61-32":[18.11,39.27],"6-61-33":[16.27,37.52],"5-30-16":[16.27,40.1],"6-61-34":[14.28,34.25],"6-61-35":[11.71,28.84],"5-30-17":[11.08,36.87],"6-61-36":[11.3,28.82],"6-61-37":[-99.67,814.4],"5-30-18":[-99.67,814.4],"6-61-38":[11.9,26.07],"6-61-39":[12.45,26.9],"5-30-19":[10.53,26.9],"6-61-40":[12.64,30.04],"6-61-41":[13.85,32.62],"5-30-20":[12.34,32.62],"6-61-42":[14.87,32.51],"6-61-43":[15.14,33.46],"5-30-21":[14.24,33.46],"6-61-44":[15.81,36.25],"6-61-45":[17.74,44.2],"5-30-22":[15.81,45.5],"6-61-46":[21.26,47.29],"6-61-47":[22.24,50.55],"5-30-23":[6.47,931.45],"6-61-48":[24.62,53.23],"6-61-49":[25.06,55.27],"5-30-24":[24.62,56.45],"6-61-50":[26.01,56.2],"6-61-51":[23.88,54.1],"5-30-25":[23.88,56.2],"6-61-52":[17.85,50.82],"6-61-53":[13.07,35.17],"5-30-26":[13.07,50.82],"6-61-54":[9.42,26.81],"6-61-55":[7.57,20.65],"5-30-27":[7.29,27.21],"6-61-56":[7.48,20.76],"6-61-57":[10.04,2119.03],"5-30-28":[6.69,2119.03],"6-61-58":[1445.47,2720.05],"6-61-59":[2045.49,2519.15],"5-30-29":[608.09,2720.05],"6-61-60":[1905.59,2242.55],"6-61-61":[1958.12,2404.88],"5-30-30":[1773.2,2404.88],"6-61-62":[2371.32,2555.1],"6-61-63":[-29.54,2747.47],"5-30-31":[-29.54,2747.47],"6-62-0":[13.6,37.73],"6-62-1":[19.73,53.01],"6-62-2":[26.54,59.25],"6-62-3":[28.63,75.62],"6-62-4":[36.2,85.28],"6-62-5":[42.31,99.8],"6-62-6":[49.28,108.11],"6-62-7":[49.78,103.88],"6-62-8":[50.57,107.83],"6-62-9":[49.7,111.74],"6-62-10":[49.66,298.22],"6-62-11":[49.96,1388.09],"6-62-12":[41.71,1035.94],"6-62-13":[45.89,1109.06],"6-62-14":[20.27,639.9],"6-62-15":[44.39,219.03],"6-62-16":[32.45,2687.22],"6-62-17":[297.06,2577.79],"6-62-18":[44.23,3501.33],"6-62-19":[32.49,2419.81],"6-62-20":[632.45,3718.38],"6-62-21":[368.61,1721.06],"6-62-22":[218.45,696.4],"6-62-23":[131.07,471.46],"6-62-24":[138.86,407.06],"6-62-25":[256.95,487.53],"6-62-26":[239.52,1006.14],"6-62-27":[249.3,631.61],"6-62-28":[194.06,789.75],"6-62-29":[15.13,766.66],"6-62-30":[-46.15,332.62],"6-62-31":[17.31,38.68],"6-62-32":[17.52,38.48],"6-62-33":[15.74,36.14],"6-62-34":[14.55,33.16],"6-62-35":[12.03,28.93],"6-62-36":[12.1,28.82],"6-62-37":[12.83,26.82],"6-62-38":[12.65,28.5],"6-62-39":[13.05,31.28],"6-62-40":[13.65,34.28],"6-62-41":[15.43,36.13],"6-62-42":[16.17,36.67],"6-62-43":[16.17,37.77],"6-62-44":[16.2,37.77],"6-62-45":[16.2,40.32],"6-62-46":[17.78,44.64],"6-62-47":[19.75,49.26],"6-62-48":[22.32,50.13],"6-62-49":[23.73,54.94],"6-62-50":[26.51,56.37],"6-62-51":[24.74,55.65],"6-62-52":[17.74,50.79],"6-62-53":[13.06,33.87],"6-62-54":[10.42,25.96],"6-62-55":[9.91,22.36],"6-62-56":[8.78,20.96],"6-62-57":[10.28,2479.23],"6-62-58":[1813.36,2850.41],"6-62-59":[2242.54,2618.27],"6-62-60":[1991.4,2314.66],"6-62-61":[1993.14,2457.95],"6-62-62":[2404.87,2581.14],"6-62-63":[-29.54,2749.47],"6-63-0":[13.6,37.73],"6-63-1":[19.72,53.59],"5-31-0":[13.6,53.59],"6-63-2":[26.54,62.24],"6-63-3":[28.85,73.73],"5-31-1":[26.54,75.62],"4-15-0":[13.6,75.62],"6-63-4":[35.88,86.28],"6-63-5":[42.26,98.34],"5-31-2":[35.88,99.8],"6-63-6":[48.49,104.24],"6-63-7":[48.27,101.1],"5-31-3":[48.27,108.11],"4-15-1":[32.12,2067.72],"3-7-0":[13.6,2067.72],"6-63-8":[48.82,103.66],"6-63-9":[48.93,103.55],"5-31-4":[48.82,111.74],"6-63-10":[46.96,500.18],"6-63-11":[46.68,821.88],"5-31-5":[46.68,1388.09],"4-15-2":[36.3,1388.09],"6-63-12":[-1.23,942.82],"6-63-13":[5.01,686.85],"5-31-6":[-1.23,1109.06],"6-63-14":[29.66,466.81],"6-63-15":[17.32,332.21],"5-31-7":[17.32,639.9],"4-15-3":[-1.23,1109.06],"3-7-1":[-1.23,2140.58],"2-3-0":[-226.59,3982.86],"6-63-16":[16.62,3299.64],"6-63-17":[40.73,2357.66],"5-31-8":[16.62,3299.64],"6-63-18":[40.99,2423.37],"6-63-19":[45.96,1802.73],"5-31-9":[32.49,3501.33],"4-15-4":[16.62,3501.33],"6-63-20":[585.28,2177.76],"6-63-21":[198.79,856.94],"5-31-10":[198.79,3718.38],"6-63-22":[154.1,519.6],"6-63-23":[95.92,407.48],"5-31-11":[95.92,696.4],"4-15-5":[36.12,3969.25],"3-7-2":[-35.01,3969.25],"6-63-24":[189.24,556.84],"6-63-25":[243.53,577.03],"5-31-12":[138.86,577.03],"6-63-26":[242.09,1303.84],"6-63-27":[216.62,572.26],"5-31-13":[216.62,1303.84],"4-15-6":[54.15,1303.84],"6-63-28":[63.8,555.42],"6-63-29":[21.37,874.92],"5-31-14":[15.13,874.92],"6-63-30":[-6.39,370.77],"6-63-31":[16.48,36.2],"5-31-15":[-46.15,370.77],"4-15-7":[-46.15,1965.58],"3-7-3":[-46.15,1965.58],"2-3-1":[-65.14,3969.25],"1-1-0":[-328.06,5809.48],"6-63-32":[17.15,36.78],"6-63-33":[16.29,37.08],"5-31-16":[15.74,38.48],"6-63-34":[12.34,34.98],"6-63-35":[10.7,28.64],"5-31-17":[10.7,34.98],"4-15-8":[10.7,40.1],"6-63-36":[11.05,26.16],"6-63-37":[12.72,29.22],"5-31-18":[11.05,29.22],"6-63-38":[13.43,32.73],"6-63-39":[14.75,35.32],"5-31-19":[12.65,35.32],"4-15-9":[-99.67,814.4],"3-7-4":[-99.67,864.67],"6-63-40":[15.89,39.67],"6-63-41":[17.66,41.82],"5-31-20":[13.65,41.82],"6-63-42":[18.18,43.48],"6-63-43":[17.22,42.55],"5-31-21":[16.17,43.48],"4-15-10":[12.34,43.48],"6-63-44":[15.94,39.03],"6-63-45":[15.92,35.62],"5-31-22":[15.92,40.32],"6-63-46":[17.78,43.75],"6-63-47":[19.65,46.9],"5-31-23":[17.78,49.26],"4-15-11":[6.47,931.45],"3-7-5":[-4.64,2060.11],"2-3-2":[-170.49,2863.35],"6-63-48":[22.32,46.83],"6-63-49":[23.17,52.87],"5-31-24":[22.32,54.94],"6-63-50":[25.95,55.44],"6-63-51":[24.74,55.59],"5-31-25":[24.74,56.37],"4-15-12":[22.32,56.45],"6-63-52":[17.56,49.36],"6-63-53":[13.06,33.43],"5-31-26":[13.06,50.79],"6-63-54":[11.45,27.14],"6-63-55":[10.4,26.46],"5-31-27":[9.91,27.14],"4-15-13":[7.29,50.82],"3-7-6":[6.16,56.45],"6-63-56":[8.78,27.93],"6-63-57":[10.28,2064.74],"5-31-28":[8.78,2479.23],"6-63-58":[6.29,2924.47],"6-63-59":[-4.17,2804.3],"5-31-29":[-4.17,2924.47],"4-15-14":[-4.17,2924.47],"6-63-60":[-10.23,2430.85],"6-63-61":[-15.15,2498.87],"5-31-30":[-15.15,2498.87],"6-63-62":[-22.79,2597.05],"6-63-63":[-29.54,2749.47],"5-31-31":[-29.54,2749.47],"4-15-15":[-29.54,2749.47],"3-7-7":[-29.54,2924.47],"2-3-3":[-47.53,2924.47],"1-1-1":[-269.44,6969.13],"0-0-0":[-328.06,6969.13],"6-64-0":[13.6,37.78],"6-64-1":[19.72,53.59],"6-64-2":[26.6,62.89],"6-64-3":[31.41,76.27],"6-64-4":[36.86,86.28],"6-64-5":[42.7,96.99],"6-64-6":[47,101.29],"6-64-7":[46.73,97.64],"6-64-8":[45.83,101.59],"6-64-9":[45.04,100.52],"6-64-10":[45.18,100.56],"6-64-11":[44.21,95.58],"6-64-12":[41.57,93.35],"6-64-13":[34.37,320.14],"6-64-14":[39.88,478.36],"6-64-15":[62.72,1880.44],"6-64-16":[53.23,3439.27],"6-64-17":[36.39,2431.2],"6-64-18":[43.43,942.66],"6-64-19":[44.68,1847.74],"6-64-20":[490.98,1993.84],"6-64-21":[201.86,739.39],"6-64-22":[138.19,750.53],"6-64-23":[240.33,1166.19],"6-64-24":[334.09,962.42],"6-64-25":[276.69,863.32],"6-64-26":[184.15,556.46],"6-64-27":[168.62,439.96],"6-64-28":[61.71,880.1],"6-64-29":[-17.91,1022.44],"6-64-30":[14.82,41.3],"6-64-31":[15.22,34.38],"6-64-32":[16.21,36.77],"6-64-33":[11.49,36.62],"6-64-34":[9.51,33.23],"6-64-35":[9.43,23.73],"6-64-36":[10.62,24.95],"6-64-37":[12.53,29.78],"6-64-38":[14.73,33.26],"6-64-39":[16.29,40.92],"6-64-40":[19.97,44.49],"6-64-41":[19.97,48.03],"6-64-42":[20.9,49.27],"6-64-43":[20.23,48.27],"6-64-44":[16.76,40.95],"6-64-45":[16.76,37.18],"6-64-46":[18.63,43.85],"6-64-47":[20.07,44.45],"6-64-48":[21.17,45.85],"6-64-49":[22.33,51.91],"6-64-50":[24.99,54.93],"6-64-51":[23.66,55.36],"6-64-52":[17.25,48.1],"6-64-53":[13.73,33.44],"6-64-54":[13.39,34.01],"6-64-55":[11.02,33.97],"6-64-56":[10.25,28.87],"6-64-57":[11.81,2706.61],"6-64-58":[6.29,2970.03],"6-64-59":[-4.17,2947.12],"6-64-60":[-10.23,2543.75],"6-64-61":[-15.15,2526.16],"6-64-62":[-22.79,2618.03],"6-64-63":[-29.54,2752.45],"6-65-0":[13.6,37.81],"6-65-1":[19.76,53.09],"5-32-0":[13.6,53.59],"6-65-2":[26.31,62.46],"6-65-3":[31.01,77.1],"5-32-1":[26.31,77.1],"6-65-4":[38.18,84.8],"6-65-5":[42.64,95.66],"5-32-2":[36.86,96.99],"6-65-6":[44.99,96.88],"6-65-7":[43.49,94.7],"5-32-3":[43.49,101.29],"6-65-8":[42.8,94.18],"6-65-9":[35.63,935.72],"5-32-4":[35.63,935.72],"6-65-10":[20.82,1428.23],"6-65-11":[40.95,136.3],"5-32-5":[20.82,1428.23],"6-65-12":[36.37,88.77],"6-65-13":[-46.66,286.33],"5-32-6":[-46.66,320.14],"6-65-14":[-132.68,643.32],"6-65-15":[137.99,2274.24],"5-32-7":[-132.68,2274.24],"6-65-16":[38.05,2373.31],"6-65-17":[38.96,1377.73],"5-32-8":[36.39,3439.27],"6-65-18":[41.7,1623.57],"6-65-19":[89.48,2161.99],"5-32-9":[41.7,2161.99],"6-65-20":[100.21,941.46],"6-65-21":[185.69,739.39],"5-32-10":[100.21,1993.84],"6-65-22":[257.46,1758.12],"6-65-23":[380.48,2914.18],"5-32-11":[138.19,2914.18],"6-65-24":[426.07,1308.02],"6-65-25":[280.09,733.03],"5-32-12":[276.69,1308.02],"6-65-26":[222.19,683.02],"6-65-27":[143.28,527.99],"5-32-13":[143.28,683.02],"6-65-28":[62.64,650.86],"6-65-29":[-15.66,1095.61],"5-32-14":[-17.91,1095.61],"6-65-30":[-13.75,66.62],"6-65-31":[14.48,33.9],"5-32-15":[-13.75,66.62],"6-65-32":[-19.14,391.88],"6-65-33":[8.66,29.85],"5-32-16":[-19.14,391.88],"6-65-34":[8.35,21.97],"6-65-35":[8.94,22.61],"5-32-17":[8.35,33.23],"6-65-36":[10.62,25.98],"6-65-37":[12.58,30.79],"5-32-18":[10.62,30.79],"6-65-38":[14.93,37.7],"6-65-39":[17.15,49.91],"5-32-19":[14.73,49.91],"6-65-40":[20.87,54.91],"6-65-41":[22.64,56],"5-32-20":[19.97,56],"6-65-42":[22.51,51.03],"6-65-43":[20.23,46.2],"5-32-21":[20.23,51.03],"6-65-44":[17.99,42.51],"6-65-45":[17.84,41.99],"5-32-22":[16.76,42.51],"6-65-46":[18.63,42.48],"6-65-47":[19.73,46.07],"5-32-23":[18.63,46.07],"6-65-48":[21.17,46.4],"6-65-49":[22.33,50.98],"5-32-24":[21.17,51.91],"6-65-50":[24.64,53.8],"6-65-51":[11.85,778.86],"5-32-25":[11.85,778.86],"6-65-52":[17.24,47.71],"6-65-53":[14.74,34.75],"5-32-26":[13.73,48.1],"6-65-54":[14.81,35.37],"6-65-55":[11.99,34.42],"5-32-27":[11.02,35.37],"6-65-56":[10.65,29.79],"6-65-57":[13.9,3054.91],"5-32-28":[10.25,3054.91],"6-65-58":[2706.6,3100.96],"6-65-59":[2543.75,3103.71],"5-32-29":[-4.17,3103.71],"6-65-60":[2255.43,2692.57],"6-65-61":[2248.98,2548.45],"5-32-30":[-15.15,2692.57],"6-65-62":[2526.15,2639.22],"6-65-63":[-29.54,2753.44],"5-32-31":[-29.54,2753.44],"6-66-0":[13.6,37.83],"6-66-1":[19.78,52.14],"6-66-2":[25.64,63.1],"6-66-3":[31.05,77.42],"6-66-4":[38.55,84.66],"6-66-5":[41.57,92.58],"6-66-6":[43.18,93.1],"6-66-7":[40.62,90.09],"6-66-8":[40.54,87.08],"6-66-9":[20.94,2049.01],"6-66-10":[19.29,2462.53],"6-66-11":[4.23,1233.38],"6-66-12":[30.98,117],"6-66-13":[-180.54,876.36],"6-66-14":[90.73,1537.53],"6-66-15":[147.78,4840.9],"6-66-16":[39.23,4069.35],"6-66-17":[43.9,838.48],"6-66-18":[39.99,1553.78],"6-66-19":[-16.37,2250.36],"6-66-20":[30.28,336.76],"6-66-21":[186.56,611.03],"6-66-22":[377.14,1857.82],"6-66-23":[773.49,2746.4],"6-66-24":[408.81,1769.87],"6-66-25":[324.43,1672.93],"6-66-26":[317.13,774.79],"6-66-27":[281.36,874.43],"6-66-28":[46.87,1294.91],"6-66-29":[5.32,816.36],"6-66-30":[-26.99,431.08],"6-66-31":[-28.03,2007.45],"6-66-32":[7.57,607.86],"6-66-33":[6.06,24.36],"6-66-34":[7.09,17.3],"6-66-35":[8.79,26.37],"6-66-36":[11.61,28.98],"6-66-37":[13.1,31.91],"6-66-38":[15.69,39.68],"6-66-39":[19.55,50.83],"6-66-40":[22.63,56.5],"6-66-41":[24.02,57.13],"6-66-42":[22.8,49.96],"6-66-43":[22.8,49.11],"6-66-44":[20.77,46.17],"6-66-45":[20.77,46.35],"6-66-46":[21.39,48.2],"6-66-47":[21.39,49.68],"6-66-48":[23.35,51.88],"6-66-49":[23.35,52.26],"6-66-50":[25.43,54.25],"6-66-51":[21.38,55.21],"6-66-52":[17.56,44.14],"6-66-53":[17.56,39.22],"6-66-54":[17.07,39.22],"6-66-55":[14.68,33.84],"6-66-56":[12.76,30.48],"6-66-57":[13.3,3138.57],"6-66-58":[3003.04,3267.05],"6-66-59":[2692.56,3207.22],"6-66-60":[2381.28,2800.27],"6-66-61":[2355.2,2565.62],"6-66-62":[2548.44,2666.15],"6-66-63":[-29.54,2755.44],"6-67-0":[13.6,37.79],"6-67-1":[19.71,51.23],"5-33-0":[13.6,52.14],"6-67-2":[25.62,63.16],"6-67-3":[30.33,786.22],"5-33-1":[25.62,786.22],"4-16-0":[13.6,786.22],"6-67-4":[37.26,946.45],"6-67-5":[39.53,88.35],"5-33-2":[37.26,946.45],"6-67-6":[40.82,88.5],"6-67-7":[39.27,85.5],"5-33-3":[39.27,93.1],"4-16-1":[36.86,946.45],"6-67-8":[31.58,197.75],"6-67-9":[20.72,2315.19],"5-33-4":[20.72,2315.19],"6-67-10":[28.83,2472.36],"6-67-11":[32.5,847.8],"5-33-5":[4.23,2472.36],"4-16-2":[4.23,2472.36],"6-67-12":[-50.52,217.69],"6-67-13":[33.14,1186.21],"5-33-6":[-180.54,1186.21],"6-67-14":[128.81,1069.93],"6-67-15":[40.08,4029.26],"5-33-7":[40.08,4840.9],"4-16-3":[-180.54,4840.9],"6-67-16":[38.15,2694.01],"6-67-17":[43.45,2374.38],"5-33-8":[38.15,4069.35],"6-67-18":[34.1,1143.75],"6-67-19":[27.14,1413.3],"5-33-9":[-16.37,2250.36],"4-16-4":[-16.37,4069.35],"6-67-20":[23.52,728.47],"6-67-21":[219.62,762.97],"5-33-10":[23.52,762.97],"6-67-22":[420.92,1483.6],"6-67-23":[607.73,1924.9],"5-33-11":[377.14,2746.4],"4-16-5":[23.52,2914.18],"6-67-24":[396.41,1977.29],"6-67-25":[374.52,2023.83],"5-33-12":[324.43,2023.83],"6-67-26":[327.64,714.89],"6-67-27":[323.67,784.44],"5-33-13":[281.36,874.43],"4-16-6":[143.28,2023.83],"6-67-28":[100.15,1784.96],"6-67-29":[31.38,3028.39],"5-33-14":[5.32,3028.39],"6-67-30":[-10.88,4049.43],"6-67-31":[-22.22,1231.48],"5-33-15":[-28.03,4049.43],"4-16-7":[-28.03,4049.43],"6-67-32":[-63.62,953.44],"6-67-33":[-6.6,932.44],"5-33-16":[-63.62,953.44],"6-67-34":[7.15,22.92],"6-67-35":[9.03,31.46],"5-33-17":[7.09,31.46],"4-16-8":[-63.62,953.44],"6-67-36":[13.46,35.43],"6-67-37":[14.74,42.09],"5-33-18":[11.61,42.09],"6-67-38":[16.09,47],"6-67-39":[20.85,47.74],"5-33-19":[15.69,50.83],"4-16-9":[10.62,50.83],"6-67-40":[22.3,48.5],"6-67-41":[23.96,51.6],"5-33-20":[22.3,57.13],"6-67-42":[24.8,52.66],"6-67-43":[23.02,51.42],"5-33-21":[22.8,52.66],"4-16-10":[19.97,57.13],"6-67-44":[22.69,50.41],"6-67-45":[22.33,50.5],"5-33-22":[20.77,50.5],"6-67-46":[22.35,53.75],"6-67-47":[24.22,55.21],"5-33-23":[21.39,55.21],"4-16-11":[16.76,55.21],"6-67-48":[24.66,54.21],"6-67-49":[23.85,53.66],"5-33-24":[23.35,54.21],"6-67-50":[25.43,58.28],"6-67-51":[21.38,55.28],"5-33-25":[21.38,58.28],"4-16-12":[11.85,778.86],"6-67-52":[18.43,43.35],"6-67-53":[18.43,44.37],"5-33-26":[17.56,44.37],"6-67-54":[17.07,44.32],"6-67-55":[14.72,36.1],"5-33-27":[14.68,44.32],"4-16-13":[11.02,48.1],"6-67-56":[12.67,32.07],"6-67-57":[11.97,3175.51],"5-33-28":[11.97,3175.51],"6-67-58":[3138.56,3414.15],"6-67-59":[2800.26,3300.16],"5-33-29":[2692.56,3414.15],"4-16-14":[-4.17,3414.15],"6-67-60":[2458.67,2920.73],"6-67-61":[2439.79,2579.65],"5-33-30":[2355.2,2920.73],"6-67-62":[2565.61,2681.47],"6-67-63":[-29.54,2759.37],"5-33-31":[-29.54,2759.37],"4-16-15":[-29.54,2920.73],"6-68-0":[13.6,37.69],"6-68-1":[19.57,50.91],"6-68-2":[25.25,62.3],"6-68-3":[29.49,1385.65],"6-68-4":[33.18,1035.73],"6-68-5":[38.99,85.09],"6-68-6":[39.15,85.09],"6-68-7":[15.05,1058.54],"6-68-8":[9.73,1750.98],"6-68-9":[19.45,1810.17],"6-68-10":[36.63,1715.33],"6-68-11":[31.96,400.65],"6-68-12":[-23.11,248.2],"6-68-13":[-7.79,988.47],"6-68-14":[94.57,1845.84],"6-68-15":[33.77,3777.17],"6-68-16":[31.24,2893.68],"6-68-17":[26.5,2503.27],"6-68-18":[-23.32,2005.15],"6-68-19":[31.76,209.56],"6-68-20":[27.57,965.23],"6-68-21":[218.9,1068.73],"6-68-22":[308.04,1178.67],"6-68-23":[533.61,1310.69],"6-68-24":[378.5,1156.09],"6-68-25":[344.83,602.11],"6-68-26":[267.07,715.39],"6-68-27":[261.24,609.87],"6-68-28":[128.64,1857.59],"6-68-29":[216.86,2461.39],"6-68-30":[390.81,1585.63],"6-68-31":[140.91,1076.94],"6-68-32":[52.66,1044.68],"6-68-33":[-17.85,885.8],"6-68-34":[-25.08,923.81],"6-68-35":[-3.35,613.65],"6-68-36":[-2.05,2521.11],"6-68-37":[-19.61,2407.1],"6-68-38":[-21.61,2094.46],"6-68-39":[-59.49,1680.35],"6-68-40":[23.13,60.77],"6-68-41":[24.24,62.61],"6-68-42":[25.75,60.9],"6-68-43":[25.75,56.47],"6-68-44":[24.76,52.16],"6-68-45":[24.76,57.31],"6-68-46":[26.02,57.32],"6-68-47":[26.76,56.45],"6-68-48":[26.26,55.86],"6-68-49":[26.26,59.36],"6-68-50":[26.82,62.99],"6-68-51":[23.62,56.76],"6-68-52":[20.02,46.58],"6-68-53":[20.02,47.69],"6-68-54":[18.37,47.1],"6-68-55":[15.04,38.61],"6-68-56":[12.83,47.95],"6-68-57":[11.4,3169.81],"6-68-58":[3108.39,3460.36],"6-68-59":[2920.72,3384.4],"6-68-60":[2494.45,3077.24],"6-68-61":[2482.53,2588.56],"6-68-62":[2579.64,2693.73],"6-68-63":[-29.54,2763.36],"6-69-0":[13.6,37.44],"6-69-1":[19.4,50.44],"5-34-0":[13.6,50.91],"6-69-2":[25.03,60.03],"6-69-3":[29.14,1634.3],"5-34-1":[25.03,1634.3],"6-69-4":[31.42,1233.17],"6-69-5":[35.11,82.7],"5-34-2":[31.42,1233.17],"6-69-6":[35.26,81.82],"6-69-7":[6.63,1592.64],"5-34-3":[6.63,1592.64],"6-69-8":[4.87,1958.98],"6-69-9":[47.04,1310.43],"5-34-4":[4.87,1958.98],"6-69-10":[25.33,797.68],"6-69-11":[26.18,411.97],"5-34-5":[25.33,1715.33],"6-69-12":[19.39,280.51],"6-69-13":[17.14,1624.81],"5-34-6":[-23.11,1624.81],"6-69-14":[154.38,1918.97],"6-69-15":[39.77,2548.59],"5-34-7":[33.77,3777.17],"6-69-16":[16.47,1992.85],"6-69-17":[37.95,2820.36],"5-34-8":[16.47,2893.68],"6-69-18":[29.13,3340.97],"6-69-19":[28.62,288.67],"5-34-9":[-23.32,3340.97],"6-69-20":[9.01,392.95],"6-69-21":[69.58,877.11],"5-34-10":[9.01,1068.73],"6-69-22":[310.38,889.96],"6-69-23":[406.17,1202.42],"5-34-11":[308.04,1310.69],"6-69-24":[27.24,3331.17],"6-69-25":[184,850],"5-34-12":[27.24,3331.17],"6-69-26":[148.07,439.62],"6-69-27":[260.59,551.37],"5-34-13":[148.07,715.39],"6-69-28":[213.54,1124.79],"6-69-29":[275.12,1747.94],"5-34-14":[128.64,2461.39],"6-69-30":[354.28,1070.44],"6-69-31":[276.49,830.16],"5-34-15":[140.91,1585.63],"6-69-32":[252.96,879.81],"6-69-33":[167.87,929.4],"5-34-16":[-17.85,1044.68],"6-69-34":[256.14,1488.2],"6-69-35":[12.55,2127.16],"5-34-17":[-25.08,2127.16],"6-69-36":[166.21,2639.31],"6-69-37":[859.22,2023.5],"5-34-18":[-19.61,2639.31],"6-69-38":[730.14,1749.24],"6-69-39":[10.84,2585.59],"5-34-19":[-59.49,2585.59],"6-69-40":[-162.31,2386.26],"6-69-41":[-159.88,2015.68],"5-34-20":[-162.31,2386.26],"6-69-42":[18.98,704.83],"6-69-43":[26.09,62.3],"5-34-21":[18.98,704.83],"6-69-44":[25.43,58.48],"6-69-45":[25.82,55.17],"5-34-22":[24.76,58.48],"6-69-46":[26.02,58.49],"6-69-47":[27.55,60.1],"5-34-23":[26.02,60.1],"6-69-48":[27.02,60.61],"6-69-49":[27.99,64.2],"5-34-24":[26.26,64.2],"6-69-50":[29.22,67.45],"6-69-51":[23.62,62.15],"5-34-25":[23.62,67.45],"6-69-52":[21.62,53.1],"6-69-53":[22.44,49.65],"5-34-26":[20.02,53.1],"6-69-54":[19.27,47.76],"6-69-55":[15.24,39.44],"5-34-27":[15.04,47.76],"6-69-56":[14.46,300.15],"6-69-57":[14.89,3108.4],"5-34-28":[11.4,3169.81],"6-69-58":[3052.07,3514.26],"6-69-59":[3077.23,3446.22],"5-34-29":[2920.72,3514.26],"6-69-60":[2544.2,3147.37],"6-69-61":[2511.13,2608.3],"5-34-30":[2482.53,3147.37],"6-69-62":[2588.55,2704.02],"6-69-63":[-29.54,2767.34],"5-34-31":[-29.54,2767.34],"6-70-0":[13.6,37.16],"6-70-1":[19.22,49.87],"6-70-2":[24.52,56.84],"6-70-3":[28.6,1635.74],"6-70-4":[29.16,1193.37],"6-70-5":[30.17,441.82],"6-70-6":[29.72,72.1],"6-70-7":[12.72,2122.75],"6-70-8":[199.39,2096.53],"6-70-9":[20.3,735.36],"6-70-10":[18.93,350.95],"6-70-11":[-25.11,119.82],"6-70-12":[22.14,358.72],"6-70-13":[35.6,462.61],"6-70-14":[142.49,2057.45],"6-70-15":[100,1043.38],"6-70-16":[27.8,2489.77],"6-70-17":[24.67,2049.01],"6-70-18":[22.69,753.24],"6-70-19":[22.41,59.3],"6-70-20":[23.96,142.33],"6-70-21":[-25.04,490.94],"6-70-22":[198.02,1063.16],"6-70-23":[343.56,1540.59],"6-70-24":[27.16,3468.04],"6-70-25":[108.1,1729.27],"6-70-26":[121.91,428.48],"6-70-27":[274.16,1624.07],"6-70-28":[322.1,1063.08],"6-70-29":[354.64,767.3],"6-70-30":[305.29,833.8],"6-70-31":[254.18,533.95],"6-70-32":[223.98,448.91],"6-70-33":[192.31,886.28],"6-70-34":[403.12,1242.7],"6-70-35":[605.84,1757.04],"6-70-36":[1116.78,1831.76],"6-70-37":[1104.79,1687.18],"6-70-38":[1028.6,2162.84],"6-70-39":[1184.99,2171.43],"6-70-40":[1018.03,2505.72],"6-70-41":[47.81,2222.4],"6-70-42":[7.61,1720.53],"6-70-43":[18.25,2268.67],"6-70-44":[2.17,2017.39],"6-70-45":[26.72,58.31],"6-70-46":[27.58,59.46],"6-70-47":[29.09,64.51],"6-70-48":[29.91,64.57],"6-70-49":[29.84,67.11],"6-70-50":[31.81,70.73],"6-70-51":[27.49,66.41],"6-70-52":[24.04,57.39],"6-70-53":[24.04,50.76],"6-70-54":[19.07,48.88],"6-70-55":[15.38,38.05],"6-70-56":[14,268.92],"6-70-57":[15.56,3052.08],"6-70-58":[2944.42,3536.78],"6-70-59":[3147.36,3480.29],"6-70-60":[2608.29,3239.33],"6-70-61":[2539.62,2709.23],"6-70-62":[2602.1,2724.91],"6-70-63":[-29.54,2768.65],"6-71-0":[13.6,36.76],"6-71-1":[19.1,48.94],"5-35-0":[13.6,49.87],"6-71-2":[24.15,54.01],"6-71-3":[27.72,709.89],"5-35-1":[24.15,1635.74],"4-17-0":[13.6,1635.74],"6-71-4":[28.01,684.19],"6-71-5":[27.24,62.75],"5-35-2":[27.24,1193.37],"6-71-6":[19.67,948.29],"6-71-7":[4.84,1854.14],"5-35-3":[4.84,2122.75],"4-17-1":[4.84,2122.75],"3-8-0":[4.84,2122.75],"6-71-8":[19.05,851.76],"6-71-9":[17.77,511.56],"5-35-4":[17.77,2096.53],"6-71-10":[17.31,158.69],"6-71-11":[17.94,214.15],"5-35-5":[-25.11,350.95],"4-17-2":[-25.11,2096.53],"6-71-12":[11.89,342.67],"6-71-13":[80.4,644.43],"5-35-6":[11.89,644.43],"6-71-14":[118.41,2648.45],"6-71-15":[68.74,1842.42],"5-35-7":[68.74,2648.45],"4-17-3":[-23.11,3777.17],"3-8-1":[-180.54,4840.9],"6-71-16":[65.18,2700.03],"6-71-17":[23.06,2930.53],"5-35-8":[23.06,2930.53],"6-71-18":[13.5,2524.92],"6-71-19":[8.99,1090.39],"5-35-9":[8.99,2524.92],"4-17-4":[-23.32,3340.97],"6-71-20":[18.37,903.81],"6-71-21":[-31.98,311.99],"5-35-10":[-31.98,903.81],"6-71-22":[94.19,388.14],"6-71-23":[273.49,1038.12],"5-35-11":[94.19,1540.59],"4-17-5":[-31.98,1540.59],"3-8-2":[-31.98,4069.35],"6-71-24":[452.55,932.86],"6-71-25":[308.29,1368.77],"5-35-12":[27.16,3468.04],"6-71-26":[326.68,1327.69],"6-71-27":[373.83,1212.84],"5-35-13":[121.91,1624.07],"4-17-6":[27.16,3468.04],"6-71-28":[371.4,934.47],"6-71-29":[382.62,935.02],"5-35-14":[322.1,1063.08],"6-71-30":[291.34,761.73],"6-71-31":[282.28,549.06],"5-35-15":[254.18,833.8],"4-17-7":[128.64,2461.39],"3-8-3":[-28.03,4049.43],"6-71-32":[271.34,592.5],"6-71-33":[253.5,758.09],"5-35-16":[192.31,886.28],"6-71-34":[404.13,1099.25],"6-71-35":[753.17,1385.35],"5-35-17":[403.12,1757.04],"4-17-8":[-25.08,2127.16],"6-71-36":[1050.78,1507.74],"6-71-37":[1011.55,1380.25],"5-35-18":[1011.55,1831.76],"6-71-38":[960.55,1371.66],"6-71-39":[940.67,1497.56],"5-35-19":[940.67,2171.43],"4-17-9":[-59.49,2639.31],"3-8-4":[-63.62,2639.31],"6-71-40":[991.87,1399.38],"6-71-41":[722.23,1582.99],"5-35-20":[47.81,2505.72],"6-71-42":[427.66,1667.49],"6-71-43":[142.44,2341.81],"5-35-21":[7.61,2341.81],"4-17-10":[-162.31,2505.72],"6-71-44":[-5.94,1732.68],"6-71-45":[27.22,59.84],"5-35-22":[-5.94,2017.39],"6-71-46":[29.17,63.24],"6-71-47":[30.14,66.91],"5-35-23":[27.58,66.91],"4-17-11":[-5.94,2017.39],"3-8-5":[-162.31,2505.72],"6-71-48":[31.75,66.91],"6-71-49":[32.11,69.56],"5-35-24":[29.84,69.56],"6-71-50":[33.7,73.57],"6-71-51":[28.8,72.3],"5-35-25":[27.49,73.57],"4-17-12":[23.62,73.57],"6-71-52":[25.57,60.85],"6-71-53":[24.42,53.17],"5-35-26":[24.04,60.85],"6-71-54":[19.18,48.85],"6-71-55":[15.38,38.12],"5-35-27":[15.38,48.88],"4-17-13":[15.04,60.85],"3-8-6":[11.02,778.86],"6-71-56":[14.98,187.97],"6-71-57":[15.79,2944.43],"5-35-28":[14,3052.08],"6-71-58":[2840.08,3600.93],"6-71-59":[3239.32,3598.47],"5-35-29":[2840.08,3600.93],"4-17-14":[11.4,3600.93],"6-71-60":[2709.22,3295.33],"6-71-61":[2568.24,2810.96],"5-35-30":[2539.62,3295.33],"6-71-62":[2621.33,2751.92],"6-71-63":[-29.54,2771.32],"5-35-31":[-29.54,2771.32],"4-17-15":[-29.54,3295.33],"3-8-7":[-29.54,3600.93],"6-72-0":[13.6,36.49],"6-72-1":[19.01,48.14],"6-72-2":[23.6,52.85],"6-72-3":[25.14,753.17],"6-72-4":[25.05,528.08],"6-72-5":[22.7,56.98],"6-72-6":[22.55,1086.58],"6-72-7":[21.13,1167.12],"6-72-8":[17.66,435.24],"6-72-9":[17.52,286.65],"6-72-10":[15.17,241.92],"6-72-11":[12.2,275.13],"6-72-12":[29.06,318.56],"6-72-13":[28.38,382.74],"6-72-14":[135.43,1998.12],"6-72-15":[147.15,2540.92],"6-72-16":[49.82,2847.57],"6-72-17":[30.85,2950.99],"6-72-18":[21.06,2427.62],"6-72-19":[7.76,2464.23],"6-72-20":[7.73,425.6],"6-72-21":[-11.66,284.94],"6-72-22":[88.27,639.17],"6-72-23":[289.98,1107.43],"6-72-24":[470.56,1912.86],"6-72-25":[498.02,1340.77],"6-72-26":[593.56,1710.7],"6-72-27":[454.32,3017.52],"6-72-28":[444.14,1371.36],"6-72-29":[477.29,1047.83],"6-72-30":[352.38,768.89],"6-72-31":[319.72,630.52],"6-72-32":[322.07,733.63],"6-72-33":[332.54,807.65],"6-72-34":[430.54,1119.46],"6-72-35":[723.96,1534.31],"6-72-36":[1022.28,1643.41],"6-72-37":[961.73,1249.5],"6-72-38":[916.89,1116.92],"6-72-39":[892.54,1255.26],"6-72-40":[958.51,1498.79],"6-72-41":[975.82,1901.6],"6-72-42":[928.72,1783.15],"6-72-43":[77.74,2501.84],"6-72-44":[12.69,1649.02],"6-72-45":[28,66.27],"6-72-46":[29.82,70.25],"6-72-47":[32.16,68.24],"6-72-48":[32.45,66.93],"6-72-49":[32.5,71.41],"6-72-50":[34.78,76.35],"6-72-51":[30.32,73.61],"6-72-52":[26.6,61.36],"6-72-53":[24.54,54.43],"6-72-54":[19.54,49.25],"6-72-55":[15.45,38.72],"6-72-56":[15.31,41.8],"6-72-57":[21.91,3236.81],"6-72-58":[2872.27,3666.27],"6-72-59":[3295.32,3666.27],"6-72-60":[2810.95,3378.93],"6-72-61":[2625.94,2968.07],"6-72-62":[2649.64,2779.15],"6-72-63":[-29.54,2774.31],"6-73-0":[13.6,36.21],"6-73-1":[18.97,47.61],"5-36-0":[13.6,48.14],"6-73-2":[22.99,49.57],"6-73-3":[23.45,674.04],"5-36-1":[22.99,753.17],"6-73-4":[23.04,204.98],"6-73-5":[22,51.05],"5-36-2":[22,528.08],"6-73-6":[18.61,696.6],"6-73-7":[22.39,1083.56],"5-36-3":[18.61,1167.12],"6-73-8":[17.69,559.12],"6-73-9":[46.96,398.6],"5-36-4":[17.52,559.12],"6-73-10":[10.3,258.06],"6-73-11":[18.42,338.7],"5-36-5":[10.3,338.7],"6-73-12":[21.07,371.65],"6-73-13":[119.02,309.64],"5-36-6":[21.07,382.74],"6-73-14":[82.56,1369.76],"6-73-15":[13.61,2520.59],"5-36-7":[13.61,2540.92],"6-73-16":[28.54,1559.76],"6-73-17":[28.77,1798.35],"5-36-8":[28.54,2950.99],"6-73-18":[23.18,2185.74],"6-73-19":[-52.99,2137.5],"5-36-9":[-52.99,2464.23],"6-73-20":[1.3,266.06],"6-73-21":[-117.56,282.94],"5-36-10":[-117.56,425.6],"6-73-22":[27.75,574.35],"6-73-23":[275.3,1131.98],"5-36-11":[27.75,1131.98],"6-73-24":[280.09,1082.02],"6-73-25":[366.24,841.26],"5-36-12":[280.09,1912.86],"6-73-26":[428.45,2020.89],"6-73-27":[423.73,1156.65],"5-36-13":[423.73,3017.52],"6-73-28":[386.96,960.04],"6-73-29":[394.88,977.62],"5-36-14":[386.96,1371.36],"6-73-30":[497.33,946.04],"6-73-31":[366.87,1103.17],"5-36-15":[319.72,1103.17],"6-73-32":[379.78,1540.39],"6-73-33":[413.29,1685.26],"5-36-16":[322.07,1685.26],"6-73-34":[504.55,1701.66],"6-73-35":[515.18,1902.71],"5-36-17":[430.54,1902.71],"6-73-36":[935.23,1683.01],"6-73-37":[473.44,1546.43],"5-36-18":[473.44,1683.01],"6-73-38":[414.32,1440.16],"6-73-39":[758.78,1496.99],"5-36-19":[414.32,1496.99],"6-73-40":[770.57,2110.34],"6-73-41":[993.88,1898.28],"5-36-20":[770.57,2110.34],"6-73-42":[1210.08,3126.88],"6-73-43":[4.71,2790.11],"5-36-21":[4.71,3126.88],"6-73-44":[11.68,321.06],"6-73-45":[28.82,68.52],"5-36-22":[11.68,1649.02],"6-73-46":[33.04,71.86],"6-73-47":[33.1,68.84],"5-36-23":[29.82,71.86],"6-73-48":[32.88,69.45],"6-73-49":[33.33,74.64],"5-36-24":[32.45,74.64],"6-73-50":[35.38,76.55],"6-73-51":[30.59,74.13],"5-36-25":[30.32,76.55],"6-73-52":[27.68,63.59],"6-73-53":[24.54,58.28],"5-36-26":[24.54,63.59],"6-73-54":[20.07,51.54],"6-73-55":[15.99,40.58],"5-36-27":[15.45,51.54],"6-73-56":[15.99,41.88],"6-73-57":[19.59,3236.81],"5-36-28":[15.31,3236.81],"6-73-58":[2976.86,3671.29],"6-73-59":[3378.92,3685.99],"5-36-29":[2872.27,3685.99],"6-73-60":[2968.06,3441.2],"6-73-61":[2691.68,3024.01],"5-36-30":[2625.94,3441.2],"6-73-62":[2691.68,2818.12],"6-73-63":[-29.54,2780.49],"5-36-31":[-29.54,2818.12],"6-74-0":[13.6,36.07],"6-74-1":[18.96,46.86],"6-74-2":[22.03,47],"6-74-3":[20.96,289.51],"6-74-4":[19.84,46.66],"6-74-5":[17.55,45.75],"6-74-6":[11.97,739.68],"6-74-7":[14.65,736.85],"6-74-8":[-6.7,3219.23],"6-74-9":[-7.7,401.9],"6-74-10":[-74.06,523.35],"6-74-11":[30.86,314.28],"6-74-12":[121.32,307.64],"6-74-13":[94.68,347.09],"6-74-14":[53.31,387.19],"6-74-15":[16.89,488.72],"6-74-16":[26.92,429.54],"6-74-17":[0.6,2570.69],"6-74-18":[-38.2,3075.92],"6-74-19":[2.74,3021.97],"6-74-20":[2.74,110.17],"6-74-21":[-52.61,355.67],"6-74-22":[11.08,602.67],"6-74-23":[11.91,551.02],"6-74-24":[164.06,713.34],"6-74-25":[187.45,639.47],"6-74-26":[300.4,1130.48],"6-74-27":[439.11,1410.14],"6-74-28":[346.35,1323.82],"6-74-29":[356.78,738.69],"6-74-30":[452.9,1580.59],"6-74-31":[534,5024.49],"6-74-32":[645.87,4495.21],"6-74-33":[625.99,3461],"6-74-34":[590.29,2489.57],"6-74-35":[742.27,1708.52],"6-74-36":[432.19,1881.89],"6-74-37":[298.55,1739.34],"6-74-38":[466.8,1752.71],"6-74-39":[255.5,1623.82],"6-74-40":[350.82,2352.72],"6-74-41":[677.23,2369.87],"6-74-42":[12.4,3510.35],"6-74-43":[4.61,2075.35],"6-74-44":[25.51,57.03],"6-74-45":[28.71,66.1],"6-74-46":[31.87,69.33],"6-74-47":[32.66,69.51],"6-74-48":[33.21,80.25],"6-74-49":[35.21,80.16],"6-74-50":[35.5,79.81],"6-74-51":[31.79,73.11],"6-74-52":[29.44,68],"6-74-53":[26.69,59.41],"6-74-54":[20.92,53.21],"6-74-55":[18.14,42.59],"6-74-56":[17.26,359.2],"6-74-57":[18.72,2976.87],"6-74-58":[2510.84,3667.35],"6-74-59":[3441.19,3732.45],"6-74-60":[3024,3510.17],"6-74-61":[2783.25,3119.66],"6-74-62":[2780.48,2893.13],"6-74-63":[-29.54,2805.44],"6-75-0":[13.6,35.99],"6-75-1":[18.94,45.05],"5-37-0":[13.6,46.86],"6-75-2":[21.42,45.15],"6-75-3":[20.74,291.18],"5-37-1":[20.74,291.18],"4-18-0":[13.6,753.17],"6-75-4":[17.8,41.45],"6-75-5":[17.26,39.32],"5-37-2":[17.26,46.66],"6-75-6":[15.55,177.14],"6-75-7":[15.55,1181.22],"5-37-3":[11.97,1181.22],"4-18-1":[11.97,1181.22],"6-75-8":[16.77,712.47],"6-75-9":[-32.14,4110.39],"5-37-4":[-32.14,4110.39],"6-75-10":[-19.3,318.43],"6-75-11":[30.72,357.76],"5-37-5":[-74.06,523.35],"4-18-2":[-74.06,4110.39],"6-75-12":[140.07,313.84],"6-75-13":[123.47,252.12],"5-37-6":[94.68,347.09],"6-75-14":[-181.36,293.98],"6-75-15":[-133.08,195.69],"5-37-7":[-181.36,488.72],"4-18-3":[-181.36,2540.92],"6-75-16":[12.44,673.31],"6-75-17":[25.7,2438.12],"5-37-8":[0.6,2570.69],"6-75-18":[22.51,3012.55],"6-75-19":[6.7,2342.54],"5-37-9":[-38.2,3075.92],"4-18-4":[-52.99,3075.92],"6-75-20":[8.83,223.67],"6-75-21":[-4.5,1970.91],"5-37-10":[-52.61,1970.91],"6-75-22":[11.16,2002.31],"6-75-23":[78.71,726.15],"5-37-11":[11.08,2002.31],"4-18-5":[-117.56,2002.31],"6-75-24":[172.21,1207.85],"6-75-25":[212.55,942.11],"5-37-12":[164.06,1207.85],"6-75-26":[305.98,740.02],"6-75-27":[352.02,1457.61],"5-37-13":[300.4,1457.61],"4-18-6":[164.06,3017.52],"6-75-28":[354.16,988.64],"6-75-29":[356.57,725.3],"5-37-14":[346.35,1323.82],"6-75-30":[389.82,3166.22],"6-75-31":[594.3,2060.9],"5-37-15":[389.82,5024.49],"4-18-7":[319.72,5024.49],"6-75-32":[1072.57,1787.81],"6-75-33":[1016.16,1756.25],"5-37-16":[625.99,4495.21],"6-75-34":[735.53,2443.31],"6-75-35":[493.17,2943.5],"5-37-17":[493.17,2943.5],"4-18-8":[322.07,4495.21],"6-75-36":[446.63,1864.36],"6-75-37":[93.22,1716.39],"5-37-18":[93.22,1881.89],"6-75-38":[74.67,2583.3],"6-75-39":[57.48,2427.44],"5-37-19":[57.48,2583.3],"4-18-9":[57.48,2583.3],"6-75-40":[-242.83,1442.62],"6-75-41":[-31.19,1914.13],"5-37-20":[-242.83,2369.87],"6-75-42":[2.04,1636.59],"6-75-43":[21.63,58.03],"5-37-21":[2.04,3510.35],"4-18-10":[-242.83,3510.35],"6-75-44":[25.62,61.17],"6-75-45":[29.14,66.22],"5-37-22":[25.51,66.22],"6-75-46":[31.94,69.34],"6-75-47":[33.03,82.96],"5-37-23":[31.87,82.96],"4-18-11":[11.68,1649.02],"6-75-48":[35.18,89.62],"6-75-49":[39.2,86.77],"5-37-24":[33.21,89.62],"6-75-50":[36.6,80.48],"6-75-51":[34.25,78.22],"5-37-25":[31.79,80.48],"4-18-12":[30.32,89.62],"6-75-52":[30.27,72.13],"6-75-53":[26.69,63.45],"5-37-26":[26.69,72.13],"6-75-54":[20.79,54.64],"6-75-55":[18.14,45.98],"5-37-27":[18.14,54.64],"4-18-13":[15.45,72.13],"6-75-56":[18.66,861.26],"6-75-57":[359.19,2787.68],"5-37-28":[17.26,2976.87],"6-75-58":[2576.62,3670.33],"6-75-59":[3510.16,3745.57],"5-37-29":[2510.84,3745.57],"4-18-14":[15.31,3745.57],"6-75-60":[3119.65,3590.97],"6-75-61":[2882.5,3236.16],"5-37-30":[2783.25,3590.97],"6-75-62":[2805.43,2971.57],"6-75-63":[-29.54,2839.82],"5-37-31":[-29.54,2971.57],"4-18-15":[-29.54,3590.97],"6-76-0":[13.6,35.96],"6-76-1":[18.88,43.71],"6-76-2":[20.05,43.82],"6-76-3":[17.55,47.61],"6-76-4":[15.48,38.46],"6-76-5":[14.03,35.52],"6-76-6":[13.19,32.09],"6-76-7":[13.64,1139.05],"6-76-8":[15.76,538.64],"6-76-9":[14.86,306.08],"6-76-10":[21.95,316.75],"6-76-11":[80.98,357.69],"6-76-12":[126.53,332.1],"6-76-13":[34.69,291.25],"6-76-14":[4.45,251.97],"6-76-15":[11.09,721.64],"6-76-16":[16.18,1541.99],"6-76-17":[17.64,2603.85],"6-76-18":[19.98,3897.68],"6-76-19":[14.59,3093.99],"6-76-20":[-398.55,2689.12],"6-76-21":[-349.48,2516.84],"6-76-22":[7.34,2262.38],"6-76-23":[-21.6,1972.68],"6-76-24":[-6.69,2173.07],"6-76-25":[324.79,1591.14],"6-76-26":[356.19,1104.11],"6-76-27":[401.98,2729.65],"6-76-28":[392.01,3267.45],"6-76-29":[375.1,3342.07],"6-76-30":[309.01,2770.25],"6-76-31":[236.85,4305.91],"6-76-32":[545.42,3396.04],"6-76-33":[671.25,3634.02],"6-76-34":[206.1,2462.72],"6-76-35":[230.19,2952.42],"6-76-36":[-18.37,1938.4],"6-76-37":[7.99,2969.88],"6-76-38":[-27.14,1841.51],"6-76-39":[-30.93,319.69],"6-76-40":[-13.74,244.16],"6-76-41":[8.65,35.45],"6-76-42":[14.14,44.71],"6-76-43":[19.2,58.81],"6-76-44":[24.23,61.33],"6-76-45":[27.4,65.6],"6-76-46":[32.33,76.23],"6-76-47":[35.63,92.82],"6-76-48":[41.49,92.94],"6-76-49":[40.23,88.72],"6-76-50":[39.23,85.78],"6-76-51":[36.06,83.62],"6-76-52":[32.25,75.93],"6-76-53":[27.56,65.48],"6-76-54":[22.21,58.44],"6-76-55":[22.21,48.62],"6-76-56":[20.39,1400],"6-76-57":[861.25,2930.46],"6-76-58":[2787.67,3670.26],"6-76-59":[3590.96,3781.61],"6-76-60":[2776.72,3628.25],"6-76-61":[2954.99,3346.55],"6-76-62":[2839.81,3092.47],"6-76-63":[-29.54,2876.01],"6-77-0":[13.6,35.87],"6-77-1":[18.74,42.43],"5-38-0":[13.6,43.71],"6-77-2":[19.64,42.43],"6-77-3":[17.24,120.99],"5-38-1":[17.24,120.99],"6-77-4":[12.81,34.8],"6-77-5":[12.61,29.58],"5-38-2":[12.61,38.46],"6-77-6":[10.81,27.52],"6-77-7":[10.81,395.4],"5-38-3":[10.81,1139.05],"6-77-8":[13.48,352.95],"6-77-9":[13.48,366.87],"5-38-4":[13.48,538.64],"6-77-10":[35.39,327.96],"6-77-11":[93.37,306.61],"5-38-5":[21.95,357.69],"6-77-12":[105.39,311.33],"6-77-13":[-117.36,300.03],"5-38-6":[-117.36,332.1],"6-77-14":[44.47,375.52],"6-77-15":[2.57,323.22],"5-38-7":[2.57,721.64],"6-77-16":[12.38,1062.09],"6-77-17":[17.22,3382.16],"5-38-8":[12.38,3382.16],"6-77-18":[227.32,3297.16],"6-77-19":[120.11,2377.57],"5-38-9":[14.59,3897.68],"6-77-20":[501.73,1781.74],"6-77-21":[534.04,1378.43],"5-38-10":[-398.55,2689.12],"6-77-22":[6.85,2032.54],"6-77-23":[-26.43,2355.84],"5-38-11":[-26.43,2355.84],"6-77-24":[-82.73,2168.09],"6-77-25":[-31.31,2735.56],"5-38-12":[-82.73,2735.56],"6-77-26":[-27.84,3016.69],"6-77-27":[581.81,4526.44],"5-38-13":[-27.84,4526.44],"6-77-28":[713.31,4259.18],"6-77-29":[510.69,4177.49],"5-38-14":[375.1,4259.18],"6-77-30":[298.72,2764.05],"6-77-31":[167.98,3442.17],"5-38-15":[167.98,4305.91],"6-77-32":[136.09,5158.31],"6-77-33":[-45.68,5869.55],"5-38-16":[-45.68,5869.55],"6-77-34":[-49.58,2618.18],"6-77-35":[-48.06,1490.1],"5-38-17":[-49.58,2952.42],"6-77-36":[-18.95,1408.41],"6-77-37":[-43.82,2305.1],"5-38-18":[-43.82,2969.88],"6-77-38":[-55.16,506.56],"6-77-39":[-23.77,1.33],"5-38-19":[-55.16,1841.51],"6-77-40":[-2.89,15.32],"6-77-41":[4.2,25.41],"5-38-20":[-13.74,244.16],"6-77-42":[9.2,34.13],"6-77-43":[15.55,46.33],"5-38-21":[9.2,58.81],"6-77-44":[24.23,56.57],"6-77-45":[27.4,71.28],"5-38-22":[24.23,71.28],"6-77-46":[32.88,83.08],"6-77-47":[39.51,93.26],"5-38-23":[32.33,93.26],"6-77-48":[38.04,1277.56],"6-77-49":[42.15,90.89],"5-38-24":[38.04,1277.56],"6-77-50":[42.47,93.63],"6-77-51":[38.18,92.27],"5-38-25":[36.06,93.63],"6-77-52":[33.28,80.44],"6-77-53":[29.46,68.79],"5-38-26":[27.56,80.44],"6-77-54":[25.28,62.82],"6-77-55":[22.68,52.06],"5-38-27":[22.21,62.82],"6-77-56":[18.95,1400],"6-77-57":[751.85,3035.01],"5-38-28":[18.95,3035.01],"6-77-58":[2930.45,3670.15],"6-77-59":[3628.25,3814.29],"5-38-29":[2787.67,3814.29],"6-77-60":[3346.54,3652.21],"6-77-61":[3073.2,3460.18],"5-38-30":[2776.72,3652.21],"6-77-62":[2876,3182.27],"6-77-63":[-29.54,2907.97],"5-38-31":[-29.54,3182.27],"6-78-0":[13.6,35.71],"6-78-1":[18.5,41.37],"6-78-2":[18.62,41.37],"6-78-3":[14.08,41.71],"6-78-4":[10.33,32.25],"6-78-5":[8.69,25.05],"6-78-6":[8.19,22.55],"6-78-7":[9.2,327.91],"6-78-8":[11.6,314.82],"6-78-9":[12.9,268.49],"6-78-10":[44.72,286.2],"6-78-11":[79.76,279.53],"6-78-12":[76.55,258.22],"6-78-13":[77.59,248.68],"6-78-14":[14.28,340.26],"6-78-15":[2.68,680.41],"6-78-16":[13.14,3881.85],"6-78-17":[13.73,3918.41],"6-78-18":[321,3209.2],"6-78-19":[147.38,1446.37],"6-78-20":[267.19,949.71],"6-78-21":[374.43,1047.17],"6-78-22":[737.12,1974.55],"6-78-23":[99.43,2149.19],"6-78-24":[-38.59,2651.93],"6-78-25":[-18.11,2755.96],"6-78-26":[-202.91,3297.68],"6-78-27":[-172.94,3970.6],"6-78-28":[208.62,3839.48],"6-78-29":[250.57,4373.18],"6-78-30":[130.76,1692.99],"6-78-31":[-26.1,881.98],"6-78-32":[-77.85,278.94],"6-78-33":[-77.15,504.42],"6-78-34":[-74.93,56.49],"6-78-35":[-67.51,634.05],"6-78-36":[-58.21,1404.07],"6-78-37":[-82.52,980.89],"6-78-38":[-39.1,-9.7],"6-78-39":[-22.61,25.58],"6-78-40":[-3.87,7.79],"6-78-41":[3.4,20.43],"6-78-42":[8.86,32.47],"6-78-43":[15.8,49.23],"6-78-44":[24.72,59.67],"6-78-45":[29.26,78.45],"6-78-46":[35.64,87.67],"6-78-47":[42.4,92.7],"6-78-48":[42.73,92.7],"6-78-49":[43.34,91.97],"6-78-50":[45.44,100.71],"6-78-51":[40.21,95.44],"6-78-52":[34.91,81.61],"6-78-53":[31.4,70.9],"6-78-54":[26.8,64.39],"6-78-55":[25.07,54.85],"6-78-56":[20.74,1829.25],"6-78-57":[790.9,3049.46],"6-78-58":[3035,3654.4],"6-78-59":[3633.12,3814.29],"6-78-60":[3460.17,3676.48],"6-78-61":[3182.26,3515.55],"6-78-62":[2907.96,3278.24],"6-78-63":[-29.54,2956.72],"6-79-0":[13.6,35.35],"6-79-1":[18.17,40.15],"5-39-0":[13.6,41.37],"6-79-2":[18.31,40.92],"6-79-3":[14.08,38.78],"5-39-1":[14.08,41.71],"4-19-0":[13.6,120.99],"6-79-4":[8.85,27.87],"6-79-5":[7.69,19.46],"5-39-2":[7.69,32.25],"6-79-6":[6.77,17.55],"6-79-7":[7.34,252.89],"5-39-3":[6.77,327.91],"4-19-1":[6.77,1139.05],"3-9-0":[6.77,1181.22],"6-79-8":[10.65,224],"6-79-9":[12.58,273.71],"5-39-4":[10.65,314.82],"6-79-10":[36.18,309.09],"6-79-11":[67.88,297.07],"5-39-5":[36.18,309.09],"4-19-2":[10.65,538.64],"6-79-12":[65.82,294.44],"6-79-13":[86.91,291.7],"5-39-6":[65.82,294.44],"6-79-14":[-19.35,260.4],"6-79-15":[-9.6,476.12],"5-39-7":[-19.35,680.41],"4-19-3":[-117.36,721.64],"3-9-1":[-181.36,4110.39],"2-4-0":[-181.36,4840.9],"6-79-16":[37.86,5616.16],"6-79-17":[25.49,5133.37],"5-39-8":[13.14,5616.16],"6-79-18":[263.18,4058.15],"6-79-19":[31.48,3448.78],"5-39-9":[31.48,4058.15],"4-19-4":[12.38,5616.16],"6-79-20":[2.31,377.37],"6-79-21":[110.72,790.42],"5-39-10":[2.31,1047.17],"6-79-22":[400.54,1407.05],"6-79-23":[692.97,1499.62],"5-39-11":[99.43,2149.19],"4-19-5":[-398.55,2689.12],"3-9-2":[-398.55,5616.16],"6-79-24":[612.19,1721.97],"6-79-25":[-26.78,2990.34],"5-39-12":[-38.59,2990.34],"6-79-26":[-70.23,3647.39],"6-79-27":[-179.38,3223.81],"5-39-13":[-202.91,3970.6],"4-19-6":[-202.91,4526.44],"6-79-28":[-41.82,3002.22],"6-79-29":[152.09,1451.56],"5-39-14":[-41.82,4373.18],"6-79-30":[61.26,913.05],"6-79-31":[-86.74,587.03],"5-39-15":[-86.74,1692.99],"4-19-7":[-86.74,4373.18],"3-9-3":[-202.91,5024.49],"2-4-1":[-398.55,5616.16],"6-79-32":[-87.58,65.61],"6-79-33":[-86.64,-37.76],"5-39-16":[-87.58,504.42],"6-79-34":[-81.84,-34.75],"6-79-35":[-71.3,-26.58],"5-39-17":[-81.84,634.05],"4-19-8":[-87.58,5869.55],"6-79-36":[-59.05,2336.88],"6-79-37":[-52.97,605.98],"5-39-18":[-82.52,2336.88],"6-79-38":[-43.74,926.36],"6-79-39":[-68.11,1064.17],"5-39-19":[-68.11,1064.17],"4-19-9":[-82.52,2969.88],"3-9-4":[-87.58,5869.55],"6-79-40":[-18.99,1347.93],"6-79-41":[-12.01,199.04],"5-39-20":[-18.99,1347.93],"6-79-42":[8.42,42.61],"6-79-43":[17.67,65.21],"5-39-21":[8.42,65.21],"4-19-10":[-18.99,1347.93],"6-79-44":[24.72,70.25],"6-79-45":[31.3,83.27],"5-39-22":[24.72,83.27],"6-79-46":[39.48,87.78],"6-79-47":[43.03,91.28],"5-39-23":[35.64,92.7],"4-19-11":[24.23,93.26],"3-9-5":[-242.83,3510.35],"2-4-2":[-242.83,5869.55],"6-79-48":[42.49,94.03],"6-79-49":[43.22,91.87],"5-39-24":[42.49,94.03],"6-79-50":[45.58,101.84],"6-79-51":[40.61,94.5],"5-39-25":[40.21,101.84],"4-19-12":[36.06,1277.56],"6-79-52":[35.82,81.74],"6-79-53":[31.85,70.92],"5-39-26":[31.4,81.74],"6-79-54":[28.07,64.4],"6-79-55":[25.07,56.23],"5-39-27":[25.07,64.4],"4-19-13":[22.21,81.74],"3-9-6":[15.45,1277.56],"6-79-56":[24.51,2238.4],"6-79-57":[1829.24,3044.79],"5-39-28":[20.74,3049.46],"6-79-58":[3023.55,3633.13],"6-79-59":[3590.92,3703.54],"5-39-29":[3023.55,3814.29],"4-19-14":[18.95,3814.29],"6-79-60":[3515.54,3739.77],"6-79-61":[3278.23,3596.54],"5-39-30":[3182.26,3739.77],"6-79-62":[2956.71,3326.45],"6-79-63":[-29.54,2985.88],"5-39-31":[-29.54,3326.45],"4-19-15":[-29.54,3739.77],"3-9-7":[-29.54,3814.29],"2-4-3":[-29.54,3814.29],"6-80-0":[13.6,34.92],"6-80-1":[17.78,39.27],"6-80-2":[16.68,40.65],"6-80-3":[11.49,517.11],"6-80-4":[7.13,26.45],"6-80-5":[4.68,16.89],"6-80-6":[4.58,15.08],"6-80-7":[4.73,237.51],"6-80-8":[7.54,245.48],"6-80-9":[34.12,285.08],"6-80-10":[9.18,302.02],"6-80-11":[61.24,248.97],"6-80-12":[48.7,347.27],"6-80-13":[6.35,372.83],"6-80-14":[-41.25,355.61],"6-80-15":[-76.27,115.89],"6-80-16":[-56.46,4485.88],"6-80-17":[-15.96,4116.85],"6-80-18":[161.31,4577.24],"6-80-19":[32.18,3588.07],"6-80-20":[-43.59,2783.91],"6-80-21":[-86.23,444.94],"6-80-22":[151.78,925.69],"6-80-23":[340.2,1343.13],"6-80-24":[285.31,1028.07],"6-80-25":[400.89,1455.51],"6-80-26":[79.57,2444.71],"6-80-27":[-65.02,2493.24],"6-80-28":[-50.69,2422.23],"6-80-29":[62.25,1006.97],"6-80-30":[-93.25,501.55],"6-80-31":[-99.6,235.87],"6-80-32":[-97.89,-42.83],"6-80-33":[-90.45,-40.91],"6-80-34":[-87.49,-33.55],"6-80-35":[-79.14,8.71],"6-80-36":[-62.55,621.18],"6-80-37":[-52.79,1207.88],"6-80-38":[-3.35,2631.65],"6-80-39":[-45.58,2635.66],"6-80-40":[-13.4,1977.92],"6-80-41":[3.13,244.27],"6-80-42":[12.3,42.61],"6-80-43":[19.05,65.05],"6-80-44":[27.43,70.26],"6-80-45":[35.59,85.76],"6-80-46":[41.63,87.78],"6-80-47":[42.87,92.37],"6-80-48":[44.13,94.46],"6-80-49":[43.94,91.87],"6-80-50":[45.05,99.84],"6-80-51":[40.48,92.21],"6-80-52":[35.29,81.74],"6-80-53":[31.46,70.92],"6-80-54":[28.44,63.71],"6-80-55":[27.25,572.15],"6-80-56":[26.34,2427.48],"6-80-57":[2238.39,3127.78],"6-80-58":[3023.7,3590.93],"6-80-59":[3513.32,3615.32],"6-80-60":[3595.11,3741.77],"6-80-61":[3326.44,3655.25],"6-80-62":[2985.87,3360.65],"6-80-63":[-29.54,3013.02],"6-81-0":[13.6,34.28],"6-81-1":[17.42,38.06],"5-40-0":[13.6,39.27],"6-81-2":[16.06,37.38],"6-81-3":[11.14,453.1],"5-40-1":[11.14,517.11],"6-81-4":[5.36,22.49],"6-81-5":[2.51,12.86],"5-40-2":[2.51,26.45],"6-81-6":[2.24,9.59],"6-81-7":[2.54,195.71],"5-40-3":[2.24,237.51],"6-81-8":[7.96,467.27],"6-81-9":[65.32,477.07],"5-40-4":[7.54,477.07],"6-81-10":[7.84,275.89],"6-81-11":[59.53,298.46],"5-40-5":[7.84,302.02],"6-81-12":[19.86,367.95],"6-81-13":[0.32,377.5],"5-40-6":[0.32,377.5],"6-81-14":[-51.54,65.52],"6-81-15":[-57.25,5.04],"5-40-7":[-76.27,355.61],"6-81-16":[-43.48,748.23],"6-81-17":[-65.9,4455.71],"5-40-8":[-65.9,4485.88],"6-81-18":[-73,4802.09],"6-81-19":[473.29,3898.23],"5-40-9":[-73,4802.09],"6-81-20":[-93.21,4173.89],"6-81-21":[-121.55,2032.48],"5-40-10":[-121.55,4173.89],"6-81-22":[-85.21,483.61],"6-81-23":[-57.81,539.09],"5-40-11":[-85.21,1343.13],"6-81-24":[77.98,467.81],"6-81-25":[176.55,1015.61],"5-40-12":[77.98,1455.51],"6-81-26":[-51.14,2138.39],"6-81-27":[-58.49,2078.28],"5-40-13":[-65.02,2493.24],"6-81-28":[-83.94,1996.26],"6-81-29":[-102.99,846.67],"5-40-14":[-102.99,2422.23],"6-81-30":[-103.29,410.82],"6-81-31":[-103.34,-46.62],"5-40-15":[-103.34,501.55],"6-81-32":[-99.7,-45.29],"6-81-33":[-91.37,-41.35],"5-40-16":[-99.7,-40.91],"6-81-34":[-87.05,-35.59],"6-81-35":[-80.36,-28.86],"5-40-17":[-87.49,8.71],"6-81-36":[-95.35,2866.35],"6-81-37":[-44.05,2817.4],"5-40-18":[-95.35,2866.35],"6-81-38":[-37.94,1755.56],"6-81-39":[-49.87,1687.3],"5-40-19":[-49.87,2635.66],"6-81-40":[-10.79,75],"6-81-41":[1.07,25.08],"5-40-20":[-13.4,1977.92],"6-81-42":[8.34,34.81],"6-81-43":[16.88,54.43],"5-40-21":[8.34,65.05],"6-81-44":[27.43,70.86],"6-81-45":[35.92,83.88],"5-40-22":[27.43,85.76],"6-81-46":[39.83,85.23],"6-81-47":[42.1,89.88],"5-40-23":[39.83,92.37],"6-81-48":[10.5,895.68],"6-81-49":[44.14,90.78],"5-40-24":[10.5,895.68],"6-81-50":[42.93,94.4],"6-81-51":[38.91,91.87],"5-40-25":[38.91,99.84],"6-81-52":[33.96,80.53],"6-81-53":[30.7,68.94],"5-40-26":[30.7,81.74],"6-81-54":[28.32,62.75],"6-81-55":[29.72,1099.75],"5-40-27":[27.25,1099.75],"6-81-56":[30.45,2482.8],"6-81-57":[2427.47,3161.72],"5-40-28":[26.34,3161.72],"6-81-58":[3127.77,3513.33],"6-81-59":[3362.15,3613.49],"5-40-29":[3023.7,3615.32],"6-81-60":[3596.57,3745.47],"6-81-61":[3360.64,3699.75],"5-40-30":[3326.44,3745.47],"6-81-62":[3013.01,3382.27],"6-81-63":[-29.54,3034.71],"5-40-31":[-29.54,3382.27],"6-82-0":[13.6,33.76],"6-82-1":[17,37.12],"6-82-2":[15.53,35.52],"6-82-3":[8.15,574.46],"6-82-4":[4.35,19.3],"6-82-5":[1.27,79.61],"6-82-6":[0.56,585.93],"6-82-7":[0.54,166.68],"6-82-8":[5.53,263.89],"6-82-9":[23.58,441.34],"6-82-10":[5.37,321.16],"6-82-11":[52.24,337.16],"6-82-12":[32.72,384.64],"6-82-13":[-1.79,320.68],"6-82-14":[-63.46,173.57],"6-82-15":[-85.87,-10.01],"6-82-16":[-173.82,522.27],"6-82-17":[-63.16,294.16],"6-82-18":[-61.41,3417.02],"6-82-19":[-32.51,5595.76],"6-82-20":[768.45,4411.42],"6-82-21":[-91.09,4366.48],"6-82-22":[-64.72,1761.32],"6-82-23":[-110.57,170.47],"6-82-24":[-44.95,274.33],"6-82-25":[68.28,1114.62],"6-82-26":[-145.36,1466.69],"6-82-27":[-88.55,1380.57],"6-82-28":[-104.68,723.52],"6-82-29":[-111.56,-41.96],"6-82-30":[-110.83,-50.61],"6-82-31":[-104.52,-49.03],"6-82-32":[-100.44,-45.11],"6-82-33":[-93.4,-10.81],"6-82-34":[-83.72,5.08],"6-82-35":[-74.96,-0.2],"6-82-36":[-62.66,-19.8],"6-82-37":[-49.14,-15.48],"6-82-38":[-35.86,-11.67],"6-82-39":[-24.06,-4.21],"6-82-40":[-11.33,1.34],"6-82-41":[0.88,15.42],"6-82-42":[7.73,31.56],"6-82-43":[16.23,52.89],"6-82-44":[26.35,70.9],"6-82-45":[33.59,79.74],"6-82-46":[36.43,83.44],"6-82-47":[40.09,89.7],"6-82-48":[31.65,1115.13],"6-82-49":[43.67,90.18],"6-82-50":[42.26,91.9],"6-82-51":[37.84,90.05],"6-82-52":[33.96,77.84],"6-82-53":[30.52,67.42],"6-82-54":[28.32,61.42],"6-82-55":[29.72,1774.62],"6-82-56":[1099.74,2729.04],"6-82-57":[2482.79,3157.08],"6-82-58":[3040.04,3362.16],"6-82-59":[3161.66,3614.29],"6-82-60":[3541.01,3772.23],"6-82-61":[3382.26,3728.18],"6-82-62":[3034.7,3397.85],"6-82-63":[-29.54,3048.46],"6-83-0":[13.6,33.14],"6-83-1":[16.83,36.08],"5-41-0":[13.6,37.12],"6-83-2":[15.31,35.22],"6-83-3":[8.15,497.91],"5-41-1":[8.15,574.46],"4-20-0":[8.15,574.46],"6-83-4":[2.83,16.01],"6-83-5":[1.2,1212.81],"5-41-2":[1.2,1212.81],"6-83-6":[-2.49,1230.82],"6-83-7":[-3.49,212.13],"5-41-3":[-3.49,1230.82],"4-20-1":[-3.49,1230.82],"6-83-8":[21.02,244.39],"6-83-9":[32.38,331.03],"5-41-4":[5.53,441.34],"6-83-10":[0.65,350.47],"6-83-11":[53.02,469.81],"5-41-5":[0.65,469.81],"4-20-2":[0.65,477.07],"6-83-12":[50.86,476.59],"6-83-13":[40.69,627.4],"5-41-6":[-1.79,627.4],"6-83-14":[-46.59,323.7],"6-83-15":[-87.65,232.09],"5-41-7":[-87.65,323.7],"4-20-3":[-87.65,627.4],"6-83-16":[-161.11,321.64],"6-83-17":[-92.99,1858.17],"5-41-8":[-173.82,1858.17],"6-83-18":[-78.58,3878.24],"6-83-19":[299.23,3814.01],"5-41-9":[-78.58,5595.76],"4-20-4":[-173.82,5595.76],"6-83-20":[674.01,4034.31],"6-83-21":[627.23,3448.75],"5-41-10":[-91.09,4411.42],"6-83-22":[-84.08,2931.28],"6-83-23":[-93.5,1395.64],"5-41-11":[-110.57,2931.28],"4-20-5":[-121.55,4411.42],"6-83-24":[-29.8,300.19],"6-83-25":[-71.95,1727.17],"5-41-12":[-71.95,1727.17],"6-83-26":[-76.15,1060.42],"6-83-27":[-94.46,1466.16],"5-41-13":[-145.36,1466.69],"4-20-6":[-145.36,2493.24],"6-83-28":[-107.49,-44.27],"6-83-29":[-112.89,-51.27],"5-41-14":[-112.89,723.52],"6-83-30":[-112.22,-52.38],"6-83-31":[-111.92,-50.21],"5-41-15":[-112.22,-49.03],"4-20-7":[-112.89,2422.23],"6-83-32":[-107.44,-46.38],"6-83-33":[-100.55,862.8],"5-41-16":[-107.44,862.8],"6-83-34":[-86.9,-10.47],"6-83-35":[-74.63,-31.32],"5-41-17":[-86.9,5.08],"4-20-8":[-107.44,862.8],"6-83-36":[-65.81,-24.56],"6-83-37":[-50.21,-9.89],"5-41-18":[-65.81,-9.89],"6-83-38":[-36.27,-11.19],"6-83-39":[-27.02,3059.56],"5-41-19":[-36.27,3059.56],"4-20-9":[-95.35,3059.56],"6-83-40":[-8.14,2.28],"6-83-41":[0.88,16.25],"5-41-20":[-11.33,16.25],"6-83-42":[7.73,33.52],"6-83-43":[16.98,55.76],"5-41-21":[7.73,55.76],"4-20-10":[-13.4,1977.92],"6-83-44":[26.42,65.98],"6-83-45":[28.62,71.78],"5-41-22":[26.35,79.74],"6-83-46":[31.75,77.92],"6-83-47":[36.38,85.71],"5-41-23":[31.75,89.7],"4-20-11":[26.35,92.37],"6-83-48":[41.07,88.96],"6-83-49":[41.42,88.26],"5-41-24":[31.65,1115.13],"6-83-50":[40.86,86.86],"6-83-51":[37.02,83.45],"5-41-25":[37.02,91.9],"4-20-12":[10.5,1115.13],"6-83-52":[33.5,75.38],"6-83-53":[30.59,67.43],"5-41-26":[30.52,77.84],"6-83-54":[28.68,62.32],"6-83-55":[29.58,2242.91],"5-41-27":[28.32,2242.91],"4-20-13":[27.25,2242.91],"6-83-56":[568.49,2841.08],"6-83-57":[2729.03,3100.22],"5-41-28":[568.49,3157.08],"6-83-58":[2651.98,3161.67],"6-83-59":[2944.39,3541.02],"5-41-29":[2651.98,3614.29],"4-20-14":[26.34,3615.32],"6-83-60":[3405.03,3807.22],"6-83-61":[3397.84,3762.75],"5-41-30":[3382.26,3807.22],"6-83-62":[3048.45,3423.55],"6-83-63":[-29.54,3056.25],"5-41-31":[-29.54,3423.55],"4-20-15":[-29.54,3807.22],"6-84-0":[13.6,32.73],"6-84-1":[15.68,35.52],"6-84-2":[14.45,462.92],"6-84-3":[6.06,600.63],"6-84-4":[1.87,99.91],"6-84-5":[-4.13,1436.73],"6-84-6":[-6.38,243.89],"6-84-7":[-6.07,220.04],"6-84-8":[14.07,1250.98],"6-84-9":[44.8,1096.24],"6-84-10":[-0.2,1512.31],"6-84-11":[81.33,975.89],"6-84-12":[69.62,1624.4],"6-84-13":[-109.79,1020.66],"6-84-14":[69.5,630.85],"6-84-15":[-35.73,381.12],"6-84-16":[-25.96,265.27],"6-84-17":[-108.09,292.44],"6-84-18":[2.44,3050.69],"6-84-19":[657.64,3289.8],"6-84-20":[218.2,3513.08],"6-84-21":[84.19,4466.14],"6-84-22":[-257.75,3206.24],"6-84-23":[-71.96,2955.44],"6-84-24":[-79.76,1006.29],"6-84-25":[-89.61,187.1],"6-84-26":[-101.44,-35.61],"6-84-27":[-105.8,-39.16],"6-84-28":[-108.15,-47.23],"6-84-29":[-116.74,-51.27],"6-84-30":[-120.83,-54.73],"6-84-31":[-121.14,-53.64],"6-84-32":[-120.53,-50.27],"6-84-33":[-111.77,-41.47],"6-84-34":[-97.72,-15.91],"6-84-35":[-82.46,-11.7],"6-84-36":[-73.49,-25.08],"6-84-37":[-58.26,-16.99],"6-84-38":[-39.63,-4.4],"6-84-39":[-29.1,810.67],"6-84-40":[-9.76,2.28],"6-84-41":[0.83,15.41],"6-84-42":[7.34,34.61],"6-84-43":[17.48,52.91],"6-84-44":[21.66,56.56],"6-84-45":[24.5,63.5],"6-84-46":[28.48,71.79],"6-84-47":[33.69,82.14],"6-84-48":[37.05,84.5],"6-84-49":[39.19,84.88],"6-84-50":[37.64,82.95],"6-84-51":[36.03,81.01],"6-84-52":[33.47,74.05],"6-84-53":[30.96,66.44],"6-84-54":[28.91,62.37],"6-84-55":[28.43,1169.19],"6-84-56":[306.84,2834.46],"6-84-57":[2494.94,2971.6],"6-84-58":[2350.48,2944.4],"6-84-59":[2693.02,3405.04],"6-84-60":[3368.56,3828.34],"6-84-61":[3423.54,3798.94],"6-84-62":[3056.21,3451.5],"6-84-63":[-29.54,3061.98],"6-85-0":[13.6,32.27],"6-85-1":[15.62,35.54],"5-42-0":[13.6,35.54],"6-85-2":[13.83,255.88],"6-85-3":[6.06,601.05],"5-42-1":[6.06,601.05],"6-85-4":[1.27,851.35],"6-85-5":[-6.92,1078],"5-42-2":[-6.92,1436.73],"6-85-6":[-11.51,152.24],"6-85-7":[-9.86,400.74],"5-42-3":[-11.51,400.74],"6-85-8":[20.67,1773.8],"6-85-9":[-5.63,1487.95],"5-42-4":[-5.63,1773.8],"6-85-10":[-53.11,1559.37],"6-85-11":[-77.24,864.4],"5-42-5":[-77.24,1559.37],"6-85-12":[-233.11,1394.5],"6-85-13":[29.59,600.13],"5-42-6":[-233.11,1624.4],"6-85-14":[24.54,429.21],"6-85-15":[-30.91,315.69],"5-42-7":[-35.73,630.85],"6-85-16":[-30.47,243.14],"6-85-17":[32.63,430.08],"5-42-8":[-108.09,430.08],"6-85-18":[50.89,3092.4],"6-85-19":[225.19,3228.78],"5-42-9":[2.44,3289.8],"6-85-20":[429.56,2831.82],"6-85-21":[250.94,3905.23],"5-42-10":[84.19,4466.14],"6-85-22":[-102.11,3453.88],"6-85-23":[-86,2164.41],"5-42-11":[-257.75,3453.88],"6-85-24":[-99.8,1992.49],"6-85-25":[-110.95,-39.87],"5-42-12":[-110.95,1992.49],"6-85-26":[-117.41,-43.92],"6-85-27":[-127.52,-50.66],"5-42-13":[-127.52,-35.61],"6-85-28":[-132,-54.32],"6-85-29":[-131.84,-55.09],"5-42-14":[-132,-47.23],"6-85-30":[-135.58,-59.06],"6-85-31":[-136.23,-60.26],"5-42-15":[-136.23,-53.64],"6-85-32":[-135.19,-55.88],"6-85-33":[-126.29,-49.83],"5-42-16":[-135.19,-41.47],"6-85-34":[-114.17,-41.73],"6-85-35":[-93.31,-35.72],"5-42-17":[-114.17,-11.7],"6-85-36":[-76.7,-25.51],"6-85-37":[-60.92,12.57],"5-42-18":[-76.7,12.57],"6-85-38":[-42.13,-11.51],"6-85-39":[-26.51,-4.38],"5-42-19":[-42.13,810.67],"6-85-40":[-10.15,1.03],"6-85-41":[0.61,18.41],"5-42-20":[-10.15,18.41],"6-85-42":[7.34,33.4],"6-85-43":[14.16,42.27],"5-42-21":[7.34,52.91],"6-85-44":[20.8,47.97],"6-85-45":[23.87,56.43],"5-42-22":[20.8,63.5],"6-85-46":[27.26,65.1],"6-85-47":[30.36,73.18],"5-42-23":[27.26,82.14],"6-85-48":[33.17,77.75],"6-85-49":[36.61,78.57],"5-42-24":[33.17,84.88],"6-85-50":[36.35,77.83],"6-85-51":[34.92,75.64],"5-42-25":[34.92,82.95],"6-85-52":[32.62,71.77],"6-85-53":[30.3,66.45],"5-42-26":[30.3,74.05],"6-85-54":[27.35,61.96],"6-85-55":[26.88,470.02],"5-42-27":[26.88,1169.19],"6-85-56":[29.8,2724.67],"6-85-57":[1711.99,2726.3],"5-42-28":[29.8,2971.6],"6-85-58":[1711.99,2693.03],"6-85-59":[2435.24,3395.87],"5-42-29":[1711.99,3405.04],"6-85-60":[3366.59,3894.08],"6-85-61":[3451.49,3860.75],"5-42-30":[3366.59,3894.08],"6-85-62":[3061.9,3477.38],"6-85-63":[-29.54,3064.64],"5-42-31":[-29.54,3477.38],"6-86-0":[13.59,31.92],"6-86-1":[14.49,35.54],"6-86-2":[11.81,372.35],"6-86-3":[3.34,515.4],"6-86-4":[1.06,851.78],"6-86-5":[-8.29,891.68],"6-86-6":[-14.79,-3.6],"6-86-7":[-14.04,414.42],"6-86-8":[-7.9,1361.22],"6-86-9":[-6.91,250.25],"6-86-10":[-12.46,219.71],"6-86-11":[30.07,213.66],"6-86-12":[40.86,217.01],"6-86-13":[-251.81,281.46],"6-86-14":[1.35,248.91],"6-86-15":[3.27,244.16],"6-86-16":[-29.82,713.35],"6-86-17":[-65.15,925.05],"6-86-18":[118.27,769.1],"6-86-19":[259.05,3625.13],"6-86-20":[437.51,4120.59],"6-86-21":[417.86,2348.74],"6-86-22":[-70.2,2575.17],"6-86-23":[-95.29,426.39],"6-86-24":[-105.6,-40.84],"6-86-25":[-120.89,-49.19],"6-86-26":[-133.2,-54.84],"6-86-27":[-143.88,-59.25],"6-86-28":[-150.34,-63.76],"6-86-29":[-151.57,-65.77],"6-86-30":[-150.84,-65.78],"6-86-31":[-149.1,-67.58],"6-86-32":[-147.35,-64],"6-86-33":[-138.48,-57.09],"6-86-34":[-126.92,-47.83],"6-86-35":[-107,-36.76],"6-86-36":[-89.42,-30.07],"6-86-37":[-64.88,-21.06],"6-86-38":[-48.23,209.37],"6-86-39":[-26.28,376.48],"6-86-40":[-11.57,0.81],"6-86-41":[0.26,18.37],"6-86-42":[7.71,27.18],"6-86-43":[12.56,39.03],"6-86-44":[18.37,47.62],"6-86-45":[23.48,52.93],"6-86-46":[25.88,59.58],"6-86-47":[28.88,66.34],"6-86-48":[31.73,72.21],"6-86-49":[35.04,79.61],"6-86-50":[34.66,75.08],"6-86-51":[34.42,72.8],"6-86-52":[31.27,70.56],"6-86-53":[28.81,64.55],"6-86-54":[26.88,60.6],"6-86-55":[24.41,59.6],"6-86-56":[27.96,2407.49],"6-86-57":[1004.17,2407.49],"6-86-58":[953.72,2435.25],"6-86-59":[2297.21,3458.7],"6-86-60":[3395.86,3925.85],"6-86-61":[3477.37,3915.12],"6-86-62":[3064.43,3500.58],"6-86-63":[-29.54,3065.4],"6-87-0":[13.59,31.44],"6-87-1":[14.36,35.37],"5-43-0":[13.59,35.54],"6-87-2":[10.38,28.84],"6-87-3":[2.68,330.3],"5-43-1":[2.68,515.4],"4-21-0":[2.68,601.05],"6-87-4":[-2.16,1077],"6-87-5":[-10.36,397.96],"5-43-2":[-10.36,1077],"6-87-6":[-15.86,38],"6-87-7":[-16.5,1223.93],"5-43-3":[-16.5,1223.93],"4-21-1":[-16.5,1436.73],"3-10-0":[-16.5,1436.73],"6-87-8":[-9.11,1275.39],"6-87-9":[-9.42,200.27],"5-43-4":[-9.42,1361.22],"6-87-10":[-16.29,154.26],"6-87-11":[12.98,142.53],"5-43-5":[-16.29,219.71],"4-21-2":[-77.24,1773.8],"6-87-12":[33.77,210.72],"6-87-13":[8.93,447.9],"5-43-6":[-251.81,447.9],"6-87-14":[78.72,1084.54],"6-87-15":[-9.6,566.99],"5-43-7":[-9.6,1084.54],"4-21-3":[-251.81,1624.4],"3-10-1":[-251.81,1773.8],"6-87-16":[64.29,821.12],"6-87-17":[59.56,2139.17],"5-43-8":[-65.15,2139.17],"6-87-18":[168.8,4103.6],"6-87-19":[306.05,4599.84],"5-43-9":[118.27,4599.84],"4-21-4":[-108.09,4599.84],"6-87-20":[773.43,4772.12],"6-87-21":[-3.55,3524.89],"5-43-10":[-3.55,4772.12],"6-87-22":[-79.15,2437.68],"6-87-23":[-101.84,529.04],"5-43-11":[-101.84,2575.17],"4-21-5":[-257.75,4772.12],"3-10-2":[-257.75,5595.76],"6-87-24":[-118.44,-45.37],"6-87-25":[-141.93,-54.11],"5-43-12":[-141.93,-40.84],"6-87-26":[-150.7,-61.38],"6-87-27":[-163.78,-68.36],"5-43-13":[-163.78,-54.84],"4-21-6":[-163.78,1992.49],"6-87-28":[-170.56,-73.16],"6-87-29":[-174.45,-76.65],"5-43-14":[-174.45,-63.76],"6-87-30":[-173.2,-74.88],"6-87-31":[-167.31,-74.44],"5-43-15":[-173.2,-65.78],"4-21-7":[-174.45,-47.23],"3-10-3":[-174.45,2493.24],"6-87-32":[-162.11,-70.63],"6-87-33":[-151.07,-64.32],"5-43-16":[-162.11,-57.09],"6-87-34":[-139.14,-55.61],"6-87-35":[-119.37,-45.34],"5-43-17":[-139.14,-36.76],"4-21-8":[-162.11,-11.7],"6-87-36":[-99.82,-34.09],"6-87-37":[-73.91,-24.11],"5-43-18":[-99.82,-21.06],"6-87-38":[-54.69,-13.14],"6-87-39":[-30.91,-5.98],"5-43-19":[-54.69,376.48],"4-21-9":[-99.82,810.67],"3-10-4":[-162.11,3059.56],"6-87-40":[-16.87,0.27],"6-87-41":[-1.52,14.6],"5-43-20":[-16.87,18.37],"6-87-42":[5.69,23.57],"6-87-43":[10.55,36.11],"5-43-21":[5.69,39.03],"4-21-10":[-16.87,52.91],"6-87-44":[18.37,45.54],"6-87-45":[20.45,51.47],"5-43-22":[18.37,52.93],"6-87-46":[25.88,56.59],"6-87-47":[28.04,63.44],"5-43-23":[25.88,66.34],"4-21-11":[18.37,82.14],"3-10-5":[-16.87,1977.92],"6-87-48":[31.01,78.85],"6-87-49":[35.15,81.15],"5-43-24":[31.01,81.15],"6-87-50":[34.57,74.84],"6-87-51":[33.74,72.48],"5-43-25":[33.74,75.08],"4-21-12":[31.01,84.88],"6-87-52":[30.61,72.75],"6-87-53":[28.03,63.27],"5-43-26":[28.03,72.75],"6-87-54":[25.92,57.16],"6-87-55":[24.41,55.46],"5-43-27":[24.41,60.6],"4-21-13":[24.41,1169.19],"3-10-6":[10.5,2242.91],"6-87-56":[25.66,1925.54],"6-87-57":[136.32,1897.68],"5-43-28":[25.66,2407.49],"6-87-58":[355.79,2297.22],"6-87-59":[2244.47,3491.07],"5-43-29":[355.79,3491.07],"4-21-14":[25.66,3491.07],"6-87-60":[3458.69,3965.2],"6-87-61":[3500.57,3965.2],"5-43-30":[3395.86,3965.2],"6-87-62":[3065.04,3512.38],"6-87-63":[-29.54,3065.32],"5-43-31":[-29.54,3512.38],"4-21-15":[-29.54,3965.2],"3-10-7":[-29.54,3965.2],"6-88-0":[13.58,31.01],"6-88-1":[13.27,34.8],"6-88-2":[9.6,27.7],"6-88-3":[1.29,19.28],"6-88-4":[-5.14,793.47],"6-88-5":[-12.58,3.96],"6-88-6":[-14.53,64.34],"6-88-7":[-18.34,249.41],"6-88-8":[-13.24,223.3],"6-88-9":[3.21,226.52],"6-88-10":[-20.98,136.47],"6-88-11":[2.46,131.78],"6-88-12":[34.5,332.5],"6-88-13":[145.85,893.06],"6-88-14":[222.12,731.79],"6-88-15":[55.49,447.99],"6-88-16":[49.18,2106.12],"6-88-17":[156.79,5451.96],"6-88-18":[244.11,5411.27],"6-88-19":[361.44,5666.76],"6-88-20":[181.3,4714.77],"6-88-21":[-15.14,3432.07],"6-88-22":[-77.27,1024.24],"6-88-23":[-103.33,403.18],"6-88-24":[-126.49,569.02],"6-88-25":[-152.38,-59.6],"6-88-26":[-167.17,-70.97],"6-88-27":[-179.31,-76.12],"6-88-28":[-187.08,-81.89],"6-88-29":[-189.2,-85.59],"6-88-30":[-189.78,-83.95],"6-88-31":[-187.17,-81.05],"6-88-32":[-180.89,-76.23],"6-88-33":[-170.46,-69.57],"6-88-34":[-155.68,-60.53],"6-88-35":[-133.85,-49.91],"6-88-36":[-111.17,-38.44],"6-88-37":[-86,-27.34],"6-88-38":[-66.93,-16.67],"6-88-39":[-40.72,-8.66],"6-88-40":[-24.16,-1.51],"6-88-41":[-5.67,10.45],"6-88-42":[1.91,19.79],"6-88-43":[7.53,31.3],"6-88-44":[12.64,39.85],"6-88-45":[17.05,49.39],"6-88-46":[21.65,55.46],"6-88-47":[26.11,62.12],"6-88-48":[30.67,79.28],"6-88-49":[-55.82,1713.79],"6-88-50":[33.89,78.24],"6-88-51":[33.4,70.95],"6-88-52":[29.73,72.08],"6-88-53":[27.21,63.18],"6-88-54":[24.13,56.07],"6-88-55":[22.3,50.78],"6-88-56":[16.28,1116.82],"6-88-57":[13.9,1564.5],"6-88-58":[355.79,2295.88],"6-88-59":[2244.13,3490.99],"6-88-60":[3476.04,3997.79],"6-88-61":[3512.37,4001.34],"6-88-62":[3064.8,3523.63],"6-88-63":[-29.54,3065.05],"6-89-0":[13.6,30.41],"6-89-1":[13.24,33.54],"5-44-0":[13.24,34.8],"6-89-2":[9.34,26.43],"6-89-3":[1.06,16.79],"5-44-1":[1.06,27.7],"6-89-4":[-9.36,2.28],"6-89-5":[-14.35,7.89],"5-44-2":[-14.35,793.47],"6-89-6":[-19.83,60.3],"6-89-7":[-28.71,104.27],"5-44-3":[-28.71,249.41],"6-89-8":[-30.59,100.53],"6-89-9":[14.74,139.63],"5-44-4":[-30.59,226.52],"6-89-10":[-23.64,118.52],"6-89-11":[12.07,117.67],"5-44-5":[-23.64,136.47],"6-89-12":[-17.42,204.12],"6-89-13":[-52.7,749.66],"5-44-6":[-52.7,893.06],"6-89-14":[235.46,1122.49],"6-89-15":[163.09,1082.6],"5-44-7":[55.49,1122.49],"6-89-16":[148.14,4445.78],"6-89-17":[252.71,5979.55],"5-44-8":[49.18,5979.55],"6-89-18":[784.14,7425.22],"6-89-20":[59.84,2777.08],"6-89-19":[190.61,7670.17],"5-44-9":[190.61,7670.17],"6-89-21":[3.23,1028.73],"5-44-10":[-15.14,4714.77],"6-89-22":[-10.18,913.48],"6-89-23":[-89.16,1654.1],"5-44-11":[-103.33,1654.1],"6-89-24":[-133.04,1010.35],"6-89-25":[-155.77,598.43],"5-44-12":[-155.77,1010.35],"6-89-26":[-173.23,-75.99],"6-89-27":[-184.16,-67.66],"5-44-13":[-184.16,-67.66],"6-89-28":[-193.17,-72.32],"6-89-29":[-194.63,-67.67],"5-44-14":[-194.63,-67.67],"6-89-30":[-195.24,-67.2],"6-89-31":[-194.81,-43.56],"5-44-15":[-195.24,-43.56],"6-89-32":[-191.21,-78.05],"6-89-33":[-180.97,-40.52],"5-44-16":[-191.21,-40.52],"6-89-34":[-165.05,-37.6],"6-89-35":[-149.67,-56.07],"5-44-17":[-165.05,-37.6],"6-89-36":[-128.73,-45.3],"6-89-37":[-102.87,-34.29],"5-44-18":[-128.73,-27.34],"6-89-38":[-81.85,-22.52],"6-89-39":[-54.75,-12.77],"5-44-19":[-81.85,-8.66],"6-89-40":[-37.19,-4.34],"6-89-41":[-16.37,3.13],"5-44-20":[-37.19,10.45],"6-89-42":[-2.98,13.04],"6-89-43":[4.23,24.34],"5-44-21":[-2.98,31.3],"6-89-44":[9.98,32.16],"6-89-45":[13.89,42.42],"5-44-22":[9.98,49.39],"6-89-46":[21.65,50.58],"6-89-47":[23.2,61.35],"5-44-23":[21.65,62.12],"6-89-48":[28.47,76.1],"6-89-49":[32.48,302.78],"5-44-24":[-55.82,1713.79],"6-89-50":[6.34,315.35],"6-89-51":[32.78,72.05],"5-44-25":[6.34,315.35],"6-89-52":[28.91,68.61],"6-89-53":[26.94,58.88],"5-44-26":[26.94,72.08],"6-89-54":[21.2,53.9],"6-89-55":[21.2,49.06],"5-44-27":[21.2,56.07],"6-89-56":[16.07,392.26],"6-89-57":[13.9,1769.28],"5-44-28":[13.9,1769.28],"6-89-58":[1383.42,2436.17],"6-89-59":[2295.87,3484.93],"5-44-29":[355.79,3490.99],"6-89-60":[3476.04,4020.7],"6-89-61":[3523.62,4020.7],"5-44-30":[3476.04,4020.7],"6-89-62":[3063.59,3529.73],"6-89-63":[-29.54,3064.81],"5-44-31":[-29.54,3529.73],"6-90-0":[13.56,29.93],"6-90-1":[12.18,32.39],"6-90-2":[9.21,25.5],"6-90-3":[0.25,16.06],"6-90-4":[-11.93,1.31],"6-90-5":[-15.18,-4.47],"6-90-6":[-19.83,102.14],"6-90-7":[-28.89,97.21],"6-90-8":[-30.59,91.65],"6-90-9":[11.33,169.41],"6-90-10":[-26.48,102.52],"6-90-11":[16.21,130.71],"6-90-12":[-4.57,132.71],"6-90-13":[-44.99,965.27],"6-90-14":[341.61,1507.27],"6-90-15":[71.29,1151.88],"6-90-16":[241.76,4807.35],"6-90-17":[805.57,6513.21],"6-90-18":[1232.72,7543.41],"6-90-20":[101.67,5343.32],"6-90-21":[81.23,447.8],"6-90-22":[129.06,998],"6-90-19":[396.49,8087.96],"6-90-23":[-71.01,1264.93],"6-90-24":[-72.08,1499.22],"6-90-25":[-97.09,1527.78],"6-90-26":[-172.11,969.76],"6-90-27":[-189.5,1943.78],"6-90-28":[-199.61,132.05],"6-90-29":[-204.11,-76.78],"6-90-30":[-205.07,-73.55],"6-90-31":[-204.43,-69.28],"6-90-32":[-200.91,-74.1],"6-90-33":[-190.7,-82.52],"6-90-34":[-178.25,-74.83],"6-90-35":[-156.76,-64.37],"6-90-36":[-137.02,-52.73],"6-90-37":[-110.72,-40.93],"6-90-38":[-90.74,-28.8],"6-90-39":[-64.94,-19.04],"6-90-40":[-47.65,-9.27],"6-90-41":[-26.36,-1.84],"6-90-42":[-11.95,7.04],"6-90-43":[1.09,18.97],"6-90-44":[6.57,26.74],"6-90-45":[11.56,36.44],"6-90-46":[16.22,45.25],"6-90-47":[21.29,56.94],"6-90-48":[26.15,64.98],"6-90-49":[29.48,73.84],"6-90-50":[27.75,2779.41],"6-90-51":[30.57,74.05],"6-90-52":[29.34,65.8],"6-90-53":[23.63,58.34],"6-90-54":[20.44,50.44],"6-90-55":[17.32,44.95],"6-90-56":[15.75,1525.64],"6-90-57":[392.25,2210.25],"6-90-58":[1769.27,2619.19],"6-90-59":[2436.16,3487.6],"6-90-60":[3484.48,4037.87],"6-90-61":[3527.59,4030.9],"6-90-62":[3063.36,3530.31],"6-90-63":[-29.54,3064.82],"6-91-0":[13.58,29.33],"6-91-1":[12.18,31.01],"5-45-0":[12.18,32.39],"6-91-2":[8.56,24.24],"6-91-3":[-0.35,15.89],"5-45-1":[-0.35,25.5],"4-22-0":[-0.35,34.8],"6-91-4":[-13.02,0.37],"6-91-5":[-17.46,-5.58],"5-45-2":[-17.46,1.31],"6-91-6":[-20,102],"6-91-7":[-29.05,103.01],"5-45-3":[-29.05,103.01],"4-22-1":[-29.05,793.47],"6-91-8":[-29.05,81.75],"6-91-9":[-9.54,122.72],"5-45-4":[-30.59,169.41],"6-91-10":[-28.84,110.81],"6-91-11":[16.8,118.68],"5-45-5":[-28.84,130.71],"4-22-2":[-30.59,226.52],"6-91-12":[41.21,133.68],"6-91-13":[17.89,487.76],"5-45-6":[-44.99,965.27],"6-91-14":[131.95,1504.92],"6-91-15":[271.47,1384.81],"5-45-7":[71.29,1507.27],"4-22-3":[-52.7,1507.27],"6-91-16":[329.52,4930.95],"6-91-17":[1039.82,5827.63],"5-45-8":[241.76,6513.21],"6-91-18":[1051.98,6379.76],"6-91-19":[2249.39,8560.58],"5-45-9":[396.49,8560.58],"4-22-4":[49.18,8560.58],"6-91-20":[176.06,6725.08],"6-91-21":[96.74,4563.58],"5-45-10":[81.23,6725.08],"6-91-22":[31.65,732.76],"6-91-23":[133.09,994.23],"5-45-11":[-71.01,1264.93],"4-22-5":[-103.33,6725.08],"6-91-24":[88.59,1273.26],"6-91-25":[133.67,698.38],"5-45-12":[-97.09,1527.78],"6-91-26":[29.03,1069.77],"6-91-27":[-98.98,2543.22],"5-45-13":[-189.5,2543.22],"4-22-6":[-189.5,2543.22],"6-91-28":[-197.25,2590.24],"6-91-29":[-213.05,1544.94],"5-45-14":[-213.05,2590.24],"6-91-30":[-213.9,-102.05],"6-91-31":[-208.09,-100.58],"5-45-15":[-213.9,-69.28],"4-22-7":[-213.9,2590.24],"6-91-32":[-205.64,-96.41],"6-91-33":[-194.02,-89.47],"5-45-16":[-205.64,-74.1],"6-91-34":[-182.42,-79.86],"6-91-35":[-161.36,-69.08],"5-45-17":[-182.42,-64.37],"4-22-8":[-205.64,-37.6],"6-91-36":[-142.2,-57.49],"6-91-37":[-116.73,-45.58],"5-45-18":[-142.2,-40.93],"6-91-38":[-98.13,-34.54],"6-91-39":[-76.39,-24.5],"5-45-19":[-98.13,-19.04],"4-22-9":[-142.2,-8.66],"6-91-40":[-59.57,-14.97],"6-91-41":[-39.69,-6.64],"5-45-20":[-59.57,-1.84],"6-91-42":[-24.55,1.1],"6-91-43":[-6.24,12.33],"5-45-21":[-24.55,18.97],"4-22-10":[-59.57,31.3],"6-91-44":[3.69,23.13],"6-91-45":[-0.46,882.59],"5-45-22":[-0.46,882.59],"6-91-46":[14.12,40.84],"6-91-47":[18.73,51.83],"5-45-23":[14.12,56.94],"4-22-11":[-0.46,882.59],"6-91-48":[26.15,57.63],"6-91-49":[26.58,64.22],"5-45-24":[26.15,73.84],"6-91-50":[28.51,71.32],"6-91-51":[27.46,68.43],"5-45-25":[27.46,2779.41],"4-22-12":[-55.82,2779.41],"6-91-52":[27.54,61.22],"6-91-53":[23.63,57.26],"5-45-26":[23.63,65.8],"6-91-54":[18.37,46.65],"6-91-55":[17.3,38.66],"5-45-27":[17.3,50.44],"4-22-13":[17.3,72.08],"6-91-56":[15.75,1873.55],"6-91-57":[1472.92,2662.65],"5-45-28":[15.75,2662.65],"6-91-58":[2210.24,2841.83],"6-91-59":[2619.18,3506.71],"5-45-29":[1769.27,3506.71],"4-22-14":[13.9,3506.71],"6-91-60":[3487.59,4042.04],"6-91-61":[3516.4,4030.73],"5-45-30":[3484.48,4042.04],"6-91-62":[3063.05,3527.6],"6-91-63":[-29.54,3066.42],"5-45-31":[-29.54,3530.31],"4-22-15":[-29.54,4042.04],"6-92-0":[13.55,28.88],"6-92-1":[11.24,30.24],"6-92-2":[7.88,23.28],"6-92-3":[-1.45,283.89],"6-92-4":[-12.53,-0.34],"6-92-5":[-17.94,255.31],"6-92-6":[-21.31,243.75],"6-92-7":[-24.37,117.76],"6-92-8":[-24.37,64.43],"6-92-9":[-19.87,203.65],"6-92-10":[-30.16,114.52],"6-92-11":[9.32,125.15],"6-92-12":[63.09,235.48],"6-92-13":[48.15,478.3],"6-92-14":[109.62,1419.87],"6-92-15":[276.31,4532.62],"6-92-16":[432.35,6633.62],"6-92-17":[908.55,7087.4],"6-92-18":[1029.39,4976.93],"6-92-19":[1276.56,7022.3],"6-92-20":[2453.79,7194.47],"6-92-21":[35.37,7787.57],"6-92-22":[-15.2,295.99],"6-92-23":[-6.93,1069.67],"6-92-24":[29.9,1095.71],"6-92-25":[-88.56,1197.87],"6-92-26":[-182.75,1006.73],"6-92-27":[-197.07,1132.42],"6-92-28":[-198.18,434.8],"6-92-29":[-212.75,2430.45],"6-92-30":[-213.9,-101.01],"6-92-31":[-207.87,-100.16],"6-92-32":[-205.79,-94.42],"6-92-33":[-195,-88.59],"6-92-34":[-182.48,-79.41],"6-92-35":[-161.34,-70.63],"6-92-36":[-142.37,-59.67],"6-92-37":[-120.53,-49.07],"6-92-38":[-104.92,-39.42],"6-92-39":[-84.27,-29.78],"6-92-40":[-67.56,-20.85],"6-92-41":[-47.53,-12.67],"6-92-42":[-33.56,-4.07],"6-92-43":[-15.92,6.04],"6-92-44":[-3.11,19.27],"6-92-45":[3.14,28.24],"6-92-46":[9.41,36.29],"6-92-47":[15.61,46.42],"6-92-48":[19.59,52.39],"6-92-49":[23.34,58.26],"6-92-50":[24.55,61.51],"6-92-51":[20.83,56.57],"6-92-52":[20.97,56.29],"6-92-53":[20.93,53.7],"6-92-54":[15.67,43.92],"6-92-55":[14.25,36.25],"6-92-56":[15.39,2339.17],"6-92-57":[1873.54,2935.32],"6-92-58":[2662.64,3173.47],"6-92-59":[2841.82,3593.63],"6-92-60":[3506.7,4042.04],"6-92-61":[3499.19,4001.04],"6-92-62":[3062.85,3516.41],"6-92-63":[-29.54,3066.46],"6-93-0":[13.56,28.31],"6-93-1":[11.24,29.45],"5-46-0":[11.24,30.24],"6-93-2":[7.36,22.43],"6-93-3":[-1.93,13.28],"5-46-1":[-1.93,283.89],"6-93-4":[-12.52,9.42],"6-93-5":[-19.04,346.14],"5-46-2":[-19.04,346.14],"6-93-6":[-25.93,405.51],"6-93-7":[-28.7,174.16],"5-46-3":[-28.7,405.51],"6-93-8":[-19.06,149.97],"6-93-9":[-3.71,236.06],"5-46-4":[-24.37,236.06],"6-93-10":[-30.26,155.46],"6-93-11":[10.19,162.81],"5-46-5":[-30.26,162.81],"6-93-12":[-1.52,446.71],"6-93-13":[73.33,2380.4],"5-46-6":[-1.52,2380.4],"6-93-14":[23.35,2712],"6-93-15":[124.82,3961.77],"5-46-7":[23.35,4532.62],"6-93-16":[105.62,5107.74],"6-93-17":[837.93,3794.4],"5-46-8":[105.62,7087.4],"6-93-18":[954.9,6062.91],"6-93-19":[1693.3,6911.73],"5-46-9":[954.9,7022.3],"6-93-20":[4293.12,6600.18],"6-93-21":[81.18,8103.55],"5-46-10":[35.37,8103.55],"6-93-22":[-46.13,2512.35],"6-93-23":[-31.32,1178.46],"5-46-11":[-46.13,2512.35],"6-93-24":[-19.46,1262.43],"6-93-25":[-161.45,1608.79],"5-46-12":[-161.45,1608.79],"6-93-26":[-181.92,-37.98],"6-93-27":[-194.57,-86.28],"5-46-13":[-197.07,1132.42],"6-93-28":[-196.82,-88.67],"6-93-29":[-203.21,351.9],"5-46-14":[-212.75,2430.45],"6-93-30":[-206.92,-92.98],"6-93-31":[-203.79,-91.46],"5-46-15":[-213.9,-91.46],"6-93-32":[-197.97,-88.46],"6-93-33":[-185.94,-84.21],"5-46-16":[-205.79,-84.21],"6-93-34":[-175.59,-76.82],"6-93-35":[-155.42,-69.13],"5-46-17":[-182.48,-69.13],"6-93-36":[-142.66,-61.65],"6-93-37":[-126.46,-53.23],"5-46-18":[-142.66,-49.07],"6-93-38":[-113.57,-44.2],"6-93-39":[-92.35,-34.33],"5-46-19":[-113.57,-29.78],"6-93-40":[-75.45,-25.32],"6-93-41":[-57.43,-17.51],"5-46-20":[-75.45,-12.67],"6-93-42":[-43.87,-9.49],"6-93-43":[-26.53,-2.26],"5-46-21":[-43.87,6.04],"6-93-44":[-14.66,3.69],"6-93-45":[-1.24,17.7],"5-46-22":[-14.66,28.24],"6-93-46":[5.93,28.99],"6-93-47":[11.24,38.3],"5-46-23":[5.93,46.42],"6-93-48":[19.38,44.79],"6-93-49":[19.38,49.77],"5-46-24":[19.38,58.26],"6-93-50":[20.9,50.43],"6-93-51":[20.83,47.65],"5-46-25":[20.83,61.51],"6-93-52":[18.26,48.46],"6-93-53":[18.26,48.79],"5-46-26":[18.26,56.29],"6-93-54":[14.04,41],"6-93-55":[13.54,635.17],"5-46-27":[13.54,635.17],"6-93-56":[15.52,2519.02],"6-93-57":[2339.16,3197.54],"5-46-28":[15.39,3197.54],"6-93-58":[2935.31,3364.13],"6-93-59":[3109.51,3621.13],"5-46-29":[2662.64,3621.13],"6-93-60":[3593.62,4025.51],"6-93-61":[3480.01,3923.74],"5-46-30":[3480.01,4042.04],"6-93-62":[3063.46,3499.2],"6-93-63":[-29.54,3067.15],"5-46-31":[-29.54,3516.41],"6-94-0":[13.47,27.85],"6-94-1":[10.93,28.85],"6-94-2":[6.21,22.12],"6-94-3":[-2.74,11.48],"6-94-4":[-13.52,-1.43],"6-94-5":[-19.79,311.63],"6-94-6":[-11.52,248.42],"6-94-7":[-28.7,355.11],"6-94-8":[-17.9,176.8],"6-94-9":[-7.94,232.96],"6-94-10":[-30.83,204.28],"6-94-11":[21.88,252.1],"6-94-12":[-18.21,544.69],"6-94-13":[103.65,2652.03],"6-94-14":[329.84,4375.85],"6-94-15":[163.35,3786.97],"6-94-16":[217.97,5220.28],"6-94-17":[745.63,3644.02],"6-94-18":[804.64,6686.7],"6-94-19":[4212.17,6437.5],"6-94-20":[4352.91,6733.83],"6-94-21":[458.23,8019.76],"6-94-22":[-62.15,8777.15],"6-94-23":[-49.51,1317.62],"6-94-24":[-131.49,1124.07],"6-94-25":[-161,1331.06],"6-94-26":[-174.06,-73.06],"6-94-27":[-177.34,-76.23],"6-94-28":[-181.5,-77.26],"6-94-29":[-187.4,-77.29],"6-94-30":[-187.32,-78.62],"6-94-31":[-187.52,-78.17],"6-94-32":[-182.92,-76.46],"6-94-33":[-176.4,-74.65],"6-94-34":[-168.43,-71.13],"6-94-35":[-151.14,-67.72],"6-94-36":[-139.6,-60.57],"6-94-37":[-126.46,-54.12],"6-94-38":[-114.22,-45.3],"6-94-39":[-93.08,-37.72],"6-94-40":[-77.95,-29.61],"6-94-41":[-61.78,-22.17],"6-94-42":[-50.7,-14.14],"6-94-43":[-33.49,-7.53],"6-94-44":[-21.33,-1.23],"6-94-45":[-8.99,10.6],"6-94-46":[0.56,21.41],"6-94-47":[7.51,31.9],"6-94-48":[11.75,38.12],"6-94-49":[15.47,42.62],"6-94-50":[16.83,42.88],"6-94-51":[15.6,40.98],"6-94-52":[12.93,36.12],"6-94-53":[11.48,39.7],"6-94-54":[10.61,32.65],"6-94-55":[10.62,1029.1],"6-94-56":[635.16,2637.61],"6-94-57":[2519.01,3300.48],"6-94-58":[3197.53,3450.97],"6-94-59":[3321.28,3672.41],"6-94-60":[3621.12,3954.97],"6-94-61":[3420.25,3850.88],"6-94-62":[3064.94,3480.02],"6-94-63":[-29.54,3067.91],"6-95-0":[13.31,27.3],"6-95-1":[10.93,27.94],"5-47-0":[10.93,28.85],"6-95-2":[6.2,21.84],"6-95-3":[-3.28,10.22],"5-47-1":[-3.28,22.12],"4-23-0":[-3.28,283.89],"6-95-4":[-13.57,46.56],"6-95-5":[-14.69,348.59],"5-47-2":[-19.79,348.59],"6-95-6":[-9.39,401.33],"6-95-7":[-9.94,941.07],"5-47-3":[-28.7,941.07],"4-23-1":[-28.7,941.07],"3-11-0":[-29.05,941.07],"6-95-8":[-21.59,733.23],"6-95-9":[-13.86,628.73],"5-47-4":[-21.59,733.23],"6-95-10":[-32.57,242.85],"6-95-11":[53.1,262.78],"5-47-5":[-32.57,262.78],"4-23-2":[-32.57,733.23],"6-95-12":[74.14,2173.74],"6-95-13":[176.51,3529.7],"5-47-6":[-18.21,3529.7],"6-95-14":[474.07,4279.84],"6-95-15":[301.44,3328.41],"5-47-7":[163.35,4375.85],"4-23-3":[-18.21,4532.62],"3-11-1":[-52.7,4532.62],"2-5-0":[-251.81,4532.62],"6-95-16":[-260.5,4987.09],"6-95-17":[619.6,2654.79],"5-47-8":[-260.5,5220.28],"6-95-18":[731.86,6201.27],"6-95-19":[4444.41,6890.4],"5-47-9":[731.86,6890.4],"4-23-4":[-260.5,7087.4],"6-95-20":[4425.14,6254.63],"6-95-21":[988.33,7070.27],"5-47-10":[458.23,8019.76],"6-95-22":[-69.58,8478.4],"6-95-23":[-139.77,533.63],"5-47-11":[-139.77,8777.15],"4-23-5":[-139.77,8777.15],"3-11-2":[-260.5,8777.15],"6-95-24":[-131.42,26.16],"6-95-25":[-146.13,-61.4],"5-47-12":[-161,1331.06],"6-95-26":[-150.96,-63.4],"6-95-27":[-152.36,-64.19],"5-47-13":[-177.34,-63.4],"4-23-6":[-197.07,1608.79],"6-95-28":[-152.61,-62.12],"6-95-29":[-153.05,-59.77],"5-47-14":[-187.4,-59.77],"6-95-30":[-153.22,-59.81],"6-95-31":[-153.97,-60.33],"5-47-15":[-187.52,-59.81],"4-23-7":[-213.9,2430.45],"3-11-3":[-213.9,2590.24],"2-5-1":[-260.5,8777.15],"1-2-0":[-398.55,8777.15],"6-95-32":[-153.84,-61.96],"6-95-33":[-150.16,-62.76],"5-47-16":[-182.92,-61.96],"6-95-34":[-147.07,-63.18],"6-95-35":[-139.29,-62.21],"5-47-17":[-168.43,-62.21],"4-23-8":[-205.79,-61.96],"6-95-36":[-135.36,-58.3],"6-95-37":[-121.04,-51.25],"5-47-18":[-139.6,-51.25],"6-95-38":[-111.37,-44.8],"6-95-39":[-96.39,-38.31],"5-47-19":[-114.22,-37.72],"4-23-9":[-142.66,-29.78],"3-11-4":[-205.79,-8.66],"6-95-40":[-87.28,-30.97],"6-95-41":[-73.3,-25.9],"5-47-20":[-87.28,-22.17],"6-95-42":[-61.25,-17.39],"6-95-43":[-45.22,-11.38],"5-47-21":[-61.25,-7.53],"4-23-10":[-87.28,6.04],"6-95-44":[-34.87,-6.02],"6-95-45":[-20.9,0.57],"5-47-22":[-34.87,10.6],"6-95-46":[-8.31,12.66],"6-95-47":[2.81,22.59],"5-47-23":[-8.31,31.9],"4-23-11":[-34.87,46.42],"3-11-5":[-87.28,882.59],"2-5-2":[-205.79,3059.56],"6-95-48":[11.13,29.29],"6-95-49":[11.13,33.22],"5-47-24":[11.13,42.62],"6-95-50":[13.37,33.58],"6-95-51":[13.37,32.64],"5-47-25":[13.37,42.88],"4-23-12":[11.13,61.51],"6-95-52":[10.23,30.49],"6-95-53":[10.23,23.8],"5-47-26":[10.23,39.7],"6-95-54":[6.78,21.99],"6-95-55":[6.78,1290.06],"5-47-27":[6.78,1290.06],"4-23-13":[6.78,1290.06],"3-11-6":[-55.82,2779.41],"6-95-56":[1007.52,2688.65],"6-95-57":[2637.6,3479.02],"5-47-28":[635.16,3479.02],"6-95-58":[3300.47,3627.63],"6-95-59":[3450.96,3738.39],"5-47-29":[3197.53,3738.39],"4-23-14":[15.39,3738.39],"6-95-60":[3672.4,3883.62],"6-95-61":[3372.97,3781.94],"5-47-30":[3372.97,3954.97],"6-95-62":[3066.6,3420.26],"6-95-63":[-29.54,3069.78],"5-47-31":[-29.54,3480.02],"4-23-15":[-29.54,4042.04],"3-11-7":[-29.54,4042.04],"2-5-3":[-55.82,4042.04],"1-2-1":[-242.83,5869.55],"6-96-0":[13.05,27.12],"6-96-1":[10.66,27.25],"6-96-2":[6.32,21.6],"6-96-3":[-3.81,327.9],"6-96-4":[-13.97,41.97],"6-96-5":[-14.52,491.93],"6-96-6":[-12.84,766.61],"6-96-7":[15.52,1577.7],"6-96-8":[23.06,974.81],"6-96-9":[0.51,751.03],"6-96-10":[-32.17,917.02],"6-96-11":[22.51,457.27],"6-96-12":[87.23,1266.17],"6-96-13":[216.38,3266],"6-96-14":[707.82,4151.48],"6-96-15":[820.5,4116.23],"6-96-16":[-31.39,3824.31],"6-96-17":[290.2,2504.01],"6-96-18":[1263.81,5909.96],"6-96-19":[3248.18,6767.17],"6-96-20":[4109.93,6522.84],"6-96-21":[2989.51,7463.69],"6-96-22":[-83.69,7512.84],"6-96-23":[-109,1663.78],"6-96-24":[-122.52,1062.24],"6-96-25":[-126.56,-53.86],"6-96-26":[-128.85,-59.44],"6-96-27":[-129.38,407.51],"6-96-28":[-128.18,114.95],"6-96-29":[-123.94,-53.59],"6-96-30":[-121.58,-48.89],"6-96-31":[-126.69,-47.66],"6-96-32":[-127.67,-47.94],"6-96-33":[-128.62,-48.79],"6-96-34":[-129.46,-51.46],"6-96-35":[-129.43,-54.63],"6-96-36":[-128.76,-55.19],"6-96-37":[-118.48,-52.16],"6-96-38":[-109.45,-47.88],"6-96-39":[-96.5,-43.64],"6-96-40":[-90.53,-37.51],"6-96-41":[-79.29,-30.63],"6-96-42":[-69.21,-23.04],"6-96-43":[-55.83,-17.8],"6-96-44":[-44.21,-11.23],"6-96-45":[-29.81,-4.63],"6-96-46":[-17.32,4.18],"6-96-47":[-2.33,15.19],"6-96-48":[3,21.54],"6-96-49":[6.76,26.13],"6-96-50":[9.32,27.61],"6-96-51":[9.2,26.58],"6-96-52":[7.16,26.06],"6-96-53":[2.39,19.5],"6-96-54":[2.39,14.94],"6-96-55":[3.38,1584.77],"6-96-56":[1290.05,2802.12],"6-96-57":[2688.64,3518.93],"6-96-58":[3479.01,3704.38],"6-96-59":[3627.62,3756.39],"6-96-60":[3652.33,3799.9],"6-96-61":[3341.14,3696.84],"6-96-62":[3068.58,3372.98],"6-96-63":[-29.54,3073.17],"6-97-0":[12.85,27.04],"6-97-1":[10.66,26.67],"5-48-0":[10.66,27.25],"6-97-2":[5.88,21.3],"6-97-3":[-5.43,785.33],"5-48-1":[-5.43,785.33],"6-97-4":[-15.46,476.72],"6-97-5":[-7.89,604.4],"5-48-2":[-15.46,604.4],"6-97-6":[-13.92,806.23],"6-97-7":[44.76,1618.98],"5-48-3":[-13.92,1618.98],"6-97-8":[91.31,1177.41],"6-97-9":[10.89,764.98],"5-48-4":[0.51,1177.41],"6-97-10":[-24.59,1092.04],"6-97-11":[-3.1,823.06],"5-48-5":[-32.17,1092.04],"6-97-12":[74.37,2561.56],"6-97-13":[260.85,2677.49],"5-48-6":[74.37,3266],"6-97-14":[697.66,2882.06],"6-97-15":[906.92,4155.27],"5-48-7":[697.66,4155.27],"6-97-16":[219.52,4825.04],"6-97-17":[271.2,4733.64],"5-48-8":[-31.39,4825.04],"6-97-18":[2241.79,5772.12],"6-97-19":[2644.39,6131.65],"5-48-9":[1263.81,6767.17],"6-97-20":[3253.98,6237.58],"6-97-21":[107.58,7221.31],"5-48-10":[107.58,7463.69],"6-97-22":[-53.33,5335.5],"6-97-23":[-92.67,2777.96],"5-48-11":[-109,7512.84],"6-97-24":[-99.38,3021.9],"6-97-25":[-120.76,1489.97],"5-48-12":[-126.56,3021.9],"6-97-26":[-124.46,365.67],"6-97-27":[-120.57,671.16],"5-48-13":[-129.38,671.16],"6-97-28":[-127.91,253.16],"6-97-29":[-120.45,634.69],"5-48-14":[-128.18,634.69],"6-97-30":[-106.53,2140.29],"6-97-31":[-94.44,-30.37],"5-48-15":[-126.69,2140.29],"6-97-32":[-93.37,-30.41],"6-97-33":[-100.58,-33.35],"5-48-16":[-128.62,-30.41],"6-97-34":[-105.96,-38.16],"6-97-35":[-109.16,-42.72],"5-48-17":[-129.46,-38.16],"6-97-36":[-110.94,-44.59],"6-97-37":[-107.55,-47.06],"5-48-18":[-128.76,-44.59],"6-97-38":[-103.96,-48.28],"6-97-39":[-97.49,-45.28],"5-48-19":[-109.45,-43.64],"6-97-40":[-91.36,-40.59],"6-97-41":[-84.52,-34.82],"5-48-20":[-91.36,-30.63],"6-97-42":[-74.46,-27.37],"6-97-43":[-60.54,-22.77],"5-48-21":[-74.46,-17.8],"6-97-44":[-55.82,-16.33],"6-97-45":[-41.68,-9.34],"5-48-22":[-55.82,-4.63],"6-97-46":[-29.34,-2.32],"6-97-47":[-13.57,4.79],"5-48-23":[-29.34,15.19],"6-97-48":[-3.72,11.69],"6-97-49":[2.56,17.71],"5-48-24":[-3.72,26.13],"6-97-50":[5.93,18.3],"6-97-51":[6.01,18.13],"5-48-25":[5.93,27.61],"6-97-52":[3.78,17.87],"6-97-53":[-1.51,12.15],"5-48-26":[-1.51,26.06],"6-97-54":[-2.2,7.25],"6-97-55":[-0.05,1584.77],"5-48-27":[-2.2,1584.77],"6-97-56":[1497.42,2824.51],"6-97-57":[2802.11,3500.23],"5-48-28":[1290.05,3518.93],"6-97-58":[3409.99,3719.54],"6-97-59":[3704.37,3755.97],"5-48-29":[3409.99,3756.39],"6-97-60":[3612.81,3775.22],"6-97-61":[3317.34,3652.34],"5-48-30":[3317.34,3799.9],"6-97-62":[3069.22,3341.15],"6-97-63":[-29.54,3074.67],"5-48-31":[-29.54,3372.98],"6-98-0":[12.57,27.03],"6-98-1":[10.26,26.35],"6-98-2":[4.57,21],"6-98-3":[-6.42,915.41],"6-98-4":[-16.48,237.04],"6-98-5":[-7.98,810.48],"6-98-6":[-11.47,688.57],"6-98-7":[12.53,1569.96],"6-98-8":[124.42,1090.5],"6-98-9":[50.44,887.64],"6-98-10":[-27,775.1],"6-98-11":[69.08,615.55],"6-98-12":[151.22,2887.36],"6-98-13":[660.12,2999.01],"6-98-14":[1179.37,3482.56],"6-98-15":[1006.26,3928.85],"6-98-16":[422.97,2953.75],"6-98-17":[1074.68,5415.08],"6-98-18":[2272.72,5725.81],"6-98-19":[2617.61,5462.57],"6-98-20":[3023.42,5731.48],"6-98-21":[133.36,6535.05],"6-98-22":[23.08,5106.11],"6-98-23":[12.3,3346.34],"6-98-24":[-17.38,2464.8],"6-98-25":[-86.67,2574.03],"6-98-26":[-135.7,1748.97],"6-98-27":[-96.39,1498.37],"6-98-28":[-92.56,1085.71],"6-98-29":[-80.53,550.46],"6-98-30":[-71.73,3433.72],"6-98-31":[-71.07,1843.03],"6-98-32":[-66.71,243],"6-98-33":[-76.31,-20.39],"6-98-34":[-86.19,-23.44],"6-98-35":[-91.28,-29.19],"6-98-36":[-94.14,-13.36],"6-98-37":[-101.07,-41.41],"6-98-38":[-100.77,-44.67],"6-98-39":[-96.25,-45.32],"6-98-40":[-93.34,-42.41],"6-98-41":[-85,-35.94],"6-98-42":[-76.44,-31.6],"6-98-43":[-68.5,-27.91],"6-98-44":[-62.86,-21.68],"6-98-45":[-50.56,-14.99],"6-98-46":[-38.51,-7.65],"6-98-47":[-23.36,-2.19],"6-98-48":[-12.63,4.07],"6-98-49":[-1.83,10.05],"6-98-50":[0.77,11.74],"6-98-51":[1.97,12.17],"6-98-52":[-0.24,11.35],"6-98-53":[-6.56,6.36],"6-98-54":[-6.92,6.59],"6-98-55":[-6.32,1715.72],"6-98-56":[1527.57,2802.84],"6-98-57":[2705.17,3410],"6-98-58":[3387.34,3708.3],"6-98-59":[3611.48,3736.73],"6-98-60":[3543.29,3737.71],"6-98-61":[3284.66,3612.82],"6-98-62":[3070.76,3317.35],"6-98-63":[-29.54,3075.47],"6-99-0":[12.31,27.01],"6-99-1":[10.26,25.84],"5-49-0":[10.26,27.03],"6-99-2":[4.57,20.48],"6-99-3":[-6.18,969.4],"5-49-1":[-6.42,969.4],"4-24-0":[-6.42,969.4],"6-99-4":[-16.18,517.22],"6-99-5":[-8.15,590],"5-49-2":[-16.48,810.48],"6-99-6":[-11.65,855.64],"6-99-7":[102.24,1354.63],"5-49-3":[-11.65,1569.96],"4-24-1":[-16.48,1618.98],"6-99-8":[120.14,1086.98],"6-99-9":[86.63,868.73],"5-49-4":[50.44,1090.5],"6-99-10":[-31.02,599.89],"6-99-11":[80.02,729.83],"5-49-5":[-31.02,775.1],"4-24-2":[-32.17,1177.41],"6-99-12":[187.08,2274.47],"6-99-13":[527.52,3424.72],"5-49-6":[151.22,3424.72],"6-99-14":[1035.39,3181.14],"6-99-15":[1160.58,3821.64],"5-49-7":[1006.26,3928.85],"4-24-3":[74.37,4155.27],"6-99-16":[637.58,3902.64],"6-99-17":[836.31,3828.18],"5-49-8":[422.97,5415.08],"6-99-18":[1288.02,5499.12],"6-99-19":[2175.47,6216.6],"5-49-9":[1288.02,6216.6],"4-24-4":[-31.39,6767.17],"6-99-20":[2779.55,6063.79],"6-99-21":[1586.78,6434.65],"5-49-10":[133.36,6535.05],"6-99-22":[657.1,5432.09],"6-99-23":[300.67,3530.75],"5-49-11":[12.3,5432.09],"4-24-5":[-109,7512.84],"6-99-24":[129.64,2554.75],"6-99-25":[-17.17,2536.99],"5-49-12":[-86.67,2574.03],"6-99-26":[-78.1,2080.04],"6-99-27":[-90.57,2009.72],"5-49-13":[-135.7,2080.04],"4-24-6":[-135.7,3021.9],"6-99-28":[-65.06,1760.05],"6-99-29":[-72.95,1543.06],"5-49-14":[-92.56,1760.05],"6-99-30":[-57.01,2251.47],"6-99-31":[-38.89,2884.86],"5-49-15":[-71.73,3433.72],"4-24-7":[-128.18,3433.72],"6-99-32":[-81.91,3098.13],"6-99-33":[-45.75,302.5],"5-49-16":[-81.91,3098.13],"6-99-34":[-54.35,-15.47],"6-99-35":[-71.17,-18.5],"5-49-17":[-91.28,-15.47],"4-24-8":[-129.46,3098.13],"6-99-36":[-82.83,-25.9],"6-99-37":[-88.25,-33.31],"5-49-18":[-101.07,-13.36],"6-99-38":[-94.27,-41.22],"6-99-39":[-95.18,-42.76],"5-49-19":[-100.77,-41.22],"4-24-9":[-128.76,-13.36],"6-99-40":[-92.2,-40.17],"6-99-41":[-83.68,-35.94],"5-49-20":[-93.34,-35.94],"6-99-42":[-78.69,-34.93],"6-99-43":[-74.99,-31.99],"5-49-21":[-78.69,-27.91],"4-24-10":[-93.34,-17.8],"6-99-44":[-72.56,-26.45],"6-99-45":[-59.76,-19.83],"5-49-22":[-72.56,-14.99],"6-99-46":[-48.96,-13.12],"6-99-47":[-34.76,-6.95],"5-49-23":[-48.96,-2.19],"4-24-11":[-72.56,15.19],"6-99-48":[-22.48,-1.82],"6-99-49":[-11.77,0.78],"5-49-24":[-22.48,10.05],"6-99-50":[-6.68,3.52],"6-99-51":[-3.06,3.63],"5-49-25":[-6.68,12.17],"4-24-12":[-22.48,27.61],"6-99-52":[-6.11,2.94],"6-99-53":[-14.49,-0.23],"5-49-26":[-14.49,11.35],"6-99-54":[-16.12,2.4],"6-99-55":[-5.53,1741.17],"5-49-27":[-16.12,1741.17],"4-24-13":[-16.12,1741.17],"6-99-56":[1318.62,2705.18],"6-99-57":[2640.6,3387.35],"5-49-28":[1318.62,3410],"6-99-58":[3292.46,3611.49],"6-99-59":[3525.75,3694.95],"5-49-29":[3292.46,3736.73],"4-24-14":[1290.05,3756.39],"6-99-60":[3433.71,3696.05],"6-99-61":[3240.36,3543.3],"5-49-30":[3240.36,3737.71],"6-99-62":[3070.72,3284.67],"6-99-63":[-29.54,3075.96],"5-49-31":[-29.54,3317.35],"4-24-15":[-29.54,3799.9],"6-100-0":[12.14,26.99],"6-100-1":[10.27,25.24],"6-100-2":[3.43,20.53],"6-100-3":[-0.76,788.17],"6-100-4":[-13.05,864.96],"6-100-5":[-6.27,624.53],"6-100-6":[-13.4,737.36],"6-100-7":[45.51,676.85],"6-100-8":[147.98,958.88],"6-100-9":[114.45,855.83],"6-100-10":[-24.8,555.66],"6-100-11":[130.97,852.88],"6-100-12":[253.49,918],"6-100-13":[346.44,3194.59],"6-100-14":[732.53,2295.19],"6-100-15":[986.95,3379.04],"6-100-16":[844.64,3558.09],"6-100-17":[745.38,1902.58],"6-100-18":[1168.55,5176.87],"6-100-19":[1398.27,4952.19],"6-100-20":[475.77,6100.38],"6-100-21":[222.1,7111.28],"6-100-22":[347.18,4334.26],"6-100-23":[41.06,3117.27],"6-100-24":[36.19,3084.02],"6-100-25":[52.6,2792.64],"6-100-26":[-35.3,1323.34],"6-100-27":[-72.12,1726.89],"6-100-28":[-49.94,1062.2],"6-100-29":[-35.14,1503.56],"6-100-30":[-117.38,2181.1],"6-100-31":[-68.74,1252.6],"6-100-32":[-20.47,3783.24],"6-100-33":[-69.41,3170.1],"6-100-34":[-37.01,1.6],"6-100-35":[-51.44,-9.86],"6-100-36":[-64.35,-13.79],"6-100-37":[-82.44,-27.14],"6-100-38":[-86.64,-34.46],"6-100-39":[-87.84,-34.63],"6-100-40":[-85.52,-36.5],"6-100-41":[-80.19,-37.62],"6-100-42":[-78.68,-37.25],"6-100-43":[-81.4,-35.65],"6-100-44":[-80.06,-30.59],"6-100-45":[-66.32,-24.76],"6-100-46":[-55.39,-18.12],"6-100-47":[-41.05,-11.56],"6-100-48":[-30.56,-6.29],"6-100-49":[-19.26,-3.51],"6-100-50":[-13.29,-1.45],"6-100-51":[-9.52,-0.85],"6-100-52":[-12.52,-1.6],"6-100-53":[-17.41,-3.38],"6-100-54":[-19.91,-2],"6-100-55":[-15.87,1791.71],"6-100-56":[1558.66,2640.61],"6-100-57":[2600.88,3292.47],"6-100-58":[3117.94,3525.76],"6-100-59":[3441.92,3605.31],"6-100-60":[3363.73,3601.4],"6-100-61":[3196.66,3433.72],"6-100-62":[3070.69,3240.37],"6-100-63":[-29.54,3075.89],"6-101-0":[12.06,26.97],"6-101-1":[10.27,24.01],"5-50-0":[10.27,26.99],"6-101-2":[1.88,20.61],"6-101-3":[-0.04,776.54],"5-50-1":[-0.76,788.17],"6-101-4":[-9.34,841.94],"6-101-5":[-23.59,832.71],"5-50-2":[-23.59,864.96],"6-101-6":[-24.81,718.4],"6-101-7":[121.13,1011.68],"5-50-3":[-24.81,1011.68],"6-101-8":[224.5,929.44],"6-101-9":[162.57,836.04],"5-50-4":[114.45,958.88],"6-101-10":[-27.02,706.58],"6-101-11":[88.71,984.1],"5-50-5":[-27.02,984.1],"6-101-12":[253.55,1472.91],"6-101-13":[369.08,2280.07],"5-50-6":[253.49,3194.59],"6-101-14":[518.21,1985.15],"6-101-15":[932.38,2132.01],"5-50-7":[518.21,3379.04],"6-101-16":[778.87,2678.17],"6-101-17":[651.88,2311.12],"5-50-8":[651.88,3558.09],"6-101-18":[992.38,3502.2],"6-101-19":[629.17,4106.19],"5-50-9":[629.17,5176.87],"6-101-20":[194.36,4524.83],"6-101-21":[96.37,1942.57],"5-50-10":[96.37,7111.28],"6-101-22":[245.14,2858.21],"6-101-23":[21.03,2530.43],"5-50-11":[21.03,4334.26],"6-101-24":[-94.3,2937.63],"6-101-25":[-56.68,2686.47],"5-50-12":[-94.3,3084.02],"6-101-26":[-2.53,1984.96],"6-101-27":[-62.53,1793.02],"5-50-13":[-72.12,1984.96],"6-101-28":[-88.98,988.31],"6-101-29":[-13.69,296.81],"5-50-14":[-88.98,1503.56],"6-101-30":[-7.26,564.09],"6-101-31":[-34.24,1041.7],"5-50-15":[-117.38,2181.1],"6-101-32":[-50.63,1126.85],"6-101-33":[-55.36,2229.43],"5-50-16":[-69.41,3783.24],"6-101-34":[-36.88,2218.28],"6-101-35":[-23.97,362.89],"5-50-17":[-51.44,2218.28],"6-101-36":[-50.01,-8.05],"6-101-37":[-67.22,-17.95],"5-50-18":[-82.44,-8.05],"6-101-38":[-72.92,-27.95],"6-101-39":[-72.68,-32.21],"5-50-19":[-87.84,-27.95],"6-101-40":[-76.24,-33.32],"6-101-41":[-78.06,-36.98],"5-50-20":[-85.52,-33.32],"6-101-42":[-80.1,-38.14],"6-101-43":[-82.02,-39.33],"5-50-21":[-82.02,-35.65],"6-101-44":[-82.43,-34.06],"6-101-45":[-71.27,-28.18],"5-50-22":[-82.43,-24.76],"6-101-46":[-62.71,-21.81],"6-101-47":[-49.64,-15.77],"5-50-23":[-62.71,-11.56],"6-101-48":[-39.39,-10.57],"6-101-49":[-28.16,-7.19],"5-50-24":[-39.39,-3.51],"6-101-50":[-21.77,-4.94],"6-101-51":[-17.14,-4.86],"5-50-25":[-21.77,-0.85],"6-101-52":[-18.23,-5.13],"6-101-53":[-25.73,-6.91],"5-50-26":[-25.73,-1.6],"6-101-54":[-26.47,-8.94],"6-101-55":[-27.05,1793.86],"5-50-27":[-27.05,1793.86],"6-101-56":[1569.31,2600.89],"6-101-57":[2518.51,3117.95],"5-50-28":[1558.66,3292.47],"6-101-58":[2973.88,3441.93],"6-101-59":[3288.11,3528.69],"5-50-29":[2973.88,3605.31],"6-101-60":[3280.25,3498.6],"6-101-61":[3169.63,3363.74],"5-50-30":[3169.63,3601.4],"6-101-62":[3069.83,3196.67],"6-101-63":[-29.54,3075.29],"5-50-31":[-29.54,3240.37],"6-102-0":[12.03,26.96],"6-102-1":[10.02,23.17],"6-102-2":[1.63,20.52],"6-102-3":[-0.71,3.6],"6-102-4":[-9.34,927.44],"6-102-5":[-21.44,1119.08],"6-102-6":[-21.06,734.39],"6-102-7":[132.34,887.81],"6-102-8":[166.72,947.89],"6-102-9":[178.95,743.5],"6-102-10":[-23.46,607.14],"6-102-11":[188.2,1969.85],"6-102-12":[317.03,2509.72],"6-102-13":[401.97,1987.12],"6-102-14":[522.51,2758.43],"6-102-15":[862.62,2221.84],"6-102-16":[705.9,1397.18],"6-102-17":[902.24,2304.17],"6-102-18":[874.91,1918.57],"6-102-19":[285.5,3718.19],"6-102-20":[36.4,3019.64],"6-102-21":[48.41,2199.58],"6-102-22":[81.86,2506.96],"6-102-23":[-4.49,1720.45],"6-102-24":[-110.94,1495.1],"6-102-25":[-45.58,1791.56],"6-102-26":[-43.69,2581.3],"6-102-27":[-24.82,2426.49],"6-102-28":[-33.45,1298.21],"6-102-29":[2.64,41.22],"6-102-30":[-11.18,1014.85],"6-102-31":[-30.38,1601.85],"6-102-32":[-4.18,1034.19],"6-102-33":[5.39,373.32],"6-102-34":[-27.49,3442.9],"6-102-35":[-16.46,32.46],"6-102-36":[-35.92,-0.17],"6-102-37":[-55.89,-9.77],"6-102-38":[-63.68,-20.55],"6-102-39":[-67.07,-25.59],"6-102-40":[-74.45,-31.39],"6-102-41":[-78.87,-34.22],"6-102-42":[-80.62,-38.59],"6-102-43":[-81.5,-37.5],"6-102-44":[-81.55,-36.82],"6-102-45":[-75.32,-31.36],"6-102-46":[-66.17,-25.52],"6-102-47":[-55.15,-19.95],"6-102-48":[-45.84,-14.58],"6-102-49":[-34.14,-11.03],"6-102-50":[-27.4,-8.6],"6-102-51":[-22.98,-8.32],"6-102-52":[-24.4,-8.55],"6-102-53":[-30.23,-9.28],"6-102-54":[-36.54,-12.51],"6-102-55":[-33.13,1569.32],"6-102-56":[1087.42,2518.52],"6-102-57":[2491.99,2973.89],"6-102-58":[2898.38,3288.12],"6-102-59":[3218.55,3458.77],"6-102-60":[3217.24,3410.38],"6-102-61":[3122.29,3280.26],"6-102-62":[3068.02,3169.64],"6-102-63":[-29.54,3074.68],"6-103-0":[11.81,26.94],"6-103-1":[10.02,22.97],"5-51-0":[10.02,26.96],"6-103-2":[1.76,20.03],"6-103-3":[-4.68,2.37],"5-51-1":[-4.68,20.52],"4-25-0":[-4.68,788.17],"6-103-4":[-7.07,732.27],"6-103-5":[-18.39,1038.7],"5-51-2":[-21.44,1119.08],"6-103-6":[-8.22,689.79],"6-103-7":[42.21,820.66],"5-51-3":[-21.06,887.81],"4-25-1":[-24.81,1119.08],"3-12-0":[-24.81,1618.98],"6-103-8":[142.66,871.07],"6-103-9":[190.73,581.35],"5-51-4":[142.66,947.89],"6-103-10":[-22.83,599.15],"6-103-11":[157.28,2526.11],"5-51-5":[-23.46,2526.11],"4-25-2":[-27.02,2526.11],"6-103-12":[409.57,2781.93],"6-103-13":[538.79,2000.38],"5-51-6":[317.03,2781.93],"6-103-14":[796.86,2483.46],"6-103-15":[786,1631.54],"5-51-7":[522.51,2758.43],"4-25-3":[253.49,3379.04],"3-12-1":[-32.17,4155.27],"6-103-16":[657.03,1440.56],"6-103-17":[814.48,2312.81],"5-51-8":[657.03,2312.81],"6-103-18":[461.77,2785.32],"6-103-19":[90.97,2608.85],"5-51-9":[90.97,3718.19],"4-25-4":[90.97,5176.87],"6-103-20":[-14.6,3075.61],"6-103-21":[-41.04,2284.9],"5-51-10":[-41.04,3075.61],"6-103-22":[6.19,2090.39],"6-103-23":[-33.9,1930.57],"5-51-11":[-33.9,2506.96],"4-25-5":[-41.04,7111.28],"3-12-2":[-109,7512.84],"6-103-24":[-68.73,1683.1],"6-103-25":[-50.32,1775.49],"5-51-12":[-110.94,1791.56],"6-103-26":[-15.99,22.84],"6-103-27":[-1.31,35.12],"5-51-13":[-43.69,2581.3],"4-25-6":[-110.94,3084.02],"6-103-28":[7.05,50.12],"6-103-29":[13.68,63.16],"5-51-14":[-33.45,1298.21],"6-103-30":[17.55,93.68],"6-103-31":[-60.48,1707.53],"5-51-15":[-60.48,1707.53],"4-25-7":[-117.38,2181.1],"3-12-3":[-135.7,3433.72],"6-103-32":[-5.21,1767.47],"6-103-33":[16.48,98.63],"5-51-16":[-5.21,1767.47],"6-103-34":[-32.43,3363.43],"6-103-35":[-8.1,36.62],"5-51-17":[-32.43,3442.9],"4-25-8":[-69.41,3783.24],"6-103-36":[-20.48,14.72],"6-103-37":[-39.42,-2.58],"5-51-18":[-55.89,14.72],"6-103-38":[-48.07,-12.98],"6-103-39":[-62.92,-19.51],"5-51-19":[-67.07,-12.98],"4-25-9":[-87.84,14.72],"3-12-4":[-129.46,3783.24],"6-103-40":[-67.31,-22.53],"6-103-41":[-76.31,-23.36],"5-51-20":[-78.87,-22.53],"6-103-42":[-79.55,-31.81],"6-103-43":[-79.53,-36.31],"5-51-21":[-81.5,-31.81],"4-25-10":[-85.52,-22.53],"6-103-44":[-81.64,-36.17],"6-103-45":[-78.43,-33.2],"5-51-22":[-81.64,-31.36],"6-103-46":[-69.24,-28.58],"6-103-47":[-59.94,-23.25],"5-51-23":[-69.24,-19.95],"4-25-11":[-82.43,-11.56],"3-12-5":[-93.34,15.19],"6-103-48":[-51.3,-17.94],"6-103-49":[-40.42,-14.13],"5-51-24":[-51.3,-11.03],"6-103-50":[-34.48,-12.04],"6-103-51":[-30.95,-11.71],"5-51-25":[-34.48,-8.32],"4-25-12":[-51.3,-0.85],"6-103-52":[-31.64,-11.83],"6-103-53":[-39.3,-12.7],"5-51-26":[-39.3,-8.55],"6-103-54":[-43.14,-15.55],"6-103-55":[-38.79,1241.72],"5-51-27":[-43.14,1569.32],"4-25-13":[-43.14,1793.86],"3-12-6":[-51.3,1793.86],"6-103-56":[767.03,2536.98],"6-103-57":[2496.32,2925.63],"5-51-28":[767.03,2973.89],"6-103-58":[2895.28,3218.56],"6-103-59":[3190.5,3373.24],"5-51-29":[2895.28,3458.77],"4-25-14":[767.03,3605.31],"6-103-60":[3144.58,3368.42],"6-103-61":[3056.95,3217.25],"5-51-30":[3056.95,3410.38],"6-103-62":[3059.08,3122.3],"6-103-63":[-29.54,3072.12],"5-51-31":[-29.54,3169.64],"4-25-15":[-29.54,3601.4],"3-12-7":[-29.54,3799.9],"6-104-0":[11.39,26.93],"6-104-1":[9.9,23.02],"6-104-2":[2.36,20.31],"6-104-3":[-6,3.25],"6-104-4":[-6,82.84],"6-104-5":[-17.31,495.96],"6-104-6":[-8.77,399.1],"6-104-7":[13.61,491.06],"6-104-8":[115.43,750.89],"6-104-9":[116.1,561.53],"6-104-10":[-21.96,1677.59],"6-104-11":[150.22,2530.45],"6-104-12":[479.34,2992.37],"6-104-13":[504.85,1634.35],"6-104-14":[575.67,1654.73],"6-104-15":[617.47,1754.54],"6-104-16":[880.33,1742.15],"6-104-17":[128.34,2838.35],"6-104-18":[-3.88,3047.6],"6-104-19":[5.77,1847.96],"6-104-20":[-14.28,1280.51],"6-104-21":[-154.55,1772.77],"6-104-22":[-30.87,2103.76],"6-104-23":[-95.56,1877.29],"6-104-24":[-70.08,953.51],"6-104-25":[-6.17,27.99],"6-104-26":[3.36,44.5],"6-104-27":[10.3,55.83],"6-104-28":[17.56,73.24],"6-104-29":[25.67,79.68],"6-104-30":[10.65,2422.76],"6-104-31":[29.67,2305.23],"6-104-32":[6.49,2345.05],"6-104-33":[23.54,1325.52],"6-104-34":[-20.93,3699.18],"6-104-35":[4.34,1042.4],"6-104-36":[-2.59,22.64],"6-104-37":[-24.91,7.42],"6-104-38":[-38.06,-5.3],"6-104-39":[-58.73,307.87],"6-104-40":[-68.83,370.75],"6-104-41":[-63.64,291.1],"6-104-42":[-75.39,303.79],"6-104-43":[-77.46,189.43],"6-104-44":[-81.92,202.32],"6-104-45":[-78.44,-34.62],"6-104-46":[-69.89,-30.52],"6-104-47":[-61.52,-25.77],"6-104-48":[-54.23,-20.78],"6-104-49":[-44.26,-17.39],"6-104-50":[-39.25,-15.56],"6-104-51":[-36.43,-15.24],"6-104-52":[-37.17,-15.45],"6-104-53":[-45.54,-15.94],"6-104-54":[-46.98,-19.12],"6-104-55":[-44.18,1300.89],"6-104-56":[486.82,2508.46],"6-104-57":[2399.34,2971.73],"6-104-58":[2925.62,3190.51],"6-104-59":[3187.99,3320.02],"6-104-60":[3081.53,3317.03],"6-104-61":[2940.53,3144.59],"6-104-62":[3024.22,3080.43],"6-104-63":[-29.54,3069.68],"6-105-0":[11.09,26.9],"6-105-1":[9.45,22.95],"5-52-0":[9.45,26.93],"6-105-2":[2.76,20.29],"6-105-3":[-5.31,3.8],"5-52-1":[-6,20.31],"6-105-4":[-5.65,-0.65],"6-105-5":[-15.13,237.7],"5-52-2":[-17.31,495.96],"6-105-6":[-2.03,277.08],"6-105-7":[17.85,385.91],"5-52-3":[-8.77,491.06],"6-105-8":[110.65,448.35],"6-105-9":[56.9,380.42],"5-52-4":[56.9,750.89],"6-105-10":[-16.13,1615.07],"6-105-11":[217.51,2962.65],"5-52-5":[-21.96,2962.65],"6-105-12":[454.52,2450.24],"6-105-13":[406.43,1532.32],"5-52-6":[406.43,2992.37],"6-105-14":[432.23,1232.86],"6-105-15":[549.84,1464.19],"5-52-7":[432.23,1754.54],"6-105-16":[730.4,2060.03],"6-105-17":[-64.08,2407.63],"5-52-8":[-64.08,2838.35],"6-105-18":[-63.81,805.59],"6-105-19":[-16.17,1519.8],"5-52-9":[-63.81,3047.6],"6-105-20":[-33.57,1755.88],"6-105-21":[-69.59,1735.53],"5-52-10":[-154.55,1772.77],"6-105-22":[4.65,2160.72],"6-105-23":[-47.98,1800.52],"5-52-11":[-95.56,2160.72],"6-105-24":[1.5,35.14],"6-105-25":[6.58,52.59],"5-52-12":[-70.08,953.51],"6-105-26":[13.99,67.42],"6-105-27":[22.24,82.34],"5-52-13":[3.36,82.34],"6-105-28":[30.08,2125.15],"6-105-29":[13.27,4108.68],"5-52-14":[13.27,4108.68],"6-105-30":[17.77,2687.61],"6-105-31":[15.58,2267.3],"5-52-15":[10.65,2687.61],"6-105-32":[-40.37,1916.44],"6-105-33":[6.53,1738.04],"5-52-16":[-40.37,2345.05],"6-105-34":[14.43,3755.88],"6-105-35":[-28.54,2972.87],"5-52-17":[-28.54,3755.88],"6-105-36":[3.7,35.22],"6-105-37":[-12.09,21.02],"5-52-18":[-24.91,35.22],"6-105-38":[-24.32,2.72],"6-105-39":[-35.25,1205.98],"5-52-19":[-58.73,1205.98],"6-105-40":[29.13,1196.06],"6-105-41":[167.75,715.25],"5-52-20":[-68.83,1196.06],"6-105-42":[-14.21,662],"6-105-43":[-99.76,566.35],"5-52-21":[-99.76,662],"6-105-44":[-78.53,969.34],"6-105-45":[-78.21,-34.74],"5-52-22":[-81.92,969.34],"6-105-46":[-69.94,-30.98],"6-105-47":[-61.91,-27.2],"5-52-23":[-69.94,-25.77],"6-105-48":[-54.84,-22.89],"6-105-49":[-47.73,-19.91],"5-52-24":[-54.84,-17.39],"6-105-50":[-42.44,-18.56],"6-105-51":[-41.44,-18.27],"5-52-25":[-42.44,-15.24],"6-105-52":[-43.24,-18.39],"6-105-53":[-52.02,-19.12],"5-52-26":[-52.02,-15.45],"6-105-54":[-54.04,-21.06],"6-105-55":[-53.1,680.38],"5-52-27":[-54.04,1300.89],"6-105-56":[536.8,2408.3],"6-105-57":[2392.94,3030.32],"5-52-28":[486.82,3030.32],"6-105-58":[2971.72,3188.16],"6-105-59":[3108.98,3235.61],"5-52-29":[2925.62,3320.02],"6-105-60":[3012.27,3197.29],"6-105-61":[2926.36,3081.54],"5-52-30":[2926.36,3317.03],"6-105-62":[2976.46,3060.18],"6-105-63":[-29.54,3063.52],"5-52-31":[-29.54,3080.43],"6-106-0":[10.64,26.89],"6-106-1":[8.53,22.53],"6-106-2":[2.49,19.46],"6-106-3":[-5.7,3.75],"6-106-4":[-6.56,0.13],"6-106-5":[-15.63,39.75],"6-106-6":[-15.63,346.26],"6-106-7":[14.94,411.14],"6-106-8":[91.15,443.53],"6-106-9":[32.4,383.49],"6-106-10":[-14.77,717.41],"6-106-11":[169.48,2548.26],"6-106-12":[315.35,2226.52],"6-106-13":[309.69,1486.61],"6-106-14":[471.52,1598.44],"6-106-15":[383.84,1743.81],"6-106-16":[236.1,1936.12],"6-106-17":[-59.35,1887.25],"6-106-18":[-120.47,785.42],"6-106-19":[-39.04,1101.77],"6-106-20":[-105.16,584.53],"6-106-21":[-78.25,1795.67],"6-106-22":[-35.2,1934.56],"6-106-23":[-36.2,3691.21],"6-106-24":[-4.52,1951.28],"6-106-25":[17.56,2501.63],"6-106-26":[-6.79,2962.21],"6-106-27":[26.54,2343.09],"6-106-28":[24.22,1769.36],"6-106-29":[30.27,536.54],"6-106-30":[32.1,935.33],"6-106-31":[37.62,2935.4],"6-106-32":[39.93,3132.81],"6-106-33":[-11.89,3490.23],"6-106-34":[19.97,1959.49],"6-106-35":[5.42,2405.04],"6-106-36":[10.5,52.7],"6-106-37":[1.57,42.5],"6-106-38":[-1.29,35.06],"6-106-39":[-31.05,1152.3],"6-106-40":[340.66,1241.42],"6-106-41":[303.97,737.39],"6-106-42":[254.05,673.8],"6-106-43":[-1.49,507.31],"6-106-44":[-78.18,1063.1],"6-106-45":[-78.01,-33.81],"6-106-46":[-69.49,-30.79],"6-106-47":[-61.11,-27.35],"6-106-48":[-54.99,-24.24],"6-106-49":[-48.72,-21.27],"6-106-50":[-45.04,-20.59],"6-106-51":[-45.09,-20.39],"6-106-52":[-47.54,-20.76],"6-106-53":[-57.28,-21.9],"6-106-54":[-61.21,-25.94],"6-106-55":[-59.83,845.24],"6-106-56":[519.85,2462.74],"6-106-57":[2401.53,3046.36],"6-106-58":[3030.31,3177.4],"6-106-59":[2994.82,3172.35],"6-106-60":[2931.11,3109.06],"6-106-61":[2879.88,3012.28],"6-106-62":[2930.22,3048.31],"6-106-63":[-29.59,3060.25],"6-107-0":[10.15,26.87],"6-107-1":[8.13,21.47],"5-53-0":[8.13,26.89],"6-107-2":[2.41,16.79],"6-107-3":[-5.35,4.39],"5-53-1":[-5.7,19.46],"4-26-0":[-6,26.93],"6-107-4":[-5.79,0.24],"6-107-5":[-13.91,13.68],"5-53-2":[-15.63,39.75],"6-107-6":[-13.91,479.01],"6-107-7":[3.58,427.06],"5-53-3":[-15.63,479.01],"4-26-1":[-17.31,495.96],"6-107-8":[3.9,342.41],"6-107-9":[56.97,417.22],"5-53-4":[3.9,443.53],"6-107-10":[-10.31,1200.19],"6-107-11":[142.11,2000.95],"5-53-5":[-14.77,2548.26],"4-26-2":[-21.96,2962.65],"6-107-12":[249.54,1644.22],"6-107-13":[260.32,1523.39],"5-53-6":[249.54,2226.52],"6-107-14":[165.96,1600.44],"6-107-15":[117.12,1541.69],"5-53-7":[117.12,1743.81],"4-26-3":[117.12,2992.37],"6-107-16":[42.3,816.14],"6-107-17":[-150.51,1174.47],"5-53-8":[-150.51,1936.12],"6-107-18":[-29.13,918.27],"6-107-19":[3.79,96.9],"5-53-9":[-120.47,1101.77],"4-26-4":[-150.51,3047.6],"6-107-20":[-52.47,121.19],"6-107-21":[-35.84,1218.7],"5-53-10":[-105.16,1795.67],"6-107-22":[0.69,450.06],"6-107-23":[-53.71,3956.01],"5-53-11":[-53.71,3956.01],"4-26-5":[-154.55,3956.01],"6-107-24":[11.3,1042.66],"6-107-25":[-10.65,2731.61],"5-53-12":[-10.65,2731.61],"6-107-26":[-0.27,2712.33],"6-107-27":[-54.19,2627.63],"5-53-13":[-54.19,2962.21],"4-26-6":[-70.08,2962.21],"6-107-28":[-134.19,2528.23],"6-107-29":[21.9,2469.27],"5-53-14":[-134.19,2528.23],"6-107-30":[58.38,136.19],"6-107-31":[24.07,2286.44],"5-53-15":[24.07,2935.4],"4-26-7":[-134.19,4108.68],"6-107-32":[0.84,2955.49],"6-107-33":[28.66,2702.65],"5-53-16":[-11.89,3490.23],"6-107-34":[15.94,1676.82],"6-107-35":[5.35,2244.61],"5-53-17":[5.35,2405.04],"4-26-8":[-40.37,3755.88],"6-107-36":[21.36,72.31],"6-107-37":[-21.63,280.29],"5-53-18":[-21.63,280.29],"6-107-38":[-20.07,284.71],"6-107-39":[-14.22,553.65],"5-53-19":[-31.05,1152.3],"4-26-9":[-58.73,1205.98],"6-107-40":[235.6,710.82],"6-107-41":[292.36,692.66],"5-53-20":[235.6,1241.42],"6-107-42":[104.9,561.35],"6-107-43":[-30.26,610.87],"5-53-21":[-30.26,673.8],"4-26-10":[-99.76,1241.42],"6-107-44":[-76.09,322.34],"6-107-45":[-73.83,-32.37],"5-53-22":[-78.18,1063.1],"6-107-46":[-67.41,-29.79],"6-107-47":[-60.78,-27.09],"5-53-23":[-69.49,-27.09],"4-26-11":[-81.92,1063.1],"6-107-48":[-54.95,-24.93],"6-107-49":[-49.55,-22.67],"5-53-24":[-54.99,-21.27],"6-107-50":[-47.09,-22.05],"6-107-51":[-49,-22.03],"5-53-25":[-49,-20.39],"4-26-12":[-54.99,-15.24],"6-107-52":[-52.14,-22.78],"6-107-53":[-62.69,-24.36],"5-53-26":[-62.69,-20.76],"6-107-54":[-67.4,-28.92],"6-107-55":[-64.36,1172.91],"5-53-27":[-67.4,1172.91],"4-26-13":[-67.4,1300.89],"6-107-56":[845.23,2590.73],"6-107-57":[2462.73,3089.34],"5-53-28":[519.85,3089.34],"6-107-58":[3046.35,3196.31],"6-107-59":[2917.96,3163.37],"5-53-29":[2917.96,3196.31],"4-26-14":[486.82,3320.02],"6-107-60":[2826.82,2994.83],"6-107-61":[2826.82,2932.32],"5-53-30":[2826.82,3109.06],"6-107-62":[2871.64,3035.5],"6-107-63":[-29.58,3058.07],"5-53-31":[-29.59,3060.25],"4-26-15":[-29.59,3317.03],"6-108-0":[10.04,26.86],"6-108-1":[7.6,20.19],"6-108-2":[2.41,15.36],"6-108-3":[-5.02,4.8],"6-108-4":[-5,0.2],"6-108-5":[-10.53,23.3],"6-108-6":[-6.11,487.14],"6-108-7":[-1.85,1127.4],"6-108-8":[-14.61,1401.18],"6-108-9":[9.01,816.9],"6-108-10":[0.99,804.47],"6-108-11":[261.28,1845.92],"6-108-12":[224.24,1706.86],"6-108-13":[169.56,1269.14],"6-108-14":[159.24,878.23],"6-108-15":[100.27,339.07],"6-108-16":[60.86,1264.57],"6-108-17":[-268.7,1987.41],"6-108-18":[-101.36,1234.98],"6-108-19":[-7.79,581.2],"6-108-20":[16.92,1941.55],"6-108-21":[18.57,59.8],"6-108-22":[22.07,60.97],"6-108-23":[8,553.56],"6-108-24":[22.25,69.87],"6-108-25":[31.05,86.5],"6-108-26":[38.77,279.06],"6-108-27":[15.22,1607.31],"6-108-28":[-24.5,2547.07],"6-108-29":[21.53,3011.04],"6-108-30":[36.96,1410.92],"6-108-31":[-6.95,2053.63],"6-108-32":[33.67,1465.3],"6-108-33":[35.26,2752.59],"6-108-34":[-4.86,1869.57],"6-108-35":[7.81,2985.2],"6-108-36":[18.74,169.89],"6-108-37":[-47.89,844.91],"6-108-38":[-13.38,967.01],"6-108-39":[127.51,455.4],"6-108-40":[265.28,557.1],"6-108-41":[312.18,555.5],"6-108-42":[124.91,497.24],"6-108-43":[-59.03,276.5],"6-108-44":[-71.44,115.27],"6-108-45":[-69.83,-30.39],"6-108-46":[-64.74,-28.34],"6-108-47":[-58.68,-26.12],"6-108-48":[-54.09,-24.3],"6-108-49":[-49.45,-23.51],"6-108-50":[-48.53,-23.46],"6-108-51":[-51.56,-23.6],"6-108-52":[-55.45,-24.6],"6-108-53":[-65.39,-26.41],"6-108-54":[-71.76,-31.34],"6-108-55":[-65.99,1359.83],"6-108-56":[1164.44,2630.58],"6-108-57":[2590.72,3151.32],"6-108-58":[3089.33,3203.64],"6-108-59":[2882.88,3159.64],"6-108-60":[2697.34,2917.97],"6-108-61":[2697.34,2871.65],"6-108-62":[2844.51,3023.22],"6-108-63":[-29.54,3057.86],"6-109-0":[10.07,26.84],"6-109-1":[7.6,19.56],"5-54-0":[7.6,26.86],"6-109-2":[1.94,15.3],"6-109-3":[-4.59,4.34],"5-54-1":[-5.02,15.36],"6-109-4":[-4.59,1.33],"6-109-5":[-11.15,-0.27],"5-54-2":[-11.15,23.3],"6-109-6":[-13.23,1068.55],"6-109-7":[49.78,2201.02],"5-54-3":[-13.23,2201.02],"6-109-8":[105.58,2117.99],"6-109-9":[2.06,1848.18],"5-54-4":[-14.61,2117.99],"6-109-10":[2.81,676.85],"6-109-11":[199.21,2240.33],"5-54-5":[0.99,2240.33],"6-109-12":[203.07,2048.94],"6-109-13":[137.94,905.39],"5-54-6":[137.94,2048.94],"6-109-14":[100.62,1057.62],"6-109-15":[12.1,1445.43],"5-54-7":[12.1,1445.43],"6-109-16":[169.25,1718.97],"6-109-17":[-9.27,2763.77],"5-54-8":[-268.7,2763.77],"6-109-18":[-16.31,1727.04],"6-109-19":[-43.56,1925.58],"5-54-9":[-101.36,1925.58],"6-109-20":[-39.24,1453.61],"6-109-21":[16.04,722.76],"5-54-10":[-39.24,1941.55],"6-109-22":[13.17,672.79],"6-109-23":[24.41,69.74],"5-54-11":[8,672.79],"6-109-24":[29.92,74.99],"6-109-25":[35.9,87.33],"5-54-12":[22.25,87.33],"6-109-26":[42.78,100.04],"6-109-27":[47.35,114.52],"5-54-13":[15.22,1607.31],"6-109-28":[47.35,127.22],"6-109-29":[45.25,289.5],"5-54-14":[-24.5,3011.04],"6-109-30":[39.86,726.39],"6-109-31":[-77.81,1820.67],"5-54-15":[-77.81,2053.63],"6-109-32":[-16.98,2152.95],"6-109-33":[17.04,2555.71],"5-54-16":[-16.98,2752.59],"6-109-34":[33.44,1415.76],"6-109-35":[30.37,2395.35],"5-54-17":[-4.86,2985.2],"6-109-36":[4.41,198.32],"6-109-37":[-3.57,755.14],"5-54-18":[-47.89,844.91],"6-109-38":[123.22,1012.77],"6-109-39":[240.33,556.98],"5-54-19":[-13.38,1012.77],"6-109-40":[305.48,1049.45],"6-109-41":[288.49,1051.49],"5-54-20":[265.28,1051.49],"6-109-42":[117.95,457.28],"6-109-43":[-68.16,175.13],"5-54-21":[-68.16,497.24],"6-109-44":[-66.21,-23.79],"6-109-45":[-63.97,-28.21],"5-54-22":[-71.44,115.27],"6-109-46":[-60.3,-26.68],"6-109-47":[-55.65,-25.02],"5-54-23":[-64.74,-25.02],"6-109-48":[-52.05,-23.14],"6-109-49":[-47.99,-22.51],"5-54-24":[-54.09,-22.51],"6-109-50":[-47.82,-22.39],"6-109-51":[-52.39,-23.56],"5-54-25":[-52.39,-22.39],"6-109-52":[-58.59,-25.84],"6-109-53":[-69.44,-28.36],"5-54-26":[-69.44,-24.6],"6-109-54":[-76.93,-32.97],"6-109-55":[-75.43,1185.13],"5-54-27":[-76.93,1359.83],"6-109-56":[945.1,2622.61],"6-109-57":[2578.38,3171.09],"5-54-28":[945.1,3171.09],"6-109-58":[3008.62,3189.23],"6-109-59":[2819.28,3116.04],"5-54-29":[2819.28,3203.64],"6-109-60":[2623.1,2882.89],"6-109-61":[2629.61,2844.52],"5-54-30":[2623.1,2917.97],"6-109-62":[2805.68,3011.97],"6-109-63":[-29.54,3059.53],"5-54-31":[-29.54,3059.53],"6-110-0":[10.54,26.83],"6-110-1":[6.87,20.99],"6-110-2":[1.92,15.13],"6-110-3":[-4.55,2.92],"6-110-4":[-4.02,4.86],"6-110-5":[-10.86,-0.21],"6-110-6":[-13.9,856.13],"6-110-7":[47.14,1828.99],"6-110-8":[120.23,1922.66],"6-110-9":[31.37,2002.65],"6-110-10":[5.26,531.48],"6-110-11":[163.23,2290.58],"6-110-12":[207.26,2374.21],"6-110-13":[182.49,1509.02],"6-110-14":[66.2,1216.44],"6-110-15":[10.1,1386.01],"6-110-16":[4.32,1509.87],"6-110-17":[10.26,1774.19],"6-110-18":[-48.7,999.37],"6-110-19":[-18.69,1373.1],"6-110-20":[-17.54,1801.42],"6-110-21":[-19.03,1948.19],"6-110-22":[24,290.95],"6-110-23":[28.82,74.19],"6-110-24":[34.84,77.85],"6-110-25":[38.27,88.57],"6-110-26":[43.53,99.45],"6-110-27":[49.52,113.8],"6-110-28":[55.44,127.03],"6-110-29":[62.11,137.95],"6-110-30":[67.63,149.08],"6-110-31":[62.22,363.49],"6-110-32":[-56.46,1519.04],"6-110-33":[-10.59,3088.67],"6-110-34":[26.67,862.43],"6-110-35":[40.62,116.33],"6-110-36":[-0.62,359.52],"6-110-37":[-20.35,453.11],"6-110-38":[138.03,558.61],"6-110-39":[237.65,915.42],"6-110-40":[389.72,1429.68],"6-110-41":[289.78,1437.62],"6-110-42":[27.63,482.51],"6-110-43":[-47.6,188.18],"6-110-44":[-60.49,-16.06],"6-110-45":[-58.01,-25.18],"6-110-46":[-56.42,-23.9],"6-110-47":[-52.82,-22.85],"6-110-48":[-49.85,-21.48],"6-110-49":[-46.08,-21.12],"6-110-50":[-46.52,-21.31],"6-110-51":[-52.46,-23.05],"6-110-52":[-59.62,-26.04],"6-110-53":[-71.74,-29.78],"6-110-54":[-80.19,-34.71],"6-110-55":[-74.89,1382.72],"6-110-56":[948.42,2601.74],"6-110-57":[2573.54,3136.57],"6-110-58":[2893.92,3137.89],"6-110-59":[2675.26,3008.63],"6-110-60":[2578.01,2819.29],"6-110-61":[2594.09,2805.69],"6-110-62":[2759.42,2999.73],"6-110-63":[-29.54,3062.38],"6-111-0":[11.53,28.02],"6-111-1":[6.59,23.68],"5-55-0":[6.59,28.02],"6-111-2":[2.12,13.54],"6-111-3":[-4.24,2.58],"5-55-1":[-4.55,15.13],"4-27-0":[-5.02,28.02],"6-111-4":[-1.34,4.98],"6-111-5":[-6.9,-0.37],"5-55-2":[-10.86,4.98],"6-111-6":[-9.76,462.09],"6-111-7":[19.54,1221.31],"5-55-3":[-13.9,1828.99],"4-27-1":[-13.9,2201.02],"3-13-0":[-17.31,2201.02],"6-111-8":[105.45,1652.58],"6-111-9":[35.47,2070.51],"5-55-4":[31.37,2070.51],"6-111-10":[7.84,825.86],"6-111-11":[208.63,1856.83],"5-55-5":[5.26,2290.58],"4-27-2":[-14.61,2290.58],"6-111-12":[30.93,2358.55],"6-111-13":[242.51,2286.52],"5-55-6":[30.93,2374.21],"6-111-14":[42.21,2263.84],"6-111-15":[-27.41,1447.73],"5-55-7":[-27.41,2263.84],"4-27-3":[-27.41,2374.21],"3-13-1":[-27.41,2992.37],"2-6-0":[-32.17,4155.27],"6-111-16":[-79.7,1878.55],"6-111-17":[23.24,62.05],"5-55-8":[-79.7,1878.55],"6-111-18":[25.69,66.77],"6-111-19":[-16.84,1986.11],"5-55-9":[-48.7,1986.11],"4-27-4":[-268.7,2763.77],"6-111-20":[-0.37,1882.11],"6-111-21":[27.45,74.09],"5-55-10":[-19.03,1948.19],"6-111-22":[33.04,75.05],"6-111-23":[33.91,80.5],"5-55-11":[24,290.95],"4-27-5":[-39.24,1948.19],"3-13-2":[-268.7,3956.01],"6-111-24":[37.06,83.13],"6-111-25":[39.61,93.95],"5-55-12":[34.84,93.95],"6-111-26":[44.33,102.28],"6-111-27":[49.63,114.34],"5-55-13":[43.53,114.34],"4-27-6":[15.22,1607.31],"6-111-28":[55.18,125.8],"6-111-29":[59.47,301.73],"5-55-14":[55.18,301.73],"6-111-30":[66.39,148.84],"6-111-31":[69.38,149.75],"5-55-15":[62.22,363.49],"4-27-7":[-77.81,3011.04],"3-13-3":[-134.19,4108.68],"2-6-1":[-268.7,7512.84],"6-111-32":[15.14,3028.24],"6-111-33":[-92.74,2016.59],"5-55-16":[-92.74,3088.67],"6-111-34":[38.32,670.15],"6-111-35":[39.61,131.25],"5-55-17":[26.67,862.43],"4-27-8":[-92.74,3088.67],"6-111-36":[-50.67,610.22],"6-111-37":[37.9,457.36],"5-55-18":[-50.67,610.22],"6-111-38":[212.43,466.21],"6-111-39":[278.13,1152.22],"5-55-19":[138.03,1152.22],"4-27-9":[-50.67,1152.22],"3-13-4":[-92.74,3755.88],"6-111-40":[234.53,1528.53],"6-111-41":[101.81,1002.66],"5-55-20":[101.81,1528.53],"6-111-42":[72.04,400.15],"6-111-43":[-50.51,399.93],"5-55-21":[-50.51,482.51],"4-27-10":[-68.16,1528.53],"6-111-44":[-51.73,212.32],"6-111-45":[-50.87,-20.77],"5-55-22":[-60.49,212.32],"6-111-46":[-49.69,-20.97],"6-111-47":[-47.09,-20.45],"5-55-23":[-56.42,-20.45],"4-27-11":[-71.44,212.32],"3-13-5":[-99.76,1528.53],"2-6-2":[-129.46,3783.24],"6-111-48":[-45.23,-19.5],"6-111-49":[-42.63,-19.5],"5-55-24":[-49.85,-19.5],"6-111-50":[-45.55,-20.17],"6-111-51":[-51.95,-22.67],"5-55-25":[-52.46,-20.17],"4-27-12":[-54.09,-19.5],"6-111-52":[-60.12,-25.88],"6-111-53":[-74.09,-30.6],"5-55-26":[-74.09,-25.88],"6-111-54":[-82.21,-35.97],"6-111-55":[-78.66,1711.28],"5-55-27":[-82.21,1711.28],"4-27-13":[-82.21,1711.28],"3-13-6":[-82.21,1711.28],"6-111-56":[1382.71,2605.54],"6-111-57":[2513.78,2976.73],"5-55-28":[948.42,3136.57],"6-111-58":[2794.54,2992.85],"6-111-59":[2564.77,2893.93],"5-55-29":[2564.77,3137.89],"4-27-14":[945.1,3203.64],"6-111-60":[2500.69,2687.3],"6-111-61":[2526.81,2763.19],"5-55-30":[2500.69,2819.29],"6-111-62":[2709.28,2987.5],"6-111-63":[-29.54,3065.26],"5-55-31":[-29.54,3065.26],"4-27-15":[-29.54,3065.26],"3-13-7":[-29.59,3320.02],"2-6-3":[-82.21,3799.9],"6-112-0":[12.7,28.89],"6-112-1":[6.42,25.49],"6-112-2":[2.23,12.87],"6-112-3":[-4.13,4.1],"6-112-4":[-0.69,55.51],"6-112-5":[-5.99,225.27],"6-112-6":[-8.16,496.12],"6-112-7":[13.72,1767.28],"6-112-8":[107.91,1681.65],"6-112-9":[91.8,1766.67],"6-112-10":[12.16,1755.07],"6-112-11":[24.97,1915.02],"6-112-12":[3.84,2099.48],"6-112-13":[23.28,2155.76],"6-112-14":[6.54,1965.97],"6-112-15":[15.76,2024.26],"6-112-16":[12.72,1410.98],"6-112-17":[25.6,66.52],"6-112-18":[-24.3,3037.73],"6-112-19":[-29.59,3225.44],"6-112-20":[16.39,1148.96],"6-112-21":[35.65,80.83],"6-112-22":[36.81,83.26],"6-112-23":[36.79,87.96],"6-112-24":[39.76,92.17],"6-112-25":[41.96,97.91],"6-112-26":[46.97,104.85],"6-112-27":[51.71,114.88],"6-112-28":[56.92,128.34],"6-112-29":[57.72,134.69],"6-112-30":[65.91,141.57],"6-112-31":[67.63,143.17],"6-112-32":[6.63,1532.53],"6-112-33":[44.6,4900.75],"6-112-34":[45.11,141.56],"6-112-35":[56.19,138.86],"6-112-36":[28.28,417.68],"6-112-37":[-0.95,370.77],"6-112-38":[108.64,478.74],"6-112-39":[201.08,643.8],"6-112-40":[73.33,1103.75],"6-112-41":[-45.74,301.67],"6-112-42":[-38.95,426.73],"6-112-43":[-35.05,487.73],"6-112-44":[-41.29,417.28],"6-112-45":[-43.35,-6.75],"6-112-46":[-43.03,-16.66],"6-112-47":[-41.89,-17.81],"6-112-48":[-40.82,-17.53],"6-112-49":[-40.23,-17.58],"6-112-50":[-44.52,-18.84],"6-112-51":[-52.08,-21.66],"6-112-52":[-60.31,-25.8],"6-112-53":[-75.15,-30.77],"6-112-54":[-83.59,-37.04],"6-112-55":[-84.73,1701.91],"6-112-56":[1598.15,2525.84],"6-112-57":[2453.63,2840.96],"6-112-58":[2629.4,2867.37],"6-112-59":[2498.34,2794.55],"6-112-60":[2390.04,2564.78],"6-112-61":[2390.04,2709.29],"6-112-62":[2666.35,2977.76],"6-112-63":[-29.54,3068.14],"6-113-0":[13.21,29.53],"6-113-1":[6.55,26.2],"5-56-0":[6.42,29.53],"6-113-2":[2.65,15.62],"6-113-3":[-3.24,6.86],"5-56-1":[-4.13,15.62],"6-113-4":[0.26,195.82],"6-113-5":[-4.34,347.8],"5-56-2":[-5.99,347.8],"6-113-6":[-5.98,370.97],"6-113-7":[44.86,2177.91],"5-56-3":[-8.16,2177.91],"6-113-8":[234.82,2476.55],"6-113-9":[401.32,2650.27],"5-56-4":[91.8,2650.27],"6-113-10":[23.8,2153.15],"6-113-11":[-0.3,1760.98],"5-56-5":[-0.3,2153.15],"6-113-12":[-14.43,1103.01],"6-113-13":[1.7,1633.71],"5-56-6":[-14.43,2155.76],"6-113-14":[6.02,2108.2],"6-113-15":[5.38,1700.99],"5-56-7":[5.38,2108.2],"6-113-16":[25.39,1549.63],"6-113-17":[-8.62,1641.19],"5-56-8":[-8.62,1641.19],"6-113-18":[-22.8,2604.93],"6-113-19":[-48.47,3800.26],"5-56-9":[-48.47,3800.26],"6-113-20":[33.11,892.01],"6-113-21":[38.38,417.51],"5-56-10":[16.39,1148.96],"6-113-22":[40.6,91.39],"6-113-23":[42.43,95.06],"5-56-11":[36.79,95.06],"6-113-24":[44.58,97.8],"6-113-25":[46.59,101.92],"5-56-12":[39.76,101.92],"6-113-26":[49.34,105.97],"6-113-27":[48.14,115.83],"5-56-13":[46.97,115.83],"6-113-28":[47.63,237.05],"6-113-29":[57.2,131.84],"5-56-14":[47.63,237.05],"6-113-30":[64.56,137.12],"6-113-31":[68.18,144.76],"5-56-15":[64.56,144.76],"6-113-32":[42.04,2301.21],"6-113-33":[54.12,5227.39],"5-56-16":[6.63,5227.39],"6-113-34":[38.04,203.53],"6-113-35":[58.85,141.09],"5-56-17":[38.04,203.53],"6-113-36":[54.67,131.12],"6-113-37":[-15.46,223.46],"5-56-18":[-15.46,417.68],"6-113-38":[7.1,475.97],"6-113-39":[134.5,657.09],"5-56-19":[7.1,657.09],"6-113-40":[48.52,421.94],"6-113-41":[-34.6,242.02],"5-56-20":[-45.74,1103.75],"6-113-42":[-55.11,1079.1],"6-113-43":[-15.57,1164.85],"5-56-21":[-55.11,1164.85],"6-113-44":[-38.17,716.99],"6-113-45":[-33.33,267.94],"5-56-22":[-43.35,716.99],"6-113-46":[-34.86,-12.78],"6-113-47":[-35.43,-15.73],"5-56-23":[-43.03,-12.78],"6-113-48":[-35.41,-16.8],"6-113-49":[-37.65,-17.05],"5-56-24":[-40.82,-16.8],"6-113-50":[-42.35,-18.33],"6-113-51":[-51.23,-20.46],"5-56-25":[-52.08,-18.33],"6-113-52":[-59.96,-25.01],"6-113-53":[-76.66,-30.45],"5-56-26":[-76.66,-25.01],"6-113-54":[-85.09,-37.69],"6-113-55":[-88.87,1616.15],"5-56-27":[-88.87,1701.91],"6-113-56":[1284.64,2522.11],"6-113-57":[2297.97,2629.41],"5-56-28":[1284.64,2840.96],"6-113-58":[2577.31,2726.71],"6-113-59":[2407.17,2693.87],"5-56-29":[2407.17,2867.37],"6-113-60":[2235.7,2498.35],"6-113-61":[2303.19,2666.36],"5-56-30":[2235.7,2709.29],"6-113-62":[2636.28,2970.03],"6-113-63":[-29.54,3070.04],"5-56-31":[-29.54,3070.04],"6-114-0":[13.2,29.62],"6-114-1":[8.14,26.14],"6-114-2":[3.61,17.19],"6-114-3":[0.69,7.07],"6-114-4":[0.49,25.1],"6-114-5":[-2,264.4],"6-114-6":[-2.41,486.19],"6-114-7":[19.72,1696.85],"6-114-8":[77.22,2512.73],"6-114-9":[497.57,2822.43],"6-114-10":[9.71,2513.43],"6-114-11":[10.97,1227.42],"6-114-12":[11.66,627.07],"6-114-13":[3.09,1624.43],"6-114-14":[7.46,1440.11],"6-114-15":[-16.78,1737.87],"6-114-16":[-15.87,2312.97],"6-114-17":[-84.13,2061.69],"6-114-18":[-17.62,1666.14],"6-114-19":[-16.18,124.82],"6-114-20":[11.53,77.38],"6-114-21":[17.61,96.43],"6-114-22":[9.96,768.11],"6-114-23":[28.86,604.84],"6-114-24":[41.43,100.45],"6-114-25":[48.83,105.19],"6-114-26":[50.73,109.47],"6-114-27":[34.45,109.76],"6-114-28":[34.45,123],"6-114-29":[59.18,129.68],"6-114-30":[63.45,136.26],"6-114-31":[66.37,144.7],"6-114-32":[64.3,1467.8],"6-114-33":[33.02,4032.23],"6-114-34":[24.72,3694.06],"6-114-35":[31.23,439.48],"6-114-36":[-3.39,882.4],"6-114-37":[7.79,520.58],"6-114-38":[-0.72,739.41],"6-114-39":[40.06,660.81],"6-114-40":[66.17,435.75],"6-114-41":[40.88,374.96],"6-114-42":[42.73,458.66],"6-114-43":[12.46,485.33],"6-114-44":[-17.44,336.86],"6-114-45":[-41.04,1170.09],"6-114-46":[-31.63,-2.93],"6-114-47":[-33.62,-14.07],"6-114-48":[-34.78,-15.38],"6-114-49":[-37.5,-16.54],"6-114-50":[-40.37,-17.47],"6-114-51":[-49.64,-19.17],"6-114-52":[-59.34,-23.21],"6-114-53":[-75.38,-29.25],"6-114-54":[-88.58,-36.54],"6-114-55":[-89.56,1284.65],"6-114-56":[522.14,2298.07],"6-114-57":[2001.43,2577.32],"6-114-58":[2428.59,2638.08],"6-114-59":[2355.27,2612.99],"6-114-60":[2205.2,2407.18],"6-114-61":[2221.1,2636.29],"6-114-62":[2602.74,2964.79],"6-114-63":[-29.54,3070.97],"6-115-0":[12.07,29.55],"6-115-1":[8.62,24.47],"5-57-0":[8.14,29.62],"6-115-2":[2.39,17.3],"6-115-3":[1.82,6.24],"5-57-1":[0.69,17.3],"4-28-0":[-4.13,29.62],"6-115-4":[0.8,5.87],"6-115-5":[-0.82,73.43],"5-57-2":[-2,264.4],"6-115-6":[-0.82,115.08],"6-115-7":[1.77,672.76],"5-57-3":[-2.41,1696.85],"4-28-1":[-8.16,2177.91],"6-115-8":[49.51,2830.65],"6-115-9":[503.96,2291.47],"5-57-4":[49.51,2830.65],"6-115-10":[9.12,2265.18],"6-115-11":[12.44,34.94],"5-57-5":[9.12,2513.43],"4-28-2":[-0.3,2830.65],"6-115-12":[15.26,35.92],"6-115-13":[10.83,820.94],"5-57-6":[3.09,1624.43],"6-115-14":[14.24,1183.3],"6-115-15":[9.98,553.47],"5-57-7":[-16.78,1737.87],"4-28-3":[-16.78,2155.76],"6-115-16":[9.03,1740.56],"6-115-17":[8.77,43.6],"5-57-8":[-84.13,2312.97],"6-115-18":[14.8,45.02],"6-115-19":[16.45,54.08],"5-57-9":[-17.62,1666.14],"4-28-4":[-84.13,3800.26],"6-115-20":[24.53,58.31],"6-115-21":[25.92,65.71],"5-57-10":[11.53,96.43],"6-115-22":[27.14,79.03],"6-115-23":[25.23,82.85],"5-57-11":[9.96,768.11],"4-28-5":[9.96,1148.96],"6-115-24":[19.75,904.42],"6-115-25":[34.27,1005.01],"5-57-12":[19.75,1005.01],"6-115-26":[39.75,844.84],"6-115-27":[31.11,457.05],"5-57-13":[31.11,844.84],"4-28-6":[19.75,1005.01],"6-115-28":[39.7,118.49],"6-115-29":[57.52,126.91],"5-57-14":[34.45,129.68],"6-115-30":[61.37,131.2],"6-115-31":[64.24,143.3],"5-57-15":[61.37,144.7],"4-28-7":[34.45,237.05],"6-115-32":[67.54,296.18],"6-115-33":[36.6,3477.99],"5-57-16":[33.02,4032.23],"6-115-34":[32.51,4553.66],"6-115-35":[36.3,265.77],"5-57-17":[24.72,4553.66],"4-28-8":[6.63,5227.39],"6-115-36":[59.75,573.48],"6-115-37":[29.75,1449.42],"5-57-18":[-3.39,1449.42],"6-115-38":[28.52,1670.14],"6-115-39":[244.17,1064.78],"5-57-19":[-0.72,1670.14],"4-28-9":[-15.46,1670.14],"6-115-40":[176.38,727.4],"6-115-41":[119.67,517.69],"5-57-20":[40.88,727.4],"6-115-42":[67.33,518.96],"6-115-43":[59.37,560.11],"5-57-21":[12.46,560.11],"4-28-10":[-55.11,1164.85],"6-115-44":[34.38,521.33],"6-115-45":[-56.77,1522.55],"5-57-22":[-56.77,1522.55],"6-115-46":[-46.81,1610.49],"6-115-47":[-195.28,1424.55],"5-57-23":[-195.28,1610.49],"4-28-11":[-195.28,1610.49],"6-115-48":[-32.35,-13.51],"6-115-49":[-36.1,-15.23],"5-57-24":[-37.5,-13.51],"6-115-50":[-39.15,-17.16],"6-115-51":[-46.49,-18.91],"5-57-25":[-49.64,-17.16],"4-28-12":[-52.08,-13.51],"6-115-52":[-56.64,-22.55],"6-115-53":[-73,-28.38],"5-57-26":[-75.38,-22.55],"6-115-54":[-88.66,-36.23],"6-115-55":[-97.84,759.79],"5-57-27":[-97.84,1284.65],"4-28-13":[-97.84,1701.91],"6-115-56":[-97.84,2001.44],"6-115-57":[1792.1,2428.6],"5-57-28":[-97.84,2577.32],"6-115-58":[2305.92,2560],"6-115-59":[2344.15,2552.69],"5-57-29":[2305.92,2638.08],"4-28-14":[-97.84,2867.37],"6-115-60":[2100.93,2355.28],"6-115-61":[2117.14,2602.75],"5-57-30":[2100.93,2636.29],"6-115-62":[2569.81,2959.59],"6-115-63":[-29.54,3076],"5-57-31":[-29.54,3076],"4-28-15":[-29.54,3076],"6-116-0":[10.66,29.12],"6-116-1":[7.22,22.06],"6-116-2":[2.25,16.65],"6-116-3":[1.8,6.88],"6-116-4":[1.2,361.97],"6-116-5":[-0.57,89.29],"6-116-6":[-0.78,341.42],"6-116-7":[1.77,925.79],"6-116-8":[39.12,2260.37],"6-116-9":[440.9,2390.56],"6-116-10":[-3.36,1856.79],"6-116-11":[13.8,37.51],"6-116-12":[16.01,37.9],"6-116-13":[16.01,37.4],"6-116-14":[18.59,40.87],"6-116-15":[10.25,1590.34],"6-116-16":[-1.61,1786.57],"6-116-17":[8.34,43.6],"6-116-18":[15.48,44.53],"6-116-19":[15.73,47.62],"6-116-20":[16.81,51.48],"6-116-21":[19.43,63.16],"6-116-22":[23.95,70.37],"6-116-23":[29.01,74.37],"6-116-24":[26.61,82.69],"6-116-25":[30.18,93.33],"6-116-26":[30.98,99.51],"6-116-27":[30.96,99.08],"6-116-28":[45.57,117.31],"6-116-29":[55.18,122.74],"6-116-30":[58.42,127.66],"6-116-31":[60.62,135.09],"6-116-32":[62.05,783.66],"6-116-33":[65.85,1907.63],"6-116-34":[31.24,4188.78],"6-116-35":[53.93,4099.51],"6-116-36":[62.28,139.92],"6-116-37":[59.3,129.47],"6-116-38":[36.96,1285.71],"6-116-39":[26.9,1325.23],"6-116-40":[126.78,1296.76],"6-116-41":[189.96,988.43],"6-116-42":[97.05,430.67],"6-116-43":[131.13,1421.13],"6-116-44":[85.41,2241.03],"6-116-45":[-70.56,1999.21],"6-116-46":[-19.93,1568.36],"6-116-47":[-160.77,1420.87],"6-116-48":[-29.69,-12.33],"6-116-49":[-36.45,-13.09],"6-116-50":[-40.73,-17.24],"6-116-51":[-47.3,-19.53],"6-116-52":[-54.93,-22.38],"6-116-53":[-72.48,-27.53],"6-116-54":[-87.53,-35.51],"6-116-55":[-101.33,-44.71],"6-116-56":[-102.54,1792.11],"6-116-57":[1600.89,2338.91],"6-116-58":[2295.63,2481.09],"6-116-59":[2291.17,2481.96],"6-116-60":[1899.8,2344.16],"6-116-61":[1943.7,2569.82],"6-116-62":[2529.66,2955.42],"6-116-63":[-29.54,3081.95],"6-117-0":[9.48,28.14],"6-117-1":[6.76,18.88],"5-58-0":[6.76,29.12],"6-117-2":[2.28,14.99],"6-117-3":[1.62,7.39],"5-58-1":[1.62,16.65],"6-117-4":[1.48,155.99],"6-117-5":[0.48,58.1],"5-58-2":[-0.57,361.97],"6-117-6":[0.39,341.42],"6-117-7":[3.51,692.04],"5-58-3":[-0.78,925.79],"6-117-8":[22.34,2175.65],"6-117-9":[114.09,2203.44],"5-58-4":[22.34,2390.56],"6-117-10":[5.55,2094.72],"6-117-11":[-0.47,1541.51],"5-58-5":[-3.36,2094.72],"6-117-12":[17.95,39.7],"6-117-13":[17.96,40.77],"5-58-6":[16.01,40.77],"6-117-14":[18.87,43.2],"6-117-15":[-7.87,1533.21],"5-58-7":[-7.87,1590.34],"6-117-16":[-7.88,45.41],"6-117-17":[12.99,36.86],"5-58-8":[-7.88,1786.57],"6-117-18":[10.18,34.61],"6-117-19":[10.18,33.01],"5-58-9":[10.18,47.62],"6-117-20":[12.59,37.84],"6-117-21":[14.56,46.1],"5-58-10":[12.59,63.16],"6-117-22":[19.38,56.88],"6-117-23":[25.61,72.87],"5-58-11":[19.38,74.37],"6-117-24":[31.14,82.56],"6-117-25":[36.51,88.5],"5-58-12":[26.61,93.33],"6-117-26":[38.76,89.46],"6-117-27":[39.86,92.44],"5-58-13":[30.96,99.51],"6-117-28":[41.99,110.83],"6-117-29":[35.45,503.73],"5-58-14":[35.45,503.73],"6-117-30":[53.07,118.8],"6-117-31":[54.68,129.03],"5-58-15":[53.07,135.09],"6-117-32":[53.24,964.38],"6-117-33":[57.1,2427.64],"5-58-16":[53.24,2427.64],"6-117-34":[58.87,2022.98],"6-117-35":[-78.97,3071.93],"5-58-17":[-78.97,4188.78],"6-117-36":[62.08,143.56],"6-117-37":[61.21,128.82],"5-58-18":[59.3,143.56],"6-117-38":[57.56,126.23],"6-117-39":[30.2,869.8],"5-58-19":[26.9,1325.23],"6-117-40":[0.01,1008.41],"6-117-41":[75.28,1199.98],"5-58-20":[0.01,1296.76],"6-117-42":[145.68,1550.43],"6-117-43":[-25.52,1629.02],"5-58-21":[-25.52,1629.02],"6-117-44":[-80.43,1622.97],"6-117-45":[-23.03,1262.52],"5-58-22":[-80.43,2241.03],"6-117-46":[-14.62,1.67],"6-117-47":[-24.71,-5.89],"5-58-23":[-160.77,1568.36],"6-117-48":[-29.37,-11.35],"6-117-49":[-35.65,-13.2],"5-58-24":[-36.45,-11.35],"6-117-50":[-40.45,-17.24],"6-117-51":[-48.21,-20.04],"5-58-25":[-48.21,-17.24],"6-117-52":[-53.69,-23.2],"6-117-53":[-71.28,-27.26],"5-58-26":[-72.48,-22.38],"6-117-54":[-86.62,-34.15],"6-117-55":[-101.99,-43.8],"5-58-27":[-101.99,-34.15],"6-117-56":[-106.25,1600.9],"6-117-57":[1442.23,2342.57],"5-58-28":[-106.25,2342.57],"6-117-58":[2216.37,2456.95],"6-117-59":[2218.72,2466.51],"5-58-29":[2216.37,2481.96],"6-117-60":[1411.35,2291.18],"6-117-61":[1690.08,2529.67],"5-58-30":[1411.35,2569.82],"6-117-62":[2447.36,2953.28],"6-117-63":[-29.54,3084.91],"5-58-31":[-29.54,3084.91],"6-118-0":[8.81,27.71],"6-118-1":[6.64,17.18],"6-118-2":[1.82,14.17],"6-118-3":[1.29,7.13],"6-118-4":[1.8,112.12],"6-118-5":[0.82,6.14],"6-118-6":[0.71,75.94],"6-118-7":[3.53,559.13],"6-118-8":[15.46,1102.21],"6-118-9":[92.72,1636.07],"6-118-10":[2.35,1813.48],"6-118-11":[1.21,1062.27],"6-118-12":[17.21,43.51],"6-118-13":[19.63,45.98],"6-118-14":[0.73,1460.13],"6-118-15":[-7.91,1395.62],"6-118-16":[-7.92,30.44],"6-118-17":[6.23,30.2],"6-118-18":[4.7,24.25],"6-118-19":[4.92,23.71],"6-118-20":[6.29,28.34],"6-118-21":[10.46,37.16],"6-118-22":[12.98,50.32],"6-118-23":[19.09,62.28],"6-118-24":[25.96,72.19],"6-118-25":[29.55,81.26],"6-118-26":[33.77,84.41],"6-118-27":[35.3,83.99],"6-118-28":[39.24,102.12],"6-118-29":[44.51,337.7],"6-118-30":[50.71,111.44],"6-118-31":[54.6,118.9],"6-118-32":[58.04,435.72],"6-118-33":[2.74,2388.16],"6-118-34":[53.28,143.46],"6-118-35":[58.58,1094.58],"6-118-36":[60.49,866.24],"6-118-37":[60.7,127.95],"6-118-38":[55.23,126.07],"6-118-39":[48.72,114.91],"6-118-40":[16.01,468.23],"6-118-41":[-7.43,1263.13],"6-118-42":[3.55,1616.85],"6-118-43":[-3.46,1396.93],"6-118-44":[7.57,40.32],"6-118-45":[0.66,22.42],"6-118-46":[-11.28,6.94],"6-118-47":[-22.43,-3.98],"6-118-48":[-29.37,-9.38],"6-118-49":[-35.15,-14.48],"6-118-50":[-40.65,-17.23],"6-118-51":[-48.88,-20.43],"6-118-52":[-56.68,-24.15],"6-118-53":[-69.25,-27.35],"6-118-54":[-85.12,-33.76],"6-118-55":[-101.8,-42.74],"6-118-56":[-107,1522.76],"6-118-57":[1441.77,2294.89],"6-118-58":[1910.74,2319.46],"6-118-59":[1821.95,2399.61],"6-118-60":[803.63,2218.73],"6-118-61":[1627.45,2447.37],"6-118-62":[2363.53,2959.26],"6-118-63":[-29.54,3089.37],"6-119-0":[8.67,27.14],"6-119-1":[6.4,16.74],"5-59-0":[6.4,27.71],"6-119-2":[1.77,13.16],"6-119-3":[1.21,7.08],"5-59-1":[1.21,14.17],"4-29-0":[1.21,29.12],"6-119-4":[2.01,7.08],"6-119-5":[0.49,6.94],"5-59-2":[0.49,112.12],"6-119-6":[1.29,81.65],"6-119-7":[3.24,433.72],"5-59-3":[0.71,559.13],"4-29-1":[-0.78,925.79],"3-14-0":[-8.16,2177.91],"6-119-8":[15.62,1098.37],"6-119-9":[80.42,1766.68],"5-59-4":[15.46,1766.68],"6-119-10":[-12.75,1878.57],"6-119-11":[15.7,935.54],"5-59-5":[-12.75,1878.57],"4-29-2":[-12.75,2390.56],"6-119-12":[13.95,2005.12],"6-119-13":[17.08,2477.12],"5-59-6":[13.95,2477.12],"6-119-14":[1.03,1817.92],"6-119-15":[3.25,33.35],"5-59-7":[-7.91,1817.92],"4-29-3":[-7.91,2477.12],"3-14-1":[-16.78,2830.65],"6-119-16":[4.27,23.39],"6-119-17":[1.7,17.38],"5-59-8":[-7.92,30.44],"6-119-18":[0.23,11.21],"6-119-19":[1.53,11.2],"5-59-9":[0.23,24.25],"4-29-4":[-7.92,1786.57],"6-119-20":[4.13,19.59],"6-119-21":[6.49,25.03],"5-59-10":[4.13,37.16],"6-119-22":[9,34.94],"6-119-23":[13.7,51.55],"5-59-11":[9,62.28],"4-29-5":[4.13,74.37],"3-14-2":[-84.13,3800.26],"6-119-24":[20.27,58.63],"6-119-25":[26.32,64.62],"5-59-12":[20.27,81.26],"6-119-26":[29.21,76.13],"6-119-27":[31.51,78.92],"5-59-13":[29.21,84.41],"4-29-6":[20.27,99.51],"6-119-28":[34.89,91.62],"6-119-29":[42.31,102.14],"5-59-14":[34.89,337.7],"6-119-30":[49.88,110.56],"6-119-31":[51.58,118.67],"5-59-15":[49.88,118.9],"4-29-7":[34.89,503.73],"3-14-3":[19.75,1005.01],"6-119-32":[55.15,126.21],"6-119-33":[55.72,960.88],"5-59-16":[2.74,2388.16],"6-119-34":[6.18,2782.57],"6-119-35":[49.89,1115.42],"5-59-17":[6.18,2782.57],"4-29-8":[-78.97,4188.78],"6-119-36":[63.79,138.91],"6-119-37":[60.58,131.76],"5-59-18":[60.49,866.24],"6-119-38":[55.49,123.47],"6-119-39":[49.44,110.92],"5-59-19":[48.72,126.07],"4-29-9":[26.9,1325.23],"3-14-4":[-78.97,5227.39],"6-119-40":[40.76,99.59],"6-119-41":[33.8,84.71],"5-59-20":[-7.43,1263.13],"6-119-42":[26.01,74.04],"6-119-43":[18.31,59.16],"5-59-21":[-3.46,1616.85],"4-29-10":[-25.52,1629.02],"6-119-44":[11.24,40.96],"6-119-45":[3.47,25.39],"5-59-22":[0.66,40.96],"6-119-46":[-5.63,10.69],"6-119-47":[-18.52,-2.2],"5-59-23":[-22.43,10.69],"4-29-11":[-160.77,2241.03],"3-14-5":[-195.28,2241.03],"6-119-48":[-27.89,-8.1],"6-119-49":[-34.87,-13.33],"5-59-24":[-35.15,-8.1],"6-119-50":[-42.15,-16.71],"6-119-51":[-55.48,-20.53],"5-59-25":[-55.48,-16.71],"4-29-12":[-55.48,-8.1],"6-119-52":[-67.25,-24.47],"6-119-53":[-69.99,-28.77],"5-59-26":[-69.99,-24.15],"6-119-54":[-84.63,-34.47],"6-119-55":[-101.06,-42.64],"5-59-27":[-101.8,-33.76],"4-29-13":[-101.99,-22.38],"3-14-6":[-101.99,1701.91],"6-119-56":[-106.67,1594.21],"6-119-57":[1522.75,2260.16],"5-59-28":[-107,2294.89],"6-119-58":[1520.8,2260.16],"6-119-59":[1378.35,2352.82],"5-59-29":[1378.35,2399.61],"4-29-14":[-107,2481.96],"6-119-60":[115.06,3169.82],"6-119-61":[1392.87,2470.74],"5-59-30":[115.06,3169.82],"6-119-62":[2356.79,2967.24],"6-119-63":[-29.54,3091.37],"5-59-31":[-29.54,3091.37],"4-29-15":[-29.54,3169.82],"3-14-7":[-107,3169.82],"6-120-0":[8.69,26.75],"6-120-1":[5.52,17.4],"6-120-2":[1.82,12.04],"6-120-3":[0.59,7.08],"6-120-4":[2.09,7.08],"6-120-5":[0.74,5.17],"6-120-6":[1.05,56.9],"6-120-7":[2.85,903.95],"6-120-8":[56.39,1454.04],"6-120-9":[12.61,1757.61],"6-120-10":[12.59,947.68],"6-120-11":[15.29,2605.13],"6-120-12":[7.08,3631.59],"6-120-13":[-0.7,3468.03],"6-120-14":[1.4,40.12],"6-120-15":[4.12,24.95],"6-120-16":[-0.27,17.95],"6-120-17":[-4.97,7.43],"6-120-18":[-6.56,3],"6-120-19":[-3.98,7.47],"6-120-20":[-0.58,12.98],"6-120-21":[2.19,17.28],"6-120-22":[4.58,25.53],"6-120-23":[8.89,39.89],"6-120-24":[15.15,49.5],"6-120-25":[21.3,58.42],"6-120-26":[25.24,62.27],"6-120-27":[28.53,69.78],"6-120-28":[32.36,84.63],"6-120-29":[37.3,831.89],"6-120-30":[42.45,102.95],"6-120-31":[46.51,110.31],"6-120-32":[48.73,118.16],"6-120-33":[52.39,128.82],"6-120-34":[36.32,1251.14],"6-120-35":[16.84,2387.59],"6-120-36":[45.89,264.39],"6-120-37":[59.17,130.22],"6-120-38":[55.65,121.69],"6-120-39":[49.17,115.94],"6-120-40":[42.96,105.9],"6-120-41":[35.4,90.52],"6-120-42":[28.58,74.62],"6-120-43":[8.57,495.66],"6-120-44":[12.8,48.16],"6-120-45":[5.96,25.68],"6-120-46":[-2.48,12.37],"6-120-47":[-16.47,-0.49],"6-120-48":[-25.27,-6.4],"6-120-49":[-33.37,-10.64],"6-120-50":[-42.5,-14.52],"6-120-51":[-55.8,383.74],"6-120-52":[-67.98,-26.3],"6-120-53":[-72.63,-30.51],"6-120-54":[-84.73,-34.99],"6-120-55":[-104.1,-43.28],"6-120-56":[-112.02,1627.11],"6-120-57":[475.75,2656.26],"6-120-58":[867.53,2268.9],"6-120-59":[1045.7,2732.99],"6-120-60":[-105.78,3191.81],"6-120-61":[347.55,2726.57],"6-120-62":[2344.78,2977.2],"6-120-63":[-29.54,3090.38],"6-121-0":[8.97,26.75],"6-121-1":[5.52,18.2],"5-60-0":[5.52,26.75],"6-121-2":[1.99,11],"6-121-3":[0.42,4.82],"5-60-1":[0.42,12.04],"6-121-4":[2.25,7.43],"6-121-5":[0.71,4.93],"5-60-2":[0.71,7.43],"6-121-6":[1.29,271.44],"6-121-7":[2.85,1052.69],"5-60-3":[1.05,1052.69],"6-121-8":[37.86,1653.57],"6-121-9":[11.56,1415.31],"5-60-4":[11.56,1757.61],"6-121-10":[10.82,1872.79],"6-121-11":[9.11,3277.23],"5-60-5":[9.11,3277.23],"6-121-12":[-5.06,4774.23],"6-121-13":[-5.97,28.14],"5-60-6":[-5.97,4774.23],"6-121-14":[3.79,18.42],"6-121-15":[-1.09,16.76],"5-60-7":[-1.09,40.12],"6-121-16":[-7.93,7.27],"6-121-17":[-11.57,-0.26],"5-60-8":[-11.57,17.95],"6-121-18":[-11.9,-2.7],"6-121-19":[-13.5,-0.57],"5-60-9":[-13.5,7.47],"6-121-20":[-13.4,2.2],"6-121-21":[-4.89,8.56],"5-60-10":[-13.4,17.28],"6-121-22":[1.31,15.96],"6-121-23":[6.08,30.18],"5-60-11":[1.31,39.89],"6-121-24":[11.75,45.27],"6-121-25":[17.54,49.7],"5-60-12":[11.75,58.42],"6-121-26":[24.65,60.14],"6-121-27":[25.47,66.56],"5-60-13":[24.65,69.78],"6-121-28":[28.73,75.09],"6-121-29":[32.36,84.91],"5-60-14":[28.73,831.89],"6-121-30":[37.91,673.97],"6-121-31":[41.13,96.35],"5-60-15":[37.91,673.97],"6-121-32":[43.4,101.5],"6-121-33":[46.93,118.89],"5-60-16":[43.4,128.82],"6-121-34":[49.6,839.37],"6-121-35":[9.56,1980.07],"5-60-17":[9.56,2387.59],"6-121-36":[44.87,241.22],"6-121-37":[58.56,129.2],"5-60-18":[44.87,264.39],"6-121-38":[56.18,122.21],"6-121-39":[50.7,116.7],"5-60-19":[49.17,122.21],"6-121-40":[45.59,106.12],"6-121-41":[37.73,94.44],"5-60-20":[35.4,106.12],"6-121-42":[32.38,82.35],"6-121-43":[24.79,66.27],"5-60-21":[8.57,495.66],"6-121-44":[14.55,55.75],"6-121-45":[6.51,35.28],"5-60-22":[5.96,55.75],"6-121-46":[-0.5,21.22],"6-121-47":[-12.26,3.98],"5-60-23":[-16.47,21.22],"6-121-48":[-19.81,-3.49],"6-121-49":[-29.02,-8.06],"5-60-24":[-33.37,-3.49],"6-121-50":[-41.05,-10.84],"6-121-51":[-63.16,-19.98],"5-60-25":[-63.16,383.74],"6-121-52":[-72.98,-28.17],"6-121-53":[-77.22,-33.82],"5-60-26":[-77.22,-26.3],"6-121-54":[-88.46,-36.59],"6-121-55":[-106.46,1402.86],"5-60-27":[-106.46,1402.86],"6-121-56":[-114.63,475.76],"6-121-57":[-117.59,2620.78],"5-60-28":[-117.59,2656.26],"6-121-58":[-116.47,3433.82],"6-121-59":[-115.52,3317.92],"5-60-29":[-116.47,3433.82],"6-121-60":[-115.69,2320.2],"6-121-61":[-91.83,4077.78],"5-60-30":[-115.69,4077.78],"6-121-62":[1924.9,2984.14],"6-121-63":[-29.54,3088.17],"5-60-31":[-29.54,3090.38],"6-122-0":[9.42,26.76],"6-122-1":[5.65,18.59],"6-122-2":[2.49,11.4],"6-122-3":[0.26,4.81],"6-122-4":[1.95,7.47],"6-122-5":[0.77,4.8],"6-122-6":[1.14,7.62],"6-122-7":[3.84,1528.57],"6-122-8":[108.15,1757.51],"6-122-9":[10.94,1582.28],"6-122-10":[6.8,1233.67],"6-122-11":[7.89,932.54],"6-122-12":[-3.4,850.98],"6-122-13":[1.64,20.11],"6-122-14":[0.48,16.34],"6-122-15":[-7.21,6.88],"6-122-16":[-12.07,-0.71],"6-122-17":[-17.59,-4.25],"6-122-18":[-18.55,-5.37],"6-122-19":[-18.72,-6.19],"6-122-20":[-17.57,-2.87],"6-122-21":[-10.75,2.46],"6-122-22":[-3.63,10.62],"6-122-23":[1.49,22.49],"6-122-24":[7.72,36.85],"6-122-25":[14.12,46.47],"6-122-26":[19.28,54.72],"6-122-27":[23.59,60.99],"6-122-28":[26.75,65.91],"6-122-29":[28.53,72.29],"6-122-30":[31.65,81.32],"6-122-31":[36.02,86.88],"6-122-32":[39.15,92.44],"6-122-33":[41.65,106.03],"6-122-34":[46.65,119.42],"6-122-35":[48.07,866.32],"6-122-36":[45.55,126.93],"6-122-37":[53.7,127.16],"6-122-38":[52.98,340.77],"6-122-39":[35.29,1689.03],"6-122-40":[46.98,106.61],"6-122-41":[40,96.95],"6-122-42":[33.4,82.62],"6-122-43":[27.67,66.13],"6-122-44":[18.65,57.54],"6-122-45":[14.32,44.27],"6-122-46":[3,29.21],"6-122-47":[-11.15,13.47],"6-122-48":[-19.42,-2.93],"6-122-49":[-27.38,-6.28],"6-122-50":[-46.34,517.88],"6-122-51":[-65.39,-20.43],"6-122-52":[-77.62,-31.58],"6-122-53":[-81.78,-37.06],"6-122-54":[-91.49,-38.57],"6-122-55":[-105.7,-45.16],"6-122-56":[-117.38,-51.89],"6-122-57":[-60.46,3075.8],"6-122-58":[-117.89,3148.6],"6-122-59":[-115.52,2551.83],"6-122-60":[-111.82,209.78],"6-122-61":[-93.22,3800.64],"6-122-62":[1431.84,3358.99],"6-122-63":[-29.54,3084.48],"6-123-0":[9.85,26.78],"6-123-1":[5.73,18.86],"5-61-0":[5.65,26.78],"6-123-2":[2.93,12],"6-123-3":[0.14,5.41],"5-61-1":[0.14,12],"4-30-0":[0.14,26.78],"6-123-4":[0.92,8.02],"6-123-5":[1.11,5.42],"5-61-2":[0.77,8.02],"6-123-6":[1.15,7.19],"6-123-7":[3.59,1680.33],"5-61-3":[1.14,1680.33],"4-30-1":[0.71,1680.33],"6-123-8":[102.27,1646.59],"6-123-9":[12.03,1328.47],"5-61-4":[10.94,1757.51],"6-123-10":[4.75,1210.93],"6-123-11":[5.38,20.59],"5-61-5":[4.75,1233.67],"4-30-2":[4.75,3277.23],"6-123-12":[-6.75,744.81],"6-123-13":[-5.24,18.85],"5-61-6":[-6.75,850.98],"6-123-14":[-6.42,11.45],"6-123-15":[-19.48,0.49],"5-61-7":[-19.48,16.34],"4-30-3":[-19.48,4774.23],"6-123-16":[-20.74,-3.9],"6-123-17":[-25.13,-6.72],"5-61-8":[-25.13,-0.71],"6-123-18":[-25.13,-8.71],"6-123-19":[-20.44,-8.81],"5-61-9":[-25.13,-5.37],"4-30-4":[-25.13,17.95],"6-123-20":[-19,-6.48],"6-123-21":[-14.63,-2.18],"5-61-10":[-19,2.46],"6-123-22":[-8.94,1.5],"6-123-23":[-0.85,14.41],"5-61-11":[-8.94,22.49],"4-30-5":[-19,39.89],"6-123-24":[5.5,29.61],"6-123-25":[10.76,38.58],"5-61-12":[5.5,46.47],"6-123-26":[16.15,50.77],"6-123-27":[19.03,52.37],"5-61-13":[16.15,60.99],"4-30-6":[5.5,69.78],"6-123-28":[20.24,74.26],"6-123-29":[19.92,68.93],"5-61-14":[19.92,74.26],"6-123-30":[27.6,72.06],"6-123-31":[30.84,78.32],"5-61-15":[27.6,86.88],"4-30-7":[19.92,831.89],"6-123-32":[9.9,105.9],"6-123-33":[38.55,93.32],"5-61-16":[9.9,106.03],"6-123-34":[42.04,104.47],"6-123-35":[26.89,608.86],"5-61-17":[26.89,866.32],"4-30-8":[9.56,2387.59],"6-123-36":[44.53,1017.74],"6-123-37":[-166.26,1941.75],"5-61-18":[-166.26,1941.75],"6-123-38":[49.91,717.25],"6-123-39":[18.08,1664.47],"5-61-19":[18.08,1689.03],"4-30-9":[-166.26,1941.75],"6-123-40":[48.47,309.11],"6-123-41":[41.3,105.67],"5-61-20":[40,309.11],"6-123-42":[34.67,357.87],"6-123-43":[28.79,77.86],"5-61-21":[27.67,357.87],"4-30-10":[8.57,495.66],"6-123-44":[23.62,65.38],"6-123-45":[14.32,51.14],"5-61-22":[14.32,65.38],"6-123-46":[6.73,41.96],"6-123-47":[-345.62,2939.6],"5-61-23":[-345.62,2939.6],"4-30-11":[-345.62,2939.6],"6-123-48":[-74.06,2088.42],"6-123-49":[-22.42,566.58],"5-61-24":[-74.06,2088.42],"6-123-50":[-82.31,649.83],"6-123-51":[-70.1,-20.38],"5-61-25":[-82.31,649.83],"4-30-12":[-82.31,2088.42],"6-123-52":[-83.38,-32.37],"6-123-53":[-91.85,-39.81],"5-61-26":[-91.85,-31.58],"6-123-54":[-95.58,-41.02],"6-123-55":[-108.17,-46.75],"5-61-27":[-108.17,-38.57],"4-30-13":[-108.17,1402.86],"6-123-56":[-118.68,-52.76],"6-123-57":[-116.81,3530.38],"5-61-28":[-118.68,3530.38],"6-123-58":[-117.58,2686.35],"6-123-59":[-114.23,3368.3],"5-61-29":[-117.89,3368.3],"4-30-14":[-118.68,3530.38],"6-123-60":[-105.65,-47.93],"6-123-61":[-94.72,4324.92],"5-61-30":[-111.82,4324.92],"6-123-62":[1173.34,3260.29],"6-123-63":[-29.54,3084.24],"5-61-31":[-29.54,3358.99],"4-30-15":[-115.69,4324.92],"6-124-0":[10.16,26.79],"6-124-1":[6.14,19.04],"6-124-2":[3.03,12.26],"6-124-3":[0.14,5.75],"6-124-4":[0.89,8.06],"6-124-5":[1.26,5.67],"6-124-6":[1.39,7.36],"6-124-7":[3.52,1617.82],"6-124-8":[8.51,1409.69],"6-124-9":[10.13,2305.88],"6-124-10":[0.45,2164.88],"6-124-11":[2.56,14.63],"6-124-12":[-3.24,14.32],"6-124-13":[-10.59,10.54],"6-124-14":[-10.36,8.76],"6-124-15":[-21.04,0],"6-124-16":[-24.64,-2.76],"6-124-17":[-31.2,-3.85],"6-124-18":[-30.75,-6.47],"6-124-19":[-26.11,-2.49],"6-124-20":[-24.31,-7.51],"6-124-21":[-15.23,-4.76],"6-124-22":[-13.59,-0.84],"6-124-23":[-4.55,9.7],"6-124-24":[2.35,21.54],"6-124-25":[7.35,32.3],"6-124-26":[12.55,38.19],"6-124-27":[15.94,48.53],"6-124-28":[21.55,62.2],"6-124-29":[18.5,57.21],"6-124-30":[24.34,61.69],"6-124-31":[27.97,68.96],"6-124-32":[29.89,114.26],"6-124-33":[33.15,84.09],"6-124-34":[36.93,96.35],"6-124-35":[42.03,117.27],"6-124-36":[44.94,447.27],"6-124-37":[62.06,132.91],"6-124-38":[41.71,1137.87],"6-124-39":[34.07,895.97],"6-124-40":[47.96,131.97],"6-124-41":[46.43,105.92],"6-124-42":[39.86,96.09],"6-124-43":[32.69,85.75],"6-124-44":[26.31,75.44],"6-124-45":[20.78,56.69],"6-124-46":[8.98,1441.5],"6-124-47":[-4.07,3719.73],"6-124-48":[-31.98,2290.2],"6-124-49":[-23.42,-3.78],"6-124-50":[-84.41,535.73],"6-124-51":[-73.94,-20.62],"6-124-52":[-86.86,-35.05],"6-124-53":[-95.4,-42.17],"6-124-54":[-98.04,-43.58],"6-124-55":[-110.57,-48.45],"6-124-56":[-118.68,-54.08],"6-124-57":[-117.84,3544.4],"6-124-58":[-118.43,1962.19],"6-124-59":[-115.85,2252.06],"6-124-60":[-105.91,-48.57],"6-124-61":[-95.38,3812.59],"6-124-62":[594.22,3705.94],"6-124-63":[-29.54,3085.39],"6-125-0":[10.35,26.81],"6-125-1":[6.14,19.41],"5-62-0":[6.14,26.81],"6-125-2":[3.26,12.44],"6-125-3":[0.9,6.39],"5-62-1":[0.14,12.44],"6-125-4":[1.27,6.49],"6-125-5":[1.13,5.32],"5-62-2":[0.89,8.06],"6-125-6":[1.29,6.47],"6-125-7":[3.14,1111.24],"5-62-3":[1.29,1617.82],"6-125-8":[7.11,1048.77],"6-125-9":[6.89,1518.99],"5-62-4":[6.89,2305.88],"6-125-10":[-2.91,1665.46],"6-125-11":[0,6.86],"5-62-5":[-2.91,2164.88],"6-125-12":[-2.34,8.77],"6-125-13":[-14.46,953.56],"5-62-6":[-14.46,953.56],"6-125-14":[-5.06,5.28],"6-125-15":[-17.98,-2.39],"5-62-7":[-21.04,8.76],"6-125-16":[-24.4,-7.68],"6-125-17":[-28.6,-10.11],"5-62-8":[-31.2,-2.76],"6-125-18":[-28.6,-11],"6-125-19":[-25.62,-2.41],"5-62-9":[-30.75,-2.41],"6-125-20":[-22.75,-4.66],"6-125-21":[-15.81,-6.04],"5-62-10":[-24.31,-4.66],"6-125-22":[-14.02,-3.42],"6-125-23":[-6.77,4.64],"5-62-11":[-14.02,9.7],"6-125-24":[1.21,15.8],"6-125-25":[6.11,24.94],"5-62-12":[1.21,32.3],"6-125-26":[10.22,30.26],"6-125-27":[13.87,41.98],"5-62-13":[10.22,48.53],"6-125-28":[18.08,48.13],"6-125-29":[17.79,54.5],"5-62-14":[17.79,62.2],"6-125-30":[22.38,56.85],"6-125-31":[16.56,59.8],"5-62-15":[16.56,68.96],"6-125-32":[25.85,66.31],"6-125-33":[27.99,72.87],"5-62-16":[25.85,114.26],"6-125-34":[33,81.65],"6-125-35":[38.91,103.05],"5-62-17":[33,117.27],"6-125-36":[47.5,124.13],"6-125-37":[57.22,130.49],"5-62-18":[44.94,447.27],"6-125-38":[61.15,131.46],"6-125-39":[52.54,288.83],"5-62-19":[34.07,1137.87],"6-125-40":[48.88,107.87],"6-125-41":[48.01,104.69],"5-62-20":[46.43,131.97],"6-125-42":[42.87,97.22],"6-125-43":[37.6,89.45],"5-62-21":[32.69,97.22],"6-125-44":[6.97,816.34],"6-125-45":[-0.97,2517.08],"5-62-22":[-0.97,2517.08],"6-125-46":[-17.88,2863.4],"6-125-47":[-35.65,2605.15],"5-62-23":[-35.65,3719.73],"6-125-48":[-10.05,11.03],"6-125-49":[-27.68,-4.71],"5-62-24":[-31.98,2290.2],"6-125-50":[-48.98,-11.91],"6-125-51":[-75.78,-21.91],"5-62-25":[-84.41,535.73],"6-125-52":[-88.21,-37.16],"6-125-53":[-96.9,-44.36],"5-62-26":[-96.9,-35.05],"6-125-54":[-99.71,-46.22],"6-125-55":[-113.95,-50.03],"5-62-27":[-113.95,-43.58],"6-125-56":[-118.23,-55.58],"6-125-57":[-119.6,-57.02],"5-62-28":[-119.6,3544.4],"6-125-58":[-119.13,-57.36],"6-125-59":[-115.13,-52.66],"5-62-29":[-119.13,2252.06],"6-125-60":[-106.04,-48.63],"6-125-61":[-95.54,2586.73],"5-62-30":[-106.04,3812.59],"6-125-62":[617.47,3991.97],"6-125-63":[-29.54,3087.55],"5-62-31":[-29.54,3991.97],"6-126-0":[10.48,26.83],"6-126-1":[6.39,19.79],"6-126-2":[3.59,12.74],"6-126-3":[1.34,7.32],"6-126-4":[1.23,5.6],"6-126-5":[1.15,4.51],"6-126-6":[1.24,5.95],"6-126-7":[2.53,1644.02],"6-126-8":[4.57,1334.46],"6-126-9":[2.53,1348.08],"6-126-10":[-4.55,360.68],"6-126-11":[-0.22,3.75],"6-126-12":[-4.16,11.04],"6-126-13":[-20.67,663.5],"6-126-14":[-17.18,1.9],"6-126-15":[-17.03,-2.13],"6-126-16":[-23.5,-6.98],"6-126-17":[-25.32,-10.8],"6-126-18":[-24.77,-10.53],"6-126-19":[-22.17,-7.92],"6-126-20":[-19.02,-6.36],"6-126-21":[-15.67,-4.68],"6-126-22":[-13.71,-4.14],"6-126-23":[-8.08,4.18],"6-126-24":[0.43,12.94],"6-126-25":[5.52,20.01],"6-126-26":[9,27.01],"6-126-27":[12.09,34.89],"6-126-28":[14.82,40.97],"6-126-29":[17.43,44.78],"6-126-30":[17.98,49.65],"6-126-31":[20.75,52.08],"6-126-32":[19.19,56],"6-126-33":[25.26,66],"6-126-34":[28.98,76.55],"6-126-35":[34.87,95.02],"6-126-36":[41.34,297.72],"6-126-37":[52.33,122.31],"6-126-38":[55.22,587.24],"6-126-39":[52.13,124.15],"6-126-40":[49.8,107.99],"6-126-41":[47.34,102.99],"6-126-42":[43.4,96.7],"6-126-43":[39.32,87],"6-126-44":[-5.9,921.24],"6-126-45":[-23.78,2784.98],"6-126-46":[-12.29,1743.24],"6-126-47":[4.88,29.21],"6-126-48":[-9.96,11.4],"6-126-49":[-34.93,-4.57],"6-126-50":[-54.64,-14.05],"6-126-51":[-75.71,-26.38],"6-126-52":[-89.11,-37.37],"6-126-53":[-98.36,-44.98],"6-126-54":[-101.06,-48.44],"6-126-55":[-115.57,-50.65],"6-126-56":[-120.87,-56.97],"6-126-57":[-122.6,-57.42],"6-126-58":[-120.57,-57.41],"6-126-59":[-115.91,-52.64],"6-126-60":[-106.89,-48.23],"6-126-61":[-95.56,3164.9],"6-126-62":[1096.86,4009.42],"6-126-63":[-29.54,3089.77],"6-127-0":[10.58,26.87],"6-127-1":[6.39,20.25],"5-63-0":[6.39,26.87],"6-127-2":[3.82,13.4],"6-127-3":[2.41,8.63],"5-63-1":[1.34,13.4],"4-31-0":[0.14,26.87],"6-127-4":[1.13,6.79],"6-127-5":[1.13,4.39],"5-63-2":[1.13,6.79],"6-127-6":[1.24,612.64],"6-127-7":[2.31,1712.25],"5-63-3":[1.24,1712.25],"4-31-1":[0.89,1712.25],"3-15-0":[0.14,1712.25],"6-127-8":[4.5,1465.56],"6-127-9":[3.01,918.23],"5-63-4":[2.53,1465.56],"6-127-10":[-3.08,11.47],"6-127-11":[-0.12,3.44],"5-63-5":[-4.55,360.68],"4-31-2":[-4.55,2305.88],"6-127-12":[-1.99,11.61],"6-127-13":[-24.8,1210.91],"5-63-6":[-24.8,1210.91],"6-127-14":[-25.57,1.39],"6-127-15":[-13.94,-1.38],"5-63-7":[-25.57,1.9],"4-31-3":[-25.57,1210.91],"3-15-1":[-25.57,4774.23],"2-7-0":[-25.57,4774.23],"6-127-16":[-21,-6.43],"6-127-17":[-25.9,-10.68],"5-63-8":[-25.9,-6.43],"6-127-18":[-26.05,-10.54],"6-127-19":[-22.59,-7.92],"5-63-9":[-26.05,-7.92],"4-31-4":[-31.2,-2.41],"6-127-20":[-19,-7.92],"6-127-21":[-16.82,-4.7],"5-63-10":[-19.02,-4.68],"6-127-22":[-10.69,-3.04],"6-127-23":[-8.26,1.26],"5-63-11":[-13.71,4.18],"4-31-5":[-24.31,9.7],"3-15-2":[-31.2,39.89],"6-127-24":[0.43,9.72],"6-127-25":[4.5,17.61],"5-63-12":[0.43,20.01],"6-127-26":[6.9,22.78],"6-127-27":[8.89,29.21],"5-63-13":[6.9,34.89],"4-31-6":[0.43,48.53],"6-127-28":[12.01,35],"6-127-29":[14.22,37.73],"5-63-14":[12.01,44.78],"6-127-30":[15.67,40.09],"6-127-31":[19.02,46.55],"5-63-15":[15.67,52.08],"4-31-7":[12.01,68.96],"3-15-3":[0.43,831.89],"2-7-1":[-84.13,3800.26],"1-3-0":[-268.7,7512.84],"6-127-32":[20.92,50.53],"6-127-33":[22.89,57.98],"5-63-16":[19.19,66],"6-127-34":[25.27,69.75],"6-127-35":[27.53,86.05],"5-63-17":[25.27,95.02],"4-31-8":[19.19,117.27],"6-127-36":[39.54,104.68],"6-127-37":[22.06,1069.23],"5-63-18":[22.06,1069.23],"6-127-38":[20.15,1371.15],"6-127-39":[49.74,108.66],"5-63-19":[20.15,1371.15],"4-31-9":[20.15,1371.15],"3-15-4":[-166.26,2387.59],"6-127-40":[48.93,103.15],"6-127-41":[47.07,98.56],"5-63-20":[47.07,107.99],"6-127-42":[43.96,94.48],"6-127-43":[38.98,91.71],"5-63-21":[38.98,96.7],"4-31-10":[32.69,131.97],"6-127-44":[20.8,83.16],"6-127-45":[-12.67,1759.88],"5-63-22":[-23.78,2784.98],"6-127-46":[11.75,42.6],"6-127-47":[3.24,30.55],"5-63-23":[-12.29,1743.24],"4-31-11":[-35.65,3719.73],"3-15-5":[-345.62,3719.73],"2-7-2":[-345.62,5227.39],"6-127-48":[-9.45,37.42],"6-127-49":[-38.82,351.39],"5-63-24":[-38.82,351.39],"6-127-50":[-56.24,-17.74],"6-127-51":[-75.79,-28.67],"5-63-25":[-75.79,-14.05],"4-31-12":[-84.41,2290.2],"6-127-52":[-88.85,-37.45],"6-127-53":[-98.42,-44.71],"5-63-26":[-98.42,-37.37],"6-127-54":[-101.55,-48.81],"6-127-55":[-117.07,-50.94],"5-63-27":[-117.07,-48.44],"4-31-13":[-117.07,-35.05],"3-15-6":[-117.07,2290.2],"6-127-56":[-123.45,-57.63],"6-127-57":[-123.93,-60.36],"5-63-28":[-123.93,-56.97],"6-127-58":[-123.3,-58.62],"6-127-59":[-117.49,-53.65],"5-63-29":[-123.3,-52.64],"4-31-14":[-123.93,3544.4],"6-127-60":[-109.53,-48.22],"6-127-61":[-95.58,1201.67],"5-63-30":[-109.53,3164.9],"6-127-62":[-43.08,3227.47],"6-127-63":[-31.68,3092.98],"5-63-31":[-43.08,4009.42],"4-31-15":[-109.53,4009.42],"3-15-7":[-123.93,4324.92],"2-7-3":[-123.93,4324.92],"1-3-1":[-345.62,5227.39],"0-1-0":[-398.55,8777.15]} \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Animation/Animation.css b/cate/webapi/app/cesium/Widgets/Animation/Animation.css new file mode 100644 index 000000000..1f1ce2491 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Animation/Animation.css @@ -0,0 +1,176 @@ +.cesium-animation-theme { + visibility: hidden; + display: block; + position: absolute; + z-index: -100; +} + +.cesium-animation-themeNormal { + color: #222; +} + +.cesium-animation-themeHover { + color: #4488b0; +} + +.cesium-animation-themeSelect { + color: #242; +} + +.cesium-animation-themeDisabled { + color: #333; +} + +.cesium-animation-themeKnob { + color: #222; +} + +.cesium-animation-themePointer { + color: #2e2; +} + +.cesium-animation-themeSwoosh { + color: #8ac; +} + +.cesium-animation-themeSwooshHover { + color: #aef; +} + +.cesium-animation-svgText { + fill: #edffff; + font-family: Sans-Serif; + font-size: 15px; + text-anchor: middle; +} + +.cesium-animation-blank { + fill: #000; + fill-opacity: 0.01; /* This must be clickable, so it can't be 'fill: none'. */ + stroke: none; +} + +.cesium-animation-rectButton { + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.cesium-animation-rectButton .cesium-animation-buttonGlow { + fill: #fff; + stroke: none; + /* Widget will add: filter: url(#animation_blurred); */ + display: none; +} + +.cesium-animation-rectButton:hover .cesium-animation-buttonGlow { + display: block; +} + +.cesium-animation-rectButton .cesium-animation-buttonPath { + fill: #edffff; +} + +.cesium-animation-rectButton .cesium-animation-buttonMain { + /* Widget will add: fill: url(#animation_buttonNormal); */ + stroke: #444; + stroke-width: 1.2; +} + +.cesium-animation-rectButton:hover .cesium-animation-buttonMain { + /* Widget will add: fill: url(#animation_buttonHovered); */ + stroke: #aef; +} + +.cesium-animation-rectButton:active .cesium-animation-buttonMain { + fill: #abd6ff; +} + +.cesium-animation-buttonDisabled { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.cesium-animation-buttonDisabled .cesium-animation-buttonMain { + /* Widget will add: fill: url(#animation_buttonDisabled); */ + stroke: #555; +} + +.cesium-animation-buttonDisabled .cesium-animation-buttonPath { + fill: #818181; +} + +.cesium-animation-buttonDisabled .cesium-animation-buttonGlow { + display: none; +} + +.cesium-animation-buttonToggled .cesium-animation-buttonGlow { + display: block; + fill: #2e2; +} + +.cesium-animation-buttonToggled .cesium-animation-buttonMain { + stroke: #2e2; +} + +.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow { + fill: #fff; +} + +.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain { + stroke: #2e2; +} + +.cesium-animation-shuttleRingG { + cursor: pointer; +} + +/* Widget will add: +.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { + fill: url(#animation_shuttleRingSwooshGradient); +} + +.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { + fill: url(#animation_shuttleRingSwooshHovered); +} +*/ + +.cesium-animation-shuttleRingPointer { + /* Widget will add: fill: url(#animation_shuttleRingPointerGradient); */ + cursor: pointer; +} + +.cesium-animation-shuttleRingPausePointer { + /* Widget will add: fill: url(#animation_shuttleRingPointerPaused); */ + cursor: pointer; +} + +.cesium-animation-shuttleRingBack { + fill: #181818; + fill-opacity: 0.8; + stroke: #333; + stroke-width: 1.2; +} + +.cesium-animation-shuttleRingSwoosh line { + stroke: #8ac; + stroke-width: 3; + stroke-opacity: 0.2; + stroke-linecap: round; +} + +.cesium-animation-knobOuter { + /* Widget will add: fill: url(#animation_knobOuter); */ + cursor: pointer; + stroke: #444; + stroke-width: 1.2; +} + +.cesium-animation-knobInner { + /* Widget will add: fill: url(#animation_knobInner); */ + cursor: pointer; +} diff --git a/cate/webapi/app/cesium/Widgets/Animation/Animation.js b/cate/webapi/app/cesium/Widgets/Animation/Animation.js new file mode 100644 index 000000000..cb5b5fcb3 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Animation/Animation.js @@ -0,0 +1,1244 @@ +import Color from "../../Core/Color.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import getElement from "../getElement.js"; +import subscribeAndEvaluate from "../subscribeAndEvaluate.js"; + +var svgNS = "http://www.w3.org/2000/svg"; +var xlinkNS = "http://www.w3.org/1999/xlink"; + +var widgetForDrag; + +var gradientEnabledColor0 = Color.fromCssColorString("rgba(247,250,255,0.384)"); +var gradientEnabledColor1 = Color.fromCssColorString("rgba(143,191,255,0.216)"); +var gradientEnabledColor2 = Color.fromCssColorString("rgba(153,197,255,0.098)"); +var gradientEnabledColor3 = Color.fromCssColorString("rgba(255,255,255,0.086)"); + +var gradientDisabledColor0 = Color.fromCssColorString( + "rgba(255,255,255,0.267)" +); +var gradientDisabledColor1 = Color.fromCssColorString("rgba(255,255,255,0)"); + +var gradientKnobColor = Color.fromCssColorString("rgba(66,67,68,0.3)"); +var gradientPointerColor = Color.fromCssColorString("rgba(0,0,0,0.5)"); + +function getElementColor(element) { + return Color.fromCssColorString( + window.getComputedStyle(element).getPropertyValue("color") + ); +} + +var svgIconsById = { + animation_pathReset: { + tagName: "path", + transform: "translate(16,16) scale(0.85) translate(-16,-16)", + d: + "M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z", + }, + animation_pathPause: { + tagName: "path", + transform: "translate(16,16) scale(0.85) translate(-16,-16)", + d: "M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z", + }, + animation_pathPlay: { + tagName: "path", + transform: "translate(16,16) scale(0.85) translate(-16,-16)", + d: "M6.684,25.682L24.316,15.5L6.684,5.318V25.682z", + }, + animation_pathPlayReverse: { + tagName: "path", + transform: "translate(16,16) scale(-0.85,0.85) translate(-16,-16)", + d: "M6.684,25.682L24.316,15.5L6.684,5.318V25.682z", + }, + animation_pathLoop: { + tagName: "path", + transform: "translate(16,16) scale(0.85) translate(-16,-16)", + d: + "M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z", + }, + animation_pathClock: { + tagName: "path", + transform: "translate(16,16) scale(0.85) translate(-16,-15.5)", + d: + "M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z", + }, + animation_pathWingButton: { + tagName: "path", + d: + "m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z", + }, + animation_pathPointer: { + tagName: "path", + d: "M-15,-65,-15,-55,15,-55,15,-65,0,-95z", + }, + animation_pathSwooshFX: { + tagName: "path", + d: + "m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z", + }, +}; + +//Dynamically builds an SVG element from a JSON object. +function svgFromObject(obj) { + var ele = document.createElementNS(svgNS, obj.tagName); + for (var field in obj) { + if (obj.hasOwnProperty(field) && field !== "tagName") { + if (field === "children") { + var i; + var len = obj.children.length; + for (i = 0; i < len; ++i) { + ele.appendChild(svgFromObject(obj.children[i])); + } + } else if (field.indexOf("xlink:") === 0) { + ele.setAttributeNS(xlinkNS, field.substring(6), obj[field]); + } else if (field === "textContent") { + ele.textContent = obj[field]; + } else { + ele.setAttribute(field, obj[field]); + } + } + } + return ele; +} + +function svgText(x, y, msg) { + var text = document.createElementNS(svgNS, "text"); + text.setAttribute("x", x); + text.setAttribute("y", y); + text.setAttribute("class", "cesium-animation-svgText"); + + var tspan = document.createElementNS(svgNS, "tspan"); + tspan.textContent = msg; + text.appendChild(tspan); + return text; +} + +function setShuttleRingPointer(shuttleRingPointer, knobOuter, angle) { + shuttleRingPointer.setAttribute( + "transform", + "translate(100,100) rotate(" + angle + ")" + ); + knobOuter.setAttribute("transform", "rotate(" + angle + ")"); +} + +var makeColorStringScratch = new Color(); +function makeColorString(background, gradient) { + var gradientAlpha = gradient.alpha; + var backgroundAlpha = 1.0 - gradientAlpha; + makeColorStringScratch.red = + background.red * backgroundAlpha + gradient.red * gradientAlpha; + makeColorStringScratch.green = + background.green * backgroundAlpha + gradient.green * gradientAlpha; + makeColorStringScratch.blue = + background.blue * backgroundAlpha + gradient.blue * gradientAlpha; + return makeColorStringScratch.toCssColorString(); +} + +function rectButton(x, y, path) { + var iconInfo = svgIconsById[path]; + + var button = { + tagName: "g", + class: "cesium-animation-rectButton", + transform: "translate(" + x + "," + y + ")", + children: [ + { + tagName: "rect", + class: "cesium-animation-buttonGlow", + width: 32, + height: 32, + rx: 2, + ry: 2, + }, + { + tagName: "rect", + class: "cesium-animation-buttonMain", + width: 32, + height: 32, + rx: 4, + ry: 4, + }, + { + class: "cesium-animation-buttonPath", + id: path, + tagName: iconInfo.tagName, + transform: iconInfo.transform, + d: iconInfo.d, + }, + { + tagName: "title", + textContent: "", + }, + ], + }; + return svgFromObject(button); +} + +function wingButton(x, y, path) { + var buttonIconInfo = svgIconsById[path]; + var wingIconInfo = svgIconsById["animation_pathWingButton"]; + + var button = { + tagName: "g", + class: "cesium-animation-rectButton", + transform: "translate(" + x + "," + y + ")", + children: [ + { + class: "cesium-animation-buttonGlow", + id: "animation_pathWingButton", + tagName: wingIconInfo.tagName, + d: wingIconInfo.d, + }, + { + class: "cesium-animation-buttonMain", + id: "animation_pathWingButton", + tagName: wingIconInfo.tagName, + d: wingIconInfo.d, + }, + { + class: "cesium-animation-buttonPath", + id: path, + tagName: buttonIconInfo.tagName, + transform: buttonIconInfo.transform, + d: buttonIconInfo.d, + }, + { + tagName: "title", + textContent: "", + }, + ], + }; + return svgFromObject(button); +} + +function setShuttleRingFromMouseOrTouch(widget, e) { + var viewModel = widget._viewModel; + var shuttleRingDragging = viewModel.shuttleRingDragging; + + if (shuttleRingDragging && widgetForDrag !== widget) { + return; + } + + if ( + e.type === "mousedown" || + (shuttleRingDragging && e.type === "mousemove") || + (e.type === "touchstart" && e.touches.length === 1) || + (shuttleRingDragging && e.type === "touchmove" && e.touches.length === 1) + ) { + var centerX = widget._centerX; + var centerY = widget._centerY; + var svg = widget._svgNode; + var rect = svg.getBoundingClientRect(); + var clientX; + var clientY; + if (e.type === "touchstart" || e.type === "touchmove") { + clientX = e.touches[0].clientX; + clientY = e.touches[0].clientY; + } else { + clientX = e.clientX; + clientY = e.clientY; + } + + if ( + !shuttleRingDragging && + (clientX > rect.right || + clientX < rect.left || + clientY < rect.top || + clientY > rect.bottom) + ) { + return; + } + + var pointerRect = widget._shuttleRingPointer.getBoundingClientRect(); + + var x = clientX - centerX - rect.left; + var y = clientY - centerY - rect.top; + + var angle = (Math.atan2(y, x) * 180) / Math.PI + 90; + if (angle > 180) { + angle -= 360; + } + var shuttleRingAngle = viewModel.shuttleRingAngle; + if ( + shuttleRingDragging || + (clientX < pointerRect.right && + clientX > pointerRect.left && + clientY > pointerRect.top && + clientY < pointerRect.bottom) + ) { + widgetForDrag = widget; + viewModel.shuttleRingDragging = true; + viewModel.shuttleRingAngle = angle; + } else if (angle < shuttleRingAngle) { + viewModel.slower(); + } else if (angle > shuttleRingAngle) { + viewModel.faster(); + } + e.preventDefault(); + } else { + if (widget === widgetForDrag) { + widgetForDrag = undefined; + } + viewModel.shuttleRingDragging = false; + } +} + +//This is a private class for treating an SVG element like a button. +//If we ever need a general purpose SVG button, we can make this generic. +function SvgButton(svgElement, viewModel) { + this._viewModel = viewModel; + this.svgElement = svgElement; + this._enabled = undefined; + this._toggled = undefined; + + var that = this; + this._clickFunction = function () { + var command = that._viewModel.command; + if (command.canExecute) { + command(); + } + }; + + svgElement.addEventListener("click", this._clickFunction, true); + + //TODO: Since the animation widget uses SVG and has no HTML backing, + //we need to wire everything up manually. Knockout can supposedly + //bind to SVG, so we we figure that out we can modify our SVG + //to include the binding information directly. + + this._subscriptions = [ + // + subscribeAndEvaluate(viewModel, "toggled", this.setToggled, this), // + subscribeAndEvaluate(viewModel, "tooltip", this.setTooltip, this), // + subscribeAndEvaluate( + viewModel.command, + "canExecute", + this.setEnabled, + this + ), + ]; +} + +SvgButton.prototype.destroy = function () { + this.svgElement.removeEventListener("click", this._clickFunction, true); + var subscriptions = this._subscriptions; + for (var i = 0, len = subscriptions.length; i < len; i++) { + subscriptions[i].dispose(); + } + destroyObject(this); +}; + +SvgButton.prototype.isDestroyed = function () { + return false; +}; + +SvgButton.prototype.setEnabled = function (enabled) { + if (this._enabled !== enabled) { + this._enabled = enabled; + + if (!enabled) { + this.svgElement.setAttribute("class", "cesium-animation-buttonDisabled"); + return; + } + + if (this._toggled) { + this.svgElement.setAttribute( + "class", + "cesium-animation-rectButton cesium-animation-buttonToggled" + ); + return; + } + + this.svgElement.setAttribute("class", "cesium-animation-rectButton"); + } +}; + +SvgButton.prototype.setToggled = function (toggled) { + if (this._toggled !== toggled) { + this._toggled = toggled; + + if (this._enabled) { + if (toggled) { + this.svgElement.setAttribute( + "class", + "cesium-animation-rectButton cesium-animation-buttonToggled" + ); + } else { + this.svgElement.setAttribute("class", "cesium-animation-rectButton"); + } + } + } +}; + +SvgButton.prototype.setTooltip = function (tooltip) { + this.svgElement.getElementsByTagName("title")[0].textContent = tooltip; +}; + +/** + * + * + *
Animation widget + *
+ *

+ * The Animation widget provides buttons for play, pause, and reverse, along with the + * current time and date, surrounded by a "shuttle ring" for controlling the speed of animation. + *

+ * The "shuttle ring" concept is borrowed from video editing, where typically a + * "jog wheel" can be rotated to move past individual animation frames very slowly, and + * a surrounding shuttle ring can be twisted to control direction and speed of fast playback. + * Cesium typically treats time as continuous (not broken into pre-defined animation frames), + * so this widget offers no jog wheel. Instead, the shuttle ring is capable of both fast and + * very slow playback. Click and drag the shuttle ring pointer itself (shown above in green), + * or click in the rest of the ring area to nudge the pointer to the next preset speed in that direction. + *

+ * The Animation widget also provides a "realtime" button (in the upper-left) that keeps + * animation time in sync with the end user's system clock, typically displaying + * "today" or "right now." This mode is not available in {@link ClockRange.CLAMPED} or + * {@link ClockRange.LOOP_STOP} mode if the current time is outside of {@link Clock}'s startTime and endTime. + * + * @alias Animation + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {AnimationViewModel} viewModel The view model used by this widget. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * + * @example + * // In HTML head, include a link to Animation.css stylesheet, + * // and in the body, include:
+ * + * var clock = new Cesium.Clock(); + * var clockViewModel = new Cesium.ClockViewModel(clock); + * var viewModel = new Cesium.AnimationViewModel(clockViewModel); + * var widget = new Cesium.Animation('animationContainer', viewModel); + * + * function tick() { + * clock.tick(); + * Cesium.requestAnimationFrame(tick); + * } + * Cesium.requestAnimationFrame(tick); + * + * @see AnimationViewModel + * @see Clock + */ +function Animation(container, viewModel) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + if (!defined(viewModel)) { + throw new DeveloperError("viewModel is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + this._viewModel = viewModel; + this._container = container; + this._centerX = 0; + this._centerY = 0; + this._defsElement = undefined; + this._svgNode = undefined; + this._topG = undefined; + this._lastHeight = undefined; + this._lastWidth = undefined; + + var ownerDocument = container.ownerDocument; + + // Firefox requires SVG references to be included directly, not imported from external CSS. + // Also, CSS minifiers get confused by this being in an external CSS file. + var cssStyle = document.createElement("style"); + cssStyle.textContent = + ".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }\ +.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }\ +.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }\ +.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }\ +.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }\ +.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }\ +.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }\ +.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }\ +.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }\ +.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }\ +.cesium-animation-knobInner { fill: url(#animation_knobInner); }"; + + ownerDocument.head.insertBefore(cssStyle, ownerDocument.head.childNodes[0]); + + var themeEle = document.createElement("div"); + themeEle.className = "cesium-animation-theme"; + themeEle.innerHTML = + '
\ +
\ +
\ +
\ +
\ +
\ +
\ +
'; + + this._theme = themeEle; + this._themeNormal = themeEle.childNodes[0]; + this._themeHover = themeEle.childNodes[1]; + this._themeSelect = themeEle.childNodes[2]; + this._themeDisabled = themeEle.childNodes[3]; + this._themeKnob = themeEle.childNodes[4]; + this._themePointer = themeEle.childNodes[5]; + this._themeSwoosh = themeEle.childNodes[6]; + this._themeSwooshHover = themeEle.childNodes[7]; + + var svg = document.createElementNS(svgNS, "svg:svg"); + this._svgNode = svg; + + // Define the XLink namespace that SVG uses + svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", xlinkNS); + + var topG = document.createElementNS(svgNS, "g"); + this._topG = topG; + + this._realtimeSVG = new SvgButton( + wingButton(3, 4, "animation_pathClock"), + viewModel.playRealtimeViewModel + ); + this._playReverseSVG = new SvgButton( + rectButton(44, 99, "animation_pathPlayReverse"), + viewModel.playReverseViewModel + ); + this._playForwardSVG = new SvgButton( + rectButton(124, 99, "animation_pathPlay"), + viewModel.playForwardViewModel + ); + this._pauseSVG = new SvgButton( + rectButton(84, 99, "animation_pathPause"), + viewModel.pauseViewModel + ); + + var buttonsG = document.createElementNS(svgNS, "g"); + buttonsG.appendChild(this._realtimeSVG.svgElement); + buttonsG.appendChild(this._playReverseSVG.svgElement); + buttonsG.appendChild(this._playForwardSVG.svgElement); + buttonsG.appendChild(this._pauseSVG.svgElement); + + var shuttleRingBackPanel = svgFromObject({ + tagName: "circle", + class: "cesium-animation-shuttleRingBack", + cx: 100, + cy: 100, + r: 99, + }); + this._shuttleRingBackPanel = shuttleRingBackPanel; + + var swooshIconInfo = svgIconsById["animation_pathSwooshFX"]; + var shuttleRingPointerIconInfo = svgIconsById["animation_pathPointer"]; + + var shuttleRingSwooshG = svgFromObject({ + tagName: "g", + class: "cesium-animation-shuttleRingSwoosh", + children: [ + { + tagName: swooshIconInfo.tagName, + transform: "translate(100,97) scale(-1,1)", + id: "animation_pathSwooshFX", + d: swooshIconInfo.d, + }, + { + tagName: swooshIconInfo.tagName, + transform: "translate(100,97)", + id: "animation_pathSwooshFX", + d: swooshIconInfo.d, + }, + { + tagName: "line", + x1: 100, + y1: 8, + x2: 100, + y2: 22, + }, + ], + }); + this._shuttleRingSwooshG = shuttleRingSwooshG; + + this._shuttleRingPointer = svgFromObject({ + class: "cesium-animation-shuttleRingPointer", + id: "animation_pathPointer", + tagName: shuttleRingPointerIconInfo.tagName, + d: shuttleRingPointerIconInfo.d, + }); + + var knobG = svgFromObject({ + tagName: "g", + transform: "translate(100,100)", + }); + + this._knobOuter = svgFromObject({ + tagName: "circle", + class: "cesium-animation-knobOuter", + cx: 0, + cy: 0, + r: 71, + }); + + var knobInnerAndShieldSize = 61; + + var knobInner = svgFromObject({ + tagName: "circle", + class: "cesium-animation-knobInner", + cx: 0, + cy: 0, + r: knobInnerAndShieldSize, + }); + + this._knobDate = svgText(0, -24, ""); + this._knobTime = svgText(0, -7, ""); + this._knobStatus = svgText(0, -41, ""); + + // widget shield catches clicks on the knob itself (even while DOM elements underneath are changing). + var knobShield = svgFromObject({ + tagName: "circle", + class: "cesium-animation-blank", + cx: 0, + cy: 0, + r: knobInnerAndShieldSize, + }); + + var shuttleRingBackG = document.createElementNS(svgNS, "g"); + shuttleRingBackG.setAttribute("class", "cesium-animation-shuttleRingG"); + + container.appendChild(themeEle); + topG.appendChild(shuttleRingBackG); + topG.appendChild(knobG); + topG.appendChild(buttonsG); + + shuttleRingBackG.appendChild(shuttleRingBackPanel); + shuttleRingBackG.appendChild(shuttleRingSwooshG); + shuttleRingBackG.appendChild(this._shuttleRingPointer); + + knobG.appendChild(this._knobOuter); + knobG.appendChild(knobInner); + knobG.appendChild(this._knobDate); + knobG.appendChild(this._knobTime); + knobG.appendChild(this._knobStatus); + knobG.appendChild(knobShield); + + svg.appendChild(topG); + container.appendChild(svg); + + var that = this; + function mouseCallback(e) { + setShuttleRingFromMouseOrTouch(that, e); + } + this._mouseCallback = mouseCallback; + + shuttleRingBackPanel.addEventListener("mousedown", mouseCallback, true); + shuttleRingBackPanel.addEventListener("touchstart", mouseCallback, true); + shuttleRingSwooshG.addEventListener("mousedown", mouseCallback, true); + shuttleRingSwooshG.addEventListener("touchstart", mouseCallback, true); + ownerDocument.addEventListener("mousemove", mouseCallback, true); + ownerDocument.addEventListener("touchmove", mouseCallback, true); + ownerDocument.addEventListener("mouseup", mouseCallback, true); + ownerDocument.addEventListener("touchend", mouseCallback, true); + ownerDocument.addEventListener("touchcancel", mouseCallback, true); + this._shuttleRingPointer.addEventListener("mousedown", mouseCallback, true); + this._shuttleRingPointer.addEventListener("touchstart", mouseCallback, true); + this._knobOuter.addEventListener("mousedown", mouseCallback, true); + this._knobOuter.addEventListener("touchstart", mouseCallback, true); + + //TODO: Since the animation widget uses SVG and has no HTML backing, + //we need to wire everything up manually. Knockout can supposedly + //bind to SVG, so we we figure that out we can modify our SVG + //to include the binding information directly. + + var timeNode = this._knobTime.childNodes[0]; + var dateNode = this._knobDate.childNodes[0]; + var statusNode = this._knobStatus.childNodes[0]; + var isPaused; + this._subscriptions = [ + // + subscribeAndEvaluate(viewModel.pauseViewModel, "toggled", function (value) { + if (isPaused !== value) { + isPaused = value; + if (isPaused) { + that._shuttleRingPointer.setAttribute( + "class", + "cesium-animation-shuttleRingPausePointer" + ); + } else { + that._shuttleRingPointer.setAttribute( + "class", + "cesium-animation-shuttleRingPointer" + ); + } + } + }), + + subscribeAndEvaluate(viewModel, "shuttleRingAngle", function (value) { + setShuttleRingPointer(that._shuttleRingPointer, that._knobOuter, value); + }), + + subscribeAndEvaluate(viewModel, "dateLabel", function (value) { + if (dateNode.textContent !== value) { + dateNode.textContent = value; + } + }), + + subscribeAndEvaluate(viewModel, "timeLabel", function (value) { + if (timeNode.textContent !== value) { + timeNode.textContent = value; + } + }), + + subscribeAndEvaluate(viewModel, "multiplierLabel", function (value) { + if (statusNode.textContent !== value) { + statusNode.textContent = value; + } + }), + ]; + + this.applyThemeChanges(); + this.resize(); +} + +Object.defineProperties(Animation.prototype, { + /** + * Gets the parent container. + * + * @memberof Animation.prototype + * @type {Element} + * @readonly + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * + * @memberof Animation.prototype + * @type {AnimationViewModel} + * @readonly + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Animation.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the animation widget. Should be called if permanently + * removing the widget from layout. + */ +Animation.prototype.destroy = function () { + if (defined(this._observer)) { + this._observer.disconnect(); + this._observer = undefined; + } + + var doc = this._container.ownerDocument; + + var mouseCallback = this._mouseCallback; + this._shuttleRingBackPanel.removeEventListener( + "mousedown", + mouseCallback, + true + ); + this._shuttleRingBackPanel.removeEventListener( + "touchstart", + mouseCallback, + true + ); + this._shuttleRingSwooshG.removeEventListener( + "mousedown", + mouseCallback, + true + ); + this._shuttleRingSwooshG.removeEventListener( + "touchstart", + mouseCallback, + true + ); + doc.removeEventListener("mousemove", mouseCallback, true); + doc.removeEventListener("touchmove", mouseCallback, true); + doc.removeEventListener("mouseup", mouseCallback, true); + doc.removeEventListener("touchend", mouseCallback, true); + doc.removeEventListener("touchcancel", mouseCallback, true); + this._shuttleRingPointer.removeEventListener( + "mousedown", + mouseCallback, + true + ); + this._shuttleRingPointer.removeEventListener( + "touchstart", + mouseCallback, + true + ); + this._knobOuter.removeEventListener("mousedown", mouseCallback, true); + this._knobOuter.removeEventListener("touchstart", mouseCallback, true); + + this._container.removeChild(this._svgNode); + this._container.removeChild(this._theme); + this._realtimeSVG.destroy(); + this._playReverseSVG.destroy(); + this._playForwardSVG.destroy(); + this._pauseSVG.destroy(); + + var subscriptions = this._subscriptions; + for (var i = 0, len = subscriptions.length; i < len; i++) { + subscriptions[i].dispose(); + } + + return destroyObject(this); +}; + +/** + * Resizes the widget to match the container size. + * This function should be called whenever the container size is changed. + */ +Animation.prototype.resize = function () { + var parentWidth = this._container.clientWidth; + var parentHeight = this._container.clientHeight; + if (parentWidth === this._lastWidth && parentHeight === this._lastHeight) { + return; + } + + var svg = this._svgNode; + + //The width and height as the SVG was originally drawn. + var baseWidth = 200; + var baseHeight = 132; + + var width = parentWidth; + var height = parentHeight; + + if (parentWidth === 0 && parentHeight === 0) { + width = baseWidth; + height = baseHeight; + } else if (parentWidth === 0) { + height = parentHeight; + width = baseWidth * (parentHeight / baseHeight); + } else if (parentHeight === 0) { + width = parentWidth; + height = baseHeight * (parentWidth / baseWidth); + } + + var scaleX = width / baseWidth; + var scaleY = height / baseHeight; + + svg.style.cssText = + "width: " + + width + + "px; height: " + + height + + "px; position: absolute; bottom: 0; left: 0; overflow: hidden;"; + svg.setAttribute("width", width); + svg.setAttribute("height", height); + svg.setAttribute("viewBox", "0 0 " + width + " " + height); + + this._topG.setAttribute("transform", "scale(" + scaleX + "," + scaleY + ")"); + + this._centerX = Math.max(1, 100.0 * scaleX); + this._centerY = Math.max(1, 100.0 * scaleY); + + this._lastHeight = parentWidth; + this._lastWidth = parentHeight; +}; + +/** + * Updates the widget to reflect any modified CSS rules for theming. + * + * @example + * //Switch to the cesium-lighter theme. + * document.body.className = 'cesium-lighter'; + * animation.applyThemeChanges(); + */ +Animation.prototype.applyThemeChanges = function () { + // Since we rely on computed styles for themeing, we can't actually + // do anything if the container has not yet been added to the DOM. + // Set up an observer to be notified when it is added and apply + // the changes at that time. + + var doc = this._container.ownerDocument; + + if (!doc.body.contains(this._container)) { + if (defined(this._observer)) { + //Already listening. + return; + } + var that = this; + that._observer = new MutationObserver(function () { + if (doc.body.contains(that._container)) { + that._observer.disconnect(); + that._observer = undefined; + that.applyThemeChanges(); + } + }); + that._observer.observe(doc, { childList: true, subtree: true }); + return; + } + + var buttonNormalBackColor = getElementColor(this._themeNormal); + var buttonHoverBackColor = getElementColor(this._themeHover); + var buttonToggledBackColor = getElementColor(this._themeSelect); + var buttonDisabledBackColor = getElementColor(this._themeDisabled); + var knobBackColor = getElementColor(this._themeKnob); + var pointerColor = getElementColor(this._themePointer); + var swooshColor = getElementColor(this._themeSwoosh); + var swooshHoverColor = getElementColor(this._themeSwooshHover); + + var defsElement = svgFromObject({ + tagName: "defs", + children: [ + { + id: "animation_buttonNormal", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + //add a 'stop-opacity' field to make translucent. + { + tagName: "stop", + offset: "0%", + "stop-color": makeColorString( + buttonNormalBackColor, + gradientEnabledColor0 + ), + }, + { + tagName: "stop", + offset: "12%", + "stop-color": makeColorString( + buttonNormalBackColor, + gradientEnabledColor1 + ), + }, + { + tagName: "stop", + offset: "46%", + "stop-color": makeColorString( + buttonNormalBackColor, + gradientEnabledColor2 + ), + }, + { + tagName: "stop", + offset: "81%", + "stop-color": makeColorString( + buttonNormalBackColor, + gradientEnabledColor3 + ), + }, + ], + }, + { + id: "animation_buttonHovered", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-color": makeColorString( + buttonHoverBackColor, + gradientEnabledColor0 + ), + }, + { + tagName: "stop", + offset: "12%", + "stop-color": makeColorString( + buttonHoverBackColor, + gradientEnabledColor1 + ), + }, + { + tagName: "stop", + offset: "46%", + "stop-color": makeColorString( + buttonHoverBackColor, + gradientEnabledColor2 + ), + }, + { + tagName: "stop", + offset: "81%", + "stop-color": makeColorString( + buttonHoverBackColor, + gradientEnabledColor3 + ), + }, + ], + }, + { + id: "animation_buttonToggled", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-color": makeColorString( + buttonToggledBackColor, + gradientEnabledColor0 + ), + }, + { + tagName: "stop", + offset: "12%", + "stop-color": makeColorString( + buttonToggledBackColor, + gradientEnabledColor1 + ), + }, + { + tagName: "stop", + offset: "46%", + "stop-color": makeColorString( + buttonToggledBackColor, + gradientEnabledColor2 + ), + }, + { + tagName: "stop", + offset: "81%", + "stop-color": makeColorString( + buttonToggledBackColor, + gradientEnabledColor3 + ), + }, + ], + }, + { + id: "animation_buttonDisabled", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-color": makeColorString( + buttonDisabledBackColor, + gradientDisabledColor0 + ), + }, + { + tagName: "stop", + offset: "75%", + "stop-color": makeColorString( + buttonDisabledBackColor, + gradientDisabledColor1 + ), + }, + ], + }, + { + id: "animation_blurred", + tagName: "filter", + width: "200%", + height: "200%", + x: "-50%", + y: "-50%", + children: [ + { + tagName: "feGaussianBlur", + stdDeviation: 4, + in: "SourceGraphic", + }, + ], + }, + { + id: "animation_shuttleRingSwooshGradient", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-opacity": 0.2, + "stop-color": swooshColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "85%", + "stop-opacity": 0.85, + "stop-color": swooshColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "95%", + "stop-opacity": 0.05, + "stop-color": swooshColor.toCssColorString(), + }, + ], + }, + { + id: "animation_shuttleRingSwooshHovered", + tagName: "linearGradient", + x1: "50%", + y1: "0%", + x2: "50%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-opacity": 0.2, + "stop-color": swooshHoverColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "85%", + "stop-opacity": 0.85, + "stop-color": swooshHoverColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "95%", + "stop-opacity": 0.05, + "stop-color": swooshHoverColor.toCssColorString(), + }, + ], + }, + { + id: "animation_shuttleRingPointerGradient", + tagName: "linearGradient", + x1: "0%", + y1: "50%", + x2: "100%", + y2: "50%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-color": pointerColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "40%", + "stop-color": pointerColor.toCssColorString(), + }, + { + tagName: "stop", + offset: "60%", + "stop-color": makeColorString(pointerColor, gradientPointerColor), + }, + { + tagName: "stop", + offset: "100%", + "stop-color": makeColorString(pointerColor, gradientPointerColor), + }, + ], + }, + { + id: "animation_shuttleRingPointerPaused", + tagName: "linearGradient", + x1: "0%", + y1: "50%", + x2: "100%", + y2: "50%", + children: [ + { + tagName: "stop", + offset: "0%", + "stop-color": "#CCC", + }, + { + tagName: "stop", + offset: "40%", + "stop-color": "#CCC", + }, + { + tagName: "stop", + offset: "60%", + "stop-color": "#555", + }, + { + tagName: "stop", + offset: "100%", + "stop-color": "#555", + }, + ], + }, + { + id: "animation_knobOuter", + tagName: "linearGradient", + x1: "20%", + y1: "0%", + x2: "90%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "5%", + "stop-color": makeColorString(knobBackColor, gradientEnabledColor0), + }, + { + tagName: "stop", + offset: "60%", + "stop-color": makeColorString(knobBackColor, gradientKnobColor), + }, + { + tagName: "stop", + offset: "85%", + "stop-color": makeColorString(knobBackColor, gradientEnabledColor1), + }, + ], + }, + { + id: "animation_knobInner", + tagName: "linearGradient", + x1: "20%", + y1: "0%", + x2: "90%", + y2: "100%", + children: [ + { + tagName: "stop", + offset: "5%", + "stop-color": makeColorString(knobBackColor, gradientKnobColor), + }, + { + tagName: "stop", + offset: "60%", + "stop-color": makeColorString(knobBackColor, gradientEnabledColor0), + }, + { + tagName: "stop", + offset: "85%", + "stop-color": makeColorString(knobBackColor, gradientEnabledColor3), + }, + ], + }, + ], + }); + + if (!defined(this._defsElement)) { + this._svgNode.appendChild(defsElement); + } else { + this._svgNode.replaceChild(defsElement, this._defsElement); + } + this._defsElement = defsElement; +}; +export default Animation; diff --git a/cate/webapi/app/cesium/Widgets/Animation/AnimationViewModel.js b/cate/webapi/app/cesium/Widgets/Animation/AnimationViewModel.js new file mode 100644 index 000000000..4da7381d0 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Animation/AnimationViewModel.js @@ -0,0 +1,665 @@ +import binarySearch from "../../Core/binarySearch.js"; +import ClockRange from "../../Core/ClockRange.js"; +import ClockStep from "../../Core/ClockStep.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import JulianDate from "../../Core/JulianDate.js"; +import knockout from "../../ThirdParty/knockout.js"; +import sprintf from "../../ThirdParty/sprintf.js"; +import createCommand from "../createCommand.js"; +import ToggleButtonViewModel from "../ToggleButtonViewModel.js"; + +var monthNames = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; +var realtimeShuttleRingAngle = 15; +var maxShuttleRingAngle = 105; + +function numberComparator(left, right) { + return left - right; +} + +function getTypicalMultiplierIndex(multiplier, shuttleRingTicks) { + var index = binarySearch(shuttleRingTicks, multiplier, numberComparator); + return index < 0 ? ~index : index; +} + +function angleToMultiplier(angle, shuttleRingTicks) { + //Use a linear scale for -1 to 1 between -15 < angle < 15 degrees + if (Math.abs(angle) <= realtimeShuttleRingAngle) { + return angle / realtimeShuttleRingAngle; + } + + var minp = realtimeShuttleRingAngle; + var maxp = maxShuttleRingAngle; + var maxv; + var minv = 0; + var scale; + if (angle > 0) { + maxv = Math.log(shuttleRingTicks[shuttleRingTicks.length - 1]); + scale = (maxv - minv) / (maxp - minp); + return Math.exp(minv + scale * (angle - minp)); + } + + maxv = Math.log(-shuttleRingTicks[0]); + scale = (maxv - minv) / (maxp - minp); + return -Math.exp(minv + scale * (Math.abs(angle) - minp)); +} + +function multiplierToAngle(multiplier, shuttleRingTicks, clockViewModel) { + if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) { + return realtimeShuttleRingAngle; + } + + if (Math.abs(multiplier) <= 1) { + return multiplier * realtimeShuttleRingAngle; + } + + var fastedMultipler = shuttleRingTicks[shuttleRingTicks.length - 1]; + if (multiplier > fastedMultipler) { + multiplier = fastedMultipler; + } else if (multiplier < -fastedMultipler) { + multiplier = -fastedMultipler; + } + + var minp = realtimeShuttleRingAngle; + var maxp = maxShuttleRingAngle; + var maxv; + var minv = 0; + var scale; + + if (multiplier > 0) { + maxv = Math.log(fastedMultipler); + scale = (maxv - minv) / (maxp - minp); + return (Math.log(multiplier) - minv) / scale + minp; + } + + maxv = Math.log(-shuttleRingTicks[0]); + scale = (maxv - minv) / (maxp - minp); + return -((Math.log(Math.abs(multiplier)) - minv) / scale + minp); +} + +/** + * The view model for the {@link Animation} widget. + * @alias AnimationViewModel + * @constructor + * + * @param {ClockViewModel} clockViewModel The ClockViewModel instance to use. + * + * @see Animation + */ +function AnimationViewModel(clockViewModel) { + //>>includeStart('debug', pragmas.debug); + if (!defined(clockViewModel)) { + throw new DeveloperError("clockViewModel is required."); + } + //>>includeEnd('debug'); + + var that = this; + this._clockViewModel = clockViewModel; + this._allShuttleRingTicks = []; + this._dateFormatter = AnimationViewModel.defaultDateFormatter; + this._timeFormatter = AnimationViewModel.defaultTimeFormatter; + + /** + * Gets or sets whether the shuttle ring is currently being dragged. This property is observable. + * @type {Boolean} + * @default false + */ + this.shuttleRingDragging = false; + + /** + * Gets or sets whether dragging the shuttle ring should cause the multiplier + * to snap to the defined tick values rather than interpolating between them. + * This property is observable. + * @type {Boolean} + * @default false + */ + this.snapToTicks = false; + + knockout.track(this, [ + "_allShuttleRingTicks", + "_dateFormatter", + "_timeFormatter", + "shuttleRingDragging", + "snapToTicks", + ]); + + this._sortedFilteredPositiveTicks = []; + + this.setShuttleRingTicks(AnimationViewModel.defaultTicks); + + /** + * Gets the string representation of the current time. This property is observable. + * @type {String} + */ + this.timeLabel = undefined; + knockout.defineProperty(this, "timeLabel", function () { + return that._timeFormatter(that._clockViewModel.currentTime, that); + }); + + /** + * Gets the string representation of the current date. This property is observable. + * @type {String} + */ + this.dateLabel = undefined; + knockout.defineProperty(this, "dateLabel", function () { + return that._dateFormatter(that._clockViewModel.currentTime, that); + }); + + /** + * Gets the string representation of the current multiplier. This property is observable. + * @type {String} + */ + this.multiplierLabel = undefined; + knockout.defineProperty(this, "multiplierLabel", function () { + var clockViewModel = that._clockViewModel; + if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) { + return "Today"; + } + + var multiplier = clockViewModel.multiplier; + + //If it's a whole number, just return it. + if (multiplier % 1 === 0) { + return multiplier.toFixed(0) + "x"; + } + + //Convert to decimal string and remove any trailing zeroes + return multiplier.toFixed(3).replace(/0{0,3}$/, "") + "x"; + }); + + /** + * Gets or sets the current shuttle ring angle. This property is observable. + * @type {Number} + */ + this.shuttleRingAngle = undefined; + knockout.defineProperty(this, "shuttleRingAngle", { + get: function () { + return multiplierToAngle( + clockViewModel.multiplier, + that._allShuttleRingTicks, + clockViewModel + ); + }, + set: function (angle) { + angle = Math.max( + Math.min(angle, maxShuttleRingAngle), + -maxShuttleRingAngle + ); + var ticks = that._allShuttleRingTicks; + + var clockViewModel = that._clockViewModel; + clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER; + + //If we are at the max angle, simply return the max value in either direction. + if (Math.abs(angle) === maxShuttleRingAngle) { + clockViewModel.multiplier = + angle > 0 ? ticks[ticks.length - 1] : ticks[0]; + return; + } + + var multiplier = angleToMultiplier(angle, ticks); + if (that.snapToTicks) { + multiplier = ticks[getTypicalMultiplierIndex(multiplier, ticks)]; + } else if (multiplier !== 0) { + var positiveMultiplier = Math.abs(multiplier); + + if (positiveMultiplier > 100) { + var numDigits = positiveMultiplier.toFixed(0).length - 2; + var divisor = Math.pow(10, numDigits); + multiplier = (Math.round(multiplier / divisor) * divisor) | 0; + } else if (positiveMultiplier > realtimeShuttleRingAngle) { + multiplier = Math.round(multiplier); + } else if (positiveMultiplier > 1) { + multiplier = +multiplier.toFixed(1); + } else if (positiveMultiplier > 0) { + multiplier = +multiplier.toFixed(2); + } + } + clockViewModel.multiplier = multiplier; + }, + }); + + this._canAnimate = undefined; + knockout.defineProperty(this, "_canAnimate", function () { + var clockViewModel = that._clockViewModel; + var clockRange = clockViewModel.clockRange; + + if (that.shuttleRingDragging || clockRange === ClockRange.UNBOUNDED) { + return true; + } + + var multiplier = clockViewModel.multiplier; + var currentTime = clockViewModel.currentTime; + var startTime = clockViewModel.startTime; + + var result = false; + if (clockRange === ClockRange.LOOP_STOP) { + result = + JulianDate.greaterThan(currentTime, startTime) || + (currentTime.equals(startTime) && multiplier > 0); + } else { + var stopTime = clockViewModel.stopTime; + result = + (JulianDate.greaterThan(currentTime, startTime) && + JulianDate.lessThan(currentTime, stopTime)) || // + (currentTime.equals(startTime) && multiplier > 0) || // + (currentTime.equals(stopTime) && multiplier < 0); + } + + if (!result) { + clockViewModel.shouldAnimate = false; + } + return result; + }); + + this._isSystemTimeAvailable = undefined; + knockout.defineProperty(this, "_isSystemTimeAvailable", function () { + var clockViewModel = that._clockViewModel; + var clockRange = clockViewModel.clockRange; + if (clockRange === ClockRange.UNBOUNDED) { + return true; + } + + var systemTime = clockViewModel.systemTime; + return ( + JulianDate.greaterThanOrEquals(systemTime, clockViewModel.startTime) && + JulianDate.lessThanOrEquals(systemTime, clockViewModel.stopTime) + ); + }); + + this._isAnimating = undefined; + knockout.defineProperty(this, "_isAnimating", function () { + return ( + that._clockViewModel.shouldAnimate && + (that._canAnimate || that.shuttleRingDragging) + ); + }); + + var pauseCommand = createCommand(function () { + var clockViewModel = that._clockViewModel; + if (clockViewModel.shouldAnimate) { + clockViewModel.shouldAnimate = false; + } else if (that._canAnimate) { + clockViewModel.shouldAnimate = true; + } + }); + + this._pauseViewModel = new ToggleButtonViewModel(pauseCommand, { + toggled: knockout.computed(function () { + return !that._isAnimating; + }), + tooltip: "Pause", + }); + + var playReverseCommand = createCommand(function () { + var clockViewModel = that._clockViewModel; + var multiplier = clockViewModel.multiplier; + if (multiplier > 0) { + clockViewModel.multiplier = -multiplier; + } + clockViewModel.shouldAnimate = true; + }); + + this._playReverseViewModel = new ToggleButtonViewModel(playReverseCommand, { + toggled: knockout.computed(function () { + return that._isAnimating && clockViewModel.multiplier < 0; + }), + tooltip: "Play Reverse", + }); + + var playForwardCommand = createCommand(function () { + var clockViewModel = that._clockViewModel; + var multiplier = clockViewModel.multiplier; + if (multiplier < 0) { + clockViewModel.multiplier = -multiplier; + } + clockViewModel.shouldAnimate = true; + }); + + this._playForwardViewModel = new ToggleButtonViewModel(playForwardCommand, { + toggled: knockout.computed(function () { + return ( + that._isAnimating && + clockViewModel.multiplier > 0 && + clockViewModel.clockStep !== ClockStep.SYSTEM_CLOCK + ); + }), + tooltip: "Play Forward", + }); + + var playRealtimeCommand = createCommand(function () { + that._clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK; + }, knockout.getObservable(this, "_isSystemTimeAvailable")); + + this._playRealtimeViewModel = new ToggleButtonViewModel(playRealtimeCommand, { + toggled: knockout.computed(function () { + return clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK; + }), + tooltip: knockout.computed(function () { + return that._isSystemTimeAvailable + ? "Today (real-time)" + : "Current time not in range"; + }), + }); + + this._slower = createCommand(function () { + var clockViewModel = that._clockViewModel; + var shuttleRingTicks = that._allShuttleRingTicks; + var multiplier = clockViewModel.multiplier; + var index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) - 1; + if (index >= 0) { + clockViewModel.multiplier = shuttleRingTicks[index]; + } + }); + + this._faster = createCommand(function () { + var clockViewModel = that._clockViewModel; + var shuttleRingTicks = that._allShuttleRingTicks; + var multiplier = clockViewModel.multiplier; + var index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) + 1; + if (index < shuttleRingTicks.length) { + clockViewModel.multiplier = shuttleRingTicks[index]; + } + }); +} + +/** + * Gets or sets the default date formatter used by new instances. + * + * @member + * @type {AnimationViewModel.DateFormatter} + */ +AnimationViewModel.defaultDateFormatter = function (date, viewModel) { + var gregorianDate = JulianDate.toGregorianDate(date); + return ( + monthNames[gregorianDate.month - 1] + + " " + + gregorianDate.day + + " " + + gregorianDate.year + ); +}; + +/** + * Gets or sets the default array of known clock multipliers associated with new instances of the shuttle ring. + * @type {Number[]} + */ +AnimationViewModel.defaultTicks = [ + // + 0.001, + 0.002, + 0.005, + 0.01, + 0.02, + 0.05, + 0.1, + 0.25, + 0.5, + 1.0, + 2.0, + 5.0, + 10.0, // + 15.0, + 30.0, + 60.0, + 120.0, + 300.0, + 600.0, + 900.0, + 1800.0, + 3600.0, + 7200.0, + 14400.0, // + 21600.0, + 43200.0, + 86400.0, + 172800.0, + 345600.0, + 604800.0, +]; + +/** + * Gets or sets the default time formatter used by new instances. + * + * @member + * @type {AnimationViewModel.TimeFormatter} + */ +AnimationViewModel.defaultTimeFormatter = function (date, viewModel) { + var gregorianDate = JulianDate.toGregorianDate(date); + var millisecond = Math.round(gregorianDate.millisecond); + if (Math.abs(viewModel._clockViewModel.multiplier) < 1) { + return sprintf( + "%02d:%02d:%02d.%03d", + gregorianDate.hour, + gregorianDate.minute, + gregorianDate.second, + millisecond + ); + } + return sprintf( + "%02d:%02d:%02d UTC", + gregorianDate.hour, + gregorianDate.minute, + gregorianDate.second + ); +}; + +/** + * Gets a copy of the array of positive known clock multipliers to associate with the shuttle ring. + * + * @returns {Number[]} The array of known clock multipliers associated with the shuttle ring. + */ +AnimationViewModel.prototype.getShuttleRingTicks = function () { + return this._sortedFilteredPositiveTicks.slice(0); +}; + +/** + * Sets the array of positive known clock multipliers to associate with the shuttle ring. + * These values will have negative equivalents created for them and sets both the minimum + * and maximum range of values for the shuttle ring as well as the values that are snapped + * to when a single click is made. The values need not be in order, as they will be sorted + * automatically, and duplicate values will be removed. + * + * @param {Number[]} positiveTicks The list of known positive clock multipliers to associate with the shuttle ring. + */ +AnimationViewModel.prototype.setShuttleRingTicks = function (positiveTicks) { + //>>includeStart('debug', pragmas.debug); + if (!defined(positiveTicks)) { + throw new DeveloperError("positiveTicks is required."); + } + //>>includeEnd('debug'); + + var i; + var len; + var tick; + + var hash = {}; + var sortedFilteredPositiveTicks = this._sortedFilteredPositiveTicks; + sortedFilteredPositiveTicks.length = 0; + for (i = 0, len = positiveTicks.length; i < len; ++i) { + tick = positiveTicks[i]; + //filter duplicates + if (!hash.hasOwnProperty(tick)) { + hash[tick] = true; + sortedFilteredPositiveTicks.push(tick); + } + } + sortedFilteredPositiveTicks.sort(numberComparator); + + var allTicks = []; + for (len = sortedFilteredPositiveTicks.length, i = len - 1; i >= 0; --i) { + tick = sortedFilteredPositiveTicks[i]; + if (tick !== 0) { + allTicks.push(-tick); + } + } + Array.prototype.push.apply(allTicks, sortedFilteredPositiveTicks); + + this._allShuttleRingTicks = allTicks; +}; + +Object.defineProperties(AnimationViewModel.prototype, { + /** + * Gets a command that decreases the speed of animation. + * @memberof AnimationViewModel.prototype + * @type {Command} + */ + slower: { + get: function () { + return this._slower; + }, + }, + + /** + * Gets a command that increases the speed of animation. + * @memberof AnimationViewModel.prototype + * @type {Command} + */ + faster: { + get: function () { + return this._faster; + }, + }, + + /** + * Gets the clock view model. + * @memberof AnimationViewModel.prototype + * + * @type {ClockViewModel} + */ + clockViewModel: { + get: function () { + return this._clockViewModel; + }, + }, + + /** + * Gets the pause toggle button view model. + * @memberof AnimationViewModel.prototype + * + * @type {ToggleButtonViewModel} + */ + pauseViewModel: { + get: function () { + return this._pauseViewModel; + }, + }, + + /** + * Gets the reverse toggle button view model. + * @memberof AnimationViewModel.prototype + * + * @type {ToggleButtonViewModel} + */ + playReverseViewModel: { + get: function () { + return this._playReverseViewModel; + }, + }, + + /** + * Gets the play toggle button view model. + * @memberof AnimationViewModel.prototype + * + * @type {ToggleButtonViewModel} + */ + playForwardViewModel: { + get: function () { + return this._playForwardViewModel; + }, + }, + + /** + * Gets the realtime toggle button view model. + * @memberof AnimationViewModel.prototype + * + * @type {ToggleButtonViewModel} + */ + playRealtimeViewModel: { + get: function () { + return this._playRealtimeViewModel; + }, + }, + + /** + * Gets or sets the function which formats a date for display. + * @memberof AnimationViewModel.prototype + * + * @type {AnimationViewModel.DateFormatter} + * @default AnimationViewModel.defaultDateFormatter + */ + dateFormatter: { + //TODO:@exception {DeveloperError} dateFormatter must be a function. + get: function () { + return this._dateFormatter; + }, + set: function (dateFormatter) { + //>>includeStart('debug', pragmas.debug); + if (typeof dateFormatter !== "function") { + throw new DeveloperError("dateFormatter must be a function"); + } + //>>includeEnd('debug'); + + this._dateFormatter = dateFormatter; + }, + }, + + /** + * Gets or sets the function which formats a time for display. + * @memberof AnimationViewModel.prototype + * + * @type {AnimationViewModel.TimeFormatter} + * @default AnimationViewModel.defaultTimeFormatter + */ + timeFormatter: { + //TODO:@exception {DeveloperError} timeFormatter must be a function. + get: function () { + return this._timeFormatter; + }, + set: function (timeFormatter) { + //>>includeStart('debug', pragmas.debug); + if (typeof timeFormatter !== "function") { + throw new DeveloperError("timeFormatter must be a function"); + } + //>>includeEnd('debug'); + + this._timeFormatter = timeFormatter; + }, + }, +}); + +//Currently exposed for tests. +AnimationViewModel._maxShuttleRingAngle = maxShuttleRingAngle; +AnimationViewModel._realtimeShuttleRingAngle = realtimeShuttleRingAngle; + +/** + * A function that formats a date for display. + * @callback AnimationViewModel.DateFormatter + * + * @param {JulianDate} date The date to be formatted + * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting. + * @returns {String} The string representation of the calendar date portion of the provided date. + */ + +/** + * A function that formats a time for display. + * @callback AnimationViewModel.TimeFormatter + * + * @param {JulianDate} date The date to be formatted + * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting. + * @returns {String} The string representation of the time portion of the provided date. + */ +export default AnimationViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Animation/lighter.css b/cate/webapi/app/cesium/Widgets/Animation/lighter.css new file mode 100644 index 000000000..f50dc02ab --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Animation/lighter.css @@ -0,0 +1,99 @@ +.cesium-lighter .cesium-animation-themeNormal { + color: #e5f2fe; +} + +.cesium-lighter .cesium-animation-themeHover { + color: #abd6ff; +} + +.cesium-lighter .cesium-animation-themeSelect { + color: #e5f2fe; +} + +.cesium-lighter .cesium-animation-themeDisabled { + color: #efefef; +} + +.cesium-lighter .cesium-animation-themeKnob { + color: #e1e2e3; +} + +.cesium-lighter .cesium-animation-themePointer { + color: #fa5; +} + +.cesium-lighter .cesium-animation-themeSwoosh { + color: #ace; +} + +.cesium-lighter .cesium-animation-themeSwooshHover { + color: #bdf; +} + +.cesium-lighter .cesium-animation-svgText { + fill: #111; +} + +.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonPath { + fill: #111; +} + +.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonMain { + stroke: #759dc0; +} + +.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonGlow { + fill: #ffaa2a; +} + +.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonMain { + /* Widget will add: fill: url(#animation_buttonToggled); */ + stroke: #ea0; +} + +.cesium-lighter + .cesium-animation-rectButton:hover + .cesium-animation-buttonMain { + stroke: #759dc0; +} + +.cesium-lighter + .cesium-animation-buttonToggled:hover + .cesium-animation-buttonGlow { + fill: #fff; +} + +.cesium-lighter + .cesium-animation-buttonToggled:hover + .cesium-animation-buttonMain { + stroke: #ea0; +} + +.cesium-lighter + .cesium-animation-rectButton:active + .cesium-animation-buttonMain { + fill: #abd6ff; +} + +.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonMain { + stroke: #d3d3d3; +} + +.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonPath { + fill: #818181; +} + +.cesium-lighter .cesium-animation-shuttleRingBack { + fill: #fafafa; + fill-opacity: 1; + stroke: #aeaeae; + stroke-width: 1.2; +} + +.cesium-lighter .cesium-animation-shuttleRingSwoosh line { + stroke: #8ac; +} + +.cesium-lighter .cesium-animation-knobOuter { + stroke: #a5a5a5; +} diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css new file mode 100644 index 000000000..8f623f369 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css @@ -0,0 +1,117 @@ +.cesium-baseLayerPicker-selected { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; +} + +.cesium-baseLayerPicker-dropDown { + display: block; + position: absolute; + box-sizing: content-box; + top: auto; + right: 0; + width: 320px; /* Includes space needed for scrollbar */ + max-height: 500px; + margin-top: 5px; + background-color: rgba(38, 38, 38, 0.75); + border: 1px solid #444; + padding: 6px; + overflow: auto; + border-radius: 10px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + transform: translate(0, -20%); + visibility: hidden; + opacity: 0; + transition: visibility 0s 0.2s, opacity 0.2s ease-in, transform 0.2s ease-in; +} + +.cesium-baseLayerPicker-dropDown-visible { + transform: translate(0, 0); + visibility: visible; + opacity: 1; + transition: opacity 0.2s ease-out, transform 0.2s ease-out; +} + +.cesium-baseLayerPicker-sectionTitle { + display: block; + font-family: sans-serif; + font-size: 16pt; + text-align: left; + color: #edffff; + margin-bottom: 4px; +} + +.cesium-baseLayerPicker-choices { + margin-bottom: 5px; +} + +.cesium-baseLayerPicker-categoryTitle { + color: #edffff; + font-size: 11pt; +} + +.cesium-baseLayerPicker-choices { + display: block; + border: 1px solid #888; + border-radius: 5px; + padding: 5px 0; +} + +.cesium-baseLayerPicker-item { + display: inline-block; + vertical-align: top; + margin: 2px 5px; + width: 64px; + text-align: center; + cursor: pointer; +} + +.cesium-baseLayerPicker-itemLabel { + display: block; + font-family: sans-serif; + font-size: 8pt; + text-align: center; + vertical-align: middle; + color: #edffff; + cursor: pointer; + word-wrap: break-word; +} + +.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel, +.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel { + text-decoration: underline; +} + +.cesium-baseLayerPicker-itemIcon { + display: inline-block; + position: relative; + width: inherit; + height: auto; + background-size: 100% 100%; + border: solid 1px #444; + border-radius: 9px; + color: #edffff; + margin: 0; + padding: 0; + cursor: pointer; + box-sizing: border-box; +} + +.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon { + border-color: #fff; + box-shadow: 0 0 8px #fff, 0 0 8px #fff; +} + +.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel { + color: rgb(189, 236, 248); +} + +.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon { + border: double 4px rgb(189, 236, 248); +} diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.js b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.js new file mode 100644 index 000000000..3c658a305 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.js @@ -0,0 +1,307 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import BaseLayerPickerViewModel from "./BaseLayerPickerViewModel.js"; + +/** + * + * + *
BaseLayerPicker with its drop-panel open. + *
+ *

+ * The BaseLayerPicker is a single button widget that displays a panel of available imagery and + * terrain providers. When imagery is selected, the corresponding imagery layer is created and inserted + * as the base layer of the imagery collection; removing the existing base. When terrain is selected, + * it replaces the current terrain provider. Each item in the available providers list contains a name, + * a representative icon, and a tooltip to display more information when hovered. The list is initially + * empty, and must be configured before use, as illustrated in the below example. + * + * @alias BaseLayerPicker + * @constructor + * + * @param {Element|String} container The parent HTML container node or ID for this widget. + * @param {Object} options Object with the following properties: + * @param {Globe} options.globe The Globe to use. + * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery. + * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used. + * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain. + * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * + * @example + * // In HTML head, include a link to the BaseLayerPicker.css stylesheet, + * // and in the body, include:
+ * + * //Create the list of available providers we would like the user to select from. + * //This example uses 3, OpenStreetMap, The Black Marble, and a single, non-streaming world image. + * var imageryViewModels = []; + * imageryViewModels.push(new Cesium.ProviderViewModel({ + * name : 'Open\u00adStreet\u00adMap', + * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/openStreetMap.png'), + * tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \ + * map of the world.\nhttp://www.openstreetmap.org', + * creationFunction : function() { + * return new Cesium.OpenStreetMapImageryProvider({ + * url : 'https://a.tile.openstreetmap.org/' + * }); + * } + * })); + * + * imageryViewModels.push(new Cesium.ProviderViewModel({ + * name : 'Earth at Night', + * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/blackMarble.png'), + * tooltip : 'The lights of cities and villages trace the outlines of civilization \ + * in this global view of the Earth at night as seen by NASA/NOAA\'s Suomi NPP satellite.', + * creationFunction : function() { + * return new Cesium.IonImageryProvider({ assetId: 3812 }); + * } + * })); + * + * imageryViewModels.push(new Cesium.ProviderViewModel({ + * name : 'Natural Earth\u00a0II', + * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/naturalEarthII.png'), + * tooltip : 'Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/', + * creationFunction : function() { + * return new Cesium.TileMapServiceImageryProvider({ + * url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') + * }); + * } + * })); + * + * //Create a CesiumWidget without imagery, if you haven't already done so. + * var cesiumWidget = new Cesium.CesiumWidget('cesiumContainer', { imageryProvider: false }); + * + * //Finally, create the baseLayerPicker widget using our view models. + * var layers = cesiumWidget.imageryLayers; + * var baseLayerPicker = new Cesium.BaseLayerPicker('baseLayerPickerContainer', { + * globe : cesiumWidget.scene.globe, + * imageryProviderViewModels : imageryViewModels + * }); + * + * @see TerrainProvider + * @see ImageryProvider + * @see ImageryLayerCollection + */ +function BaseLayerPicker(container, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new BaseLayerPickerViewModel(options); + + var element = document.createElement("button"); + element.type = "button"; + element.className = "cesium-button cesium-toolbar-button"; + element.setAttribute( + "data-bind", + "\ +attr: { title: buttonTooltip },\ +click: toggleDropDown" + ); + container.appendChild(element); + + var imgElement = document.createElement("img"); + imgElement.setAttribute("draggable", "false"); + imgElement.className = "cesium-baseLayerPicker-selected"; + imgElement.setAttribute( + "data-bind", + "\ +attr: { src: buttonImageUrl }, visible: !!buttonImageUrl" + ); + element.appendChild(imgElement); + + var dropPanel = document.createElement("div"); + dropPanel.className = "cesium-baseLayerPicker-dropDown"; + dropPanel.setAttribute( + "data-bind", + '\ +css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }' + ); + container.appendChild(dropPanel); + + var imageryTitle = document.createElement("div"); + imageryTitle.className = "cesium-baseLayerPicker-sectionTitle"; + imageryTitle.setAttribute( + "data-bind", + "visible: imageryProviderViewModels.length > 0" + ); + imageryTitle.innerHTML = "Imagery"; + dropPanel.appendChild(imageryTitle); + + var imagerySection = document.createElement("div"); + imagerySection.className = "cesium-baseLayerPicker-section"; + imagerySection.setAttribute("data-bind", "foreach: _imageryProviders"); + dropPanel.appendChild(imagerySection); + + var imageryCategories = document.createElement("div"); + imageryCategories.className = "cesium-baseLayerPicker-category"; + imagerySection.appendChild(imageryCategories); + + var categoryTitle = document.createElement("div"); + categoryTitle.className = "cesium-baseLayerPicker-categoryTitle"; + categoryTitle.setAttribute("data-bind", "text: name"); + imageryCategories.appendChild(categoryTitle); + + var imageryChoices = document.createElement("div"); + imageryChoices.className = "cesium-baseLayerPicker-choices"; + imageryChoices.setAttribute("data-bind", "foreach: providers"); + imageryCategories.appendChild(imageryChoices); + + var imageryProvider = document.createElement("div"); + imageryProvider.className = "cesium-baseLayerPicker-item"; + imageryProvider.setAttribute( + "data-bind", + '\ +css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },\ +attr: { title: tooltip },\ +visible: creationCommand.canExecute,\ +click: function($data) { $parents[1].selectedImagery = $data; }' + ); + imageryChoices.appendChild(imageryProvider); + + var providerIcon = document.createElement("img"); + providerIcon.className = "cesium-baseLayerPicker-itemIcon"; + providerIcon.setAttribute("data-bind", "attr: { src: iconUrl }"); + providerIcon.setAttribute("draggable", "false"); + imageryProvider.appendChild(providerIcon); + + var providerLabel = document.createElement("div"); + providerLabel.className = "cesium-baseLayerPicker-itemLabel"; + providerLabel.setAttribute("data-bind", "text: name"); + imageryProvider.appendChild(providerLabel); + + var terrainTitle = document.createElement("div"); + terrainTitle.className = "cesium-baseLayerPicker-sectionTitle"; + terrainTitle.setAttribute( + "data-bind", + "visible: terrainProviderViewModels.length > 0" + ); + terrainTitle.innerHTML = "Terrain"; + dropPanel.appendChild(terrainTitle); + + var terrainSection = document.createElement("div"); + terrainSection.className = "cesium-baseLayerPicker-section"; + terrainSection.setAttribute("data-bind", "foreach: _terrainProviders"); + dropPanel.appendChild(terrainSection); + + var terrainCategories = document.createElement("div"); + terrainCategories.className = "cesium-baseLayerPicker-category"; + terrainSection.appendChild(terrainCategories); + + var terrainCategoryTitle = document.createElement("div"); + terrainCategoryTitle.className = "cesium-baseLayerPicker-categoryTitle"; + terrainCategoryTitle.setAttribute("data-bind", "text: name"); + terrainCategories.appendChild(terrainCategoryTitle); + + var terrainChoices = document.createElement("div"); + terrainChoices.className = "cesium-baseLayerPicker-choices"; + terrainChoices.setAttribute("data-bind", "foreach: providers"); + terrainCategories.appendChild(terrainChoices); + + var terrainProvider = document.createElement("div"); + terrainProvider.className = "cesium-baseLayerPicker-item"; + terrainProvider.setAttribute( + "data-bind", + '\ +css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },\ +attr: { title: tooltip },\ +visible: creationCommand.canExecute,\ +click: function($data) { $parents[1].selectedTerrain = $data; }' + ); + terrainChoices.appendChild(terrainProvider); + + var terrainProviderIcon = document.createElement("img"); + terrainProviderIcon.className = "cesium-baseLayerPicker-itemIcon"; + terrainProviderIcon.setAttribute("data-bind", "attr: { src: iconUrl }"); + terrainProviderIcon.setAttribute("draggable", "false"); + terrainProvider.appendChild(terrainProviderIcon); + + var terrainProviderLabel = document.createElement("div"); + terrainProviderLabel.className = "cesium-baseLayerPicker-itemLabel"; + terrainProviderLabel.setAttribute("data-bind", "text: name"); + terrainProvider.appendChild(terrainProviderLabel); + + knockout.applyBindings(viewModel, element); + knockout.applyBindings(viewModel, dropPanel); + + this._viewModel = viewModel; + this._container = container; + this._element = element; + this._dropPanel = dropPanel; + + this._closeDropDown = function (e) { + if (!(element.contains(e.target) || dropPanel.contains(e.target))) { + viewModel.dropDownVisible = false; + } + }; + + if (FeatureDetection.supportsPointerEvents()) { + document.addEventListener("pointerdown", this._closeDropDown, true); + } else { + document.addEventListener("mousedown", this._closeDropDown, true); + document.addEventListener("touchstart", this._closeDropDown, true); + } +} + +Object.defineProperties(BaseLayerPicker.prototype, { + /** + * Gets the parent container. + * @memberof BaseLayerPicker.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof BaseLayerPicker.prototype + * + * @type {BaseLayerPickerViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +BaseLayerPicker.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +BaseLayerPicker.prototype.destroy = function () { + if (FeatureDetection.supportsPointerEvents()) { + document.removeEventListener("pointerdown", this._closeDropDown, true); + } else { + document.removeEventListener("mousedown", this._closeDropDown, true); + document.removeEventListener("touchstart", this._closeDropDown, true); + } + + knockout.cleanNode(this._element); + knockout.cleanNode(this._dropPanel); + this._container.removeChild(this._element); + this._container.removeChild(this._dropPanel); + return destroyObject(this); +}; +export default BaseLayerPicker; diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js new file mode 100644 index 000000000..9651f5403 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js @@ -0,0 +1,303 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import EllipsoidTerrainProvider from "../../Core/EllipsoidTerrainProvider.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link BaseLayerPicker}. + * @alias BaseLayerPickerViewModel + * @constructor + * + * @param {Object} options Object with the following properties: + * @param {Globe} options.globe The Globe to use. + * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery. + * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used. + * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain. + * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used. + * + * @exception {DeveloperError} imageryProviderViewModels must be an array. + * @exception {DeveloperError} terrainProviderViewModels must be an array. + */ +function BaseLayerPickerViewModel(options) { + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + var globe = options.globe; + var imageryProviderViewModels = defaultValue( + options.imageryProviderViewModels, + [] + ); + var terrainProviderViewModels = defaultValue( + options.terrainProviderViewModels, + [] + ); + + //>>includeStart('debug', pragmas.debug); + if (!defined(globe)) { + throw new DeveloperError("globe is required"); + } + //>>includeEnd('debug'); + + this._globe = globe; + + /** + * Gets or sets an array of ProviderViewModel instances available for imagery selection. + * This property is observable. + * @type {ProviderViewModel[]} + */ + this.imageryProviderViewModels = imageryProviderViewModels.slice(0); + + /** + * Gets or sets an array of ProviderViewModel instances available for terrain selection. + * This property is observable. + * @type {ProviderViewModel[]} + */ + this.terrainProviderViewModels = terrainProviderViewModels.slice(0); + + /** + * Gets or sets whether the imagery selection drop-down is currently visible. + * @type {Boolean} + * @default false + */ + this.dropDownVisible = false; + + knockout.track(this, [ + "imageryProviderViewModels", + "terrainProviderViewModels", + "dropDownVisible", + ]); + + var imageryObservable = knockout.getObservable( + this, + "imageryProviderViewModels" + ); + var imageryProviders = knockout.pureComputed(function () { + var providers = imageryObservable(); + var categories = {}; + var i; + for (i = 0; i < providers.length; i++) { + var provider = providers[i]; + var category = provider.category; + if (defined(categories[category])) { + categories[category].push(provider); + } else { + categories[category] = [provider]; + } + } + var allCategoryNames = Object.keys(categories); + + var result = []; + for (i = 0; i < allCategoryNames.length; i++) { + var name = allCategoryNames[i]; + result.push({ + name: name, + providers: categories[name], + }); + } + return result; + }); + this._imageryProviders = imageryProviders; + + var terrainObservable = knockout.getObservable( + this, + "terrainProviderViewModels" + ); + var terrainProviders = knockout.pureComputed(function () { + var providers = terrainObservable(); + var categories = {}; + var i; + for (i = 0; i < providers.length; i++) { + var provider = providers[i]; + var category = provider.category; + if (defined(categories[category])) { + categories[category].push(provider); + } else { + categories[category] = [provider]; + } + } + var allCategoryNames = Object.keys(categories); + + var result = []; + for (i = 0; i < allCategoryNames.length; i++) { + var name = allCategoryNames[i]; + result.push({ + name: name, + providers: categories[name], + }); + } + return result; + }); + this._terrainProviders = terrainProviders; + + /** + * Gets the button tooltip. This property is observable. + * @type {String} + */ + this.buttonTooltip = undefined; + knockout.defineProperty(this, "buttonTooltip", function () { + var selectedImagery = this.selectedImagery; + var selectedTerrain = this.selectedTerrain; + + var imageryTip = defined(selectedImagery) + ? selectedImagery.name + : undefined; + var terrainTip = defined(selectedTerrain) + ? selectedTerrain.name + : undefined; + + if (defined(imageryTip) && defined(terrainTip)) { + return imageryTip + "\n" + terrainTip; + } else if (defined(imageryTip)) { + return imageryTip; + } + return terrainTip; + }); + + /** + * Gets the button background image. This property is observable. + * @type {String} + */ + this.buttonImageUrl = undefined; + knockout.defineProperty(this, "buttonImageUrl", function () { + var selectedImagery = this.selectedImagery; + if (defined(selectedImagery)) { + return selectedImagery.iconUrl; + } + }); + + /** + * Gets or sets the currently selected imagery. This property is observable. + * @type {ProviderViewModel} + * @default undefined + */ + this.selectedImagery = undefined; + var selectedImageryViewModel = knockout.observable(); + + this._currentImageryProviders = []; + knockout.defineProperty(this, "selectedImagery", { + get: function () { + return selectedImageryViewModel(); + }, + set: function (value) { + if (selectedImageryViewModel() === value) { + this.dropDownVisible = false; + return; + } + + var i; + var currentImageryProviders = this._currentImageryProviders; + var currentImageryProvidersLength = currentImageryProviders.length; + var imageryLayers = this._globe.imageryLayers; + var hadExistingBaseLayer = false; + for (i = 0; i < currentImageryProvidersLength; i++) { + var layersLength = imageryLayers.length; + for (var x = 0; x < layersLength; x++) { + var layer = imageryLayers.get(x); + if (layer.imageryProvider === currentImageryProviders[i]) { + imageryLayers.remove(layer); + hadExistingBaseLayer = true; + break; + } + } + } + + if (defined(value)) { + var newProviders = value.creationCommand(); + if (Array.isArray(newProviders)) { + var newProvidersLength = newProviders.length; + for (i = newProvidersLength - 1; i >= 0; i--) { + imageryLayers.addImageryProvider(newProviders[i], 0); + } + this._currentImageryProviders = newProviders.slice(0); + } else { + this._currentImageryProviders = [newProviders]; + if (hadExistingBaseLayer) { + imageryLayers.addImageryProvider(newProviders, 0); + } else { + var baseLayer = imageryLayers.get(0); + if (defined(baseLayer)) { + imageryLayers.remove(baseLayer); + } + imageryLayers.addImageryProvider(newProviders, 0); + } + } + } + selectedImageryViewModel(value); + this.dropDownVisible = false; + }, + }); + + /** + * Gets or sets the currently selected terrain. This property is observable. + * @type {ProviderViewModel} + * @default undefined + */ + this.selectedTerrain = undefined; + var selectedTerrainViewModel = knockout.observable(); + + knockout.defineProperty(this, "selectedTerrain", { + get: function () { + return selectedTerrainViewModel(); + }, + set: function (value) { + if (selectedTerrainViewModel() === value) { + this.dropDownVisible = false; + return; + } + + var newProvider; + if (defined(value)) { + newProvider = value.creationCommand(); + } + + this._globe.depthTestAgainstTerrain = !( + newProvider instanceof EllipsoidTerrainProvider + ); + this._globe.terrainProvider = newProvider; + selectedTerrainViewModel(value); + this.dropDownVisible = false; + }, + }); + + var that = this; + this._toggleDropDown = createCommand(function () { + that.dropDownVisible = !that.dropDownVisible; + }); + + this.selectedImagery = defaultValue( + options.selectedImageryProviderViewModel, + imageryProviderViewModels[0] + ); + this.selectedTerrain = defaultValue( + options.selectedTerrainProviderViewModel, + terrainProviderViewModels[0] + ); +} + +Object.defineProperties(BaseLayerPickerViewModel.prototype, { + /** + * Gets the command to toggle the visibility of the drop down. + * @memberof BaseLayerPickerViewModel.prototype + * + * @type {Command} + */ + toggleDropDown: { + get: function () { + return this._toggleDropDown; + }, + }, + + /** + * Gets the globe. + * @memberof BaseLayerPickerViewModel.prototype + * + * @type {Globe} + */ + globe: { + get: function () { + return this._globe; + }, + }, +}); +export default BaseLayerPickerViewModel; diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/ProviderViewModel.js b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/ProviderViewModel.js new file mode 100644 index 000000000..093bb62bf --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/ProviderViewModel.js @@ -0,0 +1,106 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * A view model that represents each item in the {@link BaseLayerPicker}. + * + * @alias ProviderViewModel + * @constructor + * + * @param {Object} options The object containing all parameters. + * @param {String} options.name The name of the layer. + * @param {String} options.tooltip The tooltip to show when the item is moused over. + * @param {String} options.iconUrl An icon representing the layer. + * @param {String} [options.category] A category for the layer. + * @param {ProviderViewModel.CreationFunction|Command} options.creationFunction A function or Command + * that creates one or more providers which will be added to the globe when this item is selected. + * + * @see BaseLayerPicker + * @see ImageryProvider + * @see TerrainProvider + */ +function ProviderViewModel(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options.name)) { + throw new DeveloperError("options.name is required."); + } + if (!defined(options.tooltip)) { + throw new DeveloperError("options.tooltip is required."); + } + if (!defined(options.iconUrl)) { + throw new DeveloperError("options.iconUrl is required."); + } + if (typeof options.creationFunction !== "function") { + throw new DeveloperError("options.creationFunction is required."); + } + //>>includeEnd('debug'); + + var creationCommand = options.creationFunction; + if (!defined(creationCommand.canExecute)) { + creationCommand = createCommand(creationCommand); + } + + this._creationCommand = creationCommand; + + /** + * Gets the display name. This property is observable. + * @type {String} + */ + this.name = options.name; + + /** + * Gets the tooltip. This property is observable. + * @type {String} + */ + this.tooltip = options.tooltip; + + /** + * Gets the icon. This property is observable. + * @type {String} + */ + this.iconUrl = options.iconUrl; + + this._category = defaultValue(options.category, ""); + + knockout.track(this, ["name", "tooltip", "iconUrl"]); +} + +Object.defineProperties(ProviderViewModel.prototype, { + /** + * Gets the Command that creates one or more providers which will be added to + * the globe when this item is selected. + * @memberof ProviderViewModel.prototype + * @memberof ProviderViewModel.prototype + * @type {Command} + * @readonly + */ + creationCommand: { + get: function () { + return this._creationCommand; + }, + }, + + /** + * Gets the category + * @type {String} + * @memberof ProviderViewModel.prototype + * @readonly + */ + category: { + get: function () { + return this._category; + }, + }, +}); + +/** + * A function which creates one or more providers. + * @callback ProviderViewModel.CreationFunction + * @returns {ImageryProvider|TerrainProvider|ImageryProvider[]|TerrainProvider[]} + * The ImageryProvider or TerrainProvider, or array of providers, to be added + * to the globe. + */ +export default ProviderViewModel; diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js new file mode 100644 index 000000000..1526e39f1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js @@ -0,0 +1,294 @@ +import buildModuleUrl from "../../Core/buildModuleUrl.js"; +import ArcGisMapServerImageryProvider from "../../Scene/ArcGisMapServerImageryProvider.js"; +import createWorldImagery from "../../Scene/createWorldImagery.js"; +import IonImageryProvider from "../../Scene/IonImageryProvider.js"; +import IonWorldImageryStyle from "../../Scene/IonWorldImageryStyle.js"; +import MapboxStyleImageryProvider from "../../Scene/MapboxStyleImageryProvider.js"; +import OpenStreetMapImageryProvider from "../../Scene/OpenStreetMapImageryProvider.js"; +import TileMapServiceImageryProvider from "../../Scene/TileMapServiceImageryProvider.js"; +import ProviderViewModel from "../BaseLayerPicker/ProviderViewModel.js"; + +/** + * @private + */ +function createDefaultImageryProviderViewModels() { + var providerViewModels = []; + providerViewModels.push( + new ProviderViewModel({ + name: "Bing Maps Aerial", + iconUrl: buildModuleUrl("Widgets/Images/ImageryProviders/bingAerial.png"), + tooltip: "Bing Maps aerial imagery, provided by Cesium ion", + category: "Cesium ion", + creationFunction: function () { + return createWorldImagery({ + style: IonWorldImageryStyle.AERIAL, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Bing Maps Aerial with Labels", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/bingAerialLabels.png" + ), + tooltip: "Bing Maps aerial imagery with labels, provided by Cesium ion", + category: "Cesium ion", + creationFunction: function () { + return createWorldImagery({ + style: IonWorldImageryStyle.AERIAL_WITH_LABELS, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Bing Maps Roads", + iconUrl: buildModuleUrl("Widgets/Images/ImageryProviders/bingRoads.png"), + tooltip: "Bing Maps standard road maps, provided by Cesium ion", + category: "Cesium ion", + creationFunction: function () { + return createWorldImagery({ + style: IonWorldImageryStyle.ROAD, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Mapbox Satellite", + tooltip: "Mapbox satellite imagery https://www.mapbox.com/maps/", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/mapboxSatellite.png" + ), + category: "Other", + creationFunction: function () { + return new MapboxStyleImageryProvider({ + styleId: "satellite-v9", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Mapbox Streets", + tooltip: "Mapbox streets imagery https://www.mapbox.com/maps/", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/mapboxTerrain.png" + ), + category: "Other", + creationFunction: function () { + return new MapboxStyleImageryProvider({ + styleId: "satellite-streets-v11", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Mapbox Streets Classic", + tooltip: "Mapbox streets basic imagery https://www.mapbox.com/maps/", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/mapboxStreets.png" + ), + category: "Other", + creationFunction: function () { + return new MapboxStyleImageryProvider({ + styleId: "streets-v11", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "ESRI World Imagery", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/esriWorldImagery.png" + ), + tooltip: + "\ +World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution \ +satellite imagery worldwide. The map includes NASA Blue Marble: Next Generation 500m resolution imagery at small scales \ +(above 1:1,000,000), i-cubed 15m eSAT imagery at medium-to-large scales (down to 1:70,000) for the world, and USGS 15m Landsat \ +imagery for Antarctica. The map features 0.3m resolution imagery in the continental United States and 0.6m resolution imagery in \ +parts of Western Europe from DigitalGlobe. In other parts of the world, 1 meter resolution imagery is available from GeoEye IKONOS, \ +i-cubed Nationwide Prime, Getmapping, AeroGRID, IGN Spain, and IGP Portugal. Additionally, imagery at different resolutions has been \ +contributed by the GIS User Community.\nhttp://www.esri.com", + category: "Other", + creationFunction: function () { + return new ArcGisMapServerImageryProvider({ + url: + "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer", + enablePickFeatures: false, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "ESRI World Street Map", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/esriWorldStreetMap.png" + ), + tooltip: + "\ +This worldwide street map presents highway-level data for the world. Street-level data includes the United States; much of \ +Canada; Japan; most countries in Europe; Australia and New Zealand; India; parts of South America including Argentina, Brazil, \ +Chile, Colombia, and Venezuela; Ghana; and parts of southern Africa including Botswana, Lesotho, Namibia, South Africa, and Swaziland.\n\ +http://www.esri.com", + category: "Other", + creationFunction: function () { + return new ArcGisMapServerImageryProvider({ + url: + "https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer", + enablePickFeatures: false, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "ESRI National Geographic", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/esriNationalGeographic.png" + ), + tooltip: + "\ +This web map contains the National Geographic World Map service. This map service is designed to be used as a general reference map \ +for informational and educational purposes as well as a basemap by GIS professionals and other users for creating web maps and web \ +mapping applications.\nhttp://www.esri.com", + category: "Other", + creationFunction: function () { + return new ArcGisMapServerImageryProvider({ + url: + "https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/", + enablePickFeatures: false, + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Open\u00adStreet\u00adMap", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/openStreetMap.png" + ), + tooltip: + "OpenStreetMap (OSM) is a collaborative project to create a free editable map \ +of the world.\nhttp://www.openstreetmap.org", + category: "Other", + creationFunction: function () { + return new OpenStreetMapImageryProvider({ + url: "https://a.tile.openstreetmap.org/", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Stamen Watercolor", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/stamenWatercolor.png" + ), + tooltip: + "Reminiscent of hand drawn maps, Stamen watercolor maps apply raster effect \ +area washes and organic edges over a paper texture to add warm pop to any map.\nhttp://maps.stamen.com", + category: "Other", + creationFunction: function () { + return new OpenStreetMapImageryProvider({ + url: "https://stamen-tiles.a.ssl.fastly.net/watercolor/", + credit: + "Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Stamen Toner", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/stamenToner.png" + ), + tooltip: "A high contrast black and white map.\nhttp://maps.stamen.com", + category: "Other", + creationFunction: function () { + return new OpenStreetMapImageryProvider({ + url: "https://stamen-tiles.a.ssl.fastly.net/toner/", + credit: + "Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.", + }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Sentinel-2", + iconUrl: buildModuleUrl("Widgets/Images/ImageryProviders/sentinel-2.png"), + tooltip: + "Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).", + category: "Cesium ion", + creationFunction: function () { + return new IonImageryProvider({ assetId: 3954 }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Blue Marble", + iconUrl: buildModuleUrl("Widgets/Images/ImageryProviders/blueMarble.png"), + tooltip: "Blue Marble Next Generation July, 2004 imagery from NASA.", + category: "Cesium ion", + creationFunction: function () { + return new IonImageryProvider({ assetId: 3845 }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Earth at night", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/earthAtNight.png" + ), + tooltip: + "The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.", + category: "Cesium ion", + creationFunction: function () { + return new IonImageryProvider({ assetId: 3812 }); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Natural Earth\u00a0II", + iconUrl: buildModuleUrl( + "Widgets/Images/ImageryProviders/naturalEarthII.png" + ), + tooltip: + "Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/", + category: "Cesium ion", + creationFunction: function () { + return new TileMapServiceImageryProvider({ + url: buildModuleUrl("Assets/Textures/NaturalEarthII"), + }); + }, + }) + ); + + return providerViewModels; +} +export default createDefaultImageryProviderViewModels; diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultTerrainProviderViewModels.js b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultTerrainProviderViewModels.js new file mode 100644 index 000000000..0df431eea --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/createDefaultTerrainProviderViewModels.js @@ -0,0 +1,43 @@ +import buildModuleUrl from "../../Core/buildModuleUrl.js"; +import createWorldTerrain from "../../Core/createWorldTerrain.js"; +import EllipsoidTerrainProvider from "../../Core/EllipsoidTerrainProvider.js"; +import ProviderViewModel from "../BaseLayerPicker/ProviderViewModel.js"; + +/** + * @private + */ +function createDefaultTerrainProviderViewModels() { + var providerViewModels = []; + providerViewModels.push( + new ProviderViewModel({ + name: "WGS84 Ellipsoid", + iconUrl: buildModuleUrl("Widgets/Images/TerrainProviders/Ellipsoid.png"), + tooltip: "WGS84 standard ellipsoid, also known as EPSG:4326", + category: "Cesium ion", + creationFunction: function () { + return new EllipsoidTerrainProvider(); + }, + }) + ); + + providerViewModels.push( + new ProviderViewModel({ + name: "Cesium World Terrain", + iconUrl: buildModuleUrl( + "Widgets/Images/TerrainProviders/CesiumWorldTerrain.png" + ), + tooltip: + "High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion", + category: "Cesium ion", + creationFunction: function () { + return createWorldTerrain({ + requestWaterMask: true, + requestVertexNormals: true, + }); + }, + }) + ); + + return providerViewModels; +} +export default createDefaultTerrainProviderViewModels; diff --git a/cate/webapi/app/cesium/Widgets/BaseLayerPicker/lighter.css b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/lighter.css new file mode 100644 index 000000000..5caa3ecbf --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/BaseLayerPicker/lighter.css @@ -0,0 +1,33 @@ +.cesium-lighter .cesium-baseLayerPicker-itemIcon { + border-color: #759dc0; +} + +.cesium-lighter .cesium-baseLayerPicker-dropDown { + background-color: rgba(240, 240, 240, 0.75); +} + +.cesium-lighter .cesium-baseLayerPicker-sectionTitle { + color: black; +} + +.cesium-lighter .cesium-baseLayerPicker-itemLabel { + color: black; +} + +.cesium-lighter + .cesium-baseLayerPicker-item:hover + .cesium-baseLayerPicker-itemIcon { + border-color: #000; +} + +.cesium-lighter + .cesium-baseLayerPicker-selectedItem + .cesium-baseLayerPicker-itemLabel { + color: rgb(0, 61, 168); +} + +.cesium-lighter + .cesium-baseLayerPicker-selectedItem + .cesium-baseLayerPicker-itemIcon { + border: double 4px rgb(0, 61, 168); +} diff --git a/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css new file mode 100644 index 000000000..63641e55d --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css @@ -0,0 +1,116 @@ +ul.cesium-cesiumInspector-statistics { + margin: 0; + padding-top: 3px; + padding-bottom: 3px; +} + +ul.cesium-cesiumInspector-statistics + ul.cesium-cesiumInspector-statistics { + border-top: 1px solid #aaa; +} + +.cesium-cesiumInspector-slider { + margin-top: 5px; +} + +.cesium-cesiumInspector-slider input[type="number"] { + text-align: left; + background-color: #222; + outline: none; + border: 1px solid #444; + color: #edffff; + width: 100px; + border-radius: 3px; + padding: 1px; + margin-left: 10px; + cursor: auto; +} + +.cesium-cesiumInspector-slider input[type="number"]::-webkit-outer-spin-button, +.cesium-cesiumInspector-slider input[type="number"]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +.cesium-cesiumInspector-slider input[type="range"] { + margin-left: 5px; + vertical-align: middle; +} + +.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor { + display: none; +} + +.cesium-cesiumInspector-styleEditor { + padding: 10px; + border-radius: 5px; + background: rgba(48, 51, 54, 0.8); + border: 1px solid #444; +} + +.cesium-cesiumInspector-styleEditor textarea { + width: 100%; + height: 300px; + background: transparent; + color: #edffff; + border: none; + padding: 0; + white-space: pre; + overflow-wrap: normal; + overflow-x: auto; +} + +.cesium-3DTilesInspector { + width: 300px; + pointer-events: all; +} + +.cesium-3DTilesInspector-statistics { + font-size: 11px; +} + +.cesium-3DTilesInspector div, +.cesium-3DTilesInspector input[type="range"] { + width: 100%; + box-sizing: border-box; +} + +.cesium-cesiumInspector-error { + color: #ff9e9e; + overflow: auto; +} + +.cesium-3DTilesInspector .cesium-cesiumInspector-section { + margin-top: 3px; +} + +.cesium-3DTilesInspector + .cesium-cesiumInspector-sectionHeader + + .cesium-cesiumInspector-show { + border-top: 1px solid white; +} + +input.cesium-cesiumInspector-url { + overflow: hidden; + white-space: nowrap; + overflow-x: scroll; + background-color: transparent; + color: white; + outline: none; + border: none; + height: 1em; + width: 100%; +} + +.cesium-cesiumInspector .field-group { + display: table; +} + +.cesium-cesiumInspector .field-group > label { + display: table-cell; + font-weight: bold; +} + +.cesium-cesiumInspector .field-group > .field { + display: table-cell; + width: 100%; +} diff --git a/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.js b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.js new file mode 100644 index 000000000..defce81ed --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.js @@ -0,0 +1,392 @@ +import Check from "../../Core/Check.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import InspectorShared from "../InspectorShared.js"; +import Cesium3DTilesInspectorViewModel from "./Cesium3DTilesInspectorViewModel.js"; + +/** + * Inspector widget to aid in debugging 3D Tiles + * + * @alias Cesium3DTilesInspector + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene the Scene instance to use. + */ +function Cesium3DTilesInspector(container, scene) { + //>>includeStart('debug', pragmas.debug); + Check.defined("container", container); + Check.typeOf.object("scene", scene); + //>>includeEnd('debug'); + + container = getElement(container); + var element = document.createElement("div"); + var performanceContainer = document.createElement("div"); + performanceContainer.setAttribute("data-bind", "visible: performance"); + var viewModel = new Cesium3DTilesInspectorViewModel( + scene, + performanceContainer + ); + + this._viewModel = viewModel; + this._container = container; + this._element = element; + + var text = document.createElement("div"); + text.textContent = "3D Tiles Inspector"; + text.className = "cesium-cesiumInspector-button"; + text.setAttribute("data-bind", "click: toggleInspector"); + element.appendChild(text); + element.className = "cesium-cesiumInspector cesium-3DTilesInspector"; + element.setAttribute( + "data-bind", + 'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}' + ); + container.appendChild(element); + + var panel = document.createElement("div"); + this._panel = panel; + panel.className = "cesium-cesiumInspector-dropDown"; + element.appendChild(panel); + + var createSection = InspectorShared.createSection; + var createCheckbox = InspectorShared.createCheckbox; + + var tilesetPanelContents = createSection( + panel, + "Tileset", + "tilesetVisible", + "toggleTileset" + ); + var displayPanelContents = createSection( + panel, + "Display", + "displayVisible", + "toggleDisplay" + ); + var updatePanelContents = createSection( + panel, + "Update", + "updateVisible", + "toggleUpdate" + ); + var loggingPanelContents = createSection( + panel, + "Logging", + "loggingVisible", + "toggleLogging" + ); + var tileDebugLabelsPanelContents = createSection( + panel, + "Tile Debug Labels", + "tileDebugLabelsVisible", + "toggleTileDebugLabels" + ); + var stylePanelContents = createSection( + panel, + "Style", + "styleVisible", + "toggleStyle" + ); + var optimizationPanelContents = createSection( + panel, + "Optimization", + "optimizationVisible", + "toggleOptimization" + ); + + var properties = document.createElement("div"); + properties.className = "field-group"; + var propertiesLabel = document.createElement("label"); + propertiesLabel.className = "field-label"; + propertiesLabel.appendChild(document.createTextNode("Properties: ")); + var propertiesField = document.createElement("div"); + propertiesField.setAttribute("data-bind", "text: properties"); + properties.appendChild(propertiesLabel); + properties.appendChild(propertiesField); + tilesetPanelContents.appendChild(properties); + tilesetPanelContents.appendChild( + makeButton("togglePickTileset", "Pick Tileset", "pickActive") + ); + tilesetPanelContents.appendChild( + makeButton("trimTilesCache", "Trim Tiles Cache") + ); + tilesetPanelContents.appendChild(createCheckbox("Enable Picking", "picking")); + + displayPanelContents.appendChild(createCheckbox("Colorize", "colorize")); + displayPanelContents.appendChild(createCheckbox("Wireframe", "wireframe")); + displayPanelContents.appendChild( + createCheckbox("Bounding Volumes", "showBoundingVolumes") + ); + displayPanelContents.appendChild( + createCheckbox("Content Volumes", "showContentBoundingVolumes") + ); + displayPanelContents.appendChild( + createCheckbox("Request Volumes", "showRequestVolumes") + ); + + displayPanelContents.appendChild( + createCheckbox("Point Cloud Shading", "pointCloudShading") + ); + var pointCloudShadingContainer = document.createElement("div"); + pointCloudShadingContainer.setAttribute( + "data-bind", + "visible: pointCloudShading" + ); + pointCloudShadingContainer.appendChild( + makeRangeInput("geometricErrorScale", 0, 2, 0.01, "Geometric Error Scale") + ); + pointCloudShadingContainer.appendChild( + makeRangeInput("maximumAttenuation", 0, 32, 1, "Maximum Attenuation") + ); + pointCloudShadingContainer.appendChild( + makeRangeInput("baseResolution", 0, 1, 0.01, "Base Resolution") + ); + pointCloudShadingContainer.appendChild( + createCheckbox("Eye Dome Lighting (EDL)", "eyeDomeLighting") + ); + displayPanelContents.appendChild(pointCloudShadingContainer); + + var edlContainer = document.createElement("div"); + edlContainer.setAttribute("data-bind", "visible: eyeDomeLighting"); + edlContainer.appendChild( + makeRangeInput("eyeDomeLightingStrength", 0, 2.0, 0.1, "EDL Strength") + ); + edlContainer.appendChild( + makeRangeInput("eyeDomeLightingRadius", 0, 4.0, 0.1, "EDL Radius") + ); + pointCloudShadingContainer.appendChild(edlContainer); + + updatePanelContents.appendChild( + createCheckbox("Freeze Frame", "freezeFrame") + ); + updatePanelContents.appendChild( + createCheckbox("Dynamic Screen Space Error", "dynamicScreenSpaceError") + ); + var sseContainer = document.createElement("div"); + sseContainer.appendChild( + makeRangeInput( + "maximumScreenSpaceError", + 0, + 128, + 1, + "Maximum Screen Space Error" + ) + ); + updatePanelContents.appendChild(sseContainer); + var dynamicScreenSpaceErrorContainer = document.createElement("div"); + dynamicScreenSpaceErrorContainer.setAttribute( + "data-bind", + "visible: dynamicScreenSpaceError" + ); + dynamicScreenSpaceErrorContainer.appendChild( + makeRangeInput( + "dynamicScreenSpaceErrorDensitySliderValue", + 0, + 1, + 0.005, + "Screen Space Error Density", + "dynamicScreenSpaceErrorDensity" + ) + ); + dynamicScreenSpaceErrorContainer.appendChild( + makeRangeInput( + "dynamicScreenSpaceErrorFactor", + 1, + 10, + 0.1, + "Screen Space Error Factor" + ) + ); + updatePanelContents.appendChild(dynamicScreenSpaceErrorContainer); + + loggingPanelContents.appendChild( + createCheckbox("Performance", "performance") + ); + loggingPanelContents.appendChild(performanceContainer); + loggingPanelContents.appendChild( + createCheckbox("Statistics", "showStatistics") + ); + var statistics = document.createElement("div"); + statistics.className = "cesium-3dTilesInspector-statistics"; + statistics.setAttribute( + "data-bind", + "html: statisticsText, visible: showStatistics" + ); + loggingPanelContents.appendChild(statistics); + loggingPanelContents.appendChild( + createCheckbox("Pick Statistics", "showPickStatistics") + ); + var pickStatistics = document.createElement("div"); + pickStatistics.className = "cesium-3dTilesInspector-statistics"; + pickStatistics.setAttribute( + "data-bind", + "html: pickStatisticsText, visible: showPickStatistics" + ); + loggingPanelContents.appendChild(pickStatistics); + + var stylePanelEditor = document.createElement("div"); + stylePanelContents.appendChild(stylePanelEditor); + stylePanelEditor.appendChild(document.createTextNode("Color Blend Mode: ")); + var blendDropdown = document.createElement("select"); + blendDropdown.setAttribute( + "data-bind", + "options: colorBlendModes, " + + 'optionsText: "text", ' + + 'optionsValue: "value", ' + + "value: colorBlendMode" + ); + stylePanelEditor.appendChild(blendDropdown); + var styleEditor = document.createElement("textarea"); + styleEditor.setAttribute( + "data-bind", + "textInput: styleString, event: { keydown: styleEditorKeyPress }" + ); + stylePanelEditor.className = "cesium-cesiumInspector-styleEditor"; + stylePanelEditor.appendChild(styleEditor); + var closeStylesBtn = makeButton("compileStyle", "Compile (Ctrl+Enter)"); + stylePanelEditor.appendChild(closeStylesBtn); + var errorBox = document.createElement("div"); + errorBox.className = "cesium-cesiumInspector-error"; + errorBox.setAttribute("data-bind", "text: editorError"); + stylePanelEditor.appendChild(errorBox); + + tileDebugLabelsPanelContents.appendChild( + createCheckbox("Show Picked Only", "showOnlyPickedTileDebugLabel") + ); + tileDebugLabelsPanelContents.appendChild( + createCheckbox("Geometric Error", "showGeometricError") + ); + tileDebugLabelsPanelContents.appendChild( + createCheckbox("Rendering Statistics", "showRenderingStatistics") + ); + tileDebugLabelsPanelContents.appendChild( + createCheckbox("Memory Usage (MB)", "showMemoryUsage") + ); + tileDebugLabelsPanelContents.appendChild(createCheckbox("Url", "showUrl")); + + optimizationPanelContents.appendChild( + createCheckbox("Skip Tile LODs", "skipLevelOfDetail") + ); + var skipScreenSpaceErrorFactorContainer = document.createElement("div"); + skipScreenSpaceErrorFactorContainer.appendChild( + makeRangeInput("skipScreenSpaceErrorFactor", 1, 50, 1, "Skip SSE Factor") + ); + optimizationPanelContents.appendChild(skipScreenSpaceErrorFactorContainer); + var baseScreenSpaceError = document.createElement("div"); + baseScreenSpaceError.appendChild( + makeRangeInput( + "baseScreenSpaceError", + 0, + 4096, + 1, + "SSE before skipping LOD" + ) + ); + optimizationPanelContents.appendChild(baseScreenSpaceError); + var skipLevelsContainer = document.createElement("div"); + skipLevelsContainer.appendChild( + makeRangeInput("skipLevels", 0, 10, 1, "Min. levels to skip") + ); + optimizationPanelContents.appendChild(skipLevelsContainer); + optimizationPanelContents.appendChild( + createCheckbox( + "Load only tiles that meet the max SSE.", + "immediatelyLoadDesiredLevelOfDetail" + ) + ); + optimizationPanelContents.appendChild( + createCheckbox("Load siblings of visible tiles", "loadSiblings") + ); + + knockout.applyBindings(viewModel, element); +} + +Object.defineProperties(Cesium3DTilesInspector.prototype, { + /** + * Gets the parent container. + * @memberof Cesium3DTilesInspector.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof Cesium3DTilesInspector.prototype + * + * @type {Cesium3DTilesInspectorViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Cesium3DTilesInspector.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +Cesium3DTilesInspector.prototype.destroy = function () { + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + this.viewModel.destroy(); + + return destroyObject(this); +}; + +function makeRangeInput(property, min, max, step, text, displayProperty) { + displayProperty = defaultValue(displayProperty, property); + var input = document.createElement("input"); + input.setAttribute("data-bind", "value: " + displayProperty); + input.type = "number"; + + var slider = document.createElement("input"); + slider.type = "range"; + slider.min = min; + slider.max = max; + slider.step = step; + slider.setAttribute("data-bind", 'valueUpdate: "input", value: ' + property); + + var wrapper = document.createElement("div"); + wrapper.appendChild(slider); + + var container = document.createElement("div"); + container.className = "cesium-cesiumInspector-slider"; + container.appendChild(document.createTextNode(text)); + container.appendChild(input); + container.appendChild(wrapper); + + return container; +} + +function makeButton(action, text, active) { + var button = document.createElement("button"); + button.type = "button"; + button.textContent = text; + button.className = "cesium-cesiumInspector-pickButton"; + var binding = "click: " + action; + if (defined(active)) { + binding += + ', css: {"cesium-cesiumInspector-pickButtonHighlight" : ' + active + "}"; + } + button.setAttribute("data-bind", binding); + + return button; +} +export default Cesium3DTilesInspector; diff --git a/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel.js b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel.js new file mode 100644 index 000000000..9a906f030 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel.js @@ -0,0 +1,1576 @@ +import Check from "../../Core/Check.js"; +import Color from "../../Core/Color.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import ScreenSpaceEventHandler from "../../Core/ScreenSpaceEventHandler.js"; +import ScreenSpaceEventType from "../../Core/ScreenSpaceEventType.js"; +import Cesium3DTileColorBlendMode from "../../Scene/Cesium3DTileColorBlendMode.js"; +import Cesium3DTileFeature from "../../Scene/Cesium3DTileFeature.js"; +import Cesium3DTilePass from "../../Scene/Cesium3DTilePass.js"; +import Cesium3DTileset from "../../Scene/Cesium3DTileset.js"; +import Cesium3DTileStyle from "../../Scene/Cesium3DTileStyle.js"; +import PerformanceDisplay from "../../Scene/PerformanceDisplay.js"; +import knockout from "../../ThirdParty/knockout.js"; + +function getPickTileset(viewModel) { + return function (e) { + var pick = viewModel._scene.pick(e.position); + if (defined(pick) && pick.primitive instanceof Cesium3DTileset) { + viewModel.tileset = pick.primitive; + } + viewModel.pickActive = false; + }; +} + +function selectTilesetOnHover(viewModel, value) { + if (value) { + viewModel._eventHandler.setInputAction(function (e) { + var pick = viewModel._scene.pick(e.endPosition); + if (defined(pick) && pick.primitive instanceof Cesium3DTileset) { + viewModel.tileset = pick.primitive; + } + }, ScreenSpaceEventType.MOUSE_MOVE); + } else { + viewModel._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE); + + // Restore hover-over selection to its current value + // eslint-disable-next-line no-self-assign + viewModel.picking = viewModel.picking; + } +} + +var stringOptions = { + maximumFractionDigits: 3, +}; + +function formatMemoryString(memorySizeInBytes) { + var memoryInMegabytes = memorySizeInBytes / 1048576; + if (memoryInMegabytes < 1.0) { + return memoryInMegabytes.toLocaleString(undefined, stringOptions); + } + return Math.round(memoryInMegabytes).toLocaleString(); +} + +function getStatistics(tileset, isPick) { + if (!defined(tileset)) { + return ""; + } + + var statistics = isPick + ? tileset._statisticsPerPass[Cesium3DTilePass.PICK] + : tileset._statisticsPerPass[Cesium3DTilePass.RENDER]; + + // Since the pick pass uses a smaller frustum around the pixel of interest, + // the statistics will be different than the normal render pass. + var s = '"; + if (!isPick) { + s += '"; + s += '"; + s += '"; + s += '"; + s += '"; + } + return s; +} + +var colorBlendModes = [ + { + text: "Highlight", + value: Cesium3DTileColorBlendMode.HIGHLIGHT, + }, + { + text: "Replace", + value: Cesium3DTileColorBlendMode.REPLACE, + }, + { + text: "Mix", + value: Cesium3DTileColorBlendMode.MIX, + }, +]; + +var highlightColor = new Color(1.0, 1.0, 0.0, 0.4); +var scratchColor = new Color(); +var oldColor = new Color(); + +/** + * The view model for {@link Cesium3DTilesInspector}. + * @alias Cesium3DTilesInspectorViewModel + * @constructor + * + * @param {Scene} scene The scene instance to use. + * @param {HTMLElement} performanceContainer The container for the performance display + */ +function Cesium3DTilesInspectorViewModel(scene, performanceContainer) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.object("scene", scene); + Check.typeOf.object("performanceContainer", performanceContainer); + //>>includeEnd('debug'); + + var that = this; + var canvas = scene.canvas; + this._eventHandler = new ScreenSpaceEventHandler(canvas); + this._scene = scene; + this._performanceContainer = performanceContainer; + this._canvas = canvas; + + this._performanceDisplay = new PerformanceDisplay({ + container: performanceContainer, + }); + + this._statisticsText = ""; + this._pickStatisticsText = ""; + this._editorError = ""; + + /** + * Gets or sets the flag to enable performance display. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.performance = false; + + /** + * Gets or sets the flag to show statistics. This property is observable. + * + * @type {Boolean} + * @default true + */ + this.showStatistics = true; + + /** + * Gets or sets the flag to show pick statistics. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showPickStatistics = true; + + /** + * Gets or sets the flag to show the inspector. This property is observable. + * + * @type {Boolean} + * @default true + */ + this.inspectorVisible = true; + + /** + * Gets or sets the flag to show the tileset section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.tilesetVisible = false; + + /** + * Gets or sets the flag to show the display section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.displayVisible = false; + + /** + * Gets or sets the flag to show the update section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.updateVisible = false; + + /** + * Gets or sets the flag to show the logging section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.loggingVisible = false; + + /** + * Gets or sets the flag to show the style section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.styleVisible = false; + + /** + * Gets or sets the flag to show the tile info section. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.tileDebugLabelsVisible = false; + + /** + * Gets or sets the flag to show the optimization info section. This property is observable. + * + * @type {Boolean} + * @default false; + */ + this.optimizationVisible = false; + + /** + * Gets or sets the JSON for the tileset style. This property is observable. + * + * @type {String} + * @default '{}' + */ + this.styleString = "{}"; + + this._tileset = undefined; + this._feature = undefined; + this._tile = undefined; + + knockout.track(this, [ + "performance", + "inspectorVisible", + "_statisticsText", + "_pickStatisticsText", + "_editorError", + "showPickStatistics", + "showStatistics", + "tilesetVisible", + "displayVisible", + "updateVisible", + "loggingVisible", + "styleVisible", + "optimizationVisible", + "tileDebugLabelsVisible", + "styleString", + "_feature", + "_tile", + ]); + + this._properties = knockout.observable({}); + /** + * Gets the names of the properties in the tileset. This property is observable. + * @type {String[]} + * @readonly + */ + this.properties = []; + knockout.defineProperty(this, "properties", function () { + var names = []; + var properties = that._properties(); + for (var prop in properties) { + if (properties.hasOwnProperty(prop)) { + names.push(prop); + } + } + return names; + }); + + var dynamicScreenSpaceError = knockout.observable(); + knockout.defineProperty(this, "dynamicScreenSpaceError", { + get: function () { + return dynamicScreenSpaceError(); + }, + set: function (value) { + dynamicScreenSpaceError(value); + if (defined(that._tileset)) { + that._tileset.dynamicScreenSpaceError = value; + } + }, + }); + /** + * Gets or sets the flag to enable dynamic screen space error. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.dynamicScreenSpaceError = false; + + var colorBlendMode = knockout.observable(); + knockout.defineProperty(this, "colorBlendMode", { + get: function () { + return colorBlendMode(); + }, + set: function (value) { + colorBlendMode(value); + if (defined(that._tileset)) { + that._tileset.colorBlendMode = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the color blend mode. This property is observable. + * + * @type {Cesium3DTileColorBlendMode} + * @default Cesium3DTileColorBlendMode.HIGHLIGHT + */ + this.colorBlendMode = Cesium3DTileColorBlendMode.HIGHLIGHT; + + var showOnlyPickedTileDebugLabel = knockout.observable(); + var picking = knockout.observable(); + knockout.defineProperty(this, "picking", { + get: function () { + return picking(); + }, + set: function (value) { + picking(value); + if (value) { + that._eventHandler.setInputAction(function (e) { + var picked = scene.pick(e.endPosition); + if (picked instanceof Cesium3DTileFeature) { + // Picked a feature + that.feature = picked; + that.tile = picked.content.tile; + } else if (defined(picked) && defined(picked.content)) { + // Picked a tile + that.feature = undefined; + that.tile = picked.content.tile; + } else { + // Picked nothing + that.feature = undefined; + that.tile = undefined; + } + if (!defined(that._tileset)) { + return; + } + if ( + showOnlyPickedTileDebugLabel && + defined(picked) && + defined(picked.content) + ) { + var position; + if (scene.pickPositionSupported) { + position = scene.pickPosition(e.endPosition); + if (defined(position)) { + that._tileset.debugPickPosition = position; + } + } + that._tileset.debugPickedTile = picked.content.tile; + } else { + that._tileset.debugPickedTile = undefined; + } + that._scene.requestRender(); + }, ScreenSpaceEventType.MOUSE_MOVE); + } else { + that.feature = undefined; + that.tile = undefined; + that._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE); + } + }, + }); + /** + * Gets or sets the flag to enable picking. This property is observable. + * + * @type {Boolean} + * @default true + */ + this.picking = true; + + var colorize = knockout.observable(); + knockout.defineProperty(this, "colorize", { + get: function () { + return colorize(); + }, + set: function (value) { + colorize(value); + if (defined(that._tileset)) { + that._tileset.debugColorizeTiles = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to colorize tiles. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.colorize = false; + + var wireframe = knockout.observable(); + knockout.defineProperty(this, "wireframe", { + get: function () { + return wireframe(); + }, + set: function (value) { + wireframe(value); + if (defined(that._tileset)) { + that._tileset.debugWireframe = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to draw with wireframe. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.wireframe = false; + + var showBoundingVolumes = knockout.observable(); + knockout.defineProperty(this, "showBoundingVolumes", { + get: function () { + return showBoundingVolumes(); + }, + set: function (value) { + showBoundingVolumes(value); + if (defined(that._tileset)) { + that._tileset.debugShowBoundingVolume = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show bounding volumes. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showBoundingVolumes = false; + + var showContentBoundingVolumes = knockout.observable(); + knockout.defineProperty(this, "showContentBoundingVolumes", { + get: function () { + return showContentBoundingVolumes(); + }, + set: function (value) { + showContentBoundingVolumes(value); + if (defined(that._tileset)) { + that._tileset.debugShowContentBoundingVolume = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show content volumes. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showContentBoundingVolumes = false; + + var showRequestVolumes = knockout.observable(); + knockout.defineProperty(this, "showRequestVolumes", { + get: function () { + return showRequestVolumes(); + }, + set: function (value) { + showRequestVolumes(value); + if (defined(that._tileset)) { + that._tileset.debugShowViewerRequestVolume = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show request volumes. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showRequestVolumes = false; + + var freezeFrame = knockout.observable(); + knockout.defineProperty(this, "freezeFrame", { + get: function () { + return freezeFrame(); + }, + set: function (value) { + freezeFrame(value); + if (defined(that._tileset)) { + that._tileset.debugFreezeFrame = value; + that._scene.debugShowFrustumPlanes = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to suspend updates. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.freezeFrame = false; + + knockout.defineProperty(this, "showOnlyPickedTileDebugLabel", { + get: function () { + return showOnlyPickedTileDebugLabel(); + }, + set: function (value) { + showOnlyPickedTileDebugLabel(value); + if (defined(that._tileset)) { + that._tileset.debugPickedTileLabelOnly = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show debug labels only for the currently picked tile. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showOnlyPickedTileDebugLabel = false; + + var showGeometricError = knockout.observable(); + knockout.defineProperty(this, "showGeometricError", { + get: function () { + return showGeometricError(); + }, + set: function (value) { + showGeometricError(value); + if (defined(that._tileset)) { + that._tileset.debugShowGeometricError = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show tile geometric error. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showGeometricError = false; + + var showRenderingStatistics = knockout.observable(); + knockout.defineProperty(this, "showRenderingStatistics", { + get: function () { + return showRenderingStatistics(); + }, + set: function (value) { + showRenderingStatistics(value); + if (defined(that._tileset)) { + that._tileset.debugShowRenderingStatistics = value; + that._scene.requestRender(); + } + }, + }); + /** + * Displays the number of commands, points, triangles and features used per tile. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showRenderingStatistics = false; + + var showMemoryUsage = knockout.observable(); + knockout.defineProperty(this, "showMemoryUsage", { + get: function () { + return showMemoryUsage(); + }, + set: function (value) { + showMemoryUsage(value); + if (defined(that._tileset)) { + that._tileset.debugShowMemoryUsage = value; + that._scene.requestRender(); + } + }, + }); + /** + * Displays the memory used per tile. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showMemoryUsage = false; + + var showUrl = knockout.observable(); + knockout.defineProperty(this, "showUrl", { + get: function () { + return showUrl(); + }, + set: function (value) { + showUrl(value); + if (defined(that._tileset)) { + that._tileset.debugShowUrl = value; + that._scene.requestRender(); + } + }, + }); + /** + * Gets or sets the flag to show the tile url. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.showUrl = false; + + var maximumScreenSpaceError = knockout.observable(); + knockout.defineProperty(this, "maximumScreenSpaceError", { + get: function () { + return maximumScreenSpaceError(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + maximumScreenSpaceError(value); + if (defined(that._tileset)) { + that._tileset.maximumScreenSpaceError = value; + } + } + }, + }); + /** + * Gets or sets the maximum screen space error. This property is observable. + * + * @type {Number} + * @default 16 + */ + this.maximumScreenSpaceError = 16; + + var dynamicScreenSpaceErrorDensity = knockout.observable(); + knockout.defineProperty(this, "dynamicScreenSpaceErrorDensity", { + get: function () { + return dynamicScreenSpaceErrorDensity(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + dynamicScreenSpaceErrorDensity(value); + if (defined(that._tileset)) { + that._tileset.dynamicScreenSpaceErrorDensity = value; + } + } + }, + }); + /** + * Gets or sets the dynamic screen space error density. This property is observable. + * + * @type {Number} + * @default 0.00278 + */ + this.dynamicScreenSpaceErrorDensity = 0.00278; + + /** + * Gets or sets the dynamic screen space error density slider value. + * This allows the slider to be exponential because values tend to be closer to 0 than 1. + * This property is observable. + * + * @type {Number} + * @default 0.00278 + */ + this.dynamicScreenSpaceErrorDensitySliderValue = undefined; + knockout.defineProperty(this, "dynamicScreenSpaceErrorDensitySliderValue", { + get: function () { + return Math.pow(dynamicScreenSpaceErrorDensity(), 1 / 6); + }, + set: function (value) { + dynamicScreenSpaceErrorDensity(Math.pow(value, 6)); + }, + }); + + var dynamicScreenSpaceErrorFactor = knockout.observable(); + knockout.defineProperty(this, "dynamicScreenSpaceErrorFactor", { + get: function () { + return dynamicScreenSpaceErrorFactor(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + dynamicScreenSpaceErrorFactor(value); + if (defined(that._tileset)) { + that._tileset.dynamicScreenSpaceErrorFactor = value; + } + } + }, + }); + /** + * Gets or sets the dynamic screen space error factor. This property is observable. + * + * @type {Number} + * @default 4.0 + */ + this.dynamicScreenSpaceErrorFactor = 4.0; + + var pickTileset = getPickTileset(this); + var pickActive = knockout.observable(); + knockout.defineProperty(this, "pickActive", { + get: function () { + return pickActive(); + }, + set: function (value) { + pickActive(value); + if (value) { + that._eventHandler.setInputAction( + pickTileset, + ScreenSpaceEventType.LEFT_CLICK + ); + } else { + that._eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK); + } + }, + }); + + var pointCloudShading = knockout.observable(); + knockout.defineProperty(this, "pointCloudShading", { + get: function () { + return pointCloudShading(); + }, + set: function (value) { + pointCloudShading(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.attenuation = value; + } + }, + }); + /** + * Gets or sets the flag to enable point cloud shading. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.pointCloudShading = false; + + var geometricErrorScale = knockout.observable(); + knockout.defineProperty(this, "geometricErrorScale", { + get: function () { + return geometricErrorScale(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + geometricErrorScale(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.geometricErrorScale = value; + } + } + }, + }); + /** + * Gets or sets the geometric error scale. This property is observable. + * + * @type {Number} + * @default 1.0 + */ + this.geometricErrorScale = 1.0; + + var maximumAttenuation = knockout.observable(); + knockout.defineProperty(this, "maximumAttenuation", { + get: function () { + return maximumAttenuation(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + maximumAttenuation(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.maximumAttenuation = + value === 0 ? undefined : value; + } + } + }, + }); + /** + * Gets or sets the maximum attenuation. This property is observable. + * + * @type {Number} + * @default 0 + */ + this.maximumAttenuation = 0; + + var baseResolution = knockout.observable(); + knockout.defineProperty(this, "baseResolution", { + get: function () { + return baseResolution(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + baseResolution(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.baseResolution = + value === 0 ? undefined : value; + } + } + }, + }); + /** + * Gets or sets the base resolution. This property is observable. + * + * @type {Number} + * @default 0 + */ + this.baseResolution = 0; + + var eyeDomeLighting = knockout.observable(); + knockout.defineProperty(this, "eyeDomeLighting", { + get: function () { + return eyeDomeLighting(); + }, + set: function (value) { + eyeDomeLighting(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.eyeDomeLighting = value; + } + }, + }); + /** + * Gets or sets the flag to enable eye dome lighting. This property is observable. + * + * @type {Boolean} + * @default false + */ + this.eyeDomeLighting = false; + + var eyeDomeLightingStrength = knockout.observable(); + knockout.defineProperty(this, "eyeDomeLightingStrength", { + get: function () { + return eyeDomeLightingStrength(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + eyeDomeLightingStrength(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.eyeDomeLightingStrength = value; + } + } + }, + }); + /** + * Gets or sets the eye dome lighting strength. This property is observable. + * + * @type {Number} + * @default 1.0 + */ + this.eyeDomeLightingStrength = 1.0; + + var eyeDomeLightingRadius = knockout.observable(); + knockout.defineProperty(this, "eyeDomeLightingRadius", { + get: function () { + return eyeDomeLightingRadius(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + eyeDomeLightingRadius(value); + if (defined(that._tileset)) { + that._tileset.pointCloudShading.eyeDomeLightingRadius = value; + } + } + }, + }); + /** + * Gets or sets the eye dome lighting radius. This property is observable. + * + * @type {Number} + * @default 1.0 + */ + this.eyeDomeLightingRadius = 1.0; + + /** + * Gets or sets the pick state + * + * @type {Boolean} + * @default false + */ + this.pickActive = false; + + var skipLevelOfDetail = knockout.observable(); + knockout.defineProperty(this, "skipLevelOfDetail", { + get: function () { + return skipLevelOfDetail(); + }, + set: function (value) { + skipLevelOfDetail(value); + if (defined(that._tileset)) { + that._tileset.skipLevelOfDetail = value; + } + }, + }); + /** + * Gets or sets the flag to determine if level of detail skipping should be applied during the traversal. + * This property is observable. + * @type {Boolean} + * @default true + */ + this.skipLevelOfDetail = true; + + var skipScreenSpaceErrorFactor = knockout.observable(); + knockout.defineProperty(this, "skipScreenSpaceErrorFactor", { + get: function () { + return skipScreenSpaceErrorFactor(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + skipScreenSpaceErrorFactor(value); + if (defined(that._tileset)) { + that._tileset.skipScreenSpaceErrorFactor = value; + } + } + }, + }); + /** + * Gets or sets the multiplier defining the minimum screen space error to skip. This property is observable. + * @type {Number} + * @default 16 + */ + this.skipScreenSpaceErrorFactor = 16; + + var baseScreenSpaceError = knockout.observable(); + knockout.defineProperty(this, "baseScreenSpaceError", { + get: function () { + return baseScreenSpaceError(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + baseScreenSpaceError(value); + if (defined(that._tileset)) { + that._tileset.baseScreenSpaceError = value; + } + } + }, + }); + /** + * Gets or sets the screen space error that must be reached before skipping levels of detail. This property is observable. + * @type {Number} + * @default 1024 + */ + this.baseScreenSpaceError = 1024; + + var skipLevels = knockout.observable(); + knockout.defineProperty(this, "skipLevels", { + get: function () { + return skipLevels(); + }, + set: function (value) { + value = Number(value); + if (!isNaN(value)) { + skipLevels(value); + if (defined(that._tileset)) { + that._tileset.skipLevels = value; + } + } + }, + }); + /** + * Gets or sets the constant defining the minimum number of levels to skip when loading tiles. This property is observable. + * @type {Number} + * @default 1 + */ + this.skipLevels = 1; + + var immediatelyLoadDesiredLevelOfDetail = knockout.observable(); + knockout.defineProperty(this, "immediatelyLoadDesiredLevelOfDetail", { + get: function () { + return immediatelyLoadDesiredLevelOfDetail(); + }, + set: function (value) { + immediatelyLoadDesiredLevelOfDetail(value); + if (defined(that._tileset)) { + that._tileset.immediatelyLoadDesiredLevelOfDetail = value; + } + }, + }); + /** + * Gets or sets the flag which, when true, only tiles that meet the maximum screen space error will ever be downloaded. + * This property is observable. + * @type {Boolean} + * @default false + */ + this.immediatelyLoadDesiredLevelOfDetail = false; + + var loadSiblings = knockout.observable(); + knockout.defineProperty(this, "loadSiblings", { + get: function () { + return loadSiblings(); + }, + set: function (value) { + loadSiblings(value); + if (defined(that._tileset)) { + that._tileset.loadSiblings = value; + } + }, + }); + /** + * Gets or sets the flag which determines whether siblings of visible tiles are always downloaded during traversal. + * This property is observable + * @type {Boolean} + * @default false + */ + this.loadSiblings = false; + + this._style = undefined; + this._shouldStyle = false; + this._definedProperties = [ + "properties", + "dynamicScreenSpaceError", + "colorBlendMode", + "picking", + "colorize", + "wireframe", + "showBoundingVolumes", + "showContentBoundingVolumes", + "showRequestVolumes", + "freezeFrame", + "maximumScreenSpaceError", + "dynamicScreenSpaceErrorDensity", + "baseScreenSpaceError", + "skipScreenSpaceErrorFactor", + "skipLevelOfDetail", + "skipLevels", + "immediatelyLoadDesiredLevelOfDetail", + "loadSiblings", + "dynamicScreenSpaceErrorDensitySliderValue", + "dynamicScreenSpaceErrorFactor", + "pickActive", + "showOnlyPickedTileDebugLabel", + "showGeometricError", + "showRenderingStatistics", + "showMemoryUsage", + "showUrl", + "pointCloudShading", + "geometricErrorScale", + "maximumAttenuation", + "baseResolution", + "eyeDomeLighting", + "eyeDomeLightingStrength", + "eyeDomeLightingRadius", + ]; + this._removePostRenderEvent = scene.postRender.addEventListener(function () { + that._update(); + }); + + if (!defined(this._tileset)) { + selectTilesetOnHover(this, true); + } +} + +Object.defineProperties(Cesium3DTilesInspectorViewModel.prototype, { + /** + * Gets the scene + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {Scene} + * @readonly + */ + scene: { + get: function () { + return this._scene; + }, + }, + /** + * Gets the performance container + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {HTMLElement} + * @readonly + */ + performanceContainer: { + get: function () { + return this._performanceContainer; + }, + }, + + /** + * Gets the statistics text. This property is observable. + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {String} + * @readonly + */ + statisticsText: { + get: function () { + return this._statisticsText; + }, + }, + /** + * Gets the pick statistics text. This property is observable. + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {String} + * @readonly + */ + pickStatisticsText: { + get: function () { + return this._pickStatisticsText; + }, + }, + + /** + * Gets the available blend modes + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {Object[]} + * @readonly + */ + colorBlendModes: { + get: function () { + return colorBlendModes; + }, + }, + + /** + * Gets the editor error message + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {String} + * @readonly + */ + editorError: { + get: function () { + return this._editorError; + }, + }, + + /** + * Gets or sets the tileset of the view model. + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {Cesium3DTileset} + */ + tileset: { + get: function () { + return this._tileset; + }, + set: function (tileset) { + this._tileset = tileset; + this._style = undefined; + this.styleString = "{}"; + this.feature = undefined; + this.tile = undefined; + + if (defined(tileset)) { + var that = this; + tileset.readyPromise.then(function (t) { + if (!that.isDestroyed()) { + that._properties(t.properties); + } + }); + + // update tileset with existing settings + var settings = [ + "colorize", + "wireframe", + "showBoundingVolumes", + "showContentBoundingVolumes", + "showRequestVolumes", + "freezeFrame", + "showOnlyPickedTileDebugLabel", + "showGeometricError", + "showRenderingStatistics", + "showMemoryUsage", + "showUrl", + ]; + var length = settings.length; + for (var i = 0; i < length; ++i) { + var setting = settings[i]; + //eslint-disable-next-line no-self-assign + this[setting] = this[setting]; + } + + // update view model with existing tileset settings + this.maximumScreenSpaceError = tileset.maximumScreenSpaceError; + this.dynamicScreenSpaceError = tileset.dynamicScreenSpaceError; + this.dynamicScreenSpaceErrorDensity = + tileset.dynamicScreenSpaceErrorDensity; + this.dynamicScreenSpaceErrorFactor = + tileset.dynamicScreenSpaceErrorFactor; + this.colorBlendMode = tileset.colorBlendMode; + this.skipLevelOfDetail = tileset.skipLevelOfDetail; + this.skipScreenSpaceErrorFactor = tileset.skipScreenSpaceErrorFactor; + this.baseScreenSpaceError = tileset.baseScreenSpaceError; + this.skipLevels = tileset.skipLevels; + this.immediatelyLoadDesiredLevelOfDetail = + tileset.immediatelyLoadDesiredLevelOfDetail; + this.loadSiblings = tileset.loadSiblings; + + var pointCloudShading = tileset.pointCloudShading; + this.pointCloudShading = pointCloudShading.attenuation; + this.geometricErrorScale = pointCloudShading.geometricErrorScale; + this.maximumAttenuation = pointCloudShading.maximumAttenuation + ? pointCloudShading.maximumAttenuation + : 0.0; + this.baseResolution = pointCloudShading.baseResolution + ? pointCloudShading.baseResolution + : 0.0; + this.eyeDomeLighting = pointCloudShading.eyeDomeLighting; + this.eyeDomeLightingStrength = + pointCloudShading.eyeDomeLightingStrength; + this.eyeDomeLightingRadius = pointCloudShading.eyeDomeLightingRadius; + + this._scene.requestRender(); + } else { + this._properties({}); + } + + this._statisticsText = getStatistics(tileset, false); + this._pickStatisticsText = getStatistics(tileset, true); + selectTilesetOnHover(this, false); + }, + }, + + /** + * Gets the current feature of the view model. + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {Cesium3DTileFeature} + */ + feature: { + get: function () { + return this._feature; + }, + set: function (feature) { + if (this._feature === feature) { + return; + } + var currentFeature = this._feature; + if (defined(currentFeature) && !currentFeature.content.isDestroyed()) { + // Restore original color to feature that is no longer selected + if (!this.colorize && defined(this._style)) { + currentFeature.color = defined(this._style.color) + ? this._style.color.evaluateColor(currentFeature, scratchColor) + : Color.WHITE; + } else { + currentFeature.color = oldColor; + } + this._scene.requestRender(); + } + if (defined(feature)) { + // Highlight new feature + Color.clone(feature.color, oldColor); + feature.color = highlightColor; + this._scene.requestRender(); + } + this._feature = feature; + }, + }, + + /** + * Gets the current tile of the view model + * @memberof Cesium3DTilesInspectorViewModel.prototype + * @type {Cesium3DTile} + */ + tile: { + get: function () { + return this._tile; + }, + set: function (tile) { + if (this._tile === tile) { + return; + } + var currentTile = this._tile; + + if ( + defined(currentTile) && + !currentTile.isDestroyed() && + !hasFeatures(currentTile.content) + ) { + // Restore original color to tile that is no longer selected + currentTile.color = oldColor; + this._scene.requestRender(); + } + + if (defined(tile) && !hasFeatures(tile.content)) { + // Highlight new tile + Color.clone(tile.color, oldColor); + tile.color = highlightColor; + this._scene.requestRender(); + } + this._tile = tile; + }, + }, +}); + +function hasFeatures(content) { + if (content.featuresLength > 0) { + return true; + } + var innerContents = content.innerContents; + if (defined(innerContents)) { + var length = innerContents.length; + for (var i = 0; i < length; ++i) { + if (!hasFeatures(innerContents[i])) { + return false; + } + } + return true; + } + return false; +} + +/** + * Toggles the pick tileset mode + */ +Cesium3DTilesInspectorViewModel.prototype.togglePickTileset = function () { + this.pickActive = !this.pickActive; +}; + +/** + * Toggles the inspector visibility + */ +Cesium3DTilesInspectorViewModel.prototype.toggleInspector = function () { + this.inspectorVisible = !this.inspectorVisible; +}; + +/** + * Toggles the visibility of the tileset section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleTileset = function () { + this.tilesetVisible = !this.tilesetVisible; +}; + +/** + * Toggles the visibility of the display section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleDisplay = function () { + this.displayVisible = !this.displayVisible; +}; + +/** + * Toggles the visibility of the update section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleUpdate = function () { + this.updateVisible = !this.updateVisible; +}; + +/** + * Toggles the visibility of the logging section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleLogging = function () { + this.loggingVisible = !this.loggingVisible; +}; + +/** + * Toggles the visibility of the style section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleStyle = function () { + this.styleVisible = !this.styleVisible; +}; + +/** + * Toggles the visibility of the tile Debug Info section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleTileDebugLabels = function () { + this.tileDebugLabelsVisible = !this.tileDebugLabelsVisible; +}; + +/** + * Toggles the visibility of the optimization section + */ +Cesium3DTilesInspectorViewModel.prototype.toggleOptimization = function () { + this.optimizationVisible = !this.optimizationVisible; +}; + +/** + * Trims tile cache + */ +Cesium3DTilesInspectorViewModel.prototype.trimTilesCache = function () { + if (defined(this._tileset)) { + this._tileset.trimLoadedTiles(); + } +}; + +/** + * Compiles the style in the style editor. + */ +Cesium3DTilesInspectorViewModel.prototype.compileStyle = function () { + var tileset = this._tileset; + if (!defined(tileset) || this.styleString === JSON.stringify(tileset.style)) { + return; + } + this._editorError = ""; + try { + if (this.styleString.length === 0) { + this.styleString = "{}"; + } + this._style = new Cesium3DTileStyle(JSON.parse(this.styleString)); + this._shouldStyle = true; + this._scene.requestRender(); + } catch (err) { + this._editorError = err.toString(); + } + + // set feature again so pick coloring is set + this.feature = this._feature; + this.tile = this._tile; +}; + +/** + * Handles key press events on the style editor. + */ +Cesium3DTilesInspectorViewModel.prototype.styleEditorKeyPress = function ( + sender, + event +) { + if (event.keyCode === 9) { + //tab + event.preventDefault(); + var textArea = event.target; + var start = textArea.selectionStart; + var end = textArea.selectionEnd; + var newEnd = end; + var selected = textArea.value.slice(start, end); + var lines = selected.split("\n"); + var length = lines.length; + var i; + if (!event.shiftKey) { + for (i = 0; i < length; ++i) { + lines[i] = " " + lines[i]; + newEnd += 2; + } + } else { + for (i = 0; i < length; ++i) { + if (lines[i][0] === " ") { + if (lines[i][1] === " ") { + lines[i] = lines[i].substr(2); + newEnd -= 2; + } else { + lines[i] = lines[i].substr(1); + newEnd -= 1; + } + } + } + } + var newText = lines.join("\n"); + textArea.value = + textArea.value.slice(0, start) + newText + textArea.value.slice(end); + textArea.selectionStart = start !== end ? start : newEnd; + textArea.selectionEnd = newEnd; + } else if (event.ctrlKey && (event.keyCode === 10 || event.keyCode === 13)) { + //ctrl + enter + this.compileStyle(); + } + return true; +}; + +/** + * Updates the values of view model + * @private + */ +Cesium3DTilesInspectorViewModel.prototype._update = function () { + var tileset = this._tileset; + + if (this.performance) { + this._performanceDisplay.update(); + } + + if (defined(tileset)) { + if (tileset.isDestroyed()) { + this.tile = undefined; + this.feature = undefined; + this.tileset = undefined; + return; + } + + var style = tileset.style; + if (this._style !== tileset.style) { + if (this._shouldStyle) { + tileset.style = this._style; + this._shouldStyle = false; + } else { + this._style = style; + this.styleString = JSON.stringify(style.style, null, " "); + } + } + } + if (this.showStatistics) { + this._statisticsText = getStatistics(tileset, false); + this._pickStatisticsText = getStatistics(tileset, true); + } +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Cesium3DTilesInspectorViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +Cesium3DTilesInspectorViewModel.prototype.destroy = function () { + this._eventHandler.destroy(); + this._removePostRenderEvent(); + + var that = this; + this._definedProperties.forEach(function (property) { + knockout.getObservable(that, property).dispose(); + }); + + return destroyObject(this); +}; + +/** + * Generates an HTML string of the statistics + * + * @function + * @param {Cesium3DTileset} tileset The tileset + * @param {Boolean} isPick Whether this is getting the statistics for the pick pass + * @returns {String} The formatted statistics + */ +Cesium3DTilesInspectorViewModel.getStatistics = getStatistics; +export default Cesium3DTilesInspectorViewModel; diff --git a/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.css b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.css new file mode 100644 index 000000000..ca721ca19 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.css @@ -0,0 +1,134 @@ +.cesium-cesiumInspector { + border-radius: 5px; + transition: width ease-in-out 0.25s; + background: rgba(48, 51, 54, 0.8); + border: 1px solid #444; + color: #edffff; + display: inline-block; + position: relative; + padding: 4px 12px; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + overflow: hidden; +} + +.cesium-cesiumInspector-button { + text-align: center; + font-size: 11pt; +} + +.cesium-cesiumInspector-visible .cesium-cesiumInspector-button { + border-bottom: 1px solid #aaa; + padding-bottom: 3px; +} + +.cesium-cesiumInspector input:enabled, +.cesium-cesiumInspector-button { + cursor: pointer; +} + +.cesium-cesiumInspector-visible { + width: 185px; + height: auto; +} + +.cesium-cesiumInspector-hidden { + width: 122px; + height: 17px; +} + +.cesium-cesiumInspector-sectionContent { + max-height: 500px; +} + +.cesium-cesiumInspector-section-collapsed + .cesium-cesiumInspector-sectionContent { + max-height: 0; + padding: 0 !important; + overflow: hidden; +} + +.cesium-cesiumInspector-dropDown { + margin: 5px 0; + font-family: sans-serif; + font-size: 10pt; + width: 185px; +} + +.cesium-cesiumInspector-frustumStatistics { + padding-left: 10px; + padding: 5px; + background-color: rgba(80, 80, 80, 0.75); +} + +.cesium-cesiumInspector-pickButton { + background-color: rgba(0, 0, 0, 0.3); + border: 1px solid #444; + color: #edffff; + border-radius: 5px; + padding: 3px 7px; + cursor: pointer; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + margin: 0 auto; +} + +.cesium-cesiumInspector-pickButton:focus { + outline: none; +} + +.cesium-cesiumInspector-pickButton:active, +.cesium-cesiumInspector-pickButtonHighlight { + color: #000; /* For text buttons */ + background: #adf; + border-color: #fff; + box-shadow: 0 0 8px #fff; +} + +.cesium-cesiumInspector-center { + text-align: center; +} + +.cesium-cesiumInspector-sectionHeader { + font-weight: bold; + font-size: 10pt; + margin: 0; + cursor: pointer; +} + +.cesium-cesiumInspector-pickSection { + border: 1px solid #aaa; + border-radius: 5px; + padding: 3px; + margin-bottom: 5px; +} + +.cesium-cesiumInspector-sectionContent { + margin-bottom: 10px; + transition: max-height 0.25s; +} + +.cesium-cesiumInspector-tileText { + padding-bottom: 10px; + border-bottom: 1px solid #aaa; +} + +.cesium-cesiumInspector-relativeText { + padding-top: 10px; +} + +.cesium-cesiumInspector-sectionHeader::before { + margin-right: 5px; + content: "-"; + width: 1ch; + display: inline-block; +} + +.cesium-cesiumInspector-section-collapsed + .cesium-cesiumInspector-sectionHeader::before { + content: "+"; +} diff --git a/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.js b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.js new file mode 100644 index 000000000..164127dfd --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspector.js @@ -0,0 +1,331 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import InspectorShared from "../InspectorShared.js"; +import CesiumInspectorViewModel from "./CesiumInspectorViewModel.js"; + +/** + * Inspector widget to aid in debugging + * + * @alias CesiumInspector + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The Scene instance to use. + * + * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Inspector.html|Cesium Sandcastle Cesium Inspector Demo} + */ +function CesiumInspector(container, scene) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var performanceContainer = document.createElement("div"); + + var viewModel = new CesiumInspectorViewModel(scene, performanceContainer); + this._viewModel = viewModel; + this._container = container; + + var element = document.createElement("div"); + this._element = element; + var text = document.createElement("div"); + text.textContent = "Cesium Inspector"; + text.className = "cesium-cesiumInspector-button"; + text.setAttribute("data-bind", "click: toggleDropDown"); + element.appendChild(text); + element.className = "cesium-cesiumInspector"; + element.setAttribute( + "data-bind", + 'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }' + ); + container.appendChild(this._element); + + var panel = document.createElement("div"); + this._panel = panel; + panel.className = "cesium-cesiumInspector-dropDown"; + element.appendChild(panel); + + var createSection = InspectorShared.createSection; + var createCheckbox = InspectorShared.createCheckbox; + + // General + var generalSection = createSection( + panel, + "General", + "generalVisible", + "toggleGeneral" + ); + + var debugShowFrustums = createCheckbox("Show Frustums", "frustums"); + var frustumStatistics = document.createElement("div"); + frustumStatistics.className = "cesium-cesiumInspector-frustumStatistics"; + frustumStatistics.setAttribute( + "data-bind", + "visible: frustums, html: frustumStatisticText" + ); + debugShowFrustums.appendChild(frustumStatistics); + generalSection.appendChild(debugShowFrustums); + + generalSection.appendChild( + createCheckbox("Show Frustum Planes", "frustumPlanes") + ); + generalSection.appendChild( + createCheckbox("Performance Display", "performance") + ); + + performanceContainer.className = "cesium-cesiumInspector-performanceDisplay"; + generalSection.appendChild(performanceContainer); + + var shaderCacheDisplay = document.createElement("div"); + shaderCacheDisplay.className = "cesium-cesiumInspector-shaderCache"; + shaderCacheDisplay.setAttribute("data-bind", "html: shaderCacheText"); + generalSection.appendChild(shaderCacheDisplay); + + // https://github.com/CesiumGS/cesium/issues/6763 + // var globeDepth = createCheckbox('Show globe depth', 'globeDepth'); + // generalSection.appendChild(globeDepth); + // + // var globeDepthFrustum = document.createElement('div'); + // globeDepth.appendChild(globeDepthFrustum); + // + // generalSection.appendChild(createCheckbox('Show pick depth', 'pickDepth')); + + var depthFrustum = document.createElement("div"); + generalSection.appendChild(depthFrustum); + + // Use a span with HTML binding so that we can indent with non-breaking spaces. + var gLabel = document.createElement("span"); + gLabel.setAttribute( + "data-bind", + 'html: "     Frustum:"' + ); + depthFrustum.appendChild(gLabel); + + var gText = document.createElement("span"); + gText.setAttribute("data-bind", "text: depthFrustumText"); + depthFrustum.appendChild(gText); + + var gMinusButton = document.createElement("input"); + gMinusButton.type = "button"; + gMinusButton.value = "-"; + gMinusButton.className = "cesium-cesiumInspector-pickButton"; + gMinusButton.setAttribute("data-bind", "click: decrementDepthFrustum"); + depthFrustum.appendChild(gMinusButton); + + var gPlusButton = document.createElement("input"); + gPlusButton.type = "button"; + gPlusButton.value = "+"; + gPlusButton.className = "cesium-cesiumInspector-pickButton"; + gPlusButton.setAttribute("data-bind", "click: incrementDepthFrustum"); + depthFrustum.appendChild(gPlusButton); + + // Primitives + var primSection = createSection( + panel, + "Primitives", + "primitivesVisible", + "togglePrimitives" + ); + var pickPrimRequired = document.createElement("div"); + pickPrimRequired.className = "cesium-cesiumInspector-pickSection"; + primSection.appendChild(pickPrimRequired); + + var pickPrimitiveButton = document.createElement("input"); + pickPrimitiveButton.type = "button"; + pickPrimitiveButton.value = "Pick a primitive"; + pickPrimitiveButton.className = "cesium-cesiumInspector-pickButton"; + pickPrimitiveButton.setAttribute( + "data-bind", + 'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive' + ); + var buttonWrap = document.createElement("div"); + buttonWrap.className = "cesium-cesiumInspector-center"; + buttonWrap.appendChild(pickPrimitiveButton); + pickPrimRequired.appendChild(buttonWrap); + + pickPrimRequired.appendChild( + createCheckbox( + "Show bounding sphere", + "primitiveBoundingSphere", + "hasPickedPrimitive" + ) + ); + pickPrimRequired.appendChild( + createCheckbox( + "Show reference frame", + "primitiveReferenceFrame", + "hasPickedPrimitive" + ) + ); + + this._primitiveOnly = createCheckbox( + "Show only selected", + "filterPrimitive", + "hasPickedPrimitive" + ); + pickPrimRequired.appendChild(this._primitiveOnly); + + // Terrain + var terrainSection = createSection( + panel, + "Terrain", + "terrainVisible", + "toggleTerrain" + ); + var pickTileRequired = document.createElement("div"); + pickTileRequired.className = "cesium-cesiumInspector-pickSection"; + terrainSection.appendChild(pickTileRequired); + var pickTileButton = document.createElement("input"); + pickTileButton.type = "button"; + pickTileButton.value = "Pick a tile"; + pickTileButton.className = "cesium-cesiumInspector-pickButton"; + pickTileButton.setAttribute( + "data-bind", + 'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile' + ); + buttonWrap = document.createElement("div"); + buttonWrap.appendChild(pickTileButton); + buttonWrap.className = "cesium-cesiumInspector-center"; + pickTileRequired.appendChild(buttonWrap); + var tileInfo = document.createElement("div"); + pickTileRequired.appendChild(tileInfo); + var parentTile = document.createElement("input"); + parentTile.type = "button"; + parentTile.value = "Parent"; + parentTile.className = "cesium-cesiumInspector-pickButton"; + parentTile.setAttribute("data-bind", "click: selectParent"); + var nwTile = document.createElement("input"); + nwTile.type = "button"; + nwTile.value = "NW"; + nwTile.className = "cesium-cesiumInspector-pickButton"; + nwTile.setAttribute("data-bind", "click: selectNW"); + var neTile = document.createElement("input"); + neTile.type = "button"; + neTile.value = "NE"; + neTile.className = "cesium-cesiumInspector-pickButton"; + neTile.setAttribute("data-bind", "click: selectNE"); + var swTile = document.createElement("input"); + swTile.type = "button"; + swTile.value = "SW"; + swTile.className = "cesium-cesiumInspector-pickButton"; + swTile.setAttribute("data-bind", "click: selectSW"); + var seTile = document.createElement("input"); + seTile.type = "button"; + seTile.value = "SE"; + seTile.className = "cesium-cesiumInspector-pickButton"; + seTile.setAttribute("data-bind", "click: selectSE"); + + var tileText = document.createElement("div"); + tileText.className = "cesium-cesiumInspector-tileText"; + tileInfo.className = "cesium-cesiumInspector-frustumStatistics"; + tileInfo.appendChild(tileText); + tileInfo.setAttribute("data-bind", "visible: hasPickedTile"); + tileText.setAttribute("data-bind", "html: tileText"); + + var relativeText = document.createElement("div"); + relativeText.className = "cesium-cesiumInspector-relativeText"; + relativeText.textContent = "Select relative:"; + tileInfo.appendChild(relativeText); + + var table = document.createElement("table"); + var tr1 = document.createElement("tr"); + var tr2 = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.appendChild(parentTile); + var td2 = document.createElement("td"); + td2.appendChild(nwTile); + var td3 = document.createElement("td"); + td3.appendChild(neTile); + tr1.appendChild(td1); + tr1.appendChild(td2); + tr1.appendChild(td3); + var td4 = document.createElement("td"); + var td5 = document.createElement("td"); + td5.appendChild(swTile); + var td6 = document.createElement("td"); + td6.appendChild(seTile); + tr2.appendChild(td4); + tr2.appendChild(td5); + tr2.appendChild(td6); + table.appendChild(tr1); + table.appendChild(tr2); + + tileInfo.appendChild(table); + + pickTileRequired.appendChild( + createCheckbox( + "Show bounding volume", + "tileBoundingSphere", + "hasPickedTile" + ) + ); + pickTileRequired.appendChild( + createCheckbox("Show only selected", "filterTile", "hasPickedTile") + ); + + terrainSection.appendChild(createCheckbox("Wireframe", "wireframe")); + terrainSection.appendChild( + createCheckbox("Suspend LOD update", "suspendUpdates") + ); + terrainSection.appendChild( + createCheckbox("Show tile coordinates", "tileCoordinates") + ); + + knockout.applyBindings(viewModel, this._element); +} + +Object.defineProperties(CesiumInspector.prototype, { + /** + * Gets the parent container. + * @memberof CesiumInspector.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof CesiumInspector.prototype + * + * @type {CesiumInspectorViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +CesiumInspector.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +CesiumInspector.prototype.destroy = function () { + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + this.viewModel.destroy(); + + return destroyObject(this); +}; +export default CesiumInspector; diff --git a/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspectorViewModel.js b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspectorViewModel.js new file mode 100644 index 000000000..178109857 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumInspector/CesiumInspectorViewModel.js @@ -0,0 +1,1024 @@ +import Cartesian3 from "../../Core/Cartesian3.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Ray from "../../Core/Ray.js"; +import Rectangle from "../../Core/Rectangle.js"; +import ScreenSpaceEventHandler from "../../Core/ScreenSpaceEventHandler.js"; +import ScreenSpaceEventType from "../../Core/ScreenSpaceEventType.js"; +import DebugModelMatrixPrimitive from "../../Scene/DebugModelMatrixPrimitive.js"; +import PerformanceDisplay from "../../Scene/PerformanceDisplay.js"; +import TileCoordinatesImageryProvider from "../../Scene/TileCoordinatesImageryProvider.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +function frustumStatisticsToString(statistics) { + var str; + if (defined(statistics)) { + str = "Command Statistics"; + var com = statistics.commandsInFrustums; + for (var n in com) { + if (com.hasOwnProperty(n)) { + var num = parseInt(n, 10); + var s; + if (num === 7) { + s = "1, 2 and 3"; + } else { + var f = []; + for (var i = 2; i >= 0; i--) { + var p = Math.pow(2, i); + if (num >= p) { + f.push(i + 1); + num -= p; + } + } + s = f.reverse().join(" and "); + } + str += "
    " + com[n] + " in frustum " + s; + } + } + str += "
Total: " + statistics.totalCommands; + } + + return str; +} + +function boundDepthFrustum(lower, upper, proposed) { + var bounded = Math.min(proposed, upper); + bounded = Math.max(bounded, lower); + return bounded; +} + +var scratchPickRay = new Ray(); +var scratchPickCartesian = new Cartesian3(); + +/** + * The view model for {@link CesiumInspector}. + * @alias CesiumInspectorViewModel + * @constructor + * + * @param {Scene} scene The scene instance to use. + * @param {Element} performanceContainer The instance to use for performance container. + */ +function CesiumInspectorViewModel(scene, performanceContainer) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required"); + } + + if (!defined(performanceContainer)) { + throw new DeveloperError("performanceContainer is required"); + } + //>>includeEnd('debug'); + + var that = this; + var canvas = scene.canvas; + var eventHandler = new ScreenSpaceEventHandler(canvas); + this._eventHandler = eventHandler; + this._scene = scene; + this._canvas = canvas; + this._primitive = undefined; + this._tile = undefined; + this._modelMatrixPrimitive = undefined; + this._performanceDisplay = undefined; + this._performanceContainer = performanceContainer; + + var globe = this._scene.globe; + globe.depthTestAgainstTerrain = true; + + /** + * Gets or sets the show frustums state. This property is observable. + * @type {Boolean} + * @default false + */ + this.frustums = false; + + /** + * Gets or sets the show frustum planes state. This property is observable. + * @type {Boolean} + * @default false + */ + this.frustumPlanes = false; + + /** + * Gets or sets the show performance display state. This property is observable. + * @type {Boolean} + * @default false + */ + this.performance = false; + + /** + * Gets or sets the shader cache text. This property is observable. + * @type {String} + * @default '' + */ + this.shaderCacheText = ""; + + /** + * Gets or sets the show primitive bounding sphere state. This property is observable. + * @type {Boolean} + * @default false + */ + this.primitiveBoundingSphere = false; + + /** + * Gets or sets the show primitive reference frame state. This property is observable. + * @type {Boolean} + * @default false + */ + this.primitiveReferenceFrame = false; + + /** + * Gets or sets the filter primitive state. This property is observable. + * @type {Boolean} + * @default false + */ + this.filterPrimitive = false; + + /** + * Gets or sets the show tile bounding sphere state. This property is observable. + * @type {Boolean} + * @default false + */ + this.tileBoundingSphere = false; + + /** + * Gets or sets the filter tile state. This property is observable. + * @type {Boolean} + * @default false + */ + this.filterTile = false; + + /** + * Gets or sets the show wireframe state. This property is observable. + * @type {Boolean} + * @default false + */ + this.wireframe = false; + + /** + * Gets or sets the show globe depth state. This property is observable. + * @type {Boolean} + * @default false + */ + this.globeDepth = false; + + /** + * Gets or sets the show pick depth state. This property is observable. + * @type {Boolean} + * @default false + */ + this.pickDepth = false; + + /** + * Gets or sets the index of the depth frustum to display. This property is observable. + * @type {Number} + * @default 1 + */ + this.depthFrustum = 1; + this._numberOfFrustums = 1; + + /** + * Gets or sets the suspend updates state. This property is observable. + * @type {Boolean} + * @default false + */ + this.suspendUpdates = false; + + /** + * Gets or sets the show tile coordinates state. This property is observable. + * @type {Boolean} + * @default false + */ + this.tileCoordinates = false; + + /** + * Gets or sets the frustum statistic text. This property is observable. + * @type {String} + * @default '' + */ + this.frustumStatisticText = false; + + /** + * Gets or sets the selected tile information text. This property is observable. + * @type {String} + * @default '' + */ + this.tileText = ""; + + /** + * Gets if a primitive has been selected. This property is observable. + * @type {Boolean} + * @default false + */ + this.hasPickedPrimitive = false; + + /** + * Gets if a tile has been selected. This property is observable + * @type {Boolean} + * @default false + */ + this.hasPickedTile = false; + + /** + * Gets if the picking primitive command is active. This property is observable. + * @type {Boolean} + * @default false + */ + this.pickPrimitiveActive = false; + + /** + * Gets if the picking tile command is active. This property is observable. + * @type {Boolean} + * @default false + */ + this.pickTileActive = false; + + /** + * Gets or sets if the cesium inspector drop down is visible. This property is observable. + * @type {Boolean} + * @default true + */ + this.dropDownVisible = true; + + /** + * Gets or sets if the general section is visible. This property is observable. + * @type {Boolean} + * @default true + */ + this.generalVisible = true; + + /** + * Gets or sets if the primitive section is visible. This property is observable. + * @type {Boolean} + * @default false + */ + this.primitivesVisible = false; + + /** + * Gets or sets if the terrain section is visible. This property is observable. + * @type {Boolean} + * @default false + */ + this.terrainVisible = false; + + /** + * Gets or sets the index of the depth frustum text. This property is observable. + * @type {String} + * @default '' + */ + this.depthFrustumText = ""; + + knockout.track(this, [ + "frustums", + "frustumPlanes", + "performance", + "shaderCacheText", + "primitiveBoundingSphere", + "primitiveReferenceFrame", + "filterPrimitive", + "tileBoundingSphere", + "filterTile", + "wireframe", + "globeDepth", + "pickDepth", + "depthFrustum", + "suspendUpdates", + "tileCoordinates", + "frustumStatisticText", + "tileText", + "hasPickedPrimitive", + "hasPickedTile", + "pickPrimitiveActive", + "pickTileActive", + "dropDownVisible", + "generalVisible", + "primitivesVisible", + "terrainVisible", + "depthFrustumText", + ]); + + this._toggleDropDown = createCommand(function () { + that.dropDownVisible = !that.dropDownVisible; + }); + + this._toggleGeneral = createCommand(function () { + that.generalVisible = !that.generalVisible; + }); + + this._togglePrimitives = createCommand(function () { + that.primitivesVisible = !that.primitivesVisible; + }); + + this._toggleTerrain = createCommand(function () { + that.terrainVisible = !that.terrainVisible; + }); + + this._frustumsSubscription = knockout + .getObservable(this, "frustums") + .subscribe(function (val) { + that._scene.debugShowFrustums = val; + that._scene.requestRender(); + }); + + this._frustumPlanesSubscription = knockout + .getObservable(this, "frustumPlanes") + .subscribe(function (val) { + that._scene.debugShowFrustumPlanes = val; + that._scene.requestRender(); + }); + + this._performanceSubscription = knockout + .getObservable(this, "performance") + .subscribe(function (val) { + if (val) { + that._performanceDisplay = new PerformanceDisplay({ + container: that._performanceContainer, + }); + } else { + that._performanceContainer.innerHTML = ""; + } + }); + + this._showPrimitiveBoundingSphere = createCommand(function () { + that._primitive.debugShowBoundingVolume = that.primitiveBoundingSphere; + that._scene.requestRender(); + return true; + }); + + this._primitiveBoundingSphereSubscription = knockout + .getObservable(this, "primitiveBoundingSphere") + .subscribe(function () { + that._showPrimitiveBoundingSphere(); + }); + + this._showPrimitiveReferenceFrame = createCommand(function () { + if (that.primitiveReferenceFrame) { + var modelMatrix = that._primitive.modelMatrix; + that._modelMatrixPrimitive = new DebugModelMatrixPrimitive({ + modelMatrix: modelMatrix, + }); + that._scene.primitives.add(that._modelMatrixPrimitive); + } else if (defined(that._modelMatrixPrimitive)) { + that._scene.primitives.remove(that._modelMatrixPrimitive); + that._modelMatrixPrimitive = undefined; + } + that._scene.requestRender(); + return true; + }); + + this._primitiveReferenceFrameSubscription = knockout + .getObservable(this, "primitiveReferenceFrame") + .subscribe(function () { + that._showPrimitiveReferenceFrame(); + }); + + this._doFilterPrimitive = createCommand(function () { + if (that.filterPrimitive) { + that._scene.debugCommandFilter = function (command) { + if ( + defined(that._modelMatrixPrimitive) && + command.owner === that._modelMatrixPrimitive._primitive + ) { + return true; + } else if (defined(that._primitive)) { + return ( + command.owner === that._primitive || + command.owner === that._primitive._billboardCollection || + command.owner.primitive === that._primitive + ); + } + return false; + }; + } else { + that._scene.debugCommandFilter = undefined; + } + return true; + }); + + this._filterPrimitiveSubscription = knockout + .getObservable(this, "filterPrimitive") + .subscribe(function () { + that._doFilterPrimitive(); + that._scene.requestRender(); + }); + + this._wireframeSubscription = knockout + .getObservable(this, "wireframe") + .subscribe(function (val) { + globe._surface.tileProvider._debug.wireframe = val; + that._scene.requestRender(); + }); + + this._globeDepthSubscription = knockout + .getObservable(this, "globeDepth") + .subscribe(function (val) { + that._scene.debugShowGlobeDepth = val; + that._scene.requestRender(); + }); + + this._pickDepthSubscription = knockout + .getObservable(this, "pickDepth") + .subscribe(function (val) { + that._scene.debugShowPickDepth = val; + that._scene.requestRender(); + }); + + this._depthFrustumSubscription = knockout + .getObservable(this, "depthFrustum") + .subscribe(function (val) { + that._scene.debugShowDepthFrustum = val; + that._scene.requestRender(); + }); + + this._incrementDepthFrustum = createCommand(function () { + var next = that.depthFrustum + 1; + that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next); + that._scene.requestRender(); + return true; + }); + + this._decrementDepthFrustum = createCommand(function () { + var next = that.depthFrustum - 1; + that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next); + that._scene.requestRender(); + return true; + }); + + this._suspendUpdatesSubscription = knockout + .getObservable(this, "suspendUpdates") + .subscribe(function (val) { + globe._surface._debug.suspendLodUpdate = val; + if (!val) { + that.filterTile = false; + } + }); + + var tileBoundariesLayer; + this._showTileCoordinates = createCommand(function () { + if (that.tileCoordinates && !defined(tileBoundariesLayer)) { + tileBoundariesLayer = scene.imageryLayers.addImageryProvider( + new TileCoordinatesImageryProvider({ + tilingScheme: scene.terrainProvider.tilingScheme, + }) + ); + } else if (!that.tileCoordinates && defined(tileBoundariesLayer)) { + scene.imageryLayers.remove(tileBoundariesLayer); + tileBoundariesLayer = undefined; + } + return true; + }); + + this._tileCoordinatesSubscription = knockout + .getObservable(this, "tileCoordinates") + .subscribe(function () { + that._showTileCoordinates(); + that._scene.requestRender(); + }); + + this._tileBoundingSphereSubscription = knockout + .getObservable(this, "tileBoundingSphere") + .subscribe(function () { + that._showTileBoundingSphere(); + that._scene.requestRender(); + }); + + this._showTileBoundingSphere = createCommand(function () { + if (that.tileBoundingSphere) { + globe._surface.tileProvider._debug.boundingSphereTile = that._tile; + } else { + globe._surface.tileProvider._debug.boundingSphereTile = undefined; + } + that._scene.requestRender(); + return true; + }); + + this._doFilterTile = createCommand(function () { + if (!that.filterTile) { + that.suspendUpdates = false; + } else { + that.suspendUpdates = true; + + globe._surface._tilesToRender = []; + + if (defined(that._tile) && that._tile.renderable) { + globe._surface._tilesToRender.push(that._tile); + } + } + return true; + }); + + this._filterTileSubscription = knockout + .getObservable(this, "filterTile") + .subscribe(function () { + that.doFilterTile(); + that._scene.requestRender(); + }); + + function pickPrimitive(e) { + var newPick = that._scene.pick({ + x: e.position.x, + y: e.position.y, + }); + if (defined(newPick)) { + that.primitive = defined(newPick.collection) + ? newPick.collection + : newPick.primitive; + } + + that._scene.requestRender(); + that.pickPrimitiveActive = false; + } + + this._pickPrimitive = createCommand(function () { + that.pickPrimitiveActive = !that.pickPrimitiveActive; + }); + + this._pickPrimitiveActiveSubscription = knockout + .getObservable(this, "pickPrimitiveActive") + .subscribe(function (val) { + if (val) { + eventHandler.setInputAction( + pickPrimitive, + ScreenSpaceEventType.LEFT_CLICK + ); + } else { + eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK); + } + }); + + function selectTile(e) { + var selectedTile; + var ellipsoid = globe.ellipsoid; + + var ray = that._scene.camera.getPickRay(e.position, scratchPickRay); + var cartesian = globe.pick(ray, that._scene, scratchPickCartesian); + + if (defined(cartesian)) { + var cartographic = ellipsoid.cartesianToCartographic(cartesian); + var tilesRendered = + globe._surface.tileProvider._tilesToRenderByTextureCount; + for ( + var textureCount = 0; + !selectedTile && textureCount < tilesRendered.length; + ++textureCount + ) { + var tilesRenderedByTextureCount = tilesRendered[textureCount]; + if (!defined(tilesRenderedByTextureCount)) { + continue; + } + + for ( + var tileIndex = 0; + !selectedTile && tileIndex < tilesRenderedByTextureCount.length; + ++tileIndex + ) { + var tile = tilesRenderedByTextureCount[tileIndex]; + if (Rectangle.contains(tile.rectangle, cartographic)) { + selectedTile = tile; + } + } + } + } + + that.tile = selectedTile; + + that.pickTileActive = false; + } + + this._pickTile = createCommand(function () { + that.pickTileActive = !that.pickTileActive; + }); + + this._pickTileActiveSubscription = knockout + .getObservable(this, "pickTileActive") + .subscribe(function (val) { + if (val) { + eventHandler.setInputAction( + selectTile, + ScreenSpaceEventType.LEFT_CLICK + ); + } else { + eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK); + } + }); + + this._removePostRenderEvent = scene.postRender.addEventListener(function () { + that._update(); + }); +} + +Object.defineProperties(CesiumInspectorViewModel.prototype, { + /** + * Gets the scene to control. + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets the container of the PerformanceDisplay + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Element} + */ + performanceContainer: { + get: function () { + return this._performanceContainer; + }, + }, + + /** + * Gets the command to toggle the visibility of the drop down. + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + toggleDropDown: { + get: function () { + return this._toggleDropDown; + }, + }, + + /** + * Gets the command to toggle the visibility of a BoundingSphere for a primitive + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + showPrimitiveBoundingSphere: { + get: function () { + return this._showPrimitiveBoundingSphere; + }, + }, + + /** + * Gets the command to toggle the visibility of a {@link DebugModelMatrixPrimitive} for the model matrix of a primitive + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + showPrimitiveReferenceFrame: { + get: function () { + return this._showPrimitiveReferenceFrame; + }, + }, + + /** + * Gets the command to toggle a filter that renders only a selected primitive + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + doFilterPrimitive: { + get: function () { + return this._doFilterPrimitive; + }, + }, + + /** + * Gets the command to increment the depth frustum index to be shown + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + incrementDepthFrustum: { + get: function () { + return this._incrementDepthFrustum; + }, + }, + + /** + * Gets the command to decrement the depth frustum index to be shown + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + decrementDepthFrustum: { + get: function () { + return this._decrementDepthFrustum; + }, + }, + + /** + * Gets the command to toggle the visibility of tile coordinates + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + showTileCoordinates: { + get: function () { + return this._showTileCoordinates; + }, + }, + + /** + * Gets the command to toggle the visibility of a BoundingSphere for a selected tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + showTileBoundingSphere: { + get: function () { + return this._showTileBoundingSphere; + }, + }, + + /** + * Gets the command to toggle a filter that renders only a selected tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + doFilterTile: { + get: function () { + return this._doFilterTile; + }, + }, + + /** + * Gets the command to expand and collapse the general section + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + toggleGeneral: { + get: function () { + return this._toggleGeneral; + }, + }, + + /** + * Gets the command to expand and collapse the primitives section + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + togglePrimitives: { + get: function () { + return this._togglePrimitives; + }, + }, + + /** + * Gets the command to expand and collapse the terrain section + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + toggleTerrain: { + get: function () { + return this._toggleTerrain; + }, + }, + + /** + * Gets the command to pick a primitive + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + pickPrimitive: { + get: function () { + return this._pickPrimitive; + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + pickTile: { + get: function () { + return this._pickTile; + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + selectParent: { + get: function () { + var that = this; + return createCommand(function () { + that.tile = that.tile.parent; + }); + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + selectNW: { + get: function () { + var that = this; + return createCommand(function () { + that.tile = that.tile.northwestChild; + }); + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + selectNE: { + get: function () { + var that = this; + return createCommand(function () { + that.tile = that.tile.northeastChild; + }); + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + selectSW: { + get: function () { + var that = this; + return createCommand(function () { + that.tile = that.tile.southwestChild; + }); + }, + }, + + /** + * Gets the command to pick a tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + selectSE: { + get: function () { + var that = this; + return createCommand(function () { + that.tile = that.tile.southeastChild; + }); + }, + }, + + /** + * Gets or sets the current selected primitive + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + primitive: { + get: function () { + return this._primitive; + }, + set: function (newPrimitive) { + var oldPrimitive = this._primitive; + if (newPrimitive !== oldPrimitive) { + this.hasPickedPrimitive = true; + if (defined(oldPrimitive)) { + oldPrimitive.debugShowBoundingVolume = false; + } + this._scene.debugCommandFilter = undefined; + if (defined(this._modelMatrixPrimitive)) { + this._scene.primitives.remove(this._modelMatrixPrimitive); + this._modelMatrixPrimitive = undefined; + } + this._primitive = newPrimitive; + newPrimitive.show = false; + setTimeout(function () { + newPrimitive.show = true; + }, 50); + this.showPrimitiveBoundingSphere(); + this.showPrimitiveReferenceFrame(); + this.doFilterPrimitive(); + } + }, + }, + + /** + * Gets or sets the current selected tile + * @memberof CesiumInspectorViewModel.prototype + * + * @type {Command} + */ + tile: { + get: function () { + return this._tile; + }, + set: function (newTile) { + if (defined(newTile)) { + this.hasPickedTile = true; + var oldTile = this._tile; + if (newTile !== oldTile) { + this.tileText = + "L: " + newTile.level + " X: " + newTile.x + " Y: " + newTile.y; + this.tileText += + "
SW corner: " + + newTile.rectangle.west + + ", " + + newTile.rectangle.south; + this.tileText += + "
NE corner: " + + newTile.rectangle.east + + ", " + + newTile.rectangle.north; + var data = newTile.data; + if (defined(data) && defined(data.tileBoundingRegion)) { + this.tileText += + "
Min: " + + data.tileBoundingRegion.minimumHeight + + " Max: " + + data.tileBoundingRegion.maximumHeight; + } else { + this.tileText += "
(Tile is not loaded)"; + } + } + this._tile = newTile; + this.showTileBoundingSphere(); + this.doFilterTile(); + } else { + this.hasPickedTile = false; + this._tile = undefined; + } + }, + }, +}); + +/** + * Updates the view model + * @private + */ +CesiumInspectorViewModel.prototype._update = function () { + if (this.frustums) { + this.frustumStatisticText = frustumStatisticsToString( + this._scene.debugFrustumStatistics + ); + } + + // Determine the number of frustums being used. + var numberOfFrustums = this._scene.numberOfFrustums; + this._numberOfFrustums = numberOfFrustums; + // Bound the frustum to be displayed. + this.depthFrustum = boundDepthFrustum(1, numberOfFrustums, this.depthFrustum); + // Update the displayed text. + this.depthFrustumText = this.depthFrustum + " of " + numberOfFrustums; + + if (this.performance) { + this._performanceDisplay.update(); + } + if (this.primitiveReferenceFrame) { + this._modelMatrixPrimitive.modelMatrix = this._primitive.modelMatrix; + } + + this.shaderCacheText = + "Cached shaders: " + this._scene.context.shaderCache.numberOfShaders; +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +CesiumInspectorViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +CesiumInspectorViewModel.prototype.destroy = function () { + this._eventHandler.destroy(); + this._removePostRenderEvent(); + this._frustumsSubscription.dispose(); + this._frustumPlanesSubscription.dispose(); + this._performanceSubscription.dispose(); + this._primitiveBoundingSphereSubscription.dispose(); + this._primitiveReferenceFrameSubscription.dispose(); + this._filterPrimitiveSubscription.dispose(); + this._wireframeSubscription.dispose(); + this._globeDepthSubscription.dispose(); + this._pickDepthSubscription.dispose(); + this._depthFrustumSubscription.dispose(); + this._suspendUpdatesSubscription.dispose(); + this._tileCoordinatesSubscription.dispose(); + this._tileBoundingSphereSubscription.dispose(); + this._filterTileSubscription.dispose(); + this._pickPrimitiveActiveSubscription.dispose(); + this._pickTileActiveSubscription.dispose(); + return destroyObject(this); +}; +export default CesiumInspectorViewModel; diff --git a/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.css b/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.css new file mode 100644 index 000000000..44a92b78a --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.css @@ -0,0 +1,116 @@ +.cesium-widget { + position: relative; +} + +.cesium-widget, +.cesium-widget canvas { + width: 100%; + height: 100%; + touch-action: none; +} + +.cesium-widget-credits { + display: block; + position: absolute; + bottom: 0; + left: 0; + color: #fff; + font-size: 10px; + text-shadow: 0px 0px 2px #000000; + padding-right: 5px; +} + +.cesium-widget-credits a, +.cesium-widget-credits a:visited { + color: #fff; +} + +.cesium-widget-errorPanel { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + text-align: center; + background: rgba(0, 0, 0, 0.7); + z-index: 99999; +} + +.cesium-widget-errorPanel:before { + display: inline-block; + vertical-align: middle; + height: 100%; + content: ""; +} + +.cesium-widget-errorPanel-content { + width: 75%; + max-width: 500px; + display: inline-block; + text-align: left; + vertical-align: middle; + border: 1px solid #510c00; + border-radius: 7px; + background-color: #f0d9d5; + font-size: 14px; + color: #510c00; +} + +.cesium-widget-errorPanel-content.expanded { + max-width: 75%; +} + +.cesium-widget-errorPanel-header { + font-size: 18px; + font-family: "Open Sans", Verdana, Geneva, sans-serif; + background: #d69d93; + border-bottom: 2px solid #510c00; + padding-bottom: 10px; + border-radius: 3px 3px 0 0; + padding: 15px; +} + +.cesium-widget-errorPanel-scroll { + overflow: auto; + font-family: "Open Sans", Verdana, Geneva, sans-serif; + white-space: pre-wrap; + padding: 0 15px; + margin: 10px 0 20px 0; +} + +.cesium-widget-errorPanel-buttonPanel { + padding: 0 15px; + margin: 10px 0 20px 0; + text-align: right; +} + +.cesium-widget-errorPanel-buttonPanel button { + border-color: #510c00; + background: #d69d93; + color: #202020; + margin: 0; +} +.cesium-widget-errorPanel-buttonPanel button:focus { + border-color: #510c00; + background: #f0d9d5; + color: #510c00; +} +.cesium-widget-errorPanel-buttonPanel button:hover { + border-color: #510c00; + background: #f0d9d5; + color: #510c00; +} +.cesium-widget-errorPanel-buttonPanel button:active { + border-color: #510c00; + background: #b17b72; + color: #510c00; +} + +.cesium-widget-errorPanel-more-details { + text-decoration: underline; + cursor: pointer; +} + +.cesium-widget-errorPanel-more-details:hover { + color: #2b0700; +} diff --git a/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.js b/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.js new file mode 100644 index 000000000..e0237d06e --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumWidget/CesiumWidget.js @@ -0,0 +1,794 @@ +import buildModuleUrl from "../../Core/buildModuleUrl.js"; +import Cartesian3 from "../../Core/Cartesian3.js"; +import Clock from "../../Core/Clock.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Ellipsoid from "../../Core/Ellipsoid.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import formatError from "../../Core/formatError.js"; +import requestAnimationFrame from "../../Core/requestAnimationFrame.js"; +import ScreenSpaceEventHandler from "../../Core/ScreenSpaceEventHandler.js"; +import createWorldImagery from "../../Scene/createWorldImagery.js"; +import Globe from "../../Scene/Globe.js"; +import Moon from "../../Scene/Moon.js"; +import Scene from "../../Scene/Scene.js"; +import SceneMode from "../../Scene/SceneMode.js"; +import ShadowMode from "../../Scene/ShadowMode.js"; +import SkyAtmosphere from "../../Scene/SkyAtmosphere.js"; +import SkyBox from "../../Scene/SkyBox.js"; +import Sun from "../../Scene/Sun.js"; +import getElement from "../getElement.js"; + +function getDefaultSkyBoxUrl(suffix) { + return buildModuleUrl( + "Assets/Textures/SkyBox/tycho2t3_80_" + suffix + ".jpg" + ); +} + +function startRenderLoop(widget) { + widget._renderLoopRunning = true; + + var lastFrameTime = 0; + function render(frameTime) { + if (widget.isDestroyed()) { + return; + } + + if (widget._useDefaultRenderLoop) { + try { + var targetFrameRate = widget._targetFrameRate; + if (!defined(targetFrameRate)) { + widget.resize(); + widget.render(); + requestAnimationFrame(render); + } else { + var interval = 1000.0 / targetFrameRate; + var delta = frameTime - lastFrameTime; + + if (delta > interval) { + widget.resize(); + widget.render(); + lastFrameTime = frameTime - (delta % interval); + } + requestAnimationFrame(render); + } + } catch (error) { + widget._useDefaultRenderLoop = false; + widget._renderLoopRunning = false; + if (widget._showRenderLoopErrors) { + var title = + "An error occurred while rendering. Rendering has stopped."; + widget.showErrorPanel(title, undefined, error); + } + } + } else { + widget._renderLoopRunning = false; + } + } + + requestAnimationFrame(render); +} + +function configurePixelRatio(widget) { + var pixelRatio = widget._useBrowserRecommendedResolution + ? 1.0 + : window.devicePixelRatio; + pixelRatio *= widget._resolutionScale; + if (defined(widget._scene)) { + widget._scene.pixelRatio = pixelRatio; + } + + return pixelRatio; +} + +function configureCanvasSize(widget) { + var canvas = widget._canvas; + var width = canvas.clientWidth; + var height = canvas.clientHeight; + var pixelRatio = configurePixelRatio(widget); + + widget._canvasClientWidth = width; + widget._canvasClientHeight = height; + + width *= pixelRatio; + height *= pixelRatio; + + canvas.width = width; + canvas.height = height; + + widget._canRender = width !== 0 && height !== 0; + widget._lastDevicePixelRatio = window.devicePixelRatio; +} + +function configureCameraFrustum(widget) { + var canvas = widget._canvas; + var width = canvas.width; + var height = canvas.height; + if (width !== 0 && height !== 0) { + var frustum = widget._scene.camera.frustum; + if (defined(frustum.aspectRatio)) { + frustum.aspectRatio = width / height; + } else { + frustum.top = frustum.right * (height / width); + frustum.bottom = -frustum.top; + } + } +} + +/** + * A widget containing a Cesium scene. + * + * @alias CesiumWidget + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Object} [options] Object with the following properties: + * @param {Clock} [options.clock=new Clock()] The clock to use to control current time. + * @param {ImageryProvider | false} [options.imageryProvider=createWorldImagery()] The imagery provider to serve as the base layer. If set to false, no imagery provider will be added. + * @param {TerrainProvider} [options.terrainProvider=new EllipsoidTerrainProvider] The terrain provider. + * @param {SkyBox| false} [options.skyBox] The skybox used to render the stars. When undefined, the default stars are used. If set to false, no skyBox, Sun, or Moon will be added. + * @param {SkyAtmosphere | false} [options.skyAtmosphere] Blue sky, and the glow around the Earth's limb. Set to false to turn it off. + * @param {SceneMode} [options.sceneMode=SceneMode.SCENE3D] The initial scene mode. + * @param {Boolean} [options.scene3DOnly=false] When true, each geometry instance will only be rendered in 3D to save GPU memory. + * @param {Boolean} [options.orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency. + * @param {MapProjection} [options.mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes. + * @param {Globe | false} [options.globe=new Globe(mapProjection.ellipsoid)] The globe to use in the scene. If set to false, no globe will be added. + * @param {Boolean} [options.useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise. + * @param {Boolean} [options.useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore window.devicePixelRatio. + * @param {Number} [options.targetFrameRate] The target frame rate when using the default render loop. + * @param {Boolean} [options.showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs. + * @param {Object} [options.contextOptions] Context and WebGL creation properties corresponding to options passed to {@link Scene}. + * @param {Element|String} [options.creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added + * to the bottom of the widget itself. + * @param {Element|String} [options.creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself. + * @param {Number} [options.terrainExaggeration=1.0] A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid. + * @param {Boolean} [options.shadows=false] Determines if shadows are cast by light sources. + * @param {ShadowMode} [options.terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources. + * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + * @param {Boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * @param {Number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Widget.html|Cesium Sandcastle Cesium Widget Demo} + * + * @example + * // For each example, include a link to CesiumWidget.css stylesheet in HTML head, + * // and in the body, include:
+ * + * //Widget with no terrain and default Bing Maps imagery provider. + * var widget = new Cesium.CesiumWidget('cesiumContainer'); + * + * //Widget with ion imagery and Cesium World Terrain. + * var widget = new Cesium.CesiumWidget('cesiumContainer', { + * imageryProvider : Cesium.createWorldImagery(), + * terrainProvider : Cesium.createWorldTerrain(), + * skyBox : new Cesium.SkyBox({ + * sources : { + * positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg', + * negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg', + * positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg', + * negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg', + * positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg', + * negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg' + * } + * }), + * // Show Columbus View map with Web Mercator projection + * sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, + * mapProjection : new Cesium.WebMercatorProjection() + * }); + */ +function CesiumWidget(container, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + //Configure the widget DOM elements + var element = document.createElement("div"); + element.className = "cesium-widget"; + container.appendChild(element); + + var canvas = document.createElement("canvas"); + var supportsImageRenderingPixelated = FeatureDetection.supportsImageRenderingPixelated(); + this._supportsImageRenderingPixelated = supportsImageRenderingPixelated; + if (supportsImageRenderingPixelated) { + canvas.style.imageRendering = FeatureDetection.imageRenderingValue(); + } + + canvas.oncontextmenu = function () { + return false; + }; + canvas.onselectstart = function () { + return false; + }; + + // Interacting with a canvas does not automatically blur the previously focused element. + // This leads to unexpected interaction if the last element was an input field. + // For example, clicking the mouse wheel could lead to the value in the field changing + // unexpectedly. The solution is to blur whatever has focus as soon as canvas interaction begins. + function blurActiveElement() { + if (canvas !== canvas.ownerDocument.activeElement) { + canvas.ownerDocument.activeElement.blur(); + } + } + canvas.addEventListener("mousedown", blurActiveElement); + canvas.addEventListener("pointerdown", blurActiveElement); + + element.appendChild(canvas); + + var innerCreditContainer = document.createElement("div"); + innerCreditContainer.className = "cesium-widget-credits"; + + var creditContainer = defined(options.creditContainer) + ? getElement(options.creditContainer) + : element; + creditContainer.appendChild(innerCreditContainer); + + var creditViewport = defined(options.creditViewport) + ? getElement(options.creditViewport) + : element; + + var showRenderLoopErrors = defaultValue(options.showRenderLoopErrors, true); + + var useBrowserRecommendedResolution = defaultValue( + options.useBrowserRecommendedResolution, + true + ); + + this._element = element; + this._container = container; + this._canvas = canvas; + this._canvasClientWidth = 0; + this._canvasClientHeight = 0; + this._lastDevicePixelRatio = 0; + this._creditViewport = creditViewport; + this._creditContainer = creditContainer; + this._innerCreditContainer = innerCreditContainer; + this._canRender = false; + this._renderLoopRunning = false; + this._showRenderLoopErrors = showRenderLoopErrors; + this._resolutionScale = 1.0; + this._useBrowserRecommendedResolution = useBrowserRecommendedResolution; + this._forceResize = false; + this._clock = defined(options.clock) ? options.clock : new Clock(); + + configureCanvasSize(this); + + try { + var scene = new Scene({ + canvas: canvas, + contextOptions: options.contextOptions, + creditContainer: innerCreditContainer, + creditViewport: creditViewport, + mapProjection: options.mapProjection, + orderIndependentTranslucency: options.orderIndependentTranslucency, + scene3DOnly: defaultValue(options.scene3DOnly, false), + terrainExaggeration: options.terrainExaggeration, + shadows: options.shadows, + mapMode2D: options.mapMode2D, + requestRenderMode: options.requestRenderMode, + maximumRenderTimeChange: options.maximumRenderTimeChange, + }); + this._scene = scene; + + scene.camera.constrainedAxis = Cartesian3.UNIT_Z; + + configurePixelRatio(this); + configureCameraFrustum(this); + + var ellipsoid = defaultValue( + scene.mapProjection.ellipsoid, + Ellipsoid.WGS84 + ); + + var globe = options.globe; + if (!defined(globe)) { + globe = new Globe(ellipsoid); + } + if (globe !== false) { + scene.globe = globe; + scene.globe.shadows = defaultValue( + options.terrainShadows, + ShadowMode.RECEIVE_ONLY + ); + } + + var skyBox = options.skyBox; + if (!defined(skyBox)) { + skyBox = new SkyBox({ + sources: { + positiveX: getDefaultSkyBoxUrl("px"), + negativeX: getDefaultSkyBoxUrl("mx"), + positiveY: getDefaultSkyBoxUrl("py"), + negativeY: getDefaultSkyBoxUrl("my"), + positiveZ: getDefaultSkyBoxUrl("pz"), + negativeZ: getDefaultSkyBoxUrl("mz"), + }, + }); + } + if (skyBox !== false) { + scene.skyBox = skyBox; + scene.sun = new Sun(); + scene.moon = new Moon(); + } + + // Blue sky, and the glow around the Earth's limb. + var skyAtmosphere = options.skyAtmosphere; + if (!defined(skyAtmosphere)) { + skyAtmosphere = new SkyAtmosphere(ellipsoid); + } + if (skyAtmosphere !== false) { + scene.skyAtmosphere = skyAtmosphere; + } + + //Set the base imagery layer + var imageryProvider = + options.globe === false ? false : options.imageryProvider; + if (!defined(imageryProvider)) { + imageryProvider = createWorldImagery(); + } + + if (imageryProvider !== false) { + scene.imageryLayers.addImageryProvider(imageryProvider); + } + + //Set the terrain provider if one is provided. + if (defined(options.terrainProvider) && options.globe !== false) { + scene.terrainProvider = options.terrainProvider; + } + + this._screenSpaceEventHandler = new ScreenSpaceEventHandler(canvas); + + if (defined(options.sceneMode)) { + if (options.sceneMode === SceneMode.SCENE2D) { + this._scene.morphTo2D(0); + } + if (options.sceneMode === SceneMode.COLUMBUS_VIEW) { + this._scene.morphToColumbusView(0); + } + } + + this._useDefaultRenderLoop = undefined; + this.useDefaultRenderLoop = defaultValue( + options.useDefaultRenderLoop, + true + ); + + this._targetFrameRate = undefined; + this.targetFrameRate = options.targetFrameRate; + + var that = this; + this._onRenderError = function (scene, error) { + that._useDefaultRenderLoop = false; + that._renderLoopRunning = false; + if (that._showRenderLoopErrors) { + var title = + "An error occurred while rendering. Rendering has stopped."; + that.showErrorPanel(title, undefined, error); + } + }; + scene.renderError.addEventListener(this._onRenderError); + } catch (error) { + if (showRenderLoopErrors) { + var title = "Error constructing CesiumWidget."; + var message = + 'Visit http://get.webgl.org to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:'; + this.showErrorPanel(title, message, error); + } + throw error; + } +} + +Object.defineProperties(CesiumWidget.prototype, { + /** + * Gets the parent container. + * @memberof CesiumWidget.prototype + * + * @type {Element} + * @readonly + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the canvas. + * @memberof CesiumWidget.prototype + * + * @type {HTMLCanvasElement} + * @readonly + */ + canvas: { + get: function () { + return this._canvas; + }, + }, + + /** + * Gets the credit container. + * @memberof CesiumWidget.prototype + * + * @type {Element} + * @readonly + */ + creditContainer: { + get: function () { + return this._creditContainer; + }, + }, + + /** + * Gets the credit viewport + * @memberof CesiumWidget.prototype + * + * @type {Element} + * @readonly + */ + creditViewport: { + get: function () { + return this._creditViewport; + }, + }, + + /** + * Gets the scene. + * @memberof CesiumWidget.prototype + * + * @type {Scene} + * @readonly + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets the collection of image layers that will be rendered on the globe. + * @memberof CesiumWidget.prototype + * + * @type {ImageryLayerCollection} + * @readonly + */ + imageryLayers: { + get: function () { + return this._scene.imageryLayers; + }, + }, + + /** + * The terrain provider providing surface geometry for the globe. + * @memberof CesiumWidget.prototype + * + * @type {TerrainProvider} + */ + terrainProvider: { + get: function () { + return this._scene.terrainProvider; + }, + set: function (terrainProvider) { + this._scene.terrainProvider = terrainProvider; + }, + }, + + /** + * Gets the camera. + * @memberof CesiumWidget.prototype + * + * @type {Camera} + * @readonly + */ + camera: { + get: function () { + return this._scene.camera; + }, + }, + + /** + * Gets the clock. + * @memberof CesiumWidget.prototype + * + * @type {Clock} + * @readonly + */ + clock: { + get: function () { + return this._clock; + }, + }, + + /** + * Gets the screen space event handler. + * @memberof CesiumWidget.prototype + * + * @type {ScreenSpaceEventHandler} + * @readonly + */ + screenSpaceEventHandler: { + get: function () { + return this._screenSpaceEventHandler; + }, + }, + + /** + * Gets or sets the target frame rate of the widget when useDefaultRenderLoop + * is true. If undefined, the browser's {@link requestAnimationFrame} implementation + * determines the frame rate. If defined, this value must be greater than 0. A value higher + * than the underlying requestAnimationFrame implementation will have no effect. + * @memberof CesiumWidget.prototype + * + * @type {Number} + */ + targetFrameRate: { + get: function () { + return this._targetFrameRate; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (value <= 0) { + throw new DeveloperError( + "targetFrameRate must be greater than 0, or undefined." + ); + } + //>>includeEnd('debug'); + this._targetFrameRate = value; + }, + }, + + /** + * Gets or sets whether or not this widget should control the render loop. + * If set to true the widget will use {@link requestAnimationFrame} to + * perform rendering and resizing of the widget, as well as drive the + * simulation clock. If set to false, you must manually call the + * resize, render methods as part of a custom + * render loop. If an error occurs during rendering, {@link Scene}'s + * renderError event will be raised and this property + * will be set to false. It must be set back to true to continue rendering + * after the error. + * @memberof CesiumWidget.prototype + * + * @type {Boolean} + */ + useDefaultRenderLoop: { + get: function () { + return this._useDefaultRenderLoop; + }, + set: function (value) { + if (this._useDefaultRenderLoop !== value) { + this._useDefaultRenderLoop = value; + if (value && !this._renderLoopRunning) { + startRenderLoop(this); + } + } + }, + }, + + /** + * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve + * performance on less powerful devices while values greater than 1.0 will render at a higher + * resolution and then scale down, resulting in improved visual fidelity. + * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5 + * will cause the scene to be rendered at 320x240 and then scaled up while setting + * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down. + * @memberof CesiumWidget.prototype + * + * @type {Number} + * @default 1.0 + */ + resolutionScale: { + get: function () { + return this._resolutionScale; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (value <= 0) { + throw new DeveloperError("resolutionScale must be greater than 0."); + } + //>>includeEnd('debug'); + if (this._resolutionScale !== value) { + this._resolutionScale = value; + this._forceResize = true; + } + }, + }, + + /** + * Boolean flag indicating if the browser's recommended resolution is used. + * If true, the browser's device pixel ratio is ignored and 1.0 is used instead, + * effectively rendering based on CSS pixels instead of device pixels. This can improve + * performance on less powerful devices that have high pixel density. When false, rendering + * will be in device pixels. {@link CesiumWidget#resolutionScale} will still take effect whether + * this flag is true or false. + * @memberof CesiumWidget.prototype + * + * @type {Boolean} + * @default true + */ + useBrowserRecommendedResolution: { + get: function () { + return this._useBrowserRecommendedResolution; + }, + set: function (value) { + if (this._useBrowserRecommendedResolution !== value) { + this._useBrowserRecommendedResolution = value; + this._forceResize = true; + } + }, + }, +}); + +/** + * Show an error panel to the user containing a title and a longer error message, + * which can be dismissed using an OK button. This panel is displayed automatically + * when a render loop error occurs, if showRenderLoopErrors was not false when the + * widget was constructed. + * + * @param {String} title The title to be displayed on the error panel. This string is interpreted as text. + * @param {String} [message] A helpful, user-facing message to display prior to the detailed error information. This string is interpreted as HTML. + * @param {String} [error] The error to be displayed on the error panel. This string is formatted using {@link formatError} and then displayed as text. + */ +CesiumWidget.prototype.showErrorPanel = function (title, message, error) { + var element = this._element; + var overlay = document.createElement("div"); + overlay.className = "cesium-widget-errorPanel"; + + var content = document.createElement("div"); + content.className = "cesium-widget-errorPanel-content"; + overlay.appendChild(content); + + var errorHeader = document.createElement("div"); + errorHeader.className = "cesium-widget-errorPanel-header"; + errorHeader.appendChild(document.createTextNode(title)); + content.appendChild(errorHeader); + + var errorPanelScroller = document.createElement("div"); + errorPanelScroller.className = "cesium-widget-errorPanel-scroll"; + content.appendChild(errorPanelScroller); + function resizeCallback() { + errorPanelScroller.style.maxHeight = + Math.max(Math.round(element.clientHeight * 0.9 - 100), 30) + "px"; + } + resizeCallback(); + if (defined(window.addEventListener)) { + window.addEventListener("resize", resizeCallback, false); + } + + var hasMessage = defined(message); + var hasError = defined(error); + + if (hasMessage || hasError) { + var errorMessage = document.createElement("div"); + errorMessage.className = "cesium-widget-errorPanel-message"; + errorPanelScroller.appendChild(errorMessage); + + if (hasError) { + var errorDetails = formatError(error); + if (!hasMessage) { + if (typeof error === "string") { + error = new Error(error); + } + + message = formatError({ + name: error.name, + message: error.message, + }); + errorDetails = error.stack; + } + + //IE8 does not have a console object unless the dev tools are open. + if (typeof console !== "undefined") { + console.error(title + "\n" + message + "\n" + errorDetails); + } + + var errorMessageDetails = document.createElement("div"); + errorMessageDetails.className = + "cesium-widget-errorPanel-message-details collapsed"; + + var moreDetails = document.createElement("span"); + moreDetails.className = "cesium-widget-errorPanel-more-details"; + moreDetails.appendChild(document.createTextNode("See more...")); + errorMessageDetails.appendChild(moreDetails); + + errorMessageDetails.onclick = function (e) { + errorMessageDetails.removeChild(moreDetails); + errorMessageDetails.appendChild(document.createTextNode(errorDetails)); + errorMessageDetails.className = + "cesium-widget-errorPanel-message-details"; + content.className = "cesium-widget-errorPanel-content expanded"; + errorMessageDetails.onclick = undefined; + }; + + errorPanelScroller.appendChild(errorMessageDetails); + } + + errorMessage.innerHTML = "

" + message + "

"; + } + + var buttonPanel = document.createElement("div"); + buttonPanel.className = "cesium-widget-errorPanel-buttonPanel"; + content.appendChild(buttonPanel); + + var okButton = document.createElement("button"); + okButton.setAttribute("type", "button"); + okButton.className = "cesium-button"; + okButton.appendChild(document.createTextNode("OK")); + okButton.onclick = function () { + if (defined(resizeCallback) && defined(window.removeEventListener)) { + window.removeEventListener("resize", resizeCallback, false); + } + element.removeChild(overlay); + }; + + buttonPanel.appendChild(okButton); + + element.appendChild(overlay); +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +CesiumWidget.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +CesiumWidget.prototype.destroy = function () { + if (defined(this._scene)) { + this._scene.renderError.removeEventListener(this._onRenderError); + this._scene = this._scene.destroy(); + } + this._container.removeChild(this._element); + this._creditContainer.removeChild(this._innerCreditContainer); + destroyObject(this); +}; + +/** + * Updates the canvas size, camera aspect ratio, and viewport size. + * This function is called automatically as needed unless + * useDefaultRenderLoop is set to false. + */ +CesiumWidget.prototype.resize = function () { + var canvas = this._canvas; + if ( + !this._forceResize && + this._canvasClientWidth === canvas.clientWidth && + this._canvasClientHeight === canvas.clientHeight && + this._lastDevicePixelRatio === window.devicePixelRatio + ) { + return; + } + this._forceResize = false; + + configureCanvasSize(this); + configureCameraFrustum(this); + + this._scene.requestRender(); +}; + +/** + * Renders the scene. This function is called automatically + * unless useDefaultRenderLoop is set to false; + */ +CesiumWidget.prototype.render = function () { + if (this._canRender) { + this._scene.initializeFrame(); + var currentTime = this._clock.tick(); + this._scene.render(currentTime); + } else { + this._clock.tick(); + } +}; +export default CesiumWidget; diff --git a/cate/webapi/app/cesium/Widgets/CesiumWidget/lighter.css b/cate/webapi/app/cesium/Widgets/CesiumWidget/lighter.css new file mode 100644 index 000000000..899e024cb --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/CesiumWidget/lighter.css @@ -0,0 +1,14 @@ +.cesium-lighter .cesium-widget-errorPanel { + background: rgba(255, 255, 255, 0.7); +} + +.cesium-lighter .cesium-widget-errorPanel-content { + border: 1px solid #526f82; + border-radius: 7px; + background-color: white; + color: black; +} + +.cesium-lighter .cesium-widget-errorPanel-header { + color: #b87d00; +} diff --git a/cate/webapi/app/cesium/Widgets/ClockViewModel.js b/cate/webapi/app/cesium/Widgets/ClockViewModel.js new file mode 100644 index 000000000..77564619d --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/ClockViewModel.js @@ -0,0 +1,194 @@ +import Clock from "../Core/Clock.js"; +import defined from "../Core/defined.js"; +import destroyObject from "../Core/destroyObject.js"; +import EventHelper from "../Core/EventHelper.js"; +import JulianDate from "../Core/JulianDate.js"; +import knockout from "../ThirdParty/knockout.js"; + +/** + * A view model which exposes a {@link Clock} for user interfaces. + * @alias ClockViewModel + * @constructor + * + * @param {Clock} [clock] The clock object wrapped by this view model, if undefined a new instance will be created. + * + * @see Clock + */ +function ClockViewModel(clock) { + if (!defined(clock)) { + clock = new Clock(); + } + this._clock = clock; + + this._eventHelper = new EventHelper(); + this._eventHelper.add(clock.onTick, this.synchronize, this); + + /** + * Gets the current system time. + * This property is observable. + * @type {JulianDate} + */ + this.systemTime = knockout.observable(JulianDate.now()); + this.systemTime.equalityComparer = JulianDate.equals; + + /** + * Gets or sets the start time of the clock. + * See {@link Clock#startTime}. + * This property is observable. + * @type {JulianDate} + */ + this.startTime = knockout.observable(clock.startTime); + this.startTime.equalityComparer = JulianDate.equals; + this.startTime.subscribe(function (value) { + clock.startTime = value; + this.synchronize(); + }, this); + + /** + * Gets or sets the stop time of the clock. + * See {@link Clock#stopTime}. + * This property is observable. + * @type {JulianDate} + */ + this.stopTime = knockout.observable(clock.stopTime); + this.stopTime.equalityComparer = JulianDate.equals; + this.stopTime.subscribe(function (value) { + clock.stopTime = value; + this.synchronize(); + }, this); + + /** + * Gets or sets the current time. + * See {@link Clock#currentTime}. + * This property is observable. + * @type {JulianDate} + */ + this.currentTime = knockout.observable(clock.currentTime); + this.currentTime.equalityComparer = JulianDate.equals; + this.currentTime.subscribe(function (value) { + clock.currentTime = value; + this.synchronize(); + }, this); + + /** + * Gets or sets the clock multiplier. + * See {@link Clock#multiplier}. + * This property is observable. + * @type {Number} + */ + this.multiplier = knockout.observable(clock.multiplier); + this.multiplier.subscribe(function (value) { + clock.multiplier = value; + this.synchronize(); + }, this); + + /** + * Gets or sets the clock step setting. + * See {@link Clock#clockStep}. + * This property is observable. + * @type {ClockStep} + */ + this.clockStep = knockout.observable(clock.clockStep); + this.clockStep.subscribe(function (value) { + clock.clockStep = value; + this.synchronize(); + }, this); + + /** + * Gets or sets the clock range setting. + * See {@link Clock#clockRange}. + * This property is observable. + * @type {ClockRange} + */ + this.clockRange = knockout.observable(clock.clockRange); + this.clockRange.subscribe(function (value) { + clock.clockRange = value; + this.synchronize(); + }, this); + + /** + * Gets or sets whether the clock can animate. + * See {@link Clock#canAnimate}. + * This property is observable. + * @type {Boolean} + */ + this.canAnimate = knockout.observable(clock.canAnimate); + this.canAnimate.subscribe(function (value) { + clock.canAnimate = value; + this.synchronize(); + }, this); + + /** + * Gets or sets whether the clock should animate. + * See {@link Clock#shouldAnimate}. + * This property is observable. + * @type {Boolean} + */ + this.shouldAnimate = knockout.observable(clock.shouldAnimate); + this.shouldAnimate.subscribe(function (value) { + clock.shouldAnimate = value; + this.synchronize(); + }, this); + + knockout.track(this, [ + "systemTime", + "startTime", + "stopTime", + "currentTime", + "multiplier", + "clockStep", + "clockRange", + "canAnimate", + "shouldAnimate", + ]); +} + +Object.defineProperties(ClockViewModel.prototype, { + /** + * Gets the underlying Clock. + * @memberof ClockViewModel.prototype + * @type {Clock} + */ + clock: { + get: function () { + return this._clock; + }, + }, +}); + +/** + * Updates the view model with the contents of the underlying clock. + * Can be called to force an update of the viewModel if the underlying + * clock has changed and Clock.tick has not yet been called. + */ +ClockViewModel.prototype.synchronize = function () { + var clock = this._clock; + + this.systemTime = JulianDate.now(); + this.startTime = clock.startTime; + this.stopTime = clock.stopTime; + this.currentTime = clock.currentTime; + this.multiplier = clock.multiplier; + this.clockStep = clock.clockStep; + this.clockRange = clock.clockRange; + this.canAnimate = clock.canAnimate; + this.shouldAnimate = clock.shouldAnimate; +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +ClockViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the view model. Should be called to + * properly clean up the view model when it is no longer needed. + */ +ClockViewModel.prototype.destroy = function () { + this._eventHelper.removeAll(); + + destroyObject(this); +}; +export default ClockViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Command.js b/cate/webapi/app/cesium/Widgets/Command.js new file mode 100644 index 000000000..96416911a --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Command.js @@ -0,0 +1,42 @@ +import DeveloperError from "../Core/DeveloperError.js"; + +/** + * A Command is a function with an extra canExecute observable property to determine + * whether the command can be executed. When executed, a Command function will check the + * value of canExecute and throw if false. + * + * This type describes an interface and is not intended to be instantiated directly. + * See {@link createCommand} to create a command from a function. + * + * @alias Command + * @constructor + */ +function Command() { + /** + * Gets whether this command can currently be executed. This property is observable. + * @type {Boolean} + * @default undefined + */ + this.canExecute = undefined; + + /** + * Gets an event which is raised before the command executes, the event + * is raised with an object containing two properties: a cancel property, + * which if set to false by the listener will prevent the command from being executed, and + * an args property, which is the array of arguments being passed to the command. + * @type {Event} + * @default undefined + */ + this.beforeExecute = undefined; + + /** + * Gets an event which is raised after the command executes, the event + * is raised with the return value of the command as its only parameter. + * @type {Event} + * @default undefined + */ + this.afterExecute = undefined; + + DeveloperError.throwInstantiationError(); +} +export default Command; diff --git a/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.css b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.css new file mode 100644 index 000000000..c5abcf427 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.css @@ -0,0 +1,7 @@ +.cesium-button.cesium-fullscreenButton { + display: block; + width: 100%; + height: 100%; + margin: 0; + border-radius: 0; +} diff --git a/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.js b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.js new file mode 100644 index 000000000..a547e7496 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButton.js @@ -0,0 +1,106 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import FullscreenButtonViewModel from "./FullscreenButtonViewModel.js"; + +var enterFullScreenPath = + "M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z"; +var exitFullScreenPath = + "M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z"; + +/** + * A single button widget for toggling fullscreen mode. + * + * @alias FullscreenButton + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * @see Fullscreen + */ +function FullscreenButton(container, fullscreenElement) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new FullscreenButtonViewModel(fullscreenElement, container); + + viewModel._exitFullScreenPath = exitFullScreenPath; + viewModel._enterFullScreenPath = enterFullScreenPath; + + var element = document.createElement("button"); + element.type = "button"; + element.className = "cesium-button cesium-fullscreenButton"; + element.setAttribute( + "data-bind", + "\ +attr: { title: tooltip },\ +click: command,\ +enable: isFullscreenEnabled,\ +cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }" + ); + + container.appendChild(element); + + knockout.applyBindings(viewModel, element); + + this._container = container; + this._viewModel = viewModel; + this._element = element; +} + +Object.defineProperties(FullscreenButton.prototype, { + /** + * Gets the parent container. + * @memberof FullscreenButton.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof FullscreenButton.prototype + * + * @type {FullscreenButtonViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +FullscreenButton.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +FullscreenButton.prototype.destroy = function () { + this._viewModel.destroy(); + + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + + return destroyObject(this); +}; +export default FullscreenButton; diff --git a/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButtonViewModel.js b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButtonViewModel.js new file mode 100644 index 000000000..e187bb316 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/FullscreenButton/FullscreenButtonViewModel.js @@ -0,0 +1,143 @@ +import defined from "../../Core/defined.js"; +import defaultValue from "../../Core/defaultValue.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Fullscreen from "../../Core/Fullscreen.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; +import getElement from "../getElement.js"; + +/** + * The view model for {@link FullscreenButton}. + * @alias FullscreenButtonViewModel + * @constructor + * + * @param {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode. + * @param {Element|String} [container] The DOM element or ID that will contain the widget. + */ +function FullscreenButtonViewModel(fullscreenElement, container) { + if (!defined(container)) { + container = document.body; + } + + container = getElement(container); + + var that = this; + + var tmpIsFullscreen = knockout.observable(Fullscreen.fullscreen); + var tmpIsEnabled = knockout.observable(Fullscreen.enabled); + var ownerDocument = container.ownerDocument; + + /** + * Gets whether or not fullscreen mode is active. This property is observable. + * + * @type {Boolean} + */ + this.isFullscreen = undefined; + knockout.defineProperty(this, "isFullscreen", { + get: function () { + return tmpIsFullscreen(); + }, + }); + + /** + * Gets or sets whether or not fullscreen functionality should be enabled. This property is observable. + * + * @type {Boolean} + * @see Fullscreen.enabled + */ + this.isFullscreenEnabled = undefined; + knockout.defineProperty(this, "isFullscreenEnabled", { + get: function () { + return tmpIsEnabled(); + }, + set: function (value) { + tmpIsEnabled(value && Fullscreen.enabled); + }, + }); + + /** + * Gets the tooltip. This property is observable. + * + * @type {String} + */ + this.tooltip = undefined; + knockout.defineProperty(this, "tooltip", function () { + if (!this.isFullscreenEnabled) { + return "Full screen unavailable"; + } + return tmpIsFullscreen() ? "Exit full screen" : "Full screen"; + }); + + this._command = createCommand(function () { + if (Fullscreen.fullscreen) { + Fullscreen.exitFullscreen(); + } else { + Fullscreen.requestFullscreen(that._fullscreenElement); + } + }, knockout.getObservable(this, "isFullscreenEnabled")); + + this._fullscreenElement = defaultValue( + getElement(fullscreenElement), + ownerDocument.body + ); + + this._callback = function () { + tmpIsFullscreen(Fullscreen.fullscreen); + }; + ownerDocument.addEventListener(Fullscreen.changeEventName, this._callback); +} + +Object.defineProperties(FullscreenButtonViewModel.prototype, { + /** + * Gets or sets the HTML element to place into fullscreen mode when the + * corresponding button is pressed. + * @memberof FullscreenButtonViewModel.prototype + * + * @type {Element} + */ + fullscreenElement: { + //TODO:@exception {DeveloperError} value must be a valid HTML Element. + get: function () { + return this._fullscreenElement; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (!(value instanceof Element)) { + throw new DeveloperError("value must be a valid Element."); + } + //>>includeEnd('debug'); + + this._fullscreenElement = value; + }, + }, + + /** + * Gets the Command to toggle fullscreen mode. + * @memberof FullscreenButtonViewModel.prototype + * + * @type {Command} + */ + command: { + get: function () { + return this._command; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +FullscreenButtonViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the view model. Should be called to + * properly clean up the view model when it is no longer needed. + */ +FullscreenButtonViewModel.prototype.destroy = function () { + document.removeEventListener(Fullscreen.changeEventName, this._callback); + destroyObject(this); +}; +export default FullscreenButtonViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.css b/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.css new file mode 100644 index 000000000..c7ade60df --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.css @@ -0,0 +1,78 @@ +.cesium-viewer-geocoderContainer .cesium-geocoder-input { + border: solid 1px #444; + background-color: rgba(40, 40, 40, 0.7); + color: white; + display: inline-block; + vertical-align: middle; + width: 0; + height: 32px; + margin: 0; + padding: 0 32px 0 0; + border-radius: 0; + box-sizing: border-box; + transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out; + -webkit-appearance: none; +} + +.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input { + border-color: #aef; + box-shadow: 0 0 8px #fff; +} + +.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus { + border-color: #ea4; + background-color: rgba(15, 15, 15, 0.9); + box-shadow: none; + outline: none; +} + +.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input, +.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus, +.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide { + padding-left: 4px; + width: 250px; +} + +.cesium-viewer-geocoderContainer .search-results { + position: absolute; + background-color: #000; + color: #eee; + overflow-y: auto; + opacity: 0.8; + width: 100%; +} + +.cesium-viewer-geocoderContainer .search-results ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +.cesium-viewer-geocoderContainer .search-results ul li { + font-size: 14px; + padding: 3px 10px; +} +.cesium-viewer-geocoderContainer .search-results ul li:hover { + cursor: pointer; +} + +.cesium-viewer-geocoderContainer .search-results ul li.active { + background: #48b; +} + +.cesium-geocoder-searchButton { + background-color: #303336; + display: inline-block; + position: absolute; + cursor: pointer; + width: 32px; + top: 1px; + right: 1px; + height: 30px; + vertical-align: middle; + fill: #edffff; +} + +.cesium-geocoder-searchButton:hover { + background-color: #48b; +} diff --git a/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.js b/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.js new file mode 100644 index 000000000..943d52b1e --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Geocoder/Geocoder.js @@ -0,0 +1,231 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import GeocoderViewModel from "./GeocoderViewModel.js"; + +var startSearchPath = + "M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z"; +var stopSearchPath = + "M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z"; + +/** + * A widget for finding addresses and landmarks, and flying the camera to them. Geocoding is + * performed using {@link https://cesium.com/cesium-ion/|Cesium ion}. + * + * @alias Geocoder + * @constructor + * + * @param {Object} options Object with the following properties: + * @param {Element|String} options.container The DOM element or ID that will contain the widget. + * @param {Scene} options.scene The Scene instance to use. + * @param {GeocoderService[]} [options.geocoderServices] The geocoder services to be used + * @param {Boolean} [options.autoComplete = true] True if the geocoder should query as the user types to autocomplete + * @param {Number} [options.flightDuration=1.5] The duration of the camera flight to an entered location, in seconds. + * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination. + */ +function Geocoder(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options) || !defined(options.container)) { + throw new DeveloperError("options.container is required."); + } + if (!defined(options.scene)) { + throw new DeveloperError("options.scene is required."); + } + //>>includeEnd('debug'); + + var container = getElement(options.container); + var viewModel = new GeocoderViewModel(options); + + viewModel._startSearchPath = startSearchPath; + viewModel._stopSearchPath = stopSearchPath; + + var form = document.createElement("form"); + form.setAttribute("data-bind", "submit: search"); + + var textBox = document.createElement("input"); + textBox.type = "search"; + textBox.className = "cesium-geocoder-input"; + textBox.setAttribute("placeholder", "Enter an address or landmark..."); + textBox.setAttribute( + "data-bind", + '\ +textInput: searchText,\ +disable: isSearchInProgress,\ +event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },\ +css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },\ +hasFocus: _focusTextbox' + ); + + this._onTextBoxFocus = function () { + // as of 2016-10-19, setTimeout is required to ensure that the + // text is focused on Safari 10 + setTimeout(function () { + textBox.select(); + }, 0); + }; + + textBox.addEventListener("focus", this._onTextBoxFocus, false); + form.appendChild(textBox); + this._textBox = textBox; + + var searchButton = document.createElement("span"); + searchButton.className = "cesium-geocoder-searchButton"; + searchButton.setAttribute( + "data-bind", + "\ +click: search,\ +cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }" + ); + form.appendChild(searchButton); + + container.appendChild(form); + + var searchSuggestionsContainer = document.createElement("div"); + searchSuggestionsContainer.className = "search-results"; + searchSuggestionsContainer.setAttribute( + "data-bind", + "visible: _suggestionsVisible" + ); + + var suggestionsList = document.createElement("ul"); + suggestionsList.setAttribute("data-bind", "foreach: _suggestions"); + var suggestions = document.createElement("li"); + suggestionsList.appendChild(suggestions); + suggestions.setAttribute( + "data-bind", + "text: $data.displayName, \ +click: $parent.activateSuggestion, \ +event: { mouseover: $parent.handleMouseover}, \ +css: { active: $data === $parent._selectedSuggestion }" + ); + + searchSuggestionsContainer.appendChild(suggestionsList); + container.appendChild(searchSuggestionsContainer); + + knockout.applyBindings(viewModel, form); + knockout.applyBindings(viewModel, searchSuggestionsContainer); + + this._container = container; + this._searchSuggestionsContainer = searchSuggestionsContainer; + this._viewModel = viewModel; + this._form = form; + + this._onInputBegin = function (e) { + // e.target will not be correct if we are inside of the Shadow DOM + // and contains will always fail. To retrieve the correct target, + // we need to access the first element of the composedPath. + // This allows us to use shadow DOM if it exists and fall + // back to legacy behavior if its not being used. + + var target = e.target; + if (typeof e.composedPath === "function") { + target = e.composedPath()[0]; + } + + if (!container.contains(target)) { + viewModel._focusTextbox = false; + viewModel.hideSuggestions(); + } + }; + + this._onInputEnd = function (e) { + viewModel._focusTextbox = true; + viewModel.showSuggestions(); + }; + + //We subscribe to both begin and end events in order to give the text box + //focus no matter where on the widget is clicked. + + if (FeatureDetection.supportsPointerEvents()) { + document.addEventListener("pointerdown", this._onInputBegin, true); + container.addEventListener("pointerup", this._onInputEnd, true); + container.addEventListener("pointercancel", this._onInputEnd, true); + } else { + document.addEventListener("mousedown", this._onInputBegin, true); + container.addEventListener("mouseup", this._onInputEnd, true); + document.addEventListener("touchstart", this._onInputBegin, true); + container.addEventListener("touchend", this._onInputEnd, true); + container.addEventListener("touchcancel", this._onInputEnd, true); + } +} + +Object.defineProperties(Geocoder.prototype, { + /** + * Gets the parent container. + * @memberof Geocoder.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the parent container. + * @memberof Geocoder.prototype + * + * @type {Element} + */ + searchSuggestionsContainer: { + get: function () { + return this._searchSuggestionsContainer; + }, + }, + + /** + * Gets the view model. + * @memberof Geocoder.prototype + * + * @type {GeocoderViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Geocoder.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +Geocoder.prototype.destroy = function () { + var container = this._container; + if (FeatureDetection.supportsPointerEvents()) { + document.removeEventListener("pointerdown", this._onInputBegin, true); + container.removeEventListener("pointerup", this._onInputEnd, true); + } else { + document.removeEventListener("mousedown", this._onInputBegin, true); + container.removeEventListener("mouseup", this._onInputEnd, true); + document.removeEventListener("touchstart", this._onInputBegin, true); + container.removeEventListener("touchend", this._onInputEnd, true); + } + this._viewModel.destroy(); + knockout.cleanNode(this._form); + knockout.cleanNode(this._searchSuggestionsContainer); + container.removeChild(this._form); + container.removeChild(this._searchSuggestionsContainer); + this._textBox.removeEventListener("focus", this._onTextBoxFocus, false); + + return destroyObject(this); +}; + +/** + * A function that handles the result of a successful geocode. + * @callback Geocoder.DestinationFoundFunction + * @param {GeocoderViewModel} viewModel The view model. + * @param {Cartesian3|Rectangle} destination The destination result of the geocode. + */ +export default Geocoder; diff --git a/cate/webapi/app/cesium/Widgets/Geocoder/GeocoderViewModel.js b/cate/webapi/app/cesium/Widgets/Geocoder/GeocoderViewModel.js new file mode 100644 index 000000000..b384fcb85 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Geocoder/GeocoderViewModel.js @@ -0,0 +1,557 @@ +import CartographicGeocoderService from "../../Core/CartographicGeocoderService.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Event from "../../Core/Event.js"; +import GeocodeType from "../../Core/GeocodeType.js"; +import IonGeocoderService from "../../Core/IonGeocoderService.js"; +import CesiumMath from "../../Core/Math.js"; +import Matrix4 from "../../Core/Matrix4.js"; +import Rectangle from "../../Core/Rectangle.js"; +import sampleTerrainMostDetailed from "../../Core/sampleTerrainMostDetailed.js"; +import computeFlyToLocationForRectangle from "../../Scene/computeFlyToLocationForRectangle.js"; +import knockout from "../../ThirdParty/knockout.js"; +import when from "../../ThirdParty/when.js"; +import createCommand from "../createCommand.js"; +import getElement from "../getElement.js"; + +// The height we use if geocoding to a specific point instead of an rectangle. +var DEFAULT_HEIGHT = 1000; + +/** + * The view model for the {@link Geocoder} widget. + * @alias GeocoderViewModel + * @constructor + * + * @param {Object} options Object with the following properties: + * @param {Scene} options.scene The Scene instance to use. + * @param {GeocoderService[]} [options.geocoderServices] Geocoder services to use for geocoding queries. + * If more than one are supplied, suggestions will be gathered for the geocoders that support it, + * and if no suggestion is selected the result from the first geocoder service wil be used. + * @param {Number} [options.flightDuration] The duration of the camera flight to an entered location, in seconds. + * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination. + */ +function GeocoderViewModel(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options) || !defined(options.scene)) { + throw new DeveloperError("options.scene is required."); + } + //>>includeEnd('debug'); + + if (defined(options.geocoderServices)) { + this._geocoderServices = options.geocoderServices; + } else { + this._geocoderServices = [ + new CartographicGeocoderService(), + new IonGeocoderService({ scene: options.scene }), + ]; + } + + this._viewContainer = options.container; + this._scene = options.scene; + this._flightDuration = options.flightDuration; + this._searchText = ""; + this._isSearchInProgress = false; + this._geocodePromise = undefined; + this._complete = new Event(); + this._suggestions = []; + this._selectedSuggestion = undefined; + this._showSuggestions = true; + + this._handleArrowDown = handleArrowDown; + this._handleArrowUp = handleArrowUp; + + var that = this; + + this._suggestionsVisible = knockout.pureComputed(function () { + var suggestions = knockout.getObservable(that, "_suggestions"); + var suggestionsNotEmpty = suggestions().length > 0; + var showSuggestions = knockout.getObservable(that, "_showSuggestions")(); + return suggestionsNotEmpty && showSuggestions; + }); + + this._searchCommand = createCommand(function (geocodeType) { + geocodeType = defaultValue(geocodeType, GeocodeType.SEARCH); + that._focusTextbox = false; + if (defined(that._selectedSuggestion)) { + that.activateSuggestion(that._selectedSuggestion); + return false; + } + that.hideSuggestions(); + if (that.isSearchInProgress) { + cancelGeocode(that); + } else { + geocode(that, that._geocoderServices, geocodeType); + } + }); + + this.deselectSuggestion = function () { + that._selectedSuggestion = undefined; + }; + + this.handleKeyDown = function (data, event) { + var downKey = + event.key === "ArrowDown" || event.key === "Down" || event.keyCode === 40; + var upKey = + event.key === "ArrowUp" || event.key === "Up" || event.keyCode === 38; + if (downKey || upKey) { + event.preventDefault(); + } + + return true; + }; + + this.handleKeyUp = function (data, event) { + var downKey = + event.key === "ArrowDown" || event.key === "Down" || event.keyCode === 40; + var upKey = + event.key === "ArrowUp" || event.key === "Up" || event.keyCode === 38; + var enterKey = event.key === "Enter" || event.keyCode === 13; + if (upKey) { + handleArrowUp(that); + } else if (downKey) { + handleArrowDown(that); + } else if (enterKey) { + that._searchCommand(); + } + return true; + }; + + this.activateSuggestion = function (data) { + that.hideSuggestions(); + that._searchText = data.displayName; + var destination = data.destination; + clearSuggestions(that); + that.destinationFound(that, destination); + }; + + this.hideSuggestions = function () { + that._showSuggestions = false; + that._selectedSuggestion = undefined; + }; + + this.showSuggestions = function () { + that._showSuggestions = true; + }; + + this.handleMouseover = function (data, event) { + if (data !== that._selectedSuggestion) { + that._selectedSuggestion = data; + } + }; + + /** + * Gets or sets a value indicating if this instance should always show its text input field. + * + * @type {Boolean} + * @default false + */ + this.keepExpanded = false; + + /** + * True if the geocoder should query as the user types to autocomplete + * @type {Boolean} + * @default true + */ + this.autoComplete = defaultValue(options.autocomplete, true); + + /** + * Gets and sets the command called when a geocode destination is found + * @type {Geocoder.DestinationFoundFunction} + */ + this.destinationFound = defaultValue( + options.destinationFound, + GeocoderViewModel.flyToDestination + ); + + this._focusTextbox = false; + + knockout.track(this, [ + "_searchText", + "_isSearchInProgress", + "keepExpanded", + "_suggestions", + "_selectedSuggestion", + "_showSuggestions", + "_focusTextbox", + ]); + + var searchTextObservable = knockout.getObservable(this, "_searchText"); + searchTextObservable.extend({ rateLimit: { timeout: 500 } }); + this._suggestionSubscription = searchTextObservable.subscribe(function () { + GeocoderViewModel._updateSearchSuggestions(that); + }); + /** + * Gets a value indicating whether a search is currently in progress. This property is observable. + * + * @type {Boolean} + */ + this.isSearchInProgress = undefined; + knockout.defineProperty(this, "isSearchInProgress", { + get: function () { + return this._isSearchInProgress; + }, + }); + + /** + * Gets or sets the text to search for. The text can be an address, or longitude, latitude, + * and optional height, where longitude and latitude are in degrees and height is in meters. + * + * @type {String} + */ + this.searchText = undefined; + knockout.defineProperty(this, "searchText", { + get: function () { + if (this.isSearchInProgress) { + return "Searching..."; + } + + return this._searchText; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (typeof value !== "string") { + throw new DeveloperError("value must be a valid string."); + } + //>>includeEnd('debug'); + this._searchText = value; + }, + }); + + /** + * Gets or sets the the duration of the camera flight in seconds. + * A value of zero causes the camera to instantly switch to the geocoding location. + * The duration will be computed based on the distance when undefined. + * + * @type {Number|undefined} + * @default undefined + */ + this.flightDuration = undefined; + knockout.defineProperty(this, "flightDuration", { + get: function () { + return this._flightDuration; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (defined(value) && value < 0) { + throw new DeveloperError("value must be positive."); + } + //>>includeEnd('debug'); + + this._flightDuration = value; + }, + }); +} + +Object.defineProperties(GeocoderViewModel.prototype, { + /** + * Gets the event triggered on flight completion. + * @memberof GeocoderViewModel.prototype + * + * @type {Event} + */ + complete: { + get: function () { + return this._complete; + }, + }, + + /** + * Gets the scene to control. + * @memberof GeocoderViewModel.prototype + * + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets the Command that is executed when the button is clicked. + * @memberof GeocoderViewModel.prototype + * + * @type {Command} + */ + search: { + get: function () { + return this._searchCommand; + }, + }, + + /** + * Gets the currently selected geocoder search suggestion + * @memberof GeocoderViewModel.prototype + * + * @type {Object} + */ + selectedSuggestion: { + get: function () { + return this._selectedSuggestion; + }, + }, + + /** + * Gets the list of geocoder search suggestions + * @memberof GeocoderViewModel.prototype + * + * @type {Object[]} + */ + suggestions: { + get: function () { + return this._suggestions; + }, + }, +}); + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +GeocoderViewModel.prototype.destroy = function () { + this._suggestionSubscription.dispose(); +}; + +function handleArrowUp(viewModel) { + if (viewModel._suggestions.length === 0) { + return; + } + var next; + var currentIndex = viewModel._suggestions.indexOf( + viewModel._selectedSuggestion + ); + if (currentIndex === -1 || currentIndex === 0) { + viewModel._selectedSuggestion = undefined; + return; + } + next = currentIndex - 1; + viewModel._selectedSuggestion = viewModel._suggestions[next]; + GeocoderViewModel._adjustSuggestionsScroll(viewModel, next); +} + +function handleArrowDown(viewModel) { + if (viewModel._suggestions.length === 0) { + return; + } + var numberOfSuggestions = viewModel._suggestions.length; + var currentIndex = viewModel._suggestions.indexOf( + viewModel._selectedSuggestion + ); + var next = (currentIndex + 1) % numberOfSuggestions; + viewModel._selectedSuggestion = viewModel._suggestions[next]; + + GeocoderViewModel._adjustSuggestionsScroll(viewModel, next); +} + +function computeFlyToLocationForCartographic(cartographic, terrainProvider) { + var availability = defined(terrainProvider) + ? terrainProvider.availability + : undefined; + + if (!defined(availability)) { + cartographic.height += DEFAULT_HEIGHT; + return when.resolve(cartographic); + } + + return sampleTerrainMostDetailed(terrainProvider, [cartographic]).then( + function (positionOnTerrain) { + cartographic = positionOnTerrain[0]; + cartographic.height += DEFAULT_HEIGHT; + return cartographic; + } + ); +} + +function flyToDestination(viewModel, destination) { + var scene = viewModel._scene; + var mapProjection = scene.mapProjection; + var ellipsoid = mapProjection.ellipsoid; + + var camera = scene.camera; + var terrainProvider = scene.terrainProvider; + var finalDestination = destination; + + var promise; + if (destination instanceof Rectangle) { + // Some geocoders return a Rectangle of zero width/height, treat it like a point instead. + if ( + CesiumMath.equalsEpsilon( + destination.south, + destination.north, + CesiumMath.EPSILON7 + ) && + CesiumMath.equalsEpsilon( + destination.east, + destination.west, + CesiumMath.EPSILON7 + ) + ) { + // destination is now a Cartographic + destination = Rectangle.center(destination); + } else { + promise = computeFlyToLocationForRectangle(destination, scene); + } + } else { + // destination is a Cartesian3 + destination = ellipsoid.cartesianToCartographic(destination); + } + + if (!defined(promise)) { + promise = computeFlyToLocationForCartographic(destination, terrainProvider); + } + + promise + .then(function (result) { + finalDestination = ellipsoid.cartographicToCartesian(result); + }) + .always(function () { + // Whether terrain querying succeeded or not, fly to the destination. + camera.flyTo({ + destination: finalDestination, + complete: function () { + viewModel._complete.raiseEvent(); + }, + duration: viewModel._flightDuration, + endTransform: Matrix4.IDENTITY, + }); + }); +} + +function chainPromise(promise, geocoderService, query, geocodeType) { + return promise.then(function (result) { + if ( + defined(result) && + result.state === "fulfilled" && + result.value.length > 0 + ) { + return result; + } + var nextPromise = geocoderService + .geocode(query, geocodeType) + .then(function (result) { + return { state: "fulfilled", value: result }; + }) + .otherwise(function (err) { + return { state: "rejected", reason: err }; + }); + + return nextPromise; + }); +} + +function geocode(viewModel, geocoderServices, geocodeType) { + var query = viewModel._searchText; + + if (hasOnlyWhitespace(query)) { + viewModel.showSuggestions(); + return; + } + + viewModel._isSearchInProgress = true; + + var promise = when.resolve(); + for (var i = 0; i < geocoderServices.length; i++) { + promise = chainPromise(promise, geocoderServices[i], query, geocodeType); + } + + viewModel._geocodePromise = promise; + promise.then(function (result) { + if (promise.cancel) { + return; + } + viewModel._isSearchInProgress = false; + + var geocoderResults = result.value; + if ( + result.state === "fulfilled" && + defined(geocoderResults) && + geocoderResults.length > 0 + ) { + viewModel._searchText = geocoderResults[0].displayName; + viewModel.destinationFound(viewModel, geocoderResults[0].destination); + return; + } + viewModel._searchText = query + " (not found)"; + }); +} + +function adjustSuggestionsScroll(viewModel, focusedItemIndex) { + var container = getElement(viewModel._viewContainer); + var searchResults = container.getElementsByClassName("search-results")[0]; + var listItems = container.getElementsByTagName("li"); + var element = listItems[focusedItemIndex]; + + if (focusedItemIndex === 0) { + searchResults.scrollTop = 0; + return; + } + + var offsetTop = element.offsetTop; + if (offsetTop + element.clientHeight > searchResults.clientHeight) { + searchResults.scrollTop = offsetTop + element.clientHeight; + } else if (offsetTop < searchResults.scrollTop) { + searchResults.scrollTop = offsetTop; + } +} + +function cancelGeocode(viewModel) { + viewModel._isSearchInProgress = false; + if (defined(viewModel._geocodePromise)) { + viewModel._geocodePromise.cancel = true; + viewModel._geocodePromise = undefined; + } +} + +function hasOnlyWhitespace(string) { + return /^\s*$/.test(string); +} + +function clearSuggestions(viewModel) { + knockout.getObservable(viewModel, "_suggestions").removeAll(); +} + +function updateSearchSuggestions(viewModel) { + if (!viewModel.autoComplete) { + return; + } + + var query = viewModel._searchText; + + clearSuggestions(viewModel); + if (hasOnlyWhitespace(query)) { + return; + } + + var promise = when.resolve([]); + viewModel._geocoderServices.forEach(function (service) { + promise = promise.then(function (results) { + if (results.length >= 5) { + return results; + } + return service + .geocode(query, GeocodeType.AUTOCOMPLETE) + .then(function (newResults) { + results = results.concat(newResults); + return results; + }); + }); + }); + promise.then(function (results) { + var suggestions = viewModel._suggestions; + for (var i = 0; i < results.length; i++) { + suggestions.push(results[i]); + } + }); +} + +/** + * A function to fly to the destination found by a successful geocode. + * @type {Geocoder.DestinationFoundFunction} + */ +GeocoderViewModel.flyToDestination = flyToDestination; + +//exposed for testing +GeocoderViewModel._updateSearchSuggestions = updateSearchSuggestions; +GeocoderViewModel._adjustSuggestionsScroll = adjustSuggestionsScroll; +export default GeocoderViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Geocoder/lighter.css b/cate/webapi/app/cesium/Widgets/Geocoder/lighter.css new file mode 100644 index 000000000..34d8e98c8 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Geocoder/lighter.css @@ -0,0 +1,19 @@ +.cesium-lighter .cesium-geocoder-input { + border: solid 1px #759dc0; + background-color: rgba(240, 240, 240, 0.9); + color: black; +} + +.cesium-lighter .cesium-viewer-geocoderContainer:hover .cesium-geocoder-input { + border-color: #aef; + box-shadow: 0 0 8px #fff; +} + +.cesium-lighter .cesium-geocoder-searchButton { + background-color: #e2f0ff; + fill: #111; +} + +.cesium-lighter .cesium-geocoder-searchButton:hover { + background-color: #a6d2ff; +} diff --git a/cate/webapi/app/cesium/Widgets/HomeButton/HomeButton.js b/cate/webapi/app/cesium/Widgets/HomeButton/HomeButton.js new file mode 100644 index 000000000..84d77e3c1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/HomeButton/HomeButton.js @@ -0,0 +1,95 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import HomeButtonViewModel from "./HomeButtonViewModel.js"; + +/** + * A single button widget for returning to the default camera view of the current scene. + * + * @alias HomeButton + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The Scene instance to use. + * @param {Number} [duration] The time, in seconds, it takes to complete the camera flight home. + */ +function HomeButton(container, scene, duration) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new HomeButtonViewModel(scene, duration); + + viewModel._svgPath = + "M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z"; + + var element = document.createElement("button"); + element.type = "button"; + element.className = "cesium-button cesium-toolbar-button cesium-home-button"; + element.setAttribute( + "data-bind", + "\ +attr: { title: tooltip },\ +click: command,\ +cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }" + ); + + container.appendChild(element); + + knockout.applyBindings(viewModel, element); + + this._container = container; + this._viewModel = viewModel; + this._element = element; +} + +Object.defineProperties(HomeButton.prototype, { + /** + * Gets the parent container. + * @memberof HomeButton.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof HomeButton.prototype + * + * @type {HomeButtonViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +HomeButton.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +HomeButton.prototype.destroy = function () { + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + + return destroyObject(this); +}; +export default HomeButton; diff --git a/cate/webapi/app/cesium/Widgets/HomeButton/HomeButtonViewModel.js b/cate/webapi/app/cesium/Widgets/HomeButton/HomeButtonViewModel.js new file mode 100644 index 000000000..22f9fb1f2 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/HomeButton/HomeButtonViewModel.js @@ -0,0 +1,87 @@ +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link HomeButton}. + * @alias HomeButtonViewModel + * @constructor + * + * @param {Scene} scene The scene instance to use. + * @param {Number} [duration] The duration of the camera flight in seconds. + */ +function HomeButtonViewModel(scene, duration) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + this._scene = scene; + this._duration = duration; + + var that = this; + this._command = createCommand(function () { + that._scene.camera.flyHome(that._duration); + }); + + /** + * Gets or sets the tooltip. This property is observable. + * + * @type {String} + */ + this.tooltip = "View Home"; + + knockout.track(this, ["tooltip"]); +} + +Object.defineProperties(HomeButtonViewModel.prototype, { + /** + * Gets the scene to control. + * @memberof HomeButtonViewModel.prototype + * + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets the Command that is executed when the button is clicked. + * @memberof HomeButtonViewModel.prototype + * + * @type {Command} + */ + command: { + get: function () { + return this._command; + }, + }, + + /** + * Gets or sets the the duration of the camera flight in seconds. + * A value of zero causes the camera to instantly switch to home view. + * The duration will be computed based on the distance when undefined. + * @memberof HomeButtonViewModel.prototype + * + * @type {Number|undefined} + */ + duration: { + get: function () { + return this._duration; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (defined(value) && value < 0) { + throw new DeveloperError("value must be positive."); + } + //>>includeEnd('debug'); + + this._duration = value; + }, + }, +}); +export default HomeButtonViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerial.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerial.png new file mode 100644 index 000000000..a78a154b1 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerial.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png new file mode 100644 index 000000000..4cafd40f9 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingRoads.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingRoads.png new file mode 100644 index 000000000..282d6ada8 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/bingRoads.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/blueMarble.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/blueMarble.png new file mode 100644 index 000000000..b8b5b7b1a Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/blueMarble.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/earthAtNight.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/earthAtNight.png new file mode 100644 index 000000000..45e0fc7b8 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/earthAtNight.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png new file mode 100644 index 000000000..bcfdd0b28 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png new file mode 100644 index 000000000..a9429daf3 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png new file mode 100644 index 000000000..dfbc1f42d Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png new file mode 100644 index 000000000..f2eba4106 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png new file mode 100644 index 000000000..30ee6dbd5 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png new file mode 100644 index 000000000..6eef1fc3a Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png new file mode 100644 index 000000000..e6bc35513 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png new file mode 100644 index 000000000..50271c79a Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/openStreetMap.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/openStreetMap.png new file mode 100644 index 000000000..84acdb809 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/openStreetMap.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/sentinel-2.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/sentinel-2.png new file mode 100644 index 000000000..775fb38ce Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/sentinel-2.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenToner.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenToner.png new file mode 100644 index 000000000..af894096c Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenToner.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png new file mode 100644 index 000000000..552130eb5 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Mouse.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Mouse.svg new file mode 100644 index 000000000..7fae028c0 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Mouse.svg @@ -0,0 +1,84 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg new file mode 100644 index 000000000..0c49c15fb --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg @@ -0,0 +1,76 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg new file mode 100644 index 000000000..9dd533d58 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg @@ -0,0 +1,76 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseRight.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseRight.svg new file mode 100644 index 000000000..2662ad18d --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/MouseRight.svg @@ -0,0 +1,76 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Touch.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Touch.svg new file mode 100644 index 000000000..e682b3019 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/Touch.svg @@ -0,0 +1,120 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg new file mode 100644 index 000000000..f0509e855 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg @@ -0,0 +1,129 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg new file mode 100644 index 000000000..fe968ff45 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg @@ -0,0 +1,76 @@ + + + +image/svg+xml + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg new file mode 100644 index 000000000..e1206c5d6 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg @@ -0,0 +1,135 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg new file mode 100644 index 000000000..74e55d7cb --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg @@ -0,0 +1,74 @@ + + + +image/svg+xml + + \ No newline at end of file diff --git a/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png b/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png new file mode 100644 index 000000000..16343ec24 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png b/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png new file mode 100644 index 000000000..a36259bbe Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/TimelineIcons.png b/cate/webapi/app/cesium/Widgets/Images/TimelineIcons.png new file mode 100644 index 000000000..e3a04556a Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/TimelineIcons.png differ diff --git a/cate/webapi/app/cesium/Widgets/Images/info-loading.gif b/cate/webapi/app/cesium/Widgets/Images/info-loading.gif new file mode 100644 index 000000000..8df10dd51 Binary files /dev/null and b/cate/webapi/app/cesium/Widgets/Images/info-loading.gif differ diff --git a/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.css b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.css new file mode 100644 index 000000000..5041c5504 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.css @@ -0,0 +1,98 @@ +.cesium-infoBox { + display: block; + position: absolute; + top: 50px; + right: 0; + width: 40%; + max-width: 480px; + background: rgba(38, 38, 38, 0.95); + color: #edffff; + border: 1px solid #444; + border-right: none; + border-top-left-radius: 7px; + border-bottom-left-radius: 7px; + box-shadow: 0 0 10px 1px #000; + transform: translate(100%, 0); + visibility: hidden; + opacity: 0; + transition: visibility 0s 0.2s, opacity 0.2s ease-in, transform 0.2s ease-in; +} + +.cesium-infoBox-visible { + transform: translate(0, 0); + visibility: visible; + opacity: 1; + transition: opacity 0.2s ease-out, transform 0.2s ease-out; +} + +.cesium-infoBox-title { + display: block; + height: 20px; + padding: 5px 30px 5px 25px; + background: rgba(84, 84, 84, 1); + border-top-left-radius: 7px; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + box-sizing: content-box; +} + +.cesium-infoBox-bodyless .cesium-infoBox-title { + border-bottom-left-radius: 7px; +} + +button.cesium-infoBox-camera { + display: block; + position: absolute; + top: 4px; + left: 4px; + width: 22px; + height: 22px; + background: transparent; + border-color: transparent; + border-radius: 3px; + padding: 0 5px; + margin: 0; +} + +button.cesium-infoBox-close { + display: block; + position: absolute; + top: 5px; + right: 5px; + height: 20px; + background: transparent; + border: none; + border-radius: 2px; + font-weight: bold; + font-size: 16px; + padding: 0 5px; + margin: 0; + color: #edffff; +} + +button.cesium-infoBox-close:focus { + background: rgba(238, 136, 0, 0.44); + outline: none; +} + +button.cesium-infoBox-close:hover { + background: #888; + color: #000; +} + +button.cesium-infoBox-close:active { + background: #a00; + color: #000; +} + +.cesium-infoBox-bodyless .cesium-infoBox-iframe { + display: none; +} + +.cesium-infoBox-iframe { + border: none; + width: 100%; /* Fallback */ + width: calc(100% - 2px); +} diff --git a/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.js b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.js new file mode 100644 index 000000000..5838aa0f7 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBox.js @@ -0,0 +1,207 @@ +import buildModuleUrl from "../../Core/buildModuleUrl.js"; +import Check from "../../Core/Check.js"; +import Color from "../../Core/Color.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import subscribeAndEvaluate from "../subscribeAndEvaluate.js"; +import InfoBoxViewModel from "./InfoBoxViewModel.js"; + +/** + * A widget for displaying information or a description. + * + * @alias InfoBox + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + */ +function InfoBox(container) { + //>>includeStart('debug', pragmas.debug); + Check.defined("container", container); + //>>includeEnd('debug') + + container = getElement(container); + + var infoElement = document.createElement("div"); + infoElement.className = "cesium-infoBox"; + infoElement.setAttribute( + "data-bind", + '\ +css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }' + ); + container.appendChild(infoElement); + + var titleElement = document.createElement("div"); + titleElement.className = "cesium-infoBox-title"; + titleElement.setAttribute("data-bind", "text: titleText"); + infoElement.appendChild(titleElement); + + var cameraElement = document.createElement("button"); + cameraElement.type = "button"; + cameraElement.className = "cesium-button cesium-infoBox-camera"; + cameraElement.setAttribute( + "data-bind", + '\ +attr: { title: "Focus camera on object" },\ +click: function () { cameraClicked.raiseEvent(this); },\ +enable: enableCamera,\ +cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }' + ); + infoElement.appendChild(cameraElement); + + var closeElement = document.createElement("button"); + closeElement.type = "button"; + closeElement.className = "cesium-infoBox-close"; + closeElement.setAttribute( + "data-bind", + "\ +click: function () { closeClicked.raiseEvent(this); }" + ); + closeElement.innerHTML = "×"; + infoElement.appendChild(closeElement); + + var frame = document.createElement("iframe"); + frame.className = "cesium-infoBox-iframe"; + frame.setAttribute("sandbox", "allow-same-origin allow-popups allow-forms"); //allow-pointer-lock allow-scripts allow-top-navigation + frame.setAttribute( + "data-bind", + "style : { maxHeight : maxHeightOffset(40) }" + ); + frame.setAttribute("allowfullscreen", true); + infoElement.appendChild(frame); + + var viewModel = new InfoBoxViewModel(); + knockout.applyBindings(viewModel, infoElement); + + this._container = container; + this._element = infoElement; + this._frame = frame; + this._viewModel = viewModel; + this._descriptionSubscription = undefined; + + var that = this; + //We can't actually add anything into the frame until the load event is fired + frame.addEventListener("load", function () { + var frameDocument = frame.contentDocument; + + //We inject default css into the content iframe, + //end users can remove it or add their own via the exposed frame property. + var cssLink = frameDocument.createElement("link"); + cssLink.href = buildModuleUrl("Widgets/InfoBox/InfoBoxDescription.css"); + cssLink.rel = "stylesheet"; + cssLink.type = "text/css"; + + //div to use for description content. + var frameContent = frameDocument.createElement("div"); + frameContent.className = "cesium-infoBox-description"; + + frameDocument.head.appendChild(cssLink); + frameDocument.body.appendChild(frameContent); + + //We manually subscribe to the description event rather than through a binding for two reasons. + //1. It's an easy way to ensure order of operation so that we can adjust the height. + //2. Knockout does not bind to elements inside of an iFrame, so we would have to apply a second binding + // model anyway. + that._descriptionSubscription = subscribeAndEvaluate( + viewModel, + "description", + function (value) { + // Set the frame to small height, force vertical scroll bar to appear, and text to wrap accordingly. + frame.style.height = "5px"; + frameContent.innerHTML = value; + + //If the snippet is a single element, then use its background + //color for the body of the InfoBox. This makes the padding match + //the content and produces much nicer results. + var background = null; + var firstElementChild = frameContent.firstElementChild; + if ( + firstElementChild !== null && + frameContent.childNodes.length === 1 + ) { + var style = window.getComputedStyle(firstElementChild); + if (style !== null) { + var backgroundColor = style["background-color"]; + var color = Color.fromCssColorString(backgroundColor); + if (defined(color) && color.alpha !== 0) { + background = style["background-color"]; + } + } + } + infoElement.style["background-color"] = background; + + // Measure and set the new custom height, based on text wrapped above. + var height = frameContent.getBoundingClientRect().height; + frame.style.height = height + "px"; + } + ); + }); + + //Chrome does not send the load event unless we explicitly set a src + frame.setAttribute("src", "about:blank"); +} + +Object.defineProperties(InfoBox.prototype, { + /** + * Gets the parent container. + * @memberof InfoBox.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof InfoBox.prototype + * + * @type {InfoBoxViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, + + /** + * Gets the iframe used to display the description. + * @memberof InfoBox.prototype + * + * @type {HTMLIFrameElement} + */ + frame: { + get: function () { + return this._frame; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +InfoBox.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +InfoBox.prototype.destroy = function () { + var container = this._container; + knockout.cleanNode(this._element); + container.removeChild(this._element); + + if (defined(this._descriptionSubscription)) { + this._descriptionSubscription.dispose(); + } + + return destroyObject(this); +}; +export default InfoBox; diff --git a/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxDescription.css b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxDescription.css new file mode 100644 index 000000000..5cc68ccfb --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxDescription.css @@ -0,0 +1,90 @@ +@import url(../shared.css); +body { + margin: 0; + padding: 0; +} + +.cesium-infoBox-description { + font-family: sans-serif; + font-size: 13px; + padding: 4px 10px; + margin-right: 4px; + color: #edffff; +} + +.cesium-infoBox-description a:link, +.cesium-infoBox-description a:visited, +.cesium-infoBox-description a:hover, +.cesium-infoBox-description a:active { + color: #edffff; +} + +.cesium-infoBox-description table { + color: #edffff; +} + +.cesium-infoBox-defaultTable { + width: 100%; + color: #edffff; +} + +.cesium-infoBox-defaultTable tr:nth-child(odd) { + background-color: rgba(84, 84, 84, 0.8); +} + +.cesium-infoBox-defaultTable tr:nth-child(even) { + background-color: rgba(84, 84, 84, 0.25); +} + +.cesium-infoBox-defaultTable th { + font-weight: normal; + padding: 3px; + vertical-align: middle; + text-align: center; +} + +.cesium-infoBox-defaultTable td { + padding: 3px; + vertical-align: middle; + text-align: left; +} + +.cesium-infoBox-description-lighter { + color: #000000; +} + +.cesium-infoBox-description-lighter a:link, +.cesium-infoBox-description-lighter a:visited, +.cesium-infoBox-description-lighter a:hover, +.cesium-infoBox-description-lighter a:active { + color: #000000; +} + +.cesium-infoBox-description-lighter table { + color: #000000; +} + +.cesium-infoBox-defaultTable-lighter { + width: 100%; + color: #000000; +} + +.cesium-infoBox-defaultTable-lighter tr:nth-child(odd) { + background-color: rgba(179, 179, 179, 0.8); +} + +.cesium-infoBox-defaultTable-lighter tr:nth-child(even) { + background-color: rgba(179, 179, 179, 0.25); +} + +.cesium-infoBox-loadingContainer { + margin: 5px; + text-align: center; +} + +.cesium-infoBox-loading { + display: inline-block; + background-image: url(../Images/info-loading.gif); + width: 16px; + height: 11px; +} diff --git a/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxViewModel.js b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxViewModel.js new file mode 100644 index 000000000..d1cc6d5b4 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/InfoBox/InfoBoxViewModel.js @@ -0,0 +1,118 @@ +import defined from "../../Core/defined.js"; +import Event from "../../Core/Event.js"; +import knockout from "../../ThirdParty/knockout.js"; + +var cameraEnabledPath = + "M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z"; +var cameraDisabledPath = + "M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z"; + +/** + * The view model for {@link InfoBox}. + * @alias InfoBoxViewModel + * @constructor + */ +function InfoBoxViewModel() { + this._cameraClicked = new Event(); + this._closeClicked = new Event(); + + /** + * Gets or sets the maximum height of the info box in pixels. This property is observable. + * @type {Number} + */ + this.maxHeight = 500; + + /** + * Gets or sets whether the camera tracking icon is enabled. + * @type {Boolean} + */ + this.enableCamera = false; + + /** + * Gets or sets the status of current camera tracking of the selected object. + * @type {Boolean} + */ + this.isCameraTracking = false; + + /** + * Gets or sets the visibility of the info box. + * @type {Boolean} + */ + this.showInfo = false; + + /** + * Gets or sets the title text in the info box. + * @type {String} + */ + this.titleText = ""; + + /** + * Gets or sets the description HTML for the info box. + * @type {String} + */ + this.description = ""; + + knockout.track(this, [ + "showInfo", + "titleText", + "description", + "maxHeight", + "enableCamera", + "isCameraTracking", + ]); + + this._loadingIndicatorHtml = + '
'; + + /** + * Gets the SVG path of the camera icon, which can change to be "crossed out" or not. + * @type {String} + */ + this.cameraIconPath = undefined; + knockout.defineProperty(this, "cameraIconPath", { + get: function () { + return !this.enableCamera || this.isCameraTracking + ? cameraDisabledPath + : cameraEnabledPath; + }, + }); + + knockout.defineProperty(this, "_bodyless", { + get: function () { + return !defined(this.description) || this.description.length === 0; + }, + }); +} + +/** + * Gets the maximum height of sections within the info box, minus an offset, in CSS-ready form. + * @param {Number} offset The offset in pixels. + * @returns {String} + */ +InfoBoxViewModel.prototype.maxHeightOffset = function (offset) { + return this.maxHeight - offset + "px"; +}; + +Object.defineProperties(InfoBoxViewModel.prototype, { + /** + * Gets an {@link Event} that is fired when the user clicks the camera icon. + * @memberof InfoBoxViewModel.prototype + * @type {Event} + */ + cameraClicked: { + get: function () { + return this._cameraClicked; + }, + }, + /** + * Gets an {@link Event} that is fired when the user closes the info box. + * @memberof InfoBoxViewModel.prototype + * @type {Event} + */ + closeClicked: { + get: function () { + return this._closeClicked; + }, + }, +}); +export default InfoBoxViewModel; diff --git a/cate/webapi/app/cesium/Widgets/InspectorShared.js b/cate/webapi/app/cesium/Widgets/InspectorShared.js new file mode 100644 index 000000000..b841d42e5 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/InspectorShared.js @@ -0,0 +1,89 @@ +import Check from "../Core/Check.js"; +import defined from "../Core/defined.js"; + +/** + * A static class with helper functions used by the CesiumInspector and Cesium3DTilesInspector + * @private + */ +var InspectorShared = {}; + +/** + * Creates a checkbox component + * @param {String} labelText The text to display in the checkbox label + * @param {String} checkedBinding The name of the variable used for checked binding + * @param {String} [enableBinding] The name of the variable used for enable binding + * @return {Element} + */ +InspectorShared.createCheckbox = function ( + labelText, + checkedBinding, + enableBinding +) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.string("labelText", labelText); + Check.typeOf.string("checkedBinding", checkedBinding); + //>>includeEnd('debug'); + var checkboxContainer = document.createElement("div"); + var checkboxLabel = document.createElement("label"); + var checkboxInput = document.createElement("input"); + checkboxInput.type = "checkbox"; + + var binding = "checked: " + checkedBinding; + if (defined(enableBinding)) { + binding += ", enable: " + enableBinding; + } + checkboxInput.setAttribute("data-bind", binding); + checkboxLabel.appendChild(checkboxInput); + checkboxLabel.appendChild(document.createTextNode(labelText)); + checkboxContainer.appendChild(checkboxLabel); + return checkboxContainer; +}; + +/** + * Creates a section element + * @param {Element} panel The parent element + * @param {String} headerText The text to display at the top of the section + * @param {String} sectionVisibleBinding The name of the variable used for visible binding + * @param {String} toggleSectionVisibilityBinding The name of the function used to toggle visibility + * @return {Element} + */ +InspectorShared.createSection = function ( + panel, + headerText, + sectionVisibleBinding, + toggleSectionVisibilityBinding +) { + //>>includeStart('debug', pragmas.debug); + Check.defined("panel", panel); + Check.typeOf.string("headerText", headerText); + Check.typeOf.string("sectionVisibleBinding", sectionVisibleBinding); + Check.typeOf.string( + "toggleSectionVisibilityBinding", + toggleSectionVisibilityBinding + ); + //>>includeEnd('debug'); + var section = document.createElement("div"); + section.className = "cesium-cesiumInspector-section"; + section.setAttribute( + "data-bind", + 'css: { "cesium-cesiumInspector-section-collapsed": !' + + sectionVisibleBinding + + " }" + ); + panel.appendChild(section); + + var sectionHeader = document.createElement("h3"); + sectionHeader.className = "cesium-cesiumInspector-sectionHeader"; + sectionHeader.appendChild(document.createTextNode(headerText)); + sectionHeader.setAttribute( + "data-bind", + "click: " + toggleSectionVisibilityBinding + ); + section.appendChild(sectionHeader); + + var sectionContent = document.createElement("div"); + sectionContent.className = "cesium-cesiumInspector-sectionContent"; + section.appendChild(sectionContent); + return sectionContent; +}; +export default InspectorShared; diff --git a/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css new file mode 100644 index 000000000..736c4d293 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css @@ -0,0 +1,112 @@ +.cesium-navigationHelpButton-wrapper { + position: relative; + display: inline-block; +} + +.cesium-navigation-help { + visibility: hidden; + position: absolute; + top: 38px; + right: 2px; + width: 250px; + border-radius: 10px; + transform: scale(0.01); + transform-origin: 234px -10px; + transition: visibility 0s 0.25s, transform 0.25s ease-in; +} + +.cesium-navigation-help-visible { + visibility: visible; + transform: scale(1); + transition: transform 0.25s ease-out; +} + +.cesium-navigation-help-instructions { + border: 1px solid #444; + background-color: rgba(38, 38, 38, 0.75); + padding-bottom: 5px; + border-radius: 0 0 10px 10px; +} + +.cesium-click-navigation-help { + display: none; +} + +.cesium-touch-navigation-help { + display: none; + padding-top: 5px; +} + +.cesium-click-navigation-help-visible { + display: block; +} + +.cesium-touch-navigation-help-visible { + display: block; +} + +.cesium-navigation-help-pan { + color: #66ccff; + font-weight: bold; +} + +.cesium-navigation-help-zoom { + color: #65fd00; + font-weight: bold; +} + +.cesium-navigation-help-rotate { + color: #ffd800; + font-weight: bold; +} + +.cesium-navigation-help-tilt { + color: #d800d8; + font-weight: bold; +} + +.cesium-navigation-help-details { + color: #ffffff; +} + +.cesium-navigation-button { + color: #fff; + background-color: transparent; + border-bottom: none; + border-top: 1px solid #444; + border-right: 1px solid #444; + margin: 0; + width: 50%; + cursor: pointer; +} + +.cesium-navigation-button-icon { + vertical-align: middle; + padding: 5px 1px; +} + +.cesium-navigation-button:focus { + outline: none; +} + +.cesium-navigation-button-left { + border-radius: 10px 0 0 0; + border-left: 1px solid #444; +} + +.cesium-navigation-button-right { + border-radius: 0 10px 0 0; + border-left: none; +} + +.cesium-navigation-button-selected { + background-color: rgba(38, 38, 38, 0.75); +} + +.cesium-navigation-button-unselected { + background-color: rgba(0, 0, 0, 0.75); +} + +.cesium-navigation-button-unselected:hover { + background-color: rgba(76, 76, 76, 0.75); +} diff --git a/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.js b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.js new file mode 100644 index 000000000..89ee1a888 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.js @@ -0,0 +1,275 @@ +import buildModuleUrl from "../../Core/buildModuleUrl.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import NavigationHelpButtonViewModel from "./NavigationHelpButtonViewModel.js"; + +/** + *

The NavigationHelpButton is a single button widget for displaying instructions for + * navigating the globe with the mouse.


+ * + * @alias NavigationHelpButton + * @constructor + * + * @param {Object} options Object with the following properties: + * @param {Element|String} options.container The DOM element or ID that will contain the widget. + * @param {Boolean} [options.instructionsInitiallyVisible=false] True if the navigation instructions should initially be visible; otherwise, false. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * @example + * // In HTML head, include a link to the NavigationHelpButton.css stylesheet, + * // and in the body, include: + * + * var navigationHelpButton = new Cesium.NavigationHelpButton({ + * container : 'navigationHelpButtonContainer' + * }); + */ +function NavigationHelpButton(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options) || !defined(options.container)) { + throw new DeveloperError("options.container is required."); + } + //>>includeEnd('debug'); + + var container = getElement(options.container); + + var viewModel = new NavigationHelpButtonViewModel(); + + var showInsructionsDefault = defaultValue( + options.instructionsInitiallyVisible, + false + ); + viewModel.showInstructions = showInsructionsDefault; + + viewModel._svgPath = + "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z"; + + var wrapper = document.createElement("span"); + wrapper.className = "cesium-navigationHelpButton-wrapper"; + container.appendChild(wrapper); + + var button = document.createElement("button"); + button.type = "button"; + button.className = + "cesium-button cesium-toolbar-button cesium-navigation-help-button"; + button.setAttribute( + "data-bind", + "\ +attr: { title: tooltip },\ +click: command,\ +cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }" + ); + wrapper.appendChild(button); + + var instructionContainer = document.createElement("div"); + instructionContainer.className = "cesium-navigation-help"; + instructionContainer.setAttribute( + "data-bind", + 'css: { "cesium-navigation-help-visible" : showInstructions}' + ); + wrapper.appendChild(instructionContainer); + + var mouseButton = document.createElement("button"); + mouseButton.type = "button"; + mouseButton.className = + "cesium-navigation-button cesium-navigation-button-left"; + mouseButton.setAttribute( + "data-bind", + 'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}' + ); + var mouseIcon = document.createElement("img"); + mouseIcon.src = buildModuleUrl("Widgets/Images/NavigationHelp/Mouse.svg"); + mouseIcon.className = "cesium-navigation-button-icon"; + mouseIcon.style.width = "25px"; + mouseIcon.style.height = "25px"; + mouseButton.appendChild(mouseIcon); + mouseButton.appendChild(document.createTextNode("Mouse")); + + var touchButton = document.createElement("button"); + touchButton.type = "button"; + touchButton.className = + "cesium-navigation-button cesium-navigation-button-right"; + touchButton.setAttribute( + "data-bind", + 'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}' + ); + var touchIcon = document.createElement("img"); + touchIcon.src = buildModuleUrl("Widgets/Images/NavigationHelp/Touch.svg"); + touchIcon.className = "cesium-navigation-button-icon"; + touchIcon.style.width = "25px"; + touchIcon.style.height = "25px"; + touchButton.appendChild(touchIcon); + touchButton.appendChild(document.createTextNode("Touch")); + + instructionContainer.appendChild(mouseButton); + instructionContainer.appendChild(touchButton); + + var clickInstructions = document.createElement("div"); + clickInstructions.className = + "cesium-click-navigation-help cesium-navigation-help-instructions"; + clickInstructions.setAttribute( + "data-bind", + 'css: { "cesium-click-navigation-help-visible" : !_touch}' + ); + clickInstructions.innerHTML = + '\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
\ +
Pan view
\ +
Left click + drag
\ +
\ +
Zoom view
\ +
Right click + drag, or
\ +
Mouse wheel scroll
\ +
\ +
Rotate view
\ +
Middle click + drag, or
\ +
CTRL + Left/Right click + drag
\ +
'; + + instructionContainer.appendChild(clickInstructions); + + var touchInstructions = document.createElement("div"); + touchInstructions.className = + "cesium-touch-navigation-help cesium-navigation-help-instructions"; + touchInstructions.setAttribute( + "data-bind", + 'css: { "cesium-touch-navigation-help-visible" : _touch}' + ); + touchInstructions.innerHTML = + '\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
\ +
Pan view
\ +
One finger drag
\ +
\ +
Zoom view
\ +
Two finger pinch
\ +
\ +
Tilt view
\ +
Two finger drag, same direction
\ +
\ +
Rotate view
\ +
Two finger drag, opposite direction
\ +
'; + + instructionContainer.appendChild(touchInstructions); + + knockout.applyBindings(viewModel, wrapper); + + this._container = container; + this._viewModel = viewModel; + this._wrapper = wrapper; + + this._closeInstructions = function (e) { + if (!wrapper.contains(e.target)) { + viewModel.showInstructions = false; + } + }; + + if (FeatureDetection.supportsPointerEvents()) { + document.addEventListener("pointerdown", this._closeInstructions, true); + } else { + document.addEventListener("mousedown", this._closeInstructions, true); + document.addEventListener("touchstart", this._closeInstructions, true); + } +} + +Object.defineProperties(NavigationHelpButton.prototype, { + /** + * Gets the parent container. + * @memberof NavigationHelpButton.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof NavigationHelpButton.prototype + * + * @type {NavigationHelpButtonViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +NavigationHelpButton.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +NavigationHelpButton.prototype.destroy = function () { + if (FeatureDetection.supportsPointerEvents()) { + document.removeEventListener("pointerdown", this._closeInstructions, true); + } else { + document.removeEventListener("mousedown", this._closeInstructions, true); + document.removeEventListener("touchstart", this._closeInstructions, true); + } + + knockout.cleanNode(this._wrapper); + this._container.removeChild(this._wrapper); + + return destroyObject(this); +}; +export default NavigationHelpButton; diff --git a/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButtonViewModel.js b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButtonViewModel.js new file mode 100644 index 000000000..44fbda058 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/NavigationHelpButtonViewModel.js @@ -0,0 +1,77 @@ +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link NavigationHelpButton}. + * @alias NavigationHelpButtonViewModel + * @constructor + */ +function NavigationHelpButtonViewModel() { + /** + * Gets or sets whether the instructions are currently shown. This property is observable. + * @type {Boolean} + * @default false + */ + this.showInstructions = false; + + var that = this; + this._command = createCommand(function () { + that.showInstructions = !that.showInstructions; + }); + this._showClick = createCommand(function () { + that._touch = false; + }); + this._showTouch = createCommand(function () { + that._touch = true; + }); + + this._touch = false; + + /** + * Gets or sets the tooltip. This property is observable. + * + * @type {String} + */ + this.tooltip = "Navigation Instructions"; + + knockout.track(this, ["tooltip", "showInstructions", "_touch"]); +} + +Object.defineProperties(NavigationHelpButtonViewModel.prototype, { + /** + * Gets the Command that is executed when the button is clicked. + * @memberof NavigationHelpButtonViewModel.prototype + * + * @type {Command} + */ + command: { + get: function () { + return this._command; + }, + }, + + /** + * Gets the Command that is executed when the mouse instructions should be shown. + * @memberof NavigationHelpButtonViewModel.prototype + * + * @type {Command} + */ + showClick: { + get: function () { + return this._showClick; + }, + }, + + /** + * Gets the Command that is executed when the touch instructions should be shown. + * @memberof NavigationHelpButtonViewModel.prototype + * + * @type {Command} + */ + showTouch: { + get: function () { + return this._showTouch; + }, + }, +}); +export default NavigationHelpButtonViewModel; diff --git a/cate/webapi/app/cesium/Widgets/NavigationHelpButton/lighter.css b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/lighter.css new file mode 100644 index 000000000..cab3e40b1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/NavigationHelpButton/lighter.css @@ -0,0 +1,46 @@ +.cesium-lighter .cesium-navigation-help-instructions { + border: 1px solid #759dc0; + background-color: rgba(255, 255, 255, 0.9); +} + +.cesium-lighter .cesium-navigation-help-pan { + color: #66ccee; + font-weight: bold; +} + +.cesium-lighter .cesium-navigation-help-zoom { + color: #65ec00; + font-weight: bold; +} + +.cesium-lighter .cesium-navigation-help-rotate { + color: #eec722; + font-weight: bold; +} + +.cesium-lighter .cesium-navigation-help-tilt { + color: #d800d8; + font-weight: bold; +} + +.cesium-lighter .cesium-navigation-help-details { + color: #222222; +} + +.cesium-lighter .cesium-navigation-button { + color: #222222; + border-top: 1px solid #759dc0; + border-right: 1px solid #759dc0; +} + +.cesium-lighter .cesium-navigation-button-selected { + background-color: rgba(196, 225, 255, 0.9); +} + +.cesium-lighter .cesium-navigation-button-unselected { + background-color: rgba(226, 240, 255, 0.9); +} + +.cesium-lighter .cesium-navigation-button-unselected:hover { + background-color: rgba(166, 210, 255, 0.9); +} diff --git a/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css new file mode 100644 index 000000000..ede8cb4f1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css @@ -0,0 +1,16 @@ +.cesium-performance-watchdog-message-area { + position: relative; + background-color: yellow; + color: black; + padding: 10px; +} + +.cesium-performance-watchdog-message { + margin-right: 30px; +} + +.cesium-performance-watchdog-message-dismiss { + position: absolute; + right: 0; + margin: 0 10px 0 0; +} diff --git a/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.js b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.js new file mode 100644 index 000000000..e24d8c485 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.js @@ -0,0 +1,106 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import PerformanceWatchdogViewModel from "./PerformanceWatchdogViewModel.js"; + +/** + * Monitors performance of the application and displays a message if poor performance is detected. + * + * @alias PerformanceWatchdog + * @constructor + * + * @param {Object} [options] Object with the following properties: + * @param {Element|String} options.container The DOM element or ID that will contain the widget. + * @param {Scene} options.scene The {@link Scene} for which to monitor performance. + * @param {String} [options.lowFrameRateMessage='This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] The + * message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + * it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + */ +function PerformanceWatchdog(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options) || !defined(options.container)) { + throw new DeveloperError("options.container is required."); + } + if (!defined(options.scene)) { + throw new DeveloperError("options.scene is required."); + } + //>>includeEnd('debug'); + + var container = getElement(options.container); + + var viewModel = new PerformanceWatchdogViewModel(options); + + var element = document.createElement("div"); + element.className = "cesium-performance-watchdog-message-area"; + element.setAttribute("data-bind", "visible: showingLowFrameRateMessage"); + + var dismissButton = document.createElement("button"); + dismissButton.setAttribute("type", "button"); + dismissButton.className = "cesium-performance-watchdog-message-dismiss"; + dismissButton.innerHTML = "×"; + dismissButton.setAttribute("data-bind", "click: dismissMessage"); + element.appendChild(dismissButton); + + var message = document.createElement("div"); + message.className = "cesium-performance-watchdog-message"; + message.setAttribute("data-bind", "html: lowFrameRateMessage"); + element.appendChild(message); + + container.appendChild(element); + + knockout.applyBindings(viewModel, element); + + this._container = container; + this._viewModel = viewModel; + this._element = element; +} + +Object.defineProperties(PerformanceWatchdog.prototype, { + /** + * Gets the parent container. + * @memberof PerformanceWatchdog.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof PerformanceWatchdog.prototype + * + * @type {PerformanceWatchdogViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @memberof PerformanceWatchdog + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +PerformanceWatchdog.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + * @memberof PerformanceWatchdog + */ +PerformanceWatchdog.prototype.destroy = function () { + this._viewModel.destroy(); + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + + return destroyObject(this); +}; +export default PerformanceWatchdog; diff --git a/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdogViewModel.js b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdogViewModel.js new file mode 100644 index 000000000..4d6d89688 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdogViewModel.js @@ -0,0 +1,112 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FrameRateMonitor from "../../Scene/FrameRateMonitor.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link PerformanceWatchdog}. + * + * @alias PerformanceWatchdogViewModel + * @constructor + * + * @param {Object} [options] Object with the following properties: + * @param {Scene} options.scene The Scene instance for which to monitor performance. + * @param {String} [options.lowFrameRateMessage='This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] The + * message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + * it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + */ +function PerformanceWatchdogViewModel(options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(options) || !defined(options.scene)) { + throw new DeveloperError("options.scene is required."); + } + //>>includeEnd('debug'); + + this._scene = options.scene; + + /** + * Gets or sets the message to display when a low frame rate is detected. This string will be interpreted as HTML. + * @type {String} + */ + this.lowFrameRateMessage = defaultValue( + options.lowFrameRateMessage, + "This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers." + ); + + /** + * Gets or sets a value indicating whether the low frame rate message has previously been dismissed by the user. If it has + * been dismissed, the message will not be redisplayed, no matter the frame rate. + * @type {Boolean} + */ + this.lowFrameRateMessageDismissed = false; + + /** + * Gets or sets a value indicating whether the low frame rate message is currently being displayed. + * @type {Boolean} + */ + this.showingLowFrameRateMessage = false; + + knockout.track(this, [ + "lowFrameRateMessage", + "lowFrameRateMessageDismissed", + "showingLowFrameRateMessage", + ]); + + var that = this; + this._dismissMessage = createCommand(function () { + that.showingLowFrameRateMessage = false; + that.lowFrameRateMessageDismissed = true; + }); + + var monitor = FrameRateMonitor.fromScene(options.scene); + + this._unsubscribeLowFrameRate = monitor.lowFrameRate.addEventListener( + function () { + if (!that.lowFrameRateMessageDismissed) { + that.showingLowFrameRateMessage = true; + } + } + ); + + this._unsubscribeNominalFrameRate = monitor.nominalFrameRate.addEventListener( + function () { + that.showingLowFrameRateMessage = false; + } + ); +} + +Object.defineProperties(PerformanceWatchdogViewModel.prototype, { + /** + * Gets the {@link Scene} instance for which to monitor performance. + * @memberof PerformanceWatchdogViewModel.prototype + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets a command that dismisses the low frame rate message. Once it is dismissed, the message + * will not be redisplayed. + * @memberof PerformanceWatchdogViewModel.prototype + * @type {Command} + */ + dismissMessage: { + get: function () { + return this._dismissMessage; + }, + }, +}); + +PerformanceWatchdogViewModel.prototype.destroy = function () { + this._unsubscribeLowFrameRate(); + this._unsubscribeNominalFrameRate(); + + return destroyObject(this); +}; +export default PerformanceWatchdogViewModel; diff --git a/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.css b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.css new file mode 100644 index 000000000..80e0ac1cf --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.css @@ -0,0 +1,49 @@ +span.cesium-projectionPicker-wrapper { + display: inline-block; + position: relative; + margin: 0 3px; +} + +.cesium-projectionPicker-visible { + visibility: visible; + opacity: 1; + transition: opacity 0.25s linear; +} + +.cesium-projectionPicker-hidden { + visibility: hidden; + opacity: 0; + transition: visibility 0s 0.25s, opacity 0.25s linear; +} + +.cesium-projectionPicker-wrapper .cesium-projectionPicker-none { + display: none; +} + +.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon { + box-sizing: border-box; + padding: 0; + margin: 3px 0; +} + +.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective, +.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic { + margin: 0 0 3px 0; +} + +.cesium-projectionPicker-wrapper + .cesium-projectionPicker-buttonPerspective + .cesium-projectionPicker-iconOrthographic { + left: 100%; +} + +.cesium-projectionPicker-wrapper + .cesium-projectionPicker-buttonOrthographic + .cesium-projectionPicker-iconPerspective { + left: -100%; +} + +.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected { + border-color: #2e2; + box-shadow: 0 0 8px #fff, 0 0 8px #fff; +} diff --git a/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.js b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.js new file mode 100644 index 000000000..11f28640a --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPicker.js @@ -0,0 +1,175 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import ProjectionPickerViewModel from "./ProjectionPickerViewModel.js"; + +var perspectivePath = + "M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z"; +var orthographicPath = + "m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z"; + +/** + * The ProjectionPicker is a single button widget for switching between perspective and orthographic projections. + * + * @alias ProjectionPicker + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The Scene instance to use. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * @example + * // In HTML head, include a link to the ProjectionPicker.css stylesheet, + * // and in the body, include:
+ * // Note: This code assumes you already have a Scene instance. + * + * var projectionPicker = new Cesium.ProjectionPicker('projectionPickerContainer', scene); + */ +function ProjectionPicker(container, scene) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new ProjectionPickerViewModel(scene); + + viewModel._perspectivePath = perspectivePath; + viewModel._orthographicPath = orthographicPath; + + var wrapper = document.createElement("span"); + wrapper.className = "cesium-projectionPicker-wrapper cesium-toolbar-button"; + container.appendChild(wrapper); + + var button = document.createElement("button"); + button.type = "button"; + button.className = "cesium-button cesium-toolbar-button"; + button.setAttribute( + "data-bind", + '\ +css: { "cesium-projectionPicker-buttonPerspective": !_orthographic,\ + "cesium-projectionPicker-buttonOrthographic": _orthographic,\ + "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, \ + "cesium-projectionPicker-selected": dropDownVisible },\ +attr: { title: selectedTooltip },\ +click: toggleDropDown' + ); + button.innerHTML = + '\ +\ +'; + wrapper.appendChild(button); + + var perspectiveButton = document.createElement("button"); + perspectiveButton.type = "button"; + perspectiveButton.className = + "cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon"; + perspectiveButton.setAttribute( + "data-bind", + '\ +css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic),\ + "cesium-projectionPicker-none" : !_orthographic,\ + "cesium-projectionPicker-hidden" : !dropDownVisible },\ +attr: { title: tooltipPerspective },\ +click: switchToPerspective,\ +cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }' + ); + wrapper.appendChild(perspectiveButton); + + var orthographicButton = document.createElement("button"); + orthographicButton.type = "button"; + orthographicButton.className = + "cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon"; + orthographicButton.setAttribute( + "data-bind", + '\ +css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic),\ + "cesium-projectionPicker-none" : _orthographic,\ + "cesium-projectionPicker-hidden" : !dropDownVisible},\ +attr: { title: tooltipOrthographic },\ +click: switchToOrthographic,\ +cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }' + ); + wrapper.appendChild(orthographicButton); + + knockout.applyBindings(viewModel, wrapper); + + this._viewModel = viewModel; + this._container = container; + this._wrapper = wrapper; + + this._closeDropDown = function (e) { + if (!wrapper.contains(e.target)) { + viewModel.dropDownVisible = false; + } + }; + if (FeatureDetection.supportsPointerEvents()) { + document.addEventListener("pointerdown", this._closeDropDown, true); + } else { + document.addEventListener("mousedown", this._closeDropDown, true); + document.addEventListener("touchstart", this._closeDropDown, true); + } +} + +Object.defineProperties(ProjectionPicker.prototype, { + /** + * Gets the parent container. + * @memberof ProjectionPicker.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof ProjectionPicker.prototype + * + * @type {ProjectionPickerViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +ProjectionPicker.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +ProjectionPicker.prototype.destroy = function () { + this._viewModel.destroy(); + + if (FeatureDetection.supportsPointerEvents()) { + document.removeEventListener("pointerdown", this._closeDropDown, true); + } else { + document.removeEventListener("mousedown", this._closeDropDown, true); + document.removeEventListener("touchstart", this._closeDropDown, true); + } + + knockout.cleanNode(this._wrapper); + this._container.removeChild(this._wrapper); + + return destroyObject(this); +}; +export default ProjectionPicker; diff --git a/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPickerViewModel.js b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPickerViewModel.js new file mode 100644 index 000000000..d5c06af75 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/ProjectionPicker/ProjectionPickerViewModel.js @@ -0,0 +1,201 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import EventHelper from "../../Core/EventHelper.js"; +import OrthographicFrustum from "../../Core/OrthographicFrustum.js"; +import SceneMode from "../../Scene/SceneMode.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link ProjectionPicker}. + * @alias ProjectionPickerViewModel + * @constructor + * + * @param {Scene} scene The Scene to switch projections. + */ +function ProjectionPickerViewModel(scene) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + this._scene = scene; + this._orthographic = scene.camera.frustum instanceof OrthographicFrustum; + this._flightInProgress = false; + + /** + * Gets or sets whether the button drop-down is currently visible. This property is observable. + * @type {Boolean} + * @default false + */ + this.dropDownVisible = false; + + /** + * Gets or sets the perspective projection tooltip. This property is observable. + * @type {String} + * @default 'Perspective Projection' + */ + this.tooltipPerspective = "Perspective Projection"; + + /** + * Gets or sets the orthographic projection tooltip. This property is observable. + * @type {String} + * @default 'Orthographic Projection' + */ + this.tooltipOrthographic = "Orthographic Projection"; + + /** + * Gets the currently active tooltip. This property is observable. + * @type {String} + */ + this.selectedTooltip = undefined; + + /** + * Gets or sets the current SceneMode. This property is observable. + * @type {SceneMode} + */ + this.sceneMode = scene.mode; + + knockout.track(this, [ + "_orthographic", + "_flightInProgress", + "sceneMode", + "dropDownVisible", + "tooltipPerspective", + "tooltipOrthographic", + ]); + + var that = this; + knockout.defineProperty(this, "selectedTooltip", function () { + if (that._orthographic) { + return that.tooltipOrthographic; + } + return that.tooltipPerspective; + }); + + this._toggleDropDown = createCommand(function () { + if (that.sceneMode === SceneMode.SCENE2D || that._flightInProgress) { + return; + } + + that.dropDownVisible = !that.dropDownVisible; + }); + + this._eventHelper = new EventHelper(); + this._eventHelper.add(scene.morphComplete, function ( + transitioner, + oldMode, + newMode, + isMorphing + ) { + that.sceneMode = newMode; + that._orthographic = + newMode === SceneMode.SCENE2D || + that._scene.camera.frustum instanceof OrthographicFrustum; + }); + this._eventHelper.add(scene.preRender, function () { + that._flightInProgress = defined(scene.camera._currentFlight); + }); + + this._switchToPerspective = createCommand(function () { + if (that.sceneMode === SceneMode.SCENE2D) { + return; + } + + that._scene.camera.switchToPerspectiveFrustum(); + that._orthographic = false; + that.dropDownVisible = false; + }); + + this._switchToOrthographic = createCommand(function () { + if (that.sceneMode === SceneMode.SCENE2D) { + return; + } + + that._scene.camera.switchToOrthographicFrustum(); + that._orthographic = true; + that.dropDownVisible = false; + }); + + //Used by knockout + this._sceneMode = SceneMode; +} + +Object.defineProperties(ProjectionPickerViewModel.prototype, { + /** + * Gets the scene + * @memberof ProjectionPickerViewModel.prototype + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets the command to toggle the drop down box. + * @memberof ProjectionPickerViewModel.prototype + * + * @type {Command} + */ + toggleDropDown: { + get: function () { + return this._toggleDropDown; + }, + }, + + /** + * Gets the command to switch to a perspective projection. + * @memberof ProjectionPickerViewModel.prototype + * + * @type {Command} + */ + switchToPerspective: { + get: function () { + return this._switchToPerspective; + }, + }, + + /** + * Gets the command to switch to orthographic projection. + * @memberof ProjectionPickerViewModel.prototype + * + * @type {Command} + */ + switchToOrthographic: { + get: function () { + return this._switchToOrthographic; + }, + }, + + /** + * Gets whether the scene is currently using an orthographic projection. + * @memberof ProjectionPickerViewModel.prototype + * + * @type {Command} + */ + isOrthographicProjection: { + get: function () { + return this._orthographic; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +ProjectionPickerViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the view model. + */ +ProjectionPickerViewModel.prototype.destroy = function () { + this._eventHelper.removeAll(); + destroyObject(this); +}; +export default ProjectionPickerViewModel; diff --git a/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.css b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.css new file mode 100644 index 000000000..85ea72722 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.css @@ -0,0 +1,80 @@ +span.cesium-sceneModePicker-wrapper { + display: inline-block; + position: relative; + margin: 0 3px; +} + +.cesium-sceneModePicker-visible { + visibility: visible; + opacity: 1; + transition: opacity 0.25s linear; +} + +.cesium-sceneModePicker-hidden { + visibility: hidden; + opacity: 0; + transition: visibility 0s 0.25s, opacity 0.25s linear; +} + +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none { + display: none; +} + +.cesium-sceneModePicker-slide-svg { + transition: left 2s; + top: 0; + left: 0; +} + +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon { + box-sizing: border-box; + padding: 0; + margin: 3px 0; +} + +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D, +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView, +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D { + margin: 0 0 3px 0; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-button3D + .cesium-sceneModePicker-icon2D { + left: 100%; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-button3D + .cesium-sceneModePicker-iconColumbusView { + left: 200%; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-buttonColumbusView + .cesium-sceneModePicker-icon3D { + left: -200%; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-buttonColumbusView + .cesium-sceneModePicker-icon2D { + left: -100%; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-button2D + .cesium-sceneModePicker-icon3D { + left: -100%; +} + +.cesium-sceneModePicker-wrapper + .cesium-sceneModePicker-button2D + .cesium-sceneModePicker-iconColumbusView { + left: 100%; +} + +.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected { + border-color: #2e2; + box-shadow: 0 0 8px #fff, 0 0 8px #fff; +} diff --git a/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.js b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.js new file mode 100644 index 000000000..364d0ee36 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePicker.js @@ -0,0 +1,206 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import FeatureDetection from "../../Core/FeatureDetection.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import SceneModePickerViewModel from "./SceneModePickerViewModel.js"; + +var globePath = + "m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 \ + -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 \ + -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 \ + 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z \ + M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 \ + 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 \ + -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z"; +var flatMapPath = + "m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z"; +var columbusViewPath = + "m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z"; + +/** + * + *

The SceneModePicker is a single button widget for switching between scene modes; + * shown to the left in its expanded state. Programatic switching of scene modes will + * be automatically reflected in the widget as long as the specified Scene + * is used to perform the change.


+ * + * @alias SceneModePicker + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The Scene instance to use. + * @param {Number} [duration=2.0] The time, in seconds, it takes for the scene to transition. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * + * @example + * // In HTML head, include a link to the SceneModePicker.css stylesheet, + * // and in the body, include:
+ * // Note: This code assumes you already have a Scene instance. + * + * var sceneModePicker = new Cesium.SceneModePicker('sceneModePickerContainer', scene); + */ +function SceneModePicker(container, scene, duration) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new SceneModePickerViewModel(scene, duration); + + viewModel._globePath = globePath; + viewModel._flatMapPath = flatMapPath; + viewModel._columbusViewPath = columbusViewPath; + + var wrapper = document.createElement("span"); + wrapper.className = "cesium-sceneModePicker-wrapper cesium-toolbar-button"; + container.appendChild(wrapper); + + var button = document.createElement("button"); + button.type = "button"; + button.className = "cesium-button cesium-toolbar-button"; + button.setAttribute( + "data-bind", + '\ +css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D,\ + "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D,\ + "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW,\ + "cesium-sceneModePicker-selected": dropDownVisible },\ +attr: { title: selectedTooltip },\ +click: toggleDropDown' + ); + button.innerHTML = + '\ +\ +\ +'; + wrapper.appendChild(button); + + var morphTo3DButton = document.createElement("button"); + morphTo3DButton.type = "button"; + morphTo3DButton.className = + "cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon"; + morphTo3DButton.setAttribute( + "data-bind", + '\ +css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)),\ + "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D,\ + "cesium-sceneModePicker-hidden" : !dropDownVisible },\ +attr: { title: tooltip3D },\ +click: morphTo3D,\ +cesiumSvgPath: { path: _globePath, width: 64, height: 64 }' + ); + wrapper.appendChild(morphTo3DButton); + + var morphTo2DButton = document.createElement("button"); + morphTo2DButton.type = "button"; + morphTo2DButton.className = + "cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon"; + morphTo2DButton.setAttribute( + "data-bind", + '\ +css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)),\ + "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D,\ + "cesium-sceneModePicker-hidden" : !dropDownVisible },\ +attr: { title: tooltip2D },\ +click: morphTo2D,\ +cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }' + ); + wrapper.appendChild(morphTo2DButton); + + var morphToCVButton = document.createElement("button"); + morphToCVButton.type = "button"; + morphToCVButton.className = + "cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon"; + morphToCVButton.setAttribute( + "data-bind", + '\ +css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)),\ + "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW,\ + "cesium-sceneModePicker-hidden" : !dropDownVisible},\ +attr: { title: tooltipColumbusView },\ +click: morphToColumbusView,\ +cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }' + ); + wrapper.appendChild(morphToCVButton); + + knockout.applyBindings(viewModel, wrapper); + + this._viewModel = viewModel; + this._container = container; + this._wrapper = wrapper; + + this._closeDropDown = function (e) { + if (!wrapper.contains(e.target)) { + viewModel.dropDownVisible = false; + } + }; + if (FeatureDetection.supportsPointerEvents()) { + document.addEventListener("pointerdown", this._closeDropDown, true); + } else { + document.addEventListener("mousedown", this._closeDropDown, true); + document.addEventListener("touchstart", this._closeDropDown, true); + } +} + +Object.defineProperties(SceneModePicker.prototype, { + /** + * Gets the parent container. + * @memberof SceneModePicker.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof SceneModePicker.prototype + * + * @type {SceneModePickerViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +SceneModePicker.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +SceneModePicker.prototype.destroy = function () { + this._viewModel.destroy(); + + if (FeatureDetection.supportsPointerEvents()) { + document.removeEventListener("pointerdown", this._closeDropDown, true); + } else { + document.removeEventListener("mousedown", this._closeDropDown, true); + document.removeEventListener("touchstart", this._closeDropDown, true); + } + + knockout.cleanNode(this._wrapper); + this._container.removeChild(this._wrapper); + + return destroyObject(this); +}; +export default SceneModePicker; diff --git a/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePickerViewModel.js b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePickerViewModel.js new file mode 100644 index 000000000..b86c5eef1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SceneModePicker/SceneModePickerViewModel.js @@ -0,0 +1,214 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import EventHelper from "../../Core/EventHelper.js"; +import SceneMode from "../../Scene/SceneMode.js"; +import knockout from "../../ThirdParty/knockout.js"; +import createCommand from "../createCommand.js"; + +/** + * The view model for {@link SceneModePicker}. + * @alias SceneModePickerViewModel + * @constructor + * + * @param {Scene} scene The Scene to morph + * @param {Number} [duration=2.0] The duration of scene morph animations, in seconds + */ +function SceneModePickerViewModel(scene, duration) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + this._scene = scene; + + var that = this; + + var morphStart = function (transitioner, oldMode, newMode, isMorphing) { + that.sceneMode = newMode; + that.dropDownVisible = false; + }; + + this._eventHelper = new EventHelper(); + this._eventHelper.add(scene.morphStart, morphStart); + + this._duration = defaultValue(duration, 2.0); + + /** + * Gets or sets the current SceneMode. This property is observable. + * @type {SceneMode} + */ + this.sceneMode = scene.mode; + + /** + * Gets or sets whether the button drop-down is currently visible. This property is observable. + * @type {Boolean} + * @default false + */ + this.dropDownVisible = false; + + /** + * Gets or sets the 2D tooltip. This property is observable. + * @type {String} + * @default '2D' + */ + this.tooltip2D = "2D"; + + /** + * Gets or sets the 3D tooltip. This property is observable. + * @type {String} + * @default '3D' + */ + this.tooltip3D = "3D"; + + /** + * Gets or sets the Columbus View tooltip. This property is observable. + * @type {String} + * @default 'Columbus View' + */ + this.tooltipColumbusView = "Columbus View"; + + knockout.track(this, [ + "sceneMode", + "dropDownVisible", + "tooltip2D", + "tooltip3D", + "tooltipColumbusView", + ]); + + /** + * Gets the currently active tooltip. This property is observable. + * @type {String} + */ + this.selectedTooltip = undefined; + knockout.defineProperty(this, "selectedTooltip", function () { + var mode = that.sceneMode; + if (mode === SceneMode.SCENE2D) { + return that.tooltip2D; + } + if (mode === SceneMode.SCENE3D) { + return that.tooltip3D; + } + return that.tooltipColumbusView; + }); + + this._toggleDropDown = createCommand(function () { + that.dropDownVisible = !that.dropDownVisible; + }); + + this._morphTo2D = createCommand(function () { + scene.morphTo2D(that._duration); + }); + + this._morphTo3D = createCommand(function () { + scene.morphTo3D(that._duration); + }); + + this._morphToColumbusView = createCommand(function () { + scene.morphToColumbusView(that._duration); + }); + + //Used by knockout + this._sceneMode = SceneMode; +} + +Object.defineProperties(SceneModePickerViewModel.prototype, { + /** + * Gets the scene + * @memberof SceneModePickerViewModel.prototype + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, + + /** + * Gets or sets the the duration of scene mode transition animations in seconds. + * A value of zero causes the scene to instantly change modes. + * @memberof SceneModePickerViewModel.prototype + * @type {Number} + */ + duration: { + get: function () { + return this._duration; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (value < 0.0) { + throw new DeveloperError("duration value must be positive."); + } + //>>includeEnd('debug'); + + this._duration = value; + }, + }, + + /** + * Gets the command to toggle the drop down box. + * @memberof SceneModePickerViewModel.prototype + * + * @type {Command} + */ + toggleDropDown: { + get: function () { + return this._toggleDropDown; + }, + }, + + /** + * Gets the command to morph to 2D. + * @memberof SceneModePickerViewModel.prototype + * + * @type {Command} + */ + morphTo2D: { + get: function () { + return this._morphTo2D; + }, + }, + + /** + * Gets the command to morph to 3D. + * @memberof SceneModePickerViewModel.prototype + * + * @type {Command} + */ + morphTo3D: { + get: function () { + return this._morphTo3D; + }, + }, + + /** + * Gets the command to morph to Columbus View. + * @memberof SceneModePickerViewModel.prototype + * + * @type {Command} + */ + morphToColumbusView: { + get: function () { + return this._morphToColumbusView; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +SceneModePickerViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the view model. + */ +SceneModePickerViewModel.prototype.destroy = function () { + this._eventHelper.removeAll(); + + destroyObject(this); +}; +export default SceneModePickerViewModel; diff --git a/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.css b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.css new file mode 100644 index 000000000..a73a8ce5a --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.css @@ -0,0 +1,21 @@ +.cesium-selection-wrapper { + position: absolute; + width: 160px; + height: 160px; + pointer-events: none; + visibility: hidden; + opacity: 0; + transition: visibility 0s 0.2s, opacity 0.2s ease-in; +} + +.cesium-selection-wrapper-visible { + visibility: visible; + opacity: 1; + transition: opacity 0.2s ease-out; +} + +.cesium-selection-wrapper svg { + fill: #2e2; + stroke: #000; + stroke-width: 1.1px; +} diff --git a/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.js b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.js new file mode 100644 index 000000000..77602121f --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicator.js @@ -0,0 +1,114 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import SelectionIndicatorViewModel from "./SelectionIndicatorViewModel.js"; + +/** + * A widget for displaying an indicator on a selected object. + * + * @alias SelectionIndicator + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The Scene instance to use. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + */ +function SelectionIndicator(container, scene) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug') + + container = getElement(container); + + this._container = container; + + var el = document.createElement("div"); + el.className = "cesium-selection-wrapper"; + el.setAttribute( + "data-bind", + '\ +style: { "top" : _screenPositionY, "left" : _screenPositionX },\ +css: { "cesium-selection-wrapper-visible" : isVisible }' + ); + container.appendChild(el); + this._element = el; + + var svgNS = "http://www.w3.org/2000/svg"; + var path = + "M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z"; + + var svg = document.createElementNS(svgNS, "svg:svg"); + svg.setAttribute("width", 160); + svg.setAttribute("height", 160); + svg.setAttribute("viewBox", "0 0 160 160"); + + var group = document.createElementNS(svgNS, "g"); + group.setAttribute("transform", "translate(80,80)"); + svg.appendChild(group); + + var pathElement = document.createElementNS(svgNS, "path"); + pathElement.setAttribute("data-bind", "attr: { transform: _transform }"); + pathElement.setAttribute("d", path); + group.appendChild(pathElement); + + el.appendChild(svg); + + var viewModel = new SelectionIndicatorViewModel( + scene, + this._element, + this._container + ); + this._viewModel = viewModel; + + knockout.applyBindings(this._viewModel, this._element); +} + +Object.defineProperties(SelectionIndicator.prototype, { + /** + * Gets the parent container. + * @memberof SelectionIndicator.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof SelectionIndicator.prototype + * + * @type {SelectionIndicatorViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +SelectionIndicator.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +SelectionIndicator.prototype.destroy = function () { + var container = this._container; + knockout.cleanNode(this._element); + container.removeChild(this._element); + return destroyObject(this); +}; +export default SelectionIndicator; diff --git a/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicatorViewModel.js b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicatorViewModel.js new file mode 100644 index 000000000..83ee0ce9a --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SelectionIndicator/SelectionIndicatorViewModel.js @@ -0,0 +1,213 @@ +import Cartesian2 from "../../Core/Cartesian2.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import EasingFunction from "../../Core/EasingFunction.js"; +import SceneTransforms from "../../Scene/SceneTransforms.js"; +import knockout from "../../ThirdParty/knockout.js"; + +var screenSpacePos = new Cartesian2(); +var offScreen = "-1000px"; + +/** + * The view model for {@link SelectionIndicator}. + * @alias SelectionIndicatorViewModel + * @constructor + * + * @param {Scene} scene The scene instance to use for screen-space coordinate conversion. + * @param {Element} selectionIndicatorElement The element containing all elements that make up the selection indicator. + * @param {Element} container The DOM element that contains the widget. + */ +function SelectionIndicatorViewModel( + scene, + selectionIndicatorElement, + container +) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + + if (!defined(selectionIndicatorElement)) { + throw new DeveloperError("selectionIndicatorElement is required."); + } + + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug') + + this._scene = scene; + this._screenPositionX = offScreen; + this._screenPositionY = offScreen; + this._tweens = scene.tweens; + this._container = defaultValue(container, document.body); + this._selectionIndicatorElement = selectionIndicatorElement; + this._scale = 1; + + /** + * Gets or sets the world position of the object for which to display the selection indicator. + * @type {Cartesian3} + */ + this.position = undefined; + + /** + * Gets or sets the visibility of the selection indicator. + * @type {Boolean} + */ + this.showSelection = false; + + knockout.track(this, [ + "position", + "_screenPositionX", + "_screenPositionY", + "_scale", + "showSelection", + ]); + + /** + * Gets the visibility of the position indicator. This can be false even if an + * object is selected, when the selected object has no position. + * @type {Boolean} + */ + this.isVisible = undefined; + knockout.defineProperty(this, "isVisible", { + get: function () { + return this.showSelection && defined(this.position); + }, + }); + + knockout.defineProperty(this, "_transform", { + get: function () { + return "scale(" + this._scale + ")"; + }, + }); + + /** + * Gets or sets the function for converting the world position of the object to the screen space position. + * + * @member + * @type {SelectionIndicatorViewModel.ComputeScreenSpacePosition} + * @default SceneTransforms.wgs84ToWindowCoordinates + * + * @example + * selectionIndicatorViewModel.computeScreenSpacePosition = function(position, result) { + * return Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position, result); + * }; + */ + this.computeScreenSpacePosition = function (position, result) { + return SceneTransforms.wgs84ToWindowCoordinates(scene, position, result); + }; +} + +/** + * Updates the view of the selection indicator to match the position and content properties of the view model. + * This function should be called as part of the render loop. + */ +SelectionIndicatorViewModel.prototype.update = function () { + if (this.showSelection && defined(this.position)) { + var screenPosition = this.computeScreenSpacePosition( + this.position, + screenSpacePos + ); + if (!defined(screenPosition)) { + this._screenPositionX = offScreen; + this._screenPositionY = offScreen; + } else { + var container = this._container; + var containerWidth = container.parentNode.clientWidth; + var containerHeight = container.parentNode.clientHeight; + var indicatorSize = this._selectionIndicatorElement.clientWidth; + var halfSize = indicatorSize * 0.5; + + screenPosition.x = + Math.min( + Math.max(screenPosition.x, -indicatorSize), + containerWidth + indicatorSize + ) - halfSize; + screenPosition.y = + Math.min( + Math.max(screenPosition.y, -indicatorSize), + containerHeight + indicatorSize + ) - halfSize; + + this._screenPositionX = Math.floor(screenPosition.x + 0.25) + "px"; + this._screenPositionY = Math.floor(screenPosition.y + 0.25) + "px"; + } + } +}; + +/** + * Animate the indicator to draw attention to the selection. + */ +SelectionIndicatorViewModel.prototype.animateAppear = function () { + this._tweens.addProperty({ + object: this, + property: "_scale", + startValue: 2, + stopValue: 1, + duration: 0.8, + easingFunction: EasingFunction.EXPONENTIAL_OUT, + }); +}; + +/** + * Animate the indicator to release the selection. + */ +SelectionIndicatorViewModel.prototype.animateDepart = function () { + this._tweens.addProperty({ + object: this, + property: "_scale", + startValue: this._scale, + stopValue: 1.5, + duration: 0.8, + easingFunction: EasingFunction.EXPONENTIAL_OUT, + }); +}; + +Object.defineProperties(SelectionIndicatorViewModel.prototype, { + /** + * Gets the HTML element containing the selection indicator. + * @memberof SelectionIndicatorViewModel.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the HTML element that holds the selection indicator. + * @memberof SelectionIndicatorViewModel.prototype + * + * @type {Element} + */ + selectionIndicatorElement: { + get: function () { + return this._selectionIndicatorElement; + }, + }, + + /** + * Gets the scene being used. + * @memberof SelectionIndicatorViewModel.prototype + * + * @type {Scene} + */ + scene: { + get: function () { + return this._scene; + }, + }, +}); + +/** + * A function that converts the world position of an object to a screen space position. + * @callback SelectionIndicatorViewModel.ComputeScreenSpacePosition + * @param {Cartesian3} position The position in WGS84 (world) coordinates. + * @param {Cartesian2} result An object to return the input position transformed to window coordinates. + * @returns {Cartesian2} The modified result parameter. + */ +export default SelectionIndicatorViewModel; diff --git a/cate/webapi/app/cesium/Widgets/SvgPathBindingHandler.js b/cate/webapi/app/cesium/Widgets/SvgPathBindingHandler.js new file mode 100644 index 000000000..cba2bd5f3 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/SvgPathBindingHandler.js @@ -0,0 +1,78 @@ +var svgNS = "http://www.w3.org/2000/svg"; +var svgClassName = "cesium-svgPath-svg"; + +/** + * A Knockout binding handler that creates a DOM element for a single SVG path. + * This binding handler will be registered as cesiumSvgPath. + * + *

+ * The parameter to this binding is an object with the following properties: + *

+ * + * + * + * @namespace SvgPathBindingHandler + * + * @example + * // Create an SVG as a child of a div + *
+ * + * // parameters can be observable from the view model + *
+ * + * // or the whole object can be observable from the view model + *
+ */ +var SvgPathBindingHandler = { + /** + * @function + */ + register: function (knockout) { + knockout.bindingHandlers.cesiumSvgPath = { + init: function (element, valueAccessor) { + var svg = document.createElementNS(svgNS, "svg:svg"); + svg.setAttribute("class", svgClassName); + + var pathElement = document.createElementNS(svgNS, "path"); + svg.appendChild(pathElement); + + knockout.virtualElements.setDomNodeChildren(element, [svg]); + + knockout.computed({ + read: function () { + var value = knockout.unwrap(valueAccessor()); + + pathElement.setAttribute("d", knockout.unwrap(value.path)); + + var pathWidth = knockout.unwrap(value.width); + var pathHeight = knockout.unwrap(value.height); + + svg.setAttribute("width", pathWidth); + svg.setAttribute("height", pathHeight); + svg.setAttribute("viewBox", "0 0 " + pathWidth + " " + pathHeight); + + if (value.css) { + svg.setAttribute( + "class", + svgClassName + " " + knockout.unwrap(value.css) + ); + } + }, + disposeWhenNodeIsRemoved: element, + }); + + return { + controlsDescendantBindings: true, + }; + }, + }; + + knockout.virtualElements.allowedBindings.cesiumSvgPath = true; + }, +}; +export default SvgPathBindingHandler; diff --git a/cate/webapi/app/cesium/Widgets/Timeline/Timeline.css b/cate/webapi/app/cesium/Widgets/Timeline/Timeline.css new file mode 100644 index 000000000..ead6e56a0 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Timeline/Timeline.css @@ -0,0 +1,110 @@ +.cesium-timeline-main { + position: relative; + left: 0; + bottom: 0; + overflow: hidden; + border: solid 1px #888; +} + +.cesium-timeline-trackContainer { + width: 100%; + overflow: auto; + border-top: solid 1px #888; + position: relative; + top: 0; + left: 0; +} + +.cesium-timeline-tracks { + position: absolute; + top: 0; + left: 0; + width: 100%; +} + +.cesium-timeline-needle { + position: absolute; + left: 0; + top: 1.7em; + bottom: 0; + width: 1px; + background: #f00; +} + +.cesium-timeline-bar { + position: relative; + left: 0; + top: 0; + overflow: hidden; + cursor: pointer; + width: 100%; + height: 1.7em; + background: linear-gradient( + to bottom, + rgba(116, 117, 119, 0.8) 0%, + rgba(58, 68, 82, 0.8) 11%, + rgba(46, 50, 56, 0.8) 46%, + rgba(53, 53, 53, 0.8) 81%, + rgba(53, 53, 53, 0.8) 100% + ); +} + +.cesium-timeline-ruler { + /* NOTE: The label and the ruler must use the same font/size */ + visibility: hidden; + white-space: nowrap; + font-size: 80%; + z-index: -200; +} + +.cesium-timeline-highlight { + position: absolute; + bottom: 0; + left: 0; + background: #08f; +} + +.cesium-timeline-ticLabel { + position: absolute; + top: 0; + left: 0; + white-space: nowrap; + font-size: 80%; + color: #eee; +} + +.cesium-timeline-ticMain { + position: absolute; + bottom: 0; + left: 0; + width: 1px; + height: 50%; + background: #eee; +} + +.cesium-timeline-ticSub { + position: absolute; + bottom: 0; + left: 0; + width: 1px; + height: 33%; + background: #aaa; +} + +.cesium-timeline-ticTiny { + position: absolute; + bottom: 0; + left: 0; + width: 1px; + height: 25%; + background: #888; +} + +.cesium-timeline-icon16 { + display: block; + position: absolute; + width: 16px; + height: 16px; + background-image: url("../Images/TimelineIcons.png"); + background-repeat: no-repeat; +} diff --git a/cate/webapi/app/cesium/Widgets/Timeline/Timeline.js b/cate/webapi/app/cesium/Widgets/Timeline/Timeline.js new file mode 100644 index 000000000..fa2e60f82 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Timeline/Timeline.js @@ -0,0 +1,1034 @@ +import ClockRange from "../../Core/ClockRange.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import JulianDate from "../../Core/JulianDate.js"; +import getElement from "../getElement.js"; +import TimelineHighlightRange from "./TimelineHighlightRange.js"; +import TimelineTrack from "./TimelineTrack.js"; + +var timelineWheelDelta = 1e12; + +var timelineMouseMode = { + none: 0, + scrub: 1, + slide: 2, + zoom: 3, + touchOnly: 4, +}; +var timelineTouchMode = { + none: 0, + scrub: 1, + slideZoom: 2, + singleTap: 3, + ignore: 4, +}; + +var timelineTicScales = [ + 0.001, + 0.002, + 0.005, + 0.01, + 0.02, + 0.05, + 0.1, + 0.25, + 0.5, + 1.0, + 2.0, + 5.0, + 10.0, + 15.0, + 30.0, + 60.0, // 1min + 120.0, // 2min + 300.0, // 5min + 600.0, // 10min + 900.0, // 15min + 1800.0, // 30min + 3600.0, // 1hr + 7200.0, // 2hr + 14400.0, // 4hr + 21600.0, // 6hr + 43200.0, // 12hr + 86400.0, // 24hr + 172800.0, // 2days + 345600.0, // 4days + 604800.0, // 7days + 1296000.0, // 15days + 2592000.0, // 30days + 5184000.0, // 60days + 7776000.0, // 90days + 15552000.0, // 180days + 31536000.0, // 365days + 63072000.0, // 2years + 126144000.0, // 4years + 157680000.0, // 5years + 315360000.0, // 10years + 630720000.0, // 20years + 1261440000.0, // 40years + 1576800000.0, // 50years + 3153600000.0, // 100years + 6307200000.0, // 200years + 12614400000.0, // 400years + 15768000000.0, // 500years + 31536000000.0, // 1000years +]; + +var timelineMonthNames = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; + +/** + * The Timeline is a widget for displaying and controlling the current scene time. + * @alias Timeline + * @constructor + * + * @param {Element} container The parent HTML container node for this widget. + * @param {Clock} clock The clock to use. + */ +function Timeline(container, clock) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + if (!defined(clock)) { + throw new DeveloperError("clock is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var ownerDocument = container.ownerDocument; + + /** + * Gets the parent container. + * @type {Element} + */ + this.container = container; + + var topDiv = ownerDocument.createElement("div"); + topDiv.className = "cesium-timeline-main"; + container.appendChild(topDiv); + this._topDiv = topDiv; + + this._endJulian = undefined; + this._epochJulian = undefined; + this._lastXPos = undefined; + this._scrubElement = undefined; + this._startJulian = undefined; + this._timeBarSecondsSpan = undefined; + this._clock = clock; + this._scrubJulian = clock.currentTime; + this._mainTicSpan = -1; + this._mouseMode = timelineMouseMode.none; + this._touchMode = timelineTouchMode.none; + this._touchState = { + centerX: 0, + spanX: 0, + }; + this._mouseX = 0; + this._timelineDrag = 0; + this._timelineDragLocation = undefined; + this._lastHeight = undefined; + this._lastWidth = undefined; + + this._topDiv.innerHTML = + '
' + + '' + + '
'; + this._timeBarEle = this._topDiv.childNodes[0]; + this._trackContainer = this._topDiv.childNodes[1]; + this._trackListEle = this._topDiv.childNodes[1].childNodes[0]; + this._needleEle = this._topDiv.childNodes[2]; + this._rulerEle = this._topDiv.childNodes[3]; + this._context = this._trackListEle.getContext("2d"); + + this._trackList = []; + this._highlightRanges = []; + + this.zoomTo(clock.startTime, clock.stopTime); + + this._onMouseDown = createMouseDownCallback(this); + this._onMouseUp = createMouseUpCallback(this); + this._onMouseMove = createMouseMoveCallback(this); + this._onMouseWheel = createMouseWheelCallback(this); + this._onTouchStart = createTouchStartCallback(this); + this._onTouchMove = createTouchMoveCallback(this); + this._onTouchEnd = createTouchEndCallback(this); + + var timeBarEle = this._timeBarEle; + ownerDocument.addEventListener("mouseup", this._onMouseUp, false); + ownerDocument.addEventListener("mousemove", this._onMouseMove, false); + timeBarEle.addEventListener("mousedown", this._onMouseDown, false); + timeBarEle.addEventListener("DOMMouseScroll", this._onMouseWheel, false); // Mozilla mouse wheel + timeBarEle.addEventListener("mousewheel", this._onMouseWheel, false); + timeBarEle.addEventListener("touchstart", this._onTouchStart, false); + timeBarEle.addEventListener("touchmove", this._onTouchMove, false); + timeBarEle.addEventListener("touchend", this._onTouchEnd, false); + timeBarEle.addEventListener("touchcancel", this._onTouchEnd, false); + + this._topDiv.oncontextmenu = function () { + return false; + }; + + clock.onTick.addEventListener(this.updateFromClock, this); + this.updateFromClock(); +} + +/** + * @private + */ +Timeline.prototype.addEventListener = function (type, listener, useCapture) { + this._topDiv.addEventListener(type, listener, useCapture); +}; + +/** + * @private + */ +Timeline.prototype.removeEventListener = function (type, listener, useCapture) { + this._topDiv.removeEventListener(type, listener, useCapture); +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Timeline.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +Timeline.prototype.destroy = function () { + this._clock.onTick.removeEventListener(this.updateFromClock, this); + + var doc = this.container.ownerDocument; + doc.removeEventListener("mouseup", this._onMouseUp, false); + doc.removeEventListener("mousemove", this._onMouseMove, false); + + var timeBarEle = this._timeBarEle; + timeBarEle.removeEventListener("mousedown", this._onMouseDown, false); + timeBarEle.removeEventListener("DOMMouseScroll", this._onMouseWheel, false); // Mozilla mouse wheel + timeBarEle.removeEventListener("mousewheel", this._onMouseWheel, false); + timeBarEle.removeEventListener("touchstart", this._onTouchStart, false); + timeBarEle.removeEventListener("touchmove", this._onTouchMove, false); + timeBarEle.removeEventListener("touchend", this._onTouchEnd, false); + timeBarEle.removeEventListener("touchcancel", this._onTouchEnd, false); + this.container.removeChild(this._topDiv); + destroyObject(this); +}; + +/** + * @private + */ +Timeline.prototype.addHighlightRange = function (color, heightInPx, base) { + var newHighlightRange = new TimelineHighlightRange(color, heightInPx, base); + this._highlightRanges.push(newHighlightRange); + this.resize(); + return newHighlightRange; +}; + +/** + * @private + */ +Timeline.prototype.addTrack = function ( + interval, + heightInPx, + color, + backgroundColor +) { + var newTrack = new TimelineTrack( + interval, + heightInPx, + color, + backgroundColor + ); + this._trackList.push(newTrack); + this._lastHeight = undefined; + this.resize(); + return newTrack; +}; + +/** + * Sets the view to the provided times. + * + * @param {JulianDate} startTime The start time. + * @param {JulianDate} stopTime The stop time. + */ +Timeline.prototype.zoomTo = function (startTime, stopTime) { + //>>includeStart('debug', pragmas.debug); + if (!defined(startTime)) { + throw new DeveloperError("startTime is required."); + } + if (!defined(stopTime)) { + throw new DeveloperError("stopTime is required"); + } + if (JulianDate.lessThanOrEquals(stopTime, startTime)) { + throw new DeveloperError("Start time must come before end time."); + } + //>>includeEnd('debug'); + + this._startJulian = startTime; + this._endJulian = stopTime; + this._timeBarSecondsSpan = JulianDate.secondsDifference(stopTime, startTime); + + // If clock is not unbounded, clamp timeline range to clock. + if (this._clock && this._clock.clockRange !== ClockRange.UNBOUNDED) { + var clockStart = this._clock.startTime; + var clockEnd = this._clock.stopTime; + var clockSpan = JulianDate.secondsDifference(clockEnd, clockStart); + var startOffset = JulianDate.secondsDifference( + clockStart, + this._startJulian + ); + var endOffset = JulianDate.secondsDifference(clockEnd, this._endJulian); + + if (this._timeBarSecondsSpan >= clockSpan) { + // if new duration longer than clock range duration, clamp to full range. + this._timeBarSecondsSpan = clockSpan; + this._startJulian = this._clock.startTime; + this._endJulian = this._clock.stopTime; + } else if (startOffset > 0) { + // if timeline start is before clock start, shift right + this._endJulian = JulianDate.addSeconds( + this._endJulian, + startOffset, + new JulianDate() + ); + this._startJulian = clockStart; + this._timeBarSecondsSpan = JulianDate.secondsDifference( + this._endJulian, + this._startJulian + ); + } else if (endOffset < 0) { + // if timeline end is after clock end, shift left + this._startJulian = JulianDate.addSeconds( + this._startJulian, + endOffset, + new JulianDate() + ); + this._endJulian = clockEnd; + this._timeBarSecondsSpan = JulianDate.secondsDifference( + this._endJulian, + this._startJulian + ); + } + } + + this._makeTics(); + + var evt = document.createEvent("Event"); + evt.initEvent("setzoom", true, true); + evt.startJulian = this._startJulian; + evt.endJulian = this._endJulian; + evt.epochJulian = this._epochJulian; + evt.totalSpan = this._timeBarSecondsSpan; + evt.mainTicSpan = this._mainTicSpan; + this._topDiv.dispatchEvent(evt); +}; + +/** + * @private + */ +Timeline.prototype.zoomFrom = function (amount) { + var centerSec = JulianDate.secondsDifference( + this._scrubJulian, + this._startJulian + ); + if (amount > 1 || centerSec < 0 || centerSec > this._timeBarSecondsSpan) { + centerSec = this._timeBarSecondsSpan * 0.5; + } else { + centerSec += centerSec - this._timeBarSecondsSpan * 0.5; + } + var centerSecFlip = this._timeBarSecondsSpan - centerSec; + this.zoomTo( + JulianDate.addSeconds( + this._startJulian, + centerSec - centerSec * amount, + new JulianDate() + ), + JulianDate.addSeconds( + this._endJulian, + centerSecFlip * amount - centerSecFlip, + new JulianDate() + ) + ); +}; + +function twoDigits(num) { + return num < 10 ? "0" + num.toString() : num.toString(); +} + +/** + * @private + */ +Timeline.prototype.makeLabel = function (time) { + var gregorian = JulianDate.toGregorianDate(time); + var millisecond = gregorian.millisecond, + millisecondString = " UTC"; + if (millisecond > 0 && this._timeBarSecondsSpan < 3600) { + millisecondString = Math.floor(millisecond).toString(); + while (millisecondString.length < 3) { + millisecondString = "0" + millisecondString; + } + millisecondString = "." + millisecondString; + } + + return ( + timelineMonthNames[gregorian.month - 1] + + " " + + gregorian.day + + " " + + gregorian.year + + " " + + twoDigits(gregorian.hour) + + ":" + + twoDigits(gregorian.minute) + + ":" + + twoDigits(gregorian.second) + + millisecondString + ); +}; + +/** + * @private + */ +Timeline.prototype.smallestTicInPixels = 7.0; + +/** + * @private + */ +Timeline.prototype._makeTics = function () { + var timeBar = this._timeBarEle; + + var seconds = JulianDate.secondsDifference( + this._scrubJulian, + this._startJulian + ); + var xPos = Math.round( + (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan + ); + var scrubX = xPos - 8, + tic; + var widget = this; + + this._needleEle.style.left = xPos.toString() + "px"; + + var tics = ""; + + var minimumDuration = 0.01; + var maximumDuration = 31536000000.0; // ~1000 years + var epsilon = 1e-10; + + // If time step size is known, enter it here... + var minSize = 0; + + var duration = this._timeBarSecondsSpan; + if (duration < minimumDuration) { + duration = minimumDuration; + this._timeBarSecondsSpan = minimumDuration; + this._endJulian = JulianDate.addSeconds( + this._startJulian, + minimumDuration, + new JulianDate() + ); + } else if (duration > maximumDuration) { + duration = maximumDuration; + this._timeBarSecondsSpan = maximumDuration; + this._endJulian = JulianDate.addSeconds( + this._startJulian, + maximumDuration, + new JulianDate() + ); + } + + var timeBarWidth = this._timeBarEle.clientWidth; + if (timeBarWidth < 10) { + timeBarWidth = 10; + } + var startJulian = this._startJulian; + + // epsilonTime: a small fraction of one pixel width of the timeline, measured in seconds. + var epsilonTime = Math.min((duration / timeBarWidth) * 1e-5, 0.4); + + // epochJulian: a nearby time to be considered "zero seconds", should be a round-ish number by human standards. + var epochJulian; + var gregorianDate = JulianDate.toGregorianDate(startJulian); + if (duration > 315360000) { + // 3650+ days visible, epoch is start of the first visible century. + epochJulian = JulianDate.fromDate( + new Date(Date.UTC(Math.floor(gregorianDate.year / 100) * 100, 0)) + ); + } else if (duration > 31536000) { + // 365+ days visible, epoch is start of the first visible decade. + epochJulian = JulianDate.fromDate( + new Date(Date.UTC(Math.floor(gregorianDate.year / 10) * 10, 0)) + ); + } else if (duration > 86400) { + // 1+ day(s) visible, epoch is start of the year. + epochJulian = JulianDate.fromDate( + new Date(Date.UTC(gregorianDate.year, 0)) + ); + } else { + // Less than a day on timeline, epoch is midnight of the visible day. + epochJulian = JulianDate.fromDate( + new Date( + Date.UTC(gregorianDate.year, gregorianDate.month, gregorianDate.day) + ) + ); + } + + // startTime: Seconds offset of the left side of the timeline from epochJulian. + var startTime = JulianDate.secondsDifference( + this._startJulian, + JulianDate.addSeconds(epochJulian, epsilonTime, new JulianDate()) + ); + // endTime: Seconds offset of the right side of the timeline from epochJulian. + var endTime = startTime + duration; + this._epochJulian = epochJulian; + + function getStartTic(ticScale) { + return Math.floor(startTime / ticScale) * ticScale; + } + + function getNextTic(tic, ticScale) { + return Math.ceil(tic / ticScale + 0.5) * ticScale; + } + + function getAlpha(time) { + return (time - startTime) / duration; + } + + function remainder(x, y) { + //return x % y; + return x - y * Math.round(x / y); + } + + // Width in pixels of a typical label, plus padding + this._rulerEle.innerHTML = this.makeLabel( + JulianDate.addSeconds(this._endJulian, -minimumDuration, new JulianDate()) + ); + var sampleWidth = this._rulerEle.offsetWidth + 20; + if (sampleWidth < 30) { + // Workaround an apparent IE bug with measuring the width after going full-screen from inside an iframe. + sampleWidth = 180; + } + + var origMinSize = minSize; + minSize -= epsilon; + + var renderState = { + startTime: startTime, + startJulian: startJulian, + epochJulian: epochJulian, + duration: duration, + timeBarWidth: timeBarWidth, + getAlpha: getAlpha, + }; + this._highlightRanges.forEach(function (highlightRange) { + tics += highlightRange.render(renderState); + }); + + // Calculate tic mark label spacing in the TimeBar. + var mainTic = 0.0, + subTic = 0.0, + tinyTic = 0.0; + // Ideal labeled tic as percentage of zoom interval + var idealTic = sampleWidth / timeBarWidth; + if (idealTic > 1.0) { + // Clamp to width of window, for thin windows. + idealTic = 1.0; + } + // Ideal labeled tic size in seconds + idealTic *= this._timeBarSecondsSpan; + var ticIndex = -1, + smallestIndex = -1; + + var i, + ticScaleLen = timelineTicScales.length; + for (i = 0; i < ticScaleLen; ++i) { + var sc = timelineTicScales[i]; + ++ticIndex; + mainTic = sc; + // Find acceptable main tic size not smaller than ideal size. + if (sc > idealTic && sc > minSize) { + break; + } + if ( + smallestIndex < 0 && + timeBarWidth * (sc / this._timeBarSecondsSpan) >= this.smallestTicInPixels + ) { + smallestIndex = ticIndex; + } + } + if (ticIndex > 0) { + while (ticIndex > 0) { + // Compute sub-tic size that evenly divides main tic. + --ticIndex; + if (Math.abs(remainder(mainTic, timelineTicScales[ticIndex])) < 0.00001) { + if (timelineTicScales[ticIndex] >= minSize) { + subTic = timelineTicScales[ticIndex]; + } + break; + } + } + + if (smallestIndex >= 0) { + while (smallestIndex < ticIndex) { + // Compute tiny tic size that evenly divides sub-tic. + if ( + Math.abs(remainder(subTic, timelineTicScales[smallestIndex])) < + 0.00001 && + timelineTicScales[smallestIndex] >= minSize + ) { + tinyTic = timelineTicScales[smallestIndex]; + break; + } + ++smallestIndex; + } + } + } + + minSize = origMinSize; + if ( + minSize > epsilon && + tinyTic < 0.00001 && + Math.abs(minSize - mainTic) > epsilon + ) { + tinyTic = minSize; + if (minSize <= mainTic + epsilon) { + subTic = 0.0; + } + } + + var lastTextLeft = -999999, + textWidth; + if (timeBarWidth * (tinyTic / this._timeBarSecondsSpan) >= 3.0) { + for ( + tic = getStartTic(tinyTic); + tic <= endTime; + tic = getNextTic(tic, tinyTic) + ) { + tics += + ''; + } + } + if (timeBarWidth * (subTic / this._timeBarSecondsSpan) >= 3.0) { + for ( + tic = getStartTic(subTic); + tic <= endTime; + tic = getNextTic(tic, subTic) + ) { + tics += + ''; + } + } + if (timeBarWidth * (mainTic / this._timeBarSecondsSpan) >= 2.0) { + this._mainTicSpan = mainTic; + endTime += mainTic; + tic = getStartTic(mainTic); + var leapSecond = JulianDate.computeTaiMinusUtc(epochJulian); + while (tic <= endTime) { + var ticTime = JulianDate.addSeconds( + startJulian, + tic - startTime, + new JulianDate() + ); + if (mainTic > 2.1) { + var ticLeap = JulianDate.computeTaiMinusUtc(ticTime); + if (Math.abs(ticLeap - leapSecond) > 0.1) { + tic += ticLeap - leapSecond; + ticTime = JulianDate.addSeconds( + startJulian, + tic - startTime, + new JulianDate() + ); + } + } + var ticLeft = Math.round(timeBarWidth * getAlpha(tic)); + var ticLabel = this.makeLabel(ticTime); + this._rulerEle.innerHTML = ticLabel; + textWidth = this._rulerEle.offsetWidth; + if (textWidth < 10) { + // IE iframe fullscreen sampleWidth workaround, continued. + textWidth = sampleWidth; + } + var labelLeft = ticLeft - (textWidth / 2 - 1); + if (labelLeft > lastTextLeft) { + lastTextLeft = labelLeft + textWidth + 5; + tics += + '' + + '' + + ticLabel + + ""; + } else { + tics += + ''; + } + tic = getNextTic(tic, mainTic); + } + } else { + this._mainTicSpan = -1; + } + + tics += + ''; + timeBar.innerHTML = tics; + this._scrubElement = timeBar.lastChild; + + // Clear track canvas. + this._context.clearRect( + 0, + 0, + this._trackListEle.width, + this._trackListEle.height + ); + + renderState.y = 0; + this._trackList.forEach(function (track) { + track.render(widget._context, renderState); + renderState.y += track.height; + }); +}; + +/** + * @private + */ +Timeline.prototype.updateFromClock = function () { + this._scrubJulian = this._clock.currentTime; + var scrubElement = this._scrubElement; + if (defined(this._scrubElement)) { + var seconds = JulianDate.secondsDifference( + this._scrubJulian, + this._startJulian + ); + var xPos = Math.round( + (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan + ); + + if (this._lastXPos !== xPos) { + this._lastXPos = xPos; + + scrubElement.style.left = xPos - 8 + "px"; + this._needleEle.style.left = xPos + "px"; + } + } + if (defined(this._timelineDragLocation)) { + this._setTimeBarTime( + this._timelineDragLocation, + (this._timelineDragLocation * this._timeBarSecondsSpan) / + this._topDiv.clientWidth + ); + this.zoomTo( + JulianDate.addSeconds( + this._startJulian, + this._timelineDrag, + new JulianDate() + ), + JulianDate.addSeconds( + this._endJulian, + this._timelineDrag, + new JulianDate() + ) + ); + } +}; + +/** + * @private + */ +Timeline.prototype._setTimeBarTime = function (xPos, seconds) { + xPos = Math.round(xPos); + this._scrubJulian = JulianDate.addSeconds( + this._startJulian, + seconds, + new JulianDate() + ); + if (this._scrubElement) { + var scrubX = xPos - 8; + this._scrubElement.style.left = scrubX.toString() + "px"; + this._needleEle.style.left = xPos.toString() + "px"; + } + + var evt = document.createEvent("Event"); + evt.initEvent("settime", true, true); + evt.clientX = xPos; + evt.timeSeconds = seconds; + evt.timeJulian = this._scrubJulian; + evt.clock = this._clock; + this._topDiv.dispatchEvent(evt); +}; + +function createMouseDownCallback(timeline) { + return function (e) { + if (timeline._mouseMode !== timelineMouseMode.touchOnly) { + if (e.button === 0) { + timeline._mouseMode = timelineMouseMode.scrub; + if (timeline._scrubElement) { + timeline._scrubElement.style.backgroundPosition = "-16px 0"; + } + timeline._onMouseMove(e); + } else { + timeline._mouseX = e.clientX; + if (e.button === 2) { + timeline._mouseMode = timelineMouseMode.zoom; + } else { + timeline._mouseMode = timelineMouseMode.slide; + } + } + } + e.preventDefault(); + }; +} + +function createMouseUpCallback(timeline) { + return function (e) { + timeline._mouseMode = timelineMouseMode.none; + if (timeline._scrubElement) { + timeline._scrubElement.style.backgroundPosition = "0 0"; + } + timeline._timelineDrag = 0; + timeline._timelineDragLocation = undefined; + }; +} + +function createMouseMoveCallback(timeline) { + return function (e) { + var dx; + if (timeline._mouseMode === timelineMouseMode.scrub) { + e.preventDefault(); + var x = e.clientX - timeline._topDiv.getBoundingClientRect().left; + + if (x < 0) { + timeline._timelineDragLocation = 0; + timeline._timelineDrag = -0.01 * timeline._timeBarSecondsSpan; + } else if (x > timeline._topDiv.clientWidth) { + timeline._timelineDragLocation = timeline._topDiv.clientWidth; + timeline._timelineDrag = 0.01 * timeline._timeBarSecondsSpan; + } else { + timeline._timelineDragLocation = undefined; + timeline._setTimeBarTime( + x, + (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth + ); + } + } else if (timeline._mouseMode === timelineMouseMode.slide) { + dx = timeline._mouseX - e.clientX; + timeline._mouseX = e.clientX; + if (dx !== 0) { + var dsec = + (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth; + timeline.zoomTo( + JulianDate.addSeconds(timeline._startJulian, dsec, new JulianDate()), + JulianDate.addSeconds(timeline._endJulian, dsec, new JulianDate()) + ); + } + } else if (timeline._mouseMode === timelineMouseMode.zoom) { + dx = timeline._mouseX - e.clientX; + timeline._mouseX = e.clientX; + if (dx !== 0) { + timeline.zoomFrom(Math.pow(1.01, dx)); + } + } + }; +} + +function createMouseWheelCallback(timeline) { + return function (e) { + var dy = e.wheelDeltaY || e.wheelDelta || -e.detail; + timelineWheelDelta = Math.max( + Math.min(Math.abs(dy), timelineWheelDelta), + 1 + ); + dy /= timelineWheelDelta; + timeline.zoomFrom(Math.pow(1.05, -dy)); + }; +} + +function createTouchStartCallback(timeline) { + return function (e) { + var len = e.touches.length, + seconds, + xPos, + leftX = timeline._topDiv.getBoundingClientRect().left; + e.preventDefault(); + timeline._mouseMode = timelineMouseMode.touchOnly; + if (len === 1) { + seconds = JulianDate.secondsDifference( + timeline._scrubJulian, + timeline._startJulian + ); + xPos = Math.round( + (seconds * timeline._topDiv.clientWidth) / + timeline._timeBarSecondsSpan + + leftX + ); + if (Math.abs(e.touches[0].clientX - xPos) < 50) { + timeline._touchMode = timelineTouchMode.scrub; + if (timeline._scrubElement) { + timeline._scrubElement.style.backgroundPosition = + len === 1 ? "-16px 0" : "0 0"; + } + } else { + timeline._touchMode = timelineTouchMode.singleTap; + timeline._touchState.centerX = e.touches[0].clientX - leftX; + } + } else if (len === 2) { + timeline._touchMode = timelineTouchMode.slideZoom; + timeline._touchState.centerX = + (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX; + timeline._touchState.spanX = Math.abs( + e.touches[0].clientX - e.touches[1].clientX + ); + } else { + timeline._touchMode = timelineTouchMode.ignore; + } + }; +} + +function createTouchEndCallback(timeline) { + return function (e) { + var len = e.touches.length, + leftX = timeline._topDiv.getBoundingClientRect().left; + if (timeline._touchMode === timelineTouchMode.singleTap) { + timeline._touchMode = timelineTouchMode.scrub; + timeline._onTouchMove(e); + } else if (timeline._touchMode === timelineTouchMode.scrub) { + timeline._onTouchMove(e); + } + timeline._mouseMode = timelineMouseMode.touchOnly; + if (len !== 1) { + timeline._touchMode = + len > 0 ? timelineTouchMode.ignore : timelineTouchMode.none; + } else if (timeline._touchMode === timelineTouchMode.slideZoom) { + timeline._touchState.centerX = e.touches[0].clientX - leftX; + } + if (timeline._scrubElement) { + timeline._scrubElement.style.backgroundPosition = "0 0"; + } + }; +} + +function createTouchMoveCallback(timeline) { + return function (e) { + var dx, + x, + len, + newCenter, + newSpan, + newStartTime, + zoom = 1, + leftX = timeline._topDiv.getBoundingClientRect().left; + if (timeline._touchMode === timelineTouchMode.singleTap) { + timeline._touchMode = timelineTouchMode.slideZoom; + } + timeline._mouseMode = timelineMouseMode.touchOnly; + if (timeline._touchMode === timelineTouchMode.scrub) { + e.preventDefault(); + if (e.changedTouches.length === 1) { + x = e.changedTouches[0].clientX - leftX; + if (x >= 0 && x <= timeline._topDiv.clientWidth) { + timeline._setTimeBarTime( + x, + (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth + ); + } + } + } else if (timeline._touchMode === timelineTouchMode.slideZoom) { + len = e.touches.length; + if (len === 2) { + newCenter = (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX; + newSpan = Math.abs(e.touches[0].clientX - e.touches[1].clientX); + } else if (len === 1) { + newCenter = e.touches[0].clientX - leftX; + newSpan = 0; + } + + if (defined(newCenter)) { + if (newSpan > 0 && timeline._touchState.spanX > 0) { + // Zoom and slide + zoom = timeline._touchState.spanX / newSpan; + newStartTime = JulianDate.addSeconds( + timeline._startJulian, + (timeline._touchState.centerX * timeline._timeBarSecondsSpan - + newCenter * timeline._timeBarSecondsSpan * zoom) / + timeline._topDiv.clientWidth, + new JulianDate() + ); + } else { + // Slide to newCenter + dx = timeline._touchState.centerX - newCenter; + newStartTime = JulianDate.addSeconds( + timeline._startJulian, + (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth, + new JulianDate() + ); + } + + timeline.zoomTo( + newStartTime, + JulianDate.addSeconds( + newStartTime, + timeline._timeBarSecondsSpan * zoom, + new JulianDate() + ) + ); + timeline._touchState.centerX = newCenter; + timeline._touchState.spanX = newSpan; + } + } + }; +} + +/** + * Resizes the widget to match the container size. + */ +Timeline.prototype.resize = function () { + var width = this.container.clientWidth; + var height = this.container.clientHeight; + + if (width === this._lastWidth && height === this._lastHeight) { + return; + } + + this._trackContainer.style.height = height + "px"; + + var trackListHeight = 1; + this._trackList.forEach(function (track) { + trackListHeight += track.height; + }); + this._trackListEle.style.height = trackListHeight.toString() + "px"; + this._trackListEle.width = this._trackListEle.clientWidth; + this._trackListEle.height = trackListHeight; + this._makeTics(); + + this._lastXPos = undefined; + this._lastWidth = width; + this._lastHeight = height; +}; +export default Timeline; diff --git a/cate/webapi/app/cesium/Widgets/Timeline/TimelineHighlightRange.js b/cate/webapi/app/cesium/Widgets/Timeline/TimelineHighlightRange.js new file mode 100644 index 000000000..ba717d1f6 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Timeline/TimelineHighlightRange.js @@ -0,0 +1,76 @@ +import defaultValue from "../../Core/defaultValue.js"; +import JulianDate from "../../Core/JulianDate.js"; + +/** + * @private + */ +function TimelineHighlightRange(color, heightInPx, base) { + this._color = color; + this._height = heightInPx; + this._base = defaultValue(base, 0); +} + +TimelineHighlightRange.prototype.getHeight = function () { + return this._height; +}; + +TimelineHighlightRange.prototype.getBase = function () { + return this._base; +}; + +TimelineHighlightRange.prototype.getStartTime = function () { + return this._start; +}; + +TimelineHighlightRange.prototype.getStopTime = function () { + return this._stop; +}; + +TimelineHighlightRange.prototype.setRange = function (start, stop) { + this._start = start; + this._stop = stop; +}; + +TimelineHighlightRange.prototype.render = function (renderState) { + var range = ""; + if (this._start && this._stop && this._color) { + var highlightStart = JulianDate.secondsDifference( + this._start, + renderState.epochJulian + ); + var highlightLeft = Math.round( + renderState.timeBarWidth * renderState.getAlpha(highlightStart) + ); + var highlightStop = JulianDate.secondsDifference( + this._stop, + renderState.epochJulian + ); + var highlightWidth = + Math.round( + renderState.timeBarWidth * renderState.getAlpha(highlightStop) + ) - highlightLeft; + if (highlightLeft < 0) { + highlightWidth += highlightLeft; + highlightLeft = 0; + } + if (highlightLeft + highlightWidth > renderState.timeBarWidth) { + highlightWidth = renderState.timeBarWidth - highlightLeft; + } + if (highlightWidth > 0) { + range = + ''; + } + } + return range; +}; +export default TimelineHighlightRange; diff --git a/cate/webapi/app/cesium/Widgets/Timeline/TimelineTrack.js b/cate/webapi/app/cesium/Widgets/Timeline/TimelineTrack.js new file mode 100644 index 000000000..079db4d01 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Timeline/TimelineTrack.js @@ -0,0 +1,76 @@ +import Color from "../../Core/Color.js"; +import defined from "../../Core/defined.js"; +import JulianDate from "../../Core/JulianDate.js"; + +/** + * @private + */ +function TimelineTrack(interval, pixelHeight, color, backgroundColor) { + this.interval = interval; + this.height = pixelHeight; + this.color = color || new Color(0.5, 0.5, 0.5, 1.0); + this.backgroundColor = backgroundColor || new Color(0.0, 0.0, 0.0, 0.0); +} + +TimelineTrack.prototype.render = function (context, renderState) { + var startInterval = this.interval.start; + var stopInterval = this.interval.stop; + + var spanStart = renderState.startJulian; + var spanStop = JulianDate.addSeconds( + renderState.startJulian, + renderState.duration, + new JulianDate() + ); + + if ( + JulianDate.lessThan(startInterval, spanStart) && + JulianDate.greaterThan(stopInterval, spanStop) + ) { + //The track takes up the entire visible span. + context.fillStyle = this.color.toCssColorString(); + context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height); + } else if ( + JulianDate.lessThanOrEquals(startInterval, spanStop) && + JulianDate.greaterThanOrEquals(stopInterval, spanStart) + ) { + //The track only takes up some of the visible span, compute that span. + var x; + var start, stop; + for (x = 0; x < renderState.timeBarWidth; ++x) { + var currentTime = JulianDate.addSeconds( + renderState.startJulian, + (x / renderState.timeBarWidth) * renderState.duration, + new JulianDate() + ); + if ( + !defined(start) && + JulianDate.greaterThanOrEquals(currentTime, startInterval) + ) { + start = x; + } else if ( + !defined(stop) && + JulianDate.greaterThanOrEquals(currentTime, stopInterval) + ) { + stop = x; + } + } + + context.fillStyle = this.backgroundColor.toCssColorString(); + context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height); + + if (defined(start)) { + if (!defined(stop)) { + stop = renderState.timeBarWidth; + } + context.fillStyle = this.color.toCssColorString(); + context.fillRect( + start, + renderState.y, + Math.max(stop - start, 1), + this.height + ); + } + } +}; +export default TimelineTrack; diff --git a/cate/webapi/app/cesium/Widgets/Timeline/lighter.css b/cate/webapi/app/cesium/Widgets/Timeline/lighter.css new file mode 100644 index 000000000..1f36c8f63 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Timeline/lighter.css @@ -0,0 +1,20 @@ +.cesium-lighter .cesium-timeline-bar { + background: linear-gradient(to bottom, #eeeeee 0%, #ffffff 50%, #fafafa 100%); +} + +.cesium-lighter .cesium-timeline-ticLabel { + color: #000; +} + +.cesium-lighter .cesium-timeline-ticMain { + position: absolute; + bottom: 0; + left: 0; + width: 1px; + height: 50%; + background: #000; +} + +.cesium-lighter .cesium-timeline-ticSub { + background: #444; +} diff --git a/cate/webapi/app/cesium/Widgets/ToggleButtonViewModel.js b/cate/webapi/app/cesium/Widgets/ToggleButtonViewModel.js new file mode 100644 index 000000000..266012170 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/ToggleButtonViewModel.js @@ -0,0 +1,56 @@ +import defaultValue from "../Core/defaultValue.js"; +import defined from "../Core/defined.js"; +import DeveloperError from "../Core/DeveloperError.js"; +import knockout from "../ThirdParty/knockout.js"; + +/** + * A view model which exposes the properties of a toggle button. + * @alias ToggleButtonViewModel + * @constructor + * + * @param {Command} command The command which will be executed when the button is toggled. + * @param {Object} [options] Object with the following properties: + * @param {Boolean} [options.toggled=false] A boolean indicating whether the button should be initially toggled. + * @param {String} [options.tooltip=''] A string containing the button's tooltip. + */ +function ToggleButtonViewModel(command, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(command)) { + throw new DeveloperError("command is required."); + } + //>>includeEnd('debug'); + + this._command = command; + + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + /** + * Gets or sets whether the button is currently toggled. This property is observable. + * @type {Boolean} + * @default false + */ + this.toggled = defaultValue(options.toggled, false); + + /** + * Gets or sets the button's tooltip. This property is observable. + * @type {String} + * @default '' + */ + this.tooltip = defaultValue(options.tooltip, ""); + + knockout.track(this, ["toggled", "tooltip"]); +} + +Object.defineProperties(ToggleButtonViewModel.prototype, { + /** + * Gets the command which will be executed when the button is toggled. + * @memberof ToggleButtonViewModel.prototype + * @type {Command} + */ + command: { + get: function () { + return this._command; + }, + }, +}); +export default ToggleButtonViewModel; diff --git a/cate/webapi/app/cesium/Widgets/VRButton/VRButton.css b/cate/webapi/app/cesium/Widgets/VRButton/VRButton.css new file mode 100644 index 000000000..d8f826e20 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/VRButton/VRButton.css @@ -0,0 +1,7 @@ +.cesium-button.cesium-vrButton { + display: block; + width: 100%; + height: 100%; + margin: 0; + border-radius: 0; +} diff --git a/cate/webapi/app/cesium/Widgets/VRButton/VRButton.js b/cate/webapi/app/cesium/Widgets/VRButton/VRButton.js new file mode 100644 index 000000000..a5e8a4af6 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/VRButton/VRButton.js @@ -0,0 +1,109 @@ +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import knockout from "../../ThirdParty/knockout.js"; +import getElement from "../getElement.js"; +import VRButtonViewModel from "./VRButtonViewModel.js"; + +var enterVRPath = + "M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z"; +var exitVRPath = + "M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z"; + +/** + * A single button widget for toggling vr mode. + * + * @alias VRButton + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Scene} scene The scene. + * @param {Element|String} [vrElement=document.body] The element or id to be placed into vr mode. + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + */ +function VRButton(container, scene, vrElement) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + + var viewModel = new VRButtonViewModel(scene, vrElement); + + viewModel._exitVRPath = exitVRPath; + viewModel._enterVRPath = enterVRPath; + + var element = document.createElement("button"); + element.type = "button"; + element.className = "cesium-button cesium-vrButton"; + element.setAttribute( + "data-bind", + '\ +css: { "cesium-button-disabled" : _isOrthographic }, \ +attr: { title: tooltip },\ +click: command,\ +enable: isVREnabled,\ +cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }' + ); + + container.appendChild(element); + + knockout.applyBindings(viewModel, element); + + this._container = container; + this._viewModel = viewModel; + this._element = element; +} + +Object.defineProperties(VRButton.prototype, { + /** + * Gets the parent container. + * @memberof VRButton.prototype + * + * @type {Element} + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the view model. + * @memberof VRButton.prototype + * + * @type {VRButtonViewModel} + */ + viewModel: { + get: function () { + return this._viewModel; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +VRButton.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +VRButton.prototype.destroy = function () { + this._viewModel.destroy(); + + knockout.cleanNode(this._element); + this._container.removeChild(this._element); + + return destroyObject(this); +}; +export default VRButton; diff --git a/cate/webapi/app/cesium/Widgets/VRButton/VRButtonViewModel.js b/cate/webapi/app/cesium/Widgets/VRButton/VRButtonViewModel.js new file mode 100644 index 000000000..bfd29933c --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/VRButton/VRButtonViewModel.js @@ -0,0 +1,223 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import EventHelper from "../../Core/EventHelper.js"; +import Fullscreen from "../../Core/Fullscreen.js"; +import OrthographicFrustum from "../../Core/OrthographicFrustum.js"; +import knockout from "../../ThirdParty/knockout.js"; +import NoSleep from "../../ThirdParty/NoSleep.js"; +import createCommand from "../createCommand.js"; +import getElement from "../getElement.js"; + +function lockScreen(orientation) { + var locked = false; + var screen = window.screen; + if (defined(screen)) { + if (defined(screen.lockOrientation)) { + locked = screen.lockOrientation(orientation); + } else if (defined(screen.mozLockOrientation)) { + locked = screen.mozLockOrientation(orientation); + } else if (defined(screen.msLockOrientation)) { + locked = screen.msLockOrientation(orientation); + } else if (defined(screen.orientation && screen.orientation.lock)) { + locked = screen.orientation.lock(orientation); + } + } + return locked; +} + +function unlockScreen() { + var screen = window.screen; + if (defined(screen)) { + if (defined(screen.unlockOrientation)) { + screen.unlockOrientation(); + } else if (defined(screen.mozUnlockOrientation)) { + screen.mozUnlockOrientation(); + } else if (defined(screen.msUnlockOrientation)) { + screen.msUnlockOrientation(); + } else if (defined(screen.orientation && screen.orientation.unlock)) { + screen.orientation.unlock(); + } + } +} + +function toggleVR(viewModel, scene, isVRMode, isOrthographic) { + if (isOrthographic()) { + return; + } + + if (isVRMode()) { + scene.useWebVR = false; + if (viewModel._locked) { + unlockScreen(); + viewModel._locked = false; + } + viewModel._noSleep.disable(); + Fullscreen.exitFullscreen(); + isVRMode(false); + } else { + if (!Fullscreen.fullscreen) { + Fullscreen.requestFullscreen(viewModel._vrElement); + } + viewModel._noSleep.enable(); + if (!viewModel._locked) { + viewModel._locked = lockScreen("landscape"); + } + scene.useWebVR = true; + isVRMode(true); + } +} + +/** + * The view model for {@link VRButton}. + * @alias VRButtonViewModel + * @constructor + * + * @param {Scene} scene The scene. + * @param {Element|String} [vrElement=document.body] The element or id to be placed into VR mode. + */ +function VRButtonViewModel(scene, vrElement) { + //>>includeStart('debug', pragmas.debug); + if (!defined(scene)) { + throw new DeveloperError("scene is required."); + } + //>>includeEnd('debug'); + + var that = this; + + var isEnabled = knockout.observable(Fullscreen.enabled); + var isVRMode = knockout.observable(false); + + /** + * Gets whether or not VR mode is active. + * + * @type {Boolean} + */ + this.isVRMode = undefined; + knockout.defineProperty(this, "isVRMode", { + get: function () { + return isVRMode(); + }, + }); + + /** + * Gets or sets whether or not VR functionality should be enabled. + * + * @type {Boolean} + * @see Fullscreen.enabled + */ + this.isVREnabled = undefined; + knockout.defineProperty(this, "isVREnabled", { + get: function () { + return isEnabled(); + }, + set: function (value) { + isEnabled(value && Fullscreen.enabled); + }, + }); + + /** + * Gets the tooltip. This property is observable. + * + * @type {String} + */ + this.tooltip = undefined; + knockout.defineProperty(this, "tooltip", function () { + if (!isEnabled()) { + return "VR mode is unavailable"; + } + return isVRMode() ? "Exit VR mode" : "Enter VR mode"; + }); + + var isOrthographic = knockout.observable(false); + + this._isOrthographic = undefined; + knockout.defineProperty(this, "_isOrthographic", { + get: function () { + return isOrthographic(); + }, + }); + + this._eventHelper = new EventHelper(); + this._eventHelper.add(scene.preRender, function () { + isOrthographic(scene.camera.frustum instanceof OrthographicFrustum); + }); + + this._locked = false; + this._noSleep = new NoSleep(); + + this._command = createCommand(function () { + toggleVR(that, scene, isVRMode, isOrthographic); + }, knockout.getObservable(this, "isVREnabled")); + + this._vrElement = defaultValue(getElement(vrElement), document.body); + + this._callback = function () { + if (!Fullscreen.fullscreen && isVRMode()) { + scene.useWebVR = false; + if (that._locked) { + unlockScreen(); + that._locked = false; + } + that._noSleep.disable(); + isVRMode(false); + } + }; + document.addEventListener(Fullscreen.changeEventName, this._callback); +} + +Object.defineProperties(VRButtonViewModel.prototype, { + /** + * Gets or sets the HTML element to place into VR mode when the + * corresponding button is pressed. + * @memberof VRButtonViewModel.prototype + * + * @type {Element} + */ + vrElement: { + //TODO:@exception {DeveloperError} value must be a valid HTML Element. + get: function () { + return this._vrElement; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (!(value instanceof Element)) { + throw new DeveloperError("value must be a valid Element."); + } + //>>includeEnd('debug'); + + this._vrElement = value; + }, + }, + + /** + * Gets the Command to toggle VR mode. + * @memberof VRButtonViewModel.prototype + * + * @type {Command} + */ + command: { + get: function () { + return this._command; + }, + }, +}); + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +VRButtonViewModel.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the view model. Should be called to + * properly clean up the view model when it is no longer needed. + */ +VRButtonViewModel.prototype.destroy = function () { + this._eventHelper.removeAll(); + document.removeEventListener(Fullscreen.changeEventName, this._callback); + destroyObject(this); +}; +export default VRButtonViewModel; diff --git a/cate/webapi/app/cesium/Widgets/Viewer/Viewer.css b/cate/webapi/app/cesium/Widgets/Viewer/Viewer.css new file mode 100644 index 000000000..b7db93a34 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/Viewer.css @@ -0,0 +1,108 @@ +.cesium-viewer { + font-family: sans-serif; + font-size: 16px; + overflow: hidden; + display: block; + position: relative; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.cesium-viewer-cesiumWidgetContainer { + width: 100%; + height: 100%; +} + +.cesium-viewer-bottom { + display: block; + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding-right: 5px; +} + +.cesium-viewer .cesium-widget-credits { + display: inline; + position: static; + bottom: auto; + left: auto; + padding-right: 0; + color: #ffffff; + font-size: 10px; + text-shadow: 0 0 2px #000000; +} + +.cesium-viewer-timelineContainer { + position: absolute; + bottom: 0; + left: 169px; + right: 29px; + height: 27px; + padding: 0; + margin: 0; + overflow: hidden; + font-size: 14px; +} + +.cesium-viewer-animationContainer { + position: absolute; + bottom: 0; + left: 0; + padding: 0; + width: 169px; + height: 112px; +} + +.cesium-viewer-fullscreenContainer { + position: absolute; + bottom: 0; + right: 0; + padding: 0; + width: 29px; + height: 29px; + overflow: hidden; +} + +.cesium-viewer-vrContainer { + position: absolute; + bottom: 0; + right: 0; + padding: 0; + width: 29px; + height: 29px; + overflow: hidden; +} + +.cesium-viewer-toolbar { + display: block; + position: absolute; + top: 5px; + right: 5px; +} + +.cesium-viewer-cesiumInspectorContainer { + display: block; + position: absolute; + top: 50px; + right: 10px; +} + +.cesium-viewer-geocoderContainer { + position: relative; + display: inline-block; + margin: 0 3px; +} + +.cesium-viewer-cesium3DTilesInspectorContainer { + display: block; + position: absolute; + top: 50px; + right: 10px; + max-height: calc(100% - 120px); + box-sizing: border-box; + overflow-y: auto; + overflow-x: hidden; +} diff --git a/cate/webapi/app/cesium/Widgets/Viewer/Viewer.js b/cate/webapi/app/cesium/Widgets/Viewer/Viewer.js new file mode 100644 index 000000000..c03cc73ef --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/Viewer.js @@ -0,0 +1,2327 @@ +import BoundingSphere from "../../Core/BoundingSphere.js"; +import Cartesian3 from "../../Core/Cartesian3.js"; +import Cartographic from "../../Core/Cartographic.js"; +import Clock from "../../Core/Clock.js"; +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import destroyObject from "../../Core/destroyObject.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Event from "../../Core/Event.js"; +import EventHelper from "../../Core/EventHelper.js"; +import HeadingPitchRange from "../../Core/HeadingPitchRange.js"; +import Matrix4 from "../../Core/Matrix4.js"; +import ScreenSpaceEventType from "../../Core/ScreenSpaceEventType.js"; +import BoundingSphereState from "../../DataSources/BoundingSphereState.js"; +import ConstantPositionProperty from "../../DataSources/ConstantPositionProperty.js"; +import DataSourceCollection from "../../DataSources/DataSourceCollection.js"; +import DataSourceDisplay from "../../DataSources/DataSourceDisplay.js"; +import Entity from "../../DataSources/Entity.js"; +import EntityView from "../../DataSources/EntityView.js"; +import Property from "../../DataSources/Property.js"; +import Cesium3DTileset from "../../Scene/Cesium3DTileset.js"; +import computeFlyToLocationForRectangle from "../../Scene/computeFlyToLocationForRectangle.js"; +import ImageryLayer from "../../Scene/ImageryLayer.js"; +import SceneMode from "../../Scene/SceneMode.js"; +import TimeDynamicPointCloud from "../../Scene/TimeDynamicPointCloud.js"; +import knockout from "../../ThirdParty/knockout.js"; +import when from "../../ThirdParty/when.js"; +import Animation from "../Animation/Animation.js"; +import AnimationViewModel from "../Animation/AnimationViewModel.js"; +import BaseLayerPicker from "../BaseLayerPicker/BaseLayerPicker.js"; +import createDefaultImageryProviderViewModels from "../BaseLayerPicker/createDefaultImageryProviderViewModels.js"; +import createDefaultTerrainProviderViewModels from "../BaseLayerPicker/createDefaultTerrainProviderViewModels.js"; +import CesiumWidget from "../CesiumWidget/CesiumWidget.js"; +import ClockViewModel from "../ClockViewModel.js"; +import FullscreenButton from "../FullscreenButton/FullscreenButton.js"; +import Geocoder from "../Geocoder/Geocoder.js"; +import getElement from "../getElement.js"; +import HomeButton from "../HomeButton/HomeButton.js"; +import InfoBox from "../InfoBox/InfoBox.js"; +import NavigationHelpButton from "../NavigationHelpButton/NavigationHelpButton.js"; +import ProjectionPicker from "../ProjectionPicker/ProjectionPicker.js"; +import SceneModePicker from "../SceneModePicker/SceneModePicker.js"; +import SelectionIndicator from "../SelectionIndicator/SelectionIndicator.js"; +import subscribeAndEvaluate from "../subscribeAndEvaluate.js"; +import Timeline from "../Timeline/Timeline.js"; +import VRButton from "../VRButton/VRButton.js"; + +var boundingSphereScratch = new BoundingSphere(); + +function onTimelineScrubfunction(e) { + var clock = e.clock; + clock.currentTime = e.timeJulian; + clock.shouldAnimate = false; +} + +function pickEntity(viewer, e) { + var picked = viewer.scene.pick(e.position); + if (defined(picked)) { + var id = defaultValue(picked.id, picked.primitive.id); + if (id instanceof Entity) { + return id; + } + } + + // No regular entity picked. Try picking features from imagery layers. + if (defined(viewer.scene.globe)) { + return pickImageryLayerFeature(viewer, e.position); + } +} + +function trackDataSourceClock(timeline, clock, dataSource) { + if (defined(dataSource)) { + var dataSourceClock = dataSource.clock; + if (defined(dataSourceClock)) { + dataSourceClock.getValue(clock); + if (defined(timeline)) { + timeline.updateFromClock(); + timeline.zoomTo(dataSourceClock.startTime, dataSourceClock.stopTime); + } + } + } +} + +var cartesian3Scratch = new Cartesian3(); + +function pickImageryLayerFeature(viewer, windowPosition) { + var scene = viewer.scene; + var pickRay = scene.camera.getPickRay(windowPosition); + var imageryLayerFeaturePromise = scene.imageryLayers.pickImageryLayerFeatures( + pickRay, + scene + ); + if (!defined(imageryLayerFeaturePromise)) { + return; + } + + // Imagery layer feature picking is asynchronous, so put up a message while loading. + var loadingMessage = new Entity({ + id: "Loading...", + description: "Loading feature information...", + }); + + when( + imageryLayerFeaturePromise, + function (features) { + // Has this async pick been superseded by a later one? + if (viewer.selectedEntity !== loadingMessage) { + return; + } + + if (!defined(features) || features.length === 0) { + viewer.selectedEntity = createNoFeaturesEntity(); + return; + } + + // Select the first feature. + var feature = features[0]; + + var entity = new Entity({ + id: feature.name, + description: feature.description, + }); + + if (defined(feature.position)) { + var ecfPosition = viewer.scene.globe.ellipsoid.cartographicToCartesian( + feature.position, + cartesian3Scratch + ); + entity.position = new ConstantPositionProperty(ecfPosition); + } + + viewer.selectedEntity = entity; + }, + function () { + // Has this async pick been superseded by a later one? + if (viewer.selectedEntity !== loadingMessage) { + return; + } + viewer.selectedEntity = createNoFeaturesEntity(); + } + ); + + return loadingMessage; +} + +function createNoFeaturesEntity() { + return new Entity({ + id: "None", + description: "No features found.", + }); +} + +function enableVRUI(viewer, enabled) { + var geocoder = viewer._geocoder; + var homeButton = viewer._homeButton; + var sceneModePicker = viewer._sceneModePicker; + var projectionPicker = viewer._projectionPicker; + var baseLayerPicker = viewer._baseLayerPicker; + var animation = viewer._animation; + var timeline = viewer._timeline; + var fullscreenButton = viewer._fullscreenButton; + var infoBox = viewer._infoBox; + var selectionIndicator = viewer._selectionIndicator; + + var visibility = enabled ? "hidden" : "visible"; + + if (defined(geocoder)) { + geocoder.container.style.visibility = visibility; + } + if (defined(homeButton)) { + homeButton.container.style.visibility = visibility; + } + if (defined(sceneModePicker)) { + sceneModePicker.container.style.visibility = visibility; + } + if (defined(projectionPicker)) { + projectionPicker.container.style.visibility = visibility; + } + if (defined(baseLayerPicker)) { + baseLayerPicker.container.style.visibility = visibility; + } + if (defined(animation)) { + animation.container.style.visibility = visibility; + } + if (defined(timeline)) { + timeline.container.style.visibility = visibility; + } + if ( + defined(fullscreenButton) && + fullscreenButton.viewModel.isFullscreenEnabled + ) { + fullscreenButton.container.style.visibility = visibility; + } + if (defined(infoBox)) { + infoBox.container.style.visibility = visibility; + } + if (defined(selectionIndicator)) { + selectionIndicator.container.style.visibility = visibility; + } + + if (viewer._container) { + var right = + enabled || !defined(fullscreenButton) + ? 0 + : fullscreenButton.container.clientWidth; + viewer._vrButton.container.style.right = right + "px"; + + viewer.forceResize(); + } +} + +/** + * @typedef {Object} Viewer.ConstructorOptions + * + * Initialization options for the Viewer constructor + * + * @property {Boolean} [animation=true] If set to false, the Animation widget will not be created. + * @property {Boolean} [baseLayerPicker=true] If set to false, the BaseLayerPicker widget will not be created. + * @property {Boolean} [fullscreenButton=true] If set to false, the FullscreenButton widget will not be created. + * @property {Boolean} [vrButton=false] If set to true, the VRButton widget will be created. + * @property {Boolean|GeocoderService[]} [geocoder=true] If set to false, the Geocoder widget will not be created. + * @property {Boolean} [homeButton=true] If set to false, the HomeButton widget will not be created. + * @property {Boolean} [infoBox=true] If set to false, the InfoBox widget will not be created. + * @property {Boolean} [sceneModePicker=true] If set to false, the SceneModePicker widget will not be created. + * @property {Boolean} [selectionIndicator=true] If set to false, the SelectionIndicator widget will not be created. + * @property {Boolean} [timeline=true] If set to false, the Timeline widget will not be created. + * @property {Boolean} [navigationHelpButton=true] If set to false, the navigation help button will not be created. + * @property {Boolean} [navigationInstructionsInitiallyVisible=true] True if the navigation instructions should initially be visible, or false if the should not be shown until the user explicitly clicks the button. + * @property {Boolean} [scene3DOnly=false] When true, each geometry instance will only be rendered in 3D to save GPU memory. + * @property {Boolean} [shouldAnimate=false] true if the clock should attempt to advance simulation time by default, false otherwise. This option takes precedence over setting {@link Viewer#clockViewModel}. + * @property {ClockViewModel} [clockViewModel=new ClockViewModel(clock)] The clock view model to use to control current time. + * @property {ProviderViewModel} [selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true. + * @property {ProviderViewModel[]} [imageryProviderViewModels=createDefaultImageryProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true. + * @property {ProviderViewModel} [selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true. + * @property {ProviderViewModel[]} [terrainProviderViewModels=createDefaultTerrainProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true. + * @property {ImageryProvider} [imageryProvider=createWorldImagery()] The imagery provider to use. This value is only valid if `baseLayerPicker` is set to false. + * @property {TerrainProvider} [terrainProvider=new EllipsoidTerrainProvider()] The terrain provider to use + * @property {SkyBox|false} [skyBox] The skybox used to render the stars. When undefined, the default stars are used. If set to false, no skyBox, Sun, or Moon will be added. + * @property {SkyAtmosphere|false} [skyAtmosphere] Blue sky, and the glow around the Earth's limb. Set to false to turn it off. + * @property {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode when the full screen button is pressed. + * @property {Boolean} [useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise. + * @property {Number} [targetFrameRate] The target frame rate when using the default render loop. + * @property {Boolean} [showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs. + * @property {Boolean} [useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore window.devicePixelRatio. + * @property {Boolean} [automaticallyTrackDataSourceClocks=true] If true, this widget will automatically track the clock settings of newly added DataSources, updating if the DataSource's clock changes. Set this to false if you want to configure the clock independently. + * @property {Object} [contextOptions] Context and WebGL creation properties corresponding to options passed to {@link Scene}. + * @property {SceneMode} [sceneMode=SceneMode.SCENE3D] The initial scene mode. + * @property {MapProjection} [mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes. + * @property {Globe} [globe=new Globe(mapProjection.ellipsoid)] The globe to use in the scene. If set to false, no globe will be added. + * @property {Boolean} [orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency. + * @property {Element|String} [creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added to the bottom of the widget itself. + * @property {Element|String} [creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself. + * @property {DataSourceCollection} [dataSources=new DataSourceCollection()] The collection of data sources visualized by the widget. If this parameter is provided, + * the instance is assumed to be owned by the caller and will not be destroyed when the viewer is destroyed. + * @property {Number} [terrainExaggeration=1.0] A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid. + * @property {Boolean} [shadows=false] Determines if shadows are cast by light sources. + * @property {ShadowMode} [terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources. + * @property {MapMode2D} [mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction. + * @property {Boolean} [projectionPicker=false] If set to true, the ProjectionPicker widget will be created. + * @property {Boolean} [requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling reduces the CPU/GPU usage of your application and uses less battery on mobile, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + * @property {Number} [maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}. + */ + +/** + * A base widget for building applications. It composites all of the standard Cesium widgets into one reusable package. + * The widget can always be extended by using mixins, which add functionality useful for a variety of applications. + * + * @alias Viewer + * @constructor + * + * @param {Element|String} container The DOM element or ID that will contain the widget. + * @param {Viewer.ConstructorOptions} [options] Object describing initialization options + * + * @exception {DeveloperError} Element with id "container" does not exist in the document. + * @exception {DeveloperError} options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.imageryProvider instead. + * @exception {DeveloperError} options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.terrainProvider instead. + * + * @see Animation + * @see BaseLayerPicker + * @see CesiumWidget + * @see FullscreenButton + * @see HomeButton + * @see SceneModePicker + * @see Timeline + * @see viewerDragDropMixin + * + * @demo {@link https://sandcastle.cesium.com/index.html?src=Hello%20World.html|Cesium Sandcastle Hello World Demo} + * + * @example + * //Initialize the viewer widget with several custom options and mixins. + * var viewer = new Cesium.Viewer('cesiumContainer', { + * //Start in Columbus Viewer + * sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, + * //Use Cesium World Terrain + * terrainProvider : Cesium.createWorldTerrain(), + * //Hide the base layer picker + * baseLayerPicker : false, + * //Use OpenStreetMaps + * imageryProvider : new Cesium.OpenStreetMapImageryProvider({ + * url : 'https://a.tile.openstreetmap.org/' + * }), + * skyBox : new Cesium.SkyBox({ + * sources : { + * positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg', + * negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg', + * positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg', + * negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg', + * positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg', + * negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg' + * } + * }), + * // Show Columbus View map with Web Mercator projection + * mapProjection : new Cesium.WebMercatorProjection() + * }); + * + * //Add basic drag and drop functionality + * viewer.extend(Cesium.viewerDragDropMixin); + * + * //Show a pop-up alert if we encounter an error when processing a dropped file + * viewer.dropError.addEventListener(function(dropHandler, name, error) { + * console.log(error); + * window.alert(error); + * }); + */ +function Viewer(container, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(container)) { + throw new DeveloperError("container is required."); + } + //>>includeEnd('debug'); + + container = getElement(container); + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + var createBaseLayerPicker = + (!defined(options.globe) || options.globe !== false) && + (!defined(options.baseLayerPicker) || options.baseLayerPicker !== false); + + //>>includeStart('debug', pragmas.debug); + // If not using BaseLayerPicker, selectedImageryProviderViewModel is an invalid option + if ( + !createBaseLayerPicker && + defined(options.selectedImageryProviderViewModel) + ) { + throw new DeveloperError( + "options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget. \ +Either specify options.imageryProvider instead or set options.baseLayerPicker to true." + ); + } + + // If not using BaseLayerPicker, selectedTerrainProviderViewModel is an invalid option + if ( + !createBaseLayerPicker && + defined(options.selectedTerrainProviderViewModel) + ) { + throw new DeveloperError( + "options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget. \ +Either specify options.terrainProvider instead or set options.baseLayerPicker to true." + ); + } + //>>includeEnd('debug') + + var that = this; + + var viewerContainer = document.createElement("div"); + viewerContainer.className = "cesium-viewer"; + container.appendChild(viewerContainer); + + // Cesium widget container + var cesiumWidgetContainer = document.createElement("div"); + cesiumWidgetContainer.className = "cesium-viewer-cesiumWidgetContainer"; + viewerContainer.appendChild(cesiumWidgetContainer); + + // Bottom container + var bottomContainer = document.createElement("div"); + bottomContainer.className = "cesium-viewer-bottom"; + + viewerContainer.appendChild(bottomContainer); + + var scene3DOnly = defaultValue(options.scene3DOnly, false); + + var clock; + var clockViewModel; + var destroyClockViewModel = false; + if (defined(options.clockViewModel)) { + clockViewModel = options.clockViewModel; + clock = clockViewModel.clock; + } else { + clock = new Clock(); + clockViewModel = new ClockViewModel(clock); + destroyClockViewModel = true; + } + + if (defined(options.shouldAnimate)) { + clock.shouldAnimate = options.shouldAnimate; + } + + // Cesium widget + var cesiumWidget = new CesiumWidget(cesiumWidgetContainer, { + imageryProvider: + createBaseLayerPicker || defined(options.imageryProvider) + ? false + : undefined, + clock: clock, + skyBox: options.skyBox, + skyAtmosphere: options.skyAtmosphere, + sceneMode: options.sceneMode, + mapProjection: options.mapProjection, + globe: options.globe, + orderIndependentTranslucency: options.orderIndependentTranslucency, + contextOptions: options.contextOptions, + useDefaultRenderLoop: options.useDefaultRenderLoop, + targetFrameRate: options.targetFrameRate, + showRenderLoopErrors: options.showRenderLoopErrors, + useBrowserRecommendedResolution: options.useBrowserRecommendedResolution, + creditContainer: defined(options.creditContainer) + ? options.creditContainer + : bottomContainer, + creditViewport: options.creditViewport, + scene3DOnly: scene3DOnly, + terrainExaggeration: options.terrainExaggeration, + shadows: options.shadows, + terrainShadows: options.terrainShadows, + mapMode2D: options.mapMode2D, + requestRenderMode: options.requestRenderMode, + maximumRenderTimeChange: options.maximumRenderTimeChange, + }); + + var dataSourceCollection = options.dataSources; + var destroyDataSourceCollection = false; + if (!defined(dataSourceCollection)) { + dataSourceCollection = new DataSourceCollection(); + destroyDataSourceCollection = true; + } + + var scene = cesiumWidget.scene; + + var dataSourceDisplay = new DataSourceDisplay({ + scene: scene, + dataSourceCollection: dataSourceCollection, + }); + + var eventHelper = new EventHelper(); + + eventHelper.add(clock.onTick, Viewer.prototype._onTick, this); + eventHelper.add(scene.morphStart, Viewer.prototype._clearTrackedObject, this); + + // Selection Indicator + var selectionIndicator; + if ( + !defined(options.selectionIndicator) || + options.selectionIndicator !== false + ) { + var selectionIndicatorContainer = document.createElement("div"); + selectionIndicatorContainer.className = + "cesium-viewer-selectionIndicatorContainer"; + viewerContainer.appendChild(selectionIndicatorContainer); + selectionIndicator = new SelectionIndicator( + selectionIndicatorContainer, + scene + ); + } + + // Info Box + var infoBox; + if (!defined(options.infoBox) || options.infoBox !== false) { + var infoBoxContainer = document.createElement("div"); + infoBoxContainer.className = "cesium-viewer-infoBoxContainer"; + viewerContainer.appendChild(infoBoxContainer); + infoBox = new InfoBox(infoBoxContainer); + + var infoBoxViewModel = infoBox.viewModel; + eventHelper.add( + infoBoxViewModel.cameraClicked, + Viewer.prototype._onInfoBoxCameraClicked, + this + ); + eventHelper.add( + infoBoxViewModel.closeClicked, + Viewer.prototype._onInfoBoxClockClicked, + this + ); + } + + // Main Toolbar + var toolbar = document.createElement("div"); + toolbar.className = "cesium-viewer-toolbar"; + viewerContainer.appendChild(toolbar); + + // Geocoder + var geocoder; + if (!defined(options.geocoder) || options.geocoder !== false) { + var geocoderContainer = document.createElement("div"); + geocoderContainer.className = "cesium-viewer-geocoderContainer"; + toolbar.appendChild(geocoderContainer); + var geocoderService; + if (defined(options.geocoder) && typeof options.geocoder !== "boolean") { + geocoderService = Array.isArray(options.geocoder) + ? options.geocoder + : [options.geocoder]; + } + geocoder = new Geocoder({ + container: geocoderContainer, + geocoderServices: geocoderService, + scene: scene, + }); + // Subscribe to search so that we can clear the trackedEntity when it is clicked. + eventHelper.add( + geocoder.viewModel.search.beforeExecute, + Viewer.prototype._clearObjects, + this + ); + } + + // HomeButton + var homeButton; + if (!defined(options.homeButton) || options.homeButton !== false) { + homeButton = new HomeButton(toolbar, scene); + if (defined(geocoder)) { + eventHelper.add(homeButton.viewModel.command.afterExecute, function () { + var viewModel = geocoder.viewModel; + viewModel.searchText = ""; + if (viewModel.isSearchInProgress) { + viewModel.search(); + } + }); + } + // Subscribe to the home button beforeExecute event so that we can clear the trackedEntity. + eventHelper.add( + homeButton.viewModel.command.beforeExecute, + Viewer.prototype._clearTrackedObject, + this + ); + } + + // SceneModePicker + // By default, we silently disable the scene mode picker if scene3DOnly is true, + // but if sceneModePicker is explicitly set to true, throw an error. + //>>includeStart('debug', pragmas.debug); + if (options.sceneModePicker === true && scene3DOnly) { + throw new DeveloperError( + "options.sceneModePicker is not available when options.scene3DOnly is set to true." + ); + } + //>>includeEnd('debug'); + + var sceneModePicker; + if ( + !scene3DOnly && + (!defined(options.sceneModePicker) || options.sceneModePicker !== false) + ) { + sceneModePicker = new SceneModePicker(toolbar, scene); + } + + var projectionPicker; + if (options.projectionPicker) { + projectionPicker = new ProjectionPicker(toolbar, scene); + } + + // BaseLayerPicker + var baseLayerPicker; + var baseLayerPickerDropDown; + if (createBaseLayerPicker) { + var imageryProviderViewModels = defaultValue( + options.imageryProviderViewModels, + createDefaultImageryProviderViewModels() + ); + var terrainProviderViewModels = defaultValue( + options.terrainProviderViewModels, + createDefaultTerrainProviderViewModels() + ); + + baseLayerPicker = new BaseLayerPicker(toolbar, { + globe: scene.globe, + imageryProviderViewModels: imageryProviderViewModels, + selectedImageryProviderViewModel: + options.selectedImageryProviderViewModel, + terrainProviderViewModels: terrainProviderViewModels, + selectedTerrainProviderViewModel: + options.selectedTerrainProviderViewModel, + }); + + //Grab the dropdown for resize code. + var elements = toolbar.getElementsByClassName( + "cesium-baseLayerPicker-dropDown" + ); + baseLayerPickerDropDown = elements[0]; + } + + // These need to be set after the BaseLayerPicker is created in order to take effect + if (defined(options.imageryProvider) && options.imageryProvider !== false) { + if (createBaseLayerPicker) { + baseLayerPicker.viewModel.selectedImagery = undefined; + } + scene.imageryLayers.removeAll(); + scene.imageryLayers.addImageryProvider(options.imageryProvider); + } + if (defined(options.terrainProvider)) { + if (createBaseLayerPicker) { + baseLayerPicker.viewModel.selectedTerrain = undefined; + } + scene.terrainProvider = options.terrainProvider; + } + + // Navigation Help Button + var navigationHelpButton; + if ( + !defined(options.navigationHelpButton) || + options.navigationHelpButton !== false + ) { + var showNavHelp = true; + try { + //window.localStorage is null if disabled in Firefox or undefined in browsers with implementation + if (defined(window.localStorage)) { + var hasSeenNavHelp = window.localStorage.getItem( + "cesium-hasSeenNavHelp" + ); + if (defined(hasSeenNavHelp) && Boolean(hasSeenNavHelp)) { + showNavHelp = false; + } else { + window.localStorage.setItem("cesium-hasSeenNavHelp", "true"); + } + } + } catch (e) { + //Accessing window.localStorage throws if disabled in Chrome + //window.localStorage.setItem throws if in Safari private browsing mode or in any browser if we are over quota. + } + navigationHelpButton = new NavigationHelpButton({ + container: toolbar, + instructionsInitiallyVisible: defaultValue( + options.navigationInstructionsInitiallyVisible, + showNavHelp + ), + }); + } + + // Animation + var animation; + if (!defined(options.animation) || options.animation !== false) { + var animationContainer = document.createElement("div"); + animationContainer.className = "cesium-viewer-animationContainer"; + viewerContainer.appendChild(animationContainer); + animation = new Animation( + animationContainer, + new AnimationViewModel(clockViewModel) + ); + } + + // Timeline + var timeline; + if (!defined(options.timeline) || options.timeline !== false) { + var timelineContainer = document.createElement("div"); + timelineContainer.className = "cesium-viewer-timelineContainer"; + viewerContainer.appendChild(timelineContainer); + timeline = new Timeline(timelineContainer, clock); + timeline.addEventListener("settime", onTimelineScrubfunction, false); + timeline.zoomTo(clock.startTime, clock.stopTime); + } + + // Fullscreen + var fullscreenButton; + var fullscreenSubscription; + var fullscreenContainer; + if ( + !defined(options.fullscreenButton) || + options.fullscreenButton !== false + ) { + fullscreenContainer = document.createElement("div"); + fullscreenContainer.className = "cesium-viewer-fullscreenContainer"; + viewerContainer.appendChild(fullscreenContainer); + fullscreenButton = new FullscreenButton( + fullscreenContainer, + options.fullscreenElement + ); + + //Subscribe to fullscreenButton.viewModel.isFullscreenEnabled so + //that we can hide/show the button as well as size the timeline. + fullscreenSubscription = subscribeAndEvaluate( + fullscreenButton.viewModel, + "isFullscreenEnabled", + function (isFullscreenEnabled) { + fullscreenContainer.style.display = isFullscreenEnabled + ? "block" + : "none"; + if (defined(timeline)) { + timeline.container.style.right = + fullscreenContainer.clientWidth + "px"; + timeline.resize(); + } + } + ); + } + + // VR + var vrButton; + var vrSubscription; + var vrModeSubscription; + if (options.vrButton) { + var vrContainer = document.createElement("div"); + vrContainer.className = "cesium-viewer-vrContainer"; + viewerContainer.appendChild(vrContainer); + vrButton = new VRButton(vrContainer, scene, options.fullScreenElement); + + vrSubscription = subscribeAndEvaluate( + vrButton.viewModel, + "isVREnabled", + function (isVREnabled) { + vrContainer.style.display = isVREnabled ? "block" : "none"; + if (defined(fullscreenButton)) { + vrContainer.style.right = fullscreenContainer.clientWidth + "px"; + } + if (defined(timeline)) { + timeline.container.style.right = vrContainer.clientWidth + "px"; + timeline.resize(); + } + } + ); + + vrModeSubscription = subscribeAndEvaluate( + vrButton.viewModel, + "isVRMode", + function (isVRMode) { + enableVRUI(that, isVRMode); + } + ); + } + + //Assign all properties to this instance. No "this" assignments should + //take place above this line. + this._baseLayerPickerDropDown = baseLayerPickerDropDown; + this._fullscreenSubscription = fullscreenSubscription; + this._vrSubscription = vrSubscription; + this._vrModeSubscription = vrModeSubscription; + this._dataSourceChangedListeners = {}; + this._automaticallyTrackDataSourceClocks = defaultValue( + options.automaticallyTrackDataSourceClocks, + true + ); + this._container = container; + this._bottomContainer = bottomContainer; + this._element = viewerContainer; + this._cesiumWidget = cesiumWidget; + this._selectionIndicator = selectionIndicator; + this._infoBox = infoBox; + this._dataSourceCollection = dataSourceCollection; + this._destroyDataSourceCollection = destroyDataSourceCollection; + this._dataSourceDisplay = dataSourceDisplay; + this._clockViewModel = clockViewModel; + this._destroyClockViewModel = destroyClockViewModel; + this._toolbar = toolbar; + this._homeButton = homeButton; + this._sceneModePicker = sceneModePicker; + this._projectionPicker = projectionPicker; + this._baseLayerPicker = baseLayerPicker; + this._navigationHelpButton = navigationHelpButton; + this._animation = animation; + this._timeline = timeline; + this._fullscreenButton = fullscreenButton; + this._vrButton = vrButton; + this._geocoder = geocoder; + this._eventHelper = eventHelper; + this._lastWidth = 0; + this._lastHeight = 0; + this._allowDataSourcesToSuspendAnimation = true; + this._entityView = undefined; + this._enableInfoOrSelection = defined(infoBox) || defined(selectionIndicator); + this._clockTrackedDataSource = undefined; + this._trackedEntity = undefined; + this._needTrackedEntityUpdate = false; + this._selectedEntity = undefined; + this._clockTrackedDataSource = undefined; + this._zoomIsFlight = false; + this._zoomTarget = undefined; + this._zoomPromise = undefined; + this._zoomOptions = undefined; + this._selectedEntityChanged = new Event(); + this._trackedEntityChanged = new Event(); + + knockout.track(this, [ + "_trackedEntity", + "_selectedEntity", + "_clockTrackedDataSource", + ]); + + //Listen to data source events in order to track clock changes. + eventHelper.add( + dataSourceCollection.dataSourceAdded, + Viewer.prototype._onDataSourceAdded, + this + ); + eventHelper.add( + dataSourceCollection.dataSourceRemoved, + Viewer.prototype._onDataSourceRemoved, + this + ); + + // Prior to each render, check if anything needs to be resized. + eventHelper.add(scene.postUpdate, Viewer.prototype.resize, this); + eventHelper.add(scene.postRender, Viewer.prototype._postRender, this); + + // We need to subscribe to the data sources and collections so that we can clear the + // tracked object when it is removed from the scene. + // Subscribe to current data sources + var dataSourceLength = dataSourceCollection.length; + for (var i = 0; i < dataSourceLength; i++) { + this._dataSourceAdded(dataSourceCollection, dataSourceCollection.get(i)); + } + this._dataSourceAdded(undefined, dataSourceDisplay.defaultDataSource); + + // Hook up events so that we can subscribe to future sources. + eventHelper.add( + dataSourceCollection.dataSourceAdded, + Viewer.prototype._dataSourceAdded, + this + ); + eventHelper.add( + dataSourceCollection.dataSourceRemoved, + Viewer.prototype._dataSourceRemoved, + this + ); + + // Subscribe to left clicks and zoom to the picked object. + function pickAndTrackObject(e) { + var entity = pickEntity(that, e); + if (defined(entity)) { + //Only track the entity if it has a valid position at the current time. + if ( + Property.getValueOrUndefined(entity.position, that.clock.currentTime) + ) { + that.trackedEntity = entity; + } else { + that.zoomTo(entity); + } + } else if (defined(that.trackedEntity)) { + that.trackedEntity = undefined; + } + } + + function pickAndSelectObject(e) { + that.selectedEntity = pickEntity(that, e); + } + + cesiumWidget.screenSpaceEventHandler.setInputAction( + pickAndSelectObject, + ScreenSpaceEventType.LEFT_CLICK + ); + cesiumWidget.screenSpaceEventHandler.setInputAction( + pickAndTrackObject, + ScreenSpaceEventType.LEFT_DOUBLE_CLICK + ); +} + +Object.defineProperties(Viewer.prototype, { + /** + * Gets the parent container. + * @memberof Viewer.prototype + * @type {Element} + * @readonly + */ + container: { + get: function () { + return this._container; + }, + }, + + /** + * Gets the DOM element for the area at the bottom of the window containing the + * {@link CreditDisplay} and potentially other things. + * @memberof Viewer.prototype + * @type {Element} + * @readonly + */ + bottomContainer: { + get: function () { + return this._bottomContainer; + }, + }, + + /** + * Gets the CesiumWidget. + * @memberof Viewer.prototype + * @type {CesiumWidget} + * @readonly + */ + cesiumWidget: { + get: function () { + return this._cesiumWidget; + }, + }, + + /** + * Gets the selection indicator. + * @memberof Viewer.prototype + * @type {SelectionIndicator} + * @readonly + */ + selectionIndicator: { + get: function () { + return this._selectionIndicator; + }, + }, + + /** + * Gets the info box. + * @memberof Viewer.prototype + * @type {InfoBox} + * @readonly + */ + infoBox: { + get: function () { + return this._infoBox; + }, + }, + + /** + * Gets the Geocoder. + * @memberof Viewer.prototype + * @type {Geocoder} + * @readonly + */ + geocoder: { + get: function () { + return this._geocoder; + }, + }, + + /** + * Gets the HomeButton. + * @memberof Viewer.prototype + * @type {HomeButton} + * @readonly + */ + homeButton: { + get: function () { + return this._homeButton; + }, + }, + + /** + * Gets the SceneModePicker. + * @memberof Viewer.prototype + * @type {SceneModePicker} + * @readonly + */ + sceneModePicker: { + get: function () { + return this._sceneModePicker; + }, + }, + + /** + * Gets the ProjectionPicker. + * @memberof Viewer.prototype + * @type {ProjectionPicker} + * @readonly + */ + projectionPicker: { + get: function () { + return this._projectionPicker; + }, + }, + + /** + * Gets the BaseLayerPicker. + * @memberof Viewer.prototype + * @type {BaseLayerPicker} + * @readonly + */ + baseLayerPicker: { + get: function () { + return this._baseLayerPicker; + }, + }, + + /** + * Gets the NavigationHelpButton. + * @memberof Viewer.prototype + * @type {NavigationHelpButton} + * @readonly + */ + navigationHelpButton: { + get: function () { + return this._navigationHelpButton; + }, + }, + + /** + * Gets the Animation widget. + * @memberof Viewer.prototype + * @type {Animation} + * @readonly + */ + animation: { + get: function () { + return this._animation; + }, + }, + + /** + * Gets the Timeline widget. + * @memberof Viewer.prototype + * @type {Timeline} + * @readonly + */ + timeline: { + get: function () { + return this._timeline; + }, + }, + + /** + * Gets the FullscreenButton. + * @memberof Viewer.prototype + * @type {FullscreenButton} + * @readonly + */ + fullscreenButton: { + get: function () { + return this._fullscreenButton; + }, + }, + + /** + * Gets the VRButton. + * @memberof Viewer.prototype + * @type {VRButton} + * @readonly + */ + vrButton: { + get: function () { + return this._vrButton; + }, + }, + + /** + * Gets the display used for {@link DataSource} visualization. + * @memberof Viewer.prototype + * @type {DataSourceDisplay} + * @readonly + */ + dataSourceDisplay: { + get: function () { + return this._dataSourceDisplay; + }, + }, + + /** + * Gets the collection of entities not tied to a particular data source. + * This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link Viewer#dataSourceDisplay}. + * @memberof Viewer.prototype + * @type {EntityCollection} + * @readonly + */ + entities: { + get: function () { + return this._dataSourceDisplay.defaultDataSource.entities; + }, + }, + + /** + * Gets the set of {@link DataSource} instances to be visualized. + * @memberof Viewer.prototype + * @type {DataSourceCollection} + * @readonly + */ + dataSources: { + get: function () { + return this._dataSourceCollection; + }, + }, + + /** + * Gets the canvas. + * @memberof Viewer.prototype + * @type {HTMLCanvasElement} + * @readonly + */ + canvas: { + get: function () { + return this._cesiumWidget.canvas; + }, + }, + + /** + * Gets the scene. + * @memberof Viewer.prototype + * @type {Scene} + * @readonly + */ + scene: { + get: function () { + return this._cesiumWidget.scene; + }, + }, + + /** + * Determines if shadows are cast by light sources. + * @memberof Viewer.prototype + * @type {Boolean} + */ + shadows: { + get: function () { + return this.scene.shadowMap.enabled; + }, + set: function (value) { + this.scene.shadowMap.enabled = value; + }, + }, + + /** + * Determines if the terrain casts or shadows from light sources. + * @memberof Viewer.prototype + * @type {ShadowMode} + */ + terrainShadows: { + get: function () { + return this.scene.globe.shadows; + }, + set: function (value) { + this.scene.globe.shadows = value; + }, + }, + + /** + * Get the scene's shadow map + * @memberof Viewer.prototype + * @type {ShadowMap} + * @readonly + */ + shadowMap: { + get: function () { + return this.scene.shadowMap; + }, + }, + + /** + * Gets the collection of image layers that will be rendered on the globe. + * @memberof Viewer.prototype + * + * @type {ImageryLayerCollection} + * @readonly + */ + imageryLayers: { + get: function () { + return this.scene.imageryLayers; + }, + }, + + /** + * The terrain provider providing surface geometry for the globe. + * @memberof Viewer.prototype + * + * @type {TerrainProvider} + */ + terrainProvider: { + get: function () { + return this.scene.terrainProvider; + }, + set: function (terrainProvider) { + this.scene.terrainProvider = terrainProvider; + }, + }, + + /** + * Gets the camera. + * @memberof Viewer.prototype + * + * @type {Camera} + * @readonly + */ + camera: { + get: function () { + return this.scene.camera; + }, + }, + + /** + * Gets the post-process stages. + * @memberof Viewer.prototype + * + * @type {PostProcessStageCollection} + * @readonly + */ + postProcessStages: { + get: function () { + return this.scene.postProcessStages; + }, + }, + + /** + * Gets the clock. + * @memberof Viewer.prototype + * @type {Clock} + * @readonly + */ + clock: { + get: function () { + return this._clockViewModel.clock; + }, + }, + + /** + * Gets the clock view model. + * @memberof Viewer.prototype + * @type {ClockViewModel} + * @readonly + */ + clockViewModel: { + get: function () { + return this._clockViewModel; + }, + }, + + /** + * Gets the screen space event handler. + * @memberof Viewer.prototype + * @type {ScreenSpaceEventHandler} + * @readonly + */ + screenSpaceEventHandler: { + get: function () { + return this._cesiumWidget.screenSpaceEventHandler; + }, + }, + + /** + * Gets or sets the target frame rate of the widget when useDefaultRenderLoop + * is true. If undefined, the browser's {@link requestAnimationFrame} implementation + * determines the frame rate. If defined, this value must be greater than 0. A value higher + * than the underlying requestAnimationFrame implementation will have no effect. + * @memberof Viewer.prototype + * + * @type {Number} + */ + targetFrameRate: { + get: function () { + return this._cesiumWidget.targetFrameRate; + }, + set: function (value) { + this._cesiumWidget.targetFrameRate = value; + }, + }, + + /** + * Gets or sets whether or not this widget should control the render loop. + * If set to true the widget will use {@link requestAnimationFrame} to + * perform rendering and resizing of the widget, as well as drive the + * simulation clock. If set to false, you must manually call the + * resize, render methods + * as part of a custom render loop. If an error occurs during rendering, {@link Scene}'s + * renderError event will be raised and this property + * will be set to false. It must be set back to true to continue rendering + * after the error. + * @memberof Viewer.prototype + * + * @type {Boolean} + */ + useDefaultRenderLoop: { + get: function () { + return this._cesiumWidget.useDefaultRenderLoop; + }, + set: function (value) { + this._cesiumWidget.useDefaultRenderLoop = value; + }, + }, + + /** + * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve + * performance on less powerful devices while values greater than 1.0 will render at a higher + * resolution and then scale down, resulting in improved visual fidelity. + * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5 + * will cause the scene to be rendered at 320x240 and then scaled up while setting + * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down. + * @memberof Viewer.prototype + * + * @type {Number} + * @default 1.0 + */ + resolutionScale: { + get: function () { + return this._cesiumWidget.resolutionScale; + }, + set: function (value) { + this._cesiumWidget.resolutionScale = value; + }, + }, + + /** + * Boolean flag indicating if the browser's recommended resolution is used. + * If true, the browser's device pixel ratio is ignored and 1.0 is used instead, + * effectively rendering based on CSS pixels instead of device pixels. This can improve + * performance on less powerful devices that have high pixel density. When false, rendering + * will be in device pixels. {@link Viewer#resolutionScale} will still take effect whether + * this flag is true or false. + * @memberof Viewer.prototype + * + * @type {Boolean} + * @default true + */ + useBrowserRecommendedResolution: { + get: function () { + return this._cesiumWidget.useBrowserRecommendedResolution; + }, + set: function (value) { + this._cesiumWidget.useBrowserRecommendedResolution = value; + }, + }, + + /** + * Gets or sets whether or not data sources can temporarily pause + * animation in order to avoid showing an incomplete picture to the user. + * For example, if asynchronous primitives are being processed in the + * background, the clock will not advance until the geometry is ready. + * + * @memberof Viewer.prototype + * + * @type {Boolean} + */ + allowDataSourcesToSuspendAnimation: { + get: function () { + return this._allowDataSourcesToSuspendAnimation; + }, + set: function (value) { + this._allowDataSourcesToSuspendAnimation = value; + }, + }, + + /** + * Gets or sets the Entity instance currently being tracked by the camera. + * @memberof Viewer.prototype + * @type {Entity | undefined} + */ + trackedEntity: { + get: function () { + return this._trackedEntity; + }, + set: function (value) { + if (this._trackedEntity !== value) { + this._trackedEntity = value; + + //Cancel any pending zoom + cancelZoom(this); + + var scene = this.scene; + var sceneMode = scene.mode; + + //Stop tracking + if (!defined(value) || !defined(value.position)) { + this._needTrackedEntityUpdate = false; + if ( + sceneMode === SceneMode.COLUMBUS_VIEW || + sceneMode === SceneMode.SCENE2D + ) { + scene.screenSpaceCameraController.enableTranslate = true; + } + + if ( + sceneMode === SceneMode.COLUMBUS_VIEW || + sceneMode === SceneMode.SCENE3D + ) { + scene.screenSpaceCameraController.enableTilt = true; + } + + this._entityView = undefined; + this.camera.lookAtTransform(Matrix4.IDENTITY); + } else { + //We can't start tracking immediately, so we set a flag and start tracking + //when the bounding sphere is ready (most likely next frame). + this._needTrackedEntityUpdate = true; + } + + this._trackedEntityChanged.raiseEvent(value); + this.scene.requestRender(); + } + }, + }, + /** + * Gets or sets the object instance for which to display a selection indicator. + * @memberof Viewer.prototype + * @type {Entity | undefined} + */ + selectedEntity: { + get: function () { + return this._selectedEntity; + }, + set: function (value) { + if (this._selectedEntity !== value) { + this._selectedEntity = value; + var selectionIndicatorViewModel = defined(this._selectionIndicator) + ? this._selectionIndicator.viewModel + : undefined; + if (defined(value)) { + if (defined(selectionIndicatorViewModel)) { + selectionIndicatorViewModel.animateAppear(); + } + } else if (defined(selectionIndicatorViewModel)) { + // Leave the info text in place here, it is needed during the exit animation. + selectionIndicatorViewModel.animateDepart(); + } + this._selectedEntityChanged.raiseEvent(value); + } + }, + }, + /** + * Gets the event that is raised when the selected entity changes. + * @memberof Viewer.prototype + * @type {Event} + * @readonly + */ + selectedEntityChanged: { + get: function () { + return this._selectedEntityChanged; + }, + }, + /** + * Gets the event that is raised when the tracked entity changes. + * @memberof Viewer.prototype + * @type {Event} + * @readonly + */ + trackedEntityChanged: { + get: function () { + return this._trackedEntityChanged; + }, + }, + /** + * Gets or sets the data source to track with the viewer's clock. + * @memberof Viewer.prototype + * @type {DataSource} + */ + clockTrackedDataSource: { + get: function () { + return this._clockTrackedDataSource; + }, + set: function (value) { + if (this._clockTrackedDataSource !== value) { + this._clockTrackedDataSource = value; + trackDataSourceClock(this._timeline, this.clock, value); + } + }, + }, +}); + +/** + * Extends the base viewer functionality with the provided mixin. + * A mixin may add additional properties, functions, or other behavior + * to the provided viewer instance. + * + * @param {Viewer.ViewerMixin} mixin The Viewer mixin to add to this instance. + * @param {Object} [options] The options object to be passed to the mixin function. + * + * @see viewerDragDropMixin + */ +Viewer.prototype.extend = function (mixin, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(mixin)) { + throw new DeveloperError("mixin is required."); + } + //>>includeEnd('debug') + + mixin(this, options); +}; + +/** + * Resizes the widget to match the container size. + * This function is called automatically as needed unless + * useDefaultRenderLoop is set to false. + */ +Viewer.prototype.resize = function () { + var cesiumWidget = this._cesiumWidget; + var container = this._container; + var width = container.clientWidth; + var height = container.clientHeight; + var animationExists = defined(this._animation); + var timelineExists = defined(this._timeline); + + cesiumWidget.resize(); + + if (width === this._lastWidth && height === this._lastHeight) { + return; + } + + var panelMaxHeight = height - 125; + var baseLayerPickerDropDown = this._baseLayerPickerDropDown; + + if (defined(baseLayerPickerDropDown)) { + baseLayerPickerDropDown.style.maxHeight = panelMaxHeight + "px"; + } + + if (defined(this._geocoder)) { + var geocoderSuggestions = this._geocoder.searchSuggestionsContainer; + geocoderSuggestions.style.maxHeight = panelMaxHeight + "px"; + } + + if (defined(this._infoBox)) { + this._infoBox.viewModel.maxHeight = panelMaxHeight; + } + + var timeline = this._timeline; + var animationContainer; + var animationWidth = 0; + var creditLeft = 0; + var creditBottom = 0; + + if ( + animationExists && + window.getComputedStyle(this._animation.container).visibility !== "hidden" + ) { + var lastWidth = this._lastWidth; + animationContainer = this._animation.container; + if (width > 900) { + animationWidth = 169; + if (lastWidth <= 900) { + animationContainer.style.width = "169px"; + animationContainer.style.height = "112px"; + this._animation.resize(); + } + } else if (width >= 600) { + animationWidth = 136; + if (lastWidth < 600 || lastWidth > 900) { + animationContainer.style.width = "136px"; + animationContainer.style.height = "90px"; + this._animation.resize(); + } + } else { + animationWidth = 106; + if (lastWidth > 600 || lastWidth === 0) { + animationContainer.style.width = "106px"; + animationContainer.style.height = "70px"; + this._animation.resize(); + } + } + creditLeft = animationWidth + 5; + } + + if ( + timelineExists && + window.getComputedStyle(this._timeline.container).visibility !== "hidden" + ) { + var fullscreenButton = this._fullscreenButton; + var vrButton = this._vrButton; + var timelineContainer = timeline.container; + var timelineStyle = timelineContainer.style; + + creditBottom = timelineContainer.clientHeight + 3; + timelineStyle.left = animationWidth + "px"; + + var pixels = 0; + if (defined(fullscreenButton)) { + pixels += fullscreenButton.container.clientWidth; + } + if (defined(vrButton)) { + pixels += vrButton.container.clientWidth; + } + + timelineStyle.right = pixels + "px"; + timeline.resize(); + } + + this._bottomContainer.style.left = creditLeft + "px"; + this._bottomContainer.style.bottom = creditBottom + "px"; + + this._lastWidth = width; + this._lastHeight = height; +}; + +/** + * This forces the widget to re-think its layout, including + * widget sizes and credit placement. + */ +Viewer.prototype.forceResize = function () { + this._lastWidth = 0; + this.resize(); +}; + +/** + * Renders the scene. This function is called automatically + * unless useDefaultRenderLoop is set to false; + */ +Viewer.prototype.render = function () { + this._cesiumWidget.render(); +}; + +/** + * @returns {Boolean} true if the object has been destroyed, false otherwise. + */ +Viewer.prototype.isDestroyed = function () { + return false; +}; + +/** + * Destroys the widget. Should be called if permanently + * removing the widget from layout. + */ +Viewer.prototype.destroy = function () { + var i; + + this.screenSpaceEventHandler.removeInputAction( + ScreenSpaceEventType.LEFT_CLICK + ); + this.screenSpaceEventHandler.removeInputAction( + ScreenSpaceEventType.LEFT_DOUBLE_CLICK + ); + + // Unsubscribe from data sources + var dataSources = this.dataSources; + var dataSourceLength = dataSources.length; + for (i = 0; i < dataSourceLength; i++) { + this._dataSourceRemoved(dataSources, dataSources.get(i)); + } + this._dataSourceRemoved(undefined, this._dataSourceDisplay.defaultDataSource); + + this._container.removeChild(this._element); + this._element.removeChild(this._toolbar); + + this._eventHelper.removeAll(); + + if (defined(this._geocoder)) { + this._geocoder = this._geocoder.destroy(); + } + + if (defined(this._homeButton)) { + this._homeButton = this._homeButton.destroy(); + } + + if (defined(this._sceneModePicker)) { + this._sceneModePicker = this._sceneModePicker.destroy(); + } + + if (defined(this._projectionPicker)) { + this._projectionPicker = this._projectionPicker.destroy(); + } + + if (defined(this._baseLayerPicker)) { + this._baseLayerPicker = this._baseLayerPicker.destroy(); + } + + if (defined(this._animation)) { + this._element.removeChild(this._animation.container); + this._animation = this._animation.destroy(); + } + + if (defined(this._timeline)) { + this._timeline.removeEventListener( + "settime", + onTimelineScrubfunction, + false + ); + this._element.removeChild(this._timeline.container); + this._timeline = this._timeline.destroy(); + } + + if (defined(this._fullscreenButton)) { + this._fullscreenSubscription.dispose(); + this._element.removeChild(this._fullscreenButton.container); + this._fullscreenButton = this._fullscreenButton.destroy(); + } + + if (defined(this._vrButton)) { + this._vrSubscription.dispose(); + this._vrModeSubscription.dispose(); + this._element.removeChild(this._vrButton.container); + this._vrButton = this._vrButton.destroy(); + } + + if (defined(this._infoBox)) { + this._element.removeChild(this._infoBox.container); + this._infoBox = this._infoBox.destroy(); + } + + if (defined(this._selectionIndicator)) { + this._element.removeChild(this._selectionIndicator.container); + this._selectionIndicator = this._selectionIndicator.destroy(); + } + + if (this._destroyClockViewModel) { + this._clockViewModel = this._clockViewModel.destroy(); + } + this._dataSourceDisplay = this._dataSourceDisplay.destroy(); + this._cesiumWidget = this._cesiumWidget.destroy(); + + if (this._destroyDataSourceCollection) { + this._dataSourceCollection = this._dataSourceCollection.destroy(); + } + + return destroyObject(this); +}; + +/** + * @private + */ +Viewer.prototype._dataSourceAdded = function ( + dataSourceCollection, + dataSource +) { + var entityCollection = dataSource.entities; + entityCollection.collectionChanged.addEventListener( + Viewer.prototype._onEntityCollectionChanged, + this + ); +}; + +/** + * @private + */ +Viewer.prototype._dataSourceRemoved = function ( + dataSourceCollection, + dataSource +) { + var entityCollection = dataSource.entities; + entityCollection.collectionChanged.removeEventListener( + Viewer.prototype._onEntityCollectionChanged, + this + ); + + if (defined(this.trackedEntity)) { + if ( + entityCollection.getById(this.trackedEntity.id) === this.trackedEntity + ) { + this.trackedEntity = undefined; + } + } + + if (defined(this.selectedEntity)) { + if ( + entityCollection.getById(this.selectedEntity.id) === this.selectedEntity + ) { + this.selectedEntity = undefined; + } + } +}; + +/** + * @private + */ +Viewer.prototype._onTick = function (clock) { + var time = clock.currentTime; + + var isUpdated = this._dataSourceDisplay.update(time); + if (this._allowDataSourcesToSuspendAnimation) { + this._clockViewModel.canAnimate = isUpdated; + } + + var entityView = this._entityView; + if (defined(entityView)) { + var trackedEntity = this._trackedEntity; + var trackedState = this._dataSourceDisplay.getBoundingSphere( + trackedEntity, + false, + boundingSphereScratch + ); + if (trackedState === BoundingSphereState.DONE) { + entityView.update(time, boundingSphereScratch); + } + } + + var position; + var enableCamera = false; + var selectedEntity = this.selectedEntity; + var showSelection = defined(selectedEntity) && this._enableInfoOrSelection; + + if ( + showSelection && + selectedEntity.isShowing && + selectedEntity.isAvailable(time) + ) { + var state = this._dataSourceDisplay.getBoundingSphere( + selectedEntity, + true, + boundingSphereScratch + ); + if (state !== BoundingSphereState.FAILED) { + position = boundingSphereScratch.center; + } else if (defined(selectedEntity.position)) { + position = selectedEntity.position.getValue(time, position); + } + enableCamera = defined(position); + } + + var selectionIndicatorViewModel = defined(this._selectionIndicator) + ? this._selectionIndicator.viewModel + : undefined; + if (defined(selectionIndicatorViewModel)) { + selectionIndicatorViewModel.position = Cartesian3.clone( + position, + selectionIndicatorViewModel.position + ); + selectionIndicatorViewModel.showSelection = showSelection && enableCamera; + selectionIndicatorViewModel.update(); + } + + var infoBoxViewModel = defined(this._infoBox) + ? this._infoBox.viewModel + : undefined; + if (defined(infoBoxViewModel)) { + infoBoxViewModel.showInfo = showSelection; + infoBoxViewModel.enableCamera = enableCamera; + infoBoxViewModel.isCameraTracking = + this.trackedEntity === this.selectedEntity; + + if (showSelection) { + infoBoxViewModel.titleText = defaultValue( + selectedEntity.name, + selectedEntity.id + ); + infoBoxViewModel.description = Property.getValueOrDefault( + selectedEntity.description, + time, + "" + ); + } else { + infoBoxViewModel.titleText = ""; + infoBoxViewModel.description = ""; + } + } +}; + +/** + * @private + */ +Viewer.prototype._onEntityCollectionChanged = function ( + collection, + added, + removed +) { + var length = removed.length; + for (var i = 0; i < length; i++) { + var removedObject = removed[i]; + if (this.trackedEntity === removedObject) { + this.trackedEntity = undefined; + } + if (this.selectedEntity === removedObject) { + this.selectedEntity = undefined; + } + } +}; + +/** + * @private + */ +Viewer.prototype._onInfoBoxCameraClicked = function (infoBoxViewModel) { + if ( + infoBoxViewModel.isCameraTracking && + this.trackedEntity === this.selectedEntity + ) { + this.trackedEntity = undefined; + } else { + var selectedEntity = this.selectedEntity; + var position = selectedEntity.position; + if (defined(position)) { + this.trackedEntity = this.selectedEntity; + } else { + this.zoomTo(this.selectedEntity); + } + } +}; + +/** + * @private + */ +Viewer.prototype._clearTrackedObject = function () { + this.trackedEntity = undefined; +}; + +/** + * @private + */ +Viewer.prototype._onInfoBoxClockClicked = function (infoBoxViewModel) { + this.selectedEntity = undefined; +}; + +/** + * @private + */ +Viewer.prototype._clearObjects = function () { + this.trackedEntity = undefined; + this.selectedEntity = undefined; +}; + +/** + * @private + */ +Viewer.prototype._onDataSourceChanged = function (dataSource) { + if (this.clockTrackedDataSource === dataSource) { + trackDataSourceClock(this.timeline, this.clock, dataSource); + } +}; + +/** + * @private + */ +Viewer.prototype._onDataSourceAdded = function ( + dataSourceCollection, + dataSource +) { + if (this._automaticallyTrackDataSourceClocks) { + this.clockTrackedDataSource = dataSource; + } + var id = dataSource.entities.id; + var removalFunc = this._eventHelper.add( + dataSource.changedEvent, + Viewer.prototype._onDataSourceChanged, + this + ); + this._dataSourceChangedListeners[id] = removalFunc; +}; + +/** + * @private + */ +Viewer.prototype._onDataSourceRemoved = function ( + dataSourceCollection, + dataSource +) { + var resetClock = this.clockTrackedDataSource === dataSource; + var id = dataSource.entities.id; + this._dataSourceChangedListeners[id](); + this._dataSourceChangedListeners[id] = undefined; + if (resetClock) { + var numDataSources = dataSourceCollection.length; + if (this._automaticallyTrackDataSourceClocks && numDataSources > 0) { + this.clockTrackedDataSource = dataSourceCollection.get( + numDataSources - 1 + ); + } else { + this.clockTrackedDataSource = undefined; + } + } +}; + +/** + * Asynchronously sets the camera to view the provided entity, entities, or data source. + * If the data source is still in the process of loading or the visualization is otherwise still loading, + * this method waits for the data to be ready before performing the zoom. + * + *

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + * The heading and the pitch angles are defined in the local east-north-up reference frame. + * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is + * zero, a range will be computed such that the whole bounding sphere is visible.

+ * + *

In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + * target will be the range. The heading will be determined from the offset. If the heading cannot be + * determined from the offset, the heading will be north.

+ * + * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise.} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types. + * @param {HeadingPitchRange} [offset] The offset from the center of the entity in the local east-north-up reference frame. + * @returns {Promise.} A Promise that resolves to true if the zoom was successful or false if the target is not currently visualized in the scene or the zoom was cancelled. + */ +Viewer.prototype.zoomTo = function (target, offset) { + var options = { + offset: offset, + }; + return zoomToOrFly(this, target, options, false); +}; + +/** + * Flies the camera to the provided entity, entities, or data source. + * If the data source is still in the process of loading or the visualization is otherwise still loading, + * this method waits for the data to be ready before performing the flight. + * + *

The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere. + * The heading and the pitch angles are defined in the local east-north-up reference frame. + * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch + * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is + * zero, a range will be computed such that the whole bounding sphere is visible.

+ * + *

In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the + * target will be the range. The heading will be determined from the offset. If the heading cannot be + * determined from the offset, the heading will be north.

+ * + * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise.} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types. + * @param {Object} [options] Object with the following properties: + * @param {Number} [options.duration=3.0] The duration of the flight in seconds. + * @param {Number} [options.maximumHeight] The maximum height at the peak of the flight. + * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target. + * @returns {Promise.} A Promise that resolves to true if the flight was successful or false if the target is not currently visualized in the scene or the flight was cancelled. //TODO: Cleanup entity mentions + */ +Viewer.prototype.flyTo = function (target, options) { + return zoomToOrFly(this, target, options, true); +}; + +function zoomToOrFly(that, zoomTarget, options, isFlight) { + //>>includeStart('debug', pragmas.debug); + if (!defined(zoomTarget)) { + throw new DeveloperError("zoomTarget is required."); + } + //>>includeEnd('debug'); + + cancelZoom(that); + + //We can't actually perform the zoom until all visualization is ready and + //bounding spheres have been computed. Therefore we create and return + //a deferred which will be resolved as part of the post-render step in the + //frame that actually performs the zoom + var zoomPromise = when.defer(); + that._zoomPromise = zoomPromise; + that._zoomIsFlight = isFlight; + that._zoomOptions = options; + + when(zoomTarget, function (zoomTarget) { + //Only perform the zoom if it wasn't cancelled before the promise resolved. + if (that._zoomPromise !== zoomPromise) { + return; + } + + //If the zoom target is a rectangular imagery in an ImageLayer + if (zoomTarget instanceof ImageryLayer) { + zoomTarget + .getViewableRectangle() + .then(function (rectangle) { + return computeFlyToLocationForRectangle(rectangle, that.scene); + }) + .then(function (position) { + //Only perform the zoom if it wasn't cancelled before the promise was resolved + if (that._zoomPromise === zoomPromise) { + that._zoomTarget = position; + } + }); + return; + } + + //If the zoom target is a Cesium3DTileset + if (zoomTarget instanceof Cesium3DTileset) { + that._zoomTarget = zoomTarget; + return; + } + + //If the zoom target is a TimeDynamicPointCloud + if (zoomTarget instanceof TimeDynamicPointCloud) { + that._zoomTarget = zoomTarget; + return; + } + + //If the zoom target is a data source, and it's in the middle of loading, wait for it to finish loading. + if (zoomTarget.isLoading && defined(zoomTarget.loadingEvent)) { + var removeEvent = zoomTarget.loadingEvent.addEventListener(function () { + removeEvent(); + + //Only perform the zoom if it wasn't cancelled before the data source finished. + if (that._zoomPromise === zoomPromise) { + that._zoomTarget = zoomTarget.entities.values.slice(0); + } + }); + return; + } + + //Zoom target is already an array, just copy it and return. + if (Array.isArray(zoomTarget)) { + that._zoomTarget = zoomTarget.slice(0); + return; + } + + //If zoomTarget is an EntityCollection, this will retrieve the array + zoomTarget = defaultValue(zoomTarget.values, zoomTarget); + + //If zoomTarget is a DataSource, this will retrieve the array. + if (defined(zoomTarget.entities)) { + zoomTarget = zoomTarget.entities.values; + } + + //Zoom target is already an array, just copy it and return. + if (Array.isArray(zoomTarget)) { + that._zoomTarget = zoomTarget.slice(0); + } else { + //Single entity + that._zoomTarget = [zoomTarget]; + } + }); + + that.scene.requestRender(); + return zoomPromise.promise; +} + +function clearZoom(viewer) { + viewer._zoomPromise = undefined; + viewer._zoomTarget = undefined; + viewer._zoomOptions = undefined; +} + +function cancelZoom(viewer) { + var zoomPromise = viewer._zoomPromise; + if (defined(zoomPromise)) { + clearZoom(viewer); + zoomPromise.resolve(false); + } +} + +/** + * @private + */ +Viewer.prototype._postRender = function () { + updateZoomTarget(this); + updateTrackedEntity(this); +}; + +function updateZoomTarget(viewer) { + var target = viewer._zoomTarget; + if (!defined(target) || viewer.scene.mode === SceneMode.MORPHING) { + return; + } + + var scene = viewer.scene; + var camera = scene.camera; + var zoomPromise = viewer._zoomPromise; + var zoomOptions = defaultValue(viewer._zoomOptions, {}); + var options; + var boundingSphere; + + // If zoomTarget was Cesium3DTileset + if (target instanceof Cesium3DTileset) { + return target.readyPromise.then(function () { + var boundingSphere = target.boundingSphere; + // If offset was originally undefined then give it base value instead of empty object + if (!defined(zoomOptions.offset)) { + zoomOptions.offset = new HeadingPitchRange( + 0.0, + -0.5, + boundingSphere.radius + ); + } + + options = { + offset: zoomOptions.offset, + duration: zoomOptions.duration, + maximumHeight: zoomOptions.maximumHeight, + complete: function () { + zoomPromise.resolve(true); + }, + cancel: function () { + zoomPromise.resolve(false); + }, + }; + + if (viewer._zoomIsFlight) { + camera.flyToBoundingSphere(target.boundingSphere, options); + } else { + camera.viewBoundingSphere(boundingSphere, zoomOptions.offset); + camera.lookAtTransform(Matrix4.IDENTITY); + + // Finish the promise + zoomPromise.resolve(true); + } + + clearZoom(viewer); + }); + } + + // If zoomTarget was TimeDynamicPointCloud + if (target instanceof TimeDynamicPointCloud) { + return target.readyPromise.then(function () { + var boundingSphere = target.boundingSphere; + // If offset was originally undefined then give it base value instead of empty object + if (!defined(zoomOptions.offset)) { + zoomOptions.offset = new HeadingPitchRange( + 0.0, + -0.5, + boundingSphere.radius + ); + } + + options = { + offset: zoomOptions.offset, + duration: zoomOptions.duration, + maximumHeight: zoomOptions.maximumHeight, + complete: function () { + zoomPromise.resolve(true); + }, + cancel: function () { + zoomPromise.resolve(false); + }, + }; + + if (viewer._zoomIsFlight) { + camera.flyToBoundingSphere(boundingSphere, options); + } else { + camera.viewBoundingSphere(boundingSphere, zoomOptions.offset); + camera.lookAtTransform(Matrix4.IDENTITY); + + // Finish the promise + zoomPromise.resolve(true); + } + + clearZoom(viewer); + }); + } + + // If zoomTarget was an ImageryLayer + if (target instanceof Cartographic) { + options = { + destination: scene.mapProjection.ellipsoid.cartographicToCartesian( + target + ), + duration: zoomOptions.duration, + maximumHeight: zoomOptions.maximumHeight, + complete: function () { + zoomPromise.resolve(true); + }, + cancel: function () { + zoomPromise.resolve(false); + }, + }; + + if (viewer._zoomIsFlight) { + camera.flyTo(options); + } else { + camera.setView(options); + zoomPromise.resolve(true); + } + clearZoom(viewer); + return; + } + + var entities = target; + + var boundingSpheres = []; + for (var i = 0, len = entities.length; i < len; i++) { + var state = viewer._dataSourceDisplay.getBoundingSphere( + entities[i], + false, + boundingSphereScratch + ); + + if (state === BoundingSphereState.PENDING) { + return; + } else if (state !== BoundingSphereState.FAILED) { + boundingSpheres.push(BoundingSphere.clone(boundingSphereScratch)); + } + } + + if (boundingSpheres.length === 0) { + cancelZoom(viewer); + return; + } + + //Stop tracking the current entity. + viewer.trackedEntity = undefined; + + boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres); + + if (!viewer._zoomIsFlight) { + camera.viewBoundingSphere(boundingSphere, zoomOptions.offset); + camera.lookAtTransform(Matrix4.IDENTITY); + clearZoom(viewer); + zoomPromise.resolve(true); + } else { + clearZoom(viewer); + camera.flyToBoundingSphere(boundingSphere, { + duration: zoomOptions.duration, + maximumHeight: zoomOptions.maximumHeight, + complete: function () { + zoomPromise.resolve(true); + }, + cancel: function () { + zoomPromise.resolve(false); + }, + offset: zoomOptions.offset, + }); + } +} + +function updateTrackedEntity(viewer) { + if (!viewer._needTrackedEntityUpdate) { + return; + } + + var trackedEntity = viewer._trackedEntity; + var currentTime = viewer.clock.currentTime; + + //Verify we have a current position at this time. This is only triggered if a position + //has become undefined after trackedEntity is set but before the boundingSphere has been + //computed. In this case, we will track the entity once it comes back into existence. + var currentPosition = Property.getValueOrUndefined( + trackedEntity.position, + currentTime + ); + + if (!defined(currentPosition)) { + return; + } + + var scene = viewer.scene; + + var state = viewer._dataSourceDisplay.getBoundingSphere( + trackedEntity, + false, + boundingSphereScratch + ); + if (state === BoundingSphereState.PENDING) { + return; + } + + var sceneMode = scene.mode; + if ( + sceneMode === SceneMode.COLUMBUS_VIEW || + sceneMode === SceneMode.SCENE2D + ) { + scene.screenSpaceCameraController.enableTranslate = false; + } + + if ( + sceneMode === SceneMode.COLUMBUS_VIEW || + sceneMode === SceneMode.SCENE3D + ) { + scene.screenSpaceCameraController.enableTilt = false; + } + + var bs = + state !== BoundingSphereState.FAILED ? boundingSphereScratch : undefined; + viewer._entityView = new EntityView( + trackedEntity, + scene, + scene.mapProjection.ellipsoid + ); + viewer._entityView.update(currentTime, bs); + viewer._needTrackedEntityUpdate = false; +} + +/** + * A function that augments a Viewer instance with additional functionality. + * @callback Viewer.ViewerMixin + * @param {Viewer} viewer The viewer instance. + * @param {Object} options Options object to be passed to the mixin function. + * + * @see Viewer#extend + */ +export default Viewer; diff --git a/cate/webapi/app/cesium/Widgets/Viewer/viewerCesium3DTilesInspectorMixin.js b/cate/webapi/app/cesium/Widgets/Viewer/viewerCesium3DTilesInspectorMixin.js new file mode 100644 index 000000000..c4bb17614 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/viewerCesium3DTilesInspectorMixin.js @@ -0,0 +1,37 @@ +import Check from "../../Core/Check.js"; +import Cesium3DTilesInspector from "../Cesium3DTilesInspector/Cesium3DTilesInspector.js"; + +/** + * A mixin which adds the {@link Cesium3DTilesInspector} widget to the {@link Viewer} widget. + * Rather than being called directly, this function is normally passed as + * a parameter to {@link Viewer#extend}, as shown in the example below. + * @function + * + * @param {Viewer} viewer The viewer instance. + * + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); + * viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin); + */ +function viewerCesium3DTilesInspectorMixin(viewer) { + //>>includeStart('debug', pragmas.debug); + Check.typeOf.object("viewer", viewer); + //>>includeEnd('debug'); + + var container = document.createElement("div"); + container.className = "cesium-viewer-cesium3DTilesInspectorContainer"; + viewer.container.appendChild(container); + var cesium3DTilesInspector = new Cesium3DTilesInspector( + container, + viewer.scene + ); + + Object.defineProperties(viewer, { + cesium3DTilesInspector: { + get: function () { + return cesium3DTilesInspector; + }, + }, + }); +} +export default viewerCesium3DTilesInspectorMixin; diff --git a/cate/webapi/app/cesium/Widgets/Viewer/viewerCesiumInspectorMixin.js b/cate/webapi/app/cesium/Widgets/Viewer/viewerCesiumInspectorMixin.js new file mode 100644 index 000000000..de8518f1c --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/viewerCesiumInspectorMixin.js @@ -0,0 +1,44 @@ +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import CesiumInspector from "../CesiumInspector/CesiumInspector.js"; + +/** + * A mixin which adds the CesiumInspector widget to the Viewer widget. + * Rather than being called directly, this function is normally passed as + * a parameter to {@link Viewer#extend}, as shown in the example below. + * @function + * + * @param {Viewer} viewer The viewer instance. + * + * @exception {DeveloperError} viewer is required. + * + * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Inspector.html|Cesium Sandcastle Cesium Inspector Demo} + * + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); + * viewer.extend(Cesium.viewerCesiumInspectorMixin); + */ +function viewerCesiumInspectorMixin(viewer) { + //>>includeStart('debug', pragmas.debug); + if (!defined(viewer)) { + throw new DeveloperError("viewer is required."); + } + //>>includeEnd('debug'); + + var cesiumInspectorContainer = document.createElement("div"); + cesiumInspectorContainer.className = "cesium-viewer-cesiumInspectorContainer"; + viewer.container.appendChild(cesiumInspectorContainer); + var cesiumInspector = new CesiumInspector( + cesiumInspectorContainer, + viewer.scene + ); + + Object.defineProperties(viewer, { + cesiumInspector: { + get: function () { + return cesiumInspector; + }, + }, + }); +} +export default viewerCesiumInspectorMixin; diff --git a/cate/webapi/app/cesium/Widgets/Viewer/viewerDragDropMixin.js b/cate/webapi/app/cesium/Widgets/Viewer/viewerDragDropMixin.js new file mode 100644 index 000000000..5130fb1e1 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/viewerDragDropMixin.js @@ -0,0 +1,306 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import Event from "../../Core/Event.js"; +import wrapFunction from "../../Core/wrapFunction.js"; +import CzmlDataSource from "../../DataSources/CzmlDataSource.js"; +import GeoJsonDataSource from "../../DataSources/GeoJsonDataSource.js"; +import KmlDataSource from "../../DataSources/KmlDataSource.js"; +import getElement from "../getElement.js"; + +/** + * A mixin which adds default drag and drop support for CZML files to the Viewer widget. + * Rather than being called directly, this function is normally passed as + * a parameter to {@link Viewer#extend}, as shown in the example below. + * @function viewerDragDropMixin + + * @param {Viewer} viewer The viewer instance. + * @param {Object} [options] Object with the following properties: + * @param {Element|String} [options.dropTarget=viewer.container] The DOM element which will serve as the drop target. + * @param {Boolean} [options.clearOnDrop=true] When true, dropping files will clear all existing data sources first, when false, new data sources will be loaded after the existing ones. + * @param {Boolean} [options.flyToOnDrop=true] When true, dropping files will fly to the data source once it is loaded. + * @param {Boolean} [options.clampToGround=true] When true, datasources are clamped to the ground. + * @param {Proxy} [options.proxy] The proxy to be used for KML network links. + * + * @exception {DeveloperError} Element with id does not exist in the document. + * @exception {DeveloperError} dropTarget is already defined by another mixin. + * @exception {DeveloperError} dropEnabled is already defined by another mixin. + * @exception {DeveloperError} dropError is already defined by another mixin. + * @exception {DeveloperError} clearOnDrop is already defined by another mixin. + * + * @example + * // Add basic drag and drop support and pop up an alert window on error. + * var viewer = new Cesium.Viewer('cesiumContainer'); + * viewer.extend(Cesium.viewerDragDropMixin); + * viewer.dropError.addEventListener(function(viewerArg, source, error) { + * window.alert('Error processing ' + source + ':' + error); + * }); + */ +function viewerDragDropMixin(viewer, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(viewer)) { + throw new DeveloperError("viewer is required."); + } + if (viewer.hasOwnProperty("dropTarget")) { + throw new DeveloperError("dropTarget is already defined by another mixin."); + } + if (viewer.hasOwnProperty("dropEnabled")) { + throw new DeveloperError( + "dropEnabled is already defined by another mixin." + ); + } + if (viewer.hasOwnProperty("dropError")) { + throw new DeveloperError("dropError is already defined by another mixin."); + } + if (viewer.hasOwnProperty("clearOnDrop")) { + throw new DeveloperError( + "clearOnDrop is already defined by another mixin." + ); + } + if (viewer.hasOwnProperty("flyToOnDrop")) { + throw new DeveloperError( + "flyToOnDrop is already defined by another mixin." + ); + } + //>>includeEnd('debug'); + + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + //Local variables to be closed over by defineProperties. + var dropEnabled = true; + var flyToOnDrop = defaultValue(options.flyToOnDrop, true); + var dropError = new Event(); + var clearOnDrop = defaultValue(options.clearOnDrop, true); + var dropTarget = defaultValue(options.dropTarget, viewer.container); + var clampToGround = defaultValue(options.clampToGround, true); + var proxy = options.proxy; + + dropTarget = getElement(dropTarget); + + Object.defineProperties(viewer, { + /** + * Gets or sets the element to serve as the drop target. + * @memberof viewerDragDropMixin.prototype + * @type {Element} + */ + dropTarget: { + //TODO See https://github.com/CesiumGS/cesium/issues/832 + get: function () { + return dropTarget; + }, + set: function (value) { + //>>includeStart('debug', pragmas.debug); + if (!defined(value)) { + throw new DeveloperError("value is required."); + } + //>>includeEnd('debug'); + + unsubscribe(dropTarget, handleDrop); + dropTarget = value; + subscribe(dropTarget, handleDrop); + }, + }, + + /** + * Gets or sets a value indicating if drag and drop support is enabled. + * @memberof viewerDragDropMixin.prototype + * @type {Element} + */ + dropEnabled: { + get: function () { + return dropEnabled; + }, + set: function (value) { + if (value !== dropEnabled) { + if (value) { + subscribe(dropTarget, handleDrop); + } else { + unsubscribe(dropTarget, handleDrop); + } + dropEnabled = value; + } + }, + }, + + /** + * Gets the event that will be raised when an error is encountered during drop processing. + * @memberof viewerDragDropMixin.prototype + * @type {Event} + */ + dropError: { + get: function () { + return dropError; + }, + }, + + /** + * Gets or sets a value indicating if existing data sources should be cleared before adding the newly dropped sources. + * @memberof viewerDragDropMixin.prototype + * @type {Boolean} + */ + clearOnDrop: { + get: function () { + return clearOnDrop; + }, + set: function (value) { + clearOnDrop = value; + }, + }, + + /** + * Gets or sets a value indicating if the camera should fly to the data source after it is loaded. + * @memberof viewerDragDropMixin.prototype + * @type {Boolean} + */ + flyToOnDrop: { + get: function () { + return flyToOnDrop; + }, + set: function (value) { + flyToOnDrop = value; + }, + }, + + /** + * Gets or sets the proxy to be used for KML. + * @memberof viewerDragDropMixin.prototype + * @type {Proxy} + */ + proxy: { + get: function () { + return proxy; + }, + set: function (value) { + proxy = value; + }, + }, + + /** + * Gets or sets a value indicating if the datasources should be clamped to the ground + * @memberof viewerDragDropMixin.prototype + * @type {Boolean} + */ + clampToGround: { + get: function () { + return clampToGround; + }, + set: function (value) { + clampToGround = value; + }, + }, + }); + + function handleDrop(event) { + stop(event); + + if (clearOnDrop) { + viewer.entities.removeAll(); + viewer.dataSources.removeAll(); + } + + var files = event.dataTransfer.files; + var length = files.length; + for (var i = 0; i < length; i++) { + var file = files[i]; + var reader = new FileReader(); + reader.onload = createOnLoadCallback(viewer, file, proxy, clampToGround); + reader.onerror = createDropErrorCallback(viewer, file); + reader.readAsText(file); + } + } + + //Enable drop by default; + subscribe(dropTarget, handleDrop); + + //Wrap the destroy function to make sure all events are unsubscribed from + viewer.destroy = wrapFunction(viewer, viewer.destroy, function () { + viewer.dropEnabled = false; + }); + + //Specs need access to handleDrop + viewer._handleDrop = handleDrop; +} + +function stop(event) { + event.stopPropagation(); + event.preventDefault(); +} + +function unsubscribe(dropTarget, handleDrop) { + var currentTarget = dropTarget; + if (defined(currentTarget)) { + currentTarget.removeEventListener("drop", handleDrop, false); + currentTarget.removeEventListener("dragenter", stop, false); + currentTarget.removeEventListener("dragover", stop, false); + currentTarget.removeEventListener("dragexit", stop, false); + } +} + +function subscribe(dropTarget, handleDrop) { + dropTarget.addEventListener("drop", handleDrop, false); + dropTarget.addEventListener("dragenter", stop, false); + dropTarget.addEventListener("dragover", stop, false); + dropTarget.addEventListener("dragexit", stop, false); +} + +function createOnLoadCallback(viewer, file, proxy, clampToGround) { + var scene = viewer.scene; + return function (evt) { + var fileName = file.name; + try { + var loadPromise; + + if (/\.czml$/i.test(fileName)) { + loadPromise = CzmlDataSource.load(JSON.parse(evt.target.result), { + sourceUri: fileName, + }); + } else if ( + /\.geojson$/i.test(fileName) || + /\.json$/i.test(fileName) || + /\.topojson$/i.test(fileName) + ) { + loadPromise = GeoJsonDataSource.load(JSON.parse(evt.target.result), { + sourceUri: fileName, + clampToGround: clampToGround, + }); + } else if (/\.(kml|kmz)$/i.test(fileName)) { + loadPromise = KmlDataSource.load(file, { + sourceUri: fileName, + proxy: proxy, + camera: scene.camera, + canvas: scene.canvas, + clampToGround: clampToGround, + }); + } else { + viewer.dropError.raiseEvent( + viewer, + fileName, + "Unrecognized file: " + fileName + ); + return; + } + + if (defined(loadPromise)) { + viewer.dataSources + .add(loadPromise) + .then(function (dataSource) { + if (viewer.flyToOnDrop) { + viewer.flyTo(dataSource); + } + }) + .otherwise(function (error) { + viewer.dropError.raiseEvent(viewer, fileName, error); + }); + } + } catch (error) { + viewer.dropError.raiseEvent(viewer, fileName, error); + } + }; +} + +function createDropErrorCallback(viewer, file) { + return function (evt) { + viewer.dropError.raiseEvent(viewer, file.name, evt.target.error); + }; +} +export default viewerDragDropMixin; diff --git a/cate/webapi/app/cesium/Widgets/Viewer/viewerPerformanceWatchdogMixin.js b/cate/webapi/app/cesium/Widgets/Viewer/viewerPerformanceWatchdogMixin.js new file mode 100644 index 000000000..c0cbb78c5 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/Viewer/viewerPerformanceWatchdogMixin.js @@ -0,0 +1,49 @@ +import defaultValue from "../../Core/defaultValue.js"; +import defined from "../../Core/defined.js"; +import DeveloperError from "../../Core/DeveloperError.js"; +import PerformanceWatchdog from "../PerformanceWatchdog/PerformanceWatchdog.js"; + +/** + * A mixin which adds the {@link PerformanceWatchdog} widget to the {@link Viewer} widget. + * Rather than being called directly, this function is normally passed as + * a parameter to {@link Viewer#extend}, as shown in the example below. + * @function + * + * @param {Viewer} viewer The viewer instance. + * @param {Object} [options] An object with properties. + * @param {String} [options.lowFrameRateMessage='This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] The + * message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure + * it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks. + * + * @exception {DeveloperError} viewer is required. + * + * @example + * var viewer = new Cesium.Viewer('cesiumContainer'); + * viewer.extend(Cesium.viewerPerformanceWatchdogMixin, { + * lowFrameRateMessage : 'Why is this going so slowly?' + * }); + */ +function viewerPerformanceWatchdogMixin(viewer, options) { + //>>includeStart('debug', pragmas.debug); + if (!defined(viewer)) { + throw new DeveloperError("viewer is required."); + } + //>>includeEnd('debug'); + + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + + var performanceWatchdog = new PerformanceWatchdog({ + scene: viewer.scene, + container: viewer.bottomContainer, + lowFrameRateMessage: options.lowFrameRateMessage, + }); + + Object.defineProperties(viewer, { + performanceWatchdog: { + get: function () { + return performanceWatchdog; + }, + }, + }); +} +export default viewerPerformanceWatchdogMixin; diff --git a/cate/webapi/app/cesium/Widgets/createCommand.js b/cate/webapi/app/cesium/Widgets/createCommand.js new file mode 100644 index 000000000..27e761f23 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/createCommand.js @@ -0,0 +1,67 @@ +import defaultValue from "../Core/defaultValue.js"; +import defined from "../Core/defined.js"; +import DeveloperError from "../Core/DeveloperError.js"; +import Event from "../Core/Event.js"; +import knockout from "../ThirdParty/knockout.js"; + +/** + * Create a Command from a given function, for use with ViewModels. + * + * A Command is a function with an extra canExecute observable property to determine + * whether the command can be executed. When executed, a Command function will check the + * value of canExecute and throw if false. It also provides events for when + * a command has been or is about to be executed. + * + * @function + * + * @param {Function} func The function to execute. + * @param {Boolean} [canExecute=true] A boolean indicating whether the function can currently be executed. + */ +function createCommand(func, canExecute) { + //>>includeStart('debug', pragmas.debug); + if (!defined(func)) { + throw new DeveloperError("func is required."); + } + //>>includeEnd('debug'); + + canExecute = defaultValue(canExecute, true); + + var beforeExecute = new Event(); + var afterExecute = new Event(); + + function command() { + //>>includeStart('debug', pragmas.debug); + if (!command.canExecute) { + throw new DeveloperError("Cannot execute command, canExecute is false."); + } + //>>includeEnd('debug'); + + var commandInfo = { + args: arguments, + cancel: false, + }; + + var result; + beforeExecute.raiseEvent(commandInfo); + if (!commandInfo.cancel) { + result = func.apply(null, arguments); + afterExecute.raiseEvent(result); + } + return result; + } + + command.canExecute = canExecute; + knockout.track(command, ["canExecute"]); + + Object.defineProperties(command, { + beforeExecute: { + value: beforeExecute, + }, + afterExecute: { + value: afterExecute, + }, + }); + + return command; +} +export default createCommand; diff --git a/cate/webapi/app/cesium/Widgets/getElement.js b/cate/webapi/app/cesium/Widgets/getElement.js new file mode 100644 index 000000000..132e9853c --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/getElement.js @@ -0,0 +1,26 @@ +import DeveloperError from "../Core/DeveloperError.js"; + +/** + * If element is a string, look up the element in the DOM by ID. Otherwise return element. + * + * @private + * + * @exception {DeveloperError} Element with id "id" does not exist in the document. + */ +function getElement(element) { + if (typeof element === "string") { + var foundElement = document.getElementById(element); + + //>>includeStart('debug', pragmas.debug); + if (foundElement === null) { + throw new DeveloperError( + 'Element with id "' + element + '" does not exist in the document.' + ); + } + //>>includeEnd('debug'); + + element = foundElement; + } + return element; +} +export default getElement; diff --git a/cate/webapi/app/cesium/Widgets/lighter.css b/cate/webapi/app/cesium/Widgets/lighter.css new file mode 100644 index 000000000..ba847f067 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/lighter.css @@ -0,0 +1,7 @@ +@import url(./lighterShared.css); +@import url(./Animation/lighter.css); +@import url(./BaseLayerPicker/lighter.css); +@import url(./CesiumWidget/lighter.css); +@import url(./Geocoder/lighter.css); +@import url(./Timeline/lighter.css); +@import url(./NavigationHelpButton/lighter.css); diff --git a/cate/webapi/app/cesium/Widgets/lighterShared.css b/cate/webapi/app/cesium/Widgets/lighterShared.css new file mode 100644 index 000000000..7afa4ec75 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/lighterShared.css @@ -0,0 +1,52 @@ +.cesium-lighter .cesium-button { + color: #111; /* For text buttons */ + fill: #111; /* For SVG buttons */ + background: #e2f0ff; + border: 1px solid #759dc0; +} + +.cesium-lighter .cesium-button:focus { + color: #000; /* For text buttons */ + fill: #000; /* For SVG buttons */ + border-color: #ea4; +} + +.cesium-lighter .cesium-button:hover { + color: #000; /* For text buttons */ + fill: #000; /* For SVG buttons */ + background: #a6d2ff; + border-color: #aef; + box-shadow: 0 0 8px #777; +} + +.cesium-lighter .cesium-button:active { + color: #fff; /* For text buttons */ + fill: #fff; /* For SVG buttons */ + background: #48b; + border-color: #ea0; +} + +.cesium-lighter .cesium-button:disabled, +.cesium-lighter .cesium-button-disabled, +.cesium-lighter .cesium-button-disabled:focus, +.cesium-lighter .cesium-button-disabled:hover, +.cesium-lighter .cesium-button-disabled:active { + background: #ccc; + border-color: #999; + color: #999; /* For text buttons */ + fill: #999; /* For SVG buttons */ + box-shadow: none; +} + +.cesium-lighter .cesium-performanceDisplay { + background-color: #e2f0ff; + border-color: #759dc0; +} + +.cesium-lighter .cesium-performanceDisplay-fps { + color: #e52; +} + +.cesium-lighter .cesium-performanceDisplay-ms { + color: #ea4; +} diff --git a/cate/webapi/app/cesium/Widgets/shared.css b/cate/webapi/app/cesium/Widgets/shared.css new file mode 100644 index 000000000..5932ef5cd --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/shared.css @@ -0,0 +1,117 @@ +.cesium-svgPath-svg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +.cesium-button { + display: inline-block; + position: relative; + background: #303336; + border: 1px solid #444; + color: #edffff; /* For text buttons */ + fill: #edffff; /* For SVG buttons */ + border-radius: 4px; + padding: 5px 12px; + margin: 2px 3px; + cursor: pointer; + overflow: hidden; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.cesium-button:focus { + color: #fff; /* For text buttons */ + fill: #fff; /* For SVG buttons */ + border-color: #ea4; + outline: none; +} + +.cesium-button:hover { + color: #fff; /* For text buttons */ + fill: #fff; /* For SVG buttons */ + background: #48b; + border-color: #aef; + box-shadow: 0 0 8px #fff; +} + +.cesium-button:active { + color: #000; /* For text buttons */ + fill: #000; /* For SVG buttons */ + background: #adf; + border-color: #fff; + box-shadow: 0 0 8px #fff; +} + +.cesium-button:disabled, +.cesium-button-disabled, +.cesium-button-disabled:focus, +.cesium-button-disabled:hover, +.cesium-button-disabled:active { + background: #303336; + border-color: #444; + color: #646464; /* For text buttons */ + fill: #646464; /* For SVG buttons */ + box-shadow: none; + cursor: default; +} + +.cesium-button option { + background-color: #000; + color: #eee; +} + +.cesium-button option:disabled { + color: #777; +} + +.cesium-button input, +.cesium-button label { + cursor: pointer; +} + +.cesium-button input { + vertical-align: sub; +} + +.cesium-toolbar-button { + box-sizing: border-box; + width: 32px; + height: 32px; + border-radius: 14%; + padding: 0; + vertical-align: middle; + z-index: 0; /* Workaround for rounded raster image corners in Chrome */ +} + +.cesium-performanceDisplay-defaultContainer { + position: absolute; + top: 50px; + right: 10px; + text-align: right; +} + +.cesium-performanceDisplay { + background-color: rgba(40, 40, 40, 0.7); + padding: 7px; + border-radius: 5px; + border: 1px solid #444; + font: bold 12px sans-serif; +} + +.cesium-performanceDisplay-fps { + color: #e52; +} + +.cesium-performanceDisplay-throttled { + color: #a42; +} + +.cesium-performanceDisplay-ms { + color: #de3; +} diff --git a/cate/webapi/app/cesium/Widgets/subscribeAndEvaluate.js b/cate/webapi/app/cesium/Widgets/subscribeAndEvaluate.js new file mode 100644 index 000000000..768829eef --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/subscribeAndEvaluate.js @@ -0,0 +1,30 @@ +import knockout from "../ThirdParty/knockout.js"; + +/** + * Subscribe to a Knockout observable ES5 property, and immediately fire + * the callback with the current value of the property. + * + * @private + * + * @function subscribeAndEvaluate + * + * @param {Object} owner The object containing the observable property. + * @param {String} observablePropertyName The name of the observable property. + * @param {Function} callback The callback function. + * @param {Object} [target] The value of this in the callback function. + * @param {String} [event='change'] The name of the event to receive notification for. + * @returns The subscription object from Knockout which can be used to dispose the subscription later. + */ +function subscribeAndEvaluate( + owner, + observablePropertyName, + callback, + target, + event +) { + callback.call(target, owner[observablePropertyName]); + return knockout + .getObservable(owner, observablePropertyName) + .subscribe(callback, target, event); +} +export default subscribeAndEvaluate; diff --git a/cate/webapi/app/cesium/Widgets/widgets.css b/cate/webapi/app/cesium/Widgets/widgets.css new file mode 100644 index 000000000..b6584d2e5 --- /dev/null +++ b/cate/webapi/app/cesium/Widgets/widgets.css @@ -0,0 +1,17 @@ +@import url(./shared.css); +@import url(./Animation/Animation.css); +@import url(./BaseLayerPicker/BaseLayerPicker.css); +@import url(./CesiumWidget/CesiumWidget.css); +@import url(./CesiumInspector/CesiumInspector.css); +@import url(./Cesium3DTilesInspector/Cesium3DTilesInspector.css); +@import url(./FullscreenButton/FullscreenButton.css); +@import url(./VRButton/VRButton.css); +@import url(./Geocoder/Geocoder.css); +@import url(./InfoBox/InfoBox.css); +@import url(./SceneModePicker/SceneModePicker.css); +@import url(./ProjectionPicker/ProjectionPicker.css); +@import url(./PerformanceWatchdog/PerformanceWatchdog.css); +@import url(./NavigationHelpButton/NavigationHelpButton.css); +@import url(./SelectionIndicator/SelectionIndicator.css); +@import url(./Timeline/Timeline.css); +@import url(./Viewer/Viewer.css); diff --git a/cate/webapi/app/cesium/Workers/ArcType-dc1c5aee.js b/cate/webapi/app/cesium/Workers/ArcType-dc1c5aee.js new file mode 100644 index 000000000..bfd92b2d1 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/ArcType-dc1c5aee.js @@ -0,0 +1 @@ +define(["exports"],function(e){"use strict";var r=Object.freeze({NONE:0,GEODESIC:1,RHUMB:2});e.ArcType=r}); diff --git a/cate/webapi/app/cesium/Workers/AttributeCompression-9fc99391.js b/cate/webapi/app/cesium/Workers/AttributeCompression-9fc99391.js new file mode 100644 index 000000000..f44db40f3 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/AttributeCompression-9fc99391.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162"],function(t,u,o,c,r){"use strict";var s={octEncodeInRange:function(t,o,e){var n,a;return e.x=t.x/(Math.abs(t.x)+Math.abs(t.y)+Math.abs(t.z)),e.y=t.y/(Math.abs(t.x)+Math.abs(t.y)+Math.abs(t.z)),t.z<0&&(n=e.x,a=e.y,e.x=(1-Math.abs(a))*c.CesiumMath.signNotZero(n),e.y=(1-Math.abs(n))*c.CesiumMath.signNotZero(a)),e.x=c.CesiumMath.toSNorm(e.x,o),e.y=c.CesiumMath.toSNorm(e.y,o),e},octEncode:function(t,o){return s.octEncodeInRange(t,255,o)}},e=new r.Cartesian2,n=new Uint8Array(1);function a(t){return n[0]=t,n[0]}s.octEncodeToCartesian4=function(t,o){return s.octEncodeInRange(t,65535,e),o.x=a(e.x*(1/256)),o.y=a(e.x),o.z=a(e.y*(1/256)),o.w=a(e.y),o},s.octDecodeInRange=function(t,o,e,n){var a;return n.x=c.CesiumMath.fromSNorm(t,e),n.y=c.CesiumMath.fromSNorm(o,e),n.z=1-(Math.abs(n.x)+Math.abs(n.y)),n.z<0&&(a=n.x,n.x=(1-Math.abs(n.y))*c.CesiumMath.signNotZero(a),n.y=(1-Math.abs(a))*c.CesiumMath.signNotZero(n.y)),r.Cartesian3.normalize(n,n)},s.octDecode=function(t,o,e){return s.octDecodeInRange(t,o,255,e)},s.octDecodeFromCartesian4=function(t,o){var e=256*t.x+t.y,n=256*t.z+t.w;return s.octDecodeInRange(e,n,65535,o)},s.octPackFloat=function(t){return 256*t.x+t.y};var i=new r.Cartesian2;function d(t){return t>>1^-(1&t)}s.octEncodeFloat=function(t){return s.octEncode(t,i),s.octPackFloat(i)},s.octDecodeFloat=function(t,o){var e=t/256,n=Math.floor(e),a=256*(e-n);return s.octDecode(n,a,o)},s.octPack=function(t,o,e,n){var a=s.octEncodeFloat(t),c=s.octEncodeFloat(o),r=s.octEncode(e,i);return n.x=65536*r.x+a,n.y=65536*r.y+c,n},s.octUnpack=function(t,o,e,n){var a=t.x/65536,c=Math.floor(a),r=65536*(a-c),a=t.y/65536,i=Math.floor(a),u=65536*(a-i);s.octDecodeFloat(r,o),s.octDecodeFloat(u,e),s.octDecode(c,i,n)},s.compressTextureCoordinates=function(t){return 4096*(4095*t.x|0)+(4095*t.y|0)},s.decompressTextureCoordinates=function(t,o){var e=t/4096,n=Math.floor(e);return o.x=n/4095,o.y=(t-4096*n)/4095,o},s.zigZagDeltaDecode=function(t,o,e){for(var n=t.length,a=0,c=0,r=0,i=0;in.width?n.width=i:i<0&&(n.width-=i,n.x=e.x),h>n.height?n.height=h:h<0&&(n.height-=h,n.y=e.y),n},x.intersect=function(t,e){var n=t.x,i=t.y,h=e.x,r=e.y;return n>h+e.width||n+t.widthr+e.height?a.Intersect.OUTSIDE:a.Intersect.INTERSECTING},x.equals=function(t,e){return t===e||f.defined(t)&&f.defined(e)&&t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height},x.prototype.clone=function(t){return x.clone(this,t)},x.prototype.intersect=function(t){return x.intersect(this,t)},x.prototype.equals=function(t){return x.equals(this,t)},t.BoundingRectangle=x}); diff --git a/cate/webapi/app/cesium/Workers/BoxGeometry-ee1413aa.js b/cate/webapi/app/cesium/Workers/BoxGeometry-ee1413aa.js new file mode 100644 index 000000000..367d07861 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/BoxGeometry-ee1413aa.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Cartesian2-bddc1162","./Transforms-ec27f304","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40","./GeometryOffsetAttribute-7350d9af","./VertexFormat-7572c785"],function(t,l,e,d,b,C,z,F,w,m){"use strict";var v=new d.Cartesian3;function u(t){var e=(t=l.defaultValue(t,l.defaultValue.EMPTY_OBJECT)).minimum,a=t.maximum,n=l.defaultValue(t.vertexFormat,m.VertexFormat.DEFAULT);this._minimum=d.Cartesian3.clone(e),this._maximum=d.Cartesian3.clone(a),this._vertexFormat=n,this._offsetAttribute=t.offsetAttribute,this._workerName="createBoxGeometry"}u.fromDimensions=function(t){var e=(t=l.defaultValue(t,l.defaultValue.EMPTY_OBJECT)).dimensions,a=d.Cartesian3.multiplyByScalar(e,.5,new d.Cartesian3);return new u({minimum:d.Cartesian3.negate(a,new d.Cartesian3),maximum:a,vertexFormat:t.vertexFormat,offsetAttribute:t.offsetAttribute})},u.fromAxisAlignedBoundingBox=function(t){return new u({minimum:t.minimum,maximum:t.maximum})},u.packedLength=2*d.Cartesian3.packedLength+m.VertexFormat.packedLength+1,u.pack=function(t,e,a){return a=l.defaultValue(a,0),d.Cartesian3.pack(t._minimum,e,a),d.Cartesian3.pack(t._maximum,e,a+d.Cartesian3.packedLength),m.VertexFormat.pack(t._vertexFormat,e,a+2*d.Cartesian3.packedLength),e[a+2*d.Cartesian3.packedLength+m.VertexFormat.packedLength]=l.defaultValue(t._offsetAttribute,-1),e};var a,s=new d.Cartesian3,y=new d.Cartesian3,p=new m.VertexFormat,x={minimum:s,maximum:y,vertexFormat:p,offsetAttribute:void 0};u.unpack=function(t,e,a){e=l.defaultValue(e,0);var n=d.Cartesian3.unpack(t,e,s),r=d.Cartesian3.unpack(t,e+d.Cartesian3.packedLength,y),i=m.VertexFormat.unpack(t,e+2*d.Cartesian3.packedLength,p),o=t[e+2*d.Cartesian3.packedLength+m.VertexFormat.packedLength];return l.defined(a)?(a._minimum=d.Cartesian3.clone(n,a._minimum),a._maximum=d.Cartesian3.clone(r,a._maximum),a._vertexFormat=m.VertexFormat.clone(i,a._vertexFormat),a._offsetAttribute=-1===o?void 0:o,a):(x.offsetAttribute=-1===o?void 0:o,new u(x))},u.createGeometry=function(t){var e=t._minimum,a=t._maximum,n=t._vertexFormat;if(!d.Cartesian3.equals(e,a)){var r,i,o,m,u,s,y=new F.GeometryAttributes;n.position&&(n.st||n.normal||n.tangent||n.bitangent)?(n.position&&((i=new Float64Array(72))[0]=e.x,i[1]=e.y,i[2]=a.z,i[3]=a.x,i[4]=e.y,i[5]=a.z,i[6]=a.x,i[7]=a.y,i[8]=a.z,i[9]=e.x,i[10]=a.y,i[11]=a.z,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=a.x,i[16]=e.y,i[17]=e.z,i[18]=a.x,i[19]=a.y,i[20]=e.z,i[21]=e.x,i[22]=a.y,i[23]=e.z,i[24]=a.x,i[25]=e.y,i[26]=e.z,i[27]=a.x,i[28]=a.y,i[29]=e.z,i[30]=a.x,i[31]=a.y,i[32]=a.z,i[33]=a.x,i[34]=e.y,i[35]=a.z,i[36]=e.x,i[37]=e.y,i[38]=e.z,i[39]=e.x,i[40]=a.y,i[41]=e.z,i[42]=e.x,i[43]=a.y,i[44]=a.z,i[45]=e.x,i[46]=e.y,i[47]=a.z,i[48]=e.x,i[49]=a.y,i[50]=e.z,i[51]=a.x,i[52]=a.y,i[53]=e.z,i[54]=a.x,i[55]=a.y,i[56]=a.z,i[57]=e.x,i[58]=a.y,i[59]=a.z,i[60]=e.x,i[61]=e.y,i[62]=e.z,i[63]=a.x,i[64]=e.y,i[65]=e.z,i[66]=a.x,i[67]=e.y,i[68]=a.z,i[69]=e.x,i[70]=e.y,i[71]=a.z,y.position=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:i})),n.normal&&((o=new Float32Array(72))[0]=0,o[1]=0,o[2]=1,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=1,o[9]=0,o[10]=0,o[11]=1,o[12]=0,o[13]=0,o[14]=-1,o[15]=0,o[16]=0,o[17]=-1,o[18]=0,o[19]=0,o[20]=-1,o[21]=0,o[22]=0,o[23]=-1,o[24]=1,o[25]=0,o[26]=0,o[27]=1,o[28]=0,o[29]=0,o[30]=1,o[31]=0,o[32]=0,o[33]=1,o[34]=0,o[35]=0,o[36]=-1,o[37]=0,o[38]=0,o[39]=-1,o[40]=0,o[41]=0,o[42]=-1,o[43]=0,o[44]=0,o[45]=-1,o[46]=0,o[47]=0,o[48]=0,o[49]=1,o[50]=0,o[51]=0,o[52]=1,o[53]=0,o[54]=0,o[55]=1,o[56]=0,o[57]=0,o[58]=1,o[59]=0,o[60]=0,o[61]=-1,o[62]=0,o[63]=0,o[64]=-1,o[65]=0,o[66]=0,o[67]=-1,o[68]=0,o[69]=0,o[70]=-1,o[71]=0,y.normal=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:o})),n.st&&((m=new Float32Array(48))[0]=0,m[1]=0,m[2]=1,m[3]=0,m[4]=1,m[5]=1,m[6]=0,m[7]=1,m[8]=1,m[9]=0,m[10]=0,m[11]=0,m[12]=0,m[13]=1,m[14]=1,m[15]=1,m[16]=0,m[17]=0,m[18]=1,m[19]=0,m[20]=1,m[21]=1,m[22]=0,m[23]=1,m[24]=1,m[25]=0,m[26]=0,m[27]=0,m[28]=0,m[29]=1,m[30]=1,m[31]=1,m[32]=1,m[33]=0,m[34]=0,m[35]=0,m[36]=0,m[37]=1,m[38]=1,m[39]=1,m[40]=0,m[41]=0,m[42]=1,m[43]=0,m[44]=1,m[45]=1,m[46]=0,m[47]=1,y.st=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:m})),n.tangent&&((u=new Float32Array(72))[0]=1,u[1]=0,u[2]=0,u[3]=1,u[4]=0,u[5]=0,u[6]=1,u[7]=0,u[8]=0,u[9]=1,u[10]=0,u[11]=0,u[12]=-1,u[13]=0,u[14]=0,u[15]=-1,u[16]=0,u[17]=0,u[18]=-1,u[19]=0,u[20]=0,u[21]=-1,u[22]=0,u[23]=0,u[24]=0,u[25]=1,u[26]=0,u[27]=0,u[28]=1,u[29]=0,u[30]=0,u[31]=1,u[32]=0,u[33]=0,u[34]=1,u[35]=0,u[36]=0,u[37]=-1,u[38]=0,u[39]=0,u[40]=-1,u[41]=0,u[42]=0,u[43]=-1,u[44]=0,u[45]=0,u[46]=-1,u[47]=0,u[48]=-1,u[49]=0,u[50]=0,u[51]=-1,u[52]=0,u[53]=0,u[54]=-1,u[55]=0,u[56]=0,u[57]=-1,u[58]=0,u[59]=0,u[60]=1,u[61]=0,u[62]=0,u[63]=1,u[64]=0,u[65]=0,u[66]=1,u[67]=0,u[68]=0,u[69]=1,u[70]=0,u[71]=0,y.tangent=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:u})),n.bitangent&&((s=new Float32Array(72))[0]=0,s[1]=1,s[2]=0,s[3]=0,s[4]=1,s[5]=0,s[6]=0,s[7]=1,s[8]=0,s[9]=0,s[10]=1,s[11]=0,s[12]=0,s[13]=1,s[14]=0,s[15]=0,s[16]=1,s[17]=0,s[18]=0,s[19]=1,s[20]=0,s[21]=0,s[22]=1,s[23]=0,s[24]=0,s[25]=0,s[26]=1,s[27]=0,s[28]=0,s[29]=1,s[30]=0,s[31]=0,s[32]=1,s[33]=0,s[34]=0,s[35]=1,s[36]=0,s[37]=0,s[38]=1,s[39]=0,s[40]=0,s[41]=1,s[42]=0,s[43]=0,s[44]=1,s[45]=0,s[46]=0,s[47]=1,s[48]=0,s[49]=0,s[50]=1,s[51]=0,s[52]=0,s[53]=1,s[54]=0,s[55]=0,s[56]=1,s[57]=0,s[58]=0,s[59]=1,s[60]=0,s[61]=0,s[62]=1,s[63]=0,s[64]=0,s[65]=1,s[66]=0,s[67]=0,s[68]=1,s[69]=0,s[70]=0,s[71]=1,y.bitangent=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:s})),(r=new Uint16Array(36))[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3,r[6]=6,r[7]=5,r[8]=4,r[9]=7,r[10]=6,r[11]=4,r[12]=8,r[13]=9,r[14]=10,r[15]=8,r[16]=10,r[17]=11,r[18]=14,r[19]=13,r[20]=12,r[21]=15,r[22]=14,r[23]=12,r[24]=18,r[25]=17,r[26]=16,r[27]=19,r[28]=18,r[29]=16,r[30]=20,r[31]=21,r[32]=22,r[33]=20,r[34]=22,r[35]=23):((i=new Float64Array(24))[0]=e.x,i[1]=e.y,i[2]=e.z,i[3]=a.x,i[4]=e.y,i[5]=e.z,i[6]=a.x,i[7]=a.y,i[8]=e.z,i[9]=e.x,i[10]=a.y,i[11]=e.z,i[12]=e.x,i[13]=e.y,i[14]=a.z,i[15]=a.x,i[16]=e.y,i[17]=a.z,i[18]=a.x,i[19]=a.y,i[20]=a.z,i[21]=e.x,i[22]=a.y,i[23]=a.z,y.position=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:i}),(r=new Uint16Array(36))[0]=4,r[1]=5,r[2]=6,r[3]=4,r[4]=6,r[5]=7,r[6]=1,r[7]=0,r[8]=3,r[9]=1,r[10]=3,r[11]=2,r[12]=1,r[13]=6,r[14]=5,r[15]=1,r[16]=2,r[17]=6,r[18]=2,r[19]=3,r[20]=7,r[21]=2,r[22]=7,r[23]=6,r[24]=3,r[25]=0,r[26]=4,r[27]=3,r[28]=4,r[29]=7,r[30]=0,r[31]=1,r[32]=5,r[33]=0,r[34]=5,r[35]=4);var p,x,c,f=d.Cartesian3.subtract(a,e,v),A=.5*d.Cartesian3.magnitude(f);return l.defined(t._offsetAttribute)&&(p=i.length,x=new Uint8Array(p/3),c=t._offsetAttribute===w.GeometryOffsetAttribute.NONE?0:1,w.arrayFill(x,c),y.applyOffset=new z.GeometryAttribute({componentDatatype:C.ComponentDatatype.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})),new z.Geometry({attributes:y,indices:r,primitiveType:z.PrimitiveType.TRIANGLES,boundingSphere:new b.BoundingSphere(d.Cartesian3.ZERO,A),offsetAttribute:t._offsetAttribute})}},u.getUnitBox=function(){return l.defined(a)||(a=u.createGeometry(u.fromDimensions({dimensions:new d.Cartesian3(1,1,1),vertexFormat:m.VertexFormat.POSITION_ONLY}))),a},t.BoxGeometry=u}); diff --git a/cate/webapi/app/cesium/Workers/Cartesian2-bddc1162.js b/cate/webapi/app/cesium/Workers/Cartesian2-bddc1162.js new file mode 100644 index 000000000..3cc94b339 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/Cartesian2-bddc1162.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5"],function(e,R,i,V){"use strict";function b(e,t,n){this.x=R.defaultValue(e,0),this.y=R.defaultValue(t,0),this.z=R.defaultValue(n,0)}b.fromSpherical=function(e,t){R.defined(t)||(t=new b);var n=e.clock,a=e.cone,r=R.defaultValue(e.magnitude,1),i=r*Math.sin(a);return t.x=i*Math.cos(n),t.y=i*Math.sin(n),t.z=r*Math.cos(a),t},b.fromElements=function(e,t,n,a){return R.defined(a)?(a.x=e,a.y=t,a.z=n,a):new b(e,t,n)},b.fromCartesian4=b.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new b(e.x,e.y,e.z)},b.packedLength=3,b.pack=function(e,t,n){return n=R.defaultValue(n,0),t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t},b.unpack=function(e,t,n){return t=R.defaultValue(t,0),R.defined(n)||(n=new b),n.x=e[t++],n.y=e[t++],n.z=e[t],n},b.packArray=function(e,t){var n=e.length,a=3*n;if(R.defined(t)){if(!Array.isArray(t)&&t.length!==a)throw new i.DeveloperError("If result is a typed array, it must have exactly array.length * 3 elements");t.length!==a&&(t.length=a)}else t=new Array(a);for(var r=0;rV.CesiumMath.EPSILON12);return R.defined(r)?(r.x=i*_,r.y=u*C,r.z=o*z,r):new b(i*_,u*C,o*z)}function f(e,t,n){this.longitude=R.defaultValue(e,0),this.latitude=R.defaultValue(t,0),this.height=R.defaultValue(n,0)}f.fromRadians=function(e,t,n,a){return n=R.defaultValue(n,0),R.defined(a)?(a.longitude=e,a.latitude=t,a.height=n,a):new f(e,t,n)},f.fromDegrees=function(e,t,n,a){return e=V.CesiumMath.toRadians(e),t=V.CesiumMath.toRadians(t),f.fromRadians(e,t,n,a)};var c=new b,m=new b,y=new b,p=new b(1/6378137,1/6378137,1/6356752.314245179),g=new b(1/40680631590769,1/40680631590769,1/40408299984661.445),M=V.CesiumMath.EPSILON1;function x(e,t,n,a){t=R.defaultValue(t,0),n=R.defaultValue(n,0),a=R.defaultValue(a,0),e._radii=new b(t,n,a),e._radiiSquared=new b(t*t,n*n,a*a),e._radiiToTheFourth=new b(t*t*t*t,n*n*n*n,a*a*a*a),e._oneOverRadii=new b(0===t?0:1/t,0===n?0:1/n,0===a?0:1/a),e._oneOverRadiiSquared=new b(0===t?0:1/(t*t),0===n?0:1/(n*n),0===a?0:1/(a*a)),e._minimumRadius=Math.min(t,n,a),e._maximumRadius=Math.max(t,n,a),e._centerToleranceSquared=V.CesiumMath.EPSILON1,0!==e._radiiSquared.z&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function w(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,x(this,e,t,n)}f.fromCartesian=function(e,t,n){var a=R.defined(t)?t.oneOverRadii:p,r=R.defined(t)?t.oneOverRadiiSquared:g,i=l(e,a,r,R.defined(t)?t._centerToleranceSquared:M,m);if(R.defined(i)){var u=b.multiplyComponents(i,r,c),u=b.normalize(u,u),o=b.subtract(e,i,y),d=Math.atan2(u.y,u.x),s=Math.asin(u.z),h=V.CesiumMath.sign(b.dot(o,e))*b.magnitude(o);return R.defined(n)?(n.longitude=d,n.latitude=s,n.height=h,n):new f(d,s,h)}},f.toCartesian=function(e,t,n){return b.fromRadians(e.longitude,e.latitude,e.height,t,n)},f.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new f(e.longitude,e.latitude,e.height)},f.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height},f.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n},f.ZERO=Object.freeze(new f(0,0,0)),f.prototype.clone=function(e){return f.clone(this,e)},f.prototype.equals=function(e){return f.equals(this,e)},f.prototype.equalsEpsilon=function(e,t){return f.equalsEpsilon(this,e,t)},f.prototype.toString=function(){return"("+this.longitude+", "+this.latitude+", "+this.height+")"},Object.defineProperties(w.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}}),w.clone=function(e,t){if(R.defined(e)){var n=e._radii;return R.defined(t)?(b.clone(n,t._radii),b.clone(e._radiiSquared,t._radiiSquared),b.clone(e._radiiToTheFourth,t._radiiToTheFourth),b.clone(e._oneOverRadii,t._oneOverRadii),b.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new w(n.x,n.y,n.z)}},w.fromCartesian3=function(e,t){return R.defined(t)||(t=new w),R.defined(e)&&x(t,e.x,e.y,e.z),t},w.WGS84=Object.freeze(new w(6378137,6378137,6356752.314245179)),w.UNIT_SPHERE=Object.freeze(new w(1,1,1)),w.MOON=Object.freeze(new w(V.CesiumMath.LUNAR_RADIUS,V.CesiumMath.LUNAR_RADIUS,V.CesiumMath.LUNAR_RADIUS)),w.prototype.clone=function(e){return w.clone(this,e)},w.packedLength=b.packedLength,w.pack=function(e,t,n){return n=R.defaultValue(n,0),b.pack(e._radii,t,n),t},w.unpack=function(e,t,n){t=R.defaultValue(t,0);var a=b.unpack(e,t);return w.fromCartesian3(a,n)},w.prototype.geocentricSurfaceNormal=b.normalize,w.prototype.geodeticSurfaceNormalCartographic=function(e,t){var n=e.longitude,a=e.latitude,r=Math.cos(a),i=r*Math.cos(n),u=r*Math.sin(n),o=Math.sin(a);return R.defined(t)||(t=new b),t.x=i,t.y=u,t.z=o,b.normalize(t,t)},w.prototype.geodeticSurfaceNormal=function(e,t){if(!b.equalsEpsilon(e,b.ZERO,V.CesiumMath.EPSILON14))return R.defined(t)||(t=new b),t=b.multiplyComponents(e,this._oneOverRadiiSquared,t),b.normalize(t,t)};var v=new b,_=new b;w.prototype.cartographicToCartesian=function(e,t){var n=v,a=_;this.geodeticSurfaceNormalCartographic(e,n),b.multiplyComponents(this._radiiSquared,n,a);var r=Math.sqrt(b.dot(n,a));return b.divideByScalar(a,r,a),b.multiplyByScalar(n,e.height,n),R.defined(t)||(t=new b),b.add(a,n,t)},w.prototype.cartographicArrayToCartesianArray=function(e,t){var n=e.length;R.defined(t)?t.length=n:t=new Array(n);for(var a=0;a=this._radii.z-t))return n};var q=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],O=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function T(e,t,n){for(var a=.5*(t+e),r=.5*(t-e),i=0,u=0;u<5;u++){var o=r*q[u];i+=O[u]*(n(a+o)+n(a-o))}return i*=r}function A(e,t,n,a){this.west=R.defaultValue(e,0),this.south=R.defaultValue(t,0),this.east=R.defaultValue(n,0),this.north=R.defaultValue(a,0)}w.prototype.surfaceArea=function(e){for(var t=e.west,n=e.east,a=e.south,r=e.north;nV.CesiumMath.PI&&(a-=V.CesiumMath.TWO_PI),n>V.CesiumMath.PI&&(n-=V.CesiumMath.TWO_PI)),R.defined(t)?(t.west=n,t.south=u,t.east=a,t.north=o,t):new A(n,u,a,o)},A.fromCartesianArray=function(e,t,n){t=R.defaultValue(t,w.WGS84);for(var a=Number.MAX_VALUE,r=-Number.MAX_VALUE,i=Number.MAX_VALUE,u=-Number.MAX_VALUE,o=Number.MAX_VALUE,d=-Number.MAX_VALUE,s=0,h=e.length;sV.CesiumMath.PI&&(r-=V.CesiumMath.TWO_PI),a>V.CesiumMath.PI&&(a-=V.CesiumMath.TWO_PI)),R.defined(n)?(n.west=a,n.south=o,n.east=r,n.north=d,n):new A(a,o,r,d)},A.clone=function(e,t){if(R.defined(e))return R.defined(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new A(e.west,e.south,e.east,e.north)},A.equalsEpsilon=function(e,t,n){return n=R.defaultValue(n,0),e===t||R.defined(e)&&R.defined(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n},A.prototype.clone=function(e){return A.clone(this,e)},A.prototype.equals=function(e){return A.equals(this,e)},A.equals=function(e,t){return e===t||R.defined(e)&&R.defined(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north},A.prototype.equalsEpsilon=function(e,t){return A.equalsEpsilon(this,e,t)},A.validate=function(e){},A.southwest=function(e,t){return R.defined(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new f(e.west,e.south)},A.northwest=function(e,t){return R.defined(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new f(e.west,e.north)},A.northeast=function(e,t){return R.defined(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new f(e.east,e.north)},A.southeast=function(e,t){return R.defined(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new f(e.east,e.south)},A.center=function(e,t){var n=e.east,a=e.west;n=e.south&&a<=e.north};var P=new f;function N(e,t){this.x=R.defaultValue(e,0),this.y=R.defaultValue(t,0)}A.subsample=function(e,t,n,a){t=R.defaultValue(t,w.WGS84),n=R.defaultValue(n,0),R.defined(a)||(a=[]);var r=0,i=e.north,u=e.south,o=e.east,d=e.west,s=P;s.height=n,s.longitude=d,s.latitude=i,a[r]=t.cartographicToCartesian(s,a[r]),r++,s.longitude=o,a[r]=t.cartographicToCartesian(s,a[r]),r++,s.latitude=u,a[r]=t.cartographicToCartesian(s,a[r]),r++,s.longitude=d,a[r]=t.cartographicToCartesian(s,a[r]),r++,s.latitude=i<0?i:0p.CesiumMath.PI&&(c.north=0T.CesiumMath.EPSILON12);var y=q*(a*a-i*i)/(i*i),E=y*(256+y*(y*(74-47*y)-128))/1024,P=R*R,x=i*(1+y*(4096+y*(y*(320-175*y)-768))/16384)*(A-E*b*(R+E*(w*(2*P-1)-E*R*(4*b*b-3)*(4*P-3)/6)/4)),D=Math.atan2(l*O,p-v*H),N=Math.atan2(u*O,p*H-v);t._distance=x,t._startHeading=D,t._endHeading=N,t._uSquared=y}(t,n.maximumRadius,n.minimumRadius,a.longitude,a.latitude,i.longitude,i.latitude),t._start=R.Cartographic.clone(a,t._start),t._end=R.Cartographic.clone(i,t._end),t._start.height=0,t._end.height=0,s=(e=t)._uSquared,r=e._ellipsoid.maximumRadius,h=e._ellipsoid.minimumRadius,o=(r-h)/r,d=Math.cos(e._startHeading),c=Math.sin(e._startHeading),u=(1-o)*Math.tan(e._start.latitude),M=1/Math.sqrt(1+u*u),l=M*u,g=Math.atan2(u,d),f=1-(p=(_=M*c)*_),v=Math.sqrt(f),U=1-3*(m=s/4)+35*(C=m*m)/4,b=1-5*m,w=(S=1+m-3*C/4+5*(H=C*m)/4-175*(O=C*C)/64)*g-(q=1-m+15*C/8-35*H/8)*Math.sin(2*g)*m/2-U*Math.sin(4*g)*C/16-b*Math.sin(6*g)*H/48-5*Math.sin(8*g)*O/512,(A=e._constants).a=r,A.b=h,A.f=o,A.cosineHeading=d,A.sineHeading=c,A.tanU=u,A.cosineU=M,A.sineU=l,A.sigma=g,A.sineAlpha=_,A.sineSquaredAlpha=p,A.cosineSquaredAlpha=f,A.cosineAlpha=v,A.u2Over4=m,A.u4Over16=C,A.u6Over64=H,A.u8Over256=O,A.a0=S,A.a1=q,A.a2=U,A.a3=b,A.distanceRatio=w}function i(t,a,i){var n=b.defaultValue(i,R.Ellipsoid.WGS84);this._ellipsoid=n,this._start=new R.Cartographic,this._end=new R.Cartographic,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,b.defined(t)&&b.defined(a)&&e(this,t,a,n)}Object.defineProperties(i.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}}),i.prototype.setEndPoints=function(t,a){e(this,t,a,this._ellipsoid)},i.prototype.interpolateUsingFraction=function(t,a){return this.interpolateUsingSurfaceDistance(this._distance*t,a)},i.prototype.interpolateUsingSurfaceDistance=function(t,a){var i=this._constants,n=i.distanceRatio+t/i.b,e=Math.cos(2*n),s=Math.cos(4*n),r=Math.cos(6*n),h=Math.sin(2*n),o=Math.sin(4*n),d=Math.sin(6*n),c=Math.sin(8*n),u=n*n,M=n*u,l=i.u8Over256,g=i.u2Over4,_=i.u6Over64,p=i.u4Over16,f=2*M*l*e/3+n*(1-g+7*p/4-15*_/4+579*l/64-(p-15*_/4+187*l/16)*e-(5*_/4-115*l/16)*s-29*l*r/16)+(g/2-p+71*_/32-85*l/16)*h+(5*p/16-5*_/4+383*l/96)*o-u*((_-11*l/2)*h+5*l*o/2)+(29*_/96-29*l/16)*d+539*l*c/1536,v=Math.asin(Math.sin(f)*i.cosineAlpha),m=Math.atan(i.a/i.b*Math.tan(v));f-=i.sigma;var C=Math.cos(2*i.sigma+f),H=Math.sin(f),O=Math.cos(f),S=i.cosineU*O,q=i.sineU*H,U=Math.atan2(H*i.sineHeading,S-q*i.cosineHeading)-z(i.f,i.sineAlpha,i.cosineSquaredAlpha,f,H,O,C);return b.defined(a)?(a.longitude=this._start.longitude+U,a.latitude=m,a.height=0,a):new R.Cartographic(this._start.longitude+U,m,0)},t.EllipsoidGeodesic=i}); diff --git a/cate/webapi/app/cesium/Workers/EllipsoidGeometry-ceb731dc.js b/cate/webapi/app/cesium/Workers/EllipsoidGeometry-ceb731dc.js new file mode 100644 index 000000000..3901351a3 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/EllipsoidGeometry-ceb731dc.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40","./IndexDatatype-53503fee","./GeometryOffsetAttribute-7350d9af","./VertexFormat-7572c785"],function(t,ut,e,lt,ct,ft,dt,Ct,pt,yt,_t,d){"use strict";var ht=new ct.Cartesian3,vt=new ct.Cartesian3,At=new ct.Cartesian3,xt=new ct.Cartesian3,bt=new ct.Cartesian3,l=new ct.Cartesian3(1,1,1),kt=Math.cos,wt=Math.sin;function C(t){t=ut.defaultValue(t,ut.defaultValue.EMPTY_OBJECT);var e=ut.defaultValue(t.radii,l),a=ut.defaultValue(t.innerRadii,e),i=ut.defaultValue(t.minimumClock,0),r=ut.defaultValue(t.maximumClock,lt.CesiumMath.TWO_PI),n=ut.defaultValue(t.minimumCone,0),o=ut.defaultValue(t.maximumCone,lt.CesiumMath.PI),m=Math.round(ut.defaultValue(t.stackPartitions,64)),s=Math.round(ut.defaultValue(t.slicePartitions,64)),u=ut.defaultValue(t.vertexFormat,d.VertexFormat.DEFAULT);this._radii=ct.Cartesian3.clone(e),this._innerRadii=ct.Cartesian3.clone(a),this._minimumClock=i,this._maximumClock=r,this._minimumCone=n,this._maximumCone=o,this._stackPartitions=m,this._slicePartitions=s,this._vertexFormat=d.VertexFormat.clone(u),this._offsetAttribute=t.offsetAttribute,this._workerName="createEllipsoidGeometry"}C.packedLength=2*ct.Cartesian3.packedLength+d.VertexFormat.packedLength+7,C.pack=function(t,e,a){return a=ut.defaultValue(a,0),ct.Cartesian3.pack(t._radii,e,a),a+=ct.Cartesian3.packedLength,ct.Cartesian3.pack(t._innerRadii,e,a),a+=ct.Cartesian3.packedLength,d.VertexFormat.pack(t._vertexFormat,e,a),a+=d.VertexFormat.packedLength,e[a++]=t._minimumClock,e[a++]=t._maximumClock,e[a++]=t._minimumCone,e[a++]=t._maximumCone,e[a++]=t._stackPartitions,e[a++]=t._slicePartitions,e[a]=ut.defaultValue(t._offsetAttribute,-1),e};var a,p=new ct.Cartesian3,y=new ct.Cartesian3,_=new d.VertexFormat,h={radii:p,innerRadii:y,vertexFormat:_,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};C.unpack=function(t,e,a){e=ut.defaultValue(e,0);var i=ct.Cartesian3.unpack(t,e,p);e+=ct.Cartesian3.packedLength;var r=ct.Cartesian3.unpack(t,e,y);e+=ct.Cartesian3.packedLength;var n=d.VertexFormat.unpack(t,e,_);e+=d.VertexFormat.packedLength;var o=t[e++],m=t[e++],s=t[e++],u=t[e++],l=t[e++],c=t[e++],f=t[e];return ut.defined(a)?(a._radii=ct.Cartesian3.clone(i,a._radii),a._innerRadii=ct.Cartesian3.clone(r,a._innerRadii),a._vertexFormat=d.VertexFormat.clone(n,a._vertexFormat),a._minimumClock=o,a._maximumClock=m,a._minimumCone=s,a._maximumCone=u,a._stackPartitions=l,a._slicePartitions=c,a._offsetAttribute=-1===f?void 0:f,a):(h.minimumClock=o,h.maximumClock=m,h.minimumCone=s,h.maximumCone=u,h.stackPartitions=l,h.slicePartitions=c,h.offsetAttribute=-1===f?void 0:f,new C(h))},C.createGeometry=function(t){var e=t._radii;if(!(e.x<=0||e.y<=0||e.z<=0)){var a=t._innerRadii;if(!(a.x<=0||a.y<=0||a.z<=0)){var i=t._minimumClock,r=t._maximumClock,n=t._minimumCone,o=t._maximumCone,m=t._vertexFormat,s=t._slicePartitions+1,u=t._stackPartitions+1;(s=Math.round(s*Math.abs(r-i)/lt.CesiumMath.TWO_PI))<2&&(s=2),(u=Math.round(u*Math.abs(o-n)/lt.CesiumMath.PI))<2&&(u=2);var l=0,c=[n],f=[i];for(W=0;Wy.CesiumMath.EPSILON8?(h=function(t,i,a){var e=t/a;if(0===i)return e;var n=e*e,s=n*e,h=s*e,u=i*i,r=u*u,o=r*u,d=o*u,l=d*u,M=l*u,c=Math.sin(2*e),m=Math.cos(2*e),_=Math.sin(4*e),g=Math.cos(4*e),p=Math.sin(6*e),C=Math.cos(6*e),f=Math.sin(8*e),P=Math.cos(8*e),O=Math.sin(10*e);return e+e*u/4+7*e*r/64+15*e*o/256+579*e*d/16384+1515*e*l/65536+16837*e*M/1048576+(3*e*r/16+45*e*o/256-e*(32*n-561)*d/4096-e*(232*n-1677)*l/16384+e*(399985-90560*n+512*h)*M/5242880)*m+(21*e*o/256+483*e*d/4096-e*(224*n-1969)*l/16384-e*(33152*n-112599)*M/1048576)*g+(151*e*d/4096+4681*e*l/65536+1479*e*M/16384-453*s*M/32768)*C+(1097*e*l/65536+42783*e*M/1048576)*P+8011*e*M/1048576*Math.cos(10*e)+(3*u/8+3*r/16+213*o/2048-3*n*o/64+255*d/4096-33*n*d/512+20861*l/524288-33*n*l/512+h*l/1024+28273*M/1048576-471*n*M/8192+9*h*M/4096)*c+(21*r/256+21*o/256+533*d/8192-21*n*d/512+197*l/4096-315*n*l/4096+584039*M/16777216-12517*n*M/131072+7*h*M/2048)*_+(151*o/6144+151*d/4096+5019*l/131072-453*n*l/16384+26965*M/786432-8607*n*M/131072)*p+(1097*d/131072+1097*l/65536+225797*M/10485760-1097*n*M/65536)*f+(8011*l/2621440+8011*M/1048576)*O+293393*M/251658240*Math.sin(12*e)}(W(n,e,t.latitude)+a*Math.cos(i),n,e),u=q(n,t.latitude),r=q(n,h),o=Math.tan(i)*(r-u),y.CesiumMath.negativePiToPi(t.longitude+o)):(h=t.latitude,o=a/(0===n?e*Math.cos(t.latitude):(l=Math.sin(t.latitude),e*Math.cos(t.latitude)/Math.sqrt(1-M*l*l))),0>>0,n=c.defaultValue(a,0),i=n<0?Math.max(r+n,0):Math.min(n,r),l=c.defaultValue(f,r),u=l<0?Math.max(r+l,0):Math.min(l,r);ia&&(o[t[d]]=p,++p);return(p-a+1)/(n/3)}};s.tipsify=function(e){var t=(e=_.defaultValue(e,_.defaultValue.EMPTY_OBJECT)).indices,r=e.maximumIndex,a=_.defaultValue(e.cacheSize,24);function n(e,t,r,a,n,i,s){for(var o,u=-1,p=-1,d=0;da&&(f.timeStamp=h,++h),++o}C=n(0,a,g,d,h,A,s)}return x};var r={};function o(e,t,r,a,n){e[t++]=r,e[t++]=a,e[t++]=a,e[t++]=n,e[t++]=n,e[t]=r}function v(e){var t,r={};for(var a in e){e.hasOwnProperty(a)&&_.defined(e[a])&&_.defined(e[a].values)&&(t=e[a],r[a]=new G.GeometryAttribute({componentDatatype:t.componentDatatype,componentsPerAttribute:t.componentsPerAttribute,normalize:t.normalize,values:[]}))}return r}r.toWireframe=function(e){var t=e.indices;if(_.defined(t)){switch(e.primitiveType){case G.PrimitiveType.TRIANGLES:e.indices=function(e){for(var t=e.length,r=t/3*6,a=w.IndexDatatype.createTypedArray(t,r),n=0,i=0;in&&(n=r[i]);e.indices=s.tipsify({indices:r,maximumIndex:n,cacheSize:t})}return e},r.fitToUnsignedShortIndices=function(e){var t=[],r=G.Geometry.computeNumberOfVertices(e);if(_.defined(e.indices)&&r>=q.CesiumMath.SIXTY_FOUR_KILOBYTES){var a,n=[],i=[],s=0,o=v(e.attributes),u=e.indices,p=u.length;e.primitiveType===G.PrimitiveType.TRIANGLES?a=3:e.primitiveType===G.PrimitiveType.LINES?a=2:e.primitiveType===G.PrimitiveType.POINTS&&(a=1);for(var d=0;d=q.CesiumMath.SIXTY_FOUR_KILOBYTES&&(t.push(new G.Geometry({attributes:o,indices:i,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),n=[],i=[],s=0,o=v(e.attributes))}0!==i.length&&t.push(new G.Geometry({attributes:o,indices:i,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var c=new U.Cartesian3,m=new U.Cartographic;r.projectTo2D=function(e,t,r,a,n){for(var i=e.attributes[t],s=(n=_.defined(n)?n:new Y.GeographicProjection).ellipsoid,o=i.values,u=new Float64Array(o.length),p=0,d=0;dq.CesiumMath.EPSILON6?1:0},se=new U.Cartesian3,oe=new U.Cartesian3,ue=new U.Cartesian3,pe=new U.Cartesian3;function de(e,t,r,a,n,i,s,o,u,p,d,l,y,f,v,c){if(_.defined(i)||_.defined(s)||_.defined(o)||_.defined(u)||_.defined(p)||0!==f){var m,C,h,b,g=function(e,t,r,a,n){var i,s,o,u,p,d,l,y;if(_.defined(n)||(n=new U.Cartesian3),_.defined(t.z)){if(U.Cartesian3.equalsEpsilon(e,t,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_X,n);if(U.Cartesian3.equalsEpsilon(e,r,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_Y,n);if(U.Cartesian3.equalsEpsilon(e,a,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_Z,n);i=U.Cartesian3.subtract(r,t,x),s=U.Cartesian3.subtract(a,t,S),o=U.Cartesian3.subtract(e,t,I),u=U.Cartesian3.dot(i,i),p=U.Cartesian3.dot(i,s),d=U.Cartesian3.dot(i,o),l=U.Cartesian3.dot(s,s),y=U.Cartesian3.dot(s,o)}else{if(U.Cartesian2.equalsEpsilon(e,t,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_X,n);if(U.Cartesian2.equalsEpsilon(e,r,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_Y,n);if(U.Cartesian2.equalsEpsilon(e,a,q.CesiumMath.EPSILON14))return U.Cartesian3.clone(U.Cartesian3.UNIT_Z,n);i=U.Cartesian2.subtract(r,t,x),s=U.Cartesian2.subtract(a,t,S),o=U.Cartesian2.subtract(e,t,I),u=U.Cartesian2.dot(i,i),p=U.Cartesian2.dot(i,s),d=U.Cartesian2.dot(i,o),l=U.Cartesian2.dot(s,s),y=U.Cartesian2.dot(s,o)}n.y=l*d-p*y,n.z=u*y-p*d;var f=u*l-p*p;return 0!==n.y&&(n.y/=f),0!==n.z&&(n.z/=f),n.x=1-n.y-n.z,n}(a,U.Cartesian3.fromArray(n,3*e,se),U.Cartesian3.fromArray(n,3*t,oe),U.Cartesian3.fromArray(n,3*r,ue),pe);if(_.defined(i)&&ae(e,t,r,g,i,l.normal.values,c,!0),_.defined(p)&&(m=U.Cartesian3.fromArray(p,3*e,se),C=U.Cartesian3.fromArray(p,3*t,oe),h=U.Cartesian3.fromArray(p,3*r,ue),U.Cartesian3.multiplyByScalar(m,g.x,m),U.Cartesian3.multiplyByScalar(C,g.y,C),U.Cartesian3.multiplyByScalar(h,g.z,h),U.Cartesian3.equals(m,U.Cartesian3.ZERO)&&U.Cartesian3.equals(C,U.Cartesian3.ZERO)&&U.Cartesian3.equals(h,U.Cartesian3.ZERO)?((b=se).x=0,b.y=0,b.z=0):(b=U.Cartesian3.add(m,C,m),U.Cartesian3.add(b,h,b),U.Cartesian3.normalize(b,b)),U.Cartesian3.pack(b,l.extrudeDirection.values,3*c)),_.defined(d)&&ie(e,t,r,g,d,l.applyOffset.values,c),_.defined(s)&&ae(e,t,r,g,s,l.tangent.values,c,!0),_.defined(o)&&ae(e,t,r,g,o,l.bitangent.values,c,!0),_.defined(u)&&ne(e,t,r,g,u,l.st.values,c),0=N.CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(r)},createTypedArrayFromArrayBuffer:function(e,r,t,n){return new(e>=N.CesiumMath.SIXTY_FOUR_KILOBYTES?Uint32Array:Uint16Array)(r,t,n)}},a=Object.freeze(E);e.IndexDatatype=a}); diff --git a/cate/webapi/app/cesium/Workers/IntersectionTests-2626c9e9.js b/cate/webapi/app/cesium/Workers/IntersectionTests-2626c9e9.js new file mode 100644 index 000000000..089b35d62 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/IntersectionTests-2626c9e9.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304"],function(a,q,t,T,U,W){"use strict";var B={};function c(a,t,e){var r=a+t;return T.CesiumMath.sign(a)!==T.CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(a),Math.abs(t)))=R[0]&&w[1]<=R[1]?[R[0],w[0],w[1],R[1]]:R[0]>=w[0]&&R[1]<=w[1]?[w[0],R[0],R[1],w[1]]:w[0]>R[0]&&w[0]=b[0]&&P[1]<=b[1]?[b[0],P[0],P[1],b[1]]:b[0]>=P[0]&&b[1]<=P[1]?[P[0],b[0],b[1],P[1]]:P[0]>b[0]&&P[0]U.Cartesian3.distance(a,t)))return q.defined(s)||(s=new U.Cartesian3),U.Cartesian3.multiplyByScalar(o.direction,u,s),U.Cartesian3.add(o.origin,s,s)};var f={root0:0,root1:0};function u(a,t,e){q.defined(e)||(e=new W.Interval);var r=a.origin,n=a.direction,i=t.center,s=t.radius*t.radius,o=U.Cartesian3.subtract(r,i,p),u=function(a,t,e,r){var n=t*t-4*a*e;if(!(n<0)){if(0s))return r.start=Math.max(r.start,0),r.stop=Math.min(r.stop,s),r};var d=new U.Cartesian3,S=new U.Cartesian3;function Z(a,t,e){var r=a+t;return T.CesiumMath.sign(a)!==T.CesiumMath.sign(t)&&Math.abs(r/Math.max(Math.abs(a),Math.abs(t)))>>0,this.mti=1;this.mti>>30;this.mt[this.mti]=(1812433253*((4294901760&t)>>>16)<<16)+1812433253*(65535&t)+this.mti,this.mt[this.mti]>>>=0}},i.prototype.genrand_int32=function(){var t,n,i=new Array(0,this.MATRIX_A);if(this.mti>=this.N){for(this.mti==this.N+1&&this.init_genrand(5489),n=0;n>>1^i[1&t];for(;n>>1^i[1&t];t=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^t>>>1^i[1&t],this.mti=0}return t=this.mt[this.mti++],t^=t>>>11,t^=t<<7&2636928640,t^=t<<15&4022730752,(t^=t>>>18)>>>0},i.prototype.random=function(){return this.genrand_int32()*(1/4294967296)};var h={EPSILON1:.1,EPSILON2:.01,EPSILON3:.001,EPSILON4:1e-4,EPSILON5:1e-5,EPSILON6:1e-6,EPSILON7:1e-7,EPSILON8:1e-8,EPSILON9:1e-9,EPSILON10:1e-10,EPSILON11:1e-11,EPSILON12:1e-12,EPSILON13:1e-13,EPSILON14:1e-14,EPSILON15:1e-15,EPSILON16:1e-16,EPSILON17:1e-17,EPSILON18:1e-18,EPSILON19:1e-19,EPSILON20:1e-20,EPSILON21:1e-21,GRAVITATIONALPARAMETER:3986004418e5,SOLAR_RADIUS:6955e5,LUNAR_RADIUS:1737400,SIXTY_FOUR_KILOBYTES:65536,FOUR_GIGABYTES:4294967296};h.sign=r.defaultValue(Math.sign,function(t){return 0===(t=+t)||t!=t?t:0=Math.PI?i-n:i},h.clampToLatitudeRange=function(t){return h.clamp(t,-1*h.PI_OVER_TWO,h.PI_OVER_TWO)},h.negativePiToPi=function(t){return h.zeroToTwoPi(t+h.PI)-h.PI},h.zeroToTwoPi=function(t){var n=h.mod(t,h.TWO_PI);return Math.abs(n)h.EPSILON14?h.TWO_PI:n},h.mod=function(t,n){return(t%n+n)%n},h.equalsEpsilon=function(t,n,i,a){i=r.defaultValue(i,0),a=r.defaultValue(a,i);var e=Math.abs(t-n);return e<=a||e<=i*Math.max(Math.abs(t),Math.abs(n))},h.lessThan=function(t,n,i){return t-n<-i},h.lessThanOrEquals=function(t,n,i){return t-n>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t},h.clamp=function(t,n,i){return tMath.abs(t)?h.PI_OVER_TWO-i:i,i=t<0?h.PI-i:i,i=n<0?-i:i},t.CesiumMath=h}); diff --git a/cate/webapi/app/cesium/Workers/OrientedBoundingBox-c9ad91c4.js b/cate/webapi/app/cesium/Workers/OrientedBoundingBox-c9ad91c4.js new file mode 100644 index 000000000..e01e63372 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/OrientedBoundingBox-c9ad91c4.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./Plane-231f1723","./EllipsoidTangentPlane-ed172748"],function(a,q,t,X,j,T,Z,G){"use strict";function v(a,t){this.center=j.Cartesian3.clone(q.defaultValue(a,j.Cartesian3.ZERO)),this.halfAxes=T.Matrix3.clone(q.defaultValue(t,T.Matrix3.ZERO))}v.packedLength=j.Cartesian3.packedLength+T.Matrix3.packedLength,v.pack=function(a,t,e){return e=q.defaultValue(e,0),j.Cartesian3.pack(a.center,t,e),T.Matrix3.pack(a.halfAxes,t,e+j.Cartesian3.packedLength),t},v.unpack=function(a,t,e){return t=q.defaultValue(t,0),q.defined(e)||(e=new v),j.Cartesian3.unpack(a,t,e.center),T.Matrix3.unpack(a,t+j.Cartesian3.packedLength,e.halfAxes),e};var R=new j.Cartesian3,I=new j.Cartesian3,E=new j.Cartesian3,L=new j.Cartesian3,z=new j.Cartesian3,S=new j.Cartesian3,U=new T.Matrix3,V={unitary:new T.Matrix3,diagonal:new T.Matrix3};v.fromPoints=function(a,t){if(q.defined(t)||(t=new v),!q.defined(a)||0===a.length)return t.halfAxes=T.Matrix3.ZERO,t.center=j.Cartesian3.ZERO,t;for(var e=a.length,n=j.Cartesian3.clone(a[0],R),r=1;ro&&(l+=(d=u.x-o)*d),u.y<-C?l+=(d=u.y+C)*d:u.y>C&&(l+=(d=u.y-C)*d),u.z<-c?l+=(d=u.z+c)*d:u.z>c&&(l+=(d=u.z-c)*d),l};var g=new j.Cartesian3,w=new j.Cartesian3;v.computePlaneDistances=function(a,t,e,n){q.defined(n)||(n=new T.Interval);var r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=a.center,o=a.halfAxes,C=T.Matrix3.getColumn(o,0,x),c=T.Matrix3.getColumn(o,1,f),u=T.Matrix3.getColumn(o,2,p),d=j.Cartesian3.add(C,c,g);j.Cartesian3.add(d,u,d),j.Cartesian3.add(d,s,d);var l=j.Cartesian3.subtract(d,t,w),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i);return j.Cartesian3.add(s,C,d),j.Cartesian3.add(d,c,d),j.Cartesian3.subtract(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.add(s,C,d),j.Cartesian3.subtract(d,c,d),j.Cartesian3.add(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.add(s,C,d),j.Cartesian3.subtract(d,c,d),j.Cartesian3.subtract(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.subtract(s,C,d),j.Cartesian3.add(d,c,d),j.Cartesian3.add(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.subtract(s,C,d),j.Cartesian3.add(d,c,d),j.Cartesian3.subtract(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.subtract(s,C,d),j.Cartesian3.subtract(d,c,d),j.Cartesian3.add(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),j.Cartesian3.subtract(s,C,d),j.Cartesian3.subtract(d,c,d),j.Cartesian3.subtract(d,u,d),j.Cartesian3.subtract(d,t,l),h=j.Cartesian3.dot(e,l),r=Math.min(h,r),i=Math.max(h,i),n.start=r,n.stop=i,n};var n=new T.BoundingSphere;v.isOccluded=function(a,t){var e=T.BoundingSphere.fromOrientedBoundingBox(a,n);return!t.isBoundingSphereVisible(e)},v.prototype.intersectPlane=function(a){return v.intersectPlane(this,a)},v.prototype.distanceSquaredTo=function(a){return v.distanceSquaredTo(this,a)},v.prototype.computePlaneDistances=function(a,t,e){return v.computePlaneDistances(this,a,t,e)},v.prototype.isOccluded=function(a){return v.isOccluded(this,a)},v.equals=function(a,t){return a===t||q.defined(a)&&q.defined(t)&&j.Cartesian3.equals(a.center,t.center)&&T.Matrix3.equals(a.halfAxes,t.halfAxes)},v.prototype.clone=function(a){return v.clone(this,a)},v.prototype.equals=function(a){return v.equals(this,a)},a.OrientedBoundingBox=v}); diff --git a/cate/webapi/app/cesium/Workers/Plane-231f1723.js b/cate/webapi/app/cesium/Workers/Plane-231f1723.js new file mode 100644 index 000000000..aafb8e2bf --- /dev/null +++ b/cate/webapi/app/cesium/Workers/Plane-231f1723.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304"],function(n,i,e,a,o,t){"use strict";function s(n,e){this.normal=o.Cartesian3.clone(n),this.distance=e}s.fromPointNormal=function(n,e,a){var t=-o.Cartesian3.dot(e,n);return i.defined(a)?(o.Cartesian3.clone(e,a.normal),a.distance=t,a):new s(e,t)};var r=new o.Cartesian3;s.fromCartesian4=function(n,e){var a=o.Cartesian3.fromCartesian4(n,r),t=n.w;return i.defined(e)?(o.Cartesian3.clone(a,e.normal),e.distance=t,e):new s(a,t)},s.getPointDistance=function(n,e){return o.Cartesian3.dot(n.normal,e)+n.distance};var c=new o.Cartesian3;s.projectPointOntoPlane=function(n,e,a){i.defined(a)||(a=new o.Cartesian3);var t=s.getPointDistance(n,e),r=o.Cartesian3.multiplyByScalar(n.normal,t,c);return o.Cartesian3.subtract(e,r,a)};var l=new o.Cartesian3;s.transform=function(n,e,a){return t.Matrix4.multiplyByPointAsVector(e,n.normal,r),o.Cartesian3.normalize(r,r),o.Cartesian3.multiplyByScalar(n.normal,-n.distance,l),t.Matrix4.multiplyByPoint(e,l,l),s.fromPointNormal(l,r,a)},s.clone=function(n,e){return i.defined(e)?(o.Cartesian3.clone(n.normal,e.normal),e.distance=n.distance,e):new s(n.normal,n.distance)},s.equals=function(n,e){return n.distance===e.distance&&o.Cartesian3.equals(n.normal,e.normal)},s.ORIGIN_XY_PLANE=Object.freeze(new s(o.Cartesian3.UNIT_Z,0)),s.ORIGIN_YZ_PLANE=Object.freeze(new s(o.Cartesian3.UNIT_X,0)),s.ORIGIN_ZX_PLANE=Object.freeze(new s(o.Cartesian3.UNIT_Y,0)),n.Plane=s}); diff --git a/cate/webapi/app/cesium/Workers/PolygonGeometryLibrary-29b9a52e.js b/cate/webapi/app/cesium/Workers/PolygonGeometryLibrary-29b9a52e.js new file mode 100644 index 000000000..84edf42f6 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/PolygonGeometryLibrary-29b9a52e.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40","./GeometryPipeline-b49b2e59","./IndexDatatype-53503fee","./arrayRemoveDuplicates-ebc732b0","./ArcType-dc1c5aee","./EllipsoidRhumbLine-c704bf4c","./PolygonPipeline-ff364b47"],function(e,I,x,E,y,A,P,_,d,G,L,M,v,D){"use strict";function S(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(S.prototype,{length:{get:function(){return this._length}}}),S.prototype.enqueue=function(e){this._array.push(e),this._length++},S.prototype.dequeue=function(){if(0!==this._length){var e=this._array,t=this._offset,r=e[t];return e[t]=void 0,10<++t&&2*t>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,r}},S.prototype.peek=function(){if(0!==this._length)return this._array[this._offset]},S.prototype.contains=function(e){return-1!==this._array.indexOf(e)},S.prototype.clear=function(){this._array.length=this._offset=this._length=0},S.prototype.sort=function(e){0=r.next.y&&r.next.y!==r.y){var u=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(u<=a&&x=r.x&&r.x>=p&&a!==r.x&&g(in.x||r.x===n.x&&function(e,t){return b(e.prev,e,t.prev)<0&&b(t.next,e,e.next)<0}(n,r)))&&(n=r,f=o)),r=r.next,r!==s;);return n}(e,t))&&c(n=E(t,e),n.next)}}(s[a],n),n=c(n,n.next);return n}(e,t,f,n)),e.length>80*n){r=i=e[0],a=x=e[1];for(var v=n;vi.x?a.x>x.x?a.x:x.x:i.x>x.x?i.x:x.x,p=a.y>i.y?a.y>x.y?a.y:x.y:i.y>x.y?i.y:x.y,h=C(u,o,t,n,r),f=C(s,p,t,n,r),y=e.prevZ,v=e.nextZ;for(;y&&y.z>=h&&v&&v.z<=f;){if(y!==e.prev&&y!==e.next&&g(a.x,a.y,i.x,i.y,x.x,x.y,y.x,y.y)&&0<=b(y.prev,y,y.next))return!1;if(y=y.prevZ,v!==e.prev&&v!==e.next&&g(a.x,a.y,i.x,i.y,x.x,x.y,v.x,v.y)&&0<=b(v.prev,v,v.next))return!1;v=v.nextZ}for(;y&&y.z>=h;){if(y!==e.prev&&y!==e.next&&g(a.x,a.y,i.x,i.y,x.x,x.y,y.x,y.y)&&0<=b(y.prev,y,y.next))return!1;y=y.prevZ}for(;v&&v.z<=f;){if(v!==e.prev&&v!==e.next&&g(a.x,a.y,i.x,i.y,x.x,x.y,v.x,v.y)&&0<=b(v.prev,v,v.next))return!1;v=v.nextZ}return!0}(e,r,a,i):function(e){var t=e.prev,n=e,r=e.next;if(0<=b(t,n,r))return!1;var a=e.next.next;for(;a!==e.prev;){if(g(t.x,t.y,n.x,n.y,r.x,r.y,a.x,a.y)&&0<=b(a.prev,a,a.next))return!1;a=a.next}return!0}(e))t.push(u.i/n),t.push(e.i/n),t.push(o.i/n),f(e),e=o.next,s=o.next;else if((e=o)===s){x?1===x?d(e=function(e,t,n){var r=e;do{var a=r.prev,i=r.next.next;!p(a,i)&&h(a,r,r.next,i)&&w(a,i)&&w(i,a)&&(t.push(a.i/n),t.push(r.i/n),t.push(i.i/n),f(r),f(r.next),r=e=i),r=r.next}while(r!==e);return c(r)}(c(e),t,n),t,n,r,a,i,2):2===x&&function(e,t,n,r,a,i){var x=e;do{for(var u=x.next.next;u!==x.prev;){if(x.i!==u.i&&function(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&h(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(w(e,t)&&w(t,e)&&function(e,t){var n=e,r=!1,a=(e.x+t.x)/2,i=(e.y+t.y)/2;for(;n.y>i!=n.next.y>i&&n.next.y!==n.y&&a<(n.next.x-n.x)*(i-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next,n!==e;);return r}(e,t)&&(b(e.prev,e,t.prev)||b(e,t.prev,t))||p(e,t)&&0=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function s(e){return 0-e?((i=n).x=this._cameraPosition.x/(r.radii.x+e),i.y=this._cameraPosition.y/(r.radii.y+e),i.z=this._cameraPosition.z/(r.radii.z+e),i.x*i.x+i.y*i.y+i.z*i.z-1):(i=this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared);return h(t,i,a)},i.prototype.computeHorizonCullingPoint=function(t,e,i){return d(this._ellipsoid,t,e,i)};var c=b.Ellipsoid.clone(b.Ellipsoid.UNIT_SPHERE);i.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(t,e,i,r){return d(u(this._ellipsoid,i,c),t,e,r)},i.prototype.computeHorizonCullingPointFromVertices=function(t,e,i,r,a){return p(this._ellipsoid,t,e,i,r,a)},i.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(t,e,i,r,a,n){return p(u(this._ellipsoid,a,c),t,e,i,r,n)};var m=[];i.prototype.computeHorizonCullingPointFromRectangle=function(t,e,i){var r=b.Rectangle.subsample(t,e,0,m),a=M.BoundingSphere.fromPoints(r);if(!(b.Cartesian3.magnitude(a.center)<.1*e.minimumRadius))return this.computeHorizonCullingPoint(a.center,r,i)};var a=new b.Cartesian3;function u(t,e,i){var r;return y.defined(e)&&e<0&&t.minimumRadius>-e&&(r=b.Cartesian3.fromElements(t.radii.x+e,t.radii.y+e,t.radii.z+e,a),t=b.Ellipsoid.fromCartesian3(r,i)),t}function d(t,e,i,r){y.defined(r)||(r=new b.Cartesian3);for(var a=P(t,e),n=0,o=0,s=i.length;oa)}var C=new b.Cartesian3,S=new b.Cartesian3;function g(t,e,i){var r=t.transformPositionToScaledSpace(e,C),a=b.Cartesian3.magnitudeSquared(r),n=Math.sqrt(a),o=b.Cartesian3.divideByScalar(r,n,S),a=Math.max(1,a),s=1/(n=Math.max(1,n));return 1/(b.Cartesian3.dot(o,i)*s-b.Cartesian3.magnitude(b.Cartesian3.cross(o,i,o))*(Math.sqrt(a-1)*s))}function T(t,e,i){if(!(e<=0||e===1/0||e!=e))return b.Cartesian3.multiplyByScalar(t,e,i)}var r=new b.Cartesian3;function P(t,e){return b.Cartesian3.equals(e,b.Cartesian3.ZERO)?e:(t.transformPositionToScaledSpace(e,r),b.Cartesian3.normalize(r,r))}var v=Object.freeze({NONE:0,BITS12:1}),z=new b.Cartesian3,E=new b.Cartesian3,N=new b.Cartesian2,I=new M.Matrix4,B=new M.Matrix4,_=Math.pow(2,12);function w(t,e,i,r,a,n){var o,s,c,m,u,d,l,p,h,f,x,C,S=v.NONE;y.defined(t)&&y.defined(e)&&y.defined(i)&&y.defined(r)&&(s=t.minimum,c=t.maximum,m=b.Cartesian3.subtract(c,s,E),u=i-e,S=Math.max(b.Cartesian3.maximumComponent(m),u)<_-1?v.BITS12:v.NONE,d=t.center,l=M.Matrix4.inverseTransformation(r,new M.Matrix4),p=b.Cartesian3.negate(s,z),M.Matrix4.multiply(M.Matrix4.fromTranslation(p,I),l,l),(h=z).x=1/m.x,h.y=1/m.y,h.z=1/m.z,M.Matrix4.multiply(M.Matrix4.fromScale(h,I),l,l),o=M.Matrix4.clone(r),M.Matrix4.setTranslation(o,b.Cartesian3.ZERO,o),r=M.Matrix4.clone(r,new M.Matrix4),f=M.Matrix4.fromTranslation(s,I),x=M.Matrix4.fromScale(m,B),C=M.Matrix4.multiply(f,x,I),M.Matrix4.multiply(r,C,r),M.Matrix4.multiply(o,C,o)),this.quantization=S,this.minimumHeight=e,this.maximumHeight=i,this.center=d,this.toScaledENU=l,this.fromScaledENU=r,this.matrix=o,this.hasVertexNormals=a,this.hasWebMercatorT=y.defaultValue(n,!1)}w.prototype.encode=function(t,e,i,r,a,n,o){var s,c,m,u,d,l,p=r.x,h=r.y;return this.quantization===v.BITS12?((i=M.Matrix4.multiplyByPoint(this.toScaledENU,i,z)).x=f.CesiumMath.clamp(i.x,0,1),i.y=f.CesiumMath.clamp(i.y,0,1),i.z=f.CesiumMath.clamp(i.z,0,1),s=this.maximumHeight-this.minimumHeight,c=f.CesiumMath.clamp((a-this.minimumHeight)/s,0,1),b.Cartesian2.fromElements(i.x,i.y,N),m=x.AttributeCompression.compressTextureCoordinates(N),b.Cartesian2.fromElements(i.z,c,N),u=x.AttributeCompression.compressTextureCoordinates(N),b.Cartesian2.fromElements(p,h,N),d=x.AttributeCompression.compressTextureCoordinates(N),t[e++]=m,t[e++]=u,t[e++]=d,this.hasWebMercatorT&&(b.Cartesian2.fromElements(o,0,N),l=x.AttributeCompression.compressTextureCoordinates(N),t[e++]=l)):(b.Cartesian3.subtract(i,this.center,z),t[e++]=z.x,t[e++]=z.y,t[e++]=z.z,t[e++]=a,t[e++]=p,t[e++]=h,this.hasWebMercatorT&&(t[e++]=o)),this.hasVertexNormals&&(t[e++]=x.AttributeCompression.octPackFloat(n)),e},w.prototype.decodePosition=function(t,e,i){if(y.defined(i)||(i=new b.Cartesian3),e*=this.getStride(),this.quantization!==v.BITS12)return i.x=t[e],i.y=t[e+1],i.z=t[e+2],b.Cartesian3.add(i,this.center,i);var r=x.AttributeCompression.decompressTextureCoordinates(t[e],N);i.x=r.x,i.y=r.y;var a=x.AttributeCompression.decompressTextureCoordinates(t[e+1],N);return i.z=a.x,M.Matrix4.multiplyByPoint(this.fromScaledENU,i,i)},w.prototype.decodeTextureCoordinates=function(t,e,i){return y.defined(i)||(i=new b.Cartesian2),e*=this.getStride(),this.quantization===v.BITS12?x.AttributeCompression.decompressTextureCoordinates(t[e+2],i):b.Cartesian2.fromElements(t[e+4],t[e+5],i)},w.prototype.decodeHeight=function(t,e){return e*=this.getStride(),this.quantization!==v.BITS12?t[e+3]:x.AttributeCompression.decompressTextureCoordinates(t[e+1],N).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight},w.prototype.decodeWebMercatorT=function(t,e){return e*=this.getStride(),this.quantization===v.BITS12?x.AttributeCompression.decompressTextureCoordinates(t[e+3],N).x:t[e+6]},w.prototype.getOctEncodedNormal=function(t,e,i){var r=t[e=(e+1)*this.getStride()-1]/256,a=Math.floor(r),n=256*(r-a);return b.Cartesian2.fromElements(a,n,i)},w.prototype.getStride=function(){var t;switch(this.quantization){case v.BITS12:t=3;break;default:t=6}return this.hasWebMercatorT&&++t,this.hasVertexNormals&&++t,t};var A={position3DAndHeight:0,textureCoordAndEncodedNormals:1},q={compressed0:0,compressed1:1};w.prototype.getAttributes=function(t){var e,i=o.ComponentDatatype.FLOAT,r=o.ComponentDatatype.getSizeInBytes(i);if(this.quantization===v.NONE){var a=2;return this.hasWebMercatorT&&++a,this.hasVertexNormals&&++a,[{index:A.position3DAndHeight,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:4,offsetInBytes:0,strideInBytes:e=(4+a)*r},{index:A.textureCoordAndEncodedNormals,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:a,offsetInBytes:4*r,strideInBytes:e}]}var n=3;return(this.hasWebMercatorT||this.hasVertexNormals)&&++n,this.hasWebMercatorT&&this.hasVertexNormals?[{index:q.compressed0,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:n,offsetInBytes:0,strideInBytes:e=(n+1)*r},{index:q.compressed1,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:1,offsetInBytes:n*r,strideInBytes:e}]:[{index:q.compressed0,vertexBuffer:t,componentDatatype:i,componentsPerAttribute:n}]},w.prototype.getAttributeLocations=function(){return this.quantization===v.NONE?A:q},w.clone=function(t,e){return y.defined(e)||(e=new w),e.quantization=t.quantization,e.minimumHeight=t.minimumHeight,e.maximumHeight=t.maximumHeight,e.center=b.Cartesian3.clone(t.center),e.toScaledENU=M.Matrix4.clone(t.toScaledENU),e.fromScaledENU=M.Matrix4.clone(t.fromScaledENU),e.matrix=M.Matrix4.clone(t.matrix),e.hasVertexNormals=t.hasVertexNormals,e.hasWebMercatorT=t.hasWebMercatorT,e},t.EllipsoidalOccluder=i,t.TerrainEncoding=w}); diff --git a/cate/webapi/app/cesium/Workers/Transforms-ec27f304.js b/cate/webapi/app/cesium/Workers/Transforms-ec27f304.js new file mode 100644 index 000000000..39371cf81 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/Transforms-ec27f304.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./RuntimeError-2109023a"],function(e,I,i,X,P,H){"use strict";function t(e){this._ellipsoid=I.defaultValue(e,P.Ellipsoid.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(t.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),t.prototype.project=function(e,t){var n=this._semimajorAxis,r=e.longitude*n,a=e.latitude*n,i=e.height;return I.defined(t)?(t.x=r,t.y=a,t.z=i,t):new P.Cartesian3(r,a,i)},t.prototype.unproject=function(e,t){var n=this._oneOverSemimajorAxis,r=e.x*n,a=e.y*n,i=e.z;return I.defined(t)?(t.longitude=r,t.latitude=a,t.height=i,t):new P.Cartographic(r,a,i)};var s=Object.freeze({OUTSIDE:-1,INTERSECTING:0,INSIDE:1});function o(e,t){this.start=I.defaultValue(e,0),this.stop=I.defaultValue(t,0)}function J(e,t,n,r,a,i,s,o,u){this[0]=I.defaultValue(e,0),this[1]=I.defaultValue(r,0),this[2]=I.defaultValue(s,0),this[3]=I.defaultValue(t,0),this[4]=I.defaultValue(a,0),this[5]=I.defaultValue(o,0),this[6]=I.defaultValue(n,0),this[7]=I.defaultValue(i,0),this[8]=I.defaultValue(u,0)}J.packedLength=9,J.pack=function(e,t,n){return n=I.defaultValue(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t},J.unpack=function(e,t,n){return t=I.defaultValue(t,0),I.defined(n)||(n=new J),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n},J.clone=function(e,t){if(I.defined(e))return I.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):new J(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8])},J.fromArray=function(e,t,n){return t=I.defaultValue(t,0),I.defined(n)||(n=new J),n[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],n[4]=e[t+4],n[5]=e[t+5],n[6]=e[t+6],n[7]=e[t+7],n[8]=e[t+8],n},J.fromColumnMajorArray=function(e,t){return J.clone(e,t)},J.fromRowMajorArray=function(e,t){return I.defined(t)?(t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],t):new J(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])},J.fromQuaternion=function(e,t){var n=e.x*e.x,r=e.x*e.y,a=e.x*e.z,i=e.x*e.w,s=e.y*e.y,o=e.y*e.z,u=e.y*e.w,l=e.z*e.z,c=e.z*e.w,d=e.w*e.w,f=n-s-l+d,h=2*(r-c),p=2*(a+u),m=2*(r+c),y=s-n-l+d,v=2*(o-i),C=2*(a-u),w=2*(o+i),g=-n-s+l+d;return I.defined(t)?(t[0]=f,t[1]=m,t[2]=C,t[3]=h,t[4]=y,t[5]=w,t[6]=p,t[7]=v,t[8]=g,t):new J(f,h,p,m,y,v,C,w,g)},J.fromHeadingPitchRoll=function(e,t){var n=Math.cos(-e.pitch),r=Math.cos(-e.heading),a=Math.cos(e.roll),i=Math.sin(-e.pitch),s=Math.sin(-e.heading),o=Math.sin(e.roll),u=n*r,l=-a*s+o*i*r,c=o*s+a*i*r,d=n*s,f=a*r+o*i*s,h=-o*r+a*i*s,p=-i,m=o*n,y=a*n;return I.defined(t)?(t[0]=u,t[1]=d,t[2]=p,t[3]=l,t[4]=f,t[5]=m,t[6]=c,t[7]=h,t[8]=y,t):new J(u,l,c,d,f,h,p,m,y)},J.fromScale=function(e,t){return I.defined(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=e.y,t[5]=0,t[6]=0,t[7]=0,t[8]=e.z,t):new J(e.x,0,0,0,e.y,0,0,0,e.z)},J.fromUniformScale=function(e,t){return I.defined(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=e,t[5]=0,t[6]=0,t[7]=0,t[8]=e,t):new J(e,0,0,0,e,0,0,0,e)},J.fromCrossProduct=function(e,t){return I.defined(t)?(t[0]=0,t[1]=e.z,t[2]=-e.y,t[3]=-e.z,t[4]=0,t[5]=e.x,t[6]=e.y,t[7]=-e.x,t[8]=0,t):new J(0,-e.z,e.y,e.z,0,-e.x,-e.y,e.x,0)},J.fromRotationX=function(e,t){var n=Math.cos(e),r=Math.sin(e);return I.defined(t)?(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=n,t[5]=r,t[6]=0,t[7]=-r,t[8]=n,t):new J(1,0,0,0,n,-r,0,r,n)},J.fromRotationY=function(e,t){var n=Math.cos(e),r=Math.sin(e);return I.defined(t)?(t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=1,t[5]=0,t[6]=r,t[7]=0,t[8]=n,t):new J(n,0,r,0,1,0,-r,0,n)},J.fromRotationZ=function(e,t){var n=Math.cos(e),r=Math.sin(e);return I.defined(t)?(t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new J(n,-r,0,r,n,0,0,0,1)},J.toArray=function(e,t){return I.defined(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]]},J.getElementIndex=function(e,t){return 3*e+t},J.getColumn=function(e,t,n){var r=3*t,a=e[r],i=e[1+r],s=e[2+r];return n.x=a,n.y=i,n.z=s,n},J.setColumn=function(e,t,n,r){var a=3*t;return(r=J.clone(e,r))[a]=n.x,r[1+a]=n.y,r[2+a]=n.z,r},J.getRow=function(e,t,n){var r=e[t],a=e[t+3],i=e[t+6];return n.x=r,n.y=a,n.z=i,n},J.setRow=function(e,t,n,r){return(r=J.clone(e,r))[t]=n.x,r[t+3]=n.y,r[t+6]=n.z,r};var n=new P.Cartesian3;J.getScale=function(e,t){return t.x=P.Cartesian3.magnitude(P.Cartesian3.fromElements(e[0],e[1],e[2],n)),t.y=P.Cartesian3.magnitude(P.Cartesian3.fromElements(e[3],e[4],e[5],n)),t.z=P.Cartesian3.magnitude(P.Cartesian3.fromElements(e[6],e[7],e[8],n)),t};var r=new P.Cartesian3;J.getMaximumScale=function(e){return J.getScale(e,r),P.Cartesian3.maximumComponent(r)},J.multiply=function(e,t,n){var r=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],a=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],i=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],s=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],o=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],u=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],l=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],c=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],d=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];return n[0]=r,n[1]=a,n[2]=i,n[3]=s,n[4]=o,n[5]=u,n[6]=l,n[7]=c,n[8]=d,n},J.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n},J.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n},J.multiplyByVector=function(e,t,n){var r=t.x,a=t.y,i=t.z,s=e[0]*r+e[3]*a+e[6]*i,o=e[1]*r+e[4]*a+e[7]*i,u=e[2]*r+e[5]*a+e[8]*i;return n.x=s,n.y=o,n.z=u,n},J.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n},J.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.x,n[3]=e[3]*t.y,n[4]=e[4]*t.y,n[5]=e[5]*t.y,n[6]=e[6]*t.z,n[7]=e[7]*t.z,n[8]=e[8]*t.z,n},J.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t},J.transpose=function(e,t){var n=e[0],r=e[3],a=e[6],i=e[1],s=e[4],o=e[7],u=e[2],l=e[5],c=e[8];return t[0]=n,t[1]=r,t[2]=a,t[3]=i,t[4]=s,t[5]=o,t[6]=u,t[7]=l,t[8]=c,t};var a=new P.Cartesian3(1,1,1);J.getRotation=function(e,t){var n=P.Cartesian3.divideComponents(a,J.getScale(e,r),r);return t=J.multiplyByScale(e,n,t)};var h=[1,0,0],p=[2,2,1];var u=new J,l=new J;function G(e,t,n,r){this.x=I.defaultValue(e,0),this.y=I.defaultValue(t,0),this.z=I.defaultValue(n,0),this.w=I.defaultValue(r,0)}J.computeEigenDecomposition=function(e,t){var n=X.CesiumMath.EPSILON20,r=0,a=0;I.defined(t)||(t={});for(var i=t.unitary=J.clone(J.IDENTITY,t.unitary),s=t.diagonal=J.clone(e,t.diagonal),o=n*function(e){for(var t=0,n=0;n<9;++n){var r=e[n];t+=r*r}return Math.sqrt(t)}(s);a<10&&function(e){for(var t=0,n=0;n<3;++n){var r=e[J.getElementIndex(p[n],h[n])];t+=2*r*r}return Math.sqrt(t)}(s)>o;)!function(e,t){for(var n=X.CesiumMath.EPSILON15,r=0,a=1,i=0;i<3;++i){var s=Math.abs(e[J.getElementIndex(p[i],h[i])]);rn&&(c=(u=(o=(e[J.getElementIndex(f,f)]-e[J.getElementIndex(d,d)])/2/e[J.getElementIndex(f,d)])<0?-1/(-o+Math.sqrt(1+o*o)):1/(o+Math.sqrt(1+o*o)))*(l=1/Math.sqrt(1+u*u))),(t=J.clone(J.IDENTITY,t))[J.getElementIndex(d,d)]=t[J.getElementIndex(f,f)]=l,t[J.getElementIndex(f,d)]=c,t[J.getElementIndex(d,f)]=-c}(s,u),J.transpose(u,l),J.multiply(s,u,s),J.multiply(l,s,s),J.multiply(i,u,i),2<++r&&(++a,r=0);return t},J.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t},J.determinant=function(e){var t=e[0],n=e[3],r=e[6],a=e[1],i=e[4],s=e[7],o=e[2],u=e[5],l=e[8];return t*(i*l-u*s)+a*(u*r-n*l)+o*(n*s-i*r)},J.inverse=function(e,t){var n=e[0],r=e[1],a=e[2],i=e[3],s=e[4],o=e[5],u=e[6],l=e[7],c=e[8],d=J.determinant(e);return t[0]=s*c-l*o,t[1]=l*a-r*c,t[2]=r*o-s*a,t[3]=u*o-i*c,t[4]=n*c-u*a,t[5]=i*a-n*o,t[6]=i*l-u*s,t[7]=u*r-n*l,t[8]=n*s-i*r,J.multiplyByScalar(t,1/d,t)},J.equals=function(e,t){return e===t||I.defined(e)&&I.defined(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]},J.equalsEpsilon=function(e,t,n){return n=I.defaultValue(n,0),e===t||I.defined(e)&&I.defined(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n},J.IDENTITY=Object.freeze(new J(1,0,0,0,1,0,0,0,1)),J.ZERO=Object.freeze(new J(0,0,0,0,0,0,0,0,0)),J.COLUMN0ROW0=0,J.COLUMN0ROW1=1,J.COLUMN0ROW2=2,J.COLUMN1ROW0=3,J.COLUMN1ROW1=4,J.COLUMN1ROW2=5,J.COLUMN2ROW0=6,J.COLUMN2ROW1=7,J.COLUMN2ROW2=8,Object.defineProperties(J.prototype,{length:{get:function(){return J.packedLength}}}),J.prototype.clone=function(e){return J.clone(this,e)},J.prototype.equals=function(e){return J.equals(this,e)},J.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]},J.prototype.equalsEpsilon=function(e,t){return J.equalsEpsilon(this,e,t)},J.prototype.toString=function(){return"("+this[0]+", "+this[3]+", "+this[6]+")\n("+this[1]+", "+this[4]+", "+this[7]+")\n("+this[2]+", "+this[5]+", "+this[8]+")"},G.fromElements=function(e,t,n,r,a){return I.defined(a)?(a.x=e,a.y=t,a.z=n,a.w=r,a):new G(e,t,n,r)},G.fromColor=function(e,t){return I.defined(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new G(e.red,e.green,e.blue,e.alpha)},G.clone=function(e,t){if(I.defined(e))return I.defined(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new G(e.x,e.y,e.z,e.w)},G.packedLength=4,G.pack=function(e,t,n){return n=I.defaultValue(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t},G.unpack=function(e,t,n){return t=I.defaultValue(t,0),I.defined(n)||(n=new G),n.x=e[t++],n.y=e[t++],n.z=e[t++],n.w=e[t],n},G.packArray=function(e,t){var n=e.length,r=4*n;if(I.defined(t)){if(!Array.isArray(t)&&t.length!==r)throw new i.DeveloperError("If result is a typed array, it must have exactly array.length * 4 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var a=0;as.x&&P.Cartesian3.clone(n,s),fo.y&&P.Cartesian3.clone(n,o),hu.z&&P.Cartesian3.clone(n,u)}var p=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(s,r,j)),m=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(o,a,j)),y=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(u,i,j)),v=r,C=s,w=p;wu.x&&P.Cartesian3.clone(a,u),pl.y&&P.Cartesian3.clone(a,l),mc.z&&P.Cartesian3.clone(a,c)}var y=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(u,i,j)),v=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(l,s,j)),C=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(c,o,j)),w=i,g=u,x=y;xo.x&&P.Cartesian3.clone(r,o),hu.y&&P.Cartesian3.clone(r,u),pl.z&&P.Cartesian3.clone(r,l)}var m=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(o,a,j)),y=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(u,i,j)),v=P.Cartesian3.magnitudeSquared(P.Cartesian3.subtract(l,s,j)),C=a,w=o,g=m;gn.radius&&(n.radius=r),n},D.intersectPlane=function(e,t){var n=e.center,r=e.radius,a=t.normal,i=P.Cartesian3.dot(a,n)+t.distance;return i<-r?s.OUTSIDE:i=t?"":Array(1+t-e.length>>>0).join(n);return r?e+a:a+e}function g(e,t,n,r,a,i){var s=r-e.length;return 0>>0;return e=(n=n&&o&&{2:"0b",8:"0",16:"0x"}[t]||"")+w(o.toString(t),i||0,"0",!1),g(e,n,r,a,s)}function E(e,t,n,r,a,i){return null!=r&&(e=e.slice(0,r)),g(e,"",t,n,a,i)}var O=arguments,_=0,e=O[_++];return e.replace(/%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g,function(e,t,n,r,a,i,s){var o,u,l,c,d;if("%%"==e)return"%";for(var f=!1,h="",p=!1,m=!1,y=" ",v=n.length,C=0;n&&C=t.length&&(n=t.length-1);var r=t[n].offset;0=n.length)return Qt.addSeconds(e,-n[r-1].offset,t);var a=Qt.secondsDifference(n[r].julianDate,e);return 0===a?Qt.addSeconds(e,-n[r].offset,t):a<=1?void 0:Qt.addSeconds(e,-n[--r].offset,t)}function Lt(e,t,n){var r=t/zt.SECONDS_PER_DAY|0;return e+=r,(t-=zt.SECONDS_PER_DAY*r)<0&&(e--,t+=zt.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function Bt(e,t,n,r,a,i,s){var o=(t-14)/12|0,u=e+4800+o,l=(1461*u/4|0)+(367*(t-2-12*o)/12|0)-(3*((u+100)/100|0)/4|0)+n-32075;(r-=12)<0&&(r+=24);var c=i+(r*zt.SECONDS_PER_HOUR+a*zt.SECONDS_PER_MINUTE+s*zt.SECONDS_PER_MILLISECOND);return 43200<=c&&--l,[l,c]}var Wt=/^(\d{4})$/,jt=/^(\d{4})-(\d{2})$/,kt=/^(\d{4})-?(\d{3})$/,Yt=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,Zt=/^(\d{4})-?(\d{2})-?(\d{2})$/,Xt=/([Z+\-])?(\d{2})?:?(\d{2})?$/,Ht=/^(\d{2})(\.\d+)?/.source+Xt.source,Jt=/^(\d{2}):?(\d{2})(\.\d+)?/.source+Xt.source,Gt=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+Xt.source;function Qt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=I.defaultValue(e,0),t=I.defaultValue(t,0),n=I.defaultValue(n,It.UTC);var r=0|e;Lt(r,t+=(e-r)*zt.SECONDS_PER_DAY,this),n===It.UTC&&Ft(this)}Qt.fromGregorianDate=function(e,t){var n=Bt(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return I.defined(t)?(Lt(n[0],n[1],t),Ft(t),t):new Qt(n[0],n[1],It.UTC)},Qt.fromDate=function(e,t){var n=Bt(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return I.defined(t)?(Lt(n[0],n[1],t),Ft(t),t):new Qt(n[0],n[1],It.UTC)},Qt.fromIso8601=function(e,t){var n,r,a,i,s,o=(e=e.replace(",",".")).split("T"),u=1,l=1,c=0,d=0,f=0,h=0,p=o[0],m=o[1];if(null!==(o=p.match(Zt))?(n=+o[1],u=+o[2],l=+o[3]):null!==(o=p.match(jt))?(n=+o[1],u=+o[2]):null!==(o=p.match(Wt))?n=+o[1]:(null!==(o=p.match(kt))?(n=+o[1],i=+o[2],a=Tt(n)):null!==(o=p.match(Yt))&&(n=+o[1],i=7*+o[2]+(+o[3]||0)-new Date(Date.UTC(n,0,4)).getUTCDay()-3),(r=new Date(Date.UTC(n,0,1))).setUTCDate(i),u=r.getUTCMonth()+1,l=r.getUTCDate()),a=Tt(n),I.defined(m)){null!==(o=m.match(Gt))?(c=+o[1],d=+o[2],f=+o[3],h=1e3*(o[4]||0),s=5):null!==(o=m.match(Jt))?(c=+o[1],d=+o[2],f=60*(o[3]||0),s=4):null!==(o=m.match(Ht))&&(c=+o[1],d=60*(o[2]||0),s=3);var y=o[s],v=+o[s+1],C=+(o[s+2]||0);switch(y){case"+":c-=v,d-=C;break;case"-":c+=v,d+=C;break;case"Z":break;default:d+=new Date(Date.UTC(n,u-1,l,c,d)).getTimezoneOffset()}}var w=60===f;for(w&&f--;60<=d;)d-=60,c++;for(;24<=c;)c-=24,l++;for(r=a&&2===u?29:Dt[u-1];ra&&(t=n[a],this._length=a),t},xn.prototype.pop=function(e){if(e=I.defaultValue(e,0),0!==this._length){var t=this._array,n=t[e];return En(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n}};var On={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},_n=20,Sn=new xn({comparator:function(e,t){return e.priority-t.priority}});Sn.maximumLength=_n,Sn.reserve(_n);var bn=[],Mn={},Rn="undefined"!=typeof document?new $t(document.location.href):new $t,An=new wn;function Tn(){}function qn(e){I.defined(e.priorityFunction)&&(e.priority=e.priorityFunction())}function zn(e){var t=I.defaultValue(Tn.requestsByServer[e],Tn.maximumRequestsPerServer);return Mn[e]e;){Dn(Sn.pop())}_n=e,Sn.maximumLength=e,Sn.reserve(e)}}}),Tn.update=function(){for(var e,t=0,n=bn.length,r=0;r=Tn.maximumRequests)){qn(e);var t=Sn.insert(e);if(I.defined(t)){if(t===e)return;Dn(t)}return In(e)}}},Tn.clearForSpecs=function(){for(;0=this.retryAttempts)return I.when(!1);var n=this;return I.when(t(this,e)).then(function(e){return++n._retryCount,e})},Yn.prototype.clone=function(e){return I.defined(e)||(e=new Yn({url:this._url})),e._url=this._url,e._queryParameters=on(this._queryParameters),e._templateValues=on(this._templateValues),e.headers=on(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e},Yn.prototype.getBaseUri=function(e){return t=this.getUrlComponent(e),n=e,r="",-1!==(a=t.lastIndexOf("/"))&&(r=t.substring(0,a+1)),n&&(t=new $t(t),I.defined(t.query)&&(r+="?"+t.query),I.defined(t.fragment)&&(r+="#"+t.fragment)),r;var t,n,r,a},Yn.prototype.appendForwardSlash=function(){var e;this._url=(0!==(e=this._url).length&&"/"===e[e.length-1]||(e+="/"),e)},Yn.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})},Yn.fetchArrayBuffer=function(e){return new Yn(e).fetchArrayBuffer()},Yn.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})},Yn.fetchBlob=function(e){return new Yn(e).fetchBlob()},Yn.prototype.fetchImage=function(e){e=I.defaultValue(e,I.defaultValue.EMPTY_OBJECT);var t=I.defaultValue(e.preferImageBitmap,!1),n=I.defaultValue(e.preferBlob,!1),r=I.defaultValue(e.flipY,!1);if(jn(this.request),!Vn||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return Zn({resource:this,flipY:r,preferImageBitmap:t});var a,i,s,o=this.fetchBlob();return I.defined(o)?Yn.supportsImageBitmapOptions().then(function(e){return a=e&&t,o}).then(function(e){if(I.defined(e)){if(s=e,a)return Yn.createImageBitmapFromBlob(e,{flipY:r,premultiplyAlpha:!1});var t=window.URL.createObjectURL(e);return Zn({resource:i=new Yn({url:t}),flipY:r,preferImageBitmap:!1})}}).then(function(e){if(I.defined(e))return e.blob=s,a||window.URL.revokeObjectURL(i.url),e}).otherwise(function(e){return I.defined(i)&&window.URL.revokeObjectURL(i.url),e.blob=s,I.when.reject(e)}):void 0},Yn.fetchImage=function(e){return new Yn(e).fetchImage({flipY:e.flipY,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})},Yn.prototype.fetchText=function(){return this.fetch({responseType:"text"})},Yn.fetchText=function(e){return new Yn(e).fetchText()},Yn.prototype.fetchJson=function(){var e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(I.defined(e))return e.then(function(e){if(I.defined(e))return JSON.parse(e)})},Yn.fetchJson=function(e){return new Yn(e).fetchJson()},Yn.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})},Yn.fetchXML=function(e){return new Yn(e).fetchXML()},Yn.prototype.fetchJsonp=function(e){var t;for(e=I.defaultValue(e,"callback"),jn(this.request);t="loadJsonp"+Math.random().toString().substring(2,8),I.defined(window[t]););return function n(r,a,i){var e={};e[a]=i;r.setQueryParameters(e);var s=r.request;s.url=r.url;s.requestFunction=function(){var t=I.when.defer();return window[i]=function(e){t.resolve(e);try{delete window[i]}catch(e){window[i]=void 0}},Yn._Implementations.loadAndExecuteScript(r.url,i,t),t.promise};var t=Tn.request(s);if(!I.defined(t))return;return t.otherwise(function(t){return s.state!==mn.FAILED?I.when.reject(t):r.retryOnError(t).then(function(e){return e?(s.state=mn.UNISSUED,s.deferred=void 0,n(r,a,i)):I.when.reject(t)})})}(this,e,t)},Yn.fetchJsonp=function(e){return new Yn(e).fetchJsonp(e.callbackParameterName)},Yn.prototype._makeRequest=function(o){var u=this;jn(u.request);var l=u.request;l.url=u.url,l.requestFunction=function(){var e=o.responseType,t=un(o.headers,u.headers),n=o.overrideMimeType,r=o.method,a=o.data,i=I.when.defer(),s=Yn._Implementations.loadWithXhr(u.url,e,r,a,t,i,n);return I.defined(s)&&I.defined(s.abort)&&(l.cancelFunction=function(){s.abort()}),i.promise};var e=Tn.request(l);if(I.defined(e))return e.then(function(e){return l.cancelFunction=void 0,e}).otherwise(function(t){return l.cancelFunction=void 0,l.state!==mn.FAILED?I.when.reject(t):u.retryOnError(t).then(function(e){return e?(l.state=mn.UNISSUED,l.deferred=void 0,u.fetch(o)):I.when.reject(t)})})};var Xn=/^data:(.*?)(;base64)?,(.*)$/;function Hn(e,t){var n=decodeURIComponent(t);return e?atob(n):n}function Jn(e,t){for(var n=Hn(e,t),r=new ArrayBuffer(n.length),a=new Uint8Array(r),i=0;it.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;var u=t[a],l=t[i];if(u.equals(l)||r.equals(u))return tr(e,n,a,o,s),s;if(r.equals(l))return tr(e,n,i,o,s),s;var c,d,f=Qt.secondsDifference(r,u)/Qt.secondsDifference(l,u),h=a*o,p=i*o,m=n[h+e._ut1MinusUtcSecondsColumn],y=n[p+e._ut1MinusUtcSecondsColumn],v=y-m;return!(.5=this._totalSamples&&(o=this._totalSamples-1);for(var u=s/this._samplesPerXysFile|0,l=o/this._samplesPerXysFile|0,c=[],d=u;d<=l;++d)c.push(Cr(this,d));return I.when.all(c)},mr.prototype.computeXysRadians=function(e,t,n){var r=vr(this,e,t);if(!(r<0)){var a=r/this._stepSizeDays|0;if(!(a>=this._totalSamples)){var i=this._interpolationOrder,s=a-(i/2|0);s<0&&(s=0);var o=s+i;o>=this._totalSamples&&(s=(o=this._totalSamples-1)-i)<0&&(s=0);var u=!1,l=this._samples;if(I.defined(l[3*s])||(Cr(this,s/this._samplesPerXysFile|0),u=!0),I.defined(l[3*o])||(Cr(this,o/this._samplesPerXysFile|0),u=!0),!u){I.defined(n)?(n.x=0,n.y=0,n.s=0):n=new pr(0,0,0);for(var c,d=r-s*this._stepSizeDays,f=this._work,h=this._denominators,p=this._coef,m=this._xTable,y=0;y<=i;++y)f[y]=d-m[y];for(y=0;y<=i;++y){for(p[y]=1,c=0;c<=i;++c)c!==y&&(p[y]*=f[c]);p[y]*=h[y];var v=3*(s+y);n.x+=p[y]*l[v++],n.y+=p[y]*l[v++],n.s+=p[y]*l[v]}return n}}}};var wr={},gr={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},xr={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},Er={},Or={east:new P.Cartesian3,north:new P.Cartesian3,up:new P.Cartesian3,west:new P.Cartesian3,south:new P.Cartesian3,down:new P.Cartesian3},_r=new P.Cartesian3,Sr=new P.Cartesian3,br=new P.Cartesian3;wr.localFrameToFixedFrameGenerator=function(s,o){if(!gr.hasOwnProperty(s)||!gr[s].hasOwnProperty(o))throw new i.DeveloperError("firstAxis and secondAxis must be east, north, up, west, south or down.");var e,u=gr[s][o],t=s+o;return I.defined(Er[t])?e=Er[t]:(e=function(e,t,n){var r,a,i;return I.defined(n)||(n=new Q),P.Cartesian3.equalsEpsilon(e,P.Cartesian3.ZERO,X.CesiumMath.EPSILON14)?(P.Cartesian3.unpack(xr[s],0,_r),P.Cartesian3.unpack(xr[o],0,Sr),P.Cartesian3.unpack(xr[u],0,br)):X.CesiumMath.equalsEpsilon(e.x,0,X.CesiumMath.EPSILON14)&&X.CesiumMath.equalsEpsilon(e.y,0,X.CesiumMath.EPSILON14)?(r=X.CesiumMath.sign(e.z),P.Cartesian3.unpack(xr[s],0,_r),"east"!==s&&"west"!==s&&P.Cartesian3.multiplyByScalar(_r,r,_r),P.Cartesian3.unpack(xr[o],0,Sr),"east"!==o&&"west"!==o&&P.Cartesian3.multiplyByScalar(Sr,r,Sr),P.Cartesian3.unpack(xr[u],0,br),"east"!==u&&"west"!==u&&P.Cartesian3.multiplyByScalar(br,r,br)):((t=I.defaultValue(t,P.Ellipsoid.WGS84)).geodeticSurfaceNormal(e,Or.up),a=Or.up,(i=Or.east).x=-e.y,i.y=e.x,i.z=0,P.Cartesian3.normalize(i,Or.east),P.Cartesian3.cross(a,i,Or.north),P.Cartesian3.multiplyByScalar(Or.up,-1,Or.down),P.Cartesian3.multiplyByScalar(Or.east,-1,Or.west),P.Cartesian3.multiplyByScalar(Or.north,-1,Or.south),_r=Or[s],Sr=Or[o],br=Or[u]),n[0]=_r.x,n[1]=_r.y,n[2]=_r.z,n[3]=0,n[4]=Sr.x,n[5]=Sr.y,n[6]=Sr.z,n[7]=0,n[8]=br.x,n[9]=br.y,n[10]=br.z,n[11]=0,n[12]=e.x,n[13]=e.y,n[14]=e.z,n[15]=1,n},Er[t]=e),e},wr.eastNorthUpToFixedFrame=wr.localFrameToFixedFrameGenerator("east","north"),wr.northEastDownToFixedFrame=wr.localFrameToFixedFrameGenerator("north","east"),wr.northUpEastToFixedFrame=wr.localFrameToFixedFrameGenerator("north","up"),wr.northWestUpToFixedFrame=wr.localFrameToFixedFrameGenerator("north","west");var Mr=new Ge,Rr=new P.Cartesian3(1,1,1),Ar=new Q;wr.headingPitchRollToFixedFrame=function(e,t,n,r,a){r=I.defaultValue(r,wr.eastNorthUpToFixedFrame);var i=Ge.fromHeadingPitchRoll(t,Mr),s=Q.fromTranslationQuaternionRotationScale(P.Cartesian3.ZERO,i,Rr,Ar);return a=r(e,n,a),Q.multiply(a,s,a)};var Tr=new Q,qr=new J;wr.headingPitchRollQuaternion=function(e,t,n,r,a){var i=wr.headingPitchRollToFixedFrame(e,t,n,r,Tr),s=Q.getMatrix3(i,qr);return Ge.fromRotationMatrix(s,a)};var zr=new P.Cartesian3(1,1,1),Ir=new P.Cartesian3,Pr=new Q,Dr=new Q,Nr=new J,Ur=new Ge;wr.fixedFrameToHeadingPitchRoll=function(e,t,n,r){t=I.defaultValue(t,P.Ellipsoid.WGS84),n=I.defaultValue(n,wr.eastNorthUpToFixedFrame),I.defined(r)||(r=new ar);var a=Q.getTranslation(e,Ir);if(P.Cartesian3.equals(a,P.Cartesian3.ZERO))return r.heading=0,r.pitch=0,r.roll=0,r;var i=Q.inverseTransformation(n(a,t,Pr),Pr),s=Q.setScale(e,zr,Dr),s=Q.setTranslation(s,P.Cartesian3.ZERO,s),i=Q.multiply(i,s,i),o=Ge.fromRotationMatrix(Q.getMatrix3(i,Nr),Ur),o=Ge.normalize(o,o);return ar.fromQuaternion(o,r)};var Fr=X.CesiumMath.TWO_PI/86400,Vr=new Qt;wr.computeTemeToPseudoFixedMatrix=function(e,t){var n=(Vr=Qt.addSeconds(e,-Qt.computeTaiMinusUtc(e),Vr)).dayNumber,r=Vr.secondsOfDay,a=n-2451545,i=43200<=r?(.5+a)/zt.DAYS_PER_JULIAN_CENTURY:(a-.5)/zt.DAYS_PER_JULIAN_CENTURY,s=(24110.54841+i*(8640184.812866+i*(.093104+-62e-7*i)))*Fr%X.CesiumMath.TWO_PI+(72921158553e-15+11772758384668e-32*(n-2451545.5))*((r+.5*zt.SECONDS_PER_DAY)%zt.SECONDS_PER_DAY),o=Math.cos(s),u=Math.sin(s);return I.defined(t)?(t[0]=o,t[1]=-u,t[2]=0,t[3]=u,t[4]=o,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new J(o,u,0,-u,o,0,0,0,1)},wr.iau2006XysData=new mr,wr.earthOrientationParameters=Kn.NONE;var Lr=32.184;wr.preloadIcrfFixed=function(e){var t=e.start.dayNumber,n=e.start.secondsOfDay+Lr,r=e.stop.dayNumber,a=e.stop.secondsOfDay+Lr,i=wr.iau2006XysData.preload(t,n,r,a),s=wr.earthOrientationParameters.getPromiseToLoad();return I.when.all([i,s])},wr.computeIcrfToFixedMatrix=function(e,t){I.defined(t)||(t=new J);var n=wr.computeFixedToIcrfMatrix(e,t);if(I.defined(n))return J.transpose(n,t)};var Br=new pr(0,0,0),Wr=new Mt(0,0,0,0,0),jr=new J,kr=new J;wr.computeFixedToIcrfMatrix=function(e,t){I.defined(t)||(t=new J);var n=wr.earthOrientationParameters.compute(e,Wr);if(I.defined(n)){var r=e.dayNumber,a=e.secondsOfDay+Lr,i=wr.iau2006XysData.computeXysRadians(r,a,Br);if(I.defined(i)){var s=i.x+n.xPoleOffset,o=i.y+n.yPoleOffset,u=1/(1+Math.sqrt(1-s*s-o*o)),l=jr;l[0]=1-u*s*s,l[3]=-u*s*o,l[6]=s,l[1]=-u*s*o,l[4]=1-u*o*o,l[7]=o,l[2]=-s,l[5]=-o,l[8]=1-u*(s*s+o*o);var c=J.fromRotationZ(-i.s,kr),d=J.multiply(l,c,jr),f=e.dayNumber-2451545,h=(e.secondsOfDay-Qt.computeTaiMinusUtc(e)+n.ut1MinusUtc)/zt.SECONDS_PER_DAY,p=(p=.779057273264+h+.00273781191135448*(f+h))%1*X.CesiumMath.TWO_PI,m=J.fromRotationZ(p,kr),y=J.multiply(d,m,jr),v=Math.cos(n.xPoleWander),C=Math.cos(n.yPoleWander),w=Math.sin(n.xPoleWander),g=Math.sin(n.yPoleWander),x=r-2451545+a/zt.SECONDS_PER_DAY,E=-47e-6*(x/=36525)*X.CesiumMath.RADIANS_PER_DEGREE/3600,O=Math.cos(E),_=Math.sin(E),S=kr;return S[0]=v*O,S[1]=v*_,S[2]=w,S[3]=-C*_+g*w*O,S[4]=C*O+g*w*_,S[5]=-g*v,S[6]=-g*_-C*w*O,S[7]=g*O-C*w*_,S[8]=C*v,J.multiply(y,S,t)}}};var Yr=new G;wr.pointToWindowCoordinates=function(e,t,n,r){return(r=wr.pointToGLWindowCoordinates(e,t,n,r)).y=2*t[5]-r.y,r},wr.pointToGLWindowCoordinates=function(e,t,n,r){I.defined(r)||(r=new P.Cartesian2);var a=Yr;return Q.multiplyByVector(e,G.fromElements(n.x,n.y,n.z,1,a),a),G.multiplyByScalar(a,1/a.w,a),Q.multiplyByVector(t,a,a),P.Cartesian2.fromCartesian4(a,r)};var Zr=new P.Cartesian3,Xr=new P.Cartesian3,Hr=new P.Cartesian3;wr.rotationMatrixFromPositionVelocity=function(e,t,n,r){var a=I.defaultValue(n,P.Ellipsoid.WGS84).geodeticSurfaceNormal(e,Zr),i=P.Cartesian3.cross(t,a,Xr);P.Cartesian3.equalsEpsilon(i,P.Cartesian3.ZERO,X.CesiumMath.EPSILON6)&&(i=P.Cartesian3.clone(P.Cartesian3.UNIT_X,i));var s=P.Cartesian3.cross(i,t,Hr);return P.Cartesian3.normalize(s,s),P.Cartesian3.cross(t,s,i),P.Cartesian3.negate(i,i),P.Cartesian3.normalize(i,i),I.defined(r)||(r=new J),r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=i.x,r[4]=i.y,r[5]=i.z,r[6]=s.x,r[7]=s.y,r[8]=s.z,r};var Jr=new Q(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),Gr=new P.Cartographic,Qr=new P.Cartesian3,Kr=new P.Cartesian3,$r=new J,ea=new Q,ta=new Q;wr.basisTo2D=function(e,t,n){var r=Q.getTranslation(t,Kr),a=e.ellipsoid,i=a.cartesianToCartographic(r,Gr),s=e.project(i,Qr);P.Cartesian3.fromElements(s.z,s.x,s.y,s);var o=wr.eastNorthUpToFixedFrame(r,a,ea),u=Q.inverseTransformation(o,ta),l=Q.getMatrix3(t,$r),c=Q.multiplyByMatrix3(u,l,n);return Q.multiply(Jr,c,n),Q.setTranslation(n,s,n),n},wr.wgs84To2DModelMatrix=function(e,t,n){var r=e.ellipsoid,a=wr.eastNorthUpToFixedFrame(t,r,ea),i=Q.inverseTransformation(a,ta),s=r.cartesianToCartographic(t,Gr),o=e.project(s,Qr);P.Cartesian3.fromElements(o.z,o.x,o.y,o);var u=Q.fromTranslation(o,ea);return Q.multiply(Jr,i,n),Q.multiply(u,n,n),n},e.BoundingSphere=D,e.Cartesian4=G,e.FeatureDetection=Je,e.GeographicProjection=t,e.Intersect=s,e.Interval=o,e.Matrix3=J,e.Matrix4=Q,e.Quaternion=Ge,e.Resource=Yn,e.Transforms=wr,e.buildModuleUrl=hr}); diff --git a/cate/webapi/app/cesium/Workers/VertexFormat-7572c785.js b/cate/webapi/app/cesium/Workers/VertexFormat-7572c785.js new file mode 100644 index 000000000..1d20521d7 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/VertexFormat-7572c785.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Check-6c0211bc"],function(e,o,t){"use strict";function i(e){e=o.defaultValue(e,o.defaultValue.EMPTY_OBJECT),this.position=o.defaultValue(e.position,!1),this.normal=o.defaultValue(e.normal,!1),this.st=o.defaultValue(e.st,!1),this.bitangent=o.defaultValue(e.bitangent,!1),this.tangent=o.defaultValue(e.tangent,!1),this.color=o.defaultValue(e.color,!1)}i.POSITION_ONLY=Object.freeze(new i({position:!0})),i.POSITION_AND_NORMAL=Object.freeze(new i({position:!0,normal:!0})),i.POSITION_NORMAL_AND_ST=Object.freeze(new i({position:!0,normal:!0,st:!0})),i.POSITION_AND_ST=Object.freeze(new i({position:!0,st:!0})),i.POSITION_AND_COLOR=Object.freeze(new i({position:!0,color:!0})),i.ALL=Object.freeze(new i({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0})),i.DEFAULT=i.POSITION_NORMAL_AND_ST,i.packedLength=6,i.pack=function(e,t,n){return n=o.defaultValue(n,0),t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t},i.unpack=function(e,t,n){return t=o.defaultValue(t,0),o.defined(n)||(n=new i),n.position=1===e[t++],n.normal=1===e[t++],n.st=1===e[t++],n.tangent=1===e[t++],n.bitangent=1===e[t++],n.color=1===e[t],n},i.clone=function(e,t){if(o.defined(e))return o.defined(t)||(t=new i),t.position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t},e.VertexFormat=i}); diff --git a/cate/webapi/app/cesium/Workers/WallGeometryLibrary-09410f9b.js b/cate/webapi/app/cesium/Workers/WallGeometryLibrary-09410f9b.js new file mode 100644 index 000000000..3e9a96a4d --- /dev/null +++ b/cate/webapi/app/cesium/Workers/WallGeometryLibrary-09410f9b.js @@ -0,0 +1 @@ +define(["exports","./when-54c2dc71","./Math-fc8cecf5","./Cartesian2-bddc1162","./arrayRemoveDuplicates-ebc732b0","./PolylinePipeline-fba5024c"],function(e,P,A,C,w,b){"use strict";var i={};var M=new C.Cartographic,E=new C.Cartographic;function F(e,i,t,r){var a=(i=w.arrayRemoveDuplicates(i,C.Cartesian3.equalsEpsilon,!0)).length;if(!(a<2)){var n=P.defined(r),o=P.defined(t),h=!0,l=new Array(a),s=new Array(a),g=new Array(a),c=i[0];l[0]=c;var p=e.cartesianToCartographic(c,M);o&&(p.height=t[0]),h=h&&p.height<=0,s[0]=p.height,g[0]=n?r[0]:0;for(var u,d,v=1,y=1;yqe?(q=Ue(a,P,ne,Y,da),X=Ue(a,k,G,F,ha)):1===$?(X=Ue(a,k,G,F,ha),q.x=0,q.y=He.CesiumMath.sign(P.longitude-Math.abs(k.longitude)),q.z=0):(q=Ue(a,P,ne,Y,da),X.x=0,X.y=He.CesiumMath.sign(P.longitude-k.longitude),X.z=0));var re=Be.Cartesian3.distance(te,j),ie=Ye.EncodedCartesian3.fromCartesian(ae,Ma),se=Be.Cartesian3.subtract(B,ae,ga),oe=Be.Cartesian3.normalize(se,wa),le=Be.Cartesian3.subtract(te,ae,fa);le=Be.Cartesian3.normalize(le,le);var ue=Be.Cartesian3.cross(oe,le,wa);ue=Be.Cartesian3.normalize(ue,ue);var ce=Be.Cartesian3.cross(le,ne,va);ce=Be.Cartesian3.normalize(ce,ce);var Ce=Be.Cartesian3.subtract(j,B,ma);Ce=Be.Cartesian3.normalize(Ce,Ce);var pe=Be.Cartesian3.cross(G,Ce,ya);pe=Be.Cartesian3.normalize(pe,pe);var de,he=re/x,ge=J/x,fe=0,me=0,we=0;for(s&&(fe=Be.Cartesian3.distance(Y,F),W=Ye.EncodedCartesian3.fromCartesian(Y,Ta),U=Be.Cartesian3.subtract(F,Y,Ea),de=(Z=Be.Cartesian3.normalize(U,_a)).x,Z.x=Z.y,Z.y=-de,me=fe/b,we=Q/b),I=0;I<8;I++){var ve=z+4*I,ye=R+2*I,Me=ve+3,Te=I<4?1:-1,Ee=2===I||3===I||6===I||7===I?1:-1;Be.Cartesian3.pack(ie.high,y,ve),y[Me]=se.x,Be.Cartesian3.pack(ie.low,M,ve),M[Me]=se.y,Be.Cartesian3.pack(ce,T,ve),T[Me]=se.z,Be.Cartesian3.pack(pe,E,ve),E[Me]=he*Te,Be.Cartesian3.pack(ue,_,ve);var _e=ge*Ee;0===_e&&Ee<0&&(_e=9),_[Me]=_e,s&&(u[ve]=W.high.x,u[ve+1]=W.high.y,u[ve+2]=W.low.x,u[ve+3]=W.low.y,C[ve]=-q.y,C[ve+1]=q.x,C[ve+2]=X.y,C[ve+3]=-X.x,c[ve]=U.x,c[ve+1]=U.y,c[ve+2]=Z.x,c[ve+3]=Z.y,p[ye]=me*Te,0===(_e=we*Ee)&&Ee<0&&(_e=9),p[ye+1]=_e)}var Oe=ua,be=ca,Pe=oa,ke=la,Ae=Be.Rectangle.fromCartographicArray(ia,sa),Le=Fe.getMinimumMaximumHeights(Ae,d),Se=Le.minimumTerrainHeight,Ie=Le.maximumTerrainHeight;K+=Se,K+=Ie,Ze(ae,te,Se,Ie,Oe,Pe),Ze(B,j,Se,Ie,be,ke);var xe=Be.Cartesian3.multiplyByScalar(ue,He.CesiumMath.EPSILON5,Oa);Be.Cartesian3.add(Oe,xe,Oe),Be.Cartesian3.add(be,xe,be),Be.Cartesian3.add(Pe,xe,Pe),Be.Cartesian3.add(ke,xe,ke),Je(Oe,be),Je(Pe,ke),Be.Cartesian3.pack(Oe,v,D),Be.Cartesian3.pack(be,v,D+3),Be.Cartesian3.pack(ke,v,D+6),Be.Cartesian3.pack(Pe,v,D+9),xe=Be.Cartesian3.multiplyByScalar(ue,-2*He.CesiumMath.EPSILON5,Oa),Be.Cartesian3.add(Oe,xe,Oe),Be.Cartesian3.add(be,xe,be),Be.Cartesian3.add(Pe,xe,Pe),Be.Cartesian3.add(ke,xe,ke),Je(Oe,be),Je(Pe,ke),Be.Cartesian3.pack(Oe,v,D+12),Be.Cartesian3.pack(be,v,D+15),Be.Cartesian3.pack(ke,v,D+18),Be.Cartesian3.pack(Pe,v,D+21),N+=2,l+=3,R+=16,D+=24,z+=32,J+=re,Q+=fe}var Ne=l=0;for(o=0;oHe.CesiumMath.PI_OVER_TWO&&(o=!0,s=Be.Cartesian3.subtract(i,t,H),u=l.cartesianToCartographic(s,D)),u.height=0;var c=e.project(u,r);return(r=Be.Cartesian3.subtract(c,n,r)).z=0,r=Be.Cartesian3.normalize(r,r),o&&Be.Cartesian3.negate(r,r),r}var B=new Be.Cartesian3,le=new Be.Cartesian3;function Ze(e,a,t,n,r,i){var s=Be.Cartesian3.subtract(a,e,B);Be.Cartesian3.normalize(s,s);var o=t-X,l=Be.Cartesian3.multiplyByScalar(s,o,le);Be.Cartesian3.add(e,l,r);var u=n-W,l=Be.Cartesian3.multiplyByScalar(s,u,le);Be.Cartesian3.add(a,l,i)}var ue=new Be.Cartesian3;function Je(e,a){var t=i.Plane.getPointDistance(K,e),n=i.Plane.getPointDistance(K,a),r=ue;He.CesiumMath.equalsEpsilon(t,0,He.CesiumMath.EPSILON2)?(r=Xe(a,e,r),Be.Cartesian3.multiplyByScalar(r,He.CesiumMath.EPSILON2,r),Be.Cartesian3.add(e,r,e)):He.CesiumMath.equalsEpsilon(n,0,He.CesiumMath.EPSILON2)&&(r=Xe(e,a,r),Be.Cartesian3.multiplyByScalar(r,He.CesiumMath.EPSILON2,r),Be.Cartesian3.add(a,r,a))}var Qe=new Be.Cartographic,Ke=new Be.Cartographic,$e=new Be.Cartesian3,ea=new Be.Cartesian3,aa=new Be.Cartesian3,ta=new Be.Cartesian3,na=new Be.Cartesian3,ra=new Be.Cartesian3,ia=[Qe,Ke],sa=new Be.Rectangle,oa=new Be.Cartesian3,la=new Be.Cartesian3,ua=new Be.Cartesian3,ca=new Be.Cartesian3,Ca=new Be.Cartesian3,pa=new Be.Cartesian3,da=new Be.Cartesian3,ha=new Be.Cartesian3,ga=new Be.Cartesian3,fa=new Be.Cartesian3,ma=new Be.Cartesian3,wa=new Be.Cartesian3,va=new Be.Cartesian3,ya=new Be.Cartesian3,Ma=new Ye.EncodedCartesian3,Ta=new Ye.EncodedCartesian3,Ea=new Be.Cartesian3,_a=new Be.Cartesian3,Oa=new Be.Cartesian3,ba=[new je.BoundingSphere,new je.BoundingSphere],Pa=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],ka=Pa.length;function Aa(e){return new Ve.GeometryAttribute({componentDatatype:Ge.ComponentDatatype.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}return v._projectNormal=Ue,function(e,a){return Fe.initialize().then(function(){return j.defined(a)&&(e=v.unpack(e,a)),v.createGeometry(e)})}}); diff --git a/cate/webapi/app/cesium/Workers/createPlaneGeometry.js b/cate/webapi/app/cesium/Workers/createPlaneGeometry.js new file mode 100644 index 000000000..340d48ab0 --- /dev/null +++ b/cate/webapi/app/cesium/Workers/createPlaneGeometry.js @@ -0,0 +1 @@ +define(["./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./RuntimeError-2109023a","./WebGLConstants-76bb35d1","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40","./VertexFormat-7572c785"],function(a,e,t,c,p,r,n,y,s,A,o){"use strict";function m(e){e=a.defaultValue(e,a.defaultValue.EMPTY_OBJECT);var t=a.defaultValue(e.vertexFormat,o.VertexFormat.DEFAULT);this._vertexFormat=t,this._workerName="createPlaneGeometry"}m.packedLength=o.VertexFormat.packedLength,m.pack=function(e,t,r){return r=a.defaultValue(r,0),o.VertexFormat.pack(e._vertexFormat,t,r),t};var i=new o.VertexFormat,u={vertexFormat:i};m.unpack=function(e,t,r){t=a.defaultValue(t,0);var n=o.VertexFormat.unpack(e,t,i);return a.defined(r)?(r._vertexFormat=o.VertexFormat.clone(n,r._vertexFormat),r):new m(u)};var l=new c.Cartesian3(-.5,-.5,0),F=new c.Cartesian3(.5,.5,0);return m.createGeometry=function(e){var t,r,n,a,o,m,i=e._vertexFormat,u=new A.GeometryAttributes;return i.position&&((m=new Float64Array(12))[0]=l.x,m[1]=l.y,m[2]=0,m[3]=F.x,m[4]=l.y,m[5]=0,m[6]=F.x,m[7]=F.y,m[8]=0,m[9]=l.x,m[10]=F.y,m[11]=0,u.position=new s.GeometryAttribute({componentDatatype:y.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:m}),i.normal&&((r=new Float32Array(12))[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,u.normal=new s.GeometryAttribute({componentDatatype:y.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:r})),i.st&&((n=new Float32Array(8))[0]=0,n[1]=0,n[2]=1,n[3]=0,n[4]=1,n[5]=1,n[6]=0,n[7]=1,u.st=new s.GeometryAttribute({componentDatatype:y.ComponentDatatype.FLOAT,componentsPerAttribute:2,values:n})),i.tangent&&((a=new Float32Array(12))[0]=1,a[1]=0,a[2]=0,a[3]=1,a[4]=0,a[5]=0,a[6]=1,a[7]=0,a[8]=0,a[9]=1,a[10]=0,a[11]=0,u.tangent=new s.GeometryAttribute({componentDatatype:y.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:a})),i.bitangent&&((o=new Float32Array(12))[0]=0,o[1]=1,o[2]=0,o[3]=0,o[4]=1,o[5]=0,o[6]=0,o[7]=1,o[8]=0,o[9]=0,o[10]=1,o[11]=0,u.bitangent=new s.GeometryAttribute({componentDatatype:y.ComponentDatatype.FLOAT,componentsPerAttribute:3,values:o})),(t=new Uint16Array(6))[0]=0,t[1]=1,t[2]=2,t[3]=0,t[4]=2,t[5]=3),new s.Geometry({attributes:u,indices:t,primitiveType:s.PrimitiveType.TRIANGLES,boundingSphere:new p.BoundingSphere(c.Cartesian3.ZERO,Math.sqrt(2))})},function(e,t){return a.defined(t)&&(e=m.unpack(e,t)),m.createGeometry(e)}}); diff --git a/cate/webapi/app/cesium/Workers/createPlaneOutlineGeometry.js b/cate/webapi/app/cesium/Workers/createPlaneOutlineGeometry.js new file mode 100644 index 000000000..81e23c7af --- /dev/null +++ b/cate/webapi/app/cesium/Workers/createPlaneOutlineGeometry.js @@ -0,0 +1 @@ +define(["./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./RuntimeError-2109023a","./WebGLConstants-76bb35d1","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40"],function(r,e,t,a,i,n,o,c,u,s){"use strict";function y(){this._workerName="createPlaneOutlineGeometry"}y.packedLength=0,y.pack=function(e,t){return t},y.unpack=function(e,t,n){return r.defined(n)?n:new y};var f=new a.Cartesian3(-.5,-.5,0),m=new a.Cartesian3(.5,.5,0);return y.createGeometry=function(){var e=new s.GeometryAttributes,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=f.x,n[1]=f.y,n[2]=f.z,n[3]=m.x,n[4]=f.y,n[5]=f.z,n[6]=m.x,n[7]=m.y,n[8]=f.z,n[9]=f.x,n[10]=m.y,n[11]=f.z,e.position=new u.GeometryAttribute({componentDatatype:c.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new u.Geometry({attributes:e,indices:t,primitiveType:u.PrimitiveType.LINES,boundingSphere:new i.BoundingSphere(a.Cartesian3.ZERO,Math.sqrt(2))})},function(e,t){return r.defined(t)&&(e=y.unpack(e,t)),y.createGeometry(e)}}); diff --git a/cate/webapi/app/cesium/Workers/createPolygonGeometry.js b/cate/webapi/app/cesium/Workers/createPolygonGeometry.js new file mode 100644 index 000000000..863563abb --- /dev/null +++ b/cate/webapi/app/cesium/Workers/createPolygonGeometry.js @@ -0,0 +1 @@ +define(["./when-54c2dc71","./Check-6c0211bc","./Math-fc8cecf5","./Cartesian2-bddc1162","./Transforms-ec27f304","./RuntimeError-2109023a","./WebGLConstants-76bb35d1","./ComponentDatatype-6d99a1ee","./GeometryAttribute-44fb48f1","./GeometryAttributes-4fcfcf40","./AttributeCompression-9fc99391","./GeometryPipeline-b49b2e59","./EncodedCartesian3-e9c71cf0","./IndexDatatype-53503fee","./IntersectionTests-2626c9e9","./Plane-231f1723","./GeometryOffsetAttribute-7350d9af","./VertexFormat-7572c785","./GeometryInstance-11f9a3bd","./arrayRemoveDuplicates-ebc732b0","./BoundingRectangle-8de79d83","./EllipsoidTangentPlane-ed172748","./ArcType-dc1c5aee","./EllipsoidRhumbLine-c704bf4c","./PolygonPipeline-ff364b47","./PolygonGeometryLibrary-29b9a52e","./EllipsoidGeodesic-30fae80b"],function(Y,e,U,j,Q,t,r,q,K,o,a,D,i,L,n,s,Z,b,N,l,u,H,p,c,R,M,y){"use strict";var J=new j.Cartographic,X=new j.Cartographic;var S=new u.BoundingRectangle,$=new j.Cartesian3,ee=new j.Cartesian3,te=new j.Cartesian3,re=new j.Cartesian3,oe=new j.Cartesian3,ae=new j.Cartesian3,ie=new j.Cartesian3,ne=new j.Cartesian3,se=new j.Cartesian3,le=new j.Cartesian2,ue=new j.Cartesian2,ce=new j.Cartesian3,pe=new Q.Quaternion,ye=new Q.Matrix3,me=new Q.Matrix3;function B(e){var t,r,o,a=e.vertexFormat,i=e.geometry,n=e.shadowVolume,s=i.attributes.position.values,l=s.length,u=e.wall,c=e.top||u,p=e.bottom||u;if(a.st||a.normal||a.tangent||a.bitangent||n){var y=e.boundingRectangle,m=e.tangentPlane,g=e.ellipsoid,d=e.stRotation,h=e.perPositionHeight,f=le;f.x=y.x,f.y=y.y;var b,v=a.st?new Float32Array(l/3*2):void 0;a.normal&&(b=h&&c&&!u?i.attributes.normal.values:new Float32Array(l));var _,P=a.tangent?new Float32Array(l):void 0,C=a.bitangent?new Float32Array(l):void 0,w=n?new Float32Array(l):void 0,x=0,T=0,I=ee,A=te,E=re,G=!0,O=ye,V=me;V=0!==d?(_=Q.Quaternion.fromAxisAngle(m._plane.normal,d,pe),O=Q.Matrix3.fromQuaternion(_,O),_=Q.Quaternion.fromAxisAngle(m._plane.normal,-d,pe),Q.Matrix3.fromQuaternion(_,V)):(O=Q.Matrix3.clone(Q.Matrix3.IDENTITY,O),Q.Matrix3.clone(Q.Matrix3.IDENTITY,V));var F=0,D=0;c&&p&&(F=l/2,D=l/3,l/=2);for(var L=0;Ld.eastOverIDL-d.westOverIDL&&(a.west=d.westOverIDL,a.east=d.eastOverIDL,a.east>U.CesiumMath.PI&&(a.east=a.east-U.CesiumMath.TWO_PI),a.west>U.CesiumMath.PI&&(a.west=a.west-U.CesiumMath.TWO_PI)),a}var v=new j.Cartographic;function _(e,t,r,o){for(var a=e.surfaceDistance,i=Math.ceil(a*t),n=0>3],T<<=7&M),g=0;g>3]),128&T?(l&&(l[M]=1),m=(n=A.encoding<2?b[U++]:v)>=6,2===(y.offsetType=v))y.offset=n.getInt8(1),x++;else if(1===v)y.offset=n.getInt16(1,!0),x+=2;else{if(0!==v)throw"Invalid block offset type";y.offset=n.getFloat32(1,!0),x+=4}if(1===y.encoding)if(v=n.getUint8(x),x++,y.bitsPerPixel=63&v,v>>=6,2===(y.numValidPixelsType=v))y.numValidPixels=n.getUint8(x),x++;else if(1===v)y.numValidPixels=n.getUint16(x,!0),x+=2;else{if(0!==v)throw"Invalid valid pixel count type";y.numValidPixels=n.getUint32(x,!0),x+=4}}if(t+=x,3!==y.encoding)if(0===y.encoding){var T=(i.pixels.numBytes-1)/4;if(T!==Math.floor(T))throw"uncompressed block has invalid length";U=new ArrayBuffer(4*T),new Uint8Array(U).set(new Uint8Array(e,t,4*T));var M=new Float32Array(U);y.rawData=M,t+=4*T}else{1===y.encoding&&(I=Math.ceil(y.numValidPixels*y.bitsPerPixel/8),b=Math.ceil(I/4),U=new ArrayBuffer(4*b),new Uint8Array(U).set(new Uint8Array(e,t,I)),y.stuffedData=new Uint32Array(U),t+=I)}}else t++}return i.eofOffset=t,i},B=function(e,t,a,i,r,n,s){var l,o,f,u,c=(1<>>h-t&c,h-=t):(f=(u&c)<<(o=t-h)&c,f+=(u=e[d++])>>>(h=32-o)),n[l]=f>>g-a&h,g-=a):(f=(u&h)<<(c=a-g)&h,f+=(u=e[m++])>>>(g=32-c)),t[o]=r[f];else for(d=Math.ceil((l-n)/s),o=0;o>>g-a&h,g-=a):(f=(u&h)<<(c=a-g)&h,f+=(u=e[m++])>>>(g=32-c)),t[o]=f>>c-t&o,c-=t):(d=(l&o)<<(s=t-c)&o,d+=(l=e[f++])>>>(c=32-s)),h[u]=d>>m&c,h-=a,m+=a):(o=f>>>m&c,h=32-(u=a-h),o|=((f=e[d++])&(1<>>m&c,h-=a,m+=a):(o=f>>>m&c,h=32-(u=a-h),o|=((f=e[d++])&(1<>>h&o,c-=t,h+=t):(d=l>>>h&o,c=32-(s=t-c),d|=((l=e[f++])&(1<>>u-a&o,u-=a):(n=(s&o)<<(l=a-u)&o,n+=(s=e[f++])>>>(u=32-l)),t[r]=n;return t},E=function(e,t,a,i){for(var r,n,s,l=(1<>>u&l,f-=a,u+=a):(r=n>>>u&l,f=32-(s=a-f),r|=((n=e[o++])&(1<>>16),a=(65535&a)+(a>>>16)}return 1&i&&(a+=t+=e[n]<<8),((a=(65535&a)+(a>>>16))<<16|(t=(65535&t)+(t>>>16)))>>>0},readHeaderInfo:function(e,t){var a=t.ptr,i=new Uint8Array(e,a,6),r={};if(r.fileIdentifierString=String.fromCharCode.apply(null,i),0!==r.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+r.fileIdentifierString;a+=6;var n,s=new DataView(e,a,8),l=s.getInt32(0,!0);if(a+=4,3<=(r.fileVersion=l)&&(r.checksum=s.getUint32(4,!0),a+=4),s=new DataView(e,a,12),r.height=s.getUint32(0,!0),r.width=s.getUint32(4,!0),a+=8,4<=l?(r.numDims=s.getUint32(8,!0),a+=4):r.numDims=1,s=new DataView(e,a,40),r.numValidPixel=s.getUint32(0,!0),r.microBlockSize=s.getInt32(4,!0),r.blobSize=s.getInt32(8,!0),r.imageType=s.getInt32(12,!0),r.maxZError=s.getFloat64(16,!0),r.zMin=s.getFloat64(24,!0),r.zMax=s.getFloat64(32,!0),a+=40,t.headerInfo=r,t.ptr=a,3<=l&&(n=4<=l?52:48,this.computeChecksumFletcher32(new Uint8Array(e,a-n,r.blobSize-14))!==r.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(e,t){var a=t.headerInfo,i=this.getDataTypeArray(a.imageType),r=a.numDims*this.getDataTypeSize(a.imageType),n=this.readSubArray(e,t.ptr,i,r),s=this.readSubArray(e,t.ptr+r,i,r);t.ptr+=2*r;for(var l=!0,o=0;o>3],m<<=7&g):m=a[g>>3],128&m&&(i[g]=1);t.pixels.resultMask=i,f.bitset=a,r+=f.numBytes}return t.ptr=r,t.mask=f,!0},readDataOneSweep:function(e,t,a){var i,r=t.ptr,n=t.headerInfo,s=n.numDims,l=n.width*n.height,o=n.imageType,f=n.numValidPixel*R.getDataTypeSize(o)*s,u=t.pixels.resultMask,c=a===Uint8Array?new Uint8Array(e,r,f):(i=new ArrayBuffer(f),new Uint8Array(i).set(new Uint8Array(e,r,f)),new a(i));if(c.length===l*s)t.pixels.resultPixels=c;else{t.pixels.resultPixels=new a(l*s);var d,h=0,m=0,g=0;if(1>>32-u,u<=32-w?32===(w+=u)&&(w=0,k=p[++x]):(w+=u-32,k=p[++x],c[o].second|=k>>>32-w));var y=0,I=0,b=new C;for(d=0;d>>M&1?(V.right||(V.right=new C),V.right):(V.left||(V.left=new C),V.left),0!==M||V.val||(V.val=U[1]);return{decodeLut:A,numBitsLUTQick:I,numBitsLUT:y,tree:b,stuffedData:p,srcPtr:x,bitPos:w}},readHuffman:function(e,t,a){var i,r,n,s,l,o,f,u,c,d=t.headerInfo,h=d.numDims,m=t.headerInfo.height,g=t.headerInfo.width,p=g*m,w=this.readHuffmanTree(e,t),x=w.decodeLut,k=w.tree,y=w.stuffedData,I=w.srcPtr,b=w.bitPos,U=w.numBitsLUTQick,v=w.numBitsLUT,T=0===t.headerInfo.imageType?128:0,M=t.pixels.resultMask,V=0;0>>32-U,32-b>>64-b-U),x[l])r=x[l][1],b+=x[l][0];else for(l=s=A<>>32-v,32-b>>64-b-v),i=k,c=0;c>>v-c-1&1?i.right:i.left).left&&!i.right){r=i.val,b=b+c+1;break}32<=b&&(b-=32,A=y[++I]),n=r-T,B?(n+=!(0>>32-U,32-b>>64-b-U),x[l])r=x[l][1],b+=x[l][0];else for(l=s=A<>>32-v,32-b>>64-b-v),i=k,c=0;c>>v-c-1&1?i.right:i.left).left&&!i.right){r=i.val,b=b+c+1;break}32<=b&&(b-=32,A=y[++I]),n=r-T,B?(!(0>6,d=0==c?4:3-c,h=0<(32&u),m=31&u,g=0;if(1==d)g=f.getUint8(l),l++;else if(2==d)g=f.getUint16(l,!0),l+=2;else{if(4!=d)throw"Invalid valid pixel count type";g=f.getUint32(l,!0),l+=4}var p,w,x,k,y,I,b,U,v,T=2*n.maxZError,M=1>>v;)v++;k=Math.ceil(g*v/8),y=Math.ceil(k/4),w=new ArrayBuffer(4*y),(x=new Uint8Array(w)).set(new Uint8Array(e,t.ptr,k)),p=new Uint32Array(w),t.ptr+=k,I=(3<=s?S:A)(b,m,U-1,i,T,M),(3<=s?D:V)(p,a,v,g,I)}else t.counter.bitstuffer++,v=m,t.ptr+=l,0>6&255,(m>>2&15)!=(B*s>>3&15))throw"integrity issue";if(3<(b=3&m))throw t.ptr+=E,"Invalid block encoding ("+b+")";if(2!=b)if(0==b){if(t.counter.uncompressed++,t.ptr+=E,S=(S=c*d*o)<(w=e.byteLength-t.ptr)?S:w,y=new ArrayBuffer(S%o==0?S:S+o-S%o),new Uint8Array(y).set(new Uint8Array(e,t.ptr,S)),I=new a(y),P=0,N)for(M=0;M>>6:(i<65536?t[a++]=224|i>>>12:(t[a++]=240|i>>>18,t[a++]=128|i>>>12&63),t[a++]=128|i>>>6&63),t[a++]=128|63&i);return t},i.buf2binstring=function(e){return u(e,e.length)},i.binstring2buf=function(e){for(var t=new f.Buf8(e.length),i=0,n=t.length;i>10&1023,s[n++]=56320|1023&r)}return u(s,n)},i.utf8border=function(e,t){var i;for((t=t||e.length)>e.length&&(t=e.length),i=t-1;0<=i&&128==(192&e[i]);)i--;return!(i<0)&&0!==i&&i+l[e[i]]>t?i:t}},{"./common":1}],3:[function(e,t,i){t.exports=function(e,t,i,n){var r=65535&e|0,a=e>>>16&65535|0,o=0;for(;0!==i;){for(i-=o=2e3>>1:e>>>1;t[i]=e}return t}();t.exports=function(e,t,i,n){var r=s,a=n+i;e^=-1;for(var o=n;o>>8^r[255&(e^t[o])];return-1^e}},{}],6:[function(e,t,i){t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],7:[function(e,t,i){t.exports=function(e,t){var i,n,r,a,o,s,f,l,u,d,h,c,b,m,w,g,v,k,_,p,y,x,E,S,T;i=e.state,n=e.next_in,S=e.input,r=n+(e.avail_in-5),a=e.next_out,T=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),f=i.dmax,l=i.wsize,u=i.whave,d=i.wnext,h=i.window,c=i.hold,b=i.bits,m=i.lencode,w=i.distcode,g=(1<>>=_=k>>>24,b-=_,0===(_=k>>>16&255))T[a++]=65535&k;else{if(!(16&_)){if(0==(64&_)){k=m[(65535&k)+(c&(1<<_)-1)];continue t}if(32&_){i.mode=12;break e}e.msg="invalid literal/length code",i.mode=30;break e}p=65535&k,(_&=15)&&(b<_&&(c+=S[n++]<>>=_,b-=_),b<15&&(c+=S[n++]<>>=_=k>>>24,b-=_,!(16&(_=k>>>16&255))){if(0==(64&_)){k=w[(65535&k)+(c&(1<<_)-1)];continue i}e.msg="invalid distance code",i.mode=30;break e}if(y=65535&k,b<(_&=15)&&(c+=S[n++]<>>=_,b-=_,(_=a-o)>3,c&=(1<<(b-=p<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function a(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new B.Buf16(320),this.work=new B.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=F,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new B.Buf32(n),t.distcode=t.distdyn=new B.Buf32(r),t.sane=1,t.back=-1,z):C}function s(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,o(e)):C}function f(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=a.wsize?(B.arraySet(a.window,t,i-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(r=a.wsize-a.wnext,n>>8&255,i.check=Z(i.check,R,2,0),u=l=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=30;break}if(8!=(15&l)){e.msg="unknown compression method",i.mode=30;break}if(u-=4,y=8+(15&(l>>>=4)),0===i.wbits)i.wbits=y;else if(y>i.wbits){e.msg="invalid window size",i.mode=30;break}i.dmax=1<>8&1),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0)),u=l=0,i.mode=3;case 3:for(;u<32;){if(0===s)break e;s--,l+=n[a++]<>>8&255,R[2]=l>>>16&255,R[3]=l>>>24&255,i.check=Z(i.check,R,4,0)),u=l=0,i.mode=4;case 4:for(;u<16;){if(0===s)break e;s--,l+=n[a++]<>8),512&i.flags&&(R[0]=255&l,R[1]=l>>>8&255,i.check=Z(i.check,R,2,0)),u=l=0,i.mode=5;case 5:if(1024&i.flags){for(;u<16;){if(0===s)break e;s--,l+=n[a++]<>>8&255,i.check=Z(i.check,R,2,0)),u=l=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(c=i.length,s>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=12;break;case 10:for(;u<32;){if(0===s)break e;s--,l+=n[a++]<>>=7&u,u-=7&u,i.mode=27;break}for(;u<3;){if(0===s)break e;s--,l+=n[a++]<>>=1)){case 0:i.mode=14;break;case 1:if(H(i),i.mode=20,6!==t)break;l>>>=2,u-=2;break e;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=30}l>>>=2,u-=2;break;case 14:for(l>>>=7&u,u-=7&u;u<32;){if(0===s)break e;s--,l+=n[a++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=30;break}if(i.length=65535&l,u=l=0,i.mode=15,6===t)break e;case 15:i.mode=16;case 16:if(c=i.length){if(s>>=5,u-=5,i.ndist=1+(31&l),l>>>=5,u-=5,i.ncode=4+(15&l),l>>>=4,u-=4,286>>=3,u-=3}for(;i.have<19;)i.lens[A[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,E={bits:i.lenbits},x=D(0,i.lens,0,19,i.lencode,0,i.work,E),i.lenbits=E.bits,x){e.msg="invalid code lengths set",i.mode=30;break}i.have=0,i.mode=19;case 19:for(;i.have>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<>>=w,u-=w,i.lens[i.have++]=v;else{if(16===v){for(S=w+2;u>>=w,u-=w,0===i.have){e.msg="invalid bit length repeat",i.mode=30;break}y=i.lens[i.have-1],c=3+(3&l),l>>>=2,u-=2}else if(17===v){for(S=w+3;u>>=w)),l>>>=3,u-=3}else{for(S=w+7;u>>=w)),l>>>=7,u-=7}if(i.have+c>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=30;break}for(;c--;)i.lens[i.have++]=y}}if(30===i.mode)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=30;break}if(i.lenbits=9,E={bits:i.lenbits},x=D(N,i.lens,0,i.nlen,i.lencode,0,i.work,E),i.lenbits=E.bits,x){e.msg="invalid literal/lengths set",i.mode=30;break}if(i.distbits=6,i.distcode=i.distdyn,E={bits:i.distbits},x=D(O,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,E),i.distbits=E.bits,x){e.msg="invalid distances set",i.mode=30;break}if(i.mode=20,6===t)break e;case 20:i.mode=21;case 21:if(6<=s&&258<=f){e.next_out=o,e.avail_out=f,e.next_in=a,e.avail_in=s,i.hold=l,i.bits=u,I(e,h),o=e.next_out,r=e.output,f=e.avail_out,a=e.next_in,n=e.input,s=e.avail_in,l=i.hold,u=i.bits,12===i.mode&&(i.back=-1);break}for(i.back=0;T=i.lencode[l&(1<>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<>k)],g=T>>>16&255,v=65535&T,!(k+(w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<>>=k,u-=k,i.back+=k}if(l>>>=w,u-=w,i.back+=w,i.length=v,0===g){i.mode=26;break}if(32&g){i.back=-1,i.mode=12;break}if(64&g){e.msg="invalid literal/length code",i.mode=30;break}i.extra=15&g,i.mode=22;case 22:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;T=i.distcode[l&(1<>>16&255,v=65535&T,!((w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<>k)],g=T>>>16&255,v=65535&T,!(k+(w=T>>>24)<=u);){if(0===s)break e;s--,l+=n[a++]<>>=k,u-=k,i.back+=k}if(l>>>=w,u-=w,i.back+=w,64&g){e.msg="invalid distance code",i.mode=30;break}i.offset=v,i.extra=15&g,i.mode=24;case 24:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=30;break}i.mode=25;case 25:if(0===f)break e;if(c=h-f,i.offset>c){if((c=i.offset-c)>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=30;break}b=c>i.wnext?(c-=i.wnext,i.wsize-c):i.wnext-c,c>i.length&&(c=i.length),m=i.window}else m=r,b=o-i.offset,c=i.length;for(fc?(m=I[D+o[k]],A[B+o[k]]):(m=96,0),f=1<>E)+(l-=f)]=b<<24|m<<16|w|0,0!==l;);for(f=1<>=1;if(0!==f?(R&=f-1,R+=f):R=0,k++,0==--U[v]){if(v===p)break;v=t[i+o[k]]}if(y>2],t=-16&(r+e+15|0);if((HEAP32[DYNAMICTOP_PTR>>2]=t,TOTAL_MEMORY<=t)&&!enlargeMemory())return HEAP32[DYNAMICTOP_PTR>>2]=r,0;return r},alignMemory:function(e,r){return e=Math.ceil(e/(r||16))*(r||16)},makeBigInt:function(e,r,t){return t?+(e>>>0)+4294967296*(r>>>0):+(e>>>0)+4294967296*(0|r)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,cwrap,ccall;function assert(e,r){e||abort("Assertion failed: "+r)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,r,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":HEAP8[e>>0]=r;break;case"i16":HEAP16[e>>1]=r;break;case"i32":HEAP32[e>>2]=r;break;case"i64":tempI64=[r>>>0,(tempDouble=r,1<=+Math_abs(tempDouble)?0>>0:~~+Math_ceil((tempDouble-(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=r;break;case"double":HEAPF64[e>>3]=r;break;default:abort("invalid type for setValue: "+t)}}function getValue(e,r,t){switch("*"===(r=r||"i8").charAt(r.length-1)&&(r="i32"),r){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+r)}return null}!function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var r=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,r),r},stringToC:function(e){var r,t=0;return null!=e&&0!==e&&(r=1+(e.length<<2),stringToUTF8(e,t=Runtime.stackAlloc(r),r)),t}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,t,n,i){var a=getCFunc(e),o=[],u=0;if(n)for(var f=0;f>2]=0;for(f=u+a;n>0]=0;return u}if("i8"===o)return e.subarray||e.slice?HEAPU8.set(e,u):HEAPU8.set(new Uint8Array(e),u),u;for(var l,s,c,_=0;_>0],(0!=t||r)&&(i++,!r||i!=r););r=r||i;var a="";if(n<128){for(var o;0>0];if(!t)return r;r+=String.fromCharCode(t)}}function stringToAscii(e,r){return writeAsciiToMemory(e,r,!1)}Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,r){for(var t=r;e[t];)++t;if(16>10,56320|1023&a))):l+=String.fromCharCode((31&u)<<6|f)):l+=String.fromCharCode(u)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,r,t,n){if(!(0>6,r[t++]=128|63&u}else if(u<=65535){if(a<=t+2)break;r[t++]=224|u>>12,r[t++]=128|u>>6&63,r[t++]=128|63&u}else if(u<=2097151){if(a<=t+3)break;r[t++]=240|u>>18,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}else if(u<=67108863){if(a<=t+4)break;r[t++]=248|u>>24,r[t++]=128|u>>18&63,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}else{if(a<=t+5)break;r[t++]=252|u>>30,r[t++]=128|u>>24&63,r[t++]=128|u>>18&63,r[t++]=128|u>>12&63,r[t++]=128|u>>6&63,r[t++]=128|63&u}}return r[t]=0,t-i}function stringToUTF8(e,r,t){return stringToUTF8Array(e,HEAPU8,r,t)}function lengthBytesUTF8(e){for(var r=0,t=0;t>2]>r)return!1;var t=TOTAL_MEMORY;for(TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);TOTAL_MEMORY>2];)TOTAL_MEMORY=TOTAL_MEMORY<=536870912?alignUp(2*TOTAL_MEMORY,e):Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,e),r);var n=Module.reallocBuffer(TOTAL_MEMORY);return n&&n.byteLength==TOTAL_MEMORY?(updateGlobalBuffer(n),updateGlobalBufferViews(),!0):(TOTAL_MEMORY=t,!1)}STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1,Module.reallocBuffer||(Module.reallocBuffer=function(e){var r,t;try{ArrayBuffer.transfer?t=ArrayBuffer.transfer(buffer,e):(r=HEAP8,t=new ArrayBuffer(e),new Int8Array(t).set(r))}catch(e){return!1}return!!_emscripten_replace_memory(t)&&t});try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get),byteLength(new ArrayBuffer(4))}catch(e){byteLength=function(e){return e.byteLength}}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||16777216;function getTotalMemory(){return TOTAL_MEMORY}if(TOTAL_MEMORY>0]=e.charCodeAt(n);t||(HEAP8[r>>0]=0)}Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,r){var t=65535&e,n=65535&r;return t*n+((e>>>16)*n+t*(r>>>16)<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var r=0;r<32;r++)if(e&1<<31-r)return r;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_min=Math.min,runDependencies=0,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){var r;runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&dependenciesFulfilled&&(r=dependenciesFulfilled,dependenciesFulfilled=null,r())}Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={},STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+6192,__ATINIT__.push(),allocate([228,2,0,0,81,16,0,0,12,3,0,0,177,16,0,0,32,0,0,0,0,0,0,0,12,3,0,0,94,16,0,0,48,0,0,0,0,0,0,0,228,2,0,0,127,16,0,0,12,3,0,0,140,16,0,0,16,0,0,0,0,0,0,0,12,3,0,0,183,17,0,0,32,0,0,0,0,0,0,0,12,3,0,0,147,17,0,0,72,0,0,0,0,0,0,0,108,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,32,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,40,20,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,56,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,37,115,40,37,117,41,58,32,65,115,115,101,114,116,105,111,110,32,102,97,105,108,117,114,101,58,32,34,37,115,34,10,0,109,95,115,105,122,101,32,60,61,32,109,95,99,97,112,97,99,105,116,121,0,46,47,105,110,99,92,99,114,110,95,100,101,99,111,109,112,46,104,0,109,105,110,95,110,101,119,95,99,97,112,97,99,105,116,121,32,60,32,40,48,120,55,70,70,70,48,48,48,48,85,32,47,32,101,108,101,109,101,110,116,95,115,105,122,101,41,0,110,101,119,95,99,97,112,97,99,105,116,121,32,38,38,32,40,110,101,119,95,99,97,112,97,99,105,116,121,32,62,32,109,95,99,97,112,97,99,105,116,121,41,0,110,117,109,95,99,111,100,101,115,91,99,93,0,115,111,114,116,101,100,95,112,111,115,32,60,32,116,111,116,97,108,95,117,115,101,100,95,115,121,109,115,0,112,67,111,100,101,115,105,122,101,115,91,115,121,109,95,105,110,100,101,120,93,32,61,61,32,99,111,100,101,115,105,122,101,0,116,32,60,32,40,49,85,32,60,60,32,116,97,98,108,101,95,98,105,116,115,41,0,109,95,108,111,111,107,117,112,91,116,93,32,61,61,32,99,85,73,78,84,51,50,95,77,65,88,0,99,114,110,100,95,109,97,108,108,111,99,58,32,115,105,122,101,32,116,111,111,32,98,105,103,0,99,114,110,100,95,109,97,108,108,111,99,58,32,111,117,116,32,111,102,32,109,101,109,111,114,121,0,40,40,117,105,110,116,51,50,41,112,95,110,101,119,32,38,32,40,67,82,78,68,95,77,73,78,95,65,76,76,79,67,95,65,76,73,71,78,77,69,78,84,32,45,32,49,41,41,32,61,61,32,48,0,99,114,110,100,95,114,101,97,108,108,111,99,58,32,98,97,100,32,112,116,114,0,99,114,110,100,95,102,114,101,101,58,32,98,97,100,32,112,116,114,0,102,97,108,115,101,0,40,116,111,116,97,108,95,115,121,109,115,32,62,61,32,49,41,32,38,38,32,40,116,111,116,97,108,95,115,121,109,115,32,60,61,32,112,114,101,102,105,120,95,99,111,100,105,110,103,58,58,99,77,97,120,83,117,112,112,111,114,116,101,100,83,121,109,115,41,0,17,18,19,20,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15,16,48,0,110,117,109,95,98,105,116,115,32,60,61,32,51,50,85,0,109,95,98,105,116,95,99,111,117,110,116,32,60,61,32,99,66,105,116,66,117,102,83,105,122,101,0,116,32,33,61,32,99,85,73,78,84,51,50,95,77,65,88,0,109,111,100,101,108,46,109,95,99,111,100,101,95,115,105,122,101,115,91,115,121,109,93,32,61,61,32,108,101,110,0,0,2,3,1,0,2,3,4,5,6,7,1,40,108,101,110,32,62,61,32,49,41,32,38,38,32,40,108,101,110,32,60,61,32,99,77,97,120,69,120,112,101,99,116,101,100,67,111,100,101,83,105,122,101,41,0,105,32,60,32,109,95,115,105,122,101,0,110,101,120,116,95,108,101,118,101,108,95,111,102,115,32,62,32,99,117,114,95,108,101,118,101,108,95,111,102,115,0,1,2,2,3,3,3,3,4,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,2,1,2,0,0,0,1,0,2,1,0,2,0,0,1,2,3,110,117,109,32,38,38,32,40,110,117,109,32,61,61,32,126,110,117,109,95,99,104,101,99,107,41,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,83,116,57,101,120,99,101,112,116,105,111,110,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;function _abort(){Module.abort()}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}STATICTOP+=16;var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function(e){if(!e||EXCEPTIONS.infos[e])return e;for(var r in EXCEPTIONS.infos){if(EXCEPTIONS.infos[r].adjusted===e)return r}return e},addRef:function(e){e&&EXCEPTIONS.infos[e].refcount++},decRef:function(e){var r;e&&(assert(0<(r=EXCEPTIONS.infos[e]).refcount),r.refcount--,0!==r.refcount||r.rethrown||(r.destructor&&Module.dynCall_vi(r.destructor,e),delete EXCEPTIONS.infos[e],___cxa_free_exception(e)))},clearRef:function(e){e&&(EXCEPTIONS.infos[e].refcount=0)}};function ___cxa_begin_catch(e){var r=EXCEPTIONS.infos[e];return r&&!r.caught&&(r.caught=!0,__ZSt18uncaught_exceptionv.uncaught_exception--),r&&(r.rethrown=!1),EXCEPTIONS.caught.push(e),EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(e)),e}function _pthread_once(e,r){_pthread_once.seen||(_pthread_once.seen={}),e in _pthread_once.seen||(Module.dynCall_v(r),_pthread_once.seen[e]=1)}function _emscripten_memcpy_big(e,r,t){return HEAPU8.set(HEAPU8.subarray(r,r+t),e),e}var SYSCALLS={varargs:0,get:function(e){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},get64:function(){var e=SYSCALLS.get(),r=SYSCALLS.get();return assert(0<=e?0===r:-1===r),e},getZero:function(){assert(0===SYSCALLS.get())}};function ___syscall6(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.getStreamFromFD();return FS.close(t),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC),PTHREAD_SPECIFIC={};function _pthread_getspecific(e){return PTHREAD_SPECIFIC[e]||0}function ___setErrNo(e){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=e),e}var PTHREAD_SPECIFIC_NEXT_KEY=1,ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(e,r){return 0==e?ERRNO_CODES.EINVAL:(HEAP32[e>>2]=PTHREAD_SPECIFIC_NEXT_KEY,PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0,PTHREAD_SPECIFIC_NEXT_KEY++,0)}function ___resumeException(e){throw EXCEPTIONS.last||(EXCEPTIONS.last=e),e+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var e=EXCEPTIONS.last;if(!e)return 0|(Runtime.setTempRet0(0),0);var r=EXCEPTIONS.infos[e],t=r.type;if(!t)return 0|(Runtime.setTempRet0(0),e);var n=Array.prototype.slice.call(arguments);Module.___cxa_is_pointer_type(t);___cxa_find_matching_catch.buffer||(___cxa_find_matching_catch.buffer=_malloc(4)),HEAP32[___cxa_find_matching_catch.buffer>>2]=e,e=___cxa_find_matching_catch.buffer;for(var i=0;i>2],r.adjusted=e,0|(Runtime.setTempRet0(n[i]),e);return e=HEAP32[e>>2],0|(Runtime.setTempRet0(t),e)}function ___gxx_personality_v0(){}function _pthread_setspecific(e,r){return e in PTHREAD_SPECIFIC?(PTHREAD_SPECIFIC[e]=r,0):ERRNO_CODES.EINVAL}function ___syscall140(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.getStreamFromFD(),n=(SYSCALLS.get(),SYSCALLS.get()),i=SYSCALLS.get(),a=SYSCALLS.get(),o=n;return FS.llseek(t,o,a),HEAP32[i>>2]=t.position,t.getdents&&0===o&&0===a&&(t.getdents=null),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall146(e,r){SYSCALLS.varargs=r;try{var t=SYSCALLS.get(),n=SYSCALLS.get(),i=SYSCALLS.get(),a=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(e,r){var t=___syscall146.buffers[e];assert(t),0===r||10===r?((1===e?Module.print:Module.printErr)(UTF8ArrayToString(t,0)),t.length=0):t.push(r)});for(var o=0;o>2],f=HEAP32[n+(8*o+4)>>2],l=0;l>2]=DYNAMIC_BASE,staticSealed=!0,Module.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0,byteLength:byteLength},Module.asmLibraryArg={abort:abort,assert:assert,enlargeMemory:enlargeMemory,getTotalMemory:getTotalMemory,abortOnCannotGrowMemory:abortOnCannotGrowMemory,invoke_iiii:invoke_iiii,invoke_viiiii:invoke_viiiii,invoke_vi:invoke_vi,invoke_ii:invoke_ii,invoke_viii:invoke_viii,invoke_v:invoke_v,invoke_viiiiii:invoke_viiiiii,invoke_viiii:invoke_viiii,_pthread_getspecific:_pthread_getspecific,___syscall54:___syscall54,_pthread_setspecific:_pthread_setspecific,___gxx_personality_v0:___gxx_personality_v0,___syscall6:___syscall6,___setErrNo:___setErrNo,_abort:_abort,___cxa_begin_catch:___cxa_begin_catch,_pthread_once:_pthread_once,_emscripten_memcpy_big:_emscripten_memcpy_big,_pthread_key_create:_pthread_key_create,___syscall140:___syscall140,___resumeException:___resumeException,___cxa_find_matching_catch:___cxa_find_matching_catch,___syscall146:___syscall146,__ZSt18uncaught_exceptionv:__ZSt18uncaught_exceptionv,DYNAMICTOP_PTR:DYNAMICTOP_PTR,tempDoublePtr:tempDoublePtr,ABORT:ABORT,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX,cttz_i8:cttz_i8};var asm=function(e,r,t){var n=e.Int8Array,ce=new n(t),i=e.Int16Array,W=new i(t),a=e.Int32Array,_e=new a(t),o=e.Uint8Array,de=new o(t),u=e.Uint16Array,Ee=new u(t),f=e.Uint32Array,l=(new f(t),e.Float32Array),s=(new l(t),e.Float64Array),k=new s(t),c=e.byteLength,_=0|r.DYNAMICTOP_PTR,g=0|r.tempDoublePtr,Te=(r.ABORT,0|r.STACKTOP),d=(r.STACK_MAX,0|r.cttz_i8),L=(e.NaN,e.Infinity,0),ie=(e.Math.floor,e.Math.abs,e.Math.sqrt,e.Math.pow,e.Math.cos,e.Math.sin,e.Math.tan,e.Math.acos,e.Math.asin,e.Math.atan,e.Math.atan2,e.Math.exp,e.Math.log,e.Math.ceil,e.Math.imul),T=(e.Math.min,e.Math.max,e.Math.clz32),E=r.abort,A=(r.assert,r.enlargeMemory),b=r.getTotalMemory,M=r.abortOnCannotGrowMemory,m=(r.invoke_iiii,r.invoke_viiiii,r.invoke_vi,r.invoke_ii,r.invoke_viii,r.invoke_v,r.invoke_viiiiii,r.invoke_viiii,r._pthread_getspecific),S=r.___syscall54,h=r._pthread_setspecific,R=(r.___gxx_personality_v0,r.___syscall6),P=r.___setErrNo,p=r._abort,C=(r.___cxa_begin_catch,r._pthread_once),N=r._emscripten_memcpy_big,y=r._pthread_key_create,O=r.___syscall140,v=(r.___resumeException,r.___cxa_find_matching_catch,r.___syscall146);r.__ZSt18uncaught_exceptionv;function I(e){e|=0;var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,T=0,A=0,b=0,M=0,m=0,S=0,h=Te;Te=Te+16|0,_=h;do{if(e>>>0<245){if(e=(l=e>>>0<11?16:e+11&-8)>>>3,3&(t=(c=0|_e[1144])>>>e)|0)return n=0|_e[(t=(e=4616+((r=(1&t^1)+e|0)<<1<<2)|0)+8|0)>>2],(0|e)==(0|(a=0|_e[(i=n+8|0)>>2]))?_e[1144]=c&~(1<>2]=e,_e[t>>2]=a),S=r<<3,_e[n+4>>2]=3|S,_e[(S=n+S+4|0)>>2]=1|_e[S>>2],Te=h,0|(S=i);if((s=0|_e[1146])>>>0>>0){if(0|t)return r=((r=t<>>=o=r>>>12&16)>>>5&8)|o|(i=(r>>>=t)>>>2&4)|(e=(r>>>=i)>>>1&2)|(n=(r>>>=e)>>>1&1))+(r>>>n)|0)<<1<<2)|0)+8|0)>>2],(0|r)==(0|(t=0|_e[(o=i+8|0)>>2]))?(e=c&~(1<>2]=r,_e[e>>2]=t,e=c),a=(n<<3)-l|0,_e[i+4>>2]=3|l,_e[(n=i+l|0)+4>>2]=1|a,_e[n+a>>2]=a,0|s&&(i=0|_e[1149],t=4616+((r=s>>>3)<<1<<2)|0,e&(r=1<>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=i,_e[r+12>>2]=i,_e[i+8>>2]=r,_e[i+12>>2]=t),_e[1146]=a,_e[1149]=n,Te=h,0|(S=o);if(u=0|_e[1145]){if(t=(u&0-u)-1|0,e=0|_e[4880+(((a=(t>>>=o=t>>>12&16)>>>5&8)|o|(f=(t>>>=a)>>>2&4)|(n=(t>>>=f)>>>1&2)|(e=(t>>>=n)>>>1&1))+(t>>>e)<<2)>>2],t=(-8&_e[e+4>>2])-l|0,n=0|_e[e+16+((0==(0|_e[e+16>>2])&1)<<2)>>2]){for(;t=(f=(o=(-8&_e[n+4>>2])-l|0)>>>0>>0)?o:t,e=f?n:e,0!=(0|(n=0|_e[n+16+((0==(0|_e[n+16>>2])&1)<<2)>>2])););f=e,a=t}else f=e,a=t;if(f>>>0<(o=f+l|0)>>>0){i=0|_e[f+24>>2],r=0|_e[f+12>>2];do{if((0|r)==(0|f)){if(!(r=0|_e[(e=f+20|0)>>2])&&!(r=0|_e[(e=f+16|0)>>2])){t=0;break}for(;;)if(0|(n=0|_e[(t=r+20|0)>>2]))r=n,e=t;else{if(!(n=0|_e[(t=r+16|0)>>2]))break;r=n,e=t}_e[e>>2]=0,t=r}else t=0|_e[f+8>>2],_e[t+12>>2]=r,_e[r+8>>2]=t,t=r}while(0);do{if(0|i){if(r=0|_e[f+28>>2],(0|f)==(0|_e[(e=4880+(r<<2)|0)>>2])){if(!(_e[e>>2]=t)){_e[1145]=u&~(1<>2])!=(0|f)&1)<<2)>>2]=t))break;_e[t+24>>2]=i,0|(r=0|_e[f+16>>2])&&(_e[t+16>>2]=r,_e[r+24>>2]=t),0|(r=0|_e[f+20>>2])&&(_e[t+20>>2]=r,_e[r+24>>2]=t)}}while(0);return a>>>0<16?(S=a+l|0,_e[f+4>>2]=3|S,_e[(S=f+S+4|0)>>2]=1|_e[S>>2]):(_e[f+4>>2]=3|l,_e[o+4>>2]=1|a,_e[o+a>>2]=a,0|s&&(n=0|_e[1149],t=4616+((r=s>>>3)<<1<<2)|0,c&(r=1<>2]:(_e[1144]=c|r,e=(r=t)+8|0),_e[e>>2]=n,_e[r+12>>2]=n,_e[n+8>>2]=r,_e[n+12>>2]=t),_e[1146]=a,_e[1149]=o),Te=h,0|(S=f+8|0)}c=l}else c=l}else c=l}else if(e>>>0<=4294967231)if(l=-8&(e=e+11|0),f=0|_e[1145]){n=0-l|0,u=(e>>>=8)?16777215>>0?31:l>>>((u=14-((s=((m=e<<(c=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|c|(u=((m<<=s)+245760|0)>>>16&2))+(m<>>15)|0)+7|0)&1|u<<1:0,t=0|_e[4880+(u<<2)>>2];e:do{if(t)for(o=l<<(31==((e=0)|u)?0:25-(u>>>1)|0),a=0;;){if((i=(-8&_e[t+4>>2])-l|0)>>>0>>0){if(!i){n=0,i=e=t,m=61;break e}e=t,n=i}if(a=0==(0|(i=0|_e[t+20>>2]))|(0|i)==(0|(t=0|_e[t+16+(o>>>31<<2)>>2]))?a:i,i=0==(0|t)){t=a,m=57;break}o<<=1&(1^i)}else e=t=0,m=57}while(0);if(57==(0|m)){if(0==(0|t)&0==(0|e)){if(!(e=f&((e=2<>>=o=c>>>12&16)>>>5&8)|o|(u=(c>>>=a)>>>2&4)|(s=(c>>>=u)>>>1&2)|(t=(c>>>=s)>>>1&1))+(c>>>t)<<2)>>2]}t?(i=t,m=61):(u=e,o=n)}if(61==(0|m))for(;;){if(m=0,t=(c=(t=(-8&_e[i+4>>2])-l|0)>>>0>>0)?t:n,e=c?i:e,!(i=0|_e[i+16+((0==(0|_e[i+16>>2])&1)<<2)>>2])){u=e,o=t;break}n=t,m=61}if(0!=(0|u)&&o>>>0<((0|_e[1146])-l|0)>>>0){if((a=u+l|0)>>>0<=u>>>0)return Te=h,(S=0)|S;i=0|_e[u+24>>2],r=0|_e[u+12>>2];do{if((0|r)==(0|u)){if(!(r=0|_e[(e=u+20|0)>>2])&&!(r=0|_e[(e=u+16|0)>>2])){r=0;break}for(;;)if(0|(n=0|_e[(t=r+20|0)>>2]))r=n,e=t;else{if(!(n=0|_e[(t=r+16|0)>>2]))break;r=n,e=t}_e[e>>2]=0}else S=0|_e[u+8>>2],_e[S+12>>2]=r,_e[r+8>>2]=S}while(0);do{if(i){if(e=0|_e[u+28>>2],(0|u)==(0|_e[(t=4880+(e<<2)|0)>>2])){if(!(_e[t>>2]=r)){n=f&~(1<>2])!=(0|u)&1)<<2)>>2]=r)){n=f;break}_e[r+24>>2]=i,0|(e=0|_e[u+16>>2])&&(_e[r+16>>2]=e,_e[e+24>>2]=r),n=((e=0|_e[u+20>>2])&&(_e[r+20>>2]=e,_e[e+24>>2]=r),f)}else n=f}while(0);do{if(16<=o>>>0){if(_e[u+4>>2]=3|l,_e[a+4>>2]=1|o,r=(_e[a+o>>2]=o)>>>3,o>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=a,_e[r+12>>2]=a,_e[a+8>>2]=r,_e[a+12>>2]=t;break}if(t=4880+((r=(r=o>>>8)?16777215>>0?31:o>>>((r=14-((M=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(r=((S<<=M)+245760|0)>>>16&2))+(S<>>15)|0)+7|0)&1|r<<1:0)<<2)|0,_e[a+28>>2]=r,_e[(e=a+16|0)+4>>2]=0,_e[e>>2]=0,!(n&(e=1<>2]=a,_e[a+24>>2]=t,_e[a+12>>2]=a,_e[a+8>>2]=a;break}for(e=o<<(31==(0|r)?0:25-(r>>>1)|0),t=0|_e[t>>2];;){if((-8&_e[t+4>>2]|0)==(0|o)){m=97;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=96;break}e<<=1,t=r}if(96==(0|m)){_e[n>>2]=a,_e[a+24>>2]=t,_e[a+12>>2]=a,_e[a+8>>2]=a;break}if(97==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=a,_e[m>>2]=a,_e[a+8>>2]=S,_e[a+12>>2]=t,_e[a+24>>2]=0;break}}else S=o+l|0,_e[u+4>>2]=3|S,_e[(S=u+S+4|0)>>2]=1|_e[S>>2]}while(0);return Te=h,0|(S=u+8|0)}c=l}else c=l;else c=-1}while(0);if(c>>>0<=(t=0|_e[1146])>>>0)return r=t-c|0,e=0|_e[1149],15>>0?(S=e+c|0,_e[1149]=S,_e[1146]=r,_e[S+4>>2]=1|r,_e[S+r>>2]=r,_e[e+4>>2]=3|c):(_e[1146]=0,_e[1149]=0,_e[e+4>>2]=3|t,_e[(S=e+t+4|0)>>2]=1|_e[S>>2]),Te=h,0|(S=e+8|0);if(c>>>0<(o=0|_e[1147])>>>0)return M=o-c|0,_e[1147]=M,m=(S=0|_e[1150])+c|0,_e[1150]=m,_e[m+4>>2]=1|M,_e[S+4>>2]=3|c,Te=h,0|(S=S+8|0);if(u=c+48|0,(l=(a=(e=0|_e[1262]?0|_e[1264]:(_e[1264]=4096,_e[1263]=4096,_e[1265]=-1,_e[1266]=-1,_e[1267]=0,_e[1255]=0,e=-16&_^1431655768,_e[_>>2]=e,_e[1262]=e,4096))+(f=c+47|0)|0)&(i=0-e|0))>>>0<=c>>>0)return Te=h,(S=0)|S;if(0|(e=0|_e[1254])&&(_=(s=0|_e[1252])+l|0)>>>0<=s>>>0|e>>>0<_>>>0)return Te=h,(S=0)|S;e:do{if(4&_e[1255])r=0,m=133;else{t=0|_e[1150];r:do{if(t){for(n=5024;!((e=0|_e[n>>2])>>>0<=t>>>0&&(e+(0|_e[(T=n+4|0)>>2])|0)>>>0>t>>>0);){if(!(e=0|_e[n+8>>2])){m=118;break r}n=e}if((r=a-o&i)>>>0<2147483647)if((0|(e=0|me(0|r)))==((0|_e[n>>2])+(0|_e[T>>2])|0)){if(-1!=(0|e)){o=r,a=e,m=135;break e}}else n=e,m=126;else r=0}else m=118}while(0);do{if(118==(0|m))if(-1!=(0|(t=0|me(0)))&&(r=t,E=(r=(0==((E=(d=0|_e[1263])+-1|0)&r|0)?0:(E+r&0-d)-r|0)+l|0)+(d=0|_e[1252])|0,c>>>0>>0&r>>>0<2147483647)){if(0|(T=0|_e[1254])&&E>>>0<=d>>>0|T>>>0>>0){r=0;break}if((0|(e=0|me(0|r)))==(0|t)){o=r,a=t,m=135;break e}n=e,m=126}else r=0}while(0);do{if(126==(0|m)){if(t=0-r|0,!(r>>>0>>0&r>>>0<2147483647&-1!=(0|n))){if(-1==(0|n)){r=0;break}o=r,a=n,m=135;break e}if(2147483647<=(e=f-r+(e=0|_e[1264])&0-e)>>>0){o=r,a=n,m=135;break e}if(-1==(0|me(0|e))){me(0|t),r=0;break}o=e+r|0,a=n,m=135;break e}}while(0);_e[1255]=4|_e[1255],m=133}}while(0);if(133==(0|m)&&l>>>0<2147483647&&!(-1==(0|(M=0|me(0|l)))|1^(b=(c+40|0)>>>0<(A=(T=0|me(0))-M|0)>>>0)|M>>>0>>0&-1!=(0|M)&-1!=(0|T)^1)&&(o=b?A:r,a=M,m=135),135==(0|m)){r=(0|_e[1252])+o|0,(_e[1252]=r)>>>0>(0|_e[1253])>>>0&&(_e[1253]=r),f=0|_e[1150];do{if(f){for(r=5024;;){if((0|a)==((e=0|_e[r>>2])+(n=0|_e[(t=r+4|0)>>2])|0)){m=145;break}if(!(i=0|_e[r+8>>2]))break;r=i}if(145==(0|m)&&0==(8&_e[r+12>>2]|0)&&f>>>0>>0&e>>>0<=f>>>0){_e[t>>2]=n+o,m=f+(S=0==(7&(S=f+8|0)|0)?0:0-S&7)|0,S=(0|_e[1147])+(o-S)|0,_e[1150]=m,_e[1147]=S,_e[m+4>>2]=1|S,_e[m+S+4>>2]=40,_e[1151]=_e[1266];break}for(a>>>0<(0|_e[1148])>>>0&&(_e[1148]=a),t=a+o|0,r=5024;;){if((0|_e[r>>2])==(0|t)){m=153;break}if(!(e=0|_e[r+8>>2]))break;r=e}if(153==(0|m)&&0==(8&_e[r+12>>2]|0)){_e[r>>2]=a,_e[(s=r+4|0)>>2]=(0|_e[s>>2])+o,l=(s=a+(0==(7&(s=a+8|0)|0)?0:0-s&7)|0)+c|0,u=(r=t+(0==(7&(r=t+8|0)|0)?0:0-r&7)|0)-s-c|0,_e[s+4>>2]=3|c;do{if((0|r)!=(0|f)){if((0|r)==(0|_e[1149])){S=(0|_e[1146])+u|0,_e[1146]=S,_e[1149]=l,_e[l+4>>2]=1|S,_e[l+S>>2]=S;break}if(1==(3&(e=0|_e[r+4>>2])|0)){o=-8&e,n=e>>>3;e:do{if(e>>>0<256){if(e=0|_e[r+8>>2],(0|(t=0|_e[r+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<>2]=t,_e[t+8>>2]=e;break}a=0|_e[r+24>>2],e=0|_e[r+12>>2];do{if((0|e)==(0|r)){if(!(e=0|_e[(t=(n=r+16|0)+4|0)>>2])){if(!(e=0|_e[n>>2])){e=0;break}t=n}for(;;)if(0|(i=0|_e[(n=e+20|0)>>2]))e=i,t=n;else{if(!(i=0|_e[(n=e+16|0)>>2]))break;e=i,t=n}_e[t>>2]=0}else S=0|_e[r+8>>2],_e[S+12>>2]=e,_e[e+8>>2]=S}while(0);if(!a)break;n=4880+((t=0|_e[r+28>>2])<<2)|0;do{if((0|r)==(0|_e[n>>2])){if(0|(_e[n>>2]=e))break;_e[1145]=_e[1145]&~(1<>2])!=(0|r)&1)<<2)>>2]=e))break e}while(0);if(_e[e+24>>2]=a,0|(n=0|_e[(t=r+16|0)>>2])&&(_e[e+16>>2]=n,_e[n+24>>2]=e),!(t=0|_e[t+4>>2]))break;_e[e+20>>2]=t,_e[t+24>>2]=e}while(0);r=r+o|0,i=o+u|0}else i=u;if(_e[(r=r+4|0)>>2]=-2&_e[r>>2],_e[l+4>>2]=1|i,r=(_e[l+i>>2]=i)>>>3,i>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=l,_e[r+12>>2]=l,_e[l+8>>2]=r,_e[l+12>>2]=t;break}r=i>>>8;do{if(r){if(16777215>>0){r=31;break}r=i>>>((r=14-((M=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(r=((S<<=M)+245760|0)>>>16&2))+(S<>>15)|0)+7|0)&1|r<<1}else r=0}while(0);if(n=4880+(r<<2)|0,_e[l+28>>2]=r,_e[(e=l+16|0)+4>>2]=0,!((e=(_e[e>>2]=0)|_e[1145])&(t=1<>2]=l,_e[l+24>>2]=n,_e[l+12>>2]=l,_e[l+8>>2]=l;break}for(e=i<<(31==(0|r)?0:25-(r>>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|i)){m=194;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=193;break}e<<=1,t=r}if(193==(0|m)){_e[n>>2]=l,_e[l+24>>2]=t,_e[l+12>>2]=l,_e[l+8>>2]=l;break}if(194==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=l,_e[m>>2]=l,_e[l+8>>2]=S,_e[l+12>>2]=t,_e[l+24>>2]=0;break}}else S=(0|_e[1147])+u|0,_e[1147]=S,_e[1150]=l,_e[l+4>>2]=1|S}while(0);return Te=h,0|(S=s+8|0)}for(r=5024;!((e=0|_e[r>>2])>>>0<=f>>>0&&f>>>0<(S=e+(0|_e[r+4>>2])|0)>>>0);)r=0|_e[r+8>>2];for(r=(e=(e=(i=S+-47|0)+(0==(7&(e=i+8|0)|0)?0:0-e&7)|0)>>>0<(i=f+16|0)>>>0?f:e)+8|0,m=a+(t=0==(7&(t=a+8|0)|0)?0:0-t&7)|0,t=o+-40-t|0,_e[1150]=m,_e[1147]=t,_e[m+4>>2]=1|t,_e[m+t+4>>2]=40,_e[1151]=_e[1266],_e[(t=e+4|0)>>2]=27,_e[r>>2]=_e[1256],_e[r+4>>2]=_e[1257],_e[r+8>>2]=_e[1258],_e[r+12>>2]=_e[1259],_e[1256]=a,_e[1257]=o,_e[1259]=0,_e[1258]=r,r=e+24|0;_e[(r=(m=r)+4|0)>>2]=7,(m+8|0)>>>0>>0;);if((0|e)!=(0|f)){if(a=e-f|0,_e[t>>2]=-2&_e[t>>2],_e[f+4>>2]=1|a,r=(_e[e>>2]=a)>>>3,a>>>0<256){t=4616+(r<<1<<2)|0,(e=0|_e[1144])&(r=1<>2]:(_e[1144]=e|r,e=(r=t)+8|0),_e[e>>2]=f,_e[r+12>>2]=f,_e[f+8>>2]=r,_e[f+12>>2]=t;break}if(n=4880+((t=(r=a>>>8)?16777215>>0?31:a>>>((t=14-((M=((S=r<<(m=(r+1048320|0)>>>16&8))+520192|0)>>>16&4)|m|(t=((S<<=M)+245760|0)>>>16&2))+(S<>>15)|0)+7|0)&1|t<<1:0)<<2)|0,_e[f+28>>2]=t,_e[f+20>>2]=0,!((r=(_e[i>>2]=0)|_e[1145])&(e=1<>2]=f,_e[f+24>>2]=n,_e[f+12>>2]=f,_e[f+8>>2]=f;break}for(e=a<<(31==(0|t)?0:25-(t>>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|a)){m=216;break}if(!(r=0|_e[(n=t+16+(e>>>31<<2)|0)>>2])){m=215;break}e<<=1,t=r}if(215==(0|m)){_e[n>>2]=f,_e[f+24>>2]=t,_e[f+12>>2]=f,_e[f+8>>2]=f;break}if(216==(0|m)){S=0|_e[(m=t+8|0)>>2],_e[S+12>>2]=f,_e[m>>2]=f,_e[f+8>>2]=S,_e[f+12>>2]=t,_e[f+24>>2]=0;break}}}else{for(0==(0|(S=0|_e[1148]))|a>>>0>>0&&(_e[1148]=a),_e[1256]=a,_e[1257]=o,_e[1259]=0,_e[1153]=_e[1262],_e[1152]=-1,r=0;_e[(S=4616+(r<<1<<2)|0)+12>>2]=S,_e[S+8>>2]=S,32!=(0|(r=r+1|0)););m=a+(S=0==(7&(S=a+8|0)|0)?0:0-S&7)|0,S=o+-40-S|0,_e[1150]=m,_e[1147]=S,_e[m+4>>2]=1|S,_e[m+S+4>>2]=40,_e[1151]=_e[1266]}}while(0);if(c>>>0<(r=0|_e[1147])>>>0)return M=r-c|0,_e[1147]=M,m=(S=0|_e[1150])+c|0,_e[1150]=m,_e[m+4>>2]=1|M,_e[S+4>>2]=3|c,Te=h,0|(S=S+8|0)}return _e[(S=296)>>2]=12,Te=h,(S=0)|S}function w(e,r,t,n,i,a){e|=0,r=+r,t|=0,n|=0,i|=0,a|=0;var o,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,T=0,A=0,b=0,M=0,m=0,S=0,h=0,R=0,P=0,p=0,C=0,N=0,y=0,O=0,v=Te;Te=Te+560|0,l=v+8|0,y=O=(b=v)+524|0,N=(s=v+512|0)+12|(_e[b>>2]=0),ke(r),P=(0|L)<0?(r=-r,p=1,2087):(p=0!=(2049&i|0)&1,0==(2048&i|0)?0==(1&i|0)?2088:2093:2090),ke(r),C=2146435072&L;do{if(C>>>0<2146435072|2146435072==(0|C)&!1){if((u=0!=(E=2*(o=b,+ + +function e(r,t){r=+r,t|=0;var n=0,i=0,a=0;switch(k[g>>3]=r,n=0|_e[g>>2],i=0|_e[g+4>>2],2047&(a=0|ye(0|n,0|i,52))){case 0:n=0!=r?(r=+e(0x10000000000000000*r,t),(0|_e[t>>2])-64|0):0,_e[t>>2]=n;break;case 2047:break;default:_e[t>>2]=(2047&a)-1022,_e[g>>2]=n,_e[g+4>>2]=-2146435073&i|1071644672,r=+k[g>>3]}return+r}(+r,o|=0))))&&(_e[b>>2]=(0|_e[b>>2])-1),97==(0|(m=32|a))){d=0==(0|(T=32&a))?P:P+9|0,_=2|p,u=12-n|0;do{if(!(11>>0|0==(0|u))){for(r=8;r*=16,0!=(0|(u=u+-1|0)););if(45==(0|ce[d>>0])){r=-(r+(-E-r));break}r=E+r-r;break}r=E}while(0);for((0|(u=0|fe(u=(0|(f=0|_e[b>>2]))<0?0-f|0:f,((0|u)<0)<<31>>31,N)))==(0|N)&&(ce[(u=s+11|0)>>0]=48),ce[u+-1>>0]=43+(f>>31&2),ce[(c=u+-2|0)>>0]=a+15,s=(0|n)<1,l=0==(8&i|0),u=O;C=~~r,f=u+1|0,ce[u>>0]=de[2122+C>>0]|T,r=16*(r-(0|C)),u=1!=(f-y|0)||l&s&0==r?f:(ce[f>>0]=46,u+2|0),0!=r;);C=u-y|0,se(e,32,t,u=(y=N-c|0)+_+(N=0!=(0|n)&(C+-2|0)<(0|n)?n+2|0:C)|0,i),Ie(e,d,_),se(e,48,t,u,65536^i),Ie(e,O,C),se(e,48,N-C|0,0,0),Ie(e,c,y),se(e,32,t,u,8192^i);break}for(f=(0|n)<0?6:n,u?(u=(0|_e[b>>2])-28|0,_e[b>>2]=u,r=268435456*E):(r=E,u=0|_e[b>>2]),l=C=(0|u)<0?l:l+288|0;h=~~r>>>0,_e[l>>2]=h,l=l+4|0,0!=(r=1e9*(r-(h>>>0))););if(0<(0|u))for(s=C,_=l;;){if(c=(0|u)<29?u:29,s>>>0<=(u=_+-4|0)>>>0){for(l=0;M=0|Pe(0|(S=0|ge(0|(S=0|Ne(0|_e[u>>2],0,0|c)),0|L,0|l,0)),0|(h=L),1e9,0),_e[u>>2]=M,l=0|Fe(0|S,0|h,1e9,0),s>>>0<=(u=u+-4|0)>>>0;);l&&(_e[(s=s+-4|0)>>2]=l)}for(l=_;!(l>>>0<=s>>>0||0|_e[(u=l+-4|0)>>2]);)l=u;if(u=(0|_e[b>>2])-c|0,!(0<(0|(_e[b>>2]=u))))break;_=l}else s=C;if((0|u)<0){n=1+((f+25|0)/9|0)|0,A=102==(0|m);do{if(T=(0|(T=0-u|0))<9?T:9,s>>>0>>0){for(c=(1<>>T,d=0,u=s;h=0|_e[u>>2],_e[u>>2]=(h>>>T)+d,d=0|ie(h&c,_),(u=u+4|0)>>>0>>0;);u=0==(0|_e[s>>2])?s+4|0:s,u=d?(_e[l>>2]=d,s=u,l+4|0):(s=u,l)}else s=0==(0|_e[s>>2])?s+4|0:s,u=l;l=(0|n)<(u-(l=A?C:s)>>2|0)?l+(n<<2)|0:u,u=(0|_e[b>>2])+T|0,_e[b>>2]=u}while((0|u)<0);u=s,n=l}else u=s,n=l;if(h=C,u>>>0>>0){if(l=9*(h-u>>2)|0,10<=(c=0|_e[u>>2])>>>0)for(s=10;l=l+1|0,(s=10*s|0)>>>0<=c>>>0;);}else l=0;if((0|(s=f-(102!=(0|m)?l:0)+(((M=0!=(0|f))&(A=103==(0|m)))<<31>>31)|0))<((9*(n-h>>2)|0)-9|0)){if(T=C+4+(((0|(s=s+9216|0))/9|0)-1024<<2)|0,(0|(s=1+((0|s)%9|0)|0))<9)for(c=10;c=10*c|0,9!=(0|(s=s+1|0)););else c=10;if((s=(T+4|0)==(0|n))&0==(0|(d=((_=0|_e[T>>2])>>>0)%(c>>>0)|0)))s=T;else if(E=0==(1&((_>>>0)/(c>>>0)|0)|0)?9007199254740992:9007199254740994,r=d>>>0<(S=(0|c)/2|0)>>>0?.5:s&(0|d)==(0|S)?1:1.5,p&&(r=(S=45==(0|ce[P>>0]))?-r:r,E=S?-E:E),s=_-d|0,_e[T>>2]=s,E+r!=E){if(S=s+c|0,999999999<(_e[T>>2]=S)>>>0)for(l=T;(s=l+-4|0)>>>(_e[l>>2]=0)>>0&&(_e[(u=u+-4|0)>>2]=0),S=1+(0|_e[s>>2])|0,999999999<(_e[s>>2]=S)>>>0;)l=s;else s=T;if(l=9*(h-u>>2)|0,10<=(_=0|_e[u>>2])>>>0)for(c=10;l=l+1|0,(c=10*c|0)>>>0<=_>>>0;);}else s=T;s=(s=s+4|0)>>>0>>0?s:n,S=u}else s=n,S=u;for(m=s;;){if(m>>>0<=S>>>0){b=0;break}if(0|_e[(u=m+-4|0)>>2]){b=1;break}m=u}n=0-l|0;do{if(A){if(f=(0|l)<(0|(u=(1&(1^M))+f|0))&-5<(0|l)?(c=a+-1|0,u+-1-l|0):(c=a+-2|0,u+-1|0),!(u=8&i)){if(b&&0!=(0|(R=0|_e[m+-4>>2])))if((R>>>0)%10|0)s=0;else for(s=0,u=10;s=s+1|0,!((R>>>0)%((u=10*u|0)>>>0)|0););else s=9;if(u=(9*(m-h>>2)|0)-9|0,102==(32|c)){f=(0|f)<(0|(T=0<(0|(T=u-s|0))?T:0))?f:T,T=0;break}f=(0|f)<(0|(T=0<(0|(T=u+l-s|0))?T:0))?f:T,T=0;break}T=u}else c=a,T=8&i}while(0);if(_=0!=(0|(A=f|T))&1,d=102==(32|c))u=(M=0)<(0|l)?l:0;else{if(((s=N)-(u=0|fe(u=(0|l)<0?n:l,((0|u)<0)<<31>>31,N))|0)<2)for(;ce[(u=u+-1|0)>>0]=48,(s-u|0)<2;);ce[u+-1>>0]=43+(l>>31&2),ce[(u=u+-2|0)>>0]=c,u=s-(M=u)|0}if(se(e,32,t,u=p+1+f+_+u|0,i),Ie(e,P,p),se(e,48,t,u,65536^i),d){_=T=O+9|0,d=O+8|0,s=c=C>>>0>>0?C:S;do{if(l=0|fe(0|_e[s>>2],0,T),(0|s)==(0|c))(0|l)==(0|T)&&(ce[d>>0]=48,l=d);else if(O>>>0>>0)for(ne(0|O,48,l-y|0);O>>>0<(l=l+-1|0)>>>0;);Ie(e,l,_-l|0),s=s+4|0}while(s>>>0<=C>>>0);if(0|A&&Ie(e,2138,1),s>>>0>>0&0<(0|f))for(;;){if(O>>>0<(l=0|fe(0|_e[s>>2],0,T))>>>0)for(ne(0|O,48,l-y|0);O>>>0<(l=l+-1|0)>>>0;);if(Ie(e,l,(0|f)<9?f:9),l=f+-9|0,!((s=s+4|0)>>>0>>0&9<(0|f))){f=l;break}f=l}se(e,48,f+9|0,9,0)}else{if(A=b?m:S+4|0,-1<(0|f)){T=0==(0|T),n=b=O+9|0,_=0-y|0,d=O+8|0,c=S;do{(0|(l=0|fe(0|_e[c>>2],0,b)))==(0|b)&&(ce[d>>0]=48,l=d);do{if((0|c)==(0|S)){if(s=l+1|0,Ie(e,l,1),T&(0|f)<1){l=s;break}Ie(e,2138,1),l=s}else{if(l>>>0<=O>>>0)break;for(ne(0|O,48,l+_|0);O>>>0<(l=l+-1|0)>>>0;);}}while(0);Ie(e,l,(0|(y=n-l|0))<(0|f)?y:f),f=f-y|0,c=c+4|0}while(c>>>0>>0&-1<(0|f))}se(e,48,f+18|0,18,0),Ie(e,M,N-M|0)}se(e,32,t,u,8192^i)}else O=0!=(32&a|0),se(e,32,t,u=p+3|0,-65537&i),Ie(e,P,p),Ie(e,r!=r|!1?O?2114:2118:O?2106:2110,3),se(e,32,t,u,8192^i)}while(0);return Te=v,0|((0|u)<(0|t)?t:u)}function D(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;var a,o,u,f,l,s,c,_,d,E,T=0,A=0,b=0,M=0,m=0,S=0,h=0,R=0,P=0,p=0,C=0,N=0,y=0,O=Te;Te=Te+64|0,f=(c=O)+24|0,_=O+8|0,d=O+20|0,_e[(s=O+16|0)>>2]=r,a=0!=(0|e),u=o=40+f|0,f=39+f|0,l=4+_|0,S=T=A=0;e:for(;;){do{if(-1<(0|T)){if((2147483647-T|0)<(0|A)){_e[(T=296)>>2]=75,T=-1;break}T=A+T|0;break}}while(0);if(!((A=0|ce[r>>0])<<24>>24)){y=87;break}b=r;r:for(;;){switch(A<<24>>24){case 37:A=b,y=9;break r;case 0:A=b;break r}N=b+1|0,_e[s>>2]=N,A=0|ce[N>>0],b=N}r:do{if(9==(0|y))for(;;){if(37!=((y=0)|ce[b+1>>0]))break r;if(A=A+1|0,b=b+2|0,_e[s>>2]=b,37!=(0|ce[b>>0]))break;y=9}}while(0);if(A=A-r|0,a&&Ie(e,r,A),0|A)r=b;else{(A=(0|ce[(M=b+1|0)>>0])-48|0)>>>0<10?(C=(N=36==(0|ce[b+2>>0]))?A:-1,S=N?1:S,M=N?b+3|0:M):C=-1,_e[s>>2]=M,b=((A=0|ce[M>>0])<<24>>24)-32|0;r:do{if(b>>>0<32)for(m=0,h=A;;){if(!(75913&(A=1<>2]=M,32<=(b=((A=0|ce[M>>0])<<24>>24)-32|0)>>>0)break;h=A}else m=0}while(0);if(A<<24>>24==42){if((A=(0|ce[(b=M+1|0)>>0])-48|0)>>>0<10&&36==(0|ce[M+2>>0]))_e[i+(A<<2)>>2]=10,A=0|_e[n+((0|ce[b>>0])-48<<3)>>2],S=1,M=M+3|0;else{if(0|S){T=-1;break}M=(S=a?(S=3+(0|_e[t>>2])&-4,A=0|_e[S>>2],_e[t>>2]=S+4,0):A=0,b)}_e[s>>2]=M,A=(N=(0|A)<0)?0-A|0:A,m=N?8192|m:m}else{if((0|(A=0|Se(s)))<0){T=-1;break}M=0|_e[s>>2]}do{if(46==(0|ce[M>>0])){if(42!=(0|ce[M+1>>0])){_e[s>>2]=M+1,b=0|Se(s),M=0|_e[s>>2];break}if((b=(0|ce[(h=M+2|0)>>0])-48|0)>>>0<10&&36==(0|ce[M+3>>0])){_e[i+(b<<2)>>2]=10,b=0|_e[n+((0|ce[h>>0])-48<<3)>>2],M=M+4|0,_e[s>>2]=M;break}if(0|S){T=-1;break e}a?(N=3+(0|_e[t>>2])&-4,b=0|_e[N>>2],_e[t>>2]=N+4):b=0,M=_e[s>>2]=h}else b=-1}while(0);for(p=0;;){if(57<((0|ce[M>>0])-65|0)>>>0){T=-1;break e}if(N=M+1|0,_e[s>>2]=N,!(((R=255&(h=0|ce[(0|ce[M>>0])-65+(1606+(58*p|0))>>0]))+-1|0)>>>0<8))break;p=R,M=N}if(!(h<<24>>24)){T=-1;break}P=-1<(0|C);do{if(h<<24>>24==19){if(P){T=-1;break e}y=49}else{if(P){_e[i+(C<<2)>>2]=R,C=0|_e[(P=n+(C<<3)|0)+4>>2],_e[(y=c)>>2]=_e[P>>2],_e[y+4>>2]=C,y=49;break}if(!a){T=0;break e}H(c,R,t)}}while(0);if(49!=(0|y)||(y=0,a)){M=0!=(0|p)&3==(15&(M=0|ce[M>>0])|0)?-33&M:M,P=-65537&m,C=0==(8192&m|0)?m:P;r:do{switch(0|M){case 110:switch((255&p)<<24>>24){case 0:case 1:_e[_e[c>>2]>>2]=T,A=0,r=N;continue e;case 2:A=0|_e[c>>2],_e[A>>2]=T,_e[A+4>>2]=((0|T)<0)<<31>>31,A=0,r=N;continue e;case 3:W[_e[c>>2]>>1]=T,A=0,r=N;continue e;case 4:ce[_e[c>>2]>>0]=T,A=0,r=N;continue e;case 6:_e[_e[c>>2]>>2]=T,A=0,r=N;continue e;case 7:A=0|_e[c>>2],_e[A>>2]=T,_e[A+4>>2]=((0|T)<0)<<31>>31,A=0,r=N;continue e;default:A=0,r=N;continue e}case 112:M=120,b=8>>0?b:8,r=8|C,y=61;break;case 88:case 120:r=C,y=61;break;case 111:h=2070,b=(m=0)==(8&C|0)|(0|(P=u-(R=0|function(e,r,t){if(t|=0,!(0==(0|(e|=0))&0==(0|(r|=0))))for(;ce[(t=t+-1|0)>>0]=7&e|48,e=0|ye(0|e,0|r,3),r=L,!(0==(0|e)&0==(0|r)););return 0|t}(r=0|_e[(M=c)>>2],M=0|_e[M+4>>2],o))|0))<(0|b)?b:P+1|0,P=C,y=67;break;case 105:case 100:if(r=0|_e[(M=c)>>2],(0|(M=0|_e[M+4>>2]))<0){r=0|ve(0,0,0|r,0|M),M=L,_e[(m=c)>>2]=r,_e[m+4>>2]=M,m=1,h=2070,y=66;break r}m=0!=(2049&C|0)&1,h=0==(2048&C|0)?0==(1&C|0)?2070:2072:2071,y=66;break r;case 117:h=2070,r=(m=0)|_e[(M=c)>>2],M=0|_e[M+4>>2],y=66;break;case 99:ce[f>>0]=_e[c>>2],r=f,m=0,h=2070,R=o,M=1,b=P;break;case 109:M=0|(E=0|_e[(M=296)>>2],0|function(e,r){e|=0,r|=0;var t=0,n=0;for(n=0;;){if((0|de[2140+n>>0])==(0|e)){e=2;break}if(87==(0|(t=n+1|0))){t=2228,n=87,e=5;break}n=t}if(2==(0|e)&&(n?(t=2228,e=5):t=2228),5==(0|e))for(;;){for(;t=(e=t)+1|0,0!=(0|ce[e>>0]););if(!(n=n+-1|0))break;e=5}return 0|function(e,r){return 0|function(e,r){return e|=0,0|(0|(r=(r|=0)?0|function(e,r,t){r|=0,t|=0;var n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0;_=1794895138+(0|_e[(e|=0)>>2])|0,a=0|Ge(0|_e[e+8>>2],_),n=0|Ge(0|_e[e+12>>2],_),i=0|Ge(0|_e[e+16>>2],_);t:do{if(a>>>0>>2>>>0&&(c=r-(a<<2)|0,n>>>0>>0&i>>>0>>0)&&0==(3&(i|n)|0)){for(c=n>>>2,s=i>>>2,l=0;;){if(n=0|Ge(0|_e[e+((i=(o=(f=l+(u=a>>>1)|0)<<1)+c|0)<<2)>>2],_),!((i=0|Ge(0|_e[e+(i+1<<2)>>2],_))>>>0>>0&n>>>0<(r-i|0)>>>0)){n=0;break t}if(0|ce[e+(i+n)>>0]){n=0;break t}if(!(n=0|function(e,r){r|=0;var t=0,n=0;if(t=0|ce[(e|=0)>>0],n=0|ce[r>>0],t<<24>>24==0||t<<24>>24!=n<<24>>24)e=n;else{for(;r=r+1|0,t=0|ce[(e=e+1|0)>>0],n=0|ce[r>>0],t<<24>>24!=0&&t<<24>>24==n<<24>>24;);e=n}return(255&t)-(255&e)|0}(t,e+i|0)))break;if(n=(0|n)<0,1==(0|a)){n=0;break t}l=n?l:f,a=n?u:a-u|0}i=0|Ge(0|_e[e+((n=o+s|0)<<2)>>2],_),n=(n=0|Ge(0|_e[e+(n+1<<2)>>2],_))>>>0>>0&i>>>0<(r-n|0)>>>0&&0==(0|ce[e+(n+i)>>0])?e+n|0:0}else n=0}while(0);return 0|n}(0|_e[r>>2],0|_e[r+4>>2],e):0)?r:e)}(e|=0,r|=0)}(t,0|_e[r+20>>2])}(E|=0,0|_e[105])),y=71;break;case 115:M=0|(M=0|_e[c>>2])?M:2080,y=71;break;case 67:_e[_>>2]=_e[c>>2],_e[l>>2]=0,R=-1,M=_e[c>>2]=_,y=75;break;case 83:r=0|_e[c>>2],y=b?(R=b,M=r,75):(se(e,32,A,0,C),r=0,84);break;case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:A=0|w(e,+k[c>>3],A,b,C,M),r=N;continue e;default:m=0,h=2070,R=o,M=b,b=C}}while(0);r:do{if(61==(0|y))R=0|function(e,r,t,n){if(t|=0,n|=0,!(0==(0|(e|=0))&0==(0|(r|=0))))for(;ce[(t=t+-1|0)>>0]=0|de[2122+(15&e)>>0]|n,e=0|ye(0|e,0|r,4),r=L,!(0==(0|e)&0==(0|r)););return 0|t}(p=0|_e[(C=c)>>2],C=0|_e[C+4>>2],o,32&M),m=(h=0==(8&r|0)|0==(0|p)&0==(0|C))?0:2,h=h?2070:2070+(M>>4)|0,P=r,r=p,M=C,y=67;else if(66==(0|y))R=0|fe(r,M,o),P=C,y=67;else if(71==(0|y))h=2070,R=(p=(m=y=0)==(0|(C=0|function(e,r,t){e|=0;var n=0,i=0,a=0,o=0;a=255&(r|=0),n=0!=(0|(t|=0));t:do{if(n&0!=(3&e|0))for(i=255&r;;){if((0|ce[e>>0])==i<<24>>24){o=6;break t}if(!((n=0!=(0|(t=t+-1|0)))&0!=(3&(e=e+1|0)|0))){o=5;break}}else o=5}while(0);5==(0|o)&&(n?o=6:t=0);t:do{if(6==(0|o)&&(i=255&r,(0|ce[e>>0])!=i<<24>>24)){n=0|ie(a,16843009);n:do{if(3>>0){for(;!((-2139062144&(a=_e[e>>2]^n)^-2139062144)&a+-16843009|0);)if(e=e+4|0,(t=t+-4|0)>>>0<=3){o=11;break n}}else o=11}while(0);if(11==(0|o)&&!t){t=0;break}for(;;){if((0|ce[e>>0])==i<<24>>24)break t;if(e=e+1|0,!(t=t+-1|0)){t=0;break}}}}while(0);return 0|(0|t?e:0)}(r=M,0,b))))?M+b|0:C,M=p?b:C-M|0,b=P;else if(75==(0|y)){for(h=M,b=r=y=0;(m=0|_e[h>>2])&&!((0|(b=0|we(d,m)))<0|(R-r|0)>>>0>>0)&&(r=b+r|0)>>>0>>0;)h=h+4|0;if((0|b)<0){T=-1;break e}if(se(e,32,A,r,C),r)for(m=0;;){if(!(b=0|_e[M>>2])){y=84;break r}if((0|r)<(0|(m=(b=0|we(d,b))+m|0))){y=84;break r}if(Ie(e,d,b),r>>>0<=m>>>0){y=84;break}M=M+4|0}else r=0,y=84}}while(0);if(67==(0|y))C=(y=0)!=(0|b)|(M=0!=(0|r)|0!=(0|M)),M=u-R+(1&(1^M))|0,r=C?R:o,R=o,M=!C||(0|M)<(0|b)?b:M,b=-1<(0|b)?-65537&P:P;else if(84==(0|y)){y=0,se(e,32,A,r,8192^C),A=(0|r)<(0|A)?A:r,r=N;continue}se(e,32,A=(0|A)<(0|(C=(P=(0|M)<(0|(p=R-r|0))?p:M)+m|0))?C:A,C,b),Ie(e,h,m),se(e,48,A,C,65536^b),se(e,48,P,p,0),Ie(e,r,p),se(e,32,A,C,8192^b),r=N}else A=0,r=N}}e:do{if(87==(0|y)&&!e)if(S){for(T=1;r=0|_e[i+(T<<2)>>2];)if(H(n+(T<<3)|0,r,t),10<=(0|(T=T+1|0))){T=1;break e}for(;;){if(0|_e[i+(T<<2)>>2]){T=-1;break e}if(10<=(0|(T=T+1|0))){T=1;break}}}else T=0}while(0);return Te=O,0|T}function V(e,r){r|=0;var t,n,i,a,o,u,f,l,s,c,_,d,E,T,A=0,b=0,M=0,m=0,S=0,h=0,R=0,P=0,p=0,C=0,N=Te;if(Te=Te+704|0,E=N+144|0,d=N+128|0,_=N+112|0,c=N+96|0,s=N+80|0,l=N+64|0,f=N+48|0,T=N+32|0,t=N+16|0,i=(h=N)+184|0,C=N+160|0,!(a=0|function(e,r){e|=0;var t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+528|0,a=(o=l)+16|0,!(r|=0))return Te=l,(f=0)|f;if(r>>>0<=16)return f=0|Q(e,r),Te=l,0|f;if(u=0|Q(e,r+-16|0),(0|(r=0|_e[(f=e+20|0)>>2]))<16)for(n=e+4|0,i=e+8|0,t=e+16|0;e=(0|(e=0|_e[n>>2]))==(0|_e[i>>2])?0:(_e[n>>2]=e+1,0|de[e>>0]),r=r+8|0,33<=(0|(_e[f>>2]=r))&&(_e[o>>2]=866,_e[o+4>>2]=3208,_e[o+8>>2]=1366,Ce(a,812,o),be(a),r=0|_e[f>>2]),e=e<<32-r|_e[t>>2],_e[t>>2]=e,(0|r)<16;);else e=0|_e[(t=e=e+16|0)>>2];return _e[t>>2]=e<<16,_e[f>>2]=r+-16,Te=l,0|(f=e>>>16|u<<16)}(e|=0,14)))return function(e){var r=0,t=0,n=0,i=0,a=0,o=0;Te=(o=Te)+544|0,a=o+16|0,i=(n=o)+32|0,(_e[(e|=0)>>2]=0)|(t=0|_e[(r=e+4|0)>>2])&&(7&t?(_e[n>>2]=866,_e[n+4>>2]=2506,_e[n+8>>2]=1232,Ce(i,812,n),be(i)):ue(t,0,0,1,0),_e[r>>2]=0,_e[e+8>>2]=0,_e[e+12>>2]=0);if(ce[e+16>>0]=0,!(r=0|_e[(e=e+20|0)>>2]))return Te=o;Z(r),7&r?(_e[a>>2]=866,_e[4+a>>2]=2506,_e[8+a>>2]=1232,Ce(i,812,a),be(i)):ue(r,0,0,1,0);_e[e>>2]=0,Te=o}(r),Te=N,0|(C=1);if(o=r+4|0,(0|(A=0|_e[(u=r+8|0)>>2]))!=(0|a)){if(A>>>0<=a>>>0){do{if((0|_e[r+12>>2])>>>0>>0){if(0|X(o,a,(A+1|0)==(0|a),1,0)){A=0|_e[u>>2];break}return ce[r+16>>0]=1,Te=N,(C=0)|C}}while(0);ne((0|_e[o>>2])+A|0,0,a-A|0)}_e[u>>2]=a}if(ne(0|_e[o>>2],0,0|a),(0|(A=0|_e[(n=e+20|0)>>2]))<5)for(m=e+4|0,S=e+8|0,M=e+16|0;b=(0|(b=0|_e[m>>2]))==(0|_e[S>>2])?0:(_e[m>>2]=b+1,0|de[b>>0]),A=A+8|0,33<=(0|(_e[n>>2]=A))&&(_e[h>>2]=866,_e[h+4>>2]=3208,_e[h+8>>2]=1366,Ce(i,812,h),be(i),A=0|_e[n>>2]),b=b<<32-A|_e[M>>2],_e[M>>2]=b,(0|A)<5;);else b=0|_e[(M=b=e+16|0)>>2];if(P=b>>>27,_e[M>>2]=b<<5,_e[n>>2]=A+-5,20<(P+-1|0)>>>0)return Te=N,(C=0)|C;_e[C+20>>2]=0,_e[C>>2]=0,_e[C+4>>2]=0,_e[C+8>>2]=0,_e[C+12>>2]=0,A=C+4|(ce[C+16>>0]=0),b=C+8|0;e:do{if(0|X(A,21,0,1,0)){m=0|_e[b>>2],ne((R=0|_e[A>>2])+m|0,0,21-m|0),_e[b>>2]=21,m=e+4|0,S=e+8|0,h=e+16|0,M=0;do{if((0|(A=0|_e[n>>2]))<3)for(;b=(0|(b=0|_e[m>>2]))==(0|_e[S>>2])?0:(_e[m>>2]=b+1,0|de[b>>0]),A=A+8|0,33<=(0|(_e[n>>2]=A))&&(_e[t>>2]=866,_e[4+t>>2]=3208,_e[8+t>>2]=1366,Ce(i,812,t),be(i),A=0|_e[n>>2]),b=b<<32-A|_e[h>>2],_e[h>>2]=b,(0|A)<3;);else b=0|_e[h>>2];_e[h>>2]=b<<3,_e[n>>2]=A+-3,ce[R+(0|de[1327+M>>0])>>0]=b>>>29,M=M+1|0}while((0|M)!=(0|P));if(0|$(C)){h=e+4|0,R=e+8|0,P=e+16|0,A=0;r:do{S=a-A|0,M=0|Ae(e,C);t:do{if(M>>>0<17)(0|_e[u>>2])>>>0<=A>>>0&&(_e[T>>2]=866,_e[4+T>>2]=910,_e[8+T>>2]=1497,Ce(i,812,T),be(i)),ce[(0|_e[o>>2])+A>>0]=M,A=A+1|0;else switch(0|M){case 17:if((0|(b=0|_e[n>>2]))<3)for(;M=(0|(M=0|_e[h>>2]))==(0|_e[R>>2])?0:(_e[h>>2]=M+1,0|de[M>>0]),b=b+8|0,33<=(0|(_e[n>>2]=b))&&(_e[f>>2]=866,_e[4+f>>2]=3208,_e[8+f>>2]=1366,Ce(i,812,f),be(i),b=0|_e[n>>2]),M=M<<32-b|_e[P>>2],_e[P>>2]=M,(0|b)<3;);else M=0|_e[P>>2];if(_e[P>>2]=M<<3,_e[n>>2]=b+-3,b=S>>>0<(M=3+(M>>>29)|0)>>>0){A=0;break e}A=(b?0:M)+A|0;break t;case 18:if((0|(b=0|_e[n>>2]))<7)for(;M=(0|(M=0|_e[h>>2]))==(0|_e[R>>2])?0:(_e[h>>2]=M+1,0|de[M>>0]),b=b+8|0,33<=(0|(_e[n>>2]=b))&&(_e[l>>2]=866,_e[4+l>>2]=3208,_e[8+l>>2]=1366,Ce(i,812,l),be(i),b=0|_e[n>>2]),M=M<<32-b|_e[P>>2],_e[P>>2]=M,(0|b)<7;);else M=0|_e[P>>2];if(_e[P>>2]=M<<7,_e[n>>2]=b+-7,b=S>>>0<(M=11+(M>>>25)|0)>>>0){A=0;break e}A=(b?0:M)+A|0;break t;default:if(2<=(M+-19|0)>>>0){p=81;break r}if(b=0|_e[n>>2],19==(0|M)){if((0|b)<2)for(M=b;m=(0|(b=0|_e[h>>2]))==(0|_e[R>>2])?0:(_e[h>>2]=b+1,0|de[b>>0]),b=M+8|0,33<=(0|(_e[n>>2]=b))&&(_e[s>>2]=866,_e[4+s>>2]=3208,_e[8+s>>2]=1366,Ce(i,812,s),be(i),b=0|_e[n>>2]),M=m<<32-b|_e[P>>2],_e[P>>2]=M,(0|b)<2;)M=b;else M=0|_e[P>>2];_e[P>>2]=M<<2,M>>>=30,m=3,b=b+-2|0}else{if((0|b)<6)for(;M=(0|(M=0|_e[h>>2]))==(0|_e[R>>2])?0:(_e[h>>2]=M+1,0|de[M>>0]),b=b+8|0,33<=(0|(_e[n>>2]=b))&&(_e[c>>2]=866,_e[4+c>>2]=3208,_e[8+c>>2]=1366,Ce(i,812,c),be(i),b=0|_e[n>>2]),M=M<<32-b|_e[P>>2],_e[P>>2]=M,(0|b)<6;);else M=0|_e[P>>2];_e[P>>2]=M<<6,M>>>=26,m=7,b=b+-6|0}if(_e[n>>2]=b,0==(0|A)|S>>>0<(M=M+m|0)>>>0){A=0;break e}if(b=A+-1|0,(0|_e[u>>2])>>>0<=b>>>0&&(_e[_>>2]=866,_e[4+_>>2]=910,_e[8+_>>2]=1497,Ce(i,812,_),be(i)),!((m=0|ce[(0|_e[o>>2])+b>>0])<<24>>24)){A=0;break e}if((b=M+A|0)>>>0<=A>>>0)break t;for(;(0|_e[u>>2])>>>0<=A>>>0&&(_e[d>>2]=866,_e[4+d>>2]=910,_e[8+d>>2]=1497,Ce(i,812,d),be(i)),ce[(0|_e[o>>2])+A>>0]=m,(0|(A=A+1|0))!=(0|b););A=b}}while(0)}while(A>>>0>>0);if(81==(0|p)){_e[E>>2]=866,_e[4+E>>2]=3149,_e[8+E>>2]=1348,Ce(i,812,E),be(i),A=0;break}A=(0|a)==(0|A)?0|$(r):0}else A=0}else ce[C+16>>0]=1,A=0}while(0);return re(C),Te=N,0|(C=A)}function G(e,r,t,n){t|=0;var i,a,o,u,f,l,s,c,_=0,d=0,E=0,T=0,A=0,b=0,M=0,m=0,S=0,h=0,R=0,P=0,p=0,C=0,N=0,y=0,O=0,v=0,k=0,g=Te;if(Te=Te+880|0,v=g+144|0,c=g+128|0,s=g+112|0,l=g+96|0,y=g+80|0,C=g+64|0,P=g+48|0,p=g+32|0,m=g+16|0,u=(M=g)+360|0,f=g+296|0,k=g+224|0,R=g+156|0,0==(0|(r|=0))|11<(n|=0)>>>0)return Te=g,(k=0)|k;for(_e[(e|=0)>>2]=r,d=(_=k)+68|0;(0|(_=_+4|(_e[_>>2]=0)))<(0|d););for(_=0;d=k+((255&(O=0|ce[t+_>>0]))<<2)|0,O<<24>>24&&(_e[d>>2]=1+(0|_e[d>>2])),(0|(_=_+1|0))!=(0|r););for(T=E=d=0,A=-1,b=1;(_=0|_e[k+(b<<2)>>2])?(d=_+(_e[f+((S=b+-1|0)<<2)>>2]=d)|0,O=16-b|0,_e[e+28+(S<<2)>>2]=1+(d+-1<>2]=E,S=_+(_e[R+(b<<2)>>2]=E)|0,T=b>>>0>>0?T:b,A=A>>>0>>0?A:b):(_e[e+28+(b+-1<<2)>>2]=0,S=E),17!=(0|(b=b+1|0));)d<<=1,E=S;_e[e+4>>2]=S,d=e+172|0;do{if(S>>>0>(0|_e[d>>2])>>>0){_=(_=S+-1|0)&S?(_|=_>>>16,_|=_>>>8,_|=_>>>4,r>>>0<(_=1+((_|=_>>>2)>>>1|_)|0)>>>0?r:_):S,_e[d>>2]=_,_=0|_e[(E=e+176|0)>>2];do{if(0|_){if(O=0|_e[_+-4>>2],_=_+-8|0,0!=(0|O)&&(0|O)==(0|~_e[_>>2])||(_e[M>>2]=866,_e[M+4>>2]=651,_e[M+8>>2]=1579,Ce(u,812,M),be(u)),7&_){_e[m>>2]=866,_e[m+4>>2]=2506,_e[m+8>>2]=1232,Ce(u,812,m),be(u);break}ue(_,0,0,1,0);break}}while(0);if(d=0|te(8+((_=0|(_=0|_e[d>>2])?_:1)<<1)|0,0)){_e[d+4>>2]=_,_e[d>>2]=~_,_e[E>>2]=d+8,h=24;break}n=_e[E>>2]=0;break}h=24}while(0);e:do{if(24==(0|h)){for(ce[(O=e+24|0)>>0]=A,ce[e+25>>0]=T,E=e+176|0,d=0;_=255&(N=0|ce[t+d>>0]),N<<24>>24&&(0|_e[k+(_<<2)>>2]||(_e[p>>2]=866,_e[p+4>>2]=2276,_e[p+8>>2]=977,Ce(u,812,p),be(u)),_=0|_e[(N=R+(_<<2)|0)>>2],_e[N>>2]=_+1,S>>>0<=_>>>0&&(_e[P>>2]=866,_e[P+4>>2]=2280,_e[P+8>>2]=990,Ce(u,812,P),be(u)),W[(0|_e[E>>2])+(_<<1)>>1]=d),(0|(d=d+1|0))!=(0|r););if(o=(0|de[O>>0])>>>0>>0?n:0,a=0!=(0|(_e[(N=e+8|0)>>2]=o))){i=1<>>0>(0|_e[_>>2])>>>0){_e[_>>2]=i,_=0|_e[(E=e+168|0)>>2];do{if(0|_){if(p=0|_e[_+-4>>2],_=_+-8|0,0!=(0|p)&&(0|p)==(0|~_e[_>>2])||(_e[C>>2]=866,_e[C+4>>2]=651,_e[C+8>>2]=1579,Ce(u,812,C),be(u)),7&_){_e[y>>2]=866,_e[y+4>>2]=2506,_e[y+8>>2]=1232,Ce(u,812,y),be(u);break}ue(_,0,0,1,0);break}}while(0);if(d=0|te((_=i<<2)+8|0,0)){y=d+8|0,_e[d+4>>2]=i,_e[d>>2]=~i,d=_e[E>>2]=y;break}n=_e[E>>2]=0;break e}_=i<<2,d=0|_e[(E=d=e+168|0)>>2]}while(0);ne(0|d,-1,0|_),P=e+176|0,R=1;do{if(0|_e[k+(R<<2)>>2]&&(C=1<<(p=o-R|0),d=0|_e[f+((_=R+-1|0)<<2)>>2],16<=_>>>0&&(_e[l>>2]=866,_e[4+l>>2]=1960,_e[8+l>>2]=1453,Ce(u,812,l),be(u)),d>>>0<=(r=0==(0|(r=0|_e[e+28+(_<<2)>>2]))?-1:(r+-1|0)>>>(16-R|0))>>>0)){S=(0|_e[e+96+(_<<2)>>2])-d|0,h=R<<16;do{for(_=0|Ee[(0|_e[P>>2])+(S+d<<1)>>1],(0|de[t+_>>0])!=(0|R)&&(_e[s>>2]=866,_e[4+s>>2]=2322,_e[8+s>>2]=1019,Ce(u,812,s),be(u)),m=d<>>0<=(M=A+m|0)>>>0&&(_e[c>>2]=866,_e[4+c>>2]=2328,_e[8+c>>2]=1053,Ce(u,812,c),be(u)),_=0|_e[E>>2],-1!=(0|_e[_+(M<<2)>>2])&&(_e[v>>2]=866,_e[v+4>>2]=2330,_e[v+8>>2]=1076,Ce(u,812,v),be(u),_=0|_e[E>>2]),_e[_+(M<<2)>>2]=b,(A=A+1|0)>>>0>>0;);d=d+1|0}while(d>>>0<=r>>>0)}R=R+1|0}while(R>>>0<=o>>>0)}_e[(_=e+96|0)>>2]=(0|_e[_>>2])-(0|_e[f>>2]),_e[(_=e+100|0)>>2]=(0|_e[_>>2])-(0|_e[4+f>>2]),_e[(_=e+104|0)>>2]=(0|_e[_>>2])-(0|_e[8+f>>2]),_e[(_=e+108|0)>>2]=(0|_e[_>>2])-(0|_e[12+f>>2]),_e[(_=e+112|0)>>2]=(0|_e[_>>2])-(0|_e[16+f>>2]),_e[(_=e+116|0)>>2]=(0|_e[_>>2])-(0|_e[20+f>>2]),_e[(_=e+120|0)>>2]=(0|_e[_>>2])-(0|_e[24+f>>2]),_e[(_=e+124|0)>>2]=(0|_e[_>>2])-(0|_e[28+f>>2]),_e[(_=e+128|0)>>2]=(0|_e[_>>2])-(0|_e[32+f>>2]),_e[(_=e+132|0)>>2]=(0|_e[_>>2])-(0|_e[36+f>>2]),_e[(_=e+136|0)>>2]=(0|_e[_>>2])-(0|_e[40+f>>2]),_e[(_=e+140|0)>>2]=(0|_e[_>>2])-(0|_e[44+f>>2]),_e[(_=e+144|0)>>2]=(0|_e[_>>2])-(0|_e[48+f>>2]),_e[(_=e+148|0)>>2]=(0|_e[_>>2])-(0|_e[52+f>>2]),_e[(_=e+152|0)>>2]=(0|_e[_>>2])-(0|_e[56+f>>2]),_e[(_=e+156|0)>>2]=(0|_e[_>>2])-(0|_e[60+f>>2]),_e[(_=e+16|0)>>2]=0,_e[(d=e+20|0)>>2]=de[O>>0];r:do{if(a){do{if(!n)break r;n=(v=n)+-1|0}while(!(0|_e[k+(v<<2)>>2]));if(_e[_>>2]=_e[e+28+(n<<2)>>2],n=o+1|0,(_e[d>>2]=n)>>>0<=T>>>0){for(;!(0|_e[k+(n<<2)>>2]);)if(T>>>0<(n=n+1|0)>>>0)break r;_e[d>>2]=n}}}while(0);_e[e+92>>2]=-1,_e[e+160>>2]=1048575,_e[e+12>>2]=32-(0|_e[N>>2]),n=1}}while(0);return Te=g,0|(k=n)}function F(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0;if(e|=0){t=e+-8|0,i=0|_e[1148],f=t+(r=-8&(e=0|_e[e+-4>>2]))|0;do{if(1&e)o=u=t;else{if(n=0|_e[t>>2],!(3&e))return;if(a=n+r|0,(o=t+(0-n)|0)>>>0>>0)return;if((0|o)==(0|_e[1149])){if(3==(3&(r=0|_e[(e=f+4|0)>>2])|0))return _e[1146]=a,_e[e>>2]=-2&r,_e[o+4>>2]=1|a,void(_e[o+a>>2]=a);u=o,r=a;break}if(t=n>>>3,n>>>0<256){if(e=0|_e[o+8>>2],(0|(r=0|_e[o+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<>2]=r,_e[r+8>>2]=e,u=o,r=a;break}i=0|_e[o+24>>2],e=0|_e[o+12>>2];do{if((0|e)==(0|o)){if(!(e=0|_e[(r=(t=o+16|0)+4|0)>>2])){if(!(e=0|_e[t>>2])){e=0;break}r=t}for(;;)if(0|(n=0|_e[(t=e+20|0)>>2]))e=n,r=t;else{if(!(n=0|_e[(t=e+16|0)>>2]))break;e=n,r=t}_e[r>>2]=0}else u=0|_e[o+8>>2],_e[u+12>>2]=e,_e[e+8>>2]=u}while(0);if(i){if(r=0|_e[o+28>>2],(0|o)==(0|_e[(t=4880+(r<<2)|0)>>2])){if(!(_e[t>>2]=e)){_e[1145]=_e[1145]&~(1<>2])!=(0|o)&1)<<2)>>2]=e)){u=o,r=a;break}_e[e+24>>2]=i,0|(t=0|_e[(r=o+16|0)>>2])&&(_e[e+16>>2]=t,_e[t+24>>2]=e),r=(u=((r=0|_e[r+4>>2])&&(_e[e+20>>2]=r,_e[r+24>>2]=e),o),a)}else u=o,r=a}}while(0);if(!(f>>>0<=o>>>0)&&1&(n=0|_e[(e=f+4|0)>>2])){if(2&n)_e[e>>2]=-2&n,_e[u+4>>2]=1|r,i=_e[o+r>>2]=r;else{if(e=0|_e[1149],(0|f)==(0|_e[1150])){if(f=(0|_e[1147])+r|0,_e[1147]=f,_e[1150]=u,_e[u+4>>2]=1|f,(0|u)!=(0|e))return;return _e[1149]=0,void(_e[1146]=0)}if((0|f)==(0|e))return f=(0|_e[1146])+r|0,_e[1146]=f,_e[1149]=o,_e[u+4>>2]=1|f,void(_e[o+f>>2]=f);i=(-8&n)+r|0,t=n>>>3;do{if(n>>>0<256){if(r=0|_e[f+8>>2],(0|(e=0|_e[f+12>>2]))==(0|r)){_e[1144]=_e[1144]&~(1<>2]=e,_e[e+8>>2]=r;break}a=0|_e[f+24>>2],e=0|_e[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|_e[(r=(t=f+16|0)+4|0)>>2])){if(!(e=0|_e[t>>2])){t=0;break}r=t}for(;;)if(0|(n=0|_e[(t=e+20|0)>>2]))e=n,r=t;else{if(!(n=0|_e[(t=e+16|0)>>2]))break;e=n,r=t}_e[r>>2]=0,t=e}else t=0|_e[f+8>>2],_e[t+12>>2]=e,_e[e+8>>2]=t,t=e}while(0);if(0|a){if(e=0|_e[f+28>>2],(0|f)==(0|_e[(r=4880+(e<<2)|0)>>2])){if(!(_e[r>>2]=t)){_e[1145]=_e[1145]&~(1<>2])!=(0|f)&1)<<2)>>2]=t))break;_e[t+24>>2]=a,0|(r=0|_e[(e=f+16|0)>>2])&&(_e[t+16>>2]=r,_e[r+24>>2]=t),0|(e=0|_e[e+4>>2])&&(_e[t+20>>2]=e,_e[e+24>>2]=t)}}while(0);if(_e[u+4>>2]=1|i,_e[o+i>>2]=i,(0|u)==(0|_e[1149]))return void(_e[1146]=i)}if(e=i>>>3,i>>>0<256)return t=4616+(e<<1<<2)|0,(r=0|_e[1144])&(e=1<>2]:(_e[1144]=r|e,r=(e=t)+8|0),_e[r>>2]=u,_e[e+12>>2]=u,_e[u+8>>2]=e,void(_e[u+12>>2]=t);n=4880+((e=(e=i>>>8)?16777215>>0?31:i>>>((e=14-((a=((f=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(e=((f<<=a)+245760|0)>>>16&2))+(f<>>15)|0)+7|0)&1|e<<1:0)<<2)|0,_e[u+28>>2]=e,_e[u+20>>2]=0,r=(_e[u+16>>2]=0)|_e[1145],t=1<>>1)|0),t=0|_e[n>>2];;){if((-8&_e[t+4>>2]|0)==(0|i)){e=73;break}if(!(e=0|_e[(n=t+16+(r>>>31<<2)|0)>>2])){e=72;break}r<<=1,t=e}if(72==(0|e)){_e[n>>2]=u,_e[u+24>>2]=t,_e[u+12>>2]=u,_e[u+8>>2]=u;break}if(73==(0|e)){f=0|_e[(o=t+8|0)>>2],_e[f+12>>2]=u,_e[o>>2]=u,_e[u+8>>2]=f,_e[u+12>>2]=t,_e[u+24>>2]=0;break}}else _e[1145]=r|t,_e[n>>2]=u,_e[u+24>>2]=n,_e[u+12>>2]=u,_e[u+8>>2]=u}while(0);if(f=(0|_e[1152])-1|0,!(_e[1152]=f)){for(e=5032;e=0|_e[e>>2];)e=e+8|0;_e[1152]=-1}}}}function x(e,r){var t=0,n=0,i=0,a=0,o=0,u=0,f=0,f=(e|=0)+(r|=0)|0,t=0|_e[e+4>>2];do{if(1&t)u=e,t=r;else{if(n=0|_e[e>>2],!(3&t))return;if(o=n+r|0,(0|(a=e+(0-n)|0))==(0|_e[1149])){if(3==(3&(t=0|_e[(e=f+4|0)>>2])|0))return _e[1146]=o,_e[e>>2]=-2&t,_e[a+4>>2]=1|o,void(_e[a+o>>2]=o);u=a,t=o;break}if(r=n>>>3,n>>>0<256){if(e=0|_e[a+8>>2],(0|(t=0|_e[a+12>>2]))==(0|e)){_e[1144]=_e[1144]&~(1<>2]=t,_e[t+8>>2]=e,u=a,t=o;break}i=0|_e[a+24>>2],e=0|_e[a+12>>2];do{if((0|e)==(0|a)){if(!(e=0|_e[(t=(r=a+16|0)+4|0)>>2])){if(!(e=0|_e[r>>2])){e=0;break}t=r}for(;;)if(0|(n=0|_e[(r=e+20|0)>>2]))e=n,t=r;else{if(!(n=0|_e[(r=e+16|0)>>2]))break;e=n,t=r}_e[t>>2]=0}else u=0|_e[a+8>>2],_e[u+12>>2]=e,_e[e+8>>2]=u}while(0);if(i){if(t=0|_e[a+28>>2],(0|a)==(0|_e[(r=4880+(t<<2)|0)>>2])){if(!(_e[r>>2]=e)){_e[1145]=_e[1145]&~(1<>2])!=(0|a)&1)<<2)>>2]=e)){u=a,t=o;break}_e[e+24>>2]=i,0|(r=0|_e[(t=a+16|0)>>2])&&(_e[e+16>>2]=r,_e[r+24>>2]=e),t=(u=((t=0|_e[t+4>>2])&&(_e[e+20>>2]=t,_e[t+24>>2]=e),a),o)}else u=a,t=o}}while(0);if(2&(n=0|_e[(e=f+4|0)>>2]))_e[e>>2]=-2&n,_e[u+4>>2]=1|t,_e[u+t>>2]=t;else{if(e=0|_e[1149],(0|f)==(0|_e[1150]))return f=(0|_e[1147])+t|0,_e[1147]=f,_e[1150]=u,_e[u+4>>2]=1|f,(0|u)==(0|e)&&(_e[1149]=0,void(_e[1146]=0));if((0|f)==(0|e))return f=(0|_e[1146])+t|0,_e[1146]=f,_e[1149]=u,_e[u+4>>2]=1|f,void(_e[u+f>>2]=f);a=(-8&n)+t|0,r=n>>>3;do{if(n>>>0<256){if(t=0|_e[f+8>>2],(0|(e=0|_e[f+12>>2]))==(0|t)){_e[1144]=_e[1144]&~(1<>2]=e,_e[e+8>>2]=t;break}i=0|_e[f+24>>2],e=0|_e[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|_e[(t=(r=f+16|0)+4|0)>>2])){if(!(e=0|_e[r>>2])){r=0;break}t=r}for(;;)if(0|(n=0|_e[(r=e+20|0)>>2]))e=n,t=r;else{if(!(n=0|_e[(r=e+16|0)>>2]))break;e=n,t=r}_e[t>>2]=0,r=e}else r=0|_e[f+8>>2],_e[r+12>>2]=e,_e[e+8>>2]=r,r=e}while(0);if(0|i){if(e=0|_e[f+28>>2],(0|f)==(0|_e[(t=4880+(e<<2)|0)>>2])){if(!(_e[t>>2]=r)){_e[1145]=_e[1145]&~(1<>2])!=(0|f)&1)<<2)>>2]=r))break;_e[r+24>>2]=i,0|(t=0|_e[(e=f+16|0)>>2])&&(_e[r+16>>2]=t,_e[t+24>>2]=r),0|(e=0|_e[e+4>>2])&&(_e[r+20>>2]=e,_e[e+24>>2]=r)}}while(0);if(_e[u+4>>2]=1|a,_e[u+a>>2]=a,(0|u)==(0|_e[1149]))return void(_e[1146]=a);t=a}if(e=t>>>3,t>>>0<256)return r=4616+(e<<1<<2)|0,(t=0|_e[1144])&(e=1<>2]:(_e[1144]=t|e,t=(e=r)+8|0),_e[t>>2]=u,_e[e+12>>2]=u,_e[u+8>>2]=e,void(_e[u+12>>2]=r);if(i=4880+((e=(e=t>>>8)?16777215>>0?31:t>>>((e=14-((a=((f=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(e=((f<<=a)+245760|0)>>>16&2))+(f<>>15)|0)+7|0)&1|e<<1:0)<<2)|0,_e[u+28>>2]=e,_e[u+20>>2]=0,!((r=(_e[u+16>>2]=0)|_e[1145])&(n=1<>2]=u,_e[u+24>>2]=i,_e[u+12>>2]=u,void(_e[u+8>>2]=u);for(r=t<<(31==(0|e)?0:25-(e>>>1)|0),n=0|_e[i>>2];;){if((-8&_e[n+4>>2]|0)==(0|t)){e=69;break}if(!(e=0|_e[(i=n+16+(r>>>31<<2)|0)>>2])){e=68;break}r<<=1,n=e}return 68==(0|e)?(_e[i>>2]=u,_e[u+24>>2]=n,_e[u+12>>2]=u,void(_e[u+8>>2]=u)):69==(0|e)&&(f=0|_e[(o=n+8|0)>>2],_e[f+12>>2]=u,_e[o>>2]=u,_e[u+8>>2]=f,_e[u+12>>2]=n,void(_e[u+24>>2]=0))}function B(e,r,t,n,i){i|=0;var a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0,E=0,s=e|=0,o=t|=0,u=_=n|=0;if(!(l=f=r|=0))return a=0!=(0|i),u?(a&&(_e[i>>2]=0|e,_e[i+4>>2]=0&r),(i=_=0)|(L=_,i)):(a&&(_e[i>>2]=(s>>>0)%(o>>>0),_e[i+4>>2]=0),(_=0)|(L=_,i=(s>>>0)/(o>>>0)>>>0));a=0==(0|u);do{if(o){if(!a){if((a=(0|T(0|u))-(0|T(0|l))|0)>>>0<=31){e=s>>>((o=c=a+1|0)>>>0)&(r=a-31>>31)|l<<(u=31-a|0),r&=l>>>(c>>>0),a=0,u=s<>2]=0|e,_e[i+4>>2]=f|0&r,(i=_=0)|(L=_,i)):(i=_=0)|(L=_,i)}if((a=o-1|0)&o|0){e=(c=32-(u=33+(0|T(0|o))-(0|T(0|l))|0)|0)-1>>31&l>>>((d=u-32|0)>>>0)|(l<>>((o=u)>>>0))&(r=d>>31),r&=l>>>(u>>>0),a=s<<(E=64-u|0)&(f=c>>31),u=(l<>>(d>>>0))&f|s<>31;break}return 0|i&&(_e[i>>2]=a&s,_e[i+4>>2]=0),1==(0|o)?0|(L=d=f|0&r,E=0|e):(E=0|he(0|o),0|(L=d=l>>>(E>>>0)|0,E=l<<32-E|s>>>(E>>>0)|0))}if(a)return 0|i&&(_e[i>>2]=(l>>>0)%(o>>>0),_e[i+4>>2]=0),(d=0)|(L=d,E=(l>>>0)/(o>>>0)>>>0);if(!s)return 0|i&&(_e[i>>2]=0,_e[i+4>>2]=(l>>>0)%(u>>>0)),(d=0)|(L=d,E=(l>>>0)/(u>>>0)>>>0);if(!((a=u-1|0)&u))return 0|i&&(_e[i>>2]=0|e,_e[i+4>>2]=a&l|0&r),E=l>>>(((d=0)|he(0|u))>>>0),0|(L=d,E);if((a=(0|T(0|u))-(0|T(0|l))|0)>>>0<=30){e=l<<(u=31-a|0)|s>>>((o=r=a+1|0)>>>0),r=l>>>(r>>>0),a=0,u=s<>2]=0|e,_e[i+4>>2]=f|0&r),(E=d=0)|(L=d,E)}while(0);if(o){for(l=0|ge(0|(c=0|t),0|(s=_|0&n),-1,-1),t=L,f=u,u=0;f=a>>>31|(n=f)<<1,a=u|a<<1,ve(0|l,0|t,0|(n=e<<1|n>>>31|0),0|(_=e>>>31|r<<1|0)),u=1&(d=(E=L)>>31|((0|E)<0?-1:0)<<1),e=0|ve(0|n,0|_,d&c|0,(((0|E)<0?-1:0)>>31|((0|E)<0?-1:0)<<1)&s|0),r=L,0!=(0|(o=o-1|0)););l=f,f=0}else l=u,u=f=0;return(o=0)|i&&(_e[i>>2]=e,_e[i+4>>2]=r),0|(L=d=(0|a)>>>31|(l|o)<<1|0&(o<<1|a>>>31)|f,E=-2&(a<<1|0)|u)}function Ae(e,r){e|=0;var t,n,i,a,o,u,f,l=0,s=0,c=0,_=0,d=0,E=0,T=Te;Te=Te+576|0,i=T+48|0,o=T+32|0,a=T+16|0,f=(n=T)+64|0,u=0|_e[(r|=0)+20>>2],(0|(t=0|_e[(E=e+20|0)>>2]))<24?(s=(l=0|_e[(d=e+4|0)>>2])>>>0<(c=0|_e[e+8>>2])>>>0,(0|t)<16?(s?(_=(0|de[l>>0])<<8,l=l+1|0):_=0,l>>>0>>0?(c=0|de[l>>0],l=l+1|0):c=0,_e[d>>2]=l,_e[E>>2]=16+t,s=16,l=c|_):(l=s?(_e[d>>2]=l+1,0|de[l>>0]):0,_e[E>>2]=8+t,s=24),c=_e[(d=e+16|0)>>2]|l<>2]=c):c=0|_e[(d=c=e+16|0)>>2],_=1+(c>>>16)|0;do{if(!(_>>>0<=(0|_e[16+u>>2])>>>0)){for(s=0|_e[20+u>>2];_>>>0>(0|_e[28+u+((l=s+-1|0)<<2)>>2])>>>0;)s=s+1|0;if((l=(c>>>(32-s|0))+(0|_e[96+u+(l<<2)>>2])|0)>>>0<(0|_e[r>>2])>>>0){l=0|Ee[(0|_e[176+u>>2])+(l<<1)>>1];break}return _e[i>>2]=866,_e[4+i>>2]=3275,_e[8+i>>2]=1348,Ce(f,812,i),be(f),Te=T,(E=0)|E}-1==(0|(s=0|_e[(0|_e[168+u>>2])+(c>>>(32-(0|_e[8+u>>2])|0)<<2)>>2]))&&(_e[n>>2]=866,_e[n+4>>2]=3253,_e[n+8>>2]=1393,Ce(f,812,n),be(f)),l=65535&s,s>>>=16,(0|_e[r+8>>2])>>>0<=l>>>0&&(_e[a>>2]=866,_e[4+a>>2]=909,_e[8+a>>2]=1497,Ce(f,812,a),be(f)),(0|de[(0|_e[r+4>>2])+l>>0])!=(0|s)&&(_e[o>>2]=866,_e[4+o>>2]=3257,_e[8+o>>2]=1410,Ce(f,812,o),be(f))}while(0);return _e[d>>2]=_e[d>>2]<>2]=(0|_e[E>>2])-s,Te=T,0|(E=l)}function U(e){var r,t,n,i,a=0,o=0,u=0,f=Te;if(Te=Te+576|0,u=f+48|0,n=f+32|0,t=f+16|0,i=(r=f)+64|0,(_e[(e|=0)>>2]=0)|(o=0|_e[(a=e+284|0)>>2])&&(7&o?(_e[r>>2]=866,_e[r+4>>2]=2506,_e[r+8>>2]=1232,Ce(i,812,r),be(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+288>>2]=0,_e[e+292>>2]=0),(ce[e+296>>0]=0)|(o=0|_e[(a=e+268|0)>>2])&&(7&o?(_e[t>>2]=866,_e[4+t>>2]=2506,_e[8+t>>2]=1232,Ce(i,812,t),be(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+272>>2]=0,_e[e+276>>2]=0),(ce[e+280>>0]=0)|(o=0|_e[(a=e+252|0)>>2])&&(7&o?(_e[n>>2]=866,_e[4+n>>2]=2506,_e[8+n>>2]=1232,Ce(i,812,n),be(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+256>>2]=0,_e[e+260>>2]=0),!(o=(ce[e+264>>0]=0)|_e[(a=e+236|0)>>2]))return re(u=e+212|(ce[(u=e+248|0)>>0]=0)),re(u=e+188|0),re(u=e+164|0),re(u=e+140|0),re(u=e+116|0),void(Te=f);7&o?(_e[u>>2]=866,_e[u+4>>2]=2506,_e[u+8>>2]=1232,Ce(i,812,u),be(i)):ue(o,0,0,1,0),_e[a>>2]=0,_e[e+240>>2]=0,_e[e+244>>2]=0,re(u=e+212|(ce[(u=e+248|0)>>0]=0)),re(u=e+188|0),re(u=e+164|0),re(u=e+140|0),re(u=e+116|0),Te=f}function H(e,r,t){e|=0,r|=0,t|=0;var n=0,i=0,a=0;e:do{if(r>>>0<=20){switch(0|r){case 9:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[e>>2]=r;break e;case 10:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[(n=e)>>2]=r,_e[n+4>>2]=((0|r)<0)<<31>>31;break e;case 11:n=3+(0|_e[t>>2])&-4,r=0|_e[n>>2],_e[t>>2]=n+4,_e[(n=e)>>2]=r,_e[n+4>>2]=0;break e;case 12:n=7+(0|_e[t>>2])&-8,i=0|_e[(r=n)>>2],r=0|_e[r+4>>2],_e[t>>2]=n+8,_e[(n=e)>>2]=i,_e[n+4>>2]=r;break e;case 13:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,n=(65535&n)<<16>>16,_e[(i=e)>>2]=n,_e[i+4>>2]=((0|n)<0)<<31>>31;break e;case 14:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,_e[(i=e)>>2]=65535&n,_e[i+4>>2]=0;break e;case 15:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,n=(255&n)<<24>>24,_e[(i=e)>>2]=n,_e[i+4>>2]=((0|n)<0)<<31>>31;break e;case 16:i=3+(0|_e[t>>2])&-4,n=0|_e[i>>2],_e[t>>2]=i+4,_e[(i=e)>>2]=255&n,_e[i+4>>2]=0;break e;case 17:case 18:i=7+(0|_e[t>>2])&-8,a=+k[i>>3],_e[t>>2]=i+8,k[e>>3]=a;break e;default:break e}}}while(0)}function X(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0;var a,o,u,f,l,s=0,c=0,_=0,d=0,E=Te;if(Te=Te+576|0,f=E+48|0,a=E+32|0,c=E+16|0,u=(s=E)+64|0,l=E+60|0,d=(e|=0)+8|0,(0|_e[(o=e+4|0)>>2])>>>0>(0|_e[d>>2])>>>0&&(_e[s>>2]=866,_e[s+4>>2]=2123,_e[s+8>>2]=845,Ce(u,812,s),be(u)),(2147418112/(n>>>0)|0)>>>0<=r>>>0&&(_e[c>>2]=866,_e[c+4>>2]=2124,_e[c+8>>2]=885,Ce(u,812,c),be(u)),r>>>0<=(s=0|_e[d>>2])>>>0)return Te=E,0|(d=1);if(9==(0|(t=t&&0!=((_=r+-1|0)&r|0)?(r=_>>>16|_,r|=r>>>8,r|=r>>>4,(r=1+((r|=r>>>2)>>>1|r)|0)?9:(r=0,10)):9))&&r>>>0<=s>>>0&&(t=10),10==(0|t)&&(_e[a>>2]=866,_e[4+a>>2]=2133,_e[8+a>>2]=933,Ce(u,812,a),be(u)),_=0|ie(r,n),i)if(c=0|te(_,l)){Ze[0&i](c,0|_e[e>>2],0|_e[o>>2]),s=0|_e[e>>2];do{if(0|s){if(7&s){_e[f>>2]=866,_e[4+f>>2]=2506,_e[8+f>>2]=1232,Ce(u,812,f),be(u);break}ue(s,0,0,1,0);break}}while(0);_e[e>>2]=c,t=20}else r=0;else(s=0|function(e,r,t,n){r|=0,t|=0,n|=0;var i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+560|0,f=l+32|0,a=l+16|0,o=(i=l)+48|0,u=l+44|0,7&(e|=0)|0)return _e[i>>2]=866,_e[i+4>>2]=2506,_e[i+8>>2]=1210,Ce(o,812,i),be(o),Te=l,(f=0)|f;if(2147418112>>0)return _e[a>>2]=866,_e[4+a>>2]=2506,_e[8+a>>2]=1103,Ce(o,812,a),be(o),Te=l,(f=0)|f;_e[u>>2]=r,e=0|ue(e,r,u,n,0),0|t&&(_e[t>>2]=_e[u>>2]);7&e|0&&(_e[f>>2]=866,_e[f+4>>2]=2558,_e[f+8>>2]=1156,Ce(o,812,f),be(o));return Te=l,0|(f=e)}(0|_e[e>>2],_,l,1))?(_e[e>>2]=s,t=20):r=0;return 20==(0|t)&&(_>>>0<(s=0|_e[l>>2])>>>0&&(r=(s>>>0)/(n>>>0)|0),_e[d>>2]=r,r=1),Te=E,0|(d=r)}function Y(e,r,t,n,i,a,o){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0;var u,f=0,l=0,s=0|_e[(e|=0)+88>>2];if(f=((1<(f=(de[12+s>>0]<<8|de[13+s>>0])>>>o)>>>0?f:1)+3|0)>>>2,l=((1<(l=(de[14+s>>0]<<8|de[15+s>>0])>>>o)>>>0?l:1)+3|0)>>>2,o=0|ce[(s=18+s|0)>>0],o=0|ie(f,o<<24>>24==0|o<<24>>24==9?8:16),a){if(!(0==(3&a|0)&o>>>0<=a>>>0))return(i=0)|i;o=a}if((0|ie(o,l))>>>0>i>>>0)return(i=0)|i;if(a=(f+1|0)>>>1,u=(l+1|0)>>>1,!t)return(i=0)|i;switch(_e[e+92>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,(_e[e+112>>2]=0)|ce[s>>0]){case 0:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,b,M,m,S,h,R,P,p,C,N,y,O,v,k,g,L,I,w,D,G,F,x,B,U,H,W,V,X,Y,K=0,z=0,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=Te;if(Te=Te+656|0,X=ne+112|0,W=ne+96|0,H=ne+80|0,U=ne+64|0,B=ne+48|0,Y=ne+32|0,V=ne+16|0,G=(x=ne)+144|0,F=ne+128|0,y=0|_e[(N=(e|=0)+240|0)>>2],v=0|_e[(O=e+256|0)>>2],k=255&(D=0|ce[17+(0|_e[e+88>>2])>>0]),!(D<<24>>24))return Te=ne,1;L=0==(0|u),w=(I=o+-1|0)<<4,D=u+-1|0,S=0!=(1&a|0),h=n<<1,R=e+92|0,P=e+116|0,p=e+140|0,C=e+236|0,m=0!=(1&i|0),M=e+188|0,E=e+252|0,T=1+(g=n>>>2)|0,A=2+g|0,b=3+g|0,t=a=ee=0,i=1;do{if(!L)for(q=0|_e[r+(ee<<2)>>2],Q=0;;){if(z=0==(0|(_=1&Q)),c=(_<<5^32)-16|0,_=(_<<1^2)-1|0,d=S&(e=(0|Q)==(0|D)),(0|(K=z?0:I))!=(0|(s=z?o:-1)))for(l=S&e^1,Z=z?q:q+w|0;;){for(1==(0|i)&&(i=512|Ae(R,P)),f=7&i,i>>>=3,z=0|de[1539+f>>0],e=0;t=($=(J=(j=(0|Ae(R,p))+t|0)-y|0)>>31)&j|J&~$,(0|_e[N>>2])>>>0<=t>>>0&&(_e[x>>2]=866,_e[x+4>>2]=910,_e[x+8>>2]=1497,Ce(G,812,x),be(G)),_e[F+(e<<2)>>2]=_e[(0|_e[C>>2])+(t<<2)>>2],(e=e+1|0)>>>0>>0;);if(d|($=m&(0|K)==(0|I))){J=0;do{e=Z+(0|ie(J,n))|0,j=0==(0|J)|l,z=J<<1,a=(a=(re=(te=(0|Ae(R,M))+a|0)-v|0)>>31)&te|re&~a;do{if($){if(!j){a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a;break}_e[e>>2]=_e[F+((0|de[1547+(f<<2)+z>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[W>>2]=866,_e[4+W>>2]=910,_e[8+W>>2]=1497,Ce(G,812,W),be(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a}else j&&(_e[e>>2]=_e[F+((0|de[1547+(f<<2)+z>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[H>>2]=866,_e[4+H>>2]=910,_e[8+H>>2]=1497,Ce(G,812,H),be(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2]),e=e+8|0,a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a,j&&(_e[e>>2]=_e[F+((0|de[1547+(f<<2)+(1|z)>>0])<<2)>>2],(0|_e[O>>2])>>>0<=a>>>0&&(_e[X>>2]=866,_e[4+X>>2]=910,_e[8+X>>2]=1497,Ce(G,812,X),be(G)),_e[e+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2])}while(0);J=J+1|0}while(2!=(0|J))}else _e[Z>>2]=_e[F+((0|de[1547+(f<<2)>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[V>>2]=866,_e[4+V>>2]=910,_e[8+V>>2]=1497,Ce(G,812,V),be(G)),_e[Z+4>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+8>>2]=_e[F+((0|de[1547+(f<<2)+1>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[Y>>2]=866,_e[4+Y>>2]=910,_e[8+Y>>2]=1497,Ce(G,812,Y),be(G)),_e[Z+12>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+(g<<2)>>2]=_e[F+((0|de[1547+(f<<2)+2>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[B>>2]=866,_e[4+B>>2]=910,_e[8+B>>2]=1497,Ce(G,812,B),be(G)),_e[Z+(T<<2)>>2]=_e[(0|_e[E>>2])+(a<<2)>>2],_e[Z+(A<<2)>>2]=_e[F+((0|de[1547+(f<<2)+3>>0])<<2)>>2],a=(a=(te=(re=(0|Ae(R,M))+a|0)-v|0)>>31)&re|te&~a,(0|_e[O>>2])>>>0<=a>>>0&&(_e[U>>2]=866,_e[4+U>>2]=910,_e[8+U>>2]=1497,Ce(G,812,U),be(G)),_e[Z+(b<<2)>>2]=_e[(0|_e[E>>2])+(a<<2)>>2];if((0|(K=_+K|0))==(0|s))break;Z=Z+c|0}if((0|(Q=Q+1|0))==(0|u))break;q=q+h|0}ee=ee+1|0}while((0|ee)!=(0|k));return Te=ne,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 4:case 6:case 5:case 3:case 2:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,b,M,m,S,h,R,P,p,C,N,y,O,v,k,g,L,I,w,D,G,F,x,B,U,H,W,V,X,Y,K,z,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=0,ie=0,ae=0,oe=0,ue=0,fe=0,le=0,se=Te;if(Te=Te+640|0,Y=se+80|0,X=se+64|0,V=se+48|0,z=se+32|0,K=se+16|0,U=(W=se)+128|0,H=se+112|0,M=se+96|0,S=0|_e[(m=(e|=0)+240|0)>>2],R=0|_e[(h=e+256|0)>>2],p=0|_e[(P=e+272|0)>>2],B=0|_e[e+88>>2],C=(0|de[63+B>>0])<<8|0|de[64+B>>0],N=255&(B=0|ce[17+B>>0]),!(B<<24>>24))return Te=se,1;y=0==(0|u),v=(O=o+-1|0)<<5,k=u+-1|0,g=n<<1,L=e+92|0,I=e+116|0,w=e+164|0,D=e+268|0,G=e+140|0,F=e+236|0,x=e+212|0,B=e+188|0,b=0==(1&i|0),A=0==(1&a|0),E=e+288|0,T=e+284|0,d=e+252|0,t=i=a=e=le=0,j=1;do{if(!y)for(ue=0|_e[r+(le<<2)>>2],fe=0;;){if($=0==(0|(_=1&fe)),c=(_<<6^64)-32|0,_=(_<<1^2)-1|0,(0|(J=$?0:O))!=(0|(l=$?o:-1)))for(s=A|(0|fe)!=(0|k),oe=$?ue:ue+v|0;;){for(1==(0|j)&&(j=512|Ae(L,I)),f=7&j,j>>>=3,Z=0|de[1539+f>>0],$=0;a=(ae=(ie=(ne=(0|Ae(L,w))+a|0)-p|0)>>31)&ne|ie&~ae,(0|_e[P>>2])>>>0<=a>>>0&&(_e[W>>2]=866,_e[W+4>>2]=910,_e[W+8>>2]=1497,Ce(U,812,W),be(U)),_e[M+($<<2)>>2]=Ee[(0|_e[D>>2])+(a<<1)>>1],($=$+1|0)>>>0>>0;);for($=0;t=(ae=(ie=(ne=(0|Ae(L,G))+t|0)-S|0)>>31)&ne|ie&~ae,(0|_e[m>>2])>>>0<=t>>>0&&(_e[K>>2]=866,_e[4+K>>2]=910,_e[8+K>>2]=1497,Ce(U,812,K),be(U)),_e[H+($<<2)>>2]=_e[(0|_e[F>>2])+(t<<2)>>2],($=$+1|0)>>>0>>0;);for(ae=b|(0|J)!=(0|O),ne=0,ie=oe;;){if(ee=s|0==(0|ne),re=ne<<1,ae)for(q=0,Q=ie;e=(e=(Z=(te=(0|Ae(L,x))+e|0)-C|0)>>31)&te|Z&~e,i=(i=(te=(Z=(0|Ae(L,B))+i|0)-R|0)>>31)&Z|te&~i,ee&&($=0|de[q+re+(1547+(f<<2))>>0],Z=3*e|0,(0|_e[E>>2])>>>0<=Z>>>0&&(_e[z>>2]=866,_e[4+z>>2]=910,_e[8+z>>2]=1497,Ce(U,812,z),be(U)),te=(0|_e[T>>2])+(Z<<1)|0,_e[Q>>2]=(0|Ee[te>>1])<<16|_e[M+($<<2)>>2],_e[Q+4>>2]=(0|Ee[te+4>>1])<<16|0|Ee[te+2>>1],_e[Q+8>>2]=_e[H+($<<2)>>2],(0|_e[h>>2])>>>0<=i>>>0&&(_e[V>>2]=866,_e[4+V>>2]=910,_e[8+V>>2]=1497,Ce(U,812,V),be(U)),_e[Q+12>>2]=_e[(0|_e[d>>2])+(i<<2)>>2]),2!=(0|(q=q+1|0));)Q=Q+16|0;else for(te=1^ee,ee=1547+(f<<2)+re|0,q=0,Q=ie;e=(e=(Z=(re=(0|Ae(L,x))+e|0)-C|0)>>31)&re|Z&~e,i=(i=(re=(Z=(0|Ae(L,B))+i|0)-R|0)>>31)&Z|re&~i,0!=(0|q)|te||($=0|de[ee>>0],Z=3*e|0,(0|_e[E>>2])>>>0<=Z>>>0&&(_e[X>>2]=866,_e[4+X>>2]=910,_e[8+X>>2]=1497,Ce(U,812,X),be(U)),re=(0|_e[T>>2])+(Z<<1)|0,_e[Q>>2]=(0|Ee[re>>1])<<16|_e[M+($<<2)>>2],_e[Q+4>>2]=(0|Ee[re+4>>1])<<16|0|Ee[re+2>>1],_e[Q+8>>2]=_e[H+($<<2)>>2],(0|_e[h>>2])>>>0<=i>>>0&&(_e[Y>>2]=866,_e[4+Y>>2]=910,_e[8+Y>>2]=1497,Ce(U,812,Y),be(U)),_e[Q+12>>2]=_e[(0|_e[d>>2])+(i<<2)>>2]),2!=(0|(q=q+1|0));)Q=Q+16|0;if(2==(0|(ne=ne+1|0)))break;ie=ie+n|0}if((0|(J=_+J|0))==(0|l))break;oe=oe+c|0}if((0|(fe=fe+1|0))==(0|u))break;ue=ue+g|0}le=le+1|0}while((0|le)!=(0|N));return Te=se,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 9:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,b,M,m,S,h,R,P,p,C,N,y,O,v,k,g,L,I,w,D,G,F=0,x=0,B=0,U=0,H=0,W=0,V=0,X=0,Y=0,K=0,z=0,j=0,J=Te;if(Te=Te+592|0,w=J+48|0,G=J+32|0,D=J+16|0,g=(I=J)+80|0,L=J+64|0,M=0|_e[(b=(e|=0)+272|0)>>2],k=0|_e[e+88>>2],m=(0|de[63+k>>0])<<8|0|de[64+k>>0],S=255&(k=0|ce[17+k>>0]),!(k<<24>>24))return Te=J,1;h=0==(0|u),P=(R=o+-1|0)<<4,p=u+-1|0,C=n<<1,N=e+92|0,y=e+116|0,O=e+164|0,v=e+268|0,k=e+212|0,A=0==(1&i|0),T=0==(1&a|0),E=e+288|0,d=e+284|0,t=i=j=0,a=1;do{if(!h)for(K=0|_e[r+(j<<2)>>2],z=0;;){if(F=0==(0|(_=1&z)),c=(_<<5^32)-16|0,_=(_<<1^2)-1|0,(0|(e=F?0:R))!=(0|(l=F?o:-1)))for(s=T|(0|z)!=(0|p),Y=F?K:K+P|0;;){for(1==(0|a)&&(a=512|Ae(N,y)),f=7&a,a>>>=3,x=0|de[1539+f>>0],F=0;t=(X=(V=(W=(0|Ae(N,O))+t|0)-M|0)>>31)&W|V&~X,(0|_e[b>>2])>>>0<=t>>>0&&(_e[I>>2]=866,_e[I+4>>2]=910,_e[I+8>>2]=1497,Ce(g,812,I),be(g)),_e[L+(F<<2)>>2]=Ee[(0|_e[v>>2])+(t<<1)>>1],(F=F+1|0)>>>0>>0;);for(X=A|(0|e)!=(0|R),W=0,V=Y;H=s|0==(0|W),x=W<<1,U=(U=(B=(F=(0|Ae(N,k))+i|0)-m|0)>>31)&F|B&~U,X?(H&&(i=0|de[1547+(f<<2)+x>>0],F=3*U|0,(0|_e[E>>2])>>>0<=F>>>0&&(_e[D>>2]=866,_e[4+D>>2]=910,_e[8+D>>2]=1497,Ce(g,812,D),be(g)),B=(0|_e[d>>2])+(F<<1)|0,_e[V>>2]=(0|Ee[B>>1])<<16|_e[L+(i<<2)>>2],_e[V+4>>2]=(0|Ee[B+4>>1])<<16|0|Ee[B+2>>1]),B=V+8|0,i=(i=(U=(F=(0|Ae(N,k))+U|0)-m|0)>>31)&F|U&~i,H&&(F=0|de[1547+(f<<2)+(1|x)>>0],x=3*i|0,(0|_e[E>>2])>>>0<=x>>>0&&(_e[w>>2]=866,_e[4+w>>2]=910,_e[8+w>>2]=1497,Ce(g,812,w),be(g)),H=(0|_e[d>>2])+(x<<1)|0,_e[B>>2]=(0|Ee[H>>1])<<16|_e[L+(F<<2)>>2],_e[V+12>>2]=(0|Ee[H+4>>1])<<16|0|Ee[H+2>>1])):(H&&(i=0|de[1547+(f<<2)+x>>0],F=3*U|0,(0|_e[E>>2])>>>0<=F>>>0&&(_e[G>>2]=866,_e[4+G>>2]=910,_e[8+G>>2]=1497,Ce(g,812,G),be(g)),H=(0|_e[d>>2])+(F<<1)|0,_e[V>>2]=(0|Ee[H>>1])<<16|_e[L+(i<<2)>>2],_e[V+4>>2]=(0|Ee[H+4>>1])<<16|0|Ee[H+2>>1]),i=(i=(H=(U=(0|Ae(N,k))+U|0)-m|0)>>31)&U|H&~i),2!=(0|(W=W+1|0));)V=V+n|0;if((0|(e=_+e|0))==(0|l))break;Y=Y+c|0}if((0|(z=z+1|0))==(0|u))break;K=K+C|0}j=j+1|0}while((0|j)!=(0|S));return Te=J,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;case 8:case 7:if(!(0|function(e,r,t,n,i,a,o,u){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,u|=0;var f,l,s,c,_,d,E,T,A,b,M,m,S,h,R,P,p,C,N,y,O,v,k,g,L,I,w,D,G,F,x,B,U=0,H=0,W=0,V=0,X=0,Y=0,K=0,z=0,j=0,J=0,$=0,Z=0,q=0,Q=0,ee=0,re=0,te=0,ne=0,ie=0,ae=Te;if(Te=Te+640|0,F=ae+80|0,G=ae+64|0,D=ae+48|0,B=ae+32|0,x=ae+16|0,L=(w=ae)+128|0,I=ae+112|0,b=ae+96|0,m=0|_e[(M=(e|=0)+272|0)>>2],g=0|_e[e+88>>2],S=(0|de[63+g>>0])<<8|0|de[64+g>>0],h=255&(g=0|ce[17+g>>0]),!(g<<24>>24))return Te=ae,1;R=0==(0|u),p=(P=o+-1|0)<<5,C=u+-1|0,N=n<<1,y=e+92|0,O=e+116|0,v=e+164|0,k=e+268|0,g=e+212|0,A=0==(1&i|0),T=0==(1&a|0),E=e+288|0,d=e+284|0,t=i=a=e=ie=0,U=1;do{if(!R)for(te=0|_e[r+(ie<<2)>>2],ne=0;;){if(W=0==(0|(_=1&ne)),c=(_<<6^64)-32|0,_=(_<<1^2)-1|0,(0|(H=W?0:P))!=(0|(l=W?o:-1)))for(s=T|(0|ne)!=(0|C),re=W?te:te+p|0;;){for(1==(0|U)&&(U=512|Ae(y,O)),f=7&U,U>>>=3,V=0|de[1539+f>>0],W=0;t=(ee=(Q=(q=(0|Ae(y,v))+t|0)-m|0)>>31)&q|Q&~ee,(0|_e[M>>2])>>>0<=t>>>0&&(_e[w>>2]=866,_e[w+4>>2]=910,_e[w+8>>2]=1497,Ce(L,812,w),be(L)),_e[I+(W<<2)>>2]=Ee[(0|_e[k>>2])+(t<<1)>>1],(W=W+1|0)>>>0>>0;);for(W=0;a=(ee=(Q=(q=(0|Ae(y,v))+a|0)-m|0)>>31)&q|Q&~ee,(0|_e[M>>2])>>>0<=a>>>0&&(_e[x>>2]=866,_e[4+x>>2]=910,_e[8+x>>2]=1497,Ce(L,812,x),be(L)),_e[b+(W<<2)>>2]=Ee[(0|_e[k>>2])+(a<<1)>>1],(W=W+1|0)>>>0>>0;);for(ee=A|(0|H)!=(0|P),q=0,Q=re;;){if(J=s|0==(0|q),$=q<<1,ee)for(z=0,j=Q;i=(i=(K=(Z=(0|Ae(y,g))+i|0)-S|0)>>31)&Z|K&~i,e=(e=(Z=(K=(0|Ae(y,g))+e|0)-S|0)>>31)&K|Z&~e,J&&(K=0|de[z+$+(1547+(f<<2))>>0],V=3*i|0,(W=0|_e[E>>2])>>>0<=V>>>0&&(_e[B>>2]=866,_e[4+B>>2]=910,_e[8+B>>2]=1497,Ce(L,812,B),be(L),W=0|_e[E>>2]),V=(X=0|_e[d>>2])+(V<<1)|0,Z=(W=(Y=3*e|0)>>>0>>0?X:(_e[D>>2]=866,_e[4+D>>2]=910,_e[8+D>>2]=1497,Ce(L,812,D),be(L),0|_e[d>>2]))+(Y<<1)|0,_e[j>>2]=(0|Ee[V>>1])<<16|_e[I+(K<<2)>>2],_e[j+4>>2]=(0|Ee[V+4>>1])<<16|0|Ee[V+2>>1],_e[j+8>>2]=(0|Ee[Z>>1])<<16|_e[b+(K<<2)>>2],_e[j+12>>2]=(0|Ee[Z+4>>1])<<16|0|Ee[Z+2>>1]),2!=(0|(z=z+1|0));)j=j+16|0;else for(Z=1^J,J=1547+(f<<2)+$|0,z=0,j=Q;i=(i=(K=($=(0|Ae(y,g))+i|0)-S|0)>>31)&$|K&~i,e=(e=($=(K=(0|Ae(y,g))+e|0)-S|0)>>31)&K|$&~e,0!=(0|z)|Z||(K=0|de[J>>0],V=3*i|0,(W=0|_e[E>>2])>>>0<=V>>>0&&(_e[G>>2]=866,_e[4+G>>2]=910,_e[8+G>>2]=1497,Ce(L,812,G),be(L),W=0|_e[E>>2]),V=(X=0|_e[d>>2])+(V<<1)|0,$=(W=(Y=3*e|0)>>>0>>0?X:(_e[F>>2]=866,_e[4+F>>2]=910,_e[8+F>>2]=1497,Ce(L,812,F),be(L),0|_e[d>>2]))+(Y<<1)|0,_e[j>>2]=(0|Ee[V>>1])<<16|_e[I+(K<<2)>>2],_e[j+4>>2]=(0|Ee[V+4>>1])<<16|0|Ee[V+2>>1],_e[j+8>>2]=(0|Ee[$>>1])<<16|_e[b+(K<<2)>>2],_e[j+12>>2]=(0|Ee[$+4>>1])<<16|0|Ee[$+2>>1]),2!=(0|(z=z+1|0));)j=j+16|0;if(2==(0|(q=q+1|0)))break;Q=Q+n|0}if((0|(H=_+H|0))==(0|l))break;re=re+c|0}if((0|(ne=ne+1|0))==(0|u))break;te=te+N|0}ie=ie+1|0}while((0|ie)!=(0|h));return Te=ae,1}(e,n,i,o,f,l,a,u)))return(i=0)|i;break;default:return(i=0)|i}return 0|(i=1)}function K(e,r,t){e|=0,r|=0;var n,i,a;if(8192<=(0|(t|=0)))return 0|N(0|e,0|r,0|t);if(a=0|e,i=e+t|0,(3&e)==(3&r)){for(;3&e;){if(!t)return 0|a;ce[e>>0]=0|ce[r>>0],e=e+1|0,r=r+1|0,t=t-1|0}for(n=(t=-4&i|0)-64|0;(0|e)<=(0|n);)_e[e>>2]=_e[r>>2],_e[e+4>>2]=_e[r+4>>2],_e[e+8>>2]=_e[r+8>>2],_e[e+12>>2]=_e[r+12>>2],_e[e+16>>2]=_e[r+16>>2],_e[e+20>>2]=_e[r+20>>2],_e[e+24>>2]=_e[r+24>>2],_e[e+28>>2]=_e[r+28>>2],_e[e+32>>2]=_e[r+32>>2],_e[e+36>>2]=_e[r+36>>2],_e[e+40>>2]=_e[r+40>>2],_e[e+44>>2]=_e[r+44>>2],_e[e+48>>2]=_e[r+48>>2],_e[e+52>>2]=_e[r+52>>2],_e[e+56>>2]=_e[r+56>>2],_e[e+60>>2]=_e[r+60>>2],e=e+64|0,r=r+64|0;for(;(0|e)<(0|t);)_e[e>>2]=_e[r>>2],e=e+4|0,r=r+4|0}else for(t=i-4|0;(0|e)<(0|t);)ce[e>>0]=0|ce[r>>0],ce[e+1>>0]=0|ce[r+1>>0],ce[e+2>>0]=0|ce[r+2>>0],ce[e+3>>0]=0|ce[r+3>>0],e=e+4|0,r=r+4|0;for(;(0|e)<(0|i);)ce[e>>0]=0|ce[r>>0],e=e+1|0,r=r+1|0;return 0|a}function z(e,r,t){r|=0,t|=0;var n,i,a,o,u,f=0,l=0,s=0,c=0,_=0,d=Te;Te=Te+48|0,o=d+16|0,l=(s=d)+32|0,f=0|_e[(i=(e|=0)+28|0)>>2],_e[l>>2]=f,f=(0|_e[(a=e+20|0)>>2])-f|0,_e[l+4>>2]=f,_e[l+8>>2]=r,f=f+(_e[l+12>>2]=t)|0,n=e+60|0,_e[s>>2]=_e[n>>2],_e[s+4>>2]=l,_e[s+8>>2]=2,s=0|Le(0|v(146,0|s));e:do{if((0|f)!=(0|s)){for(r=2;!((0|s)<0);)if(f=f-s|0,r=((u=(_=0|_e[l+4>>2])>>>0>>0)<<31>>31)+r|0,_=s-(u?_:0)|0,_e[(l=u?l+8|0:l)>>2]=(0|_e[l>>2])+_,_e[(u=l+4|0)>>2]=(0|_e[u>>2])-_,_e[o>>2]=_e[n>>2],_e[4+o>>2]=l,_e[8+o>>2]=r,(0|f)==(0|(s=0|Le(0|v(146,0|o))))){c=3;break e}_e[e+16>>2]=0,_e[i>>2]=0,_e[a>>2]=0,_e[e>>2]=32|_e[e>>2],t=2==(0|r)?0:t-(0|_e[l+4>>2])|0}else c=3}while(0);return 3==(0|c)&&(_=0|_e[e+44>>2],_e[e+16>>2]=_+(0|_e[e+48>>2]),_e[i>>2]=_,_e[a>>2]=_),Te=d,0|t}function j(e,r,t){e|=0,r|=0,t|=0;var n,i,a,o,u,f,l,s,c,_=0,d=0,E=Te;for(Te=Te+224|0,f=E+120|0,c=(s=E)+136|0,d=(_=l=E+80|0)+40|0;(0|(_=_+4|(_e[_>>2]=0)))<(0|d););return _e[f>>2]=_e[t>>2],t=(0|D(0,r,f,s,l))<0?-1:(_e[e+76>>2],u=32&(t=0|_e[e>>2]),(0|ce[e+74>>0])<1&&(_e[e>>2]=-33&t),0|_e[(_=e+48|0)>>2]?t=0|D(e,r,f,s,l):(n=0|_e[(d=e+44|0)>>2],_e[d>>2]=c,_e[(i=e+28|0)>>2]=c,_e[(a=e+20|0)>>2]=c,_e[_>>2]=80,_e[(o=e+16|0)>>2]=80+c,t=0|D(e,r,f,s,l),n&&(ze[7&_e[e+36>>2]](e,0,0),t=0==(0|_e[a>>2])?-1:t,_e[d>>2]=n,_e[_>>2]=0,_e[o>>2]=0,_e[i>>2]=0,_e[a>>2]=0)),_=0|_e[e>>2],_e[e>>2]=_|u,0==(32&_|0)?t:-1),Te=E,0|t}function J(e,r,t,n){r|=0,t|=0,n|=0;var i,a,o,u,f,l,s,c=0,_=Te;for(Te=Te+64|0,l=_,f=0|_e[(e|=0)>>2],s=e+(0|_e[f-8>>2])|0,f=0|_e[f-4>>2],_e[l>>2]=t,_e[l+4>>2]=e,_e[l+8>>2]=r,_e[l+12>>2]=n,r=l+20|0,n=l+24|0,i=l+28|0,a=l+32|0,o=l+40|0,u=(c=e=l+16|0)+36|0;(0|(c=c+4|(_e[c>>2]=0)))<(0|u););W[e+36>>1]=0,ce[e+38>>0]=0;e:do{if(0|De(f,t))_e[l+48>>2]=1,Qe[3&_e[20+(0|_e[f>>2])>>2]](f,l,s,s,1,0),e=1==(0|_e[n>>2])?s:0;else{switch(je[3&_e[24+(0|_e[f>>2])>>2]](f,l,s,1,0),0|_e[l+36>>2]){case 0:e=1==(0|_e[o>>2])&1==(0|_e[i>>2])&1==(0|_e[a>>2])?0|_e[r>>2]:0;break e;case 1:break;default:e=0;break e}if(1!=(0|_e[n>>2])&&!(0==(0|_e[o>>2])&1==(0|_e[i>>2])&1==(0|_e[a>>2]))){e=0;break}e=0|_e[e>>2]}}while(0);return Te=_,0|e}function $(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=Te;if(Te=Te+544|0,o=f+16|0,i=(r=f)+32|0,8192<=((t=0|_e[(a=(e|=0)+8|0)>>2])+-1|0)>>>0&&(_e[r>>2]=866,_e[r+4>>2]=3006,_e[r+8>>2]=1257,Ce(i,812,r),be(i)),_e[e>>2]=t,u=(r=0|_e[(n=e+20|0)>>2])?t:((r=0|te(180,0))?(_e[(u=r+164|0)>>2]=0,_e[u+4>>2]=0,_e[u+8>>2]=0,_e[u+12>>2]=0):r=0,_e[n>>2]=r,0|_e[e>>2]),o=0|_e[a>>2]?u:(_e[o>>2]=866,_e[o+4>>2]=910,_e[o+8>>2]=1497,Ce(i,812,o),be(i),0|_e[e>>2]),i=0|_e[e+4>>2],!(16>>0))return e=(e=0)|G(r,u,i,e),Te=f,0|e;for(t=o,n=0;a=n+1|0,3>>0;)t>>>=1,n=a;return e=0|G(r,u,i,e=255&((e=n+2+(32!=(0|a)&1<>>0>>0&1)|0)>>>0<11?e:11)),Te=f,0|e}function Z(e){var r,t,n,i,a,o=0,u=0,f=Te;Te=Te+576|0,i=f+48|0,a=f+32|0,t=f+16|0,n=(r=f)+64|0,o=0|_e[(e|=0)+168>>2];do{if(0|o){if(u=0|_e[o+-4>>2],o=o+-8|0,0!=(0|u)&&(0|u)==(0|~_e[o>>2])||(_e[r>>2]=866,_e[r+4>>2]=651,_e[r+8>>2]=1579,Ce(n,812,r),be(n)),7&o){_e[t>>2]=866,_e[4+t>>2]=2506,_e[8+t>>2]=1232,Ce(n,812,t),be(n);break}ue(o,0,0,1,0);break}}while(0);if(o=0|_e[e+176>>2])return u=0|_e[o+-4>>2],o=o+-8|0,0!=(0|u)&&(0|u)==(0|~_e[o>>2])||(_e[a>>2]=866,_e[4+a>>2]=651,_e[8+a>>2]=1579,Ce(n,812,a),be(n)),7&o?(_e[i>>2]=866,_e[4+i>>2]=2506,_e[8+i>>2]=1232,Ce(n,812,i),be(n)):ue(o,0,0,1,0),void(Te=f);Te=f}function q(e,r,t){var n;return!(0!=(0|(e|=0))&73<(r|=0)>>>0&0!=(0|(t|=0)))||40!=(0|_e[t>>2])||18552!=((0|de[e>>0])<<8|0|de[e+1>>0]|0)||((0|de[e+2>>0])<<8|0|de[e+3>>0])>>>0<74||((0|de[e+7>>0])<<16|(0|de[e+6>>0])<<24|(0|de[e+8>>0])<<8|0|de[e+9>>0])>>>0>r>>>0?(t=0)|t:(_e[t+4>>2]=(0|de[e+12>>0])<<8|0|de[e+13>>0],_e[t+8>>2]=(0|de[e+14>>0])<<8|0|de[e+15>>0],_e[t+12>>2]=de[e+16>>0],_e[t+16>>2]=de[e+17>>0],r=e+18|0,_e[(n=t+32|0)>>2]=de[r>>0],r=(_e[4+n>>2]=0)|ce[r>>0],_e[t+20>>2]=r<<24>>24==0|r<<24>>24==9?8:16,_e[t+24>>2]=(0|de[e+26>>0])<<16|(0|de[e+25>>0])<<24|(0|de[e+27>>0])<<8|0|de[e+28>>0],_e[t+28>>2]=(0|de[e+30>>0])<<16|(0|de[e+29>>0])<<24|(0|de[e+31>>0])<<8|0|de[e+32>>0],0|(t=1))}function Q(e,r){e|=0;var t,n,i=0,a=0,o=0,u=0,f=0,l=Te;if(Te=Te+544|0,f=l+16|0,u=(i=l)+32|0,33<=(r|=0)>>>0&&(_e[i>>2]=866,_e[i+4>>2]=3199,_e[i+8>>2]=1350,Ce(u,812,i),be(u)),(0|r)<=(0|(i=0|_e[(n=e+20|0)>>2])))return u=i,f=(a=0|_e[(o=a=e+16|0)>>2])>>>(f=32-r|0),a<<=r,_e[o>>2]=a,r=u-r|0,_e[n>>2]=r,Te=l,0|f;for(a=e+4|0,o=e+8|0,t=e+16|0;e=(0|(e=0|_e[a>>2]))==(0|_e[o>>2])?0:(_e[a>>2]=e+1,0|de[e>>0]),i=i+8|0,33<=(0|(_e[n>>2]=i))&&(_e[f>>2]=866,_e[f+4>>2]=3208,_e[f+8>>2]=1366,Ce(u,812,f),be(u),i=0|_e[n>>2]),e=e<<32-i|_e[t>>2],_e[t>>2]=e,(0|i)<(0|r););return f=e>>>(f=32-r|0),u=e<>2]=u,r=i-r|0,_e[n>>2]=r,Te=l,0|f}function ee(e,r,t){e|=0,r|=0;var n,i=0,a=0,o=0,u=0;(a=0|_e[(i=(t|=0)+16|0)>>2])?o=5:0|Me(t)?i=0:(a=0|_e[i>>2],o=5);e:do{if(5==(0|o)){if((a-(i=u=0|_e[(n=t+20|0)>>2])|0)>>>0>>0){i=0|ze[7&_e[t+36>>2]](t,e,r);break}r:do{if(-1<(0|ce[t+75>>0])){for(u=r;;){if(!u){o=0,a=e;break r}if(10==(0|ce[e+(a=u+-1|0)>>0]))break;u=a}if((i=0|ze[7&_e[t+36>>2]](t,e,u))>>>0>>0)break e;a=e+(o=u)|0,r=r-u|0,i=0|_e[n>>2]}else o=0,a=e}while(0);K(0|i,0|a,0|r),_e[n>>2]=(0|_e[n>>2])+r,i=o+r|0}}while(0);return 0|i}function re(e){var r,t=0,n=0,i=0,a=Te;Te=Te+544|0,i=a+16|0,r=(n=a)+32|0,t=0|_e[(e|=0)+20>>2];do{if(0|t){if(Z(t),7&t){_e[n>>2]=866,_e[n+4>>2]=2506,_e[n+8>>2]=1232,Ce(r,812,n),be(r);break}ue(t,0,0,1,0);break}}while(0);if(!(n=0|_e[(t=e+4|0)>>2]))return ce[(i=e+16|0)>>0]=0,void(Te=a);7&n?(_e[i>>2]=866,_e[i+4>>2]=2506,_e[i+8>>2]=1232,Ce(r,812,i),be(r)):ue(n,0,0,1,0),_e[t>>2]=0,_e[e+8>>2]=0,_e[e+12>>2]=0,ce[(i=e+16|0)>>0]=0,Te=a}function te(e,r){r|=0;var t,n,i,a=0,o=0,u=0,f=Te;return Te=Te+560|0,u=f+32|0,i=f+16|0,n=(a=f)+48|0,t=f+44|0,2147418112<(o=0|(o=(e|=0)+3&-4)?o:4)>>>0?(_e[a>>2]=866,_e[a+4>>2]=2506,_e[a+8>>2]=1103,Ce(n,812,a),be(n),Te=f,(u=0)|u):(e=0|ue(0,_e[t>>2]=o,t,1,0),a=0|_e[t>>2],0|r&&(_e[r>>2]=a),0==(0|e)|a>>>0>>0?(_e[i>>2]=866,_e[4+i>>2]=2506,_e[8+i>>2]=1129,Ce(n,812,i),be(n),e=0):7&e&&(_e[u>>2]=866,_e[u+4>>2]=2533,_e[u+8>>2]=1156,Ce(n,812,u),be(n)),Te=f,0|(u=e))}function ne(e,r,t){r|=0;var n,i,a,o=(e|=0)+(t|=0)|0;if(r&=255,67<=(0|t)){for(;3&e;)ce[e>>0]=r,e=e+1|0;for(i=(n=-4&o|0)-64|0,a=r|r<<8|r<<16|r<<24;(0|e)<=(0|i);)_e[e>>2]=a,_e[e+4>>2]=a,_e[e+8>>2]=a,_e[e+12>>2]=a,_e[e+16>>2]=a,_e[e+20>>2]=a,_e[e+24>>2]=a,_e[e+28>>2]=a,_e[e+32>>2]=a,_e[e+36>>2]=a,_e[e+40>>2]=a,_e[e+44>>2]=a,_e[e+48>>2]=a,_e[e+52>>2]=a,_e[e+56>>2]=a,_e[e+60>>2]=a,e=e+64|0;for(;(0|e)<(0|n);)_e[e>>2]=a,e=e+4|0}for(;(0|e)<(0|o);)ce[e>>0]=r,e=e+1|0;return o-t|0}function ae(e,r,t,n,i){e|=0,t|=0,n|=0,i|=0;var a,o,u,f;ce[(r|=0)+53>>0]=1;do{if((0|_e[r+4>>2])==(0|n)){if(ce[r+52>>0]=1,u=r+54|0,f=r+48|0,o=r+24|0,e=r+36|0,!(a=0|_e[(n=r+16|0)>>2])){if(_e[n>>2]=t,_e[o>>2]=i,!((_e[e>>2]=1)==(0|_e[f>>2])&1==(0|i)))break;ce[u>>0]=1;break}if((0|a)!=(0|t)){_e[e>>2]=1+(0|_e[e>>2]),ce[u>>0]=1;break}2==(0|(e=0|_e[o>>2]))&&(e=_e[o>>2]=i),1==(0|_e[f>>2])&1==(0|e)&&(ce[u>>0]=1)}}while(0)}function oe(e,r){e|=0;var t,n,i=0,a=0,o=0,u=0,f=Te;Te=Te+16|0,n=255&(r|=0),ce[(t=f)>>0]=n,(o=0|_e[(a=e+16|0)>>2])?u=4:0|Me(e)?i=-1:(o=0|_e[a>>2],u=4);do{if(4==(0|u)){if((a=0|_e[(u=e+20|0)>>2])>>>0>>0&&(0|(i=255&r))!=(0|ce[e+75>>0])){_e[u>>2]=a+1,ce[a>>0]=n;break}i=1==(0|ze[7&_e[e+36>>2]](e,t,1))?0|de[t>>0]:-1}}while(0);return Te=f,0|i}function ue(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;do{if(e){if(!r){if(F(e),!t){r=0;break}r=_e[t>>2]=0;break}n?e=0==(0|(r=0|function(e,r){r|=0;var t=0,n=0;if(!(e|=0))return 0|(r=0|I(r));if(4294967231>>0)return _e[(r=296)>>2]=12,(r=0)|r;if(0|(t=0|function(e,r){r|=0;var t,n,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=(e|=0)+(i=-8&(l=0|_e[(s=e+4|0)>>2]))|0;if(!(3&l))return!(r>>>0<256)&&(r+4|0)>>>0<=i>>>0&&(i-r|0)>>>0<=_e[1264]<<1>>>0?0|e:(e=0)|e;if(r>>>0<=i>>>0)return(i=i-r|0)>>>0<=15||(f=e+r|0,_e[s>>2]=1&l|r|2,_e[f+4>>2]=3|i,_e[(s=f+i+4|0)>>2]=1|_e[s>>2],x(f,i)),0|e;if((0|c)==(0|_e[1150]))return i=(f=(0|_e[1147])+i|0)-r|0,a=e+r|0,f>>>0<=r>>>0?(e=0)|e:(_e[s>>2]=1&l|r|2,_e[a+4>>2]=1|i,_e[1150]=a,_e[1147]=i,0|e);if((0|c)==(0|_e[1149]))return(o=(0|_e[1146])+i|0)>>>0>>0?(e=0)|e:(a=1&l,15<(i=o-r|0)>>>0?(f=(l=e+r|0)+i|0,_e[s>>2]=a|r|2,_e[l+4>>2]=1|i,_e[f>>2]=i,_e[(a=f+4|0)>>2]=-2&_e[a>>2],a=l):(_e[s>>2]=a|o|2,_e[(a=e+o+4|0)>>2]=1|_e[a>>2],i=a=0),_e[1146]=i,_e[1149]=a,0|e);if(2&(a=0|_e[4+c>>2])|0)return(e=0)|e;if((n=(-8&a)+i|0)>>>0>>0)return(e=0)|e;f=n-r|0,o=a>>>3;do{if(a>>>0<256){if(a=0|_e[8+c>>2],(0|(i=0|_e[12+c>>2]))==(0|a)){_e[1144]=_e[1144]&~(1<>2]=i,_e[i+8>>2]=a;break}t=0|_e[24+c>>2],i=0|_e[12+c>>2];do{if((0|i)==(0|c)){if(i=0|_e[(a=(o=16+c|0)+4|0)>>2])u=a;else{if(!(i=0|_e[o>>2])){o=0;break}u=o}for(;;)if(0|(a=0|_e[(o=i+20|0)>>2]))i=a,u=o;else{if(!(o=0|_e[(a=i+16|0)>>2]))break;i=o,u=a}_e[u>>2]=0,o=i}else o=0|_e[8+c>>2],_e[o+12>>2]=i,_e[i+8>>2]=o,o=i}while(0);if(0|t){if(i=0|_e[28+c>>2],(0|c)==(0|_e[(a=4880+(i<<2)|0)>>2])){if(!(_e[a>>2]=o)){_e[1145]=_e[1145]&~(1<>2])!=(0|c)&1)<<2)>>2]=o))break;_e[o+24>>2]=t,0|(a=0|_e[(i=16+c|0)>>2])&&(_e[o+16>>2]=a,_e[a+24>>2]=o),0|(i=0|_e[i+4>>2])&&(_e[o+20>>2]=i,_e[i+24>>2]=o)}}while(0);return i=1&l,f>>>0<16?(_e[s>>2]=n|i|2,_e[(s=e+n+4|0)>>2]=1|_e[s>>2]):(l=e+r|0,_e[s>>2]=i|r|2,_e[l+4>>2]=3|f,_e[(s=l+f+4|0)>>2]=1|_e[s>>2],x(l,f)),0|e}(e+-8|0,r>>>0<11?16:r+11&-8)))return 0|(r=t+8|0);return(t=0|I(r))?(n=0|_e[e+-4>>2],K(0|t,0|e,0|((n=(-8&n)-(0==(3&n|0)?8:4)|0)>>>0>>0?n:r)),F(e),0|(r=t)):(r=0)|r}(e,r)))?e:r:r=0,t&&(i=0|pe(e),_e[t>>2]=i)}else r=0|I(r),t&&(e=r?0|pe(r):0,_e[t>>2]=e)}while(0);return 0|r}function fe(e,r,t){t|=0;var n;if(0<(r|=0)>>>0|0==(0|r)&4294967295<(e|=0)>>>0){for(;n=0|Pe(0|e,0|r,10,0),ce[(t=t+-1|0)>>0]=255&n|48,e=0|Fe(0|(n=e),0|r,10,0),9>>0|9==(0|r)&4294967295>>0;)r=L;r=e}else r=e;if(r)for(;ce[(t=t+-1|0)>>0]=(r>>>0)%10|48,!(r>>>0<10);)r=(r>>>0)/10|0;return 0|t}function le(e,r,t,n){e|=0,t|=0,n|=0;var i=0|_e[(e=(r|=0)+16|0)>>2],a=r+36|0,o=r+24|0;do{if(i){if((0|i)!=(0|t)){_e[a>>2]=1+(0|_e[a>>2]),_e[o>>2]=2,ce[r+54>>0]=1;break}2==(0|_e[o>>2])&&(_e[o>>2]=n)}else _e[e>>2]=t,_e[o>>2]=n,_e[a>>2]=1}while(0)}function be(e){e|=0;var r=0,t=0,n=0|_e[119];_e[76+n>>2];do{if((0|function(e,r){r|=0;var t=0;return t=0|function(e){var r=0,t=0,n=0,n=e|=0;e:do{if(3&n)for(r=n;;){if(!(0|ce[e>>0])){e=r;break e}if(!(3&(r=e=e+1|0))){t=4;break}}else t=4}while(0);if(4==(0|t)){for(;!((-2139062144&(r=0|_e[e>>2])^-2139062144)&r+-16843009);)e=e+4|0;if((255&r)<<24>>24)for(;0!=(0|ce[(e=e+1|0)>>0]););}return e-n|0}(e=e|0),((0|function(e,r,t,n){e|=0,n|=0;var i=0;i=0|ie(t|=0,r|=0),t=0==(0|r)?0:t,e=(_e[n+76>>2],0|ee(e,i,n));(0|e)!=(0|i)&&(t=(e>>>0)/(r>>>0)|0);return 0|t}(e,1,t,r))!=(0|t))<<31>>31|0}(e,n))<0)e=1;else{if(10!=(0|ce[75+n>>0])&&(t=0|_e[(r=20+n|0)>>2])>>>0<(0|_e[16+n>>2])>>>0){_e[r>>2]=t+1,ce[t>>0]=10,e=0;break}e=(0|oe(n,10))<0}}while(0);return e<<31>>31|0}function se(e,r,t,n,i){e|=0,r|=0;var a,o=Te;if(Te=Te+256|0,a=o,(0|(n|=0))<(0|(t|=0))&0==(73728&(i|=0)|0)){if(ne(0|a,0|r,0|((i=t-n|0)>>>0<256?i:256)),255>>0){for(r=t-n|0;Ie(e,a,256),255<(i=i+-256|0)>>>0;);i=255&r}Ie(e,a,i)}Te=o}function Me(e){var r=0,t=0|ce[(r=(e|=0)+74|0)>>0];return ce[r>>0]=255+t|t,0|(e=8&(r=0|_e[e>>2])?(_e[e>>2]=32|r,-1):(_e[e+8>>2]=0,t=(_e[e+4>>2]=0)|_e[e+44>>2],_e[e+28>>2]=t,_e[e+20>>2]=t,_e[e+16>>2]=t+(0|_e[e+48>>2]),0))}function me(e){var r=0,t=0;return 0<(0|(t=(e|=0)+15&-16|0))&(0|(e=(r=0|_e[_>>2])+t|0))<(0|r)|(0|e)<0?(M(),P(12),-1):(0|(_e[_>>2]=e))>(0|b())&&0==(0|A())?(_e[_>>2]=r,P(12),-1):0|r}function Se(e){var r=0,t=0,n=0,t=0|_e[(e|=0)>>2];if((n=(0|ce[t>>0])-48|0)>>>0<10)for(r=0;r=n+(10*r|0)|0,t=t+1|0,_e[e>>2]=t,(n=(0|ce[t>>0])-48|0)>>>0<10;);else r=0;return 0|r}function he(e){var r=0;return(0|(r=0|ce[d+(255&(e|=0))>>0]))<8?0|r:(0|(r=0|ce[d+(e>>8&255)>>0]))<8?r+8|0:(0|(r=0|ce[d+(e>>16&255)>>0]))<8?r+16|0:24+(0|ce[d+(e>>>24)>>0])|0}function Re(e,r,t,n){t|=0,n|=0;var i=0;(0|_e[(r|=0)+4>>2])==(0|t)&&1!=(0|_e[(i=r+28|0)>>2])&&(_e[i>>2]=n)}function Pe(e,r,t,n){var i,a=Te;return Te=Te+16|0,B(e|=0,r|=0,t|=0,n|=0,i=0|a),Te=a,0|(L=0|_e[4+i>>2],0|_e[i>>2])}function pe(e){var r;return(e|=0)?0|(1==(0|(e=3&(r=0|_e[e+-4>>2])))?0:(-8&r)-(0==(0|e)?8:4)|0):0}function Ce(e,r,t){e|=0,r|=0,t|=0;var n,i,a,o,u=Te;return Te=Te+16|0,_e[(n=u)>>2]=t,t=0|(i=e,a=r,o=n,0|function(e,r,t,n){e|=0,r|=0,t|=0,n|=0;var i,a=0,o=0,u=0,f=0,l=0,s=Te;for(Te=Te+128|0,a=s+124|0,u=604,i=(o=l=s)+124|0;_e[o>>2]=_e[u>>2],u=u+4|0,(0|(o=o+4|0))<(0|i););return 2147483646<(r+-1|0)>>>0?r?(_e[(r=296)>>2]=75,r=-1):(e=a,r=1,f=4):f=4,4==(0|f)&&(f=(f=-2-e|0)>>>0>>0?f:r,_e[l+48>>2]=f,_e[(a=l+20|0)>>2]=e,r=(_e[l+44>>2]=e)+f|0,_e[(e=l+16|0)>>2]=r,_e[l+28>>2]=r,r=0|j(l,t,n),f&&(l=0|_e[a>>2],ce[l+(((0|l)==(0|_e[e>>2]))<<31>>31)>>0]=0)),Te=s,0|r}(i|=0,2147483647,a|=0,o|=0)),Te=u,0|t}function Ne(e,r,t){return e|=0,r|=0,(0|(t|=0))<32?(L=r<>>32-t,e<>>t,e>>>t|(r&(1<>>t-32|(L=0)}function Oe(e,r){e|=0,r|=0;var t=Te;Te=Te+16|0,_e[t>>2]=r,j(r=0|_e[26],e,t),function(e,r){var t=0,n=0,i=0,a=0,o=255&(e|=0),t=255&e;_e[(r|=0)+76>>2],a=3;do{if(3==(0|a)){if((0|t)!=(0|ce[r+75>>0])&&(i=0|_e[(n=r+20|0)>>2])>>>0<(0|_e[r+16>>2])>>>0){_e[n>>2]=i+1,ce[i>>0]=o;break}t=0|oe(r,e)}}while(0)}(10,r),p()}function ve(e,r,t,n){return 0|(L=n=(r|=0)-(n|=0)-((e|=0)>>>0<(t|=0)>>>0|0)>>>0,e-t>>>0|0)}function ke(e){e=+e;var r;return k[g>>3]=e,r=0|_e[g>>2],L=0|_e[g+4>>2],0|r}function ge(e,r,t,n){return 0|(L=(r|=0)+(n|=0)+((t=(e|=0)+(t|=0)>>>0)>>>0>>0|0)>>>0,0|t)}function Le(e){return 4294963200<(e|=0)>>>0&&(_e[74]=0-e,e=-1),0|e}function Ie(e,r,t){r|=0,t|=0,32&_e[(e|=0)>>2]||ee(r,t,e)}function we(e,r){return r|=0,0|(e=(e|=0)?0|function(e,r){e|=0,r|=0;do{if(e){if(r>>>0<128){ce[e>>0]=r,e=1;break}if(!(0|_e[_e[420>>2]>>2])){if(57216==(-128&r|0)){ce[e>>0]=r,e=1;break}_e[(e=296)>>2]=84,e=-1;break}if(r>>>0<2048){ce[e>>0]=r>>>6|192,ce[e+1>>0]=63&r|128,e=2;break}if(r>>>0<55296|57344==(-8192&r|0)){ce[e>>0]=r>>>12|224,ce[e+1>>0]=r>>>6&63|128,ce[e+2>>0]=63&r|128,e=3;break}if((r+-65536|0)>>>0<1048576){ce[e>>0]=r>>>18|240,ce[e+1>>0]=r>>>12&63|128,ce[e+2>>0]=r>>>6&63|128,ce[e+3>>0]=63&r|128,e=4;break}_e[(e=296)>>2]=84,e=-1;break}e=1}while(0);return 0|e}(e,r):0)}function De(e,r){return(0|(e|=0))==(0|(r|=0))|0}function Ge(e,r){var t=0|xe(0|(e|=0));return 0|(0==(0|(r|=0))?e:t)}function Fe(e,r,t,n){return 0|B(e|=0,r|=0,t|=0,n|=0,0)}function xe(e){return(255&(e|=0))<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function Be(e,r,t,n,i,a){E(6)}function Ue(e,r,t,n,i){E(1)}function He(e){var r;r=e|=0,F(r|=0)}function We(e,r,t,n){E(7)}function Ve(e,r,t){return E(0),0}function Xe(e){}function Ye(e){E(2)}function Ke(){E(5)}var ze=[Ve,z,function(e,r,t){e|=0,r|=0,t|=0;var n,i,a=Te;return Te=Te+32|0,n=(i=a)+20|0,_e[i>>2]=_e[e+60>>2],_e[i+4>>2]=0,_e[i+8>>2]=r,_e[i+12>>2]=n,_e[i+16>>2]=t,e=(0|Le(0|O(140,0|i)))<0?_e[n>>2]=-1:0|_e[n>>2],Te=a,0|e},function(e,r,t){r|=0,t|=0;var n=0,i=Te;return Te=Te+32|0,n=i,_e[(e|=0)+36>>2]=1,0==(64&_e[e>>2]|0)&&(_e[n>>2]=_e[e+60>>2],_e[n+4>>2]=21523,_e[n+8>>2]=i+16,0|S(54,0|n))&&(ce[e+75>>0]=-1),n=0|z(e,r,t),Te=i,0|n},function(e,r,t){r|=0,t|=0;var n=0,i=0;return K(0|(i=0|_e[(n=(e|=0)+20|0)>>2]),0|r,0|(e=t>>>0<(e=(0|_e[e+16>>2])-i|0)>>>0?t:e)),_e[n>>2]=(0|_e[n>>2])+e,0|t},function(e,r,t){t|=0;var n,i,a=0,o=Te;if(Te=Te+64|0,i=o,0|De(e|=0,r|=0))r=1;else if(0!=(0|r)&&0!=(0|(a=0|J(r,32,16,0)))){for(n=(r=i+4|0)+52|0;(0|(r=r+4|(_e[r>>2]=0)))<(0|n););_e[i>>2]=a,_e[i+8>>2]=e,_e[i+12>>2]=-1,_e[i+48>>2]=1,er[3&_e[28+(0|_e[a>>2])>>2]](a,i,0|_e[t>>2],1),r=1==(0|_e[i+24>>2])?(_e[t>>2]=_e[i+16>>2],1):0}else r=0;return Te=o,0|r},Ve,Ve],je=[Ue,function(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0;var a=0;do{if(0|De(e,0|_e[r+8>>2]))Re(0,r,t,n);else if(0|De(e,0|_e[r>>2])){if(e=r+32|0,(0|_e[r+16>>2])!=(0|t)&&(0|_e[(a=r+20|0)>>2])!=(0|t)){_e[e>>2]=n,_e[a>>2]=t,_e[(n=r+40|0)>>2]=1+(0|_e[n>>2]),1==(0|_e[r+36>>2])&&2==(0|_e[r+24>>2])&&(ce[r+54>>0]=1),_e[r+44>>2]=4;break}1==(0|n)&&(_e[e>>2]=1)}}while(0)},function(e,r,t,n,i){e|=0,r|=0,t|=0,n|=0,i|=0;var a,o=0,u=0,f=0;do{if(0|De(e,0|_e[r+8>>2]))Re(0,r,t,n);else{if(o=e+8|0,!(0|De(e,0|_e[r>>2]))){f=0|_e[o>>2],je[3&_e[24+(0|_e[f>>2])>>2]](f,r,t,n,i);break}if(e=r+32|0,(0|_e[r+16>>2])!=(0|t)&&(0|_e[(u=r+20|0)>>2])!=(0|t)){if(_e[e>>2]=n,4==(0|_e[(n=r+44|0)>>2]))break;ce[(e=r+52|0)>>0]=0,o=(ce[(a=r+53|0)>>0]=0)|_e[o>>2],Qe[3&_e[20+(0|_e[o>>2])>>2]](o,r,t,t,1,i),0|ce[a>>0]?0|ce[e>>0]?e=3:(e=3,f=11):(e=4,f=11),11==(0|f)&&(_e[u>>2]=t,_e[(a=r+40|0)>>2]=1+(0|_e[a>>2]),1==(0|_e[r+36>>2])&&2==(0|_e[r+24>>2])&&(ce[r+54>>0]=1)),_e[n>>2]=e;break}1==(0|n)&&(_e[e>>2]=1)}}while(0)},Ue],Je=[Ye,Xe,He,Xe,Xe,He,function(e){var r=Te;Te=Te+16|0,F(e|=0),0|h(0|_e[1285],0)?Oe(4406,r):Te=r},Ye],$e=[function(e){return E(3),0},function(e){var r,t,n=Te;return Te=Te+16|0,r=n,e=0|(t=0|_e[(e|=0)+60>>2],0|(t|=0)),_e[r>>2]=e,e=0|Le(0|R(6,0|r)),Te=n,0|e}],Ze=[function(e,r,t){E(4)}],qe=[Ke,function(){var e,r,t,n,i=0,a=0,o=0,u=Te;Te=Te+48|0,n=u+32|0,r=u+24|0,o=u+16|0,u=(t=u)+36|0,0|(i=0|function(){var e=0,r=0;{if(Te=(e=Te)+16|0,!(0|C(5136,2)))return r=0|m(0|_e[1285]),Te=e,0|r;Oe(4307,e)}return 0}())&&0|(a=0|_e[i>>2])&&(1126902528==(-256&(e=0|_e[(i=a+48|0)>>2])|0)&1129074247==(0|(i=0|_e[i+4>>2]))||(_e[r>>2]=4168,Oe(4118,r)),i=1126902529==(0|e)&1129074247==(0|i)?0|_e[a+44>>2]:a+80|0,_e[u>>2]=i,a=0|_e[a>>2],i=0|_e[a+4>>2],0|ze[7&_e[16+(0|_e[2])>>2]](8,a,u)?(o=0|_e[u>>2],o=0|$e[1&_e[8+(0|_e[o>>2])>>2]](o),_e[t>>2]=4168,_e[t+4>>2]=i,_e[t+8>>2]=o,Oe(4032,t)):(_e[o>>2]=4168,_e[o+4>>2]=i,Oe(4077,o))),Oe(4156,n)},function(){var e=Te;Te=Te+16|0,0|y(5140,6)?Oe(4356,e):Te=e},Ke],Qe=[Be,function(e,r,t,n,i,a){t|=0,n|=0,i|=0,0|De(e|=0,0|_e[(r|=0)+8>>2])&&ae(0,r,t,n,i)},function(e,r,t,n,i,a){t|=0,n|=0,i|=0,a|=0,0|De(e|=0,0|_e[(r|=0)+8>>2])?ae(0,r,t,n,i):(e=0|_e[e+8>>2],Qe[3&_e[20+(0|_e[e>>2])>>2]](e,r,t,n,i,a))},Be],er=[We,function(e,r,t,n){t|=0,n|=0,0|De(e|=0,0|_e[(r|=0)+8>>2])&&le(0,r,t,n)},function(e,r,t,n){t|=0,n|=0,0|De(e|=0,0|_e[(r|=0)+8>>2])?le(0,r,t,n):(e=0|_e[e+8>>2],er[3&_e[28+(0|_e[e>>2])>>2]](e,r,t,n))},We];return{stackSave:function(){return 0|Te},_i64Subtract:ve,_crn_get_bytes_per_block:function(e,r){e|=0,r|=0;var t,n,i=0,a=Te;switch(Te=Te+576|0,n=a+40|0,t=a+56|0,_e[(i=a)>>2]=40,q(e,r,i),e=0|_e[(r=i+32|0)+4>>2],0|_e[r>>2]){case 0:if(!e)return Te=a,0|(i=8);e=14;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:e=e?14:13;break;case 9:case 10:if(!e)return Te=a,0|(i=8);e=14;break;default:e=14}return 13==(0|e)?(Te=a,0|(i=16)):14==(0|e)?(_e[n>>2]=866,_e[4+n>>2]=2672,_e[8+n>>2]=1251,Ce(t,812,n),be(t),Te=a,(i=0)|i):0},setThrew:function(e,r){},dynCall_viii:function(e,r,t,n){r|=0,t|=0,n|=0,Ze[0&(e|=0)](0|r,0|t,0|n)},_bitshift64Lshr:ye,_bitshift64Shl:Ne,dynCall_viiii:function(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0,er[3&(e|=0)](0|r,0|t,0|n,0|i)},setTempRet0:function(e){L=e|=0},_crn_decompress:function(e,r,t,n,i,a){e|=0,r|=0,t|=0,n|=0,i|=0,a|=0;var o,u,f,l=0,s=0,c=0,_=0,d=0,E=Te;switch(Te=Te+592|0,f=E+56|0,c=E+40|0,o=E+72|0,u=(d=E)+68|0,_e[d>>2]=40,q(e,r,d),l=(0|_e[d+4>>2])>>>i,s=(0|_e[d+8>>2])>>>i,n=0|_e[(d=d+32|0)+4>>2],0|_e[d>>2]){case 0:n?_=14:d=8;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:_=n?14:13;break;case 9:case 10:n?_=14:d=8;break;default:_=14}13==(0|_)?d=16:14==(0|_)&&(_e[c>>2]=866,_e[c+4>>2]=2672,_e[c+8>>2]=1251,Ce(o,812,c),be(o),d=0),_e[u>>2]=t,_=0|function(e,r){var t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0;if(Te=(_=Te)+528|0,u=(s=_)+16|0,0==(0|(e|=0))|(r|=0)>>>0<62)return Te=_,(d=0)|d;if(!(f=0|te(300,0)))return Te=_,(d=0)|d;_e[f>>2]=519686845,_e[4+f>>2]=0,_e[8+f>>2]=0,l=88+f|0,t=136+f|0,n=160+f|0,i=184+f|0,a=208+f|0,o=232+f|0,_e[(c=252+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,_e[(c=268+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,_e[(c=284+f|0)>>2]=0,_e[c+4>>2]=0,_e[c+8>>2]=0,ce[c+12>>0]=0,d=44+(c=l)|0;for(;_e[c>>2]=0,c=c+4|0,(0|c)<(0|d););if(ce[44+l>>0]=0,_e[t>>2]=0,_e[4+t>>2]=0,_e[8+t>>2]=0,_e[12+t>>2]=0,_e[16+t>>2]=0,ce[20+t>>0]=0,_e[n>>2]=0,_e[4+n>>2]=0,_e[8+n>>2]=0,_e[12+n>>2]=0,_e[16+n>>2]=0,ce[20+n>>0]=0,_e[i>>2]=0,_e[4+i>>2]=0,_e[8+i>>2]=0,_e[12+i>>2]=0,_e[16+i>>2]=0,ce[20+i>>0]=0,_e[a>>2]=0,_e[4+a>>2]=0,_e[8+a>>2]=0,_e[12+a>>2]=0,_e[16+a>>2]=0,ce[20+a>>0]=0,_e[o>>2]=0,_e[4+o>>2]=0,_e[8+o>>2]=0,_e[12+o>>2]=0,ce[16+o>>0]=0,0|function(e,r,t){e|=0;var n=0,i=0;if(!(0==(0|(r|=0))|(t|=0)>>>0<74||18552!=((0|de[r>>0])<<8|0|de[r+1>>0]|0))&&74<=((0|de[r+2>>0])<<8|0|de[r+3>>0])>>>0&&((0|de[r+7>>0])<<16|(0|de[r+6>>0])<<24|(0|de[r+8>>0])<<8|0|de[r+9>>0])>>>0<=t>>>0){if(_e[(n=e+88|0)>>2]=r,_e[e+4>>2]=r,_e[e+8>>2]=t,!(0|function(e){var r=0,t=0,n=0,i=0;if(i=92+(e|=0)|0,t=0|_e[(n=e+88|0)>>2],r=(0|_e[e+4>>2])+((0|de[68+t>>0])<<8|(0|de[67+t>>0])<<16|0|de[69+t>>0])|0,!(t=(0|de[65+t>>0])<<8|0|de[66+t>>0]))return(i=0)|i;if(_e[i>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,_e[e+112>>2]=0,!(0|V(i,e+116|0)))return(i=0)|i;r=0|_e[n>>2];do{if((0|de[r+39>>0])<<8|0|de[r+40>>0]){if(!(0|V(i,e+140|0)))return(i=0)|i;if(0|V(i,e+188|0)){r=0|_e[n>>2];break}return(i=0)|i}if(!((0|de[r+55>>0])<<8|0|de[r+56>>0]))return(i=0)|i}while(0);if((0|de[r+55>>0])<<8|0|de[r+56>>0]|0){if(!(0|V(i,e+164|0)))return(i=0)|i;if(!(0|V(i,e+212|0)))return(i=0)|i}return 0|(i=1)}(e)))return(i=0)|i;if(r=0|_e[n>>2],(0|de[r+39>>0])<<8|0|de[r+40>>0]?0|function(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0,s=0,c=0,_=0,d=0;if(Te=(d=Te)+576|0,i=(o=d)+64|0,_=d+16|0,r=0|_e[(n=88+(e|=0)|0)>>2],c=(0|de[r+39>>0])<<8|0|de[r+40>>0],l=e+236|0,(0|(t=0|_e[(a=e+240|0)>>2]))!=(0|c)){if(t>>>0<=c>>>0){do{if((0|_e[e+244>>2])>>>0>>0){if(0|X(l,c,(t+1|0)==(0|c),4,0)){r=0|_e[a>>2];break}return ce[e+248>>0]=1,Te=d,(_=0)|_}r=t}while(0);ne((0|_e[l>>2])+(r<<2)|0,0,c-r<<2|0),r=0|_e[n>>2]}_e[a>>2]=c}if(s=e+92|0,t=(0|_e[e+4>>2])+((0|de[r+34>>0])<<8|(0|de[r+33>>0])<<16|0|de[r+35>>0])|0,!(r=(0|de[r+37>>0])<<8|(0|de[r+36>>0])<<16|0|de[r+38>>0]))return Te=d,(_=0)|_;if(_e[s>>2]=t,_e[e+96>>2]=t,_e[e+104>>2]=r,_e[e+100>>2]=t+r,_e[e+108>>2]=0,_e[e+112>>2]=0,u=_+20|0,_e[_>>2]=0,_e[_+4>>2]=0,_e[_+8>>2]=0,_e[_+12>>2]=0,ce[_+16>>0]=0,f=_+24|0,_e[_+44>>2]=0,_e[u>>2]=0,_e[u+4>>2]=0,_e[u+8>>2]=0,_e[u+12>>2]=0,_e[u+16>>2]=0,ce[u+20>>0]=0,0|V(s,_)&&0|V(s,f))if(0|_e[a>>2]||(_e[o>>2]=866,_e[o+4>>2]=910,_e[o+8>>2]=1497,Ce(i,812,o),be(i)),c)for(t=(u=o=0)|_e[l>>2],a=i=r=e=n=0;;){if(o=(0|Ae(s,_))+o&31,a=(0|Ae(s,f))+a&63,i=(0|Ae(s,_))+i&31,r=(0|Ae(s,_))+r|0,e=(0|Ae(s,f))+e&63,n=(0|Ae(s,_))+n&31,_e[t>>2]=a<<5|o<<11|i|r<<27|e<<21|n<<16,c>>>0<=(u=u+1|0)>>>0){r=1;break}t=t+4|0,r&=31}else r=1;else r=0;return re(_+24|0),re(_),Te=d,0|(_=r)}(e)&&0|function(e){var r,t,n,i,a,o,u,f,l,s,c,_,d,E,T,A,b,M,m,S,h,R,P,p,C,N,y,O,v,k=0,g=0,L=0,I=0,w=0,D=0,G=0,F=0,x=0,B=Te;if(Te=Te+1008|0,w=(D=B)+496|0,F=B+472|0,E=B+276|0,T=B+80|0,A=B+16|0,g=0|_e[(e|=0)+88>>2],_=(0|de[g+47>>0])<<8|0|de[g+48>>0],d=e+92|0,k=(0|_e[e+4>>2])+((0|de[g+42>>0])<<8|(0|de[g+41>>0])<<16|0|de[g+43>>0])|0,!(g=(0|de[g+45>>0])<<8|(0|de[g+44>>0])<<16|0|de[g+46>>0]))return Te=B,(F=0)|F;if(_e[d>>2]=k,_e[e+96>>2]=k,_e[e+104>>2]=g,_e[e+100>>2]=k+g,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[F+20>>2]=0,_e[F>>2]=0,_e[F+4>>2]=0,_e[F+8>>2]=0,_e[F+12>>2]=0,(ce[F+16>>0]=0)|V(d,F)){for(k=0,L=g=-3;_e[E+(k<<2)>>2]=L,_e[T+(k<<2)>>2]=g,I=2<(0|L),49!=(0|(k=k+1|0));)g=(1&I)+g|0,L=I?-3:L+1|0;for(g=(k=A)+64|0;(0|(k=k+4|(_e[k>>2]=0)))<(0|g););L=e+252|0,k=0|_e[(g=e+256|0)>>2];e:do{if((0|k)==(0|_))G=13;else{if(k>>>0<=_>>>0){do{if((0|_e[e+260>>2])>>>0<_>>>0){if(0|X(L,_,(k+1|0)==(0|_),4,0)){k=0|_e[g>>2];break}ce[e+264>>0]=1,k=0;break e}}while(0);ne((0|_e[L>>2])+(k<<2)|0,0,_-k<<2|0)}_e[g>>2]=_,G=13}}while(0);do{if(13==(0|G)){if(!_){_e[D>>2]=866,_e[D+4>>2]=910,_e[D+8>>2]=1497,Ce(w,812,D),be(w),k=1;break}for(e=4+A|0,w=8+A|0,D=12+A|0,G=16+A|0,r=20+A|0,t=24+A|0,n=28+A|0,i=32+A|0,a=36+A|0,o=40+A|0,u=44+A|0,f=48+A|0,l=52+A|0,s=56+A|0,c=60+A|0,k=(I=0)|_e[L>>2],g=0|_e[e>>2],L=0|_e[A>>2];v=0|Ae(d,F),L=L+(0|_e[E+(v<<2)>>2])&3,g=g+(0|_e[T+(v<<2)>>2])&3,v=0|Ae(d,F),x=(0|_e[w>>2])+(0|_e[E+(v<<2)>>2])&3,_e[w>>2]=x,v=(0|_e[D>>2])+(0|_e[T+(v<<2)>>2])&3,_e[D>>2]=v,y=0|Ae(d,F),O=(0|_e[G>>2])+(0|_e[E+(y<<2)>>2])&3,_e[G>>2]=O,y=(0|_e[r>>2])+(0|_e[T+(y<<2)>>2])&3,_e[r>>2]=y,C=0|Ae(d,F),N=(0|_e[t>>2])+(0|_e[E+(C<<2)>>2])&3,_e[t>>2]=N,C=(0|_e[n>>2])+(0|_e[T+(C<<2)>>2])&3,_e[n>>2]=C,P=0|Ae(d,F),p=(0|_e[i>>2])+(0|_e[E+(P<<2)>>2])&3,_e[i>>2]=p,P=(0|_e[a>>2])+(0|_e[T+(P<<2)>>2])&3,_e[a>>2]=P,h=0|Ae(d,F),R=(0|_e[o>>2])+(0|_e[E+(h<<2)>>2])&3,_e[o>>2]=R,h=(0|_e[u>>2])+(0|_e[T+(h<<2)>>2])&3,_e[u>>2]=h,m=0|Ae(d,F),S=(0|_e[f>>2])+(0|_e[E+(m<<2)>>2])&3,_e[f>>2]=S,m=(0|_e[l>>2])+(0|_e[T+(m<<2)>>2])&3,_e[l>>2]=m,b=0|Ae(d,F),M=(0|_e[s>>2])+(0|_e[E+(b<<2)>>2])&3,_e[s>>2]=M,b=(0|_e[c>>2])+(0|_e[T+(b<<2)>>2])&3,_e[c>>2]=b,_e[k>>2]=(0|de[1441+g>>0])<<2|0|de[1441+L>>0]|(0|de[1441+x>>0])<<4|(0|de[1441+v>>0])<<6|(0|de[1441+O>>0])<<8|(0|de[1441+y>>0])<<10|(0|de[1441+N>>0])<<12|(0|de[1441+C>>0])<<14|(0|de[1441+p>>0])<<16|(0|de[1441+P>>0])<<18|(0|de[1441+R>>0])<<20|(0|de[1441+h>>0])<<22|(0|de[1441+S>>0])<<24|(0|de[1441+m>>0])<<26|(0|de[1441+M>>0])<<28|(0|de[1441+b>>0])<<30,!(_>>>0<=(I=I+1|0)>>>0);)k=k+4|0;_e[A>>2]=L,_e[e>>2]=g,k=1}}while(0)}else k=0;return re(F),Te=B,0|(x=k)}(e)&&(r=0|_e[n>>2],i=11):i=11,11==(0|i)){if(!((0|de[r+55>>0])<<8|0|de[r+56>>0]))return 0|(i=1);if(0|function(e){var r=0,t=0,n=0,i=0,a=0,o=0,u=0,f=0,l=0;if(Te=(l=Te)+560|0,n=(i=l)+40|0,f=l+16|0,t=0|_e[88+(e|=0)>>2],o=(0|de[t+55>>0])<<8|0|de[t+56>>0],u=e+92|0,r=(0|_e[e+4>>2])+((0|de[t+50>>0])<<8|(0|de[t+49>>0])<<16|0|de[t+51>>0])|0,!(t=(0|de[t+53>>0])<<8|(0|de[t+52>>0])<<16|0|de[t+54>>0]))return Te=l,(f=0)|f;_e[u>>2]=r,_e[e+96>>2]=r,_e[e+104>>2]=t,_e[e+100>>2]=r+t,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[f+20>>2]=0,_e[f>>2]=0,_e[f+4>>2]=0,_e[f+8>>2]=0,_e[f+12>>2]=0,ce[f+16>>0]=0;e:do{if(0|V(u,f)){if(a=e+268|0,(0|(r=0|_e[(t=e+272|0)>>2]))!=(0|o)){if(r>>>0<=o>>>0){do{if((0|_e[e+276>>2])>>>0>>0){if(0|X(a,o,(r+1|0)==(0|o),2,0)){r=0|_e[t>>2];break}ce[e+280>>0]=1,r=0;break e}}while(0);ne((0|_e[a>>2])+(r<<1)|0,0,o-r<<1|0)}_e[t>>2]=o}if(!o){_e[i>>2]=866,_e[i+4>>2]=910,_e[i+8>>2]=1497,Ce(n,812,i),be(n),r=1;break}for(r=(n=e=t=0)|_e[a>>2];;){if(a=0|Ae(u,f),n=a+n&255,e=(0|Ae(u,f))+e&255,W[r>>1]=e<<8|n,o>>>0<=(t=t+1|0)>>>0){r=1;break}r=r+2|0}}else r=0}while(0);return re(f),Te=l,0|(f=r)}(e)&&0|function(e){var r,t,n,i,a,o,u,f,l,s,c,_,d,E,T,A,b,M,m,S,h,R=0,P=0,p=0,C=0,N=0,y=0,O=0,v=0,k=0,g=0,L=0,I=0,w=0,D=0,G=0,F=0,x=0,B=0,U=0,H=Te;if(Te=Te+2416|0,N=(y=H)+1904|0,B=H+1880|0,M=H+980|0,m=H+80|0,S=H+16|0,P=0|_e[(e|=0)+88>>2],A=(0|de[P+63>>0])<<8|0|de[P+64>>0],b=e+92|0,R=(0|_e[e+4>>2])+((0|de[P+58>>0])<<8|(0|de[P+57>>0])<<16|0|de[P+59>>0])|0,!(P=(0|de[P+61>>0])<<8|(0|de[P+60>>0])<<16|0|de[P+62>>0]))return Te=H,(B=0)|B;if(_e[b>>2]=R,_e[e+96>>2]=R,_e[e+104>>2]=P,_e[e+100>>2]=R+P,_e[e+108>>2]=0,_e[e+112>>2]=0,_e[B+20>>2]=0,_e[B>>2]=0,_e[B+4>>2]=0,_e[B+8>>2]=0,_e[B+12>>2]=0,(ce[B+16>>0]=0)|V(b,B)){for(R=0,p=P=-7;_e[M+(R<<2)>>2]=p,_e[m+(R<<2)>>2]=P,C=6<(0|p),225!=(0|(R=R+1|0));)P=(1&C)+P|0,p=C?-7:p+1|0;for(P=(R=S)+64|0;(0|(R=R+4|(_e[R>>2]=0)))<(0|P););C=e+284|0,P=3*A|0,R=0|_e[(p=e+288|0)>>2];e:do{if((0|R)==(0|P))O=13;else{if(R>>>0<=P>>>0){do{if((0|_e[e+292>>2])>>>0
\ No newline at end of file diff --git a/cate/webapi/app/logo192.png b/cate/webapi/app/logo192.png new file mode 100644 index 000000000..a8d615332 Binary files /dev/null and b/cate/webapi/app/logo192.png differ diff --git a/cate/webapi/app/logo512.png b/cate/webapi/app/logo512.png new file mode 100644 index 000000000..fe41e3b7c Binary files /dev/null and b/cate/webapi/app/logo512.png differ diff --git a/cate/webapi/app/manifest.json b/cate/webapi/app/manifest.json new file mode 100644 index 000000000..bae913842 --- /dev/null +++ b/cate/webapi/app/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "Cate App", + "short_name": "Cate App", + "description": "Graphical user interface of Cate, the ESA CCI Toolbox", + "lang": "en-GB", + "start_url": ".", + "display": "standalone", + "orientation": "landscape", + "theme_color": "#394B59", + "background_color": "#394B59", + "icons": [ + { + "src": "favicon.ico", + "type": "image/x-icon", + "sizes": "256x256" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ] +} diff --git a/cate/webapi/app/oboe-browser.js b/cate/webapi/app/oboe-browser.js new file mode 100644 index 000000000..f7a32713b --- /dev/null +++ b/cate/webapi/app/oboe-browser.js @@ -0,0 +1,2706 @@ +// This file is the concatenation of many js files. +// See http://github.com/jimhigson/oboe.js for the raw source + +// having a local undefined, window, Object etc allows slightly better minification: +(function (window, Object, Array, Error, JSON, undefined ) { + + // v2.1.3-15-g7432b49 + +/* + +Copyright (c) 2013, Jim Higson + +All rights reserved. + +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. + +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. + +*/ + +/** + * Partially complete a function. + * + * var add3 = partialComplete( function add(a,b){return a+b}, 3 ); + * + * add3(4) // gives 7 + * + * function wrap(left, right, cen){return left + " " + cen + " " + right;} + * + * var pirateGreeting = partialComplete( wrap , "I'm", ", a mighty pirate!" ); + * + * pirateGreeting("Guybrush Threepwood"); + * // gives "I'm Guybrush Threepwood, a mighty pirate!" + */ +var partialComplete = varArgs(function( fn, args ) { + + // this isn't the shortest way to write this but it does + // avoid creating a new array each time to pass to fn.apply, + // otherwise could just call boundArgs.concat(callArgs) + + var numBoundArgs = args.length; + + return varArgs(function( callArgs ) { + + for (var i = 0; i < callArgs.length; i++) { + args[numBoundArgs + i] = callArgs[i]; + } + + args.length = numBoundArgs + callArgs.length; + + return fn.apply(this, args); + }); + }), + +/** + * Compose zero or more functions: + * + * compose(f1, f2, f3)(x) = f1(f2(f3(x)))) + * + * The last (inner-most) function may take more than one parameter: + * + * compose(f1, f2, f3)(x,y) = f1(f2(f3(x,y)))) + */ + compose = varArgs(function(fns) { + + var fnsList = arrayAsList(fns); + + function next(params, curFn) { + return [apply(params, curFn)]; + } + + return varArgs(function(startParams){ + + return foldR(next, startParams, fnsList)[0]; + }); + }); + +/** + * A more optimised version of compose that takes exactly two functions + * @param f1 + * @param f2 + */ +function compose2(f1, f2){ + return function(){ + return f1.call(this,f2.apply(this,arguments)); + } +} + +/** + * Generic form for a function to get a property from an object + * + * var o = { + * foo:'bar' + * } + * + * var getFoo = attr('foo') + * + * fetFoo(o) // returns 'bar' + * + * @param {String} key the property name + */ +function attr(key) { + return function(o) { return o[key]; }; +} + +/** + * Call a list of functions with the same args until one returns a + * truthy result. Similar to the || operator. + * + * So: + * lazyUnion([f1,f2,f3 ... fn])( p1, p2 ... pn ) + * + * Is equivalent to: + * apply([p1, p2 ... pn], f1) || + * apply([p1, p2 ... pn], f2) || + * apply([p1, p2 ... pn], f3) ... apply(fn, [p1, p2 ... pn]) + * + * @returns the first return value that is given that is truthy. + */ + var lazyUnion = varArgs(function(fns) { + + return varArgs(function(params){ + + var maybeValue; + + for (var i = 0; i < len(fns); i++) { + + maybeValue = apply(params, fns[i]); + + if( maybeValue ) { + return maybeValue; + } + } + }); + }); + +/** + * This file declares various pieces of functional programming. + * + * This isn't a general purpose functional library, to keep things small it + * has just the parts useful for Oboe.js. + */ + + +/** + * Call a single function with the given arguments array. + * Basically, a functional-style version of the OO-style Function#apply for + * when we don't care about the context ('this') of the call. + * + * The order of arguments allows partial completion of the arguments array + */ +function apply(args, fn) { + return fn.apply(undefined, args); +} + +/** + * Define variable argument functions but cut out all that tedious messing about + * with the arguments object. Delivers the variable-length part of the arguments + * list as an array. + * + * Eg: + * + * var myFunction = varArgs( + * function( fixedArgument, otherFixedArgument, variableNumberOfArguments ){ + * console.log( variableNumberOfArguments ); + * } + * ) + * + * myFunction('a', 'b', 1, 2, 3); // logs [1,2,3] + * + * var myOtherFunction = varArgs(function( variableNumberOfArguments ){ + * console.log( variableNumberOfArguments ); + * }) + * + * myFunction(1, 2, 3); // logs [1,2,3] + * + */ +function varArgs(fn){ + + var numberOfFixedArguments = fn.length -1, + slice = Array.prototype.slice; + + + if( numberOfFixedArguments == 0 ) { + // an optimised case for when there are no fixed args: + + return function(){ + return fn.call(this, slice.call(arguments)); + } + + } else if( numberOfFixedArguments == 1 ) { + // an optimised case for when there are is one fixed args: + + return function(){ + return fn.call(this, arguments[0], slice.call(arguments, 1)); + } + } + + // general case + + // we know how many arguments fn will always take. Create a + // fixed-size array to hold that many, to be re-used on + // every call to the returned function + var argsHolder = Array(fn.length); + + return function(){ + + for (var i = 0; i < numberOfFixedArguments; i++) { + argsHolder[i] = arguments[i]; + } + + argsHolder[numberOfFixedArguments] = + slice.call(arguments, numberOfFixedArguments); + + return fn.apply( this, argsHolder); + } +} + + +/** + * Swap the order of parameters to a binary function + * + * A bit like this flip: http://zvon.org/other/haskell/Outputprelude/flip_f.html + */ +function flip(fn){ + return function(a, b){ + return fn(b,a); + } +} + + +/** + * Create a function which is the intersection of two other functions. + * + * Like the && operator, if the first is truthy, the second is never called, + * otherwise the return value from the second is returned. + */ +function lazyIntersection(fn1, fn2) { + + return function (param) { + + return fn1(param) && fn2(param); + }; +} + +/** + * A function which does nothing + */ +function noop(){} + +/** + * A function which is always happy + */ +function always(){return true} + +/** + * Create a function which always returns the same + * value + * + * var return3 = functor(3); + * + * return3() // gives 3 + * return3() // still gives 3 + * return3() // will always give 3 + */ +function functor(val){ + return function(){ + return val; + } +} + +/** + * This file defines some loosely associated syntactic sugar for + * Javascript programming + */ + + +/** + * Returns true if the given candidate is of type T + */ +function isOfType(T, maybeSomething){ + return maybeSomething && maybeSomething.constructor === T; +} + +var len = attr('length'), + isString = partialComplete(isOfType, String); + +/** + * I don't like saying this: + * + * foo !=== undefined + * + * because of the double-negative. I find this: + * + * defined(foo) + * + * easier to read. + */ +function defined( value ) { + return value !== undefined; +} + +/** + * Returns true if object o has a key named like every property in + * the properties array. Will give false if any are missing, or if o + * is not an object. + */ +function hasAllProperties(fieldList, o) { + + return (o instanceof Object) + && + all(function (field) { + return (field in o); + }, fieldList); +} +/** + * Like cons in Lisp + */ +function cons(x, xs) { + + /* Internally lists are linked 2-element Javascript arrays. + + Ideally the return here would be Object.freeze([x,xs]) + so that bugs related to mutation are found fast. + However, cons is right on the critical path for + performance and this slows oboe-mark down by + ~25%. Under theoretical future JS engines that freeze more + efficiently (possibly even use immutability to + run faster) this should be considered for + restoration. + */ + + return [x,xs]; +} + +/** + * The empty list + */ +var emptyList = null, + +/** + * Get the head of a list. + * + * Ie, head(cons(a,b)) = a + */ + head = attr(0), + +/** + * Get the tail of a list. + * + * Ie, tail(cons(a,b)) = b + */ + tail = attr(1); + + +/** + * Converts an array to a list + * + * asList([a,b,c]) + * + * is equivalent to: + * + * cons(a, cons(b, cons(c, emptyList))) + **/ +function arrayAsList(inputArray){ + + return reverseList( + inputArray.reduce( + flip(cons), + emptyList + ) + ); +} + +/** + * A varargs version of arrayAsList. Works a bit like list + * in LISP. + * + * list(a,b,c) + * + * is equivalent to: + * + * cons(a, cons(b, cons(c, emptyList))) + */ +var list = varArgs(arrayAsList); + +/** + * Convert a list back to a js native array + */ +function listAsArray(list){ + + return foldR( function(arraySoFar, listItem){ + + arraySoFar.unshift(listItem); + return arraySoFar; + + }, [], list ); + +} + +/** + * Map a function over a list + */ +function map(fn, list) { + + return list + ? cons(fn(head(list)), map(fn,tail(list))) + : emptyList + ; +} + +/** + * foldR implementation. Reduce a list down to a single value. + * + * @pram {Function} fn (rightEval, curVal) -> result + */ +function foldR(fn, startValue, list) { + + return list + ? fn(foldR(fn, startValue, tail(list)), head(list)) + : startValue + ; +} + +/** + * foldR implementation. Reduce a list down to a single value. + * + * @pram {Function} fn (rightEval, curVal) -> result + */ +function foldR1(fn, list) { + + return tail(list) + ? fn(foldR1(fn, tail(list)), head(list)) + : head(list) + ; +} + + +/** + * Return a list like the one given but with the first instance equal + * to item removed + */ +function without(list, test, removedFn) { + + return withoutInner(list, removedFn || noop); + + function withoutInner(subList, removedFn) { + return subList + ? ( test(head(subList)) + ? (removedFn(head(subList)), tail(subList)) + : cons(head(subList), withoutInner(tail(subList), removedFn)) + ) + : emptyList + ; + } +} + +/** + * Returns true if the given function holds for every item in + * the list, false otherwise + */ +function all(fn, list) { + + return !list || + ( fn(head(list)) && all(fn, tail(list)) ); +} + +/** + * Call every function in a list of functions with the same arguments + * + * This doesn't make any sense if we're doing pure functional because + * it doesn't return anything. Hence, this is only really useful if the + * functions being called have side-effects. + */ +function applyEach(fnList, args) { + + if( fnList ) { + head(fnList).apply(null, args); + + applyEach(tail(fnList), args); + } +} + +/** + * Reverse the order of a list + */ +function reverseList(list){ + + // js re-implementation of 3rd solution from: + // http://www.haskell.org/haskellwiki/99_questions/Solutions/5 + function reverseInner( list, reversedAlready ) { + if( !list ) { + return reversedAlready; + } + + return reverseInner(tail(list), cons(head(list), reversedAlready)) + } + + return reverseInner(list, emptyList); +} + +function first(test, list) { + return list && + (test(head(list)) + ? head(list) + : first(test,tail(list))); +} + +/* + This is a slightly hacked-up browser only version of clarinet + + * some features removed to help keep browser Oboe under + the 5k micro-library limit + * plug directly into event bus + + For the original go here: + https://github.com/dscape/clarinet + + We receive the events: + STREAM_DATA + STREAM_END + + We emit the events: + SAX_KEY + SAX_VALUE_OPEN + SAX_VALUE_CLOSE + FAIL_EVENT + */ + +function clarinet(eventBus) { + "use strict"; + + var + // shortcut some events on the bus + emitSaxKey = eventBus(SAX_KEY).emit, + emitValueOpen = eventBus(SAX_VALUE_OPEN).emit, + emitValueClose = eventBus(SAX_VALUE_CLOSE).emit, + emitFail = eventBus(FAIL_EVENT).emit, + + MAX_BUFFER_LENGTH = 64 * 1024 + , stringTokenPattern = /[\\"\n]/g + , _n = 0 + + // states + , BEGIN = _n++ + , VALUE = _n++ // general stuff + , OPEN_OBJECT = _n++ // { + , CLOSE_OBJECT = _n++ // } + , OPEN_ARRAY = _n++ // [ + , CLOSE_ARRAY = _n++ // ] + , STRING = _n++ // "" + , OPEN_KEY = _n++ // , "a" + , CLOSE_KEY = _n++ // : + , TRUE = _n++ // r + , TRUE2 = _n++ // u + , TRUE3 = _n++ // e + , FALSE = _n++ // a + , FALSE2 = _n++ // l + , FALSE3 = _n++ // s + , FALSE4 = _n++ // e + , NULL = _n++ // u + , NULL2 = _n++ // l + , NULL3 = _n++ // l + , NUMBER_DECIMAL_POINT = _n++ // . + , NUMBER_DIGIT = _n // [0-9] + + // setup initial parser values + , bufferCheckPosition = MAX_BUFFER_LENGTH + , latestError + , c + , p + , textNode = undefined + , numberNode = "" + , slashed = false + , closed = false + , state = BEGIN + , stack = [] + , unicodeS = null + , unicodeI = 0 + , depth = 0 + , position = 0 + , column = 0 //mostly for error reporting + , line = 1 + ; + + function checkBufferLength () { + + var maxActual = 0; + + if (textNode !== undefined && textNode.length > MAX_BUFFER_LENGTH) { + emitError("Max buffer length exceeded: textNode"); + maxActual = Math.max(maxActual, textNode.length); + } + if (numberNode.length > MAX_BUFFER_LENGTH) { + emitError("Max buffer length exceeded: numberNode"); + maxActual = Math.max(maxActual, numberNode.length); + } + + bufferCheckPosition = (MAX_BUFFER_LENGTH - maxActual) + + position; + } + + eventBus(STREAM_DATA).on(handleData); + + /* At the end of the http content close the clarinet + This will provide an error if the total content provided was not + valid json, ie if not all arrays, objects and Strings closed properly */ + eventBus(STREAM_END).on(handleStreamEnd); + + function emitError (errorString) { + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + + latestError = Error(errorString + "\nLn: "+line+ + "\nCol: "+column+ + "\nChr: "+c); + + emitFail(errorReport(undefined, undefined, latestError)); + } + + function handleStreamEnd() { + if( state == BEGIN ) { + // Handle the case where the stream closes without ever receiving + // any input. This isn't an error - response bodies can be blank, + // particularly for 204 http responses + + // Because of how Oboe is currently implemented, we parse a + // completely empty stream as containing an empty object. + // This is because Oboe's done event is only fired when the + // root object of the JSON stream closes. + + // This should be decoupled and attached instead to the input stream + // from the http (or whatever) resource ending. + // If this decoupling could happen the SAX parser could simply emit + // zero events on a completely empty input. + emitValueOpen({}); + emitValueClose(); + + closed = true; + return; + } + + if (state !== VALUE || depth !== 0) + emitError("Unexpected end"); + + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + + closed = true; + } + + function whitespace(c){ + return c == '\r' || c == '\n' || c == ' ' || c == '\t'; + } + + function handleData (chunk) { + + // this used to throw the error but inside Oboe we will have already + // gotten the error when it was emitted. The important thing is to + // not continue with the parse. + if (latestError) + return; + + if (closed) { + return emitError("Cannot write after close"); + } + + var i = 0; + c = chunk[0]; + + while (c) { + if (i > 0) { + p = c; + } + c = chunk[i++]; + if(!c) break; + + position ++; + if (c == "\n") { + line ++; + column = 0; + } else column ++; + switch (state) { + + case BEGIN: + if (c === "{") state = OPEN_OBJECT; + else if (c === "[") state = OPEN_ARRAY; + else if (!whitespace(c)) + return emitError("Non-whitespace before {[."); + continue; + + case OPEN_KEY: + case OPEN_OBJECT: + if (whitespace(c)) continue; + if(state === OPEN_KEY) stack.push(CLOSE_KEY); + else { + if(c === '}') { + emitValueOpen({}); + emitValueClose(); + state = stack.pop() || VALUE; + continue; + } else stack.push(CLOSE_OBJECT); + } + if(c === '"') + state = STRING; + else + return emitError("Malformed object key should start with \" "); + continue; + + case CLOSE_KEY: + case CLOSE_OBJECT: + if (whitespace(c)) continue; + + if(c===':') { + if(state === CLOSE_OBJECT) { + stack.push(CLOSE_OBJECT); + + if (textNode !== undefined) { + // was previously (in upstream Clarinet) one event + // - object open came with the text of the first + emitValueOpen({}); + emitSaxKey(textNode); + textNode = undefined; + } + depth++; + } else { + if (textNode !== undefined) { + emitSaxKey(textNode); + textNode = undefined; + } + } + state = VALUE; + } else if (c==='}') { + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + emitValueClose(); + depth--; + state = stack.pop() || VALUE; + } else if(c===',') { + if(state === CLOSE_OBJECT) + stack.push(CLOSE_OBJECT); + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + state = OPEN_KEY; + } else + return emitError('Bad object'); + continue; + + case OPEN_ARRAY: // after an array there always a value + case VALUE: + if (whitespace(c)) continue; + if(state===OPEN_ARRAY) { + emitValueOpen([]); + depth++; + state = VALUE; + if(c === ']') { + emitValueClose(); + depth--; + state = stack.pop() || VALUE; + continue; + } else { + stack.push(CLOSE_ARRAY); + } + } + if(c === '"') state = STRING; + else if(c === '{') state = OPEN_OBJECT; + else if(c === '[') state = OPEN_ARRAY; + else if(c === 't') state = TRUE; + else if(c === 'f') state = FALSE; + else if(c === 'n') state = NULL; + else if(c === '-') { // keep and continue + numberNode += c; + } else if(c==='0') { + numberNode += c; + state = NUMBER_DIGIT; + } else if('123456789'.indexOf(c) !== -1) { + numberNode += c; + state = NUMBER_DIGIT; + } else + return emitError("Bad value"); + continue; + + case CLOSE_ARRAY: + if(c===',') { + stack.push(CLOSE_ARRAY); + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + state = VALUE; + } else if (c===']') { + if (textNode !== undefined) { + emitValueOpen(textNode); + emitValueClose(); + textNode = undefined; + } + emitValueClose(); + depth--; + state = stack.pop() || VALUE; + } else if (whitespace(c)) + continue; + else + return emitError('Bad array'); + continue; + + case STRING: + if (textNode === undefined) { + textNode = ""; + } + + // thanks thejh, this is an about 50% performance improvement. + var starti = i-1; + + STRING_BIGLOOP: while (true) { + + // zero means "no unicode active". 1-4 mean "parse some more". end after 4. + while (unicodeI > 0) { + unicodeS += c; + c = chunk.charAt(i++); + if (unicodeI === 4) { + // TODO this might be slow? well, probably not used too often anyway + textNode += String.fromCharCode(parseInt(unicodeS, 16)); + unicodeI = 0; + starti = i-1; + } else { + unicodeI++; + } + // we can just break here: no stuff we skipped that still has to be sliced out or so + if (!c) break STRING_BIGLOOP; + } + if (c === '"' && !slashed) { + state = stack.pop() || VALUE; + textNode += chunk.substring(starti, i-1); + break; + } + if (c === '\\' && !slashed) { + slashed = true; + textNode += chunk.substring(starti, i-1); + c = chunk.charAt(i++); + if (!c) break; + } + if (slashed) { + slashed = false; + if (c === 'n') { textNode += '\n'; } + else if (c === 'r') { textNode += '\r'; } + else if (c === 't') { textNode += '\t'; } + else if (c === 'f') { textNode += '\f'; } + else if (c === 'b') { textNode += '\b'; } + else if (c === 'u') { + // \uxxxx. meh! + unicodeI = 1; + unicodeS = ''; + } else { + textNode += c; + } + c = chunk.charAt(i++); + starti = i-1; + if (!c) break; + else continue; + } + + stringTokenPattern.lastIndex = i; + var reResult = stringTokenPattern.exec(chunk); + if (!reResult) { + i = chunk.length+1; + textNode += chunk.substring(starti, i-1); + break; + } + i = reResult.index+1; + c = chunk.charAt(reResult.index); + if (!c) { + textNode += chunk.substring(starti, i-1); + break; + } + } + continue; + + case TRUE: + if (!c) continue; // strange buffers + if (c==='r') state = TRUE2; + else + return emitError( 'Invalid true started with t'+ c); + continue; + + case TRUE2: + if (!c) continue; + if (c==='u') state = TRUE3; + else + return emitError('Invalid true started with tr'+ c); + continue; + + case TRUE3: + if (!c) continue; + if(c==='e') { + emitValueOpen(true); + emitValueClose(); + state = stack.pop() || VALUE; + } else + return emitError('Invalid true started with tru'+ c); + continue; + + case FALSE: + if (!c) continue; + if (c==='a') state = FALSE2; + else + return emitError('Invalid false started with f'+ c); + continue; + + case FALSE2: + if (!c) continue; + if (c==='l') state = FALSE3; + else + return emitError('Invalid false started with fa'+ c); + continue; + + case FALSE3: + if (!c) continue; + if (c==='s') state = FALSE4; + else + return emitError('Invalid false started with fal'+ c); + continue; + + case FALSE4: + if (!c) continue; + if (c==='e') { + emitValueOpen(false); + emitValueClose(); + state = stack.pop() || VALUE; + } else + return emitError('Invalid false started with fals'+ c); + continue; + + case NULL: + if (!c) continue; + if (c==='u') state = NULL2; + else + return emitError('Invalid null started with n'+ c); + continue; + + case NULL2: + if (!c) continue; + if (c==='l') state = NULL3; + else + return emitError('Invalid null started with nu'+ c); + continue; + + case NULL3: + if (!c) continue; + if(c==='l') { + emitValueOpen(null); + emitValueClose(); + state = stack.pop() || VALUE; + } else + return emitError('Invalid null started with nul'+ c); + continue; + + case NUMBER_DECIMAL_POINT: + if(c==='.') { + numberNode += c; + state = NUMBER_DIGIT; + } else + return emitError('Leading zero not followed by .'); + continue; + + case NUMBER_DIGIT: + if('0123456789'.indexOf(c) !== -1) numberNode += c; + else if (c==='.') { + if(numberNode.indexOf('.')!==-1) + return emitError('Invalid number has two dots'); + numberNode += c; + } else if (c==='e' || c==='E') { + if(numberNode.indexOf('e')!==-1 || + numberNode.indexOf('E')!==-1 ) + return emitError('Invalid number has two exponential'); + numberNode += c; + } else if (c==="+" || c==="-") { + if(!(p==='e' || p==='E')) + return emitError('Invalid symbol in number'); + numberNode += c; + } else { + if (numberNode) { + emitValueOpen(parseFloat(numberNode)); + emitValueClose(); + numberNode = ""; + } + i--; // go back one + state = stack.pop() || VALUE; + } + continue; + + default: + return emitError("Unknown state: " + state); + } + } + if (position >= bufferCheckPosition) + checkBufferLength(); + } +} + + +/** + * A bridge used to assign stateless functions to listen to clarinet. + * + * As well as the parameter from clarinet, each callback will also be passed + * the result of the last callback. + * + * This may also be used to clear all listeners by assigning zero handlers: + * + * ascentManager( clarinet, {} ) + */ +function ascentManager(oboeBus, handlers){ + "use strict"; + + var listenerId = {}, + ascent; + + function stateAfter(handler) { + return function(param){ + ascent = handler( ascent, param); + } + } + + for( var eventName in handlers ) { + + oboeBus(eventName).on(stateAfter(handlers[eventName]), listenerId); + } + + oboeBus(NODE_SWAP).on(function(newNode) { + + var oldHead = head(ascent), + key = keyOf(oldHead), + ancestors = tail(ascent), + parentNode; + + if( ancestors ) { + parentNode = nodeOf(head(ancestors)); + parentNode[key] = newNode; + } + }); + + oboeBus(NODE_DROP).on(function() { + + var oldHead = head(ascent), + key = keyOf(oldHead), + ancestors = tail(ascent), + parentNode; + + if( ancestors ) { + parentNode = nodeOf(head(ancestors)); + + delete parentNode[key]; + } + }); + + oboeBus(ABORTING).on(function(){ + + for( var eventName in handlers ) { + oboeBus(eventName).un(listenerId); + } + }); +} + +// based on gist https://gist.github.com/monsur/706839 + +/** + * XmlHttpRequest's getAllResponseHeaders() method returns a string of response + * headers according to the format described here: + * http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method + * This method parses that string into a user-friendly key/value pair object. + */ +function parseResponseHeaders(headerStr) { + var headers = {}; + + headerStr && headerStr.split('\u000d\u000a') + .forEach(function(headerPair){ + + // Can't use split() here because it does the wrong thing + // if the header value has the string ": " in it. + var index = headerPair.indexOf('\u003a\u0020'); + + headers[headerPair.substring(0, index)] + = headerPair.substring(index + 2); + }); + + return headers; +} + +/** + * Detect if a given URL is cross-origin in the scope of the + * current page. + * + * Browser only (since cross-origin has no meaning in Node.js) + * + * @param {Object} pageLocation - as in window.location + * @param {Object} ajaxHost - an object like window.location describing the + * origin of the url that we want to ajax in + */ +function isCrossOrigin(pageLocation, ajaxHost) { + + /* + * NB: defaultPort only knows http and https. + * Returns undefined otherwise. + */ + function defaultPort(protocol) { + return {'http:':80, 'https:':443}[protocol]; + } + + function portOf(location) { + // pageLocation should always have a protocol. ajaxHost if no port or + // protocol is specified, should use the port of the containing page + + return location.port || defaultPort(location.protocol||pageLocation.protocol); + } + + // if ajaxHost doesn't give a domain, port is the same as pageLocation + // it can't give a protocol but not a domain + // it can't give a port but not a domain + + return !!( (ajaxHost.protocol && (ajaxHost.protocol != pageLocation.protocol)) || + (ajaxHost.host && (ajaxHost.host != pageLocation.host)) || + (ajaxHost.host && (portOf(ajaxHost) != portOf(pageLocation))) + ); +} + +/* turn any url into an object like window.location */ +function parseUrlOrigin(url) { + // url could be domain-relative + // url could give a domain + + // cross origin means: + // same domain + // same port + // some protocol + // so, same everything up to the first (single) slash + // if such is given + // + // can ignore everything after that + + var URL_HOST_PATTERN = /(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/, + + // if no match, use an empty array so that + // subexpressions 1,2,3 are all undefined + // and will ultimately return all empty + // strings as the parse result: + urlHostMatch = URL_HOST_PATTERN.exec(url) || []; + + return { + protocol: urlHostMatch[1] || '', + host: urlHostMatch[2] || '', + port: urlHostMatch[3] || '' + }; +} + +function httpTransport(){ + return new XMLHttpRequest(); +} + +/** + * A wrapper around the browser XmlHttpRequest object that raises an + * event whenever a new part of the response is available. + * + * In older browsers progressive reading is impossible so all the + * content is given in a single call. For newer ones several events + * should be raised, allowing progressive interpretation of the response. + * + * @param {Function} oboeBus an event bus local to this Oboe instance + * @param {XMLHttpRequest} xhr the xhr to use as the transport. Under normal + * operation, will have been created using httpTransport() above + * but for tests a stub can be provided instead. + * @param {String} method one of 'GET' 'POST' 'PUT' 'PATCH' 'DELETE' + * @param {String} url the url to make a request to + * @param {String|Null} data some content to be sent with the request. + * Only valid if method is POST or PUT. + * @param {Object} [headers] the http request headers to send + * @param {boolean} withCredentials the XHR withCredentials property will be + * set to this value + */ +function streamingHttp(oboeBus, xhr, method, url, data, headers, withCredentials) { + + "use strict"; + + var emitStreamData = oboeBus(STREAM_DATA).emit, + emitFail = oboeBus(FAIL_EVENT).emit, + numberOfCharsAlreadyGivenToCallback = 0, + stillToSendStartEvent = true; + + // When an ABORTING message is put on the event bus abort + // the ajax request + oboeBus( ABORTING ).on( function(){ + + // if we keep the onreadystatechange while aborting the XHR gives + // a callback like a successful call so first remove this listener + // by assigning null: + xhr.onreadystatechange = null; + + xhr.abort(); + }); + + /** + * Handle input from the underlying xhr: either a state change, + * the progress event or the request being complete. + */ + function handleProgress() { + + var textSoFar = xhr.responseText, + newText = textSoFar.substr(numberOfCharsAlreadyGivenToCallback); + + + /* Raise the event for new text. + + On older browsers, the new text is the whole response. + On newer/better ones, the fragment part that we got since + last progress. */ + + if( newText ) { + emitStreamData( newText ); + } + + numberOfCharsAlreadyGivenToCallback = len(textSoFar); + } + + + if('onprogress' in xhr){ // detect browser support for progressive delivery + xhr.onprogress = handleProgress; + } + + xhr.onreadystatechange = function() { + + function sendStartIfNotAlready() { + // Internet Explorer is very unreliable as to when xhr.status etc can + // be read so has to be protected with try/catch and tried again on + // the next readyState if it fails + try{ + stillToSendStartEvent && oboeBus( HTTP_START ).emit( + xhr.status, + parseResponseHeaders(xhr.getAllResponseHeaders()) ); + stillToSendStartEvent = false; + } catch(e){/* do nothing, will try again on next readyState*/} + } + + switch( xhr.readyState ) { + + case 2: // HEADERS_RECEIVED + case 3: // LOADING + return sendStartIfNotAlready(); + + case 4: // DONE + sendStartIfNotAlready(); // if xhr.status hasn't been available yet, it must be NOW, huh IE? + + // is this a 2xx http code? + var successful = String(xhr.status)[0] == 2; + + if( successful ) { + // In Chrome 29 (not 28) no onprogress is emitted when a response + // is complete before the onload. We need to always do handleInput + // in case we get the load but have not had a final progress event. + // This looks like a bug and may change in future but let's take + // the safest approach and assume we might not have received a + // progress event for each part of the response + handleProgress(); + + oboeBus(STREAM_END).emit(); + } else { + + emitFail( errorReport( + xhr.status, + xhr.responseText + )); + } + } + }; + + try{ + + xhr.open(method, url, true); + + for( var headerName in headers ){ + xhr.setRequestHeader(headerName, headers[headerName]); + } + + if( !isCrossOrigin(window.location, parseUrlOrigin(url)) ) { + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + + xhr.withCredentials = withCredentials; + + xhr.send(data); + + } catch( e ) { + + // To keep a consistent interface with Node, we can't emit an event here. + // Node's streaming http adaptor receives the error as an asynchronous + // event rather than as an exception. If we emitted now, the Oboe user + // has had no chance to add a .fail listener so there is no way + // the event could be useful. For both these reasons defer the + // firing to the next JS frame. + window.setTimeout( + partialComplete(emitFail, errorReport(undefined, undefined, e)) + , 0 + ); + } +} + +var jsonPathSyntax = (function() { + + var + + /** + * Export a regular expression as a simple function by exposing just + * the Regex#exec. This allows regex tests to be used under the same + * interface as differently implemented tests, or for a user of the + * tests to not concern themselves with their implementation as regular + * expressions. + * + * This could also be expressed point-free as: + * Function.prototype.bind.bind(RegExp.prototype.exec), + * + * But that's far too confusing! (and not even smaller once minified + * and gzipped) + */ + regexDescriptor = function regexDescriptor(regex) { + return regex.exec.bind(regex); + } + + /** + * Join several regular expressions and express as a function. + * This allows the token patterns to reuse component regular expressions + * instead of being expressed in full using huge and confusing regular + * expressions. + */ + , jsonPathClause = varArgs(function( componentRegexes ) { + + // The regular expressions all start with ^ because we + // only want to find matches at the start of the + // JSONPath fragment we are inspecting + componentRegexes.unshift(/^/); + + return regexDescriptor( + RegExp( + componentRegexes.map(attr('source')).join('') + ) + ); + }) + + , possiblyCapturing = /(\$?)/ + , namedNode = /([\w-_]+|\*)/ + , namePlaceholder = /()/ + , nodeInArrayNotation = /\["([^"]+)"\]/ + , numberedNodeInArrayNotation = /\[(\d+|\*)\]/ + , fieldList = /{([\w ]*?)}/ + , optionalFieldList = /(?:{([\w ]*?)})?/ + + + // foo or * + , jsonPathNamedNodeInObjectNotation = jsonPathClause( + possiblyCapturing, + namedNode, + optionalFieldList + ) + + // ["foo"] + , jsonPathNamedNodeInArrayNotation = jsonPathClause( + possiblyCapturing, + nodeInArrayNotation, + optionalFieldList + ) + + // [2] or [*] + , jsonPathNumberedNodeInArrayNotation = jsonPathClause( + possiblyCapturing, + numberedNodeInArrayNotation, + optionalFieldList + ) + + // {a b c} + , jsonPathPureDuckTyping = jsonPathClause( + possiblyCapturing, + namePlaceholder, + fieldList + ) + + // .. + , jsonPathDoubleDot = jsonPathClause(/\.\./) + + // . + , jsonPathDot = jsonPathClause(/\./) + + // ! + , jsonPathBang = jsonPathClause( + possiblyCapturing, + /!/ + ) + + // nada! + , emptyString = jsonPathClause(/$/) + + ; + + + /* We export only a single function. When called, this function injects + into another function the descriptors from above. + */ + return function (fn){ + return fn( + lazyUnion( + jsonPathNamedNodeInObjectNotation + , jsonPathNamedNodeInArrayNotation + , jsonPathNumberedNodeInArrayNotation + , jsonPathPureDuckTyping + ) + , jsonPathDoubleDot + , jsonPathDot + , jsonPathBang + , emptyString + ); + }; + +}()); +/** + * Get a new key->node mapping + * + * @param {String|Number} key + * @param {Object|Array|String|Number|null} node a value found in the json + */ +function namedNode(key, node) { + return {key:key, node:node}; +} + +/** get the key of a namedNode */ +var keyOf = attr('key'); + +/** get the node from a namedNode */ +var nodeOf = attr('node'); +/** + * This file provides various listeners which can be used to build up + * a changing ascent based on the callbacks provided by Clarinet. It listens + * to the low-level events from Clarinet and emits higher-level ones. + * + * The building up is stateless so to track a JSON file + * ascentManager.js is required to store the ascent state + * between calls. + */ + + + +/** + * A special value to use in the path list to represent the path 'to' a root + * object (which doesn't really have any path). This prevents the need for + * special-casing detection of the root object and allows it to be treated + * like any other object. We might think of this as being similar to the + * 'unnamed root' domain ".", eg if I go to + * http://en.wikipedia.org./wiki/En/Main_page the dot after 'org' deliminates + * the unnamed root of the DNS. + * + * This is kept as an object to take advantage that in Javascript's OO objects + * are guaranteed to be distinct, therefore no other object can possibly clash + * with this one. Strings, numbers etc provide no such guarantee. + **/ +var ROOT_PATH = {}; + + +/** + * Create a new set of handlers for clarinet's events, bound to the emit + * function given. + */ +function incrementalContentBuilder( oboeBus ) { + + var emitNodeOpened = oboeBus(NODE_OPENED).emit, + emitNodeClosed = oboeBus(NODE_CLOSED).emit, + emitRootOpened = oboeBus(ROOT_PATH_FOUND).emit, + emitRootClosed = oboeBus(ROOT_NODE_FOUND).emit; + + function arrayIndicesAreKeys( possiblyInconsistentAscent, newDeepestNode) { + + /* for values in arrays we aren't pre-warned of the coming paths + (Clarinet gives no call to onkey like it does for values in objects) + so if we are in an array we need to create this path ourselves. The + key will be len(parentNode) because array keys are always sequential + numbers. */ + + var parentNode = nodeOf( head( possiblyInconsistentAscent)); + + return isOfType( Array, parentNode) + ? + keyFound( possiblyInconsistentAscent, + len(parentNode), + newDeepestNode + ) + : + // nothing needed, return unchanged + possiblyInconsistentAscent + ; + } + + function nodeOpened( ascent, newDeepestNode ) { + + if( !ascent ) { + // we discovered the root node, + emitRootOpened( newDeepestNode); + + return keyFound( ascent, ROOT_PATH, newDeepestNode); + } + + // we discovered a non-root node + + var arrayConsistentAscent = arrayIndicesAreKeys( ascent, newDeepestNode), + ancestorBranches = tail( arrayConsistentAscent), + previouslyUnmappedName = keyOf( head( arrayConsistentAscent)); + + appendBuiltContent( + ancestorBranches, + previouslyUnmappedName, + newDeepestNode + ); + + return cons( + namedNode( previouslyUnmappedName, newDeepestNode ), + ancestorBranches + ); + } + + + /** + * Add a new value to the object we are building up to represent the + * parsed JSON + */ + function appendBuiltContent( ancestorBranches, key, node ){ + + nodeOf( head( ancestorBranches))[key] = node; + } + + + /** + * For when we find a new key in the json. + * + * @param {String|Number|Object} newDeepestName the key. If we are in an + * array will be a number, otherwise a string. May take the special + * value ROOT_PATH if the root node has just been found + * + * @param {String|Number|Object|Array|Null|undefined} [maybeNewDeepestNode] + * usually this won't be known so can be undefined. Can't use null + * to represent unknown because null is a valid value in JSON + **/ + function keyFound(ascent, newDeepestName, maybeNewDeepestNode) { + + if( ascent ) { // if not root + + // If we have the key but (unless adding to an array) no known value + // yet. Put that key in the output but against no defined value: + appendBuiltContent( ascent, newDeepestName, maybeNewDeepestNode ); + } + + var ascentWithNewPath = cons( + namedNode( newDeepestName, + maybeNewDeepestNode), + ascent + ); + + emitNodeOpened( ascentWithNewPath); + + return ascentWithNewPath; + } + + + /** + * For when the current node ends. + */ + function nodeClosed( ascent ) { + + emitNodeClosed( ascent); + + return tail( ascent) || + // If there are no nodes left in the ascent the root node + // just closed. Emit a special event for this: + emitRootClosed(nodeOf(head(ascent))); + } + + var contentBuilderHandlers = {}; + contentBuilderHandlers[SAX_VALUE_OPEN] = nodeOpened; + contentBuilderHandlers[SAX_VALUE_CLOSE] = nodeClosed; + contentBuilderHandlers[SAX_KEY] = keyFound; + return contentBuilderHandlers; +} + +/** + * The jsonPath evaluator compiler used for Oboe.js. + * + * One function is exposed. This function takes a String JSONPath spec and + * returns a function to test candidate ascents for matches. + * + * String jsonPath -> (List ascent) -> Boolean|Object + * + * This file is coded in a pure functional style. That is, no function has + * side effects, every function evaluates to the same value for the same + * arguments and no variables are reassigned. + */ +// the call to jsonPathSyntax injects the token syntaxes that are needed +// inside the compiler +var jsonPathCompiler = jsonPathSyntax(function (pathNodeSyntax, + doubleDotSyntax, + dotSyntax, + bangSyntax, + emptySyntax ) { + + var CAPTURING_INDEX = 1; + var NAME_INDEX = 2; + var FIELD_LIST_INDEX = 3; + + var headKey = compose2(keyOf, head), + headNode = compose2(nodeOf, head); + + /** + * Create an evaluator function for a named path node, expressed in the + * JSONPath like: + * foo + * ["bar"] + * [2] + */ + function nameClause(previousExpr, detection ) { + + var name = detection[NAME_INDEX], + + matchesName = ( !name || name == '*' ) + ? always + : function(ascent){return headKey(ascent) == name}; + + + return lazyIntersection(matchesName, previousExpr); + } + + /** + * Create an evaluator function for a a duck-typed node, expressed like: + * + * {spin, taste, colour} + * .particle{spin, taste, colour} + * *{spin, taste, colour} + */ + function duckTypeClause(previousExpr, detection) { + + var fieldListStr = detection[FIELD_LIST_INDEX]; + + if (!fieldListStr) + return previousExpr; // don't wrap at all, return given expr as-is + + var hasAllrequiredFields = partialComplete( + hasAllProperties, + arrayAsList(fieldListStr.split(/\W+/)) + ), + + isMatch = compose2( + hasAllrequiredFields, + headNode + ); + + return lazyIntersection(isMatch, previousExpr); + } + + /** + * Expression for $, returns the evaluator function + */ + function capture( previousExpr, detection ) { + + // extract meaning from the detection + var capturing = !!detection[CAPTURING_INDEX]; + + if (!capturing) + return previousExpr; // don't wrap at all, return given expr as-is + + return lazyIntersection(previousExpr, head); + + } + + /** + * Create an evaluator function that moves onto the next item on the + * lists. This function is the place where the logic to move up a + * level in the ascent exists. + * + * Eg, for JSONPath ".foo" we need skip1(nameClause(always, [,'foo'])) + */ + function skip1(previousExpr) { + + + if( previousExpr == always ) { + /* If there is no previous expression this consume command + is at the start of the jsonPath. + Since JSONPath specifies what we'd like to find but not + necessarily everything leading down to it, when running + out of JSONPath to check against we default to true */ + return always; + } + + /** return true if the ascent we have contains only the JSON root, + * false otherwise + */ + function notAtRoot(ascent){ + return headKey(ascent) != ROOT_PATH; + } + + return lazyIntersection( + /* If we're already at the root but there are more + expressions to satisfy, can't consume any more. No match. + + This check is why none of the other exprs have to be able + to handle empty lists; skip1 is the only evaluator that + moves onto the next token and it refuses to do so once it + reaches the last item in the list. */ + notAtRoot, + + /* We are not at the root of the ascent yet. + Move to the next level of the ascent by handing only + the tail to the previous expression */ + compose2(previousExpr, tail) + ); + + } + + /** + * Create an evaluator function for the .. (double dot) token. Consumes + * zero or more levels of the ascent, the fewest that are required to find + * a match when given to previousExpr. + */ + function skipMany(previousExpr) { + + if( previousExpr == always ) { + /* If there is no previous expression this consume command + is at the start of the jsonPath. + Since JSONPath specifies what we'd like to find but not + necessarily everything leading down to it, when running + out of JSONPath to check against we default to true */ + return always; + } + + var + // In JSONPath .. is equivalent to !.. so if .. reaches the root + // the match has succeeded. Ie, we might write ..foo or !..foo + // and both should match identically. + terminalCaseWhenArrivingAtRoot = rootExpr(), + terminalCaseWhenPreviousExpressionIsSatisfied = previousExpr, + recursiveCase = skip1(function(ascent) { + return cases(ascent); + }), + + cases = lazyUnion( + terminalCaseWhenArrivingAtRoot + , terminalCaseWhenPreviousExpressionIsSatisfied + , recursiveCase + ); + + return cases; + } + + /** + * Generate an evaluator for ! - matches only the root element of the json + * and ignores any previous expressions since nothing may precede !. + */ + function rootExpr() { + + return function(ascent){ + return headKey(ascent) == ROOT_PATH; + }; + } + + /** + * Generate a statement wrapper to sit around the outermost + * clause evaluator. + * + * Handles the case where the capturing is implicit because the JSONPath + * did not contain a '$' by returning the last node. + */ + function statementExpr(lastClause) { + + return function(ascent) { + + // kick off the evaluation by passing through to the last clause + var exprMatch = lastClause(ascent); + + return exprMatch === true ? head(ascent) : exprMatch; + }; + } + + /** + * For when a token has been found in the JSONPath input. + * Compiles the parser for that token and returns in combination with the + * parser already generated. + * + * @param {Function} exprs a list of the clause evaluator generators for + * the token that was found + * @param {Function} parserGeneratedSoFar the parser already found + * @param {Array} detection the match given by the regex engine when + * the feature was found + */ + function expressionsReader( exprs, parserGeneratedSoFar, detection ) { + + // if exprs is zero-length foldR will pass back the + // parserGeneratedSoFar as-is so we don't need to treat + // this as a special case + + return foldR( + function( parserGeneratedSoFar, expr ){ + + return expr(parserGeneratedSoFar, detection); + }, + parserGeneratedSoFar, + exprs + ); + + } + + /** + * If jsonPath matches the given detector function, creates a function which + * evaluates against every clause in the clauseEvaluatorGenerators. The + * created function is propagated to the onSuccess function, along with + * the remaining unparsed JSONPath substring. + * + * The intended use is to create a clauseMatcher by filling in + * the first two arguments, thus providing a function that knows + * some syntax to match and what kind of generator to create if it + * finds it. The parameter list once completed is: + * + * (jsonPath, parserGeneratedSoFar, onSuccess) + * + * onSuccess may be compileJsonPathToFunction, to recursively continue + * parsing after finding a match or returnFoundParser to stop here. + */ + function generateClauseReaderIfTokenFound ( + + tokenDetector, clauseEvaluatorGenerators, + + jsonPath, parserGeneratedSoFar, onSuccess) { + + var detected = tokenDetector(jsonPath); + + if(detected) { + var compiledParser = expressionsReader( + clauseEvaluatorGenerators, + parserGeneratedSoFar, + detected + ), + + remainingUnparsedJsonPath = jsonPath.substr(len(detected[0])); + + return onSuccess(remainingUnparsedJsonPath, compiledParser); + } + } + + /** + * Partially completes generateClauseReaderIfTokenFound above. + */ + function clauseMatcher(tokenDetector, exprs) { + + return partialComplete( + generateClauseReaderIfTokenFound, + tokenDetector, + exprs + ); + } + + /** + * clauseForJsonPath is a function which attempts to match against + * several clause matchers in order until one matches. If non match the + * jsonPath expression is invalid and an error is thrown. + * + * The parameter list is the same as a single clauseMatcher: + * + * (jsonPath, parserGeneratedSoFar, onSuccess) + */ + var clauseForJsonPath = lazyUnion( + + clauseMatcher(pathNodeSyntax , list( capture, + duckTypeClause, + nameClause, + skip1 )) + + , clauseMatcher(doubleDotSyntax , list( skipMany)) + + // dot is a separator only (like whitespace in other languages) but + // rather than make it a special case, use an empty list of + // expressions when this token is found + , clauseMatcher(dotSyntax , list() ) + + , clauseMatcher(bangSyntax , list( capture, + rootExpr)) + + , clauseMatcher(emptySyntax , list( statementExpr)) + + , function (jsonPath) { + throw Error('"' + jsonPath + '" could not be tokenised') + } + ); + + + /** + * One of two possible values for the onSuccess argument of + * generateClauseReaderIfTokenFound. + * + * When this function is used, generateClauseReaderIfTokenFound simply + * returns the compiledParser that it made, regardless of if there is + * any remaining jsonPath to be compiled. + */ + function returnFoundParser(_remainingJsonPath, compiledParser){ + return compiledParser + } + + /** + * Recursively compile a JSONPath expression. + * + * This function serves as one of two possible values for the onSuccess + * argument of generateClauseReaderIfTokenFound, meaning continue to + * recursively compile. Otherwise, returnFoundParser is given and + * compilation terminates. + */ + function compileJsonPathToFunction( uncompiledJsonPath, + parserGeneratedSoFar ) { + + /** + * On finding a match, if there is remaining text to be compiled + * we want to either continue parsing using a recursive call to + * compileJsonPathToFunction. Otherwise, we want to stop and return + * the parser that we have found so far. + */ + var onFind = uncompiledJsonPath + ? compileJsonPathToFunction + : returnFoundParser; + + return clauseForJsonPath( + uncompiledJsonPath, + parserGeneratedSoFar, + onFind + ); + } + + /** + * This is the function that we expose to the rest of the library. + */ + return function(jsonPath){ + + try { + // Kick off the recursive parsing of the jsonPath + return compileJsonPathToFunction(jsonPath, always); + + } catch( e ) { + throw Error( 'Could not compile "' + jsonPath + + '" because ' + e.message + ); + } + } + +}); + +/** + * A pub/sub which is responsible for a single event type. A + * multi-event type event bus is created by pubSub by collecting + * several of these. + * + * @param {String} eventType + * the name of the events managed by this singleEventPubSub + * @param {singleEventPubSub} [newListener] + * place to notify of new listeners + * @param {singleEventPubSub} [removeListener] + * place to notify of when listeners are removed + */ +function singleEventPubSub(eventType, newListener, removeListener){ + + /** we are optimised for emitting events over firing them. + * As well as the tuple list which stores event ids and + * listeners there is a list with just the listeners which + * can be iterated more quickly when we are emitting + */ + var listenerTupleList, + listenerList; + + function hasId(id){ + return function(tuple) { + return tuple.id == id; + }; + } + + return { + + /** + * @param {Function} listener + * @param {*} listenerId + * an id that this listener can later by removed by. + * Can be of any type, to be compared to other ids using == + */ + on:function( listener, listenerId ) { + + var tuple = { + listener: listener + , id: listenerId || listener // when no id is given use the + // listener function as the id + }; + + if( newListener ) { + newListener.emit(eventType, listener, tuple.id); + } + + listenerTupleList = cons( tuple, listenerTupleList ); + listenerList = cons( listener, listenerList ); + + return this; // chaining + }, + + emit:function () { + applyEach( listenerList, arguments ); + }, + + un: function( listenerId ) { + + var removed; + + listenerTupleList = without( + listenerTupleList, + hasId(listenerId), + function(tuple){ + removed = tuple; + } + ); + + if( removed ) { + listenerList = without( listenerList, function(listener){ + return listener == removed.listener; + }); + + if( removeListener ) { + removeListener.emit(eventType, removed.listener, removed.id); + } + } + }, + + listeners: function(){ + // differs from Node EventEmitter: returns list, not array + return listenerList; + }, + + hasListener: function(listenerId){ + var test = listenerId? hasId(listenerId) : always; + + return defined(first( test, listenerTupleList)); + } + }; +} + +/** + * pubSub is a curried interface for listening to and emitting + * events. + * + * If we get a bus: + * + * var bus = pubSub(); + * + * We can listen to event 'foo' like: + * + * bus('foo').on(myCallback) + * + * And emit event foo like: + * + * bus('foo').emit() + * + * or, with a parameter: + * + * bus('foo').emit('bar') + * + * All functions can be cached and don't need to be + * bound. Ie: + * + * var fooEmitter = bus('foo').emit + * fooEmitter('bar'); // emit an event + * fooEmitter('baz'); // emit another + * + * There's also an uncurried[1] shortcut for .emit and .on: + * + * bus.on('foo', callback) + * bus.emit('foo', 'bar') + * + * [1]: http://zvon.org/other/haskell/Outputprelude/uncurry_f.html + */ +function pubSub(){ + + var singles = {}, + newListener = newSingle('newListener'), + removeListener = newSingle('removeListener'); + + function newSingle(eventName) { + return singles[eventName] = singleEventPubSub( + eventName, + newListener, + removeListener + ); + } + + /** pubSub instances are functions */ + function pubSubInstance( eventName ){ + + return singles[eventName] || newSingle( eventName ); + } + + // add convenience EventEmitter-style uncurried form of 'emit' and 'on' + ['emit', 'on', 'un'].forEach(function(methodName){ + + pubSubInstance[methodName] = varArgs(function(eventName, parameters){ + apply( parameters, pubSubInstance( eventName )[methodName]); + }); + }); + + return pubSubInstance; +} + +/** + * This file declares some constants to use as names for event types. + */ + +var // the events which are never exported are kept as + // the smallest possible representation, in numbers: + _S = 1, + + // fired whenever a new node starts in the JSON stream: + NODE_OPENED = _S++, + + // fired whenever a node closes in the JSON stream: + NODE_CLOSED = _S++, + + // called if a .node callback returns a value - + NODE_SWAP = _S++, + NODE_DROP = _S++, + + FAIL_EVENT = 'fail', + + ROOT_NODE_FOUND = _S++, + ROOT_PATH_FOUND = _S++, + + HTTP_START = 'start', + STREAM_DATA = 'data', + STREAM_END = 'end', + ABORTING = _S++, + + // SAX events butchered from Clarinet + SAX_KEY = _S++, + SAX_VALUE_OPEN = _S++, + SAX_VALUE_CLOSE = _S++; + +function errorReport(statusCode, body, error) { + try{ + var jsonBody = JSON.parse(body); + }catch(e){} + + return { + statusCode:statusCode, + body:body, + jsonBody:jsonBody, + thrown:error + }; +} + +/** + * The pattern adaptor listens for newListener and removeListener + * events. When patterns are added or removed it compiles the JSONPath + * and wires them up. + * + * When nodes and paths are found it emits the fully-qualified match + * events with parameters ready to ship to the outside world + */ + +function patternAdapter(oboeBus, jsonPathCompiler) { + + var predicateEventMap = { + node:oboeBus(NODE_CLOSED) + , path:oboeBus(NODE_OPENED) + }; + + function emitMatchingNode(emitMatch, node, ascent) { + + /* + We're now calling to the outside world where Lisp-style + lists will not be familiar. Convert to standard arrays. + + Also, reverse the order because it is more common to + list paths "root to leaf" than "leaf to root" */ + var descent = reverseList(ascent); + + emitMatch( + node, + + // To make a path, strip off the last item which is the special + // ROOT_PATH token for the 'path' to the root node + listAsArray(tail(map(keyOf,descent))), // path + listAsArray(map(nodeOf, descent)) // ancestors + ); + } + + /* + * Set up the catching of events such as NODE_CLOSED and NODE_OPENED and, if + * matching the specified pattern, propagate to pattern-match events such as + * oboeBus('node:!') + * + * + * + * @param {Function} predicateEvent + * either oboeBus(NODE_CLOSED) or oboeBus(NODE_OPENED). + * @param {Function} compiledJsonPath + */ + function addUnderlyingListener( fullEventName, predicateEvent, compiledJsonPath ){ + + var emitMatch = oboeBus(fullEventName).emit; + + predicateEvent.on( function (ascent) { + + var maybeMatchingMapping = compiledJsonPath(ascent); + + /* Possible values for maybeMatchingMapping are now: + + false: + we did not match + + an object/array/string/number/null: + we matched and have the node that matched. + Because nulls are valid json values this can be null. + + undefined: + we matched but don't have the matching node yet. + ie, we know there is an upcoming node that matches but we + can't say anything else about it. + */ + if (maybeMatchingMapping !== false) { + + emitMatchingNode( + emitMatch, + nodeOf(maybeMatchingMapping), + ascent + ); + } + }, fullEventName); + + oboeBus('removeListener').on( function(removedEventName){ + + // if the fully qualified match event listener is later removed, clean up + // by removing the underlying listener if it was the last using that pattern: + + if( removedEventName == fullEventName ) { + + if( !oboeBus(removedEventName).listeners( )) { + predicateEvent.un( fullEventName ); + } + } + }); + } + + oboeBus('newListener').on( function(fullEventName){ + + var match = /(node|path):(.*)/.exec(fullEventName); + + if( match ) { + var predicateEvent = predicateEventMap[match[1]]; + + if( !predicateEvent.hasListener( fullEventName) ) { + + addUnderlyingListener( + fullEventName, + predicateEvent, + jsonPathCompiler( match[2] ) + ); + } + } + }) + +} + +/** + * The instance API is the thing that is returned when oboe() is called. + * it allows: + * + * - listeners for various events to be added and removed + * - the http response header/headers to be read + */ +function instanceApi(oboeBus, contentSource){ + + var oboeApi, + fullyQualifiedNamePattern = /^(node|path):./, + rootNodeFinishedEvent = oboeBus(ROOT_NODE_FOUND), + emitNodeDrop = oboeBus(NODE_DROP).emit, + emitNodeSwap = oboeBus(NODE_SWAP).emit, + + /** + * Add any kind of listener that the instance api exposes + */ + addListener = varArgs(function( eventId, parameters ){ + + if( oboeApi[eventId] ) { + + // for events added as .on(event, callback), if there is a + // .event() equivalent with special behaviour , pass through + // to that: + apply(parameters, oboeApi[eventId]); + } else { + + // we have a standard Node.js EventEmitter 2-argument call. + // The first parameter is the listener. + var event = oboeBus(eventId), + listener = parameters[0]; + + if( fullyQualifiedNamePattern.test(eventId) ) { + + // allow fully-qualified node/path listeners + // to be added + addForgettableCallback(event, listener); + } else { + + // the event has no special handling, pass through + // directly onto the event bus: + event.on( listener); + } + } + + return oboeApi; // chaining + }), + + /** + * Remove any kind of listener that the instance api exposes + */ + removeListener = function( eventId, p2, p3 ){ + + if( eventId == 'done' ) { + + rootNodeFinishedEvent.un(p2); + + } else if( eventId == 'node' || eventId == 'path' ) { + + // allow removal of node and path + oboeBus.un(eventId + ':' + p2, p3); + } else { + + // we have a standard Node.js EventEmitter 2-argument call. + // The second parameter is the listener. This may be a call + // to remove a fully-qualified node/path listener but requires + // no special handling + var listener = p2; + + oboeBus(eventId).un(listener); + } + + return oboeApi; // chaining + }; + + /** + * Add a callback, wrapped in a try/catch so as to not break the + * execution of Oboe if an exception is thrown (fail events are + * fired instead) + * + * The callback is used as the listener id so that it can later be + * removed using .un(callback) + */ + function addProtectedCallback(eventName, callback) { + oboeBus(eventName).on(protectedCallback(callback), callback); + return oboeApi; // chaining + } + + /** + * Add a callback where, if .forget() is called during the callback's + * execution, the callback will be de-registered + */ + function addForgettableCallback(event, callback, listenerId) { + + // listenerId is optional and if not given, the original + // callback will be used + listenerId = listenerId || callback; + + var safeCallback = protectedCallback(callback); + + event.on( function() { + + var discard = false; + + oboeApi.forget = function(){ + discard = true; + }; + + apply( arguments, safeCallback ); + + delete oboeApi.forget; + + if( discard ) { + event.un(listenerId); + } + }, listenerId); + + return oboeApi; // chaining + } + + /** + * wrap a callback so that if it throws, Oboe.js doesn't crash but instead + * throw the error in another event loop + */ + function protectedCallback( callback ) { + return function() { + try{ + return callback.apply(oboeApi, arguments); + }catch(e) { + setTimeout(function() { + throw new Error(e.message); + }); + } + } + } + + /** + * Return the fully qualified event for when a pattern matches + * either a node or a path + * + * @param type {String} either 'node' or 'path' + */ + function fullyQualifiedPatternMatchEvent(type, pattern) { + return oboeBus(type + ':' + pattern); + } + + function wrapCallbackToSwapNodeIfSomethingReturned( callback ) { + return function() { + var returnValueFromCallback = callback.apply(this, arguments); + + if( defined(returnValueFromCallback) ) { + + if( returnValueFromCallback == oboe.drop ) { + emitNodeDrop(); + } else { + emitNodeSwap(returnValueFromCallback); + } + } + } + } + + function addSingleNodeOrPathListener(eventId, pattern, callback) { + + var effectiveCallback; + + if( eventId == 'node' ) { + effectiveCallback = wrapCallbackToSwapNodeIfSomethingReturned(callback); + } else { + effectiveCallback = callback; + } + + addForgettableCallback( + fullyQualifiedPatternMatchEvent(eventId, pattern), + effectiveCallback, + callback + ); + } + + /** + * Add several listeners at a time, from a map + */ + function addMultipleNodeOrPathListeners(eventId, listenerMap) { + + for( var pattern in listenerMap ) { + addSingleNodeOrPathListener(eventId, pattern, listenerMap[pattern]); + } + } + + /** + * implementation behind .onPath() and .onNode() + */ + function addNodeOrPathListenerApi( eventId, jsonPathOrListenerMap, callback ){ + + if( isString(jsonPathOrListenerMap) ) { + addSingleNodeOrPathListener(eventId, jsonPathOrListenerMap, callback); + + } else { + addMultipleNodeOrPathListeners(eventId, jsonPathOrListenerMap); + } + + return oboeApi; // chaining + } + + + // some interface methods are only filled in after we receive + // values and are noops before that: + oboeBus(ROOT_PATH_FOUND).on( function(rootNode) { + oboeApi.root = functor(rootNode); + }); + + /** + * When content starts make the headers readable through the + * instance API + */ + oboeBus(HTTP_START).on( function(_statusCode, headers) { + + oboeApi.header = function(name) { + return name ? headers[name] + : headers + ; + } + }); + + /** + * Construct and return the public API of the Oboe instance to be + * returned to the calling application + */ + return oboeApi = { + on : addListener, + addListener : addListener, + removeListener : removeListener, + emit : oboeBus.emit, + + node : partialComplete(addNodeOrPathListenerApi, 'node'), + path : partialComplete(addNodeOrPathListenerApi, 'path'), + + done : partialComplete(addForgettableCallback, rootNodeFinishedEvent), + start : partialComplete(addProtectedCallback, HTTP_START ), + + // fail doesn't use protectedCallback because + // could lead to non-terminating loops + fail : oboeBus(FAIL_EVENT).on, + + // public api calling abort fires the ABORTING event + abort : oboeBus(ABORTING).emit, + + // initially return nothing for header and root + header : noop, + root : noop, + + source : contentSource + }; +} + +/** + * This file sits just behind the API which is used to attain a new + * Oboe instance. It creates the new components that are required + * and introduces them to each other. + */ + +function wire (httpMethodName, contentSource, body, headers, withCredentials){ + + var oboeBus = pubSub(); + + // Wire the input stream in if we are given a content source. + // This will usually be the case. If not, the instance created + // will have to be passed content from an external source. + + if( contentSource ) { + + streamingHttp( oboeBus, + httpTransport(), + httpMethodName, + contentSource, + body, + headers, + withCredentials + ); + } + + clarinet(oboeBus); + + ascentManager(oboeBus, incrementalContentBuilder(oboeBus)); + + patternAdapter(oboeBus, jsonPathCompiler); + + return instanceApi(oboeBus, contentSource); +} + +function applyDefaults( passthrough, url, httpMethodName, body, headers, withCredentials, cached ){ + + headers = headers ? + // Shallow-clone the headers array. This allows it to be + // modified without side effects to the caller. We don't + // want to change objects that the user passes in. + JSON.parse(JSON.stringify(headers)) + : {}; + + if( body ) { + if( !isString(body) ) { + + // If the body is not a string, stringify it. This allows objects to + // be given which will be sent as JSON. + body = JSON.stringify(body); + + // Default Content-Type to JSON unless given otherwise. + headers['Content-Type'] = headers['Content-Type'] || 'application/json'; + } + headers['Content-Length'] = headers['Content-Length'] || body.length; + } else { + body = null; + } + + // support cache busting like jQuery.ajax({cache:false}) + function modifiedUrl(baseUrl, cached) { + + if( cached === false ) { + + if( baseUrl.indexOf('?') == -1 ) { + baseUrl += '?'; + } else { + baseUrl += '&'; + } + + baseUrl += '_=' + new Date().getTime(); + } + return baseUrl; + } + + return passthrough( httpMethodName || 'GET', modifiedUrl(url, cached), body, headers, withCredentials || false ); +} + +// export public API +function oboe(arg1) { + + // We use duck-typing to detect if the parameter given is a stream, with the + // below list of parameters. + // Unpipe and unshift would normally be present on a stream but this breaks + // compatibility with Request streams. + // See https://github.com/jimhigson/oboe.js/issues/65 + + var nodeStreamMethodNames = list('resume', 'pause', 'pipe'), + isStream = partialComplete( + hasAllProperties + , nodeStreamMethodNames + ); + + if( arg1 ) { + if (isStream(arg1) || isString(arg1)) { + + // simple version for GETs. Signature is: + // oboe( url ) + // or, under node: + // oboe( readableStream ) + return applyDefaults( + wire, + arg1 // url + ); + + } else { + + // method signature is: + // oboe({method:m, url:u, body:b, headers:{...}}) + + return applyDefaults( + wire, + arg1.url, + arg1.method, + arg1.body, + arg1.headers, + arg1.withCredentials, + arg1.cached + ); + + } + } else { + // wire up a no-AJAX, no-stream Oboe. Will have to have content + // fed in externally and using .emit. + return wire(); + } +} + +/* oboe.drop is a special value. If a node callback returns this value the + parsed node is deleted from the JSON + */ +oboe.drop = function() { + return oboe.drop; +}; + + + if ( typeof define === "function" && define.amd ) { + define( "oboe", [], function () { return oboe; } ); + } else if (typeof exports === 'object') { + module.exports = oboe; + } else { + window.oboe = oboe; + } +})((function(){ + // Access to the window object throws an exception in HTML5 web workers so + // point it to "self" if it runs in a web worker + try { + return window; + } catch (e) { + return self; + } + }()), Object, Array, Error, JSON); diff --git a/cate/webapi/app/precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js b/cate/webapi/app/precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js new file mode 100644 index 000000000..baea442e4 --- /dev/null +++ b/cate/webapi/app/precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js @@ -0,0 +1,78 @@ +self.__precacheManifest = (self.__precacheManifest || []).concat([ + { + "revision": "20447a6da97d3562f52e66d756afa612", + "url": "./index.html" + }, + { + "revision": "ee62cea95d1522b582a9", + "url": "./static/css/2.0bca3029.chunk.css" + }, + { + "revision": "b89a79cee59b49c29aa3", + "url": "./static/css/main.aa591355.chunk.css" + }, + { + "revision": "ee62cea95d1522b582a9", + "url": "./static/js/2.7342eb6f.chunk.js" + }, + { + "revision": "4c063fabf42b60bf1dc1f80e584693a6", + "url": "./static/js/2.7342eb6f.chunk.js.LICENSE.txt" + }, + { + "revision": "b89a79cee59b49c29aa3", + "url": "./static/js/main.52d53f34.chunk.js" + }, + { + "revision": "c74e6ddae655c9f93181", + "url": "./static/js/runtime-main.25eafddd.js" + }, + { + "revision": "4edcc198d42e10d8fa2bc3d2d2afd9bf", + "url": "./static/media/cate-icon-128.4edcc198.png" + }, + { + "revision": "05f1cdadfe476395f60e233b15c22155", + "url": "./static/media/icons-16.05f1cdad.eot" + }, + { + "revision": "3c1c220e7a18286503fb431c7a7fe183", + "url": "./static/media/icons-16.3c1c220e.woff" + }, + { + "revision": "3cde8748332d1de6b1ae1c2dc5850754", + "url": "./static/media/icons-16.3cde8748.ttf" + }, + { + "revision": "0a5c76518a68c185baa2c6744456918c", + "url": "./static/media/icons-20.0a5c7651.eot" + }, + { + "revision": "51ec31f302d0072808e1f83f85fea4cd", + "url": "./static/media/icons-20.51ec31f3.ttf" + }, + { + "revision": "cef8cdbb9d0ba82e6e19fb0eeba2ac3d", + "url": "./static/media/icons-20.cef8cdbb.woff" + }, + { + "revision": "3f6039def9115115bf7b9c9bc125d452", + "url": "./static/media/notesesareg-webfont.3f6039de.woff" + }, + { + "revision": "5c342a7108685d1d429bff44c3a68687", + "url": "./static/media/notesesareg-webfont.5c342a71.eot" + }, + { + "revision": "6a3ea7d4ae12f0b76cf9c24c09b06d11", + "url": "./static/media/notesesareg-webfont.6a3ea7d4.ttf" + }, + { + "revision": "9643bb60e350c730571f091c53d28ab6", + "url": "./static/media/notesesareg-webfont.9643bb60.woff2" + }, + { + "revision": "d1cb94357c56af55e6abd6d5bfb71669", + "url": "./static/media/notesesareg-webfont.d1cb9435.svg" + } +]); \ No newline at end of file diff --git a/cate/webapi/app/resources/images/data-sources/esacci/aerosol.png b/cate/webapi/app/resources/images/data-sources/esacci/aerosol.png new file mode 100644 index 000000000..a31987fe5 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/aerosol.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/cci.png b/cate/webapi/app/resources/images/data-sources/esacci/cci.png new file mode 100644 index 000000000..b4ad8e7b7 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/cci.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/cloud.png b/cate/webapi/app/resources/images/data-sources/esacci/cloud.png new file mode 100644 index 000000000..b35838185 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/cloud.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/fire.png b/cate/webapi/app/resources/images/data-sources/esacci/fire.png new file mode 100644 index 000000000..b5488625c Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/fire.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/ghg.png b/cate/webapi/app/resources/images/data-sources/esacci/ghg.png new file mode 100644 index 000000000..668bea222 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/ghg.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/ghrsst.png b/cate/webapi/app/resources/images/data-sources/esacci/ghrsst.png new file mode 100644 index 000000000..87fc6f306 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/ghrsst.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/glaciers.png b/cate/webapi/app/resources/images/data-sources/esacci/glaciers.png new file mode 100644 index 000000000..4765890c5 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/glaciers.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/icesheats.png b/cate/webapi/app/resources/images/data-sources/esacci/icesheats.png new file mode 100644 index 000000000..6fe212ada Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/icesheats.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/lc.png b/cate/webapi/app/resources/images/data-sources/esacci/lc.png new file mode 100644 index 000000000..3ae553ba3 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/lc.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/oc.png b/cate/webapi/app/resources/images/data-sources/esacci/oc.png new file mode 100644 index 000000000..ef35dcc41 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/oc.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/ozone.png b/cate/webapi/app/resources/images/data-sources/esacci/ozone.png new file mode 100644 index 000000000..d1c60a475 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/ozone.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/seaice.png b/cate/webapi/app/resources/images/data-sources/esacci/seaice.png new file mode 100644 index 000000000..1147498b9 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/seaice.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/sealevel.png b/cate/webapi/app/resources/images/data-sources/esacci/sealevel.png new file mode 100644 index 000000000..d82ec578d Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/sealevel.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/seasurfacesalinity.png b/cate/webapi/app/resources/images/data-sources/esacci/seasurfacesalinity.png new file mode 100644 index 000000000..1ca7a224a Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/seasurfacesalinity.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/soilmoisture.png b/cate/webapi/app/resources/images/data-sources/esacci/soilmoisture.png new file mode 100644 index 000000000..66d763fa7 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/soilmoisture.png differ diff --git a/cate/webapi/app/resources/images/data-sources/esacci/sst.png b/cate/webapi/app/resources/images/data-sources/esacci/sst.png new file mode 100644 index 000000000..87fc6f306 Binary files /dev/null and b/cate/webapi/app/resources/images/data-sources/esacci/sst.png differ diff --git a/cate/webapi/app/robots.txt b/cate/webapi/app/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/cate/webapi/app/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/cate/webapi/app/serve.json b/cate/webapi/app/serve.json new file mode 100644 index 000000000..5f3c73a8b --- /dev/null +++ b/cate/webapi/app/serve.json @@ -0,0 +1,21 @@ +{ + "headers": [ + { + "source": "index.html", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache,no-store,must-revalidate" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "0" + } + ] + } + ] +} diff --git a/cate/webapi/app/service-worker.js b/cate/webapi/app/service-worker.js new file mode 100644 index 000000000..644d998ec --- /dev/null +++ b/cate/webapi/app/service-worker.js @@ -0,0 +1,39 @@ +/** + * Welcome to your Workbox-powered service worker! + * + * You'll need to register this file in your web app and you should + * disable HTTP caching for this file too. + * See https://goo.gl/nhQhGp + * + * The rest of the code is auto-generated. Please don't update this file + * directly; instead, make changes to your Workbox build configuration + * and re-run your build process. + * See https://goo.gl/2aRDsh + */ + +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); + +importScripts( + "./precache-manifest.42e1391c2fa6e8611fb1a7d5afdb269b.js" +); + +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +workbox.core.clientsClaim(); + +/** + * The workboxSW.precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ +self.__precacheManifest = [].concat(self.__precacheManifest || []); +workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); + +workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("./index.html"), { + + blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], +}); diff --git a/cate/webapi/app/static/css/2.0bca3029.chunk.css b/cate/webapi/app/static/css/2.0bca3029.chunk.css new file mode 100644 index 000000000..175337cf2 --- /dev/null +++ b/cate/webapi/app/static/css/2.0bca3029.chunk.css @@ -0,0 +1,4 @@ +@charset "UTF-8"; + +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{font-size:14px;font-weight:400;letter-spacing:0;line-height:1.28581;text-transform:none;color:#182026;font-family:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Open Sans","Helvetica Neue","Icons16",sans-serif}p{margin-bottom:10px;margin-top:0}small{font-size:12px}strong{font-weight:600}::selection{background:rgba(125,188,255,.6)}.bp3-heading{color:#182026;font-weight:600;margin:0 0 10px;padding:0}.bp3-dark .bp3-heading{color:#f5f8fa}.bp3-running-text h1,h1.bp3-heading{font-size:36px;line-height:40px}.bp3-running-text h2,h2.bp3-heading{font-size:28px;line-height:32px}.bp3-running-text h3,h3.bp3-heading{font-size:22px;line-height:25px}.bp3-running-text h4,h4.bp3-heading{font-size:18px;line-height:21px}.bp3-running-text h5,h5.bp3-heading{font-size:16px;line-height:19px}.bp3-running-text h6,h6.bp3-heading{font-size:14px;line-height:16px}.bp3-ui-text{font-size:14px;font-weight:400;letter-spacing:0;line-height:1.28581;text-transform:none}.bp3-monospace-text{font-family:monospace;text-transform:none}.bp3-text-muted{color:#5c7080}.bp3-dark .bp3-text-muted{color:#a7b6c2}.bp3-text-disabled{color:rgba(92,112,128,.6)}.bp3-dark .bp3-text-disabled{color:rgba(167,182,194,.6)}.bp3-text-overflow-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.bp3-running-text{font-size:14px;line-height:1.5}.bp3-running-text h1{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h1{color:#f5f8fa}.bp3-running-text h2{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h2{color:#f5f8fa}.bp3-running-text h3{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h3{color:#f5f8fa}.bp3-running-text h4{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h4{color:#f5f8fa}.bp3-running-text h5{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h5{color:#f5f8fa}.bp3-running-text h6{color:#182026;font-weight:600;margin-bottom:20px;margin-top:40px}.bp3-dark .bp3-running-text h6{color:#f5f8fa}.bp3-running-text hr{border:none;border-bottom:1px solid rgba(16,22,26,.15);margin:20px 0}.bp3-dark .bp3-running-text hr{border-color:hsla(0,0%,100%,.15)}.bp3-running-text p{margin:0 0 10px;padding:0}.bp3-text-large{font-size:16px}.bp3-text-small{font-size:12px}a{text-decoration:none}a,a:hover{color:#106ba3}a:hover{cursor:pointer;text-decoration:underline}.bp3-dark a code,a .bp3-icon,a .bp3-icon-large,a .bp3-icon-standard,a code{color:inherit}.bp3-dark a,.bp3-dark a:hover{color:#48aff0}.bp3-dark a .bp3-icon,.bp3-dark a .bp3-icon-large,.bp3-dark a .bp3-icon-standard,.bp3-dark a:hover .bp3-icon,.bp3-dark a:hover .bp3-icon-large,.bp3-dark a:hover .bp3-icon-standard{color:inherit}.bp3-code,.bp3-running-text code{font-family:monospace;text-transform:none;background:hsla(0,0%,100%,.7);border-radius:3px;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);color:#5c7080;font-size:smaller;padding:2px 5px}.bp3-dark .bp3-code,.bp3-dark .bp3-running-text code,.bp3-running-text .bp3-dark code{background:rgba(16,22,26,.3);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);color:#a7b6c2}.bp3-running-text a>code,a>.bp3-code{color:#137cbd}.bp3-dark .bp3-running-text a>code,.bp3-dark a>.bp3-code,.bp3-running-text .bp3-dark a>code{color:inherit}.bp3-code-block,.bp3-running-text pre{font-family:monospace;text-transform:none;background:hsla(0,0%,100%,.7);border-radius:3px;box-shadow:inset 0 0 0 1px rgba(16,22,26,.15);color:#182026;display:block;font-size:13px;line-height:1.4;margin:10px 0;padding:13px 15px 12px;word-break:break-all;word-wrap:break-word}.bp3-dark .bp3-code-block,.bp3-dark .bp3-running-text pre,.bp3-running-text .bp3-dark pre{background:rgba(16,22,26,.3);box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-code-block>code,.bp3-running-text pre>code{background:none;box-shadow:none;color:inherit;font-size:inherit;padding:0}.bp3-key,.bp3-running-text kbd{align-items:center;background:#fff;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);color:#5c7080;display:inline-flex;font-family:inherit;font-size:12px;height:24px;justify-content:center;line-height:24px;min-width:24px;padding:3px 6px;vertical-align:middle}.bp3-key .bp3-icon,.bp3-key .bp3-icon-large,.bp3-key .bp3-icon-standard,.bp3-running-text kbd .bp3-icon,.bp3-running-text kbd .bp3-icon-large,.bp3-running-text kbd .bp3-icon-standard{margin-right:5px}.bp3-dark .bp3-key,.bp3-dark .bp3-running-text kbd,.bp3-running-text .bp3-dark kbd{background:#394b59;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4);color:#a7b6c2}.bp3-blockquote,.bp3-running-text blockquote{border-left:4px solid rgba(167,182,194,.5);margin:0 0 10px;padding:0 20px}.bp3-dark .bp3-blockquote,.bp3-dark .bp3-running-text blockquote,.bp3-running-text .bp3-dark blockquote{border-color:rgba(115,134,148,.5)}.bp3-list,.bp3-running-text ol,.bp3-running-text ul{margin:10px 0;padding-left:30px}.bp3-list li:not(:last-child),.bp3-running-text ol li:not(:last-child),.bp3-running-text ul li:not(:last-child){margin-bottom:5px}.bp3-list ol,.bp3-list ul,.bp3-running-text ol ol,.bp3-running-text ol ul,.bp3-running-text ul ol,.bp3-running-text ul ul{margin-top:5px}.bp3-list-unstyled{list-style:none;margin:0;padding:0}.bp3-list-unstyled li{padding:0}.bp3-rtl{text-align:right}.bp3-dark{color:#f5f8fa}:focus{outline:2px auto rgba(19,124,189,.6);outline-offset:2px;-moz-outline-radius:6px}.bp3-focus-disabled :focus,.bp3-focus-disabled :focus~.bp3-control-indicator{outline:none!important}.bp3-alert{max-width:400px;padding:20px}.bp3-alert-body{display:flex}.bp3-alert-body .bp3-icon{font-size:40px;margin-right:20px;margin-top:0}.bp3-alert-contents{word-break:break-word}.bp3-alert-footer{display:flex;flex-direction:row-reverse;margin-top:10px}.bp3-alert-footer .bp3-button{margin-left:10px}.bp3-breadcrumbs{cursor:default;flex-wrap:wrap;height:30px;list-style:none;margin:0;padding:0}.bp3-breadcrumbs,.bp3-breadcrumbs>li{align-items:center;display:flex}.bp3-breadcrumbs>li:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3E%3C/svg%3E");content:"";display:block;height:16px;margin:0 5px;width:16px}.bp3-breadcrumbs>li:last-of-type:after{display:none}.bp3-breadcrumb,.bp3-breadcrumb-current,.bp3-breadcrumbs-collapsed{align-items:center;display:inline-flex;font-size:16px}.bp3-breadcrumb,.bp3-breadcrumbs-collapsed{color:#5c7080}.bp3-breadcrumb:hover{text-decoration:none}.bp3-breadcrumb.bp3-disabled{color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-breadcrumb .bp3-icon{margin-right:5px}.bp3-breadcrumb-current{color:inherit;font-weight:600}.bp3-breadcrumb-current .bp3-input{font-size:inherit;font-weight:inherit;vertical-align:baseline}.bp3-breadcrumbs-collapsed{background:#ced9e0;border:none;border-radius:3px;cursor:pointer;margin-right:2px;padding:1px 5px;vertical-align:text-bottom}.bp3-breadcrumbs-collapsed:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cg fill='%235C7080'%3E%3Ccircle cx='2' cy='8.03' r='2'/%3E%3Ccircle cx='14' cy='8.03' r='2'/%3E%3Ccircle cx='8' cy='8.03' r='2'/%3E%3C/g%3E%3C/svg%3E") 50% no-repeat;content:"";display:block;height:16px;width:16px}.bp3-breadcrumbs-collapsed:hover{background:#bfccd6;color:#182026;text-decoration:none}.bp3-dark .bp3-breadcrumb,.bp3-dark .bp3-breadcrumbs-collapsed,.bp3-dark .bp3-breadcrumbs>li:after{color:#a7b6c2}.bp3-dark .bp3-breadcrumb.bp3-disabled{color:rgba(167,182,194,.6)}.bp3-dark .bp3-breadcrumb-current{color:#f5f8fa}.bp3-dark .bp3-breadcrumbs-collapsed{background:rgba(16,22,26,.4)}.bp3-dark .bp3-breadcrumbs-collapsed:hover{background:rgba(16,22,26,.6);color:#f5f8fa}.bp3-button{display:inline-flex;flex-direction:row;align-items:center;border:none;border-radius:3px;cursor:pointer;font-size:14px;justify-content:center;padding:5px 10px;text-align:left;vertical-align:middle;min-height:30px;min-width:30px}.bp3-button>*{flex-grow:0;flex-shrink:0}.bp3-button>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-button:before,.bp3-button>*{margin-right:7px}.bp3-button:empty:before,.bp3-button>:last-child{margin-right:0}.bp3-button:empty{padding:0!important}.bp3-button.bp3-disabled,.bp3-button:disabled{cursor:not-allowed}.bp3-button.bp3-fill{display:flex;width:100%}.bp3-align-right .bp3-button,.bp3-button.bp3-align-right{text-align:right}.bp3-align-left .bp3-button,.bp3-button.bp3-align-left{text-align:left}.bp3-button:not([class*=bp3-intent-]){background-color:#f5f8fa;background-image:linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);color:#182026}.bp3-button:not([class*=bp3-intent-]):hover{background-clip:padding-box;background-color:#ebf1f5;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.bp3-button:not([class*=bp3-intent-]).bp3-active,.bp3-button:not([class*=bp3-intent-]):active{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-button:not([class*=bp3-intent-]).bp3-disabled,.bp3-button:not([class*=bp3-intent-]):disabled{background-color:rgba(206,217,224,.5);background-image:none;box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;outline:none}.bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active:hover,.bp3-button:not([class*=bp3-intent-]):disabled.bp3-active,.bp3-button:not([class*=bp3-intent-]):disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.bp3-button.bp3-intent-primary{background-color:#137cbd;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-button.bp3-intent-primary.bp3-active,.bp3-button.bp3-intent-primary:active,.bp3-button.bp3-intent-primary:hover{color:#fff}.bp3-button.bp3-intent-primary:hover{background-color:#106ba3;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-button.bp3-intent-primary.bp3-active,.bp3-button.bp3-intent-primary:active{background-color:#0e5a8a;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-button.bp3-intent-primary.bp3-disabled,.bp3-button.bp3-intent-primary:disabled{background-color:rgba(19,124,189,.5);background-image:none;border-color:transparent;box-shadow:none;color:hsla(0,0%,100%,.6)}.bp3-button.bp3-intent-success{background-color:#0f9960;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-button.bp3-intent-success.bp3-active,.bp3-button.bp3-intent-success:active,.bp3-button.bp3-intent-success:hover{color:#fff}.bp3-button.bp3-intent-success:hover{background-color:#0d8050;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-button.bp3-intent-success.bp3-active,.bp3-button.bp3-intent-success:active{background-color:#0a6640;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-button.bp3-intent-success.bp3-disabled,.bp3-button.bp3-intent-success:disabled{background-color:rgba(15,153,96,.5);background-image:none;border-color:transparent;box-shadow:none;color:hsla(0,0%,100%,.6)}.bp3-button.bp3-intent-warning{background-color:#d9822b;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-button.bp3-intent-warning.bp3-active,.bp3-button.bp3-intent-warning:active,.bp3-button.bp3-intent-warning:hover{color:#fff}.bp3-button.bp3-intent-warning:hover{background-color:#bf7326;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-button.bp3-intent-warning.bp3-active,.bp3-button.bp3-intent-warning:active{background-color:#a66321;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-button.bp3-intent-warning.bp3-disabled,.bp3-button.bp3-intent-warning:disabled{background-color:rgba(217,130,43,.5);background-image:none;border-color:transparent;box-shadow:none;color:hsla(0,0%,100%,.6)}.bp3-button.bp3-intent-danger{background-color:#db3737;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-button.bp3-intent-danger.bp3-active,.bp3-button.bp3-intent-danger:active,.bp3-button.bp3-intent-danger:hover{color:#fff}.bp3-button.bp3-intent-danger:hover{background-color:#c23030;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-button.bp3-intent-danger.bp3-active,.bp3-button.bp3-intent-danger:active{background-color:#a82a2a;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-button.bp3-intent-danger.bp3-disabled,.bp3-button.bp3-intent-danger:disabled{background-color:rgba(219,55,55,.5);background-image:none;border-color:transparent;box-shadow:none;color:hsla(0,0%,100%,.6)}.bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#fff}.bp3-button.bp3-large,.bp3-large .bp3-button{min-height:40px;min-width:40px;font-size:16px;padding:5px 15px}.bp3-button.bp3-large:before,.bp3-button.bp3-large>*,.bp3-large .bp3-button:before,.bp3-large .bp3-button>*{margin-right:10px}.bp3-button.bp3-large:empty:before,.bp3-button.bp3-large>:last-child,.bp3-large .bp3-button:empty:before,.bp3-large .bp3-button>:last-child{margin-right:0}.bp3-button.bp3-small,.bp3-small .bp3-button{min-height:24px;min-width:24px;padding:0 7px}.bp3-button.bp3-loading{position:relative}.bp3-button.bp3-loading[class*=bp3-icon-]:before{visibility:hidden}.bp3-button.bp3-loading .bp3-button-spinner{margin:0;position:absolute}.bp3-button.bp3-loading>:not(.bp3-button-spinner){visibility:hidden}.bp3-button[class*=bp3-icon-]:before{font-family:"Icons16",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080}.bp3-button .bp3-icon,.bp3-button .bp3-icon-large,.bp3-button .bp3-icon-standard{color:#5c7080}.bp3-button .bp3-icon-large.bp3-align-right,.bp3-button .bp3-icon-standard.bp3-align-right,.bp3-button .bp3-icon.bp3-align-right{margin-left:7px}.bp3-button .bp3-icon:first-child:last-child,.bp3-button .bp3-spinner+.bp3-icon:last-child{margin:0 -7px}.bp3-dark .bp3-button:not([class*=bp3-intent-]){background-color:#394b59;background-image:linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0));box-shadow:0 0 0 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active,.bp3-dark .bp3-button:not([class*=bp3-intent-]):active,.bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{color:#f5f8fa}.bp3-dark .bp3-button:not([class*=bp3-intent-]):hover{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-active,.bp3-dark .bp3-button:not([class*=bp3-intent-]):active{background-color:#202b33;background-image:none;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled,.bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled{background-color:rgba(57,75,89,.5);background-image:none;box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-button:not([class*=bp3-intent-]).bp3-disabled.bp3-active,.bp3-dark .bp3-button:not([class*=bp3-intent-]):disabled.bp3-active{background:rgba(57,75,89,.7)}.bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon,.bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-large,.bp3-dark .bp3-button:not([class*=bp3-intent-]) .bp3-icon-standard,.bp3-dark .bp3-button:not([class*=bp3-intent-])[class*=bp3-icon-]:before{color:#a7b6c2}.bp3-dark .bp3-button[class*=bp3-intent-],.bp3-dark .bp3-button[class*=bp3-intent-]:hover{box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-button[class*=bp3-intent-].bp3-active,.bp3-dark .bp3-button[class*=bp3-intent-]:active{box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-button[class*=bp3-intent-].bp3-disabled,.bp3-dark .bp3-button[class*=bp3-intent-]:disabled{background-image:none;box-shadow:none;color:hsla(0,0%,100%,.3)}.bp3-dark .bp3-button[class*=bp3-intent-] .bp3-button-spinner .bp3-spinner-head{stroke:#8a9ba8}.bp3-button.bp3-disabled .bp3-icon,.bp3-button.bp3-disabled .bp3-icon-large,.bp3-button.bp3-disabled .bp3-icon-standard,.bp3-button.bp3-disabled:before,.bp3-button:disabled .bp3-icon,.bp3-button:disabled .bp3-icon-large,.bp3-button:disabled .bp3-icon-standard,.bp3-button:disabled:before,.bp3-button[class*=bp3-intent-] .bp3-icon,.bp3-button[class*=bp3-intent-] .bp3-icon-large,.bp3-button[class*=bp3-intent-] .bp3-icon-standard,.bp3-button[class*=bp3-intent-]:before{color:inherit!important}.bp3-button.bp3-minimal{background:none;box-shadow:none}.bp3-button.bp3-minimal:hover{background:rgba(167,182,194,.3);box-shadow:none;color:#182026;text-decoration:none}.bp3-button.bp3-minimal.bp3-active,.bp3-button.bp3-minimal:active{background:rgba(115,134,148,.3);box-shadow:none;color:#182026}.bp3-button.bp3-minimal.bp3-disabled,.bp3-button.bp3-minimal.bp3-disabled:hover,.bp3-button.bp3-minimal:disabled,.bp3-button.bp3-minimal:disabled:hover{background:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-button.bp3-minimal.bp3-disabled.bp3-active,.bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active,.bp3-button.bp3-minimal:disabled.bp3-active,.bp3-button.bp3-minimal:disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.bp3-dark .bp3-button.bp3-minimal{background:none;box-shadow:none;color:inherit}.bp3-dark .bp3-button.bp3-minimal.bp3-active,.bp3-dark .bp3-button.bp3-minimal:active,.bp3-dark .bp3-button.bp3-minimal:hover{background:none;box-shadow:none}.bp3-dark .bp3-button.bp3-minimal:hover{background:rgba(138,155,168,.15)}.bp3-dark .bp3-button.bp3-minimal.bp3-active,.bp3-dark .bp3-button.bp3-minimal:active{background:rgba(138,155,168,.3);color:#f5f8fa}.bp3-dark .bp3-button.bp3-minimal.bp3-disabled,.bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover,.bp3-dark .bp3-button.bp3-minimal:disabled,.bp3-dark .bp3-button.bp3-minimal:disabled:hover{background:none;color:rgba(167,182,194,.6);cursor:not-allowed}.bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active,.bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.bp3-button.bp3-minimal.bp3-intent-primary{color:#106ba3}.bp3-button.bp3-minimal.bp3-intent-primary.bp3-active,.bp3-button.bp3-minimal.bp3-intent-primary:active,.bp3-button.bp3-minimal.bp3-intent-primary:hover{background:none;box-shadow:none;color:#106ba3}.bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.bp3-button.bp3-minimal.bp3-intent-primary.bp3-active,.bp3-button.bp3-minimal.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#106ba3}.bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled,.bp3-button.bp3-minimal.bp3-intent-primary:disabled{background:none;color:rgba(16,107,163,.5)}.bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{color:#48aff0}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#48aff0}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled{background:none;color:rgba(72,175,240,.5)}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button.bp3-minimal.bp3-intent-success{color:#0d8050}.bp3-button.bp3-minimal.bp3-intent-success.bp3-active,.bp3-button.bp3-minimal.bp3-intent-success:active,.bp3-button.bp3-minimal.bp3-intent-success:hover{background:none;box-shadow:none;color:#0d8050}.bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.bp3-button.bp3-minimal.bp3-intent-success.bp3-active,.bp3-button.bp3-minimal.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#0d8050}.bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled,.bp3-button.bp3-minimal.bp3-intent-success:disabled{background:none;color:rgba(13,128,80,.5)}.bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active,.bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{color:#3dcc91}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#3dcc91}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled{background:none;color:rgba(61,204,145,.5)}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button.bp3-minimal.bp3-intent-warning{color:#bf7326}.bp3-button.bp3-minimal.bp3-intent-warning.bp3-active,.bp3-button.bp3-minimal.bp3-intent-warning:active,.bp3-button.bp3-minimal.bp3-intent-warning:hover{background:none;box-shadow:none;color:#bf7326}.bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.bp3-button.bp3-minimal.bp3-intent-warning.bp3-active,.bp3-button.bp3-minimal.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#bf7326}.bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled,.bp3-button.bp3-minimal.bp3-intent-warning:disabled{background:none;color:rgba(191,115,38,.5)}.bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{color:#ffb366}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#ffb366}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled{background:none;color:rgba(255,179,102,.5)}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button.bp3-minimal.bp3-intent-danger{color:#c23030}.bp3-button.bp3-minimal.bp3-intent-danger.bp3-active,.bp3-button.bp3-minimal.bp3-intent-danger:active,.bp3-button.bp3-minimal.bp3-intent-danger:hover{background:none;box-shadow:none;color:#c23030}.bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.bp3-button.bp3-minimal.bp3-intent-danger.bp3-active,.bp3-button.bp3-minimal.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#c23030}.bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled,.bp3-button.bp3-minimal.bp3-intent-danger:disabled{background:none;color:rgba(194,48,48,.5)}.bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{color:#ff7373}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#ff7373}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled{background:none;color:rgba(255,115,115,.5)}.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button.bp3-outlined{background:none;box-shadow:none;border:1px solid rgba(24,32,38,.2);box-sizing:border-box}.bp3-button.bp3-outlined:hover{background:rgba(167,182,194,.3);box-shadow:none;color:#182026;text-decoration:none}.bp3-button.bp3-outlined.bp3-active,.bp3-button.bp3-outlined:active{background:rgba(115,134,148,.3);box-shadow:none;color:#182026}.bp3-button.bp3-outlined.bp3-disabled,.bp3-button.bp3-outlined.bp3-disabled:hover,.bp3-button.bp3-outlined:disabled,.bp3-button.bp3-outlined:disabled:hover{background:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-button.bp3-outlined.bp3-disabled.bp3-active,.bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active,.bp3-button.bp3-outlined:disabled.bp3-active,.bp3-button.bp3-outlined:disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.bp3-dark .bp3-button.bp3-outlined{background:none;box-shadow:none;color:inherit}.bp3-dark .bp3-button.bp3-outlined.bp3-active,.bp3-dark .bp3-button.bp3-outlined:active,.bp3-dark .bp3-button.bp3-outlined:hover{background:none;box-shadow:none}.bp3-dark .bp3-button.bp3-outlined:hover{background:rgba(138,155,168,.15)}.bp3-dark .bp3-button.bp3-outlined.bp3-active,.bp3-dark .bp3-button.bp3-outlined:active{background:rgba(138,155,168,.3);color:#f5f8fa}.bp3-dark .bp3-button.bp3-outlined.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover,.bp3-dark .bp3-button.bp3-outlined:disabled,.bp3-dark .bp3-button.bp3-outlined:disabled:hover{background:none;color:rgba(167,182,194,.6);cursor:not-allowed}.bp3-dark .bp3-button.bp3-outlined.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active,.bp3-dark .bp3-button.bp3-outlined:disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined:disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.bp3-button.bp3-outlined.bp3-intent-primary{color:#106ba3}.bp3-button.bp3-outlined.bp3-intent-primary.bp3-active,.bp3-button.bp3-outlined.bp3-intent-primary:active,.bp3-button.bp3-outlined.bp3-intent-primary:hover{background:none;box-shadow:none;color:#106ba3}.bp3-button.bp3-outlined.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.bp3-button.bp3-outlined.bp3-intent-primary.bp3-active,.bp3-button.bp3-outlined.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#106ba3}.bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-primary:disabled{background:none;color:rgba(16,107,163,.5)}.bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button.bp3-outlined.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{color:#48aff0}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#48aff0}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled{background:none;color:rgba(72,175,240,.5)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button.bp3-outlined.bp3-intent-success{color:#0d8050}.bp3-button.bp3-outlined.bp3-intent-success.bp3-active,.bp3-button.bp3-outlined.bp3-intent-success:active,.bp3-button.bp3-outlined.bp3-intent-success:hover{background:none;box-shadow:none;color:#0d8050}.bp3-button.bp3-outlined.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.bp3-button.bp3-outlined.bp3-intent-success.bp3-active,.bp3-button.bp3-outlined.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#0d8050}.bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-success:disabled{background:none;color:rgba(13,128,80,.5)}.bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active,.bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button.bp3-outlined.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{color:#3dcc91}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#3dcc91}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled{background:none;color:rgba(61,204,145,.5)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button.bp3-outlined.bp3-intent-warning{color:#bf7326}.bp3-button.bp3-outlined.bp3-intent-warning.bp3-active,.bp3-button.bp3-outlined.bp3-intent-warning:active,.bp3-button.bp3-outlined.bp3-intent-warning:hover{background:none;box-shadow:none;color:#bf7326}.bp3-button.bp3-outlined.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.bp3-button.bp3-outlined.bp3-intent-warning.bp3-active,.bp3-button.bp3-outlined.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#bf7326}.bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-warning:disabled{background:none;color:rgba(191,115,38,.5)}.bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button.bp3-outlined.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{color:#ffb366}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#ffb366}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled{background:none;color:rgba(255,179,102,.5)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button.bp3-outlined.bp3-intent-danger{color:#c23030}.bp3-button.bp3-outlined.bp3-intent-danger.bp3-active,.bp3-button.bp3-outlined.bp3-intent-danger:active,.bp3-button.bp3-outlined.bp3-intent-danger:hover{background:none;box-shadow:none;color:#c23030}.bp3-button.bp3-outlined.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.bp3-button.bp3-outlined.bp3-intent-danger.bp3-active,.bp3-button.bp3-outlined.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#c23030}.bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-danger:disabled{background:none;color:rgba(194,48,48,.5)}.bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button.bp3-outlined.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{color:#ff7373}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#ff7373}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled{background:none;color:rgba(255,115,115,.5)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button.bp3-outlined.bp3-disabled,.bp3-button.bp3-outlined.bp3-disabled:hover,.bp3-button.bp3-outlined:disabled,.bp3-button.bp3-outlined:disabled:hover{border-color:rgba(92,112,128,.1)}.bp3-dark .bp3-button.bp3-outlined{border-color:hsla(0,0%,100%,.4)}.bp3-dark .bp3-button.bp3-outlined.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover,.bp3-dark .bp3-button.bp3-outlined:disabled,.bp3-dark .bp3-button.bp3-outlined:disabled:hover{border-color:hsla(0,0%,100%,.2)}.bp3-button.bp3-outlined.bp3-intent-primary{border-color:rgba(16,107,163,.6)}.bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-primary:disabled{border-color:rgba(16,107,163,.2)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{border-color:rgba(72,175,240,.6)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled{border-color:rgba(72,175,240,.2)}.bp3-button.bp3-outlined.bp3-intent-success{border-color:rgba(13,128,80,.6)}.bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-success:disabled{border-color:rgba(13,128,80,.2)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{border-color:rgba(61,204,145,.6)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled{border-color:rgba(61,204,145,.2)}.bp3-button.bp3-outlined.bp3-intent-warning{border-color:rgba(191,115,38,.6)}.bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-warning:disabled{border-color:rgba(191,115,38,.2)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{border-color:rgba(255,179,102,.6)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled{border-color:rgba(255,179,102,.2)}.bp3-button.bp3-outlined.bp3-intent-danger{border-color:rgba(194,48,48,.6)}.bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled,.bp3-button.bp3-outlined.bp3-intent-danger:disabled{border-color:rgba(194,48,48,.2)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{border-color:rgba(255,115,115,.6)}.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled{border-color:rgba(255,115,115,.2)}a.bp3-button{text-align:center;text-decoration:none;transition:none}a.bp3-button,a.bp3-button:active,a.bp3-button:hover{color:#182026}a.bp3-button.bp3-disabled{color:rgba(92,112,128,.6)}.bp3-button-text{flex:0 1 auto}.bp3-button-group.bp3-align-left .bp3-button-text,.bp3-button-group.bp3-align-right .bp3-button-text,.bp3-button.bp3-align-left .bp3-button-text,.bp3-button.bp3-align-right .bp3-button-text{flex:1 1 auto}.bp3-button-group{display:inline-flex}.bp3-button-group .bp3-button{flex:0 0 auto;position:relative;z-index:4}.bp3-button-group .bp3-button:focus{z-index:5}.bp3-button-group .bp3-button:hover{z-index:6}.bp3-button-group .bp3-button.bp3-active,.bp3-button-group .bp3-button:active{z-index:7}.bp3-button-group .bp3-button.bp3-disabled,.bp3-button-group .bp3-button:disabled{z-index:3}.bp3-button-group .bp3-button[class*=bp3-intent-]{z-index:9}.bp3-button-group .bp3-button[class*=bp3-intent-]:focus{z-index:10}.bp3-button-group .bp3-button[class*=bp3-intent-]:hover{z-index:11}.bp3-button-group .bp3-button[class*=bp3-intent-].bp3-active,.bp3-button-group .bp3-button[class*=bp3-intent-]:active{z-index:12}.bp3-button-group .bp3-button[class*=bp3-intent-].bp3-disabled,.bp3-button-group .bp3-button[class*=bp3-intent-]:disabled{z-index:8}.bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:first-child),.bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:first-child) .bp3-button{border-bottom-left-radius:0;border-top-left-radius:0}.bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child),.bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button{border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.bp3-button-group.bp3-minimal .bp3-button{background:none;box-shadow:none}.bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(167,182,194,.3);box-shadow:none;color:#182026;text-decoration:none}.bp3-button-group.bp3-minimal .bp3-button.bp3-active,.bp3-button-group.bp3-minimal .bp3-button:active{background:rgba(115,134,148,.3);box-shadow:none;color:#182026}.bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover,.bp3-button-group.bp3-minimal .bp3-button:disabled,.bp3-button-group.bp3-minimal .bp3-button:disabled:hover{background:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active,.bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button{background:none;box-shadow:none;color:inherit}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:none;box-shadow:none}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{background:rgba(138,155,168,.15)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active{background:rgba(138,155,168,.3);color:#f5f8fa}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover{background:none;color:rgba(167,182,194,.6);cursor:not-allowed}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#106ba3}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:none;box-shadow:none;color:#106ba3}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#106ba3}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled{background:none;color:rgba(16,107,163,.5)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{color:#48aff0}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#48aff0}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled{background:none;color:rgba(72,175,240,.5)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#0d8050}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:none;box-shadow:none;color:#0d8050}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#0d8050}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled{background:none;color:rgba(13,128,80,.5)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{color:#3dcc91}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#3dcc91}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled{background:none;color:rgba(61,204,145,.5)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#bf7326}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:none;box-shadow:none;color:#bf7326}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#bf7326}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled{background:none;color:rgba(191,115,38,.5)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{color:#ffb366}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#ffb366}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled{background:none;color:rgba(255,179,102,.5)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#c23030}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:none;box-shadow:none;color:#c23030}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#c23030}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled{background:none;color:rgba(194,48,48,.5)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{color:#ff7373}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#ff7373}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled{background:none;color:rgba(255,115,115,.5)}.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-button-group .bp3-popover-target,.bp3-button-group .bp3-popover-wrapper{display:flex;flex:1 1 auto}.bp3-button-group.bp3-fill{display:flex;width:100%}.bp3-button-group .bp3-button.bp3-fill,.bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){flex:1 1 auto}.bp3-button-group.bp3-vertical{align-items:stretch;flex-direction:column;vertical-align:top}.bp3-button-group.bp3-vertical.bp3-fill{height:100%;width:unset}.bp3-button-group.bp3-vertical .bp3-button{margin-right:0!important;width:100%}.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:first-child,.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:first-child .bp3-button{border-radius:3px 3px 0 0}.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:last-child,.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:last-child .bp3-button{border-radius:0 0 3px 3px}.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-button:not(:last-child),.bp3-button-group.bp3-vertical:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button{margin-bottom:-1px}.bp3-button-group.bp3-align-left .bp3-button{text-align:left}.bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-button:not(:last-child),.bp3-dark .bp3-button-group:not(.bp3-minimal)>.bp3-popover-wrapper:not(:last-child) .bp3-button{margin-right:1px}.bp3-dark .bp3-button-group.bp3-vertical>.bp3-button:not(:last-child),.bp3-dark .bp3-button-group.bp3-vertical>.bp3-popover-wrapper:not(:last-child) .bp3-button{margin-bottom:1px}.bp3-callout{font-size:14px;line-height:1.5;background-color:rgba(138,155,168,.15);border-radius:3px;padding:10px 12px 9px;position:relative;width:100%}.bp3-callout[class*=bp3-icon-]{padding-left:40px}.bp3-callout[class*=bp3-icon-]:before{font-family:"Icons20",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#5c7080;left:10px;position:absolute;top:10px}.bp3-callout.bp3-callout-icon{padding-left:40px}.bp3-callout.bp3-callout-icon>.bp3-icon:first-child{color:#5c7080;left:10px;position:absolute;top:10px}.bp3-callout .bp3-heading{line-height:20px;margin-bottom:5px;margin-top:0}.bp3-callout .bp3-heading:last-child{margin-bottom:0}.bp3-dark .bp3-callout{background-color:rgba(138,155,168,.2)}.bp3-dark .bp3-callout[class*=bp3-icon-]:before{color:#a7b6c2}.bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.15)}.bp3-callout.bp3-intent-primary .bp3-heading,.bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.bp3-callout.bp3-intent-primary[class*=bp3-icon-]:before{color:#106ba3}.bp3-dark .bp3-callout.bp3-intent-primary{background-color:rgba(19,124,189,.25)}.bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading,.bp3-dark .bp3-callout.bp3-intent-primary>.bp3-icon:first-child,.bp3-dark .bp3-callout.bp3-intent-primary[class*=bp3-icon-]:before{color:#48aff0}.bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.15)}.bp3-callout.bp3-intent-success .bp3-heading,.bp3-callout.bp3-intent-success>.bp3-icon:first-child,.bp3-callout.bp3-intent-success[class*=bp3-icon-]:before{color:#0d8050}.bp3-dark .bp3-callout.bp3-intent-success{background-color:rgba(15,153,96,.25)}.bp3-dark .bp3-callout.bp3-intent-success .bp3-heading,.bp3-dark .bp3-callout.bp3-intent-success>.bp3-icon:first-child,.bp3-dark .bp3-callout.bp3-intent-success[class*=bp3-icon-]:before{color:#3dcc91}.bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.15)}.bp3-callout.bp3-intent-warning .bp3-heading,.bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.bp3-callout.bp3-intent-warning[class*=bp3-icon-]:before{color:#bf7326}.bp3-dark .bp3-callout.bp3-intent-warning{background-color:rgba(217,130,43,.25)}.bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading,.bp3-dark .bp3-callout.bp3-intent-warning>.bp3-icon:first-child,.bp3-dark .bp3-callout.bp3-intent-warning[class*=bp3-icon-]:before{color:#ffb366}.bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.15)}.bp3-callout.bp3-intent-danger .bp3-heading,.bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.bp3-callout.bp3-intent-danger[class*=bp3-icon-]:before{color:#c23030}.bp3-dark .bp3-callout.bp3-intent-danger{background-color:rgba(219,55,55,.25)}.bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading,.bp3-dark .bp3-callout.bp3-intent-danger>.bp3-icon:first-child,.bp3-dark .bp3-callout.bp3-intent-danger[class*=bp3-icon-]:before{color:#ff7373}.bp3-running-text .bp3-callout{margin:20px 0}.bp3-card{background-color:#fff;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0);padding:20px;transition:box-shadow .2s cubic-bezier(.4,1,.75,.9),-webkit-transform .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9),box-shadow .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9),box-shadow .2s cubic-bezier(.4,1,.75,.9),-webkit-transform .2s cubic-bezier(.4,1,.75,.9)}.bp3-card.bp3-dark,.bp3-dark .bp3-card{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.bp3-elevation-0{box-shadow:0 0 0 1px rgba(16,22,26,.15),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.bp3-dark .bp3-elevation-0,.bp3-elevation-0.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.4),0 0 0 rgba(16,22,26,0),0 0 0 rgba(16,22,26,0)}.bp3-elevation-1{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2)}.bp3-dark .bp3-elevation-1,.bp3-elevation-1.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.bp3-elevation-2{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 1px 1px rgba(16,22,26,.2),0 2px 6px rgba(16,22,26,.2)}.bp3-dark .bp3-elevation-2,.bp3-elevation-2.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.4),0 2px 6px rgba(16,22,26,.4)}.bp3-elevation-3{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.bp3-dark .bp3-elevation-3,.bp3-elevation-3.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-elevation-4{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2)}.bp3-dark .bp3-elevation-4,.bp3-elevation-4.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.bp3-card.bp3-interactive:hover{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);cursor:pointer}.bp3-card.bp3-interactive:hover.bp3-dark,.bp3-dark .bp3-card.bp3-interactive:hover{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-card.bp3-interactive:active{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);opacity:.9;transition-duration:0}.bp3-card.bp3-interactive:active.bp3-dark,.bp3-dark .bp3-card.bp3-interactive:active{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.bp3-collapse{height:0;overflow-y:hidden;transition:height .2s cubic-bezier(.4,1,.75,.9)}.bp3-collapse .bp3-collapse-body{transition:-webkit-transform .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9),-webkit-transform .2s cubic-bezier(.4,1,.75,.9)}.bp3-collapse .bp3-collapse-body[aria-hidden=true]{display:none}.bp3-context-menu .bp3-popover-target{display:block}.bp3-context-menu-popover-target{position:fixed}.bp3-dialog-container{opacity:1;-webkit-transform:scale(1);transform:scale(1);align-items:center;display:flex;justify-content:center;min-height:100%;pointer-events:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%}.bp3-dialog-container.bp3-overlay-appear>.bp3-dialog,.bp3-dialog-container.bp3-overlay-enter>.bp3-dialog{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}.bp3-dialog-container.bp3-overlay-appear-active>.bp3-dialog,.bp3-dialog-container.bp3-overlay-enter-active>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1);transition-delay:0;transition-duration:.3s;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-dialog-container.bp3-overlay-exit>.bp3-dialog{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.bp3-dialog-container.bp3-overlay-exit-active>.bp3-dialog{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);transition-delay:0;transition-duration:.3s;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-dialog{background:#ebf1f5;border-radius:6px;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);display:flex;flex-direction:column;margin:30px 0;padding-bottom:20px;pointer-events:all;-webkit-user-select:text;-ms-user-select:text;user-select:text;width:500px}.bp3-dialog:focus{outline:0}.bp3-dark .bp3-dialog,.bp3-dialog.bp3-dark{background:#293742;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dialog-header{align-items:center;background:#fff;border-radius:6px 6px 0 0;box-shadow:0 1px 0 rgba(16,22,26,.15);display:flex;flex:0 0 auto;min-height:40px;padding-left:20px;padding-right:5px}.bp3-dialog-header .bp3-icon,.bp3-dialog-header .bp3-icon-large{color:#5c7080;flex:0 0 auto;margin-right:10px}.bp3-dialog-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;flex:1 1 auto;line-height:inherit;margin:0}.bp3-dialog-header .bp3-heading:last-child{margin-right:20px}.bp3-dark .bp3-dialog-header{background:#30404d;box-shadow:0 1px 0 rgba(16,22,26,.4)}.bp3-dark .bp3-dialog-header .bp3-icon,.bp3-dark .bp3-dialog-header .bp3-icon-large{color:#a7b6c2}.bp3-dialog-body{flex:1 1 auto;line-height:18px;margin:20px}.bp3-dialog-footer{flex:0 0 auto;margin:0 20px}.bp3-dialog-footer-actions{display:flex;justify-content:flex-end}.bp3-dialog-footer-actions .bp3-button{margin-left:10px}.bp3-drawer{background:#fff;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);display:flex;flex-direction:column;margin:0;padding:0}.bp3-drawer:focus{outline:0}.bp3-drawer.bp3-position-top{height:50%;left:0;right:0;top:0}.bp3-drawer.bp3-position-top.bp3-overlay-appear,.bp3-drawer.bp3-position-top.bp3-overlay-enter{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.bp3-drawer.bp3-position-top.bp3-overlay-appear-active,.bp3-drawer.bp3-position-top.bp3-overlay-enter-active{-webkit-transform:translateY(0);transform:translateY(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-top.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.bp3-drawer.bp3-position-top.bp3-overlay-exit-active{-webkit-transform:translateY(-100%);transform:translateY(-100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-bottom{bottom:0;height:50%;left:0;right:0}.bp3-drawer.bp3-position-bottom.bp3-overlay-appear,.bp3-drawer.bp3-position-bottom.bp3-overlay-enter{-webkit-transform:translateY(100%);transform:translateY(100%)}.bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active,.bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active{-webkit-transform:translateY(0);transform:translateY(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-bottom.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-left{bottom:0;left:0;top:0;width:50%}.bp3-drawer.bp3-position-left.bp3-overlay-appear,.bp3-drawer.bp3-position-left.bp3-overlay-enter{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.bp3-drawer.bp3-position-left.bp3-overlay-appear-active,.bp3-drawer.bp3-position-left.bp3-overlay-enter-active{-webkit-transform:translateX(0);transform:translateX(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-left.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.bp3-drawer.bp3-position-left.bp3-overlay-exit-active{-webkit-transform:translateX(-100%);transform:translateX(-100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-right{bottom:0;right:0;top:0;width:50%}.bp3-drawer.bp3-position-right.bp3-overlay-appear,.bp3-drawer.bp3-position-right.bp3-overlay-enter{-webkit-transform:translateX(100%);transform:translateX(100%)}.bp3-drawer.bp3-position-right.bp3-overlay-appear-active,.bp3-drawer.bp3-position-right.bp3-overlay-enter-active{-webkit-transform:translateX(0);transform:translateX(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer.bp3-position-right.bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.bp3-drawer.bp3-position-right.bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical){bottom:0;right:0;top:0;width:50%}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear,.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter{-webkit-transform:translateX(100%);transform:translateX(100%)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active,.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active{-webkit-transform:translateX(0);transform:translateX(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{-webkit-transform:translateX(0);transform:translateX(0)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical{bottom:0;height:50%;left:0;right:0}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear,.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter{-webkit-transform:translateY(100%);transform:translateY(100%)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-appear-active,.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-enter-active{-webkit-transform:translateY(0);transform:translateY(0);transition-delay:0;transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit{-webkit-transform:translateY(0);transform:translateY(0)}.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{-webkit-transform:translateY(100%);transform:translateY(100%);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-dark .bp3-drawer,.bp3-drawer.bp3-dark{background:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4);color:#f5f8fa}.bp3-drawer-header{align-items:center;border-radius:0;box-shadow:0 1px 0 rgba(16,22,26,.15);display:flex;flex:0 0 auto;min-height:40px;padding:5px 5px 5px 20px;position:relative}.bp3-drawer-header .bp3-icon,.bp3-drawer-header .bp3-icon-large{color:#5c7080;flex:0 0 auto;margin-right:10px}.bp3-drawer-header .bp3-heading{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;flex:1 1 auto;line-height:inherit;margin:0}.bp3-drawer-header .bp3-heading:last-child{margin-right:20px}.bp3-dark .bp3-drawer-header{box-shadow:0 1px 0 rgba(16,22,26,.4)}.bp3-dark .bp3-drawer-header .bp3-icon,.bp3-dark .bp3-drawer-header .bp3-icon-large{color:#a7b6c2}.bp3-drawer-body{flex:1 1 auto;line-height:18px;overflow:auto}.bp3-drawer-footer{box-shadow:inset 0 1px 0 rgba(16,22,26,.15);flex:0 0 auto;padding:10px 20px;position:relative}.bp3-dark .bp3-drawer-footer{box-shadow:inset 0 1px 0 rgba(16,22,26,.4)}.bp3-editable-text{cursor:text;display:inline-block;max-width:100%;position:relative;vertical-align:top;white-space:nowrap}.bp3-editable-text:before{bottom:-3px;left:-3px;position:absolute;right:-3px;top:-3px;border-radius:3px;content:"";transition:background-color .1s cubic-bezier(.4,1,.75,.9),box-shadow .1s cubic-bezier(.4,1,.75,.9)}.bp3-editable-text:hover:before{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15)}.bp3-editable-text.bp3-editable-text-editing:before{background-color:#fff;box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-editable-text.bp3-disabled:before{box-shadow:none}.bp3-editable-text.bp3-intent-primary .bp3-editable-text-content,.bp3-editable-text.bp3-intent-primary .bp3-editable-text-input{color:#137cbd}.bp3-editable-text.bp3-intent-primary:hover:before{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(19,124,189,.4)}.bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-editable-text.bp3-intent-success .bp3-editable-text-content,.bp3-editable-text.bp3-intent-success .bp3-editable-text-input{color:#0f9960}.bp3-editable-text.bp3-intent-success:hover:before{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px rgba(15,153,96,.4)}.bp3-editable-text.bp3-intent-success.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-editable-text.bp3-intent-warning .bp3-editable-text-content,.bp3-editable-text.bp3-intent-warning .bp3-editable-text-input{color:#d9822b}.bp3-editable-text.bp3-intent-warning:hover:before{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px rgba(217,130,43,.4)}.bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-editable-text.bp3-intent-danger .bp3-editable-text-content,.bp3-editable-text.bp3-intent-danger .bp3-editable-text-input{color:#db3737}.bp3-editable-text.bp3-intent-danger:hover:before{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px rgba(219,55,55,.4)}.bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-dark .bp3-editable-text:hover:before{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px hsla(0,0%,100%,.15)}.bp3-dark .bp3-editable-text.bp3-editable-text-editing:before{background-color:rgba(16,22,26,.3);box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-editable-text.bp3-disabled:before{box-shadow:none}.bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{color:#48aff0}.bp3-dark .bp3-editable-text.bp3-intent-primary:hover:before{box-shadow:0 0 0 0 rgba(72,175,240,0),0 0 0 0 rgba(72,175,240,0),inset 0 0 0 1px rgba(72,175,240,.4)}.bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #48aff0,0 0 0 3px rgba(72,175,240,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{color:#3dcc91}.bp3-dark .bp3-editable-text.bp3-intent-success:hover:before{box-shadow:0 0 0 0 rgba(61,204,145,0),0 0 0 0 rgba(61,204,145,0),inset 0 0 0 1px rgba(61,204,145,.4)}.bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #3dcc91,0 0 0 3px rgba(61,204,145,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{color:#ffb366}.bp3-dark .bp3-editable-text.bp3-intent-warning:hover:before{box-shadow:0 0 0 0 rgba(255,179,102,0),0 0 0 0 rgba(255,179,102,0),inset 0 0 0 1px rgba(255,179,102,.4)}.bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #ffb366,0 0 0 3px rgba(255,179,102,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{color:#ff7373}.bp3-dark .bp3-editable-text.bp3-intent-danger:hover:before{box-shadow:0 0 0 0 rgba(255,115,115,0),0 0 0 0 rgba(255,115,115,0),inset 0 0 0 1px rgba(255,115,115,.4)}.bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing:before{box-shadow:0 0 0 1px #ff7373,0 0 0 3px rgba(255,115,115,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-editable-text-content,.bp3-editable-text-input{color:inherit;display:inherit;font:inherit;letter-spacing:inherit;max-width:inherit;min-width:inherit;position:relative;resize:none;text-transform:inherit;vertical-align:top}.bp3-editable-text-input{background:none;border:none;box-shadow:none;padding:0;white-space:pre-wrap;width:100%}.bp3-editable-text-input::-webkit-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-editable-text-input:-ms-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-editable-text-input::placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-editable-text-input:focus{outline:none}.bp3-editable-text-input::-ms-clear{display:none}.bp3-editable-text-content{overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:pre}.bp3-editable-text-editing>.bp3-editable-text-content{left:0;position:absolute;visibility:hidden}.bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(92,112,128,.6)}.bp3-dark .bp3-editable-text-placeholder>.bp3-editable-text-content{color:rgba(167,182,194,.6)}.bp3-editable-text.bp3-multiline{display:block}.bp3-editable-text.bp3-multiline .bp3-editable-text-content{overflow:auto;white-space:pre-wrap;word-wrap:break-word}.bp3-divider{border-bottom:1px solid rgba(16,22,26,.15);border-right:1px solid rgba(16,22,26,.15);margin:5px}.bp3-dark .bp3-divider{border-color:rgba(16,22,26,.4)}.bp3-control-group{-webkit-transform:translateZ(0);transform:translateZ(0);display:flex;flex-direction:row;align-items:stretch}.bp3-control-group>*{flex-grow:0;flex-shrink:0}.bp3-control-group>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-control-group .bp3-button,.bp3-control-group .bp3-html-select,.bp3-control-group .bp3-input,.bp3-control-group .bp3-select{position:relative}.bp3-control-group .bp3-input{border-radius:inherit;z-index:2}.bp3-control-group .bp3-input:focus{border-radius:3px;z-index:14}.bp3-control-group .bp3-input[class*=bp3-intent]{z-index:13}.bp3-control-group .bp3-input[class*=bp3-intent]:focus{z-index:15}.bp3-control-group .bp3-input.bp3-disabled,.bp3-control-group .bp3-input:disabled,.bp3-control-group .bp3-input[readonly]{z-index:1}.bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input{z-index:13}.bp3-control-group .bp3-input-group[class*=bp3-intent] .bp3-input:focus{z-index:15}.bp3-control-group .bp3-button,.bp3-control-group .bp3-html-select select,.bp3-control-group .bp3-select select{-webkit-transform:translateZ(0);transform:translateZ(0);border-radius:inherit;z-index:4}.bp3-control-group .bp3-button:focus,.bp3-control-group .bp3-html-select select:focus,.bp3-control-group .bp3-select select:focus{z-index:5}.bp3-control-group .bp3-button:hover,.bp3-control-group .bp3-html-select select:hover,.bp3-control-group .bp3-select select:hover{z-index:6}.bp3-control-group .bp3-button:active,.bp3-control-group .bp3-html-select select:active,.bp3-control-group .bp3-select select:active{z-index:7}.bp3-control-group .bp3-button.bp3-disabled,.bp3-control-group .bp3-button:disabled,.bp3-control-group .bp3-button[readonly],.bp3-control-group .bp3-html-select select.bp3-disabled,.bp3-control-group .bp3-html-select select:disabled,.bp3-control-group .bp3-html-select select[readonly],.bp3-control-group .bp3-select select.bp3-disabled,.bp3-control-group .bp3-select select:disabled,.bp3-control-group .bp3-select select[readonly]{z-index:3}.bp3-control-group .bp3-button[class*=bp3-intent],.bp3-control-group .bp3-html-select select[class*=bp3-intent],.bp3-control-group .bp3-select select[class*=bp3-intent]{z-index:9}.bp3-control-group .bp3-button[class*=bp3-intent]:focus,.bp3-control-group .bp3-html-select select[class*=bp3-intent]:focus,.bp3-control-group .bp3-select select[class*=bp3-intent]:focus{z-index:10}.bp3-control-group .bp3-button[class*=bp3-intent]:hover,.bp3-control-group .bp3-html-select select[class*=bp3-intent]:hover,.bp3-control-group .bp3-select select[class*=bp3-intent]:hover{z-index:11}.bp3-control-group .bp3-button[class*=bp3-intent]:active,.bp3-control-group .bp3-html-select select[class*=bp3-intent]:active,.bp3-control-group .bp3-select select[class*=bp3-intent]:active{z-index:12}.bp3-control-group .bp3-button[class*=bp3-intent].bp3-disabled,.bp3-control-group .bp3-button[class*=bp3-intent]:disabled,.bp3-control-group .bp3-button[class*=bp3-intent][readonly],.bp3-control-group .bp3-html-select select[class*=bp3-intent].bp3-disabled,.bp3-control-group .bp3-html-select select[class*=bp3-intent]:disabled,.bp3-control-group .bp3-html-select select[class*=bp3-intent][readonly],.bp3-control-group .bp3-select select[class*=bp3-intent].bp3-disabled,.bp3-control-group .bp3-select select[class*=bp3-intent]:disabled,.bp3-control-group .bp3-select select[class*=bp3-intent][readonly]{z-index:8}.bp3-control-group .bp3-input-group>.bp3-button,.bp3-control-group .bp3-input-group>.bp3-icon,.bp3-control-group .bp3-input-group>.bp3-input-action{z-index:16}.bp3-control-group .bp3-html-select:after,.bp3-control-group .bp3-html-select>.bp3-icon,.bp3-control-group .bp3-select:after,.bp3-control-group .bp3-select>.bp3-icon{z-index:17}.bp3-control-group .bp3-select:focus-within{z-index:5}.bp3-control-group:not(.bp3-vertical)>:not(.bp3-divider){margin-right:-1px}.bp3-control-group:not(.bp3-vertical)>.bp3-divider:not(:first-child){margin-left:6px}.bp3-dark .bp3-control-group:not(.bp3-vertical)>:not(.bp3-divider){margin-right:0}.bp3-dark .bp3-control-group:not(.bp3-vertical)>.bp3-button+.bp3-button{margin-left:1px}.bp3-control-group .bp3-popover-target,.bp3-control-group .bp3-popover-wrapper{border-radius:inherit}.bp3-control-group>:first-child{border-radius:3px 0 0 3px}.bp3-control-group>:last-child{border-radius:0 3px 3px 0;margin-right:0}.bp3-control-group>:only-child{border-radius:3px;margin-right:0}.bp3-control-group .bp3-input-group .bp3-button{border-radius:3px}.bp3-control-group .bp3-numeric-input:not(:first-child) .bp3-input-group{border-bottom-left-radius:0;border-top-left-radius:0}.bp3-control-group.bp3-fill>:not(.bp3-fixed),.bp3-control-group>.bp3-fill{flex:1 1 auto}.bp3-control-group.bp3-vertical{flex-direction:column}.bp3-control-group.bp3-vertical>*{margin-top:-1px}.bp3-control-group.bp3-vertical>:first-child{border-radius:3px 3px 0 0;margin-top:0}.bp3-control-group.bp3-vertical>:last-child{border-radius:0 0 3px 3px}.bp3-control{cursor:pointer;display:block;margin-bottom:10px;position:relative;text-transform:none}.bp3-control input:checked~.bp3-control-indicator{background-color:#137cbd;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-control:hover input:checked~.bp3-control-indicator{background-color:#106ba3;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{background:#0e5a8a;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-control input:disabled:checked~.bp3-control-indicator{background:rgba(19,124,189,.5);box-shadow:none}.bp3-dark .bp3-control input:checked~.bp3-control-indicator{box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control:hover input:checked~.bp3-control-indicator{background-color:#106ba3;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control input:not(:disabled):active:checked~.bp3-control-indicator{background-color:#0e5a8a;box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-control input:disabled:checked~.bp3-control-indicator{background:rgba(14,90,138,.5);box-shadow:none}.bp3-control:not(.bp3-align-right){padding-left:26px}.bp3-control:not(.bp3-align-right) .bp3-control-indicator{margin-left:-26px}.bp3-control.bp3-align-right{padding-right:26px}.bp3-control.bp3-align-right .bp3-control-indicator{margin-right:-26px}.bp3-control.bp3-disabled{color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-control.bp3-inline{display:inline-block;margin-right:20px}.bp3-control input{left:0;opacity:0;position:absolute;top:0;z-index:-1}.bp3-control .bp3-control-indicator{background-clip:padding-box;background-color:#f5f8fa;background-image:linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0));border:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);cursor:pointer;display:inline-block;font-size:16px;height:1em;margin-right:10px;margin-top:-3px;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1em}.bp3-control .bp3-control-indicator:before{content:"";display:block;height:1em;width:1em}.bp3-control:hover .bp3-control-indicator{background-color:#ebf1f5}.bp3-control input:not(:disabled):active~.bp3-control-indicator{background:#d8e1e8;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-control input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5);box-shadow:none;cursor:not-allowed}.bp3-control input:focus~.bp3-control-indicator{outline:2px auto rgba(19,124,189,.6);outline-offset:2px;-moz-outline-radius:6px}.bp3-control.bp3-align-right .bp3-control-indicator{float:right;margin-left:10px;margin-top:1px}.bp3-control.bp3-large{font-size:16px}.bp3-control.bp3-large:not(.bp3-align-right){padding-left:30px}.bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-30px}.bp3-control.bp3-large.bp3-align-right{padding-right:30px}.bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-30px}.bp3-control.bp3-large .bp3-control-indicator{font-size:20px}.bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{margin-top:0}.bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{background-color:#137cbd;background-image:linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2);color:#fff}.bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{background-color:#106ba3;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 -1px 0 rgba(16,22,26,.2)}.bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{background:#0e5a8a;box-shadow:inset 0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{background:rgba(19,124,189,.5);box-shadow:none}.bp3-dark .bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator{box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate~.bp3-control-indicator{background-color:#106ba3;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate~.bp3-control-indicator{background-color:#0e5a8a;box-shadow:0 0 0 1px rgba(16,22,26,.4),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{background:rgba(14,90,138,.5);box-shadow:none}.bp3-control.bp3-checkbox .bp3-control-indicator{border-radius:3px}.bp3-control.bp3-checkbox input:checked~.bp3-control-indicator:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='%23fff'/%3E%3C/svg%3E")}.bp3-control.bp3-checkbox input:indeterminate~.bp3-control-indicator:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='%23fff'/%3E%3C/svg%3E")}.bp3-control.bp3-radio .bp3-control-indicator{border-radius:50%}.bp3-control.bp3-radio input:checked~.bp3-control-indicator:before{background-image:radial-gradient(#fff,#fff 28%,transparent 32%)}.bp3-control.bp3-radio input:checked:disabled~.bp3-control-indicator:before{opacity:.5}.bp3-control.bp3-radio input:focus~.bp3-control-indicator{-moz-outline-radius:16px}.bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(167,182,194,.5)}.bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(115,134,148,.5)}.bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(92,112,128,.5)}.bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(206,217,224,.5)}.bp3-control.bp3-switch input:disabled~.bp3-control-indicator:before{background:hsla(0,0%,100%,.8)}.bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(19,124,189,.5)}.bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator:before{background:hsla(0,0%,100%,.8)}.bp3-control.bp3-switch:not(.bp3-align-right){padding-left:38px}.bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{margin-left:-38px}.bp3-control.bp3-switch.bp3-align-right{padding-right:38px}.bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{margin-right:-38px}.bp3-control.bp3-switch .bp3-control-indicator{border:none;border-radius:1.75em;box-shadow:none!important;min-width:1.75em;transition:background-color .1s cubic-bezier(.4,1,.75,.9);width:auto}.bp3-control.bp3-switch .bp3-control-indicator:before{background:#fff;border-radius:50%;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);height:calc(1em - 4px);left:0;margin:2px;position:absolute;transition:left .1s cubic-bezier(.4,1,.75,.9);width:calc(1em - 4px)}.bp3-control.bp3-switch input:checked~.bp3-control-indicator:before{left:calc(100% - 1em)}.bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){padding-left:45px}.bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{margin-left:-45px}.bp3-control.bp3-switch.bp3-large.bp3-align-right{padding-right:45px}.bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{margin-right:-45px}.bp3-dark .bp3-control.bp3-switch input~.bp3-control-indicator{background:rgba(16,22,26,.5)}.bp3-dark .bp3-control.bp3-switch:hover input~.bp3-control-indicator{background:rgba(16,22,26,.7)}.bp3-dark .bp3-control.bp3-switch input:not(:disabled):active~.bp3-control-indicator{background:rgba(16,22,26,.9)}.bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5)}.bp3-dark .bp3-control.bp3-switch input:disabled~.bp3-control-indicator:before{background:rgba(16,22,26,.4)}.bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator{background:#137cbd}.bp3-dark .bp3-control.bp3-switch:hover input:checked~.bp3-control-indicator{background:#106ba3}.bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active~.bp3-control-indicator{background:#0e5a8a}.bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator{background:rgba(14,90,138,.5)}.bp3-dark .bp3-control.bp3-switch input:checked:disabled~.bp3-control-indicator:before{background:rgba(16,22,26,.4)}.bp3-dark .bp3-control.bp3-switch .bp3-control-indicator:before{background:#394b59;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control.bp3-switch input:checked~.bp3-control-indicator:before{box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.bp3-control.bp3-switch .bp3-switch-inner-text{font-size:.7em;text-align:center}.bp3-control.bp3-switch .bp3-control-indicator-child:first-child{line-height:0;margin-left:.5em;margin-right:1.2em;visibility:hidden}.bp3-control.bp3-switch .bp3-control-indicator-child:last-child{line-height:1em;margin-left:1.2em;margin-right:.5em;visibility:visible}.bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:first-child{line-height:1em;visibility:visible}.bp3-control.bp3-switch input:checked~.bp3-control-indicator .bp3-control-indicator-child:last-child{line-height:0;visibility:hidden}.bp3-dark .bp3-control{color:#f5f8fa}.bp3-dark .bp3-control.bp3-disabled{color:rgba(167,182,194,.6)}.bp3-dark .bp3-control .bp3-control-indicator{background-color:#394b59;background-image:linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0));box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-control:hover .bp3-control-indicator{background-color:#30404d}.bp3-dark .bp3-control input:not(:disabled):active~.bp3-control-indicator{background:#202b33;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-control input:disabled~.bp3-control-indicator{background:rgba(57,75,89,.5);box-shadow:none;cursor:not-allowed}.bp3-dark .bp3-control.bp3-checkbox input:disabled:checked~.bp3-control-indicator,.bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate~.bp3-control-indicator{color:rgba(167,182,194,.6)}.bp3-file-input{cursor:pointer;display:inline-block;height:30px;position:relative}.bp3-file-input input{margin:0;min-width:200px;opacity:0}.bp3-file-input input.bp3-disabled+.bp3-file-upload-input,.bp3-file-input input:disabled+.bp3-file-upload-input{background:rgba(206,217,224,.5);box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;resize:none}.bp3-file-input input.bp3-disabled+.bp3-file-upload-input:after,.bp3-file-input input:disabled+.bp3-file-upload-input:after{background-color:rgba(206,217,224,.5);background-image:none;box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;outline:none}.bp3-file-input input.bp3-disabled+.bp3-file-upload-input:after.bp3-active,.bp3-file-input input.bp3-disabled+.bp3-file-upload-input:after.bp3-active:hover,.bp3-file-input input:disabled+.bp3-file-upload-input:after.bp3-active,.bp3-file-input input:disabled+.bp3-file-upload-input:after.bp3-active:hover{background:rgba(206,217,224,.7)}.bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input,.bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input{background:rgba(57,75,89,.5);box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input:after,.bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input:after{background-color:rgba(57,75,89,.5);background-image:none;box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-input input.bp3-disabled+.bp3-file-upload-input:after.bp3-active,.bp3-dark .bp3-file-input input:disabled+.bp3-file-upload-input:after.bp3-active{background:rgba(57,75,89,.7)}.bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#182026}.bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{color:#f5f8fa}.bp3-file-input.bp3-fill{width:100%}.bp3-file-input.bp3-large,.bp3-large .bp3-file-input{height:40px}.bp3-file-input .bp3-file-upload-input-custom-text:after{content:attr(bp3-button-text)}.bp3-file-upload-input{-webkit-appearance:none;appearance:none;background:#fff;border:none;border-radius:3px;box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);color:#182026;font-size:14px;font-weight:400;height:30px;line-height:30px;outline:none;transition:box-shadow .1s cubic-bezier(.4,1,.75,.9);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;color:rgba(92,112,128,.6);left:0;padding:0 80px 0 10px;position:absolute;right:0;top:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-file-upload-input::-webkit-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-file-upload-input:-ms-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-file-upload-input::placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-file-upload-input.bp3-active,.bp3-file-upload-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-file-upload-input.bp3-round,.bp3-file-upload-input[type=search]{border-radius:30px;box-sizing:border-box;padding-left:10px}.bp3-file-upload-input[readonly]{box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.bp3-file-upload-input.bp3-disabled,.bp3-file-upload-input:disabled{background:rgba(206,217,224,.5);box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;resize:none}.bp3-file-upload-input:after{background-color:#f5f8fa;background-image:linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0));color:#182026;min-height:24px;min-width:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-radius:3px;content:"Browse";line-height:24px;margin:3px;position:absolute;right:0;text-align:center;top:0;width:70px}.bp3-file-upload-input:after:hover{background-clip:padding-box;background-color:#ebf1f5;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.bp3-file-upload-input:after.bp3-active,.bp3-file-upload-input:after:active{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-file-upload-input:after.bp3-disabled,.bp3-file-upload-input:after:disabled{background-color:rgba(206,217,224,.5);background-image:none;box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;outline:none}.bp3-file-upload-input:after.bp3-disabled.bp3-active,.bp3-file-upload-input:after.bp3-disabled.bp3-active:hover,.bp3-file-upload-input:after:disabled.bp3-active,.bp3-file-upload-input:after:disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.bp3-file-upload-input:hover:after{background-clip:padding-box;background-color:#ebf1f5;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.bp3-file-upload-input:active:after{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-large .bp3-file-upload-input{font-size:16px;height:40px;line-height:40px;padding-right:95px}.bp3-large .bp3-file-upload-input.bp3-round,.bp3-large .bp3-file-upload-input[type=search]{padding:0 15px}.bp3-large .bp3-file-upload-input:after{min-height:30px;min-width:30px;line-height:30px;margin:5px;width:85px}.bp3-dark .bp3-file-upload-input{background:rgba(16,22,26,.3);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);color:#f5f8fa;color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input::placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-file-upload-input[readonly]{box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-file-upload-input.bp3-disabled,.bp3-dark .bp3-file-upload-input:disabled{background:rgba(57,75,89,.5);box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input:after{background-color:#394b59;background-image:linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0));box-shadow:0 0 0 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark .bp3-file-upload-input:after.bp3-active,.bp3-dark .bp3-file-upload-input:after:active,.bp3-dark .bp3-file-upload-input:after:hover{color:#f5f8fa}.bp3-dark .bp3-file-upload-input:after:hover{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-file-upload-input:after.bp3-active,.bp3-dark .bp3-file-upload-input:after:active{background-color:#202b33;background-image:none;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-file-upload-input:after.bp3-disabled,.bp3-dark .bp3-file-upload-input:after:disabled{background-color:rgba(57,75,89,.5);background-image:none;box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-file-upload-input:after.bp3-disabled.bp3-active,.bp3-dark .bp3-file-upload-input:after:disabled.bp3-active{background:rgba(57,75,89,.7)}.bp3-dark .bp3-file-upload-input:after .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.bp3-dark .bp3-file-upload-input:hover:after{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-file-upload-input:active:after{background-color:#202b33;background-image:none;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-file-upload-input:after{box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.bp3-form-group{display:flex;flex-direction:column;margin:0 0 15px}.bp3-form-group label.bp3-label{margin-bottom:5px}.bp3-form-group .bp3-control{margin-top:7px}.bp3-form-group .bp3-form-helper-text{color:#5c7080;font-size:12px;margin-top:5px}.bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#106ba3}.bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#0d8050}.bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#bf7326}.bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#c23030}.bp3-form-group.bp3-inline{align-items:flex-start;flex-direction:row}.bp3-form-group.bp3-inline.bp3-large label.bp3-label{line-height:40px;margin:0 10px 0 0}.bp3-form-group.bp3-inline label.bp3-label{line-height:30px;margin:0 10px 0 0}.bp3-form-group.bp3-disabled .bp3-form-helper-text,.bp3-form-group.bp3-disabled .bp3-label,.bp3-form-group.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)!important}.bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{color:#48aff0}.bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{color:#3dcc91}.bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{color:#ffb366}.bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{color:#ff7373}.bp3-dark .bp3-form-group .bp3-form-helper-text{color:#a7b6c2}.bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text,.bp3-dark .bp3-form-group.bp3-disabled .bp3-label,.bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)!important}.bp3-input-group{display:block;position:relative}.bp3-input-group .bp3-input{position:relative;width:100%}.bp3-input-group .bp3-input:not(:first-child){padding-left:30px}.bp3-input-group .bp3-input:not(:last-child){padding-right:30px}.bp3-input-group .bp3-input-action,.bp3-input-group>.bp3-button,.bp3-input-group>.bp3-icon,.bp3-input-group>.bp3-input-left-container{position:absolute;top:0}.bp3-input-group .bp3-input-action:first-child,.bp3-input-group>.bp3-button:first-child,.bp3-input-group>.bp3-icon:first-child,.bp3-input-group>.bp3-input-left-container:first-child{left:0}.bp3-input-group .bp3-input-action:last-child,.bp3-input-group>.bp3-button:last-child,.bp3-input-group>.bp3-icon:last-child,.bp3-input-group>.bp3-input-left-container:last-child{right:0}.bp3-input-group .bp3-button{min-height:24px;min-width:24px;margin:3px;padding:0 7px}.bp3-input-group .bp3-button:empty{padding:0}.bp3-input-group>.bp3-icon,.bp3-input-group>.bp3-input-left-container{z-index:1}.bp3-input-group>.bp3-icon,.bp3-input-group>.bp3-input-left-container>.bp3-icon{color:#5c7080}.bp3-input-group>.bp3-icon:empty,.bp3-input-group>.bp3-input-left-container>.bp3-icon:empty{font-family:"Icons16",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.bp3-input-group .bp3-input-action>.bp3-spinner,.bp3-input-group>.bp3-icon,.bp3-input-group>.bp3-input-left-container>.bp3-icon{margin:7px}.bp3-input-group .bp3-tag{margin:5px}.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#5c7080}.bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus),.bp3-dark .bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){color:#a7b6c2}.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard{color:#5c7080}.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled,.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon,.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-large,.bp3-input-group .bp3-input:not(:focus)+.bp3-button.bp3-minimal:disabled .bp3-icon-standard,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large,.bp3-input-group .bp3-input:not(:focus)+.bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard{color:rgba(92,112,128,.6)!important}.bp3-input-group.bp3-disabled{cursor:not-allowed}.bp3-input-group.bp3-disabled .bp3-icon{color:rgba(92,112,128,.6)}.bp3-input-group.bp3-large .bp3-button{min-height:30px;min-width:30px;margin:5px}.bp3-input-group.bp3-large .bp3-input-action>.bp3-spinner,.bp3-input-group.bp3-large>.bp3-icon,.bp3-input-group.bp3-large>.bp3-input-left-container>.bp3-icon{margin:12px}.bp3-input-group.bp3-large .bp3-input{font-size:16px;height:40px;line-height:40px}.bp3-input-group.bp3-large .bp3-input.bp3-round,.bp3-input-group.bp3-large .bp3-input[type=search]{padding:0 15px}.bp3-input-group.bp3-large .bp3-input:not(:first-child){padding-left:40px}.bp3-input-group.bp3-large .bp3-input:not(:last-child){padding-right:40px}.bp3-input-group.bp3-small .bp3-button,.bp3-input-group.bp3-small .bp3-tag{min-height:20px;min-width:20px;margin:2px}.bp3-input-group.bp3-small .bp3-input-action>.bp3-spinner,.bp3-input-group.bp3-small>.bp3-icon,.bp3-input-group.bp3-small>.bp3-input-left-container>.bp3-icon{margin:4px}.bp3-input-group.bp3-small .bp3-input{font-size:12px;height:24px;line-height:24px;padding-left:8px;padding-right:8px}.bp3-input-group.bp3-small .bp3-input.bp3-round,.bp3-input-group.bp3-small .bp3-input[type=search]{padding:0 12px}.bp3-input-group.bp3-small .bp3-input:not(:first-child){padding-left:24px}.bp3-input-group.bp3-small .bp3-input:not(:last-child){padding-right:24px}.bp3-input-group.bp3-fill{flex:1 1 auto;width:100%}.bp3-input-group.bp3-round .bp3-button,.bp3-input-group.bp3-round .bp3-input,.bp3-input-group.bp3-round .bp3-tag{border-radius:30px}.bp3-dark .bp3-input-group .bp3-icon{color:#a7b6c2}.bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{color:rgba(167,182,194,.6)}.bp3-input-group.bp3-intent-primary .bp3-input{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-primary .bp3-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-primary .bp3-input[readonly]{box-shadow:inset 0 0 0 1px #137cbd}.bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled,.bp3-input-group.bp3-intent-primary .bp3-input:disabled{box-shadow:none}.bp3-input-group.bp3-intent-primary>.bp3-icon{color:#106ba3}.bp3-dark .bp3-input-group.bp3-intent-primary>.bp3-icon{color:#48aff0}.bp3-input-group.bp3-intent-success .bp3-input{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-success .bp3-input:focus{box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-success .bp3-input[readonly]{box-shadow:inset 0 0 0 1px #0f9960}.bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled,.bp3-input-group.bp3-intent-success .bp3-input:disabled{box-shadow:none}.bp3-input-group.bp3-intent-success>.bp3-icon{color:#0d8050}.bp3-dark .bp3-input-group.bp3-intent-success>.bp3-icon{color:#3dcc91}.bp3-input-group.bp3-intent-warning .bp3-input{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-warning .bp3-input:focus{box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-warning .bp3-input[readonly]{box-shadow:inset 0 0 0 1px #d9822b}.bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled,.bp3-input-group.bp3-intent-warning .bp3-input:disabled{box-shadow:none}.bp3-input-group.bp3-intent-warning>.bp3-icon{color:#bf7326}.bp3-dark .bp3-input-group.bp3-intent-warning>.bp3-icon{color:#ffb366}.bp3-input-group.bp3-intent-danger .bp3-input{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-danger .bp3-input:focus{box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input-group.bp3-intent-danger .bp3-input[readonly]{box-shadow:inset 0 0 0 1px #db3737}.bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled,.bp3-input-group.bp3-intent-danger .bp3-input:disabled{box-shadow:none}.bp3-input-group.bp3-intent-danger>.bp3-icon{color:#c23030}.bp3-dark .bp3-input-group.bp3-intent-danger>.bp3-icon{color:#ff7373}.bp3-input{-webkit-appearance:none;appearance:none;background:#fff;border:none;border-radius:3px;box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);color:#182026;font-size:14px;font-weight:400;height:30px;line-height:30px;outline:none;padding:0 10px;transition:box-shadow .1s cubic-bezier(.4,1,.75,.9);vertical-align:middle}.bp3-input::-webkit-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input:-ms-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input::placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input.bp3-active,.bp3-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-round,.bp3-input[type=search]{border-radius:30px;box-sizing:border-box;padding-left:10px}.bp3-input[readonly]{box-shadow:inset 0 0 0 1px rgba(16,22,26,.15)}.bp3-input.bp3-disabled,.bp3-input:disabled{background:rgba(206,217,224,.5);box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;resize:none}.bp3-input.bp3-large{font-size:16px;height:40px;line-height:40px}.bp3-input.bp3-large.bp3-round,.bp3-input.bp3-large[type=search]{padding:0 15px}.bp3-input.bp3-small{font-size:12px;height:24px;line-height:24px;padding-left:8px;padding-right:8px}.bp3-input.bp3-small.bp3-round,.bp3-input.bp3-small[type=search]{padding:0 12px}.bp3-input.bp3-fill{flex:1 1 auto;width:100%}.bp3-dark .bp3-input{background:rgba(16,22,26,.3);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark .bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-input::placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input[readonly]{box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-disabled,.bp3-dark .bp3-input:disabled{background:rgba(57,75,89,.5);box-shadow:none;color:rgba(167,182,194,.6)}.bp3-input.bp3-intent-primary{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-primary:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-primary[readonly]{box-shadow:inset 0 0 0 1px #137cbd}.bp3-input.bp3-intent-primary.bp3-disabled,.bp3-input.bp3-intent-primary:disabled{box-shadow:none}.bp3-dark .bp3-input.bp3-intent-primary{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-primary:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-primary[readonly]{box-shadow:inset 0 0 0 1px #137cbd}.bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-input.bp3-intent-primary:disabled{box-shadow:none}.bp3-input.bp3-intent-success{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-success:focus{box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-success[readonly]{box-shadow:inset 0 0 0 1px #0f9960}.bp3-input.bp3-intent-success.bp3-disabled,.bp3-input.bp3-intent-success:disabled{box-shadow:none}.bp3-dark .bp3-input.bp3-intent-success{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-success:focus{box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-success[readonly]{box-shadow:inset 0 0 0 1px #0f9960}.bp3-dark .bp3-input.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-input.bp3-intent-success:disabled{box-shadow:none}.bp3-input.bp3-intent-warning{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-warning:focus{box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-warning[readonly]{box-shadow:inset 0 0 0 1px #d9822b}.bp3-input.bp3-intent-warning.bp3-disabled,.bp3-input.bp3-intent-warning:disabled{box-shadow:none}.bp3-dark .bp3-input.bp3-intent-warning{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-warning:focus{box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-warning[readonly]{box-shadow:inset 0 0 0 1px #d9822b}.bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-input.bp3-intent-warning:disabled{box-shadow:none}.bp3-input.bp3-intent-danger{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-danger:focus{box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-input.bp3-intent-danger[readonly]{box-shadow:inset 0 0 0 1px #db3737}.bp3-input.bp3-intent-danger.bp3-disabled,.bp3-input.bp3-intent-danger:disabled{box-shadow:none}.bp3-dark .bp3-input.bp3-intent-danger{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-danger:focus{box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-input.bp3-intent-danger[readonly]{box-shadow:inset 0 0 0 1px #db3737}.bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-input.bp3-intent-danger:disabled{box-shadow:none}.bp3-input::-ms-clear{display:none}textarea.bp3-input{max-width:100%;padding:10px}textarea.bp3-input,textarea.bp3-input.bp3-large,textarea.bp3-input.bp3-small{height:auto;line-height:inherit}textarea.bp3-input.bp3-small{padding:8px}.bp3-dark textarea.bp3-input{background:rgba(16,22,26,.3);box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark textarea.bp3-input::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark textarea.bp3-input:-ms-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark textarea.bp3-input::placeholder{color:rgba(167,182,194,.6)}.bp3-dark textarea.bp3-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark textarea.bp3-input[readonly]{box-shadow:inset 0 0 0 1px rgba(16,22,26,.4)}.bp3-dark textarea.bp3-input.bp3-disabled,.bp3-dark textarea.bp3-input:disabled{background:rgba(57,75,89,.5);box-shadow:none;color:rgba(167,182,194,.6)}label.bp3-label{display:block;margin-bottom:15px;margin-top:0}label.bp3-label .bp3-html-select,label.bp3-label .bp3-input,label.bp3-label .bp3-popover-wrapper,label.bp3-label .bp3-select,label.bp3-label .bp3-slider{display:block;margin-top:5px;text-transform:none}label.bp3-label .bp3-button-group{margin-top:5px}label.bp3-label .bp3-html-select select,label.bp3-label .bp3-select select{font-weight:400;vertical-align:top;width:100%}label.bp3-label.bp3-disabled,label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(92,112,128,.6)}label.bp3-label.bp3-inline{line-height:30px}label.bp3-label.bp3-inline .bp3-html-select,label.bp3-label.bp3-inline .bp3-input,label.bp3-label.bp3-inline .bp3-input-group,label.bp3-label.bp3-inline .bp3-popover-wrapper,label.bp3-label.bp3-inline .bp3-select{display:inline-block;margin:0 0 0 5px;vertical-align:top}label.bp3-label.bp3-inline .bp3-button-group{margin:0 0 0 5px}label.bp3-label.bp3-inline .bp3-input-group .bp3-input{margin-left:0}label.bp3-label.bp3-inline.bp3-large{line-height:40px}label.bp3-label:not(.bp3-inline) .bp3-popover-target{display:block}.bp3-dark label.bp3-label{color:#f5f8fa}.bp3-dark label.bp3-label.bp3-disabled,.bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{color:rgba(167,182,194,.6)}.bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button{flex:1 1 14px;min-height:0;padding:0;width:30px}.bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:first-child{border-radius:0 3px 0 0}.bp3-numeric-input .bp3-button-group.bp3-vertical>.bp3-button:last-child{border-radius:0 0 3px 0}.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:first-child{border-radius:3px 0 0 0}.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child>.bp3-button:last-child{border-radius:0 0 0 3px}.bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical>.bp3-button{width:40px}form{display:block}.bp3-html-select select,.bp3-select select{display:inline-flex;flex-direction:row;align-items:center;border:none;cursor:pointer;font-size:14px;justify-content:center;text-align:left;vertical-align:middle;background-color:#f5f8fa;background-image:linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);color:#182026;-moz-appearance:none;-webkit-appearance:none;border-radius:3px;height:30px;padding:0 25px 0 10px;width:100%}.bp3-html-select select>*,.bp3-select select>*{flex-grow:0;flex-shrink:0}.bp3-html-select select>.bp3-fill,.bp3-select select>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-html-select select:before,.bp3-html-select select>*,.bp3-select select:before,.bp3-select select>*{margin-right:7px}.bp3-html-select select:empty:before,.bp3-html-select select>:last-child,.bp3-select select:empty:before,.bp3-select select>:last-child{margin-right:0}.bp3-html-select select:hover,.bp3-select select:hover{background-clip:padding-box;background-color:#ebf1f5;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1)}.bp3-html-select select.bp3-active,.bp3-html-select select:active,.bp3-select select.bp3-active,.bp3-select select:active{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-html-select select.bp3-disabled,.bp3-html-select select:disabled,.bp3-select select.bp3-disabled,.bp3-select select:disabled{background-color:rgba(206,217,224,.5);background-image:none;box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;outline:none}.bp3-html-select select.bp3-disabled.bp3-active,.bp3-html-select select.bp3-disabled.bp3-active:hover,.bp3-html-select select:disabled.bp3-active,.bp3-html-select select:disabled.bp3-active:hover,.bp3-select select.bp3-disabled.bp3-active,.bp3-select select.bp3-disabled.bp3-active:hover,.bp3-select select:disabled.bp3-active,.bp3-select select:disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.bp3-html-select.bp3-minimal select,.bp3-select.bp3-minimal select{background:none;box-shadow:none}.bp3-html-select.bp3-minimal select:hover,.bp3-select.bp3-minimal select:hover{background:rgba(167,182,194,.3);box-shadow:none;color:#182026;text-decoration:none}.bp3-html-select.bp3-minimal select.bp3-active,.bp3-html-select.bp3-minimal select:active,.bp3-select.bp3-minimal select.bp3-active,.bp3-select.bp3-minimal select:active{background:rgba(115,134,148,.3);box-shadow:none;color:#182026}.bp3-html-select.bp3-minimal select.bp3-disabled,.bp3-html-select.bp3-minimal select.bp3-disabled:hover,.bp3-html-select.bp3-minimal select:disabled,.bp3-html-select.bp3-minimal select:disabled:hover,.bp3-select.bp3-minimal select.bp3-disabled,.bp3-select.bp3-minimal select.bp3-disabled:hover,.bp3-select.bp3-minimal select:disabled,.bp3-select.bp3-minimal select:disabled:hover{background:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.bp3-html-select.bp3-minimal select:disabled.bp3-active,.bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.bp3-select.bp3-minimal select:disabled.bp3-active,.bp3-select.bp3-minimal select:disabled:hover.bp3-active{background:rgba(115,134,148,.3)}.bp3-dark .bp3-html-select.bp3-minimal select,.bp3-dark .bp3-select.bp3-minimal select,.bp3-html-select.bp3-minimal .bp3-dark select,.bp3-select.bp3-minimal .bp3-dark select{background:none;box-shadow:none;color:inherit}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select:active,.bp3-dark .bp3-html-select.bp3-minimal select:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-active,.bp3-dark .bp3-select.bp3-minimal select:active,.bp3-dark .bp3-select.bp3-minimal select:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select:active,.bp3-html-select.bp3-minimal .bp3-dark select:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-active,.bp3-select.bp3-minimal .bp3-dark select:active,.bp3-select.bp3-minimal .bp3-dark select:hover{background:none;box-shadow:none}.bp3-dark .bp3-html-select.bp3-minimal select:hover,.bp3-dark .bp3-select.bp3-minimal select:hover,.bp3-html-select.bp3-minimal .bp3-dark select:hover,.bp3-select.bp3-minimal .bp3-dark select:hover{background:rgba(138,155,168,.15)}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select:active,.bp3-dark .bp3-select.bp3-minimal select.bp3-active,.bp3-dark .bp3-select.bp3-minimal select:active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select:active,.bp3-select.bp3-minimal .bp3-dark select.bp3-active,.bp3-select.bp3-minimal .bp3-dark select:active{background:rgba(138,155,168,.3);color:#f5f8fa}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover,.bp3-dark .bp3-html-select.bp3-minimal select:disabled,.bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover,.bp3-dark .bp3-select.bp3-minimal select:disabled,.bp3-dark .bp3-select.bp3-minimal select:disabled:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.bp3-html-select.bp3-minimal .bp3-dark select:disabled,.bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,.bp3-select.bp3-minimal .bp3-dark select:disabled,.bp3-select.bp3-minimal .bp3-dark select:disabled:hover{background:none;color:rgba(167,182,194,.6);cursor:not-allowed}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active,.bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,.bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active{background:rgba(138,155,168,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-primary,.bp3-select.bp3-minimal select.bp3-intent-primary{color:#106ba3}.bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-primary:active,.bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:none;box-shadow:none;color:#106ba3}.bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.bp3-select.bp3-minimal select.bp3-intent-primary:hover{background:rgba(19,124,189,.15);color:#106ba3}.bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#106ba3}.bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.bp3-select.bp3-minimal select.bp3-intent-primary:disabled{background:none;color:rgba(16,107,163,.5)}.bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head,.bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{stroke:#106ba3}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{color:#48aff0}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{background:rgba(19,124,189,.2);color:#48aff0}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active{background:rgba(19,124,189,.3);color:#48aff0}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled{background:none;color:rgba(72,175,240,.5)}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active{background:rgba(19,124,189,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-success,.bp3-select.bp3-minimal select.bp3-intent-success{color:#0d8050}.bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-success:active,.bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-success:active,.bp3-select.bp3-minimal select.bp3-intent-success:hover{background:none;box-shadow:none;color:#0d8050}.bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.bp3-select.bp3-minimal select.bp3-intent-success:hover{background:rgba(15,153,96,.15);color:#0d8050}.bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-success:active,.bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#0d8050}.bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.bp3-select.bp3-minimal select.bp3-intent-success:disabled{background:none;color:rgba(13,128,80,.5)}.bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head,.bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{stroke:#0d8050}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{color:#3dcc91}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{background:rgba(15,153,96,.2);color:#3dcc91}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active{background:rgba(15,153,96,.3);color:#3dcc91}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled{background:none;color:rgba(61,204,145,.5)}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active{background:rgba(15,153,96,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-warning,.bp3-select.bp3-minimal select.bp3-intent-warning{color:#bf7326}.bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-warning:active,.bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:none;box-shadow:none;color:#bf7326}.bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.bp3-select.bp3-minimal select.bp3-intent-warning:hover{background:rgba(217,130,43,.15);color:#bf7326}.bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#bf7326}.bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.bp3-select.bp3-minimal select.bp3-intent-warning:disabled{background:none;color:rgba(191,115,38,.5)}.bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head,.bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{stroke:#bf7326}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{color:#ffb366}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{background:rgba(217,130,43,.2);color:#ffb366}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active{background:rgba(217,130,43,.3);color:#ffb366}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled{background:none;color:rgba(255,179,102,.5)}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active{background:rgba(217,130,43,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-danger,.bp3-select.bp3-minimal select.bp3-intent-danger{color:#c23030}.bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-danger:active,.bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:none;box-shadow:none;color:#c23030}.bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.bp3-select.bp3-minimal select.bp3-intent-danger:hover{background:rgba(219,55,55,.15);color:#c23030}.bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#c23030}.bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.bp3-select.bp3-minimal select.bp3-intent-danger:disabled{background:none;color:rgba(194,48,48,.5)}.bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head,.bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{stroke:#c23030}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{color:#ff7373}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{background:rgba(219,55,55,.2);color:#ff7373}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active{background:rgba(219,55,55,.3);color:#ff7373}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled{background:none;color:rgba(255,115,115,.5)}.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,.bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active{background:rgba(219,55,55,.3)}.bp3-html-select.bp3-large select,.bp3-select.bp3-large select{font-size:16px;height:40px;padding-right:35px}.bp3-dark .bp3-html-select select,.bp3-dark .bp3-select select{background-color:#394b59;background-image:linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0));box-shadow:0 0 0 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark .bp3-html-select select.bp3-active,.bp3-dark .bp3-html-select select:active,.bp3-dark .bp3-html-select select:hover,.bp3-dark .bp3-select select.bp3-active,.bp3-dark .bp3-select select:active,.bp3-dark .bp3-select select:hover{color:#f5f8fa}.bp3-dark .bp3-html-select select:hover,.bp3-dark .bp3-select select:hover{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-html-select select.bp3-active,.bp3-dark .bp3-html-select select:active,.bp3-dark .bp3-select select.bp3-active,.bp3-dark .bp3-select select:active{background-color:#202b33;background-image:none;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-html-select select.bp3-disabled,.bp3-dark .bp3-html-select select:disabled,.bp3-dark .bp3-select select.bp3-disabled,.bp3-dark .bp3-select select:disabled{background-color:rgba(57,75,89,.5);background-image:none;box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-html-select select.bp3-disabled.bp3-active,.bp3-dark .bp3-html-select select:disabled.bp3-active,.bp3-dark .bp3-select select.bp3-disabled.bp3-active,.bp3-dark .bp3-select select:disabled.bp3-active{background:rgba(57,75,89,.7)}.bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head,.bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.bp3-html-select select:disabled,.bp3-select select:disabled{background-color:rgba(206,217,224,.5);box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-html-select .bp3-icon,.bp3-select .bp3-icon,.bp3-select:after{color:#5c7080;pointer-events:none;position:absolute;right:7px;top:7px}.bp3-disabled.bp3-select:after,.bp3-html-select .bp3-disabled.bp3-icon,.bp3-select .bp3-disabled.bp3-icon{color:rgba(92,112,128,.6)}.bp3-html-select,.bp3-select{display:inline-block;letter-spacing:normal;position:relative;vertical-align:middle}.bp3-html-select select::-ms-expand,.bp3-select select::-ms-expand{display:none}.bp3-html-select .bp3-icon,.bp3-select .bp3-icon{color:#5c7080}.bp3-html-select .bp3-icon:hover,.bp3-select .bp3-icon:hover{color:#182026}.bp3-dark .bp3-html-select .bp3-icon,.bp3-dark .bp3-select .bp3-icon{color:#a7b6c2}.bp3-dark .bp3-html-select .bp3-icon:hover,.bp3-dark .bp3-select .bp3-icon:hover{color:#f5f8fa}.bp3-html-select.bp3-large .bp3-icon,.bp3-html-select.bp3-large:after,.bp3-select.bp3-large .bp3-icon,.bp3-select.bp3-large:after{right:12px;top:12px}.bp3-html-select.bp3-fill,.bp3-html-select.bp3-fill select,.bp3-select.bp3-fill,.bp3-select.bp3-fill select{width:100%}.bp3-dark .bp3-html-select option,.bp3-dark .bp3-select option{background-color:#30404d;color:#f5f8fa}.bp3-dark .bp3-html-select option:disabled,.bp3-dark .bp3-select option:disabled{color:rgba(167,182,194,.6)}.bp3-dark .bp3-html-select:after,.bp3-dark .bp3-select:after{color:#a7b6c2}.bp3-select:after{font-family:"Icons16",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:""}.bp3-running-text table,table.bp3-html-table{border-spacing:0;font-size:14px}.bp3-running-text table td,.bp3-running-text table th,table.bp3-html-table td,table.bp3-html-table th{padding:11px;text-align:left;vertical-align:top}.bp3-running-text table th,table.bp3-html-table th{color:#182026;font-weight:600}.bp3-running-text table td,table.bp3-html-table td{color:#182026}.bp3-running-text table tbody tr:first-child td,.bp3-running-text table tbody tr:first-child th,table.bp3-html-table tbody tr:first-child td,table.bp3-html-table tbody tr:first-child th{box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}.bp3-dark .bp3-running-text table td,.bp3-dark .bp3-running-text table th,.bp3-dark table.bp3-html-table td,.bp3-dark table.bp3-html-table th,.bp3-running-text .bp3-dark table td,.bp3-running-text .bp3-dark table th{color:#f5f8fa}.bp3-dark .bp3-running-text table tbody tr:first-child td,.bp3-dark .bp3-running-text table tbody tr:first-child th,.bp3-dark table.bp3-html-table tbody tr:first-child td,.bp3-dark table.bp3-html-table tbody tr:first-child th,.bp3-running-text .bp3-dark table tbody tr:first-child td,.bp3-running-text .bp3-dark table tbody tr:first-child th{box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.15)}table.bp3-html-table.bp3-html-table-condensed td,table.bp3-html-table.bp3-html-table-condensed th,table.bp3-html-table.bp3-small td,table.bp3-html-table.bp3-small th{padding-bottom:6px;padding-top:6px}table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(191,204,214,.15)}table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}table.bp3-html-table.bp3-html-table-bordered tbody tr td{box-shadow:inset 0 1px 0 0 rgba(16,22,26,.15)}table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){box-shadow:inset 1px 1px 0 0 rgba(16,22,26,.15)}table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{box-shadow:none}table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){box-shadow:inset 1px 0 0 0 rgba(16,22,26,.15)}table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(191,204,214,.3);cursor:pointer}table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(191,204,214,.4)}.bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{background:rgba(92,112,128,.15)}.bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){box-shadow:inset 1px 0 0 0 hsla(0,0%,100%,.15)}.bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td{box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.15)}.bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child){box-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.15)}.bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{box-shadow:inset 1px 0 0 0 hsla(0,0%,100%,.15)}.bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{box-shadow:none}.bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{background-color:rgba(92,112,128,.3);cursor:pointer}.bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{background-color:rgba(92,112,128,.4)}.bp3-key-combo{display:flex;flex-direction:row;align-items:center}.bp3-key-combo>*{flex-grow:0;flex-shrink:0}.bp3-key-combo>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-key-combo:before,.bp3-key-combo>*{margin-right:5px}.bp3-key-combo:empty:before,.bp3-key-combo>:last-child{margin-right:0}.bp3-hotkey-dialog{padding-bottom:0;top:40px}.bp3-hotkey-dialog .bp3-dialog-body{margin:0;padding:0}.bp3-hotkey-dialog .bp3-hotkey-label{flex-grow:1}.bp3-hotkey-column{margin:auto;max-height:80vh;overflow-y:auto;padding:30px}.bp3-hotkey-column .bp3-heading{margin-bottom:20px}.bp3-hotkey-column .bp3-heading:not(:first-child){margin-top:40px}.bp3-hotkey{align-items:center;display:flex;justify-content:space-between;margin-left:0;margin-right:0}.bp3-hotkey:not(:last-child){margin-bottom:10px}.bp3-icon{display:inline-block;flex:0 0 auto;vertical-align:text-bottom}.bp3-icon:not(:empty):before{content:""!important;content:unset!important}.bp3-icon>svg{display:block}.bp3-icon>svg:not([fill]){fill:currentColor}.bp3-icon-large.bp3-intent-primary,.bp3-icon-standard.bp3-intent-primary,.bp3-icon.bp3-intent-primary{color:#106ba3}.bp3-dark .bp3-icon-large.bp3-intent-primary,.bp3-dark .bp3-icon-standard.bp3-intent-primary,.bp3-dark .bp3-icon.bp3-intent-primary{color:#48aff0}.bp3-icon-large.bp3-intent-success,.bp3-icon-standard.bp3-intent-success,.bp3-icon.bp3-intent-success{color:#0d8050}.bp3-dark .bp3-icon-large.bp3-intent-success,.bp3-dark .bp3-icon-standard.bp3-intent-success,.bp3-dark .bp3-icon.bp3-intent-success{color:#3dcc91}.bp3-icon-large.bp3-intent-warning,.bp3-icon-standard.bp3-intent-warning,.bp3-icon.bp3-intent-warning{color:#bf7326}.bp3-dark .bp3-icon-large.bp3-intent-warning,.bp3-dark .bp3-icon-standard.bp3-intent-warning,.bp3-dark .bp3-icon.bp3-intent-warning{color:#ffb366}.bp3-icon-large.bp3-intent-danger,.bp3-icon-standard.bp3-intent-danger,.bp3-icon.bp3-intent-danger{color:#c23030}.bp3-dark .bp3-icon-large.bp3-intent-danger,.bp3-dark .bp3-icon-standard.bp3-intent-danger,.bp3-dark .bp3-icon.bp3-intent-danger{color:#ff7373}span.bp3-icon-standard{font-family:"Icons16",sans-serif;font-size:16px}span.bp3-icon-large,span.bp3-icon-standard{font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block}span.bp3-icon-large{font-family:"Icons20",sans-serif;font-size:20px}span.bp3-icon:empty{font-family:"Icons20";font-size:inherit;font-style:normal;font-weight:400;line-height:1}span.bp3-icon:empty:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.bp3-icon-add:before{content:""}.bp3-icon-add-column-left:before{content:""}.bp3-icon-add-column-right:before{content:""}.bp3-icon-add-row-bottom:before{content:""}.bp3-icon-add-row-top:before{content:""}.bp3-icon-add-to-artifact:before{content:""}.bp3-icon-add-to-folder:before{content:""}.bp3-icon-airplane:before{content:""}.bp3-icon-align-center:before{content:""}.bp3-icon-align-justify:before{content:""}.bp3-icon-align-left:before{content:""}.bp3-icon-align-right:before{content:""}.bp3-icon-alignment-bottom:before{content:""}.bp3-icon-alignment-horizontal-center:before{content:""}.bp3-icon-alignment-left:before{content:""}.bp3-icon-alignment-right:before{content:""}.bp3-icon-alignment-top:before{content:""}.bp3-icon-alignment-vertical-center:before{content:""}.bp3-icon-annotation:before{content:""}.bp3-icon-application:before{content:""}.bp3-icon-applications:before{content:""}.bp3-icon-archive:before{content:""}.bp3-icon-arrow-bottom-left:before{content:"↙"}.bp3-icon-arrow-bottom-right:before{content:"↘"}.bp3-icon-arrow-down:before{content:"↓"}.bp3-icon-arrow-left:before{content:"←"}.bp3-icon-arrow-right:before{content:"→"}.bp3-icon-arrow-top-left:before{content:"↖"}.bp3-icon-arrow-top-right:before{content:"↗"}.bp3-icon-arrow-up:before{content:"↑"}.bp3-icon-arrows-horizontal:before{content:"↔"}.bp3-icon-arrows-vertical:before{content:"↕"}.bp3-icon-asterisk:before{content:"*"}.bp3-icon-automatic-updates:before{content:""}.bp3-icon-badge:before{content:""}.bp3-icon-ban-circle:before{content:""}.bp3-icon-bank-account:before{content:""}.bp3-icon-barcode:before{content:""}.bp3-icon-blank:before{content:""}.bp3-icon-blocked-person:before{content:""}.bp3-icon-bold:before{content:""}.bp3-icon-book:before{content:""}.bp3-icon-bookmark:before{content:""}.bp3-icon-box:before{content:""}.bp3-icon-briefcase:before{content:""}.bp3-icon-bring-data:before{content:""}.bp3-icon-build:before{content:""}.bp3-icon-calculator:before{content:""}.bp3-icon-calendar:before{content:""}.bp3-icon-camera:before{content:""}.bp3-icon-caret-down:before{content:"⌄"}.bp3-icon-caret-left:before{content:"〈"}.bp3-icon-caret-right:before{content:"〉"}.bp3-icon-caret-up:before{content:"⌃"}.bp3-icon-cell-tower:before{content:""}.bp3-icon-changes:before{content:""}.bp3-icon-chart:before{content:""}.bp3-icon-chat:before{content:""}.bp3-icon-chevron-backward:before{content:""}.bp3-icon-chevron-down:before{content:""}.bp3-icon-chevron-forward:before{content:""}.bp3-icon-chevron-left:before{content:""}.bp3-icon-chevron-right:before{content:""}.bp3-icon-chevron-up:before{content:""}.bp3-icon-circle:before{content:""}.bp3-icon-circle-arrow-down:before{content:""}.bp3-icon-circle-arrow-left:before{content:""}.bp3-icon-circle-arrow-right:before{content:""}.bp3-icon-circle-arrow-up:before{content:""}.bp3-icon-citation:before{content:""}.bp3-icon-clean:before{content:""}.bp3-icon-clipboard:before{content:""}.bp3-icon-cloud:before{content:"☁"}.bp3-icon-cloud-download:before{content:""}.bp3-icon-cloud-upload:before{content:""}.bp3-icon-code:before{content:""}.bp3-icon-code-block:before{content:""}.bp3-icon-cog:before{content:""}.bp3-icon-collapse-all:before{content:""}.bp3-icon-column-layout:before{content:""}.bp3-icon-comment:before{content:""}.bp3-icon-comparison:before{content:""}.bp3-icon-compass:before{content:""}.bp3-icon-compressed:before{content:""}.bp3-icon-confirm:before{content:""}.bp3-icon-console:before{content:""}.bp3-icon-contrast:before{content:""}.bp3-icon-control:before{content:""}.bp3-icon-credit-card:before{content:""}.bp3-icon-cross:before{content:"✗"}.bp3-icon-crown:before{content:""}.bp3-icon-cube:before{content:""}.bp3-icon-cube-add:before{content:""}.bp3-icon-cube-remove:before{content:""}.bp3-icon-curved-range-chart:before{content:""}.bp3-icon-cut:before{content:""}.bp3-icon-dashboard:before{content:""}.bp3-icon-data-lineage:before{content:""}.bp3-icon-database:before{content:""}.bp3-icon-delete:before{content:""}.bp3-icon-delta:before{content:"Δ"}.bp3-icon-derive-column:before{content:""}.bp3-icon-desktop:before{content:""}.bp3-icon-diagnosis:before{content:""}.bp3-icon-diagram-tree:before{content:""}.bp3-icon-direction-left:before{content:""}.bp3-icon-direction-right:before{content:""}.bp3-icon-disable:before{content:""}.bp3-icon-document:before{content:""}.bp3-icon-document-open:before{content:""}.bp3-icon-document-share:before{content:""}.bp3-icon-dollar:before{content:"$"}.bp3-icon-dot:before{content:"•"}.bp3-icon-double-caret-horizontal:before{content:""}.bp3-icon-double-caret-vertical:before{content:""}.bp3-icon-double-chevron-down:before{content:""}.bp3-icon-double-chevron-left:before{content:""}.bp3-icon-double-chevron-right:before{content:""}.bp3-icon-double-chevron-up:before{content:""}.bp3-icon-doughnut-chart:before{content:""}.bp3-icon-download:before{content:""}.bp3-icon-drag-handle-horizontal:before{content:""}.bp3-icon-drag-handle-vertical:before{content:""}.bp3-icon-draw:before{content:""}.bp3-icon-drive-time:before{content:""}.bp3-icon-duplicate:before{content:""}.bp3-icon-edit:before{content:"✎"}.bp3-icon-eject:before{content:"⏏"}.bp3-icon-endorsed:before{content:""}.bp3-icon-envelope:before{content:"✉"}.bp3-icon-equals:before{content:""}.bp3-icon-eraser:before{content:""}.bp3-icon-error:before{content:""}.bp3-icon-euro:before{content:"€"}.bp3-icon-exchange:before{content:""}.bp3-icon-exclude-row:before{content:""}.bp3-icon-expand-all:before{content:""}.bp3-icon-export:before{content:""}.bp3-icon-eye-off:before{content:""}.bp3-icon-eye-on:before{content:""}.bp3-icon-eye-open:before{content:""}.bp3-icon-fast-backward:before{content:""}.bp3-icon-fast-forward:before{content:""}.bp3-icon-feed:before{content:""}.bp3-icon-feed-subscribed:before{content:""}.bp3-icon-film:before{content:""}.bp3-icon-filter:before{content:""}.bp3-icon-filter-keep:before{content:""}.bp3-icon-filter-list:before{content:""}.bp3-icon-filter-open:before{content:""}.bp3-icon-filter-remove:before{content:""}.bp3-icon-flag:before{content:"⚑"}.bp3-icon-flame:before{content:""}.bp3-icon-flash:before{content:""}.bp3-icon-floppy-disk:before{content:""}.bp3-icon-flow-branch:before{content:""}.bp3-icon-flow-end:before{content:""}.bp3-icon-flow-linear:before{content:""}.bp3-icon-flow-review:before{content:""}.bp3-icon-flow-review-branch:before{content:""}.bp3-icon-flows:before{content:""}.bp3-icon-folder-close:before{content:""}.bp3-icon-folder-new:before{content:""}.bp3-icon-folder-open:before{content:""}.bp3-icon-folder-shared:before{content:""}.bp3-icon-folder-shared-open:before{content:""}.bp3-icon-follower:before{content:""}.bp3-icon-following:before{content:""}.bp3-icon-font:before{content:""}.bp3-icon-fork:before{content:""}.bp3-icon-form:before{content:""}.bp3-icon-full-circle:before{content:""}.bp3-icon-full-stacked-chart:before{content:""}.bp3-icon-fullscreen:before{content:""}.bp3-icon-function:before{content:""}.bp3-icon-gantt-chart:before{content:""}.bp3-icon-geolocation:before{content:""}.bp3-icon-geosearch:before{content:""}.bp3-icon-git-branch:before{content:""}.bp3-icon-git-commit:before{content:""}.bp3-icon-git-merge:before{content:""}.bp3-icon-git-new-branch:before{content:""}.bp3-icon-git-pull:before{content:""}.bp3-icon-git-push:before{content:""}.bp3-icon-git-repo:before{content:""}.bp3-icon-glass:before{content:""}.bp3-icon-globe:before{content:""}.bp3-icon-globe-network:before{content:""}.bp3-icon-graph:before{content:""}.bp3-icon-graph-remove:before{content:""}.bp3-icon-greater-than:before{content:""}.bp3-icon-greater-than-or-equal-to:before{content:""}.bp3-icon-grid:before{content:""}.bp3-icon-grid-view:before{content:""}.bp3-icon-group-objects:before{content:""}.bp3-icon-grouped-bar-chart:before{content:""}.bp3-icon-hand:before{content:""}.bp3-icon-hand-down:before{content:""}.bp3-icon-hand-left:before{content:""}.bp3-icon-hand-right:before{content:""}.bp3-icon-hand-up:before{content:""}.bp3-icon-header:before{content:""}.bp3-icon-header-one:before{content:""}.bp3-icon-header-two:before{content:""}.bp3-icon-headset:before{content:""}.bp3-icon-heart:before{content:"♥"}.bp3-icon-heart-broken:before{content:""}.bp3-icon-heat-grid:before{content:""}.bp3-icon-heatmap:before{content:""}.bp3-icon-help:before{content:"?"}.bp3-icon-helper-management:before{content:""}.bp3-icon-highlight:before{content:""}.bp3-icon-history:before{content:""}.bp3-icon-home:before{content:"⌂"}.bp3-icon-horizontal-bar-chart:before{content:""}.bp3-icon-horizontal-bar-chart-asc:before{content:""}.bp3-icon-horizontal-bar-chart-desc:before{content:""}.bp3-icon-horizontal-distribution:before{content:""}.bp3-icon-id-number:before{content:""}.bp3-icon-image-rotate-left:before{content:""}.bp3-icon-image-rotate-right:before{content:""}.bp3-icon-import:before{content:""}.bp3-icon-inbox:before{content:""}.bp3-icon-inbox-filtered:before{content:""}.bp3-icon-inbox-geo:before{content:""}.bp3-icon-inbox-search:before{content:""}.bp3-icon-inbox-update:before{content:""}.bp3-icon-info-sign:before{content:"ℹ"}.bp3-icon-inheritance:before{content:""}.bp3-icon-inner-join:before{content:""}.bp3-icon-insert:before{content:""}.bp3-icon-intersection:before{content:""}.bp3-icon-ip-address:before{content:""}.bp3-icon-issue:before{content:""}.bp3-icon-issue-closed:before{content:""}.bp3-icon-issue-new:before{content:""}.bp3-icon-italic:before{content:""}.bp3-icon-join-table:before{content:""}.bp3-icon-key:before{content:""}.bp3-icon-key-backspace:before{content:""}.bp3-icon-key-command:before{content:""}.bp3-icon-key-control:before{content:""}.bp3-icon-key-delete:before{content:""}.bp3-icon-key-enter:before{content:""}.bp3-icon-key-escape:before{content:""}.bp3-icon-key-option:before{content:""}.bp3-icon-key-shift:before{content:""}.bp3-icon-key-tab:before{content:""}.bp3-icon-known-vehicle:before{content:""}.bp3-icon-lab-test:before{content:""}.bp3-icon-label:before{content:""}.bp3-icon-layer:before{content:""}.bp3-icon-layers:before{content:""}.bp3-icon-layout:before{content:""}.bp3-icon-layout-auto:before{content:""}.bp3-icon-layout-balloon:before{content:""}.bp3-icon-layout-circle:before{content:""}.bp3-icon-layout-grid:before{content:""}.bp3-icon-layout-group-by:before{content:""}.bp3-icon-layout-hierarchy:before{content:""}.bp3-icon-layout-linear:before{content:""}.bp3-icon-layout-skew-grid:before{content:""}.bp3-icon-layout-sorted-clusters:before{content:""}.bp3-icon-learning:before{content:""}.bp3-icon-left-join:before{content:""}.bp3-icon-less-than:before{content:""}.bp3-icon-less-than-or-equal-to:before{content:""}.bp3-icon-lifesaver:before{content:""}.bp3-icon-lightbulb:before{content:""}.bp3-icon-link:before{content:""}.bp3-icon-list:before{content:"☰"}.bp3-icon-list-columns:before{content:""}.bp3-icon-list-detail-view:before{content:""}.bp3-icon-locate:before{content:""}.bp3-icon-lock:before{content:""}.bp3-icon-log-in:before{content:""}.bp3-icon-log-out:before{content:""}.bp3-icon-manual:before{content:""}.bp3-icon-manually-entered-data:before{content:""}.bp3-icon-map:before{content:""}.bp3-icon-map-create:before{content:""}.bp3-icon-map-marker:before{content:""}.bp3-icon-maximize:before{content:""}.bp3-icon-media:before{content:""}.bp3-icon-menu:before{content:""}.bp3-icon-menu-closed:before{content:""}.bp3-icon-menu-open:before{content:""}.bp3-icon-merge-columns:before{content:""}.bp3-icon-merge-links:before{content:""}.bp3-icon-minimize:before{content:""}.bp3-icon-minus:before{content:"−"}.bp3-icon-mobile-phone:before{content:""}.bp3-icon-mobile-video:before{content:""}.bp3-icon-moon:before{content:""}.bp3-icon-more:before{content:""}.bp3-icon-mountain:before{content:""}.bp3-icon-move:before{content:""}.bp3-icon-mugshot:before{content:""}.bp3-icon-multi-select:before{content:""}.bp3-icon-music:before{content:""}.bp3-icon-new-drawing:before{content:""}.bp3-icon-new-grid-item:before{content:""}.bp3-icon-new-layer:before{content:""}.bp3-icon-new-layers:before{content:""}.bp3-icon-new-link:before{content:""}.bp3-icon-new-object:before{content:""}.bp3-icon-new-person:before{content:""}.bp3-icon-new-prescription:before{content:""}.bp3-icon-new-text-box:before{content:""}.bp3-icon-ninja:before{content:""}.bp3-icon-not-equal-to:before{content:""}.bp3-icon-notifications:before{content:""}.bp3-icon-notifications-updated:before{content:""}.bp3-icon-numbered-list:before{content:""}.bp3-icon-numerical:before{content:""}.bp3-icon-office:before{content:""}.bp3-icon-offline:before{content:""}.bp3-icon-oil-field:before{content:""}.bp3-icon-one-column:before{content:""}.bp3-icon-outdated:before{content:""}.bp3-icon-page-layout:before{content:""}.bp3-icon-panel-stats:before{content:""}.bp3-icon-panel-table:before{content:""}.bp3-icon-paperclip:before{content:""}.bp3-icon-paragraph:before{content:""}.bp3-icon-path:before{content:""}.bp3-icon-path-search:before{content:""}.bp3-icon-pause:before{content:""}.bp3-icon-people:before{content:""}.bp3-icon-percentage:before{content:""}.bp3-icon-person:before{content:""}.bp3-icon-phone:before{content:"☎"}.bp3-icon-pie-chart:before{content:""}.bp3-icon-pin:before{content:""}.bp3-icon-pivot:before{content:""}.bp3-icon-pivot-table:before{content:""}.bp3-icon-play:before{content:""}.bp3-icon-plus:before{content:"+"}.bp3-icon-polygon-filter:before{content:""}.bp3-icon-power:before{content:""}.bp3-icon-predictive-analysis:before{content:""}.bp3-icon-prescription:before{content:""}.bp3-icon-presentation:before{content:""}.bp3-icon-print:before{content:"⎙"}.bp3-icon-projects:before{content:""}.bp3-icon-properties:before{content:""}.bp3-icon-property:before{content:""}.bp3-icon-publish-function:before{content:""}.bp3-icon-pulse:before{content:""}.bp3-icon-random:before{content:""}.bp3-icon-record:before{content:""}.bp3-icon-redo:before{content:""}.bp3-icon-refresh:before{content:""}.bp3-icon-regression-chart:before{content:""}.bp3-icon-remove:before{content:""}.bp3-icon-remove-column:before{content:""}.bp3-icon-remove-column-left:before{content:""}.bp3-icon-remove-column-right:before{content:""}.bp3-icon-remove-row-bottom:before{content:""}.bp3-icon-remove-row-top:before{content:""}.bp3-icon-repeat:before{content:""}.bp3-icon-reset:before{content:""}.bp3-icon-resolve:before{content:""}.bp3-icon-rig:before{content:""}.bp3-icon-right-join:before{content:""}.bp3-icon-ring:before{content:""}.bp3-icon-rotate-document:before{content:""}.bp3-icon-rotate-page:before{content:""}.bp3-icon-satellite:before{content:""}.bp3-icon-saved:before{content:""}.bp3-icon-scatter-plot:before{content:""}.bp3-icon-search:before{content:""}.bp3-icon-search-around:before{content:""}.bp3-icon-search-template:before{content:""}.bp3-icon-search-text:before{content:""}.bp3-icon-segmented-control:before{content:""}.bp3-icon-select:before{content:""}.bp3-icon-selection:before{content:"⦿"}.bp3-icon-send-to:before{content:""}.bp3-icon-send-to-graph:before{content:""}.bp3-icon-send-to-map:before{content:""}.bp3-icon-series-add:before{content:""}.bp3-icon-series-configuration:before{content:""}.bp3-icon-series-derived:before{content:""}.bp3-icon-series-filtered:before{content:""}.bp3-icon-series-search:before{content:""}.bp3-icon-settings:before{content:""}.bp3-icon-share:before{content:""}.bp3-icon-shield:before{content:""}.bp3-icon-shop:before{content:""}.bp3-icon-shopping-cart:before{content:""}.bp3-icon-signal-search:before{content:""}.bp3-icon-sim-card:before{content:""}.bp3-icon-slash:before{content:""}.bp3-icon-small-cross:before{content:""}.bp3-icon-small-minus:before{content:""}.bp3-icon-small-plus:before{content:""}.bp3-icon-small-tick:before{content:""}.bp3-icon-snowflake:before{content:""}.bp3-icon-social-media:before{content:""}.bp3-icon-sort:before{content:""}.bp3-icon-sort-alphabetical:before{content:""}.bp3-icon-sort-alphabetical-desc:before{content:""}.bp3-icon-sort-asc:before{content:""}.bp3-icon-sort-desc:before{content:""}.bp3-icon-sort-numerical:before{content:""}.bp3-icon-sort-numerical-desc:before{content:""}.bp3-icon-split-columns:before{content:""}.bp3-icon-square:before{content:""}.bp3-icon-stacked-chart:before{content:""}.bp3-icon-star:before{content:"★"}.bp3-icon-star-empty:before{content:"☆"}.bp3-icon-step-backward:before{content:""}.bp3-icon-step-chart:before{content:""}.bp3-icon-step-forward:before{content:""}.bp3-icon-stop:before{content:""}.bp3-icon-stopwatch:before{content:""}.bp3-icon-strikethrough:before{content:""}.bp3-icon-style:before{content:""}.bp3-icon-swap-horizontal:before{content:""}.bp3-icon-swap-vertical:before{content:""}.bp3-icon-symbol-circle:before{content:""}.bp3-icon-symbol-cross:before{content:""}.bp3-icon-symbol-diamond:before{content:""}.bp3-icon-symbol-square:before{content:""}.bp3-icon-symbol-triangle-down:before{content:""}.bp3-icon-symbol-triangle-up:before{content:""}.bp3-icon-tag:before{content:""}.bp3-icon-take-action:before{content:""}.bp3-icon-taxi:before{content:""}.bp3-icon-text-highlight:before{content:""}.bp3-icon-th:before{content:""}.bp3-icon-th-derived:before{content:""}.bp3-icon-th-disconnect:before{content:""}.bp3-icon-th-filtered:before{content:""}.bp3-icon-th-list:before{content:""}.bp3-icon-thumbs-down:before{content:""}.bp3-icon-thumbs-up:before{content:""}.bp3-icon-tick:before{content:"✓"}.bp3-icon-tick-circle:before{content:""}.bp3-icon-time:before{content:"⏲"}.bp3-icon-timeline-area-chart:before{content:""}.bp3-icon-timeline-bar-chart:before{content:""}.bp3-icon-timeline-events:before{content:""}.bp3-icon-timeline-line-chart:before{content:""}.bp3-icon-tint:before{content:""}.bp3-icon-torch:before{content:""}.bp3-icon-tractor:before{content:""}.bp3-icon-train:before{content:""}.bp3-icon-translate:before{content:""}.bp3-icon-trash:before{content:""}.bp3-icon-tree:before{content:""}.bp3-icon-trending-down:before{content:""}.bp3-icon-trending-up:before{content:""}.bp3-icon-truck:before{content:""}.bp3-icon-two-columns:before{content:""}.bp3-icon-unarchive:before{content:""}.bp3-icon-underline:before{content:"⎁"}.bp3-icon-undo:before{content:"⎌"}.bp3-icon-ungroup-objects:before{content:""}.bp3-icon-unknown-vehicle:before{content:""}.bp3-icon-unlock:before{content:""}.bp3-icon-unpin:before{content:""}.bp3-icon-unresolve:before{content:""}.bp3-icon-updated:before{content:""}.bp3-icon-upload:before{content:""}.bp3-icon-user:before{content:""}.bp3-icon-variable:before{content:""}.bp3-icon-vertical-bar-chart-asc:before{content:""}.bp3-icon-vertical-bar-chart-desc:before{content:""}.bp3-icon-vertical-distribution:before{content:""}.bp3-icon-video:before{content:""}.bp3-icon-volume-down:before{content:""}.bp3-icon-volume-off:before{content:""}.bp3-icon-volume-up:before{content:""}.bp3-icon-walk:before{content:""}.bp3-icon-warning-sign:before{content:""}.bp3-icon-waterfall-chart:before{content:""}.bp3-icon-widget:before{content:""}.bp3-icon-widget-button:before{content:""}.bp3-icon-widget-footer:before{content:""}.bp3-icon-widget-header:before{content:""}.bp3-icon-wrench:before{content:""}.bp3-icon-zoom-in:before{content:""}.bp3-icon-zoom-out:before{content:""}.bp3-icon-zoom-to-fit:before{content:""}.bp3-submenu .bp3-popover-target,.bp3-submenu>.bp3-popover-wrapper{display:block}.bp3-submenu.bp3-popover{box-shadow:none;padding:0 5px}.bp3-submenu.bp3-popover>.bp3-popover-content{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2)}.bp3-dark .bp3-submenu.bp3-popover,.bp3-submenu.bp3-popover.bp3-dark{box-shadow:none}.bp3-dark .bp3-submenu.bp3-popover>.bp3-popover-content,.bp3-submenu.bp3-popover.bp3-dark>.bp3-popover-content{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-menu{background:#fff;border-radius:3px;color:#182026;list-style:none;margin:0;min-width:180px;padding:5px;text-align:left}.bp3-menu-divider{border-top:1px solid rgba(16,22,26,.15);display:block;margin:5px}.bp3-dark .bp3-menu-divider{border-top-color:hsla(0,0%,100%,.15)}.bp3-menu-item{display:flex;flex-direction:row;align-items:flex-start;border-radius:2px;color:inherit;line-height:20px;padding:5px 7px;text-decoration:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-menu-item>*{flex-grow:0;flex-shrink:0}.bp3-menu-item>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-menu-item:before,.bp3-menu-item>*{margin-right:7px}.bp3-menu-item:empty:before,.bp3-menu-item>:last-child{margin-right:0}.bp3-menu-item>.bp3-fill{word-break:break-word}.bp3-menu-item:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(167,182,194,.3);cursor:pointer;text-decoration:none}.bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-dark .bp3-menu-item{color:inherit}.bp3-dark .bp3-menu-item:hover,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-menu-item{background-color:rgba(138,155,168,.15);color:inherit}.bp3-dark .bp3-menu-item.bp3-disabled{background-color:inherit;color:rgba(167,182,194,.6)}.bp3-menu-item.bp3-intent-primary{color:#106ba3}.bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.bp3-menu-item.bp3-intent-primary .bp3-menu-item-label,.bp3-menu-item.bp3-intent-primary:after,.bp3-menu-item.bp3-intent-primary:before{color:#106ba3}.bp3-menu-item.bp3-intent-primary.bp3-active,.bp3-menu-item.bp3-intent-primary:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item{background-color:#137cbd}.bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.bp3-menu-item.bp3-intent-primary.bp3-active,.bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-primary.bp3-active:after,.bp3-menu-item.bp3-intent-primary.bp3-active:before,.bp3-menu-item.bp3-intent-primary:active,.bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-primary:active:after,.bp3-menu-item.bp3-intent-primary:active:before,.bp3-menu-item.bp3-intent-primary:hover,.bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.bp3-menu-item.bp3-intent-primary:hover:after,.bp3-menu-item.bp3-intent-primary:hover:before,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:after,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:before{color:#fff}.bp3-menu-item.bp3-intent-success{color:#0d8050}.bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.bp3-menu-item.bp3-intent-success .bp3-menu-item-label,.bp3-menu-item.bp3-intent-success:after,.bp3-menu-item.bp3-intent-success:before{color:#0d8050}.bp3-menu-item.bp3-intent-success.bp3-active,.bp3-menu-item.bp3-intent-success:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item{background-color:#0f9960}.bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.bp3-menu-item.bp3-intent-success.bp3-active,.bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-success.bp3-active:after,.bp3-menu-item.bp3-intent-success.bp3-active:before,.bp3-menu-item.bp3-intent-success:active,.bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-success:active:after,.bp3-menu-item.bp3-intent-success:active:before,.bp3-menu-item.bp3-intent-success:hover,.bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.bp3-menu-item.bp3-intent-success:hover:after,.bp3-menu-item.bp3-intent-success:hover:before,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:after,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:before{color:#fff}.bp3-menu-item.bp3-intent-warning{color:#bf7326}.bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.bp3-menu-item.bp3-intent-warning .bp3-menu-item-label,.bp3-menu-item.bp3-intent-warning:after,.bp3-menu-item.bp3-intent-warning:before{color:#bf7326}.bp3-menu-item.bp3-intent-warning.bp3-active,.bp3-menu-item.bp3-intent-warning:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item{background-color:#d9822b}.bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.bp3-menu-item.bp3-intent-warning.bp3-active,.bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-warning.bp3-active:after,.bp3-menu-item.bp3-intent-warning.bp3-active:before,.bp3-menu-item.bp3-intent-warning:active,.bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-warning:active:after,.bp3-menu-item.bp3-intent-warning:active:before,.bp3-menu-item.bp3-intent-warning:hover,.bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.bp3-menu-item.bp3-intent-warning:hover:after,.bp3-menu-item.bp3-intent-warning:hover:before,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:after,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:before{color:#fff}.bp3-menu-item.bp3-intent-danger{color:#c23030}.bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.bp3-menu-item.bp3-intent-danger .bp3-menu-item-label,.bp3-menu-item.bp3-intent-danger:after,.bp3-menu-item.bp3-intent-danger:before{color:#c23030}.bp3-menu-item.bp3-intent-danger.bp3-active,.bp3-menu-item.bp3-intent-danger:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item{background-color:#db3737}.bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.bp3-menu-item.bp3-intent-danger.bp3-active,.bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-danger.bp3-active:after,.bp3-menu-item.bp3-intent-danger.bp3-active:before,.bp3-menu-item.bp3-intent-danger:active,.bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.bp3-menu-item.bp3-intent-danger:active:after,.bp3-menu-item.bp3-intent-danger:active:before,.bp3-menu-item.bp3-intent-danger:hover,.bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.bp3-menu-item.bp3-intent-danger:hover:after,.bp3-menu-item.bp3-intent-danger:hover:before,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:after,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:before{color:#fff}.bp3-menu-item:before{font-family:"Icons16",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:7px}.bp3-menu-item:before,.bp3-menu-item>.bp3-icon{color:#5c7080;margin-top:2px}.bp3-menu-item .bp3-menu-item-label{color:#5c7080}.bp3-menu-item:hover,.bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-menu-item{color:inherit}.bp3-menu-item.bp3-active,.bp3-menu-item:active{background-color:rgba(115,134,148,.3)}.bp3-menu-item.bp3-disabled{background-color:inherit!important;cursor:not-allowed!important;outline:none!important}.bp3-menu-item.bp3-disabled,.bp3-menu-item.bp3-disabled .bp3-menu-item-label,.bp3-menu-item.bp3-disabled:before,.bp3-menu-item.bp3-disabled>.bp3-icon{color:rgba(92,112,128,.6)!important}.bp3-large .bp3-menu-item{font-size:16px;line-height:22px;padding:9px 7px}.bp3-large .bp3-menu-item .bp3-icon{margin-top:3px}.bp3-large .bp3-menu-item:before{font-family:"Icons20",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin-right:10px;margin-top:1px}button.bp3-menu-item{background:none;border:none;text-align:left;width:100%}.bp3-menu-header{border-top:1px solid rgba(16,22,26,.15);display:block;margin:5px;cursor:default;padding-left:2px}.bp3-dark .bp3-menu-header{border-top-color:hsla(0,0%,100%,.15)}.bp3-menu-header:first-of-type{border-top:none}.bp3-menu-header>h6{color:#182026;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;line-height:17px;margin:0;padding:10px 7px 0 1px}.bp3-menu-header:first-of-type>h6{padding-top:0}.bp3-large .bp3-menu-header>h6{font-size:18px;padding-bottom:5px;padding-top:15px}.bp3-large .bp3-menu-header:first-of-type>h6{padding-top:0}.bp3-dark .bp3-menu{background:#30404d;color:#f5f8fa}.bp3-dark .bp3-menu-item.bp3-intent-primary{color:#48aff0}.bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{color:inherit}.bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-primary:after,.bp3-dark .bp3-menu-item.bp3-intent-primary:before{color:#48aff0}.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item{background-color:#137cbd}.bp3-dark .bp3-menu-item.bp3-intent-primary:active{background-color:#106ba3}.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active:after,.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active:before,.bp3-dark .bp3-menu-item.bp3-intent-primary:active,.bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-primary:active:after,.bp3-dark .bp3-menu-item.bp3-intent-primary:active:before,.bp3-dark .bp3-menu-item.bp3-intent-primary:hover,.bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-primary:hover:after,.bp3-dark .bp3-menu-item.bp3-intent-primary:hover:before,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:after,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:before,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:after,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-primary.bp3-menu-item:before{color:#fff}.bp3-dark .bp3-menu-item.bp3-intent-success{color:#3dcc91}.bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{color:inherit}.bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-success:after,.bp3-dark .bp3-menu-item.bp3-intent-success:before{color:#3dcc91}.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-success:hover,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item{background-color:#0f9960}.bp3-dark .bp3-menu-item.bp3-intent-success:active{background-color:#0d8050}.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active:after,.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active:before,.bp3-dark .bp3-menu-item.bp3-intent-success:active,.bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-success:active:after,.bp3-dark .bp3-menu-item.bp3-intent-success:active:before,.bp3-dark .bp3-menu-item.bp3-intent-success:hover,.bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-success:hover:after,.bp3-dark .bp3-menu-item.bp3-intent-success:hover:before,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:after,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:before,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:after,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-success.bp3-menu-item:before{color:#fff}.bp3-dark .bp3-menu-item.bp3-intent-warning{color:#ffb366}.bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{color:inherit}.bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-warning:after,.bp3-dark .bp3-menu-item.bp3-intent-warning:before{color:#ffb366}.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item{background-color:#d9822b}.bp3-dark .bp3-menu-item.bp3-intent-warning:active{background-color:#bf7326}.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active:after,.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active:before,.bp3-dark .bp3-menu-item.bp3-intent-warning:active,.bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-warning:active:after,.bp3-dark .bp3-menu-item.bp3-intent-warning:active:before,.bp3-dark .bp3-menu-item.bp3-intent-warning:hover,.bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-warning:hover:after,.bp3-dark .bp3-menu-item.bp3-intent-warning:hover:before,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:after,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:before,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:after,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-warning.bp3-menu-item:before{color:#fff}.bp3-dark .bp3-menu-item.bp3-intent-danger{color:#ff7373}.bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{color:inherit}.bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-danger:after,.bp3-dark .bp3-menu-item.bp3-intent-danger:before{color:#ff7373}.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item{background-color:#db3737}.bp3-dark .bp3-menu-item.bp3-intent-danger:active{background-color:#c23030}.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active,.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active:after,.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active:before,.bp3-dark .bp3-menu-item.bp3-intent-danger:active,.bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-danger:active:after,.bp3-dark .bp3-menu-item.bp3-intent-danger:active:before,.bp3-dark .bp3-menu-item.bp3-intent-danger:hover,.bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-intent-danger:hover:after,.bp3-dark .bp3-menu-item.bp3-intent-danger:hover:before,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:after,.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:before,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:after,.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open>.bp3-intent-danger.bp3-menu-item:before{color:#fff}.bp3-dark .bp3-menu-item .bp3-menu-item-label,.bp3-dark .bp3-menu-item:before,.bp3-dark .bp3-menu-item>.bp3-icon{color:#a7b6c2}.bp3-dark .bp3-menu-item.bp3-active,.bp3-dark .bp3-menu-item:active{background-color:rgba(138,155,168,.3)}.bp3-dark .bp3-menu-item.bp3-disabled,.bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label,.bp3-dark .bp3-menu-item.bp3-disabled:before,.bp3-dark .bp3-menu-item.bp3-disabled>.bp3-icon{color:rgba(167,182,194,.6)!important}.bp3-dark .bp3-menu-divider,.bp3-dark .bp3-menu-header{border-color:hsla(0,0%,100%,.15)}.bp3-dark .bp3-menu-header>h6{color:#f5f8fa}.bp3-label .bp3-menu{margin-top:5px}.bp3-navbar{background-color:#fff;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.2);height:50px;padding:0 15px;position:relative;width:100%;z-index:10}.bp3-dark .bp3-navbar,.bp3-navbar.bp3-dark{background-color:#394b59}.bp3-navbar.bp3-dark{box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-navbar{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 0 0 rgba(16,22,26,0),0 1px 1px rgba(16,22,26,.4)}.bp3-navbar.bp3-fixed-top{left:0;position:fixed;right:0;top:0}.bp3-navbar-heading{font-size:16px;margin-right:15px}.bp3-navbar-group{align-items:center;display:flex;height:50px}.bp3-navbar-group.bp3-align-left{float:left}.bp3-navbar-group.bp3-align-right{float:right}.bp3-navbar-divider{border-left:1px solid rgba(16,22,26,.15);height:20px;margin:0 10px}.bp3-dark .bp3-navbar-divider{border-left-color:hsla(0,0%,100%,.15)}.bp3-non-ideal-state{display:flex;flex-direction:column;align-items:center;height:100%;justify-content:center;text-align:center;width:100%}.bp3-non-ideal-state>*{flex-grow:0;flex-shrink:0}.bp3-non-ideal-state>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-non-ideal-state:before,.bp3-non-ideal-state>*{margin-bottom:20px}.bp3-non-ideal-state:empty:before,.bp3-non-ideal-state>:last-child{margin-bottom:0}.bp3-non-ideal-state>*{max-width:400px}.bp3-non-ideal-state-visual{color:rgba(92,112,128,.6);font-size:60px}.bp3-dark .bp3-non-ideal-state-visual{color:rgba(167,182,194,.6)}.bp3-overflow-list{display:flex;flex-wrap:nowrap;min-width:0}.bp3-overflow-list-spacer{flex-shrink:1;width:1px}body.bp3-overlay-open{overflow:hidden}.bp3-overlay{bottom:0;left:0;position:static;right:0;top:0;z-index:20}.bp3-overlay:not(.bp3-overlay-open){pointer-events:none}.bp3-overlay.bp3-overlay-container{overflow:hidden;position:fixed}.bp3-overlay.bp3-overlay-container.bp3-overlay-inline{position:absolute}.bp3-overlay.bp3-overlay-scroll-container{overflow:auto;position:fixed}.bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{position:absolute}.bp3-overlay.bp3-overlay-inline{display:inline;overflow:visible}.bp3-overlay-content{position:fixed;z-index:20}.bp3-overlay-inline .bp3-overlay-content,.bp3-overlay-scroll-container .bp3-overlay-content{position:absolute}.bp3-overlay-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;opacity:1;background-color:rgba(16,22,26,.7);overflow:auto;-webkit-user-select:none;-ms-user-select:none;user-select:none;z-index:20}.bp3-overlay-backdrop.bp3-overlay-appear,.bp3-overlay-backdrop.bp3-overlay-enter{opacity:0}.bp3-overlay-backdrop.bp3-overlay-appear-active,.bp3-overlay-backdrop.bp3-overlay-enter-active{opacity:1;transition-delay:0;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-overlay-backdrop.bp3-overlay-exit{opacity:1}.bp3-overlay-backdrop.bp3-overlay-exit-active{opacity:0;transition-delay:0;transition-duration:.2s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-overlay-backdrop:focus{outline:none}.bp3-overlay-inline .bp3-overlay-backdrop{position:absolute}.bp3-panel-stack{overflow:hidden;position:relative}.bp3-panel-stack-header{align-items:center;box-shadow:0 1px rgba(16,22,26,.15);display:flex;flex-shrink:0;height:30px;z-index:1}.bp3-dark .bp3-panel-stack-header{box-shadow:0 1px hsla(0,0%,100%,.15)}.bp3-panel-stack-header>span{align-items:stretch;display:flex;flex:1 1}.bp3-panel-stack-header .bp3-heading{margin:0 5px}.bp3-button.bp3-panel-stack-header-back{margin-left:5px;padding-left:0;white-space:nowrap}.bp3-button.bp3-panel-stack-header-back .bp3-icon{margin:0 2px}.bp3-panel-stack-view{bottom:0;left:0;position:absolute;right:0;top:0;background-color:#fff;border-right:1px solid rgba(16,22,26,.15);display:flex;flex-direction:column;margin-right:-1px;overflow-y:auto;z-index:1}.bp3-dark .bp3-panel-stack-view{background-color:#30404d}.bp3-panel-stack-view:nth-last-child(n+4){display:none}.bp3-panel-stack-push .bp3-panel-stack-appear,.bp3-panel-stack-push .bp3-panel-stack-enter{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}.bp3-panel-stack-push .bp3-panel-stack-appear-active,.bp3-panel-stack-push .bp3-panel-stack-enter-active{-webkit-transform:translate(0);transform:translate(0);opacity:1;transition-delay:0;transition-duration:.4s;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease}.bp3-panel-stack-push .bp3-panel-stack-exit{-webkit-transform:translate(0);transform:translate(0);opacity:1}.bp3-panel-stack-push .bp3-panel-stack-exit-active{transition-delay:0;transition-duration:.4s;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease}.bp3-panel-stack-pop .bp3-panel-stack-appear,.bp3-panel-stack-pop .bp3-panel-stack-enter,.bp3-panel-stack-push .bp3-panel-stack-exit-active{-webkit-transform:translateX(-50%);transform:translateX(-50%);opacity:0}.bp3-panel-stack-pop .bp3-panel-stack-appear-active,.bp3-panel-stack-pop .bp3-panel-stack-enter-active{-webkit-transform:translate(0);transform:translate(0);opacity:1;transition-delay:0;transition-duration:.4s;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease}.bp3-panel-stack-pop .bp3-panel-stack-exit{-webkit-transform:translate(0);transform:translate(0);opacity:1}.bp3-panel-stack-pop .bp3-panel-stack-exit-active{-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0;transition-delay:0;transition-duration:.4s;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease}.bp3-popover{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1);border-radius:3px;display:inline-block;z-index:20}.bp3-popover .bp3-popover-arrow{height:30px;position:absolute;width:30px}.bp3-popover .bp3-popover-arrow:before{height:20px;margin:5px;width:20px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover{margin-bottom:17px;margin-top:-17px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{bottom:-11px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover{margin-left:17px}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{left:-11px}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover{margin-top:17px}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{top:-11px}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover{margin-left:-17px;margin-right:17px}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{right:-11px}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.bp3-tether-element-attached-middle>.bp3-popover>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.bp3-tether-element-attached-center>.bp3-popover>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-popover>.bp3-popover-arrow{top:-.3934px}.bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-popover>.bp3-popover-arrow{right:-.3934px}.bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-popover>.bp3-popover-arrow{left:-.3934px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-popover>.bp3-popover-arrow{bottom:-.3934px}.bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:top left;transform-origin:top left}.bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:top center;transform-origin:top center}.bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:top right;transform-origin:top right}.bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:center left;transform-origin:center left}.bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:center center;transform-origin:center center}.bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:center right;transform-origin:center right}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-popover{-webkit-transform-origin:bottom left;transform-origin:bottom left}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-popover{-webkit-transform-origin:bottom center;transform-origin:bottom center}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-popover{-webkit-transform-origin:bottom right;transform-origin:bottom right}.bp3-popover .bp3-popover-content{background:#fff;color:inherit}.bp3-popover .bp3-popover-arrow:before{box-shadow:1px 1px 6px rgba(16,22,26,.2)}.bp3-popover .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.bp3-popover .bp3-popover-arrow-fill{fill:#fff}.bp3-popover-appear>.bp3-popover,.bp3-popover-enter>.bp3-popover{-webkit-transform:scale(.3);transform:scale(.3)}.bp3-popover-appear-active>.bp3-popover,.bp3-popover-enter-active>.bp3-popover{-webkit-transform:scale(1);transform:scale(1);transition-delay:0;transition-duration:.3s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-popover-exit>.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.bp3-popover-exit-active>.bp3-popover{-webkit-transform:scale(.3);transform:scale(.3);transition-delay:0;transition-duration:.3s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-popover .bp3-popover-content{border-radius:3px;position:relative}.bp3-popover.bp3-popover-content-sizing .bp3-popover-content{max-width:350px;padding:20px}.bp3-popover-target+.bp3-overlay .bp3-popover.bp3-popover-content-sizing{width:350px}.bp3-popover.bp3-minimal{margin:0!important}.bp3-popover.bp3-minimal .bp3-popover-arrow{display:none}.bp3-popover-appear>.bp3-popover.bp3-minimal.bp3-popover,.bp3-popover-enter>.bp3-popover.bp3-minimal.bp3-popover,.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.bp3-popover-appear-active>.bp3-popover.bp3-minimal.bp3-popover,.bp3-popover-enter-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-popover-exit>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1)}.bp3-popover-exit-active>.bp3-popover.bp3-minimal.bp3-popover{-webkit-transform:scale(1);transform:scale(1);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-dark .bp3-popover,.bp3-popover.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-dark .bp3-popover .bp3-popover-content,.bp3-popover.bp3-dark .bp3-popover-content{background:#30404d;color:inherit}.bp3-dark .bp3-popover .bp3-popover-arrow:before,.bp3-popover.bp3-dark .bp3-popover-arrow:before{box-shadow:1px 1px 6px rgba(16,22,26,.4)}.bp3-dark .bp3-popover .bp3-popover-arrow-border,.bp3-popover.bp3-dark .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.bp3-dark .bp3-popover .bp3-popover-arrow-fill,.bp3-popover.bp3-dark .bp3-popover-arrow-fill{fill:#30404d}.bp3-popover-arrow:before{border-radius:2px;content:"";display:block;position:absolute;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.bp3-tether-pinned .bp3-popover-arrow{display:none}.bp3-popover-backdrop{background:hsla(0,0%,100%,0)}.bp3-transition-container{opacity:1;display:flex;z-index:20}.bp3-transition-container.bp3-popover-appear,.bp3-transition-container.bp3-popover-enter{opacity:0}.bp3-transition-container.bp3-popover-appear-active,.bp3-transition-container.bp3-popover-enter-active{opacity:1;transition-delay:0;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-transition-container.bp3-popover-exit{opacity:1}.bp3-transition-container.bp3-popover-exit-active{opacity:0;transition-delay:0;transition-duration:.1s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-transition-container:focus{outline:none}.bp3-transition-container.bp3-popover-leave .bp3-popover-content{pointer-events:none}.bp3-transition-container[data-x-out-of-boundaries]{display:none}span.bp3-popover-target{display:inline-block}.bp3-popover-wrapper.bp3-fill{width:100%}.bp3-portal{left:0;position:absolute;right:0;top:0}@-webkit-keyframes linear-progress-bar-stripes{0%{background-position:0 0}to{background-position:30px 0}}@keyframes linear-progress-bar-stripes{0%{background-position:0 0}to{background-position:30px 0}}.bp3-progress-bar{background:rgba(92,112,128,.2);border-radius:40px;display:block;height:8px;overflow:hidden;position:relative;width:100%}.bp3-progress-bar .bp3-progress-meter{background:linear-gradient(-45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0);background-color:rgba(92,112,128,.8);background-size:30px 30px;border-radius:40px;height:100%;position:absolute;transition:width .2s cubic-bezier(.4,1,.75,.9);width:100%}.bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{animation:linear-progress-bar-stripes .3s linear infinite reverse}.bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{background-image:none}.bp3-dark .bp3-progress-bar{background:rgba(16,22,26,.5)}.bp3-dark .bp3-progress-bar .bp3-progress-meter{background-color:#8a9ba8}.bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{background-color:#137cbd}.bp3-progress-bar.bp3-intent-success .bp3-progress-meter{background-color:#0f9960}.bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{background-color:#d9822b}.bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{background-color:#db3737}@-webkit-keyframes skeleton-glow{0%{background:rgba(206,217,224,.2);border-color:rgba(206,217,224,.2)}to{background:rgba(92,112,128,.2);border-color:rgba(92,112,128,.2)}}@keyframes skeleton-glow{0%{background:rgba(206,217,224,.2);border-color:rgba(206,217,224,.2)}to{background:rgba(92,112,128,.2);border-color:rgba(92,112,128,.2)}}.bp3-skeleton{-webkit-animation:skeleton-glow 1s linear infinite alternate;animation:skeleton-glow 1s linear infinite alternate;background:rgba(206,217,224,.2);background-clip:padding-box!important;border-color:rgba(206,217,224,.2)!important;border-radius:2px;box-shadow:none!important;color:transparent!important;cursor:default;pointer-events:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-skeleton *,.bp3-skeleton:after,.bp3-skeleton:before{visibility:hidden!important}.bp3-slider{height:40px;min-width:150px;width:100%;cursor:default;outline:none;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-slider:hover{cursor:pointer}.bp3-slider:active{cursor:grabbing}.bp3-slider.bp3-disabled{cursor:not-allowed;opacity:.5}.bp3-slider.bp3-slider-unlabeled{height:16px}.bp3-slider-progress,.bp3-slider-track{height:6px;left:0;right:0;top:5px;position:absolute}.bp3-slider-track{border-radius:3px;overflow:hidden}.bp3-slider-progress{background:rgba(92,112,128,.2)}.bp3-dark .bp3-slider-progress{background:rgba(16,22,26,.5)}.bp3-slider-progress.bp3-intent-primary{background-color:#137cbd}.bp3-slider-progress.bp3-intent-success{background-color:#0f9960}.bp3-slider-progress.bp3-intent-warning{background-color:#d9822b}.bp3-slider-progress.bp3-intent-danger{background-color:#db3737}.bp3-slider-handle{background-color:#f5f8fa;background-image:linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0));box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);color:#182026;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:pointer;height:16px;left:0;position:absolute;top:0;width:16px}.bp3-slider-handle.bp3-active,.bp3-slider-handle:active{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-slider-handle.bp3-disabled,.bp3-slider-handle:disabled{background-color:rgba(206,217,224,.5);background-image:none;box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;outline:none}.bp3-slider-handle.bp3-disabled.bp3-active,.bp3-slider-handle.bp3-disabled.bp3-active:hover,.bp3-slider-handle:disabled.bp3-active,.bp3-slider-handle:disabled.bp3-active:hover{background:rgba(206,217,224,.7)}.bp3-slider-handle:focus{z-index:1}.bp3-slider-handle:hover{background-clip:padding-box;background-color:#ebf1f5;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 -1px 0 rgba(16,22,26,.1);box-shadow:0 0 0 1px rgba(16,22,26,.2),0 1px 1px rgba(16,22,26,.2);cursor:grab;z-index:2}.bp3-slider-handle.bp3-active{background-color:#d8e1e8;background-image:none;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2),inset 0 1px 2px rgba(16,22,26,.2);box-shadow:0 0 0 1px rgba(16,22,26,.2),inset 0 1px 1px rgba(16,22,26,.1);cursor:grabbing}.bp3-disabled .bp3-slider-handle{background:#bfccd6;box-shadow:none;pointer-events:none}.bp3-dark .bp3-slider-handle{background-color:#394b59;background-image:linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0));box-shadow:0 0 0 1px rgba(16,22,26,.4);color:#f5f8fa}.bp3-dark .bp3-slider-handle.bp3-active,.bp3-dark .bp3-slider-handle:active,.bp3-dark .bp3-slider-handle:hover{color:#f5f8fa}.bp3-dark .bp3-slider-handle:hover{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-slider-handle.bp3-active,.bp3-dark .bp3-slider-handle:active{background-color:#202b33;background-image:none;box-shadow:0 0 0 1px rgba(16,22,26,.6),inset 0 1px 2px rgba(16,22,26,.2)}.bp3-dark .bp3-slider-handle.bp3-disabled,.bp3-dark .bp3-slider-handle:disabled{background-color:rgba(57,75,89,.5);background-image:none;box-shadow:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active,.bp3-dark .bp3-slider-handle:disabled.bp3-active{background:rgba(57,75,89,.7)}.bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{background:rgba(16,22,26,.5);stroke:#8a9ba8}.bp3-dark .bp3-slider-handle,.bp3-dark .bp3-slider-handle:hover{background-color:#394b59}.bp3-dark .bp3-slider-handle.bp3-active{background-color:#293742}.bp3-dark .bp3-disabled .bp3-slider-handle{background:#5c7080;border-color:#5c7080;box-shadow:none}.bp3-slider-handle .bp3-slider-label{background:#394b59;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);color:#f5f8fa;margin-left:8px}.bp3-dark .bp3-slider-handle .bp3-slider-label{background:#e1e8ed;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4);color:#394b59}.bp3-disabled .bp3-slider-handle .bp3-slider-label{box-shadow:none}.bp3-slider-handle.bp3-end,.bp3-slider-handle.bp3-start{width:8px}.bp3-slider-handle.bp3-start{border-bottom-right-radius:0;border-top-right-radius:0}.bp3-slider-handle.bp3-end{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:8px}.bp3-slider-handle.bp3-end .bp3-slider-label{margin-left:0}.bp3-slider-label{-webkit-transform:translate(-50%,20px);transform:translate(-50%,20px);display:inline-block;font-size:12px;line-height:1;padding:2px 5px;position:absolute;vertical-align:top}.bp3-slider.bp3-vertical{height:150px;min-width:40px;width:40px}.bp3-slider.bp3-vertical .bp3-slider-progress,.bp3-slider.bp3-vertical .bp3-slider-track{bottom:0;height:auto;left:5px;top:0;width:6px}.bp3-slider.bp3-vertical .bp3-slider-progress{top:auto}.bp3-slider.bp3-vertical .bp3-slider-label{-webkit-transform:translate(20px,50%);transform:translate(20px,50%)}.bp3-slider.bp3-vertical .bp3-slider-handle{top:auto}.bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{margin-left:0;margin-top:-8px}.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end,.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{height:8px;margin-left:0;width:16px}.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{border-bottom-right-radius:3px;border-top-left-radius:0}.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{-webkit-transform:translate(20px);transform:translate(20px)}.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;margin-bottom:8px}@-webkit-keyframes pt-spinner-animation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes pt-spinner-animation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.bp3-spinner{align-items:center;display:flex;justify-content:center;overflow:visible;vertical-align:middle}.bp3-spinner svg{display:block}.bp3-spinner path{fill-opacity:0}.bp3-spinner .bp3-spinner-head{stroke:rgba(92,112,128,.8);stroke-linecap:round;-webkit-transform-origin:center;transform-origin:center;transition:stroke-dashoffset .2s cubic-bezier(.4,1,.75,.9)}.bp3-spinner .bp3-spinner-track{stroke:rgba(92,112,128,.2)}.bp3-spinner-animation{-webkit-animation:pt-spinner-animation .5s linear infinite;animation:pt-spinner-animation .5s linear infinite}.bp3-no-spin>.bp3-spinner-animation{-webkit-animation:none;animation:none}.bp3-dark .bp3-spinner .bp3-spinner-head{stroke:#8a9ba8}.bp3-dark .bp3-spinner .bp3-spinner-track{stroke:rgba(16,22,26,.5)}.bp3-spinner.bp3-intent-primary .bp3-spinner-head{stroke:#137cbd}.bp3-spinner.bp3-intent-success .bp3-spinner-head{stroke:#0f9960}.bp3-spinner.bp3-intent-warning .bp3-spinner-head{stroke:#d9822b}.bp3-spinner.bp3-intent-danger .bp3-spinner-head{stroke:#db3737}.bp3-tabs.bp3-vertical{display:flex}.bp3-tabs.bp3-vertical>.bp3-tab-list{align-items:flex-start;flex-direction:column}.bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab{border-radius:3px;padding:0 10px;width:100%}.bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab[aria-selected=true]{background-color:rgba(19,124,189,.2);box-shadow:none}.bp3-tabs.bp3-vertical>.bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{background-color:rgba(19,124,189,.2);border-radius:3px;bottom:0;height:auto;left:0;right:0;top:0}.bp3-tabs.bp3-vertical>.bp3-tab-panel{margin-top:0;padding-left:20px}.bp3-tab-list{align-items:flex-end;border:none;display:flex;flex:0 0 auto;list-style:none;margin:0;padding:0;position:relative}.bp3-tab-list>:not(:last-child){margin-right:20px}.bp3-tab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;color:#182026;cursor:pointer;flex:0 0 auto;font-size:14px;line-height:30px;max-width:100%;position:relative;vertical-align:top}.bp3-tab a{color:inherit;display:block;text-decoration:none}.bp3-tab-indicator-wrapper~.bp3-tab{background-color:transparent!important;box-shadow:none!important}.bp3-tab[aria-disabled=true]{color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-tab[aria-selected=true]{border-radius:0;box-shadow:inset 0 -3px 0 #106ba3}.bp3-tab:not([aria-disabled=true]):hover,.bp3-tab[aria-selected=true]{color:#106ba3}.bp3-tab:focus{-moz-outline-radius:0}.bp3-large>.bp3-tab{font-size:16px;line-height:40px}.bp3-tab-panel{margin-top:20px}.bp3-tab-panel[aria-hidden=true]{display:none}.bp3-tab-indicator-wrapper{left:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translateX(0),translateY(0);transform:translateX(0),translateY(0);transition:height,width,-webkit-transform;transition:height,transform,width;transition:height,transform,width,-webkit-transform;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-tab-indicator-wrapper .bp3-tab-indicator{background-color:#106ba3;bottom:0;height:3px;left:0;position:absolute;right:0}.bp3-tab-indicator-wrapper.bp3-no-animation{transition:none}.bp3-dark .bp3-tab{color:#f5f8fa}.bp3-dark .bp3-tab[aria-disabled=true]{color:rgba(167,182,194,.6)}.bp3-dark .bp3-tab[aria-selected=true]{box-shadow:inset 0 -3px 0 #48aff0}.bp3-dark .bp3-tab:not([aria-disabled=true]):hover,.bp3-dark .bp3-tab[aria-selected=true]{color:#48aff0}.bp3-dark .bp3-tab-indicator{background-color:#48aff0}.bp3-flex-expander{flex:1 1}.bp3-tag{display:inline-flex;flex-direction:row;align-items:center;background-color:#5c7080;border:none;border-radius:3px;box-shadow:none;color:#f5f8fa;font-size:12px;line-height:16px;max-width:100%;min-height:20px;min-width:20px;padding:2px 6px;position:relative}.bp3-tag.bp3-interactive{cursor:pointer}.bp3-tag.bp3-interactive:hover{background-color:rgba(92,112,128,.85)}.bp3-tag.bp3-interactive.bp3-active,.bp3-tag.bp3-interactive:active{background-color:rgba(92,112,128,.7)}.bp3-tag>*{flex-grow:0;flex-shrink:0}.bp3-tag>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-tag:before,.bp3-tag>*{margin-right:4px}.bp3-tag:empty:before,.bp3-tag>:last-child{margin-right:0}.bp3-tag:focus{outline:2px auto rgba(19,124,189,.6);outline-offset:0;-moz-outline-radius:6px}.bp3-tag.bp3-round{border-radius:30px;padding-left:8px;padding-right:8px}.bp3-dark .bp3-tag{background-color:#bfccd6;color:#182026}.bp3-dark .bp3-tag.bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-interactive:hover{background-color:rgba(191,204,214,.85)}.bp3-dark .bp3-tag.bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-interactive:active{background-color:rgba(191,204,214,.7)}.bp3-dark .bp3-tag .bp3-icon-large,.bp3-dark .bp3-tag .bp3-icon-standard,.bp3-dark .bp3-tag>.bp3-icon{fill:currentColor}.bp3-tag .bp3-icon-large,.bp3-tag .bp3-icon-standard,.bp3-tag>.bp3-icon{fill:#fff}.bp3-large .bp3-tag,.bp3-tag.bp3-large{font-size:14px;line-height:20px;min-height:30px;min-width:30px;padding:5px 10px}.bp3-large .bp3-tag:before,.bp3-large .bp3-tag>*,.bp3-tag.bp3-large:before,.bp3-tag.bp3-large>*{margin-right:7px}.bp3-large .bp3-tag:empty:before,.bp3-large .bp3-tag>:last-child,.bp3-tag.bp3-large:empty:before,.bp3-tag.bp3-large>:last-child{margin-right:0}.bp3-large .bp3-tag.bp3-round,.bp3-tag.bp3-large.bp3-round{padding-left:12px;padding-right:12px}.bp3-tag.bp3-intent-primary{background:#137cbd;color:#fff}.bp3-tag.bp3-intent-primary.bp3-interactive{cursor:pointer}.bp3-tag.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.85)}.bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active,.bp3-tag.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.7)}.bp3-tag.bp3-intent-success{background:#0f9960;color:#fff}.bp3-tag.bp3-intent-success.bp3-interactive{cursor:pointer}.bp3-tag.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.85)}.bp3-tag.bp3-intent-success.bp3-interactive.bp3-active,.bp3-tag.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.7)}.bp3-tag.bp3-intent-warning{background:#d9822b;color:#fff}.bp3-tag.bp3-intent-warning.bp3-interactive{cursor:pointer}.bp3-tag.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.85)}.bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active,.bp3-tag.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.7)}.bp3-tag.bp3-intent-danger{background:#db3737;color:#fff}.bp3-tag.bp3-intent-danger.bp3-interactive{cursor:pointer}.bp3-tag.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.85)}.bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active,.bp3-tag.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.7)}.bp3-tag.bp3-fill{display:flex;width:100%}.bp3-tag.bp3-minimal .bp3-icon-large,.bp3-tag.bp3-minimal .bp3-icon-standard,.bp3-tag.bp3-minimal>.bp3-icon{fill:#5c7080}.bp3-tag.bp3-minimal:not([class*=bp3-intent-]){background-color:rgba(138,155,168,.2);color:#182026}.bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(92,112,128,.3)}.bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(92,112,128,.4)}.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]){color:#f5f8fa}.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:hover{background-color:rgba(191,204,214,.3)}.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]).bp3-interactive:active{background-color:rgba(191,204,214,.4)}.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-large,.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-]) .bp3-icon-standard,.bp3-dark .bp3-tag.bp3-minimal:not([class*=bp3-intent-])>.bp3-icon{fill:#a7b6c2}.bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.15);color:#106ba3}.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.25)}.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.35)}.bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large,.bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard,.bp3-tag.bp3-minimal.bp3-intent-primary>.bp3-icon{fill:#137cbd}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{background-color:rgba(19,124,189,.25);color:#48aff0}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{background-color:rgba(19,124,189,.35)}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{background-color:rgba(19,124,189,.45)}.bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.15);color:#0d8050}.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.25)}.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.35)}.bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large,.bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard,.bp3-tag.bp3-minimal.bp3-intent-success>.bp3-icon{fill:#0f9960}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{background-color:rgba(15,153,96,.25);color:#3dcc91}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{background-color:rgba(15,153,96,.35)}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{background-color:rgba(15,153,96,.45)}.bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.15);color:#bf7326}.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.25)}.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.35)}.bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large,.bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard,.bp3-tag.bp3-minimal.bp3-intent-warning>.bp3-icon{fill:#d9822b}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{background-color:rgba(217,130,43,.25);color:#ffb366}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{background-color:rgba(217,130,43,.35)}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{background-color:rgba(217,130,43,.45)}.bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.15);color:#c23030}.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.25)}.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.35)}.bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large,.bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard,.bp3-tag.bp3-minimal.bp3-intent-danger>.bp3-icon{fill:#db3737}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{background-color:rgba(219,55,55,.25);color:#ff7373}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{cursor:pointer}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{background-color:rgba(219,55,55,.35)}.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active,.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{background-color:rgba(219,55,55,.45)}.bp3-tag-remove{background:none;border:none;color:inherit;cursor:pointer;display:flex;margin-bottom:-2px;margin-right:-6px!important;margin-top:-2px;opacity:.5;padding:2px 2px 2px 0}.bp3-tag-remove:hover{background:none;opacity:.8;text-decoration:none}.bp3-tag-remove:active{opacity:1}.bp3-tag-remove:empty:before{font-family:"Icons16",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;content:""}.bp3-large .bp3-tag-remove{margin-right:-10px!important;padding:5px 5px 5px 0}.bp3-large .bp3-tag-remove:empty:before{font-family:"Icons20",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1}.bp3-tag-input{display:flex;flex-direction:row;align-items:flex-start;cursor:text;height:auto;line-height:inherit;min-height:30px;padding-left:5px;padding-right:0}.bp3-tag-input>*{flex-grow:0;flex-shrink:0}.bp3-tag-input>.bp3-tag-input-values{flex-grow:1;flex-shrink:1}.bp3-tag-input .bp3-tag-input-icon{color:#5c7080;margin-left:2px;margin-right:7px;margin-top:7px}.bp3-tag-input .bp3-tag-input-values{display:flex;flex-direction:row;align-items:center;align-self:stretch;flex-wrap:wrap;margin-right:7px;margin-top:5px;min-width:0}.bp3-tag-input .bp3-tag-input-values>*{flex-grow:0;flex-shrink:0}.bp3-tag-input .bp3-tag-input-values>.bp3-fill{flex-grow:1;flex-shrink:1}.bp3-tag-input .bp3-tag-input-values:before,.bp3-tag-input .bp3-tag-input-values>*{margin-right:5px}.bp3-tag-input .bp3-tag-input-values:empty:before,.bp3-tag-input .bp3-tag-input-values>:last-child{margin-right:0}.bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{padding-left:5px}.bp3-tag-input .bp3-tag-input-values>*{margin-bottom:5px}.bp3-tag-input .bp3-tag{overflow-wrap:break-word}.bp3-tag-input .bp3-tag.bp3-active{outline:2px auto rgba(19,124,189,.6);outline-offset:0;-moz-outline-radius:6px}.bp3-tag-input .bp3-input-ghost{flex:1 1 auto;line-height:20px;width:80px}.bp3-tag-input .bp3-input-ghost.bp3-disabled,.bp3-tag-input .bp3-input-ghost:disabled{cursor:not-allowed}.bp3-tag-input .bp3-button,.bp3-tag-input .bp3-spinner{margin:3px 3px 3px 0}.bp3-tag-input .bp3-button{min-height:24px;min-width:24px;padding:0 7px}.bp3-tag-input.bp3-large{height:auto;min-height:40px}.bp3-tag-input.bp3-large:before,.bp3-tag-input.bp3-large>*{margin-right:10px}.bp3-tag-input.bp3-large:empty:before,.bp3-tag-input.bp3-large>:last-child{margin-right:0}.bp3-tag-input.bp3-large .bp3-tag-input-icon{margin-left:5px;margin-top:10px}.bp3-tag-input.bp3-large .bp3-input-ghost{line-height:30px}.bp3-tag-input.bp3-large .bp3-button{min-height:30px;min-width:30px;padding:5px 10px;margin:5px 5px 5px 0}.bp3-tag-input.bp3-large .bp3-spinner{margin:8px 8px 8px 0}.bp3-tag-input.bp3-active{background-color:#fff;box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-tag-input.bp3-active.bp3-intent-primary{box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-tag-input.bp3-active.bp3-intent-success{box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-tag-input.bp3-active.bp3-intent-warning{box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-tag-input.bp3-active.bp3-intent-danger{box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-dark .bp3-tag-input .bp3-tag-input-icon,.bp3-tag-input.bp3-dark .bp3-tag-input-icon{color:#a7b6c2}.bp3-dark .bp3-tag-input .bp3-input-ghost,.bp3-tag-input.bp3-dark .bp3-input-ghost{color:#f5f8fa}.bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder,.bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder,.bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder,.bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{color:rgba(167,182,194,.6)}.bp3-dark .bp3-tag-input.bp3-active,.bp3-tag-input.bp3-dark.bp3-active{background-color:rgba(16,22,26,.3);box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary,.bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{box-shadow:0 0 0 1px #106ba3,0 0 0 3px rgba(16,107,163,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success,.bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{box-shadow:0 0 0 1px #0d8050,0 0 0 3px rgba(13,128,80,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning,.bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{box-shadow:0 0 0 1px #bf7326,0 0 0 3px rgba(191,115,38,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger,.bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{box-shadow:0 0 0 1px #c23030,0 0 0 3px rgba(194,48,48,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-input-ghost{background:none;border:none;box-shadow:none;padding:0}.bp3-input-ghost::-webkit-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input-ghost:-ms-input-placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input-ghost::placeholder{color:rgba(92,112,128,.6);opacity:1}.bp3-input-ghost:focus{outline:none!important}.bp3-toast{align-items:flex-start;background-color:#fff;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);display:flex;margin:20px 0 0;max-width:500px;min-width:300px;pointer-events:all;position:relative!important}.bp3-toast.bp3-toast-appear,.bp3-toast.bp3-toast-enter{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.bp3-toast.bp3-toast-appear-active,.bp3-toast.bp3-toast-enter-active{-webkit-transform:translateY(0);transform:translateY(0);transition-delay:0;transition-duration:.3s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-toast.bp3-toast-appear~.bp3-toast,.bp3-toast.bp3-toast-enter~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px)}.bp3-toast.bp3-toast-appear-active~.bp3-toast,.bp3-toast.bp3-toast-enter-active~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0);transition-delay:0;transition-duration:.3s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.54,1.12,.38,1.11)}.bp3-toast.bp3-toast-exit{opacity:1;-webkit-filter:blur(0);filter:blur(0)}.bp3-toast.bp3-toast-exit-active{opacity:0;-webkit-filter:blur(10px);filter:blur(10px);transition-delay:0;transition-duration:.3s;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-toast.bp3-toast-exit~.bp3-toast{-webkit-transform:translateY(0);transform:translateY(0)}.bp3-toast.bp3-toast-exit-active~.bp3-toast{-webkit-transform:translateY(-40px);transform:translateY(-40px);transition-delay:50ms;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-toast .bp3-button-group{flex:0 0 auto;padding:5px 5px 5px 0}.bp3-toast>.bp3-icon{color:#5c7080;margin:12px 0 12px 12px}.bp3-dark .bp3-toast,.bp3-toast.bp3-dark{background-color:#394b59;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-dark .bp3-toast>.bp3-icon,.bp3-toast.bp3-dark>.bp3-icon{color:#a7b6c2}.bp3-toast[class*=bp3-intent-] a{color:hsla(0,0%,100%,.7)}.bp3-toast[class*=bp3-intent-]>.bp3-icon,.bp3-toast[class*=bp3-intent-] a:hover{color:#fff}.bp3-toast[class*=bp3-intent-] .bp3-button,.bp3-toast[class*=bp3-intent-] .bp3-button .bp3-icon,.bp3-toast[class*=bp3-intent-] .bp3-button:active,.bp3-toast[class*=bp3-intent-] .bp3-button:before{color:hsla(0,0%,100%,.7)!important}.bp3-toast[class*=bp3-intent-] .bp3-button:focus{outline-color:hsla(0,0%,100%,.5)}.bp3-toast[class*=bp3-intent-] .bp3-button:hover{background-color:hsla(0,0%,100%,.15)!important;color:#fff!important}.bp3-toast[class*=bp3-intent-] .bp3-button:active{background-color:hsla(0,0%,100%,.3)!important;color:#fff!important}.bp3-toast[class*=bp3-intent-] .bp3-button:after{background:hsla(0,0%,100%,.3)!important}.bp3-toast.bp3-intent-primary{background-color:#137cbd;color:#fff}.bp3-toast.bp3-intent-success{background-color:#0f9960;color:#fff}.bp3-toast.bp3-intent-warning{background-color:#d9822b;color:#fff}.bp3-toast.bp3-intent-danger{background-color:#db3737;color:#fff}.bp3-toast-message{flex:1 1 auto;padding:11px;word-break:break-word}.bp3-toast-container{align-items:center;display:flex!important;flex-direction:column;left:0;overflow:hidden;padding:0 20px 20px;pointer-events:none;position:fixed;right:0;z-index:40}.bp3-toast-container.bp3-toast-container-top{top:0}.bp3-toast-container.bp3-toast-container-bottom{bottom:0;flex-direction:column-reverse;top:auto}.bp3-toast-container.bp3-toast-container-left{align-items:flex-start}.bp3-toast-container.bp3-toast-container-right{align-items:flex-end}.bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),.bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active)~.bp3-toast,.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active)~.bp3-toast,.bp3-toast-container-bottom .bp3-toast.bp3-toast-exit-active~.bp3-toast,.bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active~.bp3-toast{-webkit-transform:translateY(60px);transform:translateY(60px)}.bp3-tooltip{box-shadow:0 0 0 1px rgba(16,22,26,.1),0 2px 4px rgba(16,22,26,.2),0 8px 24px rgba(16,22,26,.2);-webkit-transform:scale(1);transform:scale(1)}.bp3-tooltip .bp3-popover-arrow{height:22px;position:absolute;width:22px}.bp3-tooltip .bp3-popover-arrow:before{height:14px;margin:4px;width:14px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip{margin-bottom:11px;margin-top:-11px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{bottom:-8px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip{margin-left:11px}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{left:-8px}.bp3-tether-element-attached-left.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(0);transform:rotate(0)}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip{margin-top:11px}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{top:-8px}.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip{margin-left:-11px;margin-right:11px}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{right:-8px}.bp3-tether-element-attached-right.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.bp3-tether-element-attached-middle>.bp3-tooltip>.bp3-popover-arrow{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.bp3-tether-element-attached-center>.bp3-tooltip>.bp3-popover-arrow{right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.bp3-tether-element-attached-top.bp3-tether-target-attached-top>.bp3-tooltip>.bp3-popover-arrow{top:-.22183px}.bp3-tether-element-attached-right.bp3-tether-target-attached-right>.bp3-tooltip>.bp3-popover-arrow{right:-.22183px}.bp3-tether-element-attached-left.bp3-tether-target-attached-left>.bp3-tooltip>.bp3-popover-arrow{left:-.22183px}.bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom>.bp3-tooltip>.bp3-popover-arrow{bottom:-.22183px}.bp3-tether-element-attached-top.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:top left;transform-origin:top left}.bp3-tether-element-attached-top.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:top center;transform-origin:top center}.bp3-tether-element-attached-top.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:top right;transform-origin:top right}.bp3-tether-element-attached-middle.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:center left;transform-origin:center left}.bp3-tether-element-attached-middle.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:center center;transform-origin:center center}.bp3-tether-element-attached-middle.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:center right;transform-origin:center right}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-left>.bp3-tooltip{-webkit-transform-origin:bottom left;transform-origin:bottom left}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-center>.bp3-tooltip{-webkit-transform-origin:bottom center;transform-origin:bottom center}.bp3-tether-element-attached-bottom.bp3-tether-element-attached-right>.bp3-tooltip{-webkit-transform-origin:bottom right;transform-origin:bottom right}.bp3-tooltip .bp3-popover-content{background:#394b59;color:#f5f8fa}.bp3-tooltip .bp3-popover-arrow:before{box-shadow:1px 1px 6px rgba(16,22,26,.2)}.bp3-tooltip .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.1}.bp3-tooltip .bp3-popover-arrow-fill{fill:#394b59}.bp3-popover-appear>.bp3-tooltip,.bp3-popover-enter>.bp3-tooltip{-webkit-transform:scale(.8);transform:scale(.8)}.bp3-popover-appear-active>.bp3-tooltip,.bp3-popover-enter-active>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-popover-exit>.bp3-tooltip{-webkit-transform:scale(1);transform:scale(1)}.bp3-popover-exit-active>.bp3-tooltip{-webkit-transform:scale(.8);transform:scale(.8);transition-delay:0;transition-duration:.1s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-tooltip .bp3-popover-content{padding:10px 12px}.bp3-dark .bp3-tooltip,.bp3-tooltip.bp3-dark{box-shadow:0 0 0 1px rgba(16,22,26,.2),0 2px 4px rgba(16,22,26,.4),0 8px 24px rgba(16,22,26,.4)}.bp3-dark .bp3-tooltip .bp3-popover-content,.bp3-tooltip.bp3-dark .bp3-popover-content{background:#e1e8ed;color:#394b59}.bp3-dark .bp3-tooltip .bp3-popover-arrow:before,.bp3-tooltip.bp3-dark .bp3-popover-arrow:before{box-shadow:1px 1px 6px rgba(16,22,26,.4)}.bp3-dark .bp3-tooltip .bp3-popover-arrow-border,.bp3-tooltip.bp3-dark .bp3-popover-arrow-border{fill:#10161a;fill-opacity:.2}.bp3-dark .bp3-tooltip .bp3-popover-arrow-fill,.bp3-tooltip.bp3-dark .bp3-popover-arrow-fill{fill:#e1e8ed}.bp3-tooltip.bp3-intent-primary .bp3-popover-content{background:#137cbd;color:#fff}.bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{fill:#137cbd}.bp3-tooltip.bp3-intent-success .bp3-popover-content{background:#0f9960;color:#fff}.bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{fill:#0f9960}.bp3-tooltip.bp3-intent-warning .bp3-popover-content{background:#d9822b;color:#fff}.bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{fill:#d9822b}.bp3-tooltip.bp3-intent-danger .bp3-popover-content{background:#db3737;color:#fff}.bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{fill:#db3737}.bp3-tooltip-indicator{border-bottom:1px dotted;cursor:help}.bp3-tree .bp3-icon,.bp3-tree .bp3-icon-large,.bp3-tree .bp3-icon-standard{color:#5c7080}.bp3-tree .bp3-icon-large.bp3-intent-primary,.bp3-tree .bp3-icon-standard.bp3-intent-primary,.bp3-tree .bp3-icon.bp3-intent-primary{color:#137cbd}.bp3-tree .bp3-icon-large.bp3-intent-success,.bp3-tree .bp3-icon-standard.bp3-intent-success,.bp3-tree .bp3-icon.bp3-intent-success{color:#0f9960}.bp3-tree .bp3-icon-large.bp3-intent-warning,.bp3-tree .bp3-icon-standard.bp3-intent-warning,.bp3-tree .bp3-icon.bp3-intent-warning{color:#d9822b}.bp3-tree .bp3-icon-large.bp3-intent-danger,.bp3-tree .bp3-icon-standard.bp3-intent-danger,.bp3-tree .bp3-icon.bp3-intent-danger{color:#db3737}.bp3-tree-node-list{list-style:none;margin:0;padding-left:0}.bp3-tree-root{background-color:transparent;cursor:default;padding-left:0;position:relative}.bp3-tree-node-content-0{padding-left:0}.bp3-tree-node-content-1{padding-left:23px}.bp3-tree-node-content-2{padding-left:46px}.bp3-tree-node-content-3{padding-left:69px}.bp3-tree-node-content-4{padding-left:92px}.bp3-tree-node-content-5{padding-left:115px}.bp3-tree-node-content-6{padding-left:138px}.bp3-tree-node-content-7{padding-left:161px}.bp3-tree-node-content-8{padding-left:184px}.bp3-tree-node-content-9{padding-left:207px}.bp3-tree-node-content-10{padding-left:230px}.bp3-tree-node-content-11{padding-left:253px}.bp3-tree-node-content-12{padding-left:276px}.bp3-tree-node-content-13{padding-left:299px}.bp3-tree-node-content-14{padding-left:322px}.bp3-tree-node-content-15{padding-left:345px}.bp3-tree-node-content-16{padding-left:368px}.bp3-tree-node-content-17{padding-left:391px}.bp3-tree-node-content-18{padding-left:414px}.bp3-tree-node-content-19{padding-left:437px}.bp3-tree-node-content-20{padding-left:460px}.bp3-tree-node-content{align-items:center;display:flex;height:30px;padding-right:5px;width:100%}.bp3-tree-node-content:hover{background-color:rgba(191,204,214,.4)}.bp3-tree-node-caret,.bp3-tree-node-caret-none{min-width:30px}.bp3-tree-node-caret{color:#5c7080;cursor:pointer;padding:7px;-webkit-transform:rotate(0deg);transform:rotate(0deg);transition:-webkit-transform .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9);transition:transform .2s cubic-bezier(.4,1,.75,.9),-webkit-transform .2s cubic-bezier(.4,1,.75,.9)}.bp3-tree-node-caret:hover{color:#182026}.bp3-dark .bp3-tree-node-caret{color:#a7b6c2}.bp3-dark .bp3-tree-node-caret:hover{color:#f5f8fa}.bp3-tree-node-caret.bp3-tree-node-caret-open{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.bp3-tree-node-caret.bp3-icon-standard:before{content:""}.bp3-tree-node-icon{margin-right:7px;position:relative}.bp3-tree-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;flex:1 1 auto;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-tree-node-label span{display:inline}.bp3-tree-node-secondary-label{padding:0 5px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-tree-node-secondary-label .bp3-popover-target,.bp3-tree-node-secondary-label .bp3-popover-wrapper{align-items:center;display:flex}.bp3-tree-node.bp3-disabled .bp3-tree-node-content{background-color:inherit;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-tree-node.bp3-disabled .bp3-tree-node-caret,.bp3-tree-node.bp3-disabled .bp3-tree-node-icon{color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content,.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon,.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-large,.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-icon-standard{color:#fff}.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:before{color:hsla(0,0%,100%,.7)}.bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content .bp3-tree-node-caret:hover:before{color:#fff}.bp3-dark .bp3-tree-node-content:hover{background-color:rgba(92,112,128,.3)}.bp3-dark .bp3-tree .bp3-icon,.bp3-dark .bp3-tree .bp3-icon-large,.bp3-dark .bp3-tree .bp3-icon-standard{color:#a7b6c2}.bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary,.bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary,.bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary{color:#137cbd}.bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success,.bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success,.bp3-dark .bp3-tree .bp3-icon.bp3-intent-success{color:#0f9960}.bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning,.bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning,.bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning{color:#d9822b}.bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger,.bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger,.bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger{color:#db3737}.bp3-dark .bp3-tree-node.bp3-tree-node-selected>.bp3-tree-node-content{background-color:#137cbd}@-webkit-keyframes skeleton-fade-in{0%{opacity:0}to{opacity:1}}.bp3-table-cell{font-size:12px;height:20px;line-height:20px;padding:0 10px;transition:color .3s}.bp3-dark .bp3-table-cell:not([class*=bp3-intent-]):not(.bp3-loading){color:#f5f8fa}.bp3-table-cell.bp3-intent-primary{background-color:rgba(19,124,189,.1);color:#137cbd}.bp3-dark .bp3-table-cell.bp3-intent-primary{background:rgba(19,124,189,.1);color:#2b95d6}.bp3-table-cell.bp3-intent-success{background-color:rgba(15,153,96,.1);color:#0f9960}.bp3-dark .bp3-table-cell.bp3-intent-success{background:rgba(15,153,96,.1);color:#15b371}.bp3-table-cell.bp3-intent-warning{background-color:rgba(217,130,43,.1);color:#d9822b}.bp3-dark .bp3-table-cell.bp3-intent-warning{background:rgba(217,130,43,.1);color:#f29d49}.bp3-table-cell.bp3-intent-danger{background-color:rgba(219,55,55,.1);color:#db3737}.bp3-dark .bp3-table-cell.bp3-intent-danger{background:rgba(219,55,55,.1);color:#f55656}.bp3-table-editing-enabled .bp3-table-cell{cursor:text}.bp3-table-selection-enabled .bp3-table-cell{cursor:cell}.bp3-table-cell.bp3-table-truncated-cell{overflow:hidden}.bp3-large .bp3-table-cell,.bp3-table-cell.bp3-large{font-size:14px;height:30px;line-height:30px}.bp3-table-cell.bp3-loading{display:flex;flex-direction:column;justify-content:center;color:transparent}.bp3-table-cell:focus{outline:none}.bp3-table-cell-interactive{z-index:21}.bp3-table-striped .bp3-table-cell-ledger-even{background-color:#fff}.bp3-table-striped .bp3-table-cell-ledger-odd{background-color:#fafcfd}.bp3-dark .bp3-table-striped .bp3-table-cell-ledger-even{background-color:#293742}.bp3-dark .bp3-table-striped .bp3-table-cell-ledger-odd{background-color:#2d3c48}.bp3-table-editable-name input{height:20px}.bp3-table-editable-text{bottom:0;left:0;padding:0 10px;position:absolute;right:0;top:0}.bp3-table-null{color:rgba(92,112,128,.6)}.bp3-table-truncated-value{right:35px}.bp3-table-truncated-format-text,.bp3-table-truncated-value{left:10px;max-height:100%;overflow:hidden;position:absolute;text-overflow:ellipsis;top:0}.bp3-table-truncated-format-text{right:10px}.bp3-table-truncated-popover-target{border-radius:3px;bottom:0;cursor:pointer;opacity:.3;padding:0 5px;position:absolute;right:5px;text-align:center;top:0}.bp3-table-truncated-popover-target .bp3-icon-standard{line-height:20px}.bp3-table-truncated-popover-target.bp3-popover-open{opacity:1}.bp3-table-truncated-popover-target.bp3-popover-open .bp3-icon-standard{color:#137cbd}.bp3-table-truncated-popover-target:hover{opacity:1}.bp3-table-truncated-popover{font-family:monospace;max-height:300px;max-width:600px;min-width:200px;overflow:auto;padding:10px}.bp3-table-popover-whitespace-pre{white-space:pre}.bp3-table-popover-whitespace-normal{white-space:normal}.bp3-table-container{box-shadow:0 0 0 1px rgba(16,22,26,.15)}.bp3-table-menu{box-shadow:0 1px 0 rgba(16,22,26,.15),1px 0 0 rgba(16,22,26,.15)}.bp3-table-header{box-shadow:0 1px 0 rgba(16,22,26,.15)}.bp3-table-cell{box-shadow:inset 0 -1px 0 rgba(16,22,26,.15),inset -1px 0 0 rgba(16,22,26,.15)}.bp3-table-horizontal-cell-divider{box-shadow:inset 0 1px 0 rgba(16,22,26,.15);height:1px}.bp3-table-column-headers .bp3-table-header{box-shadow:0 1px 0 rgba(16,22,26,.15),inset -1px 0 0 rgba(16,22,26,.15)}.bp3-table-column-headers .bp3-table-header:before{bottom:0;right:1px}.bp3-table-row-headers .bp3-table-header{box-shadow:inset 0 -1px 0 rgba(16,22,26,.15),1px 0 0 rgba(16,22,26,.15)}.bp3-table-row-headers .bp3-table-header:before{bottom:1px;right:0}.bp3-table-body .bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.15),1px 0 0 rgba(16,22,26,.15)}.bp3-table-body .bp3-table-last-in-column{box-shadow:0 1px 0 rgba(16,22,26,.15),inset -1px 0 0 rgba(16,22,26,.15)}.bp3-table-body .bp3-table-last-in-row.bp3-table-last-in-column{box-shadow:0 1px 0 rgba(16,22,26,.15),1px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.15),inset -3px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.15),inset -1px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-column.bp3-table-last-in-row{box-shadow:inset 0 -3px 0 rgba(16,22,26,.15),inset -3px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-row{box-shadow:0 1px 0 rgba(16,22,26,.15),inset -3px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-row:before{bottom:0;right:3px}.bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.15),1px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-column:before{bottom:3px;right:0}.bp3-table-quadrant-left .bp3-table-cell.bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.15),inset -3px 0 0 rgba(16,22,26,.15)}.bp3-table-quadrant-top .bp3-table-cell.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.15),inset -1px 0 0 rgba(16,22,26,.15)}.bp3-dark .bp3-table-container{box-shadow:0 0 0 1px rgba(16,22,26,.4)}.bp3-dark .bp3-table-menu{box-shadow:0 1px 0 rgba(16,22,26,.4),1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-header{box-shadow:0 1px 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-cell{box-shadow:inset 0 -1px 0 rgba(16,22,26,.4),inset -1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-horizontal-cell-divider{box-shadow:inset 0 1px 0 rgba(16,22,26,.4);height:1px}.bp3-dark .bp3-table-column-headers .bp3-table-header{box-shadow:0 1px 0 rgba(16,22,26,.4),inset -1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-column-headers .bp3-table-header:before{bottom:0;right:1px}.bp3-dark .bp3-table-row-headers .bp3-table-header{box-shadow:inset 0 -1px 0 rgba(16,22,26,.4),1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-row-headers .bp3-table-header:before{bottom:1px;right:0}.bp3-dark .bp3-table-body .bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.4),1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-body .bp3-table-last-in-column{box-shadow:0 1px 0 rgba(16,22,26,.4),inset -1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-body .bp3-table-last-in-row.bp3-table-last-in-column{box-shadow:0 1px 0 rgba(16,22,26,.4),1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.4),inset -3px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.4),inset -1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-cell.bp3-table-last-in-column.bp3-table-last-in-row{box-shadow:inset 0 -3px 0 rgba(16,22,26,.4),inset -3px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-row{box-shadow:0 1px 0 rgba(16,22,26,.4),inset -3px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-row:before{bottom:0;right:3px}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.4),1px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top-left .bp3-table-header.bp3-table-last-in-column:before{bottom:3px;right:0}.bp3-dark .bp3-table-quadrant-left .bp3-table-cell.bp3-table-last-in-row{box-shadow:inset 0 -1px 0 rgba(16,22,26,.4),inset -3px 0 0 rgba(16,22,26,.4)}.bp3-dark .bp3-table-quadrant-top .bp3-table-cell.bp3-table-last-in-column{box-shadow:inset 0 -3px 0 rgba(16,22,26,.4),inset -1px 0 0 rgba(16,22,26,.4)}@keyframes skeleton-fade-in{0%{opacity:0}to{opacity:1}}.bp3-table-header{align-items:flex-start;flex:1 1 auto;justify-content:space-between;position:relative;text-overflow:ellipsis;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-table-header:before{content:"";display:block;left:0;position:absolute;top:0}.bp3-table-header .bp3-table-column-name,.bp3-table-header .bp3-table-header-content,.bp3-table-header .bp3-table-row-name{position:relative;width:100%}.bp3-table-header.bp3-table-header-active:before,.bp3-table-selection-enabled .bp3-table-header:hover:before{background-color:#e1e8ed}.bp3-dark .bp3-table-header.bp3-table-header-active:before,.bp3-dark .bp3-table-selection-enabled .bp3-table-header:hover:before{background-color:#394b59}.bp3-table-header.bp3-table-header-selected:before{background-image:linear-gradient(90deg,rgba(19,124,189,.1),rgba(19,124,189,.1))}.bp3-table-th-menu-container{flex-shrink:0;opacity:0;position:absolute;right:1px;text-align:right}.bp3-table-header-active .bp3-table-th-menu-container,.bp3-table-header:hover .bp3-table-th-menu-container,.bp3-table-th-menu-container.bp3-table-th-menu-open{opacity:1}.bp3-table-interaction-bar .bp3-table-th-menu-container{line-height:20px}.bp3-table-th-menu-container-background{height:30px;pointer-events:none;position:absolute;right:0;top:0;width:50px}.bp3-table-interaction-bar .bp3-table-th-menu-container-background{height:20px}.bp3-table-th-menu-open .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(245,248,250,0),#f5f8fa 50%)}.bp3-dark .bp3-table-th-menu-open .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(48,64,77,0),#30404d 50%)}.bp3-table-header-active .bp3-table-th-menu-container-background,.bp3-table-header:hover .bp3-table-th-menu-container-background,.bp3-table-th-menu-open .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(245,248,250,0),#f5f8fa 50%)}.bp3-dark .bp3-table-header-active .bp3-table-th-menu-container-background,.bp3-dark .bp3-table-header:hover .bp3-table-th-menu-container-background,.bp3-dark .bp3-table-th-menu-open .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(48,64,77,0),#30404d 50%)}.bp3-table-selection-enabled .bp3-table-header-active .bp3-table-th-menu-container-background,.bp3-table-selection-enabled .bp3-table-header:hover .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(225,232,237,0),#e1e8ed 50%)}.bp3-dark .bp3-table-selection-enabled .bp3-table-header-active .bp3-table-th-menu-container-background,.bp3-dark .bp3-table-selection-enabled .bp3-table-header:hover .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(57,75,89,0),#394b59 50%)}.bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(222,236,244,0),#deecf4 50%)}.bp3-dark .bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(45,70,88,0),#2d4658 50%)}.bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected:hover .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(204,221,232,0),#ccdde8 50%)}.bp3-dark .bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected:hover .bp3-table-th-menu-container-background{background-image:linear-gradient(90deg,rgba(53,80,99,0),#355063 50%)}.bp3-table-th-menu{cursor:pointer;height:30px;position:relative;width:30px}.bp3-table-interaction-bar .bp3-table-th-menu{height:20px;right:1px;text-align:center;width:20px}.bp3-table-interaction-bar .bp3-table-th-menu .bp3-icon{margin:2px 2px 2px 3px;vertical-align:top}.bp3-table-th-menu .bp3-icon{background-color:#f5f8fa;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(16,22,26,.2);color:#5c7080;margin-right:7px;margin-top:7px}.bp3-table-selection-enabled .bp3-table-th-menu .bp3-icon{background-color:#e1e8ed}.bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected .bp3-table-th-menu .bp3-icon{background-color:linear-gradient(90deg,rgba(222,236,244,0),#deecf4 50%)}.bp3-dark .bp3-table-th-menu .bp3-icon{background-color:#30404d;box-shadow:inset 0 0 0 1px hsla(0,0%,100%,.2);color:#a7b6c2}.bp3-dark .bp3-table-selection-enabled .bp3-table-th-menu .bp3-icon{background-color:#394b59}.bp3-dark .bp3-table-selection-enabled .bp3-table-header.bp3-table-header-selected .bp3-table-th-menu .bp3-icon{background-color:linear-gradient(90deg,rgba(45,70,88,0),#2d4658 50%)}.bp3-table-th-menu:hover .bp3-icon{box-shadow:inset 0 0 0 1px rgba(16,22,26,.4);color:#182026}.bp3-dark .bp3-table-th-menu:hover .bp3-icon{box-shadow:inset 0 0 0 1px hsla(0,0%,100%,.4);color:#f5f8fa}.bp3-dark .bp3-table-th-menu.bp3-popover-open .bp3-icon,.bp3-table-th-menu.bp3-popover-open .bp3-icon{background-color:#137cbd;box-shadow:none;color:#fff}.bp3-table-thead{display:block;white-space:nowrap}.bp3-table-column-header-tr{display:flex}.bp3-table-column-header-tr .bp3-table-header{flex:0 0}.bp3-table-column-headers .bp3-table-interaction-bar{height:20px;position:relative}.bp3-table-column-headers .bp3-table-header{line-height:30px;min-height:30px;vertical-align:top}.bp3-table-row-headers .bp3-table-header{line-height:20px;min-width:30px;overflow:hidden}.bp3-table-column-name-text,.bp3-table-row-name-text{flex-grow:1;pointer-events:none}.bp3-table-truncated-text{max-height:100%;overflow:hidden;text-overflow:ellipsis}.bp3-table-no-wrap-text{white-space:nowrap}.bp3-table-column-name-text{padding:0 10px}.bp3-table-editable-name{display:block;pointer-events:all}.bp3-table-editable-name.bp3-editable-text:before{border-radius:0;bottom:0;left:-11px;right:-10px;top:-1px}.bp3-table-editable-name.bp3-editable-text:not(.bp3-editable-editing):before{box-shadow:none}.bp3-table-editable-name.bp3-editable-text.bp3-editable-editing:before{bottom:1px;cursor:text;left:-10px;right:-9px;top:0}.bp3-table-editable-name.bp3-editable-text.bp3-editable-editing.bp3-table-editable-text:before{left:0;right:1px}.bp3-table-column-name .bp3-table-editable-name.bp3-editable-text:before{bottom:-1px}.bp3-table-column-name .bp3-table-editable-name.bp3-editable-text.bp3-editable-editing:before{bottom:0}.bp3-table-column-name-text .bp3-table-editable-name input{height:30px}.bp3-table-column-name{display:flex;flex-direction:column;font-size:14px;text-align:left}.bp3-table-row-name{display:block;font-size:12px;padding:0 5px;text-align:right}.bp3-table-header-content{font-size:14px;white-space:normal}.bp3-table-header-content .is-searchable:not(.is-focused)>.Select-control{background:none;box-shadow:none}.bp3-table-header-content .is-searchable>.Select-control{border-radius:0}.bp3-table-header-content .is-searchable>.Select-control .Select-value{cursor:pointer}.bp3-table-header-content .Select-value{right:-1px}.bp3-table-column-name,.bp3-table-row-name{transition:color .3s}.bp3-table-header.bp3-loading{display:flex;flex-direction:column;justify-content:center}.bp3-table-header.bp3-loading .bp3-table-column-name,.bp3-table-header.bp3-loading .bp3-table-row-name{flex:1 1}.bp3-table-header.bp3-loading .bp3-table-column-name-text{display:flex;flex-direction:column;justify-content:center;padding:10px}.bp3-table-header.bp3-loading .bp3-table-column-name-text .bp3-skeleton{height:8px}.bp3-table-header.bp3-loading .bp3-table-row-name{display:flex;flex-direction:column;justify-content:center}.bp3-table-selection-enabled.bp3-table-column-headers .bp3-table-header{cursor:s-resize}.bp3-table-selection-enabled.bp3-table-column-headers .bp3-table-header.bp3-table-header-reorderable{cursor:grab}.bp3-table-selection-enabled.bp3-table-column-headers .bp3-table-header.bp3-table-header-reorderable:active{cursor:grabbing}.bp3-table-selection-enabled.bp3-table-column-headers .bp3-table-header.bp3-table-header-reorderable .bp3-table-interaction-bar{cursor:grab}.bp3-table-selection-enabled.bp3-table-column-headers .bp3-table-header.bp3-table-header-reorderable .bp3-table-interaction-bar:active{cursor:grabbing}.bp3-table-selection-enabled.bp3-table-row-headers .bp3-table-header{cursor:e-resize}.bp3-table-selection-enabled.bp3-table-row-headers .bp3-table-header.bp3-table-header-reorderable{cursor:grab}.bp3-table-selection-enabled.bp3-table-row-headers .bp3-table-header.bp3-table-header-reorderable:active{cursor:grabbing}.bp3-table-selection-enabled.bp3-table-row-headers .bp3-table-header.bp3-table-header-reorderable .bp3-table-interaction-bar{cursor:grab}.bp3-table-selection-enabled.bp3-table-row-headers .bp3-table-header.bp3-table-header-reorderable .bp3-table-interaction-bar:active{cursor:grabbing}.bp3-table-selection-enabled.bp3-table-menu{cursor:se-resize}.bp3-table-selection-enabled .bp3-editable-content,.bp3-table-selection-enabled .bp3-editable-text:before{cursor:cell}.bp3-table-column-header-cell.bp3-table-has-reorder-handle:not(.bp3-table-has-interaction-bar) .bp3-table-column-name-text{padding-left:22px}.bp3-table-column-header-cell.bp3-table-has-reorder-handle:not(.bp3-table-has-interaction-bar) .bp3-table-editable-name:before{left:-22px}.bp3-table-reorder-handle-target{cursor:grab;align-items:center;bottom:0;color:rgba(92,112,128,.6);display:flex;justify-content:center;left:0;position:absolute;top:0;width:22px}.bp3-table-reorder-handle-target:active{cursor:grabbing}.bp3-table-reorder-handle-target:hover{color:#182026}.bp3-table-reorder-handle-target:active{color:#137cbd}.bp3-dark .bp3-table-reorder-handle-target{color:rgba(167,182,194,.6)}.bp3-dark .bp3-table-reorder-handle-target:hover{color:#f5f8fa}.bp3-dark .bp3-table-reorder-handle-target:active{color:#137cbd}.bp3-table-reorder-handle{display:flex}.bp3-table-resize-handle-target{opacity:0;position:absolute;-webkit-user-select:none;-ms-user-select:none;user-select:none;z-index:20}.bp3-table-resize-handle-target.bp3-table-dragging,.bp3-table-resize-handle-target:hover{opacity:1}.bp3-table-resize-handle-target.bp3-table-resize-vertical{bottom:-1px;cursor:ew-resize;right:0;top:0;width:5px}.bp3-table-resize-handle-target.bp3-table-resize-horizontal{bottom:0;cursor:ns-resize;height:5px;left:0;right:-1px}.bp3-table-resize-handle{background-color:#137cbd;position:absolute;z-index:20}.bp3-table-resize-handle.bp3-table-dragging{background-color:#137cbd}.bp3-table-resize-vertical .bp3-table-resize-handle{bottom:0;left:2px;top:0;width:3px}.bp3-table-resize-horizontal .bp3-table-resize-handle{height:3px;left:0;right:0;top:2px}.bp3-table-resize-guides .bp3-table-horizontal-guide{background-color:#137cbd;height:3px;margin-top:-3px}.bp3-table-resize-guides .bp3-table-horizontal-guide.bp3-table-horizontal-guide-flush-top{margin-top:0}.bp3-table-resize-guides .bp3-table-vertical-guide{background-color:#137cbd;margin-left:-3px;width:3px}.bp3-table-resize-guides .bp3-table-vertical-guide.bp3-table-vertical-guide-flush-left{margin-left:0}.bp3-table-overlay-layer{bottom:0;left:0;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;z-index:20}.bp3-table-overlay{position:absolute}.bp3-table-region{background-color:rgba(138,155,168,.1);border:1px solid #8a9ba8}.bp3-table-selection-region{background-color:rgba(19,124,189,.1);border:1px solid #137cbd}.bp3-table-column-headers .bp3-table-selection-region,.bp3-table-row-headers .bp3-table-selection-region{background-color:transparent}.bp3-table-focus-region{border:2px solid #137cbd}.bp3-table-column-headers .bp3-table-region{border-bottom:none}.bp3-table-row-headers .bp3-table-region{border-right:none}.bp3-table-vertical-guide{bottom:0;top:0}.bp3-table-horizontal-guide{left:0;right:0}.bp3-table-reordering-cursor-overlay{cursor:grabbing}.bp3-table-reordering .bp3-table-reordering-cursor-overlay{pointer-events:all}.bp3-table-quadrant-stack{display:flex;height:100%;position:relative}.bp3-table-quadrant{background:#f5f8fa;left:0;overflow:hidden;position:absolute;top:0}.bp3-dark .bp3-table-quadrant{background-color:#30404d}.bp3-table-quadrant-scroll-container{-webkit-transform:translateZ(0);transform:translateZ(0);bottom:0;left:0;overflow:auto;position:relative;right:0;top:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-table-no-vertical-scroll .bp3-table-quadrant-scroll-container{overflow-y:hidden}.bp3-table-no-horizontal-scroll .bp3-table-quadrant-scroll-container{overflow-x:hidden}.bp3-table-quadrant-body-container{position:relative}.bp3-table-quadrant-main{height:100%;left:auto;position:relative;top:auto;width:100%;z-index:0}.bp3-table-quadrant-main .bp3-table-quadrant-scroll-container{height:100%;width:100%}.bp3-table-quadrant-main .bp3-table-cell-client{background:#fff}.bp3-table-quadrant-top{right:0;z-index:1}.bp3-table-quadrant-top .bp3-table-quadrant-scroll-container{bottom:-20px;overflow-y:hidden}.bp3-table-quadrant-left{bottom:0;transition:width .1s cubic-bezier(.4,1,.75,.9);z-index:2}.bp3-table-quadrant-left .bp3-table-quadrant-scroll-container{bottom:0;height:auto;overflow-x:hidden;position:absolute;right:-20px;top:0}.bp3-table-quadrant-left .bp3-table-body-virtual-client{min-width:1px}.bp3-table-quadrant-top-left{transition:width .1s cubic-bezier(.4,1,.75,.9);z-index:3}.bp3-table-quadrant-top-left .bp3-table-quadrant-scroll-container{bottom:-20px;overflow-x:hidden;overflow-y:hidden;right:-20px}.bp3-table-quadrant-top-left .bp3-table-body-virtual-client{min-width:1px}.bp3-table-container{-webkit-transform:translateZ(0);transform:translateZ(0);background-color:#f5f8fa;display:flex;flex-direction:column;height:100%;max-height:100%;max-width:100%;min-height:60px;overflow:hidden}.bp3-dark .bp3-table-container{background-color:#30404d}.bp3-table-container .bp3-loading{color:transparent}.bp3-table-container .bp3-loading .bp3-skeleton{-webkit-animation:skeleton-fade-in .3s linear forwards,skeleton-glow 1s linear infinite alternate;animation:skeleton-fade-in .3s linear forwards,skeleton-glow 1s linear infinite alternate;-webkit-animation-delay:0s,.3s;animation-delay:0s,.3s;height:5px;opacity:0}.bp3-table-top-container{display:flex;flex:0 0 auto;min-height:0}.bp3-table-container.bp3-table-no-rows .bp3-table-top-container{padding-bottom:1px}.bp3-table-bottom-container{color:#182026;display:flex;flex:1 1 auto;height:100%;min-height:0}.bp3-dark .bp3-table-bottom-container{color:#f5f8fa}.bp3-table-menu{background-color:#f5f8fa;flex:0 0 auto;position:relative;z-index:13}.bp3-dark .bp3-table-menu{background-color:#30404d}.bp3-table-column-headers{background-color:#f5f8fa;color:#182026;display:block;position:relative;z-index:11}.bp3-dark .bp3-table-column-headers{background-color:#30404d;color:#f5f8fa}.bp3-table-row-headers{background-color:#f5f8fa;color:#5c7080;flex:0 0 auto;position:relative;transition:width .1s cubic-bezier(.4,1,.75,.9);z-index:12}.bp3-dark .bp3-table-row-headers{background-color:#30404d;color:#a7b6c2}.bp3-table-body{flex:1 1 100%;overflow:scroll;z-index:10}.bp3-table-body,.bp3-table-body-virtual-client{position:relative}.bp3-table-cell-client{background:#fff}.bp3-dark .bp3-table-cell-client{background:#293742}.bp3-table-tbody{display:block;white-space:nowrap}.bp3-table-cell{display:inline-block}.bp3-table-no-layout{display:inline-block;position:absolute}.bp3-table-scrollbar-measure{height:100px;overflow:scroll;position:absolute;top:-9999px;width:100px}.bp3-datepicker{background:#fff;border-radius:3px;display:flex;padding:5px;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-datepicker .DayPicker{display:inline-block;min-width:210px;position:relative;vertical-align:top}.bp3-datepicker .DayPicker:focus{outline:none}.bp3-datepicker .bp3-datepicker-day-wrapper{border-radius:3px;padding:7px}.bp3-datepicker .DayPicker-Month{border-collapse:collapse;border-spacing:0;display:inline-table;margin:0 5px 5px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.bp3-datepicker .DayPicker-Month+.bp3-datepicker .DayPicker-Month{margin-left:10px}.bp3-datepicker .DayPicker-Caption{display:table-caption}.bp3-datepicker .DayPicker-Weekdays{display:table-header-group}.bp3-datepicker .DayPicker-WeekdaysRow{display:table-row}.bp3-datepicker .DayPicker-Weekday{display:table-cell;height:30px;line-height:1;text-align:center;vertical-align:middle;width:30px;font-weight:600;padding-top:5px}.bp3-datepicker .DayPicker-Weekday abbr[title]{text-decoration:none}.bp3-datepicker .DayPicker-Body{display:table-row-group}.bp3-datepicker .DayPicker-Week{display:table-row}.bp3-datepicker .DayPicker-WeekNumber{color:rgba(92,112,128,.6);font-size:14px}.bp3-datepicker .DayPicker-Day,.bp3-datepicker .DayPicker-WeekNumber{display:table-cell;height:30px;line-height:1;text-align:center;vertical-align:middle;width:30px}.bp3-datepicker .DayPicker-Day{border-radius:3px;cursor:pointer}.bp3-datepicker .DayPicker-Day.DayPicker-Day--outside{color:rgba(92,112,128,.6)}.bp3-datepicker .DayPicker-Day.DayPicker-Day--isToday .bp3-datepicker-day-wrapper{border:1px solid rgba(16,22,26,.15)}.bp3-datepicker .DayPicker-Day:focus,.bp3-datepicker .DayPicker-Day:hover{background:#d8e1e8;color:#182026}.bp3-datepicker .DayPicker-Day:active{background:#ced9e0}.bp3-datepicker .DayPicker-Day.DayPicker-Day--selected{background-color:#137cbd;border-radius:3px;color:#fff}.bp3-datepicker .DayPicker-Day.DayPicker-Day--selected:hover{background-color:#106ba3}.bp3-datepicker .DayPicker-Day.DayPicker-Day--disabled{background:none;color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-datepicker-navbar{align-items:center;display:flex;height:30px;left:0;position:absolute;right:0;top:0}.bp3-datepicker-navbar>.DayPicker-NavButton--prev{margin-right:auto}.bp3-datepicker-navbar>.DayPicker-NavButton--next{margin-left:auto}.bp3-datepicker-caption{display:flex;flex-direction:row;justify-content:space-between;margin:0 25px 5px}.bp3-datepicker-caption>*{flex-grow:0;flex-shrink:0}.bp3-datepicker-caption>:first-child{flex-grow:1;flex-shrink:1}.bp3-datepicker-caption select{font-weight:600;padding-left:5px;padding-right:16px}.bp3-datepicker-caption select+.bp3-icon{right:2px}.bp3-datepicker-caption+.bp3-divider{margin:0}.bp3-datepicker-month-select{flex-shrink:1}.bp3-datepicker-year-select{flex-shrink:1;min-width:60px}.bp3-datepicker-caption-measure{font-weight:600;padding-left:5px}.bp3-datepicker-footer{display:flex;justify-content:space-between}.bp3-dark .bp3-datepicker{background:#30404d}.bp3-dark .bp3-datepicker .DayPicker-Day.DayPicker-Day--outside,.bp3-dark .bp3-datepicker .DayPicker-WeekNumber{color:rgba(167,182,194,.6)}.bp3-dark .bp3-datepicker .DayPicker-Day.DayPicker-Day--isToday .bp3-datepicker-day-wrapper{border:1px solid hsla(0,0%,100%,.15)}.bp3-dark .bp3-datepicker .DayPicker-Day:focus,.bp3-dark .bp3-datepicker .DayPicker-Day:hover{background:#5c7080;color:#fff}.bp3-dark .bp3-datepicker .DayPicker-Day:active{background:#738694}.bp3-dark .bp3-datepicker .DayPicker-Day.DayPicker-Day--selected{background-color:#137cbd}.bp3-dark .bp3-datepicker .DayPicker-Day.DayPicker-Day--selected:hover{background-color:#2b95d6}.bp3-dark .bp3-datepicker .DayPicker-Day.DayPicker-Day--disabled{background:none;color:rgba(167,182,194,.6)}.bp3-dark .bp3-datepicker .bp3-datepicker-footer{border-top-color:rgba(16,22,26,.4)}.bp3-datepicker-timepicker-wrapper{align-items:center;display:flex;flex-direction:column}.bp3-daterangepicker{display:flex;white-space:nowrap}.bp3-daterangepicker .DayPicker-NavButton--interactionDisabled{display:none}.bp3-daterangepicker .bp3-daterangepicker-timepickers{display:flex;justify-content:space-around}.bp3-daterangepicker.bp3-daterangepicker-contiguous .DayPicker{min-width:220px}.bp3-daterangepicker.bp3-daterangepicker-single-month .DayPicker{min-width:210px}.bp3-daterangepicker .DayPicker-Day--outside{visibility:hidden}.bp3-daterangepicker .DayPicker-Day--hovered-range{border-radius:0}.bp3-daterangepicker .DayPicker-Day--hovered-range:not(.DayPicker-Day--selected):not(.DayPicker-Day--selected-range):not(.DayPicker-Day--selected-range-start):not(.DayPicker-Day--selected-range-end){background-color:#ebf1f5}.bp3-daterangepicker .DayPicker-Day--selected-range{background-color:#ebf1f5;border-radius:0}.bp3-daterangepicker .DayPicker-Day--selected-range:hover{background-color:#ced9e0}.bp3-daterangepicker .DayPicker-Day--selected-range-start:not(.DayPicker-Day--selected-range-end):not(.DayPicker-Day--hovered-range-end){border-bottom-right-radius:0;border-top-right-radius:0}.bp3-daterangepicker .DayPicker-Day--selected-range-end:not(.DayPicker-Day--selected-range-start):not(.DayPicker-Day--hovered-range-start){border-bottom-left-radius:0;border-top-left-radius:0}.bp3-daterangepicker .DayPicker-Day--hovered-range-start:not(.DayPicker-Day--hovered-range-end){border-bottom-right-radius:0;border-top-right-radius:0}.bp3-daterangepicker .DayPicker-Day--hovered-range-end:not(.DayPicker-Day--hovered-range-start){border-bottom-left-radius:0;border-top-left-radius:0}.bp3-dark .bp3-daterangepicker .DayPicker-Day--hovered-range:not(.DayPicker-Day--selected):not(.DayPicker-Day--selected-range):not(.DayPicker-Day--selected-range-start):not(.DayPicker-Day--selected-range-end),.bp3-dark .bp3-daterangepicker .DayPicker-Day--selected-range{background-color:#394b59}.bp3-dark .bp3-daterangepicker .DayPicker-Day--selected-range:hover{background-color:#5c7080}.bp3-menu.bp3-daterangepicker-shortcuts{min-width:120px;padding:0}.bp3-timepicker{white-space:nowrap}.bp3-timepicker .bp3-timepicker-arrow-row{padding:0 1px}.bp3-timepicker .bp3-timepicker-arrow-button{color:#5c7080;display:inline-block;padding:4px 0;text-align:center;width:33px}.bp3-timepicker .bp3-timepicker-arrow-button:hover{color:#182026}.bp3-dark .bp3-timepicker .bp3-timepicker-arrow-button{color:#a7b6c2}.bp3-dark .bp3-timepicker .bp3-timepicker-arrow-button:hover{color:#f5f8fa}.bp3-timepicker .bp3-timepicker-arrow-button+.bp3-timepicker-arrow-button{margin-left:11px}.bp3-timepicker .bp3-timepicker-arrow-button:hover{cursor:pointer}.bp3-timepicker .bp3-timepicker-input-row{background:#fff;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2);display:inline-block;height:30px;line-height:28px;padding:0 1px;vertical-align:middle}.bp3-timepicker .bp3-timepicker-divider-text{color:#5c7080;display:inline-block;font-size:16px;text-align:center;width:11px}.bp3-timepicker .bp3-timepicker-input{background:transparent;border:0;border-radius:3px;box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0);color:#182026;height:28px;outline:0;padding:0;text-align:center;transition:box-shadow .1s cubic-bezier(.4,1,.75,.9);width:33px}.bp3-timepicker .bp3-timepicker-input:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-primary{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-primary:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-primary[readonly]{box-shadow:inset 0 0 0 1px #137cbd}.bp3-timepicker .bp3-timepicker-input.bp3-intent-primary.bp3-disabled,.bp3-timepicker .bp3-timepicker-input.bp3-intent-primary:disabled{box-shadow:none}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-primary{box-shadow:0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),0 0 0 0 rgba(19,124,189,0),inset 0 0 0 1px #137cbd,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-primary:focus{box-shadow:0 0 0 1px #137cbd,0 0 0 1px #137cbd,0 0 0 3px rgba(19,124,189,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-primary[readonly]{box-shadow:inset 0 0 0 1px #137cbd}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-primary.bp3-disabled,.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-primary:disabled{box-shadow:none}.bp3-timepicker .bp3-timepicker-input.bp3-intent-success{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-success:focus{box-shadow:0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-success[readonly]{box-shadow:inset 0 0 0 1px #0f9960}.bp3-timepicker .bp3-timepicker-input.bp3-intent-success.bp3-disabled,.bp3-timepicker .bp3-timepicker-input.bp3-intent-success:disabled{box-shadow:none}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-success{box-shadow:0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),0 0 0 0 rgba(15,153,96,0),inset 0 0 0 1px #0f9960,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-success:focus{box-shadow:0 0 0 1px #0f9960,0 0 0 1px #0f9960,0 0 0 3px rgba(15,153,96,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-success[readonly]{box-shadow:inset 0 0 0 1px #0f9960}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-success.bp3-disabled,.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-success:disabled{box-shadow:none}.bp3-timepicker .bp3-timepicker-input.bp3-intent-warning{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-warning:focus{box-shadow:0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-warning[readonly]{box-shadow:inset 0 0 0 1px #d9822b}.bp3-timepicker .bp3-timepicker-input.bp3-intent-warning.bp3-disabled,.bp3-timepicker .bp3-timepicker-input.bp3-intent-warning:disabled{box-shadow:none}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-warning{box-shadow:0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),0 0 0 0 rgba(217,130,43,0),inset 0 0 0 1px #d9822b,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-warning:focus{box-shadow:0 0 0 1px #d9822b,0 0 0 1px #d9822b,0 0 0 3px rgba(217,130,43,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-warning[readonly]{box-shadow:inset 0 0 0 1px #d9822b}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-warning.bp3-disabled,.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-warning:disabled{box-shadow:none}.bp3-timepicker .bp3-timepicker-input.bp3-intent-danger{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.15),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-danger:focus{box-shadow:0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 1px 1px rgba(16,22,26,.2)}.bp3-timepicker .bp3-timepicker-input.bp3-intent-danger[readonly]{box-shadow:inset 0 0 0 1px #db3737}.bp3-timepicker .bp3-timepicker-input.bp3-intent-danger.bp3-disabled,.bp3-timepicker .bp3-timepicker-input.bp3-intent-danger:disabled{box-shadow:none}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-danger{box-shadow:0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),0 0 0 0 rgba(219,55,55,0),inset 0 0 0 1px #db3737,inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-danger:focus{box-shadow:0 0 0 1px #db3737,0 0 0 1px #db3737,0 0 0 3px rgba(219,55,55,.3),inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-danger[readonly]{box-shadow:inset 0 0 0 1px #db3737}.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-danger.bp3-disabled,.bp3-dark .bp3-timepicker .bp3-timepicker-input.bp3-intent-danger:disabled{box-shadow:none}.bp3-timepicker .bp3-timepicker-ampm-select{margin-left:5px}.bp3-timepicker.bp3-disabled .bp3-timepicker-input-row{background:rgba(206,217,224,.5);box-shadow:none;color:rgba(92,112,128,.6);cursor:not-allowed;resize:none}.bp3-timepicker.bp3-disabled .bp3-timepicker-arrow-button,.bp3-timepicker.bp3-disabled .bp3-timepicker-arrow-button:hover,.bp3-timepicker.bp3-disabled .bp3-timepicker-divider-text,.bp3-timepicker.bp3-disabled .bp3-timepicker-input{color:rgba(92,112,128,.6);cursor:not-allowed}.bp3-dark .bp3-timepicker .bp3-timepicker-input-row{background:rgba(16,22,26,.3);box-shadow:inset 0 0 0 1px rgba(16,22,26,.3),inset 0 1px 1px rgba(16,22,26,.4)}.bp3-dark .bp3-timepicker .bp3-timepicker-divider-text{color:#a7b6c2}.bp3-dark .bp3-timepicker .bp3-timepicker-input{color:#f5f8fa}.bp3-datepicker .bp3-timepicker{margin-bottom:10px;margin-top:5px}.bp3-datepicker .bp3-timepicker:last-child{margin-bottom:5px}.bp3-datetimepicker{background-color:#fff;border-radius:3px;padding:10px;text-align:center}.bp3-dark .bp3-datetimepicker{background:#30404d}.bp3-dark .bp3-datetimepicker .bp3-datepicker{border-bottom:1px solid rgba(16,22,26,.4)}.bp3-datetimepicker .bp3-datepicker{border-bottom:1px solid rgba(16,22,26,.15);padding:0 0 10px}.bp3-datetimepicker .bp3-timepicker{margin-top:10px}.bp3-dateinput-popover{padding:0}@font-face{font-family:"Icons16";font-style:normal;font-weight:400;src:url(../../static/media/icons-16.05f1cdad.eot?#iefix) format("embedded-opentype"),url(../../static/media/icons-16.3c1c220e.woff) format("woff"),url(../../static/media/icons-16.3cde8748.ttf) format("truetype")}@font-face{font-family:"Icons20";font-style:normal;font-weight:400;src:url(../../static/media/icons-20.0a5c7651.eot?#iefix) format("embedded-opentype"),url(../../static/media/icons-20.cef8cdbb.woff) format("woff"),url(../../static/media/icons-20.51ec31f3.ttf) format("truetype")}.bp3-omnibar{-webkit-filter:blur(0);filter:blur(0);opacity:1;background-color:#fff;border-radius:3px;box-shadow:0 0 0 1px rgba(16,22,26,.1),0 4px 8px rgba(16,22,26,.2),0 18px 46px 6px rgba(16,22,26,.2);left:calc(50% - 250px);top:20vh;width:500px;z-index:21}.bp3-omnibar.bp3-overlay-appear,.bp3-omnibar.bp3-overlay-enter{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2}.bp3-omnibar.bp3-overlay-appear-active,.bp3-omnibar.bp3-overlay-enter-active{-webkit-filter:blur(0);filter:blur(0);opacity:1;transition-delay:0;transition-duration:.2s;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-omnibar.bp3-overlay-exit{-webkit-filter:blur(0);filter:blur(0);opacity:1}.bp3-omnibar.bp3-overlay-exit-active{-webkit-filter:blur(20px);filter:blur(20px);opacity:.2;transition-delay:0;transition-duration:.2s;transition-property:opacity,-webkit-filter;transition-property:filter,opacity;transition-property:filter,opacity,-webkit-filter;transition-timing-function:cubic-bezier(.4,1,.75,.9)}.bp3-omnibar .bp3-input{background-color:transparent;border-radius:0}.bp3-omnibar .bp3-input,.bp3-omnibar .bp3-input:focus{box-shadow:none}.bp3-omnibar .bp3-menu{background-color:transparent;border-radius:0;box-shadow:inset 0 1px 0 rgba(16,22,26,.15);max-height:calc(60vh - 40px);overflow:auto}.bp3-omnibar .bp3-menu:empty{display:none}.bp3-dark .bp3-omnibar,.bp3-omnibar.bp3-dark{background-color:#30404d;box-shadow:0 0 0 1px rgba(16,22,26,.2),0 4px 8px rgba(16,22,26,.4),0 18px 46px 6px rgba(16,22,26,.4)}.bp3-omnibar-overlay .bp3-overlay-backdrop{background-color:rgba(16,22,26,.2)}.bp3-multi-select{min-width:150px}.bp3-multi-select-popover .bp3-menu{max-height:300px;max-width:400px;overflow:auto}.bp3-select-popover .bp3-popover-content{padding:5px}.bp3-select-popover .bp3-input-group{margin-bottom:0}.bp3-select-popover .bp3-menu{max-height:300px;max-width:400px;overflow:auto;padding:0}.bp3-select-popover .bp3-menu:not(:first-child){padding-top:5px} +/*# sourceMappingURL=2.0bca3029.chunk.css.map */ \ No newline at end of file diff --git a/cate/webapi/app/static/css/2.0bca3029.chunk.css.map b/cate/webapi/app/static/css/2.0bca3029.chunk.css.map new file mode 100644 index 000000000..d339be44f --- /dev/null +++ b/cate/webapi/app/static/css/2.0bca3029.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/components/html-select/_html-select.scss","../../../../node_modules/@blueprintjs/icons/src/generated/_icon-variables.scss","normalize.css","../../src/_reset.scss","../../src/common/_mixins.scss","../../src/common/_variables.scss","../../src/common/_colors.scss","../../src/common/_color-aliases.scss","../../src/_typography.scss","../../src/accessibility/_focus-states.scss","../../src/components/alert/_alert.scss","../../src/components/breadcrumbs/_breadcrumbs.scss","../../src/components/button/_button.scss","../../src/common/_flex.scss","../../src/components/button/_common.scss","../../../../node_modules/@blueprintjs/icons/src/_icons.scss","../../src/components/button/_button-group.scss","../../src/components/callout/_callout.scss","../../src/components/card/_card.scss","../../src/components/collapse/_collapse.scss","../../src/components/context-menu/_context-menu.scss","../../src/components/dialog/_dialog.scss","../../src/common/_react-transition.scss","../../src/components/drawer/_drawer.scss","../../src/components/editable-text/_editable-text.scss","../../src/components/forms/_common.scss","../../src/components/divider/_divider.scss","../../src/components/forms/_control-group.scss","../../src/components/forms/_controls.scss","../../src/components/forms/_file-input.scss","../../src/components/forms/_form-group.scss","../../src/components/forms/_input-group.scss","../../src/components/forms/_input.scss","../../src/components/forms/_label.scss","../../src/components/forms/_numeric-input.scss","../../src/components/forms/_index.scss","../../src/components/html-select/_common.scss","../../src/components/html-table/_html-table.scss","../../src/components/hotkeys/_hotkeys.scss","../../src/components/icon/_icon.scss","../../src/components/menu/_submenu.scss","../../src/components/menu/_common.scss","../../src/components/menu/_menu.scss","../../src/components/navbar/_navbar.scss","../../src/components/non-ideal-state/_non-ideal-state.scss","../../src/components/overflow-list/_overflow-list.scss","../../src/components/overlay/_overlay.scss","../../src/components/panel-stack/_panel-stack.scss","../../../../node_modules/@blueprintjs/core/src/common/_react-transition.scss","../../src/components/popover/_popover.scss","../../src/components/popover/_common.scss","../../src/components/portal/_portal.scss","../../src/components/progress-bar/_progress-bar.scss","../../src/components/skeleton/_skeleton.scss","../../src/components/skeleton/_common.scss","../../src/components/slider/_slider.scss","../../src/components/slider/_common.scss","../../src/components/spinner/_spinner.scss","../../src/components/tabs/_tabs.scss","../../src/components/tag/_tag.scss","../../src/components/tag/_common.scss","../../src/components/tag-input/_tag-input.scss","../../src/components/toast/_toast.scss","../../src/components/tooltip/_tooltip.scss","../../src/components/tooltip/_common.scss","../../src/components/tree/_tree.scss","../../src/common/_loading.scss","../../src/cell/_cell.scss","../../src/cell/_common.scss","../../../../node_modules/@blueprintjs/core/src/common/_variables.scss","../../../core/src/common/_colors.scss","../../src/cell/formats/_formats.scss","../../src/cell/_borders.scss","../../src/headers/_headers.scss","../../src/headers/_common.scss","../../src/interactions/_interactions.scss","../../src/layers/_layers.scss","../../src/quadrants/_quadrants.scss","../../../../node_modules/@blueprintjs/core/src/common/_mixins.scss","../../src/table.scss","../../../../node_modules/@blueprintjs/core/src/components/skeleton/_common.scss","../../src/_datepicker.scss","../../../../node_modules/@blueprintjs/core/src/common/_colors.scss","../../src/_common.scss","../../../../node_modules/@blueprintjs/core/src/common/_flex.scss","../../src/_daterangepicker.scss","../../src/_timepicker.scss","../../../../node_modules/@blueprintjs/core/src/components/forms/_common.scss","../../src/_datetimepicker.scss","../../src/_dateinput.scss","../../src/_font-face.scss","../../src/_font-imports.scss","../../src/components/omnibar/_omnibar.scss","../../src/components/select/_multi-select.scss","../../src/components/select/_select.scss"],"names":[],"mappings":"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,CAChB,yBR/Ja,CQgKb,kBAAmB,CACnB,YAAa,CFlJf,4PEsJI,+BR/JiB,CMSrB,+BE2JE,wBRxJa,CQyJb,6EA3HqF,CA4HrF,6ERpLa,CQqLb,URjKa,CMGf,qHEmKI,URtKW,CMGf,qCEuKI,wBRrKW,CQsKX,6ER/LW,CMuBf,gFE6KI,wBR5KW,CQ6KX,qBAAsB,CACtB,8ERtMW,CMuBf,oFEyLE,oCRtLa,CQuLb,qBAAsB,CACtB,wBAAyB,CACzB,eAAgB,CAChB,wBRhMa,CMGf,+BE2JE,wBRlJc,CQmJd,6EA3HqF,CA4HrF,6ERpLa,CQqLb,URjKa,CMGf,qHEmKI,URtKW,CMGf,qCEuKI,wBR/JY,CQgKZ,6ER/LW,CMuBf,gFE6KI,wBRtKY,CQuKZ,qBAAsB,CACtB,8ERtMW,CMuBf,oFEyLE,mCRhLc,CQiLd,qBAAsB,CACtB,wBAAyB,CACzB,eAAgB,CAChB,wBRhMa,CMGf,+BE2JE,wBR5Ie,CQ6If,6EA3HqF,CA4HrF,6ERpLa,CQqLb,URjKa,CMGf,qHEmKI,URtKW,CMGf,qCEuKI,wBRzJa,CQ0Jb,6ER/LW,CMuBf,gFE6KI,wBRhKa,CQiKb,qBAAsB,CACtB,8ERtMW,CMuBf,oFEyLE,oCR1Ke,CQ2Kf,qBAAsB,CACtB,wBAAyB,CACzB,eAAgB,CAChB,wBRhMa,CMGf,8BE2JE,wBRtIY,CQuIZ,6EA3HqF,CA4HrF,6ERpLa,CQqLb,URjKa,CMGf,kHEmKI,URtKW,CMGf,oCEuKI,wBRnJU,CQoJV,6ER/LW,CMuBf,8EE6KI,wBR1JU,CQ2JV,qBAAsB,CACtB,8ERtMW,CMuBf,kFEyLE,mCRpKY,CQqKZ,qBAAsB,CACtB,wBAAyB,CACzB,eAAgB,CAChB,wBRhMa,CMGf,sEA2CI,WN9CW,CMGf,6CEsFE,eT9DwC,CS+DxC,cT/DwC,CSqExC,cT3FsC,CS4FtC,gBAhH8D,CD2B9D,4GAGE,iBC5B2E,CDgC7E,4IAEE,cAAkB,CDlBtB,6CEsFE,eThE0C,CSiE1C,cTjE0C,CSkF1C,aA3H4C,CFmB9C,wBA2DI,iBAAkB,CA3DtB,iDA8DM,iBAAkB,CA9DxB,4CAkEM,QAAS,CAET,iBAAkB,CApExB,kDAwEM,iBAAkB,CAxExB,qCGLE,gCAAoD,CACpD,cViB0B,CUhB1B,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,CH4F/B,aN/FS,CMef,iFAqFI,aNpGW,CMef,iIAwFM,eEzGgE,CFiBtE,2FAiGI,aAA6D,CAI/D,gDE4FA,wBRlNkB,CQmNlB,8EAhKoF,CAiKpF,sCR1Na,CQ2Nb,aRzMmB,CM0GnB,wKEoGE,aR9MiB,CM0GnB,sDE4HA,wBRnPkB,CQoPlB,sCRzPa,CM4Hb,kHEiIA,wBR1PkB,CQ2PlB,qBAAsB,CACtB,wER/Pa,CM4Hb,sHEuIA,kCR7PkB,CQ8PlB,qBAAsB,CACtB,eAAgB,CAChB,0BR3Pa,CMiHb,4IE6IE,4BRnQgB,CMsHlB,sFEsHE,4BRlPW,CQmPX,cRzOW,CMkHb,sQASM,aN1HO,CMiHb,0FEqJE,sCRjRW,CM4Hb,sGE0JE,wERtRW,CM4Hb,0GEoKA,qBAAsB,CACtB,eAAgB,CAChB,wBR9Qa,CMwGb,gFAiBM,cNnIO,CMaf,odAkIM,uBAAyB,CAlI/B,wBE+QE,eA3NoC,CA4NpC,eAAgB,CFhRlB,8BEmRI,+BR/RW,CQgSX,eAAgB,CAChB,aR1SgB,CQ2ShB,oBAAqB,CFtRzB,kEE2RI,+BRzSW,CQ0SX,eAAgB,CAChB,aRlTgB,CMqBpB,wJEoSI,eAAgB,CAChB,yBRpTW,CQqTX,kBAAmB,CFtSvB,oMEySM,+BRvTS,CQ2Tb,kCAgBA,eAtQyC,CAuQzC,eAAgB,CAChB,aAAc,CAlBd,8HAuBE,eAAgB,CAChB,eAAgB,CAxBlB,wCA4BE,gCRtVW,CQ0Tb,sFAiCE,+BR3VW,CQ4VX,aRpViB,CQkTnB,gMAyCE,eAAgB,CAChB,0BRnWW,CQoWX,kBAAmB,CA3CrB,4OA8CI,+BRxWS,CMaf,2CEiWE,aR/Va,CMFf,yJEsWI,eAAgB,CAChB,eAAgB,CAChB,aRtWW,CMFf,iDE4WI,+BRzWW,CQ0WX,aR3WW,CMFf,wGEkXI,8BR/WW,CQgXX,aRjXW,CMFf,4GEwXI,eAAgB,CAChB,yBRvXW,CMFf,kIE4XM,8BRzXS,CMHf,iFEiYI,cR/XW,CQkYb,qDACE,aRhYW,CQ+Xb,2DAII,8BRrYS,CQsYT,aRpYS,CQ+Xb,4HAUI,8BR3YS,CQ4YT,aR1YS,CQ+Xb,gIAgBI,eAAgB,CAChB,yBRhZS,CQ+Xb,sJAoBM,8BRrZO,CMHf,2CEiWE,aRzVc,CMRhB,yJEsWI,eAAgB,CAChB,eAAgB,CAChB,aRhWY,CMRhB,iDE4WI,8BRnWY,CQoWZ,aRrWY,CMRhB,wGEkXI,6BRzWY,CQ0WZ,aR3WY,CMRhB,4GEwXI,eAAgB,CAChB,wBRjXY,CMRhB,kIE4XM,6BRnXU,CMThB,iFEiYI,cRzXY,CQ4Xd,qDACE,aR1XY,CQyXd,2DAII,6BR/XU,CQgYV,aR9XU,CQyXd,4HAUI,6BRrYU,CQsYV,aRpYU,CQyXd,gIAgBI,eAAgB,CAChB,yBR1YU,CQyXd,sJAoBM,6BR/YQ,CMThB,2CEiWE,aRnVe,CMdjB,yJEsWI,eAAgB,CAChB,eAAgB,CAChB,aR1Va,CMdjB,iDE4WI,+BR7Va,CQ8Vb,aR/Va,CMdjB,wGEkXI,8BRnWa,CQoWb,aRrWa,CMdjB,4GEwXI,eAAgB,CAChB,yBR3Wa,CMdjB,kIE4XM,8BR7WW,CMfjB,iFEiYI,cRnXa,CQsXf,qDACE,aRpXa,CQmXf,2DAII,8BRzXW,CQ0XX,aRxXW,CQmXf,4HAUI,8BR/XW,CQgYX,aR9XW,CQmXf,gIAgBI,eAAgB,CAChB,0BRpYW,CQmXf,sJAoBM,8BRzYS,CMfjB,0CEiWE,aR7UY,CMpBd,sJEsWI,eAAgB,CAChB,eAAgB,CAChB,aRpVU,CMpBd,gDE4WI,8BRvVU,CQwVV,aRzVU,CMpBd,sGEkXI,6BR7VU,CQ8VV,aR/VU,CMpBd,0GEwXI,eAAgB,CAChB,wBRrWU,CMpBd,gIE4XM,6BRvWQ,CMrBd,gFEiYI,cR7WU,CQgXZ,oDACE,aR9WU,CQ6WZ,0DAII,6BRnXQ,CQoXR,aRlXQ,CQ6WZ,0HAUI,6BRzXQ,CQ0XR,aRxXQ,CQ6WZ,8HAgBI,eAAgB,CAChB,0BR9XQ,CQ6WZ,oJAoBM,6BRnYM,CMrBd,yBE+QE,eA3NoC,CA4NpC,eAAgB,CA2JhB,kCRhckB,CQiclB,qBAAsB,CF5axB,+BEmRI,+BR/RW,CQgSX,eAAgB,CAChB,aR1SgB,CQ2ShB,oBAAqB,CFtRzB,oEE2RI,+BRzSW,CQ0SX,eAAgB,CAChB,aRlTgB,CMqBpB,4JEoSI,eAAgB,CAChB,yBRpTW,CQqTX,kBAAmB,CFtSvB,wMEySM,+BRvTS,CQ2Tb,mCAgBA,eAtQyC,CAuQzC,eAAgB,CAChB,aAAc,CAlBd,iIAuBE,eAAgB,CAChB,eAAgB,CAxBlB,yCA4BE,gCRtVW,CQ0Tb,wFAiCE,+BR3VW,CQ4VX,aRpViB,CQkTnB,oMAyCE,eAAgB,CAChB,0BRnWW,CQoWX,kBAAmB,CA3CrB,gPA8CI,+BRxWS,CMaf,4CEiWE,aR/Va,CMFf,4JEsWI,eAAgB,CAChB,eAAgB,CAChB,aRtWW,CMFf,kDE4WI,+BRzWW,CQ0WX,aR3WW,CMFf,0GEkXI,8BR/WW,CQgXX,aRjXW,CMFf,8GEwXI,eAAgB,CAChB,yBRvXW,CMFf,oIE4XM,8BRzXS,CMHf,kFEiYI,cR/XW,CQkYb,sDACE,aRhYW,CQ+Xb,4DAII,8BRrYS,CQsYT,aRpYS,CQ+Xb,8HAUI,8BR3YS,CQ4YT,aR1YS,CQ+Xb,kIAgBI,eAAgB,CAChB,yBRhZS,CQ+Xb,wJAoBM,8BRrZO,CMHf,4CEiWE,aRzVc,CMRhB,4JEsWI,eAAgB,CAChB,eAAgB,CAChB,aRhWY,CMRhB,kDE4WI,8BRnWY,CQoWZ,aRrWY,CMRhB,0GEkXI,6BRzWY,CQ0WZ,aR3WY,CMRhB,8GEwXI,eAAgB,CAChB,wBRjXY,CMRhB,oIE4XM,6BRnXU,CMThB,kFEiYI,cRzXY,CQ4Xd,sDACE,aR1XY,CQyXd,4DAII,6BR/XU,CQgYV,aR9XU,CQyXd,8HAUI,6BRrYU,CQsYV,aRpYU,CQyXd,kIAgBI,eAAgB,CAChB,yBR1YU,CQyXd,wJAoBM,6BR/YQ,CMThB,4CEiWE,aRnVe,CMdjB,4JEsWI,eAAgB,CAChB,eAAgB,CAChB,aR1Va,CMdjB,kDE4WI,+BR7Va,CQ8Vb,aR/Va,CMdjB,0GEkXI,8BRnWa,CQoWb,aRrWa,CMdjB,8GEwXI,eAAgB,CAChB,yBR3Wa,CMdjB,oIE4XM,8BR7WW,CMfjB,kFEiYI,cRnXa,CQsXf,sDACE,aRpXa,CQmXf,4DAII,8BRzXW,CQ0XX,aRxXW,CQmXf,8HAUI,8BR/XW,CQgYX,aR9XW,CQmXf,kIAgBI,eAAgB,CAChB,0BRpYW,CQmXf,wJAoBM,8BRzYS,CMfjB,2CEiWE,aR7UY,CMpBd,yJEsWI,eAAgB,CAChB,eAAgB,CAChB,aRpVU,CMpBd,iDE4WI,8BRvVU,CQwVV,aRzVU,CMpBd,wGEkXI,6BR7VU,CQ8VV,aR/VU,CMpBd,4GEwXI,eAAgB,CAChB,wBRrWU,CMpBd,kIE4XM,6BRvWQ,CMrBd,iFEiYI,cR7WU,CQgXZ,qDACE,aR9WU,CQ6WZ,2DAII,6BRnXQ,CQoXR,aRlXQ,CQ6WZ,4HAUI,6BRzXQ,CQ0XR,aRxXQ,CQ6WZ,gIAgBI,eAAgB,CAChB,0BR9XQ,CQ6WZ,sJAoBM,6BRnYM,CMrBd,4JEkbI,gCRjcW,CQ4Tb,mCAuJA,+BRvca,CQgTb,oMA6JE,+BR7cW,CMGf,4CE+cE,gCR7ca,CMFf,8GEmdI,gCRjdW,CQkYb,sDAmFE,gCRldW,CQ+Xb,kIAuFI,gCRtdS,CMLf,4CE+cE,+BRvcc,CMRhB,8GEmdI,+BR3cY,CQ4Xd,sDAmFE,gCR5cY,CQyXd,kIAuFI,gCRhdU,CMXhB,4CE+cE,gCRjce,CMdjB,8GEmdI,gCRrca,CQsXf,sDAmFE,iCRtca,CQmXf,kIAuFI,iCR1cW,CMjBjB,2CE+cE,+BR3bY,CMpBd,4GEmdI,+BR/bU,CQgXZ,qDAmFE,iCRhcU,CQ6WZ,gIAuFI,iCRpcQ,CM2Hd,aACE,iBAAkB,CAClB,oBAAqB,CACrB,eAAgB,CAHlB,oDASI,aNhLgB,CMuKpB,0BAaI,yBN9KW,CMkLf,iBAEE,aAAc,CAIhB,8LAKM,aAAc,CIhKpB,kBACE,mBAwIE,CAzIJ,8BAKI,aAAc,CACd,iBAAkB,CAClB,SAAsD,CAP1D,oCAeM,SAAoD,CAf1D,oCAmBM,SAAoD,CAnB1D,8EAwBM,SAAqD,CAxB3D,kFA6BM,SAAuD,CA7B7D,kDAiCM,SAA6D,CAjCnE,wDAoCQ,UAA2D,CApCnE,wDAwCQ,UAA2D,CAxCnE,sHA6CQ,UAA4D,CA7CpE,0HAkDQ,SAA8D,CAlDtE,yJA2DM,2BAA4B,CAC5B,wBAAyB,CA5D/B,uJAiEM,4BAA6B,CAC7B,yBAA0B,CAC1B,iBFtGmB,CEmCzB,0CFiQE,eA3NoC,CA4NpC,eAAgB,CAEhB,gDACE,+BR/RW,CQgSX,eAAgB,CAChB,aR1SgB,CQ2ShB,oBAAqB,CAGvB,sGAEE,+BRzSW,CQ0SX,eAAgB,CAChB,aRlTgB,CQqTlB,gOAIE,eAAgB,CAChB,yBRpTW,CQqTX,kBAAmB,CAEnB,4QACE,+BRvTS,CQ2Tb,oDAgBA,eAtQyC,CAuQzC,eAAgB,CAChB,aAAc,CAlBd,oLAuBE,eAAgB,CAChB,eAAgB,CAxBlB,0DA4BE,gCRtVW,CQ0Tb,0HAiCE,+BR3VW,CQ4VX,aRpViB,CQkTnB,wQAyCE,eAAgB,CAChB,0BRnWW,CQoWX,kBAAmB,CA3CrB,oTA8CI,+BRxWS,CQ+TX,6DA+CF,aR/Va,CQiWb,+MAGE,eAAgB,CAChB,eAAgB,CAChB,aRtWW,CQyWb,mEACE,+BRzWW,CQ0WX,aR3WW,CQ8Wb,4IAEE,8BR/WW,CQgXX,aRjXW,CQoXb,gJAEE,eAAgB,CAChB,yBRvXW,CQyXX,sKACE,8BRzXS,CQ6Xb,mGACE,cR/XW,CQkYb,uEACE,aRhYW,CQ+Xb,6EAII,8BRrYS,CQsYT,aRpYS,CQ+Xb,gKAUI,8BR3YS,CQ4YT,aR1YS,CQ+Xb,oKAgBI,eAAgB,CAChB,yBRhZS,CQ+Xb,0LAoBM,8BRrZO,CQ+SX,6DA+CF,aRzVc,CQ2Vd,+MAGE,eAAgB,CAChB,eAAgB,CAChB,aRhWY,CQmWd,mEACE,8BRnWY,CQoWZ,aRrWY,CQwWd,4IAEE,6BRzWY,CQ0WZ,aR3WY,CQ8Wd,gJAEE,eAAgB,CAChB,wBRjXY,CQmXZ,sKACE,6BRnXU,CQuXd,mGACE,cRzXY,CQ4Xd,uEACE,aR1XY,CQyXd,6EAII,6BR/XU,CQgYV,aR9XU,CQyXd,gKAUI,6BRrYU,CQsYV,aRpYU,CQyXd,oKAgBI,eAAgB,CAChB,yBR1YU,CQyXd,0LAoBM,6BR/YQ,CQySZ,6DA+CF,aRnVe,CQqVf,+MAGE,eAAgB,CAChB,eAAgB,CAChB,aR1Va,CQ6Vf,mEACE,+BR7Va,CQ8Vb,aR/Va,CQkWf,4IAEE,8BRnWa,CQoWb,aRrWa,CQwWf,gJAEE,eAAgB,CAChB,yBR3Wa,CQ6Wb,sKACE,8BR7WW,CQiXf,mGACE,cRnXa,CQsXf,uEACE,aRpXa,CQmXf,6EAII,8BRzXW,CQ0XX,aRxXW,CQmXf,gKAUI,8BR/XW,CQgYX,aR9XW,CQmXf,oKAgBI,eAAgB,CAChB,0BRpYW,CQmXf,0LAoBM,8BRzYS,CQmSb,4DA+CF,aR7UY,CQ+UZ,4MAGE,eAAgB,CAChB,eAAgB,CAChB,aRpVU,CQuVZ,kEACE,8BRvVU,CQwVV,aRzVU,CQ4VZ,0IAEE,6BR7VU,CQ8VV,aR/VU,CQkWZ,8IAEE,eAAgB,CAChB,wBRrWU,CQuWV,oKACE,6BRvWQ,CQ2WZ,kGACE,cR7WU,CQgXZ,sEACE,aR9WU,CQ6WZ,4EAII,6BRnXQ,CQoXR,aRlXQ,CQ6WZ,8JAUI,6BRzXQ,CQ0XR,aRxXQ,CQ6WZ,kKAgBI,eAAgB,CAChB,0BR9XQ,CQ6WZ,wLAoBM,6BRnYM,CUPd,6EA+EI,YAAa,CACb,aAAc,CAhFlB,2BAyGI,YAAa,CACb,UAAW,CA1Gf,8FA+GI,aAAc,CA/GlB,+BA4II,mBAAoB,CACpB,qBAAsB,CACtB,kBAAmB,CA9IvB,wCAiJM,WAAY,CACZ,WAAY,CAlJlB,2CAuJM,wBAA0B,CAE1B,UAAW,CAzJjB,uKA+JQ,yBAAsD,CA/J9D,qKAoKQ,yBXhKmC,CWJ3C,iLAyKQ,kBF5MiB,CEmCzB,6CA+KI,eAAgB,CAGlB,2KAQM,gBF7NiB,CEqNvB,iKAeM,iBFpOiB,CGgBzB,abyBE,cCnBgC,CDoBhC,eAAgB,CaxBhB,sCXVa,CWWb,iBZoByC,CYnBzC,qBAAkE,CAClE,iBAAkB,CAClB,UAAW,CANb,+BAUI,iBAAuD,CAV3D,sCFAE,gCAAoD,CACpD,cVkBuB,CUjBvB,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,CEqB/B,aXxBS,CWyBT,SZ1Ba,CY2Bb,iBAAkB,CAClB,QZ5Ba,CYWnB,8BAsBI,iBAAuD,CAtB3D,oDAyBM,aXnCS,CWoCT,SZrCa,CYsCb,iBAAkB,CAClB,QZvCa,CYWnB,0BAiCI,gBZdqB,CYerB,iBAAgC,CAChC,YAAa,CAnCjB,qCAsCM,eAAgB,CAIpB,uBACE,qCXnDW,CWkDb,gDAII,aXrDS,CWOf,gCAoDM,qCX5CS,CWRf,4JAyDQ,aXlDO,CWqDT,0CACE,qCXrDO,CWoDT,0LAMI,aXxDK,CWVf,gCAoDM,oCXtCU,CWdhB,4JAyDQ,aX5CQ,CW+CV,0CACE,oCX/CQ,CW8CV,0LAMI,aXlDM,CWhBhB,gCAoDM,qCXhCW,CWpBjB,4JAyDQ,aXtCS,CWyCX,0CACE,qCXzCS,CWwCX,0LAMI,aX5CO,CWtBjB,+BAoDM,oCX1BQ,CW1Bd,yJAyDQ,aXhCM,CWmCR,yCACE,oCXnCM,CWkCR,uLAMI,aXtCI,CW4CZ,+BACE,aAA6B,CCrDjC,UACE,qBZnBa,CYoBb,iBbCyC,CaAzC,qFZzCa,CY0Cb,YAxB8B,CAyB9B,mGb4DkD,Ca5DlD,2Fb4DkD,Ca5DlD,2Ib4DkD,CajEpD,uCAUI,wBZ3CgB,CY4ChB,oFZjDW,CYsDb,iBACE,qFZvDW,CYsDb,qDAKI,oFZ3DS,CYsDb,iBACE,yFZvDW,CYsDb,qDAKI,yFZ3DS,CYsDb,iBACE,8FZvDW,CYsDb,qDAKI,8FZ3DS,CYsDb,iBACE,+FZvDW,CYsDb,qDAKI,+FZ3DS,CYsDb,iBACE,oGZvDW,CYsDb,qDAKI,oGZ3DS,CYgEf,gCAEI,+FZlEW,CYmEX,cAAe,CAHnB,mFAOM,+FZvES,CYgEf,iCAYI,yFZ5EW,CY6EX,UAAY,CACZ,qBAAsB,CAd1B,qFAkBM,yFZlFS,CaEf,cACE,QAAS,CACT,iBAAkB,CAClB,+CdkGkD,CcrGpD,iCAMI,0Dd+FgD,Cc/FhD,kDd+FgD,Cc/FhD,kGd+FgD,CcrGpD,mDASM,YAAa,CCbnB,sCACE,aAAc,CAGhB,iCACE,cAAe,CCgCjB,sBC0DI,SDxDc,CCwDd,0BDvDgC,CCuDhC,kBDvDgC,CAWlC,kBAAmB,CACnB,YAAa,CACb,sBAAuB,CACvB,eAAgB,CAChB,mBAAoB,CACpB,wBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,UAAW,CApBb,yGC0DI,SDxDW,CCwDX,2BDvDsB,CCuDtB,mBDvDsB,CAH1B,uHC0DI,SDxDc,CCwDd,0BDvDgC,CCuDhC,kBDvDgC,CCwChC,kBArDO,CAsDP,uBDnCsC,CCoCtC,6CD1CS,CC0CT,qCD1CS,CC0CT,uDD1CS,CC2CT,0DjBuB4D,CgBrEhE,mDC0DI,SDxDc,CCwDd,0BDvDgC,CCuDhC,kBDvDgC,CAHpC,0DC0DI,SDxDW,CCwDX,2BDvDsB,CCuDtB,mBDvDsB,CCwCtB,kBArDO,CAsDP,uBDnCsC,CCoCtC,6CD1CS,CC0CT,qCD1CS,CC0CT,uDD1CS,CC2CT,0DjBuB4D,CgB9ChE,YACE,kBf1CmB,Ce2CnB,iBA7B0C,CA8B1C,oGf7Da,Ce8Db,YAAa,CACb,qBAAsB,CACtB,aAhCmC,CAiCnC,mBAAiC,CACjC,kBAAmB,CACnB,wBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,WAAyB,CAV3B,kBAaI,SAAU,CAbd,2CAkBI,kBfxEgB,CeyEhB,oGf7EW,Ce8EX,af5DiB,CegErB,mBACE,kBAAmB,CACnB,efhEa,CeiEb,yBAA8D,CAC9D,qCftFa,CeuFb,YAAa,CACb,aAAc,CACd,eAAiD,CACjD,iBAzDgC,CA0DhC,iBAAkC,CATpC,gEAaI,afvFW,CewFX,aAAc,CACd,iBAAiC,CAfrC,gCjBpBE,eAAgB,CAChB,sBAAuB,CACvB,kBAAmB,CACnB,gBAAiB,CiBqCf,aAAc,CACd,mBAAoB,CACpB,QAAS,CAtBb,2CAyBM,iBA1E4B,CA8EhC,6BACE,kBf3GgB,Ce4GhB,oCfjHW,Ce+Gb,oFAMI,af1GS,Ce+Gf,iBACE,aAAc,CACd,gBAAgC,CAChC,WA5FgC,CA+FlC,mBACE,aAAc,CACd,aAjGgC,CAoGlC,2BACE,YAAa,CACb,wBAAyB,CAF3B,uCAKI,gBhBnIe,CkBInB,YACE,ejBQa,CiBPb,oGjBba,CiBcb,YAAa,CACb,qBAAsB,CACtB,QAAS,CACT,SAAU,CANZ,kBASI,SAAU,CATd,6BA4BI,UAjCqB,CAkCrB,MAAO,CACP,OAAQ,CAER,KAAM,CD6BR,+FAqBE,mCClEgC,CDkEhC,2BClEgC,CDiDlC,6GAiBE,+BClE+C,CDkE/C,uBClE+C,CDmD/C,kBApBO,CAqBP,uBCnD6B,CDoD7B,qCCrDY,CDqDZ,6BCrDY,CDqDZ,+CCrDY,CDsDZ,oDjBsBgD,CiB/BlD,8CAqBE,+BC1D+C,CD0D/C,uBC1D+C,CDyCjD,qDAiBE,mCC1DgC,CD0DhC,2BC1DgC,CD2ChC,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCC7CY,CD6CZ,6BC7CY,CD6CZ,+CC7CY,CD8CZ,oDjBsBgD,CkB5FpD,gCAmDI,QAAS,CACT,UAzDqB,CA0DrB,MAAO,CAEP,OAAQ,CDMV,qGAqBE,kCC3C+B,CD2C/B,0BC3C+B,CD0BjC,mHAiBE,+BC3C8C,CD2C9C,uBC3C8C,CD4B9C,kBApBO,CAqBP,uBC5B6B,CD6B7B,qCC9BY,CD8BZ,6BC9BY,CD8BZ,+CC9BY,CD+BZ,oDjBsBgD,CiB/BlD,iDAqBE,+BCnC8C,CDmC9C,uBCnC8C,CDkBhD,wDAiBE,kCCnC+B,CDmC/B,0BCnC+B,CDoB/B,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCCtBY,CDsBZ,6BCtBY,CDsBZ,+CCtBY,CDuBZ,oDjBsBgD,CkB5FpD,8BA0EI,QAAS,CACT,MAAO,CAEP,KAAM,CACN,SAnFqB,CDkEvB,iGAqBE,mCCpBgC,CDoBhC,2BCpBgC,CDGlC,+GAiBE,+BCpB+C,CDoB/C,uBCpB+C,CDK/C,kBApBO,CAqBP,uBCL6B,CDM7B,qCCPY,CDOZ,6BCPY,CDOZ,+CCPY,CDQZ,oDjBsBgD,CiB/BlD,+CAqBE,+BCZ+C,CDY/C,uBCZ+C,CDLjD,sDAiBE,mCCZgC,CDYhC,2BCZgC,CDHhC,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCCCY,CDDZ,6BCCY,CDDZ,+CCCY,CDAZ,oDjBsBgD,CkB5FpD,+BAiGI,QAAS,CACT,OAAQ,CAER,KAAM,CACN,SA1GqB,CDkEvB,mGAqBE,kCCG+B,CDH/B,0BCG+B,CDpBjC,iHAiBE,+BCG8C,CDH9C,uBCG8C,CDlB9C,kBApBO,CAqBP,uBCkB6B,CDjB7B,qCCgBY,CDhBZ,6BCgBY,CDhBZ,+CCgBY,CDfZ,oDjBsBgD,CiB/BlD,gDAqBE,+BCW8C,CDX9C,uBCW8C,CD5BhD,uDAiBE,kCCW+B,CDX/B,0BCW+B,CD1B/B,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCCwBY,CDxBZ,6BCwBY,CDxBZ,+CCwBY,CDvBZ,oDjBsBgD,CkB5FpD,iIA0HM,QAAS,CACT,OAAQ,CAER,KAAM,CACN,SAnImB,CDkEvB,uSAqBE,kCC4BiC,CD5BjC,0BC4BiC,CD7CnC,qTAiBE,+BC4BgD,CD5BhD,uBC4BgD,CD3ChD,kBApBO,CAqBP,uBC2C+B,CD1C/B,qCCyCc,CDzCd,6BCyCc,CDzCd,+CCyCc,CDxCd,oDjBsBgD,CiB/BlD,kJAqBE,+BCoCgD,CDpChD,uBCoCgD,CDrDlD,yJAiBE,kCCoCiC,CDpCjC,0BCoCiC,CDnDjC,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCCiDc,CDjDd,6BCiDc,CDjDd,+CCiDc,CDhDd,oDjBsBgD,CkB5FpD,2HAiJM,QAAS,CACT,UAvJmB,CAwJnB,MAAO,CAEP,OAAQ,CDxFZ,2RAqBE,kCCmDiC,CDnDjC,0BCmDiC,CDpEnC,ySAiBE,+BCmDgD,CDnDhD,uBCmDgD,CDlEhD,kBApBO,CAqBP,uBCkE+B,CDjE/B,qCCgEc,CDhEd,6BCgEc,CDhEd,+CCgEc,CD/Dd,oDjBsBgD,CiB/BlD,4IAqBE,+BC2DgD,CD3DhD,uBC2DgD,CD5ElD,mJAiBE,kCC2DiC,CD3DjC,0BC2DiC,CD1EjC,kBApBO,CAqBP,uBjB0B0B,CiBzB1B,qCCwEc,CDxEd,6BCwEc,CDxEd,+CCwEc,CDvEd,oDjBsBgD,CkB5FpD,2CA2JI,kBjBjKgB,CiBkKhB,oGjBvKW,CiBwKX,ajBtJiB,CiB0JrB,mBACE,kBAAmB,CACnB,eAAgB,CAChB,qCjB/Ka,CiBgLb,YAAa,CACb,aAAc,CACd,eAAiD,CAEjD,wBAhLgC,CAiLhC,iBAAkB,CATpB,gEAaI,ajBjLW,CiBkLX,aAAc,CACd,iBAAiC,CAfrC,gCnB9GE,eAAgB,CAChB,sBAAuB,CACvB,kBAAmB,CACnB,gBAAiB,CmB+Hf,aAAc,CACd,mBAAoB,CACpB,QAAS,CAtBb,2CAyBM,iBAjM4B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Ff,oCf4EE,wBR/ImB,CQgJnB,qBAAsB,CACtB,8ERhKa,CuBoHb,kCJqBA,cpBhHsC,CoBiHtC,WpBvFuC,CoBwFvC,gBpBxFuC,CwBmErC,kBAAyE,CJuB3E,2FAEE,cAA4C,CI3B9C,wCfPA,eTjEkC,CSkElC,cTlEkC,CwB8E9B,gBxB9E8B,CwB+E9B,UArG4E,CAsG5E,UAxG6C,CA4GjD,iCJ8CA,4BnB9Ka,CmBgLb,+JnBhLa,CmBkLb,anBhKmB,CuBgHjB,0BvBvHW,CmB4Jb,4DACE,0BnB7JW,CmB4Jb,uDACE,0BnB7JW,CmB4Jb,8CACE,0BnB7JW,CmByKb,uCACE,gJnBrLW,CmByLb,2CACE,4CnB1LW,CmB6Lb,wFA5BA,4BnB3JkB,CmB4JlB,eAAgB,CAChB,0BnBxJa,CuBqHb,uCfwFA,wBRlNkB,CQmNlB,8EAhKoF,CAiKpF,sCR1Na,CQ2Nb,aRzMmB,CQ2MnB,6IAGE,aR9MiB,CQiNnB,6CAqBA,wBRnPkB,CQoPlB,sCRzPa,CQuOb,gGAsBA,wBR1PkB,CQ2PlB,qBAAsB,CACtB,wER/Pa,CQ4Ob,oGAuBA,kCR7PkB,CQ8PlB,qBAAsB,CACtB,eAAgB,CAChB,0BR3Pa,CQ6Pb,0HACE,4BRnQgB,CQ2OlB,6EACE,4BRlPW,CQmPX,cRzOW,CuBsHb,6CfwHA,wBRnPkB,CQoPlB,sCRzPa,CuBgIb,8Cf6HA,wBR1PkB,CQ2PlB,qBAAsB,CACtB,wER/Pa,CuBkFf,6BAmEmC,6EvBrJpB,CwB6Bf,gBACE,YAAa,CACb,qBAAsB,CACtB,eAAiC,CAHnC,gCAMI,iBAAgC,CANpC,6BAUI,cAA4D,CAVhE,sCAcI,axBnCW,CwBoCX,czBlBoC,CyBmBpC,cAA6B,CAhBjC,yDAuBQ,axB3BO,CwBIf,yDAuBQ,axBrBQ,CwBFhB,yDAuBQ,axBfS,CwBRjB,wDAuBQ,axBTM,CwBdd,2BA6BI,sBAAuB,CACvB,kBAAmB,CA9BvB,qDAiCM,gBzBXmC,CyBYnC,iBAA2B,CAlCjC,2CAsCM,gBzBjB6B,CyBkB7B,iBAA2B,CAvCjC,wIAiDM,mCAAyC,CAI7C,mEAIQ,axB1DK,CwBsDb,mEAIQ,axBpDM,CwBgDd,mEAIQ,axB9CO,CwB0Cf,kEAIQ,axBxCI,CwBoCZ,gDAUI,axBjFS,CwBuEb,sKAmBM,oCAA8C,CCjEtD,iBACE,aAAc,CACd,iBAAkB,CAFpB,4BAMI,iBAAkB,CAClB,UAAW,CAPf,8CAWM,iB1BG6B,C0BdnC,6CAeM,kB1BD6B,C0BdnC,sIAuBI,iBAAkB,CAClB,KAAM,CAxBV,sLA4BM,MAAO,CA5Bb,kLAgCM,OAAQ,CAhCd,6BjByEE,eThE0C,CSiE1C,cTjE0C,C0B6BxC,UAAqD,CACrD,ajBvE0C,CiBgC9C,mCA0Cc,SAAU,CA1CxB,sEAgDI,SAAU,CAhDd,gFAsDI,azBlFW,CyB4Bf,4FhBlBE,gCAAoD,CACpD,cViB0B,CUhB1B,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,CgByBrC,gIAkEI,UAAuD,CAlE3D,0BAsEI,UAAyB,CAtE7B,kMA8EM,azB1GS,CyB8GT,sNACE,azB5GO,CyByBf,gqBAuFQ,azBnHO,CyB4Bf,0uBAiGQ,mCAAyC,CAjGjD,8BAyGI,kBAAmB,CAzGvB,wCA4GM,yBzBxIS,CyB4Bf,uCjByEE,eTjEkC,CSkElC,cTlEkC,C0B2G9B,UAAiE,CAnHvE,8JAyHM,WAA6D,CAzHnE,sCNqGE,cpBhHsC,CoBiHtC,WpBvFuC,CoBwFvC,gBpBxFuC,CoB0FvC,mGAEE,cAA4C,CM3GhD,wDAgIQ,iB1BrHkC,C0BX1C,uDAoIQ,kB1BzHkC,C0BX1C,2EjByEE,eT/D0C,CSgE1C,cThE0C,C0BuItC,UAAgE,CAjJtE,8JAuJM,UAA6D,CAvJnE,sCNgHE,cpB1HsC,CoB2HtC,WpBjGyC,CoBkGzC,gBpBlGyC,CoBmGzC,gBApJmE,CAqJnE,iBArJmE,CAuJnE,mGAEE,cAAuC,CMxH3C,wDA8JQ,iBAA2D,CA9JnE,uDAkKQ,kBAA4D,CAlKpE,0BAwKI,aAAc,CACd,UAAW,CAzKf,iHAgLM,kB1BlK6B,C0BsKjC,qCAEI,azB/MS,CyB6Mb,kDAMI,0BzBnNS,CyByBf,+CNgKE,6JnBpMa,CmBwMb,qDACE,4FnBzMW,CmB6Mb,yDACE,kCnBpLW,CmBuLb,oHAEE,eAAgB,CM/KpB,8CAqMQ,azBhNO,CyBkNP,wDACE,azBhNK,CyBQf,+CNgKE,2JnBpMa,CmBwMb,qDACE,2FnBzMW,CmB6Mb,yDACE,kCnB9KY,CmBiLd,oHAEE,eAAgB,CM/KpB,8CAqMQ,azB1MQ,CyB4MR,wDACE,azB1MM,CyBEhB,+CNgKE,6JnBpMa,CmBwMb,qDACE,4FnBzMW,CmB6Mb,yDACE,kCnBxKa,CmB2Kf,oHAEE,eAAgB,CM/KpB,8CAqMQ,azBpMS,CyBsMT,wDACE,azBpMO,CyBJjB,8CNgKE,2JnBpMa,CmBwMb,oDACE,2FnBzMW,CmB6Mb,wDACE,kCnBlKU,CmBqKZ,kHAEE,eAAgB,CM/KpB,6CAqMQ,azB9LM,CyBgMN,uDACE,azB9LI,C0B1Bd,WP6DE,uBAAgB,CAAhB,eAAgB,CAChB,enB9Da,CmB+Db,WAAY,CACZ,iBpB3CyC,CoB4CzC,qInBrFa,CmBsFb,anBpFkB,CmBqFlB,cpB/DgC,CoBgEhC,eApFqB,CAqFrB,WpBvCiC,CoBwCjC,gBpBxCiC,CoB0CjC,YAAa,CACb,cpBtFiB,CoBuFjB,mDpBSkD,CoBRlD,qBAAsB,CA0BtB,sCACE,yBnBlHW,CmBoHX,SAAU,CAHZ,iCACE,yBnBlHW,CmBoHX,SAAU,CAHZ,wBACE,yBnBlHW,CmBoHX,SAAU,CA3BZ,uCAEE,4FnBnGW,CmBsGb,6CAEE,kBpBtD+B,CoBwD/B,qBAAsB,CACtB,iBpBpGe,CoBuGjB,qBACE,6CnB/GW,CmBkHb,4CAeA,+BnBnHmB,CmBoHnB,eAAgB,CAChB,yBnB3Ha,CmB4Hb,kBAAmB,CACnB,WAAY,COjHd,qBPqHE,cpBhHsC,CoBiHtC,WpBvFuC,CoBwFvC,gBpBxFuC,CoB0FvC,iEAEE,cAA4C,CO3HhD,qBPgIE,cpB1HsC,CoB2HtC,WpBjGyC,CoBkGzC,gBpBlGyC,CoBmGzC,gBApJmE,CAqJnE,iBArJmE,CAuJnE,iEAEE,cAAuC,COxI3C,oBAYI,aAAc,CACd,UAAW,CAGb,qBP0IA,4BnB9Ka,CmBgLb,+JnBhLa,CmBkLb,anBhKmB,CmBqJnB,gDACE,0BnB7JW,CmB4Jb,2CACE,0BnB7JW,CmB4Jb,kCACE,0BnB7JW,CmByKb,2BACE,gJnBrLW,CmByLb,+BACE,4CnB1LW,CmB6Lb,gEA5BA,4BnB3JkB,CmB4JlB,eAAgB,CAChB,0BnBxJa,C0BSf,8BPgLE,6JnBpMa,CmBwMb,oCACE,4FnBzMW,CmB6Mb,wCACE,kCnBpLW,CmBuLb,kFAEE,eAAgB,COvKd,wCP4KJ,uLnBxNa,CmB4Nb,8CACE,gJnB7NW,CmBiOb,kDACE,kCnBxMW,CmB2Mb,sGAEE,eAAgB,COnNpB,8BPgLE,2JnBpMa,CmBwMb,oCACE,2FnBzMW,CmB6Mb,wCACE,kCnB9KY,CmBiLd,kFAEE,eAAgB,COvKd,wCP4KJ,oLnBxNa,CmB4Nb,8CACE,+InB7NW,CmBiOb,kDACE,kCnBlMY,CmBqMd,sGAEE,eAAgB,COnNpB,8BPgLE,6JnBpMa,CmBwMb,oCACE,4FnBzMW,CmB6Mb,wCACE,kCnBxKa,CmB2Kf,kFAEE,eAAgB,COvKd,wCP4KJ,uLnBxNa,CmB4Nb,8CACE,gJnB7NW,CmBiOb,kDACE,kCnB5La,CmB+Lf,sGAEE,eAAgB,COnNpB,6BPgLE,2JnBpMa,CmBwMb,mCACE,2FnBzMW,CmB6Mb,uCACE,kCnBlKU,CmBqKZ,gFAEE,eAAgB,COvKd,uCP4KJ,oLnBxNa,CmB4Nb,6CACE,+InB7NW,CmBiOb,iDACE,kCnBtLU,CmByLZ,oGAEE,eAAgB,COnNpB,sBA+BI,YAAa,CAsCjB,mBACE,cAAe,CACf,Y3BpFiB,C2BkFnB,6EASI,WAAY,CACZ,mBAAoB,CAVxB,6BAcI,WPpGiE,COuGnE,6BPoEA,4BnB9Ka,CmBgLb,+JnBhLa,CmBkLb,anBhKmB,CmBqJnB,wDACE,0BnB7JW,CmB4Jb,mDACE,0BnB7JW,CmB4Jb,0CACE,0BnB7JW,CmByKb,mCACE,gJnBrLW,CmByLb,uCACE,4CnB1LW,CmB6Lb,gFA5BA,4BnB3JkB,CmB4JlB,eAAgB,CAChB,0BnBxJa,C2BwBf,gBACE,aAAc,CACd,kBAAoC,CACpC,YAAa,CAHf,yJAUI,aAAc,CACd,cAA6B,CAC7B,mBAAoB,CAZxB,kCAgBI,cAA6B,CAhBjC,2EAqBI,eAAgB,CAChB,kBAAmB,CACnB,UAAW,CAvBf,0EA6BM,yB3BxDS,C2B2Bf,2BAkCI,gB5BnB+B,C4BfnC,qNAyCM,oBAAqB,CACrB,gBAAiC,CACjC,kBAAmB,CA3CzB,6CA+CM,gBAAiC,CA/CvC,uDAmDM,aAAc,CAnDpB,qCAuDM,gB5BvCmC,C4BhBzC,qDA4DI,aAAc,CAGhB,0BACE,a3BjFiB,C2BgFnB,8FAMM,0B3B7FO,C4BZf,8DAKI,aAAqC,CACrC,YAAa,CACb,SAAU,CACV,U7BqCgC,C6B7CpC,0EAWM,uBAAsC,CAX5C,yEAeM,uBAAsC,CAf5C,sFAuBQ,uBAAsC,CAvB9C,qFA2BQ,uB7BemC,C6B1C3C,wEAiCI,U7BesC,C8BnC1C,KACE,aAAc,CnCWhB,2CapBI,mBAAoB,CAItB,kBCuF8B,CAC9B,kBAAmB,CAEnB,WAAY,CAEZ,cAAe,CACf,cT7EgC,CS8EhC,sBAAuB,CAEvB,eAAgB,CAChB,qBAAsB,CA0BtB,wBRjHmB,CQkHnB,6EA7E8E,CA8E9E,6ERrIa,CQsIb,aRpIkB,C8BGlB,oBAAqB,CACrB,uBAAwB,CACxB,iB/BkCyC,C+BjCzC,W/BoCkC,C+BnClC,qB/BFiB,C+BIjB,UAAW,CvBDX,+CACE,WAAY,CACZ,aAAc,CAGhB,+DACE,WAAY,CACZ,aAAc,CAehB,wGAGE,gBC7BkE,CDiCpE,wIAEE,cAAkB,CC+FpB,uDAgBA,2BAA4B,CAC5B,wBRxImB,CQyInB,6ER1Ja,CQ4Ib,0HAkBA,wBR/ImB,CQgJnB,qBAAsB,CACtB,8ERhKa,CQiJb,kIAmBA,qCRtJmB,CQuJnB,qBAAsB,CACtB,eAAgB,CAChB,yBR/Ja,CQgKb,kBAAmB,CACnB,YAAa,CAEb,oXAEE,+BR/JiB,CNUrB,mEc8QE,eA3NoC,CA4NpC,eAAgB,CAEhB,+EACE,+BR/RW,CQgSX,eAAgB,CAChB,aR1SgB,CQ2ShB,oBAAqB,CAGvB,0KAEE,+BRzSW,CQ0SX,eAAgB,CAChB,aRlTgB,CQqTlB,4XAIE,eAAgB,CAChB,yBRpTW,CQqTX,kBAAmB,CAEnB,odACE,+BRvTS,CQ2Tb,8KAgBA,eAtQyC,CAuQzC,eAAgB,CAChB,aAAc,CAlBd,0mBAuBE,eAAgB,CAChB,eAAgB,CAxBlB,sMA4BE,gCRtVW,CQ0Tb,oaAiCE,+BR3VW,CQ4VX,aRpViB,CQkTnB,w5BAyCE,eAAgB,CAChB,0BRnWW,CQoWX,kBAAmB,CA3CrB,wkCA8CI,+BRxWS,CQ+TX,yGA+CF,aR/Va,CQiWb,2WAGE,eAAgB,CAChB,eAAgB,CAChB,aRtWW,CQyWb,qHACE,+BRzWW,CQ0WX,aR3WW,CQ8Wb,sPAEE,8BR/WW,CQgXX,aRjXW,CQoXb,8PAEE,eAAgB,CAChB,yBRvXW,CQyXX,0SACE,8BRzXS,CQ6Xb,qLACE,cR/XW,CQkYb,0PACE,aRhYW,CQ+Xb,kRAII,8BRrYS,CQsYT,aRpYS,CQ+Xb,4jBAUI,8BR3YS,CQ4YT,aR1YS,CQ+Xb,4kBAgBI,eAAgB,CAChB,yBRhZS,CQ+Xb,oqBAoBM,8BRrZO,CQ+SX,yGA+CF,aRzVc,CQ2Vd,2WAGE,eAAgB,CAChB,eAAgB,CAChB,aRhWY,CQmWd,qHACE,8BRnWY,CQoWZ,aRrWY,CQwWd,sPAEE,6BRzWY,CQ0WZ,aR3WY,CQ8Wd,8PAEE,eAAgB,CAChB,wBRjXY,CQmXZ,0SACE,6BRnXU,CQuXd,qLACE,cRzXY,CQ4Xd,0PACE,aR1XY,CQyXd,kRAII,6BR/XU,CQgYV,aR9XU,CQyXd,4jBAUI,6BRrYU,CQsYV,aRpYU,CQyXd,4kBAgBI,eAAgB,CAChB,yBR1YU,CQyXd,oqBAoBM,6BR/YQ,CQySZ,yGA+CF,aRnVe,CQqVf,2WAGE,eAAgB,CAChB,eAAgB,CAChB,aR1Va,CQ6Vf,qHACE,+BR7Va,CQ8Vb,aR/Va,CQkWf,sPAEE,8BRnWa,CQoWb,aRrWa,CQwWf,8PAEE,eAAgB,CAChB,yBR3Wa,CQ6Wb,0SACE,8BR7WW,CQiXf,qLACE,cRnXa,CQsXf,0PACE,aRpXa,CQmXf,kRAII,8BRzXW,CQ0XX,aRxXW,CQmXf,4jBAUI,8BR/XW,CQgYX,aR9XW,CQmXf,4kBAgBI,eAAgB,CAChB,0BRpYW,CQmXf,oqBAoBM,8BRzYS,CQmSb,uGA+CF,aR7UY,CQ+UZ,qWAGE,eAAgB,CAChB,eAAgB,CAChB,aRpVU,CQuVZ,mHACE,8BRvVU,CQwVV,aRzVU,CQ4VZ,kPAEE,6BR7VU,CQ8VV,aR/VU,CQkWZ,0PAEE,eAAgB,CAChB,wBRrWU,CQuWV,sSACE,6BRvWQ,CQ2WZ,mLACE,cR7WU,CQgXZ,sPACE,aR9WU,CQ6WZ,8QAII,6BRnXQ,CQoXR,aRlXQ,CQ6WZ,ojBAUI,6BRzXQ,CQ0XR,aRxXQ,CQ6WZ,okBAgBI,eAAgB,CAChB,0BR9XQ,CQ6WZ,4pBAoBM,6BRnYM,CNpBd,+DoCJE,c/BKsC,C+BJtC,W/B0BwC,C+BzBxC,kBAA8C,CpCkD9C,+DcgJA,wBRlNkB,CQmNlB,8EAhKoF,CAiKpF,sCR1Na,CQ2Nb,aRzMmB,CQ2MnB,6OAGE,aR9MiB,CQiNnB,2EAqBA,wBRnPkB,CQoPlB,sCRzPa,CQuOb,kKAsBA,wBR1PkB,CQ2PlB,qBAAsB,CACtB,wER/Pa,CQ4Ob,0KAuBA,kCR7PkB,CQ8PlB,qBAAsB,CACtB,eAAgB,CAChB,0BR3Pa,CQ6Pb,sNACE,4BRnQgB,CQ2OlB,2IACE,4BRlPW,CQmPX,cRzOW,CNcf,6DoCME,qC9BhBmB,C8BiBnB,eAAgB,CAChB,yB9BxBa,C8ByBb,kBAAmB,CpCTrB,mEoCaE,a9B7Ba,C8B8Bb,mBAAoB,CACpB,iBAAkB,CAClB,SAAsC,CACtC,OAAqD,CpCjBvD,0GoCoBI,yB9BpCW,CNgBf,6BAEE,oBAAqB,CACrB,qBAAsB,CACtB,iBAAkB,CAClB,qBAAsB,CALxB,mEAgBM,YAAa,CAhBnB,iDeEE,aTlBa,CSoBb,6DACE,aT3BgB,CS8BlB,qEACE,aTtBW,CSqBb,iFAII,aTlBe,CNMrB,kIAoCM,UAA0B,CAC1B,QAA2D,CArCjE,4GA4CM,UAAW,CAIf,+DAMI,wBMzEc,CN0Ed,aM7De,CNsDnB,iFAWI,0BMxES,CN6Db,6DAeI,aM5ES,CNiFf,kBe1EE,gCAAoD,CACpD,cViB0B,CUhB1B,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,CfqFjC,WCiBmC,COevC,6C6BhFE,gBAAiB,CACjB,chCzBgC,CGwGlC,sG6B3EI,YjC4ByC,CiC3BzC,eAAgB,CAChB,kBAAmB,C7ByEvB,mD6BrEI,a/BzDgB,C+B0DhB,eAAgB,C7BoEpB,mD6BhEI,a/B9DgB,CE8HpB,0L6B1DM,6C/BtES,C+B4Eb,wNAMI,a/BhEe,C+B0DnB,sVAYM,8C/BpEO,C+B2Ef,sKASM,kBjCvBuC,CiCwBvC,ejCxBuC,CiCc7C,uEAgBM,gC/BnGS,C+BmFf,kEAuBM,6C/BtHS,C+B+Ff,yDA2BM,6C/B1HS,C+B+Ff,2EA8BQ,+C/B7HO,C+B+Ff,kGAoCQ,eAAgB,CApCxB,oHAuCU,6C/BtIK,C+B+Ff,uDAgDQ,qC/BnIO,C+BoIP,cAAe,CAjDvB,wDAqDQ,qC/BxIO,C+B6Ib,iFAIM,+B/BrJO,C+BiJb,4EAWM,8C/BhJO,C+BqIb,mEAeM,8C/BpJO,C+BqIb,qFAkBQ,gD/BvJK,C+BqIb,4GAwBQ,8C/B7JK,C+BqIb,wHA6BU,eAAgB,CA7B1B,iEAsCQ,oC/BvLK,C+BwLL,cAAe,CAvCvB,kEA2CQ,oC/B5LK,CgCRf,ezBMI,YAAa,CAEf,kByBP8B,CAC9B,kBAAmB,CzBQnB,iBACE,WAAY,CACZ,aAAc,CAGhB,yBACE,WAAY,CACZ,aAAc,CAehB,uCAGE,gByBlC+C,CzBsCjD,uDAEE,cAAkB,CyBpCtB,mBACE,gBAAiB,CACjB,QAAsB,CAFxB,oCAKI,QAAS,CACT,SAAU,CANd,qCAUI,WAAY,CAIhB,mBACE,WAAY,CACZ,eAAgB,CAChB,eAAgB,CAChB,YAA0B,CAJ5B,gCAOI,kBAAgC,CAPpC,kDAUM,eAA6B,CAKnC,YACE,kBAAmB,CACnB,YAAa,CACb,6BAA8B,CAC9B,aAAc,CACd,cAAe,CALjB,6BAQI,kBjCnCe,CkCNnB,UAGE,oBAAqB,CAErB,aAAc,CAEd,0BAA2B,CAP7B,6BAYI,oBAAsB,CACtB,uBACsB,CAd1B,cAmBI,aAAc,CAnBlB,0BAuBM,iBAAkB,CAMxB,sGAGM,ajCRS,CiCUT,oIACE,ajCRO,CiCEf,sGAGM,ajCFU,CiCIV,oIACE,ajCFQ,CiCJhB,sGAGM,ajCIW,CiCFX,oIACE,ajCIS,CiCVjB,mGAGM,ajCUQ,CiCRR,iIACE,ajCUM,CiCAd,uBxB5BE,gCAAoD,CACpD,cwB6BqB,CAGvB,2CxB/BE,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,CwBqCnC,oBAKqB,CAFvB,oBxBjCE,gCAAoD,CACpD,cwBkCqB,CAIvB,oBACE,qBlCxBwB,CkCyBxB,iBAAkB,CAClB,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CALhB,2BxB/CE,iCAAkC,CAClC,kCAAmC,CwB2DnC,qBACE,WtCxEiB,CsCuEnB,iCACE,WtCvE6B,CsCsE/B,kCACE,WtCtE8B,CsCqEhC,gCACE,WtCrE4B,CsCoE9B,6BACE,WtCpEyB,CsCmE3B,iCACE,WtCnE6B,CsCkE/B,+BACE,WtClE2B,CsCiE7B,0BACE,WtCjEsB,CsCgExB,8BACE,WtChE0B,CsC+D5B,+BACE,WtC/D2B,CsC8D7B,4BACE,WtC9DwB,CsC6D1B,6BACE,WtC7DyB,CsC4D3B,kCACE,WtC5D8B,CsC2DhC,6CACE,WtC3DyC,CsC0D3C,gCACE,WtC1D4B,CsCyD9B,iCACE,WtCzD6B,CsCwD/B,+BACE,WtCxD2B,CsCuD7B,2CACE,WtCvDuC,CsCsDzC,4BACE,WtCtDwB,CsCqD1B,6BACE,WtCrDyB,CsCoD3B,8BACE,WtCpD0B,CsCmD5B,yBACE,WtCnDqB,CsCkDvB,mCACE,WtClD+B,CsCiDjC,oCACE,WtCjDgC,CsCgDlC,4BACE,WtChDyB,CsC+C3B,4BACE,WtC/CwB,CsC8C1B,6BACE,WtC9CyB,CsC6C3B,gCACE,WtC7C4B,CsC4C9B,iCACE,WtC5C6B,CsC2C/B,0BACE,WtC3CuB,CsC0CzB,mCACE,WtC1CgC,CsCyClC,iCACE,WtCzC8B,CsCwChC,0BACE,WtCxCsB,CsCuCxB,mCACE,WtCvC+B,CsCsCjC,uBACE,WtCtCmB,CsCqCrB,4BACE,WtCrCwB,CsCoC1B,8BACE,WtCpC0B,CsCmC5B,yBACE,WtCnCqB,CsCkCvB,uBACE,WtClCmB,CsCiCrB,gCACE,WtCjC4B,CsCgC9B,sBACE,WtChCkB,CsC+BpB,sBACE,WtC/BkB,CsC8BpB,0BACE,WtC9BsB,CsC6BxB,qBACE,WtC7BiB,CsC4BnB,2BACE,WtC5BuB,CsC2BzB,4BACE,WtC3BwB,CsC0B1B,uBACE,WtC1BmB,CsCyBrB,4BACE,WtCzBwB,CsCwB1B,0BACE,WtCxBsB,CsCuBxB,wBACE,WtCvBoB,CsCsBtB,4BACE,WtCtBwB,CsCqB1B,4BACE,WtCrBwB,CsCoB1B,6BACE,WtCpByB,CsCmB3B,0BACE,WtCnBsB,CsCkBxB,4BACE,WtClBwB,CsCiB1B,yBACE,WtCjBqB,CsCgBvB,uBACE,WtChBmB,CsCerB,sBACE,WtCfkB,CsCcpB,kCACE,WtCd8B,CsCahC,8BACE,WtCb0B,CsCY5B,iCACE,WtCZ6B,CsCW/B,8BACE,WtCX0B,CsCU5B,+BACE,WtCV2B,CsCS7B,4BACE,WtCTwB,CsCQ1B,wBACE,WtCRoB,CsCOtB,mCACE,WtCP+B,CsCMjC,mCACE,WtCN+B,CsCKjC,oCACE,WtCLgC,CsCIlC,iCACE,WtCJ6B,CsCG/B,0BACE,WtCHsB,CsCExB,uBACE,WtCFmB,CsCCrB,2BACE,WtCDuB,CsCAzB,uBACE,WtCAmB,CsCDrB,gCACE,WtCC4B,CsCF9B,8BACE,WtCE0B,CsCH5B,sBACE,WtCGkB,CsCJpB,4BACE,WtCIwB,CsCL1B,qBACE,WtCKiB,CsCNnB,8BACE,WtCM0B,CsCP5B,+BACE,WtCO2B,CsCR7B,yBACE,WtCQqB,CsCTvB,4BACE,WtCSwB,CsCV1B,yBACE,WtCUqB,CsCXvB,4BACE,WtCWwB,CsCZ1B,yBACE,WtCYqB,CsCbvB,yBACE,WtCaqB,CsCdvB,0BACE,WtCcsB,CsCfxB,yBACE,WtCeqB,CsChBvB,6BACE,WtCgByB,CsCjB3B,uBACE,WtCiBmB,CsClBrB,uBACE,WtCkBmB,CsCnBrB,sBACE,WtCmBkB,CsCpBpB,0BACE,WtCoBsB,CsCrBxB,6BACE,WtCqByB,CsCtB3B,oCACE,WtCsBgC,CsCvBlC,qBACE,WtCuBiB,CsCxBnB,2BACE,WtCwBuB,CsCzBzB,8BACE,WtCyB0B,CsC1B5B,0BACE,WtC0BsB,CsC3BxB,wBACE,WtC2BoB,CsC5BtB,uBACE,WtC4BmB,CsC7BrB,+BACE,WtC6B2B,CsC9B7B,yBACE,WtC8BqB,CsC/BvB,2BACE,WtC+BuB,CsChCzB,8BACE,WtCgC0B,CsCjC5B,gCACE,WtCiC4B,CsClC9B,iCACE,WtCkC6B,CsCnC/B,yBACE,WtCmCqB,CsCpCvB,0BACE,WtCoCsB,CsCrCxB,+BACE,WtCqC2B,CsCtC7B,gCACE,WtCsC4B,CsCvC9B,wBACE,WtCuCoB,CsCxCtB,qBACE,WtCwCiB,CsCzCnB,yCACE,WtCyCqC,CsC1CvC,uCACE,WtC0CmC,CsC3CrC,qCACE,WtC2CiC,CsC5CnC,qCACE,WtC4CiC,CsC7CnC,sCACE,WtC6CkC,CsC9CpC,mCACE,WtC8C+B,CsC/CjC,gCACE,WtC+C4B,CsChD9B,0BACE,WtCgDsB,CsCjDxB,wCACE,WtCiDoC,CsClDtC,sCACE,WtCkDkC,CsCnDpC,sBACE,WtCmDkB,CsCpDpB,4BACE,WtCoDwB,CsCrD1B,2BACE,WtCqDuB,CsCtDzB,sBACE,WtCsDkB,CsCvDpB,uBACE,WtCuDmB,CsCxDrB,0BACE,WtCwDsB,CsCzDxB,0BACE,WtCyDsB,CsC1DxB,wBACE,WtC0DoB,CsC3DtB,wBACE,WtC2DoB,CsC5DtB,uBACE,WtC4DmB,CsC7DrB,sBACE,WtC6DkB,CsC9DpB,0BACE,WtC8DsB,CsC/DxB,6BACE,WtC+DyB,CsChE3B,4BACE,WtCgEwB,CsCjE1B,wBACE,WtCiEoB,CsClEtB,yBACE,WtCkEqB,CsCnEvB,wBACE,WtCmEoB,CsCpEtB,0BACE,WtCoEsB,CsCrExB,+BACE,WtCqE2B,CsCtE7B,8BACE,WtCsE0B,CsCvE5B,sBACE,WtCuEkB,CsCxEpB,iCACE,WtCwE6B,CsCzE/B,sBACE,WtCyEkB,CsC1EpB,wBACE,WtC0EoB,CsC3EtB,6BACE,WtC2EyB,CsC5E3B,6BACE,WtC4EyB,CsC7E3B,6BACE,WtC6EyB,CsC9E3B,+BACE,WtC8E2B,CsC/E7B,sBACE,WtC+EkB,CsChFpB,uBACE,WtCgFmB,CsCjFrB,uBACE,WtCiFmB,CsClFrB,6BACE,WtCkFyB,CsCnF3B,6BACE,WtCmFyB,CsCpF3B,0BACE,WtCoFsB,CsCrFxB,6BACE,WtCqFyB,CsCtF3B,6BACE,WtCsFyB,CsCvF3B,oCACE,WtCuFgC,CsCxFlC,uBACE,WtCwFmB,CsCzFrB,8BACE,WtCyF0B,CsC1F5B,4BACE,WtC0FwB,CsC3F1B,6BACE,WtC2FyB,CsC5F3B,+BACE,WtC4F2B,CsC7F7B,oCACE,WtC6FgC,CsC9FlC,0BACE,WtC8FsB,CsC/FxB,2BACE,WtC+FuB,CsChGzB,sBACE,WtCgGkB,CsCjGpB,sBACE,WtCiGkB,CsClGpB,sBACE,WtCkGkB,CsCnGpB,6BACE,WtCmGyB,CsCpG3B,oCACE,WtCoGgC,CsCrGlC,4BACE,WtCqGwB,CsCtG1B,0BACE,WtCsGsB,CsCvGxB,6BACE,WtCuGyB,CsCxG3B,6BACE,WtCwGyB,CsCzG3B,2BACE,WtCyGuB,CsC1GzB,4BACE,WtC0GwB,CsC3G1B,4BACE,WtC2GwB,CsC5G1B,2BACE,WtC4GuB,CsC7GzB,gCACE,WtC6G4B,CsC9G9B,0BACE,WtC8GsB,CsC/GxB,0BACE,WtC+GsB,CsChHxB,0BACE,WtCgHsB,CsCjHxB,uBACE,WtCiHmB,CsClHrB,uBACE,WtCkHmB,CsCnHrB,+BACE,WtCmH2B,CsCpH7B,uBACE,WtCoHmB,CsCrHrB,8BACE,WtCqH0B,CsCtH5B,8BACE,WtCsH0B,CsCvH5B,0CACE,WtCuHsC,CsCxHxC,sBACE,WtCwHkB,CsCzHpB,2BACE,WtCyHuB,CsC1HzB,+BACE,WtC0H2B,CsC3H7B,mCACE,WtC2H+B,CsC5HjC,sBACE,WtC4HkB,CsC7HpB,2BACE,WtC6HuB,CsC9HzB,2BACE,WtC8HuB,CsC/HzB,4BACE,WtC+HwB,CsChI1B,yBACE,WtCgIqB,CsCjIvB,wBACE,WtCiIoB,CsClItB,4BACE,WtCkIwB,CsCnI1B,4BACE,WtCmIwB,CsCpI1B,yBACE,WtCoIqB,CsCrIvB,uBACE,WtCqImB,CsCtIrB,8BACE,WtCsI0B,CsCvI5B,2BACE,WtCuIuB,CsCxIzB,yBACE,WtCwIqB,CsCzIvB,sBACE,WtCyIkB,CsC1IpB,mCACE,WtC0I+B,CsC3IjC,2BACE,WtC2IuB,CsC5IzB,yBACE,WtC4IqB,CsC7IvB,sBACE,WtC6IkB,CsC9IpB,sCACE,WtC8IkC,CsC/IpC,0CACE,WtC+IsC,CsChJxC,2CACE,WtCgJuC,CsCjJzC,yCACE,WtCiJqC,CsClJvC,2BACE,WtCkJuB,CsCnJzB,mCACE,WtCmJ+B,CsCpJjC,oCACE,WtCoJgC,CsCrJlC,wBACE,WtCqJoB,CsCtJtB,uBACE,WtCsJmB,CsCvJrB,gCACE,WtCuJ4B,CsCxJ9B,2BACE,WtCwJuB,CsCzJzB,8BACE,WtCyJ0B,CsC1J5B,8BACE,WtC0J0B,CsC3J5B,2BACE,WtC2JuB,CsC5JzB,6BACE,WtC4JyB,CsC7J3B,4BACE,WtC6JwB,CsC9J1B,wBACE,WtC8JoB,CsC/JtB,8BACE,WtC+J0B,CsChK5B,4BACE,WtCgKwB,CsCjK1B,uBACE,WtCiKmB,CsClKrB,8BACE,WtCkK0B,CsCnK5B,2BACE,WtCmKuB,CsCpKzB,wBACE,WtCoKoB,CsCrKtB,4BACE,WtCqKwB,CsCtK1B,qBACE,WtCsKiB,CsCvKnB,+BACE,WtCuK2B,CsCxK7B,6BACE,WtCwKyB,CsCzK3B,6BACE,WtCyKyB,CsC1K3B,4BACE,WtC0KwB,CsC3K1B,2BACE,WtC2KuB,CsC5KzB,4BACE,WtC4KwB,CsC7K1B,4BACE,WtC6KwB,CsC9K1B,2BACE,WtC8KuB,CsC/KzB,yBACE,WtC+KqB,CsChLvB,+BACE,WtCgL2B,CsCjL7B,0BACE,WtCiLsB,CsClLxB,uBACE,WtCkLmB,CsCnLrB,uBACE,WtCmLmB,CsCpLrB,wBACE,WtCoLoB,CsCrLtB,wBACE,WtCqLoB,CsCtLtB,6BACE,WtCsLyB,CsCvL3B,gCACE,WtCuL4B,CsCxL9B,+BACE,WtCwL2B,CsCzL7B,6BACE,WtCyLyB,CsC1L3B,iCACE,WtC0L6B,CsC3L/B,kCACE,WtC2L8B,CsC5LhC,+BACE,WtC4L2B,CsC7L7B,kCACE,WtC6L8B,CsC9LhC,wCACE,WtC8LoC,CsC/LtC,0BACE,WtC+LsB,CsChMxB,2BACE,WtCgMuB,CsCjMzB,2BACE,WtCiMuB,CsClMzB,uCACE,WtCkMmC,CsCnMrC,2BACE,WtCmMuB,CsCpMzB,2BACE,WtCoMuB,CsCrMzB,sBACE,WtCqMkB,CsCtMpB,sBACE,WtCsMkB,CsCvMpB,8BACE,WtCuM0B,CsCxM5B,kCACE,WtCwM8B,CsCzMhC,wBACE,WtCyMoB,CsC1MtB,sBACE,WtC0MkB,CsC3MpB,wBACE,WtC2MoB,CsC5MtB,yBACE,WtC4MqB,CsC7MvB,wBACE,WtC6MoB,CsC9MtB,uCACE,WtC8MmC,CsC/MrC,qBACE,WtC+MiB,CsChNnB,4BACE,WtCgNwB,CsCjN1B,4BACE,WtCiNwB,CsClN1B,0BACE,WtCkNsB,CsCnNxB,uBACE,WtCmNmB,CsCpNrB,sBACE,WtCoNkB,CsCrNpB,6BACE,WtCqNyB,CsCtN3B,2BACE,WtCsNuB,CsCvNzB,+BACE,WtCuN2B,CsCxN7B,6BACE,WtCwNyB,CsCzN3B,0BACE,WtCyNsB,CsC1NxB,uBACE,WtC0NmB,CsC3NrB,8BACE,WtC2N0B,CsC5N5B,8BACE,WtC4N0B,CsC7N5B,sBACE,WtC6NkB,CsC9NpB,sBACE,WtC8NkB,CsC/NpB,0BACE,WtC+NsB,CsChOxB,sBACE,WtCgOkB,CsCjOpB,yBACE,WtCiOqB,CsClOvB,8BACE,WtCkO0B,CsCnO5B,uBACE,WtCmOmB,CsCpOrB,6BACE,WtCoOyB,CsCrO3B,+BACE,WtCqO2B,CsCtO7B,2BACE,WtCsOuB,CsCvOzB,4BACE,WtCuOwB,CsCxO1B,0BACE,WtCwOsB,CsCzOxB,4BACE,WtCyOwB,CsC1O1B,4BACE,WtC0OwB,CsC3O1B,kCACE,WtC2O8B,CsC5OhC,8BACE,WtC4O0B,CsC7O5B,uBACE,WtC6OmB,CsC9OrB,8BACE,WtC8O0B,CsC/O5B,+BACE,WtC+O2B,CsChP7B,uCACE,WtCgPmC,CsCjPrC,+BACE,WtCiP2B,CsClP7B,2BACE,WtCkPuB,CsCnPzB,wBACE,WtCmPoB,CsCpPtB,yBACE,WtCoPqB,CsCrPvB,2BACE,WtCqPuB,CsCtPzB,4BACE,WtCsPwB,CsCvP1B,0BACE,WtCuPsB,CsCxPxB,6BACE,WtCwPyB,CsCzP3B,6BACE,WtCyPyB,CsC1P3B,6BACE,WtC0PyB,CsC3P3B,2BACE,WtC2PuB,CsC5PzB,2BACE,WtC4PuB,CsC7PzB,sBACE,WtC6PkB,CsC9PpB,6BACE,WtC8PyB,CsC/P3B,uBACE,WtC+PmB,CsChQrB,wBACE,WtCgQoB,CsCjQtB,4BACE,WtCiQwB,CsClQ1B,wBACE,WtCkQoB,CsCnQtB,uBACE,WtCmQmB,CsCpQrB,2BACE,WtCoQuB,CsCrQzB,qBACE,WtCqQiB,CsCtQnB,uBACE,WtCsQmB,CsCvQrB,6BACE,WtCuQyB,CsCxQ3B,sBACE,WtCwQkB,CsCzQpB,sBACE,WtCyQkB,CsC1QpB,gCACE,WtC0Q4B,CsC3Q9B,uBACE,WtC2QmB,CsC5QrB,qCACE,WtC4QiC,CsC7QnC,8BACE,WtC6Q0B,CsC9Q5B,8BACE,WtC8Q0B,CsC/Q5B,uBACE,WtC+QmB,CsChRrB,0BACE,WtCgRsB,CsCjRxB,4BACE,WtCiRwB,CsClR1B,0BACE,WtCkRsB,CsCnRxB,kCACE,WtCmR8B,CsCpRhC,uBACE,WtCoRmB,CsCrRrB,wBACE,WtCqRoB,CsCtRtB,wBACE,WtCsRoB,CsCvRtB,sBACE,WtCuRkB,CsCxRpB,yBACE,WtCwRqB,CsCzRvB,kCACE,WtCyR8B,CsC1RhC,wBACE,WtC0RoB,CsC3RtB,+BACE,WtC2R2B,CsC5R7B,oCACE,WtC4RgC,CsC7RlC,qCACE,WtC6RiC,CsC9RnC,mCACE,WtC8R+B,CsC/RjC,gCACE,WtC+R4B,CsChS9B,wBACE,WtCgSoB,CsCjStB,uBACE,WtCiSmB,CsClSrB,yBACE,WtCkSqB,CsCnSvB,qBACE,WtCmSiB,CsCpSnB,4BACE,WtCoSwB,CsCrS1B,sBACE,WtCqSkB,CsCtSpB,iCACE,WtCsS6B,CsCvS/B,6BACE,WtCuSyB,CsCxS3B,2BACE,WtCwSuB,CsCzSzB,uBACE,WtCySmB,CsC1SrB,8BACE,WtC0S0B,CsC3S5B,wBACE,WtC2SoB,CsC5StB,+BACE,WtC4S2B,CsC7S7B,iCACE,WtC6S6B,CsC9S/B,6BACE,WtC8SyB,CsC/S3B,mCACE,WtC+S+B,CsChTjC,wBACE,WtCgToB,CsCjTtB,2BACE,WtCiTuB,CsClTzB,yBACE,WtCkTqB,CsCnTvB,+BACE,WtCmT2B,CsCpT7B,6BACE,WtCoTyB,CsCrT3B,4BACE,WtCqTwB,CsCtT1B,sCACE,WtCsTkC,CsCvTpC,gCACE,WtCuT4B,CsCxT9B,iCACE,WtCwT6B,CsCzT/B,+BACE,WtCyT2B,CsC1T7B,0BACE,WtC0TsB,CsC3TxB,uBACE,WtC2TmB,CsC5TrB,wBACE,WtC4ToB,CsC7TtB,sBACE,WtC6TkB,CsC9TpB,+BACE,WtC8T2B,CsC/T7B,+BACE,WtC+T2B,CsChU7B,0BACE,WtCgUsB,CsCjUxB,uBACE,WtCiUmB,CsClUrB,6BACE,WtCkUyB,CsCnU3B,6BACE,WtCmUyB,CsCpU3B,4BACE,WtCoUwB,CsCrU1B,4BACE,WtCqUwB,CsCtU1B,2BACE,WtCsUuB,CsCvUzB,8BACE,WtCuU0B,CsCxU5B,sBACE,WtCwUkB,CsCzUpB,mCACE,WtCyU+B,CsC1UjC,wCACE,WtC0UoC,CsC3UtC,0BACE,WtC2UsB,CsC5UxB,2BACE,WtC4UuB,CsC7UzB,gCACE,WtC6U4B,CsC9U9B,qCACE,WtC8UiC,CsC/UnC,+BACE,WtC+U2B,CsChV7B,wBACE,WtCgVoB,CsCjVtB,+BACE,WtCiV2B,CsClV7B,sBACE,WtCkVkB,CsCnVpB,4BACE,WtCmVwB,CsCpV1B,+BACE,WtCoV2B,CsCrV7B,4BACE,WtCqVwB,CsCtV1B,8BACE,WtCsV0B,CsCvV5B,sBACE,WtCuVkB,CsCxVpB,2BACE,WtCwVuB,CsCzVzB,+BACE,WtCyV2B,CsC1V7B,uBACE,WtC0VmB,CsC3VrB,iCACE,WtC2V6B,CsC5V/B,+BACE,WtC4V2B,CsC7V7B,+BACE,WtC6V2B,CsC9V7B,8BACE,WtC8V0B,CsC/V5B,gCACE,WtC+V4B,CsChW9B,+BACE,WtCgW2B,CsCjW7B,sCACE,WtCiWkC,CsClWpC,oCACE,WtCkWgC,CsCnWlC,qBACE,WtCmWiB,CsCpWnB,6BACE,WtCoWyB,CsCrW3B,sBACE,WtCqWkB,CsCtWpB,gCACE,WtCsW4B,CsCvW9B,oBACE,WtCuWgB,CsCxWlB,4BACE,WtCwWwB,CsCzW1B,+BACE,WtCyW2B,CsC1W7B,6BACE,WtC0WyB,CsC3W3B,yBACE,WtC2WqB,CsC5WvB,6BACE,WtC4WyB,CsC7W3B,2BACE,WtC6WuB,CsC9WzB,sBACE,WtC8WkB,CsC/WpB,6BACE,WtC+WyB,CsChX3B,sBACE,WtCgXkB,CsCjXpB,qCACE,WtCiXiC,CsClXnC,oCACE,WtCkXgC,CsCnXlC,iCACE,WtCmX6B,CsCpX/B,qCACE,WtCoXiC,CsCrXnC,sBACE,WtCqXkB,CsCtXpB,uBACE,WtCsXmB,CsCvXrB,yBACE,WtCuXqB,CsCxXvB,uBACE,WtCwXmB,CsCzXrB,2BACE,WtCyXuB,CsC1XzB,uBACE,WtC0XmB,CsC3XrB,sBACE,WtC2XkB,CsC5XpB,+BACE,WtC4X2B,CsC7X7B,6BACE,WtC6XyB,CsC9X3B,uBACE,WtC8XmB,CsC/XrB,6BACE,WtC+XyB,CsChY3B,2BACE,WtCgYuB,CsCjYzB,2BACE,WtCiYuB,CsClYzB,sBACE,WtCkYkB,CsCnYpB,iCACE,WtCmY6B,CsCpY/B,iCACE,WtCoY6B,CsCrY/B,wBACE,WtCqYoB,CsCtYtB,uBACE,WtCsYmB,CsCvYrB,2BACE,WtCuYuB,CsCxYzB,yBACE,WtCwYqB,CsCzYvB,wBACE,WtCyYoB,CsC1YtB,sBACE,WtC0YkB,CsC3YpB,0BACE,WtC2YsB,CsC5YxB,wCACE,WtC4YoC,CsC7YtC,yCACE,WtC6YqC,CsC9YvC,uCACE,WtC8YmC,CsC/YrC,uBACE,WtC+YmB,CsChZrB,6BACE,WtCgZyB,CsCjZ3B,4BACE,WtCiZwB,CsClZ1B,2BACE,WtCkZuB,CsCnZzB,sBACE,WtCmZkB,CsCpZpB,8BACE,WtCoZ0B,CsCrZ5B,iCACE,WtCqZ6B,CsCtZ/B,wBACE,WtCsZoB,CsCvZtB,+BACE,WtCuZ2B,CsCxZ7B,+BACE,WtCwZ2B,CsCzZ7B,+BACE,WtCyZ2B,CsC1Z7B,wBACE,WtC0ZoB,CsC3ZtB,yBACE,WtC2ZqB,CsC5ZvB,0BACE,WtC4ZsB,CsC7ZxB,6BACE,WtC6ZyB,CuCle7B,mEAMI,aAAc,CANlB,yBAgBI,eAAgB,CAEhB,aCtB8B,CDIlC,8CAqBM,+FlCvBS,CkC0BX,qEAEE,eAAgB,CAFlB,+GAKI,+FlC/BO,CoC8Bf,UACE,epCXa,CoCYb,iBrCSyC,CqCRzC,apC/BkB,CoCgClB,eAAgB,CAChB,QAAS,CACT,eDzBiC,CC0BjC,WDvCgC,CCwChC,eAAgB,CAGlB,kBD6EE,uCnCtHa,CmCuHb,aAAc,CACd,UA1HgC,CA4HhC,4BACE,oCnCvGW,CoCyBf,e7BvCI,YAAa,CAEf,kB4BqB8B,CAC9B,sBAAuB,CACvB,iBA/B6C,CAgC7C,aAAc,CACd,gBAzB0E,CA0B1E,eAtBkE,CAuBlE,oBAAqB,CACrB,wBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,C5B1BjB,iBACE,WAAY,CACZ,aAAc,CAGhB,yBACE,WAAY,CACZ,aAAc,CAehB,uCAGE,gB4BvBgE,C5B2BlE,uDAEE,cAAkB,CA1BpB,yB4BwBE,qBAAsB,CCM1B,sFDFI,qCnChCW,CmCiCX,cAAe,CACf,oBAAqB,CCAzB,4BDII,wBAAyB,CACzB,yBnC1CW,CmC2CX,kBAAmB,CAGrB,yBAMA,aAAc,CANd,qLASE,sCnCrDW,CmCsDX,aAAc,CAVhB,sCAcE,wBAAyB,CACzB,0BnC1DW,CoCkCf,kCD+BM,anCnDS,CoCoBf,4CDkCQ,aAAc,CClCtB,wIDwCQ,anC5DO,CoCoBf,yKD6CQ,wBnChEO,CoCmBf,yCDiDQ,wBnCrEO,CoCoBf,g9BD2DU,UnCpFK,CoCyBf,kCD+BM,anC7CU,CoCchB,4CDkCQ,aAAc,CClCtB,wIDwCQ,anCtDQ,CoCchB,yKD6CQ,wBnC1DQ,CoCahB,yCDiDQ,wBnC/DQ,CoCchB,g9BD2DU,UnCpFK,CoCyBf,kCD+BM,anCvCW,CoCQjB,4CDkCQ,aAAc,CClCtB,wIDwCQ,anChDS,CoCQjB,yKD6CQ,wBnCpDS,CoCOjB,yCDiDQ,wBnCzDS,CoCQjB,g9BD2DU,UnCpFK,CoCyBf,iCD+BM,anCjCQ,CoCEd,2CDkCQ,aAAc,CClCtB,qIDwCQ,anC1CM,CoCEd,sKD6CQ,wBnC9CM,CoCCd,wCDiDQ,wBnCnDM,CoCEd,g8BD2DU,UnCpFK,CoCyBf,sB3B3BE,gCAAoD,CACpD,cViB0B,CUhB1B,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,C2ByCjC,gBDxCgE,CCiCpE,+CAYI,apCjDW,CoCkDX,cAAiE,CAbrE,oCAiBI,apCtDW,CoCqCf,sFAqBI,aAAc,CArBlB,gDA0BI,qCpC9DW,CoCoCf,4BAgCI,kCAAoC,CAEpC,4BAA8B,CAE9B,sBAAwB,CApC5B,sJAiCI,mCAQ2C,CAK7C,0BDqBA,cpCvFsC,CoCwFtC,gBAxGsF,CAyGtF,eAtGkE,CC+ElE,oCAKI,cAAuE,CAL3E,iC3BzEA,gCAAoD,CACpD,cVkBuB,CUjBvB,iBAAkB,CAClB,eAAgB,CAChB,aAAc,CAZd,iCAAkC,CAClC,kCAAmC,C2B0F/B,iBDxFuE,CCyFvE,cAAoE,CAK1E,qBACE,eAAgB,CAChB,WAAY,CACZ,eAAgB,CAChB,UAAW,CAqBb,iBDdE,uCnCtHa,CmCuHb,aAAc,CACd,UA1HgC,CAmIhC,cAAe,CACf,gBAAkD,CARlD,2BACE,oCnCvGW,CoCgHf,+BDEM,eAAgB,CCFtB,oBtCpFE,aE9CkB,CF+ClB,eAAgB,CAahB,eAAgB,CAChB,sBAAuB,CACvB,kBAAmB,CACnB,gBAAiB,CqCsFjB,gBAAyC,CACzC,QAAS,CACT,sBAA+C,CCrBjD,kCDUM,aAAc,CCPlB,+BDuBE,cAA8B,CAC9B,kBAAiC,CACjC,gBAAgC,CCzBlC,6CD6BE,aAAc,CCvBlB,oBAEI,kBpC1IgB,CoC2IhB,apC9HiB,CoC2HrB,4CDjEM,anChDS,CoCiHf,sDD9DQ,aAAc,CC8DtB,sKDxDQ,anCzDO,CoCiHf,qSDnDQ,wBnChEO,CoCmHf,mDD/CQ,wBnCrEO,CoCoHf,0gDDrCU,UnCpFK,CoCyHf,4CDjEM,anC1CU,CoC2GhB,sDD9DQ,aAAc,CC8DtB,sKDxDQ,anCnDQ,CoC2GhB,qSDnDQ,wBnC1DQ,CoC6GhB,mDD/CQ,wBnC/DQ,CoC8GhB,0gDDrCU,UnCpFK,CoCyHf,4CDjEM,anCpCW,CoCqGjB,sDD9DQ,aAAc,CC8DtB,sKDxDQ,anC7CS,CoCqGjB,qSDnDQ,wBnCpDS,CoCuGjB,mDD/CQ,wBnCzDS,CoCwGjB,0gDDrCU,UnCpFK,CoCyHf,2CDjEM,anC9BQ,CoC+Fd,qDD9DQ,aAAc,CC8DtB,mKDxDQ,anCvCM,CoC+Fd,iSDnDQ,wBnC9CM,CoCiGd,kDD/CQ,wBnCnDM,CoCkGd,s/CDrCU,UnCpFK,CoCyHf,iHAeM,apCjJS,CoCkIf,oEAoBM,qCpCvJS,CoCmIf,8LA+BQ,oCAA8C,CA/BtD,uDAuCI,gCpChKW,CF+Bb,8BsCqIE,apCtKiB,CoC2KrB,qBACE,cAA6B,CCjK/B,YACE,qBrCVa,CqCWb,yFrC/Ba,CqCgCb,WtCuBkC,CsCtBlC,cATkC,CAUlC,iBAAkB,CAClB,UAAW,CACX,UtCsBiB,CsC7BnB,2CAWI,wBrClCgB,CqCuBpB,qBAgBI,+FrC7CW,CqCiDb,sBACE,yFrClDW,CqC6Bf,0BAyBI,MAAO,CACP,cAAe,CACf,OAAQ,CACR,KAAM,CAIV,oBACE,ctCrCsC,CsCsCtC,iBAvCkC,CA0CpC,kBACE,kBAAmB,CACnB,YAAa,CACb,WtCdkC,CsCWpC,iCAMI,UAAW,CANf,kCAUI,WAAY,CAIhB,oBACE,wCrCjFa,CqCkFb,WAA6C,CAC7C,atC5EiB,CsC8EjB,8BACE,qCrClEW,CsCHf,qB/BXI,YAAa,CAEf,qB+BUiC,CACjC,kBAAmB,CACnB,WAAY,CACZ,sBAAuB,CACvB,iBAAkB,CAClB,UAAW,C/BbX,uBACE,WAAY,CACZ,aAAc,CAGhB,+BACE,WAAY,CACZ,aAAc,CAehB,mDAGE,kB+BjBkD,C/BqBpD,mEAEE,eAAkB,CA/BpB,uB+BgBE,eAA6B,CAIjC,4BACE,yBtCvBa,CsCwBb,cAAkC,CAElC,sCACE,0BtCxBW,CuCbf,mBACE,YAAa,CACb,gBAAiB,CACjB,WAAY,CAGd,0BACE,aAAc,CACd,SAAU,CCHZ,sBACE,eAAgB,CAGlB,a1CoBE,Q0ClB+B,C1CmB/B,M0CnB+B,C1CoB/B,e0CpB4B,C1CqB5B,O0CrB+B,C1CsB/B,K0CtB+B,CAC/B,UzCgDiB,CyCnDnB,oCAQI,mBAAoB,CARxB,mCAYI,eAAgB,CAEhB,cAAe,CAdnB,sDAoBM,iBAAkB,CApBxB,0CAyBI,aAAc,CAEd,cAAe,CA3BnB,6DAiCM,iBAAkB,CAjCxB,gCAsCI,cAAe,CAEf,gBAAiB,CAMrB,qBAEE,cAAe,CACf,UzCEiB,CyCAjB,4FAIE,iBAAkB,CAKtB,sB1CxCE,Q0CyC8B,C1CxC9B,M0CwC8B,C1CvC9B,c0CuC2B,C1CtC3B,O0CsC8B,C1CrC9B,K0CqC8B,CxByB5B,SwBtBa,CAIf,kCxC3Ea,CwC4Eb,aAAc,CACd,wBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,UzCpBiB,CiBcjB,iFAqBE,SwBtBW,CxBKb,+FAiBE,SwBtBa,CxBOb,kBArDO,CAsDP,uBwBP2B,CxBQ3B,2BwBTQ,CxBUR,oDjBsBgD,CiB/BlD,uCAqBE,SwBtBa,CxBKf,8CAiBE,SwBtBW,CxBOX,kBArDO,CAsDP,uBwBP2B,CxBQ3B,2BwBTQ,CxBUR,oDjBsBgD,CyCpCpD,4BAcI,YAAa,CAIf,0CACE,iBAAkB,CCrFtB,iBACE,eAAgB,CAChB,iBAAkB,CAGpB,wBACE,kBAAmB,CACnB,mCzCRa,CyCSb,YAAa,CACb,aAAc,CACd,WAAyB,CACzB,SAAU,CAEV,kCACE,oCzCKW,CyCdf,6BAcI,mBAAoB,CACpB,YAAa,CACb,QAAO,CAhBX,qCAoBI,YAA6B,CAIjC,wCACE,eAA8B,CAC9B,cAAe,CACf,kBAAmB,CAHrB,kDAOI,YAAa,CAIjB,sB3CdE,Q2CeiC,C3CdjC,M2CciC,C3CbjC,iB2Ca8B,C3CZ9B,O2CYiC,C3CXjC,K2CWiC,CAEjC,qBzCxBa,CyCyBb,yCzC7Ca,CyC8Cb,YAAa,CACb,qBAAsB,CAGtB,iBAAkB,CAClB,eAAgB,CAChB,SAAU,CAEV,gCACE,wBzClDgB,CyCoCpB,0CAkBI,YAAa,CAKjB,2FC6BI,kCDzB4B,CCyB5B,0BDzB4B,CCyB5B,SDzBsD,CAJ1D,yGC6BI,8BDzB0C,CCyB1C,sBDzB0C,CCyB1C,SDzBwD,CCUxD,kBApBO,CAqBP,uBDTsC,CCUtC,6CDZmD,CCYnD,qCDZmD,CCYnD,uDDZmD,CCanD,+BDZa,CALjB,4CC6BI,8BDlB0C,CCkB1C,sBDlB0C,CCkB1C,SDlBwD,CAX5D,mDCcI,kBApBO,CAqBP,uBDFsC,CCGtC,6CDLmD,CCKnD,qCDLmD,CCKnD,uDDLmD,CCMnD,+BDLa,CAMjB,4ICWI,kCDlB4B,CCkB5B,0BDlB4B,CCkB5B,SDPsD,CAJ1D,uGCWI,8BDP0C,CCO1C,sBDP0C,CCO1C,SDPwD,CCRxD,kBApBO,CAqBP,uBDSsC,CCRtC,6CDMmD,CCNnD,qCDMmD,CCNnD,uDDMmD,CCLnD,+BDMa,CALjB,2CCWI,8BDA0C,CCA1C,sBDA0C,CCA1C,SDAwD,CAX5D,kDCWI,kCDA4B,CCA5B,0BDA4B,CCA5B,SDAsD,CCftD,kBApBO,CAqBP,uBDgBsC,CCftC,6CDamD,CCbnD,qCDamD,CCbnD,uDDamD,CCZnD,+BDaa,CE5FjB,aCgIE,+F5ClIa,CgB6FX,0B4BiE+B,C5BjE/B,kB4BiE+B,CD9IjC,iB5CyByC,C4CxBzC,oBAAqB,CACrB,U5CwCiB,C6CtCjB,gCACE,WDjBwB,CCkBxB,iBAAkB,CAClB,UDnBwB,CCqBxB,uCACE,WAA4C,CAC5C,UAAoE,CAEpE,UAA2C,CAK/C,gFACE,kBAvBsE,CAwBtE,gBAxBsE,CAsBxE,mGAKI,YAxBsD,CAmB1D,uGAQM,gCAAyB,CAAzB,wBAAyB,CAK/B,gFACE,gBApCsE,CAmCxE,mGAII,UApCsD,CAgC1D,uGAOM,2BAAoB,CAApB,mBAAoB,CAK1B,gFACE,eAhDsE,CA+CxE,mGAII,SAhDsD,CA4C1D,uGAOM,+BAAwB,CAAxB,uBAAwB,CAK9B,gFAGE,iBA9DsE,CAgEtE,iBAhEsE,CA2DxE,mGAQI,WAhEsD,CAwD1D,uGAWM,gCAAyB,CAAzB,wBAAyB,CAM/B,oEACE,OAAQ,CACR,kCAA2B,CAA3B,0BAA2B,CAG7B,oEACE,SAAU,CACV,iCAA0B,CAA1B,yBAA0B,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cvDvCgC,CuDwChC,gBvD3BuB,CuD4BvB,eA1DkC,CA2DlC,cA3DkC,CA4DlC,gBA1D8D,C/CuB9D,gGAGE,gB+CvBqE,C/C2BvE,gIAEE,cAAkB,C8CRtB,2DCqCI,iBAAwD,CAExD,kBAAyD,CDvC7D,4BC8CE,kBtDrDa,CsDsDb,UtD5Da,CqDaf,4CC6FI,cAAe,CD7FnB,kDCgGM,qCtDvGS,CqDOf,0GCqGM,oCtD5GS,CqDOf,4BC8CE,kBtD/Cc,CsDgDd,UtD5Da,CqDaf,4CC6FI,cAAe,CD7FnB,kDCgGM,oCtDjGU,CqDChB,0GCqGM,mCtDtGU,CqDChB,4BC8CE,kBtDzCe,CsD0Cf,UtD5Da,CqDaf,4CC6FI,cAAe,CD7FnB,kDCgGM,qCtD3FW,CqDLjB,0GCqGM,oCtDhGW,CqDLjB,2BC8CE,kBtDnCY,CsDoCZ,UtD5Da,CqDaf,2CC6FI,cAAe,CD7FnB,iDCgGM,oCtDrFQ,CqDXd,wGCqGM,mCtD1FQ,CqDXd,kBAeI,YAAa,CACb,UAAW,CAhBf,4GCoDI,YtD7EW,CqDyBf,+CC0DI,qCtDjFW,CsDkFX,atD1FgB,CqD+BpB,+DC4GI,cAAe,CD5GnB,qEC+GM,oCtDxIS,CqDyBf,gJCoHM,oCtD7IS,CsDsFX,yDAGE,atD/Ee,CsD4EjB,yEA+CA,cAAe,CA/Cf,+EAkDE,qCtDpIS,CsDkFX,oKAuDE,qCtDzIS,CsDkFX,wNAMI,YtDzFO,CqDsBf,wCC4EE,qCtDnFa,CsDoFb,atDrFa,CqDQf,wDC4GI,cAAe,CD5GnB,8DC+GM,qCtDtHS,CqDOf,kICoHM,qCtD3HS,CqDOf,qKCgFI,YtDvFW,CsD0Fb,kDAGE,qCtD7FW,CsD8FX,atD5FW,CsDwFb,kEAyBE,cAAe,CAzBjB,wEA4BI,qCtDtHS,CsD0Fb,sJAiCI,qCtD3HS,CqDOf,wCC4EE,oCtD7Ec,CsD8Ed,atD/Ec,CqDEhB,wDC4GI,cAAe,CD5GnB,8DC+GM,oCtDhHU,CqDChB,kICoHM,oCtDrHU,CqDChB,qKCgFI,YtDjFY,CsDoFd,kDAGE,oCtDvFY,CsDwFZ,atDtFY,CsDkFd,kEAyBE,cAAe,CAzBjB,wEA4BI,oCtDhHU,CsDo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CAInB,2BAA6B,CxCY7B,uDAqBE,mCwCrFsD,CxCqFtD,2BwCrFsD,CxCoExD,qEAiBE,+BwCrFoE,CxCqFpE,uBwCrFoE,CxCsEpE,kBApBO,CAqBP,uBwC/DsC,CxCgEtC,qCwCxE0B,CxCwE1B,6BwCxE0B,CxCwE1B,+CwCxE0B,CxCyE1B,0DjBuB4D,CiBhC9D,6EAqBE,mCwCrFsD,CxCqFtD,2BwCrFsD,CxCoExD,2FAiBE,+BwCrFoE,CxCqFpE,uBwCrFoE,CxCsEpE,kBApBO,CAqBP,uBwCvDsC,CxCwDtC,qCwCxE0B,CxCwE1B,6BwCxE0B,CxCwE1B,+CwCxE0B,CxCyE1B,0DjBuB4D,CiBhC9D,0BAqBE,SwCpFwB,CxCoFxB,sBwCpF6D,CxCoF7D,cwCpF6D,CxCmE/D,iCAiBE,SwCpFsB,CxCoFtB,yBwCpFqD,CxCoFrD,iBwCpFqD,CxCqErD,kBApBO,CAqBP,uBwC7CsC,CxC8CtC,0CwCvEgC,CxCuEhC,kCwCvEgC,CxCuEhC,iDwCvEgC,CxCwEhC,oDjBsBgD,CiB/BlD,qCAqBE,+BwCrFoE,CxCqFpE,uBwCrFoE,CxCoEtE,4CAiBE,mCwCrFsD,CxCqFtD,2BwCrFsD,CxCsEtD,qBwCpCmC,CxCqCnC,uBjB0B0B,CiBzB1B,qCwCxE0B,CxCwE1B,6BwCxE0B,CxCwE1B,+CwCxE0B,CxCyE1B,oDjBsBgD,CyDjGpD,6BAyDI,aAAc,CAEd,qBAAe,CA3DnB,qBA+DI,axD7DW,CwD+DX,uBAAe,CAjEnB,yCAsEI,wBxDtEgB,CwDuEhB,+FxD7EW,CwDMf,6DA0EM,axDrES,CwDLf,iCAgFM,wBxDlES,CwDdf,gFAwFM,UxD1ES,CwDdf,oMAmGM,kCAAmC,CAnGzC,iDAwGM,gCxD1FS,CwDdf,iDA4GM,8CAA+C,CAC/C,oBAAwB,CA7G9B,kDAiHM,6CAA8C,CAC9C,oBAAwB,CAlH9B,iDAsHM,uCAAwC,CAtH9C,8BA8HM,wBxD1GS,CwD2GT,UxDjHS,CwDdf,8BA8HM,wBxDpGU,CwDqGV,UxDjHS,CwDdf,8BA8HM,wBxD9FW,CwD+FX,UxDjHS,CwDdf,6BA8HM,wBxDxFQ,CwDyFR,UxDjHS,CwDsHf,mBACE,aAAc,CACd,Y1D3D2C,C0D4D3C,qBAAsB,CAGxB,qBACE,kBAAmB,CAGnB,sBAAwB,CACxB,qBAAsB,CACtB,MAAO,CAIP,eAAgB,CAGhB,mBAzJ8B,CA4J9B,mBAAoB,CAEpB,cAAe,CACf,OAAQ,CAGR,UzD5GiB,CyDsFnB,6CAyBI,KAAM,CAzBV,gDA6BI,QAAS,CACT,6BAA8B,CAC9B,QAAS,CA/Bb,8CAmCI,sBAAuB,CAnC3B,+CAuCI,oBAAqB,CAIzB,2fAQI,kCAAoD,CAApD,0BAAoD,CCjMxD,abgIE,+F5ClIa,CgB6FX,0ByC3E+B,CzC2E/B,kByC3E+B,CbEjC,gCACE,WajBwB,CbkBxB,iBAAkB,CAClB,UanBwB,CbqBxB,uCACE,WAA4C,CAC5C,UAAoE,CAEpE,UAA2C,CAK/C,gFACE,kBAvBsE,CAwBtE,gBAxBsE,CAsBxE,mGAKI,WAxBsD,CAmB1D,uGAQM,gCAAyB,CAAzB,wBAAyB,CAK/B,gFACE,gBApCsE,CAmCxE,mGAII,SApCsD,CAgC1D,uGAOM,2BAAoB,CAApB,mBAAoB,CAK1B,gFACE,eAhDsE,CA+CxE,mGAII,QAhDsD,CA4C1D,uGAOM,+BAAwB,CAAxB,uBAAwB,CAK9B,gFAGE,iBA9DsE,CAgEtE,iBAhEsE,CA2DxE,mGAQI,UAhEsD,CAwD1D,uGAWM,gCAAyB,CAAzB,wBAAyB,CAM/B,oEACE,OAAQ,CACR,kCAA2B,CAA3B,0BAA2B,CAG7B,oEACE,SAAU,CACV,iCAA0B,CAA1B,yBAA0B,CAO1B,gGACE,aArF0F,CAoF5F,oGACE,eArF0F,CAoF5F,kGACE,cArF0F,CAoF5F,sGACE,gBArF0F,CA2F1F,+EAKI,iCANc,CAMd,yBANc,CAClB,iFAKI,mCANsB,CAMtB,2BANsB,CAC1B,gFAKI,kCAN6B,CAM7B,0BAN6B,CACjC,kFAGI,oCAJc,CAId,4BAJc,CAClB,oFAGI,sCAJsB,CAItB,8BAJsB,CAC1B,mFAGI,qCAJ6B,CAI7B,6BAJ6B,CACjC,kFAKI,oCANc,CAMd,4BANc,CAClB,oFAKI,sCANsB,CAMtB,8BANsB,CAC1B,mFAKI,qCAN6B,CAM7B,6BAN6B,CAwBrC,kCACE,kB5C/HgB,C4CgIhB,a5CpHiB,C4COjB,uCAiHA,wC5C1IW,C4C6Ib,uCACE,Y5C9IW,C4C+IX,e7ChF0B,C6CmF5B,qCACE,Y5C7IgB,CgBkElB,iEAqBE,2ByC3EsB,CzC2EtB,mByC3EsB,CzC0DxB,+EAiBE,0ByC3E+B,CzC2E/B,kByC3E+B,CzC4D/B,kBArDO,CAsDP,uBjB0B0B,CiBzB1B,qCyC9DU,CzC8DV,6ByC9DU,CzC8DV,+CyC9DU,CzC+DV,oDjBsBgD,CiB/BlD,+BAqBE,0ByC3E+B,CzC2E/B,kByC3E+B,CzC0DjC,sCAiBE,2ByC3EsB,CzC2EtB,mByC3EsB,CzC4DtB,kBArDO,CAsDP,uBjB0B0B,CiBzB1B,qCyC9DU,CzC8DV,6ByC9DU,CzC8DV,+CyC9DU,CzC+DV,oDjBsBgD,C6C6BlD,kCa5GE,iBCnB4C,CDHhD,6CbgIE,+F5ClIa,C4CoIb,uFACE,kB5CrHiB,C4CsHjB,a5ChIgB,C4CmIlB,iGACE,wC5C1IW,C4C6Ib,iGACE,Y5C9IW,C4C+IX,e7ChF0B,C6CmF5B,6FACE,Y5CnIiB,CyDdrB,qDAuCQ,kBzDfO,CyDgBP,UzDtBO,CyDlBf,wDA4CQ,YzDpBO,CyDxBf,qDAuCQ,kBzDTQ,CyDUR,UzDtBO,CyDlBf,wDA4CQ,YzDdQ,CyD9BhB,qDAuCQ,kBzDHS,CyDIT,UzDtBO,CyDlBf,wDA4CQ,YzDRS,CyDpCjB,oDAuCQ,kBzDGM,CyDFN,UzDtBO,CyDlBf,uDA4CQ,YzDFM,CyDQd,uBACE,wBAAyB,CACzB,WAAY,CEbd,2EAEI,a3DnCW,C2DiCf,oI7DlBE,aEGa,C2Def,oI7DlBE,aESc,C2DShB,oI7DlBE,aEee,C2DGjB,iI7DlBE,aEqBY,C2DSd,oBACE,eAAgB,CAChB,QAAS,CACT,cAAe,CAGjB,eACE,4BAA6B,CAC7B,cAAe,CACf,cAAe,CAEf,iBAAkB,CAIlB,yBACE,cAA0D,CAD5D,yBACE,iBAA0D,CAD5D,yBACE,iBAA0D,CAD5D,yBACE,iBAA0D,CAD5D,yBACE,iBAA0D,CAD5D,yBACE,kBAA0D,CAD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jBOuC,CiBNvC,+EJnCW,CIoCX,oBAAqB,CACrB,WApC2C,CAqC3C,gBAnCgE,CAoChE,aAlC0B,CAmC1B,qBAAsB,CA/B1B,6CAmCI,aJpCW,CIqCX,oBAAqB,CACrB,cjBrBoC,CiBsBpC,iBAAkB,CAClB,UA1C0C,CAG9C,sCA2CI,sBAAuB,CACvB,QAAS,CACT,iBjBbuC,CiBcvC,gEJ7BW,CI8BX,aJtDgB,CIuDhB,WAtDgE,CAuDhE,SAAU,CACV,SAAU,CACV,iBAAkB,CAClB,mDjB0CgD,CiBzChD,UAvD0C,CAE9C,4CAwDM,0DJvCS,CIjBf,yDC2LE,6JLpMa,CISf,+DCgMI,4FLzMW,CISf,mECqMI,kCLpLW,CIjBf,wIC0MI,eAAgB,CD3IZ,mECgJN,uLLxNa,CIwEP,yECqJJ,gJL7NW,CIwEP,6EC0JJ,kCLxMW,CI8CP,4JC+JJ,eAAgB,CD9NpB,yDC2LE,2JLpMa,CISf,+DCgMI,2FLzMW,CISf,mECqMI,kCL9KY,CIvBhB,wIC0MI,eAAgB,CD3IZ,mECgJN,oLLxNa,CIwEP,yECqJJ,+IL7NW,CIwEP,6EC0JJ,kCLlMY,CIwCR,4JC+JJ,eAAgB,CD9NpB,yDC2LE,6JLpMa,CISf,+DCgMI,4FLzMW,CISf,mECqMI,kCLxKa,CI7BjB,wIC0MI,eAAgB,CD3IZ,mECgJN,uLLxNa,CIwEP,yECqJJ,gJL7NW,CIwEP,6EC0JJ,kCL5La,CIkCT,4JC+JJ,eAAgB,CD9NpB,wDC2LE,2JLpMa,CISf,8DCgMI,2FLzMW,CISf,kECqMI,kCLlKU,CInCd,sIC0MI,eAAgB,CD3IZ,kECgJN,oLLxNa,CIwEP,wECqJJ,+IL7NW,CIwEP,4EC0JJ,kCLtLU,CI4BN,0JC+JJ,eAAgB,CD9NpB,4CAuEI,eAA8B,CAvElC,uDCwHE,+BLnHmB,CKoHnB,eAAgB,CAChB,yBL3Ha,CK4Hb,kBAAmB,CACnB,WAAY,CD5Hd,uOAuFM,yBJxFS,CIyFT,kBAAmB,CAKzB,oDAEI,4BJxGW,CIyGX,8EJzGW,CIsGf,uDAOI,aJlGW,CI2Ff,gDAWI,aJ/FiB,CImGrB,gCACE,kBAAsC,CACtC,cHtHoC,CGoHtC,2CAMI,iBH1HkC,CKDtC,oBACE,qBNmBa,CMlBb,iBnBuCyC,CmBtCzC,YnBIiB,CmBHjB,iBAAkB,CAElB,8BACE,kBNFgB,CMClB,8CAII,yCNVS,CMAf,oCAeI,0CNfW,CMgBX,gBnBTe,CmBPnB,oCAoBI,enBbe,CoBTnB,uBACE,SAAU,CC8BV,WACE,qBC3BwB,CD4BxB,iBAJiB,CAKjB,eANkB,CAQlB,mNAiB6C,CAtB/C,WACE,qBC1BwB,CD2BxB,iBAJiB,CAKjB,eANkB,CAQlB,mNAiB6C,CE9CjD,a5CwFI,sB4CtFyC,C5CsFzC,c4CtFyC,C5CsFzC,S4CrFgB,CAUlB,qBVEa,CUDb,iBvBsByC,CuBrBzC,oGVpBa,CUqBb,sBAAuC,CACvC,QAAgC,CAChC,WArBgC,CAsBhC,UvBkCiB,CuBrDnB,+D5CwFI,yB4CtFgC,C5CsFhC,iB4CtFgC,C5CsFhC,U4CrFa,CAHjB,6E5CwFI,sB4CtFyC,C5CsFzC,c4CtFyC,C5CsFzC,S4CrFgB,C5CsEhB,kBArDO,CAsDP,uB4CjEsC,C5CkEtC,0C4CxEO,C5CwEP,kC4CxEO,C5CwEP,iD4CxEO,C5CyEP,oDqBsBgD,CuBlGpD,8B5CwFI,sB4CtFyC,C5CsFzC,c4CtFyC,C5CsFzC,S4CrFgB,CAHpB,qC5CwFI,yB4CtFgC,C5CsFhC,iB4CtFgC,C5CsFhC,U4CrFa,C5CsEb,kBArDO,CAsDP,uB4CjEsC,C5CkEtC,0C4CxEO,C5CwEP,kC4CxEO,C5CwEP,iD4CxEO,C5CyEP,oDqBsBgD,CuBlGpD,wBAsBI,4BAA6B,CAC7B,eAAgB,CAvBpB,sDA2BM,eAAgB,CA3BtB,uBAgCI,4BAA6B,CAC7B,eAAgB,CAChB,2CVvCW,CUwCX,4BAA+D,CAC/D,aAAc,CApClB,6BAuCM,YAAa,CAIjB,6CAEE,wBV7CgB,CU8ChB,oGVnDW,CUuDf,2CACE,kCVxDa,CWCf,kBACE,eAA6B,CAG/B,oCAEI,gBCP0C,CDQ1C,eCPyC,CDQzC,aAAc,CCNlB,yCAII,WAA0B,CAJ9B,qCAQI,eAAgB,CARpB,8BAYI,gBAf0C,CAgB1C,eAfyC,CAgBzC,aAAc,CACd,SAAU,CAfd,gDAmBM,eAA8B","file":"2.0bca3029.chunk.css","sourcesContent":[null,null,"/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]} \ No newline at end of file diff --git a/cate/webapi/app/static/css/main.aa591355.chunk.css b/cate/webapi/app/static/css/main.aa591355.chunk.css new file mode 100644 index 000000000..f82b8243d --- /dev/null +++ b/cate/webapi/app/static/css/main.aa591355.chunk.css @@ -0,0 +1,2 @@ +/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on March 25, 2020 */@font-face{font-family:"notesesaregular";src:url(../../static/media/notesesareg-webfont.5c342a71.eot);src:url(../../static/media/notesesareg-webfont.5c342a71.eot?#iefix) format("embedded-opentype"),url(../../static/media/notesesareg-webfont.9643bb60.woff2) format("woff2"),url(../../static/media/notesesareg-webfont.3f6039de.woff) format("woff"),url(../../static/media/notesesareg-webfont.6a3ea7d4.ttf) format("truetype"),url(../../static/media/notesesareg-webfont.d1cb9435.svg#notesesaregular) format("svg");font-weight:400;font-style:normal}#root,body,html{width:100vw;height:100vh;background-color:#394b59}h1,h2{font-family:notesesaregular,Arial,Helvetica,sans-serif}body{position:absolute;overflow:hidden}#root,body{margin:0;padding:0;border:0}.user-selectable{-webkit-user-select:text;-ms-user-select:text;user-select:text}:not(input):not(textarea),:not(input):not(textarea):after,:not(input):not(textarea):before{-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:default}:focus,button,input,textarea{outline:none}::-webkit-scrollbar{width:.8em;height:.8em}::-webkit-scrollbar-track{background:rgba(191,204,214,.2)}::-webkit-scrollbar-thumb{background:rgba(191,204,214,.6)}::-webkit-scrollbar-thumb:window-inactive{background:rgba(191,204,214,.4)}::-webkit-scrollbar-corner{background:transparent}.cate-color-bars-popover .pt-popover-content{max-height:20em;overflow-y:auto}.cate-list-box{list-style-type:none;padding:0;margin:0;border:1px solid #182026;background-color:#293742}.pt-dialog-body .bp3-dialog-body .cate-list-box{background-color:#212f3a;margin-bottom:10px}.cate-list-box li{padding:.2em .4em;border-bottom:1px solid #182026}.cate-list-box li:last-child{border-bottom:none}.cate-list-box li:hover{background-color:hsla(0,0%,100%,.1)}ul.cate-list-box li.cate-selected{background-color:rgba(128,128,255,.6)}.cate-split-pane-hor{width:100%;height:100%;display:flex;flex-flow:row nowrap;flex:auto}.cate-split-pane-ver{height:100%;display:flex;flex-flow:column nowrap;flex:auto}.cate-splitter-hor{flex:none;border:none;outline:none;width:4px;min-height:100%;max-height:100%;cursor:col-resize}.cate-splitter-ver{flex:none;border:none;outline:none;height:4px;min-width:100%;max-width:100%;cursor:row-resize}.cate-panel-header{display:flex;margin:0;padding:.3em;border-top:1px solid #5c7080;border-bottom:1px solid #5c7080;color:#f5f8fa;background-color:#202b33;align-items:center}.cate-panel-header-item{margin-left:.1em;margin-right:.1em}.cate-panel-text{flex:1 0 auto;text-align:left;margin-left:.5em;margin-right:.5em}span.cate-icon-small{font-size:12px;font-weight:lighter;padding-left:2px;transition:color .5s linear;color:rgba(43,149,214,.1)}span.cate-icon-small:hover{color:#2b95d6}.cesium-widget{position:relative}.cesium-widget,.cesium-widget canvas{width:100%;height:100%} +/*# sourceMappingURL=main.aa591355.chunk.css.map */ \ No newline at end of file diff --git a/cate/webapi/app/static/css/main.aa591355.chunk.css.map b/cate/webapi/app/static/css/main.aa591355.chunk.css.map new file mode 100644 index 000000000..8f29a4521 --- /dev/null +++ b/cate/webapi/app/static/css/main.aa591355.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["stylesheet.css","index.css"],"names":[],"mappings":"AAAA,iFAAiF,CAEjF,WACI,6BAA8B,CAC9B,4DAAmC,CACnC,sZAI4D,CAC5D,eAAmB,CACnB,iBACJ,CCTA,gBACI,WAAY,CACZ,YAAa,CAEb,wBAEJ,CAEA,MACI,sDACJ,CAQA,KACI,iBAAkB,CAClB,eACJ,CAKA,WACI,QAAS,CACT,SAAU,CACV,QACJ,CAMA,iBACI,wBAAiB,CAAjB,oBAAiB,CAAjB,gBACJ,CAMA,2FAGI,wBAAyB,CACzB,oBAAiB,CAAjB,gBAAiB,CACjB,cACJ,CAKA,6BACI,YACJ,CAMA,oBACI,UAAY,CACZ,WACJ,CAEA,0BAEI,+BAIJ,CAEA,0BAEI,+BAIJ,CAEA,0CAEI,+BACJ,CAEA,2BACI,sBACJ,CAEA,6CACI,eAAgB,CAChB,eACJ,CAEA,eACI,oBAAqB,CACrB,SAAU,CACV,QAAS,CAET,wBAAyB,CAEzB,wBACJ,CAEA,gDACI,wBAAyB,CACzB,kBACJ,CAEA,kBACI,iBAAoB,CAEpB,+BACJ,CAEA,6BACI,kBACJ,CAEA,wBACI,mCACJ,CAEA,kCACI,qCACJ,CAEA,qBACI,UAAW,CACX,WAAY,CACZ,YAAa,CACb,oBAAqB,CACrB,SACJ,CAEA,qBACI,WAAY,CACZ,YAAa,CACb,uBAAwB,CACxB,SACJ,CAEA,mBACI,SAAU,CACV,WAAY,CACZ,YAAa,CACb,SAAU,CACV,eAAgB,CAChB,eAAgB,CAEhB,iBACJ,CAEA,mBACI,SAAU,CACV,WAAY,CACZ,YAAa,CACb,UAAW,CACX,cAAe,CACf,cAAe,CAEf,iBACJ,CAEA,mBACI,YAAa,CACb,QAAS,CACT,YAAc,CAGd,4BAA6B,CAC7B,+BAAgC,CAMhC,aAAc,CAEd,wBAAyB,CACzB,kBACJ,CAEA,wBACI,gBAAkB,CAClB,iBACJ,CAEA,iBACI,aAAc,CACd,eAAgB,CAChB,gBAAkB,CAClB,iBAEJ,CAEA,qBACI,cAAe,CACf,mBAAoB,CACpB,gBAAiB,CACjB,2BAA6B,CAE7B,yBACJ,CAEA,2BAEI,aACJ,CAOA,eACI,iBACJ,CAKA,qCACI,UAAW,CACX,WACJ","file":"main.aa591355.chunk.css","sourcesContent":["/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on March 25, 2020 */\n\n@font-face {\n font-family: 'notesesaregular';\n src: url('notesesareg-webfont.eot');\n src: url('notesesareg-webfont.eot?#iefix') format('embedded-opentype'),\n url('notesesareg-webfont.woff2') format('woff2'),\n url('notesesareg-webfont.woff') format('woff'),\n url('notesesareg-webfont.ttf') format('truetype'),\n url('notesesareg-webfont.svg#notesesaregular') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n","/*\n * Assign all available viewport space to html and body and our top-level root container\n */\nhtml, body, #root {\n width: 100vw;\n height: 100vh;\n /* blueprint's @dark-gray5*/\n background-color: #394B59;\n /*font-family: Arial, Helvetica, sans-serif;*/\n}\n\nh1, h2 {\n font-family: notesesaregular, Arial, Helvetica, sans-serif;\n}\n\n/*\n * For a single-page app, if the is styled with width: 100% and height: 100%,\n * a blueprint's Portal (or Overlay) may take up extra whitespace and cause the window\n * to undesirably scroll. To fix this, instead apply position: absolute to the tag.\n * See http://blueprintjs.com/docs/#components.portal\n */\nbody {\n position: absolute;\n overflow: hidden;\n}\n\n/*\n * Get rid of all margins, paddings, borders.\n */\nbody, #root {\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n\n/*\n * A class used to mark elements that are user-selectable\n */\n.user-selectable {\n user-select: text;\n}\n\n/*\n * Disable highlighting/selecting across the application\n * Solution taken from https://github.com/electron/electron/issues/2538\n */\n:not(input):not(textarea),\n:not(input):not(textarea)::after,\n:not(input):not(textarea)::before {\n -webkit-user-select: none;\n user-select: none;\n cursor: default;\n}\n\n/*\n * We must add some other style for :focus to help UX/a11y\n */\ninput, button, textarea, :focus {\n outline: none;\n}\n\n/*\n * -webkit-scrollbar customization taken from\n * https://css-tricks.com/examples/WebKitScrollbars/\n */\n::-webkit-scrollbar {\n width: 0.8em;\n height: 0.8em;\n}\n\n::-webkit-scrollbar-track {\n /* blueprint's @gray5 */\n background: rgba(191, 204, 214, 0.2);\n /*-webkit-box-shadow: inset 0 0 0.4em rgba(0, 0, 0, 0.3);*/\n /*-webkit-border-radius: 0.8em;*/\n /*border-radius: 0.8em;*/\n}\n\n::-webkit-scrollbar-thumb {\n /* blueprint's @gray5 */\n background: rgba(191, 204, 214, 0.6);\n /*-webkit-box-shadow: inset 0 0 0.4em rgba(0, 0, 0, 0.5);*/\n /*-webkit-border-radius: 0.8em;*/\n /*border-radius: 0.8em;*/\n}\n\n::-webkit-scrollbar-thumb:window-inactive {\n /* blueprint's @gray5 */\n background: rgba(191, 204, 214, 0.4);\n}\n\n::-webkit-scrollbar-corner {\n background: rgba(0, 0, 0, 0)\n}\n\n.cate-color-bars-popover .pt-popover-content {\n max-height: 20em;\n overflow-y: auto;\n}\n\n.cate-list-box {\n list-style-type: none;\n padding: 0;\n margin: 0;\n /* blueprint's @dark-grey1 */\n border: 1px solid #182026;\n /* blueprint's @dark-grey3, the standard dark theme color */\n background-color: #293742;\n}\n\n.pt-dialog-body .bp3-dialog-body .cate-list-box {\n background-color: #212F3A;\n margin-bottom: 10px;\n}\n\n.cate-list-box li {\n padding: 0.2em 0.4em;\n /* blueprint's @dark-grey1 */\n border-bottom: 1px solid #182026;\n}\n\n.cate-list-box li:last-child {\n border-bottom: none;\n}\n\n.cate-list-box li:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\nul.cate-list-box li.cate-selected {\n background-color: rgba(128, 128, 255, 0.6);\n}\n\n.cate-split-pane-hor {\n width: 100%;\n height: 100%;\n display: flex;\n flex-flow: row nowrap;\n flex: auto; /* same as \"flex: 1 1 auto;\" */\n}\n\n.cate-split-pane-ver {\n height: 100%;\n display: flex;\n flex-flow: column nowrap;\n flex: auto; /* same as \"flex: 1 1 auto;\" */\n}\n\n.cate-splitter-hor {\n flex: none;\n border: none;\n outline: none;\n width: 4px;\n min-height: 100%;\n max-height: 100%;\n /*background-color: yellow;*/\n cursor: col-resize;\n}\n\n.cate-splitter-ver {\n flex: none;\n border: none;\n outline: none;\n height: 4px;\n min-width: 100%;\n max-width: 100%;\n /*background-color: yellow;*/\n cursor: row-resize;\n}\n\n.cate-panel-header {\n display: flex;\n margin: 0;\n padding: 0.3em;\n\n /* blueprint @grey1 */\n border-top: 1px solid #5C7080;\n border-bottom: 1px solid #5C7080;\n\n /*font-size: medium;*/\n /*font-weight: bolder;*/\n\n /* blueprint @light-grey5 */\n color: #F5F8FA;\n /* blueprint @dark-grey2 */\n background-color: #202B33;\n align-items: center;\n}\n\n.cate-panel-header-item {\n margin-left: 0.1em;\n margin-right: 0.1em;\n}\n\n.cate-panel-text {\n flex: 1 0 auto;\n text-align: left;\n margin-left: 0.5em;\n margin-right: 0.5em;\n /*font-family: notesesaregular, Arial, sans-serif*/\n}\n\nspan.cate-icon-small {\n font-size: 12px;\n font-weight: lighter;\n padding-left: 2px;\n transition: color 0.5s linear;\n /* blueprint's @blue4 used for selection in pt-dark */\n color: rgba(43, 149, 214, 0.1);\n}\n\nspan.cate-icon-small:hover {\n /* blueprint's @blue4 used for selection in pt-dark */\n color: rgba(43, 149, 214, 1.0);\n}\n\n/* <<<< Cesium ============================================================ */\n\n/*\n * Override cesium-widget from Cesium\n */\n.cesium-widget {\n position: relative;\n}\n\n/*\n * Override cesium-widget from Cesium\n */\n.cesium-widget, .cesium-widget canvas {\n width: 100%;\n height: 100%;\n}\n\n/* >>>> Cesium ============================================================ */\n"]} \ No newline at end of file diff --git a/cate/webapi/app/static/js/2.7342eb6f.chunk.js b/cate/webapi/app/static/js/2.7342eb6f.chunk.js new file mode 100644 index 000000000..a7bee5708 --- /dev/null +++ b/cate/webapi/app/static/js/2.7342eb6f.chunk.js @@ -0,0 +1,3 @@ +/*! For license information please see 2.7342eb6f.chunk.js.LICENSE.txt */ +(this["webpackJsonpcate-app"]=this["webpackJsonpcate-app"]||[]).push([[2],[function(e,t,n){"use strict";t.a=function(e){return void 0!==e&&null!==e}},function(e,t,n){"use strict";function i(e,t){return void 0!==e&&null!==e?e:t}i.EMPTY_OBJECT=Object.freeze({}),t.a=i},function(e,t,n){"use strict";e.exports=n(431)},function(e,t,n){"use strict";var i=n(0);function r(e){var t;this.name="DeveloperError",this.message=e;try{throw new Error}catch(n){t=n.stack}this.stack=t}Object(i.a)(Object.create)&&(r.prototype=Object.create(Error.prototype),r.prototype.constructor=r),r.prototype.toString=function(){var e=this.name+": "+this.message;return Object(i.a)(this.stack)&&(e+="\n"+this.stack.toString()),e},r.throwInstantiationError=function(){throw new r("This function defines an interface and should not be called directly.")},t.a=r},function(e,t,n){"use strict";var i=n(0),r=n(3),o={};function a(e,t,n){return"Expected "+n+" to be typeof "+t+", actual typeof was "+e}o.typeOf={},o.defined=function(e,t){if(!Object(i.a)(t))throw new r.a(function(e){return e+" is required, actual value was undefined"}(e))},o.typeOf.func=function(e,t){if("function"!==typeof t)throw new r.a(a(typeof t,"function",e))},o.typeOf.string=function(e,t){if("string"!==typeof t)throw new r.a(a(typeof t,"string",e))},o.typeOf.number=function(e,t){if("number"!==typeof t)throw new r.a(a(typeof t,"number",e))},o.typeOf.number.lessThan=function(e,t,n){if(o.typeOf.number(e,t),t>=n)throw new r.a("Expected "+e+" to be less than "+n+", actual value was "+t)},o.typeOf.number.lessThanOrEquals=function(e,t,n){if(o.typeOf.number(e,t),t>n)throw new r.a("Expected "+e+" to be less than or equal to "+n+", actual value was "+t)},o.typeOf.number.greaterThan=function(e,t,n){if(o.typeOf.number(e,t),t<=n)throw new r.a("Expected "+e+" to be greater than "+n+", actual value was "+t)},o.typeOf.number.greaterThanOrEquals=function(e,t,n){if(o.typeOf.number(e,t),t=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}function c(){for(var e=0,t=0,n=arguments.length;t>>0,a=Math.max(0,Math.min(t,m)),c=[],s=m-a+1,u=[],h=l(),a)for(p=h.progress,f=function(e){u.push(e),--s||(d=f=g,h.reject(u))},d=function(e){c.push(e),--a||(d=f=g,h.resolve(c))},v=0;v>>0,n=[],c=l(),r)for(a=function(e,i){o(e,t).then((function(e){n[i]=e,--r||c.resolve(n)}),c.reject)},s=0;se;)if(null!=(n=t[--i])&&"function"!=typeof n)throw new Error("arg "+i+" must be a function")}function g(){}function v(e){return e}o.defer=l,o.resolve=a,o.reject=function(e){return o(e,c)},o.join=function(){return f(arguments,v)},o.all=d,o.map=f,o.reduce=function(e,t){var n=r.call(arguments,1);return o(e,(function(e){var r;return r=e.length,n[0]=function(e,n,i){return o(e,(function(e){return o(n,(function(n){return t(e,n,i,r)}))}))},i.apply(e,n)}))},o.any=function(e,t,n,i){return h(e,1,(function(e){return t?t(e[0]):e[0]}),n,i)},o.some=h,o.chain=function(e,t,n){var i=arguments.length>2;return o(e,(function(e){return e=i?n:e,t.resolve(e),e}),(function(e){return t.reject(e),c(e)}),t.progress)},o.isPromise=u,s.prototype={always:function(e,t){return this.then(e,e,t)},otherwise:function(e){return this.then(void 0,e)},yield:function(e){return this.then((function(){return e}))},spread:function(e){return this.then((function(t){return d(t,(function(t){return e.apply(void 0,t)}))}))}},r=[].slice,i=[].reduce||function(e){var t,n,i,r,o;if(o=0,r=(t=Object(this)).length>>>0,(n=arguments).length<=1)for(;;){if(o in t){i=t[o++];break}if(++o>=r)throw new TypeError}else i=n[1];for(;o0){for(s.sort(a),e=0;e0}}}),R.prototype.toString=function(){return this.getUrlComponent(!0,!0)},R.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;var n=new r.a(this._url);e&&function(e,t){var n=t._queryParameters,i=Object.keys(n);1!==i.length||Object(h.a)(n[i[0]])?e.query=Object(y.a)(n):e.query=i[0]}(n,this);var i=n.toString().replace(/%7B/g,"{").replace(/%7D/g,"}"),o=this._templateValues;return i=i.replace(/{(.*?)}/g,(function(e,t){var n=o[t];return Object(h.a)(n)?encodeURIComponent(n):e})),t&&Object(h.a)(this.proxy)&&(i=this.proxy.getURL(i)),i},R.prototype.setQueryParameters=function(e,t){this._queryParameters=t?M(this._queryParameters,e,!1):M(e,this._queryParameters,!1)},R.prototype.appendQueryParameters=function(e){this._queryParameters=M(e,this._queryParameters,!0)},R.prototype.setTemplateValues=function(e,t){this._templateValues=t?Object(l.a)(this._templateValues,e):Object(l.a)(e,this._templateValues)},R.prototype.getDerivedResource=function(e){var t=this.clone();if(t._retryCount=0,Object(h.a)(e.url)){var n=new r.a(e.url);D(n,t,!0,Object(u.a)(e.preserveQueryParameters,!1)),n.fragment=void 0,t._url=n.resolve(new r.a(Object(f.a)(this._url))).toString()}return Object(h.a)(e.queryParameters)&&(t._queryParameters=Object(l.a)(e.queryParameters,t._queryParameters)),Object(h.a)(e.templateValues)&&(t._templateValues=Object(l.a)(e.templateValues,t.templateValues)),Object(h.a)(e.headers)&&(t.headers=Object(l.a)(e.headers,t.headers)),Object(h.a)(e.proxy)&&(t.proxy=e.proxy),Object(h.a)(e.request)&&(t.request=e.request),Object(h.a)(e.retryCallback)&&(t.retryCallback=e.retryCallback),Object(h.a)(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t},R.prototype.retryOnError=function(e){var t=this.retryCallback;if("function"!==typeof t||this._retryCount>=this.retryAttempts)return Object(o.a)(!1);var n=this;return Object(o.a)(t(this,e)).then((function(e){return++n._retryCount,e}))},R.prototype.clone=function(e){return Object(h.a)(e)||(e=new R({url:this._url})),e._url=this._url,e._queryParameters=Object(c.a)(this._queryParameters),e._templateValues=Object(c.a)(this._templateValues),e.headers=Object(c.a)(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e},R.prototype.getBaseUri=function(e){return Object(p.a)(this.getUrlComponent(e),e)},R.prototype.appendForwardSlash=function(){this._url=Object(a.a)(this._url)},R.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})},R.fetchArrayBuffer=function(e){return new R(e).fetchArrayBuffer()},R.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})},R.fetchBlob=function(e){return new R(e).fetchBlob()},R.prototype.fetchImage=function(e){e=Object(u.a)(e,u.a.EMPTY_OBJECT);var t=Object(u.a)(e.preferImageBitmap,!1),n=Object(u.a)(e.preferBlob,!1),i=Object(u.a)(e.flipY,!1);if(I(this.request),!S||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return L({resource:this,flipY:i,preferImageBitmap:t});var r,a,s,c=this.fetchBlob();return Object(h.a)(c)?R.supportsImageBitmapOptions().then((function(e){return r=e&&t,c})).then((function(e){if(Object(h.a)(e)){if(s=e,r)return R.createImageBitmapFromBlob(e,{flipY:i,premultiplyAlpha:!1});var t=window.URL.createObjectURL(e);return L({resource:a=new R({url:t}),flipY:i,preferImageBitmap:!1})}})).then((function(e){if(Object(h.a)(e))return e.blob=s,r||window.URL.revokeObjectURL(a.url),e})).otherwise((function(e){return Object(h.a)(a)&&window.URL.revokeObjectURL(a.url),e.blob=s,o.a.reject(e)})):void 0},R.fetchImage=function(e){return new R(e).fetchImage({flipY:e.flipY,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})},R.prototype.fetchText=function(){return this.fetch({responseType:"text"})},R.fetchText=function(e){return new R(e).fetchText()},R.prototype.fetchJson=function(){var e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(Object(h.a)(e))return e.then((function(e){if(Object(h.a)(e))return JSON.parse(e)}))},R.fetchJson=function(e){return new R(e).fetchJson()},R.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})},R.fetchXML=function(e){return new R(e).fetchXML()},R.prototype.fetchJsonp=function(e){var t;e=Object(u.a)(e,"callback"),I(this.request);do{t="loadJsonp"+Math.random().toString().substring(2,8)}while(Object(h.a)(window[t]));return function e(t,n,i){var r={};r[n]=i,t.setQueryParameters(r);var a=t.request;a.url=t.url,a.requestFunction=function(){var e=o.a.defer();return window[i]=function(t){e.resolve(t);try{delete window[i]}catch(n){window[i]=void 0}},R._Implementations.loadAndExecuteScript(t.url,i,e),e.promise};var s=E.a.request(a);if(!Object(h.a)(s))return;return s.otherwise((function(r){return a.state!==A.a.FAILED?o.a.reject(r):t.retryOnError(r).then((function(s){return s?(a.state=A.a.UNISSUED,a.deferred=void 0,e(t,n,i)):o.a.reject(r)}))}))}(this,e,t)},R.fetchJsonp=function(e){return new R(e).fetchJsonp(e.callbackParameterName)},R.prototype._makeRequest=function(e){var t=this;I(t.request);var n=t.request;n.url=t.url,n.requestFunction=function(){var i=e.responseType,r=Object(l.a)(e.headers,t.headers),a=e.overrideMimeType,s=e.method,c=e.data,u=o.a.defer(),d=R._Implementations.loadWithXhr(t.url,i,s,c,r,u,a);return Object(h.a)(d)&&Object(h.a)(d.abort)&&(n.cancelFunction=function(){d.abort()}),u.promise};var i=E.a.request(n);if(Object(h.a)(i))return i.then((function(e){return n.cancelFunction=void 0,e})).otherwise((function(i){return n.cancelFunction=void 0,n.state!==A.a.FAILED?o.a.reject(i):t.retryOnError(i).then((function(r){return r?(n.state=A.a.UNISSUED,n.deferred=void 0,t.fetch(e)):o.a.reject(i)}))}))};var j=/^data:(.*?)(;base64)?,(.*)$/;function F(e,t){var n=decodeURIComponent(t);return e?atob(n):n}function N(e,t){for(var n=F(e,t),i=new ArrayBuffer(n.length),r=new Uint8Array(i),o=0;o=300)||m&&0===f.status){var e=f.response,t=f.responseType;if("HEAD"===r||"OPTIONS"===r){var n=f.getAllResponseHeaders().trim().split(/[\r\n]+/),o={};return n.forEach((function(e){var t=e.split(": "),n=t.shift();o[n]=t.join(": ")})),void s.resolve(o)}if(204===f.status)s.resolve();else if(!Object(h.a)(e)||Object(h.a)(i)&&t!==i)if("json"===i&&"string"===typeof e)try{s.resolve(JSON.parse(e))}catch(a){s.reject(a)}else(""===t||"document"===t)&&Object(h.a)(f.responseXML)&&f.responseXML.hasChildNodes()?s.resolve(f.responseXML):""!==t&&"text"!==t||!Object(h.a)(f.responseText)?s.reject(new x.a("Invalid XMLHttpRequest response type.")):s.resolve(f.responseText);else s.resolve(e)}else s.reject(new C.a(f.status,f.response,f.getAllResponseHeaders()))},f.onerror=function(e){s.reject(new C.a)},f.send(o),f}!function(t,i,r,o,a,s,c){var l=n(217).parse(t),u="https:"===l.protocol?n(448):n(258),h=n(460),d={protocol:l.protocol,hostname:l.hostname,port:l.port,path:l.path,query:l.query,method:r,headers:a};u.request(d).on("response",(function(t){if(t.statusCode<200||t.statusCode>=300)s.reject(new C.a(t.statusCode,t,t.headers));else{var n=[];t.on("data",(function(e){n.push(e)})),t.on("end",(function(){var r=e.concat(n);"gzip"===t.headers["content-encoding"]?h.gunzip(r,(function(e,t){e?s.reject(new x.a("Error decompressing response.")):s.resolve(z(t,i))})):s.resolve(z(r,i))}))}})).on("error",(function(e){s.reject(new C.a)})).end()}(t,i,r,0,a,s)}else s.resolve(function(e,t){t=Object(u.a)(t,"");var n=e[1],i=!!e[2],r=e[3];switch(t){case"":case"text":return F(i,r);case"arraybuffer":return N(i,r);case"blob":var o=N(i,r);return new Blob([o],{type:n});case"document":return(new DOMParser).parseFromString(F(i,r),n);case"json":return JSON.parse(F(i,r));default:throw new d.a("Unhandled responseType: "+t)}}(l,i))},R._Implementations.loadAndExecuteScript=function(e,t,n){return Object(b.a)(e,t).otherwise(n.reject)},R._DefaultImplementations={},R._DefaultImplementations.createImage=R._Implementations.createImage,R._DefaultImplementations.loadWithXhr=R._Implementations.loadWithXhr,R._DefaultImplementations.loadAndExecuteScript=R._Implementations.loadAndExecuteScript,R.DEFAULT=Object.freeze(new R({url:"undefined"===typeof document?"":document.location.href.split("?")[0]})),t.a=R}).call(this,n(84).Buffer)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return a})),n.d(t,"d",(function(){return s})),n.d(t,"e",(function(){return c})),n.d(t,"f",(function(){return l})),n.d(t,"g",(function(){return u})),n.d(t,"h",(function(){return h})),n.d(t,"i",(function(){return d})),n.d(t,"l",(function(){return f})),n.d(t,"j",(function(){return p})),n.d(t,"k",(function(){return m})),n.d(t,"m",(function(){return g})),n.d(t,"n",(function(){return v})),n.d(t,"o",(function(){return _})),n.d(t,"p",(function(){return b})),n.d(t,"q",(function(){return y})),n.d(t,"r",(function(){return w})),n.d(t,"s",(function(){return O})),n.d(t,"t",(function(){return C})),n.d(t,"u",(function(){return E})),n.d(t,"v",(function(){return A})),n.d(t,"w",(function(){return x})),n.d(t,"x",(function(){return T})),n.d(t,"y",(function(){return S})),n.d(t,"z",(function(){return D})),n.d(t,"A",(function(){return P})),n.d(t,"B",(function(){return I})),n.d(t,"C",(function(){return M})),n.d(t,"D",(function(){return R})),n.d(t,"E",(function(){return L})),n.d(t,"F",(function(){return j})),n.d(t,"G",(function(){return F})),n.d(t,"H",(function(){return N})),n.d(t,"I",(function(){return z})),n.d(t,"J",(function(){return k})),n.d(t,"K",(function(){return B})),n.d(t,"L",(function(){return H})),n.d(t,"M",(function(){return V})),n.d(t,"N",(function(){return U})),n.d(t,"O",(function(){return W})),n.d(t,"P",(function(){return G})),n.d(t,"Q",(function(){return q})),n.d(t,"R",(function(){return Y})),n.d(t,"S",(function(){return $})),n.d(t,"T",(function(){return X})),n.d(t,"U",(function(){return K})),n.d(t,"V",(function(){return Q})),n.d(t,"W",(function(){return Z})),n.d(t,"Y",(function(){return J})),n.d(t,"Z",(function(){return ee})),n.d(t,"X",(function(){return te})),n.d(t,"ab",(function(){return ne})),n.d(t,"bb",(function(){return ie})),n.d(t,"cb",(function(){return re})),n.d(t,"db",(function(){return oe})),n.d(t,"eb",(function(){return ae})),n.d(t,"fb",(function(){return se})),n.d(t,"gb",(function(){return ce})),n.d(t,"hb",(function(){return le})),n.d(t,"ib",(function(){return ue})),n.d(t,"jb",(function(){return he})),n.d(t,"kb",(function(){return de})),n.d(t,"lb",(function(){return fe})),n.d(t,"mb",(function(){return pe})),n.d(t,"nb",(function(){return me})),n.d(t,"pb",(function(){return ge})),n.d(t,"qb",(function(){return ve})),n.d(t,"rb",(function(){return _e})),n.d(t,"sb",(function(){return be})),n.d(t,"ob",(function(){return ye})),n.d(t,"tb",(function(){return we})),n.d(t,"ub",(function(){return Oe})),n.d(t,"vb",(function(){return Ce})),n.d(t,"wb",(function(){return Ee})),n.d(t,"xb",(function(){return Ae})),n.d(t,"yb",(function(){return xe})),n.d(t,"zb",(function(){return Te})),n.d(t,"Ab",(function(){return Se})),n.d(t,"Bb",(function(){return De})),n.d(t,"Db",(function(){return Ie})),n.d(t,"Fb",(function(){return Me})),n.d(t,"Cb",(function(){return Re})),n.d(t,"Eb",(function(){return Le}));var i=n(5).Classes.getClassNamespace(),r=i+"-table-body-cells",o=i+"-table-body-virtual-client",a=i+"-table-bottom-container",s=i+"-table-cell",c=i+"-table-cell-client",l=i+"-table-cell-ghost",u=i+"-table-cell-interactive",h=i+"-table-cell-ledger-even",d=i+"-table-cell-ledger-odd",f=i+"-table-column-header-tr",p=i+"-table-column-headers",m=i+"-table-column-header-cell",g=i+"-table-column-name",v=i+"-table-column-name-text",_=i+"-table-container",b=i+"-table-dragging",y=i+"-table-focus-region",w=i+"-table-has-interaction-bar",O=i+"-table-has-reorder-handle",C=i+"-table-header",E=i+"-table-header-active",A=i+"-table-header-content",x=i+"-table-header-reorderable",T=i+"-table-header-selected",S=i+"-table-horizontal-cell-divider",D=i+"-table-horizontal-guide",P=i+"-table-interaction-bar",I=i+"-table-last-in-column",M=i+"-table-last-in-row",R=i+"-table-menu",L=i+"-table-no-horizontal-scroll",j=i+"-table-no-rows",F=i+"-table-no-vertical-scroll",N=i+"-table-no-wrap-text",z=i+"-table-null",k=i+"-table-overlay",B=i+"-table-overlay-layer",H=i+"-table-reordering-cursor-overlay",V=i+"-table-popover-whitespace-normal",U=i+"-table-popover-whitespace-pre",W=i+"-table-quadrant",G=i+"-table-quadrant-body-container",q=i+"-table-quadrant-left",Y=i+"-table-quadrant-main",$=i+"-table-quadrant-scroll-container",X=i+"-table-quadrant-stack",K=i+"-table-quadrant-top",Q=i+"-table-quadrant-top-left",Z=i+"-table-region",J=i+"-table-reorder-handle",ee=i+"-table-reorder-handle-target",te=i+"-table-reordering",ne=i+"-table-resize-guides",ie=i+"-table-resize-handle",re=i+"-table-resize-handle-target",oe=i+"-table-resize-horizontal",ae=i+"-table-resize-sensor",se=i+"-table-resize-sensor-expand",ce=i+"-table-resize-sensor-shrink",le=i+"-table-resize-vertical",ue=i+"-table-row-headers",he=i+"-table-row-headers-cells-container",de=i+"-table-row-name",fe=i+"-table-row-name-text",pe=i+"-table-selection-enabled",me=i+"-table-selection-region",ge=i+"-table-th-menu",ve=i+"-table-th-menu-container",_e=i+"-table-th-menu-container-background",be=i+"-table-th-menu-open",ye=i+"-table-thead",we=i+"-table-top-container",Oe=i+"-table-truncated-cell",Ce=i+"-table-truncated-format",Ee=i+"-table-truncated-format-text",Ae=i+"-table-truncated-popover",xe=i+"-table-truncated-popover-target",Te=i+"-table-truncated-text",Se=i+"-table-truncated-value",De=i+"-table-vertical-guide";function Pe(e,t){if(null!=t)return"number"===typeof t?""+e+t:0===t.indexOf(e)?t:""+e+t}function Ie(e){return Pe(i+"-table-col-",e)}function Me(e){return Pe(i+"-table-row-",e)}function Re(e){return Pe(i+"-table-cell-col-",e)}function Le(e){return Pe(i+"-table-cell-row-",e)}},function(e,t,n){"use strict";n.d(t,"C",(function(){return At})),n.d(t,"b",(function(){return Mt})),n.d(t,"c",(function(){return R})),n.d(t,"d",(function(){return Hf})),n.d(t,"E",(function(){return o.a})),n.d(t,"h",(function(){return W})),n.d(t,"k",(function(){return Lt})),n.d(t,"l",(function(){return qO})),n.d(t,"o",(function(){return f_})),n.d(t,"p",(function(){return hr})),n.d(t,"q",(function(){return d})),n.d(t,"r",(function(){return JC})),n.d(t,"s",(function(){return SE})),n.d(t,"t",(function(){return bA})),n.d(t,"u",(function(){return Se})),n.d(t,"v",(function(){return vS})),n.d(t,"w",(function(){return RT})),n.d(t,"B",(function(){return Kc})),n.d(t,"e",(function(){return wI})),n.d(t,"f",(function(){return ZD})),n.d(t,"g",(function(){return S1})),n.d(t,"i",(function(){return YF})),n.d(t,"j",(function(){return i7})),n.d(t,"x",(function(){return qP})),n.d(t,"y",(function(){return $P})),n.d(t,"a",(function(){return Aie})),n.d(t,"D",(function(){return toe})),n.d(t,"m",(function(){return zae})),n.d(t,"n",(function(){return xae})),n.d(t,"z",(function(){return mre})),n.d(t,"A",(function(){return tOe}));n(182);var i=n(4),r=n(1),o=n(0),a=n(3);function s(e){void 0==e&&(e=(new Date).getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,this.init_genrand(e)}s.prototype.init_genrand=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti>>30;this.mt[this.mti]=(1812433253*((4294901760&e)>>>16)<<16)+1812433253*(65535&e)+this.mti,this.mt[this.mti]>>>=0}},s.prototype.genrand_int32=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti==this.N+1&&this.init_genrand(5489),n=0;n>>1^t[1&e];for(;n>>1^t[1&e];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[1&e],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,(e^=e>>>18)>>>0},s.prototype.random=function(){return this.genrand_int32()*(1/4294967296)};var c=s,l={EPSILON1:.1,EPSILON2:.01,EPSILON3:.001,EPSILON4:1e-4,EPSILON5:1e-5,EPSILON6:1e-6,EPSILON7:1e-7,EPSILON8:1e-8,EPSILON9:1e-9,EPSILON10:1e-10,EPSILON11:1e-11,EPSILON12:1e-12,EPSILON13:1e-13,EPSILON14:1e-14,EPSILON15:1e-15,EPSILON16:1e-16,EPSILON17:1e-17,EPSILON18:1e-18,EPSILON19:1e-19,EPSILON20:1e-20,EPSILON21:1e-21,GRAVITATIONALPARAMETER:3986004418e5,SOLAR_RADIUS:6955e5,LUNAR_RADIUS:1737400,SIXTY_FOUR_KILOBYTES:65536,FOUR_GIGABYTES:4294967296};l.sign=Object(r.a)(Math.sign,(function(e){return 0===(e=+e)||e!==e?e:e>0?1:-1})),l.signNotZero=function(e){return e<0?-1:1},l.toSNorm=function(e,t){return t=Object(r.a)(t,255),Math.round((.5*l.clamp(e,-1,1)+.5)*t)},l.fromSNorm=function(e,t){return t=Object(r.a)(t,255),l.clamp(e,0,t)/t*2-1},l.normalize=function(e,t,n){return 0===(n=Math.max(n-t,0))?0:l.clamp((e-t)/n,0,1)},l.sinh=Object(r.a)(Math.sinh,(function(e){return(Math.exp(e)-Math.exp(-e))/2})),l.cosh=Object(r.a)(Math.cosh,(function(e){return(Math.exp(e)+Math.exp(-e))/2})),l.lerp=function(e,t,n){return(1-n)*e+n*t},l.PI=Math.PI,l.ONE_OVER_PI=1/Math.PI,l.PI_OVER_TWO=Math.PI/2,l.PI_OVER_THREE=Math.PI/3,l.PI_OVER_FOUR=Math.PI/4,l.PI_OVER_SIX=Math.PI/6,l.THREE_PI_OVER_TWO=3*Math.PI/2,l.TWO_PI=2*Math.PI,l.ONE_OVER_TWO_PI=1/(2*Math.PI),l.RADIANS_PER_DEGREE=Math.PI/180,l.DEGREES_PER_RADIAN=180/Math.PI,l.RADIANS_PER_ARCSECOND=l.RADIANS_PER_DEGREE/3600,l.toRadians=function(e){if(!Object(o.a)(e))throw new a.a("degrees is required.");return e*l.RADIANS_PER_DEGREE},l.toDegrees=function(e){if(!Object(o.a)(e))throw new a.a("radians is required.");return e*l.DEGREES_PER_RADIAN},l.convertLongitudeRange=function(e){if(!Object(o.a)(e))throw new a.a("angle is required.");var t=l.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n},l.clampToLatitudeRange=function(e){if(!Object(o.a)(e))throw new a.a("angle is required.");return l.clamp(e,-1*l.PI_OVER_TWO,l.PI_OVER_TWO)},l.negativePiToPi=function(e){if(!Object(o.a)(e))throw new a.a("angle is required.");return l.zeroToTwoPi(e+l.PI)-l.PI},l.zeroToTwoPi=function(e){if(!Object(o.a)(e))throw new a.a("angle is required.");var t=l.mod(e,l.TWO_PI);return Math.abs(t)l.EPSILON14?l.TWO_PI:t},l.mod=function(e,t){if(!Object(o.a)(e))throw new a.a("m is required.");if(!Object(o.a)(t))throw new a.a("n is required.");return(e%t+t)%t},l.equalsEpsilon=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("left is required.");if(!Object(o.a)(t))throw new a.a("right is required.");n=Object(r.a)(n,0),i=Object(r.a)(i,n);var s=Math.abs(e-t);return s<=i||s<=n*Math.max(Math.abs(e),Math.abs(t))},l.lessThan=function(e,t,n){if(!Object(o.a)(e))throw new a.a("first is required.");if(!Object(o.a)(t))throw new a.a("second is required.");if(!Object(o.a)(n))throw new a.a("relativeEpsilon is required.");return e-t<-n},l.lessThanOrEquals=function(e,t,n){if(!Object(o.a)(e))throw new a.a("first is required.");if(!Object(o.a)(t))throw new a.a("second is required.");if(!Object(o.a)(n))throw new a.a("relativeEpsilon is required.");return e-tn},l.greaterThanOrEquals=function(e,t,n){if(!Object(o.a)(e))throw new a.a("first is required.");if(!Object(o.a)(t))throw new a.a("second is required.");if(!Object(o.a)(n))throw new a.a("relativeEpsilon is required.");return e-t>-n};var u=[1];l.factorial=function(e){if("number"!==typeof e||e<0)throw new a.a("A number greater than or equal to 0 is required.");var t=u.length;if(e>=t)for(var n=u[t-1],i=t;i<=e;i++){var r=n*i;u.push(r),n=r}return u[e]},l.incrementWrap=function(e,t,n){if(n=Object(r.a)(n,0),!Object(o.a)(e))throw new a.a("n is required.");if(t<=n)throw new a.a("maximumValue must be greater than minimumValue.");return++e>t&&(e=n),e},l.isPowerOfTwo=function(e){if("number"!==typeof e||e<0)throw new a.a("A number greater than or equal to 0 is required.");return 0!==e&&0===(e&e-1)},l.nextPowerOfTwo=function(e){if("number"!==typeof e||e<0)throw new a.a("A number greater than or equal to 0 is required.");return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e},l.clamp=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("min is required.");if(!Object(o.a)(n))throw new a.a("max is required.");return en?n:e};var h=new c;l.setRandomNumberSeed=function(e){if(!Object(o.a)(e))throw new a.a("seed is required.");h=new c(e)},l.nextRandomNumber=function(){return h.random()},l.randomBetween=function(e,t){return l.nextRandomNumber()*(t-e)+e},l.acosClamped=function(e){if(!Object(o.a)(e))throw new a.a("value is required.");return Math.acos(l.clamp(e,-1,1))},l.asinClamped=function(e){if(!Object(o.a)(e))throw new a.a("value is required.");return Math.asin(l.clamp(e,-1,1))},l.chordLength=function(e,t){if(!Object(o.a)(e))throw new a.a("angle is required.");if(!Object(o.a)(t))throw new a.a("radius is required.");return 2*t*Math.sin(.5*e)},l.logBase=function(e,t){if(!Object(o.a)(e))throw new a.a("number is required.");if(!Object(o.a)(t))throw new a.a("base is required.");return Math.log(e)/Math.log(t)},l.cbrt=Object(r.a)(Math.cbrt,(function(e){var t=Math.pow(Math.abs(e),1/3);return e<0?-t:t})),l.log2=Object(r.a)(Math.log2,(function(e){return Math.log(e)*Math.LOG2E})),l.fog=function(e,t){var n=e*t;return 1-Math.exp(-n*n)},l.fastApproximateAtan=function(e){return i.a.typeOf.number("x",e),e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)},l.fastApproximateAtan2=function(e,t){var n,r;i.a.typeOf.number("x",e),i.a.typeOf.number("y",t);var o=Math.abs(e);n=Math.abs(t),r=Math.max(o,n);var s=(n=Math.min(o,n))/r;if(isNaN(s))throw new a.a("either x or y must be nonzero");return o=l.fastApproximateAtan(s),o=Math.abs(t)>Math.abs(e)?l.PI_OVER_TWO-o:o,o=e<0?l.PI-o:o,o=t<0?-o:o};var d=l;function f(e,t,n){this.x=Object(r.a)(e,0),this.y=Object(r.a)(t,0),this.z=Object(r.a)(n,0)}f.fromSpherical=function(e,t){i.a.typeOf.object("spherical",e),Object(o.a)(t)||(t=new f);var n=e.clock,a=e.cone,s=Object(r.a)(e.magnitude,1),c=s*Math.sin(a);return t.x=c*Math.cos(n),t.y=c*Math.sin(n),t.z=s*Math.cos(a),t},f.fromElements=function(e,t,n,i){return Object(o.a)(i)?(i.x=e,i.y=t,i.z=n,i):new f(e,t,n)},f.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new f(e.x,e.y,e.z)},f.fromCartesian4=f.clone,f.packedLength=3,f.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t},f.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new f),n.x=e[t++],n.y=e[t++],n.z=e[t],n},f.packArray=function(e,t){i.a.defined("array",e);var n=e.length,r=3*n;if(Object(o.a)(t)){if(!Array.isArray(t)&&t.length!==r)throw new a.a("If result is a typed array, it must have exactly array.length * 3 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var s=0;sd.EPSILON12);return Object(o.a)(r)?(r.x=s*S,r.y=c*D,r.z=l*P,r):new O(s*S,c*D,l*P)};function x(e,t,n){this.longitude=Object(r.a)(e,0),this.latitude=Object(r.a)(t,0),this.height=Object(r.a)(n,0)}x.fromRadians=function(e,t,n,a){return i.a.typeOf.number("longitude",e),i.a.typeOf.number("latitude",t),n=Object(r.a)(n,0),Object(o.a)(a)?(a.longitude=e,a.latitude=t,a.height=n,a):new x(e,t,n)},x.fromDegrees=function(e,t,n,r){return i.a.typeOf.number("longitude",e),i.a.typeOf.number("latitude",t),e=d.toRadians(e),t=d.toRadians(t),x.fromRadians(e,t,n,r)};var T=new O,S=new O,D=new O,P=new O(1/6378137,1/6378137,1/6356752.314245179),I=new O(1/40680631590769,1/40680631590769,1/40408299984661.445),M=d.EPSILON1;x.fromCartesian=function(e,t,n){var i=Object(o.a)(t)?t.oneOverRadii:P,r=Object(o.a)(t)?t.oneOverRadiiSquared:I,a=Object(o.a)(t)?t._centerToleranceSquared:M,s=A(e,i,r,a,S);if(Object(o.a)(s)){var c=O.multiplyComponents(s,r,T);c=O.normalize(c,c);var l=O.subtract(e,s,D),u=Math.atan2(c.y,c.x),h=Math.asin(c.z),f=d.sign(O.dot(l,e))*O.magnitude(l);return Object(o.a)(n)?(n.longitude=u,n.latitude=h,n.height=f,n):new x(u,h,f)}},x.toCartesian=function(e,t,n){return i.a.defined("cartographic",e),O.fromRadians(e.longitude,e.latitude,e.height,t,n)},x.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new x(e.longitude,e.latitude,e.height)},x.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height},x.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n},x.ZERO=Object.freeze(new x(0,0,0)),x.prototype.clone=function(e){return x.clone(this,e)},x.prototype.equals=function(e){return x.equals(this,e)},x.prototype.equalsEpsilon=function(e,t){return x.equalsEpsilon(this,e,t)},x.prototype.toString=function(){return"("+this.longitude+", "+this.latitude+", "+this.height+")"};var R=x;function L(e,t,n,o){t=Object(r.a)(t,0),n=Object(r.a)(n,0),o=Object(r.a)(o,0),i.a.typeOf.number.greaterThanOrEquals("x",t,0),i.a.typeOf.number.greaterThanOrEquals("y",n,0),i.a.typeOf.number.greaterThanOrEquals("z",o,0),e._radii=new O(t,n,o),e._radiiSquared=new O(t*t,n*n,o*o),e._radiiToTheFourth=new O(t*t*t*t,n*n*n*n,o*o*o*o),e._oneOverRadii=new O(0===t?0:1/t,0===n?0:1/n,0===o?0:1/o),e._oneOverRadiiSquared=new O(0===t?0:1/(t*t),0===n?0:1/(n*n),0===o?0:1/(o*o)),e._minimumRadius=Math.min(t,n,o),e._maximumRadius=Math.max(t,n,o),e._centerToleranceSquared=d.EPSILON1,0!==e._radiiSquared.z&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function j(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,L(this,e,t,n)}Object.defineProperties(j.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}}),j.clone=function(e,t){if(Object(o.a)(e)){var n=e._radii;return Object(o.a)(t)?(O.clone(n,t._radii),O.clone(e._radiiSquared,t._radiiSquared),O.clone(e._radiiToTheFourth,t._radiiToTheFourth),O.clone(e._oneOverRadii,t._oneOverRadii),O.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new j(n.x,n.y,n.z)}},j.fromCartesian3=function(e,t){return Object(o.a)(t)||(t=new j),Object(o.a)(e)?(L(t,e.x,e.y,e.z),t):t},j.WGS84=Object.freeze(new j(6378137,6378137,6356752.314245179)),j.UNIT_SPHERE=Object.freeze(new j(1,1,1)),j.MOON=Object.freeze(new j(d.LUNAR_RADIUS,d.LUNAR_RADIUS,d.LUNAR_RADIUS)),j.prototype.clone=function(e){return j.clone(this,e)},j.packedLength=O.packedLength,j.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),O.pack(e._radii,t,n),t},j.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var o=O.unpack(e,t);return j.fromCartesian3(o,n)},j.prototype.geocentricSurfaceNormal=O.normalize,j.prototype.geodeticSurfaceNormalCartographic=function(e,t){i.a.typeOf.object("cartographic",e);var n=e.longitude,r=e.latitude,a=Math.cos(r),s=a*Math.cos(n),c=a*Math.sin(n),l=Math.sin(r);return Object(o.a)(t)||(t=new O),t.x=s,t.y=c,t.z=l,O.normalize(t,t)},j.prototype.geodeticSurfaceNormal=function(e,t){if(!O.equalsEpsilon(e,O.ZERO,d.EPSILON14))return Object(o.a)(t)||(t=new O),t=O.multiplyComponents(e,this._oneOverRadiiSquared,t),O.normalize(t,t)};var F=new O,N=new O;j.prototype.cartographicToCartesian=function(e,t){var n=F,i=N;this.geodeticSurfaceNormalCartographic(e,n),O.multiplyComponents(this._radiiSquared,n,i);var r=Math.sqrt(O.dot(n,i));return O.divideByScalar(i,r,i),O.multiplyByScalar(n,e.height,n),Object(o.a)(t)||(t=new O),O.add(i,n,t)},j.prototype.cartographicArrayToCartesianArray=function(e,t){i.a.defined("cartographics",e);var n=e.length;Object(o.a)(t)?t.length=n:t=new Array(n);for(var r=0;r=this._radii.z-t))return n};var H=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],V=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function U(e,t,n){i.a.typeOf.number("a",e),i.a.typeOf.number("b",t),i.a.typeOf.func("func",n);for(var r=.5*(t+e),o=.5*(t-e),a=0,s=0;s<5;s++){var c=o*H[s];a+=V[s]*(n(r+c)+n(r-c))}return a*=o}j.prototype.surfaceArea=function(e){i.a.typeOf.object("rectangle",e);for(var t=e.west,n=e.east,r=e.south,o=e.north;ni&&(r=o,i=a)}var s=1,c=0,l=J[r],u=ee[r];if(Math.abs(e[X.getElementIndex(u,l)])>n){var h,f=(e[X.getElementIndex(u,u)]-e[X.getElementIndex(l,l)])/2/e[X.getElementIndex(u,l)];c=(h=f<0?-1/(-f+Math.sqrt(1+f*f)):1/(f+Math.sqrt(1+f*f)))*(s=1/Math.sqrt(1+h*h))}return(t=X.clone(X.IDENTITY,t))[X.getElementIndex(l,l)]=t[X.getElementIndex(u,u)]=s,t[X.getElementIndex(u,l)]=c,t[X.getElementIndex(l,u)]=-c,t}var ie=new X,re=new X;X.computeEigenDecomposition=function(e,t){i.a.typeOf.object("matrix",e);var n=d.EPSILON20,r=0,a=0;Object(o.a)(t)||(t={});for(var s=t.unitary=X.clone(X.IDENTITY,t.unitary),c=t.diagonal=X.clone(e,t.diagonal),l=n*function(e){for(var t=0,n=0;n<9;++n){var i=e[n];t+=i*i}return Math.sqrt(t)}(c);a<10&&te(c)>l;)ne(c,ie),X.transpose(ie,re),X.multiply(c,ie,c),X.multiply(re,c,c),X.multiply(s,ie,s),++r>2&&(++a,r=0);return t},X.abs=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t},X.determinant=function(e){i.a.typeOf.object("matrix",e);var t=e[0],n=e[3],r=e[6],o=e[1],a=e[4],s=e[7],c=e[2],l=e[5],u=e[8];return t*(a*u-l*s)+o*(l*r-n*u)+c*(n*s-a*r)},X.inverse=function(e,t){i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t);var n=e[0],r=e[1],o=e[2],s=e[3],c=e[4],l=e[5],u=e[6],h=e[7],f=e[8],p=X.determinant(e);if(Math.abs(p)<=d.EPSILON15)throw new a.a("matrix is not invertible");t[0]=c*f-h*l,t[1]=h*o-r*f,t[2]=r*l-c*o,t[3]=u*l-s*f,t[4]=n*f-u*o,t[5]=s*o-n*l,t[6]=s*h-u*c,t[7]=u*r-n*h,t[8]=n*c-s*r;var m=1/p;return X.multiplyByScalar(t,m,t)},X.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]},X.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n},X.IDENTITY=Object.freeze(new X(1,0,0,0,1,0,0,0,1)),X.ZERO=Object.freeze(new X(0,0,0,0,0,0,0,0,0)),X.COLUMN0ROW0=0,X.COLUMN0ROW1=1,X.COLUMN0ROW2=2,X.COLUMN1ROW0=3,X.COLUMN1ROW1=4,X.COLUMN1ROW2=5,X.COLUMN2ROW0=6,X.COLUMN2ROW1=7,X.COLUMN2ROW2=8,Object.defineProperties(X.prototype,{length:{get:function(){return X.packedLength}}}),X.prototype.clone=function(e){return X.clone(this,e)},X.prototype.equals=function(e){return X.equals(this,e)},X.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]},X.prototype.equalsEpsilon=function(e,t){return X.equalsEpsilon(this,e,t)},X.prototype.toString=function(){return"("+this[0]+", "+this[3]+", "+this[6]+")\n("+this[1]+", "+this[4]+", "+this[7]+")\n("+this[2]+", "+this[5]+", "+this[8]+")"};var oe=X;function ae(e,t,n,i){this.x=Object(r.a)(e,0),this.y=Object(r.a)(t,0),this.z=Object(r.a)(n,0),this.w=Object(r.a)(i,0)}ae.fromElements=function(e,t,n,i,r){return Object(o.a)(r)?(r.x=e,r.y=t,r.z=n,r.w=i,r):new ae(e,t,n,i)},ae.fromColor=function(e,t){return i.a.typeOf.object("color",e),Object(o.a)(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new ae(e.red,e.green,e.blue,e.alpha)},ae.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new ae(e.x,e.y,e.z,e.w)},ae.packedLength=4,ae.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t},ae.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new ae),n.x=e[t++],n.y=e[t++],n.z=e[t++],n.w=e[t],n},ae.packArray=function(e,t){i.a.defined("array",e);var n=e.length,r=4*n;if(Object(o.a)(t)){if(!Array.isArray(t)&&t.length!==r)throw new a.a("If result is a typed array, it must have exactly array.length * 4 elements");t.length!==r&&(t.length=r)}else t=new Array(r);for(var s=0;s=38)return r<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY;var o=r*e.x*(1/256);return o+=r*e.y*(1/65536),(o+=r*e.z*(1/16777216))*Math.pow(10,n)};var he=ae,de=n(13);function fe(e,t,n,i,o,a,s,c,l,u,h,d,f,p,m,g){this[0]=Object(r.a)(e,0),this[1]=Object(r.a)(o,0),this[2]=Object(r.a)(l,0),this[3]=Object(r.a)(f,0),this[4]=Object(r.a)(t,0),this[5]=Object(r.a)(a,0),this[6]=Object(r.a)(u,0),this[7]=Object(r.a)(p,0),this[8]=Object(r.a)(n,0),this[9]=Object(r.a)(s,0),this[10]=Object(r.a)(h,0),this[11]=Object(r.a)(m,0),this[12]=Object(r.a)(i,0),this[13]=Object(r.a)(c,0),this[14]=Object(r.a)(d,0),this[15]=Object(r.a)(g,0)}fe.packedLength=16,fe.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t},fe.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new fe),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n},fe.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):new fe(e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15])},fe.fromArray=fe.unpack,fe.fromColumnMajorArray=function(e,t){return i.a.defined("values",e),fe.clone(e,t)},fe.fromRowMajorArray=function(e,t){return i.a.defined("values",e),Object(o.a)(t)?(t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t):new fe(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])},fe.fromRotationTranslation=function(e,t,n){return i.a.typeOf.object("rotation",e),t=Object(r.a)(t,O.ZERO),Object(o.a)(n)?(n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=0,n[4]=e[3],n[5]=e[4],n[6]=e[5],n[7]=0,n[8]=e[6],n[9]=e[7],n[10]=e[8],n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,n):new fe(e[0],e[3],e[6],t.x,e[1],e[4],e[7],t.y,e[2],e[5],e[8],t.z,0,0,0,1)},fe.fromTranslationQuaternionRotationScale=function(e,t,n,r){i.a.typeOf.object("translation",e),i.a.typeOf.object("rotation",t),i.a.typeOf.object("scale",n),Object(o.a)(r)||(r=new fe);var a=n.x,s=n.y,c=n.z,l=t.x*t.x,u=t.x*t.y,h=t.x*t.z,d=t.x*t.w,f=t.y*t.y,p=t.y*t.z,m=t.y*t.w,g=t.z*t.z,v=t.z*t.w,_=t.w*t.w,b=l-f-g+_,y=2*(u-v),w=2*(h+m),O=2*(u+v),C=-l+f-g+_,E=2*(p-d),A=2*(h-m),x=2*(p+d),T=-l-f+g+_;return r[0]=b*a,r[1]=O*a,r[2]=A*a,r[3]=0,r[4]=y*s,r[5]=C*s,r[6]=x*s,r[7]=0,r[8]=w*c,r[9]=E*c,r[10]=T*c,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,r},fe.fromTranslationRotationScale=function(e,t){return i.a.typeOf.object("translationRotationScale",e),fe.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t)},fe.fromTranslation=function(e,t){return i.a.typeOf.object("translation",e),fe.fromRotationTranslation(oe.IDENTITY,e,t)},fe.fromScale=function(e,t){return i.a.typeOf.object("scale",e),Object(o.a)(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e.y,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e.z,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new fe(e.x,0,0,0,0,e.y,0,0,0,0,e.z,0,0,0,0,1)},fe.fromUniformScale=function(e,t){return i.a.typeOf.number("scale",e),Object(o.a)(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new fe(e,0,0,0,0,e,0,0,0,0,e,0,0,0,0,1)};var pe=new O,me=new O,ge=new O;fe.fromCamera=function(e,t){i.a.typeOf.object("camera",e);var n=e.position,r=e.direction,a=e.up;i.a.typeOf.object("camera.position",n),i.a.typeOf.object("camera.direction",r),i.a.typeOf.object("camera.up",a),O.normalize(r,pe),O.normalize(O.cross(pe,a,me),me),O.normalize(O.cross(me,pe,ge),ge);var s=me.x,c=me.y,l=me.z,u=pe.x,h=pe.y,d=pe.z,f=ge.x,p=ge.y,m=ge.z,g=n.x,v=n.y,_=n.z,b=s*-g+c*-v+l*-_,y=f*-g+p*-v+m*-_,w=u*g+h*v+d*_;return Object(o.a)(t)?(t[0]=s,t[1]=f,t[2]=-u,t[3]=0,t[4]=c,t[5]=p,t[6]=-h,t[7]=0,t[8]=l,t[9]=m,t[10]=-d,t[11]=0,t[12]=b,t[13]=y,t[14]=w,t[15]=1,t):new fe(s,c,l,b,f,p,m,y,-u,-h,-d,w,0,0,0,1)},fe.computePerspectiveFieldOfView=function(e,t,n,r,o){i.a.typeOf.number.greaterThan("fovY",e,0),i.a.typeOf.number.lessThan("fovY",e,Math.PI),i.a.typeOf.number.greaterThan("near",n,0),i.a.typeOf.number.greaterThan("far",r,0),i.a.typeOf.object("result",o);var a=1/Math.tan(.5*e),s=a/t,c=(r+n)/(n-r),l=2*r*n/(n-r);return o[0]=s,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=a,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c,o[11]=-1,o[12]=0,o[13]=0,o[14]=l,o[15]=0,o},fe.computeOrthographicOffCenter=function(e,t,n,r,o,a,s){i.a.typeOf.number("left",e),i.a.typeOf.number("right",t),i.a.typeOf.number("bottom",n),i.a.typeOf.number("top",r),i.a.typeOf.number("near",o),i.a.typeOf.number("far",a),i.a.typeOf.object("result",s);var c=1/(t-e),l=1/(r-n),u=1/(a-o),h=-(t+e)*c,d=-(r+n)*l,f=-(a+o)*u;return c*=2,l*=2,u*=-2,s[0]=c,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=l,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=u,s[11]=0,s[12]=h,s[13]=d,s[14]=f,s[15]=1,s},fe.computePerspectiveOffCenter=function(e,t,n,r,o,a,s){i.a.typeOf.number("left",e),i.a.typeOf.number("right",t),i.a.typeOf.number("bottom",n),i.a.typeOf.number("top",r),i.a.typeOf.number("near",o),i.a.typeOf.number("far",a),i.a.typeOf.object("result",s);var c=2*o/(t-e),l=2*o/(r-n),u=(t+e)/(t-e),h=(r+n)/(r-n),d=-(a+o)/(a-o),f=-2*a*o/(a-o);return s[0]=c,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=l,s[6]=0,s[7]=0,s[8]=u,s[9]=h,s[10]=d,s[11]=-1,s[12]=0,s[13]=0,s[14]=f,s[15]=0,s},fe.computeInfinitePerspectiveOffCenter=function(e,t,n,r,o,a){i.a.typeOf.number("left",e),i.a.typeOf.number("right",t),i.a.typeOf.number("bottom",n),i.a.typeOf.number("top",r),i.a.typeOf.number("near",o),i.a.typeOf.object("result",a);var s=2*o/(t-e),c=2*o/(r-n),l=(t+e)/(t-e),u=(r+n)/(r-n),h=-2*o;return a[0]=s,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=c,a[6]=0,a[7]=0,a[8]=l,a[9]=u,a[10]=-1,a[11]=-1,a[12]=0,a[13]=0,a[14]=h,a[15]=0,a},fe.computeViewportTransformation=function(e,t,n,i){Object(o.a)(i)||(i=new fe),e=Object(r.a)(e,r.a.EMPTY_OBJECT);var a=Object(r.a)(e.x,0),s=Object(r.a)(e.y,0),c=Object(r.a)(e.width,0),l=Object(r.a)(e.height,0);t=Object(r.a)(t,0);var u=.5*c,h=.5*l,d=.5*((n=Object(r.a)(n,1))-t),f=u,p=h,m=d,g=a+u,v=s+h,_=t+d;return i[0]=f,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=p,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=m,i[11]=0,i[12]=g,i[13]=v,i[14]=_,i[15]=1,i},fe.computeView=function(e,t,n,r,o){return i.a.typeOf.object("position",e),i.a.typeOf.object("direction",t),i.a.typeOf.object("up",n),i.a.typeOf.object("right",r),i.a.typeOf.object("result",o),o[0]=r.x,o[1]=n.x,o[2]=-t.x,o[3]=0,o[4]=r.y,o[5]=n.y,o[6]=-t.y,o[7]=0,o[8]=r.z,o[9]=n.z,o[10]=-t.z,o[11]=0,o[12]=-O.dot(r,e),o[13]=-O.dot(n,e),o[14]=O.dot(t,e),o[15]=1,o},fe.toArray=function(e,t){return i.a.typeOf.object("matrix",e),Object(o.a)(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]},fe.getElementIndex=function(e,t){return i.a.typeOf.number.greaterThanOrEquals("row",t,0),i.a.typeOf.number.lessThanOrEquals("row",t,3),i.a.typeOf.number.greaterThanOrEquals("column",e,0),i.a.typeOf.number.lessThanOrEquals("column",e,3),4*e+t},fe.getColumn=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,3),i.a.typeOf.object("result",n);var r=4*t,o=e[r],a=e[r+1],s=e[r+2],c=e[r+3];return n.x=o,n.y=a,n.z=s,n.w=c,n},fe.setColumn=function(e,t,n,r){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,3),i.a.typeOf.object("cartesian",n),i.a.typeOf.object("result",r);var o=4*t;return(r=fe.clone(e,r))[o]=n.x,r[o+1]=n.y,r[o+2]=n.z,r[o+3]=n.w,r},fe.setTranslation=function(e,t,n){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("translation",t),i.a.typeOf.object("result",n),n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=e[15],n};var ve=new O;fe.setScale=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("scale",t),i.a.typeOf.object("result",n);var r=fe.getScale(e,ve),o=O.divideComponents(t,r,ve);return fe.multiplyByScale(e,o,n)},fe.getRow=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,3),i.a.typeOf.object("result",n);var r=e[t],o=e[t+4],a=e[t+8],s=e[t+12];return n.x=r,n.y=o,n.z=a,n.w=s,n},fe.setRow=function(e,t,n,r){return i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,3),i.a.typeOf.object("cartesian",n),i.a.typeOf.object("result",r),(r=fe.clone(e,r))[t]=n.x,r[t+4]=n.y,r[t+8]=n.z,r[t+12]=n.w,r};var _e=new O;fe.getScale=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t.x=O.magnitude(O.fromElements(e[0],e[1],e[2],_e)),t.y=O.magnitude(O.fromElements(e[4],e[5],e[6],_e)),t.z=O.magnitude(O.fromElements(e[8],e[9],e[10],_e)),t};var be=new O;fe.getMaximumScale=function(e){return fe.getScale(e,be),O.maximumComponent(be)},fe.multiply=function(e,t,n){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n);var r=e[0],o=e[1],a=e[2],s=e[3],c=e[4],l=e[5],u=e[6],h=e[7],d=e[8],f=e[9],p=e[10],m=e[11],g=e[12],v=e[13],_=e[14],b=e[15],y=t[0],w=t[1],O=t[2],C=t[3],E=t[4],A=t[5],x=t[6],T=t[7],S=t[8],D=t[9],P=t[10],I=t[11],M=t[12],R=t[13],L=t[14],j=t[15],F=r*y+c*w+d*O+g*C,N=o*y+l*w+f*O+v*C,z=a*y+u*w+p*O+_*C,k=s*y+h*w+m*O+b*C,B=r*E+c*A+d*x+g*T,H=o*E+l*A+f*x+v*T,V=a*E+u*A+p*x+_*T,U=s*E+h*A+m*x+b*T,W=r*S+c*D+d*P+g*I,G=o*S+l*D+f*P+v*I,q=a*S+u*D+p*P+_*I,Y=s*S+h*D+m*P+b*I,$=r*M+c*R+d*L+g*j,X=o*M+l*R+f*L+v*j,K=a*M+u*R+p*L+_*j,Q=s*M+h*R+m*L+b*j;return n[0]=F,n[1]=N,n[2]=z,n[3]=k,n[4]=B,n[5]=H,n[6]=V,n[7]=U,n[8]=W,n[9]=G,n[10]=q,n[11]=Y,n[12]=$,n[13]=X,n[14]=K,n[15]=Q,n},fe.add=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n[9]=e[9]+t[9],n[10]=e[10]+t[10],n[11]=e[11]+t[11],n[12]=e[12]+t[12],n[13]=e[13]+t[13],n[14]=e[14]+t[14],n[15]=e[15]+t[15],n},fe.subtract=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n[9]=e[9]-t[9],n[10]=e[10]-t[10],n[11]=e[11]-t[11],n[12]=e[12]-t[12],n[13]=e[13]-t[13],n[14]=e[14]-t[14],n[15]=e[15]-t[15],n},fe.multiplyTransformation=function(e,t,n){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n);var r=e[0],o=e[1],a=e[2],s=e[4],c=e[5],l=e[6],u=e[8],h=e[9],d=e[10],f=e[12],p=e[13],m=e[14],g=t[0],v=t[1],_=t[2],b=t[4],y=t[5],w=t[6],O=t[8],C=t[9],E=t[10],A=t[12],x=t[13],T=t[14],S=r*g+s*v+u*_,D=o*g+c*v+h*_,P=a*g+l*v+d*_,I=r*b+s*y+u*w,M=o*b+c*y+h*w,R=a*b+l*y+d*w,L=r*O+s*C+u*E,j=o*O+c*C+h*E,F=a*O+l*C+d*E,N=r*A+s*x+u*T+f,z=o*A+c*x+h*T+p,k=a*A+l*x+d*T+m;return n[0]=S,n[1]=D,n[2]=P,n[3]=0,n[4]=I,n[5]=M,n[6]=R,n[7]=0,n[8]=L,n[9]=j,n[10]=F,n[11]=0,n[12]=N,n[13]=z,n[14]=k,n[15]=1,n},fe.multiplyByMatrix3=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("rotation",t),i.a.typeOf.object("result",n);var r=e[0],o=e[1],a=e[2],s=e[4],c=e[5],l=e[6],u=e[8],h=e[9],d=e[10],f=t[0],p=t[1],m=t[2],g=t[3],v=t[4],_=t[5],b=t[6],y=t[7],w=t[8],O=r*f+s*p+u*m,C=o*f+c*p+h*m,E=a*f+l*p+d*m,A=r*g+s*v+u*_,x=o*g+c*v+h*_,T=a*g+l*v+d*_,S=r*b+s*y+u*w,D=o*b+c*y+h*w,P=a*b+l*y+d*w;return n[0]=O,n[1]=C,n[2]=E,n[3]=0,n[4]=A,n[5]=x,n[6]=T,n[7]=0,n[8]=S,n[9]=D,n[10]=P,n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n},fe.multiplyByTranslation=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("translation",t),i.a.typeOf.object("result",n);var r=t.x,o=t.y,a=t.z,s=r*e[0]+o*e[4]+a*e[8]+e[12],c=r*e[1]+o*e[5]+a*e[9]+e[13],l=r*e[2]+o*e[6]+a*e[10]+e[14];return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=s,n[13]=c,n[14]=l,n[15]=e[15],n};var ye=new O;fe.multiplyByUniformScale=function(e,t,n){return i.a.typeOf.object("matrix",e),i.a.typeOf.number("scale",t),i.a.typeOf.object("result",n),ye.x=t,ye.y=t,ye.z=t,fe.multiplyByScale(e,ye,n)},fe.multiplyByScale=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("scale",t),i.a.typeOf.object("result",n);var r=t.x,o=t.y,a=t.z;return 1===r&&1===o&&1===a?fe.clone(e,n):(n[0]=r*e[0],n[1]=r*e[1],n[2]=r*e[2],n[3]=0,n[4]=o*e[4],n[5]=o*e[5],n[6]=o*e[6],n[7]=0,n[8]=a*e[8],n[9]=a*e[9],n[10]=a*e[10],n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=1,n)},fe.multiplyByVector=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("cartesian",t),i.a.typeOf.object("result",n);var r=t.x,o=t.y,a=t.z,s=t.w,c=e[0]*r+e[4]*o+e[8]*a+e[12]*s,l=e[1]*r+e[5]*o+e[9]*a+e[13]*s,u=e[2]*r+e[6]*o+e[10]*a+e[14]*s,h=e[3]*r+e[7]*o+e[11]*a+e[15]*s;return n.x=c,n.y=l,n.z=u,n.w=h,n},fe.multiplyByPointAsVector=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("cartesian",t),i.a.typeOf.object("result",n);var r=t.x,o=t.y,a=t.z,s=e[0]*r+e[4]*o+e[8]*a,c=e[1]*r+e[5]*o+e[9]*a,l=e[2]*r+e[6]*o+e[10]*a;return n.x=s,n.y=c,n.z=l,n},fe.multiplyByPoint=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("cartesian",t),i.a.typeOf.object("result",n);var r=t.x,o=t.y,a=t.z,s=e[0]*r+e[4]*o+e[8]*a+e[12],c=e[1]*r+e[5]*o+e[9]*a+e[13],l=e[2]*r+e[6]*o+e[10]*a+e[14];return n.x=s,n.y=c,n.z=l,n},fe.multiplyByScalar=function(e,t,n){return i.a.typeOf.object("matrix",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11]*t,n[12]=e[12]*t,n[13]=e[13]*t,n[14]=e[14]*t,n[15]=e[15]*t,n},fe.negate=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t},fe.transpose=function(e,t){i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t);var n=e[1],r=e[2],o=e[3],a=e[6],s=e[7],c=e[11];return t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=a,t[10]=e[10],t[11]=e[14],t[12]=o,t[13]=s,t[14]=c,t[15]=e[15],t},fe.abs=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t[9]=Math.abs(e[9]),t[10]=Math.abs(e[10]),t[11]=Math.abs(e[11]),t[12]=Math.abs(e[12]),t[13]=Math.abs(e[13]),t[14]=Math.abs(e[14]),t[15]=Math.abs(e[15]),t},fe.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[3]===t[3]&&e[7]===t[7]&&e[11]===t[11]&&e[15]===t[15]},fe.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n&&Math.abs(e[9]-t[9])<=n&&Math.abs(e[10]-t[10])<=n&&Math.abs(e[11]-t[11])<=n&&Math.abs(e[12]-t[12])<=n&&Math.abs(e[13]-t[13])<=n&&Math.abs(e[14]-t[14])<=n&&Math.abs(e[15]-t[15])<=n},fe.getTranslation=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t.x=e[12],t.y=e[13],t.z=e[14],t},fe.getMatrix3=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t};var we=new oe,Oe=new oe,Ce=new he,Ee=new he(0,0,0,1);fe.inverse=function(e,t){i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t);var n=e[0],r=e[4],o=e[8],a=e[12],s=e[1],c=e[5],l=e[9],u=e[13],h=e[2],f=e[6],p=e[10],m=e[14],g=e[3],v=e[7],_=e[11],b=e[15],y=p*b,w=m*_,O=f*b,C=m*v,E=f*_,A=p*v,x=h*b,T=m*g,S=h*_,D=p*g,P=h*v,I=f*g,M=y*c+C*l+E*u-(w*c+O*l+A*u),R=w*s+x*l+D*u-(y*s+T*l+S*u),L=O*s+T*c+P*u-(C*s+x*c+I*u),j=A*s+S*c+I*l-(E*s+D*c+P*l),F=w*r+O*o+A*a-(y*r+C*o+E*a),N=y*n+T*o+S*a-(w*n+x*o+D*a),z=C*n+x*r+I*a-(O*n+T*r+P*a),k=E*n+D*r+P*o-(A*n+S*r+I*o),B=(y=o*u)*v+(C=a*c)*_+(E=r*l)*b-((w=a*l)*v+(O=r*u)*_+(A=o*c)*b),H=w*g+(x=n*u)*_+(D=o*s)*b-(y*g+(T=a*s)*_+(S=n*l)*b),V=O*g+T*v+(P=n*c)*b-(C*g+x*v+(I=r*s)*b),U=A*g+S*v+I*_-(E*g+D*v+P*_),W=O*p+A*m+w*f-(E*m+y*f+C*p),G=S*m+y*h+T*p-(x*p+D*m+w*h),q=x*f+I*m+C*h-(P*m+O*h+T*f),Y=P*p+E*h+D*f-(S*f+I*p+A*h),$=n*M+r*R+o*L+a*j;if(Math.abs($)=0?f.longitude:f.longitude+d.TWO_PI;a=Math.min(a,p),s=Math.max(s,p)}return r-n>s-a&&(n=a,(r=s)>d.PI&&(r-=d.TWO_PI),n>d.PI&&(n-=d.TWO_PI)),Object(o.a)(t)?(t.west=n,t.south=c,t.east=r,t.north=l,t):new xe(n,c,r,l)},xe.fromCartesianArray=function(e,t,n){i.a.defined("cartesians",e),t=Object(r.a)(t,W.WGS84);for(var a=Number.MAX_VALUE,s=-Number.MAX_VALUE,c=Number.MAX_VALUE,l=-Number.MAX_VALUE,u=Number.MAX_VALUE,h=-Number.MAX_VALUE,f=0,p=e.length;f=0?m.longitude:m.longitude+d.TWO_PI;c=Math.min(c,g),l=Math.max(l,g)}return s-a>l-c&&(a=c,(s=l)>d.PI&&(s-=d.TWO_PI),a>d.PI&&(a-=d.TWO_PI)),Object(o.a)(n)?(n.west=a,n.south=u,n.east=s,n.north=h,n):new xe(a,u,s,h)},xe.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new xe(e.west,e.south,e.east,e.north)},xe.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n},xe.prototype.clone=function(e){return xe.clone(this,e)},xe.prototype.equals=function(e){return xe.equals(this,e)},xe.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north},xe.prototype.equalsEpsilon=function(e,t){return xe.equalsEpsilon(this,e,t)},xe.validate=function(e){i.a.typeOf.object("rectangle",e);var t=e.north;i.a.typeOf.number.greaterThanOrEquals("north",t,-d.PI_OVER_TWO),i.a.typeOf.number.lessThanOrEquals("north",t,d.PI_OVER_TWO);var n=e.south;i.a.typeOf.number.greaterThanOrEquals("south",n,-d.PI_OVER_TWO),i.a.typeOf.number.lessThanOrEquals("south",n,d.PI_OVER_TWO);var r=e.west;i.a.typeOf.number.greaterThanOrEquals("west",r,-Math.PI),i.a.typeOf.number.lessThanOrEquals("west",r,Math.PI);var o=e.east;i.a.typeOf.number.greaterThanOrEquals("east",o,-Math.PI),i.a.typeOf.number.lessThanOrEquals("east",o,Math.PI)},xe.southwest=function(e,t){return i.a.typeOf.object("rectangle",e),Object(o.a)(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new R(e.west,e.south)},xe.northwest=function(e,t){return i.a.typeOf.object("rectangle",e),Object(o.a)(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new R(e.west,e.north)},xe.northeast=function(e,t){return i.a.typeOf.object("rectangle",e),Object(o.a)(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new R(e.east,e.north)},xe.southeast=function(e,t){return i.a.typeOf.object("rectangle",e),Object(o.a)(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new R(e.east,e.south)},xe.center=function(e,t){i.a.typeOf.object("rectangle",e);var n=e.east,r=e.west;n0?r+=d.TWO_PI:s0&&(s+=d.TWO_PI),r=f))return Object(o.a)(n)?(n.west=l,n.south=h,n.east=u,n.north=f,n):new xe(l,h,u,f)}},xe.simpleIntersection=function(e,t,n){i.a.typeOf.object("rectangle",e),i.a.typeOf.object("otherRectangle",t);var r=Math.max(e.west,t.west),a=Math.max(e.south,t.south),s=Math.min(e.east,t.east),c=Math.min(e.north,t.north);if(!(a>=c||r>=s))return Object(o.a)(n)?(n.west=r,n.south=a,n.east=s,n.north=c,n):new xe(r,a,s,c)},xe.union=function(e,t,n){i.a.typeOf.object("rectangle",e),i.a.typeOf.object("otherRectangle",t),Object(o.a)(n)||(n=new xe);var r=e.east,a=e.west,s=t.east,c=t.west;r0?r+=d.TWO_PI:s0&&(s+=d.TWO_PI),ro||d.equalsEpsilon(n,o,d.EPSILON14))&&(n=e.south&&r<=e.north};var Te=new R;xe.subsample=function(e,t,n,a){i.a.typeOf.object("rectangle",e),t=Object(r.a)(t,W.WGS84),n=Object(r.a)(n,0),Object(o.a)(a)||(a=[]);var s=0,c=e.north,l=e.south,u=e.east,h=e.west,f=Te;f.height=n,f.longitude=h,f.latitude=c,a[s]=t.cartographicToCartesian(f,a[s]),s++,f.longitude=u,a[s]=t.cartographicToCartesian(f,a[s]),s++,f.latitude=l,a[s]=t.cartographicToCartesian(f,a[s]),s++,f.longitude=h,a[s]=t.cartographicToCartesian(f,a[s]),s++,f.latitude=c<0?c:l>0?l:0;for(var p=1;p<8;++p)f.longitude=-Math.PI+p*d.PI_OVER_TWO,xe.contains(e,f)&&(a[s]=t.cartographicToCartesian(f,a[s]),s++);return 0===f.latitude&&(f.longitude=h,a[s]=t.cartographicToCartesian(f,a[s]),s++,f.longitude=u,a[s]=t.cartographicToCartesian(f,a[s]),s++),a.length=s,a},xe.MAX_VALUE=Object.freeze(new xe(-Math.PI,-d.PI_OVER_TWO,Math.PI,d.PI_OVER_TWO));var Se=xe;function De(e,t){this.center=O.clone(Object(r.a)(e,O.ZERO)),this.radius=Object(r.a)(t,0)}var Pe=new O,Ie=new O,Me=new O,Re=new O,Le=new O,je=new O,Fe=new O,Ne=new O,ze=new O,ke=new O,Be=new O,He=new O,Ve=4/3*d.PI;De.fromPoints=function(e,t){if(Object(o.a)(t)||(t=new De),!Object(o.a)(e)||0===e.length)return t.center=O.clone(O.ZERO,t.center),t.radius=0,t;var n,i=O.clone(e[0],Fe),r=O.clone(i,Pe),a=O.clone(i,Ie),s=O.clone(i,Me),c=O.clone(i,Re),l=O.clone(i,Le),u=O.clone(i,je),h=e.length;for(n=1;nc.x&&O.clone(i,c),fl.y&&O.clone(i,l),pu.z&&O.clone(i,u)}var m=O.magnitudeSquared(O.subtract(c,r,Ne)),g=O.magnitudeSquared(O.subtract(l,a,Ne)),v=O.magnitudeSquared(O.subtract(u,s,Ne)),_=r,b=c,y=m;g>y&&(y=g,_=a,b=l),v>y&&(y=v,_=s,b=u);var w=ze;w.x=.5*(_.x+b.x),w.y=.5*(_.y+b.y),w.z=.5*(_.z+b.z);var C=O.magnitudeSquared(O.subtract(b,w,Ne)),E=Math.sqrt(C),A=ke;A.x=r.x,A.y=a.y,A.z=s.z;var x=Be;x.x=c.x,x.y=l.y,x.z=u.z;var T=O.midpoint(A,x,He),S=0;for(n=0;nS&&(S=D);var P=O.magnitudeSquared(O.subtract(i,w,Ne));if(P>C){var I=Math.sqrt(P);C=(E=.5*(E+I))*E;var M=I-E;w.x=(E*w.x+M*i.x)/I,w.y=(E*w.y+M*i.y)/I,w.z=(E*w.z+M*i.z)/I}}return Ed.x&&O.clone(s,d),vf.y&&O.clone(s,f),_p.z&&O.clone(s,p)}var b=O.magnitudeSquared(O.subtract(d,l,Ne)),y=O.magnitudeSquared(O.subtract(f,u,Ne)),w=O.magnitudeSquared(O.subtract(p,h,Ne)),C=l,E=d,A=b;y>A&&(A=y,C=u,E=f),w>A&&(A=w,C=h,E=p);var x=ze;x.x=.5*(C.x+E.x),x.y=.5*(C.y+E.y),x.z=.5*(C.z+E.z);var T=O.magnitudeSquared(O.subtract(E,x,Ne)),S=Math.sqrt(T),D=ke;D.x=l.x,D.y=u.y,D.z=h.z;var P=Be;P.x=d.x,P.y=f.y,P.z=p.z;var I=O.midpoint(D,P,He),M=0;for(c=0;cM&&(M=R);var L=O.magnitudeSquared(O.subtract(s,x,Ne));if(L>T){var j=Math.sqrt(L);T=(S=.5*(S+j))*S;var F=j-S;x.x=(S*x.x+F*s.x)/j,x.y=(S*x.y+F*s.y)/j,x.z=(S*x.z+F*s.z)/j}}return Sl.x&&O.clone(i,l),pu.y&&O.clone(i,u),mh.z&&O.clone(i,h)}var g=O.magnitudeSquared(O.subtract(l,a,Ne)),v=O.magnitudeSquared(O.subtract(u,s,Ne)),_=O.magnitudeSquared(O.subtract(h,c,Ne)),b=a,y=l,w=g;v>w&&(w=v,b=s,y=u),_>w&&(w=_,b=c,y=h);var C=ze;C.x=.5*(b.x+y.x),C.y=.5*(b.y+y.y),C.z=.5*(b.z+y.z);var E=O.magnitudeSquared(O.subtract(y,C,Ne)),A=Math.sqrt(E),x=ke;x.x=a.x,x.y=s.y,x.z=c.z;var T=Be;T.x=l.x,T.y=u.y,T.z=h.z;var S=O.midpoint(x,T,He),D=0;for(r=0;rD&&(D=P);var I=O.magnitudeSquared(O.subtract(i,C,Ne));if(I>E){var M=Math.sqrt(I);E=(A=.5*(A+M))*A;var R=M-A;C.x=(A*C.x+R*i.x)/M,C.y=(A*C.y+R*i.y)/M,C.z=(A*C.z+R*i.z)/M}}return A=u+c)return e.clone(n),n;if(c>=u+a)return t.clone(n),n;var h=.5*(a+u+c),d=O.multiplyByScalar(l,(-a+h)/u,et);return O.add(d,r,d),O.clone(d,n.center),n.radius=h,n};var tt=new O;De.expand=function(e,t,n){i.a.typeOf.object("sphere",e),i.a.typeOf.object("point",t),n=De.clone(e,n);var r=O.magnitude(O.subtract(t,n.center,tt));return r>n.radius&&(n.radius=r),n},De.intersectPlane=function(e,t){i.a.typeOf.object("sphere",e),i.a.typeOf.object("plane",t);var n=e.center,r=e.radius,o=t.normal,a=O.dot(o,n)+t.distance;return a<-r?Y.OUTSIDE:a=r&&(u=r-1);var h=(i.north-e.latitude)/c|0;return h>=a&&(h=a-1),Object(o.a)(n)?(n.x=u,n.y=h,n):new Mt(u,h)}};var Lt=Rt,jt=new O,Ft=new O,Nt=new R,zt=new O,kt=new O,Bt=new gt,Ht=new Lt,Vt=[new R,new R,new R,new R],Ut=new Mt,Wt={};function Gt(e){R.fromRadians(e.east,e.north,0,Vt[0]),R.fromRadians(e.west,e.north,0,Vt[1]),R.fromRadians(e.east,e.south,0,Vt[2]),R.fromRadians(e.west,e.south,0,Vt[3]);var t,n=0,i=0,r=0,o=0,a=Wt._terrainHeightsMaxLevel;for(t=0;t<=a;++t){for(var s=!1,c=0;c<4;++c){var l=Vt[c];if(Ht.positionToTileXY(l,t,Ut),0===c)r=Ut.x,o=Ut.y;else if(r!==Ut.x||o!==Ut.y){s=!0;break}}if(s)break;n=r,i=o}if(0!==t)return{x:n,y:i,level:t>a?a:t-1}}Wt.initialize=function(){var e=Wt._initPromise;return Object(o.a)(e)||(e=_t.a.fetchJson(At("Assets/approximateTerrainHeights.json")).then((function(e){Wt._terrainHeights=e})),Wt._initPromise=e),e},Wt.getMinimumMaximumHeights=function(e,t){if(i.a.defined("rectangle",e),!Object(o.a)(Wt._terrainHeights))throw new a.a("You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function");t=Object(r.a)(t,W.WGS84);var n=Gt(e),s=Wt._defaultMinTerrainHeight,c=Wt._defaultMaxTerrainHeight;if(Object(o.a)(n)){var l=n.level+"-"+n.x+"-"+n.y,u=Wt._terrainHeights[l];Object(o.a)(u)&&(s=u[0],c=u[1]),t.cartographicToCartesian(Se.northeast(e,Nt),jt),t.cartographicToCartesian(Se.southwest(e,Nt),Ft),O.midpoint(Ft,jt,zt);var h=t.scaleToGeodeticSurface(zt,kt);if(Object(o.a)(h)){var d=O.distance(zt,h);s=Math.min(s,-d)}else s=Wt._defaultMinTerrainHeight}return{minimumTerrainHeight:s=Math.max(Wt._defaultMinTerrainHeight,s),maximumTerrainHeight:c}},Wt.getBoundingSphere=function(e,t){if(i.a.defined("rectangle",e),!Object(o.a)(Wt._terrainHeights))throw new a.a("You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function");t=Object(r.a)(t,W.WGS84);var n=Gt(e),s=Wt._defaultMaxTerrainHeight;if(Object(o.a)(n)){var c=n.level+"-"+n.x+"-"+n.y,l=Wt._terrainHeights[c];Object(o.a)(l)&&(s=l[1])}var u=gt.fromRectangle3D(e,t,0);return gt.fromRectangle3D(e,t,s,Bt),gt.union(u,Bt,u)},Wt._terrainHeightsMaxLevel=6,Wt._defaultMaxTerrainHeight=9e3,Wt._defaultMinTerrainHeight=-1e5,Wt._terrainHeights=void 0,Wt._initPromise=void 0,Object.defineProperties(Wt,{initialized:{get:function(){return Object(o.a)(Wt._terrainHeights)}}});var qt=Wt,Yt=n(12),$t=["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"],Xt=["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","audio","canvas","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","video","view","vkern"],Kt=["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"],Qt=["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"],Zt=["#text"],Jt=["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","crossorigin","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","integrity","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns"],en=["accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"],tn=["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"],nn=["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"];function rn(e,t){for(var n=t.length;n--;)"string"===typeof t[n]&&(t[n]=t[n].toLowerCase()),e[t[n]]=!0;return e}function on(e){var t={},n=void 0;for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}var an=/\{\{[\s\S]*|[\s\S]*\}\}/gm,sn=/<%[\s\S]*|[\s\S]*%>/gm,cn=/^data-[\-\w.\u00B7-\uFFFF]/,ln=/^aria-[\-\w]+$/,un=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,hn=/^(?:\w+script|data):/i,dn=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,fn="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function pn(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:mn(),n=function(t){return e(t)};if(n.version="1.0.8",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var i=t.document,r=!1,o=!1,a=t.document,s=t.DocumentFragment,c=t.HTMLTemplateElement,l=t.Node,u=t.NodeFilter,h=t.NamedNodeMap,d=void 0===h?t.NamedNodeMap||t.MozNamedAttrMap:h,f=t.Text,p=t.Comment,m=t.DOMParser;if("function"===typeof c){var g=a.createElement("template");g.content&&g.content.ownerDocument&&(a=g.content.ownerDocument)}var v=a,_=v.implementation,b=v.createNodeIterator,y=v.getElementsByTagName,w=v.createDocumentFragment,O=i.importNode,C={};n.isSupported=_&&"undefined"!==typeof _.createHTMLDocument&&9!==a.documentMode;var E=an,A=sn,x=cn,T=ln,S=hn,D=dn,P=un,I=null,M=rn({},[].concat(pn($t),pn(Xt),pn(Kt),pn(Qt),pn(Zt))),R=null,L=rn({},[].concat(pn(Jt),pn(en),pn(tn),pn(nn))),j=null,F=null,N=!0,z=!0,k=!1,B=!1,H=!1,V=!1,U=!1,W=!1,G=!1,q=!1,Y=!1,$=!0,X=!0,K=!1,Q={},Z=rn({},["audio","head","math","script","style","template","svg","video"]),J=rn({},["audio","video","img","source","image"]),ee=rn({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),te=null,ne=a.createElement("form"),ie=function(e){"object"!==("undefined"===typeof e?"undefined":fn(e))&&(e={}),I="ALLOWED_TAGS"in e?rn({},e.ALLOWED_TAGS):M,R="ALLOWED_ATTR"in e?rn({},e.ALLOWED_ATTR):L,j="FORBID_TAGS"in e?rn({},e.FORBID_TAGS):{},F="FORBID_ATTR"in e?rn({},e.FORBID_ATTR):{},Q="USE_PROFILES"in e&&e.USE_PROFILES,N=!1!==e.ALLOW_ARIA_ATTR,z=!1!==e.ALLOW_DATA_ATTR,k=e.ALLOW_UNKNOWN_PROTOCOLS||!1,B=e.SAFE_FOR_JQUERY||!1,H=e.SAFE_FOR_TEMPLATES||!1,V=e.WHOLE_DOCUMENT||!1,G=e.RETURN_DOM||!1,q=e.RETURN_DOM_FRAGMENT||!1,Y=e.RETURN_DOM_IMPORT||!1,W=e.FORCE_BODY||!1,$=!1!==e.SANITIZE_DOM,X=!1!==e.KEEP_CONTENT,K=e.IN_PLACE||!1,P=e.ALLOWED_URI_REGEXP||P,H&&(z=!1),q&&(G=!0),Q&&(I=rn({},[].concat(pn(Zt))),R=[],!0===Q.html&&(rn(I,$t),rn(R,Jt)),!0===Q.svg&&(rn(I,Xt),rn(R,en),rn(R,nn)),!0===Q.svgFilters&&(rn(I,Kt),rn(R,en),rn(R,nn)),!0===Q.mathMl&&(rn(I,Qt),rn(R,tn),rn(R,nn))),e.ADD_TAGS&&(I===M&&(I=on(I)),rn(I,e.ADD_TAGS)),e.ADD_ATTR&&(R===L&&(R=on(R)),rn(R,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&rn(ee,e.ADD_URI_SAFE_ATTR),X&&(I["#text"]=!0),V&&rn(I,["html","head","body"]),I.table&&rn(I,["tbody"]),Object&&"freeze"in Object&&Object.freeze(e),te=e},re=function(e){n.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}},oe=function(e,t){try{n.removed.push({attribute:t.getAttributeNode(e),from:t})}catch(i){n.removed.push({attribute:null,from:t})}t.removeAttribute(e)},ae=function(e){var t=void 0,n=void 0;if(W)e=""+e;else{var i=e.match(/^[\s]+/);(n=i&&i[0])&&(e=e.slice(n.length))}if(r)try{t=(new m).parseFromString(e,"text/html")}catch(c){}if(o&&rn(j,["title"]),!t||!t.documentElement){var s=(t=_.createHTMLDocument("")).body;s.parentNode.removeChild(s.parentNode.firstElementChild),s.outerHTML=e}return n&&t.body.insertBefore(a.createTextNode(n),t.body.childNodes[0]||null),y.call(t,V?"html":"body")[0]};n.isSupported&&(function(){try{ae('

').querySelector("svg img")&&(r=!0)}catch(e){}}(),function(){try{ae("</title><img>").querySelector("title").textContent.match(/<\/title/)&&(o=!0)}catch(e){}}());var se=function(e){return b.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,(function(){return u.FILTER_ACCEPT}),!1)},ce=function(e){return!(e instanceof f||e instanceof p)&&!("string"===typeof e.nodeName&&"string"===typeof e.textContent&&"function"===typeof e.removeChild&&e.attributes instanceof d&&"function"===typeof e.removeAttribute&&"function"===typeof e.setAttribute)},le=function(e){return"object"===("undefined"===typeof l?"undefined":fn(l))?e instanceof l:e&&"object"===("undefined"===typeof e?"undefined":fn(e))&&"number"===typeof e.nodeType&&"string"===typeof e.nodeName},ue=function(e,t,i){C[e]&&C[e].forEach((function(e){e.call(n,t,i,te)}))},he=function(e){var t=void 0;if(ue("beforeSanitizeElements",e,null),ce(e))return re(e),!0;var i=e.nodeName.toLowerCase();if(ue("uponSanitizeElement",e,{tagName:i,allowedTags:I}),!I[i]||j[i]){if(X&&!Z[i]&&"function"===typeof e.insertAdjacentHTML)try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(r){}return re(e),!0}return!B||e.firstElementChild||e.content&&e.content.firstElementChild||!/</g.test(e.textContent)||(n.removed.push({element:e.cloneNode()}),e.innerHTML?e.innerHTML=e.innerHTML.replace(/</g,"<"):e.innerHTML=e.textContent.replace(/</g,"<")),H&&3===e.nodeType&&(t=(t=(t=e.textContent).replace(E," ")).replace(A," "),e.textContent!==t&&(n.removed.push({element:e.cloneNode()}),e.textContent=t)),ue("afterSanitizeElements",e,null),!1},de=function(e,t,n){if($&&("id"===t||"name"===t)&&(n in a||n in ne))return!1;if(H&&(n=(n=n.replace(E," ")).replace(A," ")),z&&x.test(t));else if(N&&T.test(t));else{if(!R[t]||F[t])return!1;if(ee[t]);else if(P.test(n.replace(D,"")));else if("src"!==t&&"xlink:href"!==t||"script"===e||0!==n.indexOf("data:")||!J[e]){if(k&&!S.test(n.replace(D,"")));else if(n)return!1}else;}return!0},fe=function(e){var t=void 0,i=void 0,r=void 0,o=void 0,a=void 0;ue("beforeSanitizeAttributes",e,null);var s=e.attributes;if(s){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:R};for(a=s.length;a--;){var l=t=s[a],u=l.name,h=l.namespaceURI;if(i=t.value.trim(),r=u.toLowerCase(),c.attrName=r,c.attrValue=i,c.keepAttr=!0,ue("uponSanitizeAttribute",e,c),i=c.attrValue,"name"===r&&"IMG"===e.nodeName&&s.id)o=s.id,s=Array.prototype.slice.apply(s),oe("id",e),oe(u,e),s.indexOf(o)>a&&e.setAttribute("id",o.value);else{if("INPUT"===e.nodeName&&"type"===r&&"file"===i&&(R[r]||!F[r]))continue;"id"===u&&e.setAttribute(u,""),oe(u,e)}if(c.keepAttr){var d=e.nodeName.toLowerCase();if(de(d,r,i))try{h?e.setAttributeNS(h,u,i):e.setAttribute(u,i),n.removed.pop()}catch(f){}}}ue("afterSanitizeAttributes",e,null)}},pe=function e(t){var n=void 0,i=se(t);for(ue("beforeSanitizeShadowDOM",t,null);n=i.nextNode();)ue("uponSanitizeShadowNode",n,null),he(n)||(n.content instanceof s&&e(n.content),fe(n));ue("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e,r){var o=void 0,a=void 0,c=void 0,u=void 0,h=void 0;if(e||(e="\x3c!--\x3e"),"string"!==typeof e&&!le(e)){if("function"!==typeof e.toString)throw new TypeError("toString is not a function");if("string"!==typeof(e=e.toString()))throw new TypeError("dirty is not a string, aborting")}if(!n.isSupported){if("object"===fn(t.toStaticHTML)||"function"===typeof t.toStaticHTML){if("string"===typeof e)return t.toStaticHTML(e);if(le(e))return t.toStaticHTML(e.outerHTML)}return e}if(U||ie(r),n.removed=[],K);else if(e instanceof l)1===(a=(o=ae("\x3c!--\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===a.nodeName?o=a:o.appendChild(a);else{if(!G&&!V&&-1===e.indexOf("<"))return e;if(!(o=ae(e)))return G?null:""}o&&W&&re(o.firstChild);for(var d=se(K?e:o);c=d.nextNode();)3===c.nodeType&&c===u||he(c)||(c.content instanceof s&&pe(c.content),fe(c),u=c);if(K)return e;if(G){if(q)for(h=w.call(o.ownerDocument);o.firstChild;)h.appendChild(o.firstChild);else h=o;return Y&&(h=O.call(i,h,!0)),h}return V?o.outerHTML:o.innerHTML},n.setConfig=function(e){ie(e),U=!0},n.clearConfig=function(){te=null,U=!1},n.isValidAttribute=function(e,t,n){te||ie({});var i=e.toLowerCase(),r=t.toLowerCase();return de(i,r,n)},n.addHook=function(e,t){"function"===typeof t&&(C[e]=C[e]||[],C[e].push(t))},n.removeHook=function(e){C[e]&&C[e].pop()},n.removeHooks=function(e){C[e]&&(C[e]=[])},n.removeAllHooks=function(){C={}},n}(),vn=0,_n={};function bn(e,t){var n;i.a.typeOf.string("html",e);var a=e;Object(o.a)(_n[a])?n=_n[a]:(n=vn++,_n[a]=n),t=Object(r.a)(t,!1),this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(bn.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen}},element:{get:function(){if(!Object(o.a)(this._element)){var e=gn.sanitize(this._html),t=document.createElement("div");t._creditId=this._id,t.style.display="inline",t.innerHTML=e;for(var n=t.querySelectorAll("a"),i=0;i<n.length;i++)n[i].setAttribute("target","_blank");this._element=t}return this._element}}}),bn.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e._id===t._id},bn.prototype.equals=function(e){return bn.equals(this,e)},bn.getIonCredit=function(e){var t=Object(o.a)(e.collapsible)&&!e.collapsible,n=new bn(e.html,t);return n._isIon=-1!==n.html.indexOf("ion-credit.png"),n},bn.clone=function(e){if(Object(o.a)(e))return new bn(e.html,e.showOnScreen)};var yn=bn,wn=n(14),On=Object.freeze({NONE:0,LERC:1});function Cn(e,t,n){this.minimum=O.clone(Object(r.a)(e,O.ZERO)),this.maximum=O.clone(Object(r.a)(t,O.ZERO)),n=Object(o.a)(n)?O.clone(n):O.midpoint(this.minimum,this.maximum,new O),this.center=n}Cn.fromPoints=function(e,t){if(Object(o.a)(t)||(t=new Cn),!Object(o.a)(e)||0===e.length)return t.minimum=O.clone(O.ZERO,t.minimum),t.maximum=O.clone(O.ZERO,t.maximum),t.center=O.clone(O.ZERO,t.center),t;for(var n=e[0].x,i=e[0].y,r=e[0].z,a=e[0].x,s=e[0].y,c=e[0].z,l=e.length,u=1;u<l;u++){var h=e[u],d=h.x,f=h.y,p=h.z;n=Math.min(d,n),a=Math.max(d,a),i=Math.min(f,i),s=Math.max(f,s),r=Math.min(p,r),c=Math.max(p,c)}var m=t.minimum;m.x=n,m.y=i,m.z=r;var g=t.maximum;return g.x=a,g.y=s,g.z=c,t.center=O.midpoint(m,g,t.center),t},Cn.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.minimum=O.clone(e.minimum,t.minimum),t.maximum=O.clone(e.maximum,t.maximum),t.center=O.clone(e.center,t.center),t):new Cn(e.minimum,e.maximum,e.center)},Cn.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&O.equals(e.center,t.center)&&O.equals(e.minimum,t.minimum)&&O.equals(e.maximum,t.maximum)};var En=new O;Cn.intersectPlane=function(e,t){i.a.defined("box",e),i.a.defined("plane",t),En=O.subtract(e.maximum,e.minimum,En);var n=O.multiplyByScalar(En,.5,En),r=t.normal,o=n.x*Math.abs(r.x)+n.y*Math.abs(r.y)+n.z*Math.abs(r.z),a=O.dot(e.center,r)+t.distance;return a-o>0?Y.INSIDE:a+o<0?Y.OUTSIDE:Y.INTERSECTING},Cn.prototype.clone=function(e){return Cn.clone(this,e)},Cn.prototype.intersectPlane=function(e){return Cn.intersectPlane(this,e)},Cn.prototype.equals=function(e){return Cn.equals(this,e)};var An=Cn;function xn(e,t){i.a.typeOf.object("ellipsoid",e),this._ellipsoid=e,this._cameraPosition=new O,this._cameraPositionInScaledSpace=new O,this._distanceToLimbInScaledSpaceSquared=0,Object(o.a)(t)&&(this.cameraPosition=t)}Object.defineProperties(xn.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(e){var t=this._ellipsoid.transformPositionToScaledSpace(e,this._cameraPositionInScaledSpace),n=O.magnitudeSquared(t)-1;O.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=t,this._distanceToLimbInScaledSpaceSquared=n}}});var Tn=new O;xn.prototype.isPointVisible=function(e){return Fn(this._ellipsoid.transformPositionToScaledSpace(e,Tn),this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)},xn.prototype.isScaledSpacePointVisible=function(e){return Fn(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var Sn=new O;xn.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){var n,i,r=this._ellipsoid;return Object(o.a)(t)&&t<0&&r.minimumRadius>-t?((i=Sn).x=this._cameraPosition.x/(r.radii.x+t),i.y=this._cameraPosition.y/(r.radii.y+t),i.z=this._cameraPosition.z/(r.radii.z+t),n=i.x*i.x+i.y*i.y+i.z*i.z-1):(i=this._cameraPositionInScaledSpace,n=this._distanceToLimbInScaledSpaceSquared),Fn(e,i,n)},xn.prototype.computeHorizonCullingPoint=function(e,t,n){return Rn(this._ellipsoid,e,t,n)};var Dn=W.clone(W.UNIT_SPHERE);xn.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){return Rn(Mn(this._ellipsoid,n,Dn),e,t,i)},xn.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,r){return jn(this._ellipsoid,e,t,n,i,r)},xn.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,r,o){return jn(Mn(this._ellipsoid,r,Dn),e,t,n,i,o)};var Pn=[];xn.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){i.a.typeOf.object("rectangle",e);var r=Se.subsample(e,t,0,Pn),o=gt.fromPoints(r);if(!(O.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,r,n)};var In=new O;function Mn(e,t,n){if(Object(o.a)(t)&&t<0&&e.minimumRadius>-t){var i=O.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,In);e=W.fromCartesian3(i,n)}return e}function Rn(e,t,n,r){i.a.typeOf.object("directionToPoint",t),i.a.defined("positions",n),Object(o.a)(r)||(r=new O);for(var a=Vn(e,t),s=0,c=0,l=n.length;c<l;++c){var u=kn(e,n[c],a);if(u<0)return;s=Math.max(s,u)}return Bn(a,s,r)}var Ln=new O;function jn(e,t,n,a,s,c){i.a.typeOf.object("directionToPoint",t),i.a.defined("vertices",n),i.a.typeOf.number("stride",a),Object(o.a)(c)||(c=new O),a=Object(r.a)(a,3),s=Object(r.a)(s,O.ZERO);for(var l=Vn(e,t),u=0,h=0,d=n.length;h<d;h+=a){Ln.x=n[h]+s.x,Ln.y=n[h+1]+s.y,Ln.z=n[h+2]+s.z;var f=kn(e,Ln,l);if(f<0)return;u=Math.max(u,f)}return Bn(l,u,c)}function Fn(e,t,n){var i=t,r=n,o=O.subtract(e,i,Tn),a=-O.dot(o,i);return!(r<0?a>0:a>r&&a*a/O.magnitudeSquared(o)>r)}var Nn=new O,zn=new O;function kn(e,t,n){var i=e.transformPositionToScaledSpace(t,Nn),r=O.magnitudeSquared(i),o=Math.sqrt(r),a=O.divideByScalar(i,o,zn);r=Math.max(1,r);var s=1/(o=Math.max(1,o));return 1/(O.dot(a,n)*s-O.magnitude(O.cross(a,n,a))*(Math.sqrt(r-1)*s))}function Bn(e,t,n){if(!(t<=0||t===1/0||t!==t))return O.multiplyByScalar(e,t,n)}var Hn=new O;function Vn(e,t){return O.equals(t,O.ZERO)?t:(e.transformPositionToScaledSpace(t,Hn),O.normalize(Hn,Hn))}var Un=xn,Wn={};function Gn(e,t,n){var i=e+t;return d.sign(e)!==d.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}Wn.computeDiscriminant=function(e,t,n){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");return t*t-4*e*n},Wn.computeRealRoots=function(e,t,n){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");var i;if(0===e)return 0===t?[]:[-n/t];if(0===t){if(0===n)return[0,0];var r=Math.abs(n),o=Math.abs(e);if(r<o&&r/o<d.EPSILON14)return[0,0];if(r>o&&o/r<d.EPSILON14)return[];if((i=-n/e)<0)return[];var s=Math.sqrt(i);return[-s,s]}if(0===n)return(i=-t/e)<0?[i,0]:[0,i];var c=Gn(t*t,-(4*e*n),d.EPSILON14);if(c<0)return[];var l=-.5*Gn(t,d.sign(t)*Math.sqrt(c),d.EPSILON14);return t>0?[l/e,n/l]:[n/l,l/e]};var qn=Wn,Yn={};function $n(e,t,n,i){var r,o,a=e,s=t/3,c=n/3,l=i,u=a*c,h=s*l,d=s*s,f=c*c,p=a*c-d,m=a*l-s*c,g=s*l-f,v=4*p*g-m*m;if(v<0){var _,b,y;d*h>=u*f?(_=a,b=p,y=-2*s*p+a*m):(_=l,b=g,y=-l*m+2*c*g);var w=-(y<0?-1:1)*Math.abs(_)*Math.sqrt(-v),O=(o=-y+w)/2,C=O<0?-Math.pow(-O,1/3):Math.pow(O,1/3),E=o===w?-C:-b/C;return r=b<=0?C+E:-y/(C*C+E*E+b),d*h>=u*f?[(r-s)/a]:[-l/(r+c)]}var A=p,x=-2*s*p+a*m,T=g,S=-l*m+2*c*g,D=Math.sqrt(v),P=Math.sqrt(3)/2,I=Math.abs(Math.atan2(a*D,-x)/3);r=2*Math.sqrt(-A);var M=Math.cos(I);o=r*M;var R=r*(-M/2-P*Math.sin(I)),L=o+R>2*s?o-s:R-s,j=a,F=L/j;I=Math.abs(Math.atan2(l*D,-S)/3);var N=-l,z=(o=(r=2*Math.sqrt(-T))*(M=Math.cos(I)))+(R=r*(-M/2-P*Math.sin(I)))<2*c?o+c:R+c,k=N/z,B=-L*z-j*N,H=(c*B-s*(L*N))/(-s*B+c*(j*z));return F<=H?F<=k?H<=k?[F,H,k]:[F,k,H]:[k,F,H]:F<=k?[H,F,k]:H<=k?[H,k,F]:[k,H,F]}Yn.computeDiscriminant=function(e,t,n,i){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");if("number"!==typeof i)throw new a.a("d is a required number.");var r=t*t,o=n*n;return 18*e*t*n*i+r*o-27*(e*e)*(i*i)-4*(e*o*n+r*t*i)},Yn.computeRealRoots=function(e,t,n,i){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");if("number"!==typeof i)throw new a.a("d is a required number.");var r,o;if(0===e)return qn.computeRealRoots(t,n,i);if(0===t){if(0===n){if(0===i)return[0,0,0];var s=(o=-i/e)<0?-Math.pow(-o,1/3):Math.pow(o,1/3);return[s,s,s]}return 0===i?0===(r=qn.computeRealRoots(e,0,n)).Length?[0]:[r[0],0,r[1]]:$n(e,0,n,i)}return 0===n?0===i?(o=-t/e)<0?[o,0,0]:[0,0,o]:$n(e,t,0,i):0===i?0===(r=qn.computeRealRoots(e,t,n)).length?[0]:r[1]<=0?[r[0],r[1],0]:r[0]>=0?[0,r[0],r[1]]:[r[0],0,r[1]]:$n(e,t,n,i)};var Xn=Yn,Kn={};function Qn(e,t,n,i){var r=e*e,o=t-3*r/8,a=n-t*e/2+r*e/8,s=i-n*e/4+t*r/16-3*r*r/256,c=Xn.computeRealRoots(1,2*o,o*o-4*s,-a*a);if(c.length>0){var l=-e/4,u=c[c.length-1];if(Math.abs(u)<d.EPSILON14){var h=qn.computeRealRoots(1,o,s);if(2===h.length){var f,p=h[0],m=h[1];if(p>=0&&m>=0){var g=Math.sqrt(p),v=Math.sqrt(m);return[l-v,l-g,l+g,l+v]}if(p>=0&&m<0)return[l-(f=Math.sqrt(p)),l+f];if(p<0&&m>=0)return[l-(f=Math.sqrt(m)),l+f]}return[]}if(u>0){var _=Math.sqrt(u),b=(o+u-a/_)/2,y=(o+u+a/_)/2,w=qn.computeRealRoots(1,_,b),O=qn.computeRealRoots(1,-_,y);return 0!==w.length?(w[0]+=l,w[1]+=l,0!==O.length?(O[0]+=l,O[1]+=l,w[1]<=O[0]?[w[0],w[1],O[0],O[1]]:O[1]<=w[0]?[O[0],O[1],w[0],w[1]]:w[0]>=O[0]&&w[1]<=O[1]?[O[0],w[0],w[1],O[1]]:O[0]>=w[0]&&O[1]<=w[1]?[w[0],O[0],O[1],w[1]]:w[0]>O[0]&&w[0]<O[1]?[O[0],w[0],O[1],w[1]]:[w[0],O[0],w[1],O[1]]):w):0!==O.length?(O[0]+=l,O[1]+=l,O):[]}}return[]}function Zn(e,t,n,i){var r=e*e,o=-2*t,a=n*e+t*t-4*i,s=r*i-n*t*e+n*n,c=Xn.computeRealRoots(1,o,a,s);if(c.length>0){var l,u,h,f,p,m,g=c[0],v=t-g,_=v*v,b=e/2,y=v/2,w=_-4*i,O=_+4*Math.abs(i),C=r-4*g,E=r+4*Math.abs(g);if(g<0||w*E<C*O){var A=Math.sqrt(C);l=A/2,u=0===A?0:(e*y-n)/A}else{var x=Math.sqrt(w);l=0===x?0:(e*y-n)/x,u=x/2}0===b&&0===l?(h=0,f=0):d.sign(b)===d.sign(l)?f=g/(h=b+l):h=g/(f=b-l),0===y&&0===u?(p=0,m=0):d.sign(y)===d.sign(u)?m=i/(p=y+u):p=i/(m=y-u);var T=qn.computeRealRoots(1,h,p),S=qn.computeRealRoots(1,f,m);if(0!==T.length)return 0!==S.length?T[1]<=S[0]?[T[0],T[1],S[0],S[1]]:S[1]<=T[0]?[S[0],S[1],T[0],T[1]]:T[0]>=S[0]&&T[1]<=S[1]?[S[0],T[0],T[1],S[1]]:S[0]>=T[0]&&S[1]<=T[1]?[T[0],S[0],S[1],T[1]]:T[0]>S[0]&&T[0]<S[1]?[S[0],T[0],S[1],T[1]]:[T[0],S[0],T[1],S[1]]:T;if(0!==S.length)return S}return[]}Kn.computeDiscriminant=function(e,t,n,i,r){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");if("number"!==typeof i)throw new a.a("d is a required number.");if("number"!==typeof r)throw new a.a("e is a required number.");var o=e*e,s=t*t,c=s*t,l=n*n,u=l*n,h=i*i,d=h*i,f=r*r;return s*l*h-4*c*d-4*e*u*h+18*e*t*n*d-27*o*h*h+256*(o*e)*(f*r)+r*(18*c*n*i-4*s*u+16*e*l*l-80*e*t*l*i-6*e*s*h+144*o*n*h)+f*(144*e*s*n-27*s*s-128*o*l-192*o*t*i)},Kn.computeRealRoots=function(e,t,n,i,r){if("number"!==typeof e)throw new a.a("a is a required number.");if("number"!==typeof t)throw new a.a("b is a required number.");if("number"!==typeof n)throw new a.a("c is a required number.");if("number"!==typeof i)throw new a.a("d is a required number.");if("number"!==typeof r)throw new a.a("e is a required number.");if(Math.abs(e)<d.EPSILON15)return Xn.computeRealRoots(t,n,i,r);var o=t/e,s=n/e,c=i/e,l=r/e,u=o<0?1:0;switch(u+=s<0?u+1:u,u+=c<0?u+1:u,u+=l<0?u+1:u){case 0:return Qn(o,s,c,l);case 1:case 2:return Zn(o,s,c,l);case 3:case 4:return Qn(o,s,c,l);case 5:return Zn(o,s,c,l);case 6:case 7:return Qn(o,s,c,l);case 8:return Zn(o,s,c,l);case 9:case 10:return Qn(o,s,c,l);case 11:return Zn(o,s,c,l);case 12:case 13:case 14:case 15:return Qn(o,s,c,l);default:return}};var Jn=Kn;function ei(e,t){t=O.clone(Object(r.a)(t,O.ZERO)),O.equals(t,O.ZERO)||O.normalize(t,t),this.origin=O.clone(Object(r.a)(e,O.ZERO)),this.direction=t}ei.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.origin=O.clone(e.origin),t.direction=O.clone(e.direction),t):new ei(e.origin,e.direction)},ei.getPoint=function(e,t,n){return i.a.typeOf.object("ray",e),i.a.typeOf.number("t",t),Object(o.a)(n)||(n=new O),n=O.multiplyByScalar(e.direction,t,n),O.add(e.origin,n,n)};var ti=ei,ni={rayPlane:function(e,t,n){if(!Object(o.a)(e))throw new a.a("ray is required.");if(!Object(o.a)(t))throw new a.a("plane is required.");Object(o.a)(n)||(n=new O);var i=e.origin,r=e.direction,s=t.normal,c=O.dot(s,r);if(!(Math.abs(c)<d.EPSILON15)){var l=(-t.distance-O.dot(s,i))/c;if(!(l<0))return n=O.multiplyByScalar(r,l,n),O.add(i,n,n)}}},ii=new O,ri=new O,oi=new O,ai=new O,si=new O;ni.rayTriangleParametric=function(e,t,n,i,s){if(!Object(o.a)(e))throw new a.a("ray is required.");if(!Object(o.a)(t))throw new a.a("p0 is required.");if(!Object(o.a)(n))throw new a.a("p1 is required.");if(!Object(o.a)(i))throw new a.a("p2 is required.");s=Object(r.a)(s,!1);var c,l,u,h,f,p=e.origin,m=e.direction,g=O.subtract(n,t,ii),v=O.subtract(i,t,ri),_=O.cross(m,v,oi),b=O.dot(g,_);if(s){if(b<d.EPSILON6)return;if(c=O.subtract(p,t,ai),(u=O.dot(c,_))<0||u>b)return;if(l=O.cross(c,g,si),(h=O.dot(m,l))<0||u+h>b)return;f=O.dot(v,l)/b}else{if(Math.abs(b)<d.EPSILON6)return;var y=1/b;if(c=O.subtract(p,t,ai),(u=O.dot(c,_)*y)<0||u>1)return;if(l=O.cross(c,g,si),(h=O.dot(m,l)*y)<0||u+h>1)return;f=O.dot(v,l)*y}return f},ni.rayTriangle=function(e,t,n,i,r,a){var s=ni.rayTriangleParametric(e,t,n,i,r);if(Object(o.a)(s)&&!(s<0))return Object(o.a)(a)||(a=new O),O.multiplyByScalar(e.direction,s,a),O.add(e.origin,a,a)};var ci=new ti;ni.lineSegmentTriangle=function(e,t,n,i,r,s,c){if(!Object(o.a)(e))throw new a.a("v0 is required.");if(!Object(o.a)(t))throw new a.a("v1 is required.");if(!Object(o.a)(n))throw new a.a("p0 is required.");if(!Object(o.a)(i))throw new a.a("p1 is required.");if(!Object(o.a)(r))throw new a.a("p2 is required.");var l=ci;O.clone(e,l.origin),O.subtract(t,e,l.direction),O.normalize(l.direction,l.direction);var u=ni.rayTriangleParametric(l,n,i,r,s);if(!(!Object(o.a)(u)||u<0||u>O.distance(e,t)))return Object(o.a)(c)||(c=new O),O.multiplyByScalar(l.direction,u,c),O.add(l.origin,c,c)};var li={root0:0,root1:0};function ui(e,t,n){Object(o.a)(n)||(n=new $);var i=e.origin,r=e.direction,a=t.center,s=t.radius*t.radius,c=O.subtract(i,a,oi),l=function(e,t,n,i){var r=t*t-4*e*n;if(!(r<0)){if(r>0){var o=1/(2*e),a=Math.sqrt(r),s=(-t+a)*o,c=(-t-a)*o;return s<c?(i.root0=s,i.root1=c):(i.root0=c,i.root1=s),i}var l=-t/(2*e);if(0!==l)return i.root0=i.root1=l,i}}(O.dot(r,r),2*O.dot(r,c),O.magnitudeSquared(c)-s,li);if(Object(o.a)(l))return n.start=l.root0,n.stop=l.root1,n}ni.raySphere=function(e,t,n){if(!Object(o.a)(e))throw new a.a("ray is required.");if(!Object(o.a)(t))throw new a.a("sphere is required.");if(n=ui(e,t,n),Object(o.a)(n)&&!(n.stop<0))return n.start=Math.max(n.start,0),n};var hi=new ti;ni.lineSegmentSphere=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("p0 is required.");if(!Object(o.a)(t))throw new a.a("p1 is required.");if(!Object(o.a)(n))throw new a.a("sphere is required.");var r=hi;O.clone(e,r.origin);var s=O.subtract(t,e,r.direction),c=O.magnitude(s);if(O.normalize(s,s),i=ui(r,n,i),!(!Object(o.a)(i)||i.stop<0||i.start>c))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,c),i};var di=new O,fi=new O;function pi(e,t,n){var i=e+t;return d.sign(e)!==d.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}ni.rayEllipsoid=function(e,t){if(!Object(o.a)(e))throw new a.a("ray is required.");if(!Object(o.a)(t))throw new a.a("ellipsoid is required.");var n,i,r,s,c,l=t.oneOverRadii,u=O.multiplyComponents(l,e.origin,di),h=O.multiplyComponents(l,e.direction,fi),d=O.magnitudeSquared(u),f=O.dot(u,h);if(d>1){if(f>=0)return;var p=f*f;if(n=d-1,p<(r=(i=O.magnitudeSquared(h))*n))return;if(p>r){s=f*f-r;var m=(c=-f+Math.sqrt(s))/i,g=n/c;return m<g?new $(m,g):{start:g,stop:m}}var v=Math.sqrt(n/i);return new $(v,v)}return d<1?(n=d-1,s=f*f-(r=(i=O.magnitudeSquared(h))*n),c=-f+Math.sqrt(s),new $(0,c/i)):f<0?(i=O.magnitudeSquared(h),new $(0,-f/i)):void 0};var mi=new O,gi=new O,vi=new O,_i=new O,bi=new O,yi=new oe,wi=new oe,Oi=new oe,Ci=new oe,Ei=new oe,Ai=new oe,xi=new oe,Ti=new O,Si=new O,Di=new R;ni.grazingAltitudeLocation=function(e,t){if(!Object(o.a)(e))throw new a.a("ray is required.");if(!Object(o.a)(t))throw new a.a("ellipsoid is required.");var n=e.origin,i=e.direction;if(!O.equals(n,O.ZERO)){var r=t.geodeticSurfaceNormal(n,mi);if(O.dot(i,r)>=0)return n}var s=Object(o.a)(this.rayEllipsoid(e,t)),c=t.transformPositionToScaledSpace(i,mi),l=O.normalize(c,c),u=O.mostOrthogonalAxis(c,_i),h=O.normalize(O.cross(u,l,gi),gi),f=O.normalize(O.cross(l,h,vi),vi),p=yi;p[0]=l.x,p[1]=l.y,p[2]=l.z,p[3]=h.x,p[4]=h.y,p[5]=h.z,p[6]=f.x,p[7]=f.y,p[8]=f.z;var m=oe.transpose(p,wi),g=oe.fromScale(t.radii,Oi),v=oe.fromScale(t.oneOverRadii,Ci),_=Ei;_[0]=0,_[1]=-i.z,_[2]=i.y,_[3]=i.z,_[4]=0,_[5]=-i.x,_[6]=-i.y,_[7]=i.x,_[8]=0;var b,y,w=oe.multiply(oe.multiply(m,v,Ai),_,Ai),C=oe.multiply(oe.multiply(w,g,xi),p,xi),E=oe.multiplyByVector(w,n,bi),A=function(e,t,n,i,r){var o,a=i*i,s=r*r,c=(e[oe.COLUMN1ROW1]-e[oe.COLUMN2ROW2])*s,l=r*(i*pi(e[oe.COLUMN1ROW0],e[oe.COLUMN0ROW1],d.EPSILON15)+t.y),u=e[oe.COLUMN0ROW0]*a+e[oe.COLUMN2ROW2]*s+i*t.x+n,h=s*pi(e[oe.COLUMN2ROW1],e[oe.COLUMN1ROW2],d.EPSILON15),f=r*(i*pi(e[oe.COLUMN2ROW0],e[oe.COLUMN0ROW2])+t.z),p=[];if(0===f&&0===h){if(0===(o=qn.computeRealRoots(c,l,u)).length)return p;var m=o[0],g=Math.sqrt(Math.max(1-m*m,0));if(p.push(new O(i,r*m,r*-g)),p.push(new O(i,r*m,r*g)),2===o.length){var v=o[1],_=Math.sqrt(Math.max(1-v*v,0));p.push(new O(i,r*v,r*-_)),p.push(new O(i,r*v,r*_))}return p}var b=f*f,y=h*h,w=f*h,C=c*c+y,E=2*(l*c+w),A=2*u*c+l*l-y+b,x=2*(u*l-w),T=u*u-b;if(0===C&&0===E&&0===A&&0===x)return p;var S=(o=Jn.computeRealRoots(C,E,A,x,T)).length;if(0===S)return p;for(var D=0;D<S;++D){var P=o[D],I=P*P,M=Math.max(1-I,0),R=Math.sqrt(M),L=(d.sign(c)===d.sign(u)?pi(c*I+u,l*P,d.EPSILON12):d.sign(u)===d.sign(l*P)?pi(c*I,l*P+u,d.EPSILON12):pi(c*I+l*P,u,d.EPSILON12))*pi(h*P,f,d.EPSILON15);L<0?p.push(new O(i,r*P,r*R)):L>0?p.push(new O(i,r*P,r*-R)):0!==R?(p.push(new O(i,r*P,r*-R)),p.push(new O(i,r*P,r*R)),++D):p.push(new O(i,r*P,r*R))}return p}(C,O.negate(E,mi),0,0,1),x=A.length;if(x>0){for(var T=O.clone(O.ZERO,Si),S=Number.NEGATIVE_INFINITY,D=0;D<x;++D){b=oe.multiplyByVector(g,oe.multiplyByVector(p,A[D],Ti),Ti);var P=O.normalize(O.subtract(b,n,_i),_i),I=O.dot(P,i);I>S&&(S=I,T=O.clone(b,T))}var M=t.cartesianToCartographic(T,Di);return S=d.clamp(S,0,1),y=O.magnitude(O.subtract(T,n,_i))*Math.sqrt(1-S*S),y=s?-y:y,M.height=y,t.cartographicToCartesian(M,new O)}};var Pi=new O;ni.lineSegmentPlane=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("endPoint0 is required.");if(!Object(o.a)(t))throw new a.a("endPoint1 is required.");if(!Object(o.a)(n))throw new a.a("plane is required.");Object(o.a)(i)||(i=new O);var r=O.subtract(t,e,Pi),s=n.normal,c=O.dot(s,r);if(!(Math.abs(c)<d.EPSILON6)){var l=O.dot(s,e),u=-(n.distance+l)/c;if(!(u<0||u>1))return O.multiplyByScalar(r,u,i),O.add(e,i,i),i}},ni.trianglePlaneIntersection=function(e,t,n,i){if(!Object(o.a)(e)||!Object(o.a)(t)||!Object(o.a)(n)||!Object(o.a)(i))throw new a.a("p0, p1, p2, and plane are required.");var r,s,c=i.normal,l=i.distance,u=O.dot(c,e)+l<0,h=O.dot(c,t)+l<0,d=O.dot(c,n)+l<0,f=0;if(f+=u?1:0,f+=h?1:0,1!==(f+=d?1:0)&&2!==f||(r=new O,s=new O),1===f){if(u)return ni.lineSegmentPlane(e,t,i,r),ni.lineSegmentPlane(e,n,i,s),{positions:[e,t,n,r,s],indices:[0,3,4,1,2,4,1,4,3]};if(h)return ni.lineSegmentPlane(t,n,i,r),ni.lineSegmentPlane(t,e,i,s),{positions:[e,t,n,r,s],indices:[1,3,4,2,0,4,2,4,3]};if(d)return ni.lineSegmentPlane(n,e,i,r),ni.lineSegmentPlane(n,t,i,s),{positions:[e,t,n,r,s],indices:[2,3,4,0,1,4,0,4,3]}}else if(2===f){if(!u)return ni.lineSegmentPlane(t,e,i,r),ni.lineSegmentPlane(n,e,i,s),{positions:[e,t,n,r,s],indices:[1,2,4,1,4,3,0,3,4]};if(!h)return ni.lineSegmentPlane(n,t,i,r),ni.lineSegmentPlane(e,t,i,s),{positions:[e,t,n,r,s],indices:[2,0,4,2,4,3,1,3,4]};if(!d)return ni.lineSegmentPlane(e,n,i,r),ni.lineSegmentPlane(t,n,i,s),{positions:[e,t,n,r,s],indices:[0,1,4,0,4,3,2,3,4]}}};var Ii=ni;function Mi(e,t){if(i.a.typeOf.object("normal",e),!d.equalsEpsilon(O.magnitude(e),1,d.EPSILON6))throw new a.a("normal must be normalized.");i.a.typeOf.number("distance",t),this.normal=O.clone(e),this.distance=t}Mi.fromPointNormal=function(e,t,n){if(i.a.typeOf.object("point",e),i.a.typeOf.object("normal",t),!d.equalsEpsilon(O.magnitude(t),1,d.EPSILON6))throw new a.a("normal must be normalized.");var r=-O.dot(t,e);return Object(o.a)(n)?(O.clone(t,n.normal),n.distance=r,n):new Mi(t,r)};var Ri=new O;Mi.fromCartesian4=function(e,t){i.a.typeOf.object("coefficients",e);var n=O.fromCartesian4(e,Ri),r=e.w;if(!d.equalsEpsilon(O.magnitude(n),1,d.EPSILON6))throw new a.a("normal must be normalized.");return Object(o.a)(t)?(O.clone(n,t.normal),t.distance=r,t):new Mi(n,r)},Mi.getPointDistance=function(e,t){return i.a.typeOf.object("plane",e),i.a.typeOf.object("point",t),O.dot(e.normal,t)+e.distance};var Li=new O;Mi.projectPointOntoPlane=function(e,t,n){i.a.typeOf.object("plane",e),i.a.typeOf.object("point",t),Object(o.a)(n)||(n=new O);var r=Mi.getPointDistance(e,t),a=O.multiplyByScalar(e.normal,r,Li);return O.subtract(t,a,n)};var ji=new O;Mi.transform=function(e,t,n){return i.a.typeOf.object("plane",e),i.a.typeOf.object("transform",t),Ae.multiplyByPointAsVector(t,e.normal,Ri),O.normalize(Ri,Ri),O.multiplyByScalar(e.normal,-e.distance,ji),Ae.multiplyByPoint(t,ji,ji),Mi.fromPointNormal(ji,Ri,n)},Mi.clone=function(e,t){return i.a.typeOf.object("plane",e),Object(o.a)(t)?(O.clone(e.normal,t.normal),t.distance=e.distance,t):new Mi(e.normal,e.distance)},Mi.equals=function(e,t){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),e.distance===t.distance&&O.equals(e.normal,t.normal)},Mi.ORIGIN_XY_PLANE=Object.freeze(new Mi(O.UNIT_Z,0)),Mi.ORIGIN_YZ_PLANE=Object.freeze(new Mi(O.UNIT_X,0)),Mi.ORIGIN_ZX_PLANE=Object.freeze(new Mi(O.UNIT_Y,0));var Fi=Mi;var Ni=function(e,t,n){i.a.defined("array",e),i.a.defined("itemToFind",t),i.a.defined("comparator",n);for(var r,o,a=0,s=e.length-1;a<=s;)if((o=n(e[r=~~((a+s)/2)],t))<0)a=r+1;else{if(!(o>0))return r;s=r-1}return~(s+1)};var zi=function(e,t,n,i,r){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=r};var ki=function(){var e=/%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuideEfFgG])/g,t=arguments,n=0,i=t[n++],r=function(e,t,n,i){n||(n=" ");var r=e.length>=t?"":Array(1+t-e.length>>>0).join(n);return i?e+r:r+e},o=function(e,t,n,i,o,a){var s=i-e.length;return s>0&&(e=n||!o?r(e,i,a,n):e.slice(0,t.length)+r("",s,"0",!0)+e.slice(t.length)),e},a=function(e,t,n,i,a,s,c){var l=e>>>0;return e=(n=n&&l&&{2:"0b",8:"0",16:"0x"}[t]||"")+r(l.toString(t),s||0,"0",!1),o(e,n,i,a,c)},s=function(e,t,n,i,r,a){return null!=i&&(e=e.slice(0,i)),o(e,"",t,n,r,a)},c=function(e,i,c,l,u,h,d){var f,p,m,g,v;if("%%"==e)return"%";for(var _=!1,b="",y=!1,w=!1,O=" ",C=c.length,E=0;c&&E<C;E++)switch(c.charAt(E)){case" ":b=" ";break;case"+":b="+";break;case"-":_=!0;break;case"'":O=c.charAt(E+1);break;case"0":y=!0;break;case"#":w=!0}if((l=l?"*"==l?+t[n++]:"*"==l.charAt(0)?+t[l.slice(1,-1)]:+l:0)<0&&(l=-l,_=!0),!isFinite(l))throw new Error("sprintf: (minimum-)width must be finite");switch(h=h?"*"==h?+t[n++]:"*"==h.charAt(0)?+t[h.slice(1,-1)]:+h:"fFeE".indexOf(d)>-1?6:"d"==d?0:void 0,v=i?t[i.slice(0,-1)]:t[n++],d){case"s":return s(String(v),_,l,h,y,O);case"c":return s(String.fromCharCode(+v),_,l,h,y);case"b":return a(v,2,w,_,l,h,y);case"o":return a(v,8,w,_,l,h,y);case"x":return a(v,16,w,_,l,h,y);case"X":return a(v,16,w,_,l,h,y).toUpperCase();case"u":return a(v,10,w,_,l,h,y);case"i":case"d":return f=+v||0,v=(p=(f=Math.round(f-f%1))<0?"-":b)+r(String(Math.abs(f)),h,"0",!1),o(v,p,_,l,y);case"e":case"E":case"f":case"F":case"g":case"G":return p=(f=+v)<0?"-":b,m=["toExponential","toFixed","toPrecision"]["efg".indexOf(d.toLowerCase())],g=["toString","toUpperCase"]["eEfFgG".indexOf(d)%2],v=p+Math.abs(f)[m](h),o(v,p,_,l,y)[g]();default:return e}};return i.replace(e,c)};var Bi=function(e,t,n,i,r,o,a,s){this.year=e,this.month=t,this.day=n,this.hour=i,this.minute=r,this.second=o,this.millisecond=a,this.isLeapSecond=s};var Hi=function(e){if(null===e||isNaN(e))throw new a.a("year is required and must be a number.");return e%4===0&&e%100!==0||e%400===0};var Vi=function(e,t){this.julianDate=e,this.offset=t},Ui=Object.freeze({SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:2400000.5}),Wi=Object.freeze({UTC:0,TAI:1}),Gi=new Bi,qi=[31,28,31,30,31,30,31,31,30,31,30,31];function Yi(e,t){return lr.compare(e.julianDate,t.julianDate)}var $i=new Vi;function Xi(e){$i.julianDate=e;var t=lr.leapSeconds,n=Ni(t,$i,Yi);n<0&&(n=~n),n>=t.length&&(n=t.length-1);var i=t[n].offset;n>0&&(lr.secondsDifference(t[n].julianDate,e)>i&&(i=t[--n].offset));lr.addSeconds(e,i,e)}function Ki(e,t){$i.julianDate=e;var n=lr.leapSeconds,i=Ni(n,$i,Yi);if(i<0&&(i=~i),0===i)return lr.addSeconds(e,-n[0].offset,t);if(i>=n.length)return lr.addSeconds(e,-n[i-1].offset,t);var r=lr.secondsDifference(n[i].julianDate,e);return 0===r?lr.addSeconds(e,-n[i].offset,t):r<=1?void 0:lr.addSeconds(e,-n[--i].offset,t)}function Qi(e,t,n){var i=t/Ui.SECONDS_PER_DAY|0;return e+=i,(t-=Ui.SECONDS_PER_DAY*i)<0&&(e--,t+=Ui.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function Zi(e,t,n,i,r,o,a){var s=(t-14)/12|0,c=e+4800+s,l=(1461*c/4|0)+(367*(t-2-12*s)/12|0)-(3*((c+100)/100|0)/4|0)+n-32075;(i-=12)<0&&(i+=24);var u=o+(i*Ui.SECONDS_PER_HOUR+r*Ui.SECONDS_PER_MINUTE+a*Ui.SECONDS_PER_MILLISECOND);return u>=43200&&(l-=1),[l,u]}var Ji=/^(\d{4})$/,er=/^(\d{4})-(\d{2})$/,tr=/^(\d{4})-?(\d{3})$/,nr=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,ir=/^(\d{4})-?(\d{2})-?(\d{2})$/,rr=/([Z+\-])?(\d{2})?:?(\d{2})?$/,or=/^(\d{2})(\.\d+)?/.source+rr.source,ar=/^(\d{2}):?(\d{2})(\.\d+)?/.source+rr.source,sr=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+rr.source,cr="Invalid ISO 8601 date.";function lr(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=Object(r.a)(e,0),t=Object(r.a)(t,0),n=Object(r.a)(n,Wi.UTC);var i=0|e;Qi(i,t+=(e-i)*Ui.SECONDS_PER_DAY,this),n===Wi.UTC&&Xi(this)}lr.fromGregorianDate=function(e,t){if(!(e instanceof Bi))throw new a.a("date must be a valid GregorianDate.");var n=Zi(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return Object(o.a)(t)?(Qi(n[0],n[1],t),Xi(t),t):new lr(n[0],n[1],Wi.UTC)},lr.fromDate=function(e,t){if(!(e instanceof Date)||isNaN(e.getTime()))throw new a.a("date must be a valid JavaScript Date.");var n=Zi(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return Object(o.a)(t)?(Qi(n[0],n[1],t),Xi(t),t):new lr(n[0],n[1],Wi.UTC)},lr.fromIso8601=function(e,t){if("string"!==typeof e)throw new a.a(cr);var n,i,r,s,c,l=(e=e.replace(",",".")).split("T"),u=1,h=1,d=0,f=0,p=0,m=0,g=l[0],v=l[1];if(!Object(o.a)(g))throw new a.a(cr);if(null!==(l=g.match(ir))){if((s=g.split("-").length-1)>0&&2!==s)throw new a.a(cr);n=+l[1],u=+l[2],h=+l[3]}else if(null!==(l=g.match(er)))n=+l[1],u=+l[2];else if(null!==(l=g.match(Ji)))n=+l[1];else{var _;if(null!==(l=g.match(tr))){if(n=+l[1],_=+l[2],r=Hi(n),_<1||r&&_>366||!r&&_>365)throw new a.a(cr)}else{if(null===(l=g.match(nr)))throw new a.a(cr);n=+l[1];var b=+l[2],y=+l[3]||0;if((s=g.split("-").length-1)>0&&(!Object(o.a)(l[3])&&1!==s||Object(o.a)(l[3])&&2!==s))throw new a.a(cr);_=7*b+y-new Date(Date.UTC(n,0,4)).getUTCDay()-3}(i=new Date(Date.UTC(n,0,1))).setUTCDate(_),u=i.getUTCMonth()+1,h=i.getUTCDate()}if(r=Hi(n),u<1||u>12||h<1||(2!==u||!r)&&h>qi[u-1]||r&&2===u&&h>29)throw new a.a(cr);if(Object(o.a)(v)){if(null!==(l=v.match(sr))){if((s=v.split(":").length-1)>0&&2!==s&&3!==s)throw new a.a(cr);d=+l[1],f=+l[2],p=+l[3],m=1e3*+(l[4]||0),c=5}else if(null!==(l=v.match(ar))){if((s=v.split(":").length-1)>2)throw new a.a(cr);d=+l[1],f=+l[2],p=60*+(l[3]||0),c=4}else{if(null===(l=v.match(or)))throw new a.a(cr);d=+l[1],f=60*+(l[2]||0),c=3}if(f>=60||p>=61||d>24||24===d&&(f>0||p>0||m>0))throw new a.a(cr);var w=l[c],O=+l[c+1],C=+(l[c+2]||0);switch(w){case"+":d-=O,f-=C;break;case"-":d+=O,f+=C;break;case"Z":break;default:f+=new Date(Date.UTC(n,u-1,h,d,f)).getTimezoneOffset()}}var E=60===p;for(E&&p--;f>=60;)f-=60,d++;for(;d>=24;)d-=24,h++;for(i=r&&2===u?29:qi[u-1];h>i;)h-=i,++u>12&&(u-=12,n++),i=r&&2===u?29:qi[u-1];for(;f<0;)f+=60,d--;for(;d<0;)d+=24,h--;for(;h<1;)--u<1&&(u+=12,n--),h+=i=r&&2===u?29:qi[u-1];var A=Zi(n,u,h,d,f,p,m);return Object(o.a)(t)?(Qi(A[0],A[1],t),Xi(t)):t=new lr(A[0],A[1],Wi.UTC),E&&lr.addSeconds(t,1,t),t},lr.now=function(e){return lr.fromDate(new Date,e)};var ur=new lr(0,0,Wi.TAI);lr.toGregorianDate=function(e,t){if(!Object(o.a)(e))throw new a.a("julianDate is required.");var n=!1,i=Ki(e,ur);Object(o.a)(i)||(lr.addSeconds(e,-1,ur),i=Ki(ur,ur),n=!0);var r=i.dayNumber,s=i.secondsOfDay;s>=43200&&(r+=1);var c=r+68569|0,l=4*c/146097|0,u=4e3*((c=c-((146097*l+3)/4|0)|0)+1)/1461001|0,h=80*(c=c-(1461*u/4|0)+31|0)/2447|0,d=c-(2447*h/80|0)|0,f=h+2-12*(c=h/11|0)|0,p=100*(l-49)+u+c|0,m=s/Ui.SECONDS_PER_HOUR|0,g=s-m*Ui.SECONDS_PER_HOUR,v=g/Ui.SECONDS_PER_MINUTE|0,_=0|(g-=v*Ui.SECONDS_PER_MINUTE),b=(g-_)/Ui.SECONDS_PER_MILLISECOND;return(m+=12)>23&&(m-=24),n&&(_+=1),Object(o.a)(t)?(t.year=p,t.month=f,t.day=d,t.hour=m,t.minute=v,t.second=_,t.millisecond=b,t.isLeapSecond=n,t):new Bi(p,f,d,m,v,_,b,n)},lr.toDate=function(e){if(!Object(o.a)(e))throw new a.a("julianDate is required.");var t=lr.toGregorianDate(e,Gi),n=t.second;return t.isLeapSecond&&(n-=1),new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,n,t.millisecond))},lr.toIso8601=function(e,t){if(!Object(o.a)(e))throw new a.a("julianDate is required.");var n,i=lr.toGregorianDate(e,Gi),r=i.year,s=i.month,c=i.day,l=i.hour,u=i.minute,h=i.second,d=i.millisecond;return 1e4===r&&1===s&&1===c&&0===l&&0===u&&0===h&&0===d&&(r=9999,s=12,c=31,l=24),Object(o.a)(t)||0===d?Object(o.a)(t)&&0!==t?(n=(.01*d).toFixed(t).replace(".","").slice(0,t),ki("%04d-%02d-%02dT%02d:%02d:%02d.%sZ",r,s,c,l,u,h,n)):ki("%04d-%02d-%02dT%02d:%02d:%02dZ",r,s,c,l,u,h):(n=(.01*d).toString().replace(".",""),ki("%04d-%02d-%02dT%02d:%02d:%02d.%sZ",r,s,c,l,u,h,n))},lr.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new lr(e.dayNumber,e.secondsOfDay,Wi.TAI)},lr.compare=function(e,t){if(!Object(o.a)(e))throw new a.a("left is required.");if(!Object(o.a)(t))throw new a.a("right is required.");var n=e.dayNumber-t.dayNumber;return 0!==n?n:e.secondsOfDay-t.secondsOfDay},lr.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay},lr.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(lr.secondsDifference(e,t))<=n},lr.totalDays=function(e){if(!Object(o.a)(e))throw new a.a("julianDate is required.");return e.dayNumber+e.secondsOfDay/Ui.SECONDS_PER_DAY},lr.secondsDifference=function(e,t){if(!Object(o.a)(e))throw new a.a("left is required.");if(!Object(o.a)(t))throw new a.a("right is required.");return(e.dayNumber-t.dayNumber)*Ui.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)},lr.daysDifference=function(e,t){if(!Object(o.a)(e))throw new a.a("left is required.");if(!Object(o.a)(t))throw new a.a("right is required.");return e.dayNumber-t.dayNumber+(e.secondsOfDay-t.secondsOfDay)/Ui.SECONDS_PER_DAY},lr.computeTaiMinusUtc=function(e){$i.julianDate=e;var t=lr.leapSeconds,n=Ni(t,$i,Yi);return n<0&&(n=~n,--n<0&&(n=0)),t[n].offset},lr.addSeconds=function(e,t,n){if(!Object(o.a)(e))throw new a.a("julianDate is required.");if(!Object(o.a)(t))throw new a.a("seconds is required.");if(!Object(o.a)(n))throw new a.a("result is required.");return Qi(e.dayNumber,e.secondsOfDay+t,n)},lr.addMinutes=function(e,t,n){if(!Object(o.a)(e))throw new a.a("julianDate is required.");if(!Object(o.a)(t))throw new a.a("minutes is required.");if(!Object(o.a)(n))throw new a.a("result is required.");var i=e.secondsOfDay+t*Ui.SECONDS_PER_MINUTE;return Qi(e.dayNumber,i,n)},lr.addHours=function(e,t,n){if(!Object(o.a)(e))throw new a.a("julianDate is required.");if(!Object(o.a)(t))throw new a.a("hours is required.");if(!Object(o.a)(n))throw new a.a("result is required.");var i=e.secondsOfDay+t*Ui.SECONDS_PER_HOUR;return Qi(e.dayNumber,i,n)},lr.addDays=function(e,t,n){if(!Object(o.a)(e))throw new a.a("julianDate is required.");if(!Object(o.a)(t))throw new a.a("days is required.");if(!Object(o.a)(n))throw new a.a("result is required.");return Qi(e.dayNumber+t,e.secondsOfDay,n)},lr.lessThan=function(e,t){return lr.compare(e,t)<0},lr.lessThanOrEquals=function(e,t){return lr.compare(e,t)<=0},lr.greaterThan=function(e,t){return lr.compare(e,t)>0},lr.greaterThanOrEquals=function(e,t){return lr.compare(e,t)>=0},lr.prototype.clone=function(e){return lr.clone(this,e)},lr.prototype.equals=function(e){return lr.equals(this,e)},lr.prototype.equalsEpsilon=function(e,t){return lr.equalsEpsilon(this,e,t)},lr.prototype.toString=function(){return lr.toIso8601(this)},lr.leapSeconds=[new Vi(new lr(2441317,43210,Wi.TAI),10),new Vi(new lr(2441499,43211,Wi.TAI),11),new Vi(new lr(2441683,43212,Wi.TAI),12),new Vi(new lr(2442048,43213,Wi.TAI),13),new Vi(new lr(2442413,43214,Wi.TAI),14),new Vi(new lr(2442778,43215,Wi.TAI),15),new Vi(new lr(2443144,43216,Wi.TAI),16),new Vi(new lr(2443509,43217,Wi.TAI),17),new Vi(new lr(2443874,43218,Wi.TAI),18),new Vi(new lr(2444239,43219,Wi.TAI),19),new Vi(new lr(2444786,43220,Wi.TAI),20),new Vi(new lr(2445151,43221,Wi.TAI),21),new Vi(new lr(2445516,43222,Wi.TAI),22),new Vi(new lr(2446247,43223,Wi.TAI),23),new Vi(new lr(2447161,43224,Wi.TAI),24),new Vi(new lr(2447892,43225,Wi.TAI),25),new Vi(new lr(2448257,43226,Wi.TAI),26),new Vi(new lr(2448804,43227,Wi.TAI),27),new Vi(new lr(2449169,43228,Wi.TAI),28),new Vi(new lr(2449534,43229,Wi.TAI),29),new Vi(new lr(2450083,43230,Wi.TAI),30),new Vi(new lr(2450630,43231,Wi.TAI),31),new Vi(new lr(2451179,43232,Wi.TAI),32),new Vi(new lr(2453736,43233,Wi.TAI),33),new Vi(new lr(2454832,43234,Wi.TAI),34),new Vi(new lr(2456109,43235,Wi.TAI),35),new Vi(new lr(2457204,43236,Wi.TAI),36),new Vi(new lr(2457754,43237,Wi.TAI),37)];var hr=lr;function dr(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._downloadPromise=void 0,this._dataError=void 0,this._addNewLeapSeconds=Object(r.a)(e.addNewLeapSeconds,!0),Object(o.a)(e.data))pr(this,e.data);else if(Object(o.a)(e.url)){var t=_t.a.createIfNeeded(e.url),n=this;this._downloadPromise=t.fetchJson().then((function(e){pr(n,e)})).otherwise((function(){n._dataError="An error occurred while retrieving the EOP data from the URL "+t.url+"."}))}else pr(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}function fr(e,t){return hr.compare(e.julianDate,t)}function pr(e,t){if(Object(o.a)(t.columnNames))if(Object(o.a)(t.samples)){var n=t.columnNames.indexOf("modifiedJulianDateUtc"),i=t.columnNames.indexOf("xPoleWanderRadians"),r=t.columnNames.indexOf("yPoleWanderRadians"),a=t.columnNames.indexOf("ut1MinusUtcSeconds"),s=t.columnNames.indexOf("xCelestialPoleOffsetRadians"),c=t.columnNames.indexOf("yCelestialPoleOffsetRadians"),l=t.columnNames.indexOf("taiMinusUtcSeconds");if(n<0||i<0||r<0||a<0||s<0||c<0||l<0)e._dataError="Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns";else{var u,h=e._samples=t.samples,d=e._dates=[];e._dateColumn=n,e._xPoleWanderRadiansColumn=i,e._yPoleWanderRadiansColumn=r,e._ut1MinusUtcSecondsColumn=a,e._xCelestialPoleOffsetRadiansColumn=s,e._yCelestialPoleOffsetRadiansColumn=c,e._taiMinusUtcSecondsColumn=l,e._columnCount=t.columnNames.length,e._lastIndex=void 0;for(var f=e._addNewLeapSeconds,p=0,m=h.length;p<m;p+=e._columnCount){var g=h[p+n],v=h[p+l],_=g+Ui.MODIFIED_JULIAN_DATE_DIFFERENCE,b=new hr(_,v,Wi.TAI);if(d.push(b),f){if(v!==u&&Object(o.a)(u)){var y=hr.leapSeconds,w=Ni(y,b,fr);if(w<0){var O=new Vi(b,v);y.splice(~w,0,O)}}u=v}}}}else e._dataError="Error in loaded EOP data: The samples property is required.";else e._dataError="Error in loaded EOP data: The columnNames property is required."}function mr(e,t,n,i,r){var o=n*i;r.xPoleWander=t[o+e._xPoleWanderRadiansColumn],r.yPoleWander=t[o+e._yPoleWanderRadiansColumn],r.xPoleOffset=t[o+e._xCelestialPoleOffsetRadiansColumn],r.yPoleOffset=t[o+e._yCelestialPoleOffsetRadiansColumn],r.ut1MinusUtc=t[o+e._ut1MinusUtcSecondsColumn]}function gr(e,t,n){return t+e*(n-t)}function vr(e,t,n,i,r,o,a){var s=e._columnCount;if(o>t.length-1)return a.xPoleWander=0,a.yPoleWander=0,a.xPoleOffset=0,a.yPoleOffset=0,a.ut1MinusUtc=0,a;var c=t[r],l=t[o];if(c.equals(l)||i.equals(c))return mr(e,n,r,s,a),a;if(i.equals(l))return mr(e,n,o,s,a),a;var u=hr.secondsDifference(i,c)/hr.secondsDifference(l,c),h=r*s,d=o*s,f=n[h+e._ut1MinusUtcSecondsColumn],p=n[d+e._ut1MinusUtcSecondsColumn],m=p-f;if(m>.5||m<-.5){var g=n[h+e._taiMinusUtcSecondsColumn],v=n[d+e._taiMinusUtcSecondsColumn];g!==v&&(l.equals(i)?f=p:p-=v-g)}return a.xPoleWander=gr(u,n[h+e._xPoleWanderRadiansColumn],n[d+e._xPoleWanderRadiansColumn]),a.yPoleWander=gr(u,n[h+e._yPoleWanderRadiansColumn],n[d+e._yPoleWanderRadiansColumn]),a.xPoleOffset=gr(u,n[h+e._xCelestialPoleOffsetRadiansColumn],n[d+e._xCelestialPoleOffsetRadiansColumn]),a.yPoleOffset=gr(u,n[h+e._yCelestialPoleOffsetRadiansColumn],n[d+e._yCelestialPoleOffsetRadiansColumn]),a.ut1MinusUtc=gr(u,f,p),a}dr.NONE=Object.freeze({getPromiseToLoad:function(){return Yt.a.resolve()},compute:function(e,t){return Object(o.a)(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new zi(0,0,0,0,0),t}}),dr.prototype.getPromiseToLoad=function(){return Object(Yt.a)(this._downloadPromise)},dr.prototype.compute=function(e,t){if(Object(o.a)(this._samples)){if(Object(o.a)(t)||(t=new zi(0,0,0,0,0)),0===this._samples.length)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;var n=this._dates,i=this._lastIndex,r=0,a=0;if(Object(o.a)(i)){var s=n[i],c=n[i+1],l=hr.lessThanOrEquals(s,e),u=!Object(o.a)(c),h=u||hr.greaterThanOrEquals(c,e);if(l&&h)return r=i,!u&&c.equals(e)&&++r,a=r+1,vr(this,n,this._samples,e,r,a,t),t}var d=Ni(n,e,hr.compare,this._dateColumn);return d>=0?(d<n.length-1&&n[d+1].equals(e)&&++d,r=d,a=d):(r=(a=~d)-1)<0&&(r=0),this._lastIndex=r,vr(this,n,this._samples,e,r,a,t),t}if(Object(o.a)(this._dataError))throw new de.a(this._dataError)};var _r=dr;function br(e,t,n){this.heading=Object(r.a)(e,0),this.pitch=Object(r.a)(t,0),this.roll=Object(r.a)(n,0)}br.fromQuaternion=function(e,t){if(!Object(o.a)(e))throw new a.a("quaternion is required");Object(o.a)(t)||(t=new br);var n=2*(e.w*e.y-e.z*e.x),i=1-2*(e.x*e.x+e.y*e.y),r=2*(e.w*e.x+e.y*e.z),s=1-2*(e.y*e.y+e.z*e.z),c=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(c,s),t.roll=Math.atan2(r,i),t.pitch=-d.asinClamped(n),t},br.fromDegrees=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("heading is required");if(!Object(o.a)(t))throw new a.a("pitch is required");if(!Object(o.a)(n))throw new a.a("roll is required");return Object(o.a)(i)||(i=new br),i.heading=e*d.RADIANS_PER_DEGREE,i.pitch=t*d.RADIANS_PER_DEGREE,i.roll=n*d.RADIANS_PER_DEGREE,i},br.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new br(e.heading,e.pitch,e.roll)},br.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll},br.equalsEpsilon=function(e,t,n,i){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&d.equalsEpsilon(e.heading,t.heading,n,i)&&d.equalsEpsilon(e.pitch,t.pitch,n,i)&&d.equalsEpsilon(e.roll,t.roll,n,i)},br.prototype.clone=function(e){return br.clone(this,e)},br.prototype.equals=function(e){return br.equals(this,e)},br.prototype.equalsEpsilon=function(e,t,n){return br.equalsEpsilon(this,e,t,n)},br.prototype.toString=function(){return"("+this.heading+", "+this.pitch+", "+this.roll+")"};var yr=br;var wr=function(e,t,n){this.x=e,this.y=t,this.s=n};function Or(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._xysFileUrlTemplate=_t.a.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=Object(r.a)(e.interpolationOrder,9),this._sampleZeroJulianEphemerisDate=Object(r.a)(e.sampleZeroJulianEphemerisDate,2442396.5),this._sampleZeroDateTT=new hr(this._sampleZeroJulianEphemerisDate,0,Wi.TAI),this._stepSizeDays=Object(r.a)(e.stepSizeDays,1),this._samplesPerXysFile=Object(r.a)(e.samplesPerXysFile,1e3),this._totalSamples=Object(r.a)(e.totalSamples,27426),this._samples=new Array(3*this._totalSamples),this._chunkDownloadsInProgress=[];for(var t=this._interpolationOrder,n=this._denominators=new Array(t+1),i=this._xTable=new Array(t+1),o=Math.pow(this._stepSizeDays,t),a=0;a<=t;++a){n[a]=o,i[a]=a*this._stepSizeDays;for(var s=0;s<=t;++s)s!==a&&(n[a]*=a-s);n[a]=1/n[a]}this._work=new Array(t+1),this._coef=new Array(t+1)}var Cr=new hr(0,0,Wi.TAI);function Er(e,t,n){var i=Cr;return i.dayNumber=t,i.secondsOfDay=n,hr.daysDifference(i,e._sampleZeroDateTT)}function Ar(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];var n,i=Yt.a.defer();e._chunkDownloadsInProgress[t]=i;var r=e._xysFileUrlTemplate;return n=Object(o.a)(r)?r.getDerivedResource({templateValues:{0:t}}):new _t.a({url:At("Assets/IAU2006_XYS/IAU2006_XYS_"+t+".json")}),Object(Yt.a)(n.fetchJson(),(function(n){e._chunkDownloadsInProgress[t]=!1;for(var r=e._samples,o=n.samples,a=t*e._samplesPerXysFile*3,s=0,c=o.length;s<c;++s)r[a+s]=o[s];i.resolve()})),i.promise}Or.prototype.preload=function(e,t,n,i){var r=Er(this,e,t),o=Er(this,n,i),a=r/this._stepSizeDays-this._interpolationOrder/2|0;a<0&&(a=0);var s=o/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;s>=this._totalSamples&&(s=this._totalSamples-1);for(var c=a/this._samplesPerXysFile|0,l=s/this._samplesPerXysFile|0,u=[],h=c;h<=l;++h)u.push(Ar(this,h));return Yt.a.all(u)},Or.prototype.computeXysRadians=function(e,t,n){var i=Er(this,e,t);if(!(i<0)){var r=i/this._stepSizeDays|0;if(!(r>=this._totalSamples)){var a=this._interpolationOrder,s=r-(a/2|0);s<0&&(s=0);var c=s+a;c>=this._totalSamples&&(s=(c=this._totalSamples-1)-a)<0&&(s=0);var l=!1,u=this._samples;if(Object(o.a)(u[3*s])||(Ar(this,s/this._samplesPerXysFile|0),l=!0),Object(o.a)(u[3*c])||(Ar(this,c/this._samplesPerXysFile|0),l=!0),!l){Object(o.a)(n)?(n.x=0,n.y=0,n.s=0):n=new wr(0,0,0);var h,d,f=i-s*this._stepSizeDays,p=this._work,m=this._denominators,g=this._coef,v=this._xTable;for(h=0;h<=a;++h)p[h]=f-v[h];for(h=0;h<=a;++h){for(g[h]=1,d=0;d<=a;++d)d!==h&&(g[h]*=p[d]);g[h]*=m[h];var _=3*(s+h);n.x+=g[h]*u[_++],n.y+=g[h]*u[_++],n.s+=g[h]*u[_]}return n}}}};var xr,Tr=Or,Sr={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},Dr={};Object.defineProperties(Dr,{element:{get:function(){if(Dr.supportsFullscreen())return document[Sr.fullscreenElement]}},changeEventName:{get:function(){if(Dr.supportsFullscreen())return Sr.fullscreenchange}},errorEventName:{get:function(){if(Dr.supportsFullscreen())return Sr.fullscreenerror}},enabled:{get:function(){if(Dr.supportsFullscreen())return document[Sr.fullscreenEnabled]}},fullscreen:{get:function(){if(Dr.supportsFullscreen())return null!==Dr.element}}}),Dr.supportsFullscreen=function(){if(Object(o.a)(xr))return xr;xr=!1;var e=document.body;if("function"===typeof e.requestFullscreen)return Sr.requestFullscreen="requestFullscreen",Sr.exitFullscreen="exitFullscreen",Sr.fullscreenEnabled="fullscreenEnabled",Sr.fullscreenElement="fullscreenElement",Sr.fullscreenchange="fullscreenchange",Sr.fullscreenerror="fullscreenerror",xr=!0;for(var t,n=["webkit","moz","o","ms","khtml"],i=0,r=n.length;i<r;++i){var a=n[i];("function"===typeof e[t=a+"RequestFullscreen"]||"function"===typeof e[t=a+"RequestFullScreen"])&&(Sr.requestFullscreen=t,xr=!0),t=a+"ExitFullscreen","function"===typeof document[t]?Sr.exitFullscreen=t:(t=a+"CancelFullScreen","function"===typeof document[t]&&(Sr.exitFullscreen=t)),t=a+"FullscreenEnabled",void 0!==document[t]?Sr.fullscreenEnabled=t:(t=a+"FullScreenEnabled",void 0!==document[t]&&(Sr.fullscreenEnabled=t)),t=a+"FullscreenElement",void 0!==document[t]?Sr.fullscreenElement=t:(t=a+"FullScreenElement",void 0!==document[t]&&(Sr.fullscreenElement=t)),t=a+"fullscreenchange",void 0!==document["on"+t]&&("ms"===a&&(t="MSFullscreenChange"),Sr.fullscreenchange=t),t=a+"fullscreenerror",void 0!==document["on"+t]&&("ms"===a&&(t="MSFullscreenError"),Sr.fullscreenerror=t)}return xr},Dr.requestFullscreen=function(e,t){Dr.supportsFullscreen()&&e[Sr.requestFullscreen]({vrDisplay:t})},Dr.exitFullscreen=function(){Dr.supportsFullscreen()&&document[Sr.exitFullscreen]()},Dr._names=Sr;var Pr,Ir,Mr,Rr,Lr,jr,Fr,Nr,zr,kr,Br,Hr,Vr,Ur,Wr,Gr,qr,Yr=Dr;function $r(e){for(var t=e.split("."),n=0,i=t.length;n<i;++n)t[n]=parseInt(t[n],10);return t}function Xr(){if(!Object(o.a)(Ir)&&(Ir=!1,!Jr())){var e=/ Chrome\/([\.0-9]+)/.exec(Pr.userAgent);null!==e&&(Ir=!0,Mr=$r(e[1]))}return Ir}function Kr(){if(!Object(o.a)(Rr)&&(Rr=!1,!Xr()&&!Jr()&&/ Safari\/[\.0-9]+/.test(Pr.userAgent))){var e=/ Version\/([\.0-9]+)/.exec(Pr.userAgent);null!==e&&(Rr=!0,Lr=$r(e[1]))}return Rr}function Qr(){if(!Object(o.a)(jr)){jr=!1;var e=/ AppleWebKit\/([\.0-9]+)(\+?)/.exec(Pr.userAgent);null!==e&&(jr=!0,(Fr=$r(e[1])).isNightly=!!e[2])}return jr}function Zr(){var e;Object(o.a)(Nr)||(Nr=!1,"Microsoft Internet Explorer"===Pr.appName?null!==(e=/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(Pr.userAgent))&&(Nr=!0,zr=$r(e[1])):"Netscape"===Pr.appName&&null!==(e=/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(Pr.userAgent))&&(Nr=!0,zr=$r(e[1])));return Nr}function Jr(){if(!Object(o.a)(kr)){kr=!1;var e=/ Edge\/([\.0-9]+)/.exec(Pr.userAgent);null!==e&&(kr=!0,Br=$r(e[1]))}return kr}function eo(){if(!Object(o.a)(Hr)){Hr=!1;var e=/Firefox\/([\.0-9]+)/.exec(Pr.userAgent);null!==e&&(Hr=!0,Vr=$r(e[1]))}return Hr}function to(){if(!Object(o.a)(qr)){var e=document.createElement("canvas");e.setAttribute("style","image-rendering: -moz-crisp-edges;image-rendering: pixelated;");var t=e.style.imageRendering;(qr=Object(o.a)(t)&&""!==t)&&(Gr=t)}return qr}function no(){if(!no.initialized)throw new a.a("You must call FeatureDetection.supportsWebP.initialize and wait for the promise to resolve before calling FeatureDetection.supportsWebP");return no._result}Pr="undefined"!==typeof navigator?navigator:{},no._promise=void 0,no._result=void 0,no.initialize=function(){if(Object(o.a)(no._promise))return no._promise;var e=Yt.a.defer();if(no._promise=e.promise,Jr())return no._result=!1,e.resolve(no._result),e.promise;var t=new Image;return t.onload=function(){no._result=t.width>0&&t.height>0,e.resolve(no._result)},t.onerror=function(){no._result=!1,e.resolve(no._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.promise},Object.defineProperties(no,{initialized:{get:function(){return Object(o.a)(no._result)}}});var io=[];"undefined"!==typeof ArrayBuffer&&(io.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),"undefined"!==typeof Uint8ClampedArray&&io.push(Uint8ClampedArray),"undefined"!==typeof Uint8ClampedArray&&io.push(Uint8ClampedArray));var ro={isChrome:Xr,chromeVersion:function(){return Xr()&&Mr},isSafari:Kr,safariVersion:function(){return Kr()&&Lr},isWebkit:Qr,webkitVersion:function(){return Qr()&&Fr},isInternetExplorer:Zr,internetExplorerVersion:function(){return Zr()&&zr},isEdge:Jr,edgeVersion:function(){return Jr()&&Br},isFirefox:eo,firefoxVersion:function(){return eo()&&Vr},isWindows:function(){return Object(o.a)(Ur)||(Ur=/Windows/i.test(Pr.appVersion)),Ur},hardwareConcurrency:Object(r.a)(Pr.hardwareConcurrency,3),supportsPointerEvents:function(){return Object(o.a)(Wr)||(Wr=!eo()&&"undefined"!==typeof PointerEvent&&(!Object(o.a)(Pr.pointerEnabled)||Pr.pointerEnabled)),Wr},supportsImageRenderingPixelated:to,supportsWebP:no,imageRenderingValue:function(){return to()?Gr:void 0},typedArrayTypes:io,supportsFullscreen:function(){return Yr.supportsFullscreen()},supportsTypedArrays:function(){return"undefined"!==typeof ArrayBuffer},supportsWebWorkers:function(){return"undefined"!==typeof Worker},supportsWebAssembly:function(){return"undefined"!==typeof WebAssembly&&!ro.isEdge()}},oo=ro;function ao(e,t,n,i){this.x=Object(r.a)(e,0),this.y=Object(r.a)(t,0),this.z=Object(r.a)(n,0),this.w=Object(r.a)(i,0)}var so=new O;ao.fromAxisAngle=function(e,t,n){i.a.typeOf.object("axis",e),i.a.typeOf.number("angle",t);var r=t/2,a=Math.sin(r),s=(so=O.normalize(e,so)).x*a,c=so.y*a,l=so.z*a,u=Math.cos(r);return Object(o.a)(n)?(n.x=s,n.y=c,n.z=l,n.w=u,n):new ao(s,c,l,u)};var co=[1,2,0],lo=new Array(3);ao.fromRotationMatrix=function(e,t){var n,r,a,s,c;i.a.typeOf.object("matrix",e);var l=e[oe.COLUMN0ROW0],u=e[oe.COLUMN1ROW1],h=e[oe.COLUMN2ROW2],d=l+u+h;if(d>0)c=.5*(n=Math.sqrt(d+1)),n=.5/n,r=(e[oe.COLUMN1ROW2]-e[oe.COLUMN2ROW1])*n,a=(e[oe.COLUMN2ROW0]-e[oe.COLUMN0ROW2])*n,s=(e[oe.COLUMN0ROW1]-e[oe.COLUMN1ROW0])*n;else{var f=0;u>l&&(f=1),h>l&&h>u&&(f=2);var p=co[f],m=co[p];n=Math.sqrt(e[oe.getElementIndex(f,f)]-e[oe.getElementIndex(p,p)]-e[oe.getElementIndex(m,m)]+1);var g=lo;g[f]=.5*n,n=.5/n,c=(e[oe.getElementIndex(m,p)]-e[oe.getElementIndex(p,m)])*n,g[p]=(e[oe.getElementIndex(p,f)]+e[oe.getElementIndex(f,p)])*n,g[m]=(e[oe.getElementIndex(m,f)]+e[oe.getElementIndex(f,m)])*n,r=-g[0],a=-g[1],s=-g[2]}return Object(o.a)(t)?(t.x=r,t.y=a,t.z=s,t.w=c,t):new ao(r,a,s,c)};var uo=new ao,ho=new ao,fo=new ao,po=new ao;ao.fromHeadingPitchRoll=function(e,t){return i.a.typeOf.object("headingPitchRoll",e),po=ao.fromAxisAngle(O.UNIT_X,e.roll,uo),fo=ao.fromAxisAngle(O.UNIT_Y,-e.pitch,t),t=ao.multiply(fo,po,fo),ho=ao.fromAxisAngle(O.UNIT_Z,-e.heading,uo),ao.multiply(ho,t,t)};var mo=new O,go=new O,vo=new ao,_o=new ao,bo=new ao;ao.packedLength=4,ao.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t},ao.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new ao),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n},ao.packedInterpolationLength=3,ao.convertPackedArrayForInterpolation=function(e,t,n,i){ao.unpack(e,4*n,bo),ao.conjugate(bo,bo);for(var r=0,a=n-t+1;r<a;r++){var s=3*r;ao.unpack(e,4*(t+r),vo),ao.multiply(vo,bo,vo),vo.w<0&&ao.negate(vo,vo),ao.computeAxis(vo,mo);var c=ao.computeAngle(vo);Object(o.a)(i)||(i=[]),i[s]=mo.x*c,i[s+1]=mo.y*c,i[s+2]=mo.z*c}},ao.unpackInterpolationResult=function(e,t,n,i,r){Object(o.a)(r)||(r=new ao),O.fromArray(e,0,go);var a=O.magnitude(go);return ao.unpack(t,4*i,_o),0===a?ao.clone(ao.IDENTITY,vo):ao.fromAxisAngle(go,a,vo),ao.multiply(vo,_o,r)},ao.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new ao(e.x,e.y,e.z,e.w)},ao.conjugate=function(e,t){return i.a.typeOf.object("quaternion",e),i.a.typeOf.object("result",t),t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=e.w,t},ao.magnitudeSquared=function(e){return i.a.typeOf.object("quaternion",e),e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w},ao.magnitude=function(e){return Math.sqrt(ao.magnitudeSquared(e))},ao.normalize=function(e,t){i.a.typeOf.object("result",t);var n=1/ao.magnitude(e),r=e.x*n,o=e.y*n,a=e.z*n,s=e.w*n;return t.x=r,t.y=o,t.z=a,t.w=s,t},ao.inverse=function(e,t){i.a.typeOf.object("result",t);var n=ao.magnitudeSquared(e);return t=ao.conjugate(e,t),ao.multiplyByScalar(t,1/n,t)},ao.add=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n},ao.subtract=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n},ao.negate=function(e,t){return i.a.typeOf.object("quaternion",e),i.a.typeOf.object("result",t),t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t},ao.dot=function(e,t){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},ao.multiply=function(e,t,n){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n);var r=e.x,o=e.y,a=e.z,s=e.w,c=t.x,l=t.y,u=t.z,h=t.w,d=s*c+r*h+o*u-a*l,f=s*l-r*u+o*h+a*c,p=s*u+r*l-o*c+a*h,m=s*h-r*c-o*l-a*u;return n.x=d,n.y=f,n.z=p,n.w=m,n},ao.multiplyByScalar=function(e,t,n){return i.a.typeOf.object("quaternion",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n},ao.divideByScalar=function(e,t,n){return i.a.typeOf.object("quaternion",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n},ao.computeAxis=function(e,t){i.a.typeOf.object("quaternion",e),i.a.typeOf.object("result",t);var n=e.w;if(Math.abs(n-1)<d.EPSILON6)return t.x=t.y=t.z=0,t;var r=1/Math.sqrt(1-n*n);return t.x=e.x*r,t.y=e.y*r,t.z=e.z*r,t},ao.computeAngle=function(e){return i.a.typeOf.object("quaternion",e),Math.abs(e.w-1)<d.EPSILON6?0:2*Math.acos(e.w)};var yo=new ao;ao.lerp=function(e,t,n,r){return i.a.typeOf.object("start",e),i.a.typeOf.object("end",t),i.a.typeOf.number("t",n),i.a.typeOf.object("result",r),yo=ao.multiplyByScalar(t,n,yo),r=ao.multiplyByScalar(e,1-n,r),ao.add(yo,r,r)};var wo=new ao,Oo=new ao,Co=new ao;ao.slerp=function(e,t,n,r){i.a.typeOf.object("start",e),i.a.typeOf.object("end",t),i.a.typeOf.number("t",n),i.a.typeOf.object("result",r);var o=ao.dot(e,t),a=t;if(o<0&&(o=-o,a=wo=ao.negate(t,wo)),1-o<d.EPSILON6)return ao.lerp(e,a,n,r);var s=Math.acos(o);return Oo=ao.multiplyByScalar(e,Math.sin((1-n)*s),Oo),Co=ao.multiplyByScalar(a,Math.sin(n*s),Co),r=ao.add(Oo,Co,r),ao.multiplyByScalar(r,1/Math.sin(s),r)},ao.log=function(e,t){i.a.typeOf.object("quaternion",e),i.a.typeOf.object("result",t);var n=d.acosClamped(e.w),r=0;return 0!==n&&(r=n/Math.sin(n)),O.multiplyByScalar(e,r,t)},ao.exp=function(e,t){i.a.typeOf.object("cartesian",e),i.a.typeOf.object("result",t);var n=O.magnitude(e),r=0;return 0!==n&&(r=Math.sin(n)/n),t.x=e.x*r,t.y=e.y*r,t.z=e.z*r,t.w=Math.cos(n),t};var Eo=new O,Ao=new O,xo=new ao,To=new ao;ao.computeInnerQuadrangle=function(e,t,n,r){i.a.typeOf.object("q0",e),i.a.typeOf.object("q1",t),i.a.typeOf.object("q2",n),i.a.typeOf.object("result",r);var o=ao.conjugate(t,xo);ao.multiply(o,n,To);var a=ao.log(To,Eo);ao.multiply(o,e,To);var s=ao.log(To,Ao);return O.add(a,s,a),O.multiplyByScalar(a,.25,a),O.negate(a,a),ao.exp(a,xo),ao.multiply(t,xo,r)},ao.squad=function(e,t,n,r,o,a){i.a.typeOf.object("q0",e),i.a.typeOf.object("q1",t),i.a.typeOf.object("s0",n),i.a.typeOf.object("s1",r),i.a.typeOf.number("t",o),i.a.typeOf.object("result",a);var s=ao.slerp(e,t,o,xo),c=ao.slerp(n,r,o,To);return ao.slerp(s,c,2*o*(1-o),a)};for(var So=new ao,Do=1.9011074535173003,Po=oo.supportsTypedArrays()?new Float32Array(8):[],Io=oo.supportsTypedArrays()?new Float32Array(8):[],Mo=oo.supportsTypedArrays()?new Float32Array(8):[],Ro=oo.supportsTypedArrays()?new Float32Array(8):[],Lo=0;Lo<7;++Lo){var jo=Lo+1,Fo=2*jo+1;Po[Lo]=1/(jo*Fo),Io[Lo]=jo/Fo}Po[7]=Do/136,Io[7]=8*Do/17,ao.fastSlerp=function(e,t,n,r){i.a.typeOf.object("start",e),i.a.typeOf.object("end",t),i.a.typeOf.number("t",n),i.a.typeOf.object("result",r);var o,a=ao.dot(e,t);a>=0?o=1:(o=-1,a=-a);for(var s=a-1,c=1-n,l=n*n,u=c*c,h=7;h>=0;--h)Mo[h]=(Po[h]*l-Io[h])*s,Ro[h]=(Po[h]*u-Io[h])*s;var d=o*n*(1+Mo[0]*(1+Mo[1]*(1+Mo[2]*(1+Mo[3]*(1+Mo[4]*(1+Mo[5]*(1+Mo[6]*(1+Mo[7])))))))),f=c*(1+Ro[0]*(1+Ro[1]*(1+Ro[2]*(1+Ro[3]*(1+Ro[4]*(1+Ro[5]*(1+Ro[6]*(1+Ro[7])))))))),p=ao.multiplyByScalar(e,f,So);return ao.multiplyByScalar(t,d,r),ao.add(p,r,r)},ao.fastSquad=function(e,t,n,r,o,a){i.a.typeOf.object("q0",e),i.a.typeOf.object("q1",t),i.a.typeOf.object("s0",n),i.a.typeOf.object("s1",r),i.a.typeOf.number("t",o),i.a.typeOf.object("result",a);var s=ao.fastSlerp(e,t,o,xo),c=ao.fastSlerp(n,r,o,To);return ao.fastSlerp(s,c,2*o*(1-o),a)},ao.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w},ao.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n},ao.ZERO=Object.freeze(new ao(0,0,0,0)),ao.IDENTITY=Object.freeze(new ao(0,0,0,1)),ao.prototype.clone=function(e){return ao.clone(this,e)},ao.prototype.equals=function(e){return ao.equals(this,e)},ao.prototype.equalsEpsilon=function(e,t){return ao.equalsEpsilon(this,e,t)},ao.prototype.toString=function(){return"("+this.x+", "+this.y+", "+this.z+", "+this.w+")"};var No=ao,zo={},ko={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},Bo={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},Ho={},Vo={east:new O,north:new O,up:new O,west:new O,south:new O,down:new O},Uo=new O,Wo=new O,Go=new O;zo.localFrameToFixedFrameGenerator=function(e,t){if(!ko.hasOwnProperty(e)||!ko[e].hasOwnProperty(t))throw new a.a("firstAxis and secondAxis must be east, north, up, west, south or down.");var n,i=ko[e][t],s=e+t;return Object(o.a)(Ho[s])?n=Ho[s]:(n=function(n,s,c){if(!Object(o.a)(n))throw new a.a("origin is required.");if(Object(o.a)(c)||(c=new Ae),O.equalsEpsilon(n,O.ZERO,d.EPSILON14))O.unpack(Bo[e],0,Uo),O.unpack(Bo[t],0,Wo),O.unpack(Bo[i],0,Go);else if(d.equalsEpsilon(n.x,0,d.EPSILON14)&&d.equalsEpsilon(n.y,0,d.EPSILON14)){var l=d.sign(n.z);O.unpack(Bo[e],0,Uo),"east"!==e&&"west"!==e&&O.multiplyByScalar(Uo,l,Uo),O.unpack(Bo[t],0,Wo),"east"!==t&&"west"!==t&&O.multiplyByScalar(Wo,l,Wo),O.unpack(Bo[i],0,Go),"east"!==i&&"west"!==i&&O.multiplyByScalar(Go,l,Go)}else{(s=Object(r.a)(s,W.WGS84)).geodeticSurfaceNormal(n,Vo.up);var u=Vo.up,h=Vo.east;h.x=-n.y,h.y=n.x,h.z=0,O.normalize(h,Vo.east),O.cross(u,h,Vo.north),O.multiplyByScalar(Vo.up,-1,Vo.down),O.multiplyByScalar(Vo.east,-1,Vo.west),O.multiplyByScalar(Vo.north,-1,Vo.south),Uo=Vo[e],Wo=Vo[t],Go=Vo[i]}return c[0]=Uo.x,c[1]=Uo.y,c[2]=Uo.z,c[3]=0,c[4]=Wo.x,c[5]=Wo.y,c[6]=Wo.z,c[7]=0,c[8]=Go.x,c[9]=Go.y,c[10]=Go.z,c[11]=0,c[12]=n.x,c[13]=n.y,c[14]=n.z,c[15]=1,c},Ho[s]=n),n},zo.eastNorthUpToFixedFrame=zo.localFrameToFixedFrameGenerator("east","north"),zo.northEastDownToFixedFrame=zo.localFrameToFixedFrameGenerator("north","east"),zo.northUpEastToFixedFrame=zo.localFrameToFixedFrameGenerator("north","up"),zo.northWestUpToFixedFrame=zo.localFrameToFixedFrameGenerator("north","west");var qo=new No,Yo=new O(1,1,1),$o=new Ae;zo.headingPitchRollToFixedFrame=function(e,t,n,o,a){i.a.typeOf.object("HeadingPitchRoll",t),o=Object(r.a)(o,zo.eastNorthUpToFixedFrame);var s=No.fromHeadingPitchRoll(t,qo),c=Ae.fromTranslationQuaternionRotationScale(O.ZERO,s,Yo,$o);return a=o(e,n,a),Ae.multiply(a,c,a)};var Xo=new Ae,Ko=new oe;zo.headingPitchRollQuaternion=function(e,t,n,r,o){i.a.typeOf.object("HeadingPitchRoll",t);var a=zo.headingPitchRollToFixedFrame(e,t,n,r,Xo),s=Ae.getMatrix3(a,Ko);return No.fromRotationMatrix(s,o)};var Qo=new O(1,1,1),Zo=new O,Jo=new Ae,ea=new Ae,ta=new oe,na=new No;zo.fixedFrameToHeadingPitchRoll=function(e,t,n,a){i.a.defined("transform",e),t=Object(r.a)(t,W.WGS84),n=Object(r.a)(n,zo.eastNorthUpToFixedFrame),Object(o.a)(a)||(a=new yr);var s=Ae.getTranslation(e,Zo);if(O.equals(s,O.ZERO))return a.heading=0,a.pitch=0,a.roll=0,a;var c=Ae.inverseTransformation(n(s,t,Jo),Jo),l=Ae.setScale(e,Qo,ea);l=Ae.setTranslation(l,O.ZERO,l),c=Ae.multiply(c,l,c);var u=No.fromRotationMatrix(Ae.getMatrix3(c,ta),na);return u=No.normalize(u,u),yr.fromQuaternion(u,a)};var ia=d.TWO_PI/86400,ra=new hr;zo.computeTemeToPseudoFixedMatrix=function(e,t){if(!Object(o.a)(e))throw new a.a("date is required.");var n,i=(ra=hr.addSeconds(e,-hr.computeTaiMinusUtc(e),ra)).dayNumber,r=ra.secondsOfDay,s=i-2451545,c=(24110.54841+(n=r>=43200?(s+.5)/Ui.DAYS_PER_JULIAN_CENTURY:(s-.5)/Ui.DAYS_PER_JULIAN_CENTURY)*(8640184.812866+n*(.093104+-62e-7*n)))*ia%d.TWO_PI+(72921158553e-15+11772758384668e-32*(i-2451545.5))*((r+.5*Ui.SECONDS_PER_DAY)%Ui.SECONDS_PER_DAY),l=Math.cos(c),u=Math.sin(c);return Object(o.a)(t)?(t[0]=l,t[1]=-u,t[2]=0,t[3]=u,t[4]=l,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new oe(l,u,0,-u,l,0,0,0,1)},zo.iau2006XysData=new Tr,zo.earthOrientationParameters=_r.NONE;zo.preloadIcrfFixed=function(e){var t=e.start.dayNumber,n=e.start.secondsOfDay+32.184,i=e.stop.dayNumber,r=e.stop.secondsOfDay+32.184,o=zo.iau2006XysData.preload(t,n,i,r),a=zo.earthOrientationParameters.getPromiseToLoad();return Yt.a.all([o,a])},zo.computeIcrfToFixedMatrix=function(e,t){if(!Object(o.a)(e))throw new a.a("date is required.");Object(o.a)(t)||(t=new oe);var n=zo.computeFixedToIcrfMatrix(e,t);if(Object(o.a)(n))return oe.transpose(n,t)};var oa=new wr(0,0,0),aa=new zi(0,0,0,0,0,0),sa=new oe,ca=new oe;zo.computeFixedToIcrfMatrix=function(e,t){if(!Object(o.a)(e))throw new a.a("date is required.");Object(o.a)(t)||(t=new oe);var n=zo.earthOrientationParameters.compute(e,aa);if(Object(o.a)(n)){var i=e.dayNumber,r=e.secondsOfDay+32.184,s=zo.iau2006XysData.computeXysRadians(i,r,oa);if(Object(o.a)(s)){var c=s.x+n.xPoleOffset,l=s.y+n.yPoleOffset,u=1/(1+Math.sqrt(1-c*c-l*l)),h=sa;h[0]=1-u*c*c,h[3]=-u*c*l,h[6]=c,h[1]=-u*c*l,h[4]=1-u*l*l,h[7]=l,h[2]=-c,h[5]=-l,h[8]=1-u*(c*c+l*l);var f=oe.fromRotationZ(-s.s,ca),p=oe.multiply(h,f,sa),m=e.dayNumber-2451545,g=(e.secondsOfDay-hr.computeTaiMinusUtc(e)+n.ut1MinusUtc)/Ui.SECONDS_PER_DAY,v=.779057273264+g+.00273781191135448*(m+g);v=v%1*d.TWO_PI;var _=oe.fromRotationZ(v,ca),b=oe.multiply(p,_,sa),y=Math.cos(n.xPoleWander),w=Math.cos(n.yPoleWander),O=Math.sin(n.xPoleWander),C=Math.sin(n.yPoleWander),E=i-2451545+r/Ui.SECONDS_PER_DAY,A=-47e-6*(E/=36525)*d.RADIANS_PER_DEGREE/3600,x=Math.cos(A),T=Math.sin(A),S=ca;return S[0]=y*x,S[1]=y*T,S[2]=O,S[3]=-w*T+C*O*x,S[4]=w*x+C*O*T,S[5]=-C*y,S[6]=-C*T-w*O*x,S[7]=C*x-w*O*T,S[8]=w*y,oe.multiply(b,S,t)}}};var la=new he;zo.pointToWindowCoordinates=function(e,t,n,i){return(i=zo.pointToGLWindowCoordinates(e,t,n,i)).y=2*t[5]-i.y,i},zo.pointToGLWindowCoordinates=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("modelViewProjectionMatrix is required.");if(!Object(o.a)(t))throw new a.a("viewportTransformation is required.");if(!Object(o.a)(n))throw new a.a("point is required.");Object(o.a)(i)||(i=new Mt);var r=la;return Ae.multiplyByVector(e,he.fromElements(n.x,n.y,n.z,1,r),r),he.multiplyByScalar(r,1/r.w,r),Ae.multiplyByVector(t,r,r),Mt.fromCartesian4(r,i)};var ua=new O,ha=new O,da=new O;zo.rotationMatrixFromPositionVelocity=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("position is required.");if(!Object(o.a)(t))throw new a.a("velocity is required.");var s=Object(r.a)(n,W.WGS84).geodeticSurfaceNormal(e,ua),c=O.cross(t,s,ha);O.equalsEpsilon(c,O.ZERO,d.EPSILON6)&&(c=O.clone(O.UNIT_X,c));var l=O.cross(c,t,da);return O.normalize(l,l),O.cross(t,l,c),O.negate(c,c),O.normalize(c,c),Object(o.a)(i)||(i=new oe),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=c.x,i[4]=c.y,i[5]=c.z,i[6]=l.x,i[7]=l.y,i[8]=l.z,i};var fa=new Ae(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),pa=new R,ma=new O,ga=new O,va=new oe,_a=new Ae,ba=new Ae;zo.basisTo2D=function(e,t,n){if(!Object(o.a)(e))throw new a.a("projection is required.");if(!Object(o.a)(t))throw new a.a("matrix is required.");if(!Object(o.a)(n))throw new a.a("result is required.");var i=Ae.getTranslation(t,ga),r=e.ellipsoid,s=r.cartesianToCartographic(i,pa),c=e.project(s,ma);O.fromElements(c.z,c.x,c.y,c);var l=zo.eastNorthUpToFixedFrame(i,r,_a),u=Ae.inverseTransformation(l,ba),h=Ae.getMatrix3(t,va),d=Ae.multiplyByMatrix3(u,h,n);return Ae.multiply(fa,d,n),Ae.setTranslation(n,c,n),n},zo.wgs84To2DModelMatrix=function(e,t,n){if(!Object(o.a)(e))throw new a.a("projection is required.");if(!Object(o.a)(t))throw new a.a("center is required.");if(!Object(o.a)(n))throw new a.a("result is required.");var i=e.ellipsoid,r=zo.eastNorthUpToFixedFrame(t,i,_a),s=Ae.inverseTransformation(r,ba),c=i.cartesianToCartographic(t,pa),l=e.project(c,ma);O.fromElements(l.z,l.x,l.y,l);var u=Ae.fromTranslation(l,_a);return Ae.multiply(fa,s,n),Ae.multiply(u,n,n),n};var ya=zo,wa=new he;function Oa(e,t){if(i.a.defined("origin",e),e=(t=Object(r.a)(t,W.WGS84)).scaleToGeodeticSurface(e),!Object(o.a)(e))throw new a.a("origin must not be at the center of the ellipsoid.");var n=ya.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=O.fromCartesian4(Ae.getColumn(n,0,wa)),this._yAxis=O.fromCartesian4(Ae.getColumn(n,1,wa));var s=O.fromCartesian4(Ae.getColumn(n,2,wa));this._plane=Fi.fromPointNormal(e,s)}Object.defineProperties(Oa.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var Ca=new An;Oa.fromPoints=function(e,t){return i.a.defined("cartesians",e),new Oa(An.fromPoints(e,Ca).center,t)};var Ea=new ti,Aa=new O;Oa.prototype.projectPointOntoPlane=function(e,t){i.a.defined("cartesian",e);var n=Ea;n.origin=e,O.normalize(e,n.direction);var r=Ii.rayPlane(n,this._plane,Aa);if(Object(o.a)(r)||(O.negate(n.direction,n.direction),r=Ii.rayPlane(n,this._plane,Aa)),Object(o.a)(r)){var a=O.subtract(r,this._origin,r),s=O.dot(this._xAxis,a),c=O.dot(this._yAxis,a);return Object(o.a)(t)?(t.x=s,t.y=c,t):new Mt(s,c)}},Oa.prototype.projectPointsOntoPlane=function(e,t){i.a.defined("cartesians",e),Object(o.a)(t)||(t=[]);for(var n=0,r=e.length,a=0;a<r;a++){var s=this.projectPointOntoPlane(e[a],t[n]);Object(o.a)(s)&&(t[n]=s,n++)}return t.length=n,t},Oa.prototype.projectPointToNearestOnPlane=function(e,t){i.a.defined("cartesian",e),Object(o.a)(t)||(t=new Mt);var n=Ea;n.origin=e,O.clone(this._plane.normal,n.direction);var r=Ii.rayPlane(n,this._plane,Aa);Object(o.a)(r)||(O.negate(n.direction,n.direction),r=Ii.rayPlane(n,this._plane,Aa));var a=O.subtract(r,this._origin,r),s=O.dot(this._xAxis,a),c=O.dot(this._yAxis,a);return t.x=s,t.y=c,t},Oa.prototype.projectPointsToNearestOnPlane=function(e,t){i.a.defined("cartesians",e),Object(o.a)(t)||(t=[]);var n=e.length;t.length=n;for(var r=0;r<n;r++)t[r]=this.projectPointToNearestOnPlane(e[r],t[r]);return t};var xa=new O;Oa.prototype.projectPointOntoEllipsoid=function(e,t){i.a.defined("cartesian",e),Object(o.a)(t)||(t=new O);var n=this._ellipsoid,r=this._origin,a=this._xAxis,s=this._yAxis,c=xa;return O.multiplyByScalar(a,e.x,c),t=O.add(r,c,t),O.multiplyByScalar(s,e.y,c),O.add(t,c,t),n.scaleToGeocentricSurface(t,t),t},Oa.prototype.projectPointsOntoEllipsoid=function(e,t){i.a.defined("cartesians",e);var n=e.length;Object(o.a)(t)?t.length=n:t=new Array(n);for(var r=0;r<n;++r)t[r]=this.projectPointOntoEllipsoid(e[r],t[r]);return t};var Ta=Oa;function Sa(e,t){this.center=O.clone(Object(r.a)(e,O.ZERO)),this.halfAxes=oe.clone(Object(r.a)(t,oe.ZERO))}Sa.packedLength=O.packedLength+oe.packedLength,Sa.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),O.pack(e.center,t,n),oe.pack(e.halfAxes,t,n+O.packedLength),t},Sa.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Sa),O.unpack(e,t,n.center),oe.unpack(e,t+O.packedLength,n.halfAxes),n};var Da=new O,Pa=new O,Ia=new O,Ma=new O,Ra=new O,La=new O,ja=new oe,Fa={unitary:new oe,diagonal:new oe};Sa.fromPoints=function(e,t){if(Object(o.a)(t)||(t=new Sa),!Object(o.a)(e)||0===e.length)return t.halfAxes=oe.ZERO,t.center=O.ZERO,t;var n,i=e.length,r=O.clone(e[0],Da);for(n=1;n<i;n++)O.add(r,e[n],r);var a=1/i;O.multiplyByScalar(r,a,r);var s,c=0,l=0,u=0,h=0,d=0,f=0;for(n=0;n<i;n++)c+=(s=O.subtract(e[n],r,Pa)).x*s.x,l+=s.x*s.y,u+=s.x*s.z,h+=s.y*s.y,d+=s.y*s.z,f+=s.z*s.z;c*=a,l*=a,u*=a,h*=a,d*=a,f*=a;var p=ja;p[0]=c,p[1]=l,p[2]=u,p[3]=l,p[4]=h,p[5]=d,p[6]=u,p[7]=d,p[8]=f;var m=oe.computeEigenDecomposition(p,Fa),g=oe.clone(m.unitary,t.halfAxes),v=oe.getColumn(g,0,Ma),_=oe.getColumn(g,1,Ra),b=oe.getColumn(g,2,La),y=-Number.MAX_VALUE,w=-Number.MAX_VALUE,C=-Number.MAX_VALUE,E=Number.MAX_VALUE,A=Number.MAX_VALUE,x=Number.MAX_VALUE;for(n=0;n<i;n++)s=e[n],y=Math.max(O.dot(v,s),y),w=Math.max(O.dot(_,s),w),C=Math.max(O.dot(b,s),C),E=Math.min(O.dot(v,s),E),A=Math.min(O.dot(_,s),A),x=Math.min(O.dot(b,s),x);v=O.multiplyByScalar(v,.5*(E+y),v),_=O.multiplyByScalar(_,.5*(A+w),_),b=O.multiplyByScalar(b,.5*(x+C),b);var T=O.add(v,_,t.center);O.add(T,b,T);var S=Ia;return S.x=y-E,S.y=w-A,S.z=C-x,O.multiplyByScalar(S,.5,S),oe.multiplyByScale(t.halfAxes,S,t.halfAxes),t};var Na=new O,za=new O;function ka(e,t,n,i,r,s,c,l,u,h,d){if(!Object(o.a)(r)||!Object(o.a)(s)||!Object(o.a)(c)||!Object(o.a)(l)||!Object(o.a)(u)||!Object(o.a)(h))throw new a.a("all extents (minimum/maximum X/Y/Z) are required.");Object(o.a)(d)||(d=new Sa);var f=d.halfAxes;oe.setColumn(f,0,t,f),oe.setColumn(f,1,n,f),oe.setColumn(f,2,i,f);var p=Na;p.x=(r+s)/2,p.y=(c+l)/2,p.z=(u+h)/2;var m=za;m.x=(s-r)/2,m.y=(l-c)/2,m.z=(h-u)/2;var g=d.center;return p=oe.multiplyByVector(f,p,p),O.add(e,p,g),oe.multiplyByScale(f,m,f),d}var Ba=new R,Ha=new O,Va=new R,Ua=new R,Wa=new R,Ga=new R,qa=new R,Ya=new O,$a=new O,Xa=new O,Ka=new O,Qa=new O,Za=new Mt,Ja=new Mt,es=new Mt,ts=new Mt,ns=new Mt,is=new O,rs=new O,os=new O,as=new O,ss=new Mt,cs=new O,ls=new O,us=new O,hs=new Fi(O.UNIT_X,0);Sa.fromRectangle=function(e,t,n,i,s){if(!Object(o.a)(e))throw new a.a("rectangle is required");if(e.width<0||e.width>d.TWO_PI)throw new a.a("Rectangle width must be between 0 and 2*pi");if(e.height<0||e.height>d.PI)throw new a.a("Rectangle height must be between 0 and pi");if(Object(o.a)(i)&&!d.equalsEpsilon(i.radii.x,i.radii.y,d.EPSILON15))throw new a.a("Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)");var c,l,u,h,f,p,m;if(t=Object(r.a)(t,0),n=Object(r.a)(n,0),i=Object(r.a)(i,W.WGS84),e.width<=d.PI){var g=Se.center(e,Ba),v=i.cartographicToCartesian(g,Ha),_=new Ta(v,i);m=_.plane;var b=g.longitude,y=e.south<0&&e.north>0?0:g.latitude,w=R.fromRadians(b,e.north,n,Va),C=R.fromRadians(e.west,e.north,n,Ua),E=R.fromRadians(e.west,y,n,Wa),A=R.fromRadians(e.west,e.south,n,Ga),x=R.fromRadians(b,e.south,n,qa),T=i.cartographicToCartesian(w,Ya),S=i.cartographicToCartesian(C,$a),D=i.cartographicToCartesian(E,Xa),P=i.cartographicToCartesian(A,Ka),I=i.cartographicToCartesian(x,Qa),M=_.projectPointToNearestOnPlane(T,Za),L=_.projectPointToNearestOnPlane(S,Ja),j=_.projectPointToNearestOnPlane(D,es),F=_.projectPointToNearestOnPlane(P,ts),N=_.projectPointToNearestOnPlane(I,ns);return l=-(c=Math.min(L.x,j.x,F.x)),h=Math.max(L.y,M.y),u=Math.min(F.y,N.y),C.height=A.height=t,S=i.cartographicToCartesian(C,$a),P=i.cartographicToCartesian(A,Ka),f=Math.min(Fi.getPointDistance(m,S),Fi.getPointDistance(m,P)),p=n,ka(_.origin,_.xAxis,_.yAxis,_.zAxis,c,l,u,h,f,p,s)}var z=e.south>0,k=e.north<0,B=z?e.south:k?e.north:0,H=Se.center(e,Ba).longitude,V=O.fromRadians(H,B,n,i,is);V.z=0;var U=Math.abs(V.x)<d.EPSILON10&&Math.abs(V.y)<d.EPSILON10?O.UNIT_X:O.normalize(V,rs),G=O.UNIT_Z,q=O.cross(U,G,os);m=Fi.fromPointNormal(V,U,hs);var Y=O.fromRadians(H+d.PI_OVER_TWO,B,n,i,as);c=-(l=O.dot(Fi.projectPointOntoPlane(m,Y,ss),q)),h=O.fromRadians(0,e.north,k?t:n,i,cs).z,u=O.fromRadians(0,e.south,z?t:n,i,ls).z;var $=O.fromRadians(e.east,B,n,i,us);return ka(V,q,G,U,c,l,u,h,f=Fi.getPointDistance(m,$),p=0,s)},Sa.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(O.clone(e.center,t.center),oe.clone(e.halfAxes,t.halfAxes),t):new Sa(e.center,e.halfAxes)},Sa.intersectPlane=function(e,t){if(!Object(o.a)(e))throw new a.a("box is required.");if(!Object(o.a)(t))throw new a.a("plane is required.");var n=e.center,i=t.normal,r=e.halfAxes,s=i.x,c=i.y,l=i.z,u=Math.abs(s*r[oe.COLUMN0ROW0]+c*r[oe.COLUMN0ROW1]+l*r[oe.COLUMN0ROW2])+Math.abs(s*r[oe.COLUMN1ROW0]+c*r[oe.COLUMN1ROW1]+l*r[oe.COLUMN1ROW2])+Math.abs(s*r[oe.COLUMN2ROW0]+c*r[oe.COLUMN2ROW1]+l*r[oe.COLUMN2ROW2]),h=O.dot(i,n)+t.distance;return h<=-u?Y.OUTSIDE:h>=u?Y.INSIDE:Y.INTERSECTING};var ds=new O,fs=new O,ps=new O,ms=new O;Sa.distanceSquaredTo=function(e,t){if(!Object(o.a)(e))throw new a.a("box is required.");if(!Object(o.a)(t))throw new a.a("cartesian is required.");var n=O.subtract(t,e.center,Na),i=e.halfAxes,r=oe.getColumn(i,0,ds),s=oe.getColumn(i,1,fs),c=oe.getColumn(i,2,ps),l=O.magnitude(r),u=O.magnitude(s),h=O.magnitude(c);O.normalize(r,r),O.normalize(s,s),O.normalize(c,c);var d=ms;d.x=O.dot(n,r),d.y=O.dot(n,s),d.z=O.dot(n,c);var f,p=0;return d.x<-l?p+=(f=d.x+l)*f:d.x>l&&(p+=(f=d.x-l)*f),d.y<-u?p+=(f=d.y+u)*f:d.y>u&&(p+=(f=d.y-u)*f),d.z<-h?p+=(f=d.z+h)*f:d.z>h&&(p+=(f=d.z-h)*f),p};var gs=new O,vs=new O;Sa.computePlaneDistances=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("box is required.");if(!Object(o.a)(t))throw new a.a("position is required.");if(!Object(o.a)(n))throw new a.a("direction is required.");Object(o.a)(i)||(i=new $);var r=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY,c=e.center,l=e.halfAxes,u=oe.getColumn(l,0,ds),h=oe.getColumn(l,1,fs),d=oe.getColumn(l,2,ps),f=O.add(u,h,gs);O.add(f,d,f),O.add(f,c,f);var p=O.subtract(f,t,vs),m=O.dot(n,p);return r=Math.min(m,r),s=Math.max(m,s),O.add(c,u,f),O.add(f,h,f),O.subtract(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.add(c,u,f),O.subtract(f,h,f),O.add(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.add(c,u,f),O.subtract(f,h,f),O.subtract(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.subtract(c,u,f),O.add(f,h,f),O.add(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.subtract(c,u,f),O.add(f,h,f),O.subtract(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.subtract(c,u,f),O.subtract(f,h,f),O.add(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),O.subtract(c,u,f),O.subtract(f,h,f),O.subtract(f,d,f),O.subtract(f,t,p),m=O.dot(n,p),r=Math.min(m,r),s=Math.max(m,s),i.start=r,i.stop=s,i};var _s=new gt;Sa.isOccluded=function(e,t){if(!Object(o.a)(e))throw new a.a("box is required.");if(!Object(o.a)(t))throw new a.a("occluder is required.");var n=gt.fromOrientedBoundingBox(e,_s);return!t.isBoundingSphereVisible(n)},Sa.prototype.intersectPlane=function(e){return Sa.intersectPlane(this,e)},Sa.prototype.distanceSquaredTo=function(e){return Sa.distanceSquaredTo(this,e)},Sa.prototype.computePlaneDistances=function(e,t,n){return Sa.computePlaneDistances(this,e,t,n)},Sa.prototype.isOccluded=function(e){return Sa.isOccluded(this,e)},Sa.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&O.equals(e.center,t.center)&&oe.equals(e.halfAxes,t.halfAxes)},Sa.prototype.clone=function(e){return Sa.clone(this,e)},Sa.prototype.equals=function(e){return Sa.equals(this,e)};var bs=Sa,ys={octEncodeInRange:function(e,t,n){i.a.defined("vector",e),i.a.defined("result",n);var r=O.magnitudeSquared(e);if(Math.abs(r-1)>d.EPSILON6)throw new a.a("vector must be normalized.");if(n.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),n.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0){var o=n.x,s=n.y;n.x=(1-Math.abs(s))*d.signNotZero(o),n.y=(1-Math.abs(o))*d.signNotZero(s)}return n.x=d.toSNorm(n.x,t),n.y=d.toSNorm(n.y,t),n},octEncode:function(e,t){return ys.octEncodeInRange(e,255,t)}},ws=new Mt,Os=new Uint8Array(1);function Cs(e){return Os[0]=e,Os[0]}ys.octEncodeToCartesian4=function(e,t){return ys.octEncodeInRange(e,65535,ws),t.x=Cs(ws.x*(1/256)),t.y=Cs(ws.x),t.z=Cs(ws.y*(1/256)),t.w=Cs(ws.y),t},ys.octDecodeInRange=function(e,t,n,r){if(i.a.defined("result",r),e<0||e>n||t<0||t>n)throw new a.a("x and y must be unsigned normalized integers between 0 and "+n);if(r.x=d.fromSNorm(e,n),r.y=d.fromSNorm(t,n),r.z=1-(Math.abs(r.x)+Math.abs(r.y)),r.z<0){var o=r.x;r.x=(1-Math.abs(r.y))*d.signNotZero(o),r.y=(1-Math.abs(o))*d.signNotZero(r.y)}return O.normalize(r,r)},ys.octDecode=function(e,t,n){return ys.octDecodeInRange(e,t,255,n)},ys.octDecodeFromCartesian4=function(e,t){i.a.typeOf.object("encoded",e),i.a.typeOf.object("result",t);var n=e.x,r=e.y,o=e.z,s=e.w;if(n<0||n>255||r<0||r>255||o<0||o>255||s<0||s>255)throw new a.a("x, y, z, and w must be unsigned normalized integers between 0 and 255");var c=256*n+r,l=256*o+s;return ys.octDecodeInRange(c,l,65535,t)},ys.octPackFloat=function(e){return i.a.defined("encoded",e),256*e.x+e.y};var Es=new Mt;function As(e){return e>>1^-(1&e)}ys.octEncodeFloat=function(e){return ys.octEncode(e,Es),ys.octPackFloat(Es)},ys.octDecodeFloat=function(e,t){i.a.defined("value",e);var n=e/256,r=Math.floor(n),o=256*(n-r);return ys.octDecode(r,o,t)},ys.octPack=function(e,t,n,r){i.a.defined("v1",e),i.a.defined("v2",t),i.a.defined("v3",n),i.a.defined("result",r);var o=ys.octEncodeFloat(e),a=ys.octEncodeFloat(t),s=ys.octEncode(n,Es);return r.x=65536*s.x+o,r.y=65536*s.y+a,r},ys.octUnpack=function(e,t,n,r){i.a.defined("packed",e),i.a.defined("v1",t),i.a.defined("v2",n),i.a.defined("v3",r);var o=e.x/65536,a=Math.floor(o),s=65536*(o-a);o=e.y/65536;var c=Math.floor(o),l=65536*(o-c);ys.octDecodeFloat(s,t),ys.octDecodeFloat(l,n),ys.octDecode(a,c,r)},ys.compressTextureCoordinates=function(e){return i.a.defined("textureCoordinates",e),4096*(4095*e.x|0)+(4095*e.y|0)},ys.decompressTextureCoordinates=function(e,t){i.a.defined("compressed",e),i.a.defined("result",t);var n=e/4096,r=Math.floor(n);return t.x=r/4095,t.y=(e-4096*r)/4095,t},ys.zigZagDeltaDecode=function(e,t,n){i.a.defined("uBuffer",e),i.a.defined("vBuffer",t),i.a.typeOf.number.equals("uBuffer.length","vBuffer.length",e.length,t.length),Object(o.a)(n)&&i.a.typeOf.number.equals("uBuffer.length","heightBuffer.length",e.length,n.length);for(var r=e.length,a=0,s=0,c=0,l=0;l<r;++l)a+=As(e[l]),s+=As(t[l]),e[l]=a,t[l]=s,Object(o.a)(n)&&(c+=As(n[l]),n[l]=c)};var xs=ys,Ts=Object.freeze({DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047}),Ss={BYTE:Ts.BYTE,UNSIGNED_BYTE:Ts.UNSIGNED_BYTE,SHORT:Ts.SHORT,UNSIGNED_SHORT:Ts.UNSIGNED_SHORT,INT:Ts.INT,UNSIGNED_INT:Ts.UNSIGNED_INT,FLOAT:Ts.FLOAT,DOUBLE:Ts.DOUBLE,getSizeInBytes:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");switch(e){case Ss.BYTE:return Int8Array.BYTES_PER_ELEMENT;case Ss.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case Ss.SHORT:return Int16Array.BYTES_PER_ELEMENT;case Ss.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case Ss.INT:return Int32Array.BYTES_PER_ELEMENT;case Ss.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case Ss.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case Ss.DOUBLE:return Float64Array.BYTES_PER_ELEMENT;default:throw new a.a("componentDatatype is not a valid value.")}},fromTypedArray:function(e){return e instanceof Int8Array?Ss.BYTE:e instanceof Uint8Array?Ss.UNSIGNED_BYTE:e instanceof Int16Array?Ss.SHORT:e instanceof Uint16Array?Ss.UNSIGNED_SHORT:e instanceof Int32Array?Ss.INT:e instanceof Uint32Array?Ss.UNSIGNED_INT:e instanceof Float32Array?Ss.FLOAT:e instanceof Float64Array?Ss.DOUBLE:void 0},validate:function(e){return Object(o.a)(e)&&(e===Ss.BYTE||e===Ss.UNSIGNED_BYTE||e===Ss.SHORT||e===Ss.UNSIGNED_SHORT||e===Ss.INT||e===Ss.UNSIGNED_INT||e===Ss.FLOAT||e===Ss.DOUBLE)},createTypedArray:function(e,t){if(!Object(o.a)(e))throw new a.a("componentDatatype is required.");if(!Object(o.a)(t))throw new a.a("valuesOrLength is required.");switch(e){case Ss.BYTE:return new Int8Array(t);case Ss.UNSIGNED_BYTE:return new Uint8Array(t);case Ss.SHORT:return new Int16Array(t);case Ss.UNSIGNED_SHORT:return new Uint16Array(t);case Ss.INT:return new Int32Array(t);case Ss.UNSIGNED_INT:return new Uint32Array(t);case Ss.FLOAT:return new Float32Array(t);case Ss.DOUBLE:return new Float64Array(t);default:throw new a.a("componentDatatype is not a valid value.")}},createArrayBufferView:function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("componentDatatype is required.");if(!Object(o.a)(t))throw new a.a("buffer is required.");switch(n=Object(r.a)(n,0),i=Object(r.a)(i,(t.byteLength-n)/Ss.getSizeInBytes(e)),e){case Ss.BYTE:return new Int8Array(t,n,i);case Ss.UNSIGNED_BYTE:return new Uint8Array(t,n,i);case Ss.SHORT:return new Int16Array(t,n,i);case Ss.UNSIGNED_SHORT:return new Uint16Array(t,n,i);case Ss.INT:return new Int32Array(t,n,i);case Ss.UNSIGNED_INT:return new Uint32Array(t,n,i);case Ss.FLOAT:return new Float32Array(t,n,i);case Ss.DOUBLE:return new Float64Array(t,n,i);default:throw new a.a("componentDatatype is not a valid value.")}},fromName:function(e){switch(e){case"BYTE":return Ss.BYTE;case"UNSIGNED_BYTE":return Ss.UNSIGNED_BYTE;case"SHORT":return Ss.SHORT;case"UNSIGNED_SHORT":return Ss.UNSIGNED_SHORT;case"INT":return Ss.INT;case"UNSIGNED_INT":return Ss.UNSIGNED_INT;case"FLOAT":return Ss.FLOAT;case"DOUBLE":return Ss.DOUBLE;default:throw new a.a("name is not a valid value.")}}},Ds=Object.freeze(Ss),Ps=Object.freeze({NONE:0,BITS12:1}),Is=new O,Ms=new O,Rs=new Mt,Ls=new Ae,js=new Ae,Fs=Math.pow(2,12);function Ns(e,t,n,i,a,s){var c,l,u,h=Ps.NONE;if(Object(o.a)(e)&&Object(o.a)(t)&&Object(o.a)(n)&&Object(o.a)(i)){var d=e.minimum,f=e.maximum,p=O.subtract(f,d,Ms),m=n-t;h=Math.max(O.maximumComponent(p),m)<Fs-1?Ps.BITS12:Ps.NONE,c=e.center,l=Ae.inverseTransformation(i,new Ae);var g=O.negate(d,Is);Ae.multiply(Ae.fromTranslation(g,Ls),l,l);var v=Is;v.x=1/p.x,v.y=1/p.y,v.z=1/p.z,Ae.multiply(Ae.fromScale(v,Ls),l,l),u=Ae.clone(i),Ae.setTranslation(u,O.ZERO,u),i=Ae.clone(i,new Ae);var _=Ae.fromTranslation(d,Ls),b=Ae.fromScale(p,js),y=Ae.multiply(_,b,Ls);Ae.multiply(i,y,i),Ae.multiply(u,y,u)}this.quantization=h,this.minimumHeight=t,this.maximumHeight=n,this.center=c,this.toScaledENU=l,this.fromScaledENU=i,this.matrix=u,this.hasVertexNormals=a,this.hasWebMercatorT=Object(r.a)(s,!1)}Ns.prototype.encode=function(e,t,n,i,r,o,a){var s=i.x,c=i.y;if(this.quantization===Ps.BITS12){(n=Ae.multiplyByPoint(this.toScaledENU,n,Is)).x=d.clamp(n.x,0,1),n.y=d.clamp(n.y,0,1),n.z=d.clamp(n.z,0,1);var l=this.maximumHeight-this.minimumHeight,u=d.clamp((r-this.minimumHeight)/l,0,1);Mt.fromElements(n.x,n.y,Rs);var h=xs.compressTextureCoordinates(Rs);Mt.fromElements(n.z,u,Rs);var f=xs.compressTextureCoordinates(Rs);Mt.fromElements(s,c,Rs);var p=xs.compressTextureCoordinates(Rs);if(e[t++]=h,e[t++]=f,e[t++]=p,this.hasWebMercatorT){Mt.fromElements(a,0,Rs);var m=xs.compressTextureCoordinates(Rs);e[t++]=m}}else O.subtract(n,this.center,Is),e[t++]=Is.x,e[t++]=Is.y,e[t++]=Is.z,e[t++]=r,e[t++]=s,e[t++]=c,this.hasWebMercatorT&&(e[t++]=a);return this.hasVertexNormals&&(e[t++]=xs.octPackFloat(o)),t},Ns.prototype.decodePosition=function(e,t,n){if(Object(o.a)(n)||(n=new O),t*=this.getStride(),this.quantization===Ps.BITS12){var i=xs.decompressTextureCoordinates(e[t],Rs);n.x=i.x,n.y=i.y;var r=xs.decompressTextureCoordinates(e[t+1],Rs);return n.z=r.x,Ae.multiplyByPoint(this.fromScaledENU,n,n)}return n.x=e[t],n.y=e[t+1],n.z=e[t+2],O.add(n,this.center,n)},Ns.prototype.decodeTextureCoordinates=function(e,t,n){return Object(o.a)(n)||(n=new Mt),t*=this.getStride(),this.quantization===Ps.BITS12?xs.decompressTextureCoordinates(e[t+2],n):Mt.fromElements(e[t+4],e[t+5],n)},Ns.prototype.decodeHeight=function(e,t){return t*=this.getStride(),this.quantization===Ps.BITS12?xs.decompressTextureCoordinates(e[t+1],Rs).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]},Ns.prototype.decodeWebMercatorT=function(e,t){return t*=this.getStride(),this.quantization===Ps.BITS12?xs.decompressTextureCoordinates(e[t+3],Rs).x:e[t+6]},Ns.prototype.getOctEncodedNormal=function(e,t,n){var i=e[t=(t+1)*this.getStride()-1]/256,r=Math.floor(i),o=256*(i-r);return Mt.fromElements(r,o,n)},Ns.prototype.getStride=function(){var e;switch(this.quantization){case Ps.BITS12:e=3;break;default:e=6}return this.hasWebMercatorT&&++e,this.hasVertexNormals&&++e,e};var zs={position3DAndHeight:0,textureCoordAndEncodedNormals:1},ks={compressed0:0,compressed1:1};Ns.prototype.getAttributes=function(e){var t,n=Ds.FLOAT,i=Ds.getSizeInBytes(n);if(this.quantization===Ps.NONE){var r=2;return this.hasWebMercatorT&&++r,this.hasVertexNormals&&++r,[{index:zs.position3DAndHeight,vertexBuffer:e,componentDatatype:n,componentsPerAttribute:4,offsetInBytes:0,strideInBytes:t=(4+r)*i},{index:zs.textureCoordAndEncodedNormals,vertexBuffer:e,componentDatatype:n,componentsPerAttribute:r,offsetInBytes:4*i,strideInBytes:t}]}var o=3,a=0;return(this.hasWebMercatorT||this.hasVertexNormals)&&++o,this.hasWebMercatorT&&this.hasVertexNormals?(++a,[{index:ks.compressed0,vertexBuffer:e,componentDatatype:n,componentsPerAttribute:o,offsetInBytes:0,strideInBytes:t=(o+a)*i},{index:ks.compressed1,vertexBuffer:e,componentDatatype:n,componentsPerAttribute:a,offsetInBytes:o*i,strideInBytes:t}]):[{index:ks.compressed0,vertexBuffer:e,componentDatatype:n,componentsPerAttribute:o}]},Ns.prototype.getAttributeLocations=function(){return this.quantization===Ps.NONE?zs:ks},Ns.clone=function(e,t){return Object(o.a)(t)||(t=new Ns),t.quantization=e.quantization,t.minimumHeight=e.minimumHeight,t.maximumHeight=e.maximumHeight,t.center=O.clone(e.center),t.toScaledENU=Ae.clone(e.toScaledENU),t.fromScaledENU=Ae.clone(e.fromScaledENU),t.matrix=Ae.clone(e.matrix),t.hasVertexNormals=e.hasVertexNormals,t.hasWebMercatorT=e.hasWebMercatorT,t};var Bs=Ns;function Hs(e){this._ellipsoid=Object(r.a)(e,W.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(Hs.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),Hs.mercatorAngleToGeodeticLatitude=function(e){return d.PI_OVER_TWO-2*Math.atan(Math.exp(-e))},Hs.geodeticLatitudeToMercatorAngle=function(e){e>Hs.MaximumLatitude?e=Hs.MaximumLatitude:e<-Hs.MaximumLatitude&&(e=-Hs.MaximumLatitude);var t=Math.sin(e);return.5*Math.log((1+t)/(1-t))},Hs.MaximumLatitude=Hs.mercatorAngleToGeodeticLatitude(Math.PI),Hs.prototype.project=function(e,t){var n=this._semimajorAxis,i=e.longitude*n,r=Hs.geodeticLatitudeToMercatorAngle(e.latitude)*n,a=e.height;return Object(o.a)(t)?(t.x=i,t.y=r,t.z=a,t):new O(i,r,a)},Hs.prototype.unproject=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required");var n=this._oneOverSemimajorAxis,i=e.x*n,r=Hs.mercatorAngleToGeodeticLatitude(e.y*n),s=e.z;return Object(o.a)(t)?(t.longitude=i,t.latitude=r,t.height=s,t):new R(i,r,s)};var Vs=Hs,Us={};Us.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var Ws=new O,Gs=new Ae,qs=new O,Ys=new O;Us.computeVertices=function(e){if(!Object(o.a)(e)||!Object(o.a)(e.heightmap))throw new a.a("options.heightmap is required.");if(!Object(o.a)(e.width)||!Object(o.a)(e.height))throw new a.a("options.width and options.height are required.");if(!Object(o.a)(e.nativeRectangle))throw new a.a("options.nativeRectangle is required.");if(!Object(o.a)(e.skirtHeight))throw new a.a("options.skirtHeight is required.");var t,n,i,s,c=Math.cos,l=Math.sin,u=Math.sqrt,h=Math.atan,f=Math.exp,p=d.PI_OVER_TWO,m=d.toRadians,g=e.heightmap,v=e.width,_=e.height,b=e.skirtHeight,y=Object(r.a)(e.isGeographic,!0),w=Object(r.a)(e.ellipsoid,W.WGS84),C=1/w.maximumRadius,E=e.nativeRectangle,A=e.rectangle;Object(o.a)(A)?(t=A.west,n=A.south,i=A.east,s=A.north):y?(t=m(E.west),n=m(E.south),i=m(E.east),s=m(E.north)):(t=E.west*C,n=p-2*h(f(-E.south*C)),i=E.east*C,s=p-2*h(f(-E.north*C)));var x=e.relativeToCenter,T=Object(o.a)(x);x=T?x:O.ZERO;var S=Object(r.a)(e.exaggeration,1),D=Object(r.a)(e.includeWebMercatorT,!1),P=Object(r.a)(e.structure,Us.DEFAULT_STRUCTURE),I=Object(r.a)(P.heightScale,Us.DEFAULT_STRUCTURE.heightScale),M=Object(r.a)(P.heightOffset,Us.DEFAULT_STRUCTURE.heightOffset),R=Object(r.a)(P.elementsPerHeight,Us.DEFAULT_STRUCTURE.elementsPerHeight),L=Object(r.a)(P.stride,Us.DEFAULT_STRUCTURE.stride),j=Object(r.a)(P.elementMultiplier,Us.DEFAULT_STRUCTURE.elementMultiplier),F=Object(r.a)(P.isBigEndian,Us.DEFAULT_STRUCTURE.isBigEndian),N=Se.computeWidth(E),z=Se.computeHeight(E),k=N/(v-1),B=z/(_-1);y||(N*=C,z*=C);var H,V,U=w.radiiSquared,G=U.x,q=U.y,Y=U.z,$=65536,X=-65536,K=ya.eastNorthUpToFixedFrame(x,w),Q=Ae.inverseTransformation(K,Gs);D&&(H=Vs.geodeticLatitudeToMercatorAngle(n),V=1/(Vs.geodeticLatitudeToMercatorAngle(s)-H));var Z=qs;Z.x=Number.POSITIVE_INFINITY,Z.y=Number.POSITIVE_INFINITY,Z.z=Number.POSITIVE_INFINITY;var J=Ys;J.x=Number.NEGATIVE_INFINITY,J.y=Number.NEGATIVE_INFINITY,J.z=Number.NEGATIVE_INFINITY;var ee=Number.POSITIVE_INFINITY,te=v*_,ne=te+(b>0?2*v+2*_:0),ie=new Array(ne),re=new Array(ne),oe=new Array(ne),ae=D?new Array(ne):[],se=0,ce=_,le=0,ue=v;b>0&&(--se,++ce,--le,++ue);for(var he=se;he<ce;++he){var de=he;de<0&&(de=0),de>=_&&(de=_-1);var fe=E.north-B*de,pe=((fe=y?m(fe):p-2*h(f(-fe*C)))-n)/(s-n);pe=d.clamp(pe,0,1);var me=he===se,ge=he===ce-1;b>0&&(me?fe+=1e-5*z:ge&&(fe-=1e-5*z));var ve,_e=c(fe),be=l(fe),ye=Y*be;D&&(ve=(Vs.geodeticLatitudeToMercatorAngle(fe)-H)*V);for(var we=le;we<ue;++we){var Oe=we;Oe<0&&(Oe=0),Oe>=v&&(Oe=v-1);var Ce,Ee,xe=de*(v*L)+Oe*L;if(1===R)Ce=g[xe];else if(Ce=0,F)for(Ee=0;Ee<R;++Ee)Ce=Ce*j+g[xe+Ee];else for(Ee=R-1;Ee>=0;--Ee)Ce=Ce*j+g[xe+Ee];Ce=(Ce*I+M)*S,X=Math.max(X,Ce),$=Math.min($,Ce);var Te=E.west+k*Oe;y?Te=m(Te):Te*=C;var De=(Te-t)/(i-t);De=d.clamp(De,0,1);var Pe=de*v+Oe;if(b>0){var Ie=we===le,Me=we===ue-1,Re=me||ge||Ie||Me;if((me||ge)&&(Ie||Me))continue;Re&&(Ce-=b,Ie?(Pe=te+(_-de-1),Te-=1e-5*N):ge?Pe=te+_+(v-Oe-1):Me?(Pe=te+_+v+de,Te+=1e-5*N):me&&(Pe=te+_+v+_+Oe))}var Le=_e*c(Te),je=_e*l(Te),Fe=G*Le,Ne=q*je,ze=1/u(Fe*Le+Ne*je+ye*be),ke=Fe*ze,Be=Ne*ze,He=ye*ze,Ve=new O;Ve.x=ke+Le*Ce,Ve.y=Be+je*Ce,Ve.z=He+be*Ce,ie[Pe]=Ve,re[Pe]=Ce,oe[Pe]=new Mt(De,pe),D&&(ae[Pe]=ve),Ae.multiplyByPoint(Q,Ve,Ws),O.minimumByComponent(Ws,Z,Z),O.maximumByComponent(Ws,J,J),ee=Math.min(ee,Ce)}}var Ue,We,Ge=gt.fromPoints(ie);(Object(o.a)(A)&&(Ue=bs.fromRectangle(A,$,X,w)),T)&&(We=new Un(w).computeHorizonCullingPointPossiblyUnderEllipsoid(x,ie,$));for(var qe=new An(Z,J,x),Ye=new Bs(qe,ee,X,K,!1,D),$e=new Float32Array(ne*Ye.getStride()),Xe=0,Ke=0;Ke<ne;++Ke)Xe=Ye.encode($e,Xe,ie[Ke],oe[Ke],re[Ke],void 0,ae[Ke]);return{vertices:$e,maximumHeight:X,minimumHeight:$,encoding:Ye,boundingSphere3D:Ge,orientedBoundingBox:Ue,occludeePointInScaledSpace:We}};var $s=Us;function Xs(){return!0}var Ks=function(e,t){function n(){throw new a.a(t)}for(var i in t=Object(r.a)(t,"This object was destroyed, i.e., destroy() was called."),e)"function"===typeof e[i]&&(e[i]=n);e.isDestroyed=Xs},Qs=n(121);function Zs(){if(!Object(o.a)(rc._canTransferArrayBuffer)){var e=new Worker(nc("Workers/transferTypedArrayTest.js"));e.postMessage=Object(r.a)(e.webkitPostMessage,e.postMessage);var t=new Int8Array([99]);try{e.postMessage({array:t},[t.buffer])}catch(i){return rc._canTransferArrayBuffer=!1,rc._canTransferArrayBuffer}var n=Yt.a.defer();e.onmessage=function(t){var i=t.data.array,r=Object(o.a)(i)&&99===i[0];n.resolve(r),e.terminate(),rc._canTransferArrayBuffer=r},rc._canTransferArrayBuffer=n.promise}return rc._canTransferArrayBuffer}var Js,ec=new wn.a;function tc(e,t){--e._activeTasks;var n=t.id;if(Object(o.a)(n)){var i=e._deferreds,r=i[n];if(Object(o.a)(t.error)){var s=t.error;"RuntimeError"===s.name?(s=new de.a(t.error.message)).stack=t.error.stack:"DeveloperError"===s.name&&((s=new a.a(t.error.message)).stack=t.error.stack),ec.raiseEvent(s),r.reject(s)}else ec.raiseEvent(),r.resolve(t.result);delete i[n]}}function nc(e){var t=At(e);if(Object(Qs.a)(t)){var n,i='importScripts("'+t+'");';try{n=new Blob([i],{type:"application/javascript"})}catch(o){var r=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder);r.append(i),n=r.getBlob("application/javascript")}t=(window.URL||window.webkitURL).createObjectURL(n)}return t}function ic(e){var t=new Worker((Object(o.a)(Js)||(Js=nc("Workers/cesiumWorkerBootstrapper.js")),Js));t.postMessage=Object(r.a)(t.webkitPostMessage,t.postMessage);var n={loaderConfig:{paths:{Workers:At("Workers")},baseUrl:At.getCesiumBaseUrl().url},workerModule:rc._workerModulePrefix+e._workerName};return t.postMessage(n),t.onmessage=function(t){tc(e,t.data)},t}function rc(e,t){this._workerName=e,this._maximumActiveTasks=Object(r.a)(t,5),this._activeTasks=0,this._deferreds={},this._nextID=0}var oc=[];rc.prototype.scheduleTask=function(e,t){if(Object(o.a)(this._worker)||(this._worker=ic(this)),!(this._activeTasks>=this._maximumActiveTasks)){++this._activeTasks;var n=this;return Object(Yt.a)(Zs(),(function(i){Object(o.a)(t)?i||(t.length=0):t=oc;var r=n._nextID++,a=Yt.a.defer();return n._deferreds[r]=a,n._worker.postMessage({id:r,parameters:e,canTransferArrayBuffer:i},t),a.promise}))}},rc.prototype.initWebAssemblyModule=function(e){Object(o.a)(this._worker)||(this._worker=ic(this));var t=Yt.a.defer(),n=this,i=this._worker;return function(e,t){var n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!oo.supportsWebAssembly()){if(!Object(o.a)(t.fallbackModulePath))throw new de.a("This browser does not support Web Assembly, and no backup module was provided for "+e._workerName);return n.modulePath=At(t.fallbackModulePath),Yt.a.resolve(n)}return n.modulePath=At(t.modulePath),n.wasmBinaryFile=At(t.wasmBinaryFile),_t.a.fetchArrayBuffer({url:n.wasmBinaryFile}).then((function(e){return n.wasmBinary=e,n}))}(this,e).then((function(e){return Object(Yt.a)(Zs(),(function(r){var a,s=e.wasmBinary;Object(o.a)(s)&&r&&(a=[s]),i.onmessage=function(e){i.onmessage=function(e){tc(n,e.data)},t.resolve(e.data)},i.postMessage({webAssemblyConfig:e},a)}))})),t},rc.prototype.isDestroyed=function(){return!1},rc.prototype.destroy=function(){return Object(o.a)(this._worker)&&this._worker.terminate(),Ks(this)},rc.taskCompletedEvent=ec,rc._defaultWorkerModulePrefix="Workers/",rc._workerModulePrefix=rc._defaultWorkerModulePrefix,rc._canTransferArrayBuffer=void 0;var ac=rc;var sc=function(e,t,n,i,o,a,s,c,l,u,h,d,f,p,m,g,v){this.center=e,this.vertices=t,this.stride=Object(r.a)(u,6),this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=a,this.maximumHeight=s,this.boundingSphere3D=c,this.occludeePointInScaledSpace=l,this.orientedBoundingBox=h,this.encoding=d,this.exaggeration=f,this.westIndicesSouthToNorth=p,this.southIndicesEastToWest=m,this.eastIndicesNorthToSouth=g,this.northIndicesWestToEast=v},cc={UNSIGNED_BYTE:Ts.UNSIGNED_BYTE,UNSIGNED_SHORT:Ts.UNSIGNED_SHORT,UNSIGNED_INT:Ts.UNSIGNED_INT,getSizeInBytes:function(e){switch(e){case cc.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case cc.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case cc.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}throw new a.a("indexDatatype is required and must be a valid IndexDatatype constant.")},fromSizeInBytes:function(e){switch(e){case 2:return cc.UNSIGNED_SHORT;case 4:return cc.UNSIGNED_INT;case 1:return cc.UNSIGNED_BYTE;default:throw new a.a("Size in bytes cannot be mapped to an IndexDatatype")}},validate:function(e){return Object(o.a)(e)&&(e===cc.UNSIGNED_BYTE||e===cc.UNSIGNED_SHORT||e===cc.UNSIGNED_INT)},createTypedArray:function(e,t){if(!Object(o.a)(e))throw new a.a("numberOfVertices is required.");return e>=d.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)},createTypedArrayFromArrayBuffer:function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("numberOfVertices is required.");if(!Object(o.a)(t))throw new a.a("sourceArray is required.");if(!Object(o.a)(n))throw new a.a("byteOffset is required.");return e>=d.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)}},lc=Object.freeze(cc);function uc(){a.a.throwInstantiationError()}Object.defineProperties(uc.prototype,{errorEvent:{get:a.a.throwInstantiationError},credit:{get:a.a.throwInstantiationError},tilingScheme:{get:a.a.throwInstantiationError},ready:{get:a.a.throwInstantiationError},readyPromise:{get:a.a.throwInstantiationError},hasWaterMask:{get:a.a.throwInstantiationError},hasVertexNormals:{get:a.a.throwInstantiationError},availability:{get:a.a.throwInstantiationError}});var hc=[];uc.getRegularGridIndices=function(e,t){if(e*t>=d.FOUR_GIGABYTES)throw new a.a("The total number of vertices (width * height) must be less than 4,294,967,296.");var n=hc[e];Object(o.a)(n)||(hc[e]=n=[]);var i=n[t];return Object(o.a)(i)||mc(e,t,i=e*t<d.SIXTY_FOUR_KILOBYTES?n[t]=new Uint16Array((e-1)*(t-1)*6):n[t]=new Uint32Array((e-1)*(t-1)*6),0),i};var dc=[];uc.getRegularGridIndicesAndEdgeIndices=function(e,t){if(e*t>=d.FOUR_GIGABYTES)throw new a.a("The total number of vertices (width * height) must be less than 4,294,967,296.");var n=dc[e];Object(o.a)(n)||(dc[e]=n=[]);var i=n[t];if(!Object(o.a)(i)){var r=uc.getRegularGridIndices(e,t),s=pc(e,t),c=s.westIndicesSouthToNorth,l=s.southIndicesEastToWest,u=s.eastIndicesNorthToSouth,h=s.northIndicesWestToEast;i=n[t]={indices:r,westIndicesSouthToNorth:c,southIndicesEastToWest:l,eastIndicesNorthToSouth:u,northIndicesWestToEast:h}}return i};var fc=[];function pc(e,t){var n,i=new Array(t),r=new Array(e),o=new Array(t),a=new Array(e);for(n=0;n<e;++n)a[n]=n,r[n]=e*t-1-n;for(n=0;n<t;++n)o[n]=(n+1)*e-1,i[n]=(t-n-1)*e;return{westIndicesSouthToNorth:i,southIndicesEastToWest:r,eastIndicesNorthToSouth:o,northIndicesWestToEast:a}}function mc(e,t,n,i){for(var r=0,o=0;o<t-1;++o){for(var a=0;a<e-1;++a){var s=r,c=s+e,l=c+1,u=s+1;n[i++]=s,n[i++]=c,n[i++]=u,n[i++]=u,n[i++]=c,n[i++]=l,++r}++r}}function gc(e,t,n,i){for(var r=e[0],o=e.length,a=1;a<o;++a){var s=e[a];n[i++]=r,n[i++]=s,n[i++]=t,n[i++]=t,n[i++]=s,n[i++]=t+1,r=s,++t}return i}uc.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){if(e*t>=d.FOUR_GIGABYTES)throw new a.a("The total number of vertices (width * height) must be less than 4,294,967,296.");var n=fc[e];Object(o.a)(n)||(fc[e]=n=[]);var i=n[t];if(!Object(o.a)(i)){var r=e*t,s=(e-1)*(t-1)*6,c=2*e+2*t,l=r+c,u=s+6*Math.max(0,c-4),h=pc(e,t),f=h.westIndicesSouthToNorth,p=h.southIndicesEastToWest,m=h.eastIndicesNorthToSouth,g=h.northIndicesWestToEast,v=lc.createTypedArray(l,u);mc(e,t,v,0),uc.addSkirtIndices(f,p,m,g,r,v,s),i=n[t]={indices:v,westIndicesSouthToNorth:f,southIndicesEastToWest:p,eastIndicesNorthToSouth:m,northIndicesWestToEast:g,indexCountWithoutSkirts:s}}return i},uc.addSkirtIndices=function(e,t,n,i,r,o,a){var s=r;a=gc(e,s,o,a),a=gc(t,s+=e.length,o,a),a=gc(n,s+=t.length,o,a),gc(i,s+=n.length,o,a)},uc.heightmapTerrainQuality=.25,uc.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,n){return 2*e.maximumRadius*Math.PI*uc.heightmapTerrainQuality/(t*n)},uc.prototype.requestTileGeometry=a.a.throwInstantiationError,uc.prototype.getLevelMaximumGeometricError=a.a.throwInstantiationError,uc.prototype.getTileDataAvailable=a.a.throwInstantiationError,uc.prototype.loadTileDataAvailability=a.a.throwInstantiationError;var vc=uc;function _c(e){if(!Object(o.a)(e)||!Object(o.a)(e.buffer))throw new a.a("options.buffer is required.");if(!Object(o.a)(e.width))throw new a.a("options.width is required.");if(!Object(o.a)(e.height))throw new a.a("options.height is required.");this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=Object(r.a)(e.childTileMask,15),this._encoding=Object(r.a)(e.encoding,On.NONE);var t=$s.DEFAULT_STRUCTURE,n=e.structure;Object(o.a)(n)?n!==t&&(n.heightScale=Object(r.a)(n.heightScale,t.heightScale),n.heightOffset=Object(r.a)(n.heightOffset,t.heightOffset),n.elementsPerHeight=Object(r.a)(n.elementsPerHeight,t.elementsPerHeight),n.stride=Object(r.a)(n.stride,t.stride),n.elementMultiplier=Object(r.a)(n.elementMultiplier,t.elementMultiplier),n.isBigEndian=Object(r.a)(n.isBigEndian,t.isBigEndian)):n=t,this._structure=n,this._createdByUpsampling=Object(r.a)(e.createdByUpsampling,!1),this._waterMask=e.waterMask,this._skirtHeight=void 0,this._bufferType=this._encoding===On.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(_c.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var bc=new ac("createVerticesFromHeightmap");function yc(e,t,n,i,r,o,a,s,c,l){var u=(s-r.west)*(o-1)/(r.east-r.west),h=(c-r.south)*(a-1)/(r.north-r.south),d=0|u,f=d+1;f>=o&&(f=o-1,d=o-2);var p=0|h,m=p+1;m>=a&&(m=a-1,p=a-2);var g=h-p;return p=a-1-p,m=a-1-m,wc(u-d,g,(t.decodeHeight(e,p*o+d)/l-n)/i,(t.decodeHeight(e,p*o+f)/l-n)/i,(t.decodeHeight(e,m*o+d)/l-n)/i,(t.decodeHeight(e,m*o+f)/l-n)/i)}function wc(e,t,n,i,r,o){return t<e?n+e*(i-n)+t*(o-i):n+e*(o-r)+t*(r-n)}function Oc(e,t,n,i,r,o){o*=i;var a,s=0;if(r)for(a=0;a<t;++a)s=s*n+e[o+a];else for(a=t-1;a>=0;--a)s=s*n+e[o+a];return s}function Cc(e,t,n,i,r,o,a,s){var c;if(a*=r,o)for(c=0;c<t-1;++c)e[a+c]=s/i|0,s-=e[a+c]*i,i/=n;else for(c=t-1;c>0;--c)e[a+c]=s/i|0,s-=e[a+c]*i,i/=n;e[a+c]=s}_c.prototype.createMesh=function(e,t,n,i,s){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");if(!Object(o.a)(t))throw new a.a("x is required.");if(!Object(o.a)(n))throw new a.a("y is required.");if(!Object(o.a)(i))throw new a.a("level is required.");var c=e.ellipsoid,l=e.tileXYToNativeRectangle(t,n,i),u=e.tileXYToRectangle(t,n,i);s=Object(r.a)(s,1);var h=c.cartographicToCartesian(Se.center(u)),d=this._structure,f=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,e.getNumberOfXTilesAtLevel(0))/(1<<i);this._skirtHeight=Math.min(4*f,1e3);var p=bc.scheduleTask({heightmap:this._buffer,structure:d,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:l,rectangle:u,relativeToCenter:h,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:e.projection instanceof q,exaggeration:s,encoding:this._encoding});if(Object(o.a)(p)){var m=this;return Object(Yt.a)(p,(function(e){var t;t=m._skirtHeight>0?vc.getRegularGridAndSkirtIndicesAndEdgeIndices(e.gridWidth,e.gridHeight):vc.getRegularGridIndicesAndEdgeIndices(e.gridWidth,e.gridHeight);var n=e.gridWidth*e.gridHeight;return m._mesh=new sc(h,new Float32Array(e.vertices),t.indices,t.indexCountWithoutSkirts,n,e.minimumHeight,e.maximumHeight,gt.clone(e.boundingSphere3D),O.clone(e.occludeePointInScaledSpace),e.numberOfAttributes,bs.clone(e.orientedBoundingBox),Bs.clone(e.encoding),s,t.westIndicesSouthToNorth,t.southIndicesEastToWest,t.eastIndicesNorthToSouth,t.northIndicesWestToEast),m._buffer=void 0,m._mesh}))}},_c.prototype._createMeshSync=function(e,t,n,i,s){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");if(!Object(o.a)(t))throw new a.a("x is required.");if(!Object(o.a)(n))throw new a.a("y is required.");if(!Object(o.a)(i))throw new a.a("level is required.");var c=e.ellipsoid,l=e.tileXYToNativeRectangle(t,n,i),u=e.tileXYToRectangle(t,n,i);s=Object(r.a)(s,1);var h=c.cartographicToCartesian(Se.center(u)),d=this._structure,f=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,e.getNumberOfXTilesAtLevel(0))/(1<<i);this._skirtHeight=Math.min(4*f,1e3);var p,m=$s.computeVertices({heightmap:this._buffer,structure:d,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:l,rectangle:u,relativeToCenter:h,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:e.projection instanceof q,exaggeration:s});this._buffer=void 0,p=this._skirtHeight>0?vc.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):vc.getRegularGridIndicesAndEdgeIndices(this._width,this._height);var g=m.gridWidth*m.gridHeight;return new sc(h,m.vertices,p.indices,p.indexCountWithoutSkirts,g,m.minimumHeight,m.maximumHeight,m.boundingSphere3D,m.occludeePointInScaledSpace,m.encoding.getStride(),m.orientedBoundingBox,m.encoding,s,p.westIndicesSouthToNorth,p.southIndicesEastToWest,p.eastIndicesNorthToSouth,p.northIndicesWestToEast)},_c.prototype.interpolateHeight=function(e,t,n){var i,r=this._width,a=this._height,s=this._structure,c=s.stride,l=s.elementsPerHeight,u=s.elementMultiplier,h=s.isBigEndian,d=s.heightOffset,f=s.heightScale;Object(o.a)(this._mesh)?i=yc(this._mesh.vertices,this._mesh.encoding,d,f,e,r,a,t,n,this._mesh.exaggeration):i=(i=function(e,t,n,i,r,o,a,s,c,l){var u=(c-o.west)*(a-1)/(o.east-o.west),h=(l-o.south)*(s-1)/(o.north-o.south),d=0|u,f=d+1;f>=a&&(f=a-1,d=a-2);var p=0|h,m=p+1;m>=s&&(m=s-1,p=s-2);var g=u-d,v=h-p;m=s-1-m;var _=Oc(e,t,n,i,r,(p=s-1-p)*a+d),b=Oc(e,t,n,i,r,p*a+f),y=Oc(e,t,n,i,r,m*a+d),w=Oc(e,t,n,i,r,m*a+f);return wc(g,v,_,b,y,w)}(this._buffer,l,u,c,h,e,r,a,t,n))*f+d;return i},_c.prototype.upsample=function(e,t,n,i,r,s,c){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");if(!Object(o.a)(t))throw new a.a("thisX is required.");if(!Object(o.a)(n))throw new a.a("thisY is required.");if(!Object(o.a)(i))throw new a.a("thisLevel is required.");if(!Object(o.a)(r))throw new a.a("descendantX is required.");if(!Object(o.a)(s))throw new a.a("descendantY is required.");if(!Object(o.a)(c))throw new a.a("descendantLevel is required.");if(c-i>1)throw new a.a("Upsampling through more than one level at a time is not currently supported.");var l=this._mesh;if(Object(o.a)(l)){for(var u=this._width,h=this._height,f=this._structure,p=f.stride,m=new this._bufferType(u*h*p),g=l.vertices,v=l.encoding,_=e.tileXYToRectangle(t,n,i),b=e.tileXYToRectangle(r,s,c),y=f.heightOffset,w=f.heightScale,O=l.exaggeration,C=f.elementsPerHeight,E=f.elementMultiplier,A=f.isBigEndian,x=Math.pow(E,C-1),T=0;T<h;++T)for(var S=d.lerp(b.north,b.south,T/(h-1)),D=0;D<u;++D){var P=yc(g,v,y,w,_,u,h,d.lerp(b.west,b.east,D/(u-1)),S,O);Cc(m,C,E,x,p,A,T*u+D,P=(P=P<f.lowestEncodedHeight?f.lowestEncodedHeight:P)>f.highestEncodedHeight?f.highestEncodedHeight:P)}return new _c({buffer:m,width:u,height:h,childTileMask:0,structure:this._structure,createdByUpsampling:!0})}},_c.prototype.isChildAvailable=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("thisX is required.");if(!Object(o.a)(t))throw new a.a("thisY is required.");if(!Object(o.a)(n))throw new a.a("childX is required.");if(!Object(o.a)(i))throw new a.a("childY is required.");var r=2;return n!==2*e&&++r,i!==2*t&&(r-=2),0!==(this._childTileMask&1<<r)},_c.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var Ec=_c,Ac=n(56),xc=n(43),Tc=n(57);function Sc(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var Dc=new Se;function Pc(e,t,n,i){for(var r=i.length,o=0;o<r;++o){var a=i[o];if(a.x===t&&a.y===n&&a.level===e)return!0}return!1}Sc.prototype.addAvailableTileRange=function(e,t,n,i,r){var o=this._tilingScheme,a=this._rootNodes;if(0===e)for(var s=n;s<=r;++s)for(var c=t;c<=i;++c)Pc(e,c,s,a)||a.push(new Fc(o,void 0,0,c,s));o.tileXYToRectangle(t,n,e,Dc);var l=Dc.west,u=Dc.north;o.tileXYToRectangle(i,r,e,Dc);for(var h=Dc.east,d=new Nc(e,l,Dc.south,h,u),f=0;f<a.length;++f){var p=a[f];zc(p.extent,d)&&kc(this._maximumLevel,p,d)}},Sc.prototype.computeMaximumLevelAtPosition=function(e){for(var t,n=0;n<this._rootNodes.length;++n){var i=this._rootNodes[n];if(Vc(i.extent,e)){t=i;break}}return Object(o.a)(t)?function e(t,n,i){var r=0,o=!1;for(;!o;){var a=n._nw&&Vc(n._nw.extent,i),s=n._ne&&Vc(n._ne.extent,i),c=n._sw&&Vc(n._sw.extent,i),l=n._se&&Vc(n._se.extent,i);if(a+s+c+l>1){a&&(r=Math.max(r,e(n,n._nw,i))),s&&(r=Math.max(r,e(n,n._ne,i))),c&&(r=Math.max(r,e(n,n._sw,i))),l&&(r=Math.max(r,e(n,n._se,i)));break}a?n=n._nw:s?n=n._ne:c?n=n._sw:l?n=n._se:o=!0}for(;n!==t;){for(var u=n.rectangles,h=u.length-1;h>=0&&u[h].level>r;--h){var d=u[h];Vc(d,i)&&(r=d.level)}n=n.parent}return r}(void 0,t,e):-1};var Ic=[],Mc=[],Rc=new Se,Lc=new Se;Sc.prototype.computeBestAvailableLevelOverRectangle=function(e){var t=Ic;t.length=0,e.east<e.west?(t.push(Se.fromRadians(-Math.PI,e.south,e.east,e.north,Rc)),t.push(Se.fromRadians(e.west,e.south,Math.PI,e.north,Lc))):t.push(e);var n,i=Mc;for(i.length=0,n=0;n<this._rootNodes.length;++n)Uc(i,this._rootNodes[n],t);for(n=i.length-1;n>=0;--n)if(Object(o.a)(i[n])&&0===i[n].length)return n;return 0};var jc=new R;function Fc(e,t,n,i,r){this.tilingScheme=e,this.parent=t,this.level=n,this.x=i,this.y=r,this.extent=e.tileXYToRectangle(i,r,n),this.rectangles=[],this._sw=void 0,this._se=void 0,this._nw=void 0,this._ne=void 0}function Nc(e,t,n,i,r){this.level=e,this.west=t,this.south=n,this.east=i,this.north=r}function zc(e,t){var n=Math.max(e.west,t.west),i=Math.max(e.south,t.south),r=Math.min(e.east,t.east);return i<Math.min(e.north,t.north)&&n<r}function kc(e,t,n){for(;t.level<e;)if(Hc(t.nw.extent,n))t=t.nw;else if(Hc(t.ne.extent,n))t=t.ne;else if(Hc(t.sw.extent,n))t=t.sw;else{if(!Hc(t.se.extent,n))break;t=t.se}if(0===t.rectangles.length||t.rectangles[t.rectangles.length-1].level<=n.level)t.rectangles.push(n);else{var i=Ni(t.rectangles,n.level,Bc);i<=0&&(i=~i),t.rectangles.splice(i,0,n)}}function Bc(e,t){return e.level-t}function Hc(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function Vc(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function Uc(e,t,n){if(t){var i,r=!1;for(i=0;i<n.length;++i)r=r||zc(t.extent,n[i]);if(r){var o=t.rectangles;for(i=0;i<o.length;++i){var a=o[i];e[a.level]||(e[a.level]=n),e[a.level]=Wc(e[a.level],a)}Uc(e,t._nw,n),Uc(e,t._ne,n),Uc(e,t._sw,n),Uc(e,t._se,n)}}}function Wc(e,t){for(var n=[],i=0;i<e.length;++i){var r=e[i];zc(r,t)?(r.west<t.west&&n.push(new Se(r.west,r.south,t.west,r.north)),r.east>t.east&&n.push(new Se(t.east,r.south,r.east,r.north)),r.south<t.south&&n.push(new Se(Math.max(t.west,r.west),r.south,Math.min(t.east,r.east),t.south)),r.north>t.north&&n.push(new Se(Math.max(t.west,r.west),t.north,Math.min(t.east,r.east),r.north))):n.push(r)}return n}Sc.prototype.isTileAvailable=function(e,t,n){var i=this._tilingScheme.tileXYToRectangle(t,n,e,Dc);return Se.center(i,jc),this.computeMaximumLevelAtPosition(jc)>=e},Sc.prototype.computeChildMaskForTile=function(e,t,n){var i=e+1;if(i>=this._maximumLevel)return 0;var r=0;return r|=this.isTileAvailable(i,2*t,2*n+1)?1:0,r|=this.isTileAvailable(i,2*t+1,2*n+1)?2:0,r|=this.isTileAvailable(i,2*t,2*n)?4:0,r|=this.isTileAvailable(i,2*t+1,2*n)?8:0},Object.defineProperties(Fc.prototype,{nw:{get:function(){return this._nw||(this._nw=new Fc(this.tilingScheme,this,this.level+1,2*this.x,2*this.y)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new Fc(this.tilingScheme,this,this.level+1,2*this.x+1,2*this.y)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new Fc(this.tilingScheme,this,this.level+1,2*this.x,2*this.y+1)),this._sw}},se:{get:function(){return this._se||(this._se=new Fc(this.tilingScheme,this,this.level+1,2*this.x+1,2*this.y+1)),this._se}}});var Gc=Sc;var qc=function(e){var t,n=e.name,i=e.message;t=Object(o.a)(n)&&Object(o.a)(i)?n+": "+i:e.toString();var r=e.stack;return Object(o.a)(r)&&(t+="\n"+r),t};function Yc(e,t,n,i,o,a,s){this.provider=e,this.message=t,this.x=n,this.y=i,this.level=o,this.timesRetried=Object(r.a)(a,0),this.retry=!1,this.error=s}Yc.handleError=function(e,t,n,i,r,a,s,c,l){var u=e;return Object(o.a)(e)?(u.provider=t,u.message=i,u.x=r,u.y=a,u.level=s,u.retry=!1,u.error=l,++u.timesRetried):u=new Yc(t,i,r,a,s,0,l),n.numberOfListeners>0?n.raiseEvent(u):console.log('An error occurred in "'+t.constructor.name+'": '+qc(i)),u.retry&&Object(o.a)(c)&&c(),u},Yc.handleSuccess=function(e){Object(o.a)(e)&&(e.timesRetried=-1)};var $c=Yc;function Xc(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84),this._numberOfLevelZeroTilesX=Object(r.a)(e.numberOfLevelZeroTilesX,1),this._numberOfLevelZeroTilesY=Object(r.a)(e.numberOfLevelZeroTilesY,1),this._projection=new Vs(this._ellipsoid),Object(o.a)(e.rectangleSouthwestInMeters)&&Object(o.a)(e.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters;else{var t=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new Mt(-t,-t),this._rectangleNortheastInMeters=new Mt(t,t)}var n=this._projection.unproject(this._rectangleSouthwestInMeters),i=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new Se(n.longitude,n.latitude,i.longitude,i.latitude)}Object.defineProperties(Xc.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}}),Xc.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e},Xc.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e},Xc.prototype.rectangleToNativeRectangle=function(e,t){var n=this._projection,i=n.project(Se.southwest(e)),r=n.project(Se.northeast(e));return Object(o.a)(t)?(t.west=i.x,t.south=i.y,t.east=r.x,t.north=r.y,t):new Se(i.x,i.y,r.x,r.y)},Xc.prototype.tileXYToNativeRectangle=function(e,t,n,i){var r=this.getNumberOfXTilesAtLevel(n),a=this.getNumberOfYTilesAtLevel(n),s=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/r,c=this._rectangleSouthwestInMeters.x+e*s,l=this._rectangleSouthwestInMeters.x+(e+1)*s,u=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/a,h=this._rectangleNortheastInMeters.y-t*u,d=this._rectangleNortheastInMeters.y-(t+1)*u;return Object(o.a)(i)?(i.west=c,i.south=d,i.east=l,i.north=h,i):new Se(c,d,l,h)},Xc.prototype.tileXYToRectangle=function(e,t,n,i){var r=this.tileXYToNativeRectangle(e,t,n,i),o=this._projection,a=o.unproject(new Mt(r.west,r.south)),s=o.unproject(new Mt(r.east,r.north));return r.west=a.longitude,r.south=a.latitude,r.east=s.longitude,r.north=s.latitude,r},Xc.prototype.positionToTileXY=function(e,t,n){var i=this._rectangle;if(Se.contains(i,e)){var r=this.getNumberOfXTilesAtLevel(t),a=this.getNumberOfYTilesAtLevel(t),s=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/r,c=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/a,l=this._projection.project(e),u=(l.x-this._rectangleSouthwestInMeters.x)/s|0;u>=r&&(u=r-1);var h=(this._rectangleNortheastInMeters.y-l.y)/c|0;return h>=a&&(h=a-1),Object(o.a)(n)?(n.x=u,n.y=h,n):new Mt(u,h)}};var Kc=Xc;function Qc(e){if(!Object(o.a)(e)||!Object(o.a)(e.url))throw new a.a("options.url is required.");this._resource=void 0,this._credit=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._maxLevel=void 0,this._terrainDataStructure=void 0,this._ready=!1,this._width=void 0,this._height=void 0,this._encoding=void 0;var t=e.token;this._hasAvailability=!1,this._tilesAvailable=void 0,this._tilesAvailablityLoaded=void 0,this._availableCache={};var n=this,i=Object(r.a)(e.ellipsoid,W.WGS84);this._readyPromise=Object(Yt.a)(e.url).then((function(e){var i=_t.a.createIfNeeded(e);return i.appendForwardSlash(),Object(o.a)(t)&&(i=i.getDerivedResource({queryParameters:{token:t}})),n._resource=i,i.getDerivedResource({queryParameters:{f:"pjson"}}).fetchJson()})).then((function(e){var t=e.copyrightText;Object(o.a)(t)&&(n._credit=new yn(t));var a=e.spatialReference,s=Object(r.a)(a.latestWkid,a.wkid),c=e.extent,l={ellipsoid:i};if(4326===s)l.rectangle=Se.fromDegrees(c.xmin,c.ymin,c.xmax,c.ymax),n._tilingScheme=new Lt(l);else{if(3857!==s)return Yt.a.reject(new de.a("Invalid spatial reference"));l.rectangleSouthwestInMeters=new Mt(c.xmin,c.ymin),l.rectangleNortheastInMeters=new Mt(c.xmax,c.ymax),n._tilingScheme=new Kc(l)}var u=e.tileInfo;return Object(o.a)(u)?(n._width=u.rows+1,n._height=u.cols+1,n._encoding="LERC"===u.format?On.LERC:On.NONE,n._lodCount=u.lods.length-1,(n._hasAvailability=-1!==e.capabilities.indexOf("Tilemap"))&&(n._tilesAvailable=new Gc(n._tilingScheme,n._lodCount),n._tilesAvailable.addAvailableTileRange(0,0,0,n._tilingScheme.getNumberOfXTilesAtLevel(0),n._tilingScheme.getNumberOfYTilesAtLevel(0)),n._tilesAvailablityLoaded=new Gc(n._tilingScheme,n._lodCount)),n._levelZeroMaximumGeometricError=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(n._tilingScheme.ellipsoid,n._width,n._tilingScheme.getNumberOfXTilesAtLevel(0)),e.bandCount>1&&console.log("ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."),n._terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:e.minValues[0],highestEncodedHeight:e.maxValues[0]},n._ready=!0,!0):Yt.a.reject(new de.a("tileInfo is required"))})).otherwise((function(e){var t="An error occurred while accessing "+n._resource.url+".";return $c.handleError(void 0,n,n._errorEvent,t),Yt.a.reject(e)})),this._errorEvent=new wn.a}function Zc(e,t,n,i){if(e._hasAvailability){var r=e._tilesAvailablityLoaded,o=e._tilesAvailable;return!(t>e._lodCount)&&(!!o.isTileAvailable(t,n,i)||!r.isTileAvailable(t,n,i)&&void 0)}}function Jc(e,t,n,i){for(var r=t-1,o=n-1,a=i[e.y*t+e.x],s=[],c={startX:e.x,startY:e.y,endX:0,endY:0},l=new Mt(e.x+1,e.y+1),u=!1,h=!1;!u||!h;){var d=l.x,f=h?l.y+1:l.y;if(!u){for(var p=e.y;p<f;++p)if(i[p*t+l.x]!==a){u=!0;break}u?(s.push(new Mt(l.x,e.y)),--l.x,--d,c.endX=l.x):l.x===r?(c.endX=l.x,u=!0):++l.x}if(!h){for(var m=l.y*t,g=e.x;g<=d;++g)if(i[m+g]!==a){h=!0;break}h?(s.push(new Mt(e.x,l.y)),--l.y,c.endY=l.y):l.y===o?(c.endY=l.y,h=!0):++l.y}}return{endingIndices:s,range:c,value:a}}function el(e,t,n,i){if(!e._hasAvailability)return{};var r=128*Math.floor(n/128),a=128*Math.floor(i/128),s=Math.min(1<<t,128),c="tilemap/"+t+"/"+a+"/"+r+"/"+s+"/"+s,l=e._availableCache;if(Object(o.a)(l[c]))return l[c];var u=new Ac.a({throttle:!0,throttleByServer:!0,type:Tc.a.TERRAIN}),h=e._resource.getDerivedResource({url:c,request:u}).fetchJson();return Object(o.a)(h)?(h=h.then((function(o){var c=function(e,t,n,i,r){var o=[];if(r.every((function(e){return e===r[0]})))return 1===r[0]&&o.push({startX:e,startY:t,endX:e+n-1,endY:t+i-1}),o;for(var a=[new Mt(0,0)];a.length>0;){var s=Jc(a.pop(),n,i,r);if(1===s.value){var c=s.range;c.startX+=e,c.endX+=e,c.startY+=t,c.endY+=t,o.push(c)}var l=s.endingIndices;l.length>0&&(a=a.concat(l))}return o}(r,a,s,s,o.data);e._tilesAvailablityLoaded.addAvailableTileRange(r,a,r+s,a+s);for(var l=e._tilesAvailable,u=0;u<c.length;++u){var h=c[u];l.addAvailableTileRange(t,h.startX,h.startY,h.endX,h.endY)}return Zc(e,t,n,i)})),l[c]={promise:h,request:u},{promise:h=h.always((function(e){return delete l[c],e})),request:u}):{}}Object.defineProperties(Qc.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){if(!this.ready)throw new a.a("credit must not be called before ready returns true.");return this._credit}},tilingScheme:{get:function(){if(!this.ready)throw new a.a("tilingScheme must not be called before ready returns true.");return this._tilingScheme}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}}),Qc.prototype.requestTileGeometry=function(e,t,n,i){if(!this._ready)throw new a.a("requestTileGeometry must not be called before the terrain provider is ready.");var r,s=this._resource.getDerivedResource({url:"tile/"+n+"/"+t+"/"+e,request:i}),c=this._hasAvailability,l=Yt.a.resolve(!0);if(c&&!Object(o.a)(Zc(this,n+1,2*e,2*t))){var u=el(this,n+1,2*e,2*t);l=u.promise,r=u.request}var h=s.fetchArrayBuffer();if(Object(o.a)(h)&&Object(o.a)(l)){var d=this,f=this._tilesAvailable;return Yt.a.join(h,l).then((function(i){return new Ec({buffer:i[0],width:d._width,height:d._height,childTileMask:c?f.computeChildMaskForTile(n,e,t):15,structure:d._terrainDataStructure,encoding:d._encoding})})).otherwise((function(e){return Object(o.a)(r)&&r.state===xc.a.CANCELLED?(i.cancel(),i.deferred.promise.always((function(){return i.state=xc.a.CANCELLED,Yt.a.reject(e)}))):Yt.a.reject(e)}))}},Qc.prototype.getLevelMaximumGeometricError=function(e){if(!this.ready)throw new a.a("getLevelMaximumGeometricError must not be called before ready returns true.");return this._levelZeroMaximumGeometricError/(1<<e)},Qc.prototype.getTileDataAvailable=function(e,t,n){if(this._hasAvailability){var i=Zc(this,n,e,t);if(Object(o.a)(i))return i;el(this,n,e,t)}},Qc.prototype.loadTileDataAvailability=function(e,t,n){};var tl=Object.freeze({NONE:0,GEODESIC:1,RHUMB:2});var nl=function(e,t,n,a){if(i.a.defined("array",e),i.a.defined("value",t),Object(o.a)(n)&&i.a.typeOf.number("start",n),Object(o.a)(a)&&i.a.typeOf.number("end",a),"function"===typeof e.fill)return e.fill(t,n,a);for(var s=e.length>>>0,c=Object(r.a)(n,0),l=c<0?Math.max(s+c,0):Math.min(c,s),u=Object(r.a)(a,s),h=u<0?Math.max(s+u,0):Math.min(u,s);l<h;)e[l]=t,l++;return e},il=d.EPSILON10;var rl=function(e,t,n){if(i.a.defined("equalsEpsilon",t),Object(o.a)(e)){n=Object(r.a)(n,!1);var a,s,c,l=e.length;if(l<2)return e;for(a=1;a<l&&!t(s=e[a-1],c=e[a],il);++a);if(a===l)return n&&t(e[0],e[e.length-1],il)?e.slice(1):e;for(var u=e.slice(0,a);a<l;++a)t(s,c=e[a],il)||(u.push(c),s=c);return n&&u.length>1&&t(u[0],u[u.length-1],il)&&u.shift(),u}};var ol=function(e,t,n){if(i.a.defined("array",e),Object(o.a)(t)&&i.a.typeOf.number("begin",t),Object(o.a)(n)&&i.a.typeOf.number("end",n),"function"===typeof e.slice)return e.slice(t,n);for(var r=Array.prototype.slice.call(e,t,n),a=oo.typedArrayTypes,s=a.length,c=0;c<s;++c)if(e instanceof a[c]){r=new a[c](r);break}return r};function al(){this._array=[],this._hash={}}Object.defineProperties(al.prototype,{length:{get:function(){return this._array.length}},values:{get:function(){return this._array}}}),al.prototype.contains=function(e){if("string"!==typeof e&&"number"!==typeof e)throw new a.a("key is required to be a string or number.");return Object(o.a)(this._hash[e])},al.prototype.set=function(e,t){if("string"!==typeof e&&"number"!==typeof e)throw new a.a("key is required to be a string or number.");t!==this._hash[e]&&(this.remove(e),this._hash[e]=t,this._array.push(t))},al.prototype.get=function(e){if("string"!==typeof e&&"number"!==typeof e)throw new a.a("key is required to be a string or number.");return this._hash[e]},al.prototype.remove=function(e){if(Object(o.a)(e)&&"string"!==typeof e&&"number"!==typeof e)throw new a.a("key is required to be a string or number.");var t=this._hash[e],n=Object(o.a)(t);if(n){var i=this._array;i.splice(i.indexOf(t),1),delete this._hash[e]}return n},al.prototype.removeAll=function(){var e=this._array;e.length>0&&(this._hash={},e.length=0)};var sl=al,cl=new O,ll=new O,ul=new O;var hl=function(e,t,n,r,a){var s,c,l,u,h,f,p,m;if(i.a.defined("point",e),i.a.defined("p0",t),i.a.defined("p1",n),i.a.defined("p2",r),Object(o.a)(a)||(a=new O),Object(o.a)(t.z)){if(O.equalsEpsilon(e,t,d.EPSILON14))return O.clone(O.UNIT_X,a);if(O.equalsEpsilon(e,n,d.EPSILON14))return O.clone(O.UNIT_Y,a);if(O.equalsEpsilon(e,r,d.EPSILON14))return O.clone(O.UNIT_Z,a);s=O.subtract(n,t,cl),c=O.subtract(r,t,ll),l=O.subtract(e,t,ul),u=O.dot(s,s),h=O.dot(s,c),f=O.dot(s,l),p=O.dot(c,c),m=O.dot(c,l)}else{if(Mt.equalsEpsilon(e,t,d.EPSILON14))return O.clone(O.UNIT_X,a);if(Mt.equalsEpsilon(e,n,d.EPSILON14))return O.clone(O.UNIT_Y,a);if(Mt.equalsEpsilon(e,r,d.EPSILON14))return O.clone(O.UNIT_Z,a);s=Mt.subtract(n,t,cl),c=Mt.subtract(r,t,ll),l=Mt.subtract(e,t,ul),u=Mt.dot(s,s),h=Mt.dot(s,c),f=Mt.dot(s,l),p=Mt.dot(c,c),m=Mt.dot(c,l)}a.y=p*f-h*m,a.z=u*m-h*f;var g=u*p-h*h;return 0!==a.y&&(a.y/=g),0!==a.z&&(a.z/=g),a.x=1-a.y-a.z,a},dl={defaultKey:void 0,getKey:function(e){return Object(o.a)(e)?e:dl.defaultKey}},fl=dl;function pl(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).key;this._key=fl.getKey(t),this._resource=new _t.a({url:"https://dev.virtualearth.net/REST/v1/Locations",queryParameters:{key:this._key}})}Object.defineProperties(pl.prototype,{url:{get:function(){return"https://dev.virtualearth.net/REST/v1/Locations"}},key:{get:function(){return this._key}}}),pl.prototype.geocode=function(e){return i.a.typeOf.string("query",e),this._resource.getDerivedResource({queryParameters:{query:e}}).fetchJsonp("jsonp").then((function(e){return 0===e.resourceSets.length?[]:e.resourceSets[0].resources.map((function(e){var t=e.bbox,n=t[0],i=t[1],r=t[2],o=t[3];return{displayName:e.name,destination:Se.fromDegrees(i,n,o,r)}}))}))};function ml(e,t,n,i){this.x=Object(r.a)(e,0),this.y=Object(r.a)(t,0),this.width=Object(r.a)(n,0),this.height=Object(r.a)(i,0)}ml.packedLength=4,ml.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t},ml.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new ml),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n},ml.fromPoints=function(e,t){if(Object(o.a)(t)||(t=new ml),!Object(o.a)(e)||0===e.length)return t.x=0,t.y=0,t.width=0,t.height=0,t;for(var n=e.length,i=e[0].x,r=e[0].y,a=e[0].x,s=e[0].y,c=1;c<n;c++){var l=e[c],u=l.x,h=l.y;i=Math.min(u,i),a=Math.max(u,a),r=Math.min(h,r),s=Math.max(h,s)}return t.x=i,t.y=r,t.width=a-i,t.height=s-r,t};var gl=new q,vl=new R,_l=new R;ml.fromRectangle=function(e,t,n){if(Object(o.a)(n)||(n=new ml),!Object(o.a)(e))return n.x=0,n.y=0,n.width=0,n.height=0,n;var i=(t=Object(r.a)(t,gl)).project(Se.southwest(e,vl)),a=t.project(Se.northeast(e,_l));return Mt.subtract(a,i,a),n.x=i.x,n.y=i.y,n.width=a.x,n.height=a.y,n},ml.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t):new ml(e.x,e.y,e.width,e.height)},ml.union=function(e,t,n){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),Object(o.a)(n)||(n=new ml);var r=Math.min(e.x,t.x),a=Math.min(e.y,t.y),s=Math.max(e.x+e.width,t.x+t.width),c=Math.max(e.y+e.height,t.y+t.height);return n.x=r,n.y=a,n.width=s-r,n.height=c-a,n},ml.expand=function(e,t,n){i.a.typeOf.object("rectangle",e),i.a.typeOf.object("point",t),n=ml.clone(e,n);var r=t.x-n.x,o=t.y-n.y;return r>n.width?n.width=r:r<0&&(n.width-=r,n.x=t.x),o>n.height?n.height=o:o<0&&(n.height-=o,n.y=t.y),n},ml.intersect=function(e,t){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t);var n=e.x,r=e.y,o=t.x,a=t.y;return n>o+t.width||n+e.width<o||r+e.height<a||r>a+t.height?Y.OUTSIDE:Y.INTERSECTING},ml.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height},ml.prototype.clone=function(e){return ml.clone(this,e)},ml.prototype.intersect=function(e){return ml.intersect(this,e)},ml.prototype.equals=function(e){return ml.equals(this,e)};var bl=ml,yl=Object.freeze({NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3});function wl(e,t,n,i){this[0]=Object(r.a)(e,0),this[1]=Object(r.a)(n,0),this[2]=Object(r.a)(t,0),this[3]=Object(r.a)(i,0)}wl.packedLength=4,wl.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t},wl.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new wl),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n},wl.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new wl(e[0],e[2],e[1],e[3])},wl.fromArray=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new wl),n[0]=e[t],n[1]=e[t+1],n[2]=e[t+2],n[3]=e[t+3],n},wl.fromColumnMajorArray=function(e,t){return i.a.defined("values",e),wl.clone(e,t)},wl.fromRowMajorArray=function(e,t){return i.a.defined("values",e),Object(o.a)(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new wl(e[0],e[1],e[2],e[3])},wl.fromScale=function(e,t){return i.a.typeOf.object("scale",e),Object(o.a)(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new wl(e.x,0,0,e.y)},wl.fromUniformScale=function(e,t){return i.a.typeOf.number("scale",e),Object(o.a)(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new wl(e,0,0,e)},wl.fromRotation=function(e,t){i.a.typeOf.number("angle",e);var n=Math.cos(e),r=Math.sin(e);return Object(o.a)(t)?(t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t):new wl(n,-r,r,n)},wl.toArray=function(e,t){return i.a.typeOf.object("matrix",e),Object(o.a)(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]},wl.getElementIndex=function(e,t){return i.a.typeOf.number.greaterThanOrEquals("row",t,0),i.a.typeOf.number.lessThanOrEquals("row",t,1),i.a.typeOf.number.greaterThanOrEquals("column",e,0),i.a.typeOf.number.lessThanOrEquals("column",e,1),2*e+t},wl.getColumn=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,1),i.a.typeOf.object("result",n);var r=2*t,o=e[r],a=e[r+1];return n.x=o,n.y=a,n},wl.setColumn=function(e,t,n,r){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,1),i.a.typeOf.object("cartesian",n),i.a.typeOf.object("result",r);var o=2*t;return(r=wl.clone(e,r))[o]=n.x,r[o+1]=n.y,r},wl.getRow=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,1),i.a.typeOf.object("result",n);var r=e[t],o=e[t+2];return n.x=r,n.y=o,n},wl.setRow=function(e,t,n,r){return i.a.typeOf.object("matrix",e),i.a.typeOf.number.greaterThanOrEquals("index",t,0),i.a.typeOf.number.lessThanOrEquals("index",t,1),i.a.typeOf.object("cartesian",n),i.a.typeOf.object("result",r),(r=wl.clone(e,r))[t]=n.x,r[t+2]=n.y,r};var Ol=new Mt;wl.getScale=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t.x=Mt.magnitude(Mt.fromElements(e[0],e[1],Ol)),t.y=Mt.magnitude(Mt.fromElements(e[2],e[3],Ol)),t};var Cl=new Mt;wl.getMaximumScale=function(e){return wl.getScale(e,Cl),Mt.maximumComponent(Cl)},wl.multiply=function(e,t,n){i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n);var r=e[0]*t[0]+e[2]*t[1],o=e[0]*t[2]+e[2]*t[3],a=e[1]*t[0]+e[3]*t[1],s=e[1]*t[2]+e[3]*t[3];return n[0]=r,n[1]=a,n[2]=o,n[3]=s,n},wl.add=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n},wl.subtract=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n},wl.multiplyByVector=function(e,t,n){i.a.typeOf.object("matrix",e),i.a.typeOf.object("cartesian",t),i.a.typeOf.object("result",n);var r=e[0]*t.x+e[2]*t.y,o=e[1]*t.x+e[3]*t.y;return n.x=r,n.y=o,n},wl.multiplyByScalar=function(e,t,n){return i.a.typeOf.object("matrix",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n},wl.multiplyByScale=function(e,t,n){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("scale",t),i.a.typeOf.object("result",n),n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.y,n[3]=e[3]*t.y,n},wl.negate=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},wl.transpose=function(e,t){i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t);var n=e[0],r=e[2],o=e[1],a=e[3];return t[0]=n,t[1]=r,t[2]=o,t[3]=a,t},wl.abs=function(e,t){return i.a.typeOf.object("matrix",e),i.a.typeOf.object("result",t),t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t},wl.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},wl.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]},wl.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n},wl.IDENTITY=Object.freeze(new wl(1,0,0,1)),wl.ZERO=Object.freeze(new wl(0,0,0,0)),wl.COLUMN0ROW0=0,wl.COLUMN0ROW1=1,wl.COLUMN1ROW0=2,wl.COLUMN1ROW1=3,Object.defineProperties(wl.prototype,{length:{get:function(){return wl.packedLength}}}),wl.prototype.clone=function(e){return wl.clone(this,e)},wl.prototype.equals=function(e){return wl.equals(this,e)},wl.prototype.equalsEpsilon=function(e,t){return wl.equalsEpsilon(this,e,t)},wl.prototype.toString=function(){return"("+this[0]+", "+this[2]+")\n("+this[1]+", "+this[3]+")"};var El=wl,Al={POINTS:Ts.POINTS,LINES:Ts.LINES,LINE_LOOP:Ts.LINE_LOOP,LINE_STRIP:Ts.LINE_STRIP,TRIANGLES:Ts.TRIANGLES,TRIANGLE_STRIP:Ts.TRIANGLE_STRIP,TRIANGLE_FAN:Ts.TRIANGLE_FAN,validate:function(e){return e===Al.POINTS||e===Al.LINES||e===Al.LINE_LOOP||e===Al.LINE_STRIP||e===Al.TRIANGLES||e===Al.TRIANGLE_STRIP||e===Al.TRIANGLE_FAN}},xl=Object.freeze(Al);function Tl(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.typeOf.object("options.attributes",e.attributes),this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=Object(r.a)(e.primitiveType,xl.TRIANGLES),this.boundingSphere=e.boundingSphere,this.geometryType=Object(r.a)(e.geometryType,yl.NONE),this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}Tl.computeNumberOfVertices=function(e){i.a.typeOf.object("geometry",e);var t=-1;for(var n in e.attributes)if(e.attributes.hasOwnProperty(n)&&Object(o.a)(e.attributes[n])&&Object(o.a)(e.attributes[n].values)){var r=e.attributes[n],s=r.values.length/r.componentsPerAttribute;if(t!==s&&-1!==t)throw new a.a("All attribute lists must have the same number of attributes.");t=s}return t};var Sl=new R,Dl=new O,Pl=new Ae,Il=[new R,new R,new R],Ml=[new Mt,new Mt,new Mt],Rl=[new Mt,new Mt,new Mt],Ll=new O,jl=new No,Fl=new Ae,Nl=new El;Tl._textureCoordinateRotationPoints=function(e,t,n,i){var r,o=Se.center(i,Sl),a=R.toCartesian(o,n,Dl),s=ya.eastNorthUpToFixedFrame(a,n,Pl),c=Ae.inverse(s,Pl),l=Ml,u=Il;u[0].longitude=i.west,u[0].latitude=i.south,u[1].longitude=i.west,u[1].latitude=i.north,u[2].longitude=i.east,u[2].latitude=i.south;var h=Ll;for(r=0;r<3;r++)R.toCartesian(u[r],n,h),h=Ae.multiplyByPointAsVector(c,h,h),l[r].x=h.x,l[r].y=h.y;var d=No.fromAxisAngle(O.UNIT_Z,-t,jl),f=oe.fromQuaternion(d,Fl),p=e.length,m=Number.POSITIVE_INFINITY,g=Number.POSITIVE_INFINITY,v=Number.NEGATIVE_INFINITY,_=Number.NEGATIVE_INFINITY;for(r=0;r<p;r++)h=Ae.multiplyByPointAsVector(c,e[r],h),h=oe.multiplyByVector(f,h,h),m=Math.min(m,h.x),g=Math.min(g,h.y),v=Math.max(v,h.x),_=Math.max(_,h.y);var b=El.fromRotation(t,Nl),y=Rl;y[0].x=m,y[0].y=g,y[1].x=m,y[1].y=_,y[2].x=v,y[2].y=g;var w=l[0],C=l[2].x-w.x,E=l[1].y-w.y;for(r=0;r<3;r++){var A=y[r];El.multiplyByVector(b,A,A),A.x=(A.x-w.x)/C,A.y=(A.y-w.y)/E}var x=y[0],T=y[1],S=y[2],D=new Array(6);return Mt.pack(x,D),Mt.pack(T,D,2),Mt.pack(S,D,4),D};var zl=Tl;var kl=function(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.componentDatatype))throw new a.a("options.componentDatatype is required.");if(!Object(o.a)(e.componentsPerAttribute))throw new a.a("options.componentsPerAttribute is required.");if(e.componentsPerAttribute<1||e.componentsPerAttribute>4)throw new a.a("options.componentsPerAttribute must be between 1 and 4.");if(!Object(o.a)(e.values))throw new a.a("options.values is required.");this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=Object(r.a)(e.normalize,!1),this.values=e.values};var Bl=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.position=e.position,this.normal=e.normal,this.st=e.st,this.bitangent=e.bitangent,this.tangent=e.tangent,this.color=e.color},Hl=Object.freeze({NONE:0,TOP:1,ALL:2});function Vl(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.position=Object(r.a)(e.position,!1),this.normal=Object(r.a)(e.normal,!1),this.st=Object(r.a)(e.st,!1),this.bitangent=Object(r.a)(e.bitangent,!1),this.tangent=Object(r.a)(e.tangent,!1),this.color=Object(r.a)(e.color,!1)}Vl.POSITION_ONLY=Object.freeze(new Vl({position:!0})),Vl.POSITION_AND_NORMAL=Object.freeze(new Vl({position:!0,normal:!0})),Vl.POSITION_NORMAL_AND_ST=Object.freeze(new Vl({position:!0,normal:!0,st:!0})),Vl.POSITION_AND_ST=Object.freeze(new Vl({position:!0,st:!0})),Vl.POSITION_AND_COLOR=Object.freeze(new Vl({position:!0,color:!0})),Vl.ALL=Object.freeze(new Vl({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0})),Vl.DEFAULT=Vl.POSITION_NORMAL_AND_ST,Vl.packedLength=6,Vl.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t},Vl.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");return t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Vl),n.position=1===e[t++],n.normal=1===e[t++],n.st=1===e[t++],n.tangent=1===e[t++],n.bitangent=1===e[t++],n.color=1===e[t],n},Vl.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)||(t=new Vl),t.position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t};var Ul=Vl,Wl=new O;function Gl(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).minimum,n=e.maximum;if(i.a.typeOf.object("min",t),i.a.typeOf.object("max",n),Object(o.a)(e.offsetAttribute)&&e.offsetAttribute===Hl.TOP)throw new a.a("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");var s=Object(r.a)(e.vertexFormat,Ul.DEFAULT);this._minimum=O.clone(t),this._maximum=O.clone(n),this._vertexFormat=s,this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxGeometry"}Gl.fromDimensions=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).dimensions;i.a.typeOf.object("dimensions",t),i.a.typeOf.number.greaterThanOrEquals("dimensions.x",t.x,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.y",t.y,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.z",t.z,0);var n=O.multiplyByScalar(t,.5,new O);return new Gl({minimum:O.negate(n,new O),maximum:n,vertexFormat:e.vertexFormat,offsetAttribute:e.offsetAttribute})},Gl.fromAxisAlignedBoundingBox=function(e){return i.a.typeOf.object("boundingBox",e),new Gl({minimum:e.minimum,maximum:e.maximum})},Gl.packedLength=2*O.packedLength+Ul.packedLength+1,Gl.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),O.pack(e._minimum,t,n),O.pack(e._maximum,t,n+O.packedLength),Ul.pack(e._vertexFormat,t,n+2*O.packedLength),t[n+2*O.packedLength+Ul.packedLength]=Object(r.a)(e._offsetAttribute,-1),t};var ql,Yl=new O,$l=new O,Xl=new Ul,Kl={minimum:Yl,maximum:$l,vertexFormat:Xl,offsetAttribute:void 0};Gl.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=O.unpack(e,t,Yl),s=O.unpack(e,t+O.packedLength,$l),c=Ul.unpack(e,t+2*O.packedLength,Xl),l=e[t+2*O.packedLength+Ul.packedLength];return Object(o.a)(n)?(n._minimum=O.clone(a,n._minimum),n._maximum=O.clone(s,n._maximum),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._offsetAttribute=-1===l?void 0:l,n):(Kl.offsetAttribute=-1===l?void 0:l,new Gl(Kl))},Gl.createGeometry=function(e){var t=e._minimum,n=e._maximum,i=e._vertexFormat;if(!O.equals(t,n)){var r,a,s=new Bl;if(i.position&&(i.st||i.normal||i.tangent||i.bitangent)){if(i.position&&((a=new Float64Array(72))[0]=t.x,a[1]=t.y,a[2]=n.z,a[3]=n.x,a[4]=t.y,a[5]=n.z,a[6]=n.x,a[7]=n.y,a[8]=n.z,a[9]=t.x,a[10]=n.y,a[11]=n.z,a[12]=t.x,a[13]=t.y,a[14]=t.z,a[15]=n.x,a[16]=t.y,a[17]=t.z,a[18]=n.x,a[19]=n.y,a[20]=t.z,a[21]=t.x,a[22]=n.y,a[23]=t.z,a[24]=n.x,a[25]=t.y,a[26]=t.z,a[27]=n.x,a[28]=n.y,a[29]=t.z,a[30]=n.x,a[31]=n.y,a[32]=n.z,a[33]=n.x,a[34]=t.y,a[35]=n.z,a[36]=t.x,a[37]=t.y,a[38]=t.z,a[39]=t.x,a[40]=n.y,a[41]=t.z,a[42]=t.x,a[43]=n.y,a[44]=n.z,a[45]=t.x,a[46]=t.y,a[47]=n.z,a[48]=t.x,a[49]=n.y,a[50]=t.z,a[51]=n.x,a[52]=n.y,a[53]=t.z,a[54]=n.x,a[55]=n.y,a[56]=n.z,a[57]=t.x,a[58]=n.y,a[59]=n.z,a[60]=t.x,a[61]=t.y,a[62]=t.z,a[63]=n.x,a[64]=t.y,a[65]=t.z,a[66]=n.x,a[67]=t.y,a[68]=n.z,a[69]=t.x,a[70]=t.y,a[71]=n.z,s.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:a})),i.normal){var c=new Float32Array(72);c[0]=0,c[1]=0,c[2]=1,c[3]=0,c[4]=0,c[5]=1,c[6]=0,c[7]=0,c[8]=1,c[9]=0,c[10]=0,c[11]=1,c[12]=0,c[13]=0,c[14]=-1,c[15]=0,c[16]=0,c[17]=-1,c[18]=0,c[19]=0,c[20]=-1,c[21]=0,c[22]=0,c[23]=-1,c[24]=1,c[25]=0,c[26]=0,c[27]=1,c[28]=0,c[29]=0,c[30]=1,c[31]=0,c[32]=0,c[33]=1,c[34]=0,c[35]=0,c[36]=-1,c[37]=0,c[38]=0,c[39]=-1,c[40]=0,c[41]=0,c[42]=-1,c[43]=0,c[44]=0,c[45]=-1,c[46]=0,c[47]=0,c[48]=0,c[49]=1,c[50]=0,c[51]=0,c[52]=1,c[53]=0,c[54]=0,c[55]=1,c[56]=0,c[57]=0,c[58]=1,c[59]=0,c[60]=0,c[61]=-1,c[62]=0,c[63]=0,c[64]=-1,c[65]=0,c[66]=0,c[67]=-1,c[68]=0,c[69]=0,c[70]=-1,c[71]=0,s.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:c})}if(i.st){var l=new Float32Array(48);l[0]=0,l[1]=0,l[2]=1,l[3]=0,l[4]=1,l[5]=1,l[6]=0,l[7]=1,l[8]=1,l[9]=0,l[10]=0,l[11]=0,l[12]=0,l[13]=1,l[14]=1,l[15]=1,l[16]=0,l[17]=0,l[18]=1,l[19]=0,l[20]=1,l[21]=1,l[22]=0,l[23]=1,l[24]=1,l[25]=0,l[26]=0,l[27]=0,l[28]=0,l[29]=1,l[30]=1,l[31]=1,l[32]=1,l[33]=0,l[34]=0,l[35]=0,l[36]=0,l[37]=1,l[38]=1,l[39]=1,l[40]=0,l[41]=0,l[42]=1,l[43]=0,l[44]=1,l[45]=1,l[46]=0,l[47]=1,s.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:l})}if(i.tangent){var u=new Float32Array(72);u[0]=1,u[1]=0,u[2]=0,u[3]=1,u[4]=0,u[5]=0,u[6]=1,u[7]=0,u[8]=0,u[9]=1,u[10]=0,u[11]=0,u[12]=-1,u[13]=0,u[14]=0,u[15]=-1,u[16]=0,u[17]=0,u[18]=-1,u[19]=0,u[20]=0,u[21]=-1,u[22]=0,u[23]=0,u[24]=0,u[25]=1,u[26]=0,u[27]=0,u[28]=1,u[29]=0,u[30]=0,u[31]=1,u[32]=0,u[33]=0,u[34]=1,u[35]=0,u[36]=0,u[37]=-1,u[38]=0,u[39]=0,u[40]=-1,u[41]=0,u[42]=0,u[43]=-1,u[44]=0,u[45]=0,u[46]=-1,u[47]=0,u[48]=-1,u[49]=0,u[50]=0,u[51]=-1,u[52]=0,u[53]=0,u[54]=-1,u[55]=0,u[56]=0,u[57]=-1,u[58]=0,u[59]=0,u[60]=1,u[61]=0,u[62]=0,u[63]=1,u[64]=0,u[65]=0,u[66]=1,u[67]=0,u[68]=0,u[69]=1,u[70]=0,u[71]=0,s.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:u})}if(i.bitangent){var h=new Float32Array(72);h[0]=0,h[1]=1,h[2]=0,h[3]=0,h[4]=1,h[5]=0,h[6]=0,h[7]=1,h[8]=0,h[9]=0,h[10]=1,h[11]=0,h[12]=0,h[13]=1,h[14]=0,h[15]=0,h[16]=1,h[17]=0,h[18]=0,h[19]=1,h[20]=0,h[21]=0,h[22]=1,h[23]=0,h[24]=0,h[25]=0,h[26]=1,h[27]=0,h[28]=0,h[29]=1,h[30]=0,h[31]=0,h[32]=1,h[33]=0,h[34]=0,h[35]=1,h[36]=0,h[37]=0,h[38]=1,h[39]=0,h[40]=0,h[41]=1,h[42]=0,h[43]=0,h[44]=1,h[45]=0,h[46]=0,h[47]=1,h[48]=0,h[49]=0,h[50]=1,h[51]=0,h[52]=0,h[53]=1,h[54]=0,h[55]=0,h[56]=1,h[57]=0,h[58]=0,h[59]=1,h[60]=0,h[61]=0,h[62]=1,h[63]=0,h[64]=0,h[65]=1,h[66]=0,h[67]=0,h[68]=1,h[69]=0,h[70]=0,h[71]=1,s.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:h})}(r=new Uint16Array(36))[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3,r[6]=6,r[7]=5,r[8]=4,r[9]=7,r[10]=6,r[11]=4,r[12]=8,r[13]=9,r[14]=10,r[15]=8,r[16]=10,r[17]=11,r[18]=14,r[19]=13,r[20]=12,r[21]=15,r[22]=14,r[23]=12,r[24]=18,r[25]=17,r[26]=16,r[27]=19,r[28]=18,r[29]=16,r[30]=20,r[31]=21,r[32]=22,r[33]=20,r[34]=22,r[35]=23}else(a=new Float64Array(24))[0]=t.x,a[1]=t.y,a[2]=t.z,a[3]=n.x,a[4]=t.y,a[5]=t.z,a[6]=n.x,a[7]=n.y,a[8]=t.z,a[9]=t.x,a[10]=n.y,a[11]=t.z,a[12]=t.x,a[13]=t.y,a[14]=n.z,a[15]=n.x,a[16]=t.y,a[17]=n.z,a[18]=n.x,a[19]=n.y,a[20]=n.z,a[21]=t.x,a[22]=n.y,a[23]=n.z,s.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:a}),(r=new Uint16Array(36))[0]=4,r[1]=5,r[2]=6,r[3]=4,r[4]=6,r[5]=7,r[6]=1,r[7]=0,r[8]=3,r[9]=1,r[10]=3,r[11]=2,r[12]=1,r[13]=6,r[14]=5,r[15]=1,r[16]=2,r[17]=6,r[18]=2,r[19]=3,r[20]=7,r[21]=2,r[22]=7,r[23]=6,r[24]=3,r[25]=0,r[26]=4,r[27]=3,r[28]=4,r[29]=7,r[30]=0,r[31]=1,r[32]=5,r[33]=0,r[34]=5,r[35]=4;var d=O.subtract(n,t,Wl),f=.5*O.magnitude(d);if(Object(o.a)(e._offsetAttribute)){var p=a.length,m=new Uint8Array(p/3),g=e._offsetAttribute===Hl.NONE?0:1;nl(m,g),s.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:m})}return new zl({attributes:s,indices:r,primitiveType:xl.TRIANGLES,boundingSphere:new gt(O.ZERO,f),offsetAttribute:e._offsetAttribute})}},Gl.getUnitBox=function(){return Object(o.a)(ql)||(ql=Gl.createGeometry(Gl.fromDimensions({dimensions:new O(1,1,1),vertexFormat:Ul.POSITION_ONLY}))),ql};var Ql=Gl,Zl=new O;function Jl(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).minimum,n=e.maximum;if(i.a.typeOf.object("min",t),i.a.typeOf.object("max",n),Object(o.a)(e.offsetAttribute)&&e.offsetAttribute===Hl.TOP)throw new a.a("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");this._min=O.clone(t),this._max=O.clone(n),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}Jl.fromDimensions=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).dimensions;i.a.typeOf.object("dimensions",t),i.a.typeOf.number.greaterThanOrEquals("dimensions.x",t.x,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.y",t.y,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.z",t.z,0);var n=O.multiplyByScalar(t,.5,new O);return new Jl({minimum:O.negate(n,new O),maximum:n,offsetAttribute:e.offsetAttribute})},Jl.fromAxisAlignedBoundingBox=function(e){return i.a.typeOf.object("boundindBox",e),new Jl({minimum:e.minimum,maximum:e.maximum})},Jl.packedLength=2*O.packedLength+1,Jl.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),O.pack(e._min,t,n),O.pack(e._max,t,n+O.packedLength),t[n+2*O.packedLength]=Object(r.a)(e._offsetAttribute,-1),t};var eu=new O,tu=new O,nu={minimum:eu,maximum:tu,offsetAttribute:void 0};Jl.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=O.unpack(e,t,eu),s=O.unpack(e,t+O.packedLength,tu),c=e[t+2*O.packedLength];return Object(o.a)(n)?(n._min=O.clone(a,n._min),n._max=O.clone(s,n._max),n._offsetAttribute=-1===c?void 0:c,n):(nu.offsetAttribute=-1===c?void 0:c,new Jl(nu))},Jl.createGeometry=function(e){var t=e._min,n=e._max;if(!O.equals(t,n)){var i=new Bl,r=new Uint16Array(24),a=new Float64Array(24);a[0]=t.x,a[1]=t.y,a[2]=t.z,a[3]=n.x,a[4]=t.y,a[5]=t.z,a[6]=n.x,a[7]=n.y,a[8]=t.z,a[9]=t.x,a[10]=n.y,a[11]=t.z,a[12]=t.x,a[13]=t.y,a[14]=n.z,a[15]=n.x,a[16]=t.y,a[17]=n.z,a[18]=n.x,a[19]=n.y,a[20]=n.z,a[21]=t.x,a[22]=n.y,a[23]=n.z,i.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:a}),r[0]=4,r[1]=5,r[2]=5,r[3]=6,r[4]=6,r[5]=7,r[6]=7,r[7]=4,r[8]=0,r[9]=1,r[10]=1,r[11]=2,r[12]=2,r[13]=3,r[14]=3,r[15]=0,r[16]=0,r[17]=4,r[18]=1,r[19]=5,r[20]=2,r[21]=6,r[22]=3,r[23]=7;var s=O.subtract(n,t,Zl),c=.5*O.magnitude(s);if(Object(o.a)(e._offsetAttribute)){var l=a.length,u=new Uint8Array(l/3),h=e._offsetAttribute===Hl.NONE?0:1;nl(u,h),i.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new zl({attributes:i,indices:r,primitiveType:xl.LINES,boundingSphere:new gt(O.ZERO,c),offsetAttribute:e._offsetAttribute})}};var iu,ru=Jl;"undefined"!==typeof cancelAnimationFrame&&(iu=cancelAnimationFrame),function(){if(!Object(o.a)(iu)&&"undefined"!==typeof window)for(var e=["webkit","moz","ms","o"],t=0,n=e.length;t<n&&!Object(o.a)(iu);)iu=window[e[t]+"CancelAnimationFrame"],Object(o.a)(iu)||(iu=window[e[t]+"CancelRequestAnimationFrame"]),++t;Object(o.a)(iu)||(iu=clearTimeout)}();function ou(){}ou.prototype.geocode=function(e){i.a.typeOf.string("query",e);var t=e.match(/[^\s,\n]+/g);if(2===t.length||3===t.length){var n=+t[0],r=+t[1],o=3===t.length?+t[2]:300;if(isNaN(n)&&isNaN(r))for(var a=/^(\d+.?\d*)([nsew])/i,s=0;s<t.length;++s){var c=t[s].match(a);a.test(t[s])&&3===c.length&&(/^[ns]/i.test(c[2])?r=/^[n]/i.test(c[2])?+c[1]:-c[1]:/^[ew]/i.test(c[2])&&(n=/^[e]/i.test(c[2])?+c[1]:-c[1]))}if(!isNaN(n)&&!isNaN(r)&&!isNaN(o)){var l={displayName:e,destination:O.fromDegrees(n,r,o)};return Yt.a.resolve([l])}}return Yt.a.resolve([])};var au=ou;function su(){this.times=void 0,this.points=void 0,a.a.throwInstantiationError()}su.prototype.evaluate=a.a.throwInstantiationError,su.prototype.findTimeInterval=function(e,t){var n,i=this.times,s=i.length;if(!Object(o.a)(e))throw new a.a("time is required.");if(e<i[0]||e>i[s-1])throw new a.a("time is out of range.");if(e>=i[t=Object(r.a)(t,0)]){if(t+1<s&&e<i[t+1])return t;if(t+2<s&&e<i[t+2])return t+1}else if(t-1>=0&&e>=i[t-1])return t-1;if(e>i[t])for(n=t;n<s-1&&!(e>=i[n]&&e<i[n+1]);++n);else for(n=t-1;n>=0&&!(e>=i[n]&&e<i[n+1]);--n);return n===s-1&&(n=s-2),n},su.prototype.wrapTime=function(e){i.a.typeOf.number("time",e);var t=this.times,n=t[t.length-1],r=t[0],o=n-r;return e<r&&(e+=(Math.floor((r-e)/o)+1)*o),e>n&&(e-=(Math.floor((e-n)/o)+1)*o),e},su.prototype.clampTime=function(e){i.a.typeOf.number("time",e);var t=this.times;return d.clamp(e,t[0],t[t.length-1])};var cu=su;function lu(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).points,n=e.times;if(!Object(o.a)(t)||!Object(o.a)(n))throw new a.a("points and times are required.");if(t.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(n.length!==t.length)throw new a.a("times.length must be equal to points.length.");this._times=n,this._points=t,this._lastTimeIndex=0}Object.defineProperties(lu.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}}),lu.prototype.findTimeInterval=cu.prototype.findTimeInterval,lu.prototype.wrapTime=cu.prototype.wrapTime,lu.prototype.clampTime=cu.prototype.clampTime,lu.prototype.evaluate=function(e,t){var n=this.points,i=this.times,r=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),a=(e-i[r])/(i[r+1]-i[r]);return Object(o.a)(t)||(t=new O),O.lerp(n[r],n[r+1],a,t)};var uu=lu,hu={solve:function(e,t,n,i){if(!Object(o.a)(e)||!(e instanceof Array))throw new a.a("The array lower is required.");if(!Object(o.a)(t)||!(t instanceof Array))throw new a.a("The array diagonal is required.");if(!Object(o.a)(n)||!(n instanceof Array))throw new a.a("The array upper is required.");if(!Object(o.a)(i)||!(i instanceof Array))throw new a.a("The array right is required.");if(t.length!==i.length)throw new a.a("diagonal and right must have the same lengths.");if(e.length!==n.length)throw new a.a("lower and upper must have the same lengths.");if(e.length!==t.length-1)throw new a.a("lower and upper must be one less than the length of diagonal.");var r,s,c=new Array(n.length),l=new Array(i.length),u=new Array(i.length);for(r=0;r<l.length;r++)l[r]=new O,u[r]=new O;for(c[0]=n[0]/t[0],l[0]=O.multiplyByScalar(i[0],1/t[0],l[0]),r=1;r<c.length;++r)s=1/(t[r]-c[r-1]*e[r-1]),c[r]=n[r]*s,l[r]=O.subtract(i[r],O.multiplyByScalar(l[r-1],e[r-1],l[r]),l[r]),l[r]=O.multiplyByScalar(l[r],s,l[r]);for(s=1/(t[r]-c[r-1]*e[r-1]),l[r]=O.subtract(i[r],O.multiplyByScalar(l[r-1],e[r-1],l[r]),l[r]),l[r]=O.multiplyByScalar(l[r],s,l[r]),u[u.length-1]=l[l.length-1],r=u.length-2;r>=0;--r)u[r]=O.subtract(l[r],O.multiplyByScalar(u[r+1],c[r],u[r]),u[r]);return u}},du=hu,fu=[],pu=[],mu=[],gu=[];function vu(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).points,n=e.times,i=e.inTangents,s=e.outTangents;if(!Object(o.a)(t)||!Object(o.a)(n)||!Object(o.a)(i)||!Object(o.a)(s))throw new a.a("times, points, inTangents, and outTangents are required.");if(t.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(n.length!==t.length)throw new a.a("times.length must be equal to points.length.");if(i.length!==s.length||i.length!==t.length-1)throw new a.a("inTangents and outTangents must have a length equal to points.length - 1.");this._times=n,this._points=t,this._inTangents=i,this._outTangents=s,this._lastTimeIndex=0}Object.defineProperties(vu.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},inTangents:{get:function(){return this._inTangents}},outTangents:{get:function(){return this._outTangents}}}),vu.createC1=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).times,n=e.points,i=e.tangents;if(!Object(o.a)(n)||!Object(o.a)(t)||!Object(o.a)(i))throw new a.a("points, times and tangents are required.");if(n.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(t.length!==n.length||t.length!==i.length)throw new a.a("times, points and tangents must have the same length.");var s=i.slice(0,i.length-1);return new vu({times:t,points:n,inTangents:i.slice(1,i.length),outTangents:s})},vu.createNaturalCubic=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).times,n=e.points;if(!Object(o.a)(n)||!Object(o.a)(t))throw new a.a("points and times are required.");if(n.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(t.length!==n.length)throw new a.a("times.length must be equal to points.length.");if(n.length<3)return new uu({points:n,times:t});var i=function(e){var t,n=fu,i=mu,r=pu,a=gu;n.length=i.length=e.length-1,r.length=a.length=e.length,n[0]=i[0]=1,r[0]=2;var s=a[0];for(Object(o.a)(s)||(s=a[0]=new O),O.subtract(e[1],e[0],s),O.multiplyByScalar(s,3,s),t=1;t<n.length;++t)n[t]=i[t]=1,r[t]=4,s=a[t],Object(o.a)(s)||(s=a[t]=new O),O.subtract(e[t+1],e[t-1],s),O.multiplyByScalar(s,3,s);return r[t]=2,s=a[t],Object(o.a)(s)||(s=a[t]=new O),O.subtract(e[t],e[t-1],s),O.multiplyByScalar(s,3,s),du.solve(n,r,i,a)}(n),s=i.slice(0,i.length-1);return new vu({times:t,points:n,inTangents:i.slice(1,i.length),outTangents:s})},vu.createClampedCubic=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).times,n=e.points,i=e.firstTangent,s=e.lastTangent;if(!Object(o.a)(n)||!Object(o.a)(t)||!Object(o.a)(i)||!Object(o.a)(s))throw new a.a("points, times, firstTangent and lastTangent are required.");if(n.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(t.length!==n.length)throw new a.a("times.length must be equal to points.length.");if(n.length<3)return new uu({points:n,times:t});var c=function(e,t,n){var i,r=fu,a=mu,s=pu,c=gu;r.length=a.length=e.length-1,s.length=c.length=e.length,r[0]=s[0]=1,a[0]=0;var l=c[0];for(Object(o.a)(l)||(l=c[0]=new O),O.clone(t,l),i=1;i<r.length-1;++i)r[i]=a[i]=1,s[i]=4,l=c[i],Object(o.a)(l)||(l=c[i]=new O),O.subtract(e[i+1],e[i-1],l),O.multiplyByScalar(l,3,l);return r[i]=0,a[i]=1,s[i]=4,l=c[i],Object(o.a)(l)||(l=c[i]=new O),O.subtract(e[i+1],e[i-1],l),O.multiplyByScalar(l,3,l),s[i+1]=1,l=c[i+1],Object(o.a)(l)||(l=c[i+1]=new O),O.clone(n,l),du.solve(r,s,a,c)}(n,i,s),l=c.slice(0,c.length-1);return new vu({times:t,points:n,inTangents:c.slice(1,c.length),outTangents:l})},vu.hermiteCoefficientMatrix=new Ae(2,-3,0,1,-2,3,0,0,1,-2,1,0,1,-1,0,0),vu.prototype.findTimeInterval=cu.prototype.findTimeInterval;var _u=new he,bu=new O;vu.prototype.wrapTime=cu.prototype.wrapTime,vu.prototype.clampTime=cu.prototype.clampTime,vu.prototype.evaluate=function(e,t){Object(o.a)(t)||(t=new O);var n=this.points,i=this.times,r=this.inTangents,a=this.outTangents,s=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),c=(e-i[s])/(i[s+1]-i[s]),l=_u;l.z=c,l.y=c*c,l.x=l.y*c,l.w=1;var u=Ae.multiplyByVector(vu.hermiteCoefficientMatrix,l,l);return t=O.multiplyByScalar(n[s],u.x,t),O.multiplyByScalar(n[s+1],u.y,bu),O.add(t,bu,t),O.multiplyByScalar(a[s],u.z,bu),O.add(t,bu,t),O.multiplyByScalar(r[s],u.w,bu),O.add(t,bu,t)};var yu=vu,wu=new he,Ou=new O,Cu=new O;var Eu=new O,Au=new O;function xu(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).points,n=e.times,a=e.firstTangent,s=e.lastTangent;if(i.a.defined("points",t),i.a.defined("times",n),i.a.typeOf.number.greaterThanOrEquals("points.length",t.length,2),i.a.typeOf.number.equals("times.length","points.length",n.length,t.length),t.length>2&&(Object(o.a)(a)||(a=Eu,O.multiplyByScalar(t[1],2,a),O.subtract(a,t[2],a),O.subtract(a,t[0],a),O.multiplyByScalar(a,.5,a)),!Object(o.a)(s))){var c=t.length-1;s=Au,O.multiplyByScalar(t[c-1],2,s),O.subtract(t[c],s,s),O.add(s,t[c-2],s),O.multiplyByScalar(s,.5,s)}this._times=n,this._points=t,this._firstTangent=O.clone(a),this._lastTangent=O.clone(s),this._evaluateFunction=function(e){var t=e.points,n=e.times;if(t.length<3){var i=n[0],r=1/(n[1]-i),a=t[0],s=t[1];return function(e,t){Object(o.a)(t)||(t=new O);var n=(e-i)*r;return O.lerp(a,s,n,t)}}return function(i,r){Object(o.a)(r)||(r=new O);var a,s,c,l,u,h=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),d=(i-n[h])/(n[h+1]-n[h]),f=wu;return f.z=d,f.y=d*d,f.x=f.y*d,f.w=1,0===h?(a=t[0],s=t[1],c=e.firstTangent,l=O.subtract(t[2],a,Ou),O.multiplyByScalar(l,.5,l),u=Ae.multiplyByVector(yu.hermiteCoefficientMatrix,f,f)):h===t.length-2?(a=t[h],s=t[h+1],l=e.lastTangent,c=O.subtract(s,t[h-1],Ou),O.multiplyByScalar(c,.5,c),u=Ae.multiplyByVector(yu.hermiteCoefficientMatrix,f,f)):(a=t[h-1],s=t[h],c=t[h+1],l=t[h+2],u=Ae.multiplyByVector(xu.catmullRomCoefficientMatrix,f,f)),r=O.multiplyByScalar(a,u.x,r),O.multiplyByScalar(s,u.y,Cu),O.add(r,Cu,r),O.multiplyByScalar(c,u.z,Cu),O.add(r,Cu,r),O.multiplyByScalar(l,u.w,Cu),O.add(r,Cu,r)}}(this),this._lastTimeIndex=0}Object.defineProperties(xu.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},firstTangent:{get:function(){return this._firstTangent}},lastTangent:{get:function(){return this._lastTangent}}}),xu.catmullRomCoefficientMatrix=new Ae(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0),xu.prototype.findTimeInterval=cu.prototype.findTimeInterval,xu.prototype.wrapTime=cu.prototype.wrapTime,xu.prototype.clampTime=cu.prototype.clampTime,xu.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};function Tu(e,t,n){if(!Object(o.a)(e))throw new a.a("uint8Array is required.");if(t<0)throw new a.a("byteOffset cannot be negative.");if(n<0)throw new a.a("byteLength cannot be negative.");if(t+n>e.byteLength)throw new a.a("sub-region exceeds array bounds.");return t=Object(r.a)(t,0),n=Object(r.a)(n,e.byteLength-t),e=e.subarray(t,t+n),Tu.decode(e)}function Su(e,t,n){return t<=e&&e<=n}Tu.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)},Tu.decodeWithFromCharCode=function(e){for(var t="",n=function(e){for(var t=0,n=0,i=0,r=128,o=191,a=[],s=e.length,c=0;c<s;++c){var l=e[c];if(0===i){if(Su(l,0,127)){a.push(l);continue}if(Su(l,194,223)){i=1,t=31&l;continue}if(Su(l,224,239)){224===l&&(r=160),237===l&&(o=159),i=2,t=15&l;continue}if(Su(l,240,244)){240===l&&(r=144),244===l&&(o=143),i=3,t=7&l;continue}throw new de.a("String decoding failed.")}Su(l,r,o)?(r=128,o=191,t=t<<6|63&l,++n===i&&(a.push(t),t=i=n=0)):(t=i=n=0,r=128,o=191,--c)}return a}(e),i=n.length,r=0;r<i;++r){var o=n[r];o<=65535?t+=String.fromCharCode(o):(o-=65536,t+=String.fromCharCode(55296+(o>>10),56320+(1023&o)))}return t},"undefined"!==typeof TextDecoder?Tu.decode=Tu.decodeWithTextDecoder:Tu.decode=Tu.decodeWithFromCharCode;var Du=Tu,Pu={clipTriangleAtAxisAlignedThreshold:function(e,t,n,i,r,s){if(!Object(o.a)(e))throw new a.a("threshold is required.");if(!Object(o.a)(t))throw new a.a("keepAbove is required.");if(!Object(o.a)(n))throw new a.a("u0 is required.");if(!Object(o.a)(i))throw new a.a("u1 is required.");if(!Object(o.a)(r))throw new a.a("u2 is required.");var c,l,u;Object(o.a)(s)?s.length=0:s=[],t?(c=n<e,l=i<e,u=r<e):(c=n>e,l=i>e,u=r>e);var h,d,f,p,m,g,v=c+l+u;return 1===v?c?(h=(e-n)/(i-n),d=(e-n)/(r-n),s.push(1),s.push(2),1!==d&&(s.push(-1),s.push(0),s.push(2),s.push(d)),1!==h&&(s.push(-1),s.push(0),s.push(1),s.push(h))):l?(f=(e-i)/(r-i),p=(e-i)/(n-i),s.push(2),s.push(0),1!==p&&(s.push(-1),s.push(1),s.push(0),s.push(p)),1!==f&&(s.push(-1),s.push(1),s.push(2),s.push(f))):u&&(m=(e-r)/(n-r),g=(e-r)/(i-r),s.push(0),s.push(1),1!==g&&(s.push(-1),s.push(2),s.push(1),s.push(g)),1!==m&&(s.push(-1),s.push(2),s.push(0),s.push(m))):2===v?c||n===e?l||i===e?u||r===e||(d=(e-n)/(r-n),f=(e-i)/(r-i),s.push(2),s.push(-1),s.push(0),s.push(2),s.push(d),s.push(-1),s.push(1),s.push(2),s.push(f)):(g=(e-r)/(i-r),h=(e-n)/(i-n),s.push(1),s.push(-1),s.push(2),s.push(1),s.push(g),s.push(-1),s.push(0),s.push(1),s.push(h)):(p=(e-i)/(n-i),m=(e-r)/(n-r),s.push(0),s.push(-1),s.push(1),s.push(0),s.push(p),s.push(-1),s.push(2),s.push(0),s.push(m)):3!==v&&(s.push(0),s.push(1),s.push(2)),s},computeBarycentricCoordinates:function(e,t,n,i,r,s,c,l,u){if(!Object(o.a)(e))throw new a.a("x is required.");if(!Object(o.a)(t))throw new a.a("y is required.");if(!Object(o.a)(n))throw new a.a("x1 is required.");if(!Object(o.a)(i))throw new a.a("y1 is required.");if(!Object(o.a)(r))throw new a.a("x2 is required.");if(!Object(o.a)(s))throw new a.a("y2 is required.");if(!Object(o.a)(c))throw new a.a("x3 is required.");if(!Object(o.a)(l))throw new a.a("y3 is required.");var h=n-c,d=c-r,f=s-l,p=i-l,m=1/(f*h+d*p),g=t-l,v=e-c,_=(f*v+d*g)*m,b=(-p*v+h*g)*m,y=1-_-b;return Object(o.a)(u)?(u.x=_,u.y=b,u.z=y,u):new O(_,b,y)},computeLineSegmentLineSegmentIntersection:function(e,t,n,r,a,s,c,l,u){i.a.typeOf.number("x00",e),i.a.typeOf.number("y00",t),i.a.typeOf.number("x01",n),i.a.typeOf.number("y01",r),i.a.typeOf.number("x10",a),i.a.typeOf.number("y10",s),i.a.typeOf.number("x11",c),i.a.typeOf.number("y11",l);var h=(l-s)*(n-e)-(c-a)*(r-t);if(0!==h){var d=((c-a)*(t-s)-(l-s)*(e-a))/h,f=((n-e)*(t-s)-(r-t)*(e-a))/h;return d>=0&&d<=1&&f>=0&&f<=1?(Object(o.a)(u)||(u=new Mt),u.x=e+d*(n-e),u.y=t+d*(r-t),u):void 0}}},Iu=Pu;function Mu(e){if(!Object(o.a)(e)||!Object(o.a)(e.quantizedVertices))throw new a.a("options.quantizedVertices is required.");if(!Object(o.a)(e.indices))throw new a.a("options.indices is required.");if(!Object(o.a)(e.minimumHeight))throw new a.a("options.minimumHeight is required.");if(!Object(o.a)(e.maximumHeight))throw new a.a("options.maximumHeight is required.");if(!Object(o.a)(e.maximumHeight))throw new a.a("options.maximumHeight is required.");if(!Object(o.a)(e.boundingSphere))throw new a.a("options.boundingSphere is required.");if(!Object(o.a)(e.horizonOcclusionPoint))throw new a.a("options.horizonOcclusionPoint is required.");if(!Object(o.a)(e.westIndices))throw new a.a("options.westIndices is required.");if(!Object(o.a)(e.southIndices))throw new a.a("options.southIndices is required.");if(!Object(o.a)(e.eastIndices))throw new a.a("options.eastIndices is required.");if(!Object(o.a)(e.northIndices))throw new a.a("options.northIndices is required.");if(!Object(o.a)(e.westSkirtHeight))throw new a.a("options.westSkirtHeight is required.");if(!Object(o.a)(e.southSkirtHeight))throw new a.a("options.southSkirtHeight is required.");if(!Object(o.a)(e.eastSkirtHeight))throw new a.a("options.eastSkirtHeight is required.");if(!Object(o.a)(e.northSkirtHeight))throw new a.a("options.northSkirtHeight is required.");this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;var t=this._quantizedVertices.length/3,n=this._uValues=this._quantizedVertices.subarray(0,t),i=this._vValues=this._quantizedVertices.subarray(t,2*t);function s(e,t){return i[e]-i[t]}function c(e,t){return n[e]-n[t]}this._heightValues=this._quantizedVertices.subarray(2*t,3*t),this._westIndices=Lu(e.westIndices,s,t),this._southIndices=Lu(e.southIndices,c,t),this._eastIndices=Lu(e.eastIndices,s,t),this._northIndices=Lu(e.northIndices,c,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=Object(r.a)(e.childTileMask,15),this._createdByUpsampling=Object(r.a)(e.createdByUpsampling,!1),this._waterMask=e.waterMask,this._mesh=void 0}Object.defineProperties(Mu.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return Object(o.a)(this._mesh)}}});var Ru=[];function Lu(e,t,n){Ru.length=e.length;for(var i=!1,r=0,o=e.length;r<o;++r)Ru[r]=e[r],i=i||r>0&&t(e[r-1],e[r])>0;return i?(Ru.sort(t),lc.createTypedArray(n,Ru)):e}var ju=new ac("createVerticesFromQuantizedTerrainMesh");Mu.prototype.createMesh=function(e,t,n,i,s){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");if(!Object(o.a)(t))throw new a.a("x is required.");if(!Object(o.a)(n))throw new a.a("y is required.");if(!Object(o.a)(i))throw new a.a("level is required.");var c=e.ellipsoid,l=e.tileXYToRectangle(t,n,i);s=Object(r.a)(s,1);var u=ju.scheduleTask({minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,quantizedVertices:this._quantizedVertices,octEncodedNormals:this._encodedNormals,includeWebMercatorT:!0,indices:this._indices,westIndices:this._westIndices,southIndices:this._southIndices,eastIndices:this._eastIndices,northIndices:this._northIndices,westSkirtHeight:this._westSkirtHeight,southSkirtHeight:this._southSkirtHeight,eastSkirtHeight:this._eastSkirtHeight,northSkirtHeight:this._northSkirtHeight,rectangle:l,relativeToCenter:this._boundingSphere.center,ellipsoid:c,exaggeration:s});if(Object(o.a)(u)){var h=this;return Object(Yt.a)(u,(function(e){var t=h._quantizedVertices.length/3,n=t+h._westIndices.length+h._southIndices.length+h._eastIndices.length+h._northIndices.length,i=lc.createTypedArray(n,e.indices),o=new Float32Array(e.vertices),a=e.center,c=e.minimumHeight,l=e.maximumHeight,u=Object(r.a)(gt.clone(e.boundingSphere),h._boundingSphere),d=Object(r.a)(bs.clone(e.orientedBoundingBox),h._orientedBoundingBox),f=Object(r.a)(O.clone(e.occludeePointInScaledSpace),h._horizonOcclusionPoint),p=e.vertexStride,m=Bs.clone(e.encoding);return h._mesh=new sc(a,o,i,e.indexCountWithoutSkirts,t,c,l,u,f,p,d,m,s,e.westIndicesSouthToNorth,e.southIndicesEastToWest,e.eastIndicesNorthToSouth,e.northIndicesWestToEast),h._quantizedVertices=void 0,h._encodedNormals=void 0,h._indices=void 0,h._uValues=void 0,h._vValues=void 0,h._heightValues=void 0,h._westIndices=void 0,h._southIndices=void 0,h._eastIndices=void 0,h._northIndices=void 0,h._mesh}))}};var Fu=new ac("upsampleQuantizedTerrainMesh");Mu.prototype.upsample=function(e,t,n,i,r,s,c){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");if(!Object(o.a)(t))throw new a.a("thisX is required.");if(!Object(o.a)(n))throw new a.a("thisY is required.");if(!Object(o.a)(i))throw new a.a("thisLevel is required.");if(!Object(o.a)(r))throw new a.a("descendantX is required.");if(!Object(o.a)(s))throw new a.a("descendantY is required.");if(!Object(o.a)(c))throw new a.a("descendantLevel is required.");if(c-i>1)throw new a.a("Upsampling through more than one level at a time is not currently supported.");var l=this._mesh;if(Object(o.a)(this._mesh)){var u=2*t!==r,h=2*n===s,d=e.ellipsoid,f=e.tileXYToRectangle(r,s,c),p=Fu.scheduleTask({vertices:l.vertices,vertexCountWithoutSkirts:l.vertexCountWithoutSkirts,indices:l.indices,indexCountWithoutSkirts:l.indexCountWithoutSkirts,encoding:l.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:u,isNorthChild:h,childRectangle:f,ellipsoid:d,exaggeration:l.exaggeration});if(Object(o.a)(p)){var m=Math.min(this._westSkirtHeight,this._eastSkirtHeight);m=Math.min(m,this._southSkirtHeight),m=Math.min(m,this._northSkirtHeight);var g=u?.5*m:this._westSkirtHeight,v=h?.5*m:this._southSkirtHeight,_=u?this._eastSkirtHeight:.5*m,b=h?this._northSkirtHeight:.5*m,y=this._credits;return Object(Yt.a)(p).then((function(e){var t,n=new Uint16Array(e.vertices),i=lc.createTypedArray(n.length/3,e.indices);return Object(o.a)(e.encodedNormals)&&(t=new Uint8Array(e.encodedNormals)),new Mu({quantizedVertices:n,indices:i,encodedNormals:t,minimumHeight:e.minimumHeight,maximumHeight:e.maximumHeight,boundingSphere:gt.clone(e.boundingSphere),orientedBoundingBox:bs.clone(e.orientedBoundingBox),horizonOcclusionPoint:O.clone(e.horizonOcclusionPoint),westIndices:e.westIndices,southIndices:e.southIndices,eastIndices:e.eastIndices,northIndices:e.northIndices,westSkirtHeight:g,southSkirtHeight:v,eastSkirtHeight:_,northSkirtHeight:b,childTileMask:0,credits:y,createdByUpsampling:!0})}))}}};var Nu=new O;function zu(e,t,n,i,r,o,a,s){var c=Math.min(n,r,a),l=Math.max(n,r,a),u=Math.min(i,o,s),h=Math.max(i,o,s);return e>=c&&e<=l&&t>=u&&t<=h}Mu.prototype.interpolateHeight=function(e,t,n){var i=d.clamp((t-e.west)/e.width,0,1);i*=32767;var r=d.clamp((n-e.south)/e.height,0,1);return r*=32767,Object(o.a)(this._mesh)?function(e,t,n){for(var i=e._mesh,r=i.vertices,o=i.encoding,a=i.indices,s=0,c=a.length;s<c;s+=3){var l=a[s],u=a[s+1],h=a[s+2],d=o.decodeTextureCoordinates(r,l,ku),f=o.decodeTextureCoordinates(r,u,Bu),p=o.decodeTextureCoordinates(r,h,Hu);if(zu(t,n,d.x,d.y,f.x,f.y,p.x,p.y)){var m=Iu.computeBarycentricCoordinates(t,n,d.x,d.y,f.x,f.y,p.x,p.y,Nu);if(m.x>=-1e-15&&m.y>=-1e-15&&m.z>=-1e-15){var g=o.decodeHeight(r,l),v=o.decodeHeight(r,u),_=o.decodeHeight(r,h);return m.x*g+m.y*v+m.z*_}}}return}(this,i,r):function(e,t,n){for(var i=e._uValues,r=e._vValues,o=e._heightValues,a=e._indices,s=0,c=a.length;s<c;s+=3){var l=a[s],u=a[s+1],h=a[s+2],f=i[l],p=i[u],m=i[h],g=r[l],v=r[u],_=r[h];if(zu(t,n,f,g,p,v,m,_)){var b=Iu.computeBarycentricCoordinates(t,n,f,g,p,v,m,_,Nu);if(b.x>=-1e-15&&b.y>=-1e-15&&b.z>=-1e-15){var y=b.x*o[l]+b.y*o[u]+b.z*o[h];return d.lerp(e._minimumHeight,e._maximumHeight,y/32767)}}}return}(this,i,r)};var ku=new Mt,Bu=new Mt,Hu=new Mt;Mu.prototype.isChildAvailable=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("thisX is required.");if(!Object(o.a)(t))throw new a.a("thisY is required.");if(!Object(o.a)(n))throw new a.a("childX is required.");if(!Object(o.a)(i))throw new a.a("childY is required.");var r=2;return n!==2*e&&++r,i!==2*t&&(r-=2),0!==(this._childTileMask&1<<r)},Mu.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var Vu=Mu;function Uu(e){this.resource=e.resource,this.version=e.version,this.isHeightmap=e.isHeightmap,this.tileUrlTemplates=e.tileUrlTemplates,this.availability=e.availability,this.hasVertexNormals=e.hasVertexNormals,this.hasWaterMask=e.hasWaterMask,this.hasMetadata=e.hasMetadata,this.availabilityLevels=e.availabilityLevels,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.littleEndianExtensionSize=e.littleEndianExtensionSize,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.availabilityPromiseCache={}}function Wu(e){if(!Object(o.a)(e)||!Object(o.a)(e.url))throw new a.a("options.url is required.");this._heightmapWidth=65,this._heightmapStructure=void 0,this._hasWaterMask=!1,this._hasVertexNormals=!1,this._ellipsoid=e.ellipsoid,this._requestVertexNormals=Object(r.a)(e.requestVertexNormals,!1),this._requestWaterMask=Object(r.a)(e.requestWaterMask,!1),this._requestMetadata=Object(r.a)(e.requestMetadata,!0),this._errorEvent=new wn.a;var t=e.credit;"string"===typeof t&&(t=new yn(t)),this._credit=t,this._availability=void 0;var n=Yt.a.defer();this._ready=!1,this._readyPromise=n,this._tileCredits=void 0;var i,s,c,l=this,u=this._layers=[],h="",d=[],f=0;function p(e){var t;if(!e.format)return t="The tile format is not specified in the layer.json file.",void(c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_));if(!e.tiles||0===e.tiles.length)return t="The layer.json file does not specify any tile URL templates.",void(c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_));var n=!1,r=!1,a=!1,g=!0,v=!1;if("heightmap-1.0"===e.format)v=!0,Object(o.a)(l._heightmapStructure)||(l._heightmapStructure={heightScale:.2,heightOffset:-1e3,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1,lowestEncodedHeight:0,highestEncodedHeight:65535}),r=!0,l._requestWaterMask=!0;else if(0!==e.format.indexOf("quantized-mesh-1."))return t='The tile format "'+e.format+'" is invalid or not supported.',void(c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_));var b,y=e.tiles,w=e.maxzoom;if(f=Math.max(f,w),e.projection&&"EPSG:4326"!==e.projection){if("EPSG:3857"!==e.projection)return t='The projection "'+e.projection+'" is invalid or not supported.',void(c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_));l._tilingScheme=new Kc({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:l._ellipsoid})}else l._tilingScheme=new Lt({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:l._ellipsoid});if(l._levelZeroMaximumGeometricError=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(l._tilingScheme.ellipsoid,l._heightmapWidth,l._tilingScheme.getNumberOfXTilesAtLevel(0)),e.scheme&&"tms"!==e.scheme&&"slippyMap"!==e.scheme)return t='The scheme "'+e.scheme+'" is invalid or not supported.',void(c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_));l._scheme=e.scheme,Object(o.a)(e.extensions)&&-1!==e.extensions.indexOf("octvertexnormals")?n=!0:Object(o.a)(e.extensions)&&-1!==e.extensions.indexOf("vertexnormals")&&(n=!0,g=!1),Object(o.a)(e.extensions)&&-1!==e.extensions.indexOf("watermask")&&(r=!0),Object(o.a)(e.extensions)&&-1!==e.extensions.indexOf("metadata")&&(a=!0);var O,C=e.metadataAvailability,E=e.available;if(Object(o.a)(E)&&!Object(o.a)(C)){O=new Gc(l._tilingScheme,E.length);for(var A=0;A<E.length;++A){var x=E[A],T=l._tilingScheme.getNumberOfYTilesAtLevel(A);Object(o.a)(d[A])||(d[A]=[]);for(var S=0;S<x.length;++S){var D=x[S],P=T-D.endY-1,I=T-D.startY-1;d[A].push([D.startX,P,D.endX,I]),O.addAvailableTileRange(A,D.startX,P,D.endX,I)}}}else Object(o.a)(C)&&(b=new Gc(l._tilingScheme,w),O=new Gc(l._tilingScheme,w),d[0]=[[0,0,1,0]],O.addAvailableTileRange(0,0,0,1,0));l._hasWaterMask=l._hasWaterMask||r,l._hasVertexNormals=l._hasVertexNormals||n,l._hasMetadata=l._hasMetadata||a,Object(o.a)(e.attribution)&&(h.length>0&&(h+=" "),h+=e.attribution),u.push(new Uu({resource:i,version:e.version,isHeightmap:v,tileUrlTemplates:y,availability:O,hasVertexNormals:n,hasWaterMask:r,hasMetadata:a,availabilityLevels:C,availabilityTilesLoaded:b,littleEndianExtensionSize:g}));var M=e.parentUrl;if(Object(o.a)(M)){if(!Object(o.a)(O))return console.log("A layer.json can't have a parentUrl if it does't have an available array."),Yt.a.resolve();(i=i.getDerivedResource({url:M})).appendForwardSlash();var R=(s=i.getDerivedResource({url:"layer.json"})).fetchJson();return Object(Yt.a)(R,p,m)}return Yt.a.resolve()}function m(e){var t="An error occurred while accessing "+s.url+".";c=$c.handleError(c,l,l._errorEvent,t,void 0,void 0,void 0,_)}function g(e){p(e).then((function(){if(!Object(o.a)(c)){var e=d.length;if(e>0)for(var t=l._availability=new Gc(l._tilingScheme,f),n=0;n<e;++n)for(var i=d[n],r=0;r<i.length;++r){var a=i[r];t.addAvailableTileRange(n,a[0],a[1],a[2],a[3])}if(h.length>0){var s=new yn(h);Object(o.a)(l._tileCredits)?l._tileCredits.push(s):l._tileCredits=[s]}l._ready=!0,l._readyPromise.resolve(!0)}}))}function v(e){Object(o.a)(e)&&404===e.statusCode?g({tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]}):m()}function _(){Object(Yt.a)(s.fetchJson()).then(g).otherwise(v)}Object(Yt.a)(e.url).then((function(e){var t=_t.a.createIfNeeded(e);t.appendForwardSlash(),s=(i=t).getDerivedResource({url:"layer.json"}),l._tileCredits=t.credits,_()})).otherwise((function(e){n.reject(e)}))}var Gu=1,qu=2,Yu=4;function $u(e){return Object(o.a)(e)&&0!==e.length?{Accept:"application/vnd.quantized-mesh;extensions="+e.join("-")+",application/octet-stream;q=0.9,*/*;q=0.01"}:{Accept:"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01"}}function Xu(e,t,n,i,r,a){if(!Object(o.a)(r))return Yt.a.reject(new de.a("Terrain tile doesn't exist"));var s=r.tileUrlTemplates;if(0!==s.length){var c;if(e._scheme&&"tms"!==e._scheme)c=n;else c=e._tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;var l,u,h=[];e._requestVertexNormals&&r.hasVertexNormals&&h.push(r.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&r.hasWaterMask&&h.push("watermask"),e._requestMetadata&&r.hasMetadata&&h.push("metadata");var d=s[(t+c+i)%s.length],f=r.resource;Object(o.a)(f._ionEndpoint)&&!Object(o.a)(f._ionEndpoint.externalType)?(0!==h.length&&(u={extensions:h.join("-")}),l=$u(void 0)):l=$u(h);var p=f.getDerivedResource({url:d,templateValues:{version:r.version,z:i,x:t,y:c},queryParameters:u,headers:l,request:a}).fetchArrayBuffer();if(Object(o.a)(p))return p.then((function(a){return Object(o.a)(e._heightmapStructure)?function(e,t,n,i,r){var o=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Ec({buffer:o,childTileMask:new Uint8Array(t,o.byteLength,1)[0],waterMask:new Uint8Array(t,o.byteLength+1,t.byteLength-o.byteLength-1),width:e._heightmapWidth,height:e._heightmapWidth,structure:e._heightmapStructure,credits:e._tileCredits})}(e,a):function(e,t,n,i,r,a){var s=a.littleEndianExtensionSize,c=0,l=3*Float64Array.BYTES_PER_ELEMENT,u=4*Float64Array.BYTES_PER_ELEMENT,h=3*Uint16Array.BYTES_PER_ELEMENT,d=Uint16Array.BYTES_PER_ELEMENT,f=3*d,p=new DataView(t),m=new O(p.getFloat64(c,!0),p.getFloat64(c+8,!0),p.getFloat64(c+16,!0));c+=l;var g=p.getFloat32(c,!0);c+=Float32Array.BYTES_PER_ELEMENT;var v=p.getFloat32(c,!0);c+=Float32Array.BYTES_PER_ELEMENT;var _=new gt(new O(p.getFloat64(c,!0),p.getFloat64(c+8,!0),p.getFloat64(c+16,!0)),p.getFloat64(c+l,!0));c+=u;var b=new O(p.getFloat64(c,!0),p.getFloat64(c+8,!0),p.getFloat64(c+16,!0));c+=l;var y=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var w=new Uint16Array(t,c,3*y);c+=y*h,y>65536&&(f=3*(d=Uint32Array.BYTES_PER_ELEMENT));var C=w.subarray(0,y),E=w.subarray(y,2*y),A=w.subarray(2*y,3*y);xs.zigZagDeltaDecode(C,E,A),c%d!==0&&(c+=d-c%d);var x=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var T=lc.createTypedArrayFromArrayBuffer(y,t,c,3*x);c+=x*f;for(var S=0,D=T.length,P=0;P<D;++P){var I=T[P];T[P]=S-I,0===I&&++S}var M=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var R=lc.createTypedArrayFromArrayBuffer(y,t,c,M);c+=M*d;var L=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var j=lc.createTypedArrayFromArrayBuffer(y,t,c,L);c+=L*d;var F=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var N=lc.createTypedArrayFromArrayBuffer(y,t,c,F);c+=F*d;var z=p.getUint32(c,!0);c+=Uint32Array.BYTES_PER_ELEMENT;var k,B,H=lc.createTypedArrayFromArrayBuffer(y,t,c,z);for(c+=z*d;c<p.byteLength;){var V=p.getUint8(c,!0);c+=Uint8Array.BYTES_PER_ELEMENT;var U=p.getUint32(c,s);if(c+=Uint32Array.BYTES_PER_ELEMENT,V===Gu&&e._requestVertexNormals)k=new Uint8Array(t,c,2*y);else if(V===qu&&e._requestWaterMask)B=new Uint8Array(t,c,U);else if(V===Yu&&e._requestMetadata){var W=p.getUint32(c,!0);if(W>0){var G=Du(new Uint8Array(t),c+Uint32Array.BYTES_PER_ELEMENT,W),q=JSON.parse(G).available;if(Object(o.a)(q))for(var Y=0;Y<q.length;++Y)for(var $=n+Y+1,X=q[Y],K=e._tilingScheme.getNumberOfYTilesAtLevel($),Q=0;Q<X.length;++Q){var Z=X[Q],J=K-Z.endY-1,ee=K-Z.startY-1;e.availability.addAvailableTileRange($,Z.startX,J,Z.endX,ee),a.availability.addAvailableTileRange($,Z.startX,J,Z.endX,ee)}}a.availabilityTilesLoaded.addAvailableTileRange(n,i,r,i,r)}c+=U}var te=5*e.getLevelMaximumGeometricError(n),ne=e._tilingScheme.tileXYToRectangle(i,r,n),ie=bs.fromRectangle(ne,g,v,e._tilingScheme.ellipsoid);return new Vu({center:m,minimumHeight:g,maximumHeight:v,boundingSphere:_,orientedBoundingBox:ie,horizonOcclusionPoint:b,quantizedVertices:w,encodedNormals:k,indices:T,westIndices:R,southIndices:j,eastIndices:N,northIndices:H,westSkirtHeight:te,southSkirtHeight:te,eastSkirtHeight:te,northSkirtHeight:te,childTileMask:e.availability.computeChildMaskForTile(n,i,r),waterMask:B,credits:e._tileCredits})}(e,a,i,t,n,r)}))}}function Ku(e,t,n,i){if(0!==i){var r=e.availabilityLevels,o=i%r===0?i-r:(i/r|0)*r,a=1<<i-o;return{level:o,x:t/a|0,y:n/a|0}}}function Qu(e,t,n,i,r,a){if(!Object(o.a)(r.availabilityLevels))return{result:!1};for(var s,c=function(){delete r.availabilityPromiseCache[s]},l=r.availabilityTilesLoaded,u=r.availability,h=Ku(r,t,n,i);Object(o.a)(h);){if(u.isTileAvailable(h.level,h.x,h.y)&&!l.isTileAvailable(h.level,h.x,h.y)){var d;if(!a&&(s=h.level+"-"+h.x+"-"+h.y,d=r.availabilityPromiseCache[s],!Object(o.a)(d))){var f=new Ac.a({throttle:!0,throttleByServer:!0,type:Tc.a.TERRAIN});d=Xu(e,h.x,h.y,h.level,r,f),Object(o.a)(d)&&(r.availabilityPromiseCache[s]=d,d.then(c))}return{result:!0,promise:d}}h=Ku(r,h.x,h.y,h.level)}return{result:!1}}Wu.prototype.requestTileGeometry=function(e,t,n,i){if(!this._ready)throw new a.a("requestTileGeometry must not be called before the terrain provider is ready.");var r,s=this._layers,c=s.length;if(1===c)r=s[0];else for(var l=0;l<c;++l){var u=s[l];if(!Object(o.a)(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}}return Xu(this,e,t,n,r,i)},Object.defineProperties(Wu.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){if(!this._ready)throw new a.a("credit must not be called before the terrain provider is ready.");return this._credit}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the terrain provider is ready.");return this._tilingScheme}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},hasWaterMask:{get:function(){if(!this._ready)throw new a.a("hasWaterMask must not be called before the terrain provider is ready.");return this._hasWaterMask&&this._requestWaterMask}},hasVertexNormals:{get:function(){if(!this._ready)throw new a.a("hasVertexNormals must not be called before the terrain provider is ready.");return this._hasVertexNormals&&this._requestVertexNormals}},hasMetadata:{get:function(){if(!this._ready)throw new a.a("hasMetadata must not be called before the terrain provider is ready.");return this._hasMetadata&&this._requestMetadata}},requestVertexNormals:{get:function(){return this._requestVertexNormals}},requestWaterMask:{get:function(){return this._requestWaterMask}},requestMetadata:{get:function(){return this._requestMetadata}},availability:{get:function(){if(!this._ready)throw new a.a("availability must not be called before the terrain provider is ready.");return this._availability}}}),Wu.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)},Wu.prototype.getTileDataAvailable=function(e,t,n){if(Object(o.a)(this._availability)){if(n>this._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(n,e,t))return!0;if(!this._hasMetadata)return!1;for(var i=this._layers,r=i.length,a=0;a<r;++a){if(Qu(this,e,t,n,i[a],0===a).result)return}return!1}},Wu.prototype.loadTileDataAvailability=function(e,t,n){if(!(!Object(o.a)(this._availability)||n>this._availability._maximumLevel||this._availability.isTileAvailable(n,e,t))&&this._hasMetadata)for(var i=this._layers,r=i.length,a=0;a<r;++a){var s=Qu(this,e,t,n,i[a],0===a);if(Object(o.a)(s.promise))return s.promise}},Wu._getAvailabilityTile=Ku;var Zu=Wu,Ju={},eh=new O,th=new O,nh=new No,ih=new oe;function rh(e,t,n,i,r,o,a,s,c,l){var u=e+t;O.multiplyByScalar(i,Math.cos(u),eh),O.multiplyByScalar(n,Math.sin(u),th),O.add(eh,th,eh);var h=Math.cos(e);h*=h;var d=Math.sin(e);d*=d;var f=o/Math.sqrt(a*h+r*d)/s;return No.fromAxisAngle(eh,f,nh),oe.fromQuaternion(nh,ih),oe.multiplyByVector(ih,c,l),O.normalize(l,l),O.multiplyByScalar(l,s,l),l}var oh=new O,ah=new O,sh=new O,ch=new O;Ju.raisePositionsToHeight=function(e,t,n){for(var i=t.ellipsoid,r=t.height,o=t.extrudedHeight,a=n?e.length/3*2:e.length/3,s=new Float64Array(3*a),c=e.length,l=n?c:0,u=0;u<c;u+=3){var h=u+1,d=u+2,f=O.fromArray(e,u,oh);i.scaleToGeodeticSurface(f,f);var p=O.clone(f,ah),m=i.geodeticSurfaceNormal(f,ch),g=O.multiplyByScalar(m,r,sh);O.add(f,g,f),n&&(O.multiplyByScalar(m,o,g),O.add(p,g,p),s[u+l]=p.x,s[h+l]=p.y,s[d+l]=p.z),s[u]=f.x,s[h]=f.y,s[d]=f.z}return s};var lh=new O,uh=new O,hh=new O;Ju.computeEllipsePositions=function(e,t,n){var i=e.semiMinorAxis,r=e.semiMajorAxis,o=e.rotation,a=e.center,s=8*e.granularity,c=i*i,l=r*r,u=r*i,h=O.magnitude(a),f=O.normalize(a,lh),p=O.cross(O.UNIT_Z,a,uh);p=O.normalize(p,p);var m=O.cross(f,p,hh),g=1+Math.ceil(d.PI_OVER_TWO/s),v=d.PI_OVER_TWO/(g-1),_=d.PI_OVER_TWO-g*v;_<0&&(g-=Math.ceil(Math.abs(_)/v));var b,y,w,C,E,A=t?new Array(3*(g*(g+2)*2)):void 0,x=0,T=oh,S=ah,D=4*g*3,P=D-1,I=0,M=n?new Array(D):void 0;for(T=rh(_=d.PI_OVER_TWO,o,m,p,c,u,l,h,f,T),t&&(A[x++]=T.x,A[x++]=T.y,A[x++]=T.z),n&&(M[P--]=T.z,M[P--]=T.y,M[P--]=T.x),_=d.PI_OVER_TWO-v,b=1;b<g+1;++b){if(T=rh(_,o,m,p,c,u,l,h,f,T),S=rh(Math.PI-_,o,m,p,c,u,l,h,f,S),t){for(A[x++]=T.x,A[x++]=T.y,A[x++]=T.z,w=2*b+2,y=1;y<w-1;++y)C=y/(w-1),E=O.lerp(T,S,C,sh),A[x++]=E.x,A[x++]=E.y,A[x++]=E.z;A[x++]=S.x,A[x++]=S.y,A[x++]=S.z}n&&(M[P--]=T.z,M[P--]=T.y,M[P--]=T.x,M[I++]=S.x,M[I++]=S.y,M[I++]=S.z),_=d.PI_OVER_TWO-(b+1)*v}for(b=g;b>1;--b){if(T=rh(-(_=d.PI_OVER_TWO-(b-1)*v),o,m,p,c,u,l,h,f,T),S=rh(_+Math.PI,o,m,p,c,u,l,h,f,S),t){for(A[x++]=T.x,A[x++]=T.y,A[x++]=T.z,w=2*(b-1)+2,y=1;y<w-1;++y)C=y/(w-1),E=O.lerp(T,S,C,sh),A[x++]=E.x,A[x++]=E.y,A[x++]=E.z;A[x++]=S.x,A[x++]=S.y,A[x++]=S.z}n&&(M[P--]=T.z,M[P--]=T.y,M[P--]=T.x,M[I++]=S.x,M[I++]=S.y,M[I++]=S.z)}T=rh(-(_=d.PI_OVER_TWO),o,m,p,c,u,l,h,f,T);var R={};return t&&(A[x++]=T.x,A[x++]=T.y,A[x++]=T.z,R.positions=A,R.numPts=g),n&&(M[P--]=T.z,M[P--]=T.y,M[P--]=T.x,R.outerPositions=M),R};var dh=Ju;var fh=function(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.geometry))throw new a.a("options.geometry is required.");this.geometry=e.geometry,this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=Object(r.a)(e.attributes,{}),this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0};function ph(){this.high=O.clone(O.ZERO),this.low=O.clone(O.ZERO)}ph.encode=function(e,t){var n;return i.a.typeOf.number("value",e),Object(o.a)(t)||(t={high:0,low:0}),e>=0?(n=65536*Math.floor(e/65536),t.high=n,t.low=e-n):(n=65536*Math.floor(-e/65536),t.high=-n,t.low=e+n),t};var mh={high:0,low:0};ph.fromCartesian=function(e,t){i.a.typeOf.object("cartesian",e),Object(o.a)(t)||(t=new ph);var n=t.high,r=t.low;return ph.encode(e.x,mh),n.x=mh.high,r.x=mh.low,ph.encode(e.y,mh),n.y=mh.high,r.y=mh.low,ph.encode(e.z,mh),n.z=mh.high,r.z=mh.low,t};var gh=new ph;ph.writeElements=function(e,t,n){i.a.defined("cartesianArray",t),i.a.typeOf.number("index",n),i.a.typeOf.number.greaterThanOrEquals("index",n,0),ph.fromCartesian(e,gh);var r=gh.high,o=gh.low;t[n]=r.x,t[n+1]=r.y,t[n+2]=r.z,t[n+3]=o.x,t[n+4]=o.y,t[n+5]=o.z};var vh=ph,_h={calculateACMR:function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).indices,n=e.maximumIndex,i=Object(r.a)(e.cacheSize,24);if(!Object(o.a)(t))throw new a.a("indices is required.");var s=t.length;if(s<3||s%3!==0)throw new a.a("indices length must be a multiple of three.");if(n<=0)throw new a.a("maximumIndex must be greater than zero.");if(i<3)throw new a.a("cacheSize must be greater than two.");if(!Object(o.a)(n)){n=0;for(var c=0,l=t[c];c<s;)l>n&&(n=l),l=t[++c]}for(var u=[],h=0;h<n+1;h++)u[h]=0;for(var d=i+1,f=0;f<s;++f)d-u[t[f]]>i&&(u[t[f]]=d,++d);return(d-i+1)/(s/3)}};_h.tipsify=function(e){var t,n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).indices,i=e.maximumIndex,s=Object(r.a)(e.cacheSize,24);function c(e,n,i,r,o,a,s){for(var c,l=-1,u=-1,h=0;h<i.length;){var d=i[h];r[d].numLiveTriangles&&(c=0,o-r[d].timeStamp+2*r[d].numLiveTriangles<=n&&(c=o-r[d].timeStamp),(c>u||-1===u)&&(u=c,l=d)),++h}return-1===l?function(e,n,i,r){for(;n.length>=1;){var o=n[n.length-1];if(n.splice(n.length-1,1),e[o].numLiveTriangles>0)return o}for(;t<r;){if(e[t].numLiveTriangles>0)return++t-1;++t}return-1}(r,a,0,s):l}if(!Object(o.a)(n))throw new a.a("indices is required.");var l=n.length;if(l<3||l%3!==0)throw new a.a("indices length must be a multiple of three.");if(i<=0)throw new a.a("maximumIndex must be greater than zero.");if(s<3)throw new a.a("cacheSize must be greater than two.");var u=0,h=0,d=n[h],f=l;if(Object(o.a)(i))u=i+1;else{for(;h<f;)d>u&&(u=d),d=n[++h];if(-1===u)return 0;++u}var p,m=[];for(p=0;p<u;p++)m[p]={numLiveTriangles:0,timeStamp:0,vertexTriangles:[]};h=0;for(var g=0;h<f;)m[n[h]].vertexTriangles.push(g),++m[n[h]].numLiveTriangles,m[n[h+1]].vertexTriangles.push(g),++m[n[h+1]].numLiveTriangles,m[n[h+2]].vertexTriangles.push(g),++m[n[h+2]].numLiveTriangles,++g,h+=3;var v=0,_=s+1;t=1;var b,y,w,O,C=[],E=[],A=0,x=[],T=l/3,S=[];for(p=0;p<T;p++)S[p]=!1;for(;-1!==v;){C=[],O=(y=m[v]).vertexTriangles.length;for(var D=0;D<O;++D)if(!S[g=y.vertexTriangles[D]]){S[g]=!0,h=g+g+g;for(var P=0;P<3;++P)w=n[h],C.push(w),E.push(w),x[A]=w,++A,--(b=m[w]).numLiveTriangles,_-b.timeStamp>s&&(b.timeStamp=_,++_),++h}v=c(0,s,C,m,_,E,u)}return x};var bh=_h,yh={};function wh(e,t,n,i,r){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=r,e[t++]=r,e[t]=n}function Oh(e){var t={};for(var n in e)if(e.hasOwnProperty(n)&&Object(o.a)(e[n])&&Object(o.a)(e[n].values)){var i=e[n];t[n]=new kl({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function Ch(e,t,n){for(var i in t)if(t.hasOwnProperty(i)&&Object(o.a)(t[i])&&Object(o.a)(t[i].values))for(var r=t[i],a=0;a<r.componentsPerAttribute;++a)e[i].values.push(r.values[n*r.componentsPerAttribute+a])}yh.toWireframe=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");var t=e.indices;if(Object(o.a)(t)){switch(e.primitiveType){case xl.TRIANGLES:e.indices=function(e){for(var t=e.length,n=t/3*6,i=lc.createTypedArray(t,n),r=0,o=0;o<t;o+=3,r+=6)wh(i,r,e[o],e[o+1],e[o+2]);return i}(t);break;case xl.TRIANGLE_STRIP:e.indices=function(e){var t=e.length;if(t>=3){var n=6*(t-2),i=lc.createTypedArray(t,n);wh(i,0,e[0],e[1],e[2]);for(var r=6,o=3;o<t;++o,r+=6)wh(i,r,e[o-1],e[o],e[o-2]);return i}return new Uint16Array}(t);break;case xl.TRIANGLE_FAN:e.indices=function(e){if(e.length>0){for(var t=e.length-1,n=6*(t-1),i=lc.createTypedArray(t,n),r=e[0],o=0,a=1;a<t;++a,o+=6)wh(i,o,r,e[a],e[a+1]);return i}return new Uint16Array}(t);break;default:throw new a.a("geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.")}e.primitiveType=xl.LINES}return e},yh.createLineSegmentsForVectors=function(e,t,n){if(t=Object(r.a)(t,"normal"),!Object(o.a)(e))throw new a.a("geometry is required.");if(!Object(o.a)(e.attributes.position))throw new a.a("geometry.attributes.position is required.");if(!Object(o.a)(e.attributes[t]))throw new a.a("geometry.attributes must have an attribute with the same name as the attributeName parameter, "+t+".");n=Object(r.a)(n,1e4);for(var i,s=e.attributes.position.values,c=e.attributes[t].values,l=s.length,u=new Float64Array(2*l),h=0,d=0;d<l;d+=3)u[h++]=s[d],u[h++]=s[d+1],u[h++]=s[d+2],u[h++]=s[d]+c[d]*n,u[h++]=s[d+1]+c[d+1]*n,u[h++]=s[d+2]+c[d+2]*n;var f=e.boundingSphere;return Object(o.a)(f)&&(i=new gt(f.center,f.radius+n)),new zl({attributes:{position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:u})},primitiveType:xl.LINES,boundingSphere:i})},yh.createAttributeLocations=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");var t,n=["position","positionHigh","positionLow","position3DHigh","position3DLow","position2DHigh","position2DLow","pickColor","normal","st","tangent","bitangent","extrudeDirection","compressedAttributes"],i=e.attributes,r={},s=0,c=n.length;for(t=0;t<c;++t){var l=n[t];Object(o.a)(i[l])&&(r[l]=s++)}for(var u in i)i.hasOwnProperty(u)&&!Object(o.a)(r[u])&&(r[u]=s++);return r},yh.reorderForPreVertexCache=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");var t=zl.computeNumberOfVertices(e),n=e.indices;if(Object(o.a)(n)){for(var i=new Int32Array(t),r=0;r<t;r++)i[r]=-1;for(var s,c=n,l=c.length,u=lc.createTypedArray(t,l),h=0,d=0,f=0;h<l;)-1!==(s=i[c[h]])?u[d]=s:(i[s=c[h]]=f,u[d]=f,++f),++h,++d;e.indices=u;var p=e.attributes;for(var m in p)if(p.hasOwnProperty(m)&&Object(o.a)(p[m])&&Object(o.a)(p[m].values)){for(var g=p[m],v=g.values,_=0,b=g.componentsPerAttribute,y=Ds.createTypedArray(g.componentDatatype,f*b);_<t;){var w=i[_];if(-1!==w)for(var O=0;O<b;O++)y[b*w+O]=v[b*_+O];++_}g.values=y}}return e},yh.reorderForPostVertexCache=function(e,t){if(!Object(o.a)(e))throw new a.a("geometry is required.");var n=e.indices;if(e.primitiveType===xl.TRIANGLES&&Object(o.a)(n)){for(var i=n.length,r=0,s=0;s<i;s++)n[s]>r&&(r=n[s]);e.indices=bh.tipsify({indices:n,maximumIndex:r,cacheSize:t})}return e},yh.fitToUnsignedShortIndices=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");if(Object(o.a)(e.indices)&&e.primitiveType!==xl.TRIANGLES&&e.primitiveType!==xl.LINES&&e.primitiveType!==xl.POINTS)throw new a.a("geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS.");var t=[],n=zl.computeNumberOfVertices(e);if(Object(o.a)(e.indices)&&n>=d.SIXTY_FOUR_KILOBYTES){var i,r=[],s=[],c=0,l=Oh(e.attributes),u=e.indices,h=u.length;e.primitiveType===xl.TRIANGLES?i=3:e.primitiveType===xl.LINES?i=2:e.primitiveType===xl.POINTS&&(i=1);for(var f=0;f<h;f+=i){for(var p=0;p<i;++p){var m=u[f+p],g=r[m];Object(o.a)(g)||(g=c++,r[m]=g,Ch(l,e.attributes,m)),s.push(g)}c+i>=d.SIXTY_FOUR_KILOBYTES&&(t.push(new zl({attributes:l,indices:s,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),r=[],s=[],c=0,l=Oh(e.attributes))}0!==s.length&&t.push(new zl({attributes:l,indices:s,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var Eh=new O,Ah=new R;yh.projectTo2D=function(e,t,n,i,r){if(!Object(o.a)(e))throw new a.a("geometry is required.");if(!Object(o.a)(t))throw new a.a("attributeName is required.");if(!Object(o.a)(n))throw new a.a("attributeName3D is required.");if(!Object(o.a)(i))throw new a.a("attributeName2D is required.");if(!Object(o.a)(e.attributes[t]))throw new a.a("geometry must have attribute matching the attributeName argument: "+t+".");if(e.attributes[t].componentDatatype!==Ds.DOUBLE)throw new a.a("The attribute componentDatatype must be ComponentDatatype.DOUBLE.");for(var s=e.attributes[t],c=(r=Object(o.a)(r)?r:new q).ellipsoid,l=s.values,u=new Float64Array(l.length),h=0,d=0;d<l.length;d+=3){var f=O.fromArray(l,d,Eh),p=c.cartesianToCartographic(f,Ah);if(!Object(o.a)(p))throw new a.a("Could not project point ("+f.x+", "+f.y+", "+f.z+") to 2D.");var m=r.project(p,Eh);u[h++]=m.x,u[h++]=m.y,u[h++]=m.z}return e.attributes[n]=s,e.attributes[i]=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:u}),delete e.attributes[t],e};var xh={high:0,low:0};yh.encodeAttribute=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("geometry is required.");if(!Object(o.a)(t))throw new a.a("attributeName is required.");if(!Object(o.a)(n))throw new a.a("attributeHighName is required.");if(!Object(o.a)(i))throw new a.a("attributeLowName is required.");if(!Object(o.a)(e.attributes[t]))throw new a.a("geometry must have attribute matching the attributeName argument: "+t+".");if(e.attributes[t].componentDatatype!==Ds.DOUBLE)throw new a.a("The attribute componentDatatype must be ComponentDatatype.DOUBLE.");for(var r=e.attributes[t],s=r.values,c=s.length,l=new Float32Array(c),u=new Float32Array(c),h=0;h<c;++h)vh.encode(s[h],xh),l[h]=xh.high,u[h]=xh.low;var d=r.componentsPerAttribute;return e.attributes[n]=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:d,values:l}),e.attributes[i]=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:d,values:u}),delete e.attributes[t],e};var Th=new O;function Sh(e,t){if(Object(o.a)(t))for(var n=t.values,i=n.length,r=0;r<i;r+=3)O.unpack(n,r,Th),Ae.multiplyByPoint(e,Th,Th),O.pack(Th,n,r)}function Dh(e,t){if(Object(o.a)(t))for(var n=t.values,i=n.length,r=0;r<i;r+=3)O.unpack(n,r,Th),oe.multiplyByVector(e,Th,Th),Th=O.normalize(Th,Th),O.pack(Th,n,r)}var Ph=new Ae,Ih=new oe;yh.transformToWorldCoordinates=function(e){if(!Object(o.a)(e))throw new a.a("instance is required.");var t=e.modelMatrix;if(Ae.equals(t,Ae.IDENTITY))return e;var n=e.geometry.attributes;Sh(t,n.position),Sh(t,n.prevPosition),Sh(t,n.nextPosition),(Object(o.a)(n.normal)||Object(o.a)(n.tangent)||Object(o.a)(n.bitangent))&&(Ae.inverse(t,Ph),Ae.transpose(Ph,Ph),Ae.getMatrix3(Ph,Ih),Dh(Ih,n.normal),Dh(Ih,n.tangent),Dh(Ih,n.bitangent));var i=e.geometry.boundingSphere;return Object(o.a)(i)&&(e.geometry.boundingSphere=gt.transform(i,t,i)),e.modelMatrix=Ae.clone(Ae.IDENTITY),e};var Mh=new O;function Rh(e,t){var n,i,r,s,c=e.length,l=e[0].modelMatrix,u=Object(o.a)(e[0][t].indices),h=e[0][t].primitiveType;for(i=1;i<c;++i){if(!Ae.equals(e[i].modelMatrix,l))throw new a.a("All instances must have the same modelMatrix.");if(Object(o.a)(e[i][t].indices)!==u)throw new a.a("All instance geometries must have an indices or not have one.");if(e[i][t].primitiveType!==h)throw new a.a("All instance geometries must have the same primitiveType.")}var d,f,p,m,g=function(e,t){var n,i=e.length,r={},a=e[0][t].attributes;for(n in a)if(a.hasOwnProperty(n)&&Object(o.a)(a[n])&&Object(o.a)(a[n].values)){for(var s=a[n],c=s.values.length,l=!0,u=1;u<i;++u){var h=e[u][t].attributes[n];if(!Object(o.a)(h)||s.componentDatatype!==h.componentDatatype||s.componentsPerAttribute!==h.componentsPerAttribute||s.normalize!==h.normalize){l=!1;break}c+=h.values.length}l&&(r[n]=new kl({componentDatatype:s.componentDatatype,componentsPerAttribute:s.componentsPerAttribute,normalize:s.normalize,values:Ds.createTypedArray(s.componentDatatype,c)}))}return r}(e,t);for(n in g)if(g.hasOwnProperty(n))for(d=g[n].values,s=0,i=0;i<c;++i)for(p=(f=e[i][t].attributes[n].values).length,r=0;r<p;++r)d[s++]=f[r];if(u){var v=0;for(i=0;i<c;++i)v+=e[i][t].indices.length;var _=zl.computeNumberOfVertices(new zl({attributes:g,primitiveType:xl.POINTS})),b=lc.createTypedArray(_,v),y=0,w=0;for(i=0;i<c;++i){var C=e[i][t].indices,E=C.length;for(s=0;s<E;++s)b[y++]=w+C[s];w+=zl.computeNumberOfVertices(e[i][t])}m=b}var A,x=new O,T=0;for(i=0;i<c;++i){if(A=e[i][t].boundingSphere,!Object(o.a)(A)){x=void 0;break}O.add(A.center,x,x)}if(Object(o.a)(x))for(O.divideByScalar(x,c,x),i=0;i<c;++i){A=e[i][t].boundingSphere;var S=O.magnitude(O.subtract(A.center,x,Mh))+A.radius;S>T&&(T=S)}return new zl({attributes:g,indices:m,primitiveType:h,boundingSphere:Object(o.a)(x)?new gt(x,T):void 0})}yh.combineInstances=function(e){if(!Object(o.a)(e)||e.length<1)throw new a.a("instances is required and must have length greater than zero.");for(var t=[],n=[],i=e.length,r=0;r<i;++r){var s=e[r];Object(o.a)(s.geometry)?t.push(s):Object(o.a)(s.westHemisphereGeometry)&&Object(o.a)(s.eastHemisphereGeometry)&&n.push(s)}var c=[];return t.length>0&&c.push(Rh(t,"geometry")),n.length>0&&(c.push(Rh(n,"westHemisphereGeometry")),c.push(Rh(n,"eastHemisphereGeometry"))),c};var Lh=new O,jh=new O,Fh=new O,Nh=new O;yh.computeNormal=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");if(!Object(o.a)(e.attributes.position)||!Object(o.a)(e.attributes.position.values))throw new a.a("geometry.attributes.position.values is required.");if(!Object(o.a)(e.indices))throw new a.a("geometry.indices is required.");if(e.indices.length<2||e.indices.length%3!==0)throw new a.a("geometry.indices length must be greater than 0 and be a multiple of 3.");if(e.primitiveType!==xl.TRIANGLES)throw new a.a("geometry.primitiveType must be PrimitiveType.TRIANGLES.");var t,n=e.indices,i=e.attributes,r=i.position.values,s=i.position.values.length/3,c=n.length,l=new Array(s),u=new Array(c/3),h=new Array(c);for(t=0;t<s;t++)l[t]={indexOffset:0,count:0,currentCount:0};var f=0;for(t=0;t<c;t+=3){var p=n[t],m=n[t+1],g=n[t+2],v=3*p,_=3*m,b=3*g;jh.x=r[v],jh.y=r[v+1],jh.z=r[v+2],Fh.x=r[_],Fh.y=r[_+1],Fh.z=r[_+2],Nh.x=r[b],Nh.y=r[b+1],Nh.z=r[b+2],l[p].count++,l[m].count++,l[g].count++,O.subtract(Fh,jh,Fh),O.subtract(Nh,jh,Nh),u[f]=O.cross(Fh,Nh,new O),f++}var y,w=0;for(t=0;t<s;t++)l[t].indexOffset+=w,w+=l[t].count;for(f=0,t=0;t<c;t+=3){var C=(y=l[n[t]]).indexOffset+y.currentCount;h[C]=f,y.currentCount++,h[C=(y=l[n[t+1]]).indexOffset+y.currentCount]=f,y.currentCount++,h[C=(y=l[n[t+2]]).indexOffset+y.currentCount]=f,y.currentCount++,f++}var E=new Float32Array(3*s);for(t=0;t<s;t++){var A=3*t;if(y=l[t],O.clone(O.ZERO,Lh),y.count>0){for(f=0;f<y.count;f++)O.add(Lh,u[h[y.indexOffset+f]],Lh);O.equalsEpsilon(O.ZERO,Lh,d.EPSILON10)&&O.clone(u[h[y.indexOffset]],Lh)}O.equalsEpsilon(O.ZERO,Lh,d.EPSILON10)&&(Lh.z=1),O.normalize(Lh,Lh),E[A]=Lh.x,E[A+1]=Lh.y,E[A+2]=Lh.z}return e.attributes.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:E}),e};var zh=new O,kh=new O,Bh=new O;yh.computeTangentAndBitangent=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");var t=e.attributes,n=e.indices;if(!Object(o.a)(t.position)||!Object(o.a)(t.position.values))throw new a.a("geometry.attributes.position.values is required.");if(!Object(o.a)(t.normal)||!Object(o.a)(t.normal.values))throw new a.a("geometry.attributes.normal.values is required.");if(!Object(o.a)(t.st)||!Object(o.a)(t.st.values))throw new a.a("geometry.attributes.st.values is required.");if(!Object(o.a)(n))throw new a.a("geometry.indices is required.");if(n.length<2||n.length%3!==0)throw new a.a("geometry.indices length must be greater than 0 and be a multiple of 3.");if(e.primitiveType!==xl.TRIANGLES)throw new a.a("geometry.primitiveType must be PrimitiveType.TRIANGLES.");var i,r,s,c,l=e.attributes.position.values,u=e.attributes.normal.values,h=e.attributes.st.values,d=e.attributes.position.values.length/3,f=n.length,p=new Array(3*d);for(i=0;i<p.length;i++)p[i]=0;for(i=0;i<f;i+=3){var m=n[i],g=n[i+1],v=n[i+2];s=3*g,c=3*v;var _=2*m,b=2*g,y=2*v,w=l[r=3*m],C=l[r+1],E=l[r+2],A=h[_],x=h[_+1],T=h[b+1]-x,S=h[y+1]-x,D=1/((h[b]-A)*S-(h[y]-A)*T),P=(S*(l[s]-w)-T*(l[c]-w))*D,I=(S*(l[s+1]-C)-T*(l[c+1]-C))*D,M=(S*(l[s+2]-E)-T*(l[c+2]-E))*D;p[r]+=P,p[r+1]+=I,p[r+2]+=M,p[s]+=P,p[s+1]+=I,p[s+2]+=M,p[c]+=P,p[c+1]+=I,p[c+2]+=M}var R=new Float32Array(3*d),L=new Float32Array(3*d);for(i=0;i<d;i++){s=(r=3*i)+1,c=r+2;var j=O.fromArray(u,r,zh),F=O.fromArray(p,r,Bh),N=O.dot(j,F);O.multiplyByScalar(j,N,kh),O.normalize(O.subtract(F,kh,F),F),R[r]=F.x,R[s]=F.y,R[c]=F.z,O.normalize(O.cross(j,F,F),F),L[r]=F.x,L[s]=F.y,L[c]=F.z}return e.attributes.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:R}),e.attributes.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:L}),e};var Hh=new Mt,Vh=new O,Uh=new O,Wh=new O,Gh=new Mt;function qh(e){switch(e.primitiveType){case xl.TRIANGLE_FAN:return function(e){var t=zl.computeNumberOfVertices(e);if(t<3)throw new a.a("The number of vertices must be at least three.");var n=lc.createTypedArray(t,3*(t-2));n[0]=1,n[1]=0,n[2]=2;for(var i=3,r=3;r<t;++r)n[i++]=r-1,n[i++]=0,n[i++]=r;return e.indices=n,e.primitiveType=xl.TRIANGLES,e}(e);case xl.TRIANGLE_STRIP:return function(e){var t=zl.computeNumberOfVertices(e);if(t<3)throw new a.a("The number of vertices must be at least 3.");var n=lc.createTypedArray(t,3*(t-2));n[0]=0,n[1]=1,n[2]=2,t>3&&(n[3]=0,n[4]=2,n[5]=3);for(var i=6,r=3;r<t-1;r+=2)n[i++]=r,n[i++]=r-1,n[i++]=r+1,r+2<t&&(n[i++]=r,n[i++]=r+1,n[i++]=r+2);return e.indices=n,e.primitiveType=xl.TRIANGLES,e}(e);case xl.TRIANGLES:return function(e){if(Object(o.a)(e.indices))return e;var t=zl.computeNumberOfVertices(e);if(t<3)throw new a.a("The number of vertices must be at least three.");if(t%3!==0)throw new a.a("The number of vertices must be a multiple of three.");for(var n=lc.createTypedArray(t,t),i=0;i<t;++i)n[i]=i;return e.indices=n,e}(e);case xl.LINE_STRIP:return function(e){var t=zl.computeNumberOfVertices(e);if(t<2)throw new a.a("The number of vertices must be at least two.");var n=lc.createTypedArray(t,2*(t-1));n[0]=0,n[1]=1;for(var i=2,r=2;r<t;++r)n[i++]=r-1,n[i++]=r;return e.indices=n,e.primitiveType=xl.LINES,e}(e);case xl.LINE_LOOP:return function(e){var t=zl.computeNumberOfVertices(e);if(t<2)throw new a.a("The number of vertices must be at least two.");var n=lc.createTypedArray(t,2*t);n[0]=0,n[1]=1;for(var i=2,r=2;r<t;++r)n[i++]=r-1,n[i++]=r;return n[i++]=t-1,n[i]=0,e.indices=n,e.primitiveType=xl.LINES,e}(e);case xl.LINES:return function(e){if(Object(o.a)(e.indices))return e;var t=zl.computeNumberOfVertices(e);if(t<2)throw new a.a("The number of vertices must be at least two.");if(t%2!==0)throw new a.a("The number of vertices must be a multiple of 2.");for(var n=lc.createTypedArray(t,t),i=0;i<t;++i)n[i]=i;return e.indices=n,e}(e)}return e}function Yh(e,t){Math.abs(e.y)<d.EPSILON6&&(e.y=t?-d.EPSILON6:d.EPSILON6)}yh.compressVertices=function(e){if(!Object(o.a)(e))throw new a.a("geometry is required.");var t,n,i=e.attributes.extrudeDirection;if(Object(o.a)(i)){var r=i.values;n=r.length/3;var s=new Float32Array(2*n),c=0;for(t=0;t<n;++t)O.fromArray(r,3*t,Vh),O.equals(Vh,O.ZERO)?c+=2:(Gh=xs.octEncodeInRange(Vh,65535,Gh),s[c++]=Gh.x,s[c++]=Gh.y);return e.attributes.compressedAttributes=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:s}),delete e.attributes.extrudeDirection,e}var l=e.attributes.normal,u=e.attributes.st,h=Object(o.a)(l),d=Object(o.a)(u);if(!h&&!d)return e;var f,p,m,g,v=e.attributes.tangent,_=e.attributes.bitangent,b=Object(o.a)(v),y=Object(o.a)(_);h&&(f=l.values),d&&(p=u.values),b&&(m=v.values),y&&(g=_.values);var w=n=(h?f.length:p.length)/(h?3:2),C=d&&h?2:1;C+=b||y?1:0;var E=new Float32Array(w*=C),A=0;for(t=0;t<n;++t){d&&(Mt.fromArray(p,2*t,Hh),E[A++]=xs.compressTextureCoordinates(Hh));var x=3*t;h&&Object(o.a)(m)&&Object(o.a)(g)?(O.fromArray(f,x,Vh),O.fromArray(m,x,Uh),O.fromArray(g,x,Wh),xs.octPack(Vh,Uh,Wh,Hh),E[A++]=Hh.x,E[A++]=Hh.y):(h&&(O.fromArray(f,x,Vh),E[A++]=xs.octEncodeFloat(Vh)),b&&(O.fromArray(m,x,Vh),E[A++]=xs.octEncodeFloat(Vh)),y&&(O.fromArray(g,x,Vh),E[A++]=xs.octEncodeFloat(Vh)))}return e.attributes.compressedAttributes=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:C,values:E}),h&&delete e.attributes.normal,d&&delete e.attributes.st,y&&delete e.attributes.bitangent,b&&delete e.attributes.tangent,e};var $h=new O;function Xh(e,t,n,i){O.add(e,O.multiplyByScalar(O.subtract(t,e,$h),e.y/(e.y-t.y),$h),n),O.clone(n,i),Yh(n,!0),Yh(i,!1)}var Kh=new O,Qh=new O,Zh=new O,Jh=new O,ed={positions:new Array(7),indices:new Array(9)};function td(e,t,n){if(!(e.x>=0||t.x>=0||n.x>=0)){!function(e,t,n){if(0!==e.y&&0!==t.y&&0!==n.y)return Yh(e,e.y<0),Yh(t,t.y<0),void Yh(n,n.y<0);var i=Math.abs(e.y),r=Math.abs(t.y),o=Math.abs(n.y),a=(i>r?i>o?d.sign(e.y):d.sign(n.y):r>o?d.sign(t.y):d.sign(n.y))<0;Yh(e,a),Yh(t,a),Yh(n,a)}(e,t,n);var i=e.y<0,r=t.y<0,o=n.y<0,a=0;a+=i?1:0,a+=r?1:0;var s=ed.indices;1===(a+=o?1:0)?(s[1]=3,s[2]=4,s[5]=6,s[7]=6,s[8]=5,i?(Xh(e,t,Kh,Zh),Xh(e,n,Qh,Jh),s[0]=0,s[3]=1,s[4]=2,s[6]=1):r?(Xh(t,n,Kh,Zh),Xh(t,e,Qh,Jh),s[0]=1,s[3]=2,s[4]=0,s[6]=2):o&&(Xh(n,e,Kh,Zh),Xh(n,t,Qh,Jh),s[0]=2,s[3]=0,s[4]=1,s[6]=0)):2===a&&(s[2]=4,s[4]=4,s[5]=3,s[7]=5,s[8]=6,i?r?o||(Xh(n,e,Kh,Zh),Xh(n,t,Qh,Jh),s[0]=0,s[1]=1,s[3]=0,s[6]=2):(Xh(t,n,Kh,Zh),Xh(t,e,Qh,Jh),s[0]=2,s[1]=0,s[3]=2,s[6]=1):(Xh(e,t,Kh,Zh),Xh(e,n,Qh,Jh),s[0]=1,s[1]=2,s[3]=1,s[6]=0));var c=ed.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,1!==a&&2!==a||(c[3]=Kh,c[4]=Qh,c[5]=Zh,c[6]=Jh,c.length=7),ed}}function nd(e,t){var n=e.attributes;if(0!==n.position.values.length){for(var i in n)if(n.hasOwnProperty(i)&&Object(o.a)(n[i])&&Object(o.a)(n[i].values)){var r=n[i];r.values=Ds.createTypedArray(r.componentDatatype,r.values)}var a=zl.computeNumberOfVertices(e);return e.indices=lc.createTypedArray(a,e.indices),t&&(e.boundingSphere=gt.fromVertices(n.position.values)),e}}function id(e){var t=e.attributes,n={};for(var i in t)if(t.hasOwnProperty(i)&&Object(o.a)(t[i])&&Object(o.a)(t[i].values)){var r=t[i];n[i]=new kl({componentDatatype:r.componentDatatype,componentsPerAttribute:r.componentsPerAttribute,normalize:r.normalize,values:[]})}return new zl({attributes:n,indices:[],primitiveType:e.primitiveType})}function rd(e,t,n){var i=Object(o.a)(e.geometry.boundingSphere);t=nd(t,i),n=nd(n,i),Object(o.a)(n)&&!Object(o.a)(t)?e.geometry=n:!Object(o.a)(n)&&Object(o.a)(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function od(e,t){var n=new e,i=new e,r=new e;return function(o,a,s,c,l,u,h,d){var f=e.fromArray(l,o*t,n),p=e.fromArray(l,a*t,i),m=e.fromArray(l,s*t,r);e.multiplyByScalar(f,c.x,f),e.multiplyByScalar(p,c.y,p),e.multiplyByScalar(m,c.z,m);var g=e.add(f,p,f);e.add(g,m,g),d&&e.normalize(g,g),e.pack(g,u,h*t)}}var ad=od(he,4),sd=od(O,3),cd=od(Mt,2),ld=new O,ud=new O,hd=new O,dd=new O;function fd(e,t,n,i,r,a,s,c,l,u,h,f,p,m,g,v){if(Object(o.a)(a)||Object(o.a)(s)||Object(o.a)(c)||Object(o.a)(l)||Object(o.a)(u)||0!==m){var _=O.fromArray(r,3*e,ld),b=O.fromArray(r,3*t,ud),y=O.fromArray(r,3*n,hd),w=hl(i,_,b,y,dd);if(Object(o.a)(a)&&sd(e,t,n,w,a,f.normal.values,v,!0),Object(o.a)(u)){var C,E=O.fromArray(u,3*e,ld),A=O.fromArray(u,3*t,ud),x=O.fromArray(u,3*n,hd);O.multiplyByScalar(E,w.x,E),O.multiplyByScalar(A,w.y,A),O.multiplyByScalar(x,w.z,x),O.equals(E,O.ZERO)&&O.equals(A,O.ZERO)&&O.equals(x,O.ZERO)?((C=ld).x=0,C.y=0,C.z=0):(C=O.add(E,A,E),O.add(C,x,C),O.normalize(C,C)),O.pack(C,f.extrudeDirection.values,3*v)}if(Object(o.a)(h)&&function(e,t,n,i,r,o,a){var s=r[e]*i.x,c=r[t]*i.y,l=r[n]*i.z;o[a]=s+c+l>d.EPSILON6?1:0}(e,t,n,w,h,f.applyOffset.values,v),Object(o.a)(s)&&sd(e,t,n,w,s,f.tangent.values,v,!0),Object(o.a)(c)&&sd(e,t,n,w,c,f.bitangent.values,v,!0),Object(o.a)(l)&&cd(e,t,n,w,l,f.st.values,v),m>0)for(var T=0;T<m;T++){var S=p[T];pd(e,t,n,w,v,g[S],f[S])}}}function pd(e,t,n,i,r,o,a){var s=o.componentsPerAttribute,c=o.values,l=a.values;switch(s){case 4:ad(e,t,n,i,c,l,r,!1);break;case 3:sd(e,t,n,i,c,l,r,!1);break;case 2:cd(e,t,n,i,c,l,r,!1);break;default:l[r]=c[e]*i.x+c[t]*i.y+c[n]*i.z}}function md(e,t,n,i,r,o){var a=e.position.values.length/3;if(-1!==r){var s=i[r],c=n[s];return-1===c?(n[s]=a,e.position.values.push(o.x,o.y,o.z),t.push(a),a):(t.push(c),c)}return e.position.values.push(o.x,o.y,o.z),t.push(a),a}var gd={position:!0,normal:!0,bitangent:!0,tangent:!0,st:!0,extrudeDirection:!0,applyOffset:!0};function vd(e){var t=e.geometry,n=t.attributes,i=n.position.values,r=Object(o.a)(n.normal)?n.normal.values:void 0,a=Object(o.a)(n.bitangent)?n.bitangent.values:void 0,s=Object(o.a)(n.tangent)?n.tangent.values:void 0,c=Object(o.a)(n.st)?n.st.values:void 0,l=Object(o.a)(n.extrudeDirection)?n.extrudeDirection.values:void 0,u=Object(o.a)(n.applyOffset)?n.applyOffset.values:void 0,h=t.indices,d=[];for(var f in n)n.hasOwnProperty(f)&&!gd[f]&&Object(o.a)(n[f])&&d.push(f);var p,m,g,v,_=d.length,b=id(t),y=id(t),w=[];w.length=i.length/3;var C=[];for(C.length=i.length/3,v=0;v<w.length;++v)w[v]=-1,C[v]=-1;var E=h.length;for(v=0;v<E;v+=3){var A=h[v],x=h[v+1],T=h[v+2],S=O.fromArray(i,3*A),D=O.fromArray(i,3*x),P=O.fromArray(i,3*T),I=td(S,D,P);if(Object(o.a)(I)&&I.positions.length>3)for(var M=I.positions,R=I.indices,L=R.length,j=0;j<L;++j){var F=R[j],N=M[F];N.y<0?(p=y.attributes,m=y.indices,g=w):(p=b.attributes,m=b.indices,g=C),fd(A,x,T,N,i,r,s,a,c,l,u,p,d,_,n,md(p,m,g,h,F<3?v+F:-1,N))}else Object(o.a)(I)&&(S=I.positions[0],D=I.positions[1],P=I.positions[2]),S.y<0?(p=y.attributes,m=y.indices,g=w):(p=b.attributes,m=b.indices,g=C),fd(A,x,T,S,i,r,s,a,c,l,u,p,d,_,n,md(p,m,g,h,v,S)),fd(A,x,T,D,i,r,s,a,c,l,u,p,d,_,n,md(p,m,g,h,v+1,D)),fd(A,x,T,P,i,r,s,a,c,l,u,p,d,_,n,md(p,m,g,h,v+2,P))}rd(e,y,b)}var _d=Fi.fromPointNormal(O.ZERO,O.UNIT_Y),bd=new O,yd=new O;function wd(e,t,n,i,r,a,s){if(Object(o.a)(s)){var c=O.fromArray(i,3*e,ld);O.equalsEpsilon(c,n,d.EPSILON10)?a.applyOffset.values[r]=s[e]:a.applyOffset.values[r]=s[t]}}function Od(e){var t,n=e.geometry,i=n.attributes,r=i.position.values,a=Object(o.a)(i.applyOffset)?i.applyOffset.values:void 0,s=n.indices,c=id(n),l=id(n),u=s.length,h=[];h.length=r.length/3;var f=[];for(f.length=r.length/3,t=0;t<h.length;++t)h[t]=-1,f[t]=-1;for(t=0;t<u;t+=2){var p=s[t],m=s[t+1],g=O.fromArray(r,3*p,ld),v=O.fromArray(r,3*m,ud);Math.abs(g.y)<d.EPSILON6&&(g.y<0?g.y=-d.EPSILON6:g.y=d.EPSILON6),Math.abs(v.y)<d.EPSILON6&&(v.y<0?v.y=-d.EPSILON6:v.y=d.EPSILON6);var _=c.attributes,b=c.indices,y=f,w=l.attributes,C=l.indices,E=h,A=Ii.lineSegmentPlane(g,v,_d,hd);if(Object(o.a)(A)){var x=O.multiplyByScalar(O.UNIT_Y,5*d.EPSILON9,bd);g.y<0&&(O.negate(x,x),_=l.attributes,b=l.indices,y=h,w=c.attributes,C=c.indices,E=f);var T=O.add(A,x,yd);wd(p,m,g,r,md(_,b,y,s,t,g),_,a),wd(p,m,T,r,md(_,b,y,s,-1,T),_,a),O.negate(x,x),O.add(A,x,T),wd(p,m,T,r,md(w,C,E,s,-1,T),w,a),wd(p,m,v,r,md(w,C,E,s,t+1,v),w,a)}else{var S,D,P;g.y<0?(S=l.attributes,D=l.indices,P=h):(S=c.attributes,D=c.indices,P=f),wd(p,m,g,r,md(S,D,P,s,t,g),S,a),wd(p,m,v,r,md(S,D,P,s,t+1,v),S,a)}}rd(e,l,c)}var Cd=new Mt,Ed=new Mt,Ad=new O,xd=new O,Td=new O,Sd=new O,Dd=new O,Pd=new O,Id=new he;function Md(e){for(var t=e.attributes,n=t.position.values,i=t.prevPosition.values,r=t.nextPosition.values,o=n.length,a=0;a<o;a+=3){var s=O.unpack(n,a,Ad);if(!(s.x>0)){var c=O.unpack(i,a,xd);(s.y<0&&c.y>0||s.y>0&&c.y<0)&&(a-3>0?(i[a]=n[a-3],i[a+1]=n[a-2],i[a+2]=n[a-1]):O.pack(s,i,a));var l=O.unpack(r,a,Td);(s.y<0&&l.y>0||s.y>0&&l.y<0)&&(a+3<o?(r[a]=n[a+3],r[a+1]=n[a+4],r[a+2]=n[a+5]):O.pack(s,r,a))}}}var Rd=5*d.EPSILON9,Ld=d.EPSILON6;yh.splitLongitude=function(e){if(!Object(o.a)(e))throw new a.a("instance is required.");var t=e.geometry,n=t.boundingSphere;if(Object(o.a)(n)&&(n.center.x-n.radius>0||gt.intersectPlane(n,Fi.ORIGIN_ZX_PLANE)!==Y.INTERSECTING))return e;if(t.geometryType!==yl.NONE)switch(t.geometryType){case yl.POLYLINES:!function(e){var t,n,i,r=e.geometry,a=r.attributes,s=a.position.values,c=a.prevPosition.values,l=a.nextPosition.values,u=a.expandAndWidth.values,h=Object(o.a)(a.st)?a.st.values:void 0,f=Object(o.a)(a.color)?a.color.values:void 0,p=id(r),m=id(r),g=!1,v=s.length/3;for(t=0;t<v;t+=4){var _=t,b=t+2,y=O.fromArray(s,3*_,Ad),w=O.fromArray(s,3*b,xd);if(Math.abs(y.y)<Ld)for(y.y=Ld*(w.y<0?-1:1),s[3*t+1]=y.y,s[3*(t+1)+1]=y.y,n=3*_;n<3*_+12;n+=3)c[n]=s[3*t],c[n+1]=s[3*t+1],c[n+2]=s[3*t+2];if(Math.abs(w.y)<Ld)for(w.y=Ld*(y.y<0?-1:1),s[3*(t+2)+1]=w.y,s[3*(t+3)+1]=w.y,n=3*_;n<3*_+12;n+=3)l[n]=s[3*(t+2)],l[n+1]=s[3*(t+2)+1],l[n+2]=s[3*(t+2)+2];var C=p.attributes,E=p.indices,A=m.attributes,x=m.indices,T=Ii.lineSegmentPlane(y,w,_d,Sd);if(Object(o.a)(T)){g=!0;var S=O.multiplyByScalar(O.UNIT_Y,Rd,Dd);y.y<0&&(O.negate(S,S),C=m.attributes,E=m.indices,A=p.attributes,x=p.indices);var D=O.add(T,S,Pd);C.position.values.push(y.x,y.y,y.z,y.x,y.y,y.z),C.position.values.push(D.x,D.y,D.z),C.position.values.push(D.x,D.y,D.z),C.prevPosition.values.push(c[3*_],c[3*_+1],c[3*_+2]),C.prevPosition.values.push(c[3*_+3],c[3*_+4],c[3*_+5]),C.prevPosition.values.push(y.x,y.y,y.z,y.x,y.y,y.z),C.nextPosition.values.push(D.x,D.y,D.z),C.nextPosition.values.push(D.x,D.y,D.z),C.nextPosition.values.push(D.x,D.y,D.z),C.nextPosition.values.push(D.x,D.y,D.z),O.negate(S,S),O.add(T,S,D),A.position.values.push(D.x,D.y,D.z),A.position.values.push(D.x,D.y,D.z),A.position.values.push(w.x,w.y,w.z,w.x,w.y,w.z),A.prevPosition.values.push(D.x,D.y,D.z),A.prevPosition.values.push(D.x,D.y,D.z),A.prevPosition.values.push(D.x,D.y,D.z),A.prevPosition.values.push(D.x,D.y,D.z),A.nextPosition.values.push(w.x,w.y,w.z,w.x,w.y,w.z),A.nextPosition.values.push(l[3*b],l[3*b+1],l[3*b+2]),A.nextPosition.values.push(l[3*b+3],l[3*b+4],l[3*b+5]);var P=Mt.fromArray(u,2*_,Cd),I=Math.abs(P.y);C.expandAndWidth.values.push(-1,I,1,I),C.expandAndWidth.values.push(-1,-I,1,-I),A.expandAndWidth.values.push(-1,I,1,I),A.expandAndWidth.values.push(-1,-I,1,-I);var M=O.magnitudeSquared(O.subtract(T,y,Td));if(M/=O.magnitudeSquared(O.subtract(w,y,Td)),Object(o.a)(f)){var R=he.fromArray(f,4*_,Id),L=he.fromArray(f,4*b,Id),j=d.lerp(R.x,L.x,M),F=d.lerp(R.y,L.y,M),N=d.lerp(R.z,L.z,M),z=d.lerp(R.w,L.w,M);for(n=4*_;n<4*_+8;++n)C.color.values.push(f[n]);for(C.color.values.push(j,F,N,z),C.color.values.push(j,F,N,z),A.color.values.push(j,F,N,z),A.color.values.push(j,F,N,z),n=4*b;n<4*b+8;++n)A.color.values.push(f[n])}if(Object(o.a)(h)){var k=Mt.fromArray(h,2*_,Cd),B=Mt.fromArray(h,2*(t+3),Ed),H=d.lerp(k.x,B.x,M);for(n=2*_;n<2*_+4;++n)C.st.values.push(h[n]);for(C.st.values.push(H,k.y),C.st.values.push(H,B.y),A.st.values.push(H,k.y),A.st.values.push(H,B.y),n=2*b;n<2*b+4;++n)A.st.values.push(h[n])}i=C.position.values.length/3-4,E.push(i,i+2,i+1),E.push(i+1,i+2,i+3),i=A.position.values.length/3-4,x.push(i,i+2,i+1),x.push(i+1,i+2,i+3)}else{var V,U;for(y.y<0?(V=m.attributes,U=m.indices):(V=p.attributes,U=p.indices),V.position.values.push(y.x,y.y,y.z),V.position.values.push(y.x,y.y,y.z),V.position.values.push(w.x,w.y,w.z),V.position.values.push(w.x,w.y,w.z),n=3*t;n<3*t+12;++n)V.prevPosition.values.push(c[n]),V.nextPosition.values.push(l[n]);for(n=2*t;n<2*t+8;++n)V.expandAndWidth.values.push(u[n]),Object(o.a)(h)&&V.st.values.push(h[n]);if(Object(o.a)(f))for(n=4*t;n<4*t+16;++n)V.color.values.push(f[n]);i=V.position.values.length/3-4,U.push(i,i+2,i+1),U.push(i+1,i+2,i+3)}}g&&(Md(m),Md(p)),rd(e,m,p)}(e);break;case yl.TRIANGLES:vd(e);break;case yl.LINES:Od(e)}else qh(t),t.primitiveType===xl.TRIANGLES?vd(e):t.primitiveType===xl.LINES&&Od(e);return e};var jd=yh,Fd=new O,Nd=new O,zd=new O,kd=new O,Bd=new Mt,Hd=new oe,Vd=new oe,Ud=new No,Wd=new O,Gd=new O,qd=new O,Yd=new R,$d=new O,Xd=new Mt,Kd=new Mt;function Qd(e,t,n){var i=t.vertexFormat,r=t.center,a=t.semiMajorAxis,s=t.semiMinorAxis,c=t.ellipsoid,l=t.stRotation,u=n?e.length/3*2:e.length/3,h=t.shadowVolume,d=i.st?new Float32Array(2*u):void 0,f=i.normal?new Float32Array(3*u):void 0,p=i.tangent?new Float32Array(3*u):void 0,m=i.bitangent?new Float32Array(3*u):void 0,g=h?new Float32Array(3*u):void 0,v=0,_=Wd,b=Gd,y=qd,w=new q(c),C=w.project(c.cartesianToCartographic(r,Yd),$d),E=c.scaleToGeodeticSurface(r,Fd);c.geodeticSurfaceNormal(E,E);var A=Hd,x=Vd;if(0!==l){var T=No.fromAxisAngle(E,l,Ud);A=oe.fromQuaternion(T,A),T=No.fromAxisAngle(E,-l,Ud),x=oe.fromQuaternion(T,x)}else A=oe.clone(oe.IDENTITY,A),x=oe.clone(oe.IDENTITY,x);for(var S=Mt.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Xd),D=Mt.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Kd),P=e.length,I=n?P:0,M=I/3*2,R=0;R<P;R+=3){var L=R+1,j=R+2,F=O.fromArray(e,R,Fd);if(i.st){var N=oe.multiplyByVector(A,F,Nd),z=w.project(c.cartesianToCartographic(N,Yd),zd);O.subtract(z,C,z),Bd.x=(z.x+a)/(2*a),Bd.y=(z.y+s)/(2*s),S.x=Math.min(Bd.x,S.x),S.y=Math.min(Bd.y,S.y),D.x=Math.max(Bd.x,D.x),D.y=Math.max(Bd.y,D.y),n&&(d[v+M]=Bd.x,d[v+1+M]=Bd.y),d[v++]=Bd.x,d[v++]=Bd.y}(i.normal||i.tangent||i.bitangent||h)&&(_=c.geodeticSurfaceNormal(F,_),h&&(g[R+I]=-_.x,g[L+I]=-_.y,g[j+I]=-_.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(b=O.normalize(O.cross(O.UNIT_Z,_,b),b),oe.multiplyByVector(x,b,b)),i.normal&&(f[R]=_.x,f[L]=_.y,f[j]=_.z,n&&(f[R+I]=-_.x,f[L+I]=-_.y,f[j+I]=-_.z)),i.tangent&&(p[R]=b.x,p[L]=b.y,p[j]=b.z,n&&(p[R+I]=-b.x,p[L+I]=-b.y,p[j+I]=-b.z)),i.bitangent&&(y=O.normalize(O.cross(_,b,y),y),m[R]=y.x,m[L]=y.y,m[j]=y.z,n&&(m[R+I]=y.x,m[L+I]=y.y,m[j+I]=y.z))))}if(i.st){P=d.length;for(var k=0;k<P;k+=2)d[k]=(d[k]-S.x)/(D.x-S.x),d[k+1]=(d[k+1]-S.y)/(D.y-S.y)}var B=new Bl;if(i.position){var H=dh.raisePositionsToHeight(e,t,n);B.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:H})}if(i.st&&(B.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:d})),i.normal&&(B.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:f})),i.tangent&&(B.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:p})),i.bitangent&&(B.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:m})),h&&(B.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:g})),n&&Object(o.a)(t.offsetAttribute)){var V=new Uint8Array(u);if(t.offsetAttribute===Hl.TOP)V=nl(V,1,0,u/2);else{var U=t.offsetAttribute===Hl.NONE?0:1;V=nl(V,U)}B.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:V})}return B}function Zd(e){var t,n,i,r,o,a=new Array(e*(e+1)*12-6),s=0;for(t=0,i=1,r=0;r<3;r++)a[s++]=i++,a[s++]=t,a[s++]=i;for(r=2;r<e+1;++r){for(i=r*(r+1)-1,t=(r-1)*r-1,a[s++]=i++,a[s++]=t,a[s++]=i,n=2*r,o=0;o<n-1;++o)a[s++]=i,a[s++]=t++,a[s++]=t,a[s++]=i++,a[s++]=t,a[s++]=i;a[s++]=i++,a[s++]=t,a[s++]=i}for(n=2*e,++i,++t,r=0;r<n-1;++r)a[s++]=i,a[s++]=t++,a[s++]=t,a[s++]=i++,a[s++]=t,a[s++]=i;for(a[s++]=i,a[s++]=t++,a[s++]=t,a[s++]=i++,a[s++]=t++,a[s++]=t,++t,r=e-1;r>1;--r){for(a[s++]=t++,a[s++]=t,a[s++]=i,n=2*r,o=0;o<n-1;++o)a[s++]=i,a[s++]=t++,a[s++]=t,a[s++]=i++,a[s++]=t,a[s++]=i;a[s++]=t++,a[s++]=t++,a[s++]=i++}for(r=0;r<3;r++)a[s++]=t++,a[s++]=t,a[s++]=i;return a}var Jd=new O;var ef=new gt,tf=new gt;function nf(e){var t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,r=O.multiplyByScalar(n.geodeticSurfaceNormal(t,Fd),e.height,Fd);ef.center=O.add(t,r,ef.center),ef.radius=i,r=O.multiplyByScalar(n.geodeticSurfaceNormal(t,r),e.extrudedHeight,r),tf.center=O.add(t,r,tf.center),tf.radius=i;var a=dh.computeEllipsePositions(e,!0,!0),s=a.positions,c=a.numPts,l=a.outerPositions,u=gt.union(ef,tf),h=Qd(s,e,!0),d=Zd(c),f=d.length;d.length=2*f;for(var p=s.length/3,m=0;m<f;m+=3)d[m+f]=d[m+2]+p,d[m+1+f]=d[m+1]+p,d[m+2+f]=d[m]+p;var g=lc.createTypedArray(2*p/3,d),v=new zl({attributes:h,indices:g,primitiveType:xl.TRIANGLES}),_=function(e,t){var n=t.vertexFormat,i=t.center,r=t.semiMajorAxis,a=t.semiMinorAxis,s=t.ellipsoid,c=t.height,l=t.extrudedHeight,u=t.stRotation,h=e.length/3*2,d=new Float64Array(3*h),f=n.st?new Float32Array(2*h):void 0,p=n.normal?new Float32Array(3*h):void 0,m=n.tangent?new Float32Array(3*h):void 0,g=n.bitangent?new Float32Array(3*h):void 0,v=t.shadowVolume,_=v?new Float32Array(3*h):void 0,b=0,y=Wd,w=Gd,C=qd,E=new q(s),A=E.project(s.cartesianToCartographic(i,Yd),$d),x=s.scaleToGeodeticSurface(i,Fd);s.geodeticSurfaceNormal(x,x);for(var T=No.fromAxisAngle(x,u,Ud),S=oe.fromQuaternion(T,Hd),D=Mt.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Xd),P=Mt.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Kd),I=e.length,M=I/3*2,R=0;R<I;R+=3){var L,j=R+1,F=R+2,N=O.fromArray(e,R,Fd);if(n.st){var z=oe.multiplyByVector(S,N,Nd),k=E.project(s.cartesianToCartographic(z,Yd),zd);O.subtract(k,A,k),Bd.x=(k.x+r)/(2*r),Bd.y=(k.y+a)/(2*a),D.x=Math.min(Bd.x,D.x),D.y=Math.min(Bd.y,D.y),P.x=Math.max(Bd.x,P.x),P.y=Math.max(Bd.y,P.y),f[b+M]=Bd.x,f[b+1+M]=Bd.y,f[b++]=Bd.x,f[b++]=Bd.y}N=s.scaleToGeodeticSurface(N,N),L=O.clone(N,Nd),y=s.geodeticSurfaceNormal(N,y),v&&(_[R+I]=-y.x,_[j+I]=-y.y,_[F+I]=-y.z);var B=O.multiplyByScalar(y,c,kd);if(N=O.add(N,B,N),B=O.multiplyByScalar(y,l,B),L=O.add(L,B,L),n.position&&(d[R+I]=L.x,d[j+I]=L.y,d[F+I]=L.z,d[R]=N.x,d[j]=N.y,d[F]=N.z),n.normal||n.tangent||n.bitangent){C=O.clone(y,C);var H=O.fromArray(e,(R+3)%I,kd);O.subtract(H,N,H);var V=O.subtract(L,N,zd);y=O.normalize(O.cross(V,H,y),y),n.normal&&(p[R]=y.x,p[j]=y.y,p[F]=y.z,p[R+I]=y.x,p[j+I]=y.y,p[F+I]=y.z),n.tangent&&(w=O.normalize(O.cross(C,y,w),w),m[R]=w.x,m[j]=w.y,m[F]=w.z,m[R+I]=w.x,m[R+1+I]=w.y,m[R+2+I]=w.z),n.bitangent&&(g[R]=C.x,g[j]=C.y,g[F]=C.z,g[R+I]=C.x,g[j+I]=C.y,g[F+I]=C.z)}}if(n.st){I=f.length;for(var U=0;U<I;U+=2)f[U]=(f[U]-D.x)/(P.x-D.x),f[U+1]=(f[U+1]-D.y)/(P.y-D.y)}var W=new Bl;if(n.position&&(W.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:d})),n.st&&(W.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:f})),n.normal&&(W.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:p})),n.tangent&&(W.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:m})),n.bitangent&&(W.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:g})),v&&(W.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:_})),Object(o.a)(t.offsetAttribute)){var G=new Uint8Array(h);if(t.offsetAttribute===Hl.TOP)G=nl(G,1,0,h/2);else{var Y=t.offsetAttribute===Hl.NONE?0:1;G=nl(G,Y)}W.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:G})}return W}(l,e);d=function(e){for(var t=e.length/3,n=lc.createTypedArray(t,6*t),i=0,r=0;r<t;r++){var o=r,a=r+t,s=(o+1)%t,c=s+t;n[i++]=o,n[i++]=a,n[i++]=s,n[i++]=s,n[i++]=a,n[i++]=c}return n}(l);var b=lc.createTypedArray(2*l.length/3,d),y=new zl({attributes:_,indices:b,primitiveType:xl.TRIANGLES}),w=jd.combineInstances([new fh({geometry:v}),new fh({geometry:y})]);return{boundingSphere:u,attributes:w[0].attributes,indices:w[0].indices}}function rf(e,t,n,i,r,o,a){for(var s=dh.computeEllipsePositions({center:e,semiMajorAxis:t,semiMinorAxis:n,rotation:i,granularity:r},!1,!0).outerPositions,c=s.length/3,l=new Array(c),u=0;u<c;++u)l[u]=O.fromArray(s,3*u);var h=Se.fromCartesianArray(l,o,a);return h.width>d.PI&&(h.north=h.north>0?d.PI_OVER_TWO-d.EPSILON7:h.north,h.south=h.south<0?d.EPSILON7-d.PI_OVER_TWO:h.south,h.east=d.PI,h.west=-d.PI),h}function of(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).center,n=Object(r.a)(e.ellipsoid,W.WGS84),o=e.semiMajorAxis,s=e.semiMinorAxis,c=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),l=Object(r.a)(e.vertexFormat,Ul.DEFAULT);if(i.a.defined("options.center",t),i.a.typeOf.number("options.semiMajorAxis",o),i.a.typeOf.number("options.semiMinorAxis",s),o<s)throw new a.a("semiMajorAxis must be greater than or equal to the semiMinorAxis.");if(c<=0)throw new a.a("granularity must be greater than zero.");var u=Object(r.a)(e.height,0),h=Object(r.a)(e.extrudedHeight,u);this._center=O.clone(t),this._semiMajorAxis=o,this._semiMinorAxis=s,this._ellipsoid=W.clone(n),this._rotation=Object(r.a)(e.rotation,0),this._stRotation=Object(r.a)(e.stRotation,0),this._height=Math.max(h,u),this._granularity=c,this._vertexFormat=Ul.clone(l),this._extrudedHeight=Math.min(h,u),this._shadowVolume=Object(r.a)(e.shadowVolume,!1),this._workerName="createEllipseGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}of.packedLength=O.packedLength+W.packedLength+Ul.packedLength+9,of.pack=function(e,t,n){return i.a.defined("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),O.pack(e._center,t,n),n+=O.packedLength,W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var af=new O,sf=new W,cf=new Ul,lf={center:af,ellipsoid:sf,vertexFormat:cf,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};of.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=O.unpack(e,t,af);t+=O.packedLength;var s=W.unpack(e,t,sf);t+=W.packedLength;var c=Ul.unpack(e,t,cf);t+=Ul.packedLength;var l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t++],g=1===e[t++],v=e[t];return Object(o.a)(n)?(n._center=O.clone(a,n._center),n._ellipsoid=W.clone(s,n._ellipsoid),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._semiMajorAxis=l,n._semiMinorAxis=u,n._rotation=h,n._stRotation=d,n._height=f,n._granularity=p,n._extrudedHeight=m,n._shadowVolume=g,n._offsetAttribute=-1===v?void 0:v,n):(lf.height=f,lf.extrudedHeight=m,lf.granularity=p,lf.stRotation=d,lf.rotation=h,lf.semiMajorAxis=l,lf.semiMinorAxis=u,lf.shadowVolume=g,lf.offsetAttribute=-1===v?void 0:v,new of(lf))},of.computeRectangle=function(e,t){var n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).center,o=Object(r.a)(e.ellipsoid,W.WGS84),s=e.semiMajorAxis,c=e.semiMinorAxis,l=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),u=Object(r.a)(e.rotation,0);if(i.a.defined("options.center",n),i.a.typeOf.number("options.semiMajorAxis",s),i.a.typeOf.number("options.semiMinorAxis",c),s<c)throw new a.a("semiMajorAxis must be greater than or equal to the semiMinorAxis.");if(l<=0)throw new a.a("granularity must be greater than zero.");return rf(n,s,c,u,l,o,t)},of.createGeometry=function(e){if(!(e._semiMajorAxis<=0||e._semiMinorAxis<=0)){var t=e._height,n=e._extrudedHeight,i=!d.equalsEpsilon(t,n,0,d.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);var r,a={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,vertexFormat:e._vertexFormat,stRotation:e._stRotation};if(i)a.extrudedHeight=n,a.shadowVolume=e._shadowVolume,a.offsetAttribute=e._offsetAttribute,r=nf(a);else if(r=function(e){var t=e.center;Jd=O.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,Jd),e.height,Jd),Jd=O.add(t,Jd,Jd);var n=new gt(Jd,e.semiMajorAxis),i=dh.computeEllipsePositions(e,!0,!1),r=i.positions,o=i.numPts,a=Qd(r,e,!1),s=Zd(o);return{boundingSphere:n,attributes:a,indices:s=lc.createTypedArray(r.length/3,s)}}(a),Object(o.a)(e._offsetAttribute)){var s=r.attributes.position.values.length,c=new Uint8Array(s/3),l=e._offsetAttribute===Hl.NONE?0:1;nl(c,l),r.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new zl({attributes:r.attributes,indices:r.indices,primitiveType:xl.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})}},of.createShadowVolume=function(e,t,n){var i=e._granularity,r=e._ellipsoid,o=t(i,r),a=n(i,r);return new of({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:r,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:o,height:a,vertexFormat:Ul.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(of.prototype,{rectangle:{get:function(){return Object(o.a)(this._rectangle)||(this._rectangle=rf(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return Object(o.a)(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(e){var t=-e._stRotation;if(0===t)return[0,0,0,1,1,0];for(var n=dh.computeEllipsePositions({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,rotation:e._rotation,granularity:e._granularity},!1,!0).outerPositions,i=n.length/3,r=new Array(i),o=0;o<i;++o)r[o]=O.fromArray(n,3*o);var a=e._ellipsoid,s=e.rectangle;return zl._textureCoordinateRotationPoints(r,t,a,s)}(this)),this._textureCoordinateRotationPoints}}});var uf=of;function hf(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).radius;i.a.typeOf.number("radius",t);var n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new uf(n),this._workerName="createCircleGeometry"}hf.packedLength=uf.packedLength,hf.pack=function(e,t,n){return i.a.typeOf.object("value",e),uf.pack(e._ellipseGeometry,t,n)};var df=new uf({center:new O,semiMajorAxis:1,semiMinorAxis:1}),ff={center:new O,radius:void 0,ellipsoid:W.clone(W.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new Ul,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};hf.unpack=function(e,t,n){var i=uf.unpack(e,t,df);return ff.center=O.clone(i._center,ff.center),ff.ellipsoid=W.clone(i._ellipsoid,ff.ellipsoid),ff.height=i._height,ff.extrudedHeight=i._extrudedHeight,ff.granularity=i._granularity,ff.vertexFormat=Ul.clone(i._vertexFormat,ff.vertexFormat),ff.stRotation=i._stRotation,ff.shadowVolume=i._shadowVolume,Object(o.a)(n)?(ff.semiMajorAxis=i._semiMajorAxis,ff.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new uf(ff),n):(ff.radius=i._semiMajorAxis,new hf(ff))},hf.createGeometry=function(e){return uf.createGeometry(e._ellipseGeometry)},hf.createShadowVolume=function(e,t,n){var i=e._ellipseGeometry._granularity,r=e._ellipseGeometry._ellipsoid,o=t(i,r),a=n(i,r);return new hf({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:r,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:o,height:a,vertexFormat:Ul.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(hf.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var pf=new O,mf=new O;var gf=new gt,vf=new gt;function _f(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).center,n=Object(r.a)(e.ellipsoid,W.WGS84),i=e.semiMajorAxis,s=e.semiMinorAxis,c=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE);if(!Object(o.a)(t))throw new a.a("center is required.");if(!Object(o.a)(i))throw new a.a("semiMajorAxis is required.");if(!Object(o.a)(s))throw new a.a("semiMinorAxis is required.");if(i<s)throw new a.a("semiMajorAxis must be greater than or equal to the semiMinorAxis.");if(c<=0)throw new a.a("granularity must be greater than zero.");var l=Object(r.a)(e.height,0),u=Object(r.a)(e.extrudedHeight,l);this._center=O.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=s,this._ellipsoid=W.clone(n),this._rotation=Object(r.a)(e.rotation,0),this._height=Math.max(u,l),this._granularity=c,this._extrudedHeight=Math.min(u,l),this._numberOfVerticalLines=Math.max(Object(r.a)(e.numberOfVerticalLines,16),0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}_f.packedLength=O.packedLength+W.packedLength+8,_f.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),O.pack(e._center,t,n),n+=O.packedLength,W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._numberOfVerticalLines,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var bf=new O,yf=new W,wf={center:bf,ellipsoid:yf,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};_f.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");t=Object(r.a)(t,0);var i=O.unpack(e,t,bf);t+=O.packedLength;var s=W.unpack(e,t,yf);t+=W.packedLength;var c=e[t++],l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t];return Object(o.a)(n)?(n._center=O.clone(i,n._center),n._ellipsoid=W.clone(s,n._ellipsoid),n._semiMajorAxis=c,n._semiMinorAxis=l,n._rotation=u,n._height=h,n._granularity=d,n._extrudedHeight=f,n._numberOfVerticalLines=p,n._offsetAttribute=-1===m?void 0:m,n):(wf.height=h,wf.extrudedHeight=f,wf.granularity=d,wf.rotation=u,wf.semiMajorAxis=c,wf.semiMinorAxis=l,wf.numberOfVerticalLines=p,wf.offsetAttribute=-1===m?void 0:m,new _f(wf))},_f.createGeometry=function(e){if(!(e._semiMajorAxis<=0||e._semiMinorAxis<=0)){var t=e._height,n=e._extrudedHeight,i=!d.equalsEpsilon(t,n,0,d.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);var a,s={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,numberOfVerticalLines:e._numberOfVerticalLines};if(i)s.extrudedHeight=n,s.offsetAttribute=e._offsetAttribute,a=function(e){var t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,a=O.multiplyByScalar(n.geodeticSurfaceNormal(t,pf),e.height,pf);gf.center=O.add(t,a,gf.center),gf.radius=i,a=O.multiplyByScalar(n.geodeticSurfaceNormal(t,a),e.extrudedHeight,a),vf.center=O.add(t,a,vf.center),vf.radius=i;var s=dh.computeEllipsePositions(e,!1,!0).outerPositions,c=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:dh.raisePositionsToHeight(s,e,!0)})});s=c.position.values;var l=gt.union(gf,vf),u=s.length/3;if(Object(o.a)(e.offsetAttribute)){var h=new Uint8Array(u);if(e.offsetAttribute===Hl.TOP)h=nl(h,1,0,u/2);else{var f=e.offsetAttribute===Hl.NONE?0:1;h=nl(h,f)}c.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}var p=Object(r.a)(e.numberOfVerticalLines,16);p=d.clamp(p,0,u/2);var m=lc.createTypedArray(u,2*u+2*p);u/=2;var g,v,_=0;for(g=0;g<u;++g)m[_++]=g,m[_++]=(g+1)%u,m[_++]=g+u,m[_++]=(g+1)%u+u;if(p>0){var b=Math.min(p,u);v=Math.round(u/b);var y=Math.min(v*p,u);for(g=0;g<y;g+=v)m[_++]=g,m[_++]=g+u}return{boundingSphere:l,attributes:c,indices:m}}(s);else if(a=function(e){var t=e.center;mf=O.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,mf),e.height,mf),mf=O.add(t,mf,mf);for(var n=new gt(mf,e.semiMajorAxis),i=dh.computeEllipsePositions(e,!1,!0).outerPositions,r=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:dh.raisePositionsToHeight(i,e,!1)})}),o=i.length/3,a=lc.createTypedArray(o,2*o),s=0,c=0;c<o;++c)a[s++]=c,a[s++]=(c+1)%o;return{boundingSphere:n,attributes:r,indices:a}}(s),Object(o.a)(e._offsetAttribute)){var c=a.attributes.position.values.length,l=new Uint8Array(c/3),u=e._offsetAttribute===Hl.NONE?0:1;nl(l,u),a.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:l})}return new zl({attributes:a.attributes,indices:a.indices,primitiveType:xl.LINES,boundingSphere:a.boundingSphere,offsetAttribute:e._offsetAttribute})}};var Of=_f;function Cf(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).radius;i.a.typeOf.number("radius",t);var n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new Of(n),this._workerName="createCircleOutlineGeometry"}Cf.packedLength=Of.packedLength,Cf.pack=function(e,t,n){return i.a.typeOf.object("value",e),Of.pack(e._ellipseGeometry,t,n)};var Ef=new Of({center:new O,semiMajorAxis:1,semiMinorAxis:1}),Af={center:new O,radius:void 0,ellipsoid:W.clone(W.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};Cf.unpack=function(e,t,n){var i=Of.unpack(e,t,Ef);return Af.center=O.clone(i._center,Af.center),Af.ellipsoid=W.clone(i._ellipsoid,Af.ellipsoid),Af.height=i._height,Af.extrudedHeight=i._extrudedHeight,Af.granularity=i._granularity,Af.numberOfVerticalLines=i._numberOfVerticalLines,Object(o.a)(n)?(Af.semiMajorAxis=i._semiMajorAxis,Af.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new Of(Af),n):(Af.radius=i._semiMajorAxis,new Cf(Af))},Cf.createGeometry=function(e){return Of.createGeometry(e._ellipseGeometry)};var xf=Object.freeze({UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2}),Tf=Object.freeze({TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2}),Sf="undefined"!==typeof performance&&"function"===typeof performance.now&&isFinite(performance.now())?function(){return performance.now()}:function(){return Date.now()};function Df(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).currentTime,n=e.startTime,i=e.stopTime;if(t=Object(o.a)(t)?hr.clone(t):Object(o.a)(n)?hr.clone(n):Object(o.a)(i)?hr.addDays(i,-1,new hr):hr.now(),n=Object(o.a)(n)?hr.clone(n):hr.clone(t),i=Object(o.a)(i)?hr.clone(i):hr.addDays(n,1,new hr),hr.greaterThan(n,i))throw new a.a("startTime must come before stopTime.");this.startTime=n,this.stopTime=i,this.clockRange=Object(r.a)(e.clockRange,xf.UNBOUNDED),this.canAnimate=Object(r.a)(e.canAnimate,!0),this.onTick=new wn.a,this.onStop=new wn.a,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=Sf(),this.currentTime=t,this.multiplier=Object(r.a)(e.multiplier,1),this.shouldAnimate=Object(r.a)(e.shouldAnimate,!1),this.clockStep=Object(r.a)(e.clockStep,Tf.SYSTEM_CLOCK_MULTIPLIER)}Object.defineProperties(Df.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){hr.equals(this._currentTime,e)||(this._clockStep===Tf.SYSTEM_CLOCK&&(this._clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===Tf.SYSTEM_CLOCK&&(this._clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===Tf.SYSTEM_CLOCK&&(this._multiplier=1,this._shouldAnimate=!0,this._currentTime=hr.now()),this._clockStep=e}},shouldAnimate:{get:function(){return this._shouldAnimate},set:function(e){this._shouldAnimate!==e&&(this._clockStep===Tf.SYSTEM_CLOCK&&(this._clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}}),Df.prototype.tick=function(){var e=Sf(),t=hr.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){var n=this._clockStep;if(n===Tf.SYSTEM_CLOCK)t=hr.now(t);else{var i=this._multiplier;if(n===Tf.TICK_DEPENDENT)t=hr.addSeconds(t,i,t);else{var r=e-this._lastSystemTime;t=hr.addSeconds(t,i*(r/1e3),t)}var o=this.clockRange,a=this.startTime,s=this.stopTime;if(o===xf.CLAMPED)hr.lessThan(t,a)?t=hr.clone(a,t):hr.greaterThan(t,s)&&(t=hr.clone(s,t),this.onStop.raiseEvent(this));else if(o===xf.LOOP_STOP)for(hr.lessThan(t,a)&&(t=hr.clone(a,t));hr.greaterThan(t,s);)t=hr.addSeconds(a,hr.secondsDifference(t,s),t),this.onStop.raiseEvent(this)}}return this._currentTime=t,this._lastSystemTime=e,this.onTick.raiseEvent(this),t};var Pf,If,Mf,Rf=Df,Lf=n(31);function jf(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),6*n<1?e+6*(t-e)*n:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function Ff(e,t,n,i){this.red=Object(r.a)(e,1),this.green=Object(r.a)(t,1),this.blue=Object(r.a)(n,1),this.alpha=Object(r.a)(i,1)}Ff.fromCartesian4=function(e,t){return i.a.typeOf.object("cartesian",e),Object(o.a)(t)?(t.red=e.x,t.green=e.y,t.blue=e.z,t.alpha=e.w,t):new Ff(e.x,e.y,e.z,e.w)},Ff.fromBytes=function(e,t,n,i,a){return e=Ff.byteToFloat(Object(r.a)(e,255)),t=Ff.byteToFloat(Object(r.a)(t,255)),n=Ff.byteToFloat(Object(r.a)(n,255)),i=Ff.byteToFloat(Object(r.a)(i,255)),Object(o.a)(a)?(a.red=e,a.green=t,a.blue=n,a.alpha=i,a):new Ff(e,t,n,i)},Ff.fromAlpha=function(e,t,n){return i.a.typeOf.object("color",e),i.a.typeOf.number("alpha",t),Object(o.a)(n)?(n.red=e.red,n.green=e.green,n.blue=e.blue,n.alpha=t,n):new Ff(e.red,e.green,e.blue,t)},oo.supportsTypedArrays()&&(Pf=new ArrayBuffer(4),If=new Uint32Array(Pf),Mf=new Uint8Array(Pf)),Ff.fromRgba=function(e,t){return If[0]=e,Ff.fromBytes(Mf[0],Mf[1],Mf[2],Mf[3],t)},Ff.fromHsl=function(e,t,n,i,a){e=Object(r.a)(e,0)%1,t=Object(r.a)(t,0),n=Object(r.a)(n,0),i=Object(r.a)(i,1);var s=n,c=n,l=n;if(0!==t){var u,h=2*n-(u=n<.5?n*(1+t):n+t-n*t);s=jf(h,u,e+1/3),c=jf(h,u,e),l=jf(h,u,e-1/3)}return Object(o.a)(a)?(a.red=s,a.green=c,a.blue=l,a.alpha=i,a):new Ff(s,c,l,i)},Ff.fromRandom=function(e,t){var n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).red;if(!Object(o.a)(n)){var a=Object(r.a)(e.minimumRed,0),s=Object(r.a)(e.maximumRed,1);i.a.typeOf.number.lessThanOrEquals("minimumRed",a,s),n=a+d.nextRandomNumber()*(s-a)}var c=e.green;if(!Object(o.a)(c)){var l=Object(r.a)(e.minimumGreen,0),u=Object(r.a)(e.maximumGreen,1);i.a.typeOf.number.lessThanOrEquals("minimumGreen",l,u),c=l+d.nextRandomNumber()*(u-l)}var h=e.blue;if(!Object(o.a)(h)){var f=Object(r.a)(e.minimumBlue,0),p=Object(r.a)(e.maximumBlue,1);i.a.typeOf.number.lessThanOrEquals("minimumBlue",f,p),h=f+d.nextRandomNumber()*(p-f)}var m=e.alpha;if(!Object(o.a)(m)){var g=Object(r.a)(e.minimumAlpha,0),v=Object(r.a)(e.maximumAlpha,1);i.a.typeOf.number.lessThanOrEquals("minumumAlpha",g,v),m=g+d.nextRandomNumber()*(v-g)}return Object(o.a)(t)?(t.red=n,t.green=c,t.blue=h,t.alpha=m,t):new Ff(n,c,h,m)};var Nf=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,zf=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,kf=/^rgba?\(\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)(?:\s*,\s*([0-9.]+))?\s*\)$/i,Bf=/^hsla?\(\s*([0-9.]+)\s*,\s*([0-9.]+%)\s*,\s*([0-9.]+%)(?:\s*,\s*([0-9.]+))?\s*\)$/i;Ff.fromCssColorString=function(e,t){i.a.typeOf.string("color",e),Object(o.a)(t)||(t=new Ff);var n=Ff[e.toUpperCase()];if(Object(o.a)(n))return Ff.clone(n,t),t;var a=Nf.exec(e);return null!==a?(t.red=parseInt(a[1],16)/15,t.green=parseInt(a[2],16)/15,t.blue=parseInt(a[3],16)/15,t.alpha=parseInt(Object(r.a)(a[4],"f"),16)/15,t):null!==(a=zf.exec(e))?(t.red=parseInt(a[1],16)/255,t.green=parseInt(a[2],16)/255,t.blue=parseInt(a[3],16)/255,t.alpha=parseInt(Object(r.a)(a[4],"ff"),16)/255,t):null!==(a=kf.exec(e))?(t.red=parseFloat(a[1])/("%"===a[1].substr(-1)?100:255),t.green=parseFloat(a[2])/("%"===a[2].substr(-1)?100:255),t.blue=parseFloat(a[3])/("%"===a[3].substr(-1)?100:255),t.alpha=parseFloat(Object(r.a)(a[4],"1.0")),t):null!==(a=Bf.exec(e))?Ff.fromHsl(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,parseFloat(Object(r.a)(a[4],"1.0")),t):t=void 0},Ff.packedLength=4,Ff.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.red,t[n++]=e.green,t[n++]=e.blue,t[n]=e.alpha,t},Ff.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Ff),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n},Ff.byteToFloat=function(e){return e/255},Ff.floatToByte=function(e){return 1===e?255:256*e|0},Ff.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.red=e.red,t.green=e.green,t.blue=e.blue,t.alpha=e.alpha,t):new Ff(e.red,e.green,e.blue,e.alpha)},Ff.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.red===t.red&&e.green===t.green&&e.blue===t.blue&&e.alpha===t.alpha},Ff.equalsArray=function(e,t,n){return e.red===t[n]&&e.green===t[n+1]&&e.blue===t[n+2]&&e.alpha===t[n+3]},Ff.prototype.clone=function(e){return Ff.clone(this,e)},Ff.prototype.equals=function(e){return Ff.equals(this,e)},Ff.prototype.equalsEpsilon=function(e,t){return this===e||Object(o.a)(e)&&Math.abs(this.red-e.red)<=t&&Math.abs(this.green-e.green)<=t&&Math.abs(this.blue-e.blue)<=t&&Math.abs(this.alpha-e.alpha)<=t},Ff.prototype.toString=function(){return"("+this.red+", "+this.green+", "+this.blue+", "+this.alpha+")"},Ff.prototype.toCssColorString=function(){var e=Ff.floatToByte(this.red),t=Ff.floatToByte(this.green),n=Ff.floatToByte(this.blue);return 1===this.alpha?"rgb("+e+","+t+","+n+")":"rgba("+e+","+t+","+n+","+this.alpha+")"},Ff.prototype.toCssHexString=function(){var e=Ff.floatToByte(this.red).toString(16);e.length<2&&(e="0"+e);var t=Ff.floatToByte(this.green).toString(16);t.length<2&&(t="0"+t);var n=Ff.floatToByte(this.blue).toString(16);if(n.length<2&&(n="0"+n),this.alpha<1){var i=Ff.floatToByte(this.alpha).toString(16);return i.length<2&&(i="0"+i),"#"+e+t+n+i}return"#"+e+t+n},Ff.prototype.toBytes=function(e){var t=Ff.floatToByte(this.red),n=Ff.floatToByte(this.green),i=Ff.floatToByte(this.blue),r=Ff.floatToByte(this.alpha);return Object(o.a)(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=r,e):[t,n,i,r]},Ff.prototype.toRgba=function(){return Mf[0]=Ff.floatToByte(this.red),Mf[1]=Ff.floatToByte(this.green),Mf[2]=Ff.floatToByte(this.blue),Mf[3]=Ff.floatToByte(this.alpha),If[0]},Ff.prototype.brighten=function(e,t){return i.a.typeOf.number("magnitude",e),i.a.typeOf.number.greaterThanOrEquals("magnitude",e,0),i.a.typeOf.object("result",t),e=1-e,t.red=1-(1-this.red)*e,t.green=1-(1-this.green)*e,t.blue=1-(1-this.blue)*e,t.alpha=this.alpha,t},Ff.prototype.darken=function(e,t){return i.a.typeOf.number("magnitude",e),i.a.typeOf.number.greaterThanOrEquals("magnitude",e,0),i.a.typeOf.object("result",t),e=1-e,t.red=this.red*e,t.green=this.green*e,t.blue=this.blue*e,t.alpha=this.alpha,t},Ff.prototype.withAlpha=function(e,t){return Ff.fromAlpha(this,e,t)},Ff.add=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.red=e.red+t.red,n.green=e.green+t.green,n.blue=e.blue+t.blue,n.alpha=e.alpha+t.alpha,n},Ff.subtract=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.red=e.red-t.red,n.green=e.green-t.green,n.blue=e.blue-t.blue,n.alpha=e.alpha-t.alpha,n},Ff.multiply=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.red=e.red*t.red,n.green=e.green*t.green,n.blue=e.blue*t.blue,n.alpha=e.alpha*t.alpha,n},Ff.divide=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.red=e.red/t.red,n.green=e.green/t.green,n.blue=e.blue/t.blue,n.alpha=e.alpha/t.alpha,n},Ff.mod=function(e,t,n){return i.a.typeOf.object("left",e),i.a.typeOf.object("right",t),i.a.typeOf.object("result",n),n.red=e.red%t.red,n.green=e.green%t.green,n.blue=e.blue%t.blue,n.alpha=e.alpha%t.alpha,n},Ff.lerp=function(e,t,n,r){return i.a.typeOf.object("start",e),i.a.typeOf.object("end",t),i.a.typeOf.number("t",n),i.a.typeOf.object("result",r),r.red=d.lerp(e.red,t.red,n),r.green=d.lerp(e.green,t.green,n),r.blue=d.lerp(e.blue,t.blue,n),r.alpha=d.lerp(e.alpha,t.alpha,n),r},Ff.multiplyByScalar=function(e,t,n){return i.a.typeOf.object("color",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n.red=e.red*t,n.green=e.green*t,n.blue=e.blue*t,n.alpha=e.alpha*t,n},Ff.divideByScalar=function(e,t,n){return i.a.typeOf.object("color",e),i.a.typeOf.number("scalar",t),i.a.typeOf.object("result",n),n.red=e.red/t,n.green=e.green/t,n.blue=e.blue/t,n.alpha=e.alpha/t,n},Ff.ALICEBLUE=Object.freeze(Ff.fromCssColorString("#F0F8FF")),Ff.ANTIQUEWHITE=Object.freeze(Ff.fromCssColorString("#FAEBD7")),Ff.AQUA=Object.freeze(Ff.fromCssColorString("#00FFFF")),Ff.AQUAMARINE=Object.freeze(Ff.fromCssColorString("#7FFFD4")),Ff.AZURE=Object.freeze(Ff.fromCssColorString("#F0FFFF")),Ff.BEIGE=Object.freeze(Ff.fromCssColorString("#F5F5DC")),Ff.BISQUE=Object.freeze(Ff.fromCssColorString("#FFE4C4")),Ff.BLACK=Object.freeze(Ff.fromCssColorString("#000000")),Ff.BLANCHEDALMOND=Object.freeze(Ff.fromCssColorString("#FFEBCD")),Ff.BLUE=Object.freeze(Ff.fromCssColorString("#0000FF")),Ff.BLUEVIOLET=Object.freeze(Ff.fromCssColorString("#8A2BE2")),Ff.BROWN=Object.freeze(Ff.fromCssColorString("#A52A2A")),Ff.BURLYWOOD=Object.freeze(Ff.fromCssColorString("#DEB887")),Ff.CADETBLUE=Object.freeze(Ff.fromCssColorString("#5F9EA0")),Ff.CHARTREUSE=Object.freeze(Ff.fromCssColorString("#7FFF00")),Ff.CHOCOLATE=Object.freeze(Ff.fromCssColorString("#D2691E")),Ff.CORAL=Object.freeze(Ff.fromCssColorString("#FF7F50")),Ff.CORNFLOWERBLUE=Object.freeze(Ff.fromCssColorString("#6495ED")),Ff.CORNSILK=Object.freeze(Ff.fromCssColorString("#FFF8DC")),Ff.CRIMSON=Object.freeze(Ff.fromCssColorString("#DC143C")),Ff.CYAN=Object.freeze(Ff.fromCssColorString("#00FFFF")),Ff.DARKBLUE=Object.freeze(Ff.fromCssColorString("#00008B")),Ff.DARKCYAN=Object.freeze(Ff.fromCssColorString("#008B8B")),Ff.DARKGOLDENROD=Object.freeze(Ff.fromCssColorString("#B8860B")),Ff.DARKGRAY=Object.freeze(Ff.fromCssColorString("#A9A9A9")),Ff.DARKGREEN=Object.freeze(Ff.fromCssColorString("#006400")),Ff.DARKGREY=Ff.DARKGRAY,Ff.DARKKHAKI=Object.freeze(Ff.fromCssColorString("#BDB76B")),Ff.DARKMAGENTA=Object.freeze(Ff.fromCssColorString("#8B008B")),Ff.DARKOLIVEGREEN=Object.freeze(Ff.fromCssColorString("#556B2F")),Ff.DARKORANGE=Object.freeze(Ff.fromCssColorString("#FF8C00")),Ff.DARKORCHID=Object.freeze(Ff.fromCssColorString("#9932CC")),Ff.DARKRED=Object.freeze(Ff.fromCssColorString("#8B0000")),Ff.DARKSALMON=Object.freeze(Ff.fromCssColorString("#E9967A")),Ff.DARKSEAGREEN=Object.freeze(Ff.fromCssColorString("#8FBC8F")),Ff.DARKSLATEBLUE=Object.freeze(Ff.fromCssColorString("#483D8B")),Ff.DARKSLATEGRAY=Object.freeze(Ff.fromCssColorString("#2F4F4F")),Ff.DARKSLATEGREY=Ff.DARKSLATEGRAY,Ff.DARKTURQUOISE=Object.freeze(Ff.fromCssColorString("#00CED1")),Ff.DARKVIOLET=Object.freeze(Ff.fromCssColorString("#9400D3")),Ff.DEEPPINK=Object.freeze(Ff.fromCssColorString("#FF1493")),Ff.DEEPSKYBLUE=Object.freeze(Ff.fromCssColorString("#00BFFF")),Ff.DIMGRAY=Object.freeze(Ff.fromCssColorString("#696969")),Ff.DIMGREY=Ff.DIMGRAY,Ff.DODGERBLUE=Object.freeze(Ff.fromCssColorString("#1E90FF")),Ff.FIREBRICK=Object.freeze(Ff.fromCssColorString("#B22222")),Ff.FLORALWHITE=Object.freeze(Ff.fromCssColorString("#FFFAF0")),Ff.FORESTGREEN=Object.freeze(Ff.fromCssColorString("#228B22")),Ff.FUCHSIA=Object.freeze(Ff.fromCssColorString("#FF00FF")),Ff.GAINSBORO=Object.freeze(Ff.fromCssColorString("#DCDCDC")),Ff.GHOSTWHITE=Object.freeze(Ff.fromCssColorString("#F8F8FF")),Ff.GOLD=Object.freeze(Ff.fromCssColorString("#FFD700")),Ff.GOLDENROD=Object.freeze(Ff.fromCssColorString("#DAA520")),Ff.GRAY=Object.freeze(Ff.fromCssColorString("#808080")),Ff.GREEN=Object.freeze(Ff.fromCssColorString("#008000")),Ff.GREENYELLOW=Object.freeze(Ff.fromCssColorString("#ADFF2F")),Ff.GREY=Ff.GRAY,Ff.HONEYDEW=Object.freeze(Ff.fromCssColorString("#F0FFF0")),Ff.HOTPINK=Object.freeze(Ff.fromCssColorString("#FF69B4")),Ff.INDIANRED=Object.freeze(Ff.fromCssColorString("#CD5C5C")),Ff.INDIGO=Object.freeze(Ff.fromCssColorString("#4B0082")),Ff.IVORY=Object.freeze(Ff.fromCssColorString("#FFFFF0")),Ff.KHAKI=Object.freeze(Ff.fromCssColorString("#F0E68C")),Ff.LAVENDER=Object.freeze(Ff.fromCssColorString("#E6E6FA")),Ff.LAVENDAR_BLUSH=Object.freeze(Ff.fromCssColorString("#FFF0F5")),Ff.LAWNGREEN=Object.freeze(Ff.fromCssColorString("#7CFC00")),Ff.LEMONCHIFFON=Object.freeze(Ff.fromCssColorString("#FFFACD")),Ff.LIGHTBLUE=Object.freeze(Ff.fromCssColorString("#ADD8E6")),Ff.LIGHTCORAL=Object.freeze(Ff.fromCssColorString("#F08080")),Ff.LIGHTCYAN=Object.freeze(Ff.fromCssColorString("#E0FFFF")),Ff.LIGHTGOLDENRODYELLOW=Object.freeze(Ff.fromCssColorString("#FAFAD2")),Ff.LIGHTGRAY=Object.freeze(Ff.fromCssColorString("#D3D3D3")),Ff.LIGHTGREEN=Object.freeze(Ff.fromCssColorString("#90EE90")),Ff.LIGHTGREY=Ff.LIGHTGRAY,Ff.LIGHTPINK=Object.freeze(Ff.fromCssColorString("#FFB6C1")),Ff.LIGHTSEAGREEN=Object.freeze(Ff.fromCssColorString("#20B2AA")),Ff.LIGHTSKYBLUE=Object.freeze(Ff.fromCssColorString("#87CEFA")),Ff.LIGHTSLATEGRAY=Object.freeze(Ff.fromCssColorString("#778899")),Ff.LIGHTSLATEGREY=Ff.LIGHTSLATEGRAY,Ff.LIGHTSTEELBLUE=Object.freeze(Ff.fromCssColorString("#B0C4DE")),Ff.LIGHTYELLOW=Object.freeze(Ff.fromCssColorString("#FFFFE0")),Ff.LIME=Object.freeze(Ff.fromCssColorString("#00FF00")),Ff.LIMEGREEN=Object.freeze(Ff.fromCssColorString("#32CD32")),Ff.LINEN=Object.freeze(Ff.fromCssColorString("#FAF0E6")),Ff.MAGENTA=Object.freeze(Ff.fromCssColorString("#FF00FF")),Ff.MAROON=Object.freeze(Ff.fromCssColorString("#800000")),Ff.MEDIUMAQUAMARINE=Object.freeze(Ff.fromCssColorString("#66CDAA")),Ff.MEDIUMBLUE=Object.freeze(Ff.fromCssColorString("#0000CD")),Ff.MEDIUMORCHID=Object.freeze(Ff.fromCssColorString("#BA55D3")),Ff.MEDIUMPURPLE=Object.freeze(Ff.fromCssColorString("#9370DB")),Ff.MEDIUMSEAGREEN=Object.freeze(Ff.fromCssColorString("#3CB371")),Ff.MEDIUMSLATEBLUE=Object.freeze(Ff.fromCssColorString("#7B68EE")),Ff.MEDIUMSPRINGGREEN=Object.freeze(Ff.fromCssColorString("#00FA9A")),Ff.MEDIUMTURQUOISE=Object.freeze(Ff.fromCssColorString("#48D1CC")),Ff.MEDIUMVIOLETRED=Object.freeze(Ff.fromCssColorString("#C71585")),Ff.MIDNIGHTBLUE=Object.freeze(Ff.fromCssColorString("#191970")),Ff.MINTCREAM=Object.freeze(Ff.fromCssColorString("#F5FFFA")),Ff.MISTYROSE=Object.freeze(Ff.fromCssColorString("#FFE4E1")),Ff.MOCCASIN=Object.freeze(Ff.fromCssColorString("#FFE4B5")),Ff.NAVAJOWHITE=Object.freeze(Ff.fromCssColorString("#FFDEAD")),Ff.NAVY=Object.freeze(Ff.fromCssColorString("#000080")),Ff.OLDLACE=Object.freeze(Ff.fromCssColorString("#FDF5E6")),Ff.OLIVE=Object.freeze(Ff.fromCssColorString("#808000")),Ff.OLIVEDRAB=Object.freeze(Ff.fromCssColorString("#6B8E23")),Ff.ORANGE=Object.freeze(Ff.fromCssColorString("#FFA500")),Ff.ORANGERED=Object.freeze(Ff.fromCssColorString("#FF4500")),Ff.ORCHID=Object.freeze(Ff.fromCssColorString("#DA70D6")),Ff.PALEGOLDENROD=Object.freeze(Ff.fromCssColorString("#EEE8AA")),Ff.PALEGREEN=Object.freeze(Ff.fromCssColorString("#98FB98")),Ff.PALETURQUOISE=Object.freeze(Ff.fromCssColorString("#AFEEEE")),Ff.PALEVIOLETRED=Object.freeze(Ff.fromCssColorString("#DB7093")),Ff.PAPAYAWHIP=Object.freeze(Ff.fromCssColorString("#FFEFD5")),Ff.PEACHPUFF=Object.freeze(Ff.fromCssColorString("#FFDAB9")),Ff.PERU=Object.freeze(Ff.fromCssColorString("#CD853F")),Ff.PINK=Object.freeze(Ff.fromCssColorString("#FFC0CB")),Ff.PLUM=Object.freeze(Ff.fromCssColorString("#DDA0DD")),Ff.POWDERBLUE=Object.freeze(Ff.fromCssColorString("#B0E0E6")),Ff.PURPLE=Object.freeze(Ff.fromCssColorString("#800080")),Ff.RED=Object.freeze(Ff.fromCssColorString("#FF0000")),Ff.ROSYBROWN=Object.freeze(Ff.fromCssColorString("#BC8F8F")),Ff.ROYALBLUE=Object.freeze(Ff.fromCssColorString("#4169E1")),Ff.SADDLEBROWN=Object.freeze(Ff.fromCssColorString("#8B4513")),Ff.SALMON=Object.freeze(Ff.fromCssColorString("#FA8072")),Ff.SANDYBROWN=Object.freeze(Ff.fromCssColorString("#F4A460")),Ff.SEAGREEN=Object.freeze(Ff.fromCssColorString("#2E8B57")),Ff.SEASHELL=Object.freeze(Ff.fromCssColorString("#FFF5EE")),Ff.SIENNA=Object.freeze(Ff.fromCssColorString("#A0522D")),Ff.SILVER=Object.freeze(Ff.fromCssColorString("#C0C0C0")),Ff.SKYBLUE=Object.freeze(Ff.fromCssColorString("#87CEEB")),Ff.SLATEBLUE=Object.freeze(Ff.fromCssColorString("#6A5ACD")),Ff.SLATEGRAY=Object.freeze(Ff.fromCssColorString("#708090")),Ff.SLATEGREY=Ff.SLATEGRAY,Ff.SNOW=Object.freeze(Ff.fromCssColorString("#FFFAFA")),Ff.SPRINGGREEN=Object.freeze(Ff.fromCssColorString("#00FF7F")),Ff.STEELBLUE=Object.freeze(Ff.fromCssColorString("#4682B4")),Ff.TAN=Object.freeze(Ff.fromCssColorString("#D2B48C")),Ff.TEAL=Object.freeze(Ff.fromCssColorString("#008080")),Ff.THISTLE=Object.freeze(Ff.fromCssColorString("#D8BFD8")),Ff.TOMATO=Object.freeze(Ff.fromCssColorString("#FF6347")),Ff.TURQUOISE=Object.freeze(Ff.fromCssColorString("#40E0D0")),Ff.VIOLET=Object.freeze(Ff.fromCssColorString("#EE82EE")),Ff.WHEAT=Object.freeze(Ff.fromCssColorString("#F5DEB3")),Ff.WHITE=Object.freeze(Ff.fromCssColorString("#FFFFFF")),Ff.WHITESMOKE=Object.freeze(Ff.fromCssColorString("#F5F5F5")),Ff.YELLOW=Object.freeze(Ff.fromCssColorString("#FFFF00")),Ff.YELLOWGREEN=Object.freeze(Ff.fromCssColorString("#9ACD32")),Ff.TRANSPARENT=Object.freeze(new Ff(0,0,0,0));var Hf=Ff;function Vf(e,t,n,i){e=Object(r.a)(e,1),t=Object(r.a)(t,1),n=Object(r.a)(n,1),i=Object(r.a)(i,1),this.value=new Uint8Array([Hf.floatToByte(e),Hf.floatToByte(t),Hf.floatToByte(n),Hf.floatToByte(i)])}Object.defineProperties(Vf.prototype,{componentDatatype:{get:function(){return Ds.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}}),Vf.fromColor=function(e){if(!Object(o.a)(e))throw new a.a("color is required.");return new Vf(e.red,e.green,e.blue,e.alpha)},Vf.toValue=function(e,t){if(!Object(o.a)(e))throw new a.a("color is required.");return Object(o.a)(t)?e.toBytes(t):new Uint8Array(e.toBytes())},Vf.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.value[0]===t.value[0]&&e.value[1]===t.value[1]&&e.value[2]===t.value[2]&&e.value[3]===t.value[3]};var Uf=Vf,Wf=n(33);function Gf(e,t,n,i){this._format=e,this._width=t,this._height=n,this._buffer=i}Object.defineProperties(Gf.prototype,{internalFormat:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}}}),Gf.clone=function(e){if(Object(o.a)(e))return new Gf(e._format,e._width,e._height,e._buffer)},Gf.prototype.clone=function(){return Gf.clone(this)};var qf=Gf,Yf={},$f=new O,Xf=new O,Kf=new O,Qf=new O,Zf=new bs;function Jf(e,t,n,i,r){var o=O.subtract(e,t,$f),a=O.dot(n,o),s=O.dot(i,o);return Mt.fromElements(a,s,r)}Yf.validOutline=function(e){i.a.defined("positions",e);var t=bs.fromPoints(e,Zf).halfAxes,n=oe.getColumn(t,0,Xf),r=oe.getColumn(t,1,Kf),o=oe.getColumn(t,2,Qf),a=O.magnitude(n),s=O.magnitude(r),c=O.magnitude(o);return!(0===a&&(0===s||0===c)||0===s&&0===c)},Yf.computeProjectTo2DArguments=function(e,t,n,r){i.a.defined("positions",e),i.a.defined("centerResult",t),i.a.defined("planeAxis1Result",n),i.a.defined("planeAxis2Result",r);var o,a,s=bs.fromPoints(e,Zf),c=s.halfAxes,l=oe.getColumn(c,0,Xf),u=oe.getColumn(c,1,Kf),h=oe.getColumn(c,2,Qf),d=O.magnitude(l),f=O.magnitude(u),p=O.magnitude(h),m=Math.min(d,f,p);return(0!==d||0!==f&&0!==p)&&(0!==f||0!==p)&&(m!==f&&m!==p||(o=l),m===d?o=u:m===p&&(a=u),m!==d&&m!==f||(a=h),O.normalize(o,n),O.normalize(a,r),O.clone(s.center,t),!0)},Yf.createProjectPointsTo2DFunction=function(e,t,n){return function(i){for(var r=new Array(i.length),o=0;o<i.length;o++)r[o]=Jf(i[o],e,t,n);return r}},Yf.createProjectPointTo2DFunction=function(e,t,n){return function(i,r){return Jf(i,e,t,n,r)}};var ep=Yf;function tp(e,t,n){if(0===e)return t*n;var i=e*e,r=i*i,o=r*i,a=o*i,s=a*i,c=s*i,l=n;return t*((1-i/4-3*r/64-5*o/256-175*a/16384-441*s/65536-4851*c/1048576)*l-(3*i/8+3*r/32+45*o/1024+105*a/4096+2205*s/131072+6237*c/524288)*Math.sin(2*l)+(15*r/256+45*o/1024+525*a/16384+1575*s/65536+155925*c/8388608)*Math.sin(4*l)-(35*o/3072+175*a/12288+3675*s/262144+13475*c/1048576)*Math.sin(6*l)+(315*a/131072+2205*s/524288+43659*c/8388608)*Math.sin(8*l)-(693*s/1310720+6237*c/5242880)*Math.sin(10*l)+1001*c/8388608*Math.sin(12*l))}function np(e,t){if(0===e)return Math.log(Math.tan(.5*(d.PI_OVER_TWO+t)));var n=e*Math.sin(t);return Math.log(Math.tan(.5*(d.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}var ip=new O,rp=new O;function op(e,t,n,r){var o=O.normalize(r.cartographicToCartesian(t,rp),ip),a=O.normalize(r.cartographicToCartesian(n,rp),rp);i.a.typeOf.number.greaterThanOrEquals("value",Math.abs(Math.abs(O.angleBetween(o,a))-Math.PI),.0125);var s=r.maximumRadius,c=r.minimumRadius,l=s*s,u=c*c;e._ellipticitySquared=(l-u)/l,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=R.clone(t,e._start),e._start.height=0,e._end=R.clone(n,e._end),e._end.height=0,e._heading=function(e,t,n,i,r){var o=np(e._ellipticity,n),a=np(e._ellipticity,r);return Math.atan2(d.negativePiToPi(i-t),a-o)}(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=function(e,t,n,i,r,o,a){var s=e._heading,c=o-i,l=0;if(d.equalsEpsilon(Math.abs(s),d.PI_OVER_TWO,d.EPSILON8))if(t===n)l=t*Math.cos(r)*d.negativePiToPi(c);else{var u=Math.sin(r);l=t*Math.cos(r)*d.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{var h=tp(e._ellipticity,t,r);l=(tp(e._ellipticity,t,a)-h)/Math.cos(s)}return Math.abs(l)}(e,r.maximumRadius,r.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function ap(e,t,n,i,r,a){var s,c,l,u=r*r;if(Math.abs(d.PI_OVER_TWO-Math.abs(t))>d.EPSILON8){c=function(e,t,n){var i=e/n;if(0===t)return i;var r=i*i,o=r*i,a=o*i,s=t*t,c=s*s,l=c*s,u=l*s,h=u*s,d=h*s,f=Math.sin(2*i),p=Math.cos(2*i),m=Math.sin(4*i),g=Math.cos(4*i),v=Math.sin(6*i),_=Math.cos(6*i),b=Math.sin(8*i),y=Math.cos(8*i),w=Math.sin(10*i);return i+i*s/4+7*i*c/64+15*i*l/256+579*i*u/16384+1515*i*h/65536+16837*i*d/1048576+(3*i*c/16+45*i*l/256-i*(32*r-561)*u/4096-i*(232*r-1677)*h/16384+i*(399985-90560*r+512*a)*d/5242880)*p+(21*i*l/256+483*i*u/4096-i*(224*r-1969)*h/16384-i*(33152*r-112599)*d/1048576)*g+(151*i*u/4096+4681*i*h/65536+1479*i*d/16384-453*o*d/32768)*_+(1097*i*h/65536+42783*i*d/1048576)*y+8011*i*d/1048576*Math.cos(10*i)+(3*s/8+3*c/16+213*l/2048-3*r*l/64+255*u/4096-33*r*u/512+20861*h/524288-33*r*h/512+a*h/1024+28273*d/1048576-471*r*d/8192+9*a*d/4096)*f+(21*c/256+21*l/256+533*u/8192-21*r*u/512+197*h/4096-315*r*h/4096+584039*d/16777216-12517*r*d/131072+7*a*d/2048)*m+(151*l/6144+151*u/4096+5019*h/131072-453*r*h/16384+26965*d/786432-8607*r*d/131072)*v+(1097*u/131072+1097*h/65536+225797*d/10485760-1097*r*d/65536)*b+(8011*h/2621440+8011*d/1048576)*w+293393*d/251658240*Math.sin(12*i)}(tp(r,i,e.latitude)+n*Math.cos(t),r,i);var h=np(r,e.latitude),f=np(r,c);l=Math.tan(t)*(f-h),s=d.negativePiToPi(e.longitude+l)}else{var p;if(c=e.latitude,0===r)p=i*Math.cos(e.latitude);else{var m=Math.sin(e.latitude);p=i*Math.cos(e.latitude)/Math.sqrt(1-u*m*m)}l=n/p,s=t>0?d.negativePiToPi(e.longitude+l):d.negativePiToPi(e.longitude-l)}return Object(o.a)(a)?(a.longitude=s,a.latitude=c,a.height=0,a):new R(s,c,0)}function sp(e,t,n){var i=Object(r.a)(n,W.WGS84);this._ellipsoid=i,this._start=new R,this._end=new R,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,Object(o.a)(e)&&Object(o.a)(t)&&op(this,e,t,i)}Object.defineProperties(sp.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return i.a.defined("distance",this._distance),this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return i.a.defined("distance",this._distance),this._heading}}}),sp.fromStartHeadingDistance=function(e,t,n,a,s){i.a.defined("start",e),i.a.defined("heading",t),i.a.defined("distance",n),i.a.typeOf.number.greaterThan("distance",n,0);var c=Object(r.a)(a,W.WGS84),l=c.maximumRadius,u=c.minimumRadius,h=l*l,f=u*u,p=Math.sqrt((h-f)/h),m=ap(e,t=d.negativePiToPi(t),n,c.maximumRadius,p);return!Object(o.a)(s)||Object(o.a)(a)&&!a.equals(s.ellipsoid)?new sp(e,m,c):(s.setEndPoints(e,m),s)},sp.prototype.setEndPoints=function(e,t){i.a.defined("start",e),i.a.defined("end",t),op(this,e,t,this._ellipsoid)},sp.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)},sp.prototype.interpolateUsingSurfaceDistance=function(e,t){if(i.a.typeOf.number("distance",e),!Object(o.a)(this._distance)||0===this._distance)throw new a.a("EllipsoidRhumbLine must have distinct start and end set.");return ap(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)},sp.prototype.findIntersectionWithLongitude=function(e,t){if(i.a.typeOf.number("intersectionLongitude",e),!Object(o.a)(this._distance)||0===this._distance)throw new a.a("EllipsoidRhumbLine must have distinct start and end set.");var n=this._ellipticity,r=this._heading,s=Math.abs(r),c=this._start;if(e=d.negativePiToPi(e),d.equalsEpsilon(Math.abs(e),Math.PI,d.EPSILON14)&&(e=d.sign(c.longitude)*Math.PI),Object(o.a)(t)||(t=new R),Math.abs(d.PI_OVER_TWO-s)<=d.EPSILON8)return t.longitude=e,t.latitude=c.latitude,t.height=0,t;if(d.equalsEpsilon(Math.abs(d.PI_OVER_TWO-s),d.PI_OVER_TWO,d.EPSILON8)){if(d.equalsEpsilon(e,c.longitude,d.EPSILON12))return;return t.longitude=e,t.latitude=d.PI_OVER_TWO*d.sign(d.PI_OVER_TWO-r),t.height=0,t}var l,u=c.latitude,h=n*Math.sin(u),f=Math.tan(.5*(d.PI_OVER_TWO+u))*Math.exp((e-c.longitude)/Math.tan(r)),p=(1+h)/(1-h),m=c.latitude;do{l=m;var g=n*Math.sin(l),v=(1+g)/(1-g);m=2*Math.atan(f*Math.pow(v/p,n/2))-d.PI_OVER_TWO}while(!d.equalsEpsilon(m,l,d.EPSILON12));return t.longitude=e,t.latitude=m,t.height=0,t},sp.prototype.findIntersectionWithLatitude=function(e,t){if(i.a.typeOf.number("intersectionLatitude",e),!Object(o.a)(this._distance)||0===this._distance)throw new a.a("EllipsoidRhumbLine must have distinct start and end set.");var n=this._ellipticity,r=this._heading,s=this._start;if(!d.equalsEpsilon(Math.abs(r),d.PI_OVER_TWO,d.EPSILON8)){var c=np(n,s.latitude),l=np(n,e),u=Math.tan(r)*(l-c),h=d.negativePiToPi(s.longitude+u);return Object(o.a)(t)?(t.longitude=h,t.latitude=e,t.height=0,t):new R(h,e,0)}};var cp=sp;function lp(e,t,n){n=n||2;var i,r,o,a,s,c,l,u=t&&t.length,h=u?t[0]*n:e.length,d=up(e,0,h,n,!0),f=[];if(!d||d.next===d.prev)return f;if(u&&(d=function(e,t,n,i){var r,o,a,s,c,l=[];for(r=0,o=t.length;r<o;r++)a=t[r]*i,s=r<o-1?t[r+1]*i:e.length,(c=up(e,a,s,i,!1))===c.next&&(c.steiner=!0),l.push(wp(c));for(l.sort(vp),r=0;r<l.length;r++)_p(l[r],n),n=hp(n,n.next);return n}(e,t,d,n)),e.length>80*n){i=o=e[0],r=a=e[1];for(var p=n;p<h;p+=n)(s=e[p])<i&&(i=s),(c=e[p+1])<r&&(r=c),s>o&&(o=s),c>a&&(a=c);l=0!==(l=Math.max(o-i,a-r))?1/l:0}return dp(d,f,n,i,r,l),f}function up(e,t,n,i,r){var o,a;if(r===Lp(e,t,n,i)>0)for(o=t;o<n;o+=i)a=Ip(o,e[o],e[o+1],a);else for(o=n-i;o>=t;o-=i)a=Ip(o,e[o],e[o+1],a);return a&&Ap(a,a.next)&&(Mp(a),a=a.next),a}function hp(e,t){if(!e)return e;t||(t=e);var n,i=e;do{if(n=!1,i.steiner||!Ap(i,i.next)&&0!==Ep(i.prev,i,i.next))i=i.next;else{if(Mp(i),(i=t=i.prev)===i.next)break;n=!0}}while(n||i!==t);return t}function dp(e,t,n,i,r,o,a){if(e){!a&&o&&function(e,t,n,i){var r=e;do{null===r.z&&(r.z=yp(r.x,r.y,t,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){var t,n,i,r,o,a,s,c,l=1;do{for(n=e,e=null,o=null,a=0;n;){for(a++,i=n,s=0,t=0;t<l&&(s++,i=i.nextZ);t++);for(c=l;s>0||c>0&&i;)0!==s&&(0===c||!i||n.z<=i.z)?(r=n,n=n.nextZ,s--):(r=i,i=i.nextZ,c--),o?o.nextZ=r:e=r,r.prevZ=o,o=r;n=i}o.nextZ=null,l*=2}while(a>1)}(r)}(e,i,r,o);for(var s,c,l=e;e.prev!==e.next;)if(s=e.prev,c=e.next,o?pp(e,i,r,o):fp(e))t.push(s.i/n),t.push(e.i/n),t.push(c.i/n),Mp(e),e=c.next,l=c.next;else if((e=c)===l){a?1===a?dp(e=mp(hp(e),t,n),t,n,i,r,o,2):2===a&&gp(e,t,n,i,r,o):dp(hp(e),t,n,i,r,o,1);break}}}function fp(e){var t=e.prev,n=e,i=e.next;if(Ep(t,n,i)>=0)return!1;for(var r=e.next.next;r!==e.prev;){if(Op(t.x,t.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Ep(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function pp(e,t,n,i){var r=e.prev,o=e,a=e.next;if(Ep(r,o,a)>=0)return!1;for(var s=r.x<o.x?r.x<a.x?r.x:a.x:o.x<a.x?o.x:a.x,c=r.y<o.y?r.y<a.y?r.y:a.y:o.y<a.y?o.y:a.y,l=r.x>o.x?r.x>a.x?r.x:a.x:o.x>a.x?o.x:a.x,u=r.y>o.y?r.y>a.y?r.y:a.y:o.y>a.y?o.y:a.y,h=yp(s,c,t,n,i),d=yp(l,u,t,n,i),f=e.prevZ,p=e.nextZ;f&&f.z>=h&&p&&p.z<=d;){if(f!==e.prev&&f!==e.next&&Op(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&Ep(f.prev,f,f.next)>=0)return!1;if(f=f.prevZ,p!==e.prev&&p!==e.next&&Op(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Ep(p.prev,p,p.next)>=0)return!1;p=p.nextZ}for(;f&&f.z>=h;){if(f!==e.prev&&f!==e.next&&Op(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&Ep(f.prev,f,f.next)>=0)return!1;f=f.prevZ}for(;p&&p.z<=d;){if(p!==e.prev&&p!==e.next&&Op(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Ep(p.prev,p,p.next)>=0)return!1;p=p.nextZ}return!0}function mp(e,t,n){var i=e;do{var r=i.prev,o=i.next.next;!Ap(r,o)&&xp(r,i,i.next,o)&&Dp(r,o)&&Dp(o,r)&&(t.push(r.i/n),t.push(i.i/n),t.push(o.i/n),Mp(i),Mp(i.next),i=e=o),i=i.next}while(i!==e);return hp(i)}function gp(e,t,n,i,r,o){var a=e;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&Cp(a,s)){var c=Pp(a,s);return a=hp(a,a.next),c=hp(c,c.next),dp(a,t,n,i,r,o),void dp(c,t,n,i,r,o)}s=s.next}a=a.next}while(a!==e)}function vp(e,t){return e.x-t.x}function _p(e,t){if(t=function(e,t){var n,i=t,r=e.x,o=e.y,a=-1/0;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){var s=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(s<=r&&s>a){if(a=s,s===r){if(o===i.y)return i;if(o===i.next.y)return i.next}n=i.x<i.next.x?i:i.next}}i=i.next}while(i!==t);if(!n)return null;if(r===a)return n;var c,l=n,u=n.x,h=n.y,d=1/0;i=n;do{r>=i.x&&i.x>=u&&r!==i.x&&Op(o<h?r:a,o,u,h,o<h?a:r,o,i.x,i.y)&&(c=Math.abs(o-i.y)/(r-i.x),Dp(i,e)&&(c<d||c===d&&(i.x>n.x||i.x===n.x&&bp(n,i)))&&(n=i,d=c)),i=i.next}while(i!==l);return n}(e,t)){var n=Pp(t,e);hp(n,n.next)}}function bp(e,t){return Ep(e.prev,e,t.prev)<0&&Ep(t.next,e,e.next)<0}function yp(e,t,n,i,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*r)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)*r)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function wp(e){var t=e,n=e;do{(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next}while(t!==e);return n}function Op(e,t,n,i,r,o,a,s){return(r-a)*(t-s)-(e-a)*(o-s)>=0&&(e-a)*(i-s)-(n-a)*(t-s)>=0&&(n-a)*(o-s)-(r-a)*(i-s)>=0}function Cp(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&xp(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&(Dp(e,t)&&Dp(t,e)&&function(e,t){var n=e,i=!1,r=(e.x+t.x)/2,o=(e.y+t.y)/2;do{n.y>o!==n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==e);return i}(e,t)&&(Ep(e.prev,e,t.prev)||Ep(e,t.prev,t))||Ap(e,t)&&Ep(e.prev,e,e.next)>0&&Ep(t.prev,t,t.next)>0)}function Ep(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Ap(e,t){return e.x===t.x&&e.y===t.y}function xp(e,t,n,i){var r=Sp(Ep(e,t,n)),o=Sp(Ep(e,t,i)),a=Sp(Ep(n,i,e)),s=Sp(Ep(n,i,t));return r!==o&&a!==s||(!(0!==r||!Tp(e,n,t))||(!(0!==o||!Tp(e,i,t))||(!(0!==a||!Tp(n,e,i))||!(0!==s||!Tp(n,t,i)))))}function Tp(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Sp(e){return e>0?1:e<0?-1:0}function Dp(e,t){return Ep(e.prev,e,e.next)<0?Ep(e,t,e.next)>=0&&Ep(e,e.prev,t)>=0:Ep(e,t,e.prev)<0||Ep(e,e.next,t)<0}function Pp(e,t){var n=new Rp(e.i,e.x,e.y),i=new Rp(t.i,t.x,t.y),r=e.next,o=t.prev;return e.next=t,t.prev=e,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function Ip(e,t,n,i){var r=new Rp(e,t,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Mp(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Rp(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Lp(e,t,n,i){for(var r=0,o=t,a=n-i;o<n;o+=i)r+=(e[a]-e[o])*(e[o+1]+e[a+1]),a=o;return r}lp.deviation=function(e,t,n,i){var r=t&&t.length,o=r?t[0]*n:e.length,a=Math.abs(Lp(e,0,o,n));if(r)for(var s=0,c=t.length;s<c;s++){var l=t[s]*n,u=s<c-1?t[s+1]*n:e.length;a-=Math.abs(Lp(e,l,u,n))}var h=0;for(s=0;s<i.length;s+=3){var d=i[s]*n,f=i[s+1]*n,p=i[s+2]*n;h+=Math.abs((e[d]-e[p])*(e[f+1]-e[d+1])-(e[d]-e[f])*(e[p+1]-e[d+1]))}return 0===a&&0===h?0:Math.abs((h-a)/a)},lp.flatten=function(e){for(var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},i=0,r=0;r<e.length;r++){for(var o=0;o<e[r].length;o++)for(var a=0;a<t;a++)n.vertices.push(e[r][o][a]);r>0&&(i+=e[r-1].length,n.holes.push(i))}return n};var jp=lp,Fp={CLOCKWISE:Ts.CW,COUNTER_CLOCKWISE:Ts.CCW,validate:function(e){return e===Fp.CLOCKWISE||e===Fp.COUNTER_CLOCKWISE}},Np=Object.freeze(Fp),zp=new O,kp=new O,Bp={computeArea2D:function(e){i.a.defined("positions",e),i.a.typeOf.number.greaterThanOrEquals("positions.length",e.length,3);for(var t=e.length,n=0,r=t-1,o=0;o<t;r=o++){var a=e[r],s=e[o];n+=a.x*s.y-s.x*a.y}return.5*n},computeWindingOrder2D:function(e){return Bp.computeArea2D(e)>0?Np.COUNTER_CLOCKWISE:Np.CLOCKWISE},triangulate:function(e,t){i.a.defined("positions",e);var n=Mt.packArray(e);return jp(n,t,2)}},Hp=new O,Vp=new O,Up=new O,Wp=new O,Gp=new O,qp=new O,Yp=new O;Bp.computeSubdivision=function(e,t,n,a){a=Object(r.a)(a,d.RADIANS_PER_DEGREE),i.a.typeOf.object("ellipsoid",e),i.a.defined("positions",t),i.a.defined("indices",n),i.a.typeOf.number.greaterThanOrEquals("indices.length",n.length,3),i.a.typeOf.number.equals("indices.length % 3","0",n.length%3,0),i.a.typeOf.number.greaterThan("granularity",a,0);var s,c=n.slice(0),l=t.length,u=new Array(3*l),h=0;for(s=0;s<l;s++){var f=t[s];u[h++]=f.x,u[h++]=f.y,u[h++]=f.z}for(var p=[],m={},g=e.maximumRadius,v=d.chordLength(a,g),_=v*v;c.length>0;){var b,y,w=c.pop(),C=c.pop(),E=c.pop(),A=O.fromArray(u,3*E,Hp),x=O.fromArray(u,3*C,Vp),T=O.fromArray(u,3*w,Up),S=O.multiplyByScalar(O.normalize(A,Wp),g,Wp),D=O.multiplyByScalar(O.normalize(x,Gp),g,Gp),P=O.multiplyByScalar(O.normalize(T,qp),g,qp),I=O.magnitudeSquared(O.subtract(S,D,Yp)),M=O.magnitudeSquared(O.subtract(D,P,Yp)),R=O.magnitudeSquared(O.subtract(P,S,Yp)),L=Math.max(I,M,R);L>_?I===L?(s=m[b=Math.min(E,C)+" "+Math.max(E,C)],Object(o.a)(s)||(y=O.add(A,x,Yp),O.multiplyByScalar(y,.5,y),u.push(y.x,y.y,y.z),s=u.length/3-1,m[b]=s),c.push(E,s,w),c.push(s,C,w)):M===L?(s=m[b=Math.min(C,w)+" "+Math.max(C,w)],Object(o.a)(s)||(y=O.add(x,T,Yp),O.multiplyByScalar(y,.5,y),u.push(y.x,y.y,y.z),s=u.length/3-1,m[b]=s),c.push(C,s,E),c.push(s,w,E)):R===L&&(s=m[b=Math.min(w,E)+" "+Math.max(w,E)],Object(o.a)(s)||(y=O.add(T,A,Yp),O.multiplyByScalar(y,.5,y),u.push(y.x,y.y,y.z),s=u.length/3-1,m[b]=s),c.push(w,s,C),c.push(s,E,C)):(p.push(E),p.push(C),p.push(w))}return new zl({attributes:{position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:u})},indices:p,primitiveType:xl.TRIANGLES})};var $p=new R,Xp=new R,Kp=new R,Qp=new R;Bp.computeRhumbLineSubdivision=function(e,t,n,a){a=Object(r.a)(a,d.RADIANS_PER_DEGREE),i.a.typeOf.object("ellipsoid",e),i.a.defined("positions",t),i.a.defined("indices",n),i.a.typeOf.number.greaterThanOrEquals("indices.length",n.length,3),i.a.typeOf.number.equals("indices.length % 3","0",n.length%3,0),i.a.typeOf.number.greaterThan("granularity",a,0);var s,c=n.slice(0),l=t.length,u=new Array(3*l),h=0;for(s=0;s<l;s++){var f=t[s];u[h++]=f.x,u[h++]=f.y,u[h++]=f.z}for(var p=[],m={},g=e.maximumRadius,v=d.chordLength(a,g),_=new cp(void 0,void 0,e),b=new cp(void 0,void 0,e),y=new cp(void 0,void 0,e);c.length>0;){var w=c.pop(),C=c.pop(),E=c.pop(),A=O.fromArray(u,3*E,Hp),x=O.fromArray(u,3*C,Vp),T=O.fromArray(u,3*w,Up),S=e.cartesianToCartographic(A,$p),D=e.cartesianToCartographic(x,Xp),P=e.cartesianToCartographic(T,Kp);_.setEndPoints(S,D);var I=_.surfaceDistance;b.setEndPoints(D,P);var M=b.surfaceDistance;y.setEndPoints(P,S);var R,L,j,F,N=y.surfaceDistance,z=Math.max(I,M,N);z>v?I===z?(s=m[R=Math.min(E,C)+" "+Math.max(E,C)],Object(o.a)(s)||(L=_.interpolateUsingFraction(.5,Qp),j=.5*(S.height+D.height),F=O.fromRadians(L.longitude,L.latitude,j,e,Yp),u.push(F.x,F.y,F.z),s=u.length/3-1,m[R]=s),c.push(E,s,w),c.push(s,C,w)):M===z?(s=m[R=Math.min(C,w)+" "+Math.max(C,w)],Object(o.a)(s)||(L=b.interpolateUsingFraction(.5,Qp),j=.5*(D.height+P.height),F=O.fromRadians(L.longitude,L.latitude,j,e,Yp),u.push(F.x,F.y,F.z),s=u.length/3-1,m[R]=s),c.push(C,s,E),c.push(s,w,E)):N===z&&(s=m[R=Math.min(w,E)+" "+Math.max(w,E)],Object(o.a)(s)||(L=y.interpolateUsingFraction(.5,Qp),j=.5*(P.height+S.height),F=O.fromRadians(L.longitude,L.latitude,j,e,Yp),u.push(F.x,F.y,F.z),s=u.length/3-1,m[R]=s),c.push(w,s,C),c.push(s,E,C)):(p.push(E),p.push(C),p.push(w))}return new zl({attributes:{position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:u})},indices:p,primitiveType:xl.TRIANGLES})},Bp.scaleToGeodeticHeight=function(e,t,n,i){n=Object(r.a)(n,W.WGS84);var a=zp,s=kp;if(t=Object(r.a)(t,0),i=Object(r.a)(i,!0),Object(o.a)(e))for(var c=e.length,l=0;l<c;l+=3)O.fromArray(e,l,s),i&&(s=n.scaleToGeodeticSurface(s,s)),0!==t&&(a=n.geodeticSurfaceNormal(s,a),O.multiplyByScalar(a,t,a),O.add(s,a,s)),e[l]=s.x,e[l+1]=s.y,e[l+2]=s.z;return e};var Zp=Bp;function Jp(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(Jp.prototype,{length:{get:function(){return this._length}}}),Jp.prototype.enqueue=function(e){this._array.push(e),this._length++},Jp.prototype.dequeue=function(){if(0!==this._length){var e=this._array,t=this._offset,n=e[t];return e[t]=void 0,++t>10&&2*t>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n}},Jp.prototype.peek=function(){if(0!==this._length)return this._array[this._offset]},Jp.prototype.contains=function(e){return-1!==this._array.indexOf(e)},Jp.prototype.clear=function(){this._array.length=this._offset=this._length=0},Jp.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var em=Jp,tm={computeHierarchyPackedLength:function(e){for(var t=0,n=[e];n.length>0;){var i=n.pop();if(Object(o.a)(i)){t+=2;var r=i.positions,a=i.holes;if(Object(o.a)(r)&&(t+=r.length*O.packedLength),Object(o.a)(a))for(var s=a.length,c=0;c<s;++c)n.push(a[c])}}return t},packPolygonHierarchy:function(e,t,n){for(var i=[e];i.length>0;){var r=i.pop();if(Object(o.a)(r)){var a=r.positions,s=r.holes;if(t[n++]=Object(o.a)(a)?a.length:0,t[n++]=Object(o.a)(s)?s.length:0,Object(o.a)(a))for(var c=a.length,l=0;l<c;++l,n+=3)O.pack(a[l],t,n);if(Object(o.a)(s))for(var u=s.length,h=0;h<u;++h)i.push(s[h])}}return n},unpackPolygonHierarchy:function(e,t){for(var n=e[t++],i=e[t++],r=new Array(n),o=i>0?new Array(i):void 0,a=0;a<n;++a,t+=O.packedLength)r[a]=O.unpack(e,t);for(var s=0;s<i;++s)o[s]=tm.unpackPolygonHierarchy(e,t),t=o[s].startingIndex,delete o[s].startingIndex;return{positions:r,holes:o,startingIndex:t}}},nm=new O;function im(e,t,n,i){return O.subtract(t,e,nm),O.multiplyByScalar(nm,n/i,nm),O.add(e,nm,nm),[nm.x,nm.y,nm.z]}tm.subdivideLineCount=function(e,t,n){var i=O.distance(e,t)/n,r=Math.max(0,Math.ceil(d.log2(i)));return Math.pow(2,r)};var rm=new R,om=new R,am=new R,sm=new O;tm.subdivideRhumbLineCount=function(e,t,n,i){var r=e.cartesianToCartographic(t,rm),o=e.cartesianToCartographic(n,om),a=new cp(r,o,e).surfaceDistance/i,s=Math.max(0,Math.ceil(d.log2(a)));return Math.pow(2,s)},tm.subdivideLine=function(e,t,n,i){var r=tm.subdivideLineCount(e,t,n),a=O.distance(e,t),s=a/r;Object(o.a)(i)||(i=[]);var c=i;c.length=3*r;for(var l=0,u=0;u<r;u++){var h=im(e,t,u*s,a);c[l++]=h[0],c[l++]=h[1],c[l++]=h[2]}return c},tm.subdivideRhumbLine=function(e,t,n,i,r){var a=e.cartesianToCartographic(t,rm),s=e.cartesianToCartographic(n,om),c=new cp(a,s,e),l=c.surfaceDistance/i,u=Math.max(0,Math.ceil(d.log2(l))),h=Math.pow(2,u),f=c.surfaceDistance/h;Object(o.a)(r)||(r=[]);var p=r;p.length=3*h;for(var m=0,g=0;g<h;g++){var v=c.interpolateUsingSurfaceDistance(g*f,am),_=e.cartographicToCartesian(v,sm);p[m++]=_.x,p[m++]=_.y,p[m++]=_.z}return p};var cm=new O,lm=new O,um=new O,hm=new O;tm.scaleToGeodeticHeightExtruded=function(e,t,n,i,a){i=Object(r.a)(i,W.WGS84);var s=cm,c=lm,l=um,u=hm;if(Object(o.a)(e)&&Object(o.a)(e.attributes)&&Object(o.a)(e.attributes.position))for(var h=e.attributes.position.values,d=h.length/2,f=0;f<d;f+=3)O.fromArray(h,f,l),i.geodeticSurfaceNormal(l,s),u=i.scaleToGeodeticSurface(l,u),c=O.multiplyByScalar(s,n,c),c=O.add(u,c,c),h[f+d]=c.x,h[f+1+d]=c.y,h[f+2+d]=c.z,a&&(u=O.clone(l,u)),c=O.multiplyByScalar(s,t,c),c=O.add(u,c,c),h[f]=c.x,h[f+1]=c.y,h[f+2]=c.z;return e},tm.polygonOutlinesFromHierarchy=function(e,t,n){var i,r,a,s=[],c=new em;for(c.enqueue(e);0!==c.length;){var l=c.dequeue(),u=l.positions;if(t)for(a=u.length,i=0;i<a;i++)n.scaleToGeodeticSurface(u[i],u[i]);if(!((u=rl(u,O.equalsEpsilon,!0)).length<3)){var h=l.holes?l.holes.length:0;for(i=0;i<h;i++){var d=l.holes[i],f=d.positions;if(t)for(a=f.length,r=0;r<a;++r)n.scaleToGeodeticSurface(f[r],f[r]);if(!((f=rl(f,O.equalsEpsilon,!0)).length<3)){s.push(f);var p=0;for(Object(o.a)(d.holes)&&(p=d.holes.length),r=0;r<p;r++)c.enqueue(d.holes[r])}}s.push(u)}}return s},tm.polygonsFromHierarchy=function(e,t,n,i){var r=[],a=[],s=new em;for(s.enqueue(e);0!==s.length;){var c,l,u=s.dequeue(),h=u.positions,d=u.holes;if(n)for(l=h.length,c=0;c<l;c++)i.scaleToGeodeticSurface(h[c],h[c]);if(!((h=rl(h,O.equalsEpsilon,!0)).length<3)){var f=t(h);if(Object(o.a)(f)){var p=[],m=Zp.computeWindingOrder2D(f);m===Np.CLOCKWISE&&(f.reverse(),h=h.slice().reverse());var g,v=h.slice(),_=Object(o.a)(d)?d.length:0,b=[];for(c=0;c<_;c++){var y=d[c],w=y.positions;if(n)for(l=w.length,g=0;g<l;++g)i.scaleToGeodeticSurface(w[g],w[g]);if(!((w=rl(w,O.equalsEpsilon,!0)).length<3)){var C=t(w);if(Object(o.a)(C)){(m=Zp.computeWindingOrder2D(C))===Np.CLOCKWISE&&(C.reverse(),w=w.slice().reverse()),b.push(w),p.push(v.length),v=v.concat(w),f=f.concat(C);var E=0;for(Object(o.a)(y.holes)&&(E=y.holes.length),g=0;g<E;g++)s.enqueue(y.holes[g])}}}r.push({outerRing:h,holes:b}),a.push({positions:v,positions2D:f,holes:p})}}}return{hierarchy:r,polygons:a}};var dm=new Mt,fm=new O,pm=new No,mm=new oe;tm.computeBoundingRectangle=function(e,t,n,i,r){for(var a=No.fromAxisAngle(e,i,pm),s=oe.fromQuaternion(a,mm),c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,u=Number.POSITIVE_INFINITY,h=Number.NEGATIVE_INFINITY,d=n.length,f=0;f<d;++f){var p=O.clone(n[f],fm);oe.multiplyByVector(s,p,p);var m=t(p,dm);Object(o.a)(m)&&(c=Math.min(c,m.x),l=Math.max(l,m.x),u=Math.min(u,m.y),h=Math.max(h,m.y))}return r.x=c,r.y=u,r.width=l-c,r.height=h-u,r},tm.createGeometryFromPositions=function(e,t,n,i,r,o){var a=Zp.triangulate(t.positions2D,t.holes);a.length<3&&(a=[0,1,2]);var s=t.positions;if(i){for(var c=s.length,l=new Array(3*c),u=0,h=0;h<c;h++){var d=s[h];l[u++]=d.x,l[u++]=d.y,l[u++]=d.z}var f=new zl({attributes:{position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:l})},indices:a,primitiveType:xl.TRIANGLES});return r.normal?jd.computeNormal(f):f}return o===tl.GEODESIC?Zp.computeSubdivision(e,s,a,n):o===tl.RHUMB?Zp.computeRhumbLineSubdivision(e,s,a,n):void 0};var gm=[],vm=new O,_m=new O;tm.computeWallGeometry=function(e,t,n,i,r){var o,a,s,c,l,u=e.length,h=0;if(i)for(a=3*u*2,o=new Array(2*a),s=0;s<u;s++)c=e[s],l=e[(s+1)%u],o[h]=o[h+a]=c.x,o[++h]=o[h+a]=c.y,o[++h]=o[h+a]=c.z,o[++h]=o[h+a]=l.x,o[++h]=o[h+a]=l.y,o[++h]=o[h+a]=l.z,++h;else{var f=d.chordLength(n,t.maximumRadius),p=0;if(r===tl.GEODESIC)for(s=0;s<u;s++)p+=tm.subdivideLineCount(e[s],e[(s+1)%u],f);else if(r===tl.RHUMB)for(s=0;s<u;s++)p+=tm.subdivideRhumbLineCount(t,e[s],e[(s+1)%u],f);for(a=3*(p+u),o=new Array(2*a),s=0;s<u;s++){var m;c=e[s],l=e[(s+1)%u],r===tl.GEODESIC?m=tm.subdivideLine(c,l,f,gm):r===tl.RHUMB&&(m=tm.subdivideRhumbLine(t,c,l,f,gm));for(var g=m.length,v=0;v<g;++v,++h)o[h]=m[v],o[h+a]=m[v];o[h]=l.x,o[h+a]=l.x,o[++h]=l.y,o[h+a]=l.y,o[++h]=l.z,o[h+a]=l.z,++h}}u=o.length;var _=lc.createTypedArray(u/3,u-6*e.length),b=0;for(u/=6,s=0;s<u;s++){var y=s,w=y+1,C=y+u,E=C+1;c=O.fromArray(o,3*y,vm),l=O.fromArray(o,3*w,_m),O.equalsEpsilon(c,l,d.EPSILON10,d.EPSILON10)||(_[b++]=y,_[b++]=C,_[b++]=w,_[b++]=w,_[b++]=C,_[b++]=E)}return new zl({attributes:new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:o})}),indices:_,primitiveType:xl.TRIANGLES})};var bm=tm,ym=new O,wm=new bl,Om=new Mt,Cm=new Mt,Em=new O,Am=new O,xm=new O,Tm=new O,Sm=new O,Dm=new O,Pm=new No,Im=new oe,Mm=new oe,Rm=new O;function Lm(e,t,n,i,r,o,a,s){var c=e.positions,l=Zp.triangulate(e.positions2D,e.holes);l.length<3&&(l=[0,1,2]);var u=lc.createTypedArray(c.length,l.length);u.set(l);var h=Im;if(0!==i){var f=No.fromAxisAngle(o,i,Pm);if(h=oe.fromQuaternion(f,h),t.tangent||t.bitangent){f=No.fromAxisAngle(o,-i,Pm);var p=oe.fromQuaternion(f,Mm);a=O.normalize(oe.multiplyByVector(p,a,a),a),t.bitangent&&(s=O.normalize(O.cross(o,a,s),s))}}else h=oe.clone(oe.IDENTITY,h);var m=Cm;t.st&&(m.x=n.x,m.y=n.y);for(var g=c.length,v=3*g,_=new Float64Array(v),b=t.normal?new Float32Array(v):void 0,y=t.tangent?new Float32Array(v):void 0,w=t.bitangent?new Float32Array(v):void 0,C=t.st?new Float32Array(2*g):void 0,E=0,A=0,x=0,T=0,S=0,D=0;D<g;D++){var P=c[D];if(_[E++]=P.x,_[E++]=P.y,_[E++]=P.z,t.st){var I=r(oe.multiplyByVector(h,P,ym),Om);Mt.subtract(I,m,I);var M=d.clamp(I.x/n.width,0,1),R=d.clamp(I.y/n.height,0,1);C[S++]=M,C[S++]=R}t.normal&&(b[A++]=o.x,b[A++]=o.y,b[A++]=o.z),t.tangent&&(y[T++]=a.x,y[T++]=a.y,y[T++]=a.z),t.bitangent&&(w[x++]=s.x,w[x++]=s.y,w[x++]=s.z)}var L=new Bl;return t.position&&(L.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:_})),t.normal&&(L.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:b})),t.tangent&&(L.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:y})),t.bitangent&&(L.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:w})),t.st&&(L.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:C})),new zl({attributes:L,indices:u,primitiveType:xl.TRIANGLES})}function jm(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).polygonHierarchy;i.a.defined("options.polygonHierarchy",t);var n=Object(r.a)(e.vertexFormat,Ul.DEFAULT);this._vertexFormat=Ul.clone(n),this._polygonHierarchy=t,this._stRotation=Object(r.a)(e.stRotation,0),this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._workerName="createCoplanarPolygonGeometry",this.packedLength=bm.computeHierarchyPackedLength(t)+Ul.packedLength+W.packedLength+2}jm.fromPositions=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.positions",e.positions),new jm({polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid})},jm.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),n=bm.packPolygonHierarchy(e._polygonHierarchy,t,n),W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._stRotation,t[n]=e.packedLength,t};var Fm=W.clone(W.UNIT_SPHERE),Nm=new Ul,zm={polygonHierarchy:{}};jm.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=bm.unpackPolygonHierarchy(e,t);t=a.startingIndex,delete a.startingIndex;var s=W.unpack(e,t,Fm);t+=W.packedLength;var c=Ul.unpack(e,t,Nm);t+=Ul.packedLength;var l=e[t++],u=e[t];return Object(o.a)(n)||(n=new jm(zm)),n._polygonHierarchy=a,n._ellipsoid=W.clone(s,n._ellipsoid),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._stRotation=l,n.packedLength=u,n},jm.createGeometry=function(e){var t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,r=n.positions;if(!((r=rl(r,O.equalsEpsilon,!0)).length<3)){var o=Em,a=Am,s=xm,c=Sm,l=Dm;if(ep.computeProjectTo2DArguments(r,Tm,c,l)){if(o=O.cross(c,l,o),o=O.normalize(o,o),!O.equalsEpsilon(Tm,O.ZERO,d.EPSILON6)){var u=e._ellipsoid.geodeticSurfaceNormal(Tm,Rm);O.dot(o,u)<0&&(o=O.negate(o,o),c=O.negate(c,c))}var h=ep.createProjectPointsTo2DFunction(Tm,c,l),f=ep.createProjectPointTo2DFunction(Tm,c,l);t.tangent&&(a=O.clone(c,a)),t.bitangent&&(s=O.clone(l,s));var p=bm.polygonsFromHierarchy(n,h,!1),m=p.hierarchy,g=p.polygons;if(0!==m.length){r=m[0].outerRing;for(var v=gt.fromPoints(r),_=bm.computeBoundingRectangle(o,f,r,i,wm),b=[],y=0;y<g.length;y++){var w=new fh({geometry:Lm(g[y],t,_,i,f,o,a,s)});b.push(w)}var C=jd.combineInstances(b)[0];C.attributes.position.values=new Float64Array(C.attributes.position.values),C.indices=lc.createTypedArray(C.attributes.position.values.length/3,C.indices);var E=C.attributes;return t.position||delete E.position,new zl({attributes:E,indices:C.indices,primitiveType:C.primitiveType,boundingSphere:v})}}}};var km=jm;function Bm(e){for(var t=e.length,n=new Float64Array(3*t),i=lc.createTypedArray(t,2*t),r=0,o=0,a=0;a<t;a++){var s=e[a];n[r++]=s.x,n[r++]=s.y,n[r++]=s.z,i[o++]=a,i[o++]=(a+1)%t}var c=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:n})});return new zl({attributes:c,indices:i,primitiveType:xl.LINES})}function Hm(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).polygonHierarchy;i.a.defined("options.polygonHierarchy",t),this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=bm.computeHierarchyPackedLength(t)+1}Hm.fromPositions=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.positions",e.positions),new Hm({polygonHierarchy:{positions:e.positions}})},Hm.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n=bm.packPolygonHierarchy(e._polygonHierarchy,t,n)]=e.packedLength,t};var Vm={polygonHierarchy:{}};Hm.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=bm.unpackPolygonHierarchy(e,t);t=a.startingIndex,delete a.startingIndex;var s=e[t];return Object(o.a)(n)||(n=new Hm(Vm)),n._polygonHierarchy=a,n.packedLength=s,n},Hm.createGeometry=function(e){var t=e._polygonHierarchy,n=t.positions;if(!((n=rl(n,O.equalsEpsilon,!0)).length<3)&&ep.validOutline(n)){var i=bm.polygonOutlinesFromHierarchy(t,!1);if(0!==i.length){for(var r=[],o=0;o<i.length;o++){var a=new fh({geometry:Bm(i[o])});r.push(a)}var s=jd.combineInstances(r)[0],c=gt.fromPoints(t.positions);return new zl({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:c})}}};var Um=Hm,Wm=Object.freeze({ROUNDED:0,MITERED:1,BEVELED:2});function Gm(e,t,n,i,r,o,a){var s=function(e,t){return e*t*(4+e*(4-3*t))/16}(e,n);return(1-s)*e*t*(i+s*r*(a+s*o*(2*a*a-1)))}var qm=new O,Ym=new O;function $m(e,t,n,r){var o=O.normalize(r.cartographicToCartesian(t,Ym),qm),a=O.normalize(r.cartographicToCartesian(n,Ym),Ym);i.a.typeOf.number.greaterThanOrEquals("value",Math.abs(Math.abs(O.angleBetween(o,a))-Math.PI),.0125),function(e,t,n,i,r,o,a){var s,c,l,u,h,f=(t-n)/t,p=o-i,m=Math.atan((1-f)*Math.tan(r)),g=Math.atan((1-f)*Math.tan(a)),v=Math.cos(m),_=Math.sin(m),b=Math.cos(g),y=Math.sin(g),w=v*b,O=v*y,C=_*y,E=_*b,A=p,x=d.TWO_PI,T=Math.cos(A),S=Math.sin(A);do{T=Math.cos(A),S=Math.sin(A);var D,P=O-E*T;l=Math.sqrt(b*b*S*S+P*P),c=C+w*T,s=Math.atan2(l,c),0===l?(D=0,u=1):u=1-(D=w*S/l)*D,x=A,h=c-2*C/u,isNaN(h)&&(h=0),A=p+Gm(f,D,u,s,l,c,h)}while(Math.abs(A-x)>d.EPSILON12);var I=u*(t*t-n*n)/(n*n),M=I*(256+I*(I*(74-47*I)-128))/1024,R=h*h,L=n*(1+I*(4096+I*(I*(320-175*I)-768))/16384)*(s-M*l*(h+M*(c*(2*R-1)-M*h*(4*l*l-3)*(4*R-3)/6)/4)),j=Math.atan2(b*S,O-E*T),F=Math.atan2(v*S,O*T-E);e._distance=L,e._startHeading=j,e._endHeading=F,e._uSquared=I}(e,r.maximumRadius,r.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=R.clone(t,e._start),e._end=R.clone(n,e._end),e._start.height=0,e._end.height=0,function(e){var t=e._uSquared,n=e._ellipsoid.maximumRadius,i=e._ellipsoid.minimumRadius,r=(n-i)/n,o=Math.cos(e._startHeading),a=Math.sin(e._startHeading),s=(1-r)*Math.tan(e._start.latitude),c=1/Math.sqrt(1+s*s),l=c*s,u=Math.atan2(s,o),h=c*a,d=h*h,f=1-d,p=Math.sqrt(f),m=t/4,g=m*m,v=g*m,_=g*g,b=1+m-3*g/4+5*v/4-175*_/64,y=1-m+15*g/8-35*v/8,w=1-3*m+35*g/4,O=1-5*m,C=b*u-y*Math.sin(2*u)*m/2-w*Math.sin(4*u)*g/16-O*Math.sin(6*u)*v/48-5*Math.sin(8*u)*_/512,E=e._constants;E.a=n,E.b=i,E.f=r,E.cosineHeading=o,E.sineHeading=a,E.tanU=s,E.cosineU=c,E.sineU=l,E.sigma=u,E.sineAlpha=h,E.sineSquaredAlpha=d,E.cosineSquaredAlpha=f,E.cosineAlpha=p,E.u2Over4=m,E.u4Over16=g,E.u6Over64=v,E.u8Over256=_,E.a0=b,E.a1=y,E.a2=w,E.a3=O,E.distanceRatio=C}(e)}function Xm(e,t,n){var i=Object(r.a)(n,W.WGS84);this._ellipsoid=i,this._start=new R,this._end=new R,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,Object(o.a)(e)&&Object(o.a)(t)&&$m(this,e,t,i)}Object.defineProperties(Xm.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return i.a.defined("distance",this._distance),this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return i.a.defined("distance",this._distance),this._startHeading}},endHeading:{get:function(){return i.a.defined("distance",this._distance),this._endHeading}}}),Xm.prototype.setEndPoints=function(e,t){i.a.defined("start",e),i.a.defined("end",t),$m(this,e,t,this._ellipsoid)},Xm.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)},Xm.prototype.interpolateUsingSurfaceDistance=function(e,t){i.a.defined("distance",this._distance);var n=this._constants,r=n.distanceRatio+e/n.b,a=Math.cos(2*r),s=Math.cos(4*r),c=Math.cos(6*r),l=Math.sin(2*r),u=Math.sin(4*r),h=Math.sin(6*r),d=Math.sin(8*r),f=r*r,p=r*f,m=n.u8Over256,g=n.u2Over4,v=n.u6Over64,_=n.u4Over16,b=2*p*m*a/3+r*(1-g+7*_/4-15*v/4+579*m/64-(_-15*v/4+187*m/16)*a-(5*v/4-115*m/16)*s-29*m*c/16)+(g/2-_+71*v/32-85*m/16)*l+(5*_/16-5*v/4+383*m/96)*u-f*((v-11*m/2)*l+5*m*u/2)+(29*v/96-29*m/16)*h+539*m*d/1536,y=Math.asin(Math.sin(b)*n.cosineAlpha),w=Math.atan(n.a/n.b*Math.tan(y));b-=n.sigma;var O=Math.cos(2*n.sigma+b),C=Math.sin(b),E=Math.cos(b),A=n.cosineU*E,x=n.sineU*C,T=Math.atan2(C*n.sineHeading,A-x*n.cosineHeading)-Gm(n.f,n.sineAlpha,n.cosineSquaredAlpha,b,C,E,O);return Object(o.a)(t)?(t.longitude=this._start.longitude+T,t.latitude=w,t.height=0,t):new R(this._start.longitude+T,w,0)};var Km=Xm,Qm={numberOfPoints:function(e,t,n){var i=O.distance(e,t);return Math.ceil(i/n)},numberOfPointsRhumbLine:function(e,t,n){var i=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.ceil(Math.sqrt(i/(n*n)))}},Zm=new R;Qm.extractHeights=function(e,t){for(var n=e.length,i=new Array(n),r=0;r<n;r++){var o=e[r];i[r]=t.cartesianToCartographic(o,Zm).height}return i};var Jm=new Ae,eg=new O,tg=new O,ng=new Fi(O.UNIT_X,0),ig=new O,rg=new Fi(O.UNIT_X,0),og=new O,ag=new O,sg=[];function cg(e,t,n){var i,r=sg;if(r.length=e,t===n){for(i=0;i<e;i++)r[i]=t;return r}var o=(n-t)/e;for(i=0;i<e;i++){var a=t+i*o;r[i]=a}return r}var lg=new R,ug=new R,hg=new O,dg=new O,fg=new O,pg=new Km,mg=new cp;function gg(e,t,n,i,r,o,a,s){var c=i.scaleToGeodeticSurface(e,dg),l=i.scaleToGeodeticSurface(t,fg),u=Qm.numberOfPoints(e,t,n),h=i.cartesianToCartographic(c,lg),d=i.cartesianToCartographic(l,ug),f=cg(u,r,o);pg.setEndPoints(h,d);var p=pg.surfaceDistance/u,m=s;h.height=r;var g=i.cartographicToCartesian(h,hg);O.pack(g,a,m),m+=3;for(var v=1;v<u;v++){var _=pg.interpolateUsingSurfaceDistance(v*p,ug);_.height=f[v],g=i.cartographicToCartesian(_,hg),O.pack(g,a,m),m+=3}return m}function vg(e,t,n,i,r,o,a,s){var c=i.cartesianToCartographic(e,lg),l=i.cartesianToCartographic(t,ug),u=Qm.numberOfPointsRhumbLine(c,l,n);c.height=0,l.height=0;var h=cg(u,r,o);mg.ellipsoid.equals(i)||(mg=new cp(void 0,void 0,i)),mg.setEndPoints(c,l);var d=mg.surfaceDistance/u,f=s;c.height=r;var p=i.cartographicToCartesian(c,hg);O.pack(p,a,f),f+=3;for(var m=1;m<u;m++){var g=mg.interpolateUsingSurfaceDistance(m*d,ug);g.height=h[m],p=i.cartographicToCartesian(g,hg),O.pack(p,a,f),f+=3}return f}Qm.wrapLongitude=function(e,t){var n=[],i=[];if(Object(o.a)(e)&&e.length>0){t=Object(r.a)(t,Ae.IDENTITY);var a=Ae.inverseTransformation(t,Jm),s=Ae.multiplyByPoint(a,O.ZERO,eg),c=O.normalize(Ae.multiplyByPointAsVector(a,O.UNIT_Y,tg),tg),l=Fi.fromPointNormal(s,c,ng),u=O.normalize(Ae.multiplyByPointAsVector(a,O.UNIT_X,ig),ig),h=Fi.fromPointNormal(s,u,rg),d=1;n.push(O.clone(e[0]));for(var f=n[0],p=e.length,m=1;m<p;++m){var g=e[m];if(Fi.getPointDistance(h,f)<0||Fi.getPointDistance(h,g)<0){var v=Ii.lineSegmentPlane(f,g,l,og);if(Object(o.a)(v)){var _=O.multiplyByScalar(c,5e-9,ag);Fi.getPointDistance(l,f)<0&&O.negate(_,_),n.push(O.add(v,_,new O)),i.push(d+1),O.negate(_,_),n.push(O.add(v,_,new O)),d=1}}n.push(O.clone(e[m])),d++,f=g}i.push(d)}return{positions:n,lengths:i}},Qm.generateArc=function(e){Object(o.a)(e)||(e={});var t=e.positions;if(!Object(o.a)(t))throw new a.a("options.positions is required.");var n=t.length,i=Object(r.a)(e.ellipsoid,W.WGS84),s=Object(r.a)(e.height,0),c=Array.isArray(s);if(n<1)return[];if(1===n){var l=i.scaleToGeodeticSurface(t[0],dg);if(0!==(s=c?s[0]:s)){var u=i.geodeticSurfaceNormal(l,hg);O.multiplyByScalar(u,s,u),O.add(l,u,l)}return[l.x,l.y,l.z]}var h=e.minDistance;if(!Object(o.a)(h)){var f=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE);h=d.chordLength(f,i.maximumRadius)}var p,m=0;for(p=0;p<n-1;p++)m+=Qm.numberOfPoints(t[p],t[p+1],h);var g=3*(m+1),v=new Array(g),_=0;for(p=0;p<n-1;p++){_=gg(t[p],t[p+1],h,i,c?s[p]:s,c?s[p+1]:s,v,_)}sg.length=0;var b=t[n-1],y=i.cartesianToCartographic(b,lg);y.height=c?s[n-1]:s;var w=i.cartographicToCartesian(y,hg);return O.pack(w,v,g-3),v};var _g=new R,bg=new R;Qm.generateRhumbArc=function(e){Object(o.a)(e)||(e={});var t=e.positions;if(!Object(o.a)(t))throw new a.a("options.positions is required.");var n=t.length,i=Object(r.a)(e.ellipsoid,W.WGS84),s=Object(r.a)(e.height,0),c=Array.isArray(s);if(n<1)return[];if(1===n){var l=i.scaleToGeodeticSurface(t[0],dg);if(0!==(s=c?s[0]:s)){var u=i.geodeticSurfaceNormal(l,hg);O.multiplyByScalar(u,s,u),O.add(l,u,l)}return[l.x,l.y,l.z]}var h,f,p=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),m=0,g=i.cartesianToCartographic(t[0],_g);for(h=0;h<n-1;h++)f=i.cartesianToCartographic(t[h+1],bg),m+=Qm.numberOfPointsRhumbLine(g,f,p),g=R.clone(f,_g);var v=3*(m+1),_=new Array(v),b=0;for(h=0;h<n-1;h++){b=vg(t[h],t[h+1],p,i,c?s[h]:s,c?s[h+1]:s,_,b)}sg.length=0;var y=t[n-1],w=i.cartesianToCartographic(y,lg);w.height=c?s[n-1]:s;var C=i.cartographicToCartesian(w,hg);return O.pack(C,_,v-3),_},Qm.generateCartesianArc=function(e){for(var t=Qm.generateArc(e),n=t.length/3,i=new Array(n),r=0;r<n;r++)i[r]=O.unpack(t,3*r);return i},Qm.generateCartesianRhumbArc=function(e){for(var t=Qm.generateRhumbArc(e),n=t.length/3,i=new Array(n),r=0;r<n;r++)i[r]=O.unpack(t,3*r);return i};var yg=Qm,wg=[new O,new O],Og=new O,Cg=new O,Eg=new O,Ag=new O,xg=new O,Tg=new O,Sg=new O,Dg=new O,Pg=new O,Ig=new O,Mg=new O,Rg={},Lg=new R;function jg(e,t,n,i){var r,o=e[0],a=e[1],s=O.angleBetween(o,a),c=Math.ceil(s/i),l=new Array(c);if(t===n){for(r=0;r<c;r++)l[r]=t;return l.push(n),l}var u=(n-t)/c;for(r=1;r<c;r++){var h=t+r*u;l[r]=h}return l[0]=t,l.push(n),l}var Fg=new O,Ng=new O;var zg=new O(-1,0,0),kg=new Ae,Bg=new Ae,Hg=new oe,Vg=oe.IDENTITY.clone(),Ug=new O,Wg=new he,Gg=new O;function qg(e,t,n,i,r,o,a,s){var c=Ug,l=Wg;kg=ya.eastNorthUpToFixedFrame(e,r,kg),c=Ae.multiplyByPointAsVector(kg,zg,c);var u=function(e,t,n,i){var r=new Ta(n,i),o=r.projectPointOntoPlane(O.add(n,e,Fg),Fg),a=r.projectPointOntoPlane(O.add(n,t,Ng),Ng),s=Mt.angleBetween(o,a);return a.x*o.y-a.y*o.x>=0?-s:s}(c=O.normalize(c,c),t,e,r);Hg=oe.fromRotationZ(u,Hg),Gg.z=o,kg=Ae.multiplyTransformation(kg,Ae.fromRotationTranslation(Hg,Gg,Bg),kg);var h=Vg;h[0]=a;for(var d=0;d<s;d++)for(var f=0;f<n.length;f+=3)l=O.fromArray(n,f,l),l=oe.multiplyByVector(h,l,l),l=Ae.multiplyByPoint(kg,l,l),i.push(l.x,l.y,l.z);return i}var Yg=new O;function $g(e,t,n,i,r,o,a){for(var s=0;s<e.length;s+=3){i=qg(O.fromArray(e,s,Yg),t,n,i,r,o[s/3],a,1)}return i}function Xg(e,t){for(var n=e.length,i=new Array(3*n),r=0,o=t.x+t.width/2,a=t.y+t.height/2,s=0;s<n;s++)i[r++]=e[s].x-o,i[r++]=0,i[r++]=e[s].y-a;return i}var Kg=new No,Qg=new O,Zg=new oe;function Jg(e,t,n,i,r,o,a,s,c,l){var u,h,f=O.angleBetween(O.subtract(t,e,Ig),O.subtract(n,e,Mg)),p=i===Wm.BEVELED?0:Math.ceil(f/d.toRadians(5));if(u=r?oe.fromQuaternion(No.fromAxisAngle(O.negate(e,Ig),f/(p+1),Kg),Zg):oe.fromQuaternion(No.fromAxisAngle(e,f/(p+1),Kg),Zg),t=O.clone(t,Qg),p>0)for(var m=l?2:1,g=0;g<p;g++)t=oe.multiplyByVector(u,t,t),h=O.subtract(t,e,Ig),h=O.normalize(h,h),r||(h=O.negate(h,h)),a=qg(o.scaleToGeodeticSurface(t,Mg),h,s,a,o,c,1,m);else h=O.subtract(t,e,Ig),h=O.normalize(h,h),r||(h=O.negate(h,h)),a=qg(o.scaleToGeodeticSurface(t,Mg),h,s,a,o,c,1,1),n=O.clone(n,Qg),h=O.subtract(n,e,Ig),h=O.normalize(h,h),r||(h=O.negate(h,h)),a=qg(o.scaleToGeodeticSurface(n,Mg),h,s,a,o,c,1,1);return a}Rg.removeDuplicatesFromShape=function(e){for(var t=e.length,n=[],i=t-1,r=0;r<t;i=r++){var o=e[i],a=e[r];Mt.equals(o,a)||n.push(a)}return n},Rg.angleIsGreaterThanPi=function(e,t,n,i){var r=new Ta(n,i),o=r.projectPointOntoPlane(O.add(n,e,Fg),Fg),a=r.projectPointOntoPlane(O.add(n,t,Ng),Ng);return a.x*o.y-a.y*o.x>=0};var ev=new O,tv=new O;Rg.computePositions=function(e,t,n,i,r){var o=i._ellipsoid,a=function(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++){var r=e[i];Lg=t.cartesianToCartographic(r,Lg),n[i]=Lg.height,e[i]=t.scaleToGeodeticSurface(r,r)}return n}(e,o),s=i._granularity,c=i._cornerType,l=r?function(e,t){var n=e.length,i=new Array(6*n),r=0,o=t.x+t.width/2,a=t.y+t.height/2,s=e[0];i[r++]=s.x-o,i[r++]=0,i[r++]=s.y-a;for(var c=1;c<n;c++){var l=(s=e[c]).x-o,u=s.y-a;i[r++]=l,i[r++]=0,i[r++]=u,i[r++]=l,i[r++]=0,i[r++]=u}return s=e[0],i[r++]=s.x-o,i[r++]=0,i[r++]=s.y-a,i}(t,n):Xg(t,n),u=r?Xg(t,n):void 0,h=n.height/2,f=n.width/2,p=e.length,m=[],g=r?[]:void 0,v=Og,_=Cg,b=Eg,y=Ag,w=xg,C=Tg,E=Sg,A=Dg,x=Pg,T=e[0],S=e[1];y=o.geodeticSurfaceNormal(T,y),v=O.subtract(S,T,v),v=O.normalize(v,v),A=O.cross(y,v,A),A=O.normalize(A,A);var D,P=a[0],I=a[1];r&&(g=qg(T,A,u,g,o,P+h,1,1)),x=O.clone(T,x),T=S,_=O.negate(v,_);for(var M=1;M<p-1;M++){var R=r?2:1;S=e[M+1],v=O.subtract(S,T,v),v=O.normalize(v,v),b=O.add(v,_,b),b=O.normalize(b,b),y=o.geodeticSurfaceNormal(T,y);var L=O.multiplyByScalar(y,O.dot(v,y),ev);O.subtract(v,L,L),O.normalize(L,L);var j=O.multiplyByScalar(y,O.dot(_,y),tv);if(O.subtract(_,j,j),O.normalize(j,j),!d.equalsEpsilon(Math.abs(O.dot(L,j)),1,d.EPSILON7)){b=O.cross(b,y,b),b=O.cross(y,b,b),b=O.normalize(b,b);var F=1/Math.max(.25,O.magnitude(O.cross(b,_,Ig))),N=Rg.angleIsGreaterThanPi(v,_,T,o);N?(w=O.add(T,O.multiplyByScalar(b,F*f,b),w),C=O.add(w,O.multiplyByScalar(A,f,C),C),wg[0]=O.clone(x,wg[0]),wg[1]=O.clone(C,wg[1]),D=jg(wg,P+h,I+h,s),m=$g(yg.generateArc({positions:wg,granularity:s,ellipsoid:o}),A,l,m,o,D,1),A=O.cross(y,v,A),A=O.normalize(A,A),E=O.add(w,O.multiplyByScalar(A,f,E),E),c===Wm.ROUNDED||c===Wm.BEVELED?Jg(w,C,E,c,N,o,m,l,I+h,r):m=qg(T,b=O.negate(b,b),l,m,o,I+h,F,R),x=O.clone(E,x)):(w=O.add(T,O.multiplyByScalar(b,F*f,b),w),C=O.add(w,O.multiplyByScalar(A,-f,C),C),wg[0]=O.clone(x,wg[0]),wg[1]=O.clone(C,wg[1]),D=jg(wg,P+h,I+h,s),m=$g(yg.generateArc({positions:wg,granularity:s,ellipsoid:o}),A,l,m,o,D,1),A=O.cross(y,v,A),A=O.normalize(A,A),E=O.add(w,O.multiplyByScalar(A,-f,E),E),c===Wm.ROUNDED||c===Wm.BEVELED?Jg(w,C,E,c,N,o,m,l,I+h,r):m=qg(T,b,l,m,o,I+h,F,R),x=O.clone(E,x)),_=O.negate(v,_)}else m=qg(x,A,l,m,o,P+h,1,1),x=T;P=I,I=a[M+1],T=S}wg[0]=O.clone(x,wg[0]),wg[1]=O.clone(T,wg[1]),D=jg(wg,P+h,I+h,s),m=$g(yg.generateArc({positions:wg,granularity:s,ellipsoid:o}),A,l,m,o,D,1),r&&(g=qg(T,A,u,g,o,I+h,1,1)),p=m.length;var z=r?p+g.length:p,k=new Float64Array(z);return k.set(m),r&&k.set(g,p),k};var nv=Rg,iv={},rv=new O,ov=new O,av=new O,sv=new O,cv=[new O,new O],lv=new O,uv=new O,hv=new O,dv=new O,fv=new O,pv=new O,mv=new O,gv=new O,vv=new O,_v=new O,bv=new No,yv=new oe;function wv(e,t,n,i,r){var o,a=O.angleBetween(O.subtract(t,e,rv),O.subtract(n,e,ov)),s=i===Wm.BEVELED?1:Math.ceil(a/d.toRadians(5))+1,c=3*s,l=new Array(c);l[c-3]=n.x,l[c-2]=n.y,l[c-1]=n.z,o=r?oe.fromQuaternion(No.fromAxisAngle(O.negate(e,rv),a/s,bv),yv):oe.fromQuaternion(No.fromAxisAngle(e,a/s,bv),yv);var u=0;t=O.clone(t,rv);for(var h=0;h<s;h++)t=oe.multiplyByVector(o,t,t),l[u++]=t.x,l[u++]=t.y,l[u++]=t.z;return l}function Ov(e,t,n,i){var r=rv;return i||(t=O.negate(t,t)),[(r=O.add(e,t,r)).x,r.y,r.z,n.x,n.y,n.z]}function Cv(e,t,n,i){for(var r=new Array(e.length),o=new Array(e.length),a=O.multiplyByScalar(t,n,rv),s=O.negate(a,ov),c=0,l=e.length-1,u=0;u<e.length;u+=3){var h=O.fromArray(e,u,av),d=O.add(h,s,sv);r[c++]=d.x,r[c++]=d.y,r[c++]=d.z;var f=O.add(h,a,sv);o[l--]=f.z,o[l--]=f.y,o[l--]=f.x}return i.push(r,o),i}iv.addAttribute=function(e,t,n,i){var r=t.x,a=t.y,s=t.z;Object(o.a)(n)&&(e[n]=r,e[n+1]=a,e[n+2]=s),Object(o.a)(i)&&(e[i]=s,e[i-1]=a,e[i-2]=r)};var Ev=new O,Av=new O;iv.computePositions=function(e){var t=e.granularity,n=e.positions,i=e.ellipsoid,r=e.width/2,o=e.cornerType,a=e.saveAttributes,s=lv,c=uv,l=hv,u=dv,h=fv,f=pv,p=mv,m=gv,g=vv,v=_v,_=[],b=a?[]:void 0,y=a?[]:void 0,w=n[0],C=n[1];c=O.normalize(O.subtract(C,w,c),c),s=i.geodeticSurfaceNormal(w,s),u=O.normalize(O.cross(s,c,u),u),a&&(b.push(u.x,u.y,u.z),y.push(s.x,s.y,s.z)),p=O.clone(w,p),w=C,l=O.negate(c,l);var E,A,x=[],T=n.length;for(E=1;E<T-1;E++){s=i.geodeticSurfaceNormal(w,s),C=n[E+1],c=O.normalize(O.subtract(C,w,c),c),h=O.normalize(O.add(c,l,h),h);var S=O.multiplyByScalar(s,O.dot(c,s),Ev);O.subtract(c,S,S),O.normalize(S,S);var D=O.multiplyByScalar(s,O.dot(l,s),Av);if(O.subtract(l,D,D),O.normalize(D,D),!d.equalsEpsilon(Math.abs(O.dot(S,D)),1,d.EPSILON7)){h=O.cross(h,s,h),h=O.cross(s,h,h),h=O.normalize(h,h);var P=r/Math.max(.25,O.magnitude(O.cross(h,l,rv))),I=nv.angleIsGreaterThanPi(c,l,w,i);h=O.multiplyByScalar(h,P,h),I?(m=O.add(w,h,m),v=O.add(m,O.multiplyByScalar(u,r,v),v),g=O.add(m,O.multiplyByScalar(u,2*r,g),g),cv[0]=O.clone(p,cv[0]),cv[1]=O.clone(v,cv[1]),_=Cv(yg.generateArc({positions:cv,granularity:t,ellipsoid:i}),u,r,_),a&&(b.push(u.x,u.y,u.z),y.push(s.x,s.y,s.z)),f=O.clone(g,f),u=O.normalize(O.cross(s,c,u),u),g=O.add(m,O.multiplyByScalar(u,2*r,g),g),p=O.add(m,O.multiplyByScalar(u,r,p),p),o===Wm.ROUNDED||o===Wm.BEVELED?x.push({leftPositions:wv(m,f,g,o,I)}):x.push({leftPositions:Ov(w,O.negate(h,h),g,I)})):(g=O.add(w,h,g),v=O.add(g,O.negate(O.multiplyByScalar(u,r,v),v),v),m=O.add(g,O.negate(O.multiplyByScalar(u,2*r,m),m),m),cv[0]=O.clone(p,cv[0]),cv[1]=O.clone(v,cv[1]),_=Cv(yg.generateArc({positions:cv,granularity:t,ellipsoid:i}),u,r,_),a&&(b.push(u.x,u.y,u.z),y.push(s.x,s.y,s.z)),f=O.clone(m,f),u=O.normalize(O.cross(s,c,u),u),m=O.add(g,O.negate(O.multiplyByScalar(u,2*r,m),m),m),p=O.add(g,O.negate(O.multiplyByScalar(u,r,p),p),p),o===Wm.ROUNDED||o===Wm.BEVELED?x.push({rightPositions:wv(g,f,m,o,I)}):x.push({rightPositions:Ov(w,h,m,I)})),l=O.negate(c,l)}w=C}return s=i.geodeticSurfaceNormal(w,s),cv[0]=O.clone(p,cv[0]),cv[1]=O.clone(w,cv[1]),_=Cv(yg.generateArc({positions:cv,granularity:t,ellipsoid:i}),u,r,_),a&&(b.push(u.x,u.y,u.z),y.push(s.x,s.y,s.z)),o===Wm.ROUNDED&&(A=function(e){var t=lv,n=uv,i=hv,r=e[1];n=O.fromArray(e[1],r.length-3,n),i=O.fromArray(e[0],0,i);var o=wv(t=O.midpoint(n,i,t),n,i,Wm.ROUNDED,!1),a=e.length-1,s=e[a-1];return r=e[a],n=O.fromArray(s,s.length-3,n),i=O.fromArray(r,0,i),[o,wv(t=O.midpoint(n,i,t),n,i,Wm.ROUNDED,!1)]}(_)),{positions:_,corners:x,lefts:b,normals:y,endPositions:A}};var xv=iv,Tv=new O,Sv=new O,Dv=new O,Pv=new O,Iv=new O,Mv=new O,Rv=new O,Lv=new O;function jv(e,t){for(var n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Fv(e,t,n,i,r,o){var a=e.normals,s=e.tangents,c=e.bitangents,l=O.normalize(O.cross(n,t,Rv),Rv);o.normal&&xv.addAttribute(a,t,i,r),o.tangent&&xv.addAttribute(s,l,i,r),o.bitangent&&xv.addAttribute(c,n,i,r)}function Nv(e,t,n){var i,r,a,s=e.positions,c=e.corners,l=e.endPositions,u=e.lefts,h=e.normals,f=new Bl,p=0,m=0,g=0;for(r=0;r<s.length;r+=2)p+=a=s[r].length-3,g+=2*a,m+=s[r+1].length-3;for(p+=3,m+=3,r=0;r<c.length;r++){i=c[r];var v=c[r].leftPositions;Object(o.a)(v)?(p+=a=v.length,g+=a):(m+=a=c[r].rightPositions.length,g+=a)}var _,b=Object(o.a)(l);b&&(p+=_=l[0].length-3,m+=_,g+=6*(_/=3));var y,w,C,E,A,x,T=p+m,S=new Float64Array(T),D={normals:t.normal?new Float32Array(T):void 0,tangents:t.tangent?new Float32Array(T):void 0,bitangents:t.bitangent?new Float32Array(T):void 0},P=0,I=T-1,M=Tv,R=Sv,L=_/2,j=lc.createTypedArray(T/3,g),F=0;if(b){x=Dv,A=Pv;var N=l[0];for(M=O.fromArray(h,0,M),R=O.fromArray(u,0,R),r=0;r<L;r++)x=O.fromArray(N,3*(L-1-r),x),A=O.fromArray(N,3*(L+r),A),xv.addAttribute(S,A,P),xv.addAttribute(S,x,void 0,I),Fv(D,M,R,P,I,t),E=(w=P/3)+1,C=(y=(I-2)/3)-1,j[F++]=y,j[F++]=w,j[F++]=C,j[F++]=C,j[F++]=w,j[F++]=E,P+=3,I-=3}var z,k,B=0,H=0,V=s[B++],U=s[B++];for(S.set(V,P),S.set(U,I-U.length+1),R=O.fromArray(u,H,R),a=U.length-3,r=0;r<a;r+=3)z=n.geodeticSurfaceNormal(O.fromArray(V,r,Rv),Rv),k=n.geodeticSurfaceNormal(O.fromArray(U,a-r,Lv),Lv),Fv(D,M=O.normalize(O.add(z,k,M),M),R,P,I,t),E=(w=P/3)+1,C=(y=(I-2)/3)-1,j[F++]=y,j[F++]=w,j[F++]=C,j[F++]=C,j[F++]=w,j[F++]=E,P+=3,I-=3;for(z=n.geodeticSurfaceNormal(O.fromArray(V,a,Rv),Rv),k=n.geodeticSurfaceNormal(O.fromArray(U,a,Lv),Lv),M=O.normalize(O.add(z,k,M),M),H+=3,r=0;r<c.length;r++){var W,G,q,Y=(i=c[r]).leftPositions,$=i.rightPositions,X=Mv,K=Dv,Q=Pv;if(M=O.fromArray(h,H,M),Object(o.a)(Y)){for(Fv(D,M,R,void 0,I,t),I-=3,G=E,q=C,W=0;W<Y.length/3;W++)X=O.fromArray(Y,3*W,X),j[F++]=G,j[F++]=q-W-1,j[F++]=q-W,xv.addAttribute(S,X,void 0,I),K=O.fromArray(S,3*(q-W-1),K),Q=O.fromArray(S,3*G,Q),Fv(D,M,R=O.normalize(O.subtract(K,Q,R),R),void 0,I,t),I-=3;X=O.fromArray(S,3*G,X),K=O.subtract(O.fromArray(S,3*q,K),X,K),Q=O.subtract(O.fromArray(S,3*(q-W),Q),X,Q),Fv(D,M,R=O.normalize(O.add(K,Q,R),R),P,void 0,t),P+=3}else{for(Fv(D,M,R,P,void 0,t),P+=3,G=C,q=E,W=0;W<$.length/3;W++)X=O.fromArray($,3*W,X),j[F++]=G,j[F++]=q+W,j[F++]=q+W+1,xv.addAttribute(S,X,P),K=O.fromArray(S,3*G,K),Q=O.fromArray(S,3*(q+W),Q),Fv(D,M,R=O.normalize(O.subtract(K,Q,R),R),P,void 0,t),P+=3;X=O.fromArray(S,3*G,X),K=O.subtract(O.fromArray(S,3*(q+W),K),X,K),Q=O.subtract(O.fromArray(S,3*q,Q),X,Q),Fv(D,M,R=O.normalize(O.negate(O.add(Q,K,R),R),R),void 0,I,t),I-=3}for(V=s[B++],U=s[B++],V.splice(0,3),U.splice(U.length-3,3),S.set(V,P),S.set(U,I-U.length+1),a=U.length-3,H+=3,R=O.fromArray(u,H,R),W=0;W<U.length;W+=3)z=n.geodeticSurfaceNormal(O.fromArray(V,W,Rv),Rv),k=n.geodeticSurfaceNormal(O.fromArray(U,a-W,Lv),Lv),Fv(D,M=O.normalize(O.add(z,k,M),M),R,P,I,t),w=(E=P/3)-1,y=(C=(I-2)/3)+1,j[F++]=y,j[F++]=w,j[F++]=C,j[F++]=C,j[F++]=w,j[F++]=E,P+=3,I-=3;P-=3,I+=3}if(Fv(D,M=O.fromArray(h,h.length-3,M),R,P,I,t),b){P+=3,I-=3,x=Dv,A=Pv;var Z=l[1];for(r=0;r<L;r++)x=O.fromArray(Z,3*(_-r-1),x),A=O.fromArray(Z,3*r,A),xv.addAttribute(S,x,void 0,I),xv.addAttribute(S,A,P),Fv(D,M,R,P,I,t),w=(E=P/3)-1,y=(C=(I-2)/3)+1,j[F++]=y,j[F++]=w,j[F++]=C,j[F++]=C,j[F++]=w,j[F++]=E,P+=3,I-=3}if(f.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:S}),t.st){var J,ee,te=new Float32Array(T/3*2),ne=0;if(b){p/=3,m/=3;var ie,re=Math.PI/(_+1);ee=1/(p-_+1),J=1/(m-_+1);var oe=_/2;for(r=oe+1;r<_+1;r++)ie=d.PI_OVER_TWO+re*r,te[ne++]=J*(1+Math.cos(ie)),te[ne++]=.5*(1+Math.sin(ie));for(r=1;r<m-_+1;r++)te[ne++]=r*J,te[ne++]=0;for(r=_;r>oe;r--)ie=d.PI_OVER_TWO-r*re,te[ne++]=1-J*(1+Math.cos(ie)),te[ne++]=.5*(1+Math.sin(ie));for(r=oe;r>0;r--)ie=d.PI_OVER_TWO-re*r,te[ne++]=1-ee*(1+Math.cos(ie)),te[ne++]=.5*(1+Math.sin(ie));for(r=p-_;r>0;r--)te[ne++]=r*ee,te[ne++]=1;for(r=1;r<oe+1;r++)ie=d.PI_OVER_TWO+re*r,te[ne++]=ee*(1+Math.cos(ie)),te[ne++]=.5*(1+Math.sin(ie))}else{for(ee=1/((p/=3)-1),J=1/((m/=3)-1),r=0;r<m;r++)te[ne++]=r*J,te[ne++]=0;for(r=p;r>0;r--)te[ne++]=(r-1)*ee,te[ne++]=1}f.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:te})}return t.normal&&(f.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:D.normals})),t.tangent&&(f.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:D.tangents})),t.bitangent&&(f.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:D.bitangents})),{attributes:f,indices:j}}function zv(e,t,n){n[t++]=e[0],n[t++]=e[1],n[t++]=e[2];for(var i=3;i<e.length;i+=3){var r=e[i],o=e[i+1],a=e[i+2];n[t++]=r,n[t++]=o,n[t++]=a,n[t++]=r,n[t++]=o,n[t++]=a}return n[t++]=e[0],n[t++]=e[1],n[t++]=e[2],n}function kv(e,t){var n=new Ul({position:t.position,normal:t.normal||t.bitangent||e.shadowVolume,tangent:t.tangent,bitangent:t.normal||t.bitangent,st:t.st}),i=e.ellipsoid,r=Nv(xv.computePositions(e),n,i),a=e.height,s=e.extrudedHeight,c=r.attributes,l=r.indices,u=c.position.values,h=u.length,d=new Float64Array(6*h),f=new Float64Array(h);f.set(u);var p,m=new Float64Array(4*h);m=zv(u=Zp.scaleToGeodeticHeight(u,a,i),0,m),m=zv(f=Zp.scaleToGeodeticHeight(f,s,i),2*h,m),d.set(u),d.set(f,h),d.set(m,2*h),c.position.values=d,c=function(e,t){if(!t.normal&&!t.tangent&&!t.bitangent&&!t.st)return e;var n,i,r=e.position.values;(t.normal||t.bitangent)&&(n=e.normal.values,i=e.bitangent.values);var o,a=e.position.values.length/18,s=3*a,c=2*a,l=2*s;if(t.normal||t.bitangent||t.tangent){var u=t.normal?new Float32Array(6*s):void 0,h=t.tangent?new Float32Array(6*s):void 0,d=t.bitangent?new Float32Array(6*s):void 0,f=Tv,p=Sv,m=Dv,g=Pv,v=Iv,_=Mv,b=l;for(o=0;o<s;o+=3){var y=b+l;f=O.fromArray(r,o,f),p=O.fromArray(r,o+s,p),m=O.fromArray(r,(o+3)%s,m),p=O.subtract(p,f,p),m=O.subtract(m,f,m),g=O.normalize(O.cross(p,m,g),g),t.normal&&(xv.addAttribute(u,g,y),xv.addAttribute(u,g,y+3),xv.addAttribute(u,g,b),xv.addAttribute(u,g,b+3)),(t.tangent||t.bitangent)&&(_=O.fromArray(n,o,_),t.bitangent&&(xv.addAttribute(d,_,y),xv.addAttribute(d,_,y+3),xv.addAttribute(d,_,b),xv.addAttribute(d,_,b+3)),t.tangent&&(v=O.normalize(O.cross(_,g,v),v),xv.addAttribute(h,v,y),xv.addAttribute(h,v,y+3),xv.addAttribute(h,v,b),xv.addAttribute(h,v,b+3))),b+=6}if(t.normal){for(u.set(n),o=0;o<s;o+=3)u[o+s]=-n[o],u[o+s+1]=-n[o+1],u[o+s+2]=-n[o+2];e.normal.values=u}else e.normal=void 0;if(t.bitangent?(d.set(i),d.set(i,s),e.bitangent.values=d):e.bitangent=void 0,t.tangent){var w=e.tangent.values;h.set(w),h.set(w,s),e.tangent.values=h}}if(t.st){var C=e.st.values,E=new Float32Array(6*c);E.set(C),E.set(C,c);for(var A=2*c,x=0;x<2;x++){for(E[A++]=C[0],E[A++]=C[1],o=2;o<c;o+=2){var T=C[o],S=C[o+1];E[A++]=T,E[A++]=S,E[A++]=T,E[A++]=S}E[A++]=C[0],E[A++]=C[1]}e.st.values=E}return e}(c,t);var g=h/3;if(e.shadowVolume){var v=c.normal.values;h=v.length;var _=new Float32Array(6*h);for(p=0;p<h;p++)v[p]=-v[p];_.set(v,h),_=zv(v,4*h,_),c.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:_}),t.normal||(c.normal=void 0)}if(Object(o.a)(e.offsetAttribute)){var b=new Uint8Array(6*g);if(e.offsetAttribute===Hl.TOP)b=nl(b,1,0,g),b=nl(b,1,2*g,4*g);else{var y=e.offsetAttribute===Hl.NONE?0:1;b=nl(b,y)}c.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}var w=l.length,C=g+g,E=lc.createTypedArray(d.length/3,2*w+3*C);E.set(l);var A,x,T,S,D=w;for(p=0;p<w;p+=3){var P=l[p],I=l[p+1],M=l[p+2];E[D++]=M+g,E[D++]=I+g,E[D++]=P+g}for(p=0;p<C;p+=2)T=(A=p+C)+1,S=(x=A+C)+1,E[D++]=A,E[D++]=x,E[D++]=T,E[D++]=T,E[D++]=x,E[D++]=S;return{attributes:c,indices:E}}var Bv=new O,Hv=new O,Vv=new R;function Uv(e,t,n,i,r,o){var a=O.subtract(t,e,Bv);O.normalize(a,a);var s=n.geodeticSurfaceNormal(e,Hv),c=O.cross(a,s,Bv);O.multiplyByScalar(c,i,c);var l=r.latitude,u=r.longitude,h=o.latitude,d=o.longitude;O.add(e,c,Hv),n.cartesianToCartographic(Hv,Vv);var f=Vv.latitude,p=Vv.longitude;l=Math.min(l,f),u=Math.min(u,p),h=Math.max(h,f),d=Math.max(d,p),O.subtract(e,c,Hv),n.cartesianToCartographic(Hv,Vv),f=Vv.latitude,p=Vv.longitude,l=Math.min(l,f),u=Math.min(u,p),h=Math.max(h,f),d=Math.max(d,p),r.latitude=l,r.longitude=u,o.latitude=h,o.longitude=d}var Wv=new O,Gv=new O,qv=new R,Yv=new R;function $v(e,t,n,i,r){e=jv(e,t);var a=rl(e,O.equalsEpsilon),s=a.length;if(s<2||n<=0)return new Se;var c,l,u=.5*n;if(qv.latitude=Number.POSITIVE_INFINITY,qv.longitude=Number.POSITIVE_INFINITY,Yv.latitude=Number.NEGATIVE_INFINITY,Yv.longitude=Number.NEGATIVE_INFINITY,i===Wm.ROUNDED){var h=a[0];O.subtract(h,a[1],Wv),O.normalize(Wv,Wv),O.multiplyByScalar(Wv,u,Wv),O.add(h,Wv,Gv),t.cartesianToCartographic(Gv,Vv),c=Vv.latitude,l=Vv.longitude,qv.latitude=Math.min(qv.latitude,c),qv.longitude=Math.min(qv.longitude,l),Yv.latitude=Math.max(Yv.latitude,c),Yv.longitude=Math.max(Yv.longitude,l)}for(var d=0;d<s-1;++d)Uv(a[d],a[d+1],t,u,qv,Yv);var f=a[s-1];O.subtract(f,a[s-2],Wv),O.normalize(Wv,Wv),O.multiplyByScalar(Wv,u,Wv),O.add(f,Wv,Gv),Uv(f,Gv,t,u,qv,Yv),i===Wm.ROUNDED&&(t.cartesianToCartographic(Gv,Vv),c=Vv.latitude,l=Vv.longitude,qv.latitude=Math.min(qv.latitude,c),qv.longitude=Math.min(qv.longitude,l),Yv.latitude=Math.max(Yv.latitude,c),Yv.longitude=Math.max(Yv.longitude,l));var p=Object(o.a)(r)?r:new Se;return p.north=Yv.latitude,p.south=qv.latitude,p.east=Yv.longitude,p.west=qv.longitude,p}function Xv(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.width;i.a.defined("options.positions",t),i.a.defined("options.width",n);var o=Object(r.a)(e.height,0),a=Object(r.a)(e.extrudedHeight,o);this._positions=t,this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._vertexFormat=Ul.clone(Object(r.a)(e.vertexFormat,Ul.DEFAULT)),this._width=n,this._height=Math.max(o,a),this._extrudedHeight=Math.min(o,a),this._cornerType=Object(r.a)(e.cornerType,Wm.ROUNDED),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._shadowVolume=Object(r.a)(e.shadowVolume,!1),this._workerName="createCorridorGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this.packedLength=1+t.length*O.packedLength+W.packedLength+Ul.packedLength+7}Xv.pack=function(e,t,n){i.a.defined("value",e),i.a.defined("array",t),n=Object(r.a)(n,0);var o=e._positions,a=o.length;t[n++]=a;for(var s=0;s<a;++s,n+=O.packedLength)O.pack(o[s],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n++]=e._shadowVolume?1:0,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var Kv=W.clone(W.UNIT_SPHERE),Qv=new Ul,Zv={positions:void 0,ellipsoid:Kv,vertexFormat:Qv,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};Xv.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);for(var a=e[t++],s=new Array(a),c=0;c<a;++c,t+=O.packedLength)s[c]=O.unpack(e,t);var l=W.unpack(e,t,Kv);t+=W.packedLength;var u=Ul.unpack(e,t,Qv);t+=Ul.packedLength;var h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t++],g=1===e[t++],v=e[t];return Object(o.a)(n)?(n._positions=s,n._ellipsoid=W.clone(l,n._ellipsoid),n._vertexFormat=Ul.clone(u,n._vertexFormat),n._width=h,n._height=d,n._extrudedHeight=f,n._cornerType=p,n._granularity=m,n._shadowVolume=g,n._offsetAttribute=-1===v?void 0:v,n):(Zv.positions=s,Zv.width=h,Zv.height=d,Zv.extrudedHeight=f,Zv.cornerType=p,Zv.granularity=m,Zv.shadowVolume=g,Zv.offsetAttribute=-1===v?void 0:v,new Xv(Zv))},Xv.computeRectangle=function(e,t){var n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,o=e.width;return i.a.defined("options.positions",n),i.a.defined("options.width",o),$v(n,Object(r.a)(e.ellipsoid,W.WGS84),o,Object(r.a)(e.cornerType,Wm.ROUNDED),t)},Xv.createGeometry=function(e){var t=e._positions,n=e._width,i=e._ellipsoid;t=jv(t,i);var r=rl(t,O.equalsEpsilon);if(!(r.length<2||n<=0)){var a,s=e._height,c=e._extrudedHeight,l=!d.equalsEpsilon(s,c,0,d.EPSILON2),u=e._vertexFormat,h={ellipsoid:i,positions:r,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!0};if(l)h.height=s,h.extrudedHeight=c,h.shadowVolume=e._shadowVolume,h.offsetAttribute=e._offsetAttribute,a=kv(h,u);else if((a=Nv(xv.computePositions(h),u,i)).attributes.position.values=Zp.scaleToGeodeticHeight(a.attributes.position.values,s,i),Object(o.a)(e._offsetAttribute)){var f=e._offsetAttribute===Hl.NONE?0:1,p=a.attributes.position.values.length,m=new Uint8Array(p/3);nl(m,f),a.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:m})}var g=a.attributes,v=gt.fromVertices(g.position.values,void 0,3);return u.position||(a.attributes.position.values=void 0),new zl({attributes:g,indices:a.indices,primitiveType:xl.TRIANGLES,boundingSphere:v,offsetAttribute:e._offsetAttribute})}},Xv.createShadowVolume=function(e,t,n){var i=e._granularity,r=e._ellipsoid,o=t(i,r),a=n(i,r);return new Xv({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:r,granularity:i,extrudedHeight:o,height:a,vertexFormat:Ul.POSITION_ONLY,shadowVolume:!0})},Object.defineProperties(Xv.prototype,{rectangle:{get:function(){return Object(o.a)(this._rectangle)||(this._rectangle=$v(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var Jv=Xv,e_=new O,t_=new O,n_=new O;function i_(e,t){var n,i,r,a=[],s=e.positions,c=e.corners,l=e.endPositions,u=new Bl,h=0,d=0,f=0;for(i=0;i<s.length;i+=2)h+=r=s[i].length-3,f+=r/3*4,d+=s[i+1].length-3;for(h+=3,d+=3,i=0;i<c.length;i++){n=c[i];var p=c[i].leftPositions;Object(o.a)(p)?(h+=r=p.length,f+=r/3*2):(d+=r=c[i].rightPositions.length,f+=r/3*2)}var m,g=Object(o.a)(l);g&&(h+=m=l[0].length-3,d+=m,f+=4*(m/=3));var v,_,b,y,w,C,E=h+d,A=new Float64Array(E),x=0,T=E-1,S=m/2,D=lc.createTypedArray(E/3,f+4),P=0;if(D[P++]=x/3,D[P++]=(T-2)/3,g){a.push(x/3),C=e_,w=t_;var I=l[0];for(i=0;i<S;i++)C=O.fromArray(I,3*(S-1-i),C),w=O.fromArray(I,3*(S+i),w),xv.addAttribute(A,w,x),xv.addAttribute(A,C,void 0,T),y=(_=x/3)+1,b=(v=(T-2)/3)-1,D[P++]=v,D[P++]=b,D[P++]=_,D[P++]=y,x+=3,T-=3}var M=0,R=s[M++],L=s[M++];for(A.set(R,x),A.set(L,T-L.length+1),r=L.length-3,a.push(x/3,(T-2)/3),i=0;i<r;i+=3)y=(_=x/3)+1,b=(v=(T-2)/3)-1,D[P++]=v,D[P++]=b,D[P++]=_,D[P++]=y,x+=3,T-=3;for(i=0;i<c.length;i++){var j,F,N=(n=c[i]).leftPositions,z=n.rightPositions,k=n_;if(Object(o.a)(N)){for(T-=3,F=b,a.push(y),j=0;j<N.length/3;j++)k=O.fromArray(N,3*j,k),D[P++]=F-j-1,D[P++]=F-j,xv.addAttribute(A,k,void 0,T),T-=3;a.push(F-Math.floor(N.length/6)),t===Wm.BEVELED&&a.push((T-2)/3+1),x+=3}else{for(x+=3,F=y,a.push(b),j=0;j<z.length/3;j++)k=O.fromArray(z,3*j,k),D[P++]=F+j,D[P++]=F+j+1,xv.addAttribute(A,k,x),x+=3;a.push(F+Math.floor(z.length/6)),t===Wm.BEVELED&&a.push(x/3-1),T-=3}for(R=s[M++],L=s[M++],R.splice(0,3),L.splice(L.length-3,3),A.set(R,x),A.set(L,T-L.length+1),r=L.length-3,j=0;j<L.length;j+=3)_=(y=x/3)-1,v=(b=(T-2)/3)+1,D[P++]=v,D[P++]=b,D[P++]=_,D[P++]=y,x+=3,T-=3;x-=3,T+=3,a.push(x/3,(T-2)/3)}if(g){x+=3,T-=3,C=e_,w=t_;var B=l[1];for(i=0;i<S;i++)C=O.fromArray(B,3*(m-i-1),C),w=O.fromArray(B,3*i,w),xv.addAttribute(A,C,void 0,T),xv.addAttribute(A,w,x),_=(y=x/3)-1,v=(b=(T-2)/3)+1,D[P++]=v,D[P++]=b,D[P++]=_,D[P++]=y,x+=3,T-=3;a.push(x/3)}else a.push(x/3,(T-2)/3);return D[P++]=x/3,D[P++]=(T-2)/3,u.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:A}),{attributes:u,indices:D,wallIndices:a}}function r_(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.width;i.a.typeOf.object("options.positions",t),i.a.typeOf.number("options.width",n);var o=Object(r.a)(e.height,0),a=Object(r.a)(e.extrudedHeight,o);this._positions=t,this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._width=n,this._height=Math.max(o,a),this._extrudedHeight=Math.min(o,a),this._cornerType=Object(r.a)(e.cornerType,Wm.ROUNDED),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*O.packedLength+W.packedLength+6}r_.pack=function(e,t,n){i.a.typeOf.object("value",e),i.a.typeOf.object("array",t),n=Object(r.a)(n,0);var o=e._positions,a=o.length;t[n++]=a;for(var s=0;s<a;++s,n+=O.packedLength)O.pack(o[s],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var o_=W.clone(W.UNIT_SPHERE),a_={positions:void 0,ellipsoid:o_,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};r_.unpack=function(e,t,n){i.a.typeOf.object("array",e),t=Object(r.a)(t,0);for(var a=e[t++],s=new Array(a),c=0;c<a;++c,t+=O.packedLength)s[c]=O.unpack(e,t);var l=W.unpack(e,t,o_);t+=W.packedLength;var u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t];return Object(o.a)(n)?(n._positions=s,n._ellipsoid=W.clone(l,n._ellipsoid),n._width=u,n._height=h,n._extrudedHeight=d,n._cornerType=f,n._granularity=p,n._offsetAttribute=-1===m?void 0:m,n):(a_.positions=s,a_.width=u,a_.height=h,a_.extrudedHeight=d,a_.cornerType=f,a_.granularity=p,a_.offsetAttribute=-1===m?void 0:m,new r_(a_))},r_.createGeometry=function(e){var t=e._positions,n=e._width,i=e._ellipsoid;t=function(e,t){for(var n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}(t,i);var r=rl(t,O.equalsEpsilon);if(!(r.length<2||n<=0)){var a,s=e._height,c=e._extrudedHeight,l=!d.equalsEpsilon(s,c,0,d.EPSILON2),u={ellipsoid:i,positions:r,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1};if(l)u.height=s,u.extrudedHeight=c,u.offsetAttribute=e._offsetAttribute,a=function(e){var t=e.ellipsoid,n=i_(xv.computePositions(e),e.cornerType),i=n.wallIndices,r=e.height,a=e.extrudedHeight,s=n.attributes,c=n.indices,l=s.position.values,u=l.length,h=new Float64Array(u);h.set(l);var d,f=new Float64Array(2*u);if(l=Zp.scaleToGeodeticHeight(l,r,t),h=Zp.scaleToGeodeticHeight(h,a,t),f.set(l),f.set(h,u),s.position.values=f,u/=3,Object(o.a)(e.offsetAttribute)){var p=new Uint8Array(2*u);if(e.offsetAttribute===Hl.TOP)p=nl(p,1,0,u);else{var m=e.offsetAttribute===Hl.NONE?0:1;p=nl(p,m)}s.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:p})}var g=c.length,v=lc.createTypedArray(f.length/3,2*(g+i.length));v.set(c);var _,b,y=g;for(d=0;d<g;d+=2){var w=c[d],O=c[d+1];v[y++]=w+u,v[y++]=O+u}for(d=0;d<i.length;d++)b=(_=i[d])+u,v[y++]=_,v[y++]=b;return{attributes:s,indices:v}}(u);else if((a=i_(xv.computePositions(u),u.cornerType)).attributes.position.values=Zp.scaleToGeodeticHeight(a.attributes.position.values,s,i),Object(o.a)(e._offsetAttribute)){var h=a.attributes.position.values.length,f=new Uint8Array(h/3),p=e._offsetAttribute===Hl.NONE?0:1;nl(f,p),a.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}var m=a.attributes,g=gt.fromVertices(m.position.values,void 0,3);return new zl({attributes:m,indices:a.indices,primitiveType:xl.LINES,boundingSphere:g,offsetAttribute:e._offsetAttribute})}};var s_=r_;var c_,l_=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},u_=n(42),h_="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4NzdlNDVhMy1mNDAxLTQ5MWMtODhkYS00MTc1MTU4NzFmNzciLCJpZCI6MjU5LCJzY29wZXMiOlsiYXNyIiwiZ2MiXSwiaWF0IjoxNTkzNjI4MDI3fQ.sqnKP2DNn0soCyh1t9taAa2xkbZ6EIn0Z7_VwujTCtQ",d_={};d_.defaultAccessToken=h_,d_.defaultServer=new _t.a({url:"https://api.cesium.com/"}),d_.getDefaultTokenCredit=function(e){if(e===h_){if(!Object(o.a)(c_)){c_=new yn('<b> This application is using Cesium\'s default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at <a href="https://cesium.com">https://cesium.com</a>.</b>',!0)}return c_}};var f_=d_;function p_(e,t){var n;i.a.defined("endpoint",e),i.a.defined("endpointResource",t);var r=e.externalType,a=Object(o.a)(r);if(a){if("3DTILES"!==r&&"STK_TERRAIN_SERVER"!==r)throw new de.a("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");n={url:e.options.url}}else n={url:e.url,retryAttempts:1,retryCallback:m_};_t.a.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=a?void 0:new u_.a(e.url).authority,this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=a}function m_(e,t){var n=Object(r.a)(e._ionRoot,e),i=n._ionEndpointResource;return Object(o.a)(t)&&(401===t.statusCode||t.target instanceof Image)?(Object(o.a)(n._pendingPromise)||(n._pendingPromise=i.fetchJson().then((function(e){return n._ionEndpoint=e,e})).always((function(e){return n._pendingPromise=void 0,e}))),n._pendingPromise.then((function(t){return e._ionEndpoint=t,!0}))):Yt.a.resolve(!1)}Object(o.a)(Object.create)&&(p_.prototype=Object.create(_t.a.prototype),p_.prototype.constructor=p_),p_.fromAssetId=function(e,t){var n=p_._createEndpointResource(e,t);return n.fetchJson().then((function(e){return new p_(e,n)}))},Object.defineProperties(p_.prototype,{credits:{get:function(){return Object(o.a)(this._ionRoot)?this._ionRoot.credits:(Object(o.a)(this._credits)||(this._credits=p_.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource)),this._credits)}}}),p_.getCreditsFromEndpoint=function(e,t){var n=e.attributions.map(yn.getIonCredit),i=f_.getDefaultTokenCredit(t.queryParameters.access_token);return Object(o.a)(i)&&n.push(yn.clone(i)),n},p_.prototype.clone=function(e){var t=Object(r.a)(this._ionRoot,this);return Object(o.a)(e)||(e=new p_(t._ionEndpoint,t._ionEndpointResource)),(e=_t.a.prototype.clone.call(this,e))._ionRoot=t,e._isExternal=this._isExternal,e},p_.prototype.fetchImage=function(e){if(!this._isExternal){var t=e;e={preferBlob:!0},Object(o.a)(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return _t.a.prototype.fetchImage.call(this,e)},p_.prototype._makeRequest=function(e){return this._isExternal||new u_.a(this.url).authority!==this._ionEndpointDomain||(Object(o.a)(e.headers)||(e.headers={}),e.headers.Authorization="Bearer "+this._ionEndpoint.accessToken),_t.a.prototype._makeRequest.call(this,e)},p_._createEndpointResource=function(e,t){i.a.defined("assetId",e),t=Object(r.a)(t,r.a.EMPTY_OBJECT);var n=Object(r.a)(t.server,f_.defaultServer),a=Object(r.a)(t.accessToken,f_.defaultAccessToken);n=_t.a.createIfNeeded(n);var s={url:"v1/assets/"+e+"/endpoint"};return Object(o.a)(a)&&(s.queryParameters={access_token:a}),n.getDerivedResource(s)};var g_=p_;var v_=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),new Zu({url:g_.fromAssetId(1),requestVertexNormals:Object(r.a)(e.requestVertexNormals,!1),requestWaterMask:Object(r.a)(e.requestWaterMask,!1)})};function __(e){this.planes=Object(r.a)(e,[])}var b_=[new O,new O,new O];O.clone(O.UNIT_X,b_[0]),O.clone(O.UNIT_Y,b_[1]),O.clone(O.UNIT_Z,b_[2]);var y_=new O,w_=new O,O_=new Fi(new O(1,0,0),0);__.fromBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("boundingSphere is required.");Object(o.a)(t)||(t=new __);var n=b_.length,i=t.planes;i.length=2*n;for(var r=e.center,s=e.radius,c=0,l=0;l<n;++l){var u=b_[l],h=i[c],d=i[c+1];Object(o.a)(h)||(h=i[c]=new he),Object(o.a)(d)||(d=i[c+1]=new he),O.multiplyByScalar(u,-s,y_),O.add(r,y_,y_),h.x=u.x,h.y=u.y,h.z=u.z,h.w=-O.dot(u,y_),O.multiplyByScalar(u,s,y_),O.add(r,y_,y_),d.x=-u.x,d.y=-u.y,d.z=-u.z,d.w=-O.dot(O.negate(u,w_),y_),c+=2}return t},__.prototype.computeVisibility=function(e){if(!Object(o.a)(e))throw new a.a("boundingVolume is required.");for(var t=this.planes,n=!1,i=0,r=t.length;i<r;++i){var s=e.intersectPlane(Fi.fromCartesian4(t[i],O_));if(s===Y.OUTSIDE)return Y.OUTSIDE;s===Y.INTERSECTING&&(n=!0)}return n?Y.INTERSECTING:Y.INSIDE},__.prototype.computeVisibilityWithPlaneMask=function(e,t){if(!Object(o.a)(e))throw new a.a("boundingVolume is required.");if(!Object(o.a)(t))throw new a.a("parentPlaneMask is required.");if(t===__.MASK_OUTSIDE||t===__.MASK_INSIDE)return t;for(var n=__.MASK_INSIDE,i=this.planes,r=0,s=i.length;r<s;++r){var c=r<31?1<<r:0;if(!(r<31&&0===(t&c))){var l=e.intersectPlane(Fi.fromCartesian4(i[r],O_));if(l===Y.OUTSIDE)return __.MASK_OUTSIDE;l===Y.INTERSECTING&&(n|=c)}}return n},__.MASK_OUTSIDE=4294967295,__.MASK_INSIDE=0,__.MASK_INDETERMINATE=2147483647;var C_=__,E_={computePositions:function(e,t,n,i,r){var o,a=.5*e,s=-a,c=i+i,l=new Float64Array(3*(r?2*c:c)),u=0,h=0,f=r?3*c:0,p=r?3*(c+i):3*i;for(o=0;o<i;o++){var m=o/i*d.TWO_PI,g=Math.cos(m),v=Math.sin(m),_=g*n,b=v*n,y=g*t,w=v*t;l[h+f]=_,l[h+f+1]=b,l[h+f+2]=s,l[h+p]=y,l[h+p+1]=w,l[h+p+2]=a,h+=3,r&&(l[u++]=_,l[u++]=b,l[u++]=s,l[u++]=y,l[u++]=w,l[u++]=a)}return l}},A_=E_,x_=new Mt,T_=new O,S_=new O,D_=new O,P_=new O;function I_(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).length,n=e.topRadius,i=e.bottomRadius,s=Object(r.a)(e.vertexFormat,Ul.DEFAULT),c=Object(r.a)(e.slices,128);if(!Object(o.a)(t))throw new a.a("options.length must be defined.");if(!Object(o.a)(n))throw new a.a("options.topRadius must be defined.");if(!Object(o.a)(i))throw new a.a("options.bottomRadius must be defined.");if(c<3)throw new a.a("options.slices must be greater than or equal to 3.");if(Object(o.a)(e.offsetAttribute)&&e.offsetAttribute===Hl.TOP)throw new a.a("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=Ul.clone(s),this._slices=c,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}I_.packedLength=Ul.packedLength+5,I_.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var M_,R_=new Ul,L_={vertexFormat:R_,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};I_.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");t=Object(r.a)(t,0);var i=Ul.unpack(e,t,R_);t+=Ul.packedLength;var s=e[t++],c=e[t++],l=e[t++],u=e[t++],h=e[t];return Object(o.a)(n)?(n._vertexFormat=Ul.clone(i,n._vertexFormat),n._length=s,n._topRadius=c,n._bottomRadius=l,n._slices=u,n._offsetAttribute=-1===h?void 0:h,n):(L_.length=s,L_.topRadius=c,L_.bottomRadius=l,L_.slices=u,L_.offsetAttribute=-1===h?void 0:h,new I_(L_))},I_.createGeometry=function(e){var t=e._length,n=e._topRadius,i=e._bottomRadius,r=e._vertexFormat,a=e._slices;if(!(t<=0||n<0||i<0||0===n&&0===i)){var s,c=a+a,l=a+c,u=c+c,h=A_.computePositions(t,n,i,a,!0),f=r.st?new Float32Array(2*u):void 0,p=r.normal?new Float32Array(3*u):void 0,m=r.tangent?new Float32Array(3*u):void 0,g=r.bitangent?new Float32Array(3*u):void 0,v=r.normal||r.tangent||r.bitangent;if(v){var _=r.tangent||r.bitangent,b=0,y=0,w=0,C=Math.atan2(i-n,t),E=T_;E.z=Math.sin(C);var A=Math.cos(C),x=D_,T=S_;for(s=0;s<a;s++){var S=s/a*d.TWO_PI,D=A*Math.cos(S),P=A*Math.sin(S);v&&(E.x=D,E.y=P,_&&(x=O.normalize(O.cross(O.UNIT_Z,E,x),x)),r.normal&&(p[b++]=E.x,p[b++]=E.y,p[b++]=E.z,p[b++]=E.x,p[b++]=E.y,p[b++]=E.z),r.tangent&&(m[y++]=x.x,m[y++]=x.y,m[y++]=x.z,m[y++]=x.x,m[y++]=x.y,m[y++]=x.z),r.bitangent&&(T=O.normalize(O.cross(E,x,T),T),g[w++]=T.x,g[w++]=T.y,g[w++]=T.z,g[w++]=T.x,g[w++]=T.y,g[w++]=T.z))}for(s=0;s<a;s++)r.normal&&(p[b++]=0,p[b++]=0,p[b++]=-1),r.tangent&&(m[y++]=1,m[y++]=0,m[y++]=0),r.bitangent&&(g[w++]=0,g[w++]=-1,g[w++]=0);for(s=0;s<a;s++)r.normal&&(p[b++]=0,p[b++]=0,p[b++]=1),r.tangent&&(m[y++]=1,m[y++]=0,m[y++]=0),r.bitangent&&(g[w++]=0,g[w++]=1,g[w++]=0)}var I=12*a-12,M=lc.createTypedArray(u,I),R=0,L=0;for(s=0;s<a-1;s++)M[R++]=L,M[R++]=L+2,M[R++]=L+3,M[R++]=L,M[R++]=L+3,M[R++]=L+1,L+=2;for(M[R++]=c-2,M[R++]=0,M[R++]=1,M[R++]=c-2,M[R++]=1,M[R++]=c-1,s=1;s<a-1;s++)M[R++]=c+s+1,M[R++]=c+s,M[R++]=c;for(s=1;s<a-1;s++)M[R++]=l,M[R++]=l+s,M[R++]=l+s+1;var j=0;if(r.st){var F=Math.max(n,i);for(s=0;s<u;s++){var N=O.fromArray(h,3*s,P_);f[j++]=(N.x+F)/(2*F),f[j++]=(N.y+F)/(2*F)}}var z=new Bl;r.position&&(z.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:h})),r.normal&&(z.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:p})),r.tangent&&(z.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:m})),r.bitangent&&(z.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:g})),r.st&&(z.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:f})),x_.x=.5*t,x_.y=Math.max(i,n);var k=new gt(O.ZERO,Mt.magnitude(x_));if(Object(o.a)(e._offsetAttribute)){t=h.length;var B=new Uint8Array(t/3),H=e._offsetAttribute===Hl.NONE?0:1;nl(B,H),z.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}return new zl({attributes:z,indices:M,primitiveType:xl.TRIANGLES,boundingSphere:k,offsetAttribute:e._offsetAttribute})}},I_.getUnitCylinder=function(){return Object(o.a)(M_)||(M_=I_.createGeometry(new I_({topRadius:1,bottomRadius:1,length:1,vertexFormat:Ul.POSITION_ONLY}))),M_};var j_=I_,F_=new Mt;function N_(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).length,n=e.topRadius,s=e.bottomRadius,c=Object(r.a)(e.slices,128),l=Math.max(Object(r.a)(e.numberOfVerticalLines,16),0);if(i.a.typeOf.number("options.positions",t),i.a.typeOf.number("options.topRadius",n),i.a.typeOf.number("options.bottomRadius",s),i.a.typeOf.number.greaterThanOrEquals("options.slices",c,3),Object(o.a)(e.offsetAttribute)&&e.offsetAttribute===Hl.TOP)throw new a.a("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");this._length=t,this._topRadius=n,this._bottomRadius=s,this._slices=c,this._numberOfVerticalLines=l,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}N_.packedLength=6,N_.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n++]=e._numberOfVerticalLines,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var z_={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};N_.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=e[t++],s=e[t++],c=e[t++],l=e[t++],u=e[t++],h=e[t];return Object(o.a)(n)?(n._length=a,n._topRadius=s,n._bottomRadius=c,n._slices=l,n._numberOfVerticalLines=u,n._offsetAttribute=-1===h?void 0:h,n):(z_.length=a,z_.topRadius=s,z_.bottomRadius=c,z_.slices=l,z_.numberOfVerticalLines=u,z_.offsetAttribute=-1===h?void 0:h,new N_(z_))},N_.createGeometry=function(e){var t=e._length,n=e._topRadius,i=e._bottomRadius,r=e._slices,a=e._numberOfVerticalLines;if(!(t<=0||n<0||i<0||0===n&&0===i)){var s,c=2*r,l=A_.computePositions(t,n,i,r,!1),u=2*r;if(a>0){var h=Math.min(a,r);s=Math.round(r/h),u+=h}var d,f=lc.createTypedArray(c,2*u),p=0;for(d=0;d<r-1;d++)f[p++]=d,f[p++]=d+1,f[p++]=d+r,f[p++]=d+1+r;if(f[p++]=r-1,f[p++]=0,f[p++]=r+r-1,f[p++]=r,a>0)for(d=0;d<r;d+=s)f[p++]=d,f[p++]=d+r;var m=new Bl;m.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:l}),F_.x=.5*t,F_.y=Math.max(i,n);var g=new gt(O.ZERO,Mt.magnitude(F_));if(Object(o.a)(e._offsetAttribute)){t=l.length;var v=new Uint8Array(t/3),_=e._offsetAttribute===Hl.NONE?0:1;nl(v,_),m.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:v})}return new zl({attributes:m,indices:f,primitiveType:xl.LINES,boundingSphere:g,offsetAttribute:e._offsetAttribute})}};var k_=N_;function B_(e,t){if(B_.passThroughDataForTesting)return t;i.a.typeOf.object("key",e),i.a.typeOf.object("data",t);var n=e.byteLength;if(0===n||n%4!==0)throw new de.a("The length of key must be greater than 0 and a multiple of 4.");var r=new DataView(t),o=r.getUint32(0,!0);if(1953029805===o||2917034100===o)return t;for(var a,s=new DataView(e),c=0,l=t.byteLength,u=l-l%8,h=n,d=8;c<u;)for(a=d=(d+8)%24;c<u&&a<h;)r.setUint32(c,r.getUint32(c,!0)^s.getUint32(a,!0),!0),r.setUint32(c+4,r.getUint32(c+4,!0)^s.getUint32(a+4,!0),!0),c+=8,a+=24;if(c<l)for(a>=h&&(a=d=(d+8)%24);c<l;)r.setUint8(c,r.getUint8(c)^s.getUint8(a)),c++,a++}B_.passThroughDataForTesting=!1;var H_=B_;function V_(e){this.proxy=e}V_.prototype.getURL=function(e){var t=-1===this.proxy.indexOf("?")?"?":"";return this.proxy+t+encodeURIComponent(e)};var U_={};function W_(e,t){if(!Object(o.a)(e))throw new a.a("identifier is required.");Object(o.a)(U_[e])||(U_[e]=!0,console.warn(Object(r.a)(t,e)))}W_.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.",W_.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored",W_.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored",W_.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var G_=W_;var q_=function(e,t){if(!Object(o.a)(e)||!Object(o.a)(t))throw new a.a("identifier and message are required.");G_(e,t)};function Y_(e,t){e=Object(r.a)(e,0),this._near=e,t=Object(r.a)(t,Number.MAX_VALUE),this._far=t}Object.defineProperties(Y_.prototype,{near:{get:function(){return this._near},set:function(e){this._near=e}},far:{get:function(){return this._far},set:function(e){this._far=e}}}),Y_.packedLength=2,Y_.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),t[n++]=e.near,t[n]=e.far,t},Y_.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");return t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Y_),n.near=e[t++],n.far=e[t],n},Y_.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.near===t.near&&e.far===t.far},Y_.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)||(t=new Y_),t.near=e.near,t.far=e.far,t},Y_.prototype.clone=function(e){return Y_.clone(this,e)},Y_.prototype.equals=function(e){return Y_.equals(this,e)};var $_=Y_;function X_(e,t){if(e=Object(r.a)(e,0),(t=Object(r.a)(t,Number.MAX_VALUE))<=e)throw new a.a("far distance must be greater than near distance.");this.value=new Float32Array([e,t])}Object.defineProperties(X_.prototype,{componentDatatype:{get:function(){return Ds.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}}),X_.fromDistanceDisplayCondition=function(e){if(!Object(o.a)(e))throw new a.a("distanceDisplayCondition is required.");if(e.far<=e.near)throw new a.a("distanceDisplayCondition.far distance must be greater than distanceDisplayCondition.near distance.");return new X_(e.near,e.far)},X_.toValue=function(e,t){if(!Object(o.a)(e))throw new a.a("distanceDisplayCondition is required.");return Object(o.a)(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var K_=X_;function Q_(){this.head=void 0,this.tail=void 0,this._length=0}function Z_(e,t,n){this.item=e,this.previous=t,this.next=n}function J_(e,t){Object(o.a)(t.previous)&&Object(o.a)(t.next)?(t.previous.next=t.next,t.next.previous=t.previous):Object(o.a)(t.previous)?(t.previous.next=void 0,e.tail=t.previous):Object(o.a)(t.next)?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}Object.defineProperties(Q_.prototype,{length:{get:function(){return this._length}}}),Q_.prototype.add=function(e){var t=new Z_(e,this.tail,void 0);return Object(o.a)(this.tail)?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),++this._length,t},Q_.prototype.remove=function(e){Object(o.a)(e)&&(J_(this,e),--this._length)},Q_.prototype.splice=function(e,t){if(e!==t){J_(this,t);var n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e}};var eb=Q_;void 0===Date.now&&(Date.now=function(){return(new Date).valueOf()});var tb=tb||function(){var e=[];return{REVISION:"13",getAll:function(){return e},removeAll:function(){e=[]},add:function(t){e.push(t)},remove:function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)},update:function(t){if(0===e.length)return!1;var n=0;for(t=void 0!==t?t:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();n<e.length;)e[n].update(t)?n++:e.splice(n,1);return!0}}}();tb.Tween=function(e){var t=e,n={},i={},r={},o=1e3,a=0,s=!1,c=!1,l=!1,u=0,h=null,d=tb.Easing.Linear.None,f=tb.Interpolation.Linear,p=[],m=null,g=!1,v=null,_=null,b=null;for(var y in e)n[y]=parseFloat(e[y],10);this.to=function(e,t){return void 0!==t&&(o=t),i=e,this},this.start=function(e){for(var o in tb.add(this),c=!0,g=!1,h=void 0!==e?e:"undefined"!==typeof window&&void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now(),h+=u,i){if(i[o]instanceof Array){if(0===i[o].length)continue;i[o]=[t[o]].concat(i[o])}n[o]=t[o],n[o]instanceof Array===!1&&(n[o]*=1),r[o]=n[o]||0}return this},this.stop=function(){return c?(tb.remove(this),c=!1,null!==b&&b.call(t),this.stopChainedTweens(),this):this},this.stopChainedTweens=function(){for(var e=0,t=p.length;e<t;e++)p[e].stop()},this.delay=function(e){return u=e,this},this.repeat=function(e){return a=e,this},this.yoyo=function(e){return s=e,this},this.easing=function(e){return d=e,this},this.interpolation=function(e){return f=e,this},this.chain=function(){return p=arguments,this},this.onStart=function(e){return m=e,this},this.onUpdate=function(e){return v=e,this},this.onComplete=function(e){return _=e,this},this.onStop=function(e){return b=e,this},this.update=function(e){var c;if(e<h)return!0;!1===g&&(null!==m&&m.call(t),g=!0);var b=(e-h)/o,y=d(b=b>1?1:b);for(c in i){var w=n[c]||0,O=i[c];O instanceof Array?t[c]=f(O,y):("string"===typeof O&&(O=w+parseFloat(O,10)),"number"===typeof O&&(t[c]=w+(O-w)*y))}if(null!==v&&v.call(t,y),1==b){if(a>0){for(c in isFinite(a)&&a--,r){if("string"===typeof i[c]&&(r[c]=r[c]+parseFloat(i[c],10)),s){var C=r[c];r[c]=i[c],i[c]=C}n[c]=r[c]}return s&&(l=!l),h=e+u,!0}null!==_&&_.call(t);for(var E=0,A=p.length;E<A;E++)p[E].start(e);return!1}return!0}},tb.Easing={Linear:{None:function(e){return e}},Quadratic:{In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}},Cubic:{In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}},Quartic:{In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}},Quintic:{In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}},Sinusoidal:{In:function(e){return 1-Math.cos(e*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return.5*(1-Math.cos(Math.PI*e))}},Exponential:{In:function(e){return 0===e?0:Math.pow(1024,e-1)},Out:function(e){return 1===e?1:1-Math.pow(2,-10*e)},InOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(2-Math.pow(2,-10*(e-1)))}},Circular:{In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}},Elastic:{In:function(e){var t,n=.1;return 0===e?0:1===e?1:(!n||n<1?(n=1,t=.1):t=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/.4))},Out:function(e){var t,n=.1;return 0===e?0:1===e?1:(!n||n<1?(n=1,t=.1):t=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/.4)+1)},InOut:function(e){var t,n=.1,i=.4;return 0===e?0:1===e?1:(!n||n<1?(n=1,t=.1):t=i*Math.asin(1/n)/(2*Math.PI),(e*=2)<1?n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/i)*.5+1)}},Back:{In:function(e){var t=1.70158;return e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?e*e*((t+1)*e-t)*.5:.5*((e-=2)*e*((t+1)*e+t)+2)}},Bounce:{In:function(e){return 1-tb.Easing.Bounce.Out(1-e)},Out:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},InOut:function(e){return e<.5?.5*tb.Easing.Bounce.In(2*e):.5*tb.Easing.Bounce.Out(2*e-1)+.5}}},tb.Interpolation={Linear:function(e,t){var n=e.length-1,i=n*t,r=Math.floor(i),o=tb.Interpolation.Utils.Linear;return t<0?o(e[0],e[1],i):t>1?o(e[n],e[n-1],n-i):o(e[r],e[r+1>n?n:r+1],i-r)},Bezier:function(e,t){var n,i=0,r=e.length-1,o=Math.pow,a=tb.Interpolation.Utils.Bernstein;for(n=0;n<=r;n++)i+=o(1-t,r-n)*o(t,n)*e[n]*a(r,n);return i},CatmullRom:function(e,t){var n=e.length-1,i=n*t,r=Math.floor(i),o=tb.Interpolation.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(r=Math.floor(i=n*(1+t))),o(e[(r-1+n)%n],e[r],e[(r+1)%n],e[(r+2)%n],i-r)):t<0?e[0]-(o(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(o(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):o(e[r?r-1:0],e[r],e[n<r+1?n:r+1],e[n<r+2?n:r+2],i-r)},Utils:{Linear:function(e,t,n){return(t-e)*n+e},Bernstein:function(e,t){var n=tb.Interpolation.Utils.Factorial;return n(e)/n(t)/n(e-t)},Factorial:function(){var e=[1];return function(t){var n,i=1;if(e[t])return e[t];for(n=t;n>1;n--)i*=n;return e[t]=i}}(),CatmullRom:function(e,t,n,i,r){var o=.5*(n-e),a=.5*(i-t),s=r*r;return(2*t-2*n+o+a)*(r*s)+(-3*t+3*n-2*o-a)*s+o*r+t}}};var nb=tb,ib={LINEAR_NONE:nb.Easing.Linear.None,QUADRACTIC_IN:nb.Easing.Quadratic.In,QUADRACTIC_OUT:nb.Easing.Quadratic.Out,QUADRACTIC_IN_OUT:nb.Easing.Quadratic.InOut,CUBIC_IN:nb.Easing.Cubic.In,CUBIC_OUT:nb.Easing.Cubic.Out,CUBIC_IN_OUT:nb.Easing.Cubic.InOut,QUARTIC_IN:nb.Easing.Quartic.In,QUARTIC_OUT:nb.Easing.Quartic.Out,QUARTIC_IN_OUT:nb.Easing.Quartic.InOut,QUINTIC_IN:nb.Easing.Quintic.In,QUINTIC_OUT:nb.Easing.Quintic.Out,QUINTIC_IN_OUT:nb.Easing.Quintic.InOut,SINUSOIDAL_IN:nb.Easing.Sinusoidal.In,SINUSOIDAL_OUT:nb.Easing.Sinusoidal.Out,SINUSOIDAL_IN_OUT:nb.Easing.Sinusoidal.InOut,EXPONENTIAL_IN:nb.Easing.Exponential.In,EXPONENTIAL_OUT:nb.Easing.Exponential.Out,EXPONENTIAL_IN_OUT:nb.Easing.Exponential.InOut,CIRCULAR_IN:nb.Easing.Circular.In,CIRCULAR_OUT:nb.Easing.Circular.Out,CIRCULAR_IN_OUT:nb.Easing.Circular.InOut,ELASTIC_IN:nb.Easing.Elastic.In,ELASTIC_OUT:nb.Easing.Elastic.Out,ELASTIC_IN_OUT:nb.Easing.Elastic.InOut,BACK_IN:nb.Easing.Back.In,BACK_OUT:nb.Easing.Back.Out,BACK_IN_OUT:nb.Easing.Back.InOut,BOUNCE_IN:nb.Easing.Bounce.In,BOUNCE_OUT:nb.Easing.Bounce.Out,BOUNCE_IN_OUT:nb.Easing.Bounce.InOut},rb=Object.freeze(ib),ob=new O,ab=new O,sb=new O,cb=new O,lb=new O,ub=new O(1,1,1),hb=Math.cos,db=Math.sin;function fb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.radii,ub),n=Object(r.a)(e.innerRadii,t),i=Object(r.a)(e.minimumClock,0),o=Object(r.a)(e.maximumClock,d.TWO_PI),s=Object(r.a)(e.minimumCone,0),c=Object(r.a)(e.maximumCone,d.PI),l=Math.round(Object(r.a)(e.stackPartitions,64)),u=Math.round(Object(r.a)(e.slicePartitions,64)),h=Object(r.a)(e.vertexFormat,Ul.DEFAULT);if(u<3)throw new a.a("options.slicePartitions cannot be less than three.");if(l<3)throw new a.a("options.stackPartitions cannot be less than three.");this._radii=O.clone(t),this._innerRadii=O.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=s,this._maximumCone=c,this._stackPartitions=l,this._slicePartitions=u,this._vertexFormat=Ul.clone(h),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}fb.packedLength=2*O.packedLength+Ul.packedLength+7,fb.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),O.pack(e._radii,t,n),n+=O.packedLength,O.pack(e._innerRadii,t,n),n+=O.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var pb,mb=new O,gb=new O,vb=new Ul,_b={radii:mb,innerRadii:gb,vertexFormat:vb,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};fb.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");t=Object(r.a)(t,0);var i=O.unpack(e,t,mb);t+=O.packedLength;var s=O.unpack(e,t,gb);t+=O.packedLength;var c=Ul.unpack(e,t,vb);t+=Ul.packedLength;var l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t];return Object(o.a)(n)?(n._radii=O.clone(i,n._radii),n._innerRadii=O.clone(s,n._innerRadii),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._minimumClock=l,n._maximumClock=u,n._minimumCone=h,n._maximumCone=d,n._stackPartitions=f,n._slicePartitions=p,n._offsetAttribute=-1===m?void 0:m,n):(_b.minimumClock=l,_b.maximumClock=u,_b.minimumCone=h,_b.maximumCone=d,_b.stackPartitions=f,_b.slicePartitions=p,_b.offsetAttribute=-1===m?void 0:m,new fb(_b))},fb.createGeometry=function(e){var t=e._radii;if(!(t.x<=0||t.y<=0||t.z<=0)){var n=e._innerRadii;if(!(n.x<=0||n.y<=0||n.z<=0)){var i,r,a=e._minimumClock,s=e._maximumClock,c=e._minimumCone,l=e._maximumCone,u=e._vertexFormat,h=e._slicePartitions+1,f=e._stackPartitions+1;(h=Math.round(h*Math.abs(s-a)/d.TWO_PI))<2&&(h=2),(f=Math.round(f*Math.abs(l-c)/d.PI))<2&&(f=2);var p=0,m=[c],g=[a];for(i=0;i<f;i++)m.push(c+i*(l-c)/(f-1));for(m.push(l),r=0;r<h;r++)g.push(a+r*(s-a)/(h-1));g.push(s);var v=m.length,_=g.length,b=0,y=1,w=n.x!==t.x||n.y!==t.y||n.z!==t.z,C=!1,E=!1,A=!1;w&&(y=2,c>0&&(C=!0,b+=h-1),l<Math.PI&&(E=!0,b+=h-1),(s-a)%d.TWO_PI?(A=!0,b+=2*(f-1)+1):b+=1);var x=_*v*y,T=new Float64Array(3*x),S=nl(new Array(x),!1),D=nl(new Array(x),!1),P=h*f*y,I=6*(P+b+1-(h+f)*y),M=lc.createTypedArray(P,I),R=u.normal?new Float32Array(3*x):void 0,L=u.tangent?new Float32Array(3*x):void 0,j=u.bitangent?new Float32Array(3*x):void 0,F=u.st?new Float32Array(2*x):void 0,N=new Array(v),z=new Array(v);for(i=0;i<v;i++)N[i]=db(m[i]),z[i]=hb(m[i]);var k=new Array(_),B=new Array(_);for(r=0;r<_;r++)B[r]=hb(g[r]),k[r]=db(g[r]);for(i=0;i<v;i++)for(r=0;r<_;r++)T[p++]=t.x*N[i]*B[r],T[p++]=t.y*N[i]*k[r],T[p++]=t.z*z[i];var H,V,U,G,q=x/2;if(w)for(i=0;i<v;i++)for(r=0;r<_;r++)T[p++]=n.x*N[i]*B[r],T[p++]=n.y*N[i]*k[r],T[p++]=n.z*z[i],S[q]=!0,i>0&&i!==v-1&&0!==r&&r!==_-1&&(D[q]=!0),q++;for(p=0,i=1;i<v-2;i++)for(H=i*_,V=(i+1)*_,r=1;r<_-2;r++)M[p++]=V+r,M[p++]=V+r+1,M[p++]=H+r+1,M[p++]=V+r,M[p++]=H+r+1,M[p++]=H+r;if(w){var Y=v*_;for(i=1;i<v-2;i++)for(H=Y+i*_,V=Y+(i+1)*_,r=1;r<_-2;r++)M[p++]=V+r,M[p++]=H+r,M[p++]=H+r+1,M[p++]=V+r,M[p++]=H+r+1,M[p++]=V+r+1}if(w){if(C)for(G=v*_,i=1;i<_-2;i++)M[p++]=i,M[p++]=i+1,M[p++]=G+i+1,M[p++]=i,M[p++]=G+i+1,M[p++]=G+i;if(E)for(U=v*_-_,G=v*_*y-_,i=1;i<_-2;i++)M[p++]=U+i+1,M[p++]=U+i,M[p++]=G+i,M[p++]=U+i+1,M[p++]=G+i,M[p++]=G+i+1}if(A){for(i=1;i<v-2;i++)G=_*v+_*i,U=_*i,M[p++]=G,M[p++]=U+_,M[p++]=U,M[p++]=G,M[p++]=G+_,M[p++]=U+_;for(i=1;i<v-2;i++)G=_*v+_*(i+1)-1,U=_*(i+1)-1,M[p++]=U+_,M[p++]=G,M[p++]=U,M[p++]=U+_,M[p++]=G+_,M[p++]=G}var $=new Bl;u.position&&($.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:T}));var X,K=0,Q=0,Z=0,J=0,ee=x/2,te=W.fromCartesian3(t),ne=W.fromCartesian3(n);if(u.st||u.normal||u.tangent||u.bitangent){for(i=0;i<x;i++){X=S[i]?ne:te;var ie=O.fromArray(T,3*i,ob),re=X.geodeticSurfaceNormal(ie,ab);if(D[i]&&O.negate(re,re),u.st){var oe=Mt.negate(re,lb);F[K++]=Math.atan2(oe.y,oe.x)/d.TWO_PI+.5,F[K++]=Math.asin(re.z)/Math.PI+.5}if(u.normal&&(R[Q++]=re.x,R[Q++]=re.y,R[Q++]=re.z),u.tangent||u.bitangent){var ae,se=sb,ce=0;if(S[i]&&(ce=ee),ae=!C&&i>=ce&&i<ce+2*_?O.UNIT_X:O.UNIT_Z,O.cross(ae,re,se),O.normalize(se,se),u.tangent&&(L[Z++]=se.x,L[Z++]=se.y,L[Z++]=se.z),u.bitangent){var le=O.cross(re,se,cb);O.normalize(le,le),j[J++]=le.x,j[J++]=le.y,j[J++]=le.z}}}u.st&&($.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:F})),u.normal&&($.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:R})),u.tangent&&($.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:L})),u.bitangent&&($.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:j}))}if(Object(o.a)(e._offsetAttribute)){var ue=T.length,he=new Uint8Array(ue/3),de=e._offsetAttribute===Hl.NONE?0:1;nl(he,de),$.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:he})}return new zl({attributes:$,indices:M,primitiveType:xl.TRIANGLES,boundingSphere:gt.fromEllipsoid(te),offsetAttribute:e._offsetAttribute})}}},fb.getUnitEllipsoid=function(){return Object(o.a)(pb)||(pb=fb.createGeometry(new fb({radii:new O(1,1,1),vertexFormat:Ul.POSITION_ONLY}))),pb};var bb=fb,yb=new O(1,1,1),wb=Math.cos,Ob=Math.sin;function Cb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.radii,yb),n=Object(r.a)(e.innerRadii,t),i=Object(r.a)(e.minimumClock,0),s=Object(r.a)(e.maximumClock,d.TWO_PI),c=Object(r.a)(e.minimumCone,0),l=Object(r.a)(e.maximumCone,d.PI),u=Math.round(Object(r.a)(e.stackPartitions,10)),h=Math.round(Object(r.a)(e.slicePartitions,8)),f=Math.round(Object(r.a)(e.subdivisions,128));if(u<1)throw new a.a("options.stackPartitions cannot be less than 1");if(h<0)throw new a.a("options.slicePartitions cannot be less than 0");if(f<0)throw new a.a("options.subdivisions must be greater than or equal to zero.");if(Object(o.a)(e.offsetAttribute)&&e.offsetAttribute===Hl.TOP)throw new a.a("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");this._radii=O.clone(t),this._innerRadii=O.clone(n),this._minimumClock=i,this._maximumClock=s,this._minimumCone=c,this._maximumCone=l,this._stackPartitions=u,this._slicePartitions=h,this._subdivisions=f,this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}Cb.packedLength=2*O.packedLength+8,Cb.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),O.pack(e._radii,t,n),n+=O.packedLength,O.pack(e._innerRadii,t,n),n+=O.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n++]=e._subdivisions,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var Eb=new O,Ab=new O,xb={radii:Eb,innerRadii:Ab,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};Cb.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");t=Object(r.a)(t,0);var i=O.unpack(e,t,Eb);t+=O.packedLength;var s=O.unpack(e,t,Ab);t+=O.packedLength;var c=e[t++],l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=e[t++],m=e[t];return Object(o.a)(n)?(n._radii=O.clone(i,n._radii),n._innerRadii=O.clone(s,n._innerRadii),n._minimumClock=c,n._maximumClock=l,n._minimumCone=u,n._maximumCone=h,n._stackPartitions=d,n._slicePartitions=f,n._subdivisions=p,n._offsetAttribute=-1===m?void 0:m,n):(xb.minimumClock=c,xb.maximumClock=l,xb.minimumCone=u,xb.maximumCone=h,xb.stackPartitions=d,xb.slicePartitions=f,xb.subdivisions=p,xb.offsetAttribute=-1===m?void 0:m,new Cb(xb))},Cb.createGeometry=function(e){var t=e._radii;if(!(t.x<=0||t.y<=0||t.z<=0)){var n=e._innerRadii;if(!(n.x<=0||n.y<=0||n.z<=0)){var i=e._minimumClock,r=e._maximumClock,a=e._minimumCone,s=e._maximumCone,c=e._subdivisions,l=W.fromCartesian3(t),u=e._slicePartitions+1,h=e._stackPartitions+1;(u=Math.round(u*Math.abs(r-i)/d.TWO_PI))<2&&(u=2),(h=Math.round(h*Math.abs(s-a)/d.PI))<2&&(h=2);var f=0,p=1,m=n.x!==t.x||n.y!==t.y||n.z!==t.z,g=!1,v=!1;m&&(p=2,a>0&&(g=!0,f+=u),s<Math.PI&&(v=!0,f+=u));var _,b,y,w,O=c*p*(h+u),C=new Float64Array(3*O),E=2*(O+f-(u+h)*p),A=lc.createTypedArray(O,E),x=0,T=new Array(h),S=new Array(h);for(_=0;_<h;_++)w=a+_*(s-a)/(h-1),T[_]=Ob(w),S[_]=wb(w);var D=new Array(c),P=new Array(c);for(_=0;_<c;_++)y=i+_*(r-i)/(c-1),D[_]=Ob(y),P[_]=wb(y);for(_=0;_<h;_++)for(b=0;b<c;b++)C[x++]=t.x*T[_]*P[b],C[x++]=t.y*T[_]*D[b],C[x++]=t.z*S[_];if(m)for(_=0;_<h;_++)for(b=0;b<c;b++)C[x++]=n.x*T[_]*P[b],C[x++]=n.y*T[_]*D[b],C[x++]=n.z*S[_];for(T.length=c,S.length=c,_=0;_<c;_++)w=a+_*(s-a)/(c-1),T[_]=Ob(w),S[_]=wb(w);for(D.length=u,P.length=u,_=0;_<u;_++)y=i+_*(r-i)/(u-1),D[_]=Ob(y),P[_]=wb(y);for(_=0;_<c;_++)for(b=0;b<u;b++)C[x++]=t.x*T[_]*P[b],C[x++]=t.y*T[_]*D[b],C[x++]=t.z*S[_];if(m)for(_=0;_<c;_++)for(b=0;b<u;b++)C[x++]=n.x*T[_]*P[b],C[x++]=n.y*T[_]*D[b],C[x++]=n.z*S[_];for(x=0,_=0;_<h*p;_++){var I=_*c;for(b=0;b<c-1;b++)A[x++]=I+b,A[x++]=I+b+1}var M=h*c*p;for(_=0;_<u;_++)for(b=0;b<c-1;b++)A[x++]=M+_+b*u,A[x++]=M+_+(b+1)*u;if(m)for(M=h*c*p+u*c,_=0;_<u;_++)for(b=0;b<c-1;b++)A[x++]=M+_+b*u,A[x++]=M+_+(b+1)*u;if(m){var R=h*c*p,L=R+c*u;if(g)for(_=0;_<u;_++)A[x++]=R+_,A[x++]=L+_;if(v)for(R+=c*u-u,L+=c*u-u,_=0;_<u;_++)A[x++]=R+_,A[x++]=L+_}var j=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:C})});if(Object(o.a)(e._offsetAttribute)){var F=C.length,N=new Uint8Array(F/3),z=e._offsetAttribute===Hl.NONE?0:1;nl(N,z),j.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:N})}return new zl({attributes:j,indices:A,primitiveType:xl.LINES,boundingSphere:gt.fromEllipsoid(l),offsetAttribute:e._offsetAttribute})}}};var Tb=Cb;function Sb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._tilingScheme=e.tilingScheme,Object(o.a)(this._tilingScheme)||(this._tilingScheme=new Lt({ellipsoid:Object(r.a)(e.ellipsoid,W.WGS84)})),this._levelZeroMaximumGeometricError=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new wn.a,this._readyPromise=Yt.a.resolve(!0)}Object.defineProperties(Sb.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},ready:{get:function(){return!0}},readyPromise:{get:function(){return this._readyPromise}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}}),Sb.prototype.requestTileGeometry=function(e,t,n,i){return Yt.a.resolve(new Ec({buffer:new Uint8Array(256),width:16,height:16}))},Sb.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)},Sb.prototype.getTileDataAvailable=function(e,t,n){},Sb.prototype.loadTileDataAvailability=function(e,t,n){};var Db=Sb;function Pb(){this._removalFunctions=[]}Pb.prototype.add=function(e,t,n){if(!Object(o.a)(e))throw new a.a("event is required");var i=e.addEventListener(t,n);this._removalFunctions.push(i);var r=this;return function(){i();var e=r._removalFunctions;e.splice(e.indexOf(i),1)}},Pb.prototype.removeAll=function(){for(var e=this._removalFunctions,t=0,n=e.length;t<n;++t)e[t]();e.length=0};var Ib=Pb,Mb=Object.freeze({NONE:0,HOLD:1,EXTRAPOLATE:2});function Rb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=Object(r.a)(e.near,1),this._near=this.near,this.far=Object(r.a)(e.far,5e8),this._far=this.far,this._cullingVolume=new C_,this._orthographicMatrix=new Ae}function Lb(e){if(!Object(o.a)(e.right)||!Object(o.a)(e.left)||!Object(o.a)(e.top)||!Object(o.a)(e.bottom)||!Object(o.a)(e.near)||!Object(o.a)(e.far))throw new a.a("right, left, top, bottom, near, or far parameters are not set.");if(e.top!==e._top||e.bottom!==e._bottom||e.left!==e._left||e.right!==e._right||e.near!==e._near||e.far!==e._far){if(e.left>e.right)throw new a.a("right must be greater than left.");if(e.bottom>e.top)throw new a.a("top must be greater than bottom.");if(e.near<=0||e.near>e.far)throw new a.a("near must be greater than zero and less than far.");e._left=e.left,e._right=e.right,e._top=e.top,e._bottom=e.bottom,e._near=e.near,e._far=e.far,e._orthographicMatrix=Ae.computeOrthographicOffCenter(e.left,e.right,e.bottom,e.top,e.near,e.far,e._orthographicMatrix)}}Object.defineProperties(Rb.prototype,{projectionMatrix:{get:function(){return Lb(this),this._orthographicMatrix}}});var jb=new O,Fb=new O,Nb=new O,zb=new O;Rb.prototype.computeCullingVolume=function(e,t,n){if(!Object(o.a)(e))throw new a.a("position is required.");if(!Object(o.a)(t))throw new a.a("direction is required.");if(!Object(o.a)(n))throw new a.a("up is required.");var i=this._cullingVolume.planes,r=this.top,s=this.bottom,c=this.right,l=this.left,u=this.near,h=this.far,d=O.cross(t,n,jb);O.normalize(d,d);var f=Fb;O.multiplyByScalar(t,u,f),O.add(e,f,f);var p=Nb;O.multiplyByScalar(d,l,p),O.add(f,p,p);var m=i[0];return Object(o.a)(m)||(m=i[0]=new he),m.x=d.x,m.y=d.y,m.z=d.z,m.w=-O.dot(d,p),O.multiplyByScalar(d,c,p),O.add(f,p,p),m=i[1],Object(o.a)(m)||(m=i[1]=new he),m.x=-d.x,m.y=-d.y,m.z=-d.z,m.w=-O.dot(O.negate(d,zb),p),O.multiplyByScalar(n,s,p),O.add(f,p,p),m=i[2],Object(o.a)(m)||(m=i[2]=new he),m.x=n.x,m.y=n.y,m.z=n.z,m.w=-O.dot(n,p),O.multiplyByScalar(n,r,p),O.add(f,p,p),m=i[3],Object(o.a)(m)||(m=i[3]=new he),m.x=-n.x,m.y=-n.y,m.z=-n.z,m.w=-O.dot(O.negate(n,zb),p),m=i[4],Object(o.a)(m)||(m=i[4]=new he),m.x=t.x,m.y=t.y,m.z=t.z,m.w=-O.dot(t,f),O.multiplyByScalar(t,h,p),O.add(e,p,p),m=i[5],Object(o.a)(m)||(m=i[5]=new he),m.x=-t.x,m.y=-t.y,m.z=-t.z,m.w=-O.dot(O.negate(t,zb),p),this._cullingVolume},Rb.prototype.getPixelDimensions=function(e,t,n,i,r){if(Lb(this),!Object(o.a)(e)||!Object(o.a)(t))throw new a.a("Both drawingBufferWidth and drawingBufferHeight are required.");if(e<=0)throw new a.a("drawingBufferWidth must be greater than zero.");if(t<=0)throw new a.a("drawingBufferHeight must be greater than zero.");if(!Object(o.a)(n))throw new a.a("distance is required.");if(!Object(o.a)(i))throw new a.a("pixelRatio is required.");if(i<=0)throw new a.a("pixelRatio must be greater than zero.");if(!Object(o.a)(r))throw new a.a("A result object is required.");var s=i*(this.right-this.left)/e,c=i*(this.top-this.bottom)/t;return r.x=s,r.y=c,r},Rb.prototype.clone=function(e){return Object(o.a)(e)||(e=new Rb),e.left=this.left,e.right=this.right,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e},Rb.prototype.equals=function(e){return Object(o.a)(e)&&e instanceof Rb&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far},Rb.prototype.equalsEpsilon=function(e,t,n){return e===this||Object(o.a)(e)&&e instanceof Rb&&d.equalsEpsilon(this.right,e.right,t,n)&&d.equalsEpsilon(this.left,e.left,t,n)&&d.equalsEpsilon(this.top,e.top,t,n)&&d.equalsEpsilon(this.bottom,e.bottom,t,n)&&d.equalsEpsilon(this.near,e.near,t,n)&&d.equalsEpsilon(this.far,e.far,t,n)};var kb=Rb;function Bb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._offCenterFrustum=new kb,this.width=e.width,this._width=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=Object(r.a)(e.near,1),this._near=this.near,this.far=Object(r.a)(e.far,5e8),this._far=this.far}function Hb(e){if(!Object(o.a)(e.width)||!Object(o.a)(e.aspectRatio)||!Object(o.a)(e.near)||!Object(o.a)(e.far))throw new a.a("width, aspectRatio, near, or far parameters are not set.");var t=e._offCenterFrustum;if(e.width!==e._width||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far){if(e.aspectRatio<0)throw new a.a("aspectRatio must be positive.");if(e.near<0||e.near>e.far)throw new a.a("near must be greater than zero and less than far.");e._aspectRatio=e.aspectRatio,e._width=e.width,e._near=e.near,e._far=e.far;var n=1/e.aspectRatio;t.right=.5*e.width,t.left=-t.right,t.top=n*t.right,t.bottom=-t.top,t.near=e.near,t.far=e.far}}Bb.packedLength=4,Bb.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.width,t[n++]=e.aspectRatio,t[n++]=e.near,t[n]=e.far,t},Bb.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Bb),n.width=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t],n},Object.defineProperties(Bb.prototype,{projectionMatrix:{get:function(){return Hb(this),this._offCenterFrustum.projectionMatrix}}}),Bb.prototype.computeCullingVolume=function(e,t,n){return Hb(this),this._offCenterFrustum.computeCullingVolume(e,t,n)},Bb.prototype.getPixelDimensions=function(e,t,n,i,r){return Hb(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,r)},Bb.prototype.clone=function(e){return Object(o.a)(e)||(e=new Bb),e.aspectRatio=this.aspectRatio,e.width=this.width,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._width=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e},Bb.prototype.equals=function(e){return!!(Object(o.a)(e)&&e instanceof Bb)&&(Hb(this),Hb(e),this.width===e.width&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))},Bb.prototype.equalsEpsilon=function(e,t,n){return!!(Object(o.a)(e)&&e instanceof Bb)&&(Hb(this),Hb(e),d.equalsEpsilon(this.width,e.width,t,n)&&d.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Vb=Bb;function Ub(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=Object(r.a)(e.near,1),this._near=this.near,this.far=Object(r.a)(e.far,5e8),this._far=this.far,this._cullingVolume=new C_,this._perspectiveMatrix=new Ae,this._infinitePerspective=new Ae}function Wb(e){if(!Object(o.a)(e.right)||!Object(o.a)(e.left)||!Object(o.a)(e.top)||!Object(o.a)(e.bottom)||!Object(o.a)(e.near)||!Object(o.a)(e.far))throw new a.a("right, left, top, bottom, near, or far parameters are not set.");var t=e.top,n=e.bottom,i=e.right,r=e.left,s=e.near,c=e.far;if(t!==e._top||n!==e._bottom||r!==e._left||i!==e._right||s!==e._near||c!==e._far){if(e.near<=0||e.near>e.far)throw new a.a("near must be greater than zero and less than far.");e._left=r,e._right=i,e._top=t,e._bottom=n,e._near=s,e._far=c,e._perspectiveMatrix=Ae.computePerspectiveOffCenter(r,i,n,t,s,c,e._perspectiveMatrix),e._infinitePerspective=Ae.computeInfinitePerspectiveOffCenter(r,i,n,t,s,e._infinitePerspective)}}Object.defineProperties(Ub.prototype,{projectionMatrix:{get:function(){return Wb(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return Wb(this),this._infinitePerspective}}});var Gb=new O,qb=new O,Yb=new O,$b=new O;Ub.prototype.computeCullingVolume=function(e,t,n){if(!Object(o.a)(e))throw new a.a("position is required.");if(!Object(o.a)(t))throw new a.a("direction is required.");if(!Object(o.a)(n))throw new a.a("up is required.");var i=this._cullingVolume.planes,r=this.top,s=this.bottom,c=this.right,l=this.left,u=this.near,h=this.far,d=O.cross(t,n,Gb),f=qb;O.multiplyByScalar(t,u,f),O.add(e,f,f);var p=Yb;O.multiplyByScalar(t,h,p),O.add(e,p,p);var m=$b;O.multiplyByScalar(d,l,m),O.add(f,m,m),O.subtract(m,e,m),O.normalize(m,m),O.cross(m,n,m),O.normalize(m,m);var g=i[0];return Object(o.a)(g)||(g=i[0]=new he),g.x=m.x,g.y=m.y,g.z=m.z,g.w=-O.dot(m,e),O.multiplyByScalar(d,c,m),O.add(f,m,m),O.subtract(m,e,m),O.cross(n,m,m),O.normalize(m,m),g=i[1],Object(o.a)(g)||(g=i[1]=new he),g.x=m.x,g.y=m.y,g.z=m.z,g.w=-O.dot(m,e),O.multiplyByScalar(n,s,m),O.add(f,m,m),O.subtract(m,e,m),O.cross(d,m,m),O.normalize(m,m),g=i[2],Object(o.a)(g)||(g=i[2]=new he),g.x=m.x,g.y=m.y,g.z=m.z,g.w=-O.dot(m,e),O.multiplyByScalar(n,r,m),O.add(f,m,m),O.subtract(m,e,m),O.cross(m,d,m),O.normalize(m,m),g=i[3],Object(o.a)(g)||(g=i[3]=new he),g.x=m.x,g.y=m.y,g.z=m.z,g.w=-O.dot(m,e),g=i[4],Object(o.a)(g)||(g=i[4]=new he),g.x=t.x,g.y=t.y,g.z=t.z,g.w=-O.dot(t,f),O.negate(t,m),g=i[5],Object(o.a)(g)||(g=i[5]=new he),g.x=m.x,g.y=m.y,g.z=m.z,g.w=-O.dot(m,p),this._cullingVolume},Ub.prototype.getPixelDimensions=function(e,t,n,i,r){if(Wb(this),!Object(o.a)(e)||!Object(o.a)(t))throw new a.a("Both drawingBufferWidth and drawingBufferHeight are required.");if(e<=0)throw new a.a("drawingBufferWidth must be greater than zero.");if(t<=0)throw new a.a("drawingBufferHeight must be greater than zero.");if(!Object(o.a)(n))throw new a.a("distance is required.");if(!Object(o.a)(i))throw new a.a("pixelRatio is required");if(i<=0)throw new a.a("pixelRatio must be greater than zero.");if(!Object(o.a)(r))throw new a.a("A result object is required.");var s=1/this.near,c=this.top*s,l=2*i*n*c/t,u=2*i*n*(c=this.right*s)/e;return r.x=u,r.y=l,r},Ub.prototype.clone=function(e){return Object(o.a)(e)||(e=new Ub),e.right=this.right,e.left=this.left,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e},Ub.prototype.equals=function(e){return Object(o.a)(e)&&e instanceof Ub&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far},Ub.prototype.equalsEpsilon=function(e,t,n){return e===this||Object(o.a)(e)&&e instanceof Ub&&d.equalsEpsilon(this.right,e.right,t,n)&&d.equalsEpsilon(this.left,e.left,t,n)&&d.equalsEpsilon(this.top,e.top,t,n)&&d.equalsEpsilon(this.bottom,e.bottom,t,n)&&d.equalsEpsilon(this.near,e.near,t,n)&&d.equalsEpsilon(this.far,e.far,t,n)};var Xb=Ub;function Kb(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._offCenterFrustum=new Xb,this.fov=e.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=Object(r.a)(e.near,1),this._near=this.near,this.far=Object(r.a)(e.far,5e8),this._far=this.far,this.xOffset=Object(r.a)(e.xOffset,0),this._xOffset=this.xOffset,this.yOffset=Object(r.a)(e.yOffset,0),this._yOffset=this.yOffset}function Qb(e){if(!Object(o.a)(e.fov)||!Object(o.a)(e.aspectRatio)||!Object(o.a)(e.near)||!Object(o.a)(e.far))throw new a.a("fov, aspectRatio, near, or far parameters are not set.");var t=e._offCenterFrustum;if(e.fov!==e._fov||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far||e.xOffset!==e._xOffset||e.yOffset!==e._yOffset){if(e.fov<0||e.fov>=Math.PI)throw new a.a("fov must be in the range [0, PI).");if(e.aspectRatio<0)throw new a.a("aspectRatio must be positive.");if(e.near<0||e.near>e.far)throw new a.a("near must be greater than zero and less than far.");e._aspectRatio=e.aspectRatio,e._fov=e.fov,e._fovy=e.aspectRatio<=1?e.fov:2*Math.atan(Math.tan(.5*e.fov)/e.aspectRatio),e._near=e.near,e._far=e.far,e._sseDenominator=2*Math.tan(.5*e._fovy),e._xOffset=e.xOffset,e._yOffset=e.yOffset,t.top=e.near*Math.tan(.5*e._fovy),t.bottom=-t.top,t.right=e.aspectRatio*t.top,t.left=-t.right,t.near=e.near,t.far=e.far,t.right+=e.xOffset,t.left+=e.xOffset,t.top+=e.yOffset,t.bottom+=e.yOffset}}Kb.packedLength=6,Kb.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),t[n++]=e.fov,t[n++]=e.aspectRatio,t[n++]=e.near,t[n++]=e.far,t[n++]=e.xOffset,t[n]=e.yOffset,t},Kb.unpack=function(e,t,n){return i.a.defined("array",e),t=Object(r.a)(t,0),Object(o.a)(n)||(n=new Kb),n.fov=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t++],n.xOffset=e[t++],n.yOffset=e[t],n},Object.defineProperties(Kb.prototype,{projectionMatrix:{get:function(){return Qb(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return Qb(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return Qb(this),this._fovy}},sseDenominator:{get:function(){return Qb(this),this._sseDenominator}}}),Kb.prototype.computeCullingVolume=function(e,t,n){return Qb(this),this._offCenterFrustum.computeCullingVolume(e,t,n)},Kb.prototype.getPixelDimensions=function(e,t,n,i,r){return Qb(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,r)},Kb.prototype.clone=function(e){return Object(o.a)(e)||(e=new Kb),e.aspectRatio=this.aspectRatio,e.fov=this.fov,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._fov=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e},Kb.prototype.equals=function(e){return!!(Object(o.a)(e)&&e instanceof Kb)&&(Qb(this),Qb(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))},Kb.prototype.equalsEpsilon=function(e,t,n){return!!(Object(o.a)(e)&&e instanceof Kb)&&(Qb(this),Qb(e),d.equalsEpsilon(this.fov,e.fov,t,n)&&d.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Zb=Kb;function Jb(e){i.a.typeOf.object("options",e),i.a.typeOf.object("options.frustum",e.frustum),i.a.typeOf.object("options.origin",e.origin),i.a.typeOf.object("options.orientation",e.orientation);var t,n,o=e.frustum,a=e.orientation,s=e.origin,c=Object(r.a)(e.vertexFormat,Ul.DEFAULT),l=Object(r.a)(e._drawNearPlane,!0);o instanceof Zb?(t=0,n=Zb.packedLength):o instanceof Vb&&(t=1,n=Vb.packedLength),this._frustumType=t,this._frustum=o.clone(),this._origin=O.clone(s),this._orientation=No.clone(a),this._drawNearPlane=l,this._vertexFormat=c,this._workerName="createFrustumGeometry",this.packedLength=2+n+O.packedLength+No.packedLength+Ul.packedLength}Jb.pack=function(e,t,n){i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0);var o=e._frustumType,a=e._frustum;return t[n++]=o,0===o?(Zb.pack(a,t,n),n+=Zb.packedLength):(Vb.pack(a,t,n),n+=Vb.packedLength),O.pack(e._origin,t,n),n+=O.packedLength,No.pack(e._orientation,t,n),n+=No.packedLength,Ul.pack(e._vertexFormat,t,n),t[n+=Ul.packedLength]=e._drawNearPlane?1:0,t};var ey=new Zb,ty=new Vb,ny=new No,iy=new O,ry=new Ul;function oy(e,t,n,i,r,a,s,c){for(var l=e/3*2,u=0;u<4;++u)Object(o.a)(t)&&(t[e]=a.x,t[e+1]=a.y,t[e+2]=a.z),Object(o.a)(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),Object(o.a)(i)&&(i[e]=c.x,i[e+1]=c.y,i[e+2]=c.z),e+=3;r[l]=0,r[l+1]=0,r[l+2]=1,r[l+3]=0,r[l+4]=1,r[l+5]=1,r[l+6]=0,r[l+7]=1}Jb.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a,s=e[t++];0===s?(a=Zb.unpack(e,t,ey),t+=Zb.packedLength):(a=Vb.unpack(e,t,ty),t+=Vb.packedLength);var c=O.unpack(e,t,iy);t+=O.packedLength;var l=No.unpack(e,t,ny);t+=No.packedLength;var u=Ul.unpack(e,t,ry),h=1===e[t+=Ul.packedLength];if(!Object(o.a)(n))return new Jb({frustum:a,origin:c,orientation:l,vertexFormat:u,_drawNearPlane:h});var d=s===n._frustumType?n._frustum:void 0;return n._frustum=a.clone(d),n._frustumType=s,n._origin=O.clone(c,n._origin),n._orientation=No.clone(l,n._orientation),n._vertexFormat=Ul.clone(u,n._vertexFormat),n._drawNearPlane=h,n};var ay=new oe,sy=new Ae,cy=new Ae,ly=new O,uy=new O,hy=new O,dy=new O,fy=new O,py=new O,my=new Array(3),gy=new Array(4);gy[0]=new he(-1,-1,1,1),gy[1]=new he(1,-1,1,1),gy[2]=new he(1,1,1,1),gy[3]=new he(-1,1,1,1);for(var vy=new Array(4),_y=0;_y<4;++_y)vy[_y]=new he;Jb._computeNearFarPlanes=function(e,t,n,i,a,s,c,l){var u=oe.fromQuaternion(t,ay),h=Object(r.a)(s,ly),d=Object(r.a)(c,uy),f=Object(r.a)(l,hy);h=oe.getColumn(u,0,h),d=oe.getColumn(u,1,d),f=oe.getColumn(u,2,f),O.normalize(h,h),O.normalize(d,d),O.normalize(f,f),O.negate(h,h);var p,m,g=Ae.computeView(e,f,d,h,sy);if(0===n){var v=i.projectionMatrix,_=Ae.multiply(v,g,cy);m=Ae.inverse(_,cy)}else p=Ae.inverseTransformation(g,cy);Object(o.a)(m)?(my[0]=i.near,my[1]=i.far):(my[0]=0,my[1]=i.near,my[2]=i.far);for(var b=0;b<2;++b)for(var y=0;y<4;++y){var w=he.clone(gy[y],vy[y]);if(Object(o.a)(m)){var C=1/(w=Ae.multiplyByVector(m,w,w)).w;O.multiplyByScalar(w,C,w),O.subtract(w,e,w),O.normalize(w,w);var E=O.dot(f,w);O.multiplyByScalar(w,my[b]/E,w),O.add(w,e,w)}else{Object(o.a)(i._offCenterFrustum)&&(i=i._offCenterFrustum);var A=my[b],x=my[b+1];w.x=.5*(w.x*(i.right-i.left)+i.left+i.right),w.y=.5*(w.y*(i.top-i.bottom)+i.bottom+i.top),w.z=.5*(w.z*(A-x)-A-x),w.w=1,Ae.multiplyByVector(p,w,w)}a[12*b+3*y]=w.x,a[12*b+3*y+1]=w.y,a[12*b+3*y+2]=w.z}},Jb.createGeometry=function(e){var t=e._frustumType,n=e._frustum,i=e._origin,r=e._orientation,a=e._drawNearPlane,s=e._vertexFormat,c=a?6:5,l=new Float64Array(72);Jb._computeNearFarPlanes(i,r,t,n,l);var u=24;l[u]=l[12],l[u+1]=l[13],l[u+2]=l[14],l[u+3]=l[0],l[u+4]=l[1],l[u+5]=l[2],l[u+6]=l[9],l[u+7]=l[10],l[u+8]=l[11],l[u+9]=l[21],l[u+10]=l[22],l[u+11]=l[23],l[u+=12]=l[15],l[u+1]=l[16],l[u+2]=l[17],l[u+3]=l[3],l[u+4]=l[4],l[u+5]=l[5],l[u+6]=l[0],l[u+7]=l[1],l[u+8]=l[2],l[u+9]=l[12],l[u+10]=l[13],l[u+11]=l[14],l[u+=12]=l[3],l[u+1]=l[4],l[u+2]=l[5],l[u+3]=l[15],l[u+4]=l[16],l[u+5]=l[17],l[u+6]=l[18],l[u+7]=l[19],l[u+8]=l[20],l[u+9]=l[6],l[u+10]=l[7],l[u+11]=l[8],l[u+=12]=l[6],l[u+1]=l[7],l[u+2]=l[8],l[u+3]=l[18],l[u+4]=l[19],l[u+5]=l[20],l[u+6]=l[21],l[u+7]=l[22],l[u+8]=l[23],l[u+9]=l[9],l[u+10]=l[10],l[u+11]=l[11],a||(l=l.subarray(12));var h=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:l})});if(Object(o.a)(s.normal)||Object(o.a)(s.tangent)||Object(o.a)(s.bitangent)||Object(o.a)(s.st)){var d=Object(o.a)(s.normal)?new Float32Array(12*c):void 0,f=Object(o.a)(s.tangent)?new Float32Array(12*c):void 0,p=Object(o.a)(s.bitangent)?new Float32Array(12*c):void 0,m=Object(o.a)(s.st)?new Float32Array(8*c):void 0,g=ly,v=uy,_=hy,b=O.negate(g,dy),y=O.negate(v,fy),w=O.negate(_,py);u=0,a&&(oy(u,d,f,p,m,w,g,v),u+=12),oy(u,d,f,p,m,_,b,v),oy(u+=12,d,f,p,m,b,w,v),oy(u+=12,d,f,p,m,y,w,b),oy(u+=12,d,f,p,m,g,_,v),oy(u+=12,d,f,p,m,v,_,b),Object(o.a)(d)&&(h.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:d})),Object(o.a)(f)&&(h.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:f})),Object(o.a)(p)&&(h.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:p})),Object(o.a)(m)&&(h.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:m}))}for(var C=new Uint16Array(6*c),E=0;E<c;++E){var A=6*E,x=4*E;C[A]=x,C[A+1]=x+1,C[A+2]=x+2,C[A+3]=x,C[A+4]=x+2,C[A+5]=x+3}return new zl({attributes:h,indices:C,primitiveType:xl.TRIANGLES,boundingSphere:gt.fromVertices(l)})};var by=Jb;function yy(e){i.a.typeOf.object("options",e),i.a.typeOf.object("options.frustum",e.frustum),i.a.typeOf.object("options.origin",e.origin),i.a.typeOf.object("options.orientation",e.orientation);var t,n,o=e.frustum,a=e.orientation,s=e.origin,c=Object(r.a)(e._drawNearPlane,!0);o instanceof Zb?(t=0,n=Zb.packedLength):o instanceof Vb&&(t=1,n=Vb.packedLength),this._frustumType=t,this._frustum=o.clone(),this._origin=O.clone(s),this._orientation=No.clone(a),this._drawNearPlane=c,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+n+O.packedLength+No.packedLength}yy.pack=function(e,t,n){i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0);var o=e._frustumType,a=e._frustum;return t[n++]=o,0===o?(Zb.pack(a,t,n),n+=Zb.packedLength):(Vb.pack(a,t,n),n+=Vb.packedLength),O.pack(e._origin,t,n),n+=O.packedLength,No.pack(e._orientation,t,n),t[n+=No.packedLength]=e._drawNearPlane?1:0,t};var wy=new Zb,Oy=new Vb,Cy=new No,Ey=new O;yy.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a,s=e[t++];0===s?(a=Zb.unpack(e,t,wy),t+=Zb.packedLength):(a=Vb.unpack(e,t,Oy),t+=Vb.packedLength);var c=O.unpack(e,t,Ey);t+=O.packedLength;var l=No.unpack(e,t,Cy),u=1===e[t+=No.packedLength];if(!Object(o.a)(n))return new yy({frustum:a,origin:c,orientation:l,_drawNearPlane:u});var h=s===n._frustumType?n._frustum:void 0;return n._frustum=a.clone(h),n._frustumType=s,n._origin=O.clone(c,n._origin),n._orientation=No.clone(l,n._orientation),n._drawNearPlane=u,n},yy.createGeometry=function(e){var t=e._frustumType,n=e._frustum,i=e._origin,r=e._orientation,o=e._drawNearPlane,a=new Float64Array(24);by._computeNearFarPlanes(i,r,t,n,a);for(var s,c,l=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:a})}),u=o?2:1,h=new Uint16Array(8*(u+1)),d=o?0:1;d<2;++d)c=4*d,h[s=o?8*d:0]=c,h[s+1]=c+1,h[s+2]=c+1,h[s+3]=c+2,h[s+4]=c+2,h[s+5]=c+3,h[s+6]=c+3,h[s+7]=c;for(d=0;d<2;++d)c=4*d,h[s=8*(u+d)]=c,h[s+1]=c+4,h[s+2]=c+1,h[s+3]=c+5,h[s+4]=c+2,h[s+5]=c+6,h[s+6]=c+3,h[s+7]=c+7;return new zl({attributes:l,indices:h,primitiveType:xl.LINES,boundingSphere:gt.fromVertices(a)})};var Ay=yy;function xy(){}xy.prototype.geocode=a.a.throwInstantiationError;var Ty=Object.freeze({SEARCH:0,AUTOCOMPLETE:1});function Sy(){a.a.throwInstantiationError()}Sy.createGeometry=function(e){a.a.throwInstantiationError()};var Dy=function(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.componentDatatype))throw new a.a("options.componentDatatype is required.");if(!Object(o.a)(e.componentsPerAttribute))throw new a.a("options.componentsPerAttribute is required.");if(e.componentsPerAttribute<1||e.componentsPerAttribute>4)throw new a.a("options.componentsPerAttribute must be between 1 and 4.");if(!Object(o.a)(e.value))throw new a.a("options.value is required.");this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=Object(r.a)(e.normalize,!1),this.value=e.value},Py=(n(183),n(119));var Iy=function(e){if(!Object(o.a)(e))throw new a.a("uri is required.");var t=new u_.a(e);t.normalize();var n=t.path,i=n.lastIndexOf("/");return-1!==i&&(n=n.substr(i+1)),n},My={};var Ry=function(e,t,n){Object(o.a)(t)||(t=e.width),Object(o.a)(n)||(n=e.height);var i=My[t];Object(o.a)(i)||(i={},My[t]=i);var r=i[n];if(!Object(o.a)(r)){var a=document.createElement("canvas");a.width=t,a.height=n,(r=a.getContext("2d")).globalCompositeOperation="copy",i[n]=r}return r.drawImage(e,0,0,t,n),r.getImageData(0,0,t,n).data};var Ly=function(e,t){return t=Object(r.a)(t,0),Du(e,t,Math.min(4,e.length))},jy=n(125);var Fy=function(e,t){return 0!==(e&t)},Ny=[1,2,4,8];function zy(e,t,n,i,r,o){this._bits=e,this.cnodeVersion=t,this.imageryVersion=n,this.terrainVersion=i,this.imageryProvider=r,this.terrainProvider=o,this.ancestorHasTerrain=!1,this.terrainState=void 0}zy.clone=function(e,t){return Object(o.a)(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new zy(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t},zy.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()},zy.prototype.hasSubtree=function(){return Fy(this._bits,16)},zy.prototype.hasImagery=function(){return Fy(this._bits,64)},zy.prototype.hasTerrain=function(){return Fy(this._bits,128)},zy.prototype.hasChildren=function(){return Fy(this._bits,15)},zy.prototype.hasChild=function(e){return Fy(this._bits,Ny[e])},zy.prototype.getChildBitmask=function(){return 15&this._bits};var ky=zy,By=n(123);var Hy=function(e){for(var t=e.length,n=new ArrayBuffer(t),i=new Uint8Array(n),r=0;r<t;++r)i[r]=e.charCodeAt(r);return n}('E\xf4\xbd\vy\xe2jE"\x05\x92,\x17\xcd\x06q\xf8I\x10FgQ\0B%\xc6\xe8a,f)\b\xc64\xdcjb%y\nw\x1dmi\xd6\xf0\x9ck\x93\xa1\xbdNu\xe0A\x04[\xdf@V\f\xd9\xbbr\x9b\x81|\x103S\xeeOl\xd4q\x05\xb0{\xc0\x7fE\x03VZ\xadwUe\v3\x92*\xac\x19l5\x14\xc5\x1d0s\xf83>mF8J\xb4\xdd\xf0.\xdd\x17u\x16\xda\x8cDt"\x06\xfaa"\f3"So\xaf9D\v\x8c\x0e9\xd99\x13L\xb9\xbf\x7f\xab\\\x8cP_\x9f"ux\x1f\xe9\x07q\x91h;\xc1\xc4\x9b\x7f\xf0<VqH\x82\x05\'UfYNe\x1d\x98u\xa3aF}a?\x15A\0\x9f\x14\x06\xd7\xb44M\xce\x13\x87F\xb0\x1a\xd5\x05\x1c\xb8\x8a\'{\x8b\xdc+\xbbMg0\xc8\xd1\xf6\\\x8fP\xfa[/F\x9bn5\x18/\'C.\xeb\n\f^\x10\x05\x10\xa5s\x1be4\xe5l.jC\'c\x14#U\xa9?q{gC}:\xaf\xcd\xe2TU\x9c\xfdK\xc6\xe2\x9f/(\xed\xcb\\\xc6-f\x07\x88\xa7;/\x18*"N\x0e\xb0k.\xdd\r\x95}}G\xbaC\xb2\x11\xb2+>M\xaa>}\xe6\xceI\x89\xc6\xe6x\fa1\x05-\x01\xa4O\xa5~q \x88\xec\r1\xe8N\v\0nPh}\x17=\b\r\x17\x95\xa6n\xa3h\x97$[k\xf3\x17#\xf3\xb6s\xb3\r\v@\xc0\x9f\xd8\x04Q]\xfa\x1a\x17".\x15j\xdfI\0\xb9\xa0wU\xc6\xef\x10j\xbf{GL\x7f\x83\x17\x05\xee\xdc\xdcF\x85\xa9\xadS\x07+S4\x06\x07\xff\x14\x94Y\x19\x02\xe48\xe81\x83N\xb9XFk\xcb-#\x86\x92p\x005\x88"\xcf1\xb2&/\xe7\xc3u-6,rt\xb0#G\xb7\xd3\xd1&\x16\x857r\xe2\0\x8cD\xcf\x10\xda3-\x1a\xde`\x86i#i*|\xcdKQ\r\x95T9w.)\xea\x1b\xa6P\xa2j\x8foP\x99\\>T\xfb\xefP[\v\x07E\x17\x89m(\x13w7\x1d\xdb\x8e\x1eJ\x05fJo\x99 \xe5p\xe2\xb9q~\fmI\x04-z\xfer\xc7\xf2Y0\x8f\xbb\x02]s\xe5\xc9 \xeax\xec \x90\xf0\x8a\x7fB\x17|G\x19`\xb0\x16\xbd&\xb7q\xb6\xc7\x9f\x0e\xd13\x82=\xd3\xab\xeec\x99\xc8+S\xa0D\\q\x01\xc6\xccD\x1f2O<\xca\xc0)=R\xd3a\x19X\xa9}e\xb4\xdc\xcf\r\xf4=\xf1\b\xa9B\xda#\t\xd8\xbf^PI\xf8M\xc0\xcbGL\x1cO\xf7{+\xd8\x16\x18\xc51\x92;\xb5o\xdcl\r\x92\x88\x16\xd1\x9e\xdb?\xe2\xe9\xda_\xd4\x84\xe2FaZ\xde\x1cU\xcf\xa4\0\xbe\xfd\xceg\xf1Ji\x1c\x97\xe6 H\xd8]\x7f~\xaeq \x0eN\xae\xc0V\xa9\x91\x01<\x82\x1d\x0fr\xe7v\xec)I\xd6]-\x83\xe3\xdb6\x06\xa9;f\x13\x97\x87j\xd5\xb6=P^R\xb9K\xc7sWx\xc9\xf4.Y\x07\x95\x93o\xd0K\x17W\x19>\'\'\xc7`\xdb;\xed\x9a\x0eSD\x16>?\x8d\x92mw\xa2\n\xeb?R\xa8\xc6U^1I7\x85\xf4\xc5\x1f&-\xa9\x1c\xbf\x8b\'T\xda\xc3j \xe5*x\x04\xb0\xd6\x90pr\xaa\x8bh\xbd\x88\xf7\x02_H\xb1~\xc0XL?f\x1a\xf9>\xe1e\xc0p\xa7\xcf8i\xaf\xf0VldI\x9c\'\xadxtO\xc2\x87\xdeV9\0\xdaw\v\xcb-\x1b\x89\xfb5O\x02\xf5\bQ\x13`\xc1\nZGM&\x1c30x\xda\xc0\x9cFG\xe2[y`In7gS\n>\xe9\xecF9\xb2\xf14\r\xc6\x84Sun\xe1\fY\xd9\x1e\xde)\x85\x10{II\xa5wy\xbeIV.6\xe7\v:\xbbO\x03b{\xd2M1\x95/\xbd8{\xa8O!\xe1\xecFpv\x95})"x\x88\n\x90\xdd\x9d\\\xda\xde\x19Q\xcf\xf0\xfcYRe|3\x13\xdf\xf3H\xda\xbb*u\xdb`\xb2\x02\x15\xd4\xfc\x19\xed\x1b\xec\x7f5\xa8\xff(1\x07-\x12\xc8\xdc\x88F|\x8a["');function Vy(e){i.a.defined("resourceOrUrl",e);var t=e;"string"===typeof t||t instanceof _t.a||(i.a.typeOf.string("resourceOrUrl.url",e.url),t=e.url);var n=_t.a.createIfNeeded(t);n.appendForwardSlash(),this._resource=n,this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=d.EPSILON12,this.providers={},this.key=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={};var a=this;this._readyPromise=function(e){var t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!Object(o.a)(Wy)){var n=At("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;Wy=Object(By.a)(n).then((function(){Uy=window.cesiumGoogleEarthDbRootParser(jy.a),Object(o.a)(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser}))}return Wy.then((function(){return t.fetchArrayBuffer()})).then((function(t){var n=Uy.EncryptedDbRootProto.decode(new Uint8Array(t)),i=n.encryptionData,r=i.byteOffset,o=r+i.byteLength,a=e.key=i.buffer.slice(r,o);o=(r=(i=n.dbrootData).byteOffset)+i.byteLength;var s=i.buffer.slice(r,o);return Gy.scheduleTask({buffer:s,type:"DbRoot",key:a},[s])})).then((function(t){var n=Uy.DbRootProto.decode(new Uint8Array(t.buffer));if(e.imageryPresent=Object(r.a)(n.imageryPresent,e.imageryPresent),e.protoImagery=n.protoImagery,e.terrainPresent=Object(r.a)(n.terrainPresent,e.terrainPresent),Object(o.a)(n.endSnippet)&&Object(o.a)(n.endSnippet.model)){var i=n.endSnippet.model;e.negativeAltitudeExponentBias=Object(r.a)(i.negativeAltitudeExponentBias,e.negativeAltitudeExponentBias),e.negativeAltitudeThreshold=Object(r.a)(i.compressedNegativeAltitudeThreshold,e.negativeAltitudeThreshold)}Object(o.a)(n.databaseVersion)&&(e._quadPacketVersion=Object(r.a)(n.databaseVersion.quadtreeVersion,e._quadPacketVersion));for(var a=e.providers,s=Object(r.a)(n.providerInfo,[]),c=s.length,l=0;l<c;++l){var u=s[l],h=u.copyrightString;Object(o.a)(h)&&(a[u.providerId]=new yn(h.value))}})).otherwise((function(){console.log("Failed to retrieve "+t.url+". Using defaults."),e.key=Hy}))}(this).then((function(){return a.getQuadTreePacket("",a._quadPacketVersion)})).then((function(){return!0})).otherwise((function(e){var t="An error occurred while accessing "+qy(a,"",1).url+".";return Yt.a.reject(new de.a(t))}))}Object.defineProperties(Vy.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}},readyPromise:{get:function(){return this._readyPromise}}}),Vy.tileXYToQuadKey=function(e,t,n){for(var i="",r=n;r>=0;--r){var o=1<<r,a=0;Fy(t,o)?Fy(e,o)&&(a|=1):(a|=2,Fy(e,o)||(a|=1)),i+=a}return i},Vy.quadKeyToTileXY=function(e){for(var t=0,n=0,i=e.length-1,r=i;r>=0;--r){var o=1<<r,a=+e[i-r];Fy(a,2)?Fy(a,1)||(t|=o):(n|=o,Fy(a,1)&&(t|=o))}return{x:t,y:n,level:i}},Vy.prototype.isValid=function(e){var t=this.getTileInformationFromQuadKey(e);if(Object(o.a)(t))return null!==t;for(var n,i=!0,r=e;r.length>1;){if(n=r.substring(r.length-1),r=r.substring(0,r.length-1),t=this.getTileInformationFromQuadKey(r),Object(o.a)(t)){t.hasSubtree()||t.hasChild(parseInt(n))||(i=!1);break}if(null===t){i=!1;break}}return i};var Uy,Wy,Gy=new ac("decodeGoogleEarthEnterprisePacket",Number.POSITIVE_INFINITY);function qy(e,t,n,i){return e._resource.getDerivedResource({url:"flatfile?q2-0"+t+"-q."+n.toString(),request:i})}Vy.prototype.getQuadTreePacket=function(e,t,n){t=Object(r.a)(t,1);var i=qy(this,e=Object(r.a)(e,""),t,n).fetchArrayBuffer();if(Object(o.a)(i)){var a=this._tileInfo,s=this.key;return i.then((function(t){return Gy.scheduleTask({buffer:t,quadKey:e,type:"Metadata",key:s},[t]).then((function(t){var n,i=-1;if(""!==e){i=e.length+1;var r=t[e];(n=a[e])._bits|=r._bits,delete t[e]}var o=Object.keys(t);o.sort((function(e,t){return e.length-t.length}));for(var s=o.length,c=0;c<s;++c){var l=o[c];if(null!==t[l]){var u=ky.clone(t[l]),h=l.length;if(h===i)u.setParent(n);else if(h>1){var d=a[l.substring(0,l.length-1)];u.setParent(d)}a[l]=u}else a[l]=null}}))}))}},Vy.prototype.populateSubtree=function(e,t,n,i){return function e(t,n,i){var r,a=t._tileInfo,s=n,c=a[s];if(Object(o.a)(c)&&(!c.hasSubtree()||c.hasChildren()))return c;for(;void 0===c&&s.length>1;)s=s.substring(0,s.length-1),c=a[s];var l=t._subtreePromises,u=l[s];if(Object(o.a)(u))return u.then((function(){return r=new Ac.a({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction}),e(t,n,r)}));if(!Object(o.a)(c)||!c.hasSubtree())return Yt.a.reject(new de.a("Couldn't load metadata for tile "+n));if(u=t.getQuadTreePacket(s,c.cnodeVersion,i),!Object(o.a)(u))return;return l[s]=u,u.then((function(){return r=new Ac.a({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction}),e(t,n,r)})).always((function(){delete l[s]}))}(this,Vy.tileXYToQuadKey(e,t,n),i)},Vy.prototype.getTileInformation=function(e,t,n){var i=Vy.tileXYToQuadKey(e,t,n);return this._tileInfo[i]},Vy.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};var Yy=Vy;function $y(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.typeOf.object("options.buffer",e.buffer),i.a.typeOf.number("options.negativeAltitudeExponentBias",e.negativeAltitudeExponentBias),i.a.typeOf.number("options.negativeElevationThreshold",e.negativeElevationThreshold),this._buffer=e.buffer,this._credits=e.credits,this._negativeAltitudeExponentBias=e.negativeAltitudeExponentBias,this._negativeElevationThreshold=e.negativeElevationThreshold;var t=Object(r.a)(e.childTileMask,15),n=3&t;n|=4&t?8:0,n|=8&t?4:0,this._childTileMask=n,this._createdByUpsampling=Object(r.a)(e.createdByUpsampling,!1),this._skirtHeight=void 0,this._bufferType=this._buffer.constructor,this._mesh=void 0,this._minimumHeight=void 0,this._maximumHeight=void 0}Object.defineProperties($y.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var Xy=new ac("createVerticesFromGoogleEarthEnterpriseBuffer"),Ky=new Se,Qy=new Se;$y.prototype.createMesh=function(e,t,n,a,s){i.a.typeOf.object("tilingScheme",e),i.a.typeOf.number("x",t),i.a.typeOf.number("y",n),i.a.typeOf.number("level",a);var c=e.ellipsoid;e.tileXYToNativeRectangle(t,n,a,Ky),e.tileXYToRectangle(t,n,a,Qy),s=Object(r.a)(s,1);var l=c.cartographicToCartesian(Se.center(Qy)),u=40075.16/(1<<a);this._skirtHeight=Math.min(8*u,1e3);var h=Xy.scheduleTask({buffer:this._buffer,nativeRectangle:Ky,rectangle:Qy,relativeToCenter:l,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(Object(o.a)(h)){var d=this;return h.then((function(e){return d._mesh=new sc(l,new Float32Array(e.vertices),new Uint16Array(e.indices),e.indexCountWithoutSkirts,e.vertexCountWithoutSkirts,e.minimumHeight,e.maximumHeight,gt.clone(e.boundingSphere3D),O.clone(e.occludeePointInScaledSpace),e.numberOfAttributes,bs.clone(e.orientedBoundingBox),Bs.clone(e.encoding),s,e.westIndicesSouthToNorth,e.southIndicesEastToWest,e.eastIndicesNorthToSouth,e.northIndicesWestToEast),d._minimumHeight=e.minimumHeight,d._maximumHeight=e.maximumHeight,d._buffer=void 0,d._mesh}))}},$y.prototype.interpolateHeight=function(e,t,n){var i=d.clamp((t-e.west)/e.width,0,1),r=d.clamp((n-e.south)/e.height,0,1);return Object(o.a)(this._mesh)?function(e,t,n){for(var i=e._mesh,r=i.vertices,o=i.encoding,a=i.indices,s=0,c=a.length;s<c;s+=3){var l=a[s],u=a[s+1],h=a[s+2],d=o.decodeTextureCoordinates(r,l,Jy),f=o.decodeTextureCoordinates(r,u,ew),p=o.decodeTextureCoordinates(r,h,tw),m=Iu.computeBarycentricCoordinates(t,n,d.x,d.y,f.x,f.y,p.x,p.y,nw);if(m.x>=-1e-15&&m.y>=-1e-15&&m.z>=-1e-15){var g=o.decodeHeight(r,l),v=o.decodeHeight(r,u),_=o.decodeHeight(r,h);return m.x*g+m.y*v+m.z*_}}return}(this,i,r):function(e,t,n,i){var r=e._buffer,o=0,a=0,s=0;n>.5?(t>.5?(o=2,a=.5):o=3,s=.5):t>.5&&(o=1,a=.5);for(var c=new DataView(r),l=0,u=0;u<o;++u)l+=c.getUint32(l,!0),l+=rw;l+=rw,l+=2*sw;var h=d.toRadians(180*c.getFloat64(l,!0));l+=sw;var f=d.toRadians(180*c.getFloat64(l,!0));l+=sw;var p=i.width/h/2,m=i.height/f/2,g=c.getInt32(l,!0);l+=ow;var v=3*c.getInt32(l,!0);l+=ow,l+=ow;var _,b=new Array(g),y=new Array(g),w=new Array(g);for(_=0;_<g;++_)b[_]=a+c.getUint8(l++)*p,y[_]=s+c.getUint8(l++)*m,w[_]=6371010*c.getFloat32(l,!0),l+=aw;var O=new Array(v);for(_=0;_<v;++_)O[_]=c.getUint16(l,!0),l+=iw;for(_=0;_<v;_+=3){var C=O[_],E=O[_+1],A=O[_+2],x=b[C],T=b[E],S=b[A],D=y[C],P=y[E],I=y[A],M=Iu.computeBarycentricCoordinates(t,n,x,D,T,P,S,I,nw);if(M.x>=-1e-15&&M.y>=-1e-15&&M.z>=-1e-15)return M.x*w[C]+M.y*w[E]+M.z*w[A]}return}(this,i,r,e)};var Zy=new ac("upsampleQuantizedTerrainMesh");$y.prototype.upsample=function(e,t,n,r,s,c,l){if(i.a.typeOf.object("tilingScheme",e),i.a.typeOf.number("thisX",t),i.a.typeOf.number("thisY",n),i.a.typeOf.number("thisLevel",r),i.a.typeOf.number("descendantX",s),i.a.typeOf.number("descendantY",c),i.a.typeOf.number("descendantLevel",l),l-r>1)throw new a.a("Upsampling through more than one level at a time is not currently supported.");var u=this._mesh;if(Object(o.a)(this._mesh)){var h=2*t!==s,d=2*n===c,f=e.ellipsoid,p=e.tileXYToRectangle(s,c,l),m=Zy.scheduleTask({vertices:u.vertices,indices:u.indices,indexCountWithoutSkirts:u.indexCountWithoutSkirts,vertexCountWithoutSkirts:u.vertexCountWithoutSkirts,encoding:u.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:h,isNorthChild:d,childRectangle:p,ellipsoid:f,exaggeration:u.exaggeration});if(Object(o.a)(m)){var g=this;return m.then((function(e){var t=new Uint16Array(e.vertices),n=lc.createTypedArray(t.length/3,e.indices),i=g._skirtHeight;return new Vu({quantizedVertices:t,indices:n,minimumHeight:e.minimumHeight,maximumHeight:e.maximumHeight,boundingSphere:gt.clone(e.boundingSphere),orientedBoundingBox:bs.clone(e.orientedBoundingBox),horizonOcclusionPoint:O.clone(e.horizonOcclusionPoint),westIndices:e.westIndices,southIndices:e.southIndices,eastIndices:e.eastIndices,northIndices:e.northIndices,westSkirtHeight:i,southSkirtHeight:i,eastSkirtHeight:i,northSkirtHeight:i,childTileMask:0,createdByUpsampling:!0,credits:g._credits})}))}}},$y.prototype.isChildAvailable=function(e,t,n,r){i.a.typeOf.number("thisX",e),i.a.typeOf.number("thisY",t),i.a.typeOf.number("childX",n),i.a.typeOf.number("childY",r);var o=2;return n!==2*e&&++o,r!==2*t&&(o-=2),0!==(this._childTileMask&1<<o)},$y.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var Jy=new Mt,ew=new Mt,tw=new Mt,nw=new O;var iw=Uint16Array.BYTES_PER_ELEMENT,rw=Uint32Array.BYTES_PER_ELEMENT,ow=Int32Array.BYTES_PER_ELEMENT,aw=Float32Array.BYTES_PER_ELEMENT,sw=Float64Array.BYTES_PER_ELEMENT;var cw=$y,lw=0,uw=1,hw=2,dw=3,fw=new hr;function pw(){this._terrainCache={},this._lastTidy=hr.now()}function mw(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url)&&!Object(o.a)(e.metadata))throw new a.a("options.url or options.metadata is required.");var t;if(Object(o.a)(e.metadata))t=e.metadata;else{var n=_t.a.createIfNeeded(e.url);t=new Yy(n)}this._metadata=t,this._tilingScheme=new Lt({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new Se(-d.PI,-d.PI,d.PI,d.PI),ellipsoid:e.ellipsoid});var i=e.credit;"string"===typeof i&&(i=new yn(i)),this._credit=i,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new pw,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new wn.a,this._ready=!1;var s,c=this;this._readyPromise=t.readyPromise.then((function(e){if(!t.terrainPresent){var n=new de.a("The server "+t.url+" doesn't have terrain");return s=$c.handleError(s,c,c._errorEvent,n.message,void 0,void 0,void 0,n),Yt.a.reject(n)}return $c.handleSuccess(s),c._ready=e,e})).otherwise((function(e){return s=$c.handleError(s,c,c._errorEvent,e.message,void 0,void 0,void 0,e),Yt.a.reject(e)}))}pw.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:hr.now()}},pw.prototype.get=function(e){var t=this._terrainCache[e];if(Object(o.a)(t))return delete this._terrainCache[e],t.buffer},pw.prototype.tidy=function(){if(hr.now(fw),hr.secondsDifference(fw,this._lastTidy)>10){for(var e=this._terrainCache,t=Object.keys(e),n=t.length,i=0;i<n;++i){var r=t[i],o=e[r];hr.secondsDifference(fw,o.timestamp)>10&&delete e[r]}hr.clone(fw,this._lastTidy)}},Object.defineProperties(mw.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){return this._credit}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});var gw=new ac("decodeGoogleEarthEnterprisePacket",Number.POSITIVE_INFINITY);function vw(e,t,n){var i=t.getChildBitmask();if(t.terrainState===dw){i=0;for(var r=0;r<4;++r){var a=n.getTileInformationFromQuadKey(e+r.toString());Object(o.a)(a)&&a.hasTerrain()&&(i|=1<<r)}}return i}mw.prototype.requestTileGeometry=function(e,t,n,i){if(!this._ready)throw new a.a("requestTileGeometry must not be called before the terrain provider is ready.");var r=Yy.tileXYToQuadKey(e,t,n),s=this._terrainCache,c=this._metadata,l=c.getTileInformationFromQuadKey(r);if(!Object(o.a)(l))return Yt.a.reject(new de.a("Terrain tile doesn't exist"));var u=l.terrainState;Object(o.a)(u)||(u=l.terrainState=lw);var h,d=s.get(r);if(Object(o.a)(d)){var f=c.providers[l.terrainProvider];return Yt.a.resolve(new cw({buffer:d,childTileMask:vw(r,l,c),credits:Object(o.a)(f)?[f]:void 0,negativeAltitudeExponentBias:c.negativeAltitudeExponentBias,negativeElevationThreshold:c.negativeAltitudeThreshold}))}if(s.tidy(),!l.ancestorHasTerrain)return Yt.a.resolve(new Ec({buffer:new Uint8Array(256),width:16,height:16}));if(u===uw)return Yt.a.reject(new de.a("Terrain tile doesn't exist"));var p=r,m=-1;switch(u){case hw:m=l.terrainVersion;break;case dw:p=p.substring(0,p.length-1),m=(h=c.getTileInformationFromQuadKey(p)).terrainVersion;break;case lw:l.hasTerrain()?m=l.terrainVersion:(p=p.substring(0,p.length-1),h=c.getTileInformationFromQuadKey(p),Object(o.a)(h)&&h.hasTerrain()&&(m=h.terrainVersion))}if(m<0)return Yt.a.reject(new de.a("Terrain tile doesn't exist"));var g,v,_=this._terrainPromises,b=this._terrainRequests;if(Object(o.a)(_[p]))g=_[p],v=b[p];else{var y=function(e,t,n,i){return n=Object(o.a)(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:"flatfile?f1c-0"+t+"-t."+n.toString(),request:i})}(this,p,m,v=i).fetchArrayBuffer();if(!Object(o.a)(y))return;g=y.then((function(e){return Object(o.a)(e)?gw.scheduleTask({buffer:e,type:"Terrain",key:c.key},[e]).then((function(e){var t=c.getTileInformationFromQuadKey(p);t.terrainState=hw,s.add(p,e[0]);for(var n=t.terrainProvider,i=e.length-1,r=0;r<i;++r){var a=p+r.toString(),l=c.getTileInformationFromQuadKey(a);Object(o.a)(l)&&(s.add(a,e[r+1]),l.terrainState=dw,0===l.terrainProvider&&(l.terrainProvider=n))}})):Yt.a.reject(new de.a("Failed to load terrain."))})),_[p]=g,b[p]=v,g=g.always((function(){delete _[p],delete b[p]}))}return g.then((function(){var e=s.get(r);if(Object(o.a)(e)){var t=c.providers[l.terrainProvider];return new cw({buffer:e,childTileMask:vw(r,l,c),credits:Object(o.a)(t)?[t]:void 0,negativeAltitudeExponentBias:c.negativeAltitudeExponentBias,negativeElevationThreshold:c.negativeAltitudeThreshold})}return Yt.a.reject(new de.a("Failed to load terrain."))})).otherwise((function(e){return v.state===xc.a.CANCELLED?(i.state=v.state,Yt.a.reject(e)):(l.terrainState=uw,Yt.a.reject(e))}))},mw.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)},mw.prototype.getTileDataAvailable=function(e,t,n){var i=this._metadata,r=Yy.tileXYToQuadKey(e,t,n),a=i.getTileInformation(e,t,n);if(null===a)return!1;if(Object(o.a)(a)){if(!a.ancestorHasTerrain)return!0;var s=a.terrainState;if(s===uw)return!1;if((!Object(o.a)(s)||s===lw)&&(a.terrainState=lw,!a.hasTerrain())){r=r.substring(0,r.length-1);var c=i.getTileInformationFromQuadKey(r);if(!Object(o.a)(c)||!c.hasTerrain())return!1}return!0}if(i.isValid(r)){var l=new Ac.a({throttle:!0,throttleByServer:!0,type:Tc.a.TERRAIN});i.populateSubtree(e,t,n,l)}return!1},mw.prototype.loadTileDataAvailability=function(e,t,n){};var _w=[q,Vs],bw=_w.length,yw=Math.cos(d.toRadians(30)),ww=Math.cos(d.toRadians(150));function Ow(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions;if(!Object(o.a)(t)||t.length<2)throw new a.a("At least two positions are required.");if(Object(o.a)(e.arcType)&&e.arcType!==tl.GEODESIC&&e.arcType!==tl.RHUMB)throw new a.a("Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB.");this.width=Object(r.a)(e.width,1),this._positions=t,this.granularity=Object(r.a)(e.granularity,9999),this.loop=Object(r.a)(e.loop,!1),this.arcType=Object(r.a)(e.arcType,tl.GEODESIC),this._ellipsoid=W.WGS84,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(Ow.prototype,{packedLength:{get:function(){return 1+3*this._positions.length+1+1+1+W.packedLength+1+1}}}),Ow.setProjectionAndEllipsoid=function(e,t){for(var n=0,i=0;i<bw;i++)if(t instanceof _w[i]){n=i;break}e._projectionIndex=n,e._ellipsoid=t.ellipsoid};var Cw=new O,Ew=new O,Aw=new O;function xw(e,t,n,i,r){var o=Rw(i,e,0,Cw),a=Rw(i,e,n,Ew),s=Rw(i,t,0,Aw),c=Lw(a,o,Ew),l=Lw(s,o,Aw);return O.cross(l,c,r),O.normalize(r,r)}var Tw=new R,Sw=new O,Dw=new O,Pw=new O;function Iw(e,t,n,i,r,o,a,s,c,l,u){if(0!==r){var h;o===tl.GEODESIC?h=new Km(e,t,a):o===tl.RHUMB&&(h=new cp(e,t,a));var d=h.surfaceDistance;if(!(d<r))for(var f=xw(e,t,i,a,Pw),p=Math.ceil(d/r),m=d/p,g=m,v=p-1,_=s.length,b=0;b<v;b++){var y=h.interpolateUsingSurfaceDistance(g,Tw),w=Rw(a,y,n,Sw),C=Rw(a,y,i,Dw);O.pack(f,s,_),O.pack(w,c,_),O.pack(C,l,_),u.push(y.latitude),u.push(y.longitude),_+=3,g+=m}}}var Mw=new R;function Rw(e,t,n,i){return R.clone(t,Mw),Mw.height=n,R.toCartesian(Mw,e,i)}function Lw(e,t,n){return O.subtract(e,t,n),O.normalize(n,n),n}function jw(e,t,n,i){return i=Lw(e,t,i),i=O.cross(i,n,i),i=O.normalize(i,i),i=O.cross(n,i,i)}Ow.pack=function(e,t,n){i.a.typeOf.object("value",e),i.a.defined("array",t);var o=Object(r.a)(n,0),a=e._positions,s=a.length;t[o++]=s;for(var c=0;c<s;++c){var l=a[c];O.pack(l,t,o),o+=3}return t[o++]=e.granularity,t[o++]=e.loop?1:0,t[o++]=e.arcType,W.pack(e._ellipsoid,t,o),o+=W.packedLength,t[o++]=e._projectionIndex,t[o++]=e._scene3DOnly?1:0,t},Ow.unpack=function(e,t,n){i.a.defined("array",e);for(var a=Object(r.a)(t,0),s=e[a++],c=new Array(s),l=0;l<s;l++)c[l]=O.unpack(e,a),a+=3;var u=e[a++],h=1===e[a++],d=e[a++],f=W.unpack(e,a);a+=W.packedLength;var p=e[a++],m=1===e[a++];return Object(o.a)(n)||(n=new Ow({positions:c})),n._positions=c,n.granularity=u,n.loop=h,n.arcType=d,n._ellipsoid=f,n._projectionIndex=p,n._scene3DOnly=m,n};var Fw=new O,Nw=new O,zw=new O,kw=new O;function Bw(e,t,n,i,r){var o=Lw(n,t,kw),a=jw(e,t,o,Fw),s=jw(i,t,o,Nw);if(d.equalsEpsilon(O.dot(a,s),-1,d.EPSILON5))return r=O.cross(o,a,r),r=O.normalize(r,r);r=O.add(s,a,r),r=O.normalize(r,r);var c=O.cross(o,r,zw);return O.dot(s,c)<0&&(r=O.negate(r,r)),r}var Hw=Fi.fromPointNormal(O.ZERO,O.UNIT_Y),Vw=new O,Uw=new O,Ww=new O,Gw=new O,qw=new O,Yw=new O,$w=new R,Xw=new R,Kw=new R;Ow.createGeometry=function(e){var t,n,i,r,a,s,c=!e._scene3DOnly,l=e.loop,u=e._ellipsoid,h=e.granularity,f=e.arcType,p=new _w[e._projectionIndex](u),m=e._positions,g=m.length;2===g&&(l=!1);var v,_,b,y=new cp(void 0,void 0,u),w=[m[0]];for(n=0;n<g-1;n++)i=m[n],r=m[n+1],v=Ii.lineSegmentPlane(i,r,Hw,Yw),!Object(o.a)(v)||O.equalsEpsilon(v,i,d.EPSILON7)||O.equalsEpsilon(v,r,d.EPSILON7)||(e.arcType===tl.GEODESIC?w.push(O.clone(v)):e.arcType===tl.RHUMB&&(b=u.cartesianToCartographic(v,$w).longitude,a=u.cartesianToCartographic(i,$w),s=u.cartesianToCartographic(r,Xw),y.setEndPoints(a,s),_=y.findIntersectionWithLongitude(b,Kw),v=u.cartographicToCartesian(_,Yw),!Object(o.a)(v)||O.equalsEpsilon(v,i,d.EPSILON7)||O.equalsEpsilon(v,r,d.EPSILON7)||w.push(O.clone(v)))),w.push(r);l&&(i=m[g-1],r=m[0],v=Ii.lineSegmentPlane(i,r,Hw,Yw),!Object(o.a)(v)||O.equalsEpsilon(v,i,d.EPSILON7)||O.equalsEpsilon(v,r,d.EPSILON7)||(e.arcType===tl.GEODESIC?w.push(O.clone(v)):e.arcType===tl.RHUMB&&(b=u.cartesianToCartographic(v,$w).longitude,a=u.cartesianToCartographic(i,$w),s=u.cartesianToCartographic(r,Xw),y.setEndPoints(a,s),_=y.findIntersectionWithLongitude(b,Kw),v=u.cartographicToCartesian(_,Yw),!Object(o.a)(v)||O.equalsEpsilon(v,i,d.EPSILON7)||O.equalsEpsilon(v,r,d.EPSILON7)||w.push(O.clone(v)))));var C=w.length,E=new Array(C);for(n=0;n<C;n++){var A=R.fromCartesian(w[n],u);A.height=0,E[n]=A}if(!((C=(E=rl(E,R.equalsEpsilon)).length)<2)){var x=[],T=[],S=[],D=[],P=Vw,I=Uw,M=Ww,L=Gw,j=qw,F=E[0],N=E[1];for(P=Rw(u,E[C-1],0,P),L=Rw(u,N,0,L),I=Rw(u,F,0,I),M=Rw(u,F,1e3,M),j=l?Bw(P,I,M,L,j):xw(F,N,1e3,u,j),O.pack(j,T,0),O.pack(I,S,0),O.pack(M,D,0),x.push(F.latitude),x.push(F.longitude),Iw(F,N,0,1e3,h,f,u,T,S,D,x),n=1;n<C-1;++n){P=O.clone(I,P),I=O.clone(L,I);var z=E[n];Rw(u,z,1e3,M),Rw(u,E[n+1],0,L),Bw(P,I,M,L,j),t=T.length,O.pack(j,T,t),O.pack(I,S,t),O.pack(M,D,t),x.push(z.latitude),x.push(z.longitude),Iw(E[n],E[n+1],0,1e3,h,f,u,T,S,D,x)}var k=E[C-1],B=E[C-2];if(I=Rw(u,k,0,I),M=Rw(u,k,1e3,M),l){var H=E[0];j=Bw(P=Rw(u,B,0,P),I,M,L=Rw(u,H,0,L),j)}else j=xw(B,k,1e3,u,j);if(t=T.length,O.pack(j,T,t),O.pack(I,S,t),O.pack(M,D,t),x.push(k.latitude),x.push(k.longitude),l){for(Iw(k,F,0,1e3,h,f,u,T,S,D,x),t=T.length,n=0;n<3;++n)T[t+n]=T[n],S[t+n]=S[n],D[t+n]=D[n];x.push(F.latitude),x.push(F.longitude)}return function(e,t,n,i,r,o,a){var s,c,l,u,h,f,p=t._ellipsoid,m=n.length/3-1,g=8*m,v=4*g,_=36*m,b=g>65535?new Uint32Array(_):new Uint16Array(_),y=new Float64Array(3*g),w=new Float32Array(v),C=new Float32Array(v),E=new Float32Array(v),A=new Float32Array(v),x=new Float32Array(v);a&&(l=new Float32Array(v),u=new Float32Array(v),h=new Float32Array(v),f=new Float32Array(2*g));var T=o.length/2,S=0,D=hO;D.height=0;var P=dO;P.height=0;var I=fO,M=pO;if(a)for(c=0,s=1;s<T;s++)D.latitude=o[c],D.longitude=o[c+1],P.latitude=o[c+2],P.longitude=o[c+3],I=t.project(D,I),M=t.project(P,M),S+=O.distance(I,M),c+=2;var R=i.length/3;M=O.unpack(i,0,M);var L,j=0;for(c=3,s=1;s<R;s++)I=O.clone(M,I),M=O.unpack(i,c,M),j+=O.distance(I,M),c+=3;c=3;var F=0,N=0,z=0,k=0,B=!1,H=O.unpack(n,0,gO),V=O.unpack(i,0,pO),U=O.unpack(r,0,_O);if(e){var W=O.unpack(n,n.length-6,mO);eO(U,W,H,V)&&(U=O.negate(U,U))}var G=0,q=0,Y=0;for(s=0;s<m;s++){var $,X,K,Q,Z=O.clone(H,mO),J=O.clone(V,fO),ee=O.clone(U,vO);if(B&&(ee=O.negate(ee,ee)),H=O.unpack(n,c,gO),V=O.unpack(i,c,pO),U=O.unpack(r,c,_O),B=eO(U,Z,H,V),D.latitude=o[F],D.longitude=o[F+1],P.latitude=o[F+2],P.longitude=o[F+3],a){var te=uO(D,P);$=t.project(D,AO);var ne=Lw(X=t.project(P,xO),$,NO);ne.y=Math.abs(ne.y),K=TO,Q=SO,0===te||O.dot(ne,O.UNIT_Y)>yw?(K=rO(t,D,ee,$,TO),Q=rO(t,P,U,X,SO)):1===te?(Q=rO(t,P,U,X,SO),K.x=0,K.y=d.sign(D.longitude-Math.abs(P.longitude)),K.z=0):(K=rO(t,D,ee,$,TO),Q.x=0,Q.y=d.sign(D.longitude-P.longitude),Q.z=0)}var ie=O.distance(J,V),re=vh.fromCartesian(Z,jO),oe=O.subtract(H,Z,DO),ae=O.normalize(oe,MO),se=O.subtract(J,Z,PO);se=O.normalize(se,se);var ce=O.cross(ae,se,MO);ce=O.normalize(ce,ce);var le=O.cross(se,ee,RO);le=O.normalize(le,le);var ue=O.subtract(V,H,IO);ue=O.normalize(ue,ue);var he=O.cross(U,ue,LO);he=O.normalize(he,he);var de,fe,pe,me=ie/j,ge=G/j,ve=0,_e=0,be=0;if(a){ve=O.distance($,X),de=vh.fromCartesian($,FO),fe=O.subtract(X,$,NO);var ye=(pe=O.normalize(fe,zO)).x;pe.x=pe.y,pe.y=-ye,_e=ve/S,be=q/S}for(L=0;L<8;L++){var we=k+4*L,Oe=N+2*L,Ce=we+3,Ee=L<4?1:-1,Ae=2===L||3===L||6===L||7===L?1:-1;O.pack(re.high,w,we),w[Ce]=oe.x,O.pack(re.low,C,we),C[Ce]=oe.y,O.pack(le,E,we),E[Ce]=oe.z,O.pack(he,A,we),A[Ce]=me*Ee,O.pack(ce,x,we);var xe=ge*Ae;0===xe&&Ae<0&&(xe=9),x[Ce]=xe,a&&(l[we]=de.high.x,l[we+1]=de.high.y,l[we+2]=de.low.x,l[we+3]=de.low.y,h[we]=-K.y,h[we+1]=K.x,h[we+2]=Q.y,h[we+3]=-Q.x,u[we]=fe.x,u[we+1]=fe.y,u[we+2]=pe.x,u[we+3]=pe.y,f[Oe]=_e*Ee,0===(xe=be*Ae)&&Ae<0&&(xe=9),f[Oe+1]=xe)}var Te=CO,De=EO,Pe=wO,Ie=OO,Me=Se.fromCartographicArray(bO,yO),Re=qt.getMinimumMaximumHeights(Me,p),Le=Re.minimumTerrainHeight,je=Re.maximumTerrainHeight;Y+=Le,Y+=je,sO(Z,J,Le,je,Te,Pe),sO(H,V,Le,je,De,Ie);var Fe=O.multiplyByScalar(ce,d.EPSILON5,kO);O.add(Te,Fe,Te),O.add(De,Fe,De),O.add(Pe,Fe,Pe),O.add(Ie,Fe,Ie),lO(Te,De),lO(Pe,Ie),O.pack(Te,y,z),O.pack(De,y,z+3),O.pack(Ie,y,z+6),O.pack(Pe,y,z+9),Fe=O.multiplyByScalar(ce,-2*d.EPSILON5,kO),O.add(Te,Fe,Te),O.add(De,Fe,De),O.add(Pe,Fe,Pe),O.add(Ie,Fe,Ie),lO(Te,De),lO(Pe,Ie),O.pack(Te,y,z+12),O.pack(De,y,z+15),O.pack(Ie,y,z+18),O.pack(Pe,y,z+21),F+=2,c+=3,N+=16,z+=24,k+=32,G+=ie,q+=ve}c=0;var Ne=0;for(s=0;s<m;s++){for(L=0;L<VO;L++)b[c+L]=HO[L]+Ne;Ne+=8,c+=VO}var ze=BO;gt.fromVertices(n,O.ZERO,3,ze[0]),gt.fromVertices(i,O.ZERO,3,ze[1]);var ke=gt.fromBoundingSpheres(ze);ke.radius+=Y/(2*m);var Be={position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,normalize:!1,values:y}),startHiAndForwardOffsetX:UO(w),startLoAndForwardOffsetY:UO(C),startNormalAndForwardOffsetZ:UO(E),endNormalAndTextureCoordinateNormalizationX:UO(A),rightNormalAndTextureCoordinateNormalizationY:UO(x)};a&&(Be.startHiLo2D=UO(l),Be.offsetAndRight2D=UO(u),Be.startEndNormals2D=UO(h),Be.texcoordNormalization2D=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,normalize:!1,values:f}));return new zl({attributes:Be,indices:b,boundingSphere:ke})}(l,p,S,D,T,x,c)}};var Qw=new O,Zw=new oe,Jw=new No;function eO(e,t,n,i){var r=Lw(n,t,Qw),o=O.dot(r,e);if(o>yw||o<ww){var a=Lw(i,n,kw),s=o<ww?d.PI_OVER_TWO:-d.PI_OVER_TWO,c=No.fromAxisAngle(a,s,Jw),l=oe.fromQuaternion(c,Zw);return oe.multiplyByVector(l,e,e),!0}return!1}var tO=new R,nO=new O,iO=new O;function rO(e,t,n,i,r){var o=R.toCartesian(t,e._ellipsoid,nO),a=O.add(o,n,iO),s=!1,c=e._ellipsoid,l=c.cartesianToCartographic(a,tO);Math.abs(t.longitude-l.longitude)>d.PI_OVER_TWO&&(s=!0,a=O.subtract(o,n,iO),l=c.cartesianToCartographic(a,tO)),l.height=0;var u=e.project(l,r);return(r=O.subtract(u,i,r)).z=0,r=O.normalize(r,r),s&&O.negate(r,r),r}var oO=new O,aO=new O;function sO(e,t,n,i,r,o){var a=O.subtract(t,e,oO);O.normalize(a,a);var s=n-0,c=O.multiplyByScalar(a,s,aO);O.add(e,c,r);var l=i-1e3;c=O.multiplyByScalar(a,l,aO),O.add(t,c,o)}var cO=new O;function lO(e,t){var n=Fi.getPointDistance(Hw,e),i=Fi.getPointDistance(Hw,t),r=cO;d.equalsEpsilon(n,0,d.EPSILON2)?(r=Lw(t,e,r),O.multiplyByScalar(r,d.EPSILON2,r),O.add(e,r,e)):d.equalsEpsilon(i,0,d.EPSILON2)&&(r=Lw(e,t,r),O.multiplyByScalar(r,d.EPSILON2,r),O.add(t,r,t))}function uO(e,t){var n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(d.equalsEpsilon(n,d.PI,d.EPSILON11)){var r=d.sign(t.longitude);return e.longitude=r*(n-d.EPSILON11),1}if(d.equalsEpsilon(i,d.PI,d.EPSILON11)){var o=d.sign(e.longitude);return t.longitude=o*(i-d.EPSILON11),2}return 0}var hO=new R,dO=new R,fO=new O,pO=new O,mO=new O,gO=new O,vO=new O,_O=new O,bO=[hO,dO],yO=new Se,wO=new O,OO=new O,CO=new O,EO=new O,AO=new O,xO=new O,TO=new O,SO=new O,DO=new O,PO=new O,IO=new O,MO=new O,RO=new O,LO=new O,jO=new vh,FO=new vh,NO=new O,zO=new O,kO=new O,BO=[new gt,new gt],HO=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],VO=HO.length;function UO(e){return new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}Ow._projectNormal=rO;var WO=Ow;function GO(e,t,n){this.heading=Object(r.a)(e,0),this.pitch=Object(r.a)(t,0),this.range=Object(r.a)(n,0)}GO.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)||(t=new GO),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var qO=GO,YO=(n(185),d.factorial);function $O(e,t,n,i,r,o){var a,s,c,l=0;if(i>0){for(s=0;s<r;s++){for(a=!1,c=0;c<o.length&&!a;c++)s===o[c]&&(a=!0);a||(o.push(s),l+=$O(e,t,n,i-1,r,o),o.splice(o.length-1,1))}return l}for(l=1,s=0;s<r;s++){for(a=!1,c=0;c<o.length&&!a;c++)s===o[c]&&(a=!0);a||(l*=e-n[t[s]])}return l}var XO={type:"Hermite",getRequiredDataPoints:function(e,t){if(t=Object(r.a)(t,0),!Object(o.a)(e))throw new a.a("degree is required.");if(e<0)throw new a.a("degree must be 0 or greater.");if(t<0)throw new a.a("inputOrder must be 0 or greater.");return Math.max(Math.floor((e+1)/(t+1)),2)},interpolateOrderZero:function(e,t,n,i,r){var a,s,c,l,u;Object(o.a)(r)||(r=new Array(i));var h=t.length,d=new Array(i);for(a=0;a<i;a++){r[a]=0;var f=new Array(h);for(d[a]=f,s=0;s<h;s++)f[s]=[]}var p=h,m=new Array(p);for(a=0;a<p;a++)m[a]=a;var g=h-1;for(l=0;l<i;l++){for(s=0;s<p;s++)u=m[s]*i+l,d[l][0].push(n[u]);for(a=1;a<p;a++){var v=!1;for(s=0;s<p-a;s++){var _,b=t[m[s]],y=t[m[s+a]];y-b<=0?(_=n[u=m[s]*i+i*a+l],d[l][a].push(_/YO(a))):(_=d[l][a-1][s+1]-d[l][a-1][s],d[l][a].push(_/(y-b))),v=v||0!==_}v||(g=a-1)}}for(c=0,0;c<=0;c++)for(a=c;a<=g;a++){var w=$O(e,m,t,c,a,[]);for(l=0;l<i;l++){var O=d[l][a][0];r[l+c*i]+=O*w}}return r}},KO=[];XO.interpolate=function(e,t,n,i,r,a,s){var c=i*(a+1);Object(o.a)(s)||(s=new Array(c));for(var l=0;l<c;l++)s[l]=0;var u,h=t.length,f=new Array(h*(r+1));for(u=0;u<h;u++)for(var p=0;p<r+1;p++)f[u*(r+1)+p]=u;for(var m=f.length,g=KO,v=function(e,t,n,i,r,o){for(var a,s,c=-1,l=t.length,u=l*(l+1)/2,h=0;h<r;h++){var f=Math.floor(h*u);for(a=0;a<l;a++)s=t[a]*r*(o+1)+h,e[f+a]=i[s];for(var p=1;p<l;p++){var m=0,g=Math.floor(p*(1-p)/2)+l*p,v=!1;for(a=0;a<l-p;a++){var _,b,y=n[t[a]],w=n[t[a+p]];if(w-y<=0)s=t[a]*r*(o+1)+r*p+h,_=i[s],b=_/d.factorial(p),e[f+g+m]=b,m++;else{var O=Math.floor((p-1)*(2-p)/2)+l*(p-1);_=e[f+O+a+1]-e[f+O+a],b=_/(w-y),e[f+g+m]=b,m++}v=v||0!==_}v&&(c=Math.max(c,p))}}return c}(g,f,t,n,i,r),_=[],b=m*(m+1)/2,y=Math.min(v,a),w=0;w<=y;w++)for(u=w;u<=v;u++){_.length=0;for(var O=$O(e,f,t,w,u,_),C=Math.floor(u*(1-u)/2)+m*u,E=0;E<i;E++){var A=g[Math.floor(E*b)+C];s[E+w*i]+=A*O}}return s};var QO=XO;var ZO=function(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i},JO={},eC=.9856003,tC=26.4057084,nC=13.064993,iC=.3287146,rC=1.7484877,oC=new hr;JO.ComputeMoon=function(e,t){Object(o.a)(e)||(e=hr.now()),oC=hr.addSeconds(e,32.184,oC);var n=hr.totalDays(oC)-2451545,i=n/Ui.DAYS_PER_JULIAN_CENTURY,r=(125.045+-.0529921*n)*d.RADIANS_PER_DEGREE,a=(250.089+-.1059842*n)*d.RADIANS_PER_DEGREE,s=(260.008+13.0120009*n)*d.RADIANS_PER_DEGREE,c=(176.625+13.3407154*n)*d.RADIANS_PER_DEGREE,l=(357.529+eC*n)*d.RADIANS_PER_DEGREE,u=(311.589+tC*n)*d.RADIANS_PER_DEGREE,h=(134.963+nC*n)*d.RADIANS_PER_DEGREE,f=(276.617+iC*n)*d.RADIANS_PER_DEGREE,p=(34.226+rC*n)*d.RADIANS_PER_DEGREE,m=(15.134+-.1589763*n)*d.RADIANS_PER_DEGREE,g=(119.743+.0036096*n)*d.RADIANS_PER_DEGREE,v=(239.961+.1643573*n)*d.RADIANS_PER_DEGREE,_=(25.053+12.9590088*n)*d.RADIANS_PER_DEGREE,b=Math.sin(r),y=Math.sin(a),w=Math.sin(s),O=Math.sin(c),C=Math.sin(l),E=Math.sin(u),A=Math.sin(h),x=Math.sin(f),T=Math.sin(p),S=Math.sin(m),D=Math.sin(g),P=Math.sin(v),I=Math.sin(_),M=Math.cos(r),R=Math.cos(a),L=Math.cos(s),j=Math.cos(c),F=Math.cos(l),N=Math.cos(u),z=Math.cos(h),k=Math.cos(f),B=Math.cos(p),H=Math.cos(m),V=Math.cos(g),U=Math.cos(v),W=Math.cos(_),G=(269.9949+.0031*i-3.8787*b-.1204*y+.07*w-.0172*O+.0072*E-.0052*S+.0043*I)*d.RADIANS_PER_DEGREE,q=(66.5392+.013*i+1.5419*M+.0239*R-.0278*L+.0068*j-.0029*N+9e-4*z+8e-4*H-9e-4*W)*d.RADIANS_PER_DEGREE,Y=(38.3213+13.17635815*n-14e-13*n*n+3.561*b+.1208*y-.0642*w+.0158*O+.0252*C-.0066*E-.0047*A-.0046*x+.0028*T+.0052*S+.004*D+.0019*P-.0044*I)*d.RADIANS_PER_DEGREE,$=(13.17635815-2*n*14e-13+3.561*M*-.0529921+.1208*R*-.1059842-.0642*L*13.0120009+.0158*j*13.3407154+.0252*F*eC-.0066*N*tC-.0047*z*nC-.0046*k*iC+.0028*B*rC+.0052*H*-.1589763+.004*V*.0036096+.0019*U*.1643573-.0044*W*12.9590088)/86400*d.RADIANS_PER_DEGREE;return Object(o.a)(t)||(t=new ZO),t.rightAscension=G,t.declination=q,t.rotation=Y,t.rotationRate=$,t};var aC=JO;function sC(e){Object(o.a)(e)&&"function"===typeof e||(e=aC.ComputeMoon),this._computeFunction=e}var cC=new O,lC=new O,uC=new O;var hC=new oe,dC=new No;sC.prototype.evaluate=function(e,t){Object(o.a)(e)||(e=hr.now());var n=this._computeFunction(e),i=function(e,t,n){var i=cC;i.x=Math.cos(e+d.PI_OVER_TWO),i.y=Math.sin(e+d.PI_OVER_TWO),i.z=0;var r=Math.cos(t),a=uC;a.x=r*Math.cos(e),a.y=r*Math.sin(e),a.z=Math.sin(t);var s=O.cross(a,i,lC);return Object(o.a)(n)||(n=new oe),n[0]=i.x,n[1]=s.x,n[2]=a.x,n[3]=i.y,n[4]=s.y,n[5]=a.y,n[6]=i.z,n[7]=s.z,n[8]=a.z,n}(n.rightAscension,n.declination,t),r=d.zeroToTwoPi(n.rotation),a=No.fromAxisAngle(O.UNIT_Z,r,dC),s=oe.fromQuaternion(No.conjugate(a,a),hC);return oe.multiply(s,i,i)};var fC=sC,pC={type:void 0};pC.getRequiredDataPoints=a.a.throwInstantiationError,pC.interpolateOrderZero=a.a.throwInstantiationError,pC.interpolate=a.a.throwInstantiationError;function mC(e){i.a.defined("url",e),this._url=_t.a.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(mC.prototype,{url:{get:function(){return this._url}}}),mC.prototype.geocode=function(e,t){return i.a.typeOf.string("query",e),this._url.getDerivedResource({url:t===Ty.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then((function(e){return e.features.map((function(e){var t,n=e.bbox;if(Object(o.a)(n))t=Se.fromDegrees(n[0],n[1],n[2],n[3]);else{var i=e.geometry.coordinates[0],r=e.geometry.coordinates[1];t=O.fromDegrees(i,r)}return{displayName:e.properties.label,destination:t}}))}))};var gC=mC;function vC(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.typeOf.object("options.scene",e.scene);var t=Object(r.a)(e.accessToken,f_.defaultAccessToken),n=_t.a.createIfNeeded(Object(r.a)(e.server,f_.defaultServer));n.appendForwardSlash();var a=f_.getDefaultTokenCredit(t);Object(o.a)(a)&&e.scene.frameState.creditDisplay.addDefaultCredit(yn.clone(a));var s=n.getDerivedResource({url:"v1/geocode"});Object(o.a)(t)&&s.appendQueryParameters({access_token:t}),this._accessToken=t,this._server=n,this._pelias=new gC(s)}vC.prototype.geocode=function(e,t){return this._pelias.geocode(e,t)};var _C=vC;n(120),n(122);function bC(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.start=Object(o.a)(e.start)?hr.clone(e.start):new hr,this.stop=Object(o.a)(e.stop)?hr.clone(e.stop):new hr,this.data=e.data,this.isStartIncluded=Object(r.a)(e.isStartIncluded,!0),this.isStopIncluded=Object(r.a)(e.isStopIncluded,!0)}Object.defineProperties(bC.prototype,{isEmpty:{get:function(){var e=hr.compare(this.stop,this.start);return e<0||0===e&&(!this.isStartIncluded||!this.isStopIncluded)}}});var yC={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};bC.fromIso8601=function(e,t){i.a.typeOf.object("options",e),i.a.typeOf.string("options.iso8601",e.iso8601);var n=e.iso8601.split("/");if(2!==n.length)throw new a.a("options.iso8601 is an invalid ISO 8601 interval.");var s=hr.fromIso8601(n[0]),c=hr.fromIso8601(n[1]),l=Object(r.a)(e.isStartIncluded,!0),u=Object(r.a)(e.isStopIncluded,!0),h=e.data;return Object(o.a)(t)?(t.start=s,t.stop=c,t.isStartIncluded=l,t.isStopIncluded=u,t.data=h,t):(yC.start=s,yC.stop=c,yC.isStartIncluded=l,yC.isStopIncluded=u,yC.data=h,new bC(yC))},bC.toIso8601=function(e,t){return i.a.typeOf.object("timeInterval",e),hr.toIso8601(e.start,t)+"/"+hr.toIso8601(e.stop,t)},bC.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new bC(e)},bC.equals=function(e,t,n){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&hr.equals(e.start,t.start)&&hr.equals(e.stop,t.stop)&&(e.data===t.data||Object(o.a)(n)&&n(e.data,t.data)))},bC.equalsEpsilon=function(e,t,n,i){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&hr.equalsEpsilon(e.start,t.start,n)&&hr.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||Object(o.a)(i)&&i(e.data,t.data)))},bC.intersect=function(e,t,n,r){if(i.a.typeOf.object("left",e),!Object(o.a)(t))return bC.clone(bC.EMPTY,n);var a=e.start,s=e.stop,c=t.start,l=t.stop,u=hr.greaterThanOrEquals(c,a)&&hr.greaterThanOrEquals(s,c),h=!u&&hr.lessThanOrEquals(c,a)&&hr.lessThanOrEquals(a,l);if(!u&&!h)return bC.clone(bC.EMPTY,n);var d=e.isStartIncluded,f=e.isStopIncluded,p=t.isStartIncluded,m=t.isStopIncluded,g=hr.lessThan(s,l);return Object(o.a)(n)||(n=new bC),n.start=u?c:a,n.isStartIncluded=d&&p||!hr.equals(c,a)&&(u&&p||h&&d),n.stop=g?s:l,n.isStopIncluded=g?f:f&&m||!hr.equals(l,s)&&m,n.data=Object(o.a)(r)?r(e.data,t.data):e.data,n},bC.contains=function(e,t){if(i.a.typeOf.object("timeInterval",e),i.a.typeOf.object("julianDate",t),e.isEmpty)return!1;var n=hr.compare(e.start,t);if(0===n)return e.isStartIncluded;var r=hr.compare(t,e.stop);return 0===r?e.isStopIncluded:n<0&&r<0},bC.prototype.clone=function(e){return bC.clone(this,e)},bC.prototype.equals=function(e,t){return bC.equals(this,e,t)},bC.prototype.equalsEpsilon=function(e,t,n){return bC.equalsEpsilon(this,e,t,n)},bC.prototype.toString=function(){return bC.toIso8601(this)},bC.EMPTY=Object.freeze(new bC({start:new hr,stop:new hr,isStartIncluded:!1,isStopIncluded:!1}));var wC=bC,OC=Object.freeze(hr.fromIso8601("0000-01-01T00:00:00Z")),CC=Object.freeze(hr.fromIso8601("9999-12-31T24:00:00Z")),EC={MINIMUM_VALUE:OC,MAXIMUM_VALUE:CC,MAXIMUM_INTERVAL:Object.freeze(new wC({start:OC,stop:CC}))},AC=Object.freeze({SHIFT:0,CTRL:1,ALT:2}),xC={type:"Lagrange",getRequiredDataPoints:function(e){return Math.max(e+1,2)},interpolateOrderZero:function(e,t,n,i,r){var a,s;Object(o.a)(r)||(r=new Array(i));var c=t.length;for(a=0;a<i;a++)r[a]=0;for(a=0;a<c;a++){var l=1;for(s=0;s<c;s++)if(s!==a){var u=t[a]-t[s];l*=(e-t[s])/u}for(s=0;s<i;s++)r[s]+=l*n[a*i+s]}return r}},TC=xC,SC={type:"Linear",getRequiredDataPoints:function(e){return 2},interpolateOrderZero:function(e,t,n,i,r){if(2!==t.length)throw new a.a("The xTable provided to the linear interpolator must have exactly two elements.");if(i<=0)throw new a.a("There must be at least 1 dependent variable for each independent variable.");var s,c,l;Object(o.a)(r)||(r=new Array(i));var u=t[0],h=t[1];if(u===h)throw new a.a("Divide by zero error: xTable[0] and xTable[1] are equal");for(s=0;s<i;s++)c=n[s],l=n[s+i],r[s]=((l-c)*e+h*c-u*l)/(h-u);return r}},DC=SC,PC=new ac("transcodeCRNToDXT",Number.POSITIVE_INFINITY);var IC=function(e){if(!Object(o.a)(e))throw new a.a("resourceOrUrlOrBuffer is required.");var t;if(t=e instanceof ArrayBuffer||ArrayBuffer.isView(e)?Yt.a.resolve(e):_t.a.createIfNeeded(e).fetchArrayBuffer(),Object(o.a)(t))return t.then((function(e){if(Object(o.a)(e)){var t=[];return e instanceof ArrayBuffer?t.push(e):(0===e.byteOffset&&e.byteLength===e.buffer.byteLength||(e=e.slice(0,e.length)),t.push(e.buffer)),PC.scheduleTask(e,t)}})).then((function(e){return qf.clone(e)}))};var MC=function(e){var t=e.uint8Array,n=e.format,a=e.request,s=Object(r.a)(e.flipY,!1);i.a.typeOf.object("uint8Array",t),i.a.typeOf.string("format",n);var c,l=new Blob([t],{type:n});return _t.a.supportsImageBitmapOptions().then((function(e){return e?Object(Yt.a)(_t.a.createImageBitmapFromBlob(l,{flipY:s,premultiplyAlpha:!1})):(c=window.URL.createObjectURL(l),new _t.a({url:c,request:a}).fetchImage({flipY:s}))})).then((function(e){return Object(o.a)(c)&&window.URL.revokeObjectURL(c),e})).otherwise((function(e){return Object(o.a)(c)&&window.URL.revokeObjectURL(c),Yt.a.reject(e)}))},RC={UNSIGNED_BYTE:Ts.UNSIGNED_BYTE,UNSIGNED_SHORT:Ts.UNSIGNED_SHORT,UNSIGNED_INT:Ts.UNSIGNED_INT,FLOAT:Ts.FLOAT,HALF_FLOAT:Ts.HALF_FLOAT_OES,UNSIGNED_INT_24_8:Ts.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:Ts.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:Ts.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:Ts.UNSIGNED_SHORT_5_6_5,toWebGLConstant:function(e,t){switch(e){case RC.UNSIGNED_BYTE:return Ts.UNSIGNED_BYTE;case RC.UNSIGNED_SHORT:return Ts.UNSIGNED_SHORT;case RC.UNSIGNED_INT:return Ts.UNSIGNED_INT;case RC.FLOAT:return Ts.FLOAT;case RC.HALF_FLOAT:return t.webgl2?Ts.HALF_FLOAT:Ts.HALF_FLOAT_OES;case RC.UNSIGNED_INT_24_8:return Ts.UNSIGNED_INT_24_8;case RC.UNSIGNED_SHORT_4_4_4_4:return Ts.UNSIGNED_SHORT_4_4_4_4;case RC.UNSIGNED_SHORT_5_5_5_1:return Ts.UNSIGNED_SHORT_5_5_5_1;case RC.UNSIGNED_SHORT_5_6_5:return RC.UNSIGNED_SHORT_5_6_5}},isPacked:function(e){return e===RC.UNSIGNED_INT_24_8||e===RC.UNSIGNED_SHORT_4_4_4_4||e===RC.UNSIGNED_SHORT_5_5_5_1||e===RC.UNSIGNED_SHORT_5_6_5},sizeInBytes:function(e){switch(e){case RC.UNSIGNED_BYTE:return 1;case RC.UNSIGNED_SHORT:case RC.UNSIGNED_SHORT_4_4_4_4:case RC.UNSIGNED_SHORT_5_5_5_1:case RC.UNSIGNED_SHORT_5_6_5:case RC.HALF_FLOAT:return 2;case RC.UNSIGNED_INT:case RC.FLOAT:case RC.UNSIGNED_INT_24_8:return 4}},validate:function(e){return e===RC.UNSIGNED_BYTE||e===RC.UNSIGNED_SHORT||e===RC.UNSIGNED_INT||e===RC.FLOAT||e===RC.HALF_FLOAT||e===RC.UNSIGNED_INT_24_8||e===RC.UNSIGNED_SHORT_4_4_4_4||e===RC.UNSIGNED_SHORT_5_5_5_1||e===RC.UNSIGNED_SHORT_5_6_5}},LC=Object.freeze(RC),jC={DEPTH_COMPONENT:Ts.DEPTH_COMPONENT,DEPTH_STENCIL:Ts.DEPTH_STENCIL,ALPHA:Ts.ALPHA,RGB:Ts.RGB,RGBA:Ts.RGBA,LUMINANCE:Ts.LUMINANCE,LUMINANCE_ALPHA:Ts.LUMINANCE_ALPHA,RGB_DXT1:Ts.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:Ts.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:Ts.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:Ts.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:Ts.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:Ts.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:Ts.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:Ts.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGB_ETC1:Ts.COMPRESSED_RGB_ETC1_WEBGL,componentsLength:function(e){switch(e){case jC.RGB:return 3;case jC.RGBA:return 4;case jC.LUMINANCE_ALPHA:return 2;case jC.ALPHA:case jC.LUMINANCE:default:return 1}},validate:function(e){return e===jC.DEPTH_COMPONENT||e===jC.DEPTH_STENCIL||e===jC.ALPHA||e===jC.RGB||e===jC.RGBA||e===jC.LUMINANCE||e===jC.LUMINANCE_ALPHA||e===jC.RGB_DXT1||e===jC.RGBA_DXT1||e===jC.RGBA_DXT3||e===jC.RGBA_DXT5||e===jC.RGB_PVRTC_4BPPV1||e===jC.RGB_PVRTC_2BPPV1||e===jC.RGBA_PVRTC_4BPPV1||e===jC.RGBA_PVRTC_2BPPV1||e===jC.RGB_ETC1},isColorFormat:function(e){return e===jC.ALPHA||e===jC.RGB||e===jC.RGBA||e===jC.LUMINANCE||e===jC.LUMINANCE_ALPHA},isDepthFormat:function(e){return e===jC.DEPTH_COMPONENT||e===jC.DEPTH_STENCIL},isCompressedFormat:function(e){return e===jC.RGB_DXT1||e===jC.RGBA_DXT1||e===jC.RGBA_DXT3||e===jC.RGBA_DXT5||e===jC.RGB_PVRTC_4BPPV1||e===jC.RGB_PVRTC_2BPPV1||e===jC.RGBA_PVRTC_4BPPV1||e===jC.RGBA_PVRTC_2BPPV1||e===jC.RGB_ETC1},isDXTFormat:function(e){return e===jC.RGB_DXT1||e===jC.RGBA_DXT1||e===jC.RGBA_DXT3||e===jC.RGBA_DXT5},isPVRTCFormat:function(e){return e===jC.RGB_PVRTC_4BPPV1||e===jC.RGB_PVRTC_2BPPV1||e===jC.RGBA_PVRTC_4BPPV1||e===jC.RGBA_PVRTC_2BPPV1},isETC1Format:function(e){return e===jC.RGB_ETC1},compressedTextureSizeInBytes:function(e,t,n){switch(e){case jC.RGB_DXT1:case jC.RGBA_DXT1:case jC.RGB_ETC1:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case jC.RGBA_DXT3:case jC.RGBA_DXT5:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case jC.RGB_PVRTC_4BPPV1:case jC.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case jC.RGB_PVRTC_2BPPV1:case jC.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);default:return 0}},textureSizeInBytes:function(e,t,n,i){var r=jC.componentsLength(e);return LC.isPacked(t)&&(r=1),r*LC.sizeInBytes(t)*n*i},alignmentInBytes:function(e,t,n){var i=jC.textureSizeInBytes(e,t,n,1)%4;return 0===i?4:2===i?2:1},createTypedArray:function(e,t,n,i){var r=LC.sizeInBytes(t);return new(r===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:r===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:r===Float32Array.BYTES_PER_ELEMENT&&t===LC.FLOAT?Float32Array:Uint32Array)(jC.componentsLength(e)*n*i)},flipY:function(e,t,n,i,r){if(1===r)return e;for(var o=jC.createTypedArray(t,n,i,r),a=jC.componentsLength(t),s=i*a,c=0;c<r;++c)for(var l=c*i*a,u=(r-c-1)*i*a,h=0;h<s;++h)o[u+h]=e[l+h];return o},toInternalFormat:function(e,t,n){if(!n.webgl2)return e;if(e===jC.DEPTH_STENCIL)return Ts.DEPTH24_STENCIL8;if(e===jC.DEPTH_COMPONENT){if(t===LC.UNSIGNED_SHORT)return Ts.DEPTH_COMPONENT16;if(t===LC.UNSIGNED_INT)return Ts.DEPTH_COMPONENT24}if(t===LC.FLOAT)switch(e){case jC.RGBA:return Ts.RGBA32F;case jC.RGB:return Ts.RGB32F;case jC.RG:return Ts.RG32F;case jC.R:return Ts.R32F}if(t===LC.HALF_FLOAT)switch(e){case jC.RGBA:return Ts.RGBA16F;case jC.RGB:return Ts.RGB16F;case jC.RG:return Ts.RG16F;case jC.R:return Ts.R16F}return e}},FC=Object.freeze(jC);var NC=[171,75,84,88,32,49,49,187,13,10,26,10],zC=["positiveX","negativeX","positiveY","negativeY","positiveZ","negativeZ"];var kC=function(e){var t;if(i.a.defined("resourceOrUrlOrBuffer",e),t=e instanceof ArrayBuffer||ArrayBuffer.isView(e)?Yt.a.resolve(e):_t.a.createIfNeeded(e).fetchArrayBuffer(),Object(o.a)(t))return t.then((function(e){if(Object(o.a)(e))return function(e){var t,n,i,r=new Uint8Array(e),a=!0;for(t=0;t<NC.length;++t)if(NC[t]!==r[t]){a=!1;break}if(!a)throw new de.a("Invalid KTX file.");Object(o.a)(e.buffer)?(n=new DataView(e.buffer),i=e.byteOffset):(n=new DataView(e),i=0);i+=12;var s=n.getUint32(i,!0);if(i+=4,67305985!==s)throw new de.a("File is the wrong endianness.");var c=n.getUint32(i,!0);i+=4;var l=n.getUint32(i,!0);i+=4;var u=n.getUint32(i,!0);i+=4;var h=n.getUint32(i,!0);i+=4;var d=n.getUint32(i,!0);i+=4;var f=n.getUint32(i,!0);i+=4;var p=n.getUint32(i,!0);i+=4;var m=n.getUint32(i,!0);i+=4;var g=n.getUint32(i,!0);i+=4;var v=n.getUint32(i,!0);i+=4;var _=n.getUint32(i,!0);i+=4;var b=n.getUint32(i,!0);i+=4,i+=b;var y,w=n.getUint32(i,!0);i+=4,y=Object(o.a)(e.buffer)?new Uint8Array(e.buffer,i,w):new Uint8Array(e,i,w);h===Ts.RGB8?h=FC.RGB:h===Ts.RGBA8&&(h=FC.RGBA);if(!FC.validate(h))throw new de.a("glInternalFormat is not a valid format.");if(FC.isCompressedFormat(h)){if(0!==c)throw new de.a("glType must be zero when the texture is compressed.");if(1!==l)throw new de.a("The type size for compressed textures must be 1.");if(0!==u)throw new de.a("glFormat must be zero when the texture is compressed.")}else{if(c!==Ts.UNSIGNED_BYTE)throw new de.a("Only unsigned byte buffers are supported.");if(d!==u)throw new de.a("The base internal format must be the same as the format for uncompressed textures.")}if(0!==m)throw new de.a("3D textures are unsupported.");if(0!==g)throw new de.a("Texture arrays are unsupported.");var O=y.byteOffset,C=new Array(_);for(t=0;t<_;++t){for(var E=C[t]={},A=0;A<v;++A){var x=f>>t,T=p>>t,S=FC.isCompressedFormat(h)?FC.compressedTextureSizeInBytes(h,x,T):FC.textureSizeInBytes(h,c,x,T),D=new Uint8Array(y.buffer,O,S);E[zC[A]]=new qf(h,x,T,D),O+=S}O+=3-(O+3)%4+4}var P=C;if(1===v)for(t=0;t<_;++t)P[t]=P[t][zC[0]];1===_&&(P=P[0]);return P}(e)}))};function BC(e){e=Object(r.a)(e,0),this._array=new Array(e),this._length=e}Object.defineProperties(BC.prototype,{length:{get:function(){return this._length},set:function(e){i.a.typeOf.number.greaterThanOrEquals("length",e,0);var t=this._array,n=this._length;if(e<n)for(var r=e;r<n;++r)t[r]=void 0;else e>t.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}}),BC.prototype.get=function(e){return i.a.typeOf.number.lessThan("index",e,this._array.length),this._array[e]},BC.prototype.set=function(e,t){i.a.typeOf.number("index",e),e>=this._length&&(this.length=e+1),this._array[e]=t},BC.prototype.peek=function(){return this._array[this._length-1]},BC.prototype.push=function(e){var t=this.length++;this._array[t]=e},BC.prototype.pop=function(){if(0!==this._length){var e=this._array[this._length-1];return--this.length,e}},BC.prototype.reserve=function(e){i.a.typeOf.number.greaterThanOrEquals("length",e,0),e>this._array.length&&(this._array.length=e)},BC.prototype.resize=function(e){i.a.typeOf.number.greaterThanOrEquals("length",e,0),this.length=e},BC.prototype.trim=function(e){e=Object(r.a)(e,this._length),this._array.length=e};var HC,VC=BC,UC={defaultAccessToken:void 0},WC=!1,GC="<b>This application is using Cesium's default Mapbox access token. Please create a new access token for the application as soon as possible and prior to deployment by visiting <a href=https://www.mapbox.com/account/apps/>https://www.mapbox.com/account/apps/</a>, and provide your token to Cesium by setting the Cesium.MapboxApi.defaultAccessToken property before constructing the CesiumWidget or any other object that uses the Mapbox API.</b>";UC.getAccessToken=function(e){return Object(o.a)(e)?e:Object(o.a)(UC.defaultAccessToken)?UC.defaultAccessToken:(WC||(console.log(GC),WC=!0),"pk.eyJ1IjoiYW5hbHl0aWNhbGdyYXBoaWNzIiwiYSI6ImNpd204Zm4wejAwNzYyeW5uNjYyZmFwdWEifQ.7i-VIZZWX8pd1bTfxIVj9g")},UC.getErrorCredit=function(e){if(!Object(o.a)(e)&&!Object(o.a)(UC.defaultAccessToken))return Object(o.a)(HC)||(HC=new yn(GC,!0)),HC};var qC=UC;function YC(){a.a.throwInstantiationError()}Object.defineProperties(YC.prototype,{ellipsoid:{get:a.a.throwInstantiationError}}),YC.prototype.project=a.a.throwInstantiationError,YC.prototype.unproject=a.a.throwInstantiationError;var $C=[],XC=[];function KC(e,t,n,i,r){if(!(i>=r)){var o=Math.floor(.5*(i+r));KC(e,t,n,i,o),KC(e,t,n,o+1,r),function(e,t,n,i,r,o){var a,s,c=r-i+1,l=o-r,u=$C,h=XC;for(a=0;a<c;++a)u[a]=e[i+a];for(s=0;s<l;++s)h[s]=e[r+s+1];a=0,s=0;for(var d=i;d<=o;++d){var f=u[a],p=h[s];a<c&&(s>=l||t(f,p,n)<=0)?(e[d]=f,++a):s<l&&(e[d]=p,++s)}}(e,t,n,i,o,r)}}var QC=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required.");if(!Object(o.a)(t))throw new a.a("comparator is required.");var i=e.length,r=Math.ceil(.5*i);$C.length=r,XC.length=r,KC(e,t,n,0,i-1),$C.length=0,XC.length=0};function ZC(e,t,n,i){this.near=Object(r.a)(e,0),this.nearValue=Object(r.a)(t,0),this.far=Object(r.a)(n,1),this.farValue=Object(r.a)(i,0)}ZC.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new ZC(e.near,e.nearValue,e.far,e.farValue)},ZC.packedLength=4,ZC.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t},ZC.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");return t=Object(r.a)(t,0),Object(o.a)(n)||(n=new ZC),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n},ZC.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue},ZC.prototype.clone=function(e){return ZC.clone(this,e)},ZC.prototype.equals=function(e){return ZC.equals(this,e)};var JC=ZC,eE=n(124),tE=Object.freeze({NONE:-1,PARTIAL:0,FULL:1});function nE(e,t){if(!Object(o.a)(e))throw new a.a("occluderBoundingSphere is required.");if(!Object(o.a)(t))throw new a.a("camera position is required.");this._occluderPosition=O.clone(e.center),this._occluderRadius=e.radius,this._horizonDistance=0,this._horizonPlaneNormal=void 0,this._horizonPlanePosition=void 0,this._cameraPosition=void 0,this.cameraPosition=t}var iE=new O;Object.defineProperties(nE.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){if(!Object(o.a)(e))throw new a.a("cameraPosition is required.");e=O.clone(e,this._cameraPosition);var t,n,i,r=O.subtract(this._occluderPosition,e,iE),s=O.magnitudeSquared(r),c=this._occluderRadius*this._occluderRadius;if(s>c){t=Math.sqrt(s-c),s=1/Math.sqrt(s),n=O.multiplyByScalar(r,s,iE);var l=t*t*s;i=O.add(e,O.multiplyByScalar(n,l,iE),iE)}else t=Number.MAX_VALUE;this._horizonDistance=t,this._horizonPlaneNormal=n,this._horizonPlanePosition=i,this._cameraPosition=e}}}),nE.fromBoundingSphere=function(e,t,n){if(!Object(o.a)(e))throw new a.a("occluderBoundingSphere is required.");if(!Object(o.a)(t))throw new a.a("camera position is required.");return Object(o.a)(n)?(O.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new nE(e,t)};var rE=new O;nE.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){var t=O.subtract(e,this._occluderPosition,rE),n=this._occluderRadius;if((n=O.magnitudeSquared(t)-n*n)>0)return n=Math.sqrt(n)+this._horizonDistance,t=O.subtract(e,this._cameraPosition,t),n*n>O.magnitudeSquared(t)}return!1};var oE=new O;nE.prototype.isBoundingSphereVisible=function(e){var t=O.clone(e.center,oE),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){var i=O.subtract(t,this._occluderPosition,rE),r=this._occluderRadius-n;if(r=O.magnitudeSquared(i)-r*r,n<this._occluderRadius)return r>0&&(r=Math.sqrt(r)+this._horizonDistance,i=O.subtract(t,this._cameraPosition,i),r*r+n*n>O.magnitudeSquared(i));if(r>0){i=O.subtract(t,this._cameraPosition,i);var o=O.magnitudeSquared(i),a=this._occluderRadius*this._occluderRadius,s=n*n;return(this._horizonDistance*this._horizonDistance+a)*s>o*a||(r=Math.sqrt(r)+this._horizonDistance)*r+s>o}return!0}return!1};var aE=new O;nE.prototype.computeVisibility=function(e){if(!Object(o.a)(e))throw new a.a("occludeeBS is required.");var t=O.clone(e.center),n=e.radius;if(n>this._occluderRadius)return tE.FULL;if(this._horizonDistance!==Number.MAX_VALUE){var i=O.subtract(t,this._occluderPosition,aE),r=this._occluderRadius-n,s=O.magnitudeSquared(i);if((r=s-r*r)>0){r=Math.sqrt(r)+this._horizonDistance,i=O.subtract(t,this._cameraPosition,i);var c=O.magnitudeSquared(i);return r*r+n*n<c?tE.NONE:(r=s-(r=this._occluderRadius+n)*r)>0?c<(r=Math.sqrt(r)+this._horizonDistance)*r+n*n?tE.FULL:tE.PARTIAL:(i=O.subtract(t,this._horizonPlanePosition,i),O.dot(i,this._horizonPlaneNormal)>-n?tE.PARTIAL:tE.FULL)}}return tE.NONE};var sE=new O;nE.computeOccludeePoint=function(e,t,n){if(!Object(o.a)(e))throw new a.a("occluderBoundingSphere is required.");if(!Object(o.a)(n))throw new a.a("positions is required.");if(0===n.length)throw new a.a("positions must contain at least one element");var i=O.clone(t),r=O.clone(e.center),s=e.radius,c=n.length;if(O.equals(r,t))throw new a.a("occludeePosition must be different than occluderBoundingSphere.center");var l=O.normalize(O.subtract(i,r,sE),sE),u=-O.dot(l,r),h=nE._anyRotationVector(r,l,u),d=nE._horizonToPlaneNormalDotProduct(e,l,u,h,n[0]);if(d){for(var f,p=1;p<c;++p){if(!(f=nE._horizonToPlaneNormalDotProduct(e,l,u,h,n[p])))return;f<d&&(d=f)}if(!(d<.0017453283658983088)){var m=s/d;return O.add(r,O.multiplyByScalar(l,m,sE),sE)}}};var cE=[];nE.computeOccludeePointFromRectangle=function(e,t){if(!Object(o.a)(e))throw new a.a("rectangle is required.");t=Object(r.a)(t,W.WGS84);var n=Se.subsample(e,t,0,cE),i=gt.fromPoints(n),s=O.ZERO;if(!O.equals(s,i.center))return nE.computeOccludeePoint(new gt(s,t.minimumRadius),i.center,n)};var lE=new O;nE._anyRotationVector=function(e,t,n){var i=O.abs(t,lE),r=i.x>i.y?0:1;(0===r&&i.z>i.x||1===r&&i.z>i.y)&&(r=2);var o,a=new O;0===r?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,o=O.UNIT_X):1===r?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,o=O.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,o=O.UNIT_Z);var s=(O.dot(t,i)+n)/-O.dot(t,o);return O.normalize(O.subtract(O.add(i,O.multiplyByScalar(o,s,a),i),e,i),i)};var uE=new O;nE._rotationVector=function(e,t,n,i,r){var o=O.subtract(i,e,uE);if(o=O.normalize(o,o),O.dot(t,o)<.9999999847691291){var a=O.cross(t,o,o);if(O.magnitude(a)>d.EPSILON13)return O.normalize(a,new O)}return r};var hE=new O,dE=new O,fE=new O,pE=new O;nE._horizonToPlaneNormalDotProduct=function(e,t,n,i,r){var o=O.clone(r,hE),a=O.clone(e.center,dE),s=e.radius,c=O.subtract(a,o,fE),l=O.magnitudeSquared(c),u=s*s;if(l<u)return!1;var h=l-u,d=Math.sqrt(h),f=d*(1/Math.sqrt(l))*d;c=O.normalize(c,c);var p=O.add(o,O.multiplyByScalar(c,f,pE),pE),m=Math.sqrt(h-f*f),g=this._rotationVector(a,t,n,o,i),v=O.fromElements(g.x*g.x*c.x+(g.x*g.y-g.z)*c.y+(g.x*g.z+g.y)*c.z,(g.x*g.y+g.z)*c.x+g.y*g.y*c.y+(g.y*g.z-g.x)*c.z,(g.x*g.z-g.y)*c.x+(g.y*g.z+g.x)*c.y+g.z*g.z*c.z,hE);v=O.normalize(v,v);var _=O.multiplyByScalar(v,m,hE);g=O.normalize(O.subtract(O.add(p,_,fE),a,fE),fE);var b=O.dot(t,g);g=O.normalize(O.subtract(O.subtract(p,_,g),a,g),g);var y=O.dot(t,g);return b<y?b:y};var mE=nE;function gE(e,t,n){e=Object(r.a)(e,0),t=Object(r.a)(t,0),n=Object(r.a)(n,0),this.value=new Float32Array([e,t,n])}Object.defineProperties(gE.prototype,{componentDatatype:{get:function(){return Ds.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}}),gE.fromCartesian3=function(e){return i.a.defined("offset",e),new gE(e.x,e.y,e.z)},gE.toValue=function(e,t){return i.a.defined("offset",e),Object(o.a)(t)||(t=new Float32Array([e.x,e.y,e.z])),t[0]=e.x,t[1]=e.y,t[2]=e.z,t};var vE=gE;function _E(e,t,n){i.a.defined("url",e),i.a.defined("apiKey",t),Object(o.a)(n)&&i.a.typeOf.object("params",n),(e=_t.a.createIfNeeded(e)).appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=Object(r.a)(n,{})}Object.defineProperties(_E.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}}}),_E.prototype.geocode=function(e){return i.a.typeOf.string("query",e),this._url.getDerivedResource({url:"json",queryParameters:Object(Wf.a)(this._params,{q:e})}).fetchJson().then((function(e){return e.results.map((function(e){var t,n=e.bounds;if(Object(o.a)(n))t=Se.fromDegrees(n.southwest.lng,n.southwest.lat,n.northeast.lng,n.northeast.lat);else{var i=e.geometry.lat,r=e.geometry.lng;t=O.fromDegrees(i,r)}return{displayName:e.formatted,destination:t}}))}))};a.a.throwInstantiationError,a.a.throwInstantiationError,a.a.throwInstantiationError,a.a.throwInstantiationError,n(184);var bE,yE=function(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)},wE=function(e,t,n,i){var r=e.measureText(t),o=yE(e.canvas,"font-family"),a=yE(e.canvas,"font-size").replace("px",""),s=yE(e.canvas,"font-style"),c=yE(e.canvas,"font-weight"),l=!/\S/.test(t);r.fontsize=a;var u=document.createElement("div");u.style.position="absolute",u.style.opacity=0,u.style.font=s+" "+c+" "+a+"px "+o,u.innerHTML=t+"<br/>"+t,document.body.appendChild(u),r.leading=1.2*a;var h=yE(u,"height");if((h=h.replace("px",""))>=2*a&&(r.leading=h/2|0),document.body.removeChild(u),l)r.ascent=0,r.descent=0,r.bounds={minx:0,maxx:r.width,miny:0,maxy:0},r.height=0;else{var d=document.createElement("canvas");d.width=r.width+100,d.height=3*a,d.style.opacity=1,d.style.fontFamily=o,d.style.fontSize=a,d.style.fontStyle=s,d.style.fontWeight=c;var f=d.getContext("2d");f.font=s+" "+c+" "+a+"px "+o;var p=d.width,m=d.height,g=m/2;f.fillStyle="white",f.fillRect(-1,-1,p+2,m+2),n&&(f.strokeStyle="black",f.lineWidth=e.lineWidth,f.strokeText(t,50,g)),i&&(f.fillStyle="black",f.fillText(t,50,g));for(var v=f.getImageData(0,0,p,m).data,_=0,b=4*p,y=v.length;++_<y&&255===v[_];);var w=_/b|0;for(_=y-1;--_>0&&255===v[_];);var O=_/b|0;for(_=0;_<y&&255===v[_];)(_+=b)>=y&&(_=_-y+4);var C=_%b/4|0,E=1;for(_=y-3;_>=0&&255===v[_];)(_-=b)<0&&(_=y-3-4*E++);var A=_%b/4+1|0;r.ascent=g-w,r.descent=O-g,r.bounds={minx:C-50,maxx:A-50,miny:0,maxy:O-w},r.height=O-w+1}return r};var OE=function(e,t){if(!Object(o.a)(e))throw new a.a("text is required.");if(""!==e){t=Object(r.a)(t,r.a.EMPTY_OBJECT);var n=Object(r.a)(t.font,"10px sans-serif"),i=Object(r.a)(t.stroke,!1),s=Object(r.a)(t.fill,!0),c=Object(r.a)(t.strokeWidth,1),l=Object(r.a)(t.backgroundColor,Hf.TRANSPARENT),u=Object(r.a)(t.padding,0),h=2*u,d=document.createElement("canvas");d.width=1,d.height=1,d.style.font=n;var f=d.getContext("2d");Object(o.a)(bE)||(Object(o.a)(f.imageSmoothingEnabled)?bE="imageSmoothingEnabled":Object(o.a)(f.mozImageSmoothingEnabled)?bE="mozImageSmoothingEnabled":Object(o.a)(f.webkitImageSmoothingEnabled)?bE="webkitImageSmoothingEnabled":Object(o.a)(f.msImageSmoothingEnabled)&&(bE="msImageSmoothingEnabled")),f.font=n,f.lineJoin="round",f.lineWidth=c,f[bE]=!1,f.textBaseline=Object(r.a)(t.textBaseline,"bottom"),d.style.visibility="hidden",document.body.appendChild(d);var p=wE(f,e,i,s);d.dimensions=p,document.body.removeChild(d),d.style.visibility="";var m=-p.bounds.minx,g=Math.ceil(p.width)+m+h,v=p.height+h,_=v-(v-p.ascent+u)+h;if(d.width=g,d.height=v,f.font=n,f.lineJoin="round",f.lineWidth=c,f[bE]=!1,l!==Hf.TRANSPARENT&&(f.fillStyle=l.toCssColorString(),f.fillRect(0,0,d.width,d.height)),i){var b=Object(r.a)(t.strokeColor,Hf.BLACK);f.strokeStyle=b.toCssColorString(),f.strokeText(e,m+u,_)}if(s){var y=Object(r.a)(t.fillColor,Hf.WHITE);f.fillStyle=y.toCssColorString(),f.fillText(e,m+u,_)}return d}};function CE(){this._cache={}}CE.prototype.fromColor=function(e,t){if(!Object(o.a)(e))throw new a.a("color is required");if(!Object(o.a)(t))throw new a.a("size is required");return TE(void 0,void 0,e,t,this._cache)},CE.prototype.fromUrl=function(e,t,n){if(!Object(o.a)(e))throw new a.a("url is required");if(!Object(o.a)(t))throw new a.a("color is required");if(!Object(o.a)(n))throw new a.a("size is required");return TE(e,void 0,t,n,this._cache)},CE.prototype.fromMakiIconId=function(e,t,n){if(!Object(o.a)(e))throw new a.a("id is required");if(!Object(o.a)(t))throw new a.a("color is required");if(!Object(o.a)(n))throw new a.a("size is required");return TE(At("Assets/Textures/maki/"+encodeURIComponent(e)+".png"),void 0,t,n,this._cache)},CE.prototype.fromText=function(e,t,n){if(!Object(o.a)(e))throw new a.a("text is required");if(!Object(o.a)(t))throw new a.a("color is required");if(!Object(o.a)(n))throw new a.a("size is required");return TE(void 0,e,t,n,this._cache)};var EE=new Hf;function AE(e,t,n){var i=n/2.5,r=i,o=i;t.width>t.height?o=i*(t.height/t.width):t.width<t.height&&(r=i*(t.width/t.height));var a=Math.round((n-r)/2),s=Math.round(7/24*n-o/2);e.globalCompositeOperation="destination-out",e.drawImage(t,a-1,s,r,o),e.drawImage(t,a,s-1,r,o),e.drawImage(t,a+1,s,r,o),e.drawImage(t,a,s+1,r,o),e.globalCompositeOperation="destination-over",e.fillStyle=Hf.BLACK.toCssColorString(),e.fillRect(a-1,s-1,r+2,o+2),e.globalCompositeOperation="destination-out",e.drawImage(t,a,s,r,o),e.globalCompositeOperation="destination-over",e.fillStyle=Hf.WHITE.toCssColorString(),e.fillRect(a-1,s-2,r+2,o+2)}var xE=new Array(4);function TE(e,t,n,i,r){xE[0]=e,xE[1]=t,xE[2]=n,xE[3]=i;var a=JSON.stringify(xE),s=r[a];if(Object(o.a)(s))return s;var c=document.createElement("canvas");c.width=i,c.height=i;var l=c.getContext("2d");if(function(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,EE).toCssColorString(),e.lineWidth=.846,e.beginPath(),e.moveTo(6.72,.422),e.lineTo(17.28,.422),e.bezierCurveTo(18.553,.422,19.577,1.758,19.577,3.415),e.lineTo(19.577,10.973),e.bezierCurveTo(19.577,12.63,18.553,13.966,17.282,13.966),e.lineTo(14.386,14.008),e.lineTo(11.826,23.578),e.lineTo(9.614,14.008),e.lineTo(6.719,13.965),e.bezierCurveTo(5.446,13.983,4.422,12.629,4.422,10.972),e.lineTo(4.422,3.416),e.bezierCurveTo(4.423,1.76,5.447,.423,6.718,.423),e.closePath(),e.fill(),e.stroke(),e.restore()}(l,n,i),Object(o.a)(e)){var u=_t.a.createIfNeeded(e).fetchImage().then((function(e){return AE(l,e,i),r[a]=c,c}));return r[a]=u,u}if(Object(o.a)(t)){var h=OE(t,{font:"bold "+i+"px sans-serif"});AE(l,h,i)}return r[a]=c,c}var SE=CE;function DE(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.vertexFormat,Ul.DEFAULT);this._vertexFormat=t,this._workerName="createPlaneGeometry"}DE.packedLength=Ul.packedLength,DE.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),Ul.pack(e._vertexFormat,t,n),t};var PE=new Ul,IE={vertexFormat:PE};DE.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=Ul.unpack(e,t,PE);return Object(o.a)(n)?(n._vertexFormat=Ul.clone(a,n._vertexFormat),n):new DE(IE)};var ME=new O(-.5,-.5,0),RE=new O(.5,.5,0);DE.createGeometry=function(e){var t,n,i=e._vertexFormat,r=new Bl;if(i.position){if((n=new Float64Array(12))[0]=ME.x,n[1]=ME.y,n[2]=0,n[3]=RE.x,n[4]=ME.y,n[5]=0,n[6]=RE.x,n[7]=RE.y,n[8]=0,n[9]=ME.x,n[10]=RE.y,n[11]=0,r.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:n}),i.normal){var o=new Float32Array(12);o[0]=0,o[1]=0,o[2]=1,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=1,o[9]=0,o[10]=0,o[11]=1,r.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:o})}if(i.st){var a=new Float32Array(8);a[0]=0,a[1]=0,a[2]=1,a[3]=0,a[4]=1,a[5]=1,a[6]=0,a[7]=1,r.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:a})}if(i.tangent){var s=new Float32Array(12);s[0]=1,s[1]=0,s[2]=0,s[3]=1,s[4]=0,s[5]=0,s[6]=1,s[7]=0,s[8]=0,s[9]=1,s[10]=0,s[11]=0,r.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:s})}if(i.bitangent){var c=new Float32Array(12);c[0]=0,c[1]=1,c[2]=0,c[3]=0,c[4]=1,c[5]=0,c[6]=0,c[7]=1,c[8]=0,c[9]=0,c[10]=1,c[11]=0,r.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:c})}(t=new Uint16Array(6))[0]=0,t[1]=1,t[2]=2,t[3]=0,t[4]=2,t[5]=3}return new zl({attributes:r,indices:t,primitiveType:xl.TRIANGLES,boundingSphere:new gt(O.ZERO,Math.sqrt(2))})};var LE=DE;function jE(){this._workerName="createPlaneOutlineGeometry"}jE.packedLength=0,jE.pack=function(e,t){return i.a.defined("value",e),i.a.defined("array",t),t},jE.unpack=function(e,t,n){return i.a.defined("array",e),Object(o.a)(n)?n:new jE};var FE=new O(-.5,-.5,0),NE=new O(.5,.5,0);jE.createGeometry=function(){var e=new Bl,t=new Uint16Array(8),n=new Float64Array(12);return n[0]=FE.x,n[1]=FE.y,n[2]=FE.z,n[3]=NE.x,n[4]=FE.y,n[5]=FE.z,n[6]=NE.x,n[7]=NE.y,n[8]=FE.z,n[9]=FE.x,n[10]=NE.y,n[11]=FE.z,e.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new zl({attributes:e,indices:t,primitiveType:xl.LINES,boundingSphere:new gt(O.ZERO,Math.sqrt(2))})};var zE=jE;new O;var kE=new R,BE=new R;function HE(e,t,n,i){var r=i.cartesianToCartographic(e,kE).height,o=i.cartesianToCartographic(t,BE);o.height=r,i.cartographicToCartesian(o,t);var a=i.cartesianToCartographic(n,BE);a.height=r-100,i.cartographicToCartesian(a,n)}var VE=new bl,UE=new O,WE=new O,GE=new O,qE=new O,YE=new O,$E=new O,XE=new O,KE=new O,QE=new O,ZE=new Mt,JE=new Mt,eA=new O,tA=new No,nA=new oe,iA=new oe;function rA(e){var t=e.vertexFormat,n=e.geometry,i=e.shadowVolume,r=n.attributes.position.values,a=r.length,s=e.wall,c=e.top||s,l=e.bottom||s;if(t.st||t.normal||t.tangent||t.bitangent||i){var u=e.boundingRectangle,h=e.tangentPlane,f=e.ellipsoid,p=e.stRotation,m=e.perPositionHeight,g=ZE;g.x=u.x,g.y=u.y;var v,_=t.st?new Float32Array(a/3*2):void 0;t.normal&&(v=m&&c&&!s?n.attributes.normal.values:new Float32Array(a));var b=t.tangent?new Float32Array(a):void 0,y=t.bitangent?new Float32Array(a):void 0,w=i?new Float32Array(a):void 0,C=0,E=0,A=WE,x=GE,T=qE,S=!0,D=nA,P=iA;if(0!==p){var I=No.fromAxisAngle(h._plane.normal,p,tA);D=oe.fromQuaternion(I,D),I=No.fromAxisAngle(h._plane.normal,-p,tA),P=oe.fromQuaternion(I,P)}else D=oe.clone(oe.IDENTITY,D),P=oe.clone(oe.IDENTITY,P);var M=0,R=0;c&&l&&(M=a/2,R=a/3,a/=2);for(var L=0;L<a;L+=3){var j=O.fromArray(r,L,eA);if(t.st){var F=oe.multiplyByVector(D,j,UE);F=f.scaleToGeodeticSurface(F,F);var N=h.projectPointOntoPlane(F,JE);Mt.subtract(N,g,N);var z=d.clamp(N.x/u.width,0,1),k=d.clamp(N.y/u.height,0,1);l&&(_[C+R]=z,_[C+1+R]=k),c&&(_[C]=z,_[C+1]=k),C+=2}if(t.normal||t.tangent||t.bitangent||i){var B=E+1,H=E+2;if(s){if(L+3<a){var V=O.fromArray(r,L+3,YE);if(S){var U=O.fromArray(r,L+a,$E);m&&HE(j,V,U,f),O.subtract(V,j,V),O.subtract(U,j,U),A=O.normalize(O.cross(U,V,A),A),S=!1}O.equalsEpsilon(V,j,d.EPSILON10)&&(S=!0)}(t.tangent||t.bitangent)&&(T=f.geodeticSurfaceNormal(j,T),t.tangent&&(x=O.normalize(O.cross(T,A,x),x)))}else A=f.geodeticSurfaceNormal(j,A),(t.tangent||t.bitangent)&&(m&&(XE=O.fromArray(v,E,XE),KE=O.cross(O.UNIT_Z,XE,KE),KE=O.normalize(oe.multiplyByVector(P,KE,KE),KE),t.bitangent&&(QE=O.normalize(O.cross(XE,KE,QE),QE))),x=O.cross(O.UNIT_Z,A,x),x=O.normalize(oe.multiplyByVector(P,x,x),x),t.bitangent&&(T=O.normalize(O.cross(A,x,T),T)));t.normal&&(e.wall?(v[E+M]=A.x,v[B+M]=A.y,v[H+M]=A.z):l&&(v[E+M]=-A.x,v[B+M]=-A.y,v[H+M]=-A.z),(c&&!m||s)&&(v[E]=A.x,v[B]=A.y,v[H]=A.z)),i&&(s&&(A=f.geodeticSurfaceNormal(j,A)),w[E+M]=-A.x,w[B+M]=-A.y,w[H+M]=-A.z),t.tangent&&(e.wall?(b[E+M]=x.x,b[B+M]=x.y,b[H+M]=x.z):l&&(b[E+M]=-x.x,b[B+M]=-x.y,b[H+M]=-x.z),c&&(m?(b[E]=KE.x,b[B]=KE.y,b[H]=KE.z):(b[E]=x.x,b[B]=x.y,b[H]=x.z))),t.bitangent&&(l&&(y[E+M]=T.x,y[B+M]=T.y,y[H+M]=T.z),c&&(m?(y[E]=QE.x,y[B]=QE.y,y[H]=QE.z):(y[E]=T.x,y[B]=T.y,y[H]=T.z))),E+=3}}t.st&&(n.attributes.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:_})),t.normal&&(n.attributes.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:v})),t.tangent&&(n.attributes.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:b})),t.bitangent&&(n.attributes.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:y})),i&&(n.attributes.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:w}))}if(e.extrude&&Object(o.a)(e.offsetAttribute)){var W=r.length/3,G=new Uint8Array(W);if(e.offsetAttribute===Hl.TOP)c&&l||s?G=nl(G,1,0,W/2):c&&(G=nl(G,1));else{var q=e.offsetAttribute===Hl.NONE?0:1;G=nl(G,q)}n.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:G})}return n}var oA=new R,aA=new R,sA={westOverIDL:0,eastOverIDL:0},cA=new Km;function lA(e,t,n,i,a){if(a=Object(r.a)(a,new Se),!Object(o.a)(e)||e.length<3)return a.west=0,a.north=0,a.south=0,a.east=0,a;if(n===tl.RHUMB)return Se.fromCartesianArray(e,t,a);cA.ellipsoid.equals(t)||(cA=new Km(void 0,void 0,t)),a.west=Number.POSITIVE_INFINITY,a.east=Number.NEGATIVE_INFINITY,a.south=Number.POSITIVE_INFINITY,a.north=Number.NEGATIVE_INFINITY,sA.westOverIDL=Number.POSITIVE_INFINITY,sA.eastOverIDL=Number.NEGATIVE_INFINITY;for(var s,c=1/d.chordLength(i,t.maximumRadius),l=e.length,u=t.cartesianToCartographic(e[0],aA),h=oA,f=1;f<l;f++)s=h,h=u,u=t.cartesianToCartographic(e[f],s),cA.setEndPoints(h,u),hA(cA,c,a,sA);return s=h,h=u,u=t.cartesianToCartographic(e[0],s),cA.setEndPoints(h,u),hA(cA,c,a,sA),a.east-a.west>sA.eastOverIDL-sA.westOverIDL&&(a.west=sA.westOverIDL,a.east=sA.eastOverIDL,a.east>d.PI&&(a.east=a.east-d.TWO_PI),a.west>d.PI&&(a.west=a.west-d.TWO_PI)),a}var uA=new R;function hA(e,t,n,i){for(var r=e.surfaceDistance,o=Math.ceil(r*t),a=o>0?r/(o-1):Number.POSITIVE_INFINITY,s=0,c=0;c<o;c++){var l=e.interpolateUsingSurfaceDistance(s,uA);s+=a;var u=l.longitude,h=l.latitude;n.west=Math.min(n.west,u),n.east=Math.max(n.east,u),n.south=Math.min(n.south,h),n.north=Math.max(n.north,h);var f=u>=0?u:u+d.TWO_PI;i.westOverIDL=Math.min(i.westOverIDL,f),i.eastOverIDL=Math.max(i.eastOverIDL,f)}}var dA=[];function fA(e,t,n,i,r,o,a,s,c){var l,u={walls:[]};if(o||a){var h,d,f=bm.createGeometryFromPositions(e,t,n,r,s,c),p=f.attributes.position.values,m=f.indices;if(o&&a){var g=p.concat(p);h=g.length/3,(d=lc.createTypedArray(h,2*m.length)).set(m);var v=m.length,_=h/2;for(l=0;l<v;l+=3){var b=d[l]+_,y=d[l+1]+_,w=d[l+2]+_;d[l+v]=w,d[l+1+v]=y,d[l+2+v]=b}if(f.attributes.position.values=g,r&&s.normal){var O=f.attributes.normal.values;f.attributes.normal.values=new Float32Array(g.length),f.attributes.normal.values.set(O)}f.indices=d}else if(a){for(h=p.length/3,d=lc.createTypedArray(h,m.length),l=0;l<m.length;l+=3)d[l]=m[l+2],d[l+1]=m[l+1],d[l+2]=m[l];f.indices=d}u.topAndBottom=new fh({geometry:f})}var C=i.outerRing,E=Ta.fromPoints(C,e),A=E.projectPointsOntoPlane(C,dA),x=Zp.computeWindingOrder2D(A);x===Np.CLOCKWISE&&(C=C.slice().reverse());var T=bm.computeWallGeometry(C,e,n,r,c);u.walls.push(new fh({geometry:T}));var S=i.holes;for(l=0;l<S.length;l++){var D=S[l];A=(E=Ta.fromPoints(D,e)).projectPointsOntoPlane(D,dA),(x=Zp.computeWindingOrder2D(A))===Np.COUNTER_CLOCKWISE&&(D=D.slice().reverse()),T=bm.computeWallGeometry(D,e,n,r,c),u.walls.push(new fh({geometry:T}))}return u}function pA(e){if(i.a.typeOf.object("options",e),i.a.typeOf.object("options.polygonHierarchy",e.polygonHierarchy),Object(o.a)(e.perPositionHeight)&&e.perPositionHeight&&Object(o.a)(e.height))throw new a.a("Cannot use both options.perPositionHeight and options.height");if(Object(o.a)(e.arcType)&&e.arcType!==tl.GEODESIC&&e.arcType!==tl.RHUMB)throw new a.a("Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.");var t=e.polygonHierarchy,n=Object(r.a)(e.vertexFormat,Ul.DEFAULT),s=Object(r.a)(e.ellipsoid,W.WGS84),c=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),l=Object(r.a)(e.stRotation,0),u=Object(r.a)(e.perPositionHeight,!1),h=u&&Object(o.a)(e.extrudedHeight),f=Object(r.a)(e.height,0),p=Object(r.a)(e.extrudedHeight,f);if(!h){var m=Math.max(f,p);p=Math.min(f,p),f=m}this._vertexFormat=Ul.clone(n),this._ellipsoid=W.clone(s),this._granularity=c,this._stRotation=l,this._height=f,this._extrudedHeight=p,this._closeTop=Object(r.a)(e.closeTop,!0),this._closeBottom=Object(r.a)(e.closeBottom,!0),this._polygonHierarchy=t,this._perPositionHeight=u,this._perPositionHeightExtrude=h,this._shadowVolume=Object(r.a)(e.shadowVolume,!1),this._workerName="createPolygonGeometry",this._offsetAttribute=e.offsetAttribute,this._arcType=Object(r.a)(e.arcType,tl.GEODESIC),this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0,this.packedLength=bm.computeHierarchyPackedLength(t)+W.packedLength+Ul.packedLength+12}pA.fromPositions=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.positions",e.positions),new pA({polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,closeTop:e.closeTop,closeBottom:e.closeBottom,offsetAttribute:e.offsetAttribute,arcType:e.arcType})},pA.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),n=bm.packPolygonHierarchy(e._polygonHierarchy,t,n),W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._stRotation,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._closeTop?1:0,t[n++]=e._closeBottom?1:0,t[n++]=e._shadowVolume?1:0,t[n++]=Object(r.a)(e._offsetAttribute,-1),t[n++]=e._arcType,t[n]=e.packedLength,t};var mA=W.clone(W.UNIT_SPHERE),gA=new Ul,vA={polygonHierarchy:{}};pA.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=bm.unpackPolygonHierarchy(e,t);t=a.startingIndex,delete a.startingIndex;var s=W.unpack(e,t,mA);t+=W.packedLength;var c=Ul.unpack(e,t,gA);t+=Ul.packedLength;var l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=1===e[t++],p=1===e[t++],m=1===e[t++],g=1===e[t++],v=1===e[t++],_=e[t++],b=e[t++],y=e[t];return Object(o.a)(n)||(n=new pA(vA)),n._polygonHierarchy=a,n._ellipsoid=W.clone(s,n._ellipsoid),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._height=l,n._extrudedHeight=u,n._granularity=h,n._stRotation=d,n._perPositionHeightExtrude=f,n._perPositionHeight=p,n._closeTop=m,n._closeBottom=g,n._shadowVolume=v,n._offsetAttribute=-1===_?void 0:_,n._arcType=b,n.packedLength=y,n},pA.computeRectangle=function(e,t){i.a.typeOf.object("options",e),i.a.typeOf.object("options.polygonHierarchy",e.polygonHierarchy);var n=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),o=Object(r.a)(e.arcType,tl.GEODESIC);if(o!==tl.GEODESIC&&o!==tl.RHUMB)throw new a.a("Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.");var s=e.polygonHierarchy,c=Object(r.a)(e.ellipsoid,W.WGS84);return lA(s.positions,c,o,n,t)},pA.createGeometry=function(e){var t=e._vertexFormat,n=e._ellipsoid,i=e._granularity,r=e._stRotation,a=e._polygonHierarchy,s=e._perPositionHeight,c=e._closeTop,l=e._closeBottom,u=e._arcType,h=a.positions;if(!(h.length<3)){var f=Ta.fromPoints(h,n),p=bm.polygonsFromHierarchy(a,f.projectPointsOntoPlane.bind(f),!s,n),m=p.hierarchy,g=p.polygons;if(0!==m.length){h=m[0].outerRing;var v,_=bm.computeBoundingRectangle(f.plane.normal,f.projectPointOntoPlane.bind(f),h,r,VE),b=[],y=e._height,w=e._extrudedHeight,O={perPositionHeight:s,vertexFormat:t,geometry:void 0,tangentPlane:f,boundingRectangle:_,ellipsoid:n,stRotation:r,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:u};if(e._perPositionHeightExtrude||!d.equalsEpsilon(y,w,0,d.EPSILON2))for(O.extrude=!0,O.top=c,O.bottom=l,O.shadowVolume=e._shadowVolume,O.offsetAttribute=e._offsetAttribute,v=0;v<g.length;v++){var C,E=fA(n,g[v],i,m[v],s,c,l,t,u);c&&l?(C=E.topAndBottom,O.geometry=bm.scaleToGeodeticHeightExtruded(C.geometry,y,w,n,s)):c?((C=E.topAndBottom).geometry.attributes.position.values=Zp.scaleToGeodeticHeight(C.geometry.attributes.position.values,y,n,!s),O.geometry=C.geometry):l&&((C=E.topAndBottom).geometry.attributes.position.values=Zp.scaleToGeodeticHeight(C.geometry.attributes.position.values,w,n,!0),O.geometry=C.geometry),(c||l)&&(O.wall=!1,C.geometry=rA(O),b.push(C));var A=E.walls;O.wall=!0;for(var x=0;x<A.length;x++){var T=A[x];O.geometry=bm.scaleToGeodeticHeightExtruded(T.geometry,y,w,n,s),T.geometry=rA(O),b.push(T)}}else for(v=0;v<g.length;v++){var S=new fh({geometry:bm.createGeometryFromPositions(n,g[v],i,s,t,u)});if(S.geometry.attributes.position.values=Zp.scaleToGeodeticHeight(S.geometry.attributes.position.values,y,n,!s),O.geometry=S.geometry,S.geometry=rA(O),Object(o.a)(e._offsetAttribute)){var D=S.geometry.attributes.position.values.length,P=new Uint8Array(D/3),I=e._offsetAttribute===Hl.NONE?0:1;nl(P,I),S.geometry.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:P})}b.push(S)}var M=jd.combineInstances(b)[0];M.attributes.position.values=new Float64Array(M.attributes.position.values),M.indices=lc.createTypedArray(M.attributes.position.values.length/3,M.indices);var R=M.attributes,L=gt.fromVertices(R.position.values);return t.position||delete R.position,new zl({attributes:R,indices:M.indices,primitiveType:M.primitiveType,boundingSphere:L,offsetAttribute:e._offsetAttribute})}}},pA.createShadowVolume=function(e,t,n){var i=e._granularity,r=e._ellipsoid,o=t(i,r),a=n(i,r);return new pA({polygonHierarchy:e._polygonHierarchy,ellipsoid:r,stRotation:e._stRotation,granularity:i,perPositionHeight:!1,extrudedHeight:o,height:a,vertexFormat:Ul.POSITION_ONLY,shadowVolume:!0,arcType:e._arcType})},Object.defineProperties(pA.prototype,{rectangle:{get:function(){if(!Object(o.a)(this._rectangle)){var e=this._polygonHierarchy.positions;this._rectangle=lA(e,this._ellipsoid,this._arcType,this._granularity)}return this._rectangle}},textureCoordinateRotationPoints:{get:function(){return Object(o.a)(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(e){var t=-e._stRotation;if(0===t)return[0,0,0,1,1,0];var n=e._ellipsoid,i=e._polygonHierarchy.positions,r=e.rectangle;return zl._textureCoordinateRotationPoints(i,t,n,r)}(this)),this._textureCoordinateRotationPoints}}});var _A=pA;var bA=function(e,t){this.positions=Object(o.a)(e)?e:[],this.holes=Object(o.a)(t)?t:[]},yA=[],wA=[];function OA(e,t,n,i,r){var o,a,s=Ta.fromPoints(t,e).projectPointsOntoPlane(t,yA);Zp.computeWindingOrder2D(s)===Np.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());var c=t.length,l=0;if(i)for(o=new Float64Array(2*c*3),a=0;a<c;a++){var u=t[a],h=t[(a+1)%c];o[l++]=u.x,o[l++]=u.y,o[l++]=u.z,o[l++]=h.x,o[l++]=h.y,o[l++]=h.z}else{var d=0;if(r===tl.GEODESIC)for(a=0;a<c;a++)d+=bm.subdivideLineCount(t[a],t[(a+1)%c],n);else if(r===tl.RHUMB)for(a=0;a<c;a++)d+=bm.subdivideRhumbLineCount(e,t[a],t[(a+1)%c],n);for(o=new Float64Array(3*d),a=0;a<c;a++){var f;r===tl.GEODESIC?f=bm.subdivideLine(t[a],t[(a+1)%c],n,wA):r===tl.RHUMB&&(f=bm.subdivideRhumbLine(e,t[a],t[(a+1)%c],n,wA));for(var p=f.length,m=0;m<p;++m)o[l++]=f[m]}}var g=2*(c=o.length/3),v=lc.createTypedArray(c,g);for(l=0,a=0;a<c-1;a++)v[l++]=a,v[l++]=a+1;return v[l++]=c-1,v[l++]=0,new fh({geometry:new zl({attributes:new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:o})}),indices:v,primitiveType:xl.LINES})})}function CA(e,t,n,i,r){var o,a,s=Ta.fromPoints(t,e).projectPointsOntoPlane(t,yA);Zp.computeWindingOrder2D(s)===Np.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());var c=t.length,l=new Array(c),u=0;if(i)for(o=new Float64Array(2*c*3*2),a=0;a<c;++a){l[a]=u/3;var h=t[a],d=t[(a+1)%c];o[u++]=h.x,o[u++]=h.y,o[u++]=h.z,o[u++]=d.x,o[u++]=d.y,o[u++]=d.z}else{var f=0;if(r===tl.GEODESIC)for(a=0;a<c;a++)f+=bm.subdivideLineCount(t[a],t[(a+1)%c],n);else if(r===tl.RHUMB)for(a=0;a<c;a++)f+=bm.subdivideRhumbLineCount(e,t[a],t[(a+1)%c],n);for(o=new Float64Array(3*f*2),a=0;a<c;++a){var p;l[a]=u/3,r===tl.GEODESIC?p=bm.subdivideLine(t[a],t[(a+1)%c],n,wA):r===tl.RHUMB&&(p=bm.subdivideRhumbLine(e,t[a],t[(a+1)%c],n,wA));for(var m=p.length,g=0;g<m;++g)o[u++]=p[g]}}c=o.length/6;var v=l.length,_=2*(2*c+v),b=lc.createTypedArray(c+v,_);for(u=0,a=0;a<c;++a)b[u++]=a,b[u++]=(a+1)%c,b[u++]=a+c,b[u++]=(a+1)%c+c;for(a=0;a<v;a++){var y=l[a];b[u++]=y,b[u++]=y+c}return new fh({geometry:new zl({attributes:new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:o})}),indices:b,primitiveType:xl.LINES})})}function EA(e){if(i.a.typeOf.object("options",e),i.a.typeOf.object("options.polygonHierarchy",e.polygonHierarchy),e.perPositionHeight&&Object(o.a)(e.height))throw new a.a("Cannot use both options.perPositionHeight and options.height");if(Object(o.a)(e.arcType)&&e.arcType!==tl.GEODESIC&&e.arcType!==tl.RHUMB)throw new a.a("Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.");var t=e.polygonHierarchy,n=Object(r.a)(e.ellipsoid,W.WGS84),s=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),c=Object(r.a)(e.perPositionHeight,!1),l=c&&Object(o.a)(e.extrudedHeight),u=Object(r.a)(e.arcType,tl.GEODESIC),h=Object(r.a)(e.height,0),f=Object(r.a)(e.extrudedHeight,h);if(!l){var p=Math.max(h,f);f=Math.min(h,f),h=p}this._ellipsoid=W.clone(n),this._granularity=s,this._height=h,this._extrudedHeight=f,this._arcType=u,this._polygonHierarchy=t,this._perPositionHeight=c,this._perPositionHeightExtrude=l,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=bm.computeHierarchyPackedLength(t)+W.packedLength+8}EA.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),n=bm.packPolygonHierarchy(e._polygonHierarchy,t,n),W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._arcType,t[n++]=Object(r.a)(e._offsetAttribute,-1),t[n]=e.packedLength,t};var AA=W.clone(W.UNIT_SPHERE),xA={polygonHierarchy:{}};EA.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=bm.unpackPolygonHierarchy(e,t);t=a.startingIndex,delete a.startingIndex;var s=W.unpack(e,t,AA);t+=W.packedLength;var c=e[t++],l=e[t++],u=e[t++],h=1===e[t++],d=1===e[t++],f=e[t++],p=e[t++],m=e[t];return Object(o.a)(n)||(n=new EA(xA)),n._polygonHierarchy=a,n._ellipsoid=W.clone(s,n._ellipsoid),n._height=c,n._extrudedHeight=l,n._granularity=u,n._perPositionHeight=d,n._perPositionHeightExtrude=h,n._arcType=f,n._offsetAttribute=-1===p?void 0:p,n.packedLength=m,n},EA.fromPositions=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.positions",e.positions),new EA({polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute})},EA.createGeometry=function(e){var t=e._ellipsoid,n=e._granularity,i=e._polygonHierarchy,r=e._perPositionHeight,a=e._arcType,s=bm.polygonOutlinesFromHierarchy(i,!r,t);if(0!==s.length){var c,l,u,h=[],f=d.chordLength(n,t.maximumRadius),p=e._height,m=e._extrudedHeight;if(e._perPositionHeightExtrude||!d.equalsEpsilon(p,m,0,d.EPSILON2))for(u=0;u<s.length;u++){if((c=CA(t,s[u],f,r,a)).geometry=bm.scaleToGeodeticHeightExtruded(c.geometry,p,m,t,r),Object(o.a)(e._offsetAttribute)){var g=c.geometry.attributes.position.values.length/3,v=new Uint8Array(g);e._offsetAttribute===Hl.TOP?v=nl(v,1,0,g/2):(l=e._offsetAttribute===Hl.NONE?0:1,v=nl(v,l)),c.geometry.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:v})}h.push(c)}else for(u=0;u<s.length;u++){if((c=OA(t,s[u],f,r,a)).geometry.attributes.position.values=Zp.scaleToGeodeticHeight(c.geometry.attributes.position.values,p,t,!r),Object(o.a)(e._offsetAttribute)){var _=c.geometry.attributes.position.values.length,b=new Uint8Array(_/3);l=e._offsetAttribute===Hl.NONE?0:1,nl(b,l),c.geometry.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:b})}h.push(c)}var y=jd.combineInstances(h)[0],w=gt.fromVertices(y.attributes.position.values);return new zl({attributes:y.attributes,indices:y.indices,primitiveType:y.primitiveType,boundingSphere:w,offsetAttribute:e._offsetAttribute})}};var TA=EA,SA=[];function DA(e,t,n,i,r){var o,a=SA;a.length=r;var s=n.red,c=n.green,l=n.blue,u=n.alpha,h=i.red,d=i.green,f=i.blue,p=i.alpha;if(Hf.equals(n,i)){for(o=0;o<r;o++)a[o]=Hf.clone(n);return a}var m=(h-s)/r,g=(d-c)/r,v=(f-l)/r,_=(p-u)/r;for(o=0;o<r;o++)a[o]=new Hf(s+o*m,c+o*g,l+o*v,u+o*_);return a}function PA(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.colors,i=Object(r.a)(e.width,1),s=Object(r.a)(e.colorsPerVertex,!1);if(!Object(o.a)(t)||t.length<2)throw new a.a("At least two positions are required.");if("number"!==typeof i)throw new a.a("width must be a number");if(Object(o.a)(n)&&(s&&n.length<t.length||!s&&n.length<t.length-1))throw new a.a("colors has an invalid length.");this._positions=t,this._colors=n,this._width=i,this._colorsPerVertex=s,this._vertexFormat=Ul.clone(Object(r.a)(e.vertexFormat,Ul.DEFAULT)),this._arcType=Object(r.a)(e.arcType,tl.GEODESIC),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._workerName="createPolylineGeometry";var c=1+t.length*O.packedLength;c+=Object(o.a)(n)?1+n.length*Hf.packedLength:1,this.packedLength=c+W.packedLength+Ul.packedLength+4}PA.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._colors;for(c=Object(o.a)(l)?l.length:0,t[n++]=c,i=0;i<c;++i,n+=Hf.packedLength)Hf.pack(l[i],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var IA=W.clone(W.UNIT_SPHERE),MA=new Ul,RA={positions:void 0,colors:void 0,ellipsoid:IA,vertexFormat:MA,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};PA.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s=e[t++],c=new Array(s);for(i=0;i<s;++i,t+=O.packedLength)c[i]=O.unpack(e,t);var l=(s=e[t++])>0?new Array(s):void 0;for(i=0;i<s;++i,t+=Hf.packedLength)l[i]=Hf.unpack(e,t);var u=W.unpack(e,t,IA);t+=W.packedLength;var h=Ul.unpack(e,t,MA);t+=Ul.packedLength;var d=e[t++],f=1===e[t++],p=e[t++],m=e[t];return Object(o.a)(n)?(n._positions=c,n._colors=l,n._ellipsoid=W.clone(u,n._ellipsoid),n._vertexFormat=Ul.clone(h,n._vertexFormat),n._width=d,n._colorsPerVertex=f,n._arcType=p,n._granularity=m,n):(RA.positions=c,RA.colors=l,RA.width=d,RA.colorsPerVertex=f,RA.arcType=p,RA.granularity=m,new PA(RA))};var LA=new O,jA=new O,FA=new O,NA=new O;PA.createGeometry=function(e){var t,n,i,r=e._width,a=e._vertexFormat,s=e._colors,c=e._colorsPerVertex,l=e._arcType,u=e._granularity,h=e._ellipsoid,f=rl(e._positions,O.equalsEpsilon),p=f.length;if(!(p<2||r<=0)){if(l===tl.GEODESIC||l===tl.RHUMB){var m,g;l===tl.GEODESIC?(m=d.chordLength(u,h.maximumRadius),g=yg.numberOfPoints):(m=u,g=yg.numberOfPointsRhumbLine);var v=yg.extractHeights(f,h);if(Object(o.a)(s)){var _=1;for(t=0;t<p-1;++t)_+=g(f[t],f[t+1],m);var b=new Array(_),y=0;for(t=0;t<p-1;++t){var w=f[t],C=f[t+1],E=s[t],A=g(w,C,m);if(c&&t<_){var x=DA(0,0,E,s[t+1],A),T=x.length;for(n=0;n<T;++n)b[y++]=x[n]}else for(n=0;n<A;++n)b[y++]=Hf.clone(E)}b[y]=Hf.clone(s[s.length-1]),s=b,SA.length=0}f=l===tl.GEODESIC?yg.generateCartesianArc({positions:f,minDistance:m,ellipsoid:h,height:v}):yg.generateCartesianRhumbArc({positions:f,granularity:m,ellipsoid:h,height:v})}var S,D=4*(p=f.length)-4,P=new Float64Array(3*D),I=new Float64Array(3*D),M=new Float64Array(3*D),R=new Float32Array(2*D),L=a.st?new Float32Array(2*D):void 0,j=Object(o.a)(s)?new Uint8Array(4*D):void 0,F=0,N=0,z=0,k=0;for(n=0;n<p;++n){var B,H;0===n?(S=LA,O.subtract(f[0],f[1],S),O.add(f[0],S,S)):S=f[n-1],O.clone(S,FA),O.clone(f[n],jA),n===p-1?(S=LA,O.subtract(f[p-1],f[p-2],S),O.add(f[p-1],S,S)):S=f[n+1],O.clone(S,NA),Object(o.a)(j)&&(B=0===n||c?s[n]:s[n-1],n!==p-1&&(H=s[n]));var V=n===p-1?2:4;for(i=0===n?2:0;i<V;++i){O.pack(jA,P,F),O.pack(FA,I,F),O.pack(NA,M,F),F+=3;var U=i-2<0?-1:1;if(R[N++]=i%2*2-1,R[N++]=U*r,a.st&&(L[z++]=n/(p-1),L[z++]=Math.max(R[N-2],0)),Object(o.a)(j)){var W=i<2?B:H;j[k++]=Hf.floatToByte(W.red),j[k++]=Hf.floatToByte(W.green),j[k++]=Hf.floatToByte(W.blue),j[k++]=Hf.floatToByte(W.alpha)}}}var G=new Bl;G.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:P}),G.prevPosition=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:I}),G.nextPosition=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:M}),G.expandAndWidth=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:R}),a.st&&(G.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:L})),Object(o.a)(j)&&(G.color=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:4,values:j,normalize:!0}));var q=lc.createTypedArray(D,6*p-6),Y=0,$=0,X=p-1;for(n=0;n<X;++n)q[$++]=Y,q[$++]=Y+2,q[$++]=Y+1,q[$++]=Y+1,q[$++]=Y+2,q[$++]=Y+3,Y+=4;return new zl({attributes:G,indices:q,primitiveType:xl.TRIANGLES,boundingSphere:gt.fromPoints(f),geometryType:yl.POLYLINES})}};var zA=PA;function kA(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).polylinePositions,n=e.shapePositions;if(!Object(o.a)(t))throw new a.a("options.polylinePositions is required.");if(!Object(o.a)(n))throw new a.a("options.shapePositions is required.");this._positions=t,this._shape=n,this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._cornerType=Object(r.a)(e.cornerType,Wm.ROUNDED),this._vertexFormat=Ul.clone(Object(r.a)(e.vertexFormat,Ul.DEFAULT)),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeGeometry";var i=1+t.length*O.packedLength;i+=1+n.length*Mt.packedLength,this.packedLength=i+W.packedLength+Ul.packedLength+2}kA.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._shape;for(c=l.length,t[n++]=c,i=0;i<c;++i,n+=Mt.packedLength)Mt.pack(l[i],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var BA=W.clone(W.UNIT_SPHERE),HA=new Ul,VA={polylinePositions:void 0,shapePositions:void 0,ellipsoid:BA,vertexFormat:HA,cornerType:void 0,granularity:void 0};kA.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s=e[t++],c=new Array(s);for(i=0;i<s;++i,t+=O.packedLength)c[i]=O.unpack(e,t);s=e[t++];var l=new Array(s);for(i=0;i<s;++i,t+=Mt.packedLength)l[i]=Mt.unpack(e,t);var u=W.unpack(e,t,BA);t+=W.packedLength;var h=Ul.unpack(e,t,HA);t+=Ul.packedLength;var d=e[t++],f=e[t];return Object(o.a)(n)?(n._positions=c,n._shape=l,n._ellipsoid=W.clone(u,n._ellipsoid),n._vertexFormat=Ul.clone(h,n._vertexFormat),n._cornerType=d,n._granularity=f,n):(VA.polylinePositions=c,VA.shapePositions=l,VA.cornerType=d,VA.granularity=f,new kA(VA))};var UA=new bl;kA.createGeometry=function(e){var t=e._positions,n=rl(t,O.equalsEpsilon),i=e._shape;if(i=nv.removeDuplicatesFromShape(i),!(n.length<2||i.length<3)){Zp.computeWindingOrder2D(i)===Np.CLOCKWISE&&i.reverse();var r=bl.fromPoints(i,UA);return function(e,t,n,i){var r=new Bl;i.position&&(r.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:e}));var o,a,s,c,l,u,h=t.length,d=e.length/3,f=(d-2*h)/(2*h),p=Zp.triangulate(t),m=(f-1)*h*6+2*p.length,g=lc.createTypedArray(d,m),v=2*h,_=0;for(o=0;o<f-1;o++){for(a=0;a<h-1;a++)u=(s=2*a+o*h*2)+v,l=(c=s+1)+v,g[_++]=c,g[_++]=s,g[_++]=l,g[_++]=l,g[_++]=s,g[_++]=u;l=(c=(s=2*h-2+o*h*2)+1)+v,u=s+v,g[_++]=c,g[_++]=s,g[_++]=l,g[_++]=l,g[_++]=s,g[_++]=u}if(i.st||i.tangent||i.bitangent){var b,y,w=new Float32Array(2*d),O=1/(f-1),C=1/n.height,E=n.height/2,A=0;for(o=0;o<f;o++){for(b=o*O,y=C*(t[0].y+E),w[A++]=b,w[A++]=y,a=1;a<h;a++)y=C*(t[a].y+E),w[A++]=b,w[A++]=y,w[A++]=b,w[A++]=y;y=C*(t[0].y+E),w[A++]=b,w[A++]=y}for(a=0;a<h;a++)b=0,y=C*(t[a].y+E),w[A++]=b,w[A++]=y;for(a=0;a<h;a++)b=(f-1)*O,y=C*(t[a].y+E),w[A++]=b,w[A++]=y;r.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:new Float32Array(w)})}var x=d-2*h;for(o=0;o<p.length;o+=3){var T=p[o]+x,S=p[o+1]+x,D=p[o+2]+x;g[_++]=T,g[_++]=S,g[_++]=D,g[_++]=D+h,g[_++]=S+h,g[_++]=T+h}var P=new zl({attributes:r,indices:g,boundingSphere:gt.fromVertices(e),primitiveType:xl.TRIANGLES});if(i.normal&&(P=jd.computeNormal(P)),i.tangent||i.bitangent){try{P=jd.computeTangentAndBitangent(P)}catch(I){G_("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(P.attributes.tangent=void 0),i.bitangent||(P.attributes.bitangent=void 0),i.st||(P.attributes.st=void 0)}return P}(nv.computePositions(n,i,r,e,!0),i,r,e._vertexFormat)}};var WA=kA;function GA(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).polylinePositions,n=e.shapePositions;if(!Object(o.a)(t))throw new a.a("options.polylinePositions is required.");if(!Object(o.a)(n))throw new a.a("options.shapePositions is required.");this._positions=t,this._shape=n,this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._cornerType=Object(r.a)(e.cornerType,Wm.ROUNDED),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeOutlineGeometry";var i=1+t.length*O.packedLength;i+=1+n.length*Mt.packedLength,this.packedLength=i+W.packedLength+2}GA.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._shape;for(c=l.length,t[n++]=c,i=0;i<c;++i,n+=Mt.packedLength)Mt.pack(l[i],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var qA=W.clone(W.UNIT_SPHERE),YA={polylinePositions:void 0,shapePositions:void 0,ellipsoid:qA,height:void 0,cornerType:void 0,granularity:void 0};GA.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s=e[t++],c=new Array(s);for(i=0;i<s;++i,t+=O.packedLength)c[i]=O.unpack(e,t);s=e[t++];var l=new Array(s);for(i=0;i<s;++i,t+=Mt.packedLength)l[i]=Mt.unpack(e,t);var u=W.unpack(e,t,qA);t+=W.packedLength;var h=e[t++],d=e[t];return Object(o.a)(n)?(n._positions=c,n._shape=l,n._ellipsoid=W.clone(u,n._ellipsoid),n._cornerType=h,n._granularity=d,n):(YA.polylinePositions=c,YA.shapePositions=l,YA.cornerType=h,YA.granularity=d,new GA(YA))};var $A=new bl;GA.createGeometry=function(e){var t=e._positions,n=rl(t,O.equalsEpsilon),i=e._shape;if(i=nv.removeDuplicatesFromShape(i),!(n.length<2||i.length<3)){Zp.computeWindingOrder2D(i)===Np.CLOCKWISE&&i.reverse();var r=bl.fromPoints(i,$A);return function(e,t){var n=new Bl;n.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:e});var i,r,o=t.length,a=n.position.values.length/3,s=e.length/3/o,c=lc.createTypedArray(a,2*o*(s+1)),l=0,u=(i=0)*o;for(r=0;r<o-1;r++)c[l++]=r+u,c[l++]=r+u+1;for(c[l++]=o-1+u,c[l++]=u,u=(i=s-1)*o,r=0;r<o-1;r++)c[l++]=r+u,c[l++]=r+u+1;for(c[l++]=o-1+u,c[l++]=u,i=0;i<s-1;i++){var h=o*i,d=h+o;for(r=0;r<o;r++)c[l++]=r+h,c[l++]=r+d}return new zl({attributes:n,indices:lc.createTypedArray(a,c),boundingSphere:gt.fromVertices(e),primitiveType:xl.LINES})}(nv.computePositions(n,i,r,e,!1),i)}};var XA=GA;function KA(){a.a.throwInstantiationError()}KA.prototype.getURL=a.a.throwInstantiationError;function QA(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).points,n=e.times;if(!Object(o.a)(t)||!Object(o.a)(n))throw new a.a("points and times are required.");if(t.length<2)throw new a.a("points.length must be greater than or equal to 2.");if(n.length!==t.length)throw new a.a("times.length must be equal to points.length.");this._times=n,this._points=t,this._evaluateFunction=function(e){var t=e.points,n=e.times;return function(i,r){Object(o.a)(r)||(r=new No);var a=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[a])/(n[a+1]-n[a]),c=t[a],l=t[a+1];return No.fastSlerp(c,l,s,r)}}(this),this._lastTimeIndex=0}Object.defineProperties(QA.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}}),QA.prototype.findTimeInterval=cu.prototype.findTimeInterval,QA.prototype.wrapTime=cu.prototype.wrapTime,QA.prototype.clampTime=cu.prototype.clampTime,QA.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var ZA=QA,JA=n(79);function ex(e,t,n,i,r){!function e(t,n,i,r,o){for(;r>i;){if(r-i>600){var a=r-i+1,s=n-i+1,c=Math.log(a),l=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*l*(a-l)/a)*(s-a/2<0?-1:1),h=Math.max(i,Math.floor(n-s*l/a+u)),d=Math.min(r,Math.floor(n+(a-s)*l/a+u));e(t,n,h,d,o)}var f=t[n],p=i,m=r;for(tx(t,i,n),o(t[r],f)>0&&tx(t,i,r);p<m;){for(tx(t,p,m),p++,m--;o(t[p],f)<0;)p++;for(;o(t[m],f)>0;)m--}0===o(t[i],f)?tx(t,i,m):(m++,tx(t,m,r)),m<=n&&(i=m+1),n<=m&&(r=m-1)}}(e,t,n||0,i||e.length-1,r||nx)}function tx(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}function nx(e,t){return e<t?-1:e>t?1:0}function ix(e){void 0===e&&(e=9),this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}function rx(e,t,n){if(!n)return t.indexOf(e);for(var i=0;i<t.length;i++)if(n(e,t[i]))return i;return-1}function ox(e,t){ax(e,0,e.children.length,t,e)}function ax(e,t,n,i,r){r||(r=mx(null)),r.minX=1/0,r.minY=1/0,r.maxX=-1/0,r.maxY=-1/0;for(var o=t;o<n;o++){var a=e.children[o];sx(r,e.leaf?i(a):a)}return r}function sx(e,t){return e.minX=Math.min(e.minX,t.minX),e.minY=Math.min(e.minY,t.minY),e.maxX=Math.max(e.maxX,t.maxX),e.maxY=Math.max(e.maxY,t.maxY),e}function cx(e,t){return e.minX-t.minX}function lx(e,t){return e.minY-t.minY}function ux(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function hx(e){return e.maxX-e.minX+(e.maxY-e.minY)}function dx(e,t){var n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),r=Math.min(e.maxX,t.maxX),o=Math.min(e.maxY,t.maxY);return Math.max(0,r-n)*Math.max(0,o-i)}function fx(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function px(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function mx(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function gx(e,t,n,i,r){for(var o=[t,n];o.length;)if(!((n=o.pop())-(t=o.pop())<=i)){var a=t+Math.ceil((n-t)/i/2)*i;ex(e,a,t,n,r),o.push(t,a,a,n)}}ix.prototype.all=function(){return this._all(this.data,[])},ix.prototype.search=function(e){var t=this.data,n=[];if(!px(e,t))return n;for(var i=this.toBBox,r=[];t;){for(var o=0;o<t.children.length;o++){var a=t.children[o],s=t.leaf?i(a):a;px(e,s)&&(t.leaf?n.push(a):fx(e,s)?this._all(a,n):r.push(a))}t=r.pop()}return n},ix.prototype.collides=function(e){var t=this.data;if(!px(e,t))return!1;for(var n=[];t;){for(var i=0;i<t.children.length;i++){var r=t.children[i],o=t.leaf?this.toBBox(r):r;if(px(e,o)){if(t.leaf||fx(e,o))return!0;n.push(r)}}t=n.pop()}return!1},ix.prototype.load=function(e){if(!e||!e.length)return this;if(e.length<this._minEntries){for(var t=0;t<e.length;t++)this.insert(e[t]);return this}var n=this._build(e.slice(),0,e.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var i=this.data;this.data=n,n=i}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},ix.prototype.insert=function(e){return e&&this._insert(e,this.data.height-1),this},ix.prototype.clear=function(){return this.data=mx([]),this},ix.prototype.remove=function(e,t){if(!e)return this;for(var n,i,r,o=this.data,a=this.toBBox(e),s=[],c=[];o||s.length;){if(o||(o=s.pop(),i=s[s.length-1],n=c.pop(),r=!0),o.leaf){var l=rx(e,o.children,t);if(-1!==l)return o.children.splice(l,1),s.push(o),this._condense(s),this}r||o.leaf||!fx(o,a)?i?(n++,o=i.children[n],r=!1):o=null:(s.push(o),c.push(n),n=0,i=o,o=o.children[0])}return this},ix.prototype.toBBox=function(e){return e},ix.prototype.compareMinX=function(e,t){return e.minX-t.minX},ix.prototype.compareMinY=function(e,t){return e.minY-t.minY},ix.prototype.toJSON=function(){return this.data},ix.prototype.fromJSON=function(e){return this.data=e,this},ix.prototype._all=function(e,t){for(var n=[];e;)e.leaf?t.push.apply(t,e.children):n.push.apply(n,e.children),e=n.pop();return t},ix.prototype._build=function(e,t,n,i){var r,o=n-t+1,a=this._maxEntries;if(o<=a)return ox(r=mx(e.slice(t,n+1)),this.toBBox),r;i||(i=Math.ceil(Math.log(o)/Math.log(a)),a=Math.ceil(o/Math.pow(a,i-1))),(r=mx([])).leaf=!1,r.height=i;var s=Math.ceil(o/a),c=s*Math.ceil(Math.sqrt(a));gx(e,t,n,c,this.compareMinX);for(var l=t;l<=n;l+=c){var u=Math.min(l+c-1,n);gx(e,l,u,s,this.compareMinY);for(var h=l;h<=u;h+=s){var d=Math.min(h+s-1,u);r.children.push(this._build(e,h,d,i-1))}}return ox(r,this.toBBox),r},ix.prototype._chooseSubtree=function(e,t,n,i){for(;i.push(t),!t.leaf&&i.length-1!==n;){for(var r=1/0,o=1/0,a=void 0,s=0;s<t.children.length;s++){var c=t.children[s],l=ux(c),u=(h=e,d=c,(Math.max(d.maxX,h.maxX)-Math.min(d.minX,h.minX))*(Math.max(d.maxY,h.maxY)-Math.min(d.minY,h.minY))-l);u<o?(o=u,r=l<r?l:r,a=c):u===o&&l<r&&(r=l,a=c)}t=a||t.children[0]}var h,d;return t},ix.prototype._insert=function(e,t,n){var i=n?e:this.toBBox(e),r=[],o=this._chooseSubtree(i,this.data,t,r);for(o.children.push(e),sx(o,i);t>=0&&r[t].children.length>this._maxEntries;)this._split(r,t),t--;this._adjustParentBBoxes(i,r,t)},ix.prototype._split=function(e,t){var n=e[t],i=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,i);var o=this._chooseSplitIndex(n,r,i),a=mx(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,ox(n,this.toBBox),ox(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(n,a)},ix.prototype._splitRoot=function(e,t){this.data=mx([e,t]),this.data.height=e.height+1,this.data.leaf=!1,ox(this.data,this.toBBox)},ix.prototype._chooseSplitIndex=function(e,t,n){for(var i,r=1/0,o=1/0,a=t;a<=n-t;a++){var s=ax(e,0,a,this.toBBox),c=ax(e,a,n,this.toBBox),l=dx(s,c),u=ux(s)+ux(c);l<r?(r=l,i=a,o=u<o?u:o):l===r&&u<o&&(o=u,i=a)}return i||n-t},ix.prototype._chooseSplitAxis=function(e,t,n){var i=e.leaf?this.compareMinX:cx,r=e.leaf?this.compareMinY:lx;this._allDistMargin(e,t,n,i)<this._allDistMargin(e,t,n,r)&&e.children.sort(i)},ix.prototype._allDistMargin=function(e,t,n,i){e.children.sort(i);for(var r=this.toBBox,o=ax(e,0,t,r),a=ax(e,n-t,n,r),s=hx(o)+hx(a),c=t;c<n-t;c++){var l=e.children[c];sx(o,e.leaf?r(l):l),s+=hx(o)}for(var u=n-t-1;u>=t;u--){var h=e.children[u];sx(a,e.leaf?r(h):h),s+=hx(a)}return s},ix.prototype._adjustParentBBoxes=function(e,t,n){for(var i=n;i>=0;i--)sx(t[i],e)},ix.prototype._condense=function(e){for(var t=e.length-1,n=void 0;t>=0;t--)0===e[t].children.length?t>0?(n=e[t-1].children).splice(n.indexOf(e[t]),1):this.clear():ox(e[t],this.toBBox)};var vx=ix;function _x(){this._tree=new vx}function bx(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}function yx(e,t){return e.id===t.id}bx.fromRectangleAndId=function(e,t,n){return n.minX=t.west,n.minY=t.south,n.maxX=t.east,n.maxY=t.north,n.id=e,n},_x.prototype.insert=function(e,t){i.a.typeOf.string("id",e),i.a.typeOf.object("rectangle",t);var n=bx.fromRectangleAndId(e,t,new bx);this._tree.insert(n)};var wx=new bx;_x.prototype.remove=function(e,t){i.a.typeOf.string("id",e),i.a.typeOf.object("rectangle",t);var n=bx.fromRectangleAndId(e,t,wx);this._tree.remove(n,yx)};var Ox=new bx;_x.prototype.collides=function(e){i.a.typeOf.object("rectangle",e);var t=bx.fromRectangleAndId("",e,Ox);return this._tree.collides(t)};var Cx=_x,Ex=Math.cos,Ax=Math.sin,xx=Math.sqrt,Tx={computePosition:function(e,t,n,i,r,a,s){var c=t.radiiSquared,l=e.nwCorner,u=e.boundingRectangle,h=l.latitude-e.granYCos*i+r*e.granXSin,d=Ex(h),f=Ax(h),p=c.z*f,m=l.longitude+i*e.granYSin+r*e.granXCos,g=d*Ex(m),v=d*Ax(m),_=c.x*g,b=c.y*v,y=xx(_*g+b*v+p*f);if(a.x=_/y,a.y=b/y,a.z=p/y,n){var w=e.stNwCorner;Object(o.a)(w)?(h=w.latitude-e.stGranYCos*i+r*e.stGranXSin,m=w.longitude+i*e.stGranYSin+r*e.stGranXCos,s.x=(m-e.stWest)*e.lonScalar,s.y=(h-e.stSouth)*e.latScalar):(s.x=(m-u.west)*e.lonScalar,s.y=(h-u.south)*e.latScalar)}}},Sx=new El,Dx=new O,Px=new R,Ix=new O,Mx=new q;function Rx(e,t,n,i,r,o,a){var s=Math.cos(t),c=i*s,l=n*s,u=Math.sin(t),h=i*u,d=n*u;Dx=Mx.project(e,Dx),Dx=O.subtract(Dx,Ix,Dx);var f=El.fromRotation(t,Sx);Dx=El.multiplyByVector(f,Dx,Dx),Dx=O.add(Dx,Ix,Dx),o-=1,a-=1;var p=(e=Mx.unproject(Dx,e)).latitude,m=p+o*d,g=p-c*a,v=p-c*a+o*d,_=Math.max(p,m,g,v),b=Math.min(p,m,g,v),y=e.longitude,w=y+o*l,C=y+a*h,E=y+a*h+o*l;return{north:_,south:b,east:Math.max(y,w,C,E),west:Math.min(y,w,C,E),granYCos:c,granYSin:h,granXCos:l,granXSin:d,nwCorner:e}}Tx.computeOptions=function(e,t,n,i,r,o,s){var c,l,u,h,f,p=e.east,m=e.west,g=e.north,v=e.south,_=!1,b=!1;g===d.PI_OVER_TWO&&(_=!0),v===-d.PI_OVER_TWO&&(b=!0);var y=g-v;u=(f=m>p?d.TWO_PI-m+p:p-m)/((c=Math.ceil(f/t)+1)-1),h=y/((l=Math.ceil(y/t)+1)-1);var w=Se.northwest(e,o),O=Se.center(e,Px);0===n&&0===i||(O.longitude<w.longitude&&(O.longitude+=d.TWO_PI),Ix=Mx.project(O,Ix));var C=h,E=u,A=Se.clone(e,r),x={granYCos:C,granYSin:0,granXCos:E,granXSin:0,nwCorner:w,boundingRectangle:A,width:c,height:l,northCap:_,southCap:b};if(0!==n){var T=Rx(w,n,u,h,0,c,l);if(g=T.north,v=T.south,p=T.east,m=T.west,g<-d.PI_OVER_TWO||g>d.PI_OVER_TWO||v<-d.PI_OVER_TWO||v>d.PI_OVER_TWO)throw new a.a("Rotated rectangle is invalid. It crosses over either the north or south pole.");x.granYCos=T.granYCos,x.granYSin=T.granYSin,x.granXCos=T.granXCos,x.granXSin=T.granXSin,A.north=g,A.south=v,A.east=p,A.west=m}if(0!==i){n-=i;var S=Se.northwest(A,s),D=Rx(S,n,u,h,0,c,l);x.stGranYCos=D.granYCos,x.stGranXCos=D.granXCos,x.stGranYSin=D.granYSin,x.stGranXSin=D.granXSin,x.stNwCorner=S,x.stWest=D.west,x.stSouth=D.south}return x};var Lx=Tx,jx=new O,Fx=new O,Nx=new O,zx=new O,kx=new Se,Bx=new Mt,Hx=new gt,Vx=new gt;function Ux(e,t){var n=new zl({attributes:new Bl,primitiveType:xl.TRIANGLES});return n.attributes.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}var Wx=new O,Gx=new O;function qx(e,t){var n=e._vertexFormat,i=e._ellipsoid,r=t.height,o=t.width,a=t.northCap,s=t.southCap,c=0,l=r,u=r,h=0;a&&(c=1,u-=1,h+=1),s&&(l-=1,u-=1,h+=1),h+=o*u;for(var d=n.position?new Float64Array(3*h):void 0,f=n.st?new Float32Array(2*h):void 0,p=0,m=0,g=jx,v=Bx,_=Number.MAX_VALUE,b=Number.MAX_VALUE,y=-Number.MAX_VALUE,w=-Number.MAX_VALUE,C=c;C<l;++C)for(var E=0;E<o;++E)Lx.computePosition(t,i,n.st,C,E,g,v),d[p++]=g.x,d[p++]=g.y,d[p++]=g.z,n.st&&(f[m++]=v.x,f[m++]=v.y,_=Math.min(_,v.x),b=Math.min(b,v.y),y=Math.max(y,v.x),w=Math.max(w,v.y));if(a&&(Lx.computePosition(t,i,n.st,0,0,g,v),d[p++]=g.x,d[p++]=g.y,d[p++]=g.z,n.st&&(f[m++]=v.x,f[m++]=v.y,_=v.x,b=v.y,y=v.x,w=v.y)),s&&(Lx.computePosition(t,i,n.st,r-1,0,g,v),d[p++]=g.x,d[p++]=g.y,d[p]=g.z,n.st&&(f[m++]=v.x,f[m]=v.y,_=Math.min(_,v.x),b=Math.min(b,v.y),y=Math.max(y,v.x),w=Math.max(w,v.y))),n.st&&(_<0||b<0||y>1||w>1))for(var A=0;A<f.length;A+=2)f[A]=(f[A]-_)/(y-_),f[A+1]=(f[A+1]-b)/(w-b);var x=function(e,t,n,i){var r=e.length,o=t.normal?new Float32Array(r):void 0,a=t.tangent?new Float32Array(r):void 0,s=t.bitangent?new Float32Array(r):void 0,c=0,l=zx,u=Nx,h=Fx;if(t.normal||t.tangent||t.bitangent)for(var d=0;d<r;d+=3){var f=O.fromArray(e,d,jx),p=c+1,m=c+2;h=n.geodeticSurfaceNormal(f,h),(t.tangent||t.bitangent)&&(O.cross(O.UNIT_Z,h,u),oe.multiplyByVector(i,u,u),O.normalize(u,u),t.bitangent&&O.normalize(O.cross(h,u,l),l)),t.normal&&(o[c]=h.x,o[p]=h.y,o[m]=h.z),t.tangent&&(a[c]=u.x,a[p]=u.y,a[m]=u.z),t.bitangent&&(s[c]=l.x,s[p]=l.y,s[m]=l.z),c+=3}return Ux(t,{positions:e,normals:o,tangents:a,bitangents:s})}(d,n,i,t.tangentRotationMatrix),T=6*(o-1)*(u-1);a&&(T+=3*(o-1)),s&&(T+=3*(o-1));var S,D=lc.createTypedArray(h,T),P=0,I=0;for(S=0;S<u-1;++S){for(var M=0;M<o-1;++M){var R=P,L=R+o,j=L+1,F=R+1;D[I++]=R,D[I++]=L,D[I++]=F,D[I++]=F,D[I++]=L,D[I++]=j,++P}++P}if(a||s){var N,z,k=h-1,B=h-1;if(a&&s&&(k=h-2),P=0,a)for(S=0;S<o-1;S++)z=(N=P)+1,D[I++]=k,D[I++]=N,D[I++]=z,++P;if(s)for(P=(u-1)*o,S=0;S<o-1;S++)z=(N=P)+1,D[I++]=N,D[I++]=B,D[I++]=z,++P}return x.indices=D,n.st&&(x.attributes.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:f})),x}function Yx(e,t,n,i,r){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n+2],e[t++]=r[n],e[t++]=r[n+1],e[t]=r[n+2],e}function $x(e,t,n,i){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n],e[t]=i[n+1],e}var Xx=new Ul;function Kx(e,t){var n,i=e._shadowVolume,r=e._offsetAttribute,a=e._vertexFormat,s=e._extrudedHeight,c=e._surfaceHeight,l=e._ellipsoid,u=t.height,h=t.width;if(i){var f=Ul.clone(a,Xx);f.normal=!0,e._vertexFormat=f}var p=qx(e,t);i&&(e._vertexFormat=a);var m=Zp.scaleToGeodeticHeight(p.attributes.position.values,c,l,!1),g=(m=new Float64Array(m)).length,v=2*g,_=new Float64Array(v);_.set(m);var b=Zp.scaleToGeodeticHeight(p.attributes.position.values,s,l);_.set(b,g),p.attributes.position.values=_;var y,w,C,E=a.normal?new Float32Array(v):void 0,A=a.tangent?new Float32Array(v):void 0,x=a.bitangent?new Float32Array(v):void 0,T=a.st?new Float32Array(v/3*2):void 0;if(a.normal){for(w=p.attributes.normal.values,E.set(w),n=0;n<g;n++)w[n]=-w[n];E.set(w,g),p.attributes.normal.values=E}if(i){w=p.attributes.normal.values,a.normal||(p.attributes.normal=void 0);var S=new Float32Array(v);for(n=0;n<g;n++)w[n]=-w[n];S.set(w,g),p.attributes.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:S})}var D=Object(o.a)(r);if(D){var P=g/3*2,I=new Uint8Array(P);r===Hl.TOP?I=nl(I,1,0,P/2):(C=r===Hl.NONE?0:1,I=nl(I,C)),p.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:I})}if(a.tangent){var M=p.attributes.tangent.values;for(A.set(M),n=0;n<g;n++)M[n]=-M[n];A.set(M,g),p.attributes.tangent.values=A}if(a.bitangent){var R=p.attributes.bitangent.values;x.set(R),x.set(R,g),p.attributes.bitangent.values=x}a.st&&(y=p.attributes.st.values,T.set(y),T.set(y,g/3*2),p.attributes.st.values=T);var L=p.indices,j=L.length,F=g/3,N=lc.createTypedArray(v/3,2*j);for(N.set(L),n=0;n<j;n+=3)N[n+j]=L[n+2]+F,N[n+1+j]=L[n+1]+F,N[n+2+j]=L[n]+F;p.indices=N;var z=t.northCap,k=t.southCap,B=u,H=2,V=0,U=4,W=4;z&&(H-=1,B-=1,V+=1,U-=2,W-=1),k&&(H-=1,B-=1,V+=1,U-=2,W-=1);var G=2*((V+=H*h+2*B-U)+W),q=new Float64Array(3*G),Y=i?new Float32Array(3*G):void 0,$=D?new Uint8Array(G):void 0,X=a.st?new Float32Array(2*G):void 0,K=r===Hl.TOP;D&&!K&&(C=r===Hl.ALL?1:0,$=nl($,C));var Q,Z=0,J=0,ee=0,te=0,ne=h*B;for(n=0;n<ne;n+=h)q=Yx(q,Z,Q=3*n,m,b),Z+=6,a.st&&(X=$x(X,J,2*n,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1);if(k){var ie=z?ne+1:ne;for(Q=3*ie,n=0;n<2;n++)q=Yx(q,Z,Q,m,b),Z+=6,a.st&&(X=$x(X,J,2*ie,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1)}else for(n=ne-h;n<ne;n++)q=Yx(q,Z,Q=3*n,m,b),Z+=6,a.st&&(X=$x(X,J,2*n,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1);for(n=ne-1;n>0;n-=h)q=Yx(q,Z,Q=3*n,m,b),Z+=6,a.st&&(X=$x(X,J,2*n,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1);if(z){var re=ne;for(Q=3*re,n=0;n<2;n++)q=Yx(q,Z,Q,m,b),Z+=6,a.st&&(X=$x(X,J,2*re,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1)}else for(n=h-1;n>=0;n--)q=Yx(q,Z,Q=3*n,m,b),Z+=6,a.st&&(X=$x(X,J,2*n,y),J+=4),i&&(ee+=3,Y[ee++]=w[Q],Y[ee++]=w[Q+1],Y[ee++]=w[Q+2]),K&&($[te++]=1,te+=1);var oe=function(e,t,n){var i=e.length,r=t.normal?new Float32Array(i):void 0,o=t.tangent?new Float32Array(i):void 0,a=t.bitangent?new Float32Array(i):void 0,s=0,c=0,l=0,u=!0,h=zx,f=Nx,p=Fx;if(t.normal||t.tangent||t.bitangent)for(var m=0;m<i;m+=6){var g=O.fromArray(e,m,jx),v=O.fromArray(e,(m+6)%i,Wx);if(u){var _=O.fromArray(e,(m+3)%i,Gx);O.subtract(v,g,v),O.subtract(_,g,_),p=O.normalize(O.cross(_,v,p),p),u=!1}O.equalsEpsilon(v,g,d.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(h=n.geodeticSurfaceNormal(g,h),t.tangent&&(f=O.normalize(O.cross(h,p,f),f))),t.normal&&(r[s++]=p.x,r[s++]=p.y,r[s++]=p.z,r[s++]=p.x,r[s++]=p.y,r[s++]=p.z),t.tangent&&(o[c++]=f.x,o[c++]=f.y,o[c++]=f.z,o[c++]=f.x,o[c++]=f.y,o[c++]=f.z),t.bitangent&&(a[l++]=h.x,a[l++]=h.y,a[l++]=h.z,a[l++]=h.x,a[l++]=h.y,a[l++]=h.z)}return Ux(t,{positions:e,normals:r,tangents:o,bitangents:a})}(q,a,l);a.st&&(oe.attributes.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:X})),i&&(oe.attributes.extrudeDirection=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:Y})),D&&(oe.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:$}));var ae,se,ce,le,ue=lc.createTypedArray(G,6*V);g=q.length/3;var he=0;for(n=0;n<g-1;n+=2){le=((ae=n)+2)%g;var de=O.fromArray(q,3*ae,Wx),fe=O.fromArray(q,3*le,Gx);O.equalsEpsilon(de,fe,d.EPSILON10)||(ce=((se=(ae+1)%g)+2)%g,ue[he++]=ae,ue[he++]=se,ue[he++]=le,ue[he++]=le,ue[he++]=se,ue[he++]=ce)}return oe.indices=ue,(oe=jd.combineInstances([new fh({geometry:p}),new fh({geometry:oe})]))[0]}var Qx=[new O,new O,new O,new O],Zx=new R,Jx=new R;function eT(e,t,n,i,r){if(0===n)return Se.clone(e,r);var o=Lx.computeOptions(e,t,n,0,kx,Zx),a=o.height,s=o.width,c=Qx;return Lx.computePosition(o,i,!1,0,0,c[0]),Lx.computePosition(o,i,!1,0,s-1,c[1]),Lx.computePosition(o,i,!1,a-1,0,c[2]),Lx.computePosition(o,i,!1,a-1,s-1,c[3]),Se.fromCartesianArray(c,i,r)}function tT(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).rectangle;if(i.a.typeOf.object("rectangle",t),Se.validate(t),t.north<t.south)throw new a.a("options.rectangle.north must be greater than or equal to options.rectangle.south");var n=Object(r.a)(e.height,0),o=Object(r.a)(e.extrudedHeight,n);this._rectangle=Se.clone(t),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._ellipsoid=W.clone(Object(r.a)(e.ellipsoid,W.WGS84)),this._surfaceHeight=Math.max(n,o),this._rotation=Object(r.a)(e.rotation,0),this._stRotation=Object(r.a)(e.stRotation,0),this._vertexFormat=Ul.clone(Object(r.a)(e.vertexFormat,Ul.DEFAULT)),this._extrudedHeight=Math.min(n,o),this._shadowVolume=Object(r.a)(e.shadowVolume,!1),this._workerName="createRectangleGeometry",this._offsetAttribute=e.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}tT.packedLength=Se.packedLength+W.packedLength+Ul.packedLength+7,tT.pack=function(e,t,n){return i.a.typeOf.object("value",e),i.a.defined("array",t),n=Object(r.a)(n,0),Se.pack(e._rectangle,t,n),n+=Se.packedLength,W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),n+=Ul.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var nT=new Se,iT=W.clone(W.UNIT_SPHERE),rT={rectangle:nT,ellipsoid:iT,vertexFormat:Xx,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};tT.unpack=function(e,t,n){i.a.defined("array",e),t=Object(r.a)(t,0);var a=Se.unpack(e,t,nT);t+=Se.packedLength;var s=W.unpack(e,t,iT);t+=W.packedLength;var c=Ul.unpack(e,t,Xx);t+=Ul.packedLength;var l=e[t++],u=e[t++],h=e[t++],d=e[t++],f=e[t++],p=1===e[t++],m=e[t];return Object(o.a)(n)?(n._rectangle=Se.clone(a,n._rectangle),n._ellipsoid=W.clone(s,n._ellipsoid),n._vertexFormat=Ul.clone(c,n._vertexFormat),n._granularity=l,n._surfaceHeight=u,n._rotation=h,n._stRotation=d,n._extrudedHeight=f,n._shadowVolume=p,n._offsetAttribute=-1===m?void 0:m,n):(rT.granularity=l,rT.height=u,rT.rotation=h,rT.stRotation=d,rT.extrudedHeight=f,rT.shadowVolume=p,rT.offsetAttribute=-1===m?void 0:m,new tT(rT))},tT.computeRectangle=function(e,t){var n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).rectangle;if(i.a.typeOf.object("rectangle",n),Se.validate(n),n.north<n.south)throw new a.a("options.rectangle.north must be greater than or equal to options.rectangle.south");var o=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),s=Object(r.a)(e.ellipsoid,W.WGS84);return eT(n,o,Object(r.a)(e.rotation,0),s,t)};var oT=new oe,aT=new No,sT=new R;tT.createGeometry=function(e){if(!d.equalsEpsilon(e._rectangle.north,e._rectangle.south,d.EPSILON10)&&!d.equalsEpsilon(e._rectangle.east,e._rectangle.west,d.EPSILON10)){var t=e._rectangle,n=e._ellipsoid,i=e._rotation,r=e._stRotation,a=e._vertexFormat,s=Lx.computeOptions(t,e._granularity,i,r,kx,Zx,Jx),c=oT;if(0!==r||0!==i){var l=Se.center(t,sT),u=n.geodeticSurfaceNormalCartographic(l,Wx);No.fromAxisAngle(u,-r,aT),oe.fromQuaternion(aT,c)}else oe.clone(oe.IDENTITY,c);var h,f,p=e._surfaceHeight,m=e._extrudedHeight,g=!d.equalsEpsilon(p,m,0,d.EPSILON2);if(s.lonScalar=1/e._rectangle.width,s.latScalar=1/e._rectangle.height,s.tangentRotationMatrix=c,t=e._rectangle,g){h=Kx(e,s);var v=gt.fromRectangle3D(t,n,p,Vx),_=gt.fromRectangle3D(t,n,m,Hx);f=gt.union(v,_)}else{if((h=qx(e,s)).attributes.position.values=Zp.scaleToGeodeticHeight(h.attributes.position.values,p,n,!1),Object(o.a)(e._offsetAttribute)){var b=h.attributes.position.values.length,y=new Uint8Array(b/3),w=e._offsetAttribute===Hl.NONE?0:1;nl(y,w),h.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}f=gt.fromRectangle3D(t,n,p)}return a.position||delete h.attributes.position,new zl({attributes:h.attributes,indices:h.indices,primitiveType:h.primitiveType,boundingSphere:f,offsetAttribute:e._offsetAttribute})}},tT.createShadowVolume=function(e,t,n){var i=e._granularity,r=e._ellipsoid,o=t(i,r),a=n(i,r);return new tT({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:r,stRotation:e._stRotation,granularity:i,extrudedHeight:a,height:o,vertexFormat:Ul.POSITION_ONLY,shadowVolume:!0})};var cT=new Se,lT=[new Mt,new Mt,new Mt],uT=new El,hT=new R;Object.defineProperties(tT.prototype,{rectangle:{get:function(){return Object(o.a)(this._rotatedRectangle)||(this._rotatedRectangle=eT(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return Object(o.a)(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=function(e){if(0===e._stRotation)return[0,0,0,1,1,0];var t=Se.clone(e._rectangle,cT),n=e._granularity,i=e._ellipsoid,r=eT(t,n,e._rotation-e._stRotation,i,cT),o=lT;o[0].x=r.west,o[0].y=r.south,o[1].x=r.west,o[1].y=r.north,o[2].x=r.east,o[2].y=r.south;for(var a=e.rectangle,s=El.fromRotation(e._stRotation,uT),c=Se.center(a,hT),l=0;l<3;++l){var u=o[l];u.x-=c.longitude,u.y-=c.latitude,El.multiplyByVector(s,u,u),u.x+=c.longitude,u.y+=c.latitude,u.x=(u.x-a.west)/a.width,u.y=(u.y-a.south)/a.height}var h=o[0],d=o[1],f=o[2],p=new Array(6);return Mt.pack(h,p),Mt.pack(d,p,2),Mt.pack(f,p,4),p}(this)),this._textureCoordinateRotationPoints}}});var dT=tT,fT=new gt,pT=new gt,mT=new O,gT=new Se;function vT(e,t){var n=e._ellipsoid,i=t.height,r=t.width,o=t.northCap,a=t.southCap,s=i,c=2,l=0,u=4;o&&(c-=1,s-=1,l+=1,u-=2),a&&(c-=1,s-=1,l+=1,u-=2),l+=c*r+2*s-u;var h,d=new Float64Array(3*l),f=0,p=0,m=mT;if(o)Lx.computePosition(t,n,!1,p,0,m),d[f++]=m.x,d[f++]=m.y,d[f++]=m.z;else for(h=0;h<r;h++)Lx.computePosition(t,n,!1,p,h,m),d[f++]=m.x,d[f++]=m.y,d[f++]=m.z;for(h=r-1,p=1;p<i;p++)Lx.computePosition(t,n,!1,p,h,m),d[f++]=m.x,d[f++]=m.y,d[f++]=m.z;if(p=i-1,!a)for(h=r-2;h>=0;h--)Lx.computePosition(t,n,!1,p,h,m),d[f++]=m.x,d[f++]=m.y,d[f++]=m.z;for(h=0,p=i-2;p>0;p--)Lx.computePosition(t,n,!1,p,h,m),d[f++]=m.x,d[f++]=m.y,d[f++]=m.z;for(var g=d.length/3*2,v=lc.createTypedArray(d.length/3,g),_=0,b=0;b<d.length/3-1;b++)v[_++]=b,v[_++]=b+1;v[_++]=d.length/3-1,v[_++]=0;var y=new zl({attributes:new Bl,primitiveType:xl.LINES});return y.attributes.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:d}),y.indices=v,y}function _T(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).rectangle,n=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),i=Object(r.a)(e.ellipsoid,W.WGS84),s=Object(r.a)(e.rotation,0);if(!Object(o.a)(t))throw new a.a("rectangle is required.");if(Se.validate(t),t.north<t.south)throw new a.a("options.rectangle.north must be greater than options.rectangle.south");var c=Object(r.a)(e.height,0),l=Object(r.a)(e.extrudedHeight,c);this._rectangle=Se.clone(t),this._granularity=n,this._ellipsoid=i,this._surfaceHeight=Math.max(c,l),this._rotation=s,this._extrudedHeight=Math.min(c,l),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}_T.packedLength=Se.packedLength+W.packedLength+5,_T.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return n=Object(r.a)(n,0),Se.pack(e._rectangle,t,n),n+=Se.packedLength,W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._extrudedHeight,t[n]=Object(r.a)(e._offsetAttribute,-1),t};var bT=new Se,yT=W.clone(W.UNIT_SPHERE),wT={rectangle:bT,ellipsoid:yT,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};_T.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");t=Object(r.a)(t,0);var i=Se.unpack(e,t,bT);t+=Se.packedLength;var s=W.unpack(e,t,yT);t+=W.packedLength;var c=e[t++],l=e[t++],u=e[t++],h=e[t++],d=e[t];return Object(o.a)(n)?(n._rectangle=Se.clone(i,n._rectangle),n._ellipsoid=W.clone(s,n._ellipsoid),n._surfaceHeight=l,n._rotation=u,n._extrudedHeight=h,n._offsetAttribute=-1===d?void 0:d,n):(wT.granularity=c,wT.height=l,wT.rotation=u,wT.extrudedHeight=h,wT.offsetAttribute=-1===d?void 0:d,new _T(wT))};var OT=new R;_T.createGeometry=function(e){var t,n,i=e._rectangle,r=e._ellipsoid,a=Lx.computeOptions(i,e._granularity,e._rotation,0,gT,OT);if(!d.equalsEpsilon(i.north,i.south,d.EPSILON10)&&!d.equalsEpsilon(i.east,i.west,d.EPSILON10)){var s,c=e._surfaceHeight,l=e._extrudedHeight;if(!d.equalsEpsilon(c,l,0,d.EPSILON2)){if(t=function(e,t){var n=e._surfaceHeight,i=e._extrudedHeight,r=e._ellipsoid,o=i,a=n,s=vT(e,t),c=t.height,l=t.width,u=Zp.scaleToGeodeticHeight(s.attributes.position.values,a,r,!1),h=u.length,d=new Float64Array(2*h);d.set(u);var f=Zp.scaleToGeodeticHeight(s.attributes.position.values,o,r);d.set(f,h),s.attributes.position.values=d;var p=t.northCap,m=t.southCap,g=4;p&&(g-=1),m&&(g-=1);var v=2*(d.length/3+g),_=lc.createTypedArray(d.length/3,v);h=d.length/6;for(var b,y=0,w=0;w<h-1;w++)_[y++]=w,_[y++]=w+1,_[y++]=w+h,_[y++]=w+h+1;if(_[y++]=h-1,_[y++]=0,_[y++]=h+h-1,_[y++]=h,_[y++]=0,_[y++]=h,p)b=c-1;else{var O=l-1;_[y++]=O,_[y++]=O+h,b=l+c-2}if(_[y++]=b,_[y++]=b+h,!m){var C=l+b-1;_[y++]=C,_[y]=C+h}return s.indices=_,s}(e,a),Object(o.a)(e._offsetAttribute)){var u=t.attributes.position.values.length/3,h=new Uint8Array(u);e._offsetAttribute===Hl.TOP?h=nl(h,1,0,u/2):(s=e._offsetAttribute===Hl.NONE?0:1,h=nl(h,s)),t.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}var f=gt.fromRectangle3D(i,r,c,pT),p=gt.fromRectangle3D(i,r,l,fT);n=gt.union(f,p)}else{if((t=vT(e,a)).attributes.position.values=Zp.scaleToGeodeticHeight(t.attributes.position.values,c,r,!1),Object(o.a)(e._offsetAttribute)){var m=t.attributes.position.values.length,g=new Uint8Array(m/3);s=e._offsetAttribute===Hl.NONE?0:1,nl(g,s),t.attributes.applyOffset=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,values:g})}n=gt.fromRectangle3D(i,r,c)}return new zl({attributes:t.attributes,indices:t.indices,primitiveType:xl.LINES,boundingSphere:n,offsetAttribute:e._offsetAttribute})}};var CT,ET=_T,AT=Object.freeze({FIXED:0,INERTIAL:1});"undefined"!==typeof requestAnimationFrame&&(CT=requestAnimationFrame),function(){if(!Object(o.a)(CT)&&"undefined"!==typeof window)for(var e=["webkit","moz","ms","o"],t=0,n=e.length;t<n&&!Object(o.a)(CT);)CT=window[e[t]+"RequestAnimationFrame"],++t;if(!Object(o.a)(CT)){var i=0;CT=function(e){var t=Sf(),n=Math.max(1e3/60-(t-i),0);return i=t+n,setTimeout((function(){e(i)}),n)}}}();var xT=function(e){return CT(e)},TT=(n(113),n(83));function ST(e){var t=e.positions,n=e.tilingScheme.tileXYToRectangle(e.x,e.y,e.level);return function(e){for(var i=0;i<t.length;++i){var r=t[i];r.height=e.interpolateHeight(n,r.longitude,r.latitude)}}}function DT(e){var t=e.positions;return function(){for(var e=0;e<t.length;++e){t[e].height=void 0}}}var PT=function(e,t,n){return i.a.typeOf.object("terrainProvider",e),i.a.typeOf.number("level",t),i.a.defined("positions",n),e.readyPromise.then((function(){return function(e,t,n){var i,r=e.tilingScheme,o=[],a={};for(i=0;i<n.length;++i){var s=r.positionToTileXY(n[i],t),c=s.toString();if(!a.hasOwnProperty(c)){var l={x:s.x,y:s.y,level:t,tilingScheme:r,terrainProvider:e,positions:[]};a[c]=l,o.push(l)}a[c].positions.push(n[i])}var u=[];for(i=0;i<o.length;++i){var h=o[i],d=h.terrainProvider.requestTileGeometry(h.x,h.y,h.level).then(ST(h)).otherwise(DT(h));u.push(d)}return Yt.a.all(u,(function(){return n}))}(e,t,n)}))},IT=new Mt;var MT=function e(t,n){if(!Object(o.a)(t))throw new a.a("terrainProvider is required.");if(!Object(o.a)(n))throw new a.a("positions is required.");return t.readyPromise.then((function(){var i=[],r=[],s=t.availability;if(!Object(o.a)(s))throw new a.a("sampleTerrainMostDetailed requires a terrain provider that has tile availability.");for(var c=[],l=0;l<n.length;++l){var u=n[l],h=s.computeMaximumLevelAtPosition(u);if(r[l]=h,0===h){t.tilingScheme.positionToTileXY(u,1,IT);var d=t.loadTileDataAvailability(IT.x,IT.y,1);Object(o.a)(d)&&c.push(d)}var f=i[h];Object(o.a)(f)||(i[h]=f=[]),f.push(u)}return Yt.a.all(c).then((function(){return Yt.a.all(i.map((function(e,n){if(Object(o.a)(e))return PT(t,n,e)})))})).then((function(){for(var i=[],o=0;o<n.length;++o){var a=n[o];s.computeMaximumLevelAtPosition(a)!==r[o]&&i.push(a)}if(i.length>0)return e(t,i)})).then((function(){return n}))}))},RT=Object.freeze({LEFT_DOWN:0,LEFT_UP:1,LEFT_CLICK:2,LEFT_DOUBLE_CLICK:3,RIGHT_DOWN:5,RIGHT_UP:6,RIGHT_CLICK:7,MIDDLE_DOWN:10,MIDDLE_UP:11,MIDDLE_CLICK:12,MOUSE_MOVE:15,WHEEL:16,PINCH_START:17,PINCH_END:18,PINCH_MOVE:19});function LT(e,t,n){var i=e._element;if(i===document)return n.x=t.clientX,n.y=t.clientY,n;var r=i.getBoundingClientRect();return n.x=t.clientX-r.left,n.y=t.clientY-r.top,n}function jT(e,t){var n=e;return Object(o.a)(t)&&(n+="+"+t),n}function FT(e){return e.shiftKey?AC.SHIFT:e.ctrlKey?AC.CTRL:e.altKey?AC.ALT:void 0}var NT=0,zT=1,kT=2;function BT(e,t,n,i){function r(t){i(e,t)}oo.isInternetExplorer()?n.addEventListener(t,r,!1):n.addEventListener(t,r,{capture:!1,passive:!1}),e._removalFunctions.push((function(){n.removeEventListener(t,r,!1)}))}var HT={position:new Mt};function VT(e){e._lastSeenTouchEvent=Sf()}function UT(e){return Sf()-e._lastSeenTouchEvent>gS.mouseEmulationIgnoreMilliseconds}function WT(e,t,n){var i=e.x-t.x,r=e.y-t.y;return Math.sqrt(i*i+r*r)<n}function GT(e,t){if(UT(e)){var n,i=t.button;if(e._buttonDown[i]=!0,i===NT)n=RT.LEFT_DOWN;else if(i===zT)n=RT.MIDDLE_DOWN;else{if(i!==kT)return;n=RT.RIGHT_DOWN}var r=LT(e,t,e._primaryPosition);Mt.clone(r,e._primaryStartPosition),Mt.clone(r,e._primaryPreviousPosition);var a=FT(t),s=e.getInputAction(n,a);Object(o.a)(s)&&(Mt.clone(r,HT.position),s(HT),t.preventDefault())}}var qT={position:new Mt},YT={position:new Mt};function $T(e,t,n,i){var r=FT(i),a=e.getInputAction(t,r),s=e.getInputAction(n,r);if(Object(o.a)(a)||Object(o.a)(s)){var c=LT(e,i,e._primaryPosition);if(Object(o.a)(a)&&(Mt.clone(c,qT.position),a(qT)),Object(o.a)(s))WT(e._primaryStartPosition,c,e._clickPixelTolerance)&&(Mt.clone(c,YT.position),s(YT))}}function XT(e,t){if(UT(e)){var n=t.button;n!==NT&&n!==zT&&n!==kT||(e._buttonDown[NT]&&($T(e,RT.LEFT_UP,RT.LEFT_CLICK,t),e._buttonDown[NT]=!1),e._buttonDown[zT]&&($T(e,RT.MIDDLE_UP,RT.MIDDLE_CLICK,t),e._buttonDown[zT]=!1),e._buttonDown[kT]&&($T(e,RT.RIGHT_UP,RT.RIGHT_CLICK,t),e._buttonDown[kT]=!1))}}var KT={startPosition:new Mt,endPosition:new Mt};function QT(e,t){if(UT(e)){var n=FT(t),i=LT(e,t,e._primaryPosition),r=e._primaryPreviousPosition,a=e.getInputAction(RT.MOUSE_MOVE,n);Object(o.a)(a)&&(Mt.clone(r,KT.startPosition),Mt.clone(i,KT.endPosition),a(KT)),Mt.clone(i,r),(e._buttonDown[NT]||e._buttonDown[zT]||e._buttonDown[kT])&&t.preventDefault()}}var ZT={position:new Mt};function JT(e,t){var n;if(t.button===NT){n=RT.LEFT_DOUBLE_CLICK;var i=FT(t),r=e.getInputAction(n,i);Object(o.a)(r)&&(LT(e,t,ZT.position),r(ZT))}}function eS(e,t){var n;if(Object(o.a)(t.deltaY)){var i=t.deltaMode;n=i===t.DOM_DELTA_PIXEL?-t.deltaY:i===t.DOM_DELTA_LINE?40*-t.deltaY:120*-t.deltaY}else n=t.detail>0?-120*t.detail:t.wheelDelta;if(Object(o.a)(n)){var r=FT(t),a=e.getInputAction(RT.WHEEL,r);Object(o.a)(a)&&(a(n),t.preventDefault())}}function tS(e,t){VT(e);var n,i,r,o=t.changedTouches,a=o.length,s=e._positions;for(n=0;n<a;++n)r=(i=o[n]).identifier,s.set(r,LT(e,i,new Mt));cS(e,t);var c=e._previousPositions;for(n=0;n<a;++n)r=(i=o[n]).identifier,c.set(r,Mt.clone(s.get(r)))}function nS(e,t){VT(e);var n,i,r=t.changedTouches,o=r.length,a=e._positions;for(n=0;n<o;++n)i=r[n].identifier,a.remove(i);cS(e,t);var s=e._previousPositions;for(n=0;n<o;++n)i=r[n].identifier,s.remove(i)}var iS={position:new Mt},rS={position1:new Mt,position2:new Mt},oS={position:new Mt},aS={position:new Mt},sS={position:new Mt};function cS(e,t){var n,i,r=FT(t),a=e._positions,s=a.length,c=e._isPinching;if(1!==s&&e._buttonDown[NT]){if(e._buttonDown[NT]=!1,Object(o.a)(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),n=e.getInputAction(RT.LEFT_UP,r),Object(o.a)(n)&&(Mt.clone(e._primaryPosition,oS.position),n(oS)),0===s&&!e._isTouchHolding)if(i=e.getInputAction(RT.LEFT_CLICK,r),Object(o.a)(i))WT(e._primaryStartPosition,e._previousPositions.values[0],e._clickPixelTolerance)&&(Mt.clone(e._primaryPosition,aS.position),i(aS));e._isTouchHolding=!1}if(0===s&&c&&(e._isPinching=!1,n=e.getInputAction(RT.PINCH_END,r),Object(o.a)(n)&&n()),1===s&&!c){var l=a.values[0];Mt.clone(l,e._primaryPosition),Mt.clone(l,e._primaryStartPosition),Mt.clone(l,e._primaryPreviousPosition),e._buttonDown[NT]=!0,n=e.getInputAction(RT.LEFT_DOWN,r),Object(o.a)(n)&&(Mt.clone(l,iS.position),n(iS)),e._touchHoldTimer=setTimeout((function(){e.isDestroyed()||(e._touchHoldTimer=void 0,e._isTouchHolding=!0,i=e.getInputAction(RT.RIGHT_CLICK,r),Object(o.a)(i)&&WT(e._primaryStartPosition,e._previousPositions.values[0],e._holdPixelTolerance)&&(Mt.clone(e._primaryPosition,sS.position),i(sS)))}),gS.touchHoldDelayMilliseconds),t.preventDefault()}2!==s||c||(e._isPinching=!0,n=e.getInputAction(RT.PINCH_START,r),Object(o.a)(n)&&(Mt.clone(a.values[0],rS.position1),Mt.clone(a.values[1],rS.position2),n(rS),t.preventDefault()))}function lS(e,t){VT(e);var n,i,r,a=t.changedTouches,s=a.length,c=e._positions;for(n=0;n<s;++n){r=(i=a[n]).identifier;var l=c.get(r);Object(o.a)(l)&<(e,i,l)}dS(e,t);var u=e._previousPositions;for(n=0;n<s;++n)r=(i=a[n]).identifier,Mt.clone(c.get(r),u.get(r))}var uS={startPosition:new Mt,endPosition:new Mt},hS={distance:{startPosition:new Mt,endPosition:new Mt},angleAndHeight:{startPosition:new Mt,endPosition:new Mt}};function dS(e,t){var n,i=FT(t),r=e._positions,a=e._previousPositions,s=r.length;if(1===s&&e._buttonDown[NT]){var c=r.values[0];Mt.clone(c,e._primaryPosition);var l=e._primaryPreviousPosition;n=e.getInputAction(RT.MOUSE_MOVE,i),Object(o.a)(n)&&(Mt.clone(l,uS.startPosition),Mt.clone(c,uS.endPosition),n(uS)),Mt.clone(c,l),t.preventDefault()}else if(2===s&&e._isPinching&&(n=e.getInputAction(RT.PINCH_MOVE,i),Object(o.a)(n))){var u=r.values[0],h=r.values[1],d=a.values[0],f=a.values[1],p=h.x-u.x,m=h.y-u.y,g=.25*Math.sqrt(p*p+m*m),v=f.x-d.x,_=f.y-d.y,b=.25*Math.sqrt(v*v+_*_),y=.125*(h.y+u.y),w=.125*(f.y+d.y),O=Math.atan2(m,p),C=Math.atan2(_,v);Mt.fromElements(0,b,hS.distance.startPosition),Mt.fromElements(0,g,hS.distance.endPosition),Mt.fromElements(C,w,hS.angleAndHeight.startPosition),Mt.fromElements(O,y,hS.angleAndHeight.endPosition),n(hS)}}function fS(e,t){if(t.target.setPointerCapture(t.pointerId),"touch"===t.pointerType){var n=e._positions,i=t.pointerId;n.set(i,LT(e,t,new Mt)),cS(e,t),e._previousPositions.set(i,Mt.clone(n.get(i)))}else GT(e,t)}function pS(e,t){if("touch"===t.pointerType){var n=e._positions,i=t.pointerId;n.remove(i),cS(e,t),e._previousPositions.remove(i)}else XT(e,t)}function mS(e,t){if("touch"===t.pointerType){var n=e._positions,i=t.pointerId,r=n.get(i);if(!Object(o.a)(r))return;LT(e,t,r),dS(e,t);var a=e._previousPositions;Mt.clone(n.get(i),a.get(i))}else QT(e,t)}function gS(e){this._inputEvents={},this._buttonDown={LEFT:!1,MIDDLE:!1,RIGHT:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-gS.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new Mt,this._primaryPosition=new Mt,this._primaryPreviousPosition=new Mt,this._positions=new sl,this._previousPositions=new sl,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=Object(r.a)(e,document),function(e){var t=e._element,n=Object(o.a)(t.disableRootEvents)?t:document;oo.supportsPointerEvents()?(BT(e,"pointerdown",t,fS),BT(e,"pointerup",t,pS),BT(e,"pointermove",t,mS),BT(e,"pointercancel",t,pS)):(BT(e,"mousedown",t,GT),BT(e,"mouseup",n,XT),BT(e,"mousemove",n,QT),BT(e,"touchstart",t,tS),BT(e,"touchend",n,nS),BT(e,"touchmove",n,lS),BT(e,"touchcancel",n,nS)),BT(e,"dblclick",t,JT),BT(e,"onwheel"in t?"wheel":void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll",t,eS)}(this)}gS.prototype.setInputAction=function(e,t,n){if(!Object(o.a)(e))throw new a.a("action is required.");if(!Object(o.a)(t))throw new a.a("type is required.");var i=jT(t,n);this._inputEvents[i]=e},gS.prototype.getInputAction=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=jT(e,t);return this._inputEvents[n]},gS.prototype.removeInputAction=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=jT(e,t);delete this._inputEvents[n]},gS.prototype.isDestroyed=function(){return!1},gS.prototype.destroy=function(){return function(e){for(var t=e._removalFunctions,n=0;n<t.length;++n)t[n]()}(this),Ks(this)},gS.mouseEmulationIgnoreMilliseconds=800,gS.touchHoldDelayMilliseconds=1500;var vS=gS;function _S(e){e=Object(r.a)(e,!0),this.value=_S.toValue(e)}Object.defineProperties(_S.prototype,{componentDatatype:{get:function(){return Ds.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}}),_S.toValue=function(e,t){if(!Object(o.a)(e))throw new a.a("show is required.");return Object(o.a)(t)?(t[0]=e,t):new Uint8Array([e])};var bS=_S,yS={};function wS(e,t){t=hr.addSeconds(e,32.184,t);var n=hr.totalDays(t)-2451545;return t=hr.addSeconds(t,function(e){var t=6.239996+.0172019696544*e;return.001657*Math.sin(t+.01671*Math.sin(t))}(n),t)}var OS=new hr(2451545,0,Wi.TAI),CS=d.RADIANS_PER_DEGREE,ES=d.RADIANS_PER_ARCSECOND,AS=new oe;function xS(e,t,n,i,r,s,c){if(n<0&&(n=-n,r+=d.PI),n<0||n>d.PI)throw new a.a("The inclination is out of range. Inclination must be greater than or equal to zero and less than or equal to Pi radians.");var l=e*(1-t),u=i-r,h=r,f=function(e,t){if(t<0||t>=1)throw new a.a("eccentricity out of range.");return function(e,t){if(t<0||t>=1)throw new a.a("eccentricity out of range.");var n=Math.floor(e/d.TWO_PI);e-=n*d.TWO_PI;var i=Math.cos(e)-t,r=Math.sin(e)*Math.sqrt(1-t*t),o=Math.atan2(r,i);o=d.zeroToTwoPi(o),e<0&&(o-=d.TWO_PI);return o+=n*d.TWO_PI}(function(e,t){if(t<0||t>=1)throw new a.a("eccentricity out of range.");var n,i=Math.floor(e/d.TWO_PI),r=(e-=i*d.TWO_PI)+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),o=Number.MAX_VALUE;for(n=0;n<50&&Math.abs(o-r)>TS;++n){var s=(o=r)-t*Math.sin(o)-e,c=1-t*Math.cos(o);r=o-s/c}if(n>=50)throw new a.a("Kepler equation did not converge");return o=r+i*d.TWO_PI}(e,t),t)}(s-i,t);if("Hyperbolic"===function(e,t){if(e<0)throw new a.a("eccentricity cannot be negative.");if(e<=t)return"Circular";if(e<1-t)return"Elliptical";if(e<=1+t)return"Parabolic";return"Hyperbolic"}(t,0)&&Math.abs(d.negativePiToPi(f))>=Math.acos(-1/t))throw new a.a("The true anomaly of the hyperbolic orbit lies outside of the bounds of the hyperbola.");!function(e,t,n,i){if(t<0||t>d.PI)throw new a.a("inclination out of range");var r=Math.cos(e),s=Math.sin(e),c=Math.cos(t),l=Math.sin(t),u=Math.cos(n),h=Math.sin(n);Object(o.a)(i)?(i[0]=u*r-h*s*c,i[1]=h*r+u*s*c,i[2]=s*l,i[3]=-u*s-h*r*c,i[4]=-h*s+u*r*c,i[5]=r*l,i[6]=h*l,i[7]=-u*l,i[8]=c):i=new oe(u*r-h*s*c,-u*s-h*r*c,h*l,h*r+u*s*c,-h*s+u*r*c,-u*l,s*l,r*l,c)}(u,n,h,AS);var p=l*(1+t),m=Math.cos(f),g=Math.sin(f),v=1+t*m;if(v<=d.Epsilon10)throw new a.a("elements cannot be converted to cartesian");var _=p/v;return Object(o.a)(c)?(c.x=_*m,c.y=_*g,c.z=0):c=new O(_*m,_*g,0),oe.multiplyByVector(AS,c,c)}var TS=d.EPSILON8;var SS=100.46645683*CS,DS=1295977422.83429*ES,PS=new hr(0,0,Wi.TAI);function IS(e,t){wS(e,PS);var n=(PS.dayNumber-OS.dayNumber+(PS.secondsOfDay-OS.secondsOfDay)/Ui.SECONDS_PER_DAY)/Ui.DAYS_PER_JULIAN_CENTURY,i=n*n,r=i*n,o=r*n,a=383397.7725+.004*n,s=.055545526-16e-9*n,c=5.15668983*CS,l=-8e-5*n+.02966*i-42e-6*r-13e-8*o,u=83.35324312*CS,h=14643420.2669*n-38.2702*i-.045047*r+21301e-8*o,d=125.04455501*CS,f=-6967919.3631*n+6.3602*i+.007625*r-3586e-8*o,p=218.31664563*CS,m=1732559343.4847*n-6.391*i+.006588*r-3169e-8*o,g=297.85019547*CS+ES*(1602961601.209*n-6.3706*i+.006593*r-3169e-8*o),v=134.96340251*CS+ES*(1717915923.2178*n+31.8792*i+.051635*r-2447e-7*o),_=357.52910918*CS+ES*(129596581.0481*n-.5532*i+136e-6*r-1149e-8*o),b=310.17137918*CS-ES*(6967051.436*n+6.2068*i+.007618*r-3219e-8*o),y=2*g,w=4*g,O=6*g,C=2*v,E=3*v,A=4*v,x=2*(93.27209062*CS+ES*(1739527262.8478*n-12.7512*i-.001037*r+417e-8*o));a+=3400.4*Math.cos(y)-635.6*Math.cos(y-v)-235.6*Math.cos(v)+218.1*Math.cos(y-_)+181*Math.cos(y+v),s+=.014216*Math.cos(y-v)+.008551*Math.cos(y-C)-.001383*Math.cos(v)+.001356*Math.cos(y+v)-.001147*Math.cos(w-E)-914e-6*Math.cos(w-C)+869e-6*Math.cos(y-_-v)-627e-6*Math.cos(y)-394e-6*Math.cos(w-A)+282e-6*Math.cos(y-_-C)-279e-6*Math.cos(g-v)-236e-6*Math.cos(C)+231e-6*Math.cos(w)+229e-6*Math.cos(O-A)-201e-6*Math.cos(C-x),l+=486.26*Math.cos(y-x)-40.13*Math.cos(y)+37.51*Math.cos(x)+25.73*Math.cos(C-x)+19.97*Math.cos(y-_-x),h+=-55609*Math.sin(y-v)-34711*Math.sin(y-C)-9792*Math.sin(v)+9385*Math.sin(w-E)+7505*Math.sin(w-C)+5318*Math.sin(y+v)+3484*Math.sin(w-A)-3417*Math.sin(y-_-v)-2530*Math.sin(O-A)-2376*Math.sin(y)-2075*Math.sin(y-E)-1883*Math.sin(C)-1736*Math.sin(O-5*v)+1626*Math.sin(_)-1370*Math.sin(O-E),f+=-5392*Math.sin(y-x)-540*Math.sin(_)-441*Math.sin(y)+423*Math.sin(x)-288*Math.sin(C-x),m+=-3332.9*Math.sin(y)+1197.4*Math.sin(y-v)-662.5*Math.sin(_)+396.3*Math.sin(v)-218*Math.sin(y-_);var T=2*b,S=3*b;l+=46.997*Math.cos(b)*n-.614*Math.cos(y-x+b)*n+.614*Math.cos(y-x-b)*n-.0297*Math.cos(T)*i-.0335*Math.cos(b)*i+.0012*Math.cos(y-x+T)*i-16e-5*Math.cos(b)*r+4e-5*Math.cos(S)*r+4e-5*Math.cos(T)*r;var D=2.116*Math.sin(b)*n-.111*Math.sin(y-x-b)*n-.0015*Math.sin(b)*i;return h+=D,m+=D,f+=-520.77*Math.sin(b)*n+13.66*Math.sin(y-x+b)*n+1.12*Math.sin(y-b)*n-1.06*Math.sin(x-b)*n+.66*Math.sin(T)*i+.371*Math.sin(b)*i-.035*Math.sin(y-x+T)*i-.015*Math.sin(y-x+b)*i+.0014*Math.sin(b)*r-.0011*Math.sin(S)*r-9e-4*Math.sin(T)*r,xS(a*=1e3,s,c+l*ES,u+h*ES,d+f*ES,p+m*ES,t)}var MS=new oe(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),RS=new O;yS.computeSunPositionInEarthInertialFrame=function(e,t){return Object(o.a)(e)||(e=hr.now()),Object(o.a)(t)||(t=new O),RS=function(e,t){wS(e,PS);var n=(PS.dayNumber-OS.dayNumber+(PS.secondsOfDay-OS.secondsOfDay)/Ui.SECONDS_PER_DAY)/(10*Ui.DAYS_PER_JULIAN_CENTURY),i=.3595362*n,r=149598022260.7121+957426.3679999999*Math.cos(16002*i)+-2243968.05*Math.sin(16002*i)+-2273887.624*Math.cos(21863*i)+-688150.202*Math.sin(21863*i)+927506.794*Math.cos(32004*i)+1017265.516*Math.sin(32004*i)+14959787e4*-8e-7*Math.cos(10931*i)+807828.498*Math.sin(10931*i)+478713.18399999995*Math.cos(14529*i)+209437.01799999998*Math.sin(14529*i)+-613351.267*Math.cos(16368*i)+359034.888*Math.sin(16368*i)+284235.953*Math.cos(15318*i)+-418874.03599999996*Math.sin(15318*i)+-164557.657*Math.cos(32794*i)+329115.314*Math.sin(32794*i),o=SS+DS*n+1e-7*-325*Math.cos(10*i)+1e-7*-105*Math.sin(10*i)+1e-7*-322*Math.cos(16002*i)+1e-7*-137*Math.sin(16002*i)+1e-7*-79*Math.cos(21863*i)+258*1e-7*Math.sin(21863*i)+232*1e-7*Math.cos(10931*i)+35*1e-7*Math.sin(10931*i)+1e-7*-52*Math.cos(1473*i)+1e-7*-116*Math.sin(1473*i)+97*1e-7*Math.cos(32004*i)+1e-7*-88*Math.sin(32004*i)+55*1e-7*Math.cos(4387*i)+1e-7*-112*Math.sin(4387*i)+1e-7*-41*Math.cos(73*i)+1e-7*-80*Math.sin(73*i);return xS(r,.0167086342-.0004203654*n,469.97289*ES*n,102.93734808*CS+11612.3529*ES*n,174.87317577*CS-8679.27034*ES*n,o,t)}(e,RS),t=O.negate(RS,t),function(e,t){t=IS(e,t),O.multiplyByScalar(t,-.01215058143522694,t)}(e,RS),O.subtract(t,RS,t),oe.multiplyByVector(MS,t,t),t},yS.computeMoonPositionInEarthInertialFrame=function(e,t){return Object(o.a)(e)||(e=hr.now()),t=IS(e,t),oe.multiplyByVector(MS,t,t),t};var LS=yS;function jS(e,t,n,i,r,o,a){var s,c=yg.numberOfPoints(e,t,r),l=n.red,u=n.green,h=n.blue,d=n.alpha,f=i.red,p=i.green,m=i.blue,g=i.alpha;if(Hf.equals(n,i)){for(s=0;s<c;s++)o[a++]=Hf.floatToByte(l),o[a++]=Hf.floatToByte(u),o[a++]=Hf.floatToByte(h),o[a++]=Hf.floatToByte(d);return a}var v=(f-l)/c,_=(p-u)/c,b=(m-h)/c,y=(g-d)/c,w=a;for(s=0;s<c;s++)o[w++]=Hf.floatToByte(l+s*v),o[w++]=Hf.floatToByte(u+s*_),o[w++]=Hf.floatToByte(h+s*b),o[w++]=Hf.floatToByte(d+s*y);return w}function FS(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.colors,i=Object(r.a)(e.colorsPerVertex,!1);if(!Object(o.a)(t)||t.length<2)throw new a.a("At least two positions are required.");if(Object(o.a)(n)&&(i&&n.length<t.length||!i&&n.length<t.length-1))throw new a.a("colors has an invalid length.");this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=Object(r.a)(e.arcType,tl.GEODESIC),this._granularity=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84),this._workerName="createSimplePolylineGeometry";var s=1+t.length*O.packedLength;s+=Object(o.a)(n)?1+n.length*Hf.packedLength:1,this.packedLength=s+W.packedLength+3}FS.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._colors;for(c=Object(o.a)(l)?l.length:0,t[n++]=c,i=0;i<c;++i,n+=Hf.packedLength)Hf.pack(l[i],t,n);return W.pack(e._ellipsoid,t,n),n+=W.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t},FS.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s=e[t++],c=new Array(s);for(i=0;i<s;++i,t+=O.packedLength)c[i]=O.unpack(e,t);var l=(s=e[t++])>0?new Array(s):void 0;for(i=0;i<s;++i,t+=Hf.packedLength)l[i]=Hf.unpack(e,t);var u=W.unpack(e,t);t+=W.packedLength;var h=1===e[t++],d=e[t++],f=e[t];return Object(o.a)(n)?(n._positions=c,n._colors=l,n._ellipsoid=u,n._colorsPerVertex=h,n._arcType=d,n._granularity=f,n):new FS({positions:c,colors:l,ellipsoid:u,colorsPerVertex:h,arcType:d,granularity:f})};var NS=new Array(2),zS=new Array(2),kS={positions:NS,height:zS,ellipsoid:void 0,minDistance:void 0,granularity:void 0};FS.createGeometry=function(e){var t,n,i,r,a,s=e._positions,c=e._colors,l=e._colorsPerVertex,u=e._arcType,h=e._granularity,f=e._ellipsoid,p=d.chordLength(h,f.maximumRadius),m=Object(o.a)(c)&&!l,g=s.length,v=0;if(u===tl.GEODESIC||u===tl.RHUMB){var _,b,y;u===tl.GEODESIC?(_=d.chordLength(h,f.maximumRadius),b=yg.numberOfPoints,y=yg.generateArc):(_=h,b=yg.numberOfPointsRhumbLine,y=yg.generateRhumbArc);var w=yg.extractHeights(s,f),C=kS;if(u===tl.GEODESIC?C.minDistance=p:C.granularity=h,C.ellipsoid=f,m){var E=0;for(t=0;t<g-1;t++)E+=b(s[t],s[t+1],_)+1;n=new Float64Array(3*E),r=new Uint8Array(4*E),C.positions=NS,C.height=zS;var A=0;for(t=0;t<g-1;++t){NS[0]=s[t],NS[1]=s[t+1],zS[0]=w[t],zS[1]=w[t+1];var x=y(C);if(Object(o.a)(c)){var T=x.length/3;a=c[t];for(var S=0;S<T;++S)r[A++]=Hf.floatToByte(a.red),r[A++]=Hf.floatToByte(a.green),r[A++]=Hf.floatToByte(a.blue),r[A++]=Hf.floatToByte(a.alpha)}n.set(x,v),v+=x.length}}else if(C.positions=s,C.height=w,n=new Float64Array(y(C)),Object(o.a)(c)){for(r=new Uint8Array(n.length/3*4),t=0;t<g-1;++t){v=jS(s[t],s[t+1],c[t],c[t+1],p,r,v)}var D=c[g-1];r[v++]=Hf.floatToByte(D.red),r[v++]=Hf.floatToByte(D.green),r[v++]=Hf.floatToByte(D.blue),r[v++]=Hf.floatToByte(D.alpha)}}else{i=m?2*g-2:g,n=new Float64Array(3*i),r=Object(o.a)(c)?new Uint8Array(4*i):void 0;var P=0,I=0;for(t=0;t<g;++t){var M=s[t];if(m&&t>0&&(O.pack(M,n,P),P+=3,a=c[t-1],r[I++]=Hf.floatToByte(a.red),r[I++]=Hf.floatToByte(a.green),r[I++]=Hf.floatToByte(a.blue),r[I++]=Hf.floatToByte(a.alpha)),m&&t===g-1)break;O.pack(M,n,P),P+=3,Object(o.a)(c)&&(a=c[t],r[I++]=Hf.floatToByte(a.red),r[I++]=Hf.floatToByte(a.green),r[I++]=Hf.floatToByte(a.blue),r[I++]=Hf.floatToByte(a.alpha))}}var R=new Bl;R.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:n}),Object(o.a)(c)&&(R.color=new kl({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:4,values:r,normalize:!0}));var L=2*((i=n.length/3)-1),j=lc.createTypedArray(i,L),F=0;for(t=0;t<i-1;++t)j[F++]=t,j[F++]=t+1;return new zl({attributes:R,indices:j,primitiveType:xl.LINES,boundingSphere:gt.fromPoints(s)})};function BS(e){var t=Object(r.a)(e.radius,1),n={radii:new O(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new bb(n),this._workerName="createSphereGeometry"}BS.packedLength=bb.packedLength,BS.pack=function(e,t,n){return i.a.typeOf.object("value",e),bb.pack(e._ellipsoidGeometry,t,n)};var HS=new bb,VS={radius:void 0,radii:new O,vertexFormat:new Ul,stackPartitions:void 0,slicePartitions:void 0};BS.unpack=function(e,t,n){var i=bb.unpack(e,t,HS);return VS.vertexFormat=Ul.clone(i._vertexFormat,VS.vertexFormat),VS.stackPartitions=i._stackPartitions,VS.slicePartitions=i._slicePartitions,Object(o.a)(n)?(O.clone(i._radii,VS.radii),n._ellipsoidGeometry=new bb(VS),n):(VS.radius=i._radii.x,new BS(VS))},BS.createGeometry=function(e){return bb.createGeometry(e._ellipsoidGeometry)};function US(e){var t=Object(r.a)(e.radius,1),n={radii:new O(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new Tb(n),this._workerName="createSphereOutlineGeometry"}US.packedLength=Tb.packedLength,US.pack=function(e,t,n){return i.a.typeOf.object("value",e),Tb.pack(e._ellipsoidGeometry,t,n)};var WS=new Tb,GS={radius:void 0,radii:new O,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};US.unpack=function(e,t,n){var i=Tb.unpack(e,t,WS);return GS.stackPartitions=i._stackPartitions,GS.slicePartitions=i._slicePartitions,GS.subdivisions=i._subdivisions,Object(o.a)(n)?(O.clone(i._radii,GS.radii),n._ellipsoidGeometry=new Tb(GS),n):(GS.radius=i._radii.x,new US(GS))},US.createGeometry=function(e){return Tb.createGeometry(e._ellipsoidGeometry)};var qS=US;function YS(e,t,n){this.clock=Object(r.a)(e,0),this.cone=Object(r.a)(t,0),this.magnitude=Object(r.a)(n,1)}YS.fromCartesian3=function(e,t){i.a.typeOf.object("cartesian3",e);var n=e.x,r=e.y,a=e.z,s=n*n+r*r;return Object(o.a)(t)||(t=new YS),t.clock=Math.atan2(r,n),t.cone=Math.atan2(Math.sqrt(s),a),t.magnitude=Math.sqrt(s+a*a),t},YS.clone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new YS(e.clock,e.cone,e.magnitude)},YS.normalize=function(e,t){return i.a.typeOf.object("spherical",e),Object(o.a)(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new YS(e.clock,e.cone,1)},YS.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude},YS.equalsEpsilon=function(e,t,n){return n=Object(r.a)(n,0),e===t||Object(o.a)(e)&&Object(o.a)(t)&&Math.abs(e.clock-t.clock)<=n&&Math.abs(e.cone-t.cone)<=n&&Math.abs(e.magnitude-t.magnitude)<=n},YS.prototype.equals=function(e){return YS.equals(this,e)},YS.prototype.clone=function(e){return YS.clone(this,e)},YS.prototype.equalsEpsilon=function(e,t){return YS.equalsEpsilon(this,e,t)},YS.prototype.toString=function(){return"("+this.clock+", "+this.cone+", "+this.magnitude+")"};var $S=YS;var XS=function(e,t){if(!Object(o.a)(e))throw new a.a("array is required.");if(!Object(o.a)(t)||t<1)throw new a.a("numberOfArrays must be greater than 0.");for(var n=[],i=e.length,r=0;r<i;){var s=Math.ceil((i-r)/t--);n.push(e.slice(r,r+s)),r+=s}return n};function KS(){a.a.throwInstantiationError()}Object.defineProperties(KS.prototype,{credits:{get:a.a.throwInstantiationError},waterMask:{get:a.a.throwInstantiationError}}),KS.prototype.interpolateHeight=a.a.throwInstantiationError,KS.prototype.isChildAvailable=a.a.throwInstantiationError,KS.prototype.createMesh=a.a.throwInstantiationError,KS.prototype.upsample=a.a.throwInstantiationError,KS.prototype.wasCreatedByUpsampling=a.a.throwInstantiationError;var QS={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7};function ZS(e){throw new a.a("This type should not be instantiated directly. Instead, use WebMercatorTilingScheme or GeographicTilingScheme.")}Object.defineProperties(ZS.prototype,{ellipsoid:{get:a.a.throwInstantiationError},rectangle:{get:a.a.throwInstantiationError},projection:{get:a.a.throwInstantiationError}}),ZS.prototype.getNumberOfXTilesAtLevel=a.a.throwInstantiationError,ZS.prototype.getNumberOfYTilesAtLevel=a.a.throwInstantiationError,ZS.prototype.rectangleToNativeRectangle=a.a.throwInstantiationError,ZS.prototype.tileXYToNativeRectangle=a.a.throwInstantiationError,ZS.prototype.tileXYToRectangle=a.a.throwInstantiationError,ZS.prototype.positionToTileXY=a.a.throwInstantiationError;function JS(e,t){return hr.compare(e.start,t.start)}function eD(e){if(this._intervals=[],this._changedEvent=new wn.a,Object(o.a)(e))for(var t=e.length,n=0;n<t;n++)this.addInterval(e[n])}Object.defineProperties(eD.prototype,{changedEvent:{get:function(){return this._changedEvent}},start:{get:function(){var e=this._intervals;return 0===e.length?void 0:e[0].start}},isStartIncluded:{get:function(){var e=this._intervals;return 0!==e.length&&e[0].isStartIncluded}},stop:{get:function(){var e=this._intervals,t=e.length;return 0===t?void 0:e[t-1].stop}},isStopIncluded:{get:function(){var e=this._intervals,t=e.length;return 0!==t&&e[t-1].isStopIncluded}},length:{get:function(){return this._intervals.length}},isEmpty:{get:function(){return 0===this._intervals.length}}}),eD.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof eD))return!1;var n=this._intervals,i=e._intervals,r=n.length;if(r!==i.length)return!1;for(var o=0;o<r;o++)if(!wC.equals(n[o],i[o],t))return!1;return!0},eD.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._intervals[e]},eD.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))},eD.prototype.findIntervalContainingDate=function(e){var t=this.indexOf(e);return t>=0?this._intervals[t]:void 0},eD.prototype.findDataForIntervalContainingDate=function(e){var t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0},eD.prototype.contains=function(e){return this.indexOf(e)>=0};var tD=new wC;eD.prototype.indexOf=function(e){if(!Object(o.a)(e))throw new a.a("date is required");var t=this._intervals;tD.start=e,tD.stop=e;var n=Ni(t,tD,JS);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n)>0&&n-1<t.length&&wC.contains(t[n-1],e)?n-1:~n},eD.prototype.findInterval=function(e){for(var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).start,n=e.stop,i=e.isStartIncluded,a=e.isStopIncluded,s=this._intervals,c=0,l=s.length;c<l;c++){var u=s[c];if((!Object(o.a)(t)||u.start.equals(t))&&(!Object(o.a)(n)||u.stop.equals(n))&&(!Object(o.a)(i)||u.isStartIncluded===i)&&(!Object(o.a)(a)||u.isStopIncluded===a))return s[c]}},eD.prototype.addInterval=function(e,t){if(!Object(o.a)(e))throw new a.a("interval is required");if(!e.isEmpty){var n=this._intervals;if(0===n.length||hr.greaterThan(e.start,n[n.length-1].stop))return n.push(e),void this._changedEvent.raiseEvent(this);var i,r=Ni(n,e,JS);for(r<0?r=~r:r>0&&e.isStartIncluded&&n[r-1].isStartIncluded&&n[r-1].start.equals(e.start)?--r:r<n.length&&!e.isStartIncluded&&n[r].isStartIncluded&&n[r].start.equals(e.start)&&++r,r>0&&((i=hr.compare(n[r-1].stop,e.start))>0||0===i&&(n[r-1].isStopIncluded||e.isStartIncluded))&&((Object(o.a)(t)?t(n[r-1].data,e.data):n[r-1].data===e.data)?(e=hr.greaterThan(e.stop,n[r-1].stop)?new wC({start:n[r-1].start,stop:e.stop,isStartIncluded:n[r-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):new wC({start:n[r-1].start,stop:n[r-1].stop,isStartIncluded:n[r-1].isStartIncluded,isStopIncluded:n[r-1].isStopIncluded||e.stop.equals(n[r-1].stop)&&e.isStopIncluded,data:e.data}),n.splice(r-1,1),--r):(((i=hr.compare(n[r-1].stop,e.stop))>0||0===i&&n[r-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(r,0,new wC({start:e.stop,stop:n[r-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[r-1].isStopIncluded,data:n[r-1].data})),n[r-1]=new wC({start:n[r-1].start,stop:e.start,isStartIncluded:n[r-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[r-1].data})));r<n.length&&((i=hr.compare(e.stop,n[r].start))>0||0===i&&(e.isStopIncluded||n[r].isStartIncluded));)if(Object(o.a)(t)?t(n[r].data,e.data):n[r].data===e.data)e=new wC({start:e.start,stop:hr.greaterThan(n[r].stop,e.stop)?n[r].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:hr.greaterThan(n[r].stop,e.stop)?n[r].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(r,1);else{if(n[r]=new wC({start:e.stop,stop:n[r].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[r].isStopIncluded,data:n[r].data}),!n[r].isEmpty)break;n.splice(r,1)}n.splice(r,0,e),this._changedEvent.raiseEvent(this)}},eD.prototype.removeInterval=function(e){if(!Object(o.a)(e))throw new a.a("interval is required");if(e.isEmpty)return!1;var t=this._intervals,n=Ni(t,e,JS);n<0&&(n=~n);var i=!1;for(n>0&&(hr.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(hr.greaterThan(t[n-1].stop,e.stop)||t[n-1].isStopIncluded&&!e.isStopIncluded&&t[n-1].stop.equals(e.stop))&&t.splice(n,0,new wC({start:e.stop,stop:t[n-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n-1].isStopIncluded,data:t[n-1].data})),t[n-1]=new wC({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n<t.length&&!e.isStartIncluded&&t[n].isStartIncluded&&e.start.equals(t[n].start)&&(i=!0,t.splice(n,0,new wC({start:t[n].start,stop:t[n].start,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data})),++n);n<t.length&&hr.greaterThan(e.stop,t[n].stop);)i=!0,t.splice(n,1);return n<t.length&&e.stop.equals(t[n].stop)&&(i=!0,!e.isStopIncluded&&t[n].isStopIncluded?n+1<t.length&&t[n+1].start.equals(e.stop)&&t[n].data===t[n+1].data?(t.splice(n,1),t[n]=new wC({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new wC({start:e.stop,stop:e.stop,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data}):t.splice(n,1)),n<t.length&&(hr.greaterThan(e.stop,t[n].start)||e.stop.equals(t[n].start)&&e.isStopIncluded&&t[n].isStartIncluded)&&(i=!0,t[n]=new wC({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i},eD.prototype.intersect=function(e,t,n){if(!Object(o.a)(e))throw new a.a("other is required.");for(var i=new eD,r=0,s=0,c=this._intervals,l=e._intervals;r<c.length&&s<l.length;){var u=c[r],h=l[s];if(hr.lessThan(u.stop,h.start))++r;else if(hr.lessThan(h.stop,u.start))++s;else{if(Object(o.a)(n)||Object(o.a)(t)&&t(u.data,h.data)||!Object(o.a)(t)&&h.data===u.data){var d=wC.intersect(u,h,new wC,n);d.isEmpty||i.addInterval(d,t)}hr.lessThan(u.stop,h.stop)||u.stop.equals(h.stop)&&!u.isStopIncluded&&h.isStopIncluded?++r:++s}}return i},eD.fromJulianDateArray=function(e,t){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.julianDates))throw new a.a("options.iso8601Array is required.");Object(o.a)(t)||(t=new eD);var n,i=e.julianDates,s=i.length,c=e.dataCallback,l=Object(r.a)(e.isStartIncluded,!0),u=Object(r.a)(e.isStopIncluded,!0),h=Object(r.a)(e.leadingInterval,!1),d=Object(r.a)(e.trailingInterval,!1),f=0;h&&(++f,(n=new wC({start:EC.MINIMUM_VALUE,stop:i[0],isStartIncluded:!0,isStopIncluded:!l})).data=Object(o.a)(c)?c(n,t.length):t.length,t.addInterval(n));for(var p=0;p<s-1;++p){var m=i[p],g=i[p+1];(n=new wC({start:m,stop:g,isStartIncluded:t.length!==f||l,isStopIncluded:p===s-2&&u})).data=Object(o.a)(c)?c(n,t.length):t.length,t.addInterval(n),m=g}return d&&((n=new wC({start:i[s-1],stop:EC.MAXIMUM_VALUE,isStartIncluded:!u,isStopIncluded:!0})).data=Object(o.a)(c)?c(n,t.length):t.length,t.addInterval(n)),t};var nD=new Bi,iD=[0,31,28,31,30,31,30,31,31,30,31,30,31];function rD(e,t,n){Object(o.a)(n)||(n=new hr),hr.toGregorianDate(e,nD);var i=nD.millisecond+t.millisecond,r=nD.second+t.second,a=nD.minute+t.minute,s=nD.hour+t.hour,c=nD.day+t.day,l=nD.month+t.month,u=nD.year+t.year;for(i>=1e3&&(r+=Math.floor(i/1e3),i%=1e3),r>=60&&(a+=Math.floor(r/60),r%=60),a>=60&&(s+=Math.floor(a/60),a%=60),s>=24&&(c+=Math.floor(s/24),s%=24),iD[2]=Hi(u)?29:28;c>iD[l]||l>=13;)c>iD[l]&&(c-=iD[l],++l),l>=13&&(--l,u+=Math.floor(l/12),l%=12,++l),iD[2]=Hi(u)?29:28;return nD.millisecond=i,nD.second=r,nD.minute=a,nD.hour=s,nD.day=c,nD.month=l,nD.year=u,hr.fromGregorianDate(nD,n)}var oD=new hr,aD=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function sD(e,t){if(!Object(o.a)(e)||0===e.length)return!1;if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,t.millisecond=0,"P"===e[0]){var n=e.match(aD);if(!Object(o.a)(n))return!1;if(Object(o.a)(n[1])&&(t.year=Number(n[1].replace(",","."))),Object(o.a)(n[2])&&(t.month=Number(n[2].replace(",","."))),Object(o.a)(n[3])&&(t.day=7*Number(n[3].replace(",","."))),Object(o.a)(n[4])&&(t.day+=Number(n[4].replace(",","."))),Object(o.a)(n[5])&&(t.hour=Number(n[5].replace(",","."))),Object(o.a)(n[6])&&(t.minute=Number(n[6].replace(",","."))),Object(o.a)(n[7])){var i=Number(n[7].replace(",","."));t.second=Math.floor(i),t.millisecond=i%1*1e3}}else"Z"!==e[e.length-1]&&(e+="Z"),hr.toGregorianDate(hr.fromIso8601(e,oD),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var cD=new Bi;eD.fromIso8601=function(e,t){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.iso8601))throw new a.a("options.iso8601 is required.");var n=e.iso8601.split("/"),i=hr.fromIso8601(n[0]),r=hr.fromIso8601(n[1]),s=[];if(sD(n[2],cD)){var c=hr.clone(i);for(s.push(c);hr.compare(c,r)<0;){c=rD(c,cD),hr.compare(r,c)<=0&&hr.clone(r,c),s.push(c)}}else s.push(i,r);return eD.fromJulianDateArray({julianDates:s,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)},eD.fromIso8601DateArray=function(e,t){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.iso8601Dates))throw new a.a("options.iso8601Dates is required.");return eD.fromJulianDateArray({julianDates:e.iso8601Dates.map((function(e){return hr.fromIso8601(e)})),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)},eD.fromIso8601DurationArray=function(e,t){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.epoch))throw new a.a("options.epoch is required.");if(!Object(o.a)(e.iso8601Durations))throw new a.a("options.iso8601Durations is required.");for(var n,i,s=e.epoch,c=e.iso8601Durations,l=Object(r.a)(e.relativeToPrevious,!1),u=[],h=c.length,d=0;d<h;++d)(sD(c[d],cD)||0===d)&&(n=l&&Object(o.a)(i)?rD(i,cD):rD(s,cD),u.push(n),i=n);return eD.fromJulianDateArray({julianDates:u,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var lD=eD,uD=new O(1,1,1),hD=O.ZERO,dD=No.IDENTITY;function fD(e,t,n){this.translation=O.clone(Object(r.a)(e,hD)),this.rotation=No.clone(Object(r.a)(t,dD)),this.scale=O.clone(Object(r.a)(n,uD))}fD.prototype.equals=function(e){return this===e||Object(o.a)(e)&&O.equals(this.translation,e.translation)&&No.equals(this.rotation,e.rotation)&&O.equals(this.scale,e.scale)};var pD=fD;n(152);function mD(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._clock=void 0,this._element=void 0,this._clockSubscription=void 0,this._seekFunction=void 0,this._lastPlaybackRate=void 0,this.clock=e.clock,this.element=e.element,this.epoch=Object(r.a)(e.epoch,EC.MINIMUM_VALUE),this.tolerance=Object(r.a)(e.tolerance,1),this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(mD.prototype,{clock:{get:function(){return this._clock},set:function(e){var t=this._clock;t!==e&&(Object(o.a)(t)&&(this._clockSubscription(),this._clockSubscription=void 0),Object(o.a)(e)&&(this._clockSubscription=e.onTick.addEventListener(mD.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){var t,n=this._element;n!==e&&(Object(o.a)(n)&&n.removeEventListener("seeked",this._seekFunction,!1),Object(o.a)(e)&&(this._seeking=!1,this._seekFunction=(t=this,function(){t._seeking=!1,t._firstTickAfterSeek=!0}),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}}),mD.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,Ks(this)},mD.prototype.isDestroyed=function(){return!1},mD.prototype._trySetPlaybackRate=function(e){if(this._lastPlaybackRate!==e.multiplier){var t=this._element;try{t.playbackRate=e.multiplier}catch(n){t.playbackRate=0}this._lastPlaybackRate=e.multiplier}},mD.prototype._onTick=function(e){var t=this._element;if(Object(o.a)(t)&&!(t.readyState<2)){var n=t.paused,i=e.shouldAnimate;if(i===n&&(i?t.play():t.pause()),this._seeking||this._firstTickAfterSeek)this._firstTickAfterSeek=!1;else{this._trySetPlaybackRate(e);var a,s=e.currentTime,c=Object(r.a)(this.epoch,EC.MINIMUM_VALUE),l=hr.secondsDifference(s,c),u=t.duration,h=t.currentTime;t.loop?((l%=u)<0&&(l=u-l),a=l):a=l>u?u:l<0?0:l;var d=i?Object(r.a)(this.tolerance,1):.001;Math.abs(a-h)>d&&(this._seeking=!0,t.currentTime=a)}}};function gD(e,t){this.rectangle=e,this.maxLevel=t}function vD(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");var t=_t.a.createIfNeeded(e.url);this._resource=t,this._errorEvent=new wn.a,this._ready=!1,this._readyPromise=Yt.a.defer(),this._terrainDataStructure={heightScale:.001,heightOffset:-1e3,elementsPerHeight:3,stride:4,elementMultiplier:256,isBigEndian:!0,lowestEncodedHeight:0,highestEncodedHeight:16777215};var n=e.credit;"string"===typeof n&&(n=new yn(n)),this._credit=n,this._tilingScheme=void 0,this._rectangles=[];var i,s=this,c=Object(r.a)(e.ellipsoid,W.WGS84);function l(e){var t=e.getElementsByTagName("SRS")[0].textContent;if("EPSG:4326"===t){s._tilingScheme=new Lt({ellipsoid:c});var n=e.getElementsByTagName("TileFormat")[0];s._heightmapWidth=parseInt(n.getAttribute("width"),10),s._heightmapHeight=parseInt(n.getAttribute("height"),10),s._levelZeroMaximumGeometricError=vc.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,Math.min(s._heightmapWidth,s._heightmapHeight),s._tilingScheme.getNumberOfXTilesAtLevel(0));for(var i=e.getElementsByTagName("DataExtent"),r=0;r<i.length;++r){var o=i[r],a=d.toRadians(parseFloat(o.getAttribute("minx"))),l=d.toRadians(parseFloat(o.getAttribute("miny"))),h=d.toRadians(parseFloat(o.getAttribute("maxx"))),f=d.toRadians(parseFloat(o.getAttribute("maxy"))),p=parseInt(o.getAttribute("maxlevel"),10);s._rectangles.push(new gD(new Se(a,l,h,f),p))}s._ready=!0,s._readyPromise.resolve(!0)}else u("SRS "+t+" is not supported.")}function u(e){var t=Object(r.a)(e,"An error occurred while accessing "+s._resource.url+".");i=$c.handleError(i,s,s._errorEvent,t,void 0,void 0,void 0,h)}function h(){Object(Yt.a)(s._resource.fetchXML(),l,u)}h()}Object.defineProperties(vD.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){if(!this.ready)throw new a.a("requestTileGeometry must not be called before ready returns true.");return this._tilingScheme}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}}),vD.prototype.requestTileGeometry=function(e,t,n,i){if(!this.ready)throw new a.a("requestTileGeometry must not be called before ready returns true.");var r=this._tilingScheme.getNumberOfYTilesAtLevel(n),s=this._resource.getDerivedResource({url:n+"/"+e+"/"+(r-t-1)+".tif",queryParameters:{cesium:!0},request:i}).fetchImage({preferImageBitmap:!0});if(Object(o.a)(s)){var c=this;return Object(Yt.a)(s).then((function(i){return new Ec({buffer:Ry(i),width:c._heightmapWidth,height:c._heightmapHeight,childTileMask:bD(c,e,t,n),structure:c._terrainDataStructure})}))}},vD.prototype.getLevelMaximumGeometricError=function(e){if(!this.ready)throw new a.a("requestTileGeometry must not be called before ready returns true.");return this._levelZeroMaximumGeometricError/(1<<e)};var _D=new Se;function bD(e,t,n,i){for(var r=e._tilingScheme,a=e._rectangles,s=r.tileXYToRectangle(t,n,i),c=0,l=0;l<a.length&&15!==c;++l){var u=a[l];if(!(u.maxLevel<=i)){var h=u.rectangle,d=Se.intersection(h,s,_D);Object(o.a)(d)&&(yD(r,h,2*t,2*n,i+1)&&(c|=4),yD(r,h,2*t+1,2*n,i+1)&&(c|=8),yD(r,h,2*t,2*n+1,i+1)&&(c|=1),yD(r,h,2*t+1,2*n+1,i+1)&&(c|=2))}}return c}function yD(e,t,n,i,r){var a=e.tileXYToRectangle(n,i,r);return Object(o.a)(Se.intersection(a,t,_D))}vD.prototype.getTileDataAvailable=function(e,t,n){},vD.prototype.loadTileDataAvailability=function(e,t,n){};var wD={};function OD(e,t){return d.equalsEpsilon(e.latitude,t.latitude,d.EPSILON10)&&d.equalsEpsilon(e.longitude,t.longitude,d.EPSILON10)}var CD=new R,ED=new R;var AD=new Array(2),xD=new Array(2),TD={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};wD.computePositions=function(e,t,n,i,r,a){var s=function(e,t,n,i){var r=(t=rl(t,O.equalsEpsilon,!0)).length;if(!(r<2)){var a=Object(o.a)(i),s=Object(o.a)(n),c=!0,l=new Array(r),u=new Array(r),h=new Array(r),d=t[0];l[0]=d;var f=e.cartesianToCartographic(d,CD);s&&(f.height=n[0]),c=c&&f.height<=0,u[0]=f.height,h[0]=a?i[0]:0;for(var p=1,m=1;m<r;++m){var g=t[m],v=e.cartesianToCartographic(g,ED);s&&(v.height=n[m]),c=c&&v.height<=0,OD(f,v)?f.height<v.height&&(u[p-1]=v.height):(l[p]=g,u[p]=v.height,h[p]=a?i[m]:0,R.clone(v,f),++p)}if(!(c||p<2))return l.length=p,u.length=p,h.length=p,{positions:l,topHeights:u,bottomHeights:h}}}(e,t,n,i);if(Object(o.a)(s)){t=s.positions,n=s.topHeights,i=s.bottomHeights;var c,l,u=t.length,h=u-2,f=d.chordLength(r,e.maximumRadius),p=TD;if(p.minDistance=f,p.ellipsoid=e,a){var m,g=0;for(m=0;m<u-1;m++)g+=yg.numberOfPoints(t[m],t[m+1],f)+1;c=new Float64Array(3*g),l=new Float64Array(3*g);var v=AD,_=xD;p.positions=v,p.height=_;var b=0;for(m=0;m<u-1;m++){v[0]=t[m],v[1]=t[m+1],_[0]=n[m],_[1]=n[m+1];var y=yg.generateArc(p);c.set(y,b),_[0]=i[m],_[1]=i[m+1],l.set(yg.generateArc(p),b),b+=y.length}}else p.positions=t,p.height=n,c=new Float64Array(yg.generateArc(p)),p.height=i,l=new Float64Array(yg.generateArc(p));return{bottomPositions:l,topPositions:c,numCorners:h}}};var SD=wD,DD=new O,PD=new O,ID=new O,MD=new O,RD=new O,LD=new O,jD=new O,FD=new O;function ND(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.maximumHeights,i=e.minimumHeights;if(!Object(o.a)(t))throw new a.a("options.positions is required.");if(Object(o.a)(n)&&n.length!==t.length)throw new a.a("options.positions and options.maximumHeights must have the same length.");if(Object(o.a)(i)&&i.length!==t.length)throw new a.a("options.positions and options.minimumHeights must have the same length.");var s=Object(r.a)(e.vertexFormat,Ul.DEFAULT),c=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),l=Object(r.a)(e.ellipsoid,W.WGS84);this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=Ul.clone(s),this._granularity=c,this._ellipsoid=W.clone(l),this._workerName="createWallGeometry";var u=1+t.length*O.packedLength+2;Object(o.a)(i)&&(u+=i.length),Object(o.a)(n)&&(u+=n.length),this.packedLength=u+W.packedLength+Ul.packedLength+1}ND.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._minimumHeights;if(c=Object(o.a)(l)?l.length:0,t[n++]=c,Object(o.a)(l))for(i=0;i<c;++i)t[n++]=l[i];var u=e._maximumHeights;if(c=Object(o.a)(u)?u.length:0,t[n++]=c,Object(o.a)(u))for(i=0;i<c;++i)t[n++]=u[i];return W.pack(e._ellipsoid,t,n),n+=W.packedLength,Ul.pack(e._vertexFormat,t,n),t[n+=Ul.packedLength]=e._granularity,t};var zD=W.clone(W.UNIT_SPHERE),kD=new Ul,BD={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:zD,vertexFormat:kD,granularity:void 0};ND.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s,c,l=e[t++],u=new Array(l);for(i=0;i<l;++i,t+=O.packedLength)u[i]=O.unpack(e,t);if((l=e[t++])>0)for(s=new Array(l),i=0;i<l;++i)s[i]=e[t++];if((l=e[t++])>0)for(c=new Array(l),i=0;i<l;++i)c[i]=e[t++];var h=W.unpack(e,t,zD);t+=W.packedLength;var d=Ul.unpack(e,t,kD),f=e[t+=Ul.packedLength];return Object(o.a)(n)?(n._positions=u,n._minimumHeights=s,n._maximumHeights=c,n._ellipsoid=W.clone(h,n._ellipsoid),n._vertexFormat=Ul.clone(d,n._vertexFormat),n._granularity=f,n):(BD.positions=u,BD.minimumHeights=s,BD.maximumHeights=c,BD.granularity=f,new ND(BD))},ND.fromConstantHeights=function(e){var t,n,i=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions;if(!Object(o.a)(i))throw new a.a("options.positions is required.");var s=e.minimumHeight,c=e.maximumHeight,l=Object(o.a)(s),u=Object(o.a)(c);if(l||u){var h=i.length;t=l?new Array(h):void 0,n=u?new Array(h):void 0;for(var d=0;d<h;++d)l&&(t[d]=s),u&&(n[d]=c)}return new ND({positions:i,maximumHeights:n,minimumHeights:t,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat})},ND.createGeometry=function(e){var t=e._positions,n=e._minimumHeights,i=e._maximumHeights,r=e._vertexFormat,a=e._granularity,s=e._ellipsoid,c=SD.computePositions(s,t,i,n,a,!0);if(Object(o.a)(c)){var l,u=c.bottomPositions,h=c.topPositions,f=c.numCorners,p=h.length,m=2*p,g=r.position?new Float64Array(m):void 0,v=r.normal?new Float32Array(m):void 0,_=r.tangent?new Float32Array(m):void 0,b=r.bitangent?new Float32Array(m):void 0,y=r.st?new Float32Array(m/3*2):void 0,w=0,C=0,E=0,A=0,x=0,T=FD,S=jD,D=LD,P=!0,I=0,M=1/((p/=3)-t.length+1);for(l=0;l<p;++l){var R=3*l,L=O.fromArray(h,R,DD),j=O.fromArray(u,R,PD);if(r.position&&(g[w++]=j.x,g[w++]=j.y,g[w++]=j.z,g[w++]=L.x,g[w++]=L.y,g[w++]=L.z),r.st&&(y[x++]=I,y[x++]=0,y[x++]=I,y[x++]=1),r.normal||r.tangent||r.bitangent){var F,N=O.clone(O.ZERO,RD),z=s.scaleToGeodeticSurface(O.fromArray(h,R,PD),PD);if(l+1<p&&(F=s.scaleToGeodeticSurface(O.fromArray(h,R+3,ID),ID),N=O.fromArray(h,R+3,RD)),P){var k=O.subtract(N,L,MD),B=O.subtract(z,L,DD);T=O.normalize(O.cross(B,k,T),T),P=!1}O.equalsEpsilon(F,z,d.EPSILON10)?P=!0:(I+=M,r.tangent&&(S=O.normalize(O.subtract(F,z,S),S)),r.bitangent&&(D=O.normalize(O.cross(T,S,D),D))),r.normal&&(v[C++]=T.x,v[C++]=T.y,v[C++]=T.z,v[C++]=T.x,v[C++]=T.y,v[C++]=T.z),r.tangent&&(_[A++]=S.x,_[A++]=S.y,_[A++]=S.z,_[A++]=S.x,_[A++]=S.y,_[A++]=S.z),r.bitangent&&(b[E++]=D.x,b[E++]=D.y,b[E++]=D.z,b[E++]=D.x,b[E++]=D.y,b[E++]=D.z)}}var H=new Bl;r.position&&(H.position=new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:g})),r.normal&&(H.normal=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:v})),r.tangent&&(H.tangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:_})),r.bitangent&&(H.bitangent=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:b})),r.st&&(H.st=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:y}));var V=m/3;m-=6*(f+1);var U=lc.createTypedArray(V,m),W=0;for(l=0;l<V-2;l+=2){var G=l,q=l+2,Y=O.fromArray(g,3*G,DD),$=O.fromArray(g,3*q,PD);if(!O.equalsEpsilon(Y,$,d.EPSILON10)){var X=l+1,K=l+3;U[W++]=X,U[W++]=G,U[W++]=K,U[W++]=K,U[W++]=G,U[W++]=q}}return new zl({attributes:H,indices:U,primitiveType:xl.TRIANGLES,boundingSphere:new gt.fromVertices(g)})}};var HD=ND,VD=new O,UD=new O;function WD(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions,n=e.maximumHeights,i=e.minimumHeights;if(!Object(o.a)(t))throw new a.a("options.positions is required.");if(Object(o.a)(n)&&n.length!==t.length)throw new a.a("options.positions and options.maximumHeights must have the same length.");if(Object(o.a)(i)&&i.length!==t.length)throw new a.a("options.positions and options.minimumHeights must have the same length.");var s=Object(r.a)(e.granularity,d.RADIANS_PER_DEGREE),c=Object(r.a)(e.ellipsoid,W.WGS84);this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._granularity=s,this._ellipsoid=W.clone(c),this._workerName="createWallOutlineGeometry";var l=1+t.length*O.packedLength+2;Object(o.a)(i)&&(l+=i.length),Object(o.a)(n)&&(l+=n.length),this.packedLength=l+W.packedLength+1}WD.pack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");var i;n=Object(r.a)(n,0);var s=e._positions,c=s.length;for(t[n++]=c,i=0;i<c;++i,n+=O.packedLength)O.pack(s[i],t,n);var l=e._minimumHeights;if(c=Object(o.a)(l)?l.length:0,t[n++]=c,Object(o.a)(l))for(i=0;i<c;++i)t[n++]=l[i];var u=e._maximumHeights;if(c=Object(o.a)(u)?u.length:0,t[n++]=c,Object(o.a)(u))for(i=0;i<c;++i)t[n++]=u[i];return W.pack(e._ellipsoid,t,n),t[n+=W.packedLength]=e._granularity,t};var GD=W.clone(W.UNIT_SPHERE),qD={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:GD,granularity:void 0};WD.unpack=function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");var i;t=Object(r.a)(t,0);var s,c,l=e[t++],u=new Array(l);for(i=0;i<l;++i,t+=O.packedLength)u[i]=O.unpack(e,t);if((l=e[t++])>0)for(s=new Array(l),i=0;i<l;++i)s[i]=e[t++];if((l=e[t++])>0)for(c=new Array(l),i=0;i<l;++i)c[i]=e[t++];var h=W.unpack(e,t,GD),d=e[t+=W.packedLength];return Object(o.a)(n)?(n._positions=u,n._minimumHeights=s,n._maximumHeights=c,n._ellipsoid=W.clone(h,n._ellipsoid),n._granularity=d,n):(qD.positions=u,qD.minimumHeights=s,qD.maximumHeights=c,qD.granularity=d,new WD(qD))},WD.fromConstantHeights=function(e){var t,n,i=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).positions;if(!Object(o.a)(i))throw new a.a("options.positions is required.");var s=e.minimumHeight,c=e.maximumHeight,l=Object(o.a)(s),u=Object(o.a)(c);if(l||u){var h=i.length;t=l?new Array(h):void 0,n=u?new Array(h):void 0;for(var d=0;d<h;++d)l&&(t[d]=s),u&&(n[d]=c)}return new WD({positions:i,maximumHeights:n,minimumHeights:t,ellipsoid:e.ellipsoid})},WD.createGeometry=function(e){var t=e._positions,n=e._minimumHeights,i=e._maximumHeights,r=e._granularity,a=e._ellipsoid,s=SD.computePositions(a,t,i,n,r,!1);if(Object(o.a)(s)){var c,l=s.bottomPositions,u=s.topPositions,h=u.length,f=2*h,p=new Float64Array(f),m=0;for(h/=3,c=0;c<h;++c){var g=3*c,v=O.fromArray(u,g,VD),_=O.fromArray(l,g,UD);p[m++]=_.x,p[m++]=_.y,p[m++]=_.z,p[m++]=v.x,p[m++]=v.y,p[m++]=v.z}var b=new Bl({position:new kl({componentDatatype:Ds.DOUBLE,componentsPerAttribute:3,values:p})}),y=f/3;f=2*y-4+y;var w=lc.createTypedArray(y,f),C=0;for(c=0;c<y-2;c+=2){var E=c,A=c+2,x=O.fromArray(p,3*E,VD),T=O.fromArray(p,3*A,UD);if(!O.equalsEpsilon(x,T,d.EPSILON10)){var S=c+1,D=c+3;w[C++]=S,w[C++]=E,w[C++]=S,w[C++]=D,w[C++]=E,w[C++]=A}}return w[C++]=y-2,w[C++]=y-1,new zl({attributes:b,indices:w,primitiveType:xl.LINES,boundingSphere:new gt.fromVertices(p)})}};var YD=WD;var $D=function(e){switch(e){case Ts.FLOAT:return"float";case Ts.FLOAT_VEC2:return"vec2";case Ts.FLOAT_VEC3:return"vec3";case Ts.FLOAT_VEC4:return"vec4";case Ts.FLOAT_MAT2:return"mat2";case Ts.FLOAT_MAT3:return"mat3";case Ts.FLOAT_MAT4:return"mat4";case Ts.SAMPLER_2D:return"sampler2D";case Ts.BOOL:return"bool"}};function XD(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).weights,n=e.times;if(i.a.defined("weights",t),i.a.defined("times",n),i.a.typeOf.number.greaterThanOrEquals("weights.length",t.length,3),t.length%n.length!==0)throw new a.a("times.length must be a factor of weights.length.");this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(XD.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}}),XD.prototype.findTimeInterval=cu.prototype.findTimeInterval,XD.prototype.wrapTime=cu.prototype.wrapTime,XD.prototype.clampTime=cu.prototype.clampTime,XD.prototype.evaluate=function(e,t){var n=this.weights,i=this.times,r=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),a=(e-i[r])/(i[r+1]-i[r]);Object(o.a)(t)||(t=new Array(this._count));for(var s=0;s<this._count;s++){var c=r*this._count+s;t[s]=n[c]*(1-a)+n[c+this._count]*a}return t};var KD=XD;function QD(e){this._value=void 0,this._hasClone=!1,this._hasEquals=!1,this._definitionChanged=new wn.a,this.setValue(e)}Object.defineProperties(QD.prototype,{isConstant:{value:!0},definitionChanged:{get:function(){return this._definitionChanged}}}),QD.prototype.getValue=function(e,t){return this._hasClone?this._value.clone(t):this._value},QD.prototype.setValue=function(e){var t=this._value;if(t!==e){var n=Object(o.a)(e),i=n&&"function"===typeof e.clone,r=n&&"function"===typeof e.equals;(!r||!e.equals(t))&&(this._hasClone=i,this._hasEquals=r,this._value=i?e.clone(this._value):e,this._definitionChanged.raiseEvent(this))}},QD.prototype.equals=function(e){return this===e||e instanceof QD&&(!this._hasEquals&&this._value===e._value||this._hasEquals&&this._value.equals(e._value))},QD.prototype.valueOf=function(){return this._value},QD.prototype.toString=function(){return String(this._value)};var ZD=QD;function JD(e){return new ZD(e)}var eP=function(e,t,n){return function(e,t,n,i,r){return{configurable:i,get:function(){return this[t]},set:function(i){var a=this[t],s=this[n];Object(o.a)(s)&&(s(),this[n]=void 0),!(void 0!==i)||Object(o.a)(i)&&Object(o.a)(i.getValue)||!Object(o.a)(r)||(i=r(i)),a!==i&&(this[t]=i,this._definitionChanged.raiseEvent(this,e,i,a)),Object(o.a)(i)&&Object(o.a)(i.definitionChanged)&&(this[n]=i.definitionChanged.addEventListener((function(){this._definitionChanged.raiseEvent(this,e,i,i)}),this))}}}(e,"_"+e.toString(),"_"+e.toString()+"Subscription",Object(r.a)(t,!1),Object(r.a)(n,JD))};function tP(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._image=void 0,this._imageSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._alignedAxis=void 0,this._alignedAxisSubscription=void 0,this._sizeInMeters=void 0,this._sizeInMetersSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._imageSubRegion=void 0,this._imageSubRegionSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(tP.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),image:eP("image"),scale:eP("scale"),pixelOffset:eP("pixelOffset"),eyeOffset:eP("eyeOffset"),horizontalOrigin:eP("horizontalOrigin"),verticalOrigin:eP("verticalOrigin"),heightReference:eP("heightReference"),color:eP("color"),rotation:eP("rotation"),alignedAxis:eP("alignedAxis"),sizeInMeters:eP("sizeInMeters"),width:eP("width"),height:eP("height"),scaleByDistance:eP("scaleByDistance"),translucencyByDistance:eP("translucencyByDistance"),pixelOffsetScaleByDistance:eP("pixelOffsetScaleByDistance"),imageSubRegion:eP("imageSubRegion"),distanceDisplayCondition:eP("distanceDisplayCondition"),disableDepthTestDistance:eP("disableDepthTestDistance")}),tP.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this._show,e.image=this._image,e.scale=this._scale,e.pixelOffset=this._pixelOffset,e.eyeOffset=this._eyeOffset,e.horizontalOrigin=this._horizontalOrigin,e.verticalOrigin=this._verticalOrigin,e.heightReference=this._heightReference,e.color=this._color,e.rotation=this._rotation,e.alignedAxis=this._alignedAxis,e.sizeInMeters=this._sizeInMeters,e.width=this._width,e.height=this._height,e.scaleByDistance=this._scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance,e.imageSubRegion=this._imageSubRegion,e.distanceDisplayCondition=this._distanceDisplayCondition,e.disableDepthTestDistance=this._disableDepthTestDistance,e):new tP(this)},tP.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this._show,e.show),this.image=Object(r.a)(this._image,e.image),this.scale=Object(r.a)(this._scale,e.scale),this.pixelOffset=Object(r.a)(this._pixelOffset,e.pixelOffset),this.eyeOffset=Object(r.a)(this._eyeOffset,e.eyeOffset),this.horizontalOrigin=Object(r.a)(this._horizontalOrigin,e.horizontalOrigin),this.verticalOrigin=Object(r.a)(this._verticalOrigin,e.verticalOrigin),this.heightReference=Object(r.a)(this._heightReference,e.heightReference),this.color=Object(r.a)(this._color,e.color),this.rotation=Object(r.a)(this._rotation,e.rotation),this.alignedAxis=Object(r.a)(this._alignedAxis,e.alignedAxis),this.sizeInMeters=Object(r.a)(this._sizeInMeters,e.sizeInMeters),this.width=Object(r.a)(this._width,e.width),this.height=Object(r.a)(this._height,e.height),this.scaleByDistance=Object(r.a)(this._scaleByDistance,e.scaleByDistance),this.translucencyByDistance=Object(r.a)(this._translucencyByDistance,e.translucencyByDistance),this.pixelOffsetScaleByDistance=Object(r.a)(this._pixelOffsetScaleByDistance,e.pixelOffsetScaleByDistance),this.imageSubRegion=Object(r.a)(this._imageSubRegion,e.imageSubRegion),this.distanceDisplayCondition=Object(r.a)(this._distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=Object(r.a)(this._disableDepthTestDistance,e.disableDepthTestDistance)};var nP=tP,iP=Object.freeze({NONE:0,CLAMP_TO_GROUND:1,RELATIVE_TO_GROUND:2}),rP=Object.freeze({CENTER:0,LEFT:1,RIGHT:-1}),oP=Object.freeze({CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1}),aP=Object.freeze({DONE:0,PENDING:1,FAILED:2});function sP(){a.a.throwInstantiationError()}Object.defineProperties(sP.prototype,{isConstant:{get:a.a.throwInstantiationError},definitionChanged:{get:a.a.throwInstantiationError}}),sP.prototype.getValue=a.a.throwInstantiationError,sP.prototype.equals=a.a.throwInstantiationError,sP.equals=function(e,t){return e===t||Object(o.a)(e)&&e.equals(t)},sP.arrayEquals=function(e,t){if(e===t)return!0;if(!Object(o.a)(e)||!Object(o.a)(t)||e.length!==t.length)return!1;for(var n=e.length,i=0;i<n;i++)if(!sP.equals(e[i],t[i]))return!1;return!0},sP.isConstant=function(e){return!Object(o.a)(e)||e.isConstant},sP.getValueOrUndefined=function(e,t,n){return Object(o.a)(e)?e.getValue(t,n):void 0},sP.getValueOrDefault=function(e,t,n,i){return Object(o.a)(e)?Object(r.a)(e.getValue(t,i),n):n},sP.getValueOrClonedDefault=function(e,t,n,i){var r;return Object(o.a)(e)&&(r=e.getValue(t,i)),Object(o.a)(r)||(r=n.clone(r)),r};var cP=sP,lP=Hf.WHITE,uP=O.ZERO,hP=iP.NONE,dP=Mt.ZERO,fP=O.ZERO,pP=rP.CENTER,mP=oP.CENTER,gP=new O,vP=new Hf,_P=new O,bP=new Mt,yP=new JC,wP=new JC,OP=new JC,CP=new bl,EP=new $_;function AP(e){this.entity=e,this.billboard=void 0,this.textureValue=void 0}function xP(e,t){if(!Object(o.a)(e))throw new a.a("entityCluster is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(xP.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new sl,this._onCollectionChanged(t,t.values,[],[])}function TP(e,t,n){Object(o.a)(e)&&(e.billboard=void 0,n.removeBillboard(t))}xP.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");for(var t=this._items.values,n=this._cluster,i=0,r=t.length;i<r;i++){var s,c,l=t[i],u=l.entity,h=u._billboard,d=l.billboard,f=u.isShowing&&u.isAvailable(e)&&cP.getValueOrDefault(h._show,e,!0);if(f&&(c=cP.getValueOrUndefined(u._position,e,gP),s=cP.getValueOrUndefined(h._image,e),f=Object(o.a)(c)&&Object(o.a)(s)),f){cP.isConstant(u._position)||(n._clusterDirty=!0),Object(o.a)(d)||((d=n.getBillboard(u)).id=u,d.image=void 0,l.billboard=d),d.show=f,Object(o.a)(d.image)&&l.textureValue===s||(d.image=s,l.textureValue=s),d.position=c,d.color=cP.getValueOrDefault(h._color,e,lP,vP),d.eyeOffset=cP.getValueOrDefault(h._eyeOffset,e,uP,_P),d.heightReference=cP.getValueOrDefault(h._heightReference,e,hP),d.pixelOffset=cP.getValueOrDefault(h._pixelOffset,e,dP,bP),d.scale=cP.getValueOrDefault(h._scale,e,1),d.rotation=cP.getValueOrDefault(h._rotation,e,0),d.alignedAxis=cP.getValueOrDefault(h._alignedAxis,e,fP),d.horizontalOrigin=cP.getValueOrDefault(h._horizontalOrigin,e,pP),d.verticalOrigin=cP.getValueOrDefault(h._verticalOrigin,e,mP),d.width=cP.getValueOrUndefined(h._width,e),d.height=cP.getValueOrUndefined(h._height,e),d.scaleByDistance=cP.getValueOrUndefined(h._scaleByDistance,e,yP),d.translucencyByDistance=cP.getValueOrUndefined(h._translucencyByDistance,e,wP),d.pixelOffsetScaleByDistance=cP.getValueOrUndefined(h._pixelOffsetScaleByDistance,e,OP),d.sizeInMeters=cP.getValueOrDefault(h._sizeInMeters,e,!1),d.distanceDisplayCondition=cP.getValueOrUndefined(h._distanceDisplayCondition,e,EP),d.disableDepthTestDistance=cP.getValueOrUndefined(h._disableDepthTestDistance,e);var p=cP.getValueOrUndefined(h._imageSubRegion,e,CP);Object(o.a)(p)&&d.setImageSubRegion(d._imageId,p)}else TP(l,u,n)}return!0},xP.prototype.getBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("entity is required.");if(!Object(o.a)(t))throw new a.a("result is required.");var n=this._items.get(e.id);if(!Object(o.a)(n)||!Object(o.a)(n.billboard))return aP.FAILED;var i=n.billboard;if(i.heightReference===iP.NONE)t.center=O.clone(i.position,t.center);else{if(!Object(o.a)(i._clampedPosition))return aP.PENDING;t.center=O.clone(i._clampedPosition,t.center)}return t.radius=0,aP.DONE},xP.prototype.isDestroyed=function(){return!1},xP.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(xP.prototype._onCollectionChanged,this);for(var e=this._entityCollection.values,t=0;t<e.length;t++)this._cluster.removeBillboard(e[t]);return Ks(this)},xP.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s=this._items,c=this._cluster;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._billboard)&&Object(o.a)(a._position)&&s.set(a.id,new AP(a));for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._billboard)&&Object(o.a)(a._position)?s.contains(a.id)||s.set(a.id,new AP(a)):(TP(s.get(a.id),a,c),s.remove(a.id));for(r=n.length-1;r>-1;r--)a=n[r],TP(s.get(a.id),a,c),s.remove(a.id)};var SP=xP,DP={ADD:Ts.FUNC_ADD,SUBTRACT:Ts.FUNC_SUBTRACT,REVERSE_SUBTRACT:Ts.FUNC_REVERSE_SUBTRACT,MIN:Ts.MIN,MAX:Ts.MAX},PP=Object.freeze(DP),IP={ZERO:Ts.ZERO,ONE:Ts.ONE,SOURCE_COLOR:Ts.SRC_COLOR,ONE_MINUS_SOURCE_COLOR:Ts.ONE_MINUS_SRC_COLOR,DESTINATION_COLOR:Ts.DST_COLOR,ONE_MINUS_DESTINATION_COLOR:Ts.ONE_MINUS_DST_COLOR,SOURCE_ALPHA:Ts.SRC_ALPHA,ONE_MINUS_SOURCE_ALPHA:Ts.ONE_MINUS_SRC_ALPHA,DESTINATION_ALPHA:Ts.DST_ALPHA,ONE_MINUS_DESTINATION_ALPHA:Ts.ONE_MINUS_DST_ALPHA,CONSTANT_COLOR:Ts.CONSTANT_COLOR,ONE_MINUS_CONSTANT_COLOR:Ts.ONE_MINUS_CONSTANT_COLOR,CONSTANT_ALPHA:Ts.CONSTANT_ALPHA,ONE_MINUS_CONSTANT_ALPHA:Ts.ONE_MINUS_CONSTANT_ALPHA,SOURCE_ALPHA_SATURATE:Ts.SRC_ALPHA_SATURATE},MP=Object.freeze(IP),RP={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.SOURCE_ALPHA,functionSourceAlpha:MP.ONE,functionDestinationRgb:MP.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:MP.ONE_MINUS_SOURCE_ALPHA}),PRE_MULTIPLIED_ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.ONE,functionSourceAlpha:MP.ONE,functionDestinationRgb:MP.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:MP.ONE_MINUS_SOURCE_ALPHA}),ADDITIVE_BLEND:Object.freeze({enabled:!0,equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.SOURCE_ALPHA,functionSourceAlpha:MP.ONE,functionDestinationRgb:MP.ONE,functionDestinationAlpha:MP.ONE})},LP=Object.freeze(RP),jP={FRONT:Ts.FRONT,BACK:Ts.BACK,FRONT_AND_BACK:Ts.FRONT_AND_BACK},FP=Object.freeze(jP);function NP(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.material=e.material,this.translucent=Object(r.a)(e.translucent,!0),this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=Object(r.a)(e.closed,!1)}Object.defineProperties(NP.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}}}),NP.prototype.getFragmentShaderSource=function(){var e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),Object(o.a)(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join("\n")},NP.prototype.isTranslucent=function(){return Object(o.a)(this.material)&&this.material.isTranslucent()||!Object(o.a)(this.material)&&this.translucent},NP.prototype.getRenderState=function(){var e=this.isTranslucent(),t=Object(Lf.a)(this.renderState,!1);return e?(t.depthMask=!1,t.blending=LP.ALPHA_BLEND):t.depthMask=!0,t},NP.getDefaultRenderState=function(e,t,n){var i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=LP.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:FP.BACK}),Object(o.a)(n)&&(i=Object(Wf.a)(n,i,!0)),i};var zP=NP,kP={_maximumCombinedTextureImageUnits:0,_maximumCubeMapSize:0,_maximumFragmentUniformVectors:0,_maximumTextureImageUnits:0,_maximumRenderbufferSize:0,_maximumTextureSize:0,_maximumVaryingVectors:0,_maximumVertexAttributes:0,_maximumVertexTextureImageUnits:0,_maximumVertexUniformVectors:0,_minimumAliasedLineWidth:0,_maximumAliasedLineWidth:0,_minimumAliasedPointSize:0,_maximumAliasedPointSize:0,_maximumViewportWidth:0,_maximumViewportHeight:0,_maximumTextureFilterAnisotropy:0,_maximumDrawBuffers:0,_maximumColorAttachments:0,_highpFloatSupported:!1,_highpIntSupported:!1};Object.defineProperties(kP,{maximumCombinedTextureImageUnits:{get:function(){return kP._maximumCombinedTextureImageUnits}},maximumCubeMapSize:{get:function(){return kP._maximumCubeMapSize}},maximumFragmentUniformVectors:{get:function(){return kP._maximumFragmentUniformVectors}},maximumTextureImageUnits:{get:function(){return kP._maximumTextureImageUnits}},maximumRenderbufferSize:{get:function(){return kP._maximumRenderbufferSize}},maximumTextureSize:{get:function(){return kP._maximumTextureSize}},maximumVaryingVectors:{get:function(){return kP._maximumVaryingVectors}},maximumVertexAttributes:{get:function(){return kP._maximumVertexAttributes}},maximumVertexTextureImageUnits:{get:function(){return kP._maximumVertexTextureImageUnits}},maximumVertexUniformVectors:{get:function(){return kP._maximumVertexUniformVectors}},minimumAliasedLineWidth:{get:function(){return kP._minimumAliasedLineWidth}},maximumAliasedLineWidth:{get:function(){return kP._maximumAliasedLineWidth}},minimumAliasedPointSize:{get:function(){return kP._minimumAliasedPointSize}},maximumAliasedPointSize:{get:function(){return kP._maximumAliasedPointSize}},maximumViewportWidth:{get:function(){return kP._maximumViewportWidth}},maximumViewportHeight:{get:function(){return kP._maximumViewportHeight}},maximumTextureFilterAnisotropy:{get:function(){return kP._maximumTextureFilterAnisotropy}},maximumDrawBuffers:{get:function(){return kP._maximumDrawBuffers}},maximumColorAttachments:{get:function(){return kP._maximumColorAttachments}},highpFloatSupported:{get:function(){return kP._highpFloatSupported}},highpIntSupported:{get:function(){return kP._highpIntSupported}}});var BP=kP;function HP(e,t,n,i,r,o,a,s,c,l,u){this._context=e,this._texture=t,this._textureTarget=n,this._targetFace=i,this._pixelDatatype=a,this._internalFormat=r,this._pixelFormat=o,this._size=s,this._preMultiplyAlpha=c,this._flipY=l,this._initialized=u}Object.defineProperties(HP.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}}),HP.prototype.copyFrom=function(e,t,n){if(t=Object(r.a)(t,0),n=Object(r.a)(n,0),i.a.defined("source",e),i.a.typeOf.number.greaterThanOrEquals("xOffset",t,0),i.a.typeOf.number.greaterThanOrEquals("yOffset",n,0),t+e.width>this._size)throw new a.a("xOffset + source.width must be less than or equal to width.");if(n+e.height>this._size)throw new a.a("yOffset + source.height must be less than or equal to height.");var s=this._context._gl,c=this._textureTarget,l=this._targetFace;s.activeTexture(s.TEXTURE0),s.bindTexture(c,this._texture);var u=e.width,h=e.height,d=e.arrayBufferView,f=this._size,p=this._pixelFormat,m=this._internalFormat,g=this._pixelDatatype,v=this._preMultiplyAlpha,_=this._flipY,b=4;Object(o.a)(d)&&(b=FC.alignmentInBytes(p,g,u)),s.pixelStorei(s.UNPACK_ALIGNMENT,b);var y=!1;if(!this._initialized){if(0===t&&0===n&&u===f&&h===f)Object(o.a)(d)?(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),_&&(d=FC.flipY(d,p,g,f,f)),s.texImage2D(l,0,m,f,f,0,p,LC.toWebGLConstant(g,this._context),d)):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,v),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,_),s.texImage2D(l,0,m,p,LC.toWebGLConstant(g,this._context),e)),y=!0;else{s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1);var w=FC.createTypedArray(p,g,f,f);s.texImage2D(l,0,m,f,f,0,p,LC.toWebGLConstant(g,this._context),w)}this._initialized=!0}y||(Object(o.a)(d)?(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),_&&(d=FC.flipY(d,p,g,u,h)),s.texSubImage2D(l,0,t,n,u,h,p,LC.toWebGLConstant(g,this._context),d)):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,v),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,_),s.texSubImage2D(l,0,t,n,p,LC.toWebGLConstant(g,this._context),e))),s.bindTexture(c,null)},HP.prototype.copyFromFramebuffer=function(e,t,n,o,s,c){if(e=Object(r.a)(e,0),t=Object(r.a)(t,0),n=Object(r.a)(n,0),o=Object(r.a)(o,0),s=Object(r.a)(s,this._size),c=Object(r.a)(c,this._size),i.a.typeOf.number.greaterThanOrEquals("xOffset",e,0),i.a.typeOf.number.greaterThanOrEquals("yOffset",t,0),i.a.typeOf.number.greaterThanOrEquals("framebufferXOffset",n,0),i.a.typeOf.number.greaterThanOrEquals("framebufferYOffset",o,0),e+s>this._size)throw new a.a("xOffset + source.width must be less than or equal to width.");if(t+c>this._size)throw new a.a("yOffset + source.height must be less than or equal to height.");if(this._pixelDatatype===LC.FLOAT)throw new a.a("Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.");if(this._pixelDatatype===LC.HALF_FLOAT)throw new a.a("Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.");var l=this._context._gl,u=this._textureTarget;l.activeTexture(l.TEXTURE0),l.bindTexture(u,this._texture),l.copyTexSubImage2D(this._targetFace,0,e,t,n,o,s,c),l.bindTexture(u,null),this._initialized=!0};var VP=HP,UP={DONT_CARE:Ts.DONT_CARE,FASTEST:Ts.FASTEST,NICEST:Ts.NICEST,validate:function(e){return e===UP.DONT_CARE||e===UP.FASTEST||e===UP.NICEST}},WP=Object.freeze(UP),GP={NEAREST:Ts.NEAREST,LINEAR:Ts.LINEAR,validate:function(e){return e===GP.NEAREST||e===GP.LINEAR}},qP=Object.freeze(GP),YP={NEAREST:Ts.NEAREST,LINEAR:Ts.LINEAR,NEAREST_MIPMAP_NEAREST:Ts.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:Ts.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:Ts.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:Ts.LINEAR_MIPMAP_LINEAR,validate:function(e){return e===YP.NEAREST||e===YP.LINEAR||e===YP.NEAREST_MIPMAP_NEAREST||e===YP.LINEAR_MIPMAP_NEAREST||e===YP.NEAREST_MIPMAP_LINEAR||e===YP.LINEAR_MIPMAP_LINEAR}},$P=Object.freeze(YP),XP={CLAMP_TO_EDGE:Ts.CLAMP_TO_EDGE,REPEAT:Ts.REPEAT,MIRRORED_REPEAT:Ts.MIRRORED_REPEAT,validate:function(e){return e===XP.CLAMP_TO_EDGE||e===XP.REPEAT||e===XP.MIRRORED_REPEAT}},KP=Object.freeze(XP);function QP(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.wrapS,KP.CLAMP_TO_EDGE),n=Object(r.a)(e.wrapT,KP.CLAMP_TO_EDGE),s=Object(r.a)(e.minificationFilter,$P.LINEAR),c=Object(r.a)(e.magnificationFilter,qP.LINEAR),l=Object(o.a)(e.maximumAnisotropy)?e.maximumAnisotropy:1;if(!KP.validate(t))throw new a.a("Invalid sampler.wrapS.");if(!KP.validate(n))throw new a.a("Invalid sampler.wrapT.");if(!$P.validate(s))throw new a.a("Invalid sampler.minificationFilter.");if(!qP.validate(c))throw new a.a("Invalid sampler.magnificationFilter.");i.a.typeOf.number.greaterThanOrEquals("maximumAnisotropy",l,1),this._wrapS=t,this._wrapT=n,this._minificationFilter=s,this._magnificationFilter=c,this._maximumAnisotropy=l}Object.defineProperties(QP.prototype,{wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}}),QP.equals=function(e,t){return e===t||Object(o.a)(e)&&Object(o.a)(t)&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy},QP.NEAREST=Object.freeze(new QP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.NEAREST,magnificationFilter:qP.NEAREST}));var ZP=QP;function JP(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context);var t,n,s=e.context,c=e.source;if(Object(o.a)(c)){var l=[c.positiveX,c.negativeX,c.positiveY,c.negativeY,c.positiveZ,c.negativeZ];if(!l[0]||!l[1]||!l[2]||!l[3]||!l[4]||!l[5])throw new a.a("options.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.");t=l[0].width,n=l[0].height;for(var u=1;u<6;++u)if(Number(l[u].width)!==t||Number(l[u].height)!==n)throw new a.a("Each face in options.source must have the same width and height.")}else t=e.width,n=e.height;var h=t,d=Object(r.a)(e.pixelDatatype,LC.UNSIGNED_BYTE),f=Object(r.a)(e.pixelFormat,FC.RGBA),p=FC.toInternalFormat(f,d,s);if(!Object(o.a)(t)||!Object(o.a)(n))throw new a.a("options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.");if(t!==n)throw new a.a("Width must equal height.");if(h<=0)throw new a.a("Width and height must be greater than zero.");if(h>BP.maximumCubeMapSize)throw new a.a("Width and height must be less than or equal to the maximum cube map size ("+BP.maximumCubeMapSize+"). Check maximumCubeMapSize.");if(!FC.validate(f))throw new a.a("Invalid options.pixelFormat.");if(FC.isDepthFormat(f))throw new a.a("options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.");if(!LC.validate(d))throw new a.a("Invalid options.pixelDatatype.");if(d===LC.FLOAT&&!s.floatingPointTexture)throw new a.a("When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.");if(d===LC.HALF_FLOAT&&!s.halfFloatingPointTexture)throw new a.a("When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension.");var m=6*FC.textureSizeInBytes(f,d,h,h),g=e.preMultiplyAlpha||f===FC.RGB||f===FC.LUMINANCE,v=Object(r.a)(e.flipY,!0),_=s._gl,b=_.TEXTURE_CUBE_MAP,y=_.createTexture();function w(e,n,i,r){var a=n.arrayBufferView;Object(o.a)(a)||(a=n.bufferView);var c=4;Object(o.a)(a)&&(c=FC.alignmentInBytes(f,d,t)),_.pixelStorei(_.UNPACK_ALIGNMENT,c),Object(o.a)(a)?(_.pixelStorei(_.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),_.pixelStorei(_.UNPACK_FLIP_Y_WEBGL,!1),r&&(a=FC.flipY(a,f,d,h,h)),_.texImage2D(e,0,p,h,h,0,f,LC.toWebGLConstant(d,s),a)):(_.pixelStorei(_.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i),_.pixelStorei(_.UNPACK_FLIP_Y_WEBGL,r),_.texImage2D(e,0,p,f,LC.toWebGLConstant(d,s),n))}_.activeTexture(_.TEXTURE0),_.bindTexture(b,y),Object(o.a)(c)?(w(_.TEXTURE_CUBE_MAP_POSITIVE_X,c.positiveX,g,v),w(_.TEXTURE_CUBE_MAP_NEGATIVE_X,c.negativeX,g,v),w(_.TEXTURE_CUBE_MAP_POSITIVE_Y,c.positiveY,g,v),w(_.TEXTURE_CUBE_MAP_NEGATIVE_Y,c.negativeY,g,v),w(_.TEXTURE_CUBE_MAP_POSITIVE_Z,c.positiveZ,g,v),w(_.TEXTURE_CUBE_MAP_NEGATIVE_Z,c.negativeZ,g,v)):(_.texImage2D(_.TEXTURE_CUBE_MAP_POSITIVE_X,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null),_.texImage2D(_.TEXTURE_CUBE_MAP_NEGATIVE_X,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null),_.texImage2D(_.TEXTURE_CUBE_MAP_POSITIVE_Y,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null),_.texImage2D(_.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null),_.texImage2D(_.TEXTURE_CUBE_MAP_POSITIVE_Z,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null),_.texImage2D(_.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,p,h,h,0,f,LC.toWebGLConstant(d,s),null)),_.bindTexture(b,null),this._context=s,this._textureFilterAnisotropic=s._textureFilterAnisotropic,this._textureTarget=b,this._texture=y,this._pixelFormat=f,this._pixelDatatype=d,this._size=h,this._hasMipmap=!1,this._sizeInBytes=m,this._preMultiplyAlpha=g,this._flipY=v,this._sampler=void 0;var O=Object(o.a)(c);this._positiveX=new VP(s,y,b,_.TEXTURE_CUBE_MAP_POSITIVE_X,p,f,d,h,g,v,O),this._negativeX=new VP(s,y,b,_.TEXTURE_CUBE_MAP_NEGATIVE_X,p,f,d,h,g,v,O),this._positiveY=new VP(s,y,b,_.TEXTURE_CUBE_MAP_POSITIVE_Y,p,f,d,h,g,v,O),this._negativeY=new VP(s,y,b,_.TEXTURE_CUBE_MAP_NEGATIVE_Y,p,f,d,h,g,v,O),this._positiveZ=new VP(s,y,b,_.TEXTURE_CUBE_MAP_POSITIVE_Z,p,f,d,h,g,v,O),this._negativeZ=new VP(s,y,b,_.TEXTURE_CUBE_MAP_NEGATIVE_Z,p,f,d,h,g,v,O),this.sampler=Object(o.a)(e.sampler)?e.sampler:new ZP}Object.defineProperties(JP.prototype,{positiveX:{get:function(){return this._positiveX}},negativeX:{get:function(){return this._negativeX}},positiveY:{get:function(){return this._positiveY}},negativeY:{get:function(){return this._negativeY}},positiveZ:{get:function(){return this._positiveZ}},negativeZ:{get:function(){return this._negativeZ}},sampler:{get:function(){return this._sampler},set:function(e){var t=e.minificationFilter,n=e.magnificationFilter,i=t===$P.NEAREST_MIPMAP_NEAREST||t===$P.NEAREST_MIPMAP_LINEAR||t===$P.LINEAR_MIPMAP_NEAREST||t===$P.LINEAR_MIPMAP_LINEAR,r=this._context,a=this._pixelDatatype;(a===LC.FLOAT&&!r.textureFloatLinear||a===LC.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(t=i?$P.NEAREST_MIPMAP_NEAREST:$P.NEAREST,n=qP.NEAREST);var s=r._gl,c=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(c,this._texture),s.texParameteri(c,s.TEXTURE_MIN_FILTER,t),s.texParameteri(c,s.TEXTURE_MAG_FILTER,n),s.texParameteri(c,s.TEXTURE_WRAP_S,e.wrapS),s.texParameteri(c,s.TEXTURE_WRAP_T,e.wrapT),Object(o.a)(this._textureFilterAnisotropic)&&s.texParameteri(c,this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,e.maximumAnisotropy),s.bindTexture(c,null),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},width:{get:function(){return this._size}},height:{get:function(){return this._size}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(4*this._sizeInBytes/3):this._sizeInBytes}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},_target:{get:function(){return this._textureTarget}}}),JP.prototype.generateMipmap=function(e){if(e=Object(r.a)(e,WP.DONT_CARE),this._size>1&&!d.isPowerOfTwo(this._size))throw new a.a("width and height must be a power of two to call generateMipmap().");if(!WP.validate(e))throw new a.a("hint is invalid.");this._hasMipmap=!0;var t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)},JP.prototype.isDestroyed=function(){return!1},JP.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),this._positiveX=Ks(this._positiveX),this._negativeX=Ks(this._negativeX),this._positiveY=Ks(this._positiveY),this._negativeY=Ks(this._negativeY),this._positiveZ=Ks(this._positiveZ),this._negativeZ=Ks(this._negativeZ),Ks(this)};var eI=JP;function tI(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context);var t=e.context,n=e.width,s=e.height,c=e.source;Object(o.a)(c)&&(Object(o.a)(n)||(n=Object(r.a)(c.videoWidth,c.width)),Object(o.a)(s)||(s=Object(r.a)(c.videoHeight,c.height)));var l=Object(r.a)(e.pixelFormat,FC.RGBA),u=Object(r.a)(e.pixelDatatype,LC.UNSIGNED_BYTE),h=FC.toInternalFormat(l,u,t),d=FC.isCompressedFormat(h);if(!Object(o.a)(n)||!Object(o.a)(s))throw new a.a("options requires a source field to create an initialized texture or width and height fields to create a blank texture.");if(i.a.typeOf.number.greaterThan("width",n,0),n>BP.maximumTextureSize)throw new a.a("Width must be less than or equal to the maximum texture size ("+BP.maximumTextureSize+"). Check maximumTextureSize.");if(i.a.typeOf.number.greaterThan("height",s,0),s>BP.maximumTextureSize)throw new a.a("Height must be less than or equal to the maximum texture size ("+BP.maximumTextureSize+"). Check maximumTextureSize.");if(!FC.validate(l))throw new a.a("Invalid options.pixelFormat.");if(!d&&!LC.validate(u))throw new a.a("Invalid options.pixelDatatype.");if(l===FC.DEPTH_COMPONENT&&u!==LC.UNSIGNED_SHORT&&u!==LC.UNSIGNED_INT)throw new a.a("When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.");if(l===FC.DEPTH_STENCIL&&u!==LC.UNSIGNED_INT_24_8)throw new a.a("When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.");if(u===LC.FLOAT&&!t.floatingPointTexture)throw new a.a("When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture.");if(u===LC.HALF_FLOAT&&!t.halfFloatingPointTexture)throw new a.a("When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.");if(FC.isDepthFormat(l)){if(Object(o.a)(c))throw new a.a("When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.");if(!t.depthTexture)throw new a.a("When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check context.depthTexture.")}if(d){if(!Object(o.a)(c)||!Object(o.a)(c.arrayBufferView))throw new a.a("When options.pixelFormat is compressed, options.source.arrayBufferView must be defined.");if(FC.isDXTFormat(h)&&!t.s3tc)throw new a.a("When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_texture_compression_s3tc extension. Check context.s3tc.");if(FC.isPVRTCFormat(h)&&!t.pvrtc)throw new a.a("When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_texture_compression_pvrtc extension. Check context.pvrtc.");if(FC.isETC1Format(h)&&!t.etc1)throw new a.a("When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_texture_compression_etc1 extension. Check context.etc1.");if(FC.compressedTextureSizeInBytes(h,n,s)!==c.arrayBufferView.byteLength)throw new a.a("The byte length of the array buffer is invalid for the compressed texture with the given width and height.")}var f=e.preMultiplyAlpha||l===FC.RGB||l===FC.LUMINANCE,p=Object(r.a)(e.flipY,!0),m=!0,g=t._gl,v=g.TEXTURE_2D,_=g.createTexture();g.activeTexture(g.TEXTURE0),g.bindTexture(v,_);var b,y=4;if(Object(o.a)(c)&&Object(o.a)(c.arrayBufferView)&&!d&&(y=FC.alignmentInBytes(l,u,n)),g.pixelStorei(g.UNPACK_ALIGNMENT,y),Object(o.a)(c))if(Object(o.a)(c.arrayBufferView)){g.pixelStorei(g.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,!1);var w=c.arrayBufferView;if(d)g.compressedTexImage2D(v,0,h,n,s,0,w);else if(p&&(w=FC.flipY(w,l,u,n,s)),g.texImage2D(v,0,h,n,s,0,l,LC.toWebGLConstant(u,t),w),Object(o.a)(c.mipLevels))for(var O=n,C=s,E=0;E<c.mipLevels.length;++E)(O=0|Math.floor(O/2))<1&&(O=1),(C=0|Math.floor(C/2))<1&&(C=1),g.texImage2D(v,E+1,h,O,C,0,l,LC.toWebGLConstant(u,t),c.mipLevels[E])}else Object(o.a)(c.framebuffer)?(g.pixelStorei(g.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,!1),c.framebuffer!==t.defaultFramebuffer&&c.framebuffer._bind(),g.copyTexImage2D(v,0,h,c.xOffset,c.yOffset,n,s,0),c.framebuffer!==t.defaultFramebuffer&&c.framebuffer._unBind()):(g.pixelStorei(g.UNPACK_PREMULTIPLY_ALPHA_WEBGL,f),g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,p),g.texImage2D(v,0,h,l,LC.toWebGLConstant(u,t),c));else g.texImage2D(v,0,h,n,s,0,l,LC.toWebGLConstant(u,t),null),m=!1;g.bindTexture(v,null),b=d?FC.compressedTextureSizeInBytes(l,n,s):FC.textureSizeInBytes(l,u,n,s),this._id=l_(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=v,this._texture=_,this._internalFormat=h,this._pixelFormat=l,this._pixelDatatype=u,this._width=n,this._height=s,this._dimensions=new Mt(n,s),this._hasMipmap=!1,this._sizeInBytes=b,this._preMultiplyAlpha=f,this._flipY=p,this._initialized=m,this._sampler=void 0,this.sampler=Object(o.a)(e.sampler)?e.sampler:new ZP}tI.create=function(e){return new tI(e)},tI.fromFramebuffer=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context);var t=e.context,n=t._gl,s=Object(r.a)(e.pixelFormat,FC.RGB),c=Object(r.a)(e.framebufferXOffset,0),l=Object(r.a)(e.framebufferYOffset,0),u=Object(r.a)(e.width,n.drawingBufferWidth),h=Object(r.a)(e.height,n.drawingBufferHeight),d=e.framebuffer;if(!FC.validate(s))throw new a.a("Invalid pixelFormat.");if(FC.isDepthFormat(s)||FC.isCompressedFormat(s))throw new a.a("pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.");if(i.a.defined("options.context",e.context),i.a.typeOf.number.greaterThanOrEquals("framebufferXOffset",c,0),i.a.typeOf.number.greaterThanOrEquals("framebufferYOffset",l,0),c+u>n.drawingBufferWidth)throw new a.a("framebufferXOffset + width must be less than or equal to drawingBufferWidth");if(l+h>n.drawingBufferHeight)throw new a.a("framebufferYOffset + height must be less than or equal to drawingBufferHeight.");return new tI({context:t,width:u,height:h,pixelFormat:s,source:{framebuffer:Object(o.a)(d)?d:t.defaultFramebuffer,xOffset:c,yOffset:l,width:u,height:h}})},Object.defineProperties(tI.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){var t=e.minificationFilter,n=e.magnificationFilter,i=this._context,r=this._pixelFormat,a=this._pixelDatatype,s=t===$P.NEAREST_MIPMAP_NEAREST||t===$P.NEAREST_MIPMAP_LINEAR||t===$P.LINEAR_MIPMAP_NEAREST||t===$P.LINEAR_MIPMAP_LINEAR;(a===LC.FLOAT&&!i.textureFloatLinear||a===LC.HALF_FLOAT&&!i.textureHalfFloatLinear)&&(t=s?$P.NEAREST_MIPMAP_NEAREST:$P.NEAREST,n=qP.NEAREST),i.webgl2&&FC.isDepthFormat(r)&&(t=$P.NEAREST,n=qP.NEAREST);var c=i._gl,l=this._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(l,this._texture),c.texParameteri(l,c.TEXTURE_MIN_FILTER,t),c.texParameteri(l,c.TEXTURE_MAG_FILTER,n),c.texParameteri(l,c.TEXTURE_WRAP_S,e.wrapS),c.texParameteri(l,c.TEXTURE_WRAP_T,e.wrapT),Object(o.a)(this._textureFilterAnisotropic)&&c.texParameteri(l,this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,e.maximumAnisotropy),c.bindTexture(l,null),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(4*this._sizeInBytes/3):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}}),tI.prototype.copyFrom=function(e,t,n){if(t=Object(r.a)(t,0),n=Object(r.a)(n,0),i.a.defined("source",e),FC.isDepthFormat(this._pixelFormat))throw new a.a("Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(FC.isCompressedFormat(this._pixelFormat))throw new a.a("Cannot call copyFrom with a compressed texture pixel format.");i.a.typeOf.number.greaterThanOrEquals("xOffset",t,0),i.a.typeOf.number.greaterThanOrEquals("yOffset",n,0),i.a.typeOf.number.lessThanOrEquals("xOffset + source.width",t+e.width,this._width),i.a.typeOf.number.lessThanOrEquals("yOffset + source.height",n+e.height,this._height);var s=this._context,c=s._gl,l=this._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(l,this._texture);var u=e.width,h=e.height,d=e.arrayBufferView,f=this._width,p=this._height,m=this._internalFormat,g=this._pixelFormat,v=this._pixelDatatype,_=this._preMultiplyAlpha,b=this._flipY,y=4;Object(o.a)(d)&&(y=FC.alignmentInBytes(g,v,u)),c.pixelStorei(c.UNPACK_ALIGNMENT,y);var w=!1;if(!this._initialized){if(0===t&&0===n&&u===f&&h===p)Object(o.a)(d)?(c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,!1),b&&(d=FC.flipY(d,g,v,f,p)),c.texImage2D(l,0,m,f,p,0,g,LC.toWebGLConstant(v,s),d)):(c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,_),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,b),c.texImage2D(l,0,m,g,LC.toWebGLConstant(v,s),e)),w=!0;else{c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,!1);var O=FC.createTypedArray(g,v,f,p);c.texImage2D(l,0,m,f,p,0,g,LC.toWebGLConstant(v,s),O)}this._initialized=!0}w||(Object(o.a)(d)?(c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,!1),b&&(d=FC.flipY(d,g,v,u,h)),c.texSubImage2D(l,0,t,n,u,h,g,LC.toWebGLConstant(v,s),d)):(c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,_),c.pixelStorei(c.UNPACK_FLIP_Y_WEBGL,b),c.texSubImage2D(l,0,t,n,g,LC.toWebGLConstant(v,s),e))),c.bindTexture(l,null)},tI.prototype.copyFromFramebuffer=function(e,t,n,o,s,c){if(e=Object(r.a)(e,0),t=Object(r.a)(t,0),n=Object(r.a)(n,0),o=Object(r.a)(o,0),s=Object(r.a)(s,this._width),c=Object(r.a)(c,this._height),FC.isDepthFormat(this._pixelFormat))throw new a.a("Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(this._pixelDatatype===LC.FLOAT)throw new a.a("Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.");if(this._pixelDatatype===LC.HALF_FLOAT)throw new a.a("Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.");if(FC.isCompressedFormat(this._pixelFormat))throw new a.a("Cannot call copyFrom with a compressed texture pixel format.");i.a.typeOf.number.greaterThanOrEquals("xOffset",e,0),i.a.typeOf.number.greaterThanOrEquals("yOffset",t,0),i.a.typeOf.number.greaterThanOrEquals("framebufferXOffset",n,0),i.a.typeOf.number.greaterThanOrEquals("framebufferYOffset",o,0),i.a.typeOf.number.lessThanOrEquals("xOffset + width",e+s,this._width),i.a.typeOf.number.lessThanOrEquals("yOffset + height",t+c,this._height);var l=this._context._gl,u=this._textureTarget;l.activeTexture(l.TEXTURE0),l.bindTexture(u,this._texture),l.copyTexSubImage2D(u,0,e,t,n,o,s,c),l.bindTexture(u,null),this._initialized=!0},tI.prototype.generateMipmap=function(e){if(e=Object(r.a)(e,WP.DONT_CARE),FC.isDepthFormat(this._pixelFormat))throw new a.a("Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(FC.isCompressedFormat(this._pixelFormat))throw new a.a("Cannot call generateMipmap with a compressed pixel format.");if(this._width>1&&!d.isPowerOfTwo(this._width))throw new a.a("width must be a power of two to call generateMipmap().");if(this._height>1&&!d.isPowerOfTwo(this._height))throw new a.a("height must be a power of two to call generateMipmap().");if(!WP.validate(e))throw new a.a("hint is invalid.");this._hasMipmap=!0;var t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)},tI.prototype.isDestroyed=function(){return!1},tI.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),Ks(this)};var nI=tI;function iI(e){this.type=void 0,this.shaderSource=void 0,this.materials=void 0,this.uniforms=void 0,this._uniforms=void 0,this.translucent=void 0,this._minificationFilter=Object(r.a)(e.minificationFilter,$P.LINEAR),this._magnificationFilter=Object(r.a)(e.magnificationFilter,qP.LINEAR),this._strict=void 0,this._template=void 0,this._count=void 0,this._texturePaths={},this._loadedImages=[],this._loadedCubeMaps=[],this._textures={},this._updateFunctions=[],this._defaultTexture=void 0,function(e,t){var n;e=Object(r.a)(e,r.a.EMPTY_OBJECT),t._strict=Object(r.a)(e.strict,!1),t._count=Object(r.a)(e.count,0),t._template=Object(Lf.a)(Object(r.a)(e.fabric,r.a.EMPTY_OBJECT)),t._template.uniforms=Object(Lf.a)(Object(r.a)(t._template.uniforms,r.a.EMPTY_OBJECT)),t._template.materials=Object(Lf.a)(Object(r.a)(t._template.materials,r.a.EMPTY_OBJECT)),t.type=Object(o.a)(t._template.type)?t._template.type:l_(),t.shaderSource="",t.materials={},t.uniforms={},t._uniforms={},t._translucentFunctions=[];var i=iI._materialCache.getMaterial(t.type);if(Object(o.a)(i)){var s=Object(Lf.a)(i.fabric,!0);t._template=Object(Wf.a)(t._template,s,!0),n=i.translucent}(function(e){var t=e._template,n=t.uniforms,i=t.materials,r=t.components;if(Object(o.a)(r)&&Object(o.a)(t.source))throw new a.a("fabric: cannot have source and components in the same template.");rI(t,sI,oI,!0),rI(r,cI,oI,!0);var s=[];for(var c in i)i.hasOwnProperty(c)&&s.push(c);rI(n,s,aI,!1)})(t),Object(o.a)(i)||iI._materialCache.addMaterial(t.type,t);(function(e){var t=e._template.components,n=e._template.source;if(Object(o.a)(n))e.shaderSource+=n+"\n";else{if(e.shaderSource+="czm_material czm_getMaterial(czm_materialInput materialInput)\n{\n",e.shaderSource+="czm_material material = czm_getDefaultMaterial(materialInput);\n",Object(o.a)(t)){var i=Object.keys(e._template.materials).length>0;for(var r in t)if(t.hasOwnProperty(r))if("diffuse"===r||"emission"===r){var a=i&&lI(t[r],e)?t[r]:"czm_gammaCorrect("+t[r]+")";e.shaderSource+="material."+r+" = "+a+"; \n"}else e.shaderSource+="alpha"===r?"material.alpha = "+t.alpha+"; \n":"material."+r+" = "+t[r]+";\n"}e.shaderSource+="return material;\n}\n"}})(t),function(e){var t=e._template.uniforms;for(var n in t)t.hasOwnProperty(n)&&fI(e,n)}(t),function(e){var t=e._strict,n=e._template.materials;for(var i in n)if(n.hasOwnProperty(i)){var r=new iI({strict:t,fabric:n[i],count:e._count});e._count=r._count,e._uniforms=Object(Wf.a)(e._uniforms,r._uniforms,!0),e.materials[i]=r,e._translucentFunctions=e._translucentFunctions.concat(r._translucentFunctions);var o="czm_getMaterial_"+e._count++;if(pI(r,"czm_getMaterial",o),e.shaderSource=r.shaderSource+e.shaderSource,0===pI(e,i,o+"(materialInput)")&&t)throw new a.a("strict: shader source does not use material '"+i+"'.")}}(t);var c=0===t._translucentFunctions.length||void 0;if(n=Object(r.a)(n,c),n=Object(r.a)(e.translucent,n),Object(o.a)(n))if("function"===typeof n){t._translucentFunctions.push((function(){return n(t)}))}else t._translucentFunctions.push(n)}(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1}}),Object(o.a)(iI._uniformList[this.type])||(iI._uniformList[this.type]=Object.keys(this._uniforms))}function rI(e,t,n,i){if(Object(o.a)(e))for(var r in e)if(e.hasOwnProperty(r)){var a=-1!==t.indexOf(r);(i&&!a||!i&&a)&&n(r,t)}}function oI(e,t){for(var n="fabric: property name '"+e+"' is not valid. It should be ",i=0;i<t.length;i++){var r="'"+t[i]+"'";n+=i===t.length-1?"or "+r+".":r+", "}throw new a.a(n)}function aI(e,t){var n="fabric: uniforms and materials cannot share the same property '"+e+"'";throw new a.a(n)}iI._uniformList={},iI.fromType=function(e,t){if(!Object(o.a)(iI._materialCache.getMaterial(e)))throw new a.a("material with type '"+e+"' does not exist.");var n=new iI({fabric:{type:e}});if(Object(o.a)(t))for(var i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n},iI.prototype.isTranslucent=function(){if(Object(o.a)(this.translucent))return"function"===typeof this.translucent?this.translucent():this.translucent;for(var e=!0,t=this._translucentFunctions,n=t.length,i=0;i<n;++i){var r=t[i];if(!(e="function"===typeof r?e&&r():e&&r))break}return e},iI.prototype.update=function(e){var t,n,i=this._loadedImages,r=i.length;for(t=0;t<r;++t){var a=i[t];n=a.id;var s,c=a.image,l=new ZP({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter});s=Object(o.a)(c.internalFormat)?new nI({context:e,pixelFormat:c.internalFormat,width:c.width,height:c.height,source:{arrayBufferView:c.bufferView},sampler:l}):new nI({context:e,source:c,sampler:l}),this._textures[n]=s;var u=n+"Dimensions";if(this.uniforms.hasOwnProperty(u)){var h=this.uniforms[u];h.x=s._width,h.y=s._height}}i.length=0;var d=this._loadedCubeMaps;for(r=d.length,t=0;t<r;++t){var f=d[t];n=f.id;var p=f.images,m=new eI({context:e,source:{positiveX:p[0],negativeX:p[1],positiveY:p[2],negativeY:p[3],positiveZ:p[4],negativeZ:p[5]},sampler:new ZP({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter})});this._textures[n]=m}d.length=0;var g=this._updateFunctions;for(r=g.length,t=0;t<r;++t)g[t](this,e);var v=this.materials;for(var _ in v)v.hasOwnProperty(_)&&v[_].update(e)},iI.prototype.isDestroyed=function(){return!1},iI.prototype.destroy=function(){var e=this._textures;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n!==this._defaultTexture&&n.destroy()}var i=this.materials;for(var r in i)i.hasOwnProperty(r)&&i[r].destroy();return Ks(this)};var sI=["type","materials","uniforms","components","source"],cI=["diffuse","specular","shininess","normal","emission","alpha"];function lI(e,t){var n=t._template.materials;for(var i in n)if(n.hasOwnProperty(i)&&e.indexOf(i)>-1)return!0;return!1}var uI={mat2:El,mat3:oe,mat4:Ae},hI=/\.ktx$/i,dI=/\.crn$/i;function fI(e,t){var n=e._strict,i=e._template.uniforms,r=i[t],s=function(e){var t=e.type;if(!Object(o.a)(t)){var n=typeof e;if("number"===n)t="float";else if("boolean"===n)t="bool";else if("string"===n||e instanceof _t.a||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement)t=/^([rgba]){1,4}$/i.test(e)?"channels":e===iI.DefaultCubeMapId?"samplerCube":"sampler2D";else if("object"===n)if(Array.isArray(e))4!==e.length&&9!==e.length&&16!==e.length||(t="mat"+Math.sqrt(e.length));else{var i=0;for(var r in e)e.hasOwnProperty(r)&&(i+=1);i>=2&&i<=4?t="vec"+i:6===i&&(t="samplerCube")}}return t}(r);if(!Object(o.a)(s))throw new a.a("fabric: uniform '"+t+"' has invalid type.");if("channels"===s){if(0===pI(e,t,r,!1)&&n)throw new a.a("strict: shader source does not use channels '"+t+"'.")}else{if("sampler2D"===s){var c=t+"Dimensions";(function(e,t,n){return pI(e,t,t,n)})(e,c)>0&&(i[c]={type:"ivec3",x:1,y:1},fI(e,c))}if(!new RegExp("uniform\\s+"+s+"\\s+"+t+"\\s*;").test(e.shaderSource)){var l="uniform "+s+" "+t+";";e.shaderSource=l+e.shaderSource}var u=t+"_"+e._count++;if(1===pI(e,t,u)&&n)throw new a.a("strict: shader source does not use uniform '"+t+"'.");if(e.uniforms[t]=r,"sampler2D"===s)e._uniforms[u]=function(){return e._textures[t]},e._updateFunctions.push(function(e){var t;return function(n,i){var r=n.uniforms,a=r[e],s=t!==a;t=a;var c,l,u=n._textures[e];if(a instanceof HTMLVideoElement)if(a.readyState>=2){if(s&&Object(o.a)(u)&&(u!==i.defaultTexture&&u.destroy(),u=void 0),!Object(o.a)(u)||u===i.defaultTexture){var h=new ZP({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});return u=new nI({context:i,source:a,sampler:h}),void(n._textures[e]=u)}u.copyFrom(a)}else Object(o.a)(u)||(n._textures[e]=i.defaultTexture);else{if(a instanceof nI&&a!==u){n._texturePaths[e]=void 0;var d=n._textures[e];return d!==n._defaultTexture&&d.destroy(),n._textures[e]=a,c=e+"Dimensions",void(r.hasOwnProperty(c)&&((l=r[c]).x=a._width,l.y=a._height))}if(Object(o.a)(u)||(n._texturePaths[e]=void 0,Object(o.a)(n._defaultTexture)||(n._defaultTexture=i.defaultTexture),u=n._textures[e]=n._defaultTexture,c=e+"Dimensions",r.hasOwnProperty(c)&&((l=r[c]).x=u._width,l.y=u._height)),a!==iI.DefaultImageId){var f=a instanceof _t.a;if(!Object(o.a)(n._texturePaths[e])||f&&a.url!==n._texturePaths[e].url||!f&&a!==n._texturePaths[e]){if("string"===typeof a||f){var p,m=f?a:_t.a.createIfNeeded(a);p=hI.test(m.url)?kC(m):dI.test(m.url)?IC(m):m.fetchImage(),Object(Yt.a)(p,(function(t){n._loadedImages.push({id:e,image:t})}))}else(a instanceof HTMLCanvasElement||a instanceof HTMLImageElement)&&n._loadedImages.push({id:e,image:a});n._texturePaths[e]=a}}}}}(t));else if("samplerCube"===s)e._uniforms[u]=function(){return e._textures[t]},e._updateFunctions.push(function(e){return function(t,n){var i=t.uniforms[e];if(i instanceof eI){var r=t._textures[e];return r!==t._defaultTexture&&r.destroy(),t._texturePaths[e]=void 0,void(t._textures[e]=i)}if(Object(o.a)(t._textures[e])||(t._texturePaths[e]=void 0,t._textures[e]=n.defaultCubeMap),i!==iI.DefaultCubeMapId){var a=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(a!==t._texturePaths[e]){var s=[_t.a.createIfNeeded(i.positiveX).fetchImage(),_t.a.createIfNeeded(i.negativeX).fetchImage(),_t.a.createIfNeeded(i.positiveY).fetchImage(),_t.a.createIfNeeded(i.negativeY).fetchImage(),_t.a.createIfNeeded(i.positiveZ).fetchImage(),_t.a.createIfNeeded(i.negativeZ).fetchImage()];Yt.a.all(s).then((function(n){t._loadedCubeMaps.push({id:e,images:n})})),t._texturePaths[e]=a}}}}(t));else if(-1!==s.indexOf("mat")){var h=new uI[s];e._uniforms[u]=function(){return uI[s].fromColumnMajorArray(e.uniforms[t],h)}}else e._uniforms[u]=function(){return e.uniforms[t]}}}function pI(e,t,n,i){i=Object(r.a)(i,!0);var o=0,a=new RegExp("([\\w"+(i?".":"")+"])?"+t+"([\\w])?","g");return e.shaderSource=e.shaderSource.replace(a,(function(e,t,i){return t||i?e:(o+=1,n)})),o}iI._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}},iI.DefaultImageId="czm_defaultImage",iI.DefaultCubeMapId="czm_defaultCubeMap",iI.ColorType="Color",iI._materialCache.addMaterial(iI.ColorType,{fabric:{type:iI.ColorType,uniforms:{color:new Hf(1,0,0,.5)},components:{diffuse:"color.rgb",alpha:"color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}}),iI.ImageType="Image",iI._materialCache.addMaterial(iI.ImageType,{fabric:{type:iI.ImageType,uniforms:{image:iI.DefaultImageId,repeat:new Mt(1,1),color:new Hf(1,1,1,1)},components:{diffuse:"texture2D(image, fract(repeat * materialInput.st)).rgb * color.rgb",alpha:"texture2D(image, fract(repeat * materialInput.st)).a * color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}}),iI.DiffuseMapType="DiffuseMap",iI._materialCache.addMaterial(iI.DiffuseMapType,{fabric:{type:iI.DiffuseMapType,uniforms:{image:iI.DefaultImageId,channels:"rgb",repeat:new Mt(1,1)},components:{diffuse:"texture2D(image, fract(repeat * materialInput.st)).channels"}},translucent:!1}),iI.AlphaMapType="AlphaMap",iI._materialCache.addMaterial(iI.AlphaMapType,{fabric:{type:iI.AlphaMapType,uniforms:{image:iI.DefaultImageId,channel:"a",repeat:new Mt(1,1)},components:{alpha:"texture2D(image, fract(repeat * materialInput.st)).channel"}},translucent:!0}),iI.SpecularMapType="SpecularMap",iI._materialCache.addMaterial(iI.SpecularMapType,{fabric:{type:iI.SpecularMapType,uniforms:{image:iI.DefaultImageId,channel:"r",repeat:new Mt(1,1)},components:{specular:"texture2D(image, fract(repeat * materialInput.st)).channel"}},translucent:!1}),iI.EmissionMapType="EmissionMap",iI._materialCache.addMaterial(iI.EmissionMapType,{fabric:{type:iI.EmissionMapType,uniforms:{image:iI.DefaultImageId,channels:"rgb",repeat:new Mt(1,1)},components:{emission:"texture2D(image, fract(repeat * materialInput.st)).channels"}},translucent:!1}),iI.BumpMapType="BumpMap",iI._materialCache.addMaterial(iI.BumpMapType,{fabric:{type:iI.BumpMapType,uniforms:{image:iI.DefaultImageId,channel:"r",strength:.8,repeat:new Mt(1,1)},source:"uniform sampler2D image;\nuniform float strength;\nuniform vec2 repeat;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n\n vec2 centerPixel = fract(repeat * st);\n float centerBump = texture2D(image, centerPixel).channel;\n\n float imageWidth = float(imageDimensions.x);\n vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0)));\n float rightBump = texture2D(image, rightPixel).channel;\n\n float imageHeight = float(imageDimensions.y);\n vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight)));\n float topBump = texture2D(image, leftPixel).channel;\n\n vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0)));\n vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\n\n material.normal = normalEC;\n material.diffuse = vec3(0.01);\n\n return material;\n}\n"},translucent:!1}),iI.NormalMapType="NormalMap",iI._materialCache.addMaterial(iI.NormalMapType,{fabric:{type:iI.NormalMapType,uniforms:{image:iI.DefaultImageId,channels:"rgb",strength:.8,repeat:new Mt(1,1)},source:"uniform sampler2D image;\nuniform float strength;\nuniform vec2 repeat;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n \n vec4 textureValue = texture2D(image, fract(repeat * materialInput.st));\n vec3 normalTangentSpace = textureValue.channels;\n normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0;\n normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0);\n normalTangentSpace = normalize(normalTangentSpace);\n vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\n \n material.normal = normalEC;\n \n return material;\n}\n"},translucent:!1}),iI.GridType="Grid",iI._materialCache.addMaterial(iI.GridType,{fabric:{type:iI.GridType,uniforms:{color:new Hf(0,1,0,1),cellAlpha:.1,lineCount:new Mt(8,8),lineThickness:new Mt(1,1),lineOffset:new Mt(0,0)},source:'#ifdef GL_OES_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\n\nuniform vec4 color;\nuniform float cellAlpha;\nuniform vec2 lineCount;\nuniform vec2 lineThickness;\nuniform vec2 lineOffset;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n\n float scaledWidth = fract(lineCount.s * st.s - lineOffset.s);\n scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\n float scaledHeight = fract(lineCount.t * st.t - lineOffset.t);\n scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\n\n float value;\n#ifdef GL_OES_standard_derivatives\n // Fuzz Factor - Controls blurriness of lines\n const float fuzz = 1.2;\n vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0;\n\n // From "3D Engine Design for Virtual Globes" by Cozzi and Ring, Listing 4.13.\n vec2 dx = abs(dFdx(st));\n vec2 dy = abs(dFdy(st));\n vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount;\n value = min(\n smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth),\n smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight));\n#else\n // Fuzz Factor - Controls blurriness of lines\n const float fuzz = 0.05;\n\n vec2 range = 0.5 - (lineThickness * 0.05);\n value = min(\n 1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth),\n 1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight));\n#endif\n\n // Edges taken from RimLightingMaterial.glsl\n // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\n float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)));\n float sRim = smoothstep(0.8, 1.0, dRim);\n value *= (1.0 - sRim);\n\n vec4 halfColor;\n halfColor.rgb = color.rgb * 0.5;\n halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value));\n halfColor = czm_gammaCorrect(halfColor);\n material.diffuse = halfColor.rgb;\n material.emission = halfColor.rgb;\n material.alpha = halfColor.a;\n\n return material;\n}\n'},translucent:function(e){var t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}}),iI.StripeType="Stripe",iI._materialCache.addMaterial(iI.StripeType,{fabric:{type:iI.StripeType,uniforms:{horizontal:!0,evenColor:new Hf(1,1,1,.5),oddColor:new Hf(0,0,1,.5),offset:0,repeat:5},source:"uniform vec4 evenColor;\nuniform vec4 oddColor;\nuniform float offset;\nuniform float repeat;\nuniform bool horizontal;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n // Based on the Stripes Fragment Shader in the Orange Book (11.1.2)\n float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal));\n float value = fract((coord - offset) * (repeat * 0.5));\n float dist = min(value, min(abs(value - 0.5), 1.0 - value));\n\n vec4 currentColor = mix(evenColor, oddColor, step(0.5, value));\n vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist);\n color = czm_gammaCorrect(color);\n\n material.diffuse = color.rgb;\n material.alpha = color.a;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}}),iI.CheckerboardType="Checkerboard",iI._materialCache.addMaterial(iI.CheckerboardType,{fabric:{type:iI.CheckerboardType,uniforms:{lightColor:new Hf(1,1,1,.5),darkColor:new Hf(0,0,0,.5),repeat:new Mt(5,5)},source:"uniform vec4 lightColor;\nuniform vec4 darkColor;\nuniform vec2 repeat;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n\n // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\n float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0\n\n // Find the distance from the closest separator (region between two colors)\n float scaledWidth = fract(repeat.s * st.s);\n scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\n float scaledHeight = fract(repeat.t * st.t);\n scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\n float value = min(scaledWidth, scaledHeight);\n\n vec4 currentColor = mix(lightColor, darkColor, b);\n vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03);\n\n color = czm_gammaCorrect(color);\n material.diffuse = color.rgb;\n material.alpha = color.a;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}}),iI.DotType="Dot",iI._materialCache.addMaterial(iI.DotType,{fabric:{type:iI.DotType,uniforms:{lightColor:new Hf(1,1,0,.75),darkColor:new Hf(0,1,1,.75),repeat:new Mt(5,5)},source:"uniform vec4 lightColor;\nuniform vec4 darkColor;\nuniform vec2 repeat;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\n float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0\n\n vec4 color = mix(lightColor, darkColor, b);\n color = czm_gammaCorrect(color);\n material.diffuse = color.rgb;\n material.alpha = color.a;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}}),iI.WaterType="Water",iI._materialCache.addMaterial(iI.WaterType,{fabric:{type:iI.WaterType,uniforms:{baseWaterColor:new Hf(.2,.3,.6,1),blendColor:new Hf(0,1,.699,1),specularMap:iI.DefaultImageId,normalMap:iI.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:"// Thanks for the contribution Jonas\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\n\nuniform sampler2D specularMap;\nuniform sampler2D normalMap;\nuniform vec4 baseWaterColor;\nuniform vec4 blendColor;\nuniform float frequency;\nuniform float animationSpeed;\nuniform float amplitude;\nuniform float specularIntensity;\nuniform float fadeFactor;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n float time = czm_frameNumber * animationSpeed;\n\n // fade is a function of the distance from the fragment and the frequency of the waves\n float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);\n\n float specularMapValue = texture2D(specularMap, materialInput.st).r;\n\n // note: not using directional motion at this time, just set the angle to 0.0;\n vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);\n vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));\n\n // fade out the normal perturbation as we move further from the water surface\n normalTangentSpace.xy /= fade;\n\n // attempt to fade out the normal perturbation as we approach non water areas (low specular map value)\n normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);\n\n normalTangentSpace = normalize(normalTangentSpace);\n\n // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane\n float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);\n\n // fade out water effect as specular map value decreases\n material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;\n\n // base color is a blend of the water and non-water color based on the value from the specular map\n // may need a uniform blend factor to better control this\n material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);\n\n // diffuse highlights are based on how perturbed the normal is\n material.diffuse += (0.1 * tsPerturbationRatio);\n\n material.diffuse = material.diffuse;\n\n material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);\n\n material.specular = specularIntensity;\n material.shininess = 10.0;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}}),iI.RimLightingType="RimLighting",iI._materialCache.addMaterial(iI.RimLightingType,{fabric:{type:iI.RimLightingType,uniforms:{color:new Hf(1,0,0,.7),rimColor:new Hf(1,1,1,.4),width:.3},source:"uniform vec4 color;\nuniform vec4 rimColor;\nuniform float width;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\n float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC));\n float s = smoothstep(1.0 - width, 1.0, d);\n\n vec4 outColor = czm_gammaCorrect(color);\n vec4 outRimColor = czm_gammaCorrect(rimColor);\n\n material.diffuse = outColor.rgb;\n material.emission = outRimColor.rgb * s;\n material.alpha = mix(outColor.a, outRimColor.a, s);\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}}),iI.FadeType="Fade",iI._materialCache.addMaterial(iI.FadeType,{fabric:{type:iI.FadeType,uniforms:{fadeInColor:new Hf(1,0,0,1),fadeOutColor:new Hf(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new Mt(.5,.5)},source:"uniform vec4 fadeInColor;\nuniform vec4 fadeOutColor;\nuniform float maximumDistance;\nuniform bool repeat;\nuniform vec2 fadeDirection;\nuniform vec2 time;\n\nfloat getTime(float t, float coord)\n{\n float scalar = 1.0 / maximumDistance;\n float q = distance(t, coord) * scalar;\n if (repeat)\n {\n float r = distance(t, coord + 1.0) * scalar;\n float s = distance(t, coord - 1.0) * scalar;\n q = min(min(r, s), q);\n }\n return clamp(q, 0.0, 1.0);\n}\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n float s = getTime(time.x, st.s) * fadeDirection.s;\n float t = getTime(time.y, st.t) * fadeDirection.t;\n\n float u = length(vec2(s, t));\n vec4 color = mix(fadeInColor, fadeOutColor, u);\n\n color = czm_gammaCorrect(color);\n material.emission = color.rgb;\n material.alpha = color.a;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}}),iI.PolylineArrowType="PolylineArrow",iI._materialCache.addMaterial(iI.PolylineArrowType,{fabric:{type:iI.PolylineArrowType,uniforms:{color:new Hf(1,1,1,1)},source:"#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n\nuniform vec4 color;\n\nfloat getPointOnLine(vec2 p0, vec2 p1, float x)\n{\n float slope = (p0.y - p1.y) / (p0.x - p1.x);\n return slope * (x - p0.x) + p0.y;\n}\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n\n#ifdef GL_OES_standard_derivatives\n float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio;\n#else\n float base = 0.975; // 2.5% of the line will be the arrow head\n#endif\n\n vec2 center = vec2(1.0, 0.5);\n float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s);\n float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s);\n\n float halfWidth = 0.15;\n float s = step(0.5 - halfWidth, st.t);\n s *= 1.0 - step(0.5 + halfWidth, st.t);\n s *= 1.0 - step(base, st.s);\n\n float t = step(base, materialInput.st.s);\n t *= 1.0 - step(ptOnUpperLine, st.t);\n t *= step(ptOnLowerLine, st.t);\n\n // Find the distance from the closest separator (region between two colors)\n float dist;\n if (st.s < base)\n {\n float d1 = abs(st.t - (0.5 - halfWidth));\n float d2 = abs(st.t - (0.5 + halfWidth));\n dist = min(d1, d2);\n }\n else\n {\n float d1 = czm_infinity;\n if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth)\n {\n d1 = abs(st.s - base);\n }\n float d2 = abs(st.t - ptOnUpperLine);\n float d3 = abs(st.t - ptOnLowerLine);\n dist = min(min(d1, d2), d3);\n }\n\n vec4 outsideColor = vec4(0.0);\n vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0));\n vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist);\n\n outColor = czm_gammaCorrect(outColor);\n material.diffuse = outColor.rgb;\n material.alpha = outColor.a;\n return material;\n}\n"},translucent:!0}),iI.PolylineDashType="PolylineDash",iI._materialCache.addMaterial(iI.PolylineDashType,{fabric:{type:iI.PolylineDashType,uniforms:{color:new Hf(1,0,1,1),gapColor:new Hf(0,0,0,0),dashLength:16,dashPattern:255},source:"uniform vec4 color;\nuniform vec4 gapColor;\nuniform float dashLength;\nuniform float dashPattern;\nvarying float v_polylineAngle;\n\nconst float maskLength = 16.0;\n\nmat2 rotate(float rad) {\n float c = cos(rad);\n float s = sin(rad);\n return mat2(\n c, s,\n -s, c\n );\n}\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;\n\n // Get the relative position within the dash from 0 to 1\n float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio));\n // Figure out the mask index.\n float maskIndex = floor(dashPosition * maskLength);\n // Test the bit mask.\n float maskTest = floor(dashPattern / pow(2.0, maskIndex));\n vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color;\n if (fragColor.a < 0.005) { // matches 0/255 and 1/255\n discard;\n }\n\n fragColor = czm_gammaCorrect(fragColor);\n material.emission = fragColor.rgb;\n material.alpha = fragColor.a;\n return material;\n}\n"},translucent:!0}),iI.PolylineGlowType="PolylineGlow",iI._materialCache.addMaterial(iI.PolylineGlowType,{fabric:{type:iI.PolylineGlowType,uniforms:{color:new Hf(0,.5,1,1),glowPower:.25,taperPower:1},source:"uniform vec4 color;\nuniform float glowPower;\nuniform float taperPower;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);\n\n if (taperPower <= 0.99999) {\n glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));\n }\n\n vec4 fragColor;\n fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);\n fragColor.a = clamp(0.0, 1.0, glow) * color.a;\n fragColor = czm_gammaCorrect(fragColor);\n\n material.emission = fragColor.rgb;\n material.alpha = fragColor.a;\n\n return material;\n}\n"},translucent:!0}),iI.PolylineOutlineType="PolylineOutline",iI._materialCache.addMaterial(iI.PolylineOutlineType,{fabric:{type:iI.PolylineOutlineType,uniforms:{color:new Hf(1,1,1,1),outlineColor:new Hf(1,0,0,1),outlineWidth:1},source:"uniform vec4 color;\nuniform vec4 outlineColor;\nuniform float outlineWidth;\n\nvarying float v_width;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n vec2 st = materialInput.st;\n float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width;\n float b = step(0.5 - halfInteriorWidth, st.t);\n b *= 1.0 - step(0.5 + halfInteriorWidth, st.t);\n\n // Find the distance from the closest separator (region between two colors)\n float d1 = abs(st.t - (0.5 - halfInteriorWidth));\n float d2 = abs(st.t - (0.5 + halfInteriorWidth));\n float dist = min(d1, d2);\n\n vec4 currentColor = mix(outlineColor, color, b);\n vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist);\n outColor = czm_gammaCorrect(outColor);\n\n material.diffuse = outColor.rgb;\n material.alpha = outColor.a;\n\n return material;\n}\n"},translucent:function(e){var t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}}),iI.ElevationContourType="ElevationContour",iI._materialCache.addMaterial(iI.ElevationContourType,{fabric:{type:iI.ElevationContourType,uniforms:{spacing:100,color:new Hf(1,0,0,1),width:1},source:"#ifdef GL_OES_standard_derivatives\n #extension GL_OES_standard_derivatives : enable\n#endif\n\nuniform vec4 color;\nuniform float spacing;\nuniform float width;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n\n float distanceToContour = mod(materialInput.height, spacing);\n\n#ifdef GL_OES_standard_derivatives\n float dxc = abs(dFdx(materialInput.height));\n float dyc = abs(dFdy(materialInput.height));\n float dF = max(dxc, dyc) * czm_pixelRatio * width;\n float alpha = (distanceToContour < dF) ? 1.0 : 0.0;\n#else\n float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0;\n#endif\n\n vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a));\n material.diffuse = outColor.rgb;\n material.alpha = outColor.a;\n\n return material;\n}\n"},translucent:!1}),iI.ElevationRampType="ElevationRamp",iI._materialCache.addMaterial(iI.ElevationRampType,{fabric:{type:iI.ElevationRampType,uniforms:{image:iI.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:"uniform sampler2D image;\nuniform float minimumHeight;\nuniform float maximumHeight;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0);\n vec4 rampColor = texture2D(image, vec2(scaledHeight, 0.5));\n rampColor = czm_gammaCorrect(rampColor);\n material.diffuse = rampColor.rgb;\n material.alpha = rampColor.a;\n return material;\n}\n"},translucent:!1}),iI.SlopeRampMaterialType="SlopeRamp",iI._materialCache.addMaterial(iI.SlopeRampMaterialType,{fabric:{type:iI.SlopeRampMaterialType,uniforms:{image:iI.DefaultImageId},source:"uniform sampler2D image;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec4 rampColor = texture2D(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5));\n rampColor = czm_gammaCorrect(rampColor);\n material.diffuse = rampColor.rgb;\n material.alpha = rampColor.a;\n return material;\n}\n"},translucent:!1}),iI.AspectRampMaterialType="AspectRamp",iI._materialCache.addMaterial(iI.AspectRampMaterialType,{fabric:{type:iI.AspectRampMaterialType,uniforms:{image:iI.DefaultImageId},source:"uniform sampler2D image;\n\nczm_material czm_getMaterial(czm_materialInput materialInput)\n{\n czm_material material = czm_getDefaultMaterial(materialInput);\n vec4 rampColor = texture2D(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5));\n rampColor = czm_gammaCorrect(rampColor);\n material.diffuse = rampColor.rgb;\n material.alpha = rampColor.a;\n return material;\n}\n"},translucent:!1});var mI=iI;function gI(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.translucent,!0),n=Object(r.a)(e.closed,!1),i=Object(r.a)(e.materialSupport,gI.MaterialSupport.TEXTURED);this.material=Object(o.a)(e.material)?e.material:mI.fromType(mI.ColorType),this.translucent=t,this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,i.vertexShaderSource),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,i.fragmentShaderSource),this._renderState=zP.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._materialSupport=i,this._vertexFormat=i.vertexFormat,this._flat=Object(r.a)(e.flat,!1),this._faceForward=Object(r.a)(e.faceForward,!n)}Object.defineProperties(gI.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},materialSupport:{get:function(){return this._materialSupport}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}}),gI.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,gI.prototype.isTranslucent=zP.prototype.isTranslucent,gI.prototype.getRenderState=zP.prototype.getRenderState,gI.MaterialSupport={BASIC:Object.freeze({vertexFormat:Ul.POSITION_AND_NORMAL,vertexShaderSource:"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 normal;\nattribute float batchId;\n\nvarying vec3 v_positionEC;\nvarying vec3 v_normalEC;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_normalEC = czm_normal * normal; // normal in eye coordinates\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n",fragmentShaderSource:"varying vec3 v_positionEC;\nvarying vec3 v_normalEC;\n\nvoid main()\n{\n vec3 positionToEyeEC = -v_positionEC;\n\n vec3 normalEC = normalize(v_normalEC);\n#ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\n\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n"}),TEXTURED:Object.freeze({vertexFormat:Ul.POSITION_NORMAL_AND_ST,vertexShaderSource:"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 normal;\nattribute vec2 st;\nattribute float batchId;\n\nvarying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_normalEC = czm_normal * normal; // normal in eye coordinates\n v_st = st;\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n",fragmentShaderSource:"varying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n vec3 positionToEyeEC = -v_positionEC;\n\n vec3 normalEC = normalize(v_normalEC);\n#ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\n\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n materialInput.st = v_st;\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n"}),ALL:Object.freeze({vertexFormat:Ul.ALL,vertexShaderSource:"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 normal;\nattribute vec3 tangent;\nattribute vec3 bitangent;\nattribute vec2 st;\nattribute float batchId;\n\nvarying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec3 v_tangentEC;\nvarying vec3 v_bitangentEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_normalEC = czm_normal * normal; // normal in eye coordinates\n v_tangentEC = czm_normal * tangent; // tangent in eye coordinates\n v_bitangentEC = czm_normal * bitangent; // bitangent in eye coordinates\n v_st = st;\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n",fragmentShaderSource:"varying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec3 v_tangentEC;\nvarying vec3 v_bitangentEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n vec3 positionToEyeEC = -v_positionEC;\n mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC);\n\n vec3 normalEC = normalize(v_normalEC);\n#ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\n\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.tangentToEyeMatrix = tangentToEyeMatrix;\n materialInput.positionToEyeEC = positionToEyeEC;\n materialInput.st = v_st;\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n"})};var vI=gI;function _I(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.translucent,!0),n=Object(r.a)(e.closed,!1),i=Object(r.a)(e.flat,!1),o=i?"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec4 color;\nattribute float batchId;\n\nvarying vec4 v_color;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_color = color;\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n":"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 normal;\nattribute vec4 color;\nattribute float batchId;\n\nvarying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec4 v_color;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_normalEC = czm_normal * normal; // normal in eye coordinates\n v_color = color;\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n",a=i?"varying vec4 v_color;\n\nvoid main()\n{\n gl_FragColor = czm_gammaCorrect(v_color);\n}\n":"varying vec3 v_positionEC;\nvarying vec3 v_normalEC;\nvarying vec4 v_color;\n\nvoid main()\n{\n vec3 positionToEyeEC = -v_positionEC;\n\n vec3 normalEC = normalize(v_normalEC);\n#ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\n\n vec4 color = czm_gammaCorrect(v_color);\n\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n czm_material material = czm_getDefaultMaterial(materialInput);\n material.diffuse = color.rgb;\n material.alpha = color.a;\n\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n}\n",s=i?_I.FLAT_VERTEX_FORMAT:_I.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,o),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,a),this._renderState=zP.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=Object(r.a)(e.faceForward,!n)}Object.defineProperties(_I.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}}),_I.VERTEX_FORMAT=Ul.POSITION_AND_NORMAL,_I.FLAT_VERTEX_FORMAT=Ul.POSITION_ONLY,_I.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,_I.prototype.isTranslucent=zP.prototype.isTranslucent,_I.prototype.getRenderState=zP.prototype.getRenderState;var bI=_I;function yI(e){this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(yI.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color")}),yI.prototype.getType=function(e){return"Color"},yI.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,Hf.WHITE,t.color),t},yI.prototype.equals=function(e){return this===e||e instanceof yI&&cP.equals(this._color,e._color)};var wI=yI;function OI(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._cull=Object(r.a)(e.cull,!0),this._occlude=Object(r.a)(e.occlude,!0),this._modelMatrix=e.modelMatrix,this._primitiveType=Object(r.a)(e.primitiveType,xl.TRIANGLES),this._vertexArray=e.vertexArray,this._count=e.count,this._offset=Object(r.a)(e.offset,0),this._instanceCount=Object(r.a)(e.instanceCount,0),this._shaderProgram=e.shaderProgram,this._uniformMap=e.uniformMap,this._renderState=e.renderState,this._framebuffer=e.framebuffer,this._pass=e.pass,this._executeInClosestFrustum=Object(r.a)(e.executeInClosestFrustum,!1),this._owner=e.owner,this._debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._debugOverlappingFrustums=0,this._castShadows=Object(r.a)(e.castShadows,!1),this._receiveShadows=Object(r.a)(e.receiveShadows,!1),this._pickId=e.pickId,this._pickOnly=Object(r.a)(e.pickOnly,!1),this.dirty=!0,this.lastDirtyTime=0,this.derivedCommands={}}Object.defineProperties(OI.prototype,{boundingVolume:{get:function(){return this._boundingVolume},set:function(e){this._boundingVolume!==e&&(this._boundingVolume=e,this.dirty=!0)}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox},set:function(e){this._orientedBoundingBox!==e&&(this._orientedBoundingBox=e,this.dirty=!0)}},cull:{get:function(){return this._cull},set:function(e){this._cull!==e&&(this._cull=e,this.dirty=!0)}},occlude:{get:function(){return this._occlude},set:function(e){this._occlude!==e&&(this._occlude=e,this.dirty=!0)}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix!==e&&(this._modelMatrix=e,this.dirty=!0)}},primitiveType:{get:function(){return this._primitiveType},set:function(e){this._primitiveType!==e&&(this._primitiveType=e,this.dirty=!0)}},vertexArray:{get:function(){return this._vertexArray},set:function(e){this._vertexArray!==e&&(this._vertexArray=e,this.dirty=!0)}},count:{get:function(){return this._count},set:function(e){this._count!==e&&(this._count=e,this.dirty=!0)}},offset:{get:function(){return this._offset},set:function(e){this._offset!==e&&(this._offset=e,this.dirty=!0)}},instanceCount:{get:function(){return this._instanceCount},set:function(e){this._instanceCount!==e&&(this._instanceCount=e,this.dirty=!0)}},shaderProgram:{get:function(){return this._shaderProgram},set:function(e){this._shaderProgram!==e&&(this._shaderProgram=e,this.dirty=!0)}},castShadows:{get:function(){return this._castShadows},set:function(e){this._castShadows!==e&&(this._castShadows=e,this.dirty=!0)}},receiveShadows:{get:function(){return this._receiveShadows},set:function(e){this._receiveShadows!==e&&(this._receiveShadows=e,this.dirty=!0)}},uniformMap:{get:function(){return this._uniformMap},set:function(e){this._uniformMap!==e&&(this._uniformMap=e,this.dirty=!0)}},renderState:{get:function(){return this._renderState},set:function(e){this._renderState!==e&&(this._renderState=e,this.dirty=!0)}},framebuffer:{get:function(){return this._framebuffer},set:function(e){this._framebuffer!==e&&(this._framebuffer=e,this.dirty=!0)}},pass:{get:function(){return this._pass},set:function(e){this._pass!==e&&(this._pass=e,this.dirty=!0)}},executeInClosestFrustum:{get:function(){return this._executeInClosestFrustum},set:function(e){this._executeInClosestFrustum!==e&&(this._executeInClosestFrustum=e,this.dirty=!0)}},owner:{get:function(){return this._owner},set:function(e){this._owner!==e&&(this._owner=e,this.dirty=!0)}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,this.dirty=!0)}},debugOverlappingFrustums:{get:function(){return this._debugOverlappingFrustums},set:function(e){this._debugOverlappingFrustums!==e&&(this._debugOverlappingFrustums=e,this.dirty=!0)}},pickId:{get:function(){return this._pickId},set:function(e){this._pickId!==e&&(this._pickId=e,this.dirty=!0)}},pickOnly:{get:function(){return this._pickOnly},set:function(e){this._pickOnly!==e&&(this._pickOnly=e,this.dirty=!0)}}}),OI.shallowClone=function(e,t){if(Object(o.a)(e))return Object(o.a)(t)||(t=new OI),t._boundingVolume=e._boundingVolume,t._orientedBoundingBox=e._orientedBoundingBox,t._cull=e._cull,t._occlude=e._occlude,t._modelMatrix=e._modelMatrix,t._primitiveType=e._primitiveType,t._vertexArray=e._vertexArray,t._count=e._count,t._offset=e._offset,t._instanceCount=e._instanceCount,t._shaderProgram=e._shaderProgram,t._uniformMap=e._uniformMap,t._renderState=e._renderState,t._framebuffer=e._framebuffer,t._pass=e._pass,t._executeInClosestFrustum=e._executeInClosestFrustum,t._owner=e._owner,t._debugShowBoundingVolume=e._debugShowBoundingVolume,t._debugOverlappingFrustums=e._debugOverlappingFrustums,t._castShadows=e._castShadows,t._receiveShadows=e._receiveShadows,t._pickId=e._pickId,t._pickOnly=e._pickOnly,t.dirty=!0,t.lastDirtyTime=0,t},OI.prototype.execute=function(e,t){e.draw(this,t)};var CI=OI,EI=Object.freeze({ENVIRONMENT:0,COMPUTE:1,GLOBE:2,TERRAIN_CLASSIFICATION:3,CESIUM_3D_TILE:4,CESIUM_3D_TILE_CLASSIFICATION:5,CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW:6,OPAQUE:7,TRANSLUCENT:8,OVERLAY:9,NUMBER_OF_PASSES:10});var AI=function e(t){if("object"!==typeof t||null===t)return t;for(var n,i=Object.keys(t),r=0;r<i.length;r++)n=i[r],t.hasOwnProperty(n)&&"_applyFunctions"!==n&&(t[n]=e(t[n]));return Object.freeze(t)};function xI(e){return e===Ts.FUNC_ADD||e===Ts.FUNC_SUBTRACT||e===Ts.FUNC_REVERSE_SUBTRACT||e===Ts.MIN||e===Ts.MAX}function TI(e){return e===Ts.ZERO||e===Ts.ONE||e===Ts.SRC_COLOR||e===Ts.ONE_MINUS_SRC_COLOR||e===Ts.DST_COLOR||e===Ts.ONE_MINUS_DST_COLOR||e===Ts.SRC_ALPHA||e===Ts.ONE_MINUS_SRC_ALPHA||e===Ts.DST_ALPHA||e===Ts.ONE_MINUS_DST_ALPHA||e===Ts.CONSTANT_COLOR||e===Ts.ONE_MINUS_CONSTANT_COLOR||e===Ts.CONSTANT_ALPHA||e===Ts.ONE_MINUS_CONSTANT_ALPHA||e===Ts.SRC_ALPHA_SATURATE}function SI(e){return e===Ts.NEVER||e===Ts.LESS||e===Ts.EQUAL||e===Ts.LEQUAL||e===Ts.GREATER||e===Ts.NOTEQUAL||e===Ts.GEQUAL||e===Ts.ALWAYS}function DI(e){return e===Ts.ZERO||e===Ts.KEEP||e===Ts.REPLACE||e===Ts.INCR||e===Ts.DECR||e===Ts.INVERT||e===Ts.INCR_WRAP||e===Ts.DECR_WRAP}function PI(e){var t,n,i=Object(r.a)(e,r.a.EMPTY_OBJECT),s=Object(r.a)(i.cull,r.a.EMPTY_OBJECT),c=Object(r.a)(i.polygonOffset,r.a.EMPTY_OBJECT),l=Object(r.a)(i.scissorTest,r.a.EMPTY_OBJECT),u=Object(r.a)(l.rectangle,r.a.EMPTY_OBJECT),h=Object(r.a)(i.depthRange,r.a.EMPTY_OBJECT),d=Object(r.a)(i.depthTest,r.a.EMPTY_OBJECT),f=Object(r.a)(i.colorMask,r.a.EMPTY_OBJECT),p=Object(r.a)(i.blending,r.a.EMPTY_OBJECT),m=Object(r.a)(p.color,r.a.EMPTY_OBJECT),g=Object(r.a)(i.stencilTest,r.a.EMPTY_OBJECT),v=Object(r.a)(g.frontOperation,r.a.EMPTY_OBJECT),_=Object(r.a)(g.backOperation,r.a.EMPTY_OBJECT),b=Object(r.a)(i.sampleCoverage,r.a.EMPTY_OBJECT),y=i.viewport;if(this.frontFace=Object(r.a)(i.frontFace,Np.COUNTER_CLOCKWISE),this.cull={enabled:Object(r.a)(s.enabled,!1),face:Object(r.a)(s.face,Ts.BACK)},this.lineWidth=Object(r.a)(i.lineWidth,1),this.polygonOffset={enabled:Object(r.a)(c.enabled,!1),factor:Object(r.a)(c.factor,0),units:Object(r.a)(c.units,0)},this.scissorTest={enabled:Object(r.a)(l.enabled,!1),rectangle:bl.clone(u)},this.depthRange={near:Object(r.a)(h.near,0),far:Object(r.a)(h.far,1)},this.depthTest={enabled:Object(r.a)(d.enabled,!1),func:Object(r.a)(d.func,Ts.LESS)},this.colorMask={red:Object(r.a)(f.red,!0),green:Object(r.a)(f.green,!0),blue:Object(r.a)(f.blue,!0),alpha:Object(r.a)(f.alpha,!0)},this.depthMask=Object(r.a)(i.depthMask,!0),this.stencilMask=Object(r.a)(i.stencilMask,-1),this.blending={enabled:Object(r.a)(p.enabled,!1),color:new Hf(Object(r.a)(m.red,0),Object(r.a)(m.green,0),Object(r.a)(m.blue,0),Object(r.a)(m.alpha,0)),equationRgb:Object(r.a)(p.equationRgb,Ts.FUNC_ADD),equationAlpha:Object(r.a)(p.equationAlpha,Ts.FUNC_ADD),functionSourceRgb:Object(r.a)(p.functionSourceRgb,Ts.ONE),functionSourceAlpha:Object(r.a)(p.functionSourceAlpha,Ts.ONE),functionDestinationRgb:Object(r.a)(p.functionDestinationRgb,Ts.ZERO),functionDestinationAlpha:Object(r.a)(p.functionDestinationAlpha,Ts.ZERO)},this.stencilTest={enabled:Object(r.a)(g.enabled,!1),frontFunction:Object(r.a)(g.frontFunction,Ts.ALWAYS),backFunction:Object(r.a)(g.backFunction,Ts.ALWAYS),reference:Object(r.a)(g.reference,0),mask:Object(r.a)(g.mask,-1),frontOperation:{fail:Object(r.a)(v.fail,Ts.KEEP),zFail:Object(r.a)(v.zFail,Ts.KEEP),zPass:Object(r.a)(v.zPass,Ts.KEEP)},backOperation:{fail:Object(r.a)(_.fail,Ts.KEEP),zFail:Object(r.a)(_.zFail,Ts.KEEP),zPass:Object(r.a)(_.zPass,Ts.KEEP)}},this.sampleCoverage={enabled:Object(r.a)(b.enabled,!1),value:Object(r.a)(b.value,1),invert:Object(r.a)(b.invert,!1)},this.viewport=Object(o.a)(y)?new bl(y.x,y.y,y.width,y.height):void 0,this.lineWidth<BP.minimumAliasedLineWidth||this.lineWidth>BP.maximumAliasedLineWidth)throw new a.a("renderState.lineWidth is out of range. Check minimumAliasedLineWidth and maximumAliasedLineWidth.");if(!Np.validate(this.frontFace))throw new a.a("Invalid renderState.frontFace.");if((t=this.cull.face)!==Ts.FRONT&&t!==Ts.BACK&&t!==Ts.FRONT_AND_BACK)throw new a.a("Invalid renderState.cull.face.");if(this.scissorTest.rectangle.width<0||this.scissorTest.rectangle.height<0)throw new a.a("renderState.scissorTest.rectangle.width and renderState.scissorTest.rectangle.height must be greater than or equal to zero.");if(this.depthRange.near>this.depthRange.far)throw new a.a("renderState.depthRange.near can not be greater than renderState.depthRange.far.");if(this.depthRange.near<0)throw new a.a("renderState.depthRange.near must be greater than or equal to zero.");if(this.depthRange.far>1)throw new a.a("renderState.depthRange.far must be less than or equal to one.");if((n=this.depthTest.func)!==Ts.NEVER&&n!==Ts.LESS&&n!==Ts.EQUAL&&n!==Ts.LEQUAL&&n!==Ts.GREATER&&n!==Ts.NOTEQUAL&&n!==Ts.GEQUAL&&n!==Ts.ALWAYS)throw new a.a("Invalid renderState.depthTest.func.");if(this.blending.color.red<0||this.blending.color.red>1||this.blending.color.green<0||this.blending.color.green>1||this.blending.color.blue<0||this.blending.color.blue>1||this.blending.color.alpha<0||this.blending.color.alpha>1)throw new a.a("renderState.blending.color components must be greater than or equal to zero and less than or equal to one.");if(!xI(this.blending.equationRgb))throw new a.a("Invalid renderState.blending.equationRgb.");if(!xI(this.blending.equationAlpha))throw new a.a("Invalid renderState.blending.equationAlpha.");if(!TI(this.blending.functionSourceRgb))throw new a.a("Invalid renderState.blending.functionSourceRgb.");if(!TI(this.blending.functionSourceAlpha))throw new a.a("Invalid renderState.blending.functionSourceAlpha.");if(!TI(this.blending.functionDestinationRgb))throw new a.a("Invalid renderState.blending.functionDestinationRgb.");if(!TI(this.blending.functionDestinationAlpha))throw new a.a("Invalid renderState.blending.functionDestinationAlpha.");if(!SI(this.stencilTest.frontFunction))throw new a.a("Invalid renderState.stencilTest.frontFunction.");if(!SI(this.stencilTest.backFunction))throw new a.a("Invalid renderState.stencilTest.backFunction.");if(!DI(this.stencilTest.frontOperation.fail))throw new a.a("Invalid renderState.stencilTest.frontOperation.fail.");if(!DI(this.stencilTest.frontOperation.zFail))throw new a.a("Invalid renderState.stencilTest.frontOperation.zFail.");if(!DI(this.stencilTest.frontOperation.zPass))throw new a.a("Invalid renderState.stencilTest.frontOperation.zPass.");if(!DI(this.stencilTest.backOperation.fail))throw new a.a("Invalid renderState.stencilTest.backOperation.fail.");if(!DI(this.stencilTest.backOperation.zFail))throw new a.a("Invalid renderState.stencilTest.backOperation.zFail.");if(!DI(this.stencilTest.backOperation.zPass))throw new a.a("Invalid renderState.stencilTest.backOperation.zPass.");if(Object(o.a)(this.viewport)){if(this.viewport.width<0)throw new a.a("renderState.viewport.width must be greater than or equal to zero.");if(this.viewport.height<0)throw new a.a("renderState.viewport.height must be greater than or equal to zero.");if(this.viewport.width>BP.maximumViewportWidth)throw new a.a("renderState.viewport.width must be less than or equal to the maximum viewport width ("+BP.maximumViewportWidth.toString()+"). Check maximumViewportWidth.");if(this.viewport.height>BP.maximumViewportHeight)throw new a.a("renderState.viewport.height must be less than or equal to the maximum viewport height ("+BP.maximumViewportHeight.toString()+"). Check maximumViewportHeight.")}this.id=0,this._applyFunctions=[]}var II=0,MI={};function RI(e,t,n){n?e.enable(t):e.disable(t)}function LI(e,t){e.frontFace(t.frontFace)}function jI(e,t){var n=t.cull,i=n.enabled;RI(e,e.CULL_FACE,i),i&&e.cullFace(n.face)}function FI(e,t){e.lineWidth(t.lineWidth)}function NI(e,t){var n=t.polygonOffset,i=n.enabled;RI(e,e.POLYGON_OFFSET_FILL,i),i&&e.polygonOffset(n.factor,n.units)}function zI(e,t,n){var i=t.scissorTest,r=Object(o.a)(n.scissorTest)?n.scissorTest.enabled:i.enabled;if(RI(e,e.SCISSOR_TEST,r),r){var a=Object(o.a)(n.scissorTest)?n.scissorTest.rectangle:i.rectangle;e.scissor(a.x,a.y,a.width,a.height)}}function kI(e,t){var n=t.depthRange;e.depthRange(n.near,n.far)}function BI(e,t){var n=t.depthTest,i=n.enabled;RI(e,e.DEPTH_TEST,i),i&&e.depthFunc(n.func)}function HI(e,t){var n=t.colorMask;e.colorMask(n.red,n.green,n.blue,n.alpha)}function VI(e,t){e.depthMask(t.depthMask)}function UI(e,t){e.stencilMask(t.stencilMask)}function WI(e,t,n){var i=t.blending,r=Object(o.a)(n.blendingEnabled)?n.blendingEnabled:i.enabled;RI(e,e.BLEND,r),r&&(!function(e,t){e.blendColor(t.red,t.green,t.blue,t.alpha)}(e,i.color),e.blendEquationSeparate(i.equationRgb,i.equationAlpha),e.blendFuncSeparate(i.functionSourceRgb,i.functionDestinationRgb,i.functionSourceAlpha,i.functionDestinationAlpha))}function GI(e,t){var n=t.stencilTest,i=n.enabled;if(RI(e,e.STENCIL_TEST,i),i){var r=n.frontFunction,o=n.backFunction,a=n.reference,s=n.mask;e.stencilFunc(r,a,s),e.stencilFuncSeparate(e.BACK,o,a,s),e.stencilFuncSeparate(e.FRONT,r,a,s);var c=n.frontOperation,l=c.fail,u=c.zFail,h=c.zPass;e.stencilOpSeparate(e.FRONT,l,u,h);var d=n.backOperation,f=d.fail,p=d.zFail,m=d.zPass;e.stencilOpSeparate(e.BACK,f,p,m)}}function qI(e,t){var n=t.sampleCoverage,i=n.enabled;RI(e,e.SAMPLE_COVERAGE,i),i&&e.sampleCoverage(n.value,n.invert)}PI.fromCache=function(e){var t=JSON.stringify(e),n=MI[t];if(Object(o.a)(n))return++n.referenceCount,n.state;var i=new PI(e),r=JSON.stringify(i);return n=MI[r],Object(o.a)(n)||(i.id=II++,n={referenceCount:0,state:i=AI(i)},MI[r]=n),++n.referenceCount,MI[t]={referenceCount:1,state:n.state},n.state},PI.removeFromCache=function(e){var t=new PI(e),n=JSON.stringify(t),i=MI[n],r=JSON.stringify(e),a=MI[r];Object(o.a)(a)&&(--a.referenceCount,0===a.referenceCount&&(delete MI[r],Object(o.a)(i)&&--i.referenceCount)),Object(o.a)(i)&&0===i.referenceCount&&delete MI[n]},PI.getCache=function(){return MI},PI.clearCache=function(){MI={}};var YI=new bl;function $I(e,t,n){var i=Object(r.a)(t.viewport,n.viewport);Object(o.a)(i)||((i=YI).width=n.context.drawingBufferWidth,i.height=n.context.drawingBufferHeight),n.context.uniformState.viewport=i,e.viewport(i.x,i.y,i.width,i.height)}PI.apply=function(e,t,n){LI(e,t),jI(e,t),FI(e,t),NI(e,t),kI(e,t),BI(e,t),HI(e,t),VI(e,t),UI(e,t),GI(e,t),qI(e,t),zI(e,t,n),WI(e,t,n),$I(e,t,n)},PI.partialApply=function(e,t,n,i,r,a){if(t!==n){var s=n._applyFunctions[t.id];Object(o.a)(s)||(s=function(e,t){var n=[];return e.frontFace!==t.frontFace&&n.push(LI),e.cull.enabled===t.cull.enabled&&e.cull.face===t.cull.face||n.push(jI),e.lineWidth!==t.lineWidth&&n.push(FI),e.polygonOffset.enabled===t.polygonOffset.enabled&&e.polygonOffset.factor===t.polygonOffset.factor&&e.polygonOffset.units===t.polygonOffset.units||n.push(NI),e.depthRange.near===t.depthRange.near&&e.depthRange.far===t.depthRange.far||n.push(kI),e.depthTest.enabled===t.depthTest.enabled&&e.depthTest.func===t.depthTest.func||n.push(BI),e.colorMask.red===t.colorMask.red&&e.colorMask.green===t.colorMask.green&&e.colorMask.blue===t.colorMask.blue&&e.colorMask.alpha===t.colorMask.alpha||n.push(HI),e.depthMask!==t.depthMask&&n.push(VI),e.stencilMask!==t.stencilMask&&n.push(UI),e.stencilTest.enabled===t.stencilTest.enabled&&e.stencilTest.frontFunction===t.stencilTest.frontFunction&&e.stencilTest.backFunction===t.stencilTest.backFunction&&e.stencilTest.reference===t.stencilTest.reference&&e.stencilTest.mask===t.stencilTest.mask&&e.stencilTest.frontOperation.fail===t.stencilTest.frontOperation.fail&&e.stencilTest.frontOperation.zFail===t.stencilTest.frontOperation.zFail&&e.stencilTest.backOperation.fail===t.stencilTest.backOperation.fail&&e.stencilTest.backOperation.zFail===t.stencilTest.backOperation.zFail&&e.stencilTest.backOperation.zPass===t.stencilTest.backOperation.zPass||n.push(GI),e.sampleCoverage.enabled===t.sampleCoverage.enabled&&e.sampleCoverage.value===t.sampleCoverage.value&&e.sampleCoverage.invert===t.sampleCoverage.invert||n.push(qI),n}(t,n),n._applyFunctions[t.id]=s);for(var c=s.length,l=0;l<c;++l)s[l](e,n)}((Object(o.a)(i.scissorTest)?i.scissorTest:t.scissorTest)!==(Object(o.a)(r.scissorTest)?r.scissorTest:n.scissorTest)||a)&&zI(e,n,r);var u=Object(o.a)(i.blendingEnabled)?i.blendingEnabled:t.blending.enabled,h=Object(o.a)(r.blendingEnabled)?r.blendingEnabled:n.blending.enabled;(u!==h||h&&t.blending!==n.blending)&&WI(e,n,r),t===n&&i===r&&i.context===r.context||$I(e,n,r)},PI.getState=function(e){if(!Object(o.a)(e))throw new a.a("renderState is required.");return{frontFace:e.frontFace,cull:{enabled:e.cull.enabled,face:e.cull.face},lineWidth:e.lineWidth,polygonOffset:{enabled:e.polygonOffset.enabled,factor:e.polygonOffset.factor,units:e.polygonOffset.units},scissorTest:{enabled:e.scissorTest.enabled,rectangle:bl.clone(e.scissorTest.rectangle)},depthRange:{near:e.depthRange.near,far:e.depthRange.far},depthTest:{enabled:e.depthTest.enabled,func:e.depthTest.func},colorMask:{red:e.colorMask.red,green:e.colorMask.green,blue:e.colorMask.blue,alpha:e.colorMask.alpha},depthMask:e.depthMask,stencilMask:e.stencilMask,blending:{enabled:e.blending.enabled,color:Hf.clone(e.blending.color),equationRgb:e.blending.equationRgb,equationAlpha:e.blending.equationAlpha,functionSourceRgb:e.blending.functionSourceRgb,functionSourceAlpha:e.blending.functionSourceAlpha,functionDestinationRgb:e.blending.functionDestinationRgb,functionDestinationAlpha:e.blending.functionDestinationAlpha},stencilTest:{enabled:e.stencilTest.enabled,frontFunction:e.stencilTest.frontFunction,backFunction:e.stencilTest.backFunction,reference:e.stencilTest.reference,mask:e.stencilTest.mask,frontOperation:{fail:e.stencilTest.frontOperation.fail,zFail:e.stencilTest.frontOperation.zFail,zPass:e.stencilTest.frontOperation.zPass},backOperation:{fail:e.stencilTest.backOperation.fail,zFail:e.stencilTest.backOperation.zFail,zPass:e.stencilTest.backOperation.zPass}},sampleCoverage:{enabled:e.sampleCoverage.enabled,value:e.sampleCoverage.value,invert:e.sampleCoverage.invert},viewport:Object(o.a)(e.viewport)?bl.clone(e.viewport):void 0}};var XI=PI,KI=new O;function QI(e){this._size=e.size,this._datatype=e.datatype,this.getValue=e.getValue}var ZI={};ZI[Ts.FLOAT]="float",ZI[Ts.FLOAT_VEC2]="vec2",ZI[Ts.FLOAT_VEC3]="vec3",ZI[Ts.FLOAT_VEC4]="vec4",ZI[Ts.INT]="int",ZI[Ts.INT_VEC2]="ivec2",ZI[Ts.INT_VEC3]="ivec3",ZI[Ts.INT_VEC4]="ivec4",ZI[Ts.BOOL]="bool",ZI[Ts.BOOL_VEC2]="bvec2",ZI[Ts.BOOL_VEC3]="bvec3",ZI[Ts.BOOL_VEC4]="bvec4",ZI[Ts.FLOAT_MAT2]="mat2",ZI[Ts.FLOAT_MAT3]="mat3",ZI[Ts.FLOAT_MAT4]="mat4",ZI[Ts.SAMPLER_2D]="sampler2D",ZI[Ts.SAMPLER_CUBE]="samplerCube",QI.prototype.getDeclaration=function(e){var t="uniform "+ZI[this._datatype]+" "+e,n=this._size;return t+=1===n?";":"["+n.toString()+"];"};var JI={czm_viewport:new QI({size:1,datatype:Ts.FLOAT_VEC4,getValue:function(e){return e.viewportCartesian4}}),czm_viewportOrthographic:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.viewportOrthographic}}),czm_viewportTransformation:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.viewportTransformation}}),czm_globeDepthTexture:new QI({size:1,datatype:Ts.SAMPLER_2D,getValue:function(e){return e.globeDepthTexture}}),czm_model:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.model}}),czm_inverseModel:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseModel}}),czm_view:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.view}}),czm_view3D:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.view3D}}),czm_viewRotation:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.viewRotation}}),czm_viewRotation3D:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.viewRotation3D}}),czm_inverseView:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseView}}),czm_inverseView3D:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseView3D}}),czm_inverseViewRotation:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation}}),czm_inverseViewRotation3D:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation3D}}),czm_projection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.projection}}),czm_inverseProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseProjection}}),czm_infiniteProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.infiniteProjection}}),czm_modelView:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelView}}),czm_modelView3D:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelView3D}}),czm_modelViewRelativeToEye:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelViewRelativeToEye}}),czm_inverseModelView:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseModelView}}),czm_inverseModelView3D:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseModelView3D}}),czm_viewProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.viewProjection}}),czm_inverseViewProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseViewProjection}}),czm_modelViewProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelViewProjection}}),czm_inverseModelViewProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.inverseModelViewProjection}}),czm_modelViewProjectionRelativeToEye:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelViewProjectionRelativeToEye}}),czm_modelViewInfiniteProjection:new QI({size:1,datatype:Ts.FLOAT_MAT4,getValue:function(e){return e.modelViewInfiniteProjection}}),czm_orthographicIn3D:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.orthographicIn3D?1:0}}),czm_normal:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.normal}}),czm_normal3D:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.normal3D}}),czm_inverseNormal:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.inverseNormal}}),czm_inverseNormal3D:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.inverseNormal3D}}),czm_eyeHeight:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.eyeHeight}}),czm_eyeHeight2D:new QI({size:1,datatype:Ts.FLOAT_VEC2,getValue:function(e){return e.eyeHeight2D}}),czm_entireFrustum:new QI({size:1,datatype:Ts.FLOAT_VEC2,getValue:function(e){return e.entireFrustum}}),czm_currentFrustum:new QI({size:1,datatype:Ts.FLOAT_VEC2,getValue:function(e){return e.currentFrustum}}),czm_frustumPlanes:new QI({size:1,datatype:Ts.FLOAT_VEC4,getValue:function(e){return e.frustumPlanes}}),czm_farDepthFromNearPlusOne:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.farDepthFromNearPlusOne}}),czm_log2FarDepthFromNearPlusOne:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.log2FarDepthFromNearPlusOne}}),czm_oneOverLog2FarDepthFromNearPlusOne:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.oneOverLog2FarDepthFromNearPlusOne}}),czm_sunPositionWC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.sunPositionWC}}),czm_sunPositionColumbusView:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.sunPositionColumbusView}}),czm_sunDirectionEC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.sunDirectionEC}}),czm_sunDirectionWC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.sunDirectionWC}}),czm_moonDirectionEC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.moonDirectionEC}}),czm_lightDirectionEC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.lightDirectionEC}}),czm_lightDirectionWC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.lightDirectionWC}}),czm_lightColor:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.lightColor}}),czm_lightColorHdr:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.lightColorHdr}}),czm_encodedCameraPositionMCHigh:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCHigh}}),czm_encodedCameraPositionMCLow:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCLow}}),czm_viewerPositionWC:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return Ae.getTranslation(e.inverseView,KI)}}),czm_frameNumber:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.frameState.frameNumber}}),czm_morphTime:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.frameState.morphTime}}),czm_sceneMode:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.frameState.mode}}),czm_pass:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.pass}}),czm_backgroundColor:new QI({size:1,datatype:Ts.FLOAT_VEC4,getValue:function(e){return e.backgroundColor}}),czm_brdfLut:new QI({size:1,datatype:Ts.SAMPLER_2D,getValue:function(e){return e.brdfLut}}),czm_environmentMap:new QI({size:1,datatype:Ts.SAMPLER_CUBE,getValue:function(e){return e.environmentMap}}),czm_specularEnvironmentMaps:new QI({size:1,datatype:Ts.SAMPLER_2D,getValue:function(e){return e.specularEnvironmentMaps}}),czm_specularEnvironmentMapSize:new QI({size:1,datatype:Ts.FLOAT_VEC2,getValue:function(e){return e.specularEnvironmentMapsDimensions}}),czm_specularEnvironmentMapsMaximumLOD:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.specularEnvironmentMapsMaximumLOD}}),czm_sphericalHarmonicCoefficients:new QI({size:9,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.sphericalHarmonicCoefficients}}),czm_temeToPseudoFixed:new QI({size:1,datatype:Ts.FLOAT_MAT3,getValue:function(e){return e.temeToPseudoFixedMatrix}}),czm_pixelRatio:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.pixelRatio}}),czm_fogDensity:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.fogDensity}}),czm_imagerySplitPosition:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.imagerySplitPosition}}),czm_geometricToleranceOverMeter:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.geometricToleranceOverMeter}}),czm_minimumDisableDepthTestDistance:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.minimumDisableDepthTestDistance}}),czm_invertClassificationColor:new QI({size:1,datatype:Ts.FLOAT_VEC4,getValue:function(e){return e.invertClassificationColor}}),czm_gamma:new QI({size:1,datatype:Ts.FLOAT,getValue:function(e){return e.gamma}}),czm_ellipsoidRadii:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.radii}}),czm_ellipsoidInverseRadii:new QI({size:1,datatype:Ts.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.oneOverRadii}})};function eM(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}function tM(e,t,n,i){this.name=n,this.value=void 0,this._value=new Mt,this._gl=e,this._location=i}function nM(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}function iM(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}function rM(e,t,n,i){this.name=n,this.value=void 0,this._gl=e,this._location=i,this.textureUnitIndex=void 0}function oM(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}function aM(e,t,n,i){this.name=n,this.value=void 0,this._value=new Mt,this._gl=e,this._location=i}function sM(e,t,n,i){this.name=n,this.value=void 0,this._value=new O,this._gl=e,this._location=i}function cM(e,t,n,i){this.name=n,this.value=void 0,this._value=new he,this._gl=e,this._location=i}eM.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1f(this._location,this.value))},tM.prototype.set=function(){var e=this.value;Mt.equals(e,this._value)||(Mt.clone(e,this._value),this._gl.uniform2f(this._location,e.x,e.y))},nM.prototype.set=function(){var e=this.value;if(Object(o.a)(e.red))Hf.equals(e,this._value)||(this._value=Hf.clone(e,this._value),this._gl.uniform3f(this._location,e.red,e.green,e.blue));else{if(!Object(o.a)(e.x))throw new a.a('Invalid vec3 value for uniform "'+this.name+'".');O.equals(e,this._value)||(this._value=O.clone(e,this._value),this._gl.uniform3f(this._location,e.x,e.y,e.z))}},iM.prototype.set=function(){var e=this.value;if(Object(o.a)(e.red))Hf.equals(e,this._value)||(this._value=Hf.clone(e,this._value),this._gl.uniform4f(this._location,e.red,e.green,e.blue,e.alpha));else{if(!Object(o.a)(e.x))throw new a.a('Invalid vec4 value for uniform "'+this.name+'".');he.equals(e,this._value)||(this._value=he.clone(e,this._value),this._gl.uniform4f(this._location,e.x,e.y,e.z,e.w))}},rM.prototype.set=function(){var e=this._gl;e.activeTexture(e.TEXTURE0+this.textureUnitIndex);var t=this.value;e.bindTexture(t._target,t._texture)},rM.prototype._setSampler=function(e){return this.textureUnitIndex=e,this._gl.uniform1i(this._location,e),e+1},oM.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1i(this._location,this.value))},aM.prototype.set=function(){var e=this.value;Mt.equals(e,this._value)||(Mt.clone(e,this._value),this._gl.uniform2i(this._location,e.x,e.y))},sM.prototype.set=function(){var e=this.value;O.equals(e,this._value)||(O.clone(e,this._value),this._gl.uniform3i(this._location,e.x,e.y,e.z))},cM.prototype.set=function(){var e=this.value;he.equals(e,this._value)||(he.clone(e,this._value),this._gl.uniform4i(this._location,e.x,e.y,e.z,e.w))};var lM=new Float32Array(4);function uM(e,t,n,i){this.name=n,this.value=void 0,this._value=new El,this._gl=e,this._location=i}uM.prototype.set=function(){if(!El.equalsArray(this.value,this._value,0)){El.clone(this.value,this._value);var e=El.toArray(this.value,lM);this._gl.uniformMatrix2fv(this._location,!1,e)}};var hM=new Float32Array(9);function dM(e,t,n,i){this.name=n,this.value=void 0,this._value=new oe,this._gl=e,this._location=i}dM.prototype.set=function(){if(!oe.equalsArray(this.value,this._value,0)){oe.clone(this.value,this._value);var e=oe.toArray(this.value,hM);this._gl.uniformMatrix3fv(this._location,!1,e)}};var fM=new Float32Array(16);function pM(e,t,n,i){this.name=n,this.value=void 0,this._value=new Ae,this._gl=e,this._location=i}pM.prototype.set=function(){if(!Ae.equalsArray(this.value,this._value,0)){Ae.clone(this.value,this._value);var e=Ae.toArray(this.value,fM);this._gl.uniformMatrix4fv(this._location,!1,e)}};var mM=function(e,t,n,i){switch(t.type){case e.FLOAT:return new eM(e,t,n,i);case e.FLOAT_VEC2:return new tM(e,t,n,i);case e.FLOAT_VEC3:return new nM(e,t,n,i);case e.FLOAT_VEC4:return new iM(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new rM(e,t,n,i);case e.INT:case e.BOOL:return new oM(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new aM(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new sM(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new cM(e,t,n,i);case e.FLOAT_MAT2:return new uM(e,t,n,i);case e.FLOAT_MAT3:return new dM(e,t,n,i);case e.FLOAT_MAT4:return new pM(e,t,n,i);default:throw new de.a("Unrecognized uniform type: "+t.type+' for uniform "'+n+'".')}};function gM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(r),this._gl=e,this._location=i[0]}function vM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(2*r),this._gl=e,this._location=i[0]}function _M(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(3*r),this._gl=e,this._location=i[0]}function bM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(4*r),this._gl=e,this._location=i[0]}function yM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(r),this._gl=e,this._locations=i,this.textureUnitIndex=void 0}function wM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Int32Array(r),this._gl=e,this._location=i[0]}function OM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Int32Array(2*r),this._gl=e,this._location=i[0]}function CM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Int32Array(3*r),this._gl=e,this._location=i[0]}function EM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Int32Array(4*r),this._gl=e,this._location=i[0]}function AM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(4*r),this._gl=e,this._location=i[0]}function xM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(9*r),this._gl=e,this._location=i[0]}function TM(e,t,n,i){var r=i.length;this.name=n,this.value=new Array(r),this._value=new Float32Array(16*r),this._gl=e,this._location=i[0]}gM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0;r<t;++r){var o=e[r];o!==n[r]&&(n[r]=o,i=!0)}i&&this._gl.uniform1fv(this._location,n)},vM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];Mt.equalsArray(a,n,r)||(Mt.pack(a,n,r),i=!0),r+=2}i&&this._gl.uniform2fv(this._location,n)},_M.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,s=0;s<t;++s){var c=e[s];if(Object(o.a)(c.red))c.red===n[r]&&c.green===n[r+1]&&c.blue===n[r+2]||(n[r]=c.red,n[r+1]=c.green,n[r+2]=c.blue,i=!0);else{if(!Object(o.a)(c.x))throw new a.a("Invalid vec3 value.");O.equalsArray(c,n,r)||(O.pack(c,n,r),i=!0)}r+=3}i&&this._gl.uniform3fv(this._location,n)},bM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,s=0;s<t;++s){var c=e[s];if(Object(o.a)(c.red))Hf.equalsArray(c,n,r)||(Hf.pack(c,n,r),i=!0);else{if(!Object(o.a)(c.x))throw new a.a("Invalid vec4 value.");he.equalsArray(c,n,r)||(he.pack(c,n,r),i=!0)}r+=4}i&&this._gl.uniform4fv(this._location,n)},yM.prototype.set=function(){for(var e=this._gl,t=e.TEXTURE0+this.textureUnitIndex,n=this.value,i=n.length,r=0;r<i;++r){var o=n[r];e.activeTexture(t+r),e.bindTexture(o._target,o._texture)}},yM.prototype._setSampler=function(e){this.textureUnitIndex=e;for(var t=this._locations,n=t.length,i=0;i<n;++i){var r=e+i;this._gl.uniform1i(t[i],r)}return e+n},wM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0;r<t;++r){var o=e[r];o!==n[r]&&(n[r]=o,i=!0)}i&&this._gl.uniform1iv(this._location,n)},OM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];Mt.equalsArray(a,n,r)||(Mt.pack(a,n,r),i=!0),r+=2}i&&this._gl.uniform2iv(this._location,n)},CM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];O.equalsArray(a,n,r)||(O.pack(a,n,r),i=!0),r+=3}i&&this._gl.uniform3iv(this._location,n)},EM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];he.equalsArray(a,n,r)||(he.pack(a,n,r),i=!0),r+=4}i&&this._gl.uniform4iv(this._location,n)},AM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];El.equalsArray(a,n,r)||(El.pack(a,n,r),i=!0),r+=4}i&&this._gl.uniformMatrix2fv(this._location,!1,n)},xM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];oe.equalsArray(a,n,r)||(oe.pack(a,n,r),i=!0),r+=9}i&&this._gl.uniformMatrix3fv(this._location,!1,n)},TM.prototype.set=function(){for(var e=this.value,t=e.length,n=this._value,i=!1,r=0,o=0;o<t;++o){var a=e[o];Ae.equalsArray(a,n,r)||(Ae.pack(a,n,r),i=!0),r+=16}i&&this._gl.uniformMatrix4fv(this._location,!1,n)};var SM=function(e,t,n,i){switch(t.type){case e.FLOAT:return new gM(e,t,n,i);case e.FLOAT_VEC2:return new vM(e,t,n,i);case e.FLOAT_VEC3:return new _M(e,t,n,i);case e.FLOAT_VEC4:return new bM(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new yM(e,t,n,i);case e.INT:case e.BOOL:return new wM(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new OM(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new CM(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new EM(e,t,n,i);case e.FLOAT_MAT2:return new AM(e,t,n,i);case e.FLOAT_MAT3:return new xM(e,t,n,i);case e.FLOAT_MAT4:return new TM(e,t,n,i);default:throw new de.a("Unrecognized uniform type: "+t.type+' for uniform "'+n+'".')}},DM=0;function PM(e){var t=e.vertexShaderText,n=e.fragmentShaderText;"undefined"!==typeof spector&&(t=t.replace(/^#line/gm,"//#line"),n=n.replace(/^#line/gm,"//#line"));var i=function(e,t){var n={};if(!BP.highpFloatSupported||!BP.highpIntSupported){var i,r,o,a,s=IM(e),c=IM(t),l=s.length,u=c.length;for(i=0;i<l;i++)for(r=0;r<u;r++)if(s[i]===c[r]){o=s[i],a="czm_mediump_"+o;var h=new RegExp(o+"\\b","g");t=t.replace(h,a),n[a]=o}}return{fragmentShaderText:t,duplicateUniformNames:n}}(t,n);this._gl=e.gl,this._logShaderCompilation=e.logShaderCompilation,this._debugShaders=e.debugShaders,this._attributeLocations=e.attributeLocations,this._program=void 0,this._numberOfVertexAttributes=void 0,this._vertexAttributes=void 0,this._uniformsByName=void 0,this._uniforms=void 0,this._automaticUniforms=void 0,this._manualUniforms=void 0,this._duplicateUniformNames=i.duplicateUniformNames,this._cachedShader=void 0,this.maximumTextureUnitIndex=void 0,this._vertexShaderSource=e.vertexShaderSource,this._vertexShaderText=e.vertexShaderText,this._fragmentShaderSource=e.fragmentShaderSource,this._fragmentShaderText=i.fragmentShaderText,this.id=DM++}function IM(e){var t=[],n=e.match(/uniform.*?(?![^{]*})(?=[=\[;])/g);if(Object(o.a)(n))for(var i=n.length,r=0;r<i;r++){var a=n[r].trim(),s=a.slice(a.lastIndexOf(" ")+1);t.push(s)}return t}PM.fromCache=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context),e.context.shaderCache.getShaderProgram(e)},PM.replaceCache=function(e){return e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context),e.context.shaderCache.replaceShaderProgram(e)},Object.defineProperties(PM.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},vertexAttributes:{get:function(){return RM(this),this._vertexAttributes}},numberOfVertexAttributes:{get:function(){return RM(this),this._numberOfVertexAttributes}},allUniforms:{get:function(){return RM(this),this._uniformsByName}}});var MM="[Cesium WebGL] ";function RM(e){Object(o.a)(e._program)||function e(t){var n=t._program,i=t._gl,r=function(e,t){var n=t._vertexShaderText,i=t._fragmentShaderText,r=e.createShader(e.VERTEX_SHADER);e.shaderSource(r,n),e.compileShader(r);var a=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(a,i),e.compileShader(a);var s=e.createProgram();e.attachShader(s,r),e.attachShader(s,a),e.deleteShader(r),e.deleteShader(a);var c,l=t._attributeLocations;if(Object(o.a)(l))for(var u in l)l.hasOwnProperty(u)&&e.bindAttribLocation(s,l[u],u);if(e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS)){var h=t._debugShaders;if(!e.getShaderParameter(a,e.COMPILE_STATUS)){if(c=e.getShaderInfoLog(a),console.error(MM+"Fragment shader compile log: "+c),Object(o.a)(h)){var d=h.getTranslatedShaderSource(a);""!==d?console.error(MM+"Translated fragment shader source:\n"+d):console.error(MM+"Fragment shader translation failed.")}throw e.deleteProgram(s),new de.a("Fragment shader failed to compile. Compile log: "+c)}if(!e.getShaderParameter(r,e.COMPILE_STATUS)){if(c=e.getShaderInfoLog(r),console.error(MM+"Vertex shader compile log: "+c),Object(o.a)(h)){var f=h.getTranslatedShaderSource(r);""!==f?console.error(MM+"Translated vertex shader source:\n"+f):console.error(MM+"Vertex shader translation failed.")}throw e.deleteProgram(s),new de.a("Vertex shader failed to compile. Compile log: "+c)}throw c=e.getProgramInfoLog(s),console.error(MM+"Shader program link log: "+c),Object(o.a)(h)&&(console.error(MM+"Translated vertex shader source:\n"+h.getTranslatedShaderSource(r)),console.error(MM+"Translated fragment shader source:\n"+h.getTranslatedShaderSource(a))),e.deleteProgram(s),new de.a("Program failed to link. Link log: "+c)}var p=t._logShaderCompilation;return p&&(c=e.getShaderInfoLog(r),Object(o.a)(c)&&c.length>0&&console.log(MM+"Vertex shader compile log: "+c)),p&&(c=e.getShaderInfoLog(a),Object(o.a)(c)&&c.length>0&&console.log(MM+"Fragment shader compile log: "+c)),p&&(c=e.getProgramInfoLog(s),Object(o.a)(c)&&c.length>0&&console.log(MM+"Shader program link log: "+c)),s}(i,t,t._debugShaders),a=i.getProgramParameter(r,i.ACTIVE_ATTRIBUTES),s=function(e,t){for(var n={},i=[],r=[],a=e.getProgramParameter(t,e.ACTIVE_UNIFORMS),s=0;s<a;++s){var c=e.getActiveUniform(t,s),l=-1!==c.name.indexOf("[0]",c.name.length-"[0]".length)?c.name.slice(0,c.name.length-3):c.name;if(0!==l.indexOf("gl_"))if(c.name.indexOf("[")<0){var u=e.getUniformLocation(t,l);if(null!==u){var h=mM(e,c,l,u);n[l]=h,i.push(h),h._setSampler&&r.push(h)}}else{var d,f,p,m,g=l.indexOf("[");if(g>=0){if(d=n[l.slice(0,g)],!Object(o.a)(d))continue;(f=d._locations).length<=1&&(p=d.value,null!==(m=e.getUniformLocation(t,l))&&(f.push(m),p.push(e.getUniform(t,m))))}else{f=[];for(var v=0;v<c.size;++v)null!==(m=e.getUniformLocation(t,l+"["+v+"]"))&&f.push(m);d=SM(e,c,l,f),n[l]=d,i.push(d),d._setSampler&&r.push(d)}}}return{uniformsByName:n,uniforms:i,samplerUniforms:r}}(i,r),c=function(e,t){var n=[],i=[];for(var r in t)if(t.hasOwnProperty(r)){var a=t[r],s=r,c=e._duplicateUniformNames[s];Object(o.a)(c)&&(a.name=c,s=c);var l=JI[s];Object(o.a)(l)?n.push({uniform:a,automaticUniform:l}):i.push(a)}return{automaticUniforms:n,manualUniforms:i}}(t,s.uniformsByName);t._program=r,t._numberOfVertexAttributes=a,t._vertexAttributes=function(e,t,n){for(var i={},r=0;r<n;++r){var o=e.getActiveAttrib(t,r),a=e.getAttribLocation(t,o.name);i[o.name]={name:o.name,type:o.type,index:a}}return i}(i,r,a),t._uniformsByName=s.uniformsByName,t._uniforms=s.uniforms,t._automaticUniforms=c.automaticUniforms,t._manualUniforms=c.manualUniforms,t.maximumTextureUnitIndex=function(e,t,n){e.useProgram(t);for(var i=0,r=n.length,o=0;o<r;++o)i=n[o]._setSampler(i);return e.useProgram(null),i}(i,r,s.samplerUniforms),n&&t._gl.deleteProgram(n);"undefined"!==typeof spector&&(t._program.__SPECTOR_rebuildProgram=function(n,i,r,o){var a=t._vertexShaderText,s=t._fragmentShaderText,c=/ ! = /g;t._vertexShaderText=n.replace(c," != "),t._fragmentShaderText=i.replace(c," != ");try{e(t),r(t._program)}catch(u){t._vertexShaderText=a,t._fragmentShaderText=s;var l=/(?:Compile|Link) error: ([^]*)/.exec(u.message);o(l?l[1]:u.message)}})}(e)}PM.prototype._bind=function(){RM(this),this._gl.useProgram(this._program)},PM.prototype._setUniforms=function(e,t,n){var i,r;if(Object(o.a)(e)){var s=this._manualUniforms;for(i=s.length,r=0;r<i;++r){var c=s[r];c.value=e[c.name]()}}var l=this._automaticUniforms;for(i=l.length,r=0;r<i;++r){var u=l[r];u.uniform.value=u.automaticUniform.getValue(t)}var h=this._uniforms;for(i=h.length,r=0;r<i;++r)h[r].set();if(n){var d=this._gl,f=this._program;if(d.validateProgram(f),!d.getProgramParameter(f,d.VALIDATE_STATUS))throw new a.a("Program validation failed. Program info log: "+d.getProgramInfoLog(f))}},PM.prototype.isDestroyed=function(){return!1},PM.prototype.destroy=function(){this._cachedShader.cache.releaseShaderProgram(this)},PM.prototype.finalDestroy=function(){return this._gl.deleteProgram(this._program),Ks(this)};var LM=PM;function jM(e,t,n){for(var i=new RegExp("(^|[^\\w])("+e+")($|[^\\w])","g"),r=n.length,o=0;o<r;++o){var a=n[o];n[o]=a.replace(i,"$1"+t+"$3")}}function FM(e,t){-1===t.indexOf(e)&&t.push(e)}function NM(e,t,n){!function(e,t,n){for(var i=n.length,r=0;r<i;++r){var o=n[r];n[r]=o.replace(e,t)}}(new RegExp("#extension\\s+GL_"+e+"\\s+:\\s+[a-zA-Z0-9]+\\s*$","g"),"",n),jM("GL_"+e,t,n)}var zM=function(e,t){var n=/#define OUTPUT_DECLARATION/,i=e.split("\n");if(/#version 300 es/g.test(e))return e;var r,s,c=-1;for(r=0;r<i.length;++r)if(s=i[r],n.test(s)){c=r;break}if(-1===c)throw new a.a("Could not find a #define OUTPUT_DECLARATION!");var l=[];for(r=0;r<10;r++){var u="gl_FragData\\["+r+"\\]",h="czm_out"+r;new RegExp(u,"g").test(e)&&(FM(h,l),jM(u,h,i),i.splice(c,0,"layout(location = "+r+") out vec4 "+h+";"),c+=1)}(function(e,t){for(var n=new RegExp("(^|[^\\w])("+e+")($|[^\\w])","g"),i=t.length,r=0;r<i;++r){var o=t[r];if(n.test(o))return!0}return!1})("gl_FragColor",i)&&(FM("czm_fragColor",l),jM("gl_FragColor","czm_fragColor",i),i.splice(c,0,"layout(location = 0) out vec4 czm_fragColor;"),c+=1);var d=function(e,t){for(var n={},i=e.length,r=[],a=0;a<t.length;++a){var s=t[a],c=/(#ifdef|#if)/g.test(s),l=/#else/g.test(s),u=/#endif/g.test(s);if(c)r.push(s);else if(l){var h=r[r.length-1].replace("ifdef","ifndef");/if/g.test(h)&&(h=h.replace(/(#if\s+)(\S*)([^]*)/,"$1!($2)$3")),r.pop(),r.push(h)}else if(u)r.pop();else if(!/layout/g.test(s))for(var d=0;d<i;++d){var f=e[d];-1!==s.indexOf(f)&&(Object(o.a)(n[f])?n[f]=n[f].filter((function(e){return r.indexOf(e)>=0})):n[f]=r.slice())}}return n}(l,i),f={};for(r=0;r<i.length;r++)for(var p in s=i[r],d){if(d.hasOwnProperty(p))new RegExp("(layout)[^]+(out)[^]+("+p+")[^]+","g").test(s)&&(f[s]=p)}for(var m in f)if(f.hasOwnProperty(m)){var g,v=f[m],_=i.indexOf(m),b=d[v],y=b.length;for(g=0;g<y;g++)i.splice(_,0,b[g]);for(_+=y+1,g=y-1;g>=0;g--)i.splice(_,0,"#endif //"+b[g])}var w=!1;for(r=0;r<i.length;r++)if(/#version/.test(i[r])){i[r]="#version 300 es",w=!0;break}return w||i.splice(0,0,"#version 300 es"),i.splice(1,0,"#define WEBGL_2"),NM("EXT_draw_buffers","WEBGL_2",i),NM("EXT_frag_depth","WEBGL_2",i),NM("OES_standard_derivatives","WEBGL_2",i),jM("texture2D","texture",i),jM("texture3D","texture",i),jM("textureCube","texture",i),jM("gl_FragDepthEXT","gl_FragDepth",i),t?jM("varying","in",i):(jM("attribute","in",i),jM("varying","out",i)),function(e){for(var t="",n=e.length,i=0;i<n;++i)t+=e[i]+"\n";return t}(i)},kM={czm_degreesPerRadian:"/**\n * A built-in GLSL floating-point constant for converting radians to degrees.\n *\n * @alias czm_degreesPerRadian\n * @glslConstant\n *\n * @see CesiumMath.DEGREES_PER_RADIAN\n *\n * @example\n * // GLSL declaration\n * const float czm_degreesPerRadian = ...;\n *\n * // Example\n * float deg = czm_degreesPerRadian * rad;\n */\nconst float czm_degreesPerRadian = 57.29577951308232;\n",czm_depthRange:"/**\n * A built-in GLSL vec2 constant for defining the depth range.\n * This is a workaround to a bug where IE11 does not implement gl_DepthRange.\n *\n * @alias czm_depthRange\n * @glslConstant\n *\n * @example\n * // GLSL declaration\n * float depthRangeNear = czm_depthRange.near;\n * float depthRangeFar = czm_depthRange.far;\n *\n */\nconst czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0);\n",czm_epsilon1:"/**\n * 0.1\n *\n * @name czm_epsilon1\n * @glslConstant\n */\nconst float czm_epsilon1 = 0.1;\n",czm_epsilon2:"/**\n * 0.01\n *\n * @name czm_epsilon2\n * @glslConstant\n */\nconst float czm_epsilon2 = 0.01;\n",czm_epsilon3:"/**\n * 0.001\n *\n * @name czm_epsilon3\n * @glslConstant\n */\nconst float czm_epsilon3 = 0.001;\n",czm_epsilon4:"/**\n * 0.0001\n *\n * @name czm_epsilon4\n * @glslConstant\n */\nconst float czm_epsilon4 = 0.0001;\n",czm_epsilon5:"/**\n * 0.00001\n *\n * @name czm_epsilon5\n * @glslConstant\n */\nconst float czm_epsilon5 = 0.00001;\n",czm_epsilon6:"/**\n * 0.000001\n *\n * @name czm_epsilon6\n * @glslConstant\n */\nconst float czm_epsilon6 = 0.000001;\n",czm_epsilon7:"/**\n * 0.0000001\n *\n * @name czm_epsilon7\n * @glslConstant\n */\nconst float czm_epsilon7 = 0.0000001;\n",czm_infinity:"/**\n * DOC_TBA\n *\n * @name czm_infinity\n * @glslConstant\n */\nconst float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp?\n",czm_oneOverPi:"/**\n * A built-in GLSL floating-point constant for <code>1/pi</code>.\n *\n * @alias czm_oneOverPi\n * @glslConstant\n *\n * @see CesiumMath.ONE_OVER_PI\n *\n * @example\n * // GLSL declaration\n * const float czm_oneOverPi = ...;\n *\n * // Example\n * float pi = 1.0 / czm_oneOverPi;\n */\nconst float czm_oneOverPi = 0.3183098861837907;\n",czm_oneOverTwoPi:"/**\n * A built-in GLSL floating-point constant for <code>1/2pi</code>.\n *\n * @alias czm_oneOverTwoPi\n * @glslConstant\n *\n * @see CesiumMath.ONE_OVER_TWO_PI\n *\n * @example\n * // GLSL declaration\n * const float czm_oneOverTwoPi = ...;\n *\n * // Example\n * float pi = 2.0 * czm_oneOverTwoPi;\n */\nconst float czm_oneOverTwoPi = 0.15915494309189535;\n",czm_passCesium3DTile:"/**\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE}\n *\n * @name czm_passCesium3DTile\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passCesium3DTile = 4.0;\n",czm_passCesium3DTileClassification:"/**\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION}\n *\n * @name czm_passCesium3DTileClassification\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passCesium3DTileClassification = 5.0;\n",czm_passCesium3DTileClassificationIgnoreShow:"/**\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW}\n *\n * @name czm_passCesium3DTileClassificationIgnoreShow\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passCesium3DTileClassificationIgnoreShow = 6.0;\n",czm_passClassification:"/**\n * The automatic GLSL constant for {@link Pass#CLASSIFICATION}\n *\n * @name czm_passClassification\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passClassification = 7.0;\n",czm_passCompute:"/**\n * The automatic GLSL constant for {@link Pass#COMPUTE}\n *\n * @name czm_passCompute\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passCompute = 1.0;\n",czm_passEnvironment:"/**\n * The automatic GLSL constant for {@link Pass#ENVIRONMENT}\n *\n * @name czm_passEnvironment\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passEnvironment = 0.0;\n",czm_passGlobe:"/**\n * The automatic GLSL constant for {@link Pass#GLOBE}\n *\n * @name czm_passGlobe\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passGlobe = 2.0;\n",czm_passOpaque:"/**\n * The automatic GLSL constant for {@link Pass#OPAQUE}\n *\n * @name czm_passOpaque\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passOpaque = 7.0;\n",czm_passOverlay:"/**\n * The automatic GLSL constant for {@link Pass#OVERLAY}\n *\n * @name czm_passOverlay\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passOverlay = 9.0;\n",czm_passTerrainClassification:"/**\n * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION}\n *\n * @name czm_passTerrainClassification\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passTerrainClassification = 3.0;\n",czm_passTranslucent:"/**\n * The automatic GLSL constant for {@link Pass#TRANSLUCENT}\n *\n * @name czm_passTranslucent\n * @glslConstant\n *\n * @see czm_pass\n */\nconst float czm_passTranslucent = 8.0;\n",czm_pi:"/**\n * A built-in GLSL floating-point constant for <code>Math.PI</code>.\n *\n * @alias czm_pi\n * @glslConstant\n *\n * @see CesiumMath.PI\n *\n * @example\n * // GLSL declaration\n * const float czm_pi = ...;\n *\n * // Example\n * float twoPi = 2.0 * czm_pi;\n */\nconst float czm_pi = 3.141592653589793;\n",czm_piOverFour:"/**\n * A built-in GLSL floating-point constant for <code>pi/4</code>.\n *\n * @alias czm_piOverFour\n * @glslConstant\n *\n * @see CesiumMath.PI_OVER_FOUR\n *\n * @example\n * // GLSL declaration\n * const float czm_piOverFour = ...;\n *\n * // Example\n * float pi = 4.0 * czm_piOverFour;\n */\nconst float czm_piOverFour = 0.7853981633974483;\n",czm_piOverSix:"/**\n * A built-in GLSL floating-point constant for <code>pi/6</code>.\n *\n * @alias czm_piOverSix\n * @glslConstant\n *\n * @see CesiumMath.PI_OVER_SIX\n *\n * @example\n * // GLSL declaration\n * const float czm_piOverSix = ...;\n *\n * // Example\n * float pi = 6.0 * czm_piOverSix;\n */\nconst float czm_piOverSix = 0.5235987755982988;\n",czm_piOverThree:"/**\n * A built-in GLSL floating-point constant for <code>pi/3</code>.\n *\n * @alias czm_piOverThree\n * @glslConstant\n *\n * @see CesiumMath.PI_OVER_THREE\n *\n * @example\n * // GLSL declaration\n * const float czm_piOverThree = ...;\n *\n * // Example\n * float pi = 3.0 * czm_piOverThree;\n */\nconst float czm_piOverThree = 1.0471975511965976;\n",czm_piOverTwo:"/**\n * A built-in GLSL floating-point constant for <code>pi/2</code>.\n *\n * @alias czm_piOverTwo\n * @glslConstant\n *\n * @see CesiumMath.PI_OVER_TWO\n *\n * @example\n * // GLSL declaration\n * const float czm_piOverTwo = ...;\n *\n * // Example\n * float pi = 2.0 * czm_piOverTwo;\n */\nconst float czm_piOverTwo = 1.5707963267948966;\n",czm_radiansPerDegree:"/**\n * A built-in GLSL floating-point constant for converting degrees to radians.\n *\n * @alias czm_radiansPerDegree\n * @glslConstant\n *\n * @see CesiumMath.RADIANS_PER_DEGREE\n *\n * @example\n * // GLSL declaration\n * const float czm_radiansPerDegree = ...;\n *\n * // Example\n * float rad = czm_radiansPerDegree * deg;\n */\nconst float czm_radiansPerDegree = 0.017453292519943295;\n",czm_sceneMode2D:"/**\n * The constant identifier for the 2D {@link SceneMode}\n *\n * @name czm_sceneMode2D\n * @glslConstant\n * @see czm_sceneMode\n * @see czm_sceneModeColumbusView\n * @see czm_sceneMode3D\n * @see czm_sceneModeMorphing\n */\nconst float czm_sceneMode2D = 2.0;\n",czm_sceneMode3D:"/**\n * The constant identifier for the 3D {@link SceneMode}\n *\n * @name czm_sceneMode3D\n * @glslConstant\n * @see czm_sceneMode\n * @see czm_sceneMode2D\n * @see czm_sceneModeColumbusView\n * @see czm_sceneModeMorphing\n */\nconst float czm_sceneMode3D = 3.0;\n",czm_sceneModeColumbusView:"/**\n * The constant identifier for the Columbus View {@link SceneMode}\n *\n * @name czm_sceneModeColumbusView\n * @glslConstant\n * @see czm_sceneMode\n * @see czm_sceneMode2D\n * @see czm_sceneMode3D\n * @see czm_sceneModeMorphing\n */\nconst float czm_sceneModeColumbusView = 1.0;\n",czm_sceneModeMorphing:"/**\n * The constant identifier for the Morphing {@link SceneMode}\n *\n * @name czm_sceneModeMorphing\n * @glslConstant\n * @see czm_sceneMode\n * @see czm_sceneMode2D\n * @see czm_sceneModeColumbusView\n * @see czm_sceneMode3D\n */\nconst float czm_sceneModeMorphing = 0.0;\n",czm_solarRadius:"/**\n * A built-in GLSL floating-point constant for one solar radius.\n *\n * @alias czm_solarRadius\n * @glslConstant\n *\n * @see CesiumMath.SOLAR_RADIUS\n *\n * @example\n * // GLSL declaration\n * const float czm_solarRadius = ...;\n */\nconst float czm_solarRadius = 695500000.0;\n",czm_threePiOver2:"/**\n * A built-in GLSL floating-point constant for <code>3pi/2</code>.\n *\n * @alias czm_threePiOver2\n * @glslConstant\n *\n * @see CesiumMath.THREE_PI_OVER_TWO\n *\n * @example\n * // GLSL declaration\n * const float czm_threePiOver2 = ...;\n *\n * // Example\n * float pi = (2.0 / 3.0) * czm_threePiOver2;\n */\nconst float czm_threePiOver2 = 4.71238898038469;\n",czm_twoPi:"/**\n * A built-in GLSL floating-point constant for <code>2pi</code>.\n *\n * @alias czm_twoPi\n * @glslConstant\n *\n * @see CesiumMath.TWO_PI\n *\n * @example\n * // GLSL declaration\n * const float czm_twoPi = ...;\n *\n * // Example\n * float pi = czm_twoPi / 2.0;\n */\nconst float czm_twoPi = 6.283185307179586;\n",czm_webMercatorMaxLatitude:"/**\n * The maximum latitude, in radians, both North and South, supported by a Web Mercator\n * (EPSG:3857) projection. Technically, the Mercator projection is defined\n * for any latitude up to (but not including) 90 degrees, but it makes sense\n * to cut it off sooner because it grows exponentially with increasing latitude.\n * The logic behind this particular cutoff value, which is the one used by\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\n * square. That is, the rectangle is equal in the X and Y directions.\n *\n * The constant value is computed as follows:\n * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))\n *\n * @name czm_webMercatorMaxLatitude\n * @glslConstant\n */\nconst float czm_webMercatorMaxLatitude = 1.4844222297453324;\n",czm_depthRangeStruct:"/**\n * @name czm_depthRangeStruct\n * @glslStruct\n */\nstruct czm_depthRangeStruct\n{\n float near;\n float far;\n};\n",czm_material:"/**\n * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.\n *\n * @name czm_material\n * @glslStruct\n *\n * @property {vec3} diffuse Incoming light that scatters evenly in all directions.\n * @property {float} specular Intensity of incoming light reflecting in a single direction.\n * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.\n * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.\n * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.\n * @property {float} alpha Opacity of this material. 0.0 is completely transparent; 1.0 is completely opaque.\n */\nstruct czm_material\n{\n vec3 diffuse;\n float specular;\n float shininess;\n vec3 normal;\n vec3 emission;\n float alpha;\n};\n",czm_materialInput:"/**\n * Used as input to every material's czm_getMaterial function.\n *\n * @name czm_materialInput\n * @glslStruct\n *\n * @property {float} s 1D texture coordinates.\n * @property {vec2} st 2D texture coordinates.\n * @property {vec3} str 3D texture coordinates.\n * @property {vec3} normalEC Unperturbed surface normal in eye coordinates.\n * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.\n * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye.\n * @property {float} height The height of the terrain in meters above or below the WGS84 ellipsoid. Only available for globe materials.\n * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.\n * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.\n */\nstruct czm_materialInput\n{\n float s;\n vec2 st;\n vec3 str;\n vec3 normalEC;\n mat3 tangentToEyeMatrix;\n vec3 positionToEyeEC;\n float height;\n float slope;\n float aspect;\n};\n",czm_ray:"/**\n * DOC_TBA\n *\n * @name czm_ray\n * @glslStruct\n */\nstruct czm_ray\n{\n vec3 origin;\n vec3 direction;\n};\n",czm_raySegment:"/**\n * DOC_TBA\n *\n * @name czm_raySegment\n * @glslStruct\n */\nstruct czm_raySegment\n{\n float start;\n float stop;\n};\n\n/**\n * DOC_TBA\n *\n * @name czm_emptyRaySegment\n * @glslConstant \n */\nconst czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);\n\n/**\n * DOC_TBA\n *\n * @name czm_fullRaySegment\n * @glslConstant \n */\nconst czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);\n",czm_shadowParameters:"struct czm_shadowParameters\n{\n#ifdef USE_CUBE_MAP_SHADOW\n vec3 texCoords;\n#else\n vec2 texCoords;\n#endif\n\n float depthBias;\n float depth;\n float nDotL;\n vec2 texelStepSize;\n float normalShadingSmooth;\n float darkness;\n};\n",czm_acesTonemapping:"// See:\n// https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/\n\nvec3 czm_acesTonemapping(vec3 color) {\n float g = 0.985;\n float a = 0.065;\n float b = 0.0001;\n float c = 0.433;\n float d = 0.238;\n\n color = (color * (color + a) - b) / (color * (g * color + c) + d);\n\n color = clamp(color, 0.0, 1.0);\n\n return color;\n}\n",czm_alphaWeight:"/**\n * @private\n */\nfloat czm_alphaWeight(float a)\n{\n float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\n\n // See Weighted Blended Order-Independent Transparency for examples of different weighting functions:\n // http://jcgt.org/published/0002/02/09/\n return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0))));\n}\n",czm_antialias:"/**\n * Procedural anti-aliasing by blurring two colors that meet at a sharp edge.\n *\n * @name czm_antialias\n * @glslFunction\n *\n * @param {vec4} color1 The color on one side of the edge.\n * @param {vec4} color2 The color on the other side of the edge.\n * @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>.\n * @param {float} dist The distance to the edge in texture coordinates.\n * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors.\n * @returns {vec4} The anti-aliased color.\n *\n * @example\n * // GLSL declarations\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor);\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist);\n *\n * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space\n * float dist = abs(textureCoordinates.t - 0.5);\n * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t));\n * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1);\n */\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor)\n{\n float val1 = clamp(dist / fuzzFactor, 0.0, 1.0);\n float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0);\n val1 = val1 * (1.0 - val2);\n val1 = val1 * val1 * (3.0 - (2.0 * val1));\n val1 = pow(val1, 0.5); //makes the transition nicer\n \n vec4 midColor = (color1 + color2) * 0.5;\n return mix(midColor, currentColor, val1);\n}\n\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist)\n{\n return czm_antialias(color1, color2, currentColor, dist, 0.1);\n}\n",czm_approximateSphericalCoordinates:"/**\n * Approximately computes spherical coordinates given a normal.\n * Uses approximate inverse trigonometry for speed and consistency,\n * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU.\n *\n * @name czm_approximateSphericalCoordinates\n * @glslFunction\n *\n * @param {vec3} normal arbitrary-length normal.\n *\n * @returns {vec2} Approximate latitude and longitude spherical coordinates.\n */\nvec2 czm_approximateSphericalCoordinates(vec3 normal) {\n // Project into plane with vertical for latitude\n float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z);\n float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y);\n return vec2(latitudeApproximation, longitudeApproximation);\n}\n",czm_backFacing:"/**\n * Determines if the fragment is back facing\n *\n * @name czm_backFacing\n * @glslFunction \n * \n * @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>.\n */\nbool czm_backFacing()\n{\n // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494.\n return gl_FrontFacing == false;\n}\n",czm_branchFreeTernary:"/**\n * Branchless ternary operator to be used when it's inexpensive to explicitly\n * evaluate both possibilities for a float expression.\n *\n * @name czm_branchFreeTernary\n * @glslFunction\n *\n * @param {bool} comparison A comparison statement\n * @param {float} a Value to return if the comparison is true.\n * @param {float} b Value to return if the comparison is false.\n *\n * @returns {float} equivalent of comparison ? a : b\n */\nfloat czm_branchFreeTernary(bool comparison, float a, float b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n}\n\n/**\n * Branchless ternary operator to be used when it's inexpensive to explicitly\n * evaluate both possibilities for a vec2 expression.\n *\n * @name czm_branchFreeTernary\n * @glslFunction\n *\n * @param {bool} comparison A comparison statement\n * @param {vec2} a Value to return if the comparison is true.\n * @param {vec2} b Value to return if the comparison is false.\n *\n * @returns {vec2} equivalent of comparison ? a : b\n */\nvec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n}\n\n/**\n * Branchless ternary operator to be used when it's inexpensive to explicitly\n * evaluate both possibilities for a vec3 expression.\n *\n * @name czm_branchFreeTernary\n * @glslFunction\n *\n * @param {bool} comparison A comparison statement\n * @param {vec3} a Value to return if the comparison is true.\n * @param {vec3} b Value to return if the comparison is false.\n *\n * @returns {vec3} equivalent of comparison ? a : b\n */\nvec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n}\n\n/**\n * Branchless ternary operator to be used when it's inexpensive to explicitly\n * evaluate both possibilities for a vec4 expression.\n *\n * @name czm_branchFreeTernary\n * @glslFunction\n *\n * @param {bool} comparison A comparison statement\n * @param {vec3} a Value to return if the comparison is true.\n * @param {vec3} b Value to return if the comparison is false.\n *\n * @returns {vec3} equivalent of comparison ? a : b\n */\nvec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) {\n float useA = float(comparison);\n return a * useA + b * (1.0 - useA);\n}\n",czm_cascadeColor:"\nvec4 czm_cascadeColor(vec4 weights)\n{\n return vec4(1.0, 0.0, 0.0, 1.0) * weights.x +\n vec4(0.0, 1.0, 0.0, 1.0) * weights.y +\n vec4(0.0, 0.0, 1.0, 1.0) * weights.z +\n vec4(1.0, 0.0, 1.0, 1.0) * weights.w;\n}\n",czm_cascadeDistance:"\nuniform vec4 shadowMap_cascadeDistances;\n\nfloat czm_cascadeDistance(vec4 weights)\n{\n return dot(shadowMap_cascadeDistances, weights);\n}\n",czm_cascadeMatrix:"\nuniform mat4 shadowMap_cascadeMatrices[4];\n\nmat4 czm_cascadeMatrix(vec4 weights)\n{\n return shadowMap_cascadeMatrices[0] * weights.x +\n shadowMap_cascadeMatrices[1] * weights.y +\n shadowMap_cascadeMatrices[2] * weights.z +\n shadowMap_cascadeMatrices[3] * weights.w;\n}\n",czm_cascadeWeights:"\nuniform vec4 shadowMap_cascadeSplits[2];\n\nvec4 czm_cascadeWeights(float depthEye)\n{\n // One component is set to 1.0 and all others set to 0.0.\n vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye));\n vec4 far = step(depthEye, shadowMap_cascadeSplits[1]);\n return near * far;\n}\n",czm_columbusViewMorph:"/**\n * DOC_TBA\n *\n * @name czm_columbusViewMorph\n * @glslFunction\n */\nvec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time)\n{\n // Just linear for now.\n vec3 p = mix(position2D.xyz, position3D.xyz, time);\n return vec4(p, 1.0);\n}\n",czm_computePosition:"/**\n * Returns a position in model coordinates relative to eye taking into\n * account the current scene mode: 3D, 2D, or Columbus view.\n * <p>\n * This uses standard position attributes, <code>position3DHigh</code>, \n * <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>, \n * and should be used when writing a vertex shader for an {@link Appearance}.\n * </p>\n *\n * @name czm_computePosition\n * @glslFunction\n *\n * @returns {vec4} The position relative to eye.\n *\n * @example\n * vec4 p = czm_computePosition();\n * v_positionEC = (czm_modelViewRelativeToEye * p).xyz;\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\n *\n * @see czm_translateRelativeToEye\n */\nvec4 czm_computePosition();\n",czm_cosineAndSine:"/**\n * @private\n */\nvec2 cordic(float angle)\n{\n// Scale the vector by the appropriate factor for the 24 iterations to follow.\n vec2 vector = vec2(6.0725293500888267e-1, 0.0);\n// Iteration 1\n float sense = (angle < 0.0) ? -1.0 : 1.0;\n // float factor = sense * 1.0; // 2^-0\n mat2 rotation = mat2(1.0, sense, -sense, 1.0);\n vector = rotation * vector;\n angle -= sense * 7.8539816339744828e-1; // atan(2^-0)\n// Iteration 2\n sense = (angle < 0.0) ? -1.0 : 1.0;\n float factor = sense * 5.0e-1; // 2^-1\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 4.6364760900080609e-1; // atan(2^-1)\n// Iteration 3\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 2.5e-1; // 2^-2\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 2.4497866312686414e-1; // atan(2^-2)\n// Iteration 4\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.25e-1; // 2^-3\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.2435499454676144e-1; // atan(2^-3)\n// Iteration 5\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 6.25e-2; // 2^-4\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 6.2418809995957350e-2; // atan(2^-4)\n// Iteration 6\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 3.125e-2; // 2^-5\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 3.1239833430268277e-2; // atan(2^-5)\n// Iteration 7\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.5625e-2; // 2^-6\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.5623728620476831e-2; // atan(2^-6)\n// Iteration 8\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 7.8125e-3; // 2^-7\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 7.8123410601011111e-3; // atan(2^-7)\n// Iteration 9\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 3.90625e-3; // 2^-8\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 3.9062301319669718e-3; // atan(2^-8)\n// Iteration 10\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.953125e-3; // 2^-9\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.9531225164788188e-3; // atan(2^-9)\n// Iteration 11\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 9.765625e-4; // 2^-10\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 9.7656218955931946e-4; // atan(2^-10)\n// Iteration 12\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 4.8828125e-4; // 2^-11\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 4.8828121119489829e-4; // atan(2^-11)\n// Iteration 13\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 2.44140625e-4; // 2^-12\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 2.4414062014936177e-4; // atan(2^-12)\n// Iteration 14\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.220703125e-4; // 2^-13\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.2207031189367021e-4; // atan(2^-13)\n// Iteration 15\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 6.103515625e-5; // 2^-14\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 6.1035156174208773e-5; // atan(2^-14)\n// Iteration 16\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 3.0517578125e-5; // 2^-15\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 3.0517578115526096e-5; // atan(2^-15)\n// Iteration 17\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.52587890625e-5; // 2^-16\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.5258789061315762e-5; // atan(2^-16)\n// Iteration 18\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 7.62939453125e-6; // 2^-17\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 7.6293945311019700e-6; // atan(2^-17)\n// Iteration 19\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 3.814697265625e-6; // 2^-18\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 3.8146972656064961e-6; // atan(2^-18)\n// Iteration 20\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.9073486328125e-6; // 2^-19\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 1.9073486328101870e-6; // atan(2^-19)\n// Iteration 21\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 9.5367431640625e-7; // 2^-20\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 9.5367431640596084e-7; // atan(2^-20)\n// Iteration 22\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 4.76837158203125e-7; // 2^-21\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 4.7683715820308884e-7; // atan(2^-21)\n// Iteration 23\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 2.384185791015625e-7; // 2^-22\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n angle -= sense * 2.3841857910155797e-7; // atan(2^-22)\n// Iteration 24\n sense = (angle < 0.0) ? -1.0 : 1.0;\n factor = sense * 1.1920928955078125e-7; // 2^-23\n rotation[0][1] = factor;\n rotation[1][0] = -factor;\n vector = rotation * vector;\n// angle -= sense * 1.1920928955078068e-7; // atan(2^-23)\n\n return vector;\n}\n\n/**\n * Computes the cosine and sine of the provided angle using the CORDIC algorithm.\n *\n * @name czm_cosineAndSine\n * @glslFunction\n *\n * @param {float} angle The angle in radians.\n *\n * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).\n *\n * @example\n * vec2 v = czm_cosineAndSine(czm_piOverSix);\n * float cosine = v.x;\n * float sine = v.y;\n */\nvec2 czm_cosineAndSine(float angle)\n{\n if (angle < -czm_piOverTwo || angle > czm_piOverTwo)\n {\n if (angle < 0.0)\n {\n return -cordic(angle + czm_pi);\n }\n else\n {\n return -cordic(angle - czm_pi);\n }\n }\n else\n {\n return cordic(angle);\n }\n}\n",czm_decompressTextureCoordinates:"/**\n * Decompresses texture coordinates that were packed into a single float.\n *\n * @name czm_decompressTextureCoordinates\n * @glslFunction\n *\n * @param {float} encoded The compressed texture coordinates.\n * @returns {vec2} The decompressed texture coordinates.\n */\n vec2 czm_decompressTextureCoordinates(float encoded)\n {\n float temp = encoded / 4096.0;\n float xZeroTo4095 = floor(temp);\n float stx = xZeroTo4095 / 4095.0;\n float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0;\n return vec2(stx, sty);\n }\n",czm_depthClamp:"// emulated noperspective\n#ifndef LOG_DEPTH\nvarying float v_WindowZ;\n#endif\n\n/**\n * Clamps a vertex to the near and far planes.\n *\n * @name czm_depthClamp\n * @glslFunction\n *\n * @param {vec4} coords The vertex in clip coordinates.\n * @returns {vec4} The vertex clipped to the near and far planes.\n *\n * @example\n * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0));\n *\n * @see czm_writeDepthClamp\n */\nvec4 czm_depthClamp(vec4 coords)\n{\n#ifndef LOG_DEPTH\n v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w;\n coords.z = clamp(coords.z, -coords.w, +coords.w);\n#endif\n return coords;\n}\n",czm_eastNorthUpToEyeCoordinates:"/**\n * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system \n * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the \n * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.\n * <br /><br />\n * The ellipsoid is assumed to be centered at the model coordinate's origin.\n *\n * @name czm_eastNorthUpToEyeCoordinates\n * @glslFunction\n *\n * @param {vec3} positionMC The position on the ellipsoid in model coordinates.\n * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.\n *\n * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.\n *\n * @example\n * // Transform a vector defined in the east-north-up coordinate \n * // system, (0, 0, 1) which is the surface normal, to eye \n * // coordinates.\n * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\n * vec3 normalEC = m * vec3(0.0, 0.0, 1.0);\n */\nmat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)\n{\n vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates\n vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordiantes\n vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates\n\n return mat3(\n tangentEC.x, tangentEC.y, tangentEC.z,\n bitangentEC.x, bitangentEC.y, bitangentEC.z,\n normalEC.x, normalEC.y, normalEC.z);\n}\n",czm_ellipsoidContainsPoint:"/**\n * DOC_TBA\n *\n * @name czm_ellipsoidContainsPoint\n * @glslFunction\n *\n */\nbool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)\n{\n vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;\n return (dot(scaled, scaled) <= 1.0);\n}\n",czm_ellipsoidWgs84TextureCoordinates:"/**\n * DOC_TBA\n *\n * @name czm_ellipsoidWgs84TextureCoordinates\n * @glslFunction\n */\nvec2 czm_ellipsoidWgs84TextureCoordinates(vec3 normal)\n{\n return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);\n}\n",czm_equalsEpsilon:"/**\n * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>\n * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs\n * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,\n * <code>vec3</code>s, or <code>vec4</code>s.\n *\n * @name czm_equalsEpsilon\n * @glslFunction\n *\n * @param {} left The first vector.\n * @param {} right The second vector.\n * @param {float} epsilon The epsilon to use for equality testing.\n * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.\n *\n * @example\n * // GLSL declarations\n * bool czm_equalsEpsilon(float left, float right, float epsilon);\n * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);\n * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);\n * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);\n */\nbool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {\n return all(lessThanEqual(abs(left - right), vec4(epsilon)));\n}\n\nbool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {\n return all(lessThanEqual(abs(left - right), vec3(epsilon)));\n}\n\nbool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {\n return all(lessThanEqual(abs(left - right), vec2(epsilon)));\n}\n\nbool czm_equalsEpsilon(float left, float right, float epsilon) {\n return (abs(left - right) <= epsilon);\n}\n",czm_eyeOffset:"/**\n * DOC_TBA\n *\n * @name czm_eyeOffset\n * @glslFunction\n *\n * @param {vec4} positionEC DOC_TBA.\n * @param {vec3} eyeOffset DOC_TBA.\n *\n * @returns {vec4} DOC_TBA.\n */\nvec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)\n{\n // This equation is approximate in x and y.\n vec4 p = positionEC;\n vec4 zEyeOffset = normalize(p) * eyeOffset.z;\n p.xy += eyeOffset.xy + zEyeOffset.xy;\n p.z += zEyeOffset.z;\n return p;\n}\n",czm_eyeToWindowCoordinates:"/**\n * Transforms a position from eye to window coordinates. The transformation\n * from eye to clip coordinates is done using {@link czm_projection}.\n * The transform from normalized device coordinates to window coordinates is\n * done using {@link czm_viewportTransformation}, which assumes a depth range\n * of <code>near = 0</code> and <code>far = 1</code>.\n * <br /><br />\n * This transform is useful when there is a need to manipulate window coordinates\n * in a vertex shader as done by {@link BillboardCollection}.\n *\n * @name czm_eyeToWindowCoordinates\n * @glslFunction\n *\n * @param {vec4} position The position in eye coordinates to transform.\n *\n * @returns {vec4} The transformed position in window coordinates.\n *\n * @see czm_modelToWindowCoordinates\n * @see czm_projection\n * @see czm_viewportTransformation\n * @see BillboardCollection\n *\n * @example\n * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\n */\nvec4 czm_eyeToWindowCoordinates(vec4 positionEC)\n{\n vec4 q = czm_projection * positionEC; // clip coordinates\n q.xyz /= q.w; // normalized device coordinates\n q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\n return q;\n}\n",czm_fastApproximateAtan:"/**\n * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input.\n *\n * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on\n * \"Efficient approximations for the arctangent function,\" Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\n * Adapted from ShaderFastLibs under MIT License.\n *\n * Chosen for the following characteristics over range [0, 1]:\n * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan)\n * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator)\n *\n * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301);\n * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2.\n *\n * @name czm_fastApproximateAtan\n * @glslFunction\n *\n * @param {float} x Value between 0 and 1 inclusive.\n *\n * @returns {float} Approximation of atan(x)\n */\nfloat czm_fastApproximateAtan(float x) {\n return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);\n}\n\n/**\n * Approximation of atan2.\n *\n * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html\n * However, we replaced their atan curve with Michael Drobot's (see above).\n *\n * @name czm_fastApproximateAtan\n * @glslFunction\n *\n * @param {float} x Value between -1 and 1 inclusive.\n * @param {float} y Value between -1 and 1 inclusive.\n *\n * @returns {float} Approximation of atan2(x, y)\n */\nfloat czm_fastApproximateAtan(float x, float y) {\n // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications.\n // So range-reduce using abs and by flipping whether x or y is on top.\n float t = abs(x); // t used as swap and atan result.\n float opposite = abs(y);\n float adjacent = max(t, opposite);\n opposite = min(t, opposite);\n\n t = czm_fastApproximateAtan(opposite / adjacent);\n\n // Undo range reduction\n t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t);\n t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t);\n t = czm_branchFreeTernary(y < 0.0, -t, t);\n return t;\n}\n",czm_fog:"/**\n * Gets the color with fog at a distance from the camera.\n *\n * @name czm_fog\n * @glslFunction\n *\n * @param {float} distanceToCamera The distance to the camera in meters.\n * @param {vec3} color The original color.\n * @param {vec3} fogColor The color of the fog.\n *\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\n */\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor)\n{\n float scalar = distanceToCamera * czm_fogDensity;\n float fog = 1.0 - exp(-(scalar * scalar));\n return mix(color, fogColor, fog);\n}\n\n/**\n * Gets the color with fog at a distance from the camera.\n *\n * @name czm_fog\n * @glslFunction\n *\n * @param {float} distanceToCamera The distance to the camera in meters.\n * @param {vec3} color The original color.\n * @param {vec3} fogColor The color of the fog.\n * @param {float} fogModifierConstant A constant to modify the appearance of fog.\n *\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\n */\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant)\n{\n float scalar = distanceToCamera * czm_fogDensity;\n float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant))));\n return mix(color, fogColor, fog);\n}\n",czm_gammaCorrect:"/**\n * Converts a color from RGB space to linear space.\n *\n * @name czm_gammaCorrect\n * @glslFunction\n *\n * @param {vec3} color The color in RGB space.\n * @returns {vec3} The color in linear space.\n */\nvec3 czm_gammaCorrect(vec3 color) {\n#ifdef HDR\n color = pow(color, vec3(czm_gamma));\n#endif\n return color;\n}\n\nvec4 czm_gammaCorrect(vec4 color) {\n#ifdef HDR\n color.rgb = pow(color.rgb, vec3(czm_gamma));\n#endif\n return color;\n}\n",czm_geodeticSurfaceNormal:"/**\n * DOC_TBA\n *\n * @name czm_geodeticSurfaceNormal\n * @glslFunction\n *\n * @param {vec3} positionOnEllipsoid DOC_TBA\n * @param {vec3} ellipsoidCenter DOC_TBA\n * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA\n * \n * @returns {vec3} DOC_TBA.\n */\nvec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)\n{\n return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);\n}\n",czm_getDefaultMaterial:"/**\n * An czm_material with default values. Every material's czm_getMaterial\n * should use this default material as a base for the material it returns.\n * The default normal value is given by materialInput.normalEC.\n *\n * @name czm_getDefaultMaterial\n * @glslFunction\n *\n * @param {czm_materialInput} input The input used to construct the default material.\n *\n * @returns {czm_material} The default material.\n *\n * @see czm_materialInput\n * @see czm_material\n * @see czm_getMaterial\n */\nczm_material czm_getDefaultMaterial(czm_materialInput materialInput)\n{\n czm_material material;\n material.diffuse = vec3(0.0);\n material.specular = 0.0;\n material.shininess = 1.0;\n material.normal = materialInput.normalEC;\n material.emission = vec3(0.0);\n material.alpha = 1.0;\n return material;\n}\n",czm_getLambertDiffuse:"/**\n * Calculates the intensity of diffusely reflected light.\n *\n * @name czm_getLambertDiffuse\n * @glslFunction\n *\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\n * @param {vec3} normalEC The surface normal in eye coordinates.\n *\n * @returns {float} The intensity of the diffuse reflection.\n *\n * @see czm_phong\n *\n * @example\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\n */\nfloat czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC)\n{\n return max(dot(lightDirectionEC, normalEC), 0.0);\n}\n",czm_getSpecular:"/**\n * Calculates the specular intensity of reflected light.\n *\n * @name czm_getSpecular\n * @glslFunction\n *\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\n * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.\n * @param {vec3} normalEC The surface normal in eye coordinates.\n * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.\n *\n * @returns {float} The intensity of the specular highlight.\n *\n * @see czm_phong\n *\n * @example\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\n */\nfloat czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)\n{\n vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);\n float specular = max(dot(toReflectedLight, toEyeEC), 0.0);\n\n // pow has undefined behavior if both parameters <= 0.\n // Prevent this by making sure shininess is at least czm_epsilon2.\n return pow(specular, max(shininess, czm_epsilon2));\n}\n",czm_getWaterNoise:"/**\n * @private\n */\nvec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians)\n{\n float cosAngle = cos(angleInRadians);\n float sinAngle = sin(angleInRadians);\n\n // time dependent sampling directions\n vec2 s0 = vec2(1.0/17.0, 0.0);\n vec2 s1 = vec2(-1.0/29.0, 0.0);\n vec2 s2 = vec2(1.0/101.0, 1.0/59.0);\n vec2 s3 = vec2(-1.0/109.0, -1.0/57.0);\n\n // rotate sampling direction by specified angle\n s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y));\n s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y));\n s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y));\n s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y));\n\n vec2 uv0 = (uv/103.0) + (time * s0);\n vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23);\n vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51);\n vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71);\n\n uv0 = fract(uv0);\n uv1 = fract(uv1);\n uv2 = fract(uv2);\n uv3 = fract(uv3);\n vec4 noise = (texture2D(normalMap, uv0)) +\n (texture2D(normalMap, uv1)) +\n (texture2D(normalMap, uv2)) +\n (texture2D(normalMap, uv3));\n\n // average and scale to between -1 and 1\n return ((noise / 4.0) - 0.5) * 2.0;\n}\n",czm_HSBToRGB:"/**\n * Converts an HSB color (hue, saturation, brightness) to RGB\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\n *\n * @name czm_HSBToRGB\n * @glslFunction\n * \n * @param {vec3} hsb The color in HSB.\n *\n * @returns {vec3} The color in RGB.\n *\n * @example\n * vec3 hsb = czm_RGBToHSB(rgb);\n * hsb.z *= 0.1;\n * rgb = czm_HSBToRGB(hsb);\n */\n\nconst vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\nvec3 czm_HSBToRGB(vec3 hsb)\n{\n vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www);\n return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y);\n}\n",czm_HSLToRGB:"/**\n * Converts an HSL color (hue, saturation, lightness) to RGB\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\n *\n * @name czm_HSLToRGB\n * @glslFunction\n * \n * @param {vec3} rgb The color in HSL.\n *\n * @returns {vec3} The color in RGB.\n *\n * @example\n * vec3 hsl = czm_RGBToHSL(rgb);\n * hsl.z *= 0.1;\n * rgb = czm_HSLToRGB(hsl);\n */\n\nvec3 hueToRGB(float hue)\n{\n float r = abs(hue * 6.0 - 3.0) - 1.0;\n float g = 2.0 - abs(hue * 6.0 - 2.0);\n float b = 2.0 - abs(hue * 6.0 - 4.0);\n return clamp(vec3(r, g, b), 0.0, 1.0);\n}\n\nvec3 czm_HSLToRGB(vec3 hsl)\n{\n vec3 rgb = hueToRGB(hsl.x);\n float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;\n return (rgb - 0.5) * c + hsl.z;\n}\n",czm_hue:"/**\n * Adjusts the hue of a color.\n * \n * @name czm_hue\n * @glslFunction\n * \n * @param {vec3} rgb The color.\n * @param {float} adjustment The amount to adjust the hue of the color in radians.\n *\n * @returns {float} The color with the hue adjusted.\n *\n * @example\n * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)\n */\nvec3 czm_hue(vec3 rgb, float adjustment)\n{\n const mat3 toYIQ = mat3(0.299, 0.587, 0.114,\n 0.595716, -0.274453, -0.321263,\n 0.211456, -0.522591, 0.311135);\n const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,\n 1.0, -0.2721, -0.6474,\n 1.0, -1.107, 1.7046);\n \n vec3 yiq = toYIQ * rgb;\n float hue = atan(yiq.z, yiq.y) + adjustment;\n float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);\n \n vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));\n return toRGB * color;\n}\n",czm_inverseGamma:"/**\n * Converts a color in linear space to RGB space.\n *\n * @name czm_inverseGamma\n * @glslFunction\n *\n * @param {vec3} color The color in linear space.\n * @returns {vec3} The color in RGB space.\n */\nvec3 czm_inverseGamma(vec3 color) {\n return pow(color, vec3(1.0 / czm_gamma));\n}\n",czm_isEmpty:"/**\n * Determines if a time interval is empty.\n *\n * @name czm_isEmpty\n * @glslFunction \n * \n * @param {czm_raySegment} interval The interval to test.\n * \n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\n *\n * @example\n * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\n */\nbool czm_isEmpty(czm_raySegment interval)\n{\n return (interval.stop < 0.0);\n}\n",czm_isFull:"/**\n * Determines if a time interval is empty.\n *\n * @name czm_isFull\n * @glslFunction \n * \n * @param {czm_raySegment} interval The interval to test.\n * \n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\n *\n * @example\n * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\n */\nbool czm_isFull(czm_raySegment interval)\n{\n return (interval.start == 0.0 && interval.stop == czm_infinity);\n}\n",czm_latitudeToWebMercatorFraction:"/**\n * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located.\n *\n * @name czm_latitudeToWebMercatorFraction\n * @glslFunction\n *\n * @param {float} latitude The geodetic latitude, in radians.\n * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle.\n * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates.\n *\n * @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern\n * boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return\n * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection.\n */ \nfloat czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight)\n{\n float sinLatitude = sin(latitude);\n float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n \n return (mercatorY - southMercatorY) * oneOverMercatorHeight;\n}\n",czm_lineDistance:"/**\n * Computes distance from an point in 2D to a line in 2D.\n *\n * @name czm_lineDistance\n * @glslFunction\n *\n * param {vec2} point1 A point along the line.\n * param {vec2} point2 A point along the line.\n * param {vec2} point A point that may or may not be on the line.\n * returns {float} The distance from the point to the line.\n */\nfloat czm_lineDistance(vec2 point1, vec2 point2, vec2 point) {\n return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1);\n}\n",czm_luminance:"/**\n * Computes the luminance of a color. \n *\n * @name czm_luminance\n * @glslFunction\n *\n * @param {vec3} rgb The color.\n * \n * @returns {float} The luminance.\n *\n * @example\n * float light = czm_luminance(vec3(0.0)); // 0.0\n * float dark = czm_luminance(vec3(1.0)); // ~1.0 \n */\nfloat czm_luminance(vec3 rgb)\n{\n // Algorithm from Chapter 10 of Graphics Shaders.\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n return dot(rgb, W);\n}\n",czm_metersPerPixel:"/**\n * Computes the size of a pixel in meters at a distance from the eye.\n * <p>\n * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.\n * </p>\n * @name czm_metersPerPixel\n * @glslFunction\n *\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\n * @param {float} pixelRatio The scaling factor from pixel space to coordinate space\n *\n * @returns {float} The meters per pixel at positionEC.\n */\nfloat czm_metersPerPixel(vec4 positionEC, float pixelRatio)\n{\n float width = czm_viewport.z;\n float height = czm_viewport.w;\n float pixelWidth;\n float pixelHeight;\n\n float top = czm_frustumPlanes.x;\n float bottom = czm_frustumPlanes.y;\n float left = czm_frustumPlanes.z;\n float right = czm_frustumPlanes.w;\n\n if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)\n {\n float frustumWidth = right - left;\n float frustumHeight = top - bottom;\n pixelWidth = frustumWidth / width;\n pixelHeight = frustumHeight / height;\n }\n else\n {\n float distanceToPixel = -positionEC.z;\n float inverseNear = 1.0 / czm_currentFrustum.x;\n float tanTheta = top * inverseNear;\n pixelHeight = 2.0 * distanceToPixel * tanTheta / height;\n tanTheta = right * inverseNear;\n pixelWidth = 2.0 * distanceToPixel * tanTheta / width;\n }\n\n return max(pixelWidth, pixelHeight) * pixelRatio;\n}\n\n/**\n * Computes the size of a pixel in meters at a distance from the eye.\n * <p>\n * Use this version when scaling by pixel ratio.\n * </p>\n * @name czm_metersPerPixel\n * @glslFunction\n *\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\n *\n * @returns {float} The meters per pixel at positionEC.\n */\nfloat czm_metersPerPixel(vec4 positionEC)\n{\n return czm_metersPerPixel(positionEC, czm_pixelRatio);\n}\n",czm_modelToWindowCoordinates:"/**\n * Transforms a position from model to window coordinates. The transformation\n * from model to clip coordinates is done using {@link czm_modelViewProjection}.\n * The transform from normalized device coordinates to window coordinates is\n * done using {@link czm_viewportTransformation}, which assumes a depth range\n * of <code>near = 0</code> and <code>far = 1</code>.\n * <br /><br />\n * This transform is useful when there is a need to manipulate window coordinates\n * in a vertex shader as done by {@link BillboardCollection}.\n * <br /><br />\n * This function should not be confused with {@link czm_viewportOrthographic},\n * which is an orthographic projection matrix that transforms from window \n * coordinates to clip coordinates.\n *\n * @name czm_modelToWindowCoordinates\n * @glslFunction\n *\n * @param {vec4} position The position in model coordinates to transform.\n *\n * @returns {vec4} The transformed position in window coordinates.\n *\n * @see czm_eyeToWindowCoordinates\n * @see czm_modelViewProjection\n * @see czm_viewportTransformation\n * @see czm_viewportOrthographic\n * @see BillboardCollection\n *\n * @example\n * vec4 positionWC = czm_modelToWindowCoordinates(positionMC);\n */\nvec4 czm_modelToWindowCoordinates(vec4 position)\n{\n vec4 q = czm_modelViewProjection * position; // clip coordinates\n q.xyz /= q.w; // normalized device coordinates\n q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\n return q;\n}\n",czm_multiplyWithColorBalance:"/**\n * DOC_TBA\n *\n * @name czm_multiplyWithColorBalance\n * @glslFunction\n */\nvec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)\n{\n // Algorithm from Chapter 10 of Graphics Shaders.\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n \n vec3 target = left * right;\n float leftLuminance = dot(left, W);\n float rightLuminance = dot(right, W);\n float targetLuminance = dot(target, W);\n \n return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;\n}\n",czm_nearFarScalar:"/**\n * Computes a value that scales with distance. The scaling is clamped at the near and\n * far distances, and does not extrapolate. This function works with the\n * {@link NearFarScalar} JavaScript class.\n *\n * @name czm_nearFarScalar\n * @glslFunction\n *\n * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w).\n * @param {float} cameraDistSq The square of the current distance from the camera.\n *\n * @returns {float} The value at this distance.\n */\nfloat czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq)\n{\n float valueAtMin = nearFarScalar.y;\n float valueAtMax = nearFarScalar.w;\n float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;\n float farDistanceSq = nearFarScalar.z * nearFarScalar.z;\n\n float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);\n\n t = pow(clamp(t, 0.0, 1.0), 0.2);\n\n return mix(valueAtMin, valueAtMax, t);\n}\n",czm_octDecode:" /**\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\n *\n * @name czm_octDecode\n * @param {vec2} encoded The oct-encoded, unit-length vector\n * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @returns {vec3} The decoded and normalized vector\n */\n vec3 czm_octDecode(vec2 encoded, float range)\n {\n if (encoded.x == 0.0 && encoded.y == 0.0) {\n return vec3(0.0, 0.0, 0.0);\n }\n\n encoded = encoded / range * 2.0 - 1.0;\n vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));\n if (v.z < 0.0)\n {\n v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy);\n }\n\n return normalize(v);\n }\n\n/**\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\n *\n * @name czm_octDecode\n * @param {vec2} encoded The oct-encoded, unit-length vector\n * @returns {vec3} The decoded and normalized vector\n */\n vec3 czm_octDecode(vec2 encoded)\n {\n return czm_octDecode(encoded, 255.0);\n }\n\n /**\n * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\n *\n * @name czm_octDecode\n * @param {float} encoded The oct-encoded, unit-length vector\n * @returns {vec3} The decoded and normalized vector\n */\n vec3 czm_octDecode(float encoded)\n {\n float temp = encoded / 256.0;\n float x = floor(temp);\n float y = (temp - x) * 256.0;\n return czm_octDecode(vec2(x, y));\n }\n\n/**\n * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\n *\n * @name czm_octDecode\n * @param {vec2} encoded The packed oct-encoded, unit-length vectors.\n * @param {vec3} vector1 One decoded and normalized vector.\n * @param {vec3} vector2 One decoded and normalized vector.\n * @param {vec3} vector3 One decoded and normalized vector.\n */\n void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3)\n {\n float temp = encoded.x / 65536.0;\n float x = floor(temp);\n float encodedFloat1 = (temp - x) * 65536.0;\n\n temp = encoded.y / 65536.0;\n float y = floor(temp);\n float encodedFloat2 = (temp - y) * 65536.0;\n\n vector1 = czm_octDecode(encodedFloat1);\n vector2 = czm_octDecode(encodedFloat2);\n vector3 = czm_octDecode(vec2(x, y));\n }\n\n",czm_packDepth:"/**\n * Packs a depth value into a vec3 that can be represented by unsigned bytes.\n *\n * @name czm_packDepth\n * @glslFunction\n *\n * @param {float} depth The floating-point depth.\n * @returns {vec3} The packed depth.\n */\nvec4 czm_packDepth(float depth)\n{\n // See Aras Pranckevi\u010dius' post Encoding Floats to RGBA\n // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\n enc = fract(enc);\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n return enc;\n}\n",czm_phong:"float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material)\n{\n return czm_getLambertDiffuse(lightDirectionEC, material.normal);\n}\n\nfloat czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material)\n{\n return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess);\n}\n\n/**\n * Computes a color using the Phong lighting model.\n *\n * @name czm_phong\n * @glslFunction\n *\n * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.\n * @param {czm_material} material The fragment's material.\n *\n * @returns {vec4} The computed color.\n *\n * @example\n * vec3 positionToEyeEC = // ...\n * czm_material material = // ...\n * vec3 lightDirectionEC = // ...\n * gl_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC);\n *\n * @see czm_getMaterial\n */\nvec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\n{\n // Diffuse from directional light sources at eye (for top-down)\n float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material);\n if (czm_sceneMode == czm_sceneMode3D) {\n // (and horizon views in 3D)\n diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material);\n }\n\n float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\n\n // Temporary workaround for adding ambient.\n vec3 materialDiffuse = material.diffuse * 0.5;\n\n vec3 ambient = materialDiffuse;\n vec3 color = ambient + material.emission;\n color += materialDiffuse * diffuse * czm_lightColor;\n color += material.specular * specular * czm_lightColor;\n\n return vec4(color, material.alpha);\n}\n\nvec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\n{\n float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material);\n float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\n\n vec3 ambient = vec3(0.0);\n vec3 color = ambient + material.emission;\n color += material.diffuse * diffuse * czm_lightColor;\n color += material.specular * specular * czm_lightColor;\n\n return vec4(color, material.alpha);\n}\n",czm_planeDistance:"/**\n * Computes distance from a point to a plane.\n *\n * @name czm_planeDistance\n * @glslFunction\n *\n * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js\n * param {vec3} point A point in the same space as the plane.\n * returns {float} The distance from the point to the plane.\n */\nfloat czm_planeDistance(vec4 plane, vec3 point) {\n return (dot(plane.xyz, point) + plane.w);\n}\n\n/**\n * Computes distance from a point to a plane.\n *\n * @name czm_planeDistance\n * @glslFunction\n *\n * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js\n * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js\n * param {vec3} point A point in the same space as the plane.\n * returns {float} The distance from the point to the plane.\n */\nfloat czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {\n return (dot(planeNormal, point) + planeDistance);\n}\n",czm_pointAlongRay:"/**\n * Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero.\n *\n * @name czm_pointAlongRay\n * @glslFunction\n *\n * @param {czm_ray} ray The ray to compute the point along.\n * @param {float} time The time along the ray.\n * \n * @returns {vec3} The point along the ray at the given time.\n * \n * @example\n * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction\n * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)\n */\nvec3 czm_pointAlongRay(czm_ray ray, float time)\n{\n return ray.origin + (time * ray.direction);\n}\n",czm_rayEllipsoidIntersectionInterval:"/**\n * DOC_TBA\n *\n * @name czm_rayEllipsoidIntersectionInterval\n * @glslFunction\n */\nczm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii)\n{\n // ray and ellipsoid center in eye coordinates. radii in model coordinates.\n vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;\n vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;\n\n q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz;\n\n float q2 = dot(q, q);\n float qw = dot(q, w);\n\n if (q2 > 1.0) // Outside ellipsoid.\n {\n if (qw >= 0.0) // Looking outward or tangent (0 intersections).\n {\n return czm_emptyRaySegment;\n }\n else // qw < 0.0.\n {\n float qw2 = qw * qw;\n float difference = q2 - 1.0; // Positively valued.\n float w2 = dot(w, w);\n float product = w2 * difference;\n\n if (qw2 < product) // Imaginary roots (0 intersections).\n {\n return czm_emptyRaySegment;\n }\n else if (qw2 > product) // Distinct roots (2 intersections).\n {\n float discriminant = qw * qw - product;\n float temp = -qw + sqrt(discriminant); // Avoid cancellation.\n float root0 = temp / w2;\n float root1 = difference / temp;\n if (root0 < root1)\n {\n czm_raySegment i = czm_raySegment(root0, root1);\n return i;\n }\n else\n {\n czm_raySegment i = czm_raySegment(root1, root0);\n return i;\n }\n }\n else // qw2 == product. Repeated roots (2 intersections).\n {\n float root = sqrt(difference / w2);\n czm_raySegment i = czm_raySegment(root, root);\n return i;\n }\n }\n }\n else if (q2 < 1.0) // Inside ellipsoid (2 intersections).\n {\n float difference = q2 - 1.0; // Negatively valued.\n float w2 = dot(w, w);\n float product = w2 * difference; // Negatively valued.\n float discriminant = qw * qw - product;\n float temp = -qw + sqrt(discriminant); // Positively valued.\n czm_raySegment i = czm_raySegment(0.0, temp / w2);\n return i;\n }\n else // q2 == 1.0. On ellipsoid.\n {\n if (qw < 0.0) // Looking inward.\n {\n float w2 = dot(w, w);\n czm_raySegment i = czm_raySegment(0.0, -qw / w2);\n return i;\n }\n else // qw >= 0.0. Looking outward or tangent.\n {\n return czm_emptyRaySegment;\n }\n }\n}\n",czm_readDepth:"float czm_readDepth(sampler2D depthTexture, vec2 texCoords)\n{\n return czm_reverseLogDepth(texture2D(depthTexture, texCoords).r);\n}\n",czm_readNonPerspective:"/**\n * Reads a value previously transformed with {@link czm_writeNonPerspective}\n * by dividing it by `w`, the value used in the perspective divide.\n * This function is intended to be called in a fragment shader to access a\n * `varying` that should not be subject to perspective interpolation.\n * For example, screen-space texture coordinates. The value should have been\n * previously written in the vertex shader with a call to\n * {@link czm_writeNonPerspective}.\n *\n * @name czm_readNonPerspective\n * @glslFunction\n *\n * @param {float|vec2|vec3|vec4} value The non-perspective value to be read.\n * @param {float} oneOverW One over the perspective divide value, `w`. Usually this is simply `gl_FragCoord.w`.\n * @returns {float|vec2|vec3|vec4} The usable value.\n */\nfloat czm_readNonPerspective(float value, float oneOverW) {\n return value * oneOverW;\n}\n\nvec2 czm_readNonPerspective(vec2 value, float oneOverW) {\n return value * oneOverW;\n}\n\nvec3 czm_readNonPerspective(vec3 value, float oneOverW) {\n return value * oneOverW;\n}\n\nvec4 czm_readNonPerspective(vec4 value, float oneOverW) {\n return value * oneOverW;\n}\n",czm_reverseLogDepth:"float czm_reverseLogDepth(float logZ)\n{\n#ifdef LOG_DEPTH\n float near = czm_currentFrustum.x;\n float far = czm_currentFrustum.y;\n float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne;\n float depthFromNear = pow(2.0, log2Depth) - 1.0;\n return far * (1.0 - near / (depthFromNear + near)) / (far - near);\n#endif\n return logZ;\n}\n",czm_RGBToHSB:"/**\n * Converts an RGB color to HSB (hue, saturation, brightness)\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\n *\n * @name czm_RGBToHSB\n * @glslFunction\n * \n * @param {vec3} rgb The color in RGB.\n *\n * @returns {vec3} The color in HSB.\n *\n * @example\n * vec3 hsb = czm_RGBToHSB(rgb);\n * hsb.z *= 0.1;\n * rgb = czm_HSBToRGB(hsb);\n */\n\nconst vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\nvec3 czm_RGBToHSB(vec3 rgb)\n{\n vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n float d = q.x - min(q.w, q.y);\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);\n}\n",czm_RGBToHSL:"/**\n * Converts an RGB color to HSL (hue, saturation, lightness)\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\n *\n * @name czm_RGBToHSL\n * @glslFunction\n * \n * @param {vec3} rgb The color in RGB.\n *\n * @returns {vec3} The color in HSL.\n *\n * @example\n * vec3 hsl = czm_RGBToHSL(rgb);\n * hsl.z *= 0.1;\n * rgb = czm_HSLToRGB(hsl);\n */\n \nvec3 RGBtoHCV(vec3 rgb)\n{\n // Based on work by Sam Hocevar and Emil Persson\n vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);\n vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);\n float c = q.x - min(q.w, q.y);\n float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z);\n return vec3(h, c, q.x);\n}\n\nvec3 czm_RGBToHSL(vec3 rgb)\n{\n vec3 hcv = RGBtoHCV(rgb);\n float l = hcv.z - hcv.y * 0.5;\n float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7);\n return vec3(hcv.x, s, l);\n}\n",czm_RGBToXYZ:"/**\n * Converts an RGB color to CIE Yxy.\n * <p>The conversion is described in\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\n * </p>\n * \n * @name czm_RGBToXYZ\n * @glslFunction\n * \n * @param {vec3} rgb The color in RGB.\n *\n * @returns {vec3} The color in CIE Yxy.\n *\n * @example\n * vec3 xyz = czm_RGBToXYZ(rgb);\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\n * rgb = czm_XYZToRGB(xyz);\n */\nvec3 czm_RGBToXYZ(vec3 rgb)\n{\n const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193,\n 0.3576, 0.7152, 0.1192,\n 0.1805, 0.0722, 0.9505);\n vec3 xyz = RGB2XYZ * rgb;\n vec3 Yxy;\n Yxy.r = xyz.g;\n float temp = dot(vec3(1.0), xyz);\n Yxy.gb = xyz.rg / temp;\n return Yxy;\n}\n",czm_sampleOctahedralProjection:"/**\n * Samples the 4 neighboring pixels and return the weighted average.\n *\n * @private\n */\nvec3 czm_sampleOctahedralProjectionWithFiltering(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod)\n{\n direction /= dot(vec3(1.0), abs(direction));\n vec2 rev = abs(direction.zx) - vec2(1.0);\n vec2 neg = vec2(direction.x < 0.0 ? rev.x : -rev.x,\n direction.z < 0.0 ? rev.y : -rev.y);\n vec2 uv = direction.y < 0.0 ? neg : direction.xz;\n vec2 coord = 0.5 * uv + vec2(0.5);\n vec2 pixel = 1.0 / textureSize;\n\n if (lod > 0.0)\n {\n // Each subseqeuent mip level is half the size\n float scale = 1.0 / pow(2.0, lod);\n float offset = ((textureSize.y + 1.0) / textureSize.x);\n\n coord.x *= offset;\n coord *= scale;\n\n coord.x += offset + pixel.x;\n coord.y += (1.0 - (1.0 / pow(2.0, lod - 1.0))) + pixel.y * (lod - 1.0) * 2.0;\n }\n else\n {\n coord.x *= (textureSize.y / textureSize.x);\n }\n\n // Do bilinear filtering\n #ifndef OES_texture_float_linear\n vec3 color1 = texture2D(projectedMap, coord + vec2(0.0, pixel.y)).rgb;\n vec3 color2 = texture2D(projectedMap, coord + vec2(pixel.x, 0.0)).rgb;\n vec3 color3 = texture2D(projectedMap, coord + pixel).rgb;\n vec3 color4 = texture2D(projectedMap, coord).rgb;\n\n vec2 texturePosition = coord * textureSize;\n\n float fu = fract(texturePosition.x);\n float fv = fract(texturePosition.y);\n\n vec3 average1 = mix(color4, color2, fu);\n vec3 average2 = mix(color1, color3, fu);\n\n vec3 color = mix(average1, average2, fv);\n #else\n vec3 color = texture2D(projectedMap, coord).rgb;\n #endif\n\n return color;\n}\n\n\n/**\n * Samples from a cube map that has been projected using an octahedral projection from the given direction.\n *\n * @name czm_sampleOctahedralProjection\n * @glslFunction\n *\n * @param {sampler2D} projectedMap The texture with the octahedral projected cube map.\n * @param {vec2} textureSize The width and height dimensions in pixels of the projected map.\n * @param {vec3} direction The normalized direction used to sample the cube map.\n * @param {float} lod The level of detail to sample.\n * @param {float} maxLod The maximum level of detail.\n * @returns {vec3} The color of the cube map at the direction.\n */\nvec3 czm_sampleOctahedralProjection(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod, float maxLod) {\n float currentLod = floor(lod + 0.5);\n float nextLod = min(currentLod + 1.0, maxLod);\n\n vec3 colorCurrentLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, currentLod);\n vec3 colorNextLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, nextLod);\n\n return mix(colorNextLod, colorCurrentLod, nextLod - lod);\n}\n",czm_saturation:"/**\n * Adjusts the saturation of a color.\n * \n * @name czm_saturation\n * @glslFunction\n * \n * @param {vec3} rgb The color.\n * @param {float} adjustment The amount to adjust the saturation of the color.\n *\n * @returns {float} The color with the saturation adjusted.\n *\n * @example\n * vec3 greyScale = czm_saturation(color, 0.0);\n * vec3 doubleSaturation = czm_saturation(color, 2.0);\n */\nvec3 czm_saturation(vec3 rgb, float adjustment)\n{\n // Algorithm from Chapter 16 of OpenGL Shading Language\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n vec3 intensity = vec3(dot(rgb, W));\n return mix(intensity, rgb, adjustment);\n}\n",czm_shadowDepthCompare:"\nfloat czm_sampleShadowMap(samplerCube shadowMap, vec3 d)\n{\n return czm_unpackDepth(textureCube(shadowMap, d));\n}\n\nfloat czm_sampleShadowMap(sampler2D shadowMap, vec2 uv)\n{\n#ifdef USE_SHADOW_DEPTH_TEXTURE\n return texture2D(shadowMap, uv).r;\n#else\n return czm_unpackDepth(texture2D(shadowMap, uv));\n#endif\n}\n\nfloat czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth)\n{\n return step(depth, czm_sampleShadowMap(shadowMap, uv));\n}\n\nfloat czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth)\n{\n return step(depth, czm_sampleShadowMap(shadowMap, uv));\n}\n",czm_shadowVisibility:"\nfloat czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness)\n{\n#ifdef USE_NORMAL_SHADING\n#ifdef USE_NORMAL_SHADING_SMOOTH\n float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0);\n#else\n float strength = step(0.0, nDotL);\n#endif\n visibility *= strength;\n#endif\n\n visibility = max(visibility, darkness);\n return visibility;\n}\n\n#ifdef USE_CUBE_MAP_SHADOW\nfloat czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters)\n{\n float depthBias = shadowParameters.depthBias;\n float depth = shadowParameters.depth;\n float nDotL = shadowParameters.nDotL;\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\n float darkness = shadowParameters.darkness;\n vec3 uvw = shadowParameters.texCoords;\n\n depth -= depthBias;\n float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\n}\n#else\nfloat czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters)\n{\n float depthBias = shadowParameters.depthBias;\n float depth = shadowParameters.depth;\n float nDotL = shadowParameters.nDotL;\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\n float darkness = shadowParameters.darkness;\n vec2 uv = shadowParameters.texCoords;\n\n depth -= depthBias;\n#ifdef USE_SOFT_SHADOWS\n vec2 texelStepSize = shadowParameters.texelStepSize;\n float radius = 1.0;\n float dx0 = -texelStepSize.x * radius;\n float dy0 = -texelStepSize.y * radius;\n float dx1 = texelStepSize.x * radius;\n float dy1 = texelStepSize.y * radius;\n float visibility = (\n czm_shadowDepthCompare(shadowMap, uv, depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) +\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth)\n ) * (1.0 / 9.0);\n#else\n float visibility = czm_shadowDepthCompare(shadowMap, uv, depth);\n#endif\n\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\n}\n#endif\n",czm_signNotZero:"/**\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL\n * built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0.\n * \n * @name czm_signNotZero\n * @glslFunction\n *\n * @param {} value The value for which to determine the sign.\n * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative.\n */\nfloat czm_signNotZero(float value)\n{\n return value >= 0.0 ? 1.0 : -1.0;\n}\n\nvec2 czm_signNotZero(vec2 value)\n{\n return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y));\n}\n\nvec3 czm_signNotZero(vec3 value)\n{\n return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z));\n}\n\nvec4 czm_signNotZero(vec4 value)\n{\n return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w));\n}\n",czm_sphericalHarmonics:"/**\n * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector.\n * <p>\n * The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22].\n * </p>\n *\n * @name czm_sphericalHarmonics\n * @glslFunction\n *\n * @param {vec3} normal The normalized direction.\n * @param {vec3[9]} coefficients The third order spherical harmonic coefficients.\n * @returns {vec3} The color at the direction.\n *\n * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf\n */\nvec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9])\n{\n const float c1 = 0.429043;\n const float c2 = 0.511664;\n const float c3 = 0.743125;\n const float c4 = 0.886227;\n const float c5 = 0.247708;\n\n vec3 L00 = coefficients[0];\n vec3 L1_1 = coefficients[1];\n vec3 L10 = coefficients[2];\n vec3 L11 = coefficients[3];\n vec3 L2_2 = coefficients[4];\n vec3 L2_1 = coefficients[5];\n vec3 L20 = coefficients[6];\n vec3 L21 = coefficients[7];\n vec3 L22 = coefficients[8];\n\n float x = normal.x;\n float y = normal.y;\n float z = normal.z;\n\n return c1 * L22 * (x * x - y * y) + c3 * L20 * z * z + c4 * L00 - c5 * L20 +\n 2.0 * c1 * (L2_2 * x * y + L21 * x * z + L2_1 * y * z) +\n 2.0 * c2 * (L11 * x + L1_1 * y + L10 * z);\n}\n",czm_tangentToEyeSpaceMatrix:"/**\n * Creates a matrix that transforms vectors from tangent space to eye space.\n *\n * @name czm_tangentToEyeSpaceMatrix\n * @glslFunction\n *\n * @param {vec3} normalEC The normal vector in eye coordinates.\n * @param {vec3} tangentEC The tangent vector in eye coordinates.\n * @param {vec3} bitangentEC The bitangent vector in eye coordinates.\n *\n * @returns {mat3} The matrix that transforms from tangent space to eye space.\n *\n * @example\n * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC);\n * vec3 normal = tangentToEye * texture2D(normalMap, st).xyz;\n */\nmat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC)\n{\n vec3 normal = normalize(normalEC);\n vec3 tangent = normalize(tangentEC);\n vec3 bitangent = normalize(bitangentEC);\n return mat3(tangent.x , tangent.y , tangent.z,\n bitangent.x, bitangent.y, bitangent.z,\n normal.x , normal.y , normal.z);\n}\n",czm_transformPlane:"vec4 czm_transformPlane(vec4 clippingPlane, mat4 transform) {\n vec3 transformedDirection = normalize((transform * vec4(clippingPlane.xyz, 0.0)).xyz);\n vec3 transformedPosition = (transform * vec4(clippingPlane.xyz * -clippingPlane.w, 1.0)).xyz;\n vec4 transformedPlane;\n transformedPlane.xyz = transformedDirection;\n transformedPlane.w = -dot(transformedDirection, transformedPosition);\n return transformedPlane;\n}\n",czm_translateRelativeToEye:"/**\n * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},\n * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to\n * be relative to the eye. As shown in the example, the position can then be transformed in eye\n * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},\n * respectively.\n * <p>\n * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as\n * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @name czm_translateRelativeToEye\n * @glslFunction\n *\n * @param {vec3} high The position's high bits.\n * @param {vec3} low The position's low bits.\n * @returns {vec3} The position translated to be relative to the camera's position.\n *\n * @example\n * attribute vec3 positionHigh;\n * attribute vec3 positionLow;\n *\n * void main()\n * {\n * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\n * }\n *\n * @see czm_modelViewRelativeToEye\n * @see czm_modelViewProjectionRelativeToEye\n * @see czm_computePosition\n * @see EncodedCartesian3\n */\nvec4 czm_translateRelativeToEye(vec3 high, vec3 low)\n{\n vec3 highDifference = high - czm_encodedCameraPositionMCHigh;\n vec3 lowDifference = low - czm_encodedCameraPositionMCLow;\n\n return vec4(highDifference + lowDifference, 1.0);\n}\n",czm_translucentPhong:"/**\n * @private\n */\nvec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\n{\n // Diffuse from directional light sources at eye (for top-down and horizon views)\n float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal);\n\n if (czm_sceneMode == czm_sceneMode3D) {\n // (and horizon views in 3D)\n diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal);\n }\n\n diffuse = clamp(diffuse, 0.0, 1.0);\n\n float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess);\n\n // Temporary workaround for adding ambient.\n vec3 materialDiffuse = material.diffuse * 0.5;\n\n vec3 ambient = materialDiffuse;\n vec3 color = ambient + material.emission;\n color += materialDiffuse * diffuse * czm_lightColor;\n color += material.specular * specular * czm_lightColor;\n\n return vec4(color, material.alpha);\n}\n",czm_transpose:"/**\n * Returns the transpose of the matrix. The input <code>matrix</code> can be\n * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.\n *\n * @name czm_transpose\n * @glslFunction\n *\n * @param {} matrix The matrix to transpose.\n *\n * @returns {} The transposed matrix.\n *\n * @example\n * // GLSL declarations\n * mat2 czm_transpose(mat2 matrix);\n * mat3 czm_transpose(mat3 matrix);\n * mat4 czm_transpose(mat4 matrix);\n *\n * // Transpose a 3x3 rotation matrix to find its inverse.\n * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(\n * positionMC, normalEC);\n * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);\n */\nmat2 czm_transpose(mat2 matrix)\n{\n return mat2(\n matrix[0][0], matrix[1][0],\n matrix[0][1], matrix[1][1]);\n}\n\nmat3 czm_transpose(mat3 matrix)\n{\n return mat3(\n matrix[0][0], matrix[1][0], matrix[2][0],\n matrix[0][1], matrix[1][1], matrix[2][1],\n matrix[0][2], matrix[1][2], matrix[2][2]);\n}\n\nmat4 czm_transpose(mat4 matrix)\n{\n return mat4(\n matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],\n matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],\n matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],\n matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);\n}\n",czm_unpackDepth:"/**\n * Unpacks a vec4 depth value to a float in [0, 1) range.\n *\n * @name czm_unpackDepth\n * @glslFunction\n *\n * @param {vec4} packedDepth The packed depth.\n *\n * @returns {float} The floating-point depth in [0, 1) range.\n */\n float czm_unpackDepth(vec4 packedDepth)\n {\n // See Aras Pranckevi\u010dius' post Encoding Floats to RGBA\n // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\n return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0));\n }\n",czm_unpackFloat:"#define SHIFT_RIGHT_8 0.00390625 //1.0 / 256.0\n#define SHIFT_RIGHT_16 0.00001525878 //1.0 / 65536.0\n#define SHIFT_RIGHT_24 5.960464477539063e-8//1.0 / 16777216.0\n\n#define BIAS 38.0\n\n/**\n * Unpacks a vec4 value containing values expressable as uint8 to an arbitrary float.\n *\n * @name czm_unpackFloat\n * @glslFunction\n *\n * @param {vec4} packedFloat The packed float.\n *\n * @returns {float} The floating-point depth in arbitrary range.\n */\n float czm_unpackFloat(vec4 packedFloat)\n{\n packedFloat *= 255.0;\n float temp = packedFloat.w / 2.0;\n float exponent = floor(temp);\n float sign = (temp - exponent) * 2.0;\n exponent = exponent - float(BIAS);\n sign = sign * 2.0 - 1.0;\n sign = -sign;\n float unpacked = sign * packedFloat.x * float(SHIFT_RIGHT_8);\n unpacked += sign * packedFloat.y * float(SHIFT_RIGHT_16);\n unpacked += sign * packedFloat.z * float(SHIFT_RIGHT_24);\n return unpacked * pow(10.0, exponent);\n}\n",czm_vertexLogDepth:"#ifdef LOG_DEPTH\n// 1.0 at the near plane, increasing linearly from there.\nvarying float v_depthFromNearPlusOne;\n#ifdef SHADOW_MAP\nvarying vec3 v_logPositionEC;\n#endif\n#endif\n\nvec4 czm_updatePositionDepth(vec4 coords) {\n#if defined(LOG_DEPTH)\n\n#ifdef SHADOW_MAP\n vec3 logPositionEC = (czm_inverseProjection * coords).xyz;\n v_logPositionEC = logPositionEC;\n#endif\n\n // With the very high far/near ratios used with the logarithmic depth\n // buffer, floating point rounding errors can cause linear depth values\n // to end up on the wrong side of the far plane, even for vertices that\n // are really nowhere near it. Since we always write a correct logarithmic\n // depth value in the fragment shader anyway, we just need to make sure\n // such errors don't cause the primitive to be clipped entirely before\n // we even get to the fragment shader.\n coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;\n#endif\n\n return coords;\n}\n\n/**\n * Writes the logarithmic depth to gl_Position using the already computed gl_Position.\n *\n * @name czm_vertexLogDepth\n * @glslFunction\n */\nvoid czm_vertexLogDepth()\n{\n#ifdef LOG_DEPTH\n v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;\n gl_Position = czm_updatePositionDepth(gl_Position);\n#endif\n}\n\n/**\n * Writes the logarithmic depth to gl_Position using the provided clip coordinates.\n * <p>\n * An example use case for this function would be moving the vertex in window coordinates\n * before converting back to clip coordinates. Use the original vertex clip coordinates.\n * </p>\n * @name czm_vertexLogDepth\n * @glslFunction\n *\n * @param {vec4} clipCoords The vertex in clip coordinates.\n *\n * @example\n * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));\n */\nvoid czm_vertexLogDepth(vec4 clipCoords)\n{\n#ifdef LOG_DEPTH\n v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;\n czm_updatePositionDepth(clipCoords);\n#endif\n}\n",czm_windowToEyeCoordinates:"/**\n * Transforms a position from window to eye coordinates.\n * The transform from window to normalized device coordinates is done using components\n * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating\n * the inverse of <code>czm_viewportTransformation</code>. The transformation from\n * normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>,\n * which is expected to be the scalar used in the perspective divide. The transformation\n * from clip to eye coordinates is done using {@link czm_inverseProjection}.\n *\n * @name czm_windowToEyeCoordinates\n * @glslFunction\n *\n * @param {vec4} fragmentCoordinate The position in window coordinates to transform.\n *\n * @returns {vec4} The transformed position in eye coordinates.\n *\n * @see czm_modelToWindowCoordinates\n * @see czm_eyeToWindowCoordinates\n * @see czm_inverseProjection\n * @see czm_viewport\n * @see czm_viewportTransformation\n *\n * @example\n * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);\n */\nvec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)\n{\n // Reconstruct NDC coordinates\n float x = 2.0 * (fragmentCoordinate.x - czm_viewport.x) / czm_viewport.z - 1.0;\n float y = 2.0 * (fragmentCoordinate.y - czm_viewport.y) / czm_viewport.w - 1.0;\n float z = (fragmentCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\n vec4 q = vec4(x, y, z, 1.0);\n\n // Reverse the perspective division to obtain clip coordinates.\n q /= fragmentCoordinate.w;\n\n // Reverse the projection transformation to obtain eye coordinates.\n if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s\n {\n q = czm_inverseProjection * q;\n }\n else\n {\n float top = czm_frustumPlanes.x;\n float bottom = czm_frustumPlanes.y;\n float left = czm_frustumPlanes.z;\n float right = czm_frustumPlanes.w;\n\n float near = czm_currentFrustum.x;\n float far = czm_currentFrustum.y;\n\n q.x = (q.x * (right - left) + left + right) * 0.5;\n q.y = (q.y * (top - bottom) + bottom + top) * 0.5;\n q.z = (q.z * (near - far) - near - far) * 0.5;\n q.w = 1.0;\n }\n\n return q;\n}\n\n/**\n * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates.\n * This function produces more accurate results for window positions with log depth than\n * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version\n * of czm_windowToEyeCoordinates.\n *\n * @name czm_windowToEyeCoordinates\n * @glslFunction\n *\n * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform.\n * @param {float} depthOrLogDepth A depth or log depth for the fragment.\n *\n * @see czm_modelToWindowCoordinates\n * @see czm_eyeToWindowCoordinates\n * @see czm_inverseProjection\n * @see czm_viewport\n * @see czm_viewportTransformation\n *\n * @returns {vec4} The transformed position in eye coordinates.\n */\nvec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth)\n{\n // See reverseLogDepth.glsl. This is separate to re-use the pow.\n#ifdef LOG_DEPTH\n float near = czm_currentFrustum.x;\n float far = czm_currentFrustum.y;\n float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne;\n float depthFromNear = pow(2.0, log2Depth) - 1.0;\n float depthFromCamera = depthFromNear + near;\n vec4 windowCoord = vec4(fragmentCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0);\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(windowCoord);\n eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision\n return eyeCoordinate;\n#else\n vec4 windowCoord = vec4(fragmentCoordinateXY, depthOrLogDepth, 1.0);\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(windowCoord);\n#endif\n return eyeCoordinate;\n}\n",czm_writeDepthClamp:"// emulated noperspective\n#ifndef LOG_DEPTH\nvarying float v_WindowZ;\n#endif\n/**\n * Clamps a vertex to the far plane by writing the fragments depth.\n * <p>\n * The shader must enable the GL_EXT_frag_depth extension.\n * </p>\n *\n * @name czm_writeDepthClamp\n * @glslFunction\n *\n * @example\n * gl_FragColor = color;\n * czm_writeDepthClamp();\n *\n * @see czm_depthClamp\n */\nvoid czm_writeDepthClamp()\n{\n#if defined(GL_EXT_frag_depth) && !defined(LOG_DEPTH)\n gl_FragDepthEXT = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0);\n#endif\n}\n",czm_writeLogDepth:"#ifdef LOG_DEPTH\nvarying float v_depthFromNearPlusOne;\n\n#ifdef POLYGON_OFFSET\nuniform vec2 u_polygonOffset;\n#endif\n\n#endif\n\n/**\n * Writes the fragment depth to the logarithmic depth buffer.\n * <p>\n * Use this when the vertex shader does not call {@link czm_vertexlogDepth}, for example, when\n * ray-casting geometry using a full screen quad.\n * </p>\n * @name czm_writeLogDepth\n * @glslFunction\n *\n * @param {float} depth The depth coordinate, where 1.0 is on the near plane and\n * depth increases in eye-space units from there\n *\n * @example\n * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);\n */\nvoid czm_writeLogDepth(float depth)\n{\n#if defined(GL_EXT_frag_depth) && defined(LOG_DEPTH)\n // Discard the vertex if it's not between the near and far planes.\n // We allow a bit of epsilon on the near plane comparison because a 1.0\n // from the vertex shader (indicating the vertex should be _on_ the near\n // plane) will not necessarily come here as exactly 1.0.\n if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {\n discard;\n }\n\n#ifdef POLYGON_OFFSET\n // Polygon offset: m * factor + r * units\n float factor = u_polygonOffset[0];\n float units = u_polygonOffset[1];\n\n // If we can't compute derivatives, just leave out the factor I guess?\n#ifdef GL_OES_standard_derivatives\n // m = sqrt(dZdX^2 + dZdY^2);\n float x = dFdx(depth);\n float y = dFdy(depth);\n float m = sqrt(x * x + y * y);\n\n // Apply the factor before computing the log depth.\n depth += m * factor;\n#endif\n\n#endif\n\n gl_FragDepthEXT = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;\n\n#ifdef POLYGON_OFFSET\n // Apply the units after the log depth.\n gl_FragDepthEXT += czm_epsilon7 * units;\n#endif\n\n#endif\n}\n\n/**\n * Writes the fragment depth to the logarithmic depth buffer.\n * <p>\n * Use this when the vertex shader calls {@link czm_vertexlogDepth}.\n * </p>\n *\n * @name czm_writeLogDepth\n * @glslFunction\n */\nvoid czm_writeLogDepth() {\n#ifdef LOG_DEPTH\n czm_writeLogDepth(v_depthFromNearPlusOne);\n#endif\n}\n",czm_writeNonPerspective:"/**\n * Transforms a value for non-perspective interpolation by multiplying\n * it by w, the value used in the perspective divide. This function is\n * intended to be called in a vertex shader to compute the value of a\n * `varying` that should not be subject to perspective interpolation.\n * For example, screen-space texture coordinates. The fragment shader\n * must call {@link czm_readNonPerspective} to retrieve the final\n * non-perspective value.\n *\n * @name czm_writeNonPerspective\n * @glslFunction\n *\n * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective.\n * @param {float} w The perspective divide value. Usually this is the computed `gl_Position.w`.\n * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a `varying` and read in the\n * fragment shader with {@link czm_readNonPerspective}.\n */\nfloat czm_writeNonPerspective(float value, float w) {\n return value * w;\n}\n\nvec2 czm_writeNonPerspective(vec2 value, float w) {\n return value * w;\n}\n\nvec3 czm_writeNonPerspective(vec3 value, float w) {\n return value * w;\n}\n\nvec4 czm_writeNonPerspective(vec4 value, float w) {\n return value * w;\n}\n",czm_XYZToRGB:"/**\n * Converts a CIE Yxy color to RGB.\n * <p>The conversion is described in\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\n * </p>\n * \n * @name czm_XYZToRGB\n * @glslFunction\n * \n * @param {vec3} Yxy The color in CIE Yxy.\n *\n * @returns {vec3} The color in RGB.\n *\n * @example\n * vec3 xyz = czm_RGBToXYZ(rgb);\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\n * rgb = czm_XYZToRGB(xyz);\n */\nvec3 czm_XYZToRGB(vec3 Yxy)\n{\n const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556,\n -1.5371, 1.8760, -0.2040,\n -0.4985, 0.0416, 1.0572);\n vec3 xyz;\n xyz.r = Yxy.r * Yxy.g / Yxy.b;\n xyz.g = Yxy.r;\n xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b;\n \n return XYZ2RGB * xyz;\n}\n"};function BM(e){return(e=e.replace(/\/\/.*/g,"")).replace(/\/\*\*[\s\S]*?\*\//gm,(function(e){for(var t=e.match(/\n/gm).length,n="",i=0;i<t;++i)n+="\n";return n}))}function HM(e,t,n){for(var i,r=0;r<n.length;++r)n[r].name===e&&(i=n[r]);return Object(o.a)(i)||(i={name:e,glslSource:t=BM(t),dependsOn:[],requiredBy:[],evaluated:!1},n.push(i)),i}function VM(e){var t=[],n=HM("main",e,t);!function e(t,n){if(!t.evaluated){t.evaluated=!0;var i=t.glslSource.match(/\bczm_[a-zA-Z0-9_]*/g);Object(o.a)(i)&&null!==i&&(i=i.filter((function(e,t){return i.indexOf(e)===t}))).forEach((function(i){if(i!==t.name&&WM._czmBuiltinsAndUniforms.hasOwnProperty(i)){var r=HM(i,WM._czmBuiltinsAndUniforms[i],n);t.dependsOn.push(r),r.requiredBy.push(t),e(r,n)}}))}}(n,t),function(e){for(var t=[],n=[];e.length>0;){var i=e.pop();n.push(i),0===i.requiredBy.length&&t.push(i)}for(;t.length>0;){var r=t.shift();e.push(r);for(var o=0;o<r.dependsOn.length;++o){var s=r.dependsOn[o],c=s.requiredBy.indexOf(r);s.requiredBy.splice(c,1),0===s.requiredBy.length&&t.push(s)}}for(var l=[],u=0;u<n.length;++u)0!==n[u].requiredBy.length&&l.push(n[u]);if(0!==l.length){for(var h="A circular dependency was found in the following built-in functions/structs/constants: \n",d=0;d<l.length;++d)h=h+l[d].name+"\n";throw new a.a(h)}}(t);for(var i="",r=t.length-1;r>=0;--r)i=i+t[r].glslSource+"\n";return i.replace(n.glslSource,"")}function UM(e,t,n){var i,r,s,c="",l=e.sources;if(Object(o.a)(l))for(i=0,r=l.length;i<r;++i)c+="\n#line 0\n"+l[i];c=(c=BM(c)).replace(/#version\s+(.*?)\n/gm,(function(e,t){if(Object(o.a)(s)&&s!==t)throw new a.a("inconsistent versions found: "+s+" and "+t);return s=t,"\n"}));var u=[];c=(c=c.replace(/#extension.*\n/gm,(function(e){return u.push(e),"\n"}))).replace(/precision\s(lowp|mediump|highp)\s(float|int);/,"");var h=e.pickColorQualifier;Object(o.a)(h)&&(c=WM.createPickFragmentShaderSource(c,h));var d="";Object(o.a)(s)&&(d="#version "+s+"\n");var f=u.length;for(i=0;i<f;i++)d+=u[i];t&&(d+="#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n\n");var p=e.defines;if(Object(o.a)(p))for(i=0,r=p.length;i<r;++i){var m=p[i];0!==m.length&&(d+="#define "+m+"\n")}return n.webgl2&&(d+="#define OUTPUT_DECLARATION\n\n"),n.textureFloatLinear&&(d+="#define OES_texture_float_linear\n\n"),e.includeBuiltIns&&(d+=VM(c)),d+="\n#line 0\n",d+=c,n.webgl2&&(d=zM(d,t,!0)),d}function WM(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).pickColorQualifier;if(Object(o.a)(t)&&"uniform"!==t&&"varying"!==t)throw new a.a("options.pickColorQualifier must be 'uniform' or 'varying'.");this.defines=Object(o.a)(e.defines)?e.defines.slice(0):[],this.sources=Object(o.a)(e.sources)?e.sources.slice(0):[],this.pickColorQualifier=t,this.includeBuiltIns=Object(r.a)(e.includeBuiltIns,!0)}for(var GM in WM.prototype.clone=function(){return new WM({sources:this.sources,defines:this.defines,pickColorQualifier:this.pickColorQualifier,includeBuiltIns:this.includeBuiltIns})},WM.replaceMain=function(e,t){return t="void "+t+"()",e.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,t)},WM.prototype.createCombinedVertexShader=function(e){return UM(this,!1,e)},WM.prototype.createCombinedFragmentShader=function(e){return UM(this,!0,e)},WM._czmBuiltinsAndUniforms={},kM)kM.hasOwnProperty(GM)&&(WM._czmBuiltinsAndUniforms[GM]=kM[GM]);for(var qM in JI)if(JI.hasOwnProperty(qM)){var YM=JI[qM];"function"===typeof YM.getDeclaration&&(WM._czmBuiltinsAndUniforms[qM]=YM.getDeclaration(qM))}WM.createPickVertexShaderSource=function(e){return WM.replaceMain(e,"czm_old_main")+"\nattribute vec4 pickColor; \nvarying vec4 czm_pickColor; \nvoid main() \n{ \n czm_old_main(); \n czm_pickColor = pickColor; \n}"},WM.createPickFragmentShaderSource=function(e,t){return WM.replaceMain(e,"czm_old_main")+"\n"+(t+" vec4 czm_pickColor; \nvoid main() \n{ \n czm_old_main(); \n if (gl_FragColor.a == 0.0) { \n discard; \n } \n gl_FragColor = czm_pickColor; \n}")},WM.findVarying=function(e,t){for(var n=e.sources,i=t.length,r=0;r<i;++r)for(var o=t[r],a=n.length,s=0;s<a;++s)if(-1!==n[s].indexOf(o))return o};var $M=["v_normalEC","v_normal"];WM.findNormalVarying=function(e){return WM.findVarying(e,$M)};var XM=["v_positionEC"];WM.findPositionVarying=function(e){return WM.findVarying(e,XM)};var KM=WM,QM="#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n\n#ifdef VECTOR_TILE\nuniform vec4 u_highlightColor;\n#endif\n\nvoid main(void)\n{\n#ifdef VECTOR_TILE\n gl_FragColor = czm_gammaCorrect(u_highlightColor);\n#else\n gl_FragColor = vec4(1.0);\n#endif\n czm_writeDepthClamp();\n}\n",ZM={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2,NUMBER_OF_CLASSIFICATION_TYPES:3},JM=Object.freeze(ZM),eR={NEVER:Ts.NEVER,LESS:Ts.LESS,EQUAL:Ts.EQUAL,LESS_OR_EQUAL:Ts.LEQUAL,GREATER:Ts.GREATER,NOT_EQUAL:Ts.NOTEQUAL,GREATER_OR_EQUAL:Ts.GEQUAL,ALWAYS:Ts.ALWAYS},tR=Object.freeze(eR),nR={STREAM_DRAW:Ts.STREAM_DRAW,STATIC_DRAW:Ts.STATIC_DRAW,DYNAMIC_DRAW:Ts.DYNAMIC_DRAW,validate:function(e){return e===nR.STREAM_DRAW||e===nR.STATIC_DRAW||e===nR.DYNAMIC_DRAW}},iR=Object.freeze(nR);function rR(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context),!Object(o.a)(e.typedArray)&&!Object(o.a)(e.sizeInBytes))throw new a.a("Either options.sizeInBytes or options.typedArray is required.");if(Object(o.a)(e.typedArray)&&Object(o.a)(e.sizeInBytes))throw new a.a("Cannot pass in both options.sizeInBytes and options.typedArray.");if(Object(o.a)(e.typedArray)&&(i.a.typeOf.object("options.typedArray",e.typedArray),i.a.typeOf.number("options.typedArray.byteLength",e.typedArray.byteLength)),!iR.validate(e.usage))throw new a.a("usage is invalid.");var t=e.context._gl,n=e.bufferTarget,s=e.typedArray,c=e.sizeInBytes,l=e.usage,u=Object(o.a)(s);u&&(c=s.byteLength),i.a.typeOf.number.greaterThan("sizeInBytes",c,0);var h=t.createBuffer();t.bindBuffer(n,h),t.bufferData(n,u?s:c,l),t.bindBuffer(n,null),this._gl=t,this._webgl2=e.context._webgl2,this._bufferTarget=n,this._sizeInBytes=c,this._usage=l,this._buffer=h,this.vertexArrayDestroyable=!0}rR.createVertexBuffer=function(e){return i.a.defined("options.context",e.context),new rR({context:e.context,bufferTarget:Ts.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})},rR.createIndexBuffer=function(e){if(i.a.defined("options.context",e.context),!lc.validate(e.indexDatatype))throw new a.a("Invalid indexDatatype.");if(e.indexDatatype===lc.UNSIGNED_INT&&!e.context.elementIndexUint)throw new a.a("IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system. Check context.elementIndexUint.");var t=e.context,n=e.indexDatatype,r=lc.getSizeInBytes(n),o=new rR({context:t,bufferTarget:Ts.ELEMENT_ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage}),s=o.sizeInBytes/r;return Object.defineProperties(o,{indexDatatype:{get:function(){return n}},bytesPerIndex:{get:function(){return r}},numberOfIndices:{get:function(){return s}}}),o},Object.defineProperties(rR.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}}),rR.prototype._getBuffer=function(){return this._buffer},rR.prototype.copyFromArrayView=function(e,t){t=Object(r.a)(t,0),i.a.defined("arrayView",e),i.a.typeOf.number.lessThanOrEquals("offsetInBytes + arrayView.byteLength",t+e.byteLength,this._sizeInBytes);var n=this._gl,o=this._bufferTarget;n.bindBuffer(o,this._buffer),n.bufferSubData(o,t,e),n.bindBuffer(o,null)},rR.prototype.copyFromBuffer=function(e,t,n,i){if(!this._webgl2)throw new a.a("A WebGL 2 context is required.");if(!Object(o.a)(e))throw new a.a("readBuffer must be defined.");if(!Object(o.a)(i)||i<=0)throw new a.a("sizeInBytes must be defined and be greater than zero.");if(!Object(o.a)(t)||t<0||t+i>e._sizeInBytes)throw new a.a("readOffset must be greater than or equal to zero and readOffset + sizeInBytes must be less than of equal to readBuffer.sizeInBytes.");if(!Object(o.a)(n)||n<0||n+i>this._sizeInBytes)throw new a.a("writeOffset must be greater than or equal to zero and writeOffset + sizeInBytes must be less than of equal to this.sizeInBytes.");if(this._buffer===e._buffer&&(n>=t&&n<t+i||t>n&&t<n+i))throw new a.a("When readBuffer is equal to this, the ranges [readOffset + sizeInBytes) and [writeOffset, writeOffset + sizeInBytes) must not overlap.");if(this._bufferTarget===Ts.ELEMENT_ARRAY_BUFFER&&e._bufferTarget!==Ts.ELEMENT_ARRAY_BUFFER||this._bufferTarget!==Ts.ELEMENT_ARRAY_BUFFER&&e._bufferTarget===Ts.ELEMENT_ARRAY_BUFFER)throw new a.a("Can not copy an index buffer into another buffer type.");var r=Ts.COPY_READ_BUFFER,s=Ts.COPY_WRITE_BUFFER,c=this._gl;c.bindBuffer(s,this._buffer),c.bindBuffer(r,e._buffer),c.copyBufferSubData(r,s,t,n,i),c.bindBuffer(s,null),c.bindBuffer(r,null)},rR.prototype.getBufferData=function(e,t,n,i){if(t=Object(r.a)(t,0),n=Object(r.a)(n,0),!this._webgl2)throw new a.a("A WebGL 2 context is required.");if(!Object(o.a)(e))throw new a.a("arrayView is required.");var s,c,l=e.byteLength;if(Object(o.a)(i)?(s=i,Object(o.a)(l)?c=1:(l=e.length,c=e.BYTES_PER_ELEMENT)):Object(o.a)(l)?(s=l-n,c=1):(s=(l=e.length)-n,c=e.BYTES_PER_ELEMENT),n<0||n>l)throw new a.a("destinationOffset must be greater than zero and less than the arrayView length.");if(n+s>l)throw new a.a("destinationOffset + length must be less than or equal to the arrayViewLength.");if(t<0||t>this._sizeInBytes)throw new a.a("sourceOffset must be greater than zero and less than the buffers size.");if(t+s*c>this._sizeInBytes)throw new a.a("sourceOffset + length must be less than the buffers size.");var u=this._gl,h=Ts.COPY_READ_BUFFER;u.bindBuffer(h,this._buffer),u.getBufferSubData(h,t,e,n,i),u.bindBuffer(h,null)},rR.prototype.isDestroyed=function(){return!1},rR.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),Ks(this)};var oR=rR;function aR(e,t,n,i){var s=Object(o.a)(t.vertexBuffer),c=Object(o.a)(t.value),l=t.value?t.value.length:t.componentsPerAttribute;if(!s&&!c)throw new a.a("attribute must have a vertexBuffer or a value.");if(s&&c)throw new a.a("attribute cannot have both a vertexBuffer and a value. It must have either a vertexBuffer property defining per-vertex data or a value property defining data for all vertices.");if(1!==l&&2!==l&&3!==l&&4!==l){if(c)throw new a.a("attribute.value.length must be in the range [1, 4].");throw new a.a("attribute.componentsPerAttribute must be in the range [1, 4].")}if(Object(o.a)(t.componentDatatype)&&!Ds.validate(t.componentDatatype))throw new a.a("attribute must have a valid componentDatatype or not specify it.");if(Object(o.a)(t.strideInBytes)&&t.strideInBytes>255)throw new a.a("attribute must have a strideInBytes less than or equal to 255 or not specify it.");if(Object(o.a)(t.instanceDivisor)&&t.instanceDivisor>0&&!i.instancedArrays)throw new a.a("instanced arrays is not supported");if(Object(o.a)(t.instanceDivisor)&&t.instanceDivisor<0)throw new a.a("attribute must have an instanceDivisor greater than or equal to zero");if(Object(o.a)(t.instanceDivisor)&&c)throw new a.a("attribute cannot have have an instanceDivisor if it is not backed by a buffer");if(Object(o.a)(t.instanceDivisor)&&t.instanceDivisor>0&&0===t.index)throw new a.a("attribute zero cannot have an instanceDivisor greater than 0");var u={index:Object(r.a)(t.index,n),enabled:Object(r.a)(t.enabled,!0),vertexBuffer:t.vertexBuffer,value:c?t.value.slice(0):void 0,componentsPerAttribute:l,componentDatatype:Object(r.a)(t.componentDatatype,Ds.FLOAT),normalize:Object(r.a)(t.normalize,!1),offsetInBytes:Object(r.a)(t.offsetInBytes,0),strideInBytes:Object(r.a)(t.strideInBytes,0),instanceDivisor:Object(r.a)(t.instanceDivisor,0)};if(s)u.vertexAttrib=function(e){var t=this.index;e.bindBuffer(e.ARRAY_BUFFER,this.vertexBuffer._getBuffer()),e.vertexAttribPointer(t,this.componentsPerAttribute,this.componentDatatype,this.normalize,this.strideInBytes,this.offsetInBytes),e.enableVertexAttribArray(t),this.instanceDivisor>0&&(i.glVertexAttribDivisor(t,this.instanceDivisor),i._vertexAttribDivisors[t]=this.instanceDivisor,i._previousDrawInstanced=!0)},u.disableVertexAttribArray=function(e){e.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(u.componentsPerAttribute){case 1:u.vertexAttrib=function(e){e.vertexAttrib1fv(this.index,this.value)};break;case 2:u.vertexAttrib=function(e){e.vertexAttrib2fv(this.index,this.value)};break;case 3:u.vertexAttrib=function(e){e.vertexAttrib3fv(this.index,this.value)};break;case 4:u.vertexAttrib=function(e){e.vertexAttrib4fv(this.index,this.value)}}u.disableVertexAttribArray=function(e){}}e.push(u)}function sR(e,t,n){for(var i=0;i<t.length;++i){var r=t[i];r.enabled&&r.vertexAttrib(e)}Object(o.a)(n)&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n._getBuffer())}function cR(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context),i.a.defined("options.attributes",e.attributes);var t,n=e.context,s=n._gl,c=e.attributes,l=e.indexBuffer,u=[],h=1,d=!1,f=!1,p=c.length;for(t=0;t<p;++t)aR(u,c[t],t,n);for(p=u.length,t=0;t<p;++t){var m=u[t];if(Object(o.a)(m.vertexBuffer)&&0===m.instanceDivisor){var g=m.strideInBytes||m.componentsPerAttribute*Ds.getSizeInBytes(m.componentDatatype);h=m.vertexBuffer.sizeInBytes/g;break}}for(t=0;t<p;++t)u[t].instanceDivisor>0&&(d=!0),Object(o.a)(u[t].value)&&(f=!0);var v,_={};for(t=0;t<p;++t){var b=u[t].index;if(_[b])throw new a.a("Index "+b+" is used by more than one attribute.");_[b]=!0}n.vertexArrayObject&&(v=n.glCreateVertexArray(),n.glBindVertexArray(v),sR(s,u,l),n.glBindVertexArray(null)),this._numberOfVertices=h,this._hasInstancedAttributes=d,this._hasConstantAttributes=f,this._context=n,this._gl=s,this._vao=v,this._attributes=u,this._indexBuffer=l}function lR(e){return e.values.length/e.componentsPerAttribute}function uR(e){return Ds.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}cR.fromGeometry=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context);var t,n,a,s,c=e.context,l=Object(r.a)(e.geometry,r.a.EMPTY_OBJECT),u=Object(r.a)(e.bufferUsage,iR.DYNAMIC_DRAW),h=Object(r.a)(e.attributeLocations,r.a.EMPTY_OBJECT),f=Object(r.a)(e.interleave,!1),p=e.vertexArrayAttributes,m=Object(o.a)(p)?p:[],g=l.attributes;if(f){var v=function(e){var t,n,i,r,a=[];for(n in e)e.hasOwnProperty(n)&&Object(o.a)(e[n])&&Object(o.a)(e[n].values)&&(a.push(n),e[n].componentDatatype===Ds.DOUBLE&&(e[n].componentDatatype=Ds.FLOAT,e[n].values=Ds.createTypedArray(Ds.FLOAT,e[n].values)));var s=a.length;if(s>0)for(r=lR(e[a[0]]),t=1;t<s;++t){var c=lR(e[a[t]]);if(c!==r)throw new de.a("Each attribute list must have the same number of vertices. Attribute "+a[t]+" has a different number of vertices ("+c.toString()+") than attribute "+a[0]+" ("+r.toString()+").")}a.sort((function(t,n){return Ds.getSizeInBytes(e[n].componentDatatype)-Ds.getSizeInBytes(e[t].componentDatatype)}));var l=0,u={};for(t=0;t<s;++t)n=a[t],i=e[n],u[n]=l,l+=uR(i);if(l>0){var h=Ds.getSizeInBytes(e[a[0]].componentDatatype),d=l%h;0!==d&&(l+=h-d);var f=new ArrayBuffer(r*l),p={};for(t=0;t<s;++t){n=a[t];var m=Ds.getSizeInBytes(e[n].componentDatatype);p[n]={pointer:Ds.createTypedArray(e[n].componentDatatype,f),index:u[n]/m,strideInComponentType:l/m}}for(t=0;t<r;++t)for(var g=0;g<s;++g){n=a[g];for(var v=(i=e[n]).values,_=p[n],b=_.pointer,y=i.componentsPerAttribute,w=0;w<y;++w)b[_.index+w]=v[t*y+w];_.index+=_.strideInComponentType}return{buffer:f,offsetsInBytes:u,vertexSizeInBytes:l}}}(g);if(Object(o.a)(v)){a=oR.createVertexBuffer({context:c,typedArray:v.buffer,usage:u});var _=v.offsetsInBytes,b=v.vertexSizeInBytes;for(t in g)g.hasOwnProperty(t)&&Object(o.a)(g[t])&&(n=g[t],Object(o.a)(n.values)?m.push({index:h[t],vertexBuffer:a,componentDatatype:n.componentDatatype,componentsPerAttribute:n.componentsPerAttribute,normalize:n.normalize,offsetInBytes:_[t],strideInBytes:b}):m.push({index:h[t],value:n.value,componentDatatype:n.componentDatatype,normalize:n.normalize}))}}else for(t in g)if(g.hasOwnProperty(t)&&Object(o.a)(g[t])){var y=(n=g[t]).componentDatatype;y===Ds.DOUBLE&&(y=Ds.FLOAT),a=void 0,Object(o.a)(n.values)&&(a=oR.createVertexBuffer({context:c,typedArray:Ds.createTypedArray(y,n.values),usage:u})),m.push({index:h[t],vertexBuffer:a,value:n.value,componentDatatype:y,componentsPerAttribute:n.componentsPerAttribute,normalize:n.normalize})}var w=l.indices;return Object(o.a)(w)&&(s=zl.computeNumberOfVertices(l)>=d.SIXTY_FOUR_KILOBYTES&&c.elementIndexUint?oR.createIndexBuffer({context:c,typedArray:new Uint32Array(w),usage:u,indexDatatype:lc.UNSIGNED_INT}):oR.createIndexBuffer({context:c,typedArray:new Uint16Array(w),usage:u,indexDatatype:lc.UNSIGNED_SHORT})),new cR({context:c,attributes:m,indexBuffer:s})},Object.defineProperties(cR.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}}),cR.prototype.getAttribute=function(e){return i.a.defined("index",e),this._attributes[e]},cR.prototype._bind=function(){Object(o.a)(this._vao)?(this._context.glBindVertexArray(this._vao),this._context.instancedArrays&&function(e){var t=e._context,n=e._hasInstancedAttributes;if(n||t._previousDrawInstanced){t._previousDrawInstanced=n;var i,r=t._vertexAttribDivisors,o=e._attributes,a=BP.maximumVertexAttributes;if(n){var s=o.length;for(i=0;i<s;++i){var c=o[i];if(c.enabled){var l=c.instanceDivisor,u=c.index;l!==r[u]&&(t.glVertexAttribDivisor(u,l),r[u]=l)}}}else for(i=0;i<a;++i)r[i]>0&&(t.glVertexAttribDivisor(i,0),r[i]=0)}}(this),this._hasConstantAttributes&&function(e,t){for(var n=e._attributes,i=n.length,r=0;r<i;++r){var a=n[r];a.enabled&&Object(o.a)(a.value)&&a.vertexAttrib(t)}}(this,this._gl)):sR(this._gl,this._attributes,this._indexBuffer)},cR.prototype._unBind=function(){if(Object(o.a)(this._vao))this._context.glBindVertexArray(null);else{for(var e=this._attributes,t=this._gl,n=0;n<e.length;++n){var i=e[n];i.enabled&&i.disableVertexAttribArray(t)}this._indexBuffer&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}},cR.prototype.isDestroyed=function(){return!1},cR.prototype.destroy=function(){for(var e=this._attributes,t=0;t<e.length;++t){var n=e[t].vertexBuffer;Object(o.a)(n)&&!n.isDestroyed()&&n.vertexArrayDestroyable&&n.destroy()}var i=this._indexBuffer;return Object(o.a)(i)&&!i.isDestroyed()&&i.vertexArrayDestroyable&&i.destroy(),Object(o.a)(this._vao)&&this._context.glDeleteVertexArray(this._vao),Ks(this)};var hR=cR;function dR(e,t,n){if(!Object(o.a)(e))throw new a.a("context is required");if(!Object(o.a)(t))throw new a.a("attributes is required");if(!Object(o.a)(n))throw new a.a("numberOfInstances is required");if(this._attributes=t,this._numberOfInstances=n,0!==t.length){var i=function(e){for(var t=!1,n=e.length,i=0;i<n;++i)if(e[i].componentDatatype!==Ds.UNSIGNED_BYTE){t=!0;break}return t?LC.FLOAT:LC.UNSIGNED_BYTE}(t),r=e.floatingPointTexture,s=i===LC.FLOAT&&!r,c=function(e,t){for(var n=new Array(e.length),i=0,r=e.length,o=0;o<r;++o){var a=e[o].componentDatatype;n[o]=i,a!==Ds.UNSIGNED_BYTE&&t?i+=4:++i}return n}(t,s),l=function(e,t,n){var i=e.length,r=e[i-1];if(t[i-1].componentDatatype!==Ds.UNSIGNED_BYTE&&n)return r+4;return r+1}(c,t,s),u=Math.floor(BP.maximumTextureSize/l),h=Math.min(n,u),d=l*h,f=Math.ceil(n/h),p=1/d,m=.5*p,g=1/f,v=.5*g;this._textureDimensions=new Mt(d,f),this._textureStep=new he(p,m,g,v),this._pixelDatatype=s?LC.UNSIGNED_BYTE:i,this._packFloats=s,this._offsets=c,this._stride=l,this._texture=void 0;var _=4*d*f;this._batchValues=i!==LC.FLOAT||s?new Uint8Array(_):new Float32Array(_),this._batchValuesDirty=!1}}function fR(e,t){var n=e[t].componentsPerAttribute;return 2===n?Mt:3===n?O:4===n?he:Number}Object.defineProperties(dR.prototype,{attributes:{get:function(){return this._attributes}},numberOfInstances:{get:function(){return this._numberOfInstances}}});var pR=new he;var mR=new he;dR.prototype.getBatchedAttribute=function(e,t,n){if(e<0||e>=this._numberOfInstances)throw new a.a("instanceIndex is out of range.");if(t<0||t>=this._attributes.length)throw new a.a("attributeIndex is out of range");var i,r=this._attributes,s=this._offsets[t],c=4*this._stride*e+4*s;i=this._packFloats&&r[t].componentDatatype!==LC.UNSIGNED_BYTE?function(e,t,n){var i=he.unpack(e,t,pR),r=he.unpackFloat(i);i=he.unpack(e,t+4,pR);var o=he.unpackFloat(i);i=he.unpack(e,t+8,pR);var a=he.unpackFloat(i);i=he.unpack(e,t+12,pR);var s=he.unpackFloat(i);return he.fromElements(r,o,a,s,n)}(this._batchValues,c,mR):he.unpack(this._batchValues,c,mR);var l=fR(r,t);return Object(o.a)(l.fromCartesian4)?l.fromCartesian4(i,n):Object(o.a)(l.clone)?l.clone(i,n):i.x};var gR=[void 0,void 0,new Mt,new O,new he],vR=new he;function _R(e,t){var n=e._attributes[t],i=n.componentsPerAttribute,r=n.functionName,o=function(e){return 1===e?"float":"vec"+e}(i),a=function(e){return 1===e?".x":2===e?".xy":3===e?".xyz":""}(i),s=o+" "+r+"(float batchId) \n{ \n vec2 st = computeSt(batchId); \n st.x += batchTextureStep.x * float("+e._offsets[t]+"); \n";return e._packFloats&&n.componentDatatype!==LC.UNSIGNED_BYTE?s+="vec4 textureValue; \ntextureValue.x = czm_unpackFloat(texture2D(batchTexture, st)); \ntextureValue.y = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x, 0.0))); \ntextureValue.z = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0))); \ntextureValue.w = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0))); \n":s+=" vec4 textureValue = texture2D(batchTexture, st); \n",s+=" "+o+" value = textureValue"+a+"; \n",e._pixelDatatype!==LC.UNSIGNED_BYTE||n.componentDatatype!==Ds.UNSIGNED_BYTE||n.normalize?e._pixelDatatype===LC.FLOAT&&n.componentDatatype===Ds.UNSIGNED_BYTE&&n.normalize&&(s+="value /= 255.0; \n"):s+="value *= 255.0; \n",s+=" return value; \n} \n"}dR.prototype.setBatchedAttribute=function(e,t,n){if(e<0||e>=this._numberOfInstances)throw new a.a("instanceIndex is out of range.");if(t<0||t>=this._attributes.length)throw new a.a("attributeIndex is out of range");if(!Object(o.a)(n))throw new a.a("value is required.");var i=this._attributes,r=gR[i[t].componentsPerAttribute],s=this.getBatchedAttribute(e,t,r),c=fR(this._attributes,t);if(!(Object(o.a)(c.equals)?c.equals(s,n):s===n)){var l=vR;l.x=Object(o.a)(n.x)?n.x:n,l.y=Object(o.a)(n.y)?n.y:0,l.z=Object(o.a)(n.z)?n.z:0,l.w=Object(o.a)(n.w)?n.w:0;var u=this._offsets[t],h=4*this._stride*e+4*u;this._packFloats&&i[t].componentDatatype!==LC.UNSIGNED_BYTE?function(e,t,n){var i=he.packFloat(e.x,pR);he.pack(i,t,n),i=he.packFloat(e.y,i),he.pack(i,t,n+4),i=he.packFloat(e.z,i),he.pack(i,t,n+8),i=he.packFloat(e.w,i),he.pack(i,t,n+12)}(l,this._batchValues,h):he.pack(l,this._batchValues,h),this._batchValuesDirty=!0}},dR.prototype.update=function(e){Object(o.a)(this._texture)&&!this._batchValuesDirty||0===this._attributes.length||(this._batchValuesDirty=!1,Object(o.a)(this._texture)||function(e,t){var n=e._textureDimensions;e._texture=new nI({context:t,pixelFormat:FC.RGBA,pixelDatatype:e._pixelDatatype,width:n.x,height:n.y,sampler:ZP.NEAREST,flipY:!1})}(this,e.context),function(e){var t=e._textureDimensions;e._texture.copyFrom({width:t.x,height:t.y,arrayBufferView:e._batchValues})}(this))},dR.prototype.getUniformMapCallback=function(){var e=this;return function(t){if(0===e._attributes.length)return t;var n={batchTexture:function(){return e._texture},batchTextureDimensions:function(){return e._textureDimensions},batchTextureStep:function(){return e._textureStep}};return Object(Wf.a)(t,n)}},dR.prototype.getVertexShaderCallback=function(){var e=this._attributes;if(0===e.length)return function(e){return e};var t="uniform highp sampler2D batchTexture; \n";t+=function(e){var t=e._stride;return 1===e._textureDimensions.y?"uniform vec4 batchTextureStep; \nvec2 computeSt(float batchId) \n{ \n float stepX = batchTextureStep.x; \n float centerX = batchTextureStep.y; \n float numberOfAttributes = float("+t+"); \n return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5); \n} \n":"uniform vec4 batchTextureStep; \nuniform vec2 batchTextureDimensions; \nvec2 computeSt(float batchId) \n{ \n float stepX = batchTextureStep.x; \n float centerX = batchTextureStep.y; \n float stepY = batchTextureStep.z; \n float centerY = batchTextureStep.w; \n float numberOfAttributes = float("+t+"); \n float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x); \n float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x); \n return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \n} \n"}(this)+"\n";for(var n=e.length,i=0;i<n;++i)t+=_R(this,i);return function(e){var n=e.indexOf("void main"),i=e.substring(0,n),r=e.substring(n);return i+"\n"+t+"\n"+r}},dR.prototype.isDestroyed=function(){return!1},dR.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),Ks(this)};var bR=dR;function yR(e,t){var n=e.attributes,i=n.position,r=i.values.length/i.componentsPerAttribute;n.batchId=new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:1,values:new Float32Array(r)});for(var o=n.batchId.values,a=0;a<r;++a)o[a]=t}function wR(e){var t,n,i,r=e.instances,s=e.projection,c=e.elementIndexUintSupported,l=e.scene3DOnly,u=e.vertexCacheOptimize,h=e.compressVertices,d=e.modelMatrix,f=r.length;for(t=0;t<f;++t)if(Object(o.a)(r[t].geometry)){i=r[t].geometry.primitiveType;break}for(t=1;t<f;++t)if(Object(o.a)(r[t].geometry)&&r[t].geometry.primitiveType!==i)throw new a.a("All instance geometries must have the same primitiveType.");if(function(e,t,n){var i,r=!n,a=e.length;if(!r&&a>1){var s=e[0].modelMatrix;for(i=1;i<a;++i)if(!Ae.equals(s,e[i].modelMatrix)){r=!0;break}}if(r)for(i=0;i<a;++i)Object(o.a)(e[i].geometry)&&jd.transformToWorldCoordinates(e[i]);else Ae.multiplyTransformation(t,e[0].modelMatrix,t)}(r,d,l),!l)for(t=0;t<f;++t)Object(o.a)(r[t].geometry)&&jd.splitLongitude(r[t]);if(function(e){for(var t=e.length,n=0;n<t;++n){var i=e[n];Object(o.a)(i.geometry)?yR(i.geometry,n):Object(o.a)(i.westHemisphereGeometry)&&Object(o.a)(i.eastHemisphereGeometry)&&(yR(i.westHemisphereGeometry,n),yR(i.eastHemisphereGeometry,n))}}(r),u)for(t=0;t<f;++t){var p=r[t];Object(o.a)(p.geometry)?(jd.reorderForPostVertexCache(p.geometry),jd.reorderForPreVertexCache(p.geometry)):Object(o.a)(p.westHemisphereGeometry)&&Object(o.a)(p.eastHemisphereGeometry)&&(jd.reorderForPostVertexCache(p.westHemisphereGeometry),jd.reorderForPreVertexCache(p.westHemisphereGeometry),jd.reorderForPostVertexCache(p.eastHemisphereGeometry),jd.reorderForPreVertexCache(p.eastHemisphereGeometry))}var m=jd.combineInstances(r);for(f=m.length,t=0;t<f;++t){var g,v=(n=m[t]).attributes;if(l)for(g in v)v.hasOwnProperty(g)&&v[g].componentDatatype===Ds.DOUBLE&&jd.encodeAttribute(n,g,g+"3DHigh",g+"3DLow");else for(g in v)if(v.hasOwnProperty(g)&&v[g].componentDatatype===Ds.DOUBLE){var _=g+"3D",b=g+"2D";jd.projectTo2D(n,g,_,b,s),Object(o.a)(n.boundingSphere)&&"position"===g&&(n.boundingSphereCV=gt.fromVertices(n.attributes.position2D.values)),jd.encodeAttribute(n,_,_+"High",_+"Low"),jd.encodeAttribute(n,b,b+"High",b+"Low")}h&&jd.compressVertices(n)}if(!c){var y=[];for(f=m.length,t=0;t<f;++t)n=m[t],y=y.concat(jd.fitToUnsignedShortIndices(n));m=y}return m}function OR(e,t,n,i){var r,a,s,c=i.length-1;if(c>=0){var l=i[c];r=l.offset+l.count,a=n[s=l.index].indices.length}else r=0,a=n[s=0].indices.length;for(var u=e.length,h=0;h<u;++h){var d=e[h][t];if(Object(o.a)(d)){var f=d.indices.length;r+f>a&&(r=0,a=n[++s].indices.length),i.push({index:s,offset:r,count:f}),r+=f}}}var CR={};function ER(e,t){var n=e.attributes;for(var i in n)if(n.hasOwnProperty(i)){var r=n[i];Object(o.a)(r)&&Object(o.a)(r.values)&&t.push(r.values.buffer)}Object(o.a)(e.indices)&&t.push(e.indices.buffer)}function AR(e,t){var n=e.length,i=new Float64Array(1+19*n),r=0;i[r++]=n;for(var a=0;a<n;a++){var s=e[a];if(Ae.pack(s.modelMatrix,i,r),r+=Ae.packedLength,Object(o.a)(s.attributes)&&Object(o.a)(s.attributes.offset)){var c=s.attributes.offset.value;i[r]=c[0],i[r+1]=c[1],i[r+2]=c[2]}r+=3}return t.push(i.buffer),i}function xR(e){var t=e.length,n=1+(gt.packedLength+1)*t,i=new Float32Array(n),r=0;i[r++]=t;for(var a=0;a<t;++a){var s=e[a];Object(o.a)(s)?(i[r++]=1,gt.pack(e[a],i,r)):i[r++]=0,r+=gt.packedLength}return i}function TR(e){for(var t=new Array(e[0]),n=0,i=1;i<e.length;)1===e[i++]&&(t[n]=gt.unpack(e,i)),++n,i+=gt.packedLength;return t}CR.combineGeometry=function(e){var t,n,i,r,a=e.instances,s=a.length,c=!1;s>0&&((t=wR(e)).length>0&&(n=jd.createAttributeLocations(t[0]),e.createPickOffsets&&(i=function(e,t){var n=[];return OR(e,"geometry",t,n),OR(e,"westHemisphereGeometry",t,n),OR(e,"eastHemisphereGeometry",t,n),n}(a,t))),Object(o.a)(a[0].attributes)&&Object(o.a)(a[0].attributes.offset)&&(r=new Array(s),c=!0));for(var l=new Array(s),u=new Array(s),h=0;h<s;++h){var d=a[h],f=d.geometry;Object(o.a)(f)&&(l[h]=f.boundingSphere,u[h]=f.boundingSphereCV,c&&(r[h]=d.geometry.offsetAttribute));var p=d.eastHemisphereGeometry,m=d.westHemisphereGeometry;Object(o.a)(p)&&Object(o.a)(m)&&(Object(o.a)(p.boundingSphere)&&Object(o.a)(m.boundingSphere)&&(l[h]=gt.union(p.boundingSphere,m.boundingSphere)),Object(o.a)(p.boundingSphereCV)&&Object(o.a)(m.boundingSphereCV)&&(u[h]=gt.union(p.boundingSphereCV,m.boundingSphereCV)))}return{geometries:t,modelMatrix:e.modelMatrix,attributeLocations:n,pickOffsets:i,offsetInstanceExtend:r,boundingSpheres:l,boundingSpheresCV:u}},CR.packCreateGeometryResults=function(e,t){var n=new Float64Array(function(e){for(var t=1,n=e.length,i=0;i<n;i++){var r=e[i];if(++t,Object(o.a)(r)){var a=r.attributes;for(var s in t+=7+2*gt.packedLength+(Object(o.a)(r.indices)?r.indices.length:0),a){if(a.hasOwnProperty(s)&&Object(o.a)(a[s]))t+=5+a[s].values.length}}}return t}(e)),i=[],a={},s=e.length,c=0;n[c++]=s;for(var l=0;l<s;l++){var u=e[l],h=Object(o.a)(u);if(n[c++]=h?1:0,h){n[c++]=u.primitiveType,n[c++]=u.geometryType,n[c++]=Object(r.a)(u.offsetAttribute,-1);var d=Object(o.a)(u.boundingSphere)?1:0;n[c++]=d,d&>.pack(u.boundingSphere,n,c),c+=gt.packedLength;var f=Object(o.a)(u.boundingSphereCV)?1:0;n[c++]=f,f&>.pack(u.boundingSphereCV,n,c),c+=gt.packedLength;var p=u.attributes,m=[];for(var g in p)p.hasOwnProperty(g)&&Object(o.a)(p[g])&&(m.push(g),Object(o.a)(a[g])||(a[g]=i.length,i.push(g)));n[c++]=m.length;for(var v=0;v<m.length;v++){var _=m[v],b=p[_];n[c++]=a[_],n[c++]=b.componentDatatype,n[c++]=b.componentsPerAttribute,n[c++]=b.normalize?1:0,n[c++]=b.values.length,n.set(b.values,c),c+=b.values.length}var y=Object(o.a)(u.indices)?u.indices.length:0;n[c++]=y,y>0&&(n.set(u.indices,c),c+=y)}}return t.push(n.buffer),{stringTable:i,packedData:n}},CR.unpackCreateGeometryResults=function(e){for(var t,n=e.stringTable,i=e.packedData,r=new Array(i[0]),o=0,a=1;a<i.length;){if(1===i[a++]){var s,c,l,u,h,d=i[a++],f=i[a++],p=i[a++];-1===p&&(p=void 0),1===i[a++]&&(s=gt.unpack(i,a)),a+=gt.packedLength,1===i[a++]&&(c=gt.unpack(i,a)),a+=gt.packedLength;var m,g=new Bl,v=i[a++];for(t=0;t<v;t++){var _=n[i[a++]],b=i[a++];h=i[a++];var y=0!==i[a++];l=i[a++],u=Ds.createTypedArray(b,l);for(var w=0;w<l;w++)u[w]=i[a++];g[_]=new kl({componentDatatype:b,componentsPerAttribute:h,normalize:y,values:u})}if((l=i[a++])>0){var O=u.length/h;for(m=lc.createTypedArray(O,l),t=0;t<l;t++)m[t]=i[a++]}r[o++]=new zl({primitiveType:d,geometryType:f,boundingSphere:s,boundingSphereCV:c,indices:m,attributes:g,offsetAttribute:p})}else r[o++]=void 0}return r},CR.packCombineGeometryParameters=function(e,t){for(var n=e.createGeometryResults,i=n.length,r=0;r<i;r++)t.push(n[r].packedData.buffer);return{createGeometryResults:e.createGeometryResults,packedInstances:AR(e.instances,t),ellipsoid:e.ellipsoid,isGeographic:e.projection instanceof q,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e.createPickOffsets}},CR.unpackCombineGeometryParameters=function(e){for(var t=function(e){for(var t=e,n=new Array(t[0]),i=0,r=1;r<t.length;){var a,s=Ae.unpack(t,r);r+=Ae.packedLength,Object(o.a)(t[r])&&(a={offset:new vE(t[r],t[r+1],t[r+2])}),r+=3,n[i++]={modelMatrix:s,attributes:a}}return n}(e.packedInstances),n=e.createGeometryResults,i=n.length,r=0,a=0;a<i;a++)for(var s=CR.unpackCreateGeometryResults(n[a]),c=s.length,l=0;l<c;l++){var u=s[l];t[r].geometry=u,++r}var h=W.clone(e.ellipsoid);return{instances:t,ellipsoid:h,projection:e.isGeographic?new q(h):new Vs(h),elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:Ae.clone(e.modelMatrix),createPickOffsets:e.createPickOffsets}},CR.packCombineGeometryResults=function(e,t){Object(o.a)(e.geometries)&&function(e,t){for(var n=e.length,i=0;i<n;++i)ER(e[i],t)}(e.geometries,t);var n=xR(e.boundingSpheres),i=xR(e.boundingSpheresCV);return t.push(n.buffer,i.buffer),{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:n,boundingSpheresCV:i}},CR.unpackCombineGeometryResults=function(e){return{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:TR(e.boundingSpheres),boundingSpheresCV:TR(e.boundingSpheresCV)}};var SR=CR,DR=Object.freeze({READY:0,CREATING:1,CREATED:2,COMBINING:3,COMBINED:4,COMPLETE:5,FAILED:6}),PR={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3,getMorphTime:function(e){return e===PR.SCENE3D?1:e!==PR.MORPHING?0:void 0}},IR=Object.freeze(PR),MR={DISABLED:0,ENABLED:1,CAST_ONLY:2,RECEIVE_ONLY:3,NUMBER_OF_SHADOW_MODES:4,castShadows:function(e){return e===MR.ENABLED||e===MR.CAST_ONLY},receiveShadows:function(e){return e===MR.ENABLED||e===MR.RECEIVE_ONLY},fromCastReceive:function(e,t){return e&&t?MR.ENABLED:e?MR.CAST_ONLY:t?MR.RECEIVE_ONLY:MR.DISABLED}},RR=Object.freeze(MR);function LR(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.geometryInstances=e.geometryInstances,this.appearance=e.appearance,this._appearance=void 0,this._material=void 0,this.depthFailAppearance=e.depthFailAppearance,this._depthFailAppearance=void 0,this._depthFailMaterial=void 0,this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=new Ae,this.show=Object(r.a)(e.show,!0),this._vertexCacheOptimize=Object(r.a)(e.vertexCacheOptimize,!1),this._interleave=Object(r.a)(e.interleave,!1),this._releaseGeometryInstances=Object(r.a)(e.releaseGeometryInstances,!0),this._allowPicking=Object(r.a)(e.allowPicking,!0),this._asynchronous=Object(r.a)(e.asynchronous,!0),this._compressVertices=Object(r.a)(e.compressVertices,!0),this.cull=Object(r.a)(e.cull,!0),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.rtcCenter=e.rtcCenter,Object(o.a)(this.rtcCenter)&&(!Object(o.a)(this.geometryInstances)||Array.isArray(this.geometryInstances)&&1!==this.geometryInstances.length))throw new a.a("Relative-to-center rendering only supports one geometry instance.");this.shadows=Object(r.a)(e.shadows,RR.DISABLED),this._translucent=void 0,this._state=DR.READY,this._geometries=[],this._error=void 0,this._numberOfInstances=0,this._boundingSpheres=[],this._boundingSphereWC=[],this._boundingSphereCV=[],this._boundingSphere2D=[],this._boundingSphereMorph=[],this._perInstanceAttributeCache=[],this._instanceIds=[],this._lastPerInstanceAttributeIndex=0,this._va=[],this._attributeLocations=void 0,this._primitiveType=void 0,this._frontFaceRS=void 0,this._backFaceRS=void 0,this._sp=void 0,this._depthFailAppearance=void 0,this._spDepthFail=void 0,this._frontFaceDepthFailRS=void 0,this._backFaceDepthFailRS=void 0,this._pickIds=[],this._colorCommands=[],this._pickCommands=[],this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._createRenderStatesFunction=e._createRenderStatesFunction,this._createShaderProgramFunction=e._createShaderProgramFunction,this._createCommandsFunction=e._createCommandsFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._createPickOffsets=e._createPickOffsets,this._pickOffsets=void 0,this._createGeometryResults=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._batchTable=void 0,this._batchTableAttributeIndices=void 0,this._offsetInstanceExtend=void 0,this._batchTableOffsetAttribute2DIndex=void 0,this._batchTableOffsetsUpdated=!1,this._instanceBoundingSpheres=void 0,this._instanceBoundingSpheresCV=void 0,this._tempBoundingSpheres=void 0,this._recomputeBoundingSpheres=!1,this._batchTableBoundingSpheresUpdated=!1,this._batchTableBoundingSphereAttributeIndices=void 0}Object.defineProperties(LR.prototype,{vertexCacheOptimize:{get:function(){return this._vertexCacheOptimize}},interleave:{get:function(){return this._interleave}},releaseGeometryInstances:{get:function(){return this._releaseGeometryInstances}},allowPicking:{get:function(){return this._allowPicking}},asynchronous:{get:function(){return this._asynchronous}},compressVertices:{get:function(){return this._compressVertices}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}}});var jR=new Mt,FR=new O,NR=new he;function zR(e){var t=e.length;return 1===t?e[0]:2===t?Mt.unpack(e,0,jR):3===t?O.unpack(e,0,FR):4===t?he.unpack(e,0,NR):void 0}function kR(e,t){var n=e.geometryInstances,i=Array.isArray(n)?n:[n],a=i.length;if(0!==a){var s,c,l,u,h=function(e){var t,n=e.length,i=[],r=e[0].attributes;for(t in r)if(r.hasOwnProperty(t)&&Object(o.a)(r[t])){for(var a=r[t],s=!0,c=1;c<n;++c){var l=e[c].attributes[t];if(!Object(o.a)(l)||a.componentDatatype!==l.componentDatatype||a.componentsPerAttribute!==l.componentsPerAttribute||a.normalize!==l.normalize){s=!1;break}}s&&i.push(t)}return i}(i),d=h.length,f=[],p={},m={},g=i[0].attributes;for(c=0;c<d;++c)u=g[l=h[c]],p[l]=c,f.push({functionName:"czm_batchTable_"+l,componentDatatype:u.componentDatatype,componentsPerAttribute:u.componentsPerAttribute,normalize:u.normalize});-1!==h.indexOf("distanceDisplayCondition")&&(f.push({functionName:"czm_batchTable_boundingSphereCenter3DHigh",componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter3DLow",componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DHigh",componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DLow",componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereRadius",componentDatatype:Ds.FLOAT,componentsPerAttribute:1}),m.center3DHigh=f.length-5,m.center3DLow=f.length-4,m.center2DHigh=f.length-3,m.center2DLow=f.length-2,m.radius=f.length-1),-1!==h.indexOf("offset")&&(f.push({functionName:"czm_batchTable_offset2D",componentDatatype:Ds.FLOAT,componentsPerAttribute:3}),s=f.length-1),f.push({functionName:"czm_batchTable_pickColor",componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0});var v=f.length,_=new bR(t,f,a);for(c=0;c<a;++c){var b=i[c];g=b.attributes;for(var y=0;y<d;++y){var w=zR((u=g[l=h[y]]).value),O=p[l];_.setBatchedAttribute(c,O,w)}var C={primitive:Object(r.a)(b.pickPrimitive,e)};Object(o.a)(b.id)&&(C.id=b.id);var E=t.createPickId(C);e._pickIds.push(E);var A=E.color,x=NR;x.x=Hf.floatToByte(A.red),x.y=Hf.floatToByte(A.green),x.z=Hf.floatToByte(A.blue),x.w=Hf.floatToByte(A.alpha),_.setBatchedAttribute(c,v-1,x)}e._batchTable=_,e._batchTableAttributeIndices=p,e._batchTableBoundingSphereAttributeIndices=m,e._batchTableOffsetAttribute2DIndex=s}}function BR(e){var t;return t=Array.isArray(e.values)?e.values.slice(0):new e.values.constructor(e.values),new kl({componentDatatype:e.componentDatatype,componentsPerAttribute:e.componentsPerAttribute,normalize:e.normalize,values:t})}function HR(e){var t,n=e.attributes,i=new Bl;for(var r in n)n.hasOwnProperty(r)&&Object(o.a)(n[r])&&(i[r]=BR(n[r]));if(Object(o.a)(e.indices)){var a=e.indices;t=Array.isArray(a)?a.slice(0):new a.constructor(a)}return new zl({attributes:i,indices:t,primitiveType:e.primitiveType,boundingSphere:gt.clone(e.boundingSphere)})}function VR(e,t){return{geometry:t,attributes:e.attributes,modelMatrix:Ae.clone(e.modelMatrix),pickPrimitive:e.pickPrimitive,id:e.id}}var UR=/attribute\s+vec(?:3|4)\s+(.*)3DHigh;/g;function WR(e){return KM.replaceMain(e,"czm_non_pick_main")+"\nvarying vec4 v_pickColor; \nvoid main() \n{ \n czm_non_pick_main(); \n v_pickColor = czm_batchTable_pickColor(batchId); \n}"}function GR(e){return"varying vec4 v_pickColor;\n"+e}function qR(e,t){if(!e.compressVertices)return t;var n=-1!==t.search(/attribute\s+vec3\s+normal;/g),i=-1!==t.search(/attribute\s+vec2\s+st;/g);if(!n&&!i)return t;var r=-1!==t.search(/attribute\s+vec3\s+tangent;/g),o=-1!==t.search(/attribute\s+vec3\s+bitangent;/g),a=i&&n?2:1,s="compressedAttributes",c="attribute "+((a+=r||o?1:0)>1?"vec"+a:"float")+" "+s+";",l="",u="";i&&(l+="vec2 st;\n",u+=" st = czm_decompressTextureCoordinates("+(a>1?s+".x":s)+");\n");n&&r&&o?(l+="vec3 normal;\nvec3 tangent;\nvec3 bitangent;\n",u+=" czm_octDecode("+s+"."+(i?"yz":"xy")+", normal, tangent, bitangent);\n"):(n&&(l+="vec3 normal;\n",u+=" normal = czm_octDecode("+s+(a>1?"."+(i?"y":"x"):"")+");\n"),r&&(l+="vec3 tangent;\n",u+=" tangent = czm_octDecode("+s+"."+(i&&n?"z":"y")+");\n"),o&&(l+="vec3 bitangent;\n",u+=" bitangent = czm_octDecode("+s+"."+(i&&n?"z":"y")+");\n"));var h=t;return h=(h=(h=(h=h.replace(/attribute\s+vec3\s+normal;/g,"")).replace(/attribute\s+vec2\s+st;/g,"")).replace(/attribute\s+vec3\s+tangent;/g,"")).replace(/attribute\s+vec3\s+bitangent;/g,""),[c,l,h=KM.replaceMain(h,"czm_non_compressed_main"),"void main() \n{ \n"+u+" czm_non_compressed_main(); \n}"].join("\n")}function YR(e,t){var n=e.vertexAttributes;for(var i in n)if(n.hasOwnProperty(i)&&!Object(o.a)(t[i]))throw new a.a("Appearance/Geometry mismatch. The appearance requires vertex shader attribute input '"+i+"', which was not computed as part of the Geometry. Use the appearance's vertexFormat property when constructing the geometry.")}function $R(e,t){return function(){return e[t]}}LR._modifyShaderPosition=function(e,t,n){for(var i,r="",a="",s="";null!==(i=UR.exec(t));){var c=i[1],l="vec4 czm_compute"+c[0].toUpperCase()+c.substr(1)+"()";"vec4 czm_computePosition()"!==l&&(r+=l+";\n"),Object(o.a)(e.rtcCenter)?(r+="uniform mat4 u_modifiedModelView;\n",a+="attribute vec4 position;\n",s+=l+"\n{\n return u_modifiedModelView * position;\n}\n\n",t=(t=(t=(t=t.replace(/attribute\s+vec(?:3|4)\s+position3DHigh;/g,"")).replace(/attribute\s+vec(?:3|4)\s+position3DLow;/g,"")).replace(/czm_modelViewRelativeToEye\s+\*\s+/g,"")).replace(/czm_modelViewProjectionRelativeToEye/g,"czm_projection")):n?s+=l+"\n{\n return czm_translateRelativeToEye("+c+"3DHigh, "+c+"3DLow);\n}\n\n":(a+="attribute vec3 "+c+"2DHigh;\nattribute vec3 "+c+"2DLow;\n",s+=l+"\n{\n vec4 p;\n if (czm_morphTime == 1.0)\n {\n p = czm_translateRelativeToEye("+c+"3DHigh, "+c+"3DLow);\n }\n else if (czm_morphTime == 0.0)\n {\n p = czm_translateRelativeToEye("+c+"2DHigh.zxy, "+c+"2DLow.zxy);\n }\n else\n {\n p = czm_columbusViewMorph(\n czm_translateRelativeToEye("+c+"2DHigh.zxy, "+c+"2DLow.zxy),\n czm_translateRelativeToEye("+c+"3DHigh, "+c+"3DLow),\n czm_morphTime);\n }\n return p;\n}\n\n")}return[r,a,t,s].join("\n")},LR._appendShowToShader=function(e,t){if(!Object(o.a)(e._batchTableAttributeIndices.show))return t;return KM.replaceMain(t,"czm_non_show_main")+"\nvoid main() \n{ \n czm_non_show_main(); \n gl_Position *= czm_batchTable_show(batchId); \n}"},LR._updateColorAttribute=function(e,t,n){if(!Object(o.a)(e._batchTableAttributeIndices.color)&&!Object(o.a)(e._batchTableAttributeIndices.depthFailColor))return t;if(-1===t.search(/attribute\s+vec4\s+color;/g))return t;if(n&&!Object(o.a)(e._batchTableAttributeIndices.depthFailColor))throw new a.a("A depthFailColor per-instance attribute is required when using a depth fail appearance that uses a color attribute.");var i=t;return i=i.replace(/attribute\s+vec4\s+color;/g,""),i=n?i.replace(/(\b)color(\b)/g,"$1czm_batchTable_depthFailColor(batchId)$2"):i.replace(/(\b)color(\b)/g,"$1czm_batchTable_color(batchId)$2")},LR._updatePickColorAttribute=function(e){var t=e.replace(/attribute\s+vec4\s+pickColor;/g,"");return t=t.replace(/(\b)pickColor(\b)/g,"$1czm_batchTable_pickColor(batchId)$2")},LR._appendOffsetToShader=function(e,t){if(!Object(o.a)(e._batchTableAttributeIndices.offset))return t;var n=t.replace(/attribute\s+float\s+batchId;/g,"attribute float batchId;\nattribute float applyOffset;");return" if (czm_sceneMode == czm_sceneMode3D)\n"," {\n"," $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);"," }\n"," else\n"," {\n"," $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);"," }\n",n=n.replace(/vec4\s+([A-Za-z0-9_]+)\s+=\s+czm_computePosition\(\);/g,"vec4 $1 = czm_computePosition();\n if (czm_sceneMode == czm_sceneMode3D)\n {\n $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0); }\n else\n {\n $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0); }\n")},LR._appendDistanceDisplayConditionToShader=function(e,t,n){if(!Object(o.a)(e._batchTableAttributeIndices.distanceDisplayCondition))return t;var i="void main() \n{ \n czm_non_distanceDisplayCondition_main(); \n vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId);\n vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId);\n vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId);\n float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId);\n";return i+=n?" vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\n":" vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId);\n vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId);\n vec4 centerRTE;\n if (czm_morphTime == 1.0)\n {\n centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\n }\n else if (czm_morphTime == 0.0)\n {\n centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy);\n }\n else\n {\n centerRTE = czm_columbusViewMorph(\n czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy),\n czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow),\n czm_morphTime);\n }\n",KM.replaceMain(t,"czm_non_distanceDisplayCondition_main")+"\n"+(i+=" float radiusSq = boundingSphereRadius * boundingSphereRadius; \n float distanceSq; \n if (czm_sceneMode == czm_sceneMode2D) \n { \n distanceSq = czm_eyeHeight2D.y - radiusSq; \n } \n else \n { \n distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq; \n } \n distanceSq = max(distanceSq, 0.0); \n float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; \n float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; \n float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; \n gl_Position *= show; \n}")};var XR,KR=Math.max(oo.hardwareConcurrency-1,1),QR=new ac("combineGeometry",Number.POSITIVE_INFINITY);var ZR=new vh,JR=new R,eL=new O,tL=new gt;var nL=new O,iL=new O;function rL(e,t){if(Object(o.a)(e._batchTableAttributeIndices.offset)&&!e._batchTableOffsetsUpdated&&!t.scene3DOnly){for(var n=e._batchTableOffsetAttribute2DIndex,i=t.mapProjection,r=i.ellipsoid,a=e._batchTable,s=e._instanceBoundingSpheres,c=s.length,l=0;l<c;++l){var u=s[l];if(Object(o.a)(u)){var h=a.getBatchedAttribute(l,e._batchTableAttributeIndices.offset);if(O.equals(h,O.ZERO))a.setBatchedAttribute(l,n,O.ZERO);else{var d=e.modelMatrix;Object(o.a)(d)&&(u=gt.transform(u,d,tL));var f=u.center;f=r.scaleToGeodeticSurface(f,iL);var p=r.cartesianToCartographic(f,JR),m=i.project(p,eL),g=O.add(h,f,nL);p=r.cartesianToCartographic(g,p);var v=i.project(p,nL),_=O.subtract(v,m,nL),b=_.x;_.x=_.z,_.z=_.y,_.y=b,a.setBatchedAttribute(l,n,_)}}}e._batchTableOffsetsUpdated=!0}}function oL(e,t,n,i){var r,a=n.getRenderState();i?((r=Object(Lf.a)(a,!1)).cull={enabled:!0,face:FP.BACK},e._frontFaceRS=XI.fromCache(r),r.cull.face=FP.FRONT,e._backFaceRS=XI.fromCache(r)):(e._frontFaceRS=XI.fromCache(a),e._backFaceRS=e._frontFaceRS),r=Object(Lf.a)(a,!1),Object(o.a)(e._depthFailAppearance)&&(r.depthTest.enabled=!1),Object(o.a)(e._depthFailAppearance)&&(a=e._depthFailAppearance.getRenderState(),(r=Object(Lf.a)(a,!1)).depthTest.func=tR.GREATER,i?(r.cull={enabled:!0,face:FP.BACK},e._frontFaceDepthFailRS=XI.fromCache(r),r.cull.face=FP.FRONT,e._backFaceDepthFailRS=XI.fromCache(r)):(e._frontFaceDepthFailRS=XI.fromCache(r),e._backFaceDepthFailRS=e._frontFaceRS))}function aL(e,t,n){var i=t.context,r=e._attributeLocations,a=e._batchTable.getVertexShaderCallback()(n.vertexShaderSource);a=LR._appendOffsetToShader(e,a),a=LR._appendShowToShader(e,a),a=WR(a=LR._appendDistanceDisplayConditionToShader(e,a,t.scene3DOnly)),a=qR(e,a=LR._updateColorAttribute(e,a,!1)),a=LR._modifyShaderPosition(e,a,t.scene3DOnly);var s=n.getFragmentShaderSource();s=GR(s),e._sp=LM.replaceCache({context:i,shaderProgram:e._sp,vertexShaderSource:a,fragmentShaderSource:s,attributeLocations:r}),YR(e._sp,r),Object(o.a)(e._depthFailAppearance)&&(a=e._batchTable.getVertexShaderCallback()(e._depthFailAppearance.vertexShaderSource),a=LR._appendShowToShader(e,a),a=WR(a=LR._appendDistanceDisplayConditionToShader(e,a,t.scene3DOnly)),a=qR(e,a=LR._updateColorAttribute(e,a,!0)),a=function(e){var t=KM.replaceMain(e,"czm_non_depth_clamp_main");return t+="void main() {\n czm_non_depth_clamp_main();\n gl_Position = czm_depthClamp(gl_Position);}\n"}(a=LR._modifyShaderPosition(e,a,t.scene3DOnly)),s=function(e){var t=KM.replaceMain(e,"czm_non_depth_clamp_main");return t="#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n"+(t+="void main() {\n czm_non_depth_clamp_main();\n#if defined(GL_EXT_frag_depth)\n #if defined(LOG_DEPTH)\n czm_writeLogDepth();\n #else\n czm_writeDepthClamp();\n #endif\n#endif\n}\n")}(s=GR(s=e._depthFailAppearance.getFragmentShaderSource())),e._spDepthFail=LM.replaceCache({context:i,shaderProgram:e._spDepthFail,vertexShaderSource:a,fragmentShaderSource:s,attributeLocations:r}),YR(e._spDepthFail,r))}var sL=new Ae,cL=new O;function lL(e,t,n,i){var r=Object(o.a)(n)?n._uniforms:void 0,s={},c=t.uniforms;if(Object(o.a)(c))for(var l in c)if(c.hasOwnProperty(l)){if(Object(o.a)(r)&&Object(o.a)(r[l]))throw new a.a("Appearance and material have a uniform with the same name: "+l);s[l]=$R(c,l)}var u=Object(Wf.a)(s,r);return u=e._batchTable.getUniformMapCallback()(u),Object(o.a)(e.rtcCenter)&&(u.u_modifiedModelView=function(){var t=i.context.uniformState.view;return Ae.multiply(t,e._modelMatrix,sL),Ae.multiplyByPoint(sL,e.rtcCenter,cL),Ae.setTranslation(sL,cL,sL),sL}),u}function uL(e,t,n,i,r,a,s,c){var l,u=lL(e,t,n,c);Object(o.a)(e._depthFailAppearance)&&(l=lL(e,e._depthFailAppearance,e._depthFailAppearance.material,c));var h=i?EI.TRANSLUCENT:EI.OPAQUE,d=r?2:1;d*=Object(o.a)(e._depthFailAppearance)?2:1,a.length=e._va.length*d;for(var f=a.length,p=0,m=0;m<f;++m){var g;r&&(g=a[m],Object(o.a)(g)||(g=a[m]=new CI({owner:e,primitiveType:e._primitiveType})),g.vertexArray=e._va[p],g.renderState=e._backFaceRS,g.shaderProgram=e._sp,g.uniformMap=u,g.pass=h,++m),g=a[m],Object(o.a)(g)||(g=a[m]=new CI({owner:e,primitiveType:e._primitiveType})),g.vertexArray=e._va[p],g.renderState=e._frontFaceRS,g.shaderProgram=e._sp,g.uniformMap=u,g.pass=h,Object(o.a)(e._depthFailAppearance)&&(r&&(g=a[++m],Object(o.a)(g)||(g=a[m]=new CI({owner:e,primitiveType:e._primitiveType})),g.vertexArray=e._va[p],g.renderState=e._backFaceDepthFailRS,g.shaderProgram=e._spDepthFail,g.uniformMap=l,g.pass=h),g=a[++m],Object(o.a)(g)||(g=a[m]=new CI({owner:e,primitiveType:e._primitiveType})),g.vertexArray=e._va[p],g.renderState=e._frontFaceDepthFailRS,g.shaderProgram=e._spDepthFail,g.uniformMap=l,g.pass=h),++p}}function hL(e,t,n,i,r,s,c,l){if(t.mode!==IR.SCENE3D&&!Ae.equals(r,Ae.IDENTITY))throw new a.a("Primitive.modelMatrix is only supported in 3D mode.");var u;LR._updateBoundingVolumes(e,t,r),t.mode===IR.SCENE3D?u=e._boundingSphereWC:t.mode===IR.COLUMBUS_VIEW?u=e._boundingSphereCV:t.mode===IR.SCENE2D&&Object(o.a)(e._boundingSphere2D)?u=e._boundingSphere2D:Object(o.a)(e._boundingSphereMorph)&&(u=e._boundingSphereMorph);var h=t.commandList,d=t.passes;if(d.render||d.pick){var f=e.allowPicking,p=RR.castShadows(e.shadows),m=RR.receiveShadows(e.shadows),g=n.length,v=l?2:1;v*=Object(o.a)(e._depthFailAppearance)?2:1;for(var _=0;_<g;++_){var b=Math.floor(_/v),y=n[_];y.modelMatrix=r,y.boundingVolume=u[b],y.cull=s,y.debugShowBoundingVolume=c,y.castShadows=p,y.receiveShadows=m,y.pickId=f?"v_pickColor":void 0,h.push(y)}}}LR._updateBoundingVolumes=function(e,t,n,i){var r,a,s;if(i||!Ae.equals(n,e._modelMatrix))for(Ae.clone(n,e._modelMatrix),a=e._boundingSpheres.length,r=0;r<a;++r)s=e._boundingSpheres[r],Object(o.a)(s)&&(e._boundingSphereWC[r]=gt.transform(s,n,e._boundingSphereWC[r]),t.scene3DOnly||(e._boundingSphere2D[r]=gt.clone(e._boundingSphereCV[r],e._boundingSphere2D[r]),e._boundingSphere2D[r].center.x=0,e._boundingSphereMorph[r]=gt.union(e._boundingSphereWC[r],e._boundingSphereCV[r])));var c=e.appearance.pixelSize;if(Object(o.a)(c))for(a=e._boundingSpheres.length,r=0;r<a;++r){s=e._boundingSpheres[r];var l=e._boundingSphereWC[r],u=t.camera.getPixelSize(s,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*c;l.radius=s.radius+u}},LR.prototype.update=function(e){if(!(!Object(o.a)(this.geometryInstances)&&0===this._va.length||Object(o.a)(this.geometryInstances)&&Array.isArray(this.geometryInstances)&&0===this.geometryInstances.length||!Object(o.a)(this.appearance)||e.mode!==IR.SCENE3D&&e.scene3DOnly||!e.passes.render&&!e.passes.pick)){if(Object(o.a)(this._error))throw this._error;if(Object(o.a)(this.rtcCenter)&&!e.scene3DOnly)throw new a.a("RTC rendering is only available for 3D only scenes.");if(this._state!==DR.FAILED){var t=e.context;if(Object(o.a)(this._batchTable)||kR(this,t),this._batchTable.attributes.length>0){if(0===BP.maximumVertexTextureImageUnits)throw new de.a("Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.");this._batchTable.update(e)}if(this._state!==DR.COMPLETE&&this._state!==DR.COMBINED&&(this.asynchronous?function(e,t){var n,i,s,c,l=e._instanceIds;if(e._state===DR.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];var u,h=e._numberOfInstances=n.length,d=[],f=[];for(s=0;s<h;++s){if(i=n[s].geometry,l.push(n[s].id),!Object(o.a)(i._workerName))throw new a.a("_workerName must be defined for asynchronous geometry.");f.push({moduleName:i._workerName,geometry:i})}if(!Object(o.a)(XR))for(XR=new Array(KR),s=0;s<KR;s++)XR[s]=new ac("createGeometry",Number.POSITIVE_INFINITY);for(f=XS(f,KR),s=0;s<f.length;s++){var p,m=0,g=f[s],v=g.length;for(c=0;c<v;++c)i=(u=g[c]).geometry,Object(o.a)(i.constructor.pack)&&(u.offset=m,m+=Object(r.a)(i.constructor.packedLength,i.packedLength));if(m>0){var _=new Float64Array(m);for(p=[_.buffer],c=0;c<v;++c)i=(u=g[c]).geometry,Object(o.a)(i.constructor.pack)&&(i.constructor.pack(i,_,u.offset),u.geometry=_)}d.push(XR[s].scheduleTask({subTasks:f[s]},p))}e._state=DR.CREATING,Yt.a.all(d,(function(t){e._createGeometryResults=t,e._state=DR.CREATED})).otherwise((function(n){_L(e,t,DR.FAILED,n)}))}else if(e._state===DR.CREATED){var b=[];n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];var y=t.scene3DOnly,w=t.mapProjection,O=QR.scheduleTask(SR.packCombineGeometryParameters({createGeometryResults:e._createGeometryResults,instances:n,ellipsoid:w.ellipsoid,projection:w,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:y,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets},b),b);e._createGeometryResults=void 0,e._state=DR.COMBINING,Object(Yt.a)(O,(function(n){var i=SR.unpackCombineGeometryResults(n);e._geometries=i.geometries,e._attributeLocations=i.attributeLocations,e.modelMatrix=Ae.clone(i.modelMatrix,e.modelMatrix),e._pickOffsets=i.pickOffsets,e._offsetInstanceExtend=i.offsetInstanceExtend,e._instanceBoundingSpheres=i.boundingSpheres,e._instanceBoundingSpheresCV=i.boundingSpheresCV,Object(o.a)(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=DR.COMBINED):_L(e,t,DR.FAILED,void 0)})).otherwise((function(n){_L(e,t,DR.FAILED,n)}))}}(this,e):function(e,t){var n,i,r=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances],a=e._numberOfInstances=r.length,s=new Array(a),c=e._instanceIds,l=0;for(i=0;i<a;i++){var u,h=(n=r[i]).geometry;u=Object(o.a)(h.attributes)&&Object(o.a)(h.primitiveType)?HR(h):h.constructor.createGeometry(h),s[l++]=VR(n,u),c.push(n.id)}s.length=l;var d=t.scene3DOnly,f=t.mapProjection,p=SR.combineGeometry({instances:s,ellipsoid:f.ellipsoid,projection:f,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:d,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets});e._geometries=p.geometries,e._attributeLocations=p.attributeLocations,e.modelMatrix=Ae.clone(p.modelMatrix,e.modelMatrix),e._pickOffsets=p.pickOffsets,e._offsetInstanceExtend=p.offsetInstanceExtend,e._instanceBoundingSpheres=p.boundingSpheres,e._instanceBoundingSpheresCV=p.boundingSpheresCV,Object(o.a)(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=DR.COMBINED):_L(e,t,DR.FAILED,void 0)}(this,e)),this._state===DR.COMBINED&&(function(e,t){if(Object(o.a)(e._batchTableAttributeIndices.distanceDisplayCondition)&&!e._batchTableBoundingSpheresUpdated){for(var n=e._batchTableBoundingSphereAttributeIndices,i=n.center3DHigh,r=n.center3DLow,a=n.center2DHigh,s=n.center2DLow,c=n.radius,l=t.mapProjection,u=l.ellipsoid,h=e._batchTable,d=e._instanceBoundingSpheres,f=d.length,p=0;p<f;++p){var m=d[p];if(Object(o.a)(m)){var g=e.modelMatrix;Object(o.a)(g)&&(m=gt.transform(m,g,tL));var v=m.center,_=m.radius,b=vh.fromCartesian(v,ZR);if(h.setBatchedAttribute(p,i,b.high),h.setBatchedAttribute(p,r,b.low),!t.scene3DOnly){var y=u.cartesianToCartographic(v,JR),w=l.project(y,eL);b=vh.fromCartesian(w,ZR),h.setBatchedAttribute(p,a,b.high),h.setBatchedAttribute(p,s,b.low)}h.setBatchedAttribute(p,c,_)}}e._batchTableBoundingSpheresUpdated=!0}}(this,e),rL(this,e),function(e,t){for(var n=e._attributeLocations,i=e._geometries,r=t.scene3DOnly,a=t.context,s=[],c=i.length,l=0;l<c;++l){var u=i[l];if(s.push(hR.fromGeometry({context:a,geometry:u,attributeLocations:n,bufferUsage:iR.STATIC_DRAW,interleave:e._interleave})),Object(o.a)(e._createBoundingVolumeFunction))e._createBoundingVolumeFunction(t,u);else if(e._boundingSpheres.push(gt.clone(u.boundingSphere)),e._boundingSphereWC.push(new gt),!r){var h=u.boundingSphereCV.center,d=h.x,f=h.y,p=h.z;h.x=p,h.y=d,h.z=f,e._boundingSphereCV.push(gt.clone(u.boundingSphereCV)),e._boundingSphere2D.push(new gt),e._boundingSphereMorph.push(new gt)}}e._va=s,e._primitiveType=i[0].primitiveType,e.releaseGeometryInstances&&(e.geometryInstances=void 0),e._geometries=void 0,_L(e,t,DR.COMPLETE,void 0)}(this,e)),this.show&&this._state===DR.COMPLETE){this._batchTableOffsetsUpdated||rL(this,e),this._recomputeBoundingSpheres&&function(e,t){var n=e._batchTableAttributeIndices.offset;if(e._recomputeBoundingSpheres&&Object(o.a)(n)){var i,r=e._offsetInstanceExtend,a=e._instanceBoundingSpheres,s=a.length,c=e._tempBoundingSpheres;if(!Object(o.a)(c)){for(c=new Array(s),i=0;i<s;i++)c[i]=new gt;e._tempBoundingSpheres=c}for(i=0;i<s;++i){var l=c[i],u=e._batchTable.getBatchedAttribute(i,n,new O);pL(l=a[i].clone(l),u,r[i])}var h=[],d=[],f=[];for(i=0;i<s;++i){var p=c[i];p.center.x-p.radius>0||gt.intersectPlane(p,Fi.ORIGIN_ZX_PLANE)!==Y.INTERSECTING?h.push(p):(d.push(p),f.push(p))}var m=h[0],g=f[0],v=d[0];for(i=1;i<h.length;i++)m=gt.union(m,h[i]);for(i=1;i<f.length;i++)g=gt.union(g,f[i]);for(i=1;i<d.length;i++)v=gt.union(v,d[i]);var _=[];for(Object(o.a)(m)&&_.push(m),Object(o.a)(g)&&_.push(g),Object(o.a)(v)&&_.push(v),i=0;i<_.length;i++){var b=_[i].clone(e._boundingSpheres[i]);e._boundingSpheres[i]=b,e._boundingSphereCV[i]=gt.projectTo2D(b,t.mapProjection,e._boundingSphereCV[i])}LR._updateBoundingVolumes(e,t,e.modelMatrix,!0),e._recomputeBoundingSpheres=!1}else e._recomputeBoundingSpheres=!1}(this,e);var n=this.appearance,i=n.material,s=!1,c=!1;this._appearance!==n?(this._appearance=n,this._material=i,s=!0,c=!0):this._material!==i&&(this._material=i,c=!0);var l=this.depthFailAppearance,u=Object(o.a)(l)?l.material:void 0;this._depthFailAppearance!==l?(this._depthFailAppearance=l,this._depthFailMaterial=u,s=!0,c=!0):this._depthFailMaterial!==u&&(this._depthFailMaterial=u,c=!0);var h=this._appearance.isTranslucent();this._translucent!==h&&(this._translucent=h,s=!0),Object(o.a)(this._material)&&this._material.update(t);var d=n.closed&&h;if(s)Object(r.a)(this._createRenderStatesFunction,oL)(this,t,n,d);if(c)Object(r.a)(this._createShaderProgramFunction,aL)(this,e,n);if(s||c)Object(r.a)(this._createCommandsFunction,uL)(this,n,i,h,d,this._colorCommands,this._pickCommands,e);Object(r.a)(this._updateAndQueueCommandsFunction,hL)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)}}}};var dL=new gt,fL=new gt;function pL(e,t,n){if(n===Hl.TOP){var i=gt.clone(e,dL),r=gt.clone(e,fL);r.center=O.add(r.center,t,r.center),e=gt.union(i,r,e)}else n===Hl.ALL&&(e.center=O.add(e.center,t,e.center));return e}function mL(e,t,n){return function(){var i=e.getBatchedAttribute(t,n),r=e.attributes[n],a=r.componentsPerAttribute,s=Ds.createTypedArray(r.componentDatatype,a);return Object(o.a)(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function gL(e,t,n,i,r){return function(s){if(!Object(o.a)(s)||!Object(o.a)(s.length)||s.length<1||s.length>4)throw new a.a("value must be and array with length between 1 and 4.");var c=zR(s);e.setBatchedAttribute(t,n,c),"offset"===r&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var vL=new O;function _L(e,t,n,i){e._error=i,e._state=n,t.afterRender.push((function(){e._ready=e._state===DR.COMPLETE||e._state===DR.FAILED,Object(o.a)(i)?e._readyPromise.reject(i):e._readyPromise.resolve(e)}))}LR.prototype.getGeometryInstanceAttributes=function(e){if(!Object(o.a)(e))throw new a.a("id is required");if(!Object(o.a)(this._batchTable))throw new a.a("must call update before calling getGeometryInstanceAttributes");for(var t=-1,n=this._lastPerInstanceAttributeIndex,i=this._instanceIds,r=i.length,s=0;s<r;++s){var c=(n+s)%r;if(e===i[c]){t=c;break}}if(-1!==t){var l=this._perInstanceAttributeCache[t];if(Object(o.a)(l))return l;var u=this._batchTable,h=this._batchTableAttributeIndices;l={};var d={};for(var f in h)if(h.hasOwnProperty(f)){var p=h[f];d[f]={get:mL(u,t,p),set:gL(u,t,p,this,f)}}return function(e,t,n){t.boundingSphere={get:function(){var i=e._instanceBoundingSpheres[n];if(Object(o.a)(i)){i=i.clone();var r=e.modelMatrix,a=t.offset;Object(o.a)(a)&&pL(i,O.fromArray(a.get(),0,vL),e._offsetInstanceExtend[n]),Object(o.a)(r)&&(i=gt.transform(i,r))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}(this,d,t),function(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}(this,d,t),Object.defineProperties(l,d),this._lastPerInstanceAttributeIndex=t,this._perInstanceAttributeCache[t]=l,l}},LR.prototype.isDestroyed=function(){return!1},LR.prototype.destroy=function(){var e,t;this._sp=this._sp&&this._sp.destroy(),this._spDepthFail=this._spDepthFail&&this._spDepthFail.destroy();var n=this._va;for(e=n.length,t=0;t<e;++t)n[t].destroy();this._va=void 0;var i=this._pickIds;for(e=i.length,t=0;t<e;++t)i[t].destroy();return this._pickIds=void 0,this._batchTable=this._batchTable&&this._batchTable.destroy(),this._instanceIds=void 0,this._perInstanceAttributeCache=void 0,this._attributeLocations=void 0,Ks(this)};var bL=LR,yL="#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n\n#ifdef TEXTURE_COORDINATES\n#ifdef SPHERICAL\nvarying vec4 v_sphericalExtents;\n#else // SPHERICAL\nvarying vec2 v_inversePlaneExtents;\nvarying vec4 v_westPlane;\nvarying vec4 v_southPlane;\n#endif // SPHERICAL\nvarying vec3 v_uvMinAndSphericalLongitudeRotation;\nvarying vec3 v_uMaxAndInverseDistance;\nvarying vec3 v_vMaxAndInverseDistance;\n#endif // TEXTURE_COORDINATES\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#endif\n\n#ifdef NORMAL_EC\nvec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) {\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth);\n return eyeCoordinate.xyz / eyeCoordinate.w;\n}\n\nvec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) {\n vec2 glFragCoordXY = gl_FragCoord.xy;\n // Sample depths at both offset and negative offset\n float upOrRightLogDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw));\n float downOrLeftLogDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw));\n // Explicitly evaluate both paths\n // Necessary for multifrustum and for edges of the screen\n bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw);\n float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y);\n float useDownOrLeft = float(useUpOrRight == 0.0);\n vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth);\n vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth);\n return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft;\n}\n#endif // NORMAL_EC\n\nvoid main(void)\n{\n#ifdef REQUIRES_EC\n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw));\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\n#endif\n\n#ifdef REQUIRES_WC\n vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate;\n vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w;\n#endif\n\n#ifdef TEXTURE_COORDINATES\n vec2 uv;\n#ifdef SPHERICAL\n // Treat world coords as a sphere normal for spherical coordinates\n vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate);\n sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z;\n sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);\n uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w;\n uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z;\n#else // SPHERICAL\n // Unpack planes and transform to eye space\n uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x;\n uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y;\n#endif // SPHERICAL\n#endif // TEXTURE_COORDINATES\n\n#ifdef PICK\n#ifdef CULL_FRAGMENTS\n if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0) {\n gl_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource\n czm_writeDepthClamp();\n }\n#else // CULL_FRAGMENTS\n gl_FragColor.a = 1.0;\n#endif // CULL_FRAGMENTS\n#else // PICK\n\n#ifdef CULL_FRAGMENTS\n if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y) {\n discard;\n }\n#endif\n\n#ifdef NORMAL_EC\n // Compute normal by sampling adjacent pixels in 2x2 block in screen space\n vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));\n vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0));\n vec3 normalEC = normalize(cross(leftRight, downUp));\n#endif\n\n\n#ifdef PER_INSTANCE_COLOR\n\n vec4 color = czm_gammaCorrect(v_color);\n#ifdef FLAT\n gl_FragColor = color;\n#else // FLAT\n czm_materialInput materialInput;\n materialInput.normalEC = normalEC;\n materialInput.positionToEyeEC = -eyeCoordinate.xyz;\n czm_material material = czm_getDefaultMaterial(materialInput);\n material.diffuse = color.rgb;\n material.alpha = color.a;\n\n gl_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\n#endif // FLAT\n\n // Premultiply alpha. Required for classification primitives on translucent globe.\n gl_FragColor.rgb *= gl_FragColor.a;\n\n#else // PER_INSTANCE_COLOR\n\n // Material support.\n // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or\n // dependencies for culling but might not actually be used by the material.\n\n czm_materialInput materialInput;\n\n#ifdef USES_NORMAL_EC\n materialInput.normalEC = normalEC;\n#endif\n\n#ifdef USES_POSITION_TO_EYE_EC\n materialInput.positionToEyeEC = -eyeCoordinate.xyz;\n#endif\n\n#ifdef USES_TANGENT_TO_EYE\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC);\n#endif\n\n#ifdef USES_ST\n // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired\n // texture coordinate system, which typically forms a tight oriented bounding box around the geometry.\n // Shader is provided a set of reference points for remapping.\n materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z;\n materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z;\n#endif\n\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else // FLAT\n gl_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\n#endif // FLAT\n\n // Premultiply alpha. Required for classification primitives on translucent globe.\n gl_FragColor.rgb *= gl_FragColor.a;\n\n#endif // PER_INSTANCE_COLOR\n czm_writeDepthClamp();\n#endif // PICK\n}\n";function wL(e,t,n){i.a.typeOf.bool("extentsCulling",e),i.a.typeOf.bool("planarExtents",t),i.a.typeOf.object("appearance",n),this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};var r=new xL;r.requiresTextureCoordinates=e,r.requiresEC=!n.flat;var o=new xL;if(o.requiresTextureCoordinates=e,n instanceof bI)r.requiresNormalEC=!n.flat;else{var a=n.material.shaderSource+"\n"+n.fragmentShaderSource;r.normalEC=-1!==a.indexOf("materialInput.normalEC")||-1!==a.indexOf("czm_getDefaultMaterial"),r.positionToEyeEC=-1!==a.indexOf("materialInput.positionToEyeEC"),r.tangentToEyeMatrix=-1!==a.indexOf("materialInput.tangentToEyeMatrix"),r.st=-1!==a.indexOf("materialInput.st")}this._colorShaderDependencies=r,this._pickShaderDependencies=o,this._appearance=n,this._extentsCulling=e,this._planarExtents=t}wL.prototype.createFragmentShader=function(e){i.a.typeOf.bool("columbusView2D",e);var t=this._appearance,n=this._colorShaderDependencies,r=[];e||this._planarExtents||r.push("SPHERICAL"),n.requiresEC&&r.push("REQUIRES_EC"),n.requiresWC&&r.push("REQUIRES_WC"),n.requiresTextureCoordinates&&r.push("TEXTURE_COORDINATES"),this._extentsCulling&&r.push("CULL_FRAGMENTS"),n.requiresNormalEC&&r.push("NORMAL_EC"),t instanceof bI&&r.push("PER_INSTANCE_COLOR"),n.normalEC&&r.push("USES_NORMAL_EC"),n.positionToEyeEC&&r.push("USES_POSITION_TO_EYE_EC"),n.tangentToEyeMatrix&&r.push("USES_TANGENT_TO_EYE"),n.st&&r.push("USES_ST"),t.flat&&r.push("FLAT");var o="";return t instanceof bI||(o=t.material.shaderSource),new KM({defines:r,sources:[o,yL]})},wL.prototype.createPickFragmentShader=function(e){i.a.typeOf.bool("columbusView2D",e);var t=this._pickShaderDependencies,n=["PICK"];return e||this._planarExtents||n.push("SPHERICAL"),t.requiresEC&&n.push("REQUIRES_EC"),t.requiresWC&&n.push("REQUIRES_WC"),t.requiresTextureCoordinates&&n.push("TEXTURE_COORDINATES"),this._extentsCulling&&n.push("CULL_FRAGMENTS"),new KM({defines:n,sources:[yL],pickColorQualifier:"varying"})},wL.prototype.createVertexShader=function(e,t,n,r){return i.a.defined("defines",e),i.a.typeOf.string("vertexShaderSource",t),i.a.typeOf.bool("columbusView2D",n),i.a.defined("mapProjection",r),AL(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,r,this._projectionExtentDefines)},wL.prototype.createPickVertexShader=function(e,t,n,r){return i.a.defined("defines",e),i.a.typeOf.string("vertexShaderSource",t),i.a.typeOf.bool("columbusView2D",n),i.a.defined("mapProjection",r),AL(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,r,this._projectionExtentDefines)};var OL=new O,CL=new R,EL={high:0,low:0};function AL(e,t,n,i,r,a,s,c){var l=i.slice();if(""===c.eastMostYhighDefine){var u=CL;u.longitude=d.PI,u.latitude=0,u.height=0;var h=s.project(u,OL),f=vh.encode(h.x,EL);c.eastMostYhighDefine="EAST_MOST_X_HIGH "+f.high.toFixed((f.high+"").length+1),c.eastMostYlowDefine="EAST_MOST_X_LOW "+f.low.toFixed((f.low+"").length+1);var p=CL;p.longitude=-d.PI,p.latitude=0,p.height=0;var m=s.project(p,OL);f=vh.encode(m.x,EL),c.westMostYhighDefine="WEST_MOST_X_HIGH "+f.high.toFixed((f.high+"").length+1),c.westMostYlowDefine="WEST_MOST_X_LOW "+f.low.toFixed((f.low+"").length+1)}return n&&(l.push(c.eastMostYhighDefine),l.push(c.eastMostYlowDefine),l.push(c.westMostYhighDefine),l.push(c.westMostYlowDefine)),Object(o.a)(a)&&a instanceof bI&&l.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(l.push("TEXTURE_COORDINATES"),t||n||l.push("SPHERICAL"),n&&l.push("COLUMBUS_VIEW_2D")),new KM({defines:l,sources:[r]})}function xL(){this._requiresEC=!1,this._requiresWC=!1,this._requiresNormalEC=!1,this._requiresTextureCoordinates=!1,this._usesNormalEC=!1,this._usesPositionToEyeEC=!1,this._usesTangentToEyeMat=!1,this._usesSt=!1}function TL(e,t,n){return Math.abs((t.y-e.y)*n.x-(t.x-e.x)*n.y+t.x*e.y-t.y*e.x)/Mt.distance(t,e)}Object.defineProperties(xL.prototype,{requiresEC:{get:function(){return this._requiresEC},set:function(e){this._requiresEC=e||this._requiresEC}},requiresWC:{get:function(){return this._requiresWC},set:function(e){this._requiresWC=e||this._requiresWC,this.requiresEC=this._requiresWC}},requiresNormalEC:{get:function(){return this._requiresNormalEC},set:function(e){this._requiresNormalEC=e||this._requiresNormalEC,this.requiresEC=this._requiresNormalEC}},requiresTextureCoordinates:{get:function(){return this._requiresTextureCoordinates},set:function(e){this._requiresTextureCoordinates=e||this._requiresTextureCoordinates,this.requiresWC=this._requiresTextureCoordinates}},normalEC:{set:function(e){this.requiresNormalEC=e,this._usesNormalEC=e},get:function(){return this._usesNormalEC}},tangentToEyeMatrix:{set:function(e){this.requiresWC=e,this.requiresNormalEC=e,this._usesTangentToEyeMat=e},get:function(){return this._usesTangentToEyeMat}},positionToEyeEC:{set:function(e){this.requiresEC=e,this._usesPositionToEyeEC=e},get:function(){return this._usesPositionToEyeEC}},st:{set:function(e){this.requiresTextureCoordinates=e,this._usesSt=e},get:function(){return this._usesSt}}});var SL=[new Mt,new Mt,new Mt,new Mt];function DL(e,t){var n=SL,i=Mt.unpack(t,0,n[0]),r=Mt.unpack(t,2,n[1]),o=Mt.unpack(t,4,n[2]);e.uMaxVmax=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r.x,r.y,o.x,o.y]});var a=1/TL(i,r,o),s=1/TL(i,o,r);e.uvMinAndExtents=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,a,s]})}var PL=new R,IL=new O,ML=new O,RL=new O,LL={high:0,low:0};function jL(e,t,n){var i=PL;i.height=0,i.longitude=e.west,i.latitude=e.south;var r=t.project(i,IL);i.latitude=e.north;var o=t.project(i,ML);i.longitude=e.east,i.latitude=e.south;var a=t.project(i,RL),s=[0,0,0,0],c=[0,0,0,0],l=vh.encode(r.x,LL);s[0]=l.high,c[0]=l.low,l=vh.encode(r.y,LL),s[1]=l.high,c[1]=l.low,l=vh.encode(o.y,LL),s[2]=l.high,c[2]=l.low,l=vh.encode(a.x,LL),s[3]=l.high,c[3]=l.low,n.planes2D_HIGH=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,value:s}),n.planes2D_LOW=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var FL=new Ae,NL=new Ae,zL=new O,kL=new R,BL=[new R,new R,new R,new R,new R,new R,new R,new R];var HL=new O,VL=new O,UL=new vh;wL.getPlanarTextureCoordinateAttributes=function(e,t,n,o,a){i.a.typeOf.object("boundingRectangle",e),i.a.defined("textureCoordinateRotationPoints",t),i.a.typeOf.object("ellipsoid",n),i.a.typeOf.object("projection",o);var s=IL,c=HL,l=VL;!function(e,t,n,i,r,o){var a=Se.center(e,kL);a.height=n;var s=R.toCartesian(a,t,zL),c=ya.eastNorthUpToFixedFrame(s,t,FL),l=Ae.inverse(c,NL),u=e.west,h=e.east,d=e.north,f=e.south,p=BL;p[0].latitude=f,p[0].longitude=u,p[1].latitude=d,p[1].longitude=u,p[2].latitude=d,p[2].longitude=h,p[3].latitude=f,p[3].longitude=h;var m=.5*(u+h),g=.5*(d+f);p[4].latitude=f,p[4].longitude=m,p[5].latitude=d,p[5].longitude=m,p[6].latitude=g,p[6].longitude=u,p[7].latitude=g,p[7].longitude=h;for(var v=Number.POSITIVE_INFINITY,_=Number.NEGATIVE_INFINITY,b=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,w=0;w<8;w++){p[w].height=n;var C=R.toCartesian(p[w],t,zL);Ae.multiplyByPoint(l,C,C),C.z=0,v=Math.min(v,C.x),_=Math.max(_,C.x),b=Math.min(b,C.y),y=Math.max(y,C.y)}var E=i;E.x=v,E.y=b,E.z=0,Ae.multiplyByPoint(c,E,E);var A=r;A.x=_,A.y=b,A.z=0,Ae.multiplyByPoint(c,A,A),O.subtract(A,E,r);var x=o;x.x=v,x.y=y,x.z=0,Ae.multiplyByPoint(c,x,x),O.subtract(x,E,o)}(e,n,Object(r.a)(a,0),s,c,l);var u={};DL(u,t);var h=vh.fromCartesian(s,UL);return u.southWest_HIGH=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,normalize:!1,value:O.pack(h.high,[0,0,0])}),u.southWest_LOW=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,normalize:!1,value:O.pack(h.low,[0,0,0])}),u.eastward=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,normalize:!1,value:O.pack(c,[0,0,0])}),u.northward=new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,normalize:!1,value:O.pack(l,[0,0,0])}),jL(e,o,u),u};var WL=new O;function GL(e,t,n,i){var r=PL;r.latitude=e,r.longitude=t,r.height=0;var o=R.toCartesian(r,n,WL),a=Math.sqrt(o.x*o.x+o.y*o.y),s=d.fastApproximateAtan2(a,o.z),c=d.fastApproximateAtan2(o.x,o.y);return i.x=s,i.y=c,i}var qL=new Mt;wL.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,r){i.a.typeOf.object("boundingRectangle",e),i.a.defined("textureCoordinateRotationPoints",t),i.a.typeOf.object("ellipsoid",n),i.a.typeOf.object("projection",r);var o=GL(e.south,e.west,n,qL),a=o.x,s=o.y,c=GL(e.north,e.east,n,qL),l=c.x,u=c.y,h=0;s>u&&(h=d.PI-s,s=-d.PI,u+=h),a-=d.EPSILON5,s-=d.EPSILON5,l+=d.EPSILON5;var f=1/((u+=d.EPSILON5)-s),p=1/(l-a),m={sphericalExtents:new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:4,normalize:!1,value:[a,s,p,f]}),longitudeRotation:new Dy({componentDatatype:Ds.FLOAT,componentsPerAttribute:1,normalize:!1,value:[h]})};return DL(m,t),jL(e,r,m),m},wL.hasAttributesForTextureCoordinatePlanes=function(e){return Object(o.a)(e.southWest_HIGH)&&Object(o.a)(e.southWest_LOW)&&Object(o.a)(e.northward)&&Object(o.a)(e.eastward)&&Object(o.a)(e.planes2D_HIGH)&&Object(o.a)(e.planes2D_LOW)&&Object(o.a)(e.uMaxVmax)&&Object(o.a)(e.uvMinAndExtents)},wL.hasAttributesForSphericalExtents=function(e){return Object(o.a)(e.sphericalExtents)&&Object(o.a)(e.longitudeRotation)&&Object(o.a)(e.planes2D_HIGH)&&Object(o.a)(e.planes2D_LOW)&&Object(o.a)(e.uMaxVmax)&&Object(o.a)(e.uvMinAndExtents)},wL.shouldUseSphericalCoordinates=function(e){return i.a.typeOf.object("rectangle",e),function(e){return Math.max(e.width,e.height)>wL.MAX_WIDTH_FOR_PLANAR_EXTENTS}(e)},wL.MAX_WIDTH_FOR_PLANAR_EXTENTS=d.toRadians(1);var YL=wL,$L={NEVER:Ts.NEVER,LESS:Ts.LESS,EQUAL:Ts.EQUAL,LESS_OR_EQUAL:Ts.LEQUAL,GREATER:Ts.GREATER,NOT_EQUAL:Ts.NOTEQUAL,GREATER_OR_EQUAL:Ts.GEQUAL,ALWAYS:Ts.ALWAYS},XL=Object.freeze($L),KL={ZERO:Ts.ZERO,KEEP:Ts.KEEP,REPLACE:Ts.REPLACE,INCREMENT:Ts.INCR,DECREMENT:Ts.DECR,INVERT:Ts.INVERT,INCREMENT_WRAP:Ts.INCR_WRAP,DECREMENT_WRAP:Ts.DECR_WRAP},QL=Object.freeze(KL),ZL={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15,setCesium3DTileBit:function(){return{enabled:!0,frontFunction:XL.ALWAYS,frontOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.REPLACE},backFunction:XL.ALWAYS,backOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.REPLACE},reference:ZL.CESIUM_3D_TILE_MASK,mask:ZL.CESIUM_3D_TILE_MASK}}},JL=Object.freeze(ZL);function ej(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).geometryInstances;this.geometryInstances=t,this.show=Object(r.a)(e.show,!0),this.classificationType=Object(r.a)(e.classificationType,JM.BOTH),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.debugShowShadowVolume=Object(r.a)(e.debugShowShadowVolume,!1),this._debugShowShadowVolume=!1,this._extruded=Object(r.a)(e._extruded,!1),this._uniformMap=e._uniformMap,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._spColor=void 0,this._spPick2D=void 0,this._spColor2D=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._commandsIgnoreShow=[],this._ready=!1,this._readyPromise=Yt.a.defer(),this._primitive=void 0,this._pickPrimitive=e._pickPrimitive,this._hasSphericalExtentsAttribute=!1,this._hasPlanarExtentsAttributes=!1,this._hasPerColorAttribute=!1,this.appearance=e.appearance,this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._usePickOffsets=!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:Object(r.a)(e.vertexCacheOptimize,!1),interleave:Object(r.a)(e.interleave,!1),releaseGeometryInstances:Object(r.a)(e.releaseGeometryInstances,!0),allowPicking:Object(r.a)(e.allowPicking,!0),asynchronous:Object(r.a)(e.asynchronous,!0),compressVertices:Object(r.a)(e.compressVertices,!0),_createBoundingVolumeFunction:void 0,_createRenderStatesFunction:void 0,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0,_createPickOffsets:!0}}function tj(e,t){var n=t?XL.EQUAL:XL.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:QL.KEEP,zFail:QL.DECREMENT_WRAP,zPass:QL.KEEP},backFunction:n,backOperation:{fail:QL.KEEP,zFail:QL.INCREMENT_WRAP,zPass:QL.KEEP},reference:JL.CESIUM_3D_TILE_MASK,mask:JL.CESIUM_3D_TILE_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:tR.LESS_OR_EQUAL},depthMask:!1}}function nj(e){return{stencilTest:{enabled:e,frontFunction:XL.NOT_EQUAL,frontOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},backFunction:XL.NOT_EQUAL,backOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},reference:0,mask:JL.CLASSIFICATION_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:LP.PRE_MULTIPLIED_ALPHA_BLEND}}Object.defineProperties(ej.prototype,{vertexCacheOptimize:{get:function(){return this._primitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},compressVertices:{get:function(){return this._primitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},_needs2DShader:{get:function(){return this._hasPlanarExtentsAttributes||this._hasSphericalExtentsAttribute}}}),ej.isSupported=function(e){return e.context.stencilBuffer};var ij={stencilTest:{enabled:!0,frontFunction:XL.NOT_EQUAL,frontOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},backFunction:XL.NOT_EQUAL,backOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},reference:0,mask:JL.CLASSIFICATION_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function rj(e,t){var n=t.context,i=e._primitive,r='attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute float batchId;\n\n#ifdef EXTRUDED_GEOMETRY\nattribute vec3 extrudeDirection;\n\nuniform float u_globeMinimumAltitude;\n#endif // EXTRUDED_GEOMETRY\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#endif // PER_INSTANCE_COLOR\n\n#ifdef TEXTURE_COORDINATES\n#ifdef SPHERICAL\nvarying vec4 v_sphericalExtents;\n#else // SPHERICAL\nvarying vec2 v_inversePlaneExtents;\nvarying vec4 v_westPlane;\nvarying vec4 v_southPlane;\n#endif // SPHERICAL\nvarying vec3 v_uvMinAndSphericalLongitudeRotation;\nvarying vec3 v_uMaxAndInverseDistance;\nvarying vec3 v_vMaxAndInverseDistance;\n#endif // TEXTURE_COORDINATES\n\nvoid main()\n{\n vec4 position = czm_computePosition();\n\n#ifdef EXTRUDED_GEOMETRY\n float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));\n delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;\n\n //extrudeDirection is zero for the top layer\n position = position + vec4(extrudeDirection * delta, 0.0);\n#endif\n\n#ifdef TEXTURE_COORDINATES\n#ifdef SPHERICAL\n v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);\n v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);\n#else // SPHERICAL\n#ifdef COLUMBUS_VIEW_2D\n vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);\n vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);\n\n // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w):\n // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts)\n // - existing "east" is on the wrong side of the world, far away (planes2D_high/low.w)\n // - so set "east" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow)\n vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));\n bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;\n planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);\n planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);\n\n // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0)\n // - existing "west" is on the wrong side of the world, far away (planes2D_high/low.x)\n // - so set "west" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow)\n idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;\n idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));\n planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);\n planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);\n\n vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;\n vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;\n vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;\n#else // COLUMBUS_VIEW_2D\n // 3D case has smaller "plane extents," so planes encoded as a 64 bit position and 2 vec3s for distances/direction\n vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;\n vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;\n vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;\n#endif // COLUMBUS_VIEW_2D\n\n vec3 eastWard = southEastCorner - southWestCorner;\n float eastExtent = length(eastWard);\n eastWard /= eastExtent;\n\n vec3 northWard = northWestCorner - southWestCorner;\n float northExtent = length(northWard);\n northWard /= northExtent;\n\n v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));\n v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));\n v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);\n#endif // SPHERICAL\n vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);\n vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);\n\n v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);\n v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);\n v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;\n#endif // TEXTURE_COORDINATES\n\n#ifdef PER_INSTANCE_COLOR\n v_color = czm_batchTable_color(batchId);\n#endif\n\n gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position);\n}\n';r=e._primitive._batchTable.getVertexShaderCallback()(r),r=bL._appendDistanceDisplayConditionToShader(i,r),r=bL._modifyShaderPosition(e,r,t.scene3DOnly),r=bL._updateColorAttribute(i,r);var a=e._hasPlanarExtentsAttributes,s=a||e._hasSphericalExtentsAttribute;e._extruded&&(r=function(e,t){if(!e.compressVertices)return t;if(-1!==t.search(/attribute\s+vec3\s+extrudeDirection;/g)){var n="attribute vec2 compressedAttributes;",i=t;return i=i.replace(/attribute\s+vec3\s+extrudeDirection;/g,""),[n,"vec3 extrudeDirection;\n",i=KM.replaceMain(i,"czm_non_compressed_main"),"void main() \n{ \n extrudeDirection = czm_octDecode(compressedAttributes, 65535.0);\n czm_non_compressed_main(); \n}"].join("\n")}}(i,r));var c=e._extruded?"EXTRUDED_GEOMETRY":"",l=new KM({defines:[c],sources:[r]}),u=new KM({sources:[QM]}),h=e._primitive._attributeLocations,d=new YL(s,a,e.appearance);if(e._spStencil=LM.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:h}),e._primitive.allowPicking){var f=KM.createPickVertexShaderSource(r);f=bL._appendShowToShader(i,f),f=bL._updatePickColorAttribute(f);var p=d.createPickFragmentShader(!1),m=d.createPickVertexShader([c],f,!1,t.mapProjection);if(e._spPick=LM.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:h}),s){var g=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!Object(o.a)(g)){var v=d.createPickFragmentShader(!0),_=d.createPickVertexShader([c],f,!0,t.mapProjection);g=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:_,fragmentShaderSource:v,attributeLocations:h})}e._spPick2D=g}}else e._spPick=LM.fromCache({context:n,vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:h});r=bL._appendShowToShader(i,r),l=new KM({defines:[c],sources:[r]}),e._sp=LM.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:h});var b=d.createFragmentShader(!1),y=d.createVertexShader([c],r,!1,t.mapProjection);if(e._spColor=LM.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:y,fragmentShaderSource:b,attributeLocations:h}),s){var w=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!Object(o.a)(w)){var O=d.createFragmentShader(!0),C=d.createVertexShader([c],r,!0,t.mapProjection);w=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:C,fragmentShaderSource:O,attributeLocations:h})}e._spColor2D=w}}function oj(e,t,n,i,r,a,s){!function(e,t){var n,i,r,a=e._primitive,s=2*a._va.length;t.length=s;var c=0,l=a._batchTable.getUniformMapCallback()(e._uniformMap),u=e._needs2DShader;for(n=0;n<s;n+=2){var h=a._va[c++];i=t[n],Object(o.a)(i)||(i=t[n]=new CI({owner:e,primitiveType:a._primitiveType})),i.vertexArray=h,i.renderState=e._rsStencilDepthPass,i.shaderProgram=e._sp,i.uniformMap=l,i.pass=EI.TERRAIN_CLASSIFICATION,(r=CI.shallowClone(i,i.derivedCommands.tileset)).renderState=e._rsStencilDepthPass3DTiles,r.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,i.derivedCommands.tileset=r,i=t[n+1],Object(o.a)(i)||(i=t[n+1]=new CI({owner:e,primitiveType:a._primitiveType})),i.vertexArray=h,i.renderState=e._rsColorPass,i.shaderProgram=e._spColor,i.pass=EI.TERRAIN_CLASSIFICATION;var d=e.appearance.material;if(Object(o.a)(d)&&(l=Object(Wf.a)(l,d._uniforms)),i.uniformMap=l,(r=CI.shallowClone(i,i.derivedCommands.tileset)).pass=EI.CESIUM_3D_TILE_CLASSIFICATION,i.derivedCommands.tileset=r,u){var f=CI.shallowClone(i,i.derivedCommands.appearance2D);f.shaderProgram=e._spColor2D,i.derivedCommands.appearance2D=f,(f=CI.shallowClone(r,r.derivedCommands.appearance2D)).shaderProgram=e._spColor2D,r.derivedCommands.appearance2D=f}}var p=e._commandsIgnoreShow,m=e._spStencil,g=0;s=p.length=s/2;for(var v=0;v<s;++v){var _=p[v]=CI.shallowClone(t[g],p[v]);_.shaderProgram=m,_.pass=EI.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,g+=2}}(e,a),function(e,t){var n,i,r,a,s,c=e._usePickOffsets,l=e._primitive,u=2*l._va.length,h=0;c&&(u=2*(n=l._pickOffsets).length),t.length=u;var d=0,f=l._batchTable.getUniformMapCallback()(e._uniformMap),p=e._needs2DShader;for(r=0;r<u;r+=2){var m=l._va[d++];if(c&&(i=n[h++],m=l._va[i.index]),a=t[r],Object(o.a)(a)||(a=t[r]=new CI({owner:e,primitiveType:l._primitiveType,pickOnly:!0})),a.vertexArray=m,a.renderState=e._rsStencilDepthPass,a.shaderProgram=e._sp,a.uniformMap=f,a.pass=EI.TERRAIN_CLASSIFICATION,c&&(a.offset=i.offset,a.count=i.count),(s=CI.shallowClone(a,a.derivedCommands.tileset)).renderState=e._rsStencilDepthPass3DTiles,s.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,a.derivedCommands.tileset=s,a=t[r+1],Object(o.a)(a)||(a=t[r+1]=new CI({owner:e,primitiveType:l._primitiveType,pickOnly:!0})),a.vertexArray=m,a.renderState=e._rsPickPass,a.shaderProgram=e._spPick,a.uniformMap=f,a.pass=EI.TERRAIN_CLASSIFICATION,c&&(a.offset=i.offset,a.count=i.count),(s=CI.shallowClone(a,a.derivedCommands.tileset)).pass=EI.CESIUM_3D_TILE_CLASSIFICATION,a.derivedCommands.tileset=s,p){var g=CI.shallowClone(a,a.derivedCommands.pick2D);g.shaderProgram=e._spPick2D,a.derivedCommands.pick2D=g,(g=CI.shallowClone(s,s.derivedCommands.pick2D)).shaderProgram=e._spPick2D,s.derivedCommands.pick2D=g}}}(e,s)}function aj(e,t){return Math.floor(e%t/2)}function sj(e,t,n,i,r,o){e.modelMatrix=n,e.boundingVolume=r,e.cull=i,e.debugShowBoundingVolume=o,t.commandList.push(e)}function cj(e,t,n,i,r){e.modelMatrix=n,e.boundingVolume=r,e.cull=i,t.commandList.push(e)}ej.prototype.update=function(e){if(Object(o.a)(this._primitive)||Object(o.a)(this.geometryInstances)){var t=this.appearance;Object(o.a)(t)&&Object(o.a)(t.material)&&t.material.update(e.context);var n=this,i=this._primitiveOptions;if(!Object(o.a)(this._primitive)){var s,c,l,u,h=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],d=h.length,f=!1,p=!0,m=!1,g=!1;for(d>0&&(l=h[0].attributes,m=YL.hasAttributesForSphericalExtents(l),g=YL.hasAttributesForTextureCoordinatePlanes(l),u=l.color),s=0;s<d;s++){var v=(c=h[s]).attributes.color;if(Object(o.a)(v))f=!0;else if(f)throw new a.a("All GeometryInstances must have color attributes to use per-instance color.");p=p&&Object(o.a)(v)&&Uf.equals(u,v)}if(!p&&!m&&!g)throw new a.a("All GeometryInstances must have the same color attribute except via GroundPrimitives");if(f&&!Object(o.a)(t)&&(t=new bI({flat:!0}),this.appearance=t),!f&&t instanceof bI)throw new a.a("PerInstanceColorAppearance requires color GeometryInstanceAttributes on all GeometryInstances");if(Object(o.a)(t.material)&&!m&&!g)throw new a.a("Materials on ClassificationPrimitives are not supported except via GroundPrimitives");this._usePickOffsets=!m&&!g,this._hasSphericalExtentsAttribute=m,this._hasPlanarExtentsAttributes=g,this._hasPerColorAttribute=f;var _=new Array(d);for(s=0;s<d;++s)c=h[s],_[s]=new fh({geometry:c.geometry,attributes:c.attributes,modelMatrix:c.modelMatrix,id:c.id,pickPrimitive:Object(r.a)(this._pickPrimitive,n)});i.appearance=t,i.geometryInstances=_,Object(o.a)(this._createBoundingVolumeFunction)&&(i._createBoundingVolumeFunction=function(e,t){n._createBoundingVolumeFunction(e,t)}),i._createRenderStatesFunction=function(e,t,i,r){!function(e,t,n,i){if(!Object(o.a)(e._rsStencilDepthPass)){var r=!e.debugShowShadowVolume;e._rsStencilDepthPass=XI.fromCache(tj(r,!1)),e._rsStencilDepthPass3DTiles=XI.fromCache(tj(r,!0)),e._rsColorPass=XI.fromCache(nj(r)),e._rsPickPass=XI.fromCache(ij)}}(n)},i._createShaderProgramFunction=function(e,t,i){rj(n,t)},i._createCommandsFunction=function(e,t,i,r,o,a,s){oj(n,0,0,0,0,a,s)},Object(o.a)(this._updateAndQueueCommandsFunction)?i._updateAndQueueCommandsFunction=function(e,t,i,r,o,a,s,c){n._updateAndQueueCommandsFunction(e,t,i,r,o,a,s,c)}:i._updateAndQueueCommandsFunction=function(e,t,i,r,a,s,c,l){!function(e,t,n,i,r,a,s,c){var l,u=e._primitive;bL._updateBoundingVolumes(u,t,r),t.mode===IR.SCENE3D?l=u._boundingSphereWC:t.mode===IR.COLUMBUS_VIEW?l=u._boundingSphereCV:t.mode===IR.SCENE2D&&Object(o.a)(u._boundingSphere2D)?l=u._boundingSphere2D:Object(o.a)(u._boundingSphereMorph)&&(l=u._boundingSphereMorph);var h,d,f=e.classificationType,p=f!==JM.CESIUM_3D_TILE,m=f!==JM.TERRAIN,g=t.passes;if(g.render){var v=n.length;for(h=0;h<v;++h)d=l[aj(h,v)],p&&sj(n[h],t,r,a,d,s),m&&sj(n[h].derivedCommands.tileset,t,r,a,d,s);if(t.invertClassification){var _=e._commandsIgnoreShow,b=_.length;for(h=0;h<b;++h)d=l[h],sj(_[h],t,r,a,d,s)}}if(g.pick){var y=i.length,w=u._pickOffsets;for(h=0;h<y;++h){d=l[w[aj(h,y)].index],p&&cj(i[h],t,r,a,d),m&&cj(i[h].derivedCommands.tileset,t,r,a,d)}}}(n,t,i,r,a,s,c)},this._primitive=new bL(i),this._primitive.readyPromise.then((function(e){n._ready=!0,n.releaseGeometryInstances&&(n.geometryInstances=void 0);var t=e._error;Object(o.a)(t)?n._readyPromise.reject(t):n._readyPromise.resolve(n)}))}if(this.debugShowShadowVolume&&!this._debugShowShadowVolume&&this._ready?(this._debugShowShadowVolume=!0,this._rsStencilDepthPass=XI.fromCache(tj(!1,!1)),this._rsStencilDepthPass3DTiles=XI.fromCache(tj(!1,!0)),this._rsColorPass=XI.fromCache(nj(!1))):!this.debugShowShadowVolume&&this._debugShowShadowVolume&&(this._debugShowShadowVolume=!1,this._rsStencilDepthPass=XI.fromCache(tj(!0,!1)),this._rsStencilDepthPass3DTiles=XI.fromCache(tj(!0,!0)),this._rsColorPass=XI.fromCache(nj(!0))),this._primitive.appearance!==t){if(!this._hasSphericalExtentsAttribute&&!this._hasPlanarExtentsAttributes&&Object(o.a)(t.material))throw new a.a("Materials on ClassificationPrimitives are not supported except via GroundPrimitive");if(!this._hasPerColorAttribute&&t instanceof bI)throw new a.a("PerInstanceColorAppearance requires color GeometryInstanceAttribute");this._primitive.appearance=t}this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e)}},ej.prototype.getGeometryInstanceAttributes=function(e){if(!Object(o.a)(this._primitive))throw new a.a("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)},ej.prototype.isDestroyed=function(){return!1},ej.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._spColor=this._spColor&&this._spColor.destroy(),this._spPick2D=void 0,this._spColor2D=void 0,Ks(this)};var lj=ej,uj={u_globeMinimumAltitude:function(){return 55e3}};function hj(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).appearance,n=e.geometryInstances;if(!Object(o.a)(t)&&Object(o.a)(n))for(var i=Array.isArray(n)?n:[n],a=i.length,s=0;s<a;s++){var c=i[s].attributes;if(Object(o.a)(c)&&Object(o.a)(c.color)){t=new bI({flat:!0});break}}this.appearance=t,this.geometryInstances=e.geometryInstances,this.show=Object(r.a)(e.show,!0),this.classificationType=Object(r.a)(e.classificationType,JM.BOTH),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.debugShowShadowVolume=Object(r.a)(e.debugShowShadowVolume,!1),this._boundingVolumes=[],this._boundingVolumes2D=[],this._ready=!1,this._readyPromise=Yt.a.defer(),this._primitive=void 0,this._maxHeight=void 0,this._minHeight=void 0,this._maxTerrainHeight=qt._defaultMaxTerrainHeight,this._minTerrainHeight=qt._defaultMinTerrainHeight,this._boundingSpheresKeys=[],this._boundingSpheres=[],this._useFragmentCulling=!1,this._zIndex=void 0;this._classificationPrimitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:Object(r.a)(e.vertexCacheOptimize,!1),interleave:Object(r.a)(e.interleave,!1),releaseGeometryInstances:Object(r.a)(e.releaseGeometryInstances,!0),allowPicking:Object(r.a)(e.allowPicking,!0),asynchronous:Object(r.a)(e.asynchronous,!0),compressVertices:Object(r.a)(e.compressVertices,!0),_createBoundingVolumeFunction:void 0,_updateAndQueueCommandsFunction:void 0,_pickPrimitive:this,_extruded:!0,_uniformMap:uj}}function dj(e){return function(t,n){var i=n.maximumRadius,r=i/Math.cos(.5*t)-i;return e._maxHeight+r}}function fj(e){return function(t,n){return e._minHeight}}Object.defineProperties(hj.prototype,{vertexCacheOptimize:{get:function(){return this._classificationPrimitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._classificationPrimitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._classificationPrimitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._classificationPrimitiveOptions.allowPicking}},asynchronous:{get:function(){return this._classificationPrimitiveOptions.asynchronous}},compressVertices:{get:function(){return this._classificationPrimitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}}}),hj.isSupported=lj.isSupported;var pj=new O,mj=new O,gj=new O,vj=new R,_j=new Se;function bj(e,t){var n=e.mapProjection.ellipsoid;if(!Object(o.a)(t.attributes)||!Object(o.a)(t.attributes.position3DHigh))return Object(o.a)(t.rectangle)?t.rectangle:void 0;for(var i=t.attributes.position3DHigh.values,r=t.attributes.position3DLow.values,a=i.length,s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,u=Number.NEGATIVE_INFINITY,h=0;h<a;h+=3){var d=O.unpack(i,h,pj),f=O.unpack(r,h,mj),p=O.add(d,f,gj),m=n.cartesianToCartographic(p,vj),g=m.latitude,v=m.longitude;s=Math.min(s,g),c=Math.min(c,v),l=Math.max(l,g),u=Math.max(u,v)}var _=_j;return _.north=l,_.south=s,_.east=u,_.west=c,_}function yj(e,t){return Math.floor(e%t/2)}function wj(e,t,n,i,r,o,a){var s=e._primitive;n.mode!==IR.SCENE3D&&t.shaderProgram===s._spColor&&s._needs2DShader&&(t=t.derivedCommands.appearance2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=o,t.cull=r,t.debugShowBoundingVolume=a,n.commandList.push(t)}function Oj(e,t,n,i,r,o){var a=e._primitive;n.mode!==IR.SCENE3D&&t.shaderProgram===a._spPick&&a._needs2DShader&&(t=t.derivedCommands.pick2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=o,t.cull=r,n.commandList.push(t)}hj.initializeTerrainHeights=function(){return qt.initialize()},hj.prototype.update=function(e){if(Object(o.a)(this._primitive)||Object(o.a)(this.geometryInstances))if(qt.initialized){var t=this,n=this._classificationPrimitiveOptions;if(!Object(o.a)(this._primitive)){var i,r,s,c,l,u=e.mapProjection.ellipsoid,h=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],d=h.length,f=new Array(d);for(c=0;c<d;++c){var p=bj(e,r=(i=h[c]).geometry);Object(o.a)(l)?Object(o.a)(p)&&Se.union(l,p,l):l=Se.clone(p);var m=i.id;if(Object(o.a)(m)&&Object(o.a)(p)){var g=qt.getBoundingSphere(p,u);this._boundingSpheresKeys.push(m),this._boundingSpheres.push(g)}if(s=r.constructor,!Object(o.a)(s)||!Object(o.a)(s.createShadowVolume))throw new a.a("Not all of the geometry instances have GroundPrimitive support.")}!function(e,t,n){var i=qt.getMinimumMaximumHeights(t,n);e._minTerrainHeight=i.minimumTerrainHeight,e._maxTerrainHeight=i.maximumTerrainHeight}(this,l,u);var v=e.terrainExaggeration;this._minHeight=this._minTerrainHeight*v,this._maxHeight=this._maxTerrainHeight*v;var _=hj._supportsMaterials(e.context);if(this._useFragmentCulling=_,_){var b,y=!0;for(c=0;c<d;++c)if(l=bj(e,r=(i=h[c]).geometry),YL.shouldUseSphericalCoordinates(l)){y=!1;break}for(c=0;c<d;++c){s=(r=(i=h[c]).geometry).constructor;var w=bj(e,r),C=r.textureCoordinateRotationPoints;b=y?YL.getPlanarTextureCoordinateAttributes(w,C,u,e.mapProjection,this._maxHeight):YL.getSphericalExtentGeometryInstanceAttributes(w,C,u,e.mapProjection);var E=i.attributes;for(var A in E)E.hasOwnProperty(A)&&(b[A]=E[A]);f[c]=new fh({geometry:s.createShadowVolume(r,fj(this),dj(this)),attributes:b,id:i.id})}}else for(c=0;c<d;++c)s=(r=(i=h[c]).geometry).constructor,f[c]=new fh({geometry:s.createShadowVolume(r,fj(this),dj(this)),attributes:i.attributes,id:i.id});n.geometryInstances=f,n.appearance=this.appearance,n._createBoundingVolumeFunction=function(e,n){!function(e,t,n){var i=t.mapProjection.ellipsoid,r=bj(t,n),o=bs.fromRectangle(r,e._minHeight,e._maxHeight,i);if(e._boundingVolumes.push(o),!t.scene3DOnly){var a=t.mapProjection,s=gt.fromRectangleWithHeights2D(r,a,e._maxHeight,e._minHeight);O.fromElements(s.center.z,s.center.x,s.center.y,s.center),e._boundingVolumes2D.push(s)}}(t,e,n)},n._updateAndQueueCommandsFunction=function(e,n,i,r,o,a,s,c){!function(e,t,n,i,r,o,a,s){var c;c=t.mode===IR.SCENE3D?e._boundingVolumes:e._boundingVolumes2D;var l,u,h=e.classificationType,d=h!==JM.CESIUM_3D_TILE,f=h!==JM.TERRAIN,p=t.passes,m=e._primitive;if(p.render){var g=n.length;for(l=0;l<g;++l)u=c[yj(l,g)],d&&wj(e,n[l],t,r,o,u,a),f&&wj(e,n[l].derivedCommands.tileset,t,r,o,u,a);if(t.invertClassification){var v=m._commandsIgnoreShow,_=v.length;for(l=0;l<_;++l)u=c[l],wj(e,v[l],t,r,o,u,a)}}if(p.pick){var b,y=i.length;for(e._useFragmentCulling||(b=m._primitive._pickOffsets),l=0;l<y;++l){if(u=c[yj(l,y)],!e._useFragmentCulling)u=c[b[yj(l,y)].index];d&&Oj(e,i[l],t,r,o,u),f&&Oj(e,i[l].derivedCommands.tileset,t,r,o,u)}}}(t,n,i,r,o,a,s)},this._primitive=new lj(n),this._primitive.readyPromise.then((function(e){t._ready=!0,t.releaseGeometryInstances&&(t.geometryInstances=void 0);var n=e._error;Object(o.a)(n)?t._readyPromise.reject(n):t._readyPromise.resolve(t)}))}this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowShadowVolume=this.debugShowShadowVolume,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e)}else{if(!this.asynchronous)throw new a.a("For synchronous GroundPrimitives, you must call GroundPrimitive.initializeTerrainHeights() and wait for the returned promise to resolve.");hj.initializeTerrainHeights()}},hj.prototype.getBoundingSphere=function(e){var t=this._boundingSpheresKeys.indexOf(e);if(-1!==t)return this._boundingSpheres[t]},hj.prototype.getGeometryInstanceAttributes=function(e){if(!Object(o.a)(this._primitive))throw new a.a("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)},hj.prototype.isDestroyed=function(){return!1},hj.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),Ks(this)},hj._supportsMaterials=function(e){return e.depthTexture},hj.supportsMaterials=function(e){return i.a.typeOf.object("scene",e),hj._supportsMaterials(e.frameState.context)};var Cj=hj;function Ej(){a.a.throwInstantiationError()}Object.defineProperties(Ej.prototype,{isConstant:{get:a.a.throwInstantiationError},definitionChanged:{get:a.a.throwInstantiationError}}),Ej.prototype.getType=a.a.throwInstantiationError,Ej.prototype.getValue=a.a.throwInstantiationError,Ej.prototype.equals=a.a.throwInstantiationError,Ej.getValue=function(e,t,n){var i;return Object(o.a)(t)&&(i=t.getType(e),Object(o.a)(i))?(Object(o.a)(n)&&n.type===i||(n=mI.fromType(i)),t.getValue(e,n.uniforms),n):(Object(o.a)(n)&&n.type===mI.ColorType||(n=mI.fromType(mI.ColorType)),Hf.clone(Hf.WHITE,n.uniforms.color),n)};var Aj=Ej;function xj(e,t,n){i.a.defined("geometryUpdater",e),i.a.defined("primitives",t),i.a.defined("orderedGroundPrimitives",n),this._primitives=t,this._orderedGroundPrimitives=n,this._primitive=void 0,this._outlinePrimitive=void 0,this._geometryUpdater=e,this._options=e._options,this._entity=e._entity,this._material=void 0}xj.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!cP.getValueOrDefault(t.show,n,!0)},xj.prototype._setOptions=a.a.throwInstantiationError,xj.prototype.update=function(e){i.a.defined("time",e);var t=this._geometryUpdater,n=t._onTerrain,r=this._primitives,a=this._orderedGroundPrimitives;n?a.remove(this._primitive):(r.removeAndDestroy(this._primitive),r.removeAndDestroy(this._outlinePrimitive),this._outlinePrimitive=void 0),this._primitive=void 0;var s=this._entity,c=s[this._geometryUpdater._geometryPropertyName];if(this._setOptions(s,c,e),!this._isHidden(s,c,e)){var l=this._geometryUpdater.shadowsProperty.getValue(e),u=this._options;if(!Object(o.a)(c.fill)||c.fill.getValue(e)){var h,d=t.fillMaterialProperty,f=d instanceof wI,p=t._getIsClosed(u);if(f)h=new bI({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{var m=Aj.getValue(e,d,this._material);this._material=m,h=new vI({material:m,translucent:m.isTranslucent(),closed:p})}if(n)u.vertexFormat=bI.VERTEX_FORMAT,this._primitive=a.add(new Cj({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:h,asynchronous:!1,shadows:l,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),cP.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{u.vertexFormat=h.vertexFormat;var g=this._geometryUpdater.createFillGeometryInstance(e);f&&(h.translucent=255!==g.attributes.color.value[3]),this._primitive=r.add(new bL({geometryInstances:g,appearance:h,asynchronous:!1,shadows:l}))}}if(!n&&Object(o.a)(c.outline)&&c.outline.getValue(e)){var v=this._geometryUpdater.createOutlineGeometryInstance(e),_=cP.getValueOrDefault(c.outlineWidth,e,1);this._outlinePrimitive=r.add(new bL({geometryInstances:v,appearance:new bI({flat:!0,translucent:255!==v.attributes.color.value[3],renderState:{lineWidth:t._scene.clampLineWidth(_)}}),asynchronous:!1,shadows:l}))}}},xj.prototype.getBoundingSphere=function(e){if(!Object(o.a)(e))throw new a.a("result is required.");var t,n=this._entity,i=this._primitive,r=this._outlinePrimitive;return Object(o.a)(i)&&i.show&&i.ready&&(t=i.getGeometryInstanceAttributes(n),Object(o.a)(t)&&Object(o.a)(t.boundingSphere))||Object(o.a)(r)&&r.show&&r.ready&&(t=r.getGeometryInstanceAttributes(n),Object(o.a)(t)&&Object(o.a)(t.boundingSphere))?(gt.clone(t.boundingSphere,e),aP.DONE):Object(o.a)(i)&&!i.ready||Object(o.a)(r)&&!r.ready?aP.PENDING:aP.FAILED},xj.prototype.isDestroyed=function(){return!1},xj.prototype.destroy=function(){var e=this._primitives,t=this._orderedGroundPrimitives;this._geometryUpdater._onTerrain?t.remove(this._primitive):e.removeAndDestroy(this._primitive),e.removeAndDestroy(this._outlinePrimitive),Ks(this)};var Tj=xj,Sj="void clipLineSegmentToNearPlane(\n vec3 p0,\n vec3 p1,\n out vec4 positionWC,\n out bool clipped,\n out bool culledByNearPlane,\n out vec4 clippedPositionEC)\n{\n culledByNearPlane = false;\n clipped = false;\n\n vec3 p0ToP1 = p1 - p0;\n float magnitude = length(p0ToP1);\n vec3 direction = normalize(p0ToP1);\n\n // Distance that p0 is behind the near plane. Negative means p0 is\n // in front of the near plane.\n float endPoint0Distance = czm_currentFrustum.x + p0.z;\n\n // Camera looks down -Z.\n // When moving a point along +Z: LESS VISIBLE\n // * Points in front of the camera move closer to the camera.\n // * Points behind the camrea move farther away from the camera.\n // When moving a point along -Z: MORE VISIBLE\n // * Points in front of the camera move farther away from the camera.\n // * Points behind the camera move closer to the camera.\n\n // Positive denominator: -Z, becoming more visible\n // Negative denominator: +Z, becoming less visible\n // Nearly zero: parallel to near plane\n float denominator = -direction.z;\n\n if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)\n {\n // p0 is behind the near plane and the line to p1 is nearly parallel to\n // the near plane, so cull the segment completely.\n culledByNearPlane = true;\n }\n else if (endPoint0Distance > 0.0)\n {\n // p0 is behind the near plane, and the line to p1 is moving distinctly\n // toward or away from it.\n\n // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction)\n float t = endPoint0Distance / denominator;\n if (t < 0.0 || t > magnitude)\n {\n // Near plane intersection is not between the two points.\n // We already confirmed p0 is behind the naer plane, so now\n // we know the entire segment is behind it.\n culledByNearPlane = true;\n }\n else\n {\n // Segment crosses the near plane, update p0 to lie exactly on it.\n p0 = p0 + t * direction;\n\n // Numerical noise might put us a bit on the wrong side of the near plane.\n // Don't let that happen.\n p0.z = min(p0.z, -czm_currentFrustum.x);\n\n clipped = true;\n }\n }\n\n clippedPositionEC = vec4(p0, 1.0);\n positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);\n}\n\nvec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)\n{\n // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC.\n\n#ifdef POLYLINE_DASH\n // Compute the window coordinates of the points.\n vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);\n vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);\n vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);\n\n // Determine the relative screen space direction of the line.\n vec2 lineDir;\n if (usePrevious) {\n lineDir = normalize(positionWindow.xy - previousWindow.xy);\n }\n else {\n lineDir = normalize(nextWindow.xy - positionWindow.xy);\n }\n angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0)\n\n // Quantize the angle so it doesn't change rapidly between segments.\n angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;\n#endif\n\n vec4 clippedPrevWC, clippedPrevEC;\n bool prevSegmentClipped, prevSegmentCulled;\n clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);\n\n vec4 clippedNextWC, clippedNextEC;\n bool nextSegmentClipped, nextSegmentCulled;\n clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);\n\n bool segmentClipped, segmentCulled;\n vec4 clippedPositionWC, clippedPositionEC;\n clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);\n\n if (segmentCulled)\n {\n return vec4(0.0, 0.0, 0.0, 1.0);\n }\n\n vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);\n vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);\n\n // If a segment was culled, we can't use the corresponding direction\n // computed above. We should never see both of these be true without\n // `segmentCulled` above also being true.\n if (prevSegmentCulled)\n {\n directionToPrevWC = -directionToNextWC;\n }\n else if (nextSegmentCulled)\n {\n directionToNextWC = -directionToPrevWC;\n }\n\n vec2 thisSegmentForwardWC, otherSegmentForwardWC;\n if (usePrevious)\n {\n thisSegmentForwardWC = -directionToPrevWC;\n otherSegmentForwardWC = directionToNextWC;\n }\n else\n {\n thisSegmentForwardWC = directionToNextWC;\n otherSegmentForwardWC = -directionToPrevWC;\n }\n\n vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);\n\n vec2 leftWC = thisSegmentLeftWC;\n float expandWidth = width * 0.5;\n\n // When lines are split at the anti-meridian, the position may be at the\n // same location as the next or previous position, and we need to handle\n // that to avoid producing NaNs.\n if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))\n {\n vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);\n\n vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;\n float leftSumLength = length(leftSumWC);\n leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);\n\n // The sine of the angle between the two vectors is given by the formula\n // |a x b| = |a||b|sin(theta)\n // which is\n // float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0)));\n // Because the z components of both vectors are zero, the x and y coordinate will be zero.\n // Therefore, the sine of the angle is just the z component of the cross product.\n vec2 u = -thisSegmentForwardWC;\n vec2 v = leftWC;\n float sinAngle = abs(u.x * v.y - u.y * v.x);\n expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);\n }\n\n vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;\n return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;\n}\n\nvec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)\n{\n vec4 positionEC = czm_modelViewRelativeToEye * position;\n vec4 prevEC = czm_modelViewRelativeToEye * previous;\n vec4 nextEC = czm_modelViewRelativeToEye * next;\n return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);\n}\n",Dj=Sj+"\nattribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 prevPosition3DHigh;\nattribute vec3 prevPosition3DLow;\nattribute vec3 nextPosition3DHigh;\nattribute vec3 nextPosition3DLow;\nattribute vec2 expandAndWidth;\nattribute vec4 color;\nattribute float batchId;\n\nvarying vec4 v_color;\n\nvoid main()\n{\n float expandDir = expandAndWidth.x;\n float width = abs(expandAndWidth.y) + 0.5;\n bool usePrev = expandAndWidth.y < 0.0;\n\n vec4 p = czm_computePosition();\n vec4 prev = czm_computePrevPosition();\n vec4 next = czm_computeNextPosition();\n\n float angle;\n vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);\n gl_Position = czm_viewportOrthographic * positionWC;\n\n v_color = color;\n}\n";function Pj(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.translucent,!0),n=Pj.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,Dj),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,"varying vec4 v_color;\n\nvoid main()\n{\n gl_FragColor = czm_gammaCorrect(v_color);\n}\n"),this._renderState=zP.getDefaultRenderState(t,!1,e.renderState),this._closed=!1,this._vertexFormat=n}oo.isInternetExplorer()||(Dj="#define CLIP_POLYLINE \n"+Dj),Object.defineProperties(Pj.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}}),Pj.VERTEX_FORMAT=Ul.POSITION_ONLY,Pj.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,Pj.prototype.isTranslucent=zP.prototype.isTranslucent,Pj.prototype.getRenderState=zP.prototype.getRenderState;var Ij=Pj,Mj="#ifdef VECTOR_TILE\nuniform vec4 u_highlightColor;\n#endif\n\nvarying vec2 v_st;\n\nvoid main()\n{\n czm_materialInput materialInput;\n\n vec2 st = v_st;\n st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);\n\n materialInput.s = st.s;\n materialInput.st = st;\n materialInput.str = vec3(st, 0.0);\n\n czm_material material = czm_getMaterial(materialInput);\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#ifdef VECTOR_TILE\n gl_FragColor *= u_highlightColor;\n#endif\n\n czm_writeLogDepth();\n}\n",Rj=Sj+"\nattribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 prevPosition3DHigh;\nattribute vec3 prevPosition3DLow;\nattribute vec3 nextPosition3DHigh;\nattribute vec3 nextPosition3DLow;\nattribute vec2 expandAndWidth;\nattribute vec2 st;\nattribute float batchId;\n\nvarying float v_width;\nvarying vec2 v_st;\nvarying float v_polylineAngle;\n\nvoid main()\n{\n float expandDir = expandAndWidth.x;\n float width = abs(expandAndWidth.y) + 0.5;\n bool usePrev = expandAndWidth.y < 0.0;\n\n vec4 p = czm_computePosition();\n vec4 prev = czm_computePrevPosition();\n vec4 next = czm_computeNextPosition();\n\n float angle;\n vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);\n gl_Position = czm_viewportOrthographic * positionWC;\n\n v_width = width;\n v_st.s = st.s;\n v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);\n v_polylineAngle = angle;\n}\n";function Lj(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.translucent,!0),n=Lj.VERTEX_FORMAT;this.material=Object(o.a)(e.material)?e.material:mI.fromType(mI.ColorType),this.translucent=t,this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,Rj),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,"#ifdef VECTOR_TILE\nuniform vec4 u_highlightColor;\n#endif\n\nvarying vec2 v_st;\n\nvoid main()\n{\n czm_materialInput materialInput;\n\n vec2 st = v_st;\n st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);\n\n materialInput.s = st.s;\n materialInput.st = st;\n materialInput.str = vec3(st, 0.0);\n\n czm_material material = czm_getMaterial(materialInput);\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#ifdef VECTOR_TILE\n gl_FragColor *= u_highlightColor;\n#endif\n\n czm_writeLogDepth();\n}\n"),this._renderState=zP.getDefaultRenderState(t,!1,e.renderState),this._closed=!1,this._vertexFormat=n}oo.isInternetExplorer()||(Rj="#define CLIP_POLYLINE \n"+Rj),Object.defineProperties(Lj.prototype,{vertexShaderSource:{get:function(){var e=this._vertexShaderSource;return-1!==this.material.shaderSource.search(/varying\s+float\s+v_polylineAngle;/g)&&(e="#define POLYLINE_DASH\n"+e),e}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}}),Lj.VERTEX_FORMAT=Ul.POSITION_AND_ST,Lj.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,Lj.prototype.isTranslucent=zP.prototype.isTranslucent,Lj.prototype.getRenderState=zP.prototype.getRenderState;var jj=Lj;function Fj(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;var t=e.appearance;Object(o.a)(t)||(t=new jj),this.appearance=t,this.show=Object(r.a)(e.show,!0),this.classificationType=Object(r.a)(e.classificationType,JM.BOTH),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._debugShowShadowVolume=Object(r.a)(e.debugShowShadowVolume,!1),this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:!1,interleave:Object(r.a)(e.interleave,!1),releaseGeometryInstances:Object(r.a)(e.releaseGeometryInstances,!0),allowPicking:Object(r.a)(e.allowPicking,!0),asynchronous:Object(r.a)(e.asynchronous,!0),compressVertices:!1,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0},this._zIndex=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._primitive=void 0,this._sp=void 0,this._sp2D=void 0,this._spMorph=void 0,this._renderState=Nj(!1),this._renderState3DTiles=Nj(!0),this._renderStateMorph=XI.fromCache({cull:{enabled:!0,face:FP.FRONT},depthTest:{enabled:!0},blending:LP.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}function Nj(e){return XI.fromCache({cull:{enabled:!0},blending:LP.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:XL.EQUAL,frontOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.KEEP},backFunction:XL.EQUAL,backOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.KEEP},reference:JL.CESIUM_3D_TILE_MASK,mask:JL.CESIUM_3D_TILE_MASK}})}function zj(e,t,n,i,r,o,a){n.mode===IR.MORPHING?t=t.derivedCommands.colorMorph:n.mode!==IR.SCENE3D&&(t=t.derivedCommands.color2D),t.modelMatrix=i,t.boundingVolume=o,t.cull=r,t.debugShowBoundingVolume=a,n.commandList.push(t)}Object.defineProperties(Fj.prototype,{interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},debugShowShadowVolume:{get:function(){return this._debugShowShadowVolume}}}),Fj.initializeTerrainHeights=function(){return qt.initialize()},Fj.prototype.update=function(e){if(Object(o.a)(this._primitive)||Object(o.a)(this.geometryInstances))if(qt.initialized){var t,n=this,i=this._primitiveOptions;if(!Object(o.a)(this._primitive)){var r,s=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],c=s.length,l=new Array(c);for(t=0;t<c;++t)if(r=s[t].attributes,!Object(o.a)(r)||!Object(o.a)(r.color)){this._hasPerInstanceColors=!1;break}for(t=0;t<c;++t){var u=s[t];r={};var h=u.attributes;for(var d in h)h.hasOwnProperty(d)&&(r[d]=h[d]);Object(o.a)(r.width)||(r.width=new Dy({componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:1,value:[u.geometry.width]})),u.geometry._scene3DOnly=e.scene3DOnly,WO.setProjectionAndEllipsoid(u.geometry,e.mapProjection),l[t]=new fh({geometry:u.geometry,attributes:r,id:u.id,pickPrimitive:n})}i.geometryInstances=l,i.appearance=this.appearance,i._createShaderProgramFunction=function(e,t,i){!function(e,t,n){var i=t.context,r=e._primitive,a=r._attributeLocations,s=r._batchTable.getVertexShaderCallback()('attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\n\n// In 2D and in 3D, texture coordinate normalization component signs encodes:\n// * X sign - sidedness relative to right plane\n// * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume\n#ifndef COLUMBUS_VIEW_2D\nattribute vec4 startHiAndForwardOffsetX;\nattribute vec4 startLoAndForwardOffsetY;\nattribute vec4 startNormalAndForwardOffsetZ;\nattribute vec4 endNormalAndTextureCoordinateNormalizationX;\nattribute vec4 rightNormalAndTextureCoordinateNormalizationY;\n#else\nattribute vec4 startHiLo2D;\nattribute vec4 offsetAndRight2D;\nattribute vec4 startEndNormals2D;\nattribute vec2 texcoordNormalization2D;\n#endif\n\nattribute float batchId;\n\nvarying vec4 v_startPlaneNormalEcAndHalfWidth;\nvarying vec4 v_endPlaneNormalEcAndBatchId;\nvarying vec4 v_rightPlaneEC;\nvarying vec4 v_endEcAndStartEcX;\nvarying vec4 v_texcoordNormalizationAndStartEcYZ;\n\n// For materials\n#ifdef WIDTH_VARYING\nvarying float v_width;\n#endif\n#ifdef ANGLE_VARYING\nvarying float v_polylineAngle;\n#endif\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#endif\n\nvoid main()\n{\n#ifdef COLUMBUS_VIEW_2D\n vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz;\n\n vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy);\n vec3 ecEnd = forwardDirectionEC + ecStart;\n forwardDirectionEC = normalize(forwardDirectionEC);\n\n // Right plane\n v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\n v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\n\n // start plane\n vec4 startPlaneEC;\n startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);\n startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\n\n // end plane\n vec4 endPlaneEC;\n endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);\n endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\n\n v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x);\n v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y;\n\n#else // COLUMBUS_VIEW_2D\n vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz;\n vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w);\n vec3 ecEnd = ecStart + offset;\n\n vec3 forwardDirectionEC = normalize(offset);\n\n // start plane\n vec4 startPlaneEC;\n startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\n startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\n\n // end plane\n vec4 endPlaneEC;\n endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\n endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\n\n // Right plane\n v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\n v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\n\n v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\n v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w;\n\n#endif // COLUMBUS_VIEW_2D\n\n v_endEcAndStartEcX.xyz = ecEnd;\n v_endEcAndStartEcX.w = ecStart.x;\n v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;\n\n#ifdef PER_INSTANCE_COLOR\n v_color = czm_batchTable_color(batchId);\n#endif // PER_INSTANCE_COLOR\n\n // Compute a normal along which to "push" the position out, extending the miter depending on view distance.\n // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.\n // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\n vec4 positionRelativeToEye = czm_computePosition();\n\n // Check distance to the end plane and start plane, pick the plane that is closer\n vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition\n float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz));\n float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz));\n vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);\n vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.\n vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\n\n // Extrude bottom vertices downward for far view distances, like for GroundPrimitives\n upOrDown = cross(forwardDirectionEC, normalEC);\n upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown;\n upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;\n upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown;\n positionEC.xyz += upOrDown;\n\n v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));\n\n // Determine distance along normalEC to push for a volume of appropriate width.\n // Make volumes about double pixel width for a conservative fit - in practice the\n // extra cost here is minimal compared to the loose volume heights.\n //\n // N = normalEC (guaranteed "right-facing")\n // R = rightEC\n // p = angle between N and R\n // w = distance to push along R if R == N\n // d = distance to push along N\n //\n // N R\n // { p| } * cos(p) = dot(N, R) = w / d\n // d | |w * d = w / dot(N, R)\n // { | }\n // o---------- polyline segment ----\x3e\n //\n float width = czm_batchTable_width(batchId);\n#ifdef WIDTH_VARYING\n v_width = width;\n#endif\n\n v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;\n v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;\n\n v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz;\n v_endPlaneNormalEcAndBatchId.w = batchId;\n\n width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R\n width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N\n\n // Determine if this vertex is on the "left" or "right"\n#ifdef COLUMBUS_VIEW_2D\n normalEC *= sign(texcoordNormalization2D.x);\n#else\n normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\n#endif\n\n positionEC.xyz += width * normalEC;\n gl_Position = czm_depthClamp(czm_projection * positionEC);\n\n#ifdef ANGLE_VARYING\n // Approximate relative screen space direction of the line.\n vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));\n approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\n v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\n#endif\n}\n');s=bL._appendShowToShader(r,s),s=bL._appendDistanceDisplayConditionToShader(r,s),s=bL._modifyShaderPosition(e,s,t.scene3DOnly);var c=r._batchTable.getVertexShaderCallback()('attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\n\nattribute vec4 startHiAndForwardOffsetX;\nattribute vec4 startLoAndForwardOffsetY;\nattribute vec4 startNormalAndForwardOffsetZ;\nattribute vec4 endNormalAndTextureCoordinateNormalizationX;\nattribute vec4 rightNormalAndTextureCoordinateNormalizationY;\nattribute vec4 startHiLo2D;\nattribute vec4 offsetAndRight2D;\nattribute vec4 startEndNormals2D;\nattribute vec2 texcoordNormalization2D;\n\nattribute float batchId;\n\nvarying vec3 v_forwardDirectionEC;\nvarying vec3 v_texcoordNormalizationAndHalfWidth;\nvarying float v_batchId;\n\n// For materials\n#ifdef WIDTH_VARYING\nvarying float v_width;\n#endif\n#ifdef ANGLE_VARYING\nvarying float v_polylineAngle;\n#endif\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#else\nvarying vec2 v_alignedPlaneDistances;\nvarying float v_texcoordT;\n#endif\n\n// Morphing planes using SLERP or NLERP doesn\'t seem to work, so instead draw the material directly on the shadow volume.\n// Morph views are from very far away and aren\'t meant to be used precisely, so this should be sufficient.\nvoid main()\n{\n v_batchId = batchId;\n\n // Start position\n vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw));\n vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz);\n vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\n vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\n vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\n vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\n\n // Start plane\n vec4 startPlane2D;\n vec4 startPlane3D;\n startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);\n startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\n startPlane2D.w = -dot(startPlane2D.xyz, posEc2D);\n startPlane3D.w = -dot(startPlane3D.xyz, posEc3D);\n\n // Right plane\n vec4 rightPlane2D;\n vec4 rightPlane3D;\n rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\n rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\n rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D);\n rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D);\n\n // End position\n posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0);\n posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0);\n posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\n posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\n posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\n vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\n vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w));\n vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy));\n\n // End plane\n vec4 endPlane2D;\n vec4 endPlane3D;\n endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);\n endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\n endPlane2D.w = -dot(endPlane2D.xyz, posEc2D);\n endPlane3D.w = -dot(endPlane3D.xyz, posEc3D);\n\n // Forward direction\n v_forwardDirectionEC = normalize(endEC - startEC);\n\n vec2 cleanTexcoordNormalization2D;\n cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x);\n cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y));\n vec2 cleanTexcoordNormalization3D;\n cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\n cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w;\n cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y));\n\n v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime);\n\n#ifdef PER_INSTANCE_COLOR\n v_color = czm_batchTable_color(batchId);\n#else // PER_INSTANCE_COLOR\n // For computing texture coordinates\n\n v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC);\n v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC);\n#endif // PER_INSTANCE_COLOR\n\n#ifdef WIDTH_VARYING\n float width = czm_batchTable_width(batchId);\n float halfWidth = width * 0.5;\n v_width = width;\n v_texcoordNormalizationAndHalfWidth.z = halfWidth;\n#else\n float halfWidth = 0.5 * czm_batchTable_width(batchId);\n v_texcoordNormalizationAndHalfWidth.z = halfWidth;\n#endif\n\n // Compute a normal along which to "push" the position out, extending the miter depending on view distance.\n // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.\n // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\n // Since this is morphing, compute both 3D and 2D positions and then blend.\n\n // ****** 3D ******\n // Check distance to the end plane and start plane, pick the plane that is closer\n vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition\n float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz));\n float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz));\n vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz);\n vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.\n vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\n\n // Nudge the top vertex upwards to prevent flickering\n vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D));\n geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0);\n geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\n positionEc3D.xyz += geodeticSurfaceNormal;\n\n // Determine if this vertex is on the "left" or "right"\n normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\n\n // A "perfect" implementation would push along normals according to the angle against forward.\n // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\n positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\n\n // ****** 2D ******\n // Check distance to the end plane and start plane, pick the plane that is closer\n vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition\n absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz));\n absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz));\n planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz);\n upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.\n normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\n\n // Nudge the top vertex upwards to prevent flickering\n geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D));\n geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0);\n geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\n positionEc2D.xyz += geodeticSurfaceNormal;\n\n // Determine if this vertex is on the "left" or "right"\n normalEC *= sign(texcoordNormalization2D.x);\n#ifndef PER_INSTANCE_COLOR\n // Use vertex\'s sidedness to compute its texture coordinate.\n v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0);\n#endif\n\n // A "perfect" implementation would push along normals according to the angle against forward.\n // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\n positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\n\n // Blend for actual position\n gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime);\n\n#ifdef ANGLE_VARYING\n // Approximate relative screen space direction of the line.\n vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y));\n approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\n v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\n#endif\n}\n');c=bL._appendShowToShader(r,c),c=bL._appendDistanceDisplayConditionToShader(r,c),c=bL._modifyShaderPosition(e,c,t.scene3DOnly);var l=r._batchTable.getVertexShaderCallback()('#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n\nvarying vec4 v_startPlaneNormalEcAndHalfWidth;\nvarying vec4 v_endPlaneNormalEcAndBatchId;\nvarying vec4 v_rightPlaneEC; // Technically can compute distance for this here\nvarying vec4 v_endEcAndStartEcX;\nvarying vec4 v_texcoordNormalizationAndStartEcYZ;\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#endif\n\nvoid main(void)\n{\n float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture2D(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));\n vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);\n\n // Discard for sky\n if (logDepthOrDepth == 0.0) {\n#ifdef DEBUG_SHOW_VOLUME\n gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\n return;\n#else // DEBUG_SHOW_VOLUME\n discard;\n#endif // DEBUG_SHOW_VOLUME\n }\n\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\n eyeCoordinate /= eyeCoordinate.w;\n\n float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate);\n // Check distance of the eye coordinate against the right-facing plane\n float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);\n\n // Check eye coordinate against the mitering planes\n float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz);\n float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz);\n\n if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {\n#ifdef DEBUG_SHOW_VOLUME\n gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\n return;\n#else // DEBUG_SHOW_VOLUME\n discard;\n#endif // DEBUG_SHOW_VOLUME\n }\n\n // Check distance of the eye coordinate against start and end planes with normals in the right plane.\n // For computing unskewed lengthwise texture coordinate.\n // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking.\n\n // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more "forward"\n vec3 alignedPlaneNormal;\n\n // start aligned plane\n alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz);\n alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\n distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz);\n\n // end aligned plane\n alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz);\n alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\n distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz);\n\n#ifdef PER_INSTANCE_COLOR\n gl_FragColor = czm_gammaCorrect(v_color);\n#else // PER_INSTANCE_COLOR\n // Clamp - distance to aligned planes may be negative due to mitering,\n // so fragment texture coordinate might be out-of-bounds.\n float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0);\n s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y;\n float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth);\n\n czm_materialInput materialInput;\n\n materialInput.s = s;\n materialInput.st = vec2(s, t);\n materialInput.str = vec3(s, t, 0.0);\n\n czm_material material = czm_getMaterial(materialInput);\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#endif // PER_INSTANCE_COLOR\n\n // Premultiply alpha. Required for classification primitives on translucent globe.\n gl_FragColor.rgb *= gl_FragColor.a;\n\n czm_writeDepthClamp();\n}\n'),u=["GLOBE_MINIMUM_ALTITUDE "+t.mapProjection.ellipsoid.minimumRadius.toFixed(1)],h="",d="";Object(o.a)(n.material)?(-1!==(d=Object(o.a)(n.material)?n.material.shaderSource:"").search(/varying\s+float\s+v_polylineAngle;/g)&&u.push("ANGLE_VARYING"),-1!==d.search(/varying\s+float\s+v_width;/g)&&u.push("WIDTH_VARYING")):h="PER_INSTANCE_COLOR",u.push(h);var f=e.debugShowShadowVolume?["DEBUG_SHOW_VOLUME",h]:[h],p=new KM({defines:u,sources:[s]}),m=new KM({defines:f,sources:[d,l]});e._sp=LM.replaceCache({context:i,shaderProgram:r._sp,vertexShaderSource:p,fragmentShaderSource:m,attributeLocations:a});var g=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!Object(o.a)(g)){var v=new KM({defines:u.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});g=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:v,fragmentShaderSource:m,attributeLocations:a})}e._sp2D=g;var _=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!Object(o.a)(_)){var b=new KM({defines:u.concat(["MAX_TERRAIN_HEIGHT "+qt._defaultMaxTerrainHeight.toFixed(1)]),sources:[c]});l=r._batchTable.getVertexShaderCallback()("varying vec3 v_forwardDirectionEC;\nvarying vec3 v_texcoordNormalizationAndHalfWidth;\nvarying float v_batchId;\n\n#ifdef PER_INSTANCE_COLOR\nvarying vec4 v_color;\n#else\nvarying vec2 v_alignedPlaneDistances;\nvarying float v_texcoordT;\n#endif\n\nfloat rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {\n // We don't expect the ray to ever be parallel to the plane\n return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);\n}\n\nvoid main(void)\n{\n vec4 eyeCoordinate = gl_FragCoord;\n eyeCoordinate /= eyeCoordinate.w;\n\n#ifdef PER_INSTANCE_COLOR\n gl_FragColor = czm_gammaCorrect(v_color);\n#else // PER_INSTANCE_COLOR\n // Use distances for planes aligned with segment to prevent skew in dashing\n float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);\n float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);\n\n // Clamp - distance to aligned planes may be negative due to mitering\n distanceFromStart = max(0.0, distanceFromStart);\n distanceFromEnd = max(0.0, distanceFromEnd);\n\n float s = distanceFromStart / (distanceFromStart + distanceFromEnd);\n s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;\n\n czm_materialInput materialInput;\n\n materialInput.s = s;\n materialInput.st = vec2(s, v_texcoordT);\n materialInput.str = vec3(s, v_texcoordT, 0.0);\n\n czm_material material = czm_getMaterial(materialInput);\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#endif // PER_INSTANCE_COLOR\n}\n");var y=new KM({defines:f,sources:[d,l]});_=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:b,fragmentShaderSource:y,attributeLocations:a})}e._spMorph=_}(n,t,i)},i._createCommandsFunction=function(e,t,i,r,a,s,c){!function(e,t,n,i,r,a){var s=e._primitive,c=s._va.length;r.length=c,a.length=c;for(var l=t instanceof Ij?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(l),h=0;h<c;h++){var d=s._va[h],f=r[h];Object(o.a)(f)||(f=r[h]=new CI({owner:e,primitiveType:s._primitiveType})),f.vertexArray=d,f.renderState=e._renderState,f.shaderProgram=e._sp,f.uniformMap=u,f.pass=EI.TERRAIN_CLASSIFICATION,f.pickId="czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)";var p=CI.shallowClone(f,f.derivedCommands.tileset);p.renderState=e._renderState3DTiles,p.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,f.derivedCommands.tileset=p;var m=CI.shallowClone(f,f.derivedCommands.color2D);m.shaderProgram=e._sp2D,f.derivedCommands.color2D=m;var g=CI.shallowClone(p,p.derivedCommands.color2D);g.shaderProgram=e._sp2D,p.derivedCommands.color2D=g;var v=CI.shallowClone(f,f.derivedCommands.colorMorph);v.renderState=e._renderStateMorph,v.shaderProgram=e._spMorph,v.pickId="czm_batchTable_pickColor(v_batchId)",f.derivedCommands.colorMorph=v}}(n,t,i,0,s,c)},i._updateAndQueueCommandsFunction=function(e,t,i,r,a,s,c,l){!function(e,t,n,i,r,a,s){var c,l=e._primitive;bL._updateBoundingVolumes(l,t,r),t.mode===IR.SCENE3D?c=l._boundingSphereWC:t.mode===IR.COLUMBUS_VIEW?c=l._boundingSphereCV:t.mode===IR.SCENE2D&&Object(o.a)(l._boundingSphere2D)?c=l._boundingSphere2D:Object(o.a)(l._boundingSphereMorph)&&(c=l._boundingSphereMorph);var u=t.mode===IR.MORPHING,h=e.classificationType,d=h!==JM.CESIUM_3D_TILE,f=h!==JM.TERRAIN&&!u,p=t.passes;if(p.render||p.pick&&l.allowPicking)for(var m=n.length,g=0;g<m;++g){var v=c[g];d&&zj(0,n[g],t,r,a,v,s),f&&zj(0,n[g].derivedCommands.tileset,t,r,a,v,s)}}(n,t,i,0,a,s,c)},this._primitive=new bL(i),this._primitive.readyPromise.then((function(e){n._ready=!0,n.releaseGeometryInstances&&(n.geometryInstances=void 0);var t=e._error;Object(o.a)(t)?n._readyPromise.reject(t):n._readyPromise.resolve(n)}))}if(this.appearance instanceof Ij&&!this._hasPerInstanceColors)throw new a.a("All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.");this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e)}else{if(!this.asynchronous)throw new a.a("For synchronous GroundPolylinePrimitives, you must call GroundPolylinePrimitives.initializeTerrainHeights() and wait for the returned promise to resolve.");Fj.initializeTerrainHeights()}},Fj.prototype.getGeometryInstanceAttributes=function(e){if(!Object(o.a)(this._primitive))throw new a.a("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)},Fj.isSupported=function(e){return e.frameState.context.depthTexture},Fj.prototype.isDestroyed=function(){return!1},Fj.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._sp2D=void 0,this._spMorph=void 0,Ks(this)};var kj=Fj,Bj=new Mt(1,1),Hj=Hf.WHITE;function Vj(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._image=void 0,this._imageSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._transparent=void 0,this._transparentSubscription=void 0,this.image=e.image,this.repeat=e.repeat,this.color=e.color,this.transparent=e.transparent}Object.defineProperties(Vj.prototype,{isConstant:{get:function(){return cP.isConstant(this._image)&&cP.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:eP("image"),repeat:eP("repeat"),color:eP("color"),transparent:eP("transparent")}),Vj.prototype.getType=function(e){return"Image"},Vj.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.image=cP.getValueOrUndefined(this._image,e),t.repeat=cP.getValueOrClonedDefault(this._repeat,e,Bj,t.repeat),t.color=cP.getValueOrClonedDefault(this._color,e,Hj,t.color),cP.getValueOrDefault(this._transparent,e,!1)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t},Vj.prototype.equals=function(e){return this===e||e instanceof Vj&&cP.equals(this._image,e._image)&&cP.equals(this._repeat,e._repeat)&&cP.equals(this._color,e._color)&&cP.equals(this._transparent,e._transparent)};var Uj=Vj;function Wj(e){if(e instanceof Hf)return new wI(e);if("string"===typeof e||e instanceof _t.a||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){var t=new Uj;return t.image=e,t}throw new a.a("Unable to infer material type: "+e)}var Gj=function(e,t){return eP(e,t,Wj)};function qj(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(qj.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),dimensions:eP("dimensions"),heightReference:eP("heightReference"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),qj.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.dimensions=this.dimensions,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new qj(this)},qj.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.dimensions=Object(r.a)(this.dimensions,e.dimensions),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var Yj=qj;function $j(){a.a.throwInstantiationError()}Object.defineProperties($j.prototype,{isConstant:{get:a.a.throwInstantiationError},definitionChanged:{get:a.a.throwInstantiationError},referenceFrame:{get:a.a.throwInstantiationError}}),$j.prototype.getValue=a.a.throwInstantiationError,$j.prototype.getValueInReferenceFrame=a.a.throwInstantiationError,$j.prototype.equals=a.a.throwInstantiationError;var Xj=new oe;$j.convertToReferenceFrame=function(e,t,n,i,r){if(!Object(o.a)(t))return t;if(Object(o.a)(r)||(r=new O),n===i)return O.clone(t,r);var a=ya.computeIcrfToFixedMatrix(e,Xj);return Object(o.a)(a)||(a=ya.computeTemeToPseudoFixedMatrix(e,Xj)),n===AT.INERTIAL?oe.multiplyByVector(a,t,r):n===AT.FIXED?oe.multiplyByVector(oe.transpose(a,Xj),t,r):void 0};var Kj=$j;function Qj(e,t){this._definitionChanged=new wn.a,this._value=O.clone(e),this._referenceFrame=Object(r.a)(t,AT.FIXED)}Object.defineProperties(Qj.prototype,{isConstant:{get:function(){return!Object(o.a)(this._value)||this._referenceFrame===AT.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}}),Qj.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},Qj.prototype.setValue=function(e,t){var n=!1;O.equals(this._value,e)||(n=!0,this._value=O.clone(e)),Object(o.a)(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)},Qj.prototype.getValueInReferenceFrame=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required.");if(!Object(o.a)(t))throw new a.a("referenceFrame is required.");return Kj.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)},Qj.prototype.equals=function(e){return this===e||e instanceof Qj&&O.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Zj=Qj;function Jj(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(Jj.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),positions:eP("positions"),width:eP("width"),height:eP("height"),heightReference:eP("heightReference"),extrudedHeight:eP("extrudedHeight"),extrudedHeightReference:eP("extrudedHeightReference"),cornerType:eP("cornerType"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition"),classificationType:eP("classificationType"),zIndex:eP("zIndex")}),Jj.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new Jj(this)},Jj.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.positions=Object(r.a)(this.positions,e.positions),this.width=Object(r.a)(this.width,e.width),this.height=Object(r.a)(this.height,e.height),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.extrudedHeight=Object(r.a)(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=Object(r.a)(this.extrudedHeightReference,e.extrudedHeightReference),this.cornerType=Object(r.a)(this.cornerType,e.cornerType),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=Object(r.a)(this.classificationType,e.classificationType),this.zIndex=Object(r.a)(this.zIndex,e.zIndex)};var eF=Jj;function tF(e){return e}var nF=function(e,t){return eP(e,t,tF)};function iF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._length=void 0,this._lengthSubscription=void 0,this._topRadius=void 0,this._topRadiusSubscription=void 0,this._bottomRadius=void 0,this._bottomRadiusSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._slices=void 0,this._slicesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(iF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),length:eP("length"),topRadius:eP("topRadius"),bottomRadius:eP("bottomRadius"),heightReference:eP("heightReference"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),numberOfVerticalLines:eP("numberOfVerticalLines"),slices:eP("slices"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),iF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.length=this.length,e.topRadius=this.topRadius,e.bottomRadius=this.bottomRadius,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.slices=this.slices,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new iF(this)},iF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.length=Object(r.a)(this.length,e.length),this.topRadius=Object(r.a)(this.topRadius,e.topRadius),this.bottomRadius=Object(r.a)(this.bottomRadius,e.bottomRadius),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.numberOfVerticalLines=Object(r.a)(this.numberOfVerticalLines,e.numberOfVerticalLines),this.slices=Object(r.a)(this.slices,e.slices),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var rF=iF;function oF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._semiMajorAxis=void 0,this._semiMajorAxisSubscription=void 0,this._semiMinorAxis=void 0,this._semiMinorAxisSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(oF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),semiMajorAxis:eP("semiMajorAxis"),semiMinorAxis:eP("semiMinorAxis"),height:eP("height"),heightReference:eP("heightReference"),extrudedHeight:eP("extrudedHeight"),extrudedHeightReference:eP("extrudedHeightReference"),rotation:eP("rotation"),stRotation:eP("stRotation"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),numberOfVerticalLines:eP("numberOfVerticalLines"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition"),classificationType:eP("classificationType"),zIndex:eP("zIndex")}),oF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.semiMajorAxis=this.semiMajorAxis,e.semiMinorAxis=this.semiMinorAxis,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new oF(this)},oF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.semiMajorAxis=Object(r.a)(this.semiMajorAxis,e.semiMajorAxis),this.semiMinorAxis=Object(r.a)(this.semiMinorAxis,e.semiMinorAxis),this.height=Object(r.a)(this.height,e.height),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.extrudedHeight=Object(r.a)(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=Object(r.a)(this.extrudedHeightReference,e.extrudedHeightReference),this.rotation=Object(r.a)(this.rotation,e.rotation),this.stRotation=Object(r.a)(this.stRotation,e.stRotation),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.numberOfVerticalLines=Object(r.a)(this.numberOfVerticalLines,e.numberOfVerticalLines),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=Object(r.a)(this.classificationType,e.classificationType),this.zIndex=Object(r.a)(this.zIndex,e.zIndex)};var aF=oF;function sF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._radii=void 0,this._radiiSubscription=void 0,this._innerRadii=void 0,this._innerRadiiSubscription=void 0,this._minimumClock=void 0,this._minimumClockSubscription=void 0,this._maximumClock=void 0,this._maximumClockSubscription=void 0,this._minimumCone=void 0,this._minimumConeSubscription=void 0,this._maximumCone=void 0,this._maximumConeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._stackPartitions=void 0,this._stackPartitionsSubscription=void 0,this._slicePartitions=void 0,this._slicePartitionsSubscription=void 0,this._subdivisions=void 0,this._subdivisionsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(sF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),radii:eP("radii"),innerRadii:eP("innerRadii"),minimumClock:eP("minimumClock"),maximumClock:eP("maximumClock"),minimumCone:eP("minimumCone"),maximumCone:eP("maximumCone"),heightReference:eP("heightReference"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),stackPartitions:eP("stackPartitions"),slicePartitions:eP("slicePartitions"),subdivisions:eP("subdivisions"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),sF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.radii=this.radii,e.innerRadii=this.innerRadii,e.minimumClock=this.minimumClock,e.maximumClock=this.maximumClock,e.minimumCone=this.minimumCone,e.maximumCone=this.maximumCone,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.stackPartitions=this.stackPartitions,e.slicePartitions=this.slicePartitions,e.subdivisions=this.subdivisions,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new sF(this)},sF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.radii=Object(r.a)(this.radii,e.radii),this.innerRadii=Object(r.a)(this.innerRadii,e.innerRadii),this.minimumClock=Object(r.a)(this.minimumClock,e.minimumClock),this.maximumClock=Object(r.a)(this.maximumClock,e.maximumClock),this.minimumCone=Object(r.a)(this.minimumCone,e.minimumCone),this.maximumCone=Object(r.a)(this.maximumCone,e.maximumCone),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.stackPartitions=Object(r.a)(this.stackPartitions,e.stackPartitions),this.slicePartitions=Object(r.a)(this.slicePartitions,e.slicePartitions),this.subdivisions=Object(r.a)(this.subdivisions,e.subdivisions),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var cF=sF;function lF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._text=void 0,this._textSubscription=void 0,this._font=void 0,this._fontSubscription=void 0,this._style=void 0,this._styleSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._showBackground=void 0,this._showBackgroundSubscription=void 0,this._backgroundColor=void 0,this._backgroundColorSubscription=void 0,this._backgroundPadding=void 0,this._backgroundPaddingSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fillColor=void 0,this._fillColorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(lF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),text:eP("text"),font:eP("font"),style:eP("style"),scale:eP("scale"),showBackground:eP("showBackground"),backgroundColor:eP("backgroundColor"),backgroundPadding:eP("backgroundPadding"),pixelOffset:eP("pixelOffset"),eyeOffset:eP("eyeOffset"),horizontalOrigin:eP("horizontalOrigin"),verticalOrigin:eP("verticalOrigin"),heightReference:eP("heightReference"),fillColor:eP("fillColor"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),translucencyByDistance:eP("translucencyByDistance"),pixelOffsetScaleByDistance:eP("pixelOffsetScaleByDistance"),scaleByDistance:eP("scaleByDistance"),distanceDisplayCondition:eP("distanceDisplayCondition"),disableDepthTestDistance:eP("disableDepthTestDistance")}),lF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.text=this.text,e.font=this.font,e.style=this.style,e.scale=this.scale,e.showBackground=this.showBackground,e.backgroundColor=this.backgroundColor,e.backgroundPadding=this.backgroundPadding,e.pixelOffset=this.pixelOffset,e.eyeOffset=this.eyeOffset,e.horizontalOrigin=this.horizontalOrigin,e.verticalOrigin=this.verticalOrigin,e.heightReference=this.heightReference,e.fillColor=this.fillColor,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.translucencyByDistance=this.translucencyByDistance,e.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance,e.scaleByDistance=this.scaleByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new lF(this)},lF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.text=Object(r.a)(this.text,e.text),this.font=Object(r.a)(this.font,e.font),this.style=Object(r.a)(this.style,e.style),this.scale=Object(r.a)(this.scale,e.scale),this.showBackground=Object(r.a)(this.showBackground,e.showBackground),this.backgroundColor=Object(r.a)(this.backgroundColor,e.backgroundColor),this.backgroundPadding=Object(r.a)(this.backgroundPadding,e.backgroundPadding),this.pixelOffset=Object(r.a)(this.pixelOffset,e.pixelOffset),this.eyeOffset=Object(r.a)(this.eyeOffset,e.eyeOffset),this.horizontalOrigin=Object(r.a)(this.horizontalOrigin,e.horizontalOrigin),this.verticalOrigin=Object(r.a)(this.verticalOrigin,e.verticalOrigin),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.fillColor=Object(r.a)(this.fillColor,e.fillColor),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.translucencyByDistance=Object(r.a)(this.translucencyByDistance,e.translucencyByDistance),this.pixelOffsetScaleByDistance=Object(r.a)(this.pixelOffsetScaleByDistance,e.pixelOffsetScaleByDistance),this.scaleByDistance=Object(r.a)(this.scaleByDistance,e.scaleByDistance),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=Object(r.a)(this.disableDepthTestDistance,e.disableDepthTestDistance)};var uF=lF,hF=new pD;function dF(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._translation=void 0,this._translationSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this.translation=e.translation,this.rotation=e.rotation,this.scale=e.scale}Object.defineProperties(dF.prototype,{isConstant:{get:function(){return cP.isConstant(this._translation)&&cP.isConstant(this._rotation)&&cP.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:eP("translation"),rotation:eP("rotation"),scale:eP("scale")}),dF.prototype.getValue=function(e,t){return Object(o.a)(t)||(t=new pD),t.translation=cP.getValueOrClonedDefault(this._translation,e,hF.translation,t.translation),t.rotation=cP.getValueOrClonedDefault(this._rotation,e,hF.rotation,t.rotation),t.scale=cP.getValueOrClonedDefault(this._scale,e,hF.scale,t.scale),t},dF.prototype.equals=function(e){return this===e||e instanceof dF&&cP.equals(this._translation,e._translation)&&cP.equals(this._rotation,e._rotation)&&cP.equals(this._scale,e._scale)};var fF=dF;function pF(e,t){this._propertyNames=[],this._definitionChanged=new wn.a,Object(o.a)(e)&&this.merge(e,t)}function mF(e){return new ZD(e)}Object.defineProperties(pF.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){for(var e=this._propertyNames,t=0,n=e.length;t<n;t++)if(!cP.isConstant(this[e[t]]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}}),pF.prototype.hasProperty=function(e){return-1!==this._propertyNames.indexOf(e)},pF.prototype.addProperty=function(e,t,n){var i=this._propertyNames;if(!Object(o.a)(e))throw new a.a("propertyName is required.");if(-1!==i.indexOf(e))throw new a.a(e+" is already a registered property.");i.push(e),Object.defineProperty(this,e,eP(e,!0,Object(r.a)(n,mF))),Object(o.a)(t)&&(this[e]=t),this._definitionChanged.raiseEvent(this)},pF.prototype.removeProperty=function(e){var t=this._propertyNames.indexOf(e);if(!Object(o.a)(e))throw new a.a("propertyName is required.");if(-1===t)throw new a.a(e+" is not a registered property.");this._propertyNames.splice(t,1),delete this[e],this._definitionChanged.raiseEvent(this)},pF.prototype.getValue=function(e,t){if(!Object(o.a)(e))throw new a.a("time is required.");Object(o.a)(t)||(t={});for(var n=this._propertyNames,i=0,r=n.length;i<r;i++){var s=n[i];t[s]=cP.getValueOrUndefined(this[s],e,t[s])}return t},pF.prototype.merge=function(e,t){if(!Object(o.a)(e))throw new a.a("source is required.");for(var n=this._propertyNames,i=Object(o.a)(e._propertyNames)?e._propertyNames:Object.keys(e),r=0,s=i.length;r<s;r++){var c=i[r],l=this[c],u=e[c];void 0===l&&-1===n.indexOf(c)&&this.addProperty(c,void 0,t),void 0!==u&&(void 0!==l?Object(o.a)(l)&&Object(o.a)(l.merge)&&l.merge(u):Object(o.a)(u)&&Object(o.a)(u.merge)&&Object(o.a)(u.clone)?this[c]=u.clone():this[c]=u)}},pF.prototype.equals=function(e){return this===e||e instanceof pF&&function(e,t){var n=e._propertyNames,i=t._propertyNames,r=n.length;if(r!==i.length)return!1;for(var o=0;o<r;++o){var a=n[o];if(-1===i.indexOf(a))return!1;if(!cP.equals(e[a],t[a]))return!1}return!0}(this,e)};var gF=pF;function vF(e){return new fF(e)}function _F(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._minimumPixelSize=void 0,this._minimumPixelSizeSubscription=void 0,this._maximumScale=void 0,this._maximumScaleSubscription=void 0,this._incrementallyLoadTextures=void 0,this._incrementallyLoadTexturesSubscription=void 0,this._runAnimations=void 0,this._runAnimationsSubscription=void 0,this._clampAnimations=void 0,this._clampAnimationsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._silhouetteColor=void 0,this._silhouetteColorSubscription=void 0,this._silhouetteSize=void 0,this._silhouetteSizeSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._colorBlendMode=void 0,this._colorBlendModeSubscription=void 0,this._colorBlendAmount=void 0,this._colorBlendAmountSubscription=void 0,this._imageBasedLightingFactor=void 0,this._imageBasedLightingFactorSubscription=void 0,this._lightColor=void 0,this._lightColorSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._nodeTransformations=void 0,this._nodeTransformationsSubscription=void 0,this._articulations=void 0,this._articulationsSubscription=void 0,this._clippingPlanes=void 0,this._clippingPlanesSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(_F.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),uri:eP("uri"),scale:eP("scale"),minimumPixelSize:eP("minimumPixelSize"),maximumScale:eP("maximumScale"),incrementallyLoadTextures:eP("incrementallyLoadTextures"),runAnimations:eP("runAnimations"),clampAnimations:eP("clampAnimations"),shadows:eP("shadows"),heightReference:eP("heightReference"),silhouetteColor:eP("silhouetteColor"),silhouetteSize:eP("silhouetteSize"),color:eP("color"),colorBlendMode:eP("colorBlendMode"),colorBlendAmount:eP("colorBlendAmount"),imageBasedLightingFactor:eP("imageBasedLightingFactor"),lightColor:eP("lightColor"),distanceDisplayCondition:eP("distanceDisplayCondition"),nodeTransformations:eP("nodeTransformations",void 0,(function(e){return new gF(e,vF)})),articulations:eP("articulations",void 0,(function(e){return new gF(e)})),clippingPlanes:eP("clippingPlanes")}),_F.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.uri=this.uri,e.scale=this.scale,e.minimumPixelSize=this.minimumPixelSize,e.maximumScale=this.maximumScale,e.incrementallyLoadTextures=this.incrementallyLoadTextures,e.runAnimations=this.runAnimations,e.clampAnimations=this.clampAnimations,e.heightReference=this._heightReference,e.silhouetteColor=this.silhouetteColor,e.silhouetteSize=this.silhouetteSize,e.color=this.color,e.colorBlendMode=this.colorBlendMode,e.colorBlendAmount=this.colorBlendAmount,e.imageBasedLightingFactor=this.imageBasedLightingFactor,e.lightColor=this.lightColor,e.distanceDisplayCondition=this.distanceDisplayCondition,e.nodeTransformations=this.nodeTransformations,e.articulations=this.articulations,e.clippingPlanes=this.clippingPlanes,e):new _F(this)},_F.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.uri=Object(r.a)(this.uri,e.uri),this.scale=Object(r.a)(this.scale,e.scale),this.minimumPixelSize=Object(r.a)(this.minimumPixelSize,e.minimumPixelSize),this.maximumScale=Object(r.a)(this.maximumScale,e.maximumScale),this.incrementallyLoadTextures=Object(r.a)(this.incrementallyLoadTextures,e.incrementallyLoadTextures),this.runAnimations=Object(r.a)(this.runAnimations,e.runAnimations),this.clampAnimations=Object(r.a)(this.clampAnimations,e.clampAnimations),this.shadows=Object(r.a)(this.shadows,e.shadows),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.silhouetteColor=Object(r.a)(this.silhouetteColor,e.silhouetteColor),this.silhouetteSize=Object(r.a)(this.silhouetteSize,e.silhouetteSize),this.color=Object(r.a)(this.color,e.color),this.colorBlendMode=Object(r.a)(this.colorBlendMode,e.colorBlendMode),this.colorBlendAmount=Object(r.a)(this.colorBlendAmount,e.colorBlendAmount),this.imageBasedLightingFactor=Object(r.a)(this.imageBasedLightingFactor,e.imageBasedLightingFactor),this.lightColor=Object(r.a)(this.lightColor,e.lightColor),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.clippingPlanes=Object(r.a)(this.clippingPlanes,e.clippingPlanes);var t=e.nodeTransformations;if(Object(o.a)(t)){var n=this.nodeTransformations;Object(o.a)(n)?n.merge(t):this.nodeTransformations=new gF(t,vF)}var i=e.articulations;if(Object(o.a)(i)){var s=this.articulations;Object(o.a)(s)?s.merge(i):this.articulations=new gF(i)}};var bF=_F;function yF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._maximumScreenSpaceError=void 0,this._maximumScreenSpaceErrorSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(yF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),uri:eP("uri"),maximumScreenSpaceError:eP("maximumScreenSpaceError")}),yF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.uri=this.uri,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e):new yF(this)},yF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.uri=Object(r.a)(this.uri,e.uri),this.maximumScreenSpaceError=Object(r.a)(this.maximumScreenSpaceError,e.maximumScreenSpaceError)};var wF=yF;function OF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._leadTime=void 0,this._leadTimeSubscription=void 0,this._trailTime=void 0,this._trailTimeSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._resolution=void 0,this._resolutionSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(OF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),leadTime:eP("leadTime"),trailTime:eP("trailTime"),width:eP("width"),resolution:eP("resolution"),material:Gj("material"),distanceDisplayCondition:eP("distanceDisplayCondition")}),OF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.leadTime=this.leadTime,e.trailTime=this.trailTime,e.width=this.width,e.resolution=this.resolution,e.material=this.material,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new OF(this)},OF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.leadTime=Object(r.a)(this.leadTime,e.leadTime),this.trailTime=Object(r.a)(this.trailTime,e.trailTime),this.width=Object(r.a)(this.width,e.width),this.resolution=Object(r.a)(this.resolution,e.resolution),this.material=Object(r.a)(this.material,e.material),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var CF=OF;function EF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(EF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),plane:eP("plane"),dimensions:eP("dimensions"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),EF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.plane=this.plane,e.dimensions=this.dimensions,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new EF(this)},EF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.plane=Object(r.a)(this.plane,e.plane),this.dimensions=Object(r.a)(this.dimensions,e.dimensions),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var AF=EF;function xF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._pixelSize=void 0,this._pixelSizeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(xF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),pixelSize:eP("pixelSize"),heightReference:eP("heightReference"),color:eP("color"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),scaleByDistance:eP("scaleByDistance"),translucencyByDistance:eP("translucencyByDistance"),distanceDisplayCondition:eP("distanceDisplayCondition"),disableDepthTestDistance:eP("disableDepthTestDistance")}),xF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.pixelSize=this.pixelSize,e.heightReference=this.heightReference,e.color=this.color,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.scaleByDistance=this.scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new xF(this)},xF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.pixelSize=Object(r.a)(this.pixelSize,e.pixelSize),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.color=Object(r.a)(this.color,e.color),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.scaleByDistance=Object(r.a)(this.scaleByDistance,e.scaleByDistance),this.translucencyByDistance=Object(r.a)(this._translucencyByDistance,e.translucencyByDistance),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=Object(r.a)(this.disableDepthTestDistance,e.disableDepthTestDistance)};var TF=xF;function SF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._hierarchy=void 0,this._hierarchySubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._perPositionHeight=void 0,this._perPositionHeightSubscription=void 0,this._closeTop=void 0,this._closeTopSubscription=void 0,this._closeBottom=void 0,this._closeBottomSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(SF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),hierarchy:eP("hierarchy",void 0,(function(e){return Array.isArray(e)&&(e=new bA(e)),new ZD(e)})),height:eP("height"),heightReference:eP("heightReference"),extrudedHeight:eP("extrudedHeight"),extrudedHeightReference:eP("extrudedHeightReference"),stRotation:eP("stRotation"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),perPositionHeight:eP("perPositionHeight"),closeTop:eP("closeTop"),closeBottom:eP("closeBottom"),arcType:eP("arcType"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition"),classificationType:eP("classificationType"),zIndex:eP("zIndex")}),SF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.hierarchy=this.hierarchy,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.perPositionHeight=this.perPositionHeight,e.closeTop=this.closeTop,e.closeBottom=this.closeBottom,e.arcType=this.arcType,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new SF(this)},SF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.hierarchy=Object(r.a)(this.hierarchy,e.hierarchy),this.height=Object(r.a)(this.height,e.height),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.extrudedHeight=Object(r.a)(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=Object(r.a)(this.extrudedHeightReference,e.extrudedHeightReference),this.stRotation=Object(r.a)(this.stRotation,e.stRotation),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.perPositionHeight=Object(r.a)(this.perPositionHeight,e.perPositionHeight),this.closeTop=Object(r.a)(this.closeTop,e.closeTop),this.closeBottom=Object(r.a)(this.closeBottom,e.closeBottom),this.arcType=Object(r.a)(this.arcType,e.arcType),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=Object(r.a)(this.classificationType,e.classificationType),this.zIndex=Object(r.a)(this.zIndex,e.zIndex)};var DF=SF;function PF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._depthFailMaterial=void 0,this._depthFailMaterialSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._clampToGround=void 0,this._clampToGroundSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(PF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),positions:eP("positions"),width:eP("width"),granularity:eP("granularity"),material:Gj("material"),depthFailMaterial:Gj("depthFailMaterial"),arcType:eP("arcType"),clampToGround:eP("clampToGround"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition"),classificationType:eP("classificationType"),zIndex:eP("zIndex")}),PF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.granularity=this.granularity,e.material=this.material,e.depthFailMaterial=this.depthFailMaterial,e.arcType=this.arcType,e.clampToGround=this.clampToGround,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new PF(this)},PF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.positions=Object(r.a)(this.positions,e.positions),this.width=Object(r.a)(this.width,e.width),this.granularity=Object(r.a)(this.granularity,e.granularity),this.material=Object(r.a)(this.material,e.material),this.depthFailMaterial=Object(r.a)(this.depthFailMaterial,e.depthFailMaterial),this.arcType=Object(r.a)(this.arcType,e.arcType),this.clampToGround=Object(r.a)(this.clampToGround,e.clampToGround),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=Object(r.a)(this.classificationType,e.classificationType),this.zIndex=Object(r.a)(this.zIndex,e.zIndex)};var IF=PF;function MF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._shape=void 0,this._shapeSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubsription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(MF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),positions:eP("positions"),shape:eP("shape"),cornerType:eP("cornerType"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),MF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.positions=this.positions,e.shape=this.shape,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new MF(this)},MF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.positions=Object(r.a)(this.positions,e.positions),this.shape=Object(r.a)(this.shape,e.shape),this.cornerType=Object(r.a)(this.cornerType,e.cornerType),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var RF=MF;function LF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._coordinates=void 0,this._coordinatesSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distancedisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(LF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),coordinates:eP("coordinates"),height:eP("height"),heightReference:eP("heightReference"),extrudedHeight:eP("extrudedHeight"),extrudedHeightReference:eP("extrudedHeightReference"),rotation:eP("rotation"),stRotation:eP("stRotation"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition"),classificationType:eP("classificationType"),zIndex:eP("zIndex")}),LF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.coordinates=this.coordinates,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new LF(this)},LF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.coordinates=Object(r.a)(this.coordinates,e.coordinates),this.height=Object(r.a)(this.height,e.height),this.heightReference=Object(r.a)(this.heightReference,e.heightReference),this.extrudedHeight=Object(r.a)(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=Object(r.a)(this.extrudedHeightReference,e.extrudedHeightReference),this.rotation=Object(r.a)(this.rotation,e.rotation),this.stRotation=Object(r.a)(this.stRotation,e.stRotation),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=Object(r.a)(this.classificationType,e.classificationType),this.zIndex=Object(r.a)(this.zIndex,e.zIndex)};var jF=LF;function FF(e){this._definitionChanged=new wn.a,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._minimumHeights=void 0,this._minimumHeightsSubscription=void 0,this._maximumHeights=void 0,this._maximumHeightsSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(Object(r.a)(e,r.a.EMPTY_OBJECT))}Object.defineProperties(FF.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:eP("show"),positions:eP("positions"),minimumHeights:eP("minimumHeights"),maximumHeights:eP("maximumHeights"),granularity:eP("granularity"),fill:eP("fill"),material:Gj("material"),outline:eP("outline"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth"),shadows:eP("shadows"),distanceDisplayCondition:eP("distanceDisplayCondition")}),FF.prototype.clone=function(e){return Object(o.a)(e)?(e.show=this.show,e.positions=this.positions,e.minimumHeights=this.minimumHeights,e.maximumHeights=this.maximumHeights,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new FF(this)},FF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.show=Object(r.a)(this.show,e.show),this.positions=Object(r.a)(this.positions,e.positions),this.minimumHeights=Object(r.a)(this.minimumHeights,e.minimumHeights),this.maximumHeights=Object(r.a)(this.maximumHeights,e.maximumHeights),this.granularity=Object(r.a)(this.granularity,e.granularity),this.fill=Object(r.a)(this.fill,e.fill),this.material=Object(r.a)(this.material,e.material),this.outline=Object(r.a)(this.outline,e.outline),this.outlineColor=Object(r.a)(this.outlineColor,e.outlineColor),this.outlineWidth=Object(r.a)(this.outlineWidth,e.outlineWidth),this.shadows=Object(r.a)(this.shadows,e.shadows),this.distanceDisplayCondition=Object(r.a)(this.distanceDisplayCondition,e.distanceDisplayCondition)};var NF,zF=FF,kF=new R;function BF(e){return new Zj(e)}function HF(e,t){return eP(e,void 0,(function(e){return e instanceof t?e:new t(e)}))}function VF(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).id;Object(o.a)(t)||(t=l_()),this._availability=void 0,this._id=t,this._definitionChanged=new wn.a,this._name=e.name,this._show=Object(r.a)(e.show,!0),this._parent=void 0,this._propertyNames=["billboard","box","corridor","cylinder","description","ellipse","ellipsoid","label","model","tileset","orientation","path","plane","point","polygon","polyline","polylineVolume","position","properties","rectangle","viewFrom","wall"],this._billboard=void 0,this._billboardSubscription=void 0,this._box=void 0,this._boxSubscription=void 0,this._corridor=void 0,this._corridorSubscription=void 0,this._cylinder=void 0,this._cylinderSubscription=void 0,this._description=void 0,this._descriptionSubscription=void 0,this._ellipse=void 0,this._ellipseSubscription=void 0,this._ellipsoid=void 0,this._ellipsoidSubscription=void 0,this._label=void 0,this._labelSubscription=void 0,this._model=void 0,this._modelSubscription=void 0,this._tileset=void 0,this._tilesetSubscription=void 0,this._orientation=void 0,this._orientationSubscription=void 0,this._path=void 0,this._pathSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._point=void 0,this._pointSubscription=void 0,this._polygon=void 0,this._polygonSubscription=void 0,this._polyline=void 0,this._polylineSubscription=void 0,this._polylineVolume=void 0,this._polylineVolumeSubscription=void 0,this._position=void 0,this._positionSubscription=void 0,this._properties=void 0,this._propertiesSubscription=void 0,this._rectangle=void 0,this._rectangleSubscription=void 0,this._viewFrom=void 0,this._viewFromSubscription=void 0,this._wall=void 0,this._wallSubscription=void 0,this._children=[],this.entityCollection=void 0,this.parent=e.parent,this.merge(e)}function UF(e,t,n){for(var i=t.length,r=0;r<i;r++){var o=t[r],a=o._show;(!n&&a)!==(n&&a)&&UF(o,o._children,n)}e._definitionChanged.raiseEvent(e,"isShowing",n,!n)}Object.defineProperties(VF.prototype,{availability:nF("availability"),id:{get:function(){return this._id}},definitionChanged:{get:function(){return this._definitionChanged}},name:nF("name"),show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(e!==this._show){var t=this.isShowing;this._show=e;var n=this.isShowing;t!==n&&UF(this,this._children,n),this._definitionChanged.raiseEvent(this,"show",e,!e)}}},isShowing:{get:function(){return this._show&&(!Object(o.a)(this.entityCollection)||this.entityCollection.show)&&(!Object(o.a)(this._parent)||this._parent.isShowing)}},parent:{get:function(){return this._parent},set:function(e){var t=this._parent;if(t!==e){var n=this.isShowing;if(Object(o.a)(t)){var i=t._children.indexOf(this);t._children.splice(i,1)}this._parent=e,Object(o.a)(e)&&e._children.push(this);var r=this.isShowing;n!==r&&UF(this,this._children,r),this._definitionChanged.raiseEvent(this,"parent",e,t)}}},propertyNames:{get:function(){return this._propertyNames}},billboard:HF("billboard",nP),box:HF("box",Yj),corridor:HF("corridor",eF),cylinder:HF("cylinder",rF),description:eP("description"),ellipse:HF("ellipse",aF),ellipsoid:HF("ellipsoid",cF),label:HF("label",uF),model:HF("model",bF),tileset:HF("tileset",wF),orientation:eP("orientation"),path:HF("path",CF),plane:HF("plane",AF),point:HF("point",TF),polygon:HF("polygon",DF),polyline:HF("polyline",IF),polylineVolume:HF("polylineVolume",RF),properties:HF("properties",gF),position:(NF="position",eP(NF,void 0,BF)),rectangle:HF("rectangle",jF),viewFrom:eP("viewFrom"),wall:HF("wall",zF)}),VF.prototype.isAvailable=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");var t=this._availability;return!Object(o.a)(t)||t.contains(e)},VF.prototype.addProperty=function(e){var t=this._propertyNames;if(!Object(o.a)(e))throw new a.a("propertyName is required.");if(-1!==t.indexOf(e))throw new a.a(e+" is already a registered property.");if(e in this)throw new a.a(e+" is a reserved property name.");t.push(e),Object.defineProperty(this,e,nF(e,!0))},VF.prototype.removeProperty=function(e){var t=this._propertyNames.indexOf(e);if(!Object(o.a)(e))throw new a.a("propertyName is required.");if(-1===t)throw new a.a(e+" is not a registered property.");this._propertyNames.splice(t,1),delete this[e]},VF.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.name=Object(r.a)(this.name,e.name),this.availability=Object(r.a)(this.availability,e.availability);for(var t=this._propertyNames,n=Object(o.a)(e._propertyNames)?e._propertyNames:Object.keys(e),i=n.length,s=0;s<i;s++){var c=n[s];if("parent"!==c&&"name"!==c&&"availability"!==c){var l=this[c],u=e[c];Object(o.a)(l)||-1!==t.indexOf(c)||this.addProperty(c),Object(o.a)(u)&&(Object(o.a)(l)?Object(o.a)(l.merge)&&l.merge(u):Object(o.a)(u.merge)&&Object(o.a)(u.clone)?this[c]=u.clone():this[c]=u)}}};var WF=new oe,GF=new O,qF=new No;VF.prototype.computeModelMatrix=function(e,t){i.a.typeOf.object("time",e);var n=cP.getValueOrUndefined(this._position,e,GF);if(Object(o.a)(n)){var r=cP.getValueOrUndefined(this._orientation,e,qF);return t=Object(o.a)(r)?Ae.fromRotationTranslation(oe.fromQuaternion(r,WF),n,t):ya.eastNorthUpToFixedFrame(n,void 0,t)}},VF.prototype.computeModelMatrixForHeightReference=function(e,t,n,r,a){i.a.typeOf.object("time",e);var s=cP.getValueOrDefault(t,e,iP.NONE),c=cP.getValueOrUndefined(this._position,e,GF);if(s===iP.NONE||!Object(o.a)(c)||O.equalsEpsilon(c,O.ZERO,d.EPSILON8))return this.computeModelMatrix(e,a);var l=r.cartesianToCartographic(c,kF);s===iP.CLAMP_TO_GROUND?l.height=n:l.height+=n,c=r.cartographicToCartesian(l,c);var u=cP.getValueOrUndefined(this._orientation,e,qF);return a=Object(o.a)(u)?Ae.fromRotationTranslation(oe.fromQuaternion(u,WF),c,a):ya.eastNorthUpToFixedFrame(c,void 0,a)},VF.supportsMaterialsforEntitiesOnTerrain=function(e){return Cj.supportsMaterials(e)},VF.supportsPolylinesOnTerrain=function(e){return kj.isSupported(e)};var YF=VF,$F=new wI(Hf.WHITE),XF=new ZD(!0),KF=new ZD(!0),QF=new ZD(!1),ZF=new ZD(Hf.BLACK),JF=new ZD(RR.DISABLED),eN=new ZD(new $_),tN=new ZD(JM.BOTH);function nN(e){i.a.defined("options.entity",e.entity),i.a.defined("options.scene",e.scene),i.a.defined("options.geometryOptions",e.geometryOptions),i.a.defined("options.geometryPropertyName",e.geometryPropertyName),i.a.defined("options.observedPropertyNames",e.observedPropertyNames);var t=e.entity,n=e.geometryPropertyName;this._entity=t,this._scene=e.scene,this._fillEnabled=!1,this._isClosed=!1,this._onTerrain=!1,this._dynamic=!1,this._outlineEnabled=!1,this._geometryChanged=new wn.a,this._showProperty=void 0,this._materialProperty=void 0,this._showOutlineProperty=void 0,this._outlineColorProperty=void 0,this._outlineWidth=1,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._options=e.geometryOptions,this._geometryPropertyName=n,this._id=n+"-"+t.id,this._observedPropertyNames=e.observedPropertyNames,this._supportsMaterialsforEntitiesOnTerrain=YF.supportsMaterialsforEntitiesOnTerrain(e.scene)}Object.defineProperties(nN.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!Object(o.a)(this._entity.availability)&&cP.isConstant(this._showProperty)&&cP.isConstant(this._fillProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},outlineEnabled:{get:function(){return this._outlineEnabled}},hasConstantOutline:{get:function(){return!this._outlineEnabled||!Object(o.a)(this._entity.availability)&&cP.isConstant(this._showProperty)&&cP.isConstant(this._showOutlineProperty)}},outlineColorProperty:{get:function(){return this._outlineColorProperty}},outlineWidth:{get:function(){return this._outlineWidth}},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{get:function(){return this._isClosed}},onTerrain:{get:function(){return this._onTerrain}},geometryChanged:{get:function(){return this._geometryChanged}}}),nN.prototype.isOutlineVisible=function(e){var t=this._entity,n=this._outlineEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e);return Object(r.a)(n,!1)},nN.prototype.isFilled=function(e){var t=this._entity,n=this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e);return Object(r.a)(n,!1)},nN.prototype.createFillGeometryInstance=a.a.throwInstantiationError,nN.prototype.createOutlineGeometryInstance=a.a.throwInstantiationError,nN.prototype.isDestroyed=function(){return!1},nN.prototype.destroy=function(){Ks(this)},nN.prototype._isHidden=function(e,t){var n=t.show;return Object(o.a)(n)&&n.isConstant&&!n.getValue(EC.MINIMUM_VALUE)},nN.prototype._isOnTerrain=function(e,t){return!1},nN.prototype._getIsClosed=function(e){return!0},nN.prototype._isDynamic=a.a.throwInstantiationError,nN.prototype._setStaticOptions=a.a.throwInstantiationError,nN.prototype._onEntityPropertyChanged=function(e,t,n,i){if(-1!==this._observedPropertyNames.indexOf(t)){var a=this._entity[this._geometryPropertyName];if(Object(o.a)(a)){var s=a.fill,c=!Object(o.a)(s)||!s.isConstant||s.getValue(EC.MINIMUM_VALUE),l=a.outline,u=Object(o.a)(l);if(u&&l.isConstant&&(u=l.getValue(EC.MINIMUM_VALUE)),c||u){var h=a.show;if(this._isHidden(e,a))(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));else{this._materialProperty=Object(r.a)(a.material,$F),this._fillProperty=Object(r.a)(s,KF),this._showProperty=Object(r.a)(h,XF),this._showOutlineProperty=Object(r.a)(a.outline,QF),this._outlineColorProperty=u?Object(r.a)(a.outlineColor,ZF):void 0,this._shadowsProperty=Object(r.a)(a.shadows,JF),this._distanceDisplayConditionProperty=Object(r.a)(a.distanceDisplayCondition,eN),this._classificationTypeProperty=Object(r.a)(a.classificationType,tN),this._fillEnabled=c;var d=this._isOnTerrain(e,a)&&(this._supportsMaterialsforEntitiesOnTerrain||this._materialProperty instanceof wI);if(u&&d&&(G_(G_.geometryOutlines),u=!1),this._onTerrain=d,this._outlineEnabled=u,this._isDynamic(e,a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{this._setStaticOptions(e,a),this._isClosed=this._getIsClosed(this._options);var f=a.outlineWidth;this._outlineWidth=Object(o.a)(f)?f.getValue(EC.MINIMUM_VALUE):1,this._dynamic=!1,this._geometryChanged.raiseEvent(this)}}}else(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this))}else(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this))}},nN.prototype.createDynamicUpdater=function(e,t){if(i.a.defined("primitives",e),i.a.defined("groundPrimitives",t),!this._dynamic)throw new a.a("This instance does not represent dynamic geometry.");return new this.constructor.DynamicGeometryUpdater(this,e,t)};var iN=nN;function rN(e,t){this._callback=void 0,this._isConstant=void 0,this._definitionChanged=new wn.a,this.setCallback(e,t)}Object.defineProperties(rN.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}}}),rN.prototype.getValue=function(e,t){return this._callback(e,t)},rN.prototype.setCallback=function(e,t){if(!Object(o.a)(e))throw new a.a("callback is required.");if(!Object(o.a)(t))throw new a.a("isConstant is required.");var n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)},rN.prototype.equals=function(e){return this===e||e instanceof rN&&this._callback===e._callback&&this._isConstant===e._isConstant};var oN=rN,aN=new O,sN=new R;function cN(e,t,n,r){i.a.defined("scene",e),i.a.defined("positionProperty",t),this._scene=e,this._heightReference=n,this._extrudedHeightReference=r,this._positionProperty=t,this._position=new O,this._cartographicPosition=new R,this._normal=new O,this._definitionChanged=new wn.a,this._terrainHeight=0,this._removeCallbackFunc=void 0,this._removeEventListener=void 0,this._removeModeListener=void 0;var a=this;if(Object(o.a)(e.globe)&&(this._removeEventListener=e.terrainProviderChanged.addEventListener((function(){a._updateClamping()})),this._removeModeListener=e.morphComplete.addEventListener((function(){a._updateClamping()}))),t.isConstant){var s=t.getValue(EC.MINIMUM_VALUE,aN);if(!Object(o.a)(s)||O.equals(s,O.ZERO)||!Object(o.a)(e.globe))return;this._position=O.clone(s,this._position),this._updateClamping(),this._normal=e.globe.ellipsoid.geodeticSurfaceNormal(s,this._normal)}}Object.defineProperties(cN.prototype,{isConstant:{get:function(){return!1}},definitionChanged:{get:function(){return this._definitionChanged}}}),cN.prototype._updateClamping=function(){Object(o.a)(this._removeCallbackFunc)&&this._removeCallbackFunc();var e=this._scene,t=e.globe,n=this._position;if(Object(o.a)(t)&&!O.equals(n,O.ZERO)){var i=t.ellipsoid,r=t._surface,a=this,s=i.cartesianToCartographic(n,this._cartographicPosition),c=t.getHeight(s);Object(o.a)(c)?this._terrainHeight=c:this._terrainHeight=0,this._removeCallbackFunc=r.updateHeight(s,(function(t){if(e.mode===IR.SCENE3D){var n=i.cartesianToCartographic(t,sN);a._terrainHeight=n.height}else a._terrainHeight=t.x;a.definitionChanged.raiseEvent()}))}else this._terrainHeight=0},cN.prototype.getValue=function(e,t){var n=cP.getValueOrDefault(this._heightReference,e,iP.NONE),i=cP.getValueOrDefault(this._extrudedHeightReference,e,iP.NONE);if(n===iP.NONE&&i!==iP.RELATIVE_TO_GROUND)return this._position=O.clone(O.ZERO,this._position),O.clone(O.ZERO,t);if(this._positionProperty.isConstant)return O.multiplyByScalar(this._normal,this._terrainHeight,t);var r=this._scene,a=this._positionProperty.getValue(e,aN);if(!Object(o.a)(a)||O.equals(a,O.ZERO)||!Object(o.a)(r.globe))return O.clone(O.ZERO,t);if(O.equalsEpsilon(this._position,a,d.EPSILON10))return O.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=O.clone(a,this._position),this._updateClamping();var s=r.globe.ellipsoid.geodeticSurfaceNormal(a,this._normal);return O.multiplyByScalar(s,this._terrainHeight,t)},cN.prototype.isDestroyed=function(){return!1},cN.prototype.destroy=function(){return Object(o.a)(this._removeEventListener)&&this._removeEventListener(),Object(o.a)(this._removeModeListener)&&this._removeModeListener(),Object(o.a)(this._removeCallbackFunc)&&this._removeCallbackFunc(),Ks(this)};var lN=cN;var uN=function(e,t,n,i){if(iN.prototype._onEntityPropertyChanged.call(this,e,t,n,i),-1!==this._observedPropertyNames.indexOf(t)){var r=this._entity[this._geometryPropertyName];if(Object(o.a)(r)){Object(o.a)(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);var a=r.heightReference;if(Object(o.a)(a)){var s=new oN(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new lN(this._scene,s,a)}}}},hN=O.ZERO,dN=new O,fN=new O,pN=new Hf;function mN(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function gN(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new mN(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}function vN(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(gN.prototype=Object.create(iN.prototype),gN.prototype.constructor=gN),Object.defineProperties(gN.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}}),gN.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,r=n.isAvailable(e),s=new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),c=this._distanceDisplayConditionProperty.getValue(e),l={show:s,distanceDisplayCondition:K_.fromDistanceDisplayCondition(c),color:void 0,offset:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||r)&&(t=this._materialProperty.color.getValue(e,pN)),Object(o.a)(t)||(t=Hf.WHITE),l.color=Uf.fromColor(t));return Object(o.a)(this._options.offsetAttribute)&&(l.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,hN,dN))),new fh({id:n,geometry:Ql.fromDimensions(this._options),modelMatrix:n.computeModelMatrixForHeightReference(e,n.box.heightReference,.5*this._options.dimensions.z,this._scene.mapProjection.ellipsoid),attributes:l})},gN.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,pN),s=this._distanceDisplayConditionProperty.getValue(e),c={show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(s),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(c.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,hN,dN))),new fh({id:t,geometry:ru.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,.5*this._options.dimensions.z,this._scene.mapProjection.ellipsoid),attributes:c})},gN.prototype._computeCenter=function(e,t){return cP.getValueOrUndefined(this._entity.position,e,t)},gN.prototype._isHidden=function(e,t){return!Object(o.a)(t.dimensions)||!Object(o.a)(e.position)||iN.prototype._isHidden.call(this,e,t)},gN.prototype._isDynamic=function(e,t){return!e.position.isConstant||!cP.isConstant(e.orientation)||!t.dimensions.isConstant||!cP.isConstant(t.outlineWidth)},gN.prototype._setStaticOptions=function(e,t){var n=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof wI?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(EC.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==iP.NONE?Hl.ALL:void 0},gN.prototype._onEntityPropertyChanged=uN,gN.DynamicGeometryUpdater=vN,Object(o.a)(Object.create)&&(vN.prototype=Object.create(Tj.prototype),vN.prototype.constructor=vN),vN.prototype._isHidden=function(e,t,n){var i=cP.getValueOrUndefined(e.position,n,fN),r=this._options.dimensions;return!Object(o.a)(i)||!Object(o.a)(r)||Tj.prototype._isHidden.call(this,e,t,n)},vN.prototype._setOptions=function(e,t,n){var i=cP.getValueOrDefault(t.heightReference,n,iP.NONE),r=this._options;r.dimensions=cP.getValueOrUndefined(t.dimensions,n,r.dimensions),r.offsetAttribute=i!==iP.NONE?Hl.ALL:void 0};var _N=gN;function bN(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.color=e.color,this.depth=e.depth,this.stencil=e.stencil,this.renderState=e.renderState,this.framebuffer=e.framebuffer,this.owner=e.owner,this.pass=e.pass}bN.ALL=Object.freeze(new bN({color:new Hf(0,0,0,0),depth:1,stencil:0})),bN.prototype.execute=function(e,t){e.clear(this,t)};var yN=bN,wN={X:0,Y:1,Z:2};wN.Y_UP_TO_Z_UP=Ae.fromRotationTranslation(oe.fromRotationX(d.PI_OVER_TWO)),wN.Z_UP_TO_Y_UP=Ae.fromRotationTranslation(oe.fromRotationX(-d.PI_OVER_TWO)),wN.X_UP_TO_Z_UP=Ae.fromRotationTranslation(oe.fromRotationY(-d.PI_OVER_TWO)),wN.Z_UP_TO_X_UP=Ae.fromRotationTranslation(oe.fromRotationY(d.PI_OVER_TWO)),wN.X_UP_TO_Y_UP=Ae.fromRotationTranslation(oe.fromRotationZ(d.PI_OVER_TWO)),wN.Y_UP_TO_X_UP=Ae.fromRotationTranslation(oe.fromRotationZ(-d.PI_OVER_TWO)),wN.fromName=function(e){return i.a.typeOf.string("name",e),wN[e]};var ON=Object.freeze(wN),CN=Object.freeze({SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4"}),EN=Object.freeze({HIGHLIGHT:0,REPLACE:1,MIX:2}),AN={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},xN={SCALAR:void 0,VEC2:Mt,VEC3:O,VEC4:he,MAT2:El,MAT3:oe,MAT4:Ae};var TN=function(e){var t,n=e.componentType;t="string"===typeof n?Ds.fromName(n):n;var i=AN[e.type],r=xN[e.type];return{componentsPerAttribute:i,classType:r,createArrayBufferView:function(e,n,r){return Ds.createArrayBufferView(t,e,n,i*r)}}},SN=Hf.WHITE;function DN(e,t,n,i,a){var s;this.featuresLength=t,this._translucentFeaturesLength=0,Object(o.a)(n)&&(s=n.extensions),this._extensions=Object(r.a)(s,{});var c,l,u=function(e){var t={};if(!Object(o.a)(e))return t;for(var n in e)e.hasOwnProperty(n)&&"HIERARCHY"!==n&&"extensions"!==n&&"extras"!==n&&(t[n]=Object(Lf.a)(e[n],!0));return t}(n);if(this._properties=u,this._batchTableHierarchy=function(e,t,n){if(!Object(o.a)(t))return;var i=e._extensions["3DTILES_batch_table_hierarchy"],a=t.HIERARCHY;Object(o.a)(a)&&(DN._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),e._extensions["3DTILES_batch_table_hierarchy"]=a,i=a);if(!Object(o.a)(i))return;return function(e,t){var n,i,a,s,c=e.instancesLength,l=e.classes,u=e.classIds,h=e.parentCounts,d=e.parentIds,f=c;Object(o.a)(u.byteOffset)&&(u.componentType=Object(r.a)(u.componentType,Ds.UNSIGNED_SHORT),u.type=CN.SCALAR,a=TN(u),u=a.createArrayBufferView(t.buffer,t.byteOffset+u.byteOffset,c));if(Object(o.a)(h))for(Object(o.a)(h.byteOffset)&&(h.componentType=Object(r.a)(h.componentType,Ds.UNSIGNED_SHORT),h.type=CN.SCALAR,a=TN(h),h=a.createArrayBufferView(t.buffer,t.byteOffset+h.byteOffset,c)),s=new Uint16Array(c),f=0,n=0;n<c;++n)s[n]=f,f+=h[n];Object(o.a)(d)&&Object(o.a)(d.byteOffset)&&(d.componentType=Object(r.a)(d.componentType,Ds.UNSIGNED_SHORT),d.type=CN.SCALAR,a=TN(d),d=a.createArrayBufferView(t.buffer,t.byteOffset+d.byteOffset,f));var p=l.length;for(n=0;n<p;++n){var m=l[n].length,g=l[n].instances,v=MN(m,g,t);l[n].instances=Object(Wf.a)(v,g)}var _=nl(new Array(p),0),b=new Uint16Array(c);for(n=0;n<c;++n)i=u[n],b[n]=_[i],++_[i];var y={classes:l,classIds:u,classIndexes:b,parentCounts:h,parentIndexes:s,parentIds:d};return function(e){var t=PN;t.length=0;for(var n=e.classIds.length,i=0;i<n;++i)IN(e,i,t)}(y),y}(i,n)}(this,n,i),this._batchTableBinaryProperties=MN(t,u,i),this._showAlphaProperties=void 0,this._batchValues=void 0,this._batchValuesDirty=!1,this._batchTexture=void 0,this._defaultTexture=void 0,this._pickTexture=void 0,this._pickIds=[],this._content=e,this._colorChangedCallback=a,t>0){var h=Math.min(t,BP.maximumTextureSize),d=Math.ceil(t/BP.maximumTextureSize),f=1/h,p=.5*f,m=1/d,g=.5*m;c=new Mt(h,d),l=new he(f,p,m,g)}this._textureDimensions=c,this._textureStep=l}DN._deprecationWarning=q_,Object.defineProperties(DN.prototype,{memorySizeInBytes:{get:function(){var e=0;return Object(o.a)(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),Object(o.a)(this._batchTexture)&&(e+=this._batchTexture.sizeInBytes),e}}});var PN=[];function IN(e,t,n){var i=e.parentCounts,r=e.parentIds,s=e.parentIndexes,c=e.classIds.length;if(Object(o.a)(r)){if(t>=c)throw new a.a("Parent index "+t+" exceeds the total number of instances: "+c);if(n.indexOf(t)>-1)throw new a.a("Circular dependency detected in the batch table hierarchy.");n.push(t);for(var l=Object(o.a)(i)?i[t]:1,u=Object(o.a)(i)?s[t]:t,h=0;h<l;++h){var d=r[u+h];d!==t&&IN(e,d,n)}n.pop(t)}}function MN(e,t,n){var i;for(var r in t)if(t.hasOwnProperty(r)){var a=t[r],s=a.byteOffset;if(Object(o.a)(s)){var c=a.componentType,l=a.type;if(!Object(o.a)(c))throw new de.a("componentType is required.");if(!Object(o.a)(l))throw new de.a("type is required.");if(!Object(o.a)(n))throw new de.a("Property "+r+" requires a batch table binary.");var u=TN(a),h=u.componentsPerAttribute,d=u.classType,f=u.createArrayBufferView(n.buffer,n.byteOffset+s,e);Object(o.a)(i)||(i={}),i[r]={typedArray:f,componentCount:h,type:d}}}return i}function RN(e){var t=e._textureDimensions;return t.x*t.y*4}function LN(e){if(!Object(o.a)(e._batchValues)){var t=RN(e),n=new Uint8Array(t);nl(n,255),e._batchValues=n}return e._batchValues}function jN(e){if(!Object(o.a)(e._showAlphaProperties)){var t=2*e.featuresLength,n=new Uint8Array(t);nl(n,255),e._showAlphaProperties=n}return e._showAlphaProperties}function FN(e,t){if(!Object(o.a)(e)||e<0||e>t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+t-NaN)}DN.getBinaryProperties=function(e,t,n){return MN(e,t,n)},DN.prototype.setShow=function(e,t){if(FN(e,this.featuresLength),i.a.typeOf.bool("show",t),!t||Object(o.a)(this._showAlphaProperties)){var n=jN(this),r=2*e,a=t?255:0;if(n[r]!==a)n[r]=a,LN(this)[4*e+3]=t?n[r+1]:0,this._batchValuesDirty=!0}},DN.prototype.setAllShow=function(e){i.a.typeOf.bool("show",e);for(var t=this.featuresLength,n=0;n<t;++n)this.setShow(n,e)},DN.prototype.getShow=function(e){if(FN(e,this.featuresLength),!Object(o.a)(this._showAlphaProperties))return!0;var t=2*e;return 255===this._showAlphaProperties[t]};var NN=new Array(4);DN.prototype.setColor=function(e,t){if(FN(e,this.featuresLength),i.a.typeOf.object("color",t),!Hf.equals(t,SN)||Object(o.a)(this._batchValues)){var n=t.toBytes(NN),r=n[3],a=LN(this),s=4*e,c=jN(this),l=2*e;if(a[s]!==n[0]||a[s+1]!==n[1]||a[s+2]!==n[2]||c[l+1]!==r){a[s]=n[0],a[s+1]=n[1],a[s+2]=n[2];var u=255!==c[l+1],h=0!==c[l];a[s+3]=h?r:0,c[l+1]=r;var d=255!==r;d&&!u?++this._translucentFeaturesLength:!d&&u&&--this._translucentFeaturesLength,this._batchValuesDirty=!0,Object(o.a)(this._colorChangedCallback)&&this._colorChangedCallback(e,t)}}},DN.prototype.setAllColor=function(e){i.a.typeOf.object("color",e);for(var t=this.featuresLength,n=0;n<t;++n)this.setColor(n,e)},DN.prototype.getColor=function(e,t){if(FN(e,this.featuresLength),i.a.typeOf.object("result",t),!Object(o.a)(this._batchValues))return Hf.clone(SN,t);var n=this._batchValues,r=4*e,a=this._showAlphaProperties,s=2*e;return Hf.fromBytes(n[r],n[r+1],n[r+2],a[s+1],t)},DN.prototype.getPickColor=function(e){return FN(e,this.featuresLength),this._pickIds[e]};var zN=new Hf;function kN(e,t){var n=e.typedArray,i=e.componentCount;return 1===i?n[t]:e.type.unpack(n,t*i)}function BN(e,t,n){var i=e.typedArray,r=e.componentCount;1===r?i[t]=n:e.type.pack(n,i,t*r)}DN.prototype.applyStyle=function(e){if(!Object(o.a)(e))return this.setAllColor(SN),void this.setAllShow(!0);for(var t=this._content,n=this.featuresLength,i=0;i<n;++i){var r=t.getFeature(i),a=Object(o.a)(e.color)?e.color.evaluateColor(r,zN):SN,s=!Object(o.a)(e.show)||e.show.evaluate(r);this.setColor(i,a),this.setShow(i,s)}};var HN=[],VN=[],UN=0;function WN(e,t,n){var i=e.parentCounts,r=e.parentIds;return Object(o.a)(r)?Object(o.a)(i)?function(e,t,n){var i=e.classIds,r=e.parentCounts,a=e.parentIds,s=e.parentIndexes,c=i.length,l=HN;l.length=Math.max(l.length,c);var u=++UN,h=VN;for(h.length=0,h.push(t);h.length>0;)if(l[t=h.pop()]!==u){l[t]=u;var d=n(e,t);if(Object(o.a)(d))return d;for(var f=r[t],p=s[t],m=0;m<f;++m){var g=a[p+m];g!==t&&h.push(g)}}}(e,t,n):function(e,t,n){for(var i=!0;i;){var r=n(e,t);if(Object(o.a)(r))return r;var a=e.parentIds[t];i=a!==t,t=a}}(e,t,n):n(e,t)}function GN(e,t){return e=KM.replaceMain(e,"tile_main"),t?e+"uniform float tile_colorBlend; \nvoid tile_color(vec4 tile_featureColor) \n{ \n tile_main(); \n tile_featureColor = czm_gammaCorrect(tile_featureColor); \n gl_FragColor.a *= tile_featureColor.a; \n float highlight = ceil(tile_colorBlend); \n gl_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \n} \n":e+"void tile_color(vec4 tile_featureColor) \n{ \n tile_main(); \n} \n"}function qN(e,t,n){if(!Object(o.a)(t))return GN(e,n);var i=new RegExp("(uniform|attribute|in)\\s+(vec[34]|sampler2D)\\s+"+t+";"),r=e.match(i);if(!Object(o.a)(r))return GN(e,n);var a=r[0],s=r[2];e=(e=KM.replaceMain(e,"tile_main")).replace(a,"");var c;if("vec3"===s||"vec4"===s){var l="vec3"===s?"vec4("+t+", 1.0)":t,u="vec3"===s?"tile_diffuse.xyz":"tile_diffuse";i=new RegExp(t,"g"),e=e.replace(i,u),c=" vec4 source = "+l+"; \n tile_diffuse = tile_diffuse_final(source, tile_featureColor); \n tile_main(); \n"}else"sampler2D"===s&&(e=function(e,t){for(var n,i="texture2D("+t,r=0,o=e.indexOf(i,r);o>-1;){for(var a=0,s=o;s<e.length;++s){var c=e.charAt(s);if("("===c)++a;else if(")"===c&&0===--a){n=s+1;break}}var l="tile_diffuse_final("+e.slice(o,n)+", tile_diffuse)";e=e.slice(0,o)+l+e.slice(n),r=o+l.length,o=e.indexOf(i,r)}return e}(e,t),c=" tile_diffuse = tile_featureColor; \n tile_main(); \n");return e="uniform float tile_colorBlend; \nvec4 tile_diffuse = vec4(1.0); \nbool isWhite(vec3 color) \n{ \n return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); \n} \nvec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse) \n{ \n vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend); \n vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse; \n return vec4(diffuse.rgb, sourceDiffuse.a); \n} \n"+a+"\n"+e+"\nvoid tile_color(vec4 tile_featureColor) \n{ \n"+c,n&&(e+=" tile_featureColor = czm_gammaCorrect(tile_featureColor); \n gl_FragColor.a *= tile_featureColor.a; \n float highlight = ceil(tile_colorBlend); \n gl_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \n"),e+="} \n"}DN.prototype.isClass=function(e,t){FN(e,this.featuresLength),i.a.typeOf.string("className",t);var n=this._batchTableHierarchy;if(!Object(o.a)(n))return!1;var r=WN(n,e,(function(e,n){var i=e.classIds[n];if(e.classes[i].name===t)return!0}));return Object(o.a)(r)},DN.prototype.isExactClass=function(e,t){return i.a.typeOf.string("className",t),this.getExactClassName(e)===t},DN.prototype.getExactClassName=function(e){FN(e,this.featuresLength);var t=this._batchTableHierarchy;if(Object(o.a)(t)){var n=t.classIds[e];return t.classes[n].name}},DN.prototype.hasProperty=function(e,t){return FN(e,this.featuresLength),i.a.typeOf.string("name",t),Object(o.a)(this._properties[t])||Object(o.a)(this._batchTableHierarchy)&&function(e,t,n){var i=WN(e._batchTableHierarchy,t,(function(e,t){var i=e.classIds[t],r=e.classes[i].instances;if(Object(o.a)(r[n]))return!0}));return Object(o.a)(i)}(this,e,t)},DN.prototype.getPropertyNames=function(e,t){FN(e,this.featuresLength),(t=Object(o.a)(t)?t:[]).length=0;var n=Object.keys(this._properties);return t.push.apply(t,n),Object(o.a)(this._batchTableHierarchy)&&function(e,t,n){WN(e._batchTableHierarchy,t,(function(e,t){var i=e.classIds[t],r=e.classes[i].instances;for(var o in r)r.hasOwnProperty(o)&&-1===n.indexOf(o)&&n.push(o)}))}(this,e,t),t},DN.prototype.getProperty=function(e,t){if(FN(e,this.featuresLength),i.a.typeOf.string("name",t),Object(o.a)(this._batchTableBinaryProperties)){var n=this._batchTableBinaryProperties[t];if(Object(o.a)(n))return kN(n,e)}var r=this._properties[t];if(Object(o.a)(r))return Object(Lf.a)(r[e],!0);if(Object(o.a)(this._batchTableHierarchy)){var a=function(e,t,n){return WN(e._batchTableHierarchy,t,(function(e,t){var i=e.classIds[t],r=e.classes[i],a=e.classIndexes[t],s=r.instances[n];if(Object(o.a)(s))return Object(o.a)(s.typedArray)?kN(s,a):Object(Lf.a)(s[a],!0)}))}(this,e,t);if(Object(o.a)(a))return a}},DN.prototype.setProperty=function(e,t,n){var r=this.featuresLength;if(FN(e,r),i.a.typeOf.string("name",t),Object(o.a)(this._batchTableBinaryProperties)){var s=this._batchTableBinaryProperties[t];if(Object(o.a)(s))return void BN(s,e,n)}if(!Object(o.a)(this._batchTableHierarchy)||!function(e,t,n,i){var r=WN(e._batchTableHierarchy,t,(function(e,r){var s=e.classIds[r],c=e.classes[s],l=e.classIndexes[r],u=c.instances[n];if(Object(o.a)(u)){if(r!==t)throw new a.a('Inherited property "'+n+'" is read-only.');return Object(o.a)(u.typedArray)?BN(u,l,i):u[l]=Object(Lf.a)(i,!0),!0}}));return Object(o.a)(r)}(this,e,t,n)){var c=this._properties[t];Object(o.a)(c)||(this._properties[t]=new Array(r),c=this._properties[t]),c[e]=Object(Lf.a)(n,!0)}},DN.prototype.getVertexShaderCallback=function(e,t,n){if(0!==this.featuresLength){var i=this;return function(r){var o,a=qN(r,n,!1);return BP.maximumVertexTextureImageUnits>0?(o="",e&&(o+="uniform bool tile_translucentCommand; \n"),o+="uniform sampler2D tile_batchTexture; \nvarying vec4 tile_featureColor; \nvarying vec2 tile_featureSt; \nvoid main() \n{ \n vec2 st = computeSt("+t+"); \n vec4 featureProperties = texture2D(tile_batchTexture, st); \n tile_color(featureProperties); \n float show = ceil(featureProperties.a); \n gl_Position *= show; \n",e&&(o+=" bool isStyleTranslucent = (featureProperties.a != 1.0); \n if (czm_pass == czm_passTranslucent) \n { \n if (!isStyleTranslucent && !tile_translucentCommand) \n { \n gl_Position *= 0.0; \n } \n } \n else \n { \n if (isStyleTranslucent) \n { \n gl_Position *= 0.0; \n } \n } \n"),o+=" tile_featureColor = featureProperties; \n tile_featureSt = st; \n}"):o="varying vec2 tile_featureSt; \nvoid main() \n{ \n tile_color(vec4(1.0)); \n tile_featureSt = computeSt("+t+"); \n}",a+"\n"+(1===i._textureDimensions.y?"uniform vec4 tile_textureStep; \nvec2 computeSt(float batchId) \n{ \n float stepX = tile_textureStep.x; \n float centerX = tile_textureStep.y; \n return vec2(centerX + (batchId * stepX), 0.5); \n} \n":"uniform vec4 tile_textureStep; \nuniform vec2 tile_textureDimensions; \nvec2 computeSt(float batchId) \n{ \n float stepX = tile_textureStep.x; \n float centerX = tile_textureStep.y; \n float stepY = tile_textureStep.z; \n float centerY = tile_textureStep.w; \n float xId = mod(batchId, tile_textureDimensions.x); \n float yId = floor(batchId / tile_textureDimensions.x); \n return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \n} \n")+o}}},DN.prototype.getFragmentShaderCallback=function(e,t){if(0!==this.featuresLength)return function(n){return n=qN(n,t,!0),BP.maximumVertexTextureImageUnits>0?n+="uniform sampler2D tile_pickTexture; \nvarying vec2 tile_featureSt; \nvarying vec4 tile_featureColor; \nvoid main() \n{ \n tile_color(tile_featureColor); \n}":(e&&(n+="uniform bool tile_translucentCommand; \n"),n+="uniform sampler2D tile_pickTexture; \nuniform sampler2D tile_batchTexture; \nvarying vec2 tile_featureSt; \nvoid main() \n{ \n vec4 featureProperties = texture2D(tile_batchTexture, tile_featureSt); \n if (featureProperties.a == 0.0) { \n discard; \n } \n",e&&(n+=" bool isStyleTranslucent = (featureProperties.a != 1.0); \n if (czm_pass == czm_passTranslucent) \n { \n if (!isStyleTranslucent && !tile_translucentCommand) \n { \n discard; \n } \n } \n else \n { \n if (isStyleTranslucent) \n { \n discard; \n } \n } \n"),n+=" tile_color(featureProperties); \n} \n"),n}},DN.prototype.getClassificationFragmentShaderCallback=function(){if(0!==this.featuresLength)return function(e){return e=KM.replaceMain(e,"tile_main"),BP.maximumVertexTextureImageUnits>0?e+="uniform sampler2D tile_pickTexture;\nvarying vec2 tile_featureSt; \nvarying vec4 tile_featureColor; \nvoid main() \n{ \n tile_main(); \n gl_FragColor = tile_featureColor; \n}":e+="uniform sampler2D tile_batchTexture; \nuniform sampler2D tile_pickTexture;\nvarying vec2 tile_featureSt; \nvoid main() \n{ \n tile_main(); \n vec4 featureProperties = texture2D(tile_batchTexture, tile_featureSt); \n if (featureProperties.a == 0.0) { \n discard; \n } \n gl_FragColor = featureProperties; \n} \n",e}},DN.prototype.getUniformMapCallback=function(){if(0!==this.featuresLength){var e=this;return function(t){var n={tile_batchTexture:function(){return Object(r.a)(e._batchTexture,e._defaultTexture)},tile_textureDimensions:function(){return e._textureDimensions},tile_textureStep:function(){return e._textureStep},tile_colorBlend:function(){return function(e){var t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===EN.HIGHLIGHT)return 0;if(n===EN.REPLACE)return 1;if(n===EN.MIX)return d.clamp(i,d.EPSILON4,1);throw new a.a('Invalid color blend mode "'+n+'".')}(e)},tile_pickTexture:function(){return e._pickTexture}};return Object(Wf.a)(t,n)}}},DN.prototype.getPickId=function(){return"texture2D(tile_pickTexture, tile_featureSt)"};var YN=0,$N=1,XN=2;function KN(e){var t=CI.shallowClone(e),n=t.pass===EI.TRANSLUCENT;return t.uniformMap=Object(o.a)(t.uniformMap)?t.uniformMap:{},t.uniformMap.tile_translucentCommand=function(){return n},t}function QN(e){var t=CI.shallowClone(e);return t.pass=EI.TRANSLUCENT,t.renderState=function(e){var t=Object(Lf.a)(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=LP.ALPHA_BLEND,XI.fromCache(t)}(e.renderState),t}function ZN(e){var t=CI.shallowClone(e);return t.renderState=function(e){var t=Object(Lf.a)(e,!0);return t.stencilTest=JL.setCesium3DTileBit(),t.stencilMask=JL.CESIUM_3D_TILE_MASK,XI.fromCache(t)}(e.renderState),t}function JN(e,t){var n=CI.shallowClone(t),i=Object(Lf.a)(n.renderState,!0);i.cull.enabled=!0,i.cull.face=FP.FRONT,i.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i.polygonOffset={enabled:!0,factor:5,units:5},i.stencilTest=JL.setCesium3DTileBit(),i.stencilMask=JL.CESIUM_3D_TILE_MASK,n.renderState=XI.fromCache(i),n.castShadows=!1,n.receiveShadows=!1,n.uniformMap=Object(Lf.a)(t.uniformMap);var r=new Mt(5,5);return n.uniformMap.u_polygonOffset=function(){return r},n.shaderProgram=function(e,t){var n=e.shaderCache.getDerivedShaderProgram(t,"zBackfaceLogDepth");if(!Object(o.a)(n)){var i=t.fragmentShaderSource.clone();i.defines=Object(o.a)(i.defines)?i.defines.slice(0):[],i.defines.push("POLYGON_OFFSET"),i.sources.unshift("#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n"),n=e.shaderCache.createDerivedShaderProgram(t,"zBackfaceLogDepth",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}return n}(e,t.shaderProgram),n}function ez(e,t){var n=CI.shallowClone(e),i=Object(Lf.a)(n.renderState,!0);return i.stencilTest.enabled=!0,i.stencilTest.mask=JL.SKIP_LOD_MASK,i.stencilTest.reference=JL.CESIUM_3D_TILE_MASK|t<<JL.SKIP_LOD_BIT_SHIFT,i.stencilTest.frontFunction=XL.GREATER_OR_EQUAL,i.stencilTest.frontOperation.zPass=QL.REPLACE,i.stencilTest.backFunction=XL.GREATER_OR_EQUAL,i.stencilTest.backOperation.zPass=QL.REPLACE,i.stencilMask=JL.CESIUM_3D_TILE_MASK|JL.SKIP_LOD_MASK,n.renderState=XI.fromCache(i),n}function tz(e){return(e.renderState.stencilTest.reference&JL.SKIP_LOD_MASK)>>>JL.SKIP_LOD_BIT_SHIFT}function nz(e,t,n){var i=e._textureDimensions;return new nI({context:t,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,source:{width:i.x,height:i.y,arrayBufferView:n},flipY:!1,sampler:ZP.NEAREST})}DN.prototype.addDerivedCommands=function(e,t){for(var n=e.commandList,i=n.length,r=this._content._tile,a=r._finalResolution,s=r.tileset,c=s._skipLevelOfDetail&&s._hasMixedContent&&e.context.stencilBuffer,l=function(e){var t=e._translucentFeaturesLength;if(0===t)return YN;if(t===e.featuresLength)return $N;return XN}(this),u=t;u<i;++u){var h=n[u],d=h.derivedCommands.tileset;Object(o.a)(d)&&!h.dirty||(d={},h.derivedCommands.tileset=d,d.originalCommand=KN(h),h.dirty=!1);var f=d.originalCommand;l!==YN&&h.pass!==EI.TRANSLUCENT&&(Object(o.a)(d.translucent)||(d.translucent=QN(f))),l!==$N&&h.pass!==EI.TRANSLUCENT&&(Object(o.a)(d.opaque)||(d.opaque=ZN(f)),c&&(a||(Object(o.a)(d.zback)||(d.zback=JN(e.context,f)),s._backfaceCommands.push(d.zback)),Object(o.a)(d.stencil)&&r._selectionDepth===tz(d.stencil)||(h.renderState.depthMask?d.stencil=ez(f,r._selectionDepth):d.stencil=d.opaque)));var p=c?d.stencil:d.opaque,m=d.translucent;h.pass!==EI.TRANSLUCENT?(l===YN&&(n[u]=p),l===$N&&(n[u]=m),l===XN&&(n[u]=p,n.push(m))):n[u]=f}},DN.prototype.update=function(e,t){var n=t.context;this._defaultTexture=n.defaultTexture;var i=t.passes;(i.pick||i.postProcess)&&function(e,t){var n=e.featuresLength;if(!Object(o.a)(e._pickTexture)&&n>0){for(var i=e._pickIds,r=RN(e),a=new Uint8Array(r),s=e._content,c=0;c<n;++c){var l=t.createPickId(s.getFeature(c));i.push(l);var u=l.color,h=4*c;a[h]=Hf.floatToByte(u.red),a[h+1]=Hf.floatToByte(u.green),a[h+2]=Hf.floatToByte(u.blue),a[h+3]=Hf.floatToByte(u.alpha)}e._pickTexture=nz(e,t,a),s.tileset._statistics.batchTableByteLength+=e._pickTexture.sizeInBytes}}(this,n),this._batchValuesDirty&&(this._batchValuesDirty=!1,Object(o.a)(this._batchTexture)||(this._batchTexture=nz(this,n,this._batchValues),e._statistics.batchTableByteLength+=this._batchTexture.sizeInBytes),function(e){var t=e._textureDimensions;e._batchTexture.copyFrom({width:t.x,height:t.y,arrayBufferView:e._batchValues})}(this))},DN.prototype.isDestroyed=function(){return!1},DN.prototype.destroy=function(){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),this._pickTexture=this._pickTexture&&this._pickTexture.destroy();for(var e=this._pickIds,t=e.length,n=0;n<t;++n)e[n].destroy();return Ks(this)};var iz=DN;function rz(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(rz.prototype,{show:{get:function(){return this._content.batchTable.getShow(this._batchId)},set:function(e){this._content.batchTable.setShow(this._batchId,e)}},color:{get:function(){return Object(o.a)(this._color)||(this._color=new Hf),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickId:{get:function(){return this._content.batchTable.getPickColor(this._batchId)}}}),rz.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)},rz.prototype.getPropertyNames=function(e){return this._content.batchTable.getPropertyNames(this._batchId,e)},rz.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)},rz.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0},rz.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)},rz.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)},rz.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var oz=rz;function az(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function sz(e,t,n,i,r,a){var s=e._cachedTypedArrays,c=s[t];return Object(o.a)(c)||(c=Ds.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+a,r*i),s[t]=c),c}az.prototype.getGlobalProperty=function(e,t,n){var i=this.json[e];if(Object(o.a)(i))return Object(o.a)(i.byteOffset)?sz(this,e,t=Object(r.a)(t,Ds.UNSIGNED_INT),n=Object(r.a)(n,1),1,i.byteOffset):i},az.prototype.getPropertyArray=function(e,t,n){var i=this.json[e];if(Object(o.a)(i))return Object(o.a)(i.byteOffset)?(Object(o.a)(i.componentType)&&(t=Ds.fromName(i.componentType)),sz(this,e,t,n,this.featuresLength,i.byteOffset)):function(e,t,n,i){var r=e._cachedTypedArrays,a=r[t];return Object(o.a)(a)||(a=Ds.createTypedArray(n,i),r[t]=a),a}(this,e,t,i)},az.prototype.getProperty=function(e,t,n,i,r){var a=this.json[e];if(Object(o.a)(a)){var s=this.getPropertyArray(e,t,n);if(1===n)return s[i];for(var c=0;c<n;++c)r[c]=s[n*i+c];return r}};var cz=az;var lz=function(e,t,n){if(n=Object(r.a)(n,!1)){var i=e.indexOf(t);if(i>-1)return i}return e.push(t),e.length-1};var uz=function(e,t){return Object(o.a)(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0};function hz(){}hz.objectLegacy=function(e,t){if(Object(o.a)(e))for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var i=t(e[n],n);if(Object(o.a)(i))return i}},hz.object=function(e,t){if(Object(o.a)(e))for(var n=e.length,i=0;i<n;i++){var r=t(e[i],i);if(Object(o.a)(r))return r}},hz.topLevel=function(e,t,n){var i=e[t];return Object(o.a)(i)&&!Array.isArray(i)?hz.objectLegacy(i,n):hz.object(i,n)},hz.accessor=function(e,t){return hz.topLevel(e,"accessors",t)},hz.accessorWithSemantic=function(e,t,n){var i={};return hz.mesh(e,(function(e){return hz.meshPrimitive(e,(function(e){var r=hz.meshPrimitiveAttribute(e,(function(e,r){if(0===r.indexOf(t)&&!Object(o.a)(i[e])){i[e]=!0;var a=n(e);if(Object(o.a)(a))return a}}));return Object(o.a)(r)?r:hz.meshPrimitiveTarget(e,(function(e){return hz.meshPrimitiveTargetAttribute(e,(function(e,r){if(0===r.indexOf(t)&&!Object(o.a)(i[e])){i[e]=!0;var a=n(e);if(Object(o.a)(a))return a}}))}))}))}))},hz.accessorContainingVertexAttributeData=function(e,t){var n={};return hz.mesh(e,(function(e){return hz.meshPrimitive(e,(function(e){var i=hz.meshPrimitiveAttribute(e,(function(e){if(!Object(o.a)(n[e])){n[e]=!0;var i=t(e);if(Object(o.a)(i))return i}}));return Object(o.a)(i)?i:hz.meshPrimitiveTarget(e,(function(e){return hz.meshPrimitiveTargetAttribute(e,(function(e){if(!Object(o.a)(n[e])){n[e]=!0;var i=t(e);if(Object(o.a)(i))return i}}))}))}))}))},hz.accessorContainingIndexData=function(e,t){var n={};return hz.mesh(e,(function(e){return hz.meshPrimitive(e,(function(e){var i=e.indices;if(Object(o.a)(i)&&!Object(o.a)(n[i])){n[i]=!0;var r=t(i);if(Object(o.a)(r))return r}}))}))},hz.animation=function(e,t){return hz.topLevel(e,"animations",t)},hz.animationChannel=function(e,t){var n=e.channels;return hz.object(n,t)},hz.animationSampler=function(e,t){var n=e.samplers;return hz.object(n,t)},hz.buffer=function(e,t){return hz.topLevel(e,"buffers",t)},hz.bufferView=function(e,t){return hz.topLevel(e,"bufferViews",t)},hz.camera=function(e,t){return hz.topLevel(e,"cameras",t)},hz.image=function(e,t){return hz.topLevel(e,"images",t)},hz.compressedImage=function(e,t){if(Object(o.a)(e.extras)){var n=e.extras.compressedImage3DTiles;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}}},hz.material=function(e,t){return hz.topLevel(e,"materials",t)},hz.materialValue=function(e,t){var n=e.values;for(var i in Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_techniques_webgl)&&(n=e.extensions.KHR_techniques_webgl.values),n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}},hz.mesh=function(e,t){return hz.topLevel(e,"meshes",t)},hz.meshPrimitive=function(e,t){var n=e.primitives;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;r++){var a=t(n[r],r);if(Object(o.a)(a))return a}},hz.meshPrimitiveAttribute=function(e,t){var n=e.attributes;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}},hz.meshPrimitiveTarget=function(e,t){var n=e.targets;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;++r){var a=t(n[r],r);if(Object(o.a)(a))return a}},hz.meshPrimitiveTargetAttribute=function(e,t){for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var i=t(e[n],n);if(Object(o.a)(i))return i}},hz.node=function(e,t){return hz.topLevel(e,"nodes",t)},hz.nodeInTree=function(e,t,n){var i=e.nodes;if(Object(o.a)(i))for(var r=t.length,a=0;a<r;a++){var s=t[a],c=i[s];if(Object(o.a)(c)){var l=n(c,s);if(Object(o.a)(l))return l;var u=c.children;if(Object(o.a)(u)&&(l=hz.nodeInTree(e,u,n),Object(o.a)(l)))return l}}},hz.nodeInScene=function(e,t,n){var i=t.nodes;if(Object(o.a)(i))return hz.nodeInTree(e,i,n)},hz.program=function(e,t){return uz(e,"KHR_techniques_webgl")?hz.object(e.extensions.KHR_techniques_webgl.programs,t):hz.topLevel(e,"programs",t)},hz.sampler=function(e,t){return hz.topLevel(e,"samplers",t)},hz.scene=function(e,t){return hz.topLevel(e,"scenes",t)},hz.shader=function(e,t){return uz(e,"KHR_techniques_webgl")?hz.object(e.extensions.KHR_techniques_webgl.shaders,t):hz.topLevel(e,"shaders",t)},hz.skin=function(e,t){return hz.topLevel(e,"skins",t)},hz.skinJoint=function(e,t){var n=e.joints;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;r++){var a=t(n[r]);if(Object(o.a)(a))return a}},hz.techniqueAttribute=function(e,t){var n=e.attributes;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}},hz.techniqueUniform=function(e,t){var n=e.uniforms;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}},hz.techniqueParameter=function(e,t){var n=e.parameters;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=t(n[i],i);if(Object(o.a)(r))return r}},hz.technique=function(e,t){return uz(e,"KHR_techniques_webgl")?hz.object(e.extensions.KHR_techniques_webgl.techniques,t):hz.topLevel(e,"techniques",t)},hz.texture=function(e,t){return hz.topLevel(e,"textures",t)};var dz=hz;var fz=function(e){switch(e){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}};var pz=function(e,t){var n=t.bufferView;if(Object(o.a)(n)){var i=e.bufferViews[n];if(Object(o.a)(i.byteStride)&&i.byteStride>0)return i.byteStride}return Ds.getSizeInBytes(t.componentType)*fz(t.type)};function mz(e){Object(o.a)(e)&&(e.texCoord=Object(r.a)(e.texCoord,0))}var gz=function(e){dz.accessor(e,(function(e){Object(o.a)(e.bufferView)&&(e.byteOffset=Object(r.a)(e.byteOffset,0))})),dz.bufferView(e,(function(e){Object(o.a)(e.buffer)&&(e.byteOffset=Object(r.a)(e.byteOffset,0))})),dz.mesh(e,(function(t){dz.meshPrimitive(t,(function(t){if(t.mode=Object(r.a)(t.mode,Ts.TRIANGLES),!Object(o.a)(t.material)){Object(o.a)(e.materials)||(e.materials=[]);t.material=lz(e.materials,{name:"default"})}}))})),dz.accessorContainingVertexAttributeData(e,(function(t){var n=e.accessors[t],i=n.bufferView;if(n.normalized=Object(r.a)(n.normalized,!1),Object(o.a)(i)){var a=e.bufferViews[i];a.byteStride=pz(e,n),a.target=Ts.ARRAY_BUFFER}})),dz.accessorContainingIndexData(e,(function(t){var n=e.accessors[t].bufferView;Object(o.a)(n)&&(e.bufferViews[n].target=Ts.ELEMENT_ARRAY_BUFFER)})),dz.material(e,(function(e){var t=Object(r.a)(e.extensions,r.a.EMPTY_OBJECT),n=t.KHR_materials_common;if(Object(o.a)(n)){var i=n.technique,a=Object(o.a)(n.values)?n.values:{};return n.values=a,a.ambient=Object(o.a)(a.ambient)?a.ambient:[0,0,0,1],a.emission=Object(o.a)(a.emission)?a.emission:[0,0,0,1],a.transparency=Object(r.a)(a.transparency,1),a.transparent=Object(r.a)(a.transparent,!1),a.doubleSided=Object(r.a)(a.doubleSided,!1),void("CONSTANT"!==i&&(a.diffuse=Object(o.a)(a.diffuse)?a.diffuse:[0,0,0,1],"LAMBERT"!==i&&(a.specular=Object(o.a)(a.specular)?a.specular:[0,0,0,1],a.shininess=Object(r.a)(a.shininess,0))))}e.emissiveFactor=Object(r.a)(e.emissiveFactor,[0,0,0]),e.alphaMode=Object(r.a)(e.alphaMode,"OPAQUE"),e.doubleSided=Object(r.a)(e.doubleSided,!1),"MASK"===e.alphaMode&&(e.alphaCutoff=Object(r.a)(e.alphaCutoff,.5));var s=t.KHR_techniques_webgl;Object(o.a)(s)&&dz.materialValue(e,(function(e){Object(o.a)(e.index)&&mz(e)})),mz(e.emissiveTexture),mz(e.normalTexture),mz(e.occlusionTexture);var c=e.pbrMetallicRoughness;Object(o.a)(c)&&(c.baseColorFactor=Object(r.a)(c.baseColorFactor,[1,1,1,1]),c.metallicFactor=Object(r.a)(c.metallicFactor,1),c.roughnessFactor=Object(r.a)(c.roughnessFactor,1),mz(c.baseColorTexture),mz(c.metallicRoughnessTexture));var l=t.pbrSpecularGlossiness;Object(o.a)(l)&&(l.diffuseFactor=Object(r.a)(l.diffuseFactor,[1,1,1,1]),l.specularFactor=Object(r.a)(l.specularFactor,[1,1,1]),l.glossinessFactor=Object(r.a)(l.glossinessFactor,1),mz(l.specularGlossinessTexture))})),dz.animation(e,(function(e){dz.animationSampler(e,(function(e){e.interpolation=Object(r.a)(e.interpolation,"LINEAR")}))}));var t=function(e){var t={};return dz.animation(e,(function(e){dz.animationChannel(e,(function(e){var n=e.target,i=n.node,r=n.path;"translation"!==r&&"rotation"!==r&&"scale"!==r||(t[i]=!0)}))})),t}(e);return dz.node(e,(function(e,n){Object(o.a)(t[n])||Object(o.a)(e.translation)||Object(o.a)(e.rotation)||Object(o.a)(e.scale)?(e.translation=Object(r.a)(e.translation,[0,0,0]),e.rotation=Object(r.a)(e.rotation,[0,0,0,1]),e.scale=Object(r.a)(e.scale,[1,1,1])):e.matrix=Object(r.a)(e.matrix,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])})),dz.sampler(e,(function(e){e.wrapS=Object(r.a)(e.wrapS,Ts.REPEAT),e.wrapT=Object(r.a)(e.wrapT,Ts.REPEAT)})),Object(o.a)(e.scenes)&&!Object(o.a)(e.scene)&&(e.scene=0),e};function vz(e){e.extras=Object(o.a)(e.extras)?e.extras:{},e.extras._pipeline=Object(o.a)(e.extras._pipeline)?e.extras._pipeline:{}}var _z=function(e){return dz.shader(e,(function(e){vz(e)})),dz.buffer(e,(function(e){vz(e)})),dz.image(e,(function(e){vz(e),dz.compressedImage(e,(function(e){vz(e)}))})),vz(e),e};var bz=function(e,t){var n=e.extensionsRequired;if(Object(o.a)(n)){var i=n.indexOf(t);i>=0&&n.splice(i,1),0===n.length&&delete e.extensionsRequired}};var yz=function(e,t){var n=e.extensionsUsed;if(Object(o.a)(n)){var i=n.indexOf(t);i>=0&&n.splice(i,1),bz(e,t),0===n.length&&delete e.extensionsUsed}};function wz(e,t,n){for(var i=new DataView(e.buffer),r=new Array(n),o=0;o<n;++o)r[o]=i.getUint32(e.byteOffset+t+4*o,!0);return r}var Oz=function(e){if("glTF"!==Ly(e))throw new de.a("File is not valid binary glTF");var t=wz(e,0,5),n=t[1];if(1!==n&&2!==n)throw new de.a("Binary glTF version is not 1 or 2");return 1===n?function(e,t){var n=t[2],i=t[3];if(0!==t[4])throw new de.a("Binary glTF scene format is not JSON");var a=20+i,s=Du(e,20,i),c=JSON.parse(s);_z(c);var l=e.subarray(a,n),u=c.buffers;if(Object(o.a)(u)&&Object.keys(u).length>0){var h=Object(r.a)(u.binary_glTF,u.KHR_binary_glTF);Object(o.a)(h)&&(h.extras._pipeline.source=l)}return yz(c,"KHR_binary_glTF"),c}(e,t):function(e,t){var n,i,r=t[2],a=12;for(;a<r;){var s=wz(e,a,2),c=s[0],l=s[1];a+=8;var u=e.subarray(a,a+c);if(a+=c,1313821514===l){var h=Du(u);n=JSON.parse(h),_z(n)}else 5130562===l&&(i=u)}if(Object(o.a)(n)&&Object(o.a)(i)){var d=n.buffers;if(Object(o.a)(d)&&d.length>0)d[0].extras._pipeline.source=i}return n}(e,t)};var Cz=function(e,t){var n=e.extensionsUsed;Object(o.a)(n)||(n=[],e.extensionsUsed=n),lz(n,t,!0)};var Ez=function(e){switch(e){case Ds.BYTE:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getInt8(t+o*i)};case Ds.UNSIGNED_BYTE:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getUint8(t+o*i)};case Ds.SHORT:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getInt16(t+o*i,!0)};case Ds.UNSIGNED_SHORT:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getUint16(t+o*i,!0)};case Ds.INT:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getInt32(t+o*i,!0)};case Ds.UNSIGNED_INT:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getUint32(t+o*i,!0)};case Ds.FLOAT:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getFloat32(t+o*i,!0)};case Ds.DOUBLE:return function(e,t,n,i,r){for(var o=0;o<n;++o)r[o]=e.getFloat64(t+o*i,!0)}}};var Az=function(e,t){var n=e.bufferViews,i=e.buffers,r=t.bufferView,a=fz(t.type);if(!Object(o.a)(t.bufferView))return{min:nl(new Array(a),0),max:nl(new Array(a),0)};for(var s=nl(new Array(a),Number.POSITIVE_INFINITY),c=nl(new Array(a),Number.NEGATIVE_INFINITY),l=n[r],u=i[l.buffer].extras._pipeline.source,h=t.count,d=pz(e,t),f=t.byteOffset+l.byteOffset+u.byteOffset,p=t.componentType,m=Ds.getSizeInBytes(p),g=new DataView(u.buffer),v=new Array(a),_=Ez(p),b=0;b<h;b++){_(g,f,a,m,v);for(var y=0;y<a;y++){var w=v[y];s[y]=Math.min(s[y],w),c[y]=Math.max(c[y],w)}f+=d}return{min:s,max:c}},xz=[Ts.FUNC_ADD,Ts.FUNC_ADD],Tz=[Ts.ONE,Ts.ZERO,Ts.ONE,Ts.ZERO];function Sz(e,t){var n=e.enable;return!!Object(o.a)(n)&&n.indexOf(t)>-1}var Dz=[Ts.ZERO,Ts.ONE,Ts.SRC_COLOR,Ts.ONE_MINUS_SRC_COLOR,Ts.SRC_ALPHA,Ts.ONE_MINUS_SRC_ALPHA,Ts.DST_ALPHA,Ts.ONE_MINUS_DST_ALPHA,Ts.DST_COLOR,Ts.ONE_MINUS_DST_COLOR];function Pz(e,t){if(!Object(o.a)(e))return t;for(var n=0;n<4;n++)if(-1===Dz.indexOf(e[n]))return t;return e}var Iz=function(e){var t={},n={},i=e.techniques;return Object(o.a)(i)?(dz.technique(e,(function(e,i){var a=e.states;if(Object(o.a)(a)){var s=n[i]={};if(Sz(a,Ts.BLEND)){s.alphaMode="BLEND";var c=a.functions;Object(o.a)(c)&&(Object(o.a)(c.blendEquationSeparate)||Object(o.a)(c.blendFuncSeparate))&&(t[i]={blendEquation:Object(r.a)(c.blendEquationSeparate,xz),blendFactors:Pz(c.blendFuncSeparate,Tz)})}Sz(a,Ts.CULL_FACE)||(s.doubleSided=!0),delete e.states}})),Object.keys(t).length>0&&(Object(o.a)(e.extensions)||(e.extensions={}),Cz(e,"KHR_blend")),dz.material(e,(function(e){if(Object(o.a)(e.technique)){var i=n[e.technique];dz.objectLegacy(i,(function(t,n){e[n]=t}));var r=t[e.technique];Object(o.a)(r)&&(Object(o.a)(e.extensions)||(e.extensions={}),e.extensions.KHR_blend=r)}})),e):e};var Mz=function(e,t){var n=e.extensionsRequired;Object(o.a)(n)||(n=[],e.extensionsRequired=n),lz(n,t,!0),Cz(e,t)};var Rz=function(e){var t=e.techniques,n={},i={};if(Object(o.a)(t)){var r={programs:[],shaders:[],techniques:[]},a=e.glExtensionsUsed;delete e.glExtensionsUsed,dz.technique(e,(function(t,o){var s,c={name:t.name,program:void 0,attributes:{},uniforms:{}};dz.techniqueAttribute(t,(function(e,n){s=t.parameters[e],c.attributes[n]={semantic:s.semantic}})),dz.techniqueUniform(t,(function(e,i){s=t.parameters[e],c.uniforms[i]={count:s.count,node:s.node,type:s.type,semantic:s.semantic,value:s.value},n[e]=i}));var l=e.programs[t.program],u={name:l.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:a},h=e.shaders[l.fragmentShader];u.fragmentShader=lz(r.shaders,h,!0);var d=e.shaders[l.vertexShader];u.vertexShader=lz(r.shaders,d,!0),c.program=lz(r.programs,u),i[o]=lz(r.techniques,c)})),r.techniques.length>0&&(Object(o.a)(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,Cz(e,"KHR_techniques_webgl"),Mz(e,"KHR_techniques_webgl"))}return dz.material(e,(function(e){if(Object(o.a)(e.technique)){var t={technique:i[e.technique]};dz.objectLegacy(e.values,(function(e,i){Object(o.a)(t.values)||(t.values={});var r=n[i];t.values[r]=e})),Object(o.a)(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=t}delete e.technique,delete e.values})),delete e.techniques,delete e.programs,delete e.shaders,e},Lz=["mesh","node","material","accessor","bufferView","buffer"];var jz={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",node:"nodes",material:"materials",mesh:"meshes"};function Fz(){}function Nz(){}Fz.accessor=function(e,t){e.accessors.splice(t,1),dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){dz.meshPrimitiveAttribute(e,(function(n,i){n>t&&e.attributes[i]--})),dz.meshPrimitiveTarget(e,(function(e){dz.meshPrimitiveTargetAttribute(e,(function(n,i){n>t&&e[i]--}))}));var n=e.indices;Object(o.a)(n)&&n>t&&e.indices--}))})),dz.skin(e,(function(e){Object(o.a)(e.inverseBindMatrices)&&e.inverseBindMatrices>t&&e.inverseBindMatrices--})),dz.animation(e,(function(e){dz.animationSampler(e,(function(e){Object(o.a)(e.input)&&e.input>t&&e.input--,Object(o.a)(e.output)&&e.output>t&&e.output--}))}))},Fz.buffer=function(e,t){e.buffers.splice(t,1),dz.bufferView(e,(function(e){Object(o.a)(e.buffer)&&e.buffer>t&&e.buffer--}))},Fz.bufferView=function(e,t){e.bufferViews.splice(t,1),dz.accessor(e,(function(e){Object(o.a)(e.bufferView)&&e.bufferView>t&&e.bufferView--})),dz.shader(e,(function(e){Object(o.a)(e.bufferView)&&e.bufferView>t&&e.bufferView--})),dz.image(e,(function(e){Object(o.a)(e.bufferView)&&e.bufferView>t&&e.bufferView--,dz.compressedImage(e,(function(e){var n=e.bufferView;Object(o.a)(n)&&n>t&&e.bufferView--}))})),uz(e,"KHR_draco_mesh_compression")&&dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_draco_mesh_compression)&&e.extensions.KHR_draco_mesh_compression.bufferView>t&&e.extensions.KHR_draco_mesh_compression.bufferView--}))}))},Fz.mesh=function(e,t){e.meshes.splice(t,1),dz.node(e,(function(e){Object(o.a)(e.mesh)&&(e.mesh>t?e.mesh--:e.mesh===t&&delete e.mesh)}))},Fz.node=function(e,t){e.nodes.splice(t,1),dz.skin(e,(function(e){Object(o.a)(e.skeleton)&&e.skeleton>t&&e.skeleton--,e.joints=e.joints.map((function(e){return e>t?e-1:e}))})),dz.animation(e,(function(e){dz.animationChannel(e,(function(e){Object(o.a)(e.target)&&Object(o.a)(e.target.node)&&e.target.node>t&&e.target.node--}))})),dz.technique(e,(function(e){dz.techniqueUniform(e,(function(e){Object(o.a)(e.node)&&e.node>t&&e.node--}))})),dz.node(e,(function(e){Object(o.a)(e.children)&&(e.children=e.children.filter((function(e){return e!==t})).map((function(e){return e>t?e-1:e})))})),dz.scene(e,(function(e){e.nodes=e.nodes.filter((function(e){return e!==t})).map((function(e){return e>t?e-1:e}))}))},Fz.material=function(e,t){e.materials.splice(t,1),dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){Object(o.a)(e.material)&&e.material>t&&e.material--}))}))},Nz.accessor=function(e){var t={};return dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){dz.meshPrimitiveAttribute(e,(function(e){t[e]=!0})),dz.meshPrimitiveTarget(e,(function(e){dz.meshPrimitiveTargetAttribute(e,(function(e){t[e]=!0}))}));var n=e.indices;Object(o.a)(n)&&(t[n]=!0)}))})),dz.skin(e,(function(e){Object(o.a)(e.inverseBindMatrices)&&(t[e.inverseBindMatrices]=!0)})),dz.animation(e,(function(e){dz.animationSampler(e,(function(e){Object(o.a)(e.input)&&(t[e.input]=!0),Object(o.a)(e.output)&&(t[e.output]=!0)}))})),t},Nz.buffer=function(e){var t={};return dz.bufferView(e,(function(e){Object(o.a)(e.buffer)&&(t[e.buffer]=!0)})),t},Nz.bufferView=function(e){var t={};return dz.accessor(e,(function(e){Object(o.a)(e.bufferView)&&(t[e.bufferView]=!0)})),dz.shader(e,(function(e){Object(o.a)(e.bufferView)&&(t[e.bufferView]=!0)})),dz.image(e,(function(e){Object(o.a)(e.bufferView)&&(t[e.bufferView]=!0),dz.compressedImage(e,(function(e){Object(o.a)(e.bufferView)&&(t[e.bufferView]=!0)}))})),uz(e,"KHR_draco_mesh_compression")&&dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_draco_mesh_compression)&&(t[e.extensions.KHR_draco_mesh_compression.bufferView]=!0)}))})),t},Nz.mesh=function(e){var t={};return dz.node(e,(function(n){if(Object(o.a)(n.mesh&&Object(o.a)(e.meshes))){var i=e.meshes[n.mesh];Object(o.a)(i)&&Object(o.a)(i.primitives)&&i.primitives.length>0&&(t[n.mesh]=!0)}})),t},Nz.node=function(e){var t={};return dz.node(e,(function(n,i){(function e(t,n){return!(Object(o.a)(n.mesh)||Object(o.a)(n.camera)||Object(o.a)(n.skin)||Object(o.a)(n.weights)||Object(o.a)(n.extras)||Object(o.a)(n.extensions)&&0!==n.extensions.length)&&(!Object(o.a)(n.children)||0===n.children.filter((function(n){return!e(t,t.nodes[n])})).length)})(e,n)||(t[i]=!0)})),dz.skin(e,(function(e){Object(o.a)(e.skeleton)&&(t[e.skeleton]=!0),dz.skinJoint(e,(function(e){t[e]=!0}))})),dz.animation(e,(function(e){dz.animationChannel(e,(function(e){Object(o.a)(e.target)&&Object(o.a)(e.target.node)&&(t[e.target.node]=!0)}))})),dz.technique(e,(function(e){dz.techniqueUniform(e,(function(e){Object(o.a)(e.node)&&(t[e.node]=!0)}))})),t},Nz.material=function(e){var t={};return dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){Object(o.a)(e.material)&&(t[e.material]=!0)}))})),t};var zz=function(e,t){return t=Object(r.a)(t,Lz),Lz.forEach((function(n){t.indexOf(n)>-1&&function(e,t){var n=e[jz[t]];if(Object(o.a)(n))for(var i=0,r=Nz[t](e),a=n.length,s=0;s<a;++s)r[s]||(Fz[t](e,s-i),i++)}(e,n)})),e};var kz=function(e,t){var n={byteLength:t.length,extras:{_pipeline:{source:t}}},i={buffer:lz(e.buffers,n),byteOffset:0,byteLength:t.length};return lz(e.bufferViews,i)};var Bz=function(e,t){var n=pz(e,t),i=Ds.getSizeInBytes(t.componentType),r=fz(t.type),a=t.count,s=new Array(r*a);if(!Object(o.a)(t.bufferView))return nl(s,0),s;for(var c=e.bufferViews[t.bufferView],l=e.buffers[c.buffer].extras._pipeline.source,u=t.byteOffset+c.byteOffset+l.byteOffset,h=new DataView(l.buffer),d=new Array(r),f=Ez(t.componentType),p=0;p<a;++p){f(h,u,r,i,d);for(var m=0;m<r;++m)s[p*r+m]=d[m];u+=n}return s};function Hz(e,t,n){var i=Ds.createTypedArray(n,Bz(e,t)),r=new Uint8Array(i.buffer);t.bufferView=kz(e,r),t.componentType=n,t.byteOffset=0}var Vz=function(e){var t;return dz.accessorWithSemantic(e,"JOINTS_0",(function(n){var i=e.accessors[n];(t=i.componentType)===Ts.BYTE?Hz(e,i,Ds.UNSIGNED_BYTE):t!==Ts.UNSIGNED_BYTE&&t!==Ts.UNSIGNED_SHORT&&Hz(e,i,Ds.UNSIGNED_SHORT)})),dz.accessorWithSemantic(e,"WEIGHTS_0",(function(n){var i=e.accessors[n];(t=i.componentType)===Ts.BYTE?Hz(e,i,Ds.UNSIGNED_BYTE):t===Ts.SHORT&&Hz(e,i,Ds.UNSIGNED_SHORT)})),e},Uz={.8:function(e){Object(o.a)(e.asset)||(e.asset={});var t=e.asset;if(t.version="1.0","string"===typeof t.profile){var n=t.profile.split(" ");t.profile={api:n[0],version:n[1]}}else t.profile={};Object(o.a)(e.version)&&delete e.version;Wz(e),Gz(e),qz(e),Yz(e),$z(e),Object(o.a)(e.allExtensions)&&(e.extensionsUsed=e.allExtensions,delete e.allExtensions);if(Object(o.a)(e.lights)){var i=Object(r.a)(e.extensions,{});e.extensions=i;var a=Object(r.a)(i.KHR_materials_common,{});i.KHR_materials_common=a,a.lights=e.lights,delete e.lights,Cz(e,"KHR_materials_common")}},"1.0":function(e){e.asset=Object(r.a)(e.asset,{}),e.asset.version="2.0",Wz(e),function(e){var t=e.animations;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var i=t[n],r=i.parameters;if(Object(o.a)(r)){var a=i.samplers;for(var s in a)if(Object.prototype.hasOwnProperty.call(a,s)){var c=a[s];c.input=r[c.input],c.output=r[c.output]}delete i.parameters}}}(e),function(e){dz.node(e,(function(t,n){ek(t)&&function e(t,n){dz.scene(t,(function(e){var t=e.nodes;if(Object(o.a)(t))for(var i=t.length;i>=0;--i)if(t[i]===n)return void t.splice(i,1)})),dz.node(t,(function(i,r){if(Object(o.a)(i.children)){var a=i.children.indexOf(n);a>-1&&(i.children.splice(a,1),ek(i)&&e(t,r))}})),delete t.nodes[n]}(e,n)}))}(e),function(e){var t,n,i={accessors:{},animations:{},buffers:{},bufferViews:{},cameras:{},images:{},materials:{},meshes:{},nodes:{},programs:{},samplers:{},scenes:{},shaders:{},skins:{},textures:{},techniques:{}},r={},a=e.nodes;for(var s in a)Object.prototype.hasOwnProperty.call(a,s)&&(n=a[s].jointName,Object(o.a)(n)&&(r[n]=s));for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c)&&Object(o.a)(i[c])){var l={},u=e[c];e[c]=Xz(u,l),i[c]=l}for(n in r)Object.prototype.hasOwnProperty.call(r,n)&&(r[n]=i.nodes[r[n]]);Object(o.a)(e.scene)&&(e.scene=i.scenes[e.scene]);dz.bufferView(e,(function(e){Object(o.a)(e.buffer)&&(e.buffer=i.buffers[e.buffer])})),dz.accessor(e,(function(e){Object(o.a)(e.bufferView)&&(e.bufferView=i.bufferViews[e.bufferView])})),dz.shader(e,(function(e){var t=e.extensions;if(Object(o.a)(t)){var n=t.KHR_binary_glTF;Object(o.a)(n)&&(e.bufferView=i.bufferViews[n.bufferView],delete t.KHR_binary_glTF),0===Object.keys(t).length&&delete e.extensions}})),dz.program(e,(function(e){Object(o.a)(e.vertexShader)&&(e.vertexShader=i.shaders[e.vertexShader]),Object(o.a)(e.fragmentShader)&&(e.fragmentShader=i.shaders[e.fragmentShader])})),dz.technique(e,(function(e){Object(o.a)(e.program)&&(e.program=i.programs[e.program]),dz.techniqueParameter(e,(function(e){Object(o.a)(e.node)&&(e.node=i.nodes[e.node]);var t=e.value;"string"===typeof t&&(e.value={index:i.textures[t]})}))})),dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){Object(o.a)(e.indices)&&(e.indices=i.accessors[e.indices]),dz.meshPrimitiveAttribute(e,(function(t,n){e.attributes[n]=i.accessors[t]})),Object(o.a)(e.material)&&(e.material=i.materials[e.material])}))})),dz.node(e,(function(n){var r=n.children;if(Object(o.a)(r)){var a=r.length;for(t=0;t<a;++t)r[t]=i.nodes[r[t]]}if(Object(o.a)(n.meshes)){var s=n.meshes,c=s.length;if(c>0)for(n.mesh=i.meshes[s[0]],t=1;t<c;++t){var l={mesh:i.meshes[s[t]]},u=lz(e.nodes,l);Object(o.a)(r)||(r=[],n.children=r),r.push(u)}delete n.meshes}if(Object(o.a)(n.camera)&&(n.camera=i.cameras[n.camera]),Object(o.a)(n.skin)&&(n.skin=i.skins[n.skin]),Object(o.a)(n.skeletons)){var h=n.skeletons;if(h.length>0&&Object(o.a)(n.skin))e.skins[n.skin].skeleton=i.nodes[h[0]];delete n.skeletons}Object(o.a)(n.jointName)&&delete n.jointName})),dz.skin(e,(function(e){Object(o.a)(e.inverseBindMatrices)&&(e.inverseBindMatrices=i.accessors[e.inverseBindMatrices]);var n=e.jointNames;if(Object(o.a)(n)){var a=[],s=n.length;for(t=0;t<s;++t)a[t]=r[n[t]];e.joints=a,delete e.jointNames}})),dz.scene(e,(function(e){var n=e.nodes;if(Object(o.a)(n)){var r=n.length;for(t=0;t<r;++t)n[t]=i.nodes[n[t]]}})),dz.animation(e,(function(e){var t={};e.samplers=Xz(e.samplers,t),dz.animationSampler(e,(function(e){e.input=i.accessors[e.input],e.output=i.accessors[e.output]})),dz.animationChannel(e,(function(e){e.sampler=t[e.sampler];var n=e.target;Object(o.a)(n)&&(n.node=i.nodes[n.id],delete n.id)}))})),dz.material(e,(function(e){Object(o.a)(e.technique)&&(e.technique=i.techniques[e.technique]),dz.materialValue(e,(function(t,n){"string"===typeof t&&(e.values[n]={index:i.textures[t]})}));var t=e.extensions;if(Object(o.a)(t)){var n=t.KHR_materials_common;Object(o.a)(n)&&dz.materialValue(n,(function(e,t){"string"===typeof e&&(n.values[t]={index:i.textures[e]})}))}})),dz.image(e,(function(e){var t=e.extensions;if(Object(o.a)(t)){var n=t.KHR_binary_glTF;Object(o.a)(n)&&(e.bufferView=i.bufferViews[n.bufferView],e.mimeType=n.mimeType,delete t.KHR_binary_glTF),0===Object.keys(t).length&&delete e.extensions}dz.compressedImage(e,(function(e){var n=e.extensions;if(Object(o.a)(n)){var r=n.KHR_binary_glTF;Object(o.a)(r)&&(e.bufferView=i.bufferViews[r.bufferView],e.mimeType=r.mimeType,delete n.KHR_binary_glTF),0===Object.keys(t).length&&delete e.extensions}}))})),dz.texture(e,(function(e){Object(o.a)(e.sampler)&&(e.sampler=i.samplers[e.sampler]),Object(o.a)(e.source)&&(e.source=i.images[e.source])}))}(e),function(e){dz.animation(e,(function(e){dz.animationSampler(e,(function(e){delete e.name}))}))}(e),function(e){var t=e.asset;delete t.profile,delete t.premultipliedAlpha}(e),function(e){var t=e.extensionsUsed;if(e.extensionsRequired=Object(r.a)(e.extensionsRequired,[]),Object(o.a)(t))for(var n=t.length,i=0;i<n;++i){var a=t[i];Object(o.a)(Kz[a])&&e.extensionsRequired.push(a)}}(e),function(e){dz.buffer(e,(function(e){Object(o.a)(e.byteLength)||(e.byteLength=e.extras._pipeline.source.length)})),dz.accessor(e,(function(t){var n=t.bufferView;if(Object(o.a)(n)){var i=e.bufferViews[n],a=Jz(e,t),s=t.byteOffset+t.count*a;i.byteLength=Math.max(Object(r.a)(i.byteLength,0),s)}}))}(e),function(e){var t,n,i,a=e.bufferViews,s={};dz.accessorContainingVertexAttributeData(e,(function(t){var n=e.accessors[t];Object(o.a)(n.bufferView)&&(s[n.bufferView]=!0)}));var c={};for(var l in dz.accessor(e,(function(e){Object(o.a)(e.bufferView)&&(c[e.bufferView]=Object(r.a)(c[e.bufferView],[]),c[e.bufferView].push(e))})),c)if(Object.prototype.hasOwnProperty.call(c,l)){i=a[l];var u=c[l];u.sort((function(e,t){return e.byteOffset-t.byteOffset}));var h=0,d=0,f=u.length;for(t=0;t<f;++t){var p=u[t],m=Jz(e,p),g=p.byteOffset,v=p.count*m;delete p.byteStride;var _=t<f-1,b=_?Jz(e,u[t+1]):void 0;if(m!==b){var y=Object(Lf.a)(i,!0);s[l]&&(y.byteStride=m),y.byteOffset+=h,y.byteLength=g+v-h;var w=lz(a,y);for(n=d;n<=t;++n)(p=u[n]).bufferView=w,p.byteOffset=p.byteOffset-h;h=_?u[t+1].byteOffset:void 0,d=t+1}}}zz(e,["accessor","bufferView","buffer"])}(e),function(e){dz.accessorWithSemantic(e,"POSITION",(function(t){var n=e.accessors[t];if(!Object(o.a)(n.min)||!Object(o.a)(n.max)){var i=Az(e,n);n.min=i.min,n.max=i.max}}))}(e),function(e){dz.animation(e,(function(t){dz.animationSampler(t,(function(t){var n=e.accessors[t.input];if(!Object(o.a)(n.min)||!Object(o.a)(n.max)){var i=Az(e,n);n.min=i.min,n.max=i.max}}))}))}(e),function(e){dz.buffer(e,(function(e){delete e.type}))}(e),function(e){dz.texture(e,(function(e){delete e.format,delete e.internalFormat,delete e.target,delete e.type}))}(e),function(e){dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){dz.meshPrimitiveAttribute(e,(function(t,n){"TEXCOORD"===n?e.attributes.TEXCOORD_0=t:"COLOR"===n&&(e.attributes.COLOR_0=t)})),delete e.attributes.TEXCOORD,delete e.attributes.COLOR}))})),dz.technique(e,(function(e){dz.techniqueParameter(e,(function(e){var t=e.semantic;Object(o.a)(t)&&("TEXCOORD"===t?e.semantic="TEXCOORD_0":"COLOR"===t&&(e.semantic="COLOR_0"))}))}))}(e),function(e){var t={};dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){for(var n in dz.meshPrimitiveAttribute(e,(function(e,n){if("_"!==n.charAt(0)){var i,r=n.search(/_[0-9]+/g),a=n,s="_0";r>=0&&(a=n.substring(0,r),s=n.substring(r));var c=Zz[a];Object(o.a)(c)?(i=c+s,t[n]=i):Object(o.a)(Qz[a])||(i="_"+n,t[n]=i)}})),t)if(Object.prototype.hasOwnProperty.call(t,n)){var i=t[n],r=e.attributes[n];Object(o.a)(r)&&(delete e.attributes[n],e.attributes[i]=r)}}))})),dz.technique(e,(function(e){dz.techniqueParameter(e,(function(e){var n=t[e.semantic];Object(o.a)(n)&&(e.semantic=n)}))}))}(e),Vz(e),function(e){dz.camera(e,(function(e){var t=e.perspective;if(Object(o.a)(t)){var n=t.aspectRatio;Object(o.a)(n)&&0===n&&delete t.aspectRatio;var i=t.yfov;Object(o.a)(i)&&0===i&&(t.yfov=1)}}))}(e),Iz(e),Rz(e),function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];Array.isArray(n)&&0===n.length&&delete e[t]}dz.node(e,(function(e){Object(o.a)(e.children)&&0===e.children.length&&delete e.children}))}(e)},"2.0":void 0};function Wz(e){var t=e.materials;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var i=t[n],r=i.instanceTechnique;Object(o.a)(r)&&(i.technique=r.technique,i.values=r.values,delete i.instanceTechnique)}}function Gz(e){var t=e.meshes;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var i=t[n].primitives;if(Object(o.a)(i))for(var a=i.length,s=0;s<a;++s){var c=i[s],l=Object(r.a)(c.primitive,Ts.TRIANGLES);c.mode=Object(r.a)(c.mode,l),delete c.primitive}}}function qz(e){var t=e.nodes,n=new O,i=new No;for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){var a=t[r];if(Object(o.a)(a.rotation)){var s=a.rotation;O.fromArray(s,0,n),No.fromAxisAngle(n,s[3],i),a.rotation=[i.x,i.y,i.z,i.w]}var c=a.instanceSkin;Object(o.a)(c)&&(a.skeletons=c.skeletons,a.skin=c.skin,a.meshes=c.meshes,delete a.instanceSkin)}}function Yz(e){var t=e.animations,n=e.accessors,i=e.bufferViews,r=e.buffers,a={},s=new O,c=new No;for(var l in t)if(Object.prototype.hasOwnProperty.call(t,l)){var u=t[l],h=u.channels,d=u.parameters,f=u.samplers;if(Object(o.a)(h))for(var p=h.length,m=0;m<p;++m){var g=h[m];if("rotation"===g.target.path){var v=d[f[g.sampler].output];if(Object(o.a)(a[v]))continue;a[v]=!0;for(var _=n[v],b=i[_.bufferView],y=r[b.buffer].extras._pipeline.source,w=y.byteOffset+b.byteOffset+_.byteOffset,C=_.componentType,E=_.count,A=fz(_.type),x=_.count*A,T=Ds.createArrayBufferView(C,y.buffer,w,x),S=0;S<E;S++){var D=S*A;O.unpack(T,D,s);var P=T[D+3];No.fromAxisAngle(s,P,c),No.pack(c,T,D)}}}}}function $z(e){var t=e.techniques;for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var i=t[n],a=i.passes;if(Object(o.a)(a)){var s=Object(r.a)(i.pass,"defaultPass");if(Object.prototype.hasOwnProperty.call(a,s)){var c=a[s],l=c.instanceProgram;i.attributes=Object(r.a)(i.attributes,l.attributes),i.program=Object(r.a)(i.program,l.program),i.uniforms=Object(r.a)(i.uniforms,l.uniforms),i.states=Object(r.a)(i.states,c.states)}delete i.passes,delete i.pass}}}function Xz(e,t){var n=[];for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var r=e[i];t[i]=n.length,n.push(r),Object(o.a)(r.name)||(r.name=i)}return n}var Kz={CESIUM_RTC:!0,KHR_materials_common:!0,WEB3D_quantized_attributes:!0};var Qz={POSITION:!0,NORMAL:!0,TANGENT:!0},Zz={COLOR:"COLOR",JOINT:"JOINTS",JOINTS:"JOINTS",TEXCOORD:"TEXCOORD",WEIGHT:"WEIGHTS",WEIGHTS:"WEIGHTS"};function Jz(e,t){return Object(o.a)(t.byteStride)&&0!==t.byteStride?t.byteStride:pz(e,t)}function ek(e){return(!Object(o.a)(e.children)||0===e.children.length)&&(!Object(o.a)(e.meshes)||0===e.meshes.length)&&!Object(o.a)(e.camera)&&!Object(o.a)(e.skin)&&!Object(o.a)(e.skeletons)&&!Object(o.a)(e.jointName)&&(!Object(o.a)(e.translation)||O.fromArray(e.translation).equals(O.ZERO))&&(!Object(o.a)(e.scale)||O.fromArray(e.scale).equals(new O(1,1,1)))&&(!Object(o.a)(e.rotation)||he.fromArray(e.rotation).equals(new he(0,0,0,1)))&&(!Object(o.a)(e.matrix)||Ae.fromColumnMajorArray(e.matrix).equals(Ae.IDENTITY))&&!Object(o.a)(e.extensions)&&!Object(o.a)(e.extras)}var tk=function(e,t){var n=(t=Object(r.a)(t,r.a.EMPTY_OBJECT)).targetVersion,i=e.version;e.asset=Object(r.a)(e.asset,{version:"1.0"}),e.asset.version=Object(r.a)(e.asset.version,"1.0"),i=Object(r.a)(i,e.asset.version).toString(),Object.prototype.hasOwnProperty.call(Uz,i)||(Object(o.a)(i)&&(i=i.substring(0,3)),Object.prototype.hasOwnProperty.call(Uz,i)||(i="1.0"));for(var a=Uz[i];Object(o.a)(a)&&i!==n;)a(e,t),i=e.asset.version,a=Uz[i];return e};function nk(){this.initialized=!1,this.resourcesParsed=!1,this.vertexBuffersToCreate=new em,this.indexBuffersToCreate=new em,this.buffers={},this.pendingBufferLoads=0,this.programsToCreate=new em,this.shaders={},this.pendingShaderLoads=0,this.texturesToCreate=new em,this.pendingTextureLoads=0,this.texturesToCreateFromBufferView=new em,this.pendingBufferViewToImage=0,this.createSamplers=!0,this.createSkins=!0,this.createRuntimeAnimations=!0,this.createVertexArrays=!0,this.createRenderStates=!0,this.createUniformMaps=!0,this.createRuntimeNodes=!0,this.createdBufferViews={},this.primitivesToDecode=new em,this.activeDecodingTasks=0,this.pendingDecodingCache=!1,this.skinnedNodesIds=[]}nk.prototype.getBuffer=function(e){return t=this.buffers[e.buffer],n=e.byteOffset,i=e.byteLength,t.subarray(n,n+i);var t,n,i},nk.prototype.finishedPendingBufferLoads=function(){return 0===this.pendingBufferLoads},nk.prototype.finishedBuffersCreation=function(){return 0===this.pendingBufferLoads&&0===this.vertexBuffersToCreate.length&&0===this.indexBuffersToCreate.length},nk.prototype.finishedProgramCreation=function(){return 0===this.pendingShaderLoads&&0===this.programsToCreate.length},nk.prototype.finishedTextureCreation=function(){var e=0===this.pendingTextureLoads,t=0===this.texturesToCreate.length&&0===this.texturesToCreateFromBufferView.length;return e&&t},nk.prototype.finishedEverythingButTextureCreation=function(){var e=0===this.pendingBufferLoads&&0===this.pendingShaderLoads,t=0===this.vertexBuffersToCreate.length&&0===this.indexBuffersToCreate.length&&0===this.programsToCreate.length&&0===this.pendingBufferViewToImage;return this.finishedDecoding()&&e&&t},nk.prototype.finishedDecoding=function(){return 0===this.primitivesToDecode.length&&0===this.activeDecodingTasks&&!this.pendingDecodingCache},nk.prototype.finished=function(){return this.finishedDecoding()&&this.finishedTextureCreation()&&this.finishedEverythingButTextureCreation()};var ik=nk,rk={updateForwardAxis:function(e){var t=e.gltf.extras.sourceVersion;(Object(o.a)(t)&&"2.0"!==t||"2.0"!==rk.getAssetVersion(e.gltf))&&(e._gltfForwardAxis=ON.X)},getAssetVersion:function(e){return Object(o.a)(e.asset)&&Object(o.a)(e.asset.version)?e.asset.version:"1.0"},splitIncompatibleMaterials:function(e){var t=e.accessors,n=e.materials,i={};return dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){var r,a,s=e.material,c=n[s],l=e.attributes.JOINTS_0;if(Object(o.a)(l)){var u=t[l];r=u.componentType,a=u.type}var h=Object(o.a)(l)&&"VEC4"===a,d=Object(o.a)(e.attributes.COLOR_0),f=Object(o.a)(e.targets),p=Object(o.a)(e.attributes.NORMAL),m=Object(o.a)(e.attributes.TANGENT),g=Object(o.a)(e.attributes.TEXCOORD_0),v=Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.CESIUM_primitive_outline),_=i[s];if(Object(o.a)(_)){if(_.skinning.skinned!==h||_.hasVertexColors!==d||_.hasMorphTargets!==f||_.hasNormals!==p||_.hasTangents!==m||_.hasTexCoords!==g||_.hasOutline!==v){var b=Object(Lf.a)(c,!0);s=lz(n,b),e.material=s,i[s]={skinning:{skinned:h,componentType:r},hasVertexColors:d,hasMorphTargets:f,hasNormals:p,hasTangents:m,hasTexCoords:g,hasOutline:v}}}else i[s]={skinning:{skinned:h,componentType:r},hasVertexColors:d,hasMorphTargets:f,hasNormals:p,hasTangents:m,hasTexCoords:g,hasOutline:v}}))})),i},getShaderVariable:function(e){return"SCALAR"===e?"float":e.toLowerCase()},ModelState:{NEEDS_LOAD:0,LOADING:1,LOADED:2,FAILED:3},getFailedLoadFunction:function(e,t,n){return function(i){e._state=rk.ModelState.FAILED;var r="Failed to load "+t+": "+n;Object(o.a)(i)&&(r+="\n"+i.message),e._readyPromise.reject(new de.a(r))}},parseBuffers:function(e,t){var n=e._loadResources;dz.buffer(e.gltf,(function(i,r){if(Object(o.a)(i.extras._pipeline.source))n.buffers[r]=i.extras._pipeline.source;else if(Object(o.a)(t)){var a=e._resource.getDerivedResource({url:i.uri});++n.pendingBufferLoads,a.fetchArrayBuffer().then(t(e,r)).otherwise(rk.getFailedLoadFunction(e,"buffer",a.url))}}))}},ok=new O,ak=new O;function sk(e,t){return dz.techniqueAttribute(e,(function(e,n){if(e.semantic===t)return n}))}function ck(e,t,n,i){return uz(e,"KHR_techniques_webgl")?function(e,t){if(e.semantic===n&&(!i||!Object(o.a)(e.node)))return t}:function(e,r){var a=t.parameters[e];if(a.semantic===n&&(!i||!Object(o.a)(a.node)))return r}}rk.computeBoundingSphere=function(e){for(var t=e.gltf,n=t.nodes,i=t.meshes,r=t.scenes[t.scene].nodes,a=r.length,s=[],c=new O(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),l=new O(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),u=0;u<a;++u){var h=n[r[u]];for(h._transformToRoot=rk.getTransform(h),s.push(h);s.length>0;){var d=(h=s.pop())._transformToRoot,f=h.mesh;if(Object(o.a)(f))for(var p=i[f].primitives,m=p.length,g=0;g<m;++g){var v=p[g].attributes.POSITION;if(Object(o.a)(v)){var _=rk.getAccessorMinMax(t,v);if(Object(o.a)(_.min)&&Object(o.a)(_.max)){var b=O.fromArray(_.min,0,ok),y=O.fromArray(_.max,0,ak);Ae.multiplyByPoint(d,b,b),Ae.multiplyByPoint(d,y,y),O.minimumByComponent(c,b,c),O.maximumByComponent(l,y,l)}}}var w=h.children;if(Object(o.a)(w))for(var C=w.length,E=0;E<C;++E){var A=n[w[E]];A._transformToRoot=rk.getTransform(A),Ae.multiplyTransformation(d,A._transformToRoot,A._transformToRoot),s.push(A)}delete h._transformToRoot}}var x=gt.fromCornerPoints(c,l);return e._forwardAxis===ON.Z&>.transformWithoutScale(x,ON.Z_UP_TO_X_UP,x),e._upAxis===ON.Y?gt.transformWithoutScale(x,ON.Y_UP_TO_Z_UP,x):e._upAxis===ON.X&>.transformWithoutScale(x,ON.X_UP_TO_Z_UP,x),x},rk.ensureSemanticExistence=function(e){return dz.mesh(e,(function(t){dz.meshPrimitive(t,(function(t){!function(e,t){var n=e.accessors,i=e.materials,r=e.extensions.KHR_techniques_webgl,a=r.techniques,s=r.programs,c=r.shaders,l=t.targets,u=t.attributes;for(var h in l)if(l.hasOwnProperty(h)){var d=l[h];for(var f in d)"extras"!==f&&(u[f+"_"+h]=d[f])}var p=a[i[t.material].extensions.KHR_techniques_webgl.technique],m=c[s[p.program].vertexShader];for(var g in u)if(u.hasOwnProperty(g)&&!Object(o.a)(sk(p,g))){var v=n[u[g]],_=g.toLowerCase();"_"===_.charAt(0)&&(_=_.slice(1));var b="a_"+_;p.attributes[b]={semantic:g,type:v.componentType};var y=m.extras._pipeline,w=y.source;w="attribute "+rk.getShaderVariable(v.type)+" "+b+";\n"+w,y.source=w}}(e,t)}))})),e},rk.createAttributeLocations=function(e,t){var n={},i=!1,r=1;if(dz.techniqueAttribute(e,(function(e,t){/pos/i.test(t)&&!i?(n[t]=0,i=!0):n[t]=r++})),Object(o.a)(t))for(var a in t)t.hasOwnProperty(a)&&(n[a]=r++);return n},rk.getAccessorMinMax=function(e,t){var n=e.accessors[t],i=n.extensions,r=n.min,a=n.max;if(Object(o.a)(i)){var s=i.WEB3D_quantized_attributes;Object(o.a)(s)&&(r=s.decodedMin,a=s.decodedMax)}return{min:r,max:a}},rk.getAttributeOrUniformBySemantic=function(e,t,n,i){return dz.technique(e,(function(r){if(!Object(o.a)(n)||r.program===n){var a=dz.techniqueAttribute(r,ck(e,r,t,i));return Object(o.a)(a)?a:dz.techniqueUniform(r,ck(e,r,t,i))}}))},rk.getDiffuseAttributeOrUniform=function(e,t){var n=rk.getAttributeOrUniformBySemantic(e,"COLOR_0",t);return Object(o.a)(n)||(n=rk.getAttributeOrUniformBySemantic(e,"_3DTILESDIFFUSE",t)),n};var lk=new O,uk=new No,hk=new O;function dk(e,t,n){t+="(?!\\w)",t=new RegExp(t,"g");var i=e.search(t);return e.replace(t,(function(e,t){return i===t?e:n}))}function fk(e,t){var n=e.accessors[t].extensions;if(Object(o.a)(n))return n.WEB3D_quantized_attributes}function pk(e,t,n){var i=t.material,r=e.materials[i];if(uz(e,"KHR_techniques_webgl")&&Object(o.a)(r.extensions)&&Object(o.a)(r.extensions.KHR_techniques_webgl)){var a=r.extensions.KHR_techniques_webgl.technique,s=e.extensions.KHR_techniques_webgl.techniques[a];return dz.techniqueAttribute(s,(function(e,t){if(e.semantic===n)return t}))}}function mk(e){var t={value:e,clone:function(e,t){return e},func:function(){return t.value}};return t}function gk(e){var t={value:Mt.fromArray(e),clone:Mt.clone,func:function(){return t.value}};return t}function vk(e){var t={value:O.fromArray(e),clone:O.clone,func:function(){return t.value}};return t}function _k(e){var t={value:he.fromArray(e),clone:he.clone,func:function(){return t.value}};return t}function bk(e){var t={value:El.fromColumnMajorArray(e),clone:El.clone,func:function(){return t.value}};return t}function yk(e){var t={value:oe.fromColumnMajorArray(e),clone:oe.clone,func:function(){return t.value}};return t}function wk(e){var t={value:Ae.fromColumnMajorArray(e),clone:Ae.clone,func:function(){return t.value}};return t}function Ok(e,t,n){this._value=void 0,this._textureId=e.index,this._textures=t,this._defaultTexture=n}rk.getTransform=function(e,t){return Object(o.a)(e.matrix)?Ae.fromColumnMajorArray(e.matrix,t):Ae.fromTranslationQuaternionRotationScale(O.fromArray(e.translation,0,lk),No.unpack(e.rotation,0,uk),O.fromArray(e.scale,0,hk),t)},rk.getUsedExtensions=function(e){var t=e.extensionsUsed,n={};if(Object(o.a)(t))for(var i=t.length,r=0;r<i;r++){n[t[r]]=!0}return n},rk.getRequiredExtensions=function(e){var t=e.extensionsRequired,n={};if(Object(o.a)(t))for(var i=t.length,r=0;r<i;r++){n[t[r]]=!0}return n},rk.supportedExtensions={AGI_articulations:!0,CESIUM_RTC:!0,EXT_texture_webp:!0,KHR_blend:!0,KHR_binary_glTF:!0,KHR_draco_mesh_compression:!0,KHR_materials_common:!0,KHR_techniques_webgl:!0,KHR_materials_unlit:!0,KHR_materials_pbrSpecularGlossiness:!0,KHR_texture_transform:!0,WEB3D_quantized_attributes:!0},rk.checkSupportedExtensions=function(e,t){for(var n in e)if(e.hasOwnProperty(n)){if(!rk.supportedExtensions[n])throw new de.a("Unsupported glTF Extension: "+n);if("EXT_texture_webp"===n&&!1===t)throw new de.a("Loaded model requires WebP but browser does not support it.")}},rk.checkSupportedGlExtensions=function(e,t){if(Object(o.a)(e))for(var n=e.length,i=0;i<n;i++){var r=e[i];if("OES_element_index_uint"!==r)throw new de.a("Unsupported WebGL Extension: "+r);if(!t.elementIndexUint)throw new de.a("OES_element_index_uint WebGL extension is not enabled.")}},rk.modifyShaderForDracoQuantizedAttributes=function(e,t,n,i){var r={};for(var a in i)if(i.hasOwnProperty(a)){var s=i[a],c=s.quantization;if(!Object(o.a)(c))continue;var l=pk(e,t,a);"_"===a.charAt(0)&&(a=a.substring(1));var u="gltf_u_dec_"+a.toLowerCase();if(!Object(o.a)(r[u])){var h,d="gltf_decoded_"+a,f=l.replace("a_","gltf_a_dec_"),p=s.componentsPerAttribute;n=dk(n,l,f),n=(h=c.octEncoded?"vec3":p>1?"vec"+p:"float")+" "+f+";\n"+n;var m=3===p&&"COLOR_0"===a;m&&(n=dk(n,f,"vec4("+f+", 1.0)"));var g="";if(c.octEncoded){var v=u+"_rangeConstant";n="uniform float "+v+";\n"+n,g="\nvoid main() {\n "+f+" = czm_octDecode("+l+".xy, "+v+").zxy;\n "+d+"();\n}\n"}else{var _=u+"_normConstant",b=u+"_min";n="uniform float "+_+";\nuniform "+h+" "+b+";\n"+n,g="\nvoid main() {\n "+f+" = "+b+" + "+l+(m?".xyz":"")+" * "+_+";\n "+d+"();\n}\n"}n=KM.replaceMain(n,d),n+=g}}return{shader:n}},rk.modifyShaderForQuantizedAttributes=function(e,t,n){var i={},r=t.attributes;for(var a in r)if(r.hasOwnProperty(a)){var s=pk(e,t,a),c=t.attributes[a];"_"===a.charAt(0)&&(a=a.substring(1));var l="gltf_u_dec_"+a.toLowerCase(),u=l+"_scale",h=l+"_translate";if(!Object(o.a)(i[l])&&!Object(o.a)(i[u])){var d=fk(e,c);if(Object(o.a)(d)){var f,p=d.decodeMatrix,m="gltf_decoded_"+a,g=s.replace("a_","gltf_a_dec_"),v=Math.floor(Math.sqrt(p.length));n=(f=v>2?"vec"+(v-1):"float")+" "+g+";\n"+(n=dk(n,s,g));var _="";5===v?(n="uniform vec4 "+h+";\n"+(n="uniform mat4 "+u+";\n"+n),_="\nvoid main() {\n "+g+" = "+u+" * "+s+" + "+h+";\n "+m+"();\n}\n",i[u]={mat:4},i[h]={vec:4}):(n="uniform mat"+v+" "+l+";\n"+n,_="\nvoid main() {\n "+g+" = "+f+"("+l+" * vec"+v+"("+s+",1.0));\n "+m+"();\n}\n",i[l]={mat:v}),n=KM.replaceMain(n,m),n+=_}}}return{shader:n,uniforms:i}},Object.defineProperties(Ok.prototype,{value:{get:function(){if(!Object(o.a)(this._value)){var e=this._textures[this._textureId];if(!Object(o.a)(e))return this._defaultTexture;this._value=e}return this._value},set:function(e){this._value=e}}}),Ok.prototype.clone=function(e){return e},Ok.prototype.func=void 0;var Ck={};function Ek(e){return[e[20],e[21],e[22],e[23]]}Ck[Ts.FLOAT]=mk,Ck[Ts.FLOAT_VEC2]=gk,Ck[Ts.FLOAT_VEC3]=vk,Ck[Ts.FLOAT_VEC4]=_k,Ck[Ts.INT]=mk,Ck[Ts.INT_VEC2]=gk,Ck[Ts.INT_VEC3]=vk,Ck[Ts.INT_VEC4]=_k,Ck[Ts.BOOL]=mk,Ck[Ts.BOOL_VEC2]=gk,Ck[Ts.BOOL_VEC3]=vk,Ck[Ts.BOOL_VEC4]=_k,Ck[Ts.FLOAT_MAT2]=bk,Ck[Ts.FLOAT_MAT3]=yk,Ck[Ts.FLOAT_MAT4]=wk,Ck[Ts.SAMPLER_2D]=function(e,t,n){var i=new Ok(e,t,n);return i.func=function(){return i.value},i},rk.createUniformFunction=function(e,t,n,i){return Ck[e](t,n,i)},rk.createUniformsForDracoQuantizedAttributes=function(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var i=e[n],r=i.quantization;if(!Object(o.a)(r))continue;"_"===n.charAt(0)&&(n=n.substring(1));var a="gltf_u_dec_"+n.toLowerCase();if(r.octEncoded){var s=a+"_rangeConstant",c=(1<<r.quantizationBits)-1;t[s]=mk(c).func;continue}var l=a+"_normConstant",u=r.range/(1<<r.quantizationBits);t[l]=mk(u).func;var h=a+"_min";switch(i.componentsPerAttribute){case 1:t[h]=mk(r.minValues).func;break;case 2:t[h]=gk(r.minValues).func;break;case 3:t[h]=vk(r.minValues).func;break;case 4:t[h]=_k(r.minValues).func}}return t},rk.createUniformsForQuantizedAttributes=function(e,t,n){var i,r=e.accessors,a={},s={},c=t.attributes;for(var l in c)if(c.hasOwnProperty(l)){var u=r[c[l]],h=u.extensions;if("_"===l.charAt(0)&&(l=l.substring(1)),Object(o.a)(h)){var d=h.WEB3D_quantized_attributes;if(Object(o.a)(d)){var f=d.decodeMatrix,p="gltf_u_dec_"+l.toLowerCase();switch(u.type){case CN.SCALAR:s[p]=bk(f).func,a[p]=!0;break;case CN.VEC2:s[p]=yk(f).func,a[p]=!0;break;case CN.VEC3:s[p]=wk(f).func,a[p]=!0;break;case CN.VEC4:var m=p+"_scale",g=p+"_translate";s[m]=wk((i=f,[i[0],i[1],i[2],i[3],i[5],i[6],i[7],i[8],i[10],i[11],i[12],i[13],i[15],i[16],i[17],i[18]])).func,s[g]=_k(Ek(f)).func,a[m]=!0,a[g]=!0}}}}for(var v in n)if(n.hasOwnProperty(v)&&!a[v]){var _=n[v];Object(o.a)(_.mat)&&(2===_.mat?s[v]=bk(El.IDENTITY).func:3===_.mat?s[v]=yk(oe.IDENTITY).func:4===_.mat&&(s[v]=wk(Ae.IDENTITY).func)),Object(o.a)(_.vec)&&4===_.vec&&(s[v]=_k([0,0,0,0]).func)}return s};var Ak=new O,xk={MODEL:function(e,t){return function(){return e.model}},VIEW:function(e,t){return function(){return e.view}},PROJECTION:function(e,t){return function(){return e.projection}},MODELVIEW:function(e,t){return function(){return e.modelView}},CESIUM_RTC_MODELVIEW:function(e,t){var n=new Ae;return function(){return Object(o.a)(t._rtcCenter)?(Ae.getTranslation(e.model,Ak),O.add(Ak,t._rtcCenter,Ak),Ae.multiplyByPoint(e.view,Ak,Ak),Ae.setTranslation(e.modelView,Ak,n)):e.modelView}},MODELVIEWPROJECTION:function(e,t){return function(){return e.modelViewProjection}},MODELINVERSE:function(e,t){return function(){return e.inverseModel}},VIEWINVERSE:function(e,t){return function(){return e.inverseView}},PROJECTIONINVERSE:function(e,t){return function(){return e.inverseProjection}},MODELVIEWINVERSE:function(e,t){return function(){return e.inverseModelView}},MODELVIEWPROJECTIONINVERSE:function(e,t){return function(){return e.inverseModelViewProjection}},MODELINVERSETRANSPOSE:function(e,t){return function(){return e.inverseTransposeModel}},MODELVIEWINVERSETRANSPOSE:function(e,t){return function(){return e.normal}},VIEWPORT:function(e,t){return function(){return e.viewportCartesian4}}};rk.getGltfSemanticUniforms=function(){return xk};var Tk=rk;function Sk(e,t){var n;switch(n=Object(o.a)(t.value)?t.value:Object(o.a)(t.index)?[t.index]:t,e){case"ambient":case"diffuse":case"emission":case"specular":return 1===n.length?Ts.SAMPLER_2D:Ts.FLOAT_VEC4;case"shininess":case"transparency":return Ts.FLOAT;case"transparent":case"doubleSided":return Ts.BOOL}}var Dk=function(e,t){if(t=Object(r.a)(t,r.a.EMPTY_OBJECT),Object(o.a)(e)&&uz(e,"KHR_materials_common")){uz(e,"KHR_techniques_webgl")||(Object(o.a)(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl={programs:[],shaders:[],techniques:[]},e.extensionsUsed.push("KHR_techniques_webgl"),e.extensionsRequired.push("KHR_techniques_webgl"));var n=e.extensions.KHR_techniques_webgl;!function(e){var t=e.extensions.KHR_materials_common;if(!Object(o.a)(t)||!Object(o.a)(t.lights))return;for(var n=t.lights,i=n.length,a=0;a<i;a++){var s=n[a];if("ambient"===s.type){Object(o.a)(s.ambient)||(s.ambient={});var c=s.ambient;Object(o.a)(c.color)||(c.color=[1,1,1])}else if("directional"===s.type){Object(o.a)(s.directional)||(s.directional={});var l=s.directional;Object(o.a)(l.color)||(l.color=[1,1,1])}else if("point"===s.type){Object(o.a)(s.point)||(s.point={});var u=s.point;Object(o.a)(u.color)||(u.color=[1,1,1]),u.constantAttenuation=Object(r.a)(u.constantAttenuation,1),u.linearAttenuation=Object(r.a)(u.linearAttenuation,0),u.quadraticAttenuation=Object(r.a)(u.quadraticAttenuation,0)}else if("spot"===s.type){Object(o.a)(s.spot)||(s.spot={});var h=s.spot;Object(o.a)(h.color)||(h.color=[1,1,1]),h.constantAttenuation=Object(r.a)(h.constantAttenuation,1),h.fallOffAngle=Object(r.a)(h.fallOffAngle,3.14159265),h.fallOffExponent=Object(r.a)(h.fallOffExponent,0),h.linearAttenuation=Object(r.a)(h.linearAttenuation,0),h.quadraticAttenuation=Object(r.a)(h.quadraticAttenuation,0)}}}(e);var i=function(e){var t,n={};Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_materials_common)&&(t=e.extensions.KHR_materials_common.lights);if(Object(o.a)(t)){var i=e.nodes;for(var r in i)if(i.hasOwnProperty(r)){var a=i[r];if(Object(o.a)(a.extensions)&&Object(o.a)(a.extensions.KHR_materials_common)){var s=a.extensions.KHR_materials_common.light;Object(o.a)(s)&&Object(o.a)(t[s])&&(t[s].node=r),delete a.extensions.KHR_materials_common}}var c=0;for(var l in t)if(t.hasOwnProperty(l)){var u=t[l],h=u.type;if("ambient"!==h&&!Object(o.a)(u.node)){delete t[l];continue}var d="light"+c.toString();switch(u.baseName=d,h){case"ambient":var f=u.ambient;n[d+"Color"]={type:Ts.FLOAT_VEC3,value:f.color};break;case"directional":var p=u.directional;n[d+"Color"]={type:Ts.FLOAT_VEC3,value:p.color},Object(o.a)(u.node)&&(n[d+"Transform"]={node:u.node,semantic:"MODELVIEW",type:Ts.FLOAT_MAT4});break;case"point":var m=u.point;n[d+"Color"]={type:Ts.FLOAT_VEC3,value:m.color},Object(o.a)(u.node)&&(n[d+"Transform"]={node:u.node,semantic:"MODELVIEW",type:Ts.FLOAT_MAT4}),n[d+"Attenuation"]={type:Ts.FLOAT_VEC3,value:[m.constantAttenuation,m.linearAttenuation,m.quadraticAttenuation]};break;case"spot":var g=u.spot;n[d+"Color"]={type:Ts.FLOAT_VEC3,value:g.color},Object(o.a)(u.node)&&(n[d+"Transform"]={node:u.node,semantic:"MODELVIEW",type:Ts.FLOAT_MAT4},n[d+"InverseTransform"]={node:u.node,semantic:"MODELVIEWINVERSE",type:Ts.FLOAT_MAT4,useInFragment:!0}),n[d+"Attenuation"]={type:Ts.FLOAT_VEC3,value:[g.constantAttenuation,g.linearAttenuation,g.quadraticAttenuation]},n[d+"FallOff"]={type:Ts.FLOAT_VEC2,value:[g.fallOffAngle,g.fallOffExponent]}}++c}}return n}(e),a=Tk.splitIncompatibleMaterials(e),s={},c=!1;return dz.material(e,(function(l,u){if(Object(o.a)(l.extensions)&&Object(o.a)(l.extensions.KHR_materials_common)){var h=l.extensions.KHR_materials_common,d=a[u],f=function(e,t){var n="";n+="technique:"+e.technique+";";for(var i=e.values,a=Object.keys(i).sort(),s=a.length,c=0;c<s;++c){var l=a[c];i.hasOwnProperty(l)&&(n+=l+":"+Sk(l,i[l]),n+=";")}var u=Object(r.a)(e.jointCount,0);if(n+=u.toString()+";",Object(o.a)(t)){var h=t.skinning;u>0&&(n+=h.type+";"),n+=t.hasVertexColors}return n}(h,d),p=s[f];Object(o.a)(p)||(p=function(e,t,n,i,a,s){Object(o.a)(i)||(i={});s=Object(r.a)(s,!1);var c,l=t.techniques,u=t.shaders,h=t.programs,d=i.technique.toUpperCase();Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_materials_common)&&(c=e.extensions.KHR_materials_common.lights);var f,p=i.values,m=Object(r.a)(i.jointCount,0),g=!1,v=!1;Object(o.a)(n)&&(f=n.skinning,g=f.skinned,v=n.hasVertexColors);var _,b="precision highp float;\n",y="precision highp float;\n",w="CONSTANT"!==d,O={u_modelViewMatrix:{semantic:uz(e,"CESIUM_RTC")?"CESIUM_RTC_MODELVIEW":"MODELVIEW",type:Ts.FLOAT_MAT4},u_projectionMatrix:{semantic:"PROJECTION",type:Ts.FLOAT_MAT4}};w&&(O.u_normalMatrix={semantic:"MODELVIEWINVERSETRANSPOSE",type:Ts.FLOAT_MAT3});g&&(O.u_jointMatrix={count:m,semantic:"JOINTMATRIX",type:Ts.FLOAT_MAT4});var C=!1;for(var E in p)if(p.hasOwnProperty(E)&&"transparent"!==E&&"doubleSided"!==E){var A=Sk(E,p[E]);_="u_"+E.toLowerCase(),C||A!==Ts.SAMPLER_2D||(C=!0),O[_]={type:A}}Object(o.a)(O.u_diffuse)&&(O.u_diffuse.semantic="_3DTILESDIFFUSE");if(Object(o.a)(a))for(var x in a)a.hasOwnProperty(x)&&(O[_="u_"+x]=a[x]);for(_ in O)if(O.hasOwnProperty(_)){var T=O[_],S=Object(o.a)(T.count)?"["+T.count+"]":"";T.type!==Ts.FLOAT_MAT3&&T.type!==Ts.FLOAT_MAT4||T.useInFragment?(y+="uniform "+$D(T.type)+" "+_+S+";\n",delete T.useInFragment):b+="uniform "+$D(T.type)+" "+_+S+";\n"}var D="";g&&(D+=" mat4 skinMatrix =\n a_weight.x * u_jointMatrix[int(a_joint.x)] +\n a_weight.y * u_jointMatrix[int(a_joint.y)] +\n a_weight.z * u_jointMatrix[int(a_joint.z)] +\n a_weight.w * u_jointMatrix[int(a_joint.w)];\n");var P,I={a_position:{semantic:"POSITION"}};b+="attribute vec3 a_position;\n",b+="varying vec3 v_positionEC;\n",D+=g?" vec4 pos = u_modelViewMatrix * skinMatrix * vec4(a_position,1.0);\n":" vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);\n";D+=" v_positionEC = pos.xyz;\n",D+=" gl_Position = u_projectionMatrix * pos;\n",y+="varying vec3 v_positionEC;\n",w&&(I.a_normal={semantic:"NORMAL"},b+="attribute vec3 a_normal;\n",b+="varying vec3 v_normal;\n",D+=g?" v_normal = u_normalMatrix * mat3(skinMatrix) * a_normal;\n":" v_normal = u_normalMatrix * a_normal;\n",y+="varying vec3 v_normal;\n");C&&(I.a_texcoord_0={semantic:"TEXCOORD_0"},b+="attribute vec2 a_texcoord_0;\n",b+="varying vec2 "+(P="v_texcoord_0")+";\n",D+=" "+P+" = a_texcoord_0;\n",y+="varying vec2 "+P+";\n");g&&(I.a_joint={semantic:"JOINTS_0"},I.a_weight={semantic:"WEIGHTS_0"},b+="attribute vec4 a_joint;\n",b+="attribute vec4 a_weight;\n");v&&(I.a_vertexColor={semantic:"COLOR_0"},b+="attribute vec4 a_vertexColor;\n",b+="varying vec4 v_vertexColor;\n",D+=" v_vertexColor = a_vertexColor;\n",y+="varying vec4 v_vertexColor;\n");s&&(I.a_batchId={semantic:"_BATCHID"},b+="attribute float a_batchId;\n");var M=w&&("BLINN"===d||"PHONG"===d)&&Object(o.a)(O.u_specular)&&Object(o.a)(O.u_shininess)&&O.u_shininess>0,R=!1,L=!1,j="";for(var F in c)if(c.hasOwnProperty(F)){var N=c[F],z=N.type.toLowerCase(),k=N.baseName;j+=" {\n";var B,H,V="u_"+k+"Color";"ambient"===z?(L=!0,j+=" ambientLight += "+V+";\n"):w&&(R=!0,B="v_"+k+"Direction",H="v_"+k+"Position","point"!==z&&(b+="varying vec3 "+B+";\n",y+="varying vec3 "+B+";\n",D+=" "+B+" = mat3(u_"+k+"Transform) * vec3(0.,0.,1.);\n","directional"===z&&(j+=" vec3 l = normalize("+B+");\n")),"directional"!==z?(b+="varying vec3 "+H+";\n",y+="varying vec3 "+H+";\n",D+=" "+H+" = u_"+k+"Transform[3].xyz;\n",j+=" vec3 VP = "+H+" - v_positionEC;\n",j+=" vec3 l = normalize(VP);\n",j+=" float range = length(VP);\n",j+=" float attenuation = 1.0 / (u_"+k+"Attenuation.x + ",j+="(u_"+k+"Attenuation.y * range) + ",j+="(u_"+k+"Attenuation.z * range * range));\n"):j+=" float attenuation = 1.0;\n","spot"===z&&(j+=" float spotDot = dot(l, normalize("+B+"));\n",j+=" if (spotDot < cos(u_"+k+"FallOff.x * 0.5))\n",j+=" {\n",j+=" attenuation = 0.0;\n",j+=" }\n",j+=" else\n",j+=" {\n",j+=" attenuation *= max(0.0, pow(spotDot, u_"+k+"FallOff.y));\n",j+=" }\n"),j+=" diffuseLight += "+V+"* max(dot(normal,l), 0.) * attenuation;\n",M&&("BLINN"===d?(j+=" vec3 h = normalize(l + viewDir);\n",j+=" float specularIntensity = max(0., pow(max(dot(normal, h), 0.), u_shininess)) * attenuation;\n"):(j+=" vec3 reflectDir = reflect(-l, normal);\n",j+=" float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess)) * attenuation;\n"),j+=" specularLight += "+V+" * specularIntensity;\n")),j+=" }\n"}L||(j+=" ambientLight += vec3(0.2, 0.2, 0.2);\n");if(!R&&"CONSTANT"!==d){y+="#ifdef USE_CUSTOM_LIGHT_COLOR \n",y+="uniform vec3 gltf_lightColor; \n",y+="#endif \n",j+="#ifndef USE_CUSTOM_LIGHT_COLOR \n",j+=" vec3 lightColor = czm_lightColor;\n",j+="#else \n",j+=" vec3 lightColor = gltf_lightColor;\n",j+="#endif \n",j+=" vec3 l = normalize(czm_lightDirectionEC);\n";j+=" diffuseLight += lightColor * max(dot(normal,l), 0.2);\n",M&&("BLINN"===d?(j+=" vec3 h = normalize(l + viewDir);\n",j+=" float specularIntensity = max(0., pow(max(dot(normal, h), 0.), u_shininess));\n"):(j+=" vec3 reflectDir = reflect(-l, normal);\n",j+=" float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess));\n"),j+=" specularLight += lightColor * specularIntensity;\n")}b+="void main(void) {\n",b+=D,b+="}\n",y+="void main(void) {\n";var U,W=" vec3 color = vec3(0.0, 0.0, 0.0);\n";w&&(y+=" vec3 normal = normalize(v_normal);\n",i.doubleSided&&(y+=" if (czm_backFacing())\n",y+=" {\n",y+=" normal = -normal;\n",y+=" }\n"));"CONSTANT"!==d?(Object(o.a)(O.u_diffuse)&&(O.u_diffuse.type===Ts.SAMPLER_2D?y+=" vec4 diffuse = texture2D(u_diffuse, "+P+");\n":y+=" vec4 diffuse = u_diffuse;\n",y+=" vec3 diffuseLight = vec3(0.0, 0.0, 0.0);\n",W+=" color += diffuse.rgb * diffuseLight;\n"),M&&(O.u_specular.type===Ts.SAMPLER_2D?y+=" vec3 specular = texture2D(u_specular, "+P+").rgb;\n":y+=" vec3 specular = u_specular.rgb;\n",y+=" vec3 specularLight = vec3(0.0, 0.0, 0.0);\n",W+=" color += specular * specularLight;\n"),U=Object(o.a)(O.u_transparency)?" gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);\n":" gl_FragColor = vec4(color * diffuse.a, diffuse.a);\n"):U=Object(o.a)(O.u_transparency)?" gl_FragColor = vec4(color * u_transparency, u_transparency);\n":" gl_FragColor = vec4(color, 1.0);\n";v&&(W+=" color *= v_vertexColor.rgb;\n");Object(o.a)(O.u_emission)&&(O.u_emission.type===Ts.SAMPLER_2D?y+=" vec3 emission = texture2D(u_emission, "+P+").rgb;\n":y+=" vec3 emission = u_emission.rgb;\n",W+=" color += emission;\n");(Object(o.a)(O.u_ambient)||"CONSTANT"!==d)&&(Object(o.a)(O.u_ambient)?O.u_ambient.type===Ts.SAMPLER_2D?y+=" vec3 ambient = texture2D(u_ambient, "+P+").rgb;\n":y+=" vec3 ambient = u_ambient.rgb;\n":y+=" vec3 ambient = diffuse.rgb;\n",W+=" color += ambient * ambientLight;\n");y+=" vec3 viewDir = -normalize(v_positionEC);\n",y+=" vec3 ambientLight = vec3(0.0, 0.0, 0.0);\n",y+=j,y+=W,y+=U,y+="}\n";var G=lz(u,{type:Ts.VERTEX_SHADER,extras:{_pipeline:{source:b,extension:".glsl"}}}),q=lz(u,{type:Ts.FRAGMENT_SHADER,extras:{_pipeline:{source:y,extension:".glsl"}}}),Y=lz(h,{fragmentShader:q,vertexShader:G});return lz(l,{attributes:I,program:Y,uniforms:O})}(e,n,d,h,i,t.addBatchIdToGeneratedShaders),s[f]=p,c=!0);var m={},g=h.values;for(var v in g)g.hasOwnProperty(v)&&"transparent"!==v&&"doubleSided"!==v&&(m["u_"+v.toLowerCase()]=g[v]);l.extensions.KHR_techniques_webgl={technique:p,values:m},l.alphaMode="OPAQUE",h.transparent&&(l.alphaMode="BLEND"),h.doubleSided&&(l.doubleSided=!0)}})),c?(Tk.ensureSemanticExistence(e),e):e}};function Pk(e,t,n,i,r){var a;return Object(o.a)(n[t+"Offset"])?(a=t+"Coord",r.fragmentShaderMain+=" vec2 "+a+" = computeTexCoord("+i+", "+t+"Offset, "+t+"Rotation, "+t+"Scale);\n"):a=i,a}var Ik=[0,0],Mk=[0],Rk=[1,1];function Lk(e,t,n){if(-1!==e.indexOf("Texture")&&Object(o.a)(t.extensions)&&Object(o.a)(t.extensions.KHR_texture_transform)){var i="u_"+e,a=t.extensions.KHR_texture_transform;n[i+"Offset"]=Object(r.a)(a.offset,Ik),n[i+"Rotation"]=Object(r.a)(a.rotation,Mk),n[i+"Scale"]=Object(r.a)(a.scale,Rk),Object(o.a)(t.texCoord)&&Object(o.a)(a.texCoord)&&(n[i].texCoord=a.texCoord)}}function jk(e){if(-1!==e.indexOf("Offset"))return Ts.FLOAT_VEC2;if(-1!==e.indexOf("Rotation"))return Ts.FLOAT;if(-1!==e.indexOf("Scale"))return Ts.FLOAT_VEC2;if(-1!==e.indexOf("Texture"))return Ts.SAMPLER_2D;switch(e){case"u_baseColorFactor":return Ts.FLOAT_VEC4;case"u_metallicFactor":case"u_roughnessFactor":return Ts.FLOAT;case"u_emissiveFactor":return Ts.FLOAT_VEC3;case"u_diffuseFactor":return Ts.FLOAT_VEC4;case"u_specularFactor":return Ts.FLOAT_VEC3;case"u_glossinessFactor":return Ts.FLOAT}}var Fk=function(e,t){if(t=Object(r.a)(t,r.a.EMPTY_OBJECT),uz(e,"KHR_techniques_webgl"))return e;if(!Object(o.a)(e.materials)||0===e.materials.length)return e;Object(o.a)(e.extensions)||(e.extensions={}),Object(o.a)(e.extensionsUsed)||(e.extensionsUsed=[]),Object(o.a)(e.extensionsRequired)||(e.extensionsRequired=[]),e.extensions.KHR_techniques_webgl={programs:[],shaders:[],techniques:[]},e.extensionsUsed.push("KHR_techniques_webgl"),e.extensionsRequired.push("KHR_techniques_webgl");var n=Tk.splitIncompatibleMaterials(e);return dz.material(e,(function(i,a){var s={},c=function(e,t,n,i,a,s){var c,l,u,h=Object(r.a)(s.addBatchIdToGeneratedShaders,!1),d=e.extensions.KHR_techniques_webgl,f=d.techniques,p=d.shaders,m=d.programs,g=function(e){return Object(o.a)(e.extensions)&&Object(o.a)(e.extensions.KHR_materials_pbrSpecularGlossiness)}(t),v=t.pbrMetallicRoughness;if(Object(o.a)(v)&&!g)for(l in v)v.hasOwnProperty(l)&&(u=v[l],i[c="u_"+l]=u,Lk(l,u,i));if(g){var _=t.extensions.KHR_materials_pbrSpecularGlossiness;for(l in _)_.hasOwnProperty(l)&&(u=_[l],i[c="u_"+l]=u,Lk(l,u,i))}for(var b in t)t.hasOwnProperty(b)&&(b.indexOf("Texture")>=0||b.indexOf("Factor")>=0)&&(u=t[b],i[c="u_"+b]=u,Lk(b,u,i));var y,w="precision highp float;\n",O="precision highp float;\n";Object(o.a)(e.skins)&&(y=e.skins[0]);var C,E,A=Object(o.a)(y)?y.joints:[],x=A.length,T=a[n],S=!1,D=!1,P=!1,I=!1,M=!1,R=!1,L=!1,j=!1;Object(o.a)(T)&&(C=T.skinning,S=C.skinned&&A.length>0,D=T.hasVertexColors,P=T.hasMorphTargets,I=T.hasNormals,M=T.hasTangents,R=T.hasTexCoords,L=T.hasOutline);P&&dz.mesh(e,(function(e){dz.meshPrimitive(e,(function(e){if(e.material===n){var t=e.targets;Object(o.a)(t)&&(E=t)}}))}));var F={u_modelViewMatrix:{semantic:uz(e,"CESIUM_RTC")?"CESIUM_RTC_MODELVIEW":"MODELVIEW",type:Ts.FLOAT_MAT4},u_projectionMatrix:{semantic:"PROJECTION",type:Ts.FLOAT_MAT4}};Object(o.a)(t.extensions)&&Object(o.a)(t.extensions.KHR_materials_unlit)&&(j=!0,I=!1,M=!1);I&&(F.u_normalMatrix={semantic:"MODELVIEWINVERSETRANSPOSE",type:Ts.FLOAT_MAT3});S&&(F.u_jointMatrix={count:x,semantic:"JOINTMATRIX",type:Ts.FLOAT_MAT4});P&&(F.u_morphWeights={count:E.length,semantic:"MORPHWEIGHTS",type:Ts.FLOAT});var N=t.alphaMode;Object(o.a)(N)&&"MASK"===N&&(F.u_alphaCutoff={semantic:"ALPHACUTOFF",type:Ts.FLOAT});for(c in i)i.hasOwnProperty(c)&&(F[c]={type:jk(c)});var z=Object(r.a)(F.u_baseColorTexture,F.u_baseColorFactor);Object(o.a)(z)&&(z.semantic="_3DTILESDIFFUSE");for(c in F)if(F.hasOwnProperty(c)){var k=F[c],B=Object(o.a)(k.count)?"["+k.count+"]":"";k.type!==Ts.FLOAT_MAT3&&k.type!==Ts.FLOAT_MAT4&&"u_morphWeights"!==c||k.useInFragment?(O+="uniform "+$D(k.type)+" "+c+B+";\n",delete k.useInFragment):w+="uniform "+$D(k.type)+" "+c+B+";\n"}L&&(O+="uniform sampler2D u_outlineTexture;\n");var H="";S&&(H+=" mat4 skinMatrix =\n a_weight.x * u_jointMatrix[int(a_joint.x)] +\n a_weight.y * u_jointMatrix[int(a_joint.y)] +\n a_weight.z * u_jointMatrix[int(a_joint.z)] +\n a_weight.w * u_jointMatrix[int(a_joint.w)];\n");var V={a_position:{semantic:"POSITION"}};L&&(V.a_outlineCoordinates={semantic:"_OUTLINE_COORDINATES"});w+="attribute vec3 a_position;\n",I&&(w+="varying vec3 v_positionEC;\n");L&&(w+="attribute vec3 a_outlineCoordinates;\n",w+="varying vec3 v_outlineCoordinates;\n");H+=" vec3 weightedPosition = a_position;\n",I&&(H+=" vec3 weightedNormal = a_normal;\n");M&&(H+=" vec4 weightedTangent = a_tangent;\n");if(P)for(var U=0;U<E.length;U++){var W=E[U];for(var G in W)if(W.hasOwnProperty(G)&&"extras"!==G){var q="a_"+G+"_"+U;V[q]={semantic:G+"_"+U},w+="attribute vec3 "+q+";\n","POSITION"===G?H+=" weightedPosition += u_morphWeights["+U+"] * "+q+";\n":"NORMAL"===G?H+=" weightedNormal += u_morphWeights["+U+"] * "+q+";\n":M&&"TANGENT"===G&&(H+=" weightedTangent.xyz += u_morphWeights["+U+"] * "+q+";\n")}}H+=S?" vec4 position = skinMatrix * vec4(weightedPosition, 1.0);\n":" vec4 position = vec4(weightedPosition, 1.0);\n";H+=" position = u_modelViewMatrix * position;\n",I&&(H+=" v_positionEC = position.xyz;\n");H+=" gl_Position = u_projectionMatrix * position;\n",L&&(H+=" v_outlineCoordinates = a_outlineCoordinates;\n");I&&(V.a_normal={semantic:"NORMAL"},w+="attribute vec3 a_normal;\n",w+="varying vec3 v_normal;\n",H+=S?" v_normal = u_normalMatrix * mat3(skinMatrix) * weightedNormal;\n":" v_normal = u_normalMatrix * weightedNormal;\n",O+="varying vec3 v_normal;\n",O+="varying vec3 v_positionEC;\n");M&&(V.a_tangent={semantic:"TANGENT"},w+="attribute vec4 a_tangent;\n",w+="varying vec4 v_tangent;\n",H+=" v_tangent.xyz = u_normalMatrix * weightedTangent.xyz;\n",H+=" v_tangent.w = weightedTangent.w;\n",O+="varying vec4 v_tangent;\n");L&&(O+="varying vec3 v_outlineCoordinates;\n");var Y,$,X,K,Q,Z,J,ee,te="";if(R){V.a_texcoord_0={semantic:"TEXCOORD_0"},w+="attribute vec2 a_texcoord_0;\n",w+="varying vec2 "+(Y="v_texcoord_0")+";\n",H+=" "+Y+" = a_texcoord_0;\n",O+="varying vec2 "+Y+";\n";var ne={fragmentShaderMain:te};$=Pk(e,"u_normalTexture",i,Y,ne),X=Pk(e,"u_baseColorTexture",i,Y,ne),K=Pk(e,"u_specularGlossinessTexture",i,Y,ne),Q=Pk(e,"u_diffuseTexture",i,Y,ne),Z=Pk(e,"u_metallicRoughnessTexture",i,Y,ne),J=Pk(e,"u_occlusionTexture",i,Y,ne),ee=Pk(e,"u_emmissiveTexture",i,Y,ne),te=ne.fragmentShaderMain}S&&(V.a_joint={semantic:"JOINTS_0"},V.a_weight={semantic:"WEIGHTS_0"},w+="attribute vec4 a_joint;\n",w+="attribute vec4 a_weight;\n");D&&(V.a_vertexColor={semantic:"COLOR_0"},w+="attribute vec4 a_vertexColor;\n",w+="varying vec4 v_vertexColor;\n",H+=" v_vertexColor = a_vertexColor;\n",O+="varying vec4 v_vertexColor;\n");h&&(V.a_batchId={semantic:"_BATCHID"},w+="attribute float a_batchId;\n");w+="void main(void) \n{\n",w+=H,w+="}\n",I&&(O+="const float M_PI = 3.141592653589793;\n",O+="vec3 lambertianDiffuse(vec3 diffuseColor) \n{\n return diffuseColor / M_PI;\n}\n\n",O+="vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH) \n{\n return f0 + (f90 - f0) * pow(clamp(1.0 - VdotH, 0.0, 1.0), 5.0);\n}\n\n",O+="vec3 fresnelSchlick(float metalness, float VdotH) \n{\n return metalness + (vec3(1.0) - metalness) * pow(1.0 - VdotH, 5.0);\n}\n\n",O+="float smithVisibilityG1(float NdotV, float roughness) \n{\n float k = (roughness + 1.0) * (roughness + 1.0) / 8.0;\n return NdotV / (NdotV * (1.0 - k) + k);\n}\n\n",O+="float smithVisibilityGGX(float roughness, float NdotL, float NdotV) \n{\n return smithVisibilityG1(NdotL, roughness) * smithVisibilityG1(NdotV, roughness);\n}\n\n",O+="float GGX(float roughness, float NdotH) \n{\n float roughnessSquared = roughness * roughness;\n float f = (NdotH * roughnessSquared - NdotH) * NdotH + 1.0;\n return roughnessSquared / (M_PI * f * f);\n}\n\n");O+="vec3 SRGBtoLINEAR3(vec3 srgbIn) \n{\n return pow(srgbIn, vec3(2.2));\n}\n\n",O+="vec4 SRGBtoLINEAR4(vec4 srgbIn) \n{\n vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));\n return vec4(linearOut, srgbIn.a);\n}\n\n",O+="vec3 applyTonemapping(vec3 linearIn) \n{\n#ifndef HDR \n return czm_acesTonemapping(linearIn);\n#else \n return linearIn;\n#endif \n}\n\n",O+="vec3 LINEARtoSRGB(vec3 linearIn) \n{\n#ifndef HDR \n return pow(linearIn, vec3(1.0/2.2));\n#else \n return linearIn;\n#endif \n}\n\n",O+="vec2 computeTexCoord(vec2 texCoords, vec2 offset, float rotation, vec2 scale) \n{\n rotation = -rotation; \n mat3 transform = mat3(\n cos(rotation) * scale.x, sin(rotation) * scale.x, 0.0, \n -sin(rotation) * scale.y, cos(rotation) * scale.y, 0.0, \n offset.x, offset.y, 1.0); \n vec2 transformedTexCoords = (transform * vec3(fract(texCoords), 1.0)).xy; \n return transformedTexCoords; \n}\n\n",O+="#ifdef USE_IBL_LIGHTING \n",O+="uniform vec2 gltf_iblFactor; \n",O+="#endif \n",O+="#ifdef USE_CUSTOM_LIGHT_COLOR \n",O+="uniform vec3 gltf_lightColor; \n",O+="#endif \n",O+="void main(void) \n{\n",O+=te,I&&(O+=" vec3 ng = normalize(v_normal);\n",O+=" vec3 positionWC = vec3(czm_inverseView * vec4(v_positionEC, 1.0));\n",Object(o.a)(i.u_normalTexture)?M?(O+=" vec3 t = normalize(v_tangent.xyz);\n",O+=" vec3 b = normalize(cross(ng, t) * v_tangent.w);\n",O+=" mat3 tbn = mat3(t, b, ng);\n",O+=" vec3 n = texture2D(u_normalTexture, "+$+").rgb;\n",O+=" n = normalize(tbn * (2.0 * n - 1.0));\n"):(O="#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n"+O,O+="#ifdef GL_OES_standard_derivatives\n",O+=" vec3 pos_dx = dFdx(v_positionEC);\n",O+=" vec3 pos_dy = dFdy(v_positionEC);\n",O+=" vec3 tex_dx = dFdx(vec3("+$+",0.0));\n",O+=" vec3 tex_dy = dFdy(vec3("+$+",0.0));\n",O+=" vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n",O+=" t = normalize(t - ng * dot(ng, t));\n",O+=" vec3 b = normalize(cross(ng, t));\n",O+=" mat3 tbn = mat3(t, b, ng);\n",O+=" vec3 n = texture2D(u_normalTexture, "+$+").rgb;\n",O+=" n = normalize(tbn * (2.0 * n - 1.0));\n",O+="#else\n",O+=" vec3 n = ng;\n",O+="#endif\n"):O+=" vec3 n = ng;\n",t.doubleSided&&(O+=" if (czm_backFacing())\n",O+=" {\n",O+=" n = -n;\n",O+=" }\n"));Object(o.a)(i.u_baseColorTexture)?(O+=" vec4 baseColorWithAlpha = SRGBtoLINEAR4(texture2D(u_baseColorTexture, "+X+"));\n",Object(o.a)(i.u_baseColorFactor)&&(O+=" baseColorWithAlpha *= u_baseColorFactor;\n")):Object(o.a)(i.u_baseColorFactor)?O+=" vec4 baseColorWithAlpha = u_baseColorFactor;\n":O+=" vec4 baseColorWithAlpha = vec4(1.0);\n";D&&(O+=" baseColorWithAlpha *= v_vertexColor;\n");O+=" vec3 baseColor = baseColorWithAlpha.rgb;\n",I?(g?(Object(o.a)(i.u_specularGlossinessTexture)?(O+=" vec4 specularGlossiness = SRGBtoLINEAR4(texture2D(u_specularGlossinessTexture, "+K+"));\n",O+=" vec3 specular = specularGlossiness.rgb;\n",O+=" float glossiness = specularGlossiness.a;\n",Object(o.a)(i.u_specularFactor)&&(O+=" specular *= u_specularFactor;\n"),Object(o.a)(i.u_glossinessFactor)&&(O+=" glossiness *= u_glossinessFactor;\n")):(Object(o.a)(i.u_specularFactor)?O+=" vec3 specular = clamp(u_specularFactor, vec3(0.0), vec3(1.0));\n":O+=" vec3 specular = vec3(1.0);\n",Object(o.a)(i.u_glossinessFactor)?O+=" float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);\n":O+=" float glossiness = 1.0;\n"),Object(o.a)(i.u_diffuseTexture)?(O+=" vec4 diffuse = SRGBtoLINEAR4(texture2D(u_diffuseTexture, "+Q+"));\n",Object(o.a)(i.u_diffuseFactor)&&(O+=" diffuse *= u_diffuseFactor;\n")):Object(o.a)(i.u_diffuseFactor)?O+=" vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));\n":O+=" vec4 diffuse = vec4(1.0);\n"):Object(o.a)(i.u_metallicRoughnessTexture)?(O+=" vec3 metallicRoughness = texture2D(u_metallicRoughnessTexture, "+Z+").rgb;\n",O+=" float metalness = clamp(metallicRoughness.b, 0.0, 1.0);\n",O+=" float roughness = clamp(metallicRoughness.g, 0.04, 1.0);\n",Object(o.a)(i.u_metallicFactor)&&(O+=" metalness *= u_metallicFactor;\n"),Object(o.a)(i.u_roughnessFactor)&&(O+=" roughness *= u_roughnessFactor;\n")):(Object(o.a)(i.u_metallicFactor)?O+=" float metalness = clamp(u_metallicFactor, 0.0, 1.0);\n":O+=" float metalness = 1.0;\n",Object(o.a)(i.u_roughnessFactor)?O+=" float roughness = clamp(u_roughnessFactor, 0.04, 1.0);\n":O+=" float roughness = 1.0;\n"),O+=" vec3 v = -normalize(v_positionEC);\n",O+="#ifndef USE_CUSTOM_LIGHT_COLOR \n",O+=" vec3 lightColorHdr = czm_lightColorHdr;\n",O+="#else \n",O+=" vec3 lightColorHdr = gltf_lightColor;\n",O+="#endif \n",O+=" vec3 l = normalize(czm_lightDirectionEC);\n",O+=" vec3 h = normalize(v + l);\n",O+=" float NdotL = clamp(dot(n, l), 0.001, 1.0);\n",O+=" float NdotV = abs(dot(n, v)) + 0.001;\n",O+=" float NdotH = clamp(dot(n, h), 0.0, 1.0);\n",O+=" float LdotH = clamp(dot(l, h), 0.0, 1.0);\n",O+=" float VdotH = clamp(dot(v, h), 0.0, 1.0);\n",O+=" vec3 f0 = vec3(0.04);\n",g?(O+=" float roughness = 1.0 - glossiness;\n",O+=" vec3 diffuseColor = diffuse.rgb * (1.0 - max(max(specular.r, specular.g), specular.b));\n",O+=" vec3 specularColor = specular;\n"):(O+=" vec3 diffuseColor = baseColor * (1.0 - metalness) * (1.0 - f0);\n",O+=" vec3 specularColor = mix(f0, baseColor, metalness);\n"),O+=" float alpha = roughness * roughness;\n",O+=" float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n",O+=" vec3 r90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));\n",O+=" vec3 r0 = specularColor.rgb;\n",O+=" vec3 F = fresnelSchlick2(r0, r90, VdotH);\n",O+=" float G = smithVisibilityGGX(alpha, NdotL, NdotV);\n",O+=" float D = GGX(alpha, NdotH);\n",O+=" vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor);\n",O+=" vec3 specularContribution = F * G * D / (4.0 * NdotL * NdotV);\n",O+=" vec3 color = NdotL * lightColorHdr * (diffuseContribution + specularContribution);\n",O+="#if defined(USE_IBL_LIGHTING) && !defined(DIFFUSE_IBL) && !defined(SPECULAR_IBL) \n",O+=" vec3 r = normalize(czm_inverseViewRotation * normalize(reflect(v, n)));\n",O+=" float vertexRadius = length(positionWC);\n",O+=" float horizonDotNadir = 1.0 - min(1.0, czm_ellipsoidRadii.x / vertexRadius);\n",O+=" float reflectionDotNadir = dot(r, normalize(positionWC));\n",O+=" r.x = -r.x;\n",O+=" r = -normalize(czm_temeToPseudoFixed * r);\n",O+=" r.x = -r.x;\n",O+=" float inverseRoughness = 1.04 - roughness;\n",O+=" inverseRoughness *= inverseRoughness;\n",O+=" vec3 sceneSkyBox = textureCube(czm_environmentMap, r).rgb * inverseRoughness;\n",O+=" float atmosphereHeight = 0.05;\n",O+=" float blendRegionSize = 0.1 * ((1.0 - inverseRoughness) * 8.0 + 1.1 - horizonDotNadir);\n",O+=" float blendRegionOffset = roughness * -1.0;\n",O+=" float farAboveHorizon = clamp(horizonDotNadir - blendRegionSize * 0.5 + blendRegionOffset, 1.0e-10 - blendRegionSize, 0.99999);\n",O+=" float aroundHorizon = clamp(horizonDotNadir + blendRegionSize * 0.5, 1.0e-10 - blendRegionSize, 0.99999);\n",O+=" float farBelowHorizon = clamp(horizonDotNadir + blendRegionSize * 1.5, 1.0e-10 - blendRegionSize, 0.99999);\n",O+=" float smoothstepHeight = smoothstep(0.0, atmosphereHeight, horizonDotNadir);\n",O+=" vec3 belowHorizonColor = mix(vec3(0.1, 0.15, 0.25), vec3(0.4, 0.7, 0.9), smoothstepHeight);\n",O+=" vec3 nadirColor = belowHorizonColor * 0.5;\n",O+=" vec3 aboveHorizonColor = mix(vec3(0.9, 1.0, 1.2), belowHorizonColor, roughness * 0.5);\n",O+=" vec3 blueSkyColor = mix(vec3(0.18, 0.26, 0.48), aboveHorizonColor, reflectionDotNadir * inverseRoughness * 0.5 + 0.75);\n",O+=" vec3 zenithColor = mix(blueSkyColor, sceneSkyBox, smoothstepHeight);\n",O+=" vec3 blueSkyDiffuseColor = vec3(0.7, 0.85, 0.9);\n",O+=" float diffuseIrradianceFromEarth = (1.0 - horizonDotNadir) * (reflectionDotNadir * 0.25 + 0.75) * smoothstepHeight;\n",O+=" float diffuseIrradianceFromSky = (1.0 - smoothstepHeight) * (1.0 - (reflectionDotNadir * 0.25 + 0.25));\n",O+=" vec3 diffuseIrradiance = blueSkyDiffuseColor * clamp(diffuseIrradianceFromEarth + diffuseIrradianceFromSky, 0.0, 1.0);\n",O+=" float notDistantRough = (1.0 - horizonDotNadir * roughness * 0.8);\n",O+=" vec3 specularIrradiance = mix(zenithColor, aboveHorizonColor, smoothstep(farAboveHorizon, aroundHorizon, reflectionDotNadir) * notDistantRough);\n",O+=" specularIrradiance = mix(specularIrradiance, belowHorizonColor, smoothstep(aroundHorizon, farBelowHorizon, reflectionDotNadir) * inverseRoughness);\n",O+=" specularIrradiance = mix(specularIrradiance, nadirColor, smoothstep(farBelowHorizon, 1.0, reflectionDotNadir) * inverseRoughness);\n",O+="#ifdef USE_SUN_LUMINANCE \n",O+=" float LdotZenith = clamp(dot(normalize(czm_inverseViewRotation * l), normalize(positionWC * -1.0)), 0.001, 1.0);\n",O+=" float S = acos(LdotZenith);\n",O+=" float NdotZenith = clamp(dot(normalize(czm_inverseViewRotation * n), normalize(positionWC * -1.0)), 0.001, 1.0);\n",O+=" float gamma = acos(NdotL);\n",O+=" float numerator = ((0.91 + 10.0 * exp(-3.0 * gamma) + 0.45 * pow(NdotL, 2.0)) * (1.0 - exp(-0.32 / NdotZenith)));\n",O+=" float denominator = (0.91 + 10.0 * exp(-3.0 * S) + 0.45 * pow(LdotZenith,2.0)) * (1.0 - exp(-0.32));\n",O+=" float luminance = gltf_luminanceAtZenith * (numerator / denominator);\n",O+="#endif \n",O+=" vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, roughness)).rg;\n",O+=" vec3 IBLColor = (diffuseIrradiance * diffuseColor * gltf_iblFactor.x) + (specularIrradiance * SRGBtoLINEAR3(specularColor * brdfLut.x + brdfLut.y) * gltf_iblFactor.y);\n",O+=" float maximumComponent = max(max(lightColorHdr.x, lightColorHdr.y), lightColorHdr.z);\n",O+=" vec3 lightColor = lightColorHdr / max(maximumComponent, 1.0);\n",O+=" IBLColor *= lightColor;\n",O+="#ifdef USE_SUN_LUMINANCE \n",O+=" color += IBLColor * luminance;\n",O+="#else \n",O+=" color += IBLColor; \n",O+="#endif \n",O+="#elif defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) \n",O+=" mat3 fixedToENU = mat3(gltf_clippingPlanesMatrix[0][0], gltf_clippingPlanesMatrix[1][0], gltf_clippingPlanesMatrix[2][0], \n",O+=" gltf_clippingPlanesMatrix[0][1], gltf_clippingPlanesMatrix[1][1], gltf_clippingPlanesMatrix[2][1], \n",O+=" gltf_clippingPlanesMatrix[0][2], gltf_clippingPlanesMatrix[1][2], gltf_clippingPlanesMatrix[2][2]); \n",O+=" const mat3 yUpToZUp = mat3(-1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0); \n",O+=" vec3 cubeDir = normalize(yUpToZUp * fixedToENU * normalize(reflect(-v, n))); \n",O+="#ifdef DIFFUSE_IBL \n",O+="#ifdef CUSTOM_SPHERICAL_HARMONICS \n",O+=" vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, gltf_sphericalHarmonicCoefficients); \n",O+="#else \n",O+=" vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients); \n",O+="#endif \n",O+="#else \n",O+=" vec3 diffuseIrradiance = vec3(0.0); \n",O+="#endif \n",O+="#ifdef SPECULAR_IBL \n",O+=" vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, roughness)).rg;\n",O+="#ifdef CUSTOM_SPECULAR_IBL \n",O+=" vec3 specularIBL = czm_sampleOctahedralProjection(gltf_specularMap, gltf_specularMapSize, cubeDir, roughness * gltf_maxSpecularLOD, gltf_maxSpecularLOD);\n",O+="#else \n",O+=" vec3 specularIBL = czm_sampleOctahedralProjection(czm_specularEnvironmentMaps, czm_specularEnvironmentMapSize, cubeDir, roughness * czm_specularEnvironmentMapsMaximumLOD, czm_specularEnvironmentMapsMaximumLOD);\n",O+="#endif \n",O+=" specularIBL *= F * brdfLut.x + brdfLut.y;\n",O+="#else \n",O+=" vec3 specularIBL = vec3(0.0); \n",O+="#endif \n",O+=" color += diffuseIrradiance * diffuseColor + specularColor * specularIBL;\n",O+="#endif \n"):O+=" vec3 color = baseColor;\n";j||(Object(o.a)(i.u_occlusionTexture)&&(O+=" color *= texture2D(u_occlusionTexture, "+J+").r;\n"),Object(o.a)(i.u_emissiveTexture)?(O+=" vec3 emissive = SRGBtoLINEAR3(texture2D(u_emissiveTexture, "+ee+").rgb);\n",Object(o.a)(i.u_emissiveFactor)&&(O+=" emissive *= u_emissiveFactor;\n"),O+=" color += emissive;\n"):Object(o.a)(i.u_emissiveFactor)&&(O+=" color += u_emissiveFactor;\n"));j||(O+=" color = applyTonemapping(color);\n");O+=" color = LINEARtoSRGB(color);\n",L&&(O+=" float outlineness = max(\n",O+=" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r,\n",O+=" max(\n",O+=" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r,\n",O+=" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r));\n",O+=" color = mix(color, vec3(0.0, 0.0, 0.0), outlineness);\n");Object(o.a)(N)?"MASK"===N?(O+=" if (baseColorWithAlpha.a < u_alphaCutoff) {\n",O+=" discard;\n",O+=" }\n",O+=" gl_FragColor = vec4(color, 1.0);\n"):O+="BLEND"===N?" gl_FragColor = vec4(color, baseColorWithAlpha.a);\n":" gl_FragColor = vec4(color, 1.0);\n":O+=" gl_FragColor = vec4(color, 1.0);\n";O+="}\n";var ie=lz(p,{type:Ts.VERTEX_SHADER,extras:{_pipeline:{source:w,extension:".glsl"}}}),re=lz(p,{type:Ts.FRAGMENT_SHADER,extras:{_pipeline:{source:O,extension:".glsl"}}}),oe=lz(m,{fragmentShader:re,vertexShader:ie});return lz(f,{attributes:V,program:oe,uniforms:F})}(e,i,a,s,n,t);Object(o.a)(i.extensions)||(i.extensions={}),i.extensions.KHR_techniques_webgl={values:s,technique:c}})),Tk.ensureSemanticExistence(e),e};var Nk=function(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds},zk="attribute vec3 position;\nattribute float a_batchId;\n\nuniform mat4 u_modifiedModelViewProjection;\n\nvoid main()\n{\n gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0));\n}\n",kk={};!function(e){var t=function(e,t){var n=new Error(e+" at character "+t);throw n.index=t,n.description=e,n},n={"-":!0,"!":!0,"~":!0,"+":!0},i={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},r=function(e){var t,n=0;for(var i in e)(t=i.length)>n&&e.hasOwnProperty(i)&&(n=t);return n},o=r(n),a=r(i),s={true:!0,false:!1,null:null},c=function(e){return i[e]||0},l=function(e,t,n){return{type:"||"===e||"&&"===e?"LogicalExpression":"BinaryExpression",operator:e,left:t,right:n}},u=function(e){return e>=48&&e<=57},h=function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=128&&!i[String.fromCharCode(e)]},d=function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e>=128&&!i[String.fromCharCode(e)]},f=function(e){for(var r,f,p=0,m=e.charAt,g=e.charCodeAt,v=function(t){return m.call(e,t)},_=function(t){return g.call(e,t)},b=e.length,y=function(){for(var e=_(p);32===e||9===e;)e=_(++p)},w=function e(){var n,i,r=C();return y(),63!==_(p)?r:(p++,(n=e())||t("Expected expression",p),y(),58===_(p)?(p++,(i=e())||t("Expected expression",p),{type:"ConditionalExpression",test:r,consequent:n,alternate:i}):void t("Expected :",p))},O=function(){y();for(var t=e.substr(p,a),n=t.length;n>0;){if(i.hasOwnProperty(t))return p+=n,t;t=t.substr(0,--n)}return!1},C=function(){var e,n,i,r,o,a,s,u;if(a=E(),!(n=O()))return a;for(o={value:n,prec:c(n)},(s=E())||t("Expected expression after "+n,p),r=[a,o,s];(n=O())&&0!==(i=c(n));){for(o={value:n,prec:i};r.length>2&&i<=r[r.length-2].prec;)s=r.pop(),n=r.pop().value,a=r.pop(),e=l(n,a,s),r.push(e);(e=E())||t("Expected expression after "+n,p),r.push(o,e)}for(e=r[u=r.length-1];u>1;)e=l(r[u-1].value,r[u-2],e),u-=2;return e},E=function t(){var i,r,a;if(y(),i=_(p),u(i)||46===i)return A();if(39===i||34===i)return x();if(h(i)||40===i)return D();if(91===i)return I();for(a=(r=e.substr(p,o)).length;a>0;){if(n.hasOwnProperty(r))return p+=a,{type:"UnaryExpression",operator:r,argument:t(),prefix:!0};r=r.substr(0,--a)}return!1},A=function(){for(var e,n,i="";u(_(p));)i+=v(p++);if(46===_(p))for(i+=v(p++);u(_(p));)i+=v(p++);if("e"===(e=v(p))||"E"===e){for(i+=v(p++),"+"!==(e=v(p))&&"-"!==e||(i+=v(p++));u(_(p));)i+=v(p++);u(_(p-1))||t("Expected exponent ("+i+v(p)+")",p)}return n=_(p),h(n)?t("Variable names cannot start with a number ("+i+v(p)+")",p):46===n&&t("Unexpected period",p),{type:"Literal",value:parseFloat(i),raw:i}},x=function(){for(var e,n="",i=v(p++),r=!1;p<b;){if((e=v(p++))===i){r=!0;break}if("\\"===e)switch(e=v(p++)){case"n":n+="\n";break;case"r":n+="\r";break;case"t":n+="\t";break;case"b":n+="\b";break;case"f":n+="\f";break;case"v":n+="\v";break;default:n+="\\"+e}else n+=e}return r||t('Unclosed quote after "'+n+'"',p),{type:"Literal",value:n,raw:i+n+i}},T=function(){var n,i=_(p),r=p;for(h(i)?p++:t("Unexpected "+v(p),p);p<b&&(i=_(p),d(i));)p++;return n=e.slice(r,p),s.hasOwnProperty(n)?{type:"Literal",value:s[n],raw:n}:"this"===n?{type:"ThisExpression"}:{type:"Identifier",name:n}},S=function(e){for(var n,i,r=[],o=!1;p<b;){if(y(),(n=_(p))===e){o=!0,p++;break}44===n?p++:((i=w())&&"Compound"!==i.type||t("Expected comma",p),r.push(i))}return o||t("Expected "+String.fromCharCode(e),p),r},D=function(){var e,n;for(n=40===(e=_(p))?P():T(),y(),e=_(p);46===e||91===e||40===e;)p++,46===e?(y(),n={type:"MemberExpression",computed:!1,object:n,property:T()}):91===e?(n={type:"MemberExpression",computed:!0,object:n,property:w()},y(),93!==(e=_(p))&&t("Unclosed [",p),p++):40===e&&(n={type:"CallExpression",arguments:S(41),callee:n}),y(),e=_(p);return n},P=function(){p++;var e=w();if(y(),41===_(p))return p++,e;t("Unclosed (",p)},I=function(){return p++,{type:"ArrayExpression",elements:S(93)}},M=[];p<b;)59===(r=_(p))||44===r?p++:(f=w())?M.push(f):p<b&&t('Unexpected "'+v(p)+'"',p);return 1===M.length?M[0]:{type:"Compound",body:M}};f.version="0.3.1",f.toString=function(){return"JavaScript Expression Parser (JSEP) v"+f.version},f.addUnaryOp=function(e){return o=Math.max(e.length,o),n[e]=!0,this},f.addBinaryOp=function(e,t){return a=Math.max(e.length,a),i[e]=t,this},f.addLiteral=function(e,t){return s[e]=t,this},f.removeUnaryOp=function(e){return delete n[e],e.length===o&&(o=r(n)),this},f.removeAllUnaryOps=function(){return n={},o=0,this},f.removeBinaryOp=function(e){return delete i[e],e.length===a&&(a=r(i)),this},f.removeAllBinaryOps=function(){return i={},a=0,this},f.removeLiteral=function(e){return delete s[e],this},f.removeAllLiterals=function(){return s={},this},e.jsep=f}(kk);var Bk=kk.jsep,Hk=Object.freeze({VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18});function Vk(e,t){var n;i.a.typeOf.string("expression",e),this._expression=e,e=function(e){var t=e,n="",i=t.indexOf("${");for(;i>=0;){var r,o=t.indexOf("'"),a=t.indexOf('"');if(o>=0&&o<i)r=t.indexOf("'",o+1),n+=t.substr(0,r+1),t=t.substr(r+1),i=t.indexOf("${");else if(a>=0&&a<i)r=t.indexOf('"',a+1),n+=t.substr(0,r+1),t=t.substr(r+1),i=t.indexOf("${");else{n+=t.substr(0,i);var s=t.indexOf("}");if(s<0)throw new de.a("Unmatched {.");n+="czm_"+t.substr(i+2,s-(i+2)),t=t.substr(s+1),i=t.indexOf("${")}}return n+=t}(function(e){return e.replace(Yk,"@#%")}(e=function(e,t){if(!Object(o.a)(t))return e;for(var n in t)if(t.hasOwnProperty(n)){var i=new RegExp("\\$\\{"+n+"\\}","g"),r="("+t[n]+")";Object(o.a)(r)&&(e=e.replace(i,r))}return e}(e,t))),Bk.addBinaryOp("=~",0),Bk.addBinaryOp("!~",0);try{n=Bk(e)}catch(r){throw new de.a(r)}this._runtimeAst=sB(this,n)}Object.defineProperties(Vk.prototype,{expression:{get:function(){return this._expression}}});var Uk={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new Mt],cartesian3Array:[new O],cartesian4Array:[new he],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);var e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new Mt),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new O),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new he),this.cartesian4Array[this.cartesian4Index++]}};Vk.prototype.evaluate=function(e,t){Uk.reset();var n=this._runtimeAst.evaluate(e);return t instanceof Hf&&n instanceof he?Hf.fromCartesian4(n,t):n instanceof Mt||n instanceof O||n instanceof he?n.clone(t):n},Vk.prototype.evaluateColor=function(e,t){Uk.reset();var n=this._runtimeAst.evaluate(e);return Hf.fromCartesian4(n,t)},Vk.prototype.getShaderFunction=function(e,t,n,i){var r=this.getShaderExpression(t,n);return r=i+" "+e+"() \n{ \n return "+r+"; \n} \n"},Vk.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};var Wk=["!","-","+"],Gk=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],qk=/\${(.*?)}/g,Yk=/\\/g,$k=/@#%/g,Xk=new Hf,Kk={abs:Jk(Math.abs),sqrt:Jk(Math.sqrt),cos:Jk(Math.cos),sin:Jk(Math.sin),tan:Jk(Math.tan),acos:Jk(Math.acos),asin:Jk(Math.asin),atan:Jk(Math.atan),radians:Jk(d.toRadians),degrees:Jk(d.toDegrees),sign:Jk(d.sign),floor:Jk(Math.floor),ceil:Jk(Math.ceil),round:Jk(Math.round),exp:Jk(Math.exp),exp2:Jk((function(e){return Math.pow(2,e)})),log:Jk(Math.log),log2:Jk((function(e){return d.log2(e)})),fract:Jk((function(e){return e-Math.floor(e)})),length:function(e,t){if("number"===typeof t)return Math.abs(t);if(t instanceof Mt)return Mt.magnitude(t);if(t instanceof O)return O.magnitude(t);if(t instanceof he)return he.magnitude(t);throw new de.a('Function "'+e+'" requires a vector or number argument. Argument is '+t+".")},normalize:function(e,t){if("number"===typeof t)return 1;if(t instanceof Mt)return Mt.normalize(t,Uk.getCartesian2());if(t instanceof O)return O.normalize(t,Uk.getCartesian3());if(t instanceof he)return he.normalize(t,Uk.getCartesian4());throw new de.a('Function "'+e+'" requires a vector or number argument. Argument is '+t+".")}},Qk={atan2:eB(Math.atan2,!1),pow:eB(Math.pow,!1),min:eB(Math.min,!0),max:eB(Math.max,!0),distance:function(e,t,n){if("number"===typeof t&&"number"===typeof n)return Math.abs(t-n);if(t instanceof Mt&&n instanceof Mt)return Mt.distance(t,n);if(t instanceof O&&n instanceof O)return O.distance(t,n);if(t instanceof he&&n instanceof he)return he.distance(t,n);throw new de.a('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+" and "+n+".")},dot:function(e,t,n){if("number"===typeof t&&"number"===typeof n)return t*n;if(t instanceof Mt&&n instanceof Mt)return Mt.dot(t,n);if(t instanceof O&&n instanceof O)return O.dot(t,n);if(t instanceof he&&n instanceof he)return he.dot(t,n);throw new de.a('Function "'+e+'" requires vector or number arguments of matching types. Arguments are '+t+" and "+n+".")},cross:function(e,t,n){if(t instanceof O&&n instanceof O)return O.cross(t,n,Uk.getCartesian3());throw new de.a('Function "'+e+'" requires vec3 arguments. Arguments are '+t+" and "+n+".")}},Zk={clamp:tB(d.clamp,!0),mix:tB(d.lerp,!0)};function Jk(e){return function(t,n){if("number"===typeof n)return e(n);if(n instanceof Mt)return Mt.fromElements(e(n.x),e(n.y),Uk.getCartesian2());if(n instanceof O)return O.fromElements(e(n.x),e(n.y),e(n.z),Uk.getCartesian3());if(n instanceof he)return he.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Uk.getCartesian4());throw new de.a('Function "'+t+'" requires a vector or number argument. Argument is '+n+".")}}function eB(e,t){return function(n,i,r){if(t&&"number"===typeof r){if("number"===typeof i)return e(i,r);if(i instanceof Mt)return Mt.fromElements(e(i.x,r),e(i.y,r),Uk.getCartesian2());if(i instanceof O)return O.fromElements(e(i.x,r),e(i.y,r),e(i.z,r),Uk.getCartesian3());if(i instanceof he)return he.fromElements(e(i.x,r),e(i.y,r),e(i.z,r),e(i.w,r),Uk.getCartesian4())}if("number"===typeof i&&"number"===typeof r)return e(i,r);if(i instanceof Mt&&r instanceof Mt)return Mt.fromElements(e(i.x,r.x),e(i.y,r.y),Uk.getCartesian2());if(i instanceof O&&r instanceof O)return O.fromElements(e(i.x,r.x),e(i.y,r.y),e(i.z,r.z),Uk.getCartesian3());if(i instanceof he&&r instanceof he)return he.fromElements(e(i.x,r.x),e(i.y,r.y),e(i.z,r.z),e(i.w,r.w),Uk.getCartesian4());throw new de.a('Function "'+n+'" requires vector or number arguments of matching types. Arguments are '+i+" and "+r+".")}}function tB(e,t){return function(n,i,r,o){if(t&&"number"===typeof o){if("number"===typeof i&&"number"===typeof r)return e(i,r,o);if(i instanceof Mt&&r instanceof Mt)return Mt.fromElements(e(i.x,r.x,o),e(i.y,r.y,o),Uk.getCartesian2());if(i instanceof O&&r instanceof O)return O.fromElements(e(i.x,r.x,o),e(i.y,r.y,o),e(i.z,r.z,o),Uk.getCartesian3());if(i instanceof he&&r instanceof he)return he.fromElements(e(i.x,r.x,o),e(i.y,r.y,o),e(i.z,r.z,o),e(i.w,r.w,o),Uk.getCartesian4())}if("number"===typeof i&&"number"===typeof r&&"number"===typeof o)return e(i,r,o);if(i instanceof Mt&&r instanceof Mt&&o instanceof Mt)return Mt.fromElements(e(i.x,r.x,o.x),e(i.y,r.y,o.y),Uk.getCartesian2());if(i instanceof O&&r instanceof O&&o instanceof O)return O.fromElements(e(i.x,r.x,o.x),e(i.y,r.y,o.y),e(i.z,r.z,o.z),Uk.getCartesian3());if(i instanceof he&&r instanceof he&&o instanceof he)return he.fromElements(e(i.x,r.x,o.x),e(i.y,r.y,o.y),e(i.z,r.z,o.z),e(i.w,r.w,o.w),Uk.getCartesian4());throw new de.a('Function "'+n+'" requires vector or number arguments of matching types. Arguments are '+i+", "+r+", and "+o+".")}}function nB(e,t,n,i,r){var a;this._type=e,this._value=t,this._left=n,this._right=i,this._test=r,this.evaluate=void 0,(a=this)._type===Hk.CONDITIONAL?a.evaluate=a._evaluateConditional:a._type===Hk.FUNCTION_CALL?"test"===a._value?a.evaluate=a._evaluateRegExpTest:"exec"===a._value?a.evaluate=a._evaluateRegExpExec:"toString"===a._value&&(a.evaluate=a._evaluateToString):a._type===Hk.UNARY?"!"===a._value?a.evaluate=a._evaluateNot:"-"===a._value?a.evaluate=a._evaluateNegative:"+"===a._value?a.evaluate=a._evaluatePositive:"isNaN"===a._value?a.evaluate=a._evaluateNaN:"isFinite"===a._value?a.evaluate=a._evaluateIsFinite:"isExactClass"===a._value?a.evaluate=a._evaluateIsExactClass:"isClass"===a._value?a.evaluate=a._evaluateIsClass:"getExactClassName"===a._value?a.evaluate=a._evaluateGetExactClassName:"Boolean"===a._value?a.evaluate=a._evaluateBooleanConversion:"Number"===a._value?a.evaluate=a._evaluateNumberConversion:"String"===a._value?a.evaluate=a._evaluateStringConversion:Object(o.a)(Kk[a._value])&&(a.evaluate=function(e){var t=Kk[e];return function(n){var i=this._left.evaluate(n);return t(e,i)}}(a._value)):a._type===Hk.BINARY?"+"===a._value?a.evaluate=a._evaluatePlus:"-"===a._value?a.evaluate=a._evaluateMinus:"*"===a._value?a.evaluate=a._evaluateTimes:"/"===a._value?a.evaluate=a._evaluateDivide:"%"===a._value?a.evaluate=a._evaluateMod:"==="===a._value?a.evaluate=a._evaluateEqualsStrict:"!=="===a._value?a.evaluate=a._evaluateNotEqualsStrict:"<"===a._value?a.evaluate=a._evaluateLessThan:"<="===a._value?a.evaluate=a._evaluateLessThanOrEquals:">"===a._value?a.evaluate=a._evaluateGreaterThan:">="===a._value?a.evaluate=a._evaluateGreaterThanOrEquals:"&&"===a._value?a.evaluate=a._evaluateAnd:"||"===a._value?a.evaluate=a._evaluateOr:"=~"===a._value?a.evaluate=a._evaluateRegExpMatch:"!~"===a._value?a.evaluate=a._evaluateRegExpNotMatch:Object(o.a)(Qk[a._value])&&(a.evaluate=function(e){var t=Qk[e];return function(n){var i=this._left.evaluate(n),r=this._right.evaluate(n);return t(e,i,r)}}(a._value)):a._type===Hk.TERNARY?a.evaluate=function(e){var t=Zk[e];return function(n){var i=this._left.evaluate(n),r=this._right.evaluate(n),o=this._test.evaluate(n);return t(e,i,r,o)}}(a._value):a._type===Hk.MEMBER?"brackets"===a._value?a.evaluate=a._evaluateMemberBrackets:a.evaluate=a._evaluateMemberDot:a._type===Hk.ARRAY?a.evaluate=a._evaluateArray:a._type===Hk.VARIABLE?a.evaluate=a._evaluateVariable:a._type===Hk.VARIABLE_IN_STRING?a.evaluate=a._evaluateVariableString:a._type===Hk.LITERAL_COLOR?a.evaluate=a._evaluateLiteralColor:a._type===Hk.LITERAL_VECTOR?a.evaluate=a._evaluateLiteralVector:a._type===Hk.LITERAL_STRING?a.evaluate=a._evaluateLiteralString:a._type===Hk.REGEX?a.evaluate=a._evaluateRegExp:a._type===Hk.BUILTIN_VARIABLE?"tiles3d_tileset_time"===a._value&&(a.evaluate=cB):a.evaluate=a._evaluateLiteral}function iB(e){return e.replace($k,"\\")}function rB(e,t){var n,i,r,a,s=t.arguments,c=s.length;if("MemberExpression"===t.callee.type){n=t.callee.property.name;var l=t.callee.object;if("test"===n||"exec"===n){if("regExp"!==l.callee.name)throw new de.a(n+" is not a function.");return 0===c?"test"===n?new nB(Hk.LITERAL_BOOLEAN,!1):new nB(Hk.LITERAL_NULL,null):(r=sB(e,l),a=sB(e,s[0]),new nB(Hk.FUNCTION_CALL,n,r,a))}if("toString"===n)return i=sB(e,l),new nB(Hk.FUNCTION_CALL,n,i);throw new de.a('Unexpected function call "'+n+'".')}if("color"===(n=t.callee.name)){if(0===c)return new nB(Hk.LITERAL_COLOR,n);if(i=sB(e,s[0]),Object(o.a)(s[1])){var u=sB(e,s[1]);return new nB(Hk.LITERAL_COLOR,n,[i,u])}return new nB(Hk.LITERAL_COLOR,n,[i])}if("rgb"===n||"hsl"===n){if(c<3)throw new de.a(n+" requires three arguments.");return i=[sB(e,s[0]),sB(e,s[1]),sB(e,s[2])],new nB(Hk.LITERAL_COLOR,n,i)}if("rgba"===n||"hsla"===n){if(c<4)throw new de.a(n+" requires four arguments.");return i=[sB(e,s[0]),sB(e,s[1]),sB(e,s[2]),sB(e,s[3])],new nB(Hk.LITERAL_COLOR,n,i)}if("vec2"===n||"vec3"===n||"vec4"===n){i=new Array(c);for(var h=0;h<c;++h)i[h]=sB(e,s[h]);return new nB(Hk.LITERAL_VECTOR,n,i)}if("isNaN"===n||"isFinite"===n)return 0===c?new nB(Hk.LITERAL_BOOLEAN,"isNaN"===n):(i=sB(e,s[0]),new nB(Hk.UNARY,n,i));if("isExactClass"===n||"isClass"===n){if(c<1||c>1)throw new de.a(n+" requires exactly one argument.");return i=sB(e,s[0]),new nB(Hk.UNARY,n,i)}if("getExactClassName"===n){if(c>0)throw new de.a(n+" does not take any argument.");return new nB(Hk.UNARY,n)}if(Object(o.a)(Kk[n])){if(1!==c)throw new de.a(n+" requires exactly one argument.");return i=sB(e,s[0]),new nB(Hk.UNARY,n,i)}if(Object(o.a)(Qk[n])){if(2!==c)throw new de.a(n+" requires exactly two arguments.");return r=sB(e,s[0]),a=sB(e,s[1]),new nB(Hk.BINARY,n,r,a)}if(Object(o.a)(Zk[n])){if(3!==c)throw new de.a(n+" requires exactly three arguments.");r=sB(e,s[0]),a=sB(e,s[1]);var d=sB(e,s[2]);return new nB(Hk.TERNARY,n,r,a,d)}if("Boolean"===n)return 0===c?new nB(Hk.LITERAL_BOOLEAN,!1):(i=sB(e,s[0]),new nB(Hk.UNARY,n,i));if("Number"===n)return 0===c?new nB(Hk.LITERAL_NUMBER,0):(i=sB(e,s[0]),new nB(Hk.UNARY,n,i));if("String"===n)return 0===c?new nB(Hk.LITERAL_STRING,""):(i=sB(e,s[0]),new nB(Hk.UNARY,n,i));if("regExp"===n)return function(e,t){var n=t.arguments;if(0===n.length)return new nB(Hk.LITERAL_REGEX,new RegExp);var i,r=sB(e,n[0]);if(n.length>1){var o=sB(e,n[1]);if(aB(r)&&aB(o)){try{i=new RegExp(iB(String(r._value)),o._value)}catch(a){throw new de.a(a)}return new nB(Hk.LITERAL_REGEX,i)}return new nB(Hk.REGEX,r,o)}if(aB(r)){try{i=new RegExp(iB(String(r._value)))}catch(a){throw new de.a(a)}return new nB(Hk.LITERAL_REGEX,i)}return new nB(Hk.REGEX,r)}(e,t);throw new de.a('Unexpected function call "'+n+'".')}function oB(e,t){if("Math"===t.object.name)return function(e){var t=e.property.name;return"PI"===t?new nB(Hk.LITERAL_NUMBER,Math.PI):"E"===t?new nB(Hk.LITERAL_NUMBER,Math.E):void 0}(t);if("Number"===t.object.name)return function(e){if("POSITIVE_INFINITY"===e.property.name)return new nB(Hk.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}(t);var n,i=sB(e,t.object);return t.computed?(n=sB(e,t.property),new nB(Hk.MEMBER,"brackets",i,n)):(n=new nB(Hk.LITERAL_STRING,t.property.name),new nB(Hk.MEMBER,"dot",i,n))}function aB(e){return e._type>=Hk.LITERAL_NULL}function sB(e,t){var n,i,r,o;if("Literal"===t.type)n=function(e){var t=typeof e.value;return null===e.value?new nB(Hk.LITERAL_NULL,null):"boolean"===t?new nB(Hk.LITERAL_BOOLEAN,e.value):"number"===t?new nB(Hk.LITERAL_NUMBER,e.value):"string"===t?e.value.indexOf("${")>=0?new nB(Hk.VARIABLE_IN_STRING,e.value):new nB(Hk.LITERAL_STRING,iB(e.value)):void 0}(t);else if("CallExpression"===t.type)n=rB(e,t);else if("Identifier"===t.type)n=function(e){if(function(e){return"czm_"===e.substr(0,4)}(e.name)){var t=e.name.substr(4);return"tiles3d_"===t.substr(0,8)?new nB(Hk.BUILTIN_VARIABLE,t):new nB(Hk.VARIABLE,t)}if("NaN"===e.name)return new nB(Hk.LITERAL_NUMBER,NaN);if("Infinity"===e.name)return new nB(Hk.LITERAL_NUMBER,1/0);if("undefined"===e.name)return new nB(Hk.LITERAL_UNDEFINED,void 0);throw new de.a(e.name+" is not defined.")}(t);else if("UnaryExpression"===t.type){i=t.operator;var a=sB(e,t.argument);if(!(Wk.indexOf(i)>-1))throw new de.a('Unexpected operator "'+i+'".');n=new nB(Hk.UNARY,i,a)}else if("BinaryExpression"===t.type){if(i=t.operator,r=sB(e,t.left),o=sB(e,t.right),!(Gk.indexOf(i)>-1))throw new de.a('Unexpected operator "'+i+'".');n=new nB(Hk.BINARY,i,r,o)}else if("LogicalExpression"===t.type)i=t.operator,r=sB(e,t.left),o=sB(e,t.right),Gk.indexOf(i)>-1&&(n=new nB(Hk.BINARY,i,r,o));else if("ConditionalExpression"===t.type){var s=sB(e,t.test);r=sB(e,t.consequent),o=sB(e,t.alternate),n=new nB(Hk.CONDITIONAL,"?",r,o,s)}else if("MemberExpression"===t.type)n=oB(e,t);else{if("ArrayExpression"!==t.type)throw"Compound"===t.type?new de.a("Provide exactly one expression."):new de.a("Cannot parse expression.");for(var c=[],l=0;l<t.elements.length;l++)c[l]=sB(e,t.elements[l]);n=new nB(Hk.ARRAY,c)}return n}function cB(e){return Object(o.a)(e)?e.content.tileset.timeSinceLoad:0}function lB(e,t){if(Object(o.a)(e))return e.getProperty(t)}function uB(e){return"feature"===e._value}function hB(e){for(var t=e._left,n=t.length,i=0;i<n;++i)if(t[i]._type!==Hk.LITERAL_NUMBER)return;var r=t[0]._value,o=t[1]._value,a=t[2]._value,s=4===n?t[3]._value:1;return Hf.fromHsl(r,o,a,s,Xk)}function dB(e){for(var t=e._left,n=t.length,i=0;i<n;++i)if(t[i]._type!==Hk.LITERAL_NUMBER)return;var r=Xk;return r.red=t[0]._value/255,r.green=t[1]._value/255,r.blue=t[2]._value/255,r.alpha=4===n?t[3]._value:1,r}function fB(e){return e%1===0?e.toFixed(1):e.toString()}function pB(e){return"vec4("+fB(e.red)+", "+fB(e.green)+", "+fB(e.blue)+", "+fB(e.alpha)+")"}function mB(e,t,n,i){for(var r=e.length,o=new Array(r),a=0;a<r;++a)o[a]=e[a].getShaderExpression(t,n,i);return o}function gB(e,t){if(!Object(o.a)(t[e]))throw new de.a('Style references a property "'+e+'" that does not exist or is not styleable.');return t[e]}nB.prototype._evaluateLiteral=function(){return this._value},nB.prototype._evaluateLiteralColor=function(e){var t=Xk,n=this._left;if("color"===this._value)Object(o.a)(n)?n.length>1?(Hf.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):Hf.fromCssColorString(n[0].evaluate(e),t):Hf.fromBytes(255,255,255,255,t);else if("rgb"===this._value)Hf.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),255,t);else if("rgba"===this._value){var i=255*n[3].evaluate(e);Hf.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else"hsl"===this._value?Hf.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):"hsla"===this._value&&Hf.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return he.fromColor(t,Uk.getCartesian4())},nB.prototype._evaluateLiteralVector=function(e){for(var t=Uk.getArray(),n=this._value,i=this._left,r=i.length,o=0;o<r;++o){var a=i[o].evaluate(e);if("number"===typeof a)t.push(a);else if(a instanceof Mt)t.push(a.x,a.y);else if(a instanceof O)t.push(a.x,a.y,a.z);else{if(!(a instanceof he))throw new de.a(n+" argument must be a vector or number. Argument is "+a+".");t.push(a.x,a.y,a.z,a.w)}}var s=t.length,c=parseInt(n.charAt(3));if(0===s)throw new de.a("Invalid "+n+" constructor. No valid arguments.");if(s<c&&s>1)throw new de.a("Invalid "+n+" constructor. Not enough arguments.");if(s>c&&r>1)throw new de.a("Invalid "+n+" constructor. Too many arguments.");if(1===s){var l=t[0];t.push(l,l,l)}return"vec2"===n?Mt.fromArray(t,0,Uk.getCartesian2()):"vec3"===n?O.fromArray(t,0,Uk.getCartesian3()):"vec4"===n?he.fromArray(t,0,Uk.getCartesian4()):void 0},nB.prototype._evaluateLiteralString=function(){return this._value},nB.prototype._evaluateVariableString=function(e){for(var t=this._value,n=qk.exec(t);null!==n;){var i=n[0],r=lB(e,n[1]);Object(o.a)(r)||(r=""),t=t.replace(i,r),n=qk.exec(t)}return t},nB.prototype._evaluateVariable=function(e){return lB(e,this._value)},nB.prototype._evaluateMemberDot=function(e){if(uB(this._left))return lB(e,this._right.evaluate(e));var t=this._left.evaluate(e);if(Object(o.a)(t)){var n=this._right.evaluate(e);if(t instanceof Mt||t instanceof O||t instanceof he){if("r"===n)return t.x;if("g"===n)return t.y;if("b"===n)return t.z;if("a"===n)return t.w}return t[n]}},nB.prototype._evaluateMemberBrackets=function(e){if(uB(this._left))return lB(e,this._right.evaluate(e));var t=this._left.evaluate(e);if(Object(o.a)(t)){var n=this._right.evaluate(e);if(t instanceof Mt||t instanceof O||t instanceof he){if(0===n||"r"===n)return t.x;if(1===n||"g"===n)return t.y;if(2===n||"b"===n)return t.z;if(3===n||"a"===n)return t.w}return t[n]}},nB.prototype._evaluateArray=function(e){for(var t=[],n=0;n<this._value.length;n++)t[n]=this._value[n].evaluate(e);return t},nB.prototype._evaluateNot=function(e){var t=this._left.evaluate(e);if("boolean"!==typeof t)throw new de.a('Operator "!" requires a boolean argument. Argument is '+t+".");return!t},nB.prototype._evaluateNegative=function(e){var t=this._left.evaluate(e);if(t instanceof Mt)return Mt.negate(t,Uk.getCartesian2());if(t instanceof O)return O.negate(t,Uk.getCartesian3());if(t instanceof he)return he.negate(t,Uk.getCartesian4());if("number"===typeof t)return-t;throw new de.a('Operator "-" requires a vector or number argument. Argument is '+t+".")},nB.prototype._evaluatePositive=function(e){var t=this._left.evaluate(e);if(!(t instanceof Mt||t instanceof O||t instanceof he||"number"===typeof t))throw new de.a('Operator "+" requires a vector or number argument. Argument is '+t+".");return t},nB.prototype._evaluateLessThan=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if("number"!==typeof t||"number"!==typeof n)throw new de.a('Operator "<" requires number arguments. Arguments are '+t+" and "+n+".");return t<n},nB.prototype._evaluateLessThanOrEquals=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if("number"!==typeof t||"number"!==typeof n)throw new de.a('Operator "<=" requires number arguments. Arguments are '+t+" and "+n+".");return t<=n},nB.prototype._evaluateGreaterThan=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if("number"!==typeof t||"number"!==typeof n)throw new de.a('Operator ">" requires number arguments. Arguments are '+t+" and "+n+".");return t>n},nB.prototype._evaluateGreaterThanOrEquals=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if("number"!==typeof t||"number"!==typeof n)throw new de.a('Operator ">=" requires number arguments. Arguments are '+t+" and "+n+".");return t>=n},nB.prototype._evaluateOr=function(e){var t=this._left.evaluate(e);if("boolean"!==typeof t)throw new de.a('Operator "||" requires boolean arguments. First argument is '+t+".");if(t)return!0;var n=this._right.evaluate(e);if("boolean"!==typeof n)throw new de.a('Operator "||" requires boolean arguments. Second argument is '+n+".");return t||n},nB.prototype._evaluateAnd=function(e){var t=this._left.evaluate(e);if("boolean"!==typeof t)throw new de.a('Operator "&&" requires boolean arguments. First argument is '+t+".");if(!t)return!1;var n=this._right.evaluate(e);if("boolean"!==typeof n)throw new de.a('Operator "&&" requires boolean arguments. Second argument is '+n+".");return t&&n},nB.prototype._evaluatePlus=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof Mt&&t instanceof Mt)return Mt.add(t,n,Uk.getCartesian2());if(n instanceof O&&t instanceof O)return O.add(t,n,Uk.getCartesian3());if(n instanceof he&&t instanceof he)return he.add(t,n,Uk.getCartesian4());if("string"===typeof t||"string"===typeof n)return t+n;if("number"===typeof t&&"number"===typeof n)return t+n;throw new de.a('Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateMinus=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof Mt&&t instanceof Mt)return Mt.subtract(t,n,Uk.getCartesian2());if(n instanceof O&&t instanceof O)return O.subtract(t,n,Uk.getCartesian3());if(n instanceof he&&t instanceof he)return he.subtract(t,n,Uk.getCartesian4());if("number"===typeof t&&"number"===typeof n)return t-n;throw new de.a('Operator "-" requires vector or number arguments of matching types. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateTimes=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof Mt&&t instanceof Mt)return Mt.multiplyComponents(t,n,Uk.getCartesian2());if(n instanceof Mt&&"number"===typeof t)return Mt.multiplyByScalar(n,t,Uk.getCartesian2());if(t instanceof Mt&&"number"===typeof n)return Mt.multiplyByScalar(t,n,Uk.getCartesian2());if(n instanceof O&&t instanceof O)return O.multiplyComponents(t,n,Uk.getCartesian3());if(n instanceof O&&"number"===typeof t)return O.multiplyByScalar(n,t,Uk.getCartesian3());if(t instanceof O&&"number"===typeof n)return O.multiplyByScalar(t,n,Uk.getCartesian3());if(n instanceof he&&t instanceof he)return he.multiplyComponents(t,n,Uk.getCartesian4());if(n instanceof he&&"number"===typeof t)return he.multiplyByScalar(n,t,Uk.getCartesian4());if(t instanceof he&&"number"===typeof n)return he.multiplyByScalar(t,n,Uk.getCartesian4());if("number"===typeof t&&"number"===typeof n)return t*n;throw new de.a('Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateDivide=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof Mt&&t instanceof Mt)return Mt.divideComponents(t,n,Uk.getCartesian2());if(t instanceof Mt&&"number"===typeof n)return Mt.divideByScalar(t,n,Uk.getCartesian2());if(n instanceof O&&t instanceof O)return O.divideComponents(t,n,Uk.getCartesian3());if(t instanceof O&&"number"===typeof n)return O.divideByScalar(t,n,Uk.getCartesian3());if(n instanceof he&&t instanceof he)return he.divideComponents(t,n,Uk.getCartesian4());if(t instanceof he&&"number"===typeof n)return he.divideByScalar(t,n,Uk.getCartesian4());if("number"===typeof t&&"number"===typeof n)return t/n;throw new de.a('Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateMod=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof Mt&&t instanceof Mt)return Mt.fromElements(t.x%n.x,t.y%n.y,Uk.getCartesian2());if(n instanceof O&&t instanceof O)return O.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Uk.getCartesian3());if(n instanceof he&&t instanceof he)return he.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,Uk.getCartesian4());if("number"===typeof t&&"number"===typeof n)return t%n;throw new de.a('Operator "%" requires vector or number arguments of matching types. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateEqualsStrict=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof Mt&&t instanceof Mt||n instanceof O&&t instanceof O||n instanceof he&&t instanceof he?t.equals(n):t===n},nB.prototype._evaluateNotEqualsStrict=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof Mt&&t instanceof Mt||n instanceof O&&t instanceof O||n instanceof he&&t instanceof he?!t.equals(n):t!==n},nB.prototype._evaluateConditional=function(e){var t=this._test.evaluate(e);if("boolean"!==typeof t)throw new de.a("Conditional argument of conditional expression must be a boolean. Argument is "+t+".");return t?this._left.evaluate(e):this._right.evaluate(e)},nB.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))},nB.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))},nB.prototype._evaluateIsExactClass=function(e){return!!Object(o.a)(e)&&e.isExactClass(this._left.evaluate(e))},nB.prototype._evaluateIsClass=function(e){return!!Object(o.a)(e)&&e.isClass(this._left.evaluate(e))},nB.prototype._evaluateGetExactClassName=function(e){if(Object(o.a)(e))return e.getExactClassName()},nB.prototype._evaluateBooleanConversion=function(e){return Boolean(this._left.evaluate(e))},nB.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))},nB.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))},nB.prototype._evaluateRegExp=function(e){var t,n=this._value.evaluate(e),i="";Object(o.a)(this._left)&&(i=this._left.evaluate(e));try{t=new RegExp(n,i)}catch(r){throw new de.a(r)}return t},nB.prototype._evaluateRegExpTest=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&"string"===typeof n))throw new de.a("RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are "+t+" and "+n+".");return t.test(n)},nB.prototype._evaluateRegExpMatch=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&"string"===typeof n)return t.test(n);if(n instanceof RegExp&&"string"===typeof t)return n.test(t);throw new de.a('Operator "=~" requires one RegExp argument and one string argument. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateRegExpNotMatch=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&"string"===typeof n)return!t.test(n);if(n instanceof RegExp&&"string"===typeof t)return!n.test(t);throw new de.a('Operator "!~" requires one RegExp argument and one string argument. Arguments are '+t+" and "+n+".")},nB.prototype._evaluateRegExpExec=function(e){var t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&"string"===typeof n))throw new de.a("RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are "+t+" and "+n+".");var i=t.exec(n);return Object(o.a)(i)?i[1]:null},nB.prototype._evaluateToString=function(e){var t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof Mt||t instanceof O||t instanceof he)return String(t);throw new de.a('Unexpected function call "'+this._value+'".')};nB.prototype.getShaderExpression=function(e,t,n){var i,r,s,c,l=this._type,u=this._value;switch(Object(o.a)(this._left)&&(r=Array.isArray(this._left)?mB(this._left,e,t,this):this._left.getShaderExpression(e,t,this)),Object(o.a)(this._right)&&(s=this._right.getShaderExpression(e,t,this)),Object(o.a)(this._test)&&(c=this._test.getShaderExpression(e,t,this)),Array.isArray(this._value)&&(u=mB(this._value,e,t,this)),l){case Hk.VARIABLE:if(uB(this))return;return gB(u,e);case Hk.UNARY:if("Boolean"===u)return"bool("+r+")";if("Number"===u)return"float("+r+")";if("round"===u)return"floor("+r+" + 0.5)";if(Object(o.a)(Kk[u]))return u+"("+r+")";if("isNaN"===u)return"("+r+" != "+r+")";if("isFinite"===u)return"(abs("+r+") < czm_infinity)";if("String"===u||"isExactClass"===u||"isClass"===u||"getExactClassName"===u)throw new de.a('Error generating style shader: "'+u+'" is not supported.');return Object(o.a)(Kk[u])?u+"("+r+")":u+r;case Hk.BINARY:return"%"===u?"mod("+r+", "+s+")":"==="===u?"("+r+" == "+s+")":"!=="===u?"("+r+" != "+s+")":"atan2"===u?"atan("+r+", "+s+")":Object(o.a)(Qk[u])?u+"("+r+", "+s+")":"("+r+" "+u+" "+s+")";case Hk.TERNARY:if(Object(o.a)(Zk[u]))return u+"("+r+", "+s+", "+c+")";break;case Hk.CONDITIONAL:return"("+c+" ? "+r+" : "+s+")";case Hk.MEMBER:return uB(this._left)?gB(s,e):"r"===s||"x"===s||"0.0"===s?r+"[0]":"g"===s||"y"===s||"1.0"===s?r+"[1]":"b"===s||"z"===s||"2.0"===s?r+"[2]":"a"===s||"w"===s||"3.0"===s?r+"[3]":r+"[int("+s+")]";case Hk.FUNCTION_CALL:throw new de.a('Error generating style shader: "'+u+'" is not supported.');case Hk.ARRAY:if(4===u.length)return"vec4("+u[0]+", "+u[1]+", "+u[2]+", "+u[3]+")";if(3===u.length)return"vec3("+u[0]+", "+u[1]+", "+u[2]+")";if(2===u.length)return"vec2("+u[0]+", "+u[1]+")";throw new de.a("Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.");case Hk.REGEX:throw new de.a("Error generating style shader: Regular expressions are not supported.");case Hk.VARIABLE_IN_STRING:throw new de.a("Error generating style shader: Converting a variable to a string is not supported.");case Hk.LITERAL_NULL:return"czm_infinity";case Hk.LITERAL_BOOLEAN:return u?"true":"false";case Hk.LITERAL_NUMBER:return fB(u);case Hk.LITERAL_STRING:if(Object(o.a)(n)&&n._type===Hk.MEMBER&&("r"===u||"g"===u||"b"===u||"a"===u||"x"===u||"y"===u||"z"===u||"w"===u||uB(n._left)))return u;if(i=Hf.fromCssColorString(u,Xk),Object(o.a)(i))return function(e){return"vec3("+fB(e.red)+", "+fB(e.green)+", "+fB(e.blue)+")"}(i);throw new de.a("Error generating style shader: String literals are not supported.");case Hk.LITERAL_COLOR:var h=r;if("color"===u){if(!Object(o.a)(h))return"vec4(1.0)";if(h.length>1){var d=h[0],f=h[1];return"1.0"!==f&&(t.translucent=!0),"vec4("+d+", "+f+")"}return"vec4("+h[0]+", 1.0)"}if("rgb"===u)return i=dB(this),Object(o.a)(i)?pB(i):"vec4("+h[0]+" / 255.0, "+h[1]+" / 255.0, "+h[2]+" / 255.0, 1.0)";if("rgba"===u)return"1.0"!==h[3]&&(t.translucent=!0),i=dB(this),Object(o.a)(i)?pB(i):"vec4("+h[0]+" / 255.0, "+h[1]+" / 255.0, "+h[2]+" / 255.0, "+h[3]+")";if("hsl"===u)return i=hB(this),Object(o.a)(i)?pB(i):"vec4(czm_HSLToRGB(vec3("+h[0]+", "+h[1]+", "+h[2]+")), 1.0)";if("hsla"===u)return i=hB(this),Object(o.a)(i)?(1!==i.alpha&&(t.translucent=!0),pB(i)):("1.0"!==h[3]&&(t.translucent=!0),"vec4(czm_HSLToRGB(vec3("+h[0]+", "+h[1]+", "+h[2]+")), "+h[3]+")");break;case Hk.LITERAL_VECTOR:if(!Object(o.a)(r))throw new a.a("left should always be defined for type ExpressionNodeType.LITERAL_VECTOR");for(var p=r.length,m=u+"(",g=0;g<p;++g)m+=r[g],g<p-1&&(m+=", ");return m+=")";case Hk.LITERAL_REGEX:throw new de.a("Error generating style shader: Regular expressions are not supported.");case Hk.LITERAL_UNDEFINED:return"czm_infinity";case Hk.BUILTIN_VARIABLE:if("tiles3d_tileset_time"===u)return"u_time"}};var vB=Vk;function _B(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=Object(r.a)(e.center,O.ZERO),this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=Hf.clone(Hf.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=Object(r.a)(e.classificationType,JM.BOTH),this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};for(var t=this._batchIds.length,n=0;n<t;++n){var i=this._batchIds[n];this._batchIdLookUp[i]=n}}Object.defineProperties(_B.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}}});var bB={position:0,a_batchId:1};function yB(e){var t=e?XL.EQUAL:XL.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:t,frontOperation:{fail:QL.KEEP,zFail:QL.DECREMENT_WRAP,zPass:QL.KEEP},backFunction:t,backOperation:{fail:QL.KEEP,zFail:QL.INCREMENT_WRAP,zPass:QL.KEEP},reference:JL.CESIUM_3D_TILE_MASK,mask:JL.CESIUM_3D_TILE_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:tR.LESS_OR_EQUAL},depthMask:!1}}var wB={stencilTest:{enabled:!0,frontFunction:XL.NOT_EQUAL,frontOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},backFunction:XL.NOT_EQUAL,backOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},reference:0,mask:JL.CLASSIFICATION_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:LP.ALPHA_BLEND},OB={stencilTest:{enabled:!0,frontFunction:XL.NOT_EQUAL,frontOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},backFunction:XL.NOT_EQUAL,backOperation:{fail:QL.ZERO,zFail:QL.ZERO,zPass:QL.ZERO},reference:0,mask:JL.CLASSIFICATION_MASK},stencilMask:JL.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};var CB=new Ae,EB=new O;function AB(e,t,n,i,r,o,a){for(var s=e.constructor.BYTES_PER_ELEMENT,c=o.length,l=0;l<c;++l){var u=a[o[l]],h=i[u],d=r[u],f=new e.constructor(e.buffer,s*h,d);t.set(f,n),i[u]=n,n+=d}return n}function xB(e,t,n,i,r,o,a){for(var s=e.bytesPerIndex,c=o.length,l=0;l<c;++l){var u=a[o[l]],h=i[u],d=r[u];t.copyFromBuffer(e,h*s,n*s,d*s),i[u]=n,n+=d}return n}function TB(e,t){return t.color.toRgba()-e.color.toRgba()}function SB(e,t){if(!e._batchDirty)return!1;for(var n=e._batchedIndices,i=n.length,r=!1,a={},s=0;s<i;++s){var c=n[s].color.toRgba();if(Object(o.a)(a[c])){r=!0;break}a[c]=!0}return r?r&&!e.forceRebatch&&e._framesSinceLastRebatch<120?void++e._framesSinceLastRebatch:(n.sort(TB),t.webgl2?function(e,t){var n=e._indexOffsets,i=e._indexCounts,r=e._batchIdLookUp,o=t.pop(),a=[o],s=e._va.indexBuffer,c=e._vaSwap.indexBuffer,l=xB(s,c,0,n,i,o.batchIds,r);for(o.offset=0,o.count=l;t.length>0;){var u=t.pop();if(Hf.equals(u.color,o.color))l=xB(s,c,l,n,i,u.batchIds,r),o.batchIds=o.batchIds.concat(u.batchIds),o.count=l-o.offset;else{var h=l;l=xB(s,c,l,n,i,u.batchIds,r),u.offset=h,u.count=l-h,a.push(u),o=u}}var d=e._va;e._va=e._vaSwap,e._vaSwap=d,e._batchedIndices=a}(e,n):function(e,t){var n=e._indices,i=e._indexOffsets,r=e._indexCounts,o=e._batchIdLookUp,a=new n.constructor(n.length),s=t.pop(),c=[s],l=AB(n,a,0,i,r,s.batchIds,o);for(s.offset=0,s.count=l;t.length>0;){var u=t.pop();if(Hf.equals(u.color,s.color))l=AB(n,a,l,i,r,u.batchIds,o),s.batchIds=s.batchIds.concat(u.batchIds),s.count=l-s.offset;else{var h=l;l=AB(n,a,l,i,r,u.batchIds,o),u.offset=h,u.count=l-h,c.push(u),s=u}}e._va.indexBuffer.copyFromArrayView(a),e._indices=a,e._batchedIndices=c}(e,n),e._framesSinceLastRebatch=0,e._batchDirty=!1,e._pickCommandsDirty=!0,e._wireframeDirty=!0,!0):(e._batchDirty=!1,!1)}_B.prototype.createFeatures=function(e,t){for(var n=this._batchIds,i=n.length,r=0;r<i;++r){var o=n[r];t[o]=new oz(e,o)}},_B.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};var DB=new Hf,PB=Hf.WHITE,IB=/\$/;function MB(e,t,n,i){var r,a,s=e.classificationType,c=s!==JM.CESIUM_3D_TILE,l=s!==JM.TERRAIN,u=t.commandList,h=n.length;for(a=0;a<h;++a)c&&((r=n[a]).pass=EI.TERRAIN_CLASSIFICATION,u.push(r)),l&&((r=n[a].derivedCommands.tileset).pass=EI.CESIUM_3D_TILE_CLASSIFICATION,u.push(r));if(t.invertClassification&&Object(o.a)(i))for(h=i.length,a=0;a<h;++a)u.push(i[a])}_B.prototype.applyStyle=function(e,t){if(Object(o.a)(e)){var n=e.color,i=n instanceof vB&&!IB.test(n.expression);this._updatingAllCommands=i;var r,a=this._batchIds,s=a.length;for(r=0;r<s;++r){var c=t[a[r]];c.color=Object(o.a)(e.color)?e.color.evaluateColor(c,DB):PB,c.show=!Object(o.a)(e.show)||e.show.evaluate(c)}if(i){var l=this._batchedIndices;for(s=l.length,r=0;r<s;++r)l[r].color=Hf.clone(Hf.WHITE);this._updatingAllCommands=!1,this._batchDirty=!0}}else!function(e,t){e._updatingAllCommands=!0;var n,i=e._batchIds,r=i.length;for(n=0;n<r;++n){var o=t[i[n]];o.show=!0,o.color=Hf.WHITE}var a=e._batchedIndices;for(r=a.length,n=0;n<r;++n)a[n].color=Hf.clone(Hf.WHITE);e._updatingAllCommands=!1,e._batchDirty=!0}(this,t)},_B.prototype.updateCommands=function(e,t){if(!this._updatingAllCommands){var n=this._batchIdLookUp,i=n[e];if(Object(o.a)(i)){var r,a=this._indexOffsets,s=this._indexCounts,c=a[i],l=s[i],u=this._batchedIndices,h=u.length;for(r=0;r<h;++r){var d=u[r].offset,f=u[r].count;if(c>=d&&c<d+f)break}u.push(new Nk({color:Hf.clone(t),offset:c,count:l,batchIds:[e]}));for(var p=[],m=[],g=u[r].batchIds,v=g.length,_=0;_<v;++_){var b=g[_];if(b!==e)a[n[b]]<c?p.push(b):m.push(b)}0!==m.length&&u.push(new Nk({color:Hf.clone(u[r].color),offset:c+l,count:u[r].offset+u[r].count-(c+l),batchIds:m})),0!==p.length?(u[r].count=c-u[r].offset,u[r].batchIds=p):u.splice(r,1),this._batchDirty=!0}}},_B.prototype.update=function(e){var t,n=e.context;!function(e,t){if(!Object(o.a)(e._va)){var n=oR.createVertexBuffer({context:t,typedArray:e._positions,usage:iR.STATIC_DRAW}),i=oR.createVertexBuffer({context:t,typedArray:e._vertexBatchIds,usage:iR.STATIC_DRAW}),r=oR.createIndexBuffer({context:t,typedArray:e._indices,usage:iR.DYNAMIC_DRAW,indexDatatype:2===e._indices.BYTES_PER_ELEMENT?lc.UNSIGNED_SHORT:lc.UNSIGNED_INT}),a=[{index:0,vertexBuffer:n,componentDatatype:Ds.fromTypedArray(e._positions),componentsPerAttribute:3},{index:1,vertexBuffer:i,componentDatatype:Ds.fromTypedArray(e._vertexBatchIds),componentsPerAttribute:1}];e._va=new hR({context:t,attributes:a,indexBuffer:r}),t.webgl2&&(e._vaSwap=new hR({context:t,attributes:a,indexBuffer:oR.createIndexBuffer({context:t,sizeInBytes:r.sizeInBytes,usage:iR.DYNAMIC_DRAW,indexDatatype:r.indexDatatype})})),e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._verticesPromise=void 0}}(this,n),function(e,t){if(!Object(o.a)(e._sp)){var n=e._batchTable,i=Object(r.a)(e._attributeLocations,bB),a=e._pickId,s=e._vertexShaderSource,c=e._fragmentShaderSource;if(Object(o.a)(s))return e._sp=LM.fromCache({context:t,vertexShaderSource:s,fragmentShaderSource:c,attributeLocations:i}),e._spStencil=e._sp,c=(c=KM.replaceMain(c,"czm_non_pick_main"))+"void main() \n{ \n czm_non_pick_main(); \n gl_FragColor = "+a+"; \n} \n",void(e._spPick=LM.fromCache({context:t,vertexShaderSource:s,fragmentShaderSource:c,attributeLocations:i}));var l=n.getVertexShaderCallback(!1,"a_batchId",void 0)(zk),u=n.getFragmentShaderCallback()(QM,!1,void 0);a=n.getPickId();var h=new KM({sources:[l]}),d=new KM({defines:["VECTOR_TILE"],sources:[u]});e._sp=LM.fromCache({context:t,vertexShaderSource:h,fragmentShaderSource:d,attributeLocations:i}),h=new KM({sources:[zk]}),d=new KM({defines:["VECTOR_TILE"],sources:[QM]}),e._spStencil=LM.fromCache({context:t,vertexShaderSource:h,fragmentShaderSource:d,attributeLocations:i}),u=(u=KM.replaceMain(u,"czm_non_pick_main"))+"\nvoid main() \n{ \n czm_non_pick_main(); \n gl_FragColor = "+a+"; \n} \n";var f=new KM({sources:[l]}),p=new KM({defines:["VECTOR_TILE"],sources:[u]});e._spPick=LM.fromCache({context:t,vertexShaderSource:f,fragmentShaderSource:p,attributeLocations:i})}}(this,n),t=this,Object(o.a)(t._rsStencilDepthPass)||(t._rsStencilDepthPass=XI.fromCache(yB(!1)),t._rsStencilDepthPass3DTiles=XI.fromCache(yB(!0)),t._rsColorPass=XI.fromCache(wB),t._rsPickPass=XI.fromCache(OB)),function(e,t){if(!Object(o.a)(e._uniformMap)){var n={u_modifiedModelViewProjection:function(){var n=t.uniformState.view,i=t.uniformState.projection;return Ae.clone(n,CB),Ae.multiplyByPoint(CB,e._center,EB),Ae.setTranslation(CB,EB,CB),Ae.multiply(i,CB,CB),CB},u_highlightColor:function(){return e._highlightColor}};e._uniformMap=e._batchTable.getUniformMapCallback()(n)}}(this,n);var i=e.passes;i.render&&(function(e,t){var n=SB(e,t),i=e._commands,a=e._batchedIndices,s=a.length,c=2*s;if(!Object(o.a)(i)||n||i.length!==c){i.length=c;for(var l=e._va,u=e._sp,h=Object(r.a)(e._modelMatrix,Ae.IDENTITY),d=e._uniformMap,f=e._boundingVolume,p=0;p<s;++p){var m=a[p].offset,g=a[p].count,v=i[2*p];Object(o.a)(v)||(v=i[2*p]=new CI({owner:e})),v.vertexArray=l,v.modelMatrix=h,v.offset=m,v.count=g,v.renderState=e._rsStencilDepthPass,v.shaderProgram=u,v.uniformMap=d,v.boundingVolume=f,v.cull=!1,v.pass=EI.TERRAIN_CLASSIFICATION;var _=CI.shallowClone(v,v.derivedCommands.tileset);_.renderState=e._rsStencilDepthPass3DTiles,_.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,v.derivedCommands.tileset=_;var b=i[2*p+1];Object(o.a)(b)||(b=i[2*p+1]=new CI({owner:e})),b.vertexArray=l,b.modelMatrix=h,b.offset=m,b.count=g,b.renderState=e._rsColorPass,b.shaderProgram=u,b.uniformMap=d,b.boundingVolume=f,b.cull=!1,b.pass=EI.TERRAIN_CLASSIFICATION;var y=CI.shallowClone(b,b.derivedCommands.tileset);y.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,b.derivedCommands.tileset=y}e._commandsDirty=!0}}(this,n),function(e,t){if(e.classificationType!==JM.TERRAIN&&t.invertClassification&&(!Object(o.a)(e._commandsIgnoreShow)||e._commandsDirty)){for(var n=e._commands,i=e._commandsIgnoreShow,r=e._spStencil,a=n.length,s=i.length=a/2,c=0,l=0;l<s;++l){var u=i[l]=CI.shallowClone(n[c],i[l]);u.shaderProgram=r,u.pass=EI.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,c+=2}e._commandsDirty=!1}}(this,e),function(e){var t=e.debugWireframe===e._debugWireframe;if(!(t=t&&!(e.debugWireframe&&e._wireframeDirty))){var n,i;Object(o.a)(e._rsWireframe)||(e._rsWireframe=XI.fromCache({})),e.debugWireframe?(n=e._rsWireframe,i=xl.LINES):(n=e._rsColorPass,i=xl.TRIANGLES);for(var r=e._commands,a=r.length,s=0;s<a;s+=2){var c=r[s+1];c.renderState=n,c.primitiveType=i}e._debugWireframe=e.debugWireframe,e._wireframeDirty=!1}}(this),this._debugWireframe?function(e,t){for(var n=e.commandList,i=t.length,r=0;r<i;r+=2){var o=t[r+1];o.pass=EI.OPAQUE,n.push(o)}}(e,this._commands):MB(this,e,this._commands,this._commandsIgnoreShow)),i.pick&&(!function(e){if(e._pickCommandsDirty){var t=e._indexOffsets.length,n=e._pickCommands;n.length=2*t;for(var i=e._va,a=e._spStencil,s=e._spPick,c=Object(r.a)(e._modelMatrix,Ae.IDENTITY),l=e._uniformMap,u=0;u<t;++u){var h=e._indexOffsets[u],d=e._indexCounts[u],f=Object(o.a)(e._boundingVolumes)?e._boundingVolumes[u]:e.boundingVolume,p=n[2*u];Object(o.a)(p)||(p=n[2*u]=new CI({owner:e,pickOnly:!0})),p.vertexArray=i,p.modelMatrix=c,p.offset=h,p.count=d,p.renderState=e._rsStencilDepthPass,p.shaderProgram=a,p.uniformMap=l,p.boundingVolume=f,p.pass=EI.TERRAIN_CLASSIFICATION;var m=CI.shallowClone(p,p.derivedCommands.tileset);m.renderState=e._rsStencilDepthPass3DTiles,m.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,p.derivedCommands.tileset=m;var g=n[2*u+1];Object(o.a)(g)||(g=n[2*u+1]=new CI({owner:e,pickOnly:!0})),g.vertexArray=i,g.modelMatrix=c,g.offset=h,g.count=d,g.renderState=e._rsPickPass,g.shaderProgram=s,g.uniformMap=l,g.boundingVolume=f,g.pass=EI.TERRAIN_CLASSIFICATION;var v=CI.shallowClone(g,g.derivedCommands.tileset);v.pass=EI.CESIUM_3D_TILE_CLASSIFICATION,g.derivedCommands.tileset=v}e._pickCommandsDirty=!1}}(this),MB(this,e,this._pickCommands))},_B.prototype.isDestroyed=function(){return!1},_B.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaSwap=this._vaSwap&&this._vaSwap.destroy(),Ks(this)};var RB=_B,LB=new O,jB=Tk.ModelState;function FB(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).gltf;if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),!(t instanceof Uint8Array))throw new de.a("Only binary glTF is supported as a classifier.");t=Oz(t),tk(t),gz(t),Dk(t),Fk(t),dz.buffer(t,(function(e){if(!Object(o.a)(e.extras._pipeline.source))throw new de.a("Buffer data must be embedded in the binary gltf.")}));var n=t.nodes,i=t.meshes,a=n[0].mesh;if(1!==n.length||!Object(o.a)(a))throw new de.a("Only one node is supported for classification and it must have a mesh.");if(1!==i.length)throw new de.a("Only one mesh is supported when using b3dm for classification.");var s=i[0].primitives;if(1!==s.length)throw new de.a("Only one primitive per mesh is supported when using b3dm for classification.");var c=s[0].attributes.POSITION;if(!Object(o.a)(c))throw new de.a("The mesh must have a position attribute.");var l=s[0].attributes._BATCHID;if(!Object(o.a)(l))throw new de.a("The mesh must have a batch id attribute.");this._gltf=t,this.show=Object(r.a)(e.show,!0),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=Ae.clone(this.modelMatrix),this._ready=!1,this._readyPromise=Yt.a.defer(),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._debugShowBoundingVolume=!1,this.debugWireframe=Object(r.a)(e.debugWireframe,!1),this._debugWireframe=!1,this._classificationType=e.classificationType,this._vertexShaderLoaded=e.vertexShaderLoaded,this._classificationShaderLoaded=e.classificationShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._pickIdLoaded=e.pickIdLoaded,this._ignoreCommands=Object(r.a)(e.ignoreCommands,!1),this._upAxis=Object(r.a)(e.upAxis,ON.Y),this._batchTable=e.batchTable,this._computedModelMatrix=new Ae,this._initialRadius=void 0,this._boundingSphere=void 0,this._scaledBoundingSphere=new gt,this._state=jB.NEEDS_LOAD,this._loadResources=void 0,this._mode=void 0,this._dirty=!1,this._nodeMatrix=new Ae,this._primitive=void 0,this._extensionsUsed=void 0,this._extensionsRequired=void 0,this._quantizedUniforms=void 0,this._buffers={},this._vertexArray=void 0,this._shaderProgram=void 0,this._uniformMap=void 0,this._geometryByteLength=0,this._trianglesLength=0,this._rtcCenter=void 0,this._rtcCenterEye=void 0,this._rtcCenter3D=void 0,this._rtcCenter2D=void 0}function NB(e,t){var n=t._loadResources,i=t.gltf.bufferViews[e],r=n.getBuffer(i);t._buffers[e]=r,t._geometryByteLength+=r.byteLength}function zB(e,t,n){var i=n._loadResources,r=n.gltf.bufferViews[e],o={typedArray:i.getBuffer(r),indexDatatype:t};n._buffers[e]=o,n._geometryByteLength+=o.typedArray.byteLength}function kB(e,t){return Object(o.a)(t)&&(e=t(e)),e}function BB(e){var t=e.gltf,n=Tk.getAttributeOrUniformBySemantic(t,"POSITION"),i=Tk.getAttributeOrUniformBySemantic(t,"_BATCHID"),r={};r[n]=0,r[i]=1;var a,s,c=Tk.getAttributeOrUniformBySemantic(t,"MODELVIEWPROJECTION");if(Object(o.a)(c))a="uniform mat4 "+c+";\n",s=c+" * vec4("+n+", 1.0)";else{var l=Tk.getAttributeOrUniformBySemantic(t,"PROJECTION"),u=Tk.getAttributeOrUniformBySemantic(t,"MODELVIEW");Object(o.a)(u)||(u=Tk.getAttributeOrUniformBySemantic(t,"CESIUM_RTC_MODELVIEW")),a="uniform mat4 "+u+";\nuniform mat4 "+l+";\n",s=l+" * "+u+" * vec4("+n+", 1.0)"}var h="attribute vec3 "+n+";\nattribute float "+i+";\n"+a+"void main() {\n"+(" vec4 positionInClipCoords = "+s+";\n")+" gl_Position = czm_depthClamp(positionInClipCoords);\n}\n";e.extensionsUsed.WEB3D_quantized_attributes&&(h=function(e,t){var n=t.gltf.meshes[0].primitives[0],i=Tk.modifyShaderForQuantizedAttributes(t.gltf,n,e);return t._quantizedUniforms=i.uniforms,i.shader}(h,e));var d=kB(h,e._vertexShaderLoaded),f=kB("#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\nvoid main() \n{ \n gl_FragColor = vec4(1.0); \n czm_writeDepthClamp();\n}\n",e._classificationShaderLoaded);e._shaderProgram={vertexShaderSource:d,fragmentShaderSource:f,attributeLocations:r}}Object.defineProperties(FB.prototype,{gltf:{get:function(){return this._gltf}},boundingSphere:{get:function(){if(this._state!==jB.LOADED)throw new a.a("The model is not loaded. Use ClassificationModel.readyPromise or wait for ClassificationModel.ready to be true.");var e=this.modelMatrix,t=Ae.getScale(e,LB),n=this._scaledBoundingSphere;return n.center=O.multiplyComponents(this._boundingSphere.center,t,n.center),n.radius=O.maximumComponent(t)*this._initialRadius,Object(o.a)(this._rtcCenter)&&O.add(this._rtcCenter,n.center,n.center),n}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},dirty:{get:function(){return this._dirty}},extensionsUsed:{get:function(){return Object(o.a)(this._extensionsUsed)||(this._extensionsUsed=Tk.getUsedExtensions(this.gltf)),this._extensionsUsed}},extensionsRequired:{get:function(){return Object(o.a)(this._extensionsRequired)||(this._extensionsRequired=Tk.getRequiredExtensions(this.gltf)),this._extensionsRequired}},upAxis:{get:function(){return this._upAxis}},trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},texturesByteLength:{get:function(){return 0}},classificationType:{get:function(){return this._classificationType}}});var HB={PROJECTION:function(e,t){return Tk.getGltfSemanticUniforms().PROJECTION(e,t)},MODELVIEW:function(e,t){return Tk.getGltfSemanticUniforms().MODELVIEW(e,t)},CESIUM_RTC_MODELVIEW:function(e,t){return Tk.getGltfSemanticUniforms().CESIUM_RTC_MODELVIEW(e,t)},MODELVIEWPROJECTION:function(e,t){return Tk.getGltfSemanticUniforms().MODELVIEWPROJECTION(e,t)}};function VB(e){var t,n,i=e._batchTable,r=e._uniformMap,a=e._vertexArray,s=e.gltf,c=s.accessors,l=s.meshes[0].primitives[0],u=c[l.indices],h=l.attributes.POSITION,d=Tk.getAccessorMinMax(s,h),f=gt.fromCornerPoints(O.fromArray(d.min),O.fromArray(d.max));Object(o.a)(u)?(n=u.count,t=u.byteOffset/lc.getSizeInBytes(u.componentType)):(n=c[l.attributes.POSITION].count,t=0);if(e._trianglesLength+=function(e,t){switch(e.mode){case xl.TRIANGLES:return t/3;case xl.TRIANGLE_STRIP:case xl.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}(l,n),Object(o.a)(e._uniformMapLoaded)&&(r=e._uniformMapLoaded(r)),e.extensionsUsed.WEB3D_quantized_attributes){var p=function(e,t){return Tk.createUniformsForQuantizedAttributes(e.gltf,t,e._quantizedUniforms)}(e,l);r=Object(Wf.a)(r,p)}var m=a.attributes.POSITION,g=m.componentDatatype,v=m.vertexBuffer,_=v.byteOffset,b=v.byteLength/Ds.getSizeInBytes(g),y=Ds.createArrayBufferView(g,v.buffer,_,b);g=(m=a.attributes._BATCHID).componentDatatype,_=(v=m.vertexBuffer).byteOffset,b=v.byteLength/Ds.getSizeInBytes(g);var w,C=Ds.createArrayBufferView(g,v.buffer,_,b),E=a.indexBuffer.typedArray;w=a.indexBuffer.indexDatatype===lc.UNSIGNED_SHORT?new Uint16Array(E.buffer,E.byteOffset,E.byteLength/Uint16Array.BYTES_PER_ELEMENT):new Uint32Array(E.buffer,E.byteOffset,E.byteLength/Uint32Array.BYTES_PER_ELEMENT),y=ol(y);var A,x,T,S=[],D=[],P=[],I=[],M=(C=ol(C))[(w=ol(w,t,t+n))[0]];S.push(M),P.push(0);for(var R=w.length,L=1;L<R;++L)(A=C[w[L]])!==M&&(T=L-(x=P[P.length-1]),S.push(A),D.push(T),P.push(L),I.push(new Nk({offset:x,count:T,batchIds:[M],color:Hf.WHITE})),M=A);T=R-(x=P[P.length-1]),D.push(T),I.push(new Nk({offset:x,count:T,batchIds:[M],color:Hf.WHITE}));var j=e._shaderProgram,F=j.vertexShaderSource,N=j.fragmentShaderSource,z=j.attributeLocations,k=Object(o.a)(e._pickIdLoaded)?e._pickIdLoaded():void 0;e._primitive=new RB({classificationType:e._classificationType,positions:y,indices:w,indexOffsets:P,indexCounts:D,batchIds:S,vertexBatchIds:C,batchedIndices:I,batchTable:i,boundingVolume:new gt,_vertexShaderSource:F,_fragmentShaderSource:N,_attributeLocations:z,_uniformMap:r,_pickId:k,_modelMatrix:new Ae,_boundingSphere:f}),e._buffers=void 0,e._vertexArray=void 0,e._shaderProgram=void 0,e._uniformMap=void 0}function UB(e,t){var n=t.context;Tk.checkSupportedGlExtensions(e.gltf.glExtensionsUsed,n),function(e){var t=e._loadResources;if(0===t.pendingBufferLoads){for(var n=t.vertexBuffersToCreate,i=t.indexBuffersToCreate;n.length>0;)NB(n.dequeue(),e);for(;i.length>0;){var r=i.dequeue();zB(r.id,r.componentType,e)}}}(e),BB(e),function(e){if(e._loadResources.finishedBuffersCreation()&&!Object(o.a)(e._vertexArray)){var t,n=e._buffers,i=e.gltf,r=i.accessors,a=i.meshes[0].primitives[0],s={POSITION:0,_BATCHID:1},c={};if(dz.meshPrimitiveAttribute(a,(function(e,t){var a=s[t];if(Object(o.a)(a)){var l=r[e];c[t]={index:a,vertexBuffer:n[l.bufferView],componentsPerAttribute:fz(l.type),componentDatatype:l.componentType,offsetInBytes:l.byteOffset,strideInBytes:pz(i,l)}}})),Object(o.a)(a.indices)){var l=r[a.indices];t=n[l.bufferView]}e._vertexArray={attributes:c,indexBuffer:t}}}(e),function(e,t){if(!Object(o.a)(e._uniformMap)){var n={};dz.technique(e.gltf,(function(i){dz.techniqueUniform(i,(function(i,r){Object(o.a)(i.semantic)&&Object(o.a)(HB[i.semantic])&&(n[r]=HB[i.semantic](t.uniformState,e))}))})),e._uniformMap=n}}(e,n),function(e){if(e._loadResources.finished()&&!Object(o.a)(e._primitive)){var t=e.gltf.nodes[0];e._nodeMatrix=Tk.getTransform(t,e._nodeMatrix),VB(e)}}(e)}var WB=new he,GB=new Ae;FB.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)},FB.prototype.update=function(e){if(e.mode!==IR.MORPHING)if(oo.supportsWebP.initialized){var t=oo.supportsWebP();if(this._state===jB.NEEDS_LOAD&&Object(o.a)(this.gltf)&&(this._state=jB.LOADING,this._state!==jB.FAILED)){var n=this.gltf.extensions;if(Object(o.a)(n)&&Object(o.a)(n.CESIUM_RTC)){var i=O.fromArray(n.CESIUM_RTC.center);if(!O.equals(i,O.ZERO)){this._rtcCenter3D=i;var r=e.mapProjection,a=r.ellipsoid.cartesianToCartographic(this._rtcCenter3D),s=r.project(a);O.fromElements(s.z,s.x,s.y,s),this._rtcCenter2D=s,this._rtcCenterEye=new O,this._rtcCenter=this._rtcCenter3D}}this._loadResources=new ik,Tk.parseBuffers(this)}var c=this._loadResources,l=!1;this._state===jB.LOADING&&(0===c.pendingBufferLoads&&(Tk.checkSupportedExtensions(this.extensionsRequired,t),function(e){var t=e.gltf,n=e._loadResources;dz.buffer(t,(function(e,t){n.buffers[t]=e.extras._pipeline.source}))}(this),function(e){var t=e.gltf.bufferViews,n=e._loadResources.vertexBuffersToCreate;dz.bufferView(e.gltf,(function(e,t){e.target===Ts.ARRAY_BUFFER&&n.enqueue(t)}));var i=e._loadResources.indexBuffersToCreate,r={};dz.accessor(e.gltf,(function(e){var n=e.bufferView;t[n].target!==Ts.ELEMENT_ARRAY_BUFFER||Object(o.a)(r[n])||(r[n]=!0,i.enqueue({id:n,componentType:e.componentType}))}))}(this),this._boundingSphere=Tk.computeBoundingSphere(this),this._initialRadius=this._boundingSphere.radius,UB(this,e)),c.finished()&&(this._state=jB.LOADED,l=!0)),Object(o.a)(c)&&this._state===jB.LOADED&&(l||UB(this,e),c.finished()&&(this._loadResources=void 0));var u=this.show;if(u&&this._state===jB.LOADED||l){this._dirty=!1;var h=this.modelMatrix,d=e.mode!==this._mode;this._mode=e.mode;var f=!Ae.equals(this._modelMatrix,h)||d;if(f||l){Ae.clone(h,this._modelMatrix);var p=this._computedModelMatrix;Ae.clone(h,p),this._upAxis===ON.Y?Ae.multiplyTransformation(p,ON.Y_UP_TO_Z_UP,p):this._upAxis===ON.X&&Ae.multiplyTransformation(p,ON.X_UP_TO_Z_UP,p)}(f||l)&&(!function(e,t,n,i){var r=e._computedModelMatrix;if(e._mode!==IR.SCENE3D&&!e._ignoreCommands){var a=Ae.getColumn(r,3,WB);if(he.equals(a,he.UNIT_W)){var s=e.boundingSphere.center,c=ya.wgs84To2DModelMatrix(i,s,GB);r=Ae.multiply(c,r,GB),Object(o.a)(e._rtcCenter)&&(Ae.setTranslation(r,he.UNIT_W,r),e._rtcCenter=e._rtcCenter2D)}else r=ya.basisTo2D(i,r,GB),e._rtcCenter=e._rtcCenter3D}var l=e._primitive;(t||n)&&(Ae.multiplyTransformation(r,e._nodeMatrix,l._modelMatrix),gt.transform(l._boundingSphere,l._modelMatrix,l._boundingVolume),Object(o.a)(e._rtcCenter)&&O.add(e._rtcCenter,l._boundingVolume.center,l._boundingVolume.center))}(this,f,l,e.mapProjection),this._dirty=!0)}if(l){var m=this;e.afterRender.push((function(){m._ready=!0,m._readyPromise.resolve(m)}))}else u&&!this._ignoreCommands&&(this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.debugWireframe=this.debugWireframe,this._primitive.update(e))}else oo.supportsWebP.initialize()},FB.prototype.isDestroyed=function(){return!1},FB.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),Ks(this)};var qB=FB;function YB(e,t){i.a.typeOf.object("normal",e),i.a.typeOf.number("distance",t),this._distance=t,this._normal=new $B(e,this),this.onChangeCallback=void 0,this.index=-1}function $B(e,t){this._clippingPlane=t,this._cartesian3=O.clone(e)}Object.defineProperties(YB.prototype,{distance:{get:function(){return this._distance},set:function(e){i.a.typeOf.number("value",e),Object(o.a)(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){i.a.typeOf.object("value",e),Object(o.a)(this.onChangeCallback)&&!O.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),O.clone(e,this._normal._cartesian3)}}}),YB.fromPlane=function(e,t){return i.a.typeOf.object("plane",e),Object(o.a)(t)?(t.normal=e.normal,t.distance=e.distance):t=new YB(e.normal,e.distance),t},YB.clone=function(e,t){return Object(o.a)(t)?(t.normal=e.normal,t.distance=e.distance,t):new YB(e.normal,e.distance)},Object.defineProperties($B.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){i.a.typeOf.number("value",e),Object(o.a)(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.x&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.x=e}},y:{get:function(){return this._cartesian3.y},set:function(e){i.a.typeOf.number("value",e),Object(o.a)(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.y&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.y=e}},z:{get:function(){return this._cartesian3.z},set:function(e){i.a.typeOf.number("value",e),Object(o.a)(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var XB=YB;function KB(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=Object(r.a)(e.enabled,!0),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this.edgeColor=Hf.clone(Object(r.a)(e.edgeColor,Hf.WHITE)),this.edgeWidth=Object(r.a)(e.edgeWidth,0),this.planeAdded=new wn.a,this.planeRemoved=new wn.a,this._owner=void 0;var t=Object(r.a)(e.unionClippingRegions,!1);this._unionClippingRegions=t,this._testIntersection=t?QB:ZB,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;var n=e.planes;if(Object(o.a)(n))for(var i=n.length,a=0;a<i;++a)this.add(n[a])}function QB(e){return e===Y.OUTSIDE}function ZB(e){return e===Y.INSIDE}function JB(e,t){e._multipleDirtyPlanes=e._multipleDirtyPlanes||-1!==e._dirtyIndex&&e._dirtyIndex!==t,e._dirtyIndex=t}function eH(e,t){for(var n=e.length,i=0;i<n;++i)if(Fi.equals(e[i],t))return i;return-1}Object.defineProperties(KB.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?QB:ZB)}},enabled:{get:function(){return this._enabled},set:function(e){this._enabled!==e&&(this._enabled=e)}},texture:{get:function(){return this._clippingPlanesTexture}},owner:{get:function(){return this._owner}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}}),KB.prototype.add=function(e){var t=this._planes.length,n=this;e.onChangeCallback=function(e){JB(n,e)},e.index=t,JB(this,t),this._planes.push(e),this.planeAdded.raiseEvent(e,t)},KB.prototype.get=function(e){return i.a.typeOf.number("index",e),this._planes[e]},KB.prototype.contains=function(e){return-1!==eH(this._planes,e)},KB.prototype.remove=function(e){var t=this._planes,n=eH(t,e);if(-1===n)return!1;e instanceof XB&&(e.onChangeCallback=void 0,e.index=-1);for(var i=t.length-1,r=n;r<i;++r){var o=t[r+1];t[r]=o,o instanceof XB&&(o.index=r)}return this._multipleDirtyPlanes=!0,t.length=i,this.planeRemoved.raiseEvent(e,n),!0},KB.prototype.removeAll=function(){for(var e=this._planes,t=e.length,n=0;n<t;++n){var i=e[n];i instanceof XB&&(i.onChangeCallback=void 0,i.index=-1),this.planeRemoved.raiseEvent(i,n)}this._multipleDirtyPlanes=!0,this._planes=[]};var tH=new he,nH=new he;function iH(e,t,n){for(var i=e._uint8View,r=e._planes,o=0,a=t;a<n;++a){var s=r[a],c=xs.octEncodeToCartesian4(s.normal,nH);i[o]=c.x,i[o+1]=c.y,i[o+2]=c.z,i[o+3]=c.w;var l=he.packFloat(s.distance,tH);i[o+4]=l.x,i[o+5]=l.y,i[o+6]=l.z,i[o+7]=l.w,o+=8}}function rH(e,t,n){for(var i=e._float32View,r=e._planes,o=0,a=t;a<n;++a){var s=r[a],c=s.normal;i[o]=c.x,i[o+1]=c.y,i[o+2]=c.z,i[o+3]=s.distance,o+=4}}function oH(e,t){var n=BP.maximumTextureSize;return t.x=Math.min(e,n),t.y=Math.ceil(e/t.x),t}var aH=new Mt;KB.prototype.update=function(e){var t=this._clippingPlanesTexture,n=e.context,i=KB.useFloatTexture(n),r=i?this.length:2*this.length;if(Object(o.a)(t)){var a=t.width*t.height;(a<r||r<.25*a)&&(t.destroy(),t=void 0,this._clippingPlanesTexture=void 0)}if(0!==this.length){if(!Object(o.a)(t)){var s=oH(r,aH);s.y*=2,i?(t=new nI({context:n,width:s.x,height:s.y,pixelFormat:FC.RGBA,pixelDatatype:LC.FLOAT,sampler:ZP.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4)):(t=new nI({context:n,width:s.x,height:s.y,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST,flipY:!1}),this._uint8View=new Uint8Array(s.x*s.y*4)),this._clippingPlanesTexture=t,this._multipleDirtyPlanes=!0}var c=this._dirtyIndex;if(this._multipleDirtyPlanes||-1!==c){if(this._multipleDirtyPlanes)i?(rH(this,0,this._planes.length),t.copyFrom({width:t.width,height:t.height,arrayBufferView:this._float32View})):(iH(this,0,this._planes.length),t.copyFrom({width:t.width,height:t.height,arrayBufferView:this._uint8View}));else{var l=0,u=0;i?(u=Math.floor(c/t.width),l=Math.floor(c-u*t.width),rH(this,c,c+1),t.copyFrom({width:1,height:1,arrayBufferView:this._float32View},l,u)):(u=Math.floor(2*c/t.width),l=Math.floor(2*c-u*t.width),iH(this,c,c+1),t.copyFrom({width:2,height:1,arrayBufferView:this._uint8View},l,u))}this._multipleDirtyPlanes=!1,this._dirtyIndex=-1}}};var sH=new Ae,cH=new Fi(O.UNIT_X,0);KB.prototype.computeIntersectionWithBoundingVolume=function(e,t){var n=this._planes,i=n.length,r=this.modelMatrix;Object(o.a)(t)&&(r=Ae.multiply(t,r,sH));var a=Y.INSIDE;!this.unionClippingRegions&&i>0&&(a=Y.OUTSIDE);for(var s=0;s<i;++s){var c=n[s];Fi.transform(c,r,cH);var l=e.intersectPlane(cH);if(l===Y.INTERSECTING)a=l;else if(this._testIntersection(l))return l}return a},KB.setOwner=function(e,t,n){if(e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),Object(o.a)(e))){if(Object(o.a)(e._owner))throw new a.a("ClippingPlaneCollection should only be assigned to one object");e._owner=t,t[n]=e}},KB.useFloatTexture=function(e){return e.floatingPointTexture},KB.getTextureResolution=function(e,t,n){var i=e.texture;if(Object(o.a)(i))return n.x=i.width,n.y=i.height,n;var r=oH(KB.useFloatTexture(t)?e.length:2*e.length,n);return r.y*=2,r},KB.prototype.isDestroyed=function(){return!1},KB.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),Ks(this)};var lH=KB,uH={HIGHLIGHT:0,REPLACE:1,MIX:2,getColorBlend:function(e,t){return e===uH.HIGHLIGHT?0:e===uH.REPLACE?1:e===uH.MIX?d.clamp(t,d.EPSILON4,1):void 0}},hH=Object.freeze(uH);function dH(){}function fH(e,t){var n="runtime."+Object.keys(e.createdBufferViews).length,i=e.buffers,r=Object.keys(i).length;return i[r]=t,e.createdBufferViews[n]={buffer:r,byteOffset:0,byteLength:t.byteLength},n}function pH(e,t,n){var i=t._loadResources,r=fH(i,e);return i.vertexBuffersToCreate.enqueue(r),r}function mH(e,t,n,i){if(dH._taskProcessorReady){var r=n.primitivesToDecode.peek();if(Object(o.a)(r)){var a=e.scheduleTask(r,[r.array.buffer]);if(Object(o.a)(a))return n.activeDecodingTasks++,n.primitivesToDecode.dequeue(),a.then((function(e){n.activeDecodingTasks--;var i=function(e,t,n){var i=e.typedArray,r=t._loadResources,o=fH(r,i);return r.indexBuffersToCreate.enqueue({id:o,componentType:Ds.fromTypedArray(i)}),{bufferViewId:o,numberOfIndices:e.numberOfIndices}}(e.indexArray,t),o={},a=e.attributeData;for(var s in a)if(a.hasOwnProperty(s)){var c=a[s],l=pH(c.array,t),u=c.data;u.bufferView=l,o[s]=u}t._decodedData[r.mesh+".primitive."+r.primitive]={bufferView:i.bufferViewId,numberOfIndices:i.numberOfIndices,attributes:o}}))}}}dH._maxDecodingConcurrency=Math.max(oo.hardwareConcurrency-1,1),dH._decoderTaskProcessor=void 0,dH._taskProcessorReady=!1,dH._getDecoderTaskProcessor=function(){if(!Object(o.a)(dH._decoderTaskProcessor)){var e=new ac("decodeDraco",dH._maxDecodingConcurrency);e.initWebAssemblyModule({modulePath:"ThirdParty/Workers/draco_wasm_wrapper.js",wasmBinaryFile:"ThirdParty/draco_decoder.wasm",fallbackModulePath:"ThirdParty/Workers/draco_decoder.js"}).then((function(){dH._taskProcessorReady=!0})),dH._decoderTaskProcessor=e}return dH._decoderTaskProcessor},dH.hasExtension=function(e){return Object(o.a)(e.extensionsRequired.KHR_draco_mesh_compression)||Object(o.a)(e.extensionsUsed.KHR_draco_mesh_compression)},dH._decodedModelResourceCache=void 0,dH.parse=function(e,t){if(dH.hasExtension(e)){var n=e._loadResources,i=e.cacheKey;if(Object(o.a)(i)){Object(o.a)(dH._decodedModelResourceCache)||(Object(o.a)(t.cache.modelDecodingCache)||(t.cache.modelDecodingCache={}),dH._decodedModelResourceCache=t.cache.modelDecodingCache);var r=dH._decodedModelResourceCache[i];if(Object(o.a)(r))return r.count++,void(n.pendingDecodingCache=!0)}var a=e._dequantizeInShader,s=e.gltf;dz.mesh(s,(function(e,t){dz.meshPrimitive(e,(function(e,i){if(Object(o.a)(e.extensions)){var r=e.extensions.KHR_draco_mesh_compression;if(Object(o.a)(r)){var c=s.bufferViews[r.bufferView],l=ol(s.buffers[c.buffer].extras._pipeline.source,c.byteOffset,c.byteOffset+c.byteLength);n.primitivesToDecode.enqueue({mesh:t,primitive:i,array:l,bufferView:c,compressedAttributes:r.attributes,dequantizeInShader:a})}}}))}))}},dH.decodeModel=function(e,t){if(!dH.hasExtension(e))return Yt.a.resolve();var n=e._loadResources,i=e.cacheKey;if(Object(o.a)(i)&&Object(o.a)(dH._decodedModelResourceCache)){var r=dH._decodedModelResourceCache[i];if(Object(o.a)(r)&&n.pendingDecodingCache)return Object(Yt.a)(r.ready,(function(){e._decodedData=r.data,n.pendingDecodingCache=!1}));dH._decodedModelResourceCache[i]={ready:!1,count:1,data:void 0}}if(0===n.primitivesToDecode.length)return Yt.a.resolve();for(var a=dH._getDecoderTaskProcessor(),s=[],c=mH(a,e,n);Object(o.a)(c);)s.push(c),c=mH(a,e,n);return Yt.a.all(s)},dH.decodePointCloud=function(e){var t=dH._getDecoderTaskProcessor();if(dH._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])},dH.cacheDataForModel=function(e){var t=e.cacheKey;if(Object(o.a)(t)&&Object(o.a)(dH._decodedModelResourceCache)){var n=dH._decodedModelResourceCache[t];Object(o.a)(n)&&(n.ready=!0,n.data=e._decodedData)}},dH.destroyCachedDataForModel=function(e){var t=e.cacheKey;if(Object(o.a)(t)&&Object(o.a)(dH._decodedModelResourceCache)){var n=dH._decodedModelResourceCache[t];Object(o.a)(n)&&0===--n.count&&delete dH._decodedModelResourceCache[t]}};var gH=dH;var vH=function(e,t,n){return i.a.typeOf.string("samplerUniformName",e),i.a.typeOf.string("matrixUniformName",t),i.a.typeOf.string("styleUniformName",n)," float clipDistance = clip(gl_FragCoord, "+e+", "+t+"); \n vec4 clippingPlanesEdgeColor = vec4(1.0); \n clippingPlanesEdgeColor.rgb = "+n+".rgb; \n float clippingPlanesEdgeWidth = "+n+".a; \n if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) \n { \n gl_FragColor = clippingPlanesEdgeColor;\n } \n"},_H=new Mt;var bH=function(e,t){i.a.typeOf.object("clippingPlaneCollection",e),i.a.typeOf.object("context",t);var n=e.unionClippingRegions,r=e.length,o=lH.useFloatTexture(t),a=lH.getTextureResolution(e,t,_H),s=a.x,c=a.y,l=o?function(e,t){var n=1/t,i=1/e+"";-1===i.indexOf(".")&&(i+=".0");var r=n+"";-1===r.indexOf(".")&&(r+=".0");return"vec4 getClippingPlane(sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n int pixY = clippingPlaneNumber / "+e+";\n int pixX = clippingPlaneNumber - (pixY * "+e+");\n float u = (float(pixX) + 0.5) * "+i+";\n float v = (float(pixY) + 0.5) * "+r+";\n vec4 plane = texture2D(packedClippingPlanes, vec2(u, v));\n return czm_transformPlane(plane, transform);\n}\n"}(s,c):function(e,t){var n=1/t,i=1/e+"";-1===i.indexOf(".")&&(i+=".0");var r=n+"";-1===r.indexOf(".")&&(r+=".0");return"vec4 getClippingPlane(sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n int clippingPlaneStartIndex = clippingPlaneNumber * 2;\n int pixY = clippingPlaneStartIndex / "+e+";\n int pixX = clippingPlaneStartIndex - (pixY * "+e+");\n float u = (float(pixX) + 0.5) * "+i+";\n float v = (float(pixY) + 0.5) * "+r+";\n vec4 oct32 = texture2D(packedClippingPlanes, vec2(u, v)) * 255.0;\n vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);\n vec4 plane;\n plane.xyz = czm_octDecode(oct, 65535.0);\n plane.w = czm_unpackFloat(texture2D(packedClippingPlanes, vec2(u + "+i+", v)));\n return czm_transformPlane(plane, transform);\n}\n"}(s,c);return l+="\n",l+=n?function(e){return"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n vec4 position = czm_windowToEyeCoordinates(fragCoord);\n vec3 clipNormal = vec3(0.0);\n vec3 clipPosition = vec3(0.0);\n float clipAmount;\n float pixelWidth = czm_metersPerPixel(position);\n bool breakAndDiscard = false;\n for (int i = 0; i < "+e+"; ++i)\n {\n vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n clipNormal = clippingPlane.xyz;\n clipPosition = -clippingPlane.w * clipNormal;\n float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));\n if (amount <= 0.0)\n {\n breakAndDiscard = true;\n break;\n }\n }\n if (breakAndDiscard) {\n discard;\n }\n return clipAmount;\n}\n"}(r):function(e){return"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n bool clipped = true;\n vec4 position = czm_windowToEyeCoordinates(fragCoord);\n vec3 clipNormal = vec3(0.0);\n vec3 clipPosition = vec3(0.0);\n float clipAmount = 0.0;\n float pixelWidth = czm_metersPerPixel(position);\n for (int i = 0; i < "+e+"; ++i)\n {\n vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n clipNormal = clippingPlane.xyz;\n clipPosition = -clippingPlane.w * clipNormal;\n float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n clipAmount = max(amount, clipAmount);\n clipped = clipped && (amount <= 0.0);\n }\n if (clipped)\n {\n discard;\n }\n return clipAmount;\n}\n"}(r)},yH=Object.freeze({TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3});function wH(){}var OH=/^data\:/i;function CH(e,t){var n=e.gltf,i=n.buffers,r=n.bufferViews[t.bufferView],o=i[r.buffer],a=r.byteOffset+t.byteOffset,s=t.count*fz(t.type),c=OH.test(o.uri)?"":o.uri;return e.cacheKey+"//"+c+"/"+a+"/"+s}var EH={};wH.getAnimationParameterValues=function(e,t){var n=CH(e,t),i=EH[n];if(!Object(o.a)(i)){var a=e.gltf,s=a.buffers,c=a.bufferViews[t.bufferView],l=s[c.buffer].extras._pipeline.source,u=t.componentType,h=t.type,d=fz(h),f=t.count,p=pz(a,t);i=new Array(f);for(var m=Object(r.a)(t.byteOffset,0),g=c.byteOffset+m,v=0;v<f;v++){var _=Ds.createArrayBufferView(u,l.buffer,l.byteOffset+g,d);"SCALAR"===h?i[v]=_[0]:"VEC3"===h?i[v]=O.fromArray(_):"VEC4"===h&&(i[v]=No.unpack(_)),g+=p}Object(o.a)(e.cacheKey)&&(EH[n]=i)}return i};var AH={};function xH(e){this._value=e}function TH(e){this._spline=e,this._lastTimeIndex=0}xH.prototype.evaluate=function(e,t){return this._value},xH.prototype.wrapTime=function(e){return 0},xH.prototype.clampTime=function(e){return 0},TH.prototype.findTimeInterval=cu.prototype.findTimeInterval,TH.prototype.evaluate=function(e,t){var n=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),i=this._spline.times,r=e>=i[n+1]?i[n+1]:i[n];return this._spline.evaluate(r,t)},Object.defineProperties(TH.prototype,{times:{get:function(){return this._spline.times}}}),TH.prototype.wrapTime=function(e){return this._spline.wrapTime(e)},TH.prototype.clampTime=function(e){return this._spline.clampTime(e)},wH.getAnimationSpline=function(e,t,n,i,r,a,s,c){var l=function(e,t,n){return e.cacheKey+"//"+t+"/"+n}(e,t,i),u=AH[l];if(!Object(o.a)(u)){var h=a,d=c;1===h.length&&1===d.length?u=new xH(d[0]):"LINEAR"!==r.interpolation&&"STEP"!==r.interpolation||("translation"===s||"scale"===s?u=new uu({times:h,points:d}):"rotation"===s?u=new ZA({times:h,points:d}):"weights"===s&&(u=new KD({times:h,weights:d})),Object(o.a)(u)&&"STEP"===r.interpolation&&(u=new TH(u))),Object(o.a)(e.cacheKey)&&(AH[l]=u)}return u};var SH={};wH.getSkinInverseBindMatrices=function(e,t){var n=CH(e,t),i=SH[n];if(!Object(o.a)(i)){var r=e.gltf,a=r.buffers,s=r.bufferViews[t.bufferView],c=a[s.buffer].extras._pipeline.source,l=t.componentType,u=t.type,h=t.count,d=pz(r,t),f=s.byteOffset+t.byteOffset,p=fz(u);if(i=new Array(h),l===Ts.FLOAT&&u===CN.MAT4)for(var m=0;m<h;++m){var g=Ds.createArrayBufferView(l,c.buffer,c.byteOffset+f,p);i[m]=Ae.fromArray(g),f+=d}SH[n]=i}return i};var DH=wH,PH=Object.freeze({NONE:0,REPEAT:1,MIRRORED_REPEAT:2}),IH=Object.freeze({STOPPED:0,ANIMATING:1});function MH(e,t,n){this._name=n.name,this._startTime=hr.clone(e.startTime),this._delay=Object(r.a)(e.delay,0),this._stopTime=e.stopTime,this.removeOnStop=Object(r.a)(e.removeOnStop,!1),this._multiplier=Object(r.a)(e.multiplier,1),this._reverse=Object(r.a)(e.reverse,!1),this._loop=Object(r.a)(e.loop,PH.NONE),this.start=new wn.a,this.update=new wn.a,this.stop=new wn.a,this._state=IH.STOPPED,this._runtimeAnimation=n,this._computedStartTime=void 0,this._duration=void 0;var i=this;this._raiseStartEvent=function(){i.start.raiseEvent(t,i)},this._updateEventTime=0,this._raiseUpdateEvent=function(){i.update.raiseEvent(t,i,i._updateEventTime)},this._raiseStopEvent=function(){i.stop.raiseEvent(t,i)}}Object.defineProperties(MH.prototype,{name:{get:function(){return this._name}},startTime:{get:function(){return this._startTime}},delay:{get:function(){return this._delay}},stopTime:{get:function(){return this._stopTime}},multiplier:{get:function(){return this._multiplier}},reverse:{get:function(){return this._reverse}},loop:{get:function(){return this._loop}}});var RH=MH;function LH(e){this.animationAdded=new wn.a,this.animationRemoved=new wn.a,this._model=e,this._scheduledAnimations=[],this._previousTime=void 0}function jH(e,t,n){var i=e._model,r=i._runtime.animations[t],o=new RH(n,i,r);return e._scheduledAnimations.push(o),e.animationAdded.raiseEvent(i,o),o}function FH(e,t){for(var n=e.channelEvaluators,i=n.length,r=0;r<i;++r)n[r](t)}Object.defineProperties(LH.prototype,{length:{get:function(){return this._scheduledAnimations.length}}}),LH.prototype.add=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t,n=this._model._runtime.animations;if(!Object(o.a)(n))throw new a.a("Animations are not loaded. Wait for Model.readyPromise to resolve.");if(!Object(o.a)(e.name)&&!Object(o.a)(e.index))throw new a.a("Either options.name or options.index must be defined.");if(Object(o.a)(e.multiplier)&&e.multiplier<=0)throw new a.a("options.multiplier must be greater than zero.");if(Object(o.a)(e.index)&&(e.index>=n.length||e.index<0))throw new a.a("options.index must be a valid animation index.");if(Object(o.a)(e.index))return jH(this,e.index,e);for(var i=n.length,s=0;s<i;++s)if(n[s].name===e.name){t=s;break}if(!Object(o.a)(t))throw new a.a("options.name must be a valid animation name.");return jH(this,t,e)},LH.prototype.addAll=function(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(this._model._runtime.animations))throw new a.a("Animations are not loaded. Wait for Model.readyPromise to resolve.");if(Object(o.a)(e.multiplier)&&e.multiplier<=0)throw new a.a("options.multiplier must be greater than zero.");for(var t=[],n=this._model._runtime.animations.length,i=0;i<n;++i)t.push(jH(this,i,e));return t},LH.prototype.remove=function(e){if(Object(o.a)(e)){var t=this._scheduledAnimations,n=t.indexOf(e);if(-1!==n)return t.splice(n,1),this.animationRemoved.raiseEvent(this._model,e),!0}return!1},LH.prototype.removeAll=function(){var e=this._model,t=this._scheduledAnimations,n=t.length;this._scheduledAnimations=[];for(var i=0;i<n;++i)this.animationRemoved.raiseEvent(e,t[i])},LH.prototype.contains=function(e){return!!Object(o.a)(e)&&-1!==this._scheduledAnimations.indexOf(e)},LH.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._scheduledAnimations[e]};var NH=[];function zH(e,t,n){return function(){e.animationRemoved.raiseEvent(t,n)}}LH.prototype.update=function(e){var t=this._scheduledAnimations,n=t.length;if(0===n)return this._previousTime=void 0,!1;if(hr.equals(e.time,this._previousTime))return!1;this._previousTime=hr.clone(e.time,this._previousTime);for(var i=!1,a=e.time,s=this._model,c=0;c<n;++c){var l=t[c],u=l._runtimeAnimation;Object(o.a)(l._computedStartTime)||(l._computedStartTime=hr.addSeconds(Object(r.a)(l.startTime,a),l.delay,new hr)),Object(o.a)(l._duration)||(l._duration=u.stopTime*(1/l.multiplier));var h=l._computedStartTime,f=l._duration,p=l.stopTime,m=0!==f?hr.secondsDifference(a,h)/f:0;0!==f&&Object(o.a)(p)&&hr.greaterThan(a,p)&&(m=hr.secondsDifference(p,h)/f);var g=m>=0,v=l.loop===PH.REPEAT||l.loop===PH.MIRRORED_REPEAT,_=(g||v&&!Object(o.a)(l.startTime))&&(m<=1||v)&&(!Object(o.a)(p)||hr.lessThanOrEquals(a,p));if(_||l._state===IH.ANIMATING){if(_&&l._state===IH.STOPPED&&(l._state=IH.ANIMATING,l.start.numberOfListeners>0&&e.afterRender.push(l._raiseStartEvent)),l.loop===PH.REPEAT)m-=Math.floor(m);else if(l.loop===PH.MIRRORED_REPEAT){var b=Math.floor(m),y=m-b;m=b%2===1?1-y:y}l.reverse&&(m=1-m);var w=m*f*l.multiplier;FH(u,w=d.clamp(w,u.startTime,u.stopTime)),l.update.numberOfListeners>0&&(l._updateEventTime=w,e.afterRender.push(l._raiseUpdateEvent)),i=!0,_||(l._state=IH.STOPPED,l.stop.numberOfListeners>0&&e.afterRender.push(l._raiseStopEvent),l.removeOnStop&&NH.push(l))}}n=NH.length;for(var O=0;O<n;++O){var C=NH[O];t.splice(t.indexOf(C),1),e.afterRender.push(zH(this,s,C))}return NH.length=0,i};var kH=LH;function BH(e,t,n){this._name=t.name,this._id=n,this._uniformMap=e._uniformMaps[n],this._technique=void 0,this._program=void 0,this._values=void 0}Object.defineProperties(BH.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}}}),BH.prototype.setValue=function(e,t){if(!Object(o.a)(e))throw new a.a("name is required.");var n="u_"+e,i=this._uniformMap.values[n];if(!Object(o.a)(i))throw new a.a("name must match a parameter name in the material's technique that is targetable and not optimized out.");i.value=i.clone(t,i.value)},BH.prototype.getValue=function(e){if(!Object(o.a)(e))throw new a.a("name is required.");var t="u_"+e,n=this._uniformMap.values[t];if(Object(o.a)(n))return n.value};var HH=BH;function VH(e,t,n){for(var i=[],r=e.primitives,o=r.length,a=0;a<o;++a){var s=r[a];i[a]=t[s.material]}this._name=e.name,this._materials=i,this._id=n}Object.defineProperties(VH.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},materials:{get:function(){return this._materials}}});var UH=VH;function WH(e,t,n,i,r){this._model=e,this._runtimeNode=n,this._name=t.name,this._id=i,this.useMatrix=!1,this._show=!0,this._matrix=Ae.clone(r),this._originalMatrix=Ae.clone(r)}Object.defineProperties(WH.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,this._model._perNodeShowDirty=!0)}},matrix:{get:function(){return this._matrix},set:function(e){this._matrix=Ae.clone(e,this._matrix),this.useMatrix=!0;var t=this._model;t._cesiumAnimationsDirty=!0,this._runtimeNode.dirtyNumber=t._maxDirtyNumber}},originalMatrix:{get:function(){return this._originalMatrix}}}),WH.prototype.setMatrix=function(e){Ae.clone(e,this._matrix)};var GH=WH;function qH(){}function YH(e,t,n,i,r){var o=3*t,a=e[o],s=e[o+1],c=e[o+2];return void 0===a?63:((a===n&&s===i&&c===r)<<0)+((a===n&&s===r&&c===i)<<1)+((a===i&&s===n&&c===r)<<2)+((a===i&&s===r&&c===n)<<3)+((a===r&&s===n&&c===i)<<4)+((a===r&&s===i&&c===n)<<5)}function $H(e){return(1&e)+(e>>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}function XH(e,t,n,i,r,o,a){var s=a?1:0,c=r?1:0,l=YH(e,t,s,c,0);if(0===l)return t;var u=r?1:0,h=o?1:0,d=YH(e,n,0,u,h);if(0===d)return n;var f=a?1:0,p=o?1:0,m=YH(e,i,f,0,p);if(0===m)return i;var g,v,_,b=l&d&m;if(1&b)g=0,v=1,_=2;else if(2&b)g=0,_=1,v=2;else if(4&b)v=0,g=1,_=2;else if(8&b)v=0,_=1,g=2;else if(16&b)_=0,g=1,v=2;else{if(!(32&b)){var y=$H(l),w=$H(d),O=$H(m);return y<w&&y<O?t:w<O?n:i}_=0,v=1,g=2}var C=3*t;e[C+g]=s,e[C+v]=c,e[C+_]=0;var E=3*n;e[E+g]=0,e[E+v]=u,e[E+_]=h;var A=3*i;return e[A+g]=f,e[A+v]=0,e[A+_]=p,-1}function KH(e,t,n){var i=e[0];return 1===e[Math.min(t,n)*i+Math.max(t,n)]}function QH(e){var t=new Uint8Array(e);return t[e-1]=192,8===e?t[e-1]=96:4===e?t[e-1]=48:2===e?t[e-1]=24:1===e&&(t[e-1]=12),t}function ZH(e,t){var n,i,r=e.gltf,o=e._loadResources;for(n=0;n<t.length;++n){var a=t[n],s=a.extras._pipeline.vertexNumberingScope;a.extras._pipeline.vertexNumberingScope=void 0;var c=s.extraVertices,l=o.getBuffer(a),u=a.byteStride||4,h=c.length,d=new Uint8Array(l.byteLength+h*u);for(d.set(l),i=0;i<h;++i)for(var f=c[i]*u,p=l.length+i*u,m=0;m<u;++m)d[p+m]=d[f+m];a.byteOffset=0,a.byteLength=d.byteLength;var g=r.buffers.push({byteLength:d.byteLength,extras:{_pipeline:{source:d.buffer}}})-1;a.buffer=g,o.buffers[g]=d;var v=s.accessors;for(i=0;i<v.length;++i){var _=v[i];r.accessors[_].count+=h}if(!s.createdOutlines){var b=s.outlineCoordinates,y=new Float32Array(b),w=e.gltf.buffers.push({byteLength:y.byteLength,extras:{_pipeline:{source:y.buffer}}})-1;o.buffers[w]=new Uint8Array(y.buffer,0,y.byteLength);var O=e.gltf.bufferViews.push({buffer:w,byteLength:y.byteLength,byteOffset:0,byteStride:3*Float32Array.BYTES_PER_ELEMENT,target:34962})-1,C=e.gltf.accessors.push({bufferView:O,byteOffset:0,componentType:5126,count:y.length/3,type:"VEC3",min:[0,0,0],max:[1,1,1]})-1,E=s.primitives;for(i=0;i<E.length;++i)E[i].attributes._OUTLINE_COORDINATES=C;o.vertexBuffersToCreate.enqueue(O),s.createdOutlines=!0}}}function JH(e,t){return t.buffer===e}qH.hasExtension=function(e){return Object(o.a)(e.extensionsRequired.CESIUM_primitive_outline)||Object(o.a)(e.extensionsUsed.CESIUM_primitive_outline)},qH.outlinePrimitives=function(e){if(qH.hasExtension(e)){var t=e.gltf,n=[];dz.mesh(t,(function(t,i){dz.meshPrimitive(t,(function(t,r){if(Object(o.a)(t.extensions)){var a=t.extensions.CESIUM_primitive_outline;if(Object(o.a)(a)){var s=function(e,t){var n=t.attributes;if(void 0===n)return;var i,r=e.gltf;for(var a in n)if(n.hasOwnProperty(a)){var s=n[a],c=r.accessors[s].bufferView,l=r.bufferViews[c];if(Object(o.a)(l.extras)||(l.extras={}),Object(o.a)(l.extras._pipeline)||(l.extras._pipeline={}),Object(o.a)(l.extras._pipeline.vertexNumberingScope)){if(void 0!==i&&l.extras._pipeline.vertexNumberingScope!==i)return}else l.extras._pipeline.vertexNumberingScope=i||{vertexCopies:[],extraVertices:[],outlineCoordinates:[],accessors:[],bufferViews:[],primitives:[],createdOutlines:!1};(i=l.extras._pipeline.vertexNumberingScope).bufferViews.indexOf(l)<0&&i.bufferViews.push(l),i.accessors.indexOf(s)<0&&i.accessors.push(s)}return i.primitives.push(t),i}(e,t);void 0!==s&&(n.indexOf(s)<0&&n.push(s),function(e,t,n,i,r){var a,s=r.vertexCopies,c=r.extraVertices,l=r.outlineCoordinates,u=e.gltf,h=u.meshes[t].primitives[n],d=u.accessors,f=u.bufferViews;for(var p in h.attributes)if(h.attributes.hasOwnProperty(p)){var m=h.attributes[p],g=d[m];if(Object(o.a)(g)){a=g.count;break}}if(!Object(o.a)(a))return;var v,_=d[h.indices],b=f[_.bufferView],y=d[i],w=f[y.bufferView],O=e._loadResources,C=O.getBuffer(b),E=O.getBuffer(w),A=5123===_.componentType?new Uint16Array(C.buffer,C.byteOffset+_.byteOffset,_.count):new Uint32Array(C.buffer,C.byteOffset+_.byteOffset,_.count),x=5123===y.componentType?new Uint16Array(E.buffer,E.byteOffset+y.byteOffset,y.count):new Uint32Array(E.buffer,E.byteOffset+y.byteOffset,y.count),T=a,S=[T];for(v=0;v<x.length;v+=2){var D=x[v],P=x[v+1],I=Math.min(D,P),M=Math.max(D,P);S[I*T+M]=1}for(v=0;v<A.length;v+=3)for(var R=A[v],L=A[v+1],j=A[v+2],F=KH(S,R,L),N=KH(S,L,j),z=KH(S,j,R),k=XH(l,R,L,j,F,N,z);k>=0;){var B;if(void 0===(B=k===R?s[R]:k===L?s[L]:s[j])){B=a+c.length;for(var H=k;H>=a;)H=c[H-a];c.push(H),s[k]=B}B>65534&&A instanceof Uint16Array&&(A=new Uint32Array(A),_.componentType=5125,b.buffer=u.buffers.push({byteLength:A.byteLength,extras:{_pipeline:{source:A.buffer}}})-1,b.byteLength=A.byteLength,b.byteOffset=0,e._loadResources.buffers[b.buffer]=new Uint8Array(A.buffer,0,A.byteLength),O.indexBuffersToCreate._array.forEach((function(e){e.id===_.bufferView&&(e.componentType=_.componentType)}))),k===R?(R=B,A[v]=B):k===L?(L=B,A[v+1]=B):(j=B,A[v+2]=B),Object(o.a)(_.max)&&(_.max[0]=Math.max(_.max[0],B)),k=XH(l,R,L,j,F,N,z)}}(e,i,r,a.indices,s))}}}))}));for(var i=0;i<n.length;++i)ZH(e,n[i].bufferViews);!function(e){var t,n=e.gltf,i=e._loadResources;for(t=0;t<n.buffers.length;++t){var r=n.buffers[t],o=n.bufferViews.filter(JH.bind(void 0,t)),a=o.reduce((function(e,t){return e+t.byteLength}),0);if(a!==r.byteLength){for(var s=new Uint8Array(a),c=0,l=0;l<o.length;++l){var u=o[l],h=i.getBuffer(u);s.set(h,c),u.byteOffset=c,c+=h.byteLength}i.buffers[t]=s,r.extras._pipeline.source=s.buffer,r.byteLength=a}}}(e)}},qH.createTexture=function(e,t){var n=t.cache.modelOutliningCache;if(Object(o.a)(n)||(n=t.cache.modelOutliningCache={}),Object(o.a)(n.outlineTexture))return n.outlineTexture;for(var i=Math.min(4096,BP.maximumTextureSize),r=i,a=QH(r),s=[];r>1;)r>>=1,s.push(QH(r));var c=new nI({context:t,source:{arrayBufferView:a,mipLevels:s},width:i,height:1,pixelFormat:FC.LUMINANCE,sampler:new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.LINEAR_MIPMAP_LINEAR,magnificationFilter:qP.LINEAR})});return n.outlineTexture=c,c};var eV=qH;function tV(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.vertexArray=e.vertexArray,this.fragmentShaderSource=e.fragmentShaderSource,this.shaderProgram=e.shaderProgram,this.uniformMap=e.uniformMap,this.outputTexture=e.outputTexture,this.preExecute=e.preExecute,this.postExecute=e.postExecute,this.persists=Object(r.a)(e.persists,!1),this.pass=EI.COMPUTE,this.owner=e.owner}tV.prototype.execute=function(e){e.execute(this)};var nV=tV;function iV(e){this._url=e,this._cubeMapBuffers=void 0,this._cubeMaps=void 0,this._texture=void 0,this._mipTextures=void 0,this._va=void 0,this._sp=void 0,this._maximumMipmapLevel=void 0,this._loading=!1,this._ready=!1,this._readyPromise=Yt.a.defer()}Object.defineProperties(iV.prototype,{url:{get:function(){return this._url}},texture:{get:function(){return this._texture}},maximumMipmapLevel:{get:function(){return this._maximumMipmapLevel}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}}}),iV.isSupported=function(e){return e.colorBufferHalfFloat&&e.halfFloatingPointTexture||e.floatingPointTexture&&e.colorBufferFloat};for(var rV=new O(1,0,0),oV=new O(0,0,1),aV=new O(-1,0,0),sV=new O(0,0,-1),cV=new O(0,1,0),lV=[cV,aV,oV,new O(0,-1,0),rV,cV,sV,cV,cV],uV=lV.length,hV=new Float32Array(3*uV),dV=0,fV=0;fV<uV;++fV,dV+=3)O.pack(lV[fV],hV,dV);var pV=new Float32Array([-1,1,-1,0,0,1,0,0,1,0,1,1,0,-1,-1,-1,1,-1]),mV=new Uint16Array([0,1,2,2,3,1,7,6,1,3,6,1,2,5,4,3,4,2,4,8,6,3,4,6]);function gV(e){return function(){return e}}function vV(e){var t,n;e._va=e._va&&e._va.destroy(),e._sp=e._sp&&e._sp.destroy();var i=e._cubeMaps;if(Object(o.a)(i))for(n=i.length,t=0;t<n;++t)i[t].destroy();var r=e._mipTextures;if(Object(o.a)(r))for(n=r.length,t=0;t<n;++t)r[t].destroy();e._va=void 0,e._sp=void 0,e._cubeMaps=void 0,e._cubeMapBuffers=void 0,e._mipTextures=void 0}iV.prototype.update=function(e){var t=e.context;if(iV.isSupported(t)&&(Object(o.a)(this._texture)&&Object(o.a)(this._va)&&vV(this),!Object(o.a)(this._texture))){if(!Object(o.a)(this._texture)&&!this._loading){var n=t.textureCache.getTexture(this._url);if(Object(o.a)(n))return vV(this),this._texture=n,this._maximumMipmapLevel=this._texture.maximumMipmapLevel,this._ready=!0,void this._readyPromise.resolve()}var i=this._cubeMapBuffers;if(!Object(o.a)(i)&&!this._loading){var r=this;kC(this._url).then((function(e){r._cubeMapBuffers=e,r._loading=!1})).otherwise(this._readyPromise.reject),this._loading=!0}if(Object(o.a)(this._cubeMapBuffers)){this._va=function(e){var t=oR.createVertexBuffer({context:e,typedArray:pV,usage:iR.STATIC_DRAW}),n=oR.createVertexBuffer({context:e,typedArray:hV,usage:iR.STATIC_DRAW}),i=oR.createIndexBuffer({context:e,typedArray:mV,usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT}),r=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:Ds.FLOAT},{index:1,vertexBuffer:n,componentsPerAttribute:3,componentDatatype:Ds.FLOAT}];return new hR({context:e,attributes:r,indexBuffer:i})}(t),this._sp=LM.fromCache({context:t,vertexShaderSource:"attribute vec4 position;\nattribute vec3 cubeMapCoordinates;\n\nvarying vec3 v_cubeMapCoordinates;\n\nvoid main()\n{\n gl_Position = position;\n v_cubeMapCoordinates = cubeMapCoordinates;\n}\n",fragmentShaderSource:"varying vec3 v_cubeMapCoordinates;\nuniform samplerCube cubeMap;\n\nvoid main()\n{\n vec4 rgbm = textureCube(cubeMap, v_cubeMapCoordinates);\n float m = rgbm.a * 16.0;\n vec3 r = rgbm.rgb * m;\n gl_FragColor = vec4(r * r, 1.0);\n}\n",attributeLocations:{position:0,cubeMapCoordinates:1}});var a=Math.min(i.length,6);this._maximumMipmapLevel=a-1;for(var s=this._cubeMaps=new Array(a),c=this._mipTextures=new Array(a),l=2*i[0].positiveX.width,u={originalSize:function(){return l}},h=t.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT,d=FC.RGBA,f=0;f<a;++f){var p=i[f].positiveY;i[f].positiveY=i[f].negativeY,i[f].negativeY=p;var m=s[f]=new eI({context:t,source:i[f]}),g=2*s[f].width,v=c[f]=new nI({context:t,width:g,height:g,pixelDatatype:h,pixelFormat:d}),_=new nV({vertexArray:this._va,shaderProgram:this._sp,uniformMap:{cubeMap:gV(m)},outputTexture:v,persists:!0,owner:this});e.commandList.push(_),u["texture"+f]=gV(v)}this._texture=new nI({context:t,width:1.5*l+2,height:l,pixelDatatype:h,pixelFormat:d}),this._texture.maximumMipmapLevel=this._maximumMipmapLevel,t.textureCache.addTexture(this._url,this._texture);var b=new nV({fragmentShaderSource:"varying vec2 v_textureCoordinates;\n\nuniform float originalSize;\nuniform sampler2D texture0;\nuniform sampler2D texture1;\nuniform sampler2D texture2;\nuniform sampler2D texture3;\nuniform sampler2D texture4;\nuniform sampler2D texture5;\n\nconst float yMipLevel1 = 1.0 - (1.0 / pow(2.0, 1.0));\nconst float yMipLevel2 = 1.0 - (1.0 / pow(2.0, 2.0));\nconst float yMipLevel3 = 1.0 - (1.0 / pow(2.0, 3.0));\nconst float yMipLevel4 = 1.0 - (1.0 / pow(2.0, 4.0));\n\nvoid main()\n{\n vec2 uv = v_textureCoordinates;\n vec2 textureSize = vec2(originalSize * 1.5 + 2.0, originalSize);\n vec2 pixel = 1.0 / textureSize;\n\n float mipLevel = 0.0;\n\n if (uv.x - pixel.x > (textureSize.y / textureSize.x))\n {\n mipLevel = 1.0;\n if (uv.y - pixel.y > yMipLevel1)\n {\n mipLevel = 2.0;\n if (uv.y - pixel.y * 3.0 > yMipLevel2)\n {\n mipLevel = 3.0;\n if (uv.y - pixel.y * 5.0 > yMipLevel3)\n {\n mipLevel = 4.0;\n if (uv.y - pixel.y * 7.0 > yMipLevel4)\n {\n mipLevel = 5.0;\n }\n }\n }\n }\n }\n\n if (mipLevel > 0.0)\n {\n float scale = pow(2.0, mipLevel);\n\n uv.y -= (pixel.y * (mipLevel - 1.0) * 2.0);\n uv.x *= ((textureSize.x - 2.0) / textureSize.y);\n\n uv.x -= 1.0 + pixel.x;\n uv.y -= (1.0 - (1.0 / pow(2.0, mipLevel - 1.0)));\n uv *= scale;\n }\n else\n {\n uv.x *= (textureSize.x / textureSize.y);\n }\n\n if(mipLevel == 0.0)\n {\n gl_FragColor = texture2D(texture0, uv);\n }\n else if(mipLevel == 1.0)\n {\n gl_FragColor = texture2D(texture1, uv);\n }\n else if(mipLevel == 2.0)\n {\n gl_FragColor = texture2D(texture2, uv);\n }\n else if(mipLevel == 3.0)\n {\n gl_FragColor = texture2D(texture3, uv);\n }\n else if(mipLevel == 4.0)\n {\n gl_FragColor = texture2D(texture4, uv);\n }\n else if(mipLevel == 5.0)\n {\n gl_FragColor = texture2D(texture5, uv);\n }\n else\n {\n gl_FragColor = vec4(0.0);\n }\n}\n",uniformMap:u,outputTexture:this._texture,persists:!1,owner:this});e.commandList.push(b),this._ready=!0,this._readyPromise.resolve()}}},iV.prototype.isDestroyed=function(){return!1},iV.prototype.destroy=function(){return vV(this),this._texture=this._texture&&this._texture.destroy(),Ks(this)};var _V=iV,bV=new O,yV=Tk.ModelState,wV=d.EPSILON16;function OV(e,t){e._cachedGltf=t}function CV(e){this._gltf=e.gltf,this.ready=e.ready,this.modelsToLoad=[],this.count=0}Object.defineProperties(CV.prototype,{gltf:{set:function(e){this._gltf=e},get:function(){return this._gltf}}}),CV.prototype.makeReady=function(e){this.gltf=e;for(var t=this.modelsToLoad,n=t.length,i=0;i<n;++i){var r=t[i];r.isDestroyed()||OV(r,this)}this.modelsToLoad=void 0,this.ready=!0};var EV={},AV={};function xV(e){var t,n=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).cacheKey;if(this._cacheKey=n,this._cachedGltf=void 0,this._releaseGltfJson=Object(r.a)(e.releaseGltfJson,!1),Object(o.a)(n)&&Object(o.a)(EV[n])&&EV[n].ready)++(t=EV[n]).count;else{var i=e.gltf;if(Object(o.a)(i)){if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),i instanceof Uint8Array)t=new CV({gltf:Oz(i),ready:!0});else t=new CV({gltf:e.gltf,ready:!0});t.count=1,Object(o.a)(n)&&(EV[n]=t)}}OV(this,t);var a=Object(r.a)(e.basePath,"");this._resource=_t.a.createIfNeeded(a);var s=e.credit;"string"===typeof s&&(s=new yn(s)),this._credit=s,this._resourceCredits=[],this.show=Object(r.a)(e.show,!0),this.silhouetteColor=Object(r.a)(e.silhouetteColor,Hf.RED),this._silhouetteColor=new Hf,this._silhouetteColorPreviousAlpha=1,this._normalAttributeName=void 0,this.silhouetteSize=Object(r.a)(e.silhouetteSize,0),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=Ae.clone(this.modelMatrix),this._clampedModelMatrix=void 0,this.scale=Object(r.a)(e.scale,1),this._scale=this.scale,this.minimumPixelSize=Object(r.a)(e.minimumPixelSize,0),this._minimumPixelSize=this.minimumPixelSize,this.maximumScale=e.maximumScale,this._maximumScale=this.maximumScale,this.id=e.id,this._id=e.id,this.heightReference=Object(r.a)(e.heightReference,iP.NONE),this._heightReference=this.heightReference,this._heightChanged=!1,this._removeUpdateHeightCallback=void 0;var c=e.scene;this._scene=c,Object(o.a)(c)&&Object(o.a)(c.terrainProviderChanged)&&(this._terrainProviderChangedCallback=c.terrainProviderChanged.addEventListener((function(){this._heightChanged=!0}),this)),this._pickObject=e.pickObject,this._allowPicking=Object(r.a)(e.allowPicking,!0),this._ready=!1,this._readyPromise=Yt.a.defer(),this.activeAnimations=new kH(this),this.clampAnimations=Object(r.a)(e.clampAnimations,!0),this._defaultTexture=void 0,this._incrementallyLoadTextures=Object(r.a)(e.incrementallyLoadTextures,!0),this._asynchronous=Object(r.a)(e.asynchronous,!0),this.shadows=Object(r.a)(e.shadows,RR.ENABLED),this._shadows=this.shadows,this.color=Hf.clone(Object(r.a)(e.color,Hf.WHITE)),this._colorPreviousAlpha=1,this.colorBlendMode=Object(r.a)(e.colorBlendMode,hH.HIGHLIGHT),this.colorBlendAmount=Object(r.a)(e.colorBlendAmount,.5),this._colorShadingEnabled=!1,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._clippingPlanesState=0,this.clippingPlanesOriginMatrix=void 0,this.backFaceCulling=Object(r.a)(e.backFaceCulling,!0),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._debugShowBoundingVolume=!1,this.debugWireframe=Object(r.a)(e.debugWireframe,!1),this._debugWireframe=!1,this._distanceDisplayCondition=e.distanceDisplayCondition,this._addBatchIdToGeneratedShaders=e.addBatchIdToGeneratedShaders,this._precreatedAttributes=e.precreatedAttributes,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._pickIdLoaded=e.pickIdLoaded,this._ignoreCommands=Object(r.a)(e.ignoreCommands,!1),this._requestType=e.requestType,this._upAxis=Object(r.a)(e.upAxis,ON.Y),this._gltfForwardAxis=ON.Z,this._forwardAxis=e.forwardAxis,this.cull=Object(r.a)(e.cull,!0),this.opaquePass=Object(r.a)(e.opaquePass,EI.OPAQUE),this._computedModelMatrix=new Ae,this._clippingPlaneModelViewMatrix=Ae.clone(Ae.IDENTITY),this._initialRadius=void 0,this._boundingSphere=void 0,this._scaledBoundingSphere=new gt,this._state=yV.NEEDS_LOAD,this._loadResources=void 0,this._mode=void 0,this._perNodeShowDirty=!1,this._cesiumAnimationsDirty=!1,this._dirty=!1,this._maxDirtyNumber=0,this._runtime={animations:void 0,articulationsByName:void 0,articulationsByStageKey:void 0,stagesByKey:void 0,rootNodes:void 0,nodes:void 0,nodesByName:void 0,skinnedNodes:void 0,meshesByName:void 0,materialsByName:void 0,materialsById:void 0},this._uniformMaps={},this._extensionsUsed=void 0,this._extensionsRequired=void 0,this._quantizedUniforms={},this._programPrimitives={},this._rendererResources={buffers:{},vertexArrays:{},programs:{},sourceShaders:{},silhouettePrograms:{},textures:{},samplers:{},renderStates:{}},this._cachedRendererResources=void 0,this._loadRendererResourcesFromCache=!1,this._dequantizeInShader=Object(r.a)(e.dequantizeInShader,!0),this._decodedData={},this._cachedGeometryByteLength=0,this._cachedTexturesByteLength=0,this._geometryByteLength=0,this._texturesByteLength=0,this._trianglesLength=0,this._sourceTechniques={},this._sourcePrograms={},this._quantizedVertexShaders={},this._nodeCommands=[],this._pickIds=[],this._rtcCenter=void 0,this._rtcCenterEye=void 0,this._rtcCenter3D=void 0,this._rtcCenter2D=void 0,this._sourceVersion=void 0,this._sourceKHRTechniquesWebGL=void 0,this._imageBasedLightingFactor=new Mt(1,1),Mt.clone(e.imageBasedLightingFactor,this._imageBasedLightingFactor),this._lightColor=O.clone(e.lightColor),this._luminanceAtZenith=void 0,this.luminanceAtZenith=Object(r.a)(e.luminanceAtZenith,.2),this._sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._shouldUpdateSpecularMapAtlas=!0,this._specularEnvironmentMapAtlas=void 0,this._useDefaultSphericalHarmonics=!1,this._useDefaultSpecularMaps=!1,this._shouldRegenerateShaders=!1}function TV(e){return e.stencilBuffer}function SV(e){return!Hf.equals(e.color,Hf.WHITE)||e.colorBlendMode!==hH.HIGHLIGHT}function DV(e){var t=e._clippingPlanes;return Object(o.a)(t)&&t.enabled&&0!==t.length}function PV(e,t,n){if(e._state!==yV.LOADED)throw new a.a("The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.");if(!Object(o.a)(n))throw new a.a("name is required.");return e._runtime[t][n]}Object.defineProperties(xV.prototype,{gltf:{get:function(){return Object(o.a)(this._cachedGltf)?this._cachedGltf.gltf:void 0}},releaseGltfJson:{get:function(){return this._releaseGltfJson}},cacheKey:{get:function(){return this._cacheKey}},basePath:{get:function(){return this._resource.url}},boundingSphere:{get:function(){if(this._state!==yV.LOADED)throw new a.a("The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.");var e=this.modelMatrix;this.heightReference!==iP.NONE&&this._clampedModelMatrix&&(e=this._clampedModelMatrix);var t=Ae.getScale(e,bV),n=Object(o.a)(this.maximumScale)?Math.min(this.maximumScale,this.scale):this.scale;O.multiplyByScalar(t,n,t);var i=this._scaledBoundingSphere;return i.center=O.multiplyComponents(this._boundingSphere.center,t,i.center),i.radius=O.maximumComponent(t)*this._initialRadius,Object(o.a)(this._rtcCenter)&&O.add(this._rtcCenter,i.center,i.center),i}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},asynchronous:{get:function(){return this._asynchronous}},allowPicking:{get:function(){return this._allowPicking}},incrementallyLoadTextures:{get:function(){return this._incrementallyLoadTextures}},pendingTextureLoads:{get:function(){return Object(o.a)(this._loadResources)?this._loadResources.pendingTextureLoads:0}},dirty:{get:function(){return this._dirty}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far must be greater than near");this._distanceDisplayCondition=$_.clone(e,this._distanceDisplayCondition)}},extensionsUsed:{get:function(){return Object(o.a)(this._extensionsUsed)||(this._extensionsUsed=Tk.getUsedExtensions(this.gltf)),this._extensionsUsed}},extensionsRequired:{get:function(){return Object(o.a)(this._extensionsRequired)||(this._extensionsRequired=Tk.getRequiredExtensions(this.gltf)),this._extensionsRequired}},upAxis:{get:function(){return this._upAxis}},forwardAxis:{get:function(){return Object(o.a)(this._forwardAxis)?this._forwardAxis:this._gltfForwardAxis}},trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},texturesByteLength:{get:function(){return this._texturesByteLength}},cachedGeometryByteLength:{get:function(){return this._cachedGeometryByteLength}},cachedTexturesByteLength:{get:function(){return this._cachedTexturesByteLength}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&lH.setOwner(e,this,"_clippingPlanes")}},pickIds:{get:function(){return this._pickIds}},imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){i.a.typeOf.object("imageBasedLightingFactor",e),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.x",e.x,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.x",e.x,1),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.y",e.y,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.y",e.y,1);var t=this._imageBasedLightingFactor;e===t||Mt.equals(e,t)||(this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._imageBasedLightingFactor.x>0&&0===e.x||0===this._imageBasedLightingFactor.x&&e.x>0,this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._imageBasedLightingFactor.y>0&&0===e.y||0===this._imageBasedLightingFactor.y&&e.y>0,Mt.clone(e,this._imageBasedLightingFactor))}},lightColor:{get:function(){return this._lightColor},set:function(e){var t=this._lightColor;e===t||O.equals(e,t)||(this._shouldRegenerateShaders=this._shouldRegenerateShaders||Object(o.a)(t)&&!Object(o.a)(e)||Object(o.a)(e)&&!Object(o.a)(t),this._lightColor=O.clone(e,t))}},luminanceAtZenith:{get:function(){return this._luminanceAtZenith},set:function(e){var t=this._luminanceAtZenith;e!==t&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||Object(o.a)(t)&&!Object(o.a)(e)||Object(o.a)(e)&&!Object(o.a)(t),this._luminanceAtZenith=e)}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients},set:function(e){if(Object(o.a)(e)&&(!Array.isArray(e)||9!==e.length))throw new a.a("sphericalHarmonicCoefficients must be an array of 9 Cartesian3 values.");e!==this._sphericalHarmonicCoefficients&&(this._sphericalHarmonicCoefficients=e,this._shouldRegenerateShaders=!0)}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps},set:function(e){this._shouldUpdateSpecularMapAtlas=this._shouldUpdateSpecularMapAtlas||e!==this._specularEnvironmentMaps,this._specularEnvironmentMaps=e}},credit:{get:function(){return this._credit}}}),xV.silhouetteSupported=function(e){return TV(e.context)},xV.fromGltf=function(e){if(!Object(o.a)(e)||!Object(o.a)(e.url))throw new a.a("options.url is required");var t=e.url;e=Object(Lf.a)(e);var n=_t.a.createIfNeeded(t),i=Object(r.a)(e.basePath,n.clone()),s=_t.a.createIfNeeded(i),c=Object(r.a)(e.cacheKey,AV[Object(vt.a)(n.url)]);Object(o.a)(c)||(c=l_(),AV[Object(vt.a)(n.url)]=c),Object(o.a)(e.basePath)&&!Object(o.a)(e.cacheKey)&&(c+=s.url),e.cacheKey=c,e.basePath=s;var l=new xV(e),u=EV[c];return Object(o.a)(u)?u.ready||(++u.count,u.modelsToLoad.push(l)):((u=new CV({ready:!1})).count=1,u.modelsToLoad.push(l),OV(l,u),EV[c]=u,Object(o.a)(n.headers.Accept)||(n.headers.Accept="model/gltf-binary,model/gltf+json;q=0.8,application/json;q=0.2,*/*;q=0.01"),n.fetchArrayBuffer().then((function(e){var t=new Uint8Array(e);if("glTF"===Ly(t)){var i=Oz(t);u.makeReady(i)}else{var r=Du(t);u.makeReady(JSON.parse(r))}var a=l._resourceCredits,s=n.credits;if(Object(o.a)(s))for(var c=s.length,h=0;h<c;h++)a.push(s[h])})).otherwise(Tk.getFailedLoadFunction(l,"model",n.url))),l},xV._gltfCache=EV,xV.prototype.getNode=function(e){var t=PV(this,"nodesByName",e);return Object(o.a)(t)?t.publicNode:void 0},xV.prototype.getMesh=function(e){return PV(this,"meshesByName",e)},xV.prototype.getMaterial=function(e){return PV(this,"materialsByName",e)},xV.prototype.setArticulationStage=function(e,t){i.a.typeOf.number("value",t);var n=PV(this,"stagesByKey",e),r=PV(this,"articulationsByStageKey",e);Object(o.a)(n)&&Object(o.a)(r)&&(t=d.clamp(t,n.minimumValue,n.maximumValue),d.equalsEpsilon(n.currentValue,t,wV)||(n.currentValue=t,r.isDirty=!0))};var IV=new O,MV=new oe;function RV(e,t){i.a.typeOf.object("stage",e),i.a.typeOf.object("result",t);var n,r=e.currentValue,o=IV;switch(e.type){case"xRotate":n=oe.fromRotationX(d.toRadians(r),MV),Ae.multiplyByMatrix3(t,n,t);break;case"yRotate":n=oe.fromRotationY(d.toRadians(r),MV),Ae.multiplyByMatrix3(t,n,t);break;case"zRotate":n=oe.fromRotationZ(d.toRadians(r),MV),Ae.multiplyByMatrix3(t,n,t);break;case"xTranslate":o.x=r,o.y=0,o.z=0,Ae.multiplyByTranslation(t,o,t);break;case"yTranslate":o.x=0,o.y=r,o.z=0,Ae.multiplyByTranslation(t,o,t);break;case"zTranslate":o.x=0,o.y=0,o.z=r,Ae.multiplyByTranslation(t,o,t);break;case"xScale":o.x=r,o.y=1,o.z=1,Ae.multiplyByScale(t,o,t);break;case"yScale":o.x=1,o.y=r,o.z=1,Ae.multiplyByScale(t,o,t);break;case"zScale":o.x=1,o.y=1,o.z=r,Ae.multiplyByScale(t,o,t);break;case"uniformScale":Ae.multiplyByUniformScale(t,r,t)}return t}var LV=new Ae;function jV(e,t){return function(n){var i=e._loadResources,r=new Uint8Array(n);--i.pendingBufferLoads,e.gltf.buffers[t].extras._pipeline.source=r}}function FV(e,t){return function(n){var i=e._loadResources;--i.pendingTextureLoads,i.texturesToCreate.enqueue({id:t,image:n,bufferView:n.bufferView,width:n.width,height:n.height,internalFormat:n.internalFormat})}}xV.prototype.applyArticulations=function(){var e=this._runtime.articulationsByName;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];if(n.isDirty){n.isDirty=!1;for(var i=n.nodes.length,r=0;r<i;++r){for(var o=n.nodes[r],a=Ae.clone(o.originalMatrix,LV),s=n.stages.length,c=0;c<s;++c){a=RV(n.stages[c],a)}o.matrix=a}}}};var NV=/(^data:image\/ktx)|(\.ktx$)/i,zV=/(^data:image\/crn)|(\.crn$)/i;var kV=new Ae;var BV=function(){this.id=void 0,this.model=void 0,this.context=void 0};function HV(e,t,n){var i=t._loadResources,r=t.gltf.bufferViews[e];Object(o.a)(r)||(r=i.createdBufferViews[e]);var a=oR.createVertexBuffer({context:n,typedArray:i.getBuffer(r),usage:iR.STATIC_DRAW});a.vertexArrayDestroyable=!1,t._rendererResources.buffers[e]=a,t._geometryByteLength+=a.sizeInBytes}BV.prototype.set=function(e,t,n){this.id=e,this.model=t,this.context=n},BV.prototype.execute=function(){HV(this.id,this.model,this.context)};var VV=function(){this.id=void 0,this.componentType=void 0,this.model=void 0,this.context=void 0};function UV(e,t,n,i){var r=n._loadResources,a=n.gltf.bufferViews[e];Object(o.a)(a)||(a=r.createdBufferViews[e]);var s=oR.createIndexBuffer({context:i,typedArray:r.getBuffer(a),usage:iR.STATIC_DRAW,indexDatatype:t});s.vertexArrayDestroyable=!1,n._rendererResources.buffers[e]=s,n._geometryByteLength+=s.sizeInBytes}VV.prototype.set=function(e,t,n,i){this.id=e,this.componentType=t,this.model=n,this.context=i},VV.prototype.execute=function(){UV(this.id,this.componentType,this.model,this.context)};var WV=new BV,GV=new VV;function qV(e,t){var n=e._runtime.materialsById[t.material];if(Object(o.a)(n))return n._program}function YV(e,t,n){var i,r,a,s=n._programPrimitives[t];if(!Object(o.a)(s))return e;for(r in s)if(s.hasOwnProperty(r)&&qV(n,i=s[r])===t)break;if(n._programPrimitives[t]=void 0,n.extensionsUsed.WEB3D_quantized_attributes)a=Tk.modifyShaderForQuantizedAttributes(n.gltf,i,e),n._quantizedUniforms[t]=a.uniforms;else{var c=n._decodedData[r];if(!Object(o.a)(c))return e;a=Tk.modifyShaderForDracoQuantizedAttributes(n.gltf,i,e,c.attributes)}return a.shader}function $V(e,t,n){return Object(o.a)(n)&&(e=n(e,t)),e}var XV=function(){this.programToCreate=void 0,this.model=void 0,this.context=void 0};function KV(e,t,n){var i=e.programId,r=e.techniqueId,a=t._sourcePrograms[i],s=t._rendererResources.sourceShaders,c=s[a.vertexShader],l=s[a.fragmentShader],u=t._quantizedVertexShaders;if(t.extensionsUsed.WEB3D_quantized_attributes||t._dequantizeInShader){var h=u[i];Object(o.a)(h)||(h=YV(c,i,t),u[i]=h),c=h}var d=$V(c,i,t._vertexShaderLoaded),f=$V(l,i,t._fragmentShaderLoaded);Object(o.a)(t._uniformMapLoaded)||(f="uniform vec4 czm_pickColor;\n"+f);var p=t._imageBasedLightingFactor.x>0||t._imageBasedLightingFactor.y>0;if(p&&(f="#define USE_IBL_LIGHTING \n\n"+f),Object(o.a)(t._lightColor)&&(f="#define USE_CUSTOM_LIGHT_COLOR \n\n"+f),("2.0"!==t._sourceVersion||t._sourceKHRTechniquesWebGL)&&(f=KM.replaceMain(f,"non_gamma_corrected_main"),f+="\nvoid main() { \n non_gamma_corrected_main(); \n gl_FragColor = czm_gammaCorrect(gl_FragColor); \n} \n"),_V.isSupported(n)){var m=Object(o.a)(t._sphericalHarmonicCoefficients)||t._useDefaultSphericalHarmonics,g=Object(o.a)(t._specularEnvironmentMapAtlas)&&t._specularEnvironmentMapAtlas.ready||t._useDefaultSpecularMaps;(m||g||p)&&(f="uniform mat4 gltf_clippingPlanesMatrix; \n"+f),Object(o.a)(t._sphericalHarmonicCoefficients)?f="#define DIFFUSE_IBL \n#define CUSTOM_SPHERICAL_HARMONICS \nuniform vec3 gltf_sphericalHarmonicCoefficients[9]; \n"+f:t._useDefaultSphericalHarmonics&&(f="#define DIFFUSE_IBL \n"+f),Object(o.a)(t._specularEnvironmentMapAtlas)&&t._specularEnvironmentMapAtlas.ready?f="#define SPECULAR_IBL \n#define CUSTOM_SPECULAR_IBL \nuniform sampler2D gltf_specularMap; \nuniform vec2 gltf_specularMapSize; \nuniform float gltf_maxSpecularLOD; \n"+f:t._useDefaultSpecularMaps&&(f="#define SPECULAR_IBL \n"+f)}Object(o.a)(t._luminanceAtZenith)&&(f="#define USE_SUN_LUMINANCE \nuniform float gltf_luminanceAtZenith;\n"+f),ZV(i,r,f,d,t,n)}function QV(e,t,n){var i=e.programId,r=e.techniqueId,a=t._sourcePrograms[i],s=t._rendererResources.sourceShaders,c=t._quantizedVertexShaders,l=t.clippingPlanes,u=DV(t),h=s[a.vertexShader],d=s[a.fragmentShader];(t.extensionsUsed.WEB3D_quantized_attributes||t._dequantizeInShader)&&(h=c[i]);var f=d;SV(t)&&(f=xV._modifyShaderForColor(f)),u&&(f=function(e,t,n){return e=KM.replaceMain(e,"gltf_clip_main"),e+=xV._getClippingFunction(t,n)+"\n",e+="uniform sampler2D gltf_clippingPlanes; \nuniform mat4 gltf_clippingPlanesMatrix; \nuniform vec4 gltf_clippingPlanesEdgeStyle; \nvoid main() \n{ \n gltf_clip_main(); \n"+vH("gltf_clippingPlanes","gltf_clippingPlanesMatrix","gltf_clippingPlanesEdgeStyle")+"} \n"}(f,l,n));var p=$V(h,i,t._vertexShaderLoaded),m=$V(f,i,t._fragmentShaderLoaded);Object(o.a)(t._uniformMapLoaded)||(m="uniform vec4 czm_pickColor;\n"+m);var g=t._imageBasedLightingFactor.x>0||t._imageBasedLightingFactor.y>0;if(g&&(m="#define USE_IBL_LIGHTING \n\n"+m),Object(o.a)(t._lightColor)&&(m="#define USE_CUSTOM_LIGHT_COLOR \n\n"+m),("2.0"!==t._sourceVersion||t._sourceKHRTechniquesWebGL)&&(m=KM.replaceMain(m,"non_gamma_corrected_main"),m+="\nvoid main() { \n non_gamma_corrected_main(); \n gl_FragColor = czm_gammaCorrect(gl_FragColor); \n} \n"),_V.isSupported(n)){var v=Object(o.a)(t._sphericalHarmonicCoefficients)||t._useDefaultSphericalHarmonics,_=Object(o.a)(t._specularEnvironmentMapAtlas)&&t._specularEnvironmentMapAtlas.ready||t._useDefaultSpecularMaps;!u&&(v||_||g)&&(m="uniform mat4 gltf_clippingPlanesMatrix; \n"+m),Object(o.a)(t._sphericalHarmonicCoefficients)?m="#define DIFFUSE_IBL \n#define CUSTOM_SPHERICAL_HARMONICS \nuniform vec3 gltf_sphericalHarmonicCoefficients[9]; \n"+m:t._useDefaultSphericalHarmonics&&(m="#define DIFFUSE_IBL \n"+m),Object(o.a)(t._specularEnvironmentMapAtlas)&&t._specularEnvironmentMapAtlas.ready?m="#define SPECULAR_IBL \n#define CUSTOM_SPECULAR_IBL \nuniform sampler2D gltf_specularMap; \nuniform vec2 gltf_specularMapSize; \nuniform float gltf_maxSpecularLOD; \n"+m:t._useDefaultSpecularMaps&&(m="#define SPECULAR_IBL \n"+m)}Object(o.a)(t._luminanceAtZenith)&&(m="#define USE_SUN_LUMINANCE \nuniform float gltf_luminanceAtZenith;\n"+m),ZV(i,r,m,p,t,n)}function ZV(e,t,n,i,r,o){var a=r._sourceTechniques[t],s=Tk.createAttributeLocations(a,r._precreatedAttributes);r._rendererResources.programs[e]=LM.fromCache({context:o,vertexShaderSource:i,fragmentShaderSource:n,attributeLocations:s})}XV.prototype.set=function(e,t,n){this.programToCreate=e,this.model=t,this.context=n},XV.prototype.execute=function(){KV(this.programToCreate,this.model,this.context)};var JV=new XV;function eU(e,t){return function(n){e.texturesToCreate.enqueue({id:t.id,image:n,bufferView:void 0}),--e.pendingBufferViewToImage}}var tU=function(){this.gltfTexture=void 0,this.model=void 0,this.context=void 0};function nU(e,t,n){var i=t.gltf.textures[e.id],r=t._rendererResources.samplers[i.sampler];Object(o.a)(r)||(r=new ZP({wrapS:KP.REPEAT,wrapT:KP.REPEAT}));for(var a=!1,s=t.gltf.materials,c=s.length,l=0;l<c;++l){var u=s[l];if(Object(o.a)(u.extensions)&&Object(o.a)(u.extensions.KHR_techniques_webgl)){var h=u.extensions.KHR_techniques_webgl.values;for(var f in h)if(h.hasOwnProperty(f)&&-1!==f.indexOf("Texture")){var p=h[f];if(p.index===e.id&&Object(o.a)(p.extensions)&&Object(o.a)(p.extensions.KHR_texture_transform)){a=!0;break}}}if(a)break}var m=r.wrapS,g=r.wrapT,v=r.minificationFilter;a&&v!==$P.LINEAR&&v!==$P.NEAREST&&(v=v===$P.NEAREST_MIPMAP_NEAREST||v===$P.NEAREST_MIPMAP_LINEAR?$P.NEAREST:$P.LINEAR,r=new ZP({wrapS:r.wrapS,wrapT:r.wrapT,textureMinificationFilter:v,textureMagnificationFilter:r.magnificationFilter}));var _,b=e.internalFormat,y=!(Object(o.a)(b)&&FC.isCompressedFormat(b))&&(v===$P.NEAREST_MIPMAP_NEAREST||v===$P.NEAREST_MIPMAP_LINEAR||v===$P.LINEAR_MIPMAP_NEAREST||v===$P.LINEAR_MIPMAP_LINEAR),w=y||m===KP.REPEAT||m===KP.MIRRORED_REPEAT||g===KP.REPEAT||g===KP.MIRRORED_REPEAT,O=e.image;if(Object(o.a)(b))_=new nI({context:n,source:{arrayBufferView:e.bufferView},width:e.width,height:e.height,pixelFormat:b,sampler:r});else if(Object(o.a)(O)){var C=!d.isPowerOfTwo(O.width)||!d.isPowerOfTwo(O.height);if(w&&C){var E=document.createElement("canvas");E.width=d.nextPowerOfTwo(O.width),E.height=d.nextPowerOfTwo(O.height),E.getContext("2d").drawImage(O,0,0,O.width,O.height,0,0,E.width,E.height),O=E}_=new nI({context:n,source:O,pixelFormat:i.internalFormat,pixelDatatype:i.type,sampler:r,flipY:!1}),y&&_.generateMipmap()}Object(o.a)(_)&&(t._rendererResources.textures[e.id]=_,t._texturesByteLength+=_.sizeInBytes)}tU.prototype.set=function(e,t,n){this.gltfTexture=e,this.model=t,this.context=n},tU.prototype.execute=function(){nU(this.gltfTexture,this.model,this.context)};var iU=new tU;function rU(e,t,n,i){return function(r){Object(o.a)(i)&&(r=e.clampAnimations?i.clampTime(r):i.wrapTime(r),t[n]=i.evaluate(r,t[n]),t.dirtyNumber=e._maxDirtyNumber)}}function oU(e,t){var n=e._loadResources;if(n.finishedBuffersCreation()&&n.finishedProgramCreation()&&n.createVertexArrays){n.createVertexArrays=!1;var i=e._rendererResources.buffers,r=e._rendererResources.vertexArrays,a=e.gltf,s=a.accessors;dz.mesh(a,(function(n,c){dz.meshPrimitive(n,(function(n,l){var u,h,d,f=[],p=function(e,t){var n,i,r=e._sourceTechniques,a={},s=e._runtime.materialsById[t.material];if(!Object(o.a)(s))return a;var c=r[s._technique];if(!Object(o.a)(c))return a;var l=c.attributes,u=e._rendererResources.programs[c.program],h=u.vertexAttributes,d=u._attributeLocations;for(n in h)if(h.hasOwnProperty(n)){var f=l[n];Object(o.a)(f)&&(i=d[n],a[f.semantic]=i)}var p=e._precreatedAttributes;if(Object(o.a)(p))for(n in p)p.hasOwnProperty(n)&&(i=d[n],a[n]=i);return a}(e,n),m=e._decodedData[c+".primitive."+l];dz.meshPrimitiveAttribute(n,(function(e,t){if(u=p[t],Object(o.a)(u)){if(Object(o.a)(m)){var n=m.attributes;if(n.hasOwnProperty(t)){var r=n[t];return void f.push({index:u,vertexBuffer:i[r.bufferView],componentsPerAttribute:r.componentsPerAttribute,componentDatatype:r.componentDatatype,normalize:r.normalized,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride})}}var c=s[e],l=Object(o.a)(c.normalized)&&c.normalized;f.push({index:u,vertexBuffer:i[c.bufferView],componentsPerAttribute:fz(c.type),componentDatatype:c.componentType,normalize:l,offsetInBytes:c.byteOffset,strideInBytes:pz(a,c)})}}));var g,v=e._precreatedAttributes;if(Object(o.a)(v))for(d in v)v.hasOwnProperty(d)&&(u=p[d],Object(o.a)(u)&&((h=v[d]).index=u,f.push(h)));if(Object(o.a)(n.indices)){var _=s[n.indices].bufferView;Object(o.a)(m)&&(_=m.bufferView),g=i[_]}r[c+".primitive."+l]=new hR({context:t,attributes:f,indexBuffer:g})}))}))}}function aU(e){var t=e._loadResources;t.createRenderStates&&(t.createRenderStates=!1,dz.material(e.gltf,(function(t,n){!function(e,t,n){var i=e._rendererResources.renderStates,r=[Ts.FUNC_ADD,Ts.FUNC_ADD],a=[Ts.ONE,Ts.ONE_MINUS_SRC_ALPHA,Ts.ONE,Ts.ONE_MINUS_SRC_ALPHA];Object(o.a)(t.extensions)&&Object(o.a)(t.extensions.KHR_blend)&&(r=t.extensions.KHR_blend.blendEquation,a=t.extensions.KHR_blend.blendFactors);var s=!t.doubleSided,c="BLEND"===t.alphaMode;i[n]=XI.fromCache({cull:{enabled:s},depthTest:{enabled:!0,func:tR.LESS_OR_EQUAL},depthMask:!c,blending:{enabled:c,equationRgb:r[0],equationAlpha:r[1],functionSourceRgb:a[0],functionDestinationRgb:a[1],functionSourceAlpha:a[2],functionDestinationAlpha:a[3]}})}(e,t,n)})))}var sU={MODEL:function(e,t,n){return function(){return n.computedMatrix}},VIEW:function(e,t,n){return function(){return e.view}},PROJECTION:function(e,t,n){return function(){return e.projection}},MODELVIEW:function(e,t,n){var i=new Ae;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i)}},CESIUM_RTC_MODELVIEW:function(e,t,n){var i=new Ae;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i),Ae.setTranslation(i,t._rtcCenterEye,i)}},MODELVIEWPROJECTION:function(e,t,n){var i=new Ae;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i),Ae.multiply(e._projection,i,i)}},MODELINVERSE:function(e,t,n){var i=new Ae;return function(){return Ae.inverse(n.computedMatrix,i)}},VIEWINVERSE:function(e,t){return function(){return e.inverseView}},PROJECTIONINVERSE:function(e,t,n){return function(){return e.inverseProjection}},MODELVIEWINVERSE:function(e,t,n){var i=new Ae,r=new Ae;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i),Ae.inverse(i,r)}},MODELVIEWPROJECTIONINVERSE:function(e,t,n){var i=new Ae,r=new Ae;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i),Ae.multiply(e._projection,i,i),Ae.inverse(i,r)}},MODELINVERSETRANSPOSE:function(e,t,n){var i=new Ae,r=new oe;return function(){return Ae.inverse(n.computedMatrix,i),Ae.getMatrix3(i,r),oe.transpose(r,r)}},MODELVIEWINVERSETRANSPOSE:function(e,t,n){var i=new Ae,r=new Ae,o=new oe;return function(){return Ae.multiplyTransformation(e.view,n.computedMatrix,i),Ae.inverse(i,r),Ae.getMatrix3(r,o),oe.transpose(o,o)}},VIEWPORT:function(e,t,n){return function(){return e.viewportCartesian4}}};function cU(e,t,n,i,a,s,c){var l,u,h={},d={};return dz.techniqueUniform(n,(function(n,f){var p;if(Object(o.a)(i)&&Object(o.a)(i[f]))p=Tk.createUniformFunction(n.type,i[f],s,c),h[f]=p.func,d[f]=p;else if(Object(o.a)(n.node))h[f]=function(e,t,n,i){var r=t._runtime.nodes[e];return sU[n](i,t,r)}(n.node,e,n.semantic,a.uniformState);else if(Object(o.a)(n.semantic))if("JOINTMATRIX"===n.semantic)l=f;else if("MORPHWEIGHTS"===n.semantic)u=f;else if("ALPHACUTOFF"===n.semantic){var m=t.alphaMode;if(Object(o.a)(m)&&"MASK"===m){var g=Object(r.a)(t.alphaCutoff,.5);p=Tk.createUniformFunction(n.type,g,s,c),h[f]=p.func,d[f]=p}}else h[f]=Tk.getGltfSemanticUniforms()[n.semantic](a.uniformState,e);else if(Object(o.a)(n.value)){var v=Tk.createUniformFunction(n.type,n.value,s,c);h[f]=v.func,d[f]=v}})),{map:h,values:d,jointMatrixUniformName:l,morphWeightsUniformName:u}}function lU(e){return Tk.createUniformsForDracoQuantizedAttributes(e.attributes)}function uU(e,t){var n=qV(e,t),i=e._quantizedUniforms[n];return Tk.createUniformsForQuantizedAttributes(e.gltf,t,i)}function hU(e){return function(){return e}}function dU(e){return function(){return e.computedJointMatrices}}function fU(e){return function(){return e.weights}}function pU(e){return function(){return e.silhouetteColor}}function mU(e){return function(){return e.silhouetteSize}}function gU(e){return function(){return e.color}}var vU=new Ae;function _U(e){return function(){var t=e.clippingPlanes;if(!Object(o.a)(t)&&!Object(o.a)(e._sphericalHarmonicCoefficients)&&!Object(o.a)(e._specularEnvironmentMaps))return Ae.IDENTITY;var n=Object(o.a)(t)?t.modelMatrix:Ae.IDENTITY;return Ae.multiply(e._clippingPlaneModelViewMatrix,n,vU)}}function bU(e){return function(){var t=e.clippingPlanes;return Object(o.a)(t)&&t.enabled?t.texture:e._defaultTexture}}function yU(e){return function(){var t=e.clippingPlanes;if(!Object(o.a)(t))return Hf.WHITE.withAlpha(0);var n=Hf.clone(t.edgeColor);return n.alpha=t.edgeWidth,n}}function wU(e){return function(){return hH.getColorBlend(e.colorBlendMode,e.colorBlendAmount)}}function OU(e){return function(){return e._imageBasedLightingFactor}}function CU(e){return function(){return e._lightColor}}function EU(e){return function(){return e.luminanceAtZenith}}function AU(e){return function(){return e._sphericalHarmonicCoefficients}}function xU(e){return function(){return e._specularEnvironmentMapAtlas.texture}}function TU(e){return function(){return e._specularEnvironmentMapAtlas.texture.dimensions}}function SU(e){return function(){return e._specularEnvironmentMapAtlas.maximumMipmapLevel}}function DU(e,t){switch(e.mode){case xl.TRIANGLES:return t/3;case xl.TRIANGLE_STRIP:case xl.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function PU(e,t,n,i,r){for(var a=e._nodeCommands,s=e._pickIds,c=e.allowPicking,l=e._runtime.meshesByName,u=e._rendererResources,h=u.vertexArrays,d=u.programs,f=u.renderStates,p=e._uniformMaps,m=e.gltf,g=m.accessors,v=m.meshes,_=t.mesh,b=v[_],y=b.primitives,w=y.length,C=0;C<w;++C){var E,A=y[C],x=g[A.indices],T=e._runtime.materialsById[A.material]._program,S=e._decodedData[_+".primitive."+C],D=A.attributes.POSITION;if(Object(o.a)(D)){var P=Tk.getAccessorMinMax(m,D);E=gt.fromCornerPoints(O.fromArray(P.min),O.fromArray(P.max))}var I,M,R=h[_+".primitive."+C];if(Object(o.a)(S))M=S.numberOfIndices,I=0;else if(Object(o.a)(x))M=x.count,I=x.byteOffset/lc.getSizeInBytes(x.componentType);else{M=g[A.attributes.POSITION].count,I=0}e._trianglesLength+=DU(A,M);var L=p[A.material],j=L.uniformMap;if(Object(o.a)(L.jointMatrixUniformName)){var F={};F[L.jointMatrixUniformName]=dU(n),j=Object(Wf.a)(j,F)}if(Object(o.a)(L.morphWeightsUniformName)){var N={};N[L.morphWeightsUniformName]=fU(n),j=Object(Wf.a)(j,N)}j=Object(Wf.a)(j,{gltf_color:gU(e),gltf_colorBlend:wU(e),gltf_clippingPlanes:bU(e),gltf_clippingPlanesEdgeStyle:yU(e),gltf_clippingPlanesMatrix:_U(e),gltf_iblFactor:OU(e),gltf_lightColor:CU(e),gltf_sphericalHarmonicCoefficients:AU(e),gltf_specularMap:xU(e),gltf_specularMapSize:TU(e),gltf_maxSpecularLOD:SU(e),gltf_luminanceAtZenith:EU(e)}),Object(o.a)(e._uniformMapLoaded)&&(j=e._uniformMapLoaded(j,T,n));var z={};e.extensionsUsed.WEB3D_quantized_attributes?z=uU(e,A):e._dequantizeInShader&&Object(o.a)(S)&&(z=lU(S)),j=Object(Wf.a)(j,z);var k=f[A.material],B=k.blending.enabled,H=e._pickObject;Object(o.a)(H)||(H={primitive:e,id:e.id,node:n.publicNode,mesh:l[b.name]});var V,U=RR.castShadows(e._shadows),W=RR.receiveShadows(e._shadows);if(c&&!Object(o.a)(e._uniformMapLoaded)){V=i.createPickId(H),s.push(V);var G={czm_pickColor:hU(V.color)};j=Object(Wf.a)(j,G)}c&&(V=Object(o.a)(e._pickIdLoaded)&&Object(o.a)(e._uniformMapLoaded)?e._pickIdLoaded():"czm_pickColor");var q,Y=new CI({boundingVolume:new gt,cull:e.cull,modelMatrix:new Ae,primitiveType:A.mode,vertexArray:R,count:M,offset:I,shaderProgram:d[T],castShadows:U,receiveShadows:W,uniformMap:j,renderState:k,owner:H,pass:B?EI.TRANSLUCENT:e.opaquePass,pickId:V});r||((q=CI.shallowClone(Y)).boundingVolume=new gt,q.modelMatrix=new Ae);var $={show:!0,boundingSphere:E,command:Y,command2D:q,silhouetteModelCommand:void 0,silhouetteModelCommand2D:void 0,silhouetteColorCommand:void 0,silhouetteColorCommand2D:void 0,translucentCommand:void 0,translucentCommand2D:void 0,disableCullingCommand:void 0,disableCullingCommand2D:void 0,programId:T};n.commands.push($),a.push($)}}function IU(e,t){var n=t.context,i=t.scene3DOnly,r=e._quantizedVertexShaders,a=e._sourceTechniques,s=e._sourcePrograms,c=e._rendererResources,l=c.sourceShaders;for(var u in e._loadRendererResourcesFromCache&&(l=c.sourceShaders=e._cachedRendererResources.sourceShaders),a)if(a.hasOwnProperty(u)){var h=a[u].program,d=s[h],f=l[d.vertexShader];if(Tk.checkSupportedGlExtensions(d.glExtensions,n),e.extensionsUsed.WEB3D_quantized_attributes||e._dequantizeInShader){var p=r[h];Object(o.a)(p)||(p=YV(f,h,e),r[h]=p),f=p}f=$V(f,h,e._vertexShaderLoaded)}if(e._loadRendererResourcesFromCache){var m=e._cachedRendererResources;c.buffers=m.buffers,c.vertexArrays=m.vertexArrays,c.programs=m.programs,c.silhouettePrograms=m.silhouettePrograms,c.textures=m.textures,c.samplers=m.samplers,c.renderStates=m.renderStates,Object(o.a)(e._precreatedAttributes)&&oU(e,n),e._cachedGeometryByteLength+=function(e){var t=0;for(var n in e)e.hasOwnProperty(n)&&(t+=e[n].sizeInBytes);return t}(m.buffers),e._cachedTexturesByteLength+=function(e){var t=0;for(var n in e)e.hasOwnProperty(n)&&(t+=e[n].sizeInBytes);return t}(m.textures)}else!function(e,t){var n=e._loadResources;if(0===n.pendingBufferLoads){var i,r=t.context,o=n.vertexBuffersToCreate,a=n.indexBuffersToCreate;if(e.asynchronous){for(;o.length>0&&(WV.set(o.peek(),e,r),t.jobScheduler.execute(WV,yH.BUFFER));)o.dequeue();for(;a.length>0&&(i=a.peek(),GV.set(i.id,i.componentType,e,r),t.jobScheduler.execute(GV,yH.BUFFER));)a.dequeue()}else{for(;o.length>0;)HV(o.dequeue(),e,r);for(;a.length>0;)UV((i=a.dequeue()).id,i.componentType,e,r)}}}(e,t),function(e,t){var n=e._loadResources,i=n.programsToCreate;if(0===n.pendingShaderLoads&&0===n.pendingBufferLoads){var r=t.context;if(e.asynchronous)for(;i.length>0&&(JV.set(i.peek(),e,r),t.jobScheduler.execute(JV,yH.PROGRAM));)i.dequeue();else for(;i.length>0;)KV(i.dequeue(),e,r)}}(e,t),function(e){var t=e._loadResources;if(t.createSamplers){t.createSamplers=!1;var n=e._rendererResources.samplers;dz.sampler(e.gltf,(function(e,t){n[t]=new ZP({wrapS:e.wrapS,wrapT:e.wrapT,minificationFilter:e.minFilter,magnificationFilter:e.magFilter})}))}}(e),function(e){var t=e._loadResources;if(0===t.pendingBufferLoads)for(;t.texturesToCreateFromBufferView.length>0;){var n=t.texturesToCreateFromBufferView.dequeue(),i=e.gltf,r=i.bufferViews[n.bufferView],o=(i.textures[n.id].source,Tk.getFailedLoadFunction(e,"image","id: "+n.id+", bufferView: "+n.bufferView));if("image/ktx"===n.mimeType)kC(t.getBuffer(r)).then(FV(e,n.id)).otherwise(o),++e._loadResources.pendingTextureLoads;else if("image/crn"===n.mimeType)IC(t.getBuffer(r)).then(FV(e,n.id)).otherwise(o),++e._loadResources.pendingTextureLoads;else{var a=eU(t,n);MC({uint8Array:t.getBuffer(r),format:n.mimeType,flipY:!1}).then(a).otherwise(o),++t.pendingBufferViewToImage}}}(e),function(e,t){var n=t.context,i=e._loadResources.texturesToCreate;if(e.asynchronous)for(;i.length>0&&(iU.set(i.peek(),e,n),t.jobScheduler.execute(iU,yH.TEXTURE));)i.dequeue();else for(;i.length>0;)nU(i.dequeue(),e,n)}(e,t);!function(e){var t=e._loadResources;if(0===t.pendingBufferLoads&&t.createSkins){t.createSkins=!1;var n=e.gltf,i=n.accessors,r={};dz.skin(n,(function(t,n){var o,a=i[t.inverseBindMatrices];Ae.equals(t.bindShapeMatrix,Ae.IDENTITY)||(o=Ae.clone(t.bindShapeMatrix)),r[n]={inverseBindMatrices:DH.getSkinInverseBindMatrices(e,a),bindShapeMatrix:o}})),function(e,t){for(var n=e.gltf,i=n.skins,r=n.nodes,o=e._runtime.nodes,a=e._loadResources.skinnedNodesIds,s=a.length,c=0;c<s;++c){var l=a[c],u=o[l],h=r[l],d=t[h.skin];u.inverseBindMatrices=d.inverseBindMatrices,u.bindShapeMatrix=d.bindShapeMatrix;for(var f=i[h.skin].joints,p=f.length,m=0;m<p;++m){var g=o[f[m]];u.joints.push(g)}}}(e,r)}}(e),function(e){var t=e._loadResources;if(t.finishedPendingBufferLoads()&&t.createRuntimeAnimations){t.createRuntimeAnimations=!1,e._runtime.animations=[];var n=e._runtime.nodes,i=e.gltf.accessors;dz.animation(e.gltf,(function(t,r){for(var o=t.channels,a=t.samplers,s=Number.MAX_VALUE,c=-Number.MAX_VALUE,l=o.length,u=new Array(l),h=0;h<l;++h){var d=o[h],f=d.target,p=f.path,m=a[d.sampler],g=DH.getAnimationParameterValues(e,i[m.input]),v=DH.getAnimationParameterValues(e,i[m.output]);s=Math.min(s,g[0]),c=Math.max(c,g[g.length-1]);var _=DH.getAnimationSpline(e,r,t,d.sampler,m,g,p,v);u[h]=rU(e,n[f.node],f.path,_)}e._runtime.animations[r]={name:t.name,startTime:s,stopTime:c,channelEvaluators:u}}))}}(e),e._loadRendererResourcesFromCache||(oU(e,n),aU(e)),function(e,t){var n=e._loadResources;if(n.finishedProgramCreation()&&n.createUniformMaps){n.createUniformMaps=!1;var i=e.gltf,r=e._sourceTechniques,a=e._uniformMaps,s=e._rendererResources.textures,c=e._defaultTexture;dz.material(i,(function(n,i){var l=e._runtime.materialsById[i],u=r[l._technique],h=l._values,d=cU(e,n,u,h,t,s,c),f=a[i];if(f.uniformMap=d.map,f.values=d.values,f.jointMatrixUniformName=d.jointMatrixUniformName,f.morphWeightsUniformName=d.morphWeightsUniformName,Object(o.a)(u.attributes.a_outlineCoordinates)){var p=eV.createTexture(e,t);f.uniformMap.u_outlineTexture=function(){return p}}}))}}(e,n),function(e,t,n){var i=e._loadResources;if(i.finishedEverythingButTextureCreation()&&i.createRuntimeNodes){i.createRuntimeNodes=!1;for(var r=[],a=e._runtime.nodes,s=e.gltf,c=s.nodes,l=s.scenes[s.scene].nodes,u=l.length,h=[],d={},f=0;f<u;++f)for(h.push({parentRuntimeNode:void 0,gltfNode:c[l[f]],id:l[f]});h.length>0;){var p=h.pop();d[p.id]=!0;var m=p.parentRuntimeNode,g=p.gltfNode,v=a[p.id];if(0===v.parents.length)if(Object(o.a)(g.matrix))v.matrix=Ae.fromColumnMajorArray(g.matrix);else{var _=g.rotation;v.translation=O.fromArray(g.translation),v.rotation=No.unpack(_),v.scale=O.fromArray(g.scale)}Object(o.a)(m)?(m.children.push(v),v.parents.push(m)):r.push(v),Object(o.a)(g.mesh)&&PU(e,g,v,t,n);var b=g.children;if(Object(o.a)(b))for(var y=b.length,w=0;w<y;w++){var C=b[w];d[C]||h.push({parentRuntimeNode:v,gltfNode:c[C],id:b[w]})}}e._runtime.rootNodes=r,e._runtime.nodes=a}}(e,n,i)}function MU(e,t){var n=e.publicNode,i=n.matrix;n.useMatrix&&Object(o.a)(i)?Ae.clone(i,t):Object(o.a)(e.matrix)?Ae.clone(e.matrix,t):(Ae.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t),n.setMatrix(t))}var RU=[],LU=new he,jU=new Ae;var FU=new Ae;function NU(e){var t=CI.shallowClone(e);return t.pass=EI.TRANSLUCENT,t.renderState=function(e){var t=Object(Lf.a)(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=LP.ALPHA_BLEND,XI.fromCache(t)}(e.renderState),t}function zU(e,t,n){var i=t.scene3DOnly,r=e.color.alpha;if(r>0&&r<1){var a=e._nodeCommands,s=a.length;if(!Object(o.a)(a[0].translucentCommand)||n)for(var c=0;c<s;++c){var l=a[c],u=l.command;if(l.translucentCommand=NU(u),!i){var h=l.command2D;l.translucentCommand2D=NU(h)}}}}function kU(e){var t=CI.shallowClone(e);return t.renderState=function(e){var t=Object(Lf.a)(e,!0);return t.cull.enabled=!1,XI.fromCache(t)}(e.renderState),t}function BU(e,t,n){var i=t.scene3DOnly;if(!e.backFaceCulling){var r=e._nodeCommands,a=r.length;if(!Object(o.a)(r[0].disableCullingCommand)||n)for(var s=0;s<a;++s){var c=r[s],l=c.command;if(c.disableCullingCommand=kU(l),!i){var u=c.command2D;c.disableCullingCommand2D=kU(u)}}}}function HU(e,t){var n=e._rendererResources.programs;for(var i in n)if(n.hasOwnProperty(i)&&n[i]===t)return i}function VU(e,t,n){var i=t.vertexShaderSource.sources[0],r=t._attributeLocations,o=e._normalAttributeName;i=KM.replaceMain(i,"gltf_silhouette_main"),i+="uniform float gltf_silhouetteSize; \nvoid main() \n{ \n gltf_silhouette_main(); \n vec3 n = normalize(czm_normal3D * "+o+"); \n n.x *= czm_projection[0][0]; \n n.y *= czm_projection[1][1]; \n vec4 clip = gl_Position; \n clip.xy += n.xy * clip.w * gltf_silhouetteSize * czm_pixelRatio / czm_viewport.z; \n gl_Position = clip; \n}";return LM.fromCache({context:n.context,vertexShaderSource:i,fragmentShaderSource:"uniform vec4 gltf_silhouetteColor; \nvoid main() \n{ \n gl_FragColor = czm_gammaCorrect(gltf_silhouetteColor); \n}",attributeLocations:r})}function UU(e,t){return TV(t.context)&&e.silhouetteSize>0&&e.silhouetteColor.alpha>0&&Object(o.a)(e._normalAttributeName)}function WU(e){return e.color.alpha>0&&e.color.alpha<1}function GU(e){return 0===e.color.alpha}function qU(e,t){return Math.floor(e)!==Math.floor(t)||Math.ceil(e)!==Math.ceil(t)}var YU=0;function $U(e,t){for(var n=++YU%255,i=function(e){for(var t=e._nodeCommands,n=t.length,i=0;i<n;++i){if(t[i].command.pass===EI.TRANSLUCENT)return!0}return!1}(e)||WU(e)||e.silhouetteColor.alpha<1,r=e._rendererResources.silhouettePrograms,a=t.scene3DOnly,s=e._nodeCommands,c=s.length,l=0;l<c;++l){var u=s[l],h=u.command,d=WU(e)?u.translucentCommand:h,f=CI.shallowClone(d),p=Object(Lf.a)(d.renderState);p.stencilTest={enabled:!0,frontFunction:Ts.ALWAYS,backFunction:Ts.ALWAYS,reference:n,mask:-1,frontOperation:{fail:Ts.KEEP,zFail:Ts.KEEP,zPass:Ts.REPLACE},backOperation:{fail:Ts.KEEP,zFail:Ts.KEEP,zPass:Ts.REPLACE}},GU(e)&&(p.colorMask={red:!1,green:!1,blue:!1,alpha:!1},p.depthMask=!1),p=XI.fromCache(p),f.renderState=p,u.silhouetteModelCommand=f;var m=CI.shallowClone(h);(p=Object(Lf.a)(h.renderState,!0)).depthTest.enabled=!0,p.cull.enabled=!1,i&&(m.pass=EI.TRANSLUCENT,p.depthMask=!1,p.blending=LP.ALPHA_BLEND),p.stencilTest={enabled:!0,frontFunction:Ts.NOTEQUAL,backFunction:Ts.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:Ts.KEEP,zFail:Ts.KEEP,zPass:Ts.KEEP},backOperation:{fail:Ts.KEEP,zFail:Ts.KEEP,zPass:Ts.KEEP}},p=XI.fromCache(p);var g=h.shaderProgram,v=HU(e,g),_=r[v];Object(o.a)(_)||(_=VU(e,g,t),r[v]=_);var b=Object(Wf.a)(h.uniformMap,{gltf_silhouetteColor:pU(e),gltf_silhouetteSize:mU(e)});if(m.renderState=p,m.shaderProgram=_,m.uniformMap=b,m.castShadows=!1,m.receiveShadows=!1,u.silhouetteColorCommand=m,!a){var y=u.command2D,w=CI.shallowClone(f);w.boundingVolume=y.boundingVolume,w.modelMatrix=y.modelMatrix,u.silhouetteModelCommand2D=w;var O=CI.shallowClone(m);w.boundingVolume=y.boundingVolume,w.modelMatrix=y.modelMatrix,u.silhouetteColorCommand2D=O}}}function XU(e,t,n){if(UU(e,t)){var i=e._nodeCommands,r=qU(e.color.alpha,e._colorPreviousAlpha)||qU(e.silhouetteColor.alpha,e._silhouetteColorPreviousAlpha)||!Object(o.a)(i[0].silhouetteModelCommand);e._colorPreviousAlpha=e.color.alpha,e._silhouetteColorPreviousAlpha=e.silhouetteColor.alpha,(r||n)&&$U(e,t)}}var KU=new gt;var QU=new O,ZU=new R;function JU(e,t){var n=e.scale;if(0!==e.minimumPixelSize){var i=t.context,r=Math.max(i.drawingBufferWidth,i.drawingBufferHeight),a=Object(o.a)(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;if(QU.x=a[12],QU.y=a[13],QU.z=a[14],Object(o.a)(e._rtcCenter)&&O.add(e._rtcCenter,QU,QU),e._mode!==IR.SCENE3D){var s=t.mapProjection,c=s.ellipsoid.cartesianToCartographic(QU,ZU);s.project(c,QU),O.fromElements(QU.z,QU.x,QU.y,QU)}var l=e.boundingSphere.radius,u=function(e,t,n){return KU.center=e,KU.radius=t,n.camera.getPixelSize(KU,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}(QU,l,t),h=1/u;Math.min(h*(2*l),r)<e.minimumPixelSize&&(n=e.minimumPixelSize*u/(2*e._initialRadius))}return Object(o.a)(e.maximumScale)?Math.min(e.maximumScale,n):n}function eW(e){Object(o.a)(e._cacheKey)&&Object(o.a)(e._cachedGltf)&&0===--e._cachedGltf.count&&delete EV[e._cacheKey],e._cachedGltf=void 0}function tW(e,t){this.buffers=void 0,this.vertexArrays=void 0,this.programs=void 0,this.sourceShaders=void 0,this.silhouettePrograms=void 0,this.textures=void 0,this.samplers=void 0,this.renderStates=void 0,this.ready=!1,this.context=e,this.cacheKey=t,this.count=0}function nW(e){for(var t in e)e.hasOwnProperty(t)&&e[t].destroy()}function iW(e,t,n){return function(i){if(e.heightReference===iP.RELATIVE_TO_GROUND){var r=t.cartesianToCartographic(i,ZU);r.height+=n.height,t.cartographicToCartesian(r,i)}var o=e._clampedModelMatrix;Ae.clone(e.modelMatrix,o),o[12]=i.x,o[13]=i.y,o[14]=i.z,e._heightChanged=!0}}tW.prototype.release=function(){if(0===--this.count)return Object(o.a)(this.cacheKey)&&delete this.context.cache.modelRendererResourceCache[this.cacheKey],nW((e=this).buffers),nW(e.vertexArrays),nW(e.programs),nW(e.silhouettePrograms),nW(e.textures),Ks(this);var e};var rW=new O,oW=new R;function aW(e,t){e.programs!==t.programs&&nW(e.programs),e.silhouettePrograms!==t.silhouettePrograms&&nW(e.silhouettePrograms)}xV.prototype.update=function(e){if(e.mode!==IR.MORPHING)if(oo.supportsWebP.initialized){var t=oo.supportsWebP(),n=e.context;if(this._defaultTexture=n.defaultTexture,this._state===yV.NEEDS_LOAD&&Object(o.a)(this.gltf)){var i,s=this.cacheKey;if(Object(o.a)(s)){n.cache.modelRendererResourceCache=Object(r.a)(n.cache.modelRendererResourceCache,{});var c=n.cache.modelRendererResourceCache;if(i=c[this.cacheKey],Object(o.a)(i)){if(!i.ready)return;++i.count,this._loadRendererResourcesFromCache=!0}else(i=new tW(n,s)).count=1,c[this.cacheKey]=i;this._cachedRendererResources=i}else(i=new tW(n)).count=1,this._cachedRendererResources=i;if(this._state=yV.LOADING,this._state!==yV.FAILED){var l=this.gltf.extensions;if(Object(o.a)(l)&&Object(o.a)(l.CESIUM_RTC)){var u=O.fromArray(l.CESIUM_RTC.center);if(!O.equals(u,O.ZERO)){this._rtcCenter3D=u;var h=e.mapProjection,f=h.ellipsoid.cartesianToCartographic(this._rtcCenter3D),p=h.project(f);O.fromElements(p.z,p.x,p.y,p),this._rtcCenter2D=p,this._rtcCenterEye=new O,this._rtcCenter=this._rtcCenter3D}}_z(this.gltf),this._loadResources=new ik,this._loadRendererResourcesFromCache||Tk.parseBuffers(this,jV)}}var m=this._loadResources,g=this._incrementallyLoadTextures,v=!1;if(this._state===yV.LOADING){if(0===m.pendingBufferLoads){if(!m.initialized){if(e.brdfLutGenerator.update(e),Tk.checkSupportedExtensions(this.extensionsRequired,t),Tk.updateForwardAxis(this),!Object(o.a)(this.gltf.extras.sourceVersion)){var _=this.gltf;_.extras.sourceVersion=Tk.getAssetVersion(_),_.extras.sourceKHRTechniquesWebGL=Object(o.a)(Tk.getUsedExtensions(_).KHR_techniques_webgl),this._sourceVersion=_.extras.sourceVersion,this._sourceKHRTechniquesWebGL=_.extras.sourceKHRTechniquesWebGL,tk(_),gz(_);var b={addBatchIdToGeneratedShaders:this._addBatchIdToGeneratedShaders};Dk(_,b),Fk(_,b)}this._sourceVersion=this.gltf.extras.sourceVersion,this._sourceKHRTechniquesWebGL=this.gltf.extras.sourceKHRTechniquesWebGL,this._dequantizeInShader=this._dequantizeInShader&&gH.hasExtension(this),function(e){var t=e.gltf,n=e._loadResources;dz.buffer(t,(function(e,t){n.buffers[t]=e.extras._pipeline.source}))}(this),function(e){var t={},n={},i={};e._runtime.articulationsByName=t,e._runtime.articulationsByStageKey=n,e._runtime.stagesByKey=i;var r=e.gltf;if(uz(r,"AGI_articulations")&&Object(o.a)(r.extensions)&&Object(o.a)(r.extensions.AGI_articulations)){var a=r.extensions.AGI_articulations.articulations;if(Object(o.a)(a))for(var s=a.length,c=0;c<s;++c){var l=Object(Lf.a)(a[c]);l.nodes=[],l.isDirty=!0,t[l.name]=l;for(var u=l.stages.length,h=0;h<u;++h){var d=l.stages[h];d.currentValue=d.initialValue;var f=l.name+" "+d.name;n[f]=l,i[f]=d}}}}(this),function(e){var t=e.gltf;if(uz(t,"KHR_techniques_webgl")){var n=e._sourcePrograms,i=e._sourceTechniques,r=t.extensions.KHR_techniques_webgl.programs;dz.technique(t,(function(e,t){i[t]=Object(Lf.a)(e);var a=e.program;Object(o.a)(n[a])||(n[a]=Object(Lf.a)(r[a]))}))}}(this),this._loadRendererResourcesFromCache||(function(e){var t=e.gltf.bufferViews,n=e._loadResources.vertexBuffersToCreate;dz.bufferView(e.gltf,(function(e,t){e.target===Ts.ARRAY_BUFFER&&n.enqueue(t)}));var i=e._loadResources.indexBuffersToCreate,r={};dz.accessor(e.gltf,(function(e){var n=e.bufferView;Object(o.a)(n)&&(t[n].target!==Ts.ELEMENT_ARRAY_BUFFER||Object(o.a)(r[n])||(r[n]=!0,i.enqueue({id:n,componentType:e.componentType})))}))}(this),function(e){var t=e.gltf,n=t.buffers,i=t.bufferViews,r=e._rendererResources.sourceShaders;dz.shader(t,(function(t,a){if(Object(o.a)(t.bufferView)){var s=t.bufferView,c=i[s],l=c.buffer,u=n[l],h=Du(u.extras._pipeline.source,c.byteOffset,c.byteLength);r[a]=h}else if(Object(o.a)(t.extras._pipeline.source))r[a]=t.extras._pipeline.source;else{++e._loadResources.pendingShaderLoads;var d=e._resource.getDerivedResource({url:t.uri});d.fetchText().then(function(e,t,n){return function(i){var r=e._loadResources;r.shaders[n]={source:i,type:t,bufferView:void 0},--r.pendingShaderLoads,e._rendererResources.sourceShaders[n]=i}}(e,t.type,a)).otherwise(Tk.getFailedLoadFunction(e,"shader",d.url))}}))}(this),function(e){var t=e._sourceTechniques;for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];e._loadResources.programsToCreate.enqueue({programId:i.program,techniqueId:n})}}(this),function(e,t,n){var i,r=e.gltf,a=r.images;dz.texture(r,(function(r,s){var c=r.source;Object(o.a)(r.extensions)&&Object(o.a)(r.extensions.EXT_texture_webp)&&n&&(c=r.extensions.EXT_texture_webp.source);var l=a[c],u=l.extras,h=l.bufferView,d=l.mimeType;if(i=l.uri,Object(o.a)(u)&&Object(o.a)(u.compressedImage3DTiles)){var f=u.compressedImage3DTiles.crunch,p=u.compressedImage3DTiles.s3tc,m=u.compressedImage3DTiles.pvrtc1,g=u.compressedImage3DTiles.etc1;t.s3tc&&Object(o.a)(f)?(d=f.mimeType,Object(o.a)(f.bufferView)?h=f.bufferView:i=f.uri):t.s3tc&&Object(o.a)(p)?(d=p.mimeType,Object(o.a)(p.bufferView)?h=p.bufferView:i=p.uri):t.pvrtc&&Object(o.a)(m)?(d=m.mimeType,Object(o.a)(m.bufferView)?h=m.bufferView:i=m.uri):t.etc1&&Object(o.a)(g)&&(d=g.mimeType,Object(o.a)(g.bufferView)?h=g.bufferView:i=g.uri)}if(Object(o.a)(h))e._loadResources.texturesToCreateFromBufferView.enqueue({id:s,image:void 0,bufferView:h,mimeType:d});else{++e._loadResources.pendingTextureLoads;var v=e._resource.getDerivedResource({url:i});(NV.test(i)?kC(v):zV.test(i)?IC(v):v.fetchImage()).then(FV(e,s)).otherwise(Tk.getFailedLoadFunction(e,"image",v.url))}}))}(this,n,t)),function(e){var t=e.gltf,n=e._sourceTechniques,i={},r={},a=e._uniformMaps;dz.material(t,(function(t,s){a[s]={uniformMap:void 0,values:void 0,jointMatrixUniformName:void 0,morphWeightsUniformName:void 0};var c=new HH(e,t,s);if(Object(o.a)(t.extensions)&&Object(o.a)(t.extensions.KHR_techniques_webgl)){var l=t.extensions.KHR_techniques_webgl.technique;c._technique=l,c._program=n[l].program,dz.materialValue(t,(function(e,t){Object(o.a)(c._values)||(c._values={}),c._values[t]=Object(Lf.a)(e)}))}i[t.name]=c,r[s]=c})),e._runtime.materialsByName=i,e._runtime.materialsById=r}(this),function(e){var t={},n=e._runtime.materialsById;dz.mesh(e.gltf,(function(i,r){t[i.name]=new UH(i,n,r),(Object(o.a)(e.extensionsUsed.WEB3D_quantized_attributes)||e._dequantizeInShader)&&dz.meshPrimitive(i,(function(t,n){var i=qV(e,t),a=e._programPrimitives[i];Object(o.a)(a)||(a={},e._programPrimitives[i]=a),a[r+".primitive."+n]=t}))})),e._runtime.meshesByName=t}(this),function(e){var t={},n={},i=[],r=e._loadResources.skinnedNodesIds,a=e._runtime.articulationsByName;dz.node(e.gltf,(function(s,c){var l={matrix:void 0,translation:void 0,rotation:void 0,scale:void 0,computedShow:!0,transformToRoot:new Ae,computedMatrix:new Ae,dirtyNumber:0,commands:[],inverseBindMatrices:void 0,bindShapeMatrix:void 0,joints:[],computedJointMatrices:[],jointName:s.jointName,weights:[],children:[],parents:[],publicNode:void 0};if(l.publicNode=new GH(e,s,l,c,Tk.getTransform(s)),t[c]=l,n[s.name]=l,Object(o.a)(s.skin)&&(r.push(c),i.push(l)),Object(o.a)(s.extensions)&&Object(o.a)(s.extensions.AGI_articulations)){var u=s.extensions.AGI_articulations.articulationName;if(Object(o.a)(u)){var h=Ae.clone(l.publicNode.originalMatrix,kV),d=a[u];d.nodes.push(l.publicNode);for(var f=d.stages.length,p=0;p<f;++p){h=RV(d.stages[p],h)}l.publicNode.matrix=h}}})),e._runtime.nodes=t,e._runtime.nodesByName=n,e._runtime.skinnedNodes=i}(this),gH.parse(this,n),m.initialized=!0}m.finishedDecoding()||gH.decodeModel(this,n).otherwise(Tk.getFailedLoadFunction(this,"model",this.basePath)),m.finishedDecoding()&&!m.resourcesParsed&&(this._boundingSphere=Tk.computeBoundingSphere(this),this._initialRadius=this._boundingSphere.radius,gH.cacheDataForModel(this),m.resourcesParsed=!0),m.resourcesParsed&&0===m.pendingShaderLoads&&(eV.outlinePrimitives(this),IU(this,e))}(m.finished()||g&&m.finishedEverythingButTextureCreation())&&(this._state=yV.LOADED,v=!0)}if(Object(o.a)(m)&&this._state===yV.LOADED&&(g&&!v&&IU(this,e),m.finished())){this._loadResources=void 0;var y=this._rendererResources,w=this._cachedRendererResources;w.buffers=y.buffers,w.vertexArrays=y.vertexArrays,w.programs=y.programs,w.sourceShaders=y.sourceShaders,w.silhouettePrograms=y.silhouettePrograms,w.textures=y.textures,w.samplers=y.samplers,w.renderStates=y.renderStates,w.ready=!0,this._normalAttributeName=Tk.getAttributeOrUniformBySemantic(this.gltf,"NORMAL"),Object(o.a)(this._precreatedAttributes)&&(w.vertexArrays={}),this.releaseGltfJson&&eW(this)}var C=_V.isSupported(n);if(this._shouldUpdateSpecularMapAtlas&&C){if(this._shouldUpdateSpecularMapAtlas=!1,this._specularEnvironmentMapAtlas=this._specularEnvironmentMapAtlas&&this._specularEnvironmentMapAtlas.destroy(),this._specularEnvironmentMapAtlas=void 0,Object(o.a)(this._specularEnvironmentMaps)){this._specularEnvironmentMapAtlas=new _V(this._specularEnvironmentMaps);var E=this;this._specularEnvironmentMapAtlas.readyPromise.then((function(){E._shouldRegenerateShaders=!0})).otherwise((function(e){console.error("Error loading specularEnvironmentMaps: "+e)}))}this._shouldRegenerateShaders=!0}Object(o.a)(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.update(e);var A=!Object(o.a)(this._specularEnvironmentMapAtlas)&&Object(o.a)(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,x=!Object(o.a)(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,T=!Object(o.a)(this._sphericalHarmonicCoefficients)&&Object(o.a)(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,S=!Object(o.a)(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||A||x||T||S,this._useDefaultSpecularMaps=!Object(o.a)(this._specularEnvironmentMapAtlas)&&Object(o.a)(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!Object(o.a)(this._sphericalHarmonicCoefficients)&&Object(o.a)(e.sphericalHarmonicCoefficients);var D=UU(this,e),P=WU(this),I=GU(this),M=this.backFaceCulling,L=!Object(o.a)(this.distanceDisplayCondition)||function(e,t){var n,i=e.distanceDisplayCondition,r=i.near*i.near,o=i.far*i.far;if(t.mode===IR.SCENE2D){n=.5*(t.camera.frustum.right-t.camera.frustum.left),n*=n}else{var a=Ae.getTranslation(e.modelMatrix,rW);if(t.mode===IR.COLUMBUS_VIEW){var s=t.mapProjection,c=s.ellipsoid.cartesianToCartographic(a,oW);a=s.project(c,a),O.fromElements(a.z,a.x,a.y,a)}n=O.distanceSquared(a,t.camera.positionWC)}return n>=r&&n<=o}(this,e),j=this.show&&L&&0!==this.scale&&(!I||D);if(j&&this._state===yV.LOADED||v){var F=this.activeAnimations.update(e)||this._cesiumAnimationsDirty;this._cesiumAnimationsDirty=!1,this._dirty=!1;var N=this.modelMatrix,z=e.mode!==this._mode;this._mode=e.mode;var k=!Ae.equals(this._modelMatrix,N)||this._scale!==this.scale||this._minimumPixelSize!==this.minimumPixelSize||0!==this.minimumPixelSize||this._maximumScale!==this.maximumScale||this._heightReference!==this.heightReference||this._heightChanged||z;if(k||v){Ae.clone(N,this._modelMatrix),function(e){Object(o.a)(e._removeUpdateHeightCallback)&&(e._removeUpdateHeightCallback(),e._removeUpdateHeightCallback=void 0);var t=e._scene;if(Object(o.a)(t)&&Object(o.a)(t.globe)&&e.heightReference!==iP.NONE){var n=t.globe,i=n.ellipsoid,r=e.modelMatrix;QU.x=r[12],QU.y=r[13],QU.z=r[14];var s=i.cartesianToCartographic(QU);Object(o.a)(e._clampedModelMatrix)||(e._clampedModelMatrix=Ae.clone(r,new Ae));var c=n._surface;e._removeUpdateHeightCallback=c.updateHeight(s,iW(e,i,s));var l=n.getHeight(s);if(Object(o.a)(l)){var u=iW(e,i,s);R.clone(s,ZU),ZU.height=l,i.cartographicToCartesian(ZU,QU),u(QU)}}else{if(e.heightReference!==iP.NONE)throw new a.a("Height reference is not supported without a scene and globe.");e._clampedModelMatrix=void 0}}(this),Object(o.a)(this._clampedModelMatrix)&&(N=this._clampedModelMatrix),this._scale=this.scale,this._minimumPixelSize=this.minimumPixelSize,this._maximumScale=this.maximumScale,this._heightReference=this.heightReference,this._heightChanged=!1;var B=JU(this,e),H=this._computedModelMatrix;Ae.multiplyByUniformScale(N,B,H),this._upAxis===ON.Y?Ae.multiplyTransformation(H,ON.Y_UP_TO_Z_UP,H):this._upAxis===ON.X&&Ae.multiplyTransformation(H,ON.X_UP_TO_Z_UP,H),this.forwardAxis===ON.Z&&Ae.multiplyTransformation(H,ON.Z_UP_TO_X_UP,H)}(F||k||v)&&(function(e,t,n,i){var r=e._maxDirtyNumber,a=e._runtime.rootNodes,s=a.length,c=RU,l=e._computedModelMatrix;if(e._mode!==IR.SCENE3D&&!e._ignoreCommands){var u=Ae.getColumn(l,3,LU);if(he.equals(u,he.UNIT_W)){var h=e.boundingSphere.center,f=ya.wgs84To2DModelMatrix(i,h,jU);l=Ae.multiply(f,l,jU),Object(o.a)(e._rtcCenter)&&(Ae.setTranslation(l,he.UNIT_W,l),e._rtcCenter=e._rtcCenter2D)}else l=ya.basisTo2D(i,l,jU),e._rtcCenter=e._rtcCenter3D}for(var p=0;p<s;++p){var m=a[p];for(MU(m,m.transformToRoot),c.push(m);c.length>0;){var g=(m=c.pop()).transformToRoot,v=m.commands;if(m.dirtyNumber===r||t||n){var _=Ae.multiplyTransformation(l,g,m.computedMatrix),b=v.length;if(b>0)for(var y=0;y<b;++y){var w=v[y],C=w.command;Ae.clone(_,C.modelMatrix),gt.transform(w.boundingSphere,C.modelMatrix,C.boundingVolume),Object(o.a)(e._rtcCenter)&&O.add(e._rtcCenter,C.boundingVolume.center,C.boundingVolume.center),C=w.command2D,Object(o.a)(C)&&e._mode===IR.SCENE2D&&(Ae.clone(_,C.modelMatrix),C.modelMatrix[13]-=2*d.sign(C.modelMatrix[13])*d.PI*i.ellipsoid.maximumRadius,gt.transform(w.boundingSphere,C.modelMatrix,C.boundingVolume))}}var E=m.children;if(Object(o.a)(E))for(var A=E.length,x=0;x<A;++x){var T=E[x];T.dirtyNumber=Math.max(T.dirtyNumber,m.dirtyNumber),(T.dirtyNumber===r||n)&&(MU(T,T.transformToRoot),Ae.multiplyTransformation(g,T.transformToRoot,T.transformToRoot)),c.push(T)}}}++e._maxDirtyNumber}(this,k,v,e.mapProjection),this._dirty=!0,(F||v)&&function(e){for(var t=e._runtime.skinnedNodes,n=t.length,i=0;i<n;++i){var r=t[i];FU=Ae.inverseTransformation(r.transformToRoot,FU);for(var a=r.computedJointMatrices,s=r.joints,c=r.bindShapeMatrix,l=r.inverseBindMatrices,u=l.length,h=0;h<u;++h)Object(o.a)(a[h])||(a[h]=new Ae),a[h]=Ae.multiplyTransformation(FU,s[h].transformToRoot,a[h]),a[h]=Ae.multiplyTransformation(a[h],l[h],a[h]),Object(o.a)(c)&&(a[h]=Ae.multiplyTransformation(a[h],c,a[h]))}}(this)),this._perNodeShowDirty&&(this._perNodeShowDirty=!1,function(e){for(var t=e._runtime.rootNodes,n=t.length,i=RU,r=0;r<n;++r){var a=t[r];for(a.computedShow=a.publicNode.show,i.push(a);i.length>0;){for(var s=(a=i.pop()).computedShow,c=a.commands,l=c.length,u=0;u<l;++u)c[u].show=s;var h=a.children;if(Object(o.a)(h))for(var d=h.length,f=0;f<d;++f){var p=h[f];p.computedShow=s&&p.publicNode.show,i.push(p)}}}}(this)),function(e,t){var n=e.id;if(e._id!==n){e._id=n;for(var i=e._pickIds,r=i.length,o=0;o<r;++o)i[o].object.id=n}}(this),function(e){if(e._debugWireframe!==e.debugWireframe){e._debugWireframe=e.debugWireframe;for(var t=e.debugWireframe?xl.LINES:xl.TRIANGLES,n=e._nodeCommands,i=n.length,r=0;r<i;++r)n[r].command.primitiveType=t}}(this),function(e){if(e.debugShowBoundingVolume!==e._debugShowBoundingVolume){e._debugShowBoundingVolume=e.debugShowBoundingVolume;for(var t=e.debugShowBoundingVolume,n=e._nodeCommands,i=n.length,r=0;r<i;++r)n[r].command.debugShowBoundingVolume=t}}(this),function(e){if(e.shadows!==e._shadows){e._shadows=e.shadows;for(var t=RR.castShadows(e.shadows),n=RR.receiveShadows(e.shadows),i=e._nodeCommands,r=i.length,o=0;o<r;o++){var a=i[o];a.command.castShadows=t,a.command.receiveShadows=n}}}(this),function(e,t){var n=e._clippingPlanes;Object(o.a)(n)&&n.owner===e&&n.enabled&&n.update(t)}(this,e);var V=this._clippingPlanes,U=0,W=Object(o.a)(V)&&V.enabled&&V.length>0,G=Object(o.a)(this._sphericalHarmonicCoefficients)||this._useDefaultSphericalHarmonics,q=Object(o.a)(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.ready||this._useDefaultSpecularMaps;if(W||G||q){var Y=Object(r.a)(this.clippingPlanesOriginMatrix,N);Ae.multiply(n.uniformState.view3D,Y,this._clippingPlaneModelViewMatrix)}W&&(U=V.clippingPlanesState);var $=this._shouldRegenerateShaders;$=$||this._clippingPlanesState!==U,this._clippingPlanesState=U;var X=SV(this);X!==this._colorShadingEnabled&&(this._colorShadingEnabled=X,$=!0),$?function(e,t){var n,i=e._rendererResources,r=e._cachedRendererResources;if(aW(i,r),DV(e)||SV(e)||e._shouldRegenerateShaders){e._shouldRegenerateShaders=!1,i.programs={},i.silhouettePrograms={};var a,s={},c=e._sourceTechniques;for(var l in c)c.hasOwnProperty(l)&&(a=c[l],n=a.program,s[n]||(s[n]=!0,QV({programId:n,techniqueId:l},e,t.context)))}else i.programs=r.programs,i.silhouettePrograms=r.silhouettePrograms;for(var u=i.programs,h=e._nodeCommands,d=h.length,f=0;f<d;++f){var p=h[f];n=p.programId;var m=u[n];p.command.shaderProgram=m,Object(o.a)(p.command2D)&&(p.command2D.shaderProgram=m)}zU(e,t,!0),BU(e,t,!0),XU(e,t,!0)}(this,e):(zU(this,e,!1),BU(this,e,!1),XU(this,e,!1))}if(v){var K=this;e.afterRender.push((function(){K._ready=!0,K._readyPromise.resolve(K)}))}else{if(j&&!this._ignoreCommands){var Q,Z,J,ee=e.commandList,te=e.passes,ne=this._nodeCommands,ie=ne.length,re=e.mapProjection.ellipsoid.maximumRadius*d.PI;if(te.render||te.pick&&this.allowPicking){for(Q=0;Q<ie;++Q)if((Z=ne[Q]).show){var oe=Z.command;if(D?oe=Z.silhouetteModelCommand:P?oe=Z.translucentCommand:M||(oe=Z.disableCullingCommand),ee.push(oe),J=Z.command.boundingVolume,e.mode===IR.SCENE2D&&(J.center.y+J.radius>re||J.center.y-J.radius<re)){var ae=Z.command2D;D?ae=Z.silhouetteModelCommand2D:P?ae=Z.translucentCommand2D:M||(ae=Z.disableCullingCommand2D),ee.push(ae)}}if(D&&!te.pick)for(Q=0;Q<ie;++Q)(Z=ne[Q]).show&&(ee.push(Z.silhouetteColorCommand),J=Z.command.boundingVolume,e.mode===IR.SCENE2D&&(J.center.y+J.radius>re||J.center.y-J.radius<re)&&ee.push(Z.silhouetteColorCommand2D))}}var se=this._credit;Object(o.a)(se)&&e.creditDisplay.addCredit(se);for(var ce=this._resourceCredits,le=ce.length,ue=0;ue<le;ue++)e.creditDisplay.addCredit(ce[ue])}}else oo.supportsWebP.initialize()},xV.prototype.isDestroyed=function(){return!1},xV.prototype.destroy=function(){Object(o.a)(this._precreatedAttributes)&&nW(this._rendererResources.vertexArrays),Object(o.a)(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),Object(o.a)(this._terrainProviderChangedCallback)&&(this._terrainProviderChangedCallback(),this._terrainProviderChangedCallback=void 0),Object(o.a)(this._cachedRendererResources)&&aW(this._rendererResources,this._cachedRendererResources),this._rendererResources=void 0,this._cachedRendererResources=this._cachedRendererResources&&this._cachedRendererResources.release(),gH.destroyCachedDataForModel(this);for(var e=this._pickIds,t=e.length,n=0;n<t;++n)e[n].destroy();eW(this),this._quantizedVertexShaders=void 0;var i=this._clippingPlanes;return Object(o.a)(i)&&!i.isDestroyed()&&i.owner===this&&i.destroy(),this._clippingPlanes=void 0,this._specularEnvironmentMapAtlas=this._specularEnvironmentMapAtlas&&this._specularEnvironmentMapAtlas.destroy(),Ks(this)},xV._getClippingFunction=bH,xV._modifyShaderForColor=function(e){return e=KM.replaceMain(e,"gltf_blend_main"),e+="uniform vec4 gltf_color; \nuniform float gltf_colorBlend; \nvoid main() \n{ \n gltf_blend_main(); \n gl_FragColor.rgb = mix(gl_FragColor.rgb, gltf_color.rgb, gltf_colorBlend); \n float highlight = ceil(gltf_colorBlend); \n gl_FragColor.rgb *= mix(gltf_color.rgb, vec3(1.0), highlight); \n gl_FragColor.a *= gltf_color.a; \n} \n"};var sW=xV;function cW(e,t,n,i,a){this._tileset=e,this._tile=t,this._resource=n,this._model=void 0,this._batchTable=void 0,this._features=void 0,this._batchIdAttributeName=void 0,this._diffuseAttributeOrUniformName={},this._rtcCenterTransform=void 0,this._contentModelMatrix=void 0,this.featurePropertiesDirty=!1,function(e,t,n){var i=e._tileset,a=e._tile,s=e._resource,c=Object(r.a)(n,0);n=c;var l=new Uint8Array(t),u=new DataView(t);n+=lW;var h=u.getUint32(n,!0);if(1!==h)throw new de.a("Only Batched 3D Model version 1 is supported. Version "+h+" is not.");n+=lW;var d=u.getUint32(n,!0);n+=lW;var f=u.getUint32(n,!0);n+=lW;var p=u.getUint32(n,!0);n+=lW;var m=u.getUint32(n,!0);n+=lW;var g,v,_=u.getUint32(n,!0);n+=lW,m>=570425344?(n-=2*lW,g=f,m=p,_=0,f=0,p=0,cW._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.")):_>=570425344&&(n-=lW,g=m,m=f,_=p,f=0,p=0,cW._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel."));if(0===f)v={BATCH_LENGTH:Object(r.a)(g,0)};else{var b=Du(l,n,f);v=JSON.parse(b),n+=f}var y=new Uint8Array(t,n,p);n+=p;var w,C,E,A=new cz(v,y);if(g=A.getGlobalProperty("BATCH_LENGTH"),A.featuresLength=g,m>0){var x=Du(l,n,m);w=JSON.parse(x),n+=m,_>0&&(C=new Uint8Array(t,n,_),C=new Uint8Array(C),n+=_)}Object(o.a)(i.classificationType)&&(E=function(e){return function(t,n){e._model.updateCommands(t,n)}}(e));var T=new iz(e,g,w,C,E);e._batchTable=T;var S,D=c+d-n;if(0===D)throw new de.a("glTF byte length must be greater than 0.");n%4===0?S=new Uint8Array(t,n,D):(cW._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(l.subarray(n,n+D)));var P={content:e,primitive:i};e._rtcCenterTransform=Ae.IDENTITY;var I=A.getGlobalProperty("RTC_CENTER",Ds.FLOAT,3);Object(o.a)(I)&&(e._rtcCenterTransform=Ae.fromTranslation(O.fromArray(I)));e._contentModelMatrix=Ae.multiply(a.computedTransform,e._rtcCenterTransform,new Ae),Object(o.a)(i.classificationType)?e._model=new qB({gltf:S,cull:!1,basePath:s,requestType:Tc.a.TILES3D,modelMatrix:e._contentModelMatrix,upAxis:i._gltfUpAxis,forwardAxis:ON.X,debugWireframe:i.debugWireframe,vertexShaderLoaded:uW(e),classificationShaderLoaded:fW(e),uniformMapLoaded:T.getUniformMapCallback(),pickIdLoaded:dW(e),classificationType:i._classificationType,batchTable:T}):(e._model=new sW({gltf:S,cull:!1,releaseGltfJson:!0,opaquePass:EI.CESIUM_3D_TILE,basePath:s,requestType:Tc.a.TILES3D,modelMatrix:e._contentModelMatrix,upAxis:i._gltfUpAxis,forwardAxis:ON.X,shadows:i.shadows,debugWireframe:i.debugWireframe,incrementallyLoadTextures:!1,vertexShaderLoaded:uW(e),fragmentShaderLoaded:hW(e),uniformMapLoaded:T.getUniformMapCallback(),pickIdLoaded:dW(e),addBatchIdToGeneratedShaders:g>0,pickObject:P,imageBasedLightingFactor:i.imageBasedLightingFactor,lightColor:i.lightColor,luminanceAtZenith:i.luminanceAtZenith,sphericalHarmonicCoefficients:i.sphericalHarmonicCoefficients,specularEnvironmentMaps:i.specularEnvironmentMaps,backFaceCulling:i.backFaceCulling}),e._model.readyPromise.then((function(e){e.activeAnimations.addAll({loop:PH.REPEAT})})))}(this,i,a)}cW._deprecationWarning=q_,Object.defineProperties(cW.prototype,{featuresLength:{get:function(){return this._batchTable.featuresLength}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return this._model.trianglesLength}},geometryByteLength:{get:function(){return this._model.geometryByteLength}},texturesByteLength:{get:function(){return this._model.texturesByteLength}},batchTableByteLength:{get:function(){return this._batchTable.memorySizeInBytes}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._model.readyPromise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){return this._batchTable}}});var lW=Uint32Array.BYTES_PER_ELEMENT;function uW(e){return function(t,n){var i=e._batchTable,r=!Object(o.a)(e._tileset.classificationType),a=e._model.gltf;Object(o.a)(a)&&(e._batchIdAttributeName=function(e){var t=Tk.getAttributeOrUniformBySemantic(e,"_BATCHID");return Object(o.a)(t)||(t=Tk.getAttributeOrUniformBySemantic(e,"BATCHID"),Object(o.a)(t)&&cW._deprecationWarning("b3dm-legacy-batchid","The glTF in this b3dm uses the semantic `BATCHID`. Application-specific semantics should be prefixed with an underscore: `_BATCHID`.")),t}(a),e._diffuseAttributeOrUniformName[n]=Tk.getDiffuseAttributeOrUniform(a,n));var s=i.getVertexShaderCallback(r,e._batchIdAttributeName,e._diffuseAttributeOrUniformName[n]);return Object(o.a)(s)?s(t):t}}function hW(e){return function(t,n){var i=e._batchTable,r=!Object(o.a)(e._tileset.classificationType),a=e._model.gltf;Object(o.a)(a)&&(e._diffuseAttributeOrUniformName[n]=Tk.getDiffuseAttributeOrUniform(a,n));var s=i.getFragmentShaderCallback(r,e._diffuseAttributeOrUniformName[n]);return Object(o.a)(s)?s(t):t}}function dW(e){return function(){return e._batchTable.getPickId()}}function fW(e){return function(t){var n=e._batchTable.getClassificationFragmentShaderCallback();return Object(o.a)(n)?n(t):t}}cW.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)},cW.prototype.getFeature=function(e){var t=this.featuresLength;if(!Object(o.a)(e)||e<0||e>=t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+(t-1)+").");return function(e){var t=e.featuresLength;if(!Object(o.a)(e._features)&&t>0){for(var n=new Array(t),i=0;i<t;++i)n[i]=new oz(e,i);e._features=n}}(this),this._features[e]},cW.prototype.applyDebugSettings=function(e,t){t=e?t:Hf.WHITE,0===this.featuresLength?this._model.color=t:this._batchTable.setAllColor(t)},cW.prototype.applyStyle=function(e){if(0===this.featuresLength){var t=Object(o.a)(e)&&Object(o.a)(e.color),n=Object(o.a)(e)&&Object(o.a)(e.show);this._model.color=t?e.color.evaluateColor(void 0,this._model.color):Hf.clone(Hf.WHITE,this._model.color),this._model.show=!n||e.show.evaluate(void 0)}else this._batchTable.applyStyle(e)},cW.prototype.update=function(e,t){var n=t.commandList.length;this._batchTable.update(e,t),this._contentModelMatrix=Ae.multiply(this._tile.computedTransform,this._rtcCenterTransform,this._contentModelMatrix),this._model.modelMatrix=this._contentModelMatrix,this._model.shadows=this._tileset.shadows,this._model.imageBasedLightingFactor=this._tileset.imageBasedLightingFactor,this._model.lightColor=this._tileset.lightColor,this._model.luminanceAtZenith=this._tileset.luminanceAtZenith,this._model.sphericalHarmonicCoefficients=this._tileset.sphericalHarmonicCoefficients,this._model.specularEnvironmentMaps=this._tileset.specularEnvironmentMaps,this._model.backFaceCulling=this._tileset.backFaceCulling,this._model.debugWireframe=this._tileset.debugWireframe;var i=this._tileset.clippingPlanes;this._model.clippingPlanesOriginMatrix=this._tileset.clippingPlanesOriginMatrix,Object(o.a)(i)&&this._tile.clippingPlanesDirty&&(this._model._clippingPlanes=i.enabled&&this._tile._isClipped?i:void 0),Object(o.a)(i)&&Object(o.a)(this._model._clippingPlanes)&&this._model._clippingPlanes!==i&&(this._model._clippingPlanes=i),this._model.update(t),n<t.commandList.length&&(t.passes.render||t.passes.pick)&&!Object(o.a)(e.classificationType)&&this._batchTable.addDerivedCommands(t,n)},cW.prototype.isDestroyed=function(){return!1},cW.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var pW=cW;function mW(e,t,n,i,a,s){this._tileset=e,this._tile=t,this._resource=n,this._contents=[],this._readyPromise=Yt.a.defer(),function(e,t,n,i){n=Object(r.a)(n,0);var a=new Uint8Array(t),s=new DataView(t);n+=gW;var c=s.getUint32(n,!0);if(1!==c)throw new de.a("Only Composite Tile version 1 is supported. Version "+c+" is not.");n+=gW,n+=gW;var l=s.getUint32(n,!0);n+=gW;for(var u=[],h=0;h<l;++h){var d=Ly(a,n),f=s.getUint32(n+2*gW,!0),p=i[d];if(!Object(o.a)(p))throw new de.a("Unknown tile content type, "+d+", inside Composite tile");var m=p(e._tileset,e._tile,e._resource,t,n);e._contents.push(m),u.push(m.readyPromise),n+=f}Yt.a.all(u).then((function(){e._readyPromise.resolve(e)})).otherwise((function(t){e._readyPromise.reject(t)}))}(this,i,a,s)}Object.defineProperties(mW.prototype,{featurePropertiesDirty:{get:function(){for(var e=this._contents,t=e.length,n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){for(var t=this._contents,n=t.length,i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},readyPromise:{get:function(){return this._readyPromise.promise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}}});var gW=Uint32Array.BYTES_PER_ELEMENT;mW.prototype.hasProperty=function(e,t){return!1},mW.prototype.getFeature=function(e){},mW.prototype.applyDebugSettings=function(e,t){for(var n=this._contents,i=n.length,r=0;r<i;++r)n[r].applyDebugSettings(e,t)},mW.prototype.applyStyle=function(e){for(var t=this._contents,n=t.length,i=0;i<n;++i)t[i].applyStyle(e)},mW.prototype.update=function(e,t){for(var n=this._contents,i=n.length,r=0;r<i;++r)n[r].update(e,t)},mW.prototype.isDestroyed=function(){return!1},mW.prototype.destroy=function(){for(var e=this._contents,t=e.length,n=0;n<t;++n)e[n].destroy();return Ks(this)};var vW=mW;function _W(e){this._boxes=e.boxes,this._boxBatchIds=e.boxBatchIds,this._cylinders=e.cylinders,this._cylinderBatchIds=e.cylinderBatchIds,this._ellipsoids=e.ellipsoids,this._ellipsoidBatchIds=e.ellipsoidBatchIds,this._spheres=e.spheres,this._sphereBatchIds=e.sphereBatchIds,this._modelMatrix=e.modelMatrix,this._batchTable=e.batchTable,this._boundingVolume=e.boundingVolume,this._center=e.center,Object(o.a)(this._center)||(Object(o.a)(this._boundingVolume)?this._center=O.clone(this._boundingVolume.center):this._center=O.clone(O.ZERO)),this._boundingVolumes=void 0,this._batchedIndices=void 0,this._indices=void 0,this._indexOffsets=void 0,this._indexCounts=void 0,this._positions=void 0,this._vertexBatchIds=void 0,this._batchIds=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=JM.BOTH}Object.defineProperties(_W.prototype,{trianglesLength:{get:function(){return Object(o.a)(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return Object(o.a)(this._primitive)?this._primitive.geometryByteLength:0}},readyPromise:{get:function(){return this._readyPromise.promise}}}),_W.packedBoxLength=Ae.packedLength+O.packedLength,_W.packedCylinderLength=Ae.packedLength+2,_W.packedEllipsoidLength=Ae.packedLength+O.packedLength,_W.packedSphereLength=O.packedLength+1;var bW=new ac("createVectorTileGeometries"),yW=new Hf;function wW(e){if(!Object(o.a)(e._primitive)){if(!Object(o.a)(e._verticesPromise)){var t=e._boxes,n=e._boxBatchIds,i=e._cylinders,a=e._cylinderBatchIds,s=e._ellipsoids,c=e._ellipsoidBatchIds,l=e._spheres,u=e._sphereBatchIds,h=e._batchTableColors,d=e._packedBuffer;if(!Object(o.a)(h)){var f=0;Object(o.a)(e._boxes)&&(t=e._boxes=ol(t),f+=(n=e._boxBatchIds=ol(n)).length),Object(o.a)(e._cylinders)&&(i=e._cylinders=ol(i),f+=(a=e._cylinderBatchIds=ol(a)).length),Object(o.a)(e._ellipsoids)&&(s=e._ellipsoids=ol(s),f+=(c=e._ellipsoidBatchIds=ol(c)).length),Object(o.a)(e._spheres)&&(l=e._sphere=ol(l),f+=(u=e._sphereBatchIds=ol(u)).length),h=e._batchTableColors=new Uint32Array(f);for(var p=e._batchTable,m=0;m<f;++m){var g=p.getColor(m,yW);h[m]=g.toRgba()}d=e._packedBuffer=function(e){var t=new Float64Array(Ae.packedLength+O.packedLength),n=0;return O.pack(e._center,t,n),n+=O.packedLength,Ae.pack(e._modelMatrix,t,n),t}(e)}var v=[];Object(o.a)(t)&&v.push(t.buffer,n.buffer),Object(o.a)(i)&&v.push(i.buffer,a.buffer),Object(o.a)(s)&&v.push(s.buffer,c.buffer),Object(o.a)(l)&&v.push(l.buffer,u.buffer),v.push(h.buffer,d.buffer);var _={boxes:Object(o.a)(t)?t.buffer:void 0,boxBatchIds:Object(o.a)(t)?n.buffer:void 0,cylinders:Object(o.a)(i)?i.buffer:void 0,cylinderBatchIds:Object(o.a)(i)?a.buffer:void 0,ellipsoids:Object(o.a)(s)?s.buffer:void 0,ellipsoidBatchIds:Object(o.a)(s)?c.buffer:void 0,spheres:Object(o.a)(l)?l.buffer:void 0,sphereBatchIds:Object(o.a)(l)?u.buffer:void 0,batchTableColors:h.buffer,packedBuffer:d.buffer},b=e._verticesPromise=bW.scheduleTask(_,v);if(!Object(o.a)(b))return;b.then((function(t){var n=new Float64Array(t.packedBuffer),i=function(e,t){for(var n=0,i=t[n++],r=t[n++],o=e._boundingVolumes=new Array(r),a=0;a<r;++a)o[a]=gt.unpack(t,n),n+=gt.packedLength;for(var s=t[n++],c=e._batchedIndices=new Array(s),l=0;l<s;++l){var u=Hf.unpack(t,n);n+=Hf.packedLength;for(var h=t[n++],d=t[n++],f=t[n++],p=new Array(f),m=0;m<f;++m)p[m]=t[n++];c[l]=new Nk({color:u,offset:h,count:d,batchIds:p})}return i}(e,n);e._indices=2===i?new Uint16Array(t.indices):new Uint32Array(t.indices),e._indexOffsets=new Uint32Array(t.indexOffsets),e._indexCounts=new Uint32Array(t.indexCounts),e._positions=new Float32Array(t.positions),e._vertexBatchIds=new Uint16Array(t.vertexBatchIds),e._batchIds=new Uint16Array(t.batchIds),e._ready=!0}))}e._ready&&!Object(o.a)(e._primitive)&&(e._primitive=new RB({batchTable:e._batchTable,positions:e._positions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center,pickObject:Object(r.a)(e._pickObject,e)}),e._boxes=void 0,e._boxBatchIds=void 0,e._cylinders=void 0,e._cylinderBatchIds=void 0,e._ellipsoids=void 0,e._ellipsoidBatchIds=void 0,e._spheres=void 0,e._sphereBatchIds=void 0,e._center=void 0,e._modelMatrix=void 0,e._batchTable=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._indices=void 0,e._indexOffsets=void 0,e._indexCounts=void 0,e._positions=void 0,e._vertexBatchIds=void 0,e._batchIds=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._verticesPromise=void 0,e._readyPromise.resolve())}}_W.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)},_W.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)},_W.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)},_W.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)},_W.prototype.update=function(e){wW(this),this._ready&&(this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e))},_W.prototype.isDestroyed=function(){return!1},_W.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),Ks(this)};var OW=_W;function CW(e,t,n,i,a){this._tileset=e,this._tile=t,this._resource=n,this._geometries=void 0,this._contentReadyPromise=void 0,this._readyPromise=Yt.a.defer(),this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,function(e,t,n){n=Object(r.a)(n,0);var i=new Uint8Array(t),a=new DataView(t);n+=EW;var s=a.getUint32(n,!0);if(1!==s)throw new de.a("Only Geometry tile version 1 is supported. Version "+s+" is not.");n+=EW;var c=a.getUint32(n,!0);if(n+=EW,0===c)return void e._readyPromise.resolve(e);var l=a.getUint32(n,!0);if(n+=EW,0===l)throw new de.a("Feature table must have a byte length greater than zero");var u=a.getUint32(n,!0);n+=EW;var h=a.getUint32(n,!0);n+=EW;var d=a.getUint32(n,!0),f=Du(i,n+=EW,l),p=JSON.parse(f);n+=l;var m,g,v=new Uint8Array(t,n,u);if(n+=u,h>0){var _=Du(i,n,h);m=JSON.parse(_),n+=h,d>0&&(g=new Uint8Array(t,n,d),g=new Uint8Array(g))}var b=Object(r.a)(p.BOXES_LENGTH,0),y=Object(r.a)(p.CYLINDERS_LENGTH,0),w=Object(r.a)(p.ELLIPSOIDS_LENGTH,0),C=Object(r.a)(p.SPHERES_LENGTH,0),E=b+y+w+C,A=new iz(e,E,m,g,function(e){return function(t,n){Object(o.a)(e._geometries)&&e._geometries.updateCommands(t,n)}}(e));if(e._batchTable=A,0===E)return;var x,T=e.tile.computedTransform;Object(o.a)(p.RTC_CENTER)&&(x=O.unpack(p.RTC_CENTER),Ae.multiplyByPoint(T,x,x));var S=function(e,t){var n,i,a,s,c,l=Object(r.a)(e.BOXES_LENGTH,0),u=Object(r.a)(e.CYLINDERS_LENGTH,0),h=Object(r.a)(e.ELLIPSOIDS_LENGTH,0),d=Object(r.a)(e.SPHERES_LENGTH,0);if(l>0&&Object(o.a)(e.BOX_BATCH_IDS)){var f=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,f,l)}if(u>0&&Object(o.a)(e.CYLINDER_BATCH_IDS)){var p=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,u)}if(h>0&&Object(o.a)(e.ELLIPSOID_BATCH_IDS)){var m=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;a=new Uint16Array(t.buffer,m,h)}if(d>0&&Object(o.a)(e.SPHERE_BATCH_IDS)){var g=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;s=new Uint16Array(t.buffer,g,d)}var v=Object(o.a)(n)||Object(o.a)(i)||Object(o.a)(a)||Object(o.a)(s),_=l>0&&!Object(o.a)(n)||u>0&&!Object(o.a)(i)||h>0&&!Object(o.a)(a)||d>0&&!Object(o.a)(s);if(v&&_)throw new de.a("If one group of batch ids is defined, then all batch ids must be defined.");if(!Object(o.a)(n)&&!Object(o.a)(i)&&!Object(o.a)(a)&&!Object(o.a)(s)){var b=0;if(!Object(o.a)(n)&&l>0)for(n=new Uint16Array(l),c=0;c<l;++c)n[c]=b++;if(!Object(o.a)(i)&&u>0)for(i=new Uint16Array(u),c=0;c<u;++c)i[c]=b++;if(!Object(o.a)(a)&&h>0)for(a=new Uint16Array(h),c=0;c<h;++c)a[c]=b++;if(!Object(o.a)(s)&&d>0)for(s=new Uint16Array(d),c=0;c<d;++c)s[c]=b++}return{boxes:n,cylinders:i,ellipsoids:a,spheres:s}}(p,v);if(b>0||y>0||w>0||C>0){var D,P,I,M;if(b>0){var R=v.byteOffset+p.BOXES.byteOffset;D=new Float32Array(v.buffer,R,OW.packedBoxLength*b)}if(y>0){var L=v.byteOffset+p.CYLINDERS.byteOffset;P=new Float32Array(v.buffer,L,OW.packedCylinderLength*y)}if(w>0){var j=v.byteOffset+p.ELLIPSOIDS.byteOffset;I=new Float32Array(v.buffer,j,OW.packedEllipsoidLength*w)}if(C>0){var F=v.byteOffset+p.SPHERES.byteOffset;M=new Float32Array(v.buffer,F,OW.packedSphereLength*C)}e._geometries=new OW({boxes:D,boxBatchIds:S.boxes,cylinders:P,cylinderBatchIds:S.cylinders,ellipsoids:I,ellipsoidBatchIds:S.ellipsoids,spheres:M,sphereBatchIds:S.spheres,center:x,modelMatrix:T,batchTable:A,boundingVolume:e.tile.boundingVolume.boundingVolume})}}(this,i,a)}Object.defineProperties(CW.prototype,{featuresLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return Object(o.a)(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return Object(o.a)(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.memorySizeInBytes:0}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._readyPromise.promise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){return this._batchTable}}});var EW=Uint32Array.BYTES_PER_ELEMENT;function AW(e){var t=e.featuresLength;if(!Object(o.a)(e._features)&&t>0){var n=new Array(t);Object(o.a)(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}CW.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)},CW.prototype.getFeature=function(e){var t=this.featuresLength;if(!Object(o.a)(e)||e<0||e>=t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+(t-1)+").");return AW(this),this._features[e]},CW.prototype.applyDebugSettings=function(e,t){Object(o.a)(this._geometries)&&this._geometries.applyDebugSettings(e,t)},CW.prototype.applyStyle=function(e){AW(this),Object(o.a)(this._geometries)&&this._geometries.applyStyle(e,this._features)},CW.prototype.update=function(e,t){if(Object(o.a)(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),Object(o.a)(this._batchTable)&&this._geometries._ready&&this._batchTable.update(e,t),!Object(o.a)(this._contentReadyPromise)){var n=this;this._contentReadyPromise=this._geometries.readyPromise.then((function(){n._readyPromise.resolve(n)}))}},CW.prototype.isDestroyed=function(){return!1},CW.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var xW=CW;function TW(e,t,n){this.primitive=e,this._modelMatrix=Ae.clone(t),this._instanceId=n}Object.defineProperties(TW.prototype,{instanceId:{get:function(){return this._instanceId}},model:{get:function(){return this.primitive._model}},modelMatrix:{get:function(){return Ae.clone(this._modelMatrix)},set:function(e){Ae.clone(e,this._modelMatrix),this.primitive.expandBoundingSphere(this._modelMatrix),this.primitive._dirty=!0}}});var SW=TW,DW=0,PW=1,IW=2,MW=3;function RW(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.gltf)&&!Object(o.a)(e.url))throw new a.a("Either options.gltf or options.url is required.");if(Object(o.a)(e.gltf)&&Object(o.a)(e.url))throw new a.a("Cannot pass in both options.gltf and options.url.");this.show=Object(r.a)(e.show,!0),this._instancingSupported=!1,this._dynamic=Object(r.a)(e.dynamic,!1),this._allowPicking=Object(r.a)(e.allowPicking,!0),this._ready=!1,this._readyPromise=Yt.a.defer(),this._state=DW,this._dirty=!1,this._cull=Object(r.a)(e.cull,!0),this._opaquePass=Object(r.a)(e.opaquePass,EI.OPAQUE),this._instances=function(e,t){for(var n=(t=Object(r.a)(t,[])).length,i=new Array(n),o=0;o<n;++o){var a=t[o],s=a.modelMatrix,c=Object(r.a)(a.batchId,o);i[o]=new SW(e,s,c)}return i}(this,e.instances),this._batchTable=e.batchTable,this._model=void 0,this._vertexBufferTypedArray=void 0,this._vertexBuffer=void 0,this._batchIdBuffer=void 0,this._instancedUniformsByProgram=void 0,this._drawCommands=[],this._modelCommands=void 0,this._renderStates=void 0,this._disableCullingRenderStates=void 0,this._boundingSphere=function(e){for(var t=e.length,n=new Array(t),i=0;i<t;++i)n[i]=Ae.getTranslation(e._instances[i]._modelMatrix,new O);return gt.fromPoints(n)}(this),this._center=O.clone(this._boundingSphere.center),this._rtcTransform=new Ae,this._rtcModelView=new Ae,this._mode=void 0,this.modelMatrix=Ae.clone(Ae.IDENTITY),this._modelMatrix=Ae.clone(this.modelMatrix),this._url=_t.a.createIfNeeded(e.url),this._requestType=e.requestType,this._gltf=e.gltf,this._basePath=_t.a.createIfNeeded(e.basePath),this._asynchronous=e.asynchronous,this._incrementallyLoadTextures=e.incrementallyLoadTextures,this._upAxis=e.upAxis,this._forwardAxis=e.forwardAxis,this.shadows=Object(r.a)(e.shadows,RR.ENABLED),this._shadows=this.shadows,this._pickIdLoaded=e.pickIdLoaded,this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._debugShowBoundingVolume=!1,this.debugWireframe=Object(r.a)(e.debugWireframe,!1),this._debugWireframe=!1,this._imageBasedLightingFactor=new Mt(1,1),Mt.clone(e.imageBasedLightingFactor,this._imageBasedLightingFactor),this.lightColor=e.lightColor,this.luminanceAtZenith=e.luminanceAtZenith,this.sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients,this.specularEnvironmentMaps=e.specularEnvironmentMaps,this.backFaceCulling=Object(r.a)(e.backFaceCulling,!0),this._backFaceCulling=this.backFaceCulling}Object.defineProperties(RW.prototype,{allowPicking:{get:function(){return this._allowPicking}},length:{get:function(){return this._instances.length}},activeAnimations:{get:function(){return this._model.activeAnimations}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){i.a.typeOf.object("imageBasedLightingFactor",e),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.x",e.x,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.x",e.x,1),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.y",e.y,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.y",e.y,1),Mt.clone(e,this._imageBasedLightingFactor)}}});var LW=new O,jW=new Ae;function FW(e,t,n,i){return function(r,a){var s=r.semantic;if(Object(o.a)(s)&&e.indexOf(s)>-1){if(!(t.indexOf(s)>-1))throw new de.a('Shader program cannot be optimized for instancing. Uniform "'+a+'" in program "'+n+'" uses unsupported semantic "'+s+'"');i[a]=s}}}function NW(e,t){if(Object(o.a)(e._instancedUniformsByProgram))return e._instancedUniformsByProgram[t];var n={};e._instancedUniformsByProgram=n;var i=["MODEL","MODELVIEW","CESIUM_RTC_MODELVIEW","MODELVIEWPROJECTION","MODELINVERSE","MODELVIEWINVERSE","MODELVIEWPROJECTIONINVERSE","MODELINVERSETRANSPOSE","MODELVIEWINVERSETRANSPOSE"],r=["MODELVIEW","CESIUM_RTC_MODELVIEW","MODELVIEWPROJECTION","MODELVIEWINVERSETRANSPOSE"],a=e._model._sourceTechniques;for(var s in a)if(a.hasOwnProperty(s)){var c=a[s],l=c.program;if(!Object(o.a)(n[l])){var u={};n[l]=u,dz.techniqueUniform(c,FW(i,r,t,u))}}return n[t]}function zW(e,t){return function(n,i,r){(n=Object(Lf.a)(n)).czm_instanced_modifiedModelView=function(e,t){return function(){return Ae.multiply(t.uniformState.view,e._rtcTransform,e._rtcModelView)}}(e,t),n.czm_instanced_nodeTransform=function(e){return function(){return e.computedMatrix}}(r);var a=NW(e,i);for(var s in a)a.hasOwnProperty(s)&&delete n[s];return Object(o.a)(e._batchTable)&&(n=e._batchTable.getUniformMapCallback()(n)),n}}function kW(e){var t=e._instances,n=e.length,i=e._center,r=e._vertexBufferTypedArray;Object(o.a)(r)||(r=new Float32Array(12*n)),e._dynamic&&(e._vertexBufferTypedArray=r);for(var a=0;a<n;++a){var s=t[a]._modelMatrix,c=Ae.clone(s,jW);c[12]-=i.x,c[13]-=i.y,c[14]-=i.z;var l=12*a;r[l+0]=c[0],r[l+1]=c[4],r[l+2]=c[8],r[l+3]=c[12],r[l+4]=c[1],r[l+5]=c[5],r[l+6]=c[9],r[l+7]=c[13],r[l+8]=c[2],r[l+9]=c[6],r[l+10]=c[10],r[l+11]=c[14]}return r}function BW(e,t){var n=e._instancingSupported,i=Object(o.a)(e._batchTable),r=e._allowPicking,a={url:e._url,requestType:e._requestType,gltf:e._gltf,basePath:e._basePath,shadows:e._shadows,cacheKey:void 0,asynchronous:e._asynchronous,allowPicking:r,incrementallyLoadTextures:e._incrementallyLoadTextures,upAxis:e._upAxis,forwardAxis:e._forwardAxis,precreatedAttributes:void 0,vertexShaderLoaded:void 0,fragmentShaderLoaded:void 0,uniformMapLoaded:void 0,pickIdLoaded:e._pickIdLoaded,ignoreCommands:!0,opaquePass:e._opaquePass,imageBasedLightingFactor:e.imageBasedLightingFactor,lightColor:e.lightColor,luminanceAtZenith:e.luminanceAtZenith,sphericalHarmonicCoefficients:e.sphericalHarmonicCoefficients,specularEnvironmentMaps:e.specularEnvironmentMaps};if(i||(e._pickIds=function(e,t){for(var n=e._instances,i=n.length,r=new Array(i),o=0;o<i;++o)r[o]=t.createPickId(n[o]);return r}(e,t)),n){!function(e,t){var n,i=e._instances,r=e.length,a=e._dynamic,s=Object(o.a)(e._batchTable);if(s){var c=new Uint16Array(r);for(n=0;n<r;++n)c[n]=i[n]._instanceId;e._batchIdBuffer=oR.createVertexBuffer({context:t,typedArray:c,usage:iR.STATIC_DRAW})}if(!s){var l=new Uint8Array(4*r);for(n=0;n<r;++n){var u=e._pickIds[n].color,h=4*n;l[h]=Hf.floatToByte(u.red),l[h+1]=Hf.floatToByte(u.green),l[h+2]=Hf.floatToByte(u.blue),l[h+3]=Hf.floatToByte(u.alpha)}e._pickIdBuffer=oR.createVertexBuffer({context:t,typedArray:l,usage:iR.STATIC_DRAW})}var d=kW(e);e._vertexBuffer=oR.createVertexBuffer({context:t,typedArray:d,usage:a?iR.STREAM_DRAW:iR.STATIC_DRAW})}(e,t);var s=Ds.getSizeInBytes(Ds.FLOAT),c={czm_modelMatrixRow0:{index:0,vertexBuffer:e._vertexBuffer,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,normalize:!1,offsetInBytes:0,strideInBytes:12*s,instanceDivisor:1},czm_modelMatrixRow1:{index:0,vertexBuffer:e._vertexBuffer,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,normalize:!1,offsetInBytes:4*s,strideInBytes:12*s,instanceDivisor:1},czm_modelMatrixRow2:{index:0,vertexBuffer:e._vertexBuffer,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,normalize:!1,offsetInBytes:8*s,strideInBytes:12*s,instanceDivisor:1}};i&&(c.a_batchId={index:0,vertexBuffer:e._batchIdBuffer,componentsPerAttribute:1,componentDatatype:Ds.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0,instanceDivisor:1}),i||(c.pickColor={index:0,vertexBuffer:e._pickIdBuffer,componentsPerAttribute:4,componentDatatype:Ds.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1}),a.precreatedAttributes=c,a.vertexShaderLoaded=function(e){return function(t,n){var i=NW(e,n),r=Object(o.a)(e._batchTable),a=KM.replaceMain(t,"czm_instancing_main"),s="",c="";for(var l in i)if(i.hasOwnProperty(l)){var u,h=i[l];"MODELVIEW"===h||"CESIUM_RTC_MODELVIEW"===h?u="czm_instanced_modelView":"MODELVIEWPROJECTION"===h?(u="czm_instanced_modelViewProjection",s+="mat4 czm_instanced_modelViewProjection;\n",c+="czm_instanced_modelViewProjection = czm_projection * czm_instanced_modelView;\n"):"MODELVIEWINVERSETRANSPOSE"===h&&(u="czm_instanced_modelViewInverseTranspose",s+="mat3 czm_instanced_modelViewInverseTranspose;\n",c+="czm_instanced_modelViewInverseTranspose = mat3(czm_instanced_modelView);\n");var d=new RegExp("uniform.*"+l+".*");a=a.replace(d,""),d=new RegExp(l+"\\b","g"),a=a.replace(d,u)}var f,p,m;r?(f="attribute float a_batchId;\n",p="",m=""):(f="",p="attribute vec4 pickColor;\nvarying vec4 v_pickColor;\n",m=" v_pickColor = pickColor;\n");var g="uniform mat4 czm_instanced_modifiedModelView;\nuniform mat4 czm_instanced_nodeTransform;\n"+s+"mat4 czm_instanced_modelView;\nattribute vec4 czm_modelMatrixRow0;\nattribute vec4 czm_modelMatrixRow1;\nattribute vec4 czm_modelMatrixRow2;\n"+f+p+a+"void main()\n{\n mat4 czm_instanced_model = mat4(czm_modelMatrixRow0.x, czm_modelMatrixRow1.x, czm_modelMatrixRow2.x, 0.0, czm_modelMatrixRow0.y, czm_modelMatrixRow1.y, czm_modelMatrixRow2.y, 0.0, czm_modelMatrixRow0.z, czm_modelMatrixRow1.z, czm_modelMatrixRow2.z, 0.0, czm_modelMatrixRow0.w, czm_modelMatrixRow1.w, czm_modelMatrixRow2.w, 1.0);\n czm_instanced_modelView = czm_instanced_modifiedModelView * czm_instanced_model * czm_instanced_nodeTransform;\n"+c+" czm_instancing_main();\n"+m+"}\n";if(r){var v=e._model.gltf,_=Tk.getDiffuseAttributeOrUniform(v,n);g=e._batchTable.getVertexShaderCallback(!0,"a_batchId",_)(g)}return g}}(e),a.fragmentShaderLoaded=function(e){return function(t,n){var i=e._batchTable;if(Object(o.a)(i)){var r=e._model.gltf,a=Tk.getDiffuseAttributeOrUniform(r,n);t=i.getFragmentShaderCallback(!0,a)(t)}else t="varying vec4 v_pickColor;\n"+t;return t}}(e),a.uniformMapLoaded=zW(e,t),Object(o.a)(e._url)&&(a.cacheKey=e._url.getUrlComponent()+"#instanced")}else a.vertexShaderLoaded=function(e){return function(t,n){if(Object(o.a)(e._batchTable)){var i=e._model.gltf,r=Tk.getDiffuseAttributeOrUniform(i,n);t="uniform float a_batchId\n;"+(t=e._batchTable.getVertexShaderCallback(!0,"a_batchId",r)(t))}return t}}(e),a.fragmentShaderLoaded=function(e){return function(t,n){var i=e._batchTable;if(Object(o.a)(i)){var r=e._model.gltf,a=Tk.getDiffuseAttributeOrUniform(r,n);t=i.getFragmentShaderCallback(!0,a)(t)}else t="uniform vec4 czm_pickColor;\n"+t;return t}}(e),a.uniformMapLoaded=function(e){return function(t){return Object(o.a)(e._batchTable)&&(t=e._batchTable.getUniformMapCallback()(t)),t}}(e);Object(o.a)(e._url)?e._model=sW.fromGltf(a):e._model=new sW(a)}function HW(e){var t=Object(Lf.a)(e,!0);return t.cull.enabled=!1,XI.fromCache(t)}function VW(e){return function(){return e}}function UW(e){return function(){return e}}function WW(e){for(var t=e._modelCommands,n=t.length,i=e.length,r=e._rtcTransform,o=e._center,a=0;a<n;++a)for(var s=t[a],c=0;c<i;++c){var l=a*i+c,u=e._drawCommands[l],h=Ae.clone(e._instances[c]._modelMatrix,jW);h[12]-=o.x,h[13]-=o.y,h[14]-=o.z,h=Ae.multiply(r,h,jW);var d=s.modelMatrix,f=u.modelMatrix;Ae.multiply(h,d,f);var p=s.boundingVolume,m=u.boundingVolume;gt.transform(p,h,m)}}function GW(e){for(var t=e._nodeCommands,n=t.length,i=[],r=0;r<n;++r){var o=t[r];o.show&&i.push(o.command)}return i}function qW(e,t){e._drawCommands=[];var n=GW(e._model);t?function(e,t){for(var n=t.length,i=e.length,r=e._boundingSphere,a=e._cull,s=0;s<n;++s){var c=CI.shallowClone(t[s]);c.instanceCount=i,c.boundingVolume=r,c.cull=a,Object(o.a)(e._batchTable)?c.pickId=e._batchTable.getPickId():c.pickId="v_pickColor",e._drawCommands.push(c)}}(e,n):(!function(e,t){for(var n=e._instances,i=t.length,r=e.length,a=e._batchTable,s=Object(o.a)(a),c=e._cull,l=0;l<i;++l)for(var u=0;u<r;++u){var h=CI.shallowClone(t[l]);if(h.modelMatrix=new Ae,h.boundingVolume=new gt,h.cull=c,h.uniformMap=Object(Lf.a)(h.uniformMap),s)h.uniformMap.a_batchId=VW(n[u]._instanceId);else{var d=e._pickIds[u];h.uniformMap.czm_pickColor=UW(d.color)}e._drawCommands.push(h)}}(e,n),WW(e))}RW.prototype.expandBoundingSphere=function(e){var t=Ae.getTranslation(e,LW);gt.expand(this._boundingSphere,t,this._boundingSphere)},RW.prototype.update=function(e){if(e.mode!==IR.MORPHING&&this.show&&0!==this.length){var t=e.context;if(this._state===DW){this._state=PW,this._instancingSupported=t.instancedArrays,BW(this,t);var n=this;this._model.readyPromise.otherwise((function(e){n._state=MW,n._readyPromise.reject(e)}))}var i=this._instancingSupported,r=this._model;if(r.imageBasedLightingFactor=this.imageBasedLightingFactor,r.lightColor=this.lightColor,r.luminanceAtZenith=this.luminanceAtZenith,r.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,r.specularEnvironmentMaps=this.specularEnvironmentMaps,r.update(e),r.ready&&this._state===PW){this._state=IW,this._ready=!0;var a=r.boundingSphere.radius+O.magnitude(r.boundingSphere.center);return this._boundingSphere.radius+=a,this._modelCommands=GW(r),qW(this,i),void this._readyPromise.resolve(this)}if(this._state===IW){var s=e.mode!==this._mode,c=this.modelMatrix,l=!Ae.equals(this._modelMatrix,c);if(s||l){this._mode=e.mode,Ae.clone(c,this._modelMatrix);var u=Ae.multiplyByTranslation(this._modelMatrix,this._center,this._rtcTransform);this._mode!==IR.SCENE3D&&(u=ya.basisTo2D(e.mapProjection,u,u)),Ae.getTranslation(u,this._boundingSphere.center)}i&&this._dirty&&(this._dynamic=!0,this._dirty=!1,function(e){var t=kW(e);e._vertexBuffer.copyFromArrayView(t)}(this));var h=function(e){for(var t=e._nodeCommands,n=t.length,i=!1,r=0;r<n;r++){var o=t[r];o.command.dirty&&(o.command.dirty=!1,i=!0)}return i}(r);h&&qW(this,i),!i&&(r.dirty||this._dirty||s||l)&&WW(this),function(e,t){if(e.shadows!==e._shadows||t){e._shadows=e.shadows;for(var n=RR.castShadows(e.shadows),i=RR.receiveShadows(e.shadows),r=e._drawCommands,o=r.length,a=0;a<o;++a){var s=r[a];s.castShadows=n,s.receiveShadows=i}}}(this,h),function(e,t){if(e._debugWireframe!==e.debugWireframe||t){e._debugWireframe=e.debugWireframe;for(var n=e.debugWireframe?xl.LINES:xl.TRIANGLES,i=e._drawCommands,r=i.length,o=0;o<r;++o)i[o].primitiveType=n}}(this,h),function(e,t){if(e._backFaceCulling!==e.backFaceCulling||t){e._backFaceCulling=e.backFaceCulling;var n,i=e._drawCommands,r=i.length;if(!Object(o.a)(e._disableCullingRenderStates))for(e._disableCullingRenderStates=new Array(r),e._renderStates=new Array(r),n=0;n<r;++n){var a=i[n].renderState,s=HW(a);e._disableCullingRenderStates[n]=s,e._renderStates[n]=a}for(n=0;n<r;++n)i[n].renderState=e._backFaceCulling?e._renderStates[n]:e._disableCullingRenderStates[n]}}(this,h),function(e,t){if(e.debugShowBoundingVolume!==e._debugShowBoundingVolume||t){e._debugShowBoundingVolume=e.debugShowBoundingVolume;for(var n=e._drawCommands,i=n.length,r=0;r<i;++r)n[r].debugShowBoundingVolume=e.debugShowBoundingVolume}}(this,h);var d=e.passes;if(d.render||d.pick)for(var f=e.commandList,p=this._drawCommands,m=p.length,g=0;g<m;++g)f.push(p[g])}}},RW.prototype.isDestroyed=function(){return!1},RW.prototype.destroy=function(){this._model=this._model&&this._model.destroy();var e=this._pickIds;if(Object(o.a)(e))for(var t=e.length,n=0;n<t;++n)e[n].destroy();return Ks(this)};var YW=RW;function $W(e,t,n,i,a){this._tileset=e,this._tile=t,this._resource=n,this._modelInstanceCollection=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,function(e,t,n){var i=Object(r.a)(n,0);n=i;var a=new Uint8Array(t),s=new DataView(t);n+=KW;var c=s.getUint32(n,!0);if(1!==c)throw new de.a("Only Instanced 3D Model version 1 is supported. Version "+c+" is not.");n+=KW;var l=s.getUint32(n,!0);n+=KW;var u=s.getUint32(n,!0);if(0===u)throw new de.a("featureTableJsonByteLength is zero, the feature table must be defined.");n+=KW;var h=s.getUint32(n,!0);n+=KW;var d=s.getUint32(n,!0);n+=KW;var f=s.getUint32(n,!0);n+=KW;var p=s.getUint32(n,!0);if(1!==p&&0!==p)throw new de.a("Only glTF format 0 (uri) or 1 (embedded) are supported. Format "+p+" is not.");var m=Du(a,n+=KW,u),g=JSON.parse(m);n+=u;var v=new Uint8Array(t,n,h);n+=h;var _,b,y=new cz(g,v),w=y.getGlobalProperty("INSTANCES_LENGTH");if(y.featuresLength=w,!Object(o.a)(w))throw new de.a("Feature table global property: INSTANCES_LENGTH must be defined");if(d>0){var C=Du(a,n,d);_=JSON.parse(C),n+=d,f>0&&(b=new Uint8Array(t,n,f),b=new Uint8Array(b),n+=f)}e._batchTable=new iz(e,w,_,b);var E,A=i+l-n;if(0===A)throw new de.a("glTF byte length is zero, i3dm must have a glTF to instance.");n%4===0?E=new Uint8Array(t,n,A):($W._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),E=new Uint8Array(a.subarray(n,n+A)));var x=e._tileset,T={instances:new Array(w),batchTable:e._batchTable,cull:!1,url:void 0,requestType:Tc.a.TILES3D,gltf:void 0,basePath:void 0,incrementallyLoadTextures:!1,upAxis:x._gltfUpAxis,forwardAxis:ON.X,opaquePass:EI.CESIUM_3D_TILE,pickIdLoaded:XW(e),imageBasedLightingFactor:x.imageBasedLightingFactor,lightColor:x.lightColor,luminanceAtZenith:x.luminanceAtZenith,sphericalHarmonicCoefficients:x.sphericalHarmonicCoefficients,specularEnvironmentMaps:x.specularEnvironmentMaps,backFaceCulling:x.backFaceCulling};if(0===p){var S=Du(E);S=S.replace(/[\s\0]+$/,""),T.url=e._resource.getDerivedResource({url:S})}else T.gltf=E,T.basePath=e._resource.clone();var D,P=y.getGlobalProperty("EAST_NORTH_UP"),I=y.getGlobalProperty("RTC_CENTER",Ds.FLOAT,3);Object(o.a)(I)&&(D=O.unpack(I));for(var M=T.instances,R=new O,L=new Array(3),j=new O,F=new O,N=new O,z=new oe,k=new No,B=new O,H=new pD,V=new Ae,U=0;U<w;U++){var G=y.getProperty("POSITION",Ds.FLOAT,3,U,QW);if(!Object(o.a)(G)){G=L;var q=y.getProperty("POSITION_QUANTIZED",Ds.UNSIGNED_SHORT,3,U,QW);if(!Object(o.a)(q))throw new de.a("Either POSITION or POSITION_QUANTIZED must be defined for each instance.");var Y=y.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Ds.FLOAT,3);if(!Object(o.a)(Y))throw new de.a("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");var $=y.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Ds.FLOAT,3);if(!Object(o.a)($))throw new de.a("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");for(var X=0;X<3;X++)G[X]=q[X]/65535*$[X]+Y[X]}O.unpack(G,0,R),Object(o.a)(D)&&O.add(R,D,R),H.translation=R;var K=y.getProperty("NORMAL_UP",Ds.FLOAT,3,U,QW),Q=y.getProperty("NORMAL_RIGHT",Ds.FLOAT,3,U,ZW),Z=!1;if(Object(o.a)(K)){if(!Object(o.a)(Q))throw new de.a("To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.");O.unpack(K,0,F),O.unpack(Q,0,j),Z=!0}else{var J=y.getProperty("NORMAL_UP_OCT32P",Ds.UNSIGNED_SHORT,2,U,QW),ee=y.getProperty("NORMAL_RIGHT_OCT32P",Ds.UNSIGNED_SHORT,2,U,ZW);if(Object(o.a)(J)){if(!Object(o.a)(ee))throw new de.a("To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.");xs.octDecodeInRange(J[0],J[1],65535,F),xs.octDecodeInRange(ee[0],ee[1],65535,j),Z=!0}else P?(ya.eastNorthUpToFixedFrame(R,W.WGS84,V),Ae.getMatrix3(V,z)):oe.clone(oe.IDENTITY,z)}Z&&(O.cross(j,F,N),O.normalize(N,N),oe.setColumn(z,0,j,z),oe.setColumn(z,1,F,z),oe.setColumn(z,2,N,z)),No.fromRotationMatrix(z,k),H.rotation=k,B=O.fromElements(1,1,1,B);var te=y.getProperty("SCALE",Ds.FLOAT,1,U);Object(o.a)(te)&&O.multiplyByScalar(B,te,B);var ne=y.getProperty("SCALE_NON_UNIFORM",Ds.FLOAT,3,U,QW);Object(o.a)(ne)&&(B.x*=ne[0],B.y*=ne[1],B.z*=ne[2]),H.scale=B;var ie=y.getProperty("BATCH_ID",Ds.UNSIGNED_SHORT,1,U);Object(o.a)(ie)||(ie=U),Ae.fromTranslationRotationScale(H,V);var re=V.clone();M[U]={modelMatrix:re,batchId:ie}}e._modelInstanceCollection=new YW(T),e._modelInstanceCollection.readyPromise.then((function(e){e.activeAnimations.addAll({loop:PH.REPEAT})}))}(this,i,a)}function XW(e){return function(){return e._batchTable.getPickId()}}$W._deprecationWarning=q_,Object.defineProperties($W.prototype,{featuresLength:{get:function(){return this._batchTable.featuresLength}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){var e=this._modelInstanceCollection._model;return Object(o.a)(e)?e.trianglesLength:0}},geometryByteLength:{get:function(){var e=this._modelInstanceCollection._model;return Object(o.a)(e)?e.geometryByteLength:0}},texturesByteLength:{get:function(){var e=this._modelInstanceCollection._model;return Object(o.a)(e)?e.texturesByteLength:0}},batchTableByteLength:{get:function(){return this._batchTable.memorySizeInBytes}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._modelInstanceCollection.readyPromise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){return this._batchTable}}});var KW=Uint32Array.BYTES_PER_ELEMENT,QW=new Array(4),ZW=new Array(4);$W.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)},$W.prototype.getFeature=function(e){var t=this.featuresLength;if(!Object(o.a)(e)||e<0||e>=t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+(t-1)+").");return function(e){var t=e.featuresLength;if(!Object(o.a)(e._features)&&t>0){for(var n=new Array(t),i=0;i<t;++i)n[i]=new oz(e,i);e._features=n}}(this),this._features[e]},$W.prototype.applyDebugSettings=function(e,t){t=e?t:Hf.WHITE,this._batchTable.setAllColor(t)},$W.prototype.applyStyle=function(e){this._batchTable.applyStyle(e)},$W.prototype.update=function(e,t){var n=t.commandList.length;this._batchTable.update(e,t),this._modelInstanceCollection.modelMatrix=this._tile.computedTransform,this._modelInstanceCollection.shadows=this._tileset.shadows,this._modelInstanceCollection.lightColor=this._tileset.lightColor,this._modelInstanceCollection.luminanceAtZenith=this._tileset.luminanceAtZenith,this._modelInstanceCollection.sphericalHarmonicCoefficients=this._tileset.sphericalHarmonicCoefficients,this._modelInstanceCollection.specularEnvironmentMaps=this._tileset.specularEnvironmentMaps,this._modelInstanceCollection.backFaceCulling=this._tileset.backFaceCulling,this._modelInstanceCollection.debugWireframe=this._tileset.debugWireframe;var i=this._modelInstanceCollection._model;if(Object(o.a)(i)){var r=this._tileset.clippingPlanes;i.clippingPlanesOriginMatrix=this._tileset.clippingPlanesOriginMatrix,Object(o.a)(r)&&this._tile.clippingPlanesDirty&&(i._clippingPlanes=r.enabled&&this._tile._isClipped?r:void 0),Object(o.a)(r)&&Object(o.a)(i._clippingPlanes)&&i._clippingPlanes!==r&&(i._clippingPlanes=r)}this._modelInstanceCollection.update(t),n<t.commandList.length&&(t.passes.render||t.passes.pick)&&this._batchTable.addDerivedCommands(t,n,!1)},$W.prototype.isDestroyed=function(){return!1},$W.prototype.destroy=function(){return this._modelInstanceCollection=this._modelInstanceCollection&&this._modelInstanceCollection.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var JW=$W,eG=Object.freeze({ADD:0,REPLACE:1}),tG=0,nG=1,iG=2,rG=3;function oG(e){i.a.typeOf.object("options",e),i.a.typeOf.object("options.arrayBuffer",e.arrayBuffer),this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=Hf.clone(Hf.DARKGRAY),this._highlightColor=Hf.clone(Hf.WHITE),this._pointSize=1,this._rtcCenter=void 0,this._quantizedVolumeScale=void 0,this._quantizedVolumeOffset=void 0,this._styleableShaderAttributes=void 0,this._isQuantized=!1,this._isOctEncoded16P=!1,this._isRGB565=!1,this._hasColors=!1,this._hasNormals=!1,this._hasBatchIds=!1,this._decodingState=iG,this._dequantizeInShader=!0,this._isQuantizedDraco=!1,this._isOctEncodedDraco=!1,this._quantizedRange=0,this._octEncodedRange=0,this.backFaceCulling=!1,this._backFaceCulling=!1,this.normalShading=!0,this._normalShading=!0,this._opaqueRenderState=void 0,this._translucentRenderState=void 0,this._mode=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._pointsLength=0,this._geometryByteLength=0,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._batchTableLoaded=e.batchTableLoaded,this._pickIdLoaded=e.pickIdLoaded,this._opaquePass=Object(r.a)(e.opaquePass,EI.OPAQUE),this._cull=Object(r.a)(e.cull,!0),this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=Ae.clone(Ae.IDENTITY),this._modelMatrix=Ae.clone(Ae.IDENTITY),this.time=0,this.shadows=RR.ENABLED,this._boundingSphere=void 0,this.clippingPlanes=void 0,this.isClipped=!1,this.clippingPlanesDirty=!1,this.clippingPlanesOriginMatrix=void 0,this.attenuation=!1,this._attenuation=!1,this.geometricError=0,this.geometricErrorScale=1,this.maximumAttenuation=this._pointSize,function(e,t){var n=t.arrayBuffer,i=Object(r.a)(t.byteOffset,0),a=new Uint8Array(n),s=new DataView(n);i+=aG;var c=s.getUint32(i,!0);if(1!==c)throw new de.a("Only Point Cloud tile version 1 is supported. Version "+c+" is not.");i+=aG,i+=aG;var l=s.getUint32(i,!0);if(0===l)throw new de.a("Feature table must have a byte length greater than zero");i+=aG;var u=s.getUint32(i,!0);i+=aG;var h=s.getUint32(i,!0);i+=aG;var d=s.getUint32(i,!0),f=Du(a,i+=aG,l),p=JSON.parse(f);i+=l;var m,g,v=new Uint8Array(n,i,u);if(i+=u,h>0){var _=Du(a,i,h);m=JSON.parse(_),i+=h,d>0&&(g=new Uint8Array(n,i,d),i+=d)}var b=new cz(p,v),y=b.getGlobalProperty("POINTS_LENGTH");if(b.featuresLength=y,!Object(o.a)(y))throw new de.a("Feature table global property: POINTS_LENGTH must be defined");var w,C,E,A,x=b.getGlobalProperty("RTC_CENTER",Ds.FLOAT,3);Object(o.a)(x)&&(e._rtcCenter=O.unpack(x));var T,S,D,P,I,M=!1,R=!1,L=!1,j=!1,F=!1,N=!1,z=!1,k=!1,B=Object(o.a)(p.extensions)?p.extensions["3DTILES_draco_point_compression"]:void 0,H=Object(o.a)(m)&&Object(o.a)(m.extensions)?m.extensions["3DTILES_draco_point_compression"]:void 0;Object(o.a)(H)&&(D=H.properties);if(Object(o.a)(B)){S=B.properties;var V=B.byteOffset,U=B.byteLength;if(!Object(o.a)(S)||!Object(o.a)(V)||!Object(o.a)(U))throw new de.a("Draco properties, byteOffset, and byteLength must be defined");T=ol(v,V,V+U),M=Object(o.a)(S.POSITION),R=Object(o.a)(S.RGB)||Object(o.a)(S.RGBA),L=Object(o.a)(S.NORMAL),j=Object(o.a)(S.BATCH_ID),N=Object(o.a)(S.RGBA),e._decodingState=tG}Object(o.a)(T)&&(P={buffer:T,featureTableProperties:S,batchTableProperties:D,properties:Object(Wf.a)(S,D),dequantizeInShader:e._dequantizeInShader});if(!M)if(Object(o.a)(p.POSITION))w=b.getPropertyArray("POSITION",Ds.FLOAT,3),M=!0;else if(Object(o.a)(p.POSITION_QUANTIZED)){w=b.getPropertyArray("POSITION_QUANTIZED",Ds.UNSIGNED_SHORT,3),F=!0,M=!0;var W=b.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Ds.FLOAT,3);if(!Object(o.a)(W))throw new de.a("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");e._quantizedVolumeScale=O.unpack(W),e._quantizedRange=65535;var G=b.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Ds.FLOAT,3);if(!Object(o.a)(G))throw new de.a("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");e._quantizedVolumeOffset=O.unpack(G)}R||(Object(o.a)(p.RGBA)?(C=b.getPropertyArray("RGBA",Ds.UNSIGNED_BYTE,4),N=!0,R=!0):Object(o.a)(p.RGB)?(C=b.getPropertyArray("RGB",Ds.UNSIGNED_BYTE,3),R=!0):Object(o.a)(p.RGB565)&&(C=b.getPropertyArray("RGB565",Ds.UNSIGNED_SHORT,1),z=!0,R=!0));L||(Object(o.a)(p.NORMAL)?(E=b.getPropertyArray("NORMAL",Ds.FLOAT,3),L=!0):Object(o.a)(p.NORMAL_OCT16P)&&(E=b.getPropertyArray("NORMAL_OCT16P",Ds.UNSIGNED_BYTE,2),k=!0,L=!0));j||Object(o.a)(p.BATCH_ID)&&(A=b.getPropertyArray("BATCH_ID",Ds.UNSIGNED_SHORT,1),j=!0);if(!M)throw new de.a("Either POSITION or POSITION_QUANTIZED must be defined.");if(Object(o.a)(p.CONSTANT_RGBA)){var q=b.getGlobalProperty("CONSTANT_RGBA",Ds.UNSIGNED_BYTE,4);e._constantColor=Hf.fromBytes(q[0],q[1],q[2],q[3],e._constantColor)}if(j){var Y=b.getGlobalProperty("BATCH_LENGTH");if(!Object(o.a)(Y))throw new de.a("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");Object(o.a)(g)&&(g=new Uint8Array(g)),Object(o.a)(e._batchTableLoaded)&&e._batchTableLoaded(Y,m,g)}!j&&Object(o.a)(g)&&(I=iz.getBinaryProperties(y,m,g));e._parsedContent={positions:w,colors:C,normals:E,batchIds:A,styleableProperties:I,draco:P},e._pointsLength=y,e._isQuantized=F,e._isOctEncoded16P=k,e._isRGB565=z,e._isTranslucent=N,e._hasColors=R,e._hasNormals=L,e._hasBatchIds=j}(this,e)}Object.defineProperties(oG.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},color:{get:function(){return Hf.clone(this._highlightColor)},set:function(e){this._highlightColor=Hf.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(Object(o.a)(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=gt.clone(e,this._boundingSphere)}}});var aG=Uint32Array.BYTES_PER_ELEMENT;var sG,cG=new O,lG=new O,uG=new O;function hG(e){for(var t=e.length/3,n=Math.min(t,20),i=function(e){if(!Object(o.a)(sG)){d.setRandomNumberSeed(0),sG=new Array(e);for(var t=0;t<e;++t)sG[t]=d.nextRandomNumber()}return sG}(20),r=Number.MAX_VALUE,a=-Number.MAX_VALUE,s=O.fromElements(r,r,r,cG),c=O.fromElements(a,a,a,lG),l=0;l<n;++l){var u=Math.floor(i[l]*t),h=O.unpack(e,3*u,uG);O.minimumByComponent(s,h,s),O.maximumByComponent(c,h,c)}var f=gt.fromCornerPoints(s,c);return f.radius+=d.EPSILON2,f}function dG(e,t){var n=Ds.fromTypedArray(e);return n===Ds.INT||n===Ds.UNSIGNED_INT||n===Ds.DOUBLE?(G_("Cast pnts property to floats",'Point cloud property "'+t+'" will be casted to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.'),new Float32Array(e)):e}var fG=new he,pG=new he,mG=new Hf,gG=new Ae;function vG(e,t){for(var n=/czm_3dtiles_property_(\d+)/g,i=n.exec(e);null!==i;){var r=parseInt(i[1]);-1===t.indexOf(r)&&t.push(r),i=n.exec(e)}}function _G(e,t){for(var n=/czm_3dtiles_builtin_property_(\w+)/g,i=n.exec(e);null!==i;){var r=i[1];-1===t.indexOf(r)&&t.push(r),i=n.exec(e)}}function bG(e,t){for(var n=e.numberOfAttributes,i=0;i<n;++i){var r=e.getAttribute(i);if(r.index===t)return r}}var yG={POSITION:"czm_3dtiles_builtin_property_POSITION",POSITION_ABSOLUTE:"czm_3dtiles_builtin_property_POSITION_ABSOLUTE",COLOR:"czm_3dtiles_builtin_property_COLOR",NORMAL:"czm_3dtiles_builtin_property_NORMAL"};function wG(e){return e.replace("()","(vec3 czm_3dtiles_builtin_property_POSITION, vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, vec4 czm_3dtiles_builtin_property_COLOR, vec3 czm_3dtiles_builtin_property_NORMAL)")}function OG(e,t,n){var i,a,s,c,l,u,h=t.context,d=Object(o.a)(n),f=e._isQuantized,p=e._isQuantizedDraco,m=e._isOctEncoded16P,g=e._isOctEncodedDraco,v=e._isRGB565,_=e._isTranslucent,b=e._hasColors,y=e._hasNormals,w=e._hasBatchIds,C=e._backFaceCulling,E=e._normalShading,A=e._drawCommand.vertexArray,x=e.clippingPlanes,T=e._attenuation,S=_,D=Object(Lf.a)(yG),P={},I=e._styleableShaderAttributes;for(a in I)I.hasOwnProperty(a)&&(s=I[a],D[a]="czm_3dtiles_property_"+s.location,P[s.location]=s);if(d){var M={translucent:!1};c=n.getColorShaderFunction("getColorFromStyle",D,M),l=n.getShowShaderFunction("getShowFromStyle",D,M),u=n.getPointSizeShaderFunction("getPointSizeFromStyle",D,M),Object(o.a)(c)&&M.translucent&&(S=!0)}e._styleTranslucent=S;var R=Object(o.a)(c),L=Object(o.a)(l),j=Object(o.a)(u),F=e.isClipped,N=[],z=[];R&&(vG(c,N),_G(c,z),c=wG(c)),L&&(vG(l,N),_G(l,z),l=wG(l)),j&&(vG(u,N),_G(u,z),u=wG(u));var k=z.indexOf("COLOR")>=0,B=z.indexOf("NORMAL")>=0;if(B&&!y)throw new de.a("Style references the NORMAL semantic but the point cloud does not have normals");for(a in I)if(I.hasOwnProperty(a)){s=I[a];var H=N.indexOf(s.location)>=0;bG(A,s.location).enabled=H}var V=b&&(!R||k);b&&(bG(A,1).enabled=V);var U=y&&(E||C||B);y&&(bG(A,2).enabled=U);var W={a_position:0};V&&(W.a_color=1),U&&(W.a_normal=2),w&&(W.a_batchId=3);var G="",q=N.length;for(i=0;i<q;++i){var Y=N[i],$=(s=P[Y]).componentCount,X="czm_3dtiles_property_"+Y;G+="attribute "+(1===$?"float":"vec"+$)+" "+X+"; \n",W[X]=s.location}!function(e,t){var n=t.context,i=e._isQuantized,a=e._isQuantizedDraco,s=e._isOctEncodedDraco,c={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){var i=fG;if(i.x=e._attenuation?e.maximumAttenuation:e._pointSize,i.x*=t.pixelRatio,i.y=e.time,e._attenuation){var r,o=t.camera.frustum;r=t.mode===IR.SCENE2D||o instanceof Vb?Number.POSITIVE_INFINITY:n.drawingBufferHeight/t.camera.frustum.sseDenominator,i.z=e.geometricError*e.geometricErrorScale,i.w=r}return i},u_highlightColor:function(){return e._highlightColor},u_constantColor:function(){return e._constantColor},u_clippingPlanes:function(){var t=e.clippingPlanes;return e.isClipped?t.texture:n.defaultTexture},u_clippingPlanesEdgeStyle:function(){var t=e.clippingPlanes;if(!Object(o.a)(t))return Hf.TRANSPARENT;var n=Hf.clone(t.edgeColor,mG);return n.alpha=t.edgeWidth,n},u_clippingPlanesMatrix:function(){var t=e.clippingPlanes;if(!Object(o.a)(t))return Ae.IDENTITY;var i=Object(r.a)(e.clippingPlanesOriginMatrix,e._modelMatrix);return Ae.multiply(n.uniformState.view3D,i,gG),Ae.multiply(gG,t.modelMatrix,gG)}};(i||a||s)&&(c=Object(Wf.a)(c,{u_quantizedVolumeScaleAndOctEncodedRange:function(){var t=pG;if(Object(o.a)(e._quantizedVolumeScale)){var n=O.clone(e._quantizedVolumeScale,t);O.divideByScalar(n,e._quantizedRange,t)}return t.w=e._octEncodedRange,t}})),Object(o.a)(e._uniformMapLoaded)&&(c=e._uniformMapLoaded(c)),e._drawCommand.uniformMap=c}(e,t);var K="attribute vec3 a_position; \nvarying vec4 v_color; \nuniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; \nuniform vec4 u_constantColor; \nuniform vec4 u_highlightColor; \n";K+="float u_pointSize; \nfloat u_time; \n",T&&(K+="float u_geometricError; \nfloat u_depthMultiplier; \n"),K+=G,V&&(K+=_?"attribute vec4 a_color; \n":v?"attribute float a_color; \nconst float SHIFT_RIGHT_11 = 1.0 / 2048.0; \nconst float SHIFT_RIGHT_5 = 1.0 / 32.0; \nconst float SHIFT_LEFT_11 = 2048.0; \nconst float SHIFT_LEFT_5 = 32.0; \nconst float NORMALIZE_6 = 1.0 / 64.0; \nconst float NORMALIZE_5 = 1.0 / 32.0; \n":"attribute vec3 a_color; \n"),U&&(K+=m||g?"attribute vec2 a_normal; \n":"attribute vec3 a_normal; \n"),w&&(K+="attribute float a_batchId; \n"),(f||p||g)&&(K+="uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; \n"),R&&(K+=c),L&&(K+=l),j&&(K+=u),K+="void main() \n{ \n u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; \n u_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; \n",T&&(K+=" u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; \n u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; \n"),K+=V?_?" vec4 color = a_color; \n":v?" float compressed = a_color; \n float r = floor(compressed * SHIFT_RIGHT_11); \n compressed -= r * SHIFT_LEFT_11; \n float g = floor(compressed * SHIFT_RIGHT_5); \n compressed -= g * SHIFT_LEFT_5; \n float b = compressed; \n vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5); \n vec4 color = vec4(rgb, 1.0); \n":" vec4 color = vec4(a_color, 1.0); \n":" vec4 color = u_constantColor; \n",K+=f||p?" vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; \n":" vec3 position = a_position; \n",K+=" vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); \n",U?(K+=m?" vec3 normal = czm_octDecode(a_normal); \n":g?" vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; \n":" vec3 normal = a_normal; \n",K+=" vec3 normalEC = czm_normal * normal; \n"):K+=" vec3 normal = vec3(1.0); \n",R&&(K+=" color = getColorFromStyle(position, position_absolute, color, normal); \n"),L&&(K+=" float show = float(getShowFromStyle(position, position_absolute, color, normal)); \n"),K+=j?" gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; \n":T?" vec4 positionEC = czm_modelView * vec4(position, 1.0); \n float depth = -positionEC.z; \n gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); \n":" gl_PointSize = u_pointSize; \n",K+=" color = color * u_highlightColor; \n",U&&E&&(K+=" float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); \n diffuseStrength = max(diffuseStrength, 0.4); \n color.xyz *= diffuseStrength * czm_lightColor; \n"),K+=" v_color = color; \n gl_Position = czm_modelViewProjection * vec4(position, 1.0); \n",U&&C&&(K+=" float visible = step(-normalEC.z, 0.0); \n gl_Position *= visible; \n gl_PointSize *= visible; \n"),L&&(K+=" gl_Position.w *= float(show); \n gl_PointSize *= float(show); \n"),K+="} \n";var Q="varying vec4 v_color; \n";F&&(Q+="uniform sampler2D u_clippingPlanes; \nuniform mat4 u_clippingPlanesMatrix; \nuniform vec4 u_clippingPlanesEdgeStyle; \n",Q+="\n",Q+=bH(x,h),Q+="\n"),Q+="void main() \n{ \n gl_FragColor = czm_gammaCorrect(v_color); \n",F&&(Q+=vH("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),Q+="} \n",Object(o.a)(e._vertexShaderLoaded)&&(K=e._vertexShaderLoaded(K)),Object(o.a)(e._fragmentShaderLoaded)&&(Q=e._fragmentShaderLoaded(Q));var Z=e._drawCommand;Object(o.a)(Z.shaderProgram)&&Z.shaderProgram.destroy(),Z.shaderProgram=LM.fromCache({context:h,vertexShaderSource:K,fragmentShaderSource:Q,attributeLocations:W});try{Z.shaderProgram._bind()}catch(J){throw new de.a("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}var CG=new he,EG=new O;oG.prototype.update=function(e){if(!function(e,t){if(e._decodingState===iG)return!1;if(e._decodingState===tG){var n=e._parsedContent,i=n.draco,a=gH.decodePointCloud(i,t);Object(o.a)(a)&&(e._decodingState=nG,a.then((function(t){e._decodingState=iG;var a=Object(o.a)(t.POSITION)?t.POSITION.array:void 0,s=Object(o.a)(t.RGB)?t.RGB.array:void 0,c=Object(o.a)(t.RGBA)?t.RGBA.array:void 0,l=Object(o.a)(t.NORMAL)?t.NORMAL.array:void 0,u=Object(o.a)(t.BATCH_ID)?t.BATCH_ID.array:void 0,h=Object(o.a)(a)&&Object(o.a)(t.POSITION.data.quantization),d=Object(o.a)(l)&&Object(o.a)(t.NORMAL.data.quantization);if(h){var f=t.POSITION.data.quantization,p=f.range;e._quantizedVolumeScale=O.fromElements(p,p,p),e._quantizedVolumeOffset=O.unpack(f.minValues),e._quantizedRange=(1<<f.quantizationBits)-1,e._isQuantizedDraco=!0}d&&(e._octEncodedRange=(1<<t.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);var m=n.styleableProperties,g=i.batchTableProperties;for(var v in g)if(g.hasOwnProperty(v)){var _=t[v];Object(o.a)(m)||(m={}),m[v]={typedArray:_.array,componentCount:_.data.componentsPerAttribute}}n.positions=Object(r.a)(a,n.positions),n.colors=Object(r.a)(Object(r.a)(c,s),n.colors),n.normals=Object(r.a)(l,n.normals),n.batchIds=Object(r.a)(u,n.batchIds),n.styleableProperties=m})).otherwise((function(t){e._decodingState=rG,e._readyPromise.reject(t)})))}return!0}(this,e.context)){var t=!1,n=!Ae.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,n=!0),Object(o.a)(this._drawCommand)||(!function(e,t){var n,i,r=t.context,a=e._parsedContent,s=e._pointsLength,c=a.positions,l=a.colors,u=a.normals,h=a.batchIds,d=a.styleableProperties,f=Object(o.a)(d),p=e._isQuantized,m=e._isQuantizedDraco,g=e._isOctEncoded16P,v=e._isOctEncodedDraco,_=e._quantizedRange,b=e._octEncodedRange,y=e._isRGB565,w=e._isTranslucent,C=e._hasColors,E=e._hasNormals,A=e._hasBatchIds,x=[],T={};if(e._styleableShaderAttributes=T,f){var S=4;for(var D in d)if(d.hasOwnProperty(D)){var P=d[D],I=dG(P.typedArray,D);n=P.componentCount,i=Ds.fromTypedArray(I);var M=oR.createVertexBuffer({context:r,typedArray:I,usage:iR.STATIC_DRAW});e._geometryByteLength+=M.sizeInBytes;var R={index:S,vertexBuffer:M,componentsPerAttribute:n,componentDatatype:i,normalize:!1,offsetInBytes:0,strideInBytes:0};x.push(R),T[D]={location:S,componentCount:n},++S}}var L,j,F,N=oR.createVertexBuffer({context:r,typedArray:c,usage:iR.STATIC_DRAW});e._geometryByteLength+=N.sizeInBytes,C&&(L=oR.createVertexBuffer({context:r,typedArray:l,usage:iR.STATIC_DRAW}),e._geometryByteLength+=L.sizeInBytes),E&&(j=oR.createVertexBuffer({context:r,typedArray:u,usage:iR.STATIC_DRAW}),e._geometryByteLength+=j.sizeInBytes),A&&(h=dG(h,"batchIds"),F=oR.createVertexBuffer({context:r,typedArray:h,usage:iR.STATIC_DRAW}),e._geometryByteLength+=F.sizeInBytes);var z=[];if(i=p?Ds.UNSIGNED_SHORT:m?_<=255?Ds.UNSIGNED_BYTE:Ds.UNSIGNED_SHORT:Ds.FLOAT,z.push({index:0,vertexBuffer:N,componentsPerAttribute:3,componentDatatype:i,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(e._boundingSphere=p||m?gt.fromCornerPoints(O.ZERO,e._quantizedVolumeScale):hG(c)),C)if(y)z.push({index:1,vertexBuffer:L,componentsPerAttribute:1,componentDatatype:Ds.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{var k=w?4:3;z.push({index:1,vertexBuffer:L,componentsPerAttribute:k,componentDatatype:Ds.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}E&&(g?(n=2,i=Ds.UNSIGNED_BYTE):v?(n=2,i=b<=255?Ds.UNSIGNED_BYTE:Ds.UNSIGNED_SHORT):(n=3,i=Ds.FLOAT),z.push({index:2,vertexBuffer:j,componentsPerAttribute:n,componentDatatype:i,normalize:!1,offsetInBytes:0,strideInBytes:0})),A&&z.push({index:3,vertexBuffer:F,componentsPerAttribute:1,componentDatatype:Ds.fromTypedArray(h),normalize:!1,offsetInBytes:0,strideInBytes:0}),f&&(z=z.concat(x));var B=new hR({context:r,attributes:z}),H={depthTest:{enabled:!0}};e._opaquePass===EI.CESIUM_3D_TILE&&(H.stencilTest=JL.setCesium3DTileBit(),H.stencilMask=JL.CESIUM_3D_TILE_MASK),e._opaqueRenderState=XI.fromCache(H),e._translucentRenderState=XI.fromCache({depthTest:{enabled:!0},depthMask:!1,blending:LP.ALPHA_BLEND}),e._drawCommand=new CI({boundingVolume:new gt,cull:e._cull,modelMatrix:new Ae,primitiveType:xl.POINTS,vertexArray:B,count:s,shaderProgram:void 0,uniformMap:void 0,renderState:w?e._translucentRenderState:e._opaqueRenderState,pass:w?EI.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}(this,e),n=!0,t=!0,this._ready=!0,this._readyPromise.resolve(this),this._parsedContent=void 0),n){Ae.clone(this.modelMatrix,this._modelMatrix);var i=this._drawCommand.modelMatrix;if(Ae.clone(this._modelMatrix,i),Object(o.a)(this._rtcCenter)&&Ae.multiplyByTranslation(i,this._rtcCenter,i),Object(o.a)(this._quantizedVolumeOffset)&&Ae.multiplyByTranslation(i,this._quantizedVolumeOffset,i),e.mode!==IR.SCENE3D){var a=e.mapProjection,s=Ae.getColumn(i,3,CG);he.equals(s,he.UNIT_W)||ya.basisTo2D(a,i,i)}var c=this._drawCommand.boundingVolume;if(gt.clone(this._boundingSphere,c),this._cull){var l=c.center;Ae.multiplyByPoint(i,l,l);var u=Ae.getScale(i,EG);c.radius*=O.maximumComponent(u)}}this.clippingPlanesDirty&&(this.clippingPlanesDirty=!1,t=!0),this._attenuation!==this.attenuation&&(this._attenuation=this.attenuation,t=!0),this.backFaceCulling!==this._backFaceCulling&&(this._backFaceCulling=this.backFaceCulling,t=!0),this.normalShading!==this._normalShading&&(this._normalShading=this.normalShading,t=!0),(this._style!==this.style||this.styleDirty)&&(this._style=this.style,this.styleDirty=!1,t=!0),t&&OG(this,e,this._style),this._drawCommand.castShadows=RR.castShadows(this.shadows),this._drawCommand.receiveShadows=RR.receiveShadows(this.shadows);var h=this._highlightColor.alpha<1||this._constantColor.alpha<1||this._styleTranslucent;this._drawCommand.renderState=h?this._translucentRenderState:this._opaqueRenderState,this._drawCommand.pass=h?EI.TRANSLUCENT:this._opaquePass;var d=e.commandList,f=e.passes;(f.render||f.pick)&&d.push(this._drawCommand)}},oG.prototype.isDestroyed=function(){return!1},oG.prototype.destroy=function(){var e=this._drawCommand;return Object(o.a)(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),Ks(this)};var AG=oG;function xG(e,t,n){var i=e._gl;i.framebufferTexture2D(i.FRAMEBUFFER,t,n._target,n._texture,0)}function TG(e,t,n){var i=e._gl;i.framebufferRenderbuffer(i.FRAMEBUFFER,t,i.RENDERBUFFER,n._getRenderbuffer())}function SG(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).context;i.a.defined("options.context",t);var n=t._gl,s=BP.maximumColorAttachments;if(this._gl=n,this._framebuffer=n.createFramebuffer(),this._colorTextures=[],this._colorRenderbuffers=[],this._activeColorAttachments=[],this._depthTexture=void 0,this._depthRenderbuffer=void 0,this._stencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this.destroyAttachments=Object(r.a)(e.destroyAttachments,!0),Object(o.a)(e.colorTextures)&&Object(o.a)(e.colorRenderbuffers))throw new a.a("Cannot have both color texture and color renderbuffer attachments.");if(Object(o.a)(e.depthTexture)&&Object(o.a)(e.depthRenderbuffer))throw new a.a("Cannot have both a depth texture and depth renderbuffer attachment.");if(Object(o.a)(e.depthStencilTexture)&&Object(o.a)(e.depthStencilRenderbuffer))throw new a.a("Cannot have both a depth-stencil texture and depth-stencil renderbuffer attachment.");var c,l,u,h,d,f=Object(o.a)(e.depthTexture)||Object(o.a)(e.depthRenderbuffer),p=Object(o.a)(e.depthStencilTexture)||Object(o.a)(e.depthStencilRenderbuffer);if(f&&p)throw new a.a("Cannot have both a depth and depth-stencil attachment.");if(Object(o.a)(e.stencilRenderbuffer)&&p)throw new a.a("Cannot have both a stencil and depth-stencil attachment.");if(f&&Object(o.a)(e.stencilRenderbuffer))throw new a.a("Cannot have both a depth and stencil attachment.");if(this._bind(),Object(o.a)(e.colorTextures)){var m=e.colorTextures;if((h=this._colorTextures.length=this._activeColorAttachments.length=m.length)>s)throw new a.a("The number of color attachments exceeds the number supported.");for(u=0;u<h;++u){if(c=m[u],!FC.isColorFormat(c.pixelFormat))throw new a.a("The color-texture pixel-format must be a color format.");if(c.pixelDatatype===LC.FLOAT&&!t.colorBufferFloat)throw new a.a("The color texture pixel datatype is FLOAT and the WebGL implementation does not support the EXT_color_buffer_float or WEBGL_color_buffer_float extensions. See Context.colorBufferFloat.");if(c.pixelDatatype===LC.HALF_FLOAT&&!t.colorBufferHalfFloat)throw new a.a("The color texture pixel datatype is HALF_FLOAT and the WebGL implementation does not support the EXT_color_buffer_half_float extension. See Context.colorBufferHalfFloat.");xG(this,d=this._gl.COLOR_ATTACHMENT0+u,c),this._activeColorAttachments[u]=d,this._colorTextures[u]=c}}if(Object(o.a)(e.colorRenderbuffers)){var g=e.colorRenderbuffers;if((h=this._colorRenderbuffers.length=this._activeColorAttachments.length=g.length)>s)throw new a.a("The number of color attachments exceeds the number supported.");for(u=0;u<h;++u)l=g[u],TG(this,d=this._gl.COLOR_ATTACHMENT0+u,l),this._activeColorAttachments[u]=d,this._colorRenderbuffers[u]=l}if(Object(o.a)(e.depthTexture)){if((c=e.depthTexture).pixelFormat!==FC.DEPTH_COMPONENT)throw new a.a("The depth-texture pixel-format must be DEPTH_COMPONENT.");xG(this,this._gl.DEPTH_ATTACHMENT,c),this._depthTexture=c}if(Object(o.a)(e.depthRenderbuffer)&&(l=e.depthRenderbuffer,TG(this,this._gl.DEPTH_ATTACHMENT,l),this._depthRenderbuffer=l),Object(o.a)(e.stencilRenderbuffer)&&(l=e.stencilRenderbuffer,TG(this,this._gl.STENCIL_ATTACHMENT,l),this._stencilRenderbuffer=l),Object(o.a)(e.depthStencilTexture)){if((c=e.depthStencilTexture).pixelFormat!==FC.DEPTH_STENCIL)throw new a.a("The depth-stencil pixel-format must be DEPTH_STENCIL.");xG(this,this._gl.DEPTH_STENCIL_ATTACHMENT,c),this._depthStencilTexture=c}Object(o.a)(e.depthStencilRenderbuffer)&&(l=e.depthStencilRenderbuffer,TG(this,this._gl.DEPTH_STENCIL_ATTACHMENT,l),this._depthStencilRenderbuffer=l),this._unBind()}Object.defineProperties(SG.prototype,{status:{get:function(){this._bind();var e=this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);return this._unBind(),e}},numberOfColorAttachments:{get:function(){return this._activeColorAttachments.length}},depthTexture:{get:function(){return this._depthTexture}},depthRenderbuffer:{get:function(){return this._depthRenderbuffer}},stencilRenderbuffer:{get:function(){return this._stencilRenderbuffer}},depthStencilTexture:{get:function(){return this._depthStencilTexture}},depthStencilRenderbuffer:{get:function(){return this._depthStencilRenderbuffer}},hasDepthAttachment:{get:function(){return!!(this.depthTexture||this.depthRenderbuffer||this.depthStencilTexture||this.depthStencilRenderbuffer)}}}),SG.prototype._bind=function(){var e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,this._framebuffer)},SG.prototype._unBind=function(){var e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,null)},SG.prototype._getActiveColorAttachments=function(){return this._activeColorAttachments},SG.prototype.getColorTexture=function(e){if(!Object(o.a)(e)||e<0||e>=this._colorTextures.length)throw new a.a("index is required, must be greater than or equal to zero and must be less than the number of color attachments.");return this._colorTextures[e]},SG.prototype.getColorRenderbuffer=function(e){if(!Object(o.a)(e)||e<0||e>=this._colorRenderbuffers.length)throw new a.a("index is required, must be greater than or equal to zero and must be less than the number of color attachments.");return this._colorRenderbuffers[e]},SG.prototype.isDestroyed=function(){return!1},SG.prototype.destroy=function(){if(this.destroyAttachments){for(var e=0,t=this._colorTextures,n=t.length;e<n;++e){var i=t[e];Object(o.a)(i)&&i.destroy()}var r=this._colorRenderbuffers;for(n=r.length,e=0;e<n;++e){var a=r[e];Object(o.a)(a)&&a.destroy()}this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy(),this._stencilRenderbuffer=this._stencilRenderbuffer&&this._stencilRenderbuffer.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()}return this._gl.deleteFramebuffer(this._framebuffer),Ks(this)};var DG=SG;function PG(){this._framebuffer=void 0,this._colorGBuffer=void 0,this._depthGBuffer=void 0,this._depthTexture=void 0,this._drawCommand=void 0,this._clearCommand=void 0,this._strength=1,this._radius=1}function IG(e){var t=e._framebuffer;Object(o.a)(t)&&(e._colorGBuffer.destroy(),e._depthGBuffer.destroy(),e._depthTexture.destroy(),t.destroy(),e._framebuffer=void 0,e._colorGBuffer=void 0,e._depthGBuffer=void 0,e._depthTexture=void 0,e._drawCommand=void 0,e._clearCommand=void 0)}var MG=new Mt;function RG(e,t){var n=t.drawingBufferWidth,i=t.drawingBufferHeight,r=e._colorGBuffer,a=!1,s=Object(o.a)(r)&&(r.width!==n||r.height!==i);return Object(o.a)(r)&&!s||(IG(e),function(e,t){var n=t.drawingBufferWidth,i=t.drawingBufferHeight,r=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),o=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),a=new nI({context:t,width:n,height:i,pixelFormat:FC.DEPTH_COMPONENT,pixelDatatype:LC.UNSIGNED_INT,sampler:ZP.NEAREST});e._framebuffer=new DG({context:t,colorTextures:[r,o],depthTexture:a,destroyAttachments:!1}),e._colorGBuffer=r,e._depthGBuffer=o,e._depthTexture=a}(e,t),function(e,t){var n=new KM({defines:["LOG_DEPTH_WRITE"],sources:["#extension GL_EXT_frag_depth : enable\n\nuniform sampler2D u_pointCloud_colorGBuffer;\nuniform sampler2D u_pointCloud_depthGBuffer;\nuniform vec2 u_distanceAndEdlStrength;\nvarying vec2 v_textureCoordinates;\n\nvec2 neighborContribution(float log2Depth, vec2 offset)\n{\n float dist = u_distanceAndEdlStrength.x;\n vec2 texCoordOrig = v_textureCoordinates + offset * dist;\n vec2 texCoord0 = v_textureCoordinates + offset * floor(dist);\n vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist);\n\n float depthOrLogDepth0 = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, texCoord0));\n float depthOrLogDepth1 = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, texCoord1));\n\n // ignore depth values that are the clear depth\n if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) {\n return vec2(0.0);\n }\n\n // interpolate the two adjacent depth values\n float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist));\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix);\n return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0);\n}\n\nvoid main()\n{\n float depthOrLogDepth = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, v_textureCoordinates));\n\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth);\n eyeCoordinate /= eyeCoordinate.w;\n\n float log2Depth = log2(-eyeCoordinate.z);\n\n if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer\n {\n discard;\n }\n\n vec4 color = texture2D(u_pointCloud_colorGBuffer, v_textureCoordinates);\n\n // sample from neighbors left, right, down, up\n vec2 texelSize = 1.0 / czm_viewport.zw;\n\n vec2 responseAndCount = vec2(0.0);\n\n responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0));\n responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0));\n responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y));\n responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y));\n\n float response = responseAndCount.x / responseAndCount.y;\n float strength = u_distanceAndEdlStrength.y;\n float shade = exp(-response * 300.0 * strength);\n color.rgb *= shade;\n gl_FragColor = vec4(color);\n\n // Input and output depth are the same.\n gl_FragDepthEXT = depthOrLogDepth;\n}\n"]}),i={u_pointCloud_colorGBuffer:function(){return e._colorGBuffer},u_pointCloud_depthGBuffer:function(){return e._depthGBuffer},u_distanceAndEdlStrength:function(){return MG.x=e._radius,MG.y=e._strength,MG}},r=XI.fromCache({blending:LP.ALPHA_BLEND,depthMask:!0,depthTest:{enabled:!0},stencilTest:JL.setCesium3DTileBit(),stencilMask:JL.CESIUM_3D_TILE_MASK});e._drawCommand=t.createViewportQuadCommand(n,{uniformMap:i,renderState:r,pass:EI.CESIUM_3D_TILE,owner:e}),e._clearCommand=new yN({framebuffer:e._framebuffer,color:new Hf(0,0,0,0),depth:1,renderState:XI.fromCache(),pass:EI.CESIUM_3D_TILE,owner:e})}(e,t),a=!0),a}function LG(e){return e.drawBuffers&&e.fragmentDepth}function jG(e,t){var n=e.shaderCache.getDerivedShaderProgram(t,"EC");if(!Object(o.a)(n)){var i=t._attributeLocations,r=t.fragmentShaderSource.clone();r.sources=r.sources.map((function(e){return e=(e=KM.replaceMain(e,"czm_point_cloud_post_process_main")).replace(/gl_FragColor/g,"gl_FragData[0]")})),r.sources.unshift("#extension GL_EXT_draw_buffers : enable \n"),r.sources.push("void main() \n{ \n czm_point_cloud_post_process_main(); \n#ifdef LOG_DEPTH\n czm_writeLogDepth();\n gl_FragData[1] = czm_packDepth(gl_FragDepthEXT); \n#else\n gl_FragData[1] = czm_packDepth(gl_FragCoord.z);\n#endif\n}"),n=e.shaderCache.createDerivedShaderProgram(t,"EC",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:r,attributeLocations:i})}return n}PG.isSupported=LG,PG.prototype.update=function(e,t,n,i){if(LG(e.context)){this._strength=n.eyeDomeLightingStrength,this._radius=n.eyeDomeLightingRadius*e.pixelRatio;var r,a=RG(this,e.context),s=e.commandList,c=s.length;for(r=t;r<c;++r){var l=s[r];if(l.primitiveType===xl.POINTS&&l.pass!==EI.TRANSLUCENT){var u=l.derivedCommands.pointCloudProcessor;(!Object(o.a)(u)||l.dirty||a||u.framebuffer!==this._framebuffer)&&(u=CI.shallowClone(l),l.derivedCommands.pointCloudProcessor=u,u.framebuffer=this._framebuffer,u.shaderProgram=jG(e.context,l.shaderProgram),u.castShadows=!1,u.receiveShadows=!1),s[r]=u}}var h=this._clearCommand,d=this._drawCommand;d.boundingVolume=i,s.push(d),s.push(h)}},PG.prototype.isDestroyed=function(){return!1},PG.prototype.destroy=function(){return IG(this),Ks(this)};var FG=PG;function NG(e){var t=Object(r.a)(e,{});this.attenuation=Object(r.a)(t.attenuation,!1),this.geometricErrorScale=Object(r.a)(t.geometricErrorScale,1),this.maximumAttenuation=t.maximumAttenuation,this.baseResolution=t.baseResolution,this.eyeDomeLighting=Object(r.a)(t.eyeDomeLighting,!0),this.eyeDomeLightingStrength=Object(r.a)(t.eyeDomeLightingStrength,1),this.eyeDomeLightingRadius=Object(r.a)(t.eyeDomeLightingRadius,1),this.backFaceCulling=Object(r.a)(t.backFaceCulling,!1),this.normalShading=Object(r.a)(t.normalShading,!0)}NG.isSupported=function(e){return FG.isSupported(e.context)};var zG=NG;function kG(e,t,n,i,r){var a;this._tileset=e,this._tile=t,this._resource=n,this._pickId=void 0,this._batchTable=void 0,this._styleDirty=!1,this._features=void 0,this.featurePropertiesDirty=!1,this._pointCloud=new AG({arrayBuffer:i,byteOffset:r,cull:!1,opaquePass:EI.CESIUM_3D_TILE,vertexShaderLoaded:(a=this,function(e){return Object(o.a)(a._batchTable)?a._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(e):e}),fragmentShaderLoaded:BG(this),uniformMapLoaded:HG(this),batchTableLoaded:VG(this),pickIdLoaded:UG(this)})}function BG(e){return function(t){return Object(o.a)(e._batchTable)?e._batchTable.getFragmentShaderCallback(!1,void 0)(t):"uniform vec4 czm_pickColor;\n"+t}}function HG(e){return function(t){return Object(o.a)(e._batchTable)?e._batchTable.getUniformMapCallback()(t):Object(Wf.a)(t,{czm_pickColor:function(){return e._pickId.color}})}}function VG(e){return function(t,n,i){e._batchTable=new iz(e,t,n,i)}}function UG(e){return function(){return Object(o.a)(e._batchTable)?e._batchTable.getPickId():"czm_pickColor"}}Object.defineProperties(kG.prototype,{featuresLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return this._pointCloud.pointsLength}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return this._pointCloud.geometryByteLength}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.memorySizeInBytes:0}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._pointCloud.readyPromise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){return this._batchTable}}}),kG.prototype.hasProperty=function(e,t){return!!Object(o.a)(this._batchTable)&&this._batchTable.hasProperty(e,t)},kG.prototype.getFeature=function(e){if(Object(o.a)(this._batchTable)){var t=this.featuresLength;if(!Object(o.a)(e)||e<0||e>=t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+(t-1)+").");return function(e){var t=e.featuresLength;if(!Object(o.a)(e._features)&&t>0){for(var n=new Array(t),i=0;i<t;++i)n[i]=new oz(e,i);e._features=n}}(this),this._features[e]}},kG.prototype.applyDebugSettings=function(e,t){this._pointCloud.color=e?t:Hf.WHITE},kG.prototype.applyStyle=function(e){Object(o.a)(this._batchTable)?this._batchTable.applyStyle(e):this._styleDirty=!0};var WG=new zG;kG.prototype.update=function(e,t){var n,i=this._pointCloud,a=Object(r.a)(e.pointCloudShading,WG),s=this._tile,c=this._batchTable,l=t.mode,u=e.clippingPlanes;Object(o.a)(this._pickId)||Object(o.a)(c)||(this._pickId=t.context.createPickId({primitive:e,content:this})),Object(o.a)(c)&&c.update(e,t),n=Object(o.a)(s._contentBoundingVolume)?l===IR.SCENE3D?s._contentBoundingVolume.boundingSphere:s._contentBoundingVolume2D.boundingSphere:l===IR.SCENE3D?s._boundingVolume.boundingSphere:s._boundingVolume2D.boundingSphere;var h=this._styleDirty;this._styleDirty=!1,i.clippingPlanesOriginMatrix=e.clippingPlanesOriginMatrix,i.style=Object(o.a)(c)?void 0:e.style,i.styleDirty=h,i.modelMatrix=s.computedTransform,i.time=e.timeSinceLoad,i.shadows=e.shadows,i.boundingSphere=n,i.clippingPlanes=u,i.isClipped=Object(o.a)(u)&&u.enabled&&s._isClipped,i.clippingPlanesDirty=s.clippingPlanesDirty,i.attenuation=a.attenuation,i.backFaceCulling=a.backFaceCulling,i.normalShading=a.normalShading,i.geometricError=function(e){var t=e._tileset.pointCloudShading,n=e._tile.contentBoundingVolume.boundingSphere.volume(),i=d.cbrt(n/e.pointsLength),r=e._tile.geometricError;return 0===r&&(r=Object(o.a)(t)&&Object(o.a)(t.baseResolution)?t.baseResolution:i),r}(this),i.geometricErrorScale=a.geometricErrorScale,Object(o.a)(a)&&Object(o.a)(a.maximumAttenuation)?i.maximumAttenuation=a.maximumAttenuation:s.refine===eG.ADD?i.maximumAttenuation=5:i.maximumAttenuation=e.maximumScreenSpaceError,i.update(t)},kG.prototype.isDestroyed=function(){return!1},kG.prototype.destroy=function(){return this._pickId=this._pickId&&this._pickId.destroy(),this._pointCloud=this._pointCloud&&this._pointCloud.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var GG=kG;function qG(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._readyPromise=Yt.a.defer(),this.featurePropertiesDirty=!1,function(e,t,n){n=Object(r.a)(n,0);var i,o=new Uint8Array(t),a=Du(o,n);try{i=JSON.parse(a)}catch(s){return void e._readyPromise.reject(new de.a("Invalid tile content."))}e._tileset.loadTileset(e._resource,i,e._tile),e._readyPromise.resolve(e)}(this,i,o)}Object.defineProperties(qG.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._readyPromise.promise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}}}),qG.prototype.hasProperty=function(e,t){return!1},qG.prototype.getFeature=function(e){},qG.prototype.applyDebugSettings=function(e,t){},qG.prototype.applyStyle=function(e){},qG.prototype.update=function(e,t){},qG.prototype.isDestroyed=function(){return!1},qG.prototype.destroy=function(){return Ks(this)};var YG=qG;function $G(e,t,n,s){if(i.a.defined("context",e),!t||0===t.length)throw new a.a("At least one attribute is required.");var c=$G._verifyAttributes(t);n=Object(r.a)(n,0);for(var l,u,h=[],d={},f=c.length,p=0;p<f;++p){var m=c[p];m.vertexBuffer?h.push(m):(l=d[u=m.usage],Object(o.a)(l)||(l=d[u]=[]),l.push(m))}function g(e,t){return Ds.getSizeInBytes(t.componentDatatype)-Ds.getSizeInBytes(e.componentDatatype)}for(u in this._allBuffers=[],d)if(d.hasOwnProperty(u)){(l=d[u]).sort(g);var v=$G._vertexSizeInBytes(l),_={vertexSizeInBytes:v,vertexBuffer:void 0,usage:l[0].usage,needsCommit:!1,arrayBuffer:void 0,arrayViews:$G._createArrayViews(l,v)};this._allBuffers.push(_)}this._size=0,this._instanced=Object(r.a)(s,!1),this._precreated=h,this._context=e,this.writers=void 0,this.va=void 0,this.resize(n)}$G._verifyAttributes=function(e){for(var t=[],n=0;n<e.length;++n){var i=e[n],o={index:Object(r.a)(i.index,n),enabled:Object(r.a)(i.enabled,!0),componentsPerAttribute:i.componentsPerAttribute,componentDatatype:Object(r.a)(i.componentDatatype,Ds.FLOAT),normalize:Object(r.a)(i.normalize,!1),vertexBuffer:i.vertexBuffer,usage:Object(r.a)(i.usage,iR.STATIC_DRAW)};if(t.push(o),1!==o.componentsPerAttribute&&2!==o.componentsPerAttribute&&3!==o.componentsPerAttribute&&4!==o.componentsPerAttribute)throw new a.a("attribute.componentsPerAttribute must be in the range [1, 4].");var s=o.componentDatatype;if(!Ds.validate(s))throw new a.a("Attribute must have a valid componentDatatype or not specify it.");if(!iR.validate(o.usage))throw new a.a("Attribute must have a valid usage or not specify it.")}for(var c=new Array(t.length),l=0;l<t.length;++l){var u=t[l].index;if(c[u])throw new a.a("Index "+u+" is used by more than one attribute.");c[u]=!0}return t},$G._vertexSizeInBytes=function(e){for(var t=0,n=e.length,i=0;i<n;++i){var r=e[i];t+=r.componentsPerAttribute*Ds.getSizeInBytes(r.componentDatatype)}var o=n>0?Ds.getSizeInBytes(e[0].componentDatatype):0,a=o>0?t%o:0;return t+=0===a?0:o-a},$G._createArrayViews=function(e,t){for(var n=[],i=0,r=e.length,o=0;o<r;++o){var a=e[o],s=a.componentDatatype;n.push({index:a.index,enabled:a.enabled,componentsPerAttribute:a.componentsPerAttribute,componentDatatype:s,normalize:a.normalize,offsetInBytes:i,vertexSizeInComponentType:t/Ds.getSizeInBytes(s),view:void 0}),i+=a.componentsPerAttribute*Ds.getSizeInBytes(s)}return n},$G.prototype.resize=function(e){this._size=e;var t=this._allBuffers;this.writers=[];for(var n=0,i=t.length;n<i;++n){var r=t[n];$G._resize(r,this._size),$G._appendWriters(this.writers,r)}ZG(this)},$G._resize=function(e,t){if(e.vertexSizeInBytes>0){var n=new ArrayBuffer(t*e.vertexSizeInBytes);if(Object(o.a)(e.arrayBuffer))for(var i=new Uint8Array(n),r=new Uint8Array(e.arrayBuffer),a=r.length,s=0;s<a;++s)i[s]=r[s];for(var c=e.arrayViews,l=c.length,u=0;u<l;++u){var h=c[u];h.view=Ds.createArrayBufferView(h.componentDatatype,n,h.offsetInBytes)}e.arrayBuffer=n}};var XG=[function(e,t,n){return function(i,r){t[i*n]=r,e.needsCommit=!0}},function(e,t,n){return function(i,r,o){var a=i*n;t[a]=r,t[a+1]=o,e.needsCommit=!0}},function(e,t,n){return function(i,r,o,a){var s=i*n;t[s]=r,t[s+1]=o,t[s+2]=a,e.needsCommit=!0}},function(e,t,n){return function(i,r,o,a,s){var c=i*n;t[c]=r,t[c+1]=o,t[c+2]=a,t[c+3]=s,e.needsCommit=!0}}];function KG(e,t){if(t.needsCommit&&t.vertexSizeInBytes>0){t.needsCommit=!1;var n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,r=Object(o.a)(n);if(!r||n.sizeInBytes<i)return r&&n.destroy(),t.vertexBuffer=oR.createVertexBuffer({context:e._context,typedArray:t.arrayBuffer,usage:t.usage}),t.vertexBuffer.vertexArrayDestroyable=!1,!0;t.vertexBuffer.copyFromArrayView(t.arrayBuffer)}return!1}function QG(e,t,n){if(e.needsCommit&&e.vertexSizeInBytes>0){var i=e.vertexSizeInBytes*t,r=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,r),i)}}function ZG(e){var t=e.va;if(Object(o.a)(t)){for(var n=t.length,i=0;i<n;++i)t[i].va.destroy();e.va=void 0}}$G._appendWriters=function(e,t){for(var n=t.arrayViews,i=n.length,r=0;r<i;++r){var o=n[r];e[o.index]=XG[o.componentsPerAttribute-1](t,o.view,o.vertexSizeInComponentType)}},$G.prototype.commit=function(e){var t,n,i,r=!1,a=this._allBuffers;for(n=0,i=a.length;n<i;++n)r=KG(this,t=a[n])||r;if(r||!Object(o.a)(this.va)){ZG(this);for(var s=this.va=[],c=d.SIXTY_FOUR_KILOBYTES-4,l=Object(o.a)(e)&&!this._instanced?Math.ceil(this._size/c):1,u=0;u<l;++u){var h=[];for(n=0,i=a.length;n<i;++n){var f=u*((t=a[n]).vertexSizeInBytes*c);$G._appendAttributes(h,t,f,this._instanced)}h=h.concat(this._precreated),s.push({va:new hR({context:this._context,attributes:h,indexBuffer:e}),indicesCount:1.5*(u!==l-1?c:this._size%c)})}}},$G._appendAttributes=function(e,t,n,i){for(var r=t.arrayViews,o=r.length,a=0;a<o;++a){var s=r[a];e.push({index:s.index,enabled:s.enabled,componentsPerAttribute:s.componentsPerAttribute,componentDatatype:s.componentDatatype,normalize:s.normalize,vertexBuffer:t.vertexBuffer,offsetInBytes:n+s.offsetInBytes,strideInBytes:t.vertexSizeInBytes,instanceDivisor:i?1:0})}},$G.prototype.subCommit=function(e,t){if(e<0||e>=this._size)throw new a.a("offsetInVertices must be greater than or equal to zero and less than the vertex array size.");if(e+t>this._size)throw new a.a("offsetInVertices + lengthInVertices cannot exceed the vertex array size.");for(var n=this._allBuffers,i=0,r=n.length;i<r;++i)QG(n[i],e,t)},$G.prototype.endSubCommits=function(){for(var e=this._allBuffers,t=0,n=e.length;t<n;++t)e[t].needsCommit=!1},$G.prototype.isDestroyed=function(){return!1},$G.prototype.destroy=function(){for(var e=this._allBuffers,t=0,n=e.length;t<n;++t){var i=e[t];i.vertexBuffer=i.vertexBuffer&&i.vertexBuffer.destroy()}return ZG(this),Ks(this)};var JG=$G,eq={},tq=new he(0,0,0,1),nq=new he,iq=new bl,rq=new Mt,oq=new Mt;eq.wgs84ToWindowCoordinates=function(e,t,n){return eq.wgs84WithEyeOffsetToWindowCoordinates(e,t,O.ZERO,n)};var aq=new he,sq=new O;function cq(e,t,n,i){var r=n.viewMatrix,o=Ae.multiplyByVector(r,he.fromElements(e.x,e.y,e.z,1,aq),aq),a=O.multiplyComponents(t,O.normalize(o,sq),sq);return o.x+=t.x+a.x,o.y+=t.y+a.y,o.z+=a.z,Ae.multiplyByVector(n.frustum.projectionMatrix,o,i)}var lq=new R(Math.PI,d.PI_OVER_TWO),uq=new O,hq=new O;eq.wgs84WithEyeOffsetToWindowCoordinates=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(t))throw new a.a("position is required.");var r=e.frameState,s=eq.computeActualWgs84Position(r,t,tq);if(Object(o.a)(s)){var c=e.canvas,l=iq;l.x=0,l.y=0,l.width=c.clientWidth,l.height=c.clientHeight;var u=e.camera,h=!1;if(r.mode===IR.SCENE2D){var f=e.mapProjection,p=lq,m=f.project(p,uq),g=O.clone(u.position,hq),v=u.frustum.clone(),_=Ae.computeViewportTransformation(l,0,1,new Ae),b=u.frustum.projectionMatrix,y=u.positionWC.y,w=O.fromElements(d.sign(y)*m.x-y,0,-u.positionWC.x),C=ya.pointToGLWindowCoordinates(b,_,w);if(0===y||C.x<=0||C.x>=c.clientWidth)h=!0;else{if(C.x>.5*c.clientWidth){l.width=C.x,u.frustum.right=m.x-y,nq=cq(s,n,u,nq),eq.clipToGLWindowCoordinates(l,nq,rq),l.x+=C.x,u.position.x=-u.position.x;var E=u.frustum.right;u.frustum.right=-u.frustum.left,u.frustum.left=-E,nq=cq(s,n,u,nq),eq.clipToGLWindowCoordinates(l,nq,oq)}else{l.x+=C.x,l.width-=C.x,u.frustum.left=-m.x-y,nq=cq(s,n,u,nq),eq.clipToGLWindowCoordinates(l,nq,rq),l.x=l.x-l.width,u.position.x=-u.position.x;var A=u.frustum.left;u.frustum.left=-u.frustum.right,u.frustum.right=-A,nq=cq(s,n,u,nq),eq.clipToGLWindowCoordinates(l,nq,oq)}O.clone(g,u.position),u.frustum=v.clone(),((i=Mt.clone(rq,i)).x<0||i.x>c.clientWidth)&&(i.x=oq.x)}}if(r.mode!==IR.SCENE2D||h){if((nq=cq(s,n,u,nq)).z<0&&!(u.frustum instanceof Vb)&&!(u.frustum instanceof kb))return;i=eq.clipToGLWindowCoordinates(l,nq,i)}return i.y=c.clientHeight-i.y,i}},eq.wgs84ToDrawingBufferCoordinates=function(e,t,n){if(n=eq.wgs84ToWindowCoordinates(e,t,n),Object(o.a)(n))return eq.transformWindowToDrawingBuffer(e,n,n)};var dq=new O,fq=new R;eq.computeActualWgs84Position=function(e,t,n){var i=e.mode;if(i===IR.SCENE3D)return O.clone(t,n);var r=e.mapProjection,a=r.ellipsoid.cartesianToCartographic(t,fq);if(Object(o.a)(a)){if(r.project(a,dq),i===IR.COLUMBUS_VIEW)return O.fromElements(dq.z,dq.x,dq.y,n);if(i===IR.SCENE2D)return O.fromElements(0,dq.x,dq.y,n);var s=e.morphTime;return O.fromElements(d.lerp(dq.z,t.x,s),d.lerp(dq.x,t.y,s),d.lerp(dq.y,t.z,s),n)}};var pq=new O,mq=new O,gq=new Ae;eq.clipToGLWindowCoordinates=function(e,t,n){return O.divideByScalar(t,t.w,pq),Ae.computeViewportTransformation(e,0,1,gq),Ae.multiplyByPoint(gq,pq,mq),Mt.fromCartesian3(mq,n)},eq.transformWindowToDrawingBuffer=function(e,t,n){var i=e.canvas,r=e.drawingBufferWidth/i.clientWidth,o=e.drawingBufferHeight/i.clientHeight;return Mt.fromElements(t.x*r,t.y*o,n)};var vq=new he,_q=new he;eq.drawingBufferToWgs84Coordinates=function(e,t,n,i){var r=e.context.uniformState,a=r.currentFrustum,s=a.x,c=a.y;if(e.frameState.useLogDepth){var l=n*r.log2FarDepthFromNearPlusOne;n=c*(1-s/(Math.pow(2,l)-1+s))/(c-s)}var u,h=e.view.passState.viewport,d=he.clone(he.UNIT_W,vq);d.x=(t.x-h.x)/h.width*2-1,d.y=(t.y-h.y)/h.height*2-1,d.z=2*n-1,d.w=1;var f=e.camera.frustum;if(Object(o.a)(f.fovy)){var p=1/(u=Ae.multiplyByVector(r.inverseViewProjection,d,_q)).w;O.multiplyByScalar(u,p,u)}else Object(o.a)(f._offCenterFrustum)&&(f=f._offCenterFrustum),(u=_q).x=.5*(d.x*(f.right-f.left)+f.left+f.right),u.y=.5*(d.y*(f.top-f.bottom)+f.bottom+f.top),u.z=.5*(d.z*(s-c)-s-c),u.w=1,u=Ae.multiplyByVector(r.inverseView,u,u);return O.fromCartesian4(u,i)};var bq=eq;function yq(e,t){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),Object(o.a)(e.disableDepthTestDistance)&&e.disableDepthTestDistance<0)throw new a.a("disableDepthTestDistance must be greater than or equal to 0.0.");var n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,s=e.scaleByDistance,c=e.distanceDisplayCondition;if(Object(o.a)(n)){if(n.far<=n.near)throw new a.a("translucencyByDistance.far must be greater than translucencyByDistance.near.");n=JC.clone(n)}if(Object(o.a)(i)){if(i.far<=i.near)throw new a.a("pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.");i=JC.clone(i)}if(Object(o.a)(s)){if(s.far<=s.near)throw new a.a("scaleByDistance.far must be greater than scaleByDistance.near.");s=JC.clone(s)}if(Object(o.a)(c)){if(c.far<=c.near)throw new a.a("distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.");c=$_.clone(c)}this._show=Object(r.a)(e.show,!0),this._position=O.clone(Object(r.a)(e.position,O.ZERO)),this._actualPosition=O.clone(this._position),this._pixelOffset=Mt.clone(Object(r.a)(e.pixelOffset,Mt.ZERO)),this._translate=new Mt(0,0),this._eyeOffset=O.clone(Object(r.a)(e.eyeOffset,O.ZERO)),this._heightReference=Object(r.a)(e.heightReference,iP.NONE),this._verticalOrigin=Object(r.a)(e.verticalOrigin,oP.CENTER),this._horizontalOrigin=Object(r.a)(e.horizontalOrigin,rP.CENTER),this._scale=Object(r.a)(e.scale,1),this._color=Hf.clone(Object(r.a)(e.color,Hf.WHITE)),this._rotation=Object(r.a)(e.rotation,0),this._alignedAxis=O.clone(Object(r.a)(e.alignedAxis,O.ZERO)),this._width=e.width,this._height=e.height,this._scaleByDistance=s,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._sizeInMeters=Object(r.a)(e.sizeInMeters,!1),this._distanceDisplayCondition=c,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=Object(r.a)(e.collection,t),this._pickId=void 0,this._pickPrimitive=Object(r.a)(e._pickPrimitive,this),this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageIndex=-1,this._imageIndexPromise=void 0,this._imageId=void 0,this._image=void 0,this._imageSubRegion=void 0,this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;var l=e.image,u=e.imageId;Object(o.a)(l)&&(Object(o.a)(u)||(u="string"===typeof l?l:Object(o.a)(l.src)?l.src:l_()),this._imageId=u,this._image=l),Object(o.a)(e.imageSubRegion)&&(this._imageId=u,this._imageSubRegion=e.imageSubRegion),Object(o.a)(this._billboardCollection._textureAtlas)&&this._loadImage(),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=IR.SCENE3D,this._clusterShow=!0,this._outlineColor=Hf.clone(Object(r.a)(e.outlineColor,Hf.BLACK)),this._outlineWidth=Object(r.a)(e.outlineWidth,0),this._updateClamping()}var wq=yq.SHOW_INDEX=0,Oq=yq.POSITION_INDEX=1,Cq=yq.PIXEL_OFFSET_INDEX=2,Eq=yq.EYE_OFFSET_INDEX=3,Aq=yq.HORIZONTAL_ORIGIN_INDEX=4,xq=yq.VERTICAL_ORIGIN_INDEX=5,Tq=yq.SCALE_INDEX=6,Sq=yq.IMAGE_INDEX_INDEX=7,Dq=yq.COLOR_INDEX=8,Pq=yq.ROTATION_INDEX=9,Iq=yq.ALIGNED_AXIS_INDEX=10,Mq=yq.SCALE_BY_DISTANCE_INDEX=11,Rq=yq.TRANSLUCENCY_BY_DISTANCE_INDEX=12,Lq=yq.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,jq=yq.DISTANCE_DISPLAY_CONDITION=14,Fq=yq.DISABLE_DEPTH_DISTANCE=15;yq.TEXTURE_COORDINATE_BOUNDS=16;var Nq=yq.SDF_INDEX=17;function zq(e,t){var n=e._billboardCollection;Object(o.a)(n)&&(n._updateBillboard(e,t),e._dirty=!0)}yq.NUMBER_OF_PROPERTIES=18,Object.defineProperties(yq.prototype,{show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._show!==e&&(this._show=e,zq(this,wq))}},position:{get:function(){return this._position},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._position;O.equals(t,e)||(O.clone(e,t),O.clone(e,this._actualPosition),this._updateClamping(),zq(this,Oq))}},heightReference:{get:function(){return this._heightReference},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");e!==this._heightReference&&(this._heightReference=e,this._updateClamping(),zq(this,Oq))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._pixelOffset;Mt.equals(t,e)||(Mt.clone(e,t),zq(this,Cq))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._scaleByDistance;JC.equals(t,e)||(this._scaleByDistance=JC.clone(e,t),zq(this,Mq))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._translucencyByDistance;JC.equals(t,e)||(this._translucencyByDistance=JC.clone(e,t),zq(this,Rq))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._pixelOffsetScaleByDistance;JC.equals(t,e)||(this._pixelOffsetScaleByDistance=JC.clone(e,t),zq(this,Lq))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._eyeOffset;O.equals(t,e)||(O.clone(e,t),zq(this,Eq))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._horizontalOrigin!==e&&(this._horizontalOrigin=e,zq(this,Aq))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._verticalOrigin!==e&&(this._verticalOrigin=e,zq(this,xq))}},scale:{get:function(){return this._scale},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._scale!==e&&(this._scale=e,zq(this,Tq))}},color:{get:function(){return this._color},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._color;Hf.equals(t,e)||(Hf.clone(e,t),zq(this,Dq))}},rotation:{get:function(){return this._rotation},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._rotation!==e&&(this._rotation=e,zq(this,Pq))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._alignedAxis;O.equals(t,e)||(O.clone(e,t),zq(this,Iq))}},width:{get:function(){return Object(r.a)(this._width,this._imageWidth)},set:function(e){this._width!==e&&(this._width=e,zq(this,Sq))}},height:{get:function(){return Object(r.a)(this._height,this._imageHeight)},set:function(e){this._height!==e&&(this._height=e,zq(this,Sq))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,zq(this,Dq))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!$_.equals(e,this._distanceDisplayCondition)){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");this._distanceDisplayCondition=$_.clone(e,this._distanceDisplayCondition),zq(this,jq)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){if(Object(o.a)(e)&&e<0)throw new a.a("disableDepthTestDistance must be greater than or equal to 0.0.");this._disableDepthTestDistance=e,zq(this,Fq)}}},id:{get:function(){return this._id},set:function(e){this._id=e,Object(o.a)(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,Object(o.a)(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageId},set:function(e){Object(o.a)(e)?"string"===typeof e?this.setImage(e,e):e instanceof _t.a?this.setImage(e.url,e):Object(o.a)(e.src)?this.setImage(e.src,e):this.setImage(l_(),e):(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=void 0,this._image=void 0,this._imageIndexPromise=void 0,zq(this,Sq))}},ready:{get:function(){return-1!==this._imageIndex}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=O.clone(e,this._actualClampedPosition),zq(this,Oq)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,zq(this,wq))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._outlineColor;Hf.equals(t,e)||(Hf.clone(e,t),zq(this,Nq))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,zq(this,Nq))}}}),yq.prototype.getPickId=function(e){return Object(o.a)(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId},yq.prototype._updateClamping=function(){yq._updateClamping(this._billboardCollection,this)};var kq=new R,Bq=new O;yq._updateClamping=function(e,t){var n=e._scene;if(Object(o.a)(n)&&Object(o.a)(n.globe)){var i=n.globe,r=i.ellipsoid,s=i._surface,c=n.frameState.mode,l=c!==t._mode;if(t._mode=c,(t._heightReference===iP.NONE||l)&&Object(o.a)(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference!==iP.NONE&&Object(o.a)(t._position)){var u=r.cartesianToCartographic(t._position);if(Object(o.a)(u)){Object(o.a)(t._removeCallbackFunc)&&t._removeCallbackFunc(),t._removeCallbackFunc=s.updateHeight(u,d),R.clone(u,kq);var h=i.getHeight(u);Object(o.a)(h)&&(kq.height=h),r.cartographicToCartesian(kq,Bq),d(Bq)}else t._actualClampedPosition=void 0}}else if(t._heightReference!==iP.NONE)throw new a.a("Height reference is not supported without a scene and globe.");function d(e){if(t._heightReference===iP.RELATIVE_TO_GROUND)if(t._mode===IR.SCENE3D){var n=r.cartesianToCartographic(e,kq);n.height+=u.height,r.cartographicToCartesian(n,e)}else e.x+=u.height;t._clampedPosition=O.clone(e,t._clampedPosition)}},yq.prototype._loadImage=function(){var e,t=this._billboardCollection._textureAtlas,n=this._imageId,i=this._image,r=this._imageSubRegion;if(Object(o.a)(i)&&(e=t.addImage(n,i)),Object(o.a)(r)&&(e=t.addSubRegion(n,r)),this._imageIndexPromise=e,Object(o.a)(e)){var a=this;e.then((function(e){if(a._imageId===n&&a._image===i&&bl.equals(a._imageSubRegion,r)){var o=t.textureCoordinates[e];a._imageWidth=t.texture.width*o.width,a._imageHeight=t.texture.height*o.height,a._imageIndex=e,a._ready=!0,a._image=void 0,a._imageIndexPromise=void 0,zq(a,Sq)}})).otherwise((function(e){console.error("Error loading image for billboard: "+e),a._imageIndexPromise=void 0}))}},yq.prototype.setImage=function(e,t){if(!Object(o.a)(e))throw new a.a("id is required.");if(!Object(o.a)(t))throw new a.a("image is required.");this._imageId!==e&&(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=e,this._image=t,Object(o.a)(this._billboardCollection._textureAtlas)&&this._loadImage())},yq.prototype.setImageSubRegion=function(e,t){if(!Object(o.a)(e))throw new a.a("id is required.");if(!Object(o.a)(t))throw new a.a("subRegion is required.");this._imageId===e&&bl.equals(this._imageSubRegion,t)||(this._imageIndex=-1,this._imageId=e,this._imageSubRegion=bl.clone(t),Object(o.a)(this._billboardCollection._textureAtlas)&&this._loadImage())},yq.prototype._setTranslate=function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._translate;Mt.equals(t,e)||(Mt.clone(e,t),zq(this,Cq))},yq.prototype._getActualPosition=function(){return Object(o.a)(this._clampedPosition)?this._clampedPosition:this._actualPosition},yq.prototype._setActualPosition=function(e){Object(o.a)(this._clampedPosition)||O.clone(e,this._actualPosition),zq(this,Oq)};var Hq=new he;yq._computeActualPosition=function(e,t,n,i){return Object(o.a)(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===IR.SCENE3D?t:(Ae.multiplyByPoint(i,t,Hq),bq.computeActualWgs84Position(n,Hq))};var Vq=new O;yq._computeScreenSpacePosition=function(e,t,n,i,r,a){var s=Ae.multiplyByPoint(e,t,Vq),c=bq.wgs84WithEyeOffsetToWindowCoordinates(r,s,n,a);if(Object(o.a)(c))return Mt.add(c,i,c),c};var Uq=new Mt(0,0);yq.prototype.computeScreenSpacePosition=function(e,t){var n=this._billboardCollection;if(Object(o.a)(t)||(t=new Mt),!Object(o.a)(n))throw new a.a("Billboard must be in a collection. Was it removed?");if(!Object(o.a)(e))throw new a.a("scene is required.");Mt.clone(this._pixelOffset,Uq),Mt.add(Uq,this._translate,Uq);var i=n.modelMatrix,r=this._position;if(Object(o.a)(this._clampedPosition)&&(r=this._clampedPosition,e.mode!==IR.SCENE3D)){var s=e.mapProjection,c=s.ellipsoid,l=s.unproject(r,kq);r=c.cartographicToCartesian(l,Vq),i=Ae.IDENTITY}return yq._computeScreenSpacePosition(i,r,this._eyeOffset,Uq,e,t)},yq.getScreenSpaceBoundingBox=function(e,t,n){var i=e.width,r=e.height,a=e.scale;i*=a,r*=a;var s=t.x;e.horizontalOrigin===rP.RIGHT?s-=i:e.horizontalOrigin===rP.CENTER&&(s-=.5*i);var c=t.y;return e.verticalOrigin===oP.BOTTOM||e.verticalOrigin===oP.BASELINE?c-=r:e.verticalOrigin===oP.CENTER&&(c-=.5*r),Object(o.a)(n)||(n=new bl),n.x=s,n.y=c,n.width=i,n.height=r,n},yq.prototype.equals=function(e){return this===e||Object(o.a)(e)&&this._id===e._id&&O.equals(this._position,e._position)&&this._imageId===e._imageId&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&bl.equals(this._imageSubRegion,e._imageSubRegion)&&Hf.equals(this._color,e._color)&&Mt.equals(this._pixelOffset,e._pixelOffset)&&Mt.equals(this._translate,e._translate)&&O.equals(this._eyeOffset,e._eyeOffset)&&JC.equals(this._scaleByDistance,e._scaleByDistance)&&JC.equals(this._translucencyByDistance,e._translucencyByDistance)&&JC.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&$_.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance},yq.prototype._destroy=function(){Object(o.a)(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),Object(o.a)(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var Wq=yq,Gq=Object.freeze({OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2}),qq=Object.freeze({FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25});function Yq(e,t,n,i,o){this.bottomLeft=Object(r.a)(e,Mt.ZERO),this.topRight=Object(r.a)(t,Mt.ZERO),this.childNode1=n,this.childNode2=i,this.imageIndex=o}var $q=new Mt(16,16);function Xq(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.borderWidthInPixels,1),n=Object(r.a)(e.initialSize,$q);if(!Object(o.a)(e.context))throw new a.a("context is required.");if(t<0)throw new a.a("borderWidthInPixels must be greater than or equal to zero.");if(n.x<1||n.y<1)throw new a.a("initialSize must be greater than zero.");this._context=e.context,this._pixelFormat=Object(r.a)(e.pixelFormat,FC.RGBA),this._borderWidthInPixels=t,this._textureCoordinates=[],this._guid=l_(),this._idHash={},this._initialSize=n,this._root=void 0}function Kq(e,t,n){var i=function e(t,n,i){if(Object(o.a)(n)){if(!Object(o.a)(n.childNode1)&&!Object(o.a)(n.childNode2)){if(Object(o.a)(n.imageIndex))return;var r=n.topRight.x-n.bottomLeft.x,a=n.topRight.y-n.bottomLeft.y,s=r-i.width,c=a-i.height;if(s<0||c<0)return;if(0===s&&0===c)return n;if(s>c){n.childNode1=new Yq(new Mt(n.bottomLeft.x,n.bottomLeft.y),new Mt(n.bottomLeft.x+i.width,n.topRight.y));var l=n.bottomLeft.x+i.width+t._borderWidthInPixels;l<n.topRight.x&&(n.childNode2=new Yq(new Mt(l,n.bottomLeft.y),new Mt(n.topRight.x,n.topRight.y)))}else{n.childNode1=new Yq(new Mt(n.bottomLeft.x,n.bottomLeft.y),new Mt(n.topRight.x,n.bottomLeft.y+i.height));var u=n.bottomLeft.y+i.height+t._borderWidthInPixels;u<n.topRight.y&&(n.childNode2=new Yq(new Mt(n.bottomLeft.x,u),new Mt(n.topRight.x,n.topRight.y)))}return e(t,n.childNode1,i)}return e(t,n.childNode1,i)||e(t,n.childNode2,i)}}(e,e._root,t);if(Object(o.a)(i)){i.imageIndex=n;var r=e._texture.width,a=e._texture.height,s=i.topRight.x-i.bottomLeft.x,c=i.topRight.y-i.bottomLeft.y,l=i.bottomLeft.x/r,u=i.bottomLeft.y/a,h=s/r,d=c/a;e._textureCoordinates[n]=new bl(l,u,h,d),e._texture.copyFrom(t,i.bottomLeft.x,i.bottomLeft.y)}else!function(e,t){var n=e._context,i=e.numberOfImages,r=e._borderWidthInPixels;if(i>0){for(var a=e._texture.width,s=e._texture.height,c=2*(a+t.width+r),l=2*(s+t.height+r),u=a/c,h=s/l,d=new Yq(new Mt(a+r,r),new Mt(c,s)),f=new Yq(new Mt,new Mt(c,s),e._root,d),p=new Yq(new Mt(r,s+r),new Mt(c,l)),m=new Yq(new Mt,new Mt(c,l),f,p),g=0;g<e._textureCoordinates.length;g++){var v=e._textureCoordinates[g];Object(o.a)(v)&&(v.x*=u,v.y*=h,v.width*=u,v.height*=h)}var _=new nI({context:e._context,width:c,height:l,pixelFormat:e._pixelFormat}),b=new DG({context:n,colorTextures:[e._texture],destroyAttachments:!1});b._bind(),_.copyFromFramebuffer(0,0,0,0,c,l),b._unBind(),b.destroy(),e._texture=e._texture&&e._texture.destroy(),e._texture=_,e._root=m}else{var y=2*(t.width+2*r),w=2*(t.height+2*r);y<e._initialSize.x&&(y=e._initialSize.x),w<e._initialSize.y&&(w=e._initialSize.y),e._texture=e._texture&&e._texture.destroy(),e._texture=new nI({context:e._context,width:y,height:w,pixelFormat:e._pixelFormat}),e._root=new Yq(new Mt(r,r),new Mt(y,w))}}(e,t),Kq(e,t,n);e._guid=l_()}Object.defineProperties(Xq.prototype,{borderWidthInPixels:{get:function(){return this._borderWidthInPixels}},textureCoordinates:{get:function(){return this._textureCoordinates}},texture:{get:function(){return Object(o.a)(this._texture)||(this._texture=new nI({context:this._context,width:this._initialSize.x,height:this._initialSize.y,pixelFormat:this._pixelFormat})),this._texture}},numberOfImages:{get:function(){return this._textureCoordinates.length}},guid:{get:function(){return this._guid}}}),Xq.prototype.addImage=function(e,t){if(!Object(o.a)(e))throw new a.a("id is required.");if(!Object(o.a)(t))throw new a.a("image is required.");var n=this._idHash[e];if(Object(o.a)(n))return n;if("function"===typeof t){if(t=t(e),!Object(o.a)(t))throw new a.a("image is required.")}else if("string"===typeof t||t instanceof _t.a){t=_t.a.createIfNeeded(t).fetchImage()}var i=this;return n=Object(Yt.a)(t,(function(e){if(i.isDestroyed())return-1;var t=i.numberOfImages;return Kq(i,e,t),t})),this._idHash[e]=n,n},Xq.prototype.addSubRegion=function(e,t){if(!Object(o.a)(e))throw new a.a("id is required.");if(!Object(o.a)(t))throw new a.a("subRegion is required.");var n=this._idHash[e];if(!Object(o.a)(n))throw new de.a('image with id "'+e+'" not found in the atlas.');var i=this;return Object(Yt.a)(n,(function(e){if(-1===e)return-1;var n=i._texture.width,r=i._texture.height,o=i.numberOfImages,a=i._textureCoordinates[e],s=a.x+t.x/n,c=a.y+t.y/r,l=t.width/n,u=t.height/r;return i._textureCoordinates.push(new bl(s,c,l,u)),i._guid=l_(),o}))},Xq.prototype.isDestroyed=function(){return!1},Xq.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),Ks(this)};var Qq,Zq,Jq=Xq,eY=Wq.SHOW_INDEX,tY=Wq.POSITION_INDEX,nY=Wq.PIXEL_OFFSET_INDEX,iY=Wq.EYE_OFFSET_INDEX,rY=Wq.HORIZONTAL_ORIGIN_INDEX,oY=Wq.VERTICAL_ORIGIN_INDEX,aY=Wq.SCALE_INDEX,sY=Wq.IMAGE_INDEX_INDEX,cY=Wq.COLOR_INDEX,lY=Wq.ROTATION_INDEX,uY=Wq.ALIGNED_AXIS_INDEX,hY=Wq.SCALE_BY_DISTANCE_INDEX,dY=Wq.TRANSLUCENCY_BY_DISTANCE_INDEX,fY=Wq.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,pY=Wq.DISTANCE_DISPLAY_CONDITION,mY=Wq.DISABLE_DEPTH_DISTANCE,gY=Wq.TEXTURE_COORDINATE_BOUNDS,vY=Wq.SDF_INDEX,_Y=Wq.NUMBER_OF_PROPERTIES,bY={positionHighAndScale:0,positionLowAndRotation:1,compressedAttribute0:2,compressedAttribute1:3,compressedAttribute2:4,eyeOffset:5,scaleByDistance:6,pixelOffsetScaleByDistance:7,compressedAttribute3:8,textureCoordinateBoundsOrLabelTranslate:9,a_batchId:10,sdf:11},yY={direction:0,positionHighAndScale:1,positionLowAndRotation:2,compressedAttribute0:3,compressedAttribute1:4,compressedAttribute2:5,eyeOffset:6,scaleByDistance:7,pixelOffsetScaleByDistance:8,compressedAttribute3:9,textureCoordinateBoundsOrLabelTranslate:10,a_batchId:11,sdf:12};function wY(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._scene=e.scene,this._batchTable=e.batchTable,this._textureAtlas=void 0,this._textureAtlasGUID=void 0,this._destroyTextureAtlas=!0,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!1,this._shaderRotation=!1,this._compiledShaderRotation=!1,this._shaderAlignedAxis=!1,this._compiledShaderAlignedAxis=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderPixelOffsetScaleByDistance=!1,this._compiledShaderPixelOffsetScaleByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._shaderClampToGround=!1,this._compiledShaderClampToGround=!1,this._propertiesChanged=new Uint32Array(_Y),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new gt,this._baseVolumeWC=new gt,this._baseVolume2D=new gt,this._boundingVolume=new gt,this._boundingVolumeDirty=!1,this._colorCommands=[],this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=Ae.clone(Ae.IDENTITY),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.debugShowTextureAtlas=Object(r.a)(e.debugShowTextureAtlas,!1),this.blendOption=Object(r.a)(e.blendOption,Gq.OPAQUE_AND_TRANSLUCENT),this._blendOption=void 0,this._mode=IR.SCENE3D,this._buffersUsage=[iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW],this._highlightColor=Hf.clone(Hf.WHITE);var t=this;this._uniforms={u_atlas:function(){return t._textureAtlas.texture},u_highlightColor:function(){return t._highlightColor}};var n=this._scene;Object(o.a)(n)&&Object(o.a)(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener((function(){for(var e=this._billboards,t=e.length,n=0;n<t;++n)Object(o.a)(e[n])&&e[n]._updateClamping()}),this))}function OY(e){for(var t=e.length,n=0;n<t;++n)e[n]&&e[n]._destroy()}function CY(e){if(e._billboardsRemoved){e._billboardsRemoved=!1;for(var t=[],n=e._billboards,i=n.length,r=0,o=0;r<i;++r){var a=n[r];a&&(a._index=o++,t.push(a))}e._billboards=t}}function EY(e){var t=e.cache.billboardCollection_indexBufferBatched;if(Object(o.a)(t))return t;for(var n=new Uint16Array(98298),i=0,r=0;i<98298;i+=6,r+=4)n[i]=r,n[i+1]=r+1,n[i+2]=r+2,n[i+3]=r+0,n[i+4]=r+2,n[i+5]=r+3;return(t=oR.createIndexBuffer({context:e,typedArray:n,usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT})).vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferBatched=t,t}function AY(e){var t=e.cache.billboardCollection_indexBufferInstanced;return Object(o.a)(t)||((t=oR.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT})).vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function xY(e){var t=e.cache.billboardCollection_vertexBufferInstanced;return Object(o.a)(t)||((t=oR.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:iR.STATIC_DRAW})).vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}Object.defineProperties(wY.prototype,{length:{get:function(){return CY(this),this._billboards.length}},textureAtlas:{get:function(){return this._textureAtlas},set:function(e){this._textureAtlas!==e&&(this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._textureAtlas=e,this._createVertexArray=!0)}},destroyTextureAtlas:{get:function(){return this._destroyTextureAtlas},set:function(e){this._destroyTextureAtlas=e}}}),wY.prototype.add=function(e){var t=new Wq(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t},wY.prototype.remove=function(e){return!!this.contains(e)&&(this._billboards[e._index]=null,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0)},wY.prototype.removeAll=function(){OY(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0},wY.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]},wY.prototype.contains=function(e){return Object(o.a)(e)&&e._billboardCollection===this},wY.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return CY(this),this._billboards[e]},wY.prototype.computeNewBuffersUsage=function(){for(var e=this._buffersUsage,t=!1,n=this._propertiesChanged,i=0;i<_Y;++i){var r=0===n[i]?iR.STATIC_DRAW:iR.STREAM_DRAW;t=t||e[i]!==r,e[i]=r}return t};var TY=new vh;function SY(e,t,n,i,r){var o,a=i[Qq.positionHighAndScale],s=i[Qq.positionLowAndRotation],c=r._getActualPosition();e._mode===IR.SCENE3D&&(gt.expand(e._baseVolume,c,e._baseVolume),e._boundingVolumeDirty=!0),vh.fromCartesian(c,TY);var l=r.scale,u=r.rotation;0!==u&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,l);var h=TY.high,d=TY.low;e._instanced?(a(o=r._index,h.x,h.y,h.z,l),s(o,d.x,d.y,d.z,u)):(a((o=4*r._index)+0,h.x,h.y,h.z,l),a(o+1,h.x,h.y,h.z,l),a(o+2,h.x,h.y,h.z,l),a(o+3,h.x,h.y,h.z,l),s(o+0,d.x,d.y,d.z,u),s(o+1,d.x,d.y,d.z,u),s(o+2,d.x,d.y,d.z,u),s(o+3,d.x,d.y,d.z,u))}var DY=new Mt;function PY(e,t,n,i,r){var s,c=i[Qq.compressedAttribute0],l=r.pixelOffset,u=l.x,h=l.y,f=r._translate,p=f.x,m=f.y;e._maxPixelOffset=Math.max(e._maxPixelOffset,Math.abs(u+p),Math.abs(-h+m));var g=r.horizontalOrigin,v=r._verticalOrigin,_=r.show&&r.clusterShow;0===r.color.alpha&&(_=!1),v===oP.BASELINE&&(v=oP.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&g===rP.CENTER,e._allVerticalCenter=e._allVerticalCenter&&v===oP.CENTER;var b=0,y=0,w=0,O=0,C=r._imageIndex;if(-1!==C){var E=n[C];if(!Object(o.a)(E))throw new a.a("Invalid billboard image index: "+C);b=E.x,y=E.y,w=E.width,O=E.height}var A=b+w,x=y+O,T=128*Math.floor(d.clamp(u,-32768,32768)+32768);T+=32*(g+1),T+=8*(v+1),T+=4*(_?1:0);var S=256*Math.floor(d.clamp(h,-32768,32768)+32768),D=256*Math.floor(d.clamp(p,-32768,32768)+32768),P=(d.clamp(m,-32768,32768)+32768)*(1/256),I=Math.floor(P);S+=I,D+=Math.floor(256*(P-I)),DY.x=b,DY.y=y;var M=xs.compressTextureCoordinates(DY);DY.x=A;var R=xs.compressTextureCoordinates(DY);DY.y=x;var L=xs.compressTextureCoordinates(DY);DY.x=b;var j=xs.compressTextureCoordinates(DY);e._instanced?c(s=r._index,T,S,D,M):(c((s=4*r._index)+0,T+0,S,D,M),c(s+1,T+2,S,D,R),c(s+2,T+3,S,D,L),c(s+3,T+1,S,D,j))}function IY(e,t,n,i,s){var c,l=i[Qq.compressedAttribute1],u=s.alignedAxis;O.equals(u,O.ZERO)||(e._shaderAlignedAxis=!0);var h=0,f=1,p=1,m=1,g=s.translucencyByDistance;Object(o.a)(g)&&(h=g.near,f=g.nearValue,p=g.far,m=g.farValue,1===f&&1===m||(e._shaderTranslucencyByDistance=!0));var v=0,_=s._imageIndex;if(-1!==_){var b=n[_];if(!Object(o.a)(b))throw new a.a("Invalid billboard image index: "+_);v=b.width}var y=e._textureAtlas.texture.width,w=Math.round(Object(r.a)(s.width,y*v));e._maxSize=Math.max(e._maxSize,w);var C=d.clamp(w,0,65536),E=0;Math.abs(O.magnitudeSquared(u)-1)<d.EPSILON6&&(E=xs.octEncodeFloat(u)),C=256*C+(f=1===(f=d.clamp(f,0,1))?255:255*f|0),E=256*E+(m=1===(m=d.clamp(m,0,1))?255:255*m|0),e._instanced?l(c=s._index,C,E,h,p):(l((c=4*s._index)+0,C,E,h,p),l(c+1,C,E,h,p),l(c+2,C,E,h,p),l(c+3,C,E,h,p))}function MY(e,t,n,i,s){var c,l=i[Qq.compressedAttribute2],u=s.color,h=Object(o.a)(e._batchTable)?Hf.WHITE:s.getPickId(t.context).color,f=s.sizeInMeters?1:0,p=Math.abs(O.magnitudeSquared(s.alignedAxis)-1)<d.EPSILON6?1:0;e._allSizedInMeters=e._allSizedInMeters&&1===f;var m=0,g=s._imageIndex;if(-1!==g){var v=n[g];if(!Object(o.a)(v))throw new a.a("Invalid billboard image index: "+g);m=v.height}var _=e._textureAtlas.texture.dimensions,b=Math.round(Object(r.a)(s.height,_.y*m));e._maxSize=Math.max(e._maxSize,b);var y=Object(r.a)(s._labelHorizontalOrigin,-2),w=4*b+(y+=2),C=Hf.floatToByte(u.red),E=Hf.floatToByte(u.green),A=Hf.floatToByte(u.blue),x=65536*C+256*E+A,T=65536*(C=Hf.floatToByte(h.red))+256*(E=Hf.floatToByte(h.green))+(A=Hf.floatToByte(h.blue)),S=65536*Hf.floatToByte(u.alpha)+256*Hf.floatToByte(h.alpha);S+=2*f+p,e._instanced?l(c=s._index,x,T,S,w):(l((c=4*s._index)+0,x,T,S,w),l(c+1,x,T,S,w),l(c+2,x,T,S,w),l(c+3,x,T,S,w))}function RY(e,t,n,i,r){var s,c=i[Qq.eyeOffset],l=r.eyeOffset,u=l.z;if(r._heightReference!==iP.NONE&&(u*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(l.x),Math.abs(l.y),Math.abs(u)),e._instanced){var h=0,d=0,f=r._imageIndex;if(-1!==f){var p=n[f];if(!Object(o.a)(p))throw new a.a("Invalid billboard image index: "+f);h=p.width,d=p.height}DY.x=h,DY.y=d;var m=xs.compressTextureCoordinates(DY);c(s=r._index,l.x,l.y,u,m)}else c((s=4*r._index)+0,l.x,l.y,u,0),c(s+1,l.x,l.y,u,0),c(s+2,l.x,l.y,u,0),c(s+3,l.x,l.y,u,0)}function LY(e,t,n,i,r){var a,s=i[Qq.scaleByDistance],c=0,l=1,u=1,h=1,d=r.scaleByDistance;Object(o.a)(d)&&(c=d.near,l=d.nearValue,u=d.far,h=d.farValue,1===l&&1===h||(e._shaderScaleByDistance=!0)),e._instanced?s(a=r._index,c,l,u,h):(s((a=4*r._index)+0,c,l,u,h),s(a+1,c,l,u,h),s(a+2,c,l,u,h),s(a+3,c,l,u,h))}function jY(e,t,n,i,r){var a,s=i[Qq.pixelOffsetScaleByDistance],c=0,l=1,u=1,h=1,d=r.pixelOffsetScaleByDistance;Object(o.a)(d)&&(c=d.near,l=d.nearValue,u=d.far,h=d.farValue,1===l&&1===h||(e._shaderPixelOffsetScaleByDistance=!0)),e._instanced?s(a=r._index,c,l,u,h):(s((a=4*r._index)+0,c,l,u,h),s(a+1,c,l,u,h),s(a+2,c,l,u,h),s(a+3,c,l,u,h))}function FY(e,t,n,i,s){var c,l=i[Qq.compressedAttribute3],u=0,h=Number.MAX_VALUE,f=s.distanceDisplayCondition;Object(o.a)(f)&&(u=f.near,h=f.far,u*=u,h*=h,e._shaderDistanceDisplayCondition=!0);var p,m,g=s.disableDepthTestDistance,v=s.heightReference===iP.CLAMP_TO_GROUND&&t.context.depthTexture;if(Object(o.a)(g)||(g=v?5e3:0),g*=g,(v||g>0)&&(e._shaderDisableDepthDistance=!0,g===Number.POSITIVE_INFINITY&&(g=-1)),Object(o.a)(s._labelDimensions))m=s._labelDimensions.x,p=s._labelDimensions.y;else{var _=0,b=0,y=s._imageIndex;if(-1!==y){var w=n[y];if(!Object(o.a)(w))throw new a.a("Invalid billboard image index: "+y);_=w.height,b=w.width}p=Math.round(Object(r.a)(s.height,e._textureAtlas.texture.dimensions.y*_));var O=e._textureAtlas.texture.width;m=Math.round(Object(r.a)(s.width,O*b))}var C=4096*Math.floor(d.clamp(m,0,4096))+Math.floor(d.clamp(p,0,4096));e._instanced?l(c=s._index,u,h,g,C):(l((c=4*s._index)+0,u,h,g,C),l(c+1,u,h,g,C),l(c+2,u,h,g,C),l(c+3,u,h,g,C))}function NY(e,t,n,i,r){if(r.heightReference===iP.CLAMP_TO_GROUND){var s=e._scene,c=t.context,l=t.globeTranslucencyState.translucent,u=Object(o.a)(s.globe)&&s.globe.depthTestAgainstTerrain;e._shaderClampToGround=c.depthTexture&&!l&&u}var h,d=i[Qq.textureCoordinateBoundsOrLabelTranslate];if(BP.maximumVertexTextureImageUnits>0){var f=0,p=0;return Object(o.a)(r._labelTranslate)&&(f=r._labelTranslate.x,p=r._labelTranslate.y),void(e._instanced?d(h=r._index,f,p,0,0):(d((h=4*r._index)+0,f,p,0,0),d(h+1,f,p,0,0),d(h+2,f,p,0,0),d(h+3,f,p,0,0)))}var m=0,g=0,v=0,_=0,b=r._imageIndex;if(-1!==b){var y=n[b];if(!Object(o.a)(y))throw new a.a("Invalid billboard image index: "+b);m=y.x,g=y.y,v=y.width,_=y.height}var w=m+v,O=g+_;e._instanced?d(h=r._index,m,g,w,O):(d((h=4*r._index)+0,m,g,w,O),d(h+1,m,g,w,O),d(h+2,m,g,w,O),d(h+3,m,g,w,O))}function zY(e,t,n,i,r){if(e._sdf){var o,a=i[Qq.sdf],s=r.outlineColor,c=r.outlineWidth,l=65536*Hf.floatToByte(s.red)+256*Hf.floatToByte(s.green)+Hf.floatToByte(s.blue),u=c/qq.RADIUS,h=65536*Hf.floatToByte(s.alpha)+256*Hf.floatToByte(u);e._instanced?a(o=r._index,l,h):(a((o=4*r._index)+0,l+0,h),a(o+1,l+2,h),a(o+2,l+3,h),a(o+3,l+1,h))}}function kY(e,t,n,i,r){SY(e,0,0,i,r),PY(e,0,n,i,r),IY(e,0,n,i,r),MY(e,t,n,i,r),RY(e,0,n,i,r),LY(e,0,0,i,r),jY(e,0,0,i,r),FY(e,t,n,i,r),NY(e,t,n,i,r),function(e,t,n,i,r){if(Object(o.a)(e._batchTable)){var a,s=i[Qq.a_batchId],c=r._batchIndex;e._instanced?s(a=r._index,c):(s((a=4*r._index)+0,c),s(a+1,c),s(a+2,c),s(a+3,c))}}(e,0,0,i,r),zY(e,0,0,i,r)}function BY(e,t,n,i,r,a){var s;i.mode===IR.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;for(var c=[],l=0;l<n;++l){var u=t[l],h=u.position,d=Wq._computeActualPosition(u,h,i,r);Object(o.a)(d)&&(u._setActualPosition(d),a?c.push(d):gt.expand(s,d,s))}a&>.fromPoints(c,s)}var HY=[];wY.prototype.update=function(e){CY(this);var t=this._billboards,n=t.length,i=e.context;this._instanced=i.instancedArrays,Qq=this._instanced?yY:bY,Zq=this._instanced?AY:EY;var r=this._textureAtlas;if(!Object(o.a)(r)){r=this._textureAtlas=new Jq({context:i});for(var a=0;a<n;++a)t[a]._loadImage()}var s=r.textureCoordinates;if(0!==s.length){!function(e,t){var n=t.mode,i=e._billboards,r=e._billboardsToUpdate,o=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==IR.SCENE3D&&!Ae.equals(o,e.modelMatrix)?(e._mode=n,Ae.clone(e.modelMatrix,o),e._createVertexArray=!0,n!==IR.SCENE3D&&n!==IR.SCENE2D&&n!==IR.COLUMBUS_VIEW||BY(e,i,i.length,t,o,!0)):n===IR.MORPHING?BY(e,i,i.length,t,o,!0):n!==IR.SCENE2D&&n!==IR.COLUMBUS_VIEW||BY(e,r,e._billboardsToUpdateIndex,t,o,!1)}(this,e),n=(t=this._billboards).length;var c,l=this._billboardsToUpdate,u=this._billboardsToUpdateIndex,h=this._propertiesChanged,d=r.guid,f=this._createVertexArray||this._textureAtlasGUID!==d;this._textureAtlasGUID=d;var p=e.passes,m=p.pick;if(f||!m&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(var g=0;g<_Y;++g)h[g]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=function(e,t,n,i,r,a){var s=[{index:Qq.positionHighAndScale,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[tY]},{index:Qq.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[tY]},{index:Qq.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[nY]},{index:Qq.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[dY]},{index:Qq.compressedAttribute2,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[cY]},{index:Qq.eyeOffset,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[iY]},{index:Qq.scaleByDistance,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[hY]},{index:Qq.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[fY]},{index:Qq.compressedAttribute3,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[pY]},{index:Qq.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[gY]}];return i&&s.push({index:Qq.direction,componentsPerAttribute:2,componentDatatype:Ds.FLOAT,vertexBuffer:xY(e)}),Object(o.a)(r)&&s.push({index:Qq.a_batchId,componentsPerAttribute:1,componentDatatype:Ds.FLOAT,bufferUsage:iR.STATIC_DRAW}),a&&s.push({index:Qq.sdf,componentsPerAttribute:2,componentDatatype:Ds.FLOAT,usage:n[vY]}),new JG(e,s,i?t:4*t,i)}(i,n,this._buffersUsage,this._instanced,this._batchTable,this._sdf),c=this._vaf.writers;for(var v=0;v<n;++v){var _=this._billboards[v];_._dirty=!1,kY(this,e,s,c,_)}this._vaf.commit(Zq(i))}this._billboardsToUpdateIndex=0}else if(u>0){var b=HY;b.length=0,(h[tY]||h[lY]||h[aY])&&b.push(SY),(h[sY]||h[nY]||h[rY]||h[oY]||h[eY])&&(b.push(PY),this._instanced&&b.push(RY)),(h[sY]||h[uY]||h[dY])&&(b.push(IY),b.push(MY)),(h[sY]||h[cY])&&b.push(MY),h[iY]&&b.push(RY),h[hY]&&b.push(LY),h[fY]&&b.push(jY),(h[pY]||h[mY]||h[sY]||h[tY])&&b.push(FY),(h[sY]||h[tY])&&b.push(NY),h[vY]&&b.push(zY);var y=b.length;if(c=this._vaf.writers,u/n>.1){for(var w=0;w<u;++w){var O=l[w];O._dirty=!1;for(var C=0;C<y;++C)b[C](this,e,s,c,O)}this._vaf.commit(Zq(i))}else{for(var E=0;E<u;++E){var A=l[E];A._dirty=!1;for(var x=0;x<y;++x)b[x](this,e,s,c,A);this._instanced?this._vaf.subCommit(A._index,1):this._vaf.subCommit(4*A._index,4)}this._vaf.endSubCommits()}this._billboardsToUpdateIndex=0}if(u>1.5*n&&(l.length=n),Object(o.a)(this._vaf)&&Object(o.a)(this._vaf.va)){var T;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,gt.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));var S=Ae.IDENTITY;e.mode===IR.SCENE3D?(S=this.modelMatrix,T=gt.clone(this._baseVolumeWC,this._boundingVolume)):T=gt.clone(this._baseVolume2D,this._boundingVolume),function(e,t,n){var i=1;e._allSizedInMeters&&0===e._maxPixelOffset||(i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight));var r=i*e._maxScale*e._maxSize*2;e._allHorizontalCenter&&e._allVerticalCenter&&(r*=.5);var o=i*e._maxPixelOffset+e._maxEyeOffset;n.radius+=r+o}(this,e,T);var D,P,I,M,R,L=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,L){this._blendOption===Gq.OPAQUE||this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=XI.fromCache({depthTest:{enabled:!0,func:Ts.LESS},depthMask:!0}):this._rsOpaque=void 0;var j=this._blendOption===Gq.TRANSLUCENT;this._blendOption===Gq.TRANSLUCENT||this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=XI.fromCache({depthTest:{enabled:!0,func:j?Ts.LEQUAL:Ts.LESS},depthMask:j,blending:LP.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||0!==e.minimumDisableDepthTestDistance;var F=BP.maximumVertexTextureImageUnits>0;if(L||this._shaderRotation!==this._compiledShaderRotation||this._shaderAlignedAxis!==this._compiledShaderAlignedAxis||this._shaderScaleByDistance!==this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance!==this._compiledShaderTranslucencyByDistance||this._shaderPixelOffsetScaleByDistance!==this._compiledShaderPixelOffsetScaleByDistance||this._shaderDistanceDisplayCondition!==this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance||this._shaderClampToGround!==this._compiledShaderClampToGround||this._sdf!==this._compiledSDF){D="#ifdef INSTANCED\nattribute vec2 direction;\n#endif\nattribute vec4 positionHighAndScale;\nattribute vec4 positionLowAndRotation;\nattribute vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset)\nattribute vec4 compressedAttribute1; // aligned axis, translucency by distance, image width\nattribute vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free\nattribute vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range)\nattribute vec4 scaleByDistance; // near, nearScale, far, farScale\nattribute vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale\nattribute vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistance, dimensions\nattribute vec2 sdf; // sdf outline color (rgb) and width (w)\n#if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)\nattribute vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates\n#endif\n#ifdef VECTOR_TILE\nattribute float a_batchId;\n#endif\n\nvarying vec2 v_textureCoordinates;\n#ifdef FRAGMENT_DEPTH_CHECK\nvarying vec4 v_textureCoordinateBounds;\nvarying vec4 v_originTextureCoordinateAndTranslate;\nvarying vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\nvarying mat2 v_rotationMatrix;\n#endif\n\nvarying vec4 v_pickColor;\nvarying vec4 v_color;\n#ifdef SDF\nvarying vec4 v_outlineColor;\nvarying float v_outlineWidth;\n#endif\n\nconst float UPPER_BOUND = 32768.0;\n\nconst float SHIFT_LEFT16 = 65536.0;\nconst float SHIFT_LEFT12 = 4096.0;\nconst float SHIFT_LEFT8 = 256.0;\nconst float SHIFT_LEFT7 = 128.0;\nconst float SHIFT_LEFT5 = 32.0;\nconst float SHIFT_LEFT3 = 8.0;\nconst float SHIFT_LEFT2 = 4.0;\nconst float SHIFT_LEFT1 = 2.0;\n\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\nconst float SHIFT_RIGHT7 = 1.0 / 128.0;\nconst float SHIFT_RIGHT5 = 1.0 / 32.0;\nconst float SHIFT_RIGHT3 = 1.0 / 8.0;\nconst float SHIFT_RIGHT2 = 1.0 / 4.0;\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\n\nvec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp)\n{\n // Note the halfSize cannot be computed in JavaScript because it is sent via\n // compressed vertex attributes that coerce it to an integer.\n vec2 halfSize = imageSize * scale * 0.5;\n halfSize *= ((direction * 2.0) - 1.0);\n\n vec2 originTranslate = origin * abs(halfSize);\n\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\n if (validAlignedAxis || rotation != 0.0)\n {\n float angle = rotation;\n if (validAlignedAxis)\n {\n vec4 projectedAlignedAxis = czm_modelViewProjection * vec4(alignedAxis, 0.0);\n angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) /\n (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y));\n }\n\n float cosTheta = cos(angle);\n float sinTheta = sin(angle);\n rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);\n halfSize = rotationMatrix * halfSize;\n }\n else\n {\n rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\n }\n#endif\n\n mpp = czm_metersPerPixel(positionEC);\n positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp);\n positionEC.xy += (translate + pixelOffset) * mpp;\n\n return positionEC;\n}\n\n#ifdef VERTEX_DEPTH_CHECK\nfloat getGlobeDepth(vec4 positionEC)\n{\n vec4 posWC = czm_eyeToWindowCoordinates(positionEC);\n\n float globeDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, posWC.xy / czm_viewport.zw));\n\n if (globeDepth == 0.0)\n {\n return 0.0; // not on the globe\n }\n\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth);\n return eyeCoordinate.z / eyeCoordinate.w;\n}\n#endif\nvoid main()\n{\n // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition\n\n // unpack attributes\n vec3 positionHigh = positionHighAndScale.xyz;\n vec3 positionLow = positionLowAndRotation.xyz;\n float scale = positionHighAndScale.w;\n\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\n float rotation = positionLowAndRotation.w;\n#else\n float rotation = 0.0;\n#endif\n\n float compressed = compressedAttribute0.x;\n\n vec2 pixelOffset;\n pixelOffset.x = floor(compressed * SHIFT_RIGHT7);\n compressed -= pixelOffset.x * SHIFT_LEFT7;\n pixelOffset.x -= UPPER_BOUND;\n\n vec2 origin;\n origin.x = floor(compressed * SHIFT_RIGHT5);\n compressed -= origin.x * SHIFT_LEFT5;\n\n origin.y = floor(compressed * SHIFT_RIGHT3);\n compressed -= origin.y * SHIFT_LEFT3;\n\n#ifdef FRAGMENT_DEPTH_CHECK\n vec2 depthOrigin = origin.xy;\n#endif\n origin -= vec2(1.0);\n\n float show = floor(compressed * SHIFT_RIGHT2);\n compressed -= show * SHIFT_LEFT2;\n\n#ifdef INSTANCED\n vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w);\n vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w);\n vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange;\n#else\n vec2 direction;\n direction.x = floor(compressed * SHIFT_RIGHT1);\n direction.y = compressed - direction.x * SHIFT_LEFT1;\n\n vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w);\n#endif\n\n float temp = compressedAttribute0.y * SHIFT_RIGHT8;\n pixelOffset.y = -(floor(temp) - UPPER_BOUND);\n\n vec2 translate;\n translate.y = (temp - floor(temp)) * SHIFT_LEFT16;\n\n temp = compressedAttribute0.z * SHIFT_RIGHT8;\n translate.x = floor(temp) - UPPER_BOUND;\n\n translate.y += (temp - floor(temp)) * SHIFT_LEFT8;\n translate.y -= UPPER_BOUND;\n\n temp = compressedAttribute1.x * SHIFT_RIGHT8;\n float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2);\n\n vec2 imageSize = vec2(floor(temp), temp2);\n\n#ifdef FRAGMENT_DEPTH_CHECK\n float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));\n float applyTranslate = 0.0;\n if (labelHorizontalOrigin != 0.0) // is a billboard, so set apply translate to false\n {\n applyTranslate = 1.0;\n labelHorizontalOrigin -= 2.0;\n depthOrigin.x = labelHorizontalOrigin + 1.0;\n }\n\n depthOrigin = vec2(1.0) - (depthOrigin * 0.5);\n#endif\n\n#ifdef EYE_DISTANCE_TRANSLUCENCY\n vec4 translucencyByDistance;\n translucencyByDistance.x = compressedAttribute1.z;\n translucencyByDistance.z = compressedAttribute1.w;\n\n translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\n\n temp = compressedAttribute1.y * SHIFT_RIGHT8;\n translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\n#endif\n\n#if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)\n temp = compressedAttribute3.w;\n temp = temp * SHIFT_RIGHT12;\n\n vec2 dimensions;\n dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\n dimensions.x = floor(temp);\n#endif\n\n#ifdef ALIGNED_AXIS\n vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8));\n temp = compressedAttribute2.z * SHIFT_RIGHT5;\n bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0;\n#else\n vec3 alignedAxis = vec3(0.0);\n bool validAlignedAxis = false;\n#endif\n\n vec4 pickColor;\n vec4 color;\n\n temp = compressedAttribute2.y;\n temp = temp * SHIFT_RIGHT8;\n pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n pickColor.r = floor(temp);\n\n temp = compressedAttribute2.x;\n temp = temp * SHIFT_RIGHT8;\n color.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n color.g = (temp - floor(temp)) * SHIFT_LEFT8;\n color.r = floor(temp);\n\n temp = compressedAttribute2.z * SHIFT_RIGHT8;\n bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0;\n temp = floor(temp) * SHIFT_RIGHT8;\n\n pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\n pickColor /= 255.0;\n\n color.a = floor(temp);\n color /= 255.0;\n\n ///////////////////////////////////////////////////////////////////////////\n\n vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n vec4 positionEC = czm_modelViewRelativeToEye * p;\n\n#if defined(FRAGMENT_DEPTH_CHECK) || defined(VERTEX_DEPTH_CHECK)\n float eyeDepth = positionEC.z;\n#endif\n\n positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz);\n positionEC.xyz *= show;\n\n ///////////////////////////////////////////////////////////////////////////\n\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\n float lengthSq;\n if (czm_sceneMode == czm_sceneMode2D)\n {\n // 2D camera distance is a special case\n // treat all billboards as flattened to the z=0.0 plane\n lengthSq = czm_eyeHeight2D.y;\n }\n else\n {\n lengthSq = dot(positionEC.xyz, positionEC.xyz);\n }\n#endif\n\n#ifdef EYE_DISTANCE_SCALING\n float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq);\n scale *= distanceScale;\n translate *= distanceScale;\n // push vertex behind near plane for clipping\n if (scale == 0.0)\n {\n positionEC.xyz = vec3(0.0);\n }\n#endif\n\n float translucency = 1.0;\n#ifdef EYE_DISTANCE_TRANSLUCENCY\n translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\n // push vertex behind near plane for clipping\n if (translucency == 0.0)\n {\n positionEC.xyz = vec3(0.0);\n }\n#endif\n\n#ifdef EYE_DISTANCE_PIXEL_OFFSET\n float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq);\n pixelOffset *= pixelOffsetScale;\n#endif\n\n#ifdef DISTANCE_DISPLAY_CONDITION\n float nearSq = compressedAttribute3.x;\n float farSq = compressedAttribute3.y;\n if (lengthSq < nearSq || lengthSq > farSq)\n {\n positionEC.xyz = vec3(0.0);\n }\n#endif\n\n mat2 rotationMatrix;\n float mpp;\n\n#ifdef DISABLE_DEPTH_DISTANCE\n float disableDepthTestDistance = compressedAttribute3.z;\n#endif\n\n#ifdef VERTEX_DEPTH_CHECK\nif (lengthSq < disableDepthTestDistance) {\n float depthsilon = 10.0;\n\n vec2 labelTranslate = textureCoordinateBoundsOrLabelTranslate.xy;\n vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\n float globeDepth1 = getGlobeDepth(pEC1);\n\n if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1)\n {\n vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\n float globeDepth2 = getGlobeDepth(pEC2);\n\n if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2)\n {\n vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\n float globeDepth3 = getGlobeDepth(pEC3);\n if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3)\n {\n positionEC.xyz = vec3(0.0);\n }\n }\n }\n}\n#endif\n\n positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\n gl_Position = czm_projection * positionEC;\n v_textureCoordinates = textureCoordinates;\n\n#ifdef LOG_DEPTH\n czm_vertexLogDepth();\n#endif\n\n#ifdef DISABLE_DEPTH_DISTANCE\n if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\n {\n disableDepthTestDistance = czm_minimumDisableDepthTestDistance;\n }\n\n if (disableDepthTestDistance != 0.0)\n {\n // Don't try to \"multiply both sides\" by w. Greater/less-than comparisons won't work for negative values of w.\n float zclip = gl_Position.z / gl_Position.w;\n bool clipped = (zclip < -1.0 || zclip > 1.0);\n if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))\n {\n // Position z on the near plane.\n gl_Position.z = -gl_Position.w;\n#ifdef LOG_DEPTH\n v_depthFromNearPlusOne = 1.0;\n#endif\n }\n }\n#endif\n\n#ifdef FRAGMENT_DEPTH_CHECK\n if (sizeInMeters) {\n translate /= mpp;\n dimensions /= mpp;\n imageSize /= mpp;\n }\n\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\n v_rotationMatrix = rotationMatrix;\n#else\n v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\n#endif\n\n float enableDepthCheck = 0.0;\n if (lengthSq < disableDepthTestDistance)\n {\n enableDepthCheck = 1.0;\n }\n\n float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12));\n float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12));\n\n float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12));\n float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12));\n\n v_compressed.x = eyeDepth;\n v_compressed.y = applyTranslate * SHIFT_LEFT1 + enableDepthCheck;\n v_compressed.z = dw * SHIFT_LEFT12 + dh;\n v_compressed.w = iw * SHIFT_LEFT12 + ih;\n v_originTextureCoordinateAndTranslate.xy = depthOrigin;\n v_originTextureCoordinateAndTranslate.zw = translate;\n v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate;\n\n#endif\n\n#ifdef SDF\n vec4 outlineColor;\n float outlineWidth;\n\n temp = sdf.x;\n temp = temp * SHIFT_RIGHT8;\n outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n outlineColor.r = floor(temp);\n\n temp = sdf.y;\n temp = temp * SHIFT_RIGHT8;\n float temp3 = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8;\n outlineColor.a = floor(temp);\n outlineColor /= 255.0;\n\n v_outlineWidth = outlineWidth / 255.0;\n v_outlineColor = outlineColor;\n#endif\n\n v_pickColor = pickColor;\n\n v_color = color;\n v_color.a *= translucency;\n\n}\n",P='#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n\nuniform sampler2D u_atlas;\n\n#ifdef VECTOR_TILE\nuniform vec4 u_highlightColor;\n#endif\n\nvarying vec2 v_textureCoordinates;\nvarying vec4 v_pickColor;\nvarying vec4 v_color;\n\n#ifdef SDF\nvarying vec4 v_outlineColor;\nvarying float v_outlineWidth;\n#endif\n\n#ifdef FRAGMENT_DEPTH_CHECK\nvarying vec4 v_textureCoordinateBounds; // the min and max x and y values for the texture coordinates\nvarying vec4 v_originTextureCoordinateAndTranslate; // texture coordinate at the origin, billboard translate (used for label glyphs)\nvarying vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\nvarying mat2 v_rotationMatrix;\n\nconst float SHIFT_LEFT12 = 4096.0;\nconst float SHIFT_LEFT1 = 2.0;\n\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\n\nfloat getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize)\n{\n vec2 lookupVector = imageSize * (depthLookupST - adjustedST);\n lookupVector = v_rotationMatrix * lookupVector;\n vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle. Will be zero for billboards because dimensions and imageSize will be equal\n\n vec2 translation = v_originTextureCoordinateAndTranslate.zw;\n\n if (applyTranslate)\n {\n // this is only needed for labels where the horizontal origin is not LEFT\n // it moves the label back to where the "origin" should be since all label glyphs are set to HorizontalOrigin.LEFT\n translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0));\n }\n\n vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw;\n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, st));\n\n if (logDepthOrDepth == 0.0)\n {\n return 0.0; // not on the globe\n }\n\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\n return eyeCoordinate.z / eyeCoordinate.w;\n}\n#endif\n\n\n#ifdef SDF\n\n// Get the distance from the edge of a glyph at a given position sampling an SDF texture.\nfloat getDistance(vec2 position)\n{\n return texture2D(u_atlas, position).r;\n}\n\n// Samples the sdf texture at the given position and produces a color based on the fill color and the outline.\nvec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing)\n{\n float distance = getDistance(position);\n\n if (outlineWidth > 0.0)\n {\n // Don\'t get the outline edge exceed the SDF_EDGE\n float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE);\n float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\n vec4 sdfColor = mix(outlineColor, v_color, outlineFactor);\n float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance);\n return vec4(sdfColor.rgb, sdfColor.a * alpha);\n }\n else\n {\n float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\n return vec4(v_color.rgb, v_color.a * alpha);\n }\n}\n#endif\n\nvoid main()\n{\n vec4 color = texture2D(u_atlas, v_textureCoordinates);\n\n#ifdef SDF\n float outlineWidth = v_outlineWidth;\n vec4 outlineColor = v_outlineColor;\n\n // Get the current distance\n float distance = getDistance(v_textureCoordinates);\n\n#ifdef GL_OES_standard_derivatives\n float smoothing = fwidth(distance);\n // Get an offset that is approximately half the distance to the neighbor pixels\n // 0.354 is approximately half of 1/sqrt(2)\n vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates));\n\n // Sample the center point\n vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\n\n // Sample the 4 neighbors\n vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\n vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\n vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\n vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\n\n // Equally weight the center sample and the 4 neighboring samples\n color = (center + color1 + color2 + color3 + color4)/5.0;\n#else\n // Just do a single sample\n float smoothing = 1.0/32.0;\n color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\n#endif\n\n color = czm_gammaCorrect(color);\n#else\n color = czm_gammaCorrect(color);\n color *= czm_gammaCorrect(v_color);\n#endif\n\n// Fully transparent parts of the billboard are not pickable.\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\n if (color.a < 0.005) // matches 0/255 and 1/255\n {\n discard;\n }\n#else\n// The billboard is rendered twice. The opaque pass discards translucent fragments\n// and the translucent pass discards opaque fragments.\n#ifdef OPAQUE\n if (color.a < 0.995) // matches < 254/255\n {\n discard;\n }\n#else\n if (color.a >= 0.995) // matches 254/255 and 255/255\n {\n discard;\n }\n#endif\n#endif\n\n#ifdef VECTOR_TILE\n color *= u_highlightColor;\n#endif\n gl_FragColor = color;\n\n#ifdef LOG_DEPTH\n czm_writeLogDepth();\n#endif\n\n#ifdef FRAGMENT_DEPTH_CHECK\n float temp = v_compressed.y;\n\n temp = temp * SHIFT_RIGHT1;\n\n float temp2 = (temp - floor(temp)) * SHIFT_LEFT1;\n bool enableDepthTest = temp2 != 0.0;\n bool applyTranslate = floor(temp) != 0.0;\n\n if (enableDepthTest) {\n temp = v_compressed.z;\n temp = temp * SHIFT_RIGHT12;\n\n vec2 dimensions;\n dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\n dimensions.x = floor(temp);\n\n temp = v_compressed.w;\n temp = temp * SHIFT_RIGHT12;\n\n vec2 imageSize;\n imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12;\n imageSize.x = floor(temp);\n\n vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy;\n adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y);\n\n float epsilonEyeDepth = v_compressed.x + czm_epsilon1;\n float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize);\n\n // negative values go into the screen\n if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth)\n {\n float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner\n if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth)\n {\n float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner\n if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth)\n {\n discard;\n }\n }\n }\n }\n#endif\n\n}\n',R=[],Object(o.a)(this._batchTable)&&(R.push("VECTOR_TILE"),D=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(D),P=this._batchTable.getFragmentShaderCallback(!1,void 0)(P)),I=new KM({defines:R,sources:[D]}),this._instanced&&I.defines.push("INSTANCED"),this._shaderRotation&&I.defines.push("ROTATION"),this._shaderAlignedAxis&&I.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&I.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&I.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&I.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&I.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&I.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&(F?I.defines.push("VERTEX_DEPTH_CHECK"):I.defines.push("FRAGMENT_DEPTH_CHECK"));var N=1-qq.CUTOFF;this._sdf&&I.defines.push("SDF");var z=Object(o.a)(this._batchTable)?"VECTOR_TILE":"";this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT&&(M=new KM({defines:["OPAQUE",z],sources:[P]}),this._shaderClampToGround&&(F?M.defines.push("VERTEX_DEPTH_CHECK"):M.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(M.defines.push("SDF"),M.defines.push("SDF_EDGE "+N)),this._sp=LM.replaceCache({context:i,shaderProgram:this._sp,vertexShaderSource:I,fragmentShaderSource:M,attributeLocations:Qq}),M=new KM({defines:["TRANSLUCENT",z],sources:[P]}),this._shaderClampToGround&&(F?M.defines.push("VERTEX_DEPTH_CHECK"):M.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(M.defines.push("SDF"),M.defines.push("SDF_EDGE "+N)),this._spTranslucent=LM.replaceCache({context:i,shaderProgram:this._spTranslucent,vertexShaderSource:I,fragmentShaderSource:M,attributeLocations:Qq})),this._blendOption===Gq.OPAQUE&&(M=new KM({defines:[z],sources:[P]}),this._shaderClampToGround&&(F?M.defines.push("VERTEX_DEPTH_CHECK"):M.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(M.defines.push("SDF"),M.defines.push("SDF_EDGE "+N)),this._sp=LM.replaceCache({context:i,shaderProgram:this._sp,vertexShaderSource:I,fragmentShaderSource:M,attributeLocations:Qq})),this._blendOption===Gq.TRANSLUCENT&&(M=new KM({defines:[z],sources:[P]}),this._shaderClampToGround&&(F?M.defines.push("VERTEX_DEPTH_CHECK"):M.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(M.defines.push("SDF"),M.defines.push("SDF_EDGE "+N)),this._spTranslucent=LM.replaceCache({context:i,shaderProgram:this._spTranslucent,vertexShaderSource:I,fragmentShaderSource:M,attributeLocations:Qq})),this._compiledShaderRotation=this._shaderRotation,this._compiledShaderAlignedAxis=this._shaderAlignedAxis,this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderPixelOffsetScaleByDistance=this._shaderPixelOffsetScaleByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance,this._compiledShaderClampToGround=this._shaderClampToGround,this._compiledSDF=this._sdf}var k=e.commandList;if(p.render||p.pick){var B,H=this._colorCommands,V=this._blendOption===Gq.OPAQUE,U=this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT,W=this._vaf.va,G=W.length,q=this._uniforms;Object(o.a)(this._batchTable)?(q=this._batchTable.getUniformMapCallback()(q),B=this._batchTable.getPickId()):B="v_pickColor",H.length=G;for(var Y=U?2*G:G,$=0;$<Y;++$){var X=H[$];Object(o.a)(X)||(X=H[$]=new CI);var K=V||U&&$%2===0;X.pass=K||!U?EI.OPAQUE:EI.TRANSLUCENT,X.owner=this;var Q=U?Math.floor($/2):$;X.boundingVolume=T,X.modelMatrix=S,X.count=W[Q].indicesCount,X.shaderProgram=K?this._sp:this._spTranslucent,X.uniformMap=q,X.vertexArray=W[Q].va,X.renderState=K?this._rsOpaque:this._rsTranslucent,X.debugShowBoundingVolume=this.debugShowBoundingVolume,X.pickId=B,this._instanced&&(X.count=6,X.instanceCount=n),k.push(X)}this.debugShowTextureAtlas&&(Object(o.a)(this.debugCommand)||(this.debugCommand=function(e,t){var n=t.createViewportQuadCommand("uniform sampler2D billboard_texture; \nvarying vec2 v_textureCoordinates; \nvoid main() \n{ \n gl_FragColor = texture2D(billboard_texture, v_textureCoordinates); \n} \n",{uniformMap:{billboard_texture:function(){return e._textureAtlas.texture}}});return n.pass=EI.OVERLAY,n}(this,e.context)),k.push(this.debugCommand))}}}},wY.prototype.isDestroyed=function(){return!1},wY.prototype.destroy=function(){return Object(o.a)(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),OY(this._billboards),Ks(this)};var VY=wY;var UY=function(e,t,n,i,r){return function(){var o=document.createElement("canvas"),a=r+2*i;o.height=o.width=a;var s=o.getContext("2d");return s.clearRect(0,0,a,a),0!==i&&(s.beginPath(),s.arc(a/2,a/2,a/2,0,2*Math.PI,!0),s.closePath(),s.fillStyle=n,s.fill(),e<1&&(s.save(),s.globalCompositeOperation="destination-out",s.beginPath(),s.arc(a/2,a/2,r/2,0,2*Math.PI,!0),s.closePath(),s.fillStyle="black",s.fill(),s.restore())),s.beginPath(),s.arc(a/2,a/2,r/2,0,2*Math.PI,!0),s.closePath(),s.fillStyle=t,s.fill(),o}};function WY(e,t,n,i,r){this._content=e,this._billboard=n,this._label=i,this._polyline=r,this._batchId=t,this._billboardImage=void 0,this._billboardColor=void 0,this._billboardOutlineColor=void 0,this._billboardOutlineWidth=void 0,this._billboardSize=void 0,this._pointSize=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._heightOffset=void 0,this._pickIds=new Array(3),qY(this)}var GY=new R;function qY(e){var t=e._billboard;if(Object(o.a)(e._billboardImage)&&e._billboardImage!==t.image)t.image=e._billboardImage;else if(!Object(o.a)(e._billboardImage)){var n=Object(r.a)(e._color,WY.defaultColor),i=Object(r.a)(e._pointOutlineColor,WY.defaultPointOutlineColor),a=Object(r.a)(e._pointOutlineWidth,WY.defaultPointOutlineWidth),s=Object(r.a)(e._pointSize,WY.defaultPointSize),c=e._billboardColor,l=e._billboardOutlineColor,u=e._billboardOutlineWidth,h=e._billboardSize;if(!Hf.equals(n,c)||!Hf.equals(i,l)||a!==u||s!==h){e._billboardColor=Hf.clone(n,e._billboardColor),e._billboardOutlineColor=Hf.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=a,e._billboardSize=s;var d=n.alpha,f=n.toCssColorString(),p=i.toCssColorString(),m=JSON.stringify([f,s,p,a]);t.setImage(m,UY(d,f,p,a,s))}}}Object.defineProperties(WY.prototype,{show:{get:function(){return this._label.show},set:function(e){this._label.show=e,this._billboard.show=e,this._polyline.show=e}},color:{get:function(){return this._color},set:function(e){this._color=Hf.clone(e,this._color),qY(this)}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=e,qY(this)}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=Hf.clone(e,this._pointOutlineColor),qY(this)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=e,qY(this)}},labelColor:{get:function(){return this._label.fillColor},set:function(e){this._label.fillColor=e,this._polyline.show=this._label.show&&e.alpha>0}},labelOutlineColor:{get:function(){return this._label.outlineColor},set:function(e){this._label.outlineColor=e}},labelOutlineWidth:{get:function(){return this._label.outlineWidth},set:function(e){this._label.outlineWidth=e}},font:{get:function(){return this._label.font},set:function(e){this._label.font=e}},labelStyle:{get:function(){return this._label.style},set:function(e){this._label.style=e}},labelText:{get:function(){return this._label.text},set:function(e){Object(o.a)(e)||(e=""),this._label.text=e}},backgroundColor:{get:function(){return this._label.backgroundColor},set:function(e){this._label.backgroundColor=e}},backgroundPadding:{get:function(){return this._label.backgroundPadding},set:function(e){this._label.backgroundPadding=e}},backgroundEnabled:{get:function(){return this._label.showBackground},set:function(e){this._label.showBackground=e}},scaleByDistance:{get:function(){return this._label.scaleByDistance},set:function(e){this._label.scaleByDistance=e,this._billboard.scaleByDistance=e}},translucencyByDistance:{get:function(){return this._label.translucencyByDistance},set:function(e){this._label.translucencyByDistance=e,this._billboard.translucencyByDistance=e}},distanceDisplayCondition:{get:function(){return this._label.distanceDisplayCondition},set:function(e){this._label.distanceDisplayCondition=e,this._polyline.distanceDisplayCondition=e,this._billboard.distanceDisplayCondition=e}},heightOffset:{get:function(){return this._heightOffset},set:function(e){var t=Object(r.a)(this._heightOffset,0),n=this._content.tileset.ellipsoid,i=n.cartesianToCartographic(this._billboard.position,GY);i.height=i.height-t+e;var o=n.cartographicToCartesian(i);this._billboard.position=o,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],o],this._heightOffset=e}},anchorLineEnabled:{get:function(){return this._polyline.show},set:function(e){this._polyline.show=e}},anchorLineColor:{get:function(){return this._polyline.material.uniforms.color},set:function(e){this._polyline.material.uniforms.color=Hf.clone(e,this._polyline.material.uniforms.color)}},image:{get:function(){return this._billboardImage},set:function(e){var t=this._billboardImage!==e;this._billboardImage=e,t&&qY(this)}},disableDepthTestDistance:{get:function(){return this._label.disableDepthTestDistance},set:function(e){this._label.disableDepthTestDistance=e,this._billboard.disableDepthTestDistance=e}},horizontalOrigin:{get:function(){return this._billboard.horizontalOrigin},set:function(e){this._billboard.horizontalOrigin=e}},verticalOrigin:{get:function(){return this._billboard.verticalOrigin},set:function(e){this._billboard.verticalOrigin=e}},labelHorizontalOrigin:{get:function(){return this._label.horizontalOrigin},set:function(e){this._label.horizontalOrigin=e}},labelVerticalOrigin:{get:function(){return this._label.verticalOrigin},set:function(e){this._label.verticalOrigin=e}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickIds:{get:function(){var e=this._pickIds;return e[0]=this._billboard.pickId,e[1]=this._label.pickId,e[2]=this._polyline.pickId,e}}}),WY.defaultColor=Hf.WHITE,WY.defaultPointOutlineColor=Hf.BLACK,WY.defaultPointOutlineWidth=0,WY.defaultPointSize=8,WY.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)},WY.prototype.getPropertyNames=function(e){return this._content.batchTable.getPropertyNames(this._batchId,e)},WY.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)},WY.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0},WY.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)},WY.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)},WY.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var YY=WY,$Y=1e20;function XY(e,t,n,i,r,o,a){for(var s=0;s<t;s++){for(var c=0;c<n;c++)i[c]=e[c*t+s];for(KY(i,r,o,a,n),c=0;c<n;c++)e[c*t+s]=r[c]}for(c=0;c<n;c++){for(s=0;s<t;s++)i[s]=e[c*t+s];for(KY(i,r,o,a,t),s=0;s<t;s++)e[c*t+s]=Math.sqrt(r[s])}}function KY(e,t,n,i,r){n[0]=0,i[0]=-$Y,i[1]=+$Y;for(var o=1,a=0;o<r;o++){for(var s=(e[o]+o*o-(e[n[a]]+n[a]*n[a]))/(2*o-2*n[a]);s<=i[a];)a--,s=(e[o]+o*o-(e[n[a]]+n[a]*n[a]))/(2*o-2*n[a]);n[++a]=o,i[a]=s,i[a+1]=+$Y}for(o=0,a=0;o<r;o++){for(;i[a+1]<o;)a++;t[o]=(o-n[a])*(o-n[a])+e[n[a]]}}var QY=function(e,t){t||(t={});var n,i,r,o,a,s,c,l,u,h,d,f=null==t.cutoff?.25:t.cutoff,p=null==t.radius?8:t.radius,m=t.channel||0;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!t.width||!t.height)throw Error("For raw data width and height should be provided by options");n=t.width,i=t.height,o=e,s=t.stride?t.stride:Math.floor(e.length/n/i)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(c=(l=e).getContext("2d"),n=l.width,i=l.height,o=(u=c.getImageData(0,0,n,i)).data,s=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(c=e,n=(l=e.canvas).width,i=l.height,o=(u=c.getImageData(0,0,n,i)).data,s=4):window.ImageData&&e instanceof window.ImageData&&(u=e,n=e.width,i=e.height,o=u.data,s=4);if(r=Math.max(n,i),window.Uint8ClampedArray&&o instanceof window.Uint8ClampedArray||window.Uint8Array&&o instanceof window.Uint8Array)for(a=o,o=Array(n*i),h=0,d=a.length;h<d;h++)o[h]=a[h*s+m]/255;else if(1!==s)throw Error("Raw data can have only 1 value per pixel");var g=Array(n*i),v=Array(n*i),_=Array(r),b=Array(r),y=Array(r+1),w=Array(r);for(h=0,d=n*i;h<d;h++){var O=o[h];g[h]=1===O?0:0===O?$Y:Math.pow(Math.max(0,.5-O),2),v[h]=1===O?$Y:0===O?0:Math.pow(Math.max(0,O-.5),2)}XY(g,n,i,_,b,w,y),XY(v,n,i,_,b,w,y);var C,E,A,x=window.Float32Array?new Float32Array(n*i):new Array(n*i);for(h=0,d=n*i;h<d;h++)x[h]=(C=1-((g[h]-v[h])/p+f),(E=0)<(A=1)?C<E?E:C>A?A:C:C<A?A:C>E?E:C);return x},ZY=Object.freeze({FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2}),JY={},e$=0,t$=new Hf(.165,.165,.165,.8),n$=new Mt(7,5),i$=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function r$(e){e._rebindAllGlyphs||e._repositionAllGlyphs||e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function o$(e){e._rebindAllGlyphs||e._repositionAllGlyphs||e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function a$(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function s$(e){var t=JY[e._font];if(!Object(o.a)(t)){var n=document.createElement("div");n.style.position="absolute",n.style.opacity=0,n.style.font=e._font,document.body.appendChild(n),t={family:a$(n,"font-family"),size:a$(n,"font-size").replace("px",""),style:a$(n,"font-style"),weight:a$(n,"font-weight")},document.body.removeChild(n),e$<256&&(JY[e._font]=t,e$++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight}function c$(e,t){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),Object(o.a)(e.disableDepthTestDistance)&&e.disableDepthTestDistance<0)throw new a.a("disableDepthTestDistance must be greater than 0.0.");var n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,s=e.scaleByDistance,c=e.distanceDisplayCondition;if(Object(o.a)(n)){if(n.far<=n.near)throw new a.a("translucencyByDistance.far must be greater than translucencyByDistance.near.");n=JC.clone(n)}if(Object(o.a)(i)){if(i.far<=i.near)throw new a.a("pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.");i=JC.clone(i)}if(Object(o.a)(s)){if(s.far<=s.near)throw new a.a("scaleByDistance.far must be greater than scaleByDistance.near.");s=JC.clone(s)}if(Object(o.a)(c)){if(c.far<=c.near)throw new a.a("distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.");c=$_.clone(c)}this._renderedText=void 0,this._text=void 0,this._show=Object(r.a)(e.show,!0),this._font=Object(r.a)(e.font,"30px sans-serif"),this._fillColor=Hf.clone(Object(r.a)(e.fillColor,Hf.WHITE)),this._outlineColor=Hf.clone(Object(r.a)(e.outlineColor,Hf.BLACK)),this._outlineWidth=Object(r.a)(e.outlineWidth,1),this._showBackground=Object(r.a)(e.showBackground,!1),this._backgroundColor=Hf.clone(Object(r.a)(e.backgroundColor,t$)),this._backgroundPadding=Mt.clone(Object(r.a)(e.backgroundPadding,n$)),this._style=Object(r.a)(e.style,ZY.FILL),this._verticalOrigin=Object(r.a)(e.verticalOrigin,oP.BASELINE),this._horizontalOrigin=Object(r.a)(e.horizontalOrigin,rP.LEFT),this._pixelOffset=Mt.clone(Object(r.a)(e.pixelOffset,Mt.ZERO)),this._eyeOffset=O.clone(Object(r.a)(e.eyeOffset,O.ZERO)),this._position=O.clone(Object(r.a)(e.position,O.ZERO)),this._scale=Object(r.a)(e.scale,1),this._id=e.id,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._scaleByDistance=s,this._heightReference=Object(r.a)(e.heightReference,iP.NONE),this._distanceDisplayCondition=c,this._disableDepthTestDistance=e.disableDepthTestDistance,this._labelCollection=t,this._glyphs=[],this._backgroundBillboard=void 0,this._batchIndex=void 0,this._rebindAllGlyphs=!0,this._repositionAllGlyphs=!0,this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=void 0,this._clusterShow=!0,this.text=Object(r.a)(e.text,""),this._relativeSize=1,s$(this),this._updateClamping()}function l$(e,t){for(var n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,r=[],o="",a=i$.LTR,s="",c=e.length,l=0;l<c;++l){var u=e.charAt(l);s=t.test(u)?i$.RTL:n.test(u)?i$.LTR:i.test(u)?i$.BRACKETS:i$.WEAK,0===l&&(a=s),a===s&&s!==i$.BRACKETS?o+=u:(""!==o&&r.push({Type:a,Word:o}),a=s,o=u)}return r.push({Type:s,Word:o}),r}function u$(e,t,n){return e.slice(0,t)+n+e.slice(t)}function h$(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}Object.defineProperties(c$.prototype,{show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(this._show!==e){this._show=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n].billboard;Object(o.a)(r)&&(r.show=e)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.show=e)}}},position:{get:function(){return this._position},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._position;if(!O.equals(t,e)){O.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i].billboard;Object(o.a)(s)&&(s.position=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.position=e),this._updateClamping()}}},heightReference:{get:function(){return this._heightReference},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(e!==this._heightReference){this._heightReference=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n].billboard;Object(o.a)(r)&&(r.heightReference=e)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.heightReference=e),o$(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._text!==e&&(this._text=e,this._renderedText=c$.enableRightToLeftDetection?function(e){for(var t=e.split("\n"),n="",i=0;i<t.length;i++){for(var r=t[i],o=d$.test(r.charAt(0)),a=l$(r,d$),s=0,c="",l=0;l<a.length;++l){var u=a[l],h=u.Type===i$.BRACKETS?h$(u.Word):u.Word.split("").reverse().join("");o?u.Type===i$.RTL?(c=h+c,s=0):u.Type===i$.LTR?(c=u$(c,s,u.Word),s+=u.Word.length):u.Type!==i$.WEAK&&u.Type!==i$.BRACKETS||(u.Type===i$.WEAK&&a[l-1].Type===i$.BRACKETS?c=h+c:a[l-1].Type===i$.RTL?(c=h+c,s=0):a.length>l+1?a[l+1].Type===i$.RTL?(c=h+c,s=0):(c=u$(c,s,u.Word),s+=u.Word.length):c=u$(c,0,h)):u.Type===i$.RTL?c=u$(c,s,h):u.Type===i$.LTR?(c+=u.Word,s=c.length):u.Type!==i$.WEAK&&u.Type!==i$.BRACKETS||(l>0&&a[l-1].Type===i$.RTL?a.length>l+1?a[l+1].Type===i$.RTL?c=u$(c,s,h):(c+=u.Word,s=c.length):c+=u.Word:(c+=u.Word,s=c.length))}n+=c,i<t.length-1&&(n+="\n")}return n}(e):e,r$(this))}},font:{get:function(){return this._font},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._font!==e&&(this._font=e,r$(this),s$(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._fillColor;Hf.equals(t,e)||(Hf.clone(e,t),r$(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._outlineColor;Hf.equals(t,e)||(Hf.clone(e,t),r$(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._outlineWidth!==e&&(this._outlineWidth=e,r$(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._showBackground!==e&&(this._showBackground=e,r$(this))}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._backgroundColor;if(!Hf.equals(t,e)){Hf.clone(e,t);var n=this._backgroundBillboard;Object(o.a)(n)&&(n.color=t)}}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._backgroundPadding;Mt.equals(t,e)||(Mt.clone(e,t),o$(this))}},style:{get:function(){return this._style},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._style!==e&&(this._style=e,r$(this))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._pixelOffset;if(!Mt.equals(t,e)){Mt.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i];Object(o.a)(s.billboard)&&(s.billboard.pixelOffset=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.pixelOffset=e)}}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._translucencyByDistance;if(!JC.equals(t,e)){this._translucencyByDistance=JC.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i];Object(o.a)(s.billboard)&&(s.billboard.translucencyByDistance=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.translucencyByDistance=e)}}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._pixelOffsetScaleByDistance;if(!JC.equals(t,e)){this._pixelOffsetScaleByDistance=JC.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i];Object(o.a)(s.billboard)&&(s.billboard.pixelOffsetScaleByDistance=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.pixelOffsetScaleByDistance=e)}}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._scaleByDistance;if(!JC.equals(t,e)){this._scaleByDistance=JC.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i];Object(o.a)(s.billboard)&&(s.billboard.scaleByDistance=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.scaleByDistance=e)}}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._eyeOffset;if(!O.equals(t,e)){O.clone(e,t);for(var n=this._glyphs,i=0,r=n.length;i<r;i++){var s=n[i];Object(o.a)(s.billboard)&&(s.billboard.eyeOffset=e)}var c=this._backgroundBillboard;Object(o.a)(c)&&(c.eyeOffset=e)}}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._horizontalOrigin!==e&&(this._horizontalOrigin=e,o$(this))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(this._verticalOrigin!==e){this._verticalOrigin=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.verticalOrigin=e)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.verticalOrigin=e),o$(this)}}},scale:{get:function(){return this._scale},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(this._scale!==e){this._scale=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.scale=e*this._relativeSize)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.scale=e*this._relativeSize),o$(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far must be greater than near");if(!$_.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=$_.clone(e,this._distanceDisplayCondition);for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.distanceDisplayCondition=e)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.distanceDisplayCondition=e)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){if(Object(o.a)(e)&&e<0)throw new a.a("disableDepthTestDistance must be greater than 0.0.");this._disableDepthTestDistance=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.disableDepthTestDistance=e)}var s=this._backgroundBillboard;Object(o.a)(s)&&(s.disableDepthTestDistance=e)}}},id:{get:function(){return this._id},set:function(e){if(this._id!==e){this._id=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.id=e)}var a=this._backgroundBillboard;Object(o.a)(a)&&(a.id=e)}}},pickId:{get:function(){if(0!==this._glyphs.length&&Object(o.a)(this._glyphs[0].billboard))return this._glyphs[0].billboard.pickId}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=O.clone(e,this._actualClampedPosition);for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard._clampedPosition=e)}var a=this._backgroundBillboard;Object(o.a)(a)&&(a._clampedPosition=e)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){if(this._clusterShow!==e){this._clusterShow=e;for(var t=this._glyphs,n=0,i=t.length;n<i;n++){var r=t[n];Object(o.a)(r.billboard)&&(r.billboard.clusterShow=e)}var a=this._backgroundBillboard;Object(o.a)(a)&&(a.clusterShow=e)}}}}),c$.prototype._updateClamping=function(){Wq._updateClamping(this._labelCollection,this)},c$.prototype.computeScreenSpacePosition=function(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");Object(o.a)(t)||(t=new Mt);var n=this._labelCollection.modelMatrix,i=Object(o.a)(this._actualClampedPosition)?this._actualClampedPosition:this._position;return Wq._computeScreenSpacePosition(n,i,this._eyeOffset,this._pixelOffset,e,t)},c$.getScreenSpaceBoundingBox=function(e,t,n){var i=0,r=0,a=0,s=0,c=e.totalScale,l=e._backgroundBillboard;if(Object(o.a)(l))i=t.x+l._translate.x,r=t.y-l._translate.y,a=l.width*c,s=l.height*c,e.verticalOrigin===oP.BOTTOM||e.verticalOrigin===oP.BASELINE?r-=s:e.verticalOrigin===oP.CENTER&&(r-=.5*s);else{i=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY;for(var u=0,h=0,d=e._glyphs,f=d.length,p=0;p<f;++p){var m=d[p],g=m.billboard;if(Object(o.a)(g)){var v=t.x+g._translate.x,_=t.y-g._translate.y,b=m.dimensions.width*c,y=m.dimensions.height*c;e.verticalOrigin===oP.BOTTOM||e.verticalOrigin===oP.BASELINE?_-=y:e.verticalOrigin===oP.CENTER&&(_-=.5*y),e._verticalOrigin===oP.TOP?_+=qq.PADDING*c:e._verticalOrigin!==oP.BOTTOM&&e._verticalOrigin!==oP.BASELINE||(_-=qq.PADDING*c),i=Math.min(i,v),r=Math.min(r,_),u=Math.max(u,v+b),h=Math.max(h,_+y)}}a=u-i,s=h-r}return Object(o.a)(n)||(n=new bl),n.x=i,n.y=r,n.width=a,n.height=s,n},c$.prototype.equals=function(e){return this===e||Object(o.a)(e)&&this._show===e._show&&this._scale===e._scale&&this._outlineWidth===e._outlineWidth&&this._showBackground===e._showBackground&&this._style===e._style&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&this._renderedText===e._renderedText&&this._font===e._font&&O.equals(this._position,e._position)&&Hf.equals(this._fillColor,e._fillColor)&&Hf.equals(this._outlineColor,e._outlineColor)&&Hf.equals(this._backgroundColor,e._backgroundColor)&&Mt.equals(this._backgroundPadding,e._backgroundPadding)&&Mt.equals(this._pixelOffset,e._pixelOffset)&&O.equals(this._eyeOffset,e._eyeOffset)&&JC.equals(this._translucencyByDistance,e._translucencyByDistance)&&JC.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&JC.equals(this._scaleByDistance,e._scaleByDistance)&&$_.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id},c$.prototype.isDestroyed=function(){return!1},c$.enableRightToLeftDetection=!1;var d$=new RegExp("[\u05d0-\u05ea\u0600-\u06ff\u0750-\u077f\u08a0-\u08ff]");var f$=c$;var p$=function(){var e=3,t=4,n=12,i=13,r=16,o=17;function a(e,t){void 0===t&&(t=0);var n=e.charCodeAt(t);if(55296<=n&&n<=56319&&t<e.length-1){var i=n;return 56320<=(r=e.charCodeAt(t+1))&&r<=57343?1024*(i-55296)+(r-56320)+65536:i}if(56320<=n&&n<=57343&&t>=1){var r=n;return 55296<=(i=e.charCodeAt(t-1))&&i<=56319?1024*(i-55296)+(r-56320)+65536:r}return n}function s(a,s,c){var l=[a].concat(s).concat([c]),u=l[l.length-2],h=c,d=l.lastIndexOf(14);if(d>1&&l.slice(1,d).every((function(t){return t==e}))&&-1==[e,i,o].indexOf(a))return 2;var f=l.lastIndexOf(t);if(f>0&&l.slice(1,f).every((function(e){return e==t}))&&-1==[n,t].indexOf(u))return l.filter((function(e){return e==t})).length%2==1?3:4;if(0==u&&1==h)return 0;if(2==u||0==u||1==u)return 14==h&&s.every((function(t){return t==e}))?2:1;if(2==h||0==h||1==h)return 1;if(6==u&&(6==h||7==h||9==h||10==h))return 0;if(!(9!=u&&7!=u||7!=h&&8!=h))return 0;if((10==u||8==u)&&8==h)return 0;if(h==e||15==h)return 0;if(5==h)return 0;if(u==n)return 0;var p=-1!=l.indexOf(e)?l.lastIndexOf(e)-1:l.length-2;return-1!=[i,o].indexOf(l[p])&&l.slice(p+1,-1).every((function(t){return t==e}))&&14==h||15==u&&-1!=[r,o].indexOf(h)?0:-1!=s.indexOf(t)?2:u==t&&h==t?0:1}function c(a){return 1536<=a&&a<=1541||1757==a||1807==a||2274==a||3406==a||69821==a||70082<=a&&a<=70083||72250==a||72326<=a&&a<=72329||73030==a?n:13==a?0:10==a?1:0<=a&&a<=9||11<=a&&a<=12||14<=a&&a<=31||127<=a&&a<=159||173==a||1564==a||6158==a||8203==a||8206<=a&&a<=8207||8232==a||8233==a||8234<=a&&a<=8238||8288<=a&&a<=8292||8293==a||8294<=a&&a<=8303||55296<=a&&a<=57343||65279==a||65520<=a&&a<=65528||65529<=a&&a<=65531||113824<=a&&a<=113827||119155<=a&&a<=119162||917504==a||917505==a||917506<=a&&a<=917535||917632<=a&&a<=917759||918e3<=a&&a<=921599?2:768<=a&&a<=879||1155<=a&&a<=1159||1160<=a&&a<=1161||1425<=a&&a<=1469||1471==a||1473<=a&&a<=1474||1476<=a&&a<=1477||1479==a||1552<=a&&a<=1562||1611<=a&&a<=1631||1648==a||1750<=a&&a<=1756||1759<=a&&a<=1764||1767<=a&&a<=1768||1770<=a&&a<=1773||1809==a||1840<=a&&a<=1866||1958<=a&&a<=1968||2027<=a&&a<=2035||2070<=a&&a<=2073||2075<=a&&a<=2083||2085<=a&&a<=2087||2089<=a&&a<=2093||2137<=a&&a<=2139||2260<=a&&a<=2273||2275<=a&&a<=2306||2362==a||2364==a||2369<=a&&a<=2376||2381==a||2385<=a&&a<=2391||2402<=a&&a<=2403||2433==a||2492==a||2494==a||2497<=a&&a<=2500||2509==a||2519==a||2530<=a&&a<=2531||2561<=a&&a<=2562||2620==a||2625<=a&&a<=2626||2631<=a&&a<=2632||2635<=a&&a<=2637||2641==a||2672<=a&&a<=2673||2677==a||2689<=a&&a<=2690||2748==a||2753<=a&&a<=2757||2759<=a&&a<=2760||2765==a||2786<=a&&a<=2787||2810<=a&&a<=2815||2817==a||2876==a||2878==a||2879==a||2881<=a&&a<=2884||2893==a||2902==a||2903==a||2914<=a&&a<=2915||2946==a||3006==a||3008==a||3021==a||3031==a||3072==a||3134<=a&&a<=3136||3142<=a&&a<=3144||3146<=a&&a<=3149||3157<=a&&a<=3158||3170<=a&&a<=3171||3201==a||3260==a||3263==a||3266==a||3270==a||3276<=a&&a<=3277||3285<=a&&a<=3286||3298<=a&&a<=3299||3328<=a&&a<=3329||3387<=a&&a<=3388||3390==a||3393<=a&&a<=3396||3405==a||3415==a||3426<=a&&a<=3427||3530==a||3535==a||3538<=a&&a<=3540||3542==a||3551==a||3633==a||3636<=a&&a<=3642||3655<=a&&a<=3662||3761==a||3764<=a&&a<=3769||3771<=a&&a<=3772||3784<=a&&a<=3789||3864<=a&&a<=3865||3893==a||3895==a||3897==a||3953<=a&&a<=3966||3968<=a&&a<=3972||3974<=a&&a<=3975||3981<=a&&a<=3991||3993<=a&&a<=4028||4038==a||4141<=a&&a<=4144||4146<=a&&a<=4151||4153<=a&&a<=4154||4157<=a&&a<=4158||4184<=a&&a<=4185||4190<=a&&a<=4192||4209<=a&&a<=4212||4226==a||4229<=a&&a<=4230||4237==a||4253==a||4957<=a&&a<=4959||5906<=a&&a<=5908||5938<=a&&a<=5940||5970<=a&&a<=5971||6002<=a&&a<=6003||6068<=a&&a<=6069||6071<=a&&a<=6077||6086==a||6089<=a&&a<=6099||6109==a||6155<=a&&a<=6157||6277<=a&&a<=6278||6313==a||6432<=a&&a<=6434||6439<=a&&a<=6440||6450==a||6457<=a&&a<=6459||6679<=a&&a<=6680||6683==a||6742==a||6744<=a&&a<=6750||6752==a||6754==a||6757<=a&&a<=6764||6771<=a&&a<=6780||6783==a||6832<=a&&a<=6845||6846==a||6912<=a&&a<=6915||6964==a||6966<=a&&a<=6970||6972==a||6978==a||7019<=a&&a<=7027||7040<=a&&a<=7041||7074<=a&&a<=7077||7080<=a&&a<=7081||7083<=a&&a<=7085||7142==a||7144<=a&&a<=7145||7149==a||7151<=a&&a<=7153||7212<=a&&a<=7219||7222<=a&&a<=7223||7376<=a&&a<=7378||7380<=a&&a<=7392||7394<=a&&a<=7400||7405==a||7412==a||7416<=a&&a<=7417||7616<=a&&a<=7673||7675<=a&&a<=7679||8204==a||8400<=a&&a<=8412||8413<=a&&a<=8416||8417==a||8418<=a&&a<=8420||8421<=a&&a<=8432||11503<=a&&a<=11505||11647==a||11744<=a&&a<=11775||12330<=a&&a<=12333||12334<=a&&a<=12335||12441<=a&&a<=12442||42607==a||42608<=a&&a<=42610||42612<=a&&a<=42621||42654<=a&&a<=42655||42736<=a&&a<=42737||43010==a||43014==a||43019==a||43045<=a&&a<=43046||43204<=a&&a<=43205||43232<=a&&a<=43249||43302<=a&&a<=43309||43335<=a&&a<=43345||43392<=a&&a<=43394||43443==a||43446<=a&&a<=43449||43452==a||43493==a||43561<=a&&a<=43566||43569<=a&&a<=43570||43573<=a&&a<=43574||43587==a||43596==a||43644==a||43696==a||43698<=a&&a<=43700||43703<=a&&a<=43704||43710<=a&&a<=43711||43713==a||43756<=a&&a<=43757||43766==a||44005==a||44008==a||44013==a||64286==a||65024<=a&&a<=65039||65056<=a&&a<=65071||65438<=a&&a<=65439||66045==a||66272==a||66422<=a&&a<=66426||68097<=a&&a<=68099||68101<=a&&a<=68102||68108<=a&&a<=68111||68152<=a&&a<=68154||68159==a||68325<=a&&a<=68326||69633==a||69688<=a&&a<=69702||69759<=a&&a<=69761||69811<=a&&a<=69814||69817<=a&&a<=69818||69888<=a&&a<=69890||69927<=a&&a<=69931||69933<=a&&a<=69940||70003==a||70016<=a&&a<=70017||70070<=a&&a<=70078||70090<=a&&a<=70092||70191<=a&&a<=70193||70196==a||70198<=a&&a<=70199||70206==a||70367==a||70371<=a&&a<=70378||70400<=a&&a<=70401||70460==a||70462==a||70464==a||70487==a||70502<=a&&a<=70508||70512<=a&&a<=70516||70712<=a&&a<=70719||70722<=a&&a<=70724||70726==a||70832==a||70835<=a&&a<=70840||70842==a||70845==a||70847<=a&&a<=70848||70850<=a&&a<=70851||71087==a||71090<=a&&a<=71093||71100<=a&&a<=71101||71103<=a&&a<=71104||71132<=a&&a<=71133||71219<=a&&a<=71226||71229==a||71231<=a&&a<=71232||71339==a||71341==a||71344<=a&&a<=71349||71351==a||71453<=a&&a<=71455||71458<=a&&a<=71461||71463<=a&&a<=71467||72193<=a&&a<=72198||72201<=a&&a<=72202||72243<=a&&a<=72248||72251<=a&&a<=72254||72263==a||72273<=a&&a<=72278||72281<=a&&a<=72283||72330<=a&&a<=72342||72344<=a&&a<=72345||72752<=a&&a<=72758||72760<=a&&a<=72765||72767==a||72850<=a&&a<=72871||72874<=a&&a<=72880||72882<=a&&a<=72883||72885<=a&&a<=72886||73009<=a&&a<=73014||73018==a||73020<=a&&a<=73021||73023<=a&&a<=73029||73031==a||92912<=a&&a<=92916||92976<=a&&a<=92982||94095<=a&&a<=94098||113821<=a&&a<=113822||119141==a||119143<=a&&a<=119145||119150<=a&&a<=119154||119163<=a&&a<=119170||119173<=a&&a<=119179||119210<=a&&a<=119213||119362<=a&&a<=119364||121344<=a&&a<=121398||121403<=a&&a<=121452||121461==a||121476==a||121499<=a&&a<=121503||121505<=a&&a<=121519||122880<=a&&a<=122886||122888<=a&&a<=122904||122907<=a&&a<=122913||122915<=a&&a<=122916||122918<=a&&a<=122922||125136<=a&&a<=125142||125252<=a&&a<=125258||917536<=a&&a<=917631||917760<=a&&a<=917999?e:127462<=a&&a<=127487?t:2307==a||2363==a||2366<=a&&a<=2368||2377<=a&&a<=2380||2382<=a&&a<=2383||2434<=a&&a<=2435||2495<=a&&a<=2496||2503<=a&&a<=2504||2507<=a&&a<=2508||2563==a||2622<=a&&a<=2624||2691==a||2750<=a&&a<=2752||2761==a||2763<=a&&a<=2764||2818<=a&&a<=2819||2880==a||2887<=a&&a<=2888||2891<=a&&a<=2892||3007==a||3009<=a&&a<=3010||3014<=a&&a<=3016||3018<=a&&a<=3020||3073<=a&&a<=3075||3137<=a&&a<=3140||3202<=a&&a<=3203||3262==a||3264<=a&&a<=3265||3267<=a&&a<=3268||3271<=a&&a<=3272||3274<=a&&a<=3275||3330<=a&&a<=3331||3391<=a&&a<=3392||3398<=a&&a<=3400||3402<=a&&a<=3404||3458<=a&&a<=3459||3536<=a&&a<=3537||3544<=a&&a<=3550||3570<=a&&a<=3571||3635==a||3763==a||3902<=a&&a<=3903||3967==a||4145==a||4155<=a&&a<=4156||4182<=a&&a<=4183||4228==a||6070==a||6078<=a&&a<=6085||6087<=a&&a<=6088||6435<=a&&a<=6438||6441<=a&&a<=6443||6448<=a&&a<=6449||6451<=a&&a<=6456||6681<=a&&a<=6682||6741==a||6743==a||6765<=a&&a<=6770||6916==a||6965==a||6971==a||6973<=a&&a<=6977||6979<=a&&a<=6980||7042==a||7073==a||7078<=a&&a<=7079||7082==a||7143==a||7146<=a&&a<=7148||7150==a||7154<=a&&a<=7155||7204<=a&&a<=7211||7220<=a&&a<=7221||7393==a||7410<=a&&a<=7411||7415==a||43043<=a&&a<=43044||43047==a||43136<=a&&a<=43137||43188<=a&&a<=43203||43346<=a&&a<=43347||43395==a||43444<=a&&a<=43445||43450<=a&&a<=43451||43453<=a&&a<=43456||43567<=a&&a<=43568||43571<=a&&a<=43572||43597==a||43755==a||43758<=a&&a<=43759||43765==a||44003<=a&&a<=44004||44006<=a&&a<=44007||44009<=a&&a<=44010||44012==a||69632==a||69634==a||69762==a||69808<=a&&a<=69810||69815<=a&&a<=69816||69932==a||70018==a||70067<=a&&a<=70069||70079<=a&&a<=70080||70188<=a&&a<=70190||70194<=a&&a<=70195||70197==a||70368<=a&&a<=70370||70402<=a&&a<=70403||70463==a||70465<=a&&a<=70468||70471<=a&&a<=70472||70475<=a&&a<=70477||70498<=a&&a<=70499||70709<=a&&a<=70711||70720<=a&&a<=70721||70725==a||70833<=a&&a<=70834||70841==a||70843<=a&&a<=70844||70846==a||70849==a||71088<=a&&a<=71089||71096<=a&&a<=71099||71102==a||71216<=a&&a<=71218||71227<=a&&a<=71228||71230==a||71340==a||71342<=a&&a<=71343||71350==a||71456<=a&&a<=71457||71462==a||72199<=a&&a<=72200||72249==a||72279<=a&&a<=72280||72343==a||72751==a||72766==a||72873==a||72881==a||72884==a||94033<=a&&a<=94078||119142==a||119149==a?5:4352<=a&&a<=4447||43360<=a&&a<=43388?6:4448<=a&&a<=4519||55216<=a&&a<=55238?7:4520<=a&&a<=4607||55243<=a&&a<=55291?8:44032==a||44060==a||44088==a||44116==a||44144==a||44172==a||44200==a||44228==a||44256==a||44284==a||44312==a||44340==a||44368==a||44396==a||44424==a||44452==a||44480==a||44508==a||44536==a||44564==a||44592==a||44620==a||44648==a||44676==a||44704==a||44732==a||44760==a||44788==a||44816==a||44844==a||44872==a||44900==a||44928==a||44956==a||44984==a||45012==a||45040==a||45068==a||45096==a||45124==a||45152==a||45180==a||45208==a||45236==a||45264==a||45292==a||45320==a||45348==a||45376==a||45404==a||45432==a||45460==a||45488==a||45516==a||45544==a||45572==a||45600==a||45628==a||45656==a||45684==a||45712==a||45740==a||45768==a||45796==a||45824==a||45852==a||45880==a||45908==a||45936==a||45964==a||45992==a||46020==a||46048==a||46076==a||46104==a||46132==a||46160==a||46188==a||46216==a||46244==a||46272==a||46300==a||46328==a||46356==a||46384==a||46412==a||46440==a||46468==a||46496==a||46524==a||46552==a||46580==a||46608==a||46636==a||46664==a||46692==a||46720==a||46748==a||46776==a||46804==a||46832==a||46860==a||46888==a||46916==a||46944==a||46972==a||47e3==a||47028==a||47056==a||47084==a||47112==a||47140==a||47168==a||47196==a||47224==a||47252==a||47280==a||47308==a||47336==a||47364==a||47392==a||47420==a||47448==a||47476==a||47504==a||47532==a||47560==a||47588==a||47616==a||47644==a||47672==a||47700==a||47728==a||47756==a||47784==a||47812==a||47840==a||47868==a||47896==a||47924==a||47952==a||47980==a||48008==a||48036==a||48064==a||48092==a||48120==a||48148==a||48176==a||48204==a||48232==a||48260==a||48288==a||48316==a||48344==a||48372==a||48400==a||48428==a||48456==a||48484==a||48512==a||48540==a||48568==a||48596==a||48624==a||48652==a||48680==a||48708==a||48736==a||48764==a||48792==a||48820==a||48848==a||48876==a||48904==a||48932==a||48960==a||48988==a||49016==a||49044==a||49072==a||49100==a||49128==a||49156==a||49184==a||49212==a||49240==a||49268==a||49296==a||49324==a||49352==a||49380==a||49408==a||49436==a||49464==a||49492==a||49520==a||49548==a||49576==a||49604==a||49632==a||49660==a||49688==a||49716==a||49744==a||49772==a||49800==a||49828==a||49856==a||49884==a||49912==a||49940==a||49968==a||49996==a||50024==a||50052==a||50080==a||50108==a||50136==a||50164==a||50192==a||50220==a||50248==a||50276==a||50304==a||50332==a||50360==a||50388==a||50416==a||50444==a||50472==a||50500==a||50528==a||50556==a||50584==a||50612==a||50640==a||50668==a||50696==a||50724==a||50752==a||50780==a||50808==a||50836==a||50864==a||50892==a||50920==a||50948==a||50976==a||51004==a||51032==a||51060==a||51088==a||51116==a||51144==a||51172==a||51200==a||51228==a||51256==a||51284==a||51312==a||51340==a||51368==a||51396==a||51424==a||51452==a||51480==a||51508==a||51536==a||51564==a||51592==a||51620==a||51648==a||51676==a||51704==a||51732==a||51760==a||51788==a||51816==a||51844==a||51872==a||51900==a||51928==a||51956==a||51984==a||52012==a||52040==a||52068==a||52096==a||52124==a||52152==a||52180==a||52208==a||52236==a||52264==a||52292==a||52320==a||52348==a||52376==a||52404==a||52432==a||52460==a||52488==a||52516==a||52544==a||52572==a||52600==a||52628==a||52656==a||52684==a||52712==a||52740==a||52768==a||52796==a||52824==a||52852==a||52880==a||52908==a||52936==a||52964==a||52992==a||53020==a||53048==a||53076==a||53104==a||53132==a||53160==a||53188==a||53216==a||53244==a||53272==a||53300==a||53328==a||53356==a||53384==a||53412==a||53440==a||53468==a||53496==a||53524==a||53552==a||53580==a||53608==a||53636==a||53664==a||53692==a||53720==a||53748==a||53776==a||53804==a||53832==a||53860==a||53888==a||53916==a||53944==a||53972==a||54e3==a||54028==a||54056==a||54084==a||54112==a||54140==a||54168==a||54196==a||54224==a||54252==a||54280==a||54308==a||54336==a||54364==a||54392==a||54420==a||54448==a||54476==a||54504==a||54532==a||54560==a||54588==a||54616==a||54644==a||54672==a||54700==a||54728==a||54756==a||54784==a||54812==a||54840==a||54868==a||54896==a||54924==a||54952==a||54980==a||55008==a||55036==a||55064==a||55092==a||55120==a||55148==a||55176==a?9:44033<=a&&a<=44059||44061<=a&&a<=44087||44089<=a&&a<=44115||44117<=a&&a<=44143||44145<=a&&a<=44171||44173<=a&&a<=44199||44201<=a&&a<=44227||44229<=a&&a<=44255||44257<=a&&a<=44283||44285<=a&&a<=44311||44313<=a&&a<=44339||44341<=a&&a<=44367||44369<=a&&a<=44395||44397<=a&&a<=44423||44425<=a&&a<=44451||44453<=a&&a<=44479||44481<=a&&a<=44507||44509<=a&&a<=44535||44537<=a&&a<=44563||44565<=a&&a<=44591||44593<=a&&a<=44619||44621<=a&&a<=44647||44649<=a&&a<=44675||44677<=a&&a<=44703||44705<=a&&a<=44731||44733<=a&&a<=44759||44761<=a&&a<=44787||44789<=a&&a<=44815||44817<=a&&a<=44843||44845<=a&&a<=44871||44873<=a&&a<=44899||44901<=a&&a<=44927||44929<=a&&a<=44955||44957<=a&&a<=44983||44985<=a&&a<=45011||45013<=a&&a<=45039||45041<=a&&a<=45067||45069<=a&&a<=45095||45097<=a&&a<=45123||45125<=a&&a<=45151||45153<=a&&a<=45179||45181<=a&&a<=45207||45209<=a&&a<=45235||45237<=a&&a<=45263||45265<=a&&a<=45291||45293<=a&&a<=45319||45321<=a&&a<=45347||45349<=a&&a<=45375||45377<=a&&a<=45403||45405<=a&&a<=45431||45433<=a&&a<=45459||45461<=a&&a<=45487||45489<=a&&a<=45515||45517<=a&&a<=45543||45545<=a&&a<=45571||45573<=a&&a<=45599||45601<=a&&a<=45627||45629<=a&&a<=45655||45657<=a&&a<=45683||45685<=a&&a<=45711||45713<=a&&a<=45739||45741<=a&&a<=45767||45769<=a&&a<=45795||45797<=a&&a<=45823||45825<=a&&a<=45851||45853<=a&&a<=45879||45881<=a&&a<=45907||45909<=a&&a<=45935||45937<=a&&a<=45963||45965<=a&&a<=45991||45993<=a&&a<=46019||46021<=a&&a<=46047||46049<=a&&a<=46075||46077<=a&&a<=46103||46105<=a&&a<=46131||46133<=a&&a<=46159||46161<=a&&a<=46187||46189<=a&&a<=46215||46217<=a&&a<=46243||46245<=a&&a<=46271||46273<=a&&a<=46299||46301<=a&&a<=46327||46329<=a&&a<=46355||46357<=a&&a<=46383||46385<=a&&a<=46411||46413<=a&&a<=46439||46441<=a&&a<=46467||46469<=a&&a<=46495||46497<=a&&a<=46523||46525<=a&&a<=46551||46553<=a&&a<=46579||46581<=a&&a<=46607||46609<=a&&a<=46635||46637<=a&&a<=46663||46665<=a&&a<=46691||46693<=a&&a<=46719||46721<=a&&a<=46747||46749<=a&&a<=46775||46777<=a&&a<=46803||46805<=a&&a<=46831||46833<=a&&a<=46859||46861<=a&&a<=46887||46889<=a&&a<=46915||46917<=a&&a<=46943||46945<=a&&a<=46971||46973<=a&&a<=46999||47001<=a&&a<=47027||47029<=a&&a<=47055||47057<=a&&a<=47083||47085<=a&&a<=47111||47113<=a&&a<=47139||47141<=a&&a<=47167||47169<=a&&a<=47195||47197<=a&&a<=47223||47225<=a&&a<=47251||47253<=a&&a<=47279||47281<=a&&a<=47307||47309<=a&&a<=47335||47337<=a&&a<=47363||47365<=a&&a<=47391||47393<=a&&a<=47419||47421<=a&&a<=47447||47449<=a&&a<=47475||47477<=a&&a<=47503||47505<=a&&a<=47531||47533<=a&&a<=47559||47561<=a&&a<=47587||47589<=a&&a<=47615||47617<=a&&a<=47643||47645<=a&&a<=47671||47673<=a&&a<=47699||47701<=a&&a<=47727||47729<=a&&a<=47755||47757<=a&&a<=47783||47785<=a&&a<=47811||47813<=a&&a<=47839||47841<=a&&a<=47867||47869<=a&&a<=47895||47897<=a&&a<=47923||47925<=a&&a<=47951||47953<=a&&a<=47979||47981<=a&&a<=48007||48009<=a&&a<=48035||48037<=a&&a<=48063||48065<=a&&a<=48091||48093<=a&&a<=48119||48121<=a&&a<=48147||48149<=a&&a<=48175||48177<=a&&a<=48203||48205<=a&&a<=48231||48233<=a&&a<=48259||48261<=a&&a<=48287||48289<=a&&a<=48315||48317<=a&&a<=48343||48345<=a&&a<=48371||48373<=a&&a<=48399||48401<=a&&a<=48427||48429<=a&&a<=48455||48457<=a&&a<=48483||48485<=a&&a<=48511||48513<=a&&a<=48539||48541<=a&&a<=48567||48569<=a&&a<=48595||48597<=a&&a<=48623||48625<=a&&a<=48651||48653<=a&&a<=48679||48681<=a&&a<=48707||48709<=a&&a<=48735||48737<=a&&a<=48763||48765<=a&&a<=48791||48793<=a&&a<=48819||48821<=a&&a<=48847||48849<=a&&a<=48875||48877<=a&&a<=48903||48905<=a&&a<=48931||48933<=a&&a<=48959||48961<=a&&a<=48987||48989<=a&&a<=49015||49017<=a&&a<=49043||49045<=a&&a<=49071||49073<=a&&a<=49099||49101<=a&&a<=49127||49129<=a&&a<=49155||49157<=a&&a<=49183||49185<=a&&a<=49211||49213<=a&&a<=49239||49241<=a&&a<=49267||49269<=a&&a<=49295||49297<=a&&a<=49323||49325<=a&&a<=49351||49353<=a&&a<=49379||49381<=a&&a<=49407||49409<=a&&a<=49435||49437<=a&&a<=49463||49465<=a&&a<=49491||49493<=a&&a<=49519||49521<=a&&a<=49547||49549<=a&&a<=49575||49577<=a&&a<=49603||49605<=a&&a<=49631||49633<=a&&a<=49659||49661<=a&&a<=49687||49689<=a&&a<=49715||49717<=a&&a<=49743||49745<=a&&a<=49771||49773<=a&&a<=49799||49801<=a&&a<=49827||49829<=a&&a<=49855||49857<=a&&a<=49883||49885<=a&&a<=49911||49913<=a&&a<=49939||49941<=a&&a<=49967||49969<=a&&a<=49995||49997<=a&&a<=50023||50025<=a&&a<=50051||50053<=a&&a<=50079||50081<=a&&a<=50107||50109<=a&&a<=50135||50137<=a&&a<=50163||50165<=a&&a<=50191||50193<=a&&a<=50219||50221<=a&&a<=50247||50249<=a&&a<=50275||50277<=a&&a<=50303||50305<=a&&a<=50331||50333<=a&&a<=50359||50361<=a&&a<=50387||50389<=a&&a<=50415||50417<=a&&a<=50443||50445<=a&&a<=50471||50473<=a&&a<=50499||50501<=a&&a<=50527||50529<=a&&a<=50555||50557<=a&&a<=50583||50585<=a&&a<=50611||50613<=a&&a<=50639||50641<=a&&a<=50667||50669<=a&&a<=50695||50697<=a&&a<=50723||50725<=a&&a<=50751||50753<=a&&a<=50779||50781<=a&&a<=50807||50809<=a&&a<=50835||50837<=a&&a<=50863||50865<=a&&a<=50891||50893<=a&&a<=50919||50921<=a&&a<=50947||50949<=a&&a<=50975||50977<=a&&a<=51003||51005<=a&&a<=51031||51033<=a&&a<=51059||51061<=a&&a<=51087||51089<=a&&a<=51115||51117<=a&&a<=51143||51145<=a&&a<=51171||51173<=a&&a<=51199||51201<=a&&a<=51227||51229<=a&&a<=51255||51257<=a&&a<=51283||51285<=a&&a<=51311||51313<=a&&a<=51339||51341<=a&&a<=51367||51369<=a&&a<=51395||51397<=a&&a<=51423||51425<=a&&a<=51451||51453<=a&&a<=51479||51481<=a&&a<=51507||51509<=a&&a<=51535||51537<=a&&a<=51563||51565<=a&&a<=51591||51593<=a&&a<=51619||51621<=a&&a<=51647||51649<=a&&a<=51675||51677<=a&&a<=51703||51705<=a&&a<=51731||51733<=a&&a<=51759||51761<=a&&a<=51787||51789<=a&&a<=51815||51817<=a&&a<=51843||51845<=a&&a<=51871||51873<=a&&a<=51899||51901<=a&&a<=51927||51929<=a&&a<=51955||51957<=a&&a<=51983||51985<=a&&a<=52011||52013<=a&&a<=52039||52041<=a&&a<=52067||52069<=a&&a<=52095||52097<=a&&a<=52123||52125<=a&&a<=52151||52153<=a&&a<=52179||52181<=a&&a<=52207||52209<=a&&a<=52235||52237<=a&&a<=52263||52265<=a&&a<=52291||52293<=a&&a<=52319||52321<=a&&a<=52347||52349<=a&&a<=52375||52377<=a&&a<=52403||52405<=a&&a<=52431||52433<=a&&a<=52459||52461<=a&&a<=52487||52489<=a&&a<=52515||52517<=a&&a<=52543||52545<=a&&a<=52571||52573<=a&&a<=52599||52601<=a&&a<=52627||52629<=a&&a<=52655||52657<=a&&a<=52683||52685<=a&&a<=52711||52713<=a&&a<=52739||52741<=a&&a<=52767||52769<=a&&a<=52795||52797<=a&&a<=52823||52825<=a&&a<=52851||52853<=a&&a<=52879||52881<=a&&a<=52907||52909<=a&&a<=52935||52937<=a&&a<=52963||52965<=a&&a<=52991||52993<=a&&a<=53019||53021<=a&&a<=53047||53049<=a&&a<=53075||53077<=a&&a<=53103||53105<=a&&a<=53131||53133<=a&&a<=53159||53161<=a&&a<=53187||53189<=a&&a<=53215||53217<=a&&a<=53243||53245<=a&&a<=53271||53273<=a&&a<=53299||53301<=a&&a<=53327||53329<=a&&a<=53355||53357<=a&&a<=53383||53385<=a&&a<=53411||53413<=a&&a<=53439||53441<=a&&a<=53467||53469<=a&&a<=53495||53497<=a&&a<=53523||53525<=a&&a<=53551||53553<=a&&a<=53579||53581<=a&&a<=53607||53609<=a&&a<=53635||53637<=a&&a<=53663||53665<=a&&a<=53691||53693<=a&&a<=53719||53721<=a&&a<=53747||53749<=a&&a<=53775||53777<=a&&a<=53803||53805<=a&&a<=53831||53833<=a&&a<=53859||53861<=a&&a<=53887||53889<=a&&a<=53915||53917<=a&&a<=53943||53945<=a&&a<=53971||53973<=a&&a<=53999||54001<=a&&a<=54027||54029<=a&&a<=54055||54057<=a&&a<=54083||54085<=a&&a<=54111||54113<=a&&a<=54139||54141<=a&&a<=54167||54169<=a&&a<=54195||54197<=a&&a<=54223||54225<=a&&a<=54251||54253<=a&&a<=54279||54281<=a&&a<=54307||54309<=a&&a<=54335||54337<=a&&a<=54363||54365<=a&&a<=54391||54393<=a&&a<=54419||54421<=a&&a<=54447||54449<=a&&a<=54475||54477<=a&&a<=54503||54505<=a&&a<=54531||54533<=a&&a<=54559||54561<=a&&a<=54587||54589<=a&&a<=54615||54617<=a&&a<=54643||54645<=a&&a<=54671||54673<=a&&a<=54699||54701<=a&&a<=54727||54729<=a&&a<=54755||54757<=a&&a<=54783||54785<=a&&a<=54811||54813<=a&&a<=54839||54841<=a&&a<=54867||54869<=a&&a<=54895||54897<=a&&a<=54923||54925<=a&&a<=54951||54953<=a&&a<=54979||54981<=a&&a<=55007||55009<=a&&a<=55035||55037<=a&&a<=55063||55065<=a&&a<=55091||55093<=a&&a<=55119||55121<=a&&a<=55147||55149<=a&&a<=55175||55177<=a&&a<=55203?10:9757==a||9977==a||9994<=a&&a<=9997||127877==a||127938<=a&&a<=127940||127943==a||127946<=a&&a<=127948||128066<=a&&a<=128067||128070<=a&&a<=128080||128110==a||128112<=a&&a<=128120||128124==a||128129<=a&&a<=128131||128133<=a&&a<=128135||128170==a||128372<=a&&a<=128373||128378==a||128400==a||128405<=a&&a<=128406||128581<=a&&a<=128583||128587<=a&&a<=128591||128675==a||128692<=a&&a<=128694||128704==a||128716==a||129304<=a&&a<=129308||129310<=a&&a<=129311||129318==a||129328<=a&&a<=129337||129341<=a&&a<=129342||129489<=a&&a<=129501?i:127995<=a&&a<=127999?14:8205==a?15:9792==a||9794==a||9877<=a&&a<=9878||9992==a||10084==a||127752==a||127806==a||127859==a||127891==a||127908==a||127912==a||127979==a||127981==a||128139==a||128187<=a&&a<=128188||128295==a||128300==a||128488==a||128640==a||128658==a?r:128102<=a&&a<=128105?o:11}return this.nextBreak=function(e,t){if(void 0===t&&(t=0),t<0)return 0;if(t>=e.length-1)return e.length;for(var n,i,r=c(a(e,t)),o=[],l=t+1;l<e.length;l++)if(i=l-1,!(55296<=(n=e).charCodeAt(i)&&n.charCodeAt(i)<=56319&&56320<=n.charCodeAt(i+1)&&n.charCodeAt(i+1)<=57343)){var u=c(a(e,l));if(s(r,o,u))return l;o.push(u)}return e.length},this.splitGraphemes=function(e){for(var t,n=[],i=0;(t=this.nextBreak(e,i))<e.length;)n.push(e.slice(i,t)),i=t;return i<e.length&&n.push(e.slice(i)),n},this.iterateGraphemes=function(e){var t=0,n={next:function(){var n,i;return(i=this.nextBreak(e,t))<e.length?(n=e.slice(t,i),t=i,{value:n,done:!1}):t<e.length?(n=e.slice(t),t=e.length,{value:n,done:!1}):{value:void 0,done:!0}}.bind(this)};return"undefined"!==typeof Symbol&&Symbol.iterator&&(n[Symbol.iterator]=function(){return n}),n},this.countGraphemes=function(e){for(var t,n=0,i=0;(t=this.nextBreak(e,i))<e.length;)i=t,n++;return i<e.length&&n++,n},this};function m$(){this.textureInfo=void 0,this.dimensions=void 0,this.billboard=void 0}function g$(e,t,n){this.labelCollection=e,this.index=t,this.dimensions=n}var v$=new Mt(4,4),_$=new bl(1,1,1,1);var b$={};function y$(e,t,n,i,r,o,a){return b$.font=t,b$.fillColor=n,b$.strokeColor=i,b$.strokeWidth=r,b$.padding=qq.PADDING,a===oP.CENTER?b$.textBaseline="middle":a===oP.TOP?b$.textBaseline="top":b$.textBaseline="bottom",b$.fill=o===ZY.FILL||o===ZY.FILL_AND_OUTLINE,b$.stroke=o===ZY.OUTLINE||o===ZY.FILL_AND_OUTLINE,b$.backgroundColor=Hf.BLACK,OE(e,b$)}function w$(e,t){t.textureInfo=void 0,t.dimensions=void 0;var n=t.billboard;Object(o.a)(n)&&(n.show=!1,n.image=void 0,Object(o.a)(n._removeCallbackFunc)&&(n._removeCallbackFunc(),n._removeCallbackFunc=void 0),e._spareBillboards.push(n),t.billboard=void 0)}function O$(e,t,n,i){e.addImage(t,n).then((function(e){i.index=e}))}var C$=new p$;function E$(e,t){var n,i,r,a=t._renderedText,s=C$.splitGraphemes(a),c=s.length,l=t._glyphs,u=l.length;if(t._relativeSize=t._fontSize/qq.FONT_SIZE,c<u)for(i=c;i<u;++i)w$(e,l[i]);l.length=c;var h=t._showBackground&&a.split("\n").join("").length>0,d=t._backgroundBillboard,f=e._backgroundBillboardCollection;h?(Object(o.a)(d)||(d=f.add({collection:e,image:"ID_WHITE_PIXEL",imageSubRegion:_$}),t._backgroundBillboard=d),d.color=t._backgroundColor,d.show=t._show,d.position=t._position,d.eyeOffset=t._eyeOffset,d.pixelOffset=t._pixelOffset,d.horizontalOrigin=rP.LEFT,d.verticalOrigin=t._verticalOrigin,d.heightReference=t._heightReference,d.scale=t.totalScale,d.pickPrimitive=t,d.id=t._id,d.translucencyByDistance=t._translucencyByDistance,d.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,d.scaleByDistance=t._scaleByDistance,d.distanceDisplayCondition=t._distanceDisplayCondition,d.disableDepthTestDistance=t._disableDepthTestDistance):Object(o.a)(d)&&(f.remove(d),t._backgroundBillboard=d=void 0);var p=e._glyphTextureCache;for(r=0;r<c;++r){var m=s[r],g=t._verticalOrigin,v=JSON.stringify([m,t._fontFamily,t._fontStyle,t._fontWeight,+g]),_=p[v];if(!Object(o.a)(_)){var b=y$(m,t._fontStyle+" "+t._fontWeight+" "+qq.FONT_SIZE+"px "+t._fontFamily,Hf.WHITE,Hf.WHITE,0,ZY.FILL,g);if(_=new g$(e,-1,b.dimensions),p[v]=_,b.width>0&&b.height>0){for(var y=QY(b,{cutoff:qq.CUTOFF,radius:qq.RADIUS}),w=b.getContext("2d"),O=b.width,C=b.height,E=w.getImageData(0,0,O,C),A=0;A<O;A++)for(var x=0;x<C;x++){var T=x*O+A,S=255*y[T],D=4*T;E.data[D+0]=S,E.data[D+1]=S,E.data[D+2]=S,E.data[D+3]=S}w.putImageData(E,0,0)," "!==m&&O$(e._textureAtlas,v,b,_)}}if(n=l[r],Object(o.a)(n)?-1===_.index?w$(e,n):Object(o.a)(n.textureInfo)&&(n.textureInfo=void 0):(n=new m$,l[r]=n),n.textureInfo=_,n.dimensions=_.dimensions,-1!==_.index){var P=n.billboard,I=e._spareBillboards;Object(o.a)(P)||(I.length>0?P=I.pop():((P=e._billboardCollection.add({collection:e}))._labelDimensions=new Mt,P._labelTranslate=new Mt),n.billboard=P),P.show=t._show,P.position=t._position,P.eyeOffset=t._eyeOffset,P.pixelOffset=t._pixelOffset,P.horizontalOrigin=rP.LEFT,P.verticalOrigin=t._verticalOrigin,P.heightReference=t._heightReference,P.scale=t.totalScale,P.pickPrimitive=t,P.id=t._id,P.image=v,P.translucencyByDistance=t._translucencyByDistance,P.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,P.scaleByDistance=t._scaleByDistance,P.distanceDisplayCondition=t._distanceDisplayCondition,P.disableDepthTestDistance=t._disableDepthTestDistance,P._batchIndex=t._batchIndex,P.outlineColor=t.outlineColor,t.style===ZY.FILL_AND_OUTLINE?(P.color=t._fillColor,P.outlineWidth=t.outlineWidth):t.style===ZY.FILL?(P.color=t._fillColor,P.outlineWidth=0):t.style===ZY.OUTLINE&&(P.color=Hf.TRANSPARENT,P.outlineWidth=t.outlineWidth)}}t._repositionAllGlyphs=!0}function A$(e,t,n){return t===rP.CENTER?-e/2:t===rP.RIGHT?-(e+n.x):n.x}var x$=new Mt,T$=new Mt;function S$(e){var t,n,i,r=e._glyphs,a=e._renderedText,s=0,c=0,l=[],u=Number.NEGATIVE_INFINITY,h=0,d=1,f=r.length,p=e._backgroundBillboard,m=Mt.clone(Object(o.a)(p)?e._backgroundPadding:Mt.ZERO,T$);for(m.x/=e._relativeSize,m.y/=e._relativeSize,i=0;i<f;++i)"\n"===a.charAt(i)?(l.push(s),++d,s=0):(n=(t=r[i]).dimensions,h=Math.max(h,n.height-n.descent),u=Math.max(u,n.descent),s+=n.width-n.bounds.minx,i<f-1&&(s+=r[i+1].dimensions.bounds.minx),c=Math.max(c,s));l.push(s);var g=h+u,v=e.totalScale,_=e._horizontalOrigin,b=e._verticalOrigin,y=0,w=l[y],O=A$(w,_,m),C=1.2*g,E=C*(d-1),A=c,x=g+E;Object(o.a)(p)&&(A+=2*m.x,x+=2*m.y,p._labelHorizontalOrigin=_),x$.x=O*v,x$.y=0;var T=!0,S=0;for(i=0;i<f;++i)if("\n"===a.charAt(i))S+=C,O=A$(w=l[++y],_,m),x$.x=O*v,T=!0;else if(n=(t=r[i]).dimensions,b===oP.TOP?(x$.y=n.height-h-m.y,x$.y+=qq.PADDING):b===oP.CENTER?x$.y=(E+n.height-h)/2:b===oP.BASELINE?(x$.y=E,x$.y-=qq.PADDING):(x$.y=E+u+m.y,x$.y-=qq.PADDING),x$.y=(x$.y-n.descent-S)*v,T&&(x$.x-=qq.PADDING*v,T=!1),Object(o.a)(t.billboard)&&(t.billboard._setTranslate(x$),t.billboard._labelDimensions.x=A,t.billboard._labelDimensions.y=x,t.billboard._labelHorizontalOrigin=_),i<f-1){var D=r[i+1];x$.x+=(n.width-n.bounds.minx+D.dimensions.bounds.minx)*v}if(Object(o.a)(p)&&a.split("\n").join("").length>0&&(O=_===rP.CENTER?-c/2-m.x:_===rP.RIGHT?-(c+2*m.x):0,x$.x=O*v,b===oP.TOP?x$.y=g-h-u:b===oP.CENTER?x$.y=(g-h)/2-u:b===oP.BASELINE?x$.y=-m.y-u:x$.y=0,x$.y=x$.y*v,p.width=A,p.height=x,p._setTranslate(x$),p._labelTranslate=Mt.clone(x$,p._labelTranslate)),e.heightReference===iP.CLAMP_TO_GROUND)for(i=0;i<f;++i){var P=(t=r[i]).billboard;Object(o.a)(P)&&(P._labelTranslate=Mt.clone(x$,P._labelTranslate))}}function D$(e,t){for(var n=t._glyphs,i=0,r=n.length;i<r;++i)w$(e,n[i]);Object(o.a)(t._backgroundBillboard)&&(e._backgroundBillboardCollection.remove(t._backgroundBillboard),t._backgroundBillboard=void 0),t._labelCollection=void 0,Object(o.a)(t._removeCallbackFunc)&&t._removeCallbackFunc(),Ks(t)}function P$(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._scene=e.scene,this._batchTable=e.batchTable,this._textureAtlas=void 0,this._backgroundTextureAtlas=void 0,this._whitePixelIndex=void 0,this._backgroundBillboardCollection=new VY({scene:this._scene}),this._backgroundBillboardCollection.destroyTextureAtlas=!1,this._billboardCollection=new VY({scene:this._scene,batchTable:this._batchTable}),this._billboardCollection.destroyTextureAtlas=!1,this._billboardCollection._sdf=!0,this._spareBillboards=[],this._glyphTextureCache={},this._labels=[],this._labelsToUpdate=[],this._totalGlyphCount=0,this._highlightColor=Hf.clone(Hf.WHITE),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.blendOption=Object(r.a)(e.blendOption,Gq.OPAQUE_AND_TRANSLUCENT)}Object.defineProperties(P$.prototype,{length:{get:function(){return this._labels.length}}}),P$.prototype.add=function(e){var t=new f$(e,this);return this._labels.push(t),this._labelsToUpdate.push(t),t},P$.prototype.remove=function(e){if(Object(o.a)(e)&&e._labelCollection===this){var t=this._labels.indexOf(e);if(-1!==t)return this._labels.splice(t,1),D$(this,e),!0}return!1},P$.prototype.removeAll=function(){for(var e=this._labels,t=0,n=e.length;t<n;++t)D$(this,e[t]);e.length=0},P$.prototype.contains=function(e){return Object(o.a)(e)&&e._labelCollection===this},P$.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._labels[e]},P$.prototype.update=function(e){var t=this._billboardCollection,n=this._backgroundBillboardCollection;t.modelMatrix=this.modelMatrix,t.debugShowBoundingVolume=this.debugShowBoundingVolume,n.modelMatrix=this.modelMatrix,n.debugShowBoundingVolume=this.debugShowBoundingVolume;var i=e.context;Object(o.a)(this._textureAtlas)||(this._textureAtlas=new Jq({context:i}),t.textureAtlas=this._textureAtlas),Object(o.a)(this._backgroundTextureAtlas)||(this._backgroundTextureAtlas=new Jq({context:i,initialSize:v$}),n.textureAtlas=this._backgroundTextureAtlas,function(e,t){var n=document.createElement("canvas");n.width=v$.x,n.height=v$.y;var i=n.getContext("2d");i.fillStyle="#fff",i.fillRect(0,0,n.width,n.height),e.addImage("ID_WHITE_PIXEL",n).then((function(e){t._whitePixelIndex=e}))}(this._backgroundTextureAtlas,this));for(var r=this._labelsToUpdate.length,a=0;a<r;++a){var s=this._labelsToUpdate[a];if(!s.isDestroyed()){var c=s._glyphs.length;s._rebindAllGlyphs&&(E$(this,s),s._rebindAllGlyphs=!1),s._repositionAllGlyphs&&(S$(s),s._repositionAllGlyphs=!1);var l=s._glyphs.length-c;this._totalGlyphCount+=l}}var u=n.length>0?Gq.TRANSLUCENT:this.blendOption;t.blendOption=u,n.blendOption=u,t._highlightColor=this._highlightColor,n._highlightColor=this._highlightColor,this._labelsToUpdate.length=0,n.update(e),t.update(e)},P$.prototype.isDestroyed=function(){return!1},P$.prototype.destroy=function(){return this.removeAll(),this._billboardCollection=this._billboardCollection.destroy(),this._textureAtlas=this._textureAtlas&&this._textureAtlas.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),this._backgroundTextureAtlas=this._backgroundTextureAtlas&&this._backgroundTextureAtlas.destroy(),Ks(this)};var I$=P$;function M$(e,t){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._show=Object(r.a)(e.show,!0),this._width=Object(r.a)(e.width,1),this._loop=Object(r.a)(e.loop,!1),this._distanceDisplayCondition=e.distanceDisplayCondition,this._material=e.material,Object(o.a)(this._material)||(this._material=mI.fromType(mI.ColorType,{color:new Hf(1,1,1,1)}));var n,i=e.positions;Object(o.a)(i)||(i=[]),this._positions=i,this._actualPositions=rl(i,O.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=i.slice()),this._actualPositions.push(O.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id,Object(o.a)(t)&&(n=Ae.clone(t.modelMatrix)),this._modelMatrix=n,this._segments=yg.wrapLongitude(this._actualPositions,n),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(k$),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=gt.fromPoints(this._actualPositions),this._boundingVolumeWC=gt.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new gt}var R$=M$.POSITION_INDEX=0,L$=M$.SHOW_INDEX=1,j$=M$.WIDTH_INDEX=2,F$=M$.MATERIAL_INDEX=3,N$=M$.POSITION_SIZE_INDEX=4,z$=M$.DISTANCE_DISPLAY_CONDITION=5,k$=M$.NUMBER_OF_PROPERTIES=6;function B$(e,t){++e._propertiesChanged[t];var n=e._polylineCollection;Object(o.a)(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(M$.prototype,{show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");e!==this._show&&(this._show=e,B$(this,L$))}},positions:{get:function(){return this._positions},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=rl(e,O.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(O.clone(t[0]))),this._actualPositions.length===t.length&&this._actualPositions.length===this._length||B$(this,N$),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=gt.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=gt.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),B$(this,R$),this.update()}},material:{get:function(){return this._material},set:function(e){if(!Object(o.a)(e))throw new a.a("material is required.");this._material!==e&&(this._material=e,B$(this,F$))}},width:{get:function(){return this._width},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");e!==this._width&&(this._width=e,B$(this,j$))}},loop:{get:function(){return this._loop},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(e!==this._loop){var t=this._actualPositions;e?t.length>2&&!O.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(O.clone(t[0]))):t.length>2&&O.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,B$(this,N$)}}},id:{get:function(){return this._id},set:function(e){this._id=e,Object(o.a)(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!Object(o.a)(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");$_.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=$_.clone(e,this._distanceDisplayCondition),B$(this,z$))}}}),M$.prototype.update=function(){var e=Ae.IDENTITY;Object(o.a)(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);var t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[R$]>0||this._propertiesChanged[N$]>0;if(Ae.equals(e,this._modelMatrix)&&!i||(this._segments=yg.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=gt.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=Ae.clone(e,this._modelMatrix),this._segments.positions.length!==t)B$(this,N$);else for(var r=n.length,a=0;a<r;++a)if(n[a]!==this._segments.lengths[a]){B$(this,N$);break}},M$.prototype.getPickId=function(e){return Object(o.a)(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId},M$.prototype._clean=function(){this._dirty=!1;for(var e=this._propertiesChanged,t=0;t<k$-1;++t)e[t]=0},M$.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var H$=M$,V$=H$.SHOW_INDEX,U$=H$.WIDTH_INDEX,W$=H$.POSITION_INDEX,G$=H$.MATERIAL_INDEX,q$=H$.POSITION_SIZE_INDEX,Y$=H$.DISTANCE_DISPLAY_CONDITION,$$=H$.NUMBER_OF_PROPERTIES,X$={texCoordExpandAndBatchIndex:0,position3DHigh:1,position3DLow:2,position2DHigh:3,position2DLow:4,prevPosition3DHigh:5,prevPosition3DLow:6,prevPosition2DHigh:7,prevPosition2DLow:8,nextPosition3DHigh:9,nextPosition3DLow:10,nextPosition2DHigh:11,nextPosition2DLow:12};function K$(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=Ae.clone(Ae.IDENTITY),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this._opaqueRS=void 0,this._translucentRS=void 0,this._colorCommands=[],this._polylinesUpdated=!1,this._polylinesRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array($$),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:iR.STATIC_DRAW,frameCount:0},this._mode=void 0,this._polylinesToUpdate=[],this._vertexArrays=[],this._positionBuffer=void 0,this._texCoordExpandAndBatchIndexBuffer=void 0,this._batchTable=void 0,this._createBatchTable=!1,this._useHighlightColor=!1,this._highlightColor=Hf.clone(Hf.WHITE);var t=this;this._uniformMap={u_highlightColor:function(){return t._highlightColor}}}Object.defineProperties(K$.prototype,{length:{get:function(){return sX(this),this._polylines.length}}}),K$.prototype.add=function(e){var t=new H$(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t},K$.prototype.remove=function(e){if(this.contains(e)){if(this._polylinesRemoved=!0,this._createVertexArray=!0,this._createBatchTable=!0,Object(o.a)(e._bucket)){var t=e._bucket;t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()}return e._destroy(),!0}return!1},K$.prototype.removeAll=function(){cX(this),uX(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0},K$.prototype.contains=function(e){return Object(o.a)(e)&&e._polylineCollection===this},K$.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return sX(this),this._polylines[e]};var Q$=new vh,Z$=new he,J$=new Mt;K$.prototype.update=function(e){if(sX(this),0!==this._polylines.length){!function(e,t){var n=t.mode;e._mode===n&&Ae.equals(e._modelMatrix,e.modelMatrix)||(e._mode=n,e._modelMatrix=Ae.clone(e.modelMatrix),e._createVertexArray=!0)}(this,e);var t,n=e.context,i=e.mapProjection,r=this._propertiesChanged;if(this._createBatchTable){if(0===BP.maximumVertexTextureImageUnits)throw new de.a("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");!function(e,t){Object(o.a)(e._batchTable)&&e._batchTable.destroy();var n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:Ds.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:Ds.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:Ds.FLOAT,componentsPerAttribute:2}];e._batchTable=new bR(t,n,e._polylines.length)}(this,n),this._createBatchTable=!1}if(this._createVertexArray||function(e){var t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;n[W$]?i.bufferUsage!==iR.STREAM_DRAW?(t=!0,i.bufferUsage=iR.STREAM_DRAW,i.frameCount=100):i.frameCount=100:i.bufferUsage!==iR.STATIC_DRAW&&(0===i.frameCount?(t=!0,i.bufferUsage=iR.STATIC_DRAW):i.frameCount--);return t}(this))iX(this,n,i);else if(this._polylinesUpdated){var a=this._polylinesToUpdate;if(this._mode!==IR.SCENE3D)for(var s=a.length,c=0;c<s;++c)(t=a[c]).update();if(r[q$]||r[G$])iX(this,n,i);else for(var l=a.length,u=this._polylineBuckets,h=0;h<l;++h){r=(t=a[h])._propertiesChanged;var d=t._bucket,f=0;for(var p in u)if(u.hasOwnProperty(p)){if(u[p]===d){r[W$]&&d.writeUpdate(f,t,this._positionBuffer,i);break}f+=u[p].lengthOfPositions}if((r[V$]||r[U$])&&this._batchTable.setBatchedAttribute(t._index,0,new Mt(t._width,t._show)),this._batchTable.attributes.length>2){if(r[W$]||r[q$]){var m=e.mode===IR.SCENE2D?t._boundingVolume2D:t._boundingVolumeWC,g=vh.fromCartesian(m.center,Q$),v=he.fromElements(g.low.x,g.low.y,g.low.z,m.radius,Z$);this._batchTable.setBatchedAttribute(t._index,2,g.high),this._batchTable.setBatchedAttribute(t._index,3,v)}if(r[Y$]){var _=J$;_.x=0,_.y=Number.MAX_VALUE;var b=t.distanceDisplayCondition;Object(o.a)(b)&&(_.x=b.near,_.y=b.far),this._batchTable.setBatchedAttribute(t._index,4,_)}}t._clean()}a.length=0,this._polylinesUpdated=!1}r=this._propertiesChanged;for(var y=0;y<$$;++y)r[y]=0;var w=Ae.IDENTITY;e.mode===IR.SCENE3D&&(w=this.modelMatrix);var O=e.passes,C=0!==e.morphTime;if(Object(o.a)(this._opaqueRS)&&this._opaqueRS.depthTest.enabled===C||(this._opaqueRS=XI.fromCache({depthMask:C,depthTest:{enabled:C}})),Object(o.a)(this._translucentRS)&&this._translucentRS.depthTest.enabled===C||(this._translucentRS=XI.fromCache({blending:LP.ALPHA_BLEND,depthMask:!C,depthTest:{enabled:C}})),this._batchTable.update(e),O.render||O.pick)!function(e,t,n,i){for(var r=t.context,a=t.commandList,s=n.length,c=0,l=!0,u=e._vertexArrays,h=e.debugShowBoundingVolume,d=e._batchTable.getUniformMapCallback(),f=u.length,p=0;p<f;++p)for(var m=u[p],g=m.buckets,v=g.length,_=0;_<v;++_){for(var b,y,w,O,C=g[_],E=C.offset,A=C.bucket.shaderProgram,x=C.bucket.polylines,T=x.length,S=0,D=0;D<T;++D){var P=x[D],I=aX(P._material);if(I!==b){if(Object(o.a)(b)&&S>0){var M=y.isTranslucent();c>=s?(w=new CI({owner:e}),n.push(w)):w=n[c],++c,O=Object(Wf.a)(d(y._uniforms),e._uniformMap),w.boundingVolume=gt.clone(eX,w.boundingVolume),w.modelMatrix=i,w.shaderProgram=A,w.vertexArray=m.va,w.renderState=M?e._translucentRS:e._opaqueRS,w.pass=M?EI.TRANSLUCENT:EI.OPAQUE,w.debugShowBoundingVolume=h,w.pickId="v_pickColor",w.uniformMap=O,w.count=S,w.offset=E,E+=S,S=0,l=!0,a.push(w)}(y=P._material).update(r),b=I}for(var R,L=P._locatorBuckets,j=L.length,F=0;F<j;++F){var N=L[F];N.locator===C&&(S+=N.count)}t.mode===IR.SCENE3D?R=P._boundingVolumeWC:t.mode===IR.COLUMBUS_VIEW?R=P._boundingVolume2D:t.mode===IR.SCENE2D?Object(o.a)(P._boundingVolume2D)&&((R=gt.clone(P._boundingVolume2D,tX)).center.x=0):Object(o.a)(P._boundingVolumeWC)&&Object(o.a)(P._boundingVolume2D)&&(R=gt.union(P._boundingVolumeWC,P._boundingVolume2D,tX)),l?(l=!1,gt.clone(R,eX)):gt.union(R,eX,eX)}Object(o.a)(b)&&S>0&&(c>=s?(w=new CI({owner:e}),n.push(w)):w=n[c],++c,O=Object(Wf.a)(d(y._uniforms),e._uniformMap),w.boundingVolume=gt.clone(eX,w.boundingVolume),w.modelMatrix=i,w.shaderProgram=A,w.vertexArray=m.va,w.renderState=y.isTranslucent()?e._translucentRS:e._opaqueRS,w.pass=y.isTranslucent()?EI.TRANSLUCENT:EI.OPAQUE,w.debugShowBoundingVolume=h,w.pickId="v_pickColor",w.uniformMap=O,w.count=S,w.offset=E,l=!0,a.push(w)),b=void 0}n.length=c}(this,e,this._colorCommands,w)}};var eX=new gt,tX=new gt;K$.prototype.isDestroyed=function(){return!1},K$.prototype.destroy=function(){return lX(this),cX(this),uX(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var nX=[0,0,0];function iX(e,t,n){e._createVertexArray=!1,cX(e),lX(e),function(e){for(var t=e._mode,n=e._modelMatrix,i=e._polylineBuckets={},r=e._polylines,a=r.length,s=0;s<a;++s){var c=r[s];if(c._actualPositions.length>1){c.update();var l=c.material,u=i[l.type];Object(o.a)(u)||(u=i[l.type]=new dX(l,t,n)),u.addPolyline(c)}}}(e);var i,r,a=[[]],s=a[0],c=e._batchTable,l=e._useHighlightColor,u=[0],h=0,f=[[]],p=0,m=e._polylineBuckets;for(i in m)m.hasOwnProperty(i)&&((r=m[i]).updateShader(t,c,l),p+=r.lengthOfPositions);if(p>0){var g,v=e._mode,_=new Float32Array(6*p*3),b=new Float32Array(4*p),y=0,w=0,O=0;for(i in m)if(m.hasOwnProperty(i)){(r=m[i]).write(_,b,y,w,O,c,t,n),v===IR.MORPHING&&(Object(o.a)(g)||(g=new Float32Array(6*p*3)),r.writeForMorph(g,y));var C=r.lengthOfPositions;y+=6*C*3,w+=4*C,O+=4*C,h=r.updateIndices(a,u,f,h)}var E,A=e._positionBufferUsage.bufferUsage,x=iR.STATIC_DRAW;e._positionBuffer=oR.createVertexBuffer({context:t,typedArray:_,usage:A}),Object(o.a)(g)&&(E=oR.createVertexBuffer({context:t,typedArray:g,usage:A})),e._texCoordExpandAndBatchIndexBuffer=oR.createVertexBuffer({context:t,typedArray:b,usage:x});for(var T=3*Float32Array.BYTES_PER_ELEMENT,S=4*Float32Array.BYTES_PER_ELEMENT,D=0,P=a.length,I=0;I<P;++I)if((s=a[I]).length>0){var M=new Uint16Array(s),R=oR.createIndexBuffer({context:t,typedArray:M,usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT});D+=u[I];var L,j,F,N,z=6*(I*(T*d.SIXTY_FOUR_KILOBYTES)-D*T),k=T+z,B=T+k,H=T+B,V=T+H,U=T+V,W=I*(S*d.SIXTY_FOUR_KILOBYTES)-D*S,G=[{index:X$.position3DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:z,strideInBytes:6*T},{index:X$.position3DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:k,strideInBytes:6*T},{index:X$.position2DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:z,strideInBytes:6*T},{index:X$.position2DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:k,strideInBytes:6*T},{index:X$.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:B,strideInBytes:6*T},{index:X$.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:H,strideInBytes:6*T},{index:X$.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:B,strideInBytes:6*T},{index:X$.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:H,strideInBytes:6*T},{index:X$.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:V,strideInBytes:6*T},{index:X$.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:U,strideInBytes:6*T},{index:X$.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:V,strideInBytes:6*T},{index:X$.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,offsetInBytes:U,strideInBytes:6*T},{index:X$.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:W}];v===IR.SCENE3D?(L=e._positionBuffer,j="vertexBuffer",F=nX,N="value"):v===IR.SCENE2D||v===IR.COLUMBUS_VIEW?(L=nX,j="value",F=e._positionBuffer,N="vertexBuffer"):(L=E,j="vertexBuffer",F=e._positionBuffer,N="vertexBuffer"),G[0][j]=L,G[1][j]=L,G[2][N]=F,G[3][N]=F,G[4][j]=L,G[5][j]=L,G[6][N]=F,G[7][N]=F,G[8][j]=L,G[9][j]=L,G[10][N]=F,G[11][N]=F;var q=new hR({context:t,attributes:G,indexBuffer:R});e._vertexArrays.push({va:q,buckets:f[I]})}}}function rX(e,t){return t instanceof nI?t.id:t}var oX=[];function aX(e){var t=mI._uniformList[e.type],n=t.length;oX.length=2*n;for(var i=0,r=0;r<n;++r){var o=t[r];oX[i]=o,oX[i+1]=e._uniforms[o](),i+=2}return e.type+":"+JSON.stringify(oX,rX)}function sX(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;for(var t,n=[],i=[],r=0,o=e._polylines.length,a=0;a<o;++a)(t=e._polylines[a]).isDestroyed||(t._index=r++,i.push(t),n.push(t));e._polylines=n,e._polylinesToUpdate=i}}function cX(e){for(var t=e._polylines,n=t.length,i=0;i<n;++i)if(!t[i].isDestroyed){var r=t[i]._bucket;Object(o.a)(r)&&(r.shaderProgram=r.shaderProgram&&r.shaderProgram.destroy())}}function lX(e){for(var t=e._vertexArrays.length,n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}function uX(e){for(var t=e._polylines,n=t.length,i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function hX(e,t,n){this.count=e,this.offset=t,this.bucket=n}function dX(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}function fX(e){return O.dot(O.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(Fi.ORIGIN_ZX_PLANE)===Y.INTERSECTING}K$.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]},dX.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this},dX.prototype.updateShader=function(e,t,n){if(!Object(o.a)(this.shaderProgram)){var i=["DISTANCE_DISPLAY_CONDITION"];n&&i.push("VECTOR_TILE"),-1!==this.material.shaderSource.search(/varying\s+float\s+v_polylineAngle;/g)&&i.push("POLYLINE_DASH"),oo.isInternetExplorer()||i.push("CLIP_POLYLINE");var r=new KM({defines:i,sources:["varying vec4 v_pickColor;\n",this.material.shaderSource,Mj]}),a=t.getVertexShaderCallback()("attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec3 position2DHigh;\nattribute vec3 position2DLow;\nattribute vec3 prevPosition3DHigh;\nattribute vec3 prevPosition3DLow;\nattribute vec3 prevPosition2DHigh;\nattribute vec3 prevPosition2DLow;\nattribute vec3 nextPosition3DHigh;\nattribute vec3 nextPosition3DLow;\nattribute vec3 nextPosition2DHigh;\nattribute vec3 nextPosition2DLow;\nattribute vec4 texCoordExpandAndBatchIndex;\n\nvarying vec2 v_st;\nvarying float v_width;\nvarying vec4 v_pickColor;\nvarying float v_polylineAngle;\n\nvoid main()\n{\n float texCoord = texCoordExpandAndBatchIndex.x;\n float expandDir = texCoordExpandAndBatchIndex.y;\n bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;\n float batchTableIndex = texCoordExpandAndBatchIndex.w;\n\n vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);\n float width = widthAndShow.x + 0.5;\n float show = widthAndShow.y;\n\n if (width < 1.0)\n {\n show = 0.0;\n }\n\n vec4 pickColor = batchTable_getPickColor(batchTableIndex);\n\n vec4 p, prev, next;\n if (czm_morphTime == 1.0)\n {\n p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);\n prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);\n next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);\n }\n else if (czm_morphTime == 0.0)\n {\n p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);\n prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);\n next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);\n }\n else\n {\n p = czm_columbusViewMorph(\n czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),\n czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),\n czm_morphTime);\n prev = czm_columbusViewMorph(\n czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),\n czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),\n czm_morphTime);\n next = czm_columbusViewMorph(\n czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),\n czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),\n czm_morphTime);\n }\n\n #ifdef DISTANCE_DISPLAY_CONDITION\n vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);\n vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);\n vec3 centerLow = centerLowAndRadius.xyz;\n float radius = centerLowAndRadius.w;\n vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);\n\n float lengthSq;\n if (czm_sceneMode == czm_sceneMode2D)\n {\n lengthSq = czm_eyeHeight2D.y;\n }\n else\n {\n vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);\n lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);\n }\n\n float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;\n float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;\n if (lengthSq < nearSq || lengthSq > farSq)\n {\n show = 0.0;\n }\n #endif\n\n float polylineAngle;\n vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);\n gl_Position = czm_viewportOrthographic * positionWC * show;\n\n v_st.s = texCoord;\n v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);\n\n v_width = width;\n v_pickColor = pickColor;\n v_polylineAngle = polylineAngle;\n}\n"),s=new KM({defines:i,sources:[Sj,a]});this.shaderProgram=LM.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:r,attributeLocations:X$})}},dX.prototype.getPolylinePositionsLength=function(e){var t;if(this.mode===IR.SCENE3D||!fX(e))return 4*(t=e._actualPositions.length)-4;var n=0,i=e._segments.lengths;t=i.length;for(var r=0;r<t;++r)n+=4*i[r]-4;return n};var pX=new O,mX=new O,gX=new O,vX=new O,_X=new he,bX=new Mt;dX.prototype.write=function(e,t,n,i,r,a,s,c){for(var l=this.mode,u=c.ellipsoid.maximumRadius*d.PI,h=this.polylines,f=h.length,p=0;p<f;++p){for(var m,g=h[p],v=g.width,_=g.show&&v>0,b=g._index,y=this.getSegments(g,c),w=y.positions,C=y.lengths,E=w.length,A=g.getPickId(s).color,x=0,T=0,S=0;S<E;++S){0===S?g._loop?m=w[E-2]:(m=vX,O.subtract(w[0],w[1],m),O.add(w[0],m,m)):m=w[S-1],O.clone(m,mX),O.clone(w[S],pX),S===E-1?g._loop?m=w[1]:(m=vX,O.subtract(w[E-1],w[E-2],m),O.add(w[E-1],m,m)):m=w[S+1],O.clone(m,gX);var D=C[x];S===T+D&&(T+=D,++x);var P=S-T===0,I=S===T+C[x]-1;l===IR.SCENE2D&&(mX.z=0,pX.z=0,gX.z=0),l!==IR.SCENE2D&&l!==IR.MORPHING||(P||I)&&u-Math.abs(pX.x)<1&&((pX.x<0&&mX.x>0||pX.x>0&&mX.x<0)&&O.clone(pX,mX),(pX.x<0&&gX.x>0||pX.x>0&&gX.x<0)&&O.clone(pX,gX));for(var M=I?2:4,R=P?2:0;R<M;++R){vh.writeElements(pX,e,n),vh.writeElements(mX,e,n+6),vh.writeElements(gX,e,n+12);var L=R-2<0?-1:1;t[r]=S/(E-1),t[r+1]=R%2*2-1,t[r+2]=L,t[r+3]=b,n+=18,r+=4}}var j=_X;j.x=Hf.floatToByte(A.red),j.y=Hf.floatToByte(A.green),j.z=Hf.floatToByte(A.blue),j.w=Hf.floatToByte(A.alpha);var F=bX;F.x=v,F.y=_?1:0;var N=l===IR.SCENE2D?g._boundingVolume2D:g._boundingVolumeWC,z=vh.fromCartesian(N.center,Q$),k=z.high,B=he.fromElements(z.low.x,z.low.y,z.low.z,N.radius,Z$),H=J$;H.x=0,H.y=Number.MAX_VALUE;var V=g.distanceDisplayCondition;Object(o.a)(V)&&(H.x=V.near,H.y=V.far),a.setBatchedAttribute(b,0,F),a.setBatchedAttribute(b,1,j),a.attributes.length>2&&(a.setBatchedAttribute(b,2,k),a.setBatchedAttribute(b,3,B),a.setBatchedAttribute(b,4,H))}};var yX=new O,wX=new O,OX=new O,CX=new O;dX.prototype.writeForMorph=function(e,t){for(var n=this.modelMatrix,i=this.polylines,r=i.length,o=0;o<r;++o)for(var a=i[o],s=a._segments.positions,c=a._segments.lengths,l=s.length,u=0,h=0,d=0;d<l;++d){var f;0===d?a._loop?f=s[l-2]:(f=CX,O.subtract(s[0],s[1],f),O.add(s[0],f,f)):f=s[d-1],f=Ae.multiplyByPoint(n,f,wX);var p,m=Ae.multiplyByPoint(n,s[d],yX);d===l-1?a._loop?p=s[1]:(p=CX,O.subtract(s[l-1],s[l-2],p),O.add(s[l-1],p,p)):p=s[d+1],p=Ae.multiplyByPoint(n,p,OX);var g=c[u];d===h+g&&(h+=g,++u);for(var v=d-h===0,_=d===h+c[u]-1?2:4,b=v?2:0;b<_;++b)vh.writeElements(m,e,t),vh.writeElements(f,e,t+6),vh.writeElements(p,e,t+12),t+=18}};var EX=new Array(1);dX.prototype.updateIndices=function(e,t,n,i){var r=n.length-1,o=new hX(0,i,this);n[r].push(o);var a=0,s=e[e.length-1],c=0;s.length>0&&(c=s[s.length-1]+1);for(var l=this.polylines,u=l.length,h=0;h<u;++h){var f,p=l[h];if(p._locatorBuckets=[],this.mode===IR.SCENE3D){f=EX;var m=p._actualPositions.length;if(!(m>0))continue;f[0]=m}else f=p._segments.lengths;var g=f.length;if(g>0){for(var v=0,_=0;_<g;++_)for(var b=f[_]-1,y=0;y<b;++y)c+4>d.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:o,count:v}),v=0,t.push(4),s=[],e.push(s),c=0,o.count=a,a=0,i=0,o=new hX(0,0,this),n[++r]=[o]),s.push(c,c+2,c+1),s.push(c+1,c+2,c+3),v+=6,a+=6,i+=6,c+=4;p._locatorBuckets.push({locator:o,count:v}),c+4>d.SIXTY_FOUR_KILOBYTES&&(t.push(0),s=[],e.push(s),c=0,o.count=a,i=0,a=0,o=new hX(0,0,this),n[++r]=[o])}p._clean()}return o.count=a,i},dX.prototype.getPolylineStartIndex=function(e){for(var t=this.polylines,n=0,i=t.length,r=0;r<i;++r){var o=t[r];if(o===e)break;n+=o._actualLength}return n};var AX,xX={positions:void 0,lengths:void 0},TX=new Array(1),SX=new O,DX=new R;dX.prototype.getSegments=function(e,t){var n=e._actualPositions;if(this.mode===IR.SCENE3D)return TX[0]=n.length,xX.positions=n,xX.lengths=TX,xX;fX(e)&&(n=e._segments.positions);for(var i,r=t.ellipsoid,o=[],a=this.modelMatrix,s=n.length,c=SX,l=0;l<s;++l)i=n[l],c=Ae.multiplyByPoint(a,i,c),o.push(t.project(r.cartesianToCartographic(c,DX)));if(o.length>0){e._boundingVolume2D=gt.fromPoints(o,e._boundingVolume2D);var u=e._boundingVolume2D.center;e._boundingVolume2D.center=new O(u.z,u.x,u.y)}return xX.positions=o,xX.lengths=e._segments.lengths,xX},dX.prototype.writeUpdate=function(e,t,n,i){var r=this.mode,a=i.ellipsoid.maximumRadius*d.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);var c=AX,l=6*s*3;!Object(o.a)(c)||c.length<l?c=AX=new Float32Array(l):c.length>l&&(c=new Float32Array(c.buffer,0,l));var u,h=this.getSegments(t,i),f=h.positions,p=h.lengths,m=0,g=0,v=0;s=f.length;for(var _=0;_<s;++_){0===_?t._loop?u=f[s-2]:(u=vX,O.subtract(f[0],f[1],u),O.add(f[0],u,u)):u=f[_-1],O.clone(u,mX),O.clone(f[_],pX),_===s-1?t._loop?u=f[1]:(u=vX,O.subtract(f[s-1],f[s-2],u),O.add(f[s-1],u,u)):u=f[_+1],O.clone(u,gX);var b=p[g];_===v+b&&(v+=b,++g);var y=_-v===0,w=_===v+p[g]-1;r===IR.SCENE2D&&(mX.z=0,pX.z=0,gX.z=0),r!==IR.SCENE2D&&r!==IR.MORPHING||(y||w)&&a-Math.abs(pX.x)<1&&((pX.x<0&&mX.x>0||pX.x>0&&mX.x<0)&&O.clone(pX,mX),(pX.x<0&&gX.x>0||pX.x>0&&gX.x<0)&&O.clone(pX,gX));for(var C=w?2:4,E=y?2:0;E<C;++E)vh.writeElements(pX,c,m),vh.writeElements(mX,c,m+6),vh.writeElements(gX,c,m+12),m+=18}n.copyFromArrayView(c,18*Float32Array.BYTES_PER_ELEMENT*e)}};var PX=K$;function IX(e){this._positions=e.positions,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._rectangle=e.rectangle,this._minHeight=e.minimumHeight,this._maxHeight=e.maximumHeight,this._billboardCollection=void 0,this._labelCollection=void 0,this._polylineCollection=void 0,this._verticesPromise=void 0,this._packedBuffer=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._resolvedPromise=!1}Object.defineProperties(IX.prototype,{pointsLength:{get:function(){return this._billboardCollection.length}},texturesByteLength:{get:function(){return this._billboardCollection.textureAtlas.texture.sizeInBytes+this._labelCollection._textureAtlas.texture.sizeInBytes}},readyPromise:{get:function(){return this._readyPromise.promise}}});var MX=new ac("createVectorTilePoints"),RX=new O;function LX(e,t){if(!Object(o.a)(e._billboardCollection)){var n;if(!Object(o.a)(e._verticesPromise)){n=e._positions;var i=e._packedBuffer;Object(o.a)(i)||(n=e._positions=ol(n),e._batchIds=ol(e._batchIds),i=e._packedBuffer=function(e,t){var n=e._rectangle,i=e._minHeight,r=e._maxHeight,o=2+Se.packedLength+W.packedLength,a=new Float64Array(o),s=0;return a[s++]=i,a[s++]=r,Se.pack(n,a,s),s+=Se.packedLength,W.pack(t,a,s),a}(e,t));var r=[n.buffer,i.buffer],a={positions:n.buffer,packedBuffer:i.buffer},s=e._verticesPromise=MX.scheduleTask(a,r);if(!Object(o.a)(s))return;s.then((function(t){e._positions=new Float64Array(t.positions),e._ready=!0}))}if(e._ready&&!Object(o.a)(e._billboardCollection)){n=e._positions;var c=e._batchTable,l=e._batchIds,u=e._billboardCollection=new VY({batchTable:c}),h=e._labelCollection=new I$({batchTable:c}),d=e._polylineCollection=new PX;d._useHighlightColor=!0;for(var f=n.length/3,p=0;p<f;++p){var m=l[p],g=O.unpack(n,3*p,RX),v=u.add();v.position=g,v._batchIndex=m;var _=h.add();_.text=" ",_.position=g,_._batchIndex=m,d.add().positions=[O.clone(g),O.clone(g)]}e._positions=void 0,e._packedBuffer=void 0}}}IX.prototype.createFeatures=function(e,t){for(var n=this._billboardCollection,i=this._labelCollection,r=this._polylineCollection,o=this._batchIds,a=o.length,s=0;s<a;++s){var c=o[s],l=n.get(s),u=i.get(s),h=r.get(s);t[c]=new YY(e,c,l,u,h)}},IX.prototype.applyDebugSettings=function(e,t){e?(Hf.clone(t,this._billboardCollection._highlightColor),Hf.clone(t,this._labelCollection._highlightColor),Hf.clone(t,this._polylineCollection._highlightColor)):(Hf.clone(Hf.WHITE,this._billboardCollection._highlightColor),Hf.clone(Hf.WHITE,this._labelCollection._highlightColor),Hf.clone(Hf.WHITE,this._polylineCollection._highlightColor))};var jX=new Hf,FX=new Hf,NX=new Hf,zX=new Hf,kX=new Hf,BX=new Hf,HX=new JC,VX=new JC,UX=new $_;IX.prototype.applyStyle=function(e,t){if(Object(o.a)(e))for(var n=this._batchIds,i=n.length,r=0;r<i;++r){var a=t[n[r]];if(Object(o.a)(e.show)&&(a.show=e.show.evaluate(a)),Object(o.a)(e.pointSize)&&(a.pointSize=e.pointSize.evaluate(a)),Object(o.a)(e.color)&&(a.color=e.color.evaluateColor(a,jX)),Object(o.a)(e.pointOutlineColor)&&(a.pointOutlineColor=e.pointOutlineColor.evaluateColor(a,FX)),Object(o.a)(e.pointOutlineWidth)&&(a.pointOutlineWidth=e.pointOutlineWidth.evaluate(a)),Object(o.a)(e.labelColor)&&(a.labelColor=e.labelColor.evaluateColor(a,NX)),Object(o.a)(e.labelOutlineColor)&&(a.labelOutlineColor=e.labelOutlineColor.evaluateColor(a,zX)),Object(o.a)(e.labelOutlineWidth)&&(a.labelOutlineWidth=e.labelOutlineWidth.evaluate(a)),Object(o.a)(e.font)&&(a.font=e.font.evaluate(a)),Object(o.a)(e.labelStyle)&&(a.labelStyle=e.labelStyle.evaluate(a)),Object(o.a)(e.labelText)?a.labelText=e.labelText.evaluate(a):a.labelText=void 0,Object(o.a)(e.backgroundColor)&&(a.backgroundColor=e.backgroundColor.evaluateColor(a,kX)),Object(o.a)(e.backgroundPadding)&&(a.backgroundPadding=e.backgroundPadding.evaluate(a)),Object(o.a)(e.backgroundEnabled)&&(a.backgroundEnabled=e.backgroundEnabled.evaluate(a)),Object(o.a)(e.scaleByDistance)){var s=e.scaleByDistance.evaluate(a);HX.near=s.x,HX.nearValue=s.y,HX.far=s.z,HX.farValue=s.w,a.scaleByDistance=HX}else a.scaleByDistance=void 0;if(Object(o.a)(e.translucencyByDistance)){var c=e.translucencyByDistance.evaluate(a);VX.near=c.x,VX.nearValue=c.y,VX.far=c.z,VX.farValue=c.w,a.translucencyByDistance=VX}else a.translucencyByDistance=void 0;if(Object(o.a)(e.distanceDisplayCondition)){var l=e.distanceDisplayCondition.evaluate(a);UX.near=l.x,UX.far=l.y,a.distanceDisplayCondition=UX}else a.distanceDisplayCondition=void 0;Object(o.a)(e.heightOffset)&&(a.heightOffset=e.heightOffset.evaluate(a)),Object(o.a)(e.anchorLineEnabled)&&(a.anchorLineEnabled=e.anchorLineEnabled.evaluate(a)),Object(o.a)(e.anchorLineColor)&&(a.anchorLineColor=e.anchorLineColor.evaluateColor(a,BX)),Object(o.a)(e.image)?a.image=e.image.evaluate(a):a.image=void 0,Object(o.a)(e.disableDepthTestDistance)&&(a.disableDepthTestDistance=e.disableDepthTestDistance.evaluate(a)),Object(o.a)(e.horizontalOrigin)&&(a.horizontalOrigin=e.horizontalOrigin.evaluate(a)),Object(o.a)(e.verticalOrigin)&&(a.verticalOrigin=e.verticalOrigin.evaluate(a)),Object(o.a)(e.labelHorizontalOrigin)&&(a.labelHorizontalOrigin=e.labelHorizontalOrigin.evaluate(a)),Object(o.a)(e.labelVerticalOrigin)&&(a.labelVerticalOrigin=e.labelVerticalOrigin.evaluate(a))}else!function(e,t){for(var n=e._batchIds,i=n.length,r=0;r<i;++r){var o=t[n[r]];o.show=!0,o.pointSize=YY.defaultPointSize,o.color=YY.defaultColor,o.pointOutlineColor=YY.defaultPointOutlineColor,o.pointOutlineWidth=YY.defaultPointOutlineWidth,o.labelColor=Hf.WHITE,o.labelOutlineColor=Hf.WHITE,o.labelOutlineWidth=1,o.font="30px sans-serif",o.labelStyle=ZY.FILL,o.labelText=void 0,o.backgroundColor=new Hf(.165,.165,.165,.8),o.backgroundPadding=new Mt(7,5),o.backgroundEnabled=!1,o.scaleByDistance=void 0,o.translucencyByDistance=void 0,o.distanceDisplayCondition=void 0,o.heightOffset=0,o.anchorLineEnabled=!1,o.anchorLineColor=Hf.WHITE,o.image=void 0,o.disableDepthTestDistance=0,o.horizontalOrigin=rP.CENTER,o.verticalOrigin=oP.CENTER,o.labelHorizontalOrigin=rP.RIGHT,o.labelVerticalOrigin=oP.BASELINE}}(this,t)},IX.prototype.update=function(e){LX(this,e.mapProjection.ellipsoid),this._ready&&(this._polylineCollection.update(e),this._billboardCollection.update(e),this._labelCollection.update(e),this._resolvedPromise||(this._readyPromise.resolve(),this._resolvedPromise=!0))},IX.prototype.isDestroyed=function(){return!1},IX.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._polylineCollection=this._polylineCollection&&this._polylineCollection.destroy(),Ks(this)};var WX=IX;function GX(e){this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._counts=e.counts,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._batchedPositions=void 0,this._transferrableBatchIds=void 0,this._vertexBatchIds=void 0,this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84),this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._polygonMinimumHeights=e.polygonMinimumHeights,this._polygonMaximumHeights=e.polygonMaximumHeights,this._center=Object(r.a)(e.center,O.ZERO),this._rectangle=e.rectangle,this._center=void 0,this._boundingVolume=e.boundingVolume,this._boundingVolumes=void 0,this._batchedIndices=void 0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=JM.BOTH}Object.defineProperties(GX.prototype,{trianglesLength:{get:function(){return Object(o.a)(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return Object(o.a)(this._primitive)?this._primitive.geometryByteLength:0}},readyPromise:{get:function(){return this._readyPromise.promise}}});var qX=new ac("createVectorTilePolygons"),YX=new Hf;function $X(e){if(!Object(o.a)(e._primitive)){if(!Object(o.a)(e._verticesPromise)){var t=e._positions,n=e._counts,i=e._indexCounts,r=e._indices,a=e._transferrableBatchIds,s=e._batchTableColors,c=e._packedBuffer;if(!Object(o.a)(s)){t=e._positions=ol(e._positions),n=e._counts=ol(e._counts),i=e._indexCounts=ol(e._indexCounts),r=e._indices=ol(e._indices),e._center=e._ellipsoid.cartographicToCartesian(Se.center(e._rectangle)),a=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(a.length);for(var l=e._batchTable,u=s.length,h=0;h<u;++h){var d=l.getColor(h,YX);s[h]=d.toRgba()}c=e._packedBuffer=function(e){var t=new Float64Array(3+O.packedLength+W.packedLength+Se.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,O.pack(e._center,t,n),n+=O.packedLength,W.pack(e._ellipsoid,t,n),n+=W.packedLength,Se.pack(e._rectangle,t,n),t}(e)}var f=[t.buffer,n.buffer,i.buffer,r.buffer,a.buffer,s.buffer,c.buffer],p={packedBuffer:c.buffer,positions:t.buffer,counts:n.buffer,indexCounts:i.buffer,indices:r.buffer,batchIds:a.buffer,batchTableColors:s.buffer},m=e._polygonMinimumHeights,g=e._polygonMaximumHeights;Object(o.a)(m)&&Object(o.a)(g)&&(m=ol(m),g=ol(g),f.push(m.buffer,g.buffer),p.minimumHeights=m,p.maximumHeights=g);var v=e._verticesPromise=qX.scheduleTask(p,f);if(!Object(o.a)(v))return;Object(Yt.a)(v,(function(t){e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;var n=new Float64Array(t.packedBuffer),i=n[0];!function(e,t){for(var n=1,i=t[n++],r=e._boundingVolumes=new Array(i),o=0;o<i;++o)r[o]=bs.unpack(t,n),n+=bs.packedLength;for(var a=t[n++],s=e._batchedIndices=new Array(a),c=0;c<a;++c){var l=Hf.unpack(t,n);n+=Hf.packedLength;for(var u=t[n++],h=t[n++],d=t[n++],f=new Array(d),p=0;p<d;++p)f[p]=t[n++];s[c]=new Nk({color:l,offset:u,count:h,batchIds:f})}}(e,n),e._indices=2===lc.getSizeInBytes(i)?new Uint16Array(t.indices):new Uint32Array(t.indices),e._indexOffsets=new Uint32Array(t.indexOffsets),e._indexCounts=new Uint32Array(t.indexCounts),e._batchedPositions=new Float32Array(t.positions),e._vertexBatchIds=new Uint16Array(t.batchIds),e._ready=!0}))}e._ready&&!Object(o.a)(e._primitive)&&(e._primitive=new RB({batchTable:e._batchTable,positions:e._batchedPositions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center}),e._batchTable=void 0,e._batchIds=void 0,e._positions=void 0,e._counts=void 0,e._indices=void 0,e._indexCounts=void 0,e._indexOffsets=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0,e._center=void 0,e._rectangle=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._verticesPromise=void 0,e._readyPromise.resolve())}}GX.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)},GX.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)},GX.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)},GX.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)},GX.prototype.update=function(e){$X(this),this._ready&&(this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e))},GX.prototype.isDestroyed=function(){return!1},GX.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),Ks(this)};var XX=GX;function KX(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84),this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._boundingVolume=e.boundingVolume,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._currentPositions=void 0,this._previousPositions=void 0,this._nextPositions=void 0,this._expandAndWidth=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=Hf.clone(Hf.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._readyPromise=Yt.a.defer(),this._verticesPromise=void 0}Object.defineProperties(KX.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},readyPromise:{get:function(){return this._readyPromise.promise}}});var QX=new ac("createVectorTilePolylines"),ZX={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function JX(e,t){if(!Object(o.a)(e._va)){if(!Object(o.a)(e._verticesPromise)){var n=e._positions,i=e._widths,r=e._counts,a=e._transferrableBatchIds,s=e._packedBuffer;Object(o.a)(s)||(n=e._positions=ol(n),i=e._widths=ol(i),r=e._counts=ol(r),a=e._transferrableBatchIds=ol(e._batchIds),s=e._packedBuffer=function(e){var t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,r=e._ellipsoid,o=e._center,a=2+Se.packedLength+W.packedLength+O.packedLength,s=new Float64Array(a),c=0;return s[c++]=n,s[c++]=i,Se.pack(t,s,c),c+=Se.packedLength,W.pack(r,s,c),c+=W.packedLength,O.pack(o,s,c),s}(e));var c=[n.buffer,i.buffer,r.buffer,a.buffer,s.buffer],l={positions:n.buffer,widths:i.buffer,counts:r.buffer,batchIds:a.buffer,packedBuffer:s.buffer},u=e._verticesPromise=QX.scheduleTask(l,c);if(!Object(o.a)(u))return;Object(Yt.a)(u,(function(t){e._currentPositions=new Float32Array(t.currentPositions),e._previousPositions=new Float32Array(t.previousPositions),e._nextPositions=new Float32Array(t.nextPositions),e._expandAndWidth=new Float32Array(t.expandAndWidth),e._vertexBatchIds=new Uint16Array(t.batchIds);var n=t.indexDatatype;e._indices=n===lc.UNSIGNED_SHORT?new Uint16Array(t.indices):new Uint32Array(t.indices),e._ready=!0}))}if(e._ready&&!Object(o.a)(e._va)){var h=e._currentPositions,d=e._previousPositions,f=e._nextPositions,p=e._expandAndWidth,m=e._vertexBatchIds,g=e._indices,v=d.byteLength+h.byteLength+f.byteLength;v+=p.byteLength+m.byteLength+g.byteLength,e._trianglesLength=g.length/3,e._geometryByteLength=v;var _=oR.createVertexBuffer({context:t,typedArray:d,usage:iR.STATIC_DRAW}),b=oR.createVertexBuffer({context:t,typedArray:h,usage:iR.STATIC_DRAW}),y=oR.createVertexBuffer({context:t,typedArray:f,usage:iR.STATIC_DRAW}),w=oR.createVertexBuffer({context:t,typedArray:p,usage:iR.STATIC_DRAW}),C=oR.createVertexBuffer({context:t,typedArray:m,usage:iR.STATIC_DRAW}),E=oR.createIndexBuffer({context:t,typedArray:g,usage:iR.STATIC_DRAW,indexDatatype:2===g.BYTES_PER_ELEMENT?lc.UNSIGNED_SHORT:lc.UNSIGNED_INT}),A=[{index:ZX.previousPosition,vertexBuffer:_,componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{index:ZX.currentPosition,vertexBuffer:b,componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{index:ZX.nextPosition,vertexBuffer:y,componentDatatype:Ds.FLOAT,componentsPerAttribute:3},{index:ZX.expandAndWidth,vertexBuffer:w,componentDatatype:Ds.FLOAT,componentsPerAttribute:2},{index:ZX.a_batchId,vertexBuffer:C,componentDatatype:Ds.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new hR({context:t,attributes:A,indexBuffer:E}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._currentPositions=void 0,e._previousPositions=void 0,e._nextPositions=void 0,e._expandAndWidth=void 0,e._vertexBatchIds=void 0,e._indices=void 0,e._readyPromise.resolve()}}}var eK=new Ae,tK=new O;KX.prototype.createFeatures=function(e,t){for(var n=this._batchIds,i=n.length,r=0;r<i;++r){var o=n[r];t[o]=new oz(e,o)}},KX.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};var nK=new Hf,iK=Hf.WHITE;KX.prototype.applyStyle=function(e,t){if(Object(o.a)(e))for(var n=this._batchIds,i=n.length,r=0;r<i;++r){var a=t[n[r]];a.color=Object(o.a)(e.color)?e.color.evaluateColor(a,nK):iK,a.show=!Object(o.a)(e.show)||e.show.evaluate(a)}else!function(e,t){for(var n=e._batchIds,i=n.length,r=0;r<i;++r){var o=t[n[r]];o.show=!0,o.color=Hf.WHITE}}(this,t)},KX.prototype.update=function(e){var t=e.context;if(JX(this,t),function(e,t){Object(o.a)(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){var n=t.uniformState.view;return Ae.clone(n,eK),Ae.multiplyByPoint(eK,e._center,tK),Ae.setTranslation(eK,tK,eK),eK},u_highlightColor:function(){return e._highlightColor}})}(this,t),function(e,t){if(!Object(o.a)(e._sp)){var n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)("attribute vec4 currentPosition;\nattribute vec4 previousPosition;\nattribute vec4 nextPosition;\nattribute vec2 expandAndWidth;\nattribute float a_batchId;\n\nuniform mat4 u_modifiedModelView;\n\nvoid main()\n{\n float expandDir = expandAndWidth.x;\n float width = abs(expandAndWidth.y) + 0.5;\n bool usePrev = expandAndWidth.y < 0.0;\n\n vec4 p = u_modifiedModelView * currentPosition;\n vec4 prev = u_modifiedModelView * previousPosition;\n vec4 next = u_modifiedModelView * nextPosition;\n\n float angle;\n vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle);\n gl_Position = czm_viewportOrthographic * positionWC;\n}\n"),r=n.getFragmentShaderCallback()("uniform vec4 u_highlightColor; \nvoid main()\n{\n gl_FragColor = u_highlightColor;\n}\n",!1,void 0),a=new KM({defines:["VECTOR_TILE",oo.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[Sj,i]}),s=new KM({defines:["VECTOR_TILE"],sources:[r]});e._sp=LM.fromCache({context:t,vertexShaderSource:a,fragmentShaderSource:s,attributeLocations:ZX})}}(this,t),function(e){if(!Object(o.a)(e._rs)){e._rs=XI.fromCache({blending:LP.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:{enabled:!0,factor:-5,units:-5}})}}(this),this._ready){var n=e.passes;(n.render||n.pick)&&function(e,t){if(!Object(o.a)(e._command)){var n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new CI({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:EI.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}(this,e)}},KX.prototype.isDestroyed=function(){return!1},KX.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),Ks(this)};var rK=KX;function oK(e,t,n,i,a){this._tileset=e,this._tile=t,this._resource=n,this._polygons=void 0,this._polylines=void 0,this._points=void 0,this._contentReadyPromise=void 0,this._readyPromise=Yt.a.defer(),this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,function(e,t,n){n=Object(r.a)(n,0);var i=new Uint8Array(t),a=new DataView(t);n+=aK;var s=a.getUint32(n,!0);if(1!==s)throw new de.a("Only Vector tile version 1 is supported. Version "+s+" is not.");n+=aK;var c=a.getUint32(n,!0);if(n+=aK,0===c)return void e._readyPromise.resolve(e);var l=a.getUint32(n,!0);if(n+=aK,0===l)throw new de.a("Feature table must have a byte length greater than zero");var u=a.getUint32(n,!0);n+=aK;var h=a.getUint32(n,!0);n+=aK;var f=a.getUint32(n,!0);n+=aK;var p=a.getUint32(n,!0);n+=aK;var m=a.getUint32(n,!0);n+=aK;var g=a.getUint32(n,!0);n+=aK;var v=a.getUint32(n,!0),_=Du(i,n+=aK,l),b=JSON.parse(_);n+=l;var y,w,C=new Uint8Array(t,n,u);if(n+=u,h>0){var E=Du(i,n,h);y=JSON.parse(E),n+=h,f>0&&(w=new Uint8Array(t,n,f),w=new Uint8Array(w),n+=f)}var A=Object(r.a)(b.POLYGONS_LENGTH,0),x=Object(r.a)(b.POLYLINES_LENGTH,0),T=Object(r.a)(b.POINTS_LENGTH,0),S=A+x+T,D=new iz(e,S,y,w,function(e){return function(t,n){Object(o.a)(e._polygons)&&e._polygons.updateCommands(t,n)}}(e));if(e._batchTable=D,0===S)return;var P=new cz(b,C),I=P.getGlobalProperty("REGION");if(!Object(o.a)(I))throw new de.a("Feature table global property: REGION must be defined");var M=Se.unpack(I),R=I[4],L=I[5],j=e._tile.computedTransform,F=P.getGlobalProperty("RTC_CENTER",Ds.FLOAT,3);Object(o.a)(F)?(F=O.unpack(F),Ae.multiplyByPoint(j,F,F)):((F=Se.center(M)).height=d.lerp(R,L,.5),F=W.WGS84.cartographicToCartesian(F));var N=function(e,t){var n,i,a,s,c=Object(r.a)(e.POLYGONS_LENGTH,0),l=Object(r.a)(e.POLYLINES_LENGTH,0),u=Object(r.a)(e.POINTS_LENGTH,0);if(c>0&&Object(o.a)(e.POLYGON_BATCH_IDS)){var h=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,h,c)}if(l>0&&Object(o.a)(e.POLYLINE_BATCH_IDS)){var d=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,d,l)}if(u>0&&Object(o.a)(e.POINT_BATCH_IDS)){var f=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;a=new Uint16Array(t.buffer,f,u)}var p=Object(o.a)(n)||Object(o.a)(i)||Object(o.a)(a),m=c>0&&!Object(o.a)(n)||l>0&&!Object(o.a)(i)||u>0&&!Object(o.a)(a);if(p&&m)throw new de.a("If one group of batch ids is defined, then all batch ids must be defined.");if(!Object(o.a)(n)&&!Object(o.a)(i)&&!Object(o.a)(a)){var g=0;if(!Object(o.a)(n)&&c>0)for(n=new Uint16Array(c),s=0;s<c;++s)n[s]=g++;if(!Object(o.a)(i)&&l>0)for(i=new Uint16Array(l),s=0;s<l;++s)i[s]=g++;if(!Object(o.a)(a)&&u>0)for(a=new Uint16Array(u),s=0;s<u;++s)a[s]=g++}return{polygons:n,polylines:i,points:a}}(b,C);if(n+=n%4,A>0){P.featuresLength=A;var z=Object(r.a)(P.getPropertyArray("POLYGON_COUNTS",Ds.UNSIGNED_INT,1),P.getPropertyArray("POLYGON_COUNT",Ds.UNSIGNED_INT,1));if(!Object(o.a)(z))throw new de.a("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");var k=Object(r.a)(P.getPropertyArray("POLYGON_INDEX_COUNTS",Ds.UNSIGNED_INT,1),P.getPropertyArray("POLYGON_INDEX_COUNT",Ds.UNSIGNED_INT,1));if(!Object(o.a)(k))throw new de.a("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");var B=z.reduce((function(e,t){return e+2*t}),0),H=k.reduce((function(e,t){return e+t}),0),V=new Uint32Array(t,n,H);n+=p;var U,G,q=new Uint16Array(t,n,B);n+=m,Object(o.a)(b.POLYGON_MINIMUM_HEIGHTS)&&Object(o.a)(b.POLYGON_MAXIMUM_HEIGHTS)&&(U=P.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",Ds.FLOAT,1),G=P.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",Ds.FLOAT,1)),e._polygons=new XX({positions:q,counts:z,indexCounts:k,indices:V,minimumHeight:R,maximumHeight:L,polygonMinimumHeights:U,polygonMaximumHeights:G,center:F,rectangle:M,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:D,batchIds:N.polygons,modelMatrix:j})}if(x>0){P.featuresLength=x;var Y=Object(r.a)(P.getPropertyArray("POLYLINE_COUNTS",Ds.UNSIGNED_INT,1),P.getPropertyArray("POLYLINE_COUNT",Ds.UNSIGNED_INT,1));if(!Object(o.a)(Y))throw new de.a("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");var $=P.getPropertyArray("POLYLINE_WIDTHS",Ds.UNSIGNED_SHORT,1);if(!Object(o.a)($)){$=new Uint16Array(x);for(var X=0;X<x;++X)$[X]=2}var K=Y.reduce((function(e,t){return e+3*t}),0),Q=new Uint16Array(t,n,K);n+=g,e._polylines=new rK({positions:Q,widths:$,counts:Y,batchIds:N.polylines,minimumHeight:R,maximumHeight:L,center:F,rectangle:M,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:D})}if(T>0){var Z=new Uint16Array(t,n,3*T);n+=v,e._points=new WX({positions:Z,batchIds:N.points,minimumHeight:R,maximumHeight:L,rectangle:M,batchTable:D})}}(this,i,a)}Object.defineProperties(oK.prototype,{featuresLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return Object(o.a)(this._points)?this._points.pointsLength:0}},trianglesLength:{get:function(){var e=0;return Object(o.a)(this._polygons)&&(e+=this._polygons.trianglesLength),Object(o.a)(this._polylines)&&(e+=this._polylines.trianglesLength),e}},geometryByteLength:{get:function(){var e=0;return Object(o.a)(this._polygons)&&(e+=this._polygons.geometryByteLength),Object(o.a)(this._polylines)&&(e+=this._polylines.geometryByteLength),e}},texturesByteLength:{get:function(){return Object(o.a)(this._points)?this._points.texturesByteLength:0}},batchTableByteLength:{get:function(){return Object(o.a)(this._batchTable)?this._batchTable.memorySizeInBytes:0}},innerContents:{get:function(){}},readyPromise:{get:function(){return this._readyPromise.promise}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){return this._batchTable}}});var aK=Uint32Array.BYTES_PER_ELEMENT;function sK(e){var t=e.featuresLength;if(!Object(o.a)(e._features)&&t>0){var n=new Array(t);Object(o.a)(e._polygons)&&e._polygons.createFeatures(e,n),Object(o.a)(e._polylines)&&e._polylines.createFeatures(e,n),Object(o.a)(e._points)&&e._points.createFeatures(e,n),e._features=n}}oK.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)},oK.prototype.getFeature=function(e){var t=this.featuresLength;if(!Object(o.a)(e)||e<0||e>=t)throw new a.a("batchId is required and between zero and featuresLength - 1 ("+(t-1)+").");return sK(this),this._features[e]},oK.prototype.applyDebugSettings=function(e,t){Object(o.a)(this._polygons)&&this._polygons.applyDebugSettings(e,t),Object(o.a)(this._polylines)&&this._polylines.applyDebugSettings(e,t),Object(o.a)(this._points)&&this._points.applyDebugSettings(e,t)},oK.prototype.applyStyle=function(e){sK(this),Object(o.a)(this._polygons)&&this._polygons.applyStyle(e,this._features),Object(o.a)(this._polylines)&&this._polylines.applyStyle(e,this._features),Object(o.a)(this._points)&&this._points.applyStyle(e,this._features)},oK.prototype.update=function(e,t){var n=!0;if(Object(o.a)(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons._ready),Object(o.a)(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines._ready),Object(o.a)(this._points)&&(this._points.update(t),n=n&&this._points._ready),Object(o.a)(this._batchTable)&&n&&this._batchTable.update(e,t),!Object(o.a)(this._contentReadyPromise)){var i=Object(o.a)(this._points)?this._points.readyPromise:void 0,r=Object(o.a)(this._polygons)?this._polygons.readyPromise:void 0,a=Object(o.a)(this._polylines)?this._polylines.readyPromise:void 0,s=this;this._contentReadyPromise=Yt.a.all([i,r,a]).then((function(){s._readyPromise.resolve(s)}))}},oK.prototype.isDestroyed=function(){return!1},oK.prototype.destroy=function(){return this._polygons=this._polygons&&this._polygons.destroy(),this._polylines=this._polylines&&this._polylines.destroy(),this._points=this._points&&this._points.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),Ks(this)};var cK=oK,lK={b3dm:function(e,t,n,i,r){return new pW(e,t,n,i,r)},pnts:function(e,t,n,i,r){return new GG(e,t,n,i,r)},i3dm:function(e,t,n,i,r){return new JW(e,t,n,i,r)},cmpt:function(e,t,n,i,r){return new vW(e,t,n,i,r,lK)},json:function(e,t,n,i,r){return new YG(e,t,n,i,r)},geom:function(e,t,n,i,r){return new xW(e,t,n,i,r)},vctr:function(e,t,n,i,r){return new cK(e,t,n,i,r)}},uK=lK,hK=Object.freeze({UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5}),dK=Object.freeze({NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0});function fK(){}var pK={stack:new VC,stackMaximumLength:0};function mK(e){return e._visible&&e._inRequestVolume}function gK(e){return e.hasEmptyContent||e.hasTilesetContent}function vK(e,t){return 0!==t.children.length&&(t.hasTilesetContent?!t.contentExpired:(t.hasEmptyContent,!0))}function _K(e,t,n,i){for(var r=t.children,o=r.length,a=0;a<o;++a){var s=r[a];s.updateVisibility(i),mK(s)&&n.push(s)}}function bK(e,t){(function(e){return!gK(e)&&e.contentUnloaded}(t)||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function yK(e,t,n){t._touchedFrame!==n.frameNumber&&(e._cache.touch(t),t._touchedFrame=n.frameNumber)}function wK(e){++e.statistics.visited}function OK(e,t,n){t.contentAvailable&&t.contentVisibility(n)!==Y.OUTSIDE&&e._selectedTiles.push(t)}fK.selectTiles=function(e,t){e._selectedTiles.length=0,e._requestedTiles.length=0,e._hasMixedContent=!1;var n=!0,i=e.root;if(i.updateVisibility(t),!mK(i))return n;var r=pK.stack;for(r.push(e.root);r.length>0;){pK.stackMaximumLength=Math.max(pK.stackMaximumLength,r.length);var o=r.pop(),a=o.refine===eG.ADD,s=o.refine===eG.REPLACE,c=vK(e,o);c&&_K(e,o,r,t),(a||s&&!c)&&(bK(e,o),yK(e,o,t),OK(e,o,t),gK(o)||o.contentAvailable||(n=!1)),wK(e)}return pK.stack.trim(pK.stackMaximumLength),n};var CK=fK;function EK(){}function AK(e){return e._visible&&e._inRequestVolume}var xK={stack:new VC,stackMaximumLength:0},TK={stack:new VC,stackMaximumLength:0},SK={stack:new VC,stackMaximumLength:0},DK={stack:new VC,stackMaximumLength:0,ancestorStack:new VC,ancestorStackMaximumLength:0};function PK(e){return e._skipLevelOfDetail}function IK(e,t){e._emptyTiles.push(t)}function MK(e,t,n){if(t.contentVisibility(n)!==Y.OUTSIDE){var i=t.content;i.featurePropertiesDirty?(i.featurePropertiesDirty=!1,t.lastStyleTime=0,e._selectedTilesToStyle.push(t)):t._selectedFrame<n.frameNumber-1&&e._selectedTilesToStyle.push(t),t._selectedFrame=n.frameNumber,e._selectedTiles.push(t)}}function RK(e,t,n){if(PK(e)){var i=t.contentAvailable?t:t._ancestorWithContentAvailable;Object(o.a)(i)?i._shouldSelect=!0:function(e,t,n){var i=SK.stack;for(i.push(t);i.length>0;){SK.stackMaximumLength=Math.max(SK.stackMaximumLength,i.length);for(var r=i.pop().children,o=r.length,a=0;a<o;++a){var s=r[a];AK(s)&&(s.contentAvailable?(kK(e,s,n),jK(e,s,n),MK(e,s,n)):s._depth-t._depth<2&&i.push(s))}}}(e,t,n)}else t.contentAvailable&&MK(e,t,n)}function LK(e,t,n){++e._statistics.visited,t._visitedFrame=n.frameNumber}function jK(e,t,n){t._touchedFrame!==n.frameNumber&&(e._cache.touch(t),t._touchedFrame=n.frameNumber)}function FK(e,t,n){if(t._requestedFrame!==n.frameNumber&&(VK(t)||t.contentExpired)&&function(e,t,n){if(!e._cullRequestsWhileMoving)return!0;var i=t.boundingSphere,r=Math.max(2*i.radius,1),o=n.camera,a=0!==o.positionWCDeltaMagnitude?o.positionWCDeltaMagnitude:o.positionWCDeltaMagnitudeLastFrame;return e.cullRequestsWhileMovingMultiplier*a/r<1}(e,t,n)){var i=n.camera.timeSinceMoved<e.foveatedTimeDelay;t.priorityDeferred&&i||(t._requestedFrame=n.frameNumber,e._requestedTiles.push(t))}}function NK(e,t,n){t._updatedVisibilityFrame!==e._updatedVisibilityFrame&&(t.updateVisibility(n),t._updatedVisibilityFrame=e._updatedVisibilityFrame)}function zK(e,t,n){if(NK(e,t,n),AK(t)){var i=t.children.length>0;if(t.hasTilesetContent&&i){var r=t.children[0];return zK(e,r,n),void(t._visible=r._visible)}if(!function(e,t,n){var i=t.parent;return!(!Object(o.a)(i)||i.hasTilesetContent||i.refine!==eG.ADD)&&t.getScreenSpaceError(n,!0)<=e._maximumScreenSpaceError}(e,t,n)){var a=t.refine===eG.REPLACE,s=t._optimChildrenWithinParent===dK.USE_OPTIMIZATION;return a&&s&&i&&!function(e,t,n){for(var i=!1,r=t.children,o=r.length,a=0;a<o;++a){var s=r[a];NK(e,s,n),i=i||AK(s)}return i}(e,t,n)?(++e._statistics.numberOfTilesCulledWithChildrenUnion,void(t._visible=!1)):void 0}t._visible=!1}}function kK(e,t,n){zK(e,t,n),t.updateExpiration(),t._wasMinPriorityChild=!1,t._priorityHolder=t,function(e,t){e._maximumPriority.distance=Math.max(t._priorityHolder._distanceToCamera,e._maximumPriority.distance),e._minimumPriority.distance=Math.min(t._priorityHolder._distanceToCamera,e._minimumPriority.distance),e._maximumPriority.depth=Math.max(t._depth,e._maximumPriority.depth),e._minimumPriority.depth=Math.min(t._depth,e._minimumPriority.depth),e._maximumPriority.foveatedFactor=Math.max(t._priorityHolder._foveatedFactor,e._maximumPriority.foveatedFactor),e._minimumPriority.foveatedFactor=Math.min(t._priorityHolder._foveatedFactor,e._minimumPriority.foveatedFactor),e._maximumPriority.reverseScreenSpaceError=Math.max(t._priorityReverseScreenSpaceError,e._maximumPriority.reverseScreenSpaceError),e._minimumPriority.reverseScreenSpaceError=Math.min(t._priorityReverseScreenSpaceError,e._minimumPriority.reverseScreenSpaceError)}(e,t),t._shouldSelect=!1,t._finalResolution=!0}function BK(e,t){e._ancestorWithContent=void 0,e._ancestorWithContentAvailable=void 0;var n=e.parent;if(Object(o.a)(n)){var i=!VK(n)||n._requestedFrame===t.frameNumber;e._ancestorWithContent=i?n:n._ancestorWithContent,e._ancestorWithContentAvailable=n.contentAvailable?n:n._ancestorWithContentAvailable}}function HK(e){return e.hasEmptyContent||e.hasTilesetContent}function VK(e){return!HK(e)&&e.contentUnloaded}function UK(e,t){var n=t._ancestorWithContent;return!e.immediatelyLoadDesiredLevelOfDetail&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf||Object(o.a)(n)&&t._screenSpaceError<n._screenSpaceError/e.skipScreenSpaceErrorFactor&&t._depth>n._depth+e.skipLevels)}function WK(e,t){return 0===t._distanceToCamera&&0===e._distanceToCamera?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera}function GK(e,t,n,i){var r,o=t.refine===eG.REPLACE,a=t.children,s=a.length;for(r=0;r<s;++r)kK(e,a[r],i);a.sort(WK);var c,l=!PK(e)&&o&&!HK(t),u=!0,h=!1,d=-1,f=Number.MAX_VALUE;for(r=0;r<s;++r){var p;if(AK(c=a[r])?(n.push(c),c._foveatedFactor<f&&(d=r,f=c._foveatedFactor),h=!0):(l||e.loadSiblings)&&(c._foveatedFactor<f&&(d=r,f=c._foveatedFactor),FK(e,c,i),jK(e,c,i)),l)p=!!c._inRequestVolume&&(HK(c)?XK(e,c,i):c.contentAvailable),u=u&&p}if(h||(u=!1),-1!==d&&!PK(e)&&o){var m=a[d];m._wasMinPriorityChild=!0;var g=(t._wasMinPriorityChild||t===e.root)&&f<=t._priorityHolder._foveatedFactor?t._priorityHolder:t;for(g._foveatedFactor=Math.min(m._foveatedFactor,g._foveatedFactor),g._distanceToCamera=Math.min(m._distanceToCamera,g._distanceToCamera),r=0;r<s;++r)(c=a[r])._priorityHolder=g}return u}function qK(e,t,n){return!PK(e)||!e.immediatelyLoadDesiredLevelOfDetail&&(!Object(o.a)(t._ancestorWithContent)||(0===t._screenSpaceError?t.parent._screenSpaceError>n:t._screenSpaceError>n))}function YK(e,t){return 0!==t.children.length&&(t.hasTilesetContent?!t.contentExpired:t._screenSpaceError>e._maximumScreenSpaceError)}function $K(e,t,n,i,r){var a=xK.stack;for(a.push(t);a.length>0;){xK.stackMaximumLength=Math.max(xK.stackMaximumLength,a.length);var s=a.pop();BK(s,r);var c=qK(e,s,n),l=s.refine===eG.ADD,u=s.refine===eG.REPLACE,h=s.parent,d=!Object(o.a)(h)||h._refines,f=!1;YK(e,s)&&(f=GK(e,s,a,r)&&d);var p=!f&&d;HK(s)?(IK(e,s),FK(e,s,r),p&&RK(e,s,r)):l?(RK(e,s,r),FK(e,s,r)):u&&(c?(FK(e,s,r),p&&RK(e,s,r)):p?(RK(e,s,r),FK(e,s,r)):UK(e,s)&&FK(e,s,r)),LK(e,s,r),jK(e,s,r),s._refines=f}}function XK(e,t,n){var i=!0,r=TK.stack;for(r.push(t);r.length>0;){TK.stackMaximumLength=Math.max(TK.stackMaximumLength,r.length);var o=r.pop(),a=o.children,s=a.length,c=HK(o)&&YK(e,o);if(c||o.contentAvailable||(i=!1),kK(e,o,n),AK(o)||(FK(e,o,n),jK(e,o,n)),c)for(var l=0;l<s;++l){var u=a[l];r.push(u)}}return i}function KK(e,t,n){var i,r=DK.stack,a=DK.ancestorStack;for(r.push(t);r.length>0||a.length>0;){if(DK.stackMaximumLength=Math.max(DK.stackMaximumLength,r.length),DK.ancestorStackMaximumLength=Math.max(DK.ancestorStackMaximumLength,a.length),a.length>0){var s=a.peek();if(s._stackLength===r.length){a.pop(),s!==i&&(s._finalResolution=!1),MK(e,s,n);continue}}var c=r.pop();if(Object(o.a)(c)){var l=c.refine===eG.ADD,u=c._shouldSelect,h=c.children,d=h.length,f=YK(e,c);if(u)if(l)MK(e,c,n);else{if(c._selectionDepth=a.length,c._selectionDepth>0&&(e._hasMixedContent=!0),i=c,!f){MK(e,c,n);continue}a.push(c),c._stackLength=r.length}if(f)for(var p=0;p<d;++p){var m=h[p];AK(m)&&r.push(m)}}}}EK.selectTiles=function(e,t){if(e._requestedTiles.length=0,!e.debugFreezeFrame){e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e._hasMixedContent=!1;var n=e.root;if(kK(e,n,t),AK(n)&&!(n.getScreenSpaceError(t,!0)<=e._maximumScreenSpaceError)){PK(e)?e.immediatelyLoadDesiredLevelOfDetail?function(e,t,n){var i=Number.MAX_VALUE,r=e._maximumScreenSpaceError;$K(e,t,i,r,n),KK(e,t,n)}(e,n,t):function(e,t,n){var i=Math.max(e.baseScreenSpaceError,e.maximumScreenSpaceError),r=e.maximumScreenSpaceError;$K(e,t,i,r,n),KK(e,t,n)}(e,n,t):function(e,t,n){var i=e._maximumScreenSpaceError,r=e._maximumScreenSpaceError;$K(e,t,i,r,n)}(e,n,t),xK.stack.trim(xK.stackMaximumLength),TK.stack.trim(TK.stackMaximumLength),SK.stack.trim(SK.stackMaximumLength),DK.stack.trim(DK.stackMaximumLength),DK.ancestorStack.trim(DK.ancestorStackMaximumLength);for(var i=e._requestedTiles,r=i.length,o=0;o<r;++o)i[o].updatePriority()}}};var QK=EK,ZK={RENDER:0,PICK:1,SHADOW:2,PRELOAD:3,PRELOAD_FLIGHT:4,REQUEST_RENDER_MODE_DEFER_CHECK:5,MOST_DETAILED_PRELOAD:6,MOST_DETAILED_PICK:7,NUMBER_OF_PASSES:8},JK=new Array(ZK.NUMBER_OF_PASSES);JK[ZK.RENDER]=Object.freeze({traversal:QK,isRender:!0,requestTiles:!0,ignoreCommands:!1}),JK[ZK.PICK]=Object.freeze({traversal:QK,isRender:!1,requestTiles:!1,ignoreCommands:!1}),JK[ZK.SHADOW]=Object.freeze({traversal:QK,isRender:!1,requestTiles:!0,ignoreCommands:!1}),JK[ZK.PRELOAD]=Object.freeze({traversal:QK,isRender:!1,requestTiles:!0,ignoreCommands:!0}),JK[ZK.PRELOAD_FLIGHT]=Object.freeze({traversal:QK,isRender:!1,requestTiles:!0,ignoreCommands:!0}),JK[ZK.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({traversal:QK,isRender:!1,requestTiles:!0,ignoreCommands:!0}),JK[ZK.MOST_DETAILED_PRELOAD]=Object.freeze({traversal:CK,isRender:!1,requestTiles:!0,ignoreCommands:!0}),JK[ZK.MOST_DETAILED_PICK]=Object.freeze({traversal:CK,isRender:!1,requestTiles:!1,ignoreCommands:!1}),ZK.getPassOptions=function(e){return JK[e]};var eQ=Object.freeze(ZK);function tQ(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(tQ.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},readyPromise:{get:function(){}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},batchTable:{get:function(){}}}),tQ.prototype.hasProperty=function(e,t){return!1},tQ.prototype.getFeature=function(e){},tQ.prototype.applyDebugSettings=function(e,t){},tQ.prototype.applyStyle=function(e){},tQ.prototype.update=function(e,t){},tQ.prototype.isDestroyed=function(){return!1},tQ.prototype.destroy=function(){return Ks(this)};var nQ=tQ;function iQ(e){i.a.typeOf.object("options",e),i.a.typeOf.object("options.rectangle",e.rectangle),this.rectangle=Se.clone(e.rectangle),this.minimumHeight=Object(r.a)(e.minimumHeight,0),this.maximumHeight=Object(r.a)(e.maximumHeight,0),this.southwestCornerCartesian=new O,this.northeastCornerCartesian=new O,this.westNormal=new O,this.southNormal=new O,this.eastNormal=new O,this.northNormal=new O;var t=Object(r.a)(e.ellipsoid,W.WGS84);!function(e,t,n){n.cartographicToCartesian(Se.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(Se.northeast(t),e.northeastCornerCartesian),uQ.longitude=t.west,uQ.latitude=.5*(t.south+t.north),uQ.height=0;var i=n.cartographicToCartesian(uQ,cQ),r=O.cross(i,O.UNIT_Z,rQ);O.normalize(r,e.westNormal),uQ.longitude=t.east;var o=n.cartographicToCartesian(uQ,lQ),a=O.cross(O.UNIT_Z,o,rQ);O.normalize(a,e.eastNormal);var s,c=O.subtract(i,o,rQ),l=O.normalize(c,sQ),u=t.south;if(u>0){uQ.longitude=.5*(t.west+t.east),uQ.latitude=u;var h=n.cartographicToCartesian(uQ,dQ.origin);O.clone(l,dQ.direction);var d=Fi.fromPointNormal(e.southwestCornerCartesian,e.westNormal,hQ);Ii.rayPlane(dQ,d,e.southwestCornerCartesian),s=n.geodeticSurfaceNormal(h,oQ)}else s=n.geodeticSurfaceNormalCartographic(Se.southeast(t),oQ);var f=O.cross(s,c,aQ);O.normalize(f,e.southNormal);var p,m=t.north;if(m<0){uQ.longitude=.5*(t.west+t.east),uQ.latitude=m;var g=n.cartographicToCartesian(uQ,dQ.origin);O.negate(l,dQ.direction);var v=Fi.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,hQ);Ii.rayPlane(dQ,v,e.northeastCornerCartesian),p=n.geodeticSurfaceNormal(g,oQ)}else p=n.geodeticSurfaceNormalCartographic(Se.northwest(t),oQ);var _=O.cross(c,p,aQ);O.normalize(_,e.northNormal)}(this,e.rectangle,t),Object(r.a)(e.computeBoundingVolumes,!0)&&(this._orientedBoundingBox=bs.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,t),this._boundingSphere=gt.fromOrientedBoundingBox(this._orientedBoundingBox))}Object.defineProperties(iQ.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});var rQ=new O,oQ=new O,aQ=new O,sQ=new O,cQ=new O,lQ=new O,uQ=new R,hQ=new Fi(O.UNIT_X,0),dQ=new ti;var fQ=new O,pQ=new O,mQ=new O(0,-1,0),gQ=new O(0,0,-1),vQ=new O;iQ.prototype.distanceToCamera=function(e){i.a.defined("frameState",e);var t,n,r,o=e.camera,a=o.positionWC,s=o.positionCartographic,c=0;if(!Se.contains(this.rectangle,s)){var l=this.southwestCornerCartesian,u=this.northeastCornerCartesian,h=this.westNormal,d=this.southNormal,f=this.eastNormal,p=this.northNormal;e.mode!==IR.SCENE3D&&((l=e.mapProjection.project(Se.southwest(this.rectangle),fQ)).z=l.y,l.y=l.x,l.x=0,(u=e.mapProjection.project(Se.northeast(this.rectangle),pQ)).z=u.y,u.y=u.x,u.x=0,h=mQ,f=O.UNIT_Y,d=gQ,p=O.UNIT_Z);var m=O.subtract(a,l,vQ),g=O.dot(m,h),v=O.dot(m,d),_=O.subtract(a,u,vQ),b=O.dot(_,f),y=O.dot(_,p);g>0?c+=g*g:b>0&&(c+=b*b),v>0?c+=v*v:y>0&&(c+=y*y)}if(e.mode===IR.SCENE3D?(t=s.height,n=this.minimumHeight,r=this.maximumHeight):(t=a.x,n=0,r=0),t>r){var w=t-r;c+=w*w}else if(t<n){var C=n-t;c+=C*C}return Math.sqrt(c)},iQ.prototype.intersectPlane=function(e){return i.a.defined("plane",e),this._orientedBoundingBox.intersectPlane(e)},iQ.prototype.createDebugVolume=function(e){i.a.defined("color",e);var t=new Ae.clone(Ae.IDENTITY),n=new ET({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),r=new fh({geometry:n,id:"outline",modelMatrix:t,attributes:{color:Uf.fromColor(e)}});return new bL({geometryInstances:r,appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1})};var _Q=iQ;function bQ(e,t){0===t&&(t=d.EPSILON7),this._boundingSphere=new gt(e,t)}Object.defineProperties(bQ.prototype,{center:{get:function(){return this._boundingSphere.center}},radius:{get:function(){return this._boundingSphere.radius}},boundingVolume:{get:function(){return this._boundingSphere}},boundingSphere:{get:function(){return this._boundingSphere}}}),bQ.prototype.distanceToCamera=function(e){i.a.defined("frameState",e);var t=this._boundingSphere;return Math.max(0,O.distance(t.center,e.camera.positionWC)-t.radius)},bQ.prototype.intersectPlane=function(e){return i.a.defined("plane",e),gt.intersectPlane(this._boundingSphere,e)},bQ.prototype.update=function(e,t){O.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t},bQ.prototype.createDebugVolume=function(e){i.a.defined("color",e);var t=new qS({radius:this.radius}),n=Ae.fromTranslation(this.center,new Ae.clone(Ae.IDENTITY)),r=new fh({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Uf.fromColor(e)}});return new bL({geometryInstances:r,appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1})};var yQ=bQ,wQ=new O,OQ=new O,CQ=new O,EQ=new O;function AQ(e,t,n){n=O.cross(e,t,n);var i=O.magnitude(n);return O.multiplyByScalar(n,d.EPSILON7/i,n)}function xQ(e,t){var n=O.normalize(e,EQ);return AQ(e,O.equalsEpsilon(n,O.UNIT_X,d.EPSILON6)?O.UNIT_Y:O.UNIT_X,t)}function TQ(e){var t=oe.getColumn(e,0,wQ),n=oe.getColumn(e,1,OQ),i=oe.getColumn(e,2,CQ),r=O.equals(t,O.ZERO),o=O.equals(n,O.ZERO),a=O.equals(i,O.ZERO);return r||o||a?r&&o&&a?(e[0]=d.EPSILON7,e[4]=d.EPSILON7,e[8]=d.EPSILON7,e):(!r||o||a?r||!o||a?r||o||!a?r?o?a||(n=AQ(i,t=xQ(i,t),n)):i=AQ(n,t=xQ(n,t),i):i=AQ(n=xQ(t,n),t,i):i=AQ(n,t,i):n=AQ(t,i,n):t=AQ(n,i,t),oe.setColumn(e,0,t,e),oe.setColumn(e,1,n,e),oe.setColumn(e,2,i,e),e):e}function SQ(e,t){t=TQ(t),this._orientedBoundingBox=new bs(e,t),this._boundingSphere=gt.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(SQ.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}}),SQ.prototype.distanceToCamera=function(e){return i.a.defined("frameState",e),Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))},SQ.prototype.intersectPlane=function(e){return i.a.defined("plane",e),this._orientedBoundingBox.intersectPlane(e)},SQ.prototype.update=function(e,t){O.clone(e,this._orientedBoundingBox.center),t=TQ(t),oe.clone(t,this._orientedBoundingBox.halfAxes),gt.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)},SQ.prototype.createDebugVolume=function(e){i.a.defined("color",e);var t=new ru({minimum:new O(-1,-1,-1),maximum:new O(1,1,1)}),n=Ae.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),r=new fh({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Uf.fromColor(e)}});return new bL({geometryInstances:r,appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1})};var DQ=SQ;function PQ(e,t,n,i){this._tileset=e,this._header=n;var r=n.content;this.transform=Object(o.a)(n.transform)?Ae.unpack(n.transform):Ae.clone(Ae.IDENTITY);var a,s,c,l,u,h,d,f,p=Object(o.a)(i)?i.computedTransform:e.modelMatrix,m=Ae.multiply(p,this.transform,new Ae),g=Object(o.a)(i)?i._initialTransform:Ae.IDENTITY;if(this._initialTransform=Ae.multiply(g,this.transform,new Ae),this.computedTransform=m,this._boundingVolume=this.createBoundingVolume(n.boundingVolume,m),this._boundingVolume2D=void 0,Object(o.a)(r)&&Object(o.a)(r.boundingVolume)&&(a=this.createBoundingVolume(r.boundingVolume,m)),this._contentBoundingVolume=a,this._contentBoundingVolume2D=void 0,Object(o.a)(n.viewerRequestVolume)&&(s=this.createBoundingVolume(n.viewerRequestVolume,m)),this._viewerRequestVolume=s,this.geometricError=n.geometricError,this._geometricError=n.geometricError,Object(o.a)(this._geometricError)||(this._geometricError=Object(o.a)(i)?i.geometricError:e._geometricError,PQ._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale(),Object(o.a)(n.refine)?("replace"!==n.refine&&"add"!==n.refine||PQ._deprecationWarning("lowercase-refine",'This tile uses a lowercase refine "'+n.refine+'". Instead use "'+n.refine.toUpperCase()+'".'),c="REPLACE"===n.refine.toUpperCase()?eG.REPLACE:eG.ADD):c=Object(o.a)(i)?i.refine:eG.REPLACE,this.refine=c,this.children=[],this.parent=i,t=_t.a.createIfNeeded(t),Object(o.a)(r)){var v=r.uri;Object(o.a)(r.url)&&(PQ._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),v=r.url),u=!1,h=hK.UNLOADED,d=t.getDerivedResource({url:v}),f=TT.a.getServerKey(d.getUrlComponent())}else l=new nQ(e,this),u=!0,h=hK.READY;this._content=l,this._contentResource=d,this._contentState=h,this._contentReadyToProcessPromise=void 0,this._contentReadyPromise=void 0,this._expiredContent=void 0,this._serverKey=f,this.hasEmptyContent=u,this.hasTilesetContent=!1,this.cacheNode=void 0;var _,b,y=n.expire;Object(o.a)(y)&&(_=y.duration,Object(o.a)(y.date)&&(b=hr.fromIso8601(y.date))),this.expireDuration=_,this.expireDate=b,this.lastStyleTime=0,this._optimChildrenWithinParent=dK.NOT_COMPUTED,this.clippingPlanesDirty=!1,this.priorityDeferred=!1,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._screenSpaceErrorProgressiveResolution=0,this._visibilityPlaneMask=0,this._visible=!1,this._inRequestVolume=!1,this._finalResolution=!0,this._depth=0,this._stackLength=0,this._selectionDepth=0,this._updatedVisibilityFrame=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._requestedFrame=0,this._ancestorWithContent=void 0,this._ancestorWithContentAvailable=void 0,this._refines=!1,this._shouldSelect=!1,this._isClipped=!0,this._clippingPlanesState=0,this._debugBoundingVolume=void 0,this._debugContentBoundingVolume=void 0,this._debugViewerRequestVolume=void 0,this._debugColor=Hf.fromRandom({alpha:1}),this._debugColorizeTiles=!1,this._priority=0,this._priorityHolder=this,this._priorityProgressiveResolution=!1,this._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1,this._priorityReverseScreenSpaceError=0,this._foveatedFactor=0,this._wasMinPriorityChild=!1,this._loadTimestamp=new hr,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}PQ._deprecationWarning=q_,Object.defineProperties(PQ.prototype,{tileset:{get:function(){return this._tileset}},content:{get:function(){return this._content}},boundingVolume:{get:function(){return this._boundingVolume}},contentBoundingVolume:{get:function(){return Object(r.a)(this._contentBoundingVolume,this._boundingVolume)}},boundingSphere:{get:function(){return this._boundingVolume.boundingSphere}},extras:{get:function(){return this._header.extras}},color:{get:function(){return Object(o.a)(this._color)||(this._color=new Hf),Hf.clone(this._color)},set:function(e){this._color=Hf.clone(e,this._color),this._colorDirty=!0}},contentAvailable:{get:function(){return this.contentReady&&!this.hasEmptyContent&&!this.hasTilesetContent||Object(o.a)(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===hK.READY}},contentUnloaded:{get:function(){return this._contentState===hK.UNLOADED}},contentExpired:{get:function(){return this._contentState===hK.EXPIRED}},contentFailed:{get:function(){return this._contentState===hK.FAILED}},contentReadyToProcessPromise:{get:function(){if(Object(o.a)(this._contentReadyToProcessPromise))return this._contentReadyToProcessPromise.promise}},contentReadyPromise:{get:function(){if(Object(o.a)(this._contentReadyPromise))return this._contentReadyPromise.promise}},commandsLength:{get:function(){return this._commandsLength}}});var IQ=new O;var MQ=new hr;PQ.prototype.getScreenSpaceError=function(e,t,n){var i=this._tileset,a=Object(r.a)(n,1),s=Object(o.a)(this.parent)?this.parent.geometricError:i._geometricError,c=t?s:this.geometricError;if(0===c)return 0;var l,u=e.camera,h=u.frustum,f=e.context,p=f.drawingBufferWidth,m=f.drawingBufferHeight*a;if(e.mode===IR.SCENE2D||h instanceof Vb){Object(o.a)(h._offCenterFrustum)&&(h=h._offCenterFrustum),l=c/(Math.max(h.top-h.bottom,h.right-h.left)/Math.max(p,m))}else{var g=Math.max(this._distanceToCamera,d.EPSILON7);if(l=c*m/(g*u.frustum.sseDenominator),i.dynamicScreenSpaceError){var v=i._dynamicScreenSpaceErrorComputedDensity,_=i.dynamicScreenSpaceErrorFactor;l-=d.fog(g,v)*_}}return l/=e.pixelRatio},PQ.prototype.updateVisibility=function(e){var t=this.parent,n=this._tileset,i=Object(o.a)(t)?t.computedTransform:n.modelMatrix,r=Object(o.a)(t)?t._visibilityPlaneMask:C_.MASK_INDETERMINATE;this.updateTransform(i),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,n.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,r),this._visible=this._visibilityPlaneMask!==C_.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=function(e,t){var n=t.parent,i=Object(o.a)(n)&&(!e._skipLevelOfDetail||0===t._screenSpaceError||n.hasTilesetContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-i}(n,this),this._priorityProgressiveResolution=function(e,t){if(e.progressiveResolutionHeightFraction<=0||e.progressiveResolutionHeightFraction>.5)return!1;var n=t._screenSpaceErrorProgressiveResolution>e._maximumScreenSpaceError;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;var i=t.parent,r=e._maximumScreenSpaceError,a=t._screenSpaceErrorProgressiveResolution<=r,s=Object(o.a)(i)&&i._screenSpaceErrorProgressiveResolution>r;return a&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,n=!0),n}(n,this),this.priorityDeferred=function(e,t){var n=e._tileset,i=t.camera,r=e.boundingSphere,a=r.radius,s=O.multiplyByScalar(i.directionWC,e._centerZDepth,IQ),c=O.add(i.positionWC,s,IQ),l=O.subtract(c,r.center,IQ);if(O.magnitude(l)>a){var u=O.normalize(l,IQ),h=O.multiplyByScalar(u,a,IQ),f=O.add(r.center,h,IQ),p=O.subtract(f,i.positionWC,IQ),m=O.normalize(p,IQ);e._foveatedFactor=1-Math.abs(O.dot(i.directionWC,m))}else e._foveatedFactor=0;var g=e.refine===eG.REPLACE,v=n._skipLevelOfDetail;if(g&&!v||!n.foveatedScreenSpaceError||1===n.foveatedConeSize||e._priorityProgressiveResolution&&g&&v||n._pass===eQ.PRELOAD_FLIGHT||n._pass===eQ.PRELOAD)return!1;var _=1-Math.cos(.5*i.frustum.fov),b=n.foveatedConeSize*_;if(e._foveatedFactor<=b)return!1;var y=_-b,w=d.clamp((e._foveatedFactor-b)/y,0,1),C=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.maximumScreenSpaceError,w),E=0===e._screenSpaceError&&Object(o.a)(e.parent)?.5*e.parent._screenSpaceError:e._screenSpaceError;return n.maximumScreenSpaceError-C<=E}(this,e)},PQ.prototype.updateExpiration=function(){if(Object(o.a)(this.expireDate)&&this.contentReady&&!this.hasEmptyContent){var e=hr.now(MQ);hr.lessThan(this.expireDate,e)&&(this._contentState=hK.EXPIRED,this._expiredContent=this._content)}},PQ.prototype.requestContent=function(){var e=this,t=this._tileset;if(this.hasEmptyContent)return!1;var n=this._contentResource.clone(),i=this.contentExpired;i&&n.setQueryParameters({expired:this.expireDate.toString()});var r,a=new Ac.a({throttle:!0,throttleByServer:!0,type:Tc.a.TILES3D,priorityFunction:(r=this,function(){return r._priority}),serverKey:this._serverKey});this._request=a,n.request=a;var s=n.fetchArrayBuffer();if(!Object(o.a)(s))return!1;var c=this._contentState;this._contentState=hK.LOADING,this._contentReadyToProcessPromise=Yt.a.defer(),this._contentReadyPromise=Yt.a.defer();var l=function(e,t){return function(n){e._contentState===hK.PROCESSING?--t.statistics.numberOfTilesProcessing:--t.statistics.numberOfPendingRequests,e._contentState=hK.FAILED,e._contentReadyPromise.reject(n),e._contentReadyToProcessPromise.reject(n)}}(this,t);return s.then((function(n){if(!e.isDestroyed()){var r,a=new Uint8Array(n),s=Ly(a),c=uK[s];return t._disableSkipLevelOfDetail=t._disableSkipLevelOfDetail||"vctr"===s||"geom"===s,Object(o.a)(c)?r=c(t,e,e._contentResource,n,0):(r=uK.json(t,e,e._contentResource,n,0),e.hasTilesetContent=!0),i&&(e.expireDate=void 0),e._content=r,e._contentState=hK.PROCESSING,e._contentReadyToProcessPromise.resolve(r),r.readyPromise.then((function(t){e.isDestroyed()?l():(!function(e){if(Object(o.a)(e.expireDuration)){var t=hr.now(MQ);hr.addSeconds(t,e.expireDuration,t),Object(o.a)(e.expireDate)?hr.lessThan(e.expireDate,t)&&hr.clone(t,e.expireDate):e.expireDate=hr.clone(t)}}(e),e._selectedFrame=0,e.lastStyleTime=0,hr.now(e._loadTimestamp),e._contentState=hK.READY,e._contentReadyPromise.resolve(t))}))}l()})).otherwise((function(n){if(a.state===xc.a.CANCELLED)return e._contentState=c,--t.statistics.numberOfPendingRequests,void++t.statistics.numberOfAttemptedRequests;l(n)})),!0},PQ.prototype.unloadContent=function(){this.hasEmptyContent||this.hasTilesetContent||(this._content=this._content&&this._content.destroy(),this._contentState=hK.UNLOADED,this._contentReadyToProcessPromise=void 0,this._contentReadyPromise=void 0,this.lastStyleTime=0,this.clippingPlanesDirty=0===this._clippingPlanesState,this._clippingPlanesState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var RQ=new gt;function LQ(e,t){if(t.mode!==IR.SCENE3D&&!Object(o.a)(e._boundingVolume2D)){var n=e._boundingVolume.boundingSphere,i=gt.projectTo2D(n,t.mapProjection,RQ);e._boundingVolume2D=new yQ(i.center,i.radius)}return t.mode!==IR.SCENE3D?e._boundingVolume2D:e._boundingVolume}PQ.prototype.visibility=function(e,t){var n=e.cullingVolume,i=LQ(this,e),r=this._tileset,a=r.clippingPlanes;if(Object(o.a)(a)&&a.enabled){var s=a.computeIntersectionWithBoundingVolume(i,r.clippingPlanesOriginMatrix);if(this._isClipped=s!==Y.INSIDE,s===Y.OUTSIDE)return C_.MASK_OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)},PQ.prototype.contentVisibility=function(e){if(!Object(o.a)(this._contentBoundingVolume))return Y.INSIDE;if(this._visibilityPlaneMask===C_.MASK_INSIDE)return Y.INSIDE;var t=e.cullingVolume,n=function(e,t){if(t.mode!==IR.SCENE3D&&!Object(o.a)(e._contentBoundingVolume2D)){var n=e._contentBoundingVolume.boundingSphere,i=gt.projectTo2D(n,t.mapProjection,RQ);e._contentBoundingVolume2D=new yQ(i.center,i.radius)}return t.mode!==IR.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}(this,e),i=this._tileset,r=i.clippingPlanes;if(Object(o.a)(r)&&r.enabled){var a=r.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=a!==Y.INSIDE,a===Y.OUTSIDE)return Y.OUTSIDE}return t.computeVisibility(n)},PQ.prototype.distanceToTile=function(e){return LQ(this,e).distanceToCamera(e)};var jQ=new O;PQ.prototype.distanceToTileCenter=function(e){var t=LQ(this,e).boundingVolume,n=O.subtract(t.center,e.camera.positionWC,jQ);return O.dot(e.camera.directionWC,n)},PQ.prototype.insideViewerRequestVolume=function(e){var t=this._viewerRequestVolume;return!Object(o.a)(t)||0===t.distanceToCamera(e)};var FQ=new oe,NQ=new O,zQ=new oe,kQ=new O,BQ=new Se,HQ=new bs,VQ=new Ae;function UQ(e,t,n,i){if(!Ae.equalsEpsilon(t,n,d.EPSILON8))return function(e,t,n,i){var r=Se.unpack(e,0,BQ),a=e[4],s=e[5],c=bs.fromRectangle(r,a,s,W.WGS84,HQ),l=c.center,u=c.halfAxes;t=Ae.multiplyTransformation(t,Ae.inverseTransformation(n,VQ),VQ),l=Ae.multiplyByPoint(t,l,l);var h=Ae.getMatrix3(t,FQ);return u=oe.multiply(h,u,u),Object(o.a)(i)&&i instanceof DQ?(i.update(l,u),i):new DQ(l,u)}(e,t,n,i);if(Object(o.a)(i))return i;var r=Se.unpack(e,0,BQ);return new _Q({rectangle:r,minimumHeight:e[4],maximumHeight:e[5]})}PQ.prototype.createBoundingVolume=function(e,t,n){if(!Object(o.a)(e))throw new de.a("boundingVolume must be defined");if(Object(o.a)(e.box))return function(e,t,n){var i=O.fromElements(e[0],e[1],e[2],kQ),r=oe.fromArray(e,3,zQ);i=Ae.multiplyByPoint(t,i,i);var a=Ae.getMatrix3(t,FQ);return r=oe.multiply(a,r,r),Object(o.a)(n)?(n.update(i,r),n):new DQ(i,r)}(e.box,t,n);if(Object(o.a)(e.region))return UQ(e.region,t,this._initialTransform,n);if(Object(o.a)(e.sphere))return function(e,t,n){var i=O.fromElements(e[0],e[1],e[2],kQ),r=e[3];i=Ae.multiplyByPoint(t,i,i);var a=Ae.getScale(t,NQ);return r*=O.maximumComponent(a),Object(o.a)(n)?(n.update(i,r),n):new yQ(i,r)}(e.sphere,t,n);throw new de.a("boundingVolume must contain a sphere, region, or box")},PQ.prototype.updateTransform=function(e){e=Object(r.a)(e,Ae.IDENTITY);var t=Ae.multiply(e,this.transform,VQ);if(!Ae.equals(t,this.computedTransform)){Ae.clone(t,this.computedTransform);var n=this._header,i=this._header.content;this._boundingVolume=this.createBoundingVolume(n.boundingVolume,this.computedTransform,this._boundingVolume),Object(o.a)(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(i.boundingVolume,this.computedTransform,this._contentBoundingVolume)),Object(o.a)(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(n.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy()}},PQ.prototype.updateGeometricErrorScale=function(){var e=Ae.getScale(this.computedTransform,NQ),t=O.maximumComponent(e);this.geometricError=this._geometricError*t},PQ.prototype.update=function(e,t,n){var i=t.commandList.length;!function(e,t){var n=t.clippingPlanes,i=0;Object(o.a)(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}(this,e),function(e,t,n,i){if(i.isRender){var r=Object(o.a)(e._header.content)&&Object(o.a)(e._header.content.boundingVolume),a=e.hasEmptyContent||e.hasTilesetContent,s=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!r;if(s){var c;c=e._finalResolution?a?Hf.DARKGRAY:Hf.WHITE:Hf.YELLOW,Object(o.a)(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(c)),e._debugBoundingVolume.update(n);var l=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");l.color=Uf.toValue(c,l.color)}else!s&&Object(o.a)(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&r?(Object(o.a)(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(Hf.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&Object(o.a)(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&Object(o.a)(e._viewerRequestVolume)?(Object(o.a)(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(Hf.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&Object(o.a)(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());var u=t.debugColorizeTiles&&!e._debugColorizeTiles||Object(o.a)(t._heatmap.tilePropertyName),h=!t.debugColorizeTiles&&e._debugColorizeTiles;u?(t._heatmap.colorize(e,n),e._debugColorizeTiles=!0,e.color=e._debugColor):h&&(e._debugColorizeTiles=!1,e.color=Hf.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),h&&t.makeStyleDirty()}}(this,e,t,n),function(e,t,n){var i=e._content,r=e._expiredContent;if(Object(o.a)(r)){if(!e.contentReady)return void r.update(t,n);e._expiredContent.destroy(),e._expiredContent=void 0}i.update(t,n)}(this,e,t),this._commandsLength=t.commandList.length-i,this.clippingPlanesDirty=!1};var WQ=[];function GQ(e,t,n){var i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function qQ(e,t,n){return Math.max(d.normalize(e,t,n)-d.EPSILON7,0)}PQ.prototype.process=function(e,t){var n=t.commandList;t.commandList=WQ,this._content.update(e,t),WQ.length=0,t.commandList=n},PQ.prototype.updatePriority=function(){var e=this.tileset,t=e.preferLeaves,n=e._minimumPriority,i=e._maximumPriority,r=Math.pow(10,8),o=Math.pow(10,9),a=Math.pow(10,10),s=qQ(this._depth,n.depth,i.depth);s=t?1-s:s;var c=GQ(!e._skipLevelOfDetail&&this.refine===eG.REPLACE?qQ(this._priorityHolder._distanceToCamera,n.distance,i.distance):qQ(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),4,0),l=this._priorityProgressiveResolution?0:r,u=GQ(qQ(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),4,4),h=this.priorityDeferred?o:0,d=e._pass===eQ.PRELOAD_FLIGHT?0:a;this._priority=s+c+l+u+h+d},PQ.prototype.isDestroyed=function(){return!1},PQ.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),Ks(this)};var YQ=PQ,$Q={},XQ=new O;$Q.checkChildrenWithinParent=function(e){i.a.typeOf.object("tile",e);var t=e.children,n=t.length,r=e.boundingVolume;if(r instanceof DQ||r instanceof _Q){var o=r._orientedBoundingBox;e._optimChildrenWithinParent=dK.USE_OPTIMIZATION;for(var a=0;a<n;++a){var s=t[a].boundingVolume;if(!(s instanceof DQ||s instanceof _Q)){e._optimChildrenWithinParent=dK.SKIP_OPTIMIZATION;break}var c=s._orientedBoundingBox,l=O.subtract(c.center,o.center,XQ),u=O.magnitude(l);if(O.divideByScalar(l,u,l),Math.abs(o.halfAxes[0]*l.x)+Math.abs(o.halfAxes[1]*l.y)+Math.abs(o.halfAxes[2]*l.z)+Math.abs(o.halfAxes[3]*l.x)+Math.abs(o.halfAxes[4]*l.y)+Math.abs(o.halfAxes[5]*l.z)+Math.abs(o.halfAxes[6]*l.x)+Math.abs(o.halfAxes[7]*l.y)+Math.abs(o.halfAxes[8]*l.z)<=Math.abs(c.halfAxes[0]*l.x)+Math.abs(c.halfAxes[1]*l.y)+Math.abs(c.halfAxes[2]*l.z)+Math.abs(c.halfAxes[3]*l.x)+Math.abs(c.halfAxes[4]*l.y)+Math.abs(c.halfAxes[5]*l.z)+Math.abs(c.halfAxes[6]*l.x)+Math.abs(c.halfAxes[7]*l.y)+Math.abs(c.halfAxes[8]*l.z)+u){e._optimChildrenWithinParent=dK.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===dK.USE_OPTIMIZATION};var KQ=$Q;function QQ(){this._list=new eb,this._sentinel=this._list.add(),this._trimTiles=!1}QQ.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)},QQ.prototype.touch=function(e){var t=e.cacheNode;Object(o.a)(t)&&this._list.splice(this._sentinel,t)},QQ.prototype.add=function(e){Object(o.a)(e.cacheNode)||(e.cacheNode=this._list.add(e))},QQ.prototype.unloadTile=function(e,t,n){var i=t.cacheNode;Object(o.a)(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))},QQ.prototype.unloadTiles=function(e,t){var n=this._trimTiles;this._trimTiles=!1;for(var i=this._list,r=1024*e.maximumMemoryUsage*1024,o=this._sentinel,a=i.head;a!==o&&(e.totalMemoryUsageInBytes>r||n);){var s=a.item;a=a.next,this.unloadTile(e,s,t)}},QQ.prototype.trim=function(){this._trimTiles=!0};var ZQ=QQ;function JQ(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function eZ(e,t){return"_loadTimestamp"===t?hr.toDate(e).getTime():e}JQ.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=eZ(e,n),this._referenceMaximum[n]=eZ(t,n)};var tZ=[new Hf(.1,.1,.1,1),new Hf(.153,.278,.878,1),new Hf(.827,.231,.49,1),new Hf(.827,.188,.22,1),new Hf(1,.592,.259,1),new Hf(1,.843,0,1)];JQ.prototype.colorize=function(e,t){var n=this.tilePropertyName;if(Object(o.a)(n)&&e.contentAvailable&&e._selectedFrame===t.frameNumber){var i=function(e,t){var n=e.tilePropertyName;if(Object(o.a)(n)){var i=eZ(t[n],n);return Object(o.a)(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}(this,e),r=this._previousMinimum,a=this._previousMaximum;if(r!==Number.MAX_VALUE&&a!==-Number.MAX_VALUE){var s=a-r+d.EPSILON7,c=d.clamp(i-r,0,s)/s*(tZ.length-1),l=Math.floor(c),u=Math.ceil(c),h=c-l,f=tZ[l],p=tZ[u],m=Hf.clone(Hf.WHITE);m.red=d.lerp(f.red,p.red,h),m.green=d.lerp(f.green,p.green,h),m.blue=d.lerp(f.blue,p.blue,h),e._debugColor=m}}},JQ.prototype.resetMinimumMaximum=function(){var e=this.tilePropertyName;if(Object(o.a)(e)){var t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=Object(o.a)(t)&&Object(o.a)(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var nZ=JQ;function iZ(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.batchTableByteLength=0}function rZ(e,t,n,i){var r=t.innerContents,a=t.pointsLength,s=t.trianglesLength,c=t.featuresLength,l=t.geometryByteLength,u=t.texturesByteLength,h=t.batchTableByteLength;if(i?(e.numberOfFeaturesLoaded+=n?-c:c,e.numberOfPointsLoaded+=n?-a:a,e.geometryByteLength+=n?-l:l,e.texturesByteLength+=n?-u:u,e.batchTableByteLength+=n?-h:h):(e.numberOfFeaturesSelected+=n?-c:c,e.numberOfPointsSelected+=n?-a:a,e.numberOfTrianglesSelected+=n?-s:s),Object(o.a)(r))for(var d=r.length,f=0;f<d;++f)rZ(e,r[f],n,i)}iZ.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0},iZ.prototype.incrementSelectionCounts=function(e){rZ(this,e,!1,!1)},iZ.prototype.incrementLoadCounts=function(e){rZ(this,e,!1,!0)},iZ.prototype.decrementLoadCounts=function(e){rZ(this,e,!0,!0)},iZ.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.selected=e.selected,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.batchTableByteLength=e.batchTableByteLength};var oZ=iZ;function aZ(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(aZ.prototype,{style:{get:function(){return this._style},set:function(e){this._style=e,this._styleDirty=!0}}}),aZ.prototype.makeDirty=function(){this._styleDirty=!0},aZ.prototype.applyStyle=function(e,t){if(e.ready&&(!Object(o.a)(this._style)||this._style.ready)){var n=this._styleDirty;t.isRender&&(this._styleDirty=!1),n&&++this._lastStyleTime;for(var i=this._lastStyleTime,r=e._statistics,a=n?e._selectedTiles:e._selectedTilesToStyle,s=a.length,c=0;c<s;++c){var l=a[c];if(l.lastStyleTime!==i){var u=l.content;l.lastStyleTime=i,u.applyStyle(this._style),r.numberOfFeaturesStyled+=u.featuresLength,++r.numberOfTilesStyled}}}};var sZ=aZ;function cZ(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.url",e.url),this._url=void 0,this._basePath=void 0,this._root=void 0,this._asset=void 0,this._properties=void 0,this._geometricError=void 0,this._extensionsUsed=void 0,this._extensions=void 0,this._gltfUpAxis=void 0,this._cache=new ZQ,this._processingQueue=[],this._selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this._selectedTilesToStyle=[],this._loadTimestamp=void 0,this._timeSinceLoad=0,this._updatedVisibilityFrame=0,this._updatedModelMatrixFrame=0,this._modelMatrixChanged=!1,this._previousModelMatrix=void 0,this._extras=void 0,this._credits=void 0,this._cullWithChildrenBounds=Object(r.a)(e.cullWithChildrenBounds,!0),this._allTilesAdditive=!0,this._hasMixedContent=!1,this._stencilClearCommand=void 0,this._backfaceCommands=new VC,this._maximumScreenSpaceError=Object(r.a)(e.maximumScreenSpaceError,16),this._maximumMemoryUsage=Object(r.a)(e.maximumMemoryUsage,512),this._styleEngine=new sZ,this._modelMatrix=Object(o.a)(e.modelMatrix)?Ae.clone(e.modelMatrix):Ae.clone(Ae.IDENTITY),this._statistics=new oZ,this._statisticsLast=new oZ,this._statisticsPerPass=new Array(eQ.NUMBER_OF_PASSES);for(var t=0;t<eQ.NUMBER_OF_PASSES;++t)this._statisticsPerPass[t]=new oZ;this._requestedTilesInFlight=[],this._maximumPriority={foveatedFactor:-Number.MAX_VALUE,depth:-Number.MAX_VALUE,distance:-Number.MAX_VALUE,reverseScreenSpaceError:-Number.MAX_VALUE},this._minimumPriority={foveatedFactor:Number.MAX_VALUE,depth:Number.MAX_VALUE,distance:Number.MAX_VALUE,reverseScreenSpaceError:Number.MAX_VALUE},this._heatmap=new nZ(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=Object(r.a)(e.cullRequestsWhileMoving,!0),this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=Object(r.a)(e.cullRequestsWhileMovingMultiplier,60),this.progressiveResolutionHeightFraction=d.clamp(Object(r.a)(e.progressiveResolutionHeightFraction,.3),0,.5),this.preferLeaves=Object(r.a)(e.preferLeaves,!1),this._tilesLoaded=!1,this._initialTilesLoaded=!1,this._tileDebugLabels=void 0,this._readyPromise=Yt.a.defer(),this._classificationType=e.classificationType,this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84),this._initialClippingPlanesOriginMatrix=Ae.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this.preloadWhenHidden=Object(r.a)(e.preloadWhenHidden,!1),this.preloadFlightDestinations=Object(r.a)(e.preloadFlightDestinations,!0),this._pass=void 0,this.dynamicScreenSpaceError=Object(r.a)(e.dynamicScreenSpaceError,!1),this.foveatedScreenSpaceError=Object(r.a)(e.foveatedScreenSpaceError,!0),this._foveatedConeSize=Object(r.a)(e.foveatedConeSize,.1),this._foveatedMinimumScreenSpaceErrorRelaxation=Object(r.a)(e.foveatedMinimumScreenSpaceErrorRelaxation,0),this.foveatedInterpolationCallback=Object(r.a)(e.foveatedInterpolationCallback,d.lerp),this.foveatedTimeDelay=Object(r.a)(e.foveatedTimeDelay,.2),this.dynamicScreenSpaceErrorDensity=.00278,this.dynamicScreenSpaceErrorFactor=4,this.dynamicScreenSpaceErrorHeightFalloff=.25,this._dynamicScreenSpaceErrorComputedDensity=0,this.shadows=Object(r.a)(e.shadows,RR.ENABLED),this.show=Object(r.a)(e.show,!0),this.colorBlendMode=EN.HIGHLIGHT,this.colorBlendAmount=.5,this.pointCloudShading=new zG(e.pointCloudShading),this._pointCloudEyeDomeLighting=new FG,this.loadProgress=new wn.a,this.allTilesLoaded=new wn.a,this.initialTilesLoaded=new wn.a,this.tileLoad=new wn.a,this.tileUnload=new wn.a,this.tileFailed=new wn.a,this.tileVisible=new wn.a,this.skipLevelOfDetail=Object(r.a)(e.skipLevelOfDetail,!1),this._skipLevelOfDetail=this.skipLevelOfDetail,this._disableSkipLevelOfDetail=!1,this.baseScreenSpaceError=Object(r.a)(e.baseScreenSpaceError,1024),this.skipScreenSpaceErrorFactor=Object(r.a)(e.skipScreenSpaceErrorFactor,16),this.skipLevels=Object(r.a)(e.skipLevels,1),this.immediatelyLoadDesiredLevelOfDetail=Object(r.a)(e.immediatelyLoadDesiredLevelOfDetail,!1),this.loadSiblings=Object(r.a)(e.loadSiblings,!1),this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._imageBasedLightingFactor=new Mt(1,1),Mt.clone(e.imageBasedLightingFactor,this._imageBasedLightingFactor),this.lightColor=e.lightColor,this.luminanceAtZenith=Object(r.a)(e.luminanceAtZenith,.2),this.sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients,this.specularEnvironmentMaps=e.specularEnvironmentMaps,this.backFaceCulling=Object(r.a)(e.backFaceCulling,!0),this.debugFreezeFrame=Object(r.a)(e.debugFreezeFrame,!1),this.debugColorizeTiles=Object(r.a)(e.debugColorizeTiles,!1),this.debugWireframe=Object(r.a)(e.debugWireframe,!1),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.debugShowContentBoundingVolume=Object(r.a)(e.debugShowContentBoundingVolume,!1),this.debugShowViewerRequestVolume=Object(r.a)(e.debugShowViewerRequestVolume,!1),this._tileDebugLabels=void 0,this.debugPickedTileLabelOnly=!1,this.debugPickedTile=void 0,this.debugPickPosition=void 0,this.debugShowGeometricError=Object(r.a)(e.debugShowGeometricError,!1),this.debugShowRenderingStatistics=Object(r.a)(e.debugShowRenderingStatistics,!1),this.debugShowMemoryUsage=Object(r.a)(e.debugShowMemoryUsage,!1),this.debugShowUrl=Object(r.a)(e.debugShowUrl,!1);var n,a=this;Object(Yt.a)(e.url).then((function(e){var t;return n=_t.a.createIfNeeded(e),a._credits=n.credits,"json"===n.extension?t=n.getBaseUri(!0):n.isDataUri&&(t=""),a._url=n.url,a._basePath=t,cZ.loadJson(n)})).then((function(e){a._root=a.loadTileset(n,e);var t=Object(o.a)(e.asset.gltfUpAxis)?ON.fromName(e.asset.gltfUpAxis):ON.Y,i=e.asset;a._asset=i,a._properties=e.properties,a._geometricError=e.geometricError,a._extensionsUsed=e.extensionsUsed,a._extensions=e.extensions,a._gltfUpAxis=t,a._extras=e.extras;var r=i.extras;if(Object(o.a)(r)&&Object(o.a)(r.cesium)&&Object(o.a)(r.cesium.credits)){var s=r.cesium.credits,c=a._credits;Object(o.a)(c)||(c=[],a._credits=c);for(var l=0;l<s.length;++l){var u=s[l];c.push(new yn(u.html,u.showOnScreen))}}var h=a._root.createBoundingVolume(e.root.boundingVolume,Ae.IDENTITY).boundingSphere.center,d=a._ellipsoid.cartesianToCartographic(h);Object(o.a)(d)&&d.height>qt._defaultMinTerrainHeight&&(a._initialClippingPlanesOriginMatrix=ya.eastNorthUpToFixedFrame(h)),a._clippingPlanesOriginMatrix=Ae.clone(a._initialClippingPlanesOriginMatrix),a._readyPromise.resolve(a)})).otherwise((function(e){a._readyPromise.reject(e)}))}Object.defineProperties(cZ.prototype,{isCesium3DTileset:{get:function(){return!0}},asset:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._asset}},extensions:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._extensions}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){lH.setOwner(e,this,"_clippingPlanes")}},properties:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._properties}},ready:{get:function(){return Object(o.a)(this._root)}},readyPromise:{get:function(){return this._readyPromise.promise}},tilesLoaded:{get:function(){return this._tilesLoaded}},url:{get:function(){return this._url}},basePath:{get:function(){return q_("Cesium3DTileset.basePath","Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead."),this._basePath}},style:{get:function(){return this._styleEngine.style},set:function(e){this._styleEngine.style=e}},maximumScreenSpaceError:{get:function(){return this._maximumScreenSpaceError},set:function(e){i.a.typeOf.number.greaterThanOrEquals("maximumScreenSpaceError",e,0),this._maximumScreenSpaceError=e}},maximumMemoryUsage:{get:function(){return this._maximumMemoryUsage},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumMemoryUsage=e}},root:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._root}},boundingSphere:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._root.updateTransform(this._modelMatrix),this._root.boundingSphere}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=Ae.clone(e,this._modelMatrix)}},timeSinceLoad:{get:function(){return this._timeSinceLoad}},totalMemoryUsageInBytes:{get:function(){var e=this._statistics;return e.texturesByteLength+e.geometryByteLength+e.batchTableByteLength}},clippingPlanesOriginMatrix:{get:function(){return Object(o.a)(this._clippingPlanesOriginMatrix)?(this._clippingPlanesOriginMatrixDirty&&(Ae.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):Ae.IDENTITY}},styleEngine:{get:function(){return this._styleEngine}},statistics:{get:function(){return this._statistics}},classificationType:{get:function(){return this._classificationType}},ellipsoid:{get:function(){return this._ellipsoid}},foveatedConeSize:{get:function(){return this._foveatedConeSize},set:function(e){i.a.typeOf.number.greaterThanOrEquals("foveatedConeSize",e,0),i.a.typeOf.number.lessThanOrEquals("foveatedConeSize",e,1),this._foveatedConeSize=e}},foveatedMinimumScreenSpaceErrorRelaxation:{get:function(){return this._foveatedMinimumScreenSpaceErrorRelaxation},set:function(e){i.a.typeOf.number.greaterThanOrEquals("foveatedMinimumScreenSpaceErrorRelaxation",e,0),i.a.typeOf.number.lessThanOrEquals("foveatedMinimumScreenSpaceErrorRelaxation",e,this.maximumScreenSpaceError),this._foveatedMinimumScreenSpaceErrorRelaxation=e}},extras:{get:function(){if(!this.ready)throw new a.a("The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.");return this._extras}},imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){i.a.typeOf.object("imageBasedLightingFactor",e),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.x",e.x,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.x",e.x,1),i.a.typeOf.number.greaterThanOrEquals("imageBasedLightingFactor.y",e.y,0),i.a.typeOf.number.lessThanOrEquals("imageBasedLightingFactor.y",e.y,1),Mt.clone(e,this._imageBasedLightingFactor)}}}),cZ.loadJson=function(e){return _t.a.createIfNeeded(e).fetchJson()},cZ.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()},cZ.prototype.loadTileset=function(e,t,n){var i=t.asset;if(!Object(o.a)(i))throw new de.a("Tileset must have an asset property.");if("0.0"!==i.version&&"1.0"!==i.version)throw new de.a("The tileset must be 3D Tiles version 0.0 or 1.0.");var r=this._statistics,a=i.tilesetVersion;Object(o.a)(a)&&(this._basePath+="?v="+a,e.setQueryParameters({v:a}));var s=new YQ(this,e,t.root,n);Object(o.a)(n)&&(n.children.push(s),s._depth=n._depth+1);var c=[];for(c.push(s);c.length>0;){var l=c.pop();++r.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&l.refine===eG.ADD;var u=l._header.children;if(Object(o.a)(u))for(var h=u.length,d=0;d<h;++d){var f=u[d],p=new YQ(this,e,f,l);l.children.push(p),p._depth=l._depth+1,c.push(p)}this._cullWithChildrenBounds&&KQ.checkChildrenWithinParent(l)}return s};var lZ=new O,uZ=new R,hZ=new Ae,dZ=new O,fZ=new O,pZ=new O;function mZ(e,t){if(!t.hasEmptyContent){var n=e._statistics,i=t.contentExpired;t.requestContent()?(i&&(t.hasTilesetContent?function(e,t){var n=t,i=CZ;i.push(t);for(;i.length>0;){for(var r=(t=i.pop()).children,o=r.length,a=0;a<o;++a)i.push(r[a]);t!==n&&(AZ(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),++n.numberOfPendingRequests,e._requestedTilesInFlight.push(t),t.contentReadyToProcessPromise.then(function(e,t){return function(){e._processingQueue.push(t),--e._statistics.numberOfPendingRequests,++e._statistics.numberOfTilesProcessing}}(e,t)),t.contentReadyPromise.then(function(e,t){return function(){--e._statistics.numberOfTilesProcessing,t.hasTilesetContent||(e._statistics.incrementLoadCounts(t.content),++e._statistics.numberOfTilesWithContentReady,++e._statistics.numberOfLoadedTilesTotal,e._cache.add(t)),e.tileLoad.raiseEvent(t)}}(e,t)).otherwise(function(e,t){return function(n){var i=t._contentResource.url,r=Object(o.a)(n.message)?n.message:n.toString();e.tileFailed.numberOfListeners>0?e.tileFailed.raiseEvent({url:i,message:r}):(console.log("A 3D tile failed to load: "+i),console.log("Error: "+r))}}(e,t))):++n.numberOfAttemptedRequests}}function gZ(e,t){return e._priority-t._priority}cZ.prototype.postPassesUpdate=function(e){this.ready&&(!function(e,t){for(var n=e._requestedTilesInFlight,i=0,r=n.length,o=0;o<r;++o){var a=n[o],s=t.frameNumber-a._touchedFrame>=1;a._contentState===hK.LOADING?s?(a._request.cancel(),++i):i>0&&(n[o-i]=a):++i}n.length-=i}(this,e),function(e,t){var n=e._statistics,i=e._statisticsLast,r=n.numberOfPendingRequests,o=n.numberOfTilesProcessing,a=i.numberOfPendingRequests,s=i.numberOfTilesProcessing;oZ.clone(n,i);var c=r!==a||o!==s;c&&t.afterRender.push((function(){e.loadProgress.raiseEvent(r,o)}));e._tilesLoaded=0===n.numberOfPendingRequests&&0===n.numberOfTilesProcessing&&0===n.numberOfAttemptedRequests,c&&e._tilesLoaded&&(t.afterRender.push((function(){e.allTilesLoaded.raiseEvent()})),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push((function(){e.initialTilesLoaded.raiseEvent()}))))}(this,e),this._cache.unloadTiles(this,EZ))},cZ.prototype.prePassesUpdate=function(e){if(this.ready){!function(e,t){!function(e){for(var t=e._processingQueue,n=t.length,i=0,r=0;r<n;++r){var o=t[r];o._contentState===hK.PROCESSING?i>0&&(t[r-i]=o):++i}t.length-=i}(e);for(var n=e._processingQueue,i=n.length,r=0;r<i;++r)n[r].process(e,t)}(this,e);var t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,Object(o.a)(t)&&t.enabled&&t.update(e),Object(o.a)(this._loadTimestamp)||(this._loadTimestamp=hr.clone(e.time)),this._timeSinceLoad=Math.max(1e3*hr.secondsDifference(e.time,this._loadTimestamp),0),this._skipLevelOfDetail=this.skipLevelOfDetail&&!Object(o.a)(this._classificationType)&&!this._disableSkipLevelOfDetail&&!this._allTilesAdditive,this.dynamicScreenSpaceError&&function(e,t){var n,i,r,o,a,s=t.camera,c=e._root,l=c.contentBoundingVolume;if(l instanceof _Q)n=O.normalize(s.positionWC,lZ),i=s.directionWC,r=s.positionCartographic.height,o=l.minimumHeight,a=l.maximumHeight;else{var u=Ae.inverseTransformation(c.computedTransform,hZ),h=t.mapProjection.ellipsoid,f=l.boundingVolume,p=Ae.multiplyByPoint(u,f.center,dZ);if(O.magnitude(p)>h.minimumRadius){var m=R.fromCartesian(p,h,uZ);n=O.normalize(s.positionWC,lZ),i=s.directionWC,r=s.positionCartographic.height,o=0,a=2*m.height}else{var g=Ae.multiplyByPoint(u,s.positionWC,fZ);if(n=O.UNIT_Z,i=Ae.multiplyByPointAsVector(u,s.directionWC,pZ),i=O.normalize(i,i),r=g.z,l instanceof DQ){var v=c._header.boundingVolume.box[11];o=p.z-v,a=p.z+v}else if(l instanceof yQ){var _=f.radius;o=p.z-_,a=p.z+_}}}var b=o+(a-o)*e.dynamicScreenSpaceErrorHeightFalloff,y=a,w=d.clamp((r-b)/(y-b),0,1),C=1-Math.abs(O.dot(i,n));C*=1-w;var E=e.dynamicScreenSpaceErrorDensity;E*=C,e._dynamicScreenSpaceErrorComputedDensity=E}(this,e),e.newFrame&&this._cache.reset()}};var vZ=new O,_Z={maximumFractionDigits:3};function bZ(e){var t=e/1048576;return t<1?t.toLocaleString(void 0,_Z):Math.round(t).toLocaleString()}function yZ(e){var t=e.boundingVolume.boundingVolume,n=t.halfAxes,i=t.radius,r=O.clone(t.center,vZ);if(Object(o.a)(n))r.x+=.75*(n[0]+n[3]+n[6]),r.y+=.75*(n[1]+n[4]+n[7]),r.z+=.75*(n[2]+n[5]+n[8]);else if(Object(o.a)(i)){var a=O.normalize(t.center,vZ);a=O.multiplyByScalar(a,.75*i,vZ),r=O.add(a,t.center,vZ)}return r}function wZ(e,t,n){var i="",r=0;(t.debugShowGeometricError&&(i+="\nGeometric error: "+e.geometricError,r++),t.debugShowRenderingStatistics)&&(i+="\nCommands: "+e.commandsLength,r++,e.content.pointsLength>0&&(i+="\nPoints: "+e.content.pointsLength,r++),e.content.trianglesLength>0&&(i+="\nTriangles: "+e.content.trianglesLength,r++),i+="\nFeatures: "+e.content.featuresLength,r++);t.debugShowMemoryUsage&&(i+="\nTexture Memory: "+bZ(e.content.texturesByteLength),i+="\nGeometry Memory: "+bZ(e.content.geometryByteLength),r+=2),t.debugShowUrl&&(i+="\nUrl: "+e._header.content.uri,r++);var o={text:i.substring(1),position:n,font:19-r+"px sans-serif",showBackground:!0,disableDepthTestDistance:Number.POSITIVE_INFINITY};return t._tileDebugLabels.add(o)}function OZ(e,t,n){e._styleEngine.applyStyle(e,n);var i,r,a=n.isRender,s=e._statistics,c=t.commandList,l=c.length,u=e._selectedTiles,h=u.length,d=e._emptyTiles,f=d.length,p=e.tileVisible,m=e._skipLevelOfDetail&&e._hasMixedContent&&t.context.stencilBuffer&&h>0;e._backfaceCommands.length=0,m&&(Object(o.a)(e._stencilClearCommand)||(e._stencilClearCommand=new yN({stencil:0,pass:EI.CESIUM_3D_TILE,renderState:XI.fromCache({stencilMask:JL.SKIP_LOD_MASK})})),c.push(e._stencilClearCommand));var g=c.length;for(i=0;i<h;++i)r=u[i],a&&p.raiseEvent(r),r.update(e,t,n),s.incrementSelectionCounts(r.content),++s.selected;for(i=0;i<f;++i)(r=d[i]).update(e,t,n);var v=c.length-g;if(e._backfaceCommands.trim(),m){var _=e._backfaceCommands.values,b=_.length;for(c.length+=b,i=v-1;i>=0;--i)c[g+b+i]=c[g+i];for(i=0;i<b;++i)c[g+i]=_[i]}v=c.length-l,s.numberOfCommands=v,a&&e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&v>0&&e._pointCloudEyeDomeLighting.update(t,l,e.pointCloudShading,e.boundingSphere),a&&(e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(Object(o.a)(e._tileDebugLabels)||(e._tileDebugLabels=new I$),function(e,t){var n,i,r=e._selectedTiles,a=r.length,s=e._emptyTiles,c=s.length;if(e._tileDebugLabels.removeAll(),e.debugPickedTileLabelOnly){if(Object(o.a)(e.debugPickedTile)){var l=Object(o.a)(e.debugPickPosition)?e.debugPickPosition:yZ(e.debugPickedTile);wZ(e.debugPickedTile,e,l).pixelOffset=new Mt(15,-15)}}else{for(n=0;n<a;++n)wZ(i=r[n],e,yZ(i));for(n=0;n<c;++n)(i=s[n]).hasTilesetContent&&wZ(i,e,yZ(i))}e._tileDebugLabels.update(t)}(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var CZ=[];function EZ(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function AZ(e,t){e._cache.unloadTile(e,t,EZ),t.destroy()}function xZ(e,t,n,i){if(t.mode===IR.MORPHING)return!1;if(!e.ready)return!1;var r=e._statistics;r.clear();var a=i.isRender;++e._updatedVisibilityFrame,function(e){e._heatmap.resetMinimumMaximum(),e._minimumPriority.depth=Number.MAX_VALUE,e._maximumPriority.depth=-Number.MAX_VALUE,e._minimumPriority.foveatedFactor=Number.MAX_VALUE,e._maximumPriority.foveatedFactor=-Number.MAX_VALUE,e._minimumPriority.distance=Number.MAX_VALUE,e._maximumPriority.distance=-Number.MAX_VALUE,e._minimumPriority.reverseScreenSpaceError=Number.MAX_VALUE,e._maximumPriority.reverseScreenSpaceError=-Number.MAX_VALUE}(e),function(e,t){t.frameNumber===e._updatedModelMatrixFrame&&Object(o.a)(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!Ae.equals(e.modelMatrix,e._previousModelMatrix),e._previousModelMatrix=Ae.clone(e.modelMatrix,e._previousModelMatrix))}(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;var s=i.traversal.selectTiles(e,t);if(i.requestTiles&&function(e,t){var n=e._requestedTiles,i=n.length;n.sort(gZ);for(var r=0;r<i;++r)mZ(e,n[r])}(e),OZ(e,t,i),oZ.clone(r,n),a){var c=e._credits;if(Object(o.a)(c)&&0!==r.selected)for(var l=c.length,u=0;u<l;++u)t.creditDisplay.addCredit(c[u])}return s}cZ.prototype.trimLoadedTiles=function(){this._cache.trim()},cZ.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)},cZ.prototype.updateForPass=function(e,t){i.a.typeOf.object("frameState",e),i.a.typeOf.object("tilesetPassState",t);var n=t.pass;if((n!==eQ.PRELOAD||this.preloadWhenHidden&&!this.show)&&(n!==eQ.PRELOAD_FLIGHT||this.preloadFlightDestinations&&(this.show||this.preloadWhenHidden))&&(n!==eQ.REQUEST_RENDER_MODE_DEFER_CHECK||!(!this._cullRequestsWhileMoving&&this.foveatedTimeDelay<=0||!this.show))){var o=e.commandList,a=e.camera,s=e.cullingVolume;t.ready=!1;var c=eQ.getPassOptions(n),l=c.ignoreCommands,u=Object(r.a)(t.commandList,o),h=u.length;e.commandList=u,e.camera=Object(r.a)(t.camera,a),e.cullingVolume=Object(r.a)(t.cullingVolume,s);var d=this._statisticsPerPass[n];(this.show||l)&&(this._pass=n,t.ready=xZ(this,e,d,c)),l&&(u.length=h),e.commandList=o,e.camera=a,e.cullingVolume=s}},cZ.prototype.hasExtension=function(e){return!!Object(o.a)(this._extensionsUsed)&&this._extensionsUsed.indexOf(e)>-1},cZ.prototype.isDestroyed=function(){return!1},cZ.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),Object(o.a)(this._root)){var e=CZ;for(e.push(this._root);e.length>0;){var t=e.pop();t.destroy();for(var n=t.children,i=n.length,r=0;r<i;++r)e.push(n[r])}}return this._root=void 0,Ks(this)};var TZ=cZ,SZ=new Ae;function DZ(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(DZ.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new sl,this._onCollectionChanged(t,t.values,[],[])}function PZ(e,t,n,i){var r=n[t.id];Object(o.a)(r)&&(i.removeAndDestroy(r.tilesetPrimitive),delete n[t.id])}function IZ(e,t,n){e.readyPromise.otherwise((function(e){console.error(e),n[t.id].loadFail=!0}))}DZ.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");for(var t=this._entitiesToVisualize.values,n=this._tilesetHash,i=this._primitives,r=0,s=t.length;r<s;r++){var c,l,u=t[r],h=u._tileset,d=n[u.id],f=u.isShowing&&u.isAvailable(e)&&cP.getValueOrDefault(h._show,e,!0);if(f&&(l=u.computeModelMatrix(e,SZ),c=_t.a.createIfNeeded(cP.getValueOrUndefined(h._uri,e))),f){var p=Object(o.a)(d)?d.tilesetPrimitive:void 0;Object(o.a)(p)&&c.url===d.url||(Object(o.a)(p)&&(i.removeAndDestroy(p),delete n[u.id]),(p=new TZ({url:c})).id=u,i.add(p),d={tilesetPrimitive:p,url:c.url,loadFail:!1},n[u.id]=d,IZ(p,u,n)),p.show=!0,Object(o.a)(l)&&(p.modelMatrix=l),p.maximumScreenSpaceError=cP.getValueOrDefault(h.maximumScreenSpaceError,e,p.maximumScreenSpaceError)}else Object(o.a)(d)&&(d.tilesetPrimitive.show=!1)}return!0},DZ.prototype.isDestroyed=function(){return!1},DZ.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(DZ.prototype._onCollectionChanged,this);for(var e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives,i=e.length-1;i>-1;i--)PZ(this,e[i],t,n);return Ks(this)},DZ.prototype.getBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("entity is required.");if(!Object(o.a)(t))throw new a.a("result is required.");var n=this._tilesetHash[e.id];if(!Object(o.a)(n)||n.loadFail)return aP.FAILED;var i=n.tilesetPrimitive;return Object(o.a)(i)&&i.show?i.ready?(gt.clone(i.boundingSphere,t),aP.DONE):aP.PENDING:aP.FAILED},DZ.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s=this._entitiesToVisualize,c=this._tilesetHash,l=this._primitives;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._tileset)&&s.set(a.id,a);for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._tileset)?s.set(a.id,a):(PZ(this,a,c,l),s.remove(a.id));for(r=n.length-1;r>-1;r--)PZ(this,a=n[r],c,l),s.remove(a.id)};var MZ=DZ,RZ=Hf.WHITE,LZ=Hf.BLACK,jZ=new Mt(2,2);function FZ(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.repeat=e.repeat}Object.defineProperties(FZ.prototype,{isConstant:{get:function(){return cP.isConstant(this._evenColor)&&cP.isConstant(this._oddColor)&&cP.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:eP("evenColor"),oddColor:eP("oddColor"),repeat:eP("repeat")}),FZ.prototype.getType=function(e){return"Checkerboard"},FZ.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.lightColor=cP.getValueOrClonedDefault(this._evenColor,e,RZ,t.lightColor),t.darkColor=cP.getValueOrClonedDefault(this._oddColor,e,LZ,t.darkColor),t.repeat=cP.getValueOrDefault(this._repeat,e,jZ),t},FZ.prototype.equals=function(e){return this===e||e instanceof FZ&&cP.equals(this._evenColor,e._evenColor)&&cP.equals(this._oddColor,e._oddColor)&&cP.equals(this._repeat,e._repeat)};var NZ=FZ,zZ={id:void 0};function kZ(e){if(e._firing)e._refire=!0;else if(0===e._suspendCount){var t=e._addedEntities,n=e._removedEntities,i=e._changedEntities;if(0!==i.length||0!==t.length||0!==n.length){e._firing=!0;do{e._refire=!1;var r=t.values.slice(0),o=n.values.slice(0),a=i.values.slice(0);t.removeAll(),n.removeAll(),i.removeAll(),e._collectionChanged.raiseEvent(e,r,o,a)}while(e._refire);e._firing=!1}}}function BZ(e){this._owner=e,this._entities=new sl,this._addedEntities=new sl,this._removedEntities=new sl,this._changedEntities=new sl,this._suspendCount=0,this._collectionChanged=new wn.a,this._id=l_(),this._show=!0,this._firing=!1,this._refire=!1}BZ.prototype.suspendEvents=function(){this._suspendCount++},BZ.prototype.resumeEvents=function(){if(0===this._suspendCount)throw new a.a("resumeEvents can not be called before suspendEvents.");this._suspendCount--,kZ(this)},BZ.collectionChangedEventCallback=void 0,Object.defineProperties(BZ.prototype,{collectionChanged:{get:function(){return this._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._entities.values}},show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");if(e!==this._show){var t;this.suspendEvents();var n=[],i=this._entities.values,r=i.length;for(t=0;t<r;t++)n.push(i[t].isShowing);for(this._show=e,t=0;t<r;t++){var s=n[t],c=i[t];s!==c.isShowing&&c.definitionChanged.raiseEvent(c,"isShowing",c.isShowing,s)}this.resumeEvents()}}},owner:{get:function(){return this._owner}}}),BZ.prototype.computeAvailability=function(){for(var e=EC.MAXIMUM_VALUE,t=EC.MINIMUM_VALUE,n=this._entities.values,i=0,r=n.length;i<r;i++){var a=n[i].availability;if(Object(o.a)(a)){var s=a.start,c=a.stop;hr.lessThan(s,e)&&!s.equals(EC.MINIMUM_VALUE)&&(e=s),hr.greaterThan(c,t)&&!c.equals(EC.MAXIMUM_VALUE)&&(t=c)}}return EC.MAXIMUM_VALUE.equals(e)&&(e=EC.MINIMUM_VALUE),EC.MINIMUM_VALUE.equals(t)&&(t=EC.MAXIMUM_VALUE),new wC({start:e,stop:t})},BZ.prototype.add=function(e){if(!Object(o.a)(e))throw new a.a("entity is required.");e instanceof YF||(e=new YF(e));var t=e.id,n=this._entities;if(n.contains(t))throw new de.a("An entity with id "+t+" already exists in this collection.");return e.entityCollection=this,n.set(t,e),this._removedEntities.remove(t)||this._addedEntities.set(t,e),e.definitionChanged.addEventListener(BZ.prototype._onEntityDefinitionChanged,this),kZ(this),e},BZ.prototype.remove=function(e){return!!Object(o.a)(e)&&this.removeById(e.id)},BZ.prototype.contains=function(e){if(!Object(o.a)(e))throw new a.a("entity is required");return this._entities.get(e.id)===e},BZ.prototype.removeById=function(e){if(!Object(o.a)(e))return!1;var t=this._entities.get(e);return!!this._entities.remove(e)&&(this._addedEntities.remove(e)||(this._removedEntities.set(e,t),this._changedEntities.remove(e)),this._entities.remove(e),t.definitionChanged.removeEventListener(BZ.prototype._onEntityDefinitionChanged,this),kZ(this),!0)},BZ.prototype.removeAll=function(){for(var e=this._entities,t=e.length,n=e.values,i=this._addedEntities,r=this._removedEntities,a=0;a<t;a++){var s=n[a],c=s.id,l=i.get(c);Object(o.a)(l)||(s.definitionChanged.removeEventListener(BZ.prototype._onEntityDefinitionChanged,this),r.set(c,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),kZ(this)},BZ.prototype.getById=function(e){if(!Object(o.a)(e))throw new a.a("id is required.");return this._entities.get(e)},BZ.prototype.getOrCreateEntity=function(e){if(!Object(o.a)(e))throw new a.a("id is required.");var t=this._entities.get(e);return Object(o.a)(t)||(zZ.id=e,t=new YF(zZ),this.add(t)),t},BZ.prototype._onEntityDefinitionChanged=function(e){var t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),kZ(this)};var HZ=BZ,VZ={id:void 0},UZ=new Array(2);function WZ(e){for(var t=e.propertyNames,n=t.length,i=0;i<n;i++)e[t[i]]=void 0;e._name=void 0,e._availability=void 0}function GZ(e,t,n,i){UZ[0]=n,UZ[1]=i.id,t[JSON.stringify(UZ)]=i.definitionChanged.addEventListener($Z.prototype._onDefinitionChanged,e)}function qZ(e,t,n,i){UZ[0]=n,UZ[1]=i.id;var r=JSON.stringify(UZ);t[r](),t[r]=void 0}function YZ(e){if(e._shouldRecomposite=!0,0===e._suspendCount){var t,n,i,r,a,s,c=e._collections,l=c.length,u=e._collectionsCopy,h=u.length,d=e._composite,f=new HZ(e),p=e._eventHash;for(t=0;t<h;t++)for((a=u[t]).collectionChanged.removeEventListener($Z.prototype._onCollectionChanged,e),i=a.values,s=a.id,r=i.length-1;r>-1;r--)qZ(0,p,s,n=i[r]);for(t=l-1;t>=0;t--)for((a=c[t]).collectionChanged.addEventListener($Z.prototype._onCollectionChanged,e),i=a.values,s=a.id,r=i.length-1;r>-1;r--){GZ(e,p,s,n=i[r]);var m=f.getById(n.id);Object(o.a)(m)||(m=d.getById(n.id),Object(o.a)(m)?WZ(m):(VZ.id=n.id,m=new YF(VZ)),f.add(m)),m.merge(n)}e._collectionsCopy=c.slice(0),d.suspendEvents(),d.removeAll();var g=f.values;for(t=0;t<g.length;t++)d.add(g[t]);d.resumeEvents()}}function $Z(e,t){this._owner=t,this._composite=new HZ(this),this._suspendCount=0,this._collections=Object(o.a)(e)?e.slice():[],this._collectionsCopy=[],this._id=l_(),this._eventHash={},YZ(this),this._shouldRecomposite=!1}function XZ(e,t){if(!Object(o.a)(t))throw new a.a("collection is required.");var n=e.indexOf(t);if(-1===n)throw new a.a("collection is not in this composite.");return n}function KZ(e,t,n){var i=e._collections;if((t=d.clamp(t,0,i.length-1))!==(n=d.clamp(n,0,i.length-1))){var r=i[t];i[t]=i[n],i[n]=r,YZ(e)}}Object.defineProperties($Z.prototype,{collectionChanged:{get:function(){return this._composite._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._composite.values}},owner:{get:function(){return this._owner}}}),$Z.prototype.addCollection=function(e,t){var n=Object(o.a)(t);if(!Object(o.a)(e))throw new a.a("collection is required.");if(n){if(t<0)throw new a.a("index must be greater than or equal to zero.");if(t>this._collections.length)throw new a.a("index must be less than or equal to the number of collections.")}n?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),YZ(this)},$Z.prototype.removeCollection=function(e){var t=this._collections.indexOf(e);return-1!==t&&(this._collections.splice(t,1),YZ(this),!0)},$Z.prototype.removeAllCollections=function(){this._collections.length=0,YZ(this)},$Z.prototype.containsCollection=function(e){return-1!==this._collections.indexOf(e)},$Z.prototype.contains=function(e){return this._composite.contains(e)},$Z.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)},$Z.prototype.getCollection=function(e){if(!Object(o.a)(e))throw new a.a("index is required.","index");return this._collections[e]},$Z.prototype.getCollectionsLength=function(){return this._collections.length},$Z.prototype.raiseCollection=function(e){var t=XZ(this._collections,e);KZ(this,t,t+1)},$Z.prototype.lowerCollection=function(e){var t=XZ(this._collections,e);KZ(this,t,t-1)},$Z.prototype.raiseCollectionToTop=function(e){var t=XZ(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),YZ(this))},$Z.prototype.lowerCollectionToBottom=function(e){var t=XZ(this._collections,e);0!==t&&(this._collections.splice(t,1),this._collections.splice(0,0,e),YZ(this))},$Z.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()},$Z.prototype.resumeEvents=function(){if(0===this._suspendCount)throw new a.a("resumeEvents can not be called before suspendEvents.");this._suspendCount--,this._shouldRecomposite&&0===this._suspendCount&&(YZ(this),this._shouldRecomposite=!1),this._composite.resumeEvents()},$Z.prototype.computeAvailability=function(){return this._composite.computeAvailability()},$Z.prototype.getById=function(e){return this._composite.getById(e)},$Z.prototype._onCollectionChanged=function(e,t,n){var i,r,a,s,c=this._collectionsCopy,l=c.length,u=this._composite;u.suspendEvents();var h=n.length,d=this._eventHash,f=e.id;for(i=0;i<h;i++){var p=n[i];qZ(0,d,f,p);var m=p.id;for(r=l-1;r>=0;r--)a=c[r].getById(m),Object(o.a)(a)&&(Object(o.a)(s)||WZ(s=u.getById(m)),s.merge(a));Object(o.a)(s)||u.removeById(m),s=void 0}var g=t.length;for(i=0;i<g;i++){var v=t[i];GZ(this,d,f,v);var _=v.id;for(r=l-1;r>=0;r--)a=c[r].getById(_),Object(o.a)(a)&&(Object(o.a)(s)||(s=u.getById(_),Object(o.a)(s)?WZ(s):(VZ.id=_,s=new YF(VZ),u.add(s))),s.merge(a));s=void 0}u.resumeEvents()},$Z.prototype._onDefinitionChanged=function(e,t,n,i){for(var r=this._collections,a=this._composite,s=r.length,c=e.id,l=a.getById(c),u=l[t],h=!Object(o.a)(u),d=!0,f=s-1;f>=0;f--){var p=r[f].getById(e.id);if(Object(o.a)(p)){var m=p[t];if(Object(o.a)(m)){if(d){if(d=!1,!Object(o.a)(m.merge)||!Object(o.a)(m.clone)){u=m;break}u=m.clone(u)}u.merge(m)}}}h&&-1===l.propertyNames.indexOf(t)&&l.addProperty(t),l[t]=u};function QZ(){this._eventHelper=new Ib,this._definitionChanged=new wn.a,this._intervals=new lD,this._intervals.changedEvent.addEventListener(QZ.prototype._intervalsChanged,this)}Object.defineProperties(QZ.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}}),QZ.prototype.getValue=function(e,t){if(!Object(o.a)(e))throw new a.a("time is required");var n=this._intervals.findDataForIntervalContainingDate(e);if(Object(o.a)(n))return n.getValue(e,t)},QZ.prototype.equals=function(e){return this===e||e instanceof QZ&&this._intervals.equals(e._intervals,cP.equals)},QZ.prototype._intervalsChanged=function(){!function(e,t,n,i){function r(){n.raiseEvent(e)}var a=[];t.removeAll();for(var s=i.length,c=0;c<s;c++){var l=i.get(c);Object(o.a)(l.data)&&-1===a.indexOf(l.data)&&t.add(l.data.definitionChanged,r)}}(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var ZZ=QZ;function JZ(){this._definitionChanged=new wn.a,this._composite=new ZZ,this._composite.definitionChanged.addEventListener(JZ.prototype._raiseDefinitionChanged,this)}Object.defineProperties(JZ.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}}),JZ.prototype.getType=function(e){if(!Object(o.a)(e))throw new a.a("time is required");var t=this._composite._intervals.findDataForIntervalContainingDate(e);if(Object(o.a)(t))return t.getType(e)},JZ.prototype.getValue=function(e,t){if(!Object(o.a)(e))throw new a.a("time is required");var n=this._composite._intervals.findDataForIntervalContainingDate(e);if(Object(o.a)(n))return n.getValue(e,t)},JZ.prototype.equals=function(e){return this===e||e instanceof JZ&&this._composite.equals(e._composite,cP.equals)},JZ.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var eJ=JZ;function tJ(e){this._referenceFrame=Object(r.a)(e,AT.FIXED),this._definitionChanged=new wn.a,this._composite=new ZZ,this._composite.definitionChanged.addEventListener(tJ.prototype._raiseDefinitionChanged,this)}Object.defineProperties(tJ.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite.intervals}},referenceFrame:{get:function(){return this._referenceFrame},set:function(e){this._referenceFrame=e}}}),tJ.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},tJ.prototype.getValueInReferenceFrame=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required.");if(!Object(o.a)(t))throw new a.a("referenceFrame is required.");var i=this._composite._intervals.findDataForIntervalContainingDate(e);if(Object(o.a)(i))return i.getValueInReferenceFrame(e,t,n)},tJ.prototype.equals=function(e){return this===e||e instanceof tJ&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,cP.equals)},tJ.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var nJ=tJ,iJ=new ZD(0);function rJ(e){iN.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}Object(o.a)(Object.create)&&(rJ.prototype=Object.create(iN.prototype),rJ.prototype.constructor=rJ),Object.defineProperties(rJ.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}}),rJ.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!Object(o.a)(t.height)&&!Object(o.a)(t.extrudedHeight)&&Cj.isSupported(this._scene)},rJ.prototype._getIsClosed=function(e){var t=e.height,n=e.extrudedHeight;return 0===t||Object(o.a)(n)&&n!==t},rJ.prototype._computeCenter=a.a.throwInstantiationError,rJ.prototype._onEntityPropertyChanged=function(e,t,n,i){if(iN.prototype._onEntityPropertyChanged.call(this,e,t,n,i),-1!==this._observedPropertyNames.indexOf(t)){var a=this._entity[this._geometryPropertyName];if(Object(o.a)(a)){Object(o.a)(a.zIndex)&&(Object(o.a)(a.height)||Object(o.a)(a.extrudedHeight))&&G_(G_.geometryZIndex),this._zIndex=Object(r.a)(a.zIndex,iJ),Object(o.a)(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);var s=a.heightReference,c=a.extrudedHeightReference;if(Object(o.a)(s)||Object(o.a)(c)){var l=new oN(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new lN(this._scene,l,s,c)}}}},rJ.prototype.destroy=function(){Object(o.a)(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),iN.prototype.destroy.call(this)},rJ.getGeometryHeight=function(e,t){if(i.a.defined("heightReference",t),Object(o.a)(e))return t!==iP.CLAMP_TO_GROUND?e:0;t!==iP.NONE&&G_(G_.geometryHeightReference)},rJ.getGeometryExtrudedHeight=function(e,t){if(i.a.defined("extrudedHeightReference",t),Object(o.a)(e))return t!==iP.CLAMP_TO_GROUND?e:rJ.CLAMP_TO_GROUND;t!==iP.NONE&&G_(G_.geometryExtrudedHeightReference)},rJ.CLAMP_TO_GROUND="clamp",rJ.computeGeometryOffsetAttribute=function(e,t,n,i){Object(o.a)(e)&&Object(o.a)(t)||(t=iP.NONE),Object(o.a)(n)&&Object(o.a)(i)||(i=iP.NONE);var r=0;return t!==iP.NONE&&r++,i===iP.RELATIVE_TO_GROUND&&r++,2===r?Hl.ALL:1===r?Hl.TOP:void 0};var oJ=rJ,aJ=new Hf,sJ=O.ZERO,cJ=new O,lJ=new Se;function uJ(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.cornerType=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.offsetAttribute=void 0}function hJ(e,t){oJ.call(this,{entity:e,scene:t,geometryOptions:new uJ(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}function dJ(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(hJ.prototype=Object.create(oJ.prototype),hJ.prototype.constructor=hJ),hJ.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,r=n.isAvailable(e),s={show:new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:K_.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||r)&&(t=this._materialProperty.color.getValue(e,aJ)),Object(o.a)(t)||(t=Hf.WHITE),s.color=Uf.fromColor(t));return Object(o.a)(this._options.offsetAttribute)&&(s.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,sJ,cJ))),new fh({id:n,geometry:new Jv(this._options),attributes:s})},hJ.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,aJ),s={show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(s.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,sJ,cJ))),new fh({id:t,geometry:new s_(this._options),attributes:s})},hJ.prototype._computeCenter=function(e,t){var n=cP.getValueOrUndefined(this._entity.corridor.positions,e);if(Object(o.a)(n)&&0!==n.length)return O.clone(n[Math.floor(n.length/2)],t)},hJ.prototype._isHidden=function(e,t){return!Object(o.a)(t.positions)||!Object(o.a)(t.width)||iN.prototype._isHidden.call(this,e,t)},hJ.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!cP.isConstant(t.height)||!cP.isConstant(t.extrudedHeight)||!cP.isConstant(t.granularity)||!cP.isConstant(t.width)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.cornerType)||!cP.isConstant(t.zIndex)||this._onTerrain&&!cP.isConstant(this._materialProperty)&&!(this._materialProperty instanceof wI)},hJ.prototype._setStaticOptions=function(e,t){var n=cP.getValueOrUndefined(t.height,EC.MINIMUM_VALUE),i=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),r=cP.getValueOrUndefined(t.extrudedHeight,EC.MINIMUM_VALUE),a=cP.getValueOrDefault(t.extrudedHeightReference,EC.MINIMUM_VALUE,iP.NONE);Object(o.a)(r)&&!Object(o.a)(n)&&(n=0);var s=this._options;s.vertexFormat=this._materialProperty instanceof wI?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(EC.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(EC.MINIMUM_VALUE),s.granularity=cP.getValueOrUndefined(t.granularity,EC.MINIMUM_VALUE),s.cornerType=cP.getValueOrUndefined(t.cornerType,EC.MINIMUM_VALUE),s.offsetAttribute=oJ.computeGeometryOffsetAttribute(n,i,r,a),s.height=oJ.getGeometryHeight(n,i),(r=oJ.getGeometryExtrudedHeight(r,a))===oJ.CLAMP_TO_GROUND&&(r=qt.getMinimumMaximumHeights(Jv.computeRectangle(s,lJ)).minimumTerrainHeight),s.extrudedHeight=r},hJ.DynamicGeometryUpdater=dJ,Object(o.a)(Object.create)&&(dJ.prototype=Object.create(Tj.prototype),dJ.prototype.constructor=dJ),dJ.prototype._isHidden=function(e,t,n){var i=this._options;return!Object(o.a)(i.positions)||!Object(o.a)(i.width)||Tj.prototype._isHidden.call(this,e,t,n)},dJ.prototype._setOptions=function(e,t,n){var i=this._options,r=cP.getValueOrUndefined(t.height,n),a=cP.getValueOrDefault(t.heightReference,n,iP.NONE),s=cP.getValueOrUndefined(t.extrudedHeight,n),c=cP.getValueOrDefault(t.extrudedHeightReference,n,iP.NONE);Object(o.a)(s)&&!Object(o.a)(r)&&(r=0),i.positions=cP.getValueOrUndefined(t.positions,n),i.width=cP.getValueOrUndefined(t.width,n),i.granularity=cP.getValueOrUndefined(t.granularity,n),i.cornerType=cP.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=oJ.computeGeometryOffsetAttribute(r,a,s,c),i.height=oJ.getGeometryHeight(r,a),(s=oJ.getGeometryExtrudedHeight(s,c))===oJ.CLAMP_TO_GROUND&&(s=qt.getMinimumMaximumHeights(Jv.computeRectangle(i,lJ)).minimumTerrainHeight),i.extrudedHeight=s};var fJ=hJ;function pJ(){a.a.throwInstantiationError()}Object.defineProperties(pJ.prototype,{name:{get:a.a.throwInstantiationError},clock:{get:a.a.throwInstantiationError},entities:{get:a.a.throwInstantiationError},isLoading:{get:a.a.throwInstantiationError},changedEvent:{get:a.a.throwInstantiationError},errorEvent:{get:a.a.throwInstantiationError},loadingEvent:{get:a.a.throwInstantiationError},show:{get:a.a.throwInstantiationError},clustering:{get:a.a.throwInstantiationError}}),pJ.prototype.update=function(e){a.a.throwInstantiationError()},pJ.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var mJ=pJ;function gJ(e,t){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),Object(o.a)(e.disableDepthTestDistance)&&e.disableDepthTestDistance<0)throw new a.a("disableDepthTestDistance must be greater than or equal to 0.0.");var n=e.translucencyByDistance,i=e.scaleByDistance,s=e.distanceDisplayCondition;if(Object(o.a)(n)){if(n.far<=n.near)throw new a.a("translucencyByDistance.far must be greater than translucencyByDistance.near.");n=JC.clone(n)}if(Object(o.a)(i)){if(i.far<=i.near)throw new a.a("scaleByDistance.far must be greater than scaleByDistance.near.");i=JC.clone(i)}if(Object(o.a)(s)){if(s.far<=s.near)throw new a.a("distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.");s=$_.clone(s)}this._show=Object(r.a)(e.show,!0),this._position=O.clone(Object(r.a)(e.position,O.ZERO)),this._actualPosition=O.clone(this._position),this._color=Hf.clone(Object(r.a)(e.color,Hf.WHITE)),this._outlineColor=Hf.clone(Object(r.a)(e.outlineColor,Hf.TRANSPARENT)),this._outlineWidth=Object(r.a)(e.outlineWidth,0),this._pixelSize=Object(r.a)(e.pixelSize,10),this._scaleByDistance=i,this._translucencyByDistance=n,this._distanceDisplayCondition=s,this._disableDepthTestDistance=Object(r.a)(e.disableDepthTestDistance,0),this._id=e.id,this._collection=Object(r.a)(e.collection,t),this._clusterShow=!0,this._pickId=void 0,this._pointPrimitiveCollection=t,this._dirty=!1,this._index=-1}var vJ=gJ.SHOW_INDEX=0,_J=gJ.POSITION_INDEX=1,bJ=gJ.COLOR_INDEX=2,yJ=gJ.OUTLINE_COLOR_INDEX=3,wJ=gJ.OUTLINE_WIDTH_INDEX=4,OJ=gJ.PIXEL_SIZE_INDEX=5,CJ=gJ.SCALE_BY_DISTANCE_INDEX=6,EJ=gJ.TRANSLUCENCY_BY_DISTANCE_INDEX=7,AJ=gJ.DISTANCE_DISPLAY_CONDITION_INDEX=8,xJ=gJ.DISABLE_DEPTH_DISTANCE_INDEX=9;function TJ(e,t){var n=e._pointPrimitiveCollection;Object(o.a)(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}gJ.NUMBER_OF_PROPERTIES=10,Object.defineProperties(gJ.prototype,{show:{get:function(){return this._show},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._show!==e&&(this._show=e,TJ(this,vJ))}},position:{get:function(){return this._position},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._position;O.equals(t,e)||(O.clone(e,t),O.clone(e,this._actualPosition),TJ(this,_J))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._scaleByDistance;JC.equals(t,e)||(this._scaleByDistance=JC.clone(e,t),TJ(this,CJ))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far distance must be greater than near distance.");var t=this._translucencyByDistance;JC.equals(t,e)||(this._translucencyByDistance=JC.clone(e,t),TJ(this,EJ))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._pixelSize!==e&&(this._pixelSize=e,TJ(this,OJ))}},color:{get:function(){return this._color},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._color;Hf.equals(t,e)||(Hf.clone(e,t),TJ(this,bJ))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");var t=this._outlineColor;Hf.equals(t,e)||(Hf.clone(e,t),TJ(this,yJ))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._outlineWidth!==e&&(this._outlineWidth=e,TJ(this,wJ))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(Object(o.a)(e)&&e.far<=e.near)throw new a.a("far must be greater than near");$_.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=$_.clone(e,this._distanceDisplayCondition),TJ(this,AJ))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){if(!Object(o.a)(e)||e<0)throw new a.a("disableDepthTestDistance must be greater than or equal to 0.0.");this._disableDepthTestDistance=e,TJ(this,xJ)}}},id:{get:function(){return this._id},set:function(e){this._id=e,Object(o.a)(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,TJ(this,vJ))}}}),gJ.prototype.getPickId=function(e){return Object(o.a)(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId},gJ.prototype._getActualPosition=function(){return this._actualPosition},gJ.prototype._setActualPosition=function(e){O.clone(e,this._actualPosition),TJ(this,_J)};var SJ=new he;gJ._computeActualPosition=function(e,t,n){return t.mode===IR.SCENE3D?e:(Ae.multiplyByPoint(n,e,SJ),bq.computeActualWgs84Position(t,SJ))};var DJ=new he;gJ._computeScreenSpacePosition=function(e,t,n,i){var r=Ae.multiplyByVector(e,he.fromElements(t.x,t.y,t.z,1,DJ),DJ);return bq.wgs84ToWindowCoordinates(n,r,i)},gJ.prototype.computeScreenSpacePosition=function(e,t){var n=this._pointPrimitiveCollection;if(Object(o.a)(t)||(t=new Mt),!Object(o.a)(n))throw new a.a("PointPrimitive must be in a collection.");if(!Object(o.a)(e))throw new a.a("scene is required.");var i=n.modelMatrix,r=gJ._computeScreenSpacePosition(i,this._actualPosition,e,t);if(Object(o.a)(r))return r.y=e.canvas.clientHeight-r.y,r},gJ.getScreenSpaceBoundingBox=function(e,t,n){var i=e.pixelSize,r=.5*i,a=t.x-r,s=t.y-r,c=i,l=i;return Object(o.a)(n)||(n=new bl),n.x=a,n.y=s,n.width=c,n.height=l,n},gJ.prototype.equals=function(e){return this===e||Object(o.a)(e)&&this._id===e._id&&O.equals(this._position,e._position)&&Hf.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&Hf.equals(this._outlineColor,e._outlineColor)&&JC.equals(this._scaleByDistance,e._scaleByDistance)&&JC.equals(this._translucencyByDistance,e._translucencyByDistance)&&$_.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance},gJ.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var PJ=gJ,IJ="varying vec4 v_color;\nvarying vec4 v_outlineColor;\nvarying float v_innerPercent;\nvarying float v_pixelDistance;\nvarying vec4 v_pickColor;\n\nvoid main()\n{\n // The distance in UV space from this fragment to the center of the point, at most 0.5.\n float distanceToCenter = length(gl_PointCoord - vec2(0.5));\n // The max distance stops one pixel shy of the edge to leave space for anti-aliasing.\n float maxDistance = max(0.0, 0.5 - v_pixelDistance);\n float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter);\n float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter);\n\n vec4 color = mix(v_outlineColor, v_color, innerAlpha);\n color.a *= wholeAlpha;\n\n// Fully transparent parts of the billboard are not pickable.\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\n if (color.a < 0.005) // matches 0/255 and 1/255\n {\n discard;\n }\n#else\n// The billboard is rendered twice. The opaque pass discards translucent fragments\n// and the translucent pass discards opaque fragments.\n#ifdef OPAQUE\n if (color.a < 0.995) // matches < 254/255\n {\n discard;\n }\n#else\n if (color.a >= 0.995) // matches 254/255 and 255/255\n {\n discard;\n }\n#endif\n#endif\n\n gl_FragColor = czm_gammaCorrect(color);\n czm_writeLogDepth();\n}\n",MJ=PJ.SHOW_INDEX,RJ=PJ.POSITION_INDEX,LJ=PJ.COLOR_INDEX,jJ=PJ.OUTLINE_COLOR_INDEX,FJ=PJ.OUTLINE_WIDTH_INDEX,NJ=PJ.PIXEL_SIZE_INDEX,zJ=PJ.SCALE_BY_DISTANCE_INDEX,kJ=PJ.TRANSLUCENCY_BY_DISTANCE_INDEX,BJ=PJ.DISTANCE_DISPLAY_CONDITION_INDEX,HJ=PJ.DISABLE_DEPTH_DISTANCE_INDEX,VJ=PJ.NUMBER_OF_PROPERTIES,UJ={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepth:5};function WJ(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._propertiesChanged=new Uint32Array(VJ),this._maxPixelSize=1,this._baseVolume=new gt,this._baseVolumeWC=new gt,this._baseVolume2D=new gt,this._boundingVolume=new gt,this._boundingVolumeDirty=!1,this._colorCommands=[],this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=Ae.clone(Ae.IDENTITY),this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.blendOption=Object(r.a)(e.blendOption,Gq.OPAQUE_AND_TRANSLUCENT),this._blendOption=void 0,this._mode=IR.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW,iR.STATIC_DRAW];var t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}function GJ(e){for(var t=e.length,n=0;n<t;++n)e[n]&&e[n]._destroy()}function qJ(e){if(e._pointPrimitivesRemoved){e._pointPrimitivesRemoved=!1;for(var t=[],n=e._pointPrimitives,i=n.length,r=0,o=0;r<i;++r){var a=n[r];a&&(a._index=o++,t.push(a))}e._pointPrimitives=t}}Object.defineProperties(WJ.prototype,{length:{get:function(){return qJ(this),this._pointPrimitives.length}}}),WJ.prototype.add=function(e){var t=new PJ(e,this);return t._index=this._pointPrimitives.length,this._pointPrimitives.push(t),this._createVertexArray=!0,t},WJ.prototype.remove=function(e){return!!this.contains(e)&&(this._pointPrimitives[e._index]=null,this._pointPrimitivesRemoved=!0,this._createVertexArray=!0,e._destroy(),!0)},WJ.prototype.removeAll=function(){GJ(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0},WJ.prototype._updatePointPrimitive=function(e,t){e._dirty||(this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++]=e),++this._propertiesChanged[t]},WJ.prototype.contains=function(e){return Object(o.a)(e)&&e._pointPrimitiveCollection===this},WJ.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return qJ(this),this._pointPrimitives[e]},WJ.prototype.computeNewBuffersUsage=function(){for(var e=this._buffersUsage,t=!1,n=this._propertiesChanged,i=0;i<VJ;++i){var r=0===n[i]?iR.STATIC_DRAW:iR.STREAM_DRAW;t=t||e[i]!==r,e[i]=r}return t};var YJ=new vh;function $J(e,t,n,i){var r=i._index,o=i._getActualPosition();e._mode===IR.SCENE3D&&(gt.expand(e._baseVolume,o,e._baseVolume),e._boundingVolumeDirty=!0),vh.fromCartesian(o,YJ);var a=i.pixelSize,s=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,a+s);var c=n[UJ.positionHighAndSize],l=YJ.high;c(r,l.x,l.y,l.z,a);var u=n[UJ.positionLowAndOutline],h=YJ.low;u(r,h.x,h.y,h.z,s)}function XJ(e,t,n,i){var r=i._index,o=i.color,a=i.getPickId(t).color,s=i.outlineColor,c=Hf.floatToByte(o.red),l=Hf.floatToByte(o.green),u=Hf.floatToByte(o.blue),h=65536*c+256*l+u,d=65536*(c=Hf.floatToByte(s.red))+256*(l=Hf.floatToByte(s.green))+(u=Hf.floatToByte(s.blue)),f=65536*(c=Hf.floatToByte(a.red))+256*(l=Hf.floatToByte(a.green))+(u=Hf.floatToByte(a.blue)),p=65536*Hf.floatToByte(o.alpha)+256*Hf.floatToByte(s.alpha)+Hf.floatToByte(a.alpha);(0,n[UJ.compressedAttribute0])(r,h,d,f,p)}function KJ(e,t,n,i){var r=i._index,a=0,s=1,c=1,l=1,u=i.translucencyByDistance;Object(o.a)(u)&&(a=u.near,s=u.nearValue,c=u.far,l=u.farValue,1===s&&1===l||(e._shaderTranslucencyByDistance=!0));var h=i.show&&i.clusterShow;0===i.color.alpha&&0===i.outlineColor.alpha&&(h=!1);var f=256*(h?1:0)+(s=1===(s=d.clamp(s,0,1))?255:255*s|0),p=l=1===(l=d.clamp(l,0,1))?255:255*l|0;(0,n[UJ.compressedAttribute1])(r,f,p,a,c)}function QJ(e,t,n,i){var r=i._index,a=n[UJ.scaleByDistance],s=0,c=1,l=1,u=1,h=i.scaleByDistance;Object(o.a)(h)&&(s=h.near,c=h.nearValue,l=h.far,u=h.farValue,1===c&&1===u||(e._shaderScaleByDistance=!0)),a(r,s,c,l,u)}function ZJ(e,t,n,i){var r=i._index,a=n[UJ.distanceDisplayConditionAndDisableDepth],s=0,c=Number.MAX_VALUE,l=i.distanceDisplayCondition;Object(o.a)(l)&&(s=l.near,c=l.far,s*=s,c*=c,e._shaderDistanceDisplayCondition=!0);var u=i.disableDepthTestDistance;(u*=u)>0&&(e._shaderDisableDepthDistance=!0,u===Number.POSITIVE_INFINITY&&(u=-1)),a(r,s,c,u)}function JJ(e,t,n,i){$J(e,0,n,i),XJ(0,t,n,i),KJ(e,0,n,i),QJ(e,0,n,i),ZJ(e,0,n,i)}function e1(e,t,n,i,r,a){var s;i.mode===IR.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;for(var c=[],l=0;l<n;++l){var u=t[l],h=u.position,d=PJ._computeActualPosition(h,i,r);Object(o.a)(d)&&(u._setActualPosition(d),a?c.push(d):gt.expand(s,d,s))}a&>.fromPoints(c,s)}var t1=[];WJ.prototype.update=function(e){qJ(this),this._maxTotalPointSize=BP.maximumAliasedPointSize,function(e,t){var n=t.mode,i=e._pointPrimitives,r=e._pointPrimitivesToUpdate,o=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==IR.SCENE3D&&!Ae.equals(o,e.modelMatrix)?(e._mode=n,Ae.clone(e.modelMatrix,o),e._createVertexArray=!0,n!==IR.SCENE3D&&n!==IR.SCENE2D&&n!==IR.COLUMBUS_VIEW||e1(e,i,i.length,t,o,!0)):n===IR.MORPHING?e1(e,i,i.length,t,o,!0):n!==IR.SCENE2D&&n!==IR.COLUMBUS_VIEW||e1(e,r,e._pointPrimitivesToUpdateIndex,t,o,!1)}(this,e);var t,n=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,r=this._pointPrimitivesToUpdateIndex,a=this._propertiesChanged,s=this._createVertexArray,c=e.context,l=e.passes,u=l.pick;if(s||!u&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(var h=0;h<VJ;++h)a[h]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=function(e,t,n){return new JG(e,[{index:UJ.positionHighAndSize,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[RJ]},{index:UJ.positionLowAndShow,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[RJ]},{index:UJ.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[LJ]},{index:UJ.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[kJ]},{index:UJ.scaleByDistance,componentsPerAttribute:4,componentDatatype:Ds.FLOAT,usage:n[zJ]},{index:UJ.distanceDisplayConditionAndDisableDepth,componentsPerAttribute:3,componentDatatype:Ds.FLOAT,usage:n[BJ]}],t)}(c,n,this._buffersUsage),t=this._vaf.writers;for(var d=0;d<n;++d){var f=this._pointPrimitives[d];f._dirty=!1,JJ(this,c,t,f)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(r>0){var p=t1;p.length=0,(a[RJ]||a[FJ]||a[NJ])&&p.push($J),(a[LJ]||a[jJ])&&p.push(XJ),(a[MJ]||a[kJ])&&p.push(KJ),a[zJ]&&p.push(QJ),(a[BJ]||a[HJ])&&p.push(ZJ);var m=p.length;if(t=this._vaf.writers,r/n>.1){for(var g=0;g<r;++g){var v=i[g];v._dirty=!1;for(var _=0;_<m;++_)p[_](this,c,t,v)}this._vaf.commit()}else{for(var b=0;b<r;++b){var y=i[b];y._dirty=!1;for(var w=0;w<m;++w)p[w](this,c,t,y);this._vaf.subCommit(y._index,1)}this._vaf.endSubCommits()}this._pointPrimitivesToUpdateIndex=0}if(r>1.5*n&&(i.length=n),Object(o.a)(this._vaf)&&Object(o.a)(this._vaf.va)){var O;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,gt.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));var C=Ae.IDENTITY;e.mode===IR.SCENE3D?(C=this.modelMatrix,O=gt.clone(this._baseVolumeWC,this._boundingVolume)):O=gt.clone(this._baseVolume2D,this._boundingVolume),function(e,t,n){var i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=i}(this,e,O);var E,A,x,T,S,D,P=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,P&&(this._blendOption===Gq.OPAQUE||this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=XI.fromCache({depthTest:{enabled:!0,func:Ts.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===Gq.TRANSLUCENT||this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=XI.fromCache({depthTest:{enabled:!0,func:Ts.LEQUAL},depthMask:!1,blending:LP.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||0!==e.minimumDisableDepthTestDistance,(P||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(E=new KM({sources:['uniform float u_maxTotalPointSize;\n\nattribute vec4 positionHighAndSize;\nattribute vec4 positionLowAndOutline;\nattribute vec4 compressedAttribute0; // color, outlineColor, pick color\nattribute vec4 compressedAttribute1; // show, translucency by distance, some free space\nattribute vec4 scaleByDistance; // near, nearScale, far, farScale\nattribute vec3 distanceDisplayConditionAndDisableDepth; // near, far, disableDepthTestDistance\n\nvarying vec4 v_color;\nvarying vec4 v_outlineColor;\nvarying float v_innerPercent;\nvarying float v_pixelDistance;\nvarying vec4 v_pickColor;\n\nconst float SHIFT_LEFT8 = 256.0;\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\n\nvoid main()\n{\n // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition\n\n // unpack attributes\n vec3 positionHigh = positionHighAndSize.xyz;\n vec3 positionLow = positionLowAndOutline.xyz;\n float outlineWidthBothSides = 2.0 * positionLowAndOutline.w;\n float totalSize = positionHighAndSize.w + outlineWidthBothSides;\n float outlinePercent = outlineWidthBothSides / totalSize;\n // Scale in response to browser-zoom.\n totalSize *= czm_pixelRatio;\n // Add padding for anti-aliasing on both sides.\n totalSize += 3.0;\n\n float temp = compressedAttribute1.x * SHIFT_RIGHT8;\n float show = floor(temp);\n\n#ifdef EYE_DISTANCE_TRANSLUCENCY\n vec4 translucencyByDistance;\n translucencyByDistance.x = compressedAttribute1.z;\n translucencyByDistance.z = compressedAttribute1.w;\n\n translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\n\n temp = compressedAttribute1.y * SHIFT_RIGHT8;\n translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\n#endif\n\n ///////////////////////////////////////////////////////////////////////////\n\n vec4 color;\n vec4 outlineColor;\n vec4 pickColor;\n\n // compressedAttribute0.z => pickColor.rgb\n\n temp = compressedAttribute0.z * SHIFT_RIGHT8;\n pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n pickColor.r = floor(temp);\n\n // compressedAttribute0.x => color.rgb\n\n temp = compressedAttribute0.x * SHIFT_RIGHT8;\n color.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n color.g = (temp - floor(temp)) * SHIFT_LEFT8;\n color.r = floor(temp);\n\n // compressedAttribute0.y => outlineColor.rgb\n\n temp = compressedAttribute0.y * SHIFT_RIGHT8;\n outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\n temp = floor(temp) * SHIFT_RIGHT8;\n outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\n outlineColor.r = floor(temp);\n\n // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a\n\n temp = compressedAttribute0.w * SHIFT_RIGHT8;\n pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\n pickColor = pickColor / 255.0;\n\n temp = floor(temp) * SHIFT_RIGHT8;\n outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\n outlineColor /= 255.0;\n color.a = floor(temp);\n color /= 255.0;\n\n ///////////////////////////////////////////////////////////////////////////\n\n vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n vec4 positionEC = czm_modelViewRelativeToEye * p;\n\n ///////////////////////////////////////////////////////////////////////////\n\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\n float lengthSq;\n if (czm_sceneMode == czm_sceneMode2D)\n {\n // 2D camera distance is a special case\n // treat all billboards as flattened to the z=0.0 plane\n lengthSq = czm_eyeHeight2D.y;\n }\n else\n {\n lengthSq = dot(positionEC.xyz, positionEC.xyz);\n }\n#endif\n\n#ifdef EYE_DISTANCE_SCALING\n totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq);\n#endif\n // Clamp to max point size.\n totalSize = min(totalSize, u_maxTotalPointSize);\n // If size is too small, push vertex behind near plane for clipping.\n // Note that context.minimumAliasedPointSize "will be at most 1.0".\n if (totalSize < 1.0)\n {\n positionEC.xyz = vec3(0.0);\n totalSize = 1.0;\n }\n\n float translucency = 1.0;\n#ifdef EYE_DISTANCE_TRANSLUCENCY\n translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\n // push vertex behind near plane for clipping\n if (translucency < 0.004)\n {\n positionEC.xyz = vec3(0.0);\n }\n#endif\n\n#ifdef DISTANCE_DISPLAY_CONDITION\n float nearSq = distanceDisplayConditionAndDisableDepth.x;\n float farSq = distanceDisplayConditionAndDisableDepth.y;\n if (lengthSq < nearSq || lengthSq > farSq) {\n // push vertex behind camera to force it to be clipped\n positionEC.xyz = vec3(0.0, 0.0, 1.0);\n }\n#endif\n\n gl_Position = czm_projection * positionEC;\n czm_vertexLogDepth();\n\n#ifdef DISABLE_DEPTH_DISTANCE\n float disableDepthTestDistance = distanceDisplayConditionAndDisableDepth.z;\n if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\n {\n disableDepthTestDistance = czm_minimumDisableDepthTestDistance;\n }\n\n if (disableDepthTestDistance != 0.0)\n {\n // Don\'t try to "multiply both sides" by w. Greater/less-than comparisons won\'t work for negative values of w.\n float zclip = gl_Position.z / gl_Position.w;\n bool clipped = (zclip < -1.0 || zclip > 1.0);\n if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))\n {\n // Position z on the near plane.\n gl_Position.z = -gl_Position.w;\n#ifdef LOG_DEPTH\n czm_vertexLogDepth(vec4(czm_currentFrustum.x));\n#endif\n }\n }\n#endif\n\n v_color = color;\n v_color.a *= translucency * show;\n v_outlineColor = outlineColor;\n v_outlineColor.a *= translucency * show;\n\n v_innerPercent = 1.0 - outlinePercent;\n v_pixelDistance = 2.0 / totalSize;\n gl_PointSize = totalSize * show;\n gl_Position *= show;\n\n v_pickColor = pickColor;\n}\n']}),this._shaderScaleByDistance&&E.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&E.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&E.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&E.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT&&(A=new KM({defines:["OPAQUE"],sources:[IJ]}),this._sp=LM.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:E,fragmentShaderSource:A,attributeLocations:UJ}),A=new KM({defines:["TRANSLUCENT"],sources:[IJ]}),this._spTranslucent=LM.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:E,fragmentShaderSource:A,attributeLocations:UJ})),this._blendOption===Gq.OPAQUE&&(A=new KM({sources:[IJ]}),this._sp=LM.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:E,fragmentShaderSource:A,attributeLocations:UJ})),this._blendOption===Gq.TRANSLUCENT&&(A=new KM({sources:[IJ]}),this._spTranslucent=LM.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:E,fragmentShaderSource:A,attributeLocations:UJ})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);var I=e.commandList;if(l.render||u){var M=this._colorCommands,R=this._blendOption===Gq.OPAQUE,L=this._blendOption===Gq.OPAQUE_AND_TRANSLUCENT;T=(x=this._vaf.va).length,M.length=T;var j=L?2*T:T;for(D=0;D<j;++D){var F=R||L&&D%2===0;S=M[D],Object(o.a)(S)||(S=M[D]=new CI),S.primitiveType=xl.POINTS,S.pass=F||!L?EI.OPAQUE:EI.TRANSLUCENT,S.owner=this;var N=L?Math.floor(D/2):D;S.boundingVolume=O,S.modelMatrix=C,S.shaderProgram=F?this._sp:this._spTranslucent,S.uniformMap=this._uniforms,S.vertexArray=x[N].va,S.renderState=F?this._rsOpaque:this._rsTranslucent,S.debugShowBoundingVolume=this.debugShowBoundingVolume,S.pickId="v_pickColor",I.push(S)}}}},WJ.prototype.isDestroyed=function(){return!1},WJ.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),GJ(this._pointPrimitives),Ks(this)};var n1=WJ;function i1(e,t,n,i,r){t=t||r1,n=n||o1,r=r||Array,this.nodeSize=i||64,this.points=e,this.ids=new r(e.length),this.coords=new r(2*e.length);for(var o=0;o<e.length;o++)this.ids[o]=o,this.coords[2*o]=t(e[o]),this.coords[2*o+1]=n(e[o]);!function e(t,n,i,r,o,a){if(o-r<=i)return;var s=Math.floor((r+o)/2);(function e(t,n,i,r,o,a){for(;o>r;){if(o-r>600){var s=o-r+1,c=i-r+1,l=Math.log(s),u=.5*Math.exp(2*l/3),h=.5*Math.sqrt(l*u*(s-u)/s)*(c-s/2<0?-1:1),d=Math.max(r,Math.floor(i-c*u/s+h)),f=Math.min(o,Math.floor(i+(s-c)*u/s+h));e(t,n,i,d,f,a)}var p=n[2*i+a],m=r,g=o;for(a1(t,n,r,i),n[2*o+a]>p&&a1(t,n,r,o);m<g;){for(a1(t,n,m,g),m++,g--;n[2*m+a]<p;)m++;for(;n[2*g+a]>p;)g--}n[2*r+a]===p?a1(t,n,r,g):(g++,a1(t,n,g,o)),g<=i&&(r=g+1),i<=g&&(o=g-1)}})(t,n,s,r,o,a%2),e(t,n,i,r,s-1,a+1),e(t,n,i,s+1,o,a+1)}(this.ids,this.coords,this.nodeSize,0,this.ids.length-1,0)}function r1(e){return e[0]}function o1(e){return e[1]}function a1(e,t,n,i){s1(e,n,i),s1(t,2*n,2*i),s1(t,2*n+1,2*i+1)}function s1(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}function c1(e,t,n,i){var r=e-n,o=t-i;return r*r+o*o}i1.prototype={range:function(e,t,n,i){return function(e,t,n,i,r,o,a){var s,c,l=[0,e.length-1,0],u=[];for(;l.length;){var h=l.pop(),d=l.pop(),f=l.pop();if(d-f<=a)for(var p=f;p<=d;p++)s=t[2*p],c=t[2*p+1],s>=n&&s<=r&&c>=i&&c<=o&&u.push(e[p]);else{var m=Math.floor((f+d)/2);s=t[2*m],c=t[2*m+1],s>=n&&s<=r&&c>=i&&c<=o&&u.push(e[m]);var g=(h+1)%2;(0===h?n<=s:i<=c)&&(l.push(f),l.push(m-1),l.push(g)),(0===h?r>=s:o>=c)&&(l.push(m+1),l.push(d),l.push(g))}}return u}(this.ids,this.coords,e,t,n,i,this.nodeSize)},within:function(e,t,n){return function(e,t,n,i,r,o){var a=[0,e.length-1,0],s=[],c=r*r;for(;a.length;){var l=a.pop(),u=a.pop(),h=a.pop();if(u-h<=o)for(var d=h;d<=u;d++)c1(t[2*d],t[2*d+1],n,i)<=c&&s.push(e[d]);else{var f=Math.floor((h+u)/2),p=t[2*f],m=t[2*f+1];c1(p,m,n,i)<=c&&s.push(e[f]);var g=(l+1)%2;(0===l?n-r<=p:i-r<=m)&&(a.push(h),a.push(f-1),a.push(g)),(0===l?n+r>=p:i+r>=m)&&(a.push(f+1),a.push(u),a.push(g))}}return s}(this.ids,this.coords,e,t,n,this.nodeSize)}};var l1=function(e,t,n,i,r){return new i1(e,t,n,i,r)};function u1(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._enabled=Object(r.a)(e.enabled,!1),this._pixelRange=Object(r.a)(e.pixelRange,80),this._minimumClusterSize=Object(r.a)(e.minimumClusterSize,2),this._clusterBillboards=Object(r.a)(e.clusterBillboards,!0),this._clusterLabels=Object(r.a)(e.clusterLabels,!0),this._clusterPoints=Object(r.a)(e.clusterPoints,!0),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new wn.a}function h1(e){return e.coord.x}function d1(e){return e.coord.y}function f1(e,t){e.x-=t,e.y-=t,e.width+=2*t,e.height+=2*t}var p1=new bl;function m1(e,t,n,i,r){if(Object(o.a)(e._labelCollection)&&i._clusterLabels?r=f$.getScreenSpaceBoundingBox(e,t,r):Object(o.a)(e._billboardCollection)&&i._clusterBillboards?r=Wq.getScreenSpaceBoundingBox(e,t,r):Object(o.a)(e._pointPrimitiveCollection)&&i._clusterPoints&&(r=PJ.getScreenSpaceBoundingBox(e,t,r)),f1(r,n),i._clusterLabels&&!Object(o.a)(e._labelCollection)&&Object(o.a)(e.id)&&_1(i,e.id.id)&&Object(o.a)(e.id._label)){var a=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(a),c=f$.getScreenSpaceBoundingBox(s,t,p1);f1(c,n),r=bl.union(r,c,r)}return r}function g1(e,t){if(e.clusterShow=!0,!Object(o.a)(e._labelCollection)&&Object(o.a)(e.id)&&_1(t,e.id.id)&&Object(o.a)(e.id._label)){var n=t._collectionIndicesByEntity[e.id.id].labelIndex;t._labelCollection.get(n).clusterShow=!0}}function v1(e,t,n,i){var r={billboard:i._clusterBillboardCollection.add(),label:i._clusterLabelCollection.add(),point:i._clusterPointCollection.add()};r.billboard.show=!1,r.point.show=!1,r.label.show=!0,r.label.text=t.toLocaleString(),r.label.id=n,r.billboard.position=r.label.position=r.point.position=e,i._clusterEvent.raiseEvent(n,r)}function _1(e,t){return Object(o.a)(e)&&Object(o.a)(e._collectionIndicesByEntity[t])&&Object(o.a)(e._collectionIndicesByEntity[t].labelIndex)}function b1(e,t,n,i,r){if(Object(o.a)(e))for(var a=e.length,s=0;s<a;++s){var c=e.get(s);if(c.clusterShow=!1,c.show&&(r._scene.mode!==IR.SCENE3D||i.isPointVisible(c.position))){var l=r._clusterLabels&&Object(o.a)(c._labelCollection),u=r._clusterBillboards&&Object(o.a)(c.id._billboard),h=r._clusterPoints&&Object(o.a)(c.id._point);if(!l||!h&&!u){var d=c.computeScreenSpacePosition(n);Object(o.a)(d)&&t.push({index:s,collection:e,clustered:!1,coord:d})}}}}var y1=new bl,w1=new bl,O1=new bl;function C1(e,t,n,i){return function(r){var a=this[e];Object(o.a)(this._collectionIndicesByEntity)||(this._collectionIndicesByEntity={});var s,c,l=this._collectionIndicesByEntity[r.id];if(Object(o.a)(l)||(l=this._collectionIndicesByEntity[r.id]={billboardIndex:void 0,labelIndex:void 0,pointIndex:void 0}),Object(o.a)(a)&&Object(o.a)(l[i]))return a.get(l[i]);Object(o.a)(a)||(a=this[e]=new t({scene:this._scene}));var u=this[n];return u.length>0?(s=u.pop(),c=a.get(s)):(c=a.add(),s=a.length-1),l[i]=s,this._clusterDirty=!0,c}}function E1(e,t){var n=e._collectionIndicesByEntity[t];Object(o.a)(n.billboardIndex)||Object(o.a)(n.labelIndex)||Object(o.a)(n.pointIndex)||delete e._collectionIndicesByEntity[t]}function A1(e){if(Object(o.a)(e))for(var t=e.length,n=0;n<t;++n)e.get(n).clusterShow=!0}u1.prototype._initialize=function(e){this._scene=e;var t,n=(t=this,function(e){if(!(Object(o.a)(e)&&e<.05)&&t.enabled){var n=t._scene,i=t._labelCollection,r=t._billboardCollection,a=t._pointCollection;if((Object(o.a)(i)||Object(o.a)(r)||Object(o.a)(a))&&(t._clusterBillboards||t._clusterLabels||t._clusterPoints)){var s=t._clusterLabelCollection,c=t._clusterBillboardCollection,l=t._clusterPointCollection;Object(o.a)(s)?s.removeAll():s=t._clusterLabelCollection=new I$({scene:n}),Object(o.a)(c)?c.removeAll():c=t._clusterBillboardCollection=new VY({scene:n}),Object(o.a)(l)?l.removeAll():l=t._clusterPointCollection=new n1;var u,h,d,f,p,m,g,v,_,b,y,w=t._pixelRange,C=t._minimumClusterSize,E=t._previousClusters,A=[],x=t._previousHeight,T=n.camera.positionCartographic.height,S=n.mapProjection.ellipsoid,D=n.camera.positionWC,P=new Un(S,D),I=[];t._clusterLabels&&b1(i,I,n,P,t),t._clusterBillboards&&b1(r,I,n,P,t),t._clusterPoints&&b1(a,I,n,P,t);var M=l1(I,h1,d1,64,Int32Array);if(T<x)for(d=E.length,u=0;u<d;++u){var R=E[u];if(P.isPointVisible(R.position)){var L=Wq._computeScreenSpacePosition(Ae.IDENTITY,R.position,O.ZERO,Mt.ZERO,n);if(Object(o.a)(L)){var j=1-T/x,F=R.width=R.width*j,N=R.height=R.height*j;F=Math.max(F,R.minimumWidth),N=Math.max(N,R.minimumHeight);var z=L.x-.5*F,k=L.y-.5*N,B=L.x+F,H=L.y+N;for(m=(p=M.range(z,k,B,H)).length,_=0,v=[],h=0;h<m;++h)(g=I[p[h]]).clustered||(++_,b=g.collection,y=g.index,v.push(b.get(y).id));if(_>=C)for(v1(R.position,_,v,t),A.push(R),h=0;h<m;++h)I[p[h]].clustered=!0}}}for(d=I.length,u=0;u<d;++u){var V=I[u];if(!V.clustered){V.clustered=!0,b=V.collection,y=V.index;var U=b.get(y);f=m1(U,V.coord,w,t,y1);var W=bl.clone(f,w1);m=(p=M.range(f.x,f.y,f.x+f.width,f.y+f.height)).length;var G=O.clone(U.position);for(_=1,v=[U.id],h=0;h<m;++h)if(!(g=I[p[h]]).clustered){var q=g.collection.get(g.index),Y=m1(q,g.coord,w,t,O1);O.add(q.position,G,G),bl.union(W,Y,W),++_,v.push(q.id)}if(_>=C){var $=O.multiplyByScalar(G,1/_,G);for(v1($,_,v,t),A.push({position:$,width:W.width,height:W.height,minimumWidth:f.width,minimumHeight:f.height}),h=0;h<m;++h)I[p[h]].clustered=!0}else g1(U,t)}}0===s.length&&(s.destroy(),t._clusterLabelCollection=void 0),0===c.length&&(c.destroy(),t._clusterBillboardCollection=void 0),0===l.length&&(l.destroy(),t._clusterPointCollection=void 0),t._previousClusters=A,t._previousHeight=T}}});this._cluster=n,this._removeEventListener=e.camera.changed.addEventListener(n)},Object.defineProperties(u1.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabledDirty=e!==this._enabled,this._enabled=e}},pixelRange:{get:function(){return this._pixelRange},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._pixelRange,this._pixelRange=e}},minimumClusterSize:{get:function(){return this._minimumClusterSize},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._minimumClusterSize,this._minimumClusterSize=e}},clusterEvent:{get:function(){return this._clusterEvent}},clusterBillboards:{get:function(){return this._clusterBillboards},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterBillboards,this._clusterBillboards=e}},clusterLabels:{get:function(){return this._clusterLabels},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterLabels,this._clusterLabels=e}},clusterPoints:{get:function(){return this._clusterPoints},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterPoints,this._clusterPoints=e}}}),u1.prototype.getLabel=C1("_labelCollection",I$,"_unusedLabelIndices","labelIndex"),u1.prototype.removeLabel=function(e){var t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(Object(o.a)(this._labelCollection)&&Object(o.a)(t)&&Object(o.a)(t.labelIndex)){var n=t.labelIndex;t.labelIndex=void 0,E1(this,e.id);var i=this._labelCollection.get(n);i.show=!1,i.text="",i.id=void 0,this._unusedLabelIndices.push(n),this._clusterDirty=!0}},u1.prototype.getBillboard=C1("_billboardCollection",VY,"_unusedBillboardIndices","billboardIndex"),u1.prototype.removeBillboard=function(e){var t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(Object(o.a)(this._billboardCollection)&&Object(o.a)(t)&&Object(o.a)(t.billboardIndex)){var n=t.billboardIndex;t.billboardIndex=void 0,E1(this,e.id);var i=this._billboardCollection.get(n);i.id=void 0,i.show=!1,i.image=void 0,this._unusedBillboardIndices.push(n),this._clusterDirty=!0}},u1.prototype.getPoint=C1("_pointCollection",n1,"_unusedPointIndices","pointIndex"),u1.prototype.removePoint=function(e){var t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(Object(o.a)(this._pointCollection)&&Object(o.a)(t)&&Object(o.a)(t.pointIndex)){var n=t.pointIndex;t.pointIndex=void 0,E1(this,e.id);var i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0}},u1.prototype.update=function(e){var t,n;Object(o.a)(this._labelCollection)&&this._labelCollection.length>0&&0===this._labelCollection.get(0)._glyphs.length&&(t=e.commandList,e.commandList=[],this._labelCollection.update(e),e.commandList=t),Object(o.a)(this._billboardCollection)&&this._billboardCollection.length>0&&!Object(o.a)(this._billboardCollection.get(0).width)&&(t=e.commandList,e.commandList=[],this._billboardCollection.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,(n=this).enabled||(Object(o.a)(n._clusterLabelCollection)&&n._clusterLabelCollection.destroy(),Object(o.a)(n._clusterBillboardCollection)&&n._clusterBillboardCollection.destroy(),Object(o.a)(n._clusterPointCollection)&&n._clusterPointCollection.destroy(),n._clusterLabelCollection=void 0,n._clusterBillboardCollection=void 0,n._clusterPointCollection=void 0,A1(n._labelCollection),A1(n._billboardCollection),A1(n._pointCollection)),this._clusterDirty=!0),this._clusterDirty&&(this._clusterDirty=!1,this._cluster()),Object(o.a)(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),Object(o.a)(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),Object(o.a)(this._clusterPointCollection)&&this._clusterPointCollection.update(e),Object(o.a)(this._labelCollection)&&this._labelCollection.update(e),Object(o.a)(this._billboardCollection)&&this._billboardCollection.update(e),Object(o.a)(this._pointCollection)&&this._pointCollection.update(e)},u1.prototype.destroy=function(){this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._pointCollection=this._pointCollection&&this._pointCollection.destroy(),this._clusterLabelCollection=this._clusterLabelCollection&&this._clusterLabelCollection.destroy(),this._clusterBillboardCollection=this._clusterBillboardCollection&&this._clusterBillboardCollection.destroy(),this._clusterPointCollection=this._clusterPointCollection&&this._clusterPointCollection.destroy(),Object(o.a)(this._removeEventListener)&&(this._removeEventListener(),this._removeEventListener=void 0),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity=void 0,this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._pixelRangeDirty=!1,this._minimumClusterSizeDirty=!1};var x1=u1;function T1(e){this._name=e,this._clock=void 0,this._changed=new wn.a,this._error=new wn.a,this._isLoading=!1,this._loading=new wn.a,this._entityCollection=new HZ(this),this._entityCluster=new x1}Object.defineProperties(T1.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._changed.raiseEvent(this))}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading},set:function(e){mJ.setLoading(this,e)}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){if(!Object(o.a)(e))throw new a.a("value must be defined.");this._entityCluster=e}}}),T1.prototype.update=function(e){return!0};var S1=T1,D1=O.ZERO,P1=new O,I1=new O,M1=new Hf;function R1(e){this.id=e,this.vertexFormat=void 0,this.length=void 0,this.topRadius=void 0,this.bottomRadius=void 0,this.slices=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function L1(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new R1(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}function j1(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(L1.prototype=Object.create(iN.prototype),L1.prototype.constructor=L1),Object.defineProperties(L1.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}}),L1.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,r=n.isAvailable(e),s=new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),c=this._distanceDisplayConditionProperty.getValue(e),l={show:s,distanceDisplayCondition:K_.fromDistanceDisplayCondition(c),color:void 0,offset:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||r)&&(t=this._materialProperty.color.getValue(e,M1)),Object(o.a)(t)||(t=Hf.WHITE),l.color=Uf.fromColor(t));return Object(o.a)(this._options.offsetAttribute)&&(l.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,D1,P1))),new fh({id:n,geometry:new j_(this._options),modelMatrix:n.computeModelMatrixForHeightReference(e,n.cylinder.heightReference,.5*this._options.length,this._scene.mapProjection.ellipsoid),attributes:l})},L1.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,M1),s=this._distanceDisplayConditionProperty.getValue(e),c={show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(s),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(c.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,D1,P1))),new fh({id:t,geometry:new k_(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,.5*this._options.length,this._scene.mapProjection.ellipsoid),attributes:c})},L1.prototype._computeCenter=function(e,t){return cP.getValueOrUndefined(this._entity.position,e,t)},L1.prototype._isHidden=function(e,t){return!Object(o.a)(e.position)||!Object(o.a)(t.length)||!Object(o.a)(t.topRadius)||!Object(o.a)(t.bottomRadius)||iN.prototype._isHidden.call(this,e,t)},L1.prototype._isDynamic=function(e,t){return!e.position.isConstant||!cP.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!cP.isConstant(t.slices)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.numberOfVerticalLines)},L1.prototype._setStaticOptions=function(e,t){var n=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof wI?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(EC.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(EC.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(EC.MINIMUM_VALUE),i.slices=cP.getValueOrUndefined(t.slices,EC.MINIMUM_VALUE),i.numberOfVerticalLines=cP.getValueOrUndefined(t.numberOfVerticalLines,EC.MINIMUM_VALUE),i.offsetAttribute=n!==iP.NONE?Hl.ALL:void 0},L1.prototype._onEntityPropertyChanged=uN,L1.DynamicGeometryUpdater=j1,Object(o.a)(Object.create)&&(j1.prototype=Object.create(Tj.prototype),j1.prototype.constructor=j1),j1.prototype._isHidden=function(e,t,n){var i=this._options,r=cP.getValueOrUndefined(e.position,n,I1);return!Object(o.a)(r)||!Object(o.a)(i.length)||!Object(o.a)(i.topRadius)||!Object(o.a)(i.bottomRadius)||Tj.prototype._isHidden.call(this,e,t,n)},j1.prototype._setOptions=function(e,t,n){var i=cP.getValueOrDefault(t.heightReference,n,iP.NONE),r=this._options;r.length=cP.getValueOrUndefined(t.length,n),r.topRadius=cP.getValueOrUndefined(t.topRadius,n),r.bottomRadius=cP.getValueOrUndefined(t.bottomRadius,n),r.slices=cP.getValueOrUndefined(t.slices,n),r.numberOfVerticalLines=cP.getValueOrUndefined(t.numberOfVerticalLines,n),r.offsetAttribute=i!==iP.NONE?Hl.ALL:void 0};var F1=L1;function N1(){this._definitionChanged=new wn.a,this._startTime=void 0,this._stopTime=void 0,this._currentTime=void 0,this._clockRange=void 0,this._clockStep=void 0,this._multiplier=void 0}Object.defineProperties(N1.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:nF("startTime"),stopTime:nF("stopTime"),currentTime:nF("currentTime"),clockRange:nF("clockRange"),clockStep:nF("clockStep"),multiplier:nF("multiplier")}),N1.prototype.clone=function(e){return Object(o.a)(e)||(e=new N1),e.startTime=this.startTime,e.stopTime=this.stopTime,e.currentTime=this.currentTime,e.clockRange=this.clockRange,e.clockStep=this.clockStep,e.multiplier=this.multiplier,e},N1.prototype.equals=function(e){return this===e||Object(o.a)(e)&&hr.equals(this.startTime,e.startTime)&&hr.equals(this.stopTime,e.stopTime)&&hr.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier},N1.prototype.merge=function(e){if(!Object(o.a)(e))throw new a.a("source is required.");this.startTime=Object(r.a)(this.startTime,e.startTime),this.stopTime=Object(r.a)(this.stopTime,e.stopTime),this.currentTime=Object(r.a)(this.currentTime,e.currentTime),this.clockRange=Object(r.a)(this.clockRange,e.clockRange),this.clockStep=Object(r.a)(this.clockStep,e.clockStep),this.multiplier=Object(r.a)(this.multiplier,e.multiplier)},N1.prototype.getValue=function(e){return Object(o.a)(e)||(e=new Rf),e.startTime=Object(r.a)(this.startTime,e.startTime),e.stopTime=Object(r.a)(this.stopTime,e.stopTime),e.currentTime=Object(r.a)(this.currentTime,e.currentTime),e.clockRange=Object(r.a)(this.clockRange,e.clockRange),e.multiplier=Object(r.a)(this.multiplier,e.multiplier),e.clockStep=Object(r.a)(this.clockStep,e.clockStep),e};var z1=N1,k1=Hf.WHITE,B1=new Mt(8,8),H1=new Mt(0,0),V1=new Mt(1,1);function U1(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this._cellAlpha=void 0,this._cellAlphaSubscription=void 0,this._lineCount=void 0,this._lineCountSubscription=void 0,this._lineThickness=void 0,this._lineThicknessSubscription=void 0,this._lineOffset=void 0,this._lineOffsetSubscription=void 0,this.color=e.color,this.cellAlpha=e.cellAlpha,this.lineCount=e.lineCount,this.lineThickness=e.lineThickness,this.lineOffset=e.lineOffset}Object.defineProperties(U1.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)&&cP.isConstant(this._cellAlpha)&&cP.isConstant(this._lineCount)&&cP.isConstant(this._lineThickness)&&cP.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color"),cellAlpha:eP("cellAlpha"),lineCount:eP("lineCount"),lineThickness:eP("lineThickness"),lineOffset:eP("lineOffset")}),U1.prototype.getType=function(e){return"Grid"},U1.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,k1,t.color),t.cellAlpha=cP.getValueOrDefault(this._cellAlpha,e,.1),t.lineCount=cP.getValueOrClonedDefault(this._lineCount,e,B1,t.lineCount),t.lineThickness=cP.getValueOrClonedDefault(this._lineThickness,e,V1,t.lineThickness),t.lineOffset=cP.getValueOrClonedDefault(this._lineOffset,e,H1,t.lineOffset),t},U1.prototype.equals=function(e){return this===e||e instanceof U1&&cP.equals(this._color,e._color)&&cP.equals(this._cellAlpha,e._cellAlpha)&&cP.equals(this._lineCount,e._lineCount)&&cP.equals(this._lineThickness,e._lineThickness)&&cP.equals(this._lineOffset,e._lineOffset)};var W1=U1;function G1(e){this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(G1.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color")}),G1.prototype.getType=function(e){return"PolylineArrow"},G1.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,Hf.WHITE,t.color),t},G1.prototype.equals=function(e){return this===e||e instanceof G1&&cP.equals(this._color,e._color)};var q1=G1,Y1=Hf.WHITE,$1=Hf.TRANSPARENT;function X1(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this._gapColor=void 0,this._gapColorSubscription=void 0,this._dashLength=void 0,this._dashLengthSubscription=void 0,this._dashPattern=void 0,this._dashPatternSubscription=void 0,this.color=e.color,this.gapColor=e.gapColor,this.dashLength=e.dashLength,this.dashPattern=e.dashPattern}Object.defineProperties(X1.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)&&cP.isConstant(this._gapColor)&&cP.isConstant(this._dashLength)&&cP.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color"),gapColor:eP("gapColor"),dashLength:eP("dashLength"),dashPattern:eP("dashPattern")}),X1.prototype.getType=function(e){return"PolylineDash"},X1.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,Y1,t.color),t.gapColor=cP.getValueOrClonedDefault(this._gapColor,e,$1,t.gapColor),t.dashLength=cP.getValueOrDefault(this._dashLength,e,16,t.dashLength),t.dashPattern=cP.getValueOrDefault(this._dashPattern,e,255,t.dashPattern),t},X1.prototype.equals=function(e){return this===e||e instanceof X1&&cP.equals(this._color,e._color)&&cP.equals(this._gapColor,e._gapColor)&&cP.equals(this._dashLength,e._dashLength)&&cP.equals(this._dashPattern,e._dashPattern)};var K1=X1,Q1=Hf.WHITE;function Z1(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this._glowPower=void 0,this._glowPowerSubscription=void 0,this._taperPower=void 0,this._taperPowerSubscription=void 0,this.color=e.color,this.glowPower=e.glowPower,this.taperPower=e.taperPower}Object.defineProperties(Z1.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)&&cP.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color"),glowPower:eP("glowPower"),taperPower:eP("taperPower")}),Z1.prototype.getType=function(e){return"PolylineGlow"},Z1.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,Q1,t.color),t.glowPower=cP.getValueOrDefault(this._glowPower,e,.25,t.glowPower),t.taperPower=cP.getValueOrDefault(this._taperPower,e,1,t.taperPower),t},Z1.prototype.equals=function(e){return this===e||e instanceof Z1&&cP.equals(this._color,e._color)&&cP.equals(this._glowPower,e._glowPower)&&cP.equals(this._taperPower,e._taperPower)};var J1=Z1,e0=Hf.WHITE,t0=Hf.BLACK;function n0(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this.color=e.color,this.outlineColor=e.outlineColor,this.outlineWidth=e.outlineWidth}Object.defineProperties(n0.prototype,{isConstant:{get:function(){return cP.isConstant(this._color)&&cP.isConstant(this._outlineColor)&&cP.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:eP("color"),outlineColor:eP("outlineColor"),outlineWidth:eP("outlineWidth")}),n0.prototype.getType=function(e){return"PolylineOutline"},n0.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.color=cP.getValueOrClonedDefault(this._color,e,e0,t.color),t.outlineColor=cP.getValueOrClonedDefault(this._outlineColor,e,t0,t.outlineColor),t.outlineWidth=cP.getValueOrDefault(this._outlineWidth,e,1),t},n0.prototype.equals=function(e){return this===e||e instanceof n0&&cP.equals(this._color,e._color)&&cP.equals(this._outlineColor,e._outlineColor)&&cP.equals(this._outlineWidth,e._outlineWidth)};var i0=n0;function r0(e,t){this._value=void 0,this._definitionChanged=new wn.a,this._eventHelper=new Ib,this._referenceFrame=Object(r.a)(t,AT.FIXED),this.setValue(e)}Object.defineProperties(r0.prototype,{isConstant:{get:function(){var e=this._value;if(!Object(o.a)(e))return!0;for(var t=e.length,n=0;n<t;n++)if(!cP.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}}),r0.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},r0.prototype.getValueInReferenceFrame=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required.");if(!Object(o.a)(t))throw new a.a("referenceFrame is required.");var i=this._value;if(Object(o.a)(i)){var r=i.length;Object(o.a)(n)||(n=new Array(r));for(var s=0,c=0;s<r;){var l=i[s].getValueInReferenceFrame(e,t,n[s]);Object(o.a)(l)&&(n[c]=l,c++),s++}return n.length=c,n}},r0.prototype.setValue=function(e){var t=this._eventHelper;if(t.removeAll(),Object(o.a)(e)){this._value=e.slice();for(var n=e.length,i=0;i<n;i++){var r=e[i];Object(o.a)(r)&&t.add(r.definitionChanged,r0.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)},r0.prototype.equals=function(e){return this===e||e instanceof r0&&this._referenceFrame===e._referenceFrame&&cP.arrayEquals(this._value,e._value)},r0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var o0=r0;function a0(e){this._value=void 0,this._definitionChanged=new wn.a,this._eventHelper=new Ib,this.setValue(e)}Object.defineProperties(a0.prototype,{isConstant:{get:function(){var e=this._value;if(!Object(o.a)(e))return!0;for(var t=e.length,n=0;n<t;n++)if(!cP.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}}),a0.prototype.getValue=function(e,t){if(!Object(o.a)(e))throw new a.a("time is required.");var n=this._value;if(Object(o.a)(n)){var i=n.length;Object(o.a)(t)||(t=new Array(i));for(var r=0,s=0;r<i;){var c=this._value[r].getValue(e,t[r]);Object(o.a)(c)&&(t[s]=c,s++),r++}return t.length=s,t}},a0.prototype.setValue=function(e){var t=this._eventHelper;if(t.removeAll(),Object(o.a)(e)){this._value=e.slice();for(var n=e.length,i=0;i<n;i++){var r=e[i];Object(o.a)(r)&&t.add(r.definitionChanged,a0.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)},a0.prototype.equals=function(e){return this===e||e instanceof a0&&cP.arrayEquals(this._value,e._value)},a0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var s0=a0;function c0(e){var t=e._targetProperty;if(!Object(o.a)(t)){var n=e._targetEntity;if(!Object(o.a)(n)){if(n=e._targetCollection.getById(e._targetId),!Object(o.a)(n))return void(e._targetEntity=e._targetProperty=void 0);n.definitionChanged.addEventListener(l0.prototype._onTargetEntityDefinitionChanged,e),e._targetEntity=n}var i=e._targetPropertyNames;t=e._targetEntity;for(var r=0,a=i.length;r<a&&Object(o.a)(t);++r)t=t[i[r]];e._targetProperty=t}return t}function l0(e,t,n){if(!Object(o.a)(e))throw new a.a("targetCollection is required.");if(!Object(o.a)(t)||""===t)throw new a.a("targetId is required.");if(!Object(o.a)(n)||0===n.length)throw new a.a("targetPropertyNames is required.");for(var i=0;i<n.length;i++){var r=n[i];if(!Object(o.a)(r)||""===r)throw new a.a("reference contains invalid properties.")}this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new wn.a,e.collectionChanged.addEventListener(l0.prototype._onCollectionChanged,this)}Object.defineProperties(l0.prototype,{isConstant:{get:function(){return cP.isConstant(c0(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){var e=c0(this);return Object(o.a)(e)?e.referenceFrame:void 0}},targetId:{get:function(){return this._targetId}},targetCollection:{get:function(){return this._targetCollection}},targetPropertyNames:{get:function(){return this._targetPropertyNames}},resolvedProperty:{get:function(){return c0(this)}}}),l0.fromString=function(e,t){if(!Object(o.a)(e))throw new a.a("targetCollection is required.");if(!Object(o.a)(t))throw new a.a("referenceString is required.");for(var n,i=[],r=!0,s=!1,c="",l=0;l<t.length;++l){var u=t.charAt(l);s?(c+=u,s=!1):"\\"===u?s=!0:r&&"#"===u?(n=c,r=!1,c=""):r||"."!==u?c+=u:(i.push(c),c="")}return i.push(c),new l0(e,n,i)},l0.prototype.getValue=function(e,t){var n=c0(this);return Object(o.a)(n)?n.getValue(e,t):void 0},l0.prototype.getValueInReferenceFrame=function(e,t,n){var i=c0(this);return Object(o.a)(i)?i.getValueInReferenceFrame(e,t,n):void 0},l0.prototype.getType=function(e){var t=c0(this);return Object(o.a)(t)?t.getType(e):void 0},l0.prototype.equals=function(e){if(this===e)return!0;var t=this._targetPropertyNames,n=e._targetPropertyNames;if(this._targetCollection!==e._targetCollection||this._targetId!==e._targetId||t.length!==n.length)return!1;for(var i=this._targetPropertyNames.length,r=0;r<i;r++)if(t[r]!==n[r])return!1;return!0},l0.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){Object(o.a)(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))},l0.prototype._onCollectionChanged=function(e,t,n){var i=this._targetEntity;Object(o.a)(i)&&-1!==n.indexOf(i)?(i.definitionChanged.removeEventListener(l0.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):Object(o.a)(i)||(i=c0(this),Object(o.a)(i)&&this._definitionChanged.raiseEvent(this))};var u0=l0,h0={packedLength:1,pack:function(e,t,n){if(!Object(o.a)(e))throw new a.a("value is required");if(!Object(o.a)(t))throw new a.a("array is required");return t[n=Object(r.a)(n,0)]=e,t},unpack:function(e,t,n){if(!Object(o.a)(e))throw new a.a("array is required");return e[t=Object(r.a)(t,0)]},convertPackedArrayForInterpolation:function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("packedArray is required");var s;Object(o.a)(i)||(i=[]),t=Object(r.a)(t,0);for(var c=0,l=(n=Object(r.a)(n,e.length))-t+1;c<l;c++){var u=e[t+c];0===c||Math.abs(s-u)<Math.PI?i[c]=u:i[c]=u-d.TWO_PI,s=u}},unpackInterpolationResult:function(e,t,n,i,r){if(!Object(o.a)(e))throw new a.a("array is required");if(!Object(o.a)(t))throw new a.a("sourceArray is required");return(r=e[0])<0?r+d.TWO_PI:r}},d0={packedLength:1,pack:function(e,t,n){t[n=Object(r.a)(n,0)]=e},unpack:function(e,t,n){return e[t=Object(r.a)(t,0)]}};function f0(e,t,n){var i,r=e.length,o=n.length,a=r+o;if(e.length=a,r!==t){var s=r-1;for(i=a-1;i>=t;i--)e[i]=e[s--]}for(i=0;i<o;i++)e[t++]=n[i]}function p0(e,t){return e instanceof hr?e:"string"===typeof e?hr.fromIso8601(e):hr.addSeconds(t,e,new hr)}var m0=[],g0=[];function v0(e,t,n,i,r){for(var a,s,c,l,u,h,d=0;d<i.length;){u=p0(i[d],e);var f=0,p=0;if((c=Ni(t,u,hr.compare))<0){for(l=(c=~c)*r,s=void 0,h=t[c];d<i.length&&(u=p0(i[d],e),!(Object(o.a)(s)&&hr.compare(s,u)>=0||Object(o.a)(h)&&hr.compare(u,h)>=0));){for(m0[f++]=u,d+=1,a=0;a<r;a++)g0[p++]=i[d],d+=1;s=u}f>0&&(g0.length=p,f0(n,l,g0),m0.length=f,f0(t,c,m0))}else{for(a=0;a<r;a++)d++,n[c*r+a]=i[d];d++}}}function _0(e,t){i.a.defined("type",e);var n=e;n===Number&&(n=d0);var a,s=n.packedLength,c=Object(r.a)(n.packedInterpolationLength,s),l=0;if(Object(o.a)(t)){var u=t.length;a=new Array(u);for(var h=0;h<u;h++){var d=t[h];d===Number&&(d=d0);var f=d.packedLength;s+=f,c+=Object(r.a)(d.packedInterpolationLength,f),a[h]=d}l=u}this._type=e,this._innerType=n,this._interpolationDegree=1,this._interpolationAlgorithm=DC,this._numberOfPoints=0,this._times=[],this._values=[],this._xTable=[],this._yTable=[],this._packedLength=s,this._packedInterpolationLength=c,this._updateTableLength=!0,this._interpolationResult=new Array(c),this._definitionChanged=new wn.a,this._derivativeTypes=t,this._innerDerivativeTypes=a,this._inputOrder=l,this._forwardExtrapolationType=Mb.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=Mb.NONE,this._backwardExtrapolationDuration=0}function b0(e,t,n){var i=e._packedLength;e._times.splice(t,n),e._values.splice(t*i,n*i),e._updateTableLength=!0,e._definitionChanged.raiseEvent(e)}Object.defineProperties(_0.prototype,{isConstant:{get:function(){return 0===this._values.length}},definitionChanged:{get:function(){return this._definitionChanged}},type:{get:function(){return this._type}},derivativeTypes:{get:function(){return this._derivativeTypes}},interpolationDegree:{get:function(){return this._interpolationDegree}},interpolationAlgorithm:{get:function(){return this._interpolationAlgorithm}},forwardExtrapolationType:{get:function(){return this._forwardExtrapolationType},set:function(e){this._forwardExtrapolationType!==e&&(this._forwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},forwardExtrapolationDuration:{get:function(){return this._forwardExtrapolationDuration},set:function(e){this._forwardExtrapolationDuration!==e&&(this._forwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationType:{get:function(){return this._backwardExtrapolationType},set:function(e){this._backwardExtrapolationType!==e&&(this._backwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationDuration:{get:function(){return this._backwardExtrapolationDuration},set:function(e){this._backwardExtrapolationDuration!==e&&(this._backwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}}}),_0.prototype.getValue=function(e,t){i.a.defined("time",e);var n=this._times,r=n.length;if(0!==r){var a,s=this._innerType,c=this._values,l=Ni(n,e,hr.compare);if(l<0){if(0===(l=~l)){var u=n[l];if(a=this._backwardExtrapolationDuration,this._backwardExtrapolationType===Mb.NONE||0!==a&&hr.secondsDifference(u,e)>a)return;if(this._backwardExtrapolationType===Mb.HOLD)return s.unpack(c,0,t)}if(l>=r){var h=n[l=r-1];if(a=this._forwardExtrapolationDuration,this._forwardExtrapolationType===Mb.NONE||0!==a&&hr.secondsDifference(e,h)>a)return;if(this._forwardExtrapolationType===Mb.HOLD)return l=r-1,s.unpack(c,l*s.packedLength,t)}var d=this._xTable,f=this._yTable,p=this._interpolationAlgorithm,m=this._packedInterpolationLength,g=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;var v=Math.min(p.getRequiredDataPoints(this._interpolationDegree,g),r);v!==this._numberOfPoints&&(this._numberOfPoints=v,d.length=v,f.length=v*m)}var _=this._numberOfPoints-1;if(_<1)return;var b=0,y=r-1;if(y-b+1>=_+1){var w=l-(_/2|0)-1;w<b&&(w=b);var O=w+_;O>y&&(w=(O=y)-_)<b&&(w=b),b=w,y=O}for(var C=y-b+1,E=0;E<C;++E)d[E]=hr.secondsDifference(n[b+E],n[y]);if(Object(o.a)(s.convertPackedArrayForInterpolation))s.convertPackedArrayForInterpolation(c,b,y,f);else for(var A=0,x=this._packedLength,T=b*x,S=(y+1)*x;T<S;)f[A]=c[T],T++,A++;var D,P=hr.secondsDifference(e,n[y]);if(0!==g&&Object(o.a)(p.interpolate)){var I=Math.floor(m/(g+1));D=p.interpolate(P,d,f,I,g,g,this._interpolationResult)}else D=p.interpolateOrderZero(P,d,f,m,this._interpolationResult);return Object(o.a)(s.unpackInterpolationResult)?s.unpackInterpolationResult(D,c,b,y,t):s.unpack(D,0,t)}return s.unpack(c,l*this._packedLength,t)}},_0.prototype.setInterpolationOptions=function(e){if(Object(o.a)(e)){var t=!1,n=e.interpolationAlgorithm,i=e.interpolationDegree;Object(o.a)(n)&&this._interpolationAlgorithm!==n&&(this._interpolationAlgorithm=n,t=!0),Object(o.a)(i)&&this._interpolationDegree!==i&&(this._interpolationDegree=i,t=!0),t&&(this._updateTableLength=!0,this._definitionChanged.raiseEvent(this))}},_0.prototype.addSample=function(e,t,n){var r=this._innerDerivativeTypes,a=Object(o.a)(r);i.a.defined("time",e),i.a.defined("value",t),a&&i.a.defined("derivatives",n);var s=this._innerType,c=[];if(c.push(e),s.pack(t,c,c.length),a)for(var l=r.length,u=0;u<l;u++)r[u].pack(n[u],c,c.length);v0(void 0,this._times,this._values,c,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)},_0.prototype.addSamples=function(e,t,n){var r=this._innerDerivativeTypes,s=Object(o.a)(r);if(i.a.defined("times",e),i.a.defined("values",t),e.length!==t.length)throw new a.a("times and values must be the same length.");if(s&&(!Object(o.a)(n)||n.length!==e.length))throw new a.a("times and derivativeValues must be the same length.");for(var c=this._innerType,l=e.length,u=[],h=0;h<l;h++)if(u.push(e[h]),c.pack(t[h],u,u.length),s)for(var d=n[h],f=r.length,p=0;p<f;p++)r[p].pack(d[p],u,u.length);v0(void 0,this._times,this._values,u,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)},_0.prototype.addSamplesPackedArray=function(e,t){i.a.defined("packedSamples",e),v0(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)},_0.prototype.removeSample=function(e){i.a.defined("time",e);var t=Ni(this._times,e,hr.compare);return!(t<0)&&(b0(this,t,1),!0)},_0.prototype.removeSamples=function(e){i.a.defined("timeInterval",e);var t=this._times,n=Ni(t,e.start,hr.compare);n<0?n=~n:e.isStartIncluded||++n;var r=Ni(t,e.stop,hr.compare);r<0?r=~r:e.isStopIncluded&&++r,b0(this,n,r-n)},_0.prototype.equals=function(e){if(this===e)return!0;if(!Object(o.a)(e))return!1;if(this._type!==e._type||this._interpolationDegree!==e._interpolationDegree||this._interpolationAlgorithm!==e._interpolationAlgorithm)return!1;var t,n,i=this._derivativeTypes,r=Object(o.a)(i),a=e._derivativeTypes;if(r!==Object(o.a)(a))return!1;if(r){if((n=i.length)!==a.length)return!1;for(t=0;t<n;t++)if(i[t]!==a[t])return!1}var s=this._times,c=e._times;if((n=s.length)!==c.length)return!1;for(t=0;t<n;t++)if(!hr.equals(s[t],c[t]))return!1;var l=this._values,u=e._values;for(n=l.length,t=0;t<n;t++)if(l[t]!==u[t])return!1;return!0},_0._mergeNewSamples=v0;var y0=_0;function w0(e,t){var n;if((t=Object(r.a)(t,0))>0){n=new Array(t);for(var i=0;i<t;i++)n[i]=O}this._numberOfDerivatives=t,this._property=new y0(O,n),this._definitionChanged=new wn.a,this._referenceFrame=Object(r.a)(e,AT.FIXED),this._property._definitionChanged.addEventListener((function(){this._definitionChanged.raiseEvent(this)}),this)}Object.defineProperties(w0.prototype,{isConstant:{get:function(){return this._property.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}},interpolationDegree:{get:function(){return this._property.interpolationDegree}},interpolationAlgorithm:{get:function(){return this._property.interpolationAlgorithm}},numberOfDerivatives:{get:function(){return this._numberOfDerivatives}},forwardExtrapolationType:{get:function(){return this._property.forwardExtrapolationType},set:function(e){this._property.forwardExtrapolationType=e}},forwardExtrapolationDuration:{get:function(){return this._property.forwardExtrapolationDuration},set:function(e){this._property.forwardExtrapolationDuration=e}},backwardExtrapolationType:{get:function(){return this._property.backwardExtrapolationType},set:function(e){this._property.backwardExtrapolationType=e}},backwardExtrapolationDuration:{get:function(){return this._property.backwardExtrapolationDuration},set:function(e){this._property.backwardExtrapolationDuration=e}}}),w0.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},w0.prototype.getValueInReferenceFrame=function(e,t,n){if(i.a.defined("time",e),i.a.defined("referenceFrame",t),n=this._property.getValue(e,n),Object(o.a)(n))return Kj.convertToReferenceFrame(e,n,this._referenceFrame,t,n)},w0.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)},w0.prototype.addSample=function(e,t,n){var i=this._numberOfDerivatives;if(i>0&&(!Object(o.a)(n)||n.length!==i))throw new a.a("derivatives length must be equal to the number of derivatives.");this._property.addSample(e,t,n)},w0.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)},w0.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)},w0.prototype.removeSample=function(e){this._property.removeSample(e)},w0.prototype.removeSamples=function(e){this._property.removeSamples(e)},w0.prototype.equals=function(e){return this===e||e instanceof w0&&cP.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var O0=w0,C0=Object.freeze({HORIZONTAL:0,VERTICAL:1}),E0=C0.HORIZONTAL,A0=Hf.WHITE,x0=Hf.BLACK;function T0(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._definitionChanged=new wn.a,this._orientation=void 0,this._orientationSubscription=void 0,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._offset=void 0,this._offsetSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.orientation=e.orientation,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.offset=e.offset,this.repeat=e.repeat}Object.defineProperties(T0.prototype,{isConstant:{get:function(){return cP.isConstant(this._orientation)&&cP.isConstant(this._evenColor)&&cP.isConstant(this._oddColor)&&cP.isConstant(this._offset)&&cP.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:eP("orientation"),evenColor:eP("evenColor"),oddColor:eP("oddColor"),offset:eP("offset"),repeat:eP("repeat")}),T0.prototype.getType=function(e){return"Stripe"},T0.prototype.getValue=function(e,t){return Object(o.a)(t)||(t={}),t.horizontal=cP.getValueOrDefault(this._orientation,e,E0)===C0.HORIZONTAL,t.evenColor=cP.getValueOrClonedDefault(this._evenColor,e,A0,t.evenColor),t.oddColor=cP.getValueOrClonedDefault(this._oddColor,e,x0,t.oddColor),t.offset=cP.getValueOrDefault(this._offset,e,0),t.repeat=cP.getValueOrDefault(this._repeat,e,1),t},T0.prototype.equals=function(e){return this===e||e instanceof T0&&cP.equals(this._orientation,e._orientation)&&cP.equals(this._evenColor,e._evenColor)&&cP.equals(this._oddColor,e._oddColor)&&cP.equals(this._offset,e._offset)&&cP.equals(this._repeat,e._repeat)};var S0=T0;function D0(e){this._definitionChanged=new wn.a,this._intervals=new lD,this._intervals.changedEvent.addEventListener(D0.prototype._intervalsChanged,this),this._referenceFrame=Object(r.a)(e,AT.FIXED)}Object.defineProperties(D0.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}},referenceFrame:{get:function(){return this._referenceFrame}}}),D0.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},D0.prototype.getValueInReferenceFrame=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required.");if(!Object(o.a)(t))throw new a.a("referenceFrame is required.");var i=this._intervals.findDataForIntervalContainingDate(e);if(Object(o.a)(i))return Kj.convertToReferenceFrame(e,i,this._referenceFrame,t,n)},D0.prototype.equals=function(e){return this===e||e instanceof D0&&this._intervals.equals(e._intervals,cP.equals)&&this._referenceFrame===e._referenceFrame},D0.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var P0=D0;function I0(){this._definitionChanged=new wn.a,this._intervals=new lD,this._intervals.changedEvent.addEventListener(I0.prototype._intervalsChanged,this)}Object.defineProperties(I0.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}}),I0.prototype.getValue=function(e,t){if(!Object(o.a)(e))throw new a.a("time is required");var n=this._intervals.findDataForIntervalContainingDate(e);return Object(o.a)(n)&&"function"===typeof n.clone?n.clone(t):n},I0.prototype.equals=function(e){return this===e||e instanceof I0&&this._intervals.equals(e._intervals,cP.equals)},I0.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var M0=I0;function R0(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new wn.a,this._normalize=Object(r.a)(t,!0),this.position=e}Object.defineProperties(R0.prototype,{isConstant:{get:function(){return cP.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){var t=this._position;t!==e&&(Object(o.a)(t)&&this._subscription(),this._position=e,Object(o.a)(e)&&(this._subscription=e._definitionChanged.addEventListener((function(){this._definitionChanged.raiseEvent(this)}),this)),this._definitionChanged.raiseEvent(this))}},normalize:{get:function(){return this._normalize},set:function(e){this._normalize!==e&&(this._normalize=e,this._definitionChanged.raiseEvent(this))}}});var L0=new O,j0=new O,F0=new hr;R0.prototype.getValue=function(e,t){return this._getValue(e,t)},R0.prototype._getValue=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required");Object(o.a)(t)||(t=new O);var i=this._position;if(cP.isConstant(i))return this._normalize?void 0:O.clone(O.ZERO,t);var r=i.getValue(e,L0),s=i.getValue(hr.addSeconds(e,1/60,F0),j0);if(Object(o.a)(r)&&(Object(o.a)(s)||(s=r,r=i.getValue(hr.addSeconds(e,-1/60,F0),j0),Object(o.a)(r)))){if(O.equals(r,s))return this._normalize?void 0:O.clone(O.ZERO,t);Object(o.a)(n)&&r.clone(n);var c=O.subtract(s,r,t);return this._normalize?O.normalize(c,t):O.divideByScalar(c,1/60,t)}},R0.prototype.equals=function(e){return this===e||e instanceof R0&&cP.equals(this._position,e._position)};var N0=R0;function z0(e,t){this._velocityVectorProperty=new N0(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new wn.a,this.ellipsoid=Object(r.a)(t,W.WGS84);var n=this;this._velocityVectorProperty.definitionChanged.addEventListener((function(){n._definitionChanged.raiseEvent(n)}))}Object.defineProperties(z0.prototype,{isConstant:{get:function(){return cP.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var k0=new O,B0=new O,H0=new oe;z0.prototype.getValue=function(e,t){var n=this._velocityVectorProperty._getValue(e,B0,k0);if(Object(o.a)(n))return ya.rotationMatrixFromPositionVelocity(k0,n,this._ellipsoid,H0),No.fromRotationMatrix(H0,t)},z0.prototype.equals=function(e){return this===e||e instanceof z0&&cP.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var V0,U0=z0;function W0(){}function G0(e,t){return"#"===t[0]&&(t=V0+t),u0.fromString(e,t)}function q0(e,t,n){if(Object(o.a)(n.reference))return G0(t,n.reference);if(Object(o.a)(n.velocityReference)){var i=G0(t,n.velocityReference);switch(e){case O:case W0:return new N0(i,e===W0);case No:return new U0(i)}}throw new de.a(JSON.stringify(n)+" is not valid CZML.")}W0.packedLength=O.packedLength,W0.unpack=O.unpack,W0.pack=O.pack;var Y0=new O,$0=new $S,X0=new R,K0=new wC,Q0=new No;function Z0(e,t){var n=Object(r.a)(e.uri,e);return Object(o.a)(t)?t.getDerivedResource({url:n}):_t.a.createIfNeeded(n)}function J0(e){var t=e.cartesian;if(Object(o.a)(t))return t;var n=e.cartesianVelocity;if(Object(o.a)(n))return n;var i=e.unitCartesian;if(Object(o.a)(i))return i;var r=e.unitSpherical;if(Object(o.a)(r))return function(e){var t=e.length;if($0.magnitude=1,2===t)return $0.clock=e[0],$0.cone=e[1],O.fromSpherical($0,Y0),[Y0.x,Y0.y,Y0.z];for(var n=new Array(t/3*4),i=0,r=0;i<t;i+=3,r+=4)n[r]=e[i],$0.clock=e[i+1],$0.cone=e[i+2],O.fromSpherical($0,Y0),n[r+1]=Y0.x,n[r+2]=Y0.y,n[r+3]=Y0.z;return n}(r);var a=e.spherical;if(Object(o.a)(a))return function(e){var t=e.length;if(3===t)return $0.clock=e[0],$0.cone=e[1],$0.magnitude=e[2],O.fromSpherical($0,Y0),[Y0.x,Y0.y,Y0.z];for(var n=new Array(t),i=0;i<t;i+=4)n[i]=e[i],$0.clock=e[i+1],$0.cone=e[i+2],$0.magnitude=e[i+3],O.fromSpherical($0,Y0),n[i+1]=Y0.x,n[i+2]=Y0.y,n[i+3]=Y0.z;return n}(a);var s=e.cartographicRadians;if(Object(o.a)(s))return function(e){var t=e.length;if(3===t)return X0.longitude=e[0],X0.latitude=e[1],X0.height=e[2],W.WGS84.cartographicToCartesian(X0,Y0),[Y0.x,Y0.y,Y0.z];for(var n=new Array(t),i=0;i<t;i+=4)n[i]=e[i],X0.longitude=e[i+1],X0.latitude=e[i+2],X0.height=e[i+3],W.WGS84.cartographicToCartesian(X0,Y0),n[i+1]=Y0.x,n[i+2]=Y0.y,n[i+3]=Y0.z;return n}(s);var c=e.cartographicDegrees;if(Object(o.a)(c))return function(e){var t=e.length;if(3===t)return X0.longitude=d.toRadians(e[0]),X0.latitude=d.toRadians(e[1]),X0.height=e[2],W.WGS84.cartographicToCartesian(X0,Y0),[Y0.x,Y0.y,Y0.z];for(var n=new Array(t),i=0;i<t;i+=4)n[i]=e[i],X0.longitude=d.toRadians(e[i+1]),X0.latitude=d.toRadians(e[i+2]),X0.height=e[i+3],W.WGS84.cartographicToCartesian(X0,Y0),n[i+1]=Y0.x,n[i+2]=Y0.y,n[i+3]=Y0.z;return n}(c);throw new de.a(JSON.stringify(e)+" is not a valid CZML interval.")}function e2(e,t){O.unpack(e,t,Y0),O.normalize(Y0,Y0),O.pack(Y0,e,t)}function t2(e,t){No.unpack(e,t,Q0),No.normalize(Q0,Q0),No.pack(Q0,e,t)}function n2(e){return"boolean"===typeof e?Boolean:"number"===typeof e?Number:"string"===typeof e?String:e.hasOwnProperty("array")?Array:e.hasOwnProperty("boolean")?Boolean:e.hasOwnProperty("boundingRectangle")?bl:e.hasOwnProperty("cartesian2")?Mt:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?O:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?W0:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?Hf:e.hasOwnProperty("arcType")?tl:e.hasOwnProperty("classificationType")?JM:e.hasOwnProperty("colorBlendMode")?hH:e.hasOwnProperty("cornerType")?Wm:e.hasOwnProperty("heightReference")?iP:e.hasOwnProperty("horizontalOrigin")?rP:e.hasOwnProperty("date")?hr:e.hasOwnProperty("labelStyle")?ZY:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?JC:e.hasOwnProperty("distanceDisplayCondition")?$_:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?No:e.hasOwnProperty("shadowMode")?RR:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?C0:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?Se:e.hasOwnProperty("uri")?u_.a:e.hasOwnProperty("verticalOrigin")?oP:Object}function i2(e,t,n){switch(e){case tl:return tl[Object(r.a)(t.arcType,t)];case Array:return t.array;case Boolean:return Object(r.a)(t.boolean,t);case bl:return t.boundingRectangle;case Mt:return t.cartesian2;case O:return J0(t);case W0:return function(e){var t=J0(e);if(3===t.length)return e2(t,0),t;for(var n=1;n<t.length;n+=4)e2(t,n);return t}(t);case Hf:return function(e){var t=e.rgbaf;if(Object(o.a)(t))return t;var n=e.rgba;if(Object(o.a)(n)){var i=n.length;if(i===Hf.packedLength)return[Hf.byteToFloat(n[0]),Hf.byteToFloat(n[1]),Hf.byteToFloat(n[2]),Hf.byteToFloat(n[3])];t=new Array(i);for(var r=0;r<i;r+=5)t[r]=n[r],t[r+1]=Hf.byteToFloat(n[r+1]),t[r+2]=Hf.byteToFloat(n[r+2]),t[r+3]=Hf.byteToFloat(n[r+3]),t[r+4]=Hf.byteToFloat(n[r+4]);return t}}(t);case JM:return JM[Object(r.a)(t.classificationType,t)];case hH:return hH[Object(r.a)(t.colorBlendMode,t)];case Wm:return Wm[Object(r.a)(t.cornerType,t)];case iP:return iP[Object(r.a)(t.heightReference,t)];case rP:return rP[Object(r.a)(t.horizontalOrigin,t)];case Image:return Z0(t,n);case hr:return hr.fromIso8601(Object(r.a)(t.date,t));case ZY:return ZY[Object(r.a)(t.labelStyle,t)];case Number:return Object(r.a)(t.number,t);case JC:return t.nearFarScalar;case $_:return t.distanceDisplayCondition;case Object:return Object(r.a)(Object(r.a)(t.object,t.value),t);case No:return function(e){var t=e.unitQuaternion;if(Object(o.a)(t)){if(4===t.length)return t2(t,0),t;for(var n=1;n<t.length;n+=5)t2(t,n)}return t}(t);case h0:return Object(r.a)(t.number,t);case RR:return RR[Object(r.a)(Object(r.a)(t.shadowMode,t.shadows),t)];case String:return Object(r.a)(t.string,t);case C0:return C0[Object(r.a)(t.stripeOrientation,t)];case Se:return function(e){var t=e.wsen;if(Object(o.a)(t))return t;var n=e.wsenDegrees;if(Object(o.a)(n)){var i=n.length;if(i===Se.packedLength)return[d.toRadians(n[0]),d.toRadians(n[1]),d.toRadians(n[2]),d.toRadians(n[3])];t=new Array(i);for(var r=0;r<i;r+=5)t[r]=n[r],t[r+1]=d.toRadians(n[r+1]),t[r+2]=d.toRadians(n[r+2]),t[r+3]=d.toRadians(n[r+3]),t[r+4]=d.toRadians(n[r+4]);return t}}(t);case u_.a:return Z0(t,n);case oP:return oP[Object(r.a)(t.verticalOrigin,t)];default:throw new de.a(e)}}var r2={HERMITE:QO,LAGRANGE:TC,LINEAR:DC};function o2(e,t){var n=e.interpolationAlgorithm,i=e.interpolationDegree;(Object(o.a)(n)||Object(o.a)(i))&&t.setInterpolationOptions({interpolationAlgorithm:r2[n],interpolationDegree:i});var r=e.forwardExtrapolationType;Object(o.a)(r)&&(t.forwardExtrapolationType=Mb[r]);var a=e.forwardExtrapolationDuration;Object(o.a)(a)&&(t.forwardExtrapolationDuration=a);var s=e.backwardExtrapolationType;Object(o.a)(s)&&(t.backwardExtrapolationType=Mb[s]);var c=e.backwardExtrapolationDuration;Object(o.a)(c)&&(t.backwardExtrapolationDuration=c)}var a2={iso8601:void 0};function s2(e){if(Object(o.a)(e))return a2.iso8601=e,wC.fromIso8601(a2)}function c2(e){var t=EC.MAXIMUM_INTERVAL.clone();return t.data=e,t}function l2(e){var t=new ZZ;return t.intervals.addInterval(c2(e)),t}function u2(e){var t=new nJ(e.referenceFrame);return t.intervals.addInterval(c2(e)),t}function h2(e,t,n,i,a,s,c){var l,u,h,d=s2(i.interval);Object(o.a)(a)&&(d=Object(o.a)(d)?wC.intersect(d,a,K0):a);var f=!Object(o.a)(i.reference)&&!Object(o.a)(i.velocityReference),p=Object(o.a)(d)&&!d.equals(EC.MAXIMUM_INTERVAL);if(!0===i.delete)return p?function e(t,n){if(t instanceof y0)return void t.removeSamples(n);if(t instanceof M0)return void t.intervals.removeInterval(n);if(t instanceof ZZ){for(var i=t.intervals,r=0;r<i.length;++r){var o=wC.intersect(i.get(r),n,K0);o.isEmpty||e(o.data,n)}return void i.removeInterval(n)}}(t[n],d):void(t[n]=void 0);var m=!1;if(f){if(u=i2(e,i,s),!Object(o.a)(u))return;l=Object(r.a)(e.packedLength,1),h=Object(r.a)(u.length,1),m=!Object(o.a)(i.array)&&"string"!==typeof u&&h>l&&e!==Object}var g="function"===typeof e.unpack&&e!==h0;if(m||p){var v,_,b=t[n],y=i.epoch;if(Object(o.a)(y)&&(v=hr.fromIso8601(y)),m&&!p)return b instanceof y0||(t[n]=b=new y0(e)),b.addSamplesPackedArray(u,v),void o2(i,b);if(!m&&p)return(d=d.clone()).data=f?g?e.unpack(u,0):u:q0(e,c,i),Object(o.a)(b)||(t[n]=b=f?new M0:new ZZ),void(f&&b instanceof M0?b.intervals.addInterval(d):b instanceof ZZ?(f&&(d.data=new ZD(d.data)),b.intervals.addInterval(d)):(t[n]=b=l2(b),f&&(d.data=new ZD(d.data)),b.intervals.addInterval(d)));Object(o.a)(b)||(t[n]=b=new ZZ),b instanceof ZZ||(t[n]=b=l2(b));var w=b.intervals;_=w.findInterval(d),Object(o.a)(_)&&_.data instanceof y0||((_=d.clone()).data=new y0(e),w.addInterval(_)),_.data.addSamplesPackedArray(u,v),o2(i,_.data)}else t[n]=f?new ZD(g?e.unpack(u,0):u):q0(e,c,i)}function d2(e,t,n,i,r,a,s){if(Object(o.a)(i))if(Array.isArray(i))for(var c=0,l=i.length;c<l;++c)h2(e,t,n,i[c],r,a,s);else h2(e,t,n,i,r,a,s)}function f2(e,t,n,i,a,s){var c=s2(n.interval);Object(o.a)(i)&&(c=Object(o.a)(c)?wC.intersect(c,i,K0):i);var l,u,h=Object(o.a)(n.cartesianVelocity)?1:0,d=O.packedLength*(h+1),f=!Object(o.a)(n.reference),p=Object(o.a)(c)&&!c.equals(EC.MAXIMUM_INTERVAL);if(!0===n.delete)return p?function e(t,n){if(t instanceof O0)return void t.removeSamples(n);if(t instanceof P0)return void t.intervals.removeInterval(n);if(t instanceof nJ){for(var i=t.intervals,r=0;r<i.length;++r){var o=wC.intersect(i.get(r),n,K0);o.isEmpty||e(o.data,n)}return void i.removeInterval(n)}}(e[t],c):void(e[t]=void 0);var m=!1;if(f&&(Object(o.a)(n.referenceFrame)&&(u=AT[n.referenceFrame]),u=Object(r.a)(u,AT.FIXED),l=J0(n),m=Object(r.a)(l.length,1)>d),m||p){var g,v,_=e[t],b=n.epoch;if(Object(o.a)(b)&&(g=hr.fromIso8601(b)),m&&!p)return _ instanceof O0&&(!Object(o.a)(u)||_.referenceFrame===u)||(e[t]=_=new O0(u,h)),_.addSamplesPackedArray(l,g),void o2(n,_);if(!m&&p)return(c=c.clone()).data=f?O.unpack(l):G0(s,n.reference),Object(o.a)(_)||(_=f?new P0(u):new nJ(u),e[t]=_),void(f&&_ instanceof P0&&Object(o.a)(u)&&_.referenceFrame===u?_.intervals.addInterval(c):_ instanceof nJ?(f&&(c.data=new Zj(c.data,u)),_.intervals.addInterval(c)):(e[t]=_=u2(_),f&&(c.data=new Zj(c.data,u)),_.intervals.addInterval(c)));Object(o.a)(_)?_ instanceof nJ||(e[t]=_=u2(_)):e[t]=_=new nJ(u);var y=_.intervals;v=y.findInterval(c),Object(o.a)(v)&&v.data instanceof O0&&(!Object(o.a)(u)||v.data.referenceFrame===u)||((v=c.clone()).data=new O0(u,h),y.addInterval(v)),v.data.addSamplesPackedArray(l,g),o2(n,v.data)}else e[t]=f?new Zj(O.unpack(l),u):G0(s,n.reference)}function p2(e,t,n,i,r,a){if(Object(o.a)(n))if(Array.isArray(n))for(var s=0,c=n.length;s<c;++s)f2(e,t,n[s],i,0,a);else f2(e,t,n,i,0,a)}function m2(e,t,n,i){Object(o.a)(n.references)?_2(e,t,n.references,n.interval,i,s0,ZZ):(Object(o.a)(n.cartesian)&&(n.array=Mt.unpackArray(n.cartesian)),Object(o.a)(n.array)&&d2(Array,e,t,n,void 0,void 0,i))}function g2(e,t,n,i,r,a){var s=s2(n.interval);Object(o.a)(i)&&(s=Object(o.a)(s)?wC.intersect(s,i,K0):i);var c,l,u,h=e[t];if(Object(o.a)(s)){h instanceof eJ||(h=new eJ,e[t]=h);var d=h.intervals;l=d.findInterval({start:s.start,stop:s.stop}),Object(o.a)(l)?c=l.data:(l=s.clone(),d.addInterval(l))}else c=h;Object(o.a)(n.solidColor)?(c instanceof wI||(c=new wI),u=n.solidColor,d2(Hf,c,"color",u.color,void 0,void 0,a)):Object(o.a)(n.grid)?(c instanceof W1||(c=new W1),u=n.grid,d2(Hf,c,"color",u.color,void 0,r,a),d2(Number,c,"cellAlpha",u.cellAlpha,void 0,r,a),d2(Mt,c,"lineCount",u.lineCount,void 0,r,a),d2(Mt,c,"lineThickness",u.lineThickness,void 0,r,a),d2(Mt,c,"lineOffset",u.lineOffset,void 0,r,a)):Object(o.a)(n.image)?(c instanceof Uj||(c=new Uj),u=n.image,d2(Image,c,"image",u.image,void 0,r,a),d2(Mt,c,"repeat",u.repeat,void 0,r,a),d2(Hf,c,"color",u.color,void 0,r,a),d2(Boolean,c,"transparent",u.transparent,void 0,r,a)):Object(o.a)(n.stripe)?(c instanceof S0||(c=new S0),u=n.stripe,d2(C0,c,"orientation",u.orientation,void 0,r,a),d2(Hf,c,"evenColor",u.evenColor,void 0,r,a),d2(Hf,c,"oddColor",u.oddColor,void 0,r,a),d2(Number,c,"offset",u.offset,void 0,r,a),d2(Number,c,"repeat",u.repeat,void 0,r,a)):Object(o.a)(n.polylineOutline)?(c instanceof i0||(c=new i0),u=n.polylineOutline,d2(Hf,c,"color",u.color,void 0,r,a),d2(Hf,c,"outlineColor",u.outlineColor,void 0,r,a),d2(Number,c,"outlineWidth",u.outlineWidth,void 0,r,a)):Object(o.a)(n.polylineGlow)?(c instanceof J1||(c=new J1),u=n.polylineGlow,d2(Hf,c,"color",u.color,void 0,r,a),d2(Number,c,"glowPower",u.glowPower,void 0,r,a),d2(Number,c,"taperPower",u.taperPower,void 0,r,a)):Object(o.a)(n.polylineArrow)?(c instanceof q1||(c=new q1),u=n.polylineArrow,d2(Hf,c,"color",u.color,void 0,void 0,a)):Object(o.a)(n.polylineDash)?(c instanceof K1||(c=new K1),u=n.polylineDash,d2(Hf,c,"color",u.color,void 0,void 0,a),d2(Hf,c,"gapColor",u.gapColor,void 0,void 0,a),d2(Number,c,"dashLength",u.dashLength,void 0,r,a),d2(Number,c,"dashPattern",u.dashPattern,void 0,r,a)):Object(o.a)(n.checkerboard)&&(c instanceof NZ||(c=new NZ),u=n.checkerboard,d2(Hf,c,"evenColor",u.evenColor,void 0,r,a),d2(Hf,c,"oddColor",u.oddColor,void 0,r,a),d2(Mt,c,"repeat",u.repeat,void 0,r,a)),Object(o.a)(l)?l.data=c:e[t]=c}function v2(e,t,n,i,r,a){if(Object(o.a)(n))if(Array.isArray(n))for(var s=0,c=n.length;s<c;++s)g2(e,t,n[s],i,r,a);else g2(e,t,n,i,r,a)}function _2(e,t,n,i,r,a,s){var c=n.map((function(e){return G0(r,e)}));if(Object(o.a)(i)){i=s2(i);var l=e[t];if(!(l instanceof s)){var u=new s;u.intervals.addInterval(c2(l)),e[t]=l=u}i.data=new a(c),l.intervals.addInterval(i)}else e[t]=new a(c)}function b2(e,t,n,i){var r=n.references;Object(o.a)(r)?_2(e,t,r,n.interval,i,s0,ZZ):d2(Array,e,t,n,void 0,void 0,i)}function y2(e,t,n,i){if(Object(o.a)(n))if(Array.isArray(n))for(var r=0,a=n.length;r<a;++r)b2(e,t,n[r],i);else b2(e,t,n,i)}function w2(e,t,n,i){var r=n.references;Object(o.a)(r)?_2(e,t,r,n.interval,i,o0,nJ):(Object(o.a)(n.cartesian)?n.array=O.unpackArray(n.cartesian):Object(o.a)(n.cartographicRadians)?n.array=O.fromRadiansArrayHeights(n.cartographicRadians):Object(o.a)(n.cartographicDegrees)&&(n.array=O.fromDegreesArrayHeights(n.cartographicDegrees)),Object(o.a)(n.array)&&d2(Array,e,t,n,void 0,void 0,i))}function O2(e,t,n,i){if(Object(o.a)(n))if(Array.isArray(n))for(var r=0,a=n.length;r<a;++r)w2(e,t,n[r],i);else w2(e,t,n,i)}function C2(e){return O.unpackArray(e)}function E2(e){return O.fromRadiansArrayHeights(e)}function A2(e){return O.fromDegreesArrayHeights(e)}function x2(e,t,n,i){var r=n.references;if(Object(o.a)(r)){var a=r.map((function(e){var t={};return _2(t,"positions",e,n.interval,i,o0,nJ),t.positions}));e[t]=new o0(a)}else Object(o.a)(n.cartesian)?n.array=n.cartesian.map(C2):Object(o.a)(n.cartographicRadians)?n.array=n.cartographicRadians.map(E2):Object(o.a)(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(A2)),Object(o.a)(n.array)&&d2(Array,e,t,n,void 0,void 0,i)}function T2(e,t,n,i,r){var a=s2(t.interval);Object(o.a)(n)&&(a=Object(o.a)(a)?wC.intersect(a,n,K0):n);for(var s=e.nodeTransformations,c=Object.keys(t),l=0,u=c.length;l<u;++l){var h=c[l];if("interval"!==h){var d=t[h];if(Object(o.a)(d)){Object(o.a)(s)||(e.nodeTransformations=s=new gF),s.hasProperty(h)||s.addProperty(h);var f=s[h];Object(o.a)(f)||(s[h]=f=new fF),d2(O,f,"translation",d.translation,a,i,r),d2(No,f,"rotation",d.rotation,a,i,r),d2(O,f,"scale",d.scale,a,i,r)}}}}function S2(e,t,n,i,r){var a=s2(t.interval);Object(o.a)(n)&&(a=Object(o.a)(a)?wC.intersect(a,n,K0):n);for(var s=e.articulations,c=Object.keys(t),l=0,u=c.length;l<u;++l){var h=c[l];if("interval"!==h){var d=t[h];Object(o.a)(d)&&(Object(o.a)(s)||(e.articulations=s=new gF),s.hasProperty(h)||s.addProperty(h),d2(Number,s,h,d,a,i,r))}}}function D2(e){this.polygon=e,this._definitionChanged=new wn.a}function P2(e){return e?tl.GEODESIC:tl.NONE}function I2(e,t,n,i,a){var s=e.id;if(Object(o.a)(s)||(s=l_()),V0=s,!Object(o.a)(a._version)&&"document"!==s)throw new de.a("The first CZML packet is required to be the document object.");if(!0===e.delete)t.removeById(s);else if("document"===s)!function(e,t){var n=e.version;if(Object(o.a)(n)&&"string"===typeof n){var i=n.split(".");if(2===i.length){if("1"!==i[0])throw new de.a("Cesium only supports CZML version 1.");t._version=n}}if(!Object(o.a)(t._version))throw new de.a("CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.");var a=t._documentPacket;Object(o.a)(e.name)&&(a.name=e.name);var s=e.clock;if(Object(o.a)(s)){var c=a.clock;Object(o.a)(c)?(c.interval=Object(r.a)(s.interval,c.interval),c.currentTime=Object(r.a)(s.currentTime,c.currentTime),c.range=Object(r.a)(s.range,c.range),c.step=Object(r.a)(s.step,c.step),c.multiplier=Object(r.a)(s.multiplier,c.multiplier)):a.clock={interval:s.interval,currentTime:s.currentTime,range:s.range,step:s.step,multiplier:s.multiplier}}}(e,a);else{var c=t.getOrCreateEntity(s),l=e.parent;Object(o.a)(l)&&(c.parent=t.getOrCreateEntity(l));for(var u=n.length-1;u>-1;u--)n[u](c,e,t,i)}V0=void 0}function M2(e,t,n,i){if(!Object(o.a)(t))throw new a.a("czml is required.");var s=t,c=(n=Object(r.a)(n,r.a.EMPTY_OBJECT)).sourceUri,l=n.credit;if("string"===typeof l&&(l=new yn(l)),e._credit=l,"string"===typeof t||t instanceof _t.a){s=(t=_t.a.createIfNeeded(t)).fetchJson(),c=Object(r.a)(c,t.clone());var u=e._resourceCredits,h=t.credits;if(Object(o.a)(h))for(var d=h.length,f=0;f<d;f++)u.push(h[f])}return c=_t.a.createIfNeeded(c),mJ.setLoading(e,!0),Object(Yt.a)(s,(function(t){return function(e,t,n,i){mJ.setLoading(e,!0);var a=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new R2,a.removeAll());L2._processCzml(t,a,n,void 0,e);var s=function(e){var t,n=e._documentPacket.clock;if(!Object(o.a)(n)){if(!Object(o.a)(e._clock)){var i=e._entityCollection.computeAvailability();if(!i.start.equals(EC.MINIMUM_VALUE)){var a=i.start,s=i.stop,c=hr.secondsDifference(s,a),l=Math.round(c/120);return(t=new z1).startTime=hr.clone(a),t.stopTime=hr.clone(s),t.clockRange=xf.LOOP_STOP,t.multiplier=l,t.currentTime=hr.clone(a),t.clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}Object(o.a)(e._clock)?t=e._clock.clone():((t=new z1).startTime=EC.MINIMUM_VALUE.clone(),t.stopTime=EC.MAXIMUM_VALUE.clone(),t.currentTime=EC.MINIMUM_VALUE.clone(),t.clockRange=xf.LOOP_STOP,t.clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);var u=s2(n.interval);return Object(o.a)(u)&&(t.startTime=u.start,t.stopTime=u.stop),Object(o.a)(n.currentTime)&&(t.currentTime=hr.fromIso8601(n.currentTime)),Object(o.a)(n.range)&&(t.clockRange=Object(r.a)(xf[n.range],xf.LOOP_STOP)),Object(o.a)(n.step)&&(t.clockStep=Object(r.a)(Tf[n.step],Tf.SYSTEM_CLOCK_MULTIPLIER)),Object(o.a)(n.multiplier)&&(t.multiplier=n.multiplier),!t.equals(e._clock)&&(e._clock=t.clone(e._clock),!0)}(e),c=e._documentPacket;Object(o.a)(c.name)&&e._name!==c.name?(e._name=c.name,s=!0):!Object(o.a)(e._name)&&Object(o.a)(n)&&(e._name=Iy(n.getUrlComponent()),s=!0);mJ.setLoading(e,!1),s&&e._changed.raiseEvent(e);return e}(e,t,c,i)})).otherwise((function(t){return mJ.setLoading(e,!1),e._error.raiseEvent(e,t),console.log(t),Yt.a.reject(t)}))}function R2(){this.name=void 0,this.clock=void 0}function L2(e){this._name=e,this._changed=new wn.a,this._error=new wn.a,this._isLoading=!1,this._loading=new wn.a,this._clock=void 0,this._documentPacket=new R2,this._version=void 0,this._entityCollection=new HZ(this),this._entityCluster=new x1,this._credit=void 0,this._resourceCredits=[]}Object.defineProperties(D2.prototype,{isConstant:{get:function(){var e=this.polygon._positions,t=this.polygon._holes;return(!Object(o.a)(e)||e.isConstant)&&(!Object(o.a)(t)||t.isConstant)}},definitionChanged:{get:function(){return this._definitionChanged}}}),D2.prototype.getValue=function(e,t){var n,i;return Object(o.a)(this.polygon._positions)&&(n=this.polygon._positions.getValue(e)),Object(o.a)(this.polygon._holes)&&(i=this.polygon._holes.getValue(e),Object(o.a)(i)&&(i=i.map((function(e){return new bA(e)})))),Object(o.a)(t)?(t.positions=n,t.holes=i,t):new bA(n,i)},D2.prototype.equals=function(e){return this===e||e instanceof D2&&cP.equals(this.polygon._positions,e.polygon._positions)&&cP.equals(this.polygon._holes,e.polygon._holes)},L2.load=function(e,t){return(new L2).load(e,t)},Object.defineProperties(L2.prototype,{name:{get:function(){return this._name}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){if(!Object(o.a)(e))throw new a.a("value must be defined.");this._entityCluster=e}},credit:{get:function(){return this._credit}}}),L2.updaters=[function(e,t,n,i){var r=t.billboard;if(Object(o.a)(r)){var a=s2(r.interval),s=e.billboard;Object(o.a)(s)||(e.billboard=s=new nP),d2(Boolean,s,"show",r.show,a,i,n),d2(Image,s,"image",r.image,a,i,n),d2(Number,s,"scale",r.scale,a,i,n),d2(Mt,s,"pixelOffset",r.pixelOffset,a,i,n),d2(O,s,"eyeOffset",r.eyeOffset,a,i,n),d2(rP,s,"horizontalOrigin",r.horizontalOrigin,a,i,n),d2(oP,s,"verticalOrigin",r.verticalOrigin,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Hf,s,"color",r.color,a,i,n),d2(h0,s,"rotation",r.rotation,a,i,n),function(e,t,n,i,r){Object(o.a)(t)&&d2(W0,e,"alignedAxis",t,n,i,r)}(s,r.alignedAxis,a,i,n),d2(Boolean,s,"sizeInMeters",r.sizeInMeters,a,i,n),d2(Number,s,"width",r.width,a,i,n),d2(Number,s,"height",r.height,a,i,n),d2(JC,s,"scaleByDistance",r.scaleByDistance,a,i,n),d2(JC,s,"translucencyByDistance",r.translucencyByDistance,a,i,n),d2(JC,s,"pixelOffsetScaleByDistance",r.pixelOffsetScaleByDistance,a,i,n),d2(bl,s,"imageSubRegion",r.imageSubRegion,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(Number,s,"disableDepthTestDistance",r.disableDepthTestDistance,a,i,n)}},function(e,t,n,i){var r=t.box;if(Object(o.a)(r)){var a=s2(r.interval),s=e.box;Object(o.a)(s)||(e.box=s=new Yj),d2(Boolean,s,"show",r.show,a,i,n),d2(O,s,"dimensions",r.dimensions,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.corridor;if(Object(o.a)(r)){var a=s2(r.interval),s=e.corridor;Object(o.a)(s)||(e.corridor=s=new eF),d2(Boolean,s,"show",r.show,a,i,n),O2(s,"positions",r.positions,n),d2(Number,s,"width",r.width,a,i,n),d2(Number,s,"height",r.height,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Number,s,"extrudedHeight",r.extrudedHeight,a,i,n),d2(iP,s,"extrudedHeightReference",r.extrudedHeightReference,a,i,n),d2(Wm,s,"cornerType",r.cornerType,a,i,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(JM,s,"classificationType",r.classificationType,a,i,n),d2(Number,s,"zIndex",r.zIndex,a,i,n)}},function(e,t,n,i){var r=t.cylinder;if(Object(o.a)(r)){var a=s2(r.interval),s=e.cylinder;Object(o.a)(s)||(e.cylinder=s=new rF),d2(Boolean,s,"show",r.show,a,i,n),d2(Number,s,"length",r.length,a,i,n),d2(Number,s,"topRadius",r.topRadius,a,i,n),d2(Number,s,"bottomRadius",r.bottomRadius,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(Number,s,"numberOfVerticalLines",r.numberOfVerticalLines,a,i,n),d2(Number,s,"slices",r.slices,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.ellipse;if(Object(o.a)(r)){var a=s2(r.interval),s=e.ellipse;Object(o.a)(s)||(e.ellipse=s=new aF),d2(Boolean,s,"show",r.show,a,i,n),d2(Number,s,"semiMajorAxis",r.semiMajorAxis,a,i,n),d2(Number,s,"semiMinorAxis",r.semiMinorAxis,a,i,n),d2(Number,s,"height",r.height,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Number,s,"extrudedHeight",r.extrudedHeight,a,i,n),d2(iP,s,"extrudedHeightReference",r.extrudedHeightReference,a,i,n),d2(h0,s,"rotation",r.rotation,a,i,n),d2(h0,s,"stRotation",r.stRotation,a,i,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(Number,s,"numberOfVerticalLines",r.numberOfVerticalLines,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(JM,s,"classificationType",r.classificationType,a,i,n),d2(Number,s,"zIndex",r.zIndex,a,i,n)}},function(e,t,n,i){var r=t.ellipsoid;if(Object(o.a)(r)){var a=s2(r.interval),s=e.ellipsoid;Object(o.a)(s)||(e.ellipsoid=s=new cF),d2(Boolean,s,"show",r.show,a,i,n),d2(O,s,"radii",r.radii,a,i,n),d2(O,s,"innerRadii",r.innerRadii,a,i,n),d2(Number,s,"minimumClock",r.minimumClock,a,i,n),d2(Number,s,"maximumClock",r.maximumClock,a,i,n),d2(Number,s,"minimumCone",r.minimumCone,a,i,n),d2(Number,s,"maximumCone",r.maximumCone,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(Number,s,"stackPartitions",r.stackPartitions,a,i,n),d2(Number,s,"slicePartitions",r.slicePartitions,a,i,n),d2(Number,s,"subdivisions",r.subdivisions,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.label;if(Object(o.a)(r)){var a=s2(r.interval),s=e.label;Object(o.a)(s)||(e.label=s=new uF),d2(Boolean,s,"show",r.show,a,i,n),d2(String,s,"text",r.text,a,i,n),d2(String,s,"font",r.font,a,i,n),d2(ZY,s,"style",r.style,a,i,n),d2(Number,s,"scale",r.scale,a,i,n),d2(Boolean,s,"showBackground",r.showBackground,a,i,n),d2(Hf,s,"backgroundColor",r.backgroundColor,a,i,n),d2(Mt,s,"backgroundPadding",r.backgroundPadding,a,i,n),d2(Mt,s,"pixelOffset",r.pixelOffset,a,i,n),d2(O,s,"eyeOffset",r.eyeOffset,a,i,n),d2(rP,s,"horizontalOrigin",r.horizontalOrigin,a,i,n),d2(oP,s,"verticalOrigin",r.verticalOrigin,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Hf,s,"fillColor",r.fillColor,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(JC,s,"translucencyByDistance",r.translucencyByDistance,a,i,n),d2(JC,s,"pixelOffsetScaleByDistance",r.pixelOffsetScaleByDistance,a,i,n),d2(JC,s,"scaleByDistance",r.scaleByDistance,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(Number,s,"disableDepthTestDistance",r.disableDepthTestDistance,a,i,n)}},function(e,t,n,i){var r=t.model;if(Object(o.a)(r)){var a,s,c=s2(r.interval),l=e.model;Object(o.a)(l)||(e.model=l=new bF),d2(Boolean,l,"show",r.show,c,i,n),d2(u_.a,l,"uri",r.gltf,c,i,n),d2(Number,l,"scale",r.scale,c,i,n),d2(Number,l,"minimumPixelSize",r.minimumPixelSize,c,i,n),d2(Number,l,"maximumScale",r.maximumScale,c,i,n),d2(Boolean,l,"incrementallyLoadTextures",r.incrementallyLoadTextures,c,i,n),d2(Boolean,l,"runAnimations",r.runAnimations,c,i,n),d2(Boolean,l,"clampAnimations",r.clampAnimations,c,i,n),d2(RR,l,"shadows",r.shadows,c,i,n),d2(iP,l,"heightReference",r.heightReference,c,i,n),d2(Hf,l,"silhouetteColor",r.silhouetteColor,c,i,n),d2(Number,l,"silhouetteSize",r.silhouetteSize,c,i,n),d2(Hf,l,"color",r.color,c,i,n),d2(hH,l,"colorBlendMode",r.colorBlendMode,c,i,n),d2(Number,l,"colorBlendAmount",r.colorBlendAmount,c,i,n),d2($_,l,"distanceDisplayCondition",r.distanceDisplayCondition,c,i,n);var u=r.nodeTransformations;if(Object(o.a)(u))if(Array.isArray(u))for(a=0,s=u.length;a<s;++a)T2(l,u[a],c,i,n);else T2(l,u,c,i,n);var h=r.articulations;if(Object(o.a)(h))if(Array.isArray(h))for(a=0,s=h.length;a<s;++a)S2(l,h[a],c,i,n);else S2(l,h,c,i,n)}},function(e,t,n,i){var r=t.name;Object(o.a)(r)&&(e.name=t.name)},function(e,t,n,i){var r=t.description;Object(o.a)(r)&&d2(String,e,"description",r,void 0,i,n)},function(e,t,n,i){var r=t.path;if(Object(o.a)(r)){var a=s2(r.interval),s=e.path;Object(o.a)(s)||(e.path=s=new CF),d2(Boolean,s,"show",r.show,a,i,n),d2(Number,s,"leadTime",r.leadTime,a,i,n),d2(Number,s,"trailTime",r.trailTime,a,i,n),d2(Number,s,"width",r.width,a,i,n),d2(Number,s,"resolution",r.resolution,a,i,n),v2(s,"material",r.material,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.point;if(Object(o.a)(r)){var a=s2(r.interval),s=e.point;Object(o.a)(s)||(e.point=s=new TF),d2(Boolean,s,"show",r.show,a,i,n),d2(Number,s,"pixelSize",r.pixelSize,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Hf,s,"color",r.color,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(JC,s,"scaleByDistance",r.scaleByDistance,a,i,n),d2(JC,s,"translucencyByDistance",r.translucencyByDistance,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(Number,s,"disableDepthTestDistance",r.disableDepthTestDistance,a,i,n)}},function(e,t,n,i){var r=t.polygon;if(Object(o.a)(r)){var a=s2(r.interval),s=e.polygon;Object(o.a)(s)||(e.polygon=s=new DF),d2(Boolean,s,"show",r.show,a,i,n),O2(s,"_positions",r.positions,n),function(e,t,n,i){if(Object(o.a)(n))if(Array.isArray(n))for(var r=0,a=n.length;r<a;++r)x2(e,t,n[r],i);else x2(e,t,n,i)}(s,"_holes",r.holes,n),(Object(o.a)(s._positions)||Object(o.a)(s._holes))&&(s.hierarchy=new D2(s)),d2(Number,s,"height",r.height,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Number,s,"extrudedHeight",r.extrudedHeight,a,i,n),d2(iP,s,"extrudedHeightReference",r.extrudedHeightReference,a,i,n),d2(h0,s,"stRotation",r.stRotation,a,i,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(Boolean,s,"perPositionHeight",r.perPositionHeight,a,i,n),d2(Boolean,s,"closeTop",r.closeTop,a,i,n),d2(Boolean,s,"closeBottom",r.closeBottom,a,i,n),d2(tl,s,"arcType",r.arcType,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(JM,s,"classificationType",r.classificationType,a,i,n),d2(Number,s,"zIndex",r.zIndex,a,i,n)}},function(e,t,n,i){var r=t.polyline;if(Object(o.a)(r)){var a,s,c=s2(r.interval),l=e.polyline;if(Object(o.a)(l)||(e.polyline=l=new IF),d2(Boolean,l,"show",r.show,c,i,n),O2(l,"positions",r.positions,n),d2(Number,l,"width",r.width,c,i,n),d2(Number,l,"granularity",r.granularity,c,i,n),v2(l,"material",r.material,c,i,n),v2(l,"depthFailMaterial",r.depthFailMaterial,c,i,n),d2(tl,l,"arcType",r.arcType,c,i,n),d2(Boolean,l,"clampToGround",r.clampToGround,c,i,n),d2(RR,l,"shadows",r.shadows,c,i,n),d2($_,l,"distanceDisplayCondition",r.distanceDisplayCondition,c,i,n),d2(JM,l,"classificationType",r.classificationType,c,i,n),d2(Number,l,"zIndex",r.zIndex,c,i,n),Object(o.a)(r.followSurface)&&!Object(o.a)(r.arcType)){var u={};d2(Boolean,u,"followSurface",r.followSurface,c,i,n),l.arcType=(s=P2,new oN((function(e,t){return s(a.getValue(e,t))}),(a=u.followSurface).isConstant))}}},function(e,t,n,i){var r=t.polylineVolume;if(Object(o.a)(r)){var a=s2(r.interval),s=e.polylineVolume;Object(o.a)(s)||(e.polylineVolume=s=new RF),O2(s,"positions",r.positions,n),function(e,t,n,i){if(Object(o.a)(n))if(Array.isArray(n))for(var r=0,a=n.length;r<a;r++)m2(e,t,n[r],i);else m2(e,t,n,i)}(s,"shape",r.shape,n),d2(Boolean,s,"show",r.show,a,i,n),d2(Wm,s,"cornerType",r.cornerType,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.properties;if(Object(o.a)(r))for(var a in Object(o.a)(e.properties)||(e.properties=new gF),r)if(r.hasOwnProperty(a)){e.properties.hasProperty(a)||e.properties.addProperty(a);var s=r[a];if(Array.isArray(s))for(var c=0,l=s.length;c<l;++c)h2(n2(s[c]),e.properties,a,s[c],void 0,i,n);else h2(n2(s),e.properties,a,s,void 0,i,n)}},function(e,t,n,i){var r=t.rectangle;if(Object(o.a)(r)){var a=s2(r.interval),s=e.rectangle;Object(o.a)(s)||(e.rectangle=s=new jF),d2(Boolean,s,"show",r.show,a,i,n),d2(Se,s,"coordinates",r.coordinates,a,i,n),d2(Number,s,"height",r.height,a,i,n),d2(iP,s,"heightReference",r.heightReference,a,i,n),d2(Number,s,"extrudedHeight",r.extrudedHeight,a,i,n),d2(iP,s,"extrudedHeightReference",r.extrudedHeightReference,a,i,n),d2(h0,s,"rotation",r.rotation,a,i,n),d2(h0,s,"stRotation",r.stRotation,a,i,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n),d2(JM,s,"classificationType",r.classificationType,a,i,n),d2(Number,s,"zIndex",r.zIndex,a,i,n)}},function(e,t,n,i){var r=t.position;Object(o.a)(r)&&p2(e,"position",r,void 0,0,n)},function(e,t,n,i){var r=t.tileset;if(Object(o.a)(r)){var a=s2(r.interval),s=e.tileset;Object(o.a)(s)||(e.tileset=s=new wF),d2(Boolean,s,"show",r.show,a,i,n),d2(u_.a,s,"uri",r.uri,a,i,n),d2(Number,s,"maximumScreenSpaceError",r.maximumScreenSpaceError,a,i,n)}},function(e,t,n,i){var r=t.viewFrom;Object(o.a)(r)&&d2(O,e,"viewFrom",r,void 0,i,n)},function(e,t,n,i){var r=t.wall;if(Object(o.a)(r)){var a=s2(r.interval),s=e.wall;Object(o.a)(s)||(e.wall=s=new zF),d2(Boolean,s,"show",r.show,a,i,n),O2(s,"positions",r.positions,n),y2(s,"minimumHeights",r.minimumHeights,n),y2(s,"maximumHeights",r.maximumHeights,n),d2(Number,s,"granularity",r.granularity,a,i,n),d2(Boolean,s,"fill",r.fill,a,i,n),v2(s,"material",r.material,a,i,n),d2(Boolean,s,"outline",r.outline,a,i,n),d2(Hf,s,"outlineColor",r.outlineColor,a,i,n),d2(Number,s,"outlineWidth",r.outlineWidth,a,i,n),d2(RR,s,"shadows",r.shadows,a,i,n),d2($_,s,"distanceDisplayCondition",r.distanceDisplayCondition,a,i,n)}},function(e,t,n,i){var r=t.orientation;Object(o.a)(r)&&d2(No,e,"orientation",r,void 0,i,n)},function(e,t,n,i){var r=t.availability;if(Object(o.a)(r)){var a;if(Array.isArray(r))for(var s=0,c=r.length;s<c;++s)Object(o.a)(a)||(a=new lD),a.addInterval(s2(r[s]));else(a=new lD).addInterval(s2(r));e.availability=a}}],L2.prototype.process=function(e,t){return M2(this,e,t,!1)},L2.prototype.load=function(e,t){return M2(this,e,t,!0)},L2.prototype.update=function(e){return!0},L2.processPacketData=d2,L2.processPositionPacketData=p2,L2.processMaterialPacketData=v2,L2._processCzml=function(e,t,n,i,o){if(i=Object(r.a)(i,L2.updaters),Array.isArray(e))for(var a=0,s=e.length;a<s;++a)I2(e[a],t,i,n,o);else I2(e,t,i,n,o)};function j2(){this._dataSources=[],this._dataSourceAdded=new wn.a,this._dataSourceRemoved=new wn.a,this._dataSourceMoved=new wn.a}function F2(e,t){if(!Object(o.a)(t))throw new a.a("dataSource is required.");var n=e.indexOf(t);if(-1===n)throw new a.a("dataSource is not in this collection.");return n}function N2(e,t,n){var i=e._dataSources,r=i.length-1;if((t=d.clamp(t,0,r))!==(n=d.clamp(n,0,r))){var o=i[t];i[t]=i[n],i[n]=o,e.dataSourceMoved.raiseEvent(o,n,t)}}Object.defineProperties(j2.prototype,{length:{get:function(){return this._dataSources.length}},dataSourceAdded:{get:function(){return this._dataSourceAdded}},dataSourceRemoved:{get:function(){return this._dataSourceRemoved}},dataSourceMoved:{get:function(){return this._dataSourceMoved}}}),j2.prototype.add=function(e){if(!Object(o.a)(e))throw new a.a("dataSource is required.");var t=this,n=this._dataSources;return Object(Yt.a)(e,(function(e){return n===t._dataSources&&(t._dataSources.push(e),t._dataSourceAdded.raiseEvent(t,e)),e}))},j2.prototype.remove=function(e,t){t=Object(r.a)(t,!1);var n=this._dataSources.indexOf(e);return-1!==n&&(this._dataSources.splice(n,1),this._dataSourceRemoved.raiseEvent(this,e),t&&"function"===typeof e.destroy&&e.destroy(),!0)},j2.prototype.removeAll=function(e){e=Object(r.a)(e,!1);for(var t=this._dataSources,n=0,i=t.length;n<i;++n){var o=t[n];this._dataSourceRemoved.raiseEvent(this,o),e&&"function"===typeof o.destroy&&o.destroy()}this._dataSources=[]},j2.prototype.contains=function(e){return-1!==this.indexOf(e)},j2.prototype.indexOf=function(e){return this._dataSources.indexOf(e)},j2.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._dataSources[e]},j2.prototype.getByName=function(e){if(!Object(o.a)(e))throw new a.a("name is required.");return this._dataSources.filter((function(t){return t.name===e}))},j2.prototype.raise=function(e){var t=F2(this._dataSources,e);N2(this,t,t+1)},j2.prototype.lower=function(e){var t=F2(this._dataSources,e);N2(this,t,t-1)},j2.prototype.raiseToTop=function(e){var t=F2(this._dataSources,e);t!==this._dataSources.length-1&&(this._dataSources.splice(t,1),this._dataSources.push(e),this.dataSourceMoved.raiseEvent(e,this._dataSources.length-1,t))},j2.prototype.lowerToBottom=function(e){var t=F2(this._dataSources,e);0!==t&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))},j2.prototype.isDestroyed=function(){return!1},j2.prototype.destroy=function(){return this.removeAll(!0),Ks(this)};var z2=j2;function k2(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._primitives=[],this._guid=l_(),this._zIndex=void 0,this.show=Object(r.a)(e.show,!0),this.destroyPrimitives=Object(r.a)(e.destroyPrimitives,!0)}function B2(e,t){if(!e.contains(t))throw new a.a("primitive is not in this collection.");return e._primitives.indexOf(t)}Object.defineProperties(k2.prototype,{length:{get:function(){return this._primitives.length}}}),k2.prototype.add=function(e,t){var n=Object(o.a)(t);if(!Object(o.a)(e))throw new a.a("primitive is required.");if(n){if(t<0)throw new a.a("index must be greater than or equal to zero.");if(t>this._primitives.length)throw new a.a("index must be less than or equal to the number of primitives.")}var i=e._external=e._external||{};return(i._composites=i._composites||{})[this._guid]={collection:this},n?this._primitives.splice(t,0,e):this._primitives.push(e),e},k2.prototype.remove=function(e){if(this.contains(e)){var t=this._primitives.indexOf(e);if(-1!==t)return this._primitives.splice(t,1),delete e._external._composites[this._guid],this.destroyPrimitives&&e.destroy(),!0}return!1},k2.prototype.removeAndDestroy=function(e){var t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t},k2.prototype.removeAll=function(){for(var e=this._primitives,t=e.length,n=0;n<t;++n)delete e[n]._external._composites[this._guid],this.destroyPrimitives&&e[n].destroy();this._primitives=[]},k2.prototype.contains=function(e){return!!(Object(o.a)(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])},k2.prototype.raise=function(e){if(Object(o.a)(e)){var t=B2(this,e),n=this._primitives;if(t!==n.length-1){var i=n[t];n[t]=n[t+1],n[t+1]=i}}},k2.prototype.raiseToTop=function(e){if(Object(o.a)(e)){var t=B2(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}},k2.prototype.lower=function(e){if(Object(o.a)(e)){var t=B2(this,e),n=this._primitives;if(0!==t){var i=n[t];n[t]=n[t-1],n[t-1]=i}}},k2.prototype.lowerToBottom=function(e){if(Object(o.a)(e)){var t=B2(this,e),n=this._primitives;0!==t&&(n.splice(t,1),n.unshift(e))}},k2.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._primitives[e]},k2.prototype.update=function(e){if(this.show)for(var t=this._primitives,n=0;n<t.length;++n)t[n].update(e)},k2.prototype.prePassesUpdate=function(e){for(var t=this._primitives,n=0;n<t.length;++n){var i=t[n];Object(o.a)(i.prePassesUpdate)&&i.prePassesUpdate(e)}},k2.prototype.updateForPass=function(e,t){for(var n=this._primitives,i=0;i<n.length;++i){var r=n[i];Object(o.a)(r.updateForPass)&&r.updateForPass(e,t)}},k2.prototype.postPassesUpdate=function(e){for(var t=this._primitives,n=0;n<t.length;++n){var i=t[n];Object(o.a)(i.postPassesUpdate)&&i.postPassesUpdate(e)}},k2.prototype.isDestroyed=function(){return!1},k2.prototype.destroy=function(){return this.removeAll(),Ks(this)};var H2=k2;function V2(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(V2.prototype,{length:{get:function(){return this._length}}}),V2.prototype.add=function(e,t){i.a.defined("primitive",e),Object(o.a)(t)&&i.a.typeOf.number("zIndex",t),t=Object(r.a)(t,0);var n=this._collections[t];if(!Object(o.a)(n)){(n=new H2({destroyPrimitives:!1}))._zIndex=t,this._collections[t]=n;for(var a=this._collectionsArray,s=0;s<a.length&&a[s]._zIndex<t;)s++;a.splice(s,0,n)}return n.add(e),this._length++,e._zIndex=t,e},V2.prototype.set=function(e,t){return i.a.defined("primitive",e),i.a.typeOf.number("zIndex",t),t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e},V2.prototype.remove=function(e,t){if(this.contains(e)){var n,i=e._zIndex,r=this._collections[i];return(n=t?r.remove(e):r.removeAndDestroy(e))&&this._length--,0===r.length&&(this._collectionsArray.splice(this._collectionsArray.indexOf(r),1),this._collections[i]=void 0,r.destroy()),n}return!1},V2.prototype.removeAll=function(){for(var e=this._collectionsArray,t=0;t<e.length;t++){var n=e[t];n.destroyPrimitives=!0,n.destroy()}this._collections={},this._collectionsArray=[],this._length=0},V2.prototype.contains=function(e){if(!Object(o.a)(e))return!1;var t=this._collections[e._zIndex];return Object(o.a)(t)&&t.contains(e)},V2.prototype.update=function(e){if(this.show)for(var t=this._collectionsArray,n=0;n<t.length;n++)t[n].update(e)},V2.prototype.isDestroyed=function(){return!1},V2.prototype.destroy=function(){return this.removeAll(),Ks(this)};var U2=V2;function W2(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new sl}W2.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))},W2.prototype.remove=function(e){var t=e.id,n=this._dynamicUpdaters.get(t);Object(o.a)(n)&&(this._dynamicUpdaters.remove(t),n.destroy())},W2.prototype.update=function(e){for(var t=this._dynamicUpdaters.values,n=0,i=t.length;n<i;n++)t[n].update(e);return!0},W2.prototype.removeAllPrimitives=function(){for(var e=this._dynamicUpdaters.values,t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()},W2.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),Object(o.a)(e)&&Object(o.a)(e.getBoundingSphere)?e.getBoundingSphere(t):aP.FAILED};var G2=W2,q2=new Hf,Y2=O.ZERO,$2=new O,X2=new Se;function K2(e){this.id=e,this.vertexFormat=void 0,this.center=void 0,this.semiMajorAxis=void 0,this.semiMinorAxis=void 0,this.rotation=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function Q2(e,t){oJ.call(this,{entity:e,scene:t,geometryOptions:new K2(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}function Z2(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(Q2.prototype=Object.create(oJ.prototype),Q2.prototype.constructor=Q2),Q2.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,r=n.isAvailable(e),s={show:new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:K_.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||r)&&(t=this._materialProperty.color.getValue(e,q2)),Object(o.a)(t)||(t=Hf.WHITE),s.color=Uf.fromColor(t));return Object(o.a)(this._options.offsetAttribute)&&(s.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,Y2,$2))),new fh({id:n,geometry:new uf(this._options),attributes:s})},Q2.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,q2),s=this._distanceDisplayConditionProperty.getValue(e),c={show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(s),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(c.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,Y2,$2))),new fh({id:t,geometry:new Of(this._options),attributes:c})},Q2.prototype._computeCenter=function(e,t){return cP.getValueOrUndefined(this._entity.position,e,t)},Q2.prototype._isHidden=function(e,t){var n=e.position;return!Object(o.a)(n)||!Object(o.a)(t.semiMajorAxis)||!Object(o.a)(t.semiMinorAxis)||iN.prototype._isHidden.call(this,e,t)},Q2.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!cP.isConstant(t.rotation)||!cP.isConstant(t.height)||!cP.isConstant(t.extrudedHeight)||!cP.isConstant(t.granularity)||!cP.isConstant(t.stRotation)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.numberOfVerticalLines)||!cP.isConstant(t.zIndex)||this._onTerrain&&!cP.isConstant(this._materialProperty)&&!(this._materialProperty instanceof wI)},Q2.prototype._setStaticOptions=function(e,t){var n=cP.getValueOrUndefined(t.height,EC.MINIMUM_VALUE),i=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),r=cP.getValueOrUndefined(t.extrudedHeight,EC.MINIMUM_VALUE),a=cP.getValueOrDefault(t.extrudedHeightReference,EC.MINIMUM_VALUE,iP.NONE);Object(o.a)(r)&&!Object(o.a)(n)&&(n=0);var s=this._options;s.vertexFormat=this._materialProperty instanceof wI?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(EC.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(EC.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(EC.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=cP.getValueOrUndefined(t.rotation,EC.MINIMUM_VALUE),s.granularity=cP.getValueOrUndefined(t.granularity,EC.MINIMUM_VALUE),s.stRotation=cP.getValueOrUndefined(t.stRotation,EC.MINIMUM_VALUE),s.numberOfVerticalLines=cP.getValueOrUndefined(t.numberOfVerticalLines,EC.MINIMUM_VALUE),s.offsetAttribute=oJ.computeGeometryOffsetAttribute(n,i,r,a),s.height=oJ.getGeometryHeight(n,i),(r=oJ.getGeometryExtrudedHeight(r,a))===oJ.CLAMP_TO_GROUND&&(r=qt.getMinimumMaximumHeights(uf.computeRectangle(s,X2)).minimumTerrainHeight),s.extrudedHeight=r},Q2.DynamicGeometryUpdater=Z2,Object(o.a)(Object.create)&&(Z2.prototype=Object.create(Tj.prototype),Z2.prototype.constructor=Z2),Z2.prototype._isHidden=function(e,t,n){var i=this._options;return!Object(o.a)(i.center)||!Object(o.a)(i.semiMajorAxis)||!Object(o.a)(i.semiMinorAxis)||Tj.prototype._isHidden.call(this,e,t,n)},Z2.prototype._setOptions=function(e,t,n){var i=this._options,r=cP.getValueOrUndefined(t.height,n),a=cP.getValueOrDefault(t.heightReference,n,iP.NONE),s=cP.getValueOrUndefined(t.extrudedHeight,n),c=cP.getValueOrDefault(t.extrudedHeightReference,n,iP.NONE);Object(o.a)(s)&&!Object(o.a)(r)&&(r=0),i.center=cP.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=cP.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=cP.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=cP.getValueOrUndefined(t.rotation,n),i.granularity=cP.getValueOrUndefined(t.granularity,n),i.stRotation=cP.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=cP.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=oJ.computeGeometryOffsetAttribute(r,a,s,c),i.height=oJ.getGeometryHeight(r,a),(s=oJ.getGeometryExtrudedHeight(s,c))===oJ.CLAMP_TO_GROUND&&(s=qt.getMinimumMaximumHeights(uf.computeRectangle(i,X2)).minimumTerrainHeight),i.extrudedHeight=s};var J2=Q2,e5=new wI(Hf.WHITE),t5=O.ZERO,n5=new O,i5=new O,r5=new O,o5=new Hf,a5=new O(1,1,1);function s5(e){this.id=e,this.vertexFormat=void 0,this.radii=void 0,this.innerRadii=void 0,this.minimumClock=void 0,this.maximumClock=void 0,this.minimumCone=void 0,this.maximumCone=void 0,this.stackPartitions=void 0,this.slicePartitions=void 0,this.subdivisions=void 0,this.offsetAttribute=void 0}function c5(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new s5(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}function l5(e,t,n){Tj.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new Ae,this._attributes=void 0,this._outlineAttributes=void 0,this._lastSceneMode=void 0,this._lastShow=void 0,this._lastOutlineShow=void 0,this._lastOutlineWidth=void 0,this._lastOutlineColor=void 0,this._lastOffset=new O,this._material={}}Object(o.a)(Object.create)&&(c5.prototype=Object.create(iN.prototype),c5.prototype.constructor=c5),Object.defineProperties(c5.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}}),c5.prototype.createFillGeometryInstance=function(e,t,n){i.a.defined("time",e);var r,a,s=this._entity,c=s.isAvailable(e),l=new bS(c&&s.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),u=this._distanceDisplayConditionProperty.getValue(e),h={show:l,distanceDisplayCondition:K_.fromDistanceDisplayCondition(u),color:void 0,offset:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||c)&&(a=this._materialProperty.color.getValue(e,o5)),Object(o.a)(a)||(a=Hf.WHITE),r=Uf.fromColor(a),h.color=r);return Object(o.a)(this._options.offsetAttribute)&&(h.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,t5,n5))),new fh({id:s,geometry:new bb(this._options),modelMatrix:t?void 0:s.computeModelMatrixForHeightReference(e,s.ellipsoid.heightReference,.5*this._options.radii.z,this._scene.mapProjection.ellipsoid,n),attributes:h})},c5.prototype.createOutlineGeometryInstance=function(e,t,n){i.a.defined("time",e);var r=this._entity,a=r.isAvailable(e),s=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,o5),c=this._distanceDisplayConditionProperty.getValue(e),l={show:new bS(a&&r.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(s),distanceDisplayCondition:K_.fromDistanceDisplayCondition(c),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(l.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,t5,n5))),new fh({id:r,geometry:new Tb(this._options),modelMatrix:t?void 0:r.computeModelMatrixForHeightReference(e,r.ellipsoid.heightReference,.5*this._options.radii.z,this._scene.mapProjection.ellipsoid,n),attributes:l})},c5.prototype._computeCenter=function(e,t){return cP.getValueOrUndefined(this._entity.position,e,t)},c5.prototype._isHidden=function(e,t){return!Object(o.a)(e.position)||!Object(o.a)(t.radii)||iN.prototype._isHidden.call(this,e,t)},c5.prototype._isDynamic=function(e,t){return!e.position.isConstant||!cP.isConstant(e.orientation)||!t.radii.isConstant||!cP.isConstant(t.innerRadii)||!cP.isConstant(t.stackPartitions)||!cP.isConstant(t.slicePartitions)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.minimumClock)||!cP.isConstant(t.maximumClock)||!cP.isConstant(t.minimumCone)||!cP.isConstant(t.maximumCone)||!cP.isConstant(t.subdivisions)},c5.prototype._setStaticOptions=function(e,t){var n=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof wI?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(EC.MINIMUM_VALUE,i.radii),i.innerRadii=cP.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=cP.getValueOrUndefined(t.minimumClock,EC.MINIMUM_VALUE),i.maximumClock=cP.getValueOrUndefined(t.maximumClock,EC.MINIMUM_VALUE),i.minimumCone=cP.getValueOrUndefined(t.minimumCone,EC.MINIMUM_VALUE),i.maximumCone=cP.getValueOrUndefined(t.maximumCone,EC.MINIMUM_VALUE),i.stackPartitions=cP.getValueOrUndefined(t.stackPartitions,EC.MINIMUM_VALUE),i.slicePartitions=cP.getValueOrUndefined(t.slicePartitions,EC.MINIMUM_VALUE),i.subdivisions=cP.getValueOrUndefined(t.subdivisions,EC.MINIMUM_VALUE),i.offsetAttribute=n!==iP.NONE?Hl.ALL:void 0},c5.prototype._onEntityPropertyChanged=uN,c5.DynamicGeometryUpdater=l5,Object(o.a)(Object.create)&&(l5.prototype=Object.create(Tj.prototype),l5.prototype.constructor=l5),l5.prototype.update=function(e){i.a.defined("time",e);var t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!cP.getValueOrDefault(n.show,e,!0))return Object(o.a)(this._primitive)&&(this._primitive.show=!1),void(Object(o.a)(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1));var a=cP.getValueOrUndefined(n.radii,e,i5),s=Object(o.a)(a)?t.computeModelMatrixForHeightReference(e,n.heightReference,.5*a.z,this._scene.mapProjection.ellipsoid,this._modelMatrix):void 0;if(!Object(o.a)(s)||!Object(o.a)(a))return Object(o.a)(this._primitive)&&(this._primitive.show=!1),void(Object(o.a)(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1));var c=cP.getValueOrDefault(n.fill,e,!0),l=cP.getValueOrDefault(n.outline,e,!1),u=cP.getValueOrClonedDefault(n.outlineColor,e,Hf.BLACK,o5),h=Aj.getValue(e,Object(r.a)(n.material,e5),this._material),d=cP.getValueOrUndefined(n.innerRadii,e,r5),f=cP.getValueOrUndefined(n.minimumClock,e),p=cP.getValueOrUndefined(n.maximumClock,e),m=cP.getValueOrUndefined(n.minimumCone,e),g=cP.getValueOrUndefined(n.maximumCone,e),v=cP.getValueOrUndefined(n.stackPartitions,e),_=cP.getValueOrUndefined(n.slicePartitions,e),b=cP.getValueOrUndefined(n.subdivisions,e),y=cP.getValueOrDefault(n.outlineWidth,e,1),w=cP.getValueOrDefault(n.heightReference,e,iP.NONE),C=w!==iP.NONE?Hl.ALL:void 0,E=this._scene.mode,A=E===IR.SCENE3D&&w===iP.NONE,x=this._options,T=this._geometryUpdater.shadowsProperty.getValue(e),S=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),D=cP.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,t5,n5);if(!A||this._lastSceneMode!==E||!Object(o.a)(this._primitive)||x.stackPartitions!==v||x.slicePartitions!==_||Object(o.a)(d)&&!O.equals(x.innerRadii!==d)||x.minimumClock!==f||x.maximumClock!==p||x.minimumCone!==m||x.maximumCone!==g||x.subdivisions!==b||this._lastOutlineWidth!==y||x.offsetAttribute!==C){var P=this._primitives;if(P.removeAndDestroy(this._primitive),P.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=E,this._lastOutlineWidth=y,x.stackPartitions=v,x.slicePartitions=_,x.subdivisions=b,x.offsetAttribute=C,x.radii=O.clone(A?a5:a,x.radii),Object(o.a)(d))if(A){var I=O.magnitude(a);x.innerRadii=O.fromElements(d.x/I,d.y/I,d.z/I,x.innerRadii)}else x.innerRadii=O.clone(d,x.innerRadii);else x.innerRadii=void 0;x.minimumClock=f,x.maximumClock=p,x.minimumCone=m,x.maximumCone=g;var M=new vI({material:h,translucent:h.isTranslucent(),closed:!0});x.vertexFormat=M.vertexFormat;var R=this._geometryUpdater.createFillGeometryInstance(e,A,this._modelMatrix);this._primitive=P.add(new bL({geometryInstances:R,appearance:M,asynchronous:!1,shadows:T}));var L=this._geometryUpdater.createOutlineGeometryInstance(e,A,this._modelMatrix);this._outlinePrimitive=P.add(new bL({geometryInstances:L,appearance:new bI({flat:!0,translucent:255!==L.attributes.color.value[3],renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(y)}}),asynchronous:!1,shadows:T})),this._lastShow=c,this._lastOutlineShow=l,this._lastOutlineColor=Hf.clone(u,this._lastOutlineColor),this._lastDistanceDisplayCondition=S,this._lastOffset=O.clone(D,this._lastOffset)}else if(this._primitive.ready){var j=this._primitive,F=this._outlinePrimitive;j.show=!0,F.show=!0,j.appearance.material=h;var N=this._attributes;Object(o.a)(N)||(N=j.getGeometryInstanceAttributes(t),this._attributes=N),c!==this._lastShow&&(N.show=bS.toValue(c,N.show),this._lastShow=c);var z=this._outlineAttributes;Object(o.a)(z)||(z=F.getGeometryInstanceAttributes(t),this._outlineAttributes=z),l!==this._lastOutlineShow&&(z.show=bS.toValue(l,z.show),this._lastOutlineShow=l),Hf.equals(u,this._lastOutlineColor)||(z.color=Uf.toValue(u,z.color),Hf.clone(u,this._lastOutlineColor)),$_.equals(S,this._lastDistanceDisplayCondition)||(N.distanceDisplayCondition=K_.toValue(S,N.distanceDisplayCondition),z.distanceDisplayCondition=K_.toValue(S,z.distanceDisplayCondition),$_.clone(S,this._lastDistanceDisplayCondition)),O.equals(D,this._lastOffset)||(N.offset=vE.toValue(D,N.offset),z.offset=vE.toValue(D,N.offset),O.clone(D,this._lastOffset))}A&&(a.x=Math.max(a.x,.001),a.y=Math.max(a.y,.001),a.z=Math.max(a.z,.001),s=Ae.multiplyByScale(s,a,s),this._primitive.modelMatrix=s,this._outlinePrimitive.modelMatrix=s)};var u5=c5,h5=new O,d5=new Hf;function f5(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function p5(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new f5(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}function m5(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(p5.prototype=Object.create(iN.prototype),p5.prototype.constructor=p5),p5.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n,r=this._entity,s=r.isAvailable(e),c=new bS(s&&r.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),l=this._distanceDisplayConditionProperty.getValue(e),u=K_.fromDistanceDisplayCondition(l);this._materialProperty instanceof wI?(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||s)&&(n=this._materialProperty.color.getValue(e,d5)),Object(o.a)(n)||(n=Hf.WHITE),t={show:c,distanceDisplayCondition:u,color:Uf.fromColor(n)}):t={show:c,distanceDisplayCondition:u};var h=r.plane,d=this._options,f=r.computeModelMatrix(e),p=cP.getValueOrDefault(h.plane,e,d.plane),m=cP.getValueOrUndefined(h.dimensions,e,d.dimensions);return d.plane=p,d.dimensions=m,f=C5(p,m,f,this._scene.mapProjection.ellipsoid,f),new fh({id:r,geometry:new LE(this._options),modelMatrix:f,attributes:t})},p5.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,d5),o=this._distanceDisplayConditionProperty.getValue(e),s=t.plane,c=this._options,l=t.computeModelMatrix(e),u=cP.getValueOrDefault(s.plane,e,c.plane),h=cP.getValueOrUndefined(s.dimensions,e,c.dimensions);return c.plane=u,c.dimensions=h,l=C5(u,h,l,this._scene.mapProjection.ellipsoid,l),new fh({id:t,geometry:new zE,modelMatrix:l,attributes:{show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(o)}})},p5.prototype._isHidden=function(e,t){return!Object(o.a)(t.plane)||!Object(o.a)(t.dimensions)||!Object(o.a)(e.position)||iN.prototype._isHidden.call(this,e,t)},p5.prototype._getIsClosed=function(e){return!1},p5.prototype._isDynamic=function(e,t){return!e.position.isConstant||!cP.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!cP.isConstant(t.outlineWidth)},p5.prototype._setStaticOptions=function(e,t){var n=this._materialProperty instanceof wI,i=this._options;i.vertexFormat=n?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(EC.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(EC.MINIMUM_VALUE,i.dimensions)},p5.DynamicGeometryUpdater=m5,Object(o.a)(Object.create)&&(m5.prototype=Object.create(Tj.prototype),m5.prototype.constructor=m5),m5.prototype._isHidden=function(e,t,n){var i=this._options,r=cP.getValueOrUndefined(e.position,n,h5);return!Object(o.a)(r)||!Object(o.a)(i.plane)||!Object(o.a)(i.dimensions)||Tj.prototype._isHidden.call(this,e,t,n)},m5.prototype._setOptions=function(e,t,n){var i=this._options;i.plane=cP.getValueOrDefault(t.plane,n,i.plane),i.dimensions=cP.getValueOrUndefined(t.dimensions,n,i.dimensions)};var g5=new O,v5=new O,_5=new O,b5=new O,y5=new O,w5=new No,O5=new oe;function C5(e,t,n,i,r){var o=e.normal,a=e.distance,s=O.multiplyByScalar(o,-a,_5);s=Ae.multiplyByPoint(n,s,s);var c=Ae.multiplyByPointAsVector(n,o,b5);O.normalize(c,c);var l=i.geodeticSurfaceNormal(s,v5);d.equalsEpsilon(Math.abs(O.dot(l,c)),1,d.EPSILON8)&&(l=O.clone(O.UNIT_Z,l),d.equalsEpsilon(Math.abs(O.dot(l,c)),1,d.EPSILON8)&&(l=O.clone(O.UNIT_X,l)));var u=O.cross(l,c,g5);l=O.cross(c,u,l),O.normalize(u,u),O.normalize(l,l);var h=O5;oe.setColumn(h,0,u,h),oe.setColumn(h,1,l,h),oe.setColumn(h,2,c,h);var f=No.fromRotationMatrix(h,w5),p=Mt.clone(t,y5);return p.z=1,Ae.fromTranslationQuaternionRotationScale(s,f,p,r)}p5.createPrimitiveMatrix=C5;var E5=p5,A5=new Hf,x5=O.ZERO,T5=new O,S5=new Se,D5=[],P5=new Mt;function I5(e){this.id=e,this.vertexFormat=void 0,this.polygonHierarchy=void 0,this.perPositionHeight=void 0,this.closeTop=void 0,this.closeBottom=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.offsetAttribute=void 0,this.arcType=void 0}function M5(e,t){oJ.call(this,{entity:e,scene:t,geometryOptions:new I5(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}function R5(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(M5.prototype=Object.create(oJ.prototype),M5.prototype.constructor=M5),M5.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n,r=this._entity,s=r.isAvailable(e),c=this._options,l={show:new bS(s&&r.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:K_.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||s)&&(t=this._materialProperty.color.getValue(e,A5)),Object(o.a)(t)||(t=Hf.WHITE),l.color=Uf.fromColor(t));return Object(o.a)(c.offsetAttribute)&&(l.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,x5,T5))),n=c.perPositionHeight&&!Object(o.a)(c.extrudedHeight)?new km(c):new _A(c),new fh({id:r,geometry:n,attributes:l})},M5.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t,n=this._entity,r=n.isAvailable(e),s=this._options,c=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,A5),l=this._distanceDisplayConditionProperty.getValue(e),u={show:new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(c),distanceDisplayCondition:K_.fromDistanceDisplayCondition(l),offset:void 0};return Object(o.a)(s.offsetAttribute)&&(u.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,x5,T5))),t=s.perPositionHeight&&!Object(o.a)(s.extrudedHeight)?new Um(s):new TA(s),new fh({id:n,geometry:t,attributes:u})},M5.prototype._computeCenter=function(e,t){var n=cP.getValueOrUndefined(this._entity.polygon.hierarchy,e);if(Object(o.a)(n)){var i=n.positions;if(0!==i.length){for(var r=this._scene.mapProjection.ellipsoid,a=Ta.fromPoints(i,r),s=a.projectPointsOntoPlane(i,D5),c=s.length,l=0,u=c-1,h=new Mt,d=0;d<c;u=d++){var f=s[d],p=s[u],m=f.x*p.y-p.x*f.y,g=Mt.add(f,p,P5);g=Mt.multiplyByScalar(g,m,g),h=Mt.add(h,g,h),l+=m}var v=1/(3*l);return h=Mt.multiplyByScalar(h,v,h),a.projectPointOntoEllipsoid(h,t)}}},M5.prototype._isHidden=function(e,t){return!Object(o.a)(t.hierarchy)||iN.prototype._isHidden.call(this,e,t)},M5.prototype._isOnTerrain=function(e,t){var n=oJ.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,r=Object(o.a)(i)&&(!i.isConstant||i.getValue(EC.MINIMUM_VALUE));return n&&!r},M5.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!cP.isConstant(t.height)||!cP.isConstant(t.extrudedHeight)||!cP.isConstant(t.granularity)||!cP.isConstant(t.stRotation)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.perPositionHeight)||!cP.isConstant(t.closeTop)||!cP.isConstant(t.closeBottom)||!cP.isConstant(t.zIndex)||!cP.isConstant(t.arcType)||this._onTerrain&&!cP.isConstant(this._materialProperty)&&!(this._materialProperty instanceof wI)},M5.prototype._setStaticOptions=function(e,t){var n=this._materialProperty instanceof wI,i=this._options;i.vertexFormat=n?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat;var r,a=t.hierarchy.getValue(EC.MINIMUM_VALUE),s=cP.getValueOrUndefined(t.height,EC.MINIMUM_VALUE),c=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),l=cP.getValueOrUndefined(t.extrudedHeight,EC.MINIMUM_VALUE),u=cP.getValueOrDefault(t.extrudedHeightReference,EC.MINIMUM_VALUE,iP.NONE),h=cP.getValueOrDefault(t.perPositionHeight,EC.MINIMUM_VALUE,!1);s=oJ.getGeometryHeight(s,c),h?(Object(o.a)(s)&&(s=void 0,G_("Entity polygons cannot have both height and perPositionHeight. height will be ignored")),c!==iP.NONE&&h&&(s=void 0,G_("heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored"))):(Object(o.a)(l)&&!Object(o.a)(s)&&(s=0),r=oJ.computeGeometryOffsetAttribute(s,c,l,u)),i.polygonHierarchy=a,i.granularity=cP.getValueOrUndefined(t.granularity,EC.MINIMUM_VALUE),i.stRotation=cP.getValueOrUndefined(t.stRotation,EC.MINIMUM_VALUE),i.perPositionHeight=h,i.closeTop=cP.getValueOrDefault(t.closeTop,EC.MINIMUM_VALUE,!0),i.closeBottom=cP.getValueOrDefault(t.closeBottom,EC.MINIMUM_VALUE,!0),i.offsetAttribute=r,i.height=s,i.arcType=cP.getValueOrDefault(t.arcType,EC.MINIMUM_VALUE,tl.GEODESIC),(l=oJ.getGeometryExtrudedHeight(l,u))===oJ.CLAMP_TO_GROUND&&(l=qt.getMinimumMaximumHeights(_A.computeRectangle(i,S5)).minimumTerrainHeight),i.extrudedHeight=l},M5.prototype._getIsClosed=function(e){var t=e.height,n=e.extrudedHeight,i=Object(o.a)(n)&&n!==t;return!e.perPositionHeight&&(!i&&0===t||i&&e.closeTop&&e.closeBottom)},M5.DynamicGeometryUpdater=R5,Object(o.a)(Object.create)&&(R5.prototype=Object.create(Tj.prototype),R5.prototype.constructor=R5),R5.prototype._isHidden=function(e,t,n){return!Object(o.a)(this._options.polygonHierarchy)||Tj.prototype._isHidden.call(this,e,t,n)},R5.prototype._setOptions=function(e,t,n){var i=this._options;i.polygonHierarchy=cP.getValueOrUndefined(t.hierarchy,n);var r,a=cP.getValueOrUndefined(t.height,n),s=cP.getValueOrDefault(t.heightReference,n,iP.NONE),c=cP.getValueOrDefault(t.extrudedHeightReference,n,iP.NONE),l=cP.getValueOrUndefined(t.extrudedHeight,n),u=cP.getValueOrUndefined(t.perPositionHeight,n);a=oJ.getGeometryHeight(a,c),u?(Object(o.a)(a)&&(a=void 0,G_("Entity polygons cannot have both height and perPositionHeight. height will be ignored")),s!==iP.NONE&&u&&(a=void 0,G_("heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored"))):(Object(o.a)(l)&&!Object(o.a)(a)&&(a=0),r=oJ.computeGeometryOffsetAttribute(a,s,l,c)),i.granularity=cP.getValueOrUndefined(t.granularity,n),i.stRotation=cP.getValueOrUndefined(t.stRotation,n),i.perPositionHeight=cP.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=cP.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=cP.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=r,i.height=a,i.arcType=cP.getValueOrDefault(t.arcType,n,tl.GEODESIC),(l=oJ.getGeometryExtrudedHeight(l,c))===oJ.CLAMP_TO_GROUND&&(l=qt.getMinimumMaximumHeights(_A.computeRectangle(i,S5)).minimumTerrainHeight),i.extrudedHeight=l};var L5=M5,j5=new Hf;function F5(e){this.id=e,this.vertexFormat=void 0,this.polylinePositions=void 0,this.shapePositions=void 0,this.cornerType=void 0,this.granularity=void 0}function N5(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new F5(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}function z5(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(N5.prototype=Object.create(iN.prototype),N5.prototype.constructor=N5),N5.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n,r=this._entity,s=r.isAvailable(e),c=new bS(s&&r.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),l=this._distanceDisplayConditionProperty.getValue(e),u=K_.fromDistanceDisplayCondition(l);this._materialProperty instanceof wI?(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||s)&&(n=this._materialProperty.color.getValue(e,j5)),Object(o.a)(n)||(n=Hf.WHITE),t={show:c,distanceDisplayCondition:u,color:Uf.fromColor(n)}):t={show:c,distanceDisplayCondition:u};return new fh({id:r,geometry:new WA(this._options),attributes:t})},N5.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,j5),o=this._distanceDisplayConditionProperty.getValue(e);return new fh({id:t,geometry:new XA(this._options),attributes:{show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(o)}})},N5.prototype._isHidden=function(e,t){return!Object(o.a)(t.positions)||!Object(o.a)(t.shape)||iN.prototype._isHidden.call(this,e,t)},N5.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!cP.isConstant(t.granularity)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.cornerType)},N5.prototype._setStaticOptions=function(e,t){var n=t.granularity,i=t.cornerType,r=this._options,a=this._materialProperty instanceof wI;r.vertexFormat=a?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,r.polylinePositions=t.positions.getValue(EC.MINIMUM_VALUE,r.polylinePositions),r.shapePositions=t.shape.getValue(EC.MINIMUM_VALUE,r.shape),r.granularity=Object(o.a)(n)?n.getValue(EC.MINIMUM_VALUE):void 0,r.cornerType=Object(o.a)(i)?i.getValue(EC.MINIMUM_VALUE):void 0},N5.DynamicGeometryUpdater=z5,Object(o.a)(Object.create)&&(z5.prototype=Object.create(Tj.prototype),z5.prototype.constructor=z5),z5.prototype._isHidden=function(e,t,n){var i=this._options;return!Object(o.a)(i.polylinePositions)||!Object(o.a)(i.shapePositions)||Tj.prototype._isHidden.call(this,e,t,n)},z5.prototype._setOptions=function(e,t,n){var i=this._options;i.polylinePositions=cP.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=cP.getValueOrUndefined(t.shape,n),i.granularity=cP.getValueOrUndefined(t.granularity,n),i.cornerType=cP.getValueOrUndefined(t.cornerType,n)};var k5=N5,B5=new Hf,H5=O.ZERO,V5=new O,U5=new Se,W5=new Se,G5=new R;function q5(e){this.id=e,this.vertexFormat=void 0,this.rectangle=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.rotation=void 0,this.offsetAttribute=void 0}function Y5(e,t){oJ.call(this,{entity:e,scene:t,geometryOptions:new q5(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}function $5(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(Y5.prototype=Object.create(oJ.prototype),Y5.prototype.constructor=Y5),Y5.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,r=n.isAvailable(e),s={show:new bS(r&&n.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:K_.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||r)&&(t=this._materialProperty.color.getValue(e,B5)),Object(o.a)(t)||(t=Hf.WHITE),s.color=Uf.fromColor(t));return Object(o.a)(this._options.offsetAttribute)&&(s.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,H5,V5))),new fh({id:n,geometry:new dT(this._options),attributes:s})},Y5.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,B5),s=this._distanceDisplayConditionProperty.getValue(e),c={show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(s),offset:void 0};return Object(o.a)(this._options.offsetAttribute)&&(c.offset=vE.fromCartesian3(cP.getValueOrDefault(this._terrainOffsetProperty,e,H5,V5))),new fh({id:t,geometry:new ET(this._options),attributes:c})},Y5.prototype._computeCenter=function(e,t){var n=cP.getValueOrUndefined(this._entity.rectangle.coordinates,e,W5);if(Object(o.a)(n)){var i=Se.center(n,G5);return R.toCartesian(i,W.WGS84,t)}},Y5.prototype._isHidden=function(e,t){return!Object(o.a)(t.coordinates)||iN.prototype._isHidden.call(this,e,t)},Y5.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!cP.isConstant(t.height)||!cP.isConstant(t.extrudedHeight)||!cP.isConstant(t.granularity)||!cP.isConstant(t.stRotation)||!cP.isConstant(t.rotation)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.zIndex)||this._onTerrain&&!cP.isConstant(this._materialProperty)&&!(this._materialProperty instanceof wI)},Y5.prototype._setStaticOptions=function(e,t){var n=this._materialProperty instanceof wI,i=cP.getValueOrUndefined(t.height,EC.MINIMUM_VALUE),r=cP.getValueOrDefault(t.heightReference,EC.MINIMUM_VALUE,iP.NONE),a=cP.getValueOrUndefined(t.extrudedHeight,EC.MINIMUM_VALUE),s=cP.getValueOrDefault(t.extrudedHeightReference,EC.MINIMUM_VALUE,iP.NONE);Object(o.a)(a)&&!Object(o.a)(i)&&(i=0);var c=this._options;c.vertexFormat=n?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,c.rectangle=t.coordinates.getValue(EC.MINIMUM_VALUE,c.rectangle),c.granularity=cP.getValueOrUndefined(t.granularity,EC.MINIMUM_VALUE),c.stRotation=cP.getValueOrUndefined(t.stRotation,EC.MINIMUM_VALUE),c.rotation=cP.getValueOrUndefined(t.rotation,EC.MINIMUM_VALUE),c.offsetAttribute=oJ.computeGeometryOffsetAttribute(i,r,a,s),c.height=oJ.getGeometryHeight(i,r),(a=oJ.getGeometryExtrudedHeight(a,s))===oJ.CLAMP_TO_GROUND&&(a=qt.getMinimumMaximumHeights(dT.computeRectangle(c,U5)).minimumTerrainHeight),c.extrudedHeight=a},Y5.DynamicGeometryUpdater=$5,Object(o.a)(Object.create)&&($5.prototype=Object.create(Tj.prototype),$5.prototype.constructor=$5),$5.prototype._isHidden=function(e,t,n){return!Object(o.a)(this._options.rectangle)||Tj.prototype._isHidden.call(this,e,t,n)},$5.prototype._setOptions=function(e,t,n){var i=this._options,r=cP.getValueOrUndefined(t.height,n),a=cP.getValueOrDefault(t.heightReference,n,iP.NONE),s=cP.getValueOrUndefined(t.extrudedHeight,n),c=cP.getValueOrDefault(t.extrudedHeightReference,n,iP.NONE);Object(o.a)(s)&&!Object(o.a)(r)&&(r=0),i.rectangle=cP.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=cP.getValueOrUndefined(t.granularity,n),i.stRotation=cP.getValueOrUndefined(t.stRotation,n),i.rotation=cP.getValueOrUndefined(t.rotation,n),i.offsetAttribute=oJ.computeGeometryOffsetAttribute(r,a,s,c),i.height=oJ.getGeometryHeight(r,a),(s=oJ.getGeometryExtrudedHeight(s,c))===oJ.CLAMP_TO_GROUND&&(s=qt.getMinimumMaximumHeights(dT.computeRectangle(i,U5)).minimumTerrainHeight),i.extrudedHeight=s};var X5=Y5,K5=new Hf,Q5=new $_,Z5=new $_,J5=O.ZERO,e3=new O;function t3(e,t,n,i,r,a,s){var c;this.translucent=t,this.appearanceType=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=r,this.depthFailMaterial=void 0,this.closed=a,this.shadows=s,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.updaters=new sl,this.updatersWithAttributes=new sl,this.attributes=new sl,this.subscriptions=new sl,this.showsUpdated=new sl,this.itemsToRemove=[],this.invalidated=!1,Object(o.a)(r)&&(c=r.definitionChanged.addEventListener(t3.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=c}function n3(e,t,n,i,r){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=r}function i3(e,t){for(var n=e.length-1;n>=0;n--){var i=e[n];if(i.remove(t))return 0===i.updaters.length&&(e.splice(n,1),i.destroy()),!0}return!1}function r3(e,t,n){for(var i=!1,r=t.length,o=0;o<r;++o){var a=t[o],s=a.itemsToRemove,c=s.length;if(c>0)for(o=0;o<c;o++){var l=s[o];a.remove(l),e.add(n,l),i=!0}}return i}function o3(e,t,n,i){var r,o=t.length;for(r=o-1;r>=0;r--){var a=t[r];if(a.invalidated){t.splice(r,1);for(var s=a.updaters.values,c=s.length,l=0;l<c;l++)e.add(n,s[l]);a.destroy()}}for(o=t.length,r=0;r<o;++r)i=t[r].update(n)&&i;return i}function a3(e,t,n){for(var i=e.length,r=0;r<i;r++){var o=e[r];if(o.contains(t))return o.getBoundingSphere(t,n)}return aP.FAILED}function s3(e){for(var t=e.length,n=0;n<t;n++)e[n].destroy();e.length=0}t3.prototype.onMaterialChanged=function(){this.invalidated=!0},t3.prototype.isMaterial=function(e){var t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t||!!Object(o.a)(t)&&t.equals(n)},t3.prototype.add=function(e,t){var n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),e.hasConstantFill&&e.fillMaterialProperty.isConstant&&cP.isConstant(e.distanceDisplayConditionProperty)&&cP.isConstant(e.terrainOffsetProperty)){var i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener((function(t,n,r,o){"isShowing"===n&&i.showsUpdated.set(e.id,e)})))}else this.updatersWithAttributes.set(n,e)},t3.prototype.remove=function(e){var t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);var n=this.subscriptions.get(t);return Object(o.a)(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1},t3.prototype.update=function(e){var t,n=!0,i=0,r=this.primitive,a=this.primitives;if(this.createPrimitive){var s=this.geometry.values;if(s.length>0){var c;Object(o.a)(r)&&(Object(o.a)(this.oldPrimitive)?a.remove(r):this.oldPrimitive=r),Object(o.a)(this.depthFailAppearanceType)&&(Object(o.a)(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Aj.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial)),c=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})),r=new bL({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new this.appearanceType({translucent:this.translucent,closed:this.closed}),depthFailAppearance:c,shadows:this.shadows}),a.add(r),n=!1}else{Object(o.a)(r)&&(a.remove(r),r=void 0);var l=this.oldPrimitive;Object(o.a)(l)&&(a.remove(l),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=r,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(Object(o.a)(r)&&r.ready){r.show=!0,Object(o.a)(this.oldPrimitive)&&(a.remove(this.oldPrimitive),this.oldPrimitive=void 0),!Object(o.a)(this.depthFailAppearanceType)||this.depthFailMaterialProperty instanceof wI||(this.depthFailMaterial=Aj.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);var u=this.updatersWithAttributes.values,h=u.length,d=this.waitingOnCreate;for(t=0;t<h;t++){var f=u[t],p=this.geometry.get(f.id),m=this.attributes.get(p.id.id);if(Object(o.a)(m)||(m=r.getGeometryInstanceAttributes(p.id),this.attributes.set(p.id.id,m)),!f.fillMaterialProperty.isConstant||d){var g=f.fillMaterialProperty.color,v=cP.getValueOrDefault(g,e,Hf.WHITE,K5);Hf.equals(m._lastColor,v)||(m._lastColor=Hf.clone(v,m._lastColor),m.color=Uf.toValue(v,m.color),(this.translucent&&255===m.color[3]||!this.translucent&&255!==m.color[3])&&(this.itemsToRemove[i++]=f))}if(Object(o.a)(this.depthFailAppearanceType)&&f.depthFailMaterialProperty instanceof wI&&(!f.depthFailMaterialProperty.isConstant||d)){var _=f.depthFailMaterialProperty.color,b=cP.getValueOrDefault(_,e,Hf.WHITE,K5);Hf.equals(m._lastDepthFailColor,b)||(m._lastDepthFailColor=Hf.clone(b,m._lastDepthFailColor),m.depthFailColor=Uf.toValue(b,m.depthFailColor))}var y=f.entity.isShowing&&(f.hasConstantFill||f.isFilled(e));y!==(1===m.show[0])&&(m.show=bS.toValue(y,m.show));var w=f.distanceDisplayConditionProperty;if(!cP.isConstant(w)){var C=cP.getValueOrDefault(w,e,Z5,Q5);$_.equals(C,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=$_.clone(C,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=K_.toValue(C,m.distanceDisplayCondition))}var E=f.terrainOffsetProperty;if(!cP.isConstant(E)){var A=cP.getValueOrDefault(E,e,J5,e3);O.equals(A,m._lastOffset)||(m._lastOffset=O.clone(A,m._lastOffset),m.offset=vE.toValue(A,m.offset))}}this.updateShows(r),this.waitingOnCreate=!1}else Object(o.a)(r)&&!r.ready&&(n=!1);return this.itemsToRemove.length=i,n},t3.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=this.geometry.get(r.id),s=this.attributes.get(a.id.id);Object(o.a)(s)||(s=e.getGeometryInstanceAttributes(a.id),this.attributes.set(a.id.id,s));var c=r.entity.isShowing;c!==(1===s.show[0])&&(s.show=bS.toValue(c,s.show),a.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()},t3.prototype.contains=function(e){return this.updaters.contains(e.id)},t3.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getGeometryInstanceAttributes(e.entity);return!Object(o.a)(i)||!Object(o.a)(i.boundingSphere)||Object(o.a)(i.show)&&0===i.show[0]?aP.FAILED:(i.boundingSphere.clone(t),aP.DONE)},t3.prototype.destroy=function(){var e=this.primitive,t=this.primitives;Object(o.a)(e)&&t.remove(e);var n=this.oldPrimitive;Object(o.a)(n)&&t.remove(n),Object(o.a)(this.removeMaterialSubscription)&&this.removeMaterialSubscription()},n3.prototype.add=function(e,t){var n,i,r=t.createFillGeometryInstance(e);255===r.attributes.color.value[3]?(n=this._solidItems,i=!1):(n=this._translucentItems,i=!0);for(var o=n.length,a=0;a<o;a++){var s=n[a];if(s.isMaterial(t))return void s.add(t,r)}var c=new t3(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);c.add(t,r),n.push(c)},n3.prototype.remove=function(e){i3(this._solidItems,e)||i3(this._translucentItems,e)},n3.prototype.update=function(e){var t=o3(this,this._solidItems,e,!0);t=o3(this,this._translucentItems,e,t)&&t;var n=r3(this,this._solidItems,e),i=r3(this,this._translucentItems,e);return(n||i)&&(t=o3(this,this._solidItems,e,t)&&t,t=o3(this,this._translucentItems,e,t)&&t),t},n3.prototype.getBoundingSphere=function(e,t){var n=a3(this._solidItems,e,t);return n===aP.FAILED?a3(this._translucentItems,e,t):n},n3.prototype.removeAllPrimitives=function(){s3(this._solidItems),s3(this._translucentItems)};var c3=n3,l3=new $_,u3=new $_,h3=O.ZERO,d3=new O;function f3(e,t,n,i,r,o,a){this.primitives=e,this.appearanceType=t,this.materialProperty=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=r,this.closed=o,this.shadows=a,this.updaters=new sl,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.material=void 0,this.depthFailMaterial=void 0,this.updatersWithAttributes=new sl,this.attributes=new sl,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(f3.prototype.onMaterialChanged,this),this.subscriptions=new sl,this.showsUpdated=new sl}f3.prototype.onMaterialChanged=function(){this.invalidated=!0},f3.prototype.isMaterial=function(e){var t=this.materialProperty,n=e.fillMaterialProperty,i=this.depthFailMaterialProperty,r=e.depthFailMaterialProperty;if(n===t&&r===i)return!0;var a=Object(o.a)(t)&&t.equals(n);return a=(!Object(o.a)(i)&&!Object(o.a)(r)||Object(o.a)(i)&&i.equals(r))&&a},f3.prototype.add=function(e,t){var n=t.id;if(this.updaters.set(n,t),this.geometry.set(n,t.createFillGeometryInstance(e)),t.hasConstantFill&&t.fillMaterialProperty.isConstant&&cP.isConstant(t.distanceDisplayConditionProperty)&&cP.isConstant(t.terrainOffsetProperty)){var i=this;this.subscriptions.set(n,t.entity.definitionChanged.addEventListener((function(e,n,r,o){"isShowing"===n&&i.showsUpdated.set(t.id,t)})))}else this.updatersWithAttributes.set(n,t);this.createPrimitive=!0},f3.prototype.remove=function(e){var t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);var n=this.subscriptions.get(t);return Object(o.a)(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};var p3=new Hf;function m3(e,t,n,i,r){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=r}f3.prototype.update=function(e){var t,n=!0,i=this.primitive,r=this.primitives,a=this.geometry.values;if(this.createPrimitive){if(a.length>0){var s;Object(o.a)(i)&&(Object(o.a)(this.oldPrimitive)?r.remove(i):this.oldPrimitive=i),this.material=Aj.getValue(e,this.materialProperty,this.material),Object(o.a)(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Aj.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),s=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})),i=new bL({show:!1,asynchronous:!0,geometryInstances:a.slice(),appearance:new this.appearanceType({material:this.material,translucent:this.material.isTranslucent(),closed:this.closed}),depthFailAppearance:s,shadows:this.shadows}),r.add(i),n=!1}else{Object(o.a)(i)&&(r.remove(i),i=void 0);var c=this.oldPrimitive;Object(o.a)(c)&&(r.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1}else if(Object(o.a)(i)&&i.ready){i.show=!0,Object(o.a)(this.oldPrimitive)&&(r.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Aj.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,!Object(o.a)(this.depthFailAppearanceType)||this.depthFailMaterialProperty instanceof wI||(this.depthFailMaterial=Aj.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);var l=this.updatersWithAttributes.values,u=l.length;for(t=0;t<u;t++){var h=l[t],d=h.entity,f=this.geometry.get(h.id),p=this.attributes.get(f.id.id);if(Object(o.a)(p)||(p=i.getGeometryInstanceAttributes(f.id),this.attributes.set(f.id.id,p)),Object(o.a)(this.depthFailAppearanceType)&&this.depthFailMaterialProperty instanceof wI&&!h.depthFailMaterialProperty.isConstant){var m=h.depthFailMaterialProperty.color,g=cP.getValueOrDefault(m,e,Hf.WHITE,p3);Hf.equals(p._lastDepthFailColor,g)||(p._lastDepthFailColor=Hf.clone(g,p._lastDepthFailColor),p.depthFailColor=Uf.toValue(g,p.depthFailColor))}var v=d.isShowing&&(h.hasConstantFill||h.isFilled(e));v!==(1===p.show[0])&&(p.show=bS.toValue(v,p.show));var _=h.distanceDisplayConditionProperty;if(!cP.isConstant(_)){var b=cP.getValueOrDefault(_,e,u3,l3);$_.equals(b,p._lastDistanceDisplayCondition)||(p._lastDistanceDisplayCondition=$_.clone(b,p._lastDistanceDisplayCondition),p.distanceDisplayCondition=K_.toValue(b,p.distanceDisplayCondition))}var y=h.terrainOffsetProperty;if(!cP.isConstant(y)){var w=cP.getValueOrDefault(y,e,h3,d3);O.equals(w,p._lastOffset)||(p._lastOffset=O.clone(w,p._lastOffset),p.offset=vE.toValue(w,p.offset))}}this.updateShows(i)}else Object(o.a)(i)&&!i.ready&&(n=!1);return n},f3.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=r.entity,s=this.geometry.get(r.id),c=this.attributes.get(s.id.id);Object(o.a)(c)||(c=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,c));var l=a.isShowing;l!==(1===c.show[0])&&(c.show=bS.toValue(l,c.show),s.attributes.show.value[0]=c.show[0])}this.showsUpdated.removeAll()},f3.prototype.contains=function(e){return this.updaters.contains(e.id)},f3.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getGeometryInstanceAttributes(e.entity);return!Object(o.a)(i)||!Object(o.a)(i.boundingSphere)||Object(o.a)(i.show)&&0===i.show[0]?aP.FAILED:(i.boundingSphere.clone(t),aP.DONE)},f3.prototype.destroy=function(){var e=this.primitive,t=this.primitives;Object(o.a)(e)&&t.remove(e);var n=this.oldPrimitive;Object(o.a)(n)&&t.remove(n),this.removeMaterialSubscription()},m3.prototype.add=function(e,t){for(var n=this._items,i=n.length,r=0;r<i;r++){var o=n[r];if(o.isMaterial(t))return void o.add(e,t)}var a=new f3(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);a.add(e,t),n.push(a)},m3.prototype.remove=function(e){for(var t=this._items,n=t.length-1;n>=0;n--){var i=t[n];if(i.remove(e)){0===i.updaters.length&&(t.splice(n,1),i.destroy());break}}},m3.prototype.update=function(e){var t,n=this._items;for(t=n.length-1;t>=0;t--){var i=n[t];if(i.invalidated){n.splice(t,1);for(var r=i.updaters.values,o=r.length,a=0;a<o;a++)this.add(e,r[a]);i.destroy()}}var s=!0;for(t=0;t<n.length;t++)s=n[t].update(e)&&s;return s},m3.prototype.getBoundingSphere=function(e,t){for(var n=this._items,i=n.length,r=0;r<i;r++){var o=n[r];if(o.contains(e))return o.getBoundingSphere(e,t)}return aP.FAILED},m3.prototype.removeAllPrimitives=function(){for(var e=this._items,t=e.length,n=0;n<t;n++)e[n].destroy();this._items.length=0};var g3=m3,v3=new Hf,_3=new $_,b3=new $_;function y3(e,t,n,i){this.primitives=e,this.zIndex=i,this.classificationType=t,this.color=n,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.updaters=new sl,this.updatersWithAttributes=new sl,this.attributes=new sl,this.subscriptions=new sl,this.showsUpdated=new sl,this.itemsToRemove=[],this.isDirty=!1,this.rectangleCollisionCheck=new Cx}function w3(e,t){this._batches=[],this._primitives=e,this._classificationType=t}y3.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)},y3.prototype.add=function(e,t){var n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),this.rectangleCollisionCheck.insert(n,t.geometry.rectangle),e.hasConstantFill&&e.fillMaterialProperty.isConstant&&cP.isConstant(e.distanceDisplayConditionProperty)){var i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener((function(t,n,r,o){"isShowing"===n&&i.showsUpdated.set(e.id,e)})))}else this.updatersWithAttributes.set(n,e)},y3.prototype.remove=function(e){var t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);var i=this.subscriptions.get(t);return Object(o.a)(i)&&(i(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1},y3.prototype.update=function(e){var t,n=!0,i=this.primitive,r=this.primitives;if(this.createPrimitive){var a=this.geometry.values;if(a.length>0)Object(o.a)(i)&&(Object(o.a)(this.oldPrimitive)?r.remove(i):this.oldPrimitive=i),i=new Cj({show:!1,asynchronous:!0,geometryInstances:a.slice(),classificationType:this.classificationType}),r.add(i,this.zIndex),n=!1;else{Object(o.a)(i)&&(r.remove(i),i=void 0);var s=this.oldPrimitive;Object(o.a)(s)&&(r.remove(s),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(Object(o.a)(i)&&i.ready){i.show=!0,Object(o.a)(this.oldPrimitive)&&(r.remove(this.oldPrimitive),this.oldPrimitive=void 0);var c=this.updatersWithAttributes.values,l=c.length,u=this.waitingOnCreate;for(t=0;t<l;t++){var h=c[t],d=this.geometry.get(h.id),f=this.attributes.get(d.id.id);if(Object(o.a)(f)||(f=i.getGeometryInstanceAttributes(d.id),this.attributes.set(d.id.id,f)),!h.fillMaterialProperty.isConstant||u){var p=h.fillMaterialProperty.color,m=cP.getValueOrDefault(p,e,Hf.WHITE,v3);Hf.equals(f._lastColor,m)||(f._lastColor=Hf.clone(m,f._lastColor),f.color=Uf.toValue(m,f.color))}var g=h.entity.isShowing&&(h.hasConstantFill||h.isFilled(e));g!==(1===f.show[0])&&(f.show=bS.toValue(g,f.show));var v=h.distanceDisplayConditionProperty;if(!cP.isConstant(v)){var _=cP.getValueOrDefault(v,e,b3,_3);$_.equals(_,f._lastDistanceDisplayCondition)||(f._lastDistanceDisplayCondition=$_.clone(_,f._lastDistanceDisplayCondition),f.distanceDisplayCondition=K_.toValue(_,f.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else Object(o.a)(i)&&!i.ready&&(n=!1);return this.itemsToRemove.length=0,n},y3.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=this.geometry.get(r.id),s=this.attributes.get(a.id.id);Object(o.a)(s)||(s=e.getGeometryInstanceAttributes(a.id),this.attributes.set(a.id.id,s));var c=r.entity.isShowing;c!==(1===s.show[0])&&(s.show=bS.toValue(c,s.show),a.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()},y3.prototype.contains=function(e){return this.updaters.contains(e.id)},y3.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getBoundingSphere(e.entity);return Object(o.a)(i)?(i.clone(t),aP.DONE):aP.FAILED},y3.prototype.removeAllPrimitives=function(){var e=this.primitives,t=this.primitive;Object(o.a)(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());var n=this.oldPrimitive;Object(o.a)(n)&&(e.remove(n),this.oldPrimitive=void 0)},w3.prototype.add=function(e,t){for(var n,i=t.createFillGeometryInstance(e),r=this._batches,a=cP.getValueOrDefault(t.zIndex,0),s=r.length,c=0;c<s;++c){var l=r[c];if(l.zIndex===a&&!l.overlapping(i.geometry.rectangle)){n=l;break}}return Object(o.a)(n)||(n=new y3(this._primitives,this._classificationType,i.attributes.color.value,a),r.push(n)),n.add(t,i),n},w3.prototype.remove=function(e){for(var t=this._batches,n=t.length,i=0;i<n;++i)if(t[i].remove(e))return},w3.prototype.update=function(e){var t,n,i=!0,r=this._batches,o=r.length;for(t=0;t<o;++t)i=r[t].update(e)&&i;for(t=0;t<o;++t)for(var a=r[t],s=a.itemsToRemove,c=s.length,l=0;l<c;l++){n=s[l],a.remove(n);var u=this.add(e,n);a.isDirty=!0,u.isDirty=!0}for(t=o-1;t>=0;--t){var h=r[t];h.isDirty&&(i=r[t].update(e)&&i,h.isDirty=!1),0===h.geometry.length&&r.splice(t,1)}return i},w3.prototype.getBoundingSphere=function(e,t){for(var n=this._batches,i=n.length,r=0;r<i;++r){var o=n[r];if(o.contains(e))return o.getBoundingSphere(e,t)}return aP.FAILED},w3.prototype.removeAllPrimitives=function(){for(var e=this._batches,t=e.length,n=0;n<t;++n)e[n].removeAllPrimitives()};var O3=w3,C3=new $_,E3=new $_;function A3(e,t,n,i,r,o){this.primitives=e,this.classificationType=t,this.appearanceType=n,this.materialProperty=i,this.updaters=new sl,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.material=void 0,this.updatersWithAttributes=new sl,this.attributes=new sl,this.invalidated=!1,this.removeMaterialSubscription=i.definitionChanged.addEventListener(A3.prototype.onMaterialChanged,this),this.subscriptions=new sl,this.showsUpdated=new sl,this.usingSphericalTextureCoordinates=r,this.zIndex=o,this.rectangleCollisionCheck=new Cx}function x3(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}A3.prototype.onMaterialChanged=function(){this.invalidated=!0},A3.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)},A3.prototype.isMaterial=function(e){var t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof wI&&t instanceof wI||Object(o.a)(t)&&t.equals(n)},A3.prototype.add=function(e,t,n){var i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),this.rectangleCollisionCheck.insert(i,n.geometry.rectangle),t.hasConstantFill&&t.fillMaterialProperty.isConstant&&cP.isConstant(t.distanceDisplayConditionProperty)){var r=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener((function(e,n,i,o){"isShowing"===n&&r.showsUpdated.set(t.id,t)})))}else this.updatersWithAttributes.set(i,t);this.createPrimitive=!0},A3.prototype.remove=function(e){var t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);var i=this.subscriptions.get(t);return Object(o.a)(i)&&(i(),this.subscriptions.remove(t)),!0}return!1},A3.prototype.update=function(e){var t,n=!0,i=this.primitive,r=this.primitives,a=this.geometry.values;if(this.createPrimitive){if(a.length>0)Object(o.a)(i)&&(Object(o.a)(this.oldPrimitive)?r.remove(i):this.oldPrimitive=i),this.material=Aj.getValue(e,this.materialProperty,this.material),i=new Cj({show:!1,asynchronous:!0,geometryInstances:a.slice(),appearance:new this.appearanceType({material:this.material}),classificationType:this.classificationType}),r.add(i,this.zIndex),n=!1;else{Object(o.a)(i)&&(r.remove(i),i=void 0);var s=this.oldPrimitive;Object(o.a)(s)&&(r.remove(s),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1}else if(Object(o.a)(i)&&i.ready){i.show=!0,Object(o.a)(this.oldPrimitive)&&(r.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Aj.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;var c=this.updatersWithAttributes.values,l=c.length;for(t=0;t<l;t++){var u=c[t],h=u.entity,d=this.geometry.get(u.id),f=this.attributes.get(d.id.id);Object(o.a)(f)||(f=i.getGeometryInstanceAttributes(d.id),this.attributes.set(d.id.id,f));var p=h.isShowing&&(u.hasConstantFill||u.isFilled(e));p!==(1===f.show[0])&&(f.show=bS.toValue(p,f.show));var m=u.distanceDisplayConditionProperty;if(!cP.isConstant(m)){var g=cP.getValueOrDefault(m,e,E3,C3);$_.equals(g,f._lastDistanceDisplayCondition)||(f._lastDistanceDisplayCondition=$_.clone(g,f._lastDistanceDisplayCondition),f.distanceDisplayCondition=K_.toValue(g,f.distanceDisplayCondition))}}this.updateShows(i)}else Object(o.a)(i)&&!i.ready&&(n=!1);return n},A3.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=r.entity,s=this.geometry.get(r.id),c=this.attributes.get(s.id.id);Object(o.a)(c)||(c=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,c));var l=a.isShowing;l!==(1===c.show[0])&&(c.show=bS.toValue(l,c.show),s.attributes.show.value[0]=c.show[0])}this.showsUpdated.removeAll()},A3.prototype.contains=function(e){return this.updaters.contains(e.id)},A3.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getGeometryInstanceAttributes(e.entity);return!Object(o.a)(i)||!Object(o.a)(i.boundingSphere)||Object(o.a)(i.show)&&0===i.show[0]?aP.FAILED:(i.boundingSphere.clone(t),aP.DONE)},A3.prototype.destroy=function(){var e=this.primitive,t=this.primitives;Object(o.a)(e)&&t.remove(e);var n=this.oldPrimitive;Object(o.a)(n)&&t.remove(n),this.removeMaterialSubscription()},x3.prototype.add=function(e,t){for(var n=this._items,i=n.length,r=t.createFillGeometryInstance(e),o=YL.shouldUseSphericalCoordinates(r.geometry.rectangle),a=cP.getValueOrDefault(t.zIndex,0),s=0;s<i;++s){var c=n[s];if(c.isMaterial(t)&&c.usingSphericalTextureCoordinates===o&&c.zIndex===a&&!c.overlapping(r.geometry.rectangle))return void c.add(e,t,r)}var l=new A3(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,o,a);l.add(e,t,r),n.push(l)},x3.prototype.remove=function(e){for(var t=this._items,n=t.length-1;n>=0;n--){var i=t[n];if(i.remove(e)){0===i.updaters.length&&(t.splice(n,1),i.destroy());break}}},x3.prototype.update=function(e){var t,n=this._items;for(t=n.length-1;t>=0;t--){var i=n[t];if(i.invalidated){n.splice(t,1);for(var r=i.updaters.values,o=r.length,a=0;a<o;a++)this.add(e,r[a]);i.destroy()}}var s=!0;for(t=0;t<n.length;t++)s=n[t].update(e)&&s;return s},x3.prototype.getBoundingSphere=function(e,t){for(var n=this._items,i=n.length,r=0;r<i;r++){var o=n[r];if(o.contains(e))return o.getBoundingSphere(e,t)}return aP.FAILED},x3.prototype.removeAllPrimitives=function(){for(var e=this._items,t=e.length,n=0;n<t;n++)e[n].destroy();this._items.length=0};var T3=x3,S3=new Hf,D3=new $_,P3=new $_,I3=O.ZERO,M3=new O;function R3(e,t,n,i){this.translucent=t,this.width=n,this.shadows=i,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.updaters=new sl,this.updatersWithAttributes=new sl,this.attributes=new sl,this.itemsToRemove=[],this.subscriptions=new sl,this.showsUpdated=new sl}function L3(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new sl,this._translucentBatches=new sl}R3.prototype.add=function(e,t){var n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),e.hasConstantOutline&&e.outlineColorProperty.isConstant&&cP.isConstant(e.distanceDisplayConditionProperty)&&cP.isConstant(e.terrainOffsetProperty)){var i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener((function(t,n,r,o){"isShowing"===n&&i.showsUpdated.set(e.id,e)})))}else this.updatersWithAttributes.set(n,e)},R3.prototype.remove=function(e){var t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);var n=this.subscriptions.get(t);return Object(o.a)(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1},R3.prototype.update=function(e){var t,n=!0,i=0,r=this.primitive,a=this.primitives;if(this.createPrimitive){var s=this.geometry.values;if(s.length>0)Object(o.a)(r)&&(Object(o.a)(this.oldPrimitive)?a.remove(r):this.oldPrimitive=r),r=new bL({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new bI({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),a.add(r),n=!1;else{Object(o.a)(r)&&(a.remove(r),r=void 0);var c=this.oldPrimitive;Object(o.a)(c)&&(a.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=r,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(Object(o.a)(r)&&r.ready){r.show=!0,Object(o.a)(this.oldPrimitive)&&(a.remove(this.oldPrimitive),this.oldPrimitive=void 0);var l=this.updatersWithAttributes.values,u=l.length,h=this.waitingOnCreate;for(t=0;t<u;t++){var d=l[t],f=this.geometry.get(d.id),p=this.attributes.get(f.id.id);if(Object(o.a)(p)||(p=r.getGeometryInstanceAttributes(f.id),this.attributes.set(f.id.id,p)),!d.outlineColorProperty.isConstant||h){var m=d.outlineColorProperty,g=cP.getValueOrDefault(m,e,Hf.WHITE,S3);Hf.equals(p._lastColor,g)||(p._lastColor=Hf.clone(g,p._lastColor),p.color=Uf.toValue(g,p.color),(this.translucent&&255===p.color[3]||!this.translucent&&255!==p.color[3])&&(this.itemsToRemove[i++]=d))}var v=d.entity.isShowing&&(d.hasConstantOutline||d.isOutlineVisible(e));v!==(1===p.show[0])&&(p.show=bS.toValue(v,p.show));var _=d.distanceDisplayConditionProperty;if(!cP.isConstant(_)){var b=cP.getValueOrDefault(_,e,P3,D3);$_.equals(b,p._lastDistanceDisplayCondition)||(p._lastDistanceDisplayCondition=$_.clone(b,p._lastDistanceDisplayCondition),p.distanceDisplayCondition=K_.toValue(b,p.distanceDisplayCondition))}var y=d.terrainOffsetProperty;if(!cP.isConstant(y)){var w=cP.getValueOrDefault(y,e,I3,M3);O.equals(w,p._lastOffset)||(p._lastOffset=O.clone(w,p._lastOffset),p.offset=vE.toValue(w,p.offset))}}this.updateShows(r),this.waitingOnCreate=!1}else Object(o.a)(r)&&!r.ready&&(n=!1);return this.itemsToRemove.length=i,n},R3.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=this.geometry.get(r.id),s=this.attributes.get(a.id.id);Object(o.a)(s)||(s=e.getGeometryInstanceAttributes(a.id),this.attributes.set(a.id.id,s));var c=r.entity.isShowing;c!==(1===s.show[0])&&(s.show=bS.toValue(c,s.show),a.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()},R3.prototype.contains=function(e){return this.updaters.contains(e.id)},R3.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getGeometryInstanceAttributes(e.entity);return!Object(o.a)(i)||!Object(o.a)(i.boundingSphere)||Object(o.a)(i.show)&&0===i.show[0]?aP.FAILED:(i.boundingSphere.clone(t),aP.DONE)},R3.prototype.removeAllPrimitives=function(){var e=this.primitives,t=this.primitive;Object(o.a)(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());var n=this.oldPrimitive;Object(o.a)(n)&&(e.remove(n),this.oldPrimitive=void 0)},L3.prototype.add=function(e,t){var n,i,r=t.createOutlineGeometryInstance(e),a=this._scene.clampLineWidth(t.outlineWidth);255===r.attributes.color.value[3]?(i=(n=this._solidBatches).get(a),Object(o.a)(i)||(i=new R3(this._primitives,!1,a,this._shadows),n.set(a,i)),i.add(t,r)):(i=(n=this._translucentBatches).get(a),Object(o.a)(i)||(i=new R3(this._primitives,!0,a,this._shadows),n.set(a,i)),i.add(t,r))},L3.prototype.remove=function(e){var t,n=this._solidBatches.values,i=n.length;for(t=0;t<i;t++)if(n[t].remove(e))return;var r=this._translucentBatches.values,o=r.length;for(t=0;t<o;t++)if(r[t].remove(e))return},L3.prototype.update=function(e){var t,n,i,r,o,a=this._solidBatches.values,s=a.length,c=this._translucentBatches.values,l=c.length,u=!0,h=!1;do{for(h=!1,n=0;n<s;n++){u=(r=a[n]).update(e);var d=(o=r.itemsToRemove).length;if(d>0)for(h=!0,t=0;t<d;t++)i=o[t],r.remove(i),this.add(e,i)}for(n=0;n<l;n++){u=(r=c[n]).update(e);var f=(o=r.itemsToRemove).length;if(f>0)for(h=!0,t=0;t<f;t++)i=o[t],r.remove(i),this.add(e,i)}}while(h);return u},L3.prototype.getBoundingSphere=function(e,t){var n,i=this._solidBatches.values,r=i.length;for(n=0;n<r;n++){var o=i[n];if(o.contains(e))return o.getBoundingSphere(e,t)}var a=this._translucentBatches.values,s=a.length;for(n=0;n<s;n++){var c=a[n];if(c.contains(e))return c.getBoundingSphere(e,t)}return aP.FAILED},L3.prototype.removeAllPrimitives=function(){var e,t=this._solidBatches.values,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();var i=this._translucentBatches.values,r=i.length;for(e=0;e<r;e++)i[e].removeAllPrimitives()};var j3=L3,F3=new Hf;function N3(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.minimumHeights=void 0,this.maximumHeights=void 0,this.granularity=void 0}function z3(e,t){iN.call(this,{entity:e,scene:t,geometryOptions:new N3(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}function k3(e,t,n){Tj.call(this,e,t,n)}Object(o.a)(Object.create)&&(z3.prototype=Object.create(iN.prototype),z3.prototype.constructor=z3),z3.prototype.createFillGeometryInstance=function(e){if(i.a.defined("time",e),!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n,r=this._entity,s=r.isAvailable(e),c=new bS(s&&r.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),l=this._distanceDisplayConditionProperty.getValue(e),u=K_.fromDistanceDisplayCondition(l);this._materialProperty instanceof wI?(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||s)&&(n=this._materialProperty.color.getValue(e,F3)),Object(o.a)(n)||(n=Hf.WHITE),t={show:c,distanceDisplayCondition:u,color:Uf.fromColor(n)}):t={show:c,distanceDisplayCondition:u};return new fh({id:r,geometry:new HD(this._options),attributes:t})},z3.prototype.createOutlineGeometryInstance=function(e){if(i.a.defined("time",e),!this._outlineEnabled)throw new a.a("This instance does not represent an outlined geometry.");var t=this._entity,n=t.isAvailable(e),r=cP.getValueOrDefault(this._outlineColorProperty,e,Hf.BLACK,F3),o=this._distanceDisplayConditionProperty.getValue(e);return new fh({id:t,geometry:new YD(this._options),attributes:{show:new bS(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Uf.fromColor(r),distanceDisplayCondition:K_.fromDistanceDisplayCondition(o)}})},z3.prototype._isHidden=function(e,t){return!Object(o.a)(t.positions)||iN.prototype._isHidden.call(this,e,t)},z3.prototype._getIsClosed=function(e){return!1},z3.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!cP.isConstant(t.minimumHeights)||!cP.isConstant(t.maximumHeights)||!cP.isConstant(t.outlineWidth)||!cP.isConstant(t.granularity)},z3.prototype._setStaticOptions=function(e,t){var n=t.minimumHeights,i=t.maximumHeights,r=t.granularity,a=this._materialProperty instanceof wI,s=this._options;s.vertexFormat=a?bI.VERTEX_FORMAT:vI.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(EC.MINIMUM_VALUE,s.positions),s.minimumHeights=Object(o.a)(n)?n.getValue(EC.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=Object(o.a)(i)?i.getValue(EC.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=Object(o.a)(r)?r.getValue(EC.MINIMUM_VALUE):void 0},z3.DynamicGeometryUpdater=k3,Object(o.a)(Object.create)&&(k3.prototype=Object.create(Tj.prototype),k3.prototype.constructor=k3),k3.prototype._isHidden=function(e,t,n){return!Object(o.a)(this._options.positions)||Tj.prototype._isHidden.call(this,e,t,n)},k3.prototype._setOptions=function(e,t,n){var i=this._options;i.positions=cP.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=cP.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=cP.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=cP.getValueOrUndefined(t.granularity,n)};var B3=[],H3=[_N,F1,fJ,J2,u5,E5,L5,k5,X5,z3];function V3(e,t){this.entity=e,this.scene=t;var n=new Array(H3.length),i=new wn.a;function r(e){i.raiseEvent(e)}for(var o=new Ib,a=0;a<n.length;a++){var s=new H3[a](e,t);o.add(s.geometryChanged,r),n[a]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(V3.prototype._onEntityPropertyChanged,this)}function U3(e,t,n,o){i.a.defined("scene",e),i.a.defined("entityCollection",t),n=Object(r.a)(n,e.primitives),o=Object(r.a)(o,e.groundPrimitives),this._scene=e,this._primitives=n,this._groundPrimitives=o,this._entityCollection=void 0,this._addedObjects=new sl,this._removedObjects=new sl,this._changedObjects=new sl;var a=RR.NUMBER_OF_SHADOW_MODES;this._outlineBatches=new Array(2*a),this._closedColorBatches=new Array(2*a),this._closedMaterialBatches=new Array(2*a),this._openColorBatches=new Array(2*a),this._openMaterialBatches=new Array(2*a);var s,c=YF.supportsMaterialsforEntitiesOnTerrain(e);for(this._supportsMaterialsforEntitiesOnTerrain=c,s=0;s<a;++s)this._outlineBatches[s]=new j3(n,e,s,!1),this._outlineBatches[a+s]=new j3(n,e,s,!0),this._closedColorBatches[s]=new c3(n,bI,void 0,!0,s,!0),this._closedColorBatches[a+s]=new c3(n,bI,void 0,!0,s,!1),this._closedMaterialBatches[s]=new g3(n,vI,void 0,!0,s,!0),this._closedMaterialBatches[a+s]=new g3(n,vI,void 0,!0,s,!1),this._openColorBatches[s]=new c3(n,bI,void 0,!1,s,!0),this._openColorBatches[a+s]=new c3(n,bI,void 0,!1,s,!1),this._openMaterialBatches[s]=new g3(n,vI,void 0,!1,s,!0),this._openMaterialBatches[a+s]=new g3(n,vI,void 0,!1,s,!1);var l=JM.NUMBER_OF_CLASSIFICATION_TYPES,u=new Array(l),h=[];if(c)for(s=0;s<l;++s)h.push(new T3(o,s,vI)),u[s]=new O3(o,s);else for(s=0;s<l;++s)u[s]=new O3(o,s);this._groundColorBatches=u,this._groundMaterialBatches=h,this._dynamicBatch=new G2(n,o),this._batches=this._outlineBatches.concat(this._closedColorBatches,this._closedMaterialBatches,this._openColorBatches,this._openMaterialBatches,this._groundColorBatches,this._groundMaterialBatches,this._dynamicBatch),this._subscriptions=new sl,this._updaterSets=new sl,this._entityCollection=t,t.collectionChanged.addEventListener(U3.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,B3)}V3.prototype._onEntityPropertyChanged=function(e,t,n,i){for(var r=this.updaters,o=0;o<r.length;o++)r[o]._onEntityPropertyChanged(e,t,n,i)},V3.prototype.forEach=function(e){for(var t=this.updaters,n=0;n<t.length;n++)e(t[n])},V3.prototype.destroy=function(){this.eventHelper.removeAll();for(var e=this.updaters,t=0;t<e.length;t++)e[t].destroy();this._removeEntitySubscription(),Ks(this)},U3.prototype.update=function(e){i.a.defined("time",e);var t,n,r,o,a=this._addedObjects,s=a.values,c=this._removedObjects,l=c.values,u=this._changedObjects,h=u.values,d=this;for(t=h.length-1;t>-1;t--)r=(n=h[t]).id,(o=this._updaterSets.get(r)).entity===n?o.forEach((function(t){d._removeUpdater(t),d._insertUpdaterIntoBatch(e,t)})):(l.push(n),s.push(n));for(t=l.length-1;t>-1;t--)r=(n=l[t]).id,(o=this._updaterSets.get(r)).forEach(this._removeUpdater.bind(this)),o.destroy(),this._updaterSets.remove(r),this._subscriptions.get(r)(),this._subscriptions.remove(r);for(t=s.length-1;t>-1;t--)r=(n=s[t]).id,o=new V3(n,this._scene),this._updaterSets.set(r,o),o.forEach((function(t){d._insertUpdaterIntoBatch(e,t)})),this._subscriptions.set(r,o.geometryChanged.addEventListener(U3._onGeometryChanged,this));a.removeAll(),c.removeAll(),u.removeAll();var f=!0,p=this._batches,m=p.length;for(t=0;t<m;t++)f=p[t].update(e)&&f;return f};var W3=[],G3=new gt;U3.prototype.getBoundingSphere=function(e,t){i.a.defined("entity",e),i.a.defined("result",t);for(var n=W3,r=G3,o=0,a=aP.DONE,s=this._batches,c=s.length,l=e.id,u=this._updaterSets.get(l).updaters,h=0;h<u.length;h++)for(var d=u[h],f=0;f<c;f++){if((a=s[f].getBoundingSphere(d,r))===aP.PENDING)return aP.PENDING;a===aP.DONE&&(n[o]=gt.clone(r,n[o]),o++)}return 0===o?aP.FAILED:(n.length=o,gt.fromBoundingSpheres(n,t),aP.DONE)},U3.prototype.isDestroyed=function(){return!1},U3.prototype.destroy=function(){var e;this._entityCollection.collectionChanged.removeEventListener(U3.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();var t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();var i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();this._subscriptions.removeAll();var r=this._updaterSets.values;for(n=r.length,e=0;e<n;e++)r[e].destroy();return this._updaterSets.removeAll(),Ks(this)},U3.prototype._removeUpdater=function(e){for(var t=this._batches,n=t.length,i=0;i<n;i++)t[i].remove(e)},U3.prototype._insertUpdaterIntoBatch=function(e,t){if(t.isDynamic)this._dynamicBatch.add(e,t);else{var n;(t.outlineEnabled||t.fillEnabled)&&(n=t.shadowsProperty.getValue(e));var i=RR.NUMBER_OF_SHADOW_MODES;if(t.outlineEnabled&&(Object(o.a)(t.terrainOffsetProperty)?this._outlineBatches[i+n].add(e,t):this._outlineBatches[n].add(e,t)),t.fillEnabled)if(t.onTerrain){var r=t.classificationTypeProperty.getValue(e);t.fillMaterialProperty instanceof wI?this._groundColorBatches[r].add(e,t):this._groundMaterialBatches[r].add(e,t)}else t.isClosed?t.fillMaterialProperty instanceof wI?Object(o.a)(t.terrainOffsetProperty)?this._closedColorBatches[i+n].add(e,t):this._closedColorBatches[n].add(e,t):Object(o.a)(t.terrainOffsetProperty)?this._closedMaterialBatches[i+n].add(e,t):this._closedMaterialBatches[n].add(e,t):t.fillMaterialProperty instanceof wI?Object(o.a)(t.terrainOffsetProperty)?this._openColorBatches[i+n].add(e,t):this._openColorBatches[n].add(e,t):Object(o.a)(t.terrainOffsetProperty)?this._openMaterialBatches[i+n].add(e,t):this._openMaterialBatches[n].add(e,t)}},U3._onGeometryChanged=function(e){var t=this._removedObjects,n=this._changedObjects,i=e.entity,r=i.id;Object(o.a)(t.get(r))||Object(o.a)(n.get(r))||n.set(r,i)},U3.prototype._onCollectionChanged=function(e,t,n){var i,r,o,a=this._addedObjects,s=this._removedObjects,c=this._changedObjects;for(i=n.length-1;i>-1;i--)r=(o=n[i]).id,a.remove(r)||(s.set(r,o),c.remove(r));for(i=t.length-1;i>-1;i--)r=(o=t[i]).id,s.remove(r)?c.set(r,o):a.set(r,o)};var q3=U3,Y3=ZY.FILL,$3=Hf.WHITE,X3=Hf.BLACK,K3=new Hf(.165,.165,.165,.8),Q3=new Mt(7,5),Z3=Mt.ZERO,J3=O.ZERO,e4=iP.NONE,t4=rP.CENTER,n4=oP.CENTER,i4=new O,r4=new Hf,o4=new Hf,a4=new Hf,s4=new Mt,c4=new O,l4=new Mt,u4=new JC,h4=new JC,d4=new JC,f4=new $_;function p4(e){this.entity=e,this.label=void 0,this.index=void 0}function m4(e,t){if(!Object(o.a)(e))throw new a.a("entityCluster is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(m4.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new sl,this._onCollectionChanged(t,t.values,[],[])}function g4(e,t,n){Object(o.a)(e)&&(e.label=void 0,n.removeLabel(t))}m4.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");for(var t=this._items.values,n=this._cluster,i=0,r=t.length;i<r;i++){var s,c,l=t[i],u=l.entity,h=u._label,d=l.label,f=u.isShowing&&u.isAvailable(e)&&cP.getValueOrDefault(h._show,e,!0);if(f&&(c=cP.getValueOrUndefined(u._position,e,i4),s=cP.getValueOrUndefined(h._text,e),f=Object(o.a)(c)&&Object(o.a)(s)),f){cP.isConstant(u._position)||(n._clusterDirty=!0);var p=!1,m=cP.getValueOrDefault(h._heightReference,e,e4);Object(o.a)(d)||((d=n.getLabel(u)).id=u,l.label=d,p=O.equals(d.position,c)&&d.heightReference===m),d.show=!0,d.position=c,d.text=s,d.scale=cP.getValueOrDefault(h._scale,e,1),d.font=cP.getValueOrDefault(h._font,e,"30px sans-serif"),d.style=cP.getValueOrDefault(h._style,e,Y3),d.fillColor=cP.getValueOrDefault(h._fillColor,e,$3,r4),d.outlineColor=cP.getValueOrDefault(h._outlineColor,e,X3,o4),d.outlineWidth=cP.getValueOrDefault(h._outlineWidth,e,1),d.showBackground=cP.getValueOrDefault(h._showBackground,e,!1),d.backgroundColor=cP.getValueOrDefault(h._backgroundColor,e,K3,a4),d.backgroundPadding=cP.getValueOrDefault(h._backgroundPadding,e,Q3,s4),d.pixelOffset=cP.getValueOrDefault(h._pixelOffset,e,Z3,l4),d.eyeOffset=cP.getValueOrDefault(h._eyeOffset,e,J3,c4),d.heightReference=m,d.horizontalOrigin=cP.getValueOrDefault(h._horizontalOrigin,e,t4),d.verticalOrigin=cP.getValueOrDefault(h._verticalOrigin,e,n4),d.translucencyByDistance=cP.getValueOrUndefined(h._translucencyByDistance,e,u4),d.pixelOffsetScaleByDistance=cP.getValueOrUndefined(h._pixelOffsetScaleByDistance,e,h4),d.scaleByDistance=cP.getValueOrUndefined(h._scaleByDistance,e,d4),d.distanceDisplayCondition=cP.getValueOrUndefined(h._distanceDisplayCondition,e,f4),d.disableDepthTestDistance=cP.getValueOrUndefined(h._disableDepthTestDistance,e),p&&d._updateClamping()}else g4(l,u,n)}return!0},m4.prototype.getBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("entity is required.");if(!Object(o.a)(t))throw new a.a("result is required.");var n=this._items.get(e.id);if(!Object(o.a)(n)||!Object(o.a)(n.label))return aP.FAILED;var i=n.label;return t.center=O.clone(Object(r.a)(i._clampedPosition,i.position),t.center),t.radius=0,aP.DONE},m4.prototype.isDestroyed=function(){return!1},m4.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(m4.prototype._onCollectionChanged,this);for(var e=this._entityCollection.values,t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return Ks(this)},m4.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s=this._items,c=this._cluster;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._label)&&Object(o.a)(a._position)&&s.set(a.id,new p4(a));for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._label)&&Object(o.a)(a._position)?s.contains(a.id)||s.set(a.id,new p4(a)):(g4(s.get(a.id),a,c),s.remove(a.id));for(r=n.length-1;r>-1;r--)a=n[r],g4(s.get(a.id),a,c),s.remove(a.id)};var v4=m4,_4=RR.ENABLED,b4=iP.NONE,y4=Hf.RED,w4=Hf.WHITE,O4=hH.HIGHLIGHT,C4=new Mt(1,1),E4=new Ae,A4=new Ae;function x4(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(x4.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new sl,this._onCollectionChanged(t,t.values,[],[])}function T4(e,t,n,i){var r=n[t.id];Object(o.a)(r)&&(i.removeAndDestroy(r.modelPrimitive),delete n[t.id])}function S4(e,t){var n=t[e.id];Object(o.a)(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}function D4(e,t,n){e.readyPromise.otherwise((function(e){console.error(e),n[t.id].loadFail=!0}))}x4.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");for(var t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives,r=0,s=t.length;r<s;r++){var c,l,u=t[r],h=u._model,d=n[u.id],f=u.isShowing&&u.isAvailable(e)&&cP.getValueOrDefault(h._show,e,!0);if(f&&(l=u.computeModelMatrix(e,E4),c=_t.a.createIfNeeded(cP.getValueOrUndefined(h._uri,e)),f=Object(o.a)(l)&&Object(o.a)(c)),f){var p=Object(o.a)(d)?d.modelPrimitive:void 0;if(Object(o.a)(p)&&c.url===d.url||(Object(o.a)(p)&&(i.removeAndDestroy(p),delete n[u.id]),(p=sW.fromGltf({url:c,incrementallyLoadTextures:cP.getValueOrDefault(h._incrementallyLoadTextures,e,!0),scene:this._scene})).id=u,i.add(p),d={modelPrimitive:p,url:c.url,animationsRunning:!1,nodeTransformationsScratch:{},articulationsScratch:{},loadFail:!1},n[u.id]=d,D4(p,u,n)),p.show=!0,p.scale=cP.getValueOrDefault(h._scale,e,1),p.minimumPixelSize=cP.getValueOrDefault(h._minimumPixelSize,e,0),p.maximumScale=cP.getValueOrUndefined(h._maximumScale,e),p.modelMatrix=Ae.clone(l,p.modelMatrix),p.shadows=cP.getValueOrDefault(h._shadows,e,_4),p.heightReference=cP.getValueOrDefault(h._heightReference,e,b4),p.distanceDisplayCondition=cP.getValueOrUndefined(h._distanceDisplayCondition,e),p.silhouetteColor=cP.getValueOrDefault(h._silhouetteColor,e,y4,p._silhouetteColor),p.silhouetteSize=cP.getValueOrDefault(h._silhouetteSize,e,0),p.color=cP.getValueOrDefault(h._color,e,w4,p._color),p.colorBlendMode=cP.getValueOrDefault(h._colorBlendMode,e,O4),p.colorBlendAmount=cP.getValueOrDefault(h._colorBlendAmount,e,.5),p.clippingPlanes=cP.getValueOrUndefined(h._clippingPlanes,e),p.clampAnimations=cP.getValueOrDefault(h._clampAnimations,e,!0),p.imageBasedLightingFactor=cP.getValueOrDefault(h._imageBasedLightingFactor,e,C4),p.lightColor=cP.getValueOrUndefined(h._lightColor,e),p.ready){var m=cP.getValueOrDefault(h._runAnimations,e,!0);d.animationsRunning!==m&&(m?p.activeAnimations.addAll({loop:PH.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=m);var g=cP.getValueOrUndefined(h._nodeTransformations,e,d.nodeTransformationsScratch);if(Object(o.a)(g))for(var v=Object.keys(g),_=0,b=v.length;_<b;++_){var y=v[_],w=g[y];if(Object(o.a)(w)){var O=p.getNode(y);if(Object(o.a)(O)){var C=Ae.fromTranslationRotationScale(w,A4);O.matrix=Ae.multiply(O.originalMatrix,C,C)}}}var E=!1,A=cP.getValueOrUndefined(h._articulations,e,d.articulationsScratch);if(Object(o.a)(A))for(var x=Object.keys(A),T=0,S=x.length;T<S;++T){var D=x[T],P=A[D];Object(o.a)(P)&&(E=!0,p.setArticulationStage(D,P))}E&&p.applyArticulations()}}else Object(o.a)(d)&&(d.modelPrimitive.show=!1)}return!0},x4.prototype.isDestroyed=function(){return!1},x4.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(x4.prototype._onCollectionChanged,this);for(var e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives,i=e.length-1;i>-1;i--)T4(this,e[i],t,n);return Ks(this)},x4.prototype.getBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("entity is required.");if(!Object(o.a)(t))throw new a.a("result is required.");var n=this._modelHash[e.id];if(!Object(o.a)(n)||n.loadFail)return aP.FAILED;var i=n.modelPrimitive;if(!Object(o.a)(i)||!i.show)return aP.FAILED;if(!i.ready)return aP.PENDING;if(i.heightReference===iP.NONE)gt.transform(i.boundingSphere,i.modelMatrix,t);else{if(!Object(o.a)(i._clampedModelMatrix))return aP.PENDING;gt.transform(i.boundingSphere,i._clampedModelMatrix,t)}return aP.DONE},x4.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s=this._entitiesToVisualize,c=this._modelHash,l=this._primitives;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._model)&&Object(o.a)(a._position)&&s.set(a.id,a);for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._model)&&Object(o.a)(a._position)?(S4(a,c),s.set(a.id,a)):(T4(this,a,c,l),s.remove(a.id));for(r=n.length-1;r>-1;r--)T4(this,a=n[r],c,l),s.remove(a.id)};var P4=x4;function I4(e){this._definitionChanged=new wn.a,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(I4.prototype,{isConstant:{get:function(){return cP.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return Object(o.a)(this._value)?this._value.referenceFrame:AT.FIXED}}}),I4.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,AT.FIXED,t)},I4.prototype.setValue=function(e){this._value!==e&&(this._value=e,Object(o.a)(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),Object(o.a)(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))},I4.prototype.getValueInReferenceFrame=function(e,t,n){if(!Object(o.a)(e))throw new a.a("time is required.");if(!Object(o.a)(t))throw new a.a("referenceFrame is required.");if(Object(o.a)(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),Object(o.a)(n)?W.WGS84.scaleToGeodeticSurface(n,n):void 0},I4.prototype.equals=function(e){return this===e||e instanceof I4&&this._value===e._value},I4.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var M4=I4,R4=new wC,L4=new wC,j4=new wC;function F4(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}function N4(e,t,n,i,r,a,s,c){for(;e instanceof u0;)e=e.resolvedProperty;e instanceof O0?s=function(e,t,n,i,r,a,s,c,l){var u,h=c;u=e.getValueInReferenceFrame(t,a,l[h]),Object(o.a)(u)&&(l[h++]=u);for(var d,f,p,m=!Object(o.a)(r)||hr.lessThanOrEquals(r,t)||hr.greaterThanOrEquals(r,n),g=0,v=i.length,_=i[g],b=n,y=!1;g<v;){if(!m&&hr.greaterThanOrEquals(_,r)&&(u=e.getValueInReferenceFrame(r,a,l[h]),Object(o.a)(u)&&(l[h++]=u),m=!0),hr.greaterThan(_,t)&&hr.lessThan(_,b)&&!_.equals(r)&&(u=e.getValueInReferenceFrame(_,a,l[h]),Object(o.a)(u)&&(l[h++]=u)),g<v-1){if(s>0&&!y){var w=i[g+1],O=hr.secondsDifference(w,_);(y=O>s)&&(d=Math.ceil(O/s),f=0,p=O/Math.max(d,2),d=Math.max(d-1,1))}if(y&&f<d){_=hr.addSeconds(_,p,new hr),f++;continue}}y=!1,_=i[++g]}return u=e.getValueInReferenceFrame(n,a,l[h]),Object(o.a)(u)&&(l[h++]=u),h}(e,t,n,e._property._times,i,r,a,s,c):s=e instanceof nJ?function(e,t,n,i,r,o,a,s){L4.start=t,L4.stop=n;for(var c=a,l=e.intervals,u=0;u<l.length;u++){var h=l.get(u);if(!wC.intersect(h,L4,R4).isEmpty){var d=h.start,f=h.stop,p=t;hr.greaterThan(d,p)&&(p=d);var m=n;hr.lessThan(f,m)&&(m=f),c=N4(h.data,p,m,i,r,o,c,s)}}return c}(e,t,n,i,r,a,s,c):e instanceof P0?function(e,t,n,i,r,a,s,c){j4.start=t,j4.stop=n;for(var l=s,u=e.intervals,h=0;h<u.length;h++){var d=u.get(h);if(!wC.intersect(d,j4,R4).isEmpty){var f=d.start;d.isStartIncluded||(f=d.isStopIncluded?d.stop:hr.addSeconds(d.start,hr.secondsDifference(d.stop,d.start)/2,new hr));var p=e.getValueInReferenceFrame(f,r,c[l]);Object(o.a)(p)&&(c[l]=p,l++)}}return l}(e,t,n,0,r,0,s,c):e instanceof Zj||e instanceof M4&&cP.isConstant(e)?function(e,t,n,i,r,a,s,c){var l=e.getValueInReferenceFrame(t,r,c[s]);return Object(o.a)(l)&&(c[s++]=l),s}(e,t,0,0,r,0,s,c):function(e,t,n,i,r,a,s,c){for(var l,u=0,h=s,d=t,f=Math.max(a,60),p=!Object(o.a)(i)||hr.lessThanOrEquals(i,t)||hr.greaterThanOrEquals(i,n);hr.lessThan(d,n);)!p&&hr.greaterThanOrEquals(d,i)&&(p=!0,l=e.getValueInReferenceFrame(i,r,c[h]),Object(o.a)(l)&&(c[h]=l,h++)),l=e.getValueInReferenceFrame(d,r,c[h]),Object(o.a)(l)&&(c[h]=l,h++),u++,d=hr.addSeconds(t,f*u,new hr);return l=e.getValueInReferenceFrame(n,r,c[h]),Object(o.a)(l)&&(c[h]=l,h++),h}(e,t,n,i,r,a,s,c);return s}function z4(e,t,n,i,r,a,s){Object(o.a)(s)||(s=[]);var c=N4(e,t,n,i,r,a,0,s);return s.length=c,s}var k4=new oe;function B4(e,t){this._unusedIndexes=[],this._polylineCollection=new PX,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}function H4(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(H4.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new sl,this._onCollectionChanged(t,t.values,[],[])}B4.prototype.update=function(e){if(this._referenceFrame===AT.INERTIAL){var t=ya.computeIcrfToFixedMatrix(e,k4);Object(o.a)(t)||(t=ya.computeTemeToPseudoFixedMatrix(e,k4)),Ae.fromRotationTranslation(t,O.ZERO,this._polylineCollection.modelMatrix)}},B4.prototype.updateObject=function(e,t){var n,i,r=t.entity,a=r._path,s=r._position,c=a._show,l=t.polyline,u=r.isShowing&&(!Object(o.a)(c)||c.getValue(e));if(u){var h=cP.getValueOrUndefined(a._leadTime,e),d=cP.getValueOrUndefined(a._trailTime,e),f=r._availability,p=Object(o.a)(f),m=Object(o.a)(h),g=Object(o.a)(d);if(u=p||m&&g){if(g&&(n=hr.addSeconds(e,-d,new hr)),m&&(i=hr.addSeconds(e,h,new hr)),p){var v=f.start,_=f.stop;g&&!hr.greaterThan(v,n)||(n=v),m&&!hr.lessThan(_,i)||(i=_)}u=hr.lessThan(n,i)}}if(u){if(!Object(o.a)(l)){var b=this._unusedIndexes;if(b.length>0){var y=b.pop();l=this._polylineCollection.get(y),t.index=y}else t.index=this._polylineCollection.length,l=this._polylineCollection.add();l.id=r,t.polyline=l}var w=cP.getValueOrDefault(a._resolution,e,60);l.show=!0,l.positions=z4(s,n,i,e,this._referenceFrame,w,l.positions.slice()),l.material=Aj.getValue(e,a._material,l.material),l.width=cP.getValueOrDefault(a._width,e,1),l.distanceDisplayCondition=cP.getValueOrUndefined(a._distanceDisplayCondition,e,l.distanceDisplayCondition)}else Object(o.a)(l)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,l.show=!1,t.index=void 0)},B4.prototype.removeObject=function(e){var t=e.polyline;Object(o.a)(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0)},B4.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),Ks(this)},H4.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");var t=this._updaters;for(var n in t)t.hasOwnProperty(n)&&t[n].update(e);var i=this._items.values;if(0===i.length&&Object(o.a)(this._updaters)&&Object.keys(this._updaters).length>0){for(var r in t)t.hasOwnProperty(r)&&t[r].destroy();this._updaters={}}for(var s=0,c=i.length;s<c;s++){var l=i[s],u=l.entity._position,h=l.updater,d=AT.FIXED;this._scene.mode===IR.SCENE3D&&(d=u.referenceFrame);var f=this._updaters[d];h===f&&Object(o.a)(f)?f.updateObject(e,l):(Object(o.a)(h)&&h.removeObject(l),Object(o.a)(f)||((f=new B4(this._scene,d)).update(e),this._updaters[d]=f),l.updater=f,Object(o.a)(f)&&f.updateObject(e,l))}return!0},H4.prototype.isDestroyed=function(){return!1},H4.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(H4.prototype._onCollectionChanged,this);var e=this._updaters;for(var t in e)e.hasOwnProperty(t)&&e[t].destroy();return Ks(this)},H4.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s,c=this._items;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._path)&&Object(o.a)(a._position)&&c.set(a.id,new F4(a));for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._path)&&Object(o.a)(a._position)?c.contains(a.id)||c.set(a.id,new F4(a)):(s=c.get(a.id),Object(o.a)(s)&&(Object(o.a)(s.updater)&&s.updater.removeObject(s),c.remove(a.id)));for(r=n.length-1;r>-1;r--)a=n[r],s=c.get(a.id),Object(o.a)(s)&&(Object(o.a)(s.updater)&&s.updater.removeObject(s),c.remove(a.id))},H4._subSample=z4;var V4=H4,U4=Hf.WHITE,W4=Hf.BLACK,G4=new Hf,q4=new O,Y4=new Hf,$4=new JC,X4=new JC,K4=new $_;function Q4(e){this.entity=e,this.pointPrimitive=void 0,this.billboard=void 0,this.color=void 0,this.outlineColor=void 0,this.pixelSize=void 0,this.outlineWidth=void 0}function Z4(e,t){if(!Object(o.a)(e))throw new a.a("entityCluster is required.");if(!Object(o.a)(t))throw new a.a("entityCollection is required.");t.collectionChanged.addEventListener(Z4.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new sl,this._onCollectionChanged(t,t.values,[],[])}function J4(e,t,n){if(Object(o.a)(e)){var i=e.pointPrimitive;if(Object(o.a)(i))return e.pointPrimitive=void 0,void n.removePoint(t);var r=e.billboard;Object(o.a)(r)&&(e.billboard=void 0,n.removeBillboard(t))}}Z4.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");for(var t=this._items.values,n=this._cluster,i=0,r=t.length;i<r;i++){var s,c=t[i],l=c.entity,u=l._point,h=c.pointPrimitive,d=c.billboard,f=cP.getValueOrDefault(u._heightReference,e,iP.NONE),p=l.isShowing&&l.isAvailable(e)&&cP.getValueOrDefault(u._show,e,!0);if(p&&(s=cP.getValueOrUndefined(l._position,e,q4),p=Object(o.a)(s)),p){cP.isConstant(l._position)||(n._clusterDirty=!0);var m=!1,g=!1;if(f===iP.NONE||Object(o.a)(d)?f!==iP.NONE||Object(o.a)(h)||(Object(o.a)(d)&&(J4(c,l,n),d=void 0),(h=n.getPoint(l)).id=l,c.pointPrimitive=h):(Object(o.a)(h)&&(J4(c,l,n),h=void 0),(d=n.getBillboard(l)).id=l,d.image=void 0,c.billboard=d,m=!0,g=O.equals(d.position,s)&&d.heightReference===f),Object(o.a)(h))h.show=!0,h.position=s,h.scaleByDistance=cP.getValueOrUndefined(u._scaleByDistance,e,$4),h.translucencyByDistance=cP.getValueOrUndefined(u._translucencyByDistance,e,X4),h.color=cP.getValueOrDefault(u._color,e,U4,G4),h.outlineColor=cP.getValueOrDefault(u._outlineColor,e,W4,Y4),h.outlineWidth=cP.getValueOrDefault(u._outlineWidth,e,0),h.pixelSize=cP.getValueOrDefault(u._pixelSize,e,1),h.distanceDisplayCondition=cP.getValueOrUndefined(u._distanceDisplayCondition,e,K4),h.disableDepthTestDistance=cP.getValueOrDefault(u._disableDepthTestDistance,e,0);else if(Object(o.a)(d)){d.show=!0,d.position=s,d.scaleByDistance=cP.getValueOrUndefined(u._scaleByDistance,e,$4),d.translucencyByDistance=cP.getValueOrUndefined(u._translucencyByDistance,e,X4),d.distanceDisplayCondition=cP.getValueOrUndefined(u._distanceDisplayCondition,e,K4),d.disableDepthTestDistance=cP.getValueOrDefault(u._disableDepthTestDistance,e,0),d.heightReference=f;var v=cP.getValueOrDefault(u._color,e,U4,G4),_=cP.getValueOrDefault(u._outlineColor,e,W4,Y4),b=Math.round(cP.getValueOrDefault(u._outlineWidth,e,0)),y=Math.max(1,Math.round(cP.getValueOrDefault(u._pixelSize,e,1)));if(b>0?(d.scale=1,m=m||b!==c.outlineWidth||y!==c.pixelSize||!Hf.equals(v,c.color)||!Hf.equals(_,c.outlineColor)):(d.scale=y/50,y=50,m=m||b!==c.outlineWidth||!Hf.equals(v,c.color)||!Hf.equals(_,c.outlineColor)),m){c.color=Hf.clone(v,c.color),c.outlineColor=Hf.clone(_,c.outlineColor),c.pixelSize=y,c.outlineWidth=b;var w=v.alpha,C=v.toCssColorString(),E=_.toCssColorString(),A=JSON.stringify([C,y,E,b]);d.setImage(A,UY(w,C,E,b,y))}g&&d._updateClamping()}}else J4(c,l,n)}return!0},Z4.prototype.getBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("entity is required.");if(!Object(o.a)(t))throw new a.a("result is required.");var n=this._items.get(e.id);if(!Object(o.a)(n)||!Object(o.a)(n.pointPrimitive)&&!Object(o.a)(n.billboard))return aP.FAILED;if(Object(o.a)(n.pointPrimitive))t.center=O.clone(n.pointPrimitive.position,t.center);else{var i=n.billboard;if(!Object(o.a)(i._clampedPosition))return aP.PENDING;t.center=O.clone(i._clampedPosition,t.center)}return t.radius=0,aP.DONE},Z4.prototype.isDestroyed=function(){return!1},Z4.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Z4.prototype._onCollectionChanged,this);for(var e=this._entityCollection.values,t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return Ks(this)},Z4.prototype._onCollectionChanged=function(e,t,n,i){var r,a,s=this._items,c=this._cluster;for(r=t.length-1;r>-1;r--)a=t[r],Object(o.a)(a._point)&&Object(o.a)(a._position)&&s.set(a.id,new Q4(a));for(r=i.length-1;r>-1;r--)a=i[r],Object(o.a)(a._point)&&Object(o.a)(a._position)?s.contains(a.id)||s.set(a.id,new Q4(a)):(J4(s.get(a.id),a,c),s.remove(a.id));for(r=n.length-1;r>-1;r--)a=n[r],J4(s.get(a.id),a,c),s.remove(a.id)};var e9=Z4,t9=new ZD(0),n9={},i9=new Hf,r9=new wI(Hf.WHITE),o9=new ZD(!0),a9=new ZD(RR.DISABLED),s9=new ZD(new $_),c9=new ZD(JM.BOTH);function l9(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function u9(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function h9(e,t){if(!Object(o.a)(e))throw new a.a("entity is required");if(!Object(o.a)(t))throw new a.a("scene is required");this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener(h9.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new wn.a,this._showProperty=void 0,this._materialProperty=void 0,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._depthFailMaterialProperty=void 0,this._geometryOptions=new l9,this._groundGeometryOptions=new u9,this._id="polyline-"+e.id,this._clampToGround=!1,this._supportsPolylinesOnTerrain=YF.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties(h9.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!Object(o.a)(this._entity.availability)&&cP.isConstant(this._showProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},depthFailMaterialProperty:{get:function(){return this._depthFailMaterialProperty}},outlineEnabled:{value:!1},hasConstantOutline:{value:!0},outlineColorProperty:{value:void 0},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{value:!1},geometryChanged:{get:function(){return this._geometryChanged}},arcType:{get:function(){return this._arcType}},clampToGround:{get:function(){return this._clampToGround&&this._supportsPolylinesOnTerrain}},zIndex:{get:function(){return this._zIndex}}}),h9.prototype.isOutlineVisible=function(e){return!1},h9.prototype.isFilled=function(e){var t=this._entity,n=this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e);return Object(r.a)(n,!1)},h9.prototype.createFillGeometryInstance=function(e){if(!Object(o.a)(e))throw new a.a("time is required.");if(!this._fillEnabled)throw new a.a("This instance does not represent a filled geometry.");var t,n=this._entity,i=n.isAvailable(e),r=new bS(i&&n.isShowing&&this._showProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),c={show:r,distanceDisplayCondition:K_.fromDistanceDisplayCondition(s)};return this._materialProperty instanceof wI&&(Object(o.a)(this._materialProperty.color)&&(this._materialProperty.color.isConstant||i)&&(t=this._materialProperty.color.getValue(e,i9)),Object(o.a)(t)||(t=Hf.WHITE),c.color=Uf.fromColor(t)),this.clampToGround?new fh({id:n,geometry:new WO(this._groundGeometryOptions),attributes:c}):(Object(o.a)(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof wI&&(Object(o.a)(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||i)&&(t=this._depthFailMaterialProperty.color.getValue(e,i9)),Object(o.a)(t)||(t=Hf.WHITE),c.depthFailColor=Uf.fromColor(t)),new fh({id:n,geometry:new zA(this._geometryOptions),attributes:c}))},h9.prototype.createOutlineGeometryInstance=function(e){throw new a.a("This instance does not represent an outlined geometry.")},h9.prototype.isDestroyed=function(){return!1},h9.prototype.destroy=function(){this._entitySubscription(),Ks(this)},h9.prototype._onEntityPropertyChanged=function(e,t,n,i){if("availability"===t||"polyline"===t){var a=this._entity.polyline;if(Object(o.a)(a)){var s=a.positions,c=a.show;if(Object(o.a)(c)&&c.isConstant&&!c.getValue(EC.MINIMUM_VALUE)||!Object(o.a)(s))this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));else{var l=a.zIndex,u=Object(r.a)(a.material,r9),h=u instanceof wI;this._materialProperty=u,this._depthFailMaterialProperty=a.depthFailMaterial,this._showProperty=Object(r.a)(c,o9),this._shadowsProperty=Object(r.a)(a.shadows,a9),this._distanceDisplayConditionProperty=Object(r.a)(a.distanceDisplayCondition,s9),this._classificationTypeProperty=Object(r.a)(a.classificationType,c9),this._fillEnabled=!0,this._zIndex=Object(r.a)(l,t9);var d=a.width,f=a.arcType,p=a.clampToGround,m=a.granularity;if(s.isConstant&&cP.isConstant(d)&&cP.isConstant(f)&&cP.isConstant(m)&&cP.isConstant(p)&&cP.isConstant(l)){var g,v=this._geometryOptions,_=s.getValue(EC.MINIMUM_VALUE,v.positions);if(!Object(o.a)(_)||_.length<2)return void(this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this)));g=h&&(!Object(o.a)(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof wI)?Ij.VERTEX_FORMAT:jj.VERTEX_FORMAT,v.vertexFormat=g,v.positions=_,v.width=Object(o.a)(d)?d.getValue(EC.MINIMUM_VALUE):void 0,v.arcType=Object(o.a)(f)?f.getValue(EC.MINIMUM_VALUE):void 0,v.granularity=Object(o.a)(m)?m.getValue(EC.MINIMUM_VALUE):void 0;var b=this._groundGeometryOptions;b.positions=_,b.width=v.width,b.arcType=v.arcType,b.granularity=v.granularity,this._clampToGround=!!Object(o.a)(p)&&p.getValue(EC.MINIMUM_VALUE),!this._clampToGround&&Object(o.a)(l)&&G_("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}else this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this))}}else this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this))}},h9.prototype.createDynamicUpdater=function(e,t){if(i.a.defined("primitives",e),i.a.defined("groundPrimitives",t),!this._dynamic)throw new a.a("This instance does not represent dynamic geometry.");return new f9(e,t,this)};var d9={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function f9(e,t,n){this._line=void 0,this._primitives=e,this._groundPrimitives=t,this._groundPolylinePrimitive=void 0,this._material=void 0,this._geometryUpdater=n,this._positions=[]}function p9(e){if(Object(o.a)(e._line))return e._line;var t=e._geometryUpdater._scene.id,n=n9[t],i=e._primitives;!Object(o.a)(n)||n.isDestroyed()?(n=new PX,n9[t]=n,i.add(n)):i.contains(n)||i.add(n);var r=n.add();return r.id=e._geometryUpdater._entity,e._line=r,r}f9.prototype.update=function(e){var t=this._geometryUpdater,n=t._entity,i=n.polyline,r=i.positions,a=cP.getValueOrUndefined(r,e,this._positions);t._clampToGround=cP.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=a,t._groundGeometryOptions.width=cP.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=cP.getValueOrDefault(i._arcType,e,tl.GEODESIC),t._groundGeometryOptions.granularity=cP.getValueOrDefault(i._granularity,e,9999);var s=this._groundPrimitives;if(Object(o.a)(this._groundPolylinePrimitive)&&(s.remove(this._groundPolylinePrimitive),this._groundPolylinePrimitive=void 0),t.clampToGround){if(!n.isShowing||!n.isAvailable(e)||!cP.getValueOrDefault(i._show,e,!0))return;if(!Object(o.a)(a)||a.length<2)return;var c,l=t.fillMaterialProperty;if(l instanceof wI)c=new Ij;else{var u=Aj.getValue(e,l,this._material);c=new jj({material:u,translucent:u.isTranslucent()}),this._material=u}return this._groundPolylinePrimitive=s.add(new kj({geometryInstances:t.createFillGeometryInstance(e),appearance:c,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),cP.getValueOrUndefined(t.zIndex,e)),void(Object(o.a)(this._line)&&(this._line.show=!1))}var h=p9(this);if(n.isShowing&&n.isAvailable(e)&&cP.getValueOrDefault(i._show,e,!0))if(!Object(o.a)(a)||a.length<2)h.show=!1;else{var d=tl.GEODESIC;d=cP.getValueOrDefault(i._arcType,e,d);var f=t._scene.globe;d!==tl.NONE&&Object(o.a)(f)&&(d9.ellipsoid=f.ellipsoid,d9.positions=a,d9.granularity=cP.getValueOrUndefined(i._granularity,e),d9.height=yg.extractHeights(a,f.ellipsoid),a=d===tl.GEODESIC?yg.generateCartesianArc(d9):yg.generateCartesianRhumbArc(d9)),h.show=!0,h.positions=a.slice(),h.material=Aj.getValue(e,t.fillMaterialProperty,h.material),h.width=cP.getValueOrDefault(i._width,e,1),h.distanceDisplayCondition=cP.getValueOrUndefined(i._distanceDisplayCondition,e,h.distanceDisplayCondition)}else h.show=!1},f9.prototype.getBoundingSphere=function(e){if(i.a.defined("result",e),this._geometryUpdater.clampToGround){var t=this._groundPolylinePrimitive;if(Object(o.a)(t)&&t.show&&t.ready){var n=t.getGeometryInstanceAttributes(this._geometryUpdater._entity);if(Object(o.a)(n)&&Object(o.a)(n.boundingSphere))return gt.clone(n.boundingSphere,e),aP.DONE}return Object(o.a)(t)&&!t.ready?aP.PENDING:aP.DONE}var r=p9(this);return r.show&&r.positions.length>0?(gt.fromPoints(r.positions,e),aP.DONE):aP.FAILED},f9.prototype.isDestroyed=function(){return!1},f9.prototype.destroy=function(){var e=this._geometryUpdater._scene.id,t=n9[e];Object(o.a)(t)&&(t.remove(this._line),0===t.length&&(this._primitives.removeAndDestroy(t),delete n9[e])),Object(o.a)(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),Ks(this)};var m9=h9,g9=new Hf,v9=new $_,_9=new $_;function b9(e,t,n,i,r){var o;o=n instanceof wI?Ij:jj,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=o,this.materialProperty=n,this.updaters=new sl,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new sl,this.material=void 0,this.updatersWithAttributes=new sl,this.attributes=new sl,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(b9.prototype.onMaterialChanged,this),this.subscriptions=new sl,this.showsUpdated=new sl,this.zIndex=i,this._asynchronous=r}function y9(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=Object(r.a)(n,!0)}b9.prototype.onMaterialChanged=function(){this.invalidated=!0},b9.prototype.isMaterial=function(e){var t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof wI&&t instanceof wI||Object(o.a)(t)&&t.equals(n)},b9.prototype.add=function(e,t,n){var i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),t.hasConstantFill&&t.fillMaterialProperty.isConstant&&cP.isConstant(t.distanceDisplayConditionProperty)){var r=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener((function(e,n,i,o){"isShowing"===n&&r.showsUpdated.set(t.id,t)})))}else this.updatersWithAttributes.set(i,t);this.createPrimitive=!0},b9.prototype.remove=function(e){var t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);var n=this.subscriptions.get(t);return Object(o.a)(n)&&(n(),this.subscriptions.remove(t)),!0}return!1},b9.prototype.update=function(e){var t,n=!0,i=this.primitive,r=this.orderedGroundPrimitives,a=this.geometry.values;if(this.createPrimitive){if(a.length>0)Object(o.a)(i)&&(Object(o.a)(this.oldPrimitive)?r.remove(i):this.oldPrimitive=i),i=new kj({show:!1,asynchronous:this._asynchronous,geometryInstances:a.slice(),appearance:new this.appearanceType,classificationType:this.classificationType}),this.appearanceType===jj&&(this.material=Aj.getValue(e,this.materialProperty,this.material),i.appearance.material=this.material),r.add(i,this.zIndex),n=!1;else{Object(o.a)(i)&&(r.remove(i),i=void 0);var s=this.oldPrimitive;Object(o.a)(s)&&(r.remove(s),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1}else if(Object(o.a)(i)&&i.ready){i.show=!0,Object(o.a)(this.oldPrimitive)&&(r.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===jj&&(this.material=Aj.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);var c=this.updatersWithAttributes.values,l=c.length;for(t=0;t<l;t++){var u=c[t],h=u.entity,d=this.geometry.get(u.id),f=this.attributes.get(d.id.id);if(Object(o.a)(f)||(f=i.getGeometryInstanceAttributes(d.id),this.attributes.set(d.id.id,f)),!u.fillMaterialProperty.isConstant){var p=u.fillMaterialProperty.color,m=cP.getValueOrDefault(p,e,Hf.WHITE,g9);Hf.equals(f._lastColor,m)||(f._lastColor=Hf.clone(m,f._lastColor),f.color=Uf.toValue(m,f.color))}var g=h.isShowing&&(u.hasConstantFill||u.isFilled(e));g!==(1===f.show[0])&&(f.show=bS.toValue(g,f.show));var v=u.distanceDisplayConditionProperty;if(!cP.isConstant(v)){var _=cP.getValueOrDefault(v,e,_9,v9);$_.equals(_,f._lastDistanceDisplayCondition)||(f._lastDistanceDisplayCondition=$_.clone(_,f._lastDistanceDisplayCondition),f.distanceDisplayCondition=K_.toValue(_,f.distanceDisplayCondition))}}this.updateShows(i)}else Object(o.a)(i)&&!i.ready&&(n=!1);return n},b9.prototype.updateShows=function(e){for(var t=this.showsUpdated.values,n=t.length,i=0;i<n;i++){var r=t[i],a=r.entity,s=this.geometry.get(r.id),c=this.attributes.get(s.id.id);Object(o.a)(c)||(c=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,c));var l=a.isShowing;l!==(1===c.show[0])&&(c.show=bS.toValue(l,c.show),s.attributes.show.value[0]=c.show[0])}this.showsUpdated.removeAll()},b9.prototype.contains=function(e){return this.updaters.contains(e.id)},b9.prototype.getBoundingSphere=function(e,t){var n=this.primitive;if(!n.ready)return aP.PENDING;var i=n.getGeometryInstanceAttributes(e.entity);return!Object(o.a)(i)||!Object(o.a)(i.boundingSphere)||Object(o.a)(i.show)&&0===i.show[0]?aP.FAILED:(i.boundingSphere.clone(t),aP.DONE)},b9.prototype.destroy=function(){var e=this.primitive,t=this.orderedGroundPrimitives;Object(o.a)(e)&&t.remove(e);var n=this.oldPrimitive;Object(o.a)(n)&&t.remove(n),this.removeMaterialSubscription()},y9.prototype.add=function(e,t){for(var n=this._items,i=n.length,r=t.createFillGeometryInstance(e),o=cP.getValueOrDefault(t.zIndex,0),a=0;a<i;++a){var s=n[a];if(s.isMaterial(t)&&s.zIndex===o)return void s.add(e,t,r)}var c=new b9(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,o,this._asynchronous);c.add(e,t,r),n.push(c)},y9.prototype.remove=function(e){for(var t=this._items,n=t.length-1;n>=0;n--){var i=t[n];if(i.remove(e)){0===i.updaters.length&&(t.splice(n,1),i.destroy());break}}},y9.prototype.update=function(e){var t,n=this._items;for(t=n.length-1;t>=0;t--){var i=n[t];if(i.invalidated){n.splice(t,1);for(var r=i.updaters.values,o=r.length,a=0;a<o;a++)this.add(e,r[a]);i.destroy()}}var s=!0;for(t=0;t<n.length;t++)s=n[t].update(e)&&s;return s},y9.prototype.getBoundingSphere=function(e,t){for(var n=this._items,i=n.length,r=0;r<i;r++){var o=n[r];if(o.contains(e))return o.getBoundingSphere(e,t)}return aP.FAILED},y9.prototype.removeAllPrimitives=function(){for(var e=this._items,t=e.length,n=0;n<t;n++)e[n].destroy();this._items.length=0};var w9=y9,O9=[];function C9(e,t){for(var n=e._batches,i=n.length,r=0;r<i;r++)n[r].remove(t)}function E9(e,t,n){if(n.isDynamic)e._dynamicBatch.add(t,n);else if(n.clampToGround&&n.fillEnabled){var i=n.classificationTypeProperty.getValue(t);e._groundBatches[i].add(t,n)}else{var r;n.fillEnabled&&(r=n.shadowsProperty.getValue(t));var a,s=0;Object(o.a)(n.depthFailMaterialProperty)&&(s=n.depthFailMaterialProperty instanceof wI?1:2),Object(o.a)(r)&&(a=r+s*RR.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof wI?e._colorBatches[a].add(t,n):e._materialBatches[a].add(t,n))}}function A9(e,t,n,o){var a;i.a.defined("scene",e),i.a.defined("entityCollection",t),o=Object(r.a)(o,e.groundPrimitives),n=Object(r.a)(n,e.primitives),this._scene=e,this._primitives=n,this._entityCollection=void 0,this._addedObjects=new sl,this._removedObjects=new sl,this._changedObjects=new sl;var s=RR.NUMBER_OF_SHADOW_MODES;for(this._colorBatches=new Array(3*s),this._materialBatches=new Array(3*s),a=0;a<s;++a)this._colorBatches[a]=new c3(n,Ij,void 0,!1,a),this._materialBatches[a]=new g3(n,jj,void 0,!1,a),this._colorBatches[a+s]=new c3(n,Ij,Ij,!1,a),this._materialBatches[a+s]=new g3(n,jj,Ij,!1,a),this._colorBatches[a+2*s]=new c3(n,Ij,jj,!1,a),this._materialBatches[a+2*s]=new g3(n,jj,jj,!1,a);this._dynamicBatch=new G2(n,o);var c=JM.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(c),a=0;a<c;++a)this._groundBatches[a]=new w9(o,a);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new sl,this._updaters=new sl,this._entityCollection=t,t.collectionChanged.addEventListener(A9.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,O9)}A9.prototype.update=function(e){i.a.defined("time",e);var t,n,r,o,a=this._addedObjects,s=a.values,c=this._removedObjects,l=c.values,u=this._changedObjects,h=u.values;for(t=h.length-1;t>-1;t--)r=(n=h[t]).id,(o=this._updaters.get(r)).entity===n?(C9(this,o),E9(this,e,o)):(l.push(n),s.push(n));for(t=l.length-1;t>-1;t--)r=(n=l[t]).id,C9(this,o=this._updaters.get(r)),o.destroy(),this._updaters.remove(r),this._subscriptions.get(r)(),this._subscriptions.remove(r);for(t=s.length-1;t>-1;t--)r=(n=s[t]).id,o=new m9(n,this._scene),this._updaters.set(r,o),E9(this,e,o),this._subscriptions.set(r,o.geometryChanged.addEventListener(A9._onGeometryChanged,this));a.removeAll(),c.removeAll(),u.removeAll();var d=!0,f=this._batches,p=f.length;for(t=0;t<p;t++)d=f[t].update(e)&&d;return d};var x9=[],T9=new gt;A9.prototype.getBoundingSphere=function(e,t){i.a.defined("entity",e),i.a.defined("result",t);for(var n=x9,r=T9,o=0,a=aP.DONE,s=this._batches,c=s.length,l=this._updaters.get(e.id),u=0;u<c;u++){if((a=s[u].getBoundingSphere(l,r))===aP.PENDING)return aP.PENDING;a===aP.DONE&&(n[o]=gt.clone(r,n[o]),o++)}return 0===o?aP.FAILED:(n.length=o,gt.fromBoundingSpheres(n,t),aP.DONE)},A9.prototype.isDestroyed=function(){return!1},A9.prototype.destroy=function(){var e;this._entityCollection.collectionChanged.removeEventListener(A9.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();var t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();var i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();return this._subscriptions.removeAll(),Ks(this)},A9._onGeometryChanged=function(e){var t=this._removedObjects,n=this._changedObjects,i=e.entity,r=i.id;Object(o.a)(t.get(r))||Object(o.a)(n.get(r))||n.set(r,i)},A9.prototype._onCollectionChanged=function(e,t,n){var i,r,o,a=this._addedObjects,s=this._removedObjects,c=this._changedObjects;for(i=n.length-1;i>-1;i--)r=(o=n[i]).id,a.remove(r)||(s.set(r,o),c.remove(r));for(i=t.length-1;i>-1;i--)r=(o=t[i]).id,s.remove(r)?c.set(r,o):a.set(r,o)};var S9=A9;function D9(e){i.a.typeOf.object("options",e),i.a.typeOf.object("options.scene",e.scene),i.a.typeOf.object("options.dataSourceCollection",e.dataSourceCollection),Cj.initializeTerrainHeights(),kj.initializeTerrainHeights();var t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Ib,this._eventHelper.add(n.dataSourceAdded,this._onDataSourceAdded,this),this._eventHelper.add(n.dataSourceRemoved,this._onDataSourceRemoved,this),this._eventHelper.add(n.dataSourceMoved,this._onDataSourceMoved,this),this._eventHelper.add(t.postRender,this._postRender,this),this._dataSourceCollection=n,this._scene=t,this._visualizersCallback=Object(r.a)(e.visualizersCallback,D9.defaultVisualizersCallback);var o=!1,a=new H2,s=new H2;n.length>0&&(t.primitives.add(a),t.groundPrimitives.add(s),o=!0),this._primitives=a,this._groundPrimitives=s;for(var c=0,l=n.length;c<l;c++)this._onDataSourceAdded(n,n.get(c));var u,h,d=new S1;if(this._onDataSourceAdded(void 0,d),this._defaultDataSource=d,!o){var f=this,p=function(){t.primitives.add(a),t.groundPrimitives.add(s),u(),h(),f._removeDefaultDataSourceListener=void 0,f._removeDataSourceCollectionListener=void 0};u=d.entities.collectionChanged.addEventListener(p),h=n.dataSourceAdded.addEventListener(p)}this._removeDefaultDataSourceListener=u,this._removeDataSourceCollectionListener=h,this._ready=!1}D9.defaultVisualizersCallback=function(e,t,n){var i=n.entities;return[new SP(t,i),new q3(e,i,n._primitives,n._groundPrimitives),new v4(t,i),new P4(e,i),new MZ(e,i),new e9(t,i),new V4(e,i),new S9(e,i,n._primitives,n._groundPrimitives)]},Object.defineProperties(D9.prototype,{scene:{get:function(){return this._scene}},dataSources:{get:function(){return this._dataSourceCollection}},defaultDataSource:{get:function(){return this._defaultDataSource}},ready:{get:function(){return this._ready}}}),D9.prototype.isDestroyed=function(){return!1},D9.prototype.destroy=function(){this._eventHelper.removeAll();for(var e=this._dataSourceCollection,t=0,n=e.length;t<n;++t)this._onDataSourceRemoved(this._dataSourceCollection,e.get(t));return this._onDataSourceRemoved(void 0,this._defaultDataSource),Object(o.a)(this._removeDefaultDataSourceListener)?(this._removeDefaultDataSourceListener(),this._removeDataSourceCollectionListener()):(this._scene.primitives.remove(this._primitives),this._scene.groundPrimitives.remove(this._groundPrimitives)),Ks(this)},D9.prototype.update=function(e){if(i.a.defined("time",e),!qt.initialized)return this._ready=!1,!1;var t,n,r,a,s=!0,c=this._dataSourceCollection,l=c.length;for(t=0;t<l;t++){var u=c.get(t);for(Object(o.a)(u.update)&&(s=u.update(e)&&s),a=(r=u._visualizers).length,n=0;n<a;n++)s=r[n].update(e)&&s}for(a=(r=this._defaultDataSource._visualizers).length,n=0;n<a;n++)s=r[n].update(e)&&s;return this._ready=s,s},D9.prototype._postRender=function(){for(var e=this._scene.frameState,t=this._dataSourceCollection,n=t.length,i=0;i<n;i++){var r=t.get(i),a=r.credit;Object(o.a)(a)&&e.creditDisplay.addCredit(a);var s=r._resourceCredits;if(Object(o.a)(s))for(var c=s.length,l=0;l<c;l++)e.creditDisplay.addCredit(s[l])}};var P9=[],I9=new gt;D9.prototype.getBoundingSphere=function(e,t,n){if(i.a.defined("entity",e),i.a.typeOf.bool("allowPartial",t),i.a.defined("result",n),!this._ready)return aP.PENDING;var r,a,s=this._defaultDataSource;if(!s.entities.contains(e)){s=void 0;var c=this._dataSourceCollection;for(a=c.length,r=0;r<a;r++){var l=c.get(r);if(l.entities.contains(e)){s=l;break}}}if(!Object(o.a)(s))return aP.FAILED;var u=P9,h=I9,d=0,f=aP.DONE,p=s._visualizers,m=p.length;for(r=0;r<m;r++){var g=p[r];if(Object(o.a)(g.getBoundingSphere)){if(f=p[r].getBoundingSphere(e,h),!t&&f===aP.PENDING)return aP.PENDING;f===aP.DONE&&(u[d]=gt.clone(h,u[d]),d++)}}return 0===d?aP.FAILED:(u.length=d,gt.fromBoundingSpheres(u,n),aP.DONE)},D9.prototype._onDataSourceAdded=function(e,t){var n=this._scene,i=this._primitives,r=this._groundPrimitives,o=i.add(new H2),a=r.add(new U2);t._primitives=o,t._groundPrimitives=a;var s=t.clustering;s._initialize(n),o.add(s),t._visualizers=this._visualizersCallback(n,s,t)},D9.prototype._onDataSourceRemoved=function(e,t){var n=this._primitives,i=this._groundPrimitives,r=t._primitives,o=t._groundPrimitives,a=t.clustering;r.remove(a);for(var s=t._visualizers,c=s.length,l=0;l<c;l++)s[l].destroy();n.remove(r),i.remove(o),t._visualizers=void 0},D9.prototype._onDataSourceMoved=function(e,t,n){var i=this._primitives,r=this._groundPrimitives,o=e._primitives,a=e._groundPrimitives;t===n+1?(i.raise(o),r.raise(a)):t===n-1?(i.lower(o),r.lower(a)):0===t?(i.lowerToBottom(o),r.lowerToBottom(a),i.raise(o),r.raise(a)):(i.raiseToTop(o),r.raiseToTop(a))};var M9=D9,R9=new oe,L9=new oe,j9=new oe,F9=new Ae,N9=new O,z9=new O,k9=new O,B9=new O,H9=new O,V9=new O,U9=new hr;function W9(e,t,n){i.a.defined("entity",e),i.a.defined("scene",t),this.entity=e,this.scene=t,this.ellipsoid=Object(r.a)(n,W.WGS84),this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new O,this._defaultOffset3D=void 0,this._offset3D=new O}Object.defineProperties(W9,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=O.clone(e,new O)}}}),W9.defaultOffset3D=new O(-14e3,3500,3500);var G9=new qO,q9=new O;W9.prototype.update=function(e,t){i.a.defined("time",e);var n=this.scene,r=this.ellipsoid,a=n.mode;if(a!==IR.MORPHING){var s=this.entity,c=s.position;if(Object(o.a)(c)){var l=s!==this._lastEntity,u=a!==this._mode,h=n.camera,f=l||u,p=!0;if(l){var m=s.viewFrom,g=Object(o.a)(m);if(!g&&Object(o.a)(t)){G9.pitch=-d.PI_OVER_FOUR,G9.range=0;var v=c.getValue(e,q9);if(Object(o.a)(v)){var _=2-1/Math.max(1,O.magnitude(v)/r.maximumRadius);G9.pitch*=_}h.viewBoundingSphere(t,G9),this.boundingSphere=t,f=!1,p=!1}else g&&Object(o.a)(m.getValue(e,this._offset3D))||O.clone(W9._defaultOffset3D,this._offset3D)}else u||this._mode===IR.SCENE2D||O.clone(h.position,this._offset3D);this._lastEntity=s,this._mode=a,function(e,t,n,i,r,a,s){var c=e.scene.mode,l=r.getValue(a,e._lastCartesian);if(Object(o.a)(l)){var u,h,f,p,m,g,v=!1,_=!1;if(c===IR.SCENE3D){hr.addSeconds(a,.001,U9);var b=r.getValue(U9,N9);if(Object(o.a)(b)||(hr.addSeconds(a,-.001,U9),b=r.getValue(U9,N9),_=!0),Object(o.a)(b)){var y,w=ya.computeFixedToIcrfMatrix(a,R9),C=ya.computeFixedToIcrfMatrix(U9,L9);Object(o.a)(w)&&Object(o.a)(C)?y=oe.transpose(w,j9):(y=ya.computeTemeToPseudoFixedMatrix(a,j9),w=oe.transpose(y,R9),C=ya.computeTemeToPseudoFixedMatrix(U9,L9),oe.transpose(C,C));var E=oe.multiplyByVector(w,l,H9),A=oe.multiplyByVector(C,b,V9);O.subtract(E,A,B9);var x=1e3*O.magnitude(B9),T=d.GRAVITATIONALPARAMETER,S=-T/(x*x-2*T/O.magnitude(E));S<0||S>1.25*s.maximumRadius?(u=z9,O.normalize(l,u),O.negate(u,u),f=O.clone(O.UNIT_Z,k9),h=O.cross(f,u,N9),O.magnitude(h)>d.EPSILON7&&(O.normalize(u,u),O.normalize(h,h),f=O.cross(u,h,k9),O.normalize(f,f),v=!0)):O.equalsEpsilon(l,b,d.EPSILON7)||(f=z9,O.normalize(E,f),O.normalize(A,A),h=O.cross(f,A,k9),_&&(h=O.multiplyByScalar(h,-1,h)),O.equalsEpsilon(h,O.ZERO,d.EPSILON7)||(u=O.cross(h,f,N9),oe.multiplyByVector(y,u,u),oe.multiplyByVector(y,h,h),oe.multiplyByVector(y,f,f),O.normalize(u,u),O.normalize(h,h),O.normalize(f,f),v=!0))}}Object(o.a)(e.boundingSphere)&&(l=e.boundingSphere.center),i&&(p=O.clone(t.position,B9),m=O.clone(t.direction,H9),g=O.clone(t.up,V9));var D=F9;v?(D[0]=u.x,D[1]=u.y,D[2]=u.z,D[3]=0,D[4]=h.x,D[5]=h.y,D[6]=h.z,D[7]=0,D[8]=f.x,D[9]=f.y,D[10]=f.z,D[11]=0,D[12]=l.x,D[13]=l.y,D[14]=l.z,D[15]=0):ya.eastNorthUpToFixedFrame(l,s,D),t._setTransform(D),i&&(O.clone(p,t.position),O.clone(m,t.direction),O.clone(g,t.up),O.cross(m,g,t.right))}if(n){var P=c===IR.SCENE2D||O.equals(e._offset3D,O.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,P)}}(this,h,f,p,c,e,r)}}};var Y9=W9,$9={};!function(e){var t,n,i="File format is not recognized.",r="Error while reading zip file.";try{t=0===new Blob([new DataView(new ArrayBuffer(0))]).size}catch(x){}function o(){var e=-1,t=this;t.append=function(n){var i,r=t.table;for(i=0;i<n.length;i++)e=e>>>8^r[255&(e^n[i])]},t.get=function(){return~e}}function a(e,t){var n,i;return n=new ArrayBuffer(e),i=new Uint8Array(n),t&&i.set(t,0),{buffer:n,array:i,view:new DataView(n)}}function s(){}function c(e){var t,n=this;n.size=0,n.init=function(i,r){var o=new Blob([e],{type:"text/plain"});(t=new u(o)).init((function(){n.size=t.size,i()}),r)},n.readUint8Array=function(e,n,i,r){t.readUint8Array(e,n,i,r)}}function l(e){var t,n=this;n.size=0,n.init=function(i){for(var r=e.length;"="==e.charAt(r-1);)r--;t=e.indexOf(",")+1,n.size=Math.floor(.75*(r-t)),i()},n.readUint8Array=function(n,i,r){var o,s=a(i),c=4*Math.floor(n/3),l=4*Math.ceil((n+i)/3),u=window.atob(e.substring(c+t,l+t)),h=n-3*Math.floor(c/4);for(o=h;o<h+i;o++)s.array[o-h]=u.charCodeAt(o);r(s.array)}}function u(e){this.size=0,this.init=function(t){this.size=e.size,t()},this.readUint8Array=function(t,n,i,r){var o=new FileReader;o.onload=function(e){i(new Uint8Array(e.target.result))},o.onerror=r,o.readAsArrayBuffer(function(e,t,n){return e.slice?e.slice(t,t+n):e.webkitSlice?e.webkitSlice(t,t+n):e.mozSlice?e.mozSlice(t,t+n):e.msSlice?e.msSlice(t,t+n):void 0}(e,t,n))}}function h(){}function d(e){var n;this.init=function(e){n=new Blob([],{type:"text/plain"}),e()},this.writeUint8Array=function(e,i){n=new Blob([n,t?e:e.buffer],{type:"text/plain"}),i()},this.getData=function(t,i){var r=new FileReader;r.onload=function(e){t(e.target.result)},r.onerror=i,r.readAsText(n,e)}}function f(e){var t="",n="";this.init=function(n){t+="data:"+(e||"")+";base64,",n()},this.writeUint8Array=function(e,i){var r,o=n.length,a=n;for(n="",r=0;r<3*Math.floor((o+e.length)/3)-o;r++)a+=String.fromCharCode(e[r]);for(;r<e.length;r++)n+=String.fromCharCode(e[r]);a.length>2?t+=window.btoa(a):n=a,i()},this.getData=function(e){e(t+window.btoa(n))}}function p(e){var n;this.init=function(t){n=new Blob([],{type:e}),t()},this.writeUint8Array=function(i,r){n=new Blob([n,t?i:i.buffer],{type:e}),r()},this.getData=function(e){e(n)}}function m(e,t,n,i,r,o,a,s,c,l){var u,h,d=0;function f(){e.removeEventListener("message",p,!1),s(h)}function p(e){var t=e.data,i=t.data;t.onappend&&(h+=i.length,n.writeUint8Array(i,(function(){o(!1,i),m()}),l)),t.onflush&&(i?(h+=i.length,n.writeUint8Array(i,(function(){o(!1,i),f()}),l)):f()),t.progress&&a&&a(u+t.current,r)}function m(){(u=524288*d)<r?t.readUint8Array(i+u,Math.min(524288,r-u),(function(t){e.postMessage({append:!0,data:t}),d++,a&&a(u,r),o(!0,t)}),c):e.postMessage({flush:!0})}h=0,e.addEventListener("message",p,!1),m()}function g(e,t,n,i,r,o,a,s,c,l){var u,h=0,d=0;!function f(){var p;(u=524288*h)<r?t.readUint8Array(i+u,Math.min(524288,r-u),(function(t){var s=e.append(t,(function(){a&&a(i+u,r)}));d+=s.length,o(!0,t),n.writeUint8Array(s,(function(){o(!1,s),h++,setTimeout(f,1)}),l),a&&a(u,r)}),c):(p=e.flush())?(d+=p.length,n.writeUint8Array(p,(function(){o(!1,p),s(d)}),l)):s(d)}()}function v(e,t,n,i,r,a,s,c,l){var u=0,h=new o;!function o(){var d=524288*u;d<i?e.readUint8Array(n+d,Math.min(524288,i-d),(function(e){r&&h.append(e),s&&s(d,i,e),t.writeUint8Array(e,(function(){u++,o()}),l)}),c):a(i,h.get())}()}function _(e){var t,n,i="",r=["\xc7","\xfc","\xe9","\xe2","\xe4","\xe0","\xe5","\xe7","\xea","\xeb","\xe8","\xef","\xee","\xec","\xc4","\xc5","\xc9","\xe6","\xc6","\xf4","\xf6","\xf2","\xfb","\xf9","\xff","\xd6","\xdc","\xf8","\xa3","\xd8","\xd7","\u0192","\xe1","\xed","\xf3","\xfa","\xf1","\xd1","\xaa","\xba","\xbf","\xae","\xac","\xbd","\xbc","\xa1","\xab","\xbb","_","_","_","\xa6","\xa6","\xc1","\xc2","\xc0","\xa9","\xa6","\xa6","+","+","\xa2","\xa5","+","+","-","-","+","-","+","\xe3","\xc3","+","+","-","-","\xa6","-","+","\xa4","\xf0","\xd0","\xca","\xcb","\xc8","i","\xcd","\xce","\xcf","+","+","_","_","\xa6","\xcc","_","\xd3","\xdf","\xd4","\xd2","\xf5","\xd5","\xb5","\xfe","\xde","\xda","\xdb","\xd9","\xfd","\xdd","\xaf","\xb4","\xad","\xb1","_","\xbe","\xb6","\xa7","\xf7","\xb8","\xb0","\xa8","\xb7","\xb9","\xb3","\xb2","_"," "];for(t=0;t<e.length;t++)i+=(n=255&e.charCodeAt(t))>127?r[n-128]:String.fromCharCode(n);return i}function b(e){return decodeURIComponent(escape(e))}function y(e){var t,n="";for(t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return n}function w(e,t,n,i,r){e.version=t.view.getUint16(n,!0),e.bitFlag=t.view.getUint16(n+2,!0),e.compressionMethod=t.view.getUint16(n+4,!0),e.lastModDateRaw=t.view.getUint32(n+6,!0),e.lastModDate=function(e){var t=(4294901760&e)>>16,n=65535&e;try{return new Date(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&n)>>11,(2016&n)>>5,2*(31&n),0)}catch(x){}}(e.lastModDateRaw),1!==(1&e.bitFlag)?((i||8!=(8&e.bitFlag))&&(e.crc32=t.view.getUint32(n+10,!0),e.compressedSize=t.view.getUint32(n+14,!0),e.uncompressedSize=t.view.getUint32(n+18,!0)),4294967295!==e.compressedSize&&4294967295!==e.uncompressedSize?(e.filenameLength=t.view.getUint16(n+22,!0),e.extraFieldLength=t.view.getUint16(n+24,!0)):r("File is using Zip64 (4gb+ file size).")):r("File contains encrypted entry.")}function O(t,n){function s(){}return s.prototype.getData=function(r,s,c,l){var u,h=this;function d(e,t){u&&u.terminate(),u=null,e&&e(t)}function f(e,t){l&&!function(e){var t=a(4);return t.view.setUint32(0,e),h.crc32==t.view.getUint32(0)}(t)?p():r.getData((function(e){d(s,e)}))}function p(){d(n,"Error while reading file data.")}function _(){d(n,"Error while writing file data.")}t.readUint8Array(h.offset,30,(function(s){var d,b=a(s.length,s);1347093252==b.view.getUint32(0)?(w(h,b,4,!1,n),d=h.offset+30+h.filenameLength+h.extraFieldLength,r.init((function(){0===h.compressionMethod?v(t,r,d,h.compressedSize,l,f,c,p,_):u=function(t,n,i,r,a,s,c,l,u){var h,d=new o;function f(e,t){a&&!e&&d.append(t)}function p(e){s(e,d.get())}return e.zip.useWebWorkers?m(h=new Worker(e.zip.workerScriptsPath+"inflate.js"),t,n,i,r,f,c,p,l,u):g(new e.zip.Inflater,t,n,i,r,f,c,p,l,u),h}(t,r,d,h.compressedSize,l,f,c,p,_)}),_)):n(i)}),p)},{getEntries:function(e){t.size<22?n(i):function e(i,o){t.readUint8Array(t.size-i,i,(function(t){var n=a(t.length,t).view;1347093766!=n.getUint32(0)?e(i+1,o):o(n)}),(function(){n(r)}))}(22,(function(o){var c,l;c=o.getUint32(16,!0),l=o.getUint16(8,!0),t.readUint8Array(c,t.size-c,(function(t){var r,o,c,u,h=0,d=[],f=a(t.length,t);for(r=0;r<l;r++){if(o=new s,1347092738!=f.view.getUint32(h))return void n(i);w(o,f,h+6,!0,n),o.commentLength=f.view.getUint16(h+32,!0),o.directory=16==(16&f.view.getUint8(h+38)),o.offset=f.view.getUint32(h+42,!0),c=y(f.array.subarray(h+46,h+46+o.filenameLength)),o.filename=2048===(2048&o.bitFlag)?b(c):_(c),o.directory||"/"!=o.filename.charAt(o.filename.length-1)||(o.directory=!0),u=y(f.array.subarray(h+46+o.filenameLength+o.extraFieldLength,h+46+o.filenameLength+o.extraFieldLength+o.commentLength)),o.comment=2048===(2048&o.bitFlag)?b(u):_(u),d.push(o),h+=46+o.filenameLength+o.extraFieldLength+o.commentLength}e(d)}),(function(){n(r)}))}))},close:function(e){e&&e()}}}function C(e){return unescape(encodeURIComponent(e))}function E(e){var t,n=[];for(t=0;t<e.length;t++)n.push(e.charCodeAt(t));return n}function A(t,n,i){var r,s={},c=[],l=0;function u(e,t){r&&r.terminate(),r=null,e&&e(t)}function h(){u(n,"Error while writing zip file.")}function d(){u(n,"Error while reading file data.")}return{add:function(f,p,_,b,y){var w,O,A;function x(e,n){var i=a(16);l+=e||0,i.view.setUint32(0,1347094280),"undefined"!=typeof n&&(w.view.setUint32(10,n,!0),i.view.setUint32(4,n,!0)),p&&(i.view.setUint32(8,e,!0),w.view.setUint32(14,e,!0),i.view.setUint32(12,p.size,!0),w.view.setUint32(18,p.size,!0)),t.writeUint8Array(i.array,(function(){l+=16,u(_)}),h)}function T(){y=y||{},f=f.trim(),y.directory&&"/"!=f.charAt(f.length-1)&&(f+="/"),s.hasOwnProperty(f)?n("File already exists."):(O=E(C(f)),c.push(f),function(e){var n;A=y.lastModDate||new Date,w=a(26),s[f]={headerArray:w.array,directory:y.directory,filename:O,offset:l,comment:E(C(y.comment||""))},w.view.setUint32(0,335546376),y.version&&w.view.setUint8(0,y.version),i||0===y.level||y.directory||w.view.setUint16(4,2048),w.view.setUint16(6,(A.getHours()<<6|A.getMinutes())<<5|A.getSeconds()/2,!0),w.view.setUint16(8,(A.getFullYear()-1980<<4|A.getMonth()+1)<<5|A.getDate(),!0),w.view.setUint16(22,O.length,!0),(n=a(30+O.length)).view.setUint32(0,1347093252),n.array.set(w.array,4),n.array.set(O,30),l+=n.array.length,t.writeUint8Array(n.array,e,h)}((function(){p?i||0===y.level?v(p,t,0,p.size,!0,x,b,d,h):r=function(t,n,i,r,a,s,c){var l,u=new o;function h(e,t){e&&u.append(t)}function d(e){r(e,u.get())}return e.zip.useWebWorkers?((l=new Worker(e.zip.workerScriptsPath+"deflate.js")).addEventListener("message",(function e(){l.removeEventListener("message",e,!1),m(l,t,n,0,t.size,h,a,d,s,c)}),!1),l.postMessage({init:!0,level:i})):g(new e.zip.Deflater,t,n,0,t.size,h,a,d,s,c),l}(p,t,y.level,x,b,d,h):x()})))}p?p.init(T,d):T()},close:function(e){var n,i,r,o=0,d=0;for(i=0;i<c.length;i++)o+=46+(r=s[c[i]]).filename.length+r.comment.length;for(n=a(o+22),i=0;i<c.length;i++)r=s[c[i]],n.view.setUint32(d,1347092738),n.view.setUint16(d+4,5120),n.array.set(r.headerArray,d+6),n.view.setUint16(d+32,r.comment.length,!0),r.directory&&n.view.setUint8(d+38,16),n.view.setUint32(d+42,r.offset,!0),n.array.set(r.filename,d+46),n.array.set(r.comment,d+46+r.filename.length),d+=46+r.filename.length+r.comment.length;n.view.setUint32(d,1347093766),n.view.setUint16(d+8,c.length,!0),n.view.setUint16(d+10,c.length,!0),n.view.setUint32(d+12,o,!0),n.view.setUint32(d+16,l,!0),t.writeUint8Array(n.array,(function(){u((function(){t.getData(e)}))}),h)}}}o.prototype.table=function(){var e,t,n,i=[];for(e=0;e<256;e++){for(n=e,t=0;t<8;t++)1&n?n=n>>>1^3988292384:n>>>=1;i[e]=n}return i}(),c.prototype=new s,c.prototype.constructor=c,l.prototype=new s,l.prototype.constructor=l,u.prototype=new s,u.prototype.constructor=u,h.prototype.getData=function(e){e(this.data)},d.prototype=new h,d.prototype.constructor=d,f.prototype=new h,f.prototype.constructor=f,p.prototype=new h,p.prototype.constructor=p,e.zip={Reader:s,Writer:h,BlobReader:u,Data64URIReader:l,TextReader:c,BlobWriter:p,Data64URIWriter:f,TextWriter:d,createReader:function(e,t,n){e.init((function(){t(O(e,n))}),n)},createWriter:function(e,t,n,i){e.init((function(){t(A(e,n,i))}),n)},useWebWorkers:!0},Object.defineProperties(e.zip,{workerScriptsPath:{get:function(){return"undefined"===typeof n&&(n=At("ThirdParty/Workers/")),n}}})}($9);var X9=$9.zip,K9="http://www.google.com/kml/ext/2.2";function Q9(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var Z9=/^data:image\/([^,;]+)/;function J9(e,t){return function(n){e._files[t]=n}}function e6(e){this._time=e}function t6(){this._ids={},this._styles={},this._count=0}function n6(){this._ids={}}function i6(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).entities,n=Object(r.a)(e.kmz,!1);if(!Object(o.a)(t))throw new a.a("entities is required.");var i=i6._createState(e),s=t.values.filter((function(e){return!Object(o.a)(e.parent)})),c=i.kmlDoc,l=c.documentElement;l.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",K9);var u=c.createElement("Document");l.appendChild(u),function e(t,n,i){for(var r,a,s,c=t.kmlDoc,l=t.styleCache,u=t.valueGetter,h=t.idManager,d=i.length,f=0;f<d;++f){var p,m=i[f];r=[],s6(t,m,a=[],s=[]),h6(t,m.polyline,a,s),f6(t,m.rectangle,a,s,r),f6(t,m.polygon,a,s,r),m6(t,m,m.model,a,s);var g=m.availability;Object(o.a)(g)&&(p=c.createElement("TimeSpan"),hr.equals(g.start,EC.MINIMUM_VALUE)||p.appendChild(b6(c,"begin",hr.toIso8601(g.start))),hr.equals(g.stop,EC.MAXIMUM_VALUE)||p.appendChild(b6(c,"end",hr.toIso8601(g.stop))));for(var v=0;v<r.length;++v){var _=r[v];_.setAttribute("id",h.get(m.id)),_.appendChild(b6(c,"name",m.name)),_.appendChild(b6(c,"visibility",m.show)),_.appendChild(b6(c,"description",m.description)),Object(o.a)(p)&&_.appendChild(p),n.appendChild(_)}var b=a.length;if(b>0){var y=c.createElement("Placemark");y.setAttribute("id",h.get(m.id));var w=m.name,O=m.label;if(Object(o.a)(O)){var C=c.createElement("LabelStyle"),E=u.get(O.text);w=Object(o.a)(E)&&E.length>0?E:w;var A=u.getColor(O.fillColor);Object(o.a)(A)&&(C.appendChild(b6(c,"color",A)),C.appendChild(b6(c,"colorMode","normal")));var x=u.get(O.scale);Object(o.a)(x)&&C.appendChild(b6(c,"scale",x)),s.push(C)}y.appendChild(b6(c,"name",w)),y.appendChild(b6(c,"visibility",m.show)),y.appendChild(b6(c,"description",m.description)),Object(o.a)(p)&&y.appendChild(p),n.appendChild(y);var T=s.length;if(T>0){for(var S=c.createElement("Style"),D=0;D<T;++D)S.appendChild(s[D]);y.appendChild(b6(c,"styleUrl",l.get(S)))}if(1===a.length)y.appendChild(a[0]);else if(a.length>1){for(var P=c.createElement("MultiGeometry"),I=0;I<b;++I)P.appendChild(a[I]);y.appendChild(P)}}var M=m._children;if(M.length>0){var R=c.createElement("Folder");R.setAttribute("id",h.get(m.id)),R.appendChild(b6(c,"name",m.name)),R.appendChild(b6(c,"visibility",m.show)),R.appendChild(b6(c,"description",m.description)),n.appendChild(R),e(t,R,M)}}}(i,u,s),i.styleCache.save(u);var h=i.externalFileHandler;return h.promise.then((function(){var e=(new XMLSerializer).serializeToString(i.kmlDoc);return n?function(e,t){var n=Yt.a.defer();return X9.createWriter(new X9.BlobWriter,(function(i){(function(e,t){var n=Yt.a.defer();return e.add("doc.kml",new X9.TextReader(t),(function(){n.resolve()})),n.promise})(i,e).then((function(){var e=Object.keys(t);return function e(t,n,i,r){if(n.length===r)return;var o=n[r],a=Yt.a.defer();return t.add(o,new X9.BlobReader(i[o]),(function(){a.resolve()})),a.promise.then((function(){return e(t,n,i,r+1)}))}(i,e,t,0)})).then((function(){i.close((function(e){n.resolve({kmz:e})}))}))})),n.promise}(e,h.files):{kml:e,externalFiles:h.files}}))}Q9.prototype.texture=function(e){var t,n=this;if("string"===typeof e||e instanceof _t.a){if(!(e=_t.a.createIfNeeded(e)).isDataUri)return e.url;var i=e.url.match(Z9);t="texture_"+ ++this._count,Object(o.a)(i)&&(t+="."+i[1]);var r=e.fetchBlob().then((function(e){n._files[t]=e}));return this._promises.push(r),t}if(e instanceof HTMLCanvasElement){var a=Yt.a.defer();return this._promises.push(a.promise),t="texture_"+ ++this._count+".png",e.toBlob((function(e){n._files[t]=e,a.resolve()})),t}return""},Q9.prototype.model=function(e,t){var n=this._modelCallback;if(!Object(o.a)(n))throw new de.a("Encountered a model entity while exporting to KML, but no model callback was supplied.");var i={},r=n(e,t,i);for(var a in i)if(i.hasOwnProperty(a)){var s=Object(Yt.a)(i[a]);this._promises.push(s),s.then(J9(this,a))}return r},Object.defineProperties(Q9.prototype,{promise:{get:function(){return Yt.a.all(this._promises)}},files:{get:function(){return this._files}}}),e6.prototype.get=function(e,t,n){var i;return Object(o.a)(e)&&(i=Object(o.a)(e.getValue)?e.getValue(this._time,n):e),Object(r.a)(i,t)},e6.prototype.getColor=function(e,t){var n=this.get(e,t);if(Object(o.a)(n))return y6(n)},e6.prototype.getMaterialType=function(e){if(Object(o.a)(e))return e.getType(this._time)},t6.prototype.get=function(e){var t=this._ids,n=e.innerHTML;if(Object(o.a)(t[n]))return t[n];var i="style-"+ ++this._count;return e.setAttribute("id",i),i="#"+i,t[n]=i,this._styles[n]=e,i},t6.prototype.save=function(e){var t=this._styles,n=e.childNodes[0];for(var i in t)t.hasOwnProperty(i)&&e.insertBefore(t[i],n)},n6.prototype.get=function(e){if(!Object(o.a)(e))return this.get(l_());var t=this._ids;return Object(o.a)(t[e])?e.toString()+"-"+ ++t[e]:(t[e]=0,e)},i6._createState=function(e){var t=e.entities,n=new t6,i=t.computeAvailability(),a=Object(o.a)(e.time)?e.time:i.start,s=Object(r.a)(e.defaultAvailability,i),c=Object(r.a)(e.sampleDuration,60);s.start===EC.MINIMUM_VALUE?s.stop===EC.MAXIMUM_VALUE?s=new wC:hr.addSeconds(s.stop,-10*c,s.start):s.stop===EC.MAXIMUM_VALUE&&hr.addSeconds(s.start,10*c,s.stop);var l=new Q9(e.modelCallback);return{kmlDoc:document.implementation.createDocument("http://www.opengis.net/kml/2.2","kml"),ellipsoid:Object(r.a)(e.ellipsoid,W.WGS84),idManager:new n6,styleCache:n,externalFileHandler:l,time:a,valueGetter:new e6(a),sampleDuration:c,defaultAvailability:new lD([s])}};var r6=new O,o6=new R,a6=new hr;function s6(e,t,n,i){var a=e.kmlDoc,s=e.ellipsoid,c=e.valueGetter,l=Object(r.a)(t.billboard,t.point);if(Object(o.a)(l)||Object(o.a)(t.path)){var u=t.position;if(u.isConstant){c.get(u,void 0,r6);var h=b6(a,"coordinates",_6(r6,s)),d=a.createElement("Point"),f=a.createElement("altitudeMode");f.appendChild(v6(e,l.heightReference)),d.appendChild(f),d.appendChild(h),n.push(d);var p=l instanceof nP?u6(e,l):l6(e,l);i.push(p)}else c6(e,t,l,n,i)}}function c6(e,t,n,i,a){var s,c=e.kmlDoc,l=e.ellipsoid,u=e.valueGetter,h=t.position,d=!0;h instanceof nJ?(s=h.intervals,d=!1):s=Object(r.a)(t.availability,e.defaultAvailability);var f,p,m,g=n instanceof bF,v=[];for(f=0;f<s.length;++f){var _=s.get(f),b=d?h:_.data,y=c.createElement("altitudeMode");b instanceof M4?(b=b._value,y.appendChild(v6(e,iP.CLAMP_TO_GROUND))):Object(o.a)(n)?y.appendChild(v6(e,n.heightReference)):y.appendChild(v6(e,iP.NONE));var w=[],C=[];if(b.isConstant){u.get(b,void 0,r6);var E=b6(c,"coordinates",_6(r6,l));w.push(hr.toIso8601(_.start)),C.push(E),w.push(hr.toIso8601(_.stop)),C.push(E)}else if(b instanceof O0)for(m=b._property._times,p=0;p<m.length;++p)w.push(hr.toIso8601(m[p])),b.getValueInReferenceFrame(m[p],AT.FIXED,r6),C.push(_6(r6,l));else if(b instanceof y0){m=b._times;var A=b._values;for(p=0;p<m.length;++p)w.push(hr.toIso8601(m[p])),O.fromArray(A,3*p,r6),C.push(_6(r6,l))}else{var x=e.sampleDuration;_.start.clone(a6),_.isStartIncluded||hr.addSeconds(a6,x,a6);for(var T=_.stop;hr.lessThan(a6,T);)b.getValue(a6,r6),w.push(hr.toIso8601(a6)),C.push(_6(r6,l)),hr.addSeconds(a6,x,a6);_.isStopIncluded&&hr.equals(a6,T)&&(b.getValue(a6,r6),w.push(hr.toIso8601(a6)),C.push(_6(r6,l)))}var S=c.createElementNS(K9,"Track");S.appendChild(y);for(var D=0;D<w.length;++D){var P=b6(c,"when",w[D]),I=b6(c,"coord",C[D],K9);S.appendChild(P),S.appendChild(I)}g&&S.appendChild(p6(e,n)),v.push(S)}if(1===v.length)i.push(v[0]);else if(v.length>1){var M=c.createElementNS(K9,"MultiTrack");for(f=0;f<v.length;++f)M.appendChild(v[f]);i.push(M)}if(Object(o.a)(n)&&!g){var R=n instanceof nP?u6(e,n):l6(e,n);a.push(R)}var L=t.path;if(Object(o.a)(L)){var j=u.get(L.width),F=L.material;if(Object(o.a)(F)||Object(o.a)(j)){var N=c.createElement("LineStyle");Object(o.a)(j)&&N.appendChild(b6(c,"width",j)),g6(e,F,N),a.push(N)}}}function l6(e,t){var n=e.kmlDoc,i=e.valueGetter,r=n.createElement("IconStyle"),a=i.getColor(t.color);Object(o.a)(a)&&(r.appendChild(b6(n,"color",a)),r.appendChild(b6(n,"colorMode","normal")));var s=i.get(t.pixelSize);return Object(o.a)(s)&&r.appendChild(b6(n,"scale",s/32)),r}function u6(e,t){var n=e.kmlDoc,i=e.valueGetter,a=e.externalFileHandler,s=n.createElement("IconStyle"),c=i.get(t.image);if(Object(o.a)(c)){c=a.texture(c);var l=n.createElement("Icon");l.appendChild(b6(n,"href",c));var u=i.get(t.imageSubRegion);Object(o.a)(u)&&(l.appendChild(b6(n,"x",u.x,K9)),l.appendChild(b6(n,"y",u.y,K9)),l.appendChild(b6(n,"w",u.width,K9)),l.appendChild(b6(n,"h",u.height,K9))),s.appendChild(l)}var h=i.getColor(t.color);Object(o.a)(h)&&(s.appendChild(b6(n,"color",h)),s.appendChild(b6(n,"colorMode","normal")));var f=i.get(t.scale);Object(o.a)(f)&&s.appendChild(b6(n,"scale",f));var p=i.get(t.pixelOffset);if(Object(o.a)(p)){f=Object(r.a)(f,1),Mt.divideByScalar(p,f,p);var m=i.get(t.width,32),g=i.get(t.height,32),v=i.get(t.horizontalOrigin,rP.CENTER);v===rP.CENTER?p.x-=.5*m:v===rP.RIGHT&&(p.x-=m);var _=i.get(t.verticalOrigin,oP.CENTER);_===oP.TOP?p.y+=g:_===oP.CENTER&&(p.y+=.5*g);var b=n.createElement("hotSpot");b.setAttribute("x",-p.x),b.setAttribute("y",p.y),b.setAttribute("xunits","pixels"),b.setAttribute("yunits","pixels"),s.appendChild(b)}var y=i.get(t.rotation),w=i.get(t.alignedAxis);return Object(o.a)(y)&&O.equals(O.UNIT_Z,w)&&(0===(y=d.toDegrees(-y))&&(y=360),s.appendChild(b6(n,"heading",y))),s}function h6(e,t,n,i){var r=e.kmlDoc,a=e.ellipsoid,s=e.valueGetter;if(Object(o.a)(t)){var c,l=r.createElement("LineString"),u=r.createElement("altitudeMode"),h=s.get(t.clampToGround,!1);h?(l.appendChild(b6(r,"tessellate",!0)),c=r.createTextNode("clampToGround")):c=r.createTextNode("absolute"),u.appendChild(c),l.appendChild(u);var d=t.positions,f=b6(r,"coordinates",_6(s.get(d),a));l.appendChild(f);var p=s.get(t.zIndex);h&&Object(o.a)(p)&&l.appendChild(b6(r,"drawOrder",p,K9)),n.push(l);var m=r.createElement("LineStyle"),g=s.get(t.width);Object(o.a)(g)&&m.appendChild(b6(r,"width",g)),g6(e,t.material,m),i.push(m)}}function d6(e,t,n,i){for(var r=e.kmlDoc,o=e.ellipsoid,a=[],s=t.length,c=0;c<s;++c)R.fromCartesian(t[c],o,o6),a.push(d.toDegrees(o6.longitude)+","+d.toDegrees(o6.latitude)+","+(i?o6.height:n));var l=b6(r,"coordinates",a.join(" ")),u=r.createElement("LinearRing");return u.appendChild(l),u}function f6(e,t,n,i,r){var a=e.kmlDoc,s=e.valueGetter;if(Object(o.a)(t)){var c=t instanceof jF;if(c&&"Image"===s.getMaterialType(t.material))!function(e,t,n){var i=e.kmlDoc,r=e.valueGetter,a=e.externalFileHandler,s=i.createElement("GroundOverlay"),c=i.createElement("altitudeMode");c.appendChild(v6(e,t.heightReference)),s.appendChild(c);var l=r.get(t.height);Object(o.a)(l)&&s.appendChild(b6(i,"altitude",l));var u=r.get(t.coordinates),h=i.createElement("LatLonBox");h.appendChild(b6(i,"north",d.toDegrees(u.north))),h.appendChild(b6(i,"south",d.toDegrees(u.south))),h.appendChild(b6(i,"east",d.toDegrees(u.east))),h.appendChild(b6(i,"west",d.toDegrees(u.west))),s.appendChild(h);var f=r.get(t.material),p=a.texture(f.image),m=i.createElement("Icon");m.appendChild(b6(i,"href",p)),s.appendChild(m);var g=f.color;Object(o.a)(g)&&s.appendChild(b6(i,"color",y6(f.color)));n.push(s)}(e,t,r);else{var l=a.createElement("Polygon"),u=s.get(t.extrudedHeight,0);u>0&&l.appendChild(b6(a,"extrude",!0));for(var h=c?function(e,t,n){var i,r=e.kmlDoc,o=e.valueGetter,a=o.get(t.height,0);n>0&&(a=n);for(var s=t.coordinates,c=o.get(s),l=[],u=[Se.northeast,Se.southeast,Se.southwest,Se.northwest],h=0;h<4;++h)u[h](c,o6),l.push(d.toDegrees(o6.longitude)+","+d.toDegrees(o6.latitude)+","+a);i=b6(r,"coordinates",l.join(" "));var f=r.createElement("outerBoundaryIs"),p=r.createElement("LinearRing");return p.appendChild(i),f.appendChild(p),[f]}(e,t,u):function(e,t,n){var i=e.kmlDoc,r=e.valueGetter,a=r.get(t.height,0),s=r.get(t.perPositionHeight,!1);!s&&n>0&&(a=n);var c=[],l=t.hierarchy,u=r.get(l),h=Array.isArray(u)?u:u.positions,d=i.createElement("outerBoundaryIs");d.appendChild(d6(e,h,a,s)),c.push(d);var f=u.holes;if(Object(o.a)(f))for(var p=f.length,m=0;m<p;++m){var g=i.createElement("innerBoundaryIs");g.appendChild(d6(e,f[m].positions,a,s)),c.push(g)}return c}(e,t,u),f=h.length,p=0;p<f;++p)l.appendChild(h[p]);var m=a.createElement("altitudeMode");m.appendChild(v6(e,t.heightReference)),l.appendChild(m),n.push(l);var g=a.createElement("PolyStyle"),v=s.get(t.fill,!1);v&&g.appendChild(b6(a,"fill",v)),g6(e,t.material,g);var _=s.get(t.outline,!1);if(_){g.appendChild(b6(a,"outline",_));var b=a.createElement("LineStyle"),y=s.get(t.outlineWidth,1);b.appendChild(b6(a,"width",y));var w=s.getColor(t.outlineColor,Hf.BLACK);b.appendChild(b6(a,"color",w)),b.appendChild(b6(a,"colorMode","normal")),i.push(b)}i.push(g)}}}function p6(e,t){var n=e.kmlDoc,i=e.valueGetter,r=e.externalFileHandler,a=n.createElement("Model"),s=i.get(t.scale);if(Object(o.a)(s)){var c=n.createElement("scale");c.appendChild(b6(n,"x",s)),c.appendChild(b6(n,"y",s)),c.appendChild(b6(n,"z",s)),a.appendChild(c)}var l=n.createElement("Link"),u=r.model(t,e.time);return l.appendChild(b6(n,"href",u)),a.appendChild(l),a}function m6(e,t,n,i,r){var a=e.kmlDoc,s=e.ellipsoid,c=e.valueGetter;if(Object(o.a)(n)){var l=t.position;if(l.isConstant){var u=p6(e,n),h=a.createElement("altitudeMode");h.appendChild(v6(e,n.heightReference)),u.appendChild(h),c.get(l,void 0,r6),R.fromCartesian(r6,s,o6);var f=a.createElement("Location");f.appendChild(b6(a,"longitude",d.toDegrees(o6.longitude))),f.appendChild(b6(a,"latitude",d.toDegrees(o6.latitude))),f.appendChild(b6(a,"altitude",o6.height)),u.appendChild(f),i.push(u)}else c6(e,t,n,i,r)}}function g6(e,t,n){var i=e.kmlDoc,r=e.valueGetter;if(Object(o.a)(t)){var a=r.get(t);if(Object(o.a)(a)){var s;switch(r.getMaterialType(t)){case"Image":s=y6(Hf.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=y6(a.color);break;case"PolylineOutline":s=y6(a.color);var c=y6(a.outlineColor),l=a.outlineWidth;n.appendChild(b6(i,"outerColor",c,K9)),n.appendChild(b6(i,"outerWidth",l,K9));break;case"Stripe":s=y6(a.oddColor)}Object(o.a)(s)&&(n.appendChild(b6(i,"color",s)),n.appendChild(b6(i,"colorMode","normal")))}}}function v6(e,t){var n,i=e.kmlDoc;switch(e.valueGetter.get(t,iP.NONE)){case iP.NONE:n=i.createTextNode("absolute");break;case iP.CLAMP_TO_GROUND:n=i.createTextNode("clampToGround");break;case iP.RELATIVE_TO_GROUND:n=i.createTextNode("relativeToGround")}return n}function _6(e,t){Array.isArray(e)||(e=[e]);for(var n=e.length,i=[],r=0;r<n;++r)R.fromCartesian(e[r],t,o6),i.push(d.toDegrees(o6.longitude)+","+d.toDegrees(o6.latitude)+","+o6.height);return i.join(" ")}function b6(e,t,n,i){"boolean"===typeof(n=Object(r.a)(n,""))&&(n=n?"1":"0");var a=Object(o.a)(i)?e.createElementNS(i,t):e.createElement(t),s="string"===n&&-1!==n.indexOf("<")?e.createCDATASection(n):e.createTextNode(n);return a.appendChild(s),a}function y6(e){for(var t="",n=e.toBytes(),i=3;i>=0;--i)t+=n[i]<16?"0"+n[i].toString(16):n[i].toString(16);return t}var w6,O6,C6={};w6=C6,O6=function(e){var t=function(e){return e},n=function(e){if(null==e)return t;var n,i,r=e.scale[0],o=e.scale[1],a=e.translate[0],s=e.translate[1];return function(e,t){t||(n=i=0);var c=2,l=e.length,u=new Array(l);for(u[0]=(n+=e[0])*r+a,u[1]=(i+=e[1])*o+s;c<l;)u[c]=e[c],++c;return u}},i=function(e){var t,i=n(e.transform),r=1/0,o=r,a=-r,s=-r;function c(e){(e=i(e))[0]<r&&(r=e[0]),e[0]>a&&(a=e[0]),e[1]<o&&(o=e[1]),e[1]>s&&(s=e[1])}function l(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(l);break;case"Point":c(e.coordinates);break;case"MultiPoint":e.coordinates.forEach(c)}}for(t in e.arcs.forEach((function(e){for(var t,n=-1,c=e.length;++n<c;)(t=i(e[n],n))[0]<r&&(r=t[0]),t[0]>a&&(a=t[0]),t[1]<o&&(o=t[1]),t[1]>s&&(s=t[1])})),e.objects)l(e.objects[t]);return[r,o,a,s]},r=function(e,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map((function(t){return o(e,t)}))}:o(e,t)};function o(e,t){var n=t.id,i=t.bbox,r=null==t.properties?{}:t.properties,o=a(e,t);return null==n&&null==i?{type:"Feature",properties:r,geometry:o}:null==i?{type:"Feature",id:n,properties:r,geometry:o}:{type:"Feature",id:n,bbox:i,properties:r,geometry:o}}function a(e,t){var i=n(e.transform),r=e.arcs;function o(e,t){t.length&&t.pop();for(var n=r[e<0?~e:e],o=0,a=n.length;o<a;++o)t.push(i(n[o],o));e<0&&function(e,t){for(var n,i=e.length,r=i-t;r<--i;)n=e[r],e[r++]=e[i],e[i]=n}(t,a)}function a(e){return i(e)}function s(e){for(var t=[],n=0,i=e.length;n<i;++n)o(e[n],t);return t.length<2&&t.push(t[0]),t}function c(e){for(var t=s(e);t.length<4;)t.push(t[0]);return t}function l(e){return e.map(c)}return function e(t){var n,i=t.type;switch(i){case"GeometryCollection":return{type:i,geometries:t.geometries.map(e)};case"Point":n=a(t.coordinates);break;case"MultiPoint":n=t.coordinates.map(a);break;case"LineString":n=s(t.arcs);break;case"MultiLineString":n=t.arcs.map(s);break;case"Polygon":n=l(t.arcs);break;case"MultiPolygon":n=t.arcs.map(l);break;default:return null}return{type:i,coordinates:n}}(t)}var s=function(e,t){var n={},i={},r={},o=[],a=-1;function s(e,t){for(var i in e){var r=e[i];delete t[r.start],delete r.start,delete r.end,r.forEach((function(e){n[e<0?~e:e]=1})),o.push(r)}}return t.forEach((function(n,i){var r,o=e.arcs[n<0?~n:n];o.length<3&&!o[1][0]&&!o[1][1]&&(r=t[++a],t[a]=n,t[i]=r)})),t.forEach((function(t){var n,o,a=function(t){var n,i=e.arcs[t<0?~t:t],r=i[0];return e.transform?(n=[0,0],i.forEach((function(e){n[0]+=e[0],n[1]+=e[1]}))):n=i[i.length-1],t<0?[n,r]:[r,n]}(t),s=a[0],c=a[1];if(n=r[s])if(delete r[n.end],n.push(t),n.end=c,o=i[c]){delete i[o.start];var l=o===n?n:n.concat(o);i[l.start=n.start]=r[l.end=o.end]=l}else i[n.start]=r[n.end]=n;else if(n=i[c])if(delete i[n.start],n.unshift(t),n.start=s,o=r[s]){delete r[o.end];var u=o===n?n:o.concat(n);i[u.start=o.start]=r[u.end=n.end]=u}else i[n.start]=r[n.end]=n;else i[(n=[t]).start=s]=r[n.end=c]=n})),s(r,i),s(i,r),t.forEach((function(e){n[e<0?~e:e]||o.push([e])})),o};function c(e,t,n){var i,r,o;if(arguments.length>1)i=l(0,t,n);else for(r=0,i=new Array(o=e.arcs.length);r<o;++r)i[r]=r;return{type:"MultiLineString",arcs:s(e,i)}}function l(e,t,n){var i,r=[],o=[];function a(e){var t=e<0?~e:e;(o[t]||(o[t]=[])).push({i:e,g:i})}function s(e){e.forEach(a)}function c(e){e.forEach(s)}return function e(t){switch(i=t,t.type){case"GeometryCollection":t.geometries.forEach(e);break;case"LineString":s(t.arcs);break;case"MultiLineString":case"Polygon":c(t.arcs);break;case"MultiPolygon":!function(e){e.forEach(c)}(t.arcs)}}(t),o.forEach(null==n?function(e){r.push(e[0].i)}:function(e){n(e[0].g,e[e.length-1].g)&&r.push(e[0].i)}),r}function u(e,t){var n={},i=[],r=[];function o(e){e.forEach((function(t){t.forEach((function(t){(n[t=t<0?~t:t]||(n[t]=[])).push(e)}))})),i.push(e)}function c(t){return function(e){for(var t,n=-1,i=e.length,r=e[i-1],o=0;++n<i;)t=r,r=e[n],o+=t[0]*r[1]-t[1]*r[0];return Math.abs(o)}(a(e,{type:"Polygon",arcs:[t]}).coordinates[0])}return t.forEach((function e(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(e);break;case"Polygon":o(t.arcs);break;case"MultiPolygon":t.arcs.forEach(o)}})),i.forEach((function(e){if(!e._){var t=[],i=[e];for(e._=1,r.push(t);e=i.pop();)t.push(e),e.forEach((function(e){e.forEach((function(e){n[e<0?~e:e].forEach((function(e){e._||(e._=1,i.push(e))}))}))}))}})),i.forEach((function(e){delete e._})),{type:"MultiPolygon",arcs:r.map((function(t){var i,r=[];if(t.forEach((function(e){e.forEach((function(e){e.forEach((function(e){n[e<0?~e:e].length<2&&r.push(e)}))}))})),(i=(r=s(e,r)).length)>1)for(var o,a,l=1,u=c(r[0]);l<i;++l)(o=c(r[l]))>u&&(a=r[0],r[0]=r[l],r[l]=a,u=o);return r}))}}var h=function(e,t){for(var n=0,i=e.length;n<i;){var r=n+i>>>1;e[r]<t?n=r+1:i=r}return n},d=function(e){if(null==e)return t;var n,i,r=e.scale[0],o=e.scale[1],a=e.translate[0],s=e.translate[1];return function(e,t){t||(n=i=0);var c=2,l=e.length,u=new Array(l),h=Math.round((e[0]-a)/r),d=Math.round((e[1]-s)/o);for(u[0]=h-n,n=h,u[1]=d-i,i=d;c<l;)u[c]=e[c],++c;return u}},f=function(e,t,n,i,r,o){3===arguments.length&&(i=o=Array,r=null);for(var a=new i(e=1<<Math.max(4,Math.ceil(Math.log(e)/Math.LN2))),s=new o(e),c=e-1,l=0;l<e;++l)a[l]=r;function u(i,o){for(var l=t(i)&c,u=a[l],h=0;u!=r;){if(n(u,i))return s[l]=o;if(++h>=e)throw new Error("full hashmap");u=a[l=l+1&c]}return a[l]=i,s[l]=o,o}function h(i,o){for(var l=t(i)&c,u=a[l],h=0;u!=r;){if(n(u,i))return s[l];if(++h>=e)throw new Error("full hashmap");u=a[l=l+1&c]}return a[l]=i,s[l]=o,o}function d(i,o){for(var l=t(i)&c,u=a[l],h=0;u!=r;){if(n(u,i))return s[l];if(++h>=e)break;u=a[l=l+1&c]}return o}function f(){for(var e=[],t=0,n=a.length;t<n;++t){var i=a[t];i!=r&&e.push(i)}return e}return{set:u,maybeSet:h,get:d,keys:f}},p=function(e,t){return e[0]===t[0]&&e[1]===t[1]},m=new ArrayBuffer(16),g=new Uint32Array(m),v=function(e){var t=g[0]^g[1];return 2147483647&(t=t<<5^t>>7^g[2]^g[3])},_=function(e){var t,n,i,r,o=e.coordinates,a=e.lines,s=e.rings,c=function(){for(var e=f(1.4*o.length,E,A,Int32Array,-1,Int32Array),t=new Int32Array(o.length),n=0,i=o.length;n<i;++n)t[n]=e.maybeSet(n,n);return t}(),l=new Int32Array(o.length),u=new Int32Array(o.length),h=new Int32Array(o.length),d=new Int8Array(o.length),m=0;for(t=0,n=o.length;t<n;++t)l[t]=u[t]=h[t]=-1;for(t=0,n=a.length;t<n;++t){var g=a[t],_=g[0],b=g[1];for(i=c[_],r=c[++_],++m,d[i]=1;++_<=b;)C(t,i,i=r,r=c[_]);++m,d[r]=1}for(t=0,n=o.length;t<n;++t)l[t]=-1;for(t=0,n=s.length;t<n;++t){var y=s[t],w=y[0]+1,O=y[1];for(C(t,c[O-1],i=c[w-1],r=c[w]);++w<=O;)C(t,i,i=r,r=c[w])}function C(e,t,n,i){if(l[n]!==e){l[n]=e;var r=u[n];if(r>=0){var o=h[n];r===t&&o===i||r===i&&o===t||(++m,d[n]=1)}else u[n]=t,h[n]=i}}function E(e){return v(o[e])}function A(e,t){return p(o[e],o[t])}l=u=h=null;var x,T=function(e,t,n,i,r){3===arguments.length&&(i=Array,r=null);for(var o=new i(e=1<<Math.max(4,Math.ceil(Math.log(e)/Math.LN2))),a=e-1,s=0;s<e;++s)o[s]=r;function c(i){for(var s=t(i)&a,c=o[s],l=0;c!=r;){if(n(c,i))return!0;if(++l>=e)throw new Error("full hashset");c=o[s=s+1&a]}return o[s]=i,!0}function l(i){for(var s=t(i)&a,c=o[s],l=0;c!=r;){if(n(c,i))return!0;if(++l>=e)break;c=o[s=s+1&a]}return!1}function u(){for(var e=[],t=0,n=o.length;t<n;++t){var i=o[t];i!=r&&e.push(i)}return e}return{add:c,has:l,values:u}}(1.4*m,v,p);for(t=0,n=o.length;t<n;++t)d[x=c[t]]&&T.add(o[x]);return T};function b(e,t,n){for(var i,r=t+(n---t>>1);t<r;++t,--n)i=e[t],e[t]=e[n],e[n]=i}var y=function(e){var t,n,i={};for(t in e)i[t]=null==(n=e[t])?{type:null}:("FeatureCollection"===n.type?w:"Feature"===n.type?O:C)(n);return i};function w(e){var t={type:"GeometryCollection",geometries:e.features.map(O)};return null!=e.bbox&&(t.bbox=e.bbox),t}function O(e){var t,n=C(e.geometry);for(t in null!=e.id&&(n.id=e.id),null!=e.bbox&&(n.bbox=e.bbox),e.properties){n.properties=e.properties;break}return n}function C(e){if(null==e)return{type:null};var t="GeometryCollection"===e.type?{type:"GeometryCollection",geometries:e.geometries.map(C)}:"Point"===e.type||"MultiPoint"===e.type?{type:e.type,coordinates:e.coordinates}:{type:e.type,arcs:e.coordinates};return null!=e.bbox&&(t.bbox=e.bbox),t}function E(e){var t,n=e[0],i=e[1];return i<n&&(t=n,n=i,i=t),n+31*i}function A(e,t){var n,i=e[0],r=e[1],o=t[0],a=t[1];return r<i&&(n=i,i=r,r=n),a<o&&(n=o,o=a,a=n),i===o&&r===a}function x(){return!0}function T(e){return e}function S(e){return null!=e.type}var D=function(e){var t,n=new Array(e.arcs.length),i=0;function r(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(r);break;case"Polygon":o(e.arcs);break;case"MultiPolygon":e.arcs.forEach(o)}}function o(e){for(var t=0,r=e.length;t<r;++t,++i)for(var o=e[t],a=0,s=o.length;a<s;++a){var c=o[a];c<0&&(c=~c);var l=n[c];null==l?n[c]=i:l!==i&&(n[c]=-1)}}for(t in e.objects)r(e.objects[t]);return function(e){for(var t,i=0,r=e.length;i<r;++i)if(-1===n[(t=e[i])<0?~t:t])return!0;return!1}};function P(e){var t=e[0],n=e[1],i=e[2];return Math.abs((t[0]-i[0])*(n[1]-t[1])-(t[0]-n[0])*(i[1]-t[1]))/2}function I(e){for(var t,n=-1,i=e.length,r=e[i-1],o=0;++n<i;)t=r,r=e[n],o+=t[0]*r[1]-t[1]*r[0];return Math.abs(o)/2}var M=function(e,t,n){return t=null==t?Number.MIN_VALUE:+t,null==n&&(n=I),function(i,o){return n(r(e,{type:"Polygon",arcs:[i]}).geometry.coordinates[0],o)>=t}};function R(e,t){return e[1][2]-t[1][2]}function L(e){return[e[0],e[1],0]}function j(e,t){return t-e}var F=Math.PI,N=2*F,z=F/4,k=F/180,B=Math.abs,H=Math.atan2,V=Math.cos,U=Math.sin;function W(e,t){for(var n,i,r=0,o=e.length,a=0,s=e[t?r++:o-1],c=s[0]*k,l=s[1]*k/2+z,u=V(l),h=U(l);r<o;++r){n=c,c=(s=e[r])[0]*k,l=s[1]*k/2+z,i=u,u=V(l);var d=c-n,f=d>=0?1:-1,p=f*d,m=h*(h=U(l)),g=i*u+m*V(p),v=m*f*U(p);a+=H(v,g)}return a}e.bbox=i,e.feature=r,e.mesh=function(e){return a(e,c.apply(this,arguments))},e.meshArcs=c,e.merge=function(e){return a(e,u.apply(this,arguments))},e.mergeArcs=u,e.neighbors=function(e){var t={},n=e.map((function(){return[]}));function i(e,n){e.forEach((function(e){e<0&&(e=~e);var i=t[e];i?i.push(n):t[e]=[n]}))}function r(e,t){e.forEach((function(e){i(e,t)}))}var o={LineString:i,MultiLineString:r,Polygon:r,MultiPolygon:function(e,t){e.forEach((function(e){r(e,t)}))}};for(var a in e.forEach((function e(t,n){"GeometryCollection"===t.type?t.geometries.forEach((function(t){e(t,n)})):t.type in o&&o[t.type](t.arcs,n)})),t)for(var s=t[a],c=s.length,l=0;l<c;++l)for(var u=l+1;u<c;++u){var d,f=s[l],p=s[u];(d=n[f])[a=h(d,p)]!==p&&d.splice(a,0,p),(d=n[p])[a=h(d,f)]!==f&&d.splice(a,0,f)}return n},e.quantize=function(e,t){if(e.transform)throw new Error("already quantized");if(t&&t.scale)c=e.bbox;else{if(!((n=Math.floor(t))>=2))throw new Error("n must be \u22652");var n,r=(c=e.bbox||i(e))[0],o=c[1],a=c[2],s=c[3];t={scale:[a-r?(a-r)/(n-1):1,s-o?(s-o)/(n-1):1],translate:[r,o]}}var c,l,u=d(t),h=e.objects,f={};function p(e){return u(e)}function m(e){var t;switch(e.type){case"GeometryCollection":t={type:"GeometryCollection",geometries:e.geometries.map(m)};break;case"Point":t={type:"Point",coordinates:p(e.coordinates)};break;case"MultiPoint":t={type:"MultiPoint",coordinates:e.coordinates.map(p)};break;default:return e}return null!=e.id&&(t.id=e.id),null!=e.bbox&&(t.bbox=e.bbox),null!=e.properties&&(t.properties=e.properties),t}for(l in h)f[l]=m(h[l]);return{type:"Topology",bbox:c,transform:t,objects:f,arcs:e.arcs.map((function(e){var t,n=0,i=1,r=e.length,o=new Array(r);for(o[0]=u(e[0],0);++n<r;)((t=u(e[n],n))[0]||t[1])&&(o[i++]=t);return 1===i&&(o[i++]=[0,0]),o.length=i,o}))}},e.transform=n,e.untransform=d,e.topology=function(e,t){var n=function(e){var t=1/0,n=1/0,i=-1/0,r=-1/0;function o(e){null!=e&&a.hasOwnProperty(e.type)&&a[e.type](e)}var a={GeometryCollection:function(e){e.geometries.forEach(o)},Point:function(e){s(e.coordinates)},MultiPoint:function(e){e.coordinates.forEach(s)},LineString:function(e){c(e.arcs)},MultiLineString:function(e){e.arcs.forEach(c)},Polygon:function(e){e.arcs.forEach(c)},MultiPolygon:function(e){e.arcs.forEach(l)}};function s(e){var o=e[0],a=e[1];o<t&&(t=o),o>i&&(i=o),a<n&&(n=a),a>r&&(r=a)}function c(e){e.forEach(s)}function l(e){e.forEach(c)}for(var u in e)o(e[u]);return i>=t&&r>=n?[t,n,i,r]:void 0}(e=y(e)),i=t>0&&n&&function(e,t,n){var i=t[0],r=t[1],o=t[2],a=t[3],s=o-i?(n-1)/(o-i):1,c=a-r?(n-1)/(a-r):1;function l(e){return[Math.round((e[0]-i)*s),Math.round((e[1]-r)*c)]}function u(e,t){for(var n,o,a,l,u,h=-1,d=0,f=e.length,p=new Array(f);++h<f;)n=e[h],l=Math.round((n[0]-i)*s),u=Math.round((n[1]-r)*c),l===o&&u===a||(p[d++]=[o=l,a=u]);for(p.length=d;d<t;)d=p.push([p[0][0],p[0][1]]);return p}function h(e){return u(e,2)}function d(e){return u(e,4)}function f(e){return e.map(d)}function p(e){null!=e&&m.hasOwnProperty(e.type)&&m[e.type](e)}var m={GeometryCollection:function(e){e.geometries.forEach(p)},Point:function(e){e.coordinates=l(e.coordinates)},MultiPoint:function(e){e.coordinates=e.coordinates.map(l)},LineString:function(e){e.arcs=h(e.arcs)},MultiLineString:function(e){e.arcs=e.arcs.map(h)},Polygon:function(e){e.arcs=f(e.arcs)},MultiPolygon:function(e){e.arcs=e.arcs.map(f)}};for(var g in e)p(e[g]);return{scale:[1/s,1/c],translate:[i,r]}}(e,n,t),r=function(e){var t,n,i,r,o=e.coordinates,a=e.lines,s=e.rings,c=a.length+s.length;for(delete e.lines,delete e.rings,i=0,r=a.length;i<r;++i)for(t=a[i];t=t.next;)++c;for(i=0,r=s.length;i<r;++i)for(n=s[i];n=n.next;)++c;var l=f(2*c*1.4,v,p),u=e.arcs=[];for(i=0,r=a.length;i<r;++i){t=a[i];do{h(t)}while(t=t.next)}for(i=0,r=s.length;i<r;++i)if((n=s[i]).next)do{h(n)}while(n=n.next);else d(n);function h(e){var t,n,i,r,a,s,c,h;if(i=l.get(t=o[e[0]]))for(c=0,h=i.length;c<h;++c)if(m(r=i[c],e))return e[0]=r[0],void(e[1]=r[1]);if(a=l.get(n=o[e[1]]))for(c=0,h=a.length;c<h;++c)if(g(s=a[c],e))return e[1]=s[0],void(e[0]=s[1]);i?i.push(e):l.set(t,[e]),a?a.push(e):l.set(n,[e]),u.push(e)}function d(e){var t,n,i,r,a;if(n=l.get(o[e[0]]))for(r=0,a=n.length;r<a;++r){if(_(i=n[r],e))return e[0]=i[0],void(e[1]=i[1]);if(b(i,e))return e[0]=i[1],void(e[1]=i[0])}if(n=l.get(t=o[e[0]+y(e)]))for(r=0,a=n.length;r<a;++r){if(_(i=n[r],e))return e[0]=i[0],void(e[1]=i[1]);if(b(i,e))return e[0]=i[1],void(e[1]=i[0])}n?n.push(e):l.set(t,[e]),u.push(e)}function m(e,t){var n=e[0],i=t[0],r=e[1];if(n-r!==i-t[1])return!1;for(;n<=r;++n,++i)if(!p(o[n],o[i]))return!1;return!0}function g(e,t){var n=e[0],i=t[0],r=e[1],a=t[1];if(n-r!==i-a)return!1;for(;n<=r;++n,--a)if(!p(o[n],o[a]))return!1;return!0}function _(e,t){var n=e[0],i=t[0],r=e[1]-n;if(r!==t[1]-i)return!1;for(var a=y(e),s=y(t),c=0;c<r;++c)if(!p(o[n+(c+a)%r],o[i+(c+s)%r]))return!1;return!0}function b(e,t){var n=e[0],i=t[0],r=e[1],a=t[1],s=r-n;if(s!==a-i)return!1;for(var c=y(e),l=s-y(t),u=0;u<s;++u)if(!p(o[n+(u+c)%s],o[a-(u+l)%s]))return!1;return!0}function y(e){for(var t=e[0],n=e[1],i=t,r=i,a=o[i];++i<n;){var s=o[i];(s[0]<a[0]||s[0]===a[0]&&s[1]<a[1])&&(r=i,a=s)}return r-t}return e}(function(e){var t,n,i,r,o,a,s,c=_(e),l=e.coordinates,u=e.lines,h=e.rings;for(n=0,i=u.length;n<i;++n)for(var d=u[n],f=d[0],p=d[1];++f<p;)c.has(l[f])&&(t={0:f,1:d[1]},d[1]=f,d=d.next=t);for(n=0,i=h.length;n<i;++n)for(var m=h[n],g=m[0],v=g,y=m[1],w=c.has(l[g]);++v<y;)c.has(l[v])&&(w?(t={0:v,1:m[1]},m[1]=v,m=m.next=t):(s=y-v,b(r=l,o=g,a=y),b(r,o,o+s),b(r,o+s,a),l[y]=l[g],w=!0,v=g));return e}(function(e){var t=-1,n=[],i=[],r=[];function o(e){e&&a.hasOwnProperty(e.type)&&a[e.type](e)}var a={GeometryCollection:function(e){e.geometries.forEach(o)},LineString:function(e){e.arcs=s(e.arcs)},MultiLineString:function(e){e.arcs=e.arcs.map(s)},Polygon:function(e){e.arcs=e.arcs.map(c)},MultiPolygon:function(e){e.arcs=e.arcs.map(l)}};function s(e){for(var i=0,o=e.length;i<o;++i)r[++t]=e[i];var a={0:t-o+1,1:t};return n.push(a),a}function c(e){for(var n=0,o=e.length;n<o;++n)r[++t]=e[n];var a={0:t-o+1,1:t};return i.push(a),a}function l(e){return e.map(c)}for(var u in e)o(e[u]);return{type:"Topology",coordinates:r,lines:n,rings:i,objects:e}}(e))),o=r.coordinates,a=f(1.4*r.arcs.length,E,A);function s(e){e&&c.hasOwnProperty(e.type)&&c[e.type](e)}e=r.objects,r.bbox=n,r.arcs=r.arcs.map((function(e,t){return a.set(e,t),o.slice(e[0],e[1]+1)})),delete r.coordinates,o=null;var c={GeometryCollection:function(e){e.geometries.forEach(s)},LineString:function(e){e.arcs=l(e.arcs)},MultiLineString:function(e){e.arcs=e.arcs.map(l)},Polygon:function(e){e.arcs=e.arcs.map(l)},MultiPolygon:function(e){e.arcs=e.arcs.map(u)}};function l(e){var t=[];do{var n=a.get(e);t.push(e[0]<e[1]?n:~n)}while(e=e.next);return t}function u(e){return e.map(l)}for(var h in e)s(e[h]);return i&&(r.transform=i,r.arcs=function(e){for(var t=-1,n=e.length;++t<n;){for(var i,r,o=e[t],a=0,s=1,c=o.length,l=o[0],u=l[0],h=l[1];++a<c;)i=(l=o[a])[0],r=l[1],i===u&&r===h||(o[s++]=[i-u,r-h],u=i,h=r);1===s&&(o[s++]=[0,0]),o.length=s}return e}(r.arcs)),r},e.filter=function(e,t){var n,i=e.objects,r={};function o(e){var t,n;switch(e.type){case"Polygon":t=(n=a(e.arcs))?{type:"Polygon",arcs:n}:{type:null};break;case"MultiPolygon":t=(n=e.arcs.map(a).filter(T)).length?{type:"MultiPolygon",arcs:n}:{type:null};break;case"GeometryCollection":t=(n=e.geometries.map(o).filter(S)).length?{type:"GeometryCollection",geometries:n}:{type:null};break;default:return e}return null!=e.id&&(t.id=e.id),null!=e.bbox&&(t.bbox=e.bbox),null!=e.properties&&(t.properties=e.properties),t}function a(e){return e.length&&(n=e[0],t(n,!1))?[e[0]].concat(e.slice(1).filter(s)):null;var n}function s(e){return t(e,!0)}for(n in null==t&&(t=x),i)r[n]=o(i[n]);return function(e){var t,n,i=e.objects,r={},o=e.arcs,a=o.length,s=-1,c=new Array(a),l=0,u=-1;function h(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(h);break;case"LineString":f(e.arcs);break;case"MultiLineString":case"Polygon":e.arcs.forEach(f);break;case"MultiPolygon":e.arcs.forEach(p)}}function d(e){e<0&&(e=~e),c[e]||(c[e]=1,++l)}function f(e){e.forEach(d)}function p(e){e.forEach(f)}function m(e){var t;switch(e.type){case"GeometryCollection":t={type:"GeometryCollection",geometries:e.geometries.map(m)};break;case"LineString":t={type:"LineString",arcs:v(e.arcs)};break;case"MultiLineString":t={type:"MultiLineString",arcs:e.arcs.map(v)};break;case"Polygon":t={type:"Polygon",arcs:e.arcs.map(v)};break;case"MultiPolygon":t={type:"MultiPolygon",arcs:e.arcs.map(_)};break;default:return e}return null!=e.id&&(t.id=e.id),null!=e.bbox&&(t.bbox=e.bbox),null!=e.properties&&(t.properties=e.properties),t}function g(e){return e<0?~c[~e]:c[e]}function v(e){return e.map(g)}function _(e){return e.map(v)}for(n in i)h(i[n]);for(t=new Array(l);++s<a;)c[s]&&(c[s]=++u,t[u]=o[s]);for(n in i)r[n]=m(i[n]);return{type:"Topology",bbox:e.bbox,transform:e.transform,objects:r,arcs:t}}({type:"Topology",bbox:e.bbox,transform:e.transform,objects:r,arcs:e.arcs})},e.filterAttached=D,e.filterAttachedWeight=function(e,t,n){var i=D(e),r=M(e,t,n);return function(e,t){return i(e,t)||r(e,t)}},e.filterWeight=M,e.planarRingArea=I,e.planarTriangleArea=P,e.presimplify=function(e,t){var i=e.transform?n(e.transform):L,r=function(){var e={},t=[],n=0;function i(e,n){for(;n>0;){var i=(n+1>>1)-1,r=t[i];if(R(e,r)>=0)break;t[r._=n]=r,t[e._=n=i]=e}}function r(e,i){for(;;){var r=i+1<<1,o=r-1,a=i,s=t[a];if(o<n&&R(t[o],s)<0&&(s=t[a=o]),r<n&&R(t[r],s)<0&&(s=t[a=r]),a===i)break;t[s._=i]=s,t[e._=i=a]=e}}return e.push=function(e){return i(t[e._=n]=e,n++),n},e.pop=function(){if(!(n<=0)){var e,i=t[0];return--n>0&&(e=t[n],r(t[e._=0]=e,0)),i}},e.remove=function(e){var o,a=e._;if(t[a]===e)return a!==--n&&(R(o=t[n],e)<0?i:r)(t[o._=a]=o,a),a},e}();null==t&&(t=P);var o=e.arcs.map((function(e){var n,o,s,c=[],l=0;for(o=1,s=(e=e.map(i)).length-1;o<s;++o)(n=[e[o-1],e[o],e[o+1]])[1][2]=t(n),c.push(n),r.push(n);for(e[0][2]=e[s][2]=1/0,o=0,s=c.length;o<s;++o)(n=c[o]).previous=c[o-1],n.next=c[o+1];for(;n=r.pop();){var u=n.previous,h=n.next;n[1][2]<l?n[1][2]=l:l=n[1][2],u&&(u.next=h,u[2]=n[2],a(u)),h&&(h.previous=u,h[0]=n[0],a(h))}return e}));function a(e){r.remove(e),e[1][2]=t(e),r.push(e)}return{type:"Topology",bbox:e.bbox,objects:e.objects,arcs:o}},e.quantile=function(e,t){var n=[];return e.arcs.forEach((function(e){e.forEach((function(e){isFinite(e[2])&&n.push(e[2])}))})),n.length&&function(e,t){if(n=e.length){if((t=+t)<=0||n<2)return e[0];if(t>=1)return e[n-1];var n,i=(n-1)*t,r=Math.floor(i),o=e[r],a=e[r+1];return o+(a-o)*(i-r)}}(n.sort(j),t)},e.simplify=function(e,t){t=null==t?Number.MIN_VALUE:+t;var n=e.arcs.map((function(e){for(var n,i=-1,r=0,o=e.length,a=new Array(o);++i<o;)(n=e[i])[2]>=t&&(a[r++]=[n[0],n[1]]);return a.length=r,a}));return{type:"Topology",transform:e.transform,bbox:e.bbox,objects:e.objects,arcs:n}},e.sphericalRingArea=function(e,t){var n=W(e,!0);return t&&(n*=-1),2*(n<0?N+n:n)},e.sphericalTriangleArea=function(e){return 2*B(W(e,!1))},Object.defineProperty(e,"__esModule",{value:!0})},"object"===typeof exports&&"undefined"!==typeof e?O6(exports):O6(w6.topojson=w6.topojson||{});var E6=C6.topojson;function A6(e){return O.fromDegrees(e[0],e[1],e[2])}var x6,T6={"urn:ogc:def:crs:OGC:1.3:CRS84":A6,"EPSG:4326":A6,"urn:ogc:def:crs:EPSG::4326":A6},S6={},D6={},P6=48,I6=Hf.ROYALBLUE,M6=Hf.YELLOW,R6=2,L6=Hf.fromBytes(255,255,0,100),j6=!1,F6={small:24,medium:48,large:64},N6=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function z6(e,t){var n="";for(var i in e)if(e.hasOwnProperty(i)){if(i===t||-1!==N6.indexOf(i))continue;var r=e[i];Object(o.a)(r)&&(n+="object"===typeof r?"<tr><th>"+i+"</th><td>"+z6(r)+"</td></tr>":"<tr><th>"+i+"</th><td>"+r+"</td></tr>")}return n.length>0&&(n='<table class="cesium-infoBox-defaultTable"><tbody>'+n+"</tbody></table>"),n}function k6(e,t){return new oN(function(e,t,n){var i;return function(r,a){return Object(o.a)(i)||(i=e(t,n)),i}}(z6,e,t),!0)}function B6(e,t,n){var i=e.id;if(Object(o.a)(i)&&"Feature"===e.type){for(var r=2,a=i;Object(o.a)(t.getById(a));)a=i+"_"+r,r++;i=a}else i=l_();var s=t.getOrCreateEntity(i),c=e.properties;if(Object(o.a)(c)){var l;s.properties=c;var u=c.title;if(Object(o.a)(u))s.name=u,l="title";else{var h=Number.MAX_VALUE;for(var d in c)if(c.hasOwnProperty(d)&&c[d]){var f=d.toLowerCase();if(h>1&&"title"===f){h=1,l=d;break}h>2&&"name"===f?(h=2,l=d):h>3&&/title/i.test(d)?(h=3,l=d):h>4&&/name/i.test(d)&&(h=4,l=d)}Object(o.a)(l)&&(s.name=c[l])}var p=c.description;null!==p&&(s.description=Object(o.a)(p)?new ZD(p):n(c,l))}return s}function H6(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++)n[i]=t(e[i]);return n}var V6={Feature:W6,FeatureCollection:function(e,t,n,i,r){for(var o=t.features,a=0,s=o.length;a<s;a++)W6(e,o[a],void 0,i,r)},GeometryCollection:G6,LineString:K6,MultiLineString:Q6,MultiPoint:$6,MultiPolygon:e7,Point:Y6,Polygon:J6,Topology:t7},U6={GeometryCollection:G6,LineString:K6,MultiLineString:Q6,MultiPoint:$6,MultiPolygon:e7,Point:Y6,Polygon:J6,Topology:t7};function W6(e,t,n,i,r){if(null!==t.geometry){if(!Object(o.a)(t.geometry))throw new de.a("feature.geometry is required.");var a=t.geometry.type,s=U6[a];if(!Object(o.a)(s))throw new de.a("Unknown geometry type: "+a);s(e,t,t.geometry,i,r)}else B6(t,e._entityCollection,r.describe)}function G6(e,t,n,i,r){for(var a=n.geometries,s=0,c=a.length;s<c;s++){var l=a[s],u=l.type,h=U6[u];if(!Object(o.a)(h))throw new de.a("Unknown geometry type: "+u);h(e,t,l,i,r)}}function q6(e,t,n,i,a){var s,c=a.markerSymbol,l=a.markerColor,u=a.markerSize,h=t.properties;if(Object(o.a)(h)){var d=h["marker-color"];Object(o.a)(d)&&(l=Hf.fromCssColorString(d)),u=Object(r.a)(F6[h["marker-size"]],u);var f=h["marker-symbol"];Object(o.a)(f)&&(c=f)}s=Object(o.a)(c)?1===c.length?e._pinBuilder.fromText(c.toUpperCase(),l,u):e._pinBuilder.fromMakiIconId(c,l,u):e._pinBuilder.fromColor(l,u);var p=new nP;p.verticalOrigin=new ZD(oP.BOTTOM),2===i.length&&a.clampToGround&&(p.heightReference=iP.CLAMP_TO_GROUND);var m=B6(t,e._entityCollection,a.describe);m.billboard=p,m.position=new Zj(n(i));var g=Object(Yt.a)(s).then((function(e){p.image=new ZD(e)})).otherwise((function(){p.image=new ZD(e._pinBuilder.fromColor(l,u))}));e._promises.push(g)}function Y6(e,t,n,i,r){q6(e,t,i,n.coordinates,r)}function $6(e,t,n,i,r){for(var o=n.coordinates,a=0;a<o.length;a++)q6(e,t,i,o[a],r)}function X6(e,t,n,i,r){var a=r.strokeMaterialProperty,s=r.strokeWidthProperty,c=t.properties;if(Object(o.a)(c)){var l,u=c["stroke-width"];Object(o.a)(u)&&(s=new ZD(u));var h=c.stroke;Object(o.a)(h)&&(l=Hf.fromCssColorString(h));var d=c["stroke-opacity"];Object(o.a)(d)&&1!==d&&(Object(o.a)(l)||(l=a.color.clone()),l.alpha=d),Object(o.a)(l)&&(a=new wI(l))}var f=B6(t,e._entityCollection,r.describe),p=new IF;f.polyline=p,p.clampToGround=r.clampToGround,p.material=a,p.width=s,p.positions=new ZD(H6(i,n)),p.arcType=tl.RHUMB}function K6(e,t,n,i,r){X6(e,t,i,n.coordinates,r)}function Q6(e,t,n,i,r){for(var o=n.coordinates,a=0;a<o.length;a++)X6(e,t,i,o[a],r)}function Z6(e,t,n,i,r){if(0!==i.length&&0!==i[0].length){var a=r.strokeMaterialProperty.color,s=r.fillMaterialProperty,c=r.strokeWidthProperty,l=t.properties;if(Object(o.a)(l)){var u,h=l["stroke-width"];Object(o.a)(h)&&(c=new ZD(h));var d=l.stroke;Object(o.a)(d)&&(u=Hf.fromCssColorString(d));var f,p=l["stroke-opacity"];Object(o.a)(p)&&1!==p&&(Object(o.a)(u)||(u=r.strokeMaterialProperty.color.clone()),u.alpha=p),Object(o.a)(u)&&(a=new ZD(u));var m=l.fill;Object(o.a)(m)&&((f=Hf.fromCssColorString(m)).alpha=s.color.alpha),p=l["fill-opacity"],Object(o.a)(p)&&p!==s.color.alpha&&(Object(o.a)(f)||(f=s.color.clone()),f.alpha=p),Object(o.a)(f)&&(s=new wI(f))}var g=new DF;g.outline=new ZD(!0),g.outlineColor=a,g.outlineWidth=c,g.material=s,g.arcType=tl.RHUMB;for(var v=[],_=1,b=i.length;_<b;_++)v.push(new bA(H6(i[_],n)));var y=i[0];g.hierarchy=new ZD(new bA(H6(y,n),v)),y[0].length>2?g.perPositionHeight=new ZD(!0):r.clampToGround||(g.height=0),B6(t,e._entityCollection,r.describe).polygon=g}}function J6(e,t,n,i,r){Z6(e,t,i,n.coordinates,r)}function e7(e,t,n,i,r){for(var o=n.coordinates,a=0;a<o.length;a++)Z6(e,t,i,o[a],r)}function t7(e,t,n,i,r){for(var o in n.objects)if(n.objects.hasOwnProperty(o)){var a=E6.feature(n,n.objects[o]);(0,V6[a.type])(e,a,a,i,r)}}function n7(e){this._name=e,this._changed=new wn.a,this._error=new wn.a,this._isLoading=!1,this._loading=new wn.a,this._entityCollection=new HZ(this),this._promises=[],this._pinBuilder=new SE,this._entityCluster=new x1,this._credit=void 0,this._resourceCredits=[]}n7.load=function(e,t){return(new n7).load(e,t)},Object.defineProperties(n7,{markerSize:{get:function(){return P6},set:function(e){P6=e}},markerSymbol:{get:function(){return x6},set:function(e){x6=e}},markerColor:{get:function(){return I6},set:function(e){I6=e}},stroke:{get:function(){return M6},set:function(e){M6=e}},strokeWidth:{get:function(){return R6},set:function(e){R6=e}},fill:{get:function(){return L6},set:function(e){L6=e}},clampToGround:{get:function(){return j6},set:function(e){j6=e}},crsNames:{get:function(){return T6}},crsLinkHrefs:{get:function(){return S6}},crsLinkTypes:{get:function(){return D6}}}),Object.defineProperties(n7.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{value:void 0,writable:!1},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){if(!Object(o.a)(e))throw new a.a("value must be defined.");this._entityCluster=e}},credit:{get:function(){return this._credit}}}),n7.prototype.load=function(e,t){if(!Object(o.a)(e))throw new a.a("data is required.");mJ.setLoading(this,!0);var n=(t=Object(r.a)(t,r.a.EMPTY_OBJECT)).credit;"string"===typeof n&&(n=new yn(n)),this._credit=n;var i=e,s=t.sourceUri;if("string"===typeof e||e instanceof _t.a){i=(e=_t.a.createIfNeeded(e)).fetchJson(),s=Object(r.a)(s,e.getUrlComponent());var c=this._resourceCredits,l=e.credits;if(Object(o.a)(l))for(var u=l.length,h=0;h<u;h++)c.push(l[h])}t={describe:Object(r.a)(t.describe,k6),markerSize:Object(r.a)(t.markerSize,P6),markerSymbol:Object(r.a)(t.markerSymbol,x6),markerColor:Object(r.a)(t.markerColor,I6),strokeWidthProperty:new ZD(Object(r.a)(t.strokeWidth,R6)),strokeMaterialProperty:new wI(Object(r.a)(t.stroke,M6)),fillMaterialProperty:new wI(Object(r.a)(t.fill,L6)),clampToGround:Object(r.a)(t.clampToGround,j6)};var d=this;return Object(Yt.a)(i,(function(e){return function(e,t,n,i){var r;Object(o.a)(i)&&(r=Iy(i));Object(o.a)(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));var a=V6[t.type];if(!Object(o.a)(a))throw new de.a("Unsupported GeoJSON object type: "+t.type);var s=t.crs,c=null!==s?A6:null;if(Object(o.a)(s)){if(!Object(o.a)(s.properties))throw new de.a("crs.properties is undefined.");var l=s.properties;if("name"===s.type){if(c=T6[l.name],!Object(o.a)(c))throw new de.a("Unknown crs name: "+l.name)}else if("link"===s.type){var u=S6[l.href];if(Object(o.a)(u)||(u=D6[l.type]),!Object(o.a)(u))throw new de.a("Unable to resolve crs link: "+JSON.stringify(l));c=u(l)}else{if("EPSG"!==s.type)throw new de.a("Unknown crs type: "+s.type);if(c=T6["EPSG:"+l.code],!Object(o.a)(c))throw new de.a("Unknown crs EPSG code: "+l.code)}}return Object(Yt.a)(c,(function(i){return e._entityCollection.removeAll(),null!==i&&a(e,t,t,i,n),Yt.a.all(e._promises,(function(){return e._promises.length=0,mJ.setLoading(e,!1),e}))}))}(d,e,t,s)})).otherwise((function(e){return mJ.setLoading(d,!1),d._error.raiseEvent(d,e),console.log(e),Yt.a.reject(e)}))},n7.prototype.update=function(e){return!0};var i7=n7;var r7=function(e,t){this.position=e,this.headingPitchRoll=t},o7={};!function(e,t){e.Autolinker=function(){function e(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1}function t(e,t){for(var n=e.length-1;n>=0;n--)!0===t(e[n])&&e.splice(n,1)}function n(e){throw new Error("Unhandled case for value: '"+e+"'")}var i=function(){function t(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return t.prototype.setTagName=function(e){return this.tagName=e,this},t.prototype.getTagName=function(){return this.tagName||""},t.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},t.prototype.getAttr=function(e){return this.getAttrs()[e]},t.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},t.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},t.prototype.setClass=function(e){return this.setAttr("class",e)},t.prototype.addClass=function(t){for(var n,i=this.getClass(),r=this.whitespaceRegex,o=i?i.split(r):[],a=t.split(r);n=a.shift();)-1===e(o,n)&&o.push(n);return this.getAttrs().class=o.join(" "),this},t.prototype.removeClass=function(t){for(var n,i=this.getClass(),r=this.whitespaceRegex,o=i?i.split(r):[],a=t.split(r);o.length&&(n=a.shift());){var s=e(o,n);-1!==s&&o.splice(s,1)}return this.getAttrs().class=o.join(" "),this},t.prototype.getClass=function(){return this.getAttrs().class||""},t.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},t.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},t.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},t.prototype.getInnerHTML=function(){return this.innerHTML||""},t.prototype.getInnerHtml=function(){return this.getInnerHTML()},t.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),"</",e,">"].join("")},t.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'="'+e[n]+'"');return t.join(" ")},t}();var r=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new i({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},n=this.createCssClass(e);return n&&(t.class=n),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var n=[t],i=e.getCssClassSuffixes(),r=0,o=i.length;r<o;r++)n.push(t+"-"+i[r]);return n.join(" ")}return""},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var n=t.length,i=t.location;return"smart"===i?function(e,t,n){var i,r;null==n?(n="…",r=3,i=8):(r=n.length,i=n.length);var o=function(e){var t="";return e.scheme&&e.host&&(t+=e.scheme+"://"),e.host&&(t+=e.host),e.path&&(t+="/"+e.path),e.query&&(t+="?"+e.query),e.fragment&&(t+="#"+e.fragment),t},a=function(e,t){var i=t/2,r=Math.ceil(i),o=-1*Math.floor(i),a="";return o<0&&(a=e.substr(o)),e.substr(0,r)+n+a};if(e.length<=t)return e;var s=t-r,c=function(e){var t={},n=e,i=n.match(/^([a-z]+):\/\//i);return i&&(t.scheme=i[1],n=n.substr(i[0].length)),(i=n.match(/^(.*?)(?=(\?|#|\/|$))/i))&&(t.host=i[1],n=n.substr(i[0].length)),(i=n.match(/^\/(.*?)(?=(\?|#|$))/i))&&(t.path=i[1],n=n.substr(i[0].length)),(i=n.match(/^\?(.*?)(?=(#|$))/i))&&(t.query=i[1],n=n.substr(i[0].length)),(i=n.match(/^#(.*?)$/i))&&(t.fragment=i[1]),t}(e);if(c.query){var l=c.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);l&&(c.query=c.query.substr(0,l[1].length),e=o(c))}if(e.length<=t)return e;if(c.host&&(c.host=c.host.replace(/^www\./,""),e=o(c)),e.length<=t)return e;var u="";if(c.host&&(u+=c.host),u.length>=s)return c.host.length==t?(c.host.substr(0,t-r)+n).substr(0,s+i):a(u,s).substr(0,s+i);var h="";if(c.path&&(h+="/"+c.path),c.query&&(h+="?"+c.query),h){if((u+h).length>=s)return(u+h).length==t?(u+h).substr(0,t):(u+a(h,s-u.length)).substr(0,s+i);u+=h}if(c.fragment){var d="#"+c.fragment;if((u+d).length>=s)return(u+d).length==t?(u+d).substr(0,t):(u+a(d,s-u.length)).substr(0,s+i);u+=d}if(c.scheme&&c.host){var f=c.scheme+"://";if((u+f).length<s)return(f+u).substr(0,t)}if(u.length<=t)return u;var p="";return s>0&&(p=u.substr(-1*Math.floor(s/2))),(u.substr(0,Math.ceil(s/2))+n+p).substr(0,s+i)}(e,n):"middle"===i?function(e,t,n){if(e.length<=t)return e;var i,r;null==n?(n="…",i=8,r=3):(i=n.length,r=n.length);var o=t-r,a="";return o>0&&(a=e.substr(-1*Math.floor(o/2))),(e.substr(0,Math.ceil(o/2))+n+a).substr(0,o+i)}(e,n):function(e,t,n){return function(e,t,n){var i;return e.length>t&&(null==n?(n="…",i=3):i=n.length,e=e.substring(0,t-i)+n),e}(e,t,n)}(e,n)},e}(),o=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),a=function(e,t){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function s(e,t){function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var c=function(){return(c=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)},l=function(e){function t(t){var n=e.call(this,t)||this;return n.email="",n.email=t.email,n}return s(t,e),t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(o),u=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="",n.hashtag="",n.serviceName=t.serviceName,n.hashtag=t.hashtag,n}return s(t,e),t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case"twitter":return"https://twitter.com/hashtag/"+t;case"facebook":return"https://www.facebook.com/hashtag/"+t;case"instagram":return"https://instagram.com/explore/tags/"+t;default:throw new Error("Unknown service name to point hashtag to: "+e)}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t}(o),h=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="twitter",n.mention="",n.mention=t.mention,n.serviceName=t.serviceName,n}return s(t,e),t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),n=this.getServiceName();return n&&t.push(n),t},t}(o),d=function(e){function t(t){var n=e.call(this,t)||this;return n.number="",n.plusSign=!1,n.number=t.number,n.plusSign=t.plusSign,n}return s(t,e),t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(o),f=function(e){function t(t){var n=e.call(this,t)||this;return n.url="",n.urlMatchType="scheme",n.protocolUrlMatch=!1,n.protocolRelativeMatch=!1,n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.schemePrefixRegex=/^(https?:\/\/)?/i,n.wwwPrefixRegex=/^(https?:\/\/)?(www\.)?/i,n.protocolRelativeRegex=/^\/\//,n.protocolPrepended=!1,n.urlMatchType=t.urlMatchType,n.url=t.url,n.protocolUrlMatch=t.protocolUrlMatch,n.protocolRelativeMatch=t.protocolRelativeMatch,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return s(t,e),t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url="http://"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&/g,"&")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,"")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,"$1")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,"")},t.prototype.removeTrailingSlash=function(e){return"/"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,""").replace(/%26/gi,"&").replace(/%27/gi,"'").replace(/%3C/gi,"<").replace(/%3E/gi,">");try{return decodeURIComponent(t)}catch(n){return t}},t}(o),p=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},m=/[A-Za-z]/,g=/[0-9]/,v=/\s/,_=/['"]/,b=/[\x00-\x1F\x7F]/,y=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,w=y+/\u00a9\u00ae\u2000-\u3300\ud83c\ud000-\udfff\ud83d\ud000-\udfff\ud83e\ud000-\udfff/.source+/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,O=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,C=w+O,E=w+O,A="(?:["+O+"]{1,3}\\.){3}["+O+"]{1,3}",x="["+E+"](?:["+E+"\\-]{0,61}["+E+"])?",T=function(e){return"(?=("+x+"))\\"+e},S=function(e){return"(?:"+T(e)+"(?:\\."+T(e+1)+"){0,126}|"+A+")"},D=new RegExp("["+E+"]"),P=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|verm\xf6gensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xf6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043a\u0430\u0442\u043e\u043b\u0438\u043a|\u0627\u062a\u0635\u0627\u0644\u0627\u062a|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064a\u0627\u0646|\u067e\u0627\u06a9\u0633\u062a\u0627\u0646|\u0643\u0627\u062b\u0648\u0644\u064a\u0643|\u0645\u0648\u0628\u0627\u064a\u0644\u064a|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d|\u0627\u0628\u0648\u0638\u0628\u064a|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0641\u0644\u0633\u0637\u064a\u0646|\u0645\u0644\u064a\u0633\u064a\u0627|\u092d\u093e\u0930\u0924\u092e\u094d|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|\u0627\u06cc\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0647\u0645\u0631\u0627\u0647|\u092d\u093e\u0930\u094b\u0924|\u0938\u0902\u0917\u0920\u0928|\u09ac\u09be\u0982\u09b2\u09be|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0d2d\u0d3e\u0d30\u0d24\u0d02|\u5609\u91cc\u5927\u9152\u5e97|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062a|\u0628\u064a\u062a\u0643|\u0680\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u09ad\u09be\u09f0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b2d\u0b3e\u0b30\u0b24|\u0cad\u0cbe\u0cb0\u0ca4|\u0dbd\u0d82\u0d9a\u0dcf|\u30b0\u30fc\u30b0\u30eb|\u30af\u30e9\u30a6\u30c9|\u30dd\u30a4\u30f3\u30c8|\u5927\u4f17\u6c7d\u8f66|\u7ec4\u7ec7\u673a\u6784|\u96fb\u8a0a\u76c8\u79d1|\u9999\u683c\u91cc\u62c9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043b|\u043a\u043e\u043c|\u049b\u0430\u0437|\u043c\u043a\u0434|\u043c\u043e\u043d|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043a\u0440|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092e|\u0928\u0947\u091f|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22|\u30b9\u30c8\u30a2|\u30bb\u30fc\u30eb|\u307f\u3093\u306a|\u4e2d\u6587\u7f51|\u5929\u4e3b\u6559|\u6211\u7231\u4f60|\u65b0\u52a0\u5761|\u6de1\u9a6c\u9521|\u8bfa\u57fa\u4e9a|\u98de\u5229\u6d66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03b5\u03bb|\u0431\u0433|\u0435\u044e|\u0440\u0444|\u10d2\u10d4|\ub2f7\ub137|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|\u30b3\u30e0|\u4e16\u754c|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4f01\u4e1a|\u4f5b\u5c71|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5609\u91cc|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5bb6\u96fb|\u5de5\u884c|\u5e7f\u4e1c|\u5fae\u535a|\u6148\u5584|\u624b\u673a|\u624b\u8868|\u62db\u8058|\u653f\u52a1|\u653f\u5e9c|\u65b0\u95fb|\u65f6\u5c1a|\u66f8\u7c4d|\u673a\u6784|\u6e38\u620f|\u6fb3\u9580|\u70b9\u770b|\u73e0\u5b9d|\u79fb\u52a8|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7ad9|\u7f51\u7edc|\u8054\u901a|\u8c37\u6b4c|\u8d2d\u7269|\u901a\u8ca9|\u96c6\u56e2|\u98df\u54c1|\u9910\u5385|\u9999\u6e2f)/,I=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=new RegExp("["+E+"!#$%&'*+/=?^_`{|}~-]"),t.strictTldRegex=new RegExp("^"+P.source+"$"),t}return s(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,i=this.localPartCharRegex,r=this.strictTldRegex,o=[],a=e.length,s=new M,u={m:"a",a:"i",i:"l",l:"t",t:"o",o:":"},h=0,d=0,f=s;h<a;){var p=e.charAt(h);switch(d){case 0:m(p);break;case 1:g(e.charAt(h-1),p);break;case 2:v(p);break;case 3:_(p);break;case 4:b(p);break;case 5:y(p);break;case 6:w(p);break;case 7:O(p);break;default:n(d)}h++}return A(),o;function m(e){"m"===e?C(1):i.test(e)&&C()}function g(e,t){":"===e?i.test(t)?(d=2,f=new M(c({},f,{hasMailtoPrefix:!0}))):E():u[e]===t||(i.test(t)?d=2:"."===t?d=3:"@"===t?d=4:E())}function v(e){"."===e?d=3:"@"===e?d=4:i.test(e)||E()}function _(e){"."===e||"@"===e?E():i.test(e)?d=2:E()}function b(e){D.test(e)?d=5:E()}function y(e){"."===e?d=7:"-"===e?d=6:D.test(e)||A()}function w(e){"-"===e||"."===e?A():D.test(e)?d=5:A()}function O(e){"."===e||"-"===e?A():D.test(e)?(d=5,f=new M(c({},f,{hasDomainDot:!0}))):A()}function C(e){void 0===e&&(e=2),d=e,f=new M({idx:h})}function E(){d=0,f=s}function A(){if(f.hasDomainDot){var n=e.slice(f.idx,h);/[-.]$/.test(n)&&(n=n.slice(0,-1));var i=f.hasMailtoPrefix?n.slice("mailto:".length):n;(function(e){var t=(e.split(".").pop()||"").toLowerCase();return r.test(t)})(i)&&o.push(new l({tagBuilder:t,matchedText:n,offset:f.idx,email:i}))}E()}},t}(p),M=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},R=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split("://")[1]),t.split("/")[0].indexOf("..")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),n=t&&t[0].toLowerCase();return"javascript:"!==n&&"vbscript:"!==n},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!!e&&(!t||!this.hasFullProtocolRegex.test(t))&&-1===e.indexOf(".")},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&!this.hasWordCharAfterProtocolRegex.test(e)},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+y+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),L=function(e){function t(t){var n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=function(){var e=new RegExp("[/?#](?:["+E+"\\-+&@#/%=~_()|'$*\\[\\]?!:,.;\u2713]*["+E+"\\-+&@#/%=~_()|'$*\\[\\]\u2713])?");return new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,S(2),")","|","(","(//)?",/(?:www\.)/.source,S(6),")","|","(","(//)?",S(10)+"\\.",P.source,"(?![-"+C+"])",")",")","(?::[0-9]+)?","(?:"+e.source+")?"].join(""),"gi")}(),n.wordCharRegExp=new RegExp("["+E+"]"),n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return s(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,i=this.stripPrefix,r=this.stripTrailingSlash,o=this.decodePercentEncoding,a=this.tagBuilder,s=[],c=function(){var n=t[0],c=t[1],u=t[4],h=t[5],d=t[9],p=t.index,m=h||d,g=e.charAt(p-1);if(!R.isValid(n,c))return"continue";if(p>0&&"@"===g)return"continue";if(p>0&&m&&l.wordCharRegExp.test(g))return"continue";if(/\?$/.test(n)&&(n=n.substr(0,n.length-1)),l.matchHasUnbalancedClosingParen(n))n=n.substr(0,n.length-1);else{var v=l.matchHasInvalidCharAfterTld(n,c);v>-1&&(n=n.substr(0,v))}var _=["http://","https://"].find((function(e){return!!c&&-1!==c.indexOf(e)}));if(_){var b=n.indexOf(_);n=n.substr(b),c=c.substr(b),p+=b}var y=c?"scheme":u?"www":"tld",w=!!c;s.push(new f({tagBuilder:a,matchedText:n,offset:p,urlMatchType:y,url:n,protocolUrlMatch:w,protocolRelativeMatch:!!m,stripPrefix:i,stripTrailingSlash:r,decodePercentEncoding:o}))},l=this;null!==(t=n.exec(e));)c();return s},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,n=e.charAt(e.length-1);if(")"===n)t="(";else{if("]"!==n)return!1;t="["}for(var i=0,r=0,o=e.length-1;r<o;r++){var a=e.charAt(r);a===t?i++:a===n&&(i=Math.max(i-1,0))}return 0===i},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var n=0;t&&(n=e.indexOf(":"),e=e.slice(n));var i=new RegExp("^((.?//)?[-."+E+"]*[-"+E+"]\\.[-"+E+"]+)").exec(e);return null===i?-1:(n+=i[1].length,e=e.slice(i[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(e)?n:-1)},t}(p),j=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="twitter",n.matcherRegex=new RegExp("#[_"+E+"]{1,139}(?![_"+E+"])","g"),n.nonWordCharRegex=new RegExp("[^"+E+"]"),n.serviceName=t.serviceName,n}return s(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,i=this.nonWordCharRegex,r=this.serviceName,o=this.tagBuilder,a=[];null!==(t=n.exec(e));){var s=t.index,c=e.charAt(s-1);if(0===s||i.test(c)){var l=t[0],h=t[0].slice(1);a.push(new u({tagBuilder:o,matchedText:l,offset:s,serviceName:r,hashtag:h}))}}return a},t}(p),F=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/g,t}return s(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,i=this.tagBuilder,r=[];null!==(t=n.exec(e));){var o=t[0],a=o.replace(/[^0-9,;#]/g,""),s=!(!t[1]&&!t[2]),c=0==t.index?"":e.substr(t.index-1,1),l=e.substr(t.index+o.length,1),u=!c.match(/\d/)&&!l.match(/\d/);this.testMatch(t[3])&&this.testMatch(o)&&u&&r.push(new d({tagBuilder:i,matchedText:o,offset:t.index,number:a,plusSign:s}))}return r},t.prototype.testMatch=function(e){return/\D/.test(e)},t}(p),N=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="twitter",n.matcherRegexes={twitter:new RegExp("@[_"+E+"]{1,50}(?![_"+E+"])","g"),instagram:new RegExp("@[_."+E+"]{1,30}(?![_"+E+"])","g"),soundcloud:new RegExp("@[-_."+E+"]{1,50}(?![-_"+E+"])","g")},n.nonWordCharRegex=new RegExp("[^"+E+"]"),n.serviceName=t.serviceName,n}return s(t,e),t.prototype.parseMatches=function(e){var t,n=this.serviceName,i=this.matcherRegexes[this.serviceName],r=this.nonWordCharRegex,o=this.tagBuilder,a=[];if(!i)return a;for(;null!==(t=i.exec(e));){var s=t.index,c=e.charAt(s-1);if(0===s||r.test(c)){var l=t[0].replace(/\.+$/g,""),u=l.slice(1);a.push(new h({tagBuilder:o,matchedText:l,offset:s,serviceName:n,mention:u}))}}return a},t}(p);function z(e,t){for(var i=t.onOpenTag,r=t.onCloseTag,o=t.onText,a=t.onComment,s=t.onDoctype,l=new k,u=0,h=e.length,d=0,f=0,p=l;u<h;){var y=e.charAt(u);switch(d){case 0:w(y);break;case 1:O(y);break;case 2:E(y);break;case 3:C(y);break;case 4:A(y);break;case 5:x(y);break;case 6:T(y);break;case 7:S(y);break;case 8:D(y);break;case 9:P(y);break;case 10:I(y);break;case 11:M(y);break;case 12:R(y);break;case 13:L(y);break;case 14:j(y);break;case 15:F(y);break;case 16:N(y);break;case 17:z(y);break;case 18:B(y);break;case 19:H(y);break;case 20:V(y);break;default:n(d)}u++}function w(e){"<"===e&&W()}function O(e){"!"===e?d=13:"/"===e?(d=2,p=new k(c({},p,{isClosing:!0}))):"<"===e?W():m.test(e)?(d=3,p=new k(c({},p,{isOpening:!0}))):(d=0,p=l)}function C(e){v.test(e)?(p=new k(c({},p,{name:q()})),d=4):"<"===e?W():"/"===e?(p=new k(c({},p,{name:q()})),d=12):">"===e?(p=new k(c({},p,{name:q()})),G()):m.test(e)||g.test(e)||":"===e||U()}function E(e){">"===e?U():m.test(e)?d=3:U()}function A(e){v.test(e)||("/"===e?d=12:">"===e?G():"<"===e?W():"="===e||_.test(e)||b.test(e)?U():d=5)}function x(e){v.test(e)?d=6:"/"===e?d=12:"="===e?d=7:">"===e?G():"<"===e?W():_.test(e)&&U()}function T(e){v.test(e)||("/"===e?d=12:"="===e?d=7:">"===e?G():"<"===e?W():_.test(e)?U():d=5)}function S(e){v.test(e)||('"'===e?d=8:"'"===e?d=9:/[>=`]/.test(e)?U():"<"===e?W():d=10)}function D(e){'"'===e&&(d=11)}function P(e){"'"===e&&(d=11)}function I(e){v.test(e)?d=4:">"===e?G():"<"===e&&W()}function M(e){v.test(e)?d=4:"/"===e?d=12:">"===e?G():"<"===e?W():(d=4,u--)}function R(e){">"===e?(p=new k(c({},p,{isClosing:!0})),G()):d=4}function L(t){"--"===e.substr(u,2)?(u+=2,p=new k(c({},p,{type:"comment"})),d=14):"DOCTYPE"===e.substr(u,7).toUpperCase()?(u+=7,p=new k(c({},p,{type:"doctype"})),d=20):U()}function j(e){"-"===e?d=15:">"===e?U():d=16}function F(e){"-"===e?d=18:">"===e?U():d=16}function N(e){"-"===e&&(d=17)}function z(e){d="-"===e?18:16}function B(e){">"===e?G():"!"===e?d=19:"-"===e||(d=16)}function H(e){"-"===e?d=17:">"===e?G():d=16}function V(e){">"===e?G():"<"===e&&W()}function U(){d=0,p=l}function W(){d=1,p=new k({idx:u})}function G(){var t=e.slice(f,p.idx);t&&o(t,f),"comment"===p.type?a(p.idx):"doctype"===p.type?s(p.idx):(p.isOpening&&i(p.name,p.idx),p.isClosing&&r(p.name,p.idx)),U(),f=u+1}function q(){var t=p.idx+(p.isClosing?2:1);return e.slice(t,u).toLowerCase()}f<u&&function(){var t=e.slice(f,u);o(t,f),f=u+1}()}var k=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||"tag",this.name=e.name||"",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing};return function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email="boolean"===typeof t.email?t.email:this.email,this.phone="boolean"===typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow="boolean"===typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash="boolean"===typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"===typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding;var n=this.mention;if(!1!==n&&"twitter"!==n&&"instagram"!==n&&"soundcloud"!==n)throw new Error("invalid `mention` cfg - see docs");var i=this.hashtag;if(!1!==i&&"twitter"!==i&&"facebook"!==i&&"instagram"!==i)throw new Error("invalid `hashtag` cfg - see docs");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){return new e(n).link(t)},e.parse=function(t,n){return new e(n).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),"boolean"===typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:"boolean"!==typeof e.schemeMatches||e.schemeMatches,wwwMatches:"boolean"!==typeof e.wwwMatches||e.wwwMatches,tldMatches:"boolean"!==typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),"boolean"===typeof e?{scheme:e,www:e}:{scheme:"boolean"!==typeof e.scheme||e.scheme,www:"boolean"!==typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return"number"===typeof e?{length:e,location:"end"}:function(e,t){for(var n in t)t.hasOwnProperty(n)&&void 0===e[n]&&(e[n]=t[n]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})},e.prototype.parse=function(e){var t=this,n=["a","style","script"],i=0,r=[];return z(e,{onOpenTag:function(e){n.indexOf(e)>=0&&i++},onText:function(e,n){if(0===i){var o=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var n,i=[],r=0;n=t.exec(e);)i.push(e.substring(r,n.index)),i.push(n[0]),r=n.index+n[0].length;return i.push(e.substring(r)),i}(e,/( | |<|<|>|>|"|"|')/gi),a=n;o.forEach((function(e,n){if(n%2===0){var i=t.parseText(e,a);r.push.apply(r,i)}a+=e.length}))}},onCloseTag:function(e){n.indexOf(e)>=0&&(i=Math.max(i-1,0))},onComment:function(e){},onDoctype:function(e){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;t<e.length-1;t++){var n=e[t],i=n.getOffset(),r=n.getMatchedText().length,o=i+r;if(t+1<e.length){if(e[t+1].getOffset()===i){var a=e[t+1].getMatchedText().length>r?t:t+1;e.splice(a,1);continue}e[t+1].getOffset()<o&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||t(e,(function(e){return"hashtag"===e.getType()})),this.email||t(e,(function(e){return"email"===e.getType()})),this.phone||t(e,(function(e){return"phone"===e.getType()})),this.mention||t(e,(function(e){return"mention"===e.getType()})),this.urls.schemeMatches||t(e,(function(e){return"url"===e.getType()&&"scheme"===e.getUrlMatchType()})),this.urls.wwwMatches||t(e,(function(e){return"url"===e.getType()&&"www"===e.getUrlMatchType()})),this.urls.tldMatches||t(e,(function(e){return"url"===e.getType()&&"tld"===e.getUrlMatchType()})),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var n=this.getMatchers(),i=[],r=0,o=n.length;r<o;r++){for(var a=n[r].parseMatches(e),s=0,c=a.length;s<c;s++)a[s].setOffset(t+a[s].getOffset());i.push.apply(i,a)}return i},e.prototype.link=function(e){if(!e)return"";for(var t=this.parse(e),n=[],i=0,r=0,o=t.length;r<o;r++){var a=t[r];n.push(e.substring(i,a.getOffset())),n.push(this.createMatchReturnVal(a)),i=a.getOffset()+a.getMatchedText().length}return n.push(e.substring(i)),n.join("")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),"string"===typeof t?t:!1===t?e.getMatchedText():t instanceof i?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new j({tagBuilder:e,serviceName:this.hashtag}),new I({tagBuilder:e}),new F({tagBuilder:e}),new N({tagBuilder:e,serviceName:this.mention}),new L({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new r({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version="3.11.0",e.AnchorTagBuilder=r,e.HtmlTag=i,e.matcher={Email:I,Hashtag:j,Matcher:p,Mention:N,Phone:F,Url:L},e.match={Email:l,Hashtag:u,Match:o,Mention:h,Phone:d,Url:f},e}()}()}(o7);var a7=o7.Autolinker;var s7=function(e,t){this.position=e,this.headingPitchRange=t};function c7(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new wn.a,this.tourEnd=new wn.a,this.entryStart=new wn.a,this.entryEnd=new wn.a,this._activeEntries=[]}function l7(e){for(var t=e.pop();void 0!==t;t=e.pop())t.stop()}function u7(e,t,n){var i=this.playlist[this.playlistIndex];if(i){var r=h7.bind(this,e,t,n);if(this._activeEntries.push(i),this.entryStart.raiseEvent(i),i.blocking)i.play(r,e.scene.camera,t);else{var a=this;i.play((function(){a.entryEnd.raiseEvent(i);var e=a._activeEntries.indexOf(i);e>=0&&a._activeEntries.splice(e,1)})),r(e,t,n)}}else Object(o.a)(n)&&n(!1)}function h7(e,t,n,i){var r=this.playlist[this.playlistIndex];if(this.entryEnd.raiseEvent(r,i),i)n(i);else{var o=this._activeEntries.indexOf(r);o>=0&&this._activeEntries.splice(o,1),this.playlistIndex++,u7.call(this,e,t,n)}}c7.prototype.addPlaylistEntry=function(e){this.playlist.push(e)},c7.prototype.play=function(e,t){this.tourStart.raiseEvent();var n=this;u7.call(this,e,t,(function(e){n.playlistIndex=0,e||l7(n._activeEntries),n.tourEnd.raiseEvent(e)}))},c7.prototype.stop=function(){l7(this._activeEntries)};var d7=c7;function f7(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}f7.prototype.play=function(e,t,n){if(this.activeCamera=t,Object(o.a)(e)&&null!==e){var i=this;this.activeCallback=function(t){delete i.activeCallback,delete i.activeCamera,e(!Object(o.a)(t)&&t)}}var r=this.getCameraOptions(n);if(this.view.headingPitchRoll)t.flyTo(r);else if(this.view.headingPitchRange){var a=new gt(this.view.position);t.flyToBoundingSphere(a,r)}},f7.prototype.stop=function(){Object(o.a)(this.activeCamera)&&this.activeCamera.cancelFlight(),Object(o.a)(this.activeCallback)&&this.activeCallback(!0)},f7.prototype.getCameraOptions=function(e){var t={duration:this.duration};return Object(o.a)(this.activeCallback)&&(t.complete=this.activeCallback),"smooth"===this.flyToMode&&(t.easingFunction=rb.LINEAR_NONE),this.view.headingPitchRoll?(t.destination=this.view.position,t.orientation=this.view.headingPitchRoll):this.view.headingPitchRange&&(t.offset=this.view.headingPitchRange),Object(o.a)(e)&&(t=Object(Wf.a)(t,e)),t};var p7=f7;function m7(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}m7.prototype.play=function(e){var t=this;this.activeCallback=e,this.timeout=setTimeout((function(){delete t.activeCallback,e(!1)}),1e3*this.duration)},m7.prototype.stop=function(){clearTimeout(this.timeout),Object(o.a)(this.activeCallback)&&this.activeCallback(!0)};var g7,v7=m7,_7={avi:"video/x-msvideo",bmp:"image/bmp",bz2:"application/x-bzip2",chm:"application/vnd.ms-htmlhelp",css:"text/css",csv:"text/csv",doc:"application/msword",dvi:"application/x-dvi",eps:"application/postscript",flv:"video/x-flv",gif:"image/gif",gz:"application/x-gzip",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",m3u:"audio/x-mpegurl",m4v:"video/mp4",mathml:"application/mathml+xml",mid:"audio/midi",midi:"audio/midi",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",pdf:"application/pdf",png:"image/png",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",qt:"video/quicktime",rdf:"application/rdf+xml",rss:"application/rss+xml",rtf:"application/rtf",svg:"image/svg+xml",swf:"application/x-shockwave-flash",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",xml:"application/xml",zip:"application/zip",detectFromFilename:function(e){var t=e.toLowerCase();return t=Object(Py.a)(t),_7[t]}};"undefined"!==typeof DOMParser&&(g7=new DOMParser);var b7=new a7({stripPrefix:!1,email:!1,replaceFn:function(e){if(!e.protocolUrlMatch)return!1}}),y7=[null,void 0,"http://www.opengis.net/kml/2.2","http://earth.google.com/kml/2.2","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.0"],w7=["http://www.google.com/kml/ext/2.2"],O7={kml:y7,gx:w7,atom:["http://www.w3.org/2005/Atom"],kmlgx:y7.concat(w7)},C7={Document:u8,Folder:function(e,t,n,i){var r=l8(e,t,n),o=Object(Lf.a)(n);o.parentEntity=r.entity,u8(e,t,o,i)},Placemark:function(e,t,n,i){for(var r=l8(e,t,n),a=r.entity,s=r.styleEntity,c=!1,l=t.childNodes,u=0,h=l.length;u<h&&!c;u++){var d=l.item(u),f=c8[d.localName];Object(o.a)(f)&&(f(e,n.entityCollection,d,a,s,a.id),c=!0)}c||(a.merge(s),i8(e,a,s))},NetworkLink:function(e,t,n,i){var a=l8(e,t,n).entity,s=n.sourceResource,c=n.uriResolver,l=F7(t,"Link",O7.kml);Object(o.a)(l)||(l=F7(t,"Url",O7.kml));if(Object(o.a)(l)){var u,h,d=B7(l,"href",O7.kml);if(Object(o.a)(d)){var f=d;if(d=V7(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(f=s.getDerivedResource({url:f}));else{f=d.clone(),u=B7(l,"viewRefreshMode",O7.kml),h=Object(r.a)(B7(l,"viewBoundScale",O7.kml),1);var p="onStop"===u?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",m=Object(r.a)(B7(l,"viewFormat",O7.kml),p),g=B7(l,"httpQuery",O7.kml);Object(o.a)(m)&&d.setQueryParameters(Object(JA.a)(b8(m))),Object(o.a)(g)&&d.setQueryParameters(Object(JA.a)(b8(g)));var v=e._ellipsoid;E8(d,e._camera,e._canvas,h,e._lastCameraView.bbox,v)}var _={sourceUri:f,uriResolver:c,context:a.id},b=new HZ,y=T8(e,b,d,_).then((function(t){var n=e._entityCollection,i=b.values;n.suspendEvents();for(var s=0;s<i.length;s++){var c=i[s];Object(o.a)(c.parent)||(c.parent=a,D8(c)),n.add(c)}n.resumeEvents();var f=B7(l,"refreshMode",O7.kml),p=Object(r.a)(k7(l,"refreshInterval",O7.kml),0);if("onInterval"===f&&p>0||"onExpire"===f||"onStop"===u){var m=F7(t,"NetworkLinkControl",O7.kml),g=Object(o.a)(m),v=hr.now(),_={id:l_(),href:d,cookie:{},lastUpdated:v,updating:!1,entity:a,viewBoundScale:h,needsUpdate:!1,cameraUpdateTime:v},y=0;if(g&&(_.cookie=Object(JA.a)(Object(r.a)(B7(m,"cookie",O7.kml),"")),y=Object(r.a)(k7(m,"minRefreshPeriod",O7.kml),0)),"onInterval"===f)g&&(p=Math.max(y,p)),_.refreshMode=g8,_.time=p;else if("onExpire"===f){var w;if(g&&(w=B7(m,"expires",O7.kml)),Object(o.a)(w))try{var O=hr.fromIso8601(w),C=hr.secondsDifference(O,v);C>0&&C<y&&hr.addSeconds(v,y,O),_.refreshMode=v8,_.time=O}catch(E){G_("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else G_("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else e._camera?(_.refreshMode=_8,_.time=Object(r.a)(k7(l,"viewRefreshTime",O7.kml),0)):G_("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires a camera be passed in when creating the KmlDataSource");Object(o.a)(_.refreshMode)&&e._networkLinks.set(_.id,_)}else"onRegion"===u&&G_("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion")})).otherwise((function(t){G_("An error occured during loading "+d.url),e._error.raiseEvent(e,t)}));i.addPromise(y)}}},GroundOverlay:function(e,t,n,i){var r,a=l8(e,t,n).entity,s=!1,c=e._ellipsoid,l=R7(F7(t,"LatLonQuad",O7.gx),c),u=k7(t,"drawOrder",O7.kml);if(Object(o.a)(l))(r=Y7()).hierarchy=new bA(l),r.zIndex=u,a.polygon=r,s=!0;else{(r=new jF).zIndex=u,a.rectangle=r;var h=F7(t,"LatLonBox",O7.kml);if(Object(o.a)(h)){var f=k7(h,"west",O7.kml),p=k7(h,"south",O7.kml),m=k7(h,"east",O7.kml),g=k7(h,"north",O7.kml);Object(o.a)(f)&&(f=d.negativePiToPi(d.toRadians(f))),Object(o.a)(p)&&(p=d.clampToLatitudeRange(d.toRadians(p))),Object(o.a)(m)&&(m=d.negativePiToPi(d.toRadians(m))),Object(o.a)(g)&&(g=d.clampToLatitudeRange(d.toRadians(g))),r.coordinates=new Se(f,p,m,g);var v=k7(h,"rotation",O7.kml);if(Object(o.a)(v)){var _=d.toRadians(v);r.rotation=_,r.stRotation=_}}}var b=F7(t,"Icon",O7.kml),y=X7(b,e,n.sourceResource,n.uriResolver,!0);if(Object(o.a)(y)){s&&G_("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");var w=k7(b,"x",O7.gx),O=k7(b,"y",O7.gx),C=k7(b,"w",O7.gx),E=k7(b,"h",O7.gx);(Object(o.a)(w)||Object(o.a)(O)||Object(o.a)(C)||Object(o.a)(E))&&G_("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),r.material=y,r.material.color=G7(t,"color",O7.kml),r.material.transparent=!0}else r.material=G7(t,"color",O7.kml);var A=B7(t,"altitudeMode",O7.kml);Object(o.a)(A)?"absolute"===A?(r.height=k7(t,"altitude",O7.kml),r.zIndex=void 0):"clampToGround"!==A&&G_("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+A):"relativeToSeaFloor"===(A=B7(t,"altitudeMode",O7.gx))?(G_("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),r.height=k7(t,"altitude",O7.kml),r.zIndex=void 0):"clampToSeaFloor"===A?G_("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):Object(o.a)(A)&&G_("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+A)},PhotoOverlay:m8,ScreenOverlay:m8,Tour:function(e,t,n,i){var r=B7(t,"name",O7.kml),a=j7(t,"id"),s=new d7(r,a),c=F7(t,"Playlist",O7.gx);if(c)for(var l=e._ellipsoid,u=c.childNodes,h=0;h<u.length;h++){var d=u[h];if(d.localName){var f=h8[d.localName];f?f(s,d,l):console.log("Unknown KML Tour playlist entry type "+d.localName)}}Object(o.a)(e.kmlTours)||(e.kmlTours=[]);e.kmlTours.push(s)}};function E7(e){this._dataSource=e,this._deferred=Yt.a.defer(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}function A7(e){var t,n,i,r={xsi:"http://www.w3.org/2001/XMLSchema-instance"};for(var a in r)r.hasOwnProperty(a)&&(i="xmlns:"+a+"=",RegExp("[< ]"+a+":").test(e)&&-1===e.indexOf(i)&&(Object(o.a)(t)||(t=e.substr(0,e.indexOf("<kml")+4),n=e.substr(t.length)),t+=" "+i+'"'+r[a]+'"'));return Object(o.a)(t)&&(e=t+n),e}function x7(e){for(var t,n,i,r=e.indexOf("xmlns:"),o=e.indexOf(">",r);-1!==r&&r<o;)t=e.slice(r,e.indexOf('"',r)),n=r,-1!==(r=e.indexOf(t,r+1))?(i=e.indexOf('"',e.indexOf('"',r)+1),r=(e=e.slice(0,r-1)+e.slice(i+1,e.length)).indexOf("xmlns:",n-1)):r=e.indexOf("xmlns:",n+1);return e}function T7(e,t,n){var i=Object(r.a)(_7.detectFromFilename(e.filename),"application/octet-stream");e.getData(new X9.Data64URIWriter(i),(function(i){t[e.filename]=i,n.resolve()}))}function S7(e,t,n,i){for(var r=i.keys,o=new u_.a("."),a=e.querySelectorAll(t),s=0;s<a.length;s++){var c=a[s],l=c.getAttribute(n),u=new u_.a(l).resolve(o).toString(),h=r.indexOf(u);if(-1!==h){var d=r[h];c.setAttribute(n,i[d]),"a"===t&&null===c.getAttribute("download")&&c.setAttribute("download",d)}}}function D7(e,t,n,i){for(var r=e.querySelectorAll(t),o=0;o<r.length;o++){var a=r[o],s=V7(a.getAttribute(n),i);a.setAttribute(n,s.url)}}function P7(e,t,n){var i=j7(e,"id");i=Object(o.a)(i)&&0!==i.length?i:l_(),Object(o.a)(n)&&(i=n+i);var r=t.getById(i);return Object(o.a)(r)&&(i=l_(),Object(o.a)(n)&&(i=n+i)),r=t.add(new YF({id:i})),Object(o.a)(r.kml)||(r.addProperty("kml"),r.kml=new I8),r}function I7(e,t){return"absolute"===e||"relativeToGround"===e||"relativeToSeaFloor"===t}function M7(e,t){if(!Object(o.a)(e))return O.fromDegrees(0,0,0,t);var n=e.match(/[^\s,\n]+/g);if(!Object(o.a)(n))return O.fromDegrees(0,0,0,t);var i=parseFloat(n[0]),r=parseFloat(n[1]),a=parseFloat(n[2]);return i=isNaN(i)?0:i,r=isNaN(r)?0:r,a=isNaN(a)?0:a,O.fromDegrees(i,r,a,t)}function R7(e,t){if(Object(o.a)(e)){var n=e.textContent.match(/[^\s\n]+/g);if(Object(o.a)(n)){for(var i=n.length,r=new Array(i),a=0,s=0;s<i;s++)r[a++]=M7(n[s],t);return r}}}function L7(e,t){if(Object(o.a)(e)){var n=e.getAttribute(t);if(null!==n){var i=parseFloat(n);return isNaN(i)?void 0:i}}}function j7(e,t){if(Object(o.a)(e)){var n=e.getAttribute(t);return null!==n?n:void 0}}function F7(e,t,n){if(Object(o.a)(e))for(var i=e.childNodes,r=i.length,a=0;a<r;a++){var s=i[a];if(s.localName===t&&-1!==n.indexOf(s.namespaceURI))return s}}function N7(e,t,n){if(Object(o.a)(e)){for(var i=[],r=e.getElementsByTagNameNS("*",t),a=r.length,s=0;s<a;s++){var c=r[s];c.localName===t&&-1!==n.indexOf(c.namespaceURI)&&i.push(c)}return i}}function z7(e,t,n){if(!Object(o.a)(e))return[];for(var i=[],r=e.childNodes,a=r.length,s=0;s<a;s++){var c=r[s];c.localName===t&&-1!==n.indexOf(c.namespaceURI)&&i.push(c)}return i}function k7(e,t,n){var i=F7(e,t,n);if(Object(o.a)(i)){var r=parseFloat(i.textContent);return isNaN(r)?void 0:r}}function B7(e,t,n){var i=F7(e,t,n);if(Object(o.a)(i))return i.textContent.trim()}function H7(e,t,n){var i=F7(e,t,n);if(Object(o.a)(i)){var r=i.textContent.trim();return"1"===r||/^true$/i.test(r)}}function V7(e,t,n){if(Object(o.a)(e)){var i;if(Object(o.a)(n)){var r=n[e=e.replace(/\\/g,"/")];if(Object(o.a)(r))i=new _t.a({url:r});else{var a=new u_.a(t.getUrlComponent());r=n[new u_.a(e).resolve(a)],Object(o.a)(r)&&(i=new _t.a({url:r}))}}return Object(o.a)(i)||(i=t.getDerivedResource({url:e})),i}}Object.defineProperties(E7.prototype,{dataSource:{get:function(){return this._dataSource}}}),E7.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0},E7.prototype.addPromise=function(e){this._promises.push(e)},E7.prototype.wait=function(){var e=this._deferred;return this._used||e.resolve(),Yt.a.join(e.promise,Yt.a.all(this._promises))},E7.prototype.process=function(){var e=1===this._stack.length;return e&&(this._started=S8._getTimestamp()),this._process(e)},E7.prototype._giveUpTime=function(){if(!this._timeoutSet){this._timeoutSet=!0,this._timeThreshold=50;var e=this;setTimeout((function(){e._timeoutSet=!1,e._started=S8._getTimestamp(),e._process(!0)}),0)}},E7.prototype._nextNode=function(){var e=this._stack,t=e[e.length-1],n=t.index,i=t.nodes;if(n!==i.length)return++t.index,i[n]},E7.prototype._pop=function(){var e=this._stack;return e.pop(),0!==e.length||(this._deferred.resolve(),!1)},E7.prototype._process=function(e){for(var t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();Object(o.a)(i);){var r=C7[i.localName];if(Object(o.a)(r)&&(-1!==O7.kml.indexOf(i.namespaceURI)||-1!==O7.gx.indexOf(i.namespaceURI))&&(r(t,i,n,this),this._timeoutSet||S8._getTimestamp()>this._started+this._timeThreshold))return void this._giveUpTime();i=this._nextNode()}this._pop()&&e&&this._process(!0)};var U7={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function W7(e,t){if(Object(o.a)(e)&&!/^\s*$/gm.test(e)){"#"===e[0]&&(e=e.substring(1));var n=parseInt(e.substring(0,2),16)/255,i=parseInt(e.substring(2,4),16)/255,r=parseInt(e.substring(4,6),16)/255,a=parseInt(e.substring(6,8),16)/255;return t?(a>0?(U7.maximumRed=a,U7.red=void 0):(U7.maximumRed=void 0,U7.red=0),r>0?(U7.maximumGreen=r,U7.green=void 0):(U7.maximumGreen=void 0,U7.green=0),i>0?(U7.maximumBlue=i,U7.blue=void 0):(U7.maximumBlue=void 0,U7.blue=0),U7.alpha=n,Hf.fromRandom(U7)):new Hf(a,r,i,n)}}function G7(e,t,n){var i=B7(e,t,n);if(Object(o.a)(i))return W7(i,"random"===B7(e,"colorMode",n))}function q7(){var e=new nP;return e.width=32,e.height=32,e.scaleByDistance=new JC(2414016,1,16093e3,.1),e.pixelOffsetScaleByDistance=new JC(2414016,1,16093e3,.1),e}function Y7(){var e=new DF;return e.outline=!0,e.outlineColor=Hf.WHITE,e}function $7(){var e=new uF;return e.translucencyByDistance=new JC(3e6,1,5e6,0),e.pixelOffset=new Mt(17,0),e.horizontalOrigin=rP.LEFT,e.font="16px sans-serif",e.style=ZY.FILL_AND_OUTLINE,e}function X7(e,t,n,i,a){var s=B7(e,"href",O7.kml);if(Object(o.a)(s)&&0!==s.length){if(0===s.indexOf("root://icons/palette-")){var c=s.charAt(21),l=Object(r.a)(k7(e,"x",O7.gx),0),u=Object(r.a)(k7(e,"y",O7.gx),0);l=Math.min(l/32,7),s="https://maps.google.com/mapfiles/kml/pal"+c+"/icon"+(8*(u=7-Math.min(u/32,7))+l)+".png"}var h=V7(s,n,i);if(a){var d=B7(e,"refreshMode",O7.kml),f=B7(e,"viewRefreshMode",O7.kml);"onInterval"===d||"onExpire"===d?G_("kml-refreshMode-"+d,"KML - Unsupported Icon refreshMode: "+d):"onStop"!==f&&"onRegion"!==f||G_("kml-refreshMode-"+f,"KML - Unsupported Icon viewRefreshMode: "+f);var p=Object(r.a)(B7(e,"viewBoundScale",O7.kml),1),m="onStop"===f?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",g=Object(r.a)(B7(e,"viewFormat",O7.kml),m),v=B7(e,"httpQuery",O7.kml);Object(o.a)(g)&&h.setQueryParameters(Object(JA.a)(b8(g))),Object(o.a)(v)&&h.setQueryParameters(Object(JA.a)(b8(v)));var _=t._ellipsoid;return E8(h,t._camera,t._canvas,p,t._lastCameraView.bbox,_),h}return h}}function K7(e,t,n,i,a){var s=k7(t,"scale",O7.kml),c=k7(t,"heading",O7.kml),l=G7(t,"color",O7.kml),u=F7(t,"Icon",O7.kml),h=X7(u,e,i,a,!1);Object(o.a)(u)&&!Object(o.a)(h)&&(h=!1);var f,p,m=k7(u,"x",O7.gx),g=k7(u,"y",O7.gx),v=k7(u,"w",O7.gx),_=k7(u,"h",O7.gx),b=F7(t,"hotSpot",O7.kml),y=L7(b,"x"),w=L7(b,"y"),C=j7(b,"xunits"),E=j7(b,"yunits"),A=n.billboard;Object(o.a)(A)||(A=q7(),n.billboard=A),A.image=h,A.scale=s,A.color=l,(Object(o.a)(m)||Object(o.a)(g)||Object(o.a)(v)||Object(o.a)(_))&&(A.imageSubRegion=new bl(m,g,v,_)),Object(o.a)(c)&&0!==c&&(A.rotation=d.toRadians(-c),A.alignedAxis=O.UNIT_Z),s=Object(r.a)(s,1),Object(o.a)(y)&&("pixels"===C?f=-y*s:"insetPixels"===C?f=(y-32)*s:"fraction"===C&&(f=32*-y*s),f+=16*s),Object(o.a)(w)&&("pixels"===E?p=w*s:"insetPixels"===E?p=(32-w)*s:"fraction"===E&&(p=32*w*s),p-=16*s),(Object(o.a)(f)||Object(o.a)(p))&&(A.pixelOffset=new Mt(f,p))}function Q7(e,t,n,i,a){for(var s=0,c=t.childNodes.length;s<c;s++){var l=t.childNodes.item(s);if("IconStyle"===l.localName)K7(e,l,n,i,a);else if("LabelStyle"===l.localName){var u=n.label;Object(o.a)(u)||(u=$7(),n.label=u),u.scale=Object(r.a)(k7(l,"scale",O7.kml),u.scale),u.fillColor=Object(r.a)(G7(l,"color",O7.kml),u.fillColor),u.text=n.name}else if("LineStyle"===l.localName){var h=n.polyline;Object(o.a)(h)||(h=new IF,n.polyline=h),h.width=k7(l,"width",O7.kml),h.material=G7(l,"color",O7.kml),Object(o.a)(G7(l,"outerColor",O7.gx))&&G_("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),Object(o.a)(k7(l,"outerWidth",O7.gx))&&G_("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),Object(o.a)(k7(l,"physicalWidth",O7.gx))&&G_("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),Object(o.a)(H7(l,"labelVisibility",O7.gx))&&G_("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if("PolyStyle"===l.localName){var d=n.polygon;Object(o.a)(d)||(d=Y7(),n.polygon=d),d.material=Object(r.a)(G7(l,"color",O7.kml),d.material),d.fill=Object(r.a)(H7(l,"fill",O7.kml),d.fill),d.outline=Object(r.a)(H7(l,"outline",O7.kml),d.outline)}else if("BalloonStyle"===l.localName){var f=Object(r.a)(W7(B7(l,"bgColor",O7.kml)),Hf.WHITE),p=Object(r.a)(W7(B7(l,"textColor",O7.kml)),Hf.BLACK),m=B7(l,"text",O7.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:f,textColor:p,text:m}}else if("ListStyle"===l.localName){var g=B7(l,"listItemType",O7.kml);"radioFolder"!==g&&"checkOffOnly"!==g||G_("kml-listStyle-"+g,"KML - Unsupported ListStyle with listItemType: "+g)}}}function Z7(e,t,n){return t.fetchXML().then((function(i){return J7(e,i,n,t,!0)}))}function J7(e,t,n,i,r,a){var s,c,l,u,h=N7(t,"Style",O7.kml);if(Object(o.a)(h)){var d=h.length;for(s=0;s<d;s++)c=j7(u=h[s],"id"),Object(o.a)(c)&&(c="#"+c,r&&Object(o.a)(i)&&(c=i.getUrlComponent()+c),Object(o.a)(n.getById(c))||(l=new YF({id:c}),n.add(l),Q7(e,u,l,i,a)))}var f=N7(t,"StyleMap",O7.kml);if(Object(o.a)(f)){var p=f.length;for(s=0;s<p;s++){var m=f[s];if(c=j7(m,"id"),Object(o.a)(c))for(var g=z7(m,"Pair",O7.kml),v=0;v<g.length;v++){var _=g[v],b=B7(_,"key",O7.kml);if("normal"===b){if(c="#"+c,r&&Object(o.a)(i)&&(c=i.getUrlComponent()+c),!Object(o.a)(n.getById(c))){l=n.getOrCreateEntity(c);var y=B7(_,"styleUrl",O7.kml);if(Object(o.a)(y)){"#"!==y[0]&&(y="#"+y),r&&Object(o.a)(i)&&(y=i.getUrlComponent()+y);var w=n.getById(y);Object(o.a)(w)&&l.merge(w)}else Q7(e,u=F7(_,"Style",O7.kml),l,i,a)}}else G_("kml-styleMap-"+b,"KML - Unsupported StyleMap key: "+b)}}}var O=[],C=t.getElementsByTagName("styleUrl"),E=C.length;for(s=0;s<E;s++){var A=C[s].textContent;if("#"!==A[0]){var x=A.split("#");if(2===x.length){var T=x[0],S=i.getDerivedResource({url:T});O.push(Z7(e,S,n))}}}return O}function e8(e,t,n){var i=new u0(e,t.id,["position"]),r=new M4(t.position);t.polyline=Object(o.a)(n.polyline)?n.polyline.clone():new IF,t.polyline.positions=new o0([i,r])}function t8(e,t){return!Object(o.a)(e)&&!Object(o.a)(t)||"clampToGround"===e?iP.CLAMP_TO_GROUND:"relativeToGround"===e?iP.RELATIVE_TO_GROUND:"absolute"===e?iP.NONE:"clampToSeaFloor"===t?(G_("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),iP.CLAMP_TO_GROUND):"relativeToSeaFloor"===t?(G_("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),iP.RELATIVE_TO_GROUND):(Object(o.a)(e)?G_("kml-altitudeMode-unknown","KML - Unknown <kml:altitudeMode>:"+e+", using <kml:altitudeMode>:CLAMP_TO_GROUND."):G_("kml-gx:altitudeMode-unknown","KML - Unknown <gx:altitudeMode>:"+t+", using <kml:altitudeMode>:CLAMP_TO_GROUND."),iP.CLAMP_TO_GROUND)}function n8(e,t,n){return"relativeToSeaFloor"===n||"absolute"===t||"relativeToGround"===t?e:((Object(o.a)(t)&&"clampToGround"!==t||Object(o.a)(n)&&"clampToSeaFloor"!==n)&&G_("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+Object(r.a)(t,n)),new M4(e))}function i8(e,t,n,i){var r=t.label;Object(o.a)(r)||(r=Object(o.a)(n.label)?n.label.clone():$7(),t.label=r),r.text=t.name;var a=t.billboard;Object(o.a)(a)||(a=Object(o.a)(n.billboard)?n.billboard.clone():q7(),t.billboard=a),Object(o.a)(a.image)?a.image.getValue()||(a.image=void 0):a.image=e._pinBuilder.fromColor(Hf.YELLOW,64);var s=1;Object(o.a)(a.scale)&&(0!==(s=a.scale.getValue())?r.pixelOffset=new Mt(16*s+1,0):(r.pixelOffset=void 0,r.horizontalOrigin=void 0)),Object(o.a)(i)&&e._clampToGround&&(a.heightReference=i,r.heightReference=i)}function r8(e,t){var n=e.path;Object(o.a)(n)||((n=new CF).leadTime=0,e.path=n);var i=t.polyline;Object(o.a)(i)&&(n.material=i.material,n.width=i.width)}function o8(e,t,n,i,a){var s=F7(n,"coordinates",O7.kml),c=B7(n,"altitudeMode",O7.kml),l=B7(n,"altitudeMode",O7.gx),u=H7(n,"extrude",O7.kml),h=H7(n,"tessellate",O7.kml),d=I7(c,l),f=k7(n,"drawOrder",O7.gx),p=e._ellipsoid,m=R7(s,p),g=a.polyline;if(d&&u){var v=new zF;i.wall=v,v.positions=m;var _=a.polygon;Object(o.a)(_)&&(v.fill=_.fill,v.material=_.material),v.outline=!0,Object(o.a)(g)?(v.outlineColor=Object(o.a)(g.material)?g.material.color:Hf.WHITE,v.outlineWidth=g.width):Object(o.a)(_)&&(v.outlineColor=Object(o.a)(_.material)?_.material.color:Hf.WHITE)}else if(e._clampToGround&&!d&&h){var b=new IF;b.clampToGround=!0,i.polyline=b,b.positions=m,Object(o.a)(g)?(b.material=Object(o.a)(g.material)?g.material.color.getValue(EC.MINIMUM_VALUE):Hf.WHITE,b.width=Object(r.a)(g.width,1)):(b.material=Hf.WHITE,b.width=1),b.zIndex=f}else Object(o.a)(f)&&G_("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!h&&G_("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),g=Object(o.a)(g)?g.clone():new IF,i.polyline=g,g.positions=function(e,t,n,i){if(Object(o.a)(e)){if("relativeToSeaFloor"===n||"absolute"===t||"relativeToGround"===t)return e;(Object(o.a)(t)&&"clampToGround"!==t||Object(o.a)(n)&&"clampToSeaFloor"!==n)&&G_("kml-altitudeMode-unknown","KML - Unknown altitudeMode: "+Object(r.a)(t,n));for(var a=e.length,s=0;s<a;s++){var c=e[s];i.scaleToGeodeticSurface(c,c)}return e}}(m,c,l,p),h&&!d||(g.arcType=tl.NONE);return!0}function a8(e,t,n,i,r,o,a,s,c){var l=e[0],u=e[e.length-1],h=new O0;h.addSamples(e,t),n.intervals.addInterval(new wC({start:l,stop:u,isStartIncluded:c,isStopIncluded:c,data:n8(h,a,s)})),i.addInterval(new wC({start:l,stop:u,isStartIncluded:c,isStopIncluded:c})),r.intervals.addInterval(new wC({start:l,stop:u,isStartIncluded:c,isStopIncluded:c,data:o}))}var s8,c8={Point:function(e,t,n,i,r){var o=B7(n,"coordinates",O7.kml),a=B7(n,"altitudeMode",O7.kml),s=B7(n,"altitudeMode",O7.gx),c=H7(n,"extrude",O7.kml),l=M7(o,e._ellipsoid);return i.position=l,i8(e,i,r,t8(a,s)),c&&I7(a,s)&&e8(t,i,r),!0},LineString:o8,LinearRing:o8,Polygon:function(e,t,n,i,r){var a=F7(n,"outerBoundaryIs",O7.kml),s=F7(a,"LinearRing",O7.kml),c=F7(s,"coordinates",O7.kml),l=e._ellipsoid,u=R7(c,l),h=H7(n,"extrude",O7.kml),d=I7(B7(n,"altitudeMode",O7.kml),B7(n,"altitudeMode",O7.gx)),f=Object(o.a)(r.polygon)?r.polygon.clone():Y7(),p=r.polyline;if(Object(o.a)(p)&&(f.outlineColor=Object(o.a)(p.material)?p.material.color:Hf.WHITE,f.outlineWidth=p.width),i.polygon=f,d?(f.perPositionHeight=!0,f.extrudedHeight=h?0:void 0):e._clampToGround||(f.height=0),Object(o.a)(u)){for(var m=new bA(u),g=z7(n,"innerBoundaryIs",O7.kml),v=0;v<g.length;v++){s=z7(g[v],"LinearRing",O7.kml);for(var _=0;_<s.length;_++)u=R7(c=F7(s[_],"coordinates",O7.kml),l),Object(o.a)(u)&&m.holes.push(new bA(u))}f.hierarchy=m}return!0},Track:function(e,t,n,i,r){var o=B7(n,"altitudeMode",O7.kml),a=B7(n,"altitudeMode",O7.gx),s=z7(n,"coord",O7.gx),c=z7(n,"angles",O7.gx),l=z7(n,"when",O7.kml),u=H7(n,"extrude",O7.kml),h=I7(o,a),d=e._ellipsoid;c.length>0&&G_("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");for(var f=Math.min(s.length,l.length),p=[],m=[],g=0;g<f;g++){var v=M7(s[g].textContent,d);p.push(v),m.push(hr.fromIso8601(l[g].textContent))}var _=new O0;return _.addSamples(m,p),i.position=_,i8(e,i,r,t8(o,a)),r8(i,r),i.availability=new lD,l.length>0&&i.availability.addInterval(new wC({start:m[0],stop:m[m.length-1]})),h&&u&&e8(t,i,r),!0},MultiTrack:function(e,t,n,i,r){for(var a,s,c,l=H7(n,"interpolate",O7.gx),u=z7(n,"Track",O7.gx),h=!1,d=new M0,f=new lD,p=new nJ,m=e._ellipsoid,g=0,v=u.length;g<v;g++){var _=u[g],b=z7(_,"when",O7.kml),y=z7(_,"coord",O7.gx),w=B7(_,"altitudeMode",O7.kml),O=B7(_,"altitudeMode",O7.gx),C=I7(w,O),E=H7(_,"extrude",O7.kml),A=Math.min(y.length,b.length),x=[];a=[];for(var T=0;T<A;T++){var S=M7(y[T].textContent,m);x.push(S),a.push(hr.fromIso8601(b[T].textContent))}l&&(Object(o.a)(s)&&a8([s,a[0]],[c,x[0]],p,f,d,!1,"absolute",void 0,!1),s=a[A-1],c=x[x.length-1]),a8(a,x,p,f,d,C&&E,w,O,!0),h=h||C&&E}return i.availability=f,i.position=p,i8(e,i,r),r8(i,r),h&&(e8(t,i,r),i.polyline.show=d),!0},MultiGeometry:function(e,t,n,i,r,a){for(var s=n.childNodes,c=!1,l=0,u=s.length;l<u;l++){var h=s.item(l),d=c8[h.localName];if(Object(o.a)(d)){var f=P7(h,t,a);f.parent=i,f.name=i.name,f.availability=i.availability,f.description=i.description,f.kml=i.kml,d(e,t,h,f,r)&&(c=!0)}}return c},Model:function(e,t,n,i,r){return G_("kml-unsupportedGeometry","KML - Unsupported geometry: "+n.localName),!1}};function l8(e,t,n){var i=n.entityCollection,a=n.parentEntity,s=n.sourceResource,c=n.uriResolver,l=P7(t,i,n.context),u=l.kml,h=function(e,t,n,i,r){for(var a,s=new YF,c=-1,l=t.childNodes,u=l.length,h=0;h<u;h++){var d=l[h];"Style"!==d.localName&&"StyleMap"!==d.localName||(c=h)}if(-1!==c){var f=l[c];if("Style"===f.localName)Q7(e,f,s,i,r);else for(var p=z7(f,"Pair",O7.kml),m=0;m<p.length;m++){var g=p[m],v=B7(g,"key",O7.kml);if("normal"===v){var _=B7(g,"styleUrl",O7.kml);if(Object(o.a)(_))a=n.getById(_),Object(o.a)(a)||(a=n.getById("#"+_)),Object(o.a)(a)&&s.merge(a);else Q7(e,F7(g,"Style",O7.kml),s,i,r)}else G_("kml-styleMap-"+v,"KML - Unsupported StyleMap key: "+v)}}var b=B7(t,"styleUrl",O7.kml);if(Object(o.a)(b)){var y=b;if("#"!==b[0]&&-1!==b.indexOf("#")){var w=b.split("#"),O=w[0];y=i.getDerivedResource({url:O}).getUrlComponent()+"#"+w[1]}a=n.getById(y),Object(o.a)(a)||(a=n.getById("#"+y)),Object(o.a)(a)&&s.merge(a)}return s}(e,t,n.styleCollection,s,c),d=B7(t,"name",O7.kml);l.name=d,l.parent=a;var f=function(e){var t=F7(e,"TimeSpan",O7.kmlgx);if(Object(o.a)(t)){var n,i=F7(t,"begin",O7.kmlgx),r=Object(o.a)(i)?hr.fromIso8601(i.textContent):void 0,a=F7(t,"end",O7.kmlgx),s=Object(o.a)(a)?hr.fromIso8601(a.textContent):void 0;if(Object(o.a)(r)&&Object(o.a)(s)){if(hr.lessThan(s,r)){var c=r;r=s,s=c}(n=new lD).addInterval(new wC({start:r,stop:s}))}else Object(o.a)(r)?(n=new lD).addInterval(new wC({start:r,stop:EC.MAXIMUM_VALUE})):Object(o.a)(s)&&(n=new lD).addInterval(new wC({start:EC.MINIMUM_VALUE,stop:s}));return n}}(t);Object(o.a)(f)||(f=function(e){var t=F7(e,"TimeStamp",O7.kmlgx),n=B7(t,"when",O7.kmlgx);if(Object(o.a)(t)&&Object(o.a)(n)&&0!==n.length){var i=hr.fromIso8601(n),r=new lD;return r.addInterval(new wC({start:i,stop:EC.MAXIMUM_VALUE})),r}}(t)),l.availability=f,D8(l);var p=H7(t,"visibility",O7.kml);l.show=function e(t){return!t||t.show&&e(t.parent)}(a)&&Object(r.a)(p,!0);var m=F7(t,"author",O7.atom),g=u.author;g.name=B7(m,"name",O7.atom),g.uri=B7(m,"uri",O7.atom),g.email=B7(m,"email",O7.atom);var v=F7(t,"link",O7.atom),_=u.link;_.href=j7(v,"href"),_.hreflang=j7(v,"hreflang"),_.rel=j7(v,"rel"),_.type=j7(v,"type"),_.title=j7(v,"title"),_.length=j7(v,"length"),u.address=B7(t,"address",O7.kml),u.phoneNumber=B7(t,"phoneNumber",O7.kml),u.snippet=B7(t,"Snippet",O7.kml),function(e,t){var n=F7(e,"ExtendedData",O7.kml);if(Object(o.a)(n)){Object(o.a)(F7(n,"SchemaData",O7.kml))&&G_("kml-schemaData","KML - SchemaData is unsupported"),Object(o.a)(j7(n,"xmlns:prefix"))&&G_("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");var i={},r=z7(n,"Data",O7.kml);if(Object(o.a)(r))for(var a=r.length,s=0;s<a;s++){var c=r[s],l=j7(c,"name");Object(o.a)(l)&&(i[l]={displayName:B7(c,"displayName",O7.kml),value:B7(c,"value",O7.kml)})}t.kml.extendedData=i}}(t,l),function(e,t,n,i,a){var s,c,l,u,h=t.kml,d=h.extendedData,f=B7(e,"description",O7.kml),p=Object(r.a)(t.balloonStyle,n.balloonStyle),m=Hf.WHITE,g=Hf.BLACK,v=f;if(Object(o.a)(p)&&(m=Object(r.a)(p.bgColor,Hf.WHITE),g=Object(r.a)(p.textColor,Hf.BLACK),v=Object(r.a)(p.text,f)),Object(o.a)(v)){if(v=(v=(v=(v=(v=(v=v.replace("$[name]",Object(r.a)(t.name,""))).replace("$[description]",Object(r.a)(f,""))).replace("$[address]",Object(r.a)(h.address,""))).replace("$[Snippet]",Object(r.a)(h.snippet,""))).replace("$[id]",t.id)).replace("$[geDirections]",""),Object(o.a)(d)){var _=v.match(/\$\[.+?\]/g);if(null!==_)for(s=0;s<_.length;s++){var b=_[s],y=b.substr(2,b.length-3),w=/\/displayName$/.test(y);u=d[y=y.replace(/\/displayName$/,"")],Object(o.a)(u)&&(u=w?u.displayName:u.value),Object(o.a)(u)&&(v=v.replace(b,Object(r.a)(u,"")))}}}else if(Object(o.a)(d)&&(l=Object.keys(d)).length>0){for(v='<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>',s=0;s<l.length;s++)u=d[c=l[s]],v+="<tr><th>"+Object(r.a)(u.displayName,c)+"</th><td>"+Object(r.a)(u.value,"")+"</td></tr>";v+="</tbody></table>"}if(Object(o.a)(v)){v=b7.link(v),s8.innerHTML=v;var O=s8.querySelectorAll("a");for(s=0;s<O.length;s++)O[s].setAttribute("target","_blank");Object(o.a)(i)&&i.keys.length>1&&(S7(s8,"a","href",i),S7(s8,"img","src",i)),D7(s8,"a","href",a),D7(s8,"img","src",a);var C='<div class="cesium-infoBox-description-lighter" style="';C+="overflow:auto;",C+="word-wrap:break-word;",C+="background-color:"+m.toCssColorString()+";",C+="color:"+g.toCssColorString()+";",C+='">',C+=s8.innerHTML+"</div>",s8.innerHTML="",t.description=C}}(t,l,h,c,s);var b=e._ellipsoid;return p8(t,l,b),f8(t,l,b),Object(o.a)(F7(t,"Region",O7.kml))&&G_("kml-region","KML - Placemark Regions are unsupported"),{entity:l,styleEntity:h}}function u8(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}"undefined"!==typeof document&&(s8=document.createElement("div"));var h8={FlyTo:function(e,t,n){var i=k7(t,"duration",O7.gx),r=B7(t,"flyToMode",O7.gx),o={kml:{}};p8(t,o,n),f8(t,o,n);var a=o.kml.lookAt||o.kml.camera,s=new p7(i,r,a);e.addPlaylistEntry(s)},Wait:function(e,t){var n=k7(t,"duration",O7.gx);e.addPlaylistEntry(new v7(n))},SoundCue:d8,AnimatedUpdate:d8,TourControl:d8};function d8(e,t){G_("KML Tour unsupported node "+t.localName)}function f8(e,t,n){var i=F7(e,"Camera",O7.kml);if(Object(o.a)(i)){var a=Object(r.a)(k7(i,"longitude",O7.kml),0),s=Object(r.a)(k7(i,"latitude",O7.kml),0),c=Object(r.a)(k7(i,"altitude",O7.kml),0),l=Object(r.a)(k7(i,"heading",O7.kml),0),u=Object(r.a)(k7(i,"tilt",O7.kml),0),h=Object(r.a)(k7(i,"roll",O7.kml),0),d=O.fromDegrees(a,s,c,n),f=yr.fromDegrees(l,u-90,h);t.kml.camera=new r7(d,f)}}function p8(e,t,n){var i=F7(e,"LookAt",O7.kml);if(Object(o.a)(i)){var a=Object(r.a)(k7(i,"longitude",O7.kml),0),s=Object(r.a)(k7(i,"latitude",O7.kml),0),c=Object(r.a)(k7(i,"altitude",O7.kml),0),l=k7(i,"heading",O7.kml),u=k7(i,"tilt",O7.kml),h=Object(r.a)(k7(i,"range",O7.kml),0);u=d.toRadians(Object(r.a)(u,0)),l=d.toRadians(Object(r.a)(l,0));var f=new qO(l,u-d.PI_OVER_TWO,h),p=O.fromDegrees(a,s,c,n);t.kml.lookAt=new s7(p,f)}}function m8(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),G_("kml-unsupportedFeature-"+t.nodeName,"KML - Unsupported feature: "+t.nodeName)}var g8=0,v8=1,_8=2;function b8(e){if(!Object(o.a)(e)||0===e.length)return"";var t=e[0];return"&"!==t&&"?"!==t||(e=e.substring(1)),e}var y8=new Se,w8=new R,O8=new Mt,C8=new O;function E8(e,t,n,i,a,s){function c(e){return e<-d.PI_OVER_TWO?-d.PI_OVER_TWO:e>d.PI_OVER_TWO?d.PI_OVER_TWO:e}function l(e){return e>d.PI?e-d.TWO_PI:e<-d.PI?e+d.TWO_PI:e}var u=Object(eE.a)(e.queryParameters);if(u=u.replace(/%5B/g,"[").replace(/%5D/g,"]"),Object(o.a)(t)&&t._mode!==IR.MORPHING){var h,f;if(a=Object(r.a)(a,y8),Object(o.a)(n)&&(O8.x=.5*n.clientWidth,O8.y=.5*n.clientHeight,h=t.pickEllipsoid(O8,s,C8)),Object(o.a)(h)?f=s.cartesianToCartographic(h,w8):(f=Se.center(a,w8),h=s.cartographicToCartesian(f)),Object(o.a)(i)&&!d.equalsEpsilon(i,1,d.EPSILON9)){var p=a.width*i*.5,m=a.height*i*.5;a=new Se(l(f.longitude-p),c(f.latitude-m),l(f.longitude+p),c(f.latitude+m))}u=(u=(u=(u=u.replace("[bboxWest]",d.toDegrees(a.west).toString())).replace("[bboxSouth]",d.toDegrees(a.south).toString())).replace("[bboxEast]",d.toDegrees(a.east).toString())).replace("[bboxNorth]",d.toDegrees(a.north).toString());var g=d.toDegrees(f.longitude).toString(),v=d.toDegrees(f.latitude).toString();u=(u=(u=(u=(u=(u=(u=(u=u.replace("[lookatLon]",g)).replace("[lookatLat]",v)).replace("[lookatTilt]",d.toDegrees(t.pitch).toString())).replace("[lookatHeading]",d.toDegrees(t.heading).toString())).replace("[lookatRange]",O.distance(t.positionWC,h))).replace("[lookatTerrainLon]",g)).replace("[lookatTerrainLat]",v)).replace("[lookatTerrainAlt]",f.height.toString()),s.cartesianToCartographic(t.positionWC,w8),u=(u=(u=u.replace("[cameraLon]",d.toDegrees(w8.longitude).toString())).replace("[cameraLat]",d.toDegrees(w8.latitude).toString())).replace("[cameraAlt]",d.toDegrees(w8.height).toString());var _=t.frustum,b=_.aspectRatio,y="",w="";if(Object(o.a)(b)){var C=d.toDegrees(_.fov);b>1?(y=C,w=C/b):(w=C,y=C*b)}u=(u=u.replace("[horizFov]",y.toString())).replace("[vertFov]",w.toString())}else u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=(u=u.replace("[bboxWest]","-180")).replace("[bboxSouth]","-90")).replace("[bboxEast]","180")).replace("[bboxNorth]","90")).replace("[lookatLon]","")).replace("[lookatLat]","")).replace("[lookatRange]","")).replace("[lookatTilt]","")).replace("[lookatHeading]","")).replace("[lookatTerrainLon]","")).replace("[lookatTerrainLat]","")).replace("[lookatTerrainAlt]","")).replace("[cameraLon]","")).replace("[cameraLat]","")).replace("[cameraAlt]","")).replace("[horizFov]","")).replace("[vertFov]","");u=(u=(u=(u=(u=(u=Object(o.a)(n)?(u=u.replace("[horizPixels]",n.clientWidth)).replace("[vertPixels]",n.clientHeight):(u=u.replace("[horizPixels]","")).replace("[vertPixels]","")).replace("[terrainEnabled]","1")).replace("[clientVersion]","1")).replace("[kmlVersion]","2.2")).replace("[clientName]","Cesium")).replace("[language]","English"),e.setQueryParameters(Object(JA.a)(u))}function A8(e,t,n,i,r,a){t.removeAll();var s=n.documentElement,c=B7("Document"===s.localName?s:F7(s,"Document",O7.kml),"name",O7.kml);Object(o.a)(c)||(c=Iy(i.getUrlComponent())),Object(o.a)(e._name)||(e._name=c);var l=new S8._DeferredLoading(e),u=new HZ(e);return Yt.a.all(J7(e,n,u,i,!1,r)).then((function(){var s=n.documentElement;if("kml"===s.localName)for(var c=s.childNodes,h=0;h<c.length;h++){var d=c[h];if(Object(o.a)(C7[d.localName])){s=d;break}}var f={parentEntity:void 0,entityCollection:t,styleCollection:u,sourceResource:i,uriResolver:r,context:a};return t.suspendEvents(),function(e,t,n,i){var r=C7[t.localName];Object(o.a)(r)?r(e,t,n,i):m8(e,t,n)}(e,s,f,l),t.resumeEvents(),l.wait().then((function(){return n.documentElement}))}))}function x8(e,t,n,i){var r=Yt.a.defer();return X9.createReader(new X9.BlobReader(n),(function(n){n.getEntries((function(a){for(var s,c,l=[],u={},h=0;h<a.length;h++){var d=a[h];if(!d.directory){var f=Yt.a.defer();l.push(f.promise),/\.kml$/i.test(d.filename)?Object(o.a)(s)&&/\//i.test(d.filename)?T7(d,u,f):(Object(o.a)(s)&&T7(s,u,c),s=d,c=f):T7(d,u,f)}}Object(o.a)(s)&&function(e,t,n){e.getData(new X9.TextWriter,(function(e){e=x7(e=A7(e)),t.kml=g7.parseFromString(e,"application/xml"),n.resolve()}))}(s,u,c),Yt.a.all(l).then((function(){if(n.close(),Object(o.a)(u.kml))return u.keys=Object.keys(u),A8(e,t,u.kml,i,u);r.reject(new de.a("KMZ file does not contain a KML document."))})).then(r.resolve).otherwise(r.reject)}))}),(function(e){r.reject(e)})),r.promise}function T8(e,t,n,i){var a=(i=Object(r.a)(i,r.a.EMPTY_OBJECT)).sourceUri,s=i.uriResolver,c=i.context,l=n;if("string"===typeof n||n instanceof _t.a){l=(n=_t.a.createIfNeeded(n)).fetchBlob(),a=Object(r.a)(a,n.clone());var u=e._resourceCredits,h=n.credits;if(Object(o.a)(h))for(var d=h.length,f=0;f<d;f++)u.push(h[f])}else a=Object(r.a)(a,_t.a.DEFAULT.clone());return a=_t.a.createIfNeeded(a),Object(Yt.a)(l).then((function(n){return n instanceof Blob?function(e){var t=e.slice(0,Math.min(4,e.size)),n=Yt.a.defer(),i=new FileReader;return i.addEventListener("load",(function(){n.resolve(1347093252===new DataView(i.result).getUint32(0,!1))})),i.addEventListener("error",(function(){n.reject(i.error)})),i.readAsArrayBuffer(t),n.promise}(n).then((function(i){return i?x8(e,t,n,a):function(e){var t=Yt.a.defer(),n=new FileReader;return n.addEventListener("load",(function(){t.resolve(n.result)})),n.addEventListener("error",(function(){t.reject(n.error)})),n.readAsText(e),t.promise}(n).then((function(n){var i,r;n=x7(n=A7(n));try{i=g7.parseFromString(n,"application/xml")}catch(u){r=u.toString()}if(Object(o.a)(r)||i.body||"parsererror"===i.documentElement.tagName){var l=Object(o.a)(r)?r:i.documentElement.firstChild.nodeValue;throw l||(l=i.body.innerText),new de.a(l)}return A8(e,t,i,a,s,c)}))})):A8(e,t,n,a,s,c)})).otherwise((function(t){return e._error.raiseEvent(e,t),console.log(t),Yt.a.reject(t)}))}function S8(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).camera,n=e.canvas;if(!Object(o.a)(t))throw new a.a("options.camera is required.");if(!Object(o.a)(n))throw new a.a("options.canvas is required.");this._changed=new wn.a,this._error=new wn.a,this._loading=new wn.a,this._refresh=new wn.a,this._unsupportedNode=new wn.a,this._clock=void 0,this._entityCollection=new HZ(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new SE,this._networkLinks=new sl,this._entityCluster=new x1,this._canvas=n,this._camera=t,this._lastCameraView={position:Object(o.a)(t)?O.clone(t.positionWC):void 0,direction:Object(o.a)(t)?O.clone(t.directionWC):void 0,up:Object(o.a)(t)?O.clone(t.upWC):void 0,bbox:Object(o.a)(t)?t.computeViewRectangle():Se.clone(Se.MAX_VALUE)},this._ellipsoid=Object(r.a)(e.ellipsoid,W.WGS84);var i=e.credit;"string"===typeof i&&(i=new yn(i)),this._credit=i,this._resourceCredits=[]}function D8(e){var t=e.parent;if(Object(o.a)(t)){var n=t.availability;if(Object(o.a)(n)){var i=e.availability;Object(o.a)(i)?i.intersect(n):e.availability=n}}}S8.load=function(e,t){return new S8(t=Object(r.a)(t,r.a.EMPTY_OBJECT)).load(e,t)},Object.defineProperties(S8.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},refreshEvent:{get:function(){return this._refresh}},unsupportedNodeEvent:{get:function(){return this._unsupportedNode}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){if(!Object(o.a)(e))throw new a.a("value must be defined.");this._entityCluster=e}},credit:{get:function(){return this._credit}}}),S8.prototype.load=function(e,t){if(!Object(o.a)(e))throw new a.a("data is required.");t=Object(r.a)(t,r.a.EMPTY_OBJECT),mJ.setLoading(this,!0);var n=this._name;this._name=void 0,this._clampToGround=Object(r.a)(t.clampToGround,!1);var i=this;return T8(this,this._entityCollection,e,t).then((function(){var e,t,r=i._entityCollection.computeAvailability(),o=r.start,a=r.stop,s=hr.equals(o,EC.MINIMUM_VALUE),c=hr.equals(a,EC.MAXIMUM_VALUE);s&&c||(s&&((t=new Date).setHours(0,0,0,0),o=hr.fromDate(t)),c&&((t=new Date).setHours(24,0,0,0),a=hr.fromDate(t)),(e=new z1).startTime=o,e.stopTime=a,e.currentTime=hr.clone(o),e.clockRange=xf.LOOP_STOP,e.clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER,e.multiplier=Math.round(Math.min(Math.max(hr.secondsDifference(a,o)/60,1),31556900)));var l=!1;return e!==i._clock&&(i._clock=e,l=!0),n!==i._name&&(l=!0),l&&i._changed.raiseEvent(i),mJ.setLoading(i,!1),i})).otherwise((function(e){return mJ.setLoading(i,!1),i._error.raiseEvent(i,e),console.log(e),Yt.a.reject(e)}))};var P8=new sl;function I8(){this.author={name:void 0,uri:void 0,email:void 0},this.link={href:void 0,hreflang:void 0,rel:void 0,type:void 0,title:void 0,length:void 0},this.address=void 0,this.phoneNumber=void 0,this.snippet=void 0,this.extendedData=void 0}S8.prototype.update=function(e){var t=this._networkLinks;if(0===t.length)return!0;var n=hr.now(),i=this;P8.removeAll();var a=!1,s=this._lastCameraView,c=this._camera;!Object(o.a)(c)||c.positionWC.equalsEpsilon(s.position,d.EPSILON7)&&c.directionWC.equalsEpsilon(s.direction,d.EPSILON7)&&c.upWC.equalsEpsilon(s.up,d.EPSILON7)||(s.position=O.clone(c.positionWC),s.direction=O.clone(c.directionWC),s.up=O.clone(c.upWC),s.bbox=c.computeViewRectangle(),a=!0);var l=new sl,u=!1;return t.values.forEach((function(e){var t=e.entity;if(!P8.contains(t.id)){if(!e.updating){var c=!1;if(e.refreshMode===g8?hr.secondsDifference(n,e.lastUpdated)>e.time&&(c=!0):e.refreshMode===v8?hr.greaterThan(n,e.time)&&(c=!0):e.refreshMode===_8&&(a&&(e.needsUpdate=!0,e.cameraUpdateTime=n),e.needsUpdate&&hr.secondsDifference(n,e.cameraUpdateTime)>=e.time&&(c=!0)),c){!function e(t){for(var n=t._children,i=n.length,r=0;r<i;++r){var o=n[r];P8.set(o.id,o),e(o)}}(t),e.updating=!0;var h=new HZ,d=e.href.clone();d.setQueryParameters(e.cookie);var f=Object(r.a)(i._ellipsoid,W.WGS84);E8(d,i._camera,i._canvas,e.viewBoundScale,s.bbox,f),T8(i,h,d,{context:t.id}).then(function(e,t,n,i,a){return function(s){if(i.contains(t.id)){var c=!1,l=F7(s,"NetworkLinkControl",O7.kml),u=0;if(Object(o.a)(l)){if(Object(o.a)(F7(l,"Update",O7.kml)))return G_("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,void i.remove(t.id);t.cookie=Object(JA.a)(Object(r.a)(B7(l,"cookie",O7.kml),"")),u=Object(r.a)(k7(l,"minRefreshPeriod",O7.kml),0)}var h=hr.now(),d=t.refreshMode;if(d===g8)Object(o.a)(l)&&(t.time=Math.max(u,t.time));else if(d===v8){var f;if(Object(o.a)(l)&&(f=B7(l,"expires",O7.kml)),Object(o.a)(f))try{var p=hr.fromIso8601(f),m=hr.secondsDifference(p,h);m>0&&m<u&&hr.addSeconds(h,u,p),t.time=p}catch(P){G_("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),c=!0}else G_("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),c=!0}var g=t.entity,v=e._entityCollection,_=n.values;v.suspendEvents();var b,y=v.values.slice();for(b=0;b<y.length;++b){var w=y[b];w.parent===g&&(w.parent=void 0,D(w))}for(v.resumeEvents(),v.suspendEvents(),b=0;b<_.length;b++){var O=_[b];Object(o.a)(O.parent)||(O.parent=g,D8(O)),v.add(O)}v.resumeEvents(),c?i.remove(t.id):t.lastUpdated=h;var C=v.computeAvailability(),E=C.start,A=C.stop,x=hr.equals(E,EC.MINIMUM_VALUE),T=hr.equals(A,EC.MAXIMUM_VALUE);if(!x||!T){var S=e._clock;S.startTime===E&&S.stopTime===A||(S.startTime=E,S.stopTime=A,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,a.getUrlComponent(!0))}function D(e){v.remove(e);for(var t=e._children,n=t.length,i=0;i<n;++i)D(t[i])}}}(i,e,h,l,d)).otherwise((function(t){var n="NetworkLink "+e.href+" refresh failed: "+t;console.log(n),i._error.raiseEvent(i,n)})),u=!0}}l.set(e.id,e)}})),u&&(this._networkLinks=l,this._changed.raiseEvent(this)),!0},S8._DeferredLoading=E7,S8._getTimestamp=Sf;function M8(){a.a.throwInstantiationError()}M8.prototype.update=a.a.throwInstantiationError,M8.prototype.getBoundingSphere=a.a.throwInstantiationError,M8.prototype.isDestroyed=a.a.throwInstantiationError,M8.prototype.destroy=a.a.throwInstantiationError;var R8,L8="attribute vec4 position;\nattribute vec2 textureCoordinates;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main() \n{\n gl_Position = position;\n v_textureCoordinates = textureCoordinates;\n}\n";function j8(e){this._context=e}var F8=new CI({primitiveType:xl.TRIANGLES}),N8=new yN({color:new Hf(0,0,0,0)});j8.prototype.execute=function(e){if(i.a.defined("computeCommand",e),Object(o.a)(e.preExecute)&&e.preExecute(e),!Object(o.a)(e.fragmentShaderSource)&&!Object(o.a)(e.shaderProgram))throw new a.a("computeCommand.fragmentShaderSource or computeCommand.shaderProgram is required.");i.a.defined("computeCommand.outputTexture",e.outputTexture);var t=e.outputTexture,n=t.width,r=t.height,s=this._context,c=Object(o.a)(e.vertexArray)?e.vertexArray:s.getViewportQuadVertexArray(),l=Object(o.a)(e.shaderProgram)?e.shaderProgram:function(e,t){return LM.fromCache({context:e,vertexShaderSource:L8,fragmentShaderSource:t,attributeLocations:{position:0,textureCoordinates:1}})}(s,e.fragmentShaderSource),u=function(e,t){return new DG({context:e,colorTextures:[t],destroyAttachments:!1})}(s,t),h=function(e,t){return Object(o.a)(R8)&&R8.viewport.width===e&&R8.viewport.height===t||(R8=XI.fromCache({viewport:new bl(0,0,e,t)})),R8}(n,r),d=e.uniformMap,f=N8;f.framebuffer=u,f.renderState=h,f.execute(s);var p=F8;p.vertexArray=c,p.renderState=h,p.shaderProgram=l,p.uniformMap=d,p.framebuffer=u,p.execute(s),u.destroy(),e.persists||(l.destroy(),Object(o.a)(e.vertexArray)&&c.destroy()),Object(o.a)(e.postExecute)&&e.postExecute(t)},j8.prototype.isDestroyed=function(){return!1},j8.prototype.destroy=function(){return Ks(this)};var z8=j8;var k8=function(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0};function B8(e){this._context=e,this._shaders={},this._numberOfShaders=0,this._shadersToRelease={}}function H8(e,t){for(var n=t.derivedKeywords,i=n.length,r=0;r<i;++r){var o=n[r]+t.keyword;H8(e,e._shaders[o])}delete e._shaders[t.keyword],t.shaderProgram.finalDestroy()}Object.defineProperties(B8.prototype,{numberOfShaders:{get:function(){return this._numberOfShaders}}}),B8.prototype.replaceShaderProgram=function(e){return Object(o.a)(e.shaderProgram)&&e.shaderProgram.destroy(),this.getShaderProgram(e)},B8.prototype.getShaderProgram=function(e){var t=e.vertexShaderSource,n=e.fragmentShaderSource,i=e.attributeLocations;"string"===typeof t&&(t=new KM({sources:[t]})),"string"===typeof n&&(n=new KM({sources:[n]}));var r,a=t.createCombinedVertexShader(this._context),s=n.createCombinedFragmentShader(this._context),c=a+s+JSON.stringify(i);if(Object(o.a)(this._shaders[c]))r=this._shaders[c],delete this._shadersToRelease[c];else{var l=this._context,u=new LM({gl:l._gl,logShaderCompilation:l.logShaderCompilation,debugShaders:l.debugShaders,vertexShaderSource:t,vertexShaderText:a,fragmentShaderSource:n,fragmentShaderText:s,attributeLocations:i});r={cache:this,shaderProgram:u,keyword:c,derivedKeywords:[],count:0},u._cachedShader=r,this._shaders[c]=r,++this._numberOfShaders}return++r.count,r.shaderProgram},B8.prototype.replaceDerivedShaderProgram=function(e,t,n){var i=e._cachedShader,r=t+i.keyword,a=this._shaders[r];if(Object(o.a)(a)){H8(this,a);var s=i.derivedKeywords.indexOf(t);s>-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)},B8.prototype.getDerivedShaderProgram=function(e,t){var n=t+e._cachedShader.keyword,i=this._shaders[n];if(Object(o.a)(i))return i.shaderProgram},B8.prototype.createDerivedShaderProgram=function(e,t,n){var i=e._cachedShader,r=t+i.keyword,o=n.vertexShaderSource,a=n.fragmentShaderSource,s=n.attributeLocations;"string"===typeof o&&(o=new KM({sources:[o]})),"string"===typeof a&&(a=new KM({sources:[a]}));var c=this._context,l=o.createCombinedVertexShader(c),u=a.createCombinedFragmentShader(c),h=new LM({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:o,vertexShaderText:l,fragmentShaderSource:a,fragmentShaderText:u,attributeLocations:s}),d={cache:this,shaderProgram:h,keyword:r,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),h._cachedShader=d,this._shaders[r]=d,h},B8.prototype.destroyReleasedShaderPrograms=function(){var e=this._shadersToRelease;for(var t in e){if(e.hasOwnProperty(t))H8(this,e[t]),--this._numberOfShaders}this._shadersToRelease={}},B8.prototype.releaseShaderProgram=function(e){if(Object(o.a)(e)){var t=e._cachedShader;t&&0===--t.count&&(this._shadersToRelease[t.keyword]=t)}},B8.prototype.isDestroyed=function(){return!1},B8.prototype.destroy=function(){var e=this._shaders;for(var t in e)e.hasOwnProperty(t)&&e[t].shaderProgram.finalDestroy();return Ks(this)};var V8=B8;function U8(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(U8.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}}),U8.prototype.getTexture=function(e){var t=this._textures[e];if(Object(o.a)(t))return delete this._texturesToRelease[e],++t.count,t.texture},U8.prototype.addTexture=function(e,t){var n={texture:t,count:1};t.finalDestroy=t.destroy;var i=this;t.destroy=function(){0===--n.count&&(i._texturesToRelease[e]=n)},this._textures[e]=n,++this._numberOfTextures},U8.prototype.destroyReleasedTextures=function(){var e=this._texturesToRelease;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];delete this._textures[t],n.texture.finalDestroy(),--this._numberOfTextures}this._texturesToRelease={}},U8.prototype.isDestroyed=function(){return!1},U8.prototype.destroy=function(){var e=this._textures;for(var t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return Ks(this)};var W8=U8;var G8=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.color=Hf.clone(Object(r.a)(e.color,Hf.WHITE)),this.intensity=Object(r.a)(e.intensity,2)};function q8(){this.globeDepthTexture=void 0,this.gamma=void 0,this._viewport=new bl,this._viewportCartesian4=new he,this._viewportDirty=!1,this._viewportOrthographicMatrix=Ae.clone(Ae.IDENTITY),this._viewportTransformation=Ae.clone(Ae.IDENTITY),this._model=Ae.clone(Ae.IDENTITY),this._view=Ae.clone(Ae.IDENTITY),this._inverseView=Ae.clone(Ae.IDENTITY),this._projection=Ae.clone(Ae.IDENTITY),this._infiniteProjection=Ae.clone(Ae.IDENTITY),this._entireFrustum=new Mt,this._currentFrustum=new Mt,this._frustumPlanes=new he,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=oe.clone(Ae.IDENTITY),this._view3DDirty=!0,this._view3D=new Ae,this._inverseView3DDirty=!0,this._inverseView3D=new Ae,this._inverseModelDirty=!0,this._inverseModel=new Ae,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new oe,this._viewRotation=new oe,this._inverseViewRotation=new oe,this._viewRotation3D=new oe,this._inverseViewRotation3D=new oe,this._inverseProjectionDirty=!0,this._inverseProjection=new Ae,this._modelViewDirty=!0,this._modelView=new Ae,this._modelView3DDirty=!0,this._modelView3D=new Ae,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new Ae,this._inverseModelViewDirty=!0,this._inverseModelView=new Ae,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new Ae,this._viewProjectionDirty=!0,this._viewProjection=new Ae,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new Ae,this._modelViewProjectionDirty=!0,this._modelViewProjection=new Ae,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new Ae,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new Ae,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new Ae,this._normalDirty=!0,this._normal=new oe,this._normal3DDirty=!0,this._normal3D=new oe,this._inverseNormalDirty=!0,this._inverseNormal=new oe,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new oe,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new vh,this._cameraPosition=new O,this._sunPositionWC=new O,this._sunPositionColumbusView=new O,this._sunDirectionWC=new O,this._sunDirectionEC=new O,this._moonDirectionEC=new O,this._lightDirectionWC=new O,this._lightDirectionEC=new O,this._lightColor=new O,this._lightColorHdr=new O,this._pass=void 0,this._mode=void 0,this._mapProjection=void 0,this._ellipsoid=void 0,this._cameraDirection=new O,this._cameraRight=new O,this._cameraUp=new O,this._frustum2DWidth=0,this._eyeHeight=0,this._eyeHeight2D=new Mt,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new Hf,this._brdfLut=void 0,this._environmentMap=void 0,this._sphericalHarmonicCoefficients=void 0,this._specularEnvironmentMaps=void 0,this._specularEnvironmentMapsDimensions=new Mt,this._specularEnvironmentMapsMaximumLOD=void 0,this._fogDensity=void 0,this._invertClassificationColor=void 0,this._imagerySplitPosition=0,this._pixelSizePerMeter=void 0,this._geometricToleranceOverMeter=void 0,this._minimumDisableDepthTestDistance=void 0}Object.defineProperties(q8.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!bl.equals(e,this._viewport)){bl.clone(e,this._viewport);var t=this._viewport,n=this._viewportCartesian4;n.x=t.x,n.y=t.y,n.z=t.width,n.w=t.height,this._viewportDirty=!0}}},viewportCartesian4:{get:function(){return this._viewportCartesian4}},viewportOrthographic:{get:function(){return Q8(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return Q8(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){Ae.clone(e,this._model),this._modelView3DDirty=!0,this._inverseModelView3DDirty=!0,this._inverseModelDirty=!0,this._inverseTransposeModelDirty=!0,this._modelViewDirty=!0,this._inverseModelViewDirty=!0,this._modelViewRelativeToEyeDirty=!0,this._inverseModelViewDirty=!0,this._modelViewProjectionDirty=!0,this._inverseModelViewProjectionDirty=!0,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewInfiniteProjectionDirty=!0,this._normalDirty=!0,this._inverseNormalDirty=!0,this._normal3DDirty=!0,this._inverseNormal3DDirty=!0,this._encodedCameraPositionMCDirty=!0}},inverseModel:{get:function(){return this._inverseModelDirty&&(this._inverseModelDirty=!1,Ae.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){var e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,Ae.getMatrix3(this.inverseModel,e),oe.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return see(this),this._view3D}},viewRotation:{get:function(){return see(this),this._viewRotation}},viewRotation3D:{get:function(){return see(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return cee(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return cee(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){var e;return(e=this)._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode===IR.SCENE2D||e._mode===IR.MORPHING||e._orthographicIn3D?Ae.clone(Ae.ZERO,e._inverseProjection):Ae.inverse(e._projection,e._inverseProjection)),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){var e;return(e=this)._modelViewDirty&&(e._modelViewDirty=!1,Ae.multiplyTransformation(e._view,e._model,e._modelView)),this._modelView}},modelView3D:{get:function(){var e;return(e=this)._modelView3DDirty&&(e._modelView3DDirty=!1,Ae.multiplyTransformation(e.view3D,e._model,e._modelView3D)),this._modelView3D}},modelViewRelativeToEye:{get:function(){return function(e){if(e._modelViewRelativeToEyeDirty){e._modelViewRelativeToEyeDirty=!1;var t=e.modelView,n=e._modelViewRelativeToEye;n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=0,n[13]=0,n[14]=0,n[15]=t[15]}}(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){var e;return(e=this)._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,Ae.inverse(e.modelView,e._inverseModelView)),this._inverseModelView}},inverseModelView3D:{get:function(){var e;return(e=this)._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,Ae.inverse(e.modelView3D,e._inverseModelView3D)),this._inverseModelView3D}},viewProjection:{get:function(){var e;return(e=this)._viewProjectionDirty&&(e._viewProjectionDirty=!1,Ae.multiply(e._projection,e._view,e._viewProjection)),this._viewProjection}},inverseViewProjection:{get:function(){var e;return(e=this)._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,Ae.inverse(e.viewProjection,e._inverseViewProjection)),this._inverseViewProjection}},modelViewProjection:{get:function(){var e;return(e=this)._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,Ae.multiply(e._projection,e.modelView,e._modelViewProjection)),this._modelViewProjection}},inverseModelViewProjection:{get:function(){var e;return(e=this)._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,Ae.inverse(e.modelViewProjection,e._inverseModelViewProjection)),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){var e;return(e=this)._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,Ae.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye)),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){var e;return(e=this)._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,Ae.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection)),this._modelViewInfiniteProjection}},normal:{get:function(){return function(e){if(e._normalDirty){e._normalDirty=!1;var t=e._normal;Ae.getMatrix3(e.inverseModelView,t),oe.getRotation(t,t),oe.transpose(t,t)}}(this),this._normal}},normal3D:{get:function(){return function(e){if(e._normal3DDirty){e._normal3DDirty=!1;var t=e._normal3D;Ae.getMatrix3(e.inverseModelView3D,t),oe.getRotation(t,t),oe.transpose(t,t)}}(this),this._normal3D}},inverseNormal:{get:function(){var e;return(e=this)._inverseNormalDirty&&(e._inverseNormalDirty=!1,Ae.getMatrix3(e.inverseModelView,e._inverseNormal),oe.getRotation(e._inverseNormal,e._inverseNormal)),this._inverseNormal}},inverseNormal3D:{get:function(){var e;return(e=this)._inverseNormal3DDirty&&(e._inverseNormal3DDirty=!1,Ae.getMatrix3(e.inverseModelView3D,e._inverseNormal3D),oe.getRotation(e._inverseNormal3D,e._inverseNormal3D)),this._inverseNormal3D}},entireFrustum:{get:function(){return this._entireFrustum}},currentFrustum:{get:function(){return this._currentFrustum}},frustumPlanes:{get:function(){return this._frustumPlanes}},farDepthFromNearPlusOne:{get:function(){return this._farDepthFromNearPlusOne}},log2FarDepthFromNearPlusOne:{get:function(){return this._log2FarDepthFromNearPlusOne}},oneOverLog2FarDepthFromNearPlusOne:{get:function(){return this._oneOverLog2FarDepthFromNearPlusOne}},eyeHeight:{get:function(){return this._eyeHeight}},eyeHeight2D:{get:function(){return this._eyeHeight2D}},sunPositionWC:{get:function(){return this._sunPositionWC}},sunPositionColumbusView:{get:function(){return this._sunPositionColumbusView}},sunDirectionWC:{get:function(){return this._sunDirectionWC}},sunDirectionEC:{get:function(){return this._sunDirectionEC}},moonDirectionEC:{get:function(){return this._moonDirectionEC}},lightDirectionWC:{get:function(){return this._lightDirectionWC}},lightDirectionEC:{get:function(){return this._lightDirectionEC}},lightColor:{get:function(){return this._lightColor}},lightColorHdr:{get:function(){return this._lightColorHdr}},encodedCameraPositionMCHigh:{get:function(){return J8(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return J8(this),this._encodedCameraPositionMC.low}},temeToPseudoFixedMatrix:{get:function(){return this._temeToPseudoFixed}},pixelRatio:{get:function(){return this._pixelRatio}},fogDensity:{get:function(){return this._fogDensity}},geometricToleranceOverMeter:{get:function(){return this._geometricToleranceOverMeter}},pass:{get:function(){return this._pass}},backgroundColor:{get:function(){return this._backgroundColor}},brdfLut:{get:function(){return this._brdfLut}},environmentMap:{get:function(){return this._environmentMap}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps}},specularEnvironmentMapsDimensions:{get:function(){return this._specularEnvironmentMapsDimensions}},specularEnvironmentMapsMaximumLOD:{get:function(){return this._specularEnvironmentMapsMaximumLOD}},imagerySplitPosition:{get:function(){return this._imagerySplitPosition}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance}},invertClassificationColor:{get:function(){return this._invertClassificationColor}},orthographicIn3D:{get:function(){return this._orthographicIn3D}},ellipsoid:{get:function(){return Object(r.a)(this._ellipsoid,W.WGS84)}}});var Y8=new oe,$8=new R;q8.prototype.updateCamera=function(e){var t,n;t=this,n=e.viewMatrix,Ae.clone(n,t._view),Ae.getMatrix3(n,t._viewRotation),t._view3DDirty=!0,t._inverseView3DDirty=!0,t._modelViewDirty=!0,t._modelView3DDirty=!0,t._modelViewRelativeToEyeDirty=!0,t._inverseModelViewDirty=!0,t._inverseModelView3DDirty=!0,t._viewProjectionDirty=!0,t._inverseViewProjectionDirty=!0,t._modelViewProjectionDirty=!0,t._modelViewProjectionRelativeToEyeDirty=!0,t._modelViewInfiniteProjectionDirty=!0,t._normalDirty=!0,t._inverseNormalDirty=!0,t._normal3DDirty=!0,t._inverseNormal3DDirty=!0,function(e,t){Ae.clone(t,e._inverseView),Ae.getMatrix3(t,e._inverseViewRotation)}(this,e.inverseViewMatrix),function(e,t){O.clone(t.positionWC,e._cameraPosition),O.clone(t.directionWC,e._cameraDirection),O.clone(t.rightWC,e._cameraRight),O.clone(t.upWC,e._cameraUp);var n=t.positionCartographic;Object(o.a)(n)?e._eyeHeight=n.height:e._eyeHeight=-e._ellipsoid.maximumRadius,e._encodedCameraPositionMCDirty=!0}(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==IR.SCENE2D&&e.frustum instanceof Vb},q8.prototype.updateFrustum=function(e){var t,n;t=this,n=e.projectionMatrix,Ae.clone(n,t._projection),t._inverseProjectionDirty=!0,t._viewProjectionDirty=!0,t._inverseViewProjectionDirty=!0,t._modelViewProjectionDirty=!0,t._modelViewProjectionRelativeToEyeDirty=!0,Object(o.a)(e.infiniteProjectionMatrix)&&function(e,t){Ae.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=d.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne,Object(o.a)(e._offCenterFrustum)&&(e=e._offCenterFrustum),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right},q8.prototype.updatePass=function(e){this._pass=e};var X8=[],K8=new G8;function Q8(e){if(e._viewportDirty){var t=e._viewport;Ae.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),Ae.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}q8.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;var t=e.camera;this.updateCamera(t),e.mode===IR.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=.5*this._frustum2DWidth,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),function(e,t){Object(o.a)(ya.computeIcrfToFixedMatrix(t.time,Y8))||(Y8=ya.computeTemeToPseudoFixedMatrix(t.time,Y8));var n=LS.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);oe.multiplyByVector(Y8,n,n),O.normalize(n,e._sunDirectionWC),n=oe.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),O.normalize(n,n),n=LS.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),oe.multiplyByVector(Y8,n,n),oe.multiplyByVector(e.viewRotation3D,n,n),O.normalize(n,n);var i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,$8);i.project(r,e._sunPositionColumbusView)}(this,e);var n=Object(r.a)(e.light,K8);n instanceof G8?(this._lightDirectionWC=O.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=O.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=O.normalize(O.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=oe.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));var i=n.color,a=O.fromElements(i.red,i.green,i.blue,this._lightColorHdr);a=O.multiplyByScalar(a,n.intensity,a);var s=O.maximumComponent(a);s>1?O.divideByScalar(a,s,this._lightColor):O.clone(a,this._lightColor);var c=e.brdfLutGenerator,l=Object(o.a)(c)?c.colorTexture:void 0;this._brdfLut=l,this._environmentMap=Object(r.a)(e.environmentMap,e.context.defaultCubeMap),this._sphericalHarmonicCoefficients=Object(r.a)(e.sphericalHarmonicCoefficients,X8),this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,Object(o.a)(this._specularEnvironmentMaps)&&Mt.clone(this._specularEnvironmentMaps.dimensions,this._specularEnvironmentMapsDimensions),this._fogDensity=e.fog.density,this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=ya.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._imagerySplitPosition=e.imagerySplitPosition*e.context.drawingBufferWidth;var u,h=t.frustum.fov,d=this._viewport;u=Object(o.a)(h)?d.height>d.width?2*Math.tan(.5*h)/d.height:2*Math.tan(.5*h)/d.width:1/Math.max(d.width,d.height),this._geometricToleranceOverMeter=u*e.maximumScreenSpaceError,Hf.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};var Z8=new O;function J8(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,Ae.multiplyByPoint(e.inverseModel,e._cameraPosition,Z8),vh.fromCartesian(Z8,e._encodedCameraPositionMC))}var eee=new O,tee=new O,nee=new O,iee=new O,ree=new R,oee=new O,aee=new Ae;function see(e){e._view3DDirty&&(e._mode===IR.SCENE3D?Ae.clone(e._view,e._view3D):function(e,t,n,i,r,a,s,c){var l=eee;l.x=e.y,l.y=e.z,l.z=e.x;var u=tee;u.x=n.y,u.y=n.z,u.z=n.x;var h=nee;h.x=i.y,h.y=i.z,h.z=i.x;var f=iee;f.x=t.y,f.y=t.z,f.z=t.x,a===IR.SCENE2D&&(l.z=.5*r);var p=s.unproject(l,ree);p.longitude=d.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=d.clamp(p.latitude,-d.PI_OVER_TWO,d.PI_OVER_TWO);var m=s.ellipsoid,g=m.cartographicToCartesian(p,oee),v=ya.eastNorthUpToFixedFrame(g,m,aee);Ae.multiplyByPointAsVector(v,u,u),Ae.multiplyByPointAsVector(v,h,h),Ae.multiplyByPointAsVector(v,f,f),Object(o.a)(c)||(c=new Ae),c[0]=u.x,c[1]=h.x,c[2]=-f.x,c[3]=0,c[4]=u.y,c[5]=h.y,c[6]=-f.y,c[7]=0,c[8]=u.z,c[9]=h.z,c[10]=-f.z,c[11]=0,c[12]=-O.dot(u,g),c[13]=-O.dot(h,g),c[14]=O.dot(f,g),c[15]=1}(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),Ae.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function cee(e){e._inverseView3DDirty&&(Ae.inverseTransformation(e.view3D,e._inverseView3D),Ae.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var lee=q8;function uee(e,t,n){var i=e.getError();if(i!==e.NO_ERROR)throw new de.a(function(e,t,n,i){for(var r=function(e,t){var n="WebGL Error: ";switch(t){case e.INVALID_ENUM:n+="INVALID_ENUM";break;case e.INVALID_VALUE:n+="INVALID_VALUE";break;case e.INVALID_OPERATION:n+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:n+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:n+="CONTEXT_LOST_WEBGL lost";break;default:n+="Unknown ("+t+")"}return n}(e,i)+": "+t.name+"(",o=0;o<n.length;++o)0!==o&&(r+=", "),r+=n[o];return r+=");"}(e,t,n,i))}function hee(e,t,n){return{get:function(){var i=e[t];return n(e,"get: "+t,i),e[t]},set:function(i){e[t]=i,n(e,"set: "+t,i)}}}function dee(e,t){for(var n=t.length,i=0;i<n;++i){var r=e.getExtension(t[i]);if(r)return r}}function fee(e,t){if("undefined"===typeof WebGLRenderingContext)throw new de.a("The browser does not support WebGL. Visit http://get.webgl.org.");i.a.defined("canvas",e),this._canvas=e,t=Object(Lf.a)(t,!0),(t=Object(r.a)(t,{})).allowTextureFilterAnisotropic=Object(r.a)(t.allowTextureFilterAnisotropic,!0);var n=Object(r.a)(t.webgl,{});n.alpha=Object(r.a)(n.alpha,!1),n.stencil=Object(r.a)(n.stencil,!0);var a,s=Object(r.a)(t.requestWebgl2,!1)&&"undefined"!==typeof WebGL2RenderingContext,c=!1,l=t.getWebGLStub;if(Object(o.a)(l))a=l(e,n);else if(s&&(a=e.getContext("webgl2",n)||e.getContext("experimental-webgl2",n)||void 0,Object(o.a)(a)&&(c=!0)),Object(o.a)(a)||(a=e.getContext("webgl",n)||e.getContext("experimental-webgl",n)||void 0),!Object(o.a)(a))throw new de.a("The browser supports WebGL, but initialization failed.");this._originalGLContext=a,this._gl=a,this._webgl2=c,this._id=l_(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new V8(this),this._textureCache=new W8;var u=a;this._stencilBits=u.getParameter(u.STENCIL_BITS),BP._maximumCombinedTextureImageUnits=u.getParameter(u.MAX_COMBINED_TEXTURE_IMAGE_UNITS),BP._maximumCubeMapSize=u.getParameter(u.MAX_CUBE_MAP_TEXTURE_SIZE),BP._maximumFragmentUniformVectors=u.getParameter(u.MAX_FRAGMENT_UNIFORM_VECTORS),BP._maximumTextureImageUnits=u.getParameter(u.MAX_TEXTURE_IMAGE_UNITS),BP._maximumRenderbufferSize=u.getParameter(u.MAX_RENDERBUFFER_SIZE),BP._maximumTextureSize=u.getParameter(u.MAX_TEXTURE_SIZE),BP._maximumVaryingVectors=u.getParameter(u.MAX_VARYING_VECTORS),BP._maximumVertexAttributes=u.getParameter(u.MAX_VERTEX_ATTRIBS),BP._maximumVertexTextureImageUnits=u.getParameter(u.MAX_VERTEX_TEXTURE_IMAGE_UNITS),BP._maximumVertexUniformVectors=u.getParameter(u.MAX_VERTEX_UNIFORM_VECTORS);var h=u.getParameter(u.ALIASED_LINE_WIDTH_RANGE);BP._minimumAliasedLineWidth=h[0],BP._maximumAliasedLineWidth=h[1];var d=u.getParameter(u.ALIASED_POINT_SIZE_RANGE);BP._minimumAliasedPointSize=d[0],BP._maximumAliasedPointSize=d[1];var f=u.getParameter(u.MAX_VIEWPORT_DIMS);BP._maximumViewportWidth=f[0],BP._maximumViewportHeight=f[1];var p=u.getShaderPrecisionFormat(u.FRAGMENT_SHADER,u.HIGH_FLOAT);BP._highpFloatSupported=0!==p.precision;var m=u.getShaderPrecisionFormat(u.FRAGMENT_SHADER,u.HIGH_INT);BP._highpIntSupported=0!==m.rangeMax,this._antialias=u.getContextAttributes().antialias,this._standardDerivatives=!!dee(u,["OES_standard_derivatives"]),this._blendMinmax=!!dee(u,["EXT_blend_minmax"]),this._elementIndexUint=!!dee(u,["OES_element_index_uint"]),this._depthTexture=!!dee(u,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!dee(u,["EXT_frag_depth"]),this._debugShaders=dee(u,["WEBGL_debug_shaders"]),this._textureFloat=!!dee(u,["OES_texture_float"]),this._textureHalfFloat=!!dee(u,["OES_texture_half_float"]),this._textureFloatLinear=!!dee(u,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!dee(u,["OES_texture_half_float_linear"]),this._colorBufferFloat=!!dee(u,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!dee(u,["EXT_float_blend"]),this._colorBufferHalfFloat=!!dee(u,["EXT_color_buffer_half_float"]),this._s3tc=!!dee(u,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!dee(u,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._etc1=!!dee(u,["WEBGL_compressed_texture_etc1"]);var g,v,_,b,y,w,O,C,E,A,x=t.allowTextureFilterAnisotropic?dee(u,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;if(this._textureFilterAnisotropic=x,BP._maximumTextureFilterAnisotropy=Object(o.a)(x)?u.getParameter(x.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1,c){var T=this;g=function(){return T._gl.createVertexArray()},v=function(e){T._gl.bindVertexArray(e)},_=function(e){T._gl.deleteVertexArray(e)},b=function(e,t,n,i,r){u.drawElementsInstanced(e,t,n,i,r)},y=function(e,t,n,i){u.drawArraysInstanced(e,t,n,i)},w=function(e,t){u.vertexAttribDivisor(e,t)},O=function(e){u.drawBuffers(e)}}else C=dee(u,["OES_vertex_array_object"]),Object(o.a)(C)&&(g=function(){return C.createVertexArrayOES()},v=function(e){C.bindVertexArrayOES(e)},_=function(e){C.deleteVertexArrayOES(e)}),E=dee(u,["ANGLE_instanced_arrays"]),Object(o.a)(E)&&(b=function(e,t,n,i,r){E.drawElementsInstancedANGLE(e,t,n,i,r)},y=function(e,t,n,i){E.drawArraysInstancedANGLE(e,t,n,i)},w=function(e,t){E.vertexAttribDivisorANGLE(e,t)}),A=dee(u,["WEBGL_draw_buffers"]),Object(o.a)(A)&&(O=function(e){A.drawBuffersWEBGL(e)});this.glCreateVertexArray=g,this.glBindVertexArray=v,this.glDeleteVertexArray=_,this.glDrawElementsInstanced=b,this.glDrawArraysInstanced=y,this.glVertexAttribDivisor=w,this.glDrawBuffers=O,this._vertexArrayObject=!!C,this._instancedArrays=!!E,this._drawBuffers=!!A,BP._maximumDrawBuffers=this.drawBuffers?u.getParameter(Ts.MAX_DRAW_BUFFERS):1,BP._maximumColorAttachments=this.drawBuffers?u.getParameter(Ts.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new Hf(0,0,0,0),this._clearDepth=1,this._clearStencil=0;var S=new lee,D=new k8(this),P=XI.fromCache();this._defaultPassState=D,this._defaultRenderState=P,this._defaultTexture=void 0,this._defaultCubeMap=void 0,this._us=S,this._currentRenderState=P,this._currentPassState=D,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(var I=0;I<BP._maximumVertexAttributes;I++)this._vertexAttribDivisors.push(0);this._pickObjects={},this._nextPickColor=new Uint32Array(1),this.options=t,this.cache={},XI.apply(u,P,D)}var pee,mee={};function gee(e,t,n,i){var r=e._currentRenderState,o=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,XI.partialApply(e._gl,r,t,o,n,i)}function vee(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;var n=pee;if(Object(o.a)(t))t._bind(),function(e){if(e.validateFramebuffer){var t=e._gl,n=t.checkFramebufferStatus(t.FRAMEBUFFER);if(n!==t.FRAMEBUFFER_COMPLETE){var i;switch(n){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:i="Framebuffer is not complete. Incomplete attachment: at least one attachment point with a renderbuffer or texture attached has its attached object no longer in existence or has an attached image with a width or height of zero, or the color attachment point has a non-color-renderable image attached, or the depth attachment point has a non-depth-renderable image attached, or the stencil attachment point has a non-stencil-renderable image attached. Color-renderable formats include GL_RGBA4, GL_RGB5_A1, and GL_RGB565. GL_DEPTH_COMPONENT16 is the only depth-renderable format. GL_STENCIL_INDEX8 is the only stencil-renderable format.";break;case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:i="Framebuffer is not complete. Incomplete dimensions: not all attached images have the same width and height.";break;case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:i="Framebuffer is not complete. Missing attachment: no images are attached to the framebuffer.";break;case t.FRAMEBUFFER_UNSUPPORTED:i="Framebuffer is not complete. Unsupported: the combination of internal formats of the attached images violates an implementation-dependent set of restrictions."}throw new a.a(i)}}}(e),n=t._getActiveColorAttachments();else{var i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}Object.defineProperties(fee.prototype,{id:{get:function(){return this._id}},webgl2:{get:function(){return this._webgl2}},canvas:{get:function(){return this._canvas}},shaderCache:{get:function(){return this._shaderCache}},textureCache:{get:function(){return this._textureCache}},uniformState:{get:function(){return this._us}},stencilBits:{get:function(){return this._stencilBits}},stencilBuffer:{get:function(){return this._stencilBits>=8}},antialias:{get:function(){return this._antialias}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},etc1:{get:function(){return this._etc1}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=function(e,t){if(!Object(o.a)(t))return e;function n(n){return function(){var i=n.apply(e,arguments);return t(e,n,arguments),i}}var i={};for(var r in e){var a=e[r];a instanceof Function?i[r]=n(a):Object.defineProperty(i,r,hee(e,r,t))}return i}(this._originalGLContext,e?uee:void 0)}},defaultTexture:{get:function(){return void 0===this._defaultTexture&&(this._defaultTexture=new nI({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])},flipY:!1})),this._defaultTexture}},defaultCubeMap:{get:function(){if(void 0===this._defaultCubeMap){var e={width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])};this._defaultCubeMap=new eI({context:this,source:{positiveX:e,negativeX:e,positiveY:e,negativeY:e,positiveZ:e,negativeZ:e},flipY:!1})}return this._defaultCubeMap}},drawingBufferHeight:{get:function(){return this._gl.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._gl.drawingBufferWidth}},defaultFramebuffer:{get:function(){return mee}}}),"undefined"!==typeof WebGLRenderingContext&&(pee=[Ts.BACK]);var _ee=new yN;fee.prototype.clear=function(e,t){e=Object(r.a)(e,_ee),t=Object(r.a)(t,this._defaultPassState);var n=this._gl,i=0,a=e.color,s=e.depth,c=e.stencil;Object(o.a)(a)&&(Hf.equals(this._clearColor,a)||(Hf.clone(a,this._clearColor),n.clearColor(a.red,a.green,a.blue,a.alpha)),i|=n.COLOR_BUFFER_BIT),Object(o.a)(s)&&(s!==this._clearDepth&&(this._clearDepth=s,n.clearDepth(s)),i|=n.DEPTH_BUFFER_BIT),Object(o.a)(c)&&(c!==this._clearStencil&&(this._clearStencil=c,n.clearStencil(c)),i|=n.STENCIL_BUFFER_BIT),gee(this,Object(r.a)(e.renderState,this._defaultRenderState),t,!0),vee(this,Object(r.a)(e.framebuffer,t.framebuffer)),n.clear(i)},fee.prototype.draw=function(e,t,n,s){i.a.defined("drawCommand",e),i.a.defined("drawCommand.shaderProgram",e._shaderProgram),t=Object(r.a)(t,this._defaultPassState);var c=Object(r.a)(e._framebuffer,t.framebuffer),l=Object(r.a)(e._renderState,this._defaultRenderState);n=Object(r.a)(n,e._shaderProgram),s=Object(r.a)(s,e._uniformMap),function(e,t,n,i,r){if(Object(o.a)(t)&&r.depthTest&&r.depthTest.enabled&&!t.hasDepthAttachment)throw new a.a("The depth test can not be enabled (drawCommand.renderState.depthTest.enabled) because the framebuffer (drawCommand.framebuffer) does not have a depth or depth-stencil renderbuffer.");vee(e,t),gee(e,r,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}(this,c,t,n,l),function(e,t,n,s){var c=t._primitiveType,l=t._vertexArray,u=t._offset,h=t._count,d=t.instanceCount;if(!xl.validate(c))throw new a.a("drawCommand.primitiveType is required and must be valid.");if(i.a.defined("drawCommand.vertexArray",l),i.a.typeOf.number.greaterThanOrEquals("drawCommand.offset",u,0),Object(o.a)(h)&&i.a.typeOf.number.greaterThanOrEquals("drawCommand.count",h,0),i.a.typeOf.number.greaterThanOrEquals("drawCommand.instanceCount",d,0),d>0&&!e.instancedArrays)throw new a.a("Instanced arrays extension is not supported");e._us.model=Object(r.a)(t._modelMatrix,Ae.IDENTITY),n._setUniforms(s,e._us,e.validateShaderProgram),l._bind();var f=l.indexBuffer;Object(o.a)(f)?(u*=f.bytesPerIndex,h=Object(r.a)(h,f.numberOfIndices),0===d?e._gl.drawElements(c,h,f.indexDatatype,u):e.glDrawElementsInstanced(c,h,f.indexDatatype,u,d)):(h=Object(r.a)(h,l.numberOfVertices),0===d?e._gl.drawArrays(c,u,h):e.glDrawArraysInstanced(c,u,h,d)),l._unBind()}(this,e,n,s)},fee.prototype.endFrame=function(){var e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);var t=pee;this.drawBuffers&&this.glDrawBuffers(t);var n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(var i=0;i<n;++i)e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null)},fee.prototype.readPixels=function(e){var t=this._gl;e=Object(r.a)(e,r.a.EMPTY_OBJECT);var n=Math.max(Object(r.a)(e.x,0),0),a=Math.max(Object(r.a)(e.y,0),0),s=Object(r.a)(e.width,t.drawingBufferWidth),c=Object(r.a)(e.height,t.drawingBufferHeight),l=e.framebuffer;i.a.typeOf.number.greaterThan("readState.width",s,0),i.a.typeOf.number.greaterThan("readState.height",c,0);var u=LC.UNSIGNED_BYTE;Object(o.a)(l)&&l.numberOfColorAttachments>0&&(u=l.getColorTexture(0).pixelDatatype);var h=FC.createTypedArray(FC.RGBA,u,s,c);return vee(this,l),t.readPixels(n,a,s,c,FC.RGBA,LC.toWebGLConstant(u,this),h),h};var bee={position:0,textureCoordinates:1};function yee(e,t,n){this._pickObjects=e,this.key=t,this.color=n}fee.prototype.getViewportQuadVertexArray=function(){var e=this.cache.viewportQuad_vertexArray;if(!Object(o.a)(e)){var t=new zl({attributes:{position:new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:xl.TRIANGLES});e=hR.fromGeometry({context:this,geometry:t,attributeLocations:bee,bufferUsage:iR.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e},fee.prototype.createViewportQuadCommand=function(e,t){return t=Object(r.a)(t,r.a.EMPTY_OBJECT),new CI({vertexArray:this.getViewportQuadVertexArray(),primitiveType:xl.TRIANGLES,renderState:t.renderState,shaderProgram:LM.fromCache({context:this,vertexShaderSource:L8,fragmentShaderSource:e,attributeLocations:bee}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})},fee.prototype.getObjectByPickColor=function(e){return i.a.defined("pickColor",e),this._pickObjects[e.toRgba()]},Object.defineProperties(yee.prototype,{object:{get:function(){return this._pickObjects[this.key]},set:function(e){this._pickObjects[this.key]=e}}}),yee.prototype.destroy=function(){delete this._pickObjects[this.key]},fee.prototype.createPickId=function(e){i.a.defined("object",e),++this._nextPickColor[0];var t=this._nextPickColor[0];if(0===t)throw new de.a("Out of unique Pick IDs.");return this._pickObjects[t]=e,new yee(this._pickObjects,t,Hf.fromRgba(t))},fee.prototype.isDestroyed=function(){return!1},fee.prototype.destroy=function(){var e=this.cache;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];Object(o.a)(n.destroy)&&n.destroy()}return this._shaderCache=this._shaderCache.destroy(),this._textureCache=this._textureCache.destroy(),this._defaultTexture=this._defaultTexture&&this._defaultTexture.destroy(),this._defaultCubeMap=this._defaultCubeMap&&this._defaultCubeMap.destroy(),Ks(this)};var wee=fee;var Oee=function(e,t){if(i.a.defined("context",e),!Object(o.a)(t)||!Object(o.a)(t.positiveX)||!Object(o.a)(t.negativeX)||!Object(o.a)(t.positiveY)||!Object(o.a)(t.negativeY)||!Object(o.a)(t.positiveZ)||!Object(o.a)(t.negativeZ))throw new a.a("urls is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.");var n={flipY:!0,preferImageBitmap:!0},r=[_t.a.createIfNeeded(t.positiveX).fetchImage(n),_t.a.createIfNeeded(t.negativeX).fetchImage(n),_t.a.createIfNeeded(t.positiveY).fetchImage(n),_t.a.createIfNeeded(t.negativeY).fetchImage(n),_t.a.createIfNeeded(t.positiveZ).fetchImage(n),_t.a.createIfNeeded(t.negativeZ).fetchImage(n)];return Yt.a.all(r,(function(t){return new eI({context:e,source:{positiveX:t[0],negativeX:t[1],positiveY:t[2],negativeY:t[3],positiveZ:t[4],negativeZ:t[5]}})}))},Cee={RGBA4:Ts.RGBA4,RGB5_A1:Ts.RGB5_A1,RGB565:Ts.RGB565,DEPTH_COMPONENT16:Ts.DEPTH_COMPONENT16,STENCIL_INDEX8:Ts.STENCIL_INDEX8,DEPTH_STENCIL:Ts.DEPTH_STENCIL,validate:function(e){return e===Cee.RGBA4||e===Cee.RGB5_A1||e===Cee.RGB565||e===Cee.DEPTH_COMPONENT16||e===Cee.STENCIL_INDEX8||e===Cee.DEPTH_STENCIL}},Eee=Object.freeze(Cee);function Aee(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.context",e.context);var t=e.context._gl,n=BP.maximumRenderbufferSize,s=Object(r.a)(e.format,Eee.RGBA4),c=Object(o.a)(e.width)?e.width:t.drawingBufferWidth,l=Object(o.a)(e.height)?e.height:t.drawingBufferHeight;if(!Eee.validate(s))throw new a.a("Invalid format.");if(i.a.typeOf.number.greaterThan("width",c,0),c>n)throw new a.a("Width must be less than or equal to the maximum renderbuffer size ("+n+"). Check maximumRenderbufferSize.");if(i.a.typeOf.number.greaterThan("height",l,0),l>n)throw new a.a("Height must be less than or equal to the maximum renderbuffer size ("+n+"). Check maximumRenderbufferSize.");this._gl=t,this._format=s,this._width=c,this._height=l,this._renderbuffer=this._gl.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,this._renderbuffer),t.renderbufferStorage(t.RENDERBUFFER,s,c,l),t.bindRenderbuffer(t.RENDERBUFFER,null)}Object.defineProperties(Aee.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}}),Aee.prototype._getRenderbuffer=function(){return this._renderbuffer},Aee.prototype.isDestroyed=function(){return!1},Aee.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),Ks(this)};var xee=Aee;function Tee(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.missingImageUrl))throw new a.a("options.missingImageUrl is required.");if(!Object(o.a)(e.pixelsToCheck))throw new a.a("options.pixelsToCheck is required.");this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;var t=_t.a.createIfNeeded(e.missingImageUrl),n=this;t.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}).then((function(t){Object(o.a)(t.blob)&&(n._missingImageByteLength=t.blob.size);var i=Ry(t);if(e.disableCheckIfAllPixelsAreTransparent){for(var r=!0,a=t.width,s=e.pixelsToCheck,c=0,l=s.length;r&&c<l;++c){var u=s[c];i[4*u.x+u.y*a+3]>0&&(r=!1)}r&&(i=void 0)}n._missingImagePixels=i,n._isReady=!0})).otherwise((function(){n._missingImagePixels=void 0,n._isReady=!0}))}Tee.prototype.isReady=function(){return this._isReady},Tee.prototype.shouldDiscardImage=function(e){if(!this._isReady)throw new a.a("shouldDiscardImage must not be called before the discard policy is ready.");var t=this._pixelsToCheck,n=this._missingImagePixels;if(!Object(o.a)(n))return!1;if(Object(o.a)(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;for(var i=Ry(e),r=e.width,s=0,c=t.length;s<c;++s)for(var l=t[s],u=4*l.x+l.y*r,h=0;h<4;++h){var d=u+h;if(i[d]!==n[d])return!1}return!0};var See=Tee;function Dee(){this.name=void 0,this.description=void 0,this.position=void 0,this.data=void 0,this.imageryLayer=void 0}Dee.prototype.configureNameFromProperties=function(e){var t,n=10;for(var i in e)if(e.hasOwnProperty(i)&&e[i]){var r=i.toLowerCase();n>1&&"name"===r?(n=1,t=i):n>2&&"title"===r?(n=2,t=i):n>3&&/name/i.test(i)?(n=3,t=i):n>4&&/title/i.test(i)&&(n=4,t=i)}Object(o.a)(t)&&(this.name=e[t])},Dee.prototype.configureDescriptionFromProperties=function(e){this.description=function e(t){var n='<table class="cesium-infoBox-defaultTable">';for(var i in t)if(t.hasOwnProperty(i)){var r=t[i];Object(o.a)(r)&&(n+="object"===typeof r?"<tr><td>"+i+"</td><td>"+e(r)+"</td></tr>":"<tr><td>"+i+"</td><td>"+r+"</td></tr>")}return n+="</table>"}(e)};var Pee=Dee;function Iee(){this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,a.a.throwInstantiationError()}Object.defineProperties(Iee.prototype,{ready:{get:a.a.throwInstantiationError},readyPromise:{get:a.a.throwInstantiationError},rectangle:{get:a.a.throwInstantiationError},tileWidth:{get:a.a.throwInstantiationError},tileHeight:{get:a.a.throwInstantiationError},maximumLevel:{get:a.a.throwInstantiationError},minimumLevel:{get:a.a.throwInstantiationError},tilingScheme:{get:a.a.throwInstantiationError},tileDiscardPolicy:{get:a.a.throwInstantiationError},errorEvent:{get:a.a.throwInstantiationError},credit:{get:a.a.throwInstantiationError},proxy:{get:a.a.throwInstantiationError},hasAlphaChannel:{get:a.a.throwInstantiationError}}),Iee.prototype.getTileCredits=function(e,t,n){a.a.throwInstantiationError()},Iee.prototype.requestImage=function(e,t,n,i){a.a.throwInstantiationError()},Iee.prototype.pickFeatures=function(e,t,n,i,r){a.a.throwInstantiationError()};var Mee=/\.ktx$/i,Ree=/\.crn$/i;Iee.loadImage=function(e,t){i.a.defined("url",t);var n=_t.a.createIfNeeded(t);return Mee.test(n.url)?kC(n):Ree.test(n.url)?IC(n):Object(o.a)(e)&&Object(o.a)(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var Lee=Iee;function jee(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=_t.a.createIfNeeded(e.url);t.appendForwardSlash(),Object(o.a)(e.token)&&t.setQueryParameters({token:e.token}),this._resource=t,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tileWidth=Object(r.a)(e.tileWidth,256),this._tileHeight=Object(r.a)(e.tileHeight,256),this._maximumLevel=e.maximumLevel,this._tilingScheme=Object(r.a)(e.tilingScheme,new Lt({ellipsoid:e.ellipsoid})),this._useTiles=Object(r.a)(e.usePreCachedTilesIfAvailable,!0),this._rectangle=Object(r.a)(e.rectangle,this._tilingScheme.rectangle),this._layers=e.layers;var n=e.credit;"string"===typeof n&&(n=new yn(n)),this._credit=n,this.enablePickFeatures=Object(r.a)(e.enablePickFeatures,!0),this._errorEvent=new wn.a,this._ready=!1,this._readyPromise=Yt.a.defer();var i,s=this;function c(t){var n=t.tileInfo;if(Object(o.a)(n)){if(s._tileWidth=n.rows,s._tileHeight=n.cols,102100===n.spatialReference.wkid||102113===n.spatialReference.wkid)s._tilingScheme=new Kc({ellipsoid:e.ellipsoid});else{if(4326!==t.tileInfo.spatialReference.wkid){var r="Tile spatial reference WKID "+t.tileInfo.spatialReference.wkid+" is not supported.";return void(i=$c.handleError(i,s,s._errorEvent,r,void 0,void 0,void 0,u))}s._tilingScheme=new Lt({ellipsoid:e.ellipsoid})}if(s._maximumLevel=t.tileInfo.lods.length-1,Object(o.a)(t.fullExtent)){if(Object(o.a)(t.fullExtent.spatialReference)&&Object(o.a)(t.fullExtent.spatialReference.wkid))if(102100===t.fullExtent.spatialReference.wkid||102113===t.fullExtent.spatialReference.wkid){var a=new Vs,c=t.fullExtent,l=a.unproject(new O(Math.max(c.xmin,-s._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(c.ymin,-s._tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),h=a.unproject(new O(Math.min(c.xmax,s._tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(c.ymax,s._tilingScheme.ellipsoid.maximumRadius*Math.PI),0));s._rectangle=new Se(l.longitude,l.latitude,h.longitude,h.latitude)}else{if(4326!==t.fullExtent.spatialReference.wkid){var d="fullExtent.spatialReference WKID "+t.fullExtent.spatialReference.wkid+" is not supported.";return void(i=$c.handleError(i,s,s._errorEvent,d,void 0,void 0,void 0,u))}s._rectangle=Se.fromDegrees(t.fullExtent.xmin,t.fullExtent.ymin,t.fullExtent.xmax,t.fullExtent.ymax)}}else s._rectangle=s._tilingScheme.rectangle;Object(o.a)(s._tileDiscardPolicy)||(s._tileDiscardPolicy=new See({missingImageUrl:Fee(s,0,0,s._maximumLevel).url,pixelsToCheck:[new Mt(0,0),new Mt(200,20),new Mt(20,200),new Mt(80,110),new Mt(160,130)],disableCheckIfAllPixelsAreTransparent:!0})),s._useTiles=!0}else s._useTiles=!1;Object(o.a)(t.copyrightText)&&t.copyrightText.length>0&&(s._credit=new yn(t.copyrightText)),s._ready=!0,s._readyPromise.resolve(!0),$c.handleSuccess(i)}function l(e){var t="An error occurred while accessing "+s._resource.url+".";i=$c.handleError(i,s,s._errorEvent,t,void 0,void 0,void 0,u),s._readyPromise.reject(new de.a(t))}function u(){var e=s._resource.getDerivedResource({queryParameters:{f:"json"}}).fetchJsonp();Object(Yt.a)(e,c,l)}this._useTiles?u():(this._ready=!0,this._readyPromise.resolve(!0))}function Fee(e,t,n,i,r){var o;if(e._useTiles)o=e._resource.getDerivedResource({url:"tile/"+i+"/"+n+"/"+t,request:r});else{var a=e._tilingScheme.tileXYToNativeRectangle(t,n,i),s={bbox:a.west+","+a.south+","+a.east+","+a.north,size:e._tileWidth+","+e._tileHeight,format:"png",transparent:!0,f:"image"};e._tilingScheme.projection instanceof q?(s.bboxSR=4326,s.imageSR=4326):(s.bboxSR=3857,s.imageSR=3857),e.layers&&(s.layers="show:"+e.layers),o=e._resource.getDerivedResource({url:"export",request:r,queryParameters:s})}return o}Object.defineProperties(jee.prototype,{url:{get:function(){return this._resource._url}},token:{get:function(){return this._resource.queryParameters.token}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._maximumLevel}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return 0}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},rectangle:{get:function(){if(!this._ready)throw new a.a("rectangle must not be called before the imagery provider is ready.");return this._rectangle}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},credit:{get:function(){return this._credit}},usingPrecachedTiles:{get:function(){return this._useTiles}},hasAlphaChannel:{get:function(){return!0}},layers:{get:function(){return this._layers}}}),jee.prototype.getTileCredits=function(e,t,n){},jee.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");return Lee.loadImage(this,Fee(this,e,t,n,i))},jee.prototype.pickFeatures=function(e,t,n,i,r){if(!this._ready)throw new a.a("pickFeatures must not be called before the imagery provider is ready.");if(this.enablePickFeatures){var s,c,l,u=this._tilingScheme.tileXYToNativeRectangle(e,t,n);if(this._tilingScheme.projection instanceof q)s=d.toDegrees(i),c=d.toDegrees(r),l="4326";else{var h=this._tilingScheme.projection.project(new R(i,r,0));s=h.x,c=h.y,l="3857"}var f="visible";Object(o.a)(this._layers)&&(f+=":"+this._layers);var p={f:"json",tolerance:2,geometryType:"esriGeometryPoint",geometry:s+","+c,mapExtent:u.west+","+u.south+","+u.east+","+u.north,imageDisplay:this._tileWidth+","+this._tileHeight+",96",sr:l,layers:f};return this._resource.getDerivedResource({url:"identify",queryParameters:p}).fetchJson().then((function(e){var t=[],n=e.results;if(!Object(o.a)(n))return t;for(var i=0;i<n.length;++i){var r=n[i],a=new Pee;if(a.data=r,a.name=r.value,a.properties=r.attributes,a.configureDescriptionFromProperties(r.attributes),"esriGeometryPoint"===r.geometryType&&r.geometry){var s=r.geometry.spatialReference&&r.geometry.spatialReference.wkid?r.geometry.spatialReference.wkid:4326;if(4326===s||4283===s)a.position=R.fromDegrees(r.geometry.x,r.geometry.y,r.geometry.z);else if(102100===s||900913===s||3857===s){var c=new Vs;a.position=c.unproject(new O(r.geometry.x,r.geometry.y,r.geometry.z))}}t.push(a)}return t}))}};var Nee=jee;function zee(){this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._ready=!1,this._name="czm_autoexposure",this._logDepthChanged=void 0,this._useLogDepth=void 0,this._framebuffers=void 0,this._previousLuminance=void 0,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new Mt,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}function kee(e){var t=e._framebuffers;if(Object(o.a)(t)){for(var n=t.length,i=0;i<n;++i)t[i].destroy();e._framebuffers=void 0,e._previousLuminance.destroy(),e._previousLuminance=void 0}}function Bee(e){var t=e._commands;if(Object(o.a)(t)){for(var n=t.length,i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}}function Hee(e,t){var n;if(0===t)n={colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions}};else{var i=e._framebuffers[t-1].getColorTexture(0);n={colorTexture:function(){return i},colorTextureDimensions:function(){return i.dimensions}}}return n.minMaxLuminance=function(){return e._minMaxLuminance},n.previousLuminance=function(){return e._previousLuminance.getColorTexture(0)},n}function Vee(e,t){var n="uniform sampler2D colorTexture; \nvarying vec2 v_textureCoordinates; \nfloat sampleTexture(vec2 offset) { \n";return n+=0===e?" vec4 color = texture2D(colorTexture, v_textureCoordinates + offset); \n return czm_luminance(color.rgb); \n":" return texture2D(colorTexture, v_textureCoordinates + offset).r; \n",n+="}\n\n",n+="uniform vec2 colorTextureDimensions; \nuniform vec2 minMaxLuminance; \nuniform sampler2D previousLuminance; \nvoid main() { \n float color = 0.0; \n float xStep = 1.0 / colorTextureDimensions.x; \n float yStep = 1.0 / colorTextureDimensions.y; \n int count = 0; \n for (int i = 0; i < 3; ++i) { \n for (int j = 0; j < 3; ++j) { \n vec2 offset; \n offset.x = -xStep + float(i) * xStep; \n offset.y = -yStep + float(j) * yStep; \n if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) { \n continue; \n } \n color += sampleTexture(offset); \n ++count; \n } \n } \n if (count > 0) { \n color /= float(count); \n } \n",e===t-1&&(n+=" float previous = texture2D(previousLuminance, vec2(0.5)).r; \n color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \n color = previous + (color - previous) / (60.0 * 1.5); \n color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \n"),n+=" gl_FragColor = vec4(color); \n} \n"}Object.defineProperties(zee.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){var e=this._framebuffers;if(Object(o.a)(e))return e[e.length-1].getColorTexture(0)}}}),zee.prototype.clear=function(e){var t=this._framebuffers;if(Object(o.a)(t)){var n=this._clearCommand;Object(o.a)(n)||(n=this._clearCommand=new yN({color:new Hf(0,0,0,0),framebuffer:void 0}));for(var i=t.length,r=0;r<i;++r)n.framebuffer=t[r],n.execute(e)}},zee.prototype.update=function(e){var t=e.drawingBufferWidth,n=e.drawingBufferHeight;t===this._width&&n===this._height||(this._width=t,this._height=n,function(e,t){kee(e);for(var n=e._width,i=e._height,r=FC.RGBA,o=t.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT,a=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(a),c=0;c<a;++c)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[c]=new DG({context:t,colorTextures:[new nI({context:t,width:n,height:i,pixelFormat:r,pixelDatatype:o,sampler:ZP.NEAREST})]});var l=s[a-1].getColorTexture(0);e._previousLuminance=new DG({context:t,colorTextures:[new nI({context:t,width:l.width,height:l.height,pixelFormat:r,pixelDatatype:o,sampler:ZP.NEAREST})]}),e._framebuffers=s}(this,e),function(e,t){Bee(e);for(var n=e._framebuffers,i=n.length,r=new Array(i),o=0;o<i;++o)r[o]=t.createViewportQuadCommand(Vee(o,i),{framebuffer:n[o],uniformMap:Hee(e,o)});e._commands=r}(this,e),this._ready||(this._ready=!0)),this._minMaxLuminance.x=this.minimumLuminance,this._minMaxLuminance.y=this.maximumLuminance;var i=this._framebuffers,r=i[i.length-1];i[i.length-1]=this._previousLuminance,this._commands[this._commands.length-1].framebuffer=this._previousLuminance,this._previousLuminance=r},zee.prototype.execute=function(e,t){this._colorTexture=t;var n=this._commands;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;++r)n[r].execute(e)},zee.prototype.isDestroyed=function(){return!1},zee.prototype.destroy=function(){return kee(this),Bee(this),Ks(this)};var Uee,Wee=zee,Gee=Object.freeze({AERIAL:"Aerial",AERIAL_WITH_LABELS:"AerialWithLabels",AERIAL_WITH_LABELS_ON_DEMAND:"AerialWithLabelsOnDemand",ROAD:"Road",ROAD_ON_DEMAND:"RoadOnDemand",CANVAS_DARK:"CanvasDark",CANVAS_LIGHT:"CanvasLight",CANVAS_GRAY:"CanvasGray",ORDNANCE_SURVEY:"OrdnanceSurvey",COLLINS_BART:"CollinsBart"});function qee(e){}qee.prototype.isReady=function(){return!0},qee.prototype.shouldDiscardImage=function(e){return qee.EMPTY_IMAGE===e},Object.defineProperties(qee,{EMPTY_IMAGE:{get:function(){return Object(o.a)(Uee)||((Uee=new Image).src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),Uee}}});var Yee=qee;function $ee(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=1,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this._key=fl.getKey(e.key),this._resource=_t.a.createIfNeeded(e.url),this._resource.appendForwardSlash(),this._tileProtocol=e.tileProtocol,this._mapStyle=Object(r.a)(e.mapStyle,Gee.AERIAL),this._culture=Object(r.a)(e.culture,""),this._tileDiscardPolicy=e.tileDiscardPolicy,Object(o.a)(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new Yee),this._proxy=e.proxy,this._credit=new yn('<a href="http://www.bing.com"><img src="'+$ee.logoUrl+'" title="Bing Imagery"/></a>'),this._tilingScheme=new Kc({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._errorEvent=new wn.a,this._ready=!1,this._readyPromise=Yt.a.defer();var t=this._tileProtocol;Object(o.a)(t)?t.length>0&&":"===t[t.length-1]&&(t=t.substr(0,t.length-1)):t="http:"===document.location.protocol?"http":"https";var n,i=this._resource.getDerivedResource({url:"REST/v1/Imagery/Metadata/"+this._mapStyle,queryParameters:{incl:"ImageryProviders",key:this._key,uriScheme:t}}),s=this;function c(e){if(1===e.resourceSets.length){var t=e.resourceSets[0].resources[0];s._tileWidth=t.imageWidth,s._tileHeight=t.imageHeight,s._maximumLevel=t.zoomMax-1,s._imageUrlSubdomains=t.imageUrlSubdomains,s._imageUrlTemplate=t.imageUrl;var i=s._attributionList=t.imageryProviders;i||(i=s._attributionList=[]);for(var r=0,o=i.length;r<o;++r){var a=i[r];if(a.credit instanceof yn)break;a.credit=new yn(a.attribution);for(var c=a.coverageAreas,u=0,h=a.coverageAreas.length;u<h;++u){var f=c[u],p=f.bbox;f.bbox=new Se(d.toRadians(p[1]),d.toRadians(p[0]),d.toRadians(p[3]),d.toRadians(p[2]))}}s._ready=!0,s._readyPromise.resolve(!0),$c.handleSuccess(n)}else l()}function l(e){var t="An error occurred while accessing "+i.url+".";n=$c.handleError(n,s,s._errorEvent,t,void 0,void 0,void 0,h),s._readyPromise.reject(new de.a(t))}var u=i.url;function h(){var e=i.fetchJsonp("jsonp");$ee._metadataCache[u]=e,e.then(c).otherwise(l)}var f=$ee._metadataCache[u];Object(o.a)(f)?f.then(c).otherwise(l):h()}Object.defineProperties($ee.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},key:{get:function(){return this._key}},mapStyle:{get:function(){return this._mapStyle}},culture:{get:function(){return this._culture}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._maximumLevel}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return 0}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},rectangle:{get:function(){if(!this._ready)throw new a.a("rectangle must not be called before the imagery provider is ready.");return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}});var Xee=new Se;$ee.prototype.getTileCredits=function(e,t,n){if(!this._ready)throw new a.a("getTileCredits must not be called before the imagery provider is ready.");var i=this._tilingScheme.tileXYToRectangle(e,t,n,Xee);return function(e,t,n){++t;for(var i=[],r=0,a=e.length;r<a;++r){for(var s=e[r],c=s.coverageAreas,l=!1,u=0,h=s.coverageAreas.length;!l&&u<h;++u){var d=c[u];if(t>=d.zoomMin&&t<=d.zoomMax){var f=Se.intersection(n,d.bbox,Kee);Object(o.a)(f)&&(l=!0)}}l&&i.push(s.credit)}return i}(this._attributionList,n,i)},$ee.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");var r=Lee.loadImage(this,function(e,t,n,i,r){var o=e._imageUrlTemplate,a=e._imageUrlSubdomains,s=(t+n+i)%a.length;return e._resource.getDerivedResource({url:o,request:r,templateValues:{quadkey:$ee.tileXYToQuadKey(t,n,i),subdomain:a[s],culture:e._culture},queryParameters:{n:"z"}})}(this,e,t,n,i));if(Object(o.a)(r))return r.otherwise((function(e){return Object(o.a)(e.blob)&&0===e.blob.size?Yee.EMPTY_IMAGE:Yt.a.reject(e)}))},$ee.prototype.pickFeatures=function(e,t,n,i,r){},$ee.tileXYToQuadKey=function(e,t,n){for(var i="",r=n;r>=0;--r){var o=1<<r,a=0;0!==(e&o)&&(a|=1),0!==(t&o)&&(a|=2),i+=a}return i},$ee.quadKeyToTileXY=function(e){for(var t=0,n=0,i=e.length-1,r=i;r>=0;--r){var o=1<<r,a=+e[i-r];0!==(1&a)&&(t|=o),0!==(2&a)&&(n|=o)}return{x:t,y:n,level:i}},$ee._logoUrl=void 0,Object.defineProperties($ee,{logoUrl:{get:function(){return Object(o.a)($ee._logoUrl)||($ee._logoUrl=At("Assets/Images/bing_maps_credit.png")),$ee._logoUrl},set:function(e){i.a.defined("value",e),$ee._logoUrl=e}}});var Kee=new Se;$ee._metadataCache={};var Qee=$ee,Zee=new O(1,1,1);function Jee(e){e=Object(r.a)(e,Zee),i.a.defined("dimensions",e),i.a.typeOf.number.greaterThanOrEquals("dimensions.x",e.x,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.y",e.y,0),i.a.typeOf.number.greaterThanOrEquals("dimensions.z",e.z,0),this._dimensions=O.clone(e)}Object.defineProperties(Jee.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){i.a.defined("value",e),i.a.typeOf.number.greaterThanOrEquals("value.x",e.x,0),i.a.typeOf.number.greaterThanOrEquals("value.y",e.y,0),i.a.typeOf.number.greaterThanOrEquals("value.z",e.z,0),O.clone(e,this._dimensions)}}});var ete=new O;Jee.prototype.emit=function(e){var t=this._dimensions,n=O.multiplyByScalar(t,.5,ete),i=d.randomBetween(-n.x,n.x),r=d.randomBetween(-n.y,n.y),o=d.randomBetween(-n.z,n.z);e.position=O.fromElements(i,r,o,e.position),e.velocity=O.normalize(e.position,e.velocity)};function tte(){this._framebuffer=void 0,this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(tte.prototype,{colorTexture:{get:function(){return this._colorTexture}}}),tte.prototype.update=function(e){if(!Object(o.a)(this._colorTexture)){var t=e.context;!function(e,t){var n=new nI({context:t,width:256,height:256,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST});e._colorTexture=n;var i=new DG({context:t,colorTextures:[n],destroyAttachments:!1});e._framebuffer=i}(this,t),function(e,t){var n=e._framebuffer,i=t.createViewportQuadCommand("varying vec2 v_textureCoordinates;\nconst float M_PI = 3.141592653589793;\n\nfloat vdcRadicalInverse(int i)\n{\n float r;\n float base = 2.0;\n float value = 0.0;\n float invBase = 1.0 / base;\n float invBi = invBase;\n for (int x = 0; x < 100; x++)\n {\n if (i <= 0)\n {\n break;\n }\n r = mod(float(i), base);\n value += r * invBi;\n invBi *= invBase;\n i = int(float(i) * invBase);\n }\n return value;\n}\n\nvec2 hammersley2D(int i, int N)\n{\n return vec2(float(i) / float(N), vdcRadicalInverse(i));\n}\n\nvec3 importanceSampleGGX(vec2 xi, float roughness, vec3 N)\n{\n float a = roughness * roughness;\n float phi = 2.0 * M_PI * xi.x;\n float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));\n float sinTheta = sqrt(1.0 - cosTheta * cosTheta);\n vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);\n vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n vec3 tangentX = normalize(cross(upVector, N));\n vec3 tangentY = cross(N, tangentX);\n return tangentX * H.x + tangentY * H.y + N * H.z;\n}\n\nfloat G1_Smith(float NdotV, float k)\n{\n return NdotV / (NdotV * (1.0 - k) + k);\n}\n\nfloat G_Smith(float roughness, float NdotV, float NdotL)\n{\n float k = roughness * roughness / 2.0;\n return G1_Smith(NdotV, k) * G1_Smith(NdotL, k);\n}\n\nvec2 integrateBrdf(float roughness, float NdotV)\n{\n vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);\n float A = 0.0;\n float B = 0.0;\n const int NumSamples = 1024;\n for (int i = 0; i < NumSamples; i++)\n {\n vec2 xi = hammersley2D(i, NumSamples);\n vec3 H = importanceSampleGGX(xi, roughness, vec3(0.0, 0.0, 1.0));\n vec3 L = 2.0 * dot(V, H) * H - V;\n float NdotL = clamp(L.z, 0.0, 1.0);\n float NdotH = clamp(H.z, 0.0, 1.0);\n float VdotH = clamp(dot(V, H), 0.0, 1.0);\n if (NdotL > 0.0)\n {\n float G = G_Smith(roughness, NdotV, NdotL);\n float G_Vis = G * VdotH / (NdotH * NdotV);\n float Fc = pow(1.0 - VdotH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n return vec2(A, B) / float(NumSamples);\n}\n\nvoid main()\n{\n gl_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);\n}\n",{framebuffer:n,renderState:XI.fromCache({viewport:new bl(0,0,256,256)})});e._drawCommand=i}(this,t),this._drawCommand.execute(t),this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}},tte.prototype.isDestroyed=function(){return!1},tte.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),Ks(this)};var nte=tte,ite={};var rte=new O,ote=new O;function ate(e,t,n,i,r){var a=r,s=Math.max(n,i);if(!Object(o.a)(a)){var c=e.position,l=t,u=e.up,h=e.right,f=e.frustum,p=O.subtract(c,l,rte),m=O.magnitude(O.multiplyByScalar(u,O.dot(p,u),ote)),g=O.magnitude(O.multiplyByScalar(h,O.dot(p,h),ote));a=Math.min(.2*function(e,t,n){var i,r,o;if(e instanceof Zb){var a=Math.tan(.5*e.fovy);return i=e.near,r=e.near*a,o=e.aspectRatio*r,Math.max(t*i/o,n*i/r)}return e instanceof Xb?(i=e.near,r=e.top,o=e.right,Math.max(t*i/o,n*i/r)):Math.max(t,n)}(f,m,g),1e9)}if(s<a){var v=-Math.pow(1e6*(a-n),1/8),_=Math.pow(1e6*(a-i),1/8);return function(e){var t=e*(_-v)+v;return-Math.pow(t,8)/1e6+a}}return function(e){return d.lerp(n,i,e)}}function ste(e,t){return d.equalsEpsilon(e,d.TWO_PI,d.EPSILON11)&&(e=0),t>e+Math.PI?e+=d.TWO_PI:t<e-Math.PI&&(e-=d.TWO_PI),e}var cte=new O;function lte(e,t,n,i,r,o,a){var s=e.camera,c=O.clone(s.position,cte),l=s.pitch,u=ste(s.heading,i),h=ste(s.roll,o),f=ate(s,n,c.z,n.z,a);return function(e){var a=e.time/t;s.setView({orientation:{heading:d.lerp(u,i,a),pitch:d.lerp(l,r,a),roll:d.lerp(h,o,a)}}),Mt.lerp(c,n,a,s.position),s.position.z=f(a)}}var ute=new R,hte=new R;function dte(e,t,n,i,r,a,s,c,l,u){var h=e.camera,f=e.mapProjection.ellipsoid,p=R.clone(h.positionCartographic,ute),m=h.pitch,g=ste(h.heading,i),v=ste(h.roll,a),_=f.cartesianToCartographic(n,hte);p.longitude=d.zeroToTwoPi(p.longitude),_.longitude=d.zeroToTwoPi(_.longitude);var b=!1;if(Object(o.a)(c)){var y=d.zeroToTwoPi(c),w=Math.min(p.longitude,_.longitude),C=Math.max(p.longitude,_.longitude),E=y>=w&&y<=C;if(Object(o.a)(l)){var A=Math.abs(p.longitude-_.longitude),x=d.TWO_PI-A;(E?A:x)<(E?x:A)*l&&!E&&(b=!0)}else E||(b=!0)}b?function(e,t){e.longitude<t.longitude?e.longitude+=d.TWO_PI:t.longitude+=d.TWO_PI}(p,_):function(e,t){var n=e.longitude-t.longitude;n<-d.PI?e.longitude+=d.TWO_PI:n>d.PI&&(t.longitude+=d.TWO_PI)}(p,_);var T=ate(h,n,p.height,_.height,s),S=function(e,t,n,i){if(Object(o.a)(i)&&n(.5)>i){var r=n(0),a=n(1),s=n(.5),c=s-r,l=s-a;return function(i){var o=n(i);if(i<=.5){var s=(o-r)/c;return d.lerp(e,-d.PI_OVER_TWO,s)}var u=(o-a)/l;return d.lerp(-d.PI_OVER_TWO,t,1-u)}}return function(n){return d.lerp(e,t,n)}}(m,r,T,u);return function(){var e=p.longitude,n=_.longitude,r=p.latitude,o=_.latitude;return function(s){var c=s.time/t,l=O.fromRadians(d.lerp(e,n,c),d.lerp(r,o,c),T(c));h.setView({destination:l,orientation:{heading:d.lerp(g,i,c),pitch:S(c),roll:d.lerp(v,a,c)}})}}()}function fte(e,t,n,i,r,o,a){var s=e.camera,c=O.clone(s.position,cte),l=ste(s.heading,i),u=s.frustum.right-s.frustum.left,h=ate(s,n,u,n.z,a);return function(e){var r=e.time/t;s.setView({orientation:{heading:d.lerp(l,i,r)}}),Mt.lerp(c,n,r,s.position);var o=h(r),a=s.frustum,u=a.top/a.right,f=.5*(o-(a.right-a.left));a.right+=f,a.left-=f,a.top=u*a.right,a.bottom=-a.top}}var pte=new R,mte=new O;function gte(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function vte(e,t){return function(){"function"===typeof t&&t(),e.enableInputs=!0}}ite.createTween=function(e,t){var n=(t=Object(r.a)(t,r.a.EMPTY_OBJECT)).destination;if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(n))throw new a.a("destination is required.");var i=e.mode;if(i===IR.MORPHING)return gte();var s=Object(r.a)(t.convert,!0),c=e.mapProjection,l=c.ellipsoid,u=t.maximumHeight,h=t.flyOverLongitude,f=t.flyOverLongitudeWeight,p=t.pitchAdjustHeight,m=t.easingFunction;s&&i!==IR.SCENE3D&&(l.cartesianToCartographic(n,pte),n=c.project(pte,mte));var g=e.camera,v=t.endTransform;Object(o.a)(v)&&g._setTransform(v);var _=t.duration;Object(o.a)(_)||(_=Math.ceil(O.distance(g.position,n)/1e6)+2,_=Math.min(_,3));var b=Object(r.a)(t.heading,0),y=Object(r.a)(t.pitch,-d.PI_OVER_TWO),w=Object(r.a)(t.roll,0),C=e.screenSpaceCameraController;C.enableInputs=!1;var E=vte(C,t.complete),A=vte(C,t.cancel),x=g.frustum,T=e.mode===IR.SCENE2D;if(T=(T=(T=(T=T&&Mt.equalsEpsilon(g.position,n,d.EPSILON6))&&d.equalsEpsilon(Math.max(x.right-x.left,x.top-x.bottom),n.z,d.EPSILON6))||e.mode!==IR.SCENE2D&&O.equalsEpsilon(n,g.position,d.EPSILON10))&&d.equalsEpsilon(d.negativePiToPi(b),d.negativePiToPi(g.heading),d.EPSILON10)&&d.equalsEpsilon(d.negativePiToPi(y),d.negativePiToPi(g.pitch),d.EPSILON10)&&d.equalsEpsilon(d.negativePiToPi(w),d.negativePiToPi(g.roll),d.EPSILON10))return gte(E,A);var S=new Array(4);if(S[IR.SCENE2D]=fte,S[IR.SCENE3D]=dte,S[IR.COLUMBUS_VIEW]=lte,_<=0){return gte((function(){S[i](e,1,n,b,y,w,u,h,f,p)({time:1}),"function"===typeof E&&E()}),A)}var D=S[i](e,_,n,b,y,w,u,h,f,p);if(!Object(o.a)(m)){var P=g.positionCartographic.height;m=P>(i===IR.SCENE3D?l.cartesianToCartographic(n).height:n.z)&&P>11500?rb.CUBIC_OUT:rb.QUINTIC_IN_OUT}return{duration:_,easingFunction:m,startObject:{time:0},stopObject:{time:_},update:D,complete:E,cancel:A}};var _te=ite,bte=Object.freeze({ROTATE:0,INFINITE_SCROLL:1});function yte(e){if(!Object(o.a)(e))throw new a.a("scene is required.");this._scene=e,this._transform=Ae.clone(Ae.IDENTITY),this._invTransform=Ae.clone(Ae.IDENTITY),this._actualTransform=Ae.clone(Ae.IDENTITY),this._actualInvTransform=Ae.clone(Ae.IDENTITY),this._transformChanged=!1,this.position=new O,this._position=new O,this._positionWC=new O,this._positionCartographic=new R,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new O,this._direction=new O,this._directionWC=new O,this.up=new O,this._up=new O,this._upWC=new O,this.right=new O,this._right=new O,this._rightWC=new O,this.frustum=new Zb,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=d.toRadians(60),this.defaultMoveAmount=1e5,this.defaultLookAmount=Math.PI/60,this.defaultRotateAmount=Math.PI/3600,this.defaultZoomAmount=1e5,this.constrainedAxis=void 0,this.maximumZoomFactor=1.5,this._moveStart=new wn.a,this._moveEnd=new wn.a,this._changed=new wn.a,this._changedPosition=void 0,this._changedDirection=void 0,this._changedFrustum=void 0,this.percentageChanged=.5,this._viewMatrix=new Ae,this._invViewMatrix=new Ae,wte(this),this._mode=IR.SCENE3D,this._modeChanged=!0;var t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new R(Math.PI,d.PI_OVER_TWO)),this._max2Dfrustum=void 0,Nne(this,yte.DEFAULT_VIEW_RECTANGLE,this.position,!0);var n=O.magnitude(this.position);n+=n*yte.DEFAULT_VIEW_FACTOR,O.normalize(this.position,this.position),O.multiplyByScalar(this.position,n,this.position)}function wte(e){Ae.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),Ae.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),Ae.inverseTransformation(e._viewMatrix,e._invViewMatrix)}yte.TRANSFORM_2D=new Ae(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),yte.TRANSFORM_2D_INVERSE=Ae.inverseTransformation(yte.TRANSFORM_2D,new Ae),yte.DEFAULT_VIEW_RECTANGLE=Se.fromDegrees(-95,-20,-70,90),yte.DEFAULT_VIEW_FACTOR=.5,yte.DEFAULT_OFFSET=new qO(0,-d.PI_OVER_FOUR,0),yte.prototype.canPreloadFlight=function(){return Object(o.a)(this._currentFlight)&&this._mode!==IR.SCENE2D},yte.prototype._updateCameraChanged=function(){if(function(e){if(Object(o.a)(e._oldPositionWC)){e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;var t=O.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=O.magnitude(t),e._oldPositionWC=O.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=Sf()):e.timeSinceMoved=Math.max(Sf()-e._lastMovedTimestamp,0)/1e3}else e._oldPositionWC=O.clone(e.positionWC,e._oldPositionWC)}(this),0!==this._changed.numberOfListeners){var e=this.percentageChanged;if(this._mode!==IR.SCENE2D){if(!Object(o.a)(this._changedDirection))return this._changedPosition=O.clone(this.positionWC,this._changedPosition),void(this._changedDirection=O.clone(this.directionWC,this._changedDirection));var t,n=d.acosClamped(O.dot(this.directionWC,this._changedDirection));t=Object(o.a)(this.frustum.fovy)?n/(.5*this.frustum.fovy):n;var i=O.distance(this.positionWC,this._changedPosition)/this.positionCartographic.height;(t>e||i>e)&&(this._changed.raiseEvent(Math.max(t,i)),this._changedPosition=O.clone(this.positionWC,this._changedPosition),this._changedDirection=O.clone(this.directionWC,this._changedDirection))}else{if(!Object(o.a)(this._changedFrustum))return this._changedPosition=O.clone(this.position,this._changedPosition),void(this._changedFrustum=this.frustum.clone());var r,a=this.position,s=this._changedPosition,c=this.frustum,l=this._changedFrustum,u=a.x+c.left,h=a.x+c.right,f=s.x+l.left,p=s.x+l.right,m=a.y+c.bottom,g=a.y+c.top,v=s.y+l.bottom,_=s.y+l.top,b=Math.max(u,f),y=Math.min(h,p),w=Math.max(m,v),C=Math.min(g,_);if(b>=y||w>=g)r=1;else{var E=l;u<f&&h>p&&m<v&&g>_&&(E=c),r=1-(y-b)*(C-w)/((E.right-E.left)*(E.top-E.bottom))}r>e&&(this._changed.raiseEvent(r),this._changedPosition=O.clone(this.position,this._changedPosition),this._changedFrustum=this.frustum.clone(this._changedFrustum))}}};var Ote=new R,Cte=new O,Ete=new O,Ate=new he,xte=new he,Tte=new he,Ste=new he,Dte=new he;var Pte=new O;function Ite(e){var t=e._mode,n=!1,i=0;t===IR.SCENE2D&&(n=(i=e.frustum.right-e.frustum.left)!==e._positionCartographic.height);var r=e._position,o=!O.equals(r,e.position)||n;o&&(r=O.clone(e.position,e._position));var a=e._direction,s=!O.equals(a,e.direction);s&&(O.normalize(e.direction,e.direction),a=O.clone(e.direction,e._direction));var c=e._up,l=!O.equals(c,e.up);l&&(O.normalize(e.up,e.up),c=O.clone(e.up,e._up));var u=e._right,h=!O.equals(u,e.right);h&&(O.normalize(e.right,e.right),u=O.clone(e.right,e._right));var f=e._transformChanged||e._modeChanged;e._transformChanged=!1,f&&(Ae.inverseTransformation(e._transform,e._invTransform),e._mode===IR.COLUMBUS_VIEW||e._mode===IR.SCENE2D?Ae.equals(Ae.IDENTITY,e._transform)?Ae.clone(yte.TRANSFORM_2D,e._actualTransform):e._mode===IR.COLUMBUS_VIEW?function(e){ya.basisTo2D(e._projection,e._transform,e._actualTransform)}(e):function(e){var t=e._projection,n=t.ellipsoid,i=Ae.getColumn(e._transform,3,Ate),r=n.cartesianToCartographic(i,Ote),o=t.project(r,Cte),a=xte;a.x=o.z,a.y=o.x,a.z=o.y,a.w=1;var s=he.clone(he.UNIT_X,Dte),c=he.add(Ae.getColumn(e._transform,0,Ete),i,Ete);n.cartesianToCartographic(c,r),t.project(r,o);var l=Tte;l.x=o.z,l.y=o.x,l.z=o.y,l.w=0,O.subtract(l,a,l),l.x=0;var u=Ste;if(O.magnitudeSquared(l)>d.EPSILON10)O.cross(s,l,u);else{var h=he.add(Ae.getColumn(e._transform,1,Ete),i,Ete);n.cartesianToCartographic(h,r),t.project(r,o),u.x=o.z,u.y=o.x,u.z=o.y,u.w=0,O.subtract(u,a,u),u.x=0,O.magnitudeSquared(u)<d.EPSILON10&&(he.clone(he.UNIT_Y,l),he.clone(he.UNIT_Z,u))}O.cross(u,s,l),O.normalize(l,l),O.cross(s,l,u),O.normalize(u,u),Ae.setColumn(e._actualTransform,0,l,e._actualTransform),Ae.setColumn(e._actualTransform,1,u,e._actualTransform),Ae.setColumn(e._actualTransform,2,s,e._actualTransform),Ae.setColumn(e._actualTransform,3,a,e._actualTransform)}(e):Ae.clone(e._transform,e._actualTransform),Ae.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);var p=e._actualTransform;if(o||f)if(e._positionWC=Ae.multiplyByPoint(p,r,e._positionWC),t===IR.SCENE3D||t===IR.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{var m=Pte;m.x=e._positionWC.y,m.y=e._positionWC.z,m.z=e._positionWC.x,t===IR.SCENE2D&&(m.z=i),e._projection.unproject(m,e._positionCartographic)}if(s||l||h){var g=O.dot(a,O.cross(c,u,Pte));if(Math.abs(1-g)>d.EPSILON2){var v=1/O.magnitudeSquared(c),_=O.dot(c,a)*v,b=O.multiplyByScalar(a,_,Pte);c=O.normalize(O.subtract(c,b,e._up),e._up),O.clone(c,e.up),u=O.cross(a,c,e._right),O.clone(u,e.right)}}(s||f)&&(e._directionWC=Ae.multiplyByPointAsVector(p,a,e._directionWC),O.normalize(e._directionWC,e._directionWC)),(l||f)&&(e._upWC=Ae.multiplyByPointAsVector(p,c,e._upWC),O.normalize(e._upWC,e._upWC)),(h||f)&&(e._rightWC=Ae.multiplyByPointAsVector(p,u,e._rightWC),O.normalize(e._rightWC,e._rightWC)),(o||s||l||h||f)&&wte(e)}function Mte(e,t){var n;return n=d.equalsEpsilon(Math.abs(e.z),1,d.EPSILON3)?Math.atan2(t.y,t.x)-d.PI_OVER_TWO:Math.atan2(e.y,e.x)-d.PI_OVER_TWO,d.TWO_PI-d.zeroToTwoPi(n)}function Rte(e){return d.PI_OVER_TWO-d.acosClamped(e.z)}function Lte(e,t,n){var i=0;return d.equalsEpsilon(Math.abs(e.z),1,d.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=d.zeroToTwoPi(i+d.TWO_PI)),i}var jte=new Ae,Fte=new Ae;Object.defineProperties(yte.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return Ite(this),this._invTransform}},viewMatrix:{get:function(){return Ite(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return Ite(this),this._invViewMatrix}},positionCartographic:{get:function(){return Ite(this),this._positionCartographic}},positionWC:{get:function(){return Ite(this),this._positionWC}},directionWC:{get:function(){return Ite(this),this._directionWC}},upWC:{get:function(){return Ite(this),this._upWC}},rightWC:{get:function(){return Ite(this),this._rightWC}},heading:{get:function(){if(this._mode!==IR.MORPHING){var e=this._projection.ellipsoid,t=Ae.clone(this._transform,jte),n=ya.eastNorthUpToFixedFrame(this.positionWC,e,Fte);this._setTransform(n);var i=Mte(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==IR.MORPHING){var e=this._projection.ellipsoid,t=Ae.clone(this._transform,jte),n=ya.eastNorthUpToFixedFrame(this.positionWC,e,Fte);this._setTransform(n);var i=Rte(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==IR.MORPHING){var e=this._projection.ellipsoid,t=Ae.clone(this._transform,jte),n=ya.eastNorthUpToFixedFrame(this.positionWC,e,Fte);this._setTransform(n);var i=Lte(this.direction,this.up,this.right);return this._setTransform(t),i}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}}),yte.prototype.update=function(e){if(!Object(o.a)(e))throw new a.a("mode is required.");if(e===IR.SCENE2D&&!(this.frustum instanceof kb))throw new a.a("An OrthographicOffCenterFrustum is required in 2D.");if((e===IR.SCENE3D||e===IR.COLUMBUS_VIEW)&&!(this.frustum instanceof Zb)&&!(this.frustum instanceof Vb))throw new a.a("A PerspectiveFrustum or OrthographicFrustum is required in 3D and Columbus view");var t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==IR.MORPHING,t=this._mode===IR.SCENE2D),t){var n=this._max2Dfrustum=this.frustum.clone();if(!(n instanceof kb))throw new a.a("The camera frustum is expected to be orthographic for 2D camera control.");var i=n.top/n.right;n.right=2*this._maxCoord.x,n.left=-n.right,n.top=i*n.right,n.bottom=-n.top}this._mode===IR.SCENE2D&&rne(this,this.position)};var Nte=new O,zte=new O,kte=new O;yte.prototype._setTransform=function(e){var t=O.clone(this.positionWC,Nte),n=O.clone(this.upWC,zte),i=O.clone(this.directionWC,kte);Ae.clone(e,this._transform),this._transformChanged=!0,Ite(this);var r=this._actualInvTransform;Ae.multiplyByPoint(r,t,this.position),Ae.multiplyByPointAsVector(r,i,this.direction),Ae.multiplyByPointAsVector(r,n,this.up),O.cross(this.direction,this.up,this.right),Ite(this)};var Bte=new Mt,Hte=new ti,Vte=new O,Ute=new O;function Wte(e){if(!Ae.equals(Ae.IDENTITY,e.transform))return O.magnitude(e.position);var t,n,i,r=e._scene,a=r.globe,s=Bte;if(s.x=r.drawingBufferWidth/2,s.y=r.drawingBufferHeight/2,Object(o.a)(a)){var c=e.getPickRay(s,Hte);t=a.pickWorldCoordinates(c,r,!0,Vte)}if(r.pickPositionSupported&&(n=r.pickPositionWorldCoordinates(s,Ute)),Object(o.a)(t)||Object(o.a)(n)){var l=Object(o.a)(n)?O.distance(n,e.positionWC):Number.POSITIVE_INFINITY,u=Object(o.a)(t)?O.distance(t,e.positionWC):Number.POSITIVE_INFINITY;i=Math.min(l,u)}else i=Math.max(e.positionCartographic.height,0);return i}yte.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof Vb&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=Wte(this)))};var Gte=new O,qte=new Ae,Yte=new Ae,$te=new No,Xte=new oe,Kte=new R;var Qte=new O,Zte=new O,Jte=new O;function ene(e,t,n,i){var r=O.clone(n.direction,Qte),o=O.clone(n.up,Zte);if(e._scene.mode===IR.SCENE3D){var a=e._projection.ellipsoid,s=ya.eastNorthUpToFixedFrame(t,a,jte),c=Ae.inverseTransformation(s,Fte);Ae.multiplyByPointAsVector(c,r,r),Ae.multiplyByPointAsVector(c,o,o)}var l=O.cross(r,o,Jte);return i.heading=Mte(r,o),i.pitch=Rte(r),i.roll=Lte(r,o,l),i}var tne={destination:void 0,orientation:{direction:void 0,up:void 0,heading:void 0,pitch:void 0,roll:void 0},convert:void 0,endTransform:void 0},nne=new yr;yte.prototype.setView=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.orientation,r.a.EMPTY_OBJECT),n=this._mode;if(n!==IR.MORPHING){Object(o.a)(e.endTransform)&&this._setTransform(e.endTransform);var i=Object(r.a)(e.convert,!0),a=Object(r.a)(e.destination,O.clone(this.positionWC,Gte));Object(o.a)(a)&&Object(o.a)(a.west)&&(a=this.getRectangleCameraCoordinates(a,Gte),i=!1),Object(o.a)(t.direction)&&(t=ene(this,a,t,tne.orientation)),nne.heading=Object(r.a)(t.heading,0),nne.pitch=Object(r.a)(t.pitch,-d.PI_OVER_TWO),nne.roll=Object(r.a)(t.roll,0),n===IR.SCENE3D?function(e,t,n){var i=Ae.clone(e.transform,qte),r=ya.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,Yte);e._setTransform(r),O.clone(O.ZERO,e.position),n.heading=n.heading-d.PI_OVER_TWO;var o=No.fromHeadingPitchRoll(n,$te),a=oe.fromQuaternion(o,Xte);oe.getColumn(a,0,e.direction),oe.getColumn(a,2,e.up),O.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}(this,a,nne):n===IR.SCENE2D?function(e,t,n,i){var r=Ae.clone(e.transform,qte);if(e._setTransform(Ae.IDENTITY),!O.equals(t,e.positionWC)){if(i){var o=e._projection,a=o.ellipsoid.cartesianToCartographic(t,Kte);t=o.project(a,Gte)}Mt.clone(t,e.position);var s=.5*-t.z,c=-s,l=e.frustum;if(c>s){var u=l.top/l.right;l.right=c,l.left=s,l.top=l.right*u,l.bottom=-l.top}}if(e._scene.mapMode2D===bte.ROTATE){n.heading=n.heading-d.PI_OVER_TWO,n.pitch=-d.PI_OVER_TWO,n.roll=0;var h=No.fromHeadingPitchRoll(n,$te),f=oe.fromQuaternion(h,Xte);oe.getColumn(f,2,e.up),O.cross(e.direction,e.up,e.right)}e._setTransform(r)}(this,a,nne,i):function(e,t,n,i){var r=Ae.clone(e.transform,qte);if(e._setTransform(Ae.IDENTITY),!O.equals(t,e.positionWC)){if(i){var o=e._projection,a=o.ellipsoid.cartesianToCartographic(t,Kte);t=o.project(a,Gte)}O.clone(t,e.position)}n.heading=n.heading-d.PI_OVER_TWO;var s=No.fromHeadingPitchRoll(n,$te),c=oe.fromQuaternion(s,Xte);oe.getColumn(c,0,e.direction),oe.getColumn(c,2,e.up),O.cross(e.direction,e.up,e.right),e._setTransform(r),e._adjustOrthographicFrustum(!0)}(this,a,nne,i)}};var ine=new O;function rne(e,t){var n,i,r=e._scene.mapMode2D===bte.ROTATE,o=e._maxCoord.x,a=e._maxCoord.y;r?n=-(i=o):(i=t.x-2*o,n=t.x+2*o),t.x>o&&(t.x=i),t.x<-o&&(t.x=n),t.y>a&&(t.y=a),t.y<-a&&(t.y=-a)}yte.prototype.flyHome=function(e){var t=this._mode;if(t===IR.MORPHING&&this._scene.completeMorph(),t===IR.SCENE2D)this.flyTo({destination:yte.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:Ae.IDENTITY});else if(t===IR.SCENE3D){var n=this.getRectangleCameraCoordinates(yte.DEFAULT_VIEW_RECTANGLE),i=O.magnitude(n);i+=i*yte.DEFAULT_VIEW_FACTOR,O.normalize(n,n),O.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:Ae.IDENTITY})}else if(t===IR.COLUMBUS_VIEW){var r=this._projection.ellipsoid.maximumRadius,o=new O(0,-1,1);o=O.multiplyByScalar(O.normalize(o,o),5*r,o),this.flyTo({destination:o,duration:e,orientation:{heading:0,pitch:-Math.acos(O.normalize(o,ine).z),roll:0},endTransform:Ae.IDENTITY,convert:!1})}},yte.prototype.worldToCameraCoordinates=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new he),Ite(this),Ae.multiplyByVector(this._actualInvTransform,e,t)},yte.prototype.worldToCameraCoordinatesPoint=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new O),Ite(this),Ae.multiplyByPoint(this._actualInvTransform,e,t)},yte.prototype.worldToCameraCoordinatesVector=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new O),Ite(this),Ae.multiplyByPointAsVector(this._actualInvTransform,e,t)},yte.prototype.cameraToWorldCoordinates=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new he),Ite(this),Ae.multiplyByVector(this._actualTransform,e,t)},yte.prototype.cameraToWorldCoordinatesPoint=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new O),Ite(this),Ae.multiplyByPoint(this._actualTransform,e,t)},yte.prototype.cameraToWorldCoordinatesVector=function(e,t){if(!Object(o.a)(e))throw new a.a("cartesian is required.");return Object(o.a)(t)||(t=new O),Ite(this),Ae.multiplyByPointAsVector(this._actualTransform,e,t)};var one=new O;yte.prototype.move=function(e,t){if(!Object(o.a)(e))throw new a.a("direction is required.");var n=this.position;O.multiplyByScalar(e,t,one),O.add(n,one,n),this._mode===IR.SCENE2D&&rne(this,n),this._adjustOrthographicFrustum(!0)},yte.prototype.moveForward=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this._mode===IR.SCENE2D?gne(this,e):this.move(this.direction,e)},yte.prototype.moveBackward=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this._mode===IR.SCENE2D?gne(this,-e):this.move(this.direction,-e)},yte.prototype.moveUp=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this.move(this.up,e)},yte.prototype.moveDown=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this.move(this.up,-e)},yte.prototype.moveRight=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this.move(this.right,e)},yte.prototype.moveLeft=function(e){e=Object(r.a)(e,this.defaultMoveAmount),this.move(this.right,-e)},yte.prototype.lookLeft=function(e){e=Object(r.a)(e,this.defaultLookAmount),this._mode!==IR.SCENE2D&&this.look(this.up,-e)},yte.prototype.lookRight=function(e){e=Object(r.a)(e,this.defaultLookAmount),this._mode!==IR.SCENE2D&&this.look(this.up,e)},yte.prototype.lookUp=function(e){e=Object(r.a)(e,this.defaultLookAmount),this._mode!==IR.SCENE2D&&this.look(this.right,-e)},yte.prototype.lookDown=function(e){e=Object(r.a)(e,this.defaultLookAmount),this._mode!==IR.SCENE2D&&this.look(this.right,e)};var ane=new No,sne=new oe;yte.prototype.look=function(e,t){if(!Object(o.a)(e))throw new a.a("axis is required.");var n=Object(r.a)(t,this.defaultLookAmount),i=No.fromAxisAngle(e,-n,ane),s=oe.fromQuaternion(i,sne),c=this.direction,l=this.up,u=this.right;oe.multiplyByVector(s,c,c),oe.multiplyByVector(s,l,l),oe.multiplyByVector(s,u,u)},yte.prototype.twistLeft=function(e){e=Object(r.a)(e,this.defaultLookAmount),this.look(this.direction,e)},yte.prototype.twistRight=function(e){e=Object(r.a)(e,this.defaultLookAmount),this.look(this.direction,-e)};var cne=new No,lne=new oe;yte.prototype.rotate=function(e,t){if(!Object(o.a)(e))throw new a.a("axis is required.");var n=Object(r.a)(t,this.defaultRotateAmount),i=No.fromAxisAngle(e,-n,cne),s=oe.fromQuaternion(i,lne);oe.multiplyByVector(s,this.position,this.position),oe.multiplyByVector(s,this.direction,this.direction),oe.multiplyByVector(s,this.up,this.up),O.cross(this.direction,this.up,this.right),O.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)},yte.prototype.rotateDown=function(e){pne(this,e=Object(r.a)(e,this.defaultRotateAmount))},yte.prototype.rotateUp=function(e){pne(this,-(e=Object(r.a)(e,this.defaultRotateAmount)))};var une=new O,hne=new O,dne=new O,fne=new O;function pne(e,t){var n=e.position;if(Object(o.a)(e.constrainedAxis)&&!O.equalsEpsilon(e.position,O.ZERO,d.EPSILON2)){var i=O.normalize(n,une),r=O.equalsEpsilon(i,e.constrainedAxis,d.EPSILON2),a=O.equalsEpsilon(i,O.negate(e.constrainedAxis,fne),d.EPSILON2);if(r||a)(r&&t<0||a&&t>0)&&e.rotate(e.right,t);else{var s=O.normalize(e.constrainedAxis,hne),c=O.dot(i,s),l=d.acosClamped(c);t>0&&t>l&&(t=l-d.EPSILON4),c=O.dot(i,O.negate(s,fne)),l=d.acosClamped(c),t<0&&-t>l&&(t=-l+d.EPSILON4);var u=O.cross(s,i,dne);e.rotate(u,t)}}else e.rotate(e.right,t)}function mne(e,t){Object(o.a)(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function gne(e,t){var n,i=e.frustum;if(!(i instanceof kb)||!Object(o.a)(i.left)||!Object(o.a)(i.right)||!Object(o.a)(i.bottom)||!Object(o.a)(i.top))throw new a.a("The camera frustum is expected to be orthographic for 2D camera control.");if(t*=.5,Math.abs(i.top)+Math.abs(i.bottom)>Math.abs(i.left)+Math.abs(i.right)){var r=i.top-t,s=i.bottom+t,c=e._maxCoord.y;e._scene.mapMode2D===bte.ROTATE&&(c*=e.maximumZoomFactor),s>c&&(s=c,r=-c),r<=s&&(r=1,s=-1),n=i.right/i.top,i.top=r,i.bottom=s,i.right=i.top*n,i.left=-i.right}else{var l=i.right-t,u=i.left+t,h=e._maxCoord.x;e._scene.mapMode2D===bte.ROTATE&&(h*=e.maximumZoomFactor),l>h&&(l=h,u=-h),l<=u&&(l=1,u=-1),n=i.top/i.right,i.right=l,i.left=u,i.top=i.right*n,i.bottom=-i.top}}function vne(e,t){e.move(e.direction,t)}yte.prototype.rotateRight=function(e){mne(this,-(e=Object(r.a)(e,this.defaultRotateAmount)))},yte.prototype.rotateLeft=function(e){mne(this,e=Object(r.a)(e,this.defaultRotateAmount))},yte.prototype.zoomIn=function(e){e=Object(r.a)(e,this.defaultZoomAmount),this._mode===IR.SCENE2D?gne(this,e):vne(this,e)},yte.prototype.zoomOut=function(e){e=Object(r.a)(e,this.defaultZoomAmount),this._mode===IR.SCENE2D?gne(this,-e):vne(this,-e)},yte.prototype.getMagnitude=function(){return this._mode===IR.SCENE3D?O.magnitude(this.position):this._mode===IR.COLUMBUS_VIEW?Math.abs(this.position.z):this._mode===IR.SCENE2D?Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom):void 0};var _ne=new Ae;yte.prototype.lookAt=function(e,t){if(!Object(o.a)(e))throw new a.a("target is required");if(!Object(o.a)(t))throw new a.a("offset is required");if(this._mode===IR.MORPHING)throw new a.a("lookAt is not supported while morphing.");var n=ya.eastNorthUpToFixedFrame(e,W.WGS84,_ne);this.lookAtTransform(n,t)};var bne=new O,yne=new No,wne=new No,One=new oe;function Cne(e,t,n){t=d.clamp(t,-d.PI_OVER_TWO,d.PI_OVER_TWO),e=d.zeroToTwoPi(e)-d.PI_OVER_TWO;var i=No.fromAxisAngle(O.UNIT_Y,-t,yne),r=No.fromAxisAngle(O.UNIT_Z,-e,wne),o=No.multiply(r,i,r),a=oe.fromQuaternion(o,One),s=O.clone(O.UNIT_X,bne);return oe.multiplyByVector(a,s,s),O.negate(s,s),O.multiplyByScalar(s,n,s),s}yte.prototype.lookAtTransform=function(e,t){if(!Object(o.a)(e))throw new a.a("transform is required");if(this._mode===IR.MORPHING)throw new a.a("lookAtTransform is not supported while morphing.");if(this._setTransform(e),Object(o.a)(t)){var n;if(n=Object(o.a)(t.heading)?Cne(t.heading,t.pitch,t.range):t,this._mode===IR.SCENE2D){Mt.clone(Mt.ZERO,this.position),O.negate(n,this.up),this.up.z=0,O.magnitudeSquared(this.up)<d.EPSILON10&&O.clone(O.UNIT_Y,this.up),O.normalize(this.up,this.up),this._setTransform(Ae.IDENTITY),O.negate(O.UNIT_Z,this.direction),O.cross(this.direction,this.up,this.right),O.normalize(this.right,this.right);var i=this.frustum,r=i.top/i.right;return i.right=.5*O.magnitude(n),i.left=-i.right,i.top=r*i.right,i.bottom=-i.top,void this._setTransform(e)}O.clone(n,this.position),O.negate(this.position,this.direction),O.normalize(this.direction,this.direction),O.cross(this.direction,O.UNIT_Z,this.right),O.magnitudeSquared(this.right)<d.EPSILON10&&O.clone(O.UNIT_X,this.right),O.normalize(this.right,this.right),O.cross(this.right,this.direction,this.up),O.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)}};var Ene,Ane=new R,xne=new R,Tne=new O,Sne=new O,Dne=new O,Pne=new O,Ine=new O,Mne=new O,Rne=new O,Lne=new O,jne={direction:new O,right:new O,up:new O};function Fne(e,t,n,i){return Math.abs(O.dot(t,n))/i-O.dot(e,n)}function Nne(e,t,n,i){var r=e._projection.ellipsoid,a=i?e:jne,s=t.north,c=t.south,l=t.east,u=t.west;u>l&&(l+=d.TWO_PI);var h,f=.5*(u+l);if(c<-d.PI_OVER_TWO+d.RADIANS_PER_DEGREE&&s>d.PI_OVER_TWO-d.RADIANS_PER_DEGREE)h=0;else{var p=Ane;p.longitude=f,p.latitude=s,p.height=0;var m=xne;m.longitude=f,m.latitude=c,m.height=0;var g=Ene;Object(o.a)(g)&&g.ellipsoid===r||(Ene=g=new Km(void 0,void 0,r)),g.setEndPoints(p,m),h=g.interpolateUsingFraction(.5,Ane).latitude}var v=Ane;v.longitude=f,v.latitude=h,v.height=0;var _=r.cartographicToCartesian(v,Rne),b=Ane;b.longitude=l,b.latitude=s;var y=r.cartographicToCartesian(b,Tne);b.longitude=u;var w=r.cartographicToCartesian(b,Dne);b.longitude=f;var C=r.cartographicToCartesian(b,Ine);b.latitude=c;var E=r.cartographicToCartesian(b,Mne);b.longitude=l;var A=r.cartographicToCartesian(b,Pne);b.longitude=u;var x=r.cartographicToCartesian(b,Sne);O.subtract(w,_,w),O.subtract(A,_,A),O.subtract(y,_,y),O.subtract(x,_,x),O.subtract(C,_,C),O.subtract(E,_,E);var T=r.geodeticSurfaceNormal(_,a.direction);O.negate(T,T);var S=O.cross(T,O.UNIT_Z,a.right);O.normalize(S,S);var D,P=O.cross(S,T,a.up);if(e.frustum instanceof Vb){var I,M,R=Math.max(O.distance(y,w),O.distance(A,x)),L=Math.max(O.distance(y,A),O.distance(w,x)),j=e.frustum._offCenterFrustum.right/e.frustum._offCenterFrustum.top,F=L*j;R>F?M=(I=R)/j:(M=L,I=F),D=Math.max(I,M)}else{var N=Math.tan(.5*e.frustum.fovy),z=e.frustum.aspectRatio*N;if(D=Math.max(Fne(T,P,w,N),Fne(T,P,A,N),Fne(T,P,y,N),Fne(T,P,x,N),Fne(T,P,C,N),Fne(T,P,E,N),Fne(T,S,w,z),Fne(T,S,A,z),Fne(T,S,y,z),Fne(T,S,x,z),Fne(T,S,C,z),Fne(T,S,E,z)),c<0&&s>0){var k=Ane;k.longitude=u,k.latitude=0,k.height=0;var B=r.cartographicToCartesian(k,Lne);O.subtract(B,_,B),D=Math.max(D,Fne(T,P,B,N),Fne(T,S,B,z)),k.longitude=l,B=r.cartographicToCartesian(k,Lne),O.subtract(B,_,B),D=Math.max(D,Fne(T,P,B,N),Fne(T,S,B,z))}}return O.add(_,O.multiplyByScalar(T,-D,Lne),n)}var zne=new R,kne=new O,Bne=new O;var Hne=new R,Vne=new O,Une=new O;yte.prototype.getRectangleCameraCoordinates=function(e,t){if(!Object(o.a)(e))throw new a.a("rectangle is required");var n=this._mode;return Object(o.a)(t)||(t=new O),n===IR.SCENE3D?Nne(this,e,t):n===IR.COLUMBUS_VIEW?function(e,t,n){var i=e._projection;t.west>t.east&&(t=Se.MAX_VALUE);var r=e._actualTransform,a=e._actualInvTransform,s=zne;s.longitude=t.east,s.latitude=t.north;var c=i.project(s,kne);Ae.multiplyByPoint(r,c,c),Ae.multiplyByPoint(a,c,c),s.longitude=t.west,s.latitude=t.south;var l=i.project(s,Bne);if(Ae.multiplyByPoint(r,l,l),Ae.multiplyByPoint(a,l,l),n.x=.5*(c.x-l.x)+l.x,n.y=.5*(c.y-l.y)+l.y,Object(o.a)(e.frustum.fovy)){var u=Math.tan(.5*e.frustum.fovy),h=e.frustum.aspectRatio*u;n.z=.5*Math.max((c.x-l.x)/h,(c.y-l.y)/u)}else{var d=c.x-l.x,f=c.y-l.y;n.z=Math.max(d,f)}return n}(this,e,t):n===IR.SCENE2D?function(e,t,n){var i=e._projection,r=t.east;t.west>t.east&&(e._scene.mapMode2D===bte.INFINITE_SCROLL?r+=d.TWO_PI:r=(t=Se.MAX_VALUE).east);var o=Hne;o.longitude=r,o.latitude=t.north;var a=i.project(o,Vne);o.longitude=t.west,o.latitude=t.south;var s,c,l=i.project(o,Une),u=.5*Math.abs(a.x-l.x),h=.5*Math.abs(a.y-l.y),f=e.frustum.right/e.frustum.top,p=h*f;return u>p?c=(s=u)/f:(c=h,s=p),h=Math.max(2*s,2*c),n.x=.5*(a.x-l.x)+l.x,n.y=.5*(a.y-l.y)+l.y,(o=i.unproject(n,o)).height=h,n=i.project(o,n)}(this,e,t):void 0};var Wne=new ti;var Gne=new ti;var qne=new ti;yte.prototype.pickEllipsoid=function(e,t,n){if(!Object(o.a)(e))throw new a.a("windowPosition is required.");var i=this._scene.canvas;if(0!==i.clientWidth&&0!==i.clientHeight){if(Object(o.a)(n)||(n=new O),t=Object(r.a)(t,W.WGS84),this._mode===IR.SCENE3D)n=function(e,t,n,i){n=Object(r.a)(n,W.WGS84);var o=e.getPickRay(t,Wne),a=Ii.rayEllipsoid(o,n);if(a){var s=a.start>0?a.start:a.stop;return ti.getPoint(o,s,i)}}(this,e,t,n);else if(this._mode===IR.SCENE2D)n=function(e,t,n,i){var r=e.getPickRay(t,Gne).origin;r=O.fromElements(r.y,r.z,0,r);var o=n.unproject(r);if(!(o.latitude<-d.PI_OVER_TWO||o.latitude>d.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(o,i)}(this,e,this._projection,n);else{if(this._mode!==IR.COLUMBUS_VIEW)return;n=function(e,t,n,i){var r=e.getPickRay(t,qne),o=-r.origin.x/r.direction.x;ti.getPoint(r,o,i);var a=n.unproject(new O(i.y,i.z,0));if(!(a.latitude<-d.PI_OVER_TWO||a.latitude>d.PI_OVER_TWO||a.longitude<-Math.PI||a.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(a,i)}(this,e,this._projection,n)}return n}};var Yne=new O,$ne=new O,Xne=new O;var Kne=new O;yte.prototype.getPickRay=function(e,t){if(!Object(o.a)(e))throw new a.a("windowPosition is required.");Object(o.a)(t)||(t=new ti);var n=this.frustum;return Object(o.a)(n.aspectRatio)&&Object(o.a)(n.fov)&&Object(o.a)(n.near)?function(e,t,n){var i=e._scene.canvas,r=i.clientWidth,o=i.clientHeight,a=Math.tan(.5*e.frustum.fovy),s=e.frustum.aspectRatio*a,c=e.frustum.near,l=2/r*t.x-1,u=2/o*(o-t.y)-1,h=e.positionWC;O.clone(h,n.origin);var d=O.multiplyByScalar(e.directionWC,c,Yne);O.add(h,d,d);var f=O.multiplyByScalar(e.rightWC,l*c*s,$ne),p=O.multiplyByScalar(e.upWC,u*c*a,Xne),m=O.add(d,f,n.direction);return O.add(m,p,m),O.subtract(m,h,m),O.normalize(m,m),n}(this,e,t):function(e,t,n){var i=e._scene.canvas,r=i.clientWidth,a=i.clientHeight,s=e.frustum;Object(o.a)(s._offCenterFrustum)&&(s=s._offCenterFrustum);var c=2/r*t.x-1;c*=.5*(s.right-s.left);var l=2/a*(a-t.y)-1;l*=.5*(s.top-s.bottom);var u=n.origin;return O.clone(e.position,u),O.multiplyByScalar(e.right,c,Kne),O.add(Kne,u,u),O.multiplyByScalar(e.up,l,Kne),O.add(Kne,u,u),O.clone(e.directionWC,n.direction),e._mode!==IR.COLUMBUS_VIEW&&e._mode!==IR.SCENE2D||O.fromElements(n.origin.z,n.origin.x,n.origin.y,n.origin),n}(this,e,t)};var Qne=new O,Zne=new O;yte.prototype.distanceToBoundingSphere=function(e){if(!Object(o.a)(e))throw new a.a("boundingSphere is required.");var t=O.subtract(this.positionWC,e.center,Qne),n=O.multiplyByScalar(this.directionWC,O.dot(t,this.directionWC),Zne);return Math.max(0,O.magnitude(n)-e.radius)};var Jne=new Mt;yte.prototype.getPixelSize=function(e,t,n){if(!Object(o.a)(e))throw new a.a("boundingSphere is required.");if(!Object(o.a)(t))throw new a.a("drawingBufferWidth is required.");if(!Object(o.a)(n))throw new a.a("drawingBufferHeight is required.");var i=this.distanceToBoundingSphere(e),r=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,Jne);return Math.max(r.x,r.y)};var eie=new O,tie=new O,nie=new O,iie=new O;function rie(e,t){var n=e.position,i=e.direction,r=e.worldToCameraCoordinatesVector(O.UNIT_X,eie),o=-O.dot(r,n)/O.dot(r,i),a=O.add(n,O.multiplyByScalar(i,o,tie),tie);e.cameraToWorldCoordinatesPoint(a,a),n=e.cameraToWorldCoordinatesPoint(e.position,nie);var s=Math.tan(.5*e.frustum.fovy),c=e.frustum.aspectRatio*s,l=O.magnitude(O.subtract(n,a,iie)),u=c*l,h=s*l,d=e._maxCoord.x,f=e._maxCoord.y,p=Math.max(u-d,d),m=Math.max(h-f,f);if(n.z<-p||n.z>p||n.y<-m||n.y>m){var g=a.y<-p||a.y>p,v=a.z<-m||a.z>m;if(g||v)return function(e,t,n,i,r,o){var a=O.clone(t);return n.y>i?a.y-=n.y-i:n.y<-i&&(a.y+=-i-n.y),n.z>r?a.z-=n.z-r:n.z<-r&&(a.z+=-r-n.z),{easingFunction:rb.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:o,update:function(n){var i=O.lerp(t,a,n.time,new O);e.worldToCameraCoordinatesPoint(i,e.position)}}}(e,n,a,p,m,t)}}yte.prototype.createCorrectPositionTween=function(e){if(!Object(o.a)(e))throw new a.a("duration is required.");if(this._mode===IR.COLUMBUS_VIEW)return rie(this,e)};var oie=new O,aie={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};yte.prototype.cancelFlight=function(){Object(o.a)(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)},yte.prototype.completeFlight=function(){if(Object(o.a)(this._currentFlight)){this._currentFlight.cancelTween();var e={destination:void 0,orientation:{heading:void 0,pitch:void 0,roll:void 0}};e.destination=aie.destination,e.orientation.heading=aie.heading,e.orientation.pitch=aie.pitch,e.orientation.roll=aie.roll,this.setView(e),Object(o.a)(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}},yte.prototype.flyTo=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).destination;if(!Object(o.a)(t))throw new a.a("destination is required.");if(this._mode!==IR.MORPHING){this.cancelFlight();var n=Object(r.a)(e.orientation,r.a.EMPTY_OBJECT);if(Object(o.a)(n.direction)&&(n=ene(this,t,n,tne.orientation)),Object(o.a)(e.duration)&&e.duration<=0){var i=tne;return i.destination=e.destination,i.orientation.heading=n.heading,i.orientation.pitch=n.pitch,i.orientation.roll=n.roll,i.convert=e.convert,i.endTransform=e.endTransform,this.setView(i),void("function"===typeof e.complete&&e.complete())}var s=Object(o.a)(t.west);s&&(t=this.getRectangleCameraCoordinates(t,oie));var c,l=this;aie.destination=t,aie.heading=n.heading,aie.pitch=n.pitch,aie.roll=n.roll,aie.duration=e.duration,aie.complete=function(){c===l._currentFlight&&(l._currentFlight=void 0),Object(o.a)(e.complete)&&e.complete()},aie.cancel=e.cancel,aie.endTransform=e.endTransform,aie.convert=!s&&e.convert,aie.maximumHeight=e.maximumHeight,aie.pitchAdjustHeight=e.pitchAdjustHeight,aie.flyOverLongitude=e.flyOverLongitude,aie.flyOverLongitudeWeight=e.flyOverLongitudeWeight,aie.easingFunction=e.easingFunction;var u=this._scene,h=_te.createTween(u,aie);if(0!==h.duration){c=u.tweens.add(h),this._currentFlight=c;var d=this._scene.preloadFlightCamera;this._mode!==IR.SCENE2D&&(Object(o.a)(d)||(d=yte.clone(this)),d.setView({destination:t,orientation:n}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))}else"function"===typeof h.complete&&h.complete()}};function sie(e,t,n){n=qO.clone(Object(o.a)(n)?n:yte.DEFAULT_OFFSET);var i=e._scene.screenSpaceCameraController.minimumZoomDistance,r=e._scene.screenSpaceCameraController.maximumZoomDistance,a=n.range;if(!Object(o.a)(a)||0===a){var s=t.radius;0===s?n.range=100:e.frustum instanceof Vb||e._mode===IR.SCENE2D?n.range=function(e,t){var n,i,r=e.frustum;Object(o.a)(r._offCenterFrustum)&&(r=r._offCenterFrustum);var a=r.right/r.top,s=t*a;return t>s?i=(n=t)/a:(i=t,n=s),1.5*Math.max(n,i)}(e,s):n.range=function(e,t){var n=e.frustum,i=Math.tan(.5*n.fovy),r=n.aspectRatio*i;return Math.max(t/r,t/i)}(e,s),n.range=d.clamp(n.range,i,r)}return n}yte.prototype.viewBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("boundingSphere is required.");if(this._mode===IR.MORPHING)throw new a.a("viewBoundingSphere is not supported while morphing.");t=sie(this,e,t),this.lookAt(e.center,t)};var cie=new Ae,lie=new O,uie=new O,hie=new O,die=new O,fie=new he,pie=new No,mie=new oe;yte.prototype.flyToBoundingSphere=function(e,t){if(!Object(o.a)(e))throw new a.a("boundingSphere is required.");t=Object(r.a)(t,r.a.EMPTY_OBJECT);var n=this._mode===IR.SCENE2D||this._mode===IR.COLUMBUS_VIEW;this._setTransform(Ae.IDENTITY);var i,s=sie(this,e,t.offset);i=n?O.multiplyByScalar(O.UNIT_Z,s.range,lie):Cne(s.heading,s.pitch,s.range);var c,l,u=ya.eastNorthUpToFixedFrame(e.center,W.WGS84,cie);if(Ae.multiplyByPoint(u,i,i),!n){if(c=O.subtract(e.center,i,uie),O.normalize(c,c),l=Ae.multiplyByPointAsVector(u,O.UNIT_Z,hie),1-Math.abs(O.dot(c,l))<d.EPSILON6){var h=No.fromAxisAngle(c,s.heading,pie),f=oe.fromQuaternion(h,mie);O.fromCartesian4(Ae.getColumn(u,1,fie),l),oe.multiplyByVector(f,l,l)}var p=O.cross(c,l,die);O.cross(p,c,l),O.normalize(l,l)}this.flyTo({destination:i,orientation:{direction:c,up:l},duration:t.duration,complete:t.complete,cancel:t.cancel,endTransform:t.endTransform,maximumHeight:t.maximumHeight,easingFunction:t.easingFunction,flyOverLongitude:t.flyOverLongitude,flyOverLongitudeWeight:t.flyOverLongitudeWeight,pitchAdjustHeight:t.pitchAdjustHeight})};var gie=new O,vie=new O,_ie=new O,bie=new O,yie=[new O,new O,new O,new O];var wie=new Mt,Oie=new O,Cie=[new R,new R,new R,new R];function Eie(e,t,n,i,r,a){wie.x=e,wie.y=t;var s=i.pickEllipsoid(wie,r,Oie);return Object(o.a)(s)?(Cie[n]=r.cartesianToCartographic(s,Cie[n]),1):(Cie[n]=r.cartesianToCartographic(a[n],Cie[n]),0)}yte.prototype.computeViewRectangle=function(e,t){e=Object(r.a)(e,W.WGS84);var n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new gt(O.ZERO,e.maximumRadius);if(n.computeVisibility(i)!==Y.OUTSIDE){var o=this._scene.canvas,a=o.clientWidth,s=o.clientHeight,c=0,l=function(e,t){var n,i,r=t.radii,o=e.positionWC,a=O.multiplyComponents(t.oneOverRadii,o,gie),s=O.magnitude(a),c=O.normalize(a,vie);O.equalsEpsilon(c,O.UNIT_Z,d.EPSILON10)?(n=new O(0,1,0),i=new O(0,0,1)):(n=O.normalize(O.cross(O.UNIT_Z,c,_ie),_ie),i=O.normalize(O.cross(c,n,bie),bie));var l=Math.sqrt(O.magnitudeSquared(a)-1),u=O.multiplyByScalar(c,1/s,gie),h=l/s,f=O.multiplyByScalar(n,h,vie),p=O.multiplyByScalar(i,h,_ie),m=O.add(u,p,yie[0]);O.subtract(m,f,m),O.multiplyComponents(r,m,m);var g=O.subtract(u,p,yie[1]);O.subtract(g,f,g),O.multiplyComponents(r,g,g);var v=O.subtract(u,p,yie[2]);O.add(v,f,v),O.multiplyComponents(r,v,v);var _=O.add(u,p,yie[3]);return O.add(_,f,_),O.multiplyComponents(r,_,_),yie}(this,e);if(c+=Eie(0,0,0,this,e,l),c+=Eie(0,s,1,this,e,l),c+=Eie(a,s,2,this,e,l),(c+=Eie(a,0,3,this,e,l))<2)return Se.MAX_VALUE;t=Se.fromCartographicArray(Cie,t);for(var u=0,h=Cie[3].longitude,f=0;f<4;++f){var p=Cie[f].longitude,m=Math.abs(p-h);m>d.PI?u+=d.TWO_PI-m:u+=m,h=p}return d.equalsEpsilon(Math.abs(u),d.TWO_PI,d.EPSILON9)&&(t.west=-d.PI,t.east=d.PI,Cie[0].latitude>=0?t.north=d.PI_OVER_TWO:t.south=-d.PI_OVER_TWO),t}},yte.prototype.switchToPerspectiveFrustum=function(){if(!(this._mode===IR.SCENE2D||this.frustum instanceof Zb)){var e=this._scene;this.frustum=new Zb,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=d.toRadians(60)}},yte.prototype.switchToOrthographicFrustum=function(){if(!(this._mode===IR.SCENE2D||this.frustum instanceof Vb)){var e=Wte(this),t=this._scene;this.frustum=new Vb,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e}},yte.clone=function(e,t){return Object(o.a)(t)||(t=new yte(e._scene)),O.clone(e.position,t.position),O.clone(e.direction,t.direction),O.clone(e.up,t.up),O.clone(e.right,t.right),Ae.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var Aie=yte,xie=Object.freeze({LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4});function Tie(e,t){var n=e;return Object(o.a)(t)&&(n+="+"+t),n}function Sie(e,t,n){var i=Tie(xie.PINCH,t),r=e._update,a=e._isDown,s=e._eventStartPosition,c=e._pressTime,l=e._releaseTime;r[i]=!0,a[i]=!1,s[i]=new Mt;var u=e._movement[i];Object(o.a)(u)||(u=e._movement[i]={}),u.distance={startPosition:new Mt,endPosition:new Mt},u.angleAndHeight={startPosition:new Mt,endPosition:new Mt},u.prevAngle=0,e._eventHandler.setInputAction((function(t){e._buttonsDown++,a[i]=!0,c[i]=new Date,Mt.lerp(t.position1,t.position2,.5,s[i])}),RT.PINCH_START,t),e._eventHandler.setInputAction((function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),a[i]=!1,l[i]=new Date}),RT.PINCH_END,t),e._eventHandler.setInputAction((function(e){if(a[i]){r[i]?(c=e,l=u,Mt.clone(c.distance.startPosition,l.distance.startPosition),Mt.clone(c.distance.endPosition,l.distance.endPosition),Mt.clone(c.angleAndHeight.startPosition,l.angleAndHeight.startPosition),Mt.clone(c.angleAndHeight.endPosition,l.angleAndHeight.endPosition),r[i]=!1,u.prevAngle=u.angleAndHeight.startPosition.x):(Mt.clone(e.distance.endPosition,u.distance.endPosition),Mt.clone(e.angleAndHeight.endPosition,u.angleAndHeight.endPosition));for(var t=u.angleAndHeight.endPosition.x,o=u.prevAngle,s=2*Math.PI;t>=o+Math.PI;)t-=s;for(;t<o-Math.PI;)t+=s;u.angleAndHeight.endPosition.x=-t*n.clientWidth/12,u.angleAndHeight.startPosition.x=-o*n.clientWidth/12}var c,l}),RT.PINCH_MOVE,t)}function Die(e,t){var n=Tie(xie.WHEEL,t),i=e._update;i[n]=!0;var r=e._movement[n];Object(o.a)(r)||(r=e._movement[n]={}),r.startPosition=new Mt,r.endPosition=new Mt,e._eventHandler.setInputAction((function(e){var t=15*d.toRadians(e);i[n]?(Mt.clone(Mt.ZERO,r.startPosition),r.endPosition.x=0,r.endPosition.y=t,i[n]=!1):r.endPosition.y=r.endPosition.y+t}),RT.WHEEL,t)}function Pie(e,t,n){var i=Tie(n,t),r=e._isDown,a=e._eventStartPosition,s=e._pressTime,c=e._releaseTime;r[i]=!1,a[i]=new Mt;var l,u,h=e._lastMovement[i];Object(o.a)(h)||(h=e._lastMovement[i]={startPosition:new Mt,endPosition:new Mt,valid:!1}),n===xie.LEFT_DRAG?(l=RT.LEFT_DOWN,u=RT.LEFT_UP):n===xie.RIGHT_DRAG?(l=RT.RIGHT_DOWN,u=RT.RIGHT_UP):n===xie.MIDDLE_DRAG&&(l=RT.MIDDLE_DOWN,u=RT.MIDDLE_UP),e._eventHandler.setInputAction((function(t){e._buttonsDown++,h.valid=!1,r[i]=!0,s[i]=new Date,Mt.clone(t.position,a[i])}),l,t),e._eventHandler.setInputAction((function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date}),u,t)}function Iie(e,t){Mt.clone(e.startPosition,t.startPosition),Mt.clone(e.endPosition,t.endPosition)}function Mie(e,t){var n=e._update,i=e._movement,r=e._lastMovement,a=e._isDown;for(var s in xie)if(xie.hasOwnProperty(s)){var c=xie[s];if(Object(o.a)(c)){var l=Tie(c,t);n[l]=!0,Object(o.a)(e._lastMovement[l])||(e._lastMovement[l]={startPosition:new Mt,endPosition:new Mt,valid:!1}),Object(o.a)(e._movement[l])||(e._movement[l]={startPosition:new Mt,endPosition:new Mt})}}e._eventHandler.setInputAction((function(s){for(var c in xie)if(xie.hasOwnProperty(c)){var l=xie[c];if(Object(o.a)(l)){var u=Tie(l,t);a[u]&&(n[u]?(Iie(i[u],r[u]),r[u].valid=!0,Iie(s,i[u]),n[u]=!1):Mt.clone(s.endPosition,i[u].endPosition))}}Mt.clone(s.endPosition,e._currentMousePosition)}),RT.MOUSE_MOVE,t)}function Rie(e){if(!Object(o.a)(e))throw new a.a("canvas is required.");for(var t in this._eventHandler=new vS(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new Mt,Die(this,void 0),Sie(this,void 0,e),Pie(this,void 0,xie.LEFT_DRAG),Pie(this,void 0,xie.RIGHT_DRAG),Pie(this,void 0,xie.MIDDLE_DRAG),Mie(this,void 0),AC)if(AC.hasOwnProperty(t)){var n=AC[t];Object(o.a)(n)&&(Die(this,n),Sie(this,n,e),Pie(this,n,xie.LEFT_DRAG),Pie(this,n,xie.RIGHT_DRAG),Pie(this,n,xie.MIDDLE_DRAG),Mie(this,n))}}Object.defineProperties(Rie.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){var e=!this._update[Tie(xie.WHEEL)]||!this._update[Tie(xie.WHEEL,AC.SHIFT)]||!this._update[Tie(xie.WHEEL,AC.CTRL)]||!this._update[Tie(xie.WHEEL,AC.ALT)];return this._buttonsDown>0||e}}}),Rie.prototype.isMoving=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t);return!this._update[n]},Rie.prototype.getMovement=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t);return this._movement[n]},Rie.prototype.getLastMovement=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t),i=this._lastMovement[n];if(i.valid)return i},Rie.prototype.isButtonDown=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t);return this._isDown[n]},Rie.prototype.getStartMousePosition=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");if(e===xie.WHEEL)return this._currentMousePosition;var n=Tie(e,t);return this._eventStartPosition[n]},Rie.prototype.getButtonPressTime=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t);return this._pressTime[n]},Rie.prototype.getButtonReleaseTime=function(e,t){if(!Object(o.a)(e))throw new a.a("type is required.");var n=Tie(e,t);return this._releaseTime[n]},Rie.prototype.reset=function(){for(var e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)},Rie.prototype.isDestroyed=function(){return!1},Rie.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),Ks(this)};var Lie=Rie;function jie(e,t,n,i,r){this.featurePropertiesDirty=!1}Object.defineProperties(jie.prototype,{featuresLength:{get:function(){a.a.throwInstantiationError()}},pointsLength:{get:function(){a.a.throwInstantiationError()}},trianglesLength:{get:function(){a.a.throwInstantiationError()}},geometryByteLength:{get:function(){a.a.throwInstantiationError()}},texturesByteLength:{get:function(){a.a.throwInstantiationError()}},batchTableByteLength:{get:function(){a.a.throwInstantiationError()}},innerContents:{get:function(){a.a.throwInstantiationError()}},readyPromise:{get:function(){a.a.throwInstantiationError()}},tileset:{get:function(){a.a.throwInstantiationError()}},tile:{get:function(){a.a.throwInstantiationError()}},url:{get:function(){a.a.throwInstantiationError()}},batchTable:{get:function(){a.a.throwInstantiationError()}}}),jie.prototype.hasProperty=function(e,t){a.a.throwInstantiationError()},jie.prototype.getFeature=function(e){a.a.throwInstantiationError()},jie.prototype.applyDebugSettings=function(e,t){a.a.throwInstantiationError()},jie.prototype.applyStyle=function(e){a.a.throwInstantiationError()},jie.prototype.update=function(e,t){a.a.throwInstantiationError()},jie.prototype.isDestroyed=function(){a.a.throwInstantiationError()},jie.prototype.destroy=function(){a.a.throwInstantiationError()};var Fie=function(e){i.a.typeOf.object("options",e),i.a.typeOf.number("options.pass",e.pass),this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1};function Nie(e,t){this._conditionsExpression=Object(Lf.a)(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,function(e,t){var n=[],i=e._conditions;if(!Object(o.a)(i))return;for(var r=i.length,a=0;a<r;++a){var s=i[a],c=String(s[0]),l=String(s[1]);n.push(new zie(new vB(c,t),new vB(l,t)))}e._runtimeConditions=n}(this,t)}function zie(e,t){this.condition=e,this.expression=t}Object.defineProperties(Nie.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}}),Nie.prototype.evaluate=function(e,t){var n=this._runtimeConditions;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;++r){var a=n[r];if(a.condition.evaluate(e))return a.expression.evaluate(e,t)}},Nie.prototype.evaluateColor=function(e,t){var n=this._runtimeConditions;if(Object(o.a)(n))for(var i=n.length,r=0;r<i;++r){var a=n[r];if(a.condition.evaluate(e))return a.expression.evaluateColor(e,t)}},Nie.prototype.getShaderFunction=function(e,t,n,i){var r=this._runtimeConditions;if(Object(o.a)(r)&&0!==r.length){for(var a="",s=r.length,c=0;c<s;++c){var l=r[c];a+=" "+(0===c?"if":"else if")+" ("+l.condition.getShaderExpression(t,n)+") \n { \n return "+l.expression.getShaderExpression(t,n)+"; \n } \n"}return a=i+" "+e+"() \n{ \n"+a+" return "+i+"(1.0); \n} \n"}};var kie=Nie;function Bie(e){var t;(this._style={},this._ready=!1,this._show=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._labelColor=void 0,this._labelOutlineColor=void 0,this._labelOutlineWidth=void 0,this._font=void 0,this._labelStyle=void 0,this._labelText=void 0,this._backgroundColor=void 0,this._backgroundPadding=void 0,this._backgroundEnabled=void 0,this._scaleByDistance=void 0,this._translucencyByDistance=void 0,this._distanceDisplayCondition=void 0,this._heightOffset=void 0,this._anchorLineEnabled=void 0,this._anchorLineColor=void 0,this._image=void 0,this._disableDepthTestDistance=void 0,this._horizontalOrigin=void 0,this._verticalOrigin=void 0,this._labelHorizontalOrigin=void 0,this._labelVerticalOrigin=void 0,this._meta=void 0,this._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,"string"===typeof e||e instanceof _t.a)?t=_t.a.createIfNeeded(e).fetchJson(e):t=Yt.a.resolve(e);var n=this;this._readyPromise=t.then((function(e){return function(e,t){t=Object(r.a)(Object(Lf.a)(t,!0),e._style),e._style=t,e.show=t.show,e.color=t.color,e.pointSize=t.pointSize,e.pointOutlineColor=t.pointOutlineColor,e.pointOutlineWidth=t.pointOutlineWidth,e.labelColor=t.labelColor,e.labelOutlineColor=t.labelOutlineColor,e.labelOutlineWidth=t.labelOutlineWidth,e.labelStyle=t.labelStyle,e.font=t.font,e.labelText=t.labelText,e.backgroundColor=t.backgroundColor,e.backgroundPadding=t.backgroundPadding,e.backgroundEnabled=t.backgroundEnabled,e.scaleByDistance=t.scaleByDistance,e.translucencyByDistance=t.translucencyByDistance,e.distanceDisplayCondition=t.distanceDisplayCondition,e.heightOffset=t.heightOffset,e.anchorLineEnabled=t.anchorLineEnabled,e.anchorLineColor=t.anchorLineColor,e.image=t.image,e.disableDepthTestDistance=t.disableDepthTestDistance,e.horizontalOrigin=t.horizontalOrigin,e.verticalOrigin=t.verticalOrigin,e.labelHorizontalOrigin=t.labelHorizontalOrigin,e.labelVerticalOrigin=t.labelVerticalOrigin;var n={};if(Object(o.a)(t.meta)){var i=t.defines,a=Object(r.a)(t.meta,r.a.EMPTY_OBJECT);for(var s in a)a.hasOwnProperty(s)&&(n[s]=new vB(a[s],i))}e._meta=n,e._ready=!0}(n,e),n}))}function Hie(e,t){var n=Object(r.a)(e._style,r.a.EMPTY_OBJECT).defines;if(Object(o.a)(t))return"boolean"===typeof t||"number"===typeof t?new vB(String(t)):"string"===typeof t?new vB(t,n):Object(o.a)(t.conditions)?new kie(t,n):t}function Vie(e){if(Object(o.a)(e))return Object(o.a)(e.expression)?e.expression:Object(o.a)(e.conditionsExpression)?Object(Lf.a)(e.conditionsExpression,!0):e}Object.defineProperties(Bie.prototype,{style:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._style}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},show:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._show},set:function(e){this._show=Hie(this,e),this._style.show=Vie(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._color},set:function(e){this._color=Hie(this,e),this._style.color=Vie(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._pointSize},set:function(e){this._pointSize=Hie(this,e),this._style.pointSize=Vie(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._pointOutlineColor},set:function(e){this._pointOutlineColor=Hie(this,e),this._style.pointOutlineColor=Vie(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=Hie(this,e),this._style.pointOutlineWidth=Vie(this._pointOutlineWidth)}},labelColor:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelColor},set:function(e){this._labelColor=Hie(this,e),this._style.labelColor=Vie(this._labelColor)}},labelOutlineColor:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelOutlineColor},set:function(e){this._labelOutlineColor=Hie(this,e),this._style.labelOutlineColor=Vie(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=Hie(this,e),this._style.labelOutlineWidth=Vie(this._labelOutlineWidth)}},font:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._font},set:function(e){this._font=Hie(this,e),this._style.font=Vie(this._font)}},labelStyle:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelStyle},set:function(e){this._labelStyle=Hie(this,e),this._style.labelStyle=Vie(this._labelStyle)}},labelText:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelText},set:function(e){this._labelText=Hie(this,e),this._style.labelText=Vie(this._labelText)}},backgroundColor:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._backgroundColor},set:function(e){this._backgroundColor=Hie(this,e),this._style.backgroundColor=Vie(this._backgroundColor)}},backgroundPadding:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._backgroundPadding},set:function(e){this._backgroundPadding=Hie(this,e),this._style.backgroundPadding=Vie(this._backgroundPadding)}},backgroundEnabled:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._backgroundEnabled},set:function(e){this._backgroundEnabled=Hie(this,e),this._style.backgroundEnabled=Vie(this._backgroundEnabled)}},scaleByDistance:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._scaleByDistance},set:function(e){this._scaleByDistance=Hie(this,e),this._style.scaleByDistance=Vie(this._scaleByDistance)}},translucencyByDistance:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._translucencyByDistance},set:function(e){this._translucencyByDistance=Hie(this,e),this._style.translucencyByDistance=Vie(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=Hie(this,e),this._style.distanceDisplayCondition=Vie(this._distanceDisplayCondition)}},heightOffset:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._heightOffset},set:function(e){this._heightOffset=Hie(this,e),this._style.heightOffset=Vie(this._heightOffset)}},anchorLineEnabled:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=Hie(this,e),this._style.anchorLineEnabled=Vie(this._anchorLineEnabled)}},anchorLineColor:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._anchorLineColor},set:function(e){this._anchorLineColor=Hie(this,e),this._style.anchorLineColor=Vie(this._anchorLineColor)}},image:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._image},set:function(e){this._image=Hie(this,e),this._style.image=Vie(this._image)}},disableDepthTestDistance:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=Hie(this,e),this._style.disableDepthTestDistance=Vie(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._horizontalOrigin},set:function(e){this._horizontalOrigin=Hie(this,e),this._style.horizontalOrigin=Vie(this._horizontalOrigin)}},verticalOrigin:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._verticalOrigin},set:function(e){this._verticalOrigin=Hie(this,e),this._style.verticalOrigin=Vie(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=Hie(this,e),this._style.labelHorizontalOrigin=Vie(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=Hie(this,e),this._style.labelVerticalOrigin=Vie(this._labelVerticalOrigin)}},meta:{get:function(){if(!this._ready)throw new a.a("The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.");return this._meta},set:function(e){this._meta=e}}}),Bie.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,this._colorShaderFunction=Object(o.a)(this.color)?this.color.getShaderFunction(e,t,n,"vec4"):void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)},Bie.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady||(this._showShaderFunctionReady=!0,this._showShaderFunction=Object(o.a)(this.show)?this.show.getShaderFunction(e,t,n,"bool"):void 0),this._showShaderFunction},Bie.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady||(this._pointSizeShaderFunctionReady=!0,this._pointSizeShaderFunction=Object(o.a)(this.pointSize)?this.pointSize.getShaderFunction(e,t,n,"float"):void 0),this._pointSizeShaderFunction};var Uie=Bie;function Wie(e){e=Object(r.a)(e,1),i.a.typeOf.number.greaterThan("radius",e,0),this._radius=Object(r.a)(e,1)}Object.defineProperties(Wie.prototype,{radius:{get:function(){return this._radius},set:function(e){i.a.typeOf.number.greaterThan("value",e,0),this._radius=e}}}),Wie.prototype.emit=function(e){var t=d.randomBetween(0,d.TWO_PI),n=d.randomBetween(0,this._radius),i=n*Math.cos(t),r=n*Math.sin(t);e.position=O.fromElements(i,r,0,e.position),e.velocity=O.clone(O.UNIT_Z,e.velocity)};var Gie=Wie;function qie(e,t){var n,i=t.terrainProvider,r=t.mapProjection,a=r.ellipsoid,s=t.camera.getRectangleCameraCoordinates(e);return n=t.mode===IR.SCENE3D?a.cartesianToCartographic(s):r.unproject(s),Object(o.a)(i)?i.readyPromise.then((function(){var r=i.availability;if(!Object(o.a)(r)||t.mode===IR.SCENE2D)return n;var a=[Se.center(e),Se.southeast(e),Se.southwest(e),Se.northeast(e),Se.northwest(e)];return qie._sampleTerrainMostDetailed(i,a).then((function(e){var t=e.reduce((function(e,t){return Math.max(t.height,e)}),-Number.MAX_VALUE),i=n;return i.height+=t,i}))})):Yt.a.resolve(n)}qie._sampleTerrainMostDetailed=MT;var Yie=qie,$ie=d.toRadians(30);function Xie(e){this._angle=Object(r.a)(e,$ie)}Object.defineProperties(Xie.prototype,{angle:{get:function(){return this._angle},set:function(e){i.a.typeOf.number("value",e),this._angle=e}}}),Xie.prototype.emit=function(e){var t=Math.tan(this._angle),n=d.randomBetween(0,d.TWO_PI),i=d.randomBetween(0,t),r=i*Math.cos(n),o=i*Math.sin(n);e.velocity=O.fromElements(r,o,1,e.velocity),O.normalize(e.velocity,e.velocity),e.position=O.clone(O.ZERO,e.position)};var Kie=/{[^}]+}/g,Qie={x:function(e,t,n,i){return sre(e,"{x}",t)},y:function(e,t,n,i){return sre(e,"{y}",n)},z:function(e,t,n,i){return sre(e,"{z}",i)},s:function(e,t,n,i){var r=(t+n+i)%e._subdomains.length;return e._subdomains[r]},reverseX:function(e,t,n,i){var r=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return sre(e,"{reverseX}",r)},reverseY:function(e,t,n,i){var r=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return sre(e,"{reverseY}",r)},reverseZ:function(e,t,n,i){var r=e.maximumLevel,a=Object(o.a)(r)&&i<r?r-i-1:i;return sre(e,"{reverseZ}",a)},westDegrees:function(e,t,n,i){return cre(e,t,n,i),tre.west},southDegrees:function(e,t,n,i){return cre(e,t,n,i),tre.south},eastDegrees:function(e,t,n,i){return cre(e,t,n,i),tre.east},northDegrees:function(e,t,n,i){return cre(e,t,n,i),tre.north},westProjected:function(e,t,n,i){return lre(e,t,n,i),ire.west},southProjected:function(e,t,n,i){return lre(e,t,n,i),ire.south},eastProjected:function(e,t,n,i){return lre(e,t,n,i),ire.east},northProjected:function(e,t,n,i){return lre(e,t,n,i),ire.north},width:function(e,t,n,i){return e.tileWidth},height:function(e,t,n,i){return e.tileHeight}},Zie=Object(Wf.a)(Qie,{i:function(e,t,n,i,r,o,a){return dre(e,t,n,i,r,o),ore.x},j:function(e,t,n,i,r,o,a){return dre(e,t,n,i,r,o),ore.y},reverseI:function(e,t,n,i,r,o,a){return dre(e,t,n,i,r,o),e.tileWidth-ore.x-1},reverseJ:function(e,t,n,i,r,o,a){return dre(e,t,n,i,r,o),e.tileHeight-ore.y-1},longitudeDegrees:function(e,t,n,i,r,o,a){return d.toDegrees(r)},latitudeDegrees:function(e,t,n,i,r,o,a){return d.toDegrees(o)},longitudeProjected:function(e,t,n,i,r,o,a){return pre(e,t,n,i,r,o),hre.x},latitudeProjected:function(e,t,n,i,r,o,a){return pre(e,t,n,i,r,o),hre.y},format:function(e,t,n,i,r,o,a){return a}});function Jie(e){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Yt.a.isPromise(e)&&!Object(o.a)(e.url))throw new a.a("options is required.");this._errorEvent=new wn.a,this._resource=void 0,this._urlSchemeZeroPadding=void 0,this._pickFeaturesResource=void 0,this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._minimumLevel=void 0,this._tilingScheme=void 0,this._rectangle=void 0,this._tileDiscardPolicy=void 0,this._credit=void 0,this._hasAlphaChannel=void 0,this._readyPromise=void 0,this._tags=void 0,this._pickFeaturesTags=void 0,this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this.enablePickFeatures=!0,this.reinitialize(e)}Object.defineProperties(Jie.prototype,{url:{get:function(){return this._resource.url}},urlSchemeZeroPadding:{get:function(){return this._urlSchemeZeroPadding}},pickFeaturesUrl:{get:function(){return this._pickFeaturesResource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){if(!this.ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this.ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this.ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._maximumLevel}},minimumLevel:{get:function(){if(!this.ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return this._minimumLevel}},tilingScheme:{get:function(){if(!this.ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},rectangle:{get:function(){if(!this.ready)throw new a.a("rectangle must not be called before the imagery provider is ready.");return this._rectangle}},tileDiscardPolicy:{get:function(){if(!this.ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return Object(o.a)(this._resource)}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){if(!this.ready)throw new a.a("credit must not be called before the imagery provider is ready.");return this._credit}},hasAlphaChannel:{get:function(){if(!this.ready)throw new a.a("hasAlphaChannel must not be called before the imagery provider is ready.");return this._hasAlphaChannel}}}),Jie.prototype.reinitialize=function(e){var t=this;t._readyPromise=Object(Yt.a)(e).then((function(e){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.url))throw new a.a("options.url is required.");var n=e.customTags,i=Object(Wf.a)(Qie,n),s=Object(Wf.a)(Zie,n),c=_t.a.createIfNeeded(e.url),l=_t.a.createIfNeeded(e.pickFeaturesUrl);t.enablePickFeatures=Object(r.a)(e.enablePickFeatures,t.enablePickFeatures),t._urlSchemeZeroPadding=Object(r.a)(e.urlSchemeZeroPadding,t.urlSchemeZeroPadding),t._tileDiscardPolicy=e.tileDiscardPolicy,t._getFeatureInfoFormats=e.getFeatureInfoFormats,t._subdomains=e.subdomains,Array.isArray(t._subdomains)?t._subdomains=t._subdomains.slice():Object(o.a)(t._subdomains)&&t._subdomains.length>0?t._subdomains=t._subdomains.split(""):t._subdomains=["a","b","c"],t._tileWidth=Object(r.a)(e.tileWidth,256),t._tileHeight=Object(r.a)(e.tileHeight,256),t._minimumLevel=Object(r.a)(e.minimumLevel,0),t._maximumLevel=e.maximumLevel,t._tilingScheme=Object(r.a)(e.tilingScheme,new Kc({ellipsoid:e.ellipsoid})),t._rectangle=Object(r.a)(e.rectangle,t._tilingScheme.rectangle),t._rectangle=Se.intersection(t._rectangle,t._tilingScheme.rectangle),t._hasAlphaChannel=Object(r.a)(e.hasAlphaChannel,!0);var u=e.credit;return"string"===typeof u&&(u=new yn(u)),t._credit=u,t._resource=c,t._tags=i,t._pickFeaturesResource=l,t._pickFeaturesTags=s,!0}))},Jie.prototype.getTileCredits=function(e,t,n){if(!this.ready)throw new a.a("getTileCredits must not be called before the imagery provider is ready.")},Jie.prototype.requestImage=function(e,t,n,i){if(!this.ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");return Lee.loadImage(this,function(e,t,n,i,r){ere=!1,nre=!1;var a=e._resource,s=a.getUrlComponent(!0),c=e._tags,l={},u=s.match(Kie);Object(o.a)(u)&&u.forEach((function(r){var a=r.substring(1,r.length-1);Object(o.a)(c[a])&&(l[a]=c[a](e,t,n,i))}));return a.getDerivedResource({request:r,templateValues:l})}(this,e,t,n,i))},Jie.prototype.pickFeatures=function(e,t,n,i,r){if(!this.ready)throw new a.a("pickFeatures must not be called before the imagery provider is ready.");if(this.enablePickFeatures&&Object(o.a)(this._pickFeaturesResource)&&0!==this._getFeatureInfoFormats.length){var s=0,c=this;return function a(){if(s>=c._getFeatureInfoFormats.length)return Object(Yt.a)([]);var u=c._getFeatureInfoFormats[s],h=function(e,t,n,i,r,a,s){ere=!1,nre=!1,rre=!1,are=!1;var c=e._pickFeaturesResource,l=c.getUrlComponent(!0),u=e._pickFeaturesTags,h={},d=l.match(Kie);Object(o.a)(d)&&d.forEach((function(c){var l=c.substring(1,c.length-1);Object(o.a)(u[l])&&(h[l]=u[l](e,t,n,i,r,a,s))}));return c.getDerivedResource({templateValues:h})}(c,e,t,n,i,r,u.format);return++s,"json"===u.type?h.fetchJson().then(u.callback).otherwise(a):"xml"===u.type?h.fetchXML().then(u.callback).otherwise(a):"text"===u.type||"html"===u.type?h.fetchText().then(u.callback).otherwise(a):h.fetch({responseType:u.format}).then(l.bind(void 0,u)).otherwise(a)}()}function l(e,t){return e.callback(t)}};var ere=!1,tre=new Se,nre=!1,ire=new Se;var rre=!1,ore=new Mt,are=!1;function sre(e,t,n){if(e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)){var i=e.urlSchemeZeroPadding[t];if("string"===typeof i){var r=i.length;r>1&&(n=n.length>=r?n:new Array(r-n.toString().length+1).join("0")+n)}}return n}function cre(e,t,n,i){ere||(e.tilingScheme.tileXYToRectangle(t,n,i,tre),tre.west=d.toDegrees(tre.west),tre.south=d.toDegrees(tre.south),tre.east=d.toDegrees(tre.east),tre.north=d.toDegrees(tre.north),ere=!0)}function lre(e,t,n,i){nre||(e.tilingScheme.tileXYToNativeRectangle(t,n,i,ire),nre=!0)}var ure=new Se,hre=new O;function dre(e,t,n,i,r,o,a){if(!rre){pre(e,t,n,i,r,o);var s=hre,c=e.tilingScheme.tileXYToNativeRectangle(t,n,i,ure);ore.x=e.tileWidth*(s.x-c.west)/c.width|0,ore.y=e.tileHeight*(c.north-s.y)/c.height|0,rre=!0}}var fre=new R;function pre(e,t,n,i,r,o,a){if(!are){if(e.tilingScheme.projection instanceof q)hre.x=d.toDegrees(r),hre.y=d.toDegrees(o);else{var s=fre;s.longitude=r,s.latitude=o,e.tilingScheme.projection.project(s,hre)}are=!0}}var mre=Jie;function gre(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");var t,n=Yt.a.defer();mre.call(this,n.promise),this._tmsResource=void 0,this._xmlResource=void 0,this._options=e,this._deferred=n,this._metadataError=void 0,this._metadataSuccess=this._metadataSuccess.bind(this),this._metadataFailure=this._metadataFailure.bind(this),this._requestMetadata=this._requestMetadata.bind(this);var i=this;Object(Yt.a)(e.url).then((function(e){(t=_t.a.createIfNeeded(e)).appendForwardSlash(),i._tmsResource=t,i._xmlResource=t.getDerivedResource({url:"tilemapresource.xml"}),i._requestMetadata()})).otherwise((function(e){n.reject(e)}))}function vre(e,t){return e.west<t.rectangle.west&&(e.west=t.rectangle.west),e.east>t.rectangle.east&&(e.east=t.rectangle.east),e.south<t.rectangle.south&&(e.south=t.rectangle.south),e.north>t.rectangle.north&&(e.north=t.rectangle.north),e}function _re(e,t,n){var i=e.positionToTileXY(Se.southwest(t),n),r=e.positionToTileXY(Se.northeast(t),n);return(Math.abs(r.x-i.x)+1)*(Math.abs(r.y-i.y)+1)>4?0:n}Object(o.a)(Object.create)&&(gre.prototype=Object.create(mre.prototype),gre.prototype.constructor=gre),gre.prototype._requestMetadata=function(){this._xmlResource.fetchXML().then(this._metadataSuccess).otherwise(this._metadataFailure)},gre.prototype._metadataSuccess=function(e){for(var t,n,i,a,s=/tileformat/i,c=/tileset/i,l=/tilesets/i,u=/boundingbox/i,h=[],d=this._xmlResource,f=this._metadataError,p=this._deferred,m=this._requestMetadata,g=e.childNodes[0].childNodes,v=0;v<g.length;v++)if(s.test(g.item(v).nodeName))t=g.item(v);else if(l.test(g.item(v).nodeName)){i=g.item(v);for(var _=g.item(v).childNodes,b=0;b<_.length;b++)c.test(_.item(b).nodeName)&&h.push(_.item(b))}else u.test(g.item(v).nodeName)&&(n=g.item(v));if(!Object(o.a)(i)||!Object(o.a)(n))return a="Unable to find expected tilesets or bbox attributes in "+d.url+".",(f=$c.handleError(f,this,this.errorEvent,a,void 0,void 0,void 0,m)).retry||p.reject(new de.a(a)),void(this._metadataError=f);var y=this._options,w=Object(r.a)(y.fileExtension,t.getAttribute("extension")),O=Object(r.a)(y.tileWidth,parseInt(t.getAttribute("width"),10)),C=Object(r.a)(y.tileHeight,parseInt(t.getAttribute("height"),10)),E=Object(r.a)(y.minimumLevel,parseInt(h[0].getAttribute("order"),10)),A=Object(r.a)(y.maximumLevel,parseInt(h[h.length-1].getAttribute("order"),10)),x=i.getAttribute("profile"),T=y.tilingScheme;if(!Object(o.a)(T))if("geodetic"===x||"global-geodetic"===x)T=new Lt({ellipsoid:y.ellipsoid});else{if("mercator"!==x&&"global-mercator"!==x)return a=d.url+"specifies an unsupported profile attribute, "+x+".",(f=$c.handleError(f,this,this.errorEvent,a,void 0,void 0,void 0,m)).retry||p.reject(new de.a(a)),void(this._metadataError=f);T=new Kc({ellipsoid:y.ellipsoid})}var S=Se.clone(y.rectangle);if(!Object(o.a)(S)){var D,P,I,M;Object(r.a)(y.flipXY,!1)?(I=new Mt(parseFloat(n.getAttribute("miny")),parseFloat(n.getAttribute("minx"))),M=new Mt(parseFloat(n.getAttribute("maxy")),parseFloat(n.getAttribute("maxx")))):(I=new Mt(parseFloat(n.getAttribute("minx")),parseFloat(n.getAttribute("miny"))),M=new Mt(parseFloat(n.getAttribute("maxx")),parseFloat(n.getAttribute("maxy"))));var L="geodetic"===x||"mercator"===x;if(T.projection instanceof q||L)D=R.fromDegrees(I.x,I.y),P=R.fromDegrees(M.x,M.y);else{var j=T.projection;D=j.unproject(I),P=j.unproject(M)}S=new Se(D.longitude,D.latitude,P.longitude,P.latitude)}E=_re(T,S=vre(S,T),E);var F=this._tmsResource.getDerivedResource({url:"{z}/{x}/{reverseY}."+w});p.resolve({url:F,tilingScheme:T,rectangle:S,tileWidth:O,tileHeight:C,minimumLevel:E,maximumLevel:A,tileDiscardPolicy:y.tileDiscardPolicy,credit:y.credit})},gre.prototype._metadataFailure=function(e){var t=this._options,n=Object(r.a)(t.fileExtension,"png"),i=Object(r.a)(t.tileWidth,256),a=Object(r.a)(t.tileHeight,256),s=t.maximumLevel,c=Object(o.a)(t.tilingScheme)?t.tilingScheme:new Kc({ellipsoid:t.ellipsoid}),l=Object(r.a)(t.rectangle,c.rectangle),u=_re(c,l=vre(l,c),t.maximumLevel),h=this._tmsResource.getDerivedResource({url:"{z}/{x}/{reverseY}."+n});this._deferred.resolve({url:h,tilingScheme:c,rectangle:l,tileWidth:i,tileHeight:a,minimumLevel:u,maximumLevel:s,tileDiscardPolicy:t.tileDiscardPolicy,credit:t.credit})};var bre=gre;function yre(e){if(e=Object(r.a)(e,{}),!Object(o.a)(e.url))throw new a.a("options.url is required.");if(!Object(o.a)(e.channel))throw new a.a("options.channel is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=1.9,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=e.url,n=Object(r.a)(e.path,"/default_map"),i=_t.a.createIfNeeded(t).getDerivedResource({url:"/"===n[0]?n.substring(1):n});i.appendForwardSlash(),this._resource=i,this._url=t,this._path=n,this._tileDiscardPolicy=e.tileDiscardPolicy,this._channel=e.channel,this._requestType="ImageryMaps",this._credit=new yn('<a href="http://www.google.com/enterprise/mapsearth/products/earthenterprise.html"><img src="'+yre.logoUrl+'" title="Google Imagery"/></a>'),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new wn.a,this._ready=!1,this._readyPromise=Yt.a.defer();var s,c=i.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),l=this;function u(t){var n,i,r;try{n=JSON.parse(t)}catch(c){n=JSON.parse(t.replace(/([\[\{,])[\n\r ]*([A-Za-z0-9]+)[\n\r ]*:/g,'$1"$2":'))}for(var a=0;a<n.layers.length;a++)if(n.layers[a].id===l._channel){i=n.layers[a];break}if(!Object(o.a)(i))throw r="Could not find layer with channel (id) of "+l._channel+".",s=$c.handleError(s,l,l._errorEvent,r,void 0,void 0,void 0,d),new de.a(r);if(!Object(o.a)(i.version))throw r="Could not find a version in channel (id) "+l._channel+".",s=$c.handleError(s,l,l._errorEvent,r,void 0,void 0,void 0,d),new de.a(r);if(l._version=i.version,Object(o.a)(n.projection)&&"flat"===n.projection)l._tilingScheme=new Lt({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new Se(-Math.PI,-Math.PI,Math.PI,Math.PI),ellipsoid:e.ellipsoid});else{if(Object(o.a)(n.projection)&&"mercator"!==n.projection)throw r="Unsupported projection "+n.projection+".",s=$c.handleError(s,l,l._errorEvent,r,void 0,void 0,void 0,d),new de.a(r);l._tilingScheme=new Kc({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid})}l._ready=!0,l._readyPromise.resolve(!0),$c.handleSuccess(s)}function h(e){var t="An error occurred while accessing "+c.url+".";s=$c.handleError(s,l,l._errorEvent,t,void 0,void 0,void 0,d),l._readyPromise.reject(new de.a(t))}function d(){var e=c.fetchText();Object(Yt.a)(e,u,h)}d()}Object.defineProperties(yre.prototype,{url:{get:function(){return this._url}},path:{get:function(){return this._path}},proxy:{get:function(){return this._resource.proxy}},channel:{get:function(){return this._channel}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._maximumLevel}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return 0}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},version:{get:function(){if(!this._ready)throw new a.a("version must not be called before the imagery provider is ready.");return this._version}},requestType:{get:function(){if(!this._ready)throw new a.a("requestType must not be called before the imagery provider is ready.");return this._requestType}},rectangle:{get:function(){if(!this._ready)throw new a.a("rectangle must not be called before the imagery provider is ready.");return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}}),yre.prototype.getTileCredits=function(e,t,n){},yre.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");var r=this._resource.getDerivedResource({url:"query",request:i,queryParameters:{request:this._requestType,channel:this._channel,version:this._version,x:e,y:t,z:n+1}});return Lee.loadImage(this,r)},yre.prototype.pickFeatures=function(e,t,n,i,r){},yre._logoUrl=void 0,Object.defineProperties(yre,{logoUrl:{get:function(){return Object(o.a)(yre._logoUrl)||(yre._logoUrl=At("Assets/Images/google_earth_credit.png")),yre._logoUrl},set:function(e){i.a.defined("value",e),yre._logoUrl=e}}});var wre=yre,Ore=/\/$/,Cre=new yn('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function Ere(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).mapId;if(!Object(o.a)(t))throw new a.a("options.mapId is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var n=_t.a.createIfNeeded(Object(r.a)(e.url,"https://{s}.tiles.mapbox.com/v4/")),i=qC.getAccessToken(e.accessToken);this._mapId=t,this._accessToken=i,this._accessTokenErrorCredit=yn.clone(qC.getErrorCredit(e.accessToken));var s=Object(r.a)(e.format,"png");/\./.test(s)||(s="."+s),this._format=s;var c,l=n.getUrlComponent();Ore.test(l)||(l+="/"),l+=t+"/{z}/{x}/{y}"+this._format,n.url=l,n.setQueryParameters({access_token:i}),Object(o.a)(e.credit)?"string"===typeof(c=e.credit)&&(c=new yn(c)):c=Cre,this._resource=n,this._imageryProvider=new mre({url:n,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(Ere.prototype,{url:{get:function(){return this._imageryProvider.url}},ready:{get:function(){return this._imageryProvider.ready}},readyPromise:{get:function(){return this._imageryProvider.readyPromise}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}}),Ere.prototype.getTileCredits=function(e,t,n){if(Object(o.a)(this._accessTokenErrorCredit))return[this._accessTokenErrorCredit]},Ere.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)},Ere.prototype.pickFeatures=function(e,t,n,i,r){return this._imageryProvider.pickFeatures(e,t,n,i,r)},Ere._defaultCredit=Cre;var Are=Ere;function xre(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=_t.a.createIfNeeded(e.url),n=Object(r.a)(e.rectangle,Se.MAX_VALUE),i=new Lt({rectangle:n,numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=i,this._resource=t,this._image=void 0,this._texture=void 0,this._tileWidth=0,this._tileHeight=0,this._errorEvent=new wn.a,this._ready=!1,this._readyPromise=Yt.a.defer();var s=e.credit;"string"===typeof s&&(s=new yn(s)),this._credit=s;var c,l=this;function u(e){l._image=e,l._tileWidth=e.width,l._tileHeight=e.height,l._ready=!0,l._readyPromise.resolve(!0),$c.handleSuccess(l._errorEvent)}function h(e){var n="Failed to load image "+t.url+".";c=$c.handleError(c,l,l._errorEvent,n,0,0,0,d,e),l._readyPromise.reject(new de.a(n))}function d(){Lee.loadImage(null,t).then(u).otherwise(h)}d()}Object.defineProperties(xre.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return 0}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return 0}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.")}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise.promise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}}),xre.prototype.getTileCredits=function(e,t,n){},xre.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");return this._image},xre.prototype.pickFeatures=function(e,t,n,i,r){};var Tre=xre;function Sre(e){for(var t=[],n=e.features,i=0;i<n.length;++i){var r=n[i],a=new Pee;if(a.data=r,a.properties=r.properties,a.configureNameFromProperties(r.properties),a.configureDescriptionFromProperties(r.properties),Object(o.a)(r.geometry)&&"Point"===r.geometry.type){var s=r.geometry.coordinates[0],c=r.geometry.coordinates[1];a.position=R.fromDegrees(s,c)}t.push(a)}return t}function Dre(e){var t=e.documentElement;if("MultiFeatureCollection"===t.localName&&"http://www.mapinfo.com/mxp"===t.namespaceURI)return function(e){for(var t=[],n=e.documentElement.getElementsByTagNameNS("http://www.mapinfo.com/mxp","Feature"),i=0;i<n.length;++i){for(var r=n[i],o={},a=r.getElementsByTagNameNS("http://www.mapinfo.com/mxp","Val"),s=0;s<a.length;++s){var c=a[s];if(c.hasAttribute("ref")){var l=c.getAttribute("ref"),u=c.textContent.trim();o[l]=u}}var h=new Pee;h.data=r,h.properties=o,h.configureNameFromProperties(o),h.configureDescriptionFromProperties(o),t.push(h)}return t}(e);if("FeatureInfoResponse"===t.localName&&"http://www.esri.com/wms"===t.namespaceURI)return function(e){var t,n=e.documentElement,i=[],r=n.getElementsByTagNameNS("*","FIELDS");if(r.length>0)for(var o=0;o<r.length;++o){var a=r[o];t={};for(var s=a.attributes,c=0;c<s.length;++c){var l=s[c];t[l.name]=l.value}i.push(Ire(a,t))}else for(var u=n.getElementsByTagNameNS("*","FeatureInfo"),h=0;h<u.length;++h){var d=u[h];t={};for(var f=d.childNodes,p=0;p<f.length;++p){var m=f[p];m.nodeType===Node.ELEMENT_NODE&&(t[m.localName]=m.textContent)}i.push(Ire(d,t))}return i}(e);if("FeatureCollection"===t.localName&&"http://www.opengis.net/wfs"===t.namespaceURI)return function(e){for(var t=[],n=e.documentElement.getElementsByTagNameNS("http://www.opengis.net/gml","featureMember"),i=0;i<n.length;++i){var r=n[i],o={};Pre(r,o),t.push(Ire(r,o))}return t}(e);if("ServiceExceptionReport"===t.localName)throw new de.a((new XMLSerializer).serializeToString(t));return"msGMLOutput"===t.localName?function(e){for(var t,n=[],i=e.documentElement.childNodes,r=0;r<i.length;r++)if(i[r].nodeType===Node.ELEMENT_NODE){t=i[r];break}if(!Object(o.a)(t))throw new de.a("Unable to find first child of the feature info xml document");for(var a=t.childNodes,s=0;s<a.length;++s){var c=a[s];if(c.nodeType===Node.ELEMENT_NODE){var l={};Pre(c,l),n.push(Ire(c,l))}}return n}(e):function(e){var t=(new XMLSerializer).serializeToString(e),n=document.createElement("div"),i=document.createElement("pre");i.textContent=t,n.appendChild(i);var r=new Pee;return r.data=e,r.description=n.innerHTML,[r]}(e)}function Pre(e,t){for(var n=!0,i=0;i<e.childNodes.length;++i){var r=e.childNodes[i];r.nodeType===Node.ELEMENT_NODE&&(n=!1),"Point"!==r.localName&&"LineString"!==r.localName&&"Polygon"!==r.localName&&"boundedBy"!==r.localName&&(r.hasChildNodes()&&Pre(r,t)&&(t[r.localName]=r.textContent))}return n}function Ire(e,t){var n=new Pee;return n.data=e,n.properties=t,n.configureNameFromProperties(t),n.configureDescriptionFromProperties(t),n}var Mre=/<body>\s*<\/body>/im,Rre=/<ServiceExceptionReport([\s\S]*)<\/ServiceExceptionReport>/im,Lre=/<title>([\s\S]*)<\/title>/im;function jre(e){if(!Mre.test(e)&&!Rre.test(e)){var t,n=Lre.exec(e);n&&n.length>1&&(t=n[1]);var i=new Pee;return i.name=t,i.description=e,i.data=e,[i]}}var Fre=function(e,t,n){if(!Object(o.a)(e))throw new a.a("type is required.");if(this.type=e,!Object(o.a)(t))if("json"===e)t="application/json";else if("xml"===e)t="text/xml";else if("html"===e)t="text/html";else{if("text"!==e)throw new a.a('format is required when type is not "json", "xml", "html", or "text".');t="text/plain"}if(this.format=t,!Object(o.a)(n))if("json"===e)n=Sre;else if("xml"===e)n=Dre;else if("html"===e)n=jre;else{if("text"!==e)throw new a.a('callback is required when type is not "json", "xml", "html", or "text".');n=jre}this.callback=n};function Nre(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.typeOf.object("options.clock",e.clock),i.a.typeOf.object("options.times",e.times),i.a.typeOf.func("options.requestImageFunction",e.requestImageFunction),i.a.typeOf.func("options.reloadFunction",e.reloadFunction),this._tileCache={},this._tilesRequestedForInterval=[];var t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}function zre(e,t,n){return e+"-"+t+"-"+n}function kre(e){var t=e._times;if(Object(o.a)(t)){var n=e._clock,i=n.currentTime,r=n.canAnimate&&n.shouldAnimate,a=n.multiplier;if(r||0===a){var s,c=t.indexOf(i);if(!(c<0)){var l=t.get(c);return a>0?(s=hr.secondsDifference(l.stop,i),++c):(s=hr.secondsDifference(l.start,i),--c),s/=a,c>=0&&s<=5?t.get(c):void 0}}}}function Bre(e,t,n){var i=e._times.indexOf(n.start),r=e._tileCache,a=r[i];Object(o.a)(a)||(a=r[i]={});var s=t.key;if(Object(o.a)(a[s]))return!0;var c=function(e){var t=e.split("-");if(3===t.length)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}(s),l=new Ac.a({throttle:!0,throttleByServer:!0,type:Tc.a.IMAGERY,priorityFunction:t.priorityFunction}),u=e._requestImageFunction(c.x,c.y,c.level,l,n);return!!Object(o.a)(u)&&(a[s]={promise:u,request:l},!0)}Object.defineProperties(Nre.prototype,{clock:{get:function(){return this._clock},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}}),Nre.prototype.getFromCache=function(e,t,n,i){var r,a=zre(e,t,n),s=this._tileCache[this._currentIntervalIndex];if(Object(o.a)(s)&&Object(o.a)(s[a])){var c=s[a];r=c.promise.otherwise((function(e){throw i.state=c.request.state,e})),delete s[a]}return r},Nre.prototype.checkApproachingInterval=function(e,t,n,i){var r=zre(e,t,n),a=this._tilesRequestedForInterval,s=kre(this),c={key:r,priorityFunction:i.priorityFunction};Object(o.a)(s)&&Bre(this,c,s)||a.push(c),a.length>=512&&a.splice(0,256)},Nre.prototype._clockOnTick=function(e){var t=e.currentTime,n=this._times.indexOf(t),i=this._currentIntervalIndex;if(n!==i){var r=this._tileCache[i];for(var a in r)r.hasOwnProperty(a)&&r[a].request.cancel();return delete this._tileCache[i],this._tilesRequestedForInterval=[],this._currentIntervalIndex=n,void this._reloadFunction()}var s=kre(this);if(Object(o.a)(s))for(var c=this._tilesRequestedForInterval,l=!0;l&&0!==c.length;){var u=c.pop();(l=Bre(this,u,s))||c.push(u)}};var Hre=Nre;function Vre(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");if(!Object(o.a)(e.layers))throw new a.a("options.layers is required.");if(Object(o.a)(e.times)&&!Object(o.a)(e.clock))throw new a.a("options.times was specified, so options.clock is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=_t.a.createIfNeeded(e.url),n=t.clone();t.setQueryParameters(Vre.DefaultParameters,!0),n.setQueryParameters(Vre.GetFeatureInfoDefaultParameters,!0),Object(o.a)(e.parameters)&&t.setQueryParameters(Wre(e.parameters)),Object(o.a)(e.getFeatureInfoParameters)&&n.setQueryParameters(Wre(e.getFeatureInfoParameters));var i=this;this._reload=void 0,Object(o.a)(e.times)&&(this._timeDynamicImagery=new Hre({clock:e.clock,times:e.times,requestImageFunction:function(e,t,n,r,o){return Ure(i,e,t,n,r,o)},reloadFunction:function(){Object(o.a)(i._reload)&&i._reload()}}));var s={};s.layers=e.layers,s.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",s.width="{width}",s.height="{height}",parseFloat(t.queryParameters.version)>=1.3?s.crs=Object(r.a)(e.crs,e.tilingScheme&&e.tilingScheme.projection instanceof Vs?"EPSG:3857":"CRS:84"):s.srs=Object(r.a)(e.srs,e.tilingScheme&&e.tilingScheme.projection instanceof Vs?"EPSG:3857":"EPSG:4326"),t.setQueryParameters(s,!0),n.setQueryParameters(s,!0);var c={query_layers:e.layers,x:"{i}",y:"{j}",info_format:"{format}"};n.setQueryParameters(c,!0),this._resource=t,this._pickFeaturesResource=n,this._layers=e.layers,this._tileProvider=new mre({url:t,pickFeaturesUrl:n,tilingScheme:Object(r.a)(e.tilingScheme,new Lt({ellipsoid:e.ellipsoid})),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:Object(r.a)(e.getFeatureInfoFormats,Vre.DefaultGetFeatureInfoFormats),enablePickFeatures:e.enablePickFeatures})}function Ure(e,t,n,i,r,a){var s=Object(o.a)(a)?a.data:void 0,c=e._tileProvider;return Object(o.a)(s)&&c._resource.setQueryParameters(s),c.requestImage(t,n,i,r)}function Wre(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}Object.defineProperties(Vre.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},ready:{get:function(){return this._tileProvider.ready}},readyPromise:{get:function(){return this._tileProvider.readyPromise}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}}}),Vre.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)},Vre.prototype.requestImage=function(e,t,n,i){var r,a,s=this._timeDynamicImagery;return Object(o.a)(s)&&(a=s.currentInterval,r=s.getFromCache(e,t,n,i)),Object(o.a)(r)||(r=Ure(this,e,t,n,i,a)),Object(o.a)(r)&&Object(o.a)(s)&&s.checkApproachingInterval(e,t,n,i),r},Vre.prototype.pickFeatures=function(e,t,n,i,r){var a=this._timeDynamicImagery;return function(e,t,n,i,r,a,s){var c=Object(o.a)(s)?s.data:void 0,l=e._tileProvider;return Object(o.a)(c)&&l._pickFeaturesResource.setQueryParameters(c),l.pickFeatures(t,n,i,r,a)}(this,e,t,n,i,r,Object(o.a)(a)?a.currentInterval:void 0)},Vre.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"}),Vre.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"}),Vre.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new Fre("json","application/json")),Object.freeze(new Fre("xml","text/xml")),Object.freeze(new Fre("text","text/html"))]);var Gre=Vre,qre=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function Yre(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url))throw new a.a("options.url is required.");if(!Object(o.a)(e.layer))throw new a.a("options.layer is required.");if(!Object(o.a)(e.style))throw new a.a("options.style is required.");if(!Object(o.a)(e.tileMatrixSetID))throw new a.a("options.tileMatrixSetID is required.");if(Object(o.a)(e.times)&&!Object(o.a)(e.clock))throw new a.a("options.times was specified, so options.clock is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var t=_t.a.createIfNeeded(e.url),n=e.style,i=e.tileMatrixSetID;if(t.url.indexOf("{")>=0){var s={style:n,Style:n,TileMatrixSet:i};t.setTemplateValues(s),this._useKvp=!1}else t.setQueryParameters(qre),this._useKvp=!0;this._resource=t,this._layer=e.layer,this._style=n,this._tileMatrixSetID=i,this._tileMatrixLabels=e.tileMatrixLabels,this._format=Object(r.a)(e.format,"image/jpeg"),this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=Object(o.a)(e.tilingScheme)?e.tilingScheme:new Kc({ellipsoid:e.ellipsoid}),this._tileWidth=Object(r.a)(e.tileWidth,256),this._tileHeight=Object(r.a)(e.tileHeight,256),this._minimumLevel=Object(r.a)(e.minimumLevel,0),this._maximumLevel=e.maximumLevel,this._rectangle=Object(r.a)(e.rectangle,this._tilingScheme.rectangle),this._dimensions=e.dimensions;var c=this;this._reload=void 0,Object(o.a)(e.times)&&(this._timeDynamicImagery=new Hre({clock:e.clock,times:e.times,requestImageFunction:function(e,t,n,i,r){return $re(c,e,t,n,i,r)},reloadFunction:function(){Object(o.a)(c._reload)&&c._reload()}})),this._readyPromise=Yt.a.resolve(!0);var l=this._tilingScheme.positionToTileXY(Se.southwest(this._rectangle),this._minimumLevel),u=this._tilingScheme.positionToTileXY(Se.northeast(this._rectangle),this._minimumLevel),h=(Math.abs(u.x-l.x)+1)*(Math.abs(u.y-l.y)+1);if(h>4)throw new a.a("The imagery provider's rectangle and minimumLevel indicate that there are "+h+" tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.");this._errorEvent=new wn.a;var d=e.credit;this._credit="string"===typeof d?new yn(d):d,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():Object(o.a)(this._subdomains)&&this._subdomains.length>0?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function $re(e,t,n,i,r,a){var s,c=e._tileMatrixLabels,l=Object(o.a)(c)?c[i]:i.toString(),u=e._subdomains,h=e._dimensions,d=Object(o.a)(a)?a.data:void 0;if(e._useKvp){var f={};f.tilematrix=l,f.layer=e._layer,f.style=e._style,f.tilerow=n,f.tilecol=t,f.tilematrixset=e._tileMatrixSetID,f.format=e._format,Object(o.a)(h)&&(f=Object(Wf.a)(f,h)),Object(o.a)(d)&&(f=Object(Wf.a)(f,d)),s=e._resource.getDerivedResource({queryParameters:f,request:r})}else{var p={TileMatrix:l,TileRow:n.toString(),TileCol:t.toString(),s:u[(t+n+i)%u.length]};(s=e._resource.getDerivedResource({request:r})).setTemplateValues(p),Object(o.a)(h)&&s.setTemplateValues(h),Object(o.a)(d)&&s.setTemplateValues(d)}return Lee.loadImage(e,s)}Object.defineProperties(Yre.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},format:{get:function(){return this._format}},ready:{value:!0},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,Object(o.a)(this._reload)&&this._reload())}}}),Yre.prototype.getTileCredits=function(e,t,n){},Yre.prototype.requestImage=function(e,t,n,i){var r,a,s=this._timeDynamicImagery;return Object(o.a)(s)&&(a=s.currentInterval,r=s.getFromCache(e,t,n,i)),Object(o.a)(r)||(r=$re(this,e,t,n,i,a)),Object(o.a)(r)&&Object(o.a)(s)&&s.checkApproachingInterval(e,t,n,i),r},Yre.prototype.pickFeatures=function(e,t,n,i,r){};var Xre=Yre;function Kre(e){return function(t){return new e(t)}}var Qre={ARCGIS_MAPSERVER:Kre(Nee),BING:Kre(Qee),GOOGLE_EARTH:Kre(wre),MAPBOX:Kre(Are),SINGLE_TILE:Kre(Tre),TMS:Kre(bre),URL_TEMPLATE:Kre(mre),WMS:Kre(Gre),WMTS:Kre(Xre)};function Zre(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).assetId;i.a.typeOf.number("options.assetId",t),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this._ready=!1,this._tileCredits=void 0,this._errorEvent=new wn.a;var n=this,a=g_._createEndpointResource(t,e),s=e.assetId.toString()+e.accessToken+e.server,c=Zre._endpointCache[s];Object(o.a)(c)||(c=a.fetchJson(),Zre._endpointCache[s]=c),this._readyPromise=c.then((function(e){if("IMAGERY"!==e.type)return Yt.a.reject(new de.a("Cesium ion asset "+t+" is not an imagery asset."));var i,r=e.externalType;if(Object(o.a)(r)){var s=Qre[r];if(!Object(o.a)(s))return Yt.a.reject(new de.a("Unrecognized Cesium ion imagery type: "+r));i=s(e.options)}else i=new bre({url:new g_(e,a)});return n._tileCredits=g_.getCreditsFromEndpoint(e,a),i.errorEvent.addEventListener((function(e){e.provider=n,n._errorEvent.raiseEvent(e)})),n._imageryProvider=i,i.readyPromise.then((function(){return n._ready=!0,!0}))}))}Object.defineProperties(Zre.prototype,{ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},rectangle:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._imageryProvider.rectangle}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._imageryProvider.tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){if(!this._ready)throw new a.a("credit must not be called before the imagery provider is ready.");return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){if(!this._ready)throw new a.a("hasAlphaChannel must not be called before the imagery provider is ready.");return this._imageryProvider.hasAlphaChannel},proxy:{get:function(){}}}}),Zre.prototype.getTileCredits=function(e,t,n){if(!this._ready)throw new a.a("getTileCredits must not be called before the imagery provider is ready.");var i=this._imageryProvider.getTileCredits(e,t,n);return Object(o.a)(i)?this._tileCredits.concat(i):this._tileCredits},Zre.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");return this._imageryProvider.requestImage(e,t,n,i)},Zre.prototype.pickFeatures=function(e,t,n,i,r){if(!this._ready)throw new a.a("pickFeatures must not be called before the imagery provider is ready.");return this._imageryProvider.pickFeatures(e,t,n,i,r)},Zre._endpointCache={};var Jre=Zre,eoe=Object.freeze({AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4});var toe=function(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.style,eoe.AERIAL);return new Jre({assetId:t})};var noe;function ioe(e){var t=document.createElement("span");return t.textContent=e,t.className="cesium-credit-delimiter",t}function roe(e,t){if(Object(o.a)(t)){var n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function ooe(e,t,n,i){for(var r=e.childNodes,a=-1,s=0;s<t.length;++s){var c=t[s];if(Object(o.a)(c)){if(a=s,Object(o.a)(n)&&(a*=2,s>0)){var l=a-1;if(r.length<=l)e.appendChild(ioe(n));else{var u=r[l];"cesium-credit-delimiter"!==u.className&&e.replaceChild(ioe(n),u)}}var h=c.element;if(r.length<=a)e.appendChild(roe(h,i));else{var d=r[a];d._creditId!==c._id&&e.replaceChild(roe(h,i),d)}}}for(++a;a<r.length;)e.removeChild(r[a])}function aoe(e,t){var n=e+" {";for(var i in t)t.hasOwnProperty(i)&&(n+=i+": "+t[i]+"; ");return n+=" }\n"}function soe(e,t,n){i.a.defined("container",e);var o=this;n=Object(r.a)(n,document.body);var a=document.createElement("div");a.className="cesium-credit-lightbox-overlay",n.appendChild(a);var s=document.createElement("div");function c(e){s.contains(e.target)||o.hideLightbox()}s.className="cesium-credit-lightbox",a.appendChild(s),a.addEventListener("click",c,!1);var l=document.createElement("div");l.className="cesium-credit-lightbox-title",l.textContent="Data provided by:",s.appendChild(l);var u=document.createElement("a");u.onclick=this.hideLightbox.bind(this),u.innerHTML="×",u.className="cesium-credit-lightbox-close",s.appendChild(u);var h=document.createElement("ul");s.appendChild(h);var d=document.createElement("div");d.className="cesium-credit-logoContainer",d.style.display="inline",e.appendChild(d);var f=document.createElement("div");f.className="cesium-credit-textContainer",f.style.display="inline",e.appendChild(f);var p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),function(){var e="";e+=aoe(".cesium-credit-lightbox-overlay",{display:"none","z-index":"1",position:"absolute",top:"0",left:"0",width:"100%",height:"100%","background-color":"rgba(80, 80, 80, 0.8)"}),e+=aoe(".cesium-credit-lightbox",{"background-color":"#303336",color:"#ffffff",position:"relative","min-height":"100px",margin:"auto"}),e+=aoe(".cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited",{color:"#ffffff"}),e+=aoe(".cesium-credit-lightbox > ul > li a:hover",{color:"#48b"}),e+=aoe(".cesium-credit-lightbox.cesium-credit-lightbox-expanded",{border:"1px solid #444","border-radius":"5px","max-width":"370px"}),e+=aoe(".cesium-credit-lightbox.cesium-credit-lightbox-mobile",{height:"100%",width:"100%"}),e+=aoe(".cesium-credit-lightbox-title",{padding:"20px 20px 0 20px"}),e+=aoe(".cesium-credit-lightbox-close",{"font-size":"18pt",cursor:"pointer",position:"absolute",top:"0",right:"6px",color:"#ffffff"}),e+=aoe(".cesium-credit-lightbox-close:hover",{color:"#48b"}),e+=aoe(".cesium-credit-lightbox > ul",{margin:"0",padding:"12px 20px 12px 40px","font-size":"13px"}),e+=aoe(".cesium-credit-lightbox > ul > li",{"padding-bottom":"6px"}),e+=aoe(".cesium-credit-lightbox > ul > li *",{padding:"0",margin:"0"}),e+=aoe(".cesium-credit-expand-link",{"padding-left":"5px",cursor:"pointer","text-decoration":"underline",color:"#ffffff"}),e+=aoe(".cesium-credit-expand-link:hover",{color:"#48b"}),e+=aoe(".cesium-credit-text",{color:"#ffffff"}),e+=aoe(".cesium-credit-textContainer *, .cesium-credit-logoContainer *",{display:"inline"});var t=document.head,n=document.createElement("style");n.innerHTML=e,t.insertBefore(n,t.firstChild)}();var m=yn.clone(soe.cesiumCredit);this._delimiter=Object(r.a)(t," \u2022 "),this._screenContainer=f,this._cesiumCreditContainer=d,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=s,this._creditList=h,this._lightbox=a,this._hideLightbox=c,this._expandLink=p,this._expanded=!1,this._defaultCredits=[],this._cesiumCredit=m,this._previousCesiumCredit=void 0,this._currentCesiumCredit=m,this._currentFrameCredits={screenCredits:new sl,lightboxCredits:new sl},this._defaultCredit=void 0,this.viewport=n,this.container=e}function coe(){if(!Object(o.a)(noe)){var e=At("Assets/Images/ion-credit.png");if(0!==e.indexOf("http://")&&0!==e.indexOf("https://"))e=new u_.a(e).getPath();noe=new yn('<a href="https://cesium.com/" target="_blank"><img src="'+e+'" title="Cesium ion"/></a>',!0)}return soe._cesiumCreditInitialized||(soe._cesiumCredit=noe,soe._cesiumCreditInitialized=!0),noe}soe.prototype.addCredit=function(e){if(i.a.defined("credit",e),e._isIon)return Object(o.a)(this._defaultCredit)||(this._defaultCredit=yn.clone(coe())),void(this._currentCesiumCredit=this._defaultCredit);e.showOnScreen?this._currentFrameCredits.screenCredits.set(e.id,e):this._currentFrameCredits.lightboxCredits.set(e.id,e)},soe.prototype.addDefaultCredit=function(e){i.a.defined("credit",e);var t=this._defaultCredits;(function(e,t){for(var n=e.length,i=0;i<n;i++){var r=e[i];if(yn.equals(r,t))return!0}return!1})(t,e)||t.push(e)},soe.prototype.removeDefaultCredit=function(e){i.a.defined("credit",e);var t=this._defaultCredits,n=t.indexOf(e);-1!==n&&t.splice(n,1)},soe.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0},soe.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1},soe.prototype.update=function(){this._expanded&&function(e){var t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<576?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=Math.floor(.5*(i-t.clientHeight))+"px"),e._lastViewportWidth=n),n>=576&&i!==e._lastViewportHeight&&(t.style.marginTop=Math.floor(.5*(i-t.clientHeight))+"px",e._lastViewportHeight=i)}(this)},soe.prototype.beginFrame=function(){var e=this._currentFrameCredits,t=e.screenCredits;t.removeAll();for(var n=this._defaultCredits,i=0;i<n.length;++i){var r=n[i];t.set(r.id,r)}e.lightboxCredits.removeAll(),yn.equals(soe.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=yn.clone(soe.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit},soe.prototype.endFrame=function(){var e=this._currentFrameCredits.screenCredits.values;ooe(this._screenContainer,e,this._delimiter,void 0);var t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",ooe(this._creditList,t,void 0,"li"),function(e){var t=e._previousCesiumCredit,n=e._currentCesiumCredit;yn.equals(n,t)||(Object(o.a)(t)&&e._cesiumCreditContainer.removeChild(t.element),Object(o.a)(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}(this)},soe.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),Ks(this)},soe.prototype.isDestroyed=function(){return!1},soe._cesiumCredit=void 0,soe._cesiumCreditInitialized=!1,Object.defineProperties(soe,{cesiumCredit:{get:function(){return coe(),soe._cesiumCredit},set:function(e){soe._cesiumCredit=e,soe._cesiumCreditInitialized=!0}}});var loe=soe;function uoe(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).attributeName,n=e.perInstanceAttribute;if(!Object(o.a)(t))throw new a.a("options.attributeName is required.");Object(o.a)(n)||(n=!1);var i,s=Object(r.a)(e.glslDatatype,"vec3"),c="v_"+t;if("normal"===t||"tangent"===t||"bitangent"===t)i="vec4 getColor() { return vec4(("+c+" + vec3(1.0)) * 0.5, 1.0); }\n";else switch("st"===t&&(s="vec2"),s){case"float":i="vec4 getColor() { return vec4(vec3("+c+"), 1.0); }\n";break;case"vec2":i="vec4 getColor() { return vec4("+c+", 0.0, 1.0); }\n";break;case"vec3":i="vec4 getColor() { return vec4("+c+", 1.0); }\n";break;case"vec4":i="vec4 getColor() { return "+c+"; }\n";break;default:throw new a.a("options.glslDatatype must be float, vec2, vec3, or vec4.")}var l="attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute float batchId;\n"+(n?"":"attribute "+s+" "+t+";\n")+"varying "+s+" "+c+";\nvoid main()\n{\nvec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);\n"+(n?c+" = czm_batchTable_"+t+"(batchId);\n":c+" = "+t+";\n")+"gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}",u="varying "+s+" "+c+";\n"+i+"\nvoid main()\n{\ngl_FragColor = getColor();\n}";this.material=void 0,this.translucent=Object(r.a)(e.translucent,!1),this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,l),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,u),this._renderState=zP.getDefaultRenderState(!1,!1,e.renderState),this._closed=Object(r.a)(e.closed,!1),this._attributeName=t,this._glslDatatype=s}Object.defineProperties(uoe.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}}),uoe.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,uoe.prototype.isTranslucent=zP.prototype.isTranslucent,uoe.prototype.getRenderState=zP.prototype.getRenderState;function hoe(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.camera))throw new a.a("options.camera is required.");this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=Object(r.a)(e.color,Hf.CYAN),this._updateOnChange=Object(r.a)(e.updateOnChange,!0),this.show=Object(r.a)(e.show,!0),this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var doe=new O,foe=new oe,poe=new No,moe=new Zb,goe=new Xb,voe=new Vb,_oe=new kb,boe=new Hf,yoe=[1,1e5];hoe.prototype.update=function(e){if(this.show){var t,n,i=this._planesPrimitives,r=this._outlinePrimitives;if(this._updateOnChange){for(n=i.length,t=0;t<n;++t)r[t]=r[t]&&r[t].destroy(),i[t]=i[t]&&i[t].destroy();i.length=0,r.length=0}if(0===i.length){var a,s,c=this._camera,l=c.frustum;a=l instanceof Zb?moe:l instanceof Xb?goe:l instanceof Vb?voe:_oe,a=l.clone(a);var u=this._frustumSplits;!Object(o.a)(u)||u.length<=1?((u=yoe)[0]=this._camera.frustum.near,u[1]=this._camera.frustum.far,s=1):s=u.length-1;var h=c.positionWC,d=c.directionWC,f=c.upWC,p=c.rightWC;p=O.negate(p,doe);var m=foe;oe.setColumn(m,0,p,m),oe.setColumn(m,1,f,m),oe.setColumn(m,2,d,m);var g=No.fromRotationMatrix(m,poe);for(i.length=r.length=s,t=0;t<s;++t)a.near=u[t],a.far=u[t+1],i[t]=new bL({geometryInstances:new fh({geometry:new by({origin:h,orientation:g,frustum:a,_drawNearPlane:0===t}),attributes:{color:Uf.fromColor(Hf.fromAlpha(this._color,.1,boe))},id:this.id,pickPrimitive:this}),appearance:new bI({translucent:!0,flat:!0}),asynchronous:!1}),r[t]=new bL({geometryInstances:new fh({geometry:new Ay({origin:h,orientation:g,frustum:a,_drawNearPlane:0===t}),attributes:{color:Uf.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1})}for(n=i.length,t=0;t<n;++t)r[t].update(e),i[t].update(e)}},hoe.prototype.isDestroyed=function(){return!1},hoe.prototype.destroy=function(){for(var e=this._planesPrimitives.length,t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return Ks(this)};var woe=hoe;function Ooe(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.length=Object(r.a)(e.length,1e7),this._length=void 0,this.width=Object(r.a)(e.width,2),this._width=void 0,this.show=Object(r.a)(e.show,!0),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=new Ae,this.id=e.id,this._id=void 0,this._primitive=void 0}Ooe.prototype.update=function(e){if(this.show){if(!Object(o.a)(this._primitive)||!Ae.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=Ae.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,Object(o.a)(this._primitive)&&this._primitive.destroy(),0===this.modelMatrix[12]&&0===this.modelMatrix[13]&&0===this.modelMatrix[14]&&(this.modelMatrix[14]=.01);var t=new fh({geometry:new zA({positions:[O.ZERO,O.UNIT_X],width:this.width,vertexFormat:Ij.VERTEX_FORMAT,colors:[Hf.RED,Hf.RED],arcType:tl.NONE}),modelMatrix:Ae.multiplyByUniformScale(this.modelMatrix,this.length,new Ae),id:this.id,pickPrimitive:this}),n=new fh({geometry:new zA({positions:[O.ZERO,O.UNIT_Y],width:this.width,vertexFormat:Ij.VERTEX_FORMAT,colors:[Hf.GREEN,Hf.GREEN],arcType:tl.NONE}),modelMatrix:Ae.multiplyByUniformScale(this.modelMatrix,this.length,new Ae),id:this.id,pickPrimitive:this}),i=new fh({geometry:new zA({positions:[O.ZERO,O.UNIT_Z],width:this.width,vertexFormat:Ij.VERTEX_FORMAT,colors:[Hf.BLUE,Hf.BLUE],arcType:tl.NONE}),modelMatrix:Ae.multiplyByUniformScale(this.modelMatrix,this.length,new Ae),id:this.id,pickPrimitive:this});this._primitive=new bL({geometryInstances:[t,n,i],appearance:new Ij,asynchronous:!1})}this._primitive.update(e)}},Ooe.prototype.isDestroyed=function(){return!1},Ooe.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),Ks(this)};var Coe=Ooe;function Eoe(){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1}var Aoe=oo.supportsTypedArrays()?new Float32Array(12):[],xoe=new O,Toe=new O,Soe=new O,Doe=new O,Poe=new O;Eoe.prototype.update=function(e){if(this._mode=e.mode,e.mode===IR.SCENE3D){var t=e.context,n=e.mapProjection.ellipsoid,i=e.useLogDepth;if(Object(o.a)(this._command)||(this._rs=XI.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new CI({renderState:this._rs,boundingVolume:new gt(O.ZERO,n.maximumRadius),pass:EI.OPAQUE,owner:this})),!Object(o.a)(this._sp)||this._useLogDepth!==i){this._useLogDepth=i;var r=new KM({sources:["attribute vec4 position;\n\nvarying vec4 positionEC;\n\nvoid main()\n{\n positionEC = czm_modelView * position;\n gl_Position = czm_projection * positionEC;\n\n czm_vertexLogDepth();\n}\n"]}),a=new KM({sources:["varying vec4 positionEC;\n\nvoid main()\n{\n vec3 position;\n vec3 direction;\n if (czm_orthographicIn3D == 1.0)\n {\n vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw;\n vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom\n vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top\n position = vec3(mix(minPlane, maxPlane, uv), 0.0);\n direction = vec3(0.0, 0.0, -1.0);\n } \n else \n {\n position = vec3(0.0);\n direction = normalize(positionEC.xyz);\n }\n\n czm_ray ray = czm_ray(position, direction);\n\n vec3 ellipsoid_center = czm_view[3].xyz;\n\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\n if (!czm_isEmpty(intersection))\n {\n gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\n }\n else\n {\n discard;\n }\n\n czm_writeLogDepth();\n}\n"]});if(i){a.sources.push("#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n"),a.defines.push("LOG_DEPTH"),r.defines.push("LOG_DEPTH")}this._sp=LM.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}var s=function(e,t){var n,i,r,o=e.radii,a=t.camera;if(a.frustum instanceof Vb)n=O.ZERO,i=a.rightWC,r=a.upWC;else{var s=a.positionWC,c=O.multiplyComponents(e.oneOverRadii,s,xoe),l=O.normalize(c,Toe),u=O.normalize(O.cross(O.UNIT_Z,c,Soe),Soe),h=O.normalize(O.cross(l,u,Doe),Doe),d=O.magnitude(c),f=Math.sqrt(d*d-1);n=O.multiplyByScalar(l,1/d,xoe);var p=f/d;i=O.multiplyByScalar(u,p,Toe),r=O.multiplyByScalar(h,p,Soe)}var m=O.add(n,r,Poe);O.subtract(m,i,m),O.multiplyComponents(o,m,m),O.pack(m,Aoe,0);var g=O.subtract(n,r,Poe);O.subtract(g,i,g),O.multiplyComponents(o,g,g),O.pack(g,Aoe,3);var v=O.add(n,r,Poe);O.add(v,i,v),O.multiplyComponents(o,v,v),O.pack(v,Aoe,6);var _=O.subtract(n,r,Poe);return O.add(_,i,_),O.multiplyComponents(o,_,_),O.pack(_,Aoe,9),Aoe}(n,e);if(Object(o.a)(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(s);else{var c=new zl({attributes:{position:new kl({componentDatatype:Ds.FLOAT,componentsPerAttribute:3,values:s})},indices:[0,1,2,2,1,3],primitiveType:xl.TRIANGLES});this._va=hR.fromGeometry({context:t,geometry:c,attributeLocations:{position:0},bufferUsage:iR.DYNAMIC_DRAW}),this._command.vertexArray=this._va}}},Eoe.prototype.execute=function(e,t){this._mode===IR.SCENE3D&&this._command.execute(e,t)},Eoe.prototype.isDestroyed=function(){return!1},Eoe.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var Ioe=Eoe;function Moe(){}var Roe=/\bgl_FragDepthEXT\b/,Loe=/\bdiscard\b/;Moe.createDepthOnlyDerivedCommand=function(e,t,n,i){var r,a;return Object(o.a)(i)||(i={}),Object(o.a)(i.depthOnlyCommand)&&(r=i.depthOnlyCommand.shaderProgram,a=i.depthOnlyCommand.renderState),i.depthOnlyCommand=CI.shallowClone(t,i.depthOnlyCommand),Object(o.a)(r)&&i.shaderProgramId===t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=r,i.depthOnlyCommand.renderState=a):(i.depthOnlyCommand.shaderProgram=function(e,t){var n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(!Object(o.a)(n)){var i,r=t._attributeLocations,a=t.fragmentShaderSource,s=!1,c=a.sources,l=c.length;for(i=0;i<l;++i)if(Roe.test(c[i])||Loe.test(c[i])){s=!0;break}var u=!1,h=a.defines;for(l=h.length,i=0;i<l;++i)if("LOG_DEPTH"===h[i]){u=!0;break}s||u?!s&&u&&(a=new KM({defines:["LOG_DEPTH"],sources:["#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\nvoid main() \n{ \n gl_FragColor = vec4(1.0); \n czm_writeLogDepth(); \n} \n"]})):a=new KM({sources:["void main() \n{ \n gl_FragColor = vec4(1.0); \n} \n"]}),n=e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:r})}return n}(n,t.shaderProgram),i.depthOnlyCommand.renderState=function(e,t){var n=e._depthOnlyRenderStateCache,i=n[t.id];if(!Object(o.a)(i)){var r=XI.getState(t);r.depthMask=!0,r.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i=XI.fromCache(r),n[t.id]=i}return i}(e,t.renderState),i.shaderProgramId=t.shaderProgram.id),i};var joe=/\s+czm_writeLogDepth\(/,Foe=/\s+czm_vertexLogDepth\(/,Noe=/\s*#extension\s+GL_EXT_frag_depth\s*:\s*enable/;Moe.createLogDepthCommand=function(e,t,n){var i;return Object(o.a)(n)||(n={}),Object(o.a)(n.command)&&(i=n.command.shaderProgram),n.command=CI.shallowClone(e,n.command),Object(o.a)(i)&&n.shaderProgramId===e.shaderProgram.id?n.command.shaderProgram=i:(n.command.shaderProgram=function(e,t){var n=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(!Object(o.a)(n)){var i,r=t._attributeLocations,a=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();a.defines=Object(o.a)(a.defines)?a.defines.slice(0):[],a.defines.push("LOG_DEPTH"),s.defines=Object(o.a)(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");var c=!1,l=a.sources,u=l.length;for(i=0;i<u;++i)if(Foe.test(l[i])){c=!0;break}if(!c){for(i=0;i<u;++i)l[i]=KM.replaceMain(l[i],"czm_log_depth_main");"\n\nvoid main() \n{ \n czm_log_depth_main(); \n czm_vertexLogDepth(); \n} \n",l.push("\n\nvoid main() \n{ \n czm_log_depth_main(); \n czm_vertexLogDepth(); \n} \n")}for(u=(l=s.sources).length,c=!1,i=0;i<u;++i)joe.test(l[i])&&(c=!0);-1!==s.defines.indexOf("LOG_DEPTH_WRITE")&&(c=!0);var h=!0;for(i=0;i<u;++i)Noe.test(l[i])&&(h=!1);var d="";if(h&&(d+="#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n"),!c){for(i=0;i<u;i++)l[i]=KM.replaceMain(l[i],"czm_log_depth_main");d+="\nvoid main() \n{ \n czm_log_depth_main(); \n czm_writeLogDepth(); \n} \n"}l.push(d),n=e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:a,fragmentShaderSource:s,attributeLocations:r})}return n}(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id),n},Moe.createPickDerivedCommand=function(e,t,n,i){var r,a;return Object(o.a)(i)||(i={}),Object(o.a)(i.pickCommand)&&(r=i.pickCommand.shaderProgram,a=i.pickCommand.renderState),i.pickCommand=CI.shallowClone(t,i.pickCommand),Object(o.a)(r)&&i.shaderProgramId===t.shaderProgram.id?(i.pickCommand.shaderProgram=r,i.pickCommand.renderState=a):(i.pickCommand.shaderProgram=function(e,t,n){var i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(!Object(o.a)(i)){for(var r=t._attributeLocations,a=t.fragmentShaderSource,s=a.sources,c=s.length,l="void main() \n{ \n czm_non_pick_main(); \n if (gl_FragColor.a == 0.0) { \n discard; \n } \n gl_FragColor = "+n+"; \n} \n",u=new Array(c+1),h=0;h<c;++h)u[h]=KM.replaceMain(s[h],"czm_non_pick_main");u[c]=l,a=new KM({sources:u,defines:a.defines}),i=e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:r})}return i}(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=function(e,t){var n=e.picking.pickRenderStateCache,i=n[t.id];if(!Object(o.a)(i)){var r=XI.getState(t);r.blending.enabled=!1,r.depthMask=!0,i=XI.fromCache(r),n[t.id]=i}return i}(e,t.renderState),i.shaderProgramId=t.shaderProgram.id),i},Moe.createHdrCommand=function(e,t,n){var i;return Object(o.a)(n)||(n={}),Object(o.a)(n.command)&&(i=n.command.shaderProgram),n.command=CI.shallowClone(e,n.command),Object(o.a)(i)&&n.shaderProgramId===e.shaderProgram.id?n.command.shaderProgram=i:(n.command.shaderProgram=function(e,t){var n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(!Object(o.a)(n)){var i=t._attributeLocations,r=t.vertexShaderSource.clone(),a=t.fragmentShaderSource.clone();r.defines=Object(o.a)(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),a.defines=Object(o.a)(a.defines)?a.defines.slice(0):[],a.defines.push("HDR"),n=e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:i})}return n}(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id),n};var zoe=Moe;function koe(e){if(!Object(o.a)(e))throw new a.a("scene is required.");this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;var t=this;function n(e){var n=e.alpha;if(!Object(o.a)(n))return t._alpha=void 0,t._beta=void 0,void(t._gamma=void 0);t._alpha=d.toRadians(n),t._beta=d.toRadians(e.beta),t._gamma=d.toRadians(e.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var Boe=new No,Hoe=new No,Voe=new oe;koe.prototype.update=function(){if(Object(o.a)(this._alpha)){Object(o.a)(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma);var e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,n=this._lastGamma-this._gamma;!function(e,t,n,i){var r=e.direction,o=e.right,a=e.up,s=No.fromAxisAngle(r,n,Hoe),c=No.fromAxisAngle(o,i,Boe),l=No.multiply(c,s,c),u=No.fromAxisAngle(a,t,Hoe);No.multiply(u,l,l);var h=oe.fromQuaternion(l,Voe);oe.multiplyByVector(h,o,o),oe.multiplyByVector(h,a,a),oe.multiplyByVector(h,r,r)}(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma}},koe.prototype.isDestroyed=function(){return!1},koe.prototype.destroy=function(){return this._removeListener(),Ks(this)};var Uoe=koe;var Woe="#ifdef WRITE_DEPTH\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n#endif\n#endif\n\nuniform vec3 u_radii;\nuniform vec3 u_oneOverEllipsoidRadiiSquared;\n\nvarying vec3 v_positionEC;\n\nvec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)\n{\n vec3 positionEC = czm_pointAlongRay(ray, intersection);\n vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;\n vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));\n vec3 sphericalNormal = normalize(positionMC / u_radii);\n vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates\n vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordiantes\n\n vec2 st = czm_ellipsoidWgs84TextureCoordinates(sphericalNormal);\n vec3 positionToEyeEC = -positionEC;\n\n czm_materialInput materialInput;\n materialInput.s = st.s;\n materialInput.st = st;\n materialInput.str = (positionMC + u_radii) / u_radii;\n materialInput.normalEC = normalEC;\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\n materialInput.positionToEyeEC = positionToEyeEC;\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef ONLY_SUN_LIGHTING\n return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);\n#else\n return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n\nvoid main()\n{\n // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii\n // in the vertex shader. Only when it is larger than some constant, march along the ray.\n // Otherwise perform one intersection test which will be the common case.\n\n // Test if the ray intersects a sphere with the ellipsoid's maximum radius.\n // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test\n // may cause false negatives. This will discard fragments before marching the ray forward.\n float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;\n vec3 direction = normalize(v_positionEC);\n vec3 ellipsoidCenter = czm_modelView[3].xyz;\n\n float t1 = -1.0;\n float t2 = -1.0;\n\n float b = -2.0 * dot(direction, ellipsoidCenter);\n float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;\n\n float discriminant = b * b - 4.0 * c;\n if (discriminant >= 0.0) {\n t1 = (-b - sqrt(discriminant)) * 0.5;\n t2 = (-b + sqrt(discriminant)) * 0.5;\n }\n\n if (t1 < 0.0 && t2 < 0.0) {\n discard;\n }\n\n float t = min(t1, t2);\n if (t < 0.0) {\n t = 0.0;\n }\n\n // March ray forward to intersection with larger sphere and find\n czm_ray ray = czm_ray(t * direction, direction);\n\n vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);\n\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);\n\n if (czm_isEmpty(intersection))\n {\n discard;\n }\n\n // If the viewer is outside, compute outsideFaceColor, with normals facing outward.\n vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);\n\n // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward.\n vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);\n\n gl_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);\n gl_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);\n\n#ifdef WRITE_DEPTH\n#ifdef GL_EXT_frag_depth\n t = (intersection.start != 0.0) ? intersection.start : intersection.stop;\n vec3 positionEC = czm_pointAlongRay(ray, t);\n vec4 positionCC = czm_projection * vec4(positionEC, 1.0);\n#ifdef LOG_DEPTH\n czm_writeLogDepth(1.0 + positionCC.w);\n#else\n float z = positionCC.z / positionCC.w;\n\n float n = czm_depthRange.near;\n float f = czm_depthRange.far;\n\n gl_FragDepthEXT = (z * (f - n) + f + n) * 0.5;\n#endif\n#endif\n#endif\n}\n",Goe="attribute vec3 position;\n\nuniform vec3 u_radii;\n\nvarying vec3 v_positionEC;\n\nvoid main()\n{\n // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates.\n // Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry,\n // but doing it here allows us to change the radii without rewriting the vertex data, and\n // allows all ellipsoids to reuse the same vertex data.\n vec4 p = vec4(u_radii * position, 1.0);\n\n v_positionEC = (czm_modelView * p).xyz; // position in eye coordinates\n gl_Position = czm_modelViewProjection * p; // position in clip coordinates\n\n // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums\n // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the\n // ellipsoid (does not write depth) that was rendered in the farther frustum.\n //\n // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates\n // artifacts since some fragments can be alpha blended twice. This is solved by only rendering\n // the ellipsoid in the closest frustum to the viewer.\n gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);\n\n czm_vertexLogDepth();\n}\n",qoe={position:0};function Yoe(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.center=O.clone(Object(r.a)(e.center,O.ZERO)),this._center=new O,this.radii=O.clone(e.radii),this._radii=new O,this._oneOverEllipsoidRadiiSquared=new O,this._boundingSphere=new gt,this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._modelMatrix=new Ae,this._computedModelMatrix=new Ae,this.show=Object(r.a)(e.show,!0),this.material=Object(r.a)(e.material,mI.fromType(mI.ColorType)),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=Object(r.a)(e.debugShowBoundingVolume,!1),this.onlySunLighting=Object(r.a)(e.onlySunLighting,!1),this._onlySunLighting=!1,this._depthTestEnabled=Object(r.a)(e.depthTestEnabled,!0),this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new CI({owner:Object(r.a)(e._owner,this)}),this._pickCommand=new CI({owner:Object(r.a)(e._owner,this),pickOnly:!0});var t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}var $oe="#ifdef GL_EXT_frag_depth \n#extension GL_EXT_frag_depth : enable \n#endif \n\n";Yoe.prototype.update=function(e){if(this.show&&e.mode===IR.SCENE3D&&Object(o.a)(this.center)&&Object(o.a)(this.radii)){if(!Object(o.a)(this.material))throw new a.a("this.material must be defined.");var t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;Object(o.a)(this._rs)&&!i||(this._translucent=n,this._rs=XI.fromCache({cull:{enabled:!0,face:FP.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?LP.ALPHA_BLEND:void 0})),Object(o.a)(this._va)||(this._va=function(e){var t=e.cache.ellipsoidPrimitive_vertexArray;if(Object(o.a)(t))return t;var n=Ql.createGeometry(Ql.fromDimensions({dimensions:new O(2,2,2),vertexFormat:Ul.POSITION_ONLY}));return t=hR.fromGeometry({context:e,geometry:n,attributeLocations:qoe,bufferUsage:iR.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}(t));var r=!1,s=this.radii;if(!O.equals(this._radii,s)){O.clone(s,this._radii);var c=this._oneOverEllipsoidRadiiSquared;c.x=1/(s.x*s.x),c.y=1/(s.y*s.y),c.z=1/(s.z*s.z),r=!0}Ae.equals(this.modelMatrix,this._modelMatrix)&&O.equals(this.center,this._center)||(Ae.clone(this.modelMatrix,this._modelMatrix),O.clone(this.center,this._center),Ae.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),r=!0),r&&(O.clone(O.ZERO,this._boundingSphere.center),this._boundingSphere.radius=O.maximumComponent(s),gt.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere));var l=this._material!==this.material;this._material=this.material,this._material.update(t);var u=this.onlySunLighting!==this._onlySunLighting;this._onlySunLighting=this.onlySunLighting;var h=e.useLogDepth,d=this._useLogDepth!==h;this._useLogDepth=h;var f,p,m=this._colorCommand;(l||u||i||d)&&(f=new KM({sources:[Goe]}),p=new KM({sources:[this.material.shaderSource,Woe]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(f.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH"),p.sources.push($oe)),this._sp=LM.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:p,attributeLocations:qoe}),m.vertexArray=this._va,m.renderState=this._rs,m.shaderProgram=this._sp,m.uniformMap=Object(Wf.a)(this._uniforms,this.material._uniforms),m.executeInClosestFrustum=n);var g=e.commandList,v=e.passes;if(v.render&&(m.boundingVolume=this._boundingSphere,m.debugShowBoundingVolume=this.debugShowBoundingVolume,m.modelMatrix=this._computedModelMatrix,m.pass=n?EI.TRANSLUCENT:EI.OPAQUE,g.push(m)),v.pick){var _=this._pickCommand;Object(o.a)(this._pickId)&&this._id===this.id||(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(l||u||!Object(o.a)(this._pickSP)||d)&&(f=new KM({sources:[Goe]}),p=new KM({sources:[this.material.shaderSource,Woe],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(f.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH"),p.sources.push($oe)),this._pickSP=LM.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:f,fragmentShaderSource:p,attributeLocations:qoe}),_.vertexArray=this._va,_.renderState=this._rs,_.shaderProgram=this._pickSP,_.uniformMap=Object(Wf.a)(Object(Wf.a)(this._uniforms,this._pickUniforms),this.material._uniforms),_.executeInClosestFrustum=n),_.boundingVolume=this._boundingSphere,_.modelMatrix=this._computedModelMatrix,_.pass=n?EI.TRANSLUCENT:EI.OPAQUE,g.push(_)}}},Yoe.prototype.isDestroyed=function(){return!1},Yoe.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),Ks(this)};var Xoe=Yoe;function Koe(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=Object(r.a)(e.translucent,!0),n=Object(r.a)(e.aboveGround,!1);this.material=Object(o.a)(e.material)?e.material:mI.fromType(mI.ColorType),this.translucent=Object(r.a)(e.translucent,!0),this._vertexShaderSource=Object(r.a)(e.vertexShaderSource,"attribute vec3 position3DHigh;\nattribute vec3 position3DLow;\nattribute vec2 st;\nattribute float batchId;\n\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n vec4 p = czm_computePosition();\n\n v_positionMC = position3DHigh + position3DLow; // position in model coordinates\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\n v_st = st;\n\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\n}\n"),this._fragmentShaderSource=Object(r.a)(e.fragmentShaderSource,"varying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec2 v_st;\n\nvoid main()\n{\n czm_materialInput materialInput;\n\n vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\n#ifdef FACE_FORWARD\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\n#endif\n\n materialInput.s = v_st.s;\n materialInput.st = v_st;\n materialInput.str = vec3(v_st, 0.0);\n\n // Convert tangent space material normal to eye space\n materialInput.normalEC = normalEC;\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\n\n // Convert view vector to world space\n vec3 positionToEyeEC = -v_positionEC;\n materialInput.positionToEyeEC = positionToEyeEC;\n\n czm_material material = czm_getMaterial(materialInput);\n\n#ifdef FLAT\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n#else\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\n#endif\n}\n"),this._renderState=zP.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=Object(r.a)(e.flat,!1),this._faceForward=Object(r.a)(e.faceForward,n),this._aboveGround=n}Object.defineProperties(Koe.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return Koe.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}}),Koe.VERTEX_FORMAT=Ul.POSITION_AND_ST,Koe.prototype.getFragmentShaderSource=zP.prototype.getFragmentShaderSource,Koe.prototype.isTranslucent=zP.prototype.isTranslucent,Koe.prototype.getRenderState=zP.prototype.getRenderState;function Qoe(){this.enabled=!0,this.density=2e-4,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}for(var Zoe=[359.393,800.749,1275.6501,2151.1192,3141.7763,4777.5198,6281.2493,12364.307,15900.765,49889.0549,78026.8259,99260.7344,120036.3873,151011.0158,156091.1953,203849.3112,274866.9803,319916.3149,493552.0528,628733.5874],Joe=[2e-5,2e-4,1e-4,7e-5,5e-5,4e-5,3e-5,19e-6,1e-5,85e-7,62e-7,58e-7,53e-7,52e-7,51e-7,42e-7,4e-6,34e-7,26e-7,22e-7],eae=0;eae<Joe.length;++eae)Joe[eae]*=1e6;for(var tae=Joe[1],nae=Joe[Joe.length-1],iae=0;iae<Joe.length;++iae)Joe[iae]=(Joe[iae]-nae)/(tae-nae);var rae=0;var oae=new O;Qoe.prototype.update=function(e){if(e.fog.enabled=this.enabled){var t=e.camera,n=t.positionCartographic;if(!Object(o.a)(n)||n.height>8e5||e.mode!==IR.SCENE3D)e.fog.enabled=!1;else{var i=n.height,r=function(e){var t,n=Zoe,i=n.length;if(e<n[0])return rae=0;if(e>n[i-1])return rae=i-2;if(e>=n[rae]){if(rae+1<i&&e<n[rae+1])return rae;if(rae+2<i&&e<n[rae+2])return++rae}else if(rae-1>=0&&e>=n[rae-1])return--rae;for(t=0;t<i-2&&!(e>=n[t]&&e<n[t+1]);++t);return rae=t}(i),a=d.clamp((i-Zoe[r])/(Zoe[r+1]-Zoe[r]),0,1),s=d.lerp(Joe[r],Joe[r+1],a),c=1e6*this.density;s=s*(c-c/tae*nae)*1e-6;var l=O.normalize(t.positionWC,oae);s*=1-Math.abs(O.dot(t.directionWC,l)),e.fog.density=s,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness}}};var aae=Qoe;function sae(e){if(!Object(o.a)(e)||!Object(o.a)(e.scene))throw new a.a("options.scene is required.");this._scene=e.scene,this.samplingWindow=Object(r.a)(e.samplingWindow,sae.defaultSettings.samplingWindow),this.quietPeriod=Object(r.a)(e.quietPeriod,sae.defaultSettings.quietPeriod),this.warmupPeriod=Object(r.a)(e.warmupPeriod,sae.defaultSettings.warmupPeriod),this.minimumFrameRateDuringWarmup=Object(r.a)(e.minimumFrameRateDuringWarmup,sae.defaultSettings.minimumFrameRateDuringWarmup),this.minimumFrameRateAfterWarmup=Object(r.a)(e.minimumFrameRateAfterWarmup,sae.defaultSettings.minimumFrameRateAfterWarmup),this._lowFrameRate=new wn.a,this._nominalFrameRate=new wn.a,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;var t=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener((function(e,n){!function(e,t){if(e._pauseCount>0)return;var n=Sf();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/Ui.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/Ui.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);var i=n-e.samplingWindow/Ui.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();var r=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/r;var o=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);r>o?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}(t)})),this._hiddenPropertyName=void 0!==document.hidden?"hidden":void 0!==document.mozHidden?"mozHidden":void 0!==document.msHidden?"msHidden":void 0!==document.webkitHidden?"webkitHidden":void 0;var n=void 0!==document.hidden?"visibilitychange":void 0!==document.mozHidden?"mozvisibilitychange":void 0!==document.msHidden?"msvisibilitychange":void 0!==document.webkitHidden?"webkitvisibilitychange":void 0;function i(){var e;e=t,document[e._hiddenPropertyName]?e.pause():e.unpause()}this._visibilityChangeRemoveListener=void 0,Object(o.a)(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}sae.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8},sae.fromScene=function(e){if(!Object(o.a)(e))throw new a.a("scene is required.");return Object(o.a)(e._frameRateMonitor)&&!e._frameRateMonitor.isDestroyed()||(e._frameRateMonitor=new sae({scene:e})),e._frameRateMonitor},Object.defineProperties(sae.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}}),sae.prototype.pause=function(){++this._pauseCount,1===this._pauseCount&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)},sae.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)},sae.prototype.isDestroyed=function(){return!1},sae.prototype.destroy=function(){return this._preUpdateRemoveListener(),Object(o.a)(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),Ks(this)};var cae=sae;var lae=function(e,t,n){this.context=e,this.commandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=IR.SCENE3D,this.morphTime=IR.getMorphTime(IR.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,density:void 0,sse:void 0,minimumBrightness:void 0},this.terrainExaggeration=1,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.imagerySplitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0};var uae=function(e,t){this.near=Object(r.a)(e,0),this.far=Object(r.a)(t,0);for(var n=EI.NUMBER_OF_PASSES,i=new Array(n),o=new Array(n),a=0;a<n;++a)i[a]=[],o[a]=0;this.commands=i,this.indices=o},hae="/*!\n * Atmosphere code:\n *\n * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com)\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * * Neither the name of the project nor the names of its contributors may be\n * used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Modifications made by Analytical Graphics, Inc.\n */\n\n // Atmosphere:\n // Code: http://sponeil.net/\n // GPU Gems 2 Article: https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html\n\nconst float Kr = 0.0025;\nconst float Km = 0.0015;\nconst float ESun = 15.0;\n\nconst float fKrESun = Kr * ESun;\nconst float fKmESun = Km * ESun;\nconst float fKr4PI = Kr * 4.0 * czm_pi;\nconst float fKm4PI = Km * 4.0 * czm_pi;\n\n// Original: vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\nconst vec3 v3InvWavelength = vec3(5.60204474633241, 9.473284437923038, 19.64380261047721);\n\nconst float fScaleDepth = 0.25;\n\nstruct AtmosphereColor\n{\n vec3 mie;\n vec3 rayleigh;\n};\n\nconst int nSamples = 2;\nconst float fSamples = 2.0;\n\nfloat scale(float fCos)\n{\n float x = 1.0 - fCos;\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\n}\n\nAtmosphereColor computeGroundAtmosphereFromSpace(vec3 v3Pos, bool dynamicLighting, vec3 lightDirectionWC)\n{\n float fInnerRadius = czm_ellipsoidRadii.x;\n float fOuterRadius = czm_ellipsoidRadii.x * 1.025;\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\n\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\n float fScaleOverScaleDepth = fScale / fScaleDepth;\n\n // Get the ray from the camera to the vertex and its length (which is the far point of the ray passing through the atmosphere)\n vec3 v3Ray = v3Pos - czm_viewerPositionWC;\n float fFar = length(v3Ray);\n v3Ray /= fFar;\n\n float fCameraHeight = length(czm_viewerPositionWC);\n float fCameraHeight2 = fCameraHeight * fCameraHeight;\n\n // This next line is an ANGLE workaround. It is equivalent to B = 2.0 * dot(czm_viewerPositionWC, v3Ray),\n // which is what it should be, but there are problems at the poles.\n float B = 2.0 * length(czm_viewerPositionWC) * dot(normalize(czm_viewerPositionWC), v3Ray);\n float C = fCameraHeight2 - fOuterRadius2;\n float fDet = max(0.0, B*B - 4.0 * C);\n float fNear = 0.5 * (-B - sqrt(fDet));\n\n // Calculate the ray's starting position, then calculate its scattering offset\n vec3 v3Start = czm_viewerPositionWC + v3Ray * fNear;\n fFar -= fNear;\n float fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\n\n // The light angle based on the scene's light source would be:\n // dot(lightDirectionWC, v3Pos) / length(v3Pos);\n // When we want the atmosphere to be uniform over the globe so it is set to 1.0.\n\n float fLightAngle = czm_branchFreeTernary(dynamicLighting, dot(lightDirectionWC, v3Pos) / length(v3Pos), 1.0);\n float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\n float fCameraScale = scale(fCameraAngle);\n float fLightScale = scale(fLightAngle);\n float fCameraOffset = fDepth*fCameraScale;\n float fTemp = (fLightScale + fCameraScale);\n\n // Initialize the scattering loop variables\n float fSampleLength = fFar / fSamples;\n float fScaledLength = fSampleLength * fScale;\n vec3 v3SampleRay = v3Ray * fSampleLength;\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\n\n // Now loop through the sample rays\n vec3 v3FrontColor = vec3(0.0);\n vec3 v3Attenuate = vec3(0.0);\n for(int i=0; i<nSamples; i++)\n {\n float fHeight = length(v3SamplePoint);\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\n float fScatter = fDepth*fTemp - fCameraOffset;\n v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\n v3SamplePoint += v3SampleRay;\n }\n\n AtmosphereColor color;\n color.mie = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\n color.rayleigh = v3Attenuate; // Calculate the attenuation factor for the ground\n\n return color;\n}\n\n";function dae(e,t,n,i,r){this.numberOfDayTextures=e,this.flags=t,this.material=n,this.shaderProgram=i,this.clippingShaderState=r}function fae(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}fae.prototype.getShaderProgram=function(e){var t=e.frameState,n=e.surfaceTile,i=e.numberOfDayTextures,r=e.applyBrightness,a=e.applyContrast,s=e.applyHue,c=e.applySaturation,l=e.applyGamma,u=e.applyAlpha,h=e.applyDayNightAlpha,d=e.applySplit,f=e.showReflectiveOcean,p=e.showOceanWaves,m=e.enableLighting,g=e.dynamicAtmosphereLighting,v=e.dynamicAtmosphereLightingFromSun,_=e.showGroundAtmosphere,b=e.perFragmentGroundAtmosphere,y=e.hasVertexNormals,w=e.useWebMercatorProjection,O=e.enableFog,C=e.enableClippingPlanes,E=e.clippingPlanes,A=e.clippedByBoundaries,x=e.hasImageryLayerCutout,T=e.colorCorrect,S=e.highlightFillTile,D=e.colorToAlpha,P=e.showUndergroundColor,I=e.translucent,M=0,R="",L=n.renderedMesh.encoding;L.quantization===Ps.BITS12&&(M=1,R="QUANTIZATION_BITS12");var j=0,F="";A&&(j=1,F="TILE_LIMIT_RECTANGLE");var N=0,z="";x&&(N=1,z="APPLY_IMAGERY_CUTOUT");var k=t.mode,B=k|r<<2|a<<3|s<<4|c<<5|l<<6|u<<7|f<<8|p<<9|m<<10|g<<11|v<<12|_<<13|b<<14|y<<15|w<<16|O<<17|M<<18|d<<19|C<<20|j<<21|N<<22|T<<23|S<<24|D<<25|P<<26|I<<27|h<<28,H=0;Object(o.a)(E)&&E.length>0&&(H=C?E.clippingPlanesState:0);var V=n.surfaceShader;if(Object(o.a)(V)&&V.numberOfDayTextures===i&&V.flags===B&&V.material===this.material&&V.clippingShaderState===H)return V.shaderProgram;var U=this._shadersByTexturesFlags[i];if(Object(o.a)(U)||(U=this._shadersByTexturesFlags[i]=[]),V=U[B],!Object(o.a)(V)||V.material!==this.material||V.clippingShaderState!==H){var W=this.baseVertexShaderSource.clone(),G=this.baseFragmentShaderSource.clone();0!==H&&G.sources.unshift(bH(E,t.context)),W.defines.push(R),G.defines.push("TEXTURE_UNITS "+i,F,z),r&&G.defines.push("APPLY_BRIGHTNESS"),a&&G.defines.push("APPLY_CONTRAST"),s&&G.defines.push("APPLY_HUE"),c&&G.defines.push("APPLY_SATURATION"),l&&G.defines.push("APPLY_GAMMA"),u&&G.defines.push("APPLY_ALPHA"),h&&G.defines.push("APPLY_DAY_NIGHT_ALPHA"),f&&(G.defines.push("SHOW_REFLECTIVE_OCEAN"),W.defines.push("SHOW_REFLECTIVE_OCEAN")),p&&G.defines.push("SHOW_OCEAN_WAVES"),D&&G.defines.push("APPLY_COLOR_TO_ALPHA"),P&&(W.defines.push("UNDERGROUND_COLOR"),G.defines.push("UNDERGROUND_COLOR")),I&&(W.defines.push("TRANSLUCENT"),G.defines.push("TRANSLUCENT")),m&&(y?(W.defines.push("ENABLE_VERTEX_LIGHTING"),G.defines.push("ENABLE_VERTEX_LIGHTING")):(W.defines.push("ENABLE_DAYNIGHT_SHADING"),G.defines.push("ENABLE_DAYNIGHT_SHADING"))),g&&(G.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),v&&G.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN")),_&&(W.defines.push("GROUND_ATMOSPHERE"),G.defines.push("GROUND_ATMOSPHERE"),b&&G.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE")),W.defines.push("INCLUDE_WEB_MERCATOR_Y"),G.defines.push("INCLUDE_WEB_MERCATOR_Y"),O&&(W.defines.push("FOG"),G.defines.push("FOG")),d&&G.defines.push("APPLY_SPLIT"),C&&G.defines.push("ENABLE_CLIPPING_PLANES"),T&&G.defines.push("COLOR_CORRECT"),S&&G.defines.push("HIGHLIGHT_FILL_TILE");var q=" vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\n {\n vec4 color = initialColor;\n";x&&(q+=" vec4 cutoutAndColorResult;\n bool texelUnclipped;\n");for(var Y=0;Y<i;++Y)q+=x?" cutoutAndColorResult = u_dayTextureCutoutRectangles["+Y+"];\n texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\n cutoutAndColorResult = sampleAndBlend(\n":" color = sampleAndBlend(\n",q+=" color,\n u_dayTextures["+Y+"],\n u_dayTextureUseWebMercatorT["+Y+"] ? textureCoordinates.xz : textureCoordinates.xy,\n u_dayTextureTexCoordsRectangle["+Y+"],\n u_dayTextureTranslationAndScale["+Y+"],\n "+(u?"u_dayTextureAlpha["+Y+"]":"1.0")+",\n "+(h?"u_dayTextureNightAlpha["+Y+"]":"1.0")+",\n"+(h?"u_dayTextureDayAlpha["+Y+"]":"1.0")+",\n"+(r?"u_dayTextureBrightness["+Y+"]":"0.0")+",\n "+(a?"u_dayTextureContrast["+Y+"]":"0.0")+",\n "+(s?"u_dayTextureHue["+Y+"]":"0.0")+",\n "+(c?"u_dayTextureSaturation["+Y+"]":"0.0")+",\n "+(l?"u_dayTextureOneOverGamma["+Y+"]":"0.0")+",\n "+(d?"u_dayTextureSplit["+Y+"]":"0.0")+",\n "+(D?"u_colorsToAlpha["+Y+"]":"vec4(0.0)")+",\n nightBlend );\n",x&&(q+=" color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\n");q+=" return color;\n }",G.sources.push(q),W.sources.push(function(e){var t;switch(e){case IR.SCENE3D:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }";break;case IR.SCENE2D:case IR.COLUMBUS_VIEW:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }";break;case IR.MORPHING:t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }"}return t}(k)),W.sources.push(function(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}(w));var $=LM.fromCache({context:t.context,vertexShaderSource:W,fragmentShaderSource:G,attributeLocations:L.getAttributeLocations()});V=U[B]=new dae(i,B,this.material,$,H)}return n.surfaceShader=V,V.shaderProgram},fae.prototype.destroy=function(){var e,t,n=this._shadersByTexturesFlags;for(var i in n)if(n.hasOwnProperty(i)){var r=n[i];if(!Object(o.a)(r))continue;for(e in r)r.hasOwnProperty(e)&&(t=r[e],Object(o.a)(t)&&t.shaderProgram.destroy())}return Ks(this)};var pae=fae,mae=Object.freeze({UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7}),gae=Object.freeze({START:0,LOADING:1,DONE:2,FAILED:3}),vae=Object.freeze({FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6});function _ae(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new he(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.orientedBoundingBox=void 0,this.boundingVolumeSourceTile=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new O,this.terrainState=vae.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new gt,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}function bae(e,t,n,i,r,a){if(e.decodePosition(i,r,a),Object(o.a)(t)&&t!==IR.SCENE3D){var s=n.ellipsoid.cartesianToCartographic(a);n.project(s,a),O.fromElements(a.z,a.x,a.y,a)}return a}Object.defineProperties(_ae.prototype,{eligibleForUnloading:{get:function(){for(var e=this.terrainState,t=!(e===vae.RECEIVING||e===vae.TRANSFORMING),n=this.imagery,i=0,r=n.length;t&&i<r;++i){var a=n[i];t=!Object(o.a)(a.loadingImagery)||a.loadingImagery.state!==mae.TRANSITIONING}return t}},renderedMesh:{get:function(){return Object(o.a)(this.vertexArray)?this.mesh:Object(o.a)(this.fill)?this.fill.mesh:void 0}}});var yae=new O,wae=new O,Oae=new O;_ae.prototype.pick=function(e,t,n,i,r){var a=this.renderedMesh;if(Object(o.a)(a)){for(var s=a.vertices,c=a.indices,l=a.encoding,u=c.length,h=Number.MAX_VALUE,d=0;d<u;d+=3){var f=c[d],p=c[d+1],m=c[d+2],g=bae(l,t,n,s,f,yae),v=bae(l,t,n,s,p,wae),_=bae(l,t,n,s,m,Oae),b=Ii.rayTriangleParametric(e,g,v,_,i);Object(o.a)(b)&&b<h&&b>=0&&(h=b)}return h!==Number.MAX_VALUE?ti.getPoint(e,h,r):void 0}},_ae.prototype.freeResources=function(){Object(o.a)(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,0===this.waterMaskTexture.referenceCount&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=vae.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();for(var e=this.imagery,t=0,n=e.length;t<n;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()},_ae.prototype.freeVertexArray=function(){_ae._freeVertexArray(this.vertexArray),this.vertexArray=void 0,_ae._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0},_ae.initialize=function(e,t,n){var i=e.data;Object(o.a)(i)||(i=e.data=new _ae),e.state===gae.START&&(!function(e,t,n){var i=t.getTileDataAvailable(e.x,e.y,e.level);if(!Object(o.a)(i)&&Object(o.a)(e.parent)){var r=e.parent,a=r.data;Object(o.a)(a)&&Object(o.a)(a.terrainData)&&(i=a.terrainData.isChildAvailable(r.x,r.y,e.x,e.y))}!1===i&&(e.data.terrainState=vae.FAILED);for(var s=0,c=n.length;s<c;++s){var l=n.get(s);l.show&&l._createTileImagerySkeletons(e,t)}}(e,t,n),e.state=gae.LOADING)},_ae.processStateMachine=function(e,t,n,i,r,a){_ae.initialize(e,n,i);var s=e.data;if(e.state===gae.LOADING&&function(e,t,n,i,r){var a=e.data,s=e.parent;if(a.terrainState===vae.FAILED&&void 0!==s){void 0!==s.data&&void 0!==s.data.terrainData&&!1!==s.data.terrainData.canUpsample||_ae.processStateMachine(s,t,n,i,!0)}a.terrainState===vae.FAILED&&function(e,t,n,i,r,a,s){var c=t.parent;if(!c)return void(t.state=gae.FAILED);var l=c.data.terrainData,u=c.x,h=c.y,d=c.level;if(!Object(o.a)(l))return;var f=l.upsample(i.tilingScheme,u,h,d,r,a,s);if(!Object(o.a)(f))return;e.terrainState=vae.RECEIVING,Object(Yt.a)(f,(function(t){e.terrainData=t,e.terrainState=vae.RECEIVED}),(function(){e.terrainState=vae.FAILED}))}(a,e,0,n,e.x,e.y,e.level);a.terrainState===vae.UNLOADED&&function(e,t,n,i,r){function a(t){e.terrainData=t,e.terrainState=vae.RECEIVED,e.request=void 0}function s(){if(e.request.state===xc.a.CANCELLED)return e.terrainData=void 0,e.terrainState=vae.UNLOADED,void(e.request=void 0);e.terrainState=vae.FAILED,e.request=void 0;var o="Failed to obtain terrain tile X: "+n+" Y: "+i+" Level: "+r+".";t._requestError=$c.handleError(t._requestError,t,t.errorEvent,o,n,i,r,c)}function c(){var c=new Ac.a({throttle:!1,throttleByServer:!0,type:Tc.a.TERRAIN});e.request=c;var l=t.requestTileGeometry(n,i,r,c);Object(o.a)(l)?(e.terrainState=vae.RECEIVING,Object(Yt.a)(l,a,s)):(e.terrainState=vae.UNLOADED,e.request=void 0)}c()}(a,n,e.x,e.y,e.level);a.terrainState===vae.RECEIVED&&function(e,t,n,i,r,a){var s=n.tilingScheme,c=e.terrainData.createMesh(s,i,r,a,t.terrainExaggeration);if(!Object(o.a)(c))return;e.terrainState=vae.TRANSFORMING,Object(Yt.a)(c,(function(t){e.mesh=t,e.orientedBoundingBox=bs.clone(t.orientedBoundingBox,e.orientedBoundingBox),e.occludeePointInScaledSpace=O.clone(t.occludeePointInScaledSpace,e.occludeePointInScaledSpace),e.terrainState=vae.TRANSFORMED}),(function(){e.terrainState=vae.FAILED}))}(a,t,n,e.x,e.y,e.level);a.terrainState===vae.TRANSFORMED&&function(e,t,n,i,r,o,a){e.vertexArray=_ae._createVertexArrayForMesh(t,e.mesh),e.terrainState=vae.READY,e.fill=e.fill&&e.fill.destroy(a)}(a,t.context,0,e.x,e.y,e.level,r);if(a.terrainState>=vae.RECEIVED&&void 0===a.waterMaskTexture&&n.hasWaterMask){if(void 0!==a.terrainData.waterMask)!function(e,t){var n,i=t.terrainData.waterMask,r=function(e){var t=e.cache.tile_waterMaskData;if(!Object(o.a)(t)){var n=nI.create({context:e,pixelFormat:FC.LUMINANCE,pixelDatatype:LC.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;var i=new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.LINEAR,magnificationFilter:qP.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}(e),a=i.length;if(1===a){if(0===i[0])return;n=r.allWaterTexture}else{var s=Math.sqrt(a);(n=nI.create({context:e,pixelFormat:FC.LUMINANCE,pixelDatatype:LC.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:i},sampler:r.sampler,flipY:!1})).referenceCount=0}++n.referenceCount,t.waterMaskTexture=n,he.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}(t.context,a);else{var c=a._findAncestorTileWithTerrainData(e);Object(o.a)(c)&&Object(o.a)(c.data.waterMaskTexture)&&(a.waterMaskTexture=c.data.waterMaskTexture,++a.waterMaskTexture.referenceCount,a._computeWaterMaskTranslationAndScale(e,c,a.waterMaskTranslationAndScale))}}}(e,t,n,i,r),!a){var c=e.renderable;e.renderable=Object(o.a)(s.vertexArray);var l=s.terrainState===vae.READY;e.upsampledFromParent=Object(o.a)(s.terrainData)&&s.terrainData.wasCreatedByUpsampling();var u=s.processImagery(e,n,t);if(l&&u){var h=e._loadedCallbacks,d={};for(var f in h)h.hasOwnProperty(f)&&(h[f](e)||(d[f]=h[f]));e._loadedCallbacks=d,e.state=gae.DONE}c&&(e.renderable=!0)}},_ae.prototype.processImagery=function(e,t,n,i){var r,a,s=e.data,c=e.upsampledFromParent,l=!1,u=!0,h=s.imagery;for(r=0,a=h.length;r<a;++r){var d=h[r];if(Object(o.a)(d.loadingImagery)){if(d.loadingImagery.state===mae.PLACEHOLDER){var f=d.loadingImagery.imageryLayer;if(f.imageryProvider.ready){d.freeResources(),h.splice(r,1),f._createTileImagerySkeletons(e,t,r),--r,a=h.length;continue}c=!1}var p=d.processStateMachine(e,n,i);u=u&&p,l=l||p||Object(o.a)(d.readyImagery),c=c&&Object(o.a)(d.loadingImagery)&&(d.loadingImagery.state===mae.FAILED||d.loadingImagery.state===mae.INVALID)}else c=!1}return e.upsampledFromParent=c,e.renderable=e.renderable&&(l||u),u},_ae._createVertexArrayForMesh=function(e,t){var n=t.vertices,i=oR.createVertexBuffer({context:e,typedArray:n,usage:iR.STATIC_DRAW}),r=t.encoding.getAttributes(i),a=t.indices.indexBuffers||{},s=a[e.id];if(!Object(o.a)(s)||s.isDestroyed()){var c=t.indices;(s=oR.createIndexBuffer({context:e,typedArray:c,usage:iR.STATIC_DRAW,indexDatatype:lc.fromSizeInBytes(c.BYTES_PER_ELEMENT)})).vertexArrayDestroyable=!1,s.referenceCount=1,a[e.id]=s,t.indices.indexBuffers=a}else++s.referenceCount;return new hR({context:e,attributes:r,indexBuffer:s})},_ae._freeVertexArray=function(e){if(Object(o.a)(e)){var t=e.indexBuffer;e.destroy(),Object(o.a)(t)&&!t.isDestroyed()&&Object(o.a)(t.referenceCount)&&(--t.referenceCount,0===t.referenceCount&&t.destroy())}},_ae.prototype._findAncestorTileWithTerrainData=function(e){for(var t=e.parent;Object(o.a)(t)&&(!Object(o.a)(t.data)||!Object(o.a)(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t},_ae.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){var i=t.rectangle,r=e.rectangle,o=r.width,a=r.height,s=o/i.width,c=a/i.height;return n.x=s*(r.west-i.west)/o,n.y=c*(r.south-i.south)/a,n.z=s,n.w=c,n};var Cae=_ae;function Eae(e,t,n,i,r){if(this.imageryLayer=e,this.x=t,this.y=n,this.level=i,this.request=void 0,0!==i){var a=t/2|0,s=n/2|0,c=i-1;this.parent=e.getImageryFromCache(a,s,c)}(this.state=mae.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!Object(o.a)(r)&&e.imageryProvider.ready)&&(r=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i));this.rectangle=r}Eae.createPlaceholder=function(e){var t=new Eae(e,0,0,0);return t.addReference(),t.state=mae.PLACEHOLDER,t},Eae.prototype.addReference=function(){++this.referenceCount},Eae.prototype.releaseReference=function(){return--this.referenceCount,0===this.referenceCount?(this.imageryLayer.removeImageryFromCache(this),Object(o.a)(this.parent)&&this.parent.releaseReference(),Object(o.a)(this.image)&&Object(o.a)(this.image.destroy)&&this.image.destroy(),Object(o.a)(this.texture)&&this.texture.destroy(),Object(o.a)(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),Ks(this),0):this.referenceCount},Eae.prototype.processStateMachine=function(e,t,n){this.state!==mae.UNLOADED||n||(this.state=mae.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===mae.RECEIVED&&(this.state=mae.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));var i=this.state===mae.READY&&t&&!this.texture;(this.state===mae.TEXTURE_LOADED||i)&&(this.state=mae.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var Aae=Eae,xae=Object.freeze({LEFT:-1,NONE:0,RIGHT:1});function Tae(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}Tae.prototype.freeResources=function(){Object(o.a)(this.readyImagery)&&this.readyImagery.releaseReference(),Object(o.a)(this.loadingImagery)&&this.loadingImagery.releaseReference()},Tae.prototype.processStateMachine=function(e,t,n){var i=this.loadingImagery,r=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===mae.READY)return Object(o.a)(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=r._calculateTextureTranslationAndScale(e,this),!0;for(var a,s=i.parent;Object(o.a)(s)&&(s.state!==mae.READY||!this.useWebMercatorT&&!Object(o.a)(s.texture));)s.state!==mae.FAILED&&s.state!==mae.INVALID&&(a=a||s),s=s.parent;return this.readyImagery!==s&&(Object(o.a)(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=s,Object(o.a)(s)&&(s.addReference(),this.textureTranslationAndScale=r._calculateTextureTranslationAndScale(e,this))),(i.state===mae.FAILED||i.state===mae.INVALID)&&(!Object(o.a)(a)||(a.processStateMachine(t,!this.useWebMercatorT,n),!1))};var Sae=Tae;function Dae(e,t){this._imageryProvider=e,t=Object(r.a)(t,r.a.EMPTY_OBJECT),this.alpha=Object(r.a)(t.alpha,Object(r.a)(e.defaultAlpha,1)),this.nightAlpha=Object(r.a)(t.nightAlpha,Object(r.a)(e.defaultNightAlpha,1)),this.dayAlpha=Object(r.a)(t.dayAlpha,Object(r.a)(e.defaultDayAlpha,1)),this.brightness=Object(r.a)(t.brightness,Object(r.a)(e.defaultBrightness,Dae.DEFAULT_BRIGHTNESS)),this.contrast=Object(r.a)(t.contrast,Object(r.a)(e.defaultContrast,Dae.DEFAULT_CONTRAST)),this.hue=Object(r.a)(t.hue,Object(r.a)(e.defaultHue,Dae.DEFAULT_HUE)),this.saturation=Object(r.a)(t.saturation,Object(r.a)(e.defaultSaturation,Dae.DEFAULT_SATURATION)),this.gamma=Object(r.a)(t.gamma,Object(r.a)(e.defaultGamma,Dae.DEFAULT_GAMMA)),this.splitDirection=Object(r.a)(t.splitDirection,Object(r.a)(e.defaultSplit,Dae.DEFAULT_SPLIT)),this.minificationFilter=Object(r.a)(t.minificationFilter,Object(r.a)(e.defaultMinificationFilter,Dae.DEFAULT_MINIFICATION_FILTER)),this.magnificationFilter=Object(r.a)(t.magnificationFilter,Object(r.a)(e.defaultMagnificationFilter,Dae.DEFAULT_MAGNIFICATION_FILTER)),this.show=Object(r.a)(t.show,!0),this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=Object(r.a)(t.rectangle,Se.MAX_VALUE),this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new Sae(Aae.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=Object(r.a)(t.colorToAlphaThreshold,Dae.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD)}Object.defineProperties(Dae.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},rectangle:{get:function(){return this._rectangle}}}),Dae.DEFAULT_BRIGHTNESS=1,Dae.DEFAULT_CONTRAST=1,Dae.DEFAULT_HUE=0,Dae.DEFAULT_SATURATION=1,Dae.DEFAULT_GAMMA=1,Dae.DEFAULT_SPLIT=xae.NONE,Dae.DEFAULT_MINIFICATION_FILTER=$P.LINEAR,Dae.DEFAULT_MAGNIFICATION_FILTER=qP.LINEAR,Dae.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004,Dae.prototype.isBaseLayer=function(){return this._isBaseLayer},Dae.prototype.isDestroyed=function(){return!1},Dae.prototype.destroy=function(){return Ks(this)};var Pae=new Se,Iae=new Se,Mae=new Se,Rae=new Se;function Lae(e,t,n){return e+":"+t+":"+n}function jae(e,t,n){return JSON.stringify([e,t,n])}Dae.prototype.getViewableRectangle=function(){var e=this._imageryProvider,t=this._rectangle;return e.readyPromise.then((function(){return Se.intersection(e.rectangle,t)}))},Dae.prototype._createTileImagerySkeletons=function(e,t,n){var i=e.data;if(Object(o.a)(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel)return!1;if(Object(o.a)(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;var r=this._imageryProvider;if(Object(o.a)(n)||(n=i.imagery.length),!r.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),i.imagery.splice(n,0,this._skeletonPlaceholder),!0;var a=r.tilingScheme.projection instanceof Vs&&e.rectangle.north<Vs.MaximumLatitude&&e.rectangle.south>-Vs.MaximumLatitude,s=Se.intersection(r.rectangle,this._rectangle,Pae),c=Se.intersection(e.rectangle,s,Iae);if(!Object(o.a)(c)){if(!this.isBaseLayer())return!1;var l=s,u=e.rectangle;c=Iae,u.south>=l.north?c.north=c.south=l.north:u.north<=l.south?c.north=c.south=l.south:(c.south=Math.max(u.south,l.south),c.north=Math.min(u.north,l.north)),u.west>=l.east?c.west=c.east=l.east:u.east<=l.west?c.west=c.east=l.west:(c.west=Math.max(u.west,l.west),c.east=Math.min(u.east,l.east))}var h=0;c.south>0?h=c.south:c.north<0&&(h=c.north);var d=function(e,t,n){var i=e._imageryProvider,r=i.tilingScheme,o=r.ellipsoid,a=e._imageryProvider.tilingScheme.projection instanceof q?1:Math.cos(n),s=r.rectangle,c=o.maximumRadius*s.width*a/(i.tileWidth*r.getNumberOfXTilesAtLevel(0))/t,l=Math.log(c)/Math.log(2);return 0|Math.round(l)}(this,1*t.getLevelMaximumGeometricError(e.level),h);d=Math.max(0,d);var f=r.maximumLevel;if(d>f&&(d=f),Object(o.a)(r.minimumLevel)){var p=r.minimumLevel;d<p&&(d=p)}var m=r.tilingScheme,g=m.positionToTileXY(Se.northwest(c),d),v=m.positionToTileXY(Se.southeast(c),d),_=e.rectangle.width/512,b=e.rectangle.height/512,y=m.tileXYToRectangle(g.x,g.y,d);Math.abs(y.south-e.rectangle.north)<b&&g.y<v.y&&++g.y,Math.abs(y.east-e.rectangle.west)<_&&g.x<v.x&&++g.x;var w=m.tileXYToRectangle(v.x,v.y,d);Math.abs(w.north-e.rectangle.south)<b&&v.y>g.y&&--v.y,Math.abs(w.west-e.rectangle.east)<_&&v.x>g.x&&--v.x;var O,C,E=Se.clone(e.rectangle,Rae),A=m.tileXYToRectangle(g.x,g.y,d),x=Se.intersection(A,s,Mae);a?(m.rectangleToNativeRectangle(E,E),m.rectangleToNativeRectangle(A,A),m.rectangleToNativeRectangle(x,x),m.rectangleToNativeRectangle(s,s),O=m.tileXYToNativeRectangle.bind(m),_=E.width/512,b=E.height/512):O=m.tileXYToRectangle.bind(m);var T,S=0,D=1;!this.isBaseLayer()&&Math.abs(x.west-E.west)>=_&&(S=Math.min(1,(x.west-E.west)/E.width)),!this.isBaseLayer()&&Math.abs(x.north-E.north)>=b&&(D=Math.max(0,(x.north-E.south)/E.height));for(var P=D,I=g.x;I<=v.x;I++)if(C=S,A=O(I,g.y,d),x=Se.simpleIntersection(A,s,Mae),Object(o.a)(x)){S=Math.min(1,(x.east-E.west)/E.width),I===v.x&&(this.isBaseLayer()||Math.abs(x.east-E.east)<_)&&(S=1),D=P;for(var M=g.y;M<=v.y;M++)if(T=D,A=O(I,M,d),x=Se.simpleIntersection(A,s,Mae),Object(o.a)(x)){D=Math.max(0,(x.south-E.south)/E.height),M===v.y&&(this.isBaseLayer()||Math.abs(x.south-E.south)<b)&&(D=0);var R=new he(C,D,S,T),L=this.getImageryFromCache(I,M,d);i.imagery.splice(n,0,new Sae(L,R,a)),++n}}return!0},Dae.prototype._calculateTextureTranslationAndScale=function(e,t){var n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){var r=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=r.rectangleToNativeRectangle(n,Pae),i=r.rectangleToNativeRectangle(i,Rae)}var o=i.width,a=i.height,s=o/n.width,c=a/n.height;return new he(s*(i.west-n.west)/o,c*(i.south-n.south)/a,s,c)},Dae.prototype._requestImagery=function(e){var t=this._imageryProvider,n=this;function i(t){if(!Object(o.a)(t))return r();e.image=t,e.state=mae.RECEIVED,e.request=void 0,$c.handleSuccess(n._requestImageError)}function r(i){if(e.request.state===xc.a.CANCELLED)return e.state=mae.UNLOADED,void(e.request=void 0);e.state=mae.FAILED,e.request=void 0;var r="Failed to obtain image tile X: "+e.x+" Y: "+e.y+" Level: "+e.level+".";n._requestImageError=$c.handleError(n._requestImageError,t,t.errorEvent,r,e.x,e.y,e.level,a,i)}function a(){var n=new Ac.a({throttle:!1,throttleByServer:!0,type:Tc.a.IMAGERY});e.request=n,e.state=mae.TRANSITIONING;var a=t.requestImage(e.x,e.y,e.level,n);if(!Object(o.a)(a))return e.state=mae.UNLOADED,void(e.request=void 0);Object(o.a)(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),Object(Yt.a)(a,i,r)}a()},Dae.prototype._createTextureWebGL=function(e,t){var n=new ZP({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return Object(o.a)(i.internalFormat)?new nI({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new nI({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?FC.RGBA:FC.RGB,sampler:n})},Dae.prototype._createTexture=function(e,t){var n=this._imageryProvider,i=t.image;if(Object(o.a)(n.tileDiscardPolicy)){var r=n.tileDiscardPolicy;if(Object(o.a)(r)){if(!r.isReady())return void(t.state=mae.RECEIVED);if(r.shouldDiscardImage(i))return void(t.state=mae.INVALID)}}if(this.minificationFilter!==$P.NEAREST&&this.minificationFilter!==$P.LINEAR)throw new a.a("ImageryLayer minification filter must be NEAREST or LINEAR");var s=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof Vs?t.textureWebMercator=s:t.texture=s,t.image=void 0,t.state=mae.TEXTURE_LOADED},Dae.prototype._finalizeReprojectTexture=function(e,t){var n=this.minificationFilter,i=this.magnificationFilter;if(n===$P.LINEAR&&i===qP.LINEAR&&!FC.isCompressedFormat(t.pixelFormat)&&d.isPowerOfTwo(t.width)&&d.isPowerOfTwo(t.height)){n=$P.LINEAR_MIPMAP_LINEAR;var a=BP.maximumTextureFilterAnisotropy,s=Math.min(a,Object(r.a)(this._maximumAnisotropy,a)),c=Lae(n,i,s),l=e.cache.imageryLayerMipmapSamplers;Object(o.a)(l)||(l={},e.cache.imageryLayerMipmapSamplers=l);var u=l[c];Object(o.a)(u)||(u=l[c]=new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(WP.NICEST),t.sampler=u}else{var h=Lae(n,i,0),f=e.cache.imageryLayerNonMipmapSamplers;Object(o.a)(f)||(f={},e.cache.imageryLayerNonMipmapSamplers=f);var p=f[h];Object(o.a)(p)||(p=f[h]=new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=p}},Dae.prototype._reprojectTexture=function(e,t,n){var i=t.textureWebMercator||t.texture,a=t.rectangle,s=e.context;if((n=Object(r.a)(n,!0))&&!(this._imageryProvider.tilingScheme.projection instanceof q)&&a.width/i.width>1e-5){var c=this;t.addReference();var l=new nV({persists:!0,owner:this,preExecute:function(e){!function(e,t,n,i){var r=t.cache.imageryLayer_reproject;if(!Object(o.a)(r)){r=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){Object(o.a)(this.framebuffer)&&this.framebuffer.destroy(),Object(o.a)(this.vertexArray)&&this.vertexArray.destroy(),Object(o.a)(this.shaderProgram)&&this.shaderProgram.destroy()}};for(var a=new Float32Array(256),s=0,c=0;c<64;++c){var l=c/63;a[s++]=0,a[s++]=l,a[s++]=1,a[s++]=l}var u={position:0,webMercatorT:1},h=vc.getRegularGridIndices(2,64),f=oR.createIndexBuffer({context:t,typedArray:h,usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT});r.vertexArray=new hR({context:t,attributes:[{index:u.position,vertexBuffer:oR.createVertexBuffer({context:t,typedArray:a,usage:iR.STATIC_DRAW}),componentsPerAttribute:2},{index:u.webMercatorT,vertexBuffer:oR.createVertexBuffer({context:t,sizeInBytes:512,usage:iR.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:f});var p=new KM({sources:["attribute vec4 position;\nattribute float webMercatorT;\n\nuniform vec2 u_textureDimensions;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n v_textureCoordinates = vec2(position.x, webMercatorT);\n gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));\n}\n"]});r.shaderProgram=LM.fromCache({context:t,vertexShaderSource:p,fragmentShaderSource:"uniform sampler2D u_texture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n gl_FragColor = texture2D(u_texture, v_textureCoordinates);\n}\n",attributeLocations:u}),r.sampler=new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.LINEAR,magnificationFilter:qP.LINEAR})}n.sampler=r.sampler;var m=n.width,g=n.height;Fae.textureDimensions.x=m,Fae.textureDimensions.y=g,Fae.texture=n;var v=Math.sin(i.south),_=.5*Math.log((1+v)/(1-v));v=Math.sin(i.north);var b=1/(.5*Math.log((1+v)/(1-v))-_),y=new nI({context:t,width:m,height:g,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});d.isPowerOfTwo(m)&&d.isPowerOfTwo(g)&&y.generateMipmap(WP.NICEST);for(var w=i.south,O=i.north,C=Nae,E=0,A=0;A<64;++A){var x=A/63,T=d.lerp(w,O,x);v=Math.sin(T);var S=(.5*Math.log((1+v)/(1-v))-_)*b;C[E++]=S,C[E++]=S}r.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(C),e.shaderProgram=r.shaderProgram,e.outputTexture=y,e.uniformMap=Fae,e.vertexArray=r.vertexArray}(e,s,i,t.rectangle)},postExecute:function(e){t.texture=e,c._finalizeReprojectTexture(s,e),t.state=mae.READY,t.releaseReference()}});this._reprojectComputeCommands.push(l)}else n&&(t.texture=i),this._finalizeReprojectTexture(s,i),t.state=mae.READY},Dae.prototype.queueReprojectionCommands=function(e){for(var t=this._reprojectComputeCommands,n=t.length,i=0;i<n;++i)e.commandList.push(t[i]);t.length=0},Dae.prototype.cancelReprojections=function(){this._reprojectComputeCommands.length=0},Dae.prototype.getImageryFromCache=function(e,t,n,i){var r=jae(e,t,n),a=this._imageryCache[r];return Object(o.a)(a)||(a=new Aae(this,e,t,n,i),this._imageryCache[r]=a),a.addReference(),a},Dae.prototype.removeImageryFromCache=function(e){var t=jae(e.x,e.y,e.level);delete this._imageryCache[t]};var Fae={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new Mt,texture:void 0},Nae=oo.supportsTypedArrays()?new Float32Array(128):void 0;var zae=Dae,kae={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=kae.RENDERED_AND_KICKED},originalResult:function(e){return 3&e},kick:function(e){return 4|e}},Bae=kae;function Hae(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new he}Hae.prototype.update=function(e,t,n){this.changedThisFrame&&(ose(e,t,this.tile,n),this.changedThisFrame=!1)},Hae.prototype.destroy=function(e){Object(o.a)(this.vertexArray)&&(Object(o.a)(e)?e.push(this.vertexArray):Cae._freeVertexArray(this.vertexArray,e),this.vertexArray=void 0),Object(o.a)(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,0===this.waterMaskTexture.referenceCount&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};var Vae=new em;function Uae(e,t,n,i,r,s,c,l,u){if(void 0!==i){for(var h=i;h&&(h._lastSelectionResultFrame!==r||Bae.wasKicked(h._lastSelectionResult)||Bae.originalResult(h._lastSelectionResult)===Bae.CULLED);){if(c)return;var f=h.parent;if(s>=QS.NORTHWEST&&void 0!==f)switch(s){case QS.NORTHWEST:h=h===f.northwestChild?f:void 0;break;case QS.NORTHEAST:h=h===f.northeastChild?f:void 0;break;case QS.SOUTHWEST:h=h===f.southwestChild?f:void 0;break;case QS.SOUTHEAST:h=h===f.southeastChild?f:void 0}else h=f}if(void 0!==h)if(h._lastSelectionResult!==Bae.RENDERED){if(Bae.originalResult(i._lastSelectionResult)!==Bae.CULLED)switch(s){case QS.WEST:Uae(e,t,n,i.northwestChild,r,s,!0,l,u),Uae(e,t,n,i.southwestChild,r,s,!0,l,u);break;case QS.EAST:Uae(e,t,n,i.southeastChild,r,s,!0,l,u),Uae(e,t,n,i.northeastChild,r,s,!0,l,u);break;case QS.SOUTH:Uae(e,t,n,i.southwestChild,r,s,!0,l,u),Uae(e,t,n,i.southeastChild,r,s,!0,l,u);break;case QS.NORTH:Uae(e,t,n,i.northeastChild,r,s,!0,l,u),Uae(e,t,n,i.northwestChild,r,s,!0,l,u);break;case QS.NORTHWEST:Uae(e,t,n,i.northwestChild,r,s,!0,l,u);break;case QS.NORTHEAST:Uae(e,t,n,i.northeastChild,r,s,!0,l,u);break;case QS.SOUTHWEST:Uae(e,t,n,i.southwestChild,r,s,!0,l,u);break;case QS.SOUTHEAST:Uae(e,t,n,i.southeastChild,r,s,!0,l,u);break;default:throw new a.a("Invalid edge")}}else{if(Object(o.a)(h.data.vertexArray))return;!function(e,t,n,i,r,a,s,c){var l=i.data;if(void 0===l.fill)l.fill=new Hae(i);else if(l.fill.visitedFrame===a)return;l.fill.enqueuedFrame!==a&&(l.fill.enqueuedFrame=a,l.fill.changedThisFrame=!1,s.enqueue(i));!function(e,t,n,i,r,a){var s,c,l,u,h,f,p,m=i.data.fill,g=n.data.fill;Object(o.a)(g)?(g.visitedFrame=t.frameNumber,g.changedThisFrame&&(ose(e,t,n,a),g.changedThisFrame=!1),s=n.data.fill.mesh):s=n.data.mesh;switch(r){case QS.WEST:c=m.westMeshes,l=m.westTiles;break;case QS.SOUTH:c=m.southMeshes,l=m.southTiles;break;case QS.EAST:c=m.eastMeshes,l=m.eastTiles;break;case QS.NORTH:c=m.northMeshes,l=m.northTiles;break;case QS.NORTHWEST:return m.changedThisFrame=m.changedThisFrame||m.northwestMesh!==s,m.northwestMesh=s,void(m.northwestTile=n);case QS.NORTHEAST:return m.changedThisFrame=m.changedThisFrame||m.northeastMesh!==s,m.northeastMesh=s,void(m.northeastTile=n);case QS.SOUTHWEST:return m.changedThisFrame=m.changedThisFrame||m.southwestMesh!==s,m.southwestMesh=s,void(m.southwestTile=n);case QS.SOUTHEAST:return m.changedThisFrame=m.changedThisFrame||m.southeastMesh!==s,m.southeastMesh=s,void(m.southeastTile=n)}if(n.level<=i.level)return m.changedThisFrame=m.changedThisFrame||c[0]!==s||1!==c.length,c[0]=s,l[0]=n,c.length=1,void(l.length=1);var v,_=n.rectangle,b=i.rectangle;switch(r){case QS.WEST:for(v=(b.north-b.south)*d.EPSILON5,u=0;u<l.length&&(f=l[u],p=f.rectangle,!d.greaterThan(_.north,p.south,v));++u);for(h=u;h<l.length&&(f=l[h],p=f.rectangle,!d.greaterThanOrEquals(_.south,p.north,v));++h);break;case QS.SOUTH:for(v=(b.east-b.west)*d.EPSILON5,u=0;u<l.length&&(f=l[u],p=f.rectangle,!d.lessThan(_.west,p.east,v));++u);for(h=u;h<l.length&&(f=l[h],p=f.rectangle,!d.lessThanOrEquals(_.east,p.west,v));++h);break;case QS.EAST:for(v=(b.north-b.south)*d.EPSILON5,u=0;u<l.length&&(f=l[u],p=f.rectangle,!d.lessThan(_.south,p.north,v));++u);for(h=u;h<l.length&&(f=l[h],p=f.rectangle,!d.lessThanOrEquals(_.north,p.south,v));++h);break;case QS.NORTH:for(v=(b.east-b.west)*d.EPSILON5,u=0;u<l.length&&(f=l[u],p=f.rectangle,!d.greaterThan(_.east,p.west,v));++u);for(h=u;h<l.length&&(f=l[h],p=f.rectangle,!d.greaterThanOrEquals(_.west,p.east,v));++h);}h-u===1?(m.changedThisFrame=m.changedThisFrame||c[u]!==s,c[u]=s,l[u]=n):(m.changedThisFrame=!0,c.splice(u,h-u,s),l.splice(u,h-u,n))}(e,t,n,i,r,c)}(e,t,n,h,s,r,l,u)}}}Hae.updateFillTiles=function(e,t,n,i){var r=e._quadtree,a=r._levelZeroTiles,s=r._lastSelectionFrameNumber,c=Vae;c.clear();for(var l=0;l<t.length;++l){var u=t[l];Object(o.a)(u.data.vertexArray)&&c.enqueue(t[l])}for(var h=c.dequeue();void 0!==h;){var d=h.findTileToWest(a),f=h.findTileToSouth(a),p=h.findTileToEast(a),m=h.findTileToNorth(a);Uae(e,n,h,d,s,QS.EAST,!1,c,i),Uae(e,n,h,f,s,QS.NORTH,!1,c,i),Uae(e,n,h,p,s,QS.WEST,!1,c,i),Uae(e,n,h,m,s,QS.SOUTH,!1,c,i);var g=d.findTileToNorth(a),v=d.findTileToSouth(a),_=p.findTileToNorth(a),b=p.findTileToSouth(a);Uae(e,n,h,g,s,QS.SOUTHEAST,!1,c,i),Uae(e,n,h,_,s,QS.SOUTHWEST,!1,c,i),Uae(e,n,h,v,s,QS.NORTHEAST,!1,c,i),Uae(e,n,h,b,s,QS.NORTHWEST,!1,c,i),h=c.dequeue()}};var Wae=new R,Gae=new R,qae=new O,Yae=new O,$ae=new Mt,Xae=new Mt,Kae=new Mt;function Qae(){this.height=0,this.encodedNormal=new Mt}function Zae(e,t,n,i,r,a,s,c,l){if(Object(o.a)(r))return r;var u;if(Object(o.a)(a)&&Object(o.a)(s))u=.5*(a.height+s.height);else if(Object(o.a)(a))u=a.height;else if(Object(o.a)(s))u=s.height;else if(Object(o.a)(c))u=c.height;else{var h=e.tile.data.tileBoundingRegion,d=0,f=0;Object(o.a)(h)&&(d=h.minimumHeight,f=h.maximumHeight),u=.5*(d+f)}return fse(e,t,n,i,u,l),l}var Jae={minimumHeight:0,maximumHeight:0},ese=new Qae,tse=new Qae,nse=new Qae,ise=new Qae,rse="undefined"!==typeof Uint8Array?new Uint8Array(81):void 0;function ose(e,t,n,i){Cae.initialize(n,e.terrainProvider,e._imageryLayers);var r=n.data,a=r.fill,s=n.rectangle,c=n.tilingScheme.ellipsoid,l=pse(a,c,0,1,a.northwestTile,a.northwestMesh,a.northTiles,a.northMeshes,a.westTiles,a.westMeshes,nse),u=pse(a,c,0,0,a.southwestTile,a.southwestMesh,a.westTiles,a.westMeshes,a.southTiles,a.southMeshes,ese),h=pse(a,c,1,0,a.southeastTile,a.southeastMesh,a.southTiles,a.southMeshes,a.eastTiles,a.eastMeshes,tse),d=pse(a,c,1,1,a.northeastTile,a.northeastMesh,a.eastTiles,a.eastMeshes,a.northTiles,a.northMeshes,ise);l=Zae(a,c,0,1,l,u,d,h,nse),u=Zae(a,c,0,0,u,l,h,d,ese),h=Zae(a,c,1,1,h,u,d,l,tse),d=Zae(a,c,1,1,d,h,l,u,ise);var f,p,m=u.height,g=h.height,v=l.height,_=d.height,b=Math.min(m,g,v,_),y=Math.max(m,g,v,_),w=.5*(b+y),C=e.getLevelMaximumGeometricError(n.level),E=c.maximumRadius-C,A=4*Math.acos(E/c.maximumRadius);if(A*=1.5,s.width>A&&y-b<=C){var x=new Ec({width:9,height:9,buffer:rse,structure:{heightOffset:y}});a.mesh=x._createMeshSync(n.tilingScheme,n.x,n.y,n.level,1)}else{var T=new Bs(void 0,void 0,void 0,void 0,!0,!0),S=Gae;S.longitude=.5*(s.east+s.west),S.latitude=.5*(s.north+s.south),S.height=w,T.center=c.cartographicToCartesian(S,T.center);var D,P=5;for(f=0,p=(D=a.westMeshes).length;f<p;++f)P+=D[f].eastIndicesNorthToSouth.length;for(f=0,p=(D=a.southMeshes).length;f<p;++f)P+=D[f].northIndicesWestToEast.length;for(f=0,p=(D=a.eastMeshes).length;f<p;++f)P+=D[f].westIndicesSouthToNorth.length;for(f=0,p=(D=a.northMeshes).length;f<p;++f)P+=D[f].southIndicesEastToWest.length;var I=Jae;I.minimumHeight=b,I.maximumHeight=y;var M=T.getStride(),R=new Float32Array(P*M),L=0,j=L,F=L=gse(a,c,T,R,L=ase(c,s,T,R,L,0,1,l.height,l.encodedNormal,1,I),a.westTiles,a.westMeshes,QS.EAST,I),N=L=gse(a,c,T,R,L=ase(c,s,T,R,L,0,0,u.height,u.encodedNormal,0,I),a.southTiles,a.southMeshes,QS.NORTH,I),z=L=gse(a,c,T,R,L=ase(c,s,T,R,L,1,0,h.height,h.encodedNormal,0,I),a.eastTiles,a.eastMeshes,QS.WEST,I);L=gse(a,c,T,R,L=ase(c,s,T,R,L,1,1,d.height,d.encodedNormal,1,I),a.northTiles,a.northMeshes,QS.SOUTH,I),b=I.minimumHeight,y=I.maximumHeight;var k=bs.fromRectangle(s,b,y,n.tilingScheme.ellipsoid),B=Vs.geodeticLatitudeToMercatorAngle(s.south),H=1/(Vs.geodeticLatitudeToMercatorAngle(s.north)-B),V=(Vs.geodeticLatitudeToMercatorAngle(S.latitude)-B)*H;c.geodeticSurfaceNormalCartographic(Wae,Yae);var U=xs.octEncode(Yae,$ae),W=L;T.encode(R,L*M,k.center,Mt.fromElements(.5,.5,Kae),w,U,V);var G,q=++L,Y=3*(q-1),$=Y*(q<256?1:2);if((R.length-q*M)*Float32Array.BYTES_PER_ELEMENT>=$){var X=q*M*Float32Array.BYTES_PER_ELEMENT;G=q<256?new Uint8Array(R.buffer,X,Y):new Uint16Array(R.buffer,X,Y)}else G=q<256?new Uint8Array(Y):new Uint16Array(Y);R=new Float32Array(R.buffer,0,q*M);var K=0;for(f=0;f<q-2;++f)G[K++]=W,G[K++]=f,G[K++]=f+1;G[K++]=W,G[K++]=f,G[K++]=0;var Q=[];for(f=F;f>=j;--f)Q.push(f);var Z=[];for(f=N;f>=F;--f)Z.push(f);var J=[];for(f=z;f>=N;--f)J.push(f);var ee=[];for(ee.push(0),f=W-1;f>=z;--f)ee.push(f);a.mesh=new sc(T.center,R,G,Y,q,b,y,gt.fromOrientedBoundingBox(k),function(e,t,n,i,r,o){var a=e.quadtree._occluders.ellipsoid,s=a.ellipsoid,c=wse;return O.fromRadians(n.west,n.south,r,s,c[0]),O.fromRadians(n.east,n.south,r,s,c[1]),O.fromRadians(n.west,n.north,r,s,c[2]),O.fromRadians(n.east,n.north,r,s,c[3]),a.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,o)}(e,k.center,s,b,y),T.getStride(),k,T,t.terrainExaggeration,Q,Z,J,ee)}var te=t.context;Object(o.a)(a.vertexArray)&&(Object(o.a)(i)?i.push(a.vertexArray):Cae._freeVertexArray(a.vertexArray)),a.vertexArray=Cae._createVertexArrayForMesh(te,a.mesh),r.processImagery(n,e.terrainProvider,t,!0);var ne=a.waterMaskTexture;if(a.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){var ie=r._findAncestorTileWithTerrainData(n);Object(o.a)(ie)&&Object(o.a)(ie.data.waterMaskTexture)&&(a.waterMaskTexture=ie.data.waterMaskTexture,++a.waterMaskTexture.referenceCount,r._computeWaterMaskTranslationAndScale(n,ie,a.waterMaskTranslationAndScale))}Object(o.a)(ne)&&(--ne.referenceCount,0===ne.referenceCount&&ne.destroy())}function ase(e,t,n,i,r,o,a,s,c,l,u){var h=Wae;h.longitude=d.lerp(t.west,t.east,o),h.latitude=d.lerp(t.south,t.north,a),h.height=s;var f=e.cartographicToCartesian(h,qae),p=Xae;return p.x=o,p.y=a,n.encode(i,r*n.getStride(),f,p,s,c,l),u.minimumHeight=Math.min(u.minimumHeight,s),u.maximumHeight=Math.max(u.maximumHeight,s),r+1}var sse=new Se;function cse(e,t,n,i){var r=e.rectangle,o=t.rectangle;0===t.x&&1===n.x&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?((r=Se.clone(e.rectangle,sse)).west-=d.TWO_PI,r.east-=d.TWO_PI):0===e.x&&0===n.x&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&((r=Se.clone(e.rectangle,sse)).west+=d.TWO_PI,r.east+=d.TWO_PI);var a=r.east-r.west,s=(o.west-r.west)/a,c=(o.east-r.west)/a,l=r.north-r.south,u=(o.south-r.south)/l,h=(o.north-r.south)/l,f=(n.x-s)/(c-s),p=(n.y-u)/(h-u);return Math.abs(f)<Math.EPSILON5?f=0:Math.abs(f-1)<Math.EPSILON5&&(f=1),Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),i.x=f,i.y=p,i}var lse=new Mt;function use(e,t,n,i,r){var o=e.encoding,a=e.vertices;if(r.height=o.decodeHeight(a,t),o.hasVertexNormals)o.getOctEncodedNormal(a,t,r.encodedNormal);else{var s=r.encodedNormal;s.x=0,s.y=0}}var hse=new Mt,dse=new O;function fse(e,t,n,i,r,o){o.height=r;var a=t.geodeticSurfaceNormalCartographic(Wae,qae);xs.octEncode(a,o.encodedNormal)}function pse(e,t,n,i,r,a,s,c,l,u,h){var d;return yse(e,t,c,s,!1,n,i,h)||yse(e,t,u,l,!0,n,i,h)?h:bse(r,a)?(use(a,0===n?0===i?a.eastIndicesNorthToSouth[0]:a.southIndicesEastToWest[0]:0===i?a.northIndicesWestToEast[0]:a.westIndicesSouthToNorth[0],0,0,h),h):(d=0===n?0===i?mse(e.westMeshes,e.westTiles,QS.EAST,e.southMeshes,e.southTiles,QS.NORTH,n,i):mse(e.northMeshes,e.northTiles,QS.SOUTH,e.westMeshes,e.westTiles,QS.EAST,n,i):0===i?mse(e.southMeshes,e.southTiles,QS.NORTH,e.eastMeshes,e.eastTiles,QS.WEST,n,i):mse(e.eastMeshes,e.eastTiles,QS.WEST,e.northMeshes,e.northTiles,QS.SOUTH,n,i),Object(o.a)(d)?(fse(0,t,0,0,d,h),h):void 0)}function mse(e,t,n,i,r,a,s,c){var l=_se(e,t,!1,n,s,c),u=_se(i,r,!0,a,s,c);return Object(o.a)(l)&&Object(o.a)(u)?.5*(l+u):Object(o.a)(l)?l:u}function gse(e,t,n,i,r,o,a,s,c){for(var l=0;l<o.length;++l)r=vse(e,t,n,i,r,o[l],a[l],s,c);return r}function vse(e,t,n,i,r,o,a,s,c){var l=o.rectangle;s===QS.EAST&&0===e.tile.x?((l=Se.clone(o.rectangle,sse)).west-=d.TWO_PI,l.east-=d.TWO_PI):s===QS.WEST&&0===o.x&&((l=Se.clone(o.rectangle,sse)).west+=d.TWO_PI,l.east+=d.TWO_PI);var u,h,f,p,m=e.tile.rectangle;switch(r>0&&(n.decodeTextureCoordinates(i,r-1,Kae),u=Kae.x,h=Kae.y),s){case QS.WEST:f=a.westIndicesSouthToNorth,p=!1;break;case QS.NORTH:f=a.northIndicesWestToEast,p=!0;break;case QS.EAST:f=a.eastIndicesNorthToSouth,p=!1;break;case QS.SOUTH:f=a.southIndicesEastToWest,p=!0}var g,v,_=o,b=e.tile,y=a.encoding,w=a.vertices,O=n.getStride();y.hasWebMercatorT&&(g=Vs.geodeticLatitudeToMercatorAngle(m.south),v=1/(Vs.geodeticLatitudeToMercatorAngle(m.north)-g));for(var C=0;C<f.length;++C){var E=f[C],A=y.decodeTextureCoordinates(w,E,Kae);cse(_,b,A,A);var x=A.x,T=A.y,S=p?x:T;if(!(S<0||S>1)&&!(Math.abs(x-u)<d.EPSILON5&&Math.abs(T-h)<d.EPSILON5)){var D=Math.abs(x)<d.EPSILON5||Math.abs(x-1)<d.EPSILON5,P=Math.abs(T)<d.EPSILON5||Math.abs(T-1)<d.EPSILON5;if(!D||!P){var I,M=y.decodePosition(w,E,qae),R=y.decodeHeight(w,E);y.hasVertexNormals?I=y.getOctEncodedNormal(w,E,$ae):((I=$ae).x=0,I.y=0);var L=T;if(y.hasWebMercatorT){var j=d.lerp(m.south,m.north,T);L=(Vs.geodeticLatitudeToMercatorAngle(j)-g)*v}n.encode(i,r*O,M,A,R,I,L),c.minimumHeight=Math.min(c.minimumHeight,R),c.maximumHeight=Math.max(c.maximumHeight,R),++r}}}return r}function _se(e,t,n,i,r,a){var s,c,l;n?(s=0,c=e.length,l=1):(s=e.length-1,c=-1,l=-1);for(var u=s;u!==c;u+=l){var h=e[u];if(bse(t[u],h)){var d;switch(i){case QS.WEST:d=h.westIndicesSouthToNorth;break;case QS.SOUTH:d=h.southIndicesEastToWest;break;case QS.EAST:d=h.eastIndicesNorthToSouth;break;case QS.NORTH:d=h.northIndicesWestToEast}var f=d[n?0:d.length-1];if(Object(o.a)(f))return h.encoding.decodeHeight(h.vertices,f)}}}function bse(e,t){return Object(o.a)(t)&&(!Object(o.a)(e.data.fill)||!e.data.fill.changedThisFrame)}function yse(e,t,n,i,r,o,a,s){var c,l,u,h,f,p=i[r?0:n.length-1],m=n[r?0:n.length-1];if(bse(p,m)&&(0===o?0===a?(c=r?m.northIndicesWestToEast:m.eastIndicesNorthToSouth,l=r,u=r):(c=r?m.eastIndicesNorthToSouth:m.southIndicesEastToWest,l=!r,u=!1):0===a?(c=r?m.westIndicesSouthToNorth:m.northIndicesWestToEast,l=!r,u=!0):(c=r?m.southIndicesEastToWest:m.westIndicesSouthToNorth,l=r,u=!r),c.length>0)){f=c[h=r?0:c.length-1],m.encoding.decodeTextureCoordinates(m.vertices,f,Kae);var g=cse(p,e.tile,Kae,Kae);if(g.x===o&&g.y===a)return use(m,f,0,0,s),!0;if(!((h=Ni(c,l?o:a,(function(t,n){m.encoding.decodeTextureCoordinates(m.vertices,t,Kae);var i=cse(p,e.tile,Kae,Kae);return u?l?i.x-o:i.y-a:l?o-i.x:a-i.y})))<0))return use(m,c[h],0,0,s),!0;if((h=~h)>0&&h<c.length)return function(e,t,n,i,r,o,a,s,c,l){var u,h=i.encoding,f=i.vertices,p=cse(t,n,h.decodeTextureCoordinates(f,r,Kae),Kae),m=cse(t,n,h.decodeTextureCoordinates(f,o,Xae),Xae);u=c?(a-p.x)/(m.x-p.x):(s-p.y)/(m.y-p.y);var g,v=h.decodeHeight(f,r),_=h.decodeHeight(f,o),b=n.rectangle;if(Wae.longitude=d.lerp(b.west,b.east,a),Wae.latitude=d.lerp(b.south,b.north,s),l.height=Wae.height=d.lerp(v,_,u),h.hasVertexNormals){var y=h.getOctEncodedNormal(f,r,lse),w=h.getOctEncodedNormal(f,o,hse),C=xs.octDecode(y.x,y.y,qae),E=xs.octDecode(w.x,w.y,dse);g=O.lerp(C,E,u,qae),O.normalize(g,g),xs.octEncode(g,l.encodedNormal)}else g=e.geodeticSurfaceNormalCartographic(Wae,qae),xs.octEncode(g,l.encodedNormal)}(t,p,e.tile,m,c[h-1],c[h],o,a,l,s),!0}return!1}var wse=[new O,new O,new O,new O];var Ose=Hae;function Cse(e){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.terrainProvider))throw new a.a("options.terrainProvider is required.");if(!Object(o.a)(e.imageryLayers))throw new a.a("options.imageryLayers is required.");if(!Object(o.a)(e.surfaceShaderSet))throw new a.a("options.surfaceShaderSet is required.");this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=RR.RECEIVE_ONLY,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new wn.a,this._imageryLayers.layerAdded.addEventListener(Cse.prototype._onLayerAdded,this),this._imageryLayers.layerRemoved.addEventListener(Cse.prototype._onLayerRemoved,this),this._imageryLayers.layerMoved.addEventListener(Cse.prototype._onLayerMoved,this),this._imageryLayers.layerShownOrHidden.addEventListener(Cse.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new wn.a,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new Hf(0,0,.5,1),this._clippingPlanes=void 0,this.cartographicLimitRectangle=Se.clone(Se.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1}function Ese(e,t){var n=e.loadingImagery;Object(o.a)(n)||(n=e.readyImagery);var i=t.loadingImagery;return Object(o.a)(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}function Ase(e,t){var n=t.globeTranslucencyState;if(n.translucent){var i=e.renderState.blending.enabled;n.pushDerivedCommands(e,i,t)}else t.commandList.push(e)}Object.defineProperties(Cse.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._baseColor=e,this._firstPassInitialColor=he.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){if(!Object(o.a)(e))throw new a.a("value is required.");this._quadtree=e}},ready:{get:function(){return this._terrainProvider.ready&&(0===this._imageryLayers.length||this._imageryLayers.get(0).imageryProvider.ready)}},tilingScheme:{get:function(){return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){if(this._terrainProvider!==e){if(!Object(o.a)(e))throw new a.a("terrainProvider is required.");this._terrainProvider=e,Object(o.a)(this._quadtree)&&this._quadtree.invalidateAllTiles()}}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){lH.setOwner(e,this,"_clippingPlanes")}}}),Cse.prototype.update=function(e){this._imageryLayers._update()},Cse.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile((function(e){e.data.imagery.sort(Ese)}))),function(e,t){var n=t.creditDisplay;e._terrainProvider.ready&&Object(o.a)(e._terrainProvider.credit)&&n.addCredit(e._terrainProvider.credit);for(var i=e._imageryLayers,r=0,a=i.length;r<a;++r){var s=i.get(r).imageryProvider;s.ready&&Object(o.a)(s.credit)&&n.addCredit(s.credit)}}(this,e);for(var t=this._vertexArraysToDestroy,n=t.length,i=0;i<n;++i)Cae._freeVertexArray(t[i]);t.length=0},Cse.prototype.beginUpdate=function(e){for(var t=this._tilesToRenderByTextureCount,n=0,i=t.length;n<i;++n){var r=t[n];Object(o.a)(r)&&(r.length=0)}var a=this._clippingPlanes;Object(o.a)(a)&&a.enabled&&a.update(e),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1},Cse.prototype.endUpdate=function(e){if(!Object(o.a)(this._renderState)){this._renderState=XI.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:tR.LESS}}),this._blendRenderState=XI.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:tR.LESS_OR_EQUAL},blending:LP.ALPHA_BLEND});var t=Object(Lf.a)(this._renderState,!0);t.cull.enabled=!1,this._disableCullingRenderState=XI.fromCache(t),(t=Object(Lf.a)(this._blendRenderState,!0)).cull.enabled=!1,this._disableCullingBlendRenderState=XI.fromCache(t)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&Ose.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);for(var n=this._tilesToRenderByTextureCount,i=0,r=n.length;i<r;++i){var a=n[i];if(Object(o.a)(a))for(var s=0,c=a.length;s<c;++s){var l=a[s],u=l.data.tileBoundingRegion;tce(this,l,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,u.minimumHeight)}}},Cse.prototype.updateForPick=function(e){for(var t=this._drawCommands,n=0,i=this._usedDrawCommands;n<i;++n)Ase(t[n],e)},Cse.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()},Cse.prototype.getLevelMaximumGeometricError=function(e){return this._terrainProvider.getLevelMaximumGeometricError(e)},Cse.prototype.loadTile=function(e,t){var n,i=t.data,r=!0;Object(o.a)(i)&&(r=i.boundingVolumeSourceTile!==t||t._lastSelectionResult===Bae.CULLED_BUT_NEEDED,n=i.terrainState),Cae.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this._vertexArraysToDestroy,r),i=t.data,r&&n!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)&&i.boundingVolumeSourceTile===t&&(r=!1,Cae.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this._vertexArraysToDestroy,r))};var xse=new gt,Tse=new Se,Sse=new Se,Dse=new R;function Pse(e,t){if(t.west<t.east)return t;var n=Se.clone(t,Sse);return Se.center(e,Dse).longitude>0?n.east=d.PI:n.west=-d.PI,n}function Ise(e,t){if(t.cameraUnderground)return!0;if(t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;var n=e._clippingPlanes;return!(!Object(o.a)(n)||!n.enabled)||!Se.equals(e.cartographicLimitRectangle,Se.MAX_VALUE)}Cse.prototype.computeTileVisibility=function(e,t,n){var i=this.computeDistanceToTile(e,t);e._distance=i;var r=Ise(this,t);if(t.fog.enabled&&!r&&d.fog(i,t.fog.density)>=1)return tE.NONE;var a=e.data,s=a.tileBoundingRegion;if(void 0===a.boundingVolumeSourceTile)return tE.PARTIAL;var c=t.cullingVolume,l=a.orientedBoundingBox;!Object(o.a)(l)&&Object(o.a)(a.renderedMesh)&&(l=a.renderedMesh.boundingSphere3D),a.clippedByBoundaries=!1;var u=Pse(e.rectangle,this.cartographicLimitRectangle),h=Se.simpleIntersection(u,e.rectangle,Tse);if(!Object(o.a)(h))return tE.NONE;if(Se.equals(h,e.rectangle)||(a.clippedByBoundaries=!0),t.mode!==IR.SCENE3D&&(l=xse,gt.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,l),O.fromElements(l.center.z,l.center.x,l.center.y,l.center),t.mode===IR.MORPHING&&Object(o.a)(a.renderedMesh)&&(l=gt.union(a.renderedMesh.boundingSphere3D,l,l))),!Object(o.a)(l))return Y.INTERSECTING;var f=this._clippingPlanes;if(Object(o.a)(f)&&f.enabled){var p=f.computeIntersectionWithBoundingVolume(l);if(e.isClipped=p!==Y.INSIDE,p===Y.OUTSIDE)return tE.NONE}var m=c.computeVisibility(l);if(m===Y.OUTSIDE)return tE.NONE;var g=t.mode===IR.SCENE3D&&t.camera.frustum instanceof Vb;if(t.mode===IR.SCENE3D&&!g&&Object(o.a)(n)&&!r){var v=a.occludeePointInScaledSpace;return Object(o.a)(v)?n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(v,s.minimumHeight)?m:tE.NONE:m}return m},Cse.prototype.canRefine=function(e){return!!Object(o.a)(e.data.terrainData)||void 0!==this.terrainProvider.getTileDataAvailable(2*e.x,2*e.y,e.level+1)};var Mse=[],Rse=[];Cse.prototype.canRenderWithoutLosingDetail=function(e,t){var n=e.data,i=Mse;i.length=this._imageryLayers.length;var r,a,s,c=!1,l=!1;for(Object(o.a)(n)&&(c=n.terrainState===vae.READY,l=!0,r=n.imagery),a=0,s=i.length;a<s;++a)i[a]=l;if(Object(o.a)(r))for(a=0,s=r.length;a<s;++a){var u=r[a],h=u.loadingImagery,d=!Object(o.a)(h)||h.state===mae.FAILED||h.state===mae.INVALID,f=(u.loadingImagery||u.readyImagery).imageryLayer._layerIndex;i[f]=d&&i[f]}var p=this.quadtree._lastSelectionFrameNumber,m=Rse;for(m.length=0,m.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);m.length>0;){var g=m.pop(),v=g._lastSelectionResultFrame===p?g._lastSelectionResult:Bae.NONE;if(v===Bae.RENDERED){var _=g.data;if(!Object(o.a)(_))continue;if(!c&&g.data.terrainState===vae.READY)return!1;var b=g.data.imagery;for(a=0,s=b.length;a<s;++a){var y=b[a],w=y.loadingImagery,O=!Object(o.a)(w)||w.state===mae.FAILED||w.state===mae.INVALID,C=(y.loadingImagery||y.readyImagery).imageryLayer._layerIndex;if(O&&!i[C])return!1}}else v===Bae.REFINED&&m.push(g.southwestChild,g.southeastChild,g.northwestChild,g.northeastChild)}return!0};var Lse=new O;Cse.prototype.computeTileLoadPriority=function(e,t){var n=e.data;if(void 0===n)return 0;var i=n.orientedBoundingBox;if(void 0===i)return 0;var r=t.camera.positionWC,o=t.camera.directionWC,a=O.subtract(i.center,r,Lse),s=O.magnitude(a);return s<d.EPSILON5?0:(O.divideByScalar(a,s,a),(1-O.dot(a,o))*e._distance)};var jse=new Ae,Fse=new Ae,Nse=new he,zse=new he,kse=new he,Bse=new O,Hse=new O,Vse=new O,Use=new O;Cse.prototype.showTileThisFrame=function(e,t){for(var n=0,i=e.data.imagery,r=0,a=i.length;r<a;++r){var s=i[r];Object(o.a)(s.readyImagery)&&0!==s.readyImagery.imageryLayer.alpha&&++n}var c=this._tilesToRenderByTextureCount[n];Object(o.a)(c)||(c=[],this._tilesToRenderByTextureCount[n]=c),c.push(e);var l=e.data;Object(o.a)(l.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;var u=this._debug;++u.tilesRendered,u.texturesRendered+=n};var Wse=[new O,new O,new O,new O];Cse.prototype.computeDistanceToTile=function(e,t){var n=function(e,t,n){var i=e.data;void 0===i&&(i=e.data=new Cae);void 0===i.tileBoundingRegion&&(i.tileBoundingRegion=new _Q({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:e.tilingScheme.ellipsoid,minimumHeight:0,maximumHeight:0}));var r=i.terrainData,o=i.mesh,a=i.tileBoundingRegion;if(void 0!==o&&void 0!==o.minimumHeight&&void 0!==o.maximumHeight)return a.minimumHeight=o.minimumHeight,a.maximumHeight=o.maximumHeight,e;if(void 0!==r&&void 0!==r._minimumHeight&&void 0!==r._maximumHeight)return a.minimumHeight=r._minimumHeight*n.terrainExaggeration,a.maximumHeight=r._maximumHeight*n.terrainExaggeration,e;a.minimumHeight=Number.NaN,a.maximumHeight=Number.NaN;var s=e.parent;for(;void 0!==s;){var c=s.data;if(void 0!==c){var l=c.mesh;if(void 0!==l&&void 0!==l.minimumHeight&&void 0!==l.maximumHeight)return a.minimumHeight=l.minimumHeight,a.maximumHeight=l.maximumHeight,s;var u=c.terrainData;if(void 0!==u&&void 0!==u._minimumHeight&&void 0!==u._maximumHeight)return a.minimumHeight=u._minimumHeight*n.terrainExaggeration,a.maximumHeight=u._maximumHeight*n.terrainExaggeration,s}s=s.parent}return}(e,this.terrainProvider,t),i=e.data,r=i.tileBoundingRegion;if(void 0===n)return 9999999999;if(i.boundingVolumeSourceTile!==n){i.boundingVolumeSourceTile=n;var a=e.rectangle;Object(o.a)(a)&&(i.orientedBoundingBox=bs.fromRectangle(e.rectangle,r.minimumHeight,r.maximumHeight,e.tilingScheme.ellipsoid,i.orientedBoundingBox),i.occludeePointInScaledSpace=function(e,t,n,i,r,o){var a=e.quadtree._occluders.ellipsoid,s=a.ellipsoid,c=Wse;return O.fromRadians(n.west,n.south,r,s,c[0]),O.fromRadians(n.east,n.south,r,s,c[1]),O.fromRadians(n.west,n.north,r,s,c[2]),O.fromRadians(n.east,n.north,r,s,c[3]),a.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,o)}(this,i.orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}var s=r.minimumHeight,c=r.maximumHeight;if(i.boundingVolumeSourceTile!==e){var l=t.camera.positionCartographic.height;Math.abs(l-s)>Math.abs(l-c)?(r.minimumHeight=s,r.maximumHeight=s):(r.minimumHeight=c,r.maximumHeight=c)}var u=r.distanceToCamera(t);return r.minimumHeight=s,r.maximumHeight=c,u},Cse.prototype.isDestroyed=function(){return!1},Cse.prototype.destroy=function(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),Ks(this)},Cse.prototype._onLayerAdded=function(e,t){if(e.show){var n=this._terrainProvider,i=this,a=e.imageryProvider,s=this._imageryLayersUpdatedEvent;a._reload=function(){e._imageryCache={},i._quadtree.forEachLoadedTile((function(t){if(!Object(o.a)(t._loadedCallbacks[e._layerIndex])){var i,a=t.data.imagery,s=a.length,c=-1,l=0;for(i=0;i<s;++i){var u=a[i];if(Object(r.a)(u.readyImagery,u.loadingImagery).imageryLayer===e)-1===c&&(c=i),++l;else if(-1!==c)break}if(-1!==c){var h=c+l;e._createTileImagerySkeletons(t,n,h)&&(t._loadedCallbacks[e._layerIndex]=function(e,t,n){return function(i){var a,s,c,l=-1,u=i.data.imagery,h=u.length;for(c=0;c<h;++c)if(a=u[c],(s=Object(r.a)(a.readyImagery,a.loadingImagery)).imageryLayer===t){l=c;break}if(-1!==l){var d=l+e;if(a=u[d],s=Object(o.a)(a)?Object(r.a)(a.readyImagery,a.loadingImagery):void 0,!Object(o.a)(s)||s.imageryLayer!==t)return!t._createTileImagerySkeletons(i,n,d);for(c=l;c<d;++c)u[c].freeResources();u.splice(l,e)}return!0}}(l,e,n),t.state=gae.LOADING)}}}))},this._quadtree.forEachLoadedTile((function(t){e._createTileImagerySkeletons(t,n)&&(t.state=gae.LOADING,0===t.level||t._lastSelectionResultFrame===i.quadtree._lastSelectionFrameNumber&&t._lastSelectionResult===Bae.RENDERED||(t.renderable=!1))})),this._layerOrderChanged=!0,s.raiseEvent()}},Cse.prototype._onLayerRemoved=function(e,t){this._quadtree.forEachLoadedTile((function(t){for(var n=t.data.imagery,i=-1,r=0,a=0,s=n.length;a<s;++a){var c=n[a],l=c.loadingImagery;if(Object(o.a)(l)||(l=c.readyImagery),l.imageryLayer===e)-1===i&&(i=a),c.freeResources(),++r;else if(-1!==i)break}-1!==i&&n.splice(i,r)})),Object(o.a)(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()},Cse.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()},Cse.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Gse,qse,Yse,$se=new Ae;function Xse(e,t){var n={u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){var t=e.context.uniformState.view,n=Ae.multiplyByPoint(t,this.properties.rtc,Hse);return Ae.setTranslation(t,n,jse),jse},u_modifiedModelViewProjection:function(){var t=e.context.uniformState.view,n=e.context.uniformState.projection,i=Ae.multiplyByPoint(t,this.properties.rtc,Hse);return Ae.setTranslation(t,i,Fse),Ae.multiply(n,Fse,Fse),Fse},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){var n=t._clippingPlanes;return Object(o.a)(n)&&Object(o.a)(n.texture)?n.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){var n=t._clippingPlanes;return Object(o.a)(n)?Ae.multiply(e.context.uniformState.view,n.modelMatrix,$se):Ae.IDENTITY},u_clippingPlanesEdgeStyle:function(){var e=this.properties.clippingPlanesEdgeColor;return e.alpha=this.properties.clippingPlanesEdgeWidth,e},u_minimumBrightness:function(){return e.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},properties:{initialColor:new he(0,0,.5,1),fillHighlightColor:new Hf(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new Mt(65e5,9e6),nightFadeDistance:new Mt(1e7,4e7),hsbShift:new O,center3D:void 0,rtc:new O,modifiedModelView:new Ae,tileRectangle:new he,dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new Mt,southMercatorYAndOneOverHeight:new Mt,waterMask:void 0,waterMaskTranslationAndScale:new he,minMaxHeight:new Mt,scaleAndBias:new Ae,clippingPlanesEdgeColor:Hf.clone(Hf.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new he,frontFaceAlphaByDistance:new he,backFaceAlphaByDistance:new he,localizedTranslucencyRectangle:new he,undergroundColor:Hf.clone(Hf.TRANSPARENT),undergroundColorAlphaByDistance:new he}};return Object(o.a)(t.materialUniformMap)?Object(Wf.a)(n,t.materialUniformMap):n}function Kse(e,t,n){var i,r,a=n.data;if(Object(o.a)(a.vertexArray)?(i=a.mesh,r=a.vertexArray):Object(o.a)(a.fill)&&Object(o.a)(a.fill.vertexArray)&&(i=a.fill.mesh,r=a.fill.vertexArray),Object(o.a)(i)&&Object(o.a)(r)){if(Object(o.a)(a.wireframeVertexArray)){if(a.wireframeVertexArray.mesh===i)return;a.wireframeVertexArray.destroy(),a.wireframeVertexArray=void 0}a.wireframeVertexArray=function(e,t,n){var i={indices:n.indices,primitiveType:xl.TRIANGLES};jd.toWireframe(i);var r=i.indices,o=oR.createIndexBuffer({context:e,typedArray:r,usage:iR.STATIC_DRAW,indexDatatype:lc.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new hR({context:e,attributes:t._attributes,indexBuffer:o})}(e,r,i),a.wireframeVertexArray.mesh=i}}!function(){var e,t,n=new fh({geometry:ru.fromDimensions({dimensions:new O(2,2,2)})}),i=new fh({geometry:new qS({radius:1})}),r=new Ae;function a(e){return new bL({geometryInstances:e,appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1})}Gse=function(i,o){return i===e?t:(Yse(),e=i,r=Ae.fromRotationTranslation(i.halfAxes,i.center,r),n.modelMatrix=r,n.attributes.color=Uf.fromColor(o),t=a(n))},qse=function(n,o){return n===e?t:(Yse(),e=n,r=Ae.fromTranslation(n.center,r),r=Ae.multiplyByUniformScale(r,n.radius,r),i.modelMatrix=r,i.attributes.color=Uf.fromColor(o),t=a(i))},Yse=function(){Object(o.a)(t)&&(t.destroy(),t=void 0,e=void 0)}}();var Qse=new he(0,0,0,0),Zse={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0},Jse=Hf.TRANSPARENT,ece=new JC;function tce(e,t,n){var i=t.data;Object(o.a)(i.vertexArray)||(void 0===i.fill&&(i.fill=new Ose(t)),i.fill.update(e,n));var s=n.creditDisplay,c=i.terrainData;if(Object(o.a)(c)&&Object(o.a)(c.credits))for(var l=c.credits,u=0,h=l.length;u<h;++u)s.addCredit(l[u]);var f=BP.maximumTextureImageUnits,p=i.waterMaskTexture,m=i.waterMaskTranslationAndScale;!Object(o.a)(p)&&Object(o.a)(i.fill)&&(p=i.fill.waterMaskTexture,m=i.fill.waterMaskTranslationAndScale);var g=n.cameraUnderground,v=n.globeTranslucencyState,_=v.translucent,b=v.frontFaceAlphaByDistance,y=v.backFaceAlphaByDistance,w=v.rectangle,C=Object(r.a)(e.undergroundColor,Jse),E=Object(r.a)(e.undergroundColorAlphaByDistance,ece),A=Ise(e,n)&&n.mode===IR.SCENE3D&&C.alpha>0&&(E.nearValue>0||E.farValue>0),x=e.hasWaterMask&&Object(o.a)(p),T=e.oceanNormalMap,S=x&&Object(o.a)(T),D=e.terrainProvider.ready&&e.terrainProvider.hasVertexNormals,P=n.fog.enabled&&!g,I=e.showGroundAtmosphere&&n.mode===IR.SCENE3D,M=RR.castShadows(e.shadows)&&!_,R=RR.receiveShadows(e.shadows)&&!_,L=e.hueShift,j=e.saturationShift,F=e.brightnessShift,N=!(d.equalsEpsilon(L,0,d.EPSILON7)&&d.equalsEpsilon(j,0,d.EPSILON7)&&d.equalsEpsilon(F,0,d.EPSILON7)),z=!1;I&&(z=O.magnitude(n.camera.positionWC)>e.nightFadeOutDistance);x&&--f,S&&--f,Object(o.a)(n.shadowState)&&n.shadowState.shadowsEnabled&&--f,Object(o.a)(e.clippingPlanes)&&e.clippingPlanes.enabled&&--f,f-=v.numberOfTextureUniforms;var k=i.renderedMesh,B=k.center,H=k.encoding,V=Nse,U=0,W=0,G=0,q=0,Y=!1;if(n.mode!==IR.SCENE3D){var $=n.mapProjection,X=$.project(Se.southwest(t.rectangle),Vse),K=$.project(Se.northeast(t.rectangle),Use);if(V.x=X.x,V.y=X.y,V.z=K.x,V.w=K.y,n.mode!==IR.MORPHING&&((B=Bse).x=0,B.y=.5*(V.z+V.x),B.z=.5*(V.w+V.y),V.x-=B.y,V.y-=B.z,V.z-=B.y,V.w-=B.z),n.mode===IR.SCENE2D&&H.quantization===Ps.BITS12){var Q=1/(Math.pow(2,12)-1)*.5,Z=(V.z-V.x)*Q,J=(V.w-V.y)*Q;V.x-=Z,V.y-=J,V.z+=Z,V.w+=J}$ instanceof Vs&&(U=t.rectangle.south,W=t.rectangle.north,G=Vs.geodeticLatitudeToMercatorAngle(U),q=1/(Vs.geodeticLatitudeToMercatorAngle(W)-G),Y=!0)}var ee=Zse;ee.frameState=n,ee.surfaceTile=i,ee.showReflectiveOcean=x,ee.showOceanWaves=S,ee.enableLighting=e.enableLighting,ee.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,ee.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,ee.showGroundAtmosphere=I,ee.perFragmentGroundAtmosphere=z,ee.hasVertexNormals=D,ee.useWebMercatorProjection=Y,ee.clippedByBoundaries=i.clippedByBoundaries;var te=i.imagery,ne=0,ie=te.length,re=e.showSkirts&&!g&&!_,oe=e.backFaceCulling&&!g&&!_,ae=oe?e._renderState:e._disableCullingRenderState,se=oe?e._blendRenderState:e._disableCullingBlendRenderState,ce=ae,le=e._firstPassInitialColor,ue=n.context;if(Object(o.a)(e._debug.boundingSphereTile)||Yse(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;for(var de=e._drawCommands.length,fe=0;fe<de;++fe)e._uniformMaps[fe]=Xse(n,e)}do{var pe,me,ge=0;if(e._drawCommands.length<=e._usedDrawCommands?((pe=new CI).owner=t,pe.cull=!1,pe.boundingVolume=new gt,pe.orientedBoundingBox=void 0,me=Xse(n,e),e._drawCommands.push(pe),e._uniformMaps.push(me)):(pe=e._drawCommands[e._usedDrawCommands],me=e._uniformMaps[e._usedDrawCommands]),pe.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){var ve=i.orientedBoundingBox;Object(o.a)(ve)?Gse(ve,Hf.RED).update(n):Object(o.a)(k)&&Object(o.a)(k.boundingSphere3D)&&qse(k.boundingSphere3D,Hf.RED).update(n)}var _e=me.properties;he.clone(le,_e.initialColor),_e.oceanNormalMap=T,_e.lightingFadeDistance.x=e.lightingFadeOutDistance,_e.lightingFadeDistance.y=e.lightingFadeInDistance,_e.nightFadeDistance.x=e.nightFadeOutDistance,_e.nightFadeDistance.y=e.nightFadeInDistance,_e.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;var be=g?y:b,ye=g?b:y;Object(o.a)(be)&&(he.fromElements(be.near,be.nearValue,be.far,be.farValue,_e.frontFaceAlphaByDistance),he.fromElements(ye.near,ye.nearValue,ye.far,ye.farValue,_e.backFaceAlphaByDistance)),he.fromElements(E.near,E.nearValue,E.far,E.farValue,_e.undergroundColorAlphaByDistance),Hf.clone(C,_e.undergroundColor);var we=!Object(o.a)(i.vertexArray)&&Object(o.a)(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;we&&Hf.clone(e.fillHighlightColor,_e.fillHighlightColor),_e.center3D=k.center,O.clone(B,_e.rtc),he.clone(V,_e.tileRectangle),_e.southAndNorthLatitude.x=U,_e.southAndNorthLatitude.y=W,_e.southMercatorYAndOneOverHeight.x=G,_e.southMercatorYAndOneOverHeight.y=q;var Oe=zse,Ce=Pse(t.rectangle,e.cartographicLimitRectangle),Ee=kse,xe=Pse(t.rectangle,w);O.fromElements(L,j,F,_e.hsbShift);var Te=t.rectangle,De=1/Te.width,Pe=1/Te.height;Oe.x=(Ce.west-Te.west)*De,Oe.y=(Ce.south-Te.south)*Pe,Oe.z=(Ce.east-Te.west)*De,Oe.w=(Ce.north-Te.south)*Pe,he.clone(Oe,_e.localizedCartographicLimitRectangle),Ee.x=(xe.west-Te.west)*De,Ee.y=(xe.south-Te.south)*Pe,Ee.z=(xe.east-Te.west)*De,Ee.w=(xe.north-Te.south)*Pe,he.clone(Ee,_e.localizedTranslucencyRectangle);var Ie=P&&d.fog(t._distance,n.fog.density)>d.EPSILON3;N=N&&(Ie||I);for(var Me=!1,Re=!1,Le=!1,je=!1,Fe=!1,Ne=!1,ze=!1,ke=!1,Be=!1,He=!1;ge<f&&ne<ie;){var Ve=te[ne],Ue=Ve.readyImagery;if(++ne,Object(o.a)(Ue)&&0!==Ue.imageryLayer.alpha){var We=Ve.useWebMercatorT?Ue.textureWebMercator:Ue.texture;if(!Object(o.a)(We))throw new a.a("readyImagery is not actually ready!");var Ge=Ue.imageryLayer;Object(o.a)(Ve.textureTranslationAndScale)||(Ve.textureTranslationAndScale=Ge._calculateTextureTranslationAndScale(t,Ve)),_e.dayTextures[ge]=We,_e.dayTextureTranslationAndScale[ge]=Ve.textureTranslationAndScale,_e.dayTextureTexCoordsRectangle[ge]=Ve.textureCoordinateRectangle,_e.dayTextureUseWebMercatorT[ge]=Ve.useWebMercatorT,_e.dayTextureAlpha[ge]=Ge.alpha,Ne=Ne||1!==_e.dayTextureAlpha[ge],_e.dayTextureNightAlpha[ge]=Ge.nightAlpha,ze=ze||1!==_e.dayTextureNightAlpha[ge],_e.dayTextureDayAlpha[ge]=Ge.dayAlpha,ze=ze||1!==_e.dayTextureDayAlpha[ge],_e.dayTextureBrightness[ge]=Ge.brightness,Me=Me||_e.dayTextureBrightness[ge]!==zae.DEFAULT_BRIGHTNESS,_e.dayTextureContrast[ge]=Ge.contrast,Re=Re||_e.dayTextureContrast[ge]!==zae.DEFAULT_CONTRAST,_e.dayTextureHue[ge]=Ge.hue,Le=Le||_e.dayTextureHue[ge]!==zae.DEFAULT_HUE,_e.dayTextureSaturation[ge]=Ge.saturation,je=je||_e.dayTextureSaturation[ge]!==zae.DEFAULT_SATURATION,_e.dayTextureOneOverGamma[ge]=1/Ge.gamma,Fe=Fe||_e.dayTextureOneOverGamma[ge]!==1/zae.DEFAULT_GAMMA,_e.dayTextureSplit[ge]=Ge.splitDirection,ke=ke||0!==_e.dayTextureSplit[ge];var qe=_e.dayTextureCutoutRectangles[ge];if(Object(o.a)(qe)||(qe=_e.dayTextureCutoutRectangles[ge]=new he),he.clone(he.ZERO,qe),Object(o.a)(Ge.cutoutRectangle)){var Ye=Pse(Te,Ge.cutoutRectangle),$e=Se.simpleIntersection(Ye,Te,Tse);Be=Object(o.a)($e)||Be,qe.x=(Ye.west-Te.west)*De,qe.y=(Ye.south-Te.south)*Pe,qe.z=(Ye.east-Te.west)*De,qe.w=(Ye.north-Te.south)*Pe}var Xe=_e.colorsToAlpha[ge];Object(o.a)(Xe)||(Xe=_e.colorsToAlpha[ge]=new he);var Ke=Object(o.a)(Ge.colorToAlpha)&&Ge.colorToAlphaThreshold>0;if(He=He||Ke,Ke){var Qe=Ge.colorToAlpha;Xe.x=Qe.red,Xe.y=Qe.green,Xe.z=Qe.blue,Xe.w=Ge.colorToAlphaThreshold}else Xe.w=-1;if(Object(o.a)(Ue.credits))for(var Ze=Ue.credits,Je=0,et=Ze.length;Je<et;++Je)s.addCredit(Ze[Je]);++ge}}_e.dayTextures.length=ge,_e.waterMask=p,he.clone(m,_e.waterMaskTranslationAndScale),_e.minMaxHeight.x=H.minimumHeight,_e.minMaxHeight.y=H.maximumHeight,Ae.clone(H.matrix,_e.scaleAndBias);var tt=e._clippingPlanes,nt=Object(o.a)(tt)&&tt.enabled&&t.isClipped;nt&&(_e.clippingPlanesEdgeColor=Hf.clone(tt.edgeColor,_e.clippingPlanesEdgeColor),_e.clippingPlanesEdgeWidth=tt.edgeWidth),ee.numberOfDayTextures=ge,ee.applyBrightness=Me,ee.applyContrast=Re,ee.applyHue=Le,ee.applySaturation=je,ee.applyGamma=Fe,ee.applyAlpha=Ne,ee.applyDayNightAlpha=ze,ee.applySplit=ke,ee.enableFog=Ie,ee.enableClippingPlanes=nt,ee.clippingPlanes=tt,ee.hasImageryLayerCutout=Be,ee.colorCorrect=N,ee.highlightFillTile=we,ee.colorToAlpha=He,ee.showUndergroundColor=A,ee.translucent=_;var it=i.renderedMesh.indices.length;re||(it=i.renderedMesh.indexCountWithoutSkirts),pe.shaderProgram=e._surfaceShaderSet.getShaderProgram(ee),pe.castShadows=M,pe.receiveShadows=R,pe.renderState=ce,pe.primitiveType=xl.TRIANGLES,pe.vertexArray=i.vertexArray||i.fill.vertexArray,pe.count=it,pe.uniformMap=me,pe.pass=EI.GLOBE,e._debug.wireframe&&(Kse(ue,0,t),Object(o.a)(i.wireframeVertexArray)&&(pe.vertexArray=i.wireframeVertexArray,pe.primitiveType=xl.LINES,pe.count=2*it));var rt=pe.boundingVolume,ot=pe.orientedBoundingBox;if(n.mode!==IR.SCENE3D){var at=i.tileBoundingRegion;gt.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,at.minimumHeight,at.maximumHeight,rt),O.fromElements(rt.center.z,rt.center.x,rt.center.y,rt.center),n.mode===IR.MORPHING&&(rt=gt.union(k.boundingSphere3D,rt,rt))}else pe.boundingVolume=gt.clone(k.boundingSphere3D,rt),pe.orientedBoundingBox=bs.clone(i.orientedBoundingBox,ot);pe.dirty=!0,_&&v.updateDerivedCommands(pe,n),Ase(pe,n),ce=se,le=Qse}while(ne<ie)}var nce=Cse;function ice(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=Se.clone(Se.MAX_VALUE)}Object.defineProperties(ice.prototype,{enabled:{get:function(){return this._enabled},set:function(e){i.a.typeOf.bool("enabled",e),this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){i.a.typeOf.number.greaterThanOrEquals("frontFaceAlpha",e,0),i.a.typeOf.number.lessThanOrEquals("frontFaceAlpha",e,1),this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){if(Object(o.a)(e)&&e.far<e.near)throw new a.a("far distance must be greater than near distance.");this._frontFaceAlphaByDistance=JC.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){i.a.typeOf.number.greaterThanOrEquals("backFaceAlpha",e,0),i.a.typeOf.number.lessThanOrEquals("backFaceAlpha",e,1),this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){if(Object(o.a)(e)&&e.far<e.near)throw new a.a("far distance must be greater than near distance.");this._backFaceAlphaByDistance=JC.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){Object(o.a)(e)||(e=Se.clone(Se.MAX_VALUE)),Se.clone(e,this._rectangle)}}});var rce=ice;function oce(){this._layers=[],this.layerAdded=new wn.a,this.layerRemoved=new wn.a,this.layerMoved=new wn.a,this.layerShownOrHidden=new wn.a}function ace(e,t){if(!Object(o.a)(t))throw new a.a("layer is required.");var n=e.indexOf(t);if(-1===n)throw new a.a("layer is not in this collection.");return n}function sce(e,t,n){var i=e._layers;if((t=d.clamp(t,0,i.length-1))!==(n=d.clamp(n,0,i.length-1))){var r=i[t];i[t]=i[n],i[n]=r,e._update(),e.layerMoved.raiseEvent(r,n,t)}}Object.defineProperties(oce.prototype,{length:{get:function(){return this._layers.length}}}),oce.prototype.add=function(e,t){var n=Object(o.a)(t);if(!Object(o.a)(e))throw new a.a("layer is required.");if(n){if(t<0)throw new a.a("index must be greater than or equal to zero.");if(t>this._layers.length)throw new a.a("index must be less than or equal to the number of layers.")}n?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t)},oce.prototype.addImageryProvider=function(e,t){if(!Object(o.a)(e))throw new a.a("imageryProvider is required.");var n=new zae(e);return this.add(n,t),n},oce.prototype.remove=function(e,t){t=Object(r.a)(t,!0);var n=this._layers.indexOf(e);return-1!==n&&(this._layers.splice(n,1),this._update(),this.layerRemoved.raiseEvent(e,n),t&&e.destroy(),!0)},oce.prototype.removeAll=function(e){e=Object(r.a)(e,!0);for(var t=this._layers,n=0,i=t.length;n<i;n++){var o=t[n];this.layerRemoved.raiseEvent(o,n),e&&o.destroy()}this._layers=[]},oce.prototype.contains=function(e){return-1!==this.indexOf(e)},oce.prototype.indexOf=function(e){return this._layers.indexOf(e)},oce.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.","index");return this._layers[e]},oce.prototype.raise=function(e){var t=ace(this._layers,e);sce(this,t,t+1)},oce.prototype.lower=function(e){var t=ace(this._layers,e);sce(this,t,t-1)},oce.prototype.raiseToTop=function(e){var t=ace(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))},oce.prototype.lowerToBottom=function(e){var t=ace(this._layers,e);0!==t&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var cce=new Se;oce.prototype.pickImageryLayerFeatures=function(e,t){var n=t.globe.pick(e,t);if(Object(o.a)(n)){for(var i,r=t.globe.ellipsoid.cartesianToCartographic(n),a=t.globe._surface._tilesToRender,s=0;!Object(o.a)(i)&&s<a.length;++s){var c=a[s];Se.contains(c.rectangle,r)&&(i=c)}if(Object(o.a)(i)){for(var l=i.data.imagery,u=[],h=[],f=l.length-1;f>=0;--f){var p=l[f],m=p.readyImagery;if(Object(o.a)(m)){var g=m.imageryLayer.imageryProvider;if(Object(o.a)(g.pickFeatures)&&Se.contains(m.rectangle,r)){var v=cce;if(v.west=d.lerp(i.rectangle.west,i.rectangle.east,p.textureCoordinateRectangle.x-1/1024),v.east=d.lerp(i.rectangle.west,i.rectangle.east,p.textureCoordinateRectangle.z+1/1024),v.south=d.lerp(i.rectangle.south,i.rectangle.north,p.textureCoordinateRectangle.y-1/1024),v.north=d.lerp(i.rectangle.south,i.rectangle.north,p.textureCoordinateRectangle.w+1/1024),Se.contains(v,r)){var _=g.pickFeatures(m.x,m.y,m.level,r.longitude,r.latitude);Object(o.a)(_)&&(u.push(_),h.push(m.imageryLayer))}}}}if(0!==u.length)return Yt.a.all(u,(function(e){for(var t=[],n=0;n<e.length;++n){var i=e[n],a=h[n];if(Object(o.a)(i)&&i.length>0)for(var s=0;s<i.length;++s){var c=i[s];c.imageryLayer=a,Object(o.a)(c.position)||(c.position=r),t.push(c)}}return t}))}}},oce.prototype.queueReprojectionCommands=function(e){for(var t=this._layers,n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)},oce.prototype.cancelReprojections=function(){for(var e=this._layers,t=0,n=e.length;t<n;++t)e[t].cancelReprojections()},oce.prototype.isDestroyed=function(){return!1},oce.prototype.destroy=function(){return this.removeAll(!0),Ks(this)},oce.prototype._update=function(){var e,t,n,i,r=!0,a=this._layers;for(n=0,i=a.length;n<i;++n)(t=a[n])._layerIndex=n,t.show?(t._isBaseLayer=r,r=!1):t._isBaseLayer=!1,t.show!==t._show&&(Object(o.a)(t._show)&&(Object(o.a)(e)||(e=[]),e.push(t)),t._show=t.show);if(Object(o.a)(e))for(n=0,i=e.length;n<i;++n)t=e[n],this.layerShownOrHidden.raiseEvent(t,t._layerIndex,t.show)};var lce=oce;function uce(e){this._ellipsoid=new Un(e.ellipsoid,O.ZERO)}Object.defineProperties(uce.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var hce=uce;function dce(e){if(!Object(o.a)(e))throw new a.a("options is required.");if(!Object(o.a)(e.x))throw new a.a("options.x is required.");if(!Object(o.a)(e.y))throw new a.a("options.y is required.");if(e.x<0||e.y<0)throw new a.a("options.x and options.y must be greater than or equal to zero.");if(!Object(o.a)(e.level))throw new a.a("options.level is required and must be greater than or equal to zero.");if(!Object(o.a)(e.tilingScheme))throw new a.a("options.tilingScheme is required.");this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=[],this._frameUpdated=void 0,this._lastSelectionResult=Bae.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this.state=gae.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}function fce(e){Object(o.a)(e)&&e.freeResources()}dce.createLevelZeroTiles=function(e){if(!Object(o.a)(e))throw new a.a("tilingScheme is required.");for(var t=e.getNumberOfXTilesAtLevel(0),n=e.getNumberOfYTilesAtLevel(0),i=new Array(t*n),r=0,s=0;s<n;++s)for(var c=0;c<t;++c)i[r++]=new dce({tilingScheme:e,x:c,y:s,level:0});return i},dce.prototype._updateCustomData=function(e,t,n){var i,r,a,s=this.customData;if(Object(o.a)(t)&&Object(o.a)(n)){for(s=s.filter((function(e){return-1===n.indexOf(e)})),this._customData=s,a=this._rectangle,i=0;i<t.length;++i)r=t[i],Se.contains(a,r.positionCartographic)&&s.push(r);this._frameUpdated=e}else{var c=this._parent;if(Object(o.a)(c)&&this._frameUpdated!==c._frameUpdated){s.length=0,a=this._rectangle;var l=c.customData;for(i=0;i<l.length;++i)r=l[i],Se.contains(a,r.positionCartographic)&&s.push(r);this._frameUpdated=c._frameUpdated}}},Object.defineProperties(dce.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return Object(o.a)(this._southwestChild)||(this._southwestChild=new dce({tilingScheme:this.tilingScheme,x:2*this.x,y:2*this.y+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return Object(o.a)(this._southeastChild)||(this._southeastChild=new dce({tilingScheme:this.tilingScheme,x:2*this.x+1,y:2*this.y+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return Object(o.a)(this._northwestChild)||(this._northwestChild=new dce({tilingScheme:this.tilingScheme,x:2*this.x,y:2*this.y,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return Object(o.a)(this._northeastChild)||(this._northeastChild=new dce({tilingScheme:this.tilingScheme,x:2*this.x+1,y:2*this.y,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<gae.DONE}},eligibleForUnloading:{get:function(){var e=!0;return Object(o.a)(this.data)&&(e=this.data.eligibleForUnloading,Object(o.a)(e)||(e=!0)),e}}}),dce.prototype.findLevelZeroTile=function(e,t,n){var i=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=i:t>=i&&(t-=i),!(n<0||n>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter((function(e){return e.x===t&&e.y===n}))[0]},dce.prototype.findTileToWest=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;var n=t.findTileToWest(e);return void 0!==n?t.southwestChild===this?n.southeastChild:n.northeastChild:void 0},dce.prototype.findTileToEast=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;var n=t.findTileToEast(e);return void 0!==n?t.southeastChild===this?n.southwestChild:n.northwestChild:void 0},dce.prototype.findTileToSouth=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;var n=t.findTileToSouth(e);return void 0!==n?t.southwestChild===this?n.northwestChild:n.northeastChild:void 0},dce.prototype.findTileToNorth=function(e){var t=this.parent;if(void 0===t)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;var n=t.findTileToNorth(e);return void 0!==n?t.northwestChild===this?n.southwestChild:n.southeastChild:void 0},dce.prototype.freeResources=function(){this.state=gae.START,this.renderable=!1,this.upsampledFromParent=!1,Object(o.a)(this.data)&&Object(o.a)(this.data.freeResources)&&this.data.freeResources(),fce(this._southwestChild),this._southwestChild=void 0,fce(this._southeastChild),this._southeastChild=void 0,fce(this._northwestChild),this._northwestChild=void 0,fce(this._northeastChild),this._northeastChild=void 0};var pce=dce;function mce(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}function gce(e,t){var n=t.replacementPrevious,i=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=i),t===e.head?e.head=i:n.replacementNext=i,t===e.tail?e.tail=n:i.replacementPrevious=n,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}mce.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head},mce.prototype.trimTiles=function(e){for(var t=this.tail,n=!0;n&&Object(o.a)(this._lastBeforeStartOfFrame)&&this.count>e&&Object(o.a)(t);){n=t!==this._lastBeforeStartOfFrame;var i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),gce(this,t)),t=i}},mce.prototype.markTileRendered=function(e){var t=this.head;if(t!==e){if(++this.count,!Object(o.a)(t))return e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,void(this.tail=e);(Object(o.a)(e.replacementPrevious)||Object(o.a)(e.replacementNext))&&gce(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e}else e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext)};var vce,_ce=mce;function bce(e){if(!Object(o.a)(e)||!Object(o.a)(e.tileProvider))throw new a.a("options.tileProvider is required.");if(Object(o.a)(e.tileProvider.quadtree))throw new a.a("A QuadtreeTileProvider can only be used with a single QuadtreePrimitive");this._tileProvider=e.tileProvider,this._tileProvider.quadtree=this,this._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};var t=this._tileProvider.tilingScheme.ellipsoid;this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new _ce,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._lastTileIndex=0,this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=Object(r.a)(e.maximumScreenSpaceError,2),this.tileCacheSize=Object(r.a)(e.tileCacheSize,100),this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new hce({ellipsoid:t}),this._tileLoadProgressEvent=new wn.a,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}function yce(e){var t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}Object.defineProperties(bce.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}}),bce.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0},bce.prototype.forEachLoadedTile=function(e){for(var t=this._tileReplacementQueue.head;Object(o.a)(t);)t.state!==gae.START&&e(t),t=t.replacementNext},bce.prototype.forEachRenderedTile=function(e){for(var t=this._tilesToRender,n=0,i=t.length;n<i;++n)e(t[n])},bce.prototype.updateHeight=function(e,t){var n=this,i={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t,removeFunc:function(){for(var e=n._addHeightCallbacks,t=e.length,r=0;r<t;++r)if(e[r]===i){e.splice(r,1);break}n._removeHeightCallbacks.push(i)}};return n._addHeightCallbacks.push(i),i.removeFunc},bce.prototype.update=function(e){Object(o.a)(this._tileProvider.update)&&this._tileProvider.update(e)},bce.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(!function(e){var t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,yce(e);var n=e._levelZeroTiles;if(Object(o.a)(n))for(var i=0;i<n.length;++i){for(var r=n[i].customData,a=r.length,s=0;s<a;++s){var c=r[s];c.level=0,e._addHeightCallbacks.push(c)}n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),yce(this),this._debug.suspendLodUpdate||this._tileReplacementQueue.markStartOfRenderFrame())},bce.prototype.render=function(e){var t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),function(e,t){var n,i=e._debug;if(i.suspendLodUpdate)return;e._tilesToRender.length=0;var r,a=e._tileProvider;if(!Object(o.a)(e._levelZeroTiles)){if(!a.ready)return;var s=a.tilingScheme;e._levelZeroTiles=pce.createLevelZeroTiles(s);var c=e._levelZeroTiles.length;if(Ece.length<c)for(Ece=new Array(c),n=0;n<c;++n)void 0===Ece[n]&&(Ece[n]=new xce)}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;var l=e._levelZeroTiles,u=l.length>1?e._occluders:void 0;vce=t.camera.positionCartographic,l.sort(Oce);var h,d=e._addHeightCallbacks,f=e._removeHeightCallbacks,p=t.frameNumber;if(d.length>0||f.length>0){for(n=0,h=l.length;n<h;++n)(r=l[n])._updateCustomData(p,d,f);d.length=0,f.length=0}var m=t.camera;e._cameraPositionCartographic=m.positionCartographic;var g=Ae.getTranslation(m.transform,Cce);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(g,e._cameraReferenceFrameOriginCartographic),n=0,h=l.length;n<h;++n)r=l[n],e._tileReplacementQueue.markTileRendered(r),r.renderable?Ice(e,r,a,t,u,!1,Ece[n]):(Ace(e,e._tileLoadQueueHigh,r,t),++i.tilesWaitingForChildren);e._lastSelectionFrameNumber=p}(this,e),function(e,t){for(var n=e._tileProvider,i=e._tilesToRender,r=0,o=i.length;r<o;++r){var a=i[r];n.showTileThisFrame(a,t)}}(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)},bce.prototype.endFrame=function(e){e.passes.render&&e.mode!==IR.MORPHING&&(function(e,t){var n=e._tileLoadQueueHigh,i=e._tileLoadQueueMedium,r=e._tileLoadQueueLow;if(0===n.length&&0===i.length&&0===r.length)return;e._tileReplacementQueue.trimTiles(e.tileCacheSize);var o=Sf()+e._loadQueueTimeSlice,a=e._tileProvider,s=Lce(e,t,a,o,n,!1);s=Lce(e,t,a,o,i,s),Lce(e,t,a,o,r,s)}(this,e),function(e,t){if(!e.tileProvider.ready)return;var n=zce;n.length=0;var i,a=e._tileToUpdateHeights,s=e._tileProvider.terrainProvider,c=Sf(),l=e._updateHeightsTimeSlice,u=c+l,h=t.mode,d=t.mapProjection,f=e.tileProvider.tilingScheme.ellipsoid;for(;a.length>0;){var p=a[0];if(Object(o.a)(p.data)&&Object(o.a)(p.data.mesh)){var m=p.customData,g=m.length,v=!1;for(i=e._lastTileIndex;i<g;++i){var _=m[i];if(p.level>_.level){if(Object(o.a)(_.positionOnEllipsoidSurface)||(_.positionOnEllipsoidSurface=O.fromRadians(_.positionCartographic.longitude,_.positionCartographic.latitude,0,f)),h===IR.SCENE3D){var b=f.geodeticSurfaceNormal(_.positionOnEllipsoidSurface,jce.direction),y=f.getSurfaceNormalIntersectionWithZAxis(_.positionOnEllipsoidSurface,11500,jce.origin);if(!Object(o.a)(y)){var w;Object(o.a)(p.data.tileBoundingRegion)&&(w=p.data.tileBoundingRegion.minimumHeight);var C=Math.min(Object(r.a)(w,0),-11500),E=O.multiplyByScalar(b,Math.abs(C)+1,Nce);O.subtract(_.positionOnEllipsoidSurface,E,jce.origin)}}else R.clone(_.positionCartographic,Fce),Fce.height=-11500,d.project(Fce,Nce),O.fromElements(Nce.z,Nce.x,Nce.y,Nce),O.clone(Nce,jce.origin),O.clone(O.UNIT_X,jce.direction);var A=p.data.pick(jce,h,d,!1,Nce);Object(o.a)(A)&&(_.callback(A),_.level=p.level)}else if(p.level===_.level){for(var x,T=p.children,S=T.length,D=0;D<S&&(x=T[D],!Se.contains(x.rectangle,_.positionCartographic));++D);var P=s.getTileDataAvailable(x.x,x.y,x.level),I=p.parent;(Object(o.a)(P)&&!P||Object(o.a)(I)&&Object(o.a)(I.data)&&Object(o.a)(I.data.terrainData)&&!I.data.terrainData.isChildAvailable(I.x,I.y,x.x,x.y))&&_.removeFunc()}if(Sf()>=u){v=!0;break}}if(v){e._lastTileIndex=i;break}e._lastTileIndex=0,a.shift()}else{var M=p._lastSelectionResultFrame===e._lastSelectionFrameNumber?p._lastSelectionResult:Bae.NONE;M!==Bae.RENDERED&&M!==Bae.CULLED_BUT_NEEDED||n.push(p),a.shift(),e._lastTileIndex=0}}for(i=0;i<n.length;i++)a.push(n[i])}(this,e),function(e,t){var n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;(n!==e._lastTileLoadQueueLength||e._tilesInvalidated)&&(t.afterRender.push(wn.a.prototype.raiseEvent.bind(e._tileLoadProgressEvent,n)),e._lastTileLoadQueueLength=n);var i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce((function(e,t){return Math.max(e,t.level)}),-1),i.tilesRendered=e._tilesToRender.length,i.tilesVisited===i.lastTilesVisited&&i.tilesRendered===i.lastTilesRendered&&i.tilesCulled===i.lastTilesCulled&&i.maxDepth===i.lastMaxDepth&&i.tilesWaitingForChildren===i.lastTilesWaitingForChildren&&i.maxDepthVisited===i.lastMaxDepthVisited||(console.log("Visited "+i.tilesVisited+", Rendered: "+i.tilesRendered+", Culled: "+i.tilesCulled+", Max Depth Rendered: "+i.maxDepth+", Max Depth Visited: "+i.maxDepthVisited+", Waiting for children: "+i.tilesWaitingForChildren),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}(this,e))},bce.prototype.isDestroyed=function(){return!1},bce.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var wce=new R;function Oce(e,t){var n=Se.center(e.rectangle,wce),i=n.longitude-vce.longitude,r=n.latitude-vce.latitude,o=(n=Se.center(t.rectangle,wce)).longitude-vce.longitude,a=n.latitude-vce.latitude;return i*i+r*r-(o*o+a*a)}var Cce=new O,Ece=[];function Ace(e,t,n,i){n.needsLoading&&(void 0!==e.tileProvider.computeTileLoadPriority&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function xce(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function Tce(){this.southwest=new xce,this.southeast=new xce,this.northwest=new xce,this.northeast=new xce}Tce.prototype.combine=function(e){var t=this.southwest,n=this.southeast,i=this.northwest,r=this.northeast;e.allAreRenderable=t.allAreRenderable&&n.allAreRenderable&&i.allAreRenderable&&r.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||r.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+n.notYetRenderableCount+i.notYetRenderableCount+r.notYetRenderableCount};for(var Sce=new Array(31),Dce=0;Dce<Sce.length;++Dce)Sce[Dce]=new Tce;function Pce(e,t,n,i,r){var a=e._debug;++a.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n._updateCustomData(t.frameNumber),n.level>a.maxDepthVisited&&(a.maxDepthVisited=n.level);var s=function(e,t,n){if(t.mode===IR.SCENE2D||t.camera.frustum instanceof Vb||t.camera.frustum instanceof kb)return function(e,t,n){var i=t.camera.frustum;Object(o.a)(i._offCenterFrustum)&&(i=i._offCenterFrustum);var r=t.context,a=r.drawingBufferWidth,s=r.drawingBufferHeight,c=e._tileProvider.getLevelMaximumGeometricError(n.level),l=Math.max(i.top-i.bottom,i.right-i.left)/Math.max(a,s),u=c/l;t.fog.enabled&&t.mode!==IR.SCENE2D&&(u-=d.fog(n._distance,t.fog.density)*t.fog.sse);return u/=t.pixelRatio}(e,t,n);var i=e._tileProvider.getLevelMaximumGeometricError(n.level),r=n._distance,a=t.context.drawingBufferHeight,s=t.camera.frustum.sseDenominator,c=i*a/(r*s);t.fog.enabled&&(c-=d.fog(r,t.fog.density)*t.fog.sse);return c/=t.pixelRatio}(e,t,n)<e.maximumScreenSpaceError,c=n.southwestChild,l=n.southeastChild,u=n.northwestChild,h=n.northeastChild,f=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===f?n._lastSelectionResult:Bae.NONE,m=e.tileProvider;if(s||i){var g=Bae.originalResult(p)===Bae.RENDERED,v=Bae.originalResult(p)===Bae.CULLED||p===Bae.NONE,_=n.state===gae.DONE,b=g||v||_;if(b||Object(o.a)(m.canRenderWithoutLosingDetail)&&(b=m.canRenderWithoutLosingDetail(n)),b)return s&&Ace(e,e._tileLoadQueueMedium,n,t),Mce(e,n),r.allAreRenderable=n.renderable,r.anyWereRenderedLastFrame=p===Bae.RENDERED,r.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Bae.RENDERED,void(r.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n));i=!0,s&&Ace(e,e._tileLoadQueueHigh,n,t)}if(m.canRefine(n)){if(c.upsampledFromParent&&l.upsampledFromParent&&u.upsampledFromParent&&h.upsampledFromParent)return Mce(e,n),Ace(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(l),e._tileReplacementQueue.markTileRendered(u),e._tileReplacementQueue.markTileRendered(h),r.allAreRenderable=n.renderable,r.anyWereRenderedLastFrame=p===Bae.RENDERED,r.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Bae.RENDERED,void(r.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n));n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Bae.REFINED;var y=e._tilesToRender.length,w=e._tileLoadQueueLow.length,O=e._tileLoadQueueMedium.length,C=e._tileLoadQueueHigh.length,E=e._tileToUpdateHeights.length;if(function(e,t,n,i,r,o,a,s){var c=o.camera.positionCartographic,l=e._tileProvider,u=e._occluders,h=Sce[t.level],d=h.southwest,f=h.southeast,p=h.northwest,m=h.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Ice(e,t,l,o,u,a,d),Ice(e,n,l,o,u,a,f),Ice(e,i,l,o,u,a,p),Ice(e,r,l,o,u,a,m)):(Ice(e,i,l,o,u,a,p),Ice(e,t,l,o,u,a,d),Ice(e,r,l,o,u,a,m),Ice(e,n,l,o,u,a,f)):c.latitude<t.rectangle.north?(Ice(e,n,l,o,u,a,f),Ice(e,t,l,o,u,a,d),Ice(e,r,l,o,u,a,m),Ice(e,i,l,o,u,a,p)):(Ice(e,r,l,o,u,a,m),Ice(e,i,l,o,u,a,p),Ice(e,n,l,o,u,a,f),Ice(e,t,l,o,u,a,d));h.combine(s)}(e,c,l,u,h,t,i,r),y!==e._tilesToRender.length){var A=r.allAreRenderable,x=r.anyWereRenderedLastFrame,T=r.notYetRenderableCount,S=!1;if(!A&&!x){for(var D=e._tilesToRender,P=y;P<D.length;++P)for(var I=D[P];void 0!==I&&I._lastSelectionResult!==Bae.KICKED&&I!==n;)I._lastSelectionResult=Bae.kick(I._lastSelectionResult),I=I.parent;e._tilesToRender.length=y,e._tileToUpdateHeights.length=E,Mce(e,n),n._lastSelectionResult=Bae.RENDERED;var M=p===Bae.RENDERED;!M&&T>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=w,e._tileLoadQueueMedium.length=O,e._tileLoadQueueHigh.length=C,Ace(e,e._tileLoadQueueMedium,n,t),r.notYetRenderableCount=n.renderable?0:1,S=!0),r.allAreRenderable=n.renderable,r.anyWereRenderedLastFrame=M,M||e._tileToUpdateHeights.push(n),++a.tilesWaitingForChildren}e.preloadAncestors&&!S&&Ace(e,e._tileLoadQueueLow,n,t)}}else n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Bae.RENDERED,Mce(e,n),Ace(e,e._tileLoadQueueHigh,n,t),r.allAreRenderable=n.renderable,r.anyWereRenderedLastFrame=p===Bae.RENDERED,r.notYetRenderableCount=n.renderable?0:1}function Ice(e,t,n,i,r,a,s){if(n.computeTileVisibility(t,i,r)!==tE.NONE)return Pce(e,i,t,a,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,function(e,t){var n=t.rectangle;return Object(o.a)(e._cameraPositionCartographic)&&Se.contains(n,e._cameraPositionCartographic)||Object(o.a)(e._cameraReferenceFrameOriginCartographic)&&Se.contains(n,e._cameraReferenceFrameOriginCartographic)}(e,t)){Object(o.a)(t.data)&&Object(o.a)(t.data.vertexArray)||Ace(e,e._tileLoadQueueMedium,t,i);var c=e._lastSelectionFrameNumber,l=t._lastSelectionResultFrame===c?t._lastSelectionResult:Bae.NONE;l!==Bae.CULLED_BUT_NEEDED&&l!==Bae.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=Bae.CULLED_BUT_NEEDED}else e.preloadSiblings||0===t.level?(Ace(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=Bae.CULLED):t._lastSelectionResult=Bae.CULLED;t._lastSelectionResultFrame=i.frameNumber}function Mce(e,t){e._tilesToRender.push(t)}function Rce(e,t){return e._loadPriority-t._loadPriority}function Lce(e,t,n,i,r,o){void 0!==n.computeTileLoadPriority&&r.sort(Rce);for(var a=0,s=r.length;a<s&&(Sf()<i||!o);++a){var c=r[a];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),o=!0}return o}var jce=new ti,Fce=new R,Nce=new O,zce=[];var kce=bce;function Bce(e){e=Object(r.a)(e,W.WGS84);var t=new Db({ellipsoid:e}),n=new lce;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new pae,this._material=void 0,this._surface=new kce({tileProvider:new nce({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new wn.a,this._undergroundColor=Hf.clone(Hf.BLACK),this._undergroundColorAlphaByDistance=new JC(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new rce,Hce(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new _t.a({url:At("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!0,this.lightingFadeOutDistance=1e7,this.lightingFadeInDistance=2e7,this.nightFadeOutDistance=1e7,this.nightFadeInDistance=5e7,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=RR.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0}function Hce(e){var t=[],n=Object(o.a)(e._material)&&(e._material.shaderSource.match(/slope/)||e._material.shaderSource.match("normalEC")),i=[hae];!Object(o.a)(e._material)||n&&!e._terrainProvider.requestVertexNormals?e._surface._tileProvider.materialUniformMap=void 0:(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms),i.push("uniform vec4 u_initialColor;\n\n#if TEXTURE_UNITS > 0\nuniform sampler2D u_dayTextures[TEXTURE_UNITS];\nuniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];\nuniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];\n\n#ifdef APPLY_ALPHA\nuniform float u_dayTextureAlpha[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_DAY_NIGHT_ALPHA\nuniform float u_dayTextureNightAlpha[TEXTURE_UNITS];\nuniform float u_dayTextureDayAlpha[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_SPLIT\nuniform float u_dayTextureSplit[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_BRIGHTNESS\nuniform float u_dayTextureBrightness[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_CONTRAST\nuniform float u_dayTextureContrast[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_HUE\nuniform float u_dayTextureHue[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_SATURATION\nuniform float u_dayTextureSaturation[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_GAMMA\nuniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_IMAGERY_CUTOUT\nuniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];\n#endif\n\n#ifdef APPLY_COLOR_TO_ALPHA\nuniform vec4 u_colorsToAlpha[TEXTURE_UNITS];\n#endif\n\nuniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];\n#endif\n\n#ifdef SHOW_REFLECTIVE_OCEAN\nuniform sampler2D u_waterMask;\nuniform vec4 u_waterMaskTranslationAndScale;\nuniform float u_zoomedOutOceanSpecularIntensity;\n#endif\n\n#ifdef SHOW_OCEAN_WAVES\nuniform sampler2D u_oceanNormalMap;\n#endif\n\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\nuniform vec2 u_lightingFadeDistance;\n#endif\n\n#ifdef TILE_LIMIT_RECTANGLE\nuniform vec4 u_cartographicLimitRectangle;\n#endif\n\n#ifdef GROUND_ATMOSPHERE\nuniform vec2 u_nightFadeDistance;\n#endif\n\n#ifdef ENABLE_CLIPPING_PLANES\nuniform sampler2D u_clippingPlanes;\nuniform mat4 u_clippingPlanesMatrix;\nuniform vec4 u_clippingPlanesEdgeStyle;\n#endif\n\n#if defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\nuniform float u_minimumBrightness;\n#endif\n\n#ifdef COLOR_CORRECT\nuniform vec3 u_hsbShift; // Hue, saturation, brightness\n#endif\n\n#ifdef HIGHLIGHT_FILL_TILE\nuniform vec4 u_fillHighlightColor;\n#endif\n\n#ifdef TRANSLUCENT\nuniform vec4 u_frontFaceAlphaByDistance;\nuniform vec4 u_backFaceAlphaByDistance;\nuniform vec4 u_translucencyRectangle;\n#endif\n\n#ifdef UNDERGROUND_COLOR\nuniform vec4 u_undergroundColor;\nuniform vec4 u_undergroundColorAlphaByDistance;\n#endif\n\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\nvarying vec3 v_textureCoordinates;\nvarying vec3 v_normalMC;\nvarying vec3 v_normalEC;\n\n#ifdef APPLY_MATERIAL\nvarying float v_height;\nvarying float v_slope;\nvarying float v_aspect;\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nvarying float v_distance;\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nvarying vec3 v_fogRayleighColor;\nvarying vec3 v_fogMieColor;\n#endif\n\n#ifdef GROUND_ATMOSPHERE\nvarying vec3 v_rayleighColor;\nvarying vec3 v_mieColor;\n#endif\n\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nfloat interpolateByDistance(vec4 nearFarScalar, float distance)\n{\n float startDistance = nearFarScalar.x;\n float startValue = nearFarScalar.y;\n float endDistance = nearFarScalar.z;\n float endValue = nearFarScalar.w;\n float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);\n return mix(startValue, endValue, t);\n}\n#endif\n\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)\nvec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)\n{\n return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);\n}\n#endif\n\n#ifdef TRANSLUCENT\nbool inTranslucencyRectangle()\n{\n return\n v_textureCoordinates.x > u_translucencyRectangle.x &&\n v_textureCoordinates.x < u_translucencyRectangle.z &&\n v_textureCoordinates.y > u_translucencyRectangle.y &&\n v_textureCoordinates.y < u_translucencyRectangle.w;\n}\n#endif\n\nvec4 sampleAndBlend(\n vec4 previousColor,\n sampler2D textureToSample,\n vec2 tileTextureCoordinates,\n vec4 textureCoordinateRectangle,\n vec4 textureCoordinateTranslationAndScale,\n float textureAlpha,\n float textureNightAlpha,\n float textureDayAlpha,\n float textureBrightness,\n float textureContrast,\n float textureHue,\n float textureSaturation,\n float textureOneOverGamma,\n float split,\n vec4 colorToAlpha,\n float nightBlend)\n{\n // This crazy step stuff sets the alpha to 0.0 if this following condition is true:\n // tileTextureCoordinates.s < textureCoordinateRectangle.s ||\n // tileTextureCoordinates.s > textureCoordinateRectangle.p ||\n // tileTextureCoordinates.t < textureCoordinateRectangle.t ||\n // tileTextureCoordinates.t > textureCoordinateRectangle.q\n // In other words, the alpha is zero if the fragment is outside the rectangle\n // covered by this texture. Would an actual 'if' yield better performance?\n vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);\n textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\n\n alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);\n textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\n\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\n textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);\n#endif\n\n vec2 translation = textureCoordinateTranslationAndScale.xy;\n vec2 scale = textureCoordinateTranslationAndScale.zw;\n vec2 textureCoordinates = tileTextureCoordinates * scale + translation;\n vec4 value = texture2D(textureToSample, textureCoordinates);\n vec3 color = value.rgb;\n float alpha = value.a;\n\n#ifdef APPLY_COLOR_TO_ALPHA\n vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);\n colorDiff.r = max(max(colorDiff.r, colorDiff.g), colorDiff.b);\n alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);\n#endif\n\n#if !defined(APPLY_GAMMA)\n vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));\n color = tempColor.rgb;\n alpha = tempColor.a;\n#else\n color = pow(color, vec3(textureOneOverGamma));\n#endif\n\n#ifdef APPLY_SPLIT\n float splitPosition = czm_imagerySplitPosition;\n // Split to the left\n if (split < 0.0 && gl_FragCoord.x > splitPosition) {\n alpha = 0.0;\n }\n // Split to the right\n else if (split > 0.0 && gl_FragCoord.x < splitPosition) {\n alpha = 0.0;\n }\n#endif\n\n#ifdef APPLY_BRIGHTNESS\n color = mix(vec3(0.0), color, textureBrightness);\n#endif\n\n#ifdef APPLY_CONTRAST\n color = mix(vec3(0.5), color, textureContrast);\n#endif\n\n#ifdef APPLY_HUE\n color = czm_hue(color, textureHue);\n#endif\n\n#ifdef APPLY_SATURATION\n color = czm_saturation(color, textureSaturation);\n#endif\n\n float sourceAlpha = alpha * textureAlpha;\n float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);\n outAlpha += sign(outAlpha) - 1.0;\n\n vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;\n\n // When rendering imagery for a tile in multiple passes,\n // some GPU/WebGL implementation combinations will not blend fragments in\n // additional passes correctly if their computation includes an unmasked\n // divide-by-zero operation,\n // even if it's not in the output or if the output has alpha zero.\n //\n // For example, without sanitization for outAlpha,\n // this renders without artifacts:\n // if (outAlpha == 0.0) { outColor = vec3(0.0); }\n //\n // but using czm_branchFreeTernary will cause portions of the tile that are\n // alpha-zero in the additional pass to render as black instead of blending\n // with the previous pass:\n // outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor);\n //\n // So instead, sanitize against divide-by-zero,\n // store this state on the sign of outAlpha, and correct on return.\n\n return vec4(outColor, max(outAlpha, 0.0));\n}\n\nvec3 colorCorrect(vec3 rgb) {\n#ifdef COLOR_CORRECT\n // Convert rgb color to hsb\n vec3 hsb = czm_RGBToHSB(rgb);\n // Perform hsb shift\n hsb.x += u_hsbShift.x; // hue\n hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation\n hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness\n // Convert shifted hsb back to rgb\n rgb = czm_HSBToRGB(hsb);\n#endif\n return rgb;\n}\n\nvec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);\n\n#ifdef GROUND_ATMOSPHERE\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist);\n#endif\n\nconst float fExposure = 2.0;\n\nvoid main()\n{\n#ifdef TILE_LIMIT_RECTANGLE\n if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||\n v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)\n {\n discard;\n }\n#endif\n\n#ifdef ENABLE_CLIPPING_PLANES\n float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);\n#endif\n\n#if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)\n vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates\n vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordiantes\n#endif\n\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\n float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);\n#else\n float nightBlend = 0.0;\n#endif\n\n // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0\n // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the\n // fragments on the edges of tiles even though the vertex shader is outputting\n // coordinates strictly in the 0-1 range.\n vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);\n\n#ifdef SHOW_TILE_BOUNDARIES\n if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||\n v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))\n {\n color = vec4(1.0, 0.0, 0.0, 1.0);\n }\n#endif\n\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\n float cameraDist;\n if (czm_sceneMode == czm_sceneMode2D)\n {\n cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;\n }\n else if (czm_sceneMode == czm_sceneModeColumbusView)\n {\n cameraDist = -czm_view[3].z;\n }\n else\n {\n cameraDist = length(czm_view[3]);\n }\n float fadeOutDist = u_lightingFadeDistance.x;\n float fadeInDist = u_lightingFadeDistance.y;\n if (czm_sceneMode != czm_sceneMode3D) {\n vec3 radii = czm_ellipsoidRadii;\n float maxRadii = max(radii.x, max(radii.y, radii.z));\n fadeOutDist -= maxRadii;\n fadeInDist -= maxRadii;\n }\n float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\n#else\n float fade = 0.0;\n#endif\n\n#ifdef SHOW_REFLECTIVE_OCEAN\n vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;\n vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;\n vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;\n waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;\n\n float mask = texture2D(u_waterMask, waterMaskTextureCoordinates).r;\n\n if (mask > 0.0)\n {\n mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);\n\n vec2 ellipsoidTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC);\n vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC.zyx);\n\n vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));\n\n color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);\n }\n#endif\n\n#ifdef APPLY_MATERIAL\n czm_materialInput materialInput;\n materialInput.st = v_textureCoordinates.st;\n materialInput.normalEC = normalize(v_normalEC);\n materialInput.slope = v_slope;\n materialInput.height = v_height;\n materialInput.aspect = v_aspect;\n czm_material material = czm_getMaterial(materialInput);\n vec4 materialColor = vec4(material.diffuse, material.alpha);\n color = alphaBlend(materialColor, color);\n#endif\n\n#ifdef ENABLE_VERTEX_LIGHTING\n float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * 0.9 + 0.3, 0.0, 1.0);\n vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\n#elif defined(ENABLE_DAYNIGHT_SHADING)\n float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);\n diffuseIntensity = mix(1.0, diffuseIntensity, fade);\n vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\n#else\n vec4 finalColor = color;\n#endif\n\n#ifdef ENABLE_CLIPPING_PLANES\n vec4 clippingPlanesEdgeColor = vec4(1.0);\n clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;\n float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;\n\n if (clipDistance < clippingPlanesEdgeWidth)\n {\n finalColor = clippingPlanesEdgeColor;\n }\n#endif\n\n#ifdef HIGHLIGHT_FILL_TILE\n finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\n vec3 fogColor = colorCorrect(v_fogMieColor) + finalColor.rgb * colorCorrect(v_fogRayleighColor);\n#ifndef HDR\n fogColor = vec3(1.0) - exp(-fExposure * fogColor);\n#endif\n#endif\n\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)\n vec3 atmosphereLightDirection = czm_sunDirectionWC;\n#else\n vec3 atmosphereLightDirection = czm_lightDirectionWC;\n#endif\n\n#ifdef FOG\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\n float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);\n fogColor *= darken;\n#endif\n\n#ifdef HDR\n const float modifier = 0.15;\n finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor, modifier), finalColor.a);\n#else\n finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor), finalColor.a);\n#endif\n#endif\n\n#ifdef GROUND_ATMOSPHERE\n if (!czm_backFacing())\n {\n vec3 groundAtmosphereColor = computeGroundAtmosphereColor(fogColor, finalColor, atmosphereLightDirection, cameraDist);\n finalColor = vec4(mix(finalColor.rgb, groundAtmosphereColor, fade), finalColor.a);\n }\n#endif\n\n#ifdef UNDERGROUND_COLOR\n if (czm_backFacing())\n {\n float distanceFromEllipsoid = max(czm_eyeHeight, 0.0);\n float distance = max(v_distance - distanceFromEllipsoid, 0.0);\n float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);\n vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);\n finalColor = alphaBlend(undergroundColor, finalColor);\n }\n#endif\n\n#ifdef TRANSLUCENT\n if (inTranslucencyRectangle())\n {\n vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;\n finalColor.a *= interpolateByDistance(alphaByDistance, v_distance);\n }\n#endif\n\n gl_FragColor = finalColor;\n}\n\n#ifdef GROUND_ATMOSPHERE\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist)\n{\n#if defined(PER_FRAGMENT_GROUND_ATMOSPHERE) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))\n float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);\n vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);\n xy *= czm_viewport.zw * mpp * 0.5;\n\n vec3 direction = normalize(vec3(xy, -czm_currentFrustum.x));\n czm_ray ray = czm_ray(vec3(0.0), direction);\n\n vec3 ellipsoid_center = czm_view[3].xyz;\n\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\n\n vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);\n ellipsoidPosition = (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;\n AtmosphereColor atmosColor = computeGroundAtmosphereFromSpace(ellipsoidPosition, true, atmosphereLightDirection);\n\n vec3 groundAtmosphereColor = colorCorrect(atmosColor.mie) + finalColor.rgb * colorCorrect(atmosColor.rayleigh);\n#ifndef HDR\n groundAtmosphereColor = vec3(1.0) - exp(-fExposure * groundAtmosphereColor);\n#endif\n\n float fadeInDist = u_nightFadeDistance.x;\n float fadeOutDist = u_nightFadeDistance.y;\n\n float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\n\n#ifdef HDR\n // Some tweaking to make HDR look better\n sunlitAtmosphereIntensity = max(sunlitAtmosphereIntensity * sunlitAtmosphereIntensity, 0.03);\n#endif\n\n groundAtmosphereColor = mix(groundAtmosphereColor, fogColor, sunlitAtmosphereIntensity);\n#else\n vec3 groundAtmosphereColor = fogColor;\n#endif\n\n#ifdef HDR\n // Some tweaking to make HDR look better\n groundAtmosphereColor = czm_saturation(groundAtmosphereColor, 1.6);\n#endif\n\n return groundAtmosphereColor;\n}\n#endif\n\n#ifdef SHOW_REFLECTIVE_OCEAN\n\nfloat waveFade(float edge0, float edge1, float x)\n{\n float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n return pow(1.0 - y, 5.0);\n}\n\nfloat linearFade(float edge0, float edge1, float x)\n{\n return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n}\n\n// Based on water rendering by Jonas Wagner:\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\n\n// low altitude wave settings\nconst float oceanFrequencyLowAltitude = 825000.0;\nconst float oceanAnimationSpeedLowAltitude = 0.004;\nconst float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;\nconst float oceanSpecularIntensity = 0.5;\n\n// high altitude wave settings\nconst float oceanFrequencyHighAltitude = 125000.0;\nconst float oceanAnimationSpeedHighAltitude = 0.008;\nconst float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;\n\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)\n{\n vec3 positionToEyeEC = -positionEyeCoordinates;\n float positionToEyeECLength = length(positionToEyeEC);\n\n // The double normalize below works around a bug in Firefox on Android devices.\n vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));\n\n // Fade out the waves as the camera moves far from the surface.\n float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);\n\n#ifdef SHOW_OCEAN_WAVES\n // high altitude waves\n float time = czm_frameNumber * oceanAnimationSpeedHighAltitude;\n vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);\n vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);\n\n // low altitude waves\n time = czm_frameNumber * oceanAnimationSpeedLowAltitude;\n noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);\n vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);\n\n // blend the 2 wave layers based on distance to surface\n float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);\n float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);\n vec3 normalTangentSpace =\n (highAltitudeFade * normalTangentSpaceHighAltitude) +\n (lowAltitudeFade * normalTangentSpaceLowAltitude);\n normalTangentSpace = normalize(normalTangentSpace);\n\n // fade out the normal perturbation as we move farther from the water surface\n normalTangentSpace.xy *= waveIntensity;\n normalTangentSpace = normalize(normalTangentSpace);\n#else\n vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);\n#endif\n\n vec3 normalEC = enuToEye * normalTangentSpace;\n\n const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);\n\n // Use diffuse light to highlight the waves\n float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;\n vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);\n\n#ifdef SHOW_OCEAN_WAVES\n // Where diffuse light is low or non-existent, use wave highlights based solely on\n // the wave bumpiness and no particular light direction.\n float tsPerturbationRatio = normalTangentSpace.z;\n vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);\n#else\n vec3 nonDiffuseHighlight = vec3(0.0);\n#endif\n\n // Add specular highlights in 3D, and in all modes when zoomed in.\n float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);\n float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);\n float specular = specularIntensity * surfaceReflectance;\n\n#ifdef HDR\n specular *= 1.4;\n\n float e = 0.2;\n float d = 3.3;\n float c = 1.7;\n\n vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));\n#else\n vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;\n#endif\n\n return vec4(color, imageryColor.a);\n}\n\n#endif // #ifdef SHOW_REFLECTIVE_OCEAN\n"),e._surfaceShaderSet.baseVertexShaderSource=new KM({sources:[hae,"#ifdef QUANTIZATION_BITS12\nattribute vec4 compressed0;\nattribute float compressed1;\n#else\nattribute vec4 position3DAndHeight;\nattribute vec4 textureCoordAndEncodedNormals;\n#endif\n\nuniform vec3 u_center3D;\nuniform mat4 u_modifiedModelView;\nuniform mat4 u_modifiedModelViewProjection;\nuniform vec4 u_tileRectangle;\n\n// Uniforms for 2D Mercator projection\nuniform vec2 u_southAndNorthLatitude;\nuniform vec2 u_southMercatorYAndOneOverHeight;\n\nvarying vec3 v_positionMC;\nvarying vec3 v_positionEC;\n\nvarying vec3 v_textureCoordinates;\nvarying vec3 v_normalMC;\nvarying vec3 v_normalEC;\n\n#ifdef APPLY_MATERIAL\nvarying float v_slope;\nvarying float v_aspect;\nvarying float v_height;\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\nvarying float v_distance;\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\nvarying vec3 v_fogMieColor;\nvarying vec3 v_fogRayleighColor;\n#endif\n\n// These functions are generated at runtime.\nvec4 getPosition(vec3 position, float height, vec2 textureCoordinates);\nfloat get2DYPositionFraction(vec2 textureCoordinates);\n\nvec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)\n{\n return u_modifiedModelViewProjection * vec4(position, 1.0);\n}\n\nfloat get2DMercatorYPositionFraction(vec2 textureCoordinates)\n{\n // The width of a tile at level 11, in radians and assuming a single root tile, is\n // 2.0 * czm_pi / pow(2.0, 11.0)\n // We want to just linearly interpolate the 2D position from the texture coordinates\n // when we're at this level or higher. The constant below is the expression\n // above evaluated and then rounded up at the 4th significant digit.\n const float maxTileWidth = 0.003068;\n float positionFraction = textureCoordinates.y;\n float southLatitude = u_southAndNorthLatitude.x;\n float northLatitude = u_southAndNorthLatitude.y;\n if (northLatitude - southLatitude > maxTileWidth)\n {\n float southMercatorY = u_southMercatorYAndOneOverHeight.x;\n float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;\n\n float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);\n currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);\n positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);\n }\n return positionFraction;\n}\n\nfloat get2DGeographicYPositionFraction(vec2 textureCoordinates)\n{\n return textureCoordinates.y;\n}\n\nvec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)\n{\n float yPositionFraction = get2DYPositionFraction(textureCoordinates);\n vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\n return u_modifiedModelViewProjection * rtcPosition2D;\n}\n\nvec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)\n{\n return getPositionPlanarEarth(position, 0.0, textureCoordinates);\n}\n\nvec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)\n{\n return getPositionPlanarEarth(position, height, textureCoordinates);\n}\n\nvec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)\n{\n // We do not do RTC while morphing, so there is potential for jitter.\n // This is unlikely to be noticeable, though.\n vec3 position3DWC = position + u_center3D;\n float yPositionFraction = get2DYPositionFraction(textureCoordinates);\n vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\n vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);\n return czm_modelViewProjection * morphPosition;\n}\n\n#ifdef QUANTIZATION_BITS12\nuniform vec2 u_minMaxHeight;\nuniform mat4 u_scaleAndBias;\n#endif\n\nvoid main()\n{\n#ifdef QUANTIZATION_BITS12\n vec2 xy = czm_decompressTextureCoordinates(compressed0.x);\n vec2 zh = czm_decompressTextureCoordinates(compressed0.y);\n vec3 position = vec3(xy, zh.x);\n float height = zh.y;\n vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);\n\n height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;\n position = (u_scaleAndBias * vec4(position, 1.0)).xyz;\n\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\n float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\n float encodedNormal = compressed1;\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\n float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\n float encodedNormal = 0.0;\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)\n float webMercatorT = textureCoordinates.y;\n float encodedNormal = compressed0.w;\n#else\n float webMercatorT = textureCoordinates.y;\n float encodedNormal = 0.0;\n#endif\n\n#else\n // A single float per element\n vec3 position = position3DAndHeight.xyz;\n float height = position3DAndHeight.w;\n vec2 textureCoordinates = textureCoordAndEncodedNormals.xy;\n\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\n float webMercatorT = textureCoordAndEncodedNormals.z;\n float encodedNormal = textureCoordAndEncodedNormals.w;\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\n float webMercatorT = textureCoordinates.y;\n float encodedNormal = textureCoordAndEncodedNormals.z;\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\n float webMercatorT = textureCoordAndEncodedNormals.z;\n float encodedNormal = 0.0;\n#else\n float webMercatorT = textureCoordinates.y;\n float encodedNormal = 0.0;\n#endif\n\n#endif\n\n vec3 position3DWC = position + u_center3D;\n gl_Position = getPosition(position, height, textureCoordinates);\n\n v_textureCoordinates = vec3(textureCoordinates, webMercatorT);\n\n#if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\n v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\n v_positionMC = position3DWC; // position in model coordinates\n vec3 normalMC = czm_octDecode(encodedNormal);\n v_normalMC = normalMC;\n v_normalEC = czm_normal3D * v_normalMC;\n#elif defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(GENERATE_POSITION) || defined(HDR)\n v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\n v_positionMC = position3DWC; // position in model coordinates\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\n AtmosphereColor atmosFogColor = computeGroundAtmosphereFromSpace(position3DWC, false, vec3(0.0));\n v_fogMieColor = atmosFogColor.mie;\n v_fogRayleighColor = atmosFogColor.rayleigh;\n#endif\n\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\n v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);\n#endif\n\n#ifdef APPLY_MATERIAL\n float northPoleZ = czm_ellipsoidRadii.z;\n vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);\n vec3 ellipsoidNormal = normalize(v_positionMC); // For a sphere this is correct, but not generally for an ellipsoid.\n vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));\n float dotProd = abs(dot(ellipsoidNormal, v_normalMC));\n v_slope = acos(dotProd);\n vec3 normalRejected = ellipsoidNormal * dotProd;\n vec3 normalProjected = v_normalMC - normalRejected;\n vec3 aspectVector = normalize(normalProjected);\n v_aspect = acos(dot(aspectVector, vectorEastMC));\n float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);\n v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);\n v_height = height;\n#endif\n}\n"],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new KM({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}Object.defineProperties(Bce.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return!Object(o.a)(this._surface)||this._surface.tileProvider.ready&&0===this._surface._tileLoadQueueHigh.length&&0===this._surface._tileLoadQueueMedium.length&&0===this._surface._tileLoadQueueLow.length}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){Object(o.a)(e)||(e=Se.clone(Se.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,this._terrainProviderChanged.raiseEvent(e),Object(o.a)(this._material)&&Hce(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Hce(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=Hf.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){if(Object(o.a)(e)&&e.far<e.near)throw new a.a("far distance must be greater than near distance.");this._undergroundColorAlphaByDistance=JC.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});var Vce=[],Uce={start:0,stop:0};Bce.prototype.pickWorldCoordinates=function(e,t,n,i){if(!Object(o.a)(e))throw new a.a("ray is required");if(!Object(o.a)(t))throw new a.a("scene is required");n=Object(r.a)(n,!0);var s=t.mode,c=t.mapProjection,l=Vce;l.length=0;var u,h,d,f,p=this._surface._tilesToRender,m=p.length;for(h=0;h<m;++h){var g=(u=p[h]).data;if(Object(o.a)(g)){var v=g.pickBoundingSphere;if(s!==IR.SCENE3D)g.pickBoundingSphere=v=gt.fromRectangleWithHeights2D(u.rectangle,c,g.tileBoundingRegion.minimumHeight,g.tileBoundingRegion.maximumHeight,v),O.fromElements(v.center.z,v.center.x,v.center.y,v.center);else{if(!Object(o.a)(g.renderedMesh))continue;gt.clone(g.renderedMesh.boundingSphere3D,v)}var _=Ii.raySphere(e,v,Uce);Object(o.a)(_)&&l.push(g)}}for(l.sort((d=e.origin,function(e,t){return gt.distanceSquaredTo(e.pickBoundingSphere,d)-gt.distanceSquaredTo(t.pickBoundingSphere,d)})),m=l.length,h=0;h<m&&(f=l[h].pick(e,t.mode,t.mapProjection,n,i),!Object(o.a)(f));++h);return f};var Wce=new R;Bce.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),Object(o.a)(n)&&t.mode!==IR.SCENE3D){n=O.fromElements(n.y,n.z,n.x,n);var i=t.mapProjection.unproject(n,Wce);n=t.globe.ellipsoid.cartographicToCartesian(i,n)}return n};var Gce=new O,qce=new O,Yce=new R,$ce=new ti;function Xce(e,t){return Object(o.a)(e)&&Se.contains(e.rectangle,t)?e:void 0}Bce.prototype.getHeight=function(e){if(!Object(o.a)(e))throw new a.a("cartographic is required");var t=this._surface._levelZeroTiles;if(Object(o.a)(t)){var n,i,s=t.length;for(i=0;i<s&&(n=t[i],!Se.contains(n.rectangle,e));++i);if(!(i>=s)){for(var c=n;Object(o.a)(n);)n=Xce(n._southwestChild,e)||Xce(n._southeastChild,e)||Xce(n._northwestChild,e)||n._northeastChild,Object(o.a)(n)&&Object(o.a)(n.data)&&Object(o.a)(n.data.renderedMesh)&&(c=n);if(n=c,Object(o.a)(n)&&Object(o.a)(n.data)&&Object(o.a)(n.data.renderedMesh)){var l=this._surface._tileProvider.tilingScheme.ellipsoid,u=O.fromRadians(e.longitude,e.latitude,0,l,Gce),h=$ce,d=l.geodeticSurfaceNormal(u,h.direction),f=l.getSurfaceNormalIntersectionWithZAxis(u,11500,h.origin);if(!Object(o.a)(f)){var p;Object(o.a)(n.data.tileBoundingRegion)&&(p=n.data.tileBoundingRegion.minimumHeight);var m=Math.min(Object(r.a)(p,0),-11500),g=O.multiplyByScalar(d,Math.abs(m)+1,qce);O.subtract(u,g,h.origin)}var v=n.data.pick(h,void 0,void 0,!1,qce);if(Object(o.a)(v))return l.cartesianToCartographic(v,Yce).height}}}},Bce.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)},Bce.prototype.beginFrame=function(e){var t=this._surface,n=t.tileProvider,i=this.terrainProvider,r=this.showWaterEffect&&i.ready&&i.hasWaterMask;if(r&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;var a=this._oceanNormalMapResource,s=a.url;if(Object(o.a)(s)){var c=this;Object(Yt.a)(a.fetchImage(),(function(t){s===c._oceanNormalMapResource.url&&(c._oceanNormalMap=c._oceanNormalMap&&c._oceanNormalMap.destroy(),c._oceanNormalMap=new nI({context:e.context,source:t}))}))}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}var l=e.passes,u=e.mode;l.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=u===IR.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=r,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,t.beginFrame(e))},Bce.prototype.render=function(e){this.show&&(Object(o.a)(this._material)&&this._material.update(e.context),this._surface.render(e))},Bce.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)},Bce.prototype.isDestroyed=function(){return!1},Bce.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),Ks(this)};var Kce=Bce,Qce="uniform sampler2D colorTexture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n gl_FragColor = texture2D(colorTexture, v_textureCoordinates);\n}\n",Zce="uniform sampler2D u_depthTexture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n gl_FragColor = czm_packDepth(texture2D(u_depthTexture, v_textureCoordinates).r);\n}\n";function Jce(){this._globeColorTexture=void 0,this._primitiveColorTexture=void 0,this._depthStencilTexture=void 0,this._globeDepthTexture=void 0,this._tempGlobeDepthTexture=void 0,this._tempCopyDepthTexture=void 0,this._globeColorFramebuffer=void 0,this._primitiveColorFramebuffer=void 0,this._copyDepthFramebuffer=void 0,this._tempCopyDepthFramebuffer=void 0,this._updateDepthFramebuffer=void 0,this._clearGlobeColorCommand=void 0,this._clearPrimitiveColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._mergeColorCommand=void 0,this._viewport=new bl,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useLogDepth=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0,this._debugGlobeDepthViewportCommand=void 0}function ele(e){e._globeColorTexture=e._globeColorTexture&&!e._globeColorTexture.isDestroyed()&&e._globeColorTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&!e._depthStencilTexture.isDestroyed()&&e._depthStencilTexture.destroy(),e._globeDepthTexture=e._globeDepthTexture&&!e._globeDepthTexture.isDestroyed()&&e._globeDepthTexture.destroy()}function tle(e){e._globeColorFramebuffer=e._globeColorFramebuffer&&!e._globeColorFramebuffer.isDestroyed()&&e._globeColorFramebuffer.destroy(),e._copyDepthFramebuffer=e._copyDepthFramebuffer&&!e._copyDepthFramebuffer.isDestroyed()&&e._copyDepthFramebuffer.destroy()}function nle(e){e._tempCopyDepthFramebuffer=e._tempCopyDepthFramebuffer&&!e._tempCopyDepthFramebuffer.isDestroyed()&&e._tempCopyDepthFramebuffer.destroy(),e._updateDepthFramebuffer=e._updateDepthFramebuffer&&!e._updateDepthFramebuffer.isDestroyed()&&e._updateDepthFramebuffer.destroy(),e._tempGlobeDepthTexture=e._tempGlobeDepthTexture&&!e._tempGlobeDepthTexture.isDestroyed()&&e._tempGlobeDepthTexture.destroy()}function ile(e){e._primitiveColorTexture=e._primitiveColorTexture&&!e._primitiveColorTexture.isDestroyed()&&e._primitiveColorTexture.destroy(),e._primitiveColorFramebuffer=e._primitiveColorFramebuffer&&!e._primitiveColorFramebuffer.isDestroyed()&&e._primitiveColorFramebuffer.destroy()}function rle(e,t,n,i,r,a){var s=e._globeColorTexture,c=!Object(o.a)(s)||s.width!==n||s.height!==i||r!==e._useHdr;c&&(ele(e),tle(e),function(e,t,n,i,r){var o=r?t.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT:LC.UNSIGNED_BYTE;e._globeColorTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:o,sampler:ZP.NEAREST}),e._depthStencilTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8}),e._globeDepthTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST})}(e,t,n,i,r),function(e,t){e._globeColorFramebuffer=new DG({context:t,colorTextures:[e._globeColorTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._copyDepthFramebuffer=new DG({context:t,colorTextures:[e._globeDepthTexture],destroyAttachments:!1})}(e,t)),(c||a!==e._clearGlobeDepth)&&(ile(e),a&&function(e,t,n,i,r){var o=r?t.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT:LC.UNSIGNED_BYTE;e._primitiveColorTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:o,sampler:ZP.NEAREST}),e._primitiveColorFramebuffer=new DG({context:t,colorTextures:[e._primitiveColorTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1})}(e,t,n,i,r))}function ole(e,t,n,i,r){e._viewport.width=n,e._viewport.height=i;var a=!bl.equals(e._viewport,r.viewport),s=a!==e._useScissorTest;e._useScissorTest=a,bl.equals(e._scissorRectangle,r.viewport)||(e._scissorRectangle=bl.clone(r.viewport,e._scissorRectangle),s=!0),Object(o.a)(e._rs)&&bl.equals(e._viewport,e._rs.viewport)&&!s||(e._rs=XI.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=XI.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:LP.ALPHA_BLEND}),e._rsUpdate=XI.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:XL.EQUAL,frontOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.KEEP},backFunction:XL.NEVER,reference:JL.CESIUM_3D_TILE_MASK,mask:JL.CESIUM_3D_TILE_MASK}})),Object(o.a)(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(Zce,{uniformMap:{u_depthTexture:function(){return e._depthStencilTexture}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer,e._copyDepthCommand.renderState=e._rs,Object(o.a)(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(Qce,{uniformMap:{colorTexture:function(){return e._globeColorTexture}},owner:e})),e._copyColorCommand.renderState=e._rs,Object(o.a)(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(Zce,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer,e._tempCopyDepthCommand.renderState=e._rs,Object(o.a)(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(Qce,{uniformMap:{colorTexture:function(){return e._tempGlobeDepthTexture}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer,e._updateDepthCommand.renderState=e._rsUpdate,Object(o.a)(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new yN({color:new Hf(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e._globeColorFramebuffer,Object(o.a)(e._clearPrimitiveColorCommand)||(e._clearPrimitiveColorCommand=new yN({color:new Hf(0,0,0,0),stencil:0,owner:e})),e._clearPrimitiveColorCommand.framebuffer=e._primitiveColorFramebuffer,Object(o.a)(e._mergeColorCommand)||(e._mergeColorCommand=t.createViewportQuadCommand(Qce,{uniformMap:{colorTexture:function(){return e._primitiveColorTexture}},owner:e})),e._mergeColorCommand.framebuffer=e._globeColorFramebuffer,e._mergeColorCommand.renderState=e._rsBlend}Object.defineProperties(Jce.prototype,{framebuffer:{get:function(){return this._globeColorFramebuffer}},primitiveFramebuffer:{get:function(){return this._primitiveColorFramebuffer}}}),Jce.prototype.executeDebugGlobeDepth=function(e,t,n){!function(e,t,n,i){if(!Object(o.a)(e._debugGlobeDepthViewportCommand)||i!==e._useLogDepth){var r=new KM({defines:[i?"LOG_DEPTH":""],sources:["uniform sampler2D u_depthTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n float z_window = czm_unpackDepth(texture2D(u_depthTexture, v_textureCoordinates));\n z_window = czm_reverseLogDepth(z_window); \n float n_range = czm_depthRange.near;\n float f_range = czm_depthRange.far;\n float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\n float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\n gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\n}\n"]});e._debugGlobeDepthViewportCommand=t.createViewportQuadCommand(r,{uniformMap:{u_depthTexture:function(){return e._globeDepthTexture}},owner:e}),e._useLogDepth=i}e._debugGlobeDepthViewportCommand.execute(t,n)}(this,e,t,n)},Jce.prototype.update=function(e,t,n,i,r){var o=n.width,a=n.height;rle(this,e,o,a,i,r),ole(this,e,o,a,t),e.uniformState.globeDepthTexture=void 0,this._useHdr=i,this._clearGlobeDepth=r},Jce.prototype.executeCopyDepth=function(e,t){Object(o.a)(this._copyDepthCommand)&&(this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._globeDepthTexture)},Jce.prototype.executeUpdateDepth=function(e,t,n){var i=t.framebuffer.depthStencilTexture;if(n||i!==this._depthStencilTexture){if(Object(o.a)(this._updateDepthCommand)){if(!Object(o.a)(this._updateDepthFramebuffer)||this._updateDepthFramebuffer.depthStencilTexture!==i||this._updateDepthFramebuffer.getColorTexture(0)!==this._globeDepthTexture){var r=this._globeDepthTexture.width,a=this._globeDepthTexture.height;nle(this),function(e,t,n,i,r){e._tempGlobeDepthTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),e._tempCopyDepthFramebuffer=new DG({context:t,colorTextures:[e._tempGlobeDepthTexture],destroyAttachments:!1}),e._updateDepthFramebuffer=new DG({context:t,colorTextures:[e._globeDepthTexture],depthStencilTexture:r.framebuffer.depthStencilTexture,destroyAttachments:!1})}(this,e,r,a,t),ole(this,e,r,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)}}else Object(o.a)(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t)},Jce.prototype.executeCopyColor=function(e,t){Object(o.a)(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)},Jce.prototype.executeMergeColor=function(e,t){Object(o.a)(this._mergeColorCommand)&&this._mergeColorCommand.execute(e,t)},Jce.prototype.clear=function(e,t,n){var i=this._clearGlobeColorCommand;Object(o.a)(i)&&(Hf.clone(n,i.color),i.execute(e,t)),i=this._clearPrimitiveColorCommand,Object(o.a)(i)&&Object(o.a)(this._primitiveColorFramebuffer)&&i.execute(e,t)},Jce.prototype.isDestroyed=function(){return!1},Jce.prototype.destroy=function(){return ele(this),tle(this),ile(this),nle(this),Object(o.a)(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),Object(o.a)(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),Object(o.a)(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),Object(o.a)(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),Object(o.a)(this._mergeColorCommand)&&(this._mergeColorCommand.shaderProgram=this._mergeColorCommand.shaderProgram.destroy()),Object(o.a)(this._debugGlobeDepthViewportCommand)&&(this._debugGlobeDepthViewportCommand.shaderProgram=this._debugGlobeDepthViewportCommand.shaderProgram.destroy()),Ks(this)};var ale=Jce;function sle(){this._colorTexture=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._framebuffer=void 0,this._packedDepthTexture=void 0,this._packedDepthFramebuffer=void 0,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new bl,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}function cle(e){e._colorTexture=e._colorTexture&&!e._colorTexture.isDestroyed()&&e._colorTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&!e._depthStencilTexture.isDestroyed()&&e._depthStencilTexture.destroy(),e._depthStencilRenderbuffer=e._depthStencilRenderbuffer&&!e._depthStencilRenderbuffer.isDestroyed()&&e._depthStencilRenderbuffer.destroy(),e._framebuffer=e._framebuffer&&!e._framebuffer.isDestroyed()&&e._framebuffer.destroy(),e._packedDepthTexture=e._packedDepthTexture&&!e._packedDepthTexture.isDestroyed()&&e._packedDepthTexture.destroy(),e._packedDepthFramebuffer=e._packedDepthFramebuffer&&!e._packedDepthFramebuffer.isDestroyed()&&e._packedDepthFramebuffer.destroy()}function lle(e,t,n,i,r){var a=e._colorTexture;(!Object(o.a)(a)||a.width!==n||a.height!==i||r!==e._useHdr)&&(cle(e),function(e,t,n,i,r){var o=r?t.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT:LC.UNSIGNED_BYTE;e._colorTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:o,sampler:ZP.NEAREST}),t.depthTexture?e._depthStencilTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8}):e._depthStencilRenderbuffer=new xee({context:t,width:n,height:i,format:Eee.DEPTH_STENCIL}),e._framebuffer=new DG({context:t,colorTextures:[e._colorTexture],depthStencilTexture:e._depthStencilTexture,depthStencilRenderbuffer:e._depthStencilRenderbuffer,destroyAttachments:!1}),e._packedDepthTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),e._packedDepthFramebuffer=new DG({context:t,colorTextures:[e._packedDepthTexture],destroyAttachments:!1})}(e,t,n,i,r))}Object.defineProperties(sle.prototype,{classificationTexture:{get:function(){return this._colorTexture}},classificationFramebuffer:{get:function(){return this._framebuffer}}}),sle.prototype.updateAndClear=function(e,t,n,i){var r=t.width,a=t.height;lle(this,n,r,a,e),function(e,t,n,i,r){e._viewport.width=n,e._viewport.height=i;var a=!bl.equals(e._viewport,r.viewport),s=a!==e._useScissorTest;e._useScissorTest=a,bl.equals(e._scissorRectangle,r.viewport)||(e._scissorRectangle=bl.clone(r.viewport,e._scissorRectangle),s=!0),Object(o.a)(e._renderState)&&bl.equals(e._viewport,e._renderState.viewport)&&!s||(e._renderState=XI.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),Object(o.a)(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(Zce,{uniformMap:{u_depthTexture:function(){return e._depthStencilTexture}},owner:e})),Object(o.a)(e._clearCommand)||(e._clearCommand=new yN({color:new Hf(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e._framebuffer,e._clearCommand.renderState=e._renderState}(this,n,r,a,i),this._useHdr=e},sle.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)},sle.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this._packedDepthTexture},sle.prototype.isDestroyed=function(){return!1},sle.prototype.destroy=function(){return cle(this),Ks(this)};var ule=sle,hle=0,dle=1,fle=2,ple=3,mle=4,gle=5,vle=6,_le=7,ble=8,yle=9,wle=10,Ole=11,Cle=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function Ele(){this._frontFaceAlphaByDistance=new JC(0,1,0,1),this._backFaceAlphaByDistance=new JC(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=Se.clone(Se.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(Ole),this._derivedBlendCommandTypes=new Array(Ole),this._derivedPickCommandTypes=new Array(Ole),this._derivedCommandTypesToUpdate=new Array(Ole),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}function Ale(e,t,n,i){return e?Object(o.a)(n)?(JC.clone(n,i),i.nearValue*=t,i.farValue*=t,i):(i.nearValue=t,i.farValue=t,i):(i.nearValue=1,i.farValue=1,i)}function xle(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function Tle(e,t,n,i,r){var o=0,a=e._frontFaceTranslucent,s=e._backFaceTranslucent;if(!a)return o;var c=t.cameraUnderground,l=e._requiresManualDepthTest,u=i?yle:l?_le:gle,h=i?wle:l?ble:vle;return t.mode===IR.SCENE2D?(r[o++]=fle,r[o++]=u,o):(s?(n||(r[o++]=mle),c?(r[o++]=u,r[o++]=h):(r[o++]=h,r[o++]=u)):c?(n||(r[o++]=ple),r[o++]=hle,r[o++]=h):(n||(r[o++]=fle),r[o++]=dle,r[o++]=u),o)}function Sle(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}function Dle(e,t){return e.indexOf(t)>-1}function Ple(e,t){Sle(e.defines,"TRANSLUCENT"),Sle(t.defines,"TRANSLUCENT")}function Ile(e,t){Sle(e.defines,"GROUND_ATMOSPHERE"),Sle(t.defines,"GROUND_ATMOSPHERE"),Sle(e.defines,"FOG"),Sle(t.defines,"FOG"),Sle(e.defines,"TRANSLUCENT"),Sle(t.defines,"TRANSLUCENT")}function Mle(e,t){if(!Dle(t.defines,"TILE_LIMIT_RECTANGLE")&&!Dle(t.defines,"ENABLE_CLIPPING_PLANES")){t.sources=["void main() \n{ \n gl_FragColor = vec4(1.0); \n} \n"]}}function Rle(e,t){for(var n=t.sources,i=n.length,r=0;r<i;++r)n[r]=KM.replaceMain(n[r],"czm_globe_translucency_main");n.push("\n\nuniform sampler2D u_classificationTexture; \nvoid main() \n{ \n vec2 st = gl_FragCoord.xy / czm_viewport.zw; \n#ifdef MANUAL_DEPTH_TEST \n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, st)); \n if (logDepthOrDepth != 0.0) \n { \n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); \n float depthEC = eyeCoordinate.z / eyeCoordinate.w; \n if (v_positionEC.z < depthEC) \n { \n discard; \n } \n } \n#endif \n czm_globe_translucency_main(); \n vec4 classificationColor = texture2D(u_classificationTexture, st); \n if (classificationColor.a > 0.0) \n { \n // Reverse premultiplication process to get the correct composited result of the classification primitives \n classificationColor.rgb /= classificationColor.a; \n } \n gl_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + gl_FragColor * (1.0 - classificationColor.a); \n} \n")}function Lle(e,t){Rle(0,t),Sle(e.defines,"GROUND_ATMOSPHERE"),Sle(t.defines,"GROUND_ATMOSPHERE"),Sle(e.defines,"FOG"),Sle(t.defines,"FOG")}function jle(e,t){Rle(0,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Fle(e,t){Lle(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Nle(e,t){t.sources=["uniform sampler2D u_classificationTexture; \nvoid main() \n{ \n vec2 st = gl_FragCoord.xy / czm_viewport.zw; \n vec4 pickColor = texture2D(u_classificationTexture, st); \n if (pickColor == vec4(0.0)) \n { \n discard; \n } \n gl_FragColor = pickColor; \n} \n"]}function zle(e,t,n,i,r,a){if(!Object(o.a)(r))return t;if(!i&&Object(o.a)(n))return n;var s=e.shaderCache.getDerivedShaderProgram(t,a);if(!Object(o.a)(s)){var c=t._attributeLocations,l=t.vertexShaderSource.clone(),u=t.fragmentShaderSource.clone();l.defines=Object(o.a)(l.defines)?l.defines.slice(0):[],u.defines=Object(o.a)(u.defines)?u.defines.slice(0):[],r(l,u),s=e.shaderCache.createDerivedShaderProgram(t,a,{vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:c})}return s}function kle(e){e.cull.face=FP.BACK,e.cull.enabled=!0}function Ble(e){e.cull.face=FP.FRONT,e.cull.enabled=!0}function Hle(e){e.cull.face=FP.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Vle(e){e.cull.face=FP.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Ule(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Wle(e){e.cull.face=FP.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=LP.ALPHA_BLEND}function Gle(e){e.cull.face=FP.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=LP.ALPHA_BLEND}function qle(e){e.cull.face=FP.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function Yle(e){e.cull.face=FP.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function $le(e,t,n,i,r){if(!Object(o.a)(i))return e;if(!n&&Object(o.a)(t))return t;var a=r[e.id];if(!Object(o.a)(a)){var s=XI.getState(e);i(s),a=XI.fromCache(s),r[e.id]=a}return a}function Xle(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function Kle(e,t,n,i,r){return Object(o.a)(r)?!i&&Object(o.a)(n)?n:Object(Wf.a)(t,r(e),!1):t}function Qle(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}Object.defineProperties(Ele.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}}),Ele.prototype.update=function(e){var t=e.globe;if(!Object(o.a)(t)||!t.show)return this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,void(this._useDepthPlane=!1);this._frontFaceAlphaByDistance=Ale(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=Ale(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=xle(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=xle(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=function(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==IR.SCENE2D&&t.context.depthTexture}(this,e,t),this._sunVisibleThroughGlobe=function(e,t){var n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}(this,e),this._environmentVisible=function(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}(this,e),this._useDepthPlane=function(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}(this,e),this._numberOfTextureUniforms=function(e){var t=0;e._frontFaceTranslucent&&++t;e._requiresManualDepthTest&&++t;return t}(this),this._rectangle=Se.clone(t.translucency.rectangle,this._rectangle),function(e,t){var n;e._derivedCommandsLength=Tle(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=Tle(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=Tle(e,t,!1,!0,e._derivedPickCommandTypes);var i=0;for(n=0;n<e._derivedCommandsLength;++n)i|=1<<e._derivedCommandTypes[n];for(n=0;n<e._derivedBlendCommandsLength;++n)i|=1<<e._derivedBlendCommandTypes[n];for(n=0;n<e._derivedPickCommandsLength;++n)i|=1<<e._derivedPickCommandTypes[n];var r=0;for(n=0;n<Ole;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[r++]=n);e._derivedCommandsToUpdateLength=r;var a=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=a,!Object(o.a)(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=[new Qle({pass:EI.GLOBE,pickOnly:!1,getShaderProgramFunction:Ple,getRenderStateFunction:kle,getUniformMapFunction:void 0}),new Qle({pass:EI.GLOBE,pickOnly:!1,getShaderProgramFunction:Ile,getRenderStateFunction:Ble,getUniformMapFunction:void 0}),new Qle({pass:EI.GLOBE,pickOnly:!1,getShaderProgramFunction:Mle,getRenderStateFunction:Hle,getUniformMapFunction:void 0}),new Qle({pass:EI.GLOBE,pickOnly:!1,getShaderProgramFunction:Mle,getRenderStateFunction:Vle,getUniformMapFunction:void 0}),new Qle({pass:EI.GLOBE,pickOnly:!1,getShaderProgramFunction:Mle,getRenderStateFunction:Ule,getUniformMapFunction:void 0}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Rle,getRenderStateFunction:Wle,getUniformMapFunction:Xle}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Lle,getRenderStateFunction:Gle,getUniformMapFunction:Xle}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:jle,getRenderStateFunction:Wle,getUniformMapFunction:Xle}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Fle,getRenderStateFunction:Gle,getUniformMapFunction:Xle}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Nle,getRenderStateFunction:qle,getUniformMapFunction:Xle}),new Qle({pass:EI.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Nle,getRenderStateFunction:Yle,getUniformMapFunction:Xle})])}(this,e)};var Zle=new Array(Ole),Jle=new Array(Ole);function eue(e,t,n,i,r,a,s){for(var c=0;c<t;++c){var l=e[c],u=l.derivedCommands.type;(!Object(o.a)(s)||s.indexOf(u)>-1)&&n(l,i,r,a)}}function tue(e,t,n,i,r,o){for(var a=0;a<t;++a)n(e[a],i,r,o)}Ele.prototype.updateDerivedCommands=function(e,t){var n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(0!==i){for(var a=0;a<i;++a)Jle[a]=this._derivedCommandPacks[n[a]],Zle[a]=Cle[n[a]];!function(e,t,n,i,a,s,c){var l=t.derivedCommands.globeTranslucency,u=e._derivedCommandsDirty;if(t.dirty||!Object(o.a)(l)||u){t.dirty=!1,Object(o.a)(l)||(l={},t.derivedCommands.globeTranslucency=l);var h=c.frameNumber,d=Object(r.a)(l.uniformMapDirtyFrame,0),f=Object(r.a)(l.shaderProgramDirtyFrame,0),p=Object(r.a)(l.renderStateDirtyFrame,0),m=l.uniformMap!==t.uniformMap,g=l.shaderProgramId!==t.shaderProgram.id,v=l.renderStateId!==t.renderState.id;m&&(l.uniformMapDirtyFrame=h),g&&(l.shaderProgramDirtyFrame=h),v&&(l.renderStateDirtyFrame=h),l.uniformMap=t.uniformMap,l.shaderProgramId=t.shaderProgram.id,l.renderStateId=t.renderState.id;for(var _=0;_<n;++_){var b,y,w,O=s[_],C=i[_],E=a[_],A=l[E];Object(o.a)(A)?(b=A.uniformMap,y=A.shaderProgram,w=A.renderState):(b=void 0,y=void 0,w=void 0),A=CI.shallowClone(t,A),l[E]=A;var x=Object(r.a)(A.derivedCommands.uniformMapDirtyFrame,0),T=Object(r.a)(A.derivedCommands.shaderProgramDirtyFrame,0),S=Object(r.a)(A.derivedCommands.renderStateDirtyFrame,0),D=m||x<d,P=g||T<f,I=v||S<p;D&&(A.derivedCommands.uniformMapDirtyFrame=h),P&&(A.derivedCommands.shaderProgramDirtyFrame=h),I&&(A.derivedCommands.renderStateDirtyFrame=h),A.derivedCommands.type=C,A.pass=O.pass,A.pickOnly=O.pickOnly,A.uniformMap=Kle(e,t.uniformMap,b,D,O.getUniformMapFunction),A.shaderProgram=zle(c.context,t.shaderProgram,y,P,O.getShaderProgramFunction,E),A.renderState=$le(t.renderState,w,I,O.getRenderStateFunction,O.renderStateCache)}}}(this,e,i,n,Zle,Jle,t)}},Ele.prototype.pushDerivedCommands=function(e,t,n){var i=n.passes.pick;if(!i||!t){var r=this._derivedCommandTypes,o=this._derivedCommandsLength;if(i?(r=this._derivedPickCommandTypes,o=this._derivedPickCommandsLength):t&&(r=this._derivedBlendCommandTypes,o=this._derivedBlendCommandsLength),0!==o)for(var a=e.derivedCommands.globeTranslucency,s=0;s<o;++s){var c=Cle[r[s]];n.commandList.push(a[c])}else n.commandList.push(e)}};var nue=[hle,dle],iue=[fle,ple,mle];Ele.prototype.executeGlobeCommands=function(e,t,n,i,r){var o=i.context,a=e.commands[EI.GLOBE],s=e.indices[EI.GLOBE];0!==s&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(o,r),eue(a,s,t,i,o,r,nue))},Ele.prototype.executeGlobeClassificationCommands=function(e,t,n,i,r){var o=i.context,a=e.commands[EI.GLOBE],s=e.indices[EI.GLOBE],c=e.commands[EI.TERRAIN_CLASSIFICATION],l=e.indices[EI.TERRAIN_CLASSIFICATION];if(0!==s&&0!==l){var u=this._frontFaceTranslucent,h=this._backFaceTranslucent;if(u&&h||tue(c,l,t,i,o,r),u||h){this._globeTranslucencyFramebuffer=n;var d=o.uniformState.globeDepthTexture,f=r.framebuffer;if(r.framebuffer=n.classificationFramebuffer,eue(a,s,t,i,o,r,iue),o.depthTexture){var p=n.packDepth(o,r);o.uniformState.globeDepthTexture=p}tue(c,l,t,i,o,r),o.uniformState.globeDepthTexture=d,r.framebuffer=f}}};var rue=Ele;function oue(){this._image=new Image}function aue(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.url)&&!Object(o.a)(e.metadata))throw new a.a("options.url or options.metadata is required.");var t;if(this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,Object(o.a)(e.metadata))t=e.metadata;else{var n=_t.a.createIfNeeded(e.url);t=new Yy(n)}this._metadata=t,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new Lt({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new Se(-d.PI,-d.PI,d.PI,d.PI),ellipsoid:e.ellipsoid});var i=e.credit;"string"===typeof i&&(i=new yn(i)),this._credit=i,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,Object(o.a)(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new oue),this._errorEvent=new wn.a,this._ready=!1;var s,c=this;this._readyPromise=t.readyPromise.then((function(e){if(!t.imageryPresent){var n=new de.a("The server "+t.url+" doesn't have imagery");return s=$c.handleError(s,c,c._errorEvent,n.message,void 0,void 0,void 0,n),Yt.a.reject(n)}return $c.handleSuccess(s),c._ready=e,e})).otherwise((function(e){return s=$c.handleError(s,c,c._errorEvent,e.message,void 0,void 0,void 0,e),Yt.a.reject(e)}))}oue.prototype.isReady=function(){return!0},oue.prototype.shouldDiscardImage=function(e){return e===this._image},Object.defineProperties(aue.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){if(!this._ready)throw new a.a("tileWidth must not be called before the imagery provider is ready.");return this._tileWidth}},tileHeight:{get:function(){if(!this._ready)throw new a.a("tileHeight must not be called before the imagery provider is ready.");return this._tileHeight}},maximumLevel:{get:function(){if(!this._ready)throw new a.a("maximumLevel must not be called before the imagery provider is ready.");return this._maximumLevel}},minimumLevel:{get:function(){if(!this._ready)throw new a.a("minimumLevel must not be called before the imagery provider is ready.");return 0}},tilingScheme:{get:function(){if(!this._ready)throw new a.a("tilingScheme must not be called before the imagery provider is ready.");return this._tilingScheme}},rectangle:{get:function(){if(!this._ready)throw new a.a("rectangle must not be called before the imagery provider is ready.");return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){if(!this._ready)throw new a.a("tileDiscardPolicy must not be called before the imagery provider is ready.");return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return this._ready}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}}),aue.prototype.getTileCredits=function(e,t,n){if(!this._ready)throw new a.a("getTileCredits must not be called before the imagery provider is ready.");var i=this._metadata,r=i.getTileInformation(e,t,n);if(Object(o.a)(r)){var s=i.providers[r.imageryProvider];if(Object(o.a)(s))return[s]}},aue.prototype.requestImage=function(e,t,n,i){if(!this._ready)throw new a.a("requestImage must not be called before the imagery provider is ready.");var r=this._tileDiscardPolicy._image,s=this._metadata,c=Yy.tileXYToQuadKey(e,t,n),l=s.getTileInformation(e,t,n);if(!Object(o.a)(l)){if(s.isValid(c)){var u=new Ac.a({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction});return void s.populateSubtree(e,t,n,u)}return r}if(!l.hasImagery())return r;var h=function(e,t,n,i,r,a){var s=Yy.tileXYToQuadKey(n,i,r),c=t.imageryVersion;return c=Object(o.a)(c)&&c>0?c:1,e._metadata.resource.getDerivedResource({url:"flatfile?f1-0"+s+"-i."+c.toString(),request:a})}(this,l,e,t,n,i).fetchArrayBuffer();return Object(o.a)(h)?h.then((function(e){H_(s.key,e);var t,n=new Uint8Array(e),i=s.protoImagery;if(Object(o.a)(i)&&i||(t=function(e){if(e[6]==="JFIF".charCodeAt(0)&&e[7]==="JFIF".charCodeAt(1)&&e[8]==="JFIF".charCodeAt(2)&&e[9]==="JFIF".charCodeAt(3))return"image/jpeg";if(e[1]==="PNG".charCodeAt(0)&&e[2]==="PNG".charCodeAt(1)&&e[3]==="PNG".charCodeAt(2))return"image/png";return}(n)),!Object(o.a)(t)&&(!Object(o.a)(i)||i)){var a=function(e){var t=jy.a.Reader.create(e),n=t.len,i={};for(;t.pos<n;){var r=t.uint32();switch(r>>>3){case 1:i.imageType=t.uint32();break;case 2:i.imageData=t.bytes();break;case 3:i.alphaType=t.uint32();break;case 4:i.imageAlpha=t.bytes();break;case 5:var a=i.copyrightIds;if(Object(o.a)(a)||(a=i.copyrightIds=[]),2===(7&r))for(var s=t.uint32()+t.pos;t.pos<s;)a.push(t.uint32());else a.push(t.uint32());break;default:t.skipType(7&r)}}var c=i.imageType;if(Object(o.a)(c))switch(c){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new de.a("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}var l=i.alphaType;Object(o.a)(l)&&0!==l&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha);return i}(n);t=a.imageType,n=a.imageData}return Object(o.a)(t)&&Object(o.a)(n)?MC({uint8Array:n,format:t,flipY:!0}):r})):void 0},aue.prototype.pickFeatures=function(e,t,n,i,r){};var sue=new Hf(1,1,1,.4),cue=new Hf(0,1,0,.05),lue=new Hf(0,.5,0,.2);function uue(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0,this._tilingScheme=Object(o.a)(e.tilingScheme)?e.tilingScheme:new Lt({ellipsoid:e.ellipsoid}),this._cells=Object(r.a)(e.cells,8),this._color=Object(r.a)(e.color,sue),this._glowColor=Object(r.a)(e.glowColor,cue),this._glowWidth=Object(r.a)(e.glowWidth,6),this._backgroundColor=Object(r.a)(e.backgroundColor,lue),this._errorEvent=new wn.a,this._tileWidth=Object(r.a)(e.tileWidth,256),this._tileHeight=Object(r.a)(e.tileHeight,256),this._canvasSize=Object(r.a)(e.canvasSize,256),this._canvas=this._createGridCanvas(),this._readyPromise=Yt.a.resolve(!0)}Object.defineProperties(uue.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return!0}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}}),uue.prototype._drawGrid=function(e){for(var t=this._canvasSize,n=0;n<=this._cells;++n){var i=1+n/this._cells*(t-1);e.moveTo(i,0),e.lineTo(i,t),e.moveTo(0,i),e.lineTo(t,i)}e.stroke()},uue.prototype._createGridCanvas=function(){var e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;var t=this._canvasSize,n=e.getContext("2d"),i=this._backgroundColor.toCssColorString();n.fillStyle=i,n.fillRect(0,0,t,t);var r=this._glowColor.toCssColorString();n.strokeStyle=r,n.lineWidth=this._glowWidth,n.strokeRect(0,0,t,t),this._drawGrid(n),n.lineWidth=.5*this._glowWidth,n.strokeRect(0,0,t,t),this._drawGrid(n);var o=this._color.toCssColorString();return n.strokeStyle=o,n.lineWidth=2,n.strokeRect(0,0,t,t),n.lineWidth=1,this._drawGrid(n),e},uue.prototype.getTileCredits=function(e,t,n){},uue.prototype.requestImage=function(e,t,n,i){return this._canvas},uue.prototype.pickFeatures=function(e,t,n,i,r){};function hue(){this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._texture=void 0,this._classifiedTexture=void 0,this._depthStencilTexture=void 0,this._fbo=void 0,this._fboClassified=void 0,this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new yN({color:new Hf(0,0,0,0),owner:this}),this._clearCommand=new yN({color:new Hf(0,0,0,0),depth:1,stencil:0});var e=this;this._uniformMap={colorTexture:function(){return e._texture},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._classifiedTexture}}}Object.defineProperties(hue.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}}),hue.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var due={depthMask:!1,stencilTest:{enabled:!0,frontFunction:XL.EQUAL,frontOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.KEEP},backFunction:XL.NEVER,reference:0,mask:JL.CLASSIFICATION_MASK},blending:LP.ALPHA_BLEND},fue={depthMask:!1,stencilTest:{enabled:!0,frontFunction:XL.NOT_EQUAL,frontOperation:{fail:QL.KEEP,zFail:QL.KEEP,zPass:QL.KEEP},backFunction:XL.NEVER,reference:0,mask:JL.CLASSIFICATION_MASK},blending:LP.ALPHA_BLEND},pue={depthMask:!0,depthTest:{enabled:!0},stencilTest:JL.setCesium3DTileBit(),stencilMask:JL.CESIUM_3D_TILE_MASK,blending:LP.ALPHA_BLEND};hue.prototype.update=function(e){var t=this._texture,n=!Object(o.a)(t)||this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;var i,r,a=e.drawingBufferWidth,s=e.drawingBufferHeight,c=!Object(o.a)(t)||t.width!==a||t.height!==s;((c||n)&&(this._texture=this._texture&&this._texture.destroy(),this._classifiedTexture=this._classifiedTexture&&this._classifiedTexture.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._texture=new nI({context:e,width:a,height:s,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.LINEAR,magnificationFilter:qP.LINEAR})}),Object(o.a)(this._previousFramebuffer)||(this._classifiedTexture=new nI({context:e,width:a,height:s,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:$P.LINEAR,magnificationFilter:qP.LINEAR})}),this._depthStencilTexture=new nI({context:e,width:a,height:s,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8}))),!Object(o.a)(this._fbo)||c||n)&&(this._fbo=this._fbo&&this._fbo.destroy(),this._fboClassified=this._fboClassified&&this._fboClassified.destroy(),Object(o.a)(this._previousFramebuffer)?(i=this._previousFramebuffer.depthStencilTexture,r=this._previousFramebuffer.depthStencilRenderbuffer):i=this._depthStencilTexture,this._fbo=new DG({context:e,colorTextures:[this._texture],depthStencilTexture:i,depthStencilRenderbuffer:r,destroyAttachments:!1}),Object(o.a)(this._previousFramebuffer)||(this._fboClassified=new DG({context:e,colorTextures:[this._classifiedTexture],depthStencilTexture:i,destroyAttachments:!1})));if(Object(o.a)(this._rsUnclassified)||(this._rsUnclassified=XI.fromCache(due),this._rsClassified=XI.fromCache(fue),this._rsDefault=XI.fromCache(pue)),!Object(o.a)(this._unclassifiedCommand)||n){Object(o.a)(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());var l=Object(o.a)(this._previousFramebuffer)?"uniform sampler2D colorTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n if (color.a == 0.0)\n {\n discard;\n }\n#ifdef UNCLASSIFIED\n gl_FragColor = color * czm_invertClassificationColor;\n#else\n gl_FragColor = color;\n#endif\n}\n":"#extension GL_EXT_frag_depth : enable\nuniform sampler2D colorTexture;\nuniform sampler2D depthTexture;\nuniform sampler2D classifiedTexture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n if (color.a == 0.0)\n {\n discard;\n }\n bool isClassified = all(equal(texture2D(classifiedTexture, v_textureCoordinates), vec4(0.0)));\n#ifdef UNCLASSIFIED\n vec4 highlightColor = czm_invertClassificationColor;\n if (isClassified)\n {\n discard;\n }\n#else\n vec4 highlightColor = vec4(1.0);\n if (!isClassified)\n {\n discard;\n }\n#endif\n gl_FragColor = color * highlightColor;\n gl_FragDepthEXT = texture2D(depthTexture, v_textureCoordinates).r;\n}\n",u=new KM({defines:["UNCLASSIFIED"],sources:[l]}),h=new KM({sources:[l]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:Object(o.a)(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(h,{renderState:Object(o.a)(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),Object(o.a)(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),Object(o.a)(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(Qce,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}},hue.prototype.clear=function(e,t){var n=t.framebuffer;Object(o.a)(this._previousFramebuffer)?(t.framebuffer=this._fbo,this._clearColorCommand.execute(e,t)):(t.framebuffer=this._fbo,this._clearCommand.execute(e,t),t.framebuffer=this._fboClassified,this._clearCommand.execute(e,t)),t.framebuffer=n},hue.prototype.executeClassified=function(e,t){if(!Object(o.a)(this._previousFramebuffer)){var n=t.framebuffer;t.framebuffer=this._fboClassified,this._translucentCommand.execute(e,t),t.framebuffer=n}this._classifiedCommand.execute(e,t)},hue.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)},hue.prototype.isDestroyed=function(){return!1},hue.prototype.destroy=function(){return this._fbo=this._fbo&&this._fbo.destroy(),this._texture=this._texture&&this._texture.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),Object(o.a)(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),Ks(this)};var mue=hue;function gue(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}function vue(e){if(Object(o.a)(e)&&e.length!==yH.NUMBER_OF_JOB_TYPES)throw new a.a("A budget must be specified for each job type; budgets.length should equal JobType.NUMBER_OF_JOB_TYPES.");var t=new Array(yH.NUMBER_OF_JOB_TYPES);t[yH.TEXTURE]=new gue(Object(o.a)(e)?e[yH.TEXTURE]:10),t[yH.PROGRAM]=new gue(Object(o.a)(e)?e[yH.PROGRAM]:10),t[yH.BUFFER]=new gue(Object(o.a)(e)?e[yH.BUFFER]:30);var n,i=t.length,r=0;for(n=0;n<i;++n)r+=t[n].total;var s=new Array(i);for(n=0;n<i;++n)s[n]=!1;this._totalBudget=r,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=s}Object.defineProperties(gue.prototype,{total:{get:function(){return this._total}}}),vue.getTimestamp=Sf,Object.defineProperties(vue.prototype,{totalBudget:{get:function(){return this._totalBudget}}}),vue.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget},vue.prototype.resetBudgets=function(){for(var e=this._budgets,t=e.length,n=0;n<t;++n){var i=e[n];i.starvedLastFrame=i.starvedThisFrame,i.starvedThisFrame=!1,i.usedThisFrame=0,i.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0},vue.prototype.execute=function(e,t){var n,i=this._budgets,r=i[t],o=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&o)return r.starvedThisFrame=!0,!1;if(r.usedThisFrame+r.stolenFromMeThisFrame>=r.total){var a,s=i.length;for(a=0;a<s&&(!((n=i[a]).usedThisFrame+n.stolenFromMeThisFrame<n.total)||n.starvedLastFrame);++a);if(a===s&&o)return!1;o&&(r.starvedThisFrame=!0)}var c=vue.getTimestamp();e.execute();var l=vue.getTimestamp()-c;return this._totalUsedThisFrame+=l,n?n.stolenFromMeThisFrame+=l:r.usedThisFrame+=l,this._executedThisFrame[t]=!0,!0};var _ue=vue;function bue(){}Object.defineProperties(bue.prototype,{color:{get:a.a.throwInstantiationError},intensity:{get:a.a.throwInstantiationError}});var yue=/\/$/,wue=new yn('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function Oue(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).styleId;if(!Object(o.a)(t))throw new a.a("options.styleId is required.");this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0;var n=_t.a.createIfNeeded(Object(r.a)(e.url,"https://api.mapbox.com/styles/v1/")),i=qC.getAccessToken(e.accessToken);this._styleId=t,this._accessToken=i,this._accessTokenErrorCredit=yn.clone(qC.getErrorCredit(e.accessToken));var s=Object(r.a)(e.tilesize,512);this._tilesize=s;var c=Object(r.a)(e.username,"mapbox");this._username=c;var l,u=Object(o.a)(e.scaleFactor)?"@2x":"",h=n.getUrlComponent();yue.test(h)||(h+="/"),h+=this._username+"/"+t+"/tiles/"+this._tilesize+"/{z}/{x}/{y}"+u,n.url=h,n.setQueryParameters({access_token:i}),Object(o.a)(e.credit)?"string"===typeof(l=e.credit)&&(l=new yn(l)):l=wue,this._resource=n,this._imageryProvider=new mre({url:n,credit:l,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(Oue.prototype,{url:{get:function(){return this._imageryProvider.url}},ready:{get:function(){return this._imageryProvider.ready}},readyPromise:{get:function(){return this._imageryProvider.readyPromise}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}}),Oue.prototype.getTileCredits=function(e,t,n){if(Object(o.a)(this._accessTokenErrorCredit))return[this._accessTokenErrorCredit]},Oue.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)},Oue.prototype.pickFeatures=function(e,t,n,i,r){return this._imageryProvider.pickFeatures(e,t,n,i,r)},Oue._defaultCredit=wue;var Cue=Oue;function Eue(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).textureUrl;Object(o.a)(t)||(t=At("Assets/Textures/moonSmall.jpg")),this.show=Object(r.a)(e.show,!0),this.textureUrl=t,this._ellipsoid=Object(r.a)(e.ellipsoid,W.MOON),this.onlySunLighting=Object(r.a)(e.onlySunLighting,!0),this._ellipsoidPrimitive=new Xoe({radii:this.ellipsoid.radii,material:mI.fromType(mI.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new fC}Object.defineProperties(Eue.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var Aue=new oe,xue=new oe,Tue=new O,Sue=[];Eue.prototype.update=function(e){if(this.show){var t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;var n=e.time;Object(o.a)(ya.computeIcrfToFixedMatrix(n,Aue))||ya.computeTemeToPseudoFixedMatrix(n,Aue);var i=this._axes.evaluate(n,xue);oe.transpose(i,i),oe.multiply(Aue,i,i);var r=LS.computeMoonPositionInEarthInertialFrame(n,Tue);oe.multiplyByVector(Aue,r,r),Ae.fromRotationTranslation(i,r,t.modelMatrix);var a=e.commandList;return e.commandList=Sue,Sue.length=0,t.update(e),e.commandList=a,1===Sue.length?Sue[0]:void 0}},Eue.prototype.isDestroyed=function(){return!1},Eue.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),Ks(this)};var Due=Eue;function Pue(e){}Pue.prototype.isReady=function(){return!0},Pue.prototype.shouldDiscardImage=function(e){return!1};var Iue="#ifdef MRT\n#extension GL_EXT_draw_buffers : enable\n#endif\n\nuniform vec4 u_bgColor;\nuniform sampler2D u_depthTexture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n if (texture2D(u_depthTexture, v_textureCoordinates).r < 1.0)\n {\n#ifdef MRT\n gl_FragData[0] = u_bgColor;\n gl_FragData[1] = vec4(u_bgColor.a);\n#else\n gl_FragColor = u_bgColor;\n#endif\n return;\n }\n \n discard;\n}\n";function Mue(e){this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;var t=e.colorBufferFloat&&e.depthTexture;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=void 0,this._alphaFBO=void 0,this._adjustTranslucentFBO=void 0,this._adjustAlphaFBO=void 0,this._opaqueClearCommand=new yN({color:new Hf(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new yN({color:new Hf(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new yN({color:new Hf(0,0,0,0),owner:this}),this._alphaClearCommand=new yN({color:new Hf(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new bl,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function Rue(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function Lue(e){e._translucentFBO=e._translucentFBO&&!e._translucentFBO.isDestroyed()&&e._translucentFBO.destroy(),e._alphaFBO=e._alphaFBO&&!e._alphaFBO.isDestroyed()&&e._alphaFBO.destroy(),e._adjustTranslucentFBO=e._adjustTranslucentFBO&&!e._adjustTranslucentFBO.isDestroyed()&&e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO=e._adjustAlphaFBO&&!e._adjustAlphaFBO.isDestroyed()&&e._adjustAlphaFBO.destroy()}function jue(e){Rue(e),Lue(e)}Mue.prototype.update=function(e,t,n,i){if(this.isSupported()){this._opaqueFBO=n,this._opaqueTexture=n.getColorTexture(0),this._depthStencilTexture=n.depthStencilTexture;var r=this._opaqueTexture.width,a=this._opaqueTexture.height,s=this._accumulationTexture,c=!Object(o.a)(s)||s.width!==r||s.height!==a||i!==this._useHDR;if(c&&function(e,t,n,i){Rue(e),e._accumulationTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.FLOAT});var r=new Float32Array(n*i*4);e._revealageTexture=new nI({context:t,pixelFormat:FC.RGBA,pixelDatatype:LC.FLOAT,source:{arrayBufferView:r,width:n,height:i},flipY:!1})}(this,e,r,a),Object(o.a)(this._translucentFBO)&&!c||function(e,t){Lue(e);var n=Ts.FRAMEBUFFER_COMPLETE,i=!0;if(e._translucentMRTSupport&&(e._translucentFBO=new DG({context:t,colorTextures:[e._accumulationTexture,e._revealageTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._adjustTranslucentFBO=new DG({context:t,colorTextures:[e._accumulationTexture,e._revealageTexture],destroyAttachments:!1}),e._translucentFBO.status===n&&e._adjustTranslucentFBO.status===n||(Lue(e),e._translucentMRTSupport=!1)),!e._translucentMRTSupport){e._translucentFBO=new DG({context:t,colorTextures:[e._accumulationTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._alphaFBO=new DG({context:t,colorTextures:[e._revealageTexture],depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1}),e._adjustTranslucentFBO=new DG({context:t,colorTextures:[e._accumulationTexture],destroyAttachments:!1}),e._adjustAlphaFBO=new DG({context:t,colorTextures:[e._revealageTexture],destroyAttachments:!1});var r=e._translucentFBO.status===n,o=e._alphaFBO.status===n,a=e._adjustTranslucentFBO.status===n,s=e._adjustAlphaFBO.status===n;r&&o&&a&&s||(jue(e),e._translucentMultipassSupport=!1,i=!1)}return i}(this,e)){this._useHDR=i;var l,u,h=this;Object(o.a)(this._compositeCommand)||(l=new KM({sources:["/**\n * Compositing for Weighted Blended Order-Independent Transparency. See:\n * - http://jcgt.org/published/0002/02/09/\n * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html\n */\n\nuniform sampler2D u_opaque;\nuniform sampler2D u_accumulation;\nuniform sampler2D u_revealage;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n vec4 opaque = texture2D(u_opaque, v_textureCoordinates);\n vec4 accum = texture2D(u_accumulation, v_textureCoordinates);\n float r = texture2D(u_revealage, v_textureCoordinates).r;\n\n#ifdef MRT\n vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\n#else\n vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);\n#endif\n\n gl_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;\n\n if (opaque != czm_backgroundColor)\n {\n gl_FragColor.a = 1.0;\n }\n}\n"]}),this._translucentMRTSupport&&l.defines.push("MRT"),u={u_opaque:function(){return h._opaqueTexture},u_accumulation:function(){return h._accumulationTexture},u_revealage:function(){return h._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(l,{uniformMap:u,owner:this})),Object(o.a)(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(l=new KM({defines:["MRT"],sources:[Iue]}),u={u_bgColor:function(){return h._translucentMRTClearCommand.color},u_depthTexture:function(){return h._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(l,{uniformMap:u,owner:this})):this._translucentMultipassSupport&&(l=new KM({sources:[Iue]}),u={u_bgColor:function(){return h._translucentMultipassClearCommand.color},u_depthTexture:function(){return h._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(l,{uniformMap:u,owner:this}),u={u_bgColor:function(){return h._alphaClearCommand.color},u_depthTexture:function(){return h._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(l,{uniformMap:u,owner:this}))),this._viewport.width=r,this._viewport.height=a;var d=!bl.equals(this._viewport,t.viewport),f=d!==this._useScissorTest;this._useScissorTest=d,bl.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=bl.clone(t.viewport,this._scissorRectangle),f=!0),Object(o.a)(this._rs)&&bl.equals(this._viewport,this._rs.viewport)&&!f||(this._rs=XI.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),Object(o.a)(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),Object(o.a)(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)}}};var Fue={enabled:!0,color:new Hf(0,0,0,0),equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.ONE,functionDestinationRgb:MP.ONE,functionSourceAlpha:MP.ZERO,functionDestinationAlpha:MP.ONE_MINUS_SOURCE_ALPHA},Nue={enabled:!0,color:new Hf(0,0,0,0),equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.ONE,functionDestinationRgb:MP.ONE,functionSourceAlpha:MP.ONE,functionDestinationAlpha:MP.ONE},zue={enabled:!0,color:new Hf(0,0,0,0),equationRgb:PP.ADD,equationAlpha:PP.ADD,functionSourceRgb:MP.ZERO,functionDestinationRgb:MP.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:MP.ZERO,functionDestinationAlpha:MP.ONE_MINUS_SOURCE_ALPHA};function kue(e,t,n,i){var r=n[i.id];if(!Object(o.a)(r)){var a=XI.getState(i);a.depthMask=!1,a.blending=t,r=XI.fromCache(a),n[i.id]=r}return r}function Bue(e,t,n,i){var r=e.shaderCache.getDerivedShaderProgram(t,n);if(!Object(o.a)(r)){var a=t._attributeLocations,s=t.fragmentShaderSource.clone();s.sources=s.sources.map((function(e){return e=(e=(e=(e=KM.replaceMain(e,"czm_translucent_main")).replace(/gl_FragColor/g,"czm_gl_FragColor")).replace(/\bdiscard\b/g,"czm_discard = true")).replace(/czm_phong/g,"czm_translucentPhong")})),s.sources.splice(0,0,(-1!==i.indexOf("gl_FragData")?"#extension GL_EXT_draw_buffers : enable \n":"")+"vec4 czm_gl_FragColor;\nbool czm_discard = false;\n"),s.sources.push("void main()\n{\n czm_translucent_main();\n if (czm_discard)\n {\n discard;\n }\n"+i+"}\n"),r=e.shaderCache.createDerivedShaderProgram(t,n,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:s,attributeLocations:a})}return r}Mue.prototype.createDerivedCommands=function(e,t,n){var i,r,a,s,c,l,u,h;(Object(o.a)(n)||(n={}),this._translucentMRTSupport)?(Object(o.a)(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,r=n.translucentCommand.renderState),n.translucentCommand=CI.shallowClone(e,n.translucentCommand),Object(o.a)(i)&&n.shaderProgramId===e.shaderProgram.id?(n.translucentCommand.shaderProgram=i,n.translucentCommand.renderState=r):(n.translucentCommand.shaderProgram=function(e,t){return Bue(e,t,"translucentMRT"," vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\n float ai = czm_gl_FragColor.a;\n float wzi = czm_alphaWeight(ai);\n gl_FragData[0] = vec4(Ci * wzi, ai);\n gl_FragData[1] = vec4(ai * wzi);\n")}(t,e.shaderProgram),n.translucentCommand.renderState=(u=this,h=e.renderState,kue(0,Fue,u._translucentRenderStateCache,h)),n.shaderProgramId=e.shaderProgram.id)):(Object(o.a)(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,s=n.translucentCommand.renderState,c=n.alphaCommand.shaderProgram,l=n.alphaCommand.renderState),n.translucentCommand=CI.shallowClone(e,n.translucentCommand),n.alphaCommand=CI.shallowClone(e,n.alphaCommand),Object(o.a)(a)&&n.shaderProgramId===e.shaderProgram.id?(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=s,n.alphaCommand.shaderProgram=c,n.alphaCommand.renderState=l):(n.translucentCommand.shaderProgram=function(e,t){return Bue(e,t,"translucentMultipass"," vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\n float ai = czm_gl_FragColor.a;\n float wzi = czm_alphaWeight(ai);\n gl_FragColor = vec4(Ci, ai) * wzi;\n")}(t,e.shaderProgram),n.translucentCommand.renderState=function(e,t,n){return kue(0,Nue,e._translucentRenderStateCache,n)}(this,0,e.renderState),n.alphaCommand.shaderProgram=function(e,t){return Bue(e,t,"alphaMultipass"," float ai = czm_gl_FragColor.a;\n gl_FragColor = vec4(ai);\n")}(t,e.shaderProgram),n.alphaCommand.renderState=function(e,t,n){return kue(0,zue,e._alphaRenderStateCache,n)}(this,0,e.renderState),n.shaderProgramId=e.shaderProgram.id));return n},Mue.prototype.executeCommands=function(e,t,n,i,r){this._translucentMRTSupport?function(e,t,n,i,r,a){var s=t.context,c=t.frameState.useLogDepth,l=t._hdr,u=i.framebuffer,h=r.length,d=t.frameState.shadowState.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO,e._adjustTranslucentCommand.execute(s,i);var f,p=e._opaqueFBO;i.framebuffer=e._translucentFBO;for(var m=0;m<h;++m)f=r[m],f=c?f.derivedCommands.logDepth.command:f,f=l?f.derivedCommands.hdr.command:f,n(d&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand,t,s,i,p);Object(o.a)(a)&&(f=a.unclassifiedCommand,n(d&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand,t,s,i,p)),i.framebuffer=u}(this,e,t,n,i,r):function(e,t,n,i,r,a){var s,c,l=t.context,u=t.frameState.useLogDepth,h=t._hdr,d=i.framebuffer,f=r.length,p=t.frameState.shadowState.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO,e._adjustTranslucentCommand.execute(l,i),i.framebuffer=e._adjustAlphaFBO,e._adjustAlphaCommand.execute(l,i);var m=e._opaqueFBO;for(i.framebuffer=e._translucentFBO,c=0;c<f;++c)s=r[c],s=u?s.derivedCommands.logDepth.command:s,s=h?s.derivedCommands.hdr.command:s,n(p&&s.receiveShadows?s.derivedCommands.oit.shadows.translucentCommand:s.derivedCommands.oit.translucentCommand,t,l,i,m);for(Object(o.a)(a)&&(s=a.unclassifiedCommand,n(p&&s.receiveShadows?s.derivedCommands.oit.shadows.translucentCommand:s.derivedCommands.oit.translucentCommand,t,l,i,m)),i.framebuffer=e._alphaFBO,c=0;c<f;++c)s=r[c],s=u?s.derivedCommands.logDepth.command:s,s=h?s.derivedCommands.hdr.command:s,n(p&&s.receiveShadows?s.derivedCommands.oit.shadows.alphaCommand:s.derivedCommands.oit.alphaCommand,t,l,i,m);Object(o.a)(a)&&(s=a.unclassifiedCommand,n(p&&s.receiveShadows?s.derivedCommands.oit.shadows.alphaCommand:s.derivedCommands.oit.alphaCommand,t,l,i,m)),i.framebuffer=d}(this,e,t,n,i,r)},Mue.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)},Mue.prototype.clear=function(e,t,n){var i=t.framebuffer;t.framebuffer=this._opaqueFBO,Hf.clone(n,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO,this._alphaClearCommand.execute(e,t)),t.framebuffer=i},Mue.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport},Mue.prototype.isDestroyed=function(){return!1},Mue.prototype.destroy=function(){return jue(this),Object(o.a)(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),Object(o.a)(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),Object(o.a)(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),Ks(this)};var Hue=Mue,Vue=new yn("MapQuest, Open Street Map and contributors, CC-BY-SA");function Uue(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=_t.a.createIfNeeded(Object(r.a)(e.url,"https://a.tile.openstreetmap.org/"));t.appendForwardSlash(),t.url+="{z}/{x}/{y}."+Object(r.a)(e.fileExtension,"png");var n=new Kc({ellipsoid:e.ellipsoid}),i=Object(r.a)(e.minimumLevel,0),o=e.maximumLevel,s=Object(r.a)(e.rectangle,n.rectangle),c=n.positionToTileXY(Se.southwest(s),i),l=n.positionToTileXY(Se.northeast(s),i),u=(Math.abs(l.x-c.x)+1)*(Math.abs(l.y-c.y)+1);if(u>4)throw new a.a("The rectangle and minimumLevel indicate that there are "+u+" tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.");var h=Object(r.a)(e.credit,Vue);"string"===typeof h&&(h=new yn(h)),mre.call(this,{url:t,credit:h,tilingScheme:n,tileWidth:256,tileHeight:256,minimumLevel:i,maximumLevel:o,rectangle:s})}Object(o.a)(Object.create)&&(Uue.prototype=Object.create(mre.prototype),Uue.prototype.constructor=Uue);var Wue=Uue,Gue=new Mt(1,1);function que(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.mass=Object(r.a)(e.mass,1),this.position=O.clone(Object(r.a)(e.position,O.ZERO)),this.velocity=O.clone(Object(r.a)(e.velocity,O.ZERO)),this.life=Object(r.a)(e.life,Number.MAX_VALUE),this.image=e.image,this.startColor=Hf.clone(Object(r.a)(e.startColor,Hf.WHITE)),this.endColor=Hf.clone(Object(r.a)(e.endColor,Hf.WHITE)),this.startScale=Object(r.a)(e.startScale,1),this.endScale=Object(r.a)(e.endScale,1),this.imageSize=Mt.clone(Object(r.a)(e.imageSize,Gue)),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(que.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var Yue=new O;que.prototype.update=function(e,t){return O.multiplyByScalar(this.velocity,e,Yue),O.add(this.position,Yue,this.position),Object(o.a)(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life};var $ue=que;function Xue(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.time=Object(r.a)(e.time,0),this.minimum=Object(r.a)(e.minimum,0),this.maximum=Object(r.a)(e.maximum,50),this._complete=!1}Object.defineProperties(Xue.prototype,{complete:{get:function(){return this._complete}}});function Kue(e){throw new a.a("This type should not be instantiated directly. Instead, use BoxEmitter, CircleEmitter, ConeEmitter or SphereEmitter.")}Kue.prototype.emit=function(e){a.a.throwInstantiationError()};var Que=new Mt(1,1);function Zue(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this.show=Object(r.a)(e.show,!0),this.updateCallback=e.updateCallback,this.loop=Object(r.a)(e.loop,!0),this.image=Object(r.a)(e.image,void 0);var t=e.emitter;Object(o.a)(t)||(t=new Gie(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this._emitterModelMatrix=Ae.clone(Object(r.a)(e.emitterModelMatrix,Ae.IDENTITY)),this._matrixDirty=!0,this._combinedMatrix=new Ae,this._startColor=Hf.clone(Object(r.a)(e.color,Object(r.a)(e.startColor,Hf.WHITE))),this._endColor=Hf.clone(Object(r.a)(e.color,Object(r.a)(e.endColor,Hf.WHITE))),this._startScale=Object(r.a)(e.scale,Object(r.a)(e.startScale,1)),this._endScale=Object(r.a)(e.scale,Object(r.a)(e.endScale,1)),this._emissionRate=Object(r.a)(e.emissionRate,5),this._minimumSpeed=Object(r.a)(e.speed,Object(r.a)(e.minimumSpeed,1)),this._maximumSpeed=Object(r.a)(e.speed,Object(r.a)(e.maximumSpeed,1)),this._minimumParticleLife=Object(r.a)(e.particleLife,Object(r.a)(e.minimumParticleLife,5)),this._maximumParticleLife=Object(r.a)(e.particleLife,Object(r.a)(e.maximumParticleLife,5)),this._minimumMass=Object(r.a)(e.mass,Object(r.a)(e.minimumMass,1)),this._maximumMass=Object(r.a)(e.mass,Object(r.a)(e.maximumMass,1)),this._minimumImageSize=Mt.clone(Object(r.a)(e.imageSize,Object(r.a)(e.minimumImageSize,Que))),this._maximumImageSize=Mt.clone(Object(r.a)(e.imageSize,Object(r.a)(e.maximumImageSize,Que))),this._sizeInMeters=Object(r.a)(e.sizeInMeters,!1),this._lifetime=Object(r.a)(e.lifetime,Number.MAX_VALUE),this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new wn.a,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}function Jue(e){var t=e._particlePool.pop();return Object(o.a)(t)||(t=new $ue),t}function ehe(e,t){e._particlePool.push(t)}function the(e){Object(o.a)(e._billboard)&&(e._billboard.show=!1)}function nhe(e,t){var n=t._billboard;Object(o.a)(n)||(n=t._billboard=e._billboardCollection.add({image:t.image})),n.width=t.imageSize.x,n.height=t.imageSize.y,n.position=t.position,n.sizeInMeters=e.sizeInMeters,n.show=!0;var i=d.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),r=d.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),a=d.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=d.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new Hf(i,r,a,s),n.scale=d.lerp(t.startScale,t.endScale,t.normalizedAge)}function ihe(e,t){t.startColor=Hf.clone(e._startColor,t.startColor),t.endColor=Hf.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=d.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=d.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=d.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=d.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;var n=d.randomBetween(e._minimumSpeed,e._maximumSpeed);O.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}Object.defineProperties(Zue.prototype,{emitter:{get:function(){return this._emitter},set:function(e){i.a.defined("value",e),this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){i.a.defined("value",e),this._matrixDirty=this._matrixDirty||!Ae.equals(this._modelMatrix,e),Ae.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){i.a.defined("value",e),this._matrixDirty=this._matrixDirty||!Ae.equals(this._emitterModelMatrix,e),Ae.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){i.a.defined("value",e),Hf.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){i.a.defined("value",e),Hf.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){i.a.typeOf.object("value",e),i.a.typeOf.number.greaterThanOrEquals("value.x",e.x,0),i.a.typeOf.number.greaterThanOrEquals("value.y",e.y,0),this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){i.a.typeOf.object("value",e),i.a.typeOf.number.greaterThanOrEquals("value.x",e.x,0),i.a.typeOf.number.greaterThanOrEquals("value.y",e.y,0),this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){i.a.typeOf.bool("value",e),this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){i.a.typeOf.number.greaterThanOrEquals("value",e,0),this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});var rhe=new O;Zue.prototype.update=function(e){if(this.show){Object(o.a)(this._billboardCollection)||(this._billboardCollection=new VY),this._updateParticlePool&&(!function(e){var t=e._emissionRate,n=e._maximumParticleLife,i=0,r=e._bursts;if(Object(o.a)(r))for(var a=r.length,s=0;s<a;++s)i+=r[s].maximum;for(var c=e._billboardCollection,l=e.image,u=Math.ceil(t*n+i),h=e._particles,d=e._particlePool,f=Math.max(u-h.length-d.length,0),p=0;p<f;++p){var m=new $ue;m._billboard=c.add({image:l}),d.push(m)}e._particleEstimate=u}(this),this._updateParticlePool=!1);var t=0;this._previousTime&&(t=hr.secondsDifference(e.time,this._previousTime)),t<0&&(t=0);var n,i,r=this._particles,a=this._emitter,s=this.updateCallback,c=r.length;for(n=0;n<c;++n)(i=r[n]).update(t,s)?nhe(this,i):(the(i),ehe(this,i),r[n]=r[c-1],--n,--c);r.length=c;var l=function(e,t){if(e._isComplete)return 0;var n=(t=d.mod(t,e._lifetime))*e._emissionRate,i=Math.floor(n);if(e._carryOver+=n-i,e._carryOver>1&&(i++,e._carryOver-=1),Object(o.a)(e.bursts))for(var r=e.bursts.length,a=0;a<r;a++){var s=e.bursts[a],c=e._currentTime;Object(o.a)(s)&&!s._complete&&c>s.time&&(i+=d.randomBetween(s.minimum,s.maximum),s._complete=!0)}return i}(this,t);if(l>0&&Object(o.a)(a)){this._matrixDirty&&(this._combinedMatrix=Ae.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);var u=this._combinedMatrix;for(n=0;n<l;n++)i=Jue(this),this._emitter.emit(i),O.add(i.position,i.velocity,rhe),Ae.multiplyByPoint(u,rhe,rhe),i.position=Ae.multiplyByPoint(u,i.position,i.position),O.subtract(rhe,i.position,i.velocity),O.normalize(i.velocity,i.velocity),ihe(this,i),nhe(this,i)}if(this._billboardCollection.update(e),this._previousTime=hr.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=d.mod(this._currentTime,this._lifetime),this.bursts){var h=this.bursts.length;for(n=0;n<h;n++)this.bursts[n]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120===0&&function(e){for(var t=e._particles,n=e._particlePool,i=e._billboardCollection,r=t.length,o=n.length,a=e._particleEstimate,s=o-Math.max(a-r-o,0),c=s;c<o;++c){var l=n[c];i.remove(l._billboard)}n.length=s}(this)}},Zue.prototype.isDestroyed=function(){return!1},Zue.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),Ks(this)};var ohe=function(e){if("string"===typeof e){var t=document.getElementById(e);if(null===t)throw new a.a('Element with id "'+e+'" does not exist in the document.');e=t}return e};function ahe(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT);var t=ohe(e.container);if(!Object(o.a)(t))throw new a.a("container is required");this._container=t;var n=document.createElement("div");n.className="cesium-performanceDisplay";var i=document.createElement("div");i.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),i.appendChild(this._fpsText);var s=document.createElement("div");s.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),s.appendChild(this._msText),n.appendChild(s),n.appendChild(i),this._container.appendChild(n),this._lastFpsSampleTime=Sf(),this._lastMsSampleTime=Sf(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;var c=document.createElement("div");c.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),c.appendChild(this._throttledText),n.appendChild(c)}Object.defineProperties(ahe.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(this._throttledText.nodeValue=e?"(throttled)":"",this._throttled=e)}}}),ahe.prototype.update=function(e){var t=Sf(),n=Object(r.a)(e,!0);this._fpsFrameCount++;var i=t-this._lastFpsSampleTime;if(i>1e3){var o="N/A";n&&(o=1e3*this._fpsFrameCount/i|0),this._fpsText.nodeValue=o+" FPS",this._lastFpsSampleTime=t,this._fpsFrameCount=0}this._msFrameCount++;var a=t-this._lastMsSampleTime;if(a>200){var s="N/A";n&&(s=(a/this._msFrameCount).toFixed(2)),this._msText.nodeValue=s+" MS",this._lastMsSampleTime=t,this._msFrameCount=0}},ahe.prototype.destroy=function(){return Ks(this)};var she=ahe;function che(){this._framebuffer=void 0,this._depthTexture=void 0,this._textureToCopy=void 0,this._copyDepthCommand=void 0,this._useLogDepth=void 0,this._debugPickDepthViewportCommand=void 0}function lhe(e){e._depthTexture=e._depthTexture&&!e._depthTexture.isDestroyed()&&e._depthTexture.destroy()}function uhe(e){e._framebuffer=e._framebuffer&&!e._framebuffer.isDestroyed()&&e._framebuffer.destroy()}function hhe(e,t,n,i){lhe(e),uhe(e),function(e,t,n,i){e._depthTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE})}(e,t,n,i),e._framebuffer=new DG({context:t,colorTextures:[e._depthTexture],destroyAttachments:!1})}che.prototype.executeDebugPickDepth=function(e,t,n){!function(e,t,n,i){if(!Object(o.a)(e._debugPickDepthViewportCommand)||i!==e._useLogDepth){var r=new KM({defines:[i?"LOG_DEPTH":""],sources:["uniform sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n float z_window = czm_unpackDepth(texture2D(u_texture, v_textureCoordinates));\n z_window = czm_reverseLogDepth(z_window); \n float n_range = czm_depthRange.near;\n float f_range = czm_depthRange.far;\n float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\n float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\n gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\n}\n"]});e._debugPickDepthViewportCommand=t.createViewportQuadCommand(r,{uniformMap:{u_texture:function(){return e._depthTexture}},owner:e}),e._useLogDepth=i}e._debugPickDepthViewportCommand.execute(t,n)}(this,e,t,n)},che.prototype.update=function(e,t){!function(e,t,n){var i=n.width,r=n.height,a=e._depthTexture,s=!Object(o.a)(a)||a.width!==i||a.height!==r;Object(o.a)(e._framebuffer)&&!s||hhe(e,t,i,r)}(this,e,t),function(e,t,n){if(!Object(o.a)(e._copyDepthCommand)){e._copyDepthCommand=t.createViewportQuadCommand("uniform sampler2D u_texture;\nvarying vec2 v_textureCoordinates;\nvoid main()\n{\n gl_FragColor = czm_packDepth(texture2D(u_texture, v_textureCoordinates).r);\n}\n",{renderState:XI.fromCache(),uniformMap:{u_texture:function(){return e._textureToCopy}},owner:e})}e._textureToCopy=n,e._copyDepthCommand.framebuffer=e._framebuffer}(this,e,t)};var dhe=new he,fhe=new he(1,1/255,1/65025,1/16581375);che.prototype.getDepth=function(e,t,n){if(Object(o.a)(this._framebuffer)){var i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this._framebuffer}),r=he.unpack(i,0,dhe);return he.divideByScalar(r,255,r),he.dot(r,fhe)}},che.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)},che.prototype.isDestroyed=function(){return!1},che.prototype.destroy=function(){return lhe(this),uhe(this),Object(o.a)(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=Object(o.a)(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),Ks(this)};var phe=che;function mhe(){this._depthStencilTexture=void 0,this._framebuffer=void 0,this._passState=void 0}function ghe(e){e._framebuffer=e._framebuffer&&e._framebuffer.destroy(),e._depthStencilTexture=e._depthStencilTexture&&e._depthStencilTexture.destroy()}mhe.prototype.update=function(e,t,n){var i=n.width,r=n.height;Object(o.a)(this._framebuffer)&&i===this._depthStencilTexture.width&&r===this._depthStencilTexture.height||(ghe(this),function(e,t){var n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._depthStencilTexture=new nI({context:t,width:n,height:i,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8}),e._framebuffer=new DG({context:t,depthStencilTexture:e._depthStencilTexture,destroyAttachments:!1});var r=new k8(t);r.blendingEnabled=!1,r.scissorTest={enabled:!0,rectangle:new bl},r.viewport=new bl,e._passState=r}(this,e));var a=this._framebuffer,s=this._passState;return s.framebuffer=a,s.viewport.width=i,s.viewport.height=r,s.scissorTest.rectangle.x=t.x,s.scissorTest.rectangle.y=r-t.y,s.scissorTest.rectangle.width=1,s.scissorTest.rectangle.height=1,s},mhe.prototype.isDestroyed=function(){return!1},mhe.prototype.destroy=function(){return ghe(this),Ks(this)};var vhe=mhe;function _he(e){var t=new k8(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new bl},t.viewport=new bl,this._context=e,this._fb=void 0,this._passState=t,this._width=0,this._height=0}_he.prototype.begin=function(e,t){var n=this._context,i=t.width,r=t.height;return bl.clone(e,this._passState.scissorTest.rectangle),Object(o.a)(this._fb)&&this._width===i&&this._height===r||(this._width=i,this._height=r,this._fb=this._fb&&this._fb.destroy(),this._fb=new DG({context:n,colorTextures:[new nI({context:n,width:i,height:r})],depthStencilRenderbuffer:new xee({context:n,width:i,height:r,format:Eee.DEPTH_STENCIL})}),this._passState.framebuffer=this._fb),this._passState.viewport.width=i,this._passState.viewport.height=r,this._passState};var bhe=new Hf;_he.prototype.end=function(e){for(var t=Object(r.a)(e.width,1),n=Object(r.a)(e.height,1),i=this._context,a=i.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb}),s=Math.max(t,n),c=s*s,l=Math.floor(.5*t),u=Math.floor(.5*n),h=0,d=0,f=0,p=-1,m=0;m<c;++m){if(-l<=h&&h<=l&&-u<=d&&d<=u){var g=4*((u-d)*t+h+l);bhe.red=Hf.byteToFloat(a[g]),bhe.green=Hf.byteToFloat(a[g+1]),bhe.blue=Hf.byteToFloat(a[g+2]),bhe.alpha=Hf.byteToFloat(a[g+3]);var v=i.getObjectByPickColor(bhe);if(Object(o.a)(v))return v}if(h===d||h<0&&-h===d||h>0&&h===1-d){var _=f;f=-p,p=_}h+=f,d+=p}},_he.prototype.isDestroyed=function(){return!1},_he.prototype.destroy=function(){return this._fb=this._fb&&this._fb.destroy(),Ks(this)};var yhe=_he;function whe(){this._colorTexture=void 0,this._idTexture=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._framebuffer=void 0,this._idFramebuffer=void 0,this._idClearColor=new Hf(0,0,0,0),this._useHdr=void 0,this._clearCommand=new yN({color:new Hf(0,0,0,0),depth:1,owner:this})}function Ohe(e){e._framebuffer=e._framebuffer&&e._framebuffer.destroy(),e._idFramebuffer=e._idFramebuffer&&e._idFramebuffer.destroy(),e._colorTexture=e._colorTexture&&e._colorTexture.destroy(),e._idTexture=e._idTexture&&e._idTexture.destroy(),e._depthStencilTexture=e._depthStencilTexture&&e._depthStencilTexture.destroy(),e._depthStencilRenderbuffer=e._depthStencilRenderbuffer&&e._depthStencilRenderbuffer.destroy(),e._depthStencilIdTexture=e._depthStencilIdTexture&&e._depthStencilIdTexture.destroy(),e._depthStencilIdRenderbuffer=e._depthStencilIdRenderbuffer&&e._depthStencilIdRenderbuffer.destroy(),e._framebuffer=void 0,e._idFramebuffer=void 0,e._colorTexture=void 0,e._idTexture=void 0,e._depthStencilTexture=void 0,e._depthStencilRenderbuffer=void 0,e._depthStencilIdTexture=void 0,e._depthStencilIdRenderbuffer=void 0}whe.prototype.update=function(e,t,n){var i=t.width,r=t.height,a=this._colorTexture;if(!Object(o.a)(a)||a.width!==i||a.height!==r||n!==this._useHdr){Ohe(this),this._useHdr=n;var s=n?e.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT:LC.UNSIGNED_BYTE;this._colorTexture=new nI({context:e,width:i,height:r,pixelFormat:FC.RGBA,pixelDatatype:s,sampler:ZP.NEAREST}),this._idTexture=new nI({context:e,width:i,height:r,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),e.depthTexture?(this._depthStencilTexture=new nI({context:e,width:i,height:r,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8,sampler:ZP.NEAREST}),this._depthStencilIdTexture=new nI({context:e,width:i,height:r,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8,sampler:ZP.NEAREST})):(this._depthStencilRenderbuffer=new xee({context:e,width:i,height:r,format:Eee.DEPTH_STENCIL}),this._depthStencilIdRenderbuffer=new xee({context:e,width:i,height:r,format:Eee.DEPTH_STENCIL})),this._framebuffer=new DG({context:e,colorTextures:[this._colorTexture],depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}),this._idFramebuffer=new DG({context:e,colorTextures:[this._idTexture],depthStencilTexture:this._depthStencilIdTexture,depthStencilRenderbuffer:this._depthStencilIdRenderbuffer,destroyAttachments:!1})}},whe.prototype.clear=function(e,t,n){var i=t.framebuffer;t.framebuffer=this._framebuffer,Hf.clone(n,this._clearCommand.color),this._clearCommand.execute(e,t),t.framebuffer=this._idFramebuffer,Hf.clone(this._idClearColor,this._clearCommand.color),this._clearCommand.execute(e,t),t.framebuffer=i},whe.prototype.getFramebuffer=function(){return this._framebuffer},whe.prototype.getIdFramebuffer=function(){return this._idFramebuffer},whe.prototype.isDestroyed=function(){return!1},whe.prototype.destroy=function(){return Ohe(this),Ks(this)};var Che=whe;function Ehe(){}Ehe.getShadowCastShaderKeyword=function(e,t,n,i){return"castShadow "+e+" "+t+" "+n+" "+i},Ehe.createShadowCastVertexShader=function(e,t,n){var i=e.defines.slice(0),r=e.sources.slice(0);i.push("SHADOW_MAP"),n&&i.push("GENERATE_POSITION");var a=KM.findPositionVarying(e),s=Object(o.a)(a);if(t&&!s){for(var c=r.length,l=0;l<c;++l)r[l]=KM.replaceMain(r[l],"czm_shadow_cast_main");r.push("varying vec3 v_positionEC; \nvoid main() \n{ \n czm_shadow_cast_main(); \n v_positionEC = (czm_inverseProjection * gl_Position).xyz; \n}")}return new KM({defines:i,sources:r})},Ehe.createShadowCastFragmentShader=function(e,t,n,i){var r=e.defines.slice(0),a=e.sources.slice(0),s=KM.findPositionVarying(e),c=Object(o.a)(s);c||(s="v_positionEC");for(var l=a.length,u=0;u<l;++u)a[u]=KM.replaceMain(a[u],"czm_shadow_cast_main");var h="";return t&&(c||(h+="varying vec3 v_positionEC; \n"),h+="uniform vec4 shadowMap_lightPositionEC; \n"),h+=i?"void main() \n{ \n":"void main() \n{ \n czm_shadow_cast_main(); \n if (gl_FragColor.a == 0.0) \n { \n discard; \n } \n",h+=t?" float distance = length("+s+"); \n if (distance >= shadowMap_lightPositionEC.w) \n { \n discard; \n } \n distance /= shadowMap_lightPositionEC.w; // radius \n gl_FragColor = czm_packDepth(distance); \n":n?" gl_FragColor = vec4(1.0); \n":" gl_FragColor = czm_packDepth(gl_FragCoord.z); \n",h+="} \n",a.push(h),new KM({defines:r,sources:a})},Ehe.getShadowReceiveShaderKeyword=function(e,t,n,i){return"receiveShadow "+e._usesDepthTexture+e._polygonOffsetSupported+e._isPointLight+e._isSpotLight+(e._numberOfCascades>1)+e.debugCascadeColors+e.softShadows+t+n+i},Ehe.createShadowReceiveVertexShader=function(e,t,n){var i=e.defines.slice(0),r=e.sources.slice(0);return i.push("SHADOW_MAP"),t&&(n?i.push("GENERATE_POSITION_AND_NORMAL"):i.push("GENERATE_POSITION")),new KM({defines:i,sources:r})},Ehe.createShadowReceiveFragmentShader=function(e,t,n,i,r){for(var a=KM.findNormalVarying(e),s=!i&&Object(o.a)(a)||i&&r,c=KM.findPositionVarying(e),l=Object(o.a)(c),u=t._usesDepthTexture,h=t._polygonOffsetSupported,d=t._isPointLight,f=t._isSpotLight,p=t._numberOfCascades>1,m=t.debugCascadeColors,g=t.softShadows,v=d?t._pointBias:i?t._terrainBias:t._primitiveBias,_=e.defines.slice(0),b=e.sources.slice(0),y=b.length,w=0;w<y;++w)b[w]=KM.replaceMain(b[w],"czm_shadow_receive_main");d?_.push("USE_CUBE_MAP_SHADOW"):u&&_.push("USE_SHADOW_DEPTH_TEXTURE"),g&&!d&&_.push("USE_SOFT_SHADOWS"),p&&n&&i&&(s?_.push("ENABLE_VERTEX_LIGHTING"):_.push("ENABLE_DAYNIGHT_SHADING")),n&&v.normalShading&&s&&(_.push("USE_NORMAL_SHADING"),v.normalShadingSmooth>0&&_.push("USE_NORMAL_SHADING_SMOOTH"));var O="";return O+=d?"uniform samplerCube shadowMap_textureCube; \n":"uniform sampler2D shadowMap_texture; \n",O+="uniform mat4 shadowMap_matrix; \nuniform vec3 shadowMap_lightDirectionEC; \nuniform vec4 shadowMap_lightPositionEC; \nuniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; \nuniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; \n#ifdef LOG_DEPTH \nvarying vec3 v_logPositionEC; \n#endif \nvec4 getPositionEC() \n{ \n"+(l?" return vec4("+c+", 1.0); \n":"#ifndef LOG_DEPTH \n return czm_windowToEyeCoordinates(gl_FragCoord); \n#else \n return vec4(v_logPositionEC, 1.0); \n#endif \n")+"} \nvec3 getNormalEC() \n{ \n"+(s?" return normalize("+a+"); \n":" return vec3(1.0); \n")+"} \nvoid applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) \n{ \n"+(v.normalOffset&&s?" float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; \n float normalOffsetScale = 1.0 - nDotL; \n vec3 offset = normalOffset * normalOffsetScale * normalEC; \n positionEC.xyz += offset; \n":"")+"} \n",O+="void main() \n{ \n czm_shadow_receive_main(); \n vec4 positionEC = getPositionEC(); \n vec3 normalEC = getNormalEC(); \n float depth = -positionEC.z; \n",O+=" czm_shadowParameters shadowParameters; \n shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; \n shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; \n shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; \n shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; \n",i?O+=" shadowParameters.depthBias *= max(depth * 0.01, 1.0); \n":h||(O+=" shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \n"),O+=d?" vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; \n float distance = length(directionEC); \n directionEC = normalize(directionEC); \n float radius = shadowMap_lightPositionEC.w; \n // Stop early if the fragment is beyond the point light radius \n if (distance > radius) \n { \n return; \n } \n vec3 directionWC = czm_inverseViewRotation * directionEC; \n shadowParameters.depth = distance / radius; \n shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \n shadowParameters.texCoords = directionWC; \n float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); \n":f?" vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); \n float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n vec4 shadowPosition = shadowMap_matrix * positionEC; \n // Spot light uses a perspective projection, so perform the perspective divide \n shadowPosition /= shadowPosition.w; \n // Stop early if the fragment is not in the shadow bounds \n if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \n { \n return; \n } \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n":p?" float maxDepth = shadowMap_cascadeSplits[1].w; \n // Stop early if the eye depth exceeds the last cascade \n if (depth > maxDepth) \n { \n return; \n } \n // Get the cascade based on the eye-space depth \n vec4 weights = czm_cascadeWeights(depth); \n // Apply normal offset \n float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n // Transform position into the cascade \n vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; \n // Get visibility \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n // Fade out shadows that are far away \n float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; \n float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); \n visibility = mix(visibility, 1.0, fade); \n"+(m?" // Draw cascade colors for debugging \n gl_FragColor *= czm_cascadeColor(weights); \n":""):" float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \n applyNormalOffset(positionEC, normalEC, nDotL); \n vec4 shadowPosition = shadowMap_matrix * positionEC; \n // Stop early if the fragment is not in the shadow bounds \n if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \n { \n return; \n } \n shadowParameters.texCoords = shadowPosition.xy; \n shadowParameters.depth = shadowPosition.z; \n shadowParameters.nDotL = nDotL; \n float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \n",O+=" gl_FragColor.rgb *= visibility; \n} \n",b.push(O),new KM({defines:_,sources:b})};var Ahe=Ehe;function xhe(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).context;if(!Object(o.a)(t))throw new a.a("context is required.");if(!Object(o.a)(e.lightCamera))throw new a.a("lightCamera is required.");if(Object(o.a)(e.numberOfCascades)&&1!==e.numberOfCascades&&4!==e.numberOfCascades)throw new a.a("Only one or four cascades are supported.");this._enabled=Object(r.a)(e.enabled,!0),this._softShadows=Object(r.a)(e.softShadows,!1),this._normalOffset=Object(r.a)(e.normalOffset,!0),this.dirty=!0,this.fromLightSource=Object(r.a)(e.fromLightSource,!0),this.darkness=Object(r.a)(e.darkness,.3),this._darkness=this.darkness,this.maximumDistance=Object(r.a)(e.maximumDistance,5e3),this._outOfView=!1,this._outOfViewPrevious=!1,this._needsUpdate=!0;var n,i=!0;(oo.isInternetExplorer()||oo.isEdge()||(oo.isChrome()||oo.isFirefox())&&oo.isWindows()&&!t.depthTexture)&&(i=!1),this._polygonOffsetSupported=i,this._terrainBias={polygonOffset:i,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:i,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new Ae,this._shadowMapTexture=void 0,this._lightDirectionEC=new O,this._lightPositionEC=new he,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new Uhe,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new gt,this._isPointLight=Object(r.a)(e.isPointLight,!1),this._pointLightRadius=Object(r.a)(e.pointLightRadius,100),this._cascadesEnabled=!this._isPointLight&&Object(r.a)(e.cascadesEnabled,!0),this._numberOfCascades=this._cascadesEnabled?Object(r.a)(e.numberOfCascades,4):0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new Mt,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new kb:Object(o.a)(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new he,new he],this._cascadeMatrices=[new Ae,new Ae,new Ae,new Ae],this._cascadeDistances=new he,n=this._isPointLight?6:this._cascadesEnabled?this._numberOfCascades:1,this._passes=new Array(n);for(var s=0;s<n;++s)this._passes[s]=new The(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,Dhe(this),this._clearCommand=new yN({depth:1,color:new Hf}),this._clearPassState=new k8(t),this._size=Object(r.a)(e.size,2048),this.size=this._size}function The(e){this.camera=new Uhe,this.passState=new k8(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function She(e,t){return XI.fromCache({cull:{enabled:!0,face:FP.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function Dhe(e){var t=!e._usesDepthTexture;e._primitiveRenderState=She(t,e._primitiveBias),e._terrainRenderState=She(t,e._terrainBias),e._pointRenderState=She(t,e._pointBias)}function Phe(e){for(var t=e._passes.length,n=0;n<t;++n){var i=e._passes[n],r=i.framebuffer;Object(o.a)(r)&&!r.isDestroyed()&&r.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function Ihe(e,t){e._isPointLight?function(e,t){for(var n=new xee({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Eee.DEPTH_COMPONENT16}),i=new eI({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),r=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ],o=0;o<6;++o){var a=new DG({context:t,depthRenderbuffer:n,colorTextures:[r[o]],destroyAttachments:!1}),s=e._passes[o];s.framebuffer=a,s.passState.framebuffer=a}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}(e,t):e._usesDepthTexture?function(e,t){for(var n=new nI({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:FC.DEPTH_STENCIL,pixelDatatype:LC.UNSIGNED_INT_24_8,sampler:ZP.NEAREST}),i=new DG({context:t,depthStencilTexture:n,destroyAttachments:!1}),r=e._passes.length,o=0;o<r;++o){var a=e._passes[o];a.framebuffer=i,a.passState.framebuffer=i}e._shadowMapTexture=n,e._depthAttachment=n}(e,t):function(e,t){for(var n=new xee({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Eee.DEPTH_COMPONENT16}),i=new nI({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,sampler:ZP.NEAREST}),r=new DG({context:t,depthRenderbuffer:n,colorTextures:[i],destroyAttachments:!1}),o=e._passes.length,a=0;a<o;++a){var s=e._passes[a];s.framebuffer=r,s.passState.framebuffer=r}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}(e,t)}function Mhe(e,t){Object(o.a)(e._passes[0].framebuffer)&&e._shadowMapTexture.width===e._textureSize.x||(Phe(e),Ihe(e,t),function(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==Ts.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,Dhe(e),Phe(e),Ihe(e,t))}(e,t),Rhe(e,t))}function Rhe(e,t,n){n=Object(r.a)(n,0),(e._isPointLight||0===n)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}xhe.MAXIMUM_DISTANCE=2e4,xhe.prototype.debugCreateRenderStates=function(){Dhe(this)},Object.defineProperties(xhe.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){!function(e,t){e._size=t;var n=e._passes,i=n.length,r=e._textureSize;if(e._isPointLight){t=BP.maximumCubeMapSize>=t?t:BP.maximumCubeMapSize,r.x=t,r.y=t;var o=new bl(0,0,t,t);n[0].passState.viewport=o,n[1].passState.viewport=o,n[2].passState.viewport=o,n[3].passState.viewport=o,n[4].passState.viewport=o,n[5].passState.viewport=o}else 1===i?(t=BP.maximumTextureSize>=t?t:BP.maximumTextureSize,r.x=t,r.y=t,n[0].passState.viewport=new bl(0,0,t,t)):4===i&&(t=BP.maximumTextureSize>=2*t?t:BP.maximumTextureSize/2,r.x=2*t,r.y=2*t,n[0].passState.viewport=new bl(0,0,t,t),n[1].passState.viewport=new bl(t,0,t,t),n[2].passState.viewport=new bl(0,t,t,t),n[3].passState.viewport=new bl(t,t,t,t));e._clearPassState.viewport=new bl(0,0,r.x,r.y);for(var a=0;a<i;++a){var s=n[a],c=s.passState.viewport,l=c.x/r.x,u=c.y/r.y,h=c.width/r.x,d=c.height/r.y;s.textureOffsets=new Ae(h,0,0,l,0,d,0,u,0,0,1,0,0,0,0,1)}}(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});var Lhe=new bl;function jhe(e,t){var n=t.context,i=t.context.drawingBufferWidth,r=t.context.drawingBufferHeight,a=.3*Math.min(i,r),s=Lhe;s.x=i-a,s.y=0,s.width=a,s.height=a;var c=e._debugShadowViewCommand;Object(o.a)(c)||(c=function(e,t){var n;n=e._isPointLight?"uniform samplerCube shadowMap_textureCube; \nvarying vec2 v_textureCoordinates; \nvoid main() \n{ \n vec2 uv = v_textureCoordinates; \n vec3 dir; \n \n if (uv.y < 0.5) \n { \n if (uv.x < 0.333) \n { \n dir.x = -1.0; \n dir.y = uv.x * 6.0 - 1.0; \n dir.z = uv.y * 4.0 - 1.0; \n } \n else if (uv.x < 0.666) \n { \n dir.y = -1.0; \n dir.x = uv.x * 6.0 - 3.0; \n dir.z = uv.y * 4.0 - 1.0; \n } \n else \n { \n dir.z = -1.0; \n dir.x = uv.x * 6.0 - 5.0; \n dir.y = uv.y * 4.0 - 1.0; \n } \n } \n else \n { \n if (uv.x < 0.333) \n { \n dir.x = 1.0; \n dir.y = uv.x * 6.0 - 1.0; \n dir.z = uv.y * 4.0 - 3.0; \n } \n else if (uv.x < 0.666) \n { \n dir.y = 1.0; \n dir.x = uv.x * 6.0 - 3.0; \n dir.z = uv.y * 4.0 - 3.0; \n } \n else \n { \n dir.z = 1.0; \n dir.x = uv.x * 6.0 - 5.0; \n dir.y = uv.y * 4.0 - 3.0; \n } \n } \n \n float shadow = czm_unpackDepth(textureCube(shadowMap_textureCube, dir)); \n gl_FragColor = vec4(vec3(shadow), 1.0); \n} \n":"uniform sampler2D shadowMap_texture; \nvarying vec2 v_textureCoordinates; \nvoid main() \n{ \n"+(e._usesDepthTexture?" float shadow = texture2D(shadowMap_texture, v_textureCoordinates).r; \n":" float shadow = czm_unpackDepth(texture2D(shadowMap_texture, v_textureCoordinates)); \n")+" gl_FragColor = vec4(vec3(shadow), 1.0); \n} \n";var i=t.createViewportQuadCommand(n,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=EI.OVERLAY,i}(e,n),e._debugShadowViewCommand=c),Object(o.a)(c.renderState)&&bl.equals(c.renderState.viewport,s)||(c.renderState=XI.fromCache({viewport:bl.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var Fhe=new Array(8);Fhe[0]=new he(-1,-1,-1,1),Fhe[1]=new he(1,-1,-1,1),Fhe[2]=new he(1,1,-1,1),Fhe[3]=new he(-1,1,-1,1),Fhe[4]=new he(-1,-1,1,1),Fhe[5]=new he(1,-1,1,1),Fhe[6]=new he(1,1,1,1),Fhe[7]=new he(-1,1,1,1);for(var Nhe=new Ae,zhe=new Array(8),khe=0;khe<8;++khe)zhe[khe]=new he;var Bhe=[Hf.RED,Hf.GREEN,Hf.BLUE,Hf.MAGENTA],Hhe=new O;function Vhe(e,t){jhe(e,t);var n=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(n&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new woe({camera:e._sceneCamera,color:Hf.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new woe({camera:e._shadowMapCamera,color:Hf.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(var i=0;i<e._numberOfCascades;++i)n&&(e._debugCascadeFrustums[i]=e._debugCascadeFrustums[i]&&e._debugCascadeFrustums[i].destroy(),e._debugCascadeFrustums[i]=new woe({camera:e._passes[i].camera,color:Bhe[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!Object(o.a)(e._debugLightFrustum)||e._needsUpdate){var r=e._shadowMapCamera.positionWC,a=No.IDENTITY,s=2*e._pointLightRadius,c=O.fromElements(s,s,s,Hhe),l=Ae.fromTranslationQuaternionRotationScale(r,a,c,Nhe);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=function(e,t){var n=new fh({geometry:new ru({minimum:new O(-.5,-.5,-.5),maximum:new O(.5,.5,.5)}),attributes:{color:Uf.fromColor(t)}}),i=new fh({geometry:new qS({radius:.5}),attributes:{color:Uf.fromColor(t)}});return new bL({geometryInstances:[n,i],appearance:new bI({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}(l,Hf.YELLOW)}e._debugLightFrustum.update(t)}else Object(o.a)(e._debugLightFrustum)&&!e._needsUpdate||(e._debugLightFrustum=new woe({camera:e._shadowMapCamera,color:Hf.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function Uhe(){this.viewMatrix=new Ae,this.inverseViewMatrix=new Ae,this.frustum=void 0,this.positionCartographic=new R,this.positionWC=new O,this.directionWC=O.clone(O.UNIT_Z),this.upWC=O.clone(O.UNIT_Y),this.rightWC=O.clone(O.UNIT_X),this.viewProjectionMatrix=new Ae}Uhe.prototype.clone=function(e){Ae.clone(e.viewMatrix,this.viewMatrix),Ae.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),R.clone(e.positionCartographic,this.positionCartographic),O.clone(e.positionWC,this.positionWC),O.clone(e.directionWC,this.directionWC),O.clone(e.upWC,this.upWC),O.clone(e.rightWC,this.rightWC)};var Whe=new Ae(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);Uhe.prototype.getViewProjection=function(){var e=this.viewMatrix,t=this.frustum.projectionMatrix;return Ae.multiply(t,e,this.viewProjectionMatrix),Ae.multiply(Whe,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var Ghe=new Array(5),qhe=new Zb,Yhe=new Array(4),$he=new O,Xhe=new O;var Khe=new Ae,Qhe=new O,Zhe=new O,Jhe=new O;var ede=[new O(-1,0,0),new O(0,-1,0),new O(0,0,-1),new O(1,0,0),new O(0,1,0),new O(0,0,1)],tde=[new O(0,-1,0),new O(0,0,-1),new O(0,-1,0),new O(0,-1,0),new O(0,0,1),new O(0,-1,0)],nde=[new O(0,0,1),new O(1,0,0),new O(-1,0,0),new O(0,0,-1),new O(1,0,0),new O(1,0,0)];var ide=new O,rde=new O,ode=new gt,ade=ode.center;function sde(e,t){var n=t.camera,i=e._lightCamera,r=e._sceneCamera,o=e._shadowMapCamera;e._cascadesEnabled?O.clone(i.directionWC,o.directionWC):e._isPointLight?O.clone(i.positionWC,o.positionWC):o.clone(i);var a,s,c=e._lightDirectionEC;Ae.multiplyByPointAsVector(n.viewMatrix,o.directionWC,c),O.normalize(c,c),O.negate(c,c),Ae.multiplyByPoint(n.viewMatrix,o.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius,e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),s=Math.min(t.shadowState.farPlane,e.maximumDistance+1)):(a=n.frustum.near,s=e.maximumDistance),e._sceneCamera=Aie.clone(n,r),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=s,e._distance=s-a,function(e,t){var n=e._sceneCamera,i=e._shadowMapCamera,r=ode;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance)return e._outOfView=!0,void(e._needsUpdate=!1);var o=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,ide),a=O.negate(i.directionWC,rde),s=O.dot(o,a),c=d.clamp(s/.1,0,1);if(e._darkness=d.lerp(1,e.darkness,c),s<0)return e._outOfView=!0,void(e._needsUpdate=!1);e._needsUpdate=!0,e._outOfView=!1}else if(e._isPointLight)r.center=i.positionWC,r.radius=e._pointLightRadius,e._outOfView=t.cullingVolume.computeVisibility(r)===Y.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(r),gt.clone(r,e._boundingSphere);else{var l=i.frustum.far/2,u=O.add(i.positionWC,O.multiplyByScalar(i.directionWC,l,ade),ade);r.center=u,r.radius=l,e._outOfView=t.cullingVolume.computeVisibility(r)===Y.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(r),gt.clone(r,e._boundingSphere)}}(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}xhe.prototype.update=function(e){if(sde(this,e),this._needsUpdate)if(Mhe(this,e.context),this._isPointLight&&function(e,t){var n=new Zb;n.fov=d.PI_OVER_TWO,n.near=1,n.far=e._pointLightRadius,n.aspectRatio=1;for(var i=0;i<6;++i){var r=e._passes[i].camera;r.positionWC=e._shadowMapCamera.positionWC,r.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(r.positionWC,r.positionCartographic),r.directionWC=ede[i],r.upWC=tde[i],r.rightWC=nde[i],Ae.computeView(r.positionWC,r.directionWC,r.upWC,r.rightWC,r.viewMatrix),Ae.inverse(r.viewMatrix,r.inverseViewMatrix),r.frustum=n}}(this,e),this._cascadesEnabled&&(function(e,t){var n=e._shadowMapCamera,i=e._sceneCamera,r=Ae.multiply(i.frustum.projectionMatrix,i.viewMatrix,Nhe),o=Ae.inverse(r,Nhe),a=n.directionWC,s=i.directionWC;O.equalsEpsilon(a,s,d.EPSILON10)&&(s=i.upWC);var c=O.cross(a,s,Qhe);s=O.cross(c,a,Zhe),O.normalize(s,s),O.normalize(c,c);for(var l=O.fromElements(0,0,0,Jhe),u=Ae.computeView(l,a,s,c,Khe),h=Ae.multiply(u,o,Nhe),f=O.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,$he),p=O.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,Xhe),m=0;m<8;++m){var g=he.clone(Fhe[m],zhe[m]);Ae.multiplyByVector(h,g,g),O.divideByScalar(g,g.w,g),O.minimumByComponent(g,f,f),O.maximumByComponent(g,p,p)}p.z+=1e3,f.z-=10;var v=Jhe;v.x=-.5*(f.x+p.x),v.y=-.5*(f.y+p.y),v.z=-p.z;var _=Ae.fromTranslation(v,Nhe);u=Ae.multiply(_,u,u);var b=.5*(p.x-f.x),y=.5*(p.y-f.y),w=p.z-f.z,C=n.frustum;C.left=-b,C.right=b,C.bottom=-y,C.top=y,C.near=.01,C.far=w,Ae.clone(u,n.viewMatrix),Ae.inverse(u,n.inverseViewMatrix),Ae.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),O.clone(a,n.directionWC),O.clone(s,n.upWC),O.clone(c,n.rightWC)}(this,e),this._numberOfCascades>1&&function(e,t){var n,i=e._shadowMapCamera,r=e._sceneCamera,o=r.frustum.near,a=r.frustum.far,s=e._numberOfCascades,c=a-o,l=a/o,u=.9,h=!1;t.shadowState.closestObjectSize<200&&(h=!0,u=.9);var f=Yhe,p=Ghe;for(p[0]=o,p[s]=a,n=0;n<s;++n){var m=(n+1)/s,g=o*Math.pow(l,m),v=o+c*m,_=d.lerp(v,g,u);p[n+1]=_,f[n]=_-p[n]}if(h){for(n=0;n<s;++n)f[n]=Math.min(f[n],e._maximumCascadeDistances[n]);var b=p[0];for(n=0;n<s-1;++n)b+=f[n],p[n+1]=b}he.unpack(p,0,e._cascadeSplits[0]),he.unpack(p,1,e._cascadeSplits[1]),he.unpack(f,0,e._cascadeDistances);var y=i.frustum,w=y.left,C=y.right,E=y.bottom,A=y.top,x=y.near,T=y.far,S=i.positionWC,D=i.directionWC,P=i.upWC,I=r.frustum.clone(qhe),M=i.getViewProjection();for(n=0;n<s;++n){I.near=p[n],I.far=p[n+1];for(var R=Ae.multiply(I.projectionMatrix,r.viewMatrix,Nhe),L=Ae.inverse(R,Nhe),j=Ae.multiply(M,L,Nhe),F=O.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,$he),N=O.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,Xhe),z=0;z<8;++z){var k=he.clone(Fhe[z],zhe[z]);Ae.multiplyByVector(j,k,k),O.divideByScalar(k,k.w,k),O.minimumByComponent(k,F,F),O.maximumByComponent(k,N,N)}F.x=Math.max(F.x,0),F.y=Math.max(F.y,0),F.z=0,N.x=Math.min(N.x,1),N.y=Math.min(N.y,1),N.z=Math.min(N.z,1);var B=e._passes[n],H=B.camera;H.clone(i);var V=H.frustum;V.left=w+F.x*(C-w),V.right=w+N.x*(C-w),V.bottom=E+F.y*(A-E),V.top=E+N.y*(A-E),V.near=x+F.z*(T-x),V.far=x+N.z*(T-x),B.cullingVolume=H.frustum.computeCullingVolume(S,D,P);var U=e._cascadeMatrices[n];Ae.multiply(H.getViewProjection(),r.inverseViewMatrix,U),Ae.multiply(B.textureOffsets,U,U)}}(this,e)),this._isPointLight)this._shadowMapCullingVolume=C_.fromBoundingSphere(this._boundingSphere);else{var t=this._shadowMapCamera,n=t.positionWC,i=t.directionWC,r=t.upWC;this._shadowMapCullingVolume=t.frustum.computeCullingVolume(n,i,r),1===this._passes.length&&this._passes[0].camera.clone(t)}if(1===this._passes.length){var o=this._sceneCamera.inverseViewMatrix;Ae.multiply(this._shadowMapCamera.getViewProjection(),o,this._shadowMapMatrix)}this.debugShow&&Vhe(this,e)},xhe.prototype.updatePass=function(e,t){Rhe(this,e,t)};var cde=new Mt;function lde(e,t,n){var i=e._isPointLight?e._pointBias:n?e._terrainBias:e._primitiveBias,r={shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture},shadowMap_matrix:function(){return e._shadowMapMatrix},shadowMap_cascadeSplits:function(){return e._cascadeSplits},shadowMap_cascadeMatrices:function(){return e._cascadeMatrices},shadowMap_lightDirectionEC:function(){return e._lightDirectionEC},shadowMap_lightPositionEC:function(){return e._lightPositionEC},shadowMap_cascadeDistances:function(){return e._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){var t=cde;return t.x=1/e._textureSize.x,t.y=1/e._textureSize.y,he.fromElements(t.x,t.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return he.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new he,combinedUniforms2:new he};return Object(Wf.a)(t,r,!1)}function ude(e,t,n,i,r,a){var s,c,l;if(Object(o.a)(a)&&(s=a.shaderProgram,c=a.renderState,l=a.uniformMap),(a=CI.shallowClone(n,a)).castShadows=!0,a.receiveShadows=!1,!Object(o.a)(s)||r!==n.shaderProgram.id||t){var u=n.shaderProgram,h=n.pass===EI.GLOBE,d=n.pass!==EI.TRANSLUCENT,f=e._isPointLight,p=e._usesDepthTexture,m=Ahe.getShadowCastShaderKeyword(f,h,p,d);if(s=i.shaderCache.getDerivedShaderProgram(u,m),!Object(o.a)(s)){var g=u.vertexShaderSource,v=u.fragmentShaderSource,_=Ahe.createShadowCastVertexShader(g,f,h),b=Ahe.createShadowCastFragmentShader(v,f,p,d);s=i.shaderCache.createDerivedShaderProgram(u,m,{vertexShaderSource:_,fragmentShaderSource:b,attributeLocations:u._attributeLocations})}c=e._primitiveRenderState,f?c=e._pointRenderState:h&&(c=e._terrainRenderState),n.renderState.cull.enabled||((c=Object(Lf.a)(c,!1)).cull=Object(Lf.a)(c.cull,!1),c.cull.enabled=!1,c=XI.fromCache(c)),l=lde(e,n.uniformMap,h)}return a.shaderProgram=s,a.renderState=c,a.uniformMap=l,a}xhe.createReceiveDerivedCommand=function(e,t,n,i,r){Object(o.a)(r)||(r={});var a=e.length>0,s=t.shaderProgram,c=s.vertexShaderSource,l=s.fragmentShaderSource,u=t.pass===EI.GLOBE,h=!1;if(u&&(h=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&a){var d,f;Object(o.a)(r.receiveCommand)&&(d=r.receiveCommand.shaderProgram,f=r.receiveCommand.uniformMap),r.receiveCommand=CI.shallowClone(t,r.receiveCommand),r.castShadows=!1,r.receiveShadows=!0;var p=r.receiveShaderCastShadows!==t.castShadows,m=r.receiveShaderProgramId!==t.shaderProgram.id;if(!Object(o.a)(d)||m||n||p){var g=Ahe.getShadowReceiveShaderKeyword(e[0],t.castShadows,u,h);if(d=i.shaderCache.getDerivedShaderProgram(s,g),!Object(o.a)(d)){var v=Ahe.createShadowReceiveVertexShader(c,u,h),_=Ahe.createShadowReceiveFragmentShader(l,e[0],t.castShadows,u,h);d=i.shaderCache.createDerivedShaderProgram(s,g,{vertexShaderSource:v,fragmentShaderSource:_,attributeLocations:s._attributeLocations})}f=lde(e[0],t.uniformMap,u)}r.receiveCommand.shaderProgram=d,r.receiveCommand.uniformMap=f,r.receiveShaderProgramId=t.shaderProgram.id,r.receiveShaderCastShadows=t.castShadows}return r},xhe.createCastDerivedCommand=function(e,t,n,i,r){if(Object(o.a)(r)||(r={}),t.castShadows){var a=r.castCommands;Object(o.a)(a)||(a=r.castCommands=[]);var s=r.castShaderProgramId,c=e.length;a.length=c;for(var l=0;l<c;++l)a[l]=ude(e[l],n,t,i,s,a[l]);r.castShaderProgramId=t.shaderProgram.id}return r},xhe.prototype.isDestroyed=function(){return!1},xhe.prototype.destroy=function(){Phe(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(var e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return Ks(this)};var hde=xhe;function dde(){this.command=void 0,this.near=void 0,this.far=void 0}function fde(e,t,n){var i,r,o=e.context;o.depthTexture&&(i=new ale),e._useOIT&&o.depthTexture&&(r=new Hue(o));var a=new k8(o);a.viewport=bl.clone(n),this.camera=t,this._cameraClone=Aie.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=a,this.pickFramebuffer=new yhe(o),this.pickDepthFramebuffer=new vhe,this.sceneFramebuffer=new Che,this.globeDepth=i,this.globeTranslucencyFramebuffer=new ule,this.oit=r,this.pickDepths=[],this.debugGlobeDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var pde=new O,mde=new O;function gde(e,t,n){var i=1/Math.max(1,function(e,t){var n=Math.max(Math.abs(e.x),Math.abs(t.x)),i=Math.max(Math.abs(e.y),Math.abs(t.y)),r=Math.max(Math.abs(e.z),Math.abs(t.z));return Math.max(Math.max(n,i),r)}(e.position,t.position));return O.multiplyByScalar(e.position,i,pde),O.multiplyByScalar(t.position,i,mde),O.equalsEpsilon(pde,mde,n)&&O.equalsEpsilon(e.direction,t.direction,n)&&O.equalsEpsilon(e.up,t.up,n)&&O.equalsEpsilon(e.right,t.right,n)&&Ae.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}function vde(e,t,n,i,r){t.debugShowFrustums&&(n.debugOverlappingFrustums=0);for(var a=e.frustumCommandsList,s=a.length,c=0;c<s;++c){var l=a[c],u=l.near;if(!(i>l.far)){if(r<u)break;var h=n.pass,d=l.indices[h]++;if(l.commands[h][d]=n,t.debugShowFrustums&&(n.debugOverlappingFrustums|=1<<c),n.executeInClosestFrustum)break}}if(t.debugShowFrustums){var f=e.debugFrustumStatistics.commandsInFrustums;f[n.debugOverlappingFrustums]=Object(o.a)(f[n.debugOverlappingFrustums])?f[n.debugOverlappingFrustums]+1:1,++e.debugFrustumStatistics.totalCommands}t.updateDerivedCommands(n)}fde.prototype.checkForCameraUpdates=function(e){var t=this.camera,n=this._cameraClone;return gde(t,n,d.EPSILON15)?(this._cameraStartFired&&Sf()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Sf(),Aie.clone(t,n),!0)};var _de=new C_,bde=new $;fde.prototype.createPotentiallyVisibleSet=function(e){var t=e.frameState,n=t.camera,i=n.directionWC,r=n.positionWC,a=e._computeCommandList,s=e._overlayCommandList,c=t.commandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});for(var l=this.frustumCommandsList,u=l.length,h=EI.NUMBER_OF_PASSES,d=0;d<u;++d)for(var f=0;f<h;++f)l[d].indices[f]=0;a.length=0,s.length=0;for(var p=this._commandExtents,m=p.length,g=0,v=+Number.MAX_VALUE,_=-Number.MAX_VALUE,b=t.shadowState.shadowsEnabled,y=+Number.MAX_VALUE,w=-Number.MAX_VALUE,O=Number.MAX_VALUE,C=t.mode===IR.SCENE3D?t.occluder:void 0,E=t.cullingVolume,A=_de.planes,x=0;x<5;++x)A[x]=E.planes[x];E=_de;for(var T,S,D=c.length,P=0;P<D;++P){var I=c[P],M=I.pass;if(M===EI.COMPUTE)a.push(I);else if(M===EI.OVERLAY)s.push(I);else{var R,L,j=I.boundingVolume;if(Object(o.a)(j)){if(!e.isVisible(I,E,C))continue;var F=j.computePlaneDistances(r,i,bde);if(R=F.start,L=F.stop,v=Math.min(v,R),_=Math.max(_,L),b&&I.receiveShadows&&R<hde.MAXIMUM_DISTANCE&&!(M===EI.GLOBE&&R<-100&&L>100)){var N=L-R;M!==EI.GLOBE&&R<100&&(O=Math.min(O,N)),y=Math.min(y,R),w=Math.max(w,L)}}else I instanceof yN?(R=n.frustum.near,L=n.frustum.far):(R=n.frustum.near,L=n.frustum.far,v=Math.min(v,R),_=Math.max(_,L));var z=p[g];Object(o.a)(z)||(z=p[g]=new dde),z.command=I,z.near=R,z.far=L,g++}}for(b&&(y=Math.min(Math.max(y,n.frustum.near),n.frustum.far),w=Math.max(Math.min(w,n.frustum.far),y)),b&&(t.shadowState.nearPlane=y,t.shadowState.farPlane=w,t.shadowState.closestObjectSize=O),function(e,t,n,i){var r,a=t.frameState,s=a.camera,c=a.useLogDepth?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,l=t.mode===IR.SCENE2D,u=t.nearToFarDistance2D;n=Math.min(Math.max(n,s.frustum.near),s.frustum.far),i=Math.max(Math.min(i,s.frustum.far),n),l?(i=Math.min(i,s.position.z+t.nearToFarDistance2D),n=Math.min(n,i),r=Math.ceil(Math.max(1,i-n)/t.nearToFarDistance2D)):r=Math.ceil(Math.log(i/n)/Math.log(c));var h=e.frustumCommandsList;h.length=r;for(var d=0;d<r;++d){var f,p;l?(f=Math.min(i-u,n+d*u),p=Math.min(i,f+u)):(f=Math.max(n,Math.pow(c,d)*n),p=Math.min(i,c*f));var m=h[d];Object(o.a)(m)?(m.near=f,m.far=p):m=h[d]=new uae(f,p)}}(this,e,v,_),T=0;T<g;T++)vde(this,e,(S=p[T]).command,S.near,S.far);if(g<m)for(T=g;T<m&&(S=p[T],Object(o.a)(S.command));T++)S.command=void 0;var k=l.length,B=t.frustumSplits;B.length=k+1;for(var H=0;H<k;++H)B[H]=l[H].near,H===k-1&&(B[H+1]=l[H].far)},fde.prototype.destroy=function(){var e,t;this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();var n=this.pickDepths,i=this.debugGlobeDepths;for(t=n.length,e=0;e<t;++e)n[e].destroy();for(t=i.length,e=0;e<t;++e)i[e].destroy()};var yde=fde,wde=new Fie({pass:eQ.MOST_DETAILED_PRELOAD}),Ode=new Fie({pass:eQ.MOST_DETAILED_PICK}),Cde=new Fie({pass:eQ.PICK});function Ede(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;var t=new bl(0,0,1,1),n=new Aie(e);n.frustum=new Vb({width:.1,aspectRatio:1,near:.1}),this._pickOffscreenView=new yde(e,n,t)}Ede.prototype.update=function(){this._pickPositionCacheDirty=!0},Ede.prototype.getPickDepth=function(e,t){var n=e.view.pickDepths,i=n[t];return Object(o.a)(i)||(i=new phe,n[t]=i),i};var Ade=new kb,xde=new O,Tde=new O,Sde=new Mt,Dde=new Ae;var Pde=new Xb,Ide=new Mt;function Mde(e,t,n,i,r){var a=e.camera.frustum;return a instanceof Vb||a instanceof kb?function(e,t,n,i,r){var a=e.camera,s=a.frustum;Object(o.a)(s._offCenterFrustum)&&(s=s._offCenterFrustum);var c=2*(t.x-r.x)/r.width-1;c*=.5*(s.right-s.left);var l=2*(r.height-t.y-r.y)/r.height-1;l*=.5*(s.top-s.bottom);var u=Ae.clone(a.transform,Dde);a._setTransform(Ae.IDENTITY);var h=O.clone(a.position,xde);O.multiplyByScalar(a.right,c,Tde),O.add(Tde,h,h),O.multiplyByScalar(a.up,l,Tde),O.add(Tde,h,h),a._setTransform(u),e.mode===IR.SCENE2D&&O.fromElements(h.z,h.x,h.y,h);var d=s.getPixelDimensions(r.width,r.height,1,1,Sde),f=Ade;return f.right=.5*d.x,f.left=-f.right,f.top=.5*d.y,f.bottom=-f.top,f.near=s.near,f.far=s.far,f.computeCullingVolume(h,a.directionWC,a.upWC)}(e,t,0,0,r):function(e,t,n,i,r){var o=e.camera,a=o.frustum,s=a.near,c=Math.tan(.5*a.fovy),l=a.aspectRatio*c,u=(2*(t.x-r.x)/r.width-1)*s*l,h=(2*(r.height-t.y-r.y)/r.height-1)*s*c,d=a.getPixelDimensions(r.width,r.height,1,1,Ide),f=d.x*n*.5,p=d.y*i*.5,m=Pde;return m.top=h+p,m.bottom=h-p,m.right=u+f,m.left=u-f,m.near=s,m.far=a.far,m.computeCullingVolume(o.positionWC,o.directionWC,o.upWC)}(e,t,n,i,r)}var Rde=3,Lde=3,jde=new bl(0,0,Rde,Lde),Fde=new Mt,Nde=new Hf(0,0,0,0);Ede.prototype.pick=function(e,t,n,i){if(!Object(o.a)(t))throw new a.a("windowPosition is undefined.");Rde=Object(r.a)(n,3),Lde=Object(r.a)(i,Rde);var s=e.context,c=s.uniformState,l=e.frameState,u=e.defaultView;e.view=u;var h=u.viewport;h.x=0,h.y=0,h.width=s.drawingBufferWidth,h.height=s.drawingBufferHeight;var d=u.passState;d.viewport=bl.clone(h,d.viewport);var f=bq.transformWindowToDrawingBuffer(e,t,Fde);e.jobScheduler.disableThisFrame(),e.updateFrameState(),l.cullingVolume=Mde(e,f,Rde,Lde,h),l.invertClassification=!1,l.passes.pick=!0,l.tilesetPassState=Cde,c.update(l),e.updateEnvironment(),jde.x=f.x-.5*(Rde-1),jde.y=e.drawingBufferHeight-f.y-.5*(Lde-1),jde.width=Rde,jde.height=Lde,d=u.pickFramebuffer.begin(jde,u.viewport),e.updateAndExecuteCommands(d,Nde),e.resolveFramebuffers(d);var p=u.pickFramebuffer.end(jde);return s.endFrame(),p};var zde=new Zb,kde=new Xb,Bde=new Vb,Hde=new kb;Ede.prototype.pickPositionWorldCoordinates=function(e,t,n){if(e.useDepthPicking){if(!Object(o.a)(t))throw new a.a("windowPosition is undefined.");if(!e.context.depthTexture)throw new a.a("Picking from the depth buffer is not supported. Check pickPositionSupported.");var i=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(i))return O.clone(this._pickPositionCache[i],n);var r=e.frameState,s=e.context,c=s.uniformState,l=e.defaultView;e.view=l;var u=bq.transformWindowToDrawingBuffer(e,t,Fde);e.pickTranslucentDepth?function(e,t){var n=e.context,i=e.frameState,r=e.environmentState,o=e.defaultView;e.view=o;var a=o.viewport;a.x=0,a.y=0,a.width=n.drawingBufferWidth,a.height=n.drawingBufferHeight;var s=o.passState;s.viewport=bl.clone(a,s.viewport),e.clearPasses(i.passes),i.passes.pick=!0,i.passes.depth=!0,i.cullingVolume=Mde(e,t,1,1,a),i.tilesetPassState=Cde,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,s=o.pickDepthFramebuffer.update(n,t,a),e.updateAndExecuteCommands(s,Nde),e.resolveFramebuffers(s),n.endFrame()}(e,u):(e.updateFrameState(),c.update(r),e.updateEnvironment()),u.y=e.drawingBufferHeight-u.y;var h,d=e.camera;h=Object(o.a)(d.frustum.fov)?d.frustum.clone(zde):Object(o.a)(d.frustum.infiniteProjectionMatrix)?d.frustum.clone(kde):Object(o.a)(d.frustum.width)?d.frustum.clone(Bde):d.frustum.clone(Hde);for(var f=l.frustumCommandsList,p=f.length,m=0;m<p;++m){var g=this.getPickDepth(e,m).getDepth(s,u.x,u.y);if(Object(o.a)(g)&&(g>0&&g<1)){var v,_=f[m];return e.mode===IR.SCENE2D?(v=d.position.z,d.position.z=v-_.near+1,h.far=Math.max(1,_.far-_.near),h.near=1,c.update(r),c.updateFrustum(h)):(h.near=_.near*(0!==m?e.opaqueFrustumNearOffset:1),h.far=_.far,c.updateFrustum(h)),n=bq.drawingBufferToWgs84Coordinates(e,u,g,n),e.mode===IR.SCENE2D&&(d.position.z=v,c.update(r)),this._pickPositionCache[i]=O.clone(n),n}}this._pickPositionCache[i]=void 0}};var Vde=new R;function Ude(e,t){var n,i,r=[],a=[],s=[],c=[];Object(o.a)(e)||(e=Number.MAX_VALUE);for(var l=t();Object(o.a)(l);){var u=l.object,h=l.position,d=l.exclude;if(Object(o.a)(h)&&!Object(o.a)(u)){r.push(l);break}if(!Object(o.a)(u)||!Object(o.a)(u.primitive))break;if(!d&&(r.push(l),0>=--e))break;var f=u.primitive,p=!1;"function"===typeof f.getGeometryInstanceAttributes&&Object(o.a)(u.id)&&(i=f.getGeometryInstanceAttributes(u.id),Object(o.a)(i)&&Object(o.a)(i.show)&&(p=!0,i.show=bS.toValue(!1,i.show),s.push(i))),u instanceof oz&&(p=!0,u.show=!1,c.push(u)),p||(f.show=!1,a.push(f)),l=t()}for(n=0;n<a.length;++n)a[n].show=!0;for(n=0;n<s.length;++n)(i=s[n]).show=bS.toValue(!0,i.show);for(n=0;n<c.length;++n)c[n].show=!0;return r}Ede.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),Object(o.a)(n)&&e.mode!==IR.SCENE3D){O.fromElements(n.y,n.z,n.x,n);var i=e.mapProjection,r=i.ellipsoid,a=i.unproject(n,Vde);r.cartographicToCartesian(a,n)}return n},Ede.prototype.drillPick=function(e,t,n,i,r){var a=this;return Ude(n,(function(){var n=a.pick(e,t,i,r);if(Object(o.a)(n))return{object:n,position:void 0,exclude:!1}})).map((function(e){return e.object}))};var Wde=new O,Gde=new O;function qde(e,t,n){this.ray=e,this.width=t,this.tilesets=n,this.ready=!1,this.deferred=Yt.a.defer(),this.promise=this.deferred.promise}function Yde(e,t,n,i){var o=t.direction,a=O.mostOrthogonalAxis(o,Wde),s=O.cross(o,a,Wde),c=O.cross(o,s,Gde);return i.position=t.origin,i.direction=o,i.up=c,i.right=s,i.frustum.width=Object(r.a)(n,.1),i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function $de(e,t,n){var i=t.frameState,r=n.ray,o=n.width,a=n.tilesets,s=e._pickOffscreenView.camera,c=Yde(0,r,o,s),l=wde;l.camera=s,l.cullingVolume=c;for(var u=!0,h=a.length,d=0;d<h;++d){var f=a[d];f.show&&t.primitives.contains(f)&&(f.updateForPass(i,l),u=u&&l.ready)}return u&&n.deferred.resolve(),u}function Xde(e,t,n,i,r,a){var s=[];if(function e(t,n,i){for(var r=t.length,a=0;a<r;++a){var s=t.get(a);s.show&&(Object(o.a)(s.isCesium3DTileset)?Object(o.a)(n)&&-1!==n.indexOf(s)||i.push(s):s instanceof H2&&e(s,n,i))}}(t.primitives,i,s),0===s.length)return Yt.a.resolve(a());var c=new qde(n,r,s);return e._mostDetailedRayPicks.push(c),c.promise.then((function(){return a()}))}function Kde(e,t){return!(!Object(o.a)(e)||!Object(o.a)(t)||0===t.length)&&(t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1)}function Qde(e,t,n,i,r,a,s,c){return Ude(i,(function(){return function(e,t,n,i,r,a,s){var c=t.context,l=c.uniformState,u=t.frameState,h=e._pickOffscreenView;t.view=h,Yde(0,n,r,h.camera),jde=bl.clone(h.viewport,jde);var d,f=h.pickFramebuffer.begin(jde,h.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),u.invertClassification=!1,u.passes.pick=!0,u.passes.offscreen=!0,u.tilesetPassState=s?Ode:Cde,l.update(u),t.updateEnvironment(),t.updateAndExecuteCommands(f,Nde),t.resolveFramebuffers(f);var p=h.pickFramebuffer.end(c);if(t.context.depthTexture)for(var m=h.frustumCommandsList.length,g=0;g<m;++g){var v=e.getPickDepth(t,g).getDepth(c,0,0);if(Object(o.a)(v)&&(v>0&&v<1)){var _=h.frustumCommandsList[g],b=_.near*(0!==g?t.opaqueFrustumNearOffset:1),y=b+v*(_.far-b);d=ti.getPoint(n,y);break}}if(t.view=t.defaultView,c.endFrame(),Object(o.a)(p)||Object(o.a)(d))return{object:p,position:d,exclude:!Object(o.a)(d)&&a||Kde(p,i)}}(e,t,n,r,a,s,c)}))}function Zde(e,t,n,i,r,o,a){var s=Qde(e,t,n,1,i,r,o,a);if(s.length>0)return s[0]}function Jde(e,t,n,i,r,o,a,s){return Qde(e,t,n,i,r,o,a,s)}function efe(e,t){var n=Yt.a.defer();return t.then((function(t){var i=e.postRender.addEventListener((function(){n.resolve(t),i()}));e.requestRender()})).otherwise((function(e){n.reject(e)})),n.promise}Ede.prototype.updateMostDetailedRayPicks=function(e){for(var t=this._mostDetailedRayPicks,n=0;n<t.length;++n)$de(this,e,t[n])&&t.splice(n--,1)},Ede.prototype.pickFromRay=function(e,t,n,r){if(i.a.defined("ray",t),e.mode!==IR.SCENE3D)throw new a.a("Ray intersections are only supported in 3D mode.");return Zde(this,e,t,n,r,!1,!1)},Ede.prototype.drillPickFromRay=function(e,t,n,r,o){if(i.a.defined("ray",t),e.mode!==IR.SCENE3D)throw new a.a("Ray intersections are only supported in 3D mode.");return Jde(this,e,t,n,r,o,!1,!1)},Ede.prototype.pickFromRayMostDetailed=function(e,t,n,r){if(i.a.defined("ray",t),e.mode!==IR.SCENE3D)throw new a.a("Ray intersections are only supported in 3D mode.");var s=this;return t=ti.clone(t),n=Object(o.a)(n)?n.slice():n,efe(e,Xde(s,e,t,n,r,(function(){return Zde(s,e,t,n,r,!1,!0)})))},Ede.prototype.drillPickFromRayMostDetailed=function(e,t,n,r,s){if(i.a.defined("ray",t),e.mode!==IR.SCENE3D)throw new a.a("Ray intersections are only supported in 3D mode.");var c=this;return t=ti.clone(t),r=Object(o.a)(r)?r.slice():r,efe(e,Xde(c,e,t,r,s,(function(){return Jde(c,e,t,n,r,s,!1,!0)})))};var tfe=new O,nfe=new O,ife=new ti,rfe=new R;function ofe(e,t){var n=e.globe,i=Object(o.a)(n)?n.ellipsoid:e.mapProjection.ellipsoid,r=qt._defaultMaxTerrainHeight,a=i.geodeticSurfaceNormalCartographic(t,nfe),s=R.toCartesian(t,i,tfe),c=ife;c.origin=s,c.direction=a;var l=new ti;return ti.getPoint(c,r,l.origin),O.negate(a,l.direction),l}function afe(e,t){var n=e.globe,i=Object(o.a)(n)?n.ellipsoid:e.mapProjection.ellipsoid;return ofe(e,R.fromCartesian(t,i,rfe))}function sfe(e,t){var n=e.globe,i=Object(o.a)(n)?n.ellipsoid:e.mapProjection.ellipsoid;return R.fromCartesian(t,i,rfe).height}function cfe(e,t,n,i,r){var a=ofe(t,n);return Xde(e,t,a,i,r,(function(){var n=Zde(e,t,a,i,r,!0,!0);if(Object(o.a)(n))return sfe(t,n.position)}))}function lfe(e,t,n,i,r,a){var s=afe(t,n);return Xde(e,t,s,i,r,(function(){var n=Zde(e,t,s,i,r,!0,!0);if(Object(o.a)(n))return O.clone(n.position,a)}))}Ede.prototype.sampleHeight=function(e,t,n,r){if(i.a.defined("position",t),e.mode!==IR.SCENE3D)throw new a.a("sampleHeight is only supported in 3D mode.");if(!e.sampleHeightSupported)throw new a.a("sampleHeight requires depth texture support. Check sampleHeightSupported.");var s=Zde(this,e,ofe(e,t),n,r,!0,!1);if(Object(o.a)(s))return sfe(e,s.position)},Ede.prototype.clampToHeight=function(e,t,n,r,s){if(i.a.defined("cartesian",t),e.mode!==IR.SCENE3D)throw new a.a("clampToHeight is only supported in 3D mode.");if(!e.clampToHeightSupported)throw new a.a("clampToHeight requires depth texture support. Check clampToHeightSupported.");var c=Zde(this,e,afe(e,t),n,r,!0,!1);if(Object(o.a)(c))return O.clone(c.position,s)},Ede.prototype.sampleHeightMostDetailed=function(e,t,n,r){if(i.a.defined("positions",t),e.mode!==IR.SCENE3D)throw new a.a("sampleHeightMostDetailed is only supported in 3D mode.");if(!e.sampleHeightSupported)throw new a.a("sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.");n=Object(o.a)(n)?n.slice():n;for(var s=t.length,c=new Array(s),l=0;l<s;++l)c[l]=cfe(this,e,t[l],n,r);return efe(e,Yt.a.all(c).then((function(e){for(var n=e.length,i=0;i<n;++i)t[i].height=e[i];return t})))},Ede.prototype.clampToHeightMostDetailed=function(e,t,n,r){if(i.a.defined("cartesians",t),e.mode!==IR.SCENE3D)throw new a.a("clampToHeightMostDetailed is only supported in 3D mode.");if(!e.clampToHeightSupported)throw new a.a("clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.");n=Object(o.a)(n)?n.slice():n;for(var s=t.length,c=new Array(s),l=0;l<s;++l)c[l]=lfe(this,e,t[l],n,r,t[l]);return efe(e,Yt.a.all(c).then((function(e){for(var n=e.length,i=0;i<n;++i)t[i]=e[i];return t})))},Ede.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var ufe=Ede,hfe={NEAREST:0,LINEAR:1};function dfe(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).fragmentShader,n=Object(r.a)(e.textureScale,1),s=Object(r.a)(e.pixelFormat,FC.RGBA);if(i.a.typeOf.string("options.fragmentShader",t),i.a.typeOf.number.greaterThan("options.textureScale",n,0),i.a.typeOf.number.lessThanOrEquals("options.textureScale",n,1),!FC.isColorFormat(s))throw new a.a("options.pixelFormat must be a color format.");this._fragmentShader=t,this._uniforms=e.uniforms,this._textureScale=n,this._forcePowerOfTwo=Object(r.a)(e.forcePowerOfTwo,!1),this._sampleMode=Object(r.a)(e.sampleMode,hfe.NEAREST),this._pixelFormat=s,this._pixelDatatype=Object(r.a)(e.pixelDatatype,LC.UNSIGNED_BYTE),this._clearColor=Object(r.a)(e.clearColor,Hf.BLACK),this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;var c=new k8;c.scissorTest={enabled:!0,rectangle:Object(o.a)(e.scissorRectangle)?bl.clone(e.scissorRectangle):new bl},this._passState=c,this._ready=!1;var l=e.name;Object(o.a)(l)||(l=l_()),this._name=l,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(dfe.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(Object(o.a)(this._textureCache)){var e=this._textureCache.getFramebuffer(this._name);if(Object(o.a)(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var ffe=/uniform\s+sampler2D\s+depthTexture/g;function pfe(e,t,n){var i=t[n];return("string"===typeof i||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData)&&e._dirtyUniforms.push(n),{get:function(){return t[n]},set:function(i){var r=t[n];t[n]=i;var a=e._actualUniforms,s=a[n];Object(o.a)(s)&&s!==r&&s instanceof nI&&!Object(o.a)(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(s),delete a[n],delete a[n+"Dimensions"]),r instanceof nI&&e._texturesToRelease.push(r),"string"===typeof i||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData?e._dirtyUniforms.push(n):a[n]=i}}}function mfe(e,t){return function(){var n=e._actualUniforms[t];return"function"===typeof n?n():n}}function gfe(e,t){return function(){var n=e[t]();if(Object(o.a)(n))return n.dimensions}}function vfe(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function _fe(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function bfe(e){Object(o.a)(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();var t=e._textureCache;if(Object(o.a)(t)){var n=e._uniforms,i=e._actualUniforms;for(var r in i)i.hasOwnProperty(r)&&i[r]instanceof nI&&(Object(o.a)(t.getStageByName(n[r]))||i[r].destroy(),e._dirtyUniforms.push(r))}}dfe.prototype._isSupported=function(e){return!ffe.test(this._fragmentShader)||e.depthTexture},dfe.prototype.update=function(e,t){if(this.enabled===this._enabled||this.enabled||bfe(this),this._enabled=this.enabled,this._enabled&&(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=function(e){var t=Object(o.a)(e._selected)?e._selected.length:0,n=Object(o.a)(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,Object(o.a)(e._selected)&&Object(o.a)(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):Object(o.a)(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&Object(o.a)(e._combinedSelected)){if(!Object(o.a)(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(var r=0;r<t;++r)if(e._combinedSelected[r]!==e._combinedSelectedShadow[r])return!0}return i}(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=Object(o.a)(this._selected)?this._selected.length:0,this._parentSelectedLength=Object(o.a)(this._parentSelected)?this._parentSelected.length:0,function(e,t){if(e._selectedDirty){e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;var n=e._combinedSelected;if(Object(o.a)(n)){var i,r,a,s=0,c=n.length;for(i=0;i<c;++i)r=n[i],Object(o.a)(r.pickIds)?s+=r.pickIds.length:Object(o.a)(r.pickId)&&++s;if(0===c||0===s){var l=new Uint8Array(4);return l[0]=255,l[1]=255,l[2]=255,l[3]=255,void(e._selectedIdTexture=new nI({context:t,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,source:{arrayBufferView:l,width:1,height:1},sampler:ZP.NEAREST}))}var u=0,h=new Uint8Array(4*s);for(i=0;i<c;++i)if(r=n[i],Object(o.a)(r.pickIds))for(var d=r.pickIds,f=d.length,p=0;p<f;++p)a=d[p].color,h[u]=Hf.floatToByte(a.red),h[u+1]=Hf.floatToByte(a.green),h[u+2]=Hf.floatToByte(a.blue),h[u+3]=Hf.floatToByte(a.alpha),u+=4;else Object(o.a)(r.pickId)&&(a=r.pickId.color,h[u]=Hf.floatToByte(a.red),h[u+1]=Hf.floatToByte(a.green),h[u+2]=Hf.floatToByte(a.blue),h[u+3]=Hf.floatToByte(a.alpha),u+=4);e._selectedIdTexture=new nI({context:t,pixelFormat:FC.RGBA,pixelDatatype:LC.UNSIGNED_BYTE,source:{arrayBufferView:h,width:s,height:1},sampler:ZP.NEAREST})}}}(this,e),function(e){if(!Object(o.a)(e._uniformMap)){var t={},n={},i=e._uniforms,r=e._actualUniforms;for(var a in i)if(i.hasOwnProperty(a)){"function"!==typeof i[a]?(t[a]=mfe(e,a),n[a]=pfe(e,i,a)):(t[a]=i[a],n[a]=i[a]),r[a]=i[a];var s=t[a]();("string"===typeof s||s instanceof nI||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[a+"Dimensions"]=gfe(t,a))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=Object(Wf.a)(t,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}}(this),function(e,t){var n,i,r,a=e._texturesToRelease,s=a.length;for(n=0;n<s;++n)i=(i=a[n])&&i.destroy();a.length=0;var c=e._texturesToCreate;for(s=c.length,n=0;n<s;++n){var l=c[n];r=l.name;var u=l.source;e._actualUniforms[r]=new nI({context:t,source:u})}c.length=0;var h=e._dirtyUniforms;if(0!==h.length||Object(o.a)(e._texturePromise)){if(0!==h.length&&!Object(o.a)(e._texturePromise)){s=h.length;var d=e._uniforms,f=[];for(n=0;n<s;++n){var p=d[r=h[n]],m=e._textureCache.getStageByName(p);if(Object(o.a)(m))e._actualUniforms[r]=_fe(e,p);else if("string"===typeof p){var g=new _t.a({url:p});f.push(g.fetchImage().then(vfe(e,r)))}else e._texturesToCreate.push({name:r,source:p})}h.length=0,f.length>0?(e._ready=!1,e._texturePromise=Yt.a.all(f).then((function(){e._ready=!0,e._texturePromise=void 0}))):e._ready=!0}}else e._ready=!0}(this,e),function(e,t){if(!Object(o.a)(e._command)||e._logDepthChanged||e._selectedDirty){var n=e._fragmentShader;if(Object(o.a)(e._selectedIdTexture))n="#define CZM_SELECTED_FEATURE \nuniform sampler2D czm_idTexture; \nuniform sampler2D czm_selectedIdTexture; \nuniform float czm_selectedIdTextureStep; \nvarying vec2 v_textureCoordinates; \nbool czm_selected(vec2 offset) \n{ \n bool selected = false;\n vec4 id = texture2D(czm_idTexture, v_textureCoordinates + offset); \n for (int i = 0; i < "+e._selectedIdTexture.width+"; ++i) \n { \n vec4 selectedId = texture2D(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5)); \n if (all(equal(id, selectedId))) \n { \n return true; \n } \n } \n return false; \n} \n\nbool czm_selected() \n{ \n return czm_selected(vec2(0.0)); \n} \n\n"+(n=n.replace(/varying\s+vec2\s+v_textureCoordinates;/g,""));var i=new KM({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}}(this,e),function(e){var t,n;e._sampleMode===hfe.LINEAR?(t=$P.LINEAR,n=qP.LINEAR):(t=$P.NEAREST,n=qP.NEAREST);var i=e._sampler;Object(o.a)(i)&&i.minificationFilter===t&&i.magnificationFilter===n||(e._sampler=new ZP({wrapS:KP.CLAMP_TO_EDGE,wrapT:KP.CLAMP_TO_EDGE,minificationFilter:t,magnificationFilter:n}))}(this),this._selectedDirty=!1,this._ready)){var n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,Object(o.a)(n)){var i,r=n.getColorTexture(0);r.width===e.drawingBufferWidth&&r.height===e.drawingBufferHeight||(i=this._renderState,Object(o.a)(i)&&r.width===i.viewport.width&&r.height===i.viewport.height||(this._renderState=XI.fromCache({viewport:new bl(0,0,r.width,r.height)}))),this._command.renderState=i}}},dfe.prototype.execute=function(e,t,n,i){if(Object(o.a)(this._command)&&Object(o.a)(this._command.framebuffer)&&this._ready&&this._enabled){this._colorTexture=t,this._depthTexture=n,this._idTexture=i,ZP.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler);var r=this.scissorRectangle.width>0&&this.scissorRectangle.height>0?this._passState:void 0;Object(o.a)(r)&&(r.context=e),this._command.execute(e,r)}},dfe.prototype.isDestroyed=function(){return!1},dfe.prototype.destroy=function(){return bfe(this),Ks(this)};var yfe=dfe,wfe="#define SAMPLES 8\n\nuniform float delta;\nuniform float sigma;\nuniform float direction; // 0.0 for x direction, 1.0 for y direction\n\nuniform sampler2D colorTexture;\n\n#ifdef USE_STEP_SIZE\nuniform float stepSize;\n#else\nuniform vec2 step;\n#endif\n\nvarying vec2 v_textureCoordinates;\n\n// Incremental Computation of the Gaussian:\n// https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html\n\nvoid main()\n{\n vec2 st = v_textureCoordinates;\n vec2 dir = vec2(1.0 - direction, direction);\n\n#ifdef USE_STEP_SIZE\n vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));\n#else\n vec2 step = step;\n#endif\n\n vec3 g;\n g.x = 1.0 / (sqrt(czm_twoPi) * sigma);\n g.y = exp((-0.5 * delta * delta) / (sigma * sigma));\n g.z = g.y * g.y;\n\n vec4 result = texture2D(colorTexture, st) * g.x;\n for (int i = 1; i < SAMPLES; ++i)\n {\n g.xy *= g.yz;\n\n vec2 offset = float(i) * dir * step;\n result += texture2D(colorTexture, st - offset) * g.x;\n result += texture2D(colorTexture, st + offset) * g.x;\n }\n\n gl_FragColor = result;\n}\n";function Ofe(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.defined("options.stages",e.stages),i.a.typeOf.number.greaterThan("options.stages.length",e.stages.length,0),this._stages=e.stages,this._inputPreviousStageTexture=Object(r.a)(e.inputPreviousStageTexture,!0);var t=e.name;Object(o.a)(t)||(t=l_()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}Object.defineProperties(Ofe.prototype,{ready:{get:function(){for(var e=this._stages,t=e.length,n=0;n<t;++n)if(!e[n].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){for(var t=this._stages,n=t.length,i=0;i<n;++i)t[i].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}}),Ofe.prototype._isSupported=function(e){for(var t=this._stages,n=t.length,i=0;i<n;++i)if(!t[i]._isSupported(e))return!1;return!0},Ofe.prototype.get=function(e){return i.a.typeOf.number.greaterThanOrEquals("index",e,0),i.a.typeOf.number.lessThan("index",e,this.length),this._stages[e]},Ofe.prototype.update=function(e,t){this._selectedDirty=function(e){var t=Object(o.a)(e._selected)?e._selected.length:0,n=Object(o.a)(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,Object(o.a)(e._selected)&&Object(o.a)(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):Object(o.a)(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&Object(o.a)(e._combinedSelected)){if(!Object(o.a)(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(var r=0;r<t;++r)if(e._combinedSelected[r]!==e._combinedSelectedShadow[r])return!0}return i}(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=Object(o.a)(this._selected)?this._selected.length:0,this._parentSelectedLength=Object(o.a)(this._parentSelected)?this._parentSelected.length:0;for(var n=this._stages,i=n.length,r=0;r<i;++r){var a=n[r];this._selectedDirty&&(a.parentSelected=this._combinedSelected),a.update(e,t)}},Ofe.prototype.isDestroyed=function(){return!1},Ofe.prototype.destroy=function(){for(var e=this._stages,t=e.length,n=0;n<t;++n)e[n].destroy();return Ks(this)};var Cfe=Ofe,Efe={};function Afe(e){var t="#define USE_STEP_SIZE\n"+wfe,n=new yfe({name:e+"_x_direction",fragmentShader:t,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:hfe.LINEAR}),i=new yfe({name:e+"_y_direction",fragmentShader:t,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:hfe.LINEAR}),r={};return Object.defineProperties(r,{delta:{get:function(){return n.uniforms.delta},set:function(e){var t=n.uniforms,r=i.uniforms;t.delta=r.delta=e}},sigma:{get:function(){return n.uniforms.sigma},set:function(e){var t=n.uniforms,r=i.uniforms;t.sigma=r.sigma=e}},stepSize:{get:function(){return n.uniforms.stepSize},set:function(e){var t=n.uniforms,r=i.uniforms;t.stepSize=r.stepSize=e}}}),new Cfe({name:e,stages:[n,i],uniforms:r})}Efe.createBlurStage=function(){return Afe("czm_blur")},Efe.createDepthOfFieldStage=function(){var e=Afe("czm_depth_of_field_blur"),t=new yfe({name:"czm_depth_of_field_composite",fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D blurTexture;\nuniform sampler2D depthTexture;\nuniform float focalDistance;\n\nvarying vec2 v_textureCoordinates;\n\nvec4 toEye(vec2 uv, float depth)\n{\n vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\n vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);\n posInCamera = posInCamera / posInCamera.w;\n return posInCamera;\n}\n\nfloat computeDepthBlur(float depth)\n{\n float f;\n if (depth < focalDistance)\n {\n f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);\n }\n else\n {\n f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);\n f = pow(f, 0.1);\n }\n f *= f;\n f = clamp(f, 0.0, 1.0);\n return pow(f, 0.5);\n}\n\nvoid main(void)\n{\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\n vec4 posInCamera = toEye(v_textureCoordinates, depth);\n float d = computeDepthBlur(-posInCamera.z);\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), texture2D(blurTexture, v_textureCoordinates), d);\n}\n",uniforms:{focalDistance:5,blurTexture:e.name}}),n={};return Object.defineProperties(n,{focalDistance:{get:function(){return t.uniforms.focalDistance},set:function(e){t.uniforms.focalDistance=e}},delta:{get:function(){return e.uniforms.delta},set:function(t){e.uniforms.delta=t}},sigma:{get:function(){return e.uniforms.sigma},set:function(t){e.uniforms.sigma=t}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(t){e.uniforms.stepSize=t}}}),new Cfe({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})},Efe.isDepthOfFieldSupported=function(e){return e.context.depthTexture},Efe.createEdgeDetectionStage=function(){var e=l_();return new yfe({name:"czm_edge_detection_"+e,fragmentShader:"uniform sampler2D depthTexture;\nuniform float length;\nuniform vec4 color;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n\n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n\n float padx = czm_pixelRatio / czm_viewport.z;\n float pady = czm_pixelRatio / czm_viewport.w;\n\n#ifdef CZM_SELECTED_FEATURE\n bool selected = false;\n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n selected = selected || czm_selected(vec2(-padx, dir * pady));\n selected = selected || czm_selected(vec2(padx, dir * pady));\n selected = selected || czm_selected(vec2(dir * padx, -pady));\n selected = selected || czm_selected(vec2(dir * padx, pady));\n if (selected)\n {\n break;\n }\n }\n if (!selected)\n {\n gl_FragColor = vec4(color.rgb, 0.0);\n return;\n }\n#endif\n\n float horizEdge = 0.0;\n float vertEdge = 0.0;\n\n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n\n horizEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;\n\n vertEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;\n }\n\n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\n gl_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);\n}\n",uniforms:{length:.25,color:Hf.clone(Hf.BLACK)}})},Efe.isEdgeDetectionSupported=function(e){return e.context.depthTexture},Efe.createSilhouetteStage=function(e){var t=function(e){if(!Object(o.a)(e))return Efe.createEdgeDetectionStage();for(var t=new Cfe({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),n={},i="",r="",a=0;a<e.length;++a)i+="uniform sampler2D edgeTexture"+a+"; \n",r+=" vec4 edge"+a+" = texture2D(edgeTexture"+a+", v_textureCoordinates); \n if (edge"+a+".a > 0.0) \n { \n color = edge"+a+"; \n break; \n } \n",n["edgeTexture"+a]=e[a].name;var s=i+"varying vec2 v_textureCoordinates; \nvoid main() { \n vec4 color = vec4(0.0); \n for (int i = 0; i < "+e.length+"; i++) \n { \n"+r+" } \n gl_FragColor = color; \n} \n",c=new yfe({name:"czm_edge_detection_combine",fragmentShader:s,uniforms:n});return new Cfe({name:"czm_edge_detection_composite",stages:[t,c]})}(e),n=new yfe({name:"czm_silhouette_color_edges",fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D silhouetteTexture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec4 silhouetteColor = texture2D(silhouetteTexture, v_textureCoordinates);\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n gl_FragColor = mix(color, silhouetteColor, silhouetteColor.a);\n}\n",uniforms:{silhouetteTexture:t.name}});return new Cfe({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})},Efe.isSilhouetteSupported=function(e){return e.context.depthTexture},Efe.createBloomStage=function(){var e=new yfe({name:"czm_bloom_contrast_bias",fragmentShader:"uniform sampler2D colorTexture;\nuniform float contrast;\nuniform float brightness;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec3 sceneColor = texture2D(colorTexture, v_textureCoordinates).xyz;\n sceneColor = czm_RGBToHSB(sceneColor);\n sceneColor.z += brightness;\n sceneColor = czm_HSBToRGB(sceneColor);\n\n float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));\n sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);\n gl_FragColor = vec4(sceneColor, 1.0);\n}\n",uniforms:{contrast:128,brightness:-.3}}),t=Afe("czm_bloom_blur"),n=new Cfe({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new yfe({name:"czm_bloom_generate_composite",fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D bloomTexture;\nuniform bool glowOnly;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n\n#ifdef CZM_SELECTED_FEATURE\n if (czm_selected()) {\n gl_FragColor = color;\n return;\n }\n#endif\n\n vec4 bloom = texture2D(bloomTexture, v_textureCoordinates);\n gl_FragColor = glowOnly ? bloom : bloom + color;\n}\n",uniforms:{glowOnly:!1,bloomTexture:n.name}}),r={};return Object.defineProperties(r,{glowOnly:{get:function(){return i.uniforms.glowOnly},set:function(e){i.uniforms.glowOnly=e}},contrast:{get:function(){return e.uniforms.contrast},set:function(t){e.uniforms.contrast=t}},brightness:{get:function(){return e.uniforms.brightness},set:function(t){e.uniforms.brightness=t}},delta:{get:function(){return t.uniforms.delta},set:function(e){t.uniforms.delta=e}},sigma:{get:function(){return t.uniforms.sigma},set:function(e){t.uniforms.sigma=e}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(e){t.uniforms.stepSize=e}}}),new Cfe({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:r})},Efe.createAmbientOcclusionStage=function(){var e=new yfe({name:"czm_ambient_occlusion_generate",fragmentShader:"uniform sampler2D randomTexture;\nuniform sampler2D depthTexture;\nuniform float intensity;\nuniform float bias;\nuniform float lengthCap;\nuniform float stepSize;\nuniform float frustumLength;\n\nvarying vec2 v_textureCoordinates;\n\nvec4 clipToEye(vec2 uv, float depth)\n{\n vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\n vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);\n posEC = posEC / posEC.w;\n return posEC;\n}\n\n//Reconstruct Normal Without Edge Removation\nvec3 getNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize)\n{\n vec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU);\n vec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD);\n vec4 posInCameraLeft = clipToEye(v_textureCoordinates - vec2(pixelSize.x, 0.0), depthL);\n vec4 posInCameraRight = clipToEye(v_textureCoordinates + vec2(pixelSize.x, 0.0), depthR);\n\n vec3 up = posInCamera.xyz - posInCameraUp.xyz;\n vec3 down = posInCameraDown.xyz - posInCamera.xyz;\n vec3 left = posInCamera.xyz - posInCameraLeft.xyz;\n vec3 right = posInCameraRight.xyz - posInCamera.xyz;\n\n vec3 DX = length(left) < length(right) ? left : right;\n vec3 DY = length(up) < length(down) ? up : down;\n\n return normalize(cross(DY, DX));\n}\n\nvoid main(void)\n{\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\n vec4 posInCamera = clipToEye(v_textureCoordinates, depth);\n\n if (posInCamera.z > frustumLength)\n {\n gl_FragColor = vec4(1.0);\n return;\n }\n\n vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\n float depthU = czm_readDepth(depthTexture, v_textureCoordinates - vec2(0.0, pixelSize.y));\n float depthD = czm_readDepth(depthTexture, v_textureCoordinates + vec2(0.0, pixelSize.y));\n float depthL = czm_readDepth(depthTexture, v_textureCoordinates - vec2(pixelSize.x, 0.0));\n float depthR = czm_readDepth(depthTexture, v_textureCoordinates + vec2(pixelSize.x, 0.0));\n vec3 normalInCamera = getNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize);\n\n float ao = 0.0;\n vec2 sampleDirection = vec2(1.0, 0.0);\n float gapAngle = 90.0 * czm_radiansPerDegree;\n\n // RandomNoise\n float randomVal = texture2D(randomTexture, v_textureCoordinates).x;\n\n //Loop for each direction\n for (int i = 0; i < 4; i++)\n {\n float newGapAngle = gapAngle * (float(i) + randomVal);\n float cosVal = cos(newGapAngle);\n float sinVal = sin(newGapAngle);\n\n //Rotate Sampling Direction\n vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);\n float localAO = 0.0;\n float localStepSize = stepSize;\n\n //Loop for each step\n for (int j = 0; j < 6; j++)\n {\n vec2 newCoords = v_textureCoordinates + rotatedSampleDirection * localStepSize * pixelSize;\n\n //Exception Handling\n if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0)\n {\n break;\n }\n\n float stepDepthInfo = czm_readDepth(depthTexture, newCoords);\n vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo);\n vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz;\n float len = length(diffVec);\n\n if (len > lengthCap)\n {\n break;\n }\n\n float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 );\n float weight = len / lengthCap;\n weight = 1.0 - weight * weight;\n\n if (dotVal < bias)\n {\n dotVal = 0.0;\n }\n\n localAO = max(localAO, dotVal * weight);\n localStepSize += stepSize;\n }\n ao += localAO;\n }\n\n ao /= 4.0;\n ao = 1.0 - clamp(ao, 0.0, 1.0);\n ao = pow(ao, intensity);\n gl_FragColor = vec4(vec3(ao), 1.0);\n}\n",uniforms:{intensity:3,bias:.1,lengthCap:.26,stepSize:1.95,frustumLength:1e3,randomTexture:void 0}}),t=Afe("czm_ambient_occlusion_blur");t.uniforms.stepSize=.86;var n=new Cfe({name:"czm_ambient_occlusion_generate_blur",stages:[e,t]}),i=new yfe({name:"czm_ambient_occlusion_composite",fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D ambientOcclusionTexture;\nuniform bool ambientOcclusionOnly;\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec3 color = texture2D(colorTexture, v_textureCoordinates).rgb;\n vec3 ao = texture2D(ambientOcclusionTexture, v_textureCoordinates).rgb;\n gl_FragColor.rgb = ambientOcclusionOnly ? ao : ao * color;\n}\n",uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:n.name}}),r={};return Object.defineProperties(r,{intensity:{get:function(){return e.uniforms.intensity},set:function(t){e.uniforms.intensity=t}},bias:{get:function(){return e.uniforms.bias},set:function(t){e.uniforms.bias=t}},lengthCap:{get:function(){return e.uniforms.lengthCap},set:function(t){e.uniforms.lengthCap=t}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(t){e.uniforms.stepSize=t}},frustumLength:{get:function(){return e.uniforms.frustumLength},set:function(t){e.uniforms.frustumLength=t}},randomTexture:{get:function(){return e.uniforms.randomTexture},set:function(t){e.uniforms.randomTexture=t}},delta:{get:function(){return t.uniforms.delta},set:function(e){t.uniforms.delta=e}},sigma:{get:function(){return t.uniforms.sigma},set:function(e){t.uniforms.sigma=e}},blurStepSize:{get:function(){return t.uniforms.stepSize},set:function(e){t.uniforms.stepSize=e}},ambientOcclusionOnly:{get:function(){return i.uniforms.ambientOcclusionOnly},set:function(e){i.uniforms.ambientOcclusionOnly=e}}}),new Cfe({name:"czm_ambient_occlusion",stages:[n,i],inputPreviousStageTexture:!1,uniforms:r})},Efe.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};Efe.createFXAAStage=function(){return new yfe({name:"czm_FXAA",fragmentShader:"#define FXAA_QUALITY_PRESET 39 \n/**\n * @license\n * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of NVIDIA CORPORATION nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples\n// Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h\n\n// Steps used to integrate into Cesium:\n// * The following defines are set:\n// #define FXAA_PC 1\n// #define FXAA_WEBGL_1 1\n// #define FXAA_GREEN_AS_LUMA 1\n// #define FXAA_EARLY_EXIT 1\n// #define FXAA_GLSL_120 1\n// * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed.\n// * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace\n// /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/.\n// * There are no implicit conversions from ivec* to vec* so replace:\n// #define FxaaInt2 ivec2\n// with\n// #define FxaaInt2 vec2\n// * The texture2DLod function is only available in vertex shaders so replace:\n// #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\n// #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\n// with\n// #define FxaaTexTop(t, p) texture2D(t, p)\n// #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r))\n// * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future.\n// * The following parameters to FxaaPixelShader are unused and can be removed:\n// fxaaConsolePosPos\n// fxaaConsoleRcpFrameOpt\n// fxaaConsoleRcpFrameOpt2\n// fxaaConsole360RcpFrameOpt2\n// fxaaConsoleEdgeSharpness\n// fxaaConsoleEdgeThreshold\n// fxaaConsoleEdgeThresholdMi\n// fxaaConsole360ConstDir\n\n//\n// Choose the quality preset.\n// This needs to be compiled into the shader as it effects code.\n// Best option to include multiple presets is to\n// in each shader define the preset, then include this file.\n//\n// OPTIONS\n// -----------------------------------------------------------------------\n// 10 to 15 - default medium dither (10=fastest, 15=highest quality)\n// 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\n// 39 - no dither, very expensive\n//\n// NOTES\n// -----------------------------------------------------------------------\n// 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\n// 13 = about same speed as FXAA 3.9 and better than 12\n// 23 = closest to FXAA 3.9 visually and performance wise\n// _ = the lowest digit is directly related to performance\n// _ = the highest digit is directly related to style\n//\n//#define FXAA_QUALITY_PRESET 12\n\n\n#if (FXAA_QUALITY_PRESET == 10)\n #define FXAA_QUALITY_PS 3\n #define FXAA_QUALITY_P0 1.5\n #define FXAA_QUALITY_P1 3.0\n #define FXAA_QUALITY_P2 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 11)\n #define FXAA_QUALITY_PS 4\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 3.0\n #define FXAA_QUALITY_P3 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 12)\n #define FXAA_QUALITY_PS 5\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 4.0\n #define FXAA_QUALITY_P4 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 13)\n #define FXAA_QUALITY_PS 6\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 4.0\n #define FXAA_QUALITY_P5 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 14)\n #define FXAA_QUALITY_PS 7\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 4.0\n #define FXAA_QUALITY_P6 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 15)\n #define FXAA_QUALITY_PS 8\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 4.0\n #define FXAA_QUALITY_P7 12.0\n#endif\n#if (FXAA_QUALITY_PRESET == 20)\n #define FXAA_QUALITY_PS 3\n #define FXAA_QUALITY_P0 1.5\n #define FXAA_QUALITY_P1 2.0\n #define FXAA_QUALITY_P2 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 21)\n #define FXAA_QUALITY_PS 4\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 22)\n #define FXAA_QUALITY_PS 5\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 23)\n #define FXAA_QUALITY_PS 6\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 24)\n #define FXAA_QUALITY_PS 7\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 3.0\n #define FXAA_QUALITY_P6 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 25)\n #define FXAA_QUALITY_PS 8\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 4.0\n #define FXAA_QUALITY_P7 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 26)\n #define FXAA_QUALITY_PS 9\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 4.0\n #define FXAA_QUALITY_P8 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 27)\n #define FXAA_QUALITY_PS 10\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 4.0\n #define FXAA_QUALITY_P9 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 28)\n #define FXAA_QUALITY_PS 11\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 4.0\n #define FXAA_QUALITY_P10 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 29)\n #define FXAA_QUALITY_PS 12\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 2.0\n #define FXAA_QUALITY_P10 4.0\n #define FXAA_QUALITY_P11 8.0\n#endif\n#if (FXAA_QUALITY_PRESET == 39)\n #define FXAA_QUALITY_PS 12\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.0\n #define FXAA_QUALITY_P2 1.0\n #define FXAA_QUALITY_P3 1.0\n #define FXAA_QUALITY_P4 1.0\n #define FXAA_QUALITY_P5 1.5\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 2.0\n #define FXAA_QUALITY_P10 4.0\n #define FXAA_QUALITY_P11 8.0\n#endif\n\n#define FxaaBool bool\n#define FxaaFloat float\n#define FxaaFloat2 vec2\n#define FxaaFloat3 vec3\n#define FxaaFloat4 vec4\n#define FxaaHalf float\n#define FxaaHalf2 vec2\n#define FxaaHalf3 vec3\n#define FxaaHalf4 vec4\n#define FxaaInt2 vec2\n#define FxaaTex sampler2D\n\n#define FxaaSat(x) clamp(x, 0.0, 1.0)\n#define FxaaTexTop(t, p) texture2D(t, p)\n#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r))\n\nFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\n\nFxaaFloat4 FxaaPixelShader(\n //\n // Use noperspective interpolation here (turn off perspective interpolation).\n // {xy} = center of pixel\n FxaaFloat2 pos,\n //\n // Input color texture.\n // {rgb_} = color in linear or perceptual color space\n // if (FXAA_GREEN_AS_LUMA == 0)\n // {___a} = luma in perceptual color space (not linear)\n FxaaTex tex,\n //\n // Only used on FXAA Quality.\n // This must be from a constant/uniform.\n // {x_} = 1.0/screenWidthInPixels\n // {_y} = 1.0/screenHeightInPixels\n FxaaFloat2 fxaaQualityRcpFrame,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_SUBPIX define.\n // It is here now to allow easier tuning.\n // Choose the amount of sub-pixel aliasing removal.\n // This can effect sharpness.\n // 1.00 - upper limit (softer)\n // 0.75 - default amount of filtering\n // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\n // 0.25 - almost off\n // 0.00 - completely off\n FxaaFloat fxaaQualitySubpix,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\n // It is here now to allow easier tuning.\n // The minimum amount of local contrast required to apply algorithm.\n // 0.333 - too little (faster)\n // 0.250 - low quality\n // 0.166 - default\n // 0.125 - high quality\n // 0.063 - overkill (slower)\n FxaaFloat fxaaQualityEdgeThreshold,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\n // It is here now to allow easier tuning.\n // Trims the algorithm from processing darks.\n // 0.0833 - upper limit (default, the start of visible unfiltered edges)\n // 0.0625 - high quality (faster)\n // 0.0312 - visible limit (slower)\n // Special notes when using FXAA_GREEN_AS_LUMA,\n // Likely want to set this to zero.\n // As colors that are mostly not-green\n // will appear very dark in the green channel!\n // Tune by looking at mostly non-green content,\n // then start at zero and increase until aliasing is a problem.\n FxaaFloat fxaaQualityEdgeThresholdMin\n) {\n/*--------------------------------------------------------------------------*/\n FxaaFloat2 posM;\n posM.x = pos.x;\n posM.y = pos.y;\n FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n #define lumaM rgbyM.y\n FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\n/*--------------------------------------------------------------------------*/\n FxaaFloat maxSM = max(lumaS, lumaM);\n FxaaFloat minSM = min(lumaS, lumaM);\n FxaaFloat maxESM = max(lumaE, maxSM);\n FxaaFloat minESM = min(lumaE, minSM);\n FxaaFloat maxWN = max(lumaN, lumaW);\n FxaaFloat minWN = min(lumaN, lumaW);\n FxaaFloat rangeMax = max(maxWN, maxESM);\n FxaaFloat rangeMin = min(minWN, minESM);\n FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n FxaaFloat range = rangeMax - rangeMin;\n FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n FxaaBool earlyExit = range < rangeMaxClamped;\n/*--------------------------------------------------------------------------*/\n if(earlyExit)\n return rgbyM;\n/*--------------------------------------------------------------------------*/\n FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n/*--------------------------------------------------------------------------*/\n FxaaFloat lumaNS = lumaN + lumaS;\n FxaaFloat lumaWE = lumaW + lumaE;\n FxaaFloat subpixRcpRange = 1.0/range;\n FxaaFloat subpixNSWE = lumaNS + lumaWE;\n FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\n FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\n/*--------------------------------------------------------------------------*/\n FxaaFloat lumaNESE = lumaNE + lumaSE;\n FxaaFloat lumaNWNE = lumaNW + lumaNE;\n FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n/*--------------------------------------------------------------------------*/\n FxaaFloat lumaNWSW = lumaNW + lumaSW;\n FxaaFloat lumaSWSE = lumaSW + lumaSE;\n FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\n FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\n/*--------------------------------------------------------------------------*/\n FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\n FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\n FxaaBool horzSpan = edgeHorz >= edgeVert;\n FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n/*--------------------------------------------------------------------------*/\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\n/*--------------------------------------------------------------------------*/\n FxaaFloat gradientN = lumaN - lumaM;\n FxaaFloat gradientS = lumaS - lumaM;\n FxaaFloat lumaNN = lumaN + lumaM;\n FxaaFloat lumaSS = lumaS + lumaM;\n FxaaBool pairN = abs(gradientN) >= abs(gradientS);\n FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\n if(pairN) lengthSign = -lengthSign;\n FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\n/*--------------------------------------------------------------------------*/\n FxaaFloat2 posB;\n posB.x = posM.x;\n posB.y = posM.y;\n FxaaFloat2 offNP;\n offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n if(!horzSpan) posB.x += lengthSign * 0.5;\n if( horzSpan) posB.y += lengthSign * 0.5;\n/*--------------------------------------------------------------------------*/\n FxaaFloat2 posN;\n posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\n posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\n FxaaFloat2 posP;\n posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\n posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\n FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\n FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\n FxaaFloat subpixE = subpixC * subpixC;\n FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\n/*--------------------------------------------------------------------------*/\n if(!pairN) lumaNN = lumaSS;\n FxaaFloat gradientScaled = gradient * 1.0/4.0;\n FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\n FxaaFloat subpixF = subpixD * subpixE;\n FxaaBool lumaMLTZero = lumaMM < 0.0;\n/*--------------------------------------------------------------------------*/\n lumaEndN -= lumaNN * 0.5;\n lumaEndP -= lumaNN * 0.5;\n FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\n FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\n FxaaBool doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\n/*--------------------------------------------------------------------------*/\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 3)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 4)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 5)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 6)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 7)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 8)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 9)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 10)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 11)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\n/*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 12)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n #endif\n/*--------------------------------------------------------------------------*/\n }\n/*--------------------------------------------------------------------------*/\n FxaaFloat dstN = posM.x - posN.x;\n FxaaFloat dstP = posP.x - posM.x;\n if(!horzSpan) dstN = posM.y - posN.y;\n if(!horzSpan) dstP = posP.y - posM.y;\n/*--------------------------------------------------------------------------*/\n FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n FxaaFloat spanLength = (dstP + dstN);\n FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n FxaaFloat spanLengthRcp = 1.0/spanLength;\n/*--------------------------------------------------------------------------*/\n FxaaBool directionN = dstN < dstP;\n FxaaFloat dst = min(dstN, dstP);\n FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\n FxaaFloat subpixG = subpixF * subpixF;\n FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\n/*--------------------------------------------------------------------------*/\n FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\n}\n\nvarying vec2 v_textureCoordinates;\n\nuniform sampler2D colorTexture;\n\nconst float fxaaQualitySubpix = 0.5;\nconst float fxaaQualityEdgeThreshold = 0.125;\nconst float fxaaQualityEdgeThresholdMin = 0.0833;\n\nvoid main()\n{\n vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw;\n vec4 color = FxaaPixelShader(\n v_textureCoordinates,\n colorTexture,\n fxaaQualityRcpFrame,\n fxaaQualitySubpix,\n fxaaQualityEdgeThreshold,\n fxaaQualityEdgeThresholdMin);\n float alpha = texture2D(colorTexture, v_textureCoordinates).a;\n gl_FragColor = vec4(color.rgb, alpha);\n}\n",sampleMode:hfe.LINEAR})},Efe.createAcesTonemappingStage=function(e){var t=e?"#define AUTO_EXPOSURE\n":"";return new yfe({name:"czm_aces",fragmentShader:t+="uniform sampler2D colorTexture;\n\nvarying vec2 v_textureCoordinates;\n\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\n\nvoid main()\n{\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\n vec3 color = fragmentColor.rgb;\n\n#ifdef AUTO_EXPOSURE\n color /= texture2D(autoExposure, vec2(0.5)).r;\n#endif\n color = czm_acesTonemapping(color);\n color = czm_inverseGamma(color);\n\n gl_FragColor = vec4(color, fragmentColor.a);\n}\n",uniforms:{autoExposure:void 0}})},Efe.createFilmicTonemappingStage=function(e){var t=e?"#define AUTO_EXPOSURE\n":"";return new yfe({name:"czm_filmic",fragmentShader:t+="uniform sampler2D colorTexture;\n\nvarying vec2 v_textureCoordinates;\n\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\n\n// See slides 142 and 143:\n// http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting\n\nvoid main()\n{\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\n vec3 color = fragmentColor.rgb;\n\n#ifdef AUTO_EXPOSURE\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\n color /= exposure;\n#endif\n\n\tconst float A = 0.22; // shoulder strength\n\tconst float B = 0.30; // linear strength\n\tconst float C = 0.10; // linear angle\n\tconst float D = 0.20; // toe strength\n\tconst float E = 0.01; // toe numerator\n\tconst float F = 0.30; // toe denominator\n\n\tconst float white = 11.2; // linear white point value\n\n\tvec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;\n\tfloat w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;\n\n\tc = czm_inverseGamma(c / w);\n\tgl_FragColor = vec4(c, fragmentColor.a);\n}\n",uniforms:{autoExposure:void 0}})},Efe.createReinhardTonemappingStage=function(e){var t=e?"#define AUTO_EXPOSURE\n":"";return new yfe({name:"czm_reinhard",fragmentShader:t+="uniform sampler2D colorTexture;\n\nvarying vec2 v_textureCoordinates;\n\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\n\n// See equation 3:\n// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\n\nvoid main()\n{\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\n vec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\n color /= exposure;\n#endif\n color = color / (1.0 + color);\n color = czm_inverseGamma(color);\n gl_FragColor = vec4(color, fragmentColor.a);\n}\n",uniforms:{autoExposure:void 0}})},Efe.createModifiedReinhardTonemappingStage=function(e){var t=e?"#define AUTO_EXPOSURE\n":"";return new yfe({name:"czm_modified_reinhard",fragmentShader:t+="uniform sampler2D colorTexture;\nuniform vec3 white;\n\nvarying vec2 v_textureCoordinates;\n\n#ifdef AUTO_EXPOSURE\nuniform sampler2D autoExposure;\n#endif\n\n// See equation 4:\n// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\n\nvoid main()\n{\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\n vec3 color = fragmentColor.rgb;\n#ifdef AUTO_EXPOSURE\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\n color /= exposure;\n#endif\n color = (color * (1.0 + color / white)) / (1.0 + color);\n color = czm_inverseGamma(color);\n gl_FragColor = vec4(color, fragmentColor.a);\n}\n",uniforms:{white:Hf.WHITE,autoExposure:void 0}})},Efe.createAutoExposureStage=function(){return new Wee},Efe.createBlackAndWhiteStage=function(){return new yfe({name:"czm_black_and_white",fragmentShader:"uniform sampler2D colorTexture;\nuniform float gradations;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\n#ifdef CZM_SELECTED_FEATURE\n if (czm_selected()) {\n gl_FragColor = vec4(rgb, 1.0);\n return;\n }\n#endif\n float luminance = czm_luminance(rgb);\n float darkness = luminance * gradations;\n darkness = (darkness - fract(darkness)) / gradations;\n gl_FragColor = vec4(vec3(darkness), 1.0);\n}\n",uniforms:{gradations:5}})},Efe.createBrightnessStage=function(){return new yfe({name:"czm_brightness",fragmentShader:"uniform sampler2D colorTexture;\nuniform float brightness;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\n vec3 target = vec3(0.0);\n gl_FragColor = vec4(mix(target, rgb, brightness), 1.0);\n}\n",uniforms:{brightness:.5}})},Efe.createNightVisionStage=function(){return new yfe({name:"czm_night_vision",fragmentShader:"uniform sampler2D colorTexture;\n\nvarying vec2 v_textureCoordinates;\n\nfloat rand(vec2 co)\n{\n return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\n vec3 green = vec3(0.0, 1.0, 0.0);\n gl_FragColor = vec4((noiseValue + rgb) * green, 1.0);\n}\n"})},Efe.createDepthViewStage=function(){return new yfe({name:"czm_depth_view",fragmentShader:"uniform sampler2D depthTexture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main(void)\n{\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\n gl_FragColor = vec4(vec3(depth), 1.0);\n}\n"})},Efe.createLensFlareStage=function(){return new yfe({name:"czm_lens_flare",fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D dirtTexture;\nuniform sampler2D starTexture;\nuniform vec2 dirtTextureDimensions;\nuniform float distortion;\nuniform float ghostDispersal;\nuniform float haloWidth;\nuniform float dirtAmount;\nuniform float earthRadius;\nuniform float intensity;\n\nvarying vec2 v_textureCoordinates;\n\n// whether it is in space or not\n// 6500000.0 is empirical value\n#define DISTANCE_TO_SPACE 6500000.0\n\n// return ndc from world coordinate biased earthRadius\nvec4 getNDCFromWC(vec3 WC, float earthRadius)\n{\n vec4 positionEC = czm_view * vec4(WC, 1.0);\n positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);\n vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\n return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);\n}\n\n// Check if current pixel is included Earth\n// if then mask it gradually\nfloat isInEarth(vec2 texcoord, vec2 sceneSize)\n{\n vec2 NDC = texcoord * 2.0 - 1.0;\n vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);\n vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);\n NDC.xy -= earthPosSC.xy;\n\n float X = abs(NDC.x) * sceneSize.x;\n float Y = abs(NDC.y) * sceneSize.y;\n\n return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));\n}\n\n// For Chromatic effect\nvec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)\n{\n vec2 sceneSize = czm_viewport.zw;\n vec3 color;\n if(isSpace)\n {\n color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r;\n color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g;\n color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b;\n }\n else\n {\n color.r = texture2D(tex, texcoord + direction * distortion.r).r;\n color.g = texture2D(tex, texcoord + direction * distortion.g).g;\n color.b = texture2D(tex, texcoord + direction * distortion.b).b;\n }\n return vec4(clamp(color, 0.0, 1.0), 0.0);\n}\n\nvoid main(void)\n{\n vec4 originalColor = texture2D(colorTexture, v_textureCoordinates);\n vec3 rgb = originalColor.rgb;\n bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;\n\n // Sun position\n vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);\n vec4 sunPositionEC = czm_view * sunPos;\n vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);\n sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);\n\n // If sun is not in the screen space, use original color.\n if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))\n {\n // Lens flare is disabled when not in space until #5932 is fixed.\n // https://github.com/CesiumGS/cesium/issues/5932\n gl_FragColor = originalColor;\n return;\n }\n\n vec2 texcoord = vec2(1.0) - v_textureCoordinates;\n vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\n vec2 invPixelSize = 1.0 / pixelSize;\n vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);\n\n // ghost vector to image centre:\n vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;\n vec3 direction = normalize(vec3(ghostVec, 0.0));\n\n // sample ghosts:\n vec4 result = vec4(0.0);\n vec4 ghost = vec4(0.0);\n for (int i = 0; i < 4; ++i)\n {\n vec2 offset = fract(texcoord + ghostVec * float(i));\n // Only bright spots from the centre of the source image\n ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);\n }\n result += ghost;\n\n // sample halo\n vec2 haloVec = normalize(ghostVec) * haloWidth;\n float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\n weightForHalo = pow(1.0 - weightForHalo, 5.0);\n\n result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;\n\n // dirt on lens\n vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;\n if (dirtTexCoords.x > 1.0)\n {\n dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x);\n }\n if (dirtTexCoords.y > 1.0)\n {\n dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y);\n }\n result += dirtAmount * texture2D(dirtTexture, dirtTexCoords);\n\n // Rotating starburst texture's coordinate\n // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0))\n float camrot = czm_view[0].z + czm_view[1].y;\n float cosValue = cos(camrot);\n float sinValue = sin(camrot);\n mat3 rotation = mat3(\n cosValue, -sinValue, 0.0,\n sinValue, cosValue, 0.0,\n 0.0, 0.0, 1.0\n );\n\n vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);\n vec3 st2 = vec3((rotation * st1).xy, 1.0);\n vec3 st3 = st2 * 0.5 + vec3(0.5);\n vec2 lensStarTexcoord = st3.xy;\n float weightForLensFlare = length(vec3(sunPos.xy, 0.0));\n float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);\n\n if (!isSpace)\n {\n result *= oneMinusWeightForLensFlare * intensity * 0.2;\n }\n else\n {\n result *= oneMinusWeightForLensFlare * intensity;\n result *= texture2D(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;\n }\n\n result += texture2D(colorTexture, v_textureCoordinates);\n\n gl_FragColor = result;\n}\n",uniforms:{dirtTexture:At("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:At("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:W.WGS84.maximumRadius}})};var xfe=Efe;function Tfe(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function Sfe(e){for(;Object(o.a)(e.length);)e=e.get(e.length-1);return e.name}function Dfe(e,t,n,i,r){if(!i.enabled||!i._isSupported(t))return r;var a=n[i.name]={};Object(o.a)(r)&&(a[Sfe(e.getStageByName(r))]=!0);var s=i.uniforms;if(Object(o.a)(s))for(var c=Object.getOwnPropertyNames(s),l=c.length,u=0;u<l;++u){var h=s[c[u]];if("string"===typeof h){var d=e.getStageByName(h);Object(o.a)(d)&&(a[Sfe(d)]=!0)}}return i.name}function Pfe(e,t,n,i,r){if(Object(o.a)(i.enabled)&&!i.enabled||Object(o.a)(i._isSupported)&&!i._isSupported(t))return r;for(var a,s,c=r,l=!Object(o.a)(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,u=r,h=i.length,d=0;d<h;++d){var f=i.get(d);u=Object(o.a)(f.length)?Pfe(e,t,n,f,r):Dfe(e,t,n,f,r),l&&(r=u)}if(l)for(a=1;a<h;++a)s=Sfe(i.get(a)),Object(o.a)(n[s])||(n[s]={}),n[s][c]=!0;else for(a=1;a<h;++a)for(var p=n[s=Sfe(i.get(a))],m=0;m<a;++m)p[Sfe(i.get(m))]=!0;return u}function Ife(e,t,n){var i,r,a=e._collection.getStageByName(t),s=a._textureScale,c=a._forcePowerOfTwo,l=a._pixelFormat,u=a._pixelDatatype,h=a._clearColor,d=e._framebuffers,f=d.length;for(i=0;i<f;++i)if(s===(r=d[i]).textureScale&&c===r.forcePowerOfTwo&&l===r.pixelFormat&&u===r.pixelDatatype&&Hf.equals(h,r.clearColor)){for(var p=r.stages,m=p.length,g=!1,v=0;v<m;++v)if(n[p[v]]){g=!0;break}if(!g)break}return Object(o.a)(r)&&i<f?(r.stages.push(t),r):(r={textureScale:s,forcePowerOfTwo:c,pixelFormat:l,pixelDatatype:u,clearColor:h,stages:[t],buffer:void 0,clear:void 0},d.push(r),r)}function Mfe(e,t){var n=function(e,t){var n={};if(Object(o.a)(e.ambientOcclusion)){var i=e.ambientOcclusion,r=e.bloom,a=e._tonemapping,s=e.fxaa,c=Pfe(e,t,n,i,void 0);c=Dfe(e,t,n,a,c=Pfe(e,t,n,r,c)),Dfe(e,t,n,s,c=Pfe(e,t,n,e,c))}else Pfe(e,t,n,e,void 0);return n}(e._collection,t);for(var i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=Ife(e,i,n[i]))}function Rfe(e){for(var t=e._framebuffers,n=t.length,i=0;i<n;++i){var r=t[i];r.buffer=r.buffer&&r.buffer.destroy(),r.buffer=void 0}}Tfe.prototype.updateDependencies=function(){this._updateDependencies=!0},Tfe.prototype.update=function(e){var t=this._collection,n=this._updateDependencies,i=Object(o.a)(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),r=Object(o.a)(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),a=Object(o.a)(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=Object(o.a)(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),c=!Object(o.a)(t._activeStages)||t._activeStages.length>0||i||r||a||s;if((n||!c&&this._framebuffers.length>0)&&(Rfe(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),n||c){0===this._framebuffers.length&&Mfe(this,e);var l=e.drawingBufferWidth,u=e.drawingBufferHeight,h=this._width!==l||this._height!==u;(n||h)&&(this._width=l,this._height=u,this._updateDependencies=!1,Rfe(this),function(e,t){for(var n=e._width,i=e._height,r=e._framebuffers,o=r.length,a=0;a<o;++a){var s=r[a],c=s.textureScale,l=Math.ceil(n*c),u=Math.ceil(i*c),h=Math.min(l,u);s.forcePowerOfTwo&&(d.isPowerOfTwo(h)||(h=d.nextPowerOfTwo(h)),l=h,u=h),s.buffer=new DG({context:t,colorTextures:[new nI({context:t,width:l,height:u,pixelFormat:s.pixelFormat,pixelDatatype:s.pixelDatatype})]}),s.clear=new yN({color:s.clearColor,framebuffer:s.buffer})}}(this,e))}},Tfe.prototype.clear=function(e){for(var t=this._framebuffers,n=0;n<t.length;++n)t[n].clear.execute(e)},Tfe.prototype.getStageByName=function(e){return this._collection.getStageByName(e)},Tfe.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)},Tfe.prototype.getFramebuffer=function(e){var t=this._stageNameToFramebuffer[e];if(Object(o.a)(t))return t.buffer},Tfe.prototype.isDestroyed=function(){return!1},Tfe.prototype.destroy=function(){return Rfe(this),Ks(this)};var Lfe=Tfe,jfe={REINHARD:0,MODIFIED_REINHARD:1,FILMIC:2,ACES:3,validate:function(e){return e===jfe.REINHARD||e===jfe.MODIFIED_REINHARD||e===jfe.FILMIC||e===jfe.ACES}},Ffe=Object.freeze(jfe),Nfe=[];function zfe(){var e=xfe.createFXAAStage(),t=xfe.createAmbientOcclusionStage(),n=xfe.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=xfe.createAutoExposureStage(),this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=Ffe.ACES;var i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;var r=new Lfe(this),a={},s=Nfe;for(s.push(e,t,n,i);s.length>0;){var c=s.pop();a[c.name]=c,c._textureCache=r;var l=c.length;if(Object(o.a)(l))for(var u=0;u<l;++u)s.push(c.get(u))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;var h=this;t.uniforms.randomTexture=function(){return h._randomTexture},this._ao=t,this._bloom=n,this._fxaa=e,this._lastLength=void 0,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=a,this._textureCache=r}function kfe(e){if(e._stagesRemoved){e._stagesRemoved=!1;for(var t=[],n=e._stages,i=n.length,r=0,o=0;r<i;++r){var a=n[r];a&&(a._index=o++,t.push(a))}e._stages=t}}function Bfe(e){for(;Object(o.a)(e.length);)e=e.get(e.length-1);return e.outputTexture}function Hfe(e,t,n,i,r){if(Object(o.a)(e.execute))e.execute(t,n,i,r);else{var a,s=e.length;if(e.inputPreviousStageTexture)for(Hfe(e.get(0),t,n,i,r),a=1;a<s;++a)Hfe(e.get(a),t,Bfe(e.get(a-1)),i,r);else for(a=0;a<s;++a)Hfe(e.get(a),t,n,i,r)}}Object.defineProperties(zfe.prototype,{ready:{get:function(){for(var e=!1,t=this._stages,n=t.length-1;n>=0;--n){var i=t[n];e=e||i.ready&&i.enabled}var r=this._fxaa,o=this._ao,a=this._bloom,s=this._tonemapping;return e=(e=(e=(e=e||r.ready&&r.enabled)||o.ready&&o.enabled)||a.ready&&a.enabled)||s.ready&&s.enabled}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return kfe(this),this._stages.length}},outputTexture:{get:function(){var e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);for(var t=this._stages,n=t.length-1;n>=0;--n){var i=t[n];if(Object(o.a)(i)&&i.ready&&i.enabled)return this.getOutputTexture(i.name)}var r=this._tonemapping;if(r.enabled&&r.ready)return this.getOutputTexture(r.name);var a=this._bloom;if(a.enabled&&a.ready)return this.getOutputTexture(a.name);var s=this._ao;return s.enabled&&s.ready?this.getOutputTexture(s.name):void 0}},hasSelected:{get:function(){for(var e=ol(this._stages);e.length>0;){var t=e.pop();if(Object(o.a)(t)){if(Object(o.a)(t.selected))return!0;var n=t.length;if(Object(o.a)(n))for(var i=0;i<n;++i)e.push(t.get(i))}}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper!==e){if(!Ffe.validate(e))throw new a.a("tonemapper was set to an invalid value.");Object(o.a)(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());var t,n=this._autoExposureEnabled;switch(e){case Ffe.REINHARD:t=xfe.createReinhardTonemappingStage(n);break;case Ffe.MODIFIED_REINHARD:t=xfe.createModifiedReinhardTonemappingStage(n);break;case Ffe.FILMIC:t=xfe.createFilmicTonemappingStage(n);break;default:t=xfe.createAcesTonemappingStage(n)}if(n){var i=this._autoExposure;t.uniforms.autoExposure=function(){return i.outputTexture}}this._tonemapper=e,this._tonemapping=t,Object(o.a)(this._stageNames)&&(this._stageNames[t.name]=t,t._textureCache=this._textureCache),this._textureCacheDirty=!0}}}}),zfe.prototype.add=function(e){i.a.typeOf.object("stage",e);var t=this._stageNames,n=Nfe;for(n.push(e);n.length>0;){var r=n.pop();if(Object(o.a)(t[r.name]))throw new a.a(r.name+" has already been added to the collection or does not have a unique name.");t[r.name]=r,r._textureCache=this._textureCache;var s=r.length;if(Object(o.a)(s))for(var c=0;c<s;++c)n.push(r.get(c))}var l=this._stages;return e._index=l.length,l.push(e),this._textureCacheDirty=!0,e},zfe.prototype.remove=function(e){if(!this.contains(e))return!1;var t=this._stageNames,n=Nfe;for(n.push(e);n.length>0;){var i=n.pop();delete t[i.name];var r=i.length;if(Object(o.a)(r))for(var a=0;a<r;++a)n.push(i.get(a))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0},zfe.prototype.contains=function(e){return Object(o.a)(e)&&Object(o.a)(e._index)&&e._textureCache===this._textureCache},zfe.prototype.get=function(e){kfe(this);var t=this._stages,n=t.length;return i.a.typeOf.number.greaterThanOrEquals("stages length",n,0),i.a.typeOf.number.greaterThanOrEquals("index",e,0),i.a.typeOf.number.lessThan("index",e,n),t[e]},zfe.prototype.removeAll=function(){for(var e=this._stages,t=e.length,n=0;n<t;++n)this.remove(e[n]);e.length=0},zfe.prototype.getStageByName=function(e){return this._stageNames[e]},zfe.prototype.update=function(e,t,n){kfe(this);var i=this._activeStages,r=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;var a,s,c=this._stages,l=r.length=c.length,u=0;for(a=0;a<l;++a)(s=c[a]).ready&&s.enabled&&s._isSupported(e)&&(r[u++]=s);r.length=u;var h=u!==i.length;if(!h)for(a=0;a<u;++a)if(r[a]!==i[a]){h=!0;break}var d=this._ao,f=this._bloom,p=this._autoExposure,m=this._tonemapping,g=this._fxaa;m.enabled=n;var v=d.enabled&&d._isSupported(e),_=f.enabled&&f._isSupported(e),b=m.enabled&&m._isSupported(e),y=g.enabled&&g._isSupported(e);if((h||this._textureCacheDirty||u!==this._lastLength||v!==this._aoEnabled||_!==this._bloomEnabled||b!==this._tonemappingEnabled||y!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._lastLength=u,this._aoEnabled=v,this._bloomEnabled=_,this._tonemappingEnabled=b,this._fxaaEnabled=y,this._textureCacheDirty=!1),Object(o.a)(this._randomTexture)&&!v&&(this._randomTexture.destroy(),this._randomTexture=void 0),!Object(o.a)(this._randomTexture)&&v){l=196608;var w=new Uint8Array(l);for(a=0;a<l;a+=3)w[a]=Math.floor(255*Math.random());this._randomTexture=new nI({context:e,pixelFormat:FC.RGB,pixelDatatype:LC.UNSIGNED_BYTE,source:{arrayBufferView:w,width:256,height:256},sampler:new ZP({wrapS:KP.REPEAT,wrapT:KP.REPEAT,minificationFilter:$P.NEAREST,magnificationFilter:qP.NEAREST})})}for(this._textureCache.update(e),g.update(e,t),d.update(e,t),f.update(e,t),m.update(e,t),this._autoExposureEnabled&&p.update(e,t),l=c.length,a=0;a<l;++a)c[a].update(e,t)},zfe.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)},zfe.prototype.getOutputTexture=function(e){var t=this.getStageByName(e);if(Object(o.a)(t))return Bfe(t)},zfe.prototype.execute=function(e,t,n,i){var r=this._activeStages,o=r.length,a=this._fxaa,s=this._ao,c=this._bloom,l=this._autoExposure,u=this._tonemapping,h=s.enabled&&s._isSupported(e),d=c.enabled&&c._isSupported(e),f=this._autoExposureEnabled,p=u.enabled&&u._isSupported(e),m=a.enabled&&a._isSupported(e);if(m||h||d||p||0!==o){var g=t;h&&s.ready&&(Hfe(s,e,g,n,i),g=Bfe(s)),d&&c.ready&&(Hfe(c,e,g,n,i),g=Bfe(c)),f&&l.ready&&Hfe(l,e,g,n,i),p&&u.ready&&(Hfe(u,e,g,n,i),g=Bfe(u));var v=g;if(o>0){Hfe(r[0],e,g,n,i);for(var _=1;_<o;++_)Hfe(r[_],e,Bfe(r[_-1]),n,i);v=Bfe(r[o-1])}m&&a.ready&&Hfe(a,e,v,n,i)}},zfe.prototype.copy=function(e,t){if(!Object(o.a)(this._copyColorCommand)){var n=this;this._copyColorCommand=e.createViewportQuadCommand(Qce,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)},zfe.prototype.isDestroyed=function(){return!1},zfe.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),Ks(this)};var Vfe=zfe;function Ufe(){a.a.throwInstantiationError()}Ufe.computeDefaultLevelZeroMaximumGeometricError=function(e){return 2*e.ellipsoid.maximumRadius*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))},Object.defineProperties(Ufe.prototype,{quadtree:{get:a.a.throwInstantiationError,set:a.a.throwInstantiationError},ready:{get:a.a.throwInstantiationError},tilingScheme:{get:a.a.throwInstantiationError},errorEvent:{get:a.a.throwInstantiationError}}),Ufe.prototype.update=a.a.throwInstantiationError,Ufe.prototype.beginUpdate=a.a.throwInstantiationError,Ufe.prototype.endUpdate=a.a.throwInstantiationError,Ufe.prototype.getLevelMaximumGeometricError=a.a.throwInstantiationError,Ufe.prototype.loadTile=a.a.throwInstantiationError,Ufe.prototype.computeTileVisibility=a.a.throwInstantiationError,Ufe.prototype.showTileThisFrame=a.a.throwInstantiationError,Ufe.prototype.computeDistanceToTile=a.a.throwInstantiationError,Ufe.prototype.isDestroyed=a.a.throwInstantiationError,Ufe.prototype.destroy=a.a.throwInstantiationError;function Wfe(e){i.a.typeOf.object("scene",e),this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}Wfe.prototype.completeMorph=function(){Object(o.a)(this._completeMorph)&&this._completeMorph()},Wfe.prototype.morphTo2D=function(e,t){Object(o.a)(this._completeMorph)&&this._completeMorph();var n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof Vb,this._previousMode!==IR.SCENE2D&&this._previousMode!==IR.MORPHING&&(this._scene.morphStart.raiseEvent(this,this._previousMode,IR.SCENE2D,!0),n._mode=IR.MORPHING,n.camera._setTransform(Ae.IDENTITY),this._previousMode===IR.COLUMBUS_VIEW?function(e,t){t*=.5;var n=e._scene,i=n.camera,r=O.clone(i.position,Tpe),a=O.clone(i.direction,Spe),s=O.clone(i.up,Dpe),c=O.negate(O.UNIT_Z,Ipe),l=O.clone(O.UNIT_Y,Mpe),u=Ppe;if(t>0)O.clone(O.ZERO,Ppe),u.z=5*n.mapProjection.ellipsoid.maximumRadius;else{O.clone(r,Ppe);var h=Lpe;Ae.multiplyByPoint(Aie.TRANSFORM_2D,r,h.origin),Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,a,h.direction);var d=n.globe;if(Object(o.a)(d)){var f=d.pickWorldCoordinates(h,n,!0,jpe);Object(o.a)(f)&&(Ae.multiplyByPoint(Aie.TRANSFORM_2D_INVERSE,f,u),u.z+=O.distance(r,u))}}var p=Rpe;p.right=.5*u.z,p.left=-p.right,p.top=p.right*(n.drawingBufferHeight/n.drawingBufferWidth),p.bottom=-p.top;var m=Fpe;m.position=u,m.direction=c,m.up=l,m.frustum=p;var g=$pe(m);function v(e,t){e.position.z=t}ope(e,g);var _=n.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){Ape(r,u,e.time,i.position),Ape(a,c,e.time,i.direction),Ape(s,l,e.time,i.up),O.cross(i.direction,i.up,i.right),O.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)},complete:function(){xpe(e,t,m,v,g)}});e._currentTweens.push(_)}(this,e):function(e,t,n){t*=.5;var i=e._scene,r=i.camera,a=zpe;if(t>0)O.clone(O.ZERO,a.position),a.position.z=5*n.maximumRadius,O.negate(O.UNIT_Z,a.direction),O.clone(O.UNIT_Y,a.up);else{n.cartesianToCartographic(r.positionWC,Npe),i.mapProjection.project(Npe,a.position),O.negate(O.UNIT_Z,a.direction),O.clone(O.UNIT_Y,a.up);var s=Hpe;O.clone(a.position2D,s.origin);var c=O.clone(r.directionWC,s.direction),l=n.scaleToGeodeticSurface(r.positionWC,Upe),u=ya.eastNorthUpToFixedFrame(l,n,Vpe);Ae.inverseTransformation(u,u),Ae.multiplyByPointAsVector(u,c,c),Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,c,c);var h=i.globe;if(Object(o.a)(h)){var d=h.pickWorldCoordinates(s,i,!0,Bpe);if(Object(o.a)(d)){var f=O.distance(a.position2D,d);d.x+=f,O.clone(d,a.position2D)}}}function p(e,t){e.position.x=t}Ae.multiplyByPoint(Aie.TRANSFORM_2D,a.position,a.position2D),Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,a.direction,a.direction2D),Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,a.up,a.up2D);var m=a.frustum;m.right=.5*a.position.z,m.left=-m.right,m.top=m.right*(i.drawingBufferHeight/i.drawingBufferWidth),m.bottom=-m.top;var g=kpe;Ae.multiplyByPoint(Aie.TRANSFORM_2D_INVERSE,a.position2D,g.position),O.clone(a.direction,g.direction),O.clone(a.up,g.up),g.frustum=m;var v=$pe(g);ope(e,v),Gpe(e,t,a,(function(){xpe(e,t,a,p,v)}))}(this,e,t),0===e&&Object(o.a)(this._completeMorph)&&this._completeMorph())};var Gfe=new O,qfe=new O,Yfe=new O,$fe=new O,Xfe=new O,Kfe=new O,Qfe=new O,Zfe=new R,Jfe=new Ae,epe=new Zb,tpe=new Vb,npe={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};Wfe.prototype.morphToColumbusView=function(e,t){Object(o.a)(this._completeMorph)&&this._completeMorph();var n=this._scene;if(this._previousMode=n.mode,this._previousMode!==IR.COLUMBUS_VIEW&&this._previousMode!==IR.MORPHING){this._scene.morphStart.raiseEvent(this,this._previousMode,IR.COLUMBUS_VIEW,!0),n.camera._setTransform(Ae.IDENTITY);var i,r=Gfe,a=qfe,s=Yfe;if(e>0)r.x=0,r.y=-1,r.z=1,r=O.multiplyByScalar(O.normalize(r,r),5*t.maximumRadius,r),O.negate(O.normalize(r,a),a),O.cross(O.UNIT_X,a,s);else{var c=n.camera;if(this._previousMode===IR.SCENE2D)O.clone(c.position,r),r.z=c.frustum.right-c.frustum.left,O.negate(O.UNIT_Z,a),O.clone(O.UNIT_Y,s);else{O.clone(c.positionWC,r),O.clone(c.directionWC,a),O.clone(c.upWC,s);var l=t.scaleToGeodeticSurface(r,Qfe),u=ya.eastNorthUpToFixedFrame(l,t,Jfe);Ae.inverseTransformation(u,u),n.mapProjection.project(t.cartesianToCartographic(r,Zfe),r),Ae.multiplyByPointAsVector(u,a,a),Ae.multiplyByPointAsVector(u,s,s)}}this._morphToOrthographic?((i=tpe).width=n.camera.frustum.right-n.camera.frustum.left,i.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):((i=epe).aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,i.fov=d.toRadians(60));var h=npe;h.position=r,h.direction=a,h.up=s,h.frustum=i;var f=function(e){return function(t){var n=t._scene;n._mode=IR.COLUMBUS_VIEW,n.morphTime=IR.getMorphTime(IR.COLUMBUS_VIEW),ape(t);var i=n.camera;(t._previousModeMode!==IR.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,O.clone(e.position,i.position),O.clone(e.direction,i.direction),O.clone(e.up,i.up),O.cross(i.direction,i.up,i.right),O.normalize(i.right,i.right));var r=i.frustum;n.frameState.useLogDepth&&(r.near=.1,r.far=1e10);var a=Object(o.a)(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,IR.COLUMBUS_VIEW,a)}}(h);ope(this,f),this._previousMode===IR.SCENE2D?function(e,t,n,i){t*=.5;var r=e._scene,o=r.camera,a=O.clone(n.position,Ope),s=O.clone(n.direction,Cpe),c=O.clone(n.up,Epe);function l(){o.frustum=n.frustum.clone();var l=O.clone(o.position,bpe),u=O.clone(o.direction,ype),h=O.clone(o.up,wpe);l.z=a.z;var d=r.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){Ape(l,a,e.time,o.position),Ape(u,s,e.time,o.direction),Ape(h,c,e.time,o.up),O.cross(o.direction,o.up,o.right),O.normalize(o.right,o.right)},complete:function(){i(e)}});e._currentTweens.push(d)}r._mode=IR.MORPHING,e._morphToOrthographic?l():Wpe(e,0,n,l)}(this,e,h,f):(h.position2D=Ae.multiplyByPoint(Aie.TRANSFORM_2D,r,$fe),h.direction2D=Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,a,Xfe),h.up2D=Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D,s,Kfe),n._mode=IR.MORPHING,Gpe(this,e,h,f)),0===e&&Object(o.a)(this._completeMorph)&&this._completeMorph()}};var ipe={position:new O,direction:new O,up:new O,frustum:void 0},rpe=new Zb;function ope(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new vS(e._scene.canvas);var n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,RT.LEFT_DOWN),e._morphHandler.setInputAction(n,RT.MIDDLE_DOWN),e._morphHandler.setInputAction(n,RT.RIGHT_DOWN),e._morphHandler.setInputAction(n,RT.WHEEL)}}function ape(e){for(var t=e._currentTweens,n=0;n<t.length;++n)t[n].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}Wfe.prototype.morphTo3D=function(e,t){Object(o.a)(this._completeMorph)&&this._completeMorph();var n=this._scene;if(this._previousMode=n.mode,this._previousMode!==IR.SCENE3D&&this._previousMode!==IR.MORPHING){if(this._scene.morphStart.raiseEvent(this,this._previousMode,IR.SCENE3D,!0),n._mode=IR.MORPHING,n.camera._setTransform(Ae.IDENTITY),this._previousMode===IR.SCENE2D)!function(e,t,n){t/=3;var i,r,o=e._scene,a=o.camera;t>0?(i=ipe,O.fromDegrees(0,0,5*n.maximumRadius,n,i.position),O.negate(i.position,i.direction),O.normalize(i.direction,i.direction),O.clone(O.UNIT_Z,i.up)):(a.position.z=a.frustum.right-a.frustum.left,i=upe(e,n));e._morphToOrthographic?((r=_pe).aspectRatio=o.drawingBufferWidth/o.drawingBufferHeight,r.width=a.frustum.right-a.frustum.left):((r=rpe).aspectRatio=o.drawingBufferWidth/o.drawingBufferHeight,r.fov=d.toRadians(60));i.frustum=r;var s,c=Ype(i);ope(e,c),s=e._morphToOrthographic?function(){vpe(e,t,i,c)}:function(){Wpe(e,t,i,(function(){vpe(e,t,i,c)}))};t>0?(o._mode=IR.SCENE2D,a.flyTo({duration:t,destination:O.fromDegrees(0,0,5*n.maximumRadius,n,Ope),complete:function(){o._mode=IR.MORPHING,s()}})):s()}(this,e,t);else{var i,r;e>0?(i=ipe,O.fromDegrees(0,0,5*t.maximumRadius,t,i.position),O.negate(i.position,i.direction),O.normalize(i.direction,i.direction),O.clone(O.UNIT_Z,i.up)):i=upe(this,t);var a=n.camera;a.frustum instanceof Vb?r=a.frustum.clone():((r=rpe).aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,r.fov=d.toRadians(60)),i.frustum=r;var s=Ype(i);ope(this,s),vpe(this,e,i,s)}0===e&&Object(o.a)(this._completeMorph)&&this._completeMorph()}},Wfe.prototype.isDestroyed=function(){return!1},Wfe.prototype.destroy=function(){return ape(this),Ks(this)};var spe=new R,cpe=new O,lpe=new Ae;function upe(e,t){var n=e._scene,i=n.camera,r=ipe,o=r.position,a=r.direction,s=r.up,c=n.mapProjection.unproject(i.position,spe);t.cartographicToCartesian(c,o);var l=t.scaleToGeodeticSurface(o,cpe),u=ya.eastNorthUpToFixedFrame(l,t,lpe);return Ae.multiplyByPointAsVector(u,i.direction,a),Ae.multiplyByPointAsVector(u,i.up,s),r}var hpe=new O,dpe=new O,fpe=new O,ppe=new O,mpe=new O,gpe=new O;function vpe(e,t,n,i){t*=.5;var r=e._scene,o=r.camera,a=O.clone(o.position,hpe),s=O.clone(o.direction,dpe),c=O.clone(o.up,fpe),l=Ae.multiplyByPoint(Aie.TRANSFORM_2D_INVERSE,n.position,ppe),u=Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D_INVERSE,n.direction,mpe),h=Ae.multiplyByPointAsVector(Aie.TRANSFORM_2D_INVERSE,n.up,gpe);var d=r.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){Ape(a,l,e.time,o.position),Ape(s,u,e.time,o.direction),Ape(c,h,e.time,o.up),O.cross(o.direction,o.up,o.right),O.normalize(o.right,o.right)},complete:function(){qpe(e,r,0,1,t,i)}});e._currentTweens.push(d)}var _pe=new Vb,bpe=new O,ype=new O,wpe=new O,Ope=new O,Cpe=new O,Epe=new O;function Ape(e,t,n,i){return O.lerp(e,t,n,i)}function xpe(e,t,n,i,r){var o=e._scene,a=o.camera;if(!(a.frustum instanceof Vb)){var s=a.frustum.fov,c=.5*d.RADIANS_PER_DEGREE,l=n.position.z*Math.tan(.5*s);a.frustum.far=l/Math.tan(.5*c)+1e7;var u=o.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){a.frustum.fov=d.lerp(s,c,e.time);var t=l/Math.tan(.5*a.frustum.fov);i(a,t)},complete:function(){a.frustum=n.frustum.clone(),r(e)}});e._currentTweens.push(u)}}var Tpe=new O,Spe=new O,Dpe=new O,Ppe=new O,Ipe=new O,Mpe=new O,Rpe=new kb,Lpe=new ti,jpe=new O,Fpe={position:void 0,direction:void 0,up:void 0,frustum:void 0};var Npe=new R,zpe={position:new O,direction:new O,up:new O,position2D:new O,direction2D:new O,up2D:new O,frustum:new kb},kpe={position:new O,direction:new O,up:new O,frustum:void 0},Bpe=new O,Hpe=new ti,Vpe=new Ae,Upe=new O;function Wpe(e,t,n,i){var r=e._scene,o=r.camera,a=o.frustum.right-o.frustum.left;o.frustum=n.frustum.clone();var s=o.frustum.fov,c=.5*d.RADIANS_PER_DEGREE,l=a*Math.tan(.5*s);o.frustum.far=l/Math.tan(.5*c)+1e7,o.frustum.fov=c;var u=r.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){o.frustum.fov=d.lerp(c,s,e.time),o.position.z=l/Math.tan(.5*o.frustum.fov)},complete:function(){i(e)}});e._currentTweens.push(u)}function Gpe(e,t,n,i){var r=e._scene,o=r.camera,a=O.clone(o.position,bpe),s=O.clone(o.direction,ype),c=O.clone(o.up,wpe),l=O.clone(n.position2D,Ope),u=O.clone(n.direction2D,Cpe),h=O.clone(n.up2D,Epe);var d=r.tweens.add({duration:t,easingFunction:rb.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:function(e){Ape(a,l,e.time,o.position),Ape(s,u,e.time,o.direction),Ape(c,h,e.time,o.up),O.cross(o.direction,o.up,o.right),O.normalize(o.right,o.right),o._adjustOrthographicFrustum(!0)},complete:function(){qpe(e,r,1,0,t,i)}});e._currentTweens.push(d)}function qpe(e,t,n,i,r,a){var s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:r,easingFunction:rb.QUARTIC_OUT};Object(o.a)(a)&&(s.complete=function(){a(e)});var c=t.tweens.addProperty(s);e._currentTweens.push(c)}function Ype(e){return function(t){var n=t._scene;n._mode=IR.SCENE3D,n.morphTime=IR.getMorphTime(IR.SCENE3D),ape(t);var i=n.camera;(t._previousMode!==IR.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,O.clone(e.position,i.position),O.clone(e.direction,i.direction),O.clone(e.up,i.up),O.cross(i.direction,i.up,i.right),O.normalize(i.right,i.right),i.frustum=e.frustum.clone());var r=i.frustum;n.frameState.useLogDepth&&(r.near=.1,r.far=1e10);var a=Object(o.a)(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,IR.SCENE3D,a)}}function $pe(e){return function(t){var n=t._scene;n._mode=IR.SCENE2D,n.morphTime=IR.getMorphTime(IR.SCENE2D),ape(t);var i=n.camera;O.clone(e.position,i.position),i.position.z=2*n.mapProjection.ellipsoid.maximumRadius,O.clone(e.direction,i.direction),O.clone(e.up,i.up),O.cross(i.direction,i.up,i.right),O.normalize(i.right,i.right),i.frustum=e.frustum.clone();var r=Object(o.a)(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,IR.SCENE2D,r)}}var Xpe=Wfe;function Kpe(e,t,n,i,r,o,a,s,c,l){this._tweens=e,this._tweenjs=t,this._startObject=Object(Lf.a)(n),this._stopObject=Object(Lf.a)(i),this._duration=r,this._delay=o,this._easingFunction=a,this._update=s,this._complete=c,this.cancel=l,this.needsStart=!0}function Qpe(){this._tweens=[]}Object.defineProperties(Kpe.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}}),Kpe.prototype.cancelTween=function(){this._tweens.remove(this)},Object.defineProperties(Qpe.prototype,{length:{get:function(){return this._tweens.length}}}),Qpe.prototype.add=function(e){if(e=Object(r.a)(e,r.a.EMPTY_OBJECT),!Object(o.a)(e.startObject)||!Object(o.a)(e.stopObject))throw new a.a("options.startObject and options.stopObject are required.");if(!Object(o.a)(e.duration)||e.duration<0)throw new a.a("options.duration is required and must be positive.");if(0===e.duration)return Object(o.a)(e.complete)&&e.complete(),new Kpe(this);var t=e.duration/Ui.SECONDS_PER_MILLISECOND,n=Object(r.a)(e.delay,0),i=n/Ui.SECONDS_PER_MILLISECOND,s=Object(r.a)(e.easingFunction,rb.LINEAR_NONE),c=e.startObject,l=new nb.Tween(c);l.to(Object(Lf.a)(e.stopObject),t),l.delay(i),l.easing(s),Object(o.a)(e.update)&&l.onUpdate((function(){e.update(c)})),l.onComplete(Object(r.a)(e.complete,null)),l.repeat(Object(r.a)(e._repeat,0));var u=new Kpe(this,l,e.startObject,e.stopObject,e.duration,n,s,e.update,e.complete,e.cancel);return this._tweens.push(u),u},Qpe.prototype.addProperty=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).object,n=e.property,i=e.startValue,s=e.stopValue;if(!Object(o.a)(t)||!Object(o.a)(e.property))throw new a.a("options.object and options.property are required.");if(!Object(o.a)(t[n]))throw new a.a("options.object must have the specified property.");if(!Object(o.a)(i)||!Object(o.a)(s))throw new a.a("options.startValue and options.stopValue are required.");return this.add({startObject:{value:i},stopObject:{value:s},duration:Object(r.a)(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:function(e){t[n]=e.value},complete:e.complete,cancel:e.cancel,_repeat:e._repeat})},Qpe.prototype.addAlpha=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).material;if(!Object(o.a)(t))throw new a.a("options.material is required.");var n=[];for(var i in t.uniforms)t.uniforms.hasOwnProperty(i)&&Object(o.a)(t.uniforms[i])&&Object(o.a)(t.uniforms[i].alpha)&&n.push(i);if(0===n.length)throw new a.a("material has no properties with alpha components.");return this.add({startObject:{alpha:Object(r.a)(e.startValue,0)},stopObject:{alpha:Object(r.a)(e.stopValue,1)},duration:Object(r.a)(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:function(e){for(var i=n.length,r=0;r<i;++r)t.uniforms[n[r]].alpha=e.alpha},complete:e.complete,cancel:e.cancel})},Qpe.prototype.addOffsetIncrement=function(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).material;if(!Object(o.a)(t))throw new a.a("material is required.");if(!Object(o.a)(t.uniforms.offset))throw new a.a("material.uniforms must have an offset property.");var n=t.uniforms;return this.addProperty({object:n,property:"offset",startValue:n.offset,stopValue:n.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})},Qpe.prototype.remove=function(e){if(!Object(o.a)(e))return!1;var t=this._tweens.indexOf(e);return-1!==t&&(e.tweenjs.stop(),Object(o.a)(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0)},Qpe.prototype.removeAll=function(){for(var e=this._tweens,t=0;t<e.length;++t){var n=e[t];n.tweenjs.stop(),Object(o.a)(n.cancel)&&n.cancel()}e.length=0},Qpe.prototype.contains=function(e){return Object(o.a)(e)&&-1!==this._tweens.indexOf(e)},Qpe.prototype.get=function(e){if(!Object(o.a)(e))throw new a.a("index is required.");return this._tweens[e]},Qpe.prototype.update=function(e){var t=this._tweens,n=0;for(e=Object(o.a)(e)?e/Ui.SECONDS_PER_MILLISECOND:Sf();n<t.length;){var i=t[n],r=i.tweenjs;i.needsStart?(i.needsStart=!1,r.start(e)):r.update(e)?n++:(r.stop(),t.splice(n,1))}};var Zpe=Qpe;function Jpe(e){if(!Object(o.a)(e))throw new a.a("scene is required.");this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.translateEventTypes=xie.LEFT_DRAG,this.zoomEventTypes=[xie.RIGHT_DRAG,xie.WHEEL,xie.PINCH],this.rotateEventTypes=xie.LEFT_DRAG,this.tiltEventTypes=[xie.MIDDLE_DRAG,xie.PINCH,{eventType:xie.LEFT_DRAG,modifier:AC.CTRL},{eventType:xie.RIGHT_DRAG,modifier:AC.CTRL}],this.lookEventTypes={eventType:xie.LEFT_DRAG,modifier:AC.SHIFT},this.minimumPickingTerrainHeight=15e4,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumCollisionTerrainHeight=15e3,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=75e5,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this._scene=e,this._globe=void 0,this._ellipsoid=void 0,this._aggregator=new Lie(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new Zpe,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new Mt(-1,-1),this._tiltCenter=new O,this._rotateMousePosition=new Mt(-1,-1),this._rotateStartPosition=new O,this._strafeStartPosition=new O,this._strafeMousePosition=new Mt,this._strafeEndMousePosition=new Mt,this._zoomMouseStart=new Mt(-1,-1),this._zoomWorldPosition=new O,this._useZoomWorldPosition=!1,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;var t=e.mapProjection;this._maxCoord=t.project(new R(Math.PI,d.PI_OVER_TWO)),this._zoomFactor=5,this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=2e-4,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function eme(e,t,n,i,r,a,s){var c=a[s];Object(o.a)(c)||(c=a[s]={startPosition:new Mt,endPosition:new Mt,motion:new Mt,inertiaEnabled:!0});var l,u=e.getButtonPressTime(t,n),h=e.getButtonReleaseTime(t,n),f=u&&h&&(h.getTime()-u.getTime())/1e3,p=new Date,m=h&&(p.getTime()-h.getTime())/1e3;if(u&&h&&f<.4){var g=function(e,t){if(e<0)return 0;var n=25*(1-t);return Math.exp(-n*e)}(m,i),v=e.getLastMovement(t,n);if(!Object(o.a)(v)||(l=v,Mt.equalsEpsilon(l.startPosition,l.endPosition,d.EPSILON14))||!c.inertiaEnabled)return;if(c.motion.x=.5*(v.endPosition.x-v.startPosition.x),c.motion.y=.5*(v.endPosition.y-v.startPosition.y),c.startPosition=Mt.clone(v.startPosition,c.startPosition),c.endPosition=Mt.multiplyByScalar(c.motion,g,c.endPosition),c.endPosition=Mt.add(c.startPosition,c.endPosition,c.endPosition),isNaN(c.endPosition.x)||isNaN(c.endPosition.y)||Mt.distance(c.startPosition,c.endPosition)<.5)return;if(!e.isButtonDown(t,n))r(a,e.getStartMousePosition(t,n),c)}}function tme(e,t){if(Object(o.a)(t)){var n=e[t];Object(o.a)(n)&&(n.inertiaEnabled=!0);var i=e._inertiaDisablers[t];if(Object(o.a)(i))for(var r=i.length,a=0;a<r;++a)n=e[i[a]],Object(o.a)(n)&&(n.inertiaEnabled=!1)}}var nme=[];function ime(e,t,n,i,r,a){if(Object(o.a)(n)){var s=e._aggregator;Array.isArray(n)||(nme[0]=n,n=nme);for(var c=n.length,l=0;l<c;++l){var u=n[l],h=Object(o.a)(u.eventType)?u.eventType:u,d=u.modifier,f=s.isMoving(h,d)&&s.getMovement(h,d),p=s.getStartMousePosition(h,d);e.enableInputs&&t&&(f?(i(e,p,f),tme(e,a)):r<1&&eme(s,h,d,r,i,e,a))}}}var rme=new ti,ome=new O,ame=new Mt,sme=new O,cme=new Mt,lme=new O,ume=new O,hme=new O,dme=new O,fme=new O,pme=new O,mme=new O,gme=new O,vme=new O,_me=new O,bme=new O,yme=new O,wme=new O,Ome=new O,Cme=new O,Eme=new O,Ame=new O,xme=new O,Tme={orientation:new yr};function Sme(e,t,n,i,r,a){var s=1;Object(o.a)(a)&&(s=d.clamp(Math.abs(a),.25,1));var c=e.minimumZoomDistance*s,l=e.maximumZoomDistance,u=i*(r-c);u=d.clamp(u,e._minimumZoomRate,e._maximumZoomRate);var h=(n.endPosition.y-n.startPosition.y)/e._scene.canvas.clientHeight,f=u*(h=Math.min(h,e.maximumMovementRatio));if(e.enableCollisionDetection||0===e.minimumZoomDistance||!Object(o.a)(e._globe)){if(f>0&&Math.abs(r-c)<1)return;if(f<0&&Math.abs(r-l)<1)return;r-f<c?f=r-c-1:r-f>l&&(f=r-l)}var p=e._scene,m=p.camera,g=p.mode,v=Tme.orientation;if(v.heading=m.heading,v.pitch=m.pitch,v.roll=m.roll,m.frustum instanceof Vb)Math.abs(f)>0&&(m.zoomIn(f),m._adjustOrthographicFrustum());else{var _,b=Mt.equals(t,e._zoomMouseStart),y=e._zoomingOnVector,w=e._rotatingZoom;if(b||(e._zoomMouseStart=Mt.clone(t,e._zoomMouseStart),Object(o.a)(e._globe)&&(g===IR.SCENE2D?(_=m.getPickRay(t,rme).origin,_=O.fromElements(_.y,_.z,_.x)):_=Bme(e,t,ome)),Object(o.a)(_)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=O.clone(_,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,y=e._zoomingOnVector=!1,w=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),e._useZoomWorldPosition){var C=g===IR.COLUMBUS_VIEW;if(m.positionCartographic.height<2e6&&(w=!0),!b||w){if(g===IR.SCENE2D){var E=e._zoomWorldPosition,A=m.position;if(!O.equals(E,A)&&m.positionCartographic.height<2*e._maxCoord.x){var x=m.position.x,T=O.subtract(E,A,sme);O.normalize(T,T);var S=O.distance(E,A)*f/(.5*m.getMagnitude());m.move(T,.5*S),(m.position.x<0&&x>0||m.position.x>0&&x<0)&&(_=m.getPickRay(t,rme).origin,_=O.fromElements(_.y,_.z,_.x),e._zoomWorldPosition=O.clone(_,e._zoomWorldPosition))}}else if(g===IR.SCENE3D){var D=O.normalize(m.position,fme);if(e._cameraUnderground||e._zoomingUnderground||m.positionCartographic.height<3e3&&Math.abs(O.dot(m.direction,D))<.6)C=!0;else{var P=p.canvas,I=cme;I.x=P.clientWidth/2,I.y=P.clientHeight/2;var M=Bme(e,I,lme);if(Object(o.a)(M)&&m.positionCartographic.height<1e6){var R=mme;O.clone(m.position,R);var L=e._zoomWorldPosition,j=pme;if(j=O.normalize(L,j),O.dot(j,D)<0)return;var F=Cme,N=_me;O.clone(m.direction,N),O.add(R,O.multiplyByScalar(N,1e3,Eme),F);var z=bme,k=yme;O.subtract(L,R,z),O.normalize(z,k);var B=O.dot(D,k);if(B>=0)return void(e._zoomMouseStart.x=-1);var H=Math.acos(-B),V=O.magnitude(R),U=O.magnitude(L),W=V-f,G=O.magnitude(z),q=Math.asin(d.clamp(G/U*Math.sin(H),-1,1))-Math.asin(d.clamp(W/U*Math.sin(H),-1,1))+H,Y=gme;O.normalize(R,Y);var $=vme;$=O.cross(k,Y,$),$=O.normalize($,$),O.normalize(O.cross(Y,$,Eme),N),O.multiplyByScalar(O.normalize(F,Eme),O.magnitude(F)-f,F),O.normalize(R,R),O.multiplyByScalar(R,W,R);var X=wme;O.multiplyByScalar(O.add(O.multiplyByScalar(Y,Math.cos(q)-1,Ame),O.multiplyByScalar(N,Math.sin(q),xme),Eme),W,X),O.add(R,X,R),O.normalize(F,Y),O.normalize(O.cross(Y,$,Eme),N);var K=Ome;return O.multiplyByScalar(O.add(O.multiplyByScalar(Y,Math.cos(q)-1,Ame),O.multiplyByScalar(N,Math.sin(q),xme),Eme),O.magnitude(F),K),O.add(F,K,F),O.clone(R,m.position),O.normalize(O.subtract(F,R,Eme),m.direction),O.clone(m.direction,m.direction),O.cross(m.direction,m.up,m.right),O.cross(m.right,m.direction,m.up),void m.setView(Tme)}if(Object(o.a)(M)){var Q=O.normalize(M,ume),Z=O.normalize(e._zoomWorldPosition,hme),J=O.dot(Z,Q);if(J>0&&J<1){var ee=d.acosClamped(J),te=O.cross(Z,Q,dme),ne=f/(Math.abs(ee)>d.toRadians(20)?.75*m.positionCartographic.height:m.positionCartographic.height-f);m.rotate(te,ee*ne)}}else C=!0}}e._rotatingZoom=!C}if(!b&&C||y){var ie=bq.wgs84ToWindowCoordinates(p,e._zoomWorldPosition,ame),re=(g!==IR.COLUMBUS_VIEW&&Mt.equals(t,e._zoomMouseStart)&&Object(o.a)(ie)?m.getPickRay(ie,rme):m.getPickRay(t,rme)).direction;g!==IR.COLUMBUS_VIEW&&g!==IR.SCENE2D||O.fromElements(re.y,re.z,re.x,re),m.move(re,f),e._zoomingOnVector=!0}else m.zoomIn(f);e._cameraUnderground||m.setView(Tme)}else m.zoomIn(f)}}var Dme=new ti,Pme=new ti,Ime=new O;function Mme(e,t,n){var i=e._scene.camera,r=i.getPickRay(n.startPosition,Dme).origin,o=i.getPickRay(n.endPosition,Pme).origin;r=O.fromElements(r.y,r.z,r.x,r),o=O.fromElements(o.y,o.z,o.x,o);var a=O.subtract(r,o,Ime),s=O.magnitude(a);s>0&&(O.normalize(a,a),i.move(a,s))}function Rme(e,t,n){Object(o.a)(n.distance)&&(n=n.distance);var i=e._scene.camera;Sme(e,t,n,e._zoomFactor,i.getMagnitude())}var Lme=new Mt,jme=new Mt;function Fme(e,t,n){if(Object(o.a)(n.angleAndHeight))!function(e,t,n){var i=e._rotateFactor*e._rotateRateRangeAdjustment;i>e._maximumRotateRate&&(i=e._maximumRotateRate);i<e._minimumRotateRate&&(i=e._minimumRotateRate);var r=e._scene,o=r.camera,a=r.canvas,s=(n.endPosition.x-n.startPosition.x)/a.clientWidth;s=Math.min(s,e.maximumMovementRatio);var c=i*s*Math.PI*4;o.twistRight(c)}(e,0,n.angleAndHeight);else{var i=e._scene,r=i.camera,a=i.canvas,s=a.clientWidth,c=a.clientHeight,l=Lme;l.x=2/s*n.startPosition.x-1,l.y=2/c*(c-n.startPosition.y)-1,l=Mt.normalize(l,l);var u=jme;u.x=2/s*n.endPosition.x-1,u.y=2/c*(c-n.endPosition.y)-1,u=Mt.normalize(u,u);var h=d.acosClamped(l.x);l.y<0&&(h=d.TWO_PI-h);var f=d.acosClamped(u.x);u.y<0&&(f=d.TWO_PI-f);var p=f-h;r.twistRight(p)}}var Nme=new ti,zme=new O,kme=new O;function Bme(e,t,n){var i=e._scene,r=e._globe,a=i.camera;if(Object(o.a)(r)){var s,c=!e._cameraUnderground;i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,zme));var l=a.getPickRay(t,Nme),u=r.pickWorldCoordinates(l,i,c,kme);return(Object(o.a)(s)?O.distance(s,a.positionWC):Number.POSITIVE_INFINITY)<(Object(o.a)(u)?O.distance(u,a.positionWC):Number.POSITIVE_INFINITY)?O.clone(s,n):O.clone(u,n)}}var Hme=new R;function Vme(e){var t=e._ellipsoid,n=e._scene,i=n.camera,a=0;if(n.mode===IR.SCENE3D){var s=t.cartesianToCartographic(i.position,Hme);Object(o.a)(s)&&(a=s.height)}else a=i.position.z;var c=Object(r.a)(e._scene.globeHeight,0);return Math.abs(c-a)}var Ume=new O;function Wme(e,t){var n=t.origin,i=t.direction,r=Vme(e),o=O.normalize(n,Ume),a=Math.abs(O.dot(o,i));return r*(a=2*Math.max(a,.5))}function Gme(e,t,n,i){var r=O.distance(t.origin,n),o=Vme(e);return r>d.clamp(5*o,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance)&&(r=Math.min(r,o/5),r=Math.max(r,100)),ti.getPoint(t,r,i)}function qme(e,t,n,i){var r;return Object(o.a)(n)?(r=O.distance(t.origin,n))>e._maximumUndergroundPickDistance&&(r=Vme(e)):r=Vme(e),ti.getPoint(t,r,i)}var Yme=new Mt;function $me(e,t){var n=t.endPosition,i=Mt.subtract(t.endPosition,t.startPosition,Yme),r=e._strafeEndMousePosition;Mt.add(r,i,r),t.endPosition=r,Dge(e,t,e._strafeStartPosition),t.endPosition=n}var Xme=new ti,Kme=new ti,Qme=new O,Zme=new O,Jme=new O,ege=new O,tge=new Fi(O.UNIT_X,0),nge=new Mt,ige=new Mt;function rge(e,t,n){if(O.equals(t,e._translateMousePosition)||(e._looking=!1),O.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking)mve(e,t,n);else if(e._strafing)$me(e,n);else{var i,r=e._scene.camera,a=e._cameraUnderground,s=Mt.clone(n.startPosition,nge),c=Mt.clone(n.endPosition,ige),l=r.getPickRay(s,Xme),u=O.clone(O.ZERO,ege),h=O.UNIT_X;if(r.position.z<e._minimumPickingTerrainHeight&&(i=Bme(e,s,Qme),Object(o.a)(i)&&(u.x=i.x)),a||u.x>r.position.z&&Object(o.a)(i)){var f=i;return a&&(f=qme(e,l,i,Qme)),Mt.clone(t,e._strafeMousePosition),Mt.clone(t,e._strafeEndMousePosition),O.clone(f,e._strafeStartPosition),e._strafing=!0,void Dge(e,n,e._strafeStartPosition)}var p=Fi.fromPointNormal(u,h,tge);l=r.getPickRay(s,Xme);var m=Ii.rayPlane(l,p,Qme),g=r.getPickRay(c,Kme),v=Ii.rayPlane(g,p,Zme);if(!Object(o.a)(m)||!Object(o.a)(v))return e._looking=!0,mve(e,t,n),void Mt.clone(t,e._translateMousePosition);var _=O.subtract(m,v,Jme),b=_.x;_.x=_.y,_.y=_.z,_.z=b;var y=O.magnitude(_);y>d.EPSILON6&&(O.normalize(_,_),r.move(_,y))}}var oge=new Mt,age=new ti,sge=new O,cge=new O,lge=new Ae,uge=new Ae,hge=new O,dge=new Fi(O.UNIT_X,0),fge=new O,pge=new R,mge=new Ae,gge=new No,vge=new oe,_ge=new O;function bge(e,t,n){if(Object(o.a)(n.angleAndHeight)&&(n=n.angleAndHeight),Mt.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking)mve(e,t,n);else{var i=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(i.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,function(e,t,n){var i=e._scene,r=i.camera,a=i.canvas,s=oge;s.x=a.clientWidth/2,s.y=a.clientHeight/2;var c,l=r.getPickRay(s,age),u=O.UNIT_X,h=l.origin,f=l.direction,p=O.dot(u,f);Math.abs(p)>d.EPSILON6&&(c=-O.dot(u,h)/p);if(!Object(o.a)(c)||c<=0)return e._looking=!0,mve(e,t,n),void Mt.clone(t,e._tiltCenterMousePosition);var m=O.multiplyByScalar(f,c,sge);O.add(h,m,m);var g=i.mapProjection,v=g.ellipsoid;O.fromElements(m.y,m.z,m.x,m);var _=g.unproject(m,pge);v.cartographicToCartesian(_,m);var b=ya.eastNorthUpToFixedFrame(m,v,lge),y=e._globe,w=e._ellipsoid;e._globe=void 0,e._ellipsoid=W.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;var C=Ae.clone(r.transform,mge);r._setTransform(b),Nge(e,t,n,O.UNIT_Z),r._setTransform(C),e._globe=y,e._ellipsoid=w;var E=w.maximumRadius;e._rotateFactor=1/E,e._rotateRateRangeAdjustment=E}(e,t,n)):function(e,t,n){var i,r,a=e._scene,s=a.camera,c=e._cameraUnderground,l=O.UNIT_X;if(Mt.equals(t,e._tiltCenterMousePosition))i=O.clone(e._tiltCenter,sge);else{if(s.position.z<e._minimumPickingTerrainHeight&&(i=Bme(e,t,sge)),!Object(o.a)(i)){var u,h=(r=s.getPickRay(t,age)).origin,f=r.direction,p=O.dot(l,f);if(Math.abs(p)>d.EPSILON6&&(u=-O.dot(l,h)/p),!Object(o.a)(u)||u<=0)return e._looking=!0,mve(e,t,n),void Mt.clone(t,e._tiltCenterMousePosition);i=O.multiplyByScalar(f,u,sge),O.add(h,i,i)}c&&(Object(o.a)(r)||(r=s.getPickRay(t,age)),Gme(e,r,i,i)),Mt.clone(t,e._tiltCenterMousePosition),O.clone(i,e._tiltCenter)}var m=a.canvas,g=oge;g.x=m.clientWidth/2,g.y=e._tiltCenterMousePosition.y,r=s.getPickRay(g,age);var v=O.clone(O.ZERO,hge);v.x=i.x;var _=Fi.fromPointNormal(v,l,dge),b=Ii.rayPlane(r,_,cge),y=s._projection,w=y.ellipsoid;O.fromElements(i.y,i.z,i.x,i);var C=y.unproject(i,pge);w.cartographicToCartesian(C,i);var E,A=ya.eastNorthUpToFixedFrame(i,w,lge);Object(o.a)(b)?(O.fromElements(b.y,b.z,b.x,b),C=y.unproject(b,pge),w.cartographicToCartesian(C,b),E=ya.eastNorthUpToFixedFrame(b,w,uge)):E=A;var x=e._globe,T=e._ellipsoid;e._globe=void 0,e._ellipsoid=W.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;var S=O.UNIT_Z,D=Ae.clone(s.transform,mge);s._setTransform(A);var P=O.cross(O.UNIT_Z,O.normalize(s.position,fge),fge),I=O.dot(s.right,P);if(Nge(e,t,n,S,!1,!0),s._setTransform(E),I<0){var M=n.startPosition.y-n.endPosition.y;(c&&M<0||!c&&M>0)&&(S=void 0);var R=s.constrainedAxis;s.constrainedAxis=void 0,Nge(e,t,n,S,!0,!1),s.constrainedAxis=R}else Nge(e,t,n,S,!0,!1);if(Object(o.a)(s.constrainedAxis)){var L=O.cross(s.direction,s.constrainedAxis,_ge);O.equalsEpsilon(L,O.ZERO,d.EPSILON6)||(O.dot(L,s.right)<0&&O.negate(L,L),O.cross(L,s.direction,s.up),O.cross(s.direction,s.up,s.right),O.normalize(s.up,s.up),O.normalize(s.right,s.right))}s._setTransform(D),e._globe=x,e._ellipsoid=T;var j=T.maximumRadius;e._rotateFactor=1/j,e._rotateRateRangeAdjustment=j;var F=O.clone(s.positionWC,fge);e.enableCollisionDetection&&_ve(e);if(!O.equals(s.positionWC,F)){s._setTransform(E),s.worldToCameraCoordinatesPoint(F,F);var N=O.magnitudeSquared(F);O.magnitudeSquared(s.position)>N&&(O.normalize(s.position,s.position),O.multiplyByScalar(s.position,Math.sqrt(N),s.position));var z=O.angleBetween(F,s.position),k=O.cross(F,s.position,F);O.normalize(k,k);var B=No.fromAxisAngle(k,z,gge),H=oe.fromQuaternion(B,vge);oe.multiplyByVector(H,s.direction,s.direction),oe.multiplyByVector(H,s.up,s.up),O.cross(s.direction,s.up,s.right),O.cross(s.right,s.direction,s.up),s._setTransform(D)}}(e,t,n)}}var yge=new Mt,wge=new ti,Oge=new O;function Cge(e,t,n){Object(o.a)(n.distance)&&(n=n.distance);var i,r=e._scene,a=r.camera,s=r.canvas,c=e._cameraUnderground;c?i=t:((i=yge).x=s.clientWidth/2,i.y=s.clientHeight/2);var l,u,h=a.getPickRay(i,wge),d=h.origin,f=h.direction,p=a.position.z;if(p<e._minimumPickingTerrainHeight&&(l=Bme(e,i,Oge)),Object(o.a)(l)&&(u=O.distance(d,l)),c){var m=Wme(e,h);u=Object(o.a)(u)?Math.min(u,m):m}if(!Object(o.a)(u)){var g=O.UNIT_X;u=-O.dot(g,d)/O.dot(g,f)}Sme(e,t,n,e._zoomFactor,u)}var Ege=new ti,Age=new Fi(O.UNIT_X,0),xge=new O,Tge=new O,Sge=new O;function Dge(e,t,n){var i=e._scene,r=i.camera,a=r.getPickRay(t.endPosition,Ege),s=O.clone(r.direction,Tge);i.mode===IR.COLUMBUS_VIEW&&O.fromElements(s.z,s.x,s.y,s);var c=Fi.fromPointNormal(n,s,Age),l=Ii.rayPlane(a,c,xge);Object(o.a)(l)&&(s=O.subtract(n,l,s),i.mode===IR.COLUMBUS_VIEW&&O.fromElements(s.y,s.z,s.x,s),O.add(r.position,s,r.position))}var Pge=new O,Ige=new R,Mge=new O,Rge=new W,Lge=new O,jge=new O;function Fge(e,t,n){var i=e._scene.camera,r=e._cameraUnderground,a=e._ellipsoid;if(Ae.equals(i.transform,Ae.IDENTITY)){var s,c,l=a.geodeticSurfaceNormal(i.position,Lge);if(Mt.equals(t,e._rotateMousePosition))if(e._looking)mve(e,t,n,l);else if(e._rotating)Nge(e,t,n);else if(e._strafing)$me(e,n);else{if(O.magnitude(i.position)<O.magnitude(e._rotateStartPosition))return;s=O.magnitude(e._rotateStartPosition),(c=Mge).x=c.y=c.z=s,qge(e,t,n,a=W.fromCartesian3(c,Rge))}else{e._looking=!1,e._rotating=!1,e._strafing=!1;var u=a.cartesianToCartographic(i.positionWC,Ige).height,h=e._globe;if(Object(o.a)(h)&&u<e._minimumPickingTerrainHeight){var d=Bme(e,n.startPosition,Sge);if(Object(o.a)(d)){var f=!1,p=i.getPickRay(n.startPosition,Nme);if(r)f=!0,qme(e,p,d,d);else{var m=a.geodeticSurfaceNormal(d,jge);f=!!(Math.abs(O.dot(p.direction,m))<.05)||O.magnitude(i.position)<O.magnitude(d)}f?(Mt.clone(t,e._strafeEndMousePosition),O.clone(d,e._strafeStartPosition),e._strafing=!0,Dge(e,n,e._strafeStartPosition)):(s=O.magnitude(d),(c=Mge).x=c.y=c.z=s,qge(e,t,n,a=W.fromCartesian3(c,Rge)),O.clone(d,e._rotateStartPosition))}else e._looking=!0,mve(e,t,n,l)}else Object(o.a)(i.pickEllipsoid(n.startPosition,e._ellipsoid,Pge))?(qge(e,t,n,e._ellipsoid),O.clone(Pge,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,Nge(e,t,n)):(e._looking=!0,mve(e,t,n,l));Mt.clone(t,e._rotateMousePosition)}}else Nge(e,t,n)}function Nge(e,t,n,i,a,s){a=Object(r.a)(a,!1),s=Object(r.a)(s,!1);var c=e._scene,l=c.camera,u=c.canvas,h=l.constrainedAxis;Object(o.a)(i)&&(l.constrainedAxis=i);var d=O.magnitude(l.position),f=e._rotateFactor*(d-e._rotateRateRangeAdjustment);f>e._maximumRotateRate&&(f=e._maximumRotateRate),f<e._minimumRotateRate&&(f=e._minimumRotateRate);var p=(n.startPosition.x-n.endPosition.x)/u.clientWidth,m=(n.startPosition.y-n.endPosition.y)/u.clientHeight;p=Math.min(p,e.maximumMovementRatio),m=Math.min(m,e.maximumMovementRatio);var g=f*p*Math.PI*2,v=f*m*Math.PI;a||l.rotateRight(g),s||l.rotateUp(v),l.constrainedAxis=h}var zge=he.clone(he.UNIT_W),kge=he.clone(he.UNIT_W),Bge=new O,Hge=new O,Vge=new O,Uge=new O,Wge=new Mt,Gge=new Mt;function qge(e,t,n,i){var r=e._scene.camera,a=Mt.clone(n.startPosition,Wge),s=Mt.clone(n.endPosition,Gge),c=r.pickEllipsoid(a,i,zge),l=r.pickEllipsoid(s,i,kge);if(!Object(o.a)(c)||!Object(o.a)(l))return e._rotating=!0,void Nge(e,0,n);if(c=r.worldToCameraCoordinates(c,c),l=r.worldToCameraCoordinates(l,l),Object(o.a)(r.constrainedAxis)){var u=r.constrainedAxis,h=O.mostOrthogonalAxis(u,Bge);O.cross(h,u,h),O.normalize(h,h);var f=O.cross(u,h,Hge),p=O.magnitude(c),m=O.dot(u,c),g=Math.acos(m/p),v=O.multiplyByScalar(u,m,Vge);O.subtract(c,v,v),O.normalize(v,v);var _=O.magnitude(l),b=O.dot(u,l),y=Math.acos(b/_),w=O.multiplyByScalar(u,b,Uge);O.subtract(l,w,w),O.normalize(w,w);var C=Math.acos(O.dot(v,h));O.dot(v,f)<0&&(C=d.TWO_PI-C);var E=Math.acos(O.dot(w,h));O.dot(w,f)<0&&(E=d.TWO_PI-E);var A,x=C-E;A=O.equalsEpsilon(u,r.position,d.EPSILON2)?r.right:O.cross(u,r.position,Bge);var T,S=O.cross(u,A,Bge),D=O.dot(S,O.subtract(c,u,Hge)),P=O.dot(S,O.subtract(l,u,Hge));T=D>0&&P>0?y-g:D>0&&P<=0?O.dot(r.position,u)>0?-g-y:g+y:g-y,r.rotateRight(x),r.rotateUp(T)}else{O.normalize(c,c),O.normalize(l,l);var I=O.dot(c,l),M=O.cross(c,l,Bge);if(I<1&&!O.equalsEpsilon(M,O.ZERO,d.EPSILON14)){var R=Math.acos(I);r.rotate(M,R)}}}var Yge=new O,$ge=new R;function Xge(e,t,n){Object(o.a)(n.distance)&&(n=n.distance);var i,r=e._ellipsoid,a=e._scene,s=a.camera,c=a.canvas,l=e._cameraUnderground;l?i=t:((i=yge).x=c.clientWidth/2,i.y=c.clientHeight/2);var u,h,d=s.getPickRay(i,wge),f=r.cartesianToCartographic(s.position,$ge).height;if(f<e._minimumPickingTerrainHeight&&(u=Bme(e,i,Oge)),Object(o.a)(u)&&(h=O.distance(d.origin,u)),l){var p=Wme(e,d);h=Object(o.a)(h)?Math.min(h,p):p}Object(o.a)(h)||(h=f);var m=O.normalize(s.position,Yge);Sme(e,t,n,e._zoomFactor,h,O.dot(m,s.direction))}var Kge=new Mt,Qge=new ti,Zge=new O,Jge=new O,eve=new Ae,tve=new Ae,nve=new Ae,ive=new No,rve=new oe,ove=new R,ave=new O;function sve(e,t,n){var i=e._scene.camera;if(Ae.equals(i.transform,Ae.IDENTITY))if(Object(o.a)(n.angleAndHeight)&&(n=n.angleAndHeight),Mt.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){var r=e._ellipsoid.geodeticSurfaceNormal(i.position,ave);mve(e,t,n,r)}else{var a=e._ellipsoid.cartesianToCartographic(i.position,ove);e._tiltOnEllipsoid||a.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,function(e,t,n){var i=e._ellipsoid,r=e._scene,a=r.camera,s=.25*e.minimumZoomDistance,c=i.cartesianToCartographic(a.positionWC,cve).height;if(c-s-1<d.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;var l=r.canvas,u=Kge;u.x=l.clientWidth/2,u.y=l.clientHeight/2;var h,f=a.getPickRay(u,Qge),p=Ii.rayEllipsoid(f,i);if(Object(o.a)(p))h=ti.getPoint(f,p.start,Zge);else{if(!(c>e._minimumTrackBallHeight)){e._looking=!0;var m=e._ellipsoid.geodeticSurfaceNormal(a.position,ave);return mve(e,t,n,m),void Mt.clone(t,e._tiltCenterMousePosition)}var g=Ii.grazingAltitudeLocation(f,i);if(!Object(o.a)(g))return;var v=i.cartesianToCartographic(g,ove);v.height=0,h=i.cartographicToCartesian(v,Zge)}var _=ya.eastNorthUpToFixedFrame(h,i,eve),b=e._globe,y=e._ellipsoid;e._globe=void 0,e._ellipsoid=W.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;var w=Ae.clone(a.transform,nve);a._setTransform(_),Nge(e,0,n,O.UNIT_Z),a._setTransform(w),e._globe=b,e._ellipsoid=y;var C=y.maximumRadius;e._rotateFactor=1/C,e._rotateRateRangeAdjustment=C}(e,t,n)):function(e,t,n){var i,r,a,s=e._ellipsoid,c=e._scene,l=c.camera,u=e._cameraUnderground;if(Mt.equals(t,e._tiltCenterMousePosition))i=O.clone(e._tiltCenter,Zge);else{if(i=Bme(e,t,Zge),!Object(o.a)(i)){if(r=l.getPickRay(t,Qge),a=Ii.rayEllipsoid(r,s),!Object(o.a)(a)){if(s.cartesianToCartographic(l.position,ove).height<=e._minimumTrackBallHeight){e._looking=!0;var h=e._ellipsoid.geodeticSurfaceNormal(l.position,ave);mve(e,t,n,h),Mt.clone(t,e._tiltCenterMousePosition)}return}i=ti.getPoint(r,a.start,Zge)}u&&(Object(o.a)(r)||(r=l.getPickRay(t,Qge)),Gme(e,r,i,i)),Mt.clone(t,e._tiltCenterMousePosition),O.clone(i,e._tiltCenter)}var f=c.canvas,p=Kge;p.x=f.clientWidth/2,p.y=e._tiltCenterMousePosition.y,r=l.getPickRay(p,Qge);var m=O.magnitude(i),g=O.fromElements(m,m,m,Mge),v=W.fromCartesian3(g,Rge);if(a=Ii.rayEllipsoid(r,v),!Object(o.a)(a))return;var _=O.magnitude(r.origin)>m?a.start:a.stop,b=ti.getPoint(r,_,Jge),y=ya.eastNorthUpToFixedFrame(i,s,eve),w=ya.eastNorthUpToFixedFrame(b,v,tve),C=e._globe,E=e._ellipsoid;e._globe=void 0,e._ellipsoid=W.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;var A=O.UNIT_Z,x=Ae.clone(l.transform,nve);l._setTransform(y);var T=O.cross(b,l.positionWC,_ge),S=O.dot(l.rightWC,T);if(Nge(e,0,n,A,!1,!0),l._setTransform(w),S<0){var D=n.startPosition.y-n.endPosition.y;(u&&D<0||!u&&D>0)&&(A=void 0);var P=l.constrainedAxis;l.constrainedAxis=void 0,Nge(e,0,n,A,!0,!1),l.constrainedAxis=P}else Nge(e,0,n,A,!0,!1);if(Object(o.a)(l.constrainedAxis)){var I=O.cross(l.direction,l.constrainedAxis,_ge);O.equalsEpsilon(I,O.ZERO,d.EPSILON6)||(O.dot(I,l.right)<0&&O.negate(I,I),O.cross(I,l.direction,l.up),O.cross(l.direction,l.up,l.right),O.normalize(l.up,l.up),O.normalize(l.right,l.right))}l._setTransform(x),e._globe=C,e._ellipsoid=E;var M=E.maximumRadius;e._rotateFactor=1/M,e._rotateRateRangeAdjustment=M;var R=O.clone(l.positionWC,_ge);e.enableCollisionDetection&&_ve(e);if(!O.equals(l.positionWC,R)){l._setTransform(w),l.worldToCameraCoordinatesPoint(R,R);var L=O.magnitudeSquared(R);O.magnitudeSquared(l.position)>L&&(O.normalize(l.position,l.position),O.multiplyByScalar(l.position,Math.sqrt(L),l.position));var j=O.angleBetween(R,l.position),F=O.cross(R,l.position,R);O.normalize(F,F);var N=No.fromAxisAngle(F,j,ive),z=oe.fromQuaternion(N,rve);oe.multiplyByVector(z,l.direction,l.direction),oe.multiplyByVector(z,l.up,l.up),O.cross(l.direction,l.up,l.right),O.cross(l.right,l.direction,l.up),l._setTransform(x)}}(e,t,n)}}var cve=new R;var lve=new Mt,uve=new Mt,hve=new ti,dve=new ti,fve=new O,pve=new O;function mve(e,t,n,i){var a=e._scene.camera,s=lve;s.x=n.startPosition.x,s.y=0;var c=uve;c.x=n.endPosition.x,c.y=0;var l,u,h=a.getPickRay(s,hve),f=a.getPickRay(c,dve),p=0;a.frustum instanceof Vb?(l=h.origin,u=f.origin,O.add(a.direction,l,l),O.add(a.direction,u,u),O.subtract(l,a.position,l),O.subtract(u,a.position,u),O.normalize(l,l),O.normalize(u,u)):(l=h.direction,u=f.direction);var m=O.dot(l,u);m<1&&(p=Math.acos(m)),p=n.startPosition.x>n.endPosition.x?-p:p;var g=e._horizontalRotationAxis;if(Object(o.a)(i)?a.look(i,-p):Object(o.a)(g)?a.look(g,-p):a.lookLeft(p),s.x=0,s.y=n.startPosition.y,c.x=0,c.y=n.endPosition.y,h=a.getPickRay(s,hve),f=a.getPickRay(c,dve),p=0,a.frustum instanceof Vb?(l=h.origin,u=f.origin,O.add(a.direction,l,l),O.add(a.direction,u,u),O.subtract(l,a.position,l),O.subtract(u,a.position,u),O.normalize(l,l),O.normalize(u,u)):(l=h.direction,u=f.direction),(m=O.dot(l,u))<1&&(p=Math.acos(m)),p=n.startPosition.y>n.endPosition.y?-p:p,i=Object(r.a)(i,g),Object(o.a)(i)){var v=a.direction,_=O.negate(i,fve),b=O.equalsEpsilon(v,i,d.EPSILON2),y=O.equalsEpsilon(v,_,d.EPSILON2);if(b||y)(b&&p<0||y&&p>0)&&a.look(a.right,-p);else{m=O.dot(v,i);var w=d.acosClamped(m);p>0&&p>w&&(p=w-d.EPSILON4),m=O.dot(v,_),w=d.acosClamped(m),p<0&&-p>w&&(p=-w+d.EPSILON4);var C=O.cross(i,v,pve);a.look(C,p)}}else a.lookUp(p)}var gve=new Ae,vve=new R;function _ve(e){e._adjustedHeightForTerrain=!0;var t=e._scene,n=t.mode,i=t.globe;if(Object(o.a)(i)&&n!==IR.SCENE2D&&n!==IR.MORPHING){var r,a,s=t.camera,c=i.ellipsoid,l=t.mapProjection;Ae.equals(s.transform,Ae.IDENTITY)||(r=Ae.clone(s.transform,gve),a=O.magnitude(s.position),s._setTransform(Ae.IDENTITY));var u=vve;n===IR.SCENE3D?c.cartesianToCartographic(s.position,u):l.unproject(s.position,u);var h=!1;if(u.height<e._minimumCollisionTerrainHeight){var d=e._scene.globeHeight;if(Object(o.a)(d)){var f=d+e.minimumZoomDistance;u.height<f&&(u.height=f,n===IR.SCENE3D?c.cartographicToCartesian(u,s.position):l.project(u,s.position),h=!0)}}Object(o.a)(r)&&(s._setTransform(r),h&&(O.normalize(s.position,s.position),O.negate(s.position,s.direction),O.multiplyByScalar(s.position,Math.max(a,e.minimumZoomDistance),s.position),O.normalize(s.direction,s.direction),O.cross(s.direction,s.up,s.right),O.cross(s.right,s.direction,s.up)))}}Jpe.prototype.onMap=function(){var e=this._scene,t=e.mode,n=e.camera;return t!==IR.COLUMBUS_VIEW||Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0};var bve=new O,yve=new O;Jpe.prototype.update=function(){var e=this._scene,t=e.camera,n=e.globe,i=e.mode;Ae.equals(t.transform,Ae.IDENTITY)?(this._globe=n,this._ellipsoid=Object(o.a)(this._globe)?this._globe.ellipsoid:e.mapProjection.ellipsoid):(this._globe=void 0,this._ellipsoid=W.UNIT_SPHERE),this._cameraUnderground=e.cameraUnderground&&Object(o.a)(this._globe),this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight*e.terrainExaggeration,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight*e.terrainExaggeration,this._minimumTrackBallHeight=this.minimumTrackBallHeight*e.terrainExaggeration;var r=this._ellipsoid.maximumRadius;this._rotateFactor=1/r,this._rotateRateRangeAdjustment=r,this._adjustedHeightForTerrain=!1;var a,s=O.clone(t.positionWC,bve),c=O.clone(t.directionWC,yve);(i===IR.SCENE2D?function(e){var t=e._scene.mapMode2D===bte.ROTATE;Ae.equals(Ae.IDENTITY,e._scene.camera.transform)?(ime(e,e.enableTranslate,e.translateEventTypes,Mme,e.inertiaTranslate,"_lastInertiaTranslateMovement"),ime(e,e.enableZoom,e.zoomEventTypes,Rme,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&ime(e,e.enableRotate,e.tiltEventTypes,Fme,e.inertiaSpin,"_lastInertiaTiltMovement")):(ime(e,e.enableZoom,e.zoomEventTypes,Rme,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&ime(e,e.enableRotate,e.translateEventTypes,Fme,e.inertiaSpin,"_lastInertiaSpinMovement"))}(this):i===IR.COLUMBUS_VIEW?(this._horizontalRotationAxis=O.UNIT_Z,function(e){var t=e._scene.camera;if(Ae.equals(Ae.IDENTITY,t.transform)){var n=e._tweens;if(e._aggregator.anyButtonDown&&n.removeAll(),ime(e,e.enableTilt,e.tiltEventTypes,bge,e.inertiaSpin,"_lastInertiaTiltMovement"),ime(e,e.enableTranslate,e.translateEventTypes,rge,e.inertiaTranslate,"_lastInertiaTranslateMovement"),ime(e,e.enableZoom,e.zoomEventTypes,Cge,e.inertiaZoom,"_lastInertiaZoomMovement"),ime(e,e.enableLook,e.lookEventTypes,mve),!e._aggregator.anyButtonDown&&!n.contains(e._tween)){var i=t.createCorrectPositionTween(e.bounceAnimationTime);Object(o.a)(i)&&(e._tween=n.add(i))}n.update()}else ime(e,e.enableRotate,e.rotateEventTypes,Nge,e.inertiaSpin,"_lastInertiaSpinMovement"),ime(e,e.enableZoom,e.zoomEventTypes,Xge,e.inertiaZoom,"_lastInertiaZoomMovement")}(this)):i===IR.SCENE3D&&(this._horizontalRotationAxis=void 0,ime(a=this,a.enableRotate,a.rotateEventTypes,Fge,a.inertiaSpin,"_lastInertiaSpinMovement"),ime(a,a.enableZoom,a.zoomEventTypes,Xge,a.inertiaZoom,"_lastInertiaZoomMovement"),ime(a,a.enableTilt,a.tiltEventTypes,sve,a.inertiaSpin,"_lastInertiaTiltMovement"),ime(a,a.enableLook,a.lookEventTypes,mve)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain)&&((!O.equals(s,t.positionWC)||!O.equals(c,t.directionWC))&&_ve(this));this._aggregator.reset()},Jpe.prototype.isDestroyed=function(){return!1},Jpe.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),Ks(this)};var wve=Jpe;function Ove(){this._sceneFramebuffer=new Che;var e=new Array(6);e[0]=new yfe({fragmentShader:Qce,textureScale:.125,forcePowerOfTwo:!0,sampleMode:hfe.LINEAR});var t=e[1]=new yfe({fragmentShader:'uniform sampler2D colorTexture;\n\nuniform float avgLuminance;\nuniform float threshold;\nuniform float offset;\n\nvarying vec2 v_textureCoordinates;\n\nfloat key(float avg)\n{\n float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));\n return max(0.0, guess) + 0.1;\n}\n\n// See section 9. "The bright-pass filter" of Realtime HDR Rendering\n// http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf\n\nvoid main()\n{\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\n vec3 xyz = czm_RGBToXYZ(color.rgb);\n float luminance = xyz.r;\n\n float scaledLum = key(avgLuminance) * luminance / avgLuminance;\n float brightLum = max(scaledLum - threshold, 0.0);\n float brightness = brightLum / (offset + brightLum);\n\n xyz.r = brightness;\n gl_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);\n}\n',uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:.125,forcePowerOfTwo:!0}),n=this;this._delta=1,this._sigma=2,this._blurStep=new Mt,e[2]=new yfe({fragmentShader:wfe,uniforms:{step:function(){return n._blurStep.x=n._blurStep.y=1/t.outputTexture.width,n._blurStep},delta:function(){return n._delta},sigma:function(){return n._sigma},direction:0},textureScale:.125,forcePowerOfTwo:!0}),e[3]=new yfe({fragmentShader:wfe,uniforms:{step:function(){return n._blurStep.x=n._blurStep.y=1/t.outputTexture.width,n._blurStep},delta:function(){return n._delta},sigma:function(){return n._sigma},direction:1},textureScale:.125,forcePowerOfTwo:!0}),e[4]=new yfe({fragmentShader:Qce,sampleMode:hfe.LINEAR}),this._uCenter=new Mt,this._uRadius=void 0,e[5]=new yfe({fragmentShader:"uniform sampler2D colorTexture;\nuniform sampler2D colorTexture2;\n\nuniform vec2 center;\nuniform float radius;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n vec4 color0 = texture2D(colorTexture, v_textureCoordinates);\n vec4 color1 = texture2D(colorTexture2, v_textureCoordinates);\n\n float x = length(gl_FragCoord.xy - center) / radius;\n float t = smoothstep(0.5, 0.8, x);\n gl_FragColor = mix(color0 + color1, color1, t);\n}\n",uniforms:{center:function(){return n._uCenter},radius:function(){return n._uRadius},colorTexture2:function(){return n._sceneFramebuffer.getFramebuffer().getColorTexture(0)}}}),this._stages=new Cfe({stages:e});for(var i=new Lfe(this),r=e.length,o=0;o<r;++o)e[o]._textureCache=i;this._textureCache=i,this.length=e.length}Ove.prototype.get=function(e){return this._stages.get(e)},Ove.prototype.getStageByName=function(e){for(var t=this._stages.length,n=0;n<t;++n){var i=this._stages.get(n);if(i.name===e)return i}};var Cve=new he,Eve=new Mt,Ave=new Mt,xve=new Ae;Ove.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)},Ove.prototype.update=function(e){var t=e.context,n=e.viewport,i=this._sceneFramebuffer;i.update(t,n);var r=i.getFramebuffer();return this._textureCache.update(t),this._stages.update(t,!1),function(e,t,n){var i=t.uniformState,r=i.sunPositionWC,o=i.view,a=i.viewProjection,s=i.projection,c=Ae.computeViewportTransformation(n,0,1,xve),l=Ae.multiplyByPoint(o,r,Cve),u=ya.pointToGLWindowCoordinates(a,c,r,Eve);l.x+=d.SOLAR_RADIUS;var h=ya.pointToGLWindowCoordinates(s,c,l,l),f=30*Mt.magnitude(Mt.subtract(h,u,h))*2,p=Ave;p.x=f,p.y=f,e._uCenter=Mt.clone(u,e._uCenter),e._uRadius=.15*Math.max(p.x,p.y);var m=t.drawingBufferWidth,g=t.drawingBufferHeight,v=e._stages,_=v.get(0),b=_.outputTexture.width,y=_.outputTexture.height,w=new bl;w.width=b,w.height=y,c=Ae.computeViewportTransformation(w,0,1,xve),u=ya.pointToGLWindowCoordinates(a,c,r,Eve),p.x*=b/m,p.y*=y/g;var O=_.scissorRectangle;O.x=Math.max(u.x-.5*p.x,0),O.y=Math.max(u.y-.5*p.y,0),O.width=Math.min(p.x,m),O.height=Math.min(p.y,g);for(var C=1;C<4;++C)bl.clone(O,v.get(C).scissorRectangle)}(this,t,n),r},Ove.prototype.execute=function(e){var t=this._sceneFramebuffer.getFramebuffer().getColorTexture(0),n=this._stages,i=n.length;n.get(0).execute(e,t);for(var r=1;r<i;++r)n.get(r).execute(e,n.get(r-1).outputTexture)},Ove.prototype.copy=function(e,t){if(!Object(o.a)(this._copyColorCommand)){var n=this;this._copyColorCommand=e.createViewportQuadCommand(Qce,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)},Ove.prototype.isDestroyed=function(){return!1},Ove.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),Ks(this)};var Tve=Ove,Sve=function(e){return function(){e.frameState.afterRender.push((function(){e.requestRender()}))}};function Dve(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).canvas,n=e.creditContainer,i=e.creditViewport,s=Object(Lf.a)(e.contextOptions);if(Object(o.a)(s)||(s={}),Object(o.a)(s.webgl)||(s.webgl={}),s.webgl.powerPreference=Object(r.a)(s.webgl.powerPreference,"high-performance"),!Object(o.a)(t))throw new a.a("options and options.canvas are required.");var c=Object(o.a)(n),l=new wee(t,s);c||((n=document.createElement("div")).style.position="absolute",n.style.bottom="0",n.style["text-shadow"]="0 0 2px #000000",n.style.color="#ffffff",n.style["font-size"]="10px",n.style["padding-right"]="5px",t.parentNode.appendChild(n)),Object(o.a)(i)||(i=t.parentNode),this._id=l_(),this._jobScheduler=new _ue,this._frameState=new lae(l,new loe(n," \u2022 ",i),this._jobScheduler),this._frameState.scene3DOnly=Object(r.a)(e.scene3DOnly,!1),this._removeCreditContainer=!c,this._creditContainer=n,this._canvas=t,this._context=l,this._computeEngine=new z8(l),this._globe=void 0,this._globeTranslucencyState=new rue,this._primitives=new H2,this._groundPrimitives=new H2,this._globeHeight=void 0,this._cameraUnderground=!1,this._logDepthBuffer=l.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new Zpe,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=Object(r.a)(e.orderIndependentTranslucency,!0),this._executeOITFunction=void 0,this._depthPlane=new Ioe,this._clearColorCommand=new yN({color:new Hf,stencil:0,owner:this}),this._depthClearCommand=new yN({depth:1,owner:this}),this._stencilClearCommand=new yN({stencil:0}),this._classificationStencilClearCommand=new yN({stencil:0,renderState:XI.fromCache({stencilMask:JL.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new Xpe(this),this._preUpdate=new wn.a,this._postUpdate=new wn.a,this._renderError=new wn.a,this._preRender=new wn.a,this._postRender=new wn.a,this._minimumDisableDepthTestDistance=0,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new wn.a,this.morphComplete=new wn.a,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=Hf.clone(Hf.BLACK),this._mode=IR.SCENE3D,this._mapProjection=Object(o.a)(e.mapProjection)?e.mapProjection:new q,this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowGlobeDepth=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.fog=new aae,this._shadowMapCamera=new Aie(this),this.shadowMap=new hde({context:l,lightCamera:this._shadowMapCamera,enabled:Object(r.a)(e.shadows,!1)}),this.invertClassification=!1,this.invertClassificationColor=Hf.clone(Hf.WHITE),this._actualInvertClassificationColor=Hf.clone(this._invertClassificationColor),this._invertClassification=new mue,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new Vfe,this._brdfLutGenerator=new nte,this._terrainExaggeration=Object(r.a)(e.terrainExaggeration,1),this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new wve(this),this._cameraUnderground=!1,this._mapMode2D=Object(r.a)(e.mapMode2D,bte.INFINITE_SCROLL),this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,separatePrimitiveFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=Object(r.a)(e.requestRenderMode,!1),this._renderRequested=!0,this.maximumRenderTimeChange=Object(r.a)(e.maximumRenderTimeChange,0),this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=TT.a.requestCompletedEvent.addEventListener(Sve(this)),this._removeTaskProcessorListenerCallback=ac.taskCompletedEvent.addEventListener(Sve(this)),this._removeGlobeCallbacks=[];var u=new bl(0,0,l.drawingBufferWidth,l.drawingBufferHeight),h=new Aie(this);this._logDepthBuffer&&(h.frustum.near=.1,h.frustum.far=1e10),this.preloadFlightCamera=new Aie(this),this.preloadFlightCullingVolume=void 0,this._picking=new ufe(this),this._defaultView=new yde(this,h,u),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentMapAtlas=void 0,this.light=new G8,Nve(this,0,hr.now()),this.updateFrameState(),this.initializeFrame()}function Pve(e,t,n){var i=e._frameState,r=e._context,a=e._view.oit,s=i.shadowState.lightShadowMaps,c=i.shadowState.lightShadowsEnabled,l=t.derivedCommands;Object(o.a)(t.pickId)&&(l.picking=zoe.createPickDerivedCommand(e,t,r,l.picking)),t.pickOnly||(l.depth=zoe.createDepthOnlyDerivedCommand(e,t,r,l.depth)),l.originalCommand=t,e._hdr&&(l.hdr=zoe.createHdrCommand(t,r,l.hdr),l=(t=l.hdr.command).derivedCommands),c&&t.receiveShadows&&(l.shadows=hde.createReceiveDerivedCommand(s,t,n,r,l.shadows)),t.pass===EI.TRANSLUCENT&&Object(o.a)(a)&&a.isSupported()&&(c&&t.receiveShadows?(l.oit=Object(o.a)(l.oit)?l.oit:{},l.oit.shadows=a.createDerivedCommands(l.shadows.receiveCommand,r,l.oit.shadows)):l.oit=a.createDerivedCommands(t,r,l.oit))}Object.defineProperties(Dve.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return BP.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return BP.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return _V.isSupported(this._context)}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,function(e,t){for(var n=0;n<e._removeGlobeCallbacks.length;++n)e._removeGlobeCallbacks[n]();e._removeGlobeCallbacks.length=0;var i=[];Object(o.a)(t)&&(i.push(t.imageryLayersUpdatedEvent.addEventListener(Sve(e))),i.push(t.terrainProviderChanged.addEventListener(Sve(e)))),e._removeGlobeCallbacks=i}(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(Object(o.a)(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(Object(o.a)(this.globe))return this.globe.terrainProvider},set:function(e){Object(o.a)(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(Object(o.a)(this.globe))return this.globe.terrainProviderChanged}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){if(this.scene3DOnly&&e!==IR.SCENE3D)throw new a.a("Only SceneMode.SCENE3D is valid when scene3DOnly is true.");if(e===IR.SCENE2D)this.morphTo2D(0);else if(e===IR.SCENE3D)this.morphTo3D(0);else{if(e!==IR.COLUMBUS_VIEW)throw new a.a("value must be a valid SceneMode enumeration.");this.morphToColumbusView(0)}this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},terrainExaggeration:{get:function(){return this._terrainExaggeration}},useWebVR:{get:function(){return this._useWebVR},set:function(e){if(this.camera.frustum instanceof Vb)throw new a.a("VR is unsupported with an orthographic projection.");this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new Aie(this),Object(o.a)(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new Uoe(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},imagerySplitPosition:{get:function(){return this._frameState.imagerySplitPosition},set:function(e){this._frameState.imagerySplitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){if(!Object(o.a)(e)||e<0)throw new a.a("minimumDisableDepthTestDistance must be greater than or equal to 0.0.");this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){var t=this._context,n=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=n!==this._hdr,this._hdr=n}},highDynamicRangeSupported:{get:function(){var e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return.9999}},globeHeight:{get:function(){return this._globeHeight}}}),Dve.prototype.getCompressedTextureFormatSupported=function(e){var t=this.context;return("WEBGL_compressed_texture_s3tc"===e||"s3tc"===e)&&t.s3tc||("WEBGL_compressed_texture_pvrtc"===e||"pvrtc"===e)&&t.pvrtc||("WEBGL_compressed_texture_etc1"===e||"etc1"===e)&&t.etc1},Dve.prototype.updateDerivedCommands=function(e){if(Object(o.a)(e.derivedCommands)){var t=this._frameState,n=this._context,i=!1,r=t.shadowState.lastDirtyTime;e.lastDirtyTime!==r&&(e.lastDirtyTime=r,e.dirty=!0,i=!0);var a=t.useLogDepth,s=this._hdr,c=e.derivedCommands,l=Object(o.a)(c.logDepth),u=Object(o.a)(c.hdr),h=Object(o.a)(c.originalCommand),d=a&&!l,f=s&&!u,p=(!a||!s)&&!h;if(e.dirty=e.dirty||d||f||p,e.dirty){e.dirty=!1;var m=t.shadowState.shadowMaps;t.shadowState.shadowsEnabled&&e.castShadows&&(c.shadows=hde.createCastDerivedCommand(m,e,i,n,c.shadows)),(l||d)&&(c.logDepth=zoe.createLogDepthCommand(e,n,c.logDepth),Pve(this,c.logDepth.command,i)),(h||p)&&Pve(this,e,i)}}};var Ive,Mve=new Fie({pass:eQ.RENDER}),Rve=new Fie({pass:eQ.PRELOAD}),Lve=new Fie({pass:eQ.PRELOAD_FLIGHT}),jve=new Fie({pass:eQ.REQUEST_RENDER_MODE_DEFER_CHECK}),Fve=new gt;function Nve(e,t,n){var i=e._frameState;i.frameNumber=t,i.time=hr.clone(n,i.time)}function zve(e,t,n){var i=CI.shallowClone(e);i.shaderProgram=function(e,t,n){var i=t.context,a=Object(r.a)(n,e.shaderProgram),s=a.fragmentShaderSource.clone(),c=[];s.sources=s.sources.map((function(e){e=KM.replaceMain(e,"czm_Debug_main");for(var t,n=/gl_FragData\[(\d+)\]/g;null!==(t=n.exec(e));)-1===c.indexOf(t[1])&&c.push(t[1]);return e}));var l,u=c.length,h="void main() \n{ \n czm_Debug_main(); \n";if(t.debugShowCommands){Object(o.a)(e._debugColor)||(e._debugColor=Hf.fromRandom());var d=e._debugColor;if(u>0)for(l=0;l<u;++l)h+=" gl_FragData["+c[l]+"].rgb *= vec3("+d.red+", "+d.green+", "+d.blue+"); \n";else h+=" gl_FragColor.rgb *= vec3("+d.red+", "+d.green+", "+d.blue+"); \n"}if(t.debugShowFrustums){var f=1&e.debugOverlappingFrustums?"1.0":"0.0",p=2&e.debugOverlappingFrustums?"1.0":"0.0",m=4&e.debugOverlappingFrustums?"1.0":"0.0";if(u>0)for(l=0;l<u;++l)h+=" gl_FragData["+c[l]+"].rgb *= vec3("+f+", "+p+", "+m+"); \n";else h+=" gl_FragColor.rgb *= vec3("+f+", "+p+", "+m+"); \n"}h+="}",s.sources.push(h);var g=function(e){var t={},n=e.vertexAttributes;for(var i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}(a);return LM.fromCache({context:i,vertexShaderSource:a.vertexShaderSource,fragmentShaderSource:s,attributeLocations:g})}(e,t),i.execute(t.context,n),i.shaderProgram.destroy()}Dve.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1},Dve.prototype.updateFrameState=function(){var e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=function(e){var t=e.globe;if(e._mode===IR.SCENE3D&&Object(o.a)(t)&&t.show&&!e._cameraUnderground&&!e._globeTranslucencyState.translucent){var n=t.ellipsoid,i=e.frameState.minimumTerrainHeight;return Fve.radius=n.minimumRadius+i,Ive=mE.fromBoundingSphere(Fve,e.camera.positionWC,Ive)}}(this),t.terrainExaggeration=this._terrainExaggeration,t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof Vb||this.camera.frustum instanceof kb),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState,Object(o.a)(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.ready?(t.specularEnvironmentMaps=this._specularEnvironmentMapAtlas.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentMapAtlas.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=Hf.clone(this.invertClassificationColor,this._actualInvertClassificationColor),mue.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,Object(o.a)(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0},Dve.prototype.isVisible=function(e,t,n){return Object(o.a)(e)&&(!Object(o.a)(e.boundingVolume)||!e.cull||t.computeVisibility(e.boundingVolume)!==Y.OUTSIDE&&(!Object(o.a)(n)||!e.occlude||!e.boundingVolume.isOccluded(n)))};var kve=new Ae(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);function Bve(e,t,n,i,r){var a=t._frameState;if(!Object(o.a)(t.debugCommandFilter)||t.debugCommandFilter(e))if(e instanceof yN)e.execute(n,i);else{e.debugShowBoundingVolume&&Object(o.a)(e.boundingVolume)&&function(e,t,n,i){var r,a=t._frameState,s=a.context,c=e.boundingVolume;Object(o.a)(t._debugVolume)&&t._debugVolume.destroy();var l=O.clone(c.center);if(a.mode!==IR.SCENE3D){l=Ae.multiplyByPoint(kve,l,l);var u=a.mapProjection,h=u.unproject(l);l=u.ellipsoid.cartographicToCartesian(h)}if(Object(o.a)(c.radius)){var d=c.radius;r=jd.toWireframe(bb.createGeometry(new bb({radii:new O(d,d,d),vertexFormat:bI.FLAT_VERTEX_FORMAT}))),t._debugVolume=new bL({geometryInstances:new fh({geometry:r,modelMatrix:Ae.fromTranslation(l),attributes:{color:new Uf(1,0,0,1)}}),appearance:new bI({flat:!0,translucent:!1}),asynchronous:!1})}else{var f=c.halfAxes;r=jd.toWireframe(Ql.createGeometry(Ql.fromDimensions({dimensions:new O(2,2,2),vertexFormat:bI.FLAT_VERTEX_FORMAT}))),t._debugVolume=new bL({geometryInstances:new fh({geometry:r,modelMatrix:Ae.fromRotationTranslation(f,l,new Ae),attributes:{color:new Uf(1,0,0,1)}}),appearance:new bI({flat:!0,translucent:!1}),asynchronous:!1})}var p,m=a.commandList,g=a.commandList=[];t._debugVolume.update(a),e=g[0],a.useLogDepth&&(e=zoe.createLogDepthCommand(e,s).command),Object(o.a)(i)&&(p=n.framebuffer,n.framebuffer=i),e.execute(s,n),Object(o.a)(p)&&(n.framebuffer=p),a.commandList=m}(e,t,i,r),a.useLogDepth&&Object(o.a)(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);var s=a.passes;if(!s.pick&&!s.depth&&t._hdr&&Object(o.a)(e.derivedCommands)&&Object(o.a)(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth&&Object(o.a)(e.derivedCommands.picking))return void(e=e.derivedCommands.picking.pickCommand).execute(n,i);if(Object(o.a)(e.derivedCommands.depth))return void(e=e.derivedCommands.depth.depthOnlyCommand).execute(n,i)}t.debugShowCommands||t.debugShowFrustums?zve(e,t,i):a.shadowState.lightShadowsEnabled&&e.receiveShadows&&Object(o.a)(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(n,i):e.execute(n,i)}}function Hve(e,t,n,i){var r=t._frameState,a=e.derivedCommands;Object(o.a)(a)&&(r.useLogDepth&&Object(o.a)(a.logDepth)&&(e=a.logDepth.command),a=e.derivedCommands,Object(o.a)(a.picking)?(e=a.picking.pickCommand).execute(n,i):Object(o.a)(a.depth)&&(e=a.depth.depthOnlyCommand).execute(n,i))}function Vve(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}function Uve(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+d.EPSILON12}function Wve(e,t,n,i,r){var a=e.context;QC(i,Vve,e.camera.positionWC),Object(o.a)(r)&&t(r.unclassifiedCommand,e,a,n);for(var s=i.length,c=0;c<s;++c)t(i[c],e,a,n)}function Gve(e,t,n,i,r){var a=e.context;QC(i,Uve,e.camera.positionWC),Object(o.a)(r)&&t(r.unclassifiedCommand,e,a,n);for(var s=i.length,c=0;c<s;++c)t(i[c],e,a,n)}function qve(e,t){var n=e._view.debugGlobeDepths,i=n[t];return!Object(o.a)(i)&&e.context.depthTexture&&(i=new ale,n[t]=i),i}kve=Ae.inverseTransformation(kve,kve);var Yve=new Zb,$ve=new Xb,Xve=new Vb,Kve=new kb;function Qve(e,t){var n,i=e.camera,r=e.context,a=e.frameState,s=r.uniformState;s.updateCamera(i),(n=Object(o.a)(i.frustum.fov)?i.frustum.clone(Yve):Object(o.a)(i.frustum.infiniteProjectionMatrix)?i.frustum.clone($ve):Object(o.a)(i.frustum.width)?i.frustum.clone(Xve):i.frustum.clone(Kve)).near=i.frustum.near,n.far=i.frustum.far,s.updateFrustum(n),s.updatePass(EI.ENVIRONMENT);var c,l=a.passes,u=l.pick,h=e._environmentState,d=e._view,f=h.renderTranslucentDepthForPick,p=h.useWebVR;if(!u){var m,g=h.skyBoxCommand;if(Object(o.a)(g)&&Bve(g,e,r,t),h.isSkyAtmosphereVisible&&Bve(h.skyAtmosphereCommand,e,r,t),h.isSunVisible)if(h.sunDrawCommand.execute(r,t),e.sunBloom&&!p)m=h.useGlobeDepthFramebuffer?d.globeDepth.framebuffer:h.usePostProcess?d.sceneFramebuffer.getFramebuffer():h.originalFramebuffer,e._sunPostProcess.execute(r),e._sunPostProcess.copy(r,m),t.framebuffer=m;h.isMoonVisible&&h.moonCommand.execute(r,t)}h.useOIT?(Object(o.a)(e._executeOITFunction)||(e._executeOITFunction=function(e,t,n,i,r){d.oit.executeCommands(e,t,n,i,r)}),c=e._executeOITFunction):c=l.render?Wve:Gve;for(var v,_=d.frustumCommandsList,b=_.length,y=h.clearGlobeDepth,w=h.useDepthPlane,O=e._globeTranslucencyState,C=O.translucent,E=e._view.globeTranslucencyFramebuffer,A=h.separatePrimitiveFramebuffer=!1,x=e._depthClearCommand,T=e._stencilClearCommand,S=e._classificationStencilClearCommand,D=e._depthPlane,P=h.usePostProcessSelected,I=i.position.z,M=0;M<b;++M){var R=b-M-1,L=_[R];e.mode===IR.SCENE2D?(i.position.z=I-L.near+1,n.far=Math.max(1,L.far-L.near),n.near=1,s.update(a),s.updateFrustum(n)):(n.near=0!==R?L.near*e.opaqueFrustumNearOffset:L.near,n.far=L.far,s.updateFrustum(n));var j,F=e.debugShowGlobeDepth?qve(e,R):d.globeDepth;A&&(t.framebuffer=F.framebuffer),e.debugShowGlobeDepth&&Object(o.a)(F)&&h.useGlobeDepthFramebuffer&&(F.update(r,t,d.viewport,e._hdr,y),F.clear(r,t,e._clearColorCommand.color),j=t.framebuffer,t.framebuffer=F.framebuffer),x.execute(r,t),r.stencilBuffer&&T.execute(r,t),s.updatePass(EI.GLOBE);var N,z=L.commands[EI.GLOBE],k=L.indices[EI.GLOBE];if(C)O.executeGlobeCommands(L,Bve,E,e,t);else for(v=0;v<k;++v)Bve(z[v],e,r,t);if(Object(o.a)(F)&&h.useGlobeDepthFramebuffer&&F.executeCopyDepth(r,t),e.debugShowGlobeDepth&&Object(o.a)(F)&&h.useGlobeDepthFramebuffer&&(t.framebuffer=j),!h.renderTranslucentDepthForPick)if(s.updatePass(EI.TERRAIN_CLASSIFICATION),z=L.commands[EI.TERRAIN_CLASSIFICATION],k=L.indices[EI.TERRAIN_CLASSIFICATION],C)O.executeGlobeClassificationCommands(L,Bve,E,e,t);else for(v=0;v<k;++v)Bve(z[v],e,r,t);if(y&&(x.execute(r,t),w&&D.execute(r,t)),A&&(t.framebuffer=F.primitiveFramebuffer),!h.useInvertClassification||u||h.renderTranslucentDepthForPick){for(s.updatePass(EI.CESIUM_3D_TILE),z=L.commands[EI.CESIUM_3D_TILE],k=L.indices[EI.CESIUM_3D_TILE],v=0;v<k;++v)Bve(z[v],e,r,t);if(k>0&&(Object(o.a)(F)&&h.useGlobeDepthFramebuffer&&F.executeUpdateDepth(r,t,y),!h.renderTranslucentDepthForPick))for(s.updatePass(EI.CESIUM_3D_TILE_CLASSIFICATION),z=L.commands[EI.CESIUM_3D_TILE_CLASSIFICATION],k=L.indices[EI.CESIUM_3D_TILE_CLASSIFICATION],v=0;v<k;++v)Bve(z[v],e,r,t)}else{e._invertClassification.clear(r,t);var B=t.framebuffer;for(t.framebuffer=e._invertClassification._fbo,s.updatePass(EI.CESIUM_3D_TILE),z=L.commands[EI.CESIUM_3D_TILE],k=L.indices[EI.CESIUM_3D_TILE],v=0;v<k;++v)Bve(z[v],e,r,t);for(Object(o.a)(F)&&h.useGlobeDepthFramebuffer&&F.executeUpdateDepth(r,t,y),s.updatePass(EI.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),z=L.commands[EI.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],k=L.indices[EI.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],v=0;v<k;++v)Bve(z[v],e,r,t);for(t.framebuffer=B,e._invertClassification.executeClassified(r,t),1===a.invertClassificationColor.alpha&&e._invertClassification.executeUnclassified(r,t),k>0&&r.stencilBuffer&&S.execute(r,t),s.updatePass(EI.CESIUM_3D_TILE_CLASSIFICATION),z=L.commands[EI.CESIUM_3D_TILE_CLASSIFICATION],k=L.indices[EI.CESIUM_3D_TILE_CLASSIFICATION],v=0;v<k;++v)Bve(z[v],e,r,t)}for(k>0&&r.stencilBuffer&&T.execute(r,t),s.updatePass(EI.OPAQUE),z=L.commands[EI.OPAQUE],k=L.indices[EI.OPAQUE],v=0;v<k;++v)Bve(z[v],e,r,t);if(0!==R&&e.mode!==IR.SCENE2D&&(n.near=L.near,s.updateFrustum(n)),!u&&h.useInvertClassification&&a.invertClassificationColor.alpha<1&&(N=e._invertClassification),s.updatePass(EI.TRANSLUCENT),(z=L.commands[EI.TRANSLUCENT]).length=L.indices[EI.TRANSLUCENT],c(e,Bve,t,z,N),r.depthTexture&&e.useDepthPicking&&(h.useGlobeDepthFramebuffer||f)){var H=f?t.framebuffer.depthStencilTexture:F.framebuffer.depthStencilTexture,V=e._picking.getPickDepth(e,R);V.update(r,H),V.executeCopyDepth(r,t)}if(A&&(t.framebuffer=F.framebuffer),!u&&P){var U=t.framebuffer;if(t.framebuffer=d.sceneFramebuffer.getIdFramebuffer(),n.near=0!==R?L.near*e.opaqueFrustumNearOffset:L.near,n.far=L.far,s.updateFrustum(n),s.updatePass(EI.GLOBE),z=L.commands[EI.GLOBE],k=L.indices[EI.GLOBE],C)O.executeGlobeCommands(L,Hve,E,e,t);else for(v=0;v<k;++v)Hve(z[v],e,r,t);for(y&&(x.framebuffer=t.framebuffer,x.execute(r,t),x.framebuffer=void 0),y&&w&&D.execute(r,t),s.updatePass(EI.CESIUM_3D_TILE),z=L.commands[EI.CESIUM_3D_TILE],k=L.indices[EI.CESIUM_3D_TILE],v=0;v<k;++v)Hve(z[v],e,r,t);for(s.updatePass(EI.OPAQUE),z=L.commands[EI.OPAQUE],k=L.indices[EI.OPAQUE],v=0;v<k;++v)Hve(z[v],e,r,t);for(s.updatePass(EI.TRANSLUCENT),z=L.commands[EI.TRANSLUCENT],k=L.indices[EI.TRANSLUCENT],v=0;v<k;++v)Hve(z[v],e,r,t);t.framebuffer=U}}}function Zve(e){e.context.uniformState.updatePass(EI.COMPUTE);var t=e._environmentState.sunComputeCommand;Object(o.a)(t)&&t.execute(e._computeEngine);for(var n=e._computeCommandList,i=n.length,r=0;r<i;++r)n[r].execute(e._computeEngine)}function Jve(e,t,n){for(var i=n.shadowMapCullingVolume,r=n.isPointLight,o=n.passes,a=o.length,s=t.length,c=0;c<s;++c){var l=t[c];if(e.updateDerivedCommands(l),l.castShadows&&(l.pass===EI.GLOBE||l.pass===EI.CESIUM_3D_TILE||l.pass===EI.OPAQUE||l.pass===EI.TRANSLUCENT)&&e.isVisible(l,i))if(r)for(var u=0;u<a;++u)o[u].commandList.push(l);else if(1===a)o[0].commandList.push(l);else for(var h=!1,d=a-1;d>=0;--d){var f=o[d].cullingVolume;if(e.isVisible(l,f))o[d].commandList.push(l),h=!0;else if(h)break}}}function e_e(e){var t=e.frameState,n=t.shadowState.shadowMaps,i=n.length;if(t.shadowState.shadowsEnabled)for(var r=e.context,o=r.uniformState,a=0;a<i;++a){var s=n[a];if(!s.outOfView){var c,l=s.passes,u=l.length;for(c=0;c<u;++c)l[c].commandList.length=0;for(Jve(e,e.frameState.commandList,s),c=0;c<u;++c){var h=s.passes[c];o.updateCamera(h.camera),s.updatePass(r,c);for(var d=h.commandList.length,f=0;f<d;++f){var p=h.commandList[f];o.updatePass(p.pass),Bve(p.derivedCommands.shadows.castCommands[a],e,r,h.passState)}}}}}var t_e=new O;Dve.prototype.updateAndExecuteCommands=function(e,t){var n=this._frameState.mode;this._environmentState.useWebVR?function(e,t,n){var i=e._view,o=i.camera,a=e._environmentState.renderTranslucentDepthForPick;f_e(e,t,n),a||d_e(e);i.createPotentiallyVisibleSet(e),a||(Zve(e),e_e(e));var s=t.viewport;s.x=0,s.y=0,s.width=.5*s.width;var c=Aie.clone(o,e._cameraVR);c.frustum=o.frustum;var l=o.frustum.near,u=l*Object(r.a)(e.focalLength,5),h=Object(r.a)(e.eyeSeparation,u/30),d=O.multiplyByScalar(c.right,.5*h,t_e);o.frustum.aspectRatio=s.width/s.height;var f=.5*h*l/u;O.add(c.position,d,o.position),o.frustum.xOffset=f,Qve(e,t),s.x=s.width,O.subtract(c.position,d,o.position),o.frustum.xOffset=-f,Qve(e,t),Aie.clone(c,o)}(this,e,t):n!==IR.SCENE2D||this._mapMode2D===bte.ROTATE?u_e(!0,this,e,t):(f_e(this,e,t),function(e,t){var n=e.context,i=e.frameState,r=e.camera,o=t.viewport,a=bl.clone(o,l_e);t.viewport=a;var s=n_e,c=i_e;e.mapProjection.project(s,c);var l=O.clone(r.position,r_e),u=Ae.clone(r.transform,a_e),h=r.frustum.clone();r._setTransform(Ae.IDENTITY);var f=Ae.computeViewportTransformation(a,0,1,o_e),p=r.frustum.projectionMatrix,m=r.positionWC.y,g=O.fromElements(d.sign(m)*c.x-m,0,-r.positionWC.x,s_e),v=ya.pointToGLWindowCoordinates(p,f,g,c_e);v.x=Math.floor(v.x);var _=a.x,b=a.width;if(0===m||v.x<=_||v.x>=_+b)u_e(!0,e,t);else if(Math.abs(_+.5*b-v.x)<1)a.width=v.x-a.x,r.position.x*=d.sign(r.position.x),r.frustum.right=0,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!0,e,t),a.x=v.x,r.position.x=-r.position.x,r.frustum.right=-r.frustum.left,r.frustum.left=0,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!1,e,t);else if(v.x>_+.5*b){a.width=v.x-_;var y=r.frustum.right;r.frustum.right=c.x-m,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!0,e,t),a.x=v.x,a.width=_+b-v.x,r.position.x=-r.position.x,r.frustum.left=-r.frustum.right,r.frustum.right=y-2*r.frustum.right,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!1,e,t)}else{a.x=v.x,a.width=_+b-v.x;var w=r.frustum.left;r.frustum.left=-c.x-m,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!0,e,t),a.x=_,a.width=v.x-_,r.position.x=-r.position.x,r.frustum.right=-r.frustum.left,r.frustum.left=w-2*r.frustum.left,i.cullingVolume=r.frustum.computeCullingVolume(r.positionWC,r.directionWC,r.upWC),n.uniformState.update(i),u_e(!1,e,t)}r._setTransform(u),O.clone(l,r.position),r.frustum=h.clone(),t.viewport=o}(this,e))};var n_e=new R(Math.PI,d.PI_OVER_TWO),i_e=new O,r_e=new O,o_e=new Ae,a_e=new Ae,s_e=new O,c_e=new O,l_e=new bl;function u_e(e,t,n,i){var r=t._environmentState,a=t._view,s=r.renderTranslucentDepthForPick;e||s||(t.frameState.commandList.length=0),s||d_e(t),a.createPotentiallyVisibleSet(t),e&&(Object(o.a)(i)&&f_e(t,n,i),s||(Zve(t),e_e(t))),Qve(t,n)}var h_e=new C_;function d_e(e){var t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),function(e){var t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new woe({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),Object(o.a)(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}(e),function(e){var t=e._frameState,n=t.shadowMaps,i=n.length,r=i>0&&!t.passes.pick&&e.mode===IR.SCENE3D;if(r!==t.shadowState.shadowsEnabled&&(++t.shadowState.lastDirtyTime,t.shadowState.shadowsEnabled=r),t.shadowState.lightShadowsEnabled=!1,r){for(var o=0;o<i;++o)if(n[o]!==t.shadowState.shadowMaps[o]){++t.shadowState.lastDirtyTime;break}t.shadowState.shadowMaps.length=0,t.shadowState.lightShadowMaps.length=0;for(var a=0;a<i;++a){var s=n[a];s.update(t),t.shadowState.shadowMaps.push(s),s.fromLightSource&&(t.shadowState.lightShadowMaps.push(s),t.shadowState.lightShadowsEnabled=!0),s.dirty&&(++t.shadowState.lastDirtyTime,s.dirty=!1)}}}(e),e._globe&&e._globe.render(t)}function f_e(e,t,n){var i=e._context,r=e._frameState,a=e._environmentState,s=e._view,c=e._frameState.passes.pick,l=a.useWebVR;a.originalFramebuffer=t.framebuffer,Object(o.a)(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!l?e._sunPostProcess=new Tve:Object(o.a)(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!Object(o.a)(e.sun)&&Object(o.a)(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);var u=e._clearColorCommand;Hf.clone(n,u.color),u.execute(i,t);var h=a.useGlobeDepthFramebuffer=Object(o.a)(s.globeDepth);h&&(s.globeDepth.update(i,t,s.viewport,e._hdr,a.clearGlobeDepth),s.globeDepth.clear(i,t,n));var d=s.oit,f=a.useOIT=!c&&Object(o.a)(d)&&d.isSupported();f&&(d.update(i,t,s.globeDepth.framebuffer,e._hdr),d.clear(i,t,n),a.useOIT=d.isSupported());var p,m=e.postProcessStages,g=a.usePostProcess=!c&&(e._hdr||m.length>0||m.ambientOcclusion.enabled||m.fxaa.enabled||m.bloom.enabled);if(a.usePostProcessSelected=!1,g&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr),s.sceneFramebuffer.clear(i,t,n),m.update(i,r.useLogDepth,e._hdr),m.clear(i),g=a.usePostProcess=m.ready,a.usePostProcessSelected=g&&m.hasSelected),a.isSunVisible&&e.sunBloom&&!l?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):h?t.framebuffer=s.globeDepth.framebuffer:g&&(t.framebuffer=s.sceneFramebuffer.getFramebuffer()),Object(o.a)(t.framebuffer)&&u.execute(i,t),a.useInvertClassification=!c&&Object(o.a)(t.framebuffer)&&e.invertClassification)if(1===e.frameState.invertClassificationColor.alpha&&a.useGlobeDepthFramebuffer&&(p=s.globeDepth.framebuffer),Object(o.a)(p)||i.depthTexture){if(e._invertClassification.previousFramebuffer=p,e._invertClassification.update(i),e._invertClassification.clear(i,t),e.frameState.invertClassificationColor.alpha<1&&f){var v=e._invertClassification.unclassifiedCommand,_=v.derivedCommands;_.oit=d.createDerivedCommands(v,i,_.oit)}}else a.useInvertClassification=!1;e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}function p_e(e){e._jobScheduler.resetBudgets();var t=e._frameState;e.primitives.prePassesUpdate(t),Object(o.a)(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function m_e(e){var t=e._frameState;e.primitives.postPassesUpdate(t),TT.a.update()}Dve.prototype.updateEnvironment=function(){var e=this._frameState,t=this._view,n=this._environmentState,i=e.passes.render,r=e.passes.offscreen,a=this.skyAtmosphere,s=this.globe,c=this._globeTranslucencyState;if(!i||this._mode!==IR.SCENE2D&&t.camera.frustum instanceof Vb||!c.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{Object(o.a)(a)?(Object(o.a)(s)&&(a.setDynamicAtmosphereColor(s.enableLighting&&s.dynamicAtmosphereLighting,s.dynamicAtmosphereLightingFromSun),n.isReadyForAtmosphere=n.isReadyForAtmosphere||s._surface._tilesToRender.length>0),n.skyAtmosphereCommand=a.update(e,s),Object(o.a)(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)):n.skyAtmosphereCommand=void 0,n.skyBoxCommand=Object(o.a)(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;var l=Object(o.a)(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=Object(o.a)(l)?l.drawCommand:void 0,n.sunComputeCommand=Object(o.a)(l)?l.computeCommand:void 0,n.moonCommand=Object(o.a)(this.moon)?this.moon.update(e):void 0}var u=n.clearGlobeDepth=Object(o.a)(s)&&s.show&&(!s.depthTestAgainstTerrain||this.mode===IR.SCENE2D);(n.useDepthPlane=u&&this.mode===IR.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==IR.SCENE2D&&!r;for(var h=e.mode!==IR.SCENE3D||c.sunVisibleThroughGlobe?void 0:e.occluder,d=e.cullingVolume,f=h_e.planes,p=0;p<5;++p)f[p]=d.planes[p];d=h_e,n.isSkyAtmosphereVisible=Object(o.a)(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(n.sunDrawCommand,d,h),n.isMoonVisible=this.isVisible(n.moonCommand,d,h);var m=this.specularEnvironmentMaps,g=this._specularEnvironmentMapAtlas;!Object(o.a)(m)||Object(o.a)(g)&&g.url===m?!Object(o.a)(m)&&Object(o.a)(g)&&(g.destroy(),this._specularEnvironmentMapAtlas=void 0):(g=g&&g.destroy(),this._specularEnvironmentMapAtlas=new _V(m)),Object(o.a)(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.update(e)},Dve.prototype.resolveFramebuffers=function(e){var t=this._context,n=this._frameState,i=this._environmentState,o=this._view,a=o.globeDepth,s=i.useOIT,c=i.useGlobeDepthFramebuffer,l=i.usePostProcess,u=i.originalFramebuffer,h=c?a.framebuffer:void 0,d=o.sceneFramebuffer.getFramebuffer(),f=o.sceneFramebuffer.getIdFramebuffer();if(i.separatePrimitiveFramebuffer&&a.executeMergeColor(t,e),s&&(e.framebuffer=l?d:u,o.oit.execute(t,e)),l){var p=d;c&&!s&&(p=h);var m=this.postProcessStages,g=p.getColorTexture(0),v=f.getColorTexture(0),_=Object(r.a)(h,d).depthStencilTexture;m.execute(t,g,_,v),m.copy(t,u)}s||l||!c||(e.framebuffer=u,a.executeCopyColor(t,e));var b=n.useLogDepth;this.debugShowGlobeDepth&&c&&qve(this,this.debugShowDepthFrustum-1).executeDebugGlobeDepth(t,e,b);this.debugShowPickDepth&&c&&this._picking.getPickDepth(this,this.debugShowDepthFrustum-1).executeDebugPickDepth(t,e,b)},Dve.prototype.initializeFrame=function(){120===this._shaderFrameCount++&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeight=function(e){var t=e._globe,n=e.camera.positionCartographic;if(Object(o.a)(t)&&t.show&&Object(o.a)(n))return t.getHeight(n)}(this),this._cameraUnderground=function(e){var t=e.camera,n=e._mode,i=e.globe,r=e._screenSpaceCameraController,a=t.positionCartographic;if(!Object(o.a)(a))return!1;if(!r.onMap()&&a.height<0)return!0;if(!Object(o.a)(i)||!i.show||n===IR.SCENE2D||n===IR.MORPHING)return!1;var s=e._globeHeight;return Object(o.a)(s)&&a.height<s}(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),Object(o.a)(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};var g_e=new Hf;function v_e(e){var t=e._frameState,n=e.context,i=n.uniformState,a=e._defaultView;e._view=a,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=Mve;var s=Object(r.a)(e.backgroundColor,Hf.BLACK);e._hdr&&((s=Hf.clone(s,g_e)).red=Math.pow(s.red,e.gamma),s.green=Math.pow(s.green,e.gamma),s.blue=Math.pow(s.blue,e.gamma)),t.backgroundColor=s,e.fog.update(t),i.update(t);var c=e.shadowMap;Object(o.a)(c)&&c.enabled&&(!Object(o.a)(e.light)||e.light instanceof G8?O.negate(i.sunDirectionWC,e._shadowMapCamera.direction):O.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(c)),e._computeCommandList.length=0,e._overlayCommandList.length=0;var l=a.viewport;l.x=0,l.y=0,l.width=n.drawingBufferWidth,l.height=n.drawingBufferHeight;var u=a.passState;u.framebuffer=void 0,u.blendingEnabled=void 0,u.scissorTest=void 0,u.viewport=bl.clone(l,u.viewport),Object(o.a)(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(u,s),e.resolveFramebuffers(u),u.framebuffer=void 0,function(e,t){e.context.uniformState.updatePass(EI.OVERLAY);for(var n=e.context,i=e._overlayCommandList,r=i.length,o=0;o<r;++o)i[o].execute(n,t)}(e,u),Object(o.a)(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function __e(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function b_e(e){return e._picking.updateMostDetailedRayPicks(e)}function y_e(e){var t=e._frameState;Rve.camera=t.camera,Rve.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,Rve)}function w_e(e){var t=e._frameState;t.camera.canPreloadFlight()&&(Lve.camera=e.preloadFlightCamera,Lve.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,Lve))}function O_e(e){e.primitives.updateForPass(e._frameState,jve)}Dve.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);var t=this._frameState;t.newFrame=!1,Object(o.a)(e)||(e=hr.now());var n=this._view.checkForCameraUpdates(this),i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===IR.MORPHING;if(!i&&Object(o.a)(this.maximumRenderTimeChange)&&Object(o.a)(this._lastRenderTime)){var r=Math.abs(hr.secondsDifference(this._lastRenderTime,e));i=i||r>this.maximumRenderTimeChange}i&&(this._lastRenderTime=hr.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1,Nve(this,d.incrementWrap(t.frameNumber,15e6,1),e),t.newFrame=!0);__e(this,p_e),this.primitives.show&&(__e(this,b_e),__e(this,y_e),__e(this,w_e),i||__e(this,O_e)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),__e(this,v_e)),function(e,t){if(e.debugShowFramesPerSecond){if(!Object(o.a)(e._performanceDisplay)){var n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);var i=new she({container:n});e._performanceDisplay=i,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else Object(o.a)(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}(this,i),__e(this,m_e),function(e){for(var t=e._frameState.afterRender,n=0,i=t.length;n<i;++n)t[n](),e.requestRender();t.length=0}(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())},Dve.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)},Dve.prototype.requestRender=function(){this._renderRequested=!0},Dve.prototype.clampLineWidth=function(e){return Math.max(BP.minimumAliasedLineWidth,Math.min(e,BP.maximumAliasedLineWidth))},Dve.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n)},Dve.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)},Dve.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)},Dve.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)},Dve.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)},Dve.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)},Dve.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)},Dve.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)},Dve.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)},Dve.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)},Dve.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)},Dve.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)},Dve.prototype.cartesianToCanvasCoordinates=function(e,t){return bq.wgs84ToWindowCoordinates(this,e,t)},Dve.prototype.completeMorph=function(){this._transitioner.completeMorph()},Dve.prototype.morphTo2D=function(e){var t,n=this.globe;t=Object(o.a)(n)?n.ellipsoid:this.mapProjection.ellipsoid,e=Object(r.a)(e,2),this._transitioner.morphTo2D(e,t)},Dve.prototype.morphToColumbusView=function(e){var t,n=this.globe;t=Object(o.a)(n)?n.ellipsoid:this.mapProjection.ellipsoid,e=Object(r.a)(e,2),this._transitioner.morphToColumbusView(e,t)},Dve.prototype.morphTo3D=function(e){var t,n=this.globe;t=Object(o.a)(n)?n.ellipsoid:this.mapProjection.ellipsoid,e=Object(r.a)(e,2),this._transitioner.morphTo3D(e,t)},Dve.prototype.isDestroyed=function(){return!1},Dve.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),Object(o.a)(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(var e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,Ks(this)};var C_e=Dve,E_e="/**\n * @license\n * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com)\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * * Neither the name of the project nor the names of its contributors may be\n * used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Modifications made by Cesium GS, Inc.\n */\n\n // Code: http://sponeil.net/\n // GPU Gems 2 Article: https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html\n\nconst float Kr = 0.0025;\nconst float Kr4PI = Kr * 4.0 * czm_pi;\nconst float Km = 0.0015;\nconst float Km4PI = Km * 4.0 * czm_pi;\nconst float ESun = 15.0;\nconst float KmESun = Km * ESun;\nconst float KrESun = Kr * ESun;\nconst vec3 InvWavelength = vec3(\n 5.60204474633241, // Red = 1.0 / Math.pow(0.650, 4.0)\n 9.473284437923038, // Green = 1.0 / Math.pow(0.570, 4.0)\n 19.643802610477206); // Blue = 1.0 / Math.pow(0.475, 4.0)\nconst float rayleighScaleDepth = 0.25;\n\nconst int nSamples = 2;\nconst float fSamples = 2.0;\n\nconst float g = -0.95;\nconst float g2 = g * g;\n\n#ifdef COLOR_CORRECT\nuniform vec3 u_hsbShift; // Hue, saturation, brightness\n#endif\n\nuniform vec3 u_radiiAndDynamicAtmosphereColor; // outer radius, inner radius, dynamic atmosphere color flag\n\nfloat scale(float cosAngle)\n{\n float x = 1.0 - cosAngle;\n return rayleighScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\n}\n\nvec3 getLightDirection(vec3 positionWC)\n{\n float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\n vec3 lightDirection =\n positionWC * float(lightEnum == 0.0) +\n czm_lightDirectionWC * float(lightEnum == 1.0) +\n czm_sunDirectionWC * float(lightEnum == 2.0);\n return normalize(lightDirection);\n}\n\nvoid calculateRayScatteringFromSpace(in vec3 positionWC, in vec3 ray, in float innerRadius, in float outerRadius, inout float far, out vec3 start, out float startOffset)\n{\n // Calculate the closest intersection of the ray with the outer atmosphere (which is the near point of the ray passing through the atmosphere)\n float cameraHeight = length(positionWC);\n float B = 2.0 * dot(positionWC, ray);\n float C = cameraHeight * cameraHeight - outerRadius * outerRadius;\n float det = max(0.0, B * B - 4.0 * C);\n float near = 0.5 * (-B - sqrt(det));\n\n // Calculate the ray's starting position, then calculate its scattering offset\n start = positionWC + ray * near;\n far -= near;\n float startAngle = dot(ray, start) / outerRadius;\n float startDepth = exp(-1.0 / rayleighScaleDepth);\n startOffset = startDepth * scale(startAngle);\n}\n\nvoid calculateRayScatteringFromGround(in vec3 positionWC, in vec3 ray, in float atmosphereScale, in float innerRadius, out vec3 start, out float startOffset)\n{\n // Calculate the ray's starting position, then calculate its scattering offset\n float cameraHeight = length(positionWC);\n start = positionWC;\n float height = length(start);\n float depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - cameraHeight));\n float startAngle = dot(ray, start) / height;\n startOffset = depth*scale(startAngle);\n}\n\nczm_raySegment rayEllipsoidIntersection(czm_ray ray, vec3 inverseRadii)\n{\n vec3 o = inverseRadii * (czm_inverseView * vec4(ray.origin, 1.0)).xyz;\n vec3 d = inverseRadii * (czm_inverseView * vec4(ray.direction, 0.0)).xyz;\n\n float a = dot(d, d);\n float b = dot(d, o);\n float c = dot(o, o) - 1.0;\n float discriminant = b * b - a * c;\n if (discriminant < 0.0)\n {\n return czm_emptyRaySegment;\n }\n discriminant = sqrt(discriminant);\n float t1 = (-b - discriminant) / a;\n float t2 = (-b + discriminant) / a;\n\n if (t1 < 0.0 && t2 < 0.0)\n {\n return czm_emptyRaySegment;\n }\n\n if (t1 < 0.0 && t2 >= 0.0)\n {\n t1 = 0.0;\n }\n\n return czm_raySegment(t1, t2);\n}\n\nvec3 getAdjustedPosition(vec3 positionWC, float innerRadius)\n{\n // Adjust the camera position so that atmosphere color looks the same wherever the eye height is the same\n float cameraHeight = czm_eyeHeight + innerRadius;\n return normalize(positionWC) * cameraHeight;\n}\n\nvec3 getTranslucentPosition(vec3 positionWC, vec3 outerPositionWC, float innerRadius, out bool intersectsEllipsoid)\n{\n vec3 directionWC = normalize(outerPositionWC - positionWC);\n vec3 directionEC = czm_viewRotation * directionWC;\n czm_ray viewRay = czm_ray(vec3(0.0), directionEC);\n czm_raySegment raySegment = rayEllipsoidIntersection(viewRay, czm_ellipsoidInverseRadii);\n intersectsEllipsoid = raySegment.start >= 0.0;\n\n if (intersectsEllipsoid)\n {\n return positionWC + raySegment.stop * directionWC;\n }\n\n return getAdjustedPosition(positionWC, innerRadius);\n}\n\nvoid calculateMieColorAndRayleighColor(vec3 outerPositionWC, out vec3 mieColor, out vec3 rayleighColor)\n{\n // Unpack attributes\n float outerRadius = u_radiiAndDynamicAtmosphereColor.x;\n float innerRadius = u_radiiAndDynamicAtmosphereColor.y;\n\n#ifdef GLOBE_TRANSLUCENT\n bool intersectsEllipsoid = false;\n vec3 startPositionWC = getTranslucentPosition(czm_viewerPositionWC, outerPositionWC, innerRadius, intersectsEllipsoid);\n#else\n vec3 startPositionWC = getAdjustedPosition(czm_viewerPositionWC, innerRadius);\n#endif\n\n vec3 lightDirection = getLightDirection(startPositionWC);\n\n // Get the ray from the start position to the outer position and its length (which is the far point of the ray passing through the atmosphere)\n vec3 ray = outerPositionWC - startPositionWC;\n float far = length(ray);\n ray /= far;\n\n float atmosphereScale = 1.0 / (outerRadius - innerRadius);\n\n vec3 start;\n float startOffset;\n\n#ifdef SKY_FROM_SPACE\n#ifdef GLOBE_TRANSLUCENT\n if (intersectsEllipsoid)\n {\n calculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\n }\n else\n {\n calculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\n }\n#else\n calculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\n#endif\n#else\n calculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\n#endif\n\n // Initialize the scattering loop variables\n float sampleLength = far / fSamples;\n float scaledLength = sampleLength * atmosphereScale;\n vec3 sampleRay = ray * sampleLength;\n vec3 samplePoint = start + sampleRay * 0.5;\n\n // Now loop through the sample rays\n vec3 frontColor = vec3(0.0, 0.0, 0.0);\n\n for (int i = 0; i<nSamples; i++)\n {\n float height = length(samplePoint);\n float depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - height));\n float fLightAngle = dot(lightDirection, samplePoint) / height;\n float fCameraAngle = dot(ray, samplePoint) / height;\n float fScatter = (startOffset + depth*(scale(fLightAngle) - scale(fCameraAngle)));\n vec3 attenuate = exp(-fScatter * (InvWavelength * Kr4PI + Km4PI));\n frontColor += attenuate * (depth * scaledLength);\n samplePoint += sampleRay;\n }\n\n // Finally, scale the Mie and Rayleigh colors and set up the varying variables for the pixel shader\n mieColor = frontColor * KmESun;\n rayleighColor = frontColor * (InvWavelength * KrESun);\n\n // Cap mie and rayleigh colors to prevent NaNs when vertex interpolation happens\n mieColor = min(mieColor, vec3(10000000.0));\n rayleighColor = min(rayleighColor, vec3(10000000.0));\n}\n\nvec4 calculateFinalColor(vec3 positionWC, vec3 toCamera, vec3 lightDirection, vec3 mieColor, vec3 rayleighColor)\n{\n // Extra normalize added for Android\n float cosAngle = dot(lightDirection, normalize(toCamera)) / length(toCamera);\n float rayleighPhase = 0.75 * (1.0 + cosAngle * cosAngle);\n float miePhase = 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + cosAngle * cosAngle) / pow(1.0 + g2 - 2.0 * g * cosAngle, 1.5);\n\n vec3 rgb = rayleighPhase * rayleighColor + miePhase * mieColor;\n\n const float exposure = 2.0;\n vec3 rgbExposure = vec3(1.0) - exp(-exposure * rgb);\n\n#ifndef HDR\n rgb = rgbExposure;\n#endif\n\n#ifdef COLOR_CORRECT\n // Convert rgb color to hsb\n vec3 hsb = czm_RGBToHSB(rgb);\n // Perform hsb shift\n hsb.x += u_hsbShift.x; // hue\n hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation\n hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness\n // Convert shifted hsb back to rgb\n rgb = czm_HSBToRGB(hsb);\n#endif\n\n float outerRadius = u_radiiAndDynamicAtmosphereColor.x;\n float innerRadius = u_radiiAndDynamicAtmosphereColor.y;\n float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\n\n float cameraHeight = czm_eyeHeight + innerRadius;\n\n // Alter alpha based on how close the viewer is to the ground (1.0 = on ground, 0.0 = at edge of atmosphere)\n float atmosphereAlpha = clamp((outerRadius - cameraHeight) / (outerRadius - innerRadius), 0.0, 1.0);\n\n // Alter alpha based on time of day (0.0 = night , 1.0 = day)\n float nightAlpha = (lightEnum != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;\n atmosphereAlpha *= pow(nightAlpha, 0.5);\n\n vec4 finalColor = vec4(rgb, mix(clamp(rgbExposure.b, 0.0, 1.0), 1.0, atmosphereAlpha) * smoothstep(0.0, 1.0, czm_morphTime));\n\n if (mieColor.b > 1.0)\n {\n // Fade atmosphere below the ellipsoid. As the camera zooms further away from the ellipsoid draw\n // a larger atmosphere ring to cover empty space of lower LOD globe tiles.\n float strength = mieColor.b;\n float minDistance = outerRadius;\n float maxDistance = outerRadius * 3.0;\n float maxStrengthLerp = 1.0 - clamp((maxDistance - cameraHeight) / (maxDistance - minDistance), 0.0, 1.0);\n float maxStrength = mix(100.0, 10000.0, maxStrengthLerp);\n strength = min(strength, maxStrength);\n float alpha = 1.0 - (strength / maxStrength);\n finalColor.a = alpha;\n }\n\n return finalColor;\n}\n",A_e="varying vec3 v_outerPositionWC;\n\n#ifndef PER_FRAGMENT_ATMOSPHERE\nvarying vec3 v_mieColor;\nvarying vec3 v_rayleighColor;\n#endif\n\nvoid main (void)\n{\n vec3 toCamera = czm_viewerPositionWC - v_outerPositionWC;\n vec3 lightDirection = getLightDirection(czm_viewerPositionWC);\n vec3 mieColor;\n vec3 rayleighColor;\n\n#ifdef PER_FRAGMENT_ATMOSPHERE\n calculateMieColorAndRayleighColor(v_outerPositionWC, mieColor, rayleighColor);\n#else\n mieColor = v_mieColor;\n rayleighColor = v_rayleighColor;\n#endif\n\n gl_FragColor = calculateFinalColor(czm_viewerPositionWC, toCamera, lightDirection, mieColor, rayleighColor);\n}\n",x_e="attribute vec4 position;\n\nvarying vec3 v_outerPositionWC;\n\n#ifndef PER_FRAGMENT_ATMOSPHERE\nvarying vec3 v_mieColor;\nvarying vec3 v_rayleighColor;\n#endif\n\nvoid main(void)\n{\n vec4 positionWC = czm_model * position;\n\n#ifndef PER_FRAGMENT_ATMOSPHERE\n calculateMieColorAndRayleighColor(positionWC.xyz, v_mieColor, v_rayleighColor);\n#endif\n v_outerPositionWC = positionWC.xyz;\n gl_Position = czm_modelViewProjection * position;\n}\n";function T_e(e){e=Object(r.a)(e,W.WGS84),this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;var t=O.multiplyByScalar(e.radii,1.025,new O);this._scaleMatrix=Ae.fromScale(t),this._modelMatrix=new Ae,this._command=new CI({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new O;var n=new O;n.x=1.025*e.maximumRadius,n.y=e.maximumRadius,n.z=0,this._radiiAndDynamicAtmosphereColor=n;var i=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return i._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return i._hueSaturationBrightness.x=i.hueShift,i._hueSaturationBrightness.y=i.saturationShift,i._hueSaturationBrightness.z=i.brightnessShift,i._hueSaturationBrightness}}}Object.defineProperties(T_e.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}}),T_e.prototype.setDynamicAtmosphereColor=function(e,t){var n=e?t?2:1:0;this._radiiAndDynamicAtmosphereColor.z=n};var S_e=new Ae;T_e.prototype.update=function(e,t){if(this.show){var n=e.mode;if((n===IR.SCENE3D||n===IR.MORPHING)&&e.passes.render){var i=Ae.fromRotationTranslation(e.context.uniformState.inverseViewRotation,O.ZERO,S_e),r=Ae.multiplyTransformation(i,ON.Y_UP_TO_Z_UP,S_e),a=Ae.multiply(this._scaleMatrix,r,S_e);Ae.clone(a,this._modelMatrix);var s,c=e.context,l=(s=this,!(d.equalsEpsilon(s.hueShift,0,d.EPSILON7)&&d.equalsEpsilon(s.saturationShift,0,d.EPSILON7)&&d.equalsEpsilon(s.brightnessShift,0,d.EPSILON7))),u=e.globeTranslucencyState.translucent,h=this.perFragmentAtmosphere||u||!Object(o.a)(t)||!t.show,f=this._command;if(!Object(o.a)(f.vertexArray)){var p=bb.createGeometry(new bb({radii:new O(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:Ul.POSITION_ONLY}));f.vertexArray=hR.fromGeometry({context:c,geometry:p,attributeLocations:jd.createAttributeLocations(p),bufferUsage:iR.STATIC_DRAW}),f.renderState=XI.fromCache({cull:{enabled:!0,face:FP.FRONT},blending:LP.ALPHA_BLEND,depthMask:!1})}var m=l|h<<2|u<<3;if(m!==this._flags){this._flags=m;var g=[];l&&g.push("COLOR_CORRECT"),h&&g.push("PER_FRAGMENT_ATMOSPHERE"),u&&g.push("GLOBE_TRANSLUCENT");var v=new KM({defines:g.concat("SKY_FROM_SPACE"),sources:[E_e,x_e]}),_=new KM({defines:g.concat("SKY_FROM_SPACE"),sources:[E_e,A_e]});this._spSkyFromSpace=LM.fromCache({context:c,vertexShaderSource:v,fragmentShaderSource:_}),v=new KM({defines:g.concat("SKY_FROM_ATMOSPHERE"),sources:[E_e,x_e]}),_=new KM({defines:g.concat("SKY_FROM_ATMOSPHERE"),sources:[E_e,A_e]}),this._spSkyFromAtmosphere=LM.fromCache({context:c,vertexShaderSource:v,fragmentShaderSource:_})}var b=e.camera.positionWC;return O.magnitude(b)>this._radiiAndDynamicAtmosphereColor.x?f.shaderProgram=this._spSkyFromSpace:f.shaderProgram=this._spSkyFromAtmosphere,f}}},T_e.prototype.isDestroyed=function(){return!1},T_e.prototype.destroy=function(){var e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyFromSpace=this._spSkyFromSpace&&this._spSkyFromSpace.destroy(),this._spSkyFromAtmosphere=this._spSkyFromAtmosphere&&this._spSkyFromAtmosphere.destroy(),Ks(this)};var D_e=T_e;function P_e(e){this.sources=e.sources,this._sources=void 0,this.show=Object(r.a)(e.show,!0),this._command=new CI({modelMatrix:Ae.clone(Ae.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0}P_e.prototype.update=function(e,t){var n=this;if(this.show&&(e.mode===IR.SCENE3D||e.mode===IR.MORPHING)&&e.passes.render){var i=e.context;if(this._sources!==this.sources){this._sources=this.sources;var r=this.sources;if(!Object(o.a)(r.positiveX)||!Object(o.a)(r.negativeX)||!Object(o.a)(r.positiveY)||!Object(o.a)(r.negativeY)||!Object(o.a)(r.positiveZ)||!Object(o.a)(r.negativeZ))throw new a.a("this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.");if(typeof r.positiveX!==typeof r.negativeX||typeof r.positiveX!==typeof r.positiveY||typeof r.positiveX!==typeof r.negativeY||typeof r.positiveX!==typeof r.positiveZ||typeof r.positiveX!==typeof r.negativeZ)throw new a.a("this.sources properties must all be the same type.");"string"===typeof r.positiveX?Oee(i,this._sources).then((function(e){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=e})):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new eI({context:i,source:r}))}var s=this._command;if(!Object(o.a)(s.vertexArray)){s.uniformMap={u_cubeMap:function(){return n._cubeMap}};var c=Ql.createGeometry(Ql.fromDimensions({dimensions:new O(2,2,2),vertexFormat:Ul.POSITION_ONLY})),l=this._attributeLocations=jd.createAttributeLocations(c);s.vertexArray=hR.fromGeometry({context:i,geometry:c,attributeLocations:l,bufferUsage:iR.STATIC_DRAW}),s.renderState=XI.fromCache({blending:LP.ALPHA_BLEND})}if(!Object(o.a)(s.shaderProgram)||this._useHdr!==t){var u=new KM({defines:[t?"HDR":""],sources:["uniform samplerCube u_cubeMap;\n\nvarying vec3 v_texCoord;\n\nvoid main()\n{\n vec4 color = textureCube(u_cubeMap, normalize(v_texCoord));\n gl_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\n}\n"]});s.shaderProgram=LM.fromCache({context:i,vertexShaderSource:"attribute vec3 position;\n\nvarying vec3 v_texCoord;\n\nvoid main()\n{\n vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\n gl_Position = czm_projection * vec4(p, 1.0);\n v_texCoord = position.xyz;\n}\n",fragmentShaderSource:u,attributeLocations:this._attributeLocations}),this._useHdr=t}if(Object(o.a)(this._cubeMap))return s}},P_e.prototype.isDestroyed=function(){return!1},P_e.prototype.destroy=function(){var e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),Ks(this)};var I_e=P_e;function M_e(e){e=Object(r.a)(e,1),i.a.typeOf.number.greaterThan("radius",e,0),this._radius=Object(r.a)(e,1)}Object.defineProperties(M_e.prototype,{radius:{get:function(){return this._radius},set:function(e){i.a.typeOf.number.greaterThan("value",e,0),this._radius=e}}}),M_e.prototype.emit=function(e){var t=d.randomBetween(0,d.TWO_PI),n=d.randomBetween(0,d.PI),i=d.randomBetween(0,this._radius),r=i*Math.cos(t)*Math.sin(n),o=i*Math.sin(t)*Math.sin(n),a=i*Math.cos(n);e.position=O.fromElements(r,o,a,e.position),e.velocity=O.normalize(e.position,e.velocity)};function R_e(){}R_e.prototype.evaluate=function(e,t){a.a.throwInstantiationError()},R_e.prototype.evaluateColor=function(e,t){a.a.throwInstantiationError()},R_e.prototype.getShaderFunction=function(e,t,n,i){a.a.throwInstantiationError()};function L_e(){this.show=!0,this._drawCommand=new CI({primitiveType:xl.TRIANGLES,boundingVolume:new gt,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new gt,this._boundingVolume2D=new gt,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;var e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(L_e.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var j_e=new Mt,F_e=new Mt,N_e=new he,z_e=new he;L_e.prototype.update=function(e,t,n){if(this.show){var i=e.mode;if(i!==IR.SCENE2D&&i!==IR.MORPHING&&e.passes.render){var r=e.context,a=t.viewport.width,s=t.viewport.height;if(!Object(o.a)(this._texture)||a!==this._drawingBufferWidth||s!==this._drawingBufferHeight||this._glowFactorDirty||n!==this._useHdr){this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=a,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=n;var c=Math.max(a,s);c=Math.pow(2,Math.ceil(Math.log(c)/Math.log(2))-2),c=Math.max(1,c);var l=n?r.halfFloatingPointTexture?LC.HALF_FLOAT:LC.FLOAT:LC.UNSIGNED_BYTE;this._texture=new nI({context:r,width:c,height:c,pixelFormat:FC.RGBA,pixelDatatype:l}),this._glowLengthTS=5*this._glowFactor,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;var u=this,h={u_radiusTS:function(){return u._radiusTS}};this._commands.computeCommand=new nV({fragmentShaderSource:"uniform float u_radiusTS;\n\nvarying vec2 v_textureCoordinates;\n\nvec2 rotate(vec2 p, vec2 direction)\n{\n return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);\n}\n\nvec4 addBurst(vec2 position, vec2 direction, float lengthScalar)\n{\n vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);\n float radius = length(rotatedPosition) * lengthScalar;\n float burst = 1.0 - smoothstep(0.0, 0.55, radius);\n return vec4(burst);\n}\n\nvoid main()\n{\n float lengthScalar = 2.0 / sqrt(2.0);\n vec2 position = v_textureCoordinates - vec2(0.5);\n float radius = length(position) * lengthScalar;\n float surface = step(radius, u_radiusTS);\n vec4 color = vec4(vec2(1.0), surface + 0.2, surface);\n\n float glow = 1.0 - smoothstep(0.0, 0.55, radius);\n color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;\n\n vec4 burst = vec4(0.0);\n\n // The following loop has been manually unrolled for speed, to\n // avoid sin() and cos().\n //\n //for (float i = 0.4; i < 3.2; i += 1.047) {\n // vec2 direction = vec2(sin(i), cos(i));\n // burst += 0.4 * addBurst(position, direction, lengthScalar);\n //\n // direction = vec2(sin(i - 0.08), cos(i - 0.08));\n // burst += 0.3 * addBurst(position, direction, lengthScalar);\n //}\n\n burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4\n burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047\n burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0\n\n burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08\n burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08\n burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08\n\n // End of manual loop unrolling.\n\n color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;\n\n gl_FragColor = clamp(color, vec4(0.0), vec4(1.0));\n}\n",outputTexture:this._texture,uniformMap:h,persists:!1,owner:this,postExecute:function(){u._commands.computeCommand=void 0}})}var f=this._drawCommand;if(!Object(o.a)(f.vertexArray)){var p={direction:0},m=new Uint8Array(8);m[0]=0,m[1]=0,m[2]=255,m[3]=0,m[4]=255,m[5]=255,m[6]=0,m[7]=255;var g=oR.createVertexBuffer({context:r,typedArray:m,usage:iR.STATIC_DRAW}),v=[{index:p.direction,vertexBuffer:g,componentsPerAttribute:2,normalize:!0,componentDatatype:Ds.UNSIGNED_BYTE}],_=oR.createIndexBuffer({context:r,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:iR.STATIC_DRAW,indexDatatype:lc.UNSIGNED_SHORT});f.vertexArray=new hR({context:r,attributes:v,indexBuffer:_}),f.shaderProgram=LM.fromCache({context:r,vertexShaderSource:"attribute vec2 direction;\n\nuniform float u_size;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main() \n{\n vec4 position;\n if (czm_morphTime == 1.0)\n {\n position = vec4(czm_sunPositionWC, 1.0);\n }\n else\n {\n position = vec4(czm_sunPositionColumbusView.zxy, 1.0);\n }\n \n vec4 positionEC = czm_view * position;\n vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\n \n vec2 halfSize = vec2(u_size * 0.5);\n halfSize *= ((direction * 2.0) - 1.0);\n \n gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);\n \n v_textureCoordinates = direction;\n}\n",fragmentShaderSource:"uniform sampler2D u_texture;\n\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n vec4 color = texture2D(u_texture, v_textureCoordinates);\n gl_FragColor = czm_gammaCorrect(color);\n}\n",attributeLocations:p}),f.renderState=XI.fromCache({blending:LP.ALPHA_BLEND}),f.uniformMap=this._uniformMap}var b=r.uniformState.sunPositionWC,y=r.uniformState.sunPositionColumbusView,w=this._boundingVolume,C=this._boundingVolume2D;O.clone(b,w.center),C.center.x=y.z,C.center.y=y.x,C.center.z=y.y,w.radius=d.SOLAR_RADIUS+d.SOLAR_RADIUS*this._glowLengthTS,C.radius=w.radius,i===IR.SCENE3D?gt.clone(w,f.boundingVolume):i===IR.COLUMBUS_VIEW&>.clone(C,f.boundingVolume);var E=bq.computeActualWgs84Position(e,b,z_e),A=O.magnitude(O.subtract(E,e.camera.position,z_e)),x=r.uniformState.projection,T=N_e;T.x=0,T.y=0,T.z=-A,T.w=1;var S=Ae.multiplyByVector(x,T,z_e),D=bq.clipToGLWindowCoordinates(t.viewport,S,j_e);T.x=d.SOLAR_RADIUS;var P=Ae.multiplyByVector(x,T,z_e),I=bq.clipToGLWindowCoordinates(t.viewport,P,F_e);return this._size=Mt.magnitude(Mt.subtract(I,D,z_e)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands}}},L_e.prototype.isDestroyed=function(){return!1},L_e.prototype.destroy=function(){var e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),Ks(this)};var k_e=L_e;function B_e(){}B_e.prototype.boundingVolume=void 0,B_e.prototype.boundingSphere=void 0,B_e.prototype.distanceToCamera=function(e){a.a.throwInstantiationError()},B_e.prototype.intersectPlane=function(e){a.a.throwInstantiationError()},B_e.prototype.createDebugVolume=function(e){a.a.throwInstantiationError()};function H_e(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),this._tilingScheme=Object(o.a)(e.tilingScheme)?e.tilingScheme:new Lt({ellipsoid:e.ellipsoid}),this._color=Object(r.a)(e.color,Hf.YELLOW),this._errorEvent=new wn.a,this._tileWidth=Object(r.a)(e.tileWidth,256),this._tileHeight=Object(r.a)(e.tileHeight,256),this._readyPromise=Yt.a.resolve(!0),this.defaultAlpha=void 0,this.defaultNightAlpha=void 0,this.defaultDayAlpha=void 0,this.defaultBrightness=void 0,this.defaultContrast=void 0,this.defaultHue=void 0,this.defaultSaturation=void 0,this.defaultGamma=void 0,this.defaultMinificationFilter=void 0,this.defaultMagnificationFilter=void 0}Object.defineProperties(H_e.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},ready:{get:function(){return!0}},readyPromise:{get:function(){return this._readyPromise}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}}),H_e.prototype.getTileCredits=function(e,t,n){},H_e.prototype.requestImage=function(e,t,n,i){var r=document.createElement("canvas");r.width=256,r.height=256;var o=r.getContext("2d"),a=this._color.toCssColorString();return o.strokeStyle=a,o.lineWidth=2,o.strokeRect(1,1,255,255),o.font="bold 25px Arial",o.textAlign="center",o.fillStyle=a,o.fillText("L: "+n,124,86),o.fillText("X: "+e,124,136),o.fillText("Y: "+t,124,186),r},H_e.prototype.pickFeatures=function(e,t,n,i,r){};var V_e=H_e;function U_e(e){a.a.throwInstantiationError()}U_e.prototype.isReady=a.a.throwInstantiationError,U_e.prototype.shouldDiscardImage=a.a.throwInstantiationError;Object.freeze({START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3});function W_e(e){e=Object(r.a)(e,r.a.EMPTY_OBJECT),i.a.typeOf.object("options.clock",e.clock),i.a.typeOf.object("options.intervals",e.intervals),this.show=Object(r.a)(e.show,!0),this.modelMatrix=Ae.clone(Object(r.a)(e.modelMatrix,Ae.IDENTITY)),this.shadows=Object(r.a)(e.shadows,RR.ENABLED),this.maximumMemoryUsage=Object(r.a)(e.maximumMemoryUsage,256),this.shading=new zG(e.shading),this.style=e.style,this.frameFailed=new wn.a,this.frameChanged=new wn.a,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new FG,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._readyPromise=Yt.a.defer(),this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=nl(new Array(5),0),this._runningAverage=0}function G_e(e){return"uniform vec4 czm_pickColor;\n"+e}function q_e(){return"czm_pickColor"}Object.defineProperties(W_e.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){lH.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(Object(o.a)(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}},readyPromise:{get:function(){return this._readyPromise.promise}}}),W_e.prototype.makeStyleDirty=function(){this._styleDirty=!0},W_e.prototype._getAverageLoadTime=function(){return 0===this._runningLength?.05:this._runningAverage};var Y_e=new hr;function $_e(e){var t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function X_e(e,t){return e._intervals.indexOf(t.start)}function K_e(e,t,n){var i=X_e(e,t),r=e._frames,a=r[i];if(!Object(o.a)(a)){var s=t.data.transform,c=Object(o.a)(s)?Ae.fromArray(s):void 0,l=t.data.uri;a={pointCloud:void 0,transform:c,timestamp:Sf(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber},r[i]=a,_t.a.fetchArrayBuffer({url:l}).then((function(t){var n;return a.pointCloud=new AG({arrayBuffer:t,cull:!0,fragmentShaderLoaded:G_e,uniformMapLoaded:(n=e,function(e){return Object(Wf.a)(e,{czm_pickColor:function(){return n._pickId.color}})}),pickIdLoaded:q_e}),a.pointCloud.readyPromise})).otherwise(function(e,t){return function(n){var i=Object(o.a)(n.message)?n.message:n.toString();e.frameFailed.numberOfListeners>0?e.frameFailed.raiseEvent({uri:t,message:i}):(console.log("A frame failed to load: "+t),console.log("Error: "+i))}}(e,l))}return a}function Q_e(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);var r=t.pointCloud;if(Object(o.a)(r)&&!t.ready){var a=i.commandList,s=a.length;if(ebe(e,t,n,i),r.ready)if(t.ready=!0,e._totalMemoryUsageInBytes+=r.geometryByteLength,a.length=s,t.sequential)!function(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}(e,(Sf()-t.timestamp)/1e3)}t.touchedFrameNumber=i.frameNumber}var Z_e=new Ae;var J_e=new zG;function ebe(e,t,n,i){var a=Object(r.a)(e.shading,J_e),s=t.pointCloud,c=Object(r.a)(t.transform,Ae.IDENTITY);s.modelMatrix=Ae.multiplyTransformation(e.modelMatrix,c,Z_e),s.style=e.style,s.time=n.timeSinceLoad,s.shadows=e.shadows,s.clippingPlanes=e._clippingPlanes,s.isClipped=n.isClipped,s.attenuation=a.attenuation,s.backFaceCulling=a.backFaceCulling,s.normalShading=a.normalShading,s.geometricError=function(e,t){var n=e.shading;return Object(o.a)(n)&&Object(o.a)(n.baseResolution)?n.baseResolution:Object(o.a)(t.boundingSphere)?d.cbrt(t.boundingSphere.volume()/t.pointsLength):0}(e,s),s.geometricErrorScale=a.geometricErrorScale,s.maximumAttenuation=function(e){var t=e.shading;return Object(o.a)(t)&&Object(o.a)(t.maximumAttenuation)?t.maximumAttenuation:10}(e),s.update(i),t.touchedFrameNumber=i.frameNumber}function tbe(e,t,n,i){Q_e(e,K_e(e,t,i),n,i)}function nbe(e,t){for(var n=e._frames,i=n.length,r=0;r<i;++r){var a=n[r];if(Object(o.a)(a)&&(!Object(o.a)(t)||t(a))){var s=a.pointCloud;a.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),Object(o.a)(s)&&s.destroy(),a===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[r]=void 0}}}function ibe(e,t,n,i,r){return!!Object(o.a)(n)&&(!!n.ready||(tbe(e,t,i,r),n.ready))}var rbe={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};W_e.prototype.update=function(e){if(e.mode!==IR.MORPHING&&this.show){Object(o.a)(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),Object(o.a)(this._loadTimestamp)||(this._loadTimestamp=hr.clone(e.time));var t=Math.max(1e3*hr.secondsDifference(e.time,this._loadTimestamp),0),n=this._clippingPlanes,i=0,r=!1,a=Object(o.a)(n)&&n.enabled;a&&(n.update(e),i=n.clippingPlanesState),this._clippingPlanesState!==i&&(this._clippingPlanesState=i,r=!0);var s=this._styleDirty;this._styleDirty=!1,(r||s)&&function(e,t,n){for(var i=e._frames,r=i.length,a=0;a<r;++a){var s=i[a];Object(o.a)(s)&&Object(o.a)(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}(this,r,s),rbe.timeSinceLoad=t,rbe.isClipped=a;var c=this.shading,l=this._pointCloudEyeDomeLighting,u=e.commandList,h=u.length,d=this._previousInterval,f=this._nextInterval,p=function(e){var t=e._intervals,n=e._clock.currentTime,i=t.indexOf(n);return t.get(i)}(this);if(Object(o.a)(p)){var m=!1,g=$_e(this),v=0===g;g!==this._clockMultiplier&&(m=!0,this._clockMultiplier=g),Object(o.a)(d)&&!v||(d=p),(!Object(o.a)(f)||m||function(e,t,n){var i=$_e(e),r=X_e(e,t),o=X_e(e,n);return i>=0?r>=o:r<=o}(this,p,f))&&(f=function(e,t){var n=e._intervals,i=e._clock,r=$_e(e);if(0!==r){var o=e._getAverageLoadTime(),a=hr.addSeconds(i.currentTime,o*r,Y_e),s=n.indexOf(a);return s===X_e(e,t)&&(r>=0?++s:--s),n.get(s)}}(this,p));var _=function(e,t){var n=X_e(e,t),i=e._frames[n];if(Object(o.a)(i)&&i.ready)return i}(this,d=function(e,t,n,i,r){var o,a,s=e._intervals,c=e._frames,l=X_e(e,n),u=X_e(e,t);if(l>=u){for(o=l;o>=u;--o)if(ibe(e,a=s.get(o),c[o],i,r))return a}else for(o=l;o<=u;++o)if(ibe(e,a=s.get(o),c[o],i,r))return a;return t}(this,d,p,rbe,e));Object(o.a)(_)||(tbe(this,d,rbe,e),_=this._lastRenderedFrame),Object(o.a)(_)&&ebe(this,_,rbe,e),Object(o.a)(f)&&tbe(this,f,rbe,e);var b=this;Object(o.a)(_)&&!Object(o.a)(this._lastRenderedFrame)&&e.afterRender.push((function(){b._readyPromise.resolve(b)})),Object(o.a)(_)&&_!==this._lastRenderedFrame&&b.frameChanged.numberOfListeners>0&&e.afterRender.push((function(){b.frameChanged.raiseEvent(b)})),this._previousInterval=d,this._nextInterval=f,this._lastRenderedFrame=_,this._totalMemoryUsageInBytes>1024*this.maximumMemoryUsage*1024&&nbe(this,function(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}(e));var y=u.length-h;Object(o.a)(c)&&c.attenuation&&c.eyeDomeLighting&&y>0&&l.update(e,h,c,this.boundingSphere)}}},W_e.prototype.isDestroyed=function(){return!1},W_e.prototype.destroy=function(){return nbe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),Ks(this)};var obe=W_e;function abe(e,t){this.show=!0,Object(o.a)(e)||(e=new bl),this.rectangle=bl.clone(e),Object(o.a)(t)||(t=mI.fromType(mI.ColorType,{color:new Hf(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}abe.prototype.update=function(e){if(this.show){if(!Object(o.a)(this.material))throw new a.a("this.material must be defined.");if(!Object(o.a)(this.rectangle))throw new a.a("this.rectangle must be defined.");var t=this._rs;if(Object(o.a)(t)&&bl.equals(t.viewport,this.rectangle)||(this._rs=XI.fromCache({blending:LP.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){var n=e.context;if(this._material!==this.material||!Object(o.a)(this._overlayCommand)){this._material=this.material,Object(o.a)(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();var i=new KM({sources:[this._material.shaderSource,"\nvarying vec2 v_textureCoordinates;\n\nvoid main()\n{\n czm_materialInput materialInput;\n \n materialInput.s = v_textureCoordinates.s;\n materialInput.st = v_textureCoordinates;\n materialInput.str = vec3(v_textureCoordinates, 0.0);\n materialInput.normalEC = vec3(0.0, 0.0, -1.0);\n \n czm_material material = czm_getMaterial(materialInput);\n\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\n}\n"]});this._overlayCommand=n.createViewportQuadCommand(i,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=EI.OVERLAY}this._material.update(n),this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}}},abe.prototype.isDestroyed=function(){return!1},abe.prototype.destroy=function(){return Object(o.a)(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),Ks(this)};var sbe=n(131);function cbe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=lbe(e,!0);return(t=t||Object.getOwnPropertyNames(e)).forEach((function(t){if("__knockoutObservables"!==t&&"__knockoutSubscribable"!==t&&!(t in i)){var r=e[t],o=r instanceof Array,a=n.isObservable(r)?r:o?n.observableArray(r):n.observable(r);Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:a,set:n.isWriteableObservable(a)?a:void 0}),i[t]=a,o&&function(e,t){var n=null;e.computed((function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=function(e,t,n){return function(e,t){var n=t.__knockoutSubscribable;if(!n){n=new e.subscribable,Object.defineProperty(t,"__knockoutSubscribable",{value:n});var i={};!function(e,t,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach((function(i){var r=e[i];e[i]=function(){var e=r.apply(this,arguments);return!0!==n.pause&&t.notifySubscribers(this),e}}))}(t,n,i),function(e,t,n,i){["remove","removeAll","destroy","destroyAll","replace"].forEach((function(r){Object.defineProperty(t,r,{enumerable:!1,value:function(){var o;i.pause=!0;try{o=e.observableArray.fn[r].apply(e.observableArray(t),arguments)}finally{i.pause=!1}return n.notifySubscribers(t),o}})}))}(e,t,n,i)}return n}(e,n).subscribe(t)}(e,t,i))}))}(n,a)}})),e}function lbe(e,t){var n=e.__knockoutObservables;return!n&&t&&(n={},Object.defineProperty(e,"__knockoutObservables",{value:n})),n}function ube(e,t,n){var i={owner:e,deferEvaluation:!0};if("function"===typeof n)i.read=n;else{if("value"in n)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if("function"!==typeof n.get)throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');i.read=n.get,i.write=n.set}return e[t]=this.computed(i),cbe.call(this,e,[t]),e}function hbe(e,t){if(!e)return null;var n=lbe(e,!1);return n&&n[t]||null}function dbe(e,t){var n=hbe(e,t);n&&n.valueHasMutated()}var fbe={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){var i=document.createElementNS("http://www.w3.org/2000/svg","svg:svg");i.setAttribute("class","cesium-svgPath-svg");var r=document.createElementNS("http://www.w3.org/2000/svg","path");return i.appendChild(r),e.virtualElements.setDomNodeChildren(t,[i]),e.computed({read:function(){var t=e.unwrap(n());r.setAttribute("d",e.unwrap(t.path));var o=e.unwrap(t.width),a=e.unwrap(t.height);i.setAttribute("width",o),i.setAttribute("height",a),i.setAttribute("viewBox","0 0 "+o+" "+a),t.css&&i.setAttribute("class","cesium-svgPath-svg "+e.unwrap(t.css))},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}};({attachToKo:function(e){e.track=cbe,e.getObservable=hbe,e.valueHasMutated=dbe,e.defineProperty=ube}}).attachToKo(sbe.a),fbe.register(sbe.a);var pbe=sbe.a,mbe={};!function(){var e=function(){var e={defaultNoDataValue:-34027999387901484e22,decode:function(o,a){var s=(a=a||{}).encodedMaskData||null===a.encodedMaskData,c=r(o,a.inputOffset||0,s),l=null!==a.noDataValue?a.noDataValue:e.defaultNoDataValue,u=t(c,a.pixelType||Float32Array,a.encodedMaskData,l,a.returnMask),h={width:c.width,height:c.height,pixelData:u.resultPixels,minValue:u.minValue,maxValue:c.pixels.maxValue,noDataValue:l};return u.resultMask&&(h.maskData=u.resultMask),a.returnEncodedMask&&c.mask&&(h.encodedMaskData=c.mask.bitset?c.mask.bitset:null),a.returnFileInfo&&(h.fileInfo=n(c),a.computeUsedBitDepths&&(h.fileInfo.bitDepths=i(c))),h}},t=function(e,t,n,i,r){var a,s,c,l=0,u=e.pixels.numBlocksX,h=e.pixels.numBlocksY,d=Math.floor(e.width/u),f=Math.floor(e.height/h),p=2*e.maxZError,m=Number.MAX_VALUE;n=n||(e.mask?e.mask.bitset:null),s=new t(e.width*e.height),r&&n&&(c=new Uint8Array(e.width*e.height));for(var g,v,_=new Float32Array(d*f),b=0;b<=h;b++){var y=b!==h?f:e.height%h;if(0!==y)for(var w=0;w<=u;w++){var O=w!==u?d:e.width%u;if(0!==O){var C,E,A,x,T=b*e.width*f+w*d,S=e.width-O,D=e.pixels.blocks[l];if(D.encoding<2?(0===D.encoding?C=D.rawData:(o(D.stuffedData,D.bitsPerPixel,D.numValidPixels,D.offset,p,_,e.pixels.maxValue),C=_),E=0):A=2===D.encoding?0:D.offset,n)for(v=0;v<y;v++){for(7&T&&(x=n[T>>3],x<<=7&T),g=0;g<O;g++)7&T||(x=n[T>>3]),128&x?(c&&(c[T]=1),m=m>(a=D.encoding<2?C[E++]:A)?a:m,s[T++]=a):(c&&(c[T]=0),s[T++]=i),x<<=1;T+=S}else if(D.encoding<2)for(v=0;v<y;v++){for(g=0;g<O;g++)m=m>(a=C[E++])?a:m,s[T++]=a;T+=S}else for(m=m>A?A:m,v=0;v<y;v++){for(g=0;g<O;g++)s[T++]=A;T+=S}if(1===D.encoding&&E!==D.numValidPixels)throw"Block and Mask do not match";l++}}}return{resultPixels:s,resultMask:c,minValue:m}},n=function(e){return{fileIdentifierString:e.fileIdentifierString,fileVersion:e.fileVersion,imageType:e.imageType,height:e.height,width:e.width,maxZError:e.maxZError,eofOffset:e.eofOffset,mask:e.mask?{numBlocksX:e.mask.numBlocksX,numBlocksY:e.mask.numBlocksY,numBytes:e.mask.numBytes,maxValue:e.mask.maxValue}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,numBytes:e.pixels.numBytes,maxValue:e.pixels.maxValue,noDataValue:e.noDataValue}}},i=function(e){for(var t=e.pixels.numBlocksX*e.pixels.numBlocksY,n={},i=0;i<t;i++){var r=e.pixels.blocks[i];0===r.encoding?n.float32=!0:1===r.encoding?n[r.bitsPerPixel]=!0:n[0]=!0}return Object.keys(n)},r=function(e,t,n){var i={},r=new Uint8Array(e,t,10);if(i.fileIdentifierString=String.fromCharCode.apply(null,r),"CntZImage"!==i.fileIdentifierString.trim())throw"Unexpected file identifier string: "+i.fileIdentifierString;t+=10;var o=new DataView(e,t,24);if(i.fileVersion=o.getInt32(0,!0),i.imageType=o.getInt32(4,!0),i.height=o.getUint32(8,!0),i.width=o.getUint32(12,!0),i.maxZError=o.getFloat64(16,!0),t+=24,!n)if(o=new DataView(e,t,16),i.mask={},i.mask.numBlocksY=o.getUint32(0,!0),i.mask.numBlocksX=o.getUint32(4,!0),i.mask.numBytes=o.getUint32(8,!0),i.mask.maxValue=o.getFloat32(12,!0),t+=16,i.mask.numBytes>0){var a=new Uint8Array(Math.ceil(i.width*i.height/8)),s=(o=new DataView(e,t,i.mask.numBytes)).getInt16(0,!0),c=2,l=0;do{if(s>0)for(;s--;)a[l++]=o.getUint8(c++);else{var u=o.getUint8(c++);for(s=-s;s--;)a[l++]=u}s=o.getInt16(c,!0),c+=2}while(c<i.mask.numBytes);if(-32768!==s||l<a.length)throw"Unexpected end of mask RLE encoding";i.mask.bitset=a,t+=i.mask.numBytes}else 0===(i.mask.numBytes|i.mask.numBlocksY|i.mask.maxValue)&&(i.mask.bitset=new Uint8Array(Math.ceil(i.width*i.height/8)));o=new DataView(e,t,16),i.pixels={},i.pixels.numBlocksY=o.getUint32(0,!0),i.pixels.numBlocksX=o.getUint32(4,!0),i.pixels.numBytes=o.getUint32(8,!0),i.pixels.maxValue=o.getFloat32(12,!0),t+=16;var h=i.pixels.numBlocksX,d=i.pixels.numBlocksY,f=h+(i.width%h>0?1:0),p=d+(i.height%d>0?1:0);i.pixels.blocks=new Array(f*p);for(var m=0,g=0;g<p;g++)for(var v=0;v<f;v++){var _=0,b=e.byteLength-t;o=new DataView(e,t,Math.min(10,b));var y={};i.pixels.blocks[m++]=y;var w=o.getUint8(0);if(_++,y.encoding=63&w,y.encoding>3)throw"Invalid block encoding ("+y.encoding+")";if(2!==y.encoding){if(0!==w&&2!==w){if(w>>=6,y.offsetType=w,2===w)y.offset=o.getInt8(1),_++;else if(1===w)y.offset=o.getInt16(1,!0),_+=2;else{if(0!==w)throw"Invalid block offset type";y.offset=o.getFloat32(1,!0),_+=4}if(1===y.encoding)if(w=o.getUint8(_),_++,y.bitsPerPixel=63&w,w>>=6,y.numValidPixelsType=w,2===w)y.numValidPixels=o.getUint8(_),_++;else if(1===w)y.numValidPixels=o.getUint16(_,!0),_+=2;else{if(0!==w)throw"Invalid valid pixel count type";y.numValidPixels=o.getUint32(_,!0),_+=4}}var O;if(t+=_,3!==y.encoding)if(0===y.encoding){var C=(i.pixels.numBytes-1)/4;if(C!==Math.floor(C))throw"uncompressed block has invalid length";O=new ArrayBuffer(4*C),new Uint8Array(O).set(new Uint8Array(e,t,4*C));var E=new Float32Array(O);y.rawData=E,t+=4*C}else if(1===y.encoding){var A=Math.ceil(y.numValidPixels*y.bitsPerPixel/8),x=Math.ceil(A/4);O=new ArrayBuffer(4*x),new Uint8Array(O).set(new Uint8Array(e,t,A)),y.stuffedData=new Uint32Array(O),t+=A}}else t++}return i.eofOffset=t,i},o=function(e,t,n,i,r,o,a){var s,c,l,u=(1<<t)-1,h=0,d=0,f=Math.ceil((a-i)/r),p=4*e.length-Math.ceil(t*n/8);for(e[e.length-1]<<=8*p,s=0;s<n;s++){if(0===d&&(l=e[h++],d=32),d>=t)c=l>>>d-t&u,d-=t;else{var m=t-d;c=(l&u)<<m&u,c+=(l=e[h++])>>>(d=32-m)}o[s]=c<f?i+c*r:a}return o};return e}(),t=function(){var e=function(e,t,n,i,r,o,a,s){var c,l,u,h,d,f=(1<<n)-1,p=0,m=0,g=4*e.length-Math.ceil(n*i/8);if(e[e.length-1]<<=8*g,r)for(c=0;c<i;c++)0===m&&(u=e[p++],m=32),m>=n?(l=u>>>m-n&f,m-=n):(l=(u&f)<<(h=n-m)&f,l+=(u=e[p++])>>>(m=32-h)),t[c]=r[l];else for(d=Math.ceil((s-o)/a),c=0;c<i;c++)0===m&&(u=e[p++],m=32),m>=n?(l=u>>>m-n&f,m-=n):(l=(u&f)<<(h=n-m)&f,l+=(u=e[p++])>>>(m=32-h)),t[c]=l<d?o+l*a:s},t=function(e,t,n,i,r,o){var a,s=(1<<t)-1,c=0,l=0,u=0,h=0,d=0,f=[],p=4*e.length-Math.ceil(t*n/8);e[e.length-1]<<=8*p;var m=Math.ceil((o-i)/r);for(l=0;l<n;l++)0===h&&(a=e[c++],h=32),h>=t?(d=a>>>h-t&s,h-=t):(d=(a&s)<<(u=t-h)&s,d+=(a=e[c++])>>>(h=32-u)),f[l]=d<m?i+d*r:o;return f.unshift(i),f},n=function(e,t,n,i,r,o,a,s){var c,l,u,h,d=(1<<n)-1,f=0,p=0,m=0;if(r)for(c=0;c<i;c++)0===p&&(u=e[f++],p=32,m=0),p>=n?(l=u>>>m&d,p-=n,m+=n):(l=u>>>m&d,p=32-(h=n-p),l|=((u=e[f++])&(1<<h)-1)<<n-h,m=h),t[c]=r[l];else{var g=Math.ceil((s-o)/a);for(c=0;c<i;c++)0===p&&(u=e[f++],p=32,m=0),p>=n?(l=u>>>m&d,p-=n,m+=n):(l=u>>>m&d,p=32-(h=n-p),l|=((u=e[f++])&(1<<h)-1)<<n-h,m=h),t[c]=l<g?o+l*a:s}return t},i=function(e,t,n,i,r,o){var a,s=(1<<t)-1,c=0,l=0,u=0,h=0,d=0,f=0,p=[],m=Math.ceil((o-i)/r);for(l=0;l<n;l++)0===h&&(a=e[c++],h=32,f=0),h>=t?(d=a>>>f&s,h-=t,f+=t):(d=a>>>f&s,h=32-(u=t-h),d|=((a=e[c++])&(1<<u)-1)<<t-u,f=u),p[l]=d<m?i+d*r:o;return p.unshift(i),p},r=function(e,t,n,i){var r,o,a,s,c=(1<<n)-1,l=0,u=0,h=4*e.length-Math.ceil(n*i/8);for(e[e.length-1]<<=8*h,r=0;r<i;r++)0===u&&(a=e[l++],u=32),u>=n?(o=a>>>u-n&c,u-=n):(o=(a&c)<<(s=n-u)&c,o+=(a=e[l++])>>>(u=32-s)),t[r]=o;return t},o=function(e,t,n,i){var r,o,a,s,c=(1<<n)-1,l=0,u=0,h=0;for(r=0;r<i;r++)0===u&&(a=e[l++],u=32,h=0),u>=n?(o=a>>>h&c,u-=n,h+=n):(o=a>>>h&c,u=32-(s=n-u),o|=((a=e[l++])&(1<<s)-1)<<n-s,h=s),t[r]=o;return t},a={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(e){for(var t=65535,n=65535,i=e.length,r=Math.floor(i/2),o=0;r;){var a=r>=359?359:r;r-=a;do{t+=e[o++]<<8,n+=t+=e[o++]}while(--a);t=(65535&t)+(t>>>16),n=(65535&n)+(n>>>16)}return 1&i&&(n+=t+=e[o]<<8),((n=(65535&n)+(n>>>16))<<16|(t=(65535&t)+(t>>>16)))>>>0},readHeaderInfo:function(e,t){var n=t.ptr,i=new Uint8Array(e,n,6),r={};if(r.fileIdentifierString=String.fromCharCode.apply(null,i),0!==r.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+r.fileIdentifierString;n+=6;var o,a=new DataView(e,n,8),s=a.getInt32(0,!0);if(r.fileVersion=s,n+=4,s>=3&&(r.checksum=a.getUint32(4,!0),n+=4),a=new DataView(e,n,12),r.height=a.getUint32(0,!0),r.width=a.getUint32(4,!0),n+=8,s>=4?(r.numDims=a.getUint32(8,!0),n+=4):r.numDims=1,a=new DataView(e,n,40),r.numValidPixel=a.getUint32(0,!0),r.microBlockSize=a.getInt32(4,!0),r.blobSize=a.getInt32(8,!0),r.imageType=a.getInt32(12,!0),r.maxZError=a.getFloat64(16,!0),r.zMin=a.getFloat64(24,!0),r.zMax=a.getFloat64(32,!0),n+=40,t.headerInfo=r,t.ptr=n,s>=3&&(o=s>=4?52:48,this.computeChecksumFletcher32(new Uint8Array(e,n-o,r.blobSize-14))!==r.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(e,t){var n=t.headerInfo,i=this.getDataTypeArray(n.imageType),r=n.numDims*this.getDataTypeSize(n.imageType),o=this.readSubArray(e,t.ptr,i,r),a=this.readSubArray(e,t.ptr+r,i,r);t.ptr+=2*r;var s,c=!0;for(s=0;s<n.numDims;s++)if(o[s]!==a[s]){c=!1;break}return n.minValues=o,n.maxValues=a,c},readSubArray:function(e,t,n,i){var r;if(n===Uint8Array)r=new Uint8Array(e,t,i);else{var o=new ArrayBuffer(i);new Uint8Array(o).set(new Uint8Array(e,t,i)),r=new n(o)}return r},readMask:function(e,t){var n,i,r=t.ptr,o=t.headerInfo,a=o.width*o.height,s=o.numValidPixel,c=new DataView(e,r,4),l={};if(l.numBytes=c.getUint32(0,!0),r+=4,(0===s||a===s)&&0!==l.numBytes)throw"invalid mask";if(0===s)n=new Uint8Array(Math.ceil(a/8)),l.bitset=n,i=new Uint8Array(a),t.pixels.resultMask=i,r+=l.numBytes;else if(l.numBytes>0){n=new Uint8Array(Math.ceil(a/8));var u=(c=new DataView(e,r,l.numBytes)).getInt16(0,!0),h=2,d=0,f=0;do{if(u>0)for(;u--;)n[d++]=c.getUint8(h++);else for(f=c.getUint8(h++),u=-u;u--;)n[d++]=f;u=c.getInt16(h,!0),h+=2}while(h<l.numBytes);if(-32768!==u||d<n.length)throw"Unexpected end of mask RLE encoding";i=new Uint8Array(a);var p=0,m=0;for(m=0;m<a;m++)7&m?(p=n[m>>3],p<<=7&m):p=n[m>>3],128&p&&(i[m]=1);t.pixels.resultMask=i,l.bitset=n,r+=l.numBytes}return t.ptr=r,t.mask=l,!0},readDataOneSweep:function(e,t,n){var i,r=t.ptr,o=t.headerInfo,s=o.numDims,c=o.width*o.height,l=o.imageType,u=o.numValidPixel*a.getDataTypeSize(l)*s,h=t.pixels.resultMask;if(n===Uint8Array)i=new Uint8Array(e,r,u);else{var d=new ArrayBuffer(u);new Uint8Array(d).set(new Uint8Array(e,r,u)),i=new n(d)}if(i.length===c*s)t.pixels.resultPixels=i;else{t.pixels.resultPixels=new n(c*s);var f=0,p=0,m=0,g=0;if(s>1)for(m=0;m<s;m++)for(g=m*c,p=0;p<c;p++)h[p]&&(t.pixels.resultPixels[g+p]=i[f++]);else for(p=0;p<c;p++)h[p]&&(t.pixels.resultPixels[p]=i[f++])}return r+=u,t.ptr=r,!0},readHuffmanTree:function(e,t){var n=this.HUFFMAN_LUT_BITS_MAX,i=new DataView(e,t.ptr,16);if(t.ptr+=16,i.getInt32(0,!0)<2)throw"unsupported Huffman version";var r=i.getInt32(4,!0),o=i.getInt32(8,!0),c=i.getInt32(12,!0);if(o>=c)return!1;var l=new Uint32Array(c-o);a.decodeBits(e,t,l);var u,h,d,f,p=[];for(u=o;u<c;u++)p[h=u-(u<r?0:r)]={first:l[u-o],second:null};var m=e.byteLength-t.ptr,g=Math.ceil(m/4),v=new ArrayBuffer(4*g);new Uint8Array(v).set(new Uint8Array(e,t.ptr,m));var _,b=new Uint32Array(v),y=0,w=0;for(_=b[0],u=o;u<c;u++)(f=p[h=u-(u<r?0:r)].first)>0&&(p[h].second=_<<y>>>32-f,32-y>=f?32===(y+=f)&&(y=0,_=b[++w]):(y+=f-32,_=b[++w],p[h].second|=_>>>32-y));var O=0,C=0,E=new s;for(u=0;u<p.length;u++)void 0!==p[u]&&(O=Math.max(O,p[u].first));C=O>=n?n:O,O>=30&&console.log("WARning, large NUM LUT BITS IS "+O);var A,x,T,S,D,P=[];for(u=o;u<c;u++)if((f=p[h=u-(u<r?0:r)].first)>0)if(A=[f,h],f<=C)for(x=p[h].second<<C-f,T=1<<C-f,d=0;d<T;d++)P[x|d]=A;else for(x=p[h].second,D=E,S=f-1;S>=0;S--)x>>>S&1?(D.right||(D.right=new s),D=D.right):(D.left||(D.left=new s),D=D.left),0!==S||D.val||(D.val=A[1]);return{decodeLut:P,numBitsLUTQick:C,numBitsLUT:O,tree:E,stuffedData:b,srcPtr:w,bitPos:y}},readHuffman:function(e,t,n){var i,r,o,a,s,c,l,u,h,d=t.headerInfo,f=d.numDims,p=t.headerInfo.height,m=t.headerInfo.width,g=m*p,v=this.readHuffmanTree(e,t),_=v.decodeLut,b=v.tree,y=v.stuffedData,w=v.srcPtr,O=v.bitPos,C=v.numBitsLUTQick,E=v.numBitsLUT,A=0===t.headerInfo.imageType?128:0,x=t.pixels.resultMask,T=0;O>0&&(w++,O=0);var S,D=y[w],P=1===t.encodeMode,I=new n(g*f),M=I;for(S=0;S<d.numDims;S++){if(f>1&&(M=new n(I.buffer,g*S,g),T=0),t.headerInfo.numValidPixel===m*p)for(u=0,c=0;c<p;c++)for(l=0;l<m;l++,u++){if(r=0,s=a=D<<O>>>32-C,32-O<C&&(s=a|=y[w+1]>>>64-O-C),_[s])r=_[s][1],O+=_[s][0];else for(s=a=D<<O>>>32-E,32-O<E&&(s=a|=y[w+1]>>>64-O-E),i=b,h=0;h<E;h++)if(!(i=a>>>E-h-1&1?i.right:i.left).left&&!i.right){r=i.val,O=O+h+1;break}O>=32&&(O-=32,D=y[++w]),o=r-A,P?(o+=l>0?T:c>0?M[u-m]:T,o&=255,M[u]=o,T=o):M[u]=o}else for(u=0,c=0;c<p;c++)for(l=0;l<m;l++,u++)if(x[u]){if(r=0,s=a=D<<O>>>32-C,32-O<C&&(s=a|=y[w+1]>>>64-O-C),_[s])r=_[s][1],O+=_[s][0];else for(s=a=D<<O>>>32-E,32-O<E&&(s=a|=y[w+1]>>>64-O-E),i=b,h=0;h<E;h++)if(!(i=a>>>E-h-1&1?i.right:i.left).left&&!i.right){r=i.val,O=O+h+1;break}O>=32&&(O-=32,D=y[++w]),o=r-A,P?(l>0&&x[u-1]?o+=T:c>0&&x[u-m]?o+=M[u-m]:o+=T,o&=255,M[u]=o,T=o):M[u]=o}t.ptr=t.ptr+4*(w+1)+(O>0?4:0)}t.pixels.resultPixels=I},decodeBits:function(a,s,c,l,u){var h=s.headerInfo,d=h.fileVersion,f=0,p=a.byteLength-s.ptr>=5?5:a.byteLength-s.ptr,m=new DataView(a,s.ptr,p),g=m.getUint8(0);f++;var v=g>>6,_=0===v?4:3-v,b=(32&g)>0,y=31&g,w=0;if(1===_)w=m.getUint8(f),f++;else if(2===_)w=m.getUint16(f,!0),f+=2;else{if(4!==_)throw"Invalid valid pixel count type";w=m.getUint32(f,!0),f+=4}var O,C,E,A,x,T,S,D,P,I=2*h.maxZError,M=h.numDims>1?h.maxValues[u]:h.zMax;if(b){for(s.counter.lut++,D=m.getUint8(f),y,f++,A=Math.ceil((D-1)*y/8),x=Math.ceil(A/4),C=new ArrayBuffer(4*x),E=new Uint8Array(C),s.ptr+=f,E.set(new Uint8Array(a,s.ptr,A)),S=new Uint32Array(C),s.ptr+=A,P=0;D-1>>>P;)P++;A=Math.ceil(w*P/8),x=Math.ceil(A/4),C=new ArrayBuffer(4*x),(E=new Uint8Array(C)).set(new Uint8Array(a,s.ptr,A)),O=new Uint32Array(C),s.ptr+=A,T=d>=3?i(S,y,D-1,l,I,M):t(S,y,D-1,l,I,M),d>=3?n(O,c,P,w,T):e(O,c,P,w,T)}else s.counter.bitstuffer++,P=y,s.ptr+=f,P>0&&(A=Math.ceil(w*P/8),x=Math.ceil(A/4),C=new ArrayBuffer(4*x),(E=new Uint8Array(C)).set(new Uint8Array(a,s.ptr,A)),O=new Uint32Array(C),s.ptr+=A,d>=3?null===l?o(O,c,P,w):n(O,c,P,w,!1,l,I,M):null===l?r(O,c,P,w):e(O,c,P,w,!1,l,I,M))},readTiles:function(e,t,n){var i=t.headerInfo,r=i.width,o=i.height,s=i.microBlockSize,c=i.imageType,l=a.getDataTypeSize(c),u=Math.ceil(r/s),h=Math.ceil(o/s);t.pixels.numBlocksY=h,t.pixels.numBlocksX=u,t.pixels.ptr=0;var d,f,p,m,g,v,_,b,y=0,w=0,O=0,C=0,E=0,A=0,x=0,T=0,S=0,D=0,P=0,I=0,M=0,R=0,L=0,j=new n(s*s),F=o%s||s,N=r%s||s,z=i.numDims,k=t.pixels.resultMask,B=t.pixels.resultPixels;for(O=0;O<h;O++)for(E=O!==h-1?s:F,C=0;C<u;C++)for(D=O*r*s+C*s,P=r-(A=C!==u-1?s:N),b=0;b<z;b++){if(z>1&&(B=new n(t.pixels.resultPixels.buffer,r*o*b*l,r*o)),x=e.byteLength-t.ptr,f={},L=0,L++,S=(T=(d=new DataView(e,t.ptr,Math.min(10,x))).getUint8(0))>>6&255,(T>>2&15)!==(C*s>>3&15))throw"integrity issue";if((g=3&T)>3)throw t.ptr+=L,"Invalid block encoding ("+g+")";if(2!==g)if(0===g){if(t.counter.uncompressed++,t.ptr+=L,I=(I=E*A*l)<(M=e.byteLength-t.ptr)?I:M,p=new ArrayBuffer(I%l===0?I:I+l-I%l),new Uint8Array(p).set(new Uint8Array(e,t.ptr,I)),m=new n(p),R=0,k)for(y=0;y<E;y++){for(w=0;w<A;w++)k[D]&&(B[D]=m[R++]),D++;D+=P}else for(y=0;y<E;y++){for(w=0;w<A;w++)B[D++]=m[R++];D+=P}t.ptr+=R*l}else if(v=a.getDataTypeUsed(c,S),_=a.getOnePixel(f,L,v,d),L+=a.getDataTypeSize(v),3===g)if(t.ptr+=L,t.counter.constantoffset++,k)for(y=0;y<E;y++){for(w=0;w<A;w++)k[D]&&(B[D]=_),D++;D+=P}else for(y=0;y<E;y++){for(w=0;w<A;w++)B[D++]=_;D+=P}else if(t.ptr+=L,a.decodeBits(e,t,j,_,b),L=0,k)for(y=0;y<E;y++){for(w=0;w<A;w++)k[D]&&(B[D]=j[L++]),D++;D+=P}else for(y=0;y<E;y++){for(w=0;w<A;w++)B[D++]=j[L++];D+=P}else t.counter.constant++,t.ptr+=L}},formatFileInfo:function(e){return{fileIdentifierString:e.headerInfo.fileIdentifierString,fileVersion:e.headerInfo.fileVersion,imageType:e.headerInfo.imageType,height:e.headerInfo.height,width:e.headerInfo.width,numValidPixel:e.headerInfo.numValidPixel,microBlockSize:e.headerInfo.microBlockSize,blobSize:e.headerInfo.blobSize,maxZError:e.headerInfo.maxZError,pixelType:a.getPixelType(e.headerInfo.imageType),eofOffset:e.eofOffset,mask:e.mask?{numBytes:e.mask.numBytes}:null,pixels:{numBlocksX:e.pixels.numBlocksX,numBlocksY:e.pixels.numBlocksY,maxValue:e.headerInfo.zMax,minValue:e.headerInfo.zMin,noDataValue:e.noDataValue}}},constructConstantSurface:function(e){var t=e.headerInfo.zMax,n=e.headerInfo.numDims,i=e.headerInfo.height*e.headerInfo.width,r=i*n,o=0,a=0,s=0,c=e.pixels.resultMask;if(c)if(n>1)for(o=0;o<n;o++)for(s=o*i,a=0;a<i;a++)c[a]&&(e.pixels.resultPixels[s+a]=t);else for(a=0;a<i;a++)c[a]&&(e.pixels.resultPixels[a]=t);else if(e.pixels.resultPixels.fill)e.pixels.resultPixels.fill(t);else for(a=0;a<r;a++)e.pixels.resultPixels[a]=t},getDataTypeArray:function(e){var t;switch(e){case 0:t=Int8Array;break;case 1:t=Uint8Array;break;case 2:t=Int16Array;break;case 3:t=Uint16Array;break;case 4:t=Int32Array;break;case 5:t=Uint32Array;break;case 6:t=Float32Array;break;case 7:t=Float64Array;break;default:t=Float32Array}return t},getPixelType:function(e){var t;switch(e){case 0:t="S8";break;case 1:t="U8";break;case 2:t="S16";break;case 3:t="U16";break;case 4:t="S32";break;case 5:t="U32";break;case 6:t="F32";break;case 7:t="F64";break;default:t="F32"}return t},isValidPixelValue:function(e,t){if(null===t)return!1;var n;switch(e){case 0:n=t>=-128&&t<=127;break;case 1:n=t>=0&&t<=255;break;case 2:n=t>=-32768&&t<=32767;break;case 3:n=t>=0&&t<=65536;break;case 4:n=t>=-2147483648&&t<=2147483647;break;case 5:n=t>=0&&t<=4294967296;break;case 6:n=t>=-34027999387901484e22&&t<=34027999387901484e22;break;case 7:n=t>=5e-324&&t<=17976931348623157e292;break;default:n=!1}return n},getDataTypeSize:function(e){var t=0;switch(e){case 0:case 1:t=1;break;case 2:case 3:t=2;break;case 4:case 5:case 6:t=4;break;case 7:t=8;break;default:t=e}return t},getDataTypeUsed:function(e,t){var n=e;switch(e){case 2:case 4:n=e-t;break;case 3:case 5:n=e-2*t;break;case 6:n=0===t?e:1===t?2:1;break;case 7:n=0===t?e:e-2*t+1;break;default:n=e}return n},getOnePixel:function(e,t,n,i){var r=0;switch(n){case 0:r=i.getInt8(t);break;case 1:r=i.getUint8(t);break;case 2:r=i.getInt16(t,!0);break;case 3:r=i.getUint16(t,!0);break;case 4:r=i.getInt32(t,!0);break;case 5:r=i.getUInt32(t,!0);break;case 6:r=i.getFloat32(t,!0);break;case 7:r=i.getFloat64(t,!0);break;default:throw"the decoder does not understand this pixel type"}return r}},s=function(e,t,n){this.val=e,this.left=t,this.right=n};return{decode:function(e,t){var n=(t=t||{}).noDataValue,i=0,r={};if(r.ptr=t.inputOffset||0,r.pixels={},a.readHeaderInfo(e,r)){var o=r.headerInfo,s=o.fileVersion,c=a.getDataTypeArray(o.imageType);a.readMask(e,r),o.numValidPixel===o.width*o.height||r.pixels.resultMask||(r.pixels.resultMask=t.maskData);var l,u=o.width*o.height;if(r.pixels.resultPixels=new c(u*o.numDims),r.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},0!==o.numValidPixel)if(o.zMax===o.zMin)a.constructConstantSurface(r);else if(s>=4&&a.checkMinMaxRanges(e,r))a.constructConstantSurface(r);else{var h=new DataView(e,r.ptr,2),d=h.getUint8(0);if(r.ptr++,d)a.readDataOneSweep(e,r,c);else if(s>1&&o.imageType<=1&&Math.abs(o.maxZError-.5)<1e-5){var f=h.getUint8(1);if(r.ptr++,r.encodeMode=f,f>2||s<4&&f>1)throw"Invalid Huffman flag "+f;f?a.readHuffman(e,r,c):a.readTiles(e,r,c)}else a.readTiles(e,r,c)}r.eofOffset=r.ptr,t.inputOffset?(l=r.headerInfo.blobSize+t.inputOffset-r.ptr,Math.abs(l)>=1&&(r.eofOffset=t.inputOffset+r.headerInfo.blobSize)):(l=r.headerInfo.blobSize-r.ptr,Math.abs(l)>=1&&(r.eofOffset=r.headerInfo.blobSize));var p={width:o.width,height:o.height,pixelData:r.pixels.resultPixels,minValue:o.zMin,maxValue:o.zMax,validPixelCount:o.numValidPixel,dimCount:o.numDims,dimStats:{minValues:o.minValues,maxValues:o.maxValues},maskData:r.pixels.resultMask};if(r.pixels.resultMask&&a.isValidPixelValue(o.imageType,n)){var m=r.pixels.resultMask;for(i=0;i<u;i++)m[i]||(p.pixelData[i]=n);p.noDataValue=n}return r.noDataValue=n,t.returnFileInfo&&(p.fileInfo=a.formatFileInfo(r)),p}},getBandCount:function(e){for(var t=0,n=0,i={ptr:0,pixels:{}};n<e.byteLength-58;)a.readHeaderInfo(e,i),n+=i.headerInfo.blobSize,t++,i.ptr=n;return t}}}(),n=function(){var e=new ArrayBuffer(4),t=new Uint8Array(e);return new Uint32Array(e)[0]=1,1===t[0]}(),i={decode:function(i,r){if(!n)throw"Big endian system is not supported.";var o,a,s=(r=r||{}).inputOffset||0,c=new Uint8Array(i,s,10),l=String.fromCharCode.apply(null,c);if("CntZImage"===l.trim())o=e,a=1;else{if("Lerc2"!==l.substring(0,5))throw"Unexpected file identifier string: "+l;o=t,a=2}for(var u,h,d,f,p,m,g=0,v=i.byteLength-10,_=[],b={width:0,height:0,pixels:[],pixelType:r.pixelType,mask:null,statistics:[]};s<v;){var y=o.decode(i,{inputOffset:s,encodedMaskData:u,maskData:d,returnMask:0===g,returnEncodedMask:0===g,returnFileInfo:!0,pixelType:r.pixelType||null,noDataValue:r.noDataValue||null});s=y.fileInfo.eofOffset,0===g&&(u=y.encodedMaskData,d=y.maskData,b.width=y.width,b.height=y.height,b.dimCount=y.dimCount||1,b.pixelType=y.pixelType||y.fileInfo.pixelType,b.mask=y.maskData),a>1&&y.fileInfo.mask&&y.fileInfo.mask.numBytes>0&&_.push(y.maskData),g++,b.pixels.push(y.pixelData),b.statistics.push({minValue:y.minValue,maxValue:y.maxValue,noDataValue:y.noDataValue,dimStats:y.dimStats})}if(a>1&&_.length>1){for(m=b.width*b.height,b.bandMasks=_,(d=new Uint8Array(m)).set(_[0]),f=1;f<_.length;f++)for(h=_[f],p=0;p<m;p++)d[p]=d[p]&h[p];b.maskData=d}return b}};mbe.Lerc=i}();mbe.Lerc;var gbe={};!function(e,t){e.NoSleep=t()}(gbe,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var r=n(1),o=r.webm,a=r.mp4,s="undefined"!==typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,c=function(){function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),s?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("muted",""),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",o),this._addSourceToVideo(this.noSleepVideo,"mp4",a),this.noSleepVideo.addEventListener("loadedmetadata",(function(){t.noSleepVideo.duration<=1?t.noSleepVideo.setAttribute("loop",""):t.noSleepVideo.addEventListener("timeupdate",(function(){t.noSleepVideo.currentTime>.5&&(t.noSleepVideo.currentTime=Math.random())}))})))}return i(e,[{key:"_addSourceToVideo",value:function(e,t,n){var i=document.createElement("source");i.src=n,i.type="video/"+t,e.appendChild(i)}},{key:"enable",value:function(){s?(this.disable(),console.warn("\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n "),this.noSleepTimer=window.setInterval((function(){document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))}),15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){s?this.noSleepTimer&&(console.warn("\n NoSleep now disabled for older iOS devices.\n "),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),e}();e.exports=c},function(e,t,n){e.exports={webm:"data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=",mp4:"data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQAD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"}}])}));var vbe=gbe.NoSleep;function _be(e){Object(o.a)(e)||(e=new Rf),this._clock=e,this._eventHelper=new Ib,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=pbe.observable(hr.now()),this.systemTime.equalityComparer=hr.equals,this.startTime=pbe.observable(e.startTime),this.startTime.equalityComparer=hr.equals,this.startTime.subscribe((function(t){e.startTime=t,this.synchronize()}),this),this.stopTime=pbe.observable(e.stopTime),this.stopTime.equalityComparer=hr.equals,this.stopTime.subscribe((function(t){e.stopTime=t,this.synchronize()}),this),this.currentTime=pbe.observable(e.currentTime),this.currentTime.equalityComparer=hr.equals,this.currentTime.subscribe((function(t){e.currentTime=t,this.synchronize()}),this),this.multiplier=pbe.observable(e.multiplier),this.multiplier.subscribe((function(t){e.multiplier=t,this.synchronize()}),this),this.clockStep=pbe.observable(e.clockStep),this.clockStep.subscribe((function(t){e.clockStep=t,this.synchronize()}),this),this.clockRange=pbe.observable(e.clockRange),this.clockRange.subscribe((function(t){e.clockRange=t,this.synchronize()}),this),this.canAnimate=pbe.observable(e.canAnimate),this.canAnimate.subscribe((function(t){e.canAnimate=t,this.synchronize()}),this),this.shouldAnimate=pbe.observable(e.shouldAnimate),this.shouldAnimate.subscribe((function(t){e.shouldAnimate=t,this.synchronize()}),this),pbe.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(_be.prototype,{clock:{get:function(){return this._clock}}}),_be.prototype.synchronize=function(){var e=this._clock;this.systemTime=hr.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate},_be.prototype.isDestroyed=function(){return!1},_be.prototype.destroy=function(){this._eventHelper.removeAll(),Ks(this)};var bbe=_be;var ybe=function(e,t){if(!Object(o.a)(e))throw new a.a("func is required.");t=Object(r.a)(t,!0);var n=new wn.a,i=new wn.a;function s(){if(!s.canExecute)throw new a.a("Cannot execute command, canExecute is false.");var t,r={args:arguments,cancel:!1};return n.raiseEvent(r),r.cancel||(t=e.apply(null,arguments),i.raiseEvent(t)),t}return s.canExecute=t,pbe.track(s,["canExecute"]),Object.defineProperties(s,{beforeExecute:{value:n},afterExecute:{value:i}}),s},wbe={createCheckbox:function(e,t,n){i.a.typeOf.string("labelText",e),i.a.typeOf.string("checkedBinding",t);var r=document.createElement("div"),a=document.createElement("label"),s=document.createElement("input");s.type="checkbox";var c="checked: "+t;return Object(o.a)(n)&&(c+=", enable: "+n),s.setAttribute("data-bind",c),a.appendChild(s),a.appendChild(document.createTextNode(e)),r.appendChild(a),r},createSection:function(e,t,n,r){i.a.defined("panel",e),i.a.typeOf.string("headerText",t),i.a.typeOf.string("sectionVisibleBinding",n),i.a.typeOf.string("toggleSectionVisibilityBinding",r);var o=document.createElement("div");o.className="cesium-cesiumInspector-section",o.setAttribute("data-bind",'css: { "cesium-cesiumInspector-section-collapsed": !'+n+" }"),e.appendChild(o);var a=document.createElement("h3");a.className="cesium-cesiumInspector-sectionHeader",a.appendChild(document.createTextNode(t)),a.setAttribute("data-bind","click: "+r),o.appendChild(a);var s=document.createElement("div");return s.className="cesium-cesiumInspector-sectionContent",o.appendChild(s),s}},Obe=wbe;var Cbe=function(e,t,n,i,r){return n.call(i,e[t]),pbe.getObservable(e,t).subscribe(n,i,r)};function Ebe(e,t){if(!Object(o.a)(e))throw new a.a("command is required.");this._command=e,t=Object(r.a)(t,r.a.EMPTY_OBJECT),this.toggled=Object(r.a)(t.toggled,!1),this.tooltip=Object(r.a)(t.tooltip,""),pbe.track(this,["toggled","tooltip"])}Object.defineProperties(Ebe.prototype,{command:{get:function(){return this._command}}});var Abe=Ebe;var xbe,Tbe="http://www.w3.org/2000/svg",Sbe="http://www.w3.org/1999/xlink",Dbe=Hf.fromCssColorString("rgba(247,250,255,0.384)"),Pbe=Hf.fromCssColorString("rgba(143,191,255,0.216)"),Ibe=Hf.fromCssColorString("rgba(153,197,255,0.098)"),Mbe=Hf.fromCssColorString("rgba(255,255,255,0.086)"),Rbe=Hf.fromCssColorString("rgba(255,255,255,0.267)"),Lbe=Hf.fromCssColorString("rgba(255,255,255,0)"),jbe=Hf.fromCssColorString("rgba(66,67,68,0.3)"),Fbe=Hf.fromCssColorString("rgba(0,0,0,0.5)");function Nbe(e){return Hf.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var zbe={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function kbe(e){var t=document.createElementNS(Tbe,e.tagName);for(var n in e)if(e.hasOwnProperty(n)&&"tagName"!==n)if("children"===n){var i,r=e.children.length;for(i=0;i<r;++i)t.appendChild(kbe(e.children[i]))}else 0===n.indexOf("xlink:")?t.setAttributeNS(Sbe,n.substring(6),e[n]):"textContent"===n?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function Bbe(e,t,n){var i=document.createElementNS(Tbe,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");var r=document.createElementNS(Tbe,"tspan");return r.textContent=n,i.appendChild(r),i}var Hbe=new Hf;function Vbe(e,t){var n=t.alpha,i=1-n;return Hbe.red=e.red*i+t.red*n,Hbe.green=e.green*i+t.green*n,Hbe.blue=e.blue*i+t.blue*n,Hbe.toCssColorString()}function Ube(e,t,n){var i=zbe[n];return kbe({tagName:"g",class:"cesium-animation-rectButton",transform:"translate("+e+","+t+")",children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]})}function Wbe(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;var n=this;this._clickFunction=function(){var e=n._viewModel.command;e.canExecute&&e()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[Cbe(t,"toggled",this.setToggled,this),Cbe(t,"tooltip",this.setTooltip,this),Cbe(t.command,"canExecute",this.setEnabled,this)]}function Gbe(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("viewModel is required.");e=ohe(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;var n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);var r=document.createElement("div");r.className="cesium-animation-theme",r.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=r,this._themeNormal=r.childNodes[0],this._themeHover=r.childNodes[1],this._themeSelect=r.childNodes[2],this._themeDisabled=r.childNodes[3],this._themeKnob=r.childNodes[4],this._themePointer=r.childNodes[5],this._themeSwoosh=r.childNodes[6],this._themeSwooshHover=r.childNodes[7];var s=document.createElementNS(Tbe,"svg:svg");this._svgNode=s,s.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",Sbe);var c=document.createElementNS(Tbe,"g");this._topG=c,this._realtimeSVG=new Wbe(function(e,t,n){var i=zbe[n],r=zbe.animation_pathWingButton;return kbe({tagName:"g",class:"cesium-animation-rectButton",transform:"translate("+e+","+t+")",children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:r.tagName,d:r.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:r.tagName,d:r.d},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]})}(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new Wbe(Ube(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new Wbe(Ube(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new Wbe(Ube(84,99,"animation_pathPause"),t.pauseViewModel);var l=document.createElementNS(Tbe,"g");l.appendChild(this._realtimeSVG.svgElement),l.appendChild(this._playReverseSVG.svgElement),l.appendChild(this._playForwardSVG.svgElement),l.appendChild(this._pauseSVG.svgElement);var u=kbe({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=u;var h=zbe.animation_pathSwooshFX,d=zbe.animation_pathPointer,f=kbe({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:h.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:h.d},{tagName:h.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:h.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=f,this._shuttleRingPointer=kbe({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:d.tagName,d:d.d});var p=kbe({tagName:"g",transform:"translate(100,100)"});this._knobOuter=kbe({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});var m=kbe({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:61});this._knobDate=Bbe(0,-24,""),this._knobTime=Bbe(0,-7,""),this._knobStatus=Bbe(0,-41,"");var g=kbe({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:61}),v=document.createElementNS(Tbe,"g");v.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(r),c.appendChild(v),c.appendChild(p),c.appendChild(l),v.appendChild(u),v.appendChild(f),v.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(m),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(g),s.appendChild(c),e.appendChild(s);var _=this;function b(e){!function(e,t){var n=e._viewModel,i=n.shuttleRingDragging;if(!i||xbe===e)if("mousedown"===t.type||i&&"mousemove"===t.type||"touchstart"===t.type&&1===t.touches.length||i&&"touchmove"===t.type&&1===t.touches.length){var r,o,a=e._centerX,s=e._centerY,c=e._svgNode.getBoundingClientRect();if("touchstart"===t.type||"touchmove"===t.type?(r=t.touches[0].clientX,o=t.touches[0].clientY):(r=t.clientX,o=t.clientY),!i&&(r>c.right||r<c.left||o<c.top||o>c.bottom))return;var l=e._shuttleRingPointer.getBoundingClientRect(),u=r-a-c.left,h=o-s-c.top,d=180*Math.atan2(h,u)/Math.PI+90;d>180&&(d-=360);var f=n.shuttleRingAngle;i||r<l.right&&r>l.left&&o>l.top&&o<l.bottom?(xbe=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=d):d<f?n.slower():d>f&&n.faster(),t.preventDefault()}else e===xbe&&(xbe=void 0),n.shuttleRingDragging=!1}(_,e)}this._mouseCallback=b,u.addEventListener("mousedown",b,!0),u.addEventListener("touchstart",b,!0),f.addEventListener("mousedown",b,!0),f.addEventListener("touchstart",b,!0),n.addEventListener("mousemove",b,!0),n.addEventListener("touchmove",b,!0),n.addEventListener("mouseup",b,!0),n.addEventListener("touchend",b,!0),n.addEventListener("touchcancel",b,!0),this._shuttleRingPointer.addEventListener("mousedown",b,!0),this._shuttleRingPointer.addEventListener("touchstart",b,!0),this._knobOuter.addEventListener("mousedown",b,!0),this._knobOuter.addEventListener("touchstart",b,!0);var y,w=this._knobTime.childNodes[0],O=this._knobDate.childNodes[0],C=this._knobStatus.childNodes[0];this._subscriptions=[Cbe(t.pauseViewModel,"toggled",(function(e){y!==e&&((y=e)?_._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):_._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))})),Cbe(t,"shuttleRingAngle",(function(e){var t,n,i;t=_._shuttleRingPointer,n=_._knobOuter,i=e,t.setAttribute("transform","translate(100,100) rotate("+i+")"),n.setAttribute("transform","rotate("+i+")")})),Cbe(t,"dateLabel",(function(e){O.textContent!==e&&(O.textContent=e)})),Cbe(t,"timeLabel",(function(e){w.textContent!==e&&(w.textContent=e)})),Cbe(t,"multiplierLabel",(function(e){C.textContent!==e&&(C.textContent=e)}))],this.applyThemeChanges(),this.resize()}Wbe.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);for(var e=this._subscriptions,t=0,n=e.length;t<n;t++)e[t].dispose();Ks(this)},Wbe.prototype.isDestroyed=function(){return!1},Wbe.prototype.setEnabled=function(e){if(this._enabled!==e){if(this._enabled=e,!e)return void this.svgElement.setAttribute("class","cesium-animation-buttonDisabled");if(this._toggled)return void this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled");this.svgElement.setAttribute("class","cesium-animation-rectButton")}},Wbe.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))},Wbe.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e},Object.defineProperties(Gbe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Gbe.prototype.isDestroyed=function(){return!1},Gbe.prototype.destroy=function(){Object(o.a)(this._observer)&&(this._observer.disconnect(),this._observer=void 0);var e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();for(var n=this._subscriptions,i=0,r=n.length;i<r;i++)n[i].dispose();return Ks(this)},Gbe.prototype.resize=function(){var e=this._container.clientWidth,t=this._container.clientHeight;if(e!==this._lastWidth||t!==this._lastHeight){var n=this._svgNode,i=e,r=t;0===e&&0===t?(i=200,r=132):0===e?(r=t,i=t/132*200):0===t&&(i=e,r=e/200*132);var o=i/200,a=r/132;n.style.cssText="width: "+i+"px; height: "+r+"px; position: absolute; bottom: 0; left: 0; overflow: hidden;",n.setAttribute("width",i),n.setAttribute("height",r),n.setAttribute("viewBox","0 0 "+i+" "+r),this._topG.setAttribute("transform","scale("+o+","+a+")"),this._centerX=Math.max(1,100*o),this._centerY=Math.max(1,100*a),this._lastHeight=e,this._lastWidth=t}},Gbe.prototype.applyThemeChanges=function(){var e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(Object(o.a)(this._observer))return;var t=this;return t._observer=new MutationObserver((function(){e.body.contains(t._container)&&(t._observer.disconnect(),t._observer=void 0,t.applyThemeChanges())})),void t._observer.observe(e,{childList:!0,subtree:!0})}var n=Nbe(this._themeNormal),i=Nbe(this._themeHover),r=Nbe(this._themeSelect),a=Nbe(this._themeDisabled),s=Nbe(this._themeKnob),c=Nbe(this._themePointer),l=Nbe(this._themeSwoosh),u=Nbe(this._themeSwooshHover),h=kbe({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Vbe(n,Dbe)},{tagName:"stop",offset:"12%","stop-color":Vbe(n,Pbe)},{tagName:"stop",offset:"46%","stop-color":Vbe(n,Ibe)},{tagName:"stop",offset:"81%","stop-color":Vbe(n,Mbe)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Vbe(i,Dbe)},{tagName:"stop",offset:"12%","stop-color":Vbe(i,Pbe)},{tagName:"stop",offset:"46%","stop-color":Vbe(i,Ibe)},{tagName:"stop",offset:"81%","stop-color":Vbe(i,Mbe)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Vbe(r,Dbe)},{tagName:"stop",offset:"12%","stop-color":Vbe(r,Pbe)},{tagName:"stop",offset:"46%","stop-color":Vbe(r,Ibe)},{tagName:"stop",offset:"81%","stop-color":Vbe(r,Mbe)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Vbe(a,Rbe)},{tagName:"stop",offset:"75%","stop-color":Vbe(a,Lbe)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":l.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":l.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":l.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":u.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":u.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":u.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":c.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":c.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":Vbe(c,Fbe)},{tagName:"stop",offset:"100%","stop-color":Vbe(c,Fbe)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Vbe(s,Dbe)},{tagName:"stop",offset:"60%","stop-color":Vbe(s,jbe)},{tagName:"stop",offset:"85%","stop-color":Vbe(s,Pbe)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Vbe(s,jbe)},{tagName:"stop",offset:"60%","stop-color":Vbe(s,Dbe)},{tagName:"stop",offset:"85%","stop-color":Vbe(s,Mbe)}]}]});Object(o.a)(this._defsElement)?this._svgNode.replaceChild(h,this._defsElement):this._svgNode.appendChild(h),this._defsElement=h};var qbe=Gbe,Ybe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function $be(e,t){return e-t}function Xbe(e,t){var n=Ni(t,e,$be);return n<0?~n:n}function Kbe(e){if(!Object(o.a)(e))throw new a.a("clockViewModel is required.");var t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=Kbe.defaultDateFormatter,this._timeFormatter=Kbe.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,pbe.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(Kbe.defaultTicks),this.timeLabel=void 0,pbe.defineProperty(this,"timeLabel",(function(){return t._timeFormatter(t._clockViewModel.currentTime,t)})),this.dateLabel=void 0,pbe.defineProperty(this,"dateLabel",(function(){return t._dateFormatter(t._clockViewModel.currentTime,t)})),this.multiplierLabel=void 0,pbe.defineProperty(this,"multiplierLabel",(function(){var e=t._clockViewModel;if(e.clockStep===Tf.SYSTEM_CLOCK)return"Today";var n=e.multiplier;return n%1===0?n.toFixed(0)+"x":n.toFixed(3).replace(/0{0,3}$/,"")+"x"})),this.shuttleRingAngle=void 0,pbe.defineProperty(this,"shuttleRingAngle",{get:function(){return function(e,t,n){if(n.clockStep===Tf.SYSTEM_CLOCK)return 15;if(Math.abs(e)<=1)return 15*e;var i,r=t[t.length-1];return e>r?e=r:e<-r&&(e=-r),e>0?(i=(Math.log(r)-0)/90,(Math.log(e)-0)/i+15):(i=(Math.log(-t[0])-0)/90,-((Math.log(Math.abs(e))-0)/i+15))}(e.multiplier,t._allShuttleRingTicks,e)},set:function(e){e=Math.max(Math.min(e,105),-105);var n=t._allShuttleRingTicks,i=t._clockViewModel;if(i.clockStep=Tf.SYSTEM_CLOCK_MULTIPLIER,105!==Math.abs(e)){var r=function(e,t){return Math.abs(e)<=15?e/15:e>0?(n=(Math.log(t[t.length-1])-0)/90,Math.exp(0+n*(e-15))):(n=(Math.log(-t[0])-0)/90,-Math.exp(0+n*(Math.abs(e)-15)));var n}(e,n);if(t.snapToTicks)r=n[Xbe(r,n)];else if(0!==r){var o=Math.abs(r);if(o>100){var a=o.toFixed(0).length-2,s=Math.pow(10,a);r=Math.round(r/s)*s|0}else o>15?r=Math.round(r):o>1?r=+r.toFixed(1):o>0&&(r=+r.toFixed(2))}i.multiplier=r}else i.multiplier=e>0?n[n.length-1]:n[0]}}),this._canAnimate=void 0,pbe.defineProperty(this,"_canAnimate",(function(){var e=t._clockViewModel,n=e.clockRange;if(t.shuttleRingDragging||n===xf.UNBOUNDED)return!0;var i=e.multiplier,r=e.currentTime,o=e.startTime,a=!1;if(n===xf.LOOP_STOP)a=hr.greaterThan(r,o)||r.equals(o)&&i>0;else{var s=e.stopTime;a=hr.greaterThan(r,o)&&hr.lessThan(r,s)||r.equals(o)&&i>0||r.equals(s)&&i<0}return a||(e.shouldAnimate=!1),a})),this._isSystemTimeAvailable=void 0,pbe.defineProperty(this,"_isSystemTimeAvailable",(function(){var e=t._clockViewModel;if(e.clockRange===xf.UNBOUNDED)return!0;var n=e.systemTime;return hr.greaterThanOrEquals(n,e.startTime)&&hr.lessThanOrEquals(n,e.stopTime)})),this._isAnimating=void 0,pbe.defineProperty(this,"_isAnimating",(function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)}));var n=ybe((function(){var e=t._clockViewModel;e.shouldAnimate?e.shouldAnimate=!1:t._canAnimate&&(e.shouldAnimate=!0)}));this._pauseViewModel=new Abe(n,{toggled:pbe.computed((function(){return!t._isAnimating})),tooltip:"Pause"});var i=ybe((function(){var e=t._clockViewModel,n=e.multiplier;n>0&&(e.multiplier=-n),e.shouldAnimate=!0}));this._playReverseViewModel=new Abe(i,{toggled:pbe.computed((function(){return t._isAnimating&&e.multiplier<0})),tooltip:"Play Reverse"});var r=ybe((function(){var e=t._clockViewModel,n=e.multiplier;n<0&&(e.multiplier=-n),e.shouldAnimate=!0}));this._playForwardViewModel=new Abe(r,{toggled:pbe.computed((function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==Tf.SYSTEM_CLOCK})),tooltip:"Play Forward"});var s=ybe((function(){t._clockViewModel.clockStep=Tf.SYSTEM_CLOCK}),pbe.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new Abe(s,{toggled:pbe.computed((function(){return e.clockStep===Tf.SYSTEM_CLOCK})),tooltip:pbe.computed((function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"}))}),this._slower=ybe((function(){var e=t._clockViewModel,n=t._allShuttleRingTicks,i=Xbe(e.multiplier,n)-1;i>=0&&(e.multiplier=n[i])})),this._faster=ybe((function(){var e=t._clockViewModel,n=t._allShuttleRingTicks,i=Xbe(e.multiplier,n)+1;i<n.length&&(e.multiplier=n[i])}))}Kbe.defaultDateFormatter=function(e,t){var n=hr.toGregorianDate(e);return Ybe[n.month-1]+" "+n.day+" "+n.year},Kbe.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800],Kbe.defaultTimeFormatter=function(e,t){var n=hr.toGregorianDate(e),i=Math.round(n.millisecond);return Math.abs(t._clockViewModel.multiplier)<1?ki("%02d:%02d:%02d.%03d",n.hour,n.minute,n.second,i):ki("%02d:%02d:%02d UTC",n.hour,n.minute,n.second)},Kbe.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)},Kbe.prototype.setShuttleRingTicks=function(e){if(!Object(o.a)(e))throw new a.a("positiveTicks is required.");var t,n,i,r={},s=this._sortedFilteredPositiveTicks;for(s.length=0,t=0,n=e.length;t<n;++t)i=e[t],r.hasOwnProperty(i)||(r[i]=!0,s.push(i));s.sort($be);var c=[];for(t=(n=s.length)-1;t>=0;--t)0!==(i=s[t])&&c.push(-i);Array.prototype.push.apply(c,s),this._allShuttleRingTicks=c},Object.defineProperties(Kbe.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){if("function"!==typeof e)throw new a.a("dateFormatter must be a function");this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){if("function"!==typeof e)throw new a.a("timeFormatter must be a function");this._timeFormatter=e}}}),Kbe._maxShuttleRingAngle=105,Kbe._realtimeShuttleRingAngle=15;var Qbe=Kbe;function Zbe(e){var t=(e=Object(r.a)(e,r.a.EMPTY_OBJECT)).globe,n=Object(r.a)(e.imageryProviderViewModels,[]),i=Object(r.a)(e.terrainProviderViewModels,[]);if(!Object(o.a)(t))throw new a.a("globe is required");this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,pbe.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);var s=pbe.getObservable(this,"imageryProviderViewModels"),c=pbe.pureComputed((function(){var e,t=s(),n={};for(e=0;e<t.length;e++){var i=t[e],r=i.category;Object(o.a)(n[r])?n[r].push(i):n[r]=[i]}var a=Object.keys(n),c=[];for(e=0;e<a.length;e++){var l=a[e];c.push({name:l,providers:n[l]})}return c}));this._imageryProviders=c;var l=pbe.getObservable(this,"terrainProviderViewModels"),u=pbe.pureComputed((function(){var e,t=l(),n={};for(e=0;e<t.length;e++){var i=t[e],r=i.category;Object(o.a)(n[r])?n[r].push(i):n[r]=[i]}var a=Object.keys(n),s=[];for(e=0;e<a.length;e++){var c=a[e];s.push({name:c,providers:n[c]})}return s}));this._terrainProviders=u,this.buttonTooltip=void 0,pbe.defineProperty(this,"buttonTooltip",(function(){var e=this.selectedImagery,t=this.selectedTerrain,n=Object(o.a)(e)?e.name:void 0,i=Object(o.a)(t)?t.name:void 0;return Object(o.a)(n)&&Object(o.a)(i)?n+"\n"+i:Object(o.a)(n)?n:i})),this.buttonImageUrl=void 0,pbe.defineProperty(this,"buttonImageUrl",(function(){var e=this.selectedImagery;if(Object(o.a)(e))return e.iconUrl})),this.selectedImagery=void 0;var h=pbe.observable();this._currentImageryProviders=[],pbe.defineProperty(this,"selectedImagery",{get:function(){return h()},set:function(e){if(h()!==e){var t,n=this._currentImageryProviders,i=n.length,r=this._globe.imageryLayers,a=!1;for(t=0;t<i;t++)for(var s=r.length,c=0;c<s;c++){var l=r.get(c);if(l.imageryProvider===n[t]){r.remove(l),a=!0;break}}if(Object(o.a)(e)){var u=e.creationCommand();if(Array.isArray(u)){for(t=u.length-1;t>=0;t--)r.addImageryProvider(u[t],0);this._currentImageryProviders=u.slice(0)}else if(this._currentImageryProviders=[u],a)r.addImageryProvider(u,0);else{var d=r.get(0);Object(o.a)(d)&&r.remove(d),r.addImageryProvider(u,0)}}h(e),this.dropDownVisible=!1}else this.dropDownVisible=!1}}),this.selectedTerrain=void 0;var d=pbe.observable();pbe.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(e){var t;d()!==e?(Object(o.a)(e)&&(t=e.creationCommand()),this._globe.depthTestAgainstTerrain=!(t instanceof Db),this._globe.terrainProvider=t,d(e),this.dropDownVisible=!1):this.dropDownVisible=!1}});var f=this;this._toggleDropDown=ybe((function(){f.dropDownVisible=!f.dropDownVisible})),this.selectedImagery=Object(r.a)(e.selectedImageryProviderViewModel,n[0]),this.selectedTerrain=Object(r.a)(e.selectedTerrainProviderViewModel,i[0])}Object.defineProperties(Zbe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var Jbe=Zbe;function eye(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e);var n=new Jbe(t),i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(i);var r=document.createElement("img");r.setAttribute("draggable","false"),r.className="cesium-baseLayerPicker-selected",r.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),i.appendChild(r);var s=document.createElement("div");s.className="cesium-baseLayerPicker-dropDown",s.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(s);var c=document.createElement("div");c.className="cesium-baseLayerPicker-sectionTitle",c.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),c.innerHTML="Imagery",s.appendChild(c);var l=document.createElement("div");l.className="cesium-baseLayerPicker-section",l.setAttribute("data-bind","foreach: _imageryProviders"),s.appendChild(l);var u=document.createElement("div");u.className="cesium-baseLayerPicker-category",l.appendChild(u);var h=document.createElement("div");h.className="cesium-baseLayerPicker-categoryTitle",h.setAttribute("data-bind","text: name"),u.appendChild(h);var d=document.createElement("div");d.className="cesium-baseLayerPicker-choices",d.setAttribute("data-bind","foreach: providers"),u.appendChild(d);var f=document.createElement("div");f.className="cesium-baseLayerPicker-item",f.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),d.appendChild(f);var p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),f.appendChild(p);var m=document.createElement("div");m.className="cesium-baseLayerPicker-itemLabel",m.setAttribute("data-bind","text: name"),f.appendChild(m);var g=document.createElement("div");g.className="cesium-baseLayerPicker-sectionTitle",g.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),g.innerHTML="Terrain",s.appendChild(g);var v=document.createElement("div");v.className="cesium-baseLayerPicker-section",v.setAttribute("data-bind","foreach: _terrainProviders"),s.appendChild(v);var _=document.createElement("div");_.className="cesium-baseLayerPicker-category",v.appendChild(_);var b=document.createElement("div");b.className="cesium-baseLayerPicker-categoryTitle",b.setAttribute("data-bind","text: name"),_.appendChild(b);var y=document.createElement("div");y.className="cesium-baseLayerPicker-choices",y.setAttribute("data-bind","foreach: providers"),_.appendChild(y);var w=document.createElement("div");w.className="cesium-baseLayerPicker-item",w.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),y.appendChild(w);var O=document.createElement("img");O.className="cesium-baseLayerPicker-itemIcon",O.setAttribute("data-bind","attr: { src: iconUrl }"),O.setAttribute("draggable","false"),w.appendChild(O);var C=document.createElement("div");C.className="cesium-baseLayerPicker-itemLabel",C.setAttribute("data-bind","text: name"),w.appendChild(C),pbe.applyBindings(n,i),pbe.applyBindings(n,s),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=s,this._closeDropDown=function(e){i.contains(e.target)||s.contains(e.target)||(n.dropDownVisible=!1)},oo.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(eye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),eye.prototype.isDestroyed=function(){return!1},eye.prototype.destroy=function(){return oo.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),pbe.cleanNode(this._element),pbe.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),Ks(this)};var tye=eye;function nye(e){if(!Object(o.a)(e.name))throw new a.a("options.name is required.");if(!Object(o.a)(e.tooltip))throw new a.a("options.tooltip is required.");if(!Object(o.a)(e.iconUrl))throw new a.a("options.iconUrl is required.");if("function"!==typeof e.creationFunction)throw new a.a("options.creationFunction is required.");var t=e.creationFunction;Object(o.a)(t.canExecute)||(t=ybe(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=Object(r.a)(e.category,""),pbe.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(nye.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var iye=nye;var rye=function(){var e=[];return e.push(new iye({name:"Bing Maps Aerial",iconUrl:At("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return toe({style:eoe.AERIAL})}})),e.push(new iye({name:"Bing Maps Aerial with Labels",iconUrl:At("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return toe({style:eoe.AERIAL_WITH_LABELS})}})),e.push(new iye({name:"Bing Maps Roads",iconUrl:At("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return toe({style:eoe.ROAD})}})),e.push(new iye({name:"Mapbox Satellite",tooltip:"Mapbox satellite imagery https://www.mapbox.com/maps/",iconUrl:At("Widgets/Images/ImageryProviders/mapboxSatellite.png"),category:"Other",creationFunction:function(){return new Cue({styleId:"satellite-v9"})}})),e.push(new iye({name:"Mapbox Streets",tooltip:"Mapbox streets imagery https://www.mapbox.com/maps/",iconUrl:At("Widgets/Images/ImageryProviders/mapboxTerrain.png"),category:"Other",creationFunction:function(){return new Cue({styleId:"satellite-streets-v11"})}})),e.push(new iye({name:"Mapbox Streets Classic",tooltip:"Mapbox streets basic imagery https://www.mapbox.com/maps/",iconUrl:At("Widgets/Images/ImageryProviders/mapboxStreets.png"),category:"Other",creationFunction:function(){return new Cue({styleId:"streets-v11"})}})),e.push(new iye({name:"ESRI World Imagery",iconUrl:At("Widgets/Images/ImageryProviders/esriWorldImagery.png"),tooltip:"World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes NASA Blue Marble: Next Generation 500m resolution imagery at small scales (above 1:1,000,000), i-cubed 15m eSAT imagery at medium-to-large scales (down to 1:70,000) for the world, and USGS 15m Landsat imagery for Antarctica. The map features 0.3m resolution imagery in the continental United States and 0.6m resolution imagery in parts of Western Europe from DigitalGlobe. In other parts of the world, 1 meter resolution imagery is available from GeoEye IKONOS, i-cubed Nationwide Prime, Getmapping, AeroGRID, IGN Spain, and IGP Portugal. Additionally, imagery at different resolutions has been contributed by the GIS User Community.\nhttp://www.esri.com",category:"Other",creationFunction:function(){return new Nee({url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",enablePickFeatures:!1})}})),e.push(new iye({name:"ESRI World Street Map",iconUrl:At("Widgets/Images/ImageryProviders/esriWorldStreetMap.png"),tooltip:"This worldwide street map presents highway-level data for the world. Street-level data includes the United States; much of Canada; Japan; most countries in Europe; Australia and New Zealand; India; parts of South America including Argentina, Brazil, Chile, Colombia, and Venezuela; Ghana; and parts of southern Africa including Botswana, Lesotho, Namibia, South Africa, and Swaziland.\nhttp://www.esri.com",category:"Other",creationFunction:function(){return new Nee({url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",enablePickFeatures:!1})}})),e.push(new iye({name:"ESRI National Geographic",iconUrl:At("Widgets/Images/ImageryProviders/esriNationalGeographic.png"),tooltip:"This web map contains the National Geographic World Map service. This map service is designed to be used as a general reference map for informational and educational purposes as well as a basemap by GIS professionals and other users for creating web maps and web mapping applications.\nhttp://www.esri.com",category:"Other",creationFunction:function(){return new Nee({url:"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/",enablePickFeatures:!1})}})),e.push(new iye({name:"Open\xadStreet\xadMap",iconUrl:At("Widgets/Images/ImageryProviders/openStreetMap.png"),tooltip:"OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world.\nhttp://www.openstreetmap.org",category:"Other",creationFunction:function(){return new Wue({url:"https://a.tile.openstreetmap.org/"})}})),e.push(new iye({name:"Stamen Watercolor",iconUrl:At("Widgets/Images/ImageryProviders/stamenWatercolor.png"),tooltip:"Reminiscent of hand drawn maps, Stamen watercolor maps apply raster effect area washes and organic edges over a paper texture to add warm pop to any map.\nhttp://maps.stamen.com",category:"Other",creationFunction:function(){return new Wue({url:"https://stamen-tiles.a.ssl.fastly.net/watercolor/",credit:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA."})}})),e.push(new iye({name:"Stamen Toner",iconUrl:At("Widgets/Images/ImageryProviders/stamenToner.png"),tooltip:"A high contrast black and white map.\nhttp://maps.stamen.com",category:"Other",creationFunction:function(){return new Wue({url:"https://stamen-tiles.a.ssl.fastly.net/toner/",credit:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA."})}})),e.push(new iye({name:"Sentinel-2",iconUrl:At("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).",category:"Cesium ion",creationFunction:function(){return new Jre({assetId:3954})}})),e.push(new iye({name:"Blue Marble",iconUrl:At("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return new Jre({assetId:3845})}})),e.push(new iye({name:"Earth at night",iconUrl:At("Widgets/Images/ImageryProviders/earthAtNight.png"),tooltip:"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.",category:"Cesium ion",creationFunction:function(){return new Jre({assetId:3812})}})),e.push(new iye({name:"Natural Earth\xa0II",iconUrl:At("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:"Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/",category:"Cesium ion",creationFunction:function(){return new bre({url:At("Assets/Textures/NaturalEarthII")})}})),e};var oye=function(){var e=[];return e.push(new iye({name:"WGS84 Ellipsoid",iconUrl:At("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new Db}})),e.push(new iye({name:"Cesium World Terrain",iconUrl:At("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion",category:"Cesium ion",creationFunction:function(){return v_({requestWaterMask:!0,requestVertexNormals:!0})}})),e};function aye(e,t){t?e._eventHandler.setInputAction((function(t){var n=e._scene.pick(t.endPosition);Object(o.a)(n)&&n.primitive instanceof TZ&&(e.tileset=n.primitive)}),RT.MOUSE_MOVE):(e._eventHandler.removeInputAction(RT.MOUSE_MOVE),e.picking=e.picking)}var sye={maximumFractionDigits:3};function cye(e){var t=e/1048576;return t<1?t.toLocaleString(void 0,sye):Math.round(t).toLocaleString()}function lye(e,t){if(!Object(o.a)(e))return"";var n=t?e._statisticsPerPass[eQ.PICK]:e._statisticsPerPass[eQ.RENDER],i='<ul class="cesium-cesiumInspector-statistics">';return i+="<li><strong>Visited: </strong>"+n.visited.toLocaleString()+"</li><li><strong>Selected: </strong>"+n.selected.toLocaleString()+"</li><li><strong>Commands: </strong>"+n.numberOfCommands.toLocaleString()+"</li>",i+="</ul>",t||(i+='<ul class="cesium-cesiumInspector-statistics">',i+="<li><strong>Requests: </strong>"+n.numberOfPendingRequests.toLocaleString()+"</li><li><strong>Attempted: </strong>"+n.numberOfAttemptedRequests.toLocaleString()+"</li><li><strong>Processing: </strong>"+n.numberOfTilesProcessing.toLocaleString()+"</li><li><strong>Content Ready: </strong>"+n.numberOfTilesWithContentReady.toLocaleString()+"</li><li><strong>Total: </strong>"+n.numberOfTilesTotal.toLocaleString()+"</li>",i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+="<li><strong>Features Selected: </strong>"+n.numberOfFeaturesSelected.toLocaleString()+"</li><li><strong>Features Loaded: </strong>"+n.numberOfFeaturesLoaded.toLocaleString()+"</li><li><strong>Points Selected: </strong>"+n.numberOfPointsSelected.toLocaleString()+"</li><li><strong>Points Loaded: </strong>"+n.numberOfPointsLoaded.toLocaleString()+"</li><li><strong>Triangles Selected: </strong>"+n.numberOfTrianglesSelected.toLocaleString()+"</li>",i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+="<li><strong>Tiles styled: </strong>"+n.numberOfTilesStyled.toLocaleString()+"</li><li><strong>Features styled: </strong>"+n.numberOfFeaturesStyled.toLocaleString()+"</li>",i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+="<li><strong>Children Union Culled: </strong>"+n.numberOfTilesCulledWithChildrenUnion.toLocaleString()+"</li>",i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+="<li><strong>Geometry Memory (MB): </strong>"+cye(n.geometryByteLength)+"</li><li><strong>Texture Memory (MB): </strong>"+cye(n.texturesByteLength)+"</li><li><strong>Batch Table Memory (MB): </strong>"+cye(n.batchTableByteLength)+"</li>",i+="</ul>"),i}var uye=[{text:"Highlight",value:EN.HIGHLIGHT},{text:"Replace",value:EN.REPLACE},{text:"Mix",value:EN.MIX}],hye=new Hf(1,1,0,.4),dye=new Hf,fye=new Hf;function pye(e,t){i.a.typeOf.object("scene",e),i.a.typeOf.object("performanceContainer",t);var n=this,r=e.canvas;this._eventHandler=new vS(r),this._scene=e,this._performanceContainer=t,this._canvas=r,this._performanceDisplay=new she({container:t}),this._statisticsText="",this._pickStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this._tileset=void 0,this._feature=void 0,this._tile=void 0,pbe.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_editorError","showPickStatistics","showStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile"]),this._properties=pbe.observable({}),this.properties=[],pbe.defineProperty(this,"properties",(function(){var e=[],t=n._properties();for(var i in t)t.hasOwnProperty(i)&&e.push(i);return e}));var a=pbe.observable();pbe.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return a()},set:function(e){a(e),Object(o.a)(n._tileset)&&(n._tileset.dynamicScreenSpaceError=e)}}),this.dynamicScreenSpaceError=!1;var s=pbe.observable();pbe.defineProperty(this,"colorBlendMode",{get:function(){return s()},set:function(e){s(e),Object(o.a)(n._tileset)&&(n._tileset.colorBlendMode=e,n._scene.requestRender())}}),this.colorBlendMode=EN.HIGHLIGHT;var c=pbe.observable(),l=pbe.observable();pbe.defineProperty(this,"picking",{get:function(){return l()},set:function(t){l(t),t?n._eventHandler.setInputAction((function(t){var i=e.pick(t.endPosition);if(i instanceof oz?(n.feature=i,n.tile=i.content.tile):Object(o.a)(i)&&Object(o.a)(i.content)?(n.feature=void 0,n.tile=i.content.tile):(n.feature=void 0,n.tile=void 0),Object(o.a)(n._tileset)){var r;if(c&&Object(o.a)(i)&&Object(o.a)(i.content))e.pickPositionSupported&&(r=e.pickPosition(t.endPosition),Object(o.a)(r)&&(n._tileset.debugPickPosition=r)),n._tileset.debugPickedTile=i.content.tile;else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}}),RT.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(RT.MOUSE_MOVE))}}),this.picking=!0;var u=pbe.observable();pbe.defineProperty(this,"colorize",{get:function(){return u()},set:function(e){u(e),Object(o.a)(n._tileset)&&(n._tileset.debugColorizeTiles=e,n._scene.requestRender())}}),this.colorize=!1;var h=pbe.observable();pbe.defineProperty(this,"wireframe",{get:function(){return h()},set:function(e){h(e),Object(o.a)(n._tileset)&&(n._tileset.debugWireframe=e,n._scene.requestRender())}}),this.wireframe=!1;var d=pbe.observable();pbe.defineProperty(this,"showBoundingVolumes",{get:function(){return d()},set:function(e){d(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowBoundingVolume=e,n._scene.requestRender())}}),this.showBoundingVolumes=!1;var f=pbe.observable();pbe.defineProperty(this,"showContentBoundingVolumes",{get:function(){return f()},set:function(e){f(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=e,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;var p=pbe.observable();pbe.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(e){p(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=e,n._scene.requestRender())}}),this.showRequestVolumes=!1;var m=pbe.observable();pbe.defineProperty(this,"freezeFrame",{get:function(){return m()},set:function(e){m(e),Object(o.a)(n._tileset)&&(n._tileset.debugFreezeFrame=e,n._scene.debugShowFrustumPlanes=e,n._scene.requestRender())}}),this.freezeFrame=!1,pbe.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return c()},set:function(e){c(e),Object(o.a)(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=e,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;var g=pbe.observable();pbe.defineProperty(this,"showGeometricError",{get:function(){return g()},set:function(e){g(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowGeometricError=e,n._scene.requestRender())}}),this.showGeometricError=!1;var v=pbe.observable();pbe.defineProperty(this,"showRenderingStatistics",{get:function(){return v()},set:function(e){v(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowRenderingStatistics=e,n._scene.requestRender())}}),this.showRenderingStatistics=!1;var _=pbe.observable();pbe.defineProperty(this,"showMemoryUsage",{get:function(){return _()},set:function(e){_(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowMemoryUsage=e,n._scene.requestRender())}}),this.showMemoryUsage=!1;var b=pbe.observable();pbe.defineProperty(this,"showUrl",{get:function(){return b()},set:function(e){b(e),Object(o.a)(n._tileset)&&(n._tileset.debugShowUrl=e,n._scene.requestRender())}}),this.showUrl=!1;var y=pbe.observable();pbe.defineProperty(this,"maximumScreenSpaceError",{get:function(){return y()},set:function(e){e=Number(e),isNaN(e)||(y(e),Object(o.a)(n._tileset)&&(n._tileset.maximumScreenSpaceError=e))}}),this.maximumScreenSpaceError=16;var w=pbe.observable();pbe.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return w()},set:function(e){e=Number(e),isNaN(e)||(w(e),Object(o.a)(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=e))}}),this.dynamicScreenSpaceErrorDensity=.00278,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,pbe.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(w(),1/6)},set:function(e){w(Math.pow(e,6))}});var O=pbe.observable();pbe.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return O()},set:function(e){e=Number(e),isNaN(e)||(O(e),Object(o.a)(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=e))}}),this.dynamicScreenSpaceErrorFactor=4;var C,E=(C=this,function(e){var t=C._scene.pick(e.position);Object(o.a)(t)&&t.primitive instanceof TZ&&(C.tileset=t.primitive),C.pickActive=!1}),A=pbe.observable();pbe.defineProperty(this,"pickActive",{get:function(){return A()},set:function(e){A(e),e?n._eventHandler.setInputAction(E,RT.LEFT_CLICK):n._eventHandler.removeInputAction(RT.LEFT_CLICK)}});var x=pbe.observable();pbe.defineProperty(this,"pointCloudShading",{get:function(){return x()},set:function(e){x(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.attenuation=e)}}),this.pointCloudShading=!1;var T=pbe.observable();pbe.defineProperty(this,"geometricErrorScale",{get:function(){return T()},set:function(e){e=Number(e),isNaN(e)||(T(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=e))}}),this.geometricErrorScale=1;var S=pbe.observable();pbe.defineProperty(this,"maximumAttenuation",{get:function(){return S()},set:function(e){e=Number(e),isNaN(e)||(S(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=0===e?void 0:e))}}),this.maximumAttenuation=0;var D=pbe.observable();pbe.defineProperty(this,"baseResolution",{get:function(){return D()},set:function(e){e=Number(e),isNaN(e)||(D(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=0===e?void 0:e))}}),this.baseResolution=0;var P=pbe.observable();pbe.defineProperty(this,"eyeDomeLighting",{get:function(){return P()},set:function(e){P(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=e)}}),this.eyeDomeLighting=!1;var I=pbe.observable();pbe.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return I()},set:function(e){e=Number(e),isNaN(e)||(I(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=e))}}),this.eyeDomeLightingStrength=1;var M=pbe.observable();pbe.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return M()},set:function(e){e=Number(e),isNaN(e)||(M(e),Object(o.a)(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=e))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;var R=pbe.observable();pbe.defineProperty(this,"skipLevelOfDetail",{get:function(){return R()},set:function(e){R(e),Object(o.a)(n._tileset)&&(n._tileset.skipLevelOfDetail=e)}}),this.skipLevelOfDetail=!0;var L=pbe.observable();pbe.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return L()},set:function(e){e=Number(e),isNaN(e)||(L(e),Object(o.a)(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=e))}}),this.skipScreenSpaceErrorFactor=16;var j=pbe.observable();pbe.defineProperty(this,"baseScreenSpaceError",{get:function(){return j()},set:function(e){e=Number(e),isNaN(e)||(j(e),Object(o.a)(n._tileset)&&(n._tileset.baseScreenSpaceError=e))}}),this.baseScreenSpaceError=1024;var F=pbe.observable();pbe.defineProperty(this,"skipLevels",{get:function(){return F()},set:function(e){e=Number(e),isNaN(e)||(F(e),Object(o.a)(n._tileset)&&(n._tileset.skipLevels=e))}}),this.skipLevels=1;var N=pbe.observable();pbe.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return N()},set:function(e){N(e),Object(o.a)(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=e)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;var z=pbe.observable();pbe.defineProperty(this,"loadSiblings",{get:function(){return z()},set:function(e){z(e),Object(o.a)(n._tileset)&&(n._tileset.loadSiblings=e)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=e.postRender.addEventListener((function(){n._update()})),Object(o.a)(this._tileset)||aye(this,!0)}function mye(e){if(e.featuresLength>0)return!0;var t=e.innerContents;if(Object(o.a)(t)){for(var n=t.length,i=0;i<n;++i)if(!mye(t[i]))return!1;return!0}return!1}Object.defineProperties(pye.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},colorBlendModes:{get:function(){return uye}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,Object(o.a)(e)){var t=this;e.readyPromise.then((function(e){t.isDestroyed()||t._properties(e.properties)}));for(var n=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],i=n.length,r=0;r<i;++r){var a=n[r];this[a]=this[a]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings;var s=e.pointCloudShading;this.pointCloudShading=s.attenuation,this.geometricErrorScale=s.geometricErrorScale,this.maximumAttenuation=s.maximumAttenuation?s.maximumAttenuation:0,this.baseResolution=s.baseResolution?s.baseResolution:0,this.eyeDomeLighting=s.eyeDomeLighting,this.eyeDomeLightingStrength=s.eyeDomeLightingStrength,this.eyeDomeLightingRadius=s.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=lye(e,!1),this._pickStatisticsText=lye(e,!0),aye(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature!==e){var t=this._feature;Object(o.a)(t)&&!t.content.isDestroyed()&&(!this.colorize&&Object(o.a)(this._style)?t.color=Object(o.a)(this._style.color)?this._style.color.evaluateColor(t,dye):Hf.WHITE:t.color=fye,this._scene.requestRender()),Object(o.a)(e)&&(Hf.clone(e.color,fye),e.color=hye,this._scene.requestRender()),this._feature=e}}},tile:{get:function(){return this._tile},set:function(e){if(this._tile!==e){var t=this._tile;!Object(o.a)(t)||t.isDestroyed()||mye(t.content)||(t.color=fye,this._scene.requestRender()),Object(o.a)(e)&&!mye(e.content)&&(Hf.clone(e.color,fye),e.color=hye,this._scene.requestRender()),this._tile=e}}}}),pye.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive},pye.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible},pye.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible},pye.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible},pye.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible},pye.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible},pye.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible},pye.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible},pye.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible},pye.prototype.trimTilesCache=function(){Object(o.a)(this._tileset)&&this._tileset.trimLoadedTiles()},pye.prototype.compileStyle=function(){var e=this._tileset;if(Object(o.a)(e)&&this.styleString!==JSON.stringify(e.style)){this._editorError="";try{0===this.styleString.length&&(this.styleString="{}"),this._style=new Uie(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}},pye.prototype.styleEditorKeyPress=function(e,t){if(9===t.keyCode){t.preventDefault();var n,i=t.target,r=i.selectionStart,o=i.selectionEnd,a=o,s=i.value.slice(r,o).split("\n"),c=s.length;if(t.shiftKey)for(n=0;n<c;++n)" "===s[n][0]&&(" "===s[n][1]?(s[n]=s[n].substr(2),a-=2):(s[n]=s[n].substr(1),a-=1));else for(n=0;n<c;++n)s[n]=" "+s[n],a+=2;var l=s.join("\n");i.value=i.value.slice(0,r)+l+i.value.slice(o),i.selectionStart=r!==o?r:a,i.selectionEnd=a}else!t.ctrlKey||10!==t.keyCode&&13!==t.keyCode||this.compileStyle();return!0},pye.prototype._update=function(){var e=this._tileset;if(this.performance&&this._performanceDisplay.update(),Object(o.a)(e)){if(e.isDestroyed())return this.tile=void 0,this.feature=void 0,void(this.tileset=void 0);var t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=lye(e,!1),this._pickStatisticsText=lye(e,!0))},pye.prototype.isDestroyed=function(){return!1},pye.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();var e=this;return this._definedProperties.forEach((function(t){pbe.getObservable(e,t).dispose()})),Ks(this)},pye.getStatistics=lye;var gye=pye;function vye(e,t){i.a.defined("container",e),i.a.typeOf.object("scene",t),e=ohe(e);var n=document.createElement("div"),r=document.createElement("div");r.setAttribute("data-bind","visible: performance");var o=new gye(t,r);this._viewModel=o,this._container=e,this._element=n;var a=document.createElement("div");a.textContent="3D Tiles Inspector",a.className="cesium-cesiumInspector-button",a.setAttribute("data-bind","click: toggleInspector"),n.appendChild(a),n.className="cesium-cesiumInspector cesium-3DTilesInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);var s=document.createElement("div");this._panel=s,s.className="cesium-cesiumInspector-dropDown",n.appendChild(s);var c=Obe.createSection,l=Obe.createCheckbox,u=c(s,"Tileset","tilesetVisible","toggleTileset"),h=c(s,"Display","displayVisible","toggleDisplay"),d=c(s,"Update","updateVisible","toggleUpdate"),f=c(s,"Logging","loggingVisible","toggleLogging"),p=c(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),m=c(s,"Style","styleVisible","toggleStyle"),g=c(s,"Optimization","optimizationVisible","toggleOptimization"),v=document.createElement("div");v.className="field-group";var _=document.createElement("label");_.className="field-label",_.appendChild(document.createTextNode("Properties: "));var b=document.createElement("div");b.setAttribute("data-bind","text: properties"),v.appendChild(_),v.appendChild(b),u.appendChild(v),u.appendChild(bye("togglePickTileset","Pick Tileset","pickActive")),u.appendChild(bye("trimTilesCache","Trim Tiles Cache")),u.appendChild(l("Enable Picking","picking")),h.appendChild(l("Colorize","colorize")),h.appendChild(l("Wireframe","wireframe")),h.appendChild(l("Bounding Volumes","showBoundingVolumes")),h.appendChild(l("Content Volumes","showContentBoundingVolumes")),h.appendChild(l("Request Volumes","showRequestVolumes")),h.appendChild(l("Point Cloud Shading","pointCloudShading"));var y=document.createElement("div");y.setAttribute("data-bind","visible: pointCloudShading"),y.appendChild(_ye("geometricErrorScale",0,2,.01,"Geometric Error Scale")),y.appendChild(_ye("maximumAttenuation",0,32,1,"Maximum Attenuation")),y.appendChild(_ye("baseResolution",0,1,.01,"Base Resolution")),y.appendChild(l("Eye Dome Lighting (EDL)","eyeDomeLighting")),h.appendChild(y);var w=document.createElement("div");w.setAttribute("data-bind","visible: eyeDomeLighting"),w.appendChild(_ye("eyeDomeLightingStrength",0,2,.1,"EDL Strength")),w.appendChild(_ye("eyeDomeLightingRadius",0,4,.1,"EDL Radius")),y.appendChild(w),d.appendChild(l("Freeze Frame","freezeFrame")),d.appendChild(l("Dynamic Screen Space Error","dynamicScreenSpaceError"));var O=document.createElement("div");O.appendChild(_ye("maximumScreenSpaceError",0,128,1,"Maximum Screen Space Error")),d.appendChild(O);var C=document.createElement("div");C.setAttribute("data-bind","visible: dynamicScreenSpaceError"),C.appendChild(_ye("dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"Screen Space Error Density","dynamicScreenSpaceErrorDensity")),C.appendChild(_ye("dynamicScreenSpaceErrorFactor",1,10,.1,"Screen Space Error Factor")),d.appendChild(C),f.appendChild(l("Performance","performance")),f.appendChild(r),f.appendChild(l("Statistics","showStatistics"));var E=document.createElement("div");E.className="cesium-3dTilesInspector-statistics",E.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(E),f.appendChild(l("Pick Statistics","showPickStatistics"));var A=document.createElement("div");A.className="cesium-3dTilesInspector-statistics",A.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(A);var x=document.createElement("div");m.appendChild(x),x.appendChild(document.createTextNode("Color Blend Mode: "));var T=document.createElement("select");T.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),x.appendChild(T);var S=document.createElement("textarea");S.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),x.className="cesium-cesiumInspector-styleEditor",x.appendChild(S);var D=bye("compileStyle","Compile (Ctrl+Enter)");x.appendChild(D);var P=document.createElement("div");P.className="cesium-cesiumInspector-error",P.setAttribute("data-bind","text: editorError"),x.appendChild(P),p.appendChild(l("Show Picked Only","showOnlyPickedTileDebugLabel")),p.appendChild(l("Geometric Error","showGeometricError")),p.appendChild(l("Rendering Statistics","showRenderingStatistics")),p.appendChild(l("Memory Usage (MB)","showMemoryUsage")),p.appendChild(l("Url","showUrl")),g.appendChild(l("Skip Tile LODs","skipLevelOfDetail"));var I=document.createElement("div");I.appendChild(_ye("skipScreenSpaceErrorFactor",1,50,1,"Skip SSE Factor")),g.appendChild(I);var M=document.createElement("div");M.appendChild(_ye("baseScreenSpaceError",0,4096,1,"SSE before skipping LOD")),g.appendChild(M);var R=document.createElement("div");R.appendChild(_ye("skipLevels",0,10,1,"Min. levels to skip")),g.appendChild(R),g.appendChild(l("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),g.appendChild(l("Load siblings of visible tiles","loadSiblings")),pbe.applyBindings(o,n)}function _ye(e,t,n,i,o,a){a=Object(r.a)(a,e);var s=document.createElement("input");s.setAttribute("data-bind","value: "+a),s.type="number";var c=document.createElement("input");c.type="range",c.min=t,c.max=n,c.step=i,c.setAttribute("data-bind",'valueUpdate: "input", value: '+e);var l=document.createElement("div");l.appendChild(c);var u=document.createElement("div");return u.className="cesium-cesiumInspector-slider",u.appendChild(document.createTextNode(o)),u.appendChild(s),u.appendChild(l),u}function bye(e,t,n){var i=document.createElement("button");i.type="button",i.textContent=t,i.className="cesium-cesiumInspector-pickButton";var r="click: "+e;return Object(o.a)(n)&&(r+=', css: {"cesium-cesiumInspector-pickButtonHighlight" : '+n+"}"),i.setAttribute("data-bind",r),i}Object.defineProperties(vye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),vye.prototype.isDestroyed=function(){return!1},vye.prototype.destroy=function(){return pbe.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),Ks(this)};function yye(e,t,n){var i=Math.min(n,t);return i=Math.max(i,e)}var wye=new ti,Oye=new O;function Cye(e,t){if(!Object(o.a)(e))throw new a.a("scene is required");if(!Object(o.a)(t))throw new a.a("performanceContainer is required");var n=this,i=e.canvas,r=new vS(i);this._eventHandler=r,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;var s,c=this._scene.globe;function l(e){var t=n._scene.pick({x:e.position.x,y:e.position.y});Object(o.a)(t)&&(n.primitive=Object(o.a)(t.collection)?t.collection:t.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}function u(e){var t,i=c.ellipsoid,r=n._scene.camera.getPickRay(e.position,wye),a=c.pick(r,n._scene,Oye);if(Object(o.a)(a))for(var s=i.cartesianToCartographic(a),l=c._surface.tileProvider._tilesToRenderByTextureCount,u=0;!t&&u<l.length;++u){var h=l[u];if(Object(o.a)(h))for(var d=0;!t&&d<h.length;++d){var f=h[d];Se.contains(f.rectangle,s)&&(t=f)}}n.tile=t,n.pickTileActive=!1}c.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.globeDepth=!1,this.pickDepth=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",pbe.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","globeDepth","pickDepth","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=ybe((function(){n.dropDownVisible=!n.dropDownVisible})),this._toggleGeneral=ybe((function(){n.generalVisible=!n.generalVisible})),this._togglePrimitives=ybe((function(){n.primitivesVisible=!n.primitivesVisible})),this._toggleTerrain=ybe((function(){n.terrainVisible=!n.terrainVisible})),this._frustumsSubscription=pbe.getObservable(this,"frustums").subscribe((function(e){n._scene.debugShowFrustums=e,n._scene.requestRender()})),this._frustumPlanesSubscription=pbe.getObservable(this,"frustumPlanes").subscribe((function(e){n._scene.debugShowFrustumPlanes=e,n._scene.requestRender()})),this._performanceSubscription=pbe.getObservable(this,"performance").subscribe((function(e){e?n._performanceDisplay=new she({container:n._performanceContainer}):n._performanceContainer.innerHTML=""})),this._showPrimitiveBoundingSphere=ybe((function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0})),this._primitiveBoundingSphereSubscription=pbe.getObservable(this,"primitiveBoundingSphere").subscribe((function(){n._showPrimitiveBoundingSphere()})),this._showPrimitiveReferenceFrame=ybe((function(){if(n.primitiveReferenceFrame){var e=n._primitive.modelMatrix;n._modelMatrixPrimitive=new Coe({modelMatrix:e}),n._scene.primitives.add(n._modelMatrixPrimitive)}else Object(o.a)(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0})),this._primitiveReferenceFrameSubscription=pbe.getObservable(this,"primitiveReferenceFrame").subscribe((function(){n._showPrimitiveReferenceFrame()})),this._doFilterPrimitive=ybe((function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(e){return!(!Object(o.a)(n._modelMatrixPrimitive)||e.owner!==n._modelMatrixPrimitive._primitive)||!!Object(o.a)(n._primitive)&&(e.owner===n._primitive||e.owner===n._primitive._billboardCollection||e.owner.primitive===n._primitive)}:n._scene.debugCommandFilter=void 0,!0})),this._filterPrimitiveSubscription=pbe.getObservable(this,"filterPrimitive").subscribe((function(){n._doFilterPrimitive(),n._scene.requestRender()})),this._wireframeSubscription=pbe.getObservable(this,"wireframe").subscribe((function(e){c._surface.tileProvider._debug.wireframe=e,n._scene.requestRender()})),this._globeDepthSubscription=pbe.getObservable(this,"globeDepth").subscribe((function(e){n._scene.debugShowGlobeDepth=e,n._scene.requestRender()})),this._pickDepthSubscription=pbe.getObservable(this,"pickDepth").subscribe((function(e){n._scene.debugShowPickDepth=e,n._scene.requestRender()})),this._depthFrustumSubscription=pbe.getObservable(this,"depthFrustum").subscribe((function(e){n._scene.debugShowDepthFrustum=e,n._scene.requestRender()})),this._incrementDepthFrustum=ybe((function(){var e=n.depthFrustum+1;return n.depthFrustum=yye(1,n._numberOfFrustums,e),n._scene.requestRender(),!0})),this._decrementDepthFrustum=ybe((function(){var e=n.depthFrustum-1;return n.depthFrustum=yye(1,n._numberOfFrustums,e),n._scene.requestRender(),!0})),this._suspendUpdatesSubscription=pbe.getObservable(this,"suspendUpdates").subscribe((function(e){c._surface._debug.suspendLodUpdate=e,e||(n.filterTile=!1)})),this._showTileCoordinates=ybe((function(){return n.tileCoordinates&&!Object(o.a)(s)?s=e.imageryLayers.addImageryProvider(new V_e({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&Object(o.a)(s)&&(e.imageryLayers.remove(s),s=void 0),!0})),this._tileCoordinatesSubscription=pbe.getObservable(this,"tileCoordinates").subscribe((function(){n._showTileCoordinates(),n._scene.requestRender()})),this._tileBoundingSphereSubscription=pbe.getObservable(this,"tileBoundingSphere").subscribe((function(){n._showTileBoundingSphere(),n._scene.requestRender()})),this._showTileBoundingSphere=ybe((function(){return n.tileBoundingSphere?c._surface.tileProvider._debug.boundingSphereTile=n._tile:c._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0})),this._doFilterTile=ybe((function(){return n.filterTile?(n.suspendUpdates=!0,c._surface._tilesToRender=[],Object(o.a)(n._tile)&&n._tile.renderable&&c._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0})),this._filterTileSubscription=pbe.getObservable(this,"filterTile").subscribe((function(){n.doFilterTile(),n._scene.requestRender()})),this._pickPrimitive=ybe((function(){n.pickPrimitiveActive=!n.pickPrimitiveActive})),this._pickPrimitiveActiveSubscription=pbe.getObservable(this,"pickPrimitiveActive").subscribe((function(e){e?r.setInputAction(l,RT.LEFT_CLICK):r.removeInputAction(RT.LEFT_CLICK)})),this._pickTile=ybe((function(){n.pickTileActive=!n.pickTileActive})),this._pickTileActiveSubscription=pbe.getObservable(this,"pickTileActive").subscribe((function(e){e?r.setInputAction(u,RT.LEFT_CLICK):r.removeInputAction(RT.LEFT_CLICK)})),this._removePostRenderEvent=e.postRender.addEventListener((function(){n._update()}))}Object.defineProperties(Cye.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){var e=this;return ybe((function(){e.tile=e.tile.parent}))}},selectNW:{get:function(){var e=this;return ybe((function(){e.tile=e.tile.northwestChild}))}},selectNE:{get:function(){var e=this;return ybe((function(){e.tile=e.tile.northeastChild}))}},selectSW:{get:function(){var e=this;return ybe((function(){e.tile=e.tile.southwestChild}))}},selectSE:{get:function(){var e=this;return ybe((function(){e.tile=e.tile.southeastChild}))}},primitive:{get:function(){return this._primitive},set:function(e){var t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,Object(o.a)(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,Object(o.a)(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),this._primitive=e,e.show=!1,setTimeout((function(){e.show=!0}),50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){if(Object(o.a)(e)){if(this.hasPickedTile=!0,e!==this._tile){this.tileText="L: "+e.level+" X: "+e.x+" Y: "+e.y,this.tileText+="<br>SW corner: "+e.rectangle.west+", "+e.rectangle.south,this.tileText+="<br>NE corner: "+e.rectangle.east+", "+e.rectangle.north;var t=e.data;Object(o.a)(t)&&Object(o.a)(t.tileBoundingRegion)?this.tileText+="<br>Min: "+t.tileBoundingRegion.minimumHeight+" Max: "+t.tileBoundingRegion.maximumHeight:this.tileText+="<br>(Tile is not loaded)"}this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()}else this.hasPickedTile=!1,this._tile=void 0}}}),Cye.prototype._update=function(){this.frustums&&(this.frustumStatisticText=function(e){var t;if(Object(o.a)(e)){t="Command Statistics";var n=e.commandsInFrustums;for(var i in n)if(n.hasOwnProperty(i)){var r,a=parseInt(i,10);if(7===a)r="1, 2 and 3";else{for(var s=[],c=2;c>=0;c--){var l=Math.pow(2,c);a>=l&&(s.push(c+1),a-=l)}r=s.reverse().join(" and ")}t+="<br>    "+n[i]+" in frustum "+r}t+="<br>Total: "+e.totalCommands}return t}(this._scene.debugFrustumStatistics));var e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=yye(1,e,this.depthFrustum),this.depthFrustumText=this.depthFrustum+" of "+e,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText="Cached shaders: "+this._scene.context.shaderCache.numberOfShaders},Cye.prototype.isDestroyed=function(){return!1},Cye.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._globeDepthSubscription.dispose(),this._pickDepthSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),Ks(this)};var Eye=Cye;function Aye(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("scene is required.");e=ohe(e);var n=document.createElement("div"),i=new Eye(t,n);this._viewModel=i,this._container=e;var r=document.createElement("div");this._element=r;var s=document.createElement("div");s.textContent="Cesium Inspector",s.className="cesium-cesiumInspector-button",s.setAttribute("data-bind","click: toggleDropDown"),r.appendChild(s),r.className="cesium-cesiumInspector",r.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);var c=document.createElement("div");this._panel=c,c.className="cesium-cesiumInspector-dropDown",r.appendChild(c);var l=Obe.createSection,u=Obe.createCheckbox,h=l(c,"General","generalVisible","toggleGeneral"),d=u("Show Frustums","frustums"),f=document.createElement("div");f.className="cesium-cesiumInspector-frustumStatistics",f.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),d.appendChild(f),h.appendChild(d),h.appendChild(u("Show Frustum Planes","frustumPlanes")),h.appendChild(u("Performance Display","performance")),n.className="cesium-cesiumInspector-performanceDisplay",h.appendChild(n);var p=document.createElement("div");p.className="cesium-cesiumInspector-shaderCache",p.setAttribute("data-bind","html: shaderCacheText"),h.appendChild(p);var m=document.createElement("div");h.appendChild(m);var g=document.createElement("span");g.setAttribute("data-bind",'html: "     Frustum:"'),m.appendChild(g);var v=document.createElement("span");v.setAttribute("data-bind","text: depthFrustumText"),m.appendChild(v);var _=document.createElement("input");_.type="button",_.value="-",_.className="cesium-cesiumInspector-pickButton",_.setAttribute("data-bind","click: decrementDepthFrustum"),m.appendChild(_);var b=document.createElement("input");b.type="button",b.value="+",b.className="cesium-cesiumInspector-pickButton",b.setAttribute("data-bind","click: incrementDepthFrustum"),m.appendChild(b);var y=l(c,"Primitives","primitivesVisible","togglePrimitives"),w=document.createElement("div");w.className="cesium-cesiumInspector-pickSection",y.appendChild(w);var O=document.createElement("input");O.type="button",O.value="Pick a primitive",O.className="cesium-cesiumInspector-pickButton",O.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');var C=document.createElement("div");C.className="cesium-cesiumInspector-center",C.appendChild(O),w.appendChild(C),w.appendChild(u("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),w.appendChild(u("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=u("Show only selected","filterPrimitive","hasPickedPrimitive"),w.appendChild(this._primitiveOnly);var E=l(c,"Terrain","terrainVisible","toggleTerrain"),A=document.createElement("div");A.className="cesium-cesiumInspector-pickSection",E.appendChild(A);var x=document.createElement("input");x.type="button",x.value="Pick a tile",x.className="cesium-cesiumInspector-pickButton",x.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),(C=document.createElement("div")).appendChild(x),C.className="cesium-cesiumInspector-center",A.appendChild(C);var T=document.createElement("div");A.appendChild(T);var S=document.createElement("input");S.type="button",S.value="Parent",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind","click: selectParent");var D=document.createElement("input");D.type="button",D.value="NW",D.className="cesium-cesiumInspector-pickButton",D.setAttribute("data-bind","click: selectNW");var P=document.createElement("input");P.type="button",P.value="NE",P.className="cesium-cesiumInspector-pickButton",P.setAttribute("data-bind","click: selectNE");var I=document.createElement("input");I.type="button",I.value="SW",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind","click: selectSW");var M=document.createElement("input");M.type="button",M.value="SE",M.className="cesium-cesiumInspector-pickButton",M.setAttribute("data-bind","click: selectSE");var R=document.createElement("div");R.className="cesium-cesiumInspector-tileText",T.className="cesium-cesiumInspector-frustumStatistics",T.appendChild(R),T.setAttribute("data-bind","visible: hasPickedTile"),R.setAttribute("data-bind","html: tileText");var L=document.createElement("div");L.className="cesium-cesiumInspector-relativeText",L.textContent="Select relative:",T.appendChild(L);var j=document.createElement("table"),F=document.createElement("tr"),N=document.createElement("tr"),z=document.createElement("td");z.appendChild(S);var k=document.createElement("td");k.appendChild(D);var B=document.createElement("td");B.appendChild(P),F.appendChild(z),F.appendChild(k),F.appendChild(B);var H=document.createElement("td"),V=document.createElement("td");V.appendChild(I);var U=document.createElement("td");U.appendChild(M),N.appendChild(H),N.appendChild(V),N.appendChild(U),j.appendChild(F),j.appendChild(N),T.appendChild(j),A.appendChild(u("Show bounding volume","tileBoundingSphere","hasPickedTile")),A.appendChild(u("Show only selected","filterTile","hasPickedTile")),E.appendChild(u("Wireframe","wireframe")),E.appendChild(u("Suspend LOD update","suspendUpdates")),E.appendChild(u("Show tile coordinates","tileCoordinates")),pbe.applyBindings(i,this._element)}Object.defineProperties(Aye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Aye.prototype.isDestroyed=function(){return!1},Aye.prototype.destroy=function(){return pbe.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),Ks(this)};function xye(e){return At("Assets/Textures/SkyBox/tycho2t3_80_"+e+".jpg")}function Tye(e){var t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,Object(o.a)(e._scene)&&(e._scene.pixelRatio=t),t}function Sye(e){var t=e._canvas,n=t.clientWidth,i=t.clientHeight,r=Tye(e);e._canvasClientWidth=n,e._canvasClientHeight=i,n*=r,i*=r,t.width=n,t.height=i,e._canRender=0!==n&&0!==i,e._lastDevicePixelRatio=window.devicePixelRatio}function Dye(e){var t=e._canvas,n=t.width,i=t.height;if(0!==n&&0!==i){var r=e._scene.camera.frustum;Object(o.a)(r.aspectRatio)?r.aspectRatio=n/i:(r.top=r.right*(i/n),r.bottom=-r.top)}}function Pye(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e),t=Object(r.a)(t,r.a.EMPTY_OBJECT);var n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);var i=document.createElement("canvas"),s=oo.supportsImageRenderingPixelated();function c(){i!==i.ownerDocument.activeElement&&i.ownerDocument.activeElement.blur()}this._supportsImageRenderingPixelated=s,s&&(i.style.imageRendering=oo.imageRenderingValue()),i.oncontextmenu=function(){return!1},i.onselectstart=function(){return!1},i.addEventListener("mousedown",c),i.addEventListener("pointerdown",c),n.appendChild(i);var l=document.createElement("div");l.className="cesium-widget-credits";var u=Object(o.a)(t.creditContainer)?ohe(t.creditContainer):n;u.appendChild(l);var h=Object(o.a)(t.creditViewport)?ohe(t.creditViewport):n,d=Object(r.a)(t.showRenderLoopErrors,!0),f=Object(r.a)(t.useBrowserRecommendedResolution,!0);this._element=n,this._container=e,this._canvas=i,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=h,this._creditContainer=u,this._innerCreditContainer=l,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=d,this._resolutionScale=1,this._useBrowserRecommendedResolution=f,this._forceResize=!1,this._clock=Object(o.a)(t.clock)?t.clock:new Rf,Sye(this);try{var p=new C_e({canvas:i,contextOptions:t.contextOptions,creditContainer:l,creditViewport:h,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:Object(r.a)(t.scene3DOnly,!1),terrainExaggeration:t.terrainExaggeration,shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange});this._scene=p,p.camera.constrainedAxis=O.UNIT_Z,Tye(this),Dye(this);var m=Object(r.a)(p.mapProjection.ellipsoid,W.WGS84),g=t.globe;Object(o.a)(g)||(g=new Kce(m)),!1!==g&&(p.globe=g,p.globe.shadows=Object(r.a)(t.terrainShadows,RR.RECEIVE_ONLY));var v=t.skyBox;Object(o.a)(v)||(v=new I_e({sources:{positiveX:xye("px"),negativeX:xye("mx"),positiveY:xye("py"),negativeY:xye("my"),positiveZ:xye("pz"),negativeZ:xye("mz")}})),!1!==v&&(p.skyBox=v,p.sun=new k_e,p.moon=new Due);var _=t.skyAtmosphere;Object(o.a)(_)||(_=new D_e(m)),!1!==_&&(p.skyAtmosphere=_);var b=!1!==t.globe&&t.imageryProvider;Object(o.a)(b)||(b=toe()),!1!==b&&p.imageryLayers.addImageryProvider(b),Object(o.a)(t.terrainProvider)&&!1!==t.globe&&(p.terrainProvider=t.terrainProvider),this._screenSpaceEventHandler=new vS(i),Object(o.a)(t.sceneMode)&&(t.sceneMode===IR.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===IR.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=Object(r.a)(t.useDefaultRenderLoop,!0),this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;var y=this;this._onRenderError=function(e,t){if(y._useDefaultRenderLoop=!1,y._renderLoopRunning=!1,y._showRenderLoopErrors){y.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,t)}},p.renderError.addEventListener(this._onRenderError)}catch(w){if(d){this.showErrorPanel("Error constructing CesiumWidget.",'Visit <a href="http://get.webgl.org">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:',w)}throw w}}Object.defineProperties(Pye.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},camera:{get:function(){return this._scene.camera}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){if(e<=0)throw new a.a("targetFrameRate must be greater than 0, or undefined.");this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&function(e){e._renderLoopRunning=!0;var t=0;xT((function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{var r=e._targetFrameRate;if(Object(o.a)(r)){var a=1e3/r,s=i-t;s>a&&(e.resize(),e.render(),t=i-s%a),xT(n)}else e.resize(),e.render(),xT(n)}catch(c){if(e._useDefaultRenderLoop=!1,e._renderLoopRunning=!1,e._showRenderLoopErrors){e.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,c)}}else e._renderLoopRunning=!1}))}(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){if(e<=0)throw new a.a("resolutionScale must be greater than 0.");this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}}}),Pye.prototype.showErrorPanel=function(e,t,n){var i=this._element,r=document.createElement("div");r.className="cesium-widget-errorPanel";var a=document.createElement("div");a.className="cesium-widget-errorPanel-content",r.appendChild(a);var s=document.createElement("div");s.className="cesium-widget-errorPanel-header",s.appendChild(document.createTextNode(e)),a.appendChild(s);var c=document.createElement("div");function l(){c.style.maxHeight=Math.max(Math.round(.9*i.clientHeight-100),30)+"px"}c.className="cesium-widget-errorPanel-scroll",a.appendChild(c),l(),Object(o.a)(window.addEventListener)&&window.addEventListener("resize",l,!1);var u=Object(o.a)(t),h=Object(o.a)(n);if(u||h){var d=document.createElement("div");if(d.className="cesium-widget-errorPanel-message",c.appendChild(d),h){var f=qc(n);u||("string"===typeof n&&(n=new Error(n)),t=qc({name:n.name,message:n.message}),f=n.stack),"undefined"!==typeof console&&console.error(e+"\n"+t+"\n"+f);var p=document.createElement("div");p.className="cesium-widget-errorPanel-message-details collapsed";var m=document.createElement("span");m.className="cesium-widget-errorPanel-more-details",m.appendChild(document.createTextNode("See more...")),p.appendChild(m),p.onclick=function(e){p.removeChild(m),p.appendChild(document.createTextNode(f)),p.className="cesium-widget-errorPanel-message-details",a.className="cesium-widget-errorPanel-content expanded",p.onclick=void 0},c.appendChild(p)}d.innerHTML="<p>"+t+"</p>"}var g=document.createElement("div");g.className="cesium-widget-errorPanel-buttonPanel",a.appendChild(g);var v=document.createElement("button");v.setAttribute("type","button"),v.className="cesium-button",v.appendChild(document.createTextNode("OK")),v.onclick=function(){Object(o.a)(l)&&Object(o.a)(window.removeEventListener)&&window.removeEventListener("resize",l,!1),i.removeChild(r)},g.appendChild(v),i.appendChild(r)},Pye.prototype.isDestroyed=function(){return!1},Pye.prototype.destroy=function(){Object(o.a)(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),Ks(this)},Pye.prototype.resize=function(){var e=this._canvas;(this._forceResize||this._canvasClientWidth!==e.clientWidth||this._canvasClientHeight!==e.clientHeight||this._lastDevicePixelRatio!==window.devicePixelRatio)&&(this._forceResize=!1,Sye(this),Dye(this),this._scene.requestRender())},Pye.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();var e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};var Iye=Pye;function Mye(e,t){Object(o.a)(t)||(t=document.body),t=ohe(t);var n=this,i=pbe.observable(Yr.fullscreen),a=pbe.observable(Yr.enabled),s=t.ownerDocument;this.isFullscreen=void 0,pbe.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,pbe.defineProperty(this,"isFullscreenEnabled",{get:function(){return a()},set:function(e){a(e&&Yr.enabled)}}),this.tooltip=void 0,pbe.defineProperty(this,"tooltip",(function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"})),this._command=ybe((function(){Yr.fullscreen?Yr.exitFullscreen():Yr.requestFullscreen(n._fullscreenElement)}),pbe.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=Object(r.a)(ohe(e),s.body),this._callback=function(){i(Yr.fullscreen)},s.addEventListener(Yr.changeEventName,this._callback)}Object.defineProperties(Mye.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){if(!(e instanceof Element))throw new a.a("value must be a valid Element.");this._fullscreenElement=e}},command:{get:function(){return this._command}}}),Mye.prototype.isDestroyed=function(){return!1},Mye.prototype.destroy=function(){document.removeEventListener(Yr.changeEventName,this._callback),Ks(this)};var Rye=Mye;function Lye(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e);var n=new Rye(t,e);n._exitFullScreenPath="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z",n._enterFullScreenPath="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z";var i=document.createElement("button");i.type="button",i.className="cesium-button cesium-fullscreenButton",i.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(i),pbe.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(Lye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Lye.prototype.isDestroyed=function(){return!1},Lye.prototype.destroy=function(){return this._viewModel.destroy(),pbe.cleanNode(this._element),this._container.removeChild(this._element),Ks(this)};var jye=Lye;function Fye(e){if(!Object(o.a)(e)||!Object(o.a)(e.scene))throw new a.a("options.scene is required.");Object(o.a)(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new au,new _C({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._geocodePromise=void 0,this._complete=new wn.a,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=zye,this._handleArrowUp=Nye;var t=this;this._suggestionsVisible=pbe.pureComputed((function(){var e=pbe.getObservable(t,"_suggestions")().length>0,n=pbe.getObservable(t,"_showSuggestions")();return e&&n})),this._searchCommand=ybe((function(e){if(e=Object(r.a)(e,Ty.SEARCH),t._focusTextbox=!1,Object(o.a)(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;var n;t.hideSuggestions(),t.isSearchInProgress?((n=t)._isSearchInProgress=!1,Object(o.a)(n._geocodePromise)&&(n._geocodePromise.cancel=!0,n._geocodePromise=void 0)):function(e,t,n){var i=e._searchText;if(Bye(i))return void e.showSuggestions();e._isSearchInProgress=!0;for(var r=Yt.a.resolve(),a=0;a<t.length;a++)r=kye(r,t[a],i,n);e._geocodePromise=r,r.then((function(t){if(!r.cancel){e._isSearchInProgress=!1;var n=t.value;if("fulfilled"===t.state&&Object(o.a)(n)&&n.length>0)return e._searchText=n[0].displayName,void e.destinationFound(e,n[0].destination);e._searchText=i+" (not found)"}}))}(t,t._geocoderServices,e)})),this.deselectSuggestion=function(){t._selectedSuggestion=void 0},this.handleKeyDown=function(e,t){var n="ArrowDown"===t.key||"Down"===t.key||40===t.keyCode,i="ArrowUp"===t.key||"Up"===t.key||38===t.keyCode;return(n||i)&&t.preventDefault(),!0},this.handleKeyUp=function(e,n){var i="ArrowDown"===n.key||"Down"===n.key||40===n.keyCode,r="ArrowUp"===n.key||"Up"===n.key||38===n.keyCode,o="Enter"===n.key||13===n.keyCode;return r?Nye(t):i?zye(t):o&&t._searchCommand(),!0},this.activateSuggestion=function(e){t.hideSuggestions(),t._searchText=e.displayName;var n=e.destination;Hye(t),t.destinationFound(t,n)},this.hideSuggestions=function(){t._showSuggestions=!1,t._selectedSuggestion=void 0},this.showSuggestions=function(){t._showSuggestions=!0},this.handleMouseover=function(e,n){e!==t._selectedSuggestion&&(t._selectedSuggestion=e)},this.keepExpanded=!1,this.autoComplete=Object(r.a)(e.autocomplete,!0),this.destinationFound=Object(r.a)(e.destinationFound,Fye.flyToDestination),this._focusTextbox=!1,pbe.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);var n=pbe.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe((function(){Fye._updateSearchSuggestions(t)})),this.isSearchInProgress=void 0,pbe.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,pbe.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(e){if("string"!==typeof e)throw new a.a("value must be a valid string.");this._searchText=e}}),this.flightDuration=void 0,pbe.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(e){if(Object(o.a)(e)&&e<0)throw new a.a("value must be positive.");this._flightDuration=e}})}function Nye(e){if(0!==e._suggestions.length){var t,n=e._suggestions.indexOf(e._selectedSuggestion);-1!==n&&0!==n?(t=n-1,e._selectedSuggestion=e._suggestions[t],Fye._adjustSuggestionsScroll(e,t)):e._selectedSuggestion=void 0}}function zye(e){if(0!==e._suggestions.length){var t=e._suggestions.length,n=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t;e._selectedSuggestion=e._suggestions[n],Fye._adjustSuggestionsScroll(e,n)}}function kye(e,t,n,i){return e.then((function(e){return Object(o.a)(e)&&"fulfilled"===e.state&&e.value.length>0?e:t.geocode(n,i).then((function(e){return{state:"fulfilled",value:e}})).otherwise((function(e){return{state:"rejected",reason:e}}))}))}function Bye(e){return/^\s*$/.test(e)}function Hye(e){pbe.getObservable(e,"_suggestions").removeAll()}Object.defineProperties(Fye.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}}),Fye.prototype.destroy=function(){this._suggestionSubscription.dispose()},Fye.flyToDestination=function(e,t){var n,i=e._scene,r=i.mapProjection.ellipsoid,a=i.camera,s=i.terrainProvider,c=t;t instanceof Se?d.equalsEpsilon(t.south,t.north,d.EPSILON7)&&d.equalsEpsilon(t.east,t.west,d.EPSILON7)?t=Se.center(t):n=Yie(t,i):t=r.cartesianToCartographic(t),Object(o.a)(n)||(n=function(e,t){var n=Object(o.a)(t)?t.availability:void 0;return Object(o.a)(n)?MT(t,[e]).then((function(t){return(e=t[0]).height+=1e3,e})):(e.height+=1e3,Yt.a.resolve(e))}(t,s)),n.then((function(e){c=r.cartographicToCartesian(e)})).always((function(){a.flyTo({destination:c,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:Ae.IDENTITY})}))},Fye._updateSearchSuggestions=function(e){if(e.autoComplete){var t=e._searchText;if(Hye(e),!Bye(t)){var n=Yt.a.resolve([]);e._geocoderServices.forEach((function(e){n=n.then((function(n){return n.length>=5?n:e.geocode(t,Ty.AUTOCOMPLETE).then((function(e){return n=n.concat(e)}))}))})),n.then((function(t){for(var n=e._suggestions,i=0;i<t.length;i++)n.push(t[i])}))}}},Fye._adjustSuggestionsScroll=function(e,t){var n=ohe(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(0!==t){var o=r.offsetTop;o+r.clientHeight>i.clientHeight?i.scrollTop=o+r.clientHeight:o<i.scrollTop&&(i.scrollTop=o)}else i.scrollTop=0};var Vye=Fye;function Uye(e){if(!Object(o.a)(e)||!Object(o.a)(e.container))throw new a.a("options.container is required.");if(!Object(o.a)(e.scene))throw new a.a("options.scene is required.");var t=ohe(e.container),n=new Vye(e);n._startSearchPath="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",n._stopSearchPath="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";var i=document.createElement("form");i.setAttribute("data-bind","submit: search");var r=document.createElement("input");r.type="search",r.className="cesium-geocoder-input",r.setAttribute("placeholder","Enter an address or landmark..."),r.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout((function(){r.select()}),0)},r.addEventListener("focus",this._onTextBoxFocus,!1),i.appendChild(r),this._textBox=r;var s=document.createElement("span");s.className="cesium-geocoder-searchButton",s.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),i.appendChild(s),t.appendChild(i);var c=document.createElement("div");c.className="search-results",c.setAttribute("data-bind","visible: _suggestionsVisible");var l=document.createElement("ul");l.setAttribute("data-bind","foreach: _suggestions");var u=document.createElement("li");l.appendChild(u),u.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),c.appendChild(l),t.appendChild(c),pbe.applyBindings(n,i),pbe.applyBindings(n,c),this._container=t,this._searchSuggestionsContainer=c,this._viewModel=n,this._form=i,this._onInputBegin=function(e){var i=e.target;"function"===typeof e.composedPath&&(i=e.composedPath()[0]),t.contains(i)||(n._focusTextbox=!1,n.hideSuggestions())},this._onInputEnd=function(e){n._focusTextbox=!0,n.showSuggestions()},oo.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),t.addEventListener("pointerup",this._onInputEnd,!0),t.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),t.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),t.addEventListener("touchend",this._onInputEnd,!0),t.addEventListener("touchcancel",this._onInputEnd,!0))}Object.defineProperties(Uye.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}}),Uye.prototype.isDestroyed=function(){return!1},Uye.prototype.destroy=function(){var e=this._container;return oo.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),pbe.cleanNode(this._form),pbe.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),Ks(this)};var Wye=Uye;function Gye(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");this._scene=e,this._duration=t;var n=this;this._command=ybe((function(){n._scene.camera.flyHome(n._duration)})),this.tooltip="View Home",pbe.track(this,["tooltip"])}Object.defineProperties(Gye.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){if(Object(o.a)(e)&&e<0)throw new a.a("value must be positive.");this._duration=e}}});var qye=Gye;function Yye(e,t,n){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e);var i=new qye(t,n);i._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";var r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-home-button",r.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(r),pbe.applyBindings(i,r),this._container=e,this._viewModel=i,this._element=r}Object.defineProperties(Yye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Yye.prototype.isDestroyed=function(){return!1},Yye.prototype.destroy=function(){return pbe.cleanNode(this._element),this._container.removeChild(this._element),Ks(this)};var $ye=Yye;function Xye(){this._cameraClicked=new wn.a,this._closeClicked=new wn.a,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",pbe.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,pbe.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?"M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z":"M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z"}}),pbe.defineProperty(this,"_bodyless",{get:function(){return!Object(o.a)(this.description)||0===this.description.length}})}Xye.prototype.maxHeightOffset=function(e){return this.maxHeight-e+"px"},Object.defineProperties(Xye.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var Kye=Xye;function Qye(e){i.a.defined("container",e),e=ohe(e);var t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);var n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);var r=document.createElement("button");r.type="button",r.className="cesium-button cesium-infoBox-camera",r.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(r);var a=document.createElement("button");a.type="button",a.className="cesium-infoBox-close",a.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),a.innerHTML="×",t.appendChild(a);var s=document.createElement("iframe");s.className="cesium-infoBox-iframe",s.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),s.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),s.setAttribute("allowfullscreen",!0),t.appendChild(s);var c=new Kye;pbe.applyBindings(c,t),this._container=e,this._element=t,this._frame=s,this._viewModel=c,this._descriptionSubscription=void 0;var l=this;s.addEventListener("load",(function(){var e=s.contentDocument,n=e.createElement("link");n.href=At("Widgets/InfoBox/InfoBoxDescription.css"),n.rel="stylesheet",n.type="text/css";var i=e.createElement("div");i.className="cesium-infoBox-description",e.head.appendChild(n),e.body.appendChild(i),l._descriptionSubscription=Cbe(c,"description",(function(e){s.style.height="5px",i.innerHTML=e;var n=null,r=i.firstElementChild;if(null!==r&&1===i.childNodes.length){var a=window.getComputedStyle(r);if(null!==a){var c=a["background-color"],l=Hf.fromCssColorString(c);Object(o.a)(l)&&0!==l.alpha&&(n=a["background-color"])}}t.style["background-color"]=n;var u=i.getBoundingClientRect().height;s.style.height=u+"px"}))})),s.setAttribute("src","about:blank")}Object.defineProperties(Qye.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}}),Qye.prototype.isDestroyed=function(){return!1},Qye.prototype.destroy=function(){var e=this._container;return pbe.cleanNode(this._element),e.removeChild(this._element),Object(o.a)(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),Ks(this)};var Zye=Qye;function Jye(){this.showInstructions=!1;var e=this;this._command=ybe((function(){e.showInstructions=!e.showInstructions})),this._showClick=ybe((function(){e._touch=!1})),this._showTouch=ybe((function(){e._touch=!0})),this._touch=!1,this.tooltip="Navigation Instructions",pbe.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(Jye.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var ewe=Jye;function twe(e){if(!Object(o.a)(e)||!Object(o.a)(e.container))throw new a.a("options.container is required.");var t=ohe(e.container),n=new ewe,i=Object(r.a)(e.instructionsInitiallyVisible,!1);n.showInstructions=i,n._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";var s=document.createElement("span");s.className="cesium-navigationHelpButton-wrapper",t.appendChild(s);var c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",c.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),s.appendChild(c);var l=document.createElement("div");l.className="cesium-navigation-help",l.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),s.appendChild(l);var u=document.createElement("button");u.type="button",u.className="cesium-navigation-button cesium-navigation-button-left",u.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');var h=document.createElement("img");h.src=At("Widgets/Images/NavigationHelp/Mouse.svg"),h.className="cesium-navigation-button-icon",h.style.width="25px",h.style.height="25px",u.appendChild(h),u.appendChild(document.createTextNode("Mouse"));var d=document.createElement("button");d.type="button",d.className="cesium-navigation-button cesium-navigation-button-right",d.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');var f=document.createElement("img");f.src=At("Widgets/Images/NavigationHelp/Touch.svg"),f.className="cesium-navigation-button-icon",f.style.width="25px",f.style.height="25px",d.appendChild(f),d.appendChild(document.createTextNode("Touch")),l.appendChild(u),l.appendChild(d);var p=document.createElement("div");p.className="cesium-click-navigation-help cesium-navigation-help-instructions",p.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),p.innerHTML=' <table> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/MouseLeft.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">Left click + drag</div> </td> </tr> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/MouseRight.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Right click + drag, or</div> <div class="cesium-navigation-help-details">Mouse wheel scroll</div> </td> </tr> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/MouseMiddle.svg")+'" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Rotate view</div> <div class="cesium-navigation-help-details">Middle click + drag, or</div> <div class="cesium-navigation-help-details">CTRL + Left/Right click + drag</div> </td> </tr> </table>',l.appendChild(p);var m=document.createElement("div");m.className="cesium-touch-navigation-help cesium-navigation-help-instructions",m.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),m.innerHTML=' <table> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/TouchDrag.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">One finger drag</div> </td> </tr> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/TouchZoom.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Two finger pinch</div> </td> </tr> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/TouchTilt.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Tilt view</div> <div class="cesium-navigation-help-details">Two finger drag, same direction</div> </td> </tr> <tr> <td><img src="'+At("Widgets/Images/NavigationHelp/TouchRotate.svg")+'" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">Rotate view</div> <div class="cesium-navigation-help-details">Two finger drag, opposite direction</div> </td> </tr> </table>',l.appendChild(m),pbe.applyBindings(n,s),this._container=t,this._viewModel=n,this._wrapper=s,this._closeInstructions=function(e){s.contains(e.target)||(n.showInstructions=!1)},oo.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(twe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),twe.prototype.isDestroyed=function(){return!1},twe.prototype.destroy=function(){return oo.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),pbe.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),Ks(this)};var nwe=twe;function iwe(e){if(!Object(o.a)(e)||!Object(o.a)(e.scene))throw new a.a("options.scene is required.");this._scene=e.scene,this.lowFrameRateMessage=Object(r.a)(e.lowFrameRateMessage,"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers."),this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,pbe.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);var t=this;this._dismissMessage=ybe((function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0}));var n=cae.fromScene(e.scene);this._unsubscribeLowFrameRate=n.lowFrameRate.addEventListener((function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)})),this._unsubscribeNominalFrameRate=n.nominalFrameRate.addEventListener((function(){t.showingLowFrameRateMessage=!1}))}Object.defineProperties(iwe.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}}),iwe.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),Ks(this)};var rwe=iwe;function owe(e){if(!Object(o.a)(e)||!Object(o.a)(e.container))throw new a.a("options.container is required.");if(!Object(o.a)(e.scene))throw new a.a("options.scene is required.");var t=ohe(e.container),n=new rwe(e),i=document.createElement("div");i.className="cesium-performance-watchdog-message-area",i.setAttribute("data-bind","visible: showingLowFrameRateMessage");var r=document.createElement("button");r.setAttribute("type","button"),r.className="cesium-performance-watchdog-message-dismiss",r.innerHTML="×",r.setAttribute("data-bind","click: dismissMessage"),i.appendChild(r);var s=document.createElement("div");s.className="cesium-performance-watchdog-message",s.setAttribute("data-bind","html: lowFrameRateMessage"),i.appendChild(s),t.appendChild(i),pbe.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(owe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),owe.prototype.isDestroyed=function(){return!1},owe.prototype.destroy=function(){return this._viewModel.destroy(),pbe.cleanNode(this._element),this._container.removeChild(this._element),Ks(this)};function awe(e){if(!Object(o.a)(e))throw new a.a("scene is required.");this._scene=e,this._orthographic=e.camera.frustum instanceof Vb,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,pbe.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);var t=this;pbe.defineProperty(this,"selectedTooltip",(function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective})),this._toggleDropDown=ybe((function(){t.sceneMode===IR.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)})),this._eventHelper=new Ib,this._eventHelper.add(e.morphComplete,(function(e,n,i,r){t.sceneMode=i,t._orthographic=i===IR.SCENE2D||t._scene.camera.frustum instanceof Vb})),this._eventHelper.add(e.preRender,(function(){t._flightInProgress=Object(o.a)(e.camera._currentFlight)})),this._switchToPerspective=ybe((function(){t.sceneMode!==IR.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)})),this._switchToOrthographic=ybe((function(){t.sceneMode!==IR.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)})),this._sceneMode=IR}Object.defineProperties(awe.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}}),awe.prototype.isDestroyed=function(){return!1},awe.prototype.destroy=function(){this._eventHelper.removeAll(),Ks(this)};var swe=awe;function cwe(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("scene is required.");e=ohe(e);var n=new swe(t);n._perspectivePath="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",n._orthographicPath="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";var i=document.createElement("span");i.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(i);var r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),r.innerHTML='\x3c!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --\x3e\x3c!-- /ko --\x3e',i.appendChild(r);var s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),i.appendChild(s);var c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),i.appendChild(c),pbe.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(e){i.contains(e.target)||(n.dropDownVisible=!1)},oo.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(cwe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),cwe.prototype.isDestroyed=function(){return!1},cwe.prototype.destroy=function(){return this._viewModel.destroy(),oo.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),pbe.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),Ks(this)};var lwe=cwe;function uwe(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");this._scene=e;var n=this;this._eventHelper=new Ib,this._eventHelper.add(e.morphStart,(function(e,t,i,r){n.sceneMode=i,n.dropDownVisible=!1})),this._duration=Object(r.a)(t,2),this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="2D",this.tooltip3D="3D",this.tooltipColumbusView="Columbus View",pbe.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,pbe.defineProperty(this,"selectedTooltip",(function(){var e=n.sceneMode;return e===IR.SCENE2D?n.tooltip2D:e===IR.SCENE3D?n.tooltip3D:n.tooltipColumbusView})),this._toggleDropDown=ybe((function(){n.dropDownVisible=!n.dropDownVisible})),this._morphTo2D=ybe((function(){e.morphTo2D(n._duration)})),this._morphTo3D=ybe((function(){e.morphTo3D(n._duration)})),this._morphToColumbusView=ybe((function(){e.morphToColumbusView(n._duration)})),this._sceneMode=IR}Object.defineProperties(uwe.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){if(e<0)throw new a.a("duration value must be positive.");this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}}),uwe.prototype.isDestroyed=function(){return!1},uwe.prototype.destroy=function(){this._eventHelper.removeAll(),Ks(this)};var hwe=uwe;function dwe(e,t,n){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("scene is required.");e=ohe(e);var i=new hwe(t,n);i._globePath="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",i._flatMapPath="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",i._columbusViewPath="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";var r=document.createElement("span");r.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(r);var s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button",s.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),s.innerHTML='\x3c!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --\x3e\x3c!-- /ko --\x3e\x3c!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --\x3e\x3c!-- /ko --\x3e',r.appendChild(s);var c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),r.appendChild(c);var l=document.createElement("button");l.type="button",l.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",l.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),r.appendChild(l);var u=document.createElement("button");u.type="button",u.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",u.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),r.appendChild(u),pbe.applyBindings(i,r),this._viewModel=i,this._container=e,this._wrapper=r,this._closeDropDown=function(e){r.contains(e.target)||(i.dropDownVisible=!1)},oo.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(dwe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),dwe.prototype.isDestroyed=function(){return!1},dwe.prototype.destroy=function(){return this._viewModel.destroy(),oo.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),pbe.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),Ks(this)};var fwe=dwe,pwe=new Mt;function mwe(e,t,n){if(!Object(o.a)(e))throw new a.a("scene is required.");if(!Object(o.a)(t))throw new a.a("selectionIndicatorElement is required.");if(!Object(o.a)(n))throw new a.a("container is required.");this._scene=e,this._screenPositionX="-1000px",this._screenPositionY="-1000px",this._tweens=e.tweens,this._container=Object(r.a)(n,document.body),this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,pbe.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,pbe.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&Object(o.a)(this.position)}}),pbe.defineProperty(this,"_transform",{get:function(){return"scale("+this._scale+")"}}),this.computeScreenSpacePosition=function(t,n){return bq.wgs84ToWindowCoordinates(e,t,n)}}mwe.prototype.update=function(){if(this.showSelection&&Object(o.a)(this.position)){var e=this.computeScreenSpacePosition(this.position,pwe);if(Object(o.a)(e)){var t=this._container,n=t.parentNode.clientWidth,i=t.parentNode.clientHeight,r=this._selectionIndicatorElement.clientWidth,a=.5*r;e.x=Math.min(Math.max(e.x,-r),n+r)-a,e.y=Math.min(Math.max(e.y,-r),i+r)-a,this._screenPositionX=Math.floor(e.x+.25)+"px",this._screenPositionY=Math.floor(e.y+.25)+"px"}else this._screenPositionX="-1000px",this._screenPositionY="-1000px"}},mwe.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:rb.EXPONENTIAL_OUT})},mwe.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:rb.EXPONENTIAL_OUT})},Object.defineProperties(mwe.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var gwe=mwe;function vwe(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e),this._container=e;var n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;var i="http://www.w3.org/2000/svg",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");var s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);var c=document.createElementNS(i,"path");c.setAttribute("data-bind","attr: { transform: _transform }"),c.setAttribute("d","M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z"),s.appendChild(c),n.appendChild(r);var l=new gwe(t,this._element,this._container);this._viewModel=l,pbe.applyBindings(this._viewModel,this._element)}Object.defineProperties(vwe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),vwe.prototype.isDestroyed=function(){return!1},vwe.prototype.destroy=function(){var e=this._container;return pbe.cleanNode(this._element),e.removeChild(this._element),Ks(this)};var _we=vwe;function bwe(e,t,n){this._color=e,this._height=t,this._base=Object(r.a)(n,0)}bwe.prototype.getHeight=function(){return this._height},bwe.prototype.getBase=function(){return this._base},bwe.prototype.getStartTime=function(){return this._start},bwe.prototype.getStopTime=function(){return this._stop},bwe.prototype.setRange=function(e,t){this._start=e,this._stop=t},bwe.prototype.render=function(e){var t="";if(this._start&&this._stop&&this._color){var n=hr.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),r=hr.secondsDifference(this._stop,e.epochJulian),o=Math.round(e.timeBarWidth*e.getAlpha(r))-i;i<0&&(o+=i,i=0),i+o>e.timeBarWidth&&(o=e.timeBarWidth-i),o>0&&(t='<span class="cesium-timeline-highlight" style="left: '+i.toString()+"px; width: "+o.toString()+"px; bottom: "+this._base.toString()+"px; height: "+this._height+"px; background-color: "+this._color+';"></span>')}return t};var ywe=bwe;function wwe(e,t,n,i){this.interval=e,this.height=t,this.color=n||new Hf(.5,.5,.5,1),this.backgroundColor=i||new Hf(0,0,0,0)}wwe.prototype.render=function(e,t){var n=this.interval.start,i=this.interval.stop,r=t.startJulian,a=hr.addSeconds(t.startJulian,t.duration,new hr);if(hr.lessThan(n,r)&&hr.greaterThan(i,a))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(hr.lessThanOrEquals(n,a)&&hr.greaterThanOrEquals(i,r)){var s,c,l;for(s=0;s<t.timeBarWidth;++s){var u=hr.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new hr);!Object(o.a)(c)&&hr.greaterThanOrEquals(u,n)?c=s:!Object(o.a)(l)&&hr.greaterThanOrEquals(u,i)&&(l=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),Object(o.a)(c)&&(Object(o.a)(l)||(l=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(c,t.y,Math.max(l-c,1),this.height))}};var Owe=wwe,Cwe=1e12,Ewe=0,Awe=1,xwe=2,Twe=3,Swe=4,Dwe=0,Pwe=1,Iwe=2,Mwe=3,Rwe=4,Lwe=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6],jwe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function Fwe(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("clock is required.");var n=(e=ohe(e)).ownerDocument;this.container=e;var i,r=n.createElement("div");r.className="cesium-timeline-main",e.appendChild(r),this._topDiv=r,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=Ewe,this._touchMode=Dwe,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=(i=this,function(e){i._mouseMode!==Swe&&(0===e.button?(i._mouseMode=Awe,i._scrubElement&&(i._scrubElement.style.backgroundPosition="-16px 0"),i._onMouseMove(e)):(i._mouseX=e.clientX,2===e.button?i._mouseMode=Twe:i._mouseMode=xwe)),e.preventDefault()}),this._onMouseUp=function(e){return function(t){e._mouseMode=Ewe,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}(this),this._onMouseMove=function(e){return function(t){var n;if(e._mouseMode===Awe){t.preventDefault();var i=t.clientX-e._topDiv.getBoundingClientRect().left;i<0?(e._timelineDragLocation=0,e._timelineDrag=-.01*e._timeBarSecondsSpan):i>e._topDiv.clientWidth?(e._timelineDragLocation=e._topDiv.clientWidth,e._timelineDrag=.01*e._timeBarSecondsSpan):(e._timelineDragLocation=void 0,e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))}else if(e._mouseMode===xwe){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,0!==n){var r=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(hr.addSeconds(e._startJulian,r,new hr),hr.addSeconds(e._endJulian,r,new hr))}}else e._mouseMode===Twe&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,0!==n&&e.zoomFrom(Math.pow(1.01,n)))}}(this),this._onMouseWheel=function(e){return function(t){var n=t.wheelDeltaY||t.wheelDelta||-t.detail;n/=Cwe=Math.max(Math.min(Math.abs(n),Cwe),1),e.zoomFrom(Math.pow(1.05,-n))}}(this),this._onTouchStart=function(e){return function(t){var n,i,r=t.touches.length,o=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=Swe,1===r?(n=hr.secondsDifference(e._scrubJulian,e._startJulian),i=Math.round(n*e._topDiv.clientWidth/e._timeBarSecondsSpan+o),Math.abs(t.touches[0].clientX-i)<50?(e._touchMode=Pwe,e._scrubElement&&(e._scrubElement.style.backgroundPosition=1===r?"-16px 0":"0 0")):(e._touchMode=Mwe,e._touchState.centerX=t.touches[0].clientX-o)):2===r?(e._touchMode=Iwe,e._touchState.centerX=.5*(t.touches[0].clientX+t.touches[1].clientX)-o,e._touchState.spanX=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):e._touchMode=Rwe}}(this),this._onTouchMove=function(e){return function(t){var n,i,r,a,s,c,l=1,u=e._topDiv.getBoundingClientRect().left;e._touchMode===Mwe&&(e._touchMode=Iwe),e._mouseMode=Swe,e._touchMode===Pwe?(t.preventDefault(),1===t.changedTouches.length&&(i=t.changedTouches[0].clientX-u)>=0&&i<=e._topDiv.clientWidth&&e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth)):e._touchMode===Iwe&&(2===(r=t.touches.length)?(a=.5*(t.touches[0].clientX+t.touches[1].clientX)-u,s=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):1===r&&(a=t.touches[0].clientX-u,s=0),Object(o.a)(a)&&(s>0&&e._touchState.spanX>0?(l=e._touchState.spanX/s,c=hr.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-a*e._timeBarSecondsSpan*l)/e._topDiv.clientWidth,new hr)):(n=e._touchState.centerX-a,c=hr.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new hr)),e.zoomTo(c,hr.addSeconds(c,e._timeBarSecondsSpan*l,new hr)),e._touchState.centerX=a,e._touchState.spanX=s))}}(this),this._onTouchEnd=function(e){return function(t){var n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===Mwe?(e._touchMode=Pwe,e._onTouchMove(t)):e._touchMode===Pwe&&e._onTouchMove(t),e._mouseMode=Swe,1!==n?e._touchMode=n>0?Rwe:Dwe:e._touchMode===Iwe&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}(this);var s=this._timeBarEle;n.addEventListener("mouseup",this._onMouseUp,!1),n.addEventListener("mousemove",this._onMouseMove,!1),s.addEventListener("mousedown",this._onMouseDown,!1),s.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),s.addEventListener("mousewheel",this._onMouseWheel,!1),s.addEventListener("touchstart",this._onTouchStart,!1),s.addEventListener("touchmove",this._onTouchMove,!1),s.addEventListener("touchend",this._onTouchEnd,!1),s.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}function Nwe(e){return e<10?"0"+e.toString():e.toString()}Fwe.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)},Fwe.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)},Fwe.prototype.isDestroyed=function(){return!1},Fwe.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);var e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);var t=this._timeBarEle;t.removeEventListener("mousedown",this._onMouseDown,!1),t.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),t.removeEventListener("mousewheel",this._onMouseWheel,!1),t.removeEventListener("touchstart",this._onTouchStart,!1),t.removeEventListener("touchmove",this._onTouchMove,!1),t.removeEventListener("touchend",this._onTouchEnd,!1),t.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),Ks(this)},Fwe.prototype.addHighlightRange=function(e,t,n){var i=new ywe(e,t,n);return this._highlightRanges.push(i),this.resize(),i},Fwe.prototype.addTrack=function(e,t,n,i){var r=new Owe(e,t,n,i);return this._trackList.push(r),this._lastHeight=void 0,this.resize(),r},Fwe.prototype.zoomTo=function(e,t){if(!Object(o.a)(e))throw new a.a("startTime is required.");if(!Object(o.a)(t))throw new a.a("stopTime is required");if(hr.lessThanOrEquals(t,e))throw new a.a("Start time must come before end time.");if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=hr.secondsDifference(t,e),this._clock&&this._clock.clockRange!==xf.UNBOUNDED){var n=this._clock.startTime,i=this._clock.stopTime,r=hr.secondsDifference(i,n),s=hr.secondsDifference(n,this._startJulian),c=hr.secondsDifference(i,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=hr.addSeconds(this._endJulian,s,new hr),this._startJulian=n,this._timeBarSecondsSpan=hr.secondsDifference(this._endJulian,this._startJulian)):c<0&&(this._startJulian=hr.addSeconds(this._startJulian,c,new hr),this._endJulian=i,this._timeBarSecondsSpan=hr.secondsDifference(this._endJulian,this._startJulian))}this._makeTics();var l=document.createEvent("Event");l.initEvent("setzoom",!0,!0),l.startJulian=this._startJulian,l.endJulian=this._endJulian,l.epochJulian=this._epochJulian,l.totalSpan=this._timeBarSecondsSpan,l.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(l)},Fwe.prototype.zoomFrom=function(e){var t=hr.secondsDifference(this._scrubJulian,this._startJulian);e>1||t<0||t>this._timeBarSecondsSpan?t=.5*this._timeBarSecondsSpan:t+=t-.5*this._timeBarSecondsSpan;var n=this._timeBarSecondsSpan-t;this.zoomTo(hr.addSeconds(this._startJulian,t-t*e,new hr),hr.addSeconds(this._endJulian,n*e-n,new hr))},Fwe.prototype.makeLabel=function(e){var t=hr.toGregorianDate(e),n=t.millisecond,i=" UTC";if(n>0&&this._timeBarSecondsSpan<3600){for(i=Math.floor(n).toString();i.length<3;)i="0"+i;i="."+i}return jwe[t.month-1]+" "+t.day+" "+t.year+" "+Nwe(t.hour)+":"+Nwe(t.minute)+":"+Nwe(t.second)+i},Fwe.prototype.smallestTicInPixels=7,Fwe.prototype._makeTics=function(){var e,t=this._timeBarEle,n=hr.secondsDifference(this._scrubJulian,this._startJulian),i=Math.round(n*this._topDiv.clientWidth/this._timeBarSecondsSpan),r=i-8,o=this;this._needleEle.style.left=i.toString()+"px";var a="",s=0,c=this._timeBarSecondsSpan;c<.01?(c=.01,this._timeBarSecondsSpan=.01,this._endJulian=hr.addSeconds(this._startJulian,.01,new hr)):c>31536e6&&(c=31536e6,this._timeBarSecondsSpan=31536e6,this._endJulian=hr.addSeconds(this._startJulian,31536e6,new hr));var l=this._timeBarEle.clientWidth;l<10&&(l=10);var u,h=this._startJulian,d=Math.min(c/l*1e-5,.4),f=hr.toGregorianDate(h);u=c>31536e4?hr.fromDate(new Date(Date.UTC(100*Math.floor(f.year/100),0))):c>31536e3?hr.fromDate(new Date(Date.UTC(10*Math.floor(f.year/10),0))):c>86400?hr.fromDate(new Date(Date.UTC(f.year,0))):hr.fromDate(new Date(Date.UTC(f.year,f.month,f.day)));var p=hr.secondsDifference(this._startJulian,hr.addSeconds(u,d,new hr)),m=p+c;function g(e){return Math.floor(p/e)*e}function v(e,t){return Math.ceil(e/t+.5)*t}function _(e){return(e-p)/c}function b(e,t){return e-t*Math.round(e/t)}this._epochJulian=u,this._rulerEle.innerHTML=this.makeLabel(hr.addSeconds(this._endJulian,-.01,new hr));var y=this._rulerEle.offsetWidth+20;y<30&&(y=180);var w=s;s-=1e-10;var O={startTime:p,startJulian:h,epochJulian:u,duration:c,timeBarWidth:l,getAlpha:_};this._highlightRanges.forEach((function(e){a+=e.render(O)}));var C=0,E=0,A=0,x=y/l;x>1&&(x=1),x*=this._timeBarSecondsSpan;var T,S=-1,D=-1,P=Lwe.length;for(T=0;T<P;++T){var I=Lwe[T];if(++S,C=I,I>x&&I>s)break;D<0&&l*(I/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(D=S)}if(S>0){for(;S>0;)if(--S,Math.abs(b(C,Lwe[S]))<1e-5){Lwe[S]>=s&&(E=Lwe[S]);break}if(D>=0)for(;D<S;){if(Math.abs(b(E,Lwe[D]))<1e-5&&Lwe[D]>=s){A=Lwe[D];break}++D}}(s=w)>1e-10&&A<1e-5&&Math.abs(s-C)>1e-10&&(A=s,s<=C+1e-10&&(E=0));var M,R=-999999;if(l*(A/this._timeBarSecondsSpan)>=3)for(e=g(A);e<=m;e=v(e,A))a+='<span class="cesium-timeline-ticTiny" style="left: '+Math.round(l*_(e)).toString()+'px;"></span>';if(l*(E/this._timeBarSecondsSpan)>=3)for(e=g(E);e<=m;e=v(e,E))a+='<span class="cesium-timeline-ticSub" style="left: '+Math.round(l*_(e)).toString()+'px;"></span>';if(l*(C/this._timeBarSecondsSpan)>=2){this._mainTicSpan=C,m+=C,e=g(C);for(var L=hr.computeTaiMinusUtc(u);e<=m;){var j=hr.addSeconds(h,e-p,new hr);if(C>2.1){var F=hr.computeTaiMinusUtc(j);Math.abs(F-L)>.1&&(e+=F-L,j=hr.addSeconds(h,e-p,new hr))}var N=Math.round(l*_(e)),z=this.makeLabel(j);this._rulerEle.innerHTML=z,(M=this._rulerEle.offsetWidth)<10&&(M=y);var k=N-(M/2-1);k>R?(R=k+M+5,a+='<span class="cesium-timeline-ticMain" style="left: '+N.toString()+'px;"></span><span class="cesium-timeline-ticLabel" style="left: '+k.toString()+'px;">'+z+"</span>"):a+='<span class="cesium-timeline-ticSub" style="left: '+N.toString()+'px;"></span>',e=v(e,C)}}else this._mainTicSpan=-1;a+='<span class="cesium-timeline-icon16" style="left:'+r+'px;bottom:0;background-position: 0 0;"></span>',t.innerHTML=a,this._scrubElement=t.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),O.y=0,this._trackList.forEach((function(e){e.render(o._context,O),O.y+=e.height}))},Fwe.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;var e=this._scrubElement;if(Object(o.a)(this._scrubElement)){var t=hr.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan);this._lastXPos!==n&&(this._lastXPos=n,e.style.left=n-8+"px",this._needleEle.style.left=n+"px")}Object(o.a)(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(hr.addSeconds(this._startJulian,this._timelineDrag,new hr),hr.addSeconds(this._endJulian,this._timelineDrag,new hr)))},Fwe.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=hr.addSeconds(this._startJulian,t,new hr),this._scrubElement){var n=e-8;this._scrubElement.style.left=n.toString()+"px",this._needleEle.style.left=e.toString()+"px"}var i=document.createEvent("Event");i.initEvent("settime",!0,!0),i.clientX=e,i.timeSeconds=t,i.timeJulian=this._scrubJulian,i.clock=this._clock,this._topDiv.dispatchEvent(i)},Fwe.prototype.resize=function(){var e=this.container.clientWidth,t=this.container.clientHeight;if(e!==this._lastWidth||t!==this._lastHeight){this._trackContainer.style.height=t+"px";var n=1;this._trackList.forEach((function(e){n+=e.height})),this._trackListEle.style.height=n.toString()+"px",this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=n,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=t}};var zwe=Fwe;function kwe(){var e=window.screen;Object(o.a)(e)&&(Object(o.a)(e.unlockOrientation)?e.unlockOrientation():Object(o.a)(e.mozUnlockOrientation)?e.mozUnlockOrientation():Object(o.a)(e.msUnlockOrientation)?e.msUnlockOrientation():Object(o.a)(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function Bwe(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(kwe(),e._locked=!1),e._noSleep.disable(),Yr.exitFullscreen(),n(!1)):(Yr.fullscreen||Yr.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=function(e){var t=!1,n=window.screen;return Object(o.a)(n)&&(Object(o.a)(n.lockOrientation)?t=n.lockOrientation(e):Object(o.a)(n.mozLockOrientation)?t=n.mozLockOrientation(e):Object(o.a)(n.msLockOrientation)?t=n.msLockOrientation(e):Object(o.a)(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}("landscape")),t.useWebVR=!0,n(!0)))}function Hwe(e,t){if(!Object(o.a)(e))throw new a.a("scene is required.");var n=this,i=pbe.observable(Yr.enabled),s=pbe.observable(!1);this.isVRMode=void 0,pbe.defineProperty(this,"isVRMode",{get:function(){return s()}}),this.isVREnabled=void 0,pbe.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(e){i(e&&Yr.enabled)}}),this.tooltip=void 0,pbe.defineProperty(this,"tooltip",(function(){return i()?s()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"}));var c=pbe.observable(!1);this._isOrthographic=void 0,pbe.defineProperty(this,"_isOrthographic",{get:function(){return c()}}),this._eventHelper=new Ib,this._eventHelper.add(e.preRender,(function(){c(e.camera.frustum instanceof Vb)})),this._locked=!1,this._noSleep=new vbe,this._command=ybe((function(){Bwe(n,e,s,c)}),pbe.getObservable(this,"isVREnabled")),this._vrElement=Object(r.a)(ohe(t),document.body),this._callback=function(){!Yr.fullscreen&&s()&&(e.useWebVR=!1,n._locked&&(kwe(),n._locked=!1),n._noSleep.disable(),s(!1))},document.addEventListener(Yr.changeEventName,this._callback)}Object.defineProperties(Hwe.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){if(!(e instanceof Element))throw new a.a("value must be a valid Element.");this._vrElement=e}},command:{get:function(){return this._command}}}),Hwe.prototype.isDestroyed=function(){return!1},Hwe.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(Yr.changeEventName,this._callback),Ks(this)};var Vwe=Hwe;function Uwe(e,t,n){if(!Object(o.a)(e))throw new a.a("container is required.");if(!Object(o.a)(t))throw new a.a("scene is required.");e=ohe(e);var i=new Vwe(t,n);i._exitVRPath="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z",i._enterVRPath="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z";var r=document.createElement("button");r.type="button",r.className="cesium-button cesium-vrButton",r.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(r),pbe.applyBindings(i,r),this._container=e,this._viewModel=i,this._element=r}Object.defineProperties(Uwe.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}}),Uwe.prototype.isDestroyed=function(){return!1},Uwe.prototype.destroy=function(){return this._viewModel.destroy(),pbe.cleanNode(this._element),this._container.removeChild(this._element),Ks(this)};var Wwe=Uwe,Gwe=new gt;function qwe(e){var t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function Ywe(e,t){var n=e.scene.pick(t.position);if(Object(o.a)(n)){var i=Object(r.a)(n.id,n.primitive.id);if(i instanceof YF)return i}if(Object(o.a)(e.scene.globe))return function(e,t){var n=e.scene,i=n.camera.getPickRay(t),r=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!Object(o.a)(r))return;var a=new YF({id:"Loading...",description:"Loading feature information..."});return Object(Yt.a)(r,(function(t){if(e.selectedEntity===a)if(Object(o.a)(t)&&0!==t.length){var n=t[0],i=new YF({id:n.name,description:n.description});if(Object(o.a)(n.position)){var r=e.scene.globe.ellipsoid.cartographicToCartesian(n.position,Xwe);i.position=new Zj(r)}e.selectedEntity=i}else e.selectedEntity=Kwe()}),(function(){e.selectedEntity===a&&(e.selectedEntity=Kwe())})),a}(e,t.position)}function $we(e,t,n){if(Object(o.a)(n)){var i=n.clock;Object(o.a)(i)&&(i.getValue(t),Object(o.a)(e)&&(e.updateFromClock(),e.zoomTo(i.startTime,i.stopTime)))}}var Xwe=new O;function Kwe(){return new YF({id:"None",description:"No features found."})}function Qwe(e,t){if(!Object(o.a)(e))throw new a.a("container is required.");e=ohe(e),t=Object(r.a)(t,r.a.EMPTY_OBJECT);var n=(!Object(o.a)(t.globe)||!1!==t.globe)&&(!Object(o.a)(t.baseLayerPicker)||!1!==t.baseLayerPicker);if(!n&&Object(o.a)(t.selectedImageryProviderViewModel))throw new a.a("options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget. Either specify options.imageryProvider instead or set options.baseLayerPicker to true.");if(!n&&Object(o.a)(t.selectedTerrainProviderViewModel))throw new a.a("options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget. Either specify options.terrainProvider instead or set options.baseLayerPicker to true.");var i=this,s=document.createElement("div");s.className="cesium-viewer",e.appendChild(s);var c=document.createElement("div");c.className="cesium-viewer-cesiumWidgetContainer",s.appendChild(c);var l=document.createElement("div");l.className="cesium-viewer-bottom",s.appendChild(l);var u,h,d=Object(r.a)(t.scene3DOnly,!1),f=!1;Object(o.a)(t.clockViewModel)?u=(h=t.clockViewModel).clock:(u=new Rf,h=new bbe(u),f=!0),Object(o.a)(t.shouldAnimate)&&(u.shouldAnimate=t.shouldAnimate);var p=new Iye(c,{imageryProvider:!n&&!Object(o.a)(t.imageryProvider)&&void 0,clock:u,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:Object(o.a)(t.creditContainer)?t.creditContainer:l,creditViewport:t.creditViewport,scene3DOnly:d,terrainExaggeration:t.terrainExaggeration,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange}),m=t.dataSources,g=!1;Object(o.a)(m)||(m=new z2,g=!0);var v,_,b=p.scene,y=new M9({scene:b,dataSourceCollection:m}),w=new Ib;if(w.add(u.onTick,Qwe.prototype._onTick,this),w.add(b.morphStart,Qwe.prototype._clearTrackedObject,this),!Object(o.a)(t.selectionIndicator)||!1!==t.selectionIndicator){var O=document.createElement("div");O.className="cesium-viewer-selectionIndicatorContainer",s.appendChild(O),v=new _we(O,b)}if(!Object(o.a)(t.infoBox)||!1!==t.infoBox){var C=document.createElement("div");C.className="cesium-viewer-infoBoxContainer",s.appendChild(C);var E=(_=new Zye(C)).viewModel;w.add(E.cameraClicked,Qwe.prototype._onInfoBoxCameraClicked,this),w.add(E.closeClicked,Qwe.prototype._onInfoBoxClockClicked,this)}var A,x,T,S,D,P,I,M,R,L,j,F,N,z,k,B=document.createElement("div");if(B.className="cesium-viewer-toolbar",s.appendChild(B),!Object(o.a)(t.geocoder)||!1!==t.geocoder){var H,V=document.createElement("div");V.className="cesium-viewer-geocoderContainer",B.appendChild(V),Object(o.a)(t.geocoder)&&"boolean"!==typeof t.geocoder&&(H=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),A=new Wye({container:V,geocoderServices:H,scene:b}),w.add(A.viewModel.search.beforeExecute,Qwe.prototype._clearObjects,this)}if(Object(o.a)(t.homeButton)&&!1===t.homeButton||(x=new $ye(B,b),Object(o.a)(A)&&w.add(x.viewModel.command.afterExecute,(function(){var e=A.viewModel;e.searchText="",e.isSearchInProgress&&e.search()})),w.add(x.viewModel.command.beforeExecute,Qwe.prototype._clearTrackedObject,this)),!0===t.sceneModePicker&&d)throw new a.a("options.sceneModePicker is not available when options.scene3DOnly is set to true.");if(d||Object(o.a)(t.sceneModePicker)&&!1===t.sceneModePicker||(T=new fwe(B,b)),t.projectionPicker&&(S=new lwe(B,b)),n){var U=Object(r.a)(t.imageryProviderViewModels,rye()),W=Object(r.a)(t.terrainProviderViewModels,oye());D=new tye(B,{globe:b.globe,imageryProviderViewModels:U,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:W,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),P=B.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}if(Object(o.a)(t.imageryProvider)&&!1!==t.imageryProvider&&(n&&(D.viewModel.selectedImagery=void 0),b.imageryLayers.removeAll(),b.imageryLayers.addImageryProvider(t.imageryProvider)),Object(o.a)(t.terrainProvider)&&(n&&(D.viewModel.selectedTerrain=void 0),b.terrainProvider=t.terrainProvider),!Object(o.a)(t.navigationHelpButton)||!1!==t.navigationHelpButton){var G=!0;try{if(Object(o.a)(window.localStorage)){var q=window.localStorage.getItem("cesium-hasSeenNavHelp");Object(o.a)(q)&&Boolean(q)?G=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch(Z){}I=new nwe({container:B,instructionsInitiallyVisible:Object(r.a)(t.navigationInstructionsInitiallyVisible,G)})}if(!Object(o.a)(t.animation)||!1!==t.animation){var Y=document.createElement("div");Y.className="cesium-viewer-animationContainer",s.appendChild(Y),M=new qbe(Y,new Qbe(h))}if(!Object(o.a)(t.timeline)||!1!==t.timeline){var $=document.createElement("div");$.className="cesium-viewer-timelineContainer",s.appendChild($),(R=new zwe($,u)).addEventListener("settime",qwe,!1),R.zoomTo(u.startTime,u.stopTime)}if(Object(o.a)(t.fullscreenButton)&&!1===t.fullscreenButton||((F=document.createElement("div")).className="cesium-viewer-fullscreenContainer",s.appendChild(F),L=new jye(F,t.fullscreenElement),j=Cbe(L.viewModel,"isFullscreenEnabled",(function(e){F.style.display=e?"block":"none",Object(o.a)(R)&&(R.container.style.right=F.clientWidth+"px",R.resize())}))),t.vrButton){var X=document.createElement("div");X.className="cesium-viewer-vrContainer",s.appendChild(X),N=new Wwe(X,b,t.fullScreenElement),z=Cbe(N.viewModel,"isVREnabled",(function(e){X.style.display=e?"block":"none",Object(o.a)(L)&&(X.style.right=F.clientWidth+"px"),Object(o.a)(R)&&(R.container.style.right=X.clientWidth+"px",R.resize())})),k=Cbe(N.viewModel,"isVRMode",(function(e){!function(e,t){var n=e._geocoder,i=e._homeButton,r=e._sceneModePicker,a=e._projectionPicker,s=e._baseLayerPicker,c=e._animation,l=e._timeline,u=e._fullscreenButton,h=e._infoBox,d=e._selectionIndicator,f=t?"hidden":"visible";if(Object(o.a)(n)&&(n.container.style.visibility=f),Object(o.a)(i)&&(i.container.style.visibility=f),Object(o.a)(r)&&(r.container.style.visibility=f),Object(o.a)(a)&&(a.container.style.visibility=f),Object(o.a)(s)&&(s.container.style.visibility=f),Object(o.a)(c)&&(c.container.style.visibility=f),Object(o.a)(l)&&(l.container.style.visibility=f),Object(o.a)(u)&&u.viewModel.isFullscreenEnabled&&(u.container.style.visibility=f),Object(o.a)(h)&&(h.container.style.visibility=f),Object(o.a)(d)&&(d.container.style.visibility=f),e._container){var p=t||!Object(o.a)(u)?0:u.container.clientWidth;e._vrButton.container.style.right=p+"px",e.forceResize()}}(i,e)}))}this._baseLayerPickerDropDown=P,this._fullscreenSubscription=j,this._vrSubscription=z,this._vrModeSubscription=k,this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=Object(r.a)(t.automaticallyTrackDataSourceClocks,!0),this._container=e,this._bottomContainer=l,this._element=s,this._cesiumWidget=p,this._selectionIndicator=v,this._infoBox=_,this._dataSourceCollection=m,this._destroyDataSourceCollection=g,this._dataSourceDisplay=y,this._clockViewModel=h,this._destroyClockViewModel=f,this._toolbar=B,this._homeButton=x,this._sceneModePicker=T,this._projectionPicker=S,this._baseLayerPicker=D,this._navigationHelpButton=I,this._animation=M,this._timeline=R,this._fullscreenButton=L,this._vrButton=N,this._geocoder=A,this._eventHelper=w,this._lastWidth=0,this._lastHeight=0,this._allowDataSourcesToSuspendAnimation=!0,this._entityView=void 0,this._enableInfoOrSelection=Object(o.a)(_)||Object(o.a)(v),this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._selectedEntity=void 0,this._clockTrackedDataSource=void 0,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._selectedEntityChanged=new wn.a,this._trackedEntityChanged=new wn.a,pbe.track(this,["_trackedEntity","_selectedEntity","_clockTrackedDataSource"]),w.add(m.dataSourceAdded,Qwe.prototype._onDataSourceAdded,this),w.add(m.dataSourceRemoved,Qwe.prototype._onDataSourceRemoved,this),w.add(b.postUpdate,Qwe.prototype.resize,this),w.add(b.postRender,Qwe.prototype._postRender,this);for(var K=m.length,Q=0;Q<K;Q++)this._dataSourceAdded(m,m.get(Q));this._dataSourceAdded(void 0,y.defaultDataSource),w.add(m.dataSourceAdded,Qwe.prototype._dataSourceAdded,this),w.add(m.dataSourceRemoved,Qwe.prototype._dataSourceRemoved,this),p.screenSpaceEventHandler.setInputAction((function(e){i.selectedEntity=Ywe(i,e)}),RT.LEFT_CLICK),p.screenSpaceEventHandler.setInputAction((function(e){var t=Ywe(i,e);Object(o.a)(t)?cP.getValueOrUndefined(t.position,i.clock.currentTime)?i.trackedEntity=t:i.zoomTo(t):Object(o.a)(i.trackedEntity)&&(i.trackedEntity=void 0)}),RT.LEFT_DOUBLE_CLICK)}function Zwe(e,t,n,i){if(!Object(o.a)(t))throw new a.a("zoomTarget is required.");eOe(e);var s=Yt.a.defer();return e._zoomPromise=s,e._zoomIsFlight=i,e._zoomOptions=n,Object(Yt.a)(t,(function(t){if(e._zoomPromise===s)if(t instanceof zae)t.getViewableRectangle().then((function(t){return Yie(t,e.scene)})).then((function(t){e._zoomPromise===s&&(e._zoomTarget=t)}));else if(t instanceof TZ)e._zoomTarget=t;else if(t instanceof obe)e._zoomTarget=t;else if(t.isLoading&&Object(o.a)(t.loadingEvent))var n=t.loadingEvent.addEventListener((function(){n(),e._zoomPromise===s&&(e._zoomTarget=t.entities.values.slice(0))}));else Array.isArray(t)?e._zoomTarget=t.slice(0):(t=Object(r.a)(t.values,t),Object(o.a)(t.entities)&&(t=t.entities.values),Array.isArray(t)?e._zoomTarget=t.slice(0):e._zoomTarget=[t])})),e.scene.requestRender(),s.promise}function Jwe(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function eOe(e){var t=e._zoomPromise;Object(o.a)(t)&&(Jwe(e),t.resolve(!1))}Object.defineProperties(Qwe.prototype,{container:{get:function(){return this._container}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){if(this._trackedEntity!==e){this._trackedEntity=e,eOe(this);var t=this.scene,n=t.mode;Object(o.a)(e)&&Object(o.a)(e.position)?this._needTrackedEntityUpdate=!0:(this._needTrackedEntityUpdate=!1,n!==IR.COLUMBUS_VIEW&&n!==IR.SCENE2D||(t.screenSpaceCameraController.enableTranslate=!0),n!==IR.COLUMBUS_VIEW&&n!==IR.SCENE3D||(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(Ae.IDENTITY)),this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender()}}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){if(this._selectedEntity!==e){this._selectedEntity=e;var t=Object(o.a)(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;Object(o.a)(e)?Object(o.a)(t)&&t.animateAppear():Object(o.a)(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e)}}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,$we(this._timeline,this.clock,e))}}}),Qwe.prototype.extend=function(e,t){if(!Object(o.a)(e))throw new a.a("mixin is required.");e(this,t)},Qwe.prototype.resize=function(){var e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,r=Object(o.a)(this._animation),a=Object(o.a)(this._timeline);if(e.resize(),n!==this._lastWidth||i!==this._lastHeight){var s=i-125,c=this._baseLayerPickerDropDown;if(Object(o.a)(c)&&(c.style.maxHeight=s+"px"),Object(o.a)(this._geocoder))this._geocoder.searchSuggestionsContainer.style.maxHeight=s+"px";Object(o.a)(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);var l,u=this._timeline,h=0,d=0,f=0;if(r&&"hidden"!==window.getComputedStyle(this._animation.container).visibility){var p=this._lastWidth;l=this._animation.container,n>900?(h=169,p<=900&&(l.style.width="169px",l.style.height="112px",this._animation.resize())):n>=600?(h=136,(p<600||p>900)&&(l.style.width="136px",l.style.height="90px",this._animation.resize())):(h=106,(p>600||0===p)&&(l.style.width="106px",l.style.height="70px",this._animation.resize())),d=h+5}if(a&&"hidden"!==window.getComputedStyle(this._timeline.container).visibility){var m=this._fullscreenButton,g=this._vrButton,v=u.container,_=v.style;f=v.clientHeight+3,_.left=h+"px";var b=0;Object(o.a)(m)&&(b+=m.container.clientWidth),Object(o.a)(g)&&(b+=g.container.clientWidth),_.right=b+"px",u.resize()}this._bottomContainer.style.left=d+"px",this._bottomContainer.style.bottom=f+"px",this._lastWidth=n,this._lastHeight=i}},Qwe.prototype.forceResize=function(){this._lastWidth=0,this.resize()},Qwe.prototype.render=function(){this._cesiumWidget.render()},Qwe.prototype.isDestroyed=function(){return!1},Qwe.prototype.destroy=function(){var e;this.screenSpaceEventHandler.removeInputAction(RT.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(RT.LEFT_DOUBLE_CLICK);var t=this.dataSources,n=t.length;for(e=0;e<n;e++)this._dataSourceRemoved(t,t.get(e));return this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),Object(o.a)(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),Object(o.a)(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),Object(o.a)(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),Object(o.a)(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),Object(o.a)(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),Object(o.a)(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),Object(o.a)(this._timeline)&&(this._timeline.removeEventListener("settime",qwe,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),Object(o.a)(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),Object(o.a)(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),Object(o.a)(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),Object(o.a)(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),this._cesiumWidget=this._cesiumWidget.destroy(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),Ks(this)},Qwe.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(Qwe.prototype._onEntityCollectionChanged,this)},Qwe.prototype._dataSourceRemoved=function(e,t){var n=t.entities;n.collectionChanged.removeEventListener(Qwe.prototype._onEntityCollectionChanged,this),Object(o.a)(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0),Object(o.a)(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)},Qwe.prototype._onTick=function(e){var t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&(this._clockViewModel.canAnimate=n);var i,a=this._entityView;if(Object(o.a)(a)){var s=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(s,!1,Gwe)===aP.DONE&&a.update(t,Gwe)}var c=!1,l=this.selectedEntity,u=Object(o.a)(l)&&this._enableInfoOrSelection;u&&l.isShowing&&l.isAvailable(t)&&(this._dataSourceDisplay.getBoundingSphere(l,!0,Gwe)!==aP.FAILED?i=Gwe.center:Object(o.a)(l.position)&&(i=l.position.getValue(t,i)),c=Object(o.a)(i));var h=Object(o.a)(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;Object(o.a)(h)&&(h.position=O.clone(i,h.position),h.showSelection=u&&c,h.update());var d=Object(o.a)(this._infoBox)?this._infoBox.viewModel:void 0;Object(o.a)(d)&&(d.showInfo=u,d.enableCamera=c,d.isCameraTracking=this.trackedEntity===this.selectedEntity,u?(d.titleText=Object(r.a)(l.name,l.id),d.description=cP.getValueOrDefault(l.description,t,"")):(d.titleText="",d.description=""))},Qwe.prototype._onEntityCollectionChanged=function(e,t,n){for(var i=n.length,r=0;r<i;r++){var o=n[r];this.trackedEntity===o&&(this.trackedEntity=void 0),this.selectedEntity===o&&(this.selectedEntity=void 0)}},Qwe.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{var t=this.selectedEntity.position;Object(o.a)(t)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}},Qwe.prototype._clearTrackedObject=function(){this.trackedEntity=void 0},Qwe.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0},Qwe.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0},Qwe.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&$we(this.timeline,this.clock,e)},Qwe.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);var n=t.entities.id,i=this._eventHelper.add(t.changedEvent,Qwe.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i},Qwe.prototype._onDataSourceRemoved=function(e,t){var n=this.clockTrackedDataSource===t,i=t.entities.id;if(this._dataSourceChangedListeners[i](),this._dataSourceChangedListeners[i]=void 0,n){var r=e.length;this._automaticallyTrackDataSourceClocks&&r>0?this.clockTrackedDataSource=e.get(r-1):this.clockTrackedDataSource=void 0}},Qwe.prototype.zoomTo=function(e,t){return Zwe(this,e,{offset:t},!1)},Qwe.prototype.flyTo=function(e,t){return Zwe(this,e,t,!0)},Qwe.prototype._postRender=function(){!function(e){var t=e._zoomTarget;if(!Object(o.a)(t)||e.scene.mode===IR.MORPHING)return;var n,i,a=e.scene,s=a.camera,c=e._zoomPromise,l=Object(r.a)(e._zoomOptions,{});if(t instanceof TZ)return t.readyPromise.then((function(){var i=t.boundingSphere;Object(o.a)(l.offset)||(l.offset=new qO(0,-.5,i.radius)),n={offset:l.offset,duration:l.duration,maximumHeight:l.maximumHeight,complete:function(){c.resolve(!0)},cancel:function(){c.resolve(!1)}},e._zoomIsFlight?s.flyToBoundingSphere(t.boundingSphere,n):(s.viewBoundingSphere(i,l.offset),s.lookAtTransform(Ae.IDENTITY),c.resolve(!0)),Jwe(e)}));if(t instanceof obe)return t.readyPromise.then((function(){var i=t.boundingSphere;Object(o.a)(l.offset)||(l.offset=new qO(0,-.5,i.radius)),n={offset:l.offset,duration:l.duration,maximumHeight:l.maximumHeight,complete:function(){c.resolve(!0)},cancel:function(){c.resolve(!1)}},e._zoomIsFlight?s.flyToBoundingSphere(i,n):(s.viewBoundingSphere(i,l.offset),s.lookAtTransform(Ae.IDENTITY),c.resolve(!0)),Jwe(e)}));if(t instanceof R)return n={destination:a.mapProjection.ellipsoid.cartographicToCartesian(t),duration:l.duration,maximumHeight:l.maximumHeight,complete:function(){c.resolve(!0)},cancel:function(){c.resolve(!1)}},e._zoomIsFlight?s.flyTo(n):(s.setView(n),c.resolve(!0)),void Jwe(e);for(var u=t,h=[],d=0,f=u.length;d<f;d++){var p=e._dataSourceDisplay.getBoundingSphere(u[d],!1,Gwe);if(p===aP.PENDING)return;p!==aP.FAILED&&h.push(gt.clone(Gwe))}if(0===h.length)return void eOe(e);e.trackedEntity=void 0,i=gt.fromBoundingSpheres(h),e._zoomIsFlight?(Jwe(e),s.flyToBoundingSphere(i,{duration:l.duration,maximumHeight:l.maximumHeight,complete:function(){c.resolve(!0)},cancel:function(){c.resolve(!1)},offset:l.offset})):(s.viewBoundingSphere(i,l.offset),s.lookAtTransform(Ae.IDENTITY),Jwe(e),c.resolve(!0))}(this),function(e){if(!e._needTrackedEntityUpdate)return;var t=e._trackedEntity,n=e.clock.currentTime,i=cP.getValueOrUndefined(t.position,n);if(!Object(o.a)(i))return;var r=e.scene,a=e._dataSourceDisplay.getBoundingSphere(t,!1,Gwe);if(a===aP.PENDING)return;var s=r.mode;s!==IR.COLUMBUS_VIEW&&s!==IR.SCENE2D||(r.screenSpaceCameraController.enableTranslate=!1);s!==IR.COLUMBUS_VIEW&&s!==IR.SCENE3D||(r.screenSpaceCameraController.enableTilt=!1);var c=a!==aP.FAILED?Gwe:void 0;e._entityView=new Y9(t,r,r.mapProjection.ellipsoid),e._entityView.update(n,c),e._needTrackedEntityUpdate=!1}(this)};var tOe=Qwe},function(e,t,n){"use strict";function i(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function r(e){this.setState(function(t){var n=this.constructor.getDerivedStateFromProps(e,t);return null!==n&&void 0!==n?n:null}.bind(this))}function o(e,t){try{var n=this.props,i=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,i)}finally{this.props=n,this.state=i}}function a(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!==typeof e.getDerivedStateFromProps&&"function"!==typeof t.getSnapshotBeforeUpdate)return e;var n=null,a=null,s=null;if("function"===typeof t.componentWillMount?n="componentWillMount":"function"===typeof t.UNSAFE_componentWillMount&&(n="UNSAFE_componentWillMount"),"function"===typeof t.componentWillReceiveProps?a="componentWillReceiveProps":"function"===typeof t.UNSAFE_componentWillReceiveProps&&(a="UNSAFE_componentWillReceiveProps"),"function"===typeof t.componentWillUpdate?s="componentWillUpdate":"function"===typeof t.UNSAFE_componentWillUpdate&&(s="UNSAFE_componentWillUpdate"),null!==n||null!==a||null!==s){var c=e.displayName||e.name,l="function"===typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+c+" uses "+l+" but also contains the following legacy lifecycles:"+(null!==n?"\n "+n:"")+(null!==a?"\n "+a:"")+(null!==s?"\n "+s:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"===typeof e.getDerivedStateFromProps&&(t.componentWillMount=i,t.componentWillReceiveProps=r),"function"===typeof t.getSnapshotBeforeUpdate){if("function"!==typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=o;var u=t.componentDidUpdate;t.componentDidUpdate=function(e,t,n){var i=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;u.call(this,e,t,i)}}return e}n.r(t),n.d(t,"polyfill",(function(){return a})),i.__suppressDeprecationWarning=!0,r.__suppressDeprecationWarning=!0,o.__suppressDeprecationWarning=!0},,function(e,t,n){"use strict";n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return o})),n.d(t,"d",(function(){return a})),n.d(t,"b",(function(){return s}));var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return(o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function a(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}function s(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return a}));var i=n(11),r="Blueprint3",o=["active","alignText","containerRef","current","elementRef","fill","icon","inputRef","intent","inline","large","loading","leftElement","leftIcon","minimal","onRemove","outlined","panel","panelClassName","popoverProps","rightElement","rightIcon","round","small","text"];function a(e,t,n){return void 0===t&&(t=o),void 0===n&&(n=!1),n&&(t=t.concat(o)),t.reduce((function(e,t){return-1!==t.indexOf("-")||e.hasOwnProperty(t)&&delete e[t],e}),Object(i.a)({},e))}},function(e,t,n){"use strict";function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return V}));var r=n(2),o=n.n(r),a=n(36),s=n.n(a),c=s.a.shape({trySubscribe:s.a.func.isRequired,tryUnsubscribe:s.a.func.isRequired,notifyNestedSubs:s.a.func.isRequired,isSubscribed:s.a.func.isRequired}),l=s.a.shape({subscribe:s.a.func.isRequired,dispatch:s.a.func.isRequired,getState:s.a.func.isRequired});o.a.forwardRef;var u=function(e){var t;void 0===e&&(e="store");var n=e+"Subscription",o=function(t){i(a,t);var o=a.prototype;function a(n,i){var r;return(r=t.call(this,n,i)||this)[e]=n.store,r}return o.getChildContext=function(){var t;return(t={})[e]=this[e],t[n]=null,t},o.render=function(){return r.Children.only(this.props.children)},a}(r.Component);return o.propTypes={store:l.isRequired,children:s.a.element.isRequired},o.childContextTypes=((t={})[e]=l.isRequired,t[n]=c,t),o}();function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function d(){return(d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}function f(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}var p=n(395),m=n.n(p),g=n(212),v=n.n(g),_=n(249),b={notify:function(){}};var y=function(){function e(e,t,n){this.store=e,this.parentSub=t,this.onStateChange=n,this.unsubscribe=null,this.listeners=b}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=function(){var e=[],t=[];return{clear:function(){t=null,e=null},notify:function(){for(var n=e=t,i=0;i<n.length;i++)n[i]()},get:function(){return t},subscribe:function(n){var i=!0;return t===e&&(t=e.slice()),t.push(n),function(){i&&null!==e&&(i=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}}())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=b)},e}(),w="undefined"!==typeof o.a.forwardRef,O=0,C={};function E(){}function A(e,t){var n,o;void 0===t&&(t={});var a=t,s=a.getDisplayName,u=void 0===s?function(e){return"ConnectAdvanced("+e+")"}:s,p=a.methodName,g=void 0===p?"connectAdvanced":p,b=a.renderCountProp,A=void 0===b?void 0:b,x=a.shouldHandleStateChanges,T=void 0===x||x,S=a.storeKey,D=void 0===S?"store":S,P=a.withRef,I=void 0!==P&&P,M=f(a,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),R=D+"Subscription",L=O++,j=((n={})[D]=l,n[R]=c,n),F=((o={})[R]=c,o);return function(t){v()(Object(_.isValidElementType)(t),"You must pass a component to the function returned by "+g+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",o=u(n),a=d({},M,{getDisplayName:u,methodName:g,renderCountProp:A,shouldHandleStateChanges:T,storeKey:D,withRef:I,displayName:o,wrappedComponentName:n,WrappedComponent:t}),s=function(n){function s(e,t){var i;return(i=n.call(this,e,t)||this).version=L,i.state={},i.renderCount=0,i.store=e[D]||t[D],i.propsMode=Boolean(e[D]),i.setWrappedInstance=i.setWrappedInstance.bind(h(h(i))),v()(i.store,'Could not find "'+D+'" in either the context or props of "'+o+'". Either wrap the root component in a <Provider>, or explicitly pass "'+D+'" as a prop to "'+o+'".'),i.initSelector(),i.initSubscription(),i}i(s,n);var c=s.prototype;return c.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[R]=t||this.context[R],e},c.componentDidMount=function(){T&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},c.componentWillReceiveProps=function(e){this.selector.run(e)},c.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},c.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=E,this.store=null,this.selector.run=E,this.selector.shouldComponentUpdate=!1},c.getWrappedInstance=function(){return v()(I,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+g+"() call."),this.wrappedInstance},c.setWrappedInstance=function(e){this.wrappedInstance=e},c.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(i){try{var r=e(t.getState(),i);(r!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=r,n.error=null)}catch(o){n.shouldComponentUpdate=!0,n.error=o}}};return n}(t,this.store),this.selector.run(this.props)},c.initSubscription=function(){if(T){var e=(this.propsMode?this.props:this.context)[R];this.subscription=new y(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},c.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(C)):this.notifyNestedSubs()},c.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},c.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},c.addExtraProps=function(e){if(!I&&!A&&(!this.propsMode||!this.subscription))return e;var t=d({},e);return I&&(t.ref=this.setWrappedInstance),A&&(t[A]=this.renderCount++),this.propsMode&&this.subscription&&(t[R]=this.subscription),t},c.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(r.createElement)(t,this.addExtraProps(e.props))},s}(r.Component);return w&&(s.prototype.UNSAFE_componentWillReceiveProps=s.prototype.componentWillReceiveProps,delete s.prototype.componentWillReceiveProps),s.WrappedComponent=t,s.displayName=o,s.childContextTypes=F,s.contextTypes=j,s.propTypes=j,m()(s,t)}}var x=Object.prototype.hasOwnProperty;function T(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function S(e,t){if(T(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var r=0;r<n.length;r++)if(!x.call(t,n[r])||!T(e[n[r]],t[n[r]]))return!1;return!0}var D=n(115);function P(e){return function(t,n){var i=e(t,n);function r(){return i}return r.dependsOnOwnProps=!1,r}}function I(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function M(e,t){return function(t,n){n.displayName;var i=function(e,t){return i.dependsOnOwnProps?i.mapToProps(e,t):i.mapToProps(e)};return i.dependsOnOwnProps=!0,i.mapToProps=function(t,n){i.mapToProps=e,i.dependsOnOwnProps=I(e);var r=i(t,n);return"function"===typeof r&&(i.mapToProps=r,i.dependsOnOwnProps=I(r),r=i(t,n)),r},i}}var R=[function(e){return"function"===typeof e?M(e):void 0},function(e){return e?void 0:P((function(e){return{dispatch:e}}))},function(e){return e&&"object"===typeof e?P((function(t){return Object(D.b)(e,t)})):void 0}];var L=[function(e){return"function"===typeof e?M(e):void 0},function(e){return e?void 0:P((function(){return{}}))}];function j(e,t,n){return d({},n,e,t)}var F=[function(e){return"function"===typeof e?function(e){return function(t,n){n.displayName;var i,r=n.pure,o=n.areMergedPropsEqual,a=!1;return function(t,n,s){var c=e(t,n,s);return a?r&&o(c,i)||(i=c):(a=!0,i=c),i}}}(e):void 0},function(e){return e?void 0:function(){return j}}];function N(e,t,n,i){return function(r,o){return n(e(r,o),t(i,o),o)}}function z(e,t,n,i,r){var o,a,s,c,l,u=r.areStatesEqual,h=r.areOwnPropsEqual,d=r.areStatePropsEqual,f=!1;function p(r,f){var p=!h(f,a),m=!u(r,o);return o=r,a=f,p&&m?(s=e(o,a),t.dependsOnOwnProps&&(c=t(i,a)),l=n(s,c,a)):p?(e.dependsOnOwnProps&&(s=e(o,a)),t.dependsOnOwnProps&&(c=t(i,a)),l=n(s,c,a)):m?function(){var t=e(o,a),i=!d(t,s);return s=t,i&&(l=n(s,c,a)),l}():l}return function(r,u){return f?p(r,u):(s=e(o=r,a=u),c=t(i,a),l=n(s,c,a),f=!0,l)}}function k(e,t){var n=t.initMapStateToProps,i=t.initMapDispatchToProps,r=t.initMergeProps,o=f(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),a=n(e,o),s=i(e,o),c=r(e,o);return(o.pure?z:N)(a,s,c,e,o)}function B(e,t,n){for(var i=t.length-1;i>=0;i--){var r=t[i](e);if(r)return r}return function(t,i){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+i.wrappedComponentName+".")}}function H(e,t){return e===t}var V=function(e){var t=void 0===e?{}:e,n=t.connectHOC,i=void 0===n?A:n,r=t.mapStateToPropsFactories,o=void 0===r?L:r,a=t.mapDispatchToPropsFactories,s=void 0===a?R:a,c=t.mergePropsFactories,l=void 0===c?F:c,u=t.selectorFactory,h=void 0===u?k:u;return function(e,t,n,r){void 0===r&&(r={});var a=r,c=a.pure,u=void 0===c||c,p=a.areStatesEqual,m=void 0===p?H:p,g=a.areOwnPropsEqual,v=void 0===g?S:g,_=a.areStatePropsEqual,b=void 0===_?S:_,y=a.areMergedPropsEqual,w=void 0===y?S:y,O=f(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),C=B(e,o,"mapStateToProps"),E=B(t,s,"mapDispatchToProps"),A=B(n,l,"mergeProps");return i(h,d({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:C,initMapDispatchToProps:E,initMergeProps:A,pure:u,areStatesEqual:m,areOwnPropsEqual:v,areStatePropsEqual:b,areMergedPropsEqual:w},O))}}()},,function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(130);function r(e){if("undefined"===typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=Object(i.a)(e))){var t=0,n=function(){};return{s:n,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o,a=!0,s=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw o}}}}},function(e,t,n){"use strict";var i=n(1);t.a=function e(t,n){if(null===t||"object"!==typeof t)return t;n=Object(i.a)(n,!1);var r=new t.constructor;for(var o in t)if(t.hasOwnProperty(o)){var a=t[o];n&&(a=e(a,n)),r[o]=a}return r}},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function r(e,t){return e===t}function o(e){var t=arguments.length<=1||void 0===arguments[1]?r:arguments[1],n=null,i=null;return function(){for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return null!==n&&n.length===o.length&&o.every((function(e,i){return t(e,n[i])}))||(i=e.apply(void 0,o)),n=o,i}}function a(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e){return"function"===typeof e}))){var n=t.map((function(e){return typeof e})).join(", ");throw new Error("Selector creators expect all input-selectors to be functions, instead received the following types: ["+n+"]")}return t}function s(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return function(){for(var t=arguments.length,r=Array(t),o=0;o<t;o++)r[o]=arguments[o];var s=0,c=r.pop(),l=a(r),u=e.apply(void 0,[function(){return s++,c.apply(void 0,arguments)}].concat(n)),h=function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var a=l.map((function(n){return n.apply(void 0,[e,t].concat(r))}));return u.apply(void 0,i(a))};return h.resultFunc=c,h.recomputations=function(){return s},h.resetRecomputations=function(){return s=0},h}}t.__esModule=!0,t.defaultMemoize=o,t.createSelectorCreator=s,t.createStructuredSelector=function(e){var t=arguments.length<=1||void 0===arguments[1]?c:arguments[1];if("object"!==typeof e)throw new Error("createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof e);var n=Object.keys(e);return t(n.map((function(t){return e[t]})),(function(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];return t.reduce((function(e,t,i){return e[n[i]]=t,e}),{})}))};var c=t.createSelector=s(o)},function(e,t,n){"use strict";var i=n(1),r=n(0);t.a=function e(t,n,o){o=Object(i.a)(o,!1);var a,s,c,l={},u=Object(r.a)(t),h=Object(r.a)(n);if(u)for(a in t)t.hasOwnProperty(a)&&(s=t[a],h&&o&&"object"===typeof s&&n.hasOwnProperty(a)?(c=n[a],l[a]="object"===typeof c?e(s,c,o):s):l[a]=s);if(h)for(a in n)n.hasOwnProperty(a)&&!l.hasOwnProperty(a)&&(c=n[a],l[a]=c);return l}},function(e,t,n){"use strict";n.r(t),n.d(t,"ACTIVE",(function(){return c})),n.d(t,"ALIGN_LEFT",(function(){return l})),n.d(t,"ALIGN_RIGHT",(function(){return u})),n.d(t,"DARK",(function(){return h})),n.d(t,"DISABLED",(function(){return d})),n.d(t,"FILL",(function(){return f})),n.d(t,"FIXED",(function(){return p})),n.d(t,"FIXED_TOP",(function(){return m})),n.d(t,"INLINE",(function(){return g})),n.d(t,"INTERACTIVE",(function(){return v})),n.d(t,"LARGE",(function(){return _})),n.d(t,"LOADING",(function(){return b})),n.d(t,"MINIMAL",(function(){return y})),n.d(t,"OUTLINED",(function(){return w})),n.d(t,"MULTILINE",(function(){return O})),n.d(t,"ROUND",(function(){return C})),n.d(t,"SMALL",(function(){return E})),n.d(t,"VERTICAL",(function(){return A})),n.d(t,"POSITION_TOP",(function(){return x})),n.d(t,"POSITION_BOTTOM",(function(){return T})),n.d(t,"POSITION_LEFT",(function(){return S})),n.d(t,"POSITION_RIGHT",(function(){return D})),n.d(t,"ELEVATION_0",(function(){return P})),n.d(t,"ELEVATION_1",(function(){return I})),n.d(t,"ELEVATION_2",(function(){return M})),n.d(t,"ELEVATION_3",(function(){return R})),n.d(t,"ELEVATION_4",(function(){return L})),n.d(t,"INTENT_PRIMARY",(function(){return j})),n.d(t,"INTENT_SUCCESS",(function(){return F})),n.d(t,"INTENT_WARNING",(function(){return N})),n.d(t,"INTENT_DANGER",(function(){return z})),n.d(t,"FOCUS_DISABLED",(function(){return k})),n.d(t,"UI_TEXT",(function(){return B})),n.d(t,"RUNNING_TEXT",(function(){return H})),n.d(t,"MONOSPACE_TEXT",(function(){return V})),n.d(t,"TEXT_LARGE",(function(){return U})),n.d(t,"TEXT_SMALL",(function(){return W})),n.d(t,"TEXT_MUTED",(function(){return G})),n.d(t,"TEXT_DISABLED",(function(){return q})),n.d(t,"TEXT_OVERFLOW_ELLIPSIS",(function(){return Y})),n.d(t,"BLOCKQUOTE",(function(){return $})),n.d(t,"CODE",(function(){return X})),n.d(t,"CODE_BLOCK",(function(){return K})),n.d(t,"HEADING",(function(){return Q})),n.d(t,"LIST",(function(){return Z})),n.d(t,"LIST_UNSTYLED",(function(){return J})),n.d(t,"RTL",(function(){return ee})),n.d(t,"ALERT",(function(){return te})),n.d(t,"ALERT_BODY",(function(){return ne})),n.d(t,"ALERT_CONTENTS",(function(){return ie})),n.d(t,"ALERT_FOOTER",(function(){return re})),n.d(t,"BREADCRUMB",(function(){return oe})),n.d(t,"BREADCRUMB_CURRENT",(function(){return ae})),n.d(t,"BREADCRUMBS",(function(){return se})),n.d(t,"BREADCRUMBS_COLLAPSED",(function(){return ce})),n.d(t,"BUTTON",(function(){return le})),n.d(t,"BUTTON_GROUP",(function(){return ue})),n.d(t,"BUTTON_SPINNER",(function(){return he})),n.d(t,"BUTTON_TEXT",(function(){return de})),n.d(t,"CALLOUT",(function(){return fe})),n.d(t,"CALLOUT_ICON",(function(){return pe})),n.d(t,"CARD",(function(){return me})),n.d(t,"COLLAPSE",(function(){return ge})),n.d(t,"COLLAPSE_BODY",(function(){return ve})),n.d(t,"COLLAPSIBLE_LIST",(function(){return _e})),n.d(t,"CONTEXT_MENU",(function(){return be})),n.d(t,"CONTEXT_MENU_POPOVER_TARGET",(function(){return ye})),n.d(t,"CONTROL_GROUP",(function(){return we})),n.d(t,"DIALOG",(function(){return Oe})),n.d(t,"DIALOG_CONTAINER",(function(){return Ce})),n.d(t,"DIALOG_BODY",(function(){return Ee})),n.d(t,"DIALOG_CLOSE_BUTTON",(function(){return Ae})),n.d(t,"DIALOG_FOOTER",(function(){return xe})),n.d(t,"DIALOG_FOOTER_ACTIONS",(function(){return Te})),n.d(t,"DIALOG_HEADER",(function(){return Se})),n.d(t,"DIVIDER",(function(){return De})),n.d(t,"DRAWER",(function(){return Pe})),n.d(t,"DRAWER_BODY",(function(){return Ie})),n.d(t,"DRAWER_FOOTER",(function(){return Me})),n.d(t,"DRAWER_HEADER",(function(){return Re})),n.d(t,"EDITABLE_TEXT",(function(){return Le})),n.d(t,"EDITABLE_TEXT_CONTENT",(function(){return je})),n.d(t,"EDITABLE_TEXT_EDITING",(function(){return Fe})),n.d(t,"EDITABLE_TEXT_INPUT",(function(){return Ne})),n.d(t,"EDITABLE_TEXT_PLACEHOLDER",(function(){return ze})),n.d(t,"FLEX_EXPANDER",(function(){return ke})),n.d(t,"HTML_SELECT",(function(){return Be})),n.d(t,"SELECT",(function(){return He})),n.d(t,"HTML_TABLE",(function(){return Ve})),n.d(t,"HTML_TABLE_BORDERED",(function(){return Ue})),n.d(t,"HTML_TABLE_CONDENSED",(function(){return We})),n.d(t,"HTML_TABLE_STRIPED",(function(){return Ge})),n.d(t,"INPUT",(function(){return qe})),n.d(t,"INPUT_GHOST",(function(){return Ye})),n.d(t,"INPUT_GROUP",(function(){return $e})),n.d(t,"INPUT_LEFT_CONTAINER",(function(){return Xe})),n.d(t,"INPUT_ACTION",(function(){return Ke})),n.d(t,"CONTROL",(function(){return Qe})),n.d(t,"CONTROL_INDICATOR",(function(){return Ze})),n.d(t,"CONTROL_INDICATOR_CHILD",(function(){return Je})),n.d(t,"CHECKBOX",(function(){return et})),n.d(t,"RADIO",(function(){return tt})),n.d(t,"SWITCH",(function(){return nt})),n.d(t,"SWITCH_INNER_TEXT",(function(){return it})),n.d(t,"FILE_INPUT",(function(){return rt})),n.d(t,"FILE_INPUT_HAS_SELECTION",(function(){return ot})),n.d(t,"FILE_UPLOAD_INPUT",(function(){return at})),n.d(t,"FILE_UPLOAD_INPUT_CUSTOM_TEXT",(function(){return st})),n.d(t,"KEY",(function(){return ct})),n.d(t,"KEY_COMBO",(function(){return lt})),n.d(t,"MODIFIER_KEY",(function(){return ut})),n.d(t,"HOTKEY",(function(){return ht})),n.d(t,"HOTKEY_LABEL",(function(){return dt})),n.d(t,"HOTKEY_COLUMN",(function(){return ft})),n.d(t,"HOTKEY_DIALOG",(function(){return pt})),n.d(t,"LABEL",(function(){return mt})),n.d(t,"FORM_GROUP",(function(){return gt})),n.d(t,"FORM_CONTENT",(function(){return vt})),n.d(t,"FORM_HELPER_TEXT",(function(){return _t})),n.d(t,"MENU",(function(){return bt})),n.d(t,"MENU_ITEM",(function(){return yt})),n.d(t,"MENU_ITEM_LABEL",(function(){return wt})),n.d(t,"MENU_SUBMENU",(function(){return Ot})),n.d(t,"MENU_DIVIDER",(function(){return Ct})),n.d(t,"MENU_HEADER",(function(){return Et})),n.d(t,"NAVBAR",(function(){return At})),n.d(t,"NAVBAR_GROUP",(function(){return xt})),n.d(t,"NAVBAR_HEADING",(function(){return Tt})),n.d(t,"NAVBAR_DIVIDER",(function(){return St})),n.d(t,"NON_IDEAL_STATE",(function(){return Dt})),n.d(t,"NON_IDEAL_STATE_VISUAL",(function(){return Pt})),n.d(t,"NUMERIC_INPUT",(function(){return It})),n.d(t,"OVERFLOW_LIST",(function(){return Mt})),n.d(t,"OVERFLOW_LIST_SPACER",(function(){return Rt})),n.d(t,"OVERLAY",(function(){return Lt})),n.d(t,"OVERLAY_BACKDROP",(function(){return jt})),n.d(t,"OVERLAY_CONTAINER",(function(){return Ft})),n.d(t,"OVERLAY_CONTENT",(function(){return Nt})),n.d(t,"OVERLAY_INLINE",(function(){return zt})),n.d(t,"OVERLAY_OPEN",(function(){return kt})),n.d(t,"OVERLAY_SCROLL_CONTAINER",(function(){return Bt})),n.d(t,"PANEL_STACK",(function(){return Ht})),n.d(t,"PANEL_STACK_HEADER",(function(){return Vt})),n.d(t,"PANEL_STACK_HEADER_BACK",(function(){return Ut})),n.d(t,"PANEL_STACK_VIEW",(function(){return Wt})),n.d(t,"POPOVER",(function(){return Gt})),n.d(t,"POPOVER_ARROW",(function(){return qt})),n.d(t,"POPOVER_BACKDROP",(function(){return Yt})),n.d(t,"POPOVER_CONTENT",(function(){return $t})),n.d(t,"POPOVER_CONTENT_SIZING",(function(){return Xt})),n.d(t,"POPOVER_DISMISS",(function(){return Kt})),n.d(t,"POPOVER_DISMISS_OVERRIDE",(function(){return Qt})),n.d(t,"POPOVER_OPEN",(function(){return Zt})),n.d(t,"POPOVER_TARGET",(function(){return Jt})),n.d(t,"POPOVER_WRAPPER",(function(){return en})),n.d(t,"TRANSITION_CONTAINER",(function(){return tn})),n.d(t,"PROGRESS_BAR",(function(){return nn})),n.d(t,"PROGRESS_METER",(function(){return rn})),n.d(t,"PROGRESS_NO_STRIPES",(function(){return on})),n.d(t,"PROGRESS_NO_ANIMATION",(function(){return an})),n.d(t,"PORTAL",(function(){return sn})),n.d(t,"SKELETON",(function(){return cn})),n.d(t,"SLIDER",(function(){return ln})),n.d(t,"SLIDER_AXIS",(function(){return un})),n.d(t,"SLIDER_HANDLE",(function(){return hn})),n.d(t,"SLIDER_LABEL",(function(){return dn})),n.d(t,"SLIDER_TRACK",(function(){return fn})),n.d(t,"SLIDER_PROGRESS",(function(){return pn})),n.d(t,"START",(function(){return mn})),n.d(t,"END",(function(){return gn})),n.d(t,"SPINNER",(function(){return vn})),n.d(t,"SPINNER_ANIMATION",(function(){return _n})),n.d(t,"SPINNER_HEAD",(function(){return bn})),n.d(t,"SPINNER_NO_SPIN",(function(){return yn})),n.d(t,"SPINNER_TRACK",(function(){return wn})),n.d(t,"TAB",(function(){return On})),n.d(t,"TAB_INDICATOR",(function(){return Cn})),n.d(t,"TAB_INDICATOR_WRAPPER",(function(){return En})),n.d(t,"TAB_LIST",(function(){return An})),n.d(t,"TAB_PANEL",(function(){return xn})),n.d(t,"TABS",(function(){return Tn})),n.d(t,"TAG",(function(){return Sn})),n.d(t,"TAG_REMOVE",(function(){return Dn})),n.d(t,"TAG_INPUT",(function(){return Pn})),n.d(t,"TAG_INPUT_ICON",(function(){return In})),n.d(t,"TAG_INPUT_VALUES",(function(){return Mn})),n.d(t,"TOAST",(function(){return Rn})),n.d(t,"TOAST_CONTAINER",(function(){return Ln})),n.d(t,"TOAST_MESSAGE",(function(){return jn})),n.d(t,"TOOLTIP",(function(){return Fn})),n.d(t,"TOOLTIP_INDICATOR",(function(){return Nn})),n.d(t,"TREE",(function(){return zn})),n.d(t,"TREE_NODE",(function(){return kn})),n.d(t,"TREE_NODE_CARET",(function(){return Bn})),n.d(t,"TREE_NODE_CARET_CLOSED",(function(){return Hn})),n.d(t,"TREE_NODE_CARET_NONE",(function(){return Vn})),n.d(t,"TREE_NODE_CARET_OPEN",(function(){return Un})),n.d(t,"TREE_NODE_CONTENT",(function(){return Wn})),n.d(t,"TREE_NODE_EXPANDED",(function(){return Gn})),n.d(t,"TREE_NODE_ICON",(function(){return qn})),n.d(t,"TREE_NODE_LABEL",(function(){return Yn})),n.d(t,"TREE_NODE_LIST",(function(){return $n})),n.d(t,"TREE_NODE_SECONDARY_LABEL",(function(){return Xn})),n.d(t,"TREE_NODE_SELECTED",(function(){return Kn})),n.d(t,"TREE_ROOT",(function(){return Qn})),n.d(t,"ICON",(function(){return Zn})),n.d(t,"ICON_STANDARD",(function(){return Jn})),n.d(t,"ICON_LARGE",(function(){return ei})),n.d(t,"getClassNamespace",(function(){return ti})),n.d(t,"alignmentClass",(function(){return ni})),n.d(t,"elevationClass",(function(){return ii})),n.d(t,"iconClass",(function(){return ri})),n.d(t,"intentClass",(function(){return oi})),n.d(t,"positionClass",(function(){return ai}));var i=n(133),r=n(102),o=n(72),a=n(47),s=Object({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,REACT_APP_CATEHUB_ENDPOINT:"https://dev.catehub.brockmann-consult.de/api/v2/"}).BLUEPRINT_NAMESPACE||Object({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,REACT_APP_CATEHUB_ENDPOINT:"https://dev.catehub.brockmann-consult.de/api/v2/"}).REACT_APP_BLUEPRINT_NAMESPACE||"bp3",c=s+"-active",l=s+"-align-left",u=s+"-align-right",h=s+"-dark",d=s+"-disabled",f=s+"-fill",p=s+"-fixed",m=s+"-fixed-top",g=s+"-inline",v=s+"-interactive",_=s+"-large",b=s+"-loading",y=s+"-minimal",w=s+"-outlined",O=s+"-multiline",C=s+"-round",E=s+"-small",A=s+"-vertical",x=ai(a.a.TOP),T=ai(a.a.BOTTOM),S=ai(a.a.LEFT),D=ai(a.a.RIGHT),P=ii(r.a.ZERO),I=ii(r.a.ONE),M=ii(r.a.TWO),R=ii(r.a.THREE),L=ii(r.a.FOUR),j=oi(o.a.PRIMARY),F=oi(o.a.SUCCESS),N=oi(o.a.WARNING),z=oi(o.a.DANGER),k=s+"-focus-disabled",B=s+"-ui-text",H=s+"-running-text",V=s+"-monospace-text",U=s+"-text-large",W=s+"-text-small",G=s+"-text-muted",q=s+"-text-disabled",Y=s+"-text-overflow-ellipsis",$=s+"-blockquote",X=s+"-code",K=s+"-code-block",Q=s+"-heading",Z=s+"-list",J=s+"-list-unstyled",ee=s+"-rtl",te=s+"-alert",ne=te+"-body",ie=te+"-contents",re=te+"-footer",oe=s+"-breadcrumb",ae=oe+"-current",se=oe+"s",ce=oe+"s-collapsed",le=s+"-button",ue=le+"-group",he=le+"-spinner",de=le+"-text",fe=s+"-callout",pe=fe+"-icon",me=s+"-card",ge=s+"-collapse",ve=ge+"-body",_e=s+"-collapse-list",be=s+"-context-menu",ye=be+"-popover-target",we=s+"-control-group",Oe=s+"-dialog",Ce=Oe+"-container",Ee=Oe+"-body",Ae=Oe+"-close-button",xe=Oe+"-footer",Te=Oe+"-footer-actions",Se=Oe+"-header",De=s+"-divider",Pe=s+"-drawer",Ie=Pe+"-body",Me=Pe+"-footer",Re=Pe+"-header",Le=s+"-editable-text",je=Le+"-content",Fe=Le+"-editing",Ne=Le+"-input",ze=Le+"-placeholder",ke=s+"-flex-expander",Be=s+"-html-select",He=s+"-select",Ve=s+"-html-table",Ue=Ve+"-bordered",We=Ve+"-condensed",Ge=Ve+"-striped",qe=s+"-input",Ye=qe+"-ghost",$e=qe+"-group",Xe=qe+"-left-container",Ke=qe+"-action",Qe=s+"-control",Ze=Qe+"-indicator",Je=Ze+"-child",et=s+"-checkbox",tt=s+"-radio",nt=s+"-switch",it=nt+"-inner-text",rt=s+"-file-input",ot=s+"-file-input-has-selection",at=s+"-file-upload-input",st=s+"-file-upload-input-custom-text",ct=s+"-key",lt=ct+"-combo",ut=s+"-modifier-key",ht=s+"-hotkey",dt=ht+"-label",ft=ht+"-column",pt=ht+"-dialog",mt=s+"-label",gt=s+"-form-group",vt=s+"-form-content",_t=s+"-form-helper-text",bt=s+"-menu",yt=bt+"-item",wt=yt+"-label",Ot=s+"-submenu",Ct=bt+"-divider",Et=bt+"-header",At=s+"-navbar",xt=At+"-group",Tt=At+"-heading",St=At+"-divider",Dt=s+"-non-ideal-state",Pt=Dt+"-visual",It=s+"-numeric-input",Mt=s+"-overflow-list",Rt=Mt+"-spacer",Lt=s+"-overlay",jt=Lt+"-backdrop",Ft=Lt+"-container",Nt=Lt+"-content",zt=Lt+"-inline",kt=Lt+"-open",Bt=Lt+"-scroll-container",Ht=s+"-panel-stack",Vt=Ht+"-header",Ut=Ht+"-header-back",Wt=Ht+"-view",Gt=s+"-popover",qt=Gt+"-arrow",Yt=Gt+"-backdrop",$t=Gt+"-content",Xt=$t+"-sizing",Kt=Gt+"-dismiss",Qt=Kt+"-override",Zt=Gt+"-open",Jt=Gt+"-target",en=Gt+"-wrapper",tn=s+"-transition-container",nn=s+"-progress-bar",rn=s+"-progress-meter",on=s+"-no-stripes",an=s+"-no-animation",sn=s+"-portal",cn=s+"-skeleton",ln=s+"-slider",un=ln+"-axis",hn=ln+"-handle",dn=ln+"-label",fn=ln+"-track",pn=ln+"-progress",mn=s+"-start",gn=s+"-end",vn=s+"-spinner",_n=vn+"-animation",bn=vn+"-head",yn=s+"-no-spin",wn=vn+"-track",On=s+"-tab",Cn=On+"-indicator",En=Cn+"-wrapper",An=On+"-list",xn=On+"-panel",Tn=On+"s",Sn=s+"-tag",Dn=Sn+"-remove",Pn=s+"-tag-input",In=Pn+"-icon",Mn=Pn+"-values",Rn=s+"-toast",Ln=Rn+"-container",jn=Rn+"-message",Fn=s+"-tooltip",Nn=Fn+"-indicator",zn=s+"-tree",kn=s+"-tree-node",Bn=kn+"-caret",Hn=Bn+"-closed",Vn=Bn+"-none",Un=Bn+"-open",Wn=kn+"-content",Gn=kn+"-expanded",qn=kn+"-icon",Yn=kn+"-label",$n=kn+"-list",Xn=kn+"-secondary-label",Kn=kn+"-selected",Qn=s+"-tree-root",Zn=s+"-icon",Jn=Zn+"-standard",ei=Zn+"-large";function ti(){return s}function ni(e){switch(e){case i.a.LEFT:return l;case i.a.RIGHT:return u;default:return}}function ii(e){if(null!=e)return s+"-elevation-"+e}function ri(e){if(null!=e)return 0===e.indexOf(s+"-icon-")?e:s+"-icon-"+e}function oi(e){if(null!=e&&e!==o.a.NONE)return s+"-intent-"+e.toLowerCase()}function ai(e){if(null!=e)return s+"-position-"+e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return o})),n.d(t,"b",(function(){return a})),n.d(t,"h",(function(){return s})),n.d(t,"j",(function(){return c})),n.d(t,"i",(function(){return l})),n.d(t,"k",(function(){return u})),n.d(t,"r",(function(){return h})),n.d(t,"p",(function(){return d})),n.d(t,"n",(function(){return f})),n.d(t,"q",(function(){return p})),n.d(t,"o",(function(){return m})),n.d(t,"s",(function(){return g})),n.d(t,"t",(function(){return v})),n.d(t,"m",(function(){return _})),n.d(t,"u",(function(){return b})),n.d(t,"w",(function(){return y})),n.d(t,"v",(function(){return w})),n.d(t,"B",(function(){return O})),n.d(t,"x",(function(){return C})),n.d(t,"y",(function(){return E})),n.d(t,"z",(function(){return A})),n.d(t,"A",(function(){return x})),n.d(t,"C",(function(){return T})),n.d(t,"D",(function(){return S})),n.d(t,"E",(function(){return D})),n.d(t,"H",(function(){return P})),n.d(t,"G",(function(){return I})),n.d(t,"F",(function(){return M})),n.d(t,"l",(function(){return R})),n.d(t,"I",(function(){return L})),n.d(t,"J",(function(){return j})),n.d(t,"L",(function(){return F})),n.d(t,"e",(function(){return N})),n.d(t,"d",(function(){return z})),n.d(t,"g",(function(){return k})),n.d(t,"f",(function(){return B})),n.d(t,"K",(function(){return H}));var i="[Blueprint]",r=i+" clamp: max cannot be less than min",o=i+" @ContextMenuTarget-decorated class should implement renderContextMenu.",a=i+' "@ContextMenuTarget-decorated components must return a single JSX.Element or an empty render.',s=i+" <Hotkeys> only accepts <Hotkey> children.",c=i+" @HotkeysTarget-decorated class should implement renderHotkeys.",l=i+' "@HotkeysTarget-decorated components must return a single JSX.Element or an empty render.',u=i+" <InputGroup> leftElement and leftIcon prop are mutually exclusive, with leftElement taking priority.",h=i+" <NumericInput> requires min to be no greater than max if both are defined.",d=i+" <NumericInput> requires minorStepSize to be no greater than stepSize.",f=i+" <NumericInput> requires stepSize to be no greater than majorStepSize.",p=i+" <NumericInput> requires minorStepSize to be strictly greater than zero.",m=i+" <NumericInput> requires majorStepSize to be strictly greater than zero.",g=i+" <NumericInput> requires stepSize to be strictly greater than zero.",v=i+" <NumericInput> requires stepSize to be defined.",_=i+" <NumericInput> controlled value prop does not adhere to stepSize, min, and/or max constraints.",b=i+" <OverflowList> does not support changing observeParents after mounting.",y=i+" <Popover> requires target prop or at least one child element.",w=i+" <Popover hasBackdrop={true}> requires interactionKind={PopoverInteractionKind.CLICK}.",O=i+" <Popover> supports one or two children; additional children are ignored. First child is the target, second child is the content. You may instead supply these two as props.",C=i+" <Popover> with two children ignores content prop; use either prop or children.",E=i+" <Popover> with children ignores target prop; use either prop or children.",A=i+" Disabling <Popover> with empty/whitespace content...",x=i+" <Popover usePortal={false}> ignores hasBackdrop",T=i+" <Popover> onInteraction is ignored when uncontrolled.",S=i+" <Portal> context blueprintPortalClassName must be string",D=i+" <RadioGroup> children and options prop are mutually exclusive, with options taking priority.",P=i+" <Slider> stepSize must be greater than zero.",I=i+" <Slider> labelStepSize must be greater than zero.",M=i+" <RangeSlider> value prop must be an array of two non-null numbers.",R=i+" <MultiSlider> children must be <SliderHandle>s or <SliderTrackStop>s",L=i+" <Spinner> Classes.SMALL/LARGE are ignored if size prop is set.",j=i+" Toaster.create() is not supported inside React lifecycle methods in React 16. See usage example on the docs site.",F=i+" Toaster.create() ignores inline prop as it always creates a new element.",N=i+" <Dialog> iconName is ignored if title is omitted.",z=i+" <Dialog> isCloseButtonShown prop is ignored if title is omitted.",k=i+" <Drawer> vertical is ignored if position is defined",B=i+" <Drawer> all angle positions are casted into pure position (TOP, BOTTOM, LEFT or RIGHT)",H=i+" <Toaster> maxToasts is set to an invalid number, must be greater than 0"},function(e,t,n){e.exports=n(435)()},,function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(153),l=n(9),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}var n;return Object(i.c)(t,e),n=t,t.prototype.render=function(){var e=this.props.icon;if(null==e||"boolean"===typeof e)return null;if("string"!==typeof e)return e;var t=this.props,r=t.className,s=t.color,c=t.htmlTitle,u=t.iconSize,h=void 0===u?n.SIZE_STANDARD:u,d=t.intent,f=t.title,p=void 0===f?e:f,m=t.tagName,g=void 0===m?"span":m,v=Object(i.d)(t,["className","color","htmlTitle","iconSize","intent","title","tagName"]),_=h>=n.SIZE_LARGE?n.SIZE_LARGE:n.SIZE_STANDARD,b=this.renderSvgPaths(_,e),y=o()(l.Classes.ICON,l.Classes.iconClass(e),l.Classes.intentClass(d),r),w="0 0 "+_+" "+_;return a.createElement(g,Object(i.a)(Object(i.a)({},v),{className:y,title:c}),a.createElement("svg",{fill:s,"data-icon":e,width:h,height:h,viewBox:w},p&&a.createElement("desc",null,p),b))},t.prototype.renderSvgPaths=function(e,t){var i=(e===n.SIZE_STANDARD?c.a:c.b)[t];return null==i?null:i.map((function(e,t){return a.createElement("path",{key:t,d:e,fillRule:"evenodd"})}))},t.displayName=u.a+".Icon",t.SIZE_STANDARD=16,t.SIZE_LARGE=20,t=n=Object(i.b)([s.polyfill],t)}(n(40).a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return c}));var i=n(26),r=n(5),o="bp-table-text-no-measure",a=r.Icon.SIZE_STANDARD,s=["font-style","font-variant","font-weight","font-size","font-family"],c={times:function(e,t){if(e<0)throw new Error("[Blueprint] times() cannot be called with negative numbers.");for(var n=Array(e),i=0;i<e;i++)n[i]=t(i);return n},accumulate:function(e){for(var t=[],n=0,i=0,r=e;i<r.length;i++){n+=r[i],t.push(n)}return t},toBase26Alpha:function(e){for(var t="";;){var n=e%26;if(t=String.fromCharCode(65+n)+t,(e-=n)<=0)return t;e=e/26-1}},toBase26CellName:function(e,t){return""+c.toBase26Alpha(t)+(e+1)},binarySearch:function(e,t,n){for(var i=0;i<t;){var r=Math.floor((i+t)/2);n(r)<e?i=r+1:t=r}return t},arrayOfLength:function(e,t,n){if(e.length>t)return e.slice(0,t);for(e=e.slice();e.length<t;)e.push(n);return e},assignSparseValues:function(e,t){if(null==t||e.length!==t.length)return e;e=e.slice();for(var n=0;n<e.length;n++){var i=t[n];null!=i&&(e[n]=i)}return e},measureElementTextContent:function(e){var t=document.createElement("canvas").getContext("2d"),n=getComputedStyle(e,null);return t.font=s.map((function(e){return n.getPropertyValue(e)})).join(" "),function(e,t){var n=t.querySelectorAll("."+o),r=0;n&&n.length&&n.forEach((function(t){var n=e.measureText(t.textContent);r+=n.width-a}));var s=e.measureText(t.textContent);return Object(i.a)(Object(i.a)({},s),{width:s.width-r})}(t,e)},clamp:function(e,t,n){return null!=t&&e<t&&(e=t),null!=n&&e>n&&(e=n),e},guideIndexToReorderedIndex:function(e,t,n){return t<e?t:e<=t&&t<e+n?e:Math.max(0,t-n)},reorderedIndexToGuideIndex:function(e,t,n){return t<=e?t:t+n},reorderArray:function(e,t,n,i){if(void 0===i&&(i=1),0===i||i===e.length||t===n)return e.slice();if(!(i<0||i>e.length||t+i>e.length)){for(var r=e.slice(0,t),o=e.slice(t,t+i),a=e.slice(t+i),s=[],c=0,l=0,u=0,h=0;c<n;)l<r.length?(s.push(r[l]),l+=1):(s.push(a[h]),h+=1),c+=1;for(;u<i;)s.push(o[u]),u+=1,c+=1;for(;c<e.length;)l<r.length?(s.push(r[l]),l+=1):(s.push(a[h]),h+=1),c+=1;return s}},isLeftClick:function(e){return 0===e.button},getApproxCellHeight:function(e,t,n,i,r,o){var a=null==e?0:e.length,s=(t-r)/n;return(Math.ceil(a/s)+o)*i}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var i=n(11),r=n(2),o=n(103),a=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.timeoutIds=[],i.clearTimeouts=function(){if(i.timeoutIds.length>0){for(var e=0,t=i.timeoutIds;e<t.length;e++){var n=t[e];window.clearTimeout(n)}i.timeoutIds=[]}},Object(o.e)("production")||i.validateProps(i.props),i}return Object(i.c)(t,e),t.prototype.componentDidUpdate=function(e,t,n){Object(o.e)("production")||this.validateProps(this.props)},t.prototype.componentWillUnmount=function(){this.clearTimeouts()},t.prototype.setTimeout=function(e,t){var n=window.setTimeout(e,t);return this.timeoutIds.push(n),function(){return window.clearTimeout(n)}},t.prototype.validateProps=function(e){},t}(r.PureComponent)},,function(e,t,n){"use strict";function i(e){if(e instanceof i)this.scheme=e.scheme,this.authority=e.authority,this.path=e.path,this.query=e.query,this.fragment=e.fragment;else if(e){var t=r.exec(e);this.scheme=t[1],this.authority=t[2],this.path=t[3],this.query=t[4],this.fragment=t[5]}}i.prototype.scheme=null,i.prototype.authority=null,i.prototype.path="",i.prototype.query=null,i.prototype.fragment=null;var r=new RegExp("^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?$");i.prototype.getScheme=function(){return this.scheme},i.prototype.getAuthority=function(){return this.authority},i.prototype.getPath=function(){return this.path},i.prototype.getQuery=function(){return this.query},i.prototype.getFragment=function(){return this.fragment},i.prototype.isAbsolute=function(){return!!this.scheme&&!this.fragment},i.prototype.isSameDocumentAs=function(e){return e.scheme==this.scheme&&e.authority==this.authority&&e.path==this.path&&e.query==this.query},i.prototype.equals=function(e){return this.isSameDocumentAs(e)&&e.fragment==this.fragment},i.prototype.normalize=function(){this.removeDotSegments(),this.scheme&&(this.scheme=this.scheme.toLowerCase()),this.authority&&(this.authority=this.authority.replace(s,l).replace(o,c)),this.path&&(this.path=this.path.replace(o,c)),this.query&&(this.query=this.query.replace(o,c)),this.fragment&&(this.fragment=this.fragment.replace(o,c))};var o=/%[0-9a-z]{2}/gi,a=/[a-zA-Z0-9\-\._~]/,s=/(.*@)?([^@:]*)(:.*)?/;function c(e){var t=unescape(e);return a.test(t)?t:e.toUpperCase()}function l(e,t,n,i){return(t||"")+n.toLowerCase()+(i||"")}i.prototype.resolve=function(e){var t=new i;return this.scheme?(t.scheme=this.scheme,t.authority=this.authority,t.path=this.path,t.query=this.query):(t.scheme=e.scheme,this.authority?(t.authority=this.authority,t.path=this.path,t.query=this.query):(t.authority=e.authority,""==this.path?(t.path=e.path,t.query=this.query||e.query):("/"==this.path.charAt(0)?(t.path=this.path,t.removeDotSegments()):(e.authority&&""==e.path?t.path="/"+this.path:t.path=e.path.substring(0,e.path.lastIndexOf("/")+1)+this.path,t.removeDotSegments()),t.query=this.query))),t.fragment=this.fragment,t},i.prototype.removeDotSegments=function(){var e,t=this.path.split("/"),n=[],i=""==t[0];i&&t.shift();for(""==t[0]&&t.shift();t.length;)".."==(e=t.shift())?n.pop():"."!=e&&n.push(e);"."!=e&&".."!=e||n.push(""),i&&n.unshift(""),this.path=n.join("/")},i.prototype.toString=function(){var e="";return this.scheme&&(e+=this.scheme+":"),this.authority&&(e+="//"+this.authority),e+=this.path,this.query&&(e+="?"+this.query),this.fragment&&(e+="#"+this.fragment),e},t.a=i},function(e,t,n){"use strict";t.a=Object.freeze({UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5})},function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return i}))},,,function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"c",(function(){return r})),n.d(t,"b",(function(){return o}));var i={BOTTOM:"bottom",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",LEFT:"left",LEFT_BOTTOM:"left-bottom",LEFT_TOP:"left-top",RIGHT:"right",RIGHT_BOTTOM:"right-bottom",RIGHT_TOP:"right-top",TOP:"top",TOP_LEFT:"top-left",TOP_RIGHT:"top-right"};function r(e){return e===i.TOP||e===i.TOP_LEFT||e===i.TOP_RIGHT||e===i.BOTTOM||e===i.BOTTOM_LEFT||e===i.BOTTOM_RIGHT}function o(e){return e===i.TOP||e===i.TOP_LEFT||e===i.TOP_RIGHT?i.TOP:e===i.BOTTOM||e===i.BOTTOM_LEFT||e===i.BOTTOM_RIGHT?i.BOTTOM:e===i.LEFT||e===i.LEFT_TOP||e===i.LEFT_BOTTOM?i.LEFT:i.RIGHT}},,function(e,t,n){"use strict";function i(e){return"function"===typeof e}function r(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(i(e))return e.apply(void 0,t)}function o(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return i(e)?e.apply(void 0,t):e}n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return r})),n.d(t,"c",(function(){return o}))},function(e,t,n){"use strict";n.r(t);var i=n(206);n.d(t,"arraysEqual",(function(){return i.a})),n.d(t,"shallowCompareKeys",(function(){return i.d})),n.d(t,"deepCompareKeys",(function(){return i.b})),n.d(t,"getDeepUnequalKeyValues",(function(){return i.c}));var r=n(274);n.d(t,"elementIsOrContains",(function(){return r.a})),n.d(t,"throttleEvent",(function(){return r.c})),n.d(t,"throttleReactEventCallback",(function(){return r.d})),n.d(t,"throttle",(function(){return r.b}));var o=n(49);n.d(t,"isFunction",(function(){return o.a})),n.d(t,"safeInvoke",(function(){return o.b})),n.d(t,"safeInvokeOrValue",(function(){return o.c}));var a=n(103);n.d(t,"isNodeEnv",(function(){return a.e})),n.d(t,"arrayLengthCompare",(function(){return a.b})),n.d(t,"approxEqual",(function(){return a.a})),n.d(t,"clamp",(function(){return a.c})),n.d(t,"countDecimalPlaces",(function(){return a.d}));var s=n(138);n.d(t,"isReactNodeEmpty",(function(){return s.e})),n.d(t,"ensureElement",(function(){return s.a})),n.d(t,"isReactElement",(function(){return s.d})),n.d(t,"getDisplayName",(function(){return s.b})),n.d(t,"isElementOfType",(function(){return s.c}));var c=n(275);n.d(t,"safeInvokeMember",(function(){return c.a}));var l=n(111);n.d(t,"getRef",(function(){return l.a}))},,,,function(e,t,n){"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}}(),e.exports=n(432)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";var i=n(1),r=n(0),o=n(43),a=n(57);function s(e){e=Object(i.a)(e,i.a.EMPTY_OBJECT);var t=Object(i.a)(e.throttleByServer,!1),n=Object(i.a)(e.throttle,!1);this.url=e.url,this.requestFunction=e.requestFunction,this.cancelFunction=e.cancelFunction,this.priorityFunction=e.priorityFunction,this.priority=Object(i.a)(e.priority,0),this.throttle=n,this.throttleByServer=t,this.type=Object(i.a)(e.type,a.a.OTHER),this.serverKey=void 0,this.state=o.a.UNISSUED,this.deferred=void 0,this.cancelled=!1}s.prototype.cancel=function(){this.cancelled=!0},s.prototype.clone=function(e){return Object(r.a)(e)?(e.url=this.url,e.requestFunction=this.requestFunction,e.cancelFunction=this.cancelFunction,e.priorityFunction=this.priorityFunction,e.priority=this.priority,e.throttle=this.throttle,e.throttleByServer=this.throttleByServer,e.type=this.type,e.serverKey=this.serverKey,e.state=this.RequestState.UNISSUED,e.deferred=void 0,e.cancelled=!1,e):new s(this)},t.a=s},function(e,t,n){"use strict";t.a=Object.freeze({TERRAIN:0,IMAGERY:1,TILES3D:2,OTHER:3})},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(130);function r(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e)){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(c){r=!0,o=c}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}}(e,t)||Object(i.a)(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},,,function(e,t,n){"use strict";e.exports=function(e){return e<-2}},,function(e,t,n){"use strict";var i=n(94);e.exports=function(e,t,n,r){var o=r?r-1:1/0,a=0;return function(r){if(i(r))return e.enter(n),s(r);return t(r)};function s(r){return i(r)&&a++<o?(e.consume(r),s):(e.exit(n),t(r))}}},function(e,t,n){"use strict";function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}n.d(t,"a",(function(){return i}))},,function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var i=n(156);var r=n(130);function o(e){return function(e){if(Array.isArray(e))return Object(i.a)(e)}(e)||function(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||Object(r.a)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";e.exports=function(e,t){var n,r,o=t.children||[],a=o.length,s=[],c=-1;for(;++c<a;)(n=i(e,o[c],t))&&(c&&"break"===o[c-1].type&&(n.value&&(n.value=n.value.replace(/^\s+/,"")),(r=n.children&&n.children[0])&&r.value&&(r.value=r.value.replace(/^\s+/,""))),s=s.concat(n));return s};var i=n(332)},function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return u})),n.d(t,"c",(function(){return h})),n.d(t,"d",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(34);function c(e,t){return function(n){var r=n.className,s=n.elementRef,c=Object(i.d)(n,["className","elementRef"]);return a.createElement(e,Object(i.a)(Object(i.a)({},c),{className:o()(t,r),ref:s}))}}c("h1",s.HEADING),c("h2",s.HEADING),c("h3",s.HEADING);var l=c("h4",s.HEADING),u=c("h5",s.HEADING),h=c("h6",s.HEADING),d=(c("blockquote",s.BLOCKQUOTE),c("code",s.CODE),c("pre",s.CODE_BLOCK),c("label",s.LABEL));c("ol",s.LIST),c("ul",s.LIST)},function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"d",(function(){return u})),n.d(t,"b",(function(){return h})),n.d(t,"c",(function(){return d}));for(var i={8:"backspace",9:"tab",13:"enter",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},r={16:"shift",17:"ctrl",18:"alt",91:"meta",93:"meta",224:"meta"},o={alt:1,ctrl:2,meta:4,shift:8},a={cmd:"meta",command:"meta",escape:"esc",minus:"-",mod:f()?"meta":"ctrl",option:"alt",plus:"+",return:"enter",win:"meta"},s={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=","{":"[","}":"]","|":"\\",":":";",'"':"'","<":",",">":".","?":"/"},c=1;c<=12;++c)i[111+c]="f"+c;for(c=0;c<=9;++c)i[96+c]="num"+c.toString();function l(e,t){return e.modifiers===t.modifiers&&e.key===t.key}var u=function(e){for(var t=0,n=null,i=0,r=e.replace(/\s/g,"").toLowerCase().split("+");i<r.length;i++){var c=r[i];if(""===c)throw new Error('Failed to parse key combo "'+e+'".\n Valid key combos look like "cmd + plus", "shift+p", or "!"');null!=a[c]&&(c=a[c]),null!=o[c]?t+=o[c]:null!=s[c]?(t+=o.shift,n=s[c]):n=c.toLowerCase()}return{modifiers:t,key:n}},h=function(e){var t=null,n=e.which;null!=r[n]||(t=null!=i[n]?i[n]:String.fromCharCode(n).toLowerCase());var a=0;return e.altKey&&(a+=o.alt),e.ctrlKey&&(a+=o.ctrl),e.metaKey&&(a+=o.meta),e.shiftKey&&(a+=o.shift),{modifiers:a,key:t}},d=function(e,t){return e.replace(/\s/g,"").split("+").map((function(e){var n=null!=a[e]?a[e]:e;return"meta"===n?f(t)?"cmd":"ctrl":n}))};function f(e){var t=null!=e?e:"undefined"!==typeof navigator?navigator.platform:void 0;return null!=t&&/Mac|iPod|iPhone|iPad/.test(t)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={NONE:"none",PRIMARY:"primary",SUCCESS:"success",WARNING:"warning",DANGER:"danger"}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i=function(){function e(e,t,n,i){this.left=e,this.top=t,this.width=n,this.height=i}return e.union=function(t,n){var i=e.wrap(t),r=e.wrap(n),o=Math.min(i.top,r.top),a=Math.min(i.left,r.left),s=Math.max(i.top+i.height,r.top+r.height);return new e(a,o,Math.max(i.left+i.width,r.left+r.width)-a,s-o)},e.subtractOrigin=function(t,n){var i=e.wrap(t),r=e.wrap(n);return new e(i.left-r.left,i.top-r.top,i.width,i.height)},e.style=function(e){return{height:e.height+"px",left:e.left+"px",position:"absolute",top:e.top+"px",width:e.width+"px"}},e.wrap=function(t){return t instanceof e?t:new e(t.left,t.top,t.width,t.height)},e.prototype.subtractOrigin=function(t){return e.subtractOrigin(this,t)},e.prototype.union=function(t){return e.union(this,t)},e.prototype.style=function(){return e.style(this)},e.prototype.sizeStyle=function(){return{height:this.height+"px",width:this.width+"px"}},e.prototype.containsX=function(e){return e>=this.left&&e<=this.left+this.width},e.prototype.containsY=function(e){return e>=this.top&&e<=this.top+this.height},e.prototype.equals=function(e){return null!=e&&this.left===e.left&&this.top===e.top&&this.width===e.width&&this.height===e.height},e.ORIGIN=new e(0,0,0,0),e}()},function(e,t,n){"use strict";e.exports=function(e,t,n){var i;null!==n&&void 0!==n||"object"===typeof t&&!Array.isArray(t)||(n=t,t={});i=Object.assign({type:String(e)},t),Array.isArray(n)?i.children=n:null!==n&&void 0!==n&&(i.value=String(n));return i}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){"use strict";n.d(t,"b",(function(){return ae})),n.d(t,"a",(function(){return se}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(116),l=n.n(c),u=n(58),h=n.n(u),d=n(134),f=n.n(d),p=n(59),m=n.n(p),g=n(250),v=n.n(g),_=n(254),b=n.n(_),y=b()(),w=b()(),O=function(e){function t(){for(var t,n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return t=e.call.apply(e,[this].concat(i))||this,m()(h()(t),"referenceNode",void 0),m()(h()(t),"setReferenceNode",(function(e){e&&t.referenceNode!==e&&(t.referenceNode=e,t.forceUpdate())})),t}f()(t,e);var n=t.prototype;return n.componentWillUnmount=function(){this.referenceNode=null},n.render=function(){return a.createElement(y.Provider,{value:this.referenceNode},a.createElement(w.Provider,{value:this.setReferenceNode},this.props.children))},t}(a.Component),C=function(e){return Array.isArray(e)?e[0]:e},E=function(e){if("function"===typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return e.apply(void 0,n)}},A=function(e,t){if("function"===typeof e)return E(e,t);null!=e&&(e.current=t)},x=function(e){function t(){for(var t,n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return t=e.call.apply(e,[this].concat(i))||this,m()(h()(t),"refHandler",(function(e){A(t.props.innerRef,e),E(t.props.setReferenceNode,e)})),t}f()(t,e);var n=t.prototype;return n.componentWillUnmount=function(){A(this.props.innerRef,null)},n.render=function(){return v()(Boolean(this.props.setReferenceNode),"`Reference` should not be used outside of a `Manager` component."),C(this.props.children)({ref:this.refHandler})},t}(a.Component);function T(e){return a.createElement(w.Consumer,null,(function(t){return a.createElement(x,l()({setReferenceNode:t},e))}))}var S=n(400),D=n.n(S),P=n(99),I=n.n(P),M=n(255),R={position:"absolute",top:0,left:0,opacity:0,pointerEvents:"none"},L={},j=function(e){function t(){for(var t,n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return t=e.call.apply(e,[this].concat(i))||this,m()(h()(t),"state",{data:void 0,placement:void 0}),m()(h()(t),"popperInstance",void 0),m()(h()(t),"popperNode",null),m()(h()(t),"arrowNode",null),m()(h()(t),"setPopperNode",(function(e){e&&t.popperNode!==e&&(A(t.props.innerRef,e),t.popperNode=e,t.updatePopperInstance())})),m()(h()(t),"setArrowNode",(function(e){t.arrowNode=e})),m()(h()(t),"updateStateModifier",{enabled:!0,order:900,fn:function(e){var n=e.placement;return t.setState({data:e,placement:n}),e}}),m()(h()(t),"getOptions",(function(){return{placement:t.props.placement,eventsEnabled:t.props.eventsEnabled,positionFixed:t.props.positionFixed,modifiers:l()({},t.props.modifiers,{arrow:l()({},t.props.modifiers&&t.props.modifiers.arrow,{enabled:!!t.arrowNode,element:t.arrowNode}),applyStyle:{enabled:!1},updateStateModifier:t.updateStateModifier})}})),m()(h()(t),"getPopperStyle",(function(){return t.popperNode&&t.state.data?l()({position:t.state.data.offsets.popper.position},t.state.data.styles):R})),m()(h()(t),"getPopperPlacement",(function(){return t.state.data?t.state.placement:void 0})),m()(h()(t),"getArrowStyle",(function(){return t.arrowNode&&t.state.data?t.state.data.arrowStyles:L})),m()(h()(t),"getOutOfBoundariesState",(function(){return t.state.data?t.state.data.hide:void 0})),m()(h()(t),"destroyPopperInstance",(function(){t.popperInstance&&(t.popperInstance.destroy(),t.popperInstance=null)})),m()(h()(t),"updatePopperInstance",(function(){t.destroyPopperInstance();var e=h()(t).popperNode,n=t.props.referenceElement;n&&e&&(t.popperInstance=new M.a(n,e,t.getOptions()))})),m()(h()(t),"scheduleUpdate",(function(){t.popperInstance&&t.popperInstance.scheduleUpdate()})),t}f()(t,e);var n=t.prototype;return n.componentDidUpdate=function(e,t){this.props.placement===e.placement&&this.props.referenceElement===e.referenceElement&&this.props.positionFixed===e.positionFixed&&I()(this.props.modifiers,e.modifiers,{strict:!0})?this.props.eventsEnabled!==e.eventsEnabled&&this.popperInstance&&(this.props.eventsEnabled?this.popperInstance.enableEventListeners():this.popperInstance.disableEventListeners()):this.updatePopperInstance(),t.placement!==this.state.placement&&this.scheduleUpdate()},n.componentWillUnmount=function(){A(this.props.innerRef,null),this.destroyPopperInstance()},n.render=function(){return C(this.props.children)({ref:this.setPopperNode,style:this.getPopperStyle(),placement:this.getPopperPlacement(),outOfBoundaries:this.getOutOfBoundariesState(),scheduleUpdate:this.scheduleUpdate,arrowProps:{ref:this.setArrowNode,style:this.getArrowStyle()}})},t}(a.Component);m()(j,"defaultProps",{placement:"bottom",eventsEnabled:!0,referenceElement:void 0,positionFixed:!1});M.a.placements;function F(e){var t=e.referenceElement,n=D()(e,["referenceElement"]);return a.createElement(y.Consumer,null,(function(e){return a.createElement(j,l()({referenceElement:void 0!==t?t:e},n))}))}var N=n(9),z=n(40),k=n(35),B=n(27),H=n(49),V=n(138),U=n(275),W=n(274),G=n(103),q=n(88),Y=n(112),$=n(188),X=n(34);function K(e){return e.split("-")[0]}function Q(e){return-1!==["left","right"].indexOf(e)}function Z(e){switch(e){case"top":return"bottom";case"left":return"right";case"bottom":return"top";default:return"left"}}function J(e){switch(e.split("-")[1]){case"start":return"left";case"end":return"right";default:return"center"}}function ee(e){var t=K(e.placement);if(null==e.arrowElement)return Q(t)?Z(t)+" "+J(t):J(t)+" "+Z(t);var n=e.arrowElement.clientHeight/2,i=e.offsets.arrow;return Q(t)?Z(t)+" "+(i.top+n)+"px":i.left+n+"px "+Z(t)}var te=function(e){if(null==e.arrowElement)return e;var t=e.arrowElement.clientWidth,n=K(e.placement),i=Q(n),r=i?"width":"height",o=i?"left":"top",a=Math.round(t/2/Math.sqrt(2));return"top"===n||"left"===n?(e.offsets.popper[o]-=a+4,e.offsets.arrow[o]=e.offsets.popper[r]-t+a):(e.offsets.popper[o]+=a+4,e.offsets.arrow[o]=-a),e};function ne(e){if(null==e)return 0;switch(K(e)){case"top":return-90;case"left":return 180;case"bottom":return 90;default:return 0}}var ie=function(e){var t=e.arrowProps,n=t.ref,i=t.style,r=e.placement;return a.createElement("div",{className:X.POPOVER_ARROW,ref:n,style:isNaN(+i.left)?{}:i},a.createElement("svg",{viewBox:"0 0 30 30",style:{transform:"rotate("+ne(r)+"deg)"}},a.createElement("path",{className:X.POPOVER_ARROW+"-border",d:"M8.11 6.302c1.015-.936 1.887-2.922 1.887-4.297v26c0-1.378-.868-3.357-1.888-4.297L.925 17.09c-1.237-1.14-1.233-3.034 0-4.17L8.11 6.302z"}),a.createElement("path",{className:X.POPOVER_ARROW+"-fill",d:"M8.787 7.036c1.22-1.125 2.21-3.376 2.21-5.03V0v30-2.005c0-1.654-.983-3.9-2.21-5.03l-7.183-6.616c-.81-.746-.802-1.96 0-2.7l7.183-6.614z"})))};ie.displayName=B.a+".PopoverArrow";var re=n(47);function oe(e){switch(e){case re.a.TOP_LEFT:return"top-start";case re.a.TOP:return"top";case re.a.TOP_RIGHT:return"top-end";case re.a.RIGHT_TOP:return"right-start";case re.a.RIGHT:return"right";case re.a.RIGHT_BOTTOM:return"right-end";case re.a.BOTTOM_RIGHT:return"bottom-end";case re.a.BOTTOM:return"bottom";case re.a.BOTTOM_LEFT:return"bottom-start";case re.a.LEFT_BOTTOM:return"left-end";case re.a.LEFT:return"left";case re.a.LEFT_TOP:return"left-start";case"auto":case"auto-start":case"auto-end":return e;default:return function(e){throw new Error("Unexpected position: "+e)}(e)}}var ae={CLICK:"click",CLICK_TARGET_ONLY:"click-target",HOVER:"hover",HOVER_TARGET_ONLY:"hover-target"},se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={hasDarkParent:!1,isOpen:t.getIsOpen(t.props),transformOrigin:""},t.isMouseInTargetOrPopover=!1,t.lostFocusOnSamePage=!0,t.refHandlers={popover:function(e){t.popoverElement=e,H.b(t.props.popoverRef,e)},target:function(e){return t.targetElement=e}},t.reposition=function(){return H.b(t.popperScheduleUpdate)},t.renderPopover=function(e){var n,r=t.props,s=r.usePortal,c=r.interactionKind,l=t.state.transformOrigin;t.popperScheduleUpdate=e.scheduleUpdate;var u={onClick:t.handlePopoverClick};(c===ae.HOVER||!s&&c===ae.HOVER_TARGET_ONLY)&&(u.onMouseEnter=t.handleMouseEnter,u.onMouseLeave=t.handleMouseLeave);var h=o()(N.Classes.POPOVER,((n={})[N.Classes.DARK]=t.props.inheritDarkTheme&&t.state.hasDarkParent,n[N.Classes.MINIMAL]=t.props.minimal,n),t.props.popoverClassName);return a.createElement("div",{className:N.Classes.TRANSITION_CONTAINER,ref:e.ref,style:e.style},a.createElement(Y.a,{onResize:t.reposition},a.createElement("div",Object(i.a)({className:h,style:{transformOrigin:l}},u),t.isArrowEnabled()&&a.createElement(ie,{arrowProps:e.arrowProps,placement:e.placement}),a.createElement("div",{className:N.Classes.POPOVER_CONTENT},t.understandChildren().content))))},t.renderTarget=function(e){var n,r,s=t.props,c=s.fill,l=s.openOnTargetFocus,u=s.targetClassName,h=s.targetProps,d=void 0===h?{}:h,f=t.state.isOpen,p=t.isControlled(),m=t.isHoverInteractionKind(),g=t.props.targetTagName;c&&(g="div");var v=m?{onBlur:t.handleTargetBlur,onFocus:t.handleTargetFocus,onMouseEnter:t.handleMouseEnter,onMouseLeave:t.handleMouseLeave}:{onClick:t.handleTargetClick};v.className=o()(N.Classes.POPOVER_TARGET,((n={})[N.Classes.POPOVER_OPEN]=f,n),d.className,u),v.ref=e.ref;var _=V.a(t.understandChildren().target),b=_.props.tabIndex,y=null==b&&l&&m?0:b,w=a.cloneElement(_,{className:o()(_.props.className,(r={},r[N.Classes.ACTIVE]=f&&!p&&!m,r)),disabled:!(!f||!V.c(_,$.a))||_.props.disabled,tabIndex:y}),O=a.createElement(g,Object(i.a)(Object(i.a)({},d),v),w);return a.createElement(Y.a,{onResize:t.reposition},O)},t.isControlled=function(){return void 0!==t.props.isOpen},t.handleTargetFocus=function(e){if(t.props.openOnTargetFocus&&t.isHoverInteractionKind()){if(null==e.relatedTarget&&!t.lostFocusOnSamePage)return;t.handleMouseEnter(e)}U.a(t.props.targetProps,"onFocus",e)},t.handleTargetBlur=function(e){t.props.openOnTargetFocus&&t.isHoverInteractionKind()&&(null==e.relatedTarget||t.isElementInPopover(e.relatedTarget)||t.handleMouseLeave(e)),t.lostFocusOnSamePage=null!=e.relatedTarget,U.a(t.props.targetProps,"onBlur",e)},t.handleMouseEnter=function(e){t.isMouseInTargetOrPopover=!0,t.props.usePortal||!t.isElementInPopover(e.target)||t.props.interactionKind!==ae.HOVER_TARGET_ONLY||t.props.openOnTargetFocus?t.props.disabled||t.setOpenState(!0,e,t.props.hoverOpenDelay):t.handleMouseLeave(e),U.a(t.props.targetProps,"onMouseEnter",e)},t.handleMouseLeave=function(e){t.isMouseInTargetOrPopover=!1,t.setTimeout((function(){t.isMouseInTargetOrPopover||t.setOpenState(!1,e,t.props.hoverCloseDelay)})),U.a(t.props.targetProps,"onMouseLeave",e)},t.handlePopoverClick=function(e){var n=e.target,i=n.closest("."+N.Classes.POPOVER_DISMISS+", ."+N.Classes.POPOVER_DISMISS_OVERRIDE),r=null!=i&&i.classList.contains(N.Classes.POPOVER_DISMISS),o=null!=n.closest(":disabled, ."+N.Classes.DISABLED);!r||o||e.isDefaultPrevented()||(t.setOpenState(!1,e),t.props.captureDismiss&&e.preventDefault())},t.handleOverlayClose=function(e){var n=e.target;(!W.a(t.targetElement,n)||e.nativeEvent instanceof KeyboardEvent)&&t.setOpenState(!1,e)},t.handleTargetClick=function(e){t.props.disabled||t.isElementInPopover(e.target)||(null==t.props.isOpen?t.setState((function(e){return{isOpen:!e.isOpen}})):t.setOpenState(!t.props.isOpen,e)),U.a(t.props.targetProps,"onClick",e)},t.updatePopoverState=function(e){return t.setState({transformOrigin:ee(e)}),e},t}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,i=t.disabled,r=t.fill,s=this.state.isOpen,c=this.props.wrapperTagName;r&&(c="div");var l=null==V.a(this.understandChildren().content);!l||i||!1===s||G.e("production")||console.warn(k.z);var u=o()(N.Classes.POPOVER_WRAPPER,n,((e={})[N.Classes.FILL]=r,e)),h=a.createElement(c,{className:u},a.createElement(T,{innerRef:this.refHandlers.target},this.renderTarget),a.createElement(q.a,{autoFocus:this.props.autoFocus,backdropClassName:N.Classes.POPOVER_BACKDROP,backdropProps:this.props.backdropProps,canEscapeKeyClose:this.props.canEscapeKeyClose,canOutsideClickClose:this.props.interactionKind===ae.CLICK,className:this.props.portalClassName,enforceFocus:this.props.enforceFocus,hasBackdrop:this.props.hasBackdrop,isOpen:s&&!l,onClose:this.handleOverlayClose,onClosed:this.props.onClosed,onClosing:this.props.onClosing,onOpened:this.props.onOpened,onOpening:this.props.onOpening,transitionDuration:this.props.transitionDuration,transitionName:N.Classes.POPOVER,usePortal:this.props.usePortal,portalContainer:this.props.portalContainer},a.createElement(F,{innerRef:this.refHandlers.popover,placement:oe(this.props.position),modifiers:this.getPopperModifiers()},this.renderPopover)));return a.createElement(O,null,h)},t.prototype.componentDidMount=function(){this.updateDarkParent()},t.prototype.componentDidUpdate=function(t,n){e.prototype.componentDidUpdate.call(this,t,n),this.updateDarkParent();var i=this.getIsOpen(this.props);null!=this.props.isOpen&&i!==this.state.isOpen?(this.setOpenState(i),this.setState({isOpen:i})):this.props.disabled&&this.state.isOpen&&null==this.props.isOpen&&this.setOpenState(!1)},t.prototype.validateProps=function(e){if(null==e.isOpen&&null!=e.onInteraction&&console.warn(k.C),e.hasBackdrop&&!e.usePortal&&console.warn(k.A),e.hasBackdrop&&e.interactionKind!==ae.CLICK)throw new Error(k.v);var t=a.Children.count(e.children),n=void 0!==e.content,i=void 0!==e.target;if(0===t&&!i)throw new Error(k.w);t>2&&console.warn(k.B),t>0&&i&&console.warn(k.y),2===t&&n&&console.warn(k.x)},t.prototype.updateDarkParent=function(){if(this.props.usePortal&&this.state.isOpen){var e=null!=this.targetElement&&null!=this.targetElement.closest("."+N.Classes.DARK);this.setState({hasDarkParent:e})}},t.prototype.understandChildren=function(){var e=this.props,t=e.children,n=e.content,i=e.target,r=a.Children.toArray(t),o=r[0],s=r[1];return{content:null==s?n:s,target:null==o?i:o}},t.prototype.getIsOpen=function(e){return!e.disabled&&(null!=e.isOpen?e.isOpen:e.defaultIsOpen)},t.prototype.getPopperModifiers=function(){var e=this.props,t=e.boundary,n=e.modifiers,r=n.flip,o=void 0===r?{}:r,a=n.preventOverflow,s=void 0===a?{}:a;return Object(i.a)(Object(i.a)({},n),{arrowOffset:{enabled:this.isArrowEnabled(),fn:te,order:510},flip:Object(i.a)({boundariesElement:t},o),preventOverflow:Object(i.a)({boundariesElement:t},s),updatePopoverState:{enabled:!0,fn:this.updatePopoverState,order:900}})},t.prototype.setOpenState=function(e,t,n){var i=this;H.b(this.cancelOpenTimeout),n>0?this.cancelOpenTimeout=this.setTimeout((function(){return i.setOpenState(e,t)}),n):(null==this.props.isOpen?this.setState({isOpen:e}):H.b(this.props.onInteraction,e,t),e||H.b(this.props.onClose,t))},t.prototype.isArrowEnabled=function(){var e=this.props,t=e.minimal,n=e.modifiers.arrow;return!t&&(null==n||n.enabled)},t.prototype.isElementInPopover=function(e){return null!=this.popoverElement&&this.popoverElement.contains(e)},t.prototype.isHoverInteractionKind=function(){return this.props.interactionKind===ae.HOVER||this.props.interactionKind===ae.HOVER_TARGET_ONLY},t.displayName=B.a+".Popover",t.defaultProps={boundary:"scrollParent",captureDismiss:!1,defaultIsOpen:!1,disabled:!1,fill:!1,hasBackdrop:!1,hoverCloseDelay:300,hoverOpenDelay:150,inheritDarkTheme:!0,interactionKind:ae.CLICK,minimal:!1,modifiers:{},openOnTargetFocus:!0,position:"auto",targetTagName:"span",transitionDuration:300,usePortal:!0,wrapperTagName:"span"},t=Object(i.b)([s.polyfill],t)}(z.a)},function(e,t,n){"use strict";n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return m}));var i=n(11),r=n(2),o=n(27),a=n(111),s=n(17),c=n.n(s),l=n(9),u=n(40),h=n(38),d=n(193),f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isActive:!1},t.currentKeyDown=null,t.handleKeyDown=function(e){var n,i;l.Keys.isKeyboardClick(e.which)&&(e.preventDefault(),e.which!==t.currentKeyDown&&t.setState({isActive:!0})),t.currentKeyDown=e.which,null===(i=(n=t.props).onKeyDown)||void 0===i||i.call(n,e)},t.handleKeyUp=function(e){var n,i;l.Keys.isKeyboardClick(e.which)&&(t.setState({isActive:!1}),Object(a.a)(t.buttonRef).click()),t.currentKeyDown=null,null===(i=(n=t.props).onKeyUp)||void 0===i||i.call(n,e)},t}return Object(i.c)(t,e),t.getDerivedStateFromProps=function(e,t){return t.isActive&&e.disabled?{isActive:!1}:null},t.prototype.getCommonButtonProps=function(){var e,t=this.props,n=t.alignText,i=t.fill,r=t.large,o=t.loading,a=t.outlined,s=t.minimal,u=t.small,h=t.tabIndex,d=this.props.disabled||o;return{className:c()(l.Classes.BUTTON,((e={})[l.Classes.ACTIVE]=this.state.isActive||this.props.active,e[l.Classes.DISABLED]=d,e[l.Classes.FILL]=i,e[l.Classes.LARGE]=r,e[l.Classes.LOADING]=o,e[l.Classes.MINIMAL]=s,e[l.Classes.OUTLINED]=a,e[l.Classes.SMALL]=u,e),l.Classes.alignmentClass(n),l.Classes.intentClass(this.props.intent),this.props.className),disabled:d,onClick:d?void 0:this.props.onClick,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,tabIndex:d?-1:h}},t.prototype.renderChildren=function(){var e=this.props,t=e.children,n=e.icon,i=e.loading,o=e.rightIcon,a=e.text;return[i&&r.createElement(d.a,{key:"loading",className:l.Classes.BUTTON_SPINNER,size:h.a.SIZE_LARGE}),r.createElement(h.a,{key:"leftIcon",icon:n}),(!l.Utils.isReactNodeEmpty(a)||!l.Utils.isReactNodeEmpty(t))&&r.createElement("span",{key:"text",className:l.Classes.BUTTON_TEXT},a,t),r.createElement(h.a,{key:"rightIcon",icon:o})]},t}(u.a),p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleRef=Object(a.b)(t.props.elementRef)?t.buttonRef=t.props.elementRef:function(e){var n;t.buttonRef=e,null===(n=t.props.elementRef)||void 0===n||n(e)},t}return Object(i.c)(t,e),t.prototype.render=function(){return r.createElement("button",Object(i.a)({type:"button",ref:this.handleRef},Object(o.b)(this.props),this.getCommonButtonProps()),this.renderChildren())},t.displayName=o.a+".Button",t}(f),m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleRef=Object(a.b)(t.props.elementRef)?t.buttonRef=t.props.elementRef:function(e){var n;t.buttonRef=e,null===(n=t.props.elementRef)||void 0===n||n(e)},t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.href,n=e.tabIndex,a=void 0===n?0:n,s=this.getCommonButtonProps();return r.createElement("a",Object(i.a)({role:"button",ref:this.handleRef},Object(o.b)(this.props),s,{href:s.disabled?void 0:t,tabIndex:s.disabled?-1:a}),this.renderChildren())},t.displayName=o.a+".AnchorButton",t}(f)},function(e,t,n){"use strict";var i=n(0),r=n(3);t.a=function(e){if(!Object(i.a)(e))throw new r.a("queryString is required.");var t={};if(""===e)return t;for(var n=e.replace(/\+/g,"%20").split(/[&;]/),o=0,a=n.length;o<a;++o){var s=n[o].split("="),c=decodeURIComponent(s[0]),l=s[1];l=Object(i.a)(l)?decodeURIComponent(l):"";var u=t[c];"string"===typeof u?t[c]=[u,l]:Array.isArray(u)?u.push(l):t[c]=l}return t}},function(e,t,n){"use strict";n.d(t,"a",(function(){return C}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(72),u=n(40),h=n(35),d=n(27),f=n(49),p=n(206),m=n(103),g=n(138);function v(e){return(100*e).toFixed(2)+"%"}function _(e,t,n,i){for(var r=t<n?1:-1,o=t;o!==n+r;o+=r)e[o]=i}var b=["max","min","stepSize","tickSize","value"],y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isMoving:!1},t.refHandlers={handle:function(e){return t.handleElement=e}},t.beginHandleMovement=function(e){document.addEventListener("mousemove",t.handleHandleMovement),document.addEventListener("mouseup",t.endHandleMovement),t.setState({isMoving:!0}),t.changeValue(t.clientToValue(t.mouseEventClientOffset(e)))},t.beginHandleTouchMovement=function(e){document.addEventListener("touchmove",t.handleHandleTouchMovement),document.addEventListener("touchend",t.endHandleTouchMovement),document.addEventListener("touchcancel",t.endHandleTouchMovement),t.setState({isMoving:!0}),t.changeValue(t.clientToValue(t.touchEventClientOffset(e)))},t.endHandleMovement=function(e){t.handleMoveEndedAt(t.mouseEventClientOffset(e))},t.endHandleTouchMovement=function(e){t.handleMoveEndedAt(t.touchEventClientOffset(e))},t.handleMoveEndedAt=function(e){t.removeDocumentEventListeners(),t.setState({isMoving:!1});var n=t.props.onRelease,i=t.changeValue(t.clientToValue(e));Object(f.b)(n,i)},t.handleHandleMovement=function(e){t.handleMovedTo(t.mouseEventClientOffset(e))},t.handleHandleTouchMovement=function(e){t.handleMovedTo(t.touchEventClientOffset(e))},t.handleMovedTo=function(e){t.state.isMoving&&!t.props.disabled&&t.changeValue(t.clientToValue(e))},t.handleKeyDown=function(e){var n=t.props,i=n.stepSize,r=n.value,o=e.which;o===c.Keys.ARROW_DOWN||o===c.Keys.ARROW_LEFT?(t.changeValue(r-i),e.preventDefault()):o!==c.Keys.ARROW_UP&&o!==c.Keys.ARROW_RIGHT||(t.changeValue(r+i),e.preventDefault())},t.handleKeyUp=function(e){[c.Keys.ARROW_UP,c.Keys.ARROW_DOWN,c.Keys.ARROW_LEFT,c.Keys.ARROW_RIGHT].indexOf(e.which)>=0&&Object(f.b)(t.props.onRelease,t.props.value)},t}return Object(i.c)(t,e),t.prototype.componentDidMount=function(){this.forceUpdate()},t.prototype.render=function(){var e,t=this.props,n=t.className,i=t.disabled,r=t.label,s=t.min,l=t.tickSizeRatio,u=t.value,h=t.vertical,d=this.state.isMoving,f=this.getHandleMidpointAndOffset(this.handleElement,!0).handleMidpoint,p="calc("+v((u-s)*l)+" - "+f+"px)",m=h?{bottom:p}:{left:p};return a.createElement("span",{className:o()(c.Classes.SLIDER_HANDLE,(e={},e[c.Classes.ACTIVE]=d,e),n),onKeyDown:i?null:this.handleKeyDown,onKeyUp:i?null:this.handleKeyUp,onMouseDown:i?null:this.beginHandleMovement,onTouchStart:i?null:this.beginHandleTouchMovement,ref:this.refHandlers.handle,style:m,tabIndex:0},null==r?null:a.createElement("span",{className:c.Classes.SLIDER_LABEL},r))},t.prototype.componentWillUnmount=function(){this.removeDocumentEventListeners()},t.prototype.clientToValue=function(e){var t=this.props,n=t.stepSize,i=t.tickSize,r=t.value,o=t.vertical;if(null==this.handleElement)return r;var a=(o?window.innerHeight-e:e)-this.getHandleElementCenterPixel(this.handleElement);return isNaN(a)?r:r+Math.round(a/(i*n))*n},t.prototype.mouseEventClientOffset=function(e){return this.props.vertical?e.clientY:e.clientX},t.prototype.touchEventClientOffset=function(e){var t=e.changedTouches[0];return this.props.vertical?t.clientY:t.clientX},t.prototype.validateProps=function(e){for(var t=0,n=b;t<n.length;t++){var i=n[t];if("number"!==typeof e[i])throw new Error("[Blueprint] <Handle> requires number value for "+i+" prop")}},t.prototype.changeValue=function(e,t){return void 0===t&&(t=this.props.onChange),e=this.clamp(e),isNaN(e)||this.props.value===e||Object(f.b)(t,e),e},t.prototype.clamp=function(e){return Object(m.c)(e,this.props.min,this.props.max)},t.prototype.getHandleElementCenterPixel=function(e){var t=this.getHandleMidpointAndOffset(e),n=t.handleMidpoint;return t.handleOffset+n},t.prototype.getHandleMidpointAndOffset=function(e,t){if(void 0===t&&(t=!1),null==e)return{handleMidpoint:0,handleOffset:0};var n=this.props.vertical,i=e.getBoundingClientRect(),r=n?t?"width":"height":t?"height":"width",o=n?window.innerHeight-(i.top+i[r]):i.left;return{handleMidpoint:i[r]/2,handleOffset:o}},t.prototype.removeDocumentEventListeners=function(){document.removeEventListener("mousemove",this.handleHandleMovement),document.removeEventListener("mouseup",this.endHandleMovement),document.removeEventListener("touchmove",this.handleHandleTouchMovement),document.removeEventListener("touchend",this.endHandleTouchMovement),document.removeEventListener("touchcancel",this.endHandleTouchMovement)},t.displayName=d.a+".SliderHandle",t=Object(i.b)([s.polyfill],t)}(u.a),w=n(114),O=function(){return null};O.displayName=d.a+".MultiSliderHandle";var C=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={labelPrecision:E(t.props),tickSize:0,tickSizeRatio:0},t.handleElements=[],t.addHandleRef=function(e){null!=e&&t.handleElements.push(e)},t.maybeHandleTrackClick=function(e){if(t.canHandleTrackEvent(e)){var n=t.nearestHandleForValue(t.handleElements,(function(t){return t.mouseEventClientOffset(e)}));n&&n.beginHandleMovement(e)}},t.maybeHandleTrackTouch=function(e){if(t.canHandleTrackEvent(e)){var n=t.nearestHandleForValue(t.handleElements,(function(t){return t.touchEventClientOffset(e)}));n&&n.beginHandleTouchMovement(e)}},t.canHandleTrackEvent=function(e){var n=e.target;return!t.props.disabled&&null==n.closest("."+c.Classes.SLIDER_HANDLE)},t.getHandlerForIndex=function(e,n){return function(i){f.b(n,t.getNewHandleValues(i,e))}},t.handleChange=function(e){var n=A(t.props),i=n.map((function(e){return e.value}));p.a(e,i)||(f.b(t.props.onChange,e),n.forEach((function(t,n){i[n]!==e[n]&&f.b(t.onChange,e[n])})))},t.handleRelease=function(e){var n=A(t.props);f.b(t.props.onRelease,e),n.forEach((function(t,n){f.b(t.onRelease,e[n])}))},t}var n;return Object(i.c)(t,e),n=t,t.getDerivedStateFromProps=function(e){return{labelPrecision:n.getLabelPrecision(e)}},t.getLabelPrecision=function(e){var t=e.labelPrecision,n=e.stepSize;return null==t?m.d(n):t},t.prototype.getSnapshotBeforeUpdate=function(e){var t=A(e);return A(this.props).length!==t.length&&(this.handleElements=[]),null},t.prototype.render=function(){var e,t=this,n=o()(c.Classes.SLIDER,((e={})[c.Classes.DISABLED]=this.props.disabled,e[c.Classes.SLIDER+"-unlabeled"]=!1===this.props.labelRenderer,e[c.Classes.VERTICAL]=this.props.vertical,e),this.props.className);return a.createElement("div",{className:n,onMouseDown:this.maybeHandleTrackClick,onTouchStart:this.maybeHandleTrackTouch},a.createElement("div",{className:c.Classes.SLIDER_TRACK,ref:function(e){return t.trackElement=e}},this.renderTracks()),a.createElement("div",{className:c.Classes.SLIDER_AXIS},this.renderLabels()),this.renderHandles())},t.prototype.componentDidMount=function(){this.updateTickSize()},t.prototype.componentDidUpdate=function(t,n){e.prototype.componentDidUpdate.call(this,t,n),this.updateTickSize()},t.prototype.validateProps=function(e){if(e.stepSize<=0)throw new Error(h.H);if(e.labelStepSize<=0)throw new Error(h.G);var t=!1;if(a.Children.forEach(e.children,(function(e){e&&!g.c(e,n.Handle)&&(t=!0)})),t)throw new Error(h.l)},t.prototype.formatLabel=function(e){var t=this.props.labelRenderer;return!1===t?null:f.a(t)?t(e):e.toFixed(this.state.labelPrecision)},t.prototype.renderLabels=function(){if(!1===this.props.labelRenderer)return null;for(var e=this.props,t=e.labelStepSize,n=e.max,i=e.min,r=[],o=this.state.tickSizeRatio*t,s=i,l=0;s<n||m.a(s,n);s+=t,l+=o){var u=v(l),h=this.props.vertical?{bottom:u}:{left:u};r.push(a.createElement("div",{className:c.Classes.SLIDER_LABEL,key:s,style:h},this.formatLabel(s)))}return r},t.prototype.renderTracks=function(){var e=x(this.props);e.push({value:this.props.max});for(var t={value:this.props.min},n=[],i=0;i<e.length;i++){var r=e[i];n.push(this.renderTrackFill(i,t,r)),t=r}return n},t.prototype.renderTrackFill=function(e,t,n){var r=[this.getOffsetRatio(t.value),this.getOffsetRatio(n.value)].sort((function(e,t){return e-t})),s=r[0],l=r[1],u=v(s),h=v(1-l),d=this.props.vertical?{bottom:u,top:h,left:0}:{left:u,right:h,top:0},f=Object(i.a)(Object(i.a)({},d),t.trackStyleAfter||n.trackStyleBefore||{}),p=o()(c.Classes.SLIDER_PROGRESS,c.Classes.intentClass(this.getTrackIntent(t,n)));return a.createElement("div",{key:"track-"+e,className:p,style:f})},t.prototype.renderHandles=function(){var e=this,t=this.props,n=t.disabled,i=t.max,r=t.min,s=t.stepSize,l=t.vertical,u=A(this.props);return 0===u.length?null:u.map((function(t,h){var d,f=t.value,p=t.type;return a.createElement(y,{className:o()((d={},d[c.Classes.START]=p===w.b.START,d[c.Classes.END]=p===w.b.END,d)),disabled:n,key:h+"-"+u.length,label:e.formatLabel(f),max:i,min:r,onChange:e.getHandlerForIndex(h,e.handleChange),onRelease:e.getHandlerForIndex(h,e.handleRelease),ref:e.addHandleRef,stepSize:s,tickSize:e.state.tickSize,tickSizeRatio:e.state.tickSizeRatio,value:f,vertical:l})}))},t.prototype.nearestHandleForValue=function(e,t){return function(e,t){if(0!==e.length){for(var n=e[0],i=t(n),r=1;r<e.length;r++){var o=e[r],a=t(o);a<i&&(n=o,i=a)}return n}}(e,(function(e){var n=t(e),i=e.clientToValue(n),r=e.props.value;return Math.abs(i-r)}))},t.prototype.getNewHandleValues=function(e,t){var n=A(this.props).map((function(e){return e.value})),i=n.slice();i[t]=e,i.sort((function(e,t){return e-t}));var r=i.indexOf(e),o=this.findFirstLockedHandleIndex(t,r);return-1!==o?(_(n,t,o,n[o]),n):(_(i,t,r,e),i)},t.prototype.findFirstLockedHandleIndex=function(e,t){for(var n=e<t?1:-1,i=A(this.props),r=e+n;r!==t+n;r+=n)if(i[r].interactionKind!==w.a.PUSH)return r;return-1},t.prototype.getOffsetRatio=function(e){return m.c((e-this.props.min)*this.state.tickSizeRatio,0,1)},t.prototype.getTrackIntent=function(e,t){return this.props.showTrackFill?void 0!==e.intentAfter?e.intentAfter:void 0!==t&&void 0!==t.intentBefore?t.intentBefore:this.props.defaultTrackIntent:l.a.NONE},t.prototype.updateTickSize=function(){if(null!=this.trackElement){var e=this.props.vertical?this.trackElement.clientHeight:this.trackElement.clientWidth,t=1/(this.props.max-this.props.min),n=e*t;this.setState({tickSize:n,tickSizeRatio:t})}},t.defaultSliderProps={disabled:!1,labelStepSize:1,max:10,min:0,showTrackFill:!0,stepSize:1,vertical:!1},t.defaultProps=Object(i.a)(Object(i.a)({},n.defaultSliderProps),{defaultTrackIntent:l.a.NONE}),t.displayName=d.a+".MultiSlider",t.Handle=O,t=n=Object(i.b)([s.polyfill],t)}(u.a);function E(e){var t=e.labelPrecision,n=e.stepSize;return null==t?m.d(n):t}function A(e){return x(e,(function(e){return e.interactionKind!==w.a.NONE}))}function x(e,t){var n=e.children;void 0===t&&(t=function(){return!0});var i=a.Children.map(n,(function(e){return g.c(e,C.Handle)&&t(e.props)?e.props:null})),r=null!=i?i:[];return(r=r.filter((function(e){return null!==e}))).sort((function(e,t){return e.value-t.value})),r}},,function(e,t,n){var i=n(353),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();e.exports=o},function(e,t,n){"use strict";var i=n(42),r=n(12),o=n(4),a=n(1),s=n(0),c=n(14),l=n(185),u=n(120),h=n(122),d=n(43);var f={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},p=20,m=new l.a({comparator:function(e,t){return e.priority-t.priority}});m.maximumLength=p,m.reserve(p);var g=[],v={},_="undefined"!==typeof document?new i.a(document.location.href):new i.a,b=new c.a;function y(){}function w(e){Object(s.a)(e.priorityFunction)&&(e.priority=e.priorityFunction())}function O(e){var t=Object(a.a)(y.requestsByServer[e],y.maximumRequestsPerServer);return v[e]<t}function C(e){return e.state===d.a.UNISSUED&&(e.state=d.a.ISSUED,e.deferred=r.a.defer()),e.deferred.promise}function E(e){var t=C(e);return e.state=d.a.ACTIVE,g.push(e),++f.numberOfActiveRequests,++f.numberOfActiveRequestsEver,++v[e.serverKey],e.requestFunction().then(function(e){return function(t){e.state!==d.a.CANCELLED&&(--f.numberOfActiveRequests,--v[e.serverKey],b.raiseEvent(),e.state=d.a.RECEIVED,e.deferred.resolve(t),e.deferred=void 0)}}(e)).otherwise(function(e){return function(t){e.state!==d.a.CANCELLED&&(++f.numberOfFailedRequests,--f.numberOfActiveRequests,--v[e.serverKey],b.raiseEvent(t),e.state=d.a.FAILED,e.deferred.reject(t))}}(e)),t}function A(e){var t=e.state===d.a.ACTIVE;e.state=d.a.CANCELLED,++f.numberOfCancelledRequests,Object(s.a)(e.deferred)&&(e.deferred.reject(),e.deferred=void 0),t&&(--f.numberOfActiveRequests,--v[e.serverKey],++f.numberOfCancelledActiveRequests),Object(s.a)(e.cancelFunction)&&e.cancelFunction()}y.maximumRequests=50,y.maximumRequestsPerServer=6,y.requestsByServer={"api.cesium.com:443":18,"assets.cesium.com:443":18},y.throttleRequests=!0,y.debugShowStatistics=!1,y.requestCompletedEvent=b,Object.defineProperties(y,{statistics:{get:function(){return f}},priorityHeapLength:{get:function(){return p},set:function(e){if(e<p)for(;m.length>e;){A(m.pop())}p=e,m.maximumLength=e,m.reserve(e)}}}),y.update=function(){var e,t,n=0,i=g.length;for(e=0;e<i;++e)(t=g[e]).cancelled&&A(t),t.state===d.a.ACTIVE?n>0&&(g[e-n]=t):++n;g.length-=n;var r=m.internalArray,o=m.length;for(e=0;e<o;++e)w(r[e]);m.resort();for(var a=Math.max(y.maximumRequests-g.length,0),s=0;s<a&&m.length>0;)(t=m.pop()).cancelled?A(t):!t.throttleByServer||O(t.serverKey)?(E(t),++s):A(t);!function(){if(!y.debugShowStatistics)return;0===f.numberOfActiveRequests&&f.lastNumberOfActiveRequests>0&&(f.numberOfAttemptedRequests>0&&(console.log("Number of attempted requests: "+f.numberOfAttemptedRequests),f.numberOfAttemptedRequests=0),f.numberOfCancelledRequests>0&&(console.log("Number of cancelled requests: "+f.numberOfCancelledRequests),f.numberOfCancelledRequests=0),f.numberOfCancelledActiveRequests>0&&(console.log("Number of cancelled active requests: "+f.numberOfCancelledActiveRequests),f.numberOfCancelledActiveRequests=0),f.numberOfFailedRequests>0&&(console.log("Number of failed requests: "+f.numberOfFailedRequests),f.numberOfFailedRequests=0));f.lastNumberOfActiveRequests=f.numberOfActiveRequests}()},y.getServerKey=function(e){o.a.typeOf.string("url",e);var t=new i.a(e).resolve(_);t.normalize();var n=t.authority;/:/.test(n)||(n=n+":"+("https"===t.scheme?"443":"80"));var r=v[n];return Object(s.a)(r)||(v[n]=0),n},y.request=function(e){if(o.a.typeOf.object("request",e),o.a.typeOf.string("request.url",e.url),o.a.typeOf.func("request.requestFunction",e.requestFunction),Object(h.a)(e.url)||Object(u.a)(e.url))return b.raiseEvent(),e.state=d.a.RECEIVED,e.requestFunction();if(++f.numberOfAttemptedRequests,Object(s.a)(e.serverKey)||(e.serverKey=y.getServerKey(e.url)),!y.throttleRequests||!e.throttleByServer||O(e.serverKey)){if(!y.throttleRequests||!e.throttle)return E(e);if(!(g.length>=y.maximumRequests)){w(e);var t=m.insert(e);if(Object(s.a)(t)){if(t===e)return;A(t)}return C(e)}}},y.clearForSpecs=function(){for(;m.length>0;){A(m.pop())}for(var e=g.length,t=0;t<e;++t)A(g[t]);g.length=0,v={},f.numberOfAttemptedRequests=0,f.numberOfActiveRequests=0,f.numberOfCancelledRequests=0,f.numberOfCancelledActiveRequests=0,f.numberOfFailedRequests=0,f.numberOfActiveRequestsEver=0,f.lastNumberOfActiveRequests=0},y.numberOfActiveRequestsByServer=function(e){return v[e]},y.requestHeap=m,t.a=y},function(e,t,n){"use strict";(function(e){var i=n(441),r=n(442),o=n(257);function a(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()<t)throw new RangeError("Invalid typed array length");return c.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=c.prototype:(null===e&&(e=new c(t)),e.length=t),e}function c(e,t,n){if(!c.TYPED_ARRAY_SUPPORT&&!(this instanceof c))return new c(e,t,n);if("number"===typeof e){if("string"===typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return l(this,e,t,n)}function l(e,t,n,i){if("number"===typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!==typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,i){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");t=void 0===n&&void 0===i?new Uint8Array(t):void 0===i?new Uint8Array(t,n):new Uint8Array(t,n,i);c.TYPED_ARRAY_SUPPORT?(e=t).__proto__=c.prototype:e=d(e,t);return e}(e,t,n,i):"string"===typeof t?function(e,t,n){"string"===typeof n&&""!==n||(n="utf8");if(!c.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|p(t,n),r=(e=s(e,i)).write(t,n);r!==i&&(e=e.slice(0,r));return e}(e,t,n):function(e,t){if(c.isBuffer(t)){var n=0|f(t.length);return 0===(e=s(e,n)).length||t.copy(e,0,0,n),e}if(t){if("undefined"!==typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!==typeof t.length||(i=t.length)!==i?s(e,0):d(e,t);if("Buffer"===t.type&&o(t.data))return d(e,t.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function u(e){if("number"!==typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(u(t),e=s(e,t<0?0:0|f(t)),!c.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function d(e,t){var n=t.length<0?0:0|f(t.length);e=s(e,n);for(var i=0;i<n;i+=1)e[i]=255&t[i];return e}function f(e){if(e>=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function p(e,t){if(c.isBuffer(e))return e.length;if("undefined"!==typeof ArrayBuffer&&"function"===typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!==typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return B(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(i)return B(e).length;t=(""+t).toLowerCase(),i=!0}}function m(e,t,n){var i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return D(this,t,n);case"utf8":case"utf-8":return x(this,t,n);case"ascii":return T(this,t,n);case"latin1":case"binary":return S(this,t,n);case"base64":return A(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,n);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function g(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}function v(e,t,n,i,r){if(0===e.length)return-1;if("string"===typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"===typeof t&&(t=c.from(t,i)),c.isBuffer(t))return 0===t.length?-1:_(e,t,n,i,r);if("number"===typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):_(e,[t],n,i,r);throw new TypeError("val must be string, number or Buffer")}function _(e,t,n,i,r){var o,a=1,s=e.length,c=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;a=2,s/=2,c/=2,n/=2}function l(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(r){var u=-1;for(o=n;o<s;o++)if(l(e,o)===l(t,-1===u?0:o-u)){if(-1===u&&(u=o),o-u+1===c)return u*a}else-1!==u&&(o-=o-u),u=-1}else for(n+c>s&&(n=s-c),o=n;o>=0;o--){for(var h=!0,d=0;d<c;d++)if(l(e,o+d)!==l(t,d)){h=!1;break}if(h)return o}return-1}function b(e,t,n,i){n=Number(n)||0;var r=e.length-n;i?(i=Number(i))>r&&(i=r):i=r;var o=t.length;if(o%2!==0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var a=0;a<i;++a){var s=parseInt(t.substr(2*a,2),16);if(isNaN(s))return a;e[n+a]=s}return a}function y(e,t,n,i){return V(B(t,e.length-n),e,n,i)}function w(e,t,n,i){return V(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,i)}function O(e,t,n,i){return w(e,t,n,i)}function C(e,t,n,i){return V(H(t),e,n,i)}function E(e,t,n,i){return V(function(e,t){for(var n,i,r,o=[],a=0;a<e.length&&!((t-=2)<0);++a)n=e.charCodeAt(a),i=n>>8,r=n%256,o.push(r),o.push(i);return o}(t,e.length-n),e,n,i)}function A(e,t,n){return 0===t&&n===e.length?i.fromByteArray(e):i.fromByteArray(e.slice(t,n))}function x(e,t,n){n=Math.min(e.length,n);for(var i=[],r=t;r<n;){var o,a,s,c,l=e[r],u=null,h=l>239?4:l>223?3:l>191?2:1;if(r+h<=n)switch(h){case 1:l<128&&(u=l);break;case 2:128===(192&(o=e[r+1]))&&(c=(31&l)<<6|63&o)>127&&(u=c);break;case 3:o=e[r+1],a=e[r+2],128===(192&o)&&128===(192&a)&&(c=(15&l)<<12|(63&o)<<6|63&a)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:o=e[r+1],a=e[r+2],s=e[r+3],128===(192&o)&&128===(192&a)&&128===(192&s)&&(c=(15&l)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&c<1114112&&(u=c)}null===u?(u=65533,h=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),r+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",i=0;for(;i<t;)n+=String.fromCharCode.apply(String,e.slice(i,i+=4096));return n}(i)}t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50,c.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"===typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),t.kMaxLength=a(),c.poolSize=8192,c._augment=function(e){return e.__proto__=c.prototype,e},c.from=function(e,t,n){return l(null,e,t,n)},c.TYPED_ARRAY_SUPPORT&&(c.prototype.__proto__=Uint8Array.prototype,c.__proto__=Uint8Array,"undefined"!==typeof Symbol&&Symbol.species&&c[Symbol.species]===c&&Object.defineProperty(c,Symbol.species,{value:null,configurable:!0})),c.alloc=function(e,t,n){return function(e,t,n,i){return u(t),t<=0?s(e,t):void 0!==n?"string"===typeof i?s(e,t).fill(n,i):s(e,t).fill(n):s(e,t)}(null,e,t,n)},c.allocUnsafe=function(e){return h(null,e)},c.allocUnsafeSlow=function(e){return h(null,e)},c.isBuffer=function(e){return!(null==e||!e._isBuffer)},c.compare=function(e,t){if(!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,i=t.length,r=0,o=Math.min(n,i);r<o;++r)if(e[r]!==t[r]){n=e[r],i=t[r];break}return n<i?-1:i<n?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!o(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var i=c.allocUnsafe(t),r=0;for(n=0;n<e.length;++n){var a=e[n];if(!c.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(i,r),r+=a.length}return i},c.byteLength=p,c.prototype._isBuffer=!0,c.prototype.swap16=function(){var e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)g(this,t,t+1);return this},c.prototype.swap32=function(){var e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},c.prototype.swap64=function(){var e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},c.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?x(this,0,e):m.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),"<Buffer "+e+">"},c.prototype.compare=function(e,t,n,i,r){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),t<0||n>e.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&t>=n)return 0;if(i>=r)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(t>>>=0),s=Math.min(o,a),l=this.slice(i,r),u=e.slice(t,n),h=0;h<s;++h)if(l[h]!==u[h]){o=l[h],a=u[h];break}return o<a?-1:a<o?1:0},c.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},c.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},c.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},c.prototype.write=function(e,t,n,i){if(void 0===t)i="utf8",n=this.length,t=0;else if(void 0===n&&"string"===typeof t)i=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-t;if((void 0===n||n>r)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return y(this,e,t,n);case"ascii":return w(this,e,t,n);case"latin1":case"binary":return O(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(e,t,n){var i="";n=Math.min(e.length,n);for(var r=t;r<n;++r)i+=String.fromCharCode(127&e[r]);return i}function S(e,t,n){var i="";n=Math.min(e.length,n);for(var r=t;r<n;++r)i+=String.fromCharCode(e[r]);return i}function D(e,t,n){var i=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>i)&&(n=i);for(var r="",o=t;o<n;++o)r+=k(e[o]);return r}function P(e,t,n){for(var i=e.slice(t,n),r="",o=0;o<i.length;o+=2)r+=String.fromCharCode(i[o]+256*i[o+1]);return r}function I(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,i,r,o){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||t<o)throw new RangeError('"value" argument is out of bounds');if(n+i>e.length)throw new RangeError("Index out of range")}function R(e,t,n,i){t<0&&(t=65535+t+1);for(var r=0,o=Math.min(e.length-n,2);r<o;++r)e[n+r]=(t&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function L(e,t,n,i){t<0&&(t=4294967295+t+1);for(var r=0,o=Math.min(e.length-n,4);r<o;++r)e[n+r]=t>>>8*(i?r:3-r)&255}function j(e,t,n,i,r,o){if(n+i>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function F(e,t,n,i,o){return o||j(e,0,n,4),r.write(e,t,n,i,23,4),n+4}function N(e,t,n,i,o){return o||j(e,0,n,8),r.write(e,t,n,i,52,8),n+8}c.prototype.slice=function(e,t){var n,i=this.length;if((e=~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),(t=void 0===t?i:~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),t<e&&(t=e),c.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=c.prototype;else{var r=t-e;n=new c(r,void 0);for(var o=0;o<r;++o)n[o]=this[o+e]}return n},c.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var i=this[e],r=1,o=0;++o<t&&(r*=256);)i+=this[e+o]*r;return i},c.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var i=this[e+--t],r=1;t>0&&(r*=256);)i+=this[e+--t]*r;return i},c.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var i=this[e],r=1,o=0;++o<t&&(r*=256);)i+=this[e+o]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var i=t,r=1,o=this[e+--i];i>0&&(r*=256);)o+=this[e+--i]*r;return o>=(r*=128)&&(o-=Math.pow(2,8*t)),o},c.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,i){(e=+e,t|=0,n|=0,i)||M(this,e,t,n,Math.pow(2,8*n)-1,0);var r=1,o=0;for(this[t]=255&e;++o<n&&(r*=256);)this[t+o]=e/r&255;return t+n},c.prototype.writeUIntBE=function(e,t,n,i){(e=+e,t|=0,n|=0,i)||M(this,e,t,n,Math.pow(2,8*n)-1,0);var r=n-1,o=1;for(this[t+r]=255&e;--r>=0&&(o*=256);)this[t+r]=e/o&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):R(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):R(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):L(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,i){if(e=+e,t|=0,!i){var r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}var o=0,a=1,s=0;for(this[t]=255&e;++o<n&&(a*=256);)e<0&&0===s&&0!==this[t+o-1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,i){if(e=+e,t|=0,!i){var r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}var o=n-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):R(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):R(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):L(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):L(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return F(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return F(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return N(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return N(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,i){if(n||(n=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t<i-n&&(i=e.length-t+n);var r,o=i-n;if(this===e&&n<t&&t<i)for(r=o-1;r>=0;--r)e[r+t]=this[r+n];else if(o<1e3||!c.TYPED_ARRAY_SUPPORT)for(r=0;r<o;++r)e[r+t]=this[r+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},c.prototype.fill=function(e,t,n,i){if("string"===typeof e){if("string"===typeof t?(i=t,t=0,n=this.length):"string"===typeof n&&(i=n,n=this.length),1===e.length){var r=e.charCodeAt(0);r<256&&(e=r)}if(void 0!==i&&"string"!==typeof i)throw new TypeError("encoding must be a string");if("string"===typeof i&&!c.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"===typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"===typeof e)for(o=t;o<n;++o)this[o]=e;else{var a=c.isBuffer(e)?e:B(new c(e,i).toString()),s=a.length;for(o=0;o<n-t;++o)this[o+t]=a[o%s]}return this};var z=/[^+\/0-9A-Za-z-_]/g;function k(e){return e<16?"0"+e.toString(16):e.toString(16)}function B(e,t){var n;t=t||1/0;for(var i=e.length,r=null,o=[],a=0;a<i;++a){if((n=e.charCodeAt(a))>55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(t-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function H(e){return i.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(z,"")).length<2)return"";for(;e.length%4!==0;)e+="=";return e}(e))}function V(e,t,n,i){for(var r=0;r<i&&!(r+n>=t.length||r>=e.length);++r)t[r+n]=e[r];return r}}).call(this,n(55))},function(e,t){var n,i,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"===typeof setTimeout?setTimeout:o}catch(e){n=o}try{i="function"===typeof clearTimeout?clearTimeout:a}catch(e){i=a}}();var c,l=[],u=!1,h=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):h=-1,l.length&&f())}function f(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++h<t;)c&&c[h].run();h=-1,t=l.length}c=null,u=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||u||s(f)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=m,r.addListener=m,r.once=m,r.off=m,r.removeListener=m,r.removeAllListeners=m,r.emit=m,r.prependListener=m,r.prependOnceListener=m,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReactCSS=t.loop=t.handleActive=t.handleHover=t.hover=void 0;var i=l(n(635)),r=l(n(707)),o=l(n(727)),a=l(n(728)),s=l(n(729)),c=l(n(730));function l(e){return e&&e.__esModule?e:{default:e}}t.hover=a.default,t.handleHover=a.default,t.handleActive=s.default,t.loop=c.default;var u=t.ReactCSS=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];var s=(0,i.default)(n),c=(0,r.default)(e,s);return(0,o.default)(c)};t.default=u},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(213),l=n(54),u=n(9),h=n(40),d=n(27),f=n(49),p=n(189),m=function(e){function t(t,i){var r=e.call(this,t,i)||this;return r.refHandlers={container:function(e){return r.containerElement=Object(l.findDOMNode)(e)}},r.maybeRenderChild=function(e){if(null==e)return null;var t="object"===typeof e?a.cloneElement(e,{className:o()(e.props.className,u.Classes.OVERLAY_CONTENT),tabIndex:0}):a.createElement("span",{className:u.Classes.OVERLAY_CONTENT},e),n=r.props,i=n.onOpening,s=n.onOpened,l=n.onClosing,h=n.onClosed,d=n.transitionDuration,f=n.transitionName,p=c.CSSTransition;return a.createElement(p,{classNames:f,onEntering:i,onEntered:s,onExiting:l,onExited:h,timeout:d},t)},r.handleBackdropMouseDown=function(e){var t=r.props,n=t.backdropProps,i=t.canOutsideClickClose,o=t.enforceFocus,a=t.onClose;i&&Object(f.b)(a,e),o&&r.bringFocusInsideOverlay(),Object(f.b)(n.onMouseDown,e)},r.handleDocumentClick=function(e){var t=r.props,i=t.canOutsideClickClose,o=t.isOpen,a=t.onClose,s=e.composed?e.composedPath()[0]:e.target,c=n.openStack.indexOf(r),l=n.openStack.slice(c).some((function(e){var t=e.containerElement;return t&&t.contains(s)&&!t.isSameNode(s)}));o&&i&&!l&&Object(f.b)(a,e)},r.handleDocumentFocus=function(e){var t=e.composed?e.composedPath()[0]:e.target;r.props.enforceFocus&&null!=r.containerElement&&t instanceof Node&&!r.containerElement.contains(t)&&(e.preventDefault(),e.stopImmediatePropagation(),r.bringFocusInsideOverlay())},r.handleKeyDown=function(e){var t=r.props,n=t.canEscapeKeyClose,i=t.onClose;e.which===u.Keys.ESCAPE&&n&&(Object(f.b)(i,e),e.preventDefault())},r.state={hasEverOpened:t.isOpen},r}var n;return Object(i.c)(t,e),n=t,t.getDerivedStateFromProps=function(e){var t=e.isOpen;return t?{hasEverOpened:t}:null},t.prototype.render=function(){var e;if(this.props.lazy&&!this.state.hasEverOpened)return null;var t=this.props,n=t.children,i=t.className,r=t.usePortal,s=t.isOpen,l=s?a.Children.map(n,this.maybeRenderChild):[];l.unshift(this.maybeRenderBackdrop());var h=o()(u.Classes.OVERLAY,((e={})[u.Classes.OVERLAY_OPEN]=s,e[u.Classes.OVERLAY_INLINE]=!r,e),i),d=a.createElement(c.TransitionGroup,{appear:!0,className:h,component:"div",onKeyDown:this.handleKeyDown,ref:this.refHandlers.container},l);return r?a.createElement(p.a,{className:this.props.portalClassName,container:this.props.portalContainer},d):d},t.prototype.componentDidMount=function(){this.props.isOpen&&this.overlayWillOpen()},t.prototype.componentDidUpdate=function(e){e.isOpen&&!this.props.isOpen?this.overlayWillClose():!e.isOpen&&this.props.isOpen&&this.overlayWillOpen()},t.prototype.componentWillUnmount=function(){this.overlayWillClose()},t.prototype.bringFocusInsideOverlay=function(){var e=this;return requestAnimationFrame((function(){if(null!=e.containerElement&&null!=document.activeElement&&e.props.isOpen&&!e.containerElement.contains(document.activeElement)){var t=e.containerElement.querySelector("[autofocus]"),n=e.containerElement.querySelector("[tabindex]");null!=t?t.focus():null!=n&&n.focus()}}))},t.prototype.maybeRenderBackdrop=function(){var e=this.props,t=e.backdropClassName,n=e.backdropProps,r=e.hasBackdrop,s=e.isOpen,l=e.transitionDuration,h=e.transitionName;return r&&s?a.createElement(c.CSSTransition,{classNames:h,key:"__backdrop",timeout:l},a.createElement("div",Object(i.a)({},n,{className:o()(u.Classes.OVERLAY_BACKDROP,t,n.className),onMouseDown:this.handleBackdropMouseDown,tabIndex:this.props.canOutsideClickClose?0:null}))):null},t.prototype.overlayWillClose=function(){document.removeEventListener("focus",this.handleDocumentFocus,!0),document.removeEventListener("mousedown",this.handleDocumentClick);var e=n.openStack,t=e.indexOf(this);if(-1!==t){if(e.splice(t,1),e.length>0){var i=n.getLastOpened();i.props.enforceFocus&&document.addEventListener("focus",i.handleDocumentFocus,!0)}0===e.filter((function(e){return e.props.usePortal&&e.props.hasBackdrop})).length&&document.body.classList.remove(u.Classes.OVERLAY_OPEN)}},t.prototype.overlayWillOpen=function(){var e=n.openStack;e.length>0&&document.removeEventListener("focus",n.getLastOpened().handleDocumentFocus,!0),e.push(this),this.props.autoFocus&&this.bringFocusInsideOverlay(),this.props.enforceFocus&&document.addEventListener("focus",this.handleDocumentFocus,!0),this.props.canOutsideClickClose&&!this.props.hasBackdrop&&document.addEventListener("mousedown",this.handleDocumentClick),this.props.hasBackdrop&&this.props.usePortal&&document.body.classList.add(u.Classes.OVERLAY_OPEN)},t.displayName=d.a+".Overlay",t.defaultProps={autoFocus:!0,backdropProps:{},canEscapeKeyClose:!0,canOutsideClickClose:!0,enforceFocus:!0,hasBackdrop:!0,isOpen:!1,lazy:!0,transitionDuration:300,transitionName:u.Classes.OVERLAY,usePortal:!0},t.openStack=[],t.getLastOpened=function(){return n.openStack[n.openStack.length-1]},t=n=Object(i.b)([s.polyfill],t)}(h.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(66);function r(e,t,n){return(r="undefined"!==typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var r=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Object(i.a)(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(n):o.value}})(e,t,n||e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={START:"start",END:"end"}},,function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={};n.r(i),n.d(i,"ADD",(function(){return r})),n.d(i,"ADD_COLUMN_LEFT",(function(){return o})),n.d(i,"ADD_COLUMN_RIGHT",(function(){return a})),n.d(i,"ADD_ROW_BOTTOM",(function(){return s})),n.d(i,"ADD_ROW_TOP",(function(){return c})),n.d(i,"ADD_TO_ARTIFACT",(function(){return l})),n.d(i,"ADD_TO_FOLDER",(function(){return u})),n.d(i,"AIRPLANE",(function(){return h})),n.d(i,"ALIGN_CENTER",(function(){return d})),n.d(i,"ALIGN_JUSTIFY",(function(){return f})),n.d(i,"ALIGN_LEFT",(function(){return p})),n.d(i,"ALIGN_RIGHT",(function(){return m})),n.d(i,"ALIGNMENT_BOTTOM",(function(){return g})),n.d(i,"ALIGNMENT_HORIZONTAL_CENTER",(function(){return v})),n.d(i,"ALIGNMENT_LEFT",(function(){return _})),n.d(i,"ALIGNMENT_RIGHT",(function(){return b})),n.d(i,"ALIGNMENT_TOP",(function(){return y})),n.d(i,"ALIGNMENT_VERTICAL_CENTER",(function(){return w})),n.d(i,"ANNOTATION",(function(){return O})),n.d(i,"APP_HEADER",(function(){return C})),n.d(i,"APPLICATION",(function(){return E})),n.d(i,"APPLICATIONS",(function(){return A})),n.d(i,"ARCHIVE",(function(){return x})),n.d(i,"ARROW_BOTTOM_LEFT",(function(){return T})),n.d(i,"ARROW_BOTTOM_RIGHT",(function(){return S})),n.d(i,"ARROW_DOWN",(function(){return D})),n.d(i,"ARROW_LEFT",(function(){return P})),n.d(i,"ARROW_RIGHT",(function(){return I})),n.d(i,"ARROW_TOP_LEFT",(function(){return M})),n.d(i,"ARROW_TOP_RIGHT",(function(){return R})),n.d(i,"ARROW_UP",(function(){return L})),n.d(i,"ARROWS_HORIZONTAL",(function(){return j})),n.d(i,"ARROWS_VERTICAL",(function(){return F})),n.d(i,"ASTERISK",(function(){return N})),n.d(i,"AUTOMATIC_UPDATES",(function(){return z})),n.d(i,"BACKLINK",(function(){return k})),n.d(i,"BADGE",(function(){return B})),n.d(i,"BAN_CIRCLE",(function(){return H})),n.d(i,"BANK_ACCOUNT",(function(){return V})),n.d(i,"BARCODE",(function(){return U})),n.d(i,"BLANK",(function(){return W})),n.d(i,"BLOCKED_PERSON",(function(){return G})),n.d(i,"BOLD",(function(){return q})),n.d(i,"BOOK",(function(){return Y})),n.d(i,"BOOKMARK",(function(){return $})),n.d(i,"BOX",(function(){return X})),n.d(i,"BRIEFCASE",(function(){return K})),n.d(i,"BRING_DATA",(function(){return Q})),n.d(i,"BUILD",(function(){return Z})),n.d(i,"CALCULATOR",(function(){return J})),n.d(i,"CALENDAR",(function(){return ee})),n.d(i,"CAMERA",(function(){return te})),n.d(i,"CARET_DOWN",(function(){return ne})),n.d(i,"CARET_LEFT",(function(){return ie})),n.d(i,"CARET_RIGHT",(function(){return re})),n.d(i,"CARET_UP",(function(){return oe})),n.d(i,"CELL_TOWER",(function(){return ae})),n.d(i,"CHANGES",(function(){return se})),n.d(i,"CHART",(function(){return ce})),n.d(i,"CHAT",(function(){return le})),n.d(i,"CHEVRON_BACKWARD",(function(){return ue})),n.d(i,"CHEVRON_DOWN",(function(){return he})),n.d(i,"CHEVRON_FORWARD",(function(){return de})),n.d(i,"CHEVRON_LEFT",(function(){return fe})),n.d(i,"CHEVRON_RIGHT",(function(){return pe})),n.d(i,"CHEVRON_UP",(function(){return me})),n.d(i,"CIRCLE",(function(){return ge})),n.d(i,"CIRCLE_ARROW_DOWN",(function(){return ve})),n.d(i,"CIRCLE_ARROW_LEFT",(function(){return _e})),n.d(i,"CIRCLE_ARROW_RIGHT",(function(){return be})),n.d(i,"CIRCLE_ARROW_UP",(function(){return ye})),n.d(i,"CITATION",(function(){return we})),n.d(i,"CLEAN",(function(){return Oe})),n.d(i,"CLIPBOARD",(function(){return Ce})),n.d(i,"CLOUD",(function(){return Ee})),n.d(i,"CLOUD_DOWNLOAD",(function(){return Ae})),n.d(i,"CLOUD_UPLOAD",(function(){return xe})),n.d(i,"CODE",(function(){return Te})),n.d(i,"CODE_BLOCK",(function(){return Se})),n.d(i,"COG",(function(){return De})),n.d(i,"COLLAPSE_ALL",(function(){return Pe})),n.d(i,"COLUMN_LAYOUT",(function(){return Ie})),n.d(i,"COMMENT",(function(){return Me})),n.d(i,"COMPARISON",(function(){return Re})),n.d(i,"COMPASS",(function(){return Le})),n.d(i,"COMPRESSED",(function(){return je})),n.d(i,"CONFIRM",(function(){return Fe})),n.d(i,"CONSOLE",(function(){return Ne})),n.d(i,"CONTRAST",(function(){return ze})),n.d(i,"CONTROL",(function(){return ke})),n.d(i,"CREDIT_CARD",(function(){return Be})),n.d(i,"CROSS",(function(){return He})),n.d(i,"CROWN",(function(){return Ve})),n.d(i,"CUBE",(function(){return Ue})),n.d(i,"CUBE_ADD",(function(){return We})),n.d(i,"CUBE_REMOVE",(function(){return Ge})),n.d(i,"CURVED_RANGE_CHART",(function(){return qe})),n.d(i,"CUT",(function(){return Ye})),n.d(i,"CYCLE",(function(){return $e})),n.d(i,"DASHBOARD",(function(){return Xe})),n.d(i,"DATA_LINEAGE",(function(){return Ke})),n.d(i,"DATABASE",(function(){return Qe})),n.d(i,"DELETE",(function(){return Ze})),n.d(i,"DELTA",(function(){return Je})),n.d(i,"DERIVE_COLUMN",(function(){return et})),n.d(i,"DESKTOP",(function(){return tt})),n.d(i,"DIAGNOSIS",(function(){return nt})),n.d(i,"DIAGRAM_TREE",(function(){return it})),n.d(i,"DIRECTION_LEFT",(function(){return rt})),n.d(i,"DIRECTION_RIGHT",(function(){return ot})),n.d(i,"DISABLE",(function(){return at})),n.d(i,"DOCUMENT",(function(){return st})),n.d(i,"DOCUMENT_OPEN",(function(){return ct})),n.d(i,"DOCUMENT_SHARE",(function(){return lt})),n.d(i,"DOLLAR",(function(){return ut})),n.d(i,"DOT",(function(){return ht})),n.d(i,"DOUBLE_CARET_HORIZONTAL",(function(){return dt})),n.d(i,"DOUBLE_CARET_VERTICAL",(function(){return ft})),n.d(i,"DOUBLE_CHEVRON_DOWN",(function(){return pt})),n.d(i,"DOUBLE_CHEVRON_LEFT",(function(){return mt})),n.d(i,"DOUBLE_CHEVRON_RIGHT",(function(){return gt})),n.d(i,"DOUBLE_CHEVRON_UP",(function(){return vt})),n.d(i,"DOUGHNUT_CHART",(function(){return _t})),n.d(i,"DOWNLOAD",(function(){return bt})),n.d(i,"DRAG_HANDLE_HORIZONTAL",(function(){return yt})),n.d(i,"DRAG_HANDLE_VERTICAL",(function(){return wt})),n.d(i,"DRAW",(function(){return Ot})),n.d(i,"DRAWER_LEFT",(function(){return Ct})),n.d(i,"DRAWER_LEFT_FILLED",(function(){return Et})),n.d(i,"DRAWER_RIGHT",(function(){return At})),n.d(i,"DRAWER_RIGHT_FILLED",(function(){return xt})),n.d(i,"DRIVE_TIME",(function(){return Tt})),n.d(i,"DUPLICATE",(function(){return St})),n.d(i,"EDIT",(function(){return Dt})),n.d(i,"EJECT",(function(){return Pt})),n.d(i,"ENDORSED",(function(){return It})),n.d(i,"ENVELOPE",(function(){return Mt})),n.d(i,"EQUALS",(function(){return Rt})),n.d(i,"ERASER",(function(){return Lt})),n.d(i,"ERROR",(function(){return jt})),n.d(i,"EURO",(function(){return Ft})),n.d(i,"EXCHANGE",(function(){return Nt})),n.d(i,"EXCLUDE_ROW",(function(){return zt})),n.d(i,"EXPAND_ALL",(function(){return kt})),n.d(i,"EXPORT",(function(){return Bt})),n.d(i,"EYE_OFF",(function(){return Ht})),n.d(i,"EYE_ON",(function(){return Vt})),n.d(i,"EYE_OPEN",(function(){return Ut})),n.d(i,"FAST_BACKWARD",(function(){return Wt})),n.d(i,"FAST_FORWARD",(function(){return Gt})),n.d(i,"FEED",(function(){return qt})),n.d(i,"FEED_SUBSCRIBED",(function(){return Yt})),n.d(i,"FILM",(function(){return $t})),n.d(i,"FILTER",(function(){return Xt})),n.d(i,"FILTER_KEEP",(function(){return Kt})),n.d(i,"FILTER_LIST",(function(){return Qt})),n.d(i,"FILTER_OPEN",(function(){return Zt})),n.d(i,"FILTER_REMOVE",(function(){return Jt})),n.d(i,"FLAG",(function(){return en})),n.d(i,"FLAME",(function(){return tn})),n.d(i,"FLASH",(function(){return nn})),n.d(i,"FLOPPY_DISK",(function(){return rn})),n.d(i,"FLOW_BRANCH",(function(){return on})),n.d(i,"FLOW_END",(function(){return an})),n.d(i,"FLOW_LINEAR",(function(){return sn})),n.d(i,"FLOW_REVIEW",(function(){return cn})),n.d(i,"FLOW_REVIEW_BRANCH",(function(){return ln})),n.d(i,"FLOWS",(function(){return un})),n.d(i,"FOLDER_CLOSE",(function(){return hn})),n.d(i,"FOLDER_NEW",(function(){return dn})),n.d(i,"FOLDER_OPEN",(function(){return fn})),n.d(i,"FOLDER_SHARED",(function(){return pn})),n.d(i,"FOLDER_SHARED_OPEN",(function(){return mn})),n.d(i,"FOLLOWER",(function(){return gn})),n.d(i,"FOLLOWING",(function(){return vn})),n.d(i,"FONT",(function(){return _n})),n.d(i,"FORK",(function(){return bn})),n.d(i,"FORM",(function(){return yn})),n.d(i,"FULL_CIRCLE",(function(){return wn})),n.d(i,"FULL_STACKED_CHART",(function(){return On})),n.d(i,"FULLSCREEN",(function(){return Cn})),n.d(i,"FUNCTION",(function(){return En})),n.d(i,"GANTT_CHART",(function(){return An})),n.d(i,"GEOFENCE",(function(){return xn})),n.d(i,"GEOLOCATION",(function(){return Tn})),n.d(i,"GEOSEARCH",(function(){return Sn})),n.d(i,"GIT_BRANCH",(function(){return Dn})),n.d(i,"GIT_COMMIT",(function(){return Pn})),n.d(i,"GIT_MERGE",(function(){return In})),n.d(i,"GIT_NEW_BRANCH",(function(){return Mn})),n.d(i,"GIT_PULL",(function(){return Rn})),n.d(i,"GIT_PUSH",(function(){return Ln})),n.d(i,"GIT_REPO",(function(){return jn})),n.d(i,"GLASS",(function(){return Fn})),n.d(i,"GLOBE",(function(){return Nn})),n.d(i,"GLOBE_NETWORK",(function(){return zn})),n.d(i,"GRAPH",(function(){return kn})),n.d(i,"GRAPH_REMOVE",(function(){return Bn})),n.d(i,"GREATER_THAN",(function(){return Hn})),n.d(i,"GREATER_THAN_OR_EQUAL_TO",(function(){return Vn})),n.d(i,"GRID",(function(){return Un})),n.d(i,"GRID_VIEW",(function(){return Wn})),n.d(i,"GROUP_OBJECTS",(function(){return Gn})),n.d(i,"GROUPED_BAR_CHART",(function(){return qn})),n.d(i,"HAND",(function(){return Yn})),n.d(i,"HAND_DOWN",(function(){return $n})),n.d(i,"HAND_LEFT",(function(){return Xn})),n.d(i,"HAND_RIGHT",(function(){return Kn})),n.d(i,"HAND_UP",(function(){return Qn})),n.d(i,"HAT",(function(){return Zn})),n.d(i,"HEADER",(function(){return Jn})),n.d(i,"HEADER_ONE",(function(){return ei})),n.d(i,"HEADER_TWO",(function(){return ti})),n.d(i,"HEADSET",(function(){return ni})),n.d(i,"HEART",(function(){return ii})),n.d(i,"HEART_BROKEN",(function(){return ri})),n.d(i,"HEAT_GRID",(function(){return oi})),n.d(i,"HEATMAP",(function(){return ai})),n.d(i,"HELP",(function(){return si})),n.d(i,"HELPER_MANAGEMENT",(function(){return ci})),n.d(i,"HIGHLIGHT",(function(){return li})),n.d(i,"HISTORY",(function(){return ui})),n.d(i,"HOME",(function(){return hi})),n.d(i,"HORIZONTAL_BAR_CHART",(function(){return di})),n.d(i,"HORIZONTAL_BAR_CHART_ASC",(function(){return fi})),n.d(i,"HORIZONTAL_BAR_CHART_DESC",(function(){return pi})),n.d(i,"HORIZONTAL_DISTRIBUTION",(function(){return mi})),n.d(i,"ID_NUMBER",(function(){return gi})),n.d(i,"IMAGE_ROTATE_LEFT",(function(){return vi})),n.d(i,"IMAGE_ROTATE_RIGHT",(function(){return _i})),n.d(i,"IMPORT",(function(){return bi})),n.d(i,"INBOX",(function(){return yi})),n.d(i,"INBOX_FILTERED",(function(){return wi})),n.d(i,"INBOX_GEO",(function(){return Oi})),n.d(i,"INBOX_SEARCH",(function(){return Ci})),n.d(i,"INBOX_UPDATE",(function(){return Ei})),n.d(i,"INFO_SIGN",(function(){return Ai})),n.d(i,"INHERITANCE",(function(){return xi})),n.d(i,"INHERITED_GROUP",(function(){return Ti})),n.d(i,"INNER_JOIN",(function(){return Si})),n.d(i,"INSERT",(function(){return Di})),n.d(i,"INTERSECTION",(function(){return Pi})),n.d(i,"IP_ADDRESS",(function(){return Ii})),n.d(i,"ISSUE",(function(){return Mi})),n.d(i,"ISSUE_CLOSED",(function(){return Ri})),n.d(i,"ISSUE_NEW",(function(){return Li})),n.d(i,"ITALIC",(function(){return ji})),n.d(i,"JOIN_TABLE",(function(){return Fi})),n.d(i,"KEY",(function(){return Ni})),n.d(i,"KEY_BACKSPACE",(function(){return zi})),n.d(i,"KEY_COMMAND",(function(){return ki})),n.d(i,"KEY_CONTROL",(function(){return Bi})),n.d(i,"KEY_DELETE",(function(){return Hi})),n.d(i,"KEY_ENTER",(function(){return Vi})),n.d(i,"KEY_ESCAPE",(function(){return Ui})),n.d(i,"KEY_OPTION",(function(){return Wi})),n.d(i,"KEY_SHIFT",(function(){return Gi})),n.d(i,"KEY_TAB",(function(){return qi})),n.d(i,"KNOWN_VEHICLE",(function(){return Yi})),n.d(i,"LAB_TEST",(function(){return $i})),n.d(i,"LABEL",(function(){return Xi})),n.d(i,"LAYER",(function(){return Ki})),n.d(i,"LAYERS",(function(){return Qi})),n.d(i,"LAYOUT",(function(){return Zi})),n.d(i,"LAYOUT_AUTO",(function(){return Ji})),n.d(i,"LAYOUT_BALLOON",(function(){return er})),n.d(i,"LAYOUT_CIRCLE",(function(){return tr})),n.d(i,"LAYOUT_GRID",(function(){return nr})),n.d(i,"LAYOUT_GROUP_BY",(function(){return ir})),n.d(i,"LAYOUT_HIERARCHY",(function(){return rr})),n.d(i,"LAYOUT_LINEAR",(function(){return or})),n.d(i,"LAYOUT_SKEW_GRID",(function(){return ar})),n.d(i,"LAYOUT_SORTED_CLUSTERS",(function(){return sr})),n.d(i,"LEARNING",(function(){return cr})),n.d(i,"LEFT_JOIN",(function(){return lr})),n.d(i,"LESS_THAN",(function(){return ur})),n.d(i,"LESS_THAN_OR_EQUAL_TO",(function(){return hr})),n.d(i,"LIFESAVER",(function(){return dr})),n.d(i,"LIGHTBULB",(function(){return fr})),n.d(i,"LINK",(function(){return pr})),n.d(i,"LIST",(function(){return mr})),n.d(i,"LIST_COLUMNS",(function(){return gr})),n.d(i,"LIST_DETAIL_VIEW",(function(){return vr})),n.d(i,"LOCATE",(function(){return _r})),n.d(i,"LOCK",(function(){return br})),n.d(i,"LOG_IN",(function(){return yr})),n.d(i,"LOG_OUT",(function(){return wr})),n.d(i,"MANUAL",(function(){return Or})),n.d(i,"MANUALLY_ENTERED_DATA",(function(){return Cr})),n.d(i,"MAP",(function(){return Er})),n.d(i,"MAP_CREATE",(function(){return Ar})),n.d(i,"MAP_MARKER",(function(){return xr})),n.d(i,"MAXIMIZE",(function(){return Tr})),n.d(i,"MEDIA",(function(){return Sr})),n.d(i,"MENU",(function(){return Dr})),n.d(i,"MENU_CLOSED",(function(){return Pr})),n.d(i,"MENU_OPEN",(function(){return Ir})),n.d(i,"MERGE_COLUMNS",(function(){return Mr})),n.d(i,"MERGE_LINKS",(function(){return Rr})),n.d(i,"MINIMIZE",(function(){return Lr})),n.d(i,"MINUS",(function(){return jr})),n.d(i,"MOBILE_PHONE",(function(){return Fr})),n.d(i,"MOBILE_VIDEO",(function(){return Nr})),n.d(i,"MODAL",(function(){return zr})),n.d(i,"MODAL_FILLED",(function(){return kr})),n.d(i,"MOON",(function(){return Br})),n.d(i,"MORE",(function(){return Hr})),n.d(i,"MOUNTAIN",(function(){return Vr})),n.d(i,"MOVE",(function(){return Ur})),n.d(i,"MUGSHOT",(function(){return Wr})),n.d(i,"MULTI_SELECT",(function(){return Gr})),n.d(i,"MUSIC",(function(){return qr})),n.d(i,"NEW_DRAWING",(function(){return Yr})),n.d(i,"NEW_GRID_ITEM",(function(){return $r})),n.d(i,"NEW_LAYER",(function(){return Xr})),n.d(i,"NEW_LAYERS",(function(){return Kr})),n.d(i,"NEW_LINK",(function(){return Qr})),n.d(i,"NEW_OBJECT",(function(){return Zr})),n.d(i,"NEW_PERSON",(function(){return Jr})),n.d(i,"NEW_PRESCRIPTION",(function(){return eo})),n.d(i,"NEW_TEXT_BOX",(function(){return to})),n.d(i,"NINJA",(function(){return no})),n.d(i,"NOT_EQUAL_TO",(function(){return io})),n.d(i,"NOTIFICATIONS",(function(){return ro})),n.d(i,"NOTIFICATIONS_UPDATED",(function(){return oo})),n.d(i,"NUMBERED_LIST",(function(){return ao})),n.d(i,"NUMERICAL",(function(){return so})),n.d(i,"OFFICE",(function(){return co})),n.d(i,"OFFLINE",(function(){return lo})),n.d(i,"OIL_FIELD",(function(){return uo})),n.d(i,"ONE_COLUMN",(function(){return ho})),n.d(i,"OUTDATED",(function(){return fo})),n.d(i,"PAGE_LAYOUT",(function(){return po})),n.d(i,"PANEL_STATS",(function(){return mo})),n.d(i,"PANEL_TABLE",(function(){return go})),n.d(i,"PAPERCLIP",(function(){return vo})),n.d(i,"PARAGRAPH",(function(){return _o})),n.d(i,"PATH",(function(){return bo})),n.d(i,"PATH_SEARCH",(function(){return yo})),n.d(i,"PAUSE",(function(){return wo})),n.d(i,"PEOPLE",(function(){return Oo})),n.d(i,"PERCENTAGE",(function(){return Co})),n.d(i,"PERSON",(function(){return Eo})),n.d(i,"PHONE",(function(){return Ao})),n.d(i,"PIE_CHART",(function(){return xo})),n.d(i,"PIN",(function(){return To})),n.d(i,"PIVOT",(function(){return So})),n.d(i,"PIVOT_TABLE",(function(){return Do})),n.d(i,"PLAY",(function(){return Po})),n.d(i,"PLUS",(function(){return Io})),n.d(i,"POLYGON_FILTER",(function(){return Mo})),n.d(i,"POWER",(function(){return Ro})),n.d(i,"PREDICTIVE_ANALYSIS",(function(){return Lo})),n.d(i,"PRESCRIPTION",(function(){return jo})),n.d(i,"PRESENTATION",(function(){return Fo})),n.d(i,"PRINT",(function(){return No})),n.d(i,"PROJECTS",(function(){return zo})),n.d(i,"PROPERTIES",(function(){return ko})),n.d(i,"PROPERTY",(function(){return Bo})),n.d(i,"PUBLISH_FUNCTION",(function(){return Ho})),n.d(i,"PULSE",(function(){return Vo})),n.d(i,"RANDOM",(function(){return Uo})),n.d(i,"RECORD",(function(){return Wo})),n.d(i,"REDO",(function(){return Go})),n.d(i,"REFRESH",(function(){return qo})),n.d(i,"REGRESSION_CHART",(function(){return Yo})),n.d(i,"REMOVE",(function(){return $o})),n.d(i,"REMOVE_COLUMN",(function(){return Xo})),n.d(i,"REMOVE_COLUMN_LEFT",(function(){return Ko})),n.d(i,"REMOVE_COLUMN_RIGHT",(function(){return Qo})),n.d(i,"REMOVE_ROW_BOTTOM",(function(){return Zo})),n.d(i,"REMOVE_ROW_TOP",(function(){return Jo})),n.d(i,"REPEAT",(function(){return ea})),n.d(i,"RESET",(function(){return ta})),n.d(i,"RESOLVE",(function(){return na})),n.d(i,"RIG",(function(){return ia})),n.d(i,"RIGHT_JOIN",(function(){return ra})),n.d(i,"RING",(function(){return oa})),n.d(i,"ROTATE_DOCUMENT",(function(){return aa})),n.d(i,"ROTATE_PAGE",(function(){return sa})),n.d(i,"ROUTE",(function(){return ca})),n.d(i,"SATELLITE",(function(){return la})),n.d(i,"SAVED",(function(){return ua})),n.d(i,"SCATTER_PLOT",(function(){return ha})),n.d(i,"SEARCH",(function(){return da})),n.d(i,"SEARCH_AROUND",(function(){return fa})),n.d(i,"SEARCH_TEMPLATE",(function(){return pa})),n.d(i,"SEARCH_TEXT",(function(){return ma})),n.d(i,"SEGMENTED_CONTROL",(function(){return ga})),n.d(i,"SELECT",(function(){return va})),n.d(i,"SELECTION",(function(){return _a})),n.d(i,"SEND_MESSAGE",(function(){return ba})),n.d(i,"SEND_TO",(function(){return ya})),n.d(i,"SEND_TO_GRAPH",(function(){return wa})),n.d(i,"SEND_TO_MAP",(function(){return Oa})),n.d(i,"SERIES_ADD",(function(){return Ca})),n.d(i,"SERIES_CONFIGURATION",(function(){return Ea})),n.d(i,"SERIES_DERIVED",(function(){return Aa})),n.d(i,"SERIES_FILTERED",(function(){return xa})),n.d(i,"SERIES_SEARCH",(function(){return Ta})),n.d(i,"SETTINGS",(function(){return Sa})),n.d(i,"SHARE",(function(){return Da})),n.d(i,"SHIELD",(function(){return Pa})),n.d(i,"SHOP",(function(){return Ia})),n.d(i,"SHOPPING_CART",(function(){return Ma})),n.d(i,"SIGNAL_SEARCH",(function(){return Ra})),n.d(i,"SIM_CARD",(function(){return La})),n.d(i,"SLASH",(function(){return ja})),n.d(i,"SMALL_CROSS",(function(){return Fa})),n.d(i,"SMALL_MINUS",(function(){return Na})),n.d(i,"SMALL_PLUS",(function(){return za})),n.d(i,"SMALL_TICK",(function(){return ka})),n.d(i,"SNOWFLAKE",(function(){return Ba})),n.d(i,"SOCIAL_MEDIA",(function(){return Ha})),n.d(i,"SORT",(function(){return Va})),n.d(i,"SORT_ALPHABETICAL",(function(){return Ua})),n.d(i,"SORT_ALPHABETICAL_DESC",(function(){return Wa})),n.d(i,"SORT_ASC",(function(){return Ga})),n.d(i,"SORT_DESC",(function(){return qa})),n.d(i,"SORT_NUMERICAL",(function(){return Ya})),n.d(i,"SORT_NUMERICAL_DESC",(function(){return $a})),n.d(i,"SPLIT_COLUMNS",(function(){return Xa})),n.d(i,"SQUARE",(function(){return Ka})),n.d(i,"STACKED_CHART",(function(){return Qa})),n.d(i,"STAR",(function(){return Za})),n.d(i,"STAR_EMPTY",(function(){return Ja})),n.d(i,"STEP_BACKWARD",(function(){return es})),n.d(i,"STEP_CHART",(function(){return ts})),n.d(i,"STEP_FORWARD",(function(){return ns})),n.d(i,"STOP",(function(){return is})),n.d(i,"STOPWATCH",(function(){return rs})),n.d(i,"STRIKETHROUGH",(function(){return os})),n.d(i,"STYLE",(function(){return as})),n.d(i,"SWAP_HORIZONTAL",(function(){return ss})),n.d(i,"SWAP_VERTICAL",(function(){return cs})),n.d(i,"SYMBOL_CIRCLE",(function(){return ls})),n.d(i,"SYMBOL_CROSS",(function(){return us})),n.d(i,"SYMBOL_DIAMOND",(function(){return hs})),n.d(i,"SYMBOL_SQUARE",(function(){return ds})),n.d(i,"SYMBOL_TRIANGLE_DOWN",(function(){return fs})),n.d(i,"SYMBOL_TRIANGLE_UP",(function(){return ps})),n.d(i,"TAG",(function(){return ms})),n.d(i,"TAKE_ACTION",(function(){return gs})),n.d(i,"TAXI",(function(){return vs})),n.d(i,"TEXT_HIGHLIGHT",(function(){return _s})),n.d(i,"TH",(function(){return bs})),n.d(i,"TH_DERIVED",(function(){return ys})),n.d(i,"TH_DISCONNECT",(function(){return ws})),n.d(i,"TH_FILTERED",(function(){return Os})),n.d(i,"TH_LIST",(function(){return Cs})),n.d(i,"THUMBS_DOWN",(function(){return Es})),n.d(i,"THUMBS_UP",(function(){return As})),n.d(i,"TICK",(function(){return xs})),n.d(i,"TICK_CIRCLE",(function(){return Ts})),n.d(i,"TIME",(function(){return Ss})),n.d(i,"TIMELINE_AREA_CHART",(function(){return Ds})),n.d(i,"TIMELINE_BAR_CHART",(function(){return Ps})),n.d(i,"TIMELINE_EVENTS",(function(){return Is})),n.d(i,"TIMELINE_LINE_CHART",(function(){return Ms})),n.d(i,"TINT",(function(){return Rs})),n.d(i,"TORCH",(function(){return Ls})),n.d(i,"TRACTOR",(function(){return js})),n.d(i,"TRAIN",(function(){return Fs})),n.d(i,"TRANSLATE",(function(){return Ns})),n.d(i,"TRASH",(function(){return zs})),n.d(i,"TREE",(function(){return ks})),n.d(i,"TRENDING_DOWN",(function(){return Bs})),n.d(i,"TRENDING_UP",(function(){return Hs})),n.d(i,"TRUCK",(function(){return Vs})),n.d(i,"TWO_COLUMNS",(function(){return Us})),n.d(i,"UNARCHIVE",(function(){return Ws})),n.d(i,"UNDERLINE",(function(){return Gs})),n.d(i,"UNDO",(function(){return qs})),n.d(i,"UNGROUP_OBJECTS",(function(){return Ys})),n.d(i,"UNKNOWN_VEHICLE",(function(){return $s})),n.d(i,"UNLOCK",(function(){return Xs})),n.d(i,"UNPIN",(function(){return Ks})),n.d(i,"UNRESOLVE",(function(){return Qs})),n.d(i,"UPDATED",(function(){return Zs})),n.d(i,"UPLOAD",(function(){return Js})),n.d(i,"USER",(function(){return ec})),n.d(i,"VARIABLE",(function(){return tc})),n.d(i,"VERTICAL_BAR_CHART_ASC",(function(){return nc})),n.d(i,"VERTICAL_BAR_CHART_DESC",(function(){return ic})),n.d(i,"VERTICAL_DISTRIBUTION",(function(){return rc})),n.d(i,"VIDEO",(function(){return oc})),n.d(i,"VIRUS",(function(){return ac})),n.d(i,"VOLUME_DOWN",(function(){return sc})),n.d(i,"VOLUME_OFF",(function(){return cc})),n.d(i,"VOLUME_UP",(function(){return lc})),n.d(i,"WALK",(function(){return uc})),n.d(i,"WARNING_SIGN",(function(){return hc})),n.d(i,"WATERFALL_CHART",(function(){return dc})),n.d(i,"WIDGET",(function(){return fc})),n.d(i,"WIDGET_BUTTON",(function(){return pc})),n.d(i,"WIDGET_FOOTER",(function(){return mc})),n.d(i,"WIDGET_HEADER",(function(){return gc})),n.d(i,"WRENCH",(function(){return vc})),n.d(i,"ZOOM_IN",(function(){return _c})),n.d(i,"ZOOM_OUT",(function(){return bc})),n.d(i,"ZOOM_TO_FIT",(function(){return yc}));var r="add",o="add-column-left",a="add-column-right",s="add-row-bottom",c="add-row-top",l="add-to-artifact",u="add-to-folder",h="airplane",d="align-center",f="align-justify",p="align-left",m="align-right",g="alignment-bottom",v="alignment-horizontal-center",_="alignment-left",b="alignment-right",y="alignment-top",w="alignment-vertical-center",O="annotation",C="app-header",E="application",A="applications",x="archive",T="arrow-bottom-left",S="arrow-bottom-right",D="arrow-down",P="arrow-left",I="arrow-right",M="arrow-top-left",R="arrow-top-right",L="arrow-up",j="arrows-horizontal",F="arrows-vertical",N="asterisk",z="automatic-updates",k="backlink",B="badge",H="ban-circle",V="bank-account",U="barcode",W="blank",G="blocked-person",q="bold",Y="book",$="bookmark",X="box",K="briefcase",Q="bring-data",Z="build",J="calculator",ee="calendar",te="camera",ne="caret-down",ie="caret-left",re="caret-right",oe="caret-up",ae="cell-tower",se="changes",ce="chart",le="chat",ue="chevron-backward",he="chevron-down",de="chevron-forward",fe="chevron-left",pe="chevron-right",me="chevron-up",ge="circle",ve="circle-arrow-down",_e="circle-arrow-left",be="circle-arrow-right",ye="circle-arrow-up",we="citation",Oe="clean",Ce="clipboard",Ee="cloud",Ae="cloud-download",xe="cloud-upload",Te="code",Se="code-block",De="cog",Pe="collapse-all",Ie="column-layout",Me="comment",Re="comparison",Le="compass",je="compressed",Fe="confirm",Ne="console",ze="contrast",ke="control",Be="credit-card",He="cross",Ve="crown",Ue="cube",We="cube-add",Ge="cube-remove",qe="curved-range-chart",Ye="cut",$e="cycle",Xe="dashboard",Ke="data-lineage",Qe="database",Ze="delete",Je="delta",et="derive-column",tt="desktop",nt="diagnosis",it="diagram-tree",rt="direction-left",ot="direction-right",at="disable",st="document",ct="document-open",lt="document-share",ut="dollar",ht="dot",dt="double-caret-horizontal",ft="double-caret-vertical",pt="double-chevron-down",mt="double-chevron-left",gt="double-chevron-right",vt="double-chevron-up",_t="doughnut-chart",bt="download",yt="drag-handle-horizontal",wt="drag-handle-vertical",Ot="draw",Ct="drawer-left",Et="drawer-left-filled",At="drawer-right",xt="drawer-right-filled",Tt="drive-time",St="duplicate",Dt="edit",Pt="eject",It="endorsed",Mt="envelope",Rt="equals",Lt="eraser",jt="error",Ft="euro",Nt="exchange",zt="exclude-row",kt="expand-all",Bt="export",Ht="eye-off",Vt="eye-on",Ut="eye-open",Wt="fast-backward",Gt="fast-forward",qt="feed",Yt="feed-subscribed",$t="film",Xt="filter",Kt="filter-keep",Qt="filter-list",Zt="filter-open",Jt="filter-remove",en="flag",tn="flame",nn="flash",rn="floppy-disk",on="flow-branch",an="flow-end",sn="flow-linear",cn="flow-review",ln="flow-review-branch",un="flows",hn="folder-close",dn="folder-new",fn="folder-open",pn="folder-shared",mn="folder-shared-open",gn="follower",vn="following",_n="font",bn="fork",yn="form",wn="full-circle",On="full-stacked-chart",Cn="fullscreen",En="function",An="gantt-chart",xn="geofence",Tn="geolocation",Sn="geosearch",Dn="git-branch",Pn="git-commit",In="git-merge",Mn="git-new-branch",Rn="git-pull",Ln="git-push",jn="git-repo",Fn="glass",Nn="globe",zn="globe-network",kn="graph",Bn="graph-remove",Hn="greater-than",Vn="greater-than-or-equal-to",Un="grid",Wn="grid-view",Gn="group-objects",qn="grouped-bar-chart",Yn="hand",$n="hand-down",Xn="hand-left",Kn="hand-right",Qn="hand-up",Zn="hat",Jn="header",ei="header-one",ti="header-two",ni="headset",ii="heart",ri="heart-broken",oi="heat-grid",ai="heatmap",si="help",ci="helper-management",li="highlight",ui="history",hi="home",di="horizontal-bar-chart",fi="horizontal-bar-chart-asc",pi="horizontal-bar-chart-desc",mi="horizontal-distribution",gi="id-number",vi="image-rotate-left",_i="image-rotate-right",bi="import",yi="inbox",wi="inbox-filtered",Oi="inbox-geo",Ci="inbox-search",Ei="inbox-update",Ai="info-sign",xi="inheritance",Ti="inherited-group",Si="inner-join",Di="insert",Pi="intersection",Ii="ip-address",Mi="issue",Ri="issue-closed",Li="issue-new",ji="italic",Fi="join-table",Ni="key",zi="key-backspace",ki="key-command",Bi="key-control",Hi="key-delete",Vi="key-enter",Ui="key-escape",Wi="key-option",Gi="key-shift",qi="key-tab",Yi="known-vehicle",$i="lab-test",Xi="label",Ki="layer",Qi="layers",Zi="layout",Ji="layout-auto",er="layout-balloon",tr="layout-circle",nr="layout-grid",ir="layout-group-by",rr="layout-hierarchy",or="layout-linear",ar="layout-skew-grid",sr="layout-sorted-clusters",cr="learning",lr="left-join",ur="less-than",hr="less-than-or-equal-to",dr="lifesaver",fr="lightbulb",pr="link",mr="list",gr="list-columns",vr="list-detail-view",_r="locate",br="lock",yr="log-in",wr="log-out",Or="manual",Cr="manually-entered-data",Er="map",Ar="map-create",xr="map-marker",Tr="maximize",Sr="media",Dr="menu",Pr="menu-closed",Ir="menu-open",Mr="merge-columns",Rr="merge-links",Lr="minimize",jr="minus",Fr="mobile-phone",Nr="mobile-video",zr="modal",kr="modal-filled",Br="moon",Hr="more",Vr="mountain",Ur="move",Wr="mugshot",Gr="multi-select",qr="music",Yr="new-drawing",$r="new-grid-item",Xr="new-layer",Kr="new-layers",Qr="new-link",Zr="new-object",Jr="new-person",eo="new-prescription",to="new-text-box",no="ninja",io="not-equal-to",ro="notifications",oo="notifications-updated",ao="numbered-list",so="numerical",co="office",lo="offline",uo="oil-field",ho="one-column",fo="outdated",po="page-layout",mo="panel-stats",go="panel-table",vo="paperclip",_o="paragraph",bo="path",yo="path-search",wo="pause",Oo="people",Co="percentage",Eo="person",Ao="phone",xo="pie-chart",To="pin",So="pivot",Do="pivot-table",Po="play",Io="plus",Mo="polygon-filter",Ro="power",Lo="predictive-analysis",jo="prescription",Fo="presentation",No="print",zo="projects",ko="properties",Bo="property",Ho="publish-function",Vo="pulse",Uo="random",Wo="record",Go="redo",qo="refresh",Yo="regression-chart",$o="remove",Xo="remove-column",Ko="remove-column-left",Qo="remove-column-right",Zo="remove-row-bottom",Jo="remove-row-top",ea="repeat",ta="reset",na="resolve",ia="rig",ra="right-join",oa="ring",aa="rotate-document",sa="rotate-page",ca="route",la="satellite",ua="saved",ha="scatter-plot",da="search",fa="search-around",pa="search-template",ma="search-text",ga="segmented-control",va="select",_a="selection",ba="send-message",ya="send-to",wa="send-to-graph",Oa="send-to-map",Ca="series-add",Ea="series-configuration",Aa="series-derived",xa="series-filtered",Ta="series-search",Sa="settings",Da="share",Pa="shield",Ia="shop",Ma="shopping-cart",Ra="signal-search",La="sim-card",ja="slash",Fa="small-cross",Na="small-minus",za="small-plus",ka="small-tick",Ba="snowflake",Ha="social-media",Va="sort",Ua="sort-alphabetical",Wa="sort-alphabetical-desc",Ga="sort-asc",qa="sort-desc",Ya="sort-numerical",$a="sort-numerical-desc",Xa="split-columns",Ka="square",Qa="stacked-chart",Za="star",Ja="star-empty",es="step-backward",ts="step-chart",ns="step-forward",is="stop",rs="stopwatch",os="strikethrough",as="style",ss="swap-horizontal",cs="swap-vertical",ls="symbol-circle",us="symbol-cross",hs="symbol-diamond",ds="symbol-square",fs="symbol-triangle-down",ps="symbol-triangle-up",ms="tag",gs="take-action",vs="taxi",_s="text-highlight",bs="th",ys="th-derived",ws="th-disconnect",Os="th-filtered",Cs="th-list",Es="thumbs-down",As="thumbs-up",xs="tick",Ts="tick-circle",Ss="time",Ds="timeline-area-chart",Ps="timeline-bar-chart",Is="timeline-events",Ms="timeline-line-chart",Rs="tint",Ls="torch",js="tractor",Fs="train",Ns="translate",zs="trash",ks="tree",Bs="trending-down",Hs="trending-up",Vs="truck",Us="two-columns",Ws="unarchive",Gs="underline",qs="undo",Ys="ungroup-objects",$s="unknown-vehicle",Xs="unlock",Ks="unpin",Qs="unresolve",Zs="updated",Js="upload",ec="user",tc="variable",nc="vertical-bar-chart-asc",ic="vertical-bar-chart-desc",rc="vertical-distribution",oc="video",ac="virus",sc="volume-down",cc="volume-off",lc="volume-up",uc="walk",hc="warning-sign",dc="waterfall-chart",fc="widget",pc="widget-button",mc="widget-footer",gc="widget-header",vc="wrench",_c="zoom-in",bc="zoom-out",yc="zoom-to-fit"},function(e,t,n){"use strict";function i(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";e.exports=function(e){return-2===e||-1===e||32===e}},function(e,t,n){"use strict";var i=n(524);e.exports=function(e,t,n,r){var o,a=e.length,s=0;if(t=t<0?-t>a?0:a+t:t>a?a:t,n=n>0?n:0,r.length<1e4)(o=Array.from(r)).unshift(t,n),i.apply(e,o);else for(n&&i.apply(e,[t,n]);s<r.length;)(o=r.slice(s,s+1e4)).unshift(t,0),i.apply(e,o),s+=1e4,t+=1e4}},function(e,t,n){"use strict";e.exports=function(e){return e<0||32===e}},function(e,t,n){"use strict";var i=n(42),r=n(1),o=n(0),a=n(3);function s(e,t){var n;return"undefined"!==typeof document&&(n=document),s._implementation(e,t,n)}s._implementation=function(e,t,n){if(!Object(o.a)(e))throw new a.a("relative uri is required.");if(!Object(o.a)(t)){if("undefined"===typeof n)return e;t=Object(r.a)(n.baseURI,n.location.href)}var s=new i.a(t);return new i.a(e).resolve(s).toString()},t.a=s},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(27),u=n(40),h=n(198),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.label,n=e.className,r=Object(i.d)(e,["label","className"]),s=o()(c.Classes.HOTKEY,n);return a.createElement("div",{className:s},a.createElement("div",{className:c.Classes.HOTKEY_LABEL},t),a.createElement(h.a,Object(i.a)({},r)))},t.prototype.validateProps=function(e){if(!0!==e.global&&null==e.group)throw new Error("non-global <Hotkey>s must define a group")},t.displayName=l.a+".Hotkey",t.defaultProps={allowInInput:!1,disabled:!1,global:!1,preventDefault:!1,stopPropagation:!1},t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){var i=n(280),r=n(489),o=n(490),a=n(495),s=n(496),c=n(498),l=Date.prototype.getTime;function u(e,t,n){var f=n||{};return!!(f.strict?o(e,t):e===t)||(!e||!t||"object"!==typeof e&&"object"!==typeof t?f.strict?o(e,t):e==t:function(e,t,n){var o,f;if(typeof e!==typeof t)return!1;if(h(e)||h(t))return!1;if(e.prototype!==t.prototype)return!1;if(r(e)!==r(t))return!1;var p=a(e),m=a(t);if(p!==m)return!1;if(p||m)return e.source===t.source&&s(e)===s(t);if(c(e)&&c(t))return l.call(e)===l.call(t);var g=d(e),v=d(t);if(g!==v)return!1;if(g||v){if(e.length!==t.length)return!1;for(o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0}if(typeof e!==typeof t)return!1;try{var _=i(e),b=i(t)}catch(y){return!1}if(_.length!==b.length)return!1;for(_.sort(),b.sort(),o=_.length-1;o>=0;o--)if(_[o]!=b[o])return!1;for(o=_.length-1;o>=0;o--)if(f=_[o],!u(e[f],t[f],n))return!1;return!0}(e,t,f))}function h(e){return null===e||void 0===e}function d(e){return!(!e||"object"!==typeof e||"number"!==typeof e.length)&&("function"===typeof e.copy&&"function"===typeof e.slice&&!(e.length>0&&"number"!==typeof e[0]))}e.exports=u},function(e,t,n){"use strict";n.d(t,"b",(function(){return f})),n.d(t,"c",(function(){return p})),n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(54),c=n(9),l=n(187),u=n(98),h=n(197),d=new(function(){function e(){var e=this;this.componentProps={globalHotkeysGroup:"Global hotkeys"},this.hotkeysQueue=[],this.isDialogShowing=!1,this.show=function(){e.isDialogShowing=!0,e.render()},this.hide=function(){e.isDialogShowing=!1,e.render()}}return e.prototype.render=function(){null==this.container&&(this.container=this.getContainer()),s.render(this.renderComponent(),this.container)},e.prototype.unmount=function(){null!=this.container&&(s.unmountComponentAtNode(this.container),this.container.remove(),delete this.container)},e.prototype.enqueueHotkeysForDisplay=function(e){this.hotkeysQueue.push(e),window.clearTimeout(this.showTimeoutToken),this.showTimeoutToken=window.setTimeout(this.show,10)},e.prototype.hideAfterDelay=function(){window.clearTimeout(this.hideTimeoutToken),this.hideTimeoutToken=window.setTimeout(this.hide,10)},e.prototype.isShowing=function(){return this.isDialogShowing},e.prototype.getContainer=function(){return null==this.container&&(this.container=document.createElement("div"),this.container.classList.add(c.Classes.PORTAL),document.body.appendChild(this.container)),this.container},e.prototype.renderComponent=function(){return a.createElement(l.Dialog,Object(i.a)({},this.componentProps,{className:o()(c.Classes.HOTKEY_DIALOG,this.componentProps.className),isOpen:this.isDialogShowing,onClose:this.hide}),a.createElement("div",{className:c.Classes.DIALOG_BODY},this.renderHotkeys()))},e.prototype.renderHotkeys=function(){var e=this,t=this.emptyHotkeyQueue().map((function(t,n){var r=!0===t.global&&null==t.group?e.componentProps.globalHotkeysGroup:t.group;return a.createElement(u.a,Object(i.a)({key:n},t,{group:r}))}));return a.createElement(h.a,null,t)},e.prototype.emptyHotkeyQueue=function(){var e=this.hotkeysQueue.reduce((function(e,t){return e.concat(t)}),[]);return this.hotkeysQueue.length=0,e},e}());function f(){return d.isShowing()}function p(e){d.enqueueHotkeysForDisplay(e)}function m(){d.hideAfterDelay()}},,function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={ZERO:0,ONE:1,TWO:2,THREE:3,FOUR:4}},function(e,t,n){"use strict";(function(e){n.d(t,"e",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return s})),n.d(t,"d",(function(){return c}));var i=n(35);function r(t){return"undefined"!==typeof e&&Object({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,REACT_APP_CATEHUB_ENDPOINT:"https://dev.catehub.brockmann-consult.de/api/v2/"})&&"production"===t}function o(e,t){return void 0===e&&(e=[]),void 0===t&&(t=[]),e.length-t.length}function a(e,t,n){return void 0===n&&(n=1e-5),Math.abs(e-t)<=n}function s(e,t,n){if(null==e)return e;if(n<t)throw new Error(i.a);return Math.min(Math.max(e,t),n)}function c(e){if(!isFinite(e))return 0;for(var t=1,n=0;Math.round(e*t)/t!==e;)t*=10,n++;return n}}).call(this,n(85))},function(e,t){"function"===typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},function(e,t,n){"use strict";var i=n(166);e.exports=function(e){return function(t){return e.test(i(t))}}},,function(e,t,n){"use strict";var i=n(162),r=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=h;var o=Object.create(n(141));o.inherits=n(104);var a=n(261),s=n(220);o.inherits(h,a);for(var c=r(s.prototype),l=0;l<c.length;l++){var u=c[l];h.prototype[u]||(h.prototype[u]=s.prototype[u])}function h(e){if(!(this instanceof h))return new h(e);a.call(this,e),s.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",d)}function d(){this.allowHalfOpen||this._writableState.ended||i.nextTick(f,this)}function f(e){e.end()}Object.defineProperty(h.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(h.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),h.prototype._destroy=function(e,t){this.push(null),this.end(),i.nextTick(t,e)}},function(e,t,n){"use strict";var i=n(143);e.exports=function(e){return i({},e)}},function(e,t,n){var i=n(147),r=n(637),o=n(638),a=i?i.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?r(e):o(e)}},function(e,t,n){var i=n(660),r=n(663);e.exports=function(e,t){var n=r(e,t);return i(n)?n:void 0}},function(e,t,n){"use strict";function i(e){return null!=e&&"undefined"!==typeof e.current}function r(e){return e&&e.current?e.current:e}n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(2),o=n(54),a=n(24),s=n(399),c=n(40),l=n(27),u=n(49),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.element=null,t.observer=new s.a((function(e){return Object(u.b)(t.props.onResize,e)})),t}return Object(i.c)(t,e),t.prototype.render=function(){return r.Children.only(this.props.children)},t.prototype.componentDidMount=function(){this.observeElement()},t.prototype.componentDidUpdate=function(e){this.observeElement(this.props.observeParents!==e.observeParents)},t.prototype.componentWillUnmount=function(){this.observer.disconnect()},t.prototype.observeElement=function(e){void 0===e&&(e=!1);var t=this.getElement();if(t instanceof Element){if((t!==this.element||e)&&(this.observer.disconnect(),this.element=t,this.observer.observe(t),this.props.observeParents))for(var n=t.parentElement;null!=n;)this.observer.observe(n),n=n.parentElement}else this.observer.disconnect()},t.prototype.getElement=function(){try{return Object(o.findDOMNode)(this)}catch(e){return null}},t.displayName=l.a+".ResizeSensor",t=Object(i.b)([a.polyfill],t)}(c.a)},function(e,t,n){"use strict";var i=n(0),r=n(184);function o(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,"string"===typeof this.responseHeaders&&(this.responseHeaders=Object(r.a)(this.responseHeaders))}o.prototype.toString=function(){var e="Request has failed.";return Object(i.a)(this.statusCode)&&(e+=" Status Code: "+this.statusCode),e},t.a=o},function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return r}));var i={FULL:"full",START:"start",END:"end"},r={LOCK:"lock",PUSH:"push",NONE:"none"}},function(e,t,n){"use strict";n.d(t,"d",(function(){return A})),n.d(t,"c",(function(){return T})),n.d(t,"b",(function(){return D})),n.d(t,"a",(function(){return M}));var i=n(397),r="object"==typeof self&&self&&self.Object===Object&&self,o=(i.a||r||Function("return this")()).Symbol,a=Object.prototype,s=a.hasOwnProperty,c=a.toString,l=o?o.toStringTag:void 0;var u=function(e){var t=s.call(e,l),n=e[l];try{e[l]=void 0;var i=!0}catch(o){}var r=c.call(e);return i&&(t?e[l]=n:delete e[l]),r},h=Object.prototype.toString;var d=function(e){return h.call(e)},f=o?o.toStringTag:void 0;var p=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":f&&f in Object(e)?u(e):d(e)};var m=function(e,t){return function(n){return e(t(n))}}(Object.getPrototypeOf,Object);var g=function(e){return null!=e&&"object"==typeof e},v=Function.prototype,_=Object.prototype,b=v.toString,y=_.hasOwnProperty,w=b.call(Object);var O=function(e){if(!g(e)||"[object Object]"!=p(e))return!1;var t=m(e);if(null===t)return!0;var n=y.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&b.call(n)==w},C=n(252),E="@@redux/INIT";function A(e,t,n){var i;if("function"===typeof t&&"undefined"===typeof n&&(n=t,t=void 0),"undefined"!==typeof n){if("function"!==typeof n)throw new Error("Expected the enhancer to be a function.");return n(A)(e,t)}if("function"!==typeof e)throw new Error("Expected the reducer to be a function.");var r=e,o=t,a=[],s=a,c=!1;function l(){s===a&&(s=a.slice())}function u(){return o}function h(e){if("function"!==typeof e)throw new Error("Expected listener to be a function.");var t=!0;return l(),s.push(e),function(){if(t){t=!1,l();var n=s.indexOf(e);s.splice(n,1)}}}function d(e){if(!O(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"===typeof e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(c)throw new Error("Reducers may not dispatch actions.");try{c=!0,o=r(o,e)}finally{c=!1}for(var t=a=s,n=0;n<t.length;n++){(0,t[n])()}return e}return d({type:E}),(i={dispatch:d,subscribe:h,getState:u,replaceReducer:function(e){if("function"!==typeof e)throw new Error("Expected the nextReducer to be a function.");r=e,d({type:E})}})[C.a]=function(){var e,t=h;return(e={subscribe:function(e){if("object"!==typeof e)throw new TypeError("Expected the observer to be an object.");function n(){e.next&&e.next(u())}return n(),{unsubscribe:t(n)}}})[C.a]=function(){return this},e},i}function x(e,t){var n=t&&t.type;return"Given action "+(n&&'"'+n.toString()+'"'||"an action")+', reducer "'+e+'" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.'}function T(e){for(var t=Object.keys(e),n={},i=0;i<t.length;i++){var r=t[i];0,"function"===typeof e[r]&&(n[r]=e[r])}var o=Object.keys(n);var a=void 0;try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if("undefined"===typeof n(void 0,{type:E}))throw new Error('Reducer "'+t+"\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.");if("undefined"===typeof n(void 0,{type:"@@redux/PROBE_UNKNOWN_ACTION_"+Math.random().toString(36).substring(7).split("").join(".")}))throw new Error('Reducer "'+t+"\" returned undefined when probed with a random type. Don't try to handle "+E+' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.')}))}(n)}catch(s){a=s}return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(a)throw a;for(var i=!1,r={},s=0;s<o.length;s++){var c=o[s],l=n[c],u=e[c],h=l(u,t);if("undefined"===typeof h){var d=x(c,t);throw new Error(d)}r[c]=h,i=i||h!==u}return i?r:e}}function S(e,t){return function(){return t(e.apply(void 0,arguments))}}function D(e,t){if("function"===typeof e)return S(e,t);if("object"!==typeof e||null===e)throw new Error("bindActionCreators expected an object or a function, instead received "+(null===e?"null":typeof e)+'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');for(var n=Object.keys(e),i={},r=0;r<n.length;r++){var o=n[r],a=e[o];"function"===typeof a&&(i[o]=S(a,t))}return i}function P(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}var I=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function M(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(n,i,r){var o,a=e(n,i,r),s=a.dispatch,c={getState:a.getState,dispatch:function(e){return s(e)}};return o=t.map((function(e){return e(c)})),s=P.apply(void 0,o)(a.dispatch),I({},a,{dispatch:s})}}}},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},n.apply(this,arguments)}e.exports=n},function(e,t,n){"use strict";var i=n(340),r=n(338),o=n(341);e.exports=function(e){var t,n,a=e.space,s=e.mustUseProperty||[],c=e.attributes||{},l=e.properties,u=e.transform,h={},d={};for(t in l)n=new o(t,u(c,t),l[t],a),-1!==s.indexOf(t)&&(n.mustUseProperty=!0),h[t]=n,d[i(t)]=t,d[i(n.attribute)]=t;return new r(h,d,a)}},function(e,t,n){var i=n(239),r=n(235);e.exports=function(e){return null!=e&&r(e.length)&&!i(e)}},function(e,t,n){"use strict";var i=n(42),r=n(0),o=n(3);t.a=function(e){if(!Object(r.a)(e))throw new o.a("uri is required.");var t=new i.a(e);t.normalize();var n=t.path,a=n.lastIndexOf("/");return-1!==a&&(n=n.substr(a+1)),a=n.lastIndexOf("."),n=-1===a?"":n.substr(a+1)}},function(e,t,n){"use strict";var i=n(4),r=/^blob:/i;t.a=function(e){return i.a.typeOf.string("uri",e),r.test(e)}},function(e,t,n){"use strict";var i,r=n(0);t.a=function(e){Object(r.a)(i)||(i=document.createElement("a")),i.href=window.location.href;var t=i.host,n=i.protocol;return i.href=e,i.href=i.href,n!==i.protocol||t!==i.host}},function(e,t,n){"use strict";var i=n(4),r=/^data:/i;t.a=function(e){return i.a.typeOf.string("uri",e),r.test(e)}},function(e,t,n){"use strict";var i=n(12);t.a=function(e){var t=i.a.defer(),n=document.createElement("script");n.async=!0,n.src=e;var r=document.getElementsByTagName("head")[0];return n.onload=function(){n.onload=void 0,r.removeChild(n),t.resolve()},n.onerror=function(e){t.reject(e)},r.appendChild(n),t.promise}},function(e,t,n){"use strict";var i=n(0),r=n(3);t.a=function(e){if(!Object(i.a)(e))throw new r.a("obj is required.");var t="";for(var n in e)if(e.hasOwnProperty(n)){var o=e[n],a=encodeURIComponent(n)+"=";if(Array.isArray(o))for(var s=0,c=o.length;s<c;++s)t+=a+encodeURIComponent(o[s])+"&";else t+=a+encodeURIComponent(o)+"&"}return t=t.slice(0,-1)}},function(module,__webpack_exports__,__webpack_require__){"use strict";var tmp={};!function(global,undefined){var modules,cache,entries;modules={1:[function(e,t,n){t.exports=function(e,t){for(var n=[],i=2;i<arguments.length;)n.push(arguments[i++]);var r=!0;return new Promise((function(i,o){n.push((function(e){if(r)if(r=!1,e)o(e);else{for(var t=[],n=1;n<arguments.length;)t.push(arguments[n++]);i.apply(null,t)}}));try{e.apply(t||this,n)}catch(a){r&&(r=!1,o(a))}}))}},{}],2:[function(e,t,n){var i=n;i.length=function(e){var t=e.length;if(!t)return 0;for(var n=0;--t%4>1&&"="===e.charAt(t);)++n;return Math.ceil(3*e.length)/4-n};for(var r=new Array(64),o=new Array(123),a=0;a<64;)o[r[a]=a<26?a+65:a<52?a+71:a<62?a-4:a-59|43]=a++;i.encode=function(e,t,n){for(var i,o=[],a=0,s=0;t<n;){var c=e[t++];switch(s){case 0:o[a++]=r[c>>2],i=(3&c)<<4,s=1;break;case 1:o[a++]=r[i|c>>4],i=(15&c)<<2,s=2;break;case 2:o[a++]=r[i|c>>6],o[a++]=r[63&c],s=0}}return s&&(o[a++]=r[i],o[a]=61,1===s&&(o[a+1]=61)),String.fromCharCode.apply(String,o)},i.decode=function(e,t,n){for(var i,r=n,a=0,s=0;s<e.length;){var c=e.charCodeAt(s++);if(61===c&&a>1)break;if((c=o[c])===undefined)throw Error("invalid encoding");switch(a){case 0:i=c,a=1;break;case 1:t[n++]=i<<2|(48&c)>>4,i=c,a=2;break;case 2:t[n++]=(15&i)<<4|(60&c)>>2,i=c,a=3;break;case 3:t[n++]=(3&i)<<6|c,a=0}}if(1===a)throw Error("invalid encoding");return n-r},i.test=function(e){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},{}],3:[function(e,t,n){function i(){this._listeners={}}t.exports=i,i.prototype.on=function(e,t,n){return(this._listeners[e]||(this._listeners[e]=[])).push({fn:t,ctx:n||this}),this},i.prototype.off=function(e,t){if(e===undefined)this._listeners={};else if(t===undefined)this._listeners[e]=[];else for(var n=this._listeners[e],i=0;i<n.length;)n[i].fn===t?n.splice(i,1):++i;return this},i.prototype.emit=function(e){var t=this._listeners[e];if(t){for(var n=[],i=1;i<arguments.length;)n.push(arguments[i++]);for(i=0;i<t.length;)t[i].fn.apply(t[i++].ctx,n)}return this}},{}],4:[function(require,module,exports){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},{}],5:[function(e,t,n){t.exports=function(e,t,n){var i=n||8192,r=i>>>1,o=null,a=i;return function(n){if(n<1||n>r)return e(n);a+n>i&&(o=e(i),a=0);var s=t.call(o,a,a+=n);return 7&a&&(a=1+(7|a)),s}}},{}],6:[function(e,t,n){var i=n;i.length=function(e){for(var t=0,n=0,i=0;i<e.length;++i)(n=e.charCodeAt(i))<128?t+=1:n<2048?t+=2:55296===(64512&n)&&56320===(64512&e.charCodeAt(i+1))?(++i,t+=4):t+=3;return t},i.read=function(e,t,n){if(n-t<1)return"";for(var i,r=null,o=[],a=0;t<n;)(i=e[t++])<128?o[a++]=i:i>191&&i<224?o[a++]=(31&i)<<6|63&e[t++]:i>239&&i<365?(i=((7&i)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,o[a++]=55296+(i>>10),o[a++]=56320+(1023&i)):o[a++]=(15&i)<<12|(63&e[t++])<<6|63&e[t++],a>8191&&((r||(r=[])).push(String.fromCharCode.apply(String,o)),a=0);return r?(a&&r.push(String.fromCharCode.apply(String,o.slice(0,a))),r.join("")):String.fromCharCode.apply(String,o.slice(0,a))},i.write=function(e,t,n){for(var i,r,o=n,a=0;a<e.length;++a)(i=e.charCodeAt(a))<128?t[n++]=i:i<2048?(t[n++]=i>>6|192,t[n++]=63&i|128):55296===(64512&i)&&56320===(64512&(r=e.charCodeAt(a+1)))?(i=65536+((1023&i)<<10)+(1023&r),++a,t[n++]=i>>18|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=63&i|128):(t[n++]=i>>12|224,t[n++]=i>>6&63|128,t[n++]=63&i|128);return n-o}},{}],7:[function(e,t,n){var i=n;function r(){i.Reader._configure(i.BufferReader),i.util._configure()}i.build="minimal",i.roots={},i.Writer=e(14),i.BufferWriter=e(15),i.Reader=e(8),i.BufferReader=e(9),i.util=e(13),i.rpc=e(10),i.configure=r,i.Writer._configure(i.BufferWriter),r()},{10:10,13:13,14:14,15:15,8:8,9:9}],8:[function(e,t,n){t.exports=c;var i,r=e(13),o=r.LongBits,a=r.utf8;function s(e,t){return RangeError("index out of range: "+e.pos+" + "+(t||1)+" > "+e.len)}function c(e){this.buf=e,this.pos=0,this.len=e.length}var l="undefined"!==typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new c(e);throw Error("illegal buffer")}:function(e){if(Array.isArray(e))return new c(e);throw Error("illegal buffer")};function u(){var e=new o(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw s(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw s(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}function h(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function d(){if(this.pos+8>this.len)throw s(this,8);return new o(h(this.buf,this.pos+=4),h(this.buf,this.pos+=4))}c.create=r.Buffer?function(e){return(c.create=function(e){return r.Buffer.isBuffer(e)?new i(e):l(e)})(e)}:l,c.prototype._slice=r.Array.prototype.subarray||r.Array.prototype.slice,c.prototype.uint32=function(){var e=4294967295;return function(){if(e=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return e;if(e=(e|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return e;if((this.pos+=5)>this.len)throw this.pos=this.len,s(this,10);return e}}(),c.prototype.int32=function(){return 0|this.uint32()},c.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},c.prototype.bool=function(){return 0!==this.uint32()},c.prototype.fixed32=function(){if(this.pos+4>this.len)throw s(this,4);return h(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw s(this,4);return 0|h(this.buf,this.pos+=4)};var f="undefined"!==typeof Float32Array?function(){var e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=-0,t[3]?function(n,i){return t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],t[3]=n[i+3],e[0]}:function(n,i){return t[0]=n[i+3],t[1]=n[i+2],t[2]=n[i+1],t[3]=n[i],e[0]}}():function(e,t){var n=h(e,t+4),i=2*(n>>31)+1,r=n>>>23&255,o=8388607&n;return 255===r?o?NaN:i*(1/0):0===r?1401298464324817e-60*i*o:i*Math.pow(2,r-150)*(o+8388608)};c.prototype.float=function(){if(this.pos+4>this.len)throw s(this,4);var e=f(this.buf,this.pos);return this.pos+=4,e};var p="undefined"!==typeof Float64Array?function(){var e=new Float64Array(1),t=new Uint8Array(e.buffer);return e[0]=-0,t[7]?function(n,i){return t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],t[3]=n[i+3],t[4]=n[i+4],t[5]=n[i+5],t[6]=n[i+6],t[7]=n[i+7],e[0]}:function(n,i){return t[0]=n[i+7],t[1]=n[i+6],t[2]=n[i+5],t[3]=n[i+4],t[4]=n[i+3],t[5]=n[i+2],t[6]=n[i+1],t[7]=n[i],e[0]}}():function(e,t){var n=h(e,t+4),i=h(e,t+8),r=2*(i>>31)+1,o=i>>>20&2047,a=4294967296*(1048575&i)+n;return 2047===o?a?NaN:r*(1/0):0===o?5e-324*r*a:r*Math.pow(2,o-1075)*(a+4503599627370496)};c.prototype.double=function(){if(this.pos+8>this.len)throw s(this,4);var e=p(this.buf,this.pos);return this.pos+=8,e},c.prototype.bytes=function(){var e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw s(this,e);return this.pos+=e,t===n?new this.buf.constructor(0):this._slice.call(this.buf,t,n)},c.prototype.string=function(){var e=this.bytes();return a.read(e,0,e.length)},c.prototype.skip=function(e){if("number"===typeof e){if(this.pos+e>this.len)throw s(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw s(this)}while(128&this.buf[this.pos++]);return this},c.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!==(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+e+" at offset "+this.pos)}return this},c._configure=function(e){i=e;var t=r.Long?"toLong":"toNumber";r.merge(c.prototype,{int64:function(){return u.call(this)[t](!1)},uint64:function(){return u.call(this)[t](!0)},sint64:function(){return u.call(this).zzDecode()[t](!1)},fixed64:function(){return d.call(this)[t](!0)},sfixed64:function(){return d.call(this)[t](!1)}})}},{13:13}],9:[function(e,t,n){t.exports=o;var i=e(8);(o.prototype=Object.create(i.prototype)).constructor=o;var r=e(13);function o(e){i.call(this,e)}r.Buffer&&(o.prototype._slice=r.Buffer.prototype.slice),o.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len))}},{13:13,8:8}],10:[function(e,t,n){n.Service=e(11)},{11:11}],11:[function(e,t,n){t.exports=r;var i=e(13);function r(e,t,n){if("function"!==typeof e)throw TypeError("rpcImpl must be a function");i.EventEmitter.call(this),this.rpcImpl=e,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(n)}(r.prototype=Object.create(i.EventEmitter.prototype)).constructor=r,r.prototype.rpcCall=function e(t,n,r,o,a){if(!o)throw TypeError("request must be specified");var s=this;if(!a)return i.asPromise(e,s,t,n,r,o);if(!s.rpcImpl)return setTimeout((function(){a(Error("already ended"))}),0),undefined;try{return s.rpcImpl(t,n[s.requestDelimited?"encodeDelimited":"encode"](o).finish(),(function(e,n){if(e)return s.emit("error",e,t),a(e);if(null===n)return s.end(!0),undefined;if(!(n instanceof r))try{n=r[s.responseDelimited?"decodeDelimited":"decode"](n)}catch(e){return s.emit("error",e,t),a(e)}return s.emit("data",n,t),a(null,n)}))}catch(c){return s.emit("error",c,t),setTimeout((function(){a(c)}),0),undefined}},r.prototype.end=function(e){return this.rpcImpl&&(e||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{13:13}],12:[function(e,t,n){t.exports=r;var i=e(13);function r(e,t){this.lo=e>>>0,this.hi=t>>>0}var o=r.zero=new r(0,0);o.toNumber=function(){return 0},o.zzEncode=o.zzDecode=function(){return this},o.length=function(){return 1};var a=r.zeroHash="\0\0\0\0\0\0\0\0";r.fromNumber=function(e){if(0===e)return o;var t=e<0;t&&(e=-e);var n=e>>>0,i=(e-n)/4294967296>>>0;return t&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new r(n,i)},r.from=function(e){if("number"===typeof e)return r.fromNumber(e);if(i.isString(e)){if(!i.Long)return r.fromNumber(parseInt(e,10));e=i.Long.fromString(e)}return e.low||e.high?new r(e.low>>>0,e.high>>>0):o},r.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,n=~this.hi>>>0;return t||(n=n+1>>>0),-(t+4294967296*n)}return this.lo+4294967296*this.hi},r.prototype.toLong=function(e){return i.Long?new i.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var s=String.prototype.charCodeAt;r.fromHash=function(e){return e===a?o:new r((s.call(e,0)|s.call(e,1)<<8|s.call(e,2)<<16|s.call(e,3)<<24)>>>0,(s.call(e,4)|s.call(e,5)<<8|s.call(e,6)<<16|s.call(e,7)<<24)>>>0)},r.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},r.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},r.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},r.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}},{13:13}],13:[function(e,t,n){var i=n;function r(e,t,n){for(var i=Object.keys(t),r=0;r<i.length;++r)e[i[r]]!==undefined&&n||(e[i[r]]=t[i[r]]);return e}function o(e){function t(e,n){if(!(this instanceof t))return new t(e,n);Object.defineProperty(this,"message",{get:function(){return e}}),Error.captureStackTrace?Error.captureStackTrace(this,t):Object.defineProperty(this,"stack",{value:(new Error).stack||""}),n&&r(this,n)}return(t.prototype=Object.create(Error.prototype)).constructor=t,Object.defineProperty(t.prototype,"name",{get:function(){return e}}),t.prototype.toString=function(){return this.name+": "+this.message},t}i.asPromise=e(1),i.base64=e(2),i.EventEmitter=e(3),i.inquire=e(4),i.utf8=e(6),i.pool=e(5),i.LongBits=e(12),i.emptyArray=Object.freeze?Object.freeze([]):[],i.emptyObject=Object.freeze?Object.freeze({}):{},i.isNode=Boolean(global.process&&global.process.versions&&global.process.versions.node),i.isInteger=Number.isInteger||function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e},i.isString=function(e){return"string"===typeof e||e instanceof String},i.isObject=function(e){return e&&"object"===typeof e},i.Buffer=function(){try{var e=i.inquire("buffer").Buffer;return e.prototype.utf8Write?e:null}catch(t){return null}}(),i._Buffer_from=null,i._Buffer_allocUnsafe=null,i.newBuffer=function(e){return"number"===typeof e?i.Buffer?i._Buffer_allocUnsafe(e):new i.Array(e):i.Buffer?i._Buffer_from(e):"undefined"===typeof Uint8Array?e:new Uint8Array(e)},i.Array="undefined"!==typeof Uint8Array?Uint8Array:Array,i.Long=global.dcodeIO&&global.dcodeIO.Long||i.inquire("long"),i.key2Re=/^true|false|0|1$/,i.key32Re=/^-?(?:0|[1-9][0-9]*)$/,i.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,i.longToHash=function(e){return e?i.LongBits.from(e).toHash():i.LongBits.zeroHash},i.longFromHash=function(e,t){var n=i.LongBits.fromHash(e);return i.Long?i.Long.fromBits(n.lo,n.hi,t):n.toNumber(Boolean(t))},i.merge=r,i.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},i.newError=o,i.ProtocolError=o("ProtocolError"),i.oneOfGetter=function(e){for(var t={},n=0;n<e.length;++n)t[e[n]]=1;return function(){for(var e=Object.keys(this),n=e.length-1;n>-1;--n)if(1===t[e[n]]&&this[e[n]]!==undefined&&null!==this[e[n]])return e[n]}},i.oneOfSetter=function(e){return function(t){for(var n=0;n<e.length;++n)e[n]!==t&&delete this[e[n]]}},i.lazyResolve=function(e,t){for(var n=0;n<t.length;++n)for(var i=Object.keys(t[n]),r=0;r<i.length;++r){for(var o=t[n][i[r]].split("."),a=e;o.length;)a=a[o.shift()];t[n][i[r]]=a}},i.toJSONOptions={longs:String,enums:String,bytes:String},i._configure=function(){var e=i.Buffer;e?(i._Buffer_from=e.from!==Uint8Array.from&&e.from||function(t,n){return new e(t,n)},i._Buffer_allocUnsafe=e.allocUnsafe||function(t){return new e(t)}):i._Buffer_from=i._Buffer_allocUnsafe=null}},{1:1,12:12,2:2,3:3,4:4,5:5,6:6}],14:[function(e,t,n){t.exports=h;var i,r=e(13),o=r.LongBits,a=r.base64,s=r.utf8;function c(e,t,n){this.fn=e,this.len=t,this.next=undefined,this.val=n}function l(){}function u(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}function h(){this.len=0,this.head=new c(l,0,0),this.tail=this.head,this.states=null}function d(e,t,n){t[n]=255&e}function f(e,t){this.len=e,this.next=undefined,this.val=t}function p(e,t,n){for(;e.hi;)t[n++]=127&e.lo|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[n++]=127&e.lo|128,e.lo=e.lo>>>7;t[n++]=e.lo}function m(e,t,n){t[n++]=255&e,t[n++]=e>>>8&255,t[n++]=e>>>16&255,t[n]=e>>>24}h.create=r.Buffer?function(){return(h.create=function(){return new i})()}:function(){return new h},h.alloc=function(e){return new r.Array(e)},r.Array!==Array&&(h.alloc=r.pool(h.alloc,r.Array.prototype.subarray)),h.prototype.push=function(e,t,n){return this.tail=this.tail.next=new c(e,t,n),this.len+=t,this},f.prototype=Object.create(c.prototype),f.prototype.fn=function(e,t,n){for(;e>127;)t[n++]=127&e|128,e>>>=7;t[n]=e},h.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new f((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},h.prototype.int32=function(e){return e<0?this.push(p,10,o.fromNumber(e)):this.uint32(e)},h.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},h.prototype.uint64=function(e){var t=o.from(e);return this.push(p,t.length(),t)},h.prototype.int64=h.prototype.uint64,h.prototype.sint64=function(e){var t=o.from(e).zzEncode();return this.push(p,t.length(),t)},h.prototype.bool=function(e){return this.push(d,1,e?1:0)},h.prototype.fixed32=function(e){return this.push(m,4,e>>>0)},h.prototype.sfixed32=h.prototype.fixed32,h.prototype.fixed64=function(e){var t=o.from(e);return this.push(m,4,t.lo).push(m,4,t.hi)},h.prototype.sfixed64=h.prototype.fixed64;var g="undefined"!==typeof Float32Array?function(){var e=new Float32Array(1),t=new Uint8Array(e.buffer);return e[0]=-0,t[3]?function(n,i,r){e[0]=n,i[r++]=t[0],i[r++]=t[1],i[r++]=t[2],i[r]=t[3]}:function(n,i,r){e[0]=n,i[r++]=t[3],i[r++]=t[2],i[r++]=t[1],i[r]=t[0]}}():function(e,t,n){var i=e<0?1:0;if(i&&(e=-e),0===e)m(1/e>0?0:2147483648,t,n);else if(isNaN(e))m(2147483647,t,n);else if(e>34028234663852886e22)m((i<<31|2139095040)>>>0,t,n);else if(e<11754943508222875e-54)m((i<<31|Math.round(e/1401298464324817e-60))>>>0,t,n);else{var r=Math.floor(Math.log(e)/Math.LN2);m((i<<31|r+127<<23|8388607&Math.round(e*Math.pow(2,-r)*8388608))>>>0,t,n)}};h.prototype.float=function(e){return this.push(g,4,e)};var v="undefined"!==typeof Float64Array?function(){var e=new Float64Array(1),t=new Uint8Array(e.buffer);return e[0]=-0,t[7]?function(n,i,r){e[0]=n,i[r++]=t[0],i[r++]=t[1],i[r++]=t[2],i[r++]=t[3],i[r++]=t[4],i[r++]=t[5],i[r++]=t[6],i[r]=t[7]}:function(n,i,r){e[0]=n,i[r++]=t[7],i[r++]=t[6],i[r++]=t[5],i[r++]=t[4],i[r++]=t[3],i[r++]=t[2],i[r++]=t[1],i[r]=t[0]}}():function(e,t,n){var i=e<0?1:0;if(i&&(e=-e),0===e)m(0,t,n),m(1/e>0?0:2147483648,t,n+4);else if(isNaN(e))m(4294967295,t,n),m(2147483647,t,n+4);else if(e>17976931348623157e292)m(0,t,n),m((i<<31|2146435072)>>>0,t,n+4);else{var r;if(e<22250738585072014e-324)m((r=e/5e-324)>>>0,t,n),m((i<<31|r/4294967296)>>>0,t,n+4);else{var o=Math.floor(Math.log(e)/Math.LN2);1024===o&&(o=1023),m(4503599627370496*(r=e*Math.pow(2,-o))>>>0,t,n),m((i<<31|o+1023<<20|1048576*r&1048575)>>>0,t,n+4)}}};h.prototype.double=function(e){return this.push(v,8,e)};var _=r.Array.prototype.set?function(e,t,n){t.set(e,n)}:function(e,t,n){for(var i=0;i<e.length;++i)t[n+i]=e[i]};h.prototype.bytes=function(e){var t=e.length>>>0;if(!t)return this.push(d,1,0);if(r.isString(e)){var n=h.alloc(t=a.length(e));a.decode(e,n,0),e=n}return this.uint32(t).push(_,t,e)},h.prototype.string=function(e){var t=s.length(e);return t?this.uint32(t).push(s.write,t,e):this.push(d,1,0)},h.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(l,0,0),this.len=0,this},h.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(l,0,0),this.len=0),this},h.prototype.ldelim=function(){var e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=e.next,this.tail=t,this.len+=n),this},h.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),n=0;e;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t},h._configure=function(e){i=e}},{13:13}],15:[function(e,t,n){t.exports=a;var i=e(14);(a.prototype=Object.create(i.prototype)).constructor=a;var r=e(13),o=r.Buffer;function a(){i.call(this)}a.alloc=function(e){return(a.alloc=r._Buffer_allocUnsafe)(e)};var s=o&&o.prototype instanceof Uint8Array&&"set"===o.prototype.set.name?function(e,t,n){t.set(e,n)}:function(e,t,n){if(e.copy)e.copy(t,n,0,e.length);else for(var i=0;i<e.length;)t[n++]=e[i++]};function c(e,t,n){e.length<40?r.utf8.write(e,t,n):t.utf8Write(e,n)}a.prototype.bytes=function(e){r.isString(e)&&(e=r._Buffer_from(e,"base64"));var t=e.length>>>0;return this.uint32(t),t&&this.push(s,t,e),this},a.prototype.string=function(e){var t=o.byteLength(e);return this.uint32(t),t&&this.push(c,t,e),this}},{13:13,14:14}]},cache={},entries=[7],global.protobuf=function e(t){var n=cache[t];return n||modules[t][0].call(n=cache[t]={exports:{}},e,n,n.exports),n.exports}(entries[0])}(tmp),__webpack_exports__.a=tmp.protobuf},function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(190),d=n(127),f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,r=t.children,s=t.large,l=t.ulRef,u=Object(i.d)(t,["className","children","large","ulRef"]),h=o()(c.Classes.MENU,((e={})[c.Classes.LARGE]=s,e),n);return a.createElement("ul",Object(i.a)({},u,{className:h,ref:l}),r)},t.displayName=u.a+".Menu",t.Divider=h.a,t.Item=d.a,t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return g}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(47),u=n(40),h=n(27),d=n(38),f=n(77),p=n(128),m=n(126),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t,n=this.props,r=n.active,s=n.className,l=n.children,u=n.disabled,h=n.icon,f=n.intent,m=(n.labelClassName,n.labelElement),g=n.multiline,v=(n.popoverProps,n.shouldDismissPopover),b=n.text,y=n.textClassName,w=n.tagName,O=void 0===w?"a":w,C=Object(i.d)(n,["active","className","children","disabled","icon","intent","labelClassName","labelElement","multiline","popoverProps","shouldDismissPopover","text","textClassName","tagName"]),E=null!=l,A=c.Classes.intentClass(f),x=o()(c.Classes.MENU_ITEM,A,((e={})[c.Classes.ACTIVE]=r,e[c.Classes.INTENT_PRIMARY]=r&&null==A,e[c.Classes.DISABLED]=u,e[c.Classes.POPOVER_DISMISS]=v&&!u&&!E,e),s),T=a.createElement(O,Object(i.a)(Object(i.a)(Object(i.a)({},C),u?_:{}),{className:x}),a.createElement(d.a,{icon:h}),a.createElement(p.a,{className:o()(c.Classes.FILL,y),ellipsize:!g},b),this.maybeRenderLabel(m),E?a.createElement(d.a,{icon:"caret-right"}):void 0),S=o()(((t={})[c.Classes.MENU_SUBMENU]=E,t));return a.createElement("li",{className:S},this.maybeRenderPopover(T,l))},t.prototype.maybeRenderLabel=function(e){var t=this.props,n=t.label,i=t.labelClassName;return null==n&&null==e?null:a.createElement("span",{className:o()(c.Classes.MENU_ITEM_LABEL,i)},n,e)},t.prototype.maybeRenderPopover=function(e,t){if(null==t)return e;var n=this.props,r=n.disabled,s=n.popoverProps;return a.createElement(f.a,Object(i.a)({autoFocus:!1,captureDismiss:!1,disabled:r,enforceFocus:!1,hoverCloseDelay:0,interactionKind:f.b.HOVER,modifiers:v,position:l.a.RIGHT_TOP,usePortal:!1},s,{content:a.createElement(m.a,null,t),minimal:!0,popoverClassName:o()(c.Classes.MENU_SUBMENU,s.popoverClassName),target:e}))},t.defaultProps={disabled:!1,multiline:!1,popoverProps:{},shouldDismissPopover:!0,text:""},t.displayName=h.a+".MenuItem",t=Object(i.b)([s.polyfill],t)}(u.a),v={flip:{boundariesElement:"viewport",padding:20},offset:{offset:-5},preventOverflow:{boundariesElement:"viewport",padding:20}},_={href:void 0,onClick:void 0,onMouseDown:void 0,onMouseEnter:void 0,onMouseLeave:void 0,tabIndex:-1}},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isContentOverflowing:!1,textContent:""},t.textRef=null,t}return Object(i.c)(t,e),t.prototype.componentDidMount=function(){this.update()},t.prototype.componentDidUpdate=function(){this.update()},t.prototype.render=function(){var e,t=this,n=o()(((e={})[c.Classes.TEXT_OVERFLOW_ELLIPSIS]=this.props.ellipsize,e),this.props.className),i=this.props,r=i.children,s=i.tagName,l=void 0===s?"div":s;return a.createElement(l,{className:n,ref:function(e){return t.textRef=e},title:this.state.isContentOverflowing?this.state.textContent:void 0},r)},t.prototype.update=function(){if(null!=this.textRef){var e={isContentOverflowing:this.props.ellipsize&&this.textRef.scrollWidth>this.textRef.clientWidth,textContent:this.textRef.textContent};this.setState(e)}},t.displayName=u.a+".Text",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.alignText,r=t.className,s=t.fill,l=t.minimal,u=t.large,h=t.vertical,d=Object(i.d)(t,["alignText","className","fill","minimal","large","vertical"]),f=o()(c.Classes.BUTTON_GROUP,((e={})[c.Classes.FILL]=s,e[c.Classes.LARGE]=u,e[c.Classes.MINIMAL]=l,e[c.Classes.VERTICAL]=h,e),c.Classes.alignmentClass(n),r);return a.createElement("div",Object(i.a)({},d,{className:f}),this.props.children)},t.displayName=u.a+".ButtonGroup",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(156);function r(e,t){if(e){if("string"===typeof e)return Object(i.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(i.a)(e,t):void 0}}},function(e,t,n){"use strict";(function(e){var n;"undefined"!==typeof ko&&(n=ko),function(e){var t=this||(0,eval)("this"),n=t.document,i=t.navigator,r=t.jQuery,o=t.JSON;r||"undefined"===typeof jQuery||(r=jQuery),function(e){e(t.ko={})}((function(a,s){function c(e,t){return(null===e||typeof e in m)&&e===t}function l(t,n){var i;return function(){i||(i=p.a.setTimeout((function(){i=e,t()}),n))}}function u(e,t){var n;return function(){clearTimeout(n),n=p.a.setTimeout(e,t)}}function h(e,t){t&&"change"!==t?"beforeChange"===t?this.pc(e):this.gb(e,t):this.qc(e)}function d(e,t){null!==t&&t.s&&t.s()}function f(e,t){var n=this.qd,i=n[y];i.ra||(this.Qb&&this.mb[t]?(n.uc(t,e,this.mb[t]),this.mb[t]=null,--this.Qb):i.I[t]||n.uc(t,e,i.J?{da:e}:n.$c(e)),e.Ja&&e.gd())}var p="undefined"!==typeof a?a:{};p.b=function(e,t){for(var n=e.split("."),i=p,r=0;r<n.length-1;r++)i=i[n[r]];i[n[n.length-1]]=t},p.L=function(e,t,n){e[t]=n},p.version="3.5.1",p.b("version",p.version),p.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},p.a=function(){function a(e,t){for(var n in e)u.call(e,n)&&t(n,e[n])}function s(e,t){if(t)for(var n in t)u.call(t,n)&&(e[n]=t[n]);return e}function c(e,t){return e.__proto__=t,e}function l(e,t,n,i){var r=e[t].match(b)||[];p.a.D(n.match(b),(function(e){p.a.Na(r,e,i)})),e[t]=r.join(" ")}var u=Object.prototype.hasOwnProperty,h={__proto__:[]}instanceof Array,d="function"===typeof Symbol,f={},m={};f[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],f.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),a(f,(function(e,t){if(t.length)for(var n=0,i=t.length;n<i;n++)m[t[n]]=e}));var g,v={propertychange:!0},_=n&&function(){for(var t=3,i=n.createElement("div"),r=i.getElementsByTagName("i");i.innerHTML="\x3c!--[if gt IE "+ ++t+"]><i></i><![endif]--\x3e",r[0];);return 4<t?t:e}(),b=/\S+/g;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(e,t,n){for(var i=0,r=e.length;i<r;i++)t.call(n,e[i],i,e)},A:"function"==typeof Array.prototype.indexOf?function(e,t){return Array.prototype.indexOf.call(e,t)}:function(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1},Lb:function(t,n,i){for(var r=0,o=t.length;r<o;r++)if(n.call(i,t[r],r,t))return t[r];return e},Pa:function(e,t){var n=p.a.A(e,t);0<n?e.splice(n,1):0===n&&e.shift()},wc:function(e){var t=[];return e&&p.a.D(e,(function(e){0>p.a.A(t,e)&&t.push(e)})),t},Mb:function(e,t,n){var i=[];if(e)for(var r=0,o=e.length;r<o;r++)i.push(t.call(n,e[r],r));return i},jb:function(e,t,n){var i=[];if(e)for(var r=0,o=e.length;r<o;r++)t.call(n,e[r],r)&&i.push(e[r]);return i},Nb:function(e,t){if(t instanceof Array)e.push.apply(e,t);else for(var n=0,i=t.length;n<i;n++)e.push(t[n]);return e},Na:function(e,t,n){var i=p.a.A(p.a.bc(e),t);0>i?n&&e.push(t):n||e.splice(i,1)},Ba:h,extend:s,setPrototypeOf:c,Ab:h?c:s,P:a,Ga:function(e,t,n){if(!e)return e;var i,r={};for(i in e)u.call(e,i)&&(r[i]=t.call(n,e[i],i,e));return r},Tb:function(e){for(;e.firstChild;)p.removeNode(e.firstChild)},Yb:function(e){for(var t=((e=p.a.la(e))[0]&&e[0].ownerDocument||n).createElement("div"),i=0,r=e.length;i<r;i++)t.appendChild(p.oa(e[i]));return t},Ca:function(e,t){for(var n=0,i=e.length,r=[];n<i;n++){var o=e[n].cloneNode(!0);r.push(t?p.oa(o):o)}return r},va:function(e,t){if(p.a.Tb(e),t)for(var n=0,i=t.length;n<i;n++)e.appendChild(t[n])},Xc:function(e,t){var n=e.nodeType?[e]:e;if(0<n.length){for(var i=n[0],r=i.parentNode,o=0,a=t.length;o<a;o++)r.insertBefore(t[o],i);for(o=0,a=n.length;o<a;o++)p.removeNode(n[o])}},Ua:function(e,t){if(e.length){for(t=8===t.nodeType&&t.parentNode||t;e.length&&e[0].parentNode!==t;)e.splice(0,1);for(;1<e.length&&e[e.length-1].parentNode!==t;)e.length--;if(1<e.length){var n=e[0],i=e[e.length-1];for(e.length=0;n!==i;)e.push(n),n=n.nextSibling;e.push(i)}}return e},Zc:function(e,t){7>_?e.setAttribute("selected",t):e.selected=t},Db:function(t){return null===t||t===e?"":t.trim?t.trim():t.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(e,t){return e=e||"",!(t.length>e.length)&&e.substring(0,t.length)===t},vd:function(e,t){if(e===t)return!0;if(11===e.nodeType)return!1;if(t.contains)return t.contains(1!==e.nodeType?e.parentNode:e);if(t.compareDocumentPosition)return 16==(16&t.compareDocumentPosition(e));for(;e&&e!=t;)e=e.parentNode;return!!e},Sb:function(e){return p.a.vd(e,e.ownerDocument.documentElement)},kd:function(e){return!!p.a.Lb(e,p.a.Sb)},R:function(e){return e&&e.tagName&&e.tagName.toLowerCase()},Ac:function(e){return p.onError?function(){try{return e.apply(this,arguments)}catch(s){throw p.onError&&p.onError(s),s}}:e},setTimeout:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e,t){return setTimeout(p.a.Ac(e),t)})),Gc:function(e){setTimeout((function(){throw p.onError&&p.onError(e),e}),0)},B:function(e,t,n){var i=p.a.Ac(n);if(n=v[t],p.options.useOnlyNativeEvents||n||!r)if(n||"function"!=typeof e.addEventListener){if("undefined"==typeof e.attachEvent)throw Error("Browser doesn't support addEventListener or attachEvent");var o=function(t){i.call(e,t)},a="on"+t;e.attachEvent(a,o),p.a.K.za(e,(function(){e.detachEvent(a,o)}))}else e.addEventListener(t,i,!1);else g||(g="function"==typeof r(e).on?"on":"bind"),r(e)[g](t,i)},Fb:function(e,i){if(!e||!e.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var o;if(o=!("input"!==p.a.R(e)||!e.type||"click"!=i.toLowerCase())&&("checkbox"==(o=e.type)||"radio"==o),p.options.useOnlyNativeEvents||!r||o)if("function"==typeof n.createEvent){if("function"!=typeof e.dispatchEvent)throw Error("The supplied element doesn't support dispatchEvent");(o=n.createEvent(m[i]||"HTMLEvents")).initEvent(i,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,e),e.dispatchEvent(o)}else if(o&&e.click)e.click();else{if("undefined"==typeof e.fireEvent)throw Error("Browser doesn't support triggering events");e.fireEvent("on"+i)}else r(e).trigger(i)},f:function(e){return p.O(e)?e():e},bc:function(e){return p.O(e)?e.v():e},Eb:function(e,t,n){var i;t&&("object"===typeof e.classList?(i=e.classList[n?"add":"remove"],p.a.D(t.match(b),(function(t){i.call(e.classList,t)}))):"string"===typeof e.className.baseVal?l(e.className,"baseVal",t,n):l(e,"className",t,n))},Bb:function(t,n){var i=p.a.f(n);null!==i&&i!==e||(i="");var r=p.h.firstChild(t);!r||3!=r.nodeType||p.h.nextSibling(r)?p.h.va(t,[t.ownerDocument.createTextNode(i)]):r.data=i,p.a.Ad(t)},Yc:function(e,t){if(e.name=t,7>=_)try{var i=e.name.replace(/[&<>'"]/g,(function(e){return"&#"+e.charCodeAt(0)+";"}));e.mergeAttributes(n.createElement("<input name='"+i+"'/>"),!1)}catch(c){}},Ad:function(e){9<=_&&(e=1==e.nodeType?e:e.parentNode).style&&(e.style.zoom=e.style.zoom)},wd:function(e){if(_){var t=e.style.width;e.style.width=0,e.style.width=t}},Pd:function(e,t){e=p.a.f(e),t=p.a.f(t);for(var n=[],i=e;i<=t;i++)n.push(i);return n},la:function(e){for(var t=[],n=0,i=e.length;n<i;n++)t.push(e[n]);return t},Da:function(e){return d?Symbol(e):e},Zd:6===_,$d:7===_,W:_,Lc:function(e,t){for(var n=p.a.la(e.getElementsByTagName("input")).concat(p.a.la(e.getElementsByTagName("textarea"))),i="string"==typeof t?function(e){return e.name===t}:function(e){return t.test(e.name)},r=[],o=n.length-1;0<=o;o--)i(n[o])&&r.push(n[o]);return r},Nd:function(e){return"string"==typeof e&&(e=p.a.Db(e))?o&&o.parse?o.parse(e):new Function("return "+e)():null},hc:function(e,t,n){if(!o||!o.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return o.stringify(p.a.f(e),t,n)},Od:function(e,t,i){var r=(i=i||{}).params||{},o=i.includeFields||this.Jc,s=e;if("object"==typeof e&&"form"===p.a.R(e)){s=e.action;for(var c=o.length-1;0<=c;c--)for(var l=p.a.Lc(e,o[c]),u=l.length-1;0<=u;u--)r[l[u].name]=l[u].value}t=p.a.f(t);var h=n.createElement("form");for(var d in h.style.display="none",h.action=s,h.method="post",t)(e=n.createElement("input")).type="hidden",e.name=d,e.value=p.a.hc(p.a.f(t[d])),h.appendChild(e);a(r,(function(e,t){var i=n.createElement("input");i.type="hidden",i.name=e,i.value=t,h.appendChild(i)})),n.body.appendChild(h),i.submitter?i.submitter(h):h.submit(),setTimeout((function(){h.parentNode.removeChild(h)}),0)}}}(),p.b("utils",p.a),p.b("utils.arrayForEach",p.a.D),p.b("utils.arrayFirst",p.a.Lb),p.b("utils.arrayFilter",p.a.jb),p.b("utils.arrayGetDistinctValues",p.a.wc),p.b("utils.arrayIndexOf",p.a.A),p.b("utils.arrayMap",p.a.Mb),p.b("utils.arrayPushAll",p.a.Nb),p.b("utils.arrayRemoveItem",p.a.Pa),p.b("utils.cloneNodes",p.a.Ca),p.b("utils.createSymbolOrString",p.a.Da),p.b("utils.extend",p.a.extend),p.b("utils.fieldsIncludedWithJsonPost",p.a.Jc),p.b("utils.getFormFields",p.a.Lc),p.b("utils.objectMap",p.a.Ga),p.b("utils.peekObservable",p.a.bc),p.b("utils.postJson",p.a.Od),p.b("utils.parseJson",p.a.Nd),p.b("utils.registerEventHandler",p.a.B),p.b("utils.stringifyJson",p.a.hc),p.b("utils.range",p.a.Pd),p.b("utils.toggleDomNodeCssClass",p.a.Eb),p.b("utils.triggerEvent",p.a.Fb),p.b("utils.unwrapObservable",p.a.f),p.b("utils.objectForEach",p.a.P),p.b("utils.addOrRemoveItem",p.a.Na),p.b("utils.setTextContent",p.a.Bb),p.b("unwrap",p.a.f),Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if(1===arguments.length)return function(){return t.apply(e,arguments)};var n=Array.prototype.slice.call(arguments,1);return function(){var i=n.slice(0);return i.push.apply(i,arguments),t.apply(e,i)}}),p.a.g=new function(){var t,n,i=0,r="__ko__"+(new Date).getTime(),o={};return p.a.W?(t=function(t,n){var a=t[r];if(!a||"null"===a||!o[a]){if(!n)return e;a=t[r]="ko"+i++,o[a]={}}return o[a]},n=function(e){var t=e[r];return!!t&&(delete o[t],e[r]=null,!0)}):(t=function(e,t){var n=e[r];return!n&&t&&(n=e[r]={}),n},n=function(e){return!!e[r]&&(delete e[r],!0)}),{get:function(e,n){var i=t(e,!1);return i&&i[n]},set:function(n,i,r){(n=t(n,r!==e))&&(n[i]=r)},Ub:function(e,n,i){return(e=t(e,!0))[n]||(e[n]=i)},clear:n,Z:function(){return i+++r}}},p.b("utils.domData",p.a.g),p.b("utils.domData.clear",p.a.g.clear),p.a.K=new function(){function t(t,n){var i=p.a.g.get(t,o);return i===e&&n&&(i=[],p.a.g.set(t,o,i)),i}function n(e){if(n=t(e,!1))for(var n=n.slice(0),r=0;r<n.length;r++)n[r](e);p.a.g.clear(e),p.a.K.cleanExternalData(e),s[e.nodeType]&&i(e.childNodes,!0)}function i(e,t){for(var i,r=[],o=0;o<e.length;o++)if((!t||8===e[o].nodeType)&&(n(r[r.length]=i=e[o]),e[o]!==i))for(;o--&&-1==p.a.A(r,e[o]););}var o=p.a.g.Z(),a={1:!0,8:!0,9:!0},s={1:!0,9:!0};return{za:function(e,n){if("function"!=typeof n)throw Error("Callback must be a function");t(e,!0).push(n)},yb:function(n,i){var r=t(n,!1);r&&(p.a.Pa(r,i),0==r.length&&p.a.g.set(n,o,e))},oa:function(e){return p.u.G((function(){a[e.nodeType]&&(n(e),s[e.nodeType]&&i(e.getElementsByTagName("*")))})),e},removeNode:function(e){p.oa(e),e.parentNode&&e.parentNode.removeChild(e)},cleanExternalData:function(e){r&&"function"==typeof r.cleanData&&r.cleanData([e])}}},p.oa=p.a.K.oa,p.removeNode=p.a.K.removeNode,p.b("cleanNode",p.oa),p.b("removeNode",p.removeNode),p.b("utils.domNodeDisposal",p.a.K),p.b("utils.domNodeDisposal.addDisposeCallback",p.a.K.za),p.b("utils.domNodeDisposal.removeDisposeCallback",p.a.K.yb),function(){var i=[0,"",""],o=[1,"<table>","</table>"],a=[3,"<table><tbody><tr>","</tr></tbody></table>"],s=[1,"<select multiple='multiple'>","</select>"],c={thead:o,tbody:o,tfoot:o,tr:[2,"<table><tbody>","</tbody></table>"],td:a,th:a,option:s,optgroup:s},l=8>=p.a.W;p.a.ua=function(e,o){var a;if(r){if(r.parseHTML)a=r.parseHTML(e,o)||[];else if((a=r.clean([e],o))&&a[0]){for(var s=a[0];s.parentNode&&11!==s.parentNode.nodeType;)s=s.parentNode;s.parentNode&&s.parentNode.removeChild(s)}}else{(a=o)||(a=n),s=a.parentWindow||a.defaultView||t;var u,h=p.a.Db(e).toLowerCase(),d=a.createElement("div");for(u=(h=h.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&c[h[1]]||i,h=u[0],u="ignored<div>"+u[1]+e+u[2]+"</div>","function"==typeof s.innerShiv?d.appendChild(s.innerShiv(u)):(l&&a.body.appendChild(d),d.innerHTML=u,l&&d.parentNode.removeChild(d));h--;)d=d.lastChild;a=p.a.la(d.lastChild.childNodes)}return a},p.a.Md=function(e,t){var n=p.a.ua(e,t);return n.length&&n[0].parentElement||p.a.Yb(n)},p.a.fc=function(t,n){if(p.a.Tb(t),null!==(n=p.a.f(n))&&n!==e)if("string"!=typeof n&&(n=n.toString()),r)r(t).html(n);else for(var i=p.a.ua(n,t.ownerDocument),o=0;o<i.length;o++)t.appendChild(i[o])}}(),p.b("utils.parseHtmlFragment",p.a.ua),p.b("utils.setHtml",p.a.fc),p.aa=function(){var t={};return{Xb:function(e){if("function"!=typeof e)throw Error("You can only pass a function to ko.memoization.memoize()");var n=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return t[n]=e,"\x3c!--[ko_memo:"+n+"]--\x3e"},bd:function(n,i){var r=t[n];if(r===e)throw Error("Couldn't find any memo with ID "+n+". Perhaps it's already been unmemoized.");try{return r.apply(null,i||[]),!0}finally{delete t[n]}},cd:function(e,t){var n=[];!function e(t,n){if(t)if(8==t.nodeType)null!=(i=p.aa.Uc(t.nodeValue))&&n.push({ud:t,Kd:i});else if(1==t.nodeType)for(var i=0,r=t.childNodes,o=r.length;i<o;i++)e(r[i],n)}(e,n);for(var i=0,r=n.length;i<r;i++){var o=n[i].ud,a=[o];t&&p.a.Nb(a,t),p.aa.bd(n[i].Kd,a),o.nodeValue="",o.parentNode&&o.parentNode.removeChild(o)}},Uc:function(e){return(e=e.match(/^\[ko_memo\:(.*?)\]$/))?e[1]:null}}}(),p.b("memoization",p.aa),p.b("memoization.memoize",p.aa.Xb),p.b("memoization.unmemoize",p.aa.bd),p.b("memoization.parseMemoText",p.aa.Uc),p.b("memoization.unmemoizeDomNodeAndDescendants",p.aa.cd),p.na=function(){function e(){if(o)for(var e,t=o,n=0;s<o;)if(e=r[s++]){if(s>t){if(5e3<=++n){s=o,p.a.Gc(Error("'Too much recursion' after processing "+n+" task groups."));break}t=o}try{e()}catch(i){p.a.Gc(i)}}}function i(){e(),s=o=r.length=0}var r=[],o=0,a=1,s=0;return{scheduler:t.MutationObserver?function(e){var t=n.createElement("div");return new MutationObserver(e).observe(t,{attributes:!0}),function(){t.classList.toggle("foo")}}(i):n&&"onreadystatechange"in n.createElement("script")?function(e){var t=n.createElement("script");t.onreadystatechange=function(){t.onreadystatechange=null,n.documentElement.removeChild(t),t=null,e()},n.documentElement.appendChild(t)}:function(e){setTimeout(e,0)},zb:function(e){return o||p.na.scheduler(i),r[o++]=e,a++},cancel:function(e){(e-=a-o)>=s&&e<o&&(r[e]=null)},resetForTesting:function(){var e=o-s;return s=o=r.length=0,e},Sd:e}}(),p.b("tasks",p.na),p.b("tasks.schedule",p.na.zb),p.b("tasks.runEarly",p.na.Sd),p.Ta={throttle:function(e,t){e.throttleEvaluation=t;var n=null;return p.$({read:e,write:function(i){clearTimeout(n),n=p.a.setTimeout((function(){e(i)}),t)}})},rateLimit:function(e,t){var n,i,r;"number"==typeof t?n=t:(n=t.timeout,i=t.method),e.Hb=!1,r="function"==typeof i?i:"notifyWhenChangesStop"==i?u:l,e.ub((function(e){return r(e,n,t)}))},deferred:function(t,n){if(!0!==n)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");t.Hb||(t.Hb=!0,t.ub((function(n){var i,r=!1;return function(){if(!r){p.na.cancel(i),i=p.na.zb(n);try{r=!0,t.notifySubscribers(e,"dirty")}finally{r=!1}}}})))},notify:function(e,t){e.equalityComparer="always"==t?null:c}};var m={undefined:1,boolean:1,number:1,string:1};p.b("extenders",p.Ta),p.ic=function(e,t,n){this.da=e,this.lc=t,this.mc=n,this.Ib=!1,this.fb=this.Jb=null,p.L(this,"dispose",this.s),p.L(this,"disposeWhenNodeIsRemoved",this.l)},p.ic.prototype.s=function(){this.Ib||(this.fb&&p.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},p.ic.prototype.l=function(e){this.Jb=e,p.a.K.za(e,this.fb=this.s.bind(this))},p.T=function(){p.a.Ab(this,g),g.qb(this)};var g={qb:function(e){e.U={change:[]},e.sc=1},subscribe:function(e,t,n){var i=this;n=n||"change";var r=new p.ic(i,t?e.bind(t):e,(function(){p.a.Pa(i.U[n],r),i.hb&&i.hb(n)}));return i.Qa&&i.Qa(n),i.U[n]||(i.U[n]=[]),i.U[n].push(r),r},notifySubscribers:function(e,t){if("change"===(t=t||"change")&&this.Gb(),this.Wa(t)){var n="change"===t&&this.ed||this.U[t].slice(0);try{p.u.xc();for(var i,r=0;i=n[r];++r)i.Ib||i.lc(e)}finally{p.u.end()}}},ob:function(){return this.sc},Dd:function(e){return this.ob()!==e},Gb:function(){++this.sc},ub:function(e){var t,n,i,r,o,a=this,s=p.O(a);a.gb||(a.gb=a.notifySubscribers,a.notifySubscribers=h);var c=e((function(){a.Ja=!1,s&&r===a&&(r=a.nc?a.nc():a());var e=n||o&&a.sb(i,r);o=n=t=!1,e&&a.gb(i=r)}));a.qc=function(e,n){n&&a.Ja||(o=!n),a.ed=a.U.change.slice(0),a.Ja=t=!0,r=e,c()},a.pc=function(e){t||(i=e,a.gb(e,"beforeChange"))},a.rc=function(){o=!0},a.gd=function(){a.sb(i,a.v(!0))&&(n=!0)}},Wa:function(e){return this.U[e]&&this.U[e].length},Bd:function(e){if(e)return this.U[e]&&this.U[e].length||0;var t=0;return p.a.P(this.U,(function(e,n){"dirty"!==e&&(t+=n.length)})),t},sb:function(e,t){return!this.equalityComparer||!this.equalityComparer(e,t)},toString:function(){return"[object Object]"},extend:function(e){var t=this;return e&&p.a.P(e,(function(e,n){var i=p.Ta[e];"function"==typeof i&&(t=i(t,n)||t)})),t}};p.L(g,"init",g.qb),p.L(g,"subscribe",g.subscribe),p.L(g,"extend",g.extend),p.L(g,"getSubscriptionsCount",g.Bd),p.a.Ba&&p.a.setPrototypeOf(g,Function.prototype),p.T.fn=g,p.Qc=function(e){return null!=e&&"function"==typeof e.subscribe&&"function"==typeof e.notifySubscribers},p.b("subscribable",p.T),p.b("isSubscribable",p.Qc),p.S=p.u=function(){function e(e){i.push(n),n=e}function t(){n=i.pop()}var n,i=[],r=0;return{xc:e,end:t,cc:function(e){if(n){if(!p.Qc(e))throw Error("Only subscribable things can act as dependencies");n.od.call(n.pd,e,e.fd||(e.fd=++r))}},G:function(n,i,r){try{return e(),n.apply(i,r||[])}finally{t()}},qa:function(){if(n)return n.o.qa()},Va:function(){if(n)return n.o.Va()},Ya:function(){if(n)return n.Ya},o:function(){if(n)return n.o}}}(),p.b("computedContext",p.S),p.b("computedContext.getDependenciesCount",p.S.qa),p.b("computedContext.getDependencies",p.S.Va),p.b("computedContext.isInitial",p.S.Ya),p.b("computedContext.registerDependency",p.S.cc),p.b("ignoreDependencies",p.Yd=p.u.G);var v=p.a.Da("_latestValue");p.ta=function(e){function t(){return 0<arguments.length?(t.sb(t[v],arguments[0])&&(t.ya(),t[v]=arguments[0],t.xa()),this):(p.u.cc(t),t[v])}return t[v]=e,p.a.Ba||p.a.extend(t,p.T.fn),p.T.fn.qb(t),p.a.Ab(t,_),p.options.deferUpdates&&p.Ta.deferred(t,!0),t};var _={equalityComparer:c,v:function(){return this[v]},xa:function(){this.notifySubscribers(this[v],"spectate"),this.notifySubscribers(this[v])},ya:function(){this.notifySubscribers(this[v],"beforeChange")}};p.a.Ba&&p.a.setPrototypeOf(_,p.T.fn);var b=p.ta.Ma="__ko_proto__";_[b]=p.ta,p.O=function(e){if((e="function"==typeof e&&e[b])&&e!==_[b]&&e!==p.o.fn[b])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!e},p.Za=function(e){return"function"==typeof e&&(e[b]===_[b]||e[b]===p.o.fn[b]&&e.Nc)},p.b("observable",p.ta),p.b("isObservable",p.O),p.b("isWriteableObservable",p.Za),p.b("isWritableObservable",p.Za),p.b("observable.fn",_),p.L(_,"peek",_.v),p.L(_,"valueHasMutated",_.xa),p.L(_,"valueWillMutate",_.ya),p.Ha=function(e){if("object"!=typeof(e=e||[])||!("length"in e))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return e=p.ta(e),p.a.Ab(e,p.Ha.fn),e.extend({trackArrayChanges:!0})},p.Ha.fn={remove:function(e){for(var t=this.v(),n=[],i="function"!=typeof e||p.O(e)?function(t){return t===e}:e,r=0;r<t.length;r++){var o=t[r];if(i(o)){if(0===n.length&&this.ya(),t[r]!==o)throw Error("Array modified during remove; cannot remove item");n.push(o),t.splice(r,1),r--}}return n.length&&this.xa(),n},removeAll:function(t){if(t===e){var n=this.v(),i=n.slice(0);return this.ya(),n.splice(0,n.length),this.xa(),i}return t?this.remove((function(e){return 0<=p.a.A(t,e)})):[]},destroy:function(e){var t=this.v(),n="function"!=typeof e||p.O(e)?function(t){return t===e}:e;this.ya();for(var i=t.length-1;0<=i;i--){var r=t[i];n(r)&&(r._destroy=!0)}this.xa()},destroyAll:function(t){return t===e?this.destroy((function(){return!0})):t?this.destroy((function(e){return 0<=p.a.A(t,e)})):[]},indexOf:function(e){var t=this();return p.a.A(t,e)},replace:function(e,t){var n=this.indexOf(e);0<=n&&(this.ya(),this.v()[n]=t,this.xa())},sorted:function(e){var t=this().slice(0);return e?t.sort(e):t.sort()},reversed:function(){return this().slice(0).reverse()}},p.a.Ba&&p.a.setPrototypeOf(p.Ha.fn,p.ta.fn),p.a.D("pop push reverse shift sort splice unshift".split(" "),(function(e){p.Ha.fn[e]=function(){var t=this.v();this.ya(),this.zc(t,e,arguments);var n=t[e].apply(t,arguments);return this.xa(),n===t?this:n}})),p.a.D(["slice"],(function(e){p.Ha.fn[e]=function(){var t=this();return t[e].apply(t,arguments)}})),p.Pc=function(e){return p.O(e)&&"function"==typeof e.remove&&"function"==typeof e.push},p.b("observableArray",p.Ha),p.b("isObservableArray",p.Pc),p.Ta.trackArrayChanges=function(t,n){function i(){function e(){if(l){var e,n=[].concat(t.v()||[]);t.Wa("arrayChange")&&((!c||1<l)&&(c=p.a.Pb(a,n,t.Ob)),e=c),a=n,c=null,l=0,e&&e.length&&t.notifySubscribers(e,"arrayChange")}}s?e():(s=!0,o=t.subscribe((function(){++l}),null,"spectate"),a=[].concat(t.v()||[]),c=null,r=t.subscribe(e))}if(t.Ob={},n&&"object"==typeof n&&p.a.extend(t.Ob,n),t.Ob.sparse=!0,!t.zc){var r,o,a,s=!1,c=null,l=0,u=t.Qa,h=t.hb;t.Qa=function(e){u&&u.call(t,e),"arrayChange"===e&&i()},t.hb=function(n){h&&h.call(t,n),"arrayChange"!==n||t.Wa("arrayChange")||(r&&r.s(),o&&o.s(),o=r=null,s=!1,a=e)},t.zc=function(e,t,n){function i(e,t,n){return r[r.length]={status:e,value:t,index:n}}if(s&&!l){var r=[],o=e.length,a=n.length,u=0;switch(t){case"push":u=o;case"unshift":for(t=0;t<a;t++)i("added",n[t],u+t);break;case"pop":u=o-1;case"shift":o&&i("deleted",e[u],u);break;case"splice":t=Math.min(Math.max(0,0>n[0]?o+n[0]:n[0]),o),o=1===a?o:Math.min(t+(n[1]||0),o),a=t+a-2,u=Math.max(o,a);for(var h=[],d=[],f=2;t<u;++t,++f)t<o&&d.push(i("deleted",e[t],t)),t<a&&h.push(i("added",n[f],t));p.a.Kc(d,h);break;default:return}c=r}}}};var y=p.a.Da("_state");p.o=p.$=function(t,n,i){function r(){if(0<arguments.length){if("function"!==typeof o)throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return o.apply(a.nb,arguments),this}return a.ra||p.u.cc(r),(a.ka||a.J&&r.Xa())&&r.ha(),a.X}if("object"===typeof t?i=t:(i=i||{},t&&(i.read=t)),"function"!=typeof i.read)throw Error("Pass a function that returns the value of the ko.computed");var o=i.write,a={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:i.read,nb:n||i.owner,l:i.disposeWhenNodeIsRemoved||i.l||null,Sa:i.disposeWhen||i.Sa,Rb:null,I:{},V:0,Ic:null};return r[y]=a,r.Nc="function"===typeof o,p.a.Ba||p.a.extend(r,p.T.fn),p.T.fn.qb(r),p.a.Ab(r,w),i.pure?(a.wb=!0,a.J=!0,p.a.extend(r,O)):i.deferEvaluation&&p.a.extend(r,C),p.options.deferUpdates&&p.Ta.deferred(r,!0),a.l&&(a.jc=!0,a.l.nodeType||(a.l=null)),a.J||i.deferEvaluation||r.ha(),a.l&&r.ja()&&p.a.K.za(a.l,a.Rb=function(){r.s()}),r};var w={equalityComparer:c,qa:function(){return this[y].V},Va:function(){var e=[];return p.a.P(this[y].I,(function(t,n){e[n.Ka]=n.da})),e},Vb:function(e){if(!this[y].V)return!1;var t=this.Va();return-1!==p.a.A(t,e)||!!p.a.Lb(t,(function(t){return t.Vb&&t.Vb(e)}))},uc:function(e,t,n){if(this[y].wb&&t===this)throw Error("A 'pure' computed must not be called recursively");this[y].I[e]=n,n.Ka=this[y].V++,n.La=t.ob()},Xa:function(){var e,t,n=this[y].I;for(e in n)if(Object.prototype.hasOwnProperty.call(n,e)&&(t=n[e],this.Ia&&t.da.Ja||t.da.Dd(t.La)))return!0},Jd:function(){this.Ia&&!this[y].rb&&this.Ia(!1)},ja:function(){var e=this[y];return e.ka||0<e.V},Rd:function(){this.Ja?this[y].ka&&(this[y].sa=!0):this.Hc()},$c:function(e){if(e.Hb){var t=e.subscribe(this.Jd,this,"dirty"),n=e.subscribe(this.Rd,this);return{da:e,s:function(){t.s(),n.s()}}}return e.subscribe(this.Hc,this)},Hc:function(){var e=this,t=e.throttleEvaluation;t&&0<=t?(clearTimeout(this[y].Ic),this[y].Ic=p.a.setTimeout((function(){e.ha(!0)}),t)):e.Ia?e.Ia(!0):e.ha(!0)},ha:function(e){var t=this[y],n=t.Sa,i=!1;if(!t.rb&&!t.ra){if(t.l&&!p.a.Sb(t.l)||n&&n()){if(!t.jc)return void this.s()}else t.jc=!1;t.rb=!0;try{i=this.zd(e)}finally{t.rb=!1}return i}},zd:function(t){var n=this[y],i=!1,r=n.wb?e:!n.V;i={qd:this,mb:n.I,Qb:n.V},p.u.xc({pd:i,od:f,o:this,Ya:r}),n.I={},n.V=0;var o=this.yd(n,i);return n.V?i=this.sb(n.X,o):(this.s(),i=!0),i&&(n.J?this.Gb():this.notifySubscribers(n.X,"beforeChange"),n.X=o,this.notifySubscribers(n.X,"spectate"),!n.J&&t&&this.notifySubscribers(n.X),this.rc&&this.rc()),r&&this.notifySubscribers(n.X,"awake"),i},yd:function(e,t){try{var n=e.Wc;return e.nb?n.call(e.nb):n()}finally{p.u.end(),t.Qb&&!e.J&&p.a.P(t.mb,d),e.sa=e.ka=!1}},v:function(e){var t=this[y];return(t.ka&&(e||!t.V)||t.J&&this.Xa())&&this.ha(),t.X},ub:function(e){p.T.fn.ub.call(this,e),this.nc=function(){return this[y].J||(this[y].sa?this.ha():this[y].ka=!1),this[y].X},this.Ia=function(e){this.pc(this[y].X),this[y].ka=!0,e&&(this[y].sa=!0),this.qc(this,!e)}},s:function(){var t=this[y];!t.J&&t.I&&p.a.P(t.I,(function(e,t){t.s&&t.s()})),t.l&&t.Rb&&p.a.K.yb(t.l,t.Rb),t.I=e,t.V=0,t.ra=!0,t.sa=!1,t.ka=!1,t.J=!1,t.l=e,t.Sa=e,t.Wc=e,this.Nc||(t.nb=e)}},O={Qa:function(e){var t=this,n=t[y];if(!n.ra&&n.J&&"change"==e){if(n.J=!1,n.sa||t.Xa())n.I=null,n.V=0,t.ha()&&t.Gb();else{var i=[];p.a.P(n.I,(function(e,t){i[t.Ka]=e})),p.a.D(i,(function(e,i){var r=n.I[e],o=t.$c(r.da);o.Ka=i,o.La=r.La,n.I[e]=o})),t.Xa()&&t.ha()&&t.Gb()}n.ra||t.notifySubscribers(n.X,"awake")}},hb:function(t){var n=this[y];n.ra||"change"!=t||this.Wa("change")||(p.a.P(n.I,(function(e,t){t.s&&(n.I[e]={da:t.da,Ka:t.Ka,La:t.La},t.s())})),n.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var e=this[y];return e.J&&(e.sa||this.Xa())&&this.ha(),p.T.fn.ob.call(this)}},C={Qa:function(e){"change"!=e&&"beforeChange"!=e||this.v()}};p.a.Ba&&p.a.setPrototypeOf(w,p.T.fn);var E=p.ta.Ma;w[E]=p.o,p.Oc=function(e){return"function"==typeof e&&e[E]===w[E]},p.Fd=function(e){return p.Oc(e)&&e[y]&&e[y].wb},p.b("computed",p.o),p.b("dependentObservable",p.o),p.b("isComputed",p.Oc),p.b("isPureComputed",p.Fd),p.b("computed.fn",w),p.L(w,"peek",w.v),p.L(w,"dispose",w.s),p.L(w,"isActive",w.ja),p.L(w,"getDependenciesCount",w.qa),p.L(w,"getDependencies",w.Va),p.xb=function(e,t){return"function"===typeof e?p.o(e,t,{pure:!0}):((e=p.a.extend({},e)).pure=!0,p.o(e,t))},p.b("pureComputed",p.xb),function(){function t(i,r,o){if(o=o||new n,"object"!=typeof(i=r(i))||null===i||i===e||i instanceof RegExp||i instanceof Date||i instanceof String||i instanceof Number||i instanceof Boolean)return i;var a=i instanceof Array?[]:{};return o.save(i,a),function(e,t){if(e instanceof Array){for(var n=0;n<e.length;n++)t(n);"function"==typeof e.toJSON&&t("toJSON")}else for(n in e)t(n)}(i,(function(n){var s=r(i[n]);switch(typeof s){case"boolean":case"number":case"string":case"function":a[n]=s;break;case"object":case"undefined":var c=o.get(s);a[n]=c!==e?c:t(s,r,o)}})),a}function n(){this.keys=[],this.values=[]}p.ad=function(e){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return t(e,(function(e){for(var t=0;p.O(e)&&10>t;t++)e=e();return e}))},p.toJSON=function(e,t,n){return e=p.ad(e),p.a.hc(e,t,n)},n.prototype={constructor:n,save:function(e,t){var n=p.a.A(this.keys,e);0<=n?this.values[n]=t:(this.keys.push(e),this.values.push(t))},get:function(t){return 0<=(t=p.a.A(this.keys,t))?this.values[t]:e}}}(),p.b("toJS",p.ad),p.b("toJSON",p.toJSON),p.Wd=function(e,t,n){function i(t){var i=p.xb(e,n).extend({ma:"always"}),r=i.subscribe((function(e){e&&(r.s(),t(e))}));return i.notifySubscribers(i.v()),r}return"function"!==typeof Promise||t?i(t.bind(n)):new Promise(i)},p.b("when",p.Wd),p.w={M:function(t){switch(p.a.R(t)){case"option":return!0===t.__ko__hasDomDataOptionValue__?p.a.g.get(t,p.c.options.$b):7>=p.a.W?t.getAttributeNode("value")&&t.getAttributeNode("value").specified?t.value:t.text:t.value;case"select":return 0<=t.selectedIndex?p.w.M(t.options[t.selectedIndex]):e;default:return t.value}},cb:function(t,n,i){switch(p.a.R(t)){case"option":"string"===typeof n?(p.a.g.set(t,p.c.options.$b,e),"__ko__hasDomDataOptionValue__"in t&&delete t.__ko__hasDomDataOptionValue__,t.value=n):(p.a.g.set(t,p.c.options.$b,n),t.__ko__hasDomDataOptionValue__=!0,t.value="number"===typeof n?n:"");break;case"select":""!==n&&null!==n||(n=e);for(var r,o=-1,a=0,s=t.options.length;a<s;++a)if((r=p.w.M(t.options[a]))==n||""===r&&n===e){o=a;break}(i||0<=o||n===e&&1<t.size)&&(t.selectedIndex=o,6===p.a.W&&p.a.setTimeout((function(){t.selectedIndex=o}),0));break;default:null!==n&&n!==e||(n=""),t.value=n}}},p.b("selectExtensions",p.w),p.b("selectExtensions.readValue",p.w.M),p.b("selectExtensions.writeValue",p.w.cb),p.m=function(){function e(e){123===(e=p.a.Db(e)).charCodeAt(0)&&(e=e.slice(1,-1));var t,n=[],a=(e+="\n,").match(i),s=[],c=0;if(1<a.length){for(var l,u=0;l=a[u];++u){var h=l.charCodeAt(0);if(44===h){if(0>=c){n.push(t&&s.length?{key:t,value:s.join("")}:{unknown:t||s.join("")}),t=c=0,s=[];continue}}else if(58===h){if(!c&&!t&&1===s.length){t=s.pop();continue}}else{if(47===h&&1<l.length&&(47===l.charCodeAt(1)||42===l.charCodeAt(1)))continue;47===h&&u&&1<l.length?(h=a[u-1].match(r))&&!o[h[0]]&&(a=(e=e.substr(e.indexOf(l)+1)).match(i),u=-1,l="/"):40===h||123===h||91===h?++c:41===h||125===h||93===h?--c:t||s.length||34!==h&&39!==h||(l=l.slice(1,-1))}s.push(l)}if(0<c)throw Error("Unbalanced parentheses, braces, or brackets")}return n}var t=["true","false","null","undefined"],n=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,i=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),r=/[\])"'A-Za-z0-9_$]+$/,o={in:1,return:1,typeof:1},a={};return{Ra:[],wa:a,ac:e,vb:function(i,r){function o(e,i){var r;if(!u){var h=p.getBindingHandler(e);if(h&&h.preprocess&&!(i=h.preprocess(i,e,o)))return;(h=a[e])&&(r=i,0<=p.a.A(t,r)?r=!1:(h=r.match(n),r=null!==h&&(h[1]?"Object("+h[1]+")"+h[2]:r)),h=r),h&&c.push("'"+("string"==typeof a[e]?a[e]:e)+"':function(_z){"+r+"=_z}")}l&&(i="function(){return "+i+" }"),s.push("'"+e+"':"+i)}var s=[],c=[],l=(r=r||{}).valueAccessors,u=r.bindingParams,h="string"===typeof i?e(i):i;return p.a.D(h,(function(e){o(e.key||e.unknown,e.value)})),c.length&&o("_ko_property_writers","{"+c.join(",")+" }"),s.join(",")},Id:function(e,t){for(var n=0;n<e.length;n++)if(e[n].key==t)return!0;return!1},eb:function(e,t,n,i,r){e&&p.O(e)?!p.Za(e)||r&&e.v()===i||e(i):(e=t.get("_ko_property_writers"))&&e[n]&&e[n](i)}}}(),p.b("expressionRewriting",p.m),p.b("expressionRewriting.bindingRewriteValidators",p.m.Ra),p.b("expressionRewriting.parseObjectLiteral",p.m.ac),p.b("expressionRewriting.preProcessBindings",p.m.vb),p.b("expressionRewriting._twoWayBindings",p.m.wa),p.b("jsonExpressionRewriting",p.m),p.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",p.m.vb),function(){function e(e){return 8==e.nodeType&&a.test(o?e.text:e.nodeValue)}function t(e){return 8==e.nodeType&&s.test(o?e.text:e.nodeValue)}function i(n,i){for(var r=n,o=1,a=[];r=r.nextSibling;){if(t(r)&&(p.a.g.set(r,l,!0),0===--o))return a;a.push(r),e(r)&&o++}if(!i)throw Error("Cannot find closing comment tag to match: "+n.nodeValue);return null}function r(e,t){var n=i(e,t);return n?0<n.length?n[n.length-1].nextSibling:e.nextSibling:null}var o=n&&"\x3c!--test--\x3e"===n.createComment("test").text,a=o?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,s=o?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,c={ul:!0,ol:!0},l="__ko_matchedEndComment__";p.h={ea:{},childNodes:function(t){return e(t)?i(t):t.childNodes},Ea:function(t){if(e(t))for(var n=0,i=(t=p.h.childNodes(t)).length;n<i;n++)p.removeNode(t[n]);else p.a.Tb(t)},va:function(t,n){if(e(t)){p.h.Ea(t);for(var i=t.nextSibling,r=0,o=n.length;r<o;r++)i.parentNode.insertBefore(n[r],i)}else p.a.va(t,n)},Vc:function(t,n){var i;e(t)?(i=t.nextSibling,t=t.parentNode):i=t.firstChild,i?n!==i&&t.insertBefore(n,i):t.appendChild(n)},Wb:function(t,n,i){i?(i=i.nextSibling,e(t)&&(t=t.parentNode),i?n!==i&&t.insertBefore(n,i):t.appendChild(n)):p.h.Vc(t,n)},firstChild:function(n){if(e(n))return!n.nextSibling||t(n.nextSibling)?null:n.nextSibling;if(n.firstChild&&t(n.firstChild))throw Error("Found invalid end comment, as the first child of "+n);return n.firstChild},nextSibling:function(n){if(e(n)&&(n=r(n)),n.nextSibling&&t(n.nextSibling)){var i=n.nextSibling;if(t(i)&&!p.a.g.get(i,l))throw Error("Found end comment without a matching opening comment, as child of "+n);return null}return n.nextSibling},Cd:e,Vd:function(e){return(e=(o?e.text:e.nodeValue).match(a))?e[1]:null},Sc:function(n){if(c[p.a.R(n)]){var i=n.firstChild;if(i)do{if(1===i.nodeType){var o,a=null;if(o=i.firstChild)do{if(a)a.push(o);else if(e(o)){var s=r(o,!0);s?o=s:a=[o]}else t(o)&&(a=[o])}while(o=o.nextSibling);if(o=a)for(a=i.nextSibling,s=0;s<o.length;s++)a?n.insertBefore(o[s],a):n.appendChild(o[s])}}while(i=i.nextSibling)}}}}(),p.b("virtualElements",p.h),p.b("virtualElements.allowedBindings",p.h.ea),p.b("virtualElements.emptyNode",p.h.Ea),p.b("virtualElements.insertAfter",p.h.Wb),p.b("virtualElements.prepend",p.h.Vc),p.b("virtualElements.setDomNodeChildren",p.h.va),p.ga=function(){this.nd={}},p.a.extend(p.ga.prototype,{nodeHasBindings:function(e){switch(e.nodeType){case 1:return null!=e.getAttribute("data-bind")||p.j.getComponentNameForNode(e);case 8:return p.h.Cd(e);default:return!1}},getBindings:function(e,t){var n=(n=this.getBindingsString(e,t))?this.parseBindingsString(n,t,e):null;return p.j.tc(n,e,t,!1)},getBindingAccessors:function(e,t){var n=(n=this.getBindingsString(e,t))?this.parseBindingsString(n,t,e,{valueAccessors:!0}):null;return p.j.tc(n,e,t,!0)},getBindingsString:function(e){switch(e.nodeType){case 1:return e.getAttribute("data-bind");case 8:return p.h.Vd(e);default:return null}},parseBindingsString:function(e,t,n,i){try{var r,o=this.nd,a=e+(i&&i.valueAccessors||"");if(!(r=o[a])){var s,c="with($context){with($data||{}){return{"+p.m.vb(e,i)+"}}}";s=new Function("$context","$element",c),r=o[a]=s}return r(t,n)}catch(l){throw l.message="Unable to parse bindings.\nBindings value: "+e+"\nMessage: "+l.message,l}}}),p.ga.instance=new p.ga,p.b("bindingProvider",p.ga),function(){function i(e){var t=(e=p.a.g.get(e,w))&&e.N;t&&(e.N=null,t.Tc())}function o(e,t,n){this.node=e,this.yc=t,this.kb=[],this.H=!1,t.N||p.a.K.za(e,i),n&&n.N&&(n.N.kb.push(e),this.Kb=n)}function a(e){return function(){return e}}function s(e){return e()}function c(e){return p.a.Ga(p.u.G(e),(function(t,n){return function(){return e()[n]}}))}function l(e,t,n){return"function"===typeof e?c(e.bind(null,t,n)):p.a.Ga(e,a)}function u(e,t){return c(this.getBindings.bind(this,e,t))}function h(e,t){var n=p.h.firstChild(t);if(n){var i,r=p.ga.instance,o=r.preprocessNode;if(o){for(;i=n;)n=p.h.nextSibling(i),o.call(r,i);n=p.h.firstChild(t)}for(;i=n;)n=p.h.nextSibling(i),d(e,i)}p.i.ma(t,p.i.H)}function d(e,t){var n=e,i=1===t.nodeType;i&&p.h.Sc(t),(i||p.ga.instance.nodeHasBindings(t))&&(n=f(t,null,e).bindingContextForDescendants),n&&!b[p.a.R(t)]&&h(n,t)}function f(t,n,i){var r,o=p.a.g.Ub(t,w,{}),a=o.hd;if(!n){if(a)throw Error("You cannot apply bindings multiple times to the same element.");o.hd=!0}if(a||(o.context=i),o.Zb||(o.Zb={}),n&&"function"!==typeof n)r=n;else{var c=p.ga.instance,l=c.getBindingAccessors||u,h=p.$((function(){return(r=n?n(i,t):l.call(c,t,i))&&(i[g]&&i[g](),i[_]&&i[_]()),r}),null,{l:t});r&&h.ja()||(h=null)}var d,f=i;if(r){var m=function(){return p.a.Ga(h?h():r,s)},v=h?function(e){return function(){return s(h()[e])}}:function(e){return r[e]};m.get=function(e){return r[e]&&s(v(e))},m.has=function(e){return e in r},p.i.H in r&&p.i.subscribe(t,p.i.H,(function(){var e=(0,r[p.i.H])();if(e){var n=p.h.childNodes(t);n.length&&e(n,p.Ec(n[0]))}})),p.i.pa in r&&(f=p.i.Cb(t,i),p.i.subscribe(t,p.i.pa,(function(){var e=(0,r[p.i.pa])();e&&p.h.firstChild(t)&&e(t)}))),o=function(e){var t=[],n={},i=[];return p.a.P(e,(function r(o){if(!n[o]){var a=p.getBindingHandler(o);a&&(a.after&&(i.push(o),p.a.D(a.after,(function(t){if(e[t]){if(-1!==p.a.A(i,t))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+i.join(", "));r(t)}})),i.length--),t.push({key:o,Mc:a})),n[o]=!0}})),t}(r),p.a.D(o,(function(n){var i=n.Mc.init,o=n.Mc.update,s=n.key;if(8===t.nodeType&&!p.h.ea[s])throw Error("The binding '"+s+"' cannot be used with virtual elements");try{"function"==typeof i&&p.u.G((function(){var n=i(t,v(s),m,f.$data,f);if(n&&n.controlsDescendantBindings){if(d!==e)throw Error("Multiple bindings ("+d+" and "+s+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");d=s}})),"function"==typeof o&&p.$((function(){o(t,v(s),m,f.$data,f)}),null,{l:t})}catch(a){throw a.message='Unable to process binding "'+s+": "+r[s]+'"\nMessage: '+a.message,a}}))}return{shouldBindDescendants:o=d===e,bindingContextForDescendants:o&&f}}function m(t,n){return t&&t instanceof p.fa?t:new p.fa(t,e,e,n)}var g=p.a.Da("_subscribable"),v=p.a.Da("_ancestorBindingInfo"),_=p.a.Da("_dataDependency");p.c={};var b={script:!0,textarea:!0,template:!0};p.getBindingHandler=function(e){return p.c[e]};var y={};p.fa=function(t,n,i,r,o){function a(){var e=h?u():u,t=p.a.f(e);return n?(p.a.extend(c,n),v in n&&(c[v]=n[v])):(c.$parents=[],c.$root=t,c.ko=p),c[g]=s,l?t=c.$data:(c.$rawData=e,c.$data=t),i&&(c[i]=t),r&&r(c,n,t),n&&n[g]&&!p.S.o().Vb(n[g])&&n[g](),d&&(c[_]=d),c.$data}var s,c=this,l=t===y,u=l?e:t,h="function"==typeof u&&!p.O(u),d=o&&o.dataDependency;o&&o.exportDependencies?a():((s=p.xb(a)).v(),s.ja()?s.equalityComparer=null:c[g]=e)},p.fa.prototype.createChildContext=function(e,t,n,i){if(!i&&t&&"object"==typeof t&&(t=(i=t).as,n=i.extend),t&&i&&i.noChildContext){var r="function"==typeof e&&!p.O(e);return new p.fa(y,this,null,(function(i){n&&n(i),i[t]=r?e():e}),i)}return new p.fa(e,this,t,(function(e,t){e.$parentContext=t,e.$parent=t.$data,e.$parents=(t.$parents||[]).slice(0),e.$parents.unshift(e.$parent),n&&n(e)}),i)},p.fa.prototype.extend=function(e,t){return new p.fa(y,this,null,(function(t){p.a.extend(t,"function"==typeof e?e(t):e)}),t)};var w=p.a.g.Z();o.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},o.prototype.sd=function(e){p.a.Pa(this.kb,e),!this.kb.length&&this.H&&this.Cc()},o.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,p.a.K.yb(this.node,i),p.i.ma(this.node,p.i.pa),this.Tc())},p.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(e,t,n,i,r){var o=p.a.g.Ub(e,w,{});return o.Fa||(o.Fa=new p.T),r&&r.notifyImmediately&&o.Zb[t]&&p.u.G(n,i,[e]),o.Fa.subscribe(n,i,t)},ma:function(t,n){var i=p.a.g.get(t,w);if(i&&(i.Zb[n]=!0,i.Fa&&i.Fa.notifySubscribers(t,n),n==p.i.H))if(i.N)i.N.Cc();else if(i.N===e&&i.Fa&&i.Fa.Wa(p.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")},Cb:function(e,t){var n=p.a.g.Ub(e,w,{});return n.N||(n.N=new o(e,n,t[v])),t[v]==n?t:t.extend((function(e){e[v]=n}))}},p.Td=function(e){return(e=p.a.g.get(e,w))&&e.context},p.ib=function(e,t,n){return 1===e.nodeType&&p.h.Sc(e),f(e,t,m(n))},p.ld=function(e,t,n){return n=m(n),p.ib(e,l(t,n,e),n)},p.Oa=function(e,t){1!==t.nodeType&&8!==t.nodeType||h(m(e),t)},p.vc=function(e,i,o){if(!r&&t.jQuery&&(r=t.jQuery),2>arguments.length){if(!(i=n.body))throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!i||1!==i.nodeType&&8!==i.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");d(m(e,o),i)},p.Dc=function(t){return!t||1!==t.nodeType&&8!==t.nodeType?e:p.Td(t)},p.Ec=function(t){return(t=p.Dc(t))?t.$data:e},p.b("bindingHandlers",p.c),p.b("bindingEvent",p.i),p.b("bindingEvent.subscribe",p.i.subscribe),p.b("bindingEvent.startPossiblyAsyncContentBinding",p.i.Cb),p.b("applyBindings",p.vc),p.b("applyBindingsToDescendants",p.Oa),p.b("applyBindingAccessorsToNode",p.ib),p.b("applyBindingsToNode",p.ld),p.b("contextFor",p.Dc),p.b("dataFor",p.Ec)}(),function(e){function t(t,i){var a,s=Object.prototype.hasOwnProperty.call(r,t)?r[t]:e;s?s.subscribe(i):((s=r[t]=new p.T).subscribe(i),n(t,(function(e,n){var i=!(!n||!n.synchronous);o[t]={definition:e,Gd:i},delete r[t],a||i?s.notifySubscribers(e):p.na.zb((function(){s.notifySubscribers(e)}))})),a=!0)}function n(e,t){i("getConfig",[e],(function(n){n?i("loadComponent",[e,n],(function(e){t(e,n)})):t(null,null)}))}function i(t,n,r,o){o||(o=p.j.loaders.slice(0));var a=o.shift();if(a){var s=a[t];if(s){var c=!1;if(s.apply(a,n.concat((function(e){c?r(null):null!==e?r(e):i(t,n,r,o)})))!==e&&(c=!0,!a.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else i(t,n,r,o)}else r(null)}var r={},o={};p.j={get:function(n,i){var r=Object.prototype.hasOwnProperty.call(o,n)?o[n]:e;r?r.Gd?p.u.G((function(){i(r.definition)})):p.na.zb((function(){i(r.definition)})):t(n,i)},Bc:function(e){delete o[e]},oc:i},p.j.loaders=[],p.b("components",p.j),p.b("components.get",p.j.get),p.b("components.clearCachedDefinition",p.j.Bc)}(),function(){function e(e,t,n,i){function r(){0===--s&&i(a)}var a={},s=2,c=n.template;n=n.viewModel,c?o(t,c,(function(t){p.j.oc("loadTemplate",[e,t],(function(e){a.template=e,r()}))})):r(),n?o(t,n,(function(t){p.j.oc("loadViewModel",[e,t],(function(e){a[l]=e,r()}))})):r()}function i(e){switch(p.a.R(e)){case"script":return p.a.ua(e.text);case"textarea":return p.a.ua(e.value);case"template":if(r(e.content))return p.a.Ca(e.content.childNodes)}return p.a.Ca(e.childNodes)}function r(e){return t.DocumentFragment?e instanceof DocumentFragment:e&&11===e.nodeType}function o(e,n,i){"string"===typeof n.require?s||t.require?(s||t.require)([n.require],(function(e){e&&"object"===typeof e&&e.Xd&&e.default&&(e=e.default),i(e)})):e("Uses require, but no AMD loader is present"):i(n)}function a(e){return function(t){throw Error("Component '"+e+"': "+t)}}var c={};p.j.register=function(e,t){if(!t)throw Error("Invalid configuration for "+e);if(p.j.tb(e))throw Error("Component "+e+" is already registered");c[e]=t},p.j.tb=function(e){return Object.prototype.hasOwnProperty.call(c,e)},p.j.unregister=function(e){delete c[e],p.j.Bc(e)},p.j.Fc={getConfig:function(e,t){t(p.j.tb(e)?c[e]:null)},loadComponent:function(t,n,i){var r=a(t);o(r,n,(function(n){e(t,r,n,i)}))},loadTemplate:function(e,o,s){if(e=a(e),"string"===typeof o)s(p.a.ua(o));else if(o instanceof Array)s(o);else if(r(o))s(p.a.la(o.childNodes));else if(o.element)if(o=o.element,t.HTMLElement?o instanceof HTMLElement:o&&o.tagName&&1===o.nodeType)s(i(o));else if("string"===typeof o){var c=n.getElementById(o);c?s(i(c)):e("Cannot find element with ID "+o)}else e("Unknown element type: "+o);else e("Unknown template value: "+o)},loadViewModel:function(e,t,n){!function e(t,n,i){if("function"===typeof n)i((function(e){return new n(e)}));else if("function"===typeof n[l])i(n[l]);else if("instance"in n){var r=n.instance;i((function(){return r}))}else"viewModel"in n?e(t,n.viewModel,i):t("Unknown viewModel value: "+n)}(a(e),t,n)}};var l="createViewModel";p.b("components.register",p.j.register),p.b("components.isRegistered",p.j.tb),p.b("components.unregister",p.j.unregister),p.b("components.defaultLoader",p.j.Fc),p.j.loaders.push(p.j.Fc),p.j.dd=c}(),function(){function e(e,n){if(i=e.getAttribute("params")){var i=t.parseBindingsString(i,n,e,{valueAccessors:!0,bindingParams:!0}),r=(i=p.a.Ga(i,(function(t){return p.o(t,null,{l:e})})),p.a.Ga(i,(function(t){var n=t.v();return t.ja()?p.o({read:function(){return p.a.f(t())},write:p.Za(n)&&function(e){t()(e)},l:e}):n})));return Object.prototype.hasOwnProperty.call(r,"$raw")||(r.$raw=i),r}return{$raw:{}}}p.j.getComponentNameForNode=function(e){var t=p.a.R(e);if(p.j.tb(t)&&(-1!=t.indexOf("-")||"[object HTMLUnknownElement]"==""+e||8>=p.a.W&&e.tagName===t))return t},p.j.tc=function(t,n,i,r){if(1===n.nodeType){var o=p.j.getComponentNameForNode(n);if(o){if((t=t||{}).component)throw Error('Cannot use the "component" binding on a custom element matching a component');var a={name:o,params:e(n,i)};t.component=r?function(){return a}:a}}return t};var t=new p.ga;9>p.a.W&&(p.j.register=function(e){return function(t){return e.apply(this,arguments)}}(p.j.register),n.createDocumentFragment=function(e){return function(){var t,n=e(),i=p.j.dd;for(t in i);return n}}(n.createDocumentFragment))}(),function(){var e=0;p.c.component={init:function(t,n,i,r,o){function a(){var e=s&&s.dispose;"function"===typeof e&&e.call(s),l&&l.s(),c=s=l=null}var s,c,l,u=p.a.la(p.h.childNodes(t));return p.h.Ea(t),p.a.K.za(t,a),p.o((function(){var i,r,h=p.a.f(n());if("string"===typeof h?i=h:(i=p.a.f(h.name),r=p.a.f(h.params)),!i)throw Error("No component name specified");var d=p.i.Cb(t,o),f=c=++e;p.j.get(i,(function(e){if(c===f){if(a(),!e)throw Error("Unknown component '"+i+"'");!function(e,t,n){if(!(t=t.template))throw Error("Component '"+e+"' has no template");e=p.a.Ca(t),p.h.va(n,e)}(i,e,t);var n=function(e,t,n){var i=e.createViewModel;return i?i.call(e,t,n):t}(e,r,{element:t,templateNodes:u});e=d.createChildContext(n,{extend:function(e){e.$component=n,e.$componentTemplateNodes=u}}),n&&n.koDescendantsComplete&&(l=p.i.subscribe(t,p.i.pa,n.koDescendantsComplete,n)),s=n,p.Oa(e,t)}}))}),null,{l:t}),{controlsDescendantBindings:!0}}},p.h.ea.component=!0}();var A={class:"className",for:"htmlFor"};p.c.attr={update:function(t,n){var i=p.a.f(n())||{};p.a.P(i,(function(n,i){i=p.a.f(i);var r=n.indexOf(":"),o=(r="lookupNamespaceURI"in t&&0<r&&t.lookupNamespaceURI(n.substr(0,r)),!1===i||null===i||i===e);o?r?t.removeAttributeNS(r,n):t.removeAttribute(n):i=i.toString(),8>=p.a.W&&n in A?(n=A[n],o?t.removeAttribute(n):t[n]=i):o||(r?t.setAttributeNS(r,n,i):t.setAttribute(n,i)),"name"===n&&p.a.Yc(t,o?"":i)}))}},p.c.checked={after:["value","attr"],init:function(t,n,i){function r(){var r=t.checked,c=o();if(!p.S.Ya()&&(r||!s&&!p.S.qa())){var h=p.u.G(n);if(l){var f=u?h.v():h,m=d;d=c,m!==c?r&&(p.a.Na(f,c,!0),p.a.Na(f,m,!1)):p.a.Na(f,c,r),u&&p.Za(h)&&h(f)}else a&&(c===e?c=r:r||(c=e)),p.m.eb(h,i,"checked",c,!0)}}var o=p.xb((function(){return i.has("checkedValue")?p.a.f(i.get("checkedValue")):h?i.has("value")?p.a.f(i.get("value")):t.value:void 0})),a="checkbox"==t.type,s="radio"==t.type;if(a||s){var c=n(),l=a&&p.a.f(c)instanceof Array,u=!(l&&c.push&&c.splice),h=s||l,d=l?o():e;s&&!t.name&&p.c.uniqueName.init(t,(function(){return!0})),p.o(r,null,{l:t}),p.a.B(t,"click",r),p.o((function(){var i=p.a.f(n()),r=o();l?(t.checked=0<=p.a.A(i,r),d=r):t.checked=a&&r===e?!!i:o()===i}),null,{l:t}),c=e}}},p.m.wa.checked=!0,p.c.checkedValue={update:function(e,t){e.value=p.a.f(t())}},p.c.class={update:function(e,t){var n=p.a.Db(p.a.f(t()));p.a.Eb(e,e.__ko__cssValue,!1),e.__ko__cssValue=n,p.a.Eb(e,n,!0)}},p.c.css={update:function(e,t){var n=p.a.f(t());null!==n&&"object"==typeof n?p.a.P(n,(function(t,n){n=p.a.f(n),p.a.Eb(e,t,n)})):p.c.class.update(e,t)}},p.c.enable={update:function(e,t){var n=p.a.f(t());n&&e.disabled?e.removeAttribute("disabled"):n||e.disabled||(e.disabled=!0)}},p.c.disable={update:function(e,t){p.c.enable.update(e,(function(){return!p.a.f(t())}))}},p.c.event={init:function(e,t,n,i,r){var o=t()||{};p.a.P(o,(function(o){"string"==typeof o&&p.a.B(e,o,(function(e){var a,s=t()[o];if(s){try{var c=p.a.la(arguments);i=r.$data,c.unshift(i),a=s.apply(i,c)}finally{!0!==a&&(e.preventDefault?e.preventDefault():e.returnValue=!1)}!1===n.get(o+"Bubble")&&(e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation())}}))}))}},p.c.foreach={Rc:function(e){return function(){var t=e(),n=p.a.bc(t);return n&&"number"!=typeof n.length?(p.a.f(t),{foreach:n.data,as:n.as,noChildContext:n.noChildContext,includeDestroyed:n.includeDestroyed,afterAdd:n.afterAdd,beforeRemove:n.beforeRemove,afterRender:n.afterRender,beforeMove:n.beforeMove,afterMove:n.afterMove,templateEngine:p.ba.Ma}):{foreach:t,templateEngine:p.ba.Ma}}},init:function(e,t){return p.c.template.init(e,p.c.foreach.Rc(t))},update:function(e,t,n,i,r){return p.c.template.update(e,p.c.foreach.Rc(t),n,i,r)}},p.m.Ra.foreach=!1,p.h.ea.foreach=!0,p.c.hasfocus={init:function(e,t,n){function i(i){e.__ko_hasfocusUpdating=!0;var r=e.ownerDocument;if("activeElement"in r){var o;try{o=r.activeElement}catch(a){o=r.body}i=o===e}r=t(),p.m.eb(r,n,"hasfocus",i,!0),e.__ko_hasfocusLastValue=i,e.__ko_hasfocusUpdating=!1}var r=i.bind(null,!0),o=i.bind(null,!1);p.a.B(e,"focus",r),p.a.B(e,"focusin",r),p.a.B(e,"blur",o),p.a.B(e,"focusout",o),e.__ko_hasfocusLastValue=!1},update:function(e,t){var n=!!p.a.f(t());e.__ko_hasfocusUpdating||e.__ko_hasfocusLastValue===n||(n?e.focus():e.blur(),!n&&e.__ko_hasfocusLastValue&&e.ownerDocument.body.focus(),p.u.G(p.a.Fb,null,[e,n?"focusin":"focusout"]))}},p.m.wa.hasfocus=!0,p.c.hasFocus=p.c.hasfocus,p.m.wa.hasFocus="hasfocus",p.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(e,t){p.a.fc(e,t())}},function(){function e(e,t,n){p.c[e]={init:function(e,i,r,o,a){var s,c,l,u,h,d={};if(t){o=r.get("as");var f=r.get("noChildContext");d={as:o,noChildContext:f,exportDependencies:h=!(o&&f)}}return u=(l="render"==r.get("completeOn"))||r.has(p.i.pa),p.o((function(){var r,o=p.a.f(i()),f=!n!==!o,m=!c;(h||f!==s)&&(u&&(a=p.i.Cb(e,a)),f&&(t&&!h||(d.dataDependency=p.S.o()),r=t?a.createChildContext("function"==typeof o?o:i,d):p.S.qa()?a.extend(null,d):a),m&&p.S.qa()&&(c=p.a.Ca(p.h.childNodes(e),!0)),f?(m||p.h.va(e,p.a.Ca(c)),p.Oa(r,e)):(p.h.Ea(e),l||p.i.ma(e,p.i.H)),s=f)}),null,{l:e}),{controlsDescendantBindings:!0}}},p.m.Ra[e]=!1,p.h.ea[e]=!0}e("if"),e("ifnot",!1,!0),e("with",!0)}(),p.c.let={init:function(e,t,n,i,r){return t=r.extend(t),p.Oa(t,e),{controlsDescendantBindings:!0}}},p.h.ea.let=!0;var x,T={};p.c.options={init:function(e){if("select"!==p.a.R(e))throw Error("options binding applies only to SELECT elements");for(;0<e.length;)e.remove(0);return{controlsDescendantBindings:!0}},update:function(t,n,i){function r(){return p.a.jb(t.options,(function(e){return e.selected}))}function o(e,t,n){var i=typeof t;return"function"==i?t(e):"string"==i?e[t]:n}function a(e,n){if(m&&u)p.i.ma(t,p.i.H);else if(f.length){var i=0<=p.a.A(f,p.w.M(n[0]));p.a.Zc(n[0],i),m&&!i&&p.u.G(p.a.Fb,null,[t,"change"])}}var s=t.multiple,c=0!=t.length&&s?t.scrollTop:null,l=p.a.f(n()),u=i.get("valueAllowUnset")&&i.has("value"),h=i.get("optionsIncludeDestroyed");n={};var d,f=[];u||(s?f=p.a.Mb(r(),p.w.M):0<=t.selectedIndex&&f.push(p.w.M(t.options[t.selectedIndex]))),l&&("undefined"==typeof l.length&&(l=[l]),d=p.a.jb(l,(function(t){return h||t===e||null===t||!p.a.f(t._destroy)})),i.has("optionsCaption")&&null!==(l=p.a.f(i.get("optionsCaption")))&&l!==e&&d.unshift(T));var m=!1;n.beforeRemove=function(e){t.removeChild(e)},l=a,i.has("optionsAfterRender")&&"function"==typeof i.get("optionsAfterRender")&&(l=function(t,n){a(0,n),p.u.G(i.get("optionsAfterRender"),null,[n[0],t!==T?t:e])}),p.a.ec(t,d,(function(n,r,a){return a.length&&(f=!u&&a[0].selected?[p.w.M(a[0])]:[],m=!0),r=t.ownerDocument.createElement("option"),n===T?(p.a.Bb(r,i.get("optionsCaption")),p.w.cb(r,e)):(a=o(n,i.get("optionsValue"),n),p.w.cb(r,p.a.f(a)),n=o(n,i.get("optionsText"),a),p.a.Bb(r,n)),[r]}),n,l),u||(s?f.length&&r().length<f.length:f.length&&0<=t.selectedIndex?p.w.M(t.options[t.selectedIndex])!==f[0]:f.length||0<=t.selectedIndex)&&p.u.G(p.a.Fb,null,[t,"change"]),(u||p.S.Ya())&&p.i.ma(t,p.i.H),p.a.wd(t),c&&20<Math.abs(c-t.scrollTop)&&(t.scrollTop=c)}},p.c.options.$b=p.a.g.Z(),p.c.selectedOptions={init:function(e,t,n){function i(){var i=t(),r=[];p.a.D(e.getElementsByTagName("option"),(function(e){e.selected&&r.push(p.w.M(e))})),p.m.eb(i,n,"selectedOptions",r)}function r(){var n=p.a.f(t()),i=e.scrollTop;n&&"number"==typeof n.length&&p.a.D(e.getElementsByTagName("option"),(function(e){var t=0<=p.a.A(n,p.w.M(e));e.selected!=t&&p.a.Zc(e,t)})),e.scrollTop=i}if("select"!=p.a.R(e))throw Error("selectedOptions binding applies only to SELECT elements");var o;p.i.subscribe(e,p.i.H,(function(){o?i():(p.a.B(e,"change",i),o=p.o(r,null,{l:e}))}),null,{notifyImmediately:!0})},update:function(){}},p.m.wa.selectedOptions=!0,p.c.style={update:function(t,n){var i=p.a.f(n()||{});p.a.P(i,(function(n,i){if(null!==(i=p.a.f(i))&&i!==e&&!1!==i||(i=""),r)r(t).css(n,i);else if(/^--/.test(n))t.style.setProperty(n,i);else{n=n.replace(/-(\w)/g,(function(e,t){return t.toUpperCase()}));var o=t.style[n];t.style[n]=i,i===o||t.style[n]!=o||isNaN(i)||(t.style[n]=i+"px")}}))}},p.c.submit={init:function(e,t,n,i,r){if("function"!=typeof t())throw Error("The value for a submit binding must be a function");p.a.B(e,"submit",(function(n){var i,o=t();try{i=o.call(r.$data,e)}finally{!0!==i&&(n.preventDefault?n.preventDefault():n.returnValue=!1)}}))}},p.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(e,t){p.a.Bb(e,t())}},p.h.ea.text=!0,function(){if(t&&t.navigator){var n,i,r,o,a,s=function(e){if(e)return parseFloat(e[1])},c=t.navigator.userAgent;(n=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(a=s(c.match(/Edge\/([^ ]+)$/)))||s(c.match(/Chrome\/([^ ]+)/))||(i=s(c.match(/Version\/([^ ]+) Safari/)))||(r=s(c.match(/Firefox\/([^ ]+)/)))||(o=p.a.W||s(c.match(/MSIE ([^ ]+)/)))||(o=s(c.match(/rv:([^ )]+)/)))}if(8<=o&&10>o)var l=p.a.g.Z(),u=p.a.g.Z(),h=function(e){var t=this.activeElement;(t=t&&p.a.g.get(t,u))&&t(e)},d=function(e,t){var n=e.ownerDocument;p.a.g.get(n,l)||(p.a.g.set(n,l,!0),p.a.B(n,"selectionchange",h)),p.a.g.set(e,u,t)};p.c.textInput={init:function(t,s,c){function l(e,n){p.a.B(t,e,n)}function u(){f||(m=t.value,f=p.a.setTimeout(h,4))}function h(){clearTimeout(f),m=f=e;var n=t.value;g!==n&&(g=n,p.m.eb(s(),c,"textInput",n))}var f,m,g=t.value,v=9==p.a.W?u:h,_=!1;o&&l("keypress",h),11>o&&l("propertychange",(function(e){_||"value"!==e.propertyName||v(e)})),8==o&&(l("keyup",h),l("keydown",h)),d&&(d(t,v),l("dragend",u)),(!o||9<=o)&&l("input",v),5>i&&"textarea"===p.a.R(t)?(l("keydown",u),l("paste",u),l("cut",u)):11>n?l("keydown",u):4>r?(l("DOMAutoComplete",h),l("dragdrop",h),l("drop",h)):a&&"number"===t.type&&l("keydown",u),l("change",h),l("blur",h),p.o((function n(){var i=p.a.f(s());null!==i&&i!==e||(i=""),m!==e&&i===m?p.a.setTimeout(n,4):t.value!==i&&(_=!0,t.value=i,_=!1,g=t.value)}),null,{l:t})}},p.m.wa.textInput=!0,p.c.textinput={preprocess:function(e,t,n){n("textInput",e)}}}(),p.c.uniqueName={init:function(e,t){if(t()){var n="ko_unique_"+ ++p.c.uniqueName.rd;p.a.Yc(e,n)}}},p.c.uniqueName.rd=0,p.c.using={init:function(e,t,n,i,r){var o;return n.has("as")&&(o={as:n.get("as"),noChildContext:n.get("noChildContext")}),t=r.createChildContext(t,o),p.Oa(t,e),{controlsDescendantBindings:!0}}},p.h.ea.using=!0,p.c.value={init:function(t,n,i){var r=p.a.R(t),o="input"==r;if(!o||"checkbox"!=t.type&&"radio"!=t.type){var a=[],s=i.get("valueUpdate"),c=!1,l=null;s&&(a="string"==typeof s?[s]:p.a.wc(s),p.a.Pa(a,"change"));var u,h,d=function(){l=null,c=!1;var e=n(),r=p.w.M(t);p.m.eb(e,i,"value",r)};!p.a.W||!o||"text"!=t.type||"off"==t.autocomplete||t.form&&"off"==t.form.autocomplete||-1!=p.a.A(a,"propertychange")||(p.a.B(t,"propertychange",(function(){c=!0})),p.a.B(t,"focus",(function(){c=!1})),p.a.B(t,"blur",(function(){c&&d()}))),p.a.D(a,(function(e){var n=d;p.a.Ud(e,"after")&&(n=function(){l=p.w.M(t),p.a.setTimeout(d,0)},e=e.substring(5)),p.a.B(t,e,n)})),u=o&&"file"==t.type?function(){var i=p.a.f(n());null===i||i===e||""===i?t.value="":p.u.G(d)}:function(){var o=p.a.f(n()),a=p.w.M(t);null!==l&&o===l?p.a.setTimeout(u,0):o===a&&a!==e||("select"===r?(a=i.get("valueAllowUnset"),p.w.cb(t,o,a),a||o===p.w.M(t)||p.u.G(d)):p.w.cb(t,o))},"select"===r?p.i.subscribe(t,p.i.H,(function(){h?i.get("valueAllowUnset")?u():d():(p.a.B(t,"change",d),h=p.o(u,null,{l:t}))}),null,{notifyImmediately:!0}):(p.a.B(t,"change",d),p.o(u,null,{l:t}))}else p.ib(t,{checkedValue:n})},update:function(){}},p.m.wa.value=!0,p.c.visible={update:function(e,t){var n=p.a.f(t()),i="none"!=e.style.display;n&&!i?e.style.display="":!n&&i&&(e.style.display="none")}},p.c.hidden={update:function(e,t){p.c.visible.update(e,(function(){return!p.a.f(t())}))}},x="click",p.c[x]={init:function(e,t,n,i,r){return p.c.event.init.call(this,e,(function(){var e={};return e[x]=t(),e}),n,i,r)}},p.ca=function(){},p.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},p.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},p.ca.prototype.makeTemplateSource=function(e,t){if("string"==typeof e){var i=(t=t||n).getElementById(e);if(!i)throw Error("Cannot find template with ID "+e);return new p.C.F(i)}if(1==e.nodeType||8==e.nodeType)return new p.C.ia(e);throw Error("Unknown template type: "+e)},p.ca.prototype.renderTemplate=function(e,t,n,i){return e=this.makeTemplateSource(e,i),this.renderTemplateSource(e,t,n,i)},p.ca.prototype.isTemplateRewritten=function(e,t){return!1===this.allowTemplateRewriting||this.makeTemplateSource(e,t).data("isRewritten")},p.ca.prototype.rewriteTemplate=function(e,t,n){t=t((e=this.makeTemplateSource(e,n)).text()),e.text(t),e.data("isRewritten",!0)},p.b("templateEngine",p.ca),p.kc=function(){function e(e,t,n,i){e=p.m.ac(e);for(var r=p.m.Ra,o=0;o<e.length;o++){var a=e[o].key;if(Object.prototype.hasOwnProperty.call(r,a)){var s=r[a];if("function"===typeof s){if(a=s(e[o].value))throw Error(a)}else if(!s)throw Error("This template engine does not support the '"+a+"' binding within its templates")}}return n="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+p.m.vb(e,{valueAccessors:!0})+" } })()},'"+n.toLowerCase()+"')",i.createJavaScriptEvaluatorBlock(n)+t}var t=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,n=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(e,t,n){t.isTemplateRewritten(e,n)||t.rewriteTemplate(e,(function(e){return p.kc.Ld(e,t)}),n)},Ld:function(i,r){return i.replace(t,(function(t,n,i,o,a){return e(a,n,i,r)})).replace(n,(function(t,n){return e(n,"\x3c!-- ko --\x3e","#comment",r)}))},md:function(e,t){return p.aa.Xb((function(n,i){var r=n.nextSibling;r&&r.nodeName.toLowerCase()===t&&p.ib(r,e,i)}))}}}(),p.b("__tr_ambtns",p.kc.md),function(){p.C={},p.C.F=function(e){if(this.F=e){var t=p.a.R(e);this.ab="script"===t?1:"textarea"===t?2:"template"==t&&e.content&&11===e.content.nodeType?3:4}},p.C.F.prototype.text=function(){var e=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.F[e];var t=arguments[0];"innerHTML"===e?p.a.fc(this.F,t):this.F[e]=t};var t=p.a.g.Z()+"_";p.C.F.prototype.data=function(e){if(1===arguments.length)return p.a.g.get(this.F,t+e);p.a.g.set(this.F,t+e,arguments[1])};var n=p.a.g.Z();p.C.F.prototype.nodes=function(){var t=this.F;if(0==arguments.length){var i=p.a.g.get(t,n)||{},r=i.lb||(3===this.ab?t.content:4===this.ab?t:e);if(!r||i.jd){var o=this.text();o&&o!==i.bb&&(r=p.a.Md(o,t.ownerDocument),p.a.g.set(t,n,{lb:r,bb:o,jd:!0}))}return r}i=arguments[0],this.ab!==e&&this.text(""),p.a.g.set(t,n,{lb:i})},p.C.ia=function(e){this.F=e},p.C.ia.prototype=new p.C.F,p.C.ia.prototype.constructor=p.C.ia,p.C.ia.prototype.text=function(){if(0==arguments.length){var t=p.a.g.get(this.F,n)||{};return t.bb===e&&t.lb&&(t.bb=t.lb.innerHTML),t.bb}p.a.g.set(this.F,n,{bb:arguments[0]})},p.b("templateSources",p.C),p.b("templateSources.domElement",p.C.F),p.b("templateSources.anonymousTemplate",p.C.ia)}(),function(){function t(e,t,n){var i;for(t=p.h.nextSibling(t);e&&(i=e)!==t;)n(i,e=p.h.nextSibling(i))}function n(e,n){if(e.length){var i=e[0],r=e[e.length-1],o=i.parentNode,a=p.ga.instance,s=a.preprocessNode;if(s){if(t(i,r,(function(e,t){var n=e.previousSibling,o=s.call(a,e);o&&(e===i&&(i=o[0]||t),e===r&&(r=o[o.length-1]||n))})),e.length=0,!i)return;i===r?e.push(i):(e.push(i,r),p.a.Ua(e,o))}t(i,r,(function(e){1!==e.nodeType&&8!==e.nodeType||p.vc(n,e)})),t(i,r,(function(e){1!==e.nodeType&&8!==e.nodeType||p.aa.cd(e,[n])})),p.a.Ua(e,o)}}function i(e){return e.nodeType?e:0<e.length?e[0]:null}function r(e,t,r,o,s){s=s||{};var c=(e&&i(e)||r||{}).ownerDocument,l=s.templateEngine||a;if(p.kc.xd(r,l,c),"number"!=typeof(r=l.renderTemplate(r,o,s,c)).length||0<r.length&&"number"!=typeof r[0].nodeType)throw Error("Template engine must return an array of DOM nodes");switch(c=!1,t){case"replaceChildren":p.h.va(e,r),c=!0;break;case"replaceNode":p.a.Xc(e,r),c=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+t)}return c&&(n(r,o),s.afterRender&&p.u.G(s.afterRender,null,[r,o[s.as||"$data"]]),"replaceChildren"==t&&p.i.ma(e,p.i.H)),r}function o(e,t,n){return p.O(e)?e():"function"===typeof e?e(t,n):e}var a;p.gc=function(t){if(t!=e&&!(t instanceof p.ca))throw Error("templateEngine must inherit from ko.templateEngine");a=t},p.dc=function(t,n,s,c,l){if(((s=s||{}).templateEngine||a)==e)throw Error("Set a template engine before calling renderTemplate");if(l=l||"replaceChildren",c){var u=i(c);return p.$((function(){var e=n&&n instanceof p.fa?n:new p.fa(n,null,null,null,{exportDependencies:!0}),a=o(t,e.$data,e);e=r(c,l,a,e,s),"replaceNode"==l&&(u=i(c=e))}),null,{Sa:function(){return!u||!p.a.Sb(u)},l:u&&"replaceNode"==l?u.parentNode:u})}return p.aa.Xb((function(e){p.dc(t,n,s,e,"replaceNode")}))},p.Qd=function(t,i,a,s,c){function l(e,t){p.u.G(p.a.ec,null,[s,e,h,a,u,t]),p.i.ma(s,p.i.H)}function u(e,t){n(t,d),a.afterRender&&a.afterRender(t,e),d=null}function h(e,n){d=c.createChildContext(e,{as:f,noChildContext:a.noChildContext,extend:function(e){e.$index=n,f&&(e[f+"Index"]=n)}});var i=o(t,e,d);return r(s,"ignoreTargetNode",i,d,a)}var d,f=a.as,m=!1===a.includeDestroyed||p.options.foreachHidesDestroyed&&!a.includeDestroyed;if(m||a.beforeRemove||!p.Pc(i))return p.$((function(){var t=p.a.f(i)||[];"undefined"==typeof t.length&&(t=[t]),m&&(t=p.a.jb(t,(function(t){return t===e||null===t||!p.a.f(t._destroy)}))),l(t)}),null,{l:s});l(i.v());var g=i.subscribe((function(e){l(i(),e)}),null,"arrayChange");return g.l(s),g};var s=p.a.g.Z(),c=p.a.g.Z();p.c.template={init:function(e,t){var n=p.a.f(t());if("string"==typeof n||"name"in n)p.h.Ea(e);else if("nodes"in n){if(n=n.nodes||[],p.O(n))throw Error('The "nodes" option must be a plain, non-observable array.');var i=n[0]&&n[0].parentNode;i&&p.a.g.get(i,c)||(i=p.a.Yb(n),p.a.g.set(i,c,!0)),new p.C.ia(e).nodes(i)}else{if(!(0<(n=p.h.childNodes(e)).length))throw Error("Anonymous template defined, but no template content was provided");i=p.a.Yb(n),new p.C.ia(e).nodes(i)}return{controlsDescendantBindings:!0}},update:function(t,n,i,r,o){var a=n();i=!0,r=null,"string"==typeof(n=p.a.f(a))?n={}:(a="name"in n?n.name:t,"if"in n&&(i=p.a.f(n.if)),i&&"ifnot"in n&&(i=!p.a.f(n.ifnot)),i&&!a&&(i=!1)),"foreach"in n?r=p.Qd(a,i&&n.foreach||[],n,t,o):i?(i=o,"data"in n&&(i=o.createChildContext(n.data,{as:n.as,noChildContext:n.noChildContext,exportDependencies:!0})),r=p.dc(a,i,n,t)):p.h.Ea(t),o=r,(n=p.a.g.get(t,s))&&"function"==typeof n.s&&n.s(),p.a.g.set(t,s,!o||o.ja&&!o.ja()?e:o)}},p.m.Ra.template=function(e){return 1==(e=p.m.ac(e)).length&&e[0].unknown||p.m.Id(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"},p.h.ea.template=!0}(),p.b("setTemplateEngine",p.gc),p.b("renderTemplate",p.dc),p.a.Kc=function(e,t,n){var i,r,o,a,s;if(e.length&&t.length)for(i=r=0;(!n||i<n)&&(a=e[r]);++r){for(o=0;s=t[o];++o)if(a.value===s.value){a.moved=s.index,s.moved=a.index,t.splice(o,1),i=o=0;break}i+=o}},p.a.Pb=function(){function e(e,t,n,i,r){var o,a,s,c,l,u=Math.min,h=Math.max,d=[],f=e.length,m=t.length,g=m-f||1,v=f+m+1;for(o=0;o<=f;o++)for(c=s,d.push(s=[]),l=u(m,o+g),a=h(0,o-1);a<=l;a++)s[a]=a?o?e[o-1]===t[a-1]?c[a-1]:u(c[a]||v,s[a-1]||v)+1:a+1:o+1;for(u=[],h=[],g=[],o=f,a=m;o||a;)m=d[o][a]-1,a&&m===d[o][a-1]?h.push(u[u.length]={status:n,value:t[--a],index:a}):o&&m===d[o-1][a]?g.push(u[u.length]={status:i,value:e[--o],index:o}):(--a,--o,r.sparse||u.push({status:"retained",value:t[a]}));return p.a.Kc(g,h,!r.dontLimitMoves&&10*f),u.reverse()}return function(t,n,i){return i="boolean"===typeof i?{dontLimitMoves:i}:i||{},n=n||[],(t=t||[]).length<n.length?e(t,n,"added","deleted",i):e(n,t,"deleted","added",i)}}(),p.b("utils.compareArrays",p.a.Pb),function(){function t(t,n,i,r,o){var a=[],s=p.$((function(){var e=n(i,o,p.a.Ua(a,t))||[];0<a.length&&(p.a.Xc(a,e),r&&p.u.G(r,null,[i,e,o])),a.length=0,p.a.Nb(a,e)}),null,{l:t,Sa:function(){return!p.a.kd(a)}});return{Y:a,$:s.ja()?s:e}}var n=p.a.g.Z(),i=p.a.g.Z();p.a.ec=function(r,o,a,s,c,l){function u(e){f={Aa:e,pb:p.ta(O++)},y.push(f),b||S.push(f)}function h(e){f=_[e],O!==f.pb.v()&&T.push(f),f.pb(O++),p.a.Ua(f.Y,r),y.push(f)}function d(e,t){if(e)for(var n=0,i=t.length;n<i;n++)p.a.D(t[n].Y,(function(i){e(i,n,t[n].Aa)}))}"undefined"==typeof(o=o||[]).length&&(o=[o]),s=s||{};var f,m,g,v,_=p.a.g.get(r,n),b=!_,y=[],w=0,O=0,C=[],A=[],x=[],T=[],S=[],D=0;if(b)p.a.D(o,u);else{if(!l||_&&_._countWaitingForRemove){var P=p.a.Mb(_,(function(e){return e.Aa}));l=p.a.Pb(P,o,{dontLimitMoves:s.dontLimitMoves,sparse:!0})}var I,M,R;for(P=0;I=l[P];P++)switch(M=I.moved,R=I.index,I.status){case"deleted":for(;w<R;)h(w++);M===e&&((f=_[w]).$&&(f.$.s(),f.$=e),p.a.Ua(f.Y,r).length&&(s.beforeRemove&&(y.push(f),D++,f.Aa===i?f=null:x.push(f)),f&&C.push.apply(C,f.Y))),w++;break;case"added":for(;O<R;)h(w++);M!==e?(A.push(y.length),h(M)):u(I.value)}for(;O<o.length;)h(w++);y._countWaitingForRemove=D}p.a.g.set(r,n,y),d(s.beforeMove,T),p.a.D(C,s.beforeRemove?p.oa:p.removeNode);try{v=r.ownerDocument.activeElement}catch(E){}if(A.length)for(;(P=A.shift())!=e;){for(f=y[P],m=e;P;)if((g=y[--P].Y)&&g.length){m=g[g.length-1];break}for(o=0;w=f.Y[o];m=w,o++)p.h.Wb(r,w,m)}for(P=0;f=y[P];P++){for(f.Y||p.a.extend(f,t(r,a,f.Aa,c,f.pb)),o=0;w=f.Y[o];m=w,o++)p.h.Wb(r,w,m);!f.Ed&&c&&(c(f.Aa,f.Y,f.pb),f.Ed=!0,m=f.Y[f.Y.length-1])}for(v&&r.ownerDocument.activeElement!=v&&v.focus(),d(s.beforeRemove,x),P=0;P<x.length;++P)x[P].Aa=i;d(s.afterMove,T),d(s.afterAdd,S)}}(),p.b("utils.setDomNodeChildrenFromArrayMapping",p.a.ec),p.ba=function(){this.allowTemplateRewriting=!1},p.ba.prototype=new p.ca,p.ba.prototype.constructor=p.ba,p.ba.prototype.renderTemplateSource=function(e,t,n,i){return(t=9>p.a.W||!e.nodes?null:e.nodes())?p.a.la(t.cloneNode(!0).childNodes):(e=e.text(),p.a.ua(e,i))},p.ba.Ma=new p.ba,p.gc(p.ba.Ma),p.b("nativeTemplateEngine",p.ba),function(){p.$a=function(){var e=this.Hd=function(){if(!r||!r.tmpl)return 0;try{if(0<=r.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(e){}return 1}();this.renderTemplateSource=function(t,i,o,a){if(a=a||n,o=o||{},2>e)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var s=t.data("precompiled");return s||(s=t.text()||"",s=r.template(null,"{{ko_with $item.koBindingContext}}"+s+"{{/ko_with}}"),t.data("precompiled",s)),t=[i.$data],i=r.extend({koBindingContext:i},o.templateOptions),(i=r.tmpl(s,t,i)).appendTo(a.createElement("div")),r.fragments={},i},this.createJavaScriptEvaluatorBlock=function(e){return"{{ko_code ((function() { return "+e+" })()) }}"},this.addTemplate=function(e,t){n.write("<script type='text/html' id='"+e+"'>"+t+"<\/script>")},0<e&&(r.tmpl.tag.ko_code={open:"__.push($1 || '');"},r.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},p.$a.prototype=new p.ca,p.$a.prototype.constructor=p.$a;var e=new p.$a;0<e.Hd&&p.gc(e),p.b("jqueryTmplTemplateEngine",p.$a)}()}))}();var i=ko;"undefined"!==typeof window?(ko=window.ko,"undefined"!==typeof n?window.ko=n:delete window.ko):(ko=e.ko,"undefined"!==typeof n?e.ko=n:delete e.ko),t.a=i}).call(this,n(55))},function(e,t,n){"use strict";function i(e,t){return(i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={CENTER:"center",LEFT:"left",RIGHT:"right"}},function(e,t){e.exports=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}},,,function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var i=n(26),r=n(2),o=n(5),a=function(e){function t(t){var n=e.call(this,t)||this;return n.style=n.calculateStyle(t.variableLength),n}return Object(i.c)(t,e),t.prototype.componentDidUpdate=function(e){(!e.loading&&this.props.loading||e.variableLength!==this.props.variableLength)&&(this.style=this.calculateStyle(this.props.variableLength))},t.prototype.render=function(){return this.props.loading?r.createElement("div",{className:o.Classes.SKELETON,style:this.style}):r.Children.only(this.props.children)},t.prototype.calculateStyle=function(e){return{width:(e?75-5*Math.floor(11*Math.random()):100)+"%"}},t}(r.PureComponent)},function(e,t,n){"use strict";n.d(t,"e",(function(){return r})),n.d(t,"a",(function(){return o})),n.d(t,"d",(function(){return a})),n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return c}));var i=n(2);function r(e,t){return void 0===t&&(t=!1),null==e||""===e||!1===e||!t&&Array.isArray(e)&&(0===e.length||e.every((function(e){return r(e,!0)})))}function o(e,t){return void 0===t&&(t="span"),null==e||"boolean"===typeof e?void 0:"string"===typeof e?e.trim().length>0?i.createElement(t,{},e):void 0:"number"===typeof e||"symbol"===typeof e.type||Array.isArray(e)?i.createElement(t,{},e):a(e)?e:void 0}function a(e){return"object"===typeof e&&"undefined"!==typeof e.type&&"undefined"!==typeof e.props}function s(e){return e.displayName||e.name||"Unknown"}function c(e,t){return null!=e&&null!=e.type&&null!=e.type.displayName&&e.type.displayName===t.displayName}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){(t=e.exports=n(261)).Stream=t,t.Readable=t,t.Writable=n(220),t.Duplex=n(107),t.Transform=n(265),t.PassThrough=n(457)},function(e,t,n){(function(e){function n(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===n(e)},t.isBoolean=function(e){return"boolean"===typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"===typeof e},t.isString=function(e){return"string"===typeof e},t.isSymbol=function(e){return"symbol"===typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===n(e)},t.isObject=function(e){return"object"===typeof e&&null!==e},t.isDate=function(e){return"[object Date]"===n(e)},t.isError=function(e){return"[object Error]"===n(e)||e instanceof Error},t.isFunction=function(e){return"function"===typeof e},t.isPrimitive=function(e){return null===e||"boolean"===typeof e||"number"===typeof e||"string"===typeof e||"symbol"===typeof e||"undefined"===typeof e},t.isBuffer=e.isBuffer}).call(this,n(84).Buffer)},function(e,t,n){"use strict";var i=n(280),r="function"===typeof Symbol&&"symbol"===typeof Symbol("foo"),o=Object.prototype.toString,a=Array.prototype.concat,s=Object.defineProperty,c=s&&function(){var e={};try{for(var t in s(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(n){return!1}}(),l=function(e,t,n,i){var r;(!(t in e)||"function"===typeof(r=i)&&"[object Function]"===o.call(r)&&i())&&(c?s(e,t,{configurable:!0,enumerable:!1,value:n,writable:!0}):e[t]=n)},u=function(e,t){var n=arguments.length>2?arguments[2]:{},o=i(t);r&&(o=a.call(o,Object.getOwnPropertySymbols(t)));for(var s=0;s<o.length;s+=1)l(e,o[s],t[o[s]],n[o[s]])};u.supportsDescriptors=!!c,e.exports=u},function(e,t,n){"use strict";var i=Object.assign;e.exports=i},function(e,t,n){"use strict";var i=n(317);e.exports=function(e,t){var n=e[e.length-1];return n&&n[1].type===t?i(n[2].sliceStream(n[1])):0}},function(e,t,n){"use strict";var i=n(105)(/[\dA-Za-z]/);e.exports=i},function(e,t,n){"use strict";e.exports=function(e,t){var n=[],r=-1,o=e.length;t&&n.push(i("text","\n"));for(;++r<o;)r&&n.push(i("text","\n")),n.push(e[r]);t&&e.length>0&&n.push(i("text","\n"));return n};var i=n(75)},function(e,t,n){var i=n(82).Symbol;e.exports=i},function(e,t,n){var i=n(356),r=n(644),o=n(118);e.exports=function(e){return o(e)?i(e):r(e)}},function(e,t){e.exports=function(e,t){return e===t||e!==e&&t!==t}},function(e,t,n){var i=n(375),r=n(245);e.exports=function(e,t,n,o){var a=!n;n||(n={});for(var s=-1,c=t.length;++s<c;){var l=t[s],u=o?o(n[l],e[l],l,n,e):void 0;void 0===u&&(u=e[l]),a?r(n,l,u):i(n,l,u)}return n}},function(e,t,n){var i=n(356),r=n(712),o=n(118);e.exports=function(e){return o(e)?i(e,!0):r(e)}},function(e,t,n){"use strict";var i=n(42),r=n(0),o=n(3),a={},s={};a.add=function(e,t){if(!Object(r.a)(e))throw new o.a("host is required.");if(!Object(r.a)(t)||t<=0)throw new o.a("port is required to be greater than 0.");var n=e.toLowerCase()+":"+t;Object(r.a)(s[n])||(s[n]=!0)},a.remove=function(e,t){if(!Object(r.a)(e))throw new o.a("host is required.");if(!Object(r.a)(t)||t<=0)throw new o.a("port is required to be greater than 0.");var n=e.toLowerCase()+":"+t;Object(r.a)(s[n])&&delete s[n]},a.contains=function(e){if(!Object(r.a)(e))throw new o.a("url is required.");var t=function(e){var t=new i.a(e);t.normalize();var n=t.getAuthority();if(Object(r.a)(n)){if(-1!==n.indexOf("@")){var o=n.split("@");n=o[1]}if(-1===n.indexOf(":")){var a=t.getScheme();if(Object(r.a)(a)||(a=(a=window.location.protocol).substring(0,a.length-1)),"http"===a)n+=":80";else{if("https"!==a)return;n+=":443"}}return n}}(e);return!(!Object(r.a)(t)||!Object(r.a)(s[t]))},a.clear=function(){s={}},t.a=a},function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return r}));var i={add:["M10.99 6.99h-2v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z"],"add-column-left":["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 14H2V2h8v12zm4 0h-3V2h3v12zM4 9h1v1c0 .55.45 1 1 1s1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1H7V6c0-.55-.45-1-1-1s-1 .45-1 1v1H4c-.55 0-1 .45-1 1s.45 1 1 1z"],"add-column-right":["M8 9h1v1c0 .55.45 1 1 1s1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V6c0-.55-.45-1-1-1s-1 .45-1 1v1H8c-.55 0-1 .45-1 1s.45 1 1 1zm7-9H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 14H2V2h3v12zm9 0H6V2h8v12z"],"add-row-bottom":["M6 11h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1H9V8c0-.55-.45-1-1-1s-1 .45-1 1v1H6c-.55 0-1 .45-1 1s.45 1 1 1zm9-11H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V6h12v8zm0-9H2V2h12v3z"],"add-row-top":["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2v-3h12v3zm0-4H2V2h12v8zM6 7h1v1c0 .55.45 1 1 1s1-.45 1-1V7h1c.55 0 1-.45 1-1s-.45-1-1-1H9V4c0-.55-.45-1-1-1s-1 .45-1 1v1H6c-.55 0-1 .45-1 1s.45 1 1 1z"],"add-to-artifact":["M14 4.01h-1v-1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1 0-.56-.45-1-1-1zm-13 2h6c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm8 6H1c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1 0-.56-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1 0-.56-.45-1-1-1z"],"add-to-folder":["M.01 7V5H16v7c0 .55-.45 1-1 1H9.005v-2.99C8.974 8.332 7.644 7 5.996 7H.01zM15 2H7.416L5.706.29a.996.996 0 00-.71-.29H1C.45 0 0 .45 0 1v3h15.99V3c.01-.55-.44-1-.99-1zM5.997 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.589L.3 14.29a1.003 1.003 0 001.42 1.42l3.287-3.29v1.59c0 .55.45 1 1 1 .549 0 .999-.45.999-1v-4A1.02 1.02 0 005.996 9z"],airplane:["M16 1.5A1.498 1.498 0 0013.44.44L9.91 3.97 2 1 1 3l5.93 3.95L3.88 10H1l-1 1 3 2 2 3 1-1v-2.88l3.05-3.05L13 15l2-1-2.97-7.91 3.53-3.53c.27-.27.44-.65.44-1.06z"],"align-center":["M4 4c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H4zM1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm13 10H2c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm1-6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-5 5c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1h4z"],"align-justify":["M15 12.98H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-14-10h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1 0 .56.45 1 1 1zm14 4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-3H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0 6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"align-left":["M13 13H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zM1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 3h8c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 12h4c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z"],"align-right":["M15 12.98H3c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm-14-10h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1 0 .56.45 1 1 1zm14 1H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0 6h-4c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1zm0-3H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"alignment-bottom":["M10 12h3c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm5 2H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h3c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1z"],"alignment-horizontal-center":["M15 7h-1V6c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v1H7V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v4H1c-.55 0-1 .45-1 1s.45 1 1 1h1v4c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V9h2v1c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1z"],"alignment-left":["M9 9H5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zM1 0C.45 0 0 .45 0 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm13 2H5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],"alignment-right":["M11 9H7c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zm4-9c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-4 2H2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],"alignment-top":["M15 0H1C.45 0 0 .45 0 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM6 4H3c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm7 0h-3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z"],"alignment-vertical-center":["M13 2H9V1c0-.55-.45-1-1-1S7 .45 7 1v1H3c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4v2H6c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1H9V7h4c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],annotation:["M15.52 2.77c.3-.29.48-.7.48-1.15C16 .73 15.27 0 14.38 0c-.45 0-.85.18-1.15.48l-1.34 1.34 2.3 2.3 1.33-1.35zM7.4 10.9l6.21-6.21-2.3-2.3L5.1 8.6l2.3 2.3zM14 14H2V2h6.34l2-2H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5.66l-2 2V14zM3 13l3.58-1.29-2.29-2.27L3 13z"],"app-header":["M15 0a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h14zM6 4a1 1 0 00-1.993-.117L4 4v8a1 1 0 001.993.117L6 12V9h4v3a1 1 0 001.993.117L12 12V4a1 1 0 00-1.993-.117L10 4v3H6V4z"],application:["M3.5 7h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5zM15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm-1 12H2V5h12v8zM3.5 9h4c.28 0 .5-.22.5-.5S7.78 8 7.5 8h-4c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5z"],applications:["M3.5 11h2c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-2c-.28 0-.5.22-.5.5s.22.5.5.5zm0-2h5c.28 0 .5-.22.5-.5S8.78 8 8.5 8h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM11 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V7h8v7zm5-14H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM3.5 13h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-3c-.28 0-.5.22-.5.5s.22.5.5.5z"],archive:["M13.382 0a1 1 0 01.894.553L16 4v11a1 1 0 01-1 1H1a1 1 0 01-1-1V4L1.724.553A1 1 0 012.618 0h10.764zM8 6c-.55 0-1 .45-1 1v2.59l-.29-.29-.081-.076A.97.97 0 006 9a1.003 1.003 0 00-.71 1.71l2 2 .096.084c.168.13.38.206.614.206.28 0 .53-.11.71-.29l2-2 .084-.096A1.003 1.003 0 009.29 9.29l-.29.3V7l-.007-.116A1.004 1.004 0 008 6zm5-4H3L2 4h12l-1-2z"],"arrow-bottom-left":["M14 3a1.003 1.003 0 00-1.71-.71L4 10.59V6c0-.55-.45-1-1-1s-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1H5.41l8.29-8.29c.19-.18.3-.43.3-.71z"],"arrow-bottom-right":["M13 5c-.55 0-1 .45-1 1v4.59l-8.29-8.3a1.003 1.003 0 00-1.42 1.42l8.3 8.29H6c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z"],"arrow-down":["M13 8c-.3 0-.5.1-.7.3L9 11.6V2c0-.5-.4-1-1-1s-1 .5-1 1v9.6L3.7 8.3C3.5 8.1 3.3 8 3 8c-.5 0-1 .5-1 1 0 .3.1.5.3.7l5 5c.2.2.4.3.7.3s.5-.1.7-.3l5-5c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1z"],"arrow-left":["M13.99 6.99H4.41L7.7 3.7a1.003 1.003 0 00-1.42-1.42l-5 5a1.014 1.014 0 000 1.42l5 5a1.003 1.003 0 001.42-1.42L4.41 8.99H14c.55 0 1-.45 1-1s-.46-1-1.01-1z"],"arrow-right":["M14.7 7.29l-5-5a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l3.29 3.29H1.99c-.55 0-1 .45-1 1s.45 1 1 1h9.59l-3.29 3.29a1.003 1.003 0 001.42 1.42l5-5c.18-.18.29-.43.29-.71s-.12-.52-.3-.7z"],"arrow-top-left":["M13.71 12.29L5.41 4H10c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V5.41l8.29 8.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"arrow-top-right":["M13 2H6c-.55 0-1 .45-1 1s.45 1 1 1h4.59L2.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L12 5.41V10c0 .55.45 1 1 1s1-.45 1-1V3c0-.55-.45-1-1-1z"],"arrow-up":["M13.7 6.3l-5-5C8.5 1.1 8.3 1 8 1s-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L7 4.4V14c0 .6.4 1 1 1s1-.4 1-1V4.4l3.3 3.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7z"],"arrows-horizontal":["M15.7 7.3l-4-4c-.2-.2-.4-.3-.7-.3-.6 0-1 .5-1 1 0 .3.1.5.3.7L12.6 7H3.4l2.3-2.3c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1-.3 0-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7s.1.5.3.7l4 4c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7L3.4 9h9.2l-2.3 2.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l4-4c.2-.2.3-.4.3-.7s-.1-.5-.3-.7z"],"arrows-vertical":["M12 10c-.3 0-.5.1-.7.3L9 12.6V3.4l2.3 2.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7l-4-4C8.5.1 8.3 0 8 0s-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L7 3.4v9.2l-2.3-2.3c-.2-.2-.4-.3-.7-.3-.5 0-1 .4-1 1 0 .3.1.5.3.7l4 4c.2.2.4.3.7.3s.5-.1.7-.3l4-4c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1z"],asterisk:["M14.54 11.18l.01-.02L9.8 8l4.75-3.17-.01-.02c.27-.17.46-.46.46-.81 0-.55-.45-1-1-1-.21 0-.39.08-.54.18l-.01-.02L9 6.13V1c0-.55-.45-1-1-1S7 .45 7 1v5.13L2.55 3.17l-.01.01A.969.969 0 002 3c-.55 0-1 .45-1 1 0 .35.19.64.46.82l-.01.01L6.2 8l-4.75 3.17.01.02c-.27.17-.46.46-.46.81 0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02L7 9.87V15c0 .55.45 1 1 1s1-.45 1-1V9.87l4.45 2.96.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1 0-.35-.19-.64-.46-.82z"],"automatic-updates":["M8 14c-3.31 0-6-2.69-6-6 0-1.77.78-3.36 2-4.46V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1h1.74A7.95 7.95 0 000 8c0 4.42 3.58 8 8 8 .55 0 1-.45 1-1s-.45-1-1-1zM8 2a5.9 5.9 0 012.95.81l1.47-1.47A7.893 7.893 0 008 0c-.55 0-1 .45-1 1s.45 1 1 1zm2.71 6.71l5-5a1.003 1.003 0 00-1.42-1.42L10 6.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29s.53-.11.71-.29zM16 8c0-.55-.06-1.08-.16-1.6l-1.87 1.87A5.966 5.966 0 0112 12.45V11c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-1.74A7.95 7.95 0 0016 8z"],backlink:["M14 10a1 1 0 110 2h-.585l2.292 2.293a1 1 0 01-1.32 1.497l-.094-.083L12 13.415V14a1 1 0 11-2 0l.003-3.075.012-.1.012-.059.033-.108.034-.081.052-.098.067-.096.08-.09a1.01 1.01 0 01.112-.097l.11-.071.143-.065.076-.024.091-.02.116-.014L14 10zM6.036 6.136l-3.45 3.45-.117.127a2 2 0 002.818 2.818l.127-.117 3.45-3.449a4 4 0 01-.885 3.704l-.15.16-1 1A4 4 0 011.02 8.33l.15-.16 1-1a3.998 3.998 0 013.865-1.035zm4.671-1.843a1 1 0 01.083 1.32l-.083.094-5 5a1 1 0 01-1.497-1.32l.083-.094 5-5a1 1 0 011.414 0zm3.121-3.121a4 4 0 01.151 5.497l-.15.16-1 1a3.998 3.998 0 01-3.864 1.036l3.45-3.45.116-.128a2 2 0 00-2.818-2.818l-.127.117-3.45 3.45A4 4 0 017.02 2.33l.15-.16 1-1a4 4 0 015.657 0z"],badge:["M13.36 4.59c-.15-1.13.5-2.01 1.1-2.87L13.43.53c-1.72.88-4.12.65-5.63-.53-1.51 1.18-3.91 1.41-5.63.52l-1.03 1.2c.61.86 1.25 1.74 1.1 2.87-.3 2.29-2.45 4.17-1.32 6.68.45 1.14 1.44 1.9 2.72 2.2 1.56.36 3.52.72 4.16 2.53.64-1.81 2.6-2.16 4.16-2.54 1.28-.3 2.27-1.06 2.72-2.2 1.12-2.5-1.03-4.38-1.32-6.67z"],"ban-circle":["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm3 9H5c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1z"],"bank-account":["M15.36 6.46l-.62-.14c-.31-1.12-.98-2.15-1.87-2.99l.4-1.77a.438.438 0 00-.49-.56c-.85.09-1.6.42-2.14.98-.84-.32-1.87-.51-2.85-.51-2.49 0-4.63 1.17-5.92 2.89-.18-.04-.36-.09-.53-.09-.76 0-1.34.61-1.34 1.4 0 .56.31 1.03.76 1.26-.05.33-.09.7-.09 1.07 0 1.68.71 3.17 1.83 4.34l-.27 1.59c-.09.56.35 1.07.89 1.07h.58c.45 0 .8-.33.89-.79l.04-.37c.94.42 2 .7 3.16.7 1.11 0 2.23-.23 3.16-.7l.05.37c.09.47.45.79.89.79h.58c.53 0 .98-.51.89-1.07l-.27-1.54c.62-.61 1.07-1.35 1.38-2.15l.8-.19c.4-.09.71-.47.71-.93V7.4c.09-.47-.22-.84-.62-.94zM12 8c-.6 0-1-.7-1-1.5S11.4 5 12 5s1 .7 1 1.5S12.6 8 12 8zM6.21 4.92c-.41.2-.91.04-1.12-.36-.21-.4-.04-.88.37-1.07 1.35-.65 2.73-.65 4.08 0 .41.2.58.68.37 1.07-.21.4-.71.56-1.12.36-.87-.43-1.71-.43-2.58 0z"],barcode:["M0 14h2V2H0v12zm6 0h1V2H6v12zm2 0h1V2H8v12zm-5 0h2V2H3v12zM15 2v12h1V2h-1zm-5 12h1V2h-1v12zm2 0h2V2h-2v12z"],blank:[],"blocked-person":["M9.39 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.07-.01-.13-.02-.2.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.13-.39.27-.06.43-.36.5-.63.01-.03.03-.08.05-.12C8.18 7.8 6.94 6.04 6.94 4c0-.32.04-.62.09-.92-.17-.03-.35-.08-.51-.08-.65 0-1.37.2-1.88.59-.5.38-.87.92-1.05 1.51-.04.14-.07.27-.09.41-.09.48-.14 1.23-.14 1.74v.06c-.19.08-.36.27-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.12 15.5.03 16 .03 16h12.96s.15-.5-.22-1.36c-.37-.85-2.18-1.42-3.38-1.95zM11.97 0C9.75 0 7.94 1.79 7.94 4s1.8 4 4.03 4S16 6.21 16 4s-1.8-4-4.03-4zM9.96 4c0-1.1.9-2 2.01-2 .37 0 .72.11 1.02.28l-2.75 2.73c-.17-.3-.28-.64-.28-1.01zm2.01 2c-.37 0-.72-.11-1.02-.28l2.75-2.73c.18.3.28.64.28 1.01.01 1.1-.9 2-2.01 2z"],bold:["M11.7 7c.2-.4.3-1 .3-1.5v-.4V5c0-.1 0-.2-.1-.3v-.1C11.4 3.1 10.1 2 8.5 2H4c-.5 0-1 .4-1 1v10c0 .5.4 1 1 1h5c2.2 0 4-1.8 4-4 0-1.2-.5-2.3-1.3-3zM6 5h2c.6 0 1 .4 1 1s-.4 1-1 1H6V5zm3 6H6V9h3c.6 0 1 .4 1 1s-.4 1-1 1z"],book:["M2 1v14c0 .55.45 1 1 1h1V0H3c-.55 0-1 .45-1 1zm11-1h-1v7l-2-2-2 2V0H5v16h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],bookmark:["M11.2.01h-.15C11.03.01 11.02 0 11 0H5c-.02 0-.03.01-.05.01H4.8c-.44 0-.8.37-.8.82v14.75c0 .45.25.56.57.24l2.87-2.94c.31-.32.82-.32 1.13 0l2.87 2.94c.31.32.57.21.57-.24V.83C12 .38 11.64.01 11.2.01z"],box:["M6 10h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1zm9.93-4.37v-.02L13.94.63C13.78.26 13.42 0 13 0H3c-.42 0-.78.26-.93.63L.08 5.61l-.01.02C.03 5.74 0 5.87 0 6v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.13-.03-.26-.07-.37zM9 2h3.32l1.2 3H9V2zM3.68 2H7v3H2.48l1.2-3zM14 14H2V7h12v7z"],briefcase:["M15 3.98h-3v-2c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v4h3v-1h2v1h6v-1h2v1h3v-4c0-.55-.45-1-1-1zm-5 0H6v-1h4v1zm3 7h-2v-1H5v1H3v-1H0v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-4h-3v1z"],"bring-data":["M14 14a1 1 0 010 2H2a1 1 0 010-2h12zM7.995 3.005c.55 0 1 .45 1 .999v5.584l1.29-1.288a1.002 1.002 0 011.42 1.419l-3 2.996a1.015 1.015 0 01-1.42 0l-3-2.997A1.002 1.002 0 015.705 8.3l1.29 1.29V4.013c0-.55.45-1.009 1-1.009zM14 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zM8 0a1 1 0 110 2 1 1 0 010-2zM5 0a1 1 0 110 2 1 1 0 010-2zM2 0a1 1 0 110 2 1 1 0 010-2z"],build:["M15.39 12.41L7.7 6l1.07-1.1c.34-.34-.12-.63.12-1.26.88-2.17 3.41-2.35 3.41-2.35s.36-.37.71-.72C9.74-.81 7.53.53 6.54 1.4L3.12 4.9l-.71.72c-.39.4-.39 1.05 0 1.45l-.7.72c-.39-.4-1.02-.4-1.41 0s-.39 1.05 0 1.45l1.41 1.45c.39.4 1.02.4 1.41 0s.39-1.05 0-1.45l.71-.72c.39.4 1.02.4 1.41 0l.8-.82 6.39 7.67c.82.82 2.14.82 2.96 0 .81-.82.81-2.15 0-2.96z"],calculator:["M13 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM6 14H4v-2h2v2zm0-3H4V9h2v2zm0-3H4V6h2v2zm3 6H7v-2h2v2zm0-3H7V9h2v2zm0-3H7V6h2v2zm3 6h-2V9h2v5zm0-6h-2V6h2v2zm0-3H4V2h8v3z"],calendar:["M11 3c.6 0 1-.5 1-1V1c0-.6-.4-1-1-1s-1 .4-1 1v1c0 .5.4 1 1 1zm3-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H6v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h13c.6 0 1-.4 1-1V2c0-.6-.5-1-1-1zM5 13H2v-3h3v3zm0-4H2V6h3v3zm4 4H6v-3h3v3zm0-4H6V6h3v3zm4 4h-3v-3h3v3zm0-4h-3V6h3v3zM4 3c.6 0 1-.5 1-1V1c0-.6-.4-1-1-1S3 .4 3 1v1c0 .5.4 1 1 1z"],camera:["M15 3h-2.59L10.7 1.29A.956.956 0 0010 1H6c-.28 0-.53.11-.71.29L3.59 3H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h2.56c1.1 1.22 2.67 2 4.44 2s3.34-.78 4.44-2H15c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM3 6H1V5h2v1zm5 6c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],"caret-down":["M12 6.5c0-.28-.22-.5-.5-.5h-7a.495.495 0 00-.37.83l3.5 4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z"],"caret-left":["M9.5 4c-.13 0-.24.05-.33.13l-4 3.5c-.1.09-.17.22-.17.37s.07.28.17.37l4 3.5a.495.495 0 00.83-.37v-7c0-.28-.22-.5-.5-.5z"],"caret-right":["M11 8c0-.15-.07-.28-.17-.37l-4-3.5A.495.495 0 006 4.5v7a.495.495 0 00.83.37l4-3.5c.1-.09.17-.22.17-.37z"],"caret-up":["M11.87 9.17s.01 0 0 0l-3.5-4C8.28 5.07 8.15 5 8 5s-.28.07-.37.17l-3.5 4a.495.495 0 00.37.83h7a.495.495 0 00.37-.83z"],"cell-tower":["M8.97 6.76c-.01-.05-.04-.08-.06-.13-.02-.05-.03-.1-.05-.15.08-.14.14-.3.14-.48 0-.55-.45-1-1-1s-1 .45-1 1c0 .18.06.34.14.48-.03.05-.03.1-.05.15-.02.05-.05.08-.06.13l-2 8c-.13.54.19 1.08.73 1.21a.995.995 0 001.21-.73L7.53 13h.94l.56 2.24a1 1 0 001.94-.48l-2-8zM3.72 1.7C4.1 1.3 4.09.67 3.7.28S2.67-.09 2.28.3c-3.05 3.12-3.05 8.28 0 11.4a.996.996 0 101.43-1.39c-2.28-2.35-2.28-6.27.01-8.61zM11.6 3.2c-.44-.33-1.07-.24-1.4.2-.33.44-.24 1.07.2 1.4.43.32.53 1.96-.04 2.43-.42.35-.48.98-.13 1.41.35.42.98.48 1.41.13 1.59-1.33 1.39-4.5-.04-5.57z","M13.72.3c-.39-.4-1.02-.4-1.41-.02s-.41 1.02-.03 1.42c2.29 2.34 2.29 6.26 0 8.6-.39.39-.38 1.03.02 1.41s1.03.38 1.41-.02c3.05-3.11 3.05-8.27.01-11.39zM5.4 7.23c-.57-.47-.47-2.11-.04-2.43.44-.33.53-.96.2-1.4s-.96-.53-1.4-.2c-1.44 1.07-1.63 4.24-.04 5.57.42.35 1.05.3 1.41-.13.35-.42.29-1.06-.13-1.41z"],changes:["M8.29 7.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L13 7.59V1c0-.55-.45-1-1-1s-1 .45-1 1v6.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42zM14.5 13h-13c-.83 0-1.5.67-1.5 1.5S.67 16 1.5 16h13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5zM1 5c.28 0 .53-.11.71-.29L3 3.41V10c0 .55.45 1 1 1s1-.45 1-1V3.41L6.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C4.53.11 4.28 0 4 0s-.53.11-.71.29l-3 3A1.003 1.003 0 001 5z"],chart:["M0 15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V9.4L0 11v4zm6-5.5V15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-5l-1 1-3-1.5zM13 7l-1 1v7c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V7.88c-.26.07-.58.12-1 .12-1.96 0-2-1-2-1zm2-6h-3c-.55 0-1 .45-1 1s.45 1 1 1h.59L8.8 6.78 5.45 5.11v.01C5.31 5.05 5.16 5 5 5s-.31.05-.44.11V5.1l-4 2v.01C.23 7.28 0 7.61 0 8c0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L5 7.12 8.55 8.9v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L14 4.41V5c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],chat:["M6 10c-1.1 0-2-.9-2-2V3H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1v2a1.003 1.003 0 001.71.71L5.41 13H10c.55 0 1-.45 1-1v-1.17l-.83-.83H6zm9-10H6c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"chevron-backward":["M7.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L6 6.59V4c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1s1-.45 1-1V9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L7.41 8z"],"chevron-down":["M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 5z"],"chevron-forward":["M10 3c-.55 0-1 .45-1 1v2.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L7.59 8 4.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L9 9.41V12c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z"],"chevron-left":["M7.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C5.11 7.47 5 7.72 5 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L7.41 8z"],"chevron-right":["M10.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"chevron-up":["M12.71 9.29l-4-4C8.53 5.11 8.28 5 8 5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],circle:["M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z"],"circle-arrow-down":["M11 7c-.28 0-.53.11-.71.29L9 8.59V5c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 7zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],"circle-arrow-left":["M11 7H7.41L8.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C4.11 7.47 4 7.72 4 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L7.41 9H11c.55 0 1-.45 1-1s-.45-1-1-1zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],"circle-arrow-right":["M8.71 4.29a1.003 1.003 0 00-1.42 1.42L8.59 7H5c-.55 0-1 .45-1 1s.45 1 1 1h3.59L7.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],"circle-arrow-up":["M8.71 4.29C8.53 4.11 8.28 4 8 4s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L7 7.41V11c0 .55.45 1 1 1s1-.45 1-1V7.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],citation:["M15.02 5c0-1.66-1.34-3-3-3s-3 1.34-3 3a2.996 2.996 0 003.6 2.94C12.1 9.76 11.14 11 10.02 11c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5-3.13 5-7 0-.2-.02-.39-.04-.58.01-.14.04-.28.04-.42zm-11-3c-1.66 0-3 1.34-3 3a2.996 2.996 0 003.6 2.94C4.1 9.76 3.14 11 2.02 11c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5-3.13 5-7 0-.2-.02-.39-.04-.58.01-.14.04-.28.04-.42 0-1.66-1.35-3-3-3z"],clean:["M12 8l-1.2 2.796-2.8 1.2 2.8 1.197L12 16l1.2-2.807L16 12l-2.8-1.204zM5 0L3.5 3.5 0 4.995 3.5 6.5 5 10l1.5-3.5L10 5 6.5 3.5z"],clipboard:["M11 2c0-.55-.45-1-1-1h.22C9.88.4 9.24 0 8.5 0S7.12.4 6.78 1H7c-.55 0-1 .45-1 1v1h5V2zm2 0h-1v2H5V2H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],cloud:["M12 6c-.03 0-.07 0-.1.01A5 5 0 002 7c0 .11.01.22.02.33A3.51 3.51 0 000 10.5C0 12.43 1.57 14 3.5 14H12c2.21 0 4-1.79 4-4s-1.79-4-4-4z"],"cloud-download":["M11 11c-.28 0-.53.11-.71.29L9 12.59V8c0-.55-.45-1-1-1s-1 .45-1 1v4.59L5.71 11.3A.965.965 0 005 11a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 11zm1-7c-.03 0-.07 0-.1.01A5 5 0 002 5c0 .11.01.22.02.33A3.51 3.51 0 000 8.5c0 1.41.84 2.61 2.03 3.17C2.2 10.17 3.46 9 5 9c.06 0 .13.02.19.02C5.07 8.7 5 8.36 5 8c0-1.66 1.34-3 3-3s3 1.34 3 3c0 .36-.07.7-.19 1.02.06 0 .13-.02.19-.02 1.48 0 2.7 1.07 2.95 2.47A3.964 3.964 0 0016 8c0-2.21-1.79-4-4-4z"],"cloud-upload":["M8.71 7.29C8.53 7.11 8.28 7 8 7s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L7 10.41V15c0 .55.45 1 1 1s1-.45 1-1v-4.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM12 4c-.03 0-.07 0-.1.01A5 5 0 002 5c0 .11.01.22.02.33a3.495 3.495 0 00.07 6.37c-.05-.23-.09-.46-.09-.7 0-.83.34-1.58.88-2.12l3-3a2.993 2.993 0 014.24 0l3 3c.54.54.88 1.29.88 2.12 0 .16-.02.32-.05.47C15.17 10.78 16 9.5 16 8c0-2.21-1.79-4-4-4z"],code:["M15.71 7.29l-3-3a1.003 1.003 0 00-1.42 1.42L13.59 8l-2.29 2.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM5 5a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L2.41 8 4.7 5.71c.19-.18.3-.43.3-.71zm4-3c-.48 0-.87.35-.96.81l-2 10c-.01.06-.04.12-.04.19 0 .55.45 1 1 1 .48 0 .87-.35.96-.81l2-10c.01-.06.04-.12.04-.19 0-.55-.45-1-1-1z"],"code-block":["M15 3h-2V2c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v1H7V2c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-8.29 8.29a1.003 1.003 0 01-1.42 1.42l-3-3C2.11 9.53 2 9.28 2 9s.11-.53.29-.71l3-3a1.003 1.003 0 011.42 1.42L4.41 9l2.3 2.29zm7-1.58l-3 3a1.003 1.003 0 01-1.42-1.42L11.59 9l-2.3-2.29a1.003 1.003 0 011.42-1.42l3 3c.18.18.29.43.29.71s-.11.53-.29.71z"],cog:["M15.19 6.39h-1.85c-.11-.37-.27-.71-.45-1.04l1.36-1.36c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0l-1.36 1.36c-.33-.17-.67-.33-1.04-.44V.79c0-.44-.36-.8-.8-.8h-1.6c-.44 0-.8.36-.8.8v1.86c-.39.12-.75.28-1.1.47l-1.3-1.3c-.3-.3-.79-.3-1.09 0L1.82 2.91c-.3.3-.3.79 0 1.09l1.3 1.3c-.2.34-.36.7-.48 1.09H.79c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.85c.11.37.27.71.45 1.04l-1.36 1.36c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.36-1.36c.33.18.67.33 1.04.44v1.86c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.86c.39-.12.75-.28 1.1-.47l1.3 1.3c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1.3-1.3c.19-.35.36-.71.48-1.1h1.85c.44 0 .8-.36.8-.8v-1.6a.816.816 0 00-.81-.79zm-7.2 4.6c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"],"collapse-all":["M7.29 6.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L8 4.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4zm1.42 2.58C8.53 9.11 8.28 9 8 9s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 11.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z"],"column-layout":["M15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 13H2V3h2v10zm3 0H5V3h2v10zm7 0H8V3h6v10z"],comment:["M14 1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h2v3a1.003 1.003 0 001.71.71L8.41 12H14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM3.5 8C2.67 8 2 7.33 2 6.5S2.67 5 3.5 5 5 5.67 5 6.5 4.33 8 3.5 8zm4 0C6.67 8 6 7.33 6 6.5S6.67 5 7.5 5 9 5.67 9 6.5 8.33 8 7.5 8zm4 0c-.83 0-1.5-.67-1.5-1.5S10.67 5 11.5 5s1.5.67 1.5 1.5S12.33 8 11.5 8z"],comparison:["M7.99-.01c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1v-14c0-.55-.45-1-1-1zm-3 3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm10 0h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-4v-2h4v2zm0 3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-4v-2h4v2zm-10-3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z"],compass:["M12 8c0 .14-.03.27-.08.39l-3 6.99c-.15.37-.51.62-.92.62s-.77-.25-.92-.61l-3-6.99a1.006 1.006 0 010-.79l3-6.99C7.23.25 7.59 0 8 0s.77.25.92.61l3 6.99c.05.13.08.26.08.4zM8 3.54L6.09 8h3.82L8 3.54z"],compressed:["M15.93 5.63v-.02L13.94.63C13.78.26 13.42 0 13 0H3c-.42 0-.78.26-.93.63L.08 5.61l-.01.02C.03 5.74 0 5.87 0 6v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.13-.03-.26-.07-.37zM9 2h3.32l1.2 3H9V2zM3.68 2H7v3H2.48l1.2-3zM14 14H2V7h5v2.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L9 9.59V7h5v7z"],confirm:["M8.7 4.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l5-5a1.003 1.003 0 00-1.42-1.42l-4.29 4.3L8.7 4.29zm5.22 3.01c.03.23.07.45.07.69 0 3.31-2.69 6-6 6s-6-2.69-6-6 2.69-6 6-6c.81 0 1.59.17 2.3.46l1.5-1.5A7.998 7.998 0 00-.01 7.99c0 4.42 3.58 8 8 8s8-3.58 8-8c0-.83-.13-1.64-.36-2.39l-1.71 1.7z"],console:["M15 15H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h14c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zM14 5H2v8h12V5zM4 6c.28 0 .53.11.71.29l2 2c.18.18.29.43.29.71s-.11.53-.29.71l-2 2a1.003 1.003 0 01-1.42-1.42L4.59 9l-1.3-1.29A1.003 1.003 0 014 6zm5 4h3c.55 0 1 .45 1 1s-.45 1-1 1H9c-.55 0-1-.45-1-1s.45-1 1-1z"],contrast:["M15.2 6.4h-1.44c-.13-.47-.32-.92-.56-1.34L14.26 4c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0L10.94 2.8c-.42-.24-.86-.42-1.34-.56V.8c0-.44-.36-.8-.8-.8H7.2c-.44 0-.8.36-.8.8v1.44c-.5.14-.96.34-1.4.59l-1-1c-.3-.3-.79-.3-1.09 0L1.83 2.91c-.3.3-.3.79 0 1.09l1 1c-.25.44-.45.9-.59 1.4H.8c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.44c.13.47.32.92.56 1.34L1.74 12c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.06-1.06c.42.24.86.42 1.34.56v1.44c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.44c.5-.14.96-.33 1.4-.59l1 1c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1-1c.25-.43.45-.9.59-1.4h1.44c.44 0 .8-.36.8-.8V7.2a.818.818 0 00-.81-.8zM8 12c-2.21 0-4-1.79-4-4s1.79-4 4-4v8z"],control:["M13 8H8v5h5V8zm0-5H8v4h5V3zm2-3H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V2h12v12zM7 3H3v10h4V3z"],"credit-card":["M14.99 2.95h-14c-.55 0-1 .45-1 1v1h16v-1c0-.55-.45-1-1-1zm-15 10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-6h-16v6zm5.5-2h5c.28 0 .5.22.5.5s-.22.5-.5.5h-5c-.28 0-.5-.22-.5-.5s.23-.5.5-.5zm-3 0h1c.28 0 .5.22.5.5s-.22.5-.5.5h-1c-.28 0-.5-.22-.5-.5s.23-.5.5-.5z"],cross:["M9.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z"],crown:["M2 6l3 2 3-4 3 4 3-2-1 6H3L2 6zm6-5a1 1 0 110 2 1 1 0 010-2zM1 3a1 1 0 110 2 1 1 0 010-2zm14 0a1 1 0 110 2 1 1 0 010-2zM3 13h10v2H3v-2z"],cube:["M14.194 3.54L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l5.698 3.255zm.75.71a1 1 0 01.056.33v6.84a1 1 0 01-.504.868L8.5 15.714V8.277l6.444-4.027zm-13.888 0L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33z"],"cube-add":["M14 2h1a1 1 0 010 2h-1v1a1 1 0 01-2 0V4h-1a1 1 0 010-2h1V1a1 1 0 012 0v1zM9.136.65a3.001 3.001 0 00.992 5.222c.018.058.038.115.059.172L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l.64.365zM15 7.235v4.184a1 1 0 01-.504.868L8.5 15.714V8.277l2.187-1.367A2.994 2.994 0 0013 8c.768 0 1.47-.289 2-.764zM1.056 4.25L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33z"],"cube-remove":["M10.365 5.933L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l.64.365a3.001 3.001 0 001.228 5.283zM15 6v5.42a1 1 0 01-.504.868L8.5 15.714V8.277L12.143 6H15zM1.056 4.25L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33zM11 2h4a1 1 0 010 2h-4a1 1 0 010-2z"],"curved-range-chart":["M15 12H3.12l1.81-1.39c1.73 1.01 5.53-.03 9.08-2.61l-1.22-1.5C10.3 8.3 7.86 9.37 6.65 9.29L14.3 3.4l-.6-.8-7.83 6.03c-.01-1.07 1.8-3.19 4.47-5.13L9.12 2C5.38 4.7 3.34 8.1 4.25 9.87L2 11.6V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],cut:["M13 2s.71-1.29 0-2L8.66 5.07l1.05 1.32L13 2zm.07 8c-.42 0-.82.09-1.18.26L3.31 0c-.69.71 0 2 0 2l3.68 5.02-2.77 3.24A2.996 2.996 0 000 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-.46-.11-.89-.29-1.27L8.1 8.54l2.33 3.19c-.18.39-.29.82-.29 1.27 0 1.66 1.31 3 2.93 3S16 14.66 16 13s-1.31-3-2.93-3zM3 14c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm10.07 0c-.54 0-.98-.45-.98-1s.44-1 .98-1 .98.45.98 1-.44 1-.98 1z"],cycle:["M13 9a3 3 0 110 6 3 3 0 010-6zM3 9a3 3 0 110 6 3 3 0 010-6zm6.169-5.27l.087.09 1.51 1.746 1.589.549a1 1 0 01.65 1.16l-.032.112a1 1 0 01-1.159.65l-.112-.032-1.843-.636a1 1 0 01-.337-.198l-.092-.093-.959-1.109L7.041 7.5l1.691 1.819a1 1 0 01.26.556L9 10v3a1 1 0 01-1.993.117L7 13l-.001-2.608-2.056-2.211a1 1 0 01-.081-1.264l.082-.1 2.825-3.026a1 1 0 011.4-.061zM13 10.5a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm-10 0a1.5 1.5 0 100 3 1.5 1.5 0 000-3zM11 1a1.5 1.5 0 110 3 1.5 1.5 0 010-3z"],dashboard:["M5 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM4 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-2c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-2 6c0 1.1.9 2 2 2s2-.9 2-2c0-.53-2-5-2-5s-2 4.47-2 5zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm4-9c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm0 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"],"data-lineage":["M1.067 0C.477 0 0 .478 0 1.067V3.2c0 .59.478 1.067 1.067 1.067h2.24a5.342 5.342 0 002.9 3.734 5.337 5.337 0 00-2.9 3.733h-2.24C.477 11.733 0 12.21 0 12.8v2.133C0 15.523.478 16 1.067 16H6.4c.59 0 1.067-.478 1.067-1.067V12.8c0-.59-.478-1.067-1.067-1.067H4.401a4.27 4.27 0 013.92-3.194l.212-.006V9.6c0 .59.478 1.067 1.067 1.067h5.333c.59 0 1.067-.478 1.067-1.067V6.4c0-.59-.478-1.067-1.067-1.067H9.6c-.59 0-1.067.478-1.067 1.067v1.067a4.268 4.268 0 01-4.132-3.2H6.4c.59 0 1.067-.478 1.067-1.067V1.067C7.467.477 6.989 0 6.4 0H1.067z"],database:["M8 4c3.31 0 6-.9 6-2s-2.69-2-6-2C4.68 0 2 .9 2 2s2.68 2 6 2zm-6-.48V8c0 1.1 2.69 2 6 2s6-.9 6-2V3.52C12.78 4.4 10.56 5 8 5s-4.78-.6-6-1.48zm0 6V14c0 1.1 2.69 2 6 2s6-.9 6-2V9.52C12.78 10.4 10.56 11 8 11s-4.78-.6-6-1.48z"],delete:["M11.99 4.99a1.003 1.003 0 00-1.71-.71l-2.29 2.3L5.7 4.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2.29 2.29-2.29 2.29A1.003 1.003 0 005.7 11.7l2.29-2.29 2.29 2.29a1.003 1.003 0 001.42-1.42L9.41 7.99 11.7 5.7c.18-.18.29-.43.29-.71zm-4-5c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z"],delta:["M8 0L0 16h16L8 0zM7 5l5 10H2L7 5z"],"derive-column":["M6.08 6.67h-.84c.24-.92.56-1.6.96-2.03.24-.27.48-.4.71-.4.05 0 .08.01.11.04s.04.06.04.1c0 .04-.03.11-.1.21-.06.1-.1.2-.1.29 0 .13.05.24.15.33.1.09.23.14.39.14.17 0 .31-.06.42-.17A.58.58 0 008 4.73c0-.22-.09-.39-.26-.53-.17-.13-.44-.2-.81-.2-.59 0-1.12.16-1.59.48-.48.32-.93.85-1.36 1.59-.15.26-.29.42-.42.49s-.35.11-.64.1l-.19.65h.81l-1.19 4.37c-.2.72-.33 1.16-.4 1.33-.1.24-.26.45-.46.62-.08.07-.18.1-.3.1-.03 0-.06-.01-.08-.03l-.03-.04c0-.02.03-.06.09-.11.06-.06.09-.14.09-.26 0-.13-.05-.23-.14-.32a.6.6 0 00-.4-.13c-.21 0-.38.05-.51.16s-.21.25-.21.4c0 .16.08.3.23.42.16.12.4.18.74.18.53 0 .99-.13 1.4-.39.41-.26.76-.65 1.07-1.19.3-.54.62-1.4.94-2.59l.68-2.53h.82l.2-.63zM15 0H8c-.55 0-1 .45-1 1v2h2V2h5v12H9v-1H7v2c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM8.3 9.94c.18.52.33.89.46 1.13.13.24.28.4.44.51.17.1.37.16.62.16.24 0 .49-.08.74-.25.33-.21.66-.58 1.01-1.09l-.21-.11c-.23.31-.41.5-.52.57a.44.44 0 01-.26.07c-.12 0-.24-.07-.36-.21-.2-.24-.46-.91-.8-2 .3-.49.55-.81.75-.96.15-.11.3-.16.47-.16.06 0 .17.02.34.06.16.04.31.06.43.06.17 0 .31-.06.43-.17.1-.11.16-.25.16-.43 0-.19-.06-.33-.17-.44-.12-.11-.28-.16-.49-.16-.19 0-.37.04-.54.13-.17.09-.39.27-.65.56-.2.21-.48.58-.87 1.11-.15-.66-.41-1.26-.78-1.81l-2.05.33-.04.21c.15-.03.28-.04.39-.04.2 0 .37.08.5.25.21.26.5 1.03.88 2.33-.29.37-.49.61-.6.72-.18.18-.33.3-.44.36-.09.04-.19.07-.3.07-.09 0-.23-.04-.42-.13a.866.866 0 00-.36-.09c-.2 0-.36.06-.49.18a.59.59 0 00-.19.46c0 .17.06.32.18.43.12.11.28.16.48.16.2 0 .38-.04.55-.11.17-.08.39-.24.65-.49.24-.27.6-.66 1.06-1.21z"],desktop:["M15 0H1C.45 0 0 .45 0 1v10c0 .55.45 1 1 1h4.75l-.5 2H4c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1h-1.25l-.5-2H15c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 10H2V2h12v8z"],diagnosis:["M3.2 1a1 1 0 01.117 1.993L3.2 3H3v3a2 2 0 001.85 1.995L5 8a2 2 0 001.995-1.85L7 6V3h-.2a1 1 0 01-.993-.883L5.8 2a1 1 0 01.883-.993L6.8 1H8a1 1 0 01.993.883L9 2v4a4.002 4.002 0 01-3.007 3.876v.007L6 10a3 3 0 005.995.176L12 10V7.792a2.5 2.5 0 112 0V10a5 5 0 01-10 0c0-.042.003-.084.008-.125A4 4 0 011.005 6.2L1 6V2a1 1 0 01.883-.993L2 1h1.2z"],"diagram-tree":["M15 8v3h-2V9H9v2H7V9H3v2H1V8a1 1 0 011-1h5V5h2v2h5a1 1 0 011 1zM1 12h2a1 1 0 011 1v2a1 1 0 01-1 1H1a1 1 0 01-1-1v-2a1 1 0 011-1zm12 0h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2a1 1 0 011-1zm-6 0h2a1 1 0 011 1v2a1 1 0 01-1 1H7a1 1 0 01-1-1v-2a1 1 0 011-1zM7 0h2a1 1 0 011 1v2a1 1 0 01-1 1H7a1 1 0 01-1-1V1a1 1 0 011-1z"],"direction-left":["M16 1.99l-16 6 16 6-4-6z"],"direction-right":["M16 7.99l-16-6 4 6-4 6z"],disable:["M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-6 8c0-3.31 2.69-6 6-6 1.3 0 2.49.42 3.47 1.12l-8.35 8.35c-.7-.98-1.12-2.17-1.12-3.47zm6 6c-1.3 0-2.49-.42-3.47-1.12l8.35-8.35c.7.98 1.12 2.17 1.12 3.47 0 3.32-2.68 6-6 6z"],document:["M9 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5L9 0zm3 14H4V2h4v4h4v8z"],"document-open":["M6 12c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1h1.59L1.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L6 10.41V12zm4-12H4c-.55 0-1 .45-1 1v4h2V2h4v4h4v8H5.24l-1.8 1.8c.16.12.35.2.56.2h10c.55 0 1-.45 1-1V5l-5-5z"],"document-share":["M10 14H2V2h4v4h1c0-.83.36-1.55.91-2.09l-.03-.03.9-.9C8.3 2.45 8 1.77 8 1L7 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V8.22c-.53.48-1.23.78-2 .78v5zm5-14h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 3.41V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],dollar:["M12.83 9.51c-.1-.3-.25-.58-.45-.84s-.45-.49-.75-.7c-.3-.2-.65-.36-1.05-.48-.16-.04-.43-.11-.8-.2-.35-.09-.73-.18-1.12-.28-.39-.1-.74-.19-1.06-.27-.31-.08-.49-.12-.54-.13-.43-.12-.78-.29-1.05-.52-.27-.23-.4-.55-.4-.95 0-.29.07-.53.21-.72.14-.19.32-.34.54-.46.22-.11.46-.19.72-.24.26-.05.52-.08.77-.08.74 0 1.35.15 1.83.46.48.3.75.83.81 1.56h2.14c0-.6-.13-1.13-.38-1.58-.25-.45-.59-.84-1.02-1.15-.43-.31-.93-.54-1.49-.7-.24-.06-.49-.1-.75-.14V1c0-.55-.45-1-1-1s-1 .45-1 1v1.08c-.23.03-.46.07-.68.13-.54.13-1.02.34-1.44.61-.42.28-.76.63-1.02 1.05-.26.43-.39.93-.39 1.5 0 .3.04.59.13.88.09.29.23.56.44.82.21.26.48.49.83.7.35.21.79.38 1.31.51.85.21 1.56.38 2.14.52.58.13 1.08.28 1.52.42.25.09.48.23.69.44.21.21.32.53.32.97 0 .21-.05.42-.14.63-.09.21-.24.39-.45.55-.21.16-.47.29-.81.39-.33.1-.73.15-1.2.15-.43 0-.84-.05-1.21-.14-.37-.09-.7-.24-.99-.43-.29-.2-.51-.45-.67-.76-.16-.31-.24-.68-.24-1.12H3c.01.71.15 1.32.43 1.84.27.52.64.94 1.1 1.27.46.33.99.58 1.61.74.27.07.56.12.85.16V15c0 .55.45 1 1 1s1-.45 1-1v-1.05c.3-.03.61-.08.9-.15.58-.13 1.1-.34 1.56-.63.46-.29.83-.66 1.11-1.11.28-.45.42-1 .42-1.64 0-.31-.05-.61-.15-.91z"],dot:["M8 5a3 3 0 100 6 3 3 0 100-6z"],"double-caret-horizontal":["M13.71 7.29l-3-3A1.003 1.003 0 009 5v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM6 4c-.28 0-.53.11-.71.29l-3 3C2.11 7.47 2 7.72 2 8c0 .28.11.53.29.71l3 3A1.003 1.003 0 007 11V5c0-.55-.45-1-1-1z"],"double-caret-vertical":["M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z"],"double-chevron-down":["M7.29 8.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4zM12 8c-.28 0-.53.11-.71.29L8 11.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 8z"],"double-chevron-left":["M4.41 8L7.7 4.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C2.11 7.47 2 7.72 2 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.41 8zm5 0l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C7.11 7.47 7 7.72 7 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L9.41 8z"],"double-chevron-right":["M9 8c0-.28-.11-.53-.29-.71l-4-4a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4C8.89 8.53 9 8.28 9 8zm4.71-.71l-4-4a1.003 1.003 0 00-1.42 1.42L11.59 8 8.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"double-chevron-up":["M4 8c.28 0 .53-.11.71-.29L8 4.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-4 4A1.003 1.003 0 004 8zm4.71-.71C8.53 7.11 8.28 7 8 7s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z"],"doughnut-chart":["M11.86 7h4.05C15.45 3.39 12.61.52 9 .07v4.07A4 4 0 0111.86 7zM12 8c0 2.21-1.79 4-4 4s-4-1.79-4-4 1.79-4 4-4V0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8h-4z"],download:["M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM11.7 9.7l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-3-3A1.003 1.003 0 015.7 8.28l1.29 1.29V3.99c0-.55.45-1 1-1s1 .45 1 1v5.59l1.29-1.29a1.003 1.003 0 011.71.71c0 .27-.11.52-.29.7z"],"drag-handle-horizontal":["M2 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm8-2c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-4-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"],"drag-handle-vertical":["M6 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-6c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zM6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4 8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"],draw:["M14.9 11c-.3 0-.5.1-.7.3l-3 3c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1zm-1-1v-.2l-1-5c-.1-.3-.3-.6-.6-.7l-11-4-.3.3 5.8 5.8c.2-.1.4-.2.6-.2.8 0 1.5.7 1.5 1.5S8.3 9 7.4 9s-1.5-.7-1.5-1.5c0-.2.1-.4.2-.6L.3 1.1l-.3.3 4 11c.1.3.4.6.7.6l5 1h.2c.3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7z"],"drawer-left":["M7 0a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h6zM6 2H2v12h4V2zm2 5h4.59L11.3 5.71A.965.965 0 0111 5a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42L12.59 9H8V7z"],"drawer-left-filled":["M1 0h6a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1zm7 7h4.59L11.3 5.71A.965.965 0 0111 5a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42L12.59 9H8V7z"],"drawer-right":["M15 0a1 1 0 011 1v14a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1h6zm-1 2h-4v12h4V2zM8 7H3.41L4.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 9H8V7z"],"drawer-right-filled":["M9 0h6a1 1 0 011 1v14a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1zM8 7H3.41L4.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 9H8V7z"],"drive-time":["M15.12 4.76h-1.05l-.76-2.12c-.19-.53-.76-1.08-1.27-1.24 0 0-1.32-.4-4.04-.4-2.72 0-4.04.4-4.04.4-.5.16-1.07.71-1.26 1.24l-.77 2.12H.88c-.48 0-.88.42-.88.94s.4.94.88.94h.38L1 7c-.03.69 0 1.44 0 2v5c0 .66.38 1 1 1s1-.34 1-1v-1h10v1c0 .66.38 1 1 1s1-.34 1-1V9c0-.56-.01-1.37 0-2l-.26-.37h.38c.48 0 .88-.42.88-.93 0-.52-.4-.94-.88-.94zM5 10H3V8h2v2zm8 0h-2V8h2v2zm0-4H3c-.18 0-.06-.82 0-1l.73-1.63C3.79 3.19 3.82 3 4 3h8c.18 0 .21.19.27.37L13 5c.06.18.18 1 0 1z"],duplicate:["M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z"],edit:["M3.25 10.26l2.47 2.47 6.69-6.69-2.46-2.48-6.7 6.7zM.99 14.99l3.86-1.39-2.46-2.44-1.4 3.83zm12.25-14c-.48 0-.92.2-1.24.51l-1.44 1.44 2.47 2.47 1.44-1.44c.32-.32.51-.75.51-1.24.01-.95-.77-1.74-1.74-1.74z"],eject:["M4 9h8a1.003 1.003 0 00.71-1.71l-4-4C8.53 3.11 8.28 3 8 3s-.53.11-.71.29l-4 4A1.003 1.003 0 004 9zm8 1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1z"],endorsed:["M15.86 7.5l-.81-1.42V4.5c0-.36-.19-.68-.49-.87l-1.37-.8-.81-1.41c-.19-.31-.51-.49-.86-.49H9.89L8.5.14a.948.948 0 00-1 0l-1.39.8H4.52a1 1 0 00-.86.49l-.8 1.37-1.44.83c-.3.19-.49.51-.49.87v1.65l-.8 1.37c-.08.15-.13.32-.13.49s.05.34.14.49l.8 1.37v1.65c0 .36.19.68.49.87l1.42.81.8 1.37c.19.31.51.49.86.49H6.1l1.39.8c.15.09.32.14.48.14s.34-.05.49-.14l1.39-.8h1.63a1 1 0 00.86-.49l.81-1.41 1.37-.8c.3-.19.49-.51.49-.87V9.93l.81-1.42a.89.89 0 00.04-1.01zm-4.12-.82l-4.01 4.01c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-2-2c-.18-.19-.3-.44-.3-.71a1.003 1.003 0 011.71-.71l1.3 1.3 3.3-3.3a1.003 1.003 0 011.71.71.95.95 0 01-.29.7z"],envelope:["M0 3.06v9.88L4.94 8 0 3.06zM14.94 2H1.06L8 8.94 14.94 2zm-6.41 8.53c-.14.14-.32.22-.53.22s-.39-.08-.53-.22L6 9.06 1.06 14h13.88L10 9.06l-1.47 1.47zM11.06 8L16 12.94V3.06L11.06 8z"],equals:["M3 5h10a1 1 0 010 2H3a1 1 0 110-2zm0 4h10a1 1 0 010 2H3a1 1 0 010-2z"],eraser:["M8.06 13.91l7.63-7.44c.41-.4.41-1.05 0-1.45L10.86.3c-.41-.4-1.08-.4-1.49 0L.31 9.13c-.41.4-.41 1.05 0 1.45l5.58 5.44h8.12v-.01c.55 0 1-.45 1-1s-.45-1-1-1H7.96l.1-.1zm-2.17.06L1.67 9.85l4.22-4.11 4.22 4.11-4.22 4.12z"],error:["M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13h-2v-2h2v2zm0-3h-2v-7h2v7z"],euro:["M6.52 3.18c.51-.27 1.12-.4 1.83-.4.48 0 .91.06 1.27.18.37.12.68.29.96.51.18.14.3.33.44.51l1.53-1.53c-.12-.11-.23-.22-.36-.32a5.61 5.61 0 00-1.74-.83c-.66-.2-1.36-.3-2.1-.3-.99 0-1.88.18-2.66.53-.79.35-1.45.82-2 1.41-.55.58-.96 1.27-1.26 2.06H2c-.55 0-1 .45-1 1s.45 1 1 1h.04c-.01.17-.04.33-.04.5 0 .17.03.33.04.5H2c-.55 0-1 .45-1 1s.45 1 1 1h.43c0 .01 0 .02.01.02a6.2 6.2 0 001.25 2.07 5.77 5.77 0 002 1.4c.78.34 1.67.51 2.66.51.81 0 1.54-.12 2.21-.36.67-.24 1.25-.59 1.75-1.03l.03-.03-1.55-1.33c-.01.01-.02.03-.03.04-.29.3-.63.53-1.02.69-.4.17-.85.25-1.37.25-.71 0-1.32-.13-1.83-.4s-.93-.62-1.25-1.07c-.19-.24-.34-.49-.46-.76H9c.55 0 1-.45 1-1s-.45-1-1-1H4.35c-.01-.17-.03-.33-.03-.5 0-.17.02-.34.03-.5H10c.55 0 1-.45 1-1s-.45-1-1-1H4.83c.13-.27.27-.52.44-.76.32-.44.74-.8 1.25-1.06zM14 8.98v0z"],exchange:["M1.99 5.99c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zm4.15 1.86a.495.495 0 10.7-.7L5.7 5.99h5.79c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H5.7l1.15-1.15a.495.495 0 10-.7-.7l-2 2c-.1.09-.16.21-.16.35s.06.26.15.35l2 2.01zm7.85-1.86c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zM9.85 8.14a.533.533 0 00-.36-.15.495.495 0 00-.35.85l1.15 1.15h-5.8c-.28 0-.5.22-.5.5s.22.5.5.5h5.79l-1.15 1.15a.495.495 0 10.7.7l2-2c.09-.09.15-.22.15-.35s-.06-.26-.15-.35l-1.98-2z"],"exclude-row":["M0 10a1.003 1.003 0 001.71.71L3 9.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 8 5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L3 6.59l-1.29-1.3A1.003 1.003 0 00.29 6.71L1.59 8 .29 9.29C.11 9.47 0 9.72 0 10zm1-7h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 10H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-1-7H9c-1.1 0-2 .9-2 2s.9 2 2 2h5c1.1 0 2-.9 2-2s-.9-2-2-2z"],"expand-all":["M4 7c.28 0 .53-.11.71-.29L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4A1.003 1.003 0 004 7zm8 2c-.28 0-.53.11-.71.29L8 12.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 9z"],export:["M4 6c.28 0 .53-.11.71-.29L7 3.41V11c0 .55.45 1 1 1s1-.45 1-1V3.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53.11 8.28 0 8 0s-.53.11-.71.29l-4 4A1.003 1.003 0 004 6zm11 5c-.55 0-1 .45-1 1v2H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z"],"eye-off":["M16 7.97v-.02-.01-.02-.02a.672.672 0 00-.17-.36c-.49-.63-1.07-1.2-1.65-1.72l-3.16 2.26a2.978 2.978 0 01-2.98 2.9c-.31 0-.6-.06-.88-.15L5.09 12.3c.44.19.9.36 1.37.47.97.23 1.94.24 2.92.05.88-.17 1.74-.54 2.53-.98 1.25-.7 2.39-1.67 3.38-2.75.18-.2.37-.41.53-.62.09-.1.15-.22.17-.36v-.02-.02-.01-.02-.03c.01-.02.01-.03.01-.04zm-.43-4.17c.25-.18.43-.46.43-.8 0-.55-.45-1-1-1-.22 0-.41.08-.57.2l-.01-.01-2.67 1.91c-.69-.38-1.41-.69-2.17-.87a6.8 6.8 0 00-2.91-.05c-.88.18-1.74.54-2.53.99-1.25.7-2.39 1.67-3.38 2.75-.18.2-.37.41-.53.62-.23.29-.23.63-.01.92.51.66 1.11 1.25 1.73 1.79.18.16.38.29.56.44l-2.09 1.5.01.01c-.25.18-.43.46-.43.8 0 .55.45 1 1 1 .22 0 .41-.08.57-.2l.01.01 14-10-.01-.01zm-10.41 5a3.03 3.03 0 01-.11-.8 2.99 2.99 0 012.99-2.98c.62 0 1.19.21 1.66.53L5.16 8.8z"],"eye-on":["M10.29 6.7c.18.18.43.29.71.29s.53-.11.71-.29l4-4c.17-.18.29-.43.29-.7a1.003 1.003 0 00-1.71-.71L11 4.58 9.71 3.29A.997.997 0 009 3c-.55 0-1 .44-1 1a1 1 0 00.3.7l1.99 2zM16 7.96v-.02-.01-.02-.02a.64.64 0 00-.17-.36c-.3-.4-.65-.76-1-1.12l-1.7 1.7c-.55.55-1.3.88-2.13.88-.06 0-.11-.01-.17-.02C10.42 10.15 9.32 11 8.01 11A3.005 3.005 0 016.4 5.46c-.24-.43-.39-.93-.39-1.46 0-.26.04-.5.1-.74-.7.2-1.37.5-2.01.86-1.26.7-2.4 1.68-3.4 2.77-.18.21-.36.41-.53.63-.22.29-.22.64 0 .93.51.67 1.12 1.27 1.73 1.81 1.33 1.17 2.85 2.15 4.53 2.55.97.23 1.95.24 2.92.05.89-.18 1.74-.54 2.54-.99 1.25-.71 2.4-1.69 3.39-2.78.18-.2.37-.41.54-.63.09-.1.15-.23.17-.37v-.02-.02-.01-.02-.03c.01-.01.01-.02.01-.03zM8.01 9c.48 0 .87-.35.96-.81a.55.55 0 01-.07-.09l-.02.01L7.8 7.03c-.45.1-.79.48-.79.96 0 .56.45 1.01 1 1.01z"],"eye-open":["M8.002 7.003a1.003 1.003 0 000 2.005 1.003 1.003 0 000-2.005zm7.988.972v-.02-.01-.02-.02a.675.675 0 00-.17-.36c-.509-.673-1.118-1.264-1.737-1.806-1.328-1.173-2.846-2.155-4.523-2.546a6.702 6.702 0 00-2.925-.06c-.889.18-1.738.541-2.546.992C2.84 4.837 1.692 5.81.694 6.902c-.18.211-.36.411-.53.632a.742.742 0 000 .932c.51.672 1.119 1.264 1.738 1.805 1.328 1.173 2.846 2.156 4.523 2.547.968.23 1.947.24 2.925.04.889-.18 1.738-.542 2.546-.993 1.248-.712 2.397-1.684 3.395-2.777.18-.2.37-.411.54-.632.09-.1.149-.23.169-.36v-.02-.02-.01-.02-.03c0-.01-.01-.01-.01-.02zm-7.988 3.038a2.998 2.998 0 01-2.995-3.008 2.998 2.998 0 012.995-3.008 2.998 2.998 0 012.996 3.008 2.998 2.998 0 01-2.996 3.008z"],"fast-backward":["M14 3c-.24 0-.44.09-.62.23l-.01-.01L9 6.72V4c0-.55-.45-1-1-1-.24 0-.44.09-.62.23v-.01l-5 4 .01.01C2.16 7.41 2 7.68 2 8s.16.59.38.77v.01l5 4 .01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V9.28l4.38 3.5.01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"fast-forward":["M15 8c0-.32-.16-.59-.38-.77l.01-.01-5-4-.01.01A.987.987 0 009 3c-.55 0-1 .45-1 1v2.72l-4.38-3.5v.01A.987.987 0 003 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01L8 9.28V12c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01 5-4-.01-.01c.22-.18.38-.45.38-.77z"],feed:["M1.99 11.99c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zm1-4c-.55 0-1 .45-1 1s.45 1 1 1c1.66 0 3 1.34 3 3 0 .55.45 1 1 1s1-.45 1-1c0-2.76-2.24-5-5-5zm0-4c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7 3.13 7 7 0 .55.45 1 1 1s1-.45 1-1a9 9 0 00-9-9zm0-4c-.55 0-1 .45-1 1s.45 1 1 1c6.08 0 11 4.92 11 11 0 .55.45 1 1 1s1-.45 1-1c0-7.18-5.82-13-13-13z"],"feed-subscribed":["M3 2c1.06 0 2.08.16 3.06.45.13-.71.52-1.32 1.05-1.76C5.82.25 4.44 0 3 0c-.55 0-1 .45-1 1s.45 1 1 1zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm8.32-6.33a.99.99 0 001.4 0l3.98-3.98c.19-.18.3-.42.3-.7 0-.55-.45-.99-1-.99-.28 0-.52.11-.7.29l-3.28 3.28-1.29-1.29a.99.99 0 00-.7-.29 1 1 0 00-1 .99c0 .27.11.52.29.7l2 1.99zm3.73.53l-.93.93-.02-.02c-.17.17-.35.33-.56.45C13.47 9.16 14 11.02 14 13c0 .55.45 1 1 1s1-.45 1-1c0-2.5-.73-4.82-1.95-6.8zM3 8c-.55 0-1 .45-1 1s.45 1 1 1c1.66 0 3 1.34 3 3 0 .55.45 1 1 1s1-.45 1-1c0-2.76-2.24-5-5-5zm5.91-.91l-.03.03-2-2 .03-.03c-.11-.11-.23-.2-.33-.33A8.9 8.9 0 003 4c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7 3.13 7 7 0 .55.45 1 1 1s1-.45 1-1c0-1.87-.57-3.61-1.55-5.06-.61-.11-1.13-.42-1.54-.85z"],film:["M15 1h-5v2H6V1H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h5v-2h4v2h5c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 13H2v-2h2v2zm0-3H2V8h2v2zm0-3H2V5h2v2zm0-3H2V2h2v2zm6 6H6V5h4v5zm4 3h-2v-2h2v2zm0-3h-2V8h2v2zm0-3h-2V5h2v2zm0-3h-2V2h2v2z"],filter:["M13.99.99h-12a1.003 1.003 0 00-.71 1.71l4.71 4.71V14a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V7.41L14.7 2.7a1.003 1.003 0 00-.71-1.71z"],"filter-keep":["M15 10c-.28 0-.53.11-.71.29L12 12.59l-1.29-1.29A.965.965 0 0010 11a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0015 10zm-3-8c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7z"],"filter-list":["M9 8c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1h-5c-.55 0-1 .45-1 1zm3-6c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7zm3 8h-5c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0 3h-5c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1z"],"filter-open":["M15.707 10.293a1 1 0 010 1.414l-3 3c-.63.63-1.707.184-1.707-.707V8c0-.89 1.077-1.337 1.707-.707l3 3zM12 2c0 .28-.11.53-.29.7L8 6.41V10c0 .28-.11.53-.29.71l-2 2A1.003 1.003 0 014 12V6.41L.29 2.71A1.003 1.003 0 011 1h10c.55 0 1 .45 1 1z"],"filter-remove":["M12 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7zm2.41 10l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L13 10.59 11.71 9.3A.965.965 0 0011 9a1.003 1.003 0 00-.71 1.71l1.3 1.29-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l1.29-1.3 1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L14.41 12z"],flag:["M2.99 2.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1s1-.45 1-1v-11c0-.55-.45-1-1-1zm0-3c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm2 3.03v7.23c2.07-2.11 5.92 1.75 9 0V3.02c-3 2.07-6.94-2.03-9 0z"],flame:["M9.217 0c0 1.368.368 2.462 1.104 3.282C12.774 5.197 14 7.385 14 9.846c0 2.735-1.472 4.786-4.415 6.154 2.165-2.4 1.84-3.385-.368-6.4-2.342 1.2-1.967 2-1.592 3.6-.786 0-1.5 0-1.875-.4 0 .547.898 2 1.464 3.2-2.943-.82-6.092-5.744-4.988-6.154.736-.273 1.594-.137 2.575.41C3.575 5.333 5.047 1.915 9.217 0z"],flash:["M4 8c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1zm4-4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S7 .45 7 1v2c0 .55.45 1 1 1zM3.79 5.21a1.003 1.003 0 001.42-1.42l-1.5-1.5a1.003 1.003 0 00-1.42 1.42l1.5 1.5zm.71 5.29c-.28 0-.53.11-.71.29l-1.5 1.5a1.003 1.003 0 001.42 1.42l1.5-1.5a1.003 1.003 0 00-.71-1.71zm7-5c.28 0 .53-.11.71-.29l1.5-1.5a1.003 1.003 0 00-1.42-1.42l-1.5 1.5a1.003 1.003 0 00.71 1.71zm.71 5.29a1.003 1.003 0 00-1.42 1.42l1.5 1.5a1.003 1.003 0 001.42-1.42l-1.5-1.5zM15 7h-2c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1s-.45-1-1-1zM8 5C6.34 5 5 6.34 5 8s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0 3c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1z"],"floppy-disk":["M15.71 2.29l-2-2A.997.997 0 0013 0h-1v6H4V0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V3c0-.28-.11-.53-.29-.71zM14 15H2V9c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v6zM11 1H9v4h2V1z"],"flow-branch":["M10.643 6.595c.22.418.344.894.344 1.399 0 .439-.094.855-.263 1.231l3.265 3.462-.002-1.75a.973.973 0 01.314-.68.99.99 0 011.388.048c.186.2.316.46.3.715l-.009 4.03a.959.959 0 01-.3.68.972.972 0 01-.698.266l-4.053.002a.97.97 0 01-.679-.314 1.031 1.031 0 01.05-1.42.972.972 0 01.698-.266l1.7-.001-3.305-3.35a2.998 2.998 0 01-4.228-1.653H.999a1 1 0 010-2h4.166a2.998 2.998 0 014.06-1.735l3.449-3.268-1.745.002a.979.979 0 01-.631-1.692c.199-.186.459-.316.713-.3l4.025.009c.247.008.493.1.679.3.186.2.274.451.265.7l.002 4.046a.972.972 0 01-.313.68 1.03 1.03 0 01-1.42-.05.973.973 0 01-.266-.7V3.295l-3.34 3.301z"],"flow-end":["M9.702 7.31c.176.176.293.41.293.684a.976.976 0 01-.283.695c-1.888 1.91-2.892 2.918-3.011 3.027-.179.164-.42.284-.693.284a.995.995 0 01-.997-.985c0-.274.112-.541.292-.72.12-.12.624-.551 1.514-1.293H.98c-.536 0-.975-.47-.975-1.008 0-.537.439-.996.975-.996h5.837c-.895-.752-1.4-1.187-1.514-1.304a1.03 1.03 0 01-.292-.705C5.01 4.45 5.464 4 6 4c.272 0 .52.108.695.294A535.7 535.7 0 009.702 7.31zM13 11.002c-1.657 0-3-1.347-3-3.008a3.004 3.004 0 013-3.007c1.657 0 3 1.346 3 3.007a3.004 3.004 0 01-3 3.008z"],"flow-linear":["M4.16 9.002H.977C.44 9.002 0 8.532 0 7.994c0-.537.44-.99.978-.99h3.18A3.01 3.01 0 016.995 5a3.01 3.01 0 012.839 2.004h2.98c-.898-.756-1.404-1.193-1.518-1.31a1.03 1.03 0 01-.293-.705c0-.538.454-.989.992-.989.274 0 .521.108.697.294.118.124 1.122 1.13 3.014 3.016a.96.96 0 01.293.684.975.975 0 01-.284.695l-3.018 3.027a.974.974 0 01-.694.284c-.553 0-1-.447-1-.985 0-.274.117-.545.293-.72l1.518-1.293H9.833A3.01 3.01 0 016.996 11 3.01 3.01 0 014.16 9.002z"],"flow-review":["M5.175 7.004a3.003 3.003 0 012.83-2.001c1.305 0 2.416.835 2.83 2.001h1.985c-.896-.756-1.401-1.193-1.515-1.31a1.03 1.03 0 01-.292-.705c0-.538.453-.989.99-.989a.95.95 0 01.696.294c.117.124 1.12 1.13 3.008 3.016.176.176.293.41.293.684a.976.976 0 01-.283.695l-3.013 3.027a.995.995 0 01-1.691-.702c0-.273.116-.544.292-.72l1.515-1.292h-1.98a3.003 3.003 0 01-2.835 2.016A3.003 3.003 0 015.17 9.002H3.18l1.515 1.292c.176.176.292.447.292.72a.995.995 0 01-1.69.702L.282 8.69A.976.976 0 010 7.994c0-.273.117-.508.293-.684A535.858 535.858 0 003.3 4.294.95.95 0 013.997 4c.537 0 .99.45.99.989 0 .273-.12.528-.292.705-.114.117-.62.554-1.515 1.31h1.995z"],"flow-review-branch":["M10.392 10.647A3.002 3.002 0 016.16 8.995H3.37l1.338 1.318c.172.178.287.41.282.683-.01.536-.524.995-.99.995-.465 0-.63-.187-.747-.294L.281 8.682A.956.956 0 010 7.994a.971.971 0 01.294-.687l3.01-3.028a.973.973 0 01.697-.27c.536.01.998.485.989 1.021a.971.971 0 01-.295.687L3.37 6.997h2.79a3.002 3.002 0 014.106-1.716l2.416-2.277-1.732.004a.99.99 0 01-.679-.329.978.978 0 01.05-1.378c.199-.186.459-.315.714-.3l4.012.005c.248.009.493.1.68.3.185.2.273.45.264.699L15.99 6.05a.973.973 0 01-.314.679 1.03 1.03 0 01-1.421-.048.971.971 0 01-.265-.699V4.29L11.65 6.602c.219.416.343.89.343 1.394 0 .451-.1.88-.279 1.263L14 11.68l-.004-1.73a.982.982 0 01.323-.68.978.978 0 011.378.049c.187.2.316.46.3.714l-.004 4.011a.983.983 0 01-.3.691.972.972 0 01-.7.265l-4.046-.001a.987.987 0 01-.679-.326 1.017 1.017 0 01.048-1.41.972.972 0 01.699-.265h1.693l-2.315-2.35z"],flows:["M13.5 6a2.5 2.5 0 00-2.45 2h-1.3L5.74 4l-.75.75L8.25 8h-3.3a2.5 2.5 0 100 1h3.3l-3.26 3.25.75.75 4.01-4h1.3a2.5 2.5 0 102.45-3z"],"folder-close":["M-.01 14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7h-16v7zm15-10H7.41L5.7 2.3a.965.965 0 00-.71-.3h-4c-.55 0-1 .45-1 1v3h16V5c0-.55-.45-1-1-1z"],"folder-new":["M10.165 7a3.003 3.003 0 002.827 2 3.003 3.003 0 002.827-2H16v7c0 .55-.45 1-1 1H1.01c-.55 0-1-.45-1-1V7h10.155zM8.76 6H0V3c0-.55.45-1 1-1h1.998c.28 0 .53.11.71.29L5.417 4h2.578c0 .768.29 1.469.765 2zm6.23-3c.55 0 1 .45 1 1s-.45 1-1 1h-.999v1c0 .55-.45 1-1 1-.549 0-.998-.45-.998-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 .999-1 .55 0 1 .45 1 1v1h.999z"],"folder-open":["M2.06 6.69c.14-.4.5-.69.94-.69h11V5c0-.55-.45-1-1-1H6.41l-1.7-1.71A.997.997 0 004 2H1c-.55 0-1 .45-1 1v9.84l2.05-6.15h.01zM16 8c0-.55-.45-1-1-1H4a.99.99 0 00-.94.69l-2 6c-.04.09-.06.2-.06.31 0 .55.45 1 1 1h11c.44 0 .81-.29.94-.69l2-6c.04-.09.06-.2.06-.31z"],"folder-shared":["M8.76 5.98c-.47-.53-.77-1.22-.77-1.99h-.58L5.7 2.29a.965.965 0 00-.71-.3h-4c-.55 0-1 .45-1 1v3h8.76l.01-.01zm6.23-2.99h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.3a.99.99 0 00-.29.7 1.003 1.003 0 001.71.71l3.29-3.29V8c0 .55.45 1 1 1s1-.45 1-1V4c0-.56-.45-1.01-1-1.01zm-1.98 7.23l-.9.9-.01-.01c-.54.55-1.28.89-2.11.89-1.66 0-3-1.34-3-3 0-.77.3-1.47.78-2H-.01v7c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3.18c-.31.11-.65.18-1 .18-.76-.01-1.45-.31-1.98-.78z"],"folder-shared-open":["M13.02 10.22l-.9.9-.01-.01c-.54.55-1.28.89-2.11.89-1.66 0-3-1.34-3-3 0-.77.3-1.47.78-2H4a.99.99 0 00-.94.69l-2 6c-.04.09-.06.2-.06.31 0 .55.45 1 1 1h11c.44 0 .81-.29.94-.69l1.11-3.32c-.01 0-.03.01-.05.01-.77 0-1.45-.3-1.98-.78zM2.06 6.69c.14-.4.5-.69.94-.69h5.76l.01-.01C8.3 5.46 8 4.77 8 4H6.41l-1.7-1.71A.997.997 0 004 2H1c-.55 0-1 .45-1 1v9.84l2.05-6.15h.01zM15 3h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 6.41V8c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z"],follower:["M9.37 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.06-.01-.12-.01-.19.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.12-.39.28-.06.44-.36.5-.63.06-.11.19-.39.16-.7-.04-.4-.2-.59-.38-.67v-.07c0-.52-.05-1.26-.14-1.74a2.72 2.72 0 00-.09-.43 3.02 3.02 0 00-1.04-1.51C7.87 3.2 7.15 3 6.5 3c-.64 0-1.36.2-1.87.59-.5.38-.87.92-1.05 1.51-.04.13-.07.27-.09.4-.09.49-.14 1.24-.14 1.75v.06c-.19.07-.36.26-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.13 15.5.02 16 .02 16h12.96s.15-.5-.22-1.36c-.38-.85-2.19-1.42-3.39-1.95zm6.33-10.4l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9.99c-.55 0-1 .45-1 1s.45 1 1 1h2.58l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],following:["M9.37 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.06-.01-.12-.01-.19.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.12-.39.28-.06.44-.36.5-.63.06-.11.19-.39.16-.7-.04-.4-.2-.59-.38-.67v-.07c0-.52-.05-1.26-.14-1.74a2.72 2.72 0 00-.09-.43 3.02 3.02 0 00-1.04-1.51C7.87 3.2 7.15 3 6.5 3c-.64 0-1.36.2-1.87.59-.5.38-.87.92-1.05 1.51-.04.13-.07.27-.09.4-.09.49-.14 1.24-.14 1.75v.06c-.19.07-.36.26-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.13 15.5.02 16 .02 16h12.96s.15-.5-.22-1.36c-.38-.85-2.19-1.42-3.39-1.95zM14.99 2h-2.58l.29-.29A1.003 1.003 0 0011.28.29l-2 2c-.17.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L12.41 4h2.58c.55 0 1-.45 1-1s-.45-1-1-1z"],font:["M13.93 14.67L8.94.67h-.01C8.79.28 8.43 0 8 0s-.79.28-.93.67h-.01l-5 14h.01c-.04.1-.07.21-.07.33 0 .55.45 1 1 1 .43 0 .79-.28.93-.67h.01L5.49 11h5.02l1.55 4.34h.01c.14.38.5.66.93.66.55 0 1-.45 1-1 0-.12-.03-.23-.07-.33zM6.2 9L8 3.97 9.8 9H6.2z"],fork:["M13.7 9.29a1.003 1.003 0 00-1.42 1.42l.29.29H11.4l-5-5h6.17l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.29.29H.99c-.55 0-1 .45-1 1s.45 1 1 1h2.59l6.71 6.71c.18.18.43.29.71.29h1.59l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71l-2.02-2z"],form:["M2 11v2h2v-2H2zM1 9h4c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1zm9-6h5c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1zM6 1a1.003 1.003 0 01.71 1.71l-3 4C3.53 6.89 3.28 7 3 7s-.53-.11-.71-.29l-2-2a1.003 1.003 0 011.42-1.42L3 4.59l2.29-3.3C5.47 1.11 5.72 1 6 1zm4 10h5c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1z"],"full-circle":["M8 0a8 8 0 100 16A8 8 0 108 0z"],"full-stacked-chart":["M13 12h1c.55 0 1-.45 1-1V8h-3v3c0 .55.45 1 1 1zM10 2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3h3V2zm0 4H7v3h3V6zm5-4c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v2h3V2zm0 3h-3v2h3V5zM5 5H2v3h3V5zm-2 7h1c.55 0 1-.45 1-1V9H2v2c0 .55.45 1 1 1zm12 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM5 2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h3V2zm3 10h1c.55 0 1-.45 1-1v-1H7v1c0 .55.45 1 1 1z"],fullscreen:["M3.41 2H5c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v4c0 .55.45 1 1 1s1-.45 1-1V3.41L5.29 6.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L3.41 2zM6 9c-.28 0-.53.11-.71.29L2 12.59V11c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.41l3.29-3.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1zm9 1c-.55 0-1 .45-1 1v1.59L10.71 9.3A.965.965 0 0010 9a1.003 1.003 0 00-.71 1.71l3.3 3.29H11c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm0-10h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 3.41V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],function:["M8.12 4.74H6.98c.33-1.29.75-2.24 1.28-2.84.33-.37.64-.56.95-.56.06 0 .11.02.15.05.04.04.06.09.06.15 0 .05-.04.15-.13.29-.09.14-.13.28-.13.4 0 .18.07.33.2.46.14.13.31.19.52.19.22 0 .41-.08.56-.23.15-.16.23-.37.23-.63 0-.3-.11-.55-.34-.74C10.1 1.09 9.74 1 9.24 1c-.78 0-1.49.22-2.12.67-.64.45-1.24 1.2-1.81 2.23-.2.36-.38.59-.56.69-.18.1-.46.15-.85.15l-.26.9h1.08l-1.59 6.12c-.27 1.01-.44 1.63-.54 1.86-.14.34-.34.63-.62.87-.11.1-.24.15-.4.15a.15.15 0 01-.11-.04l-.04-.05c0-.03.04-.08.12-.16.08-.08.12-.2.12-.36 0-.18-.06-.33-.19-.44-.12-.12-.3-.18-.54-.18-.28 0-.51.08-.68.23-.16.14-.25.32-.25.53 0 .22.1.42.31.59.21.17.53.25.97.25.7 0 1.32-.18 1.87-.54.54-.36 1.02-.92 1.42-1.67.41-.75.82-1.96 1.25-3.63l.91-3.54h1.1l.29-.89zm5.43 1.52c.2-.15.41-.23.62-.23.08 0 .23.03.45.09s.41.09.57.09c.23 0 .42-.08.57-.23.16-.16.24-.36.24-.61 0-.26-.08-.47-.23-.62-.15-.15-.37-.23-.66-.23-.25 0-.5.06-.72.18-.23.12-.51.38-.86.78-.26.3-.64.81-1.15 1.55-.2-.91-.55-1.75-1.05-2.51l-2.72.46-.06.29c.2-.04.37-.06.51-.06.27 0 .49.11.67.34.28.36.67 1.45 1.17 3.26-.39.52-.66.85-.8 1.01-.24.26-.44.42-.59.5-.12.06-.25.09-.41.09-.11 0-.3-.06-.56-.18-.18-.08-.34-.12-.48-.12-.27 0-.48.08-.66.25-.17.17-.26.38-.26.64 0 .25.08.44.24.6.16.15.37.23.64.23.26 0 .5-.05.73-.16.23-.11.52-.34.86-.69.35-.35.82-.9 1.43-1.67.23.73.44 1.25.61 1.58s.37.57.59.71c.22.15.5.22.83.22.32 0 .65-.11.98-.34.44-.3.88-.81 1.34-1.53l-.26-.15c-.31.43-.54.7-.69.8-.1.07-.22.1-.35.1-.16 0-.32-.1-.48-.3-.27-.34-.62-1.27-1.06-2.8.4-.68.73-1.13 1-1.34z"],"gantt-chart":["M10 10c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1zM6 7c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1zm9 5H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM4 5h3c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1z"],geofence:["M6 9c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1s-1-.45-1-1v-1.59l-3.29 3.3A1.003 1.003 0 010 15c0-.28.11-.53.3-.71L3.59 11H2c-.55 0-1-.45-1-1s.45-1 1-1zM9.088.004l.097.013.097.024.057.018.1.042.054.029.095.061.052.04 6 5 .05.046.076.08.053.07.06.095.051.11c.056.141.079.294.067.446l-.014.105-.037.143-.035.087-.043.083-4 7-.034.056-.059.08-.038.044-.096.092-.114.082-.116.062-.086.034-.109.03-.1.017-.069.006H8.83c.088-.25.144-.515.163-.79L9 13v-3a3 3 0 00-2.824-2.995L6 7H3c-.351 0-.689.06-1.002.171L2 5l.002-.07.013-.1.015-.073.025-.085.043-.104.056-.101.045-.066.079-.093.084-.078.083-.062 6-4 .07-.043.12-.056.111-.036.108-.022.083-.01h.031c.046-.002.083 0 .12.003z"],geolocation:["M-.01 6.66l7.34 2 2 7.33 6.66-16z"],geosearch:["M8.82 12.4h.66c.23 0 .36-.17.36-.4v-1.48l.19-.18c-.27.03-.55.06-.83.06-.28 0-.56-.03-.84-.07.02.04.05.08.07.13V12c0 .23.15.4.39.4zM6.4 15.1A5.51 5.51 0 01.9 9.6c0-.49.06-.98.18-1.43.03 0 .05-.01.08-.01h.08v.44c0 .19.17.34.36.34.03 0 .07-.01.1-.01l.71.7c.07.07.19.07.26 0s.07-.19 0-.26l-.7-.72c0-.02.03-.03.03-.05v-.11c0-.15.08-.2.23-.33h.42c.08 0 .15-.01.22-.04h.02c.02-.02.03-.02.04-.04.01-.01.01-.01.02-.01l.02-.01.9-.9c-.13-.26-.24-.52-.34-.8h-.5v-.43c0-.01.05.05.04-.08h.31c-.03-.13-.06-.26-.08-.39h-.57c.16-.12.34-.24.51-.36-.02-.23-.04-.46-.04-.7 0-.12.01-.23.02-.34A6.385 6.385 0 000 9.6C0 13.13 2.87 16 6.4 16c3.1 0 5.67-2.22 6.26-5.15l-.78-.88c-.21 2.85-2.58 5.13-5.48 5.13zm-1.7-2.93v-.28h.12c.23 0 .39-.19.39-.42v-.54s.01-.01 0-.01L3.77 9.45h-.62c-.23 0-.38.19-.38.42v1.6c0 .23.14.42.38.42h.26v1.61c0 .23.22.41.45.41s.45-.18.45-.41v-.97H4.3c.24 0 .4-.13.4-.36zm11.07-2.34l-2.94-2.94c.11-.17.21-.34.3-.52.01-.03.03-.06.04-.09.08-.18.16-.36.22-.55v-.01c.06-.19.1-.38.14-.58.01-.05.01-.09.02-.14.03-.2.05-.4.05-.61a4.4 4.4 0 00-4.4-4.4C6.77 0 4.8 1.97 4.8 4.4s1.97 4.4 4.4 4.4c.21 0 .41-.02.61-.05.04 0 .09-.01.14-.02.2-.03.39-.08.58-.14h.01c.19-.06.37-.14.55-.22.03-.01.06-.03.09-.04.18-.09.35-.19.52-.3l2.94 2.94a.8.8 0 00.57.23c.44 0 .8-.36.8-.8a.895.895 0 00-.24-.57zM9.2 7.6C7.43 7.6 6 6.17 6 4.4c0-1.77 1.43-3.2 3.2-3.2s3.2 1.43 3.2 3.2c0 1.77-1.43 3.2-3.2 3.2zm1.54 4.26v-.52c0-.09-.1-.17-.19-.17s-.19.07-.19.17v.52c0 .09.1.17.19.17s.19-.07.19-.17z"],"git-branch":["M12 1c-1.66 0-3 1.34-3 3 0 1.25.76 2.32 1.85 2.77A2.02 2.02 0 019 8H7c-.73 0-1.41.2-2 .55V5.82C6.16 5.4 7 4.3 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.82v4.37c-1.16.4-2 1.51-2 2.81 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.04-.53-1.95-1.32-2.49.35-.31.81-.51 1.32-.51h2c1.92 0 3.52-1.35 3.91-3.15A2.996 2.996 0 0012 1zM4 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 12c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm8-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-commit":["M15 7h-3.14c-.45-1.72-2-3-3.86-3S4.59 5.28 4.14 7H1c-.55 0-1 .45-1 1s.45 1 1 1h3.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H15c.55 0 1-.45 1-1s-.45-1-1-1zm-7 3c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"],"git-merge":["M12 6c-1.3 0-2.4.84-2.82 2H9c-1.62 0-3-.96-3.63-2.34C6.33 5.16 7 4.16 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.81v4.37C1.84 10.6 1 11.7 1 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V8.43A5.89 5.89 0 009 10h.18A2.996 2.996 0 0015 9c0-1.66-1.34-3-3-3zm-8 8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm8 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-new-branch":["M14 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3.18 4.8C10.51 7.51 9.82 8 9 8H7c-.73 0-1.41.2-2 .55V5.82C6.16 5.4 7 4.3 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.82v4.37c-1.16.4-2 1.51-2 2.81 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.04-.53-1.95-1.32-2.49.35-.31.81-.51 1.32-.51h2c1.9 0 3.49-1.33 3.89-3.11-.29.07-.58.11-.89.11-.41 0-.8-.08-1.18-.2zM4 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 12c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-pull":["M3 1C1.34 1 0 2.34 0 4c0 1.3.84 2.4 2 2.82v3.37C.84 10.6 0 11.7 0 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V6.82C5.16 6.4 6 5.3 6 4c0-1.66-1.34-3-3-3zm0 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm11 5.18V6c0-1.66-1.34-3-3-3H9.41l1.29-1.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-3 3C6.11 3.47 6 3.72 6 4c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L9.41 5H11c.55 0 1 .45 1 1v4.18A2.996 2.996 0 0013 16c1.66 0 3-1.34 3-3 0-1.3-.84-2.4-2-2.82zM13 14c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-push":["M4 6h1V5H4v1zm9 3c0-.28-.11-.53-.29-.71l-3-3C9.53 5.11 9.28 5 9 5s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L8 8.41V15c0 .55.45 1 1 1s1-.45 1-1V8.41l1.29 1.29c.18.19.43.3.71.3.55 0 1-.45 1-1zM5 3H4v1h1V3zm10-3H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h5v-2H2v-1h4v-1H3V2h11v9h-2v1h2v1h-2v2h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"git-repo":["M5 9H4v1h1V9zm10-9H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h3v1l2-1 2 1v-1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM4 13H2v-1h2v1zm10 0H8v-1h6v1zm0-2H3V2h11v9zM5 3H4v1h1V3zm0 4H4v1h1V7zm0-2H4v1h1V5z"],glass:["M2 0v4c0 2.97 2.16 5.43 5 5.91V14H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1H9V9.91c2.84-.48 5-2.94 5-5.91V0H2z"],globe:["M4.45 7.83c-.26 0-.41.21-.41.46v1.75c0 .26.16.46.41.46h.29v1.77c0 .25.24.45.49.45s.49-.2.49-.45V11.2h-.01c.26 0 .44-.14.44-.4v-.3h.14c.26 0 .43-.2.43-.46v-.59s.01-.01 0-.01l-1.58-1.6h-.69zM8.51 3.9h.22c.06 0 .12-.01.12-.07 0-.06-.05-.07-.12-.07h-.22c-.06 0-.12.01-.12.07.01.06.06.07.12.07zm-2.33-.05c.07-.07.07-.19 0-.26l-.5-.5a.187.187 0 00-.26 0c-.07.07-.07.19 0 .26l.5.5c.07.07.19.07.26 0zm3.06.89c.07 0 .14-.06.14-.12v-.31c0-.07-.07-.12-.14-.12s-.14.06-.14.12v.31c0 .07.07.12.14.12zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-.55.1-1.07.23-1.57h.11v.47c0 .2.18.37.39.37.03 0 .08-.01.11-.02l.78.77c.08.08.2.08.28 0 .08-.08.08-.2 0-.28l-.75-.78c0-.02.04-.04.04-.06v-.12c0-.16.09-.22.25-.36h.46c.09 0 .17-.01.24-.05h.02c.02-.01.03-.02.05-.03.01-.01.01-.01.02-.01l.02-.02 1.59-1.58c.18-.18.18-.46 0-.64s-.47-.15-.65.03l-.3.34h-.57v-.48c0-.01.05.05.05-.09h.64c.12 0 .22-.09.22-.21s-.1-.21-.22-.21H4.1c.18-.15.34-.31.54-.44l.01-.01c.21-.14.45-.25.68-.37.15-.07.29-.15.44-.21.17-.07.35-.11.53-.17.18-.05.35-.12.53-.16a6.05 6.05 0 013.47.35c.05.02.1.05.16.08.25.11.48.24.71.39.25.16.49.34.71.55H10.6s0-.03-.01-.03c-.04 0-.09 0-.13.03l-.51.51a.17.17 0 000 .23c.06.06.17.06.23 0l.42-.44.01-.02h.25c0 .14-.07.09-.07.12v.07c0 .22-.15.37-.36.37h-.38c-.19 0-.38.21-.38.4v.17h-.1c-.12 0-.2.06-.2.18v.25h-.23c-.17 0-.3.11-.3.28 0 .17.13.26.3.26.07 0 .14.03.19-.11l.04.01.49-.46h.17l.39.37c.03.03.08.02.12-.01.03-.03.03-.12 0-.15l-.32-.35h.23l.09.12c.18.18.48.17.66-.01l.09-.1h.4c.02 0 .08.05.08.05v.24l-.05-.01h-.36c-.11 0-.21.1-.21.21 0 .11.09.21.21.21h.41v.15c-.14.21-.24.42-.45.42h-.94v-.01l-.44-.44a.47.47 0 00-.66 0l-.42.43v.01H8.6c-.26 0-.49.21-.49.46v.92c0 .26.23.45.49.45h.9c.34.14.57.35.72.69v1.68c0 .26.17.44.42.44h.72c.26 0 .4-.18.4-.44V9l.89-.86.03-.02.02-.01h.03c.07-.08.15-.19.15-.31v-.91c0-.18-.16-.32-.31-.46H13c.01.28.21.42.46.42h.42c.08.37.12.76.12 1.15 0 3.31-2.69 6-6 6zm4.54-4.27c-.1 0-.21.08-.21.18v.57c0 .1.11.18.21.18.1 0 .21-.08.21-.18v-.57c0-.1-.11-.18-.21-.18zM8.37 3.19c0-.25-.2-.42-.46-.42h-.54c-.25 0-.42.18-.42.43 0 .03-.1.04.05.08v.47c0 .15.06.27.21.27s.21-.12.21-.27v-.14h.5c.24 0 .45-.16.45-.42z"],"globe-network":["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm5.17 5h-2.44c-.21-1.11-.51-2.03-.91-2.69 1.43.46 2.61 1.43 3.35 2.69zM10 8c0 .73-.05 1.39-.12 2H6.12C6.05 9.39 6 8.73 6 8s.05-1.39.12-2h3.76c.07.61.12 1.27.12 2zM8 2c.67 0 1.36 1.1 1.73 3H6.27C6.64 3.1 7.33 2 8 2zm-1.82.31c-.4.66-.71 1.58-.91 2.69H2.83a6.025 6.025 0 013.35-2.69zM2 8c0-.7.13-1.37.35-2h2.76C5.04 6.62 5 7.28 5 8s.04 1.38.11 2H2.35C2.13 9.37 2 8.7 2 8zm.83 3h2.44c.21 1.11.51 2.03.91 2.69A6.025 6.025 0 012.83 11zM8 14c-.67 0-1.36-1.1-1.73-3h3.46c-.37 1.9-1.06 3-1.73 3zm1.82-.31c.4-.66.7-1.58.91-2.69h2.44a6.025 6.025 0 01-3.35 2.69zM13.65 10h-2.76c.07-.62.11-1.28.11-2s-.04-1.38-.11-2h2.76c.22.63.35 1.3.35 2s-.13 1.37-.35 2z"],graph:["M14 3c-1.06 0-1.92.83-1.99 1.88l-1.93.97A2.95 2.95 0 008 5c-.56 0-1.08.16-1.52.43L3.97 3.34C3.98 3.23 4 3.12 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.24 0 .47-.05.68-.13l2.51 2.09C5.08 7.29 5 7.63 5 8c0 .96.46 1.81 1.16 2.35l-.56 1.69c-.91.19-1.6.99-1.6 1.96 0 1.1.9 2 2 2s2-.9 2-2c0-.51-.2-.97-.51-1.32l.56-1.69A2.99 2.99 0 0011 8c0-.12-.02-.24-.04-.36l1.94-.97c.32.21.69.33 1.1.33 1.1 0 2-.9 2-2s-.9-2-2-2z"],"graph-remove":["M12.89 8.11l-.01.01-.38-.38-.38.38-.02-.02c-.54.55-1.27.9-2.1.9-1.66 0-3-1.34-3-3 0-.83.35-1.56.9-2.1l-.02-.02.38-.38-.38-.38.01-.01C7.35 2.57 7 1.83 7 1c0-.34.07-.65.17-.96A8.004 8.004 0 000 8c0 4.42 3.58 8 8 8 4.14 0 7.54-3.14 7.96-7.17-.31.1-.62.17-.96.17-.83 0-1.57-.35-2.11-.89zm1.02-4.61l1.79-1.79c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-1.79 1.8L10.71.3A.965.965 0 0010 0a1.003 1.003 0 00-.71 1.71l1.79 1.79-1.79 1.79a1.003 1.003 0 001.42 1.42l1.79-1.79 1.79 1.79a1.003 1.003 0 001.42-1.42l-1.8-1.79z"],"greater-than":["M2.713 5.958a1 1 0 01.574-1.916l10 3c.95.285.95 1.63 0 1.916l-10 3a1 1 0 01-.574-1.916L9.52 8 2.713 5.958z"],"greater-than-or-equal-to":["M2.713 3.958a1 1 0 01.574-1.916l10 3c.95.285.95 1.63 0 1.916l-10 3a1 1 0 01-.574-1.916L9.52 6 2.713 3.958zM3 12h10a1 1 0 010 2H3a1 1 0 010-2z"],grid:["M15 9c.55 0 1-.45 1-1s-.45-1-1-1h-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1H9V1c0-.55-.45-1-1-1S7 .45 7 1v1H4V1c0-.55-.45-1-1-1S2 .45 2 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v3H1c-.55 0-1 .45-1 1s.45 1 1 1h1v3H1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h3v1c0 .55.45 1 1 1s1-.45 1-1v-1h3v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V9h1zm-8 3H4V9h3v3zm0-5H4V4h3v3zm5 5H9V9h3v3zm0-5H9V4h3v3z"],"grid-view":["M0 1v6h7V0H1C.45 0 0 .45 0 1zm0 14c0 .55.45 1 1 1h6V9H0v6zM15 0H9v7h7V1c0-.55-.45-1-1-1zM9 16h6c.55 0 1-.45 1-1V9H9v7z"],"group-objects":["M5 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-3H5C2.24 3 0 5.24 0 8s2.24 5 5 5h6c2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 9H5c-2.21 0-4-1.79-4-4s1.79-4 4-4h6c2.21 0 4 1.79 4 4s-1.79 4-4 4zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],"grouped-bar-chart":["M10 12c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1zm3 0c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1zm2 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-9-1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1zm-3 0c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1v9c0 .55.45 1 1 1z"],hand:["M15 5c0-.55-.45-1-1-1-.41 0-.76.24-.91.59v.01s0 .01-.01.01L11.57 8h-.36l.78-4.84C12 3.11 12 3.05 12 3a1 1 0 00-1.99-.16v.01L9.18 8H9V1c0-.55-.45-1-1-1S7 .45 7 1v7h-.09l-.93-5.18A1 1 0 005 2c-.55 0-1 .45-1 1 0 .05 0 .11.01.16L5.26 11h-.04L2.83 7.44C2.65 7.18 2.35 7 2 7c-.55 0-1 .45-1 1 0 .17.04.33.12.47l3 5.69h.01v.01A5.002 5.002 0 0013 11v-.59l1.93-5.05c.05-.11.07-.23.07-.36z"],"hand-down":["M14.72 7.87c-1.54-.67-2.99-2.68-3.7-3.95C10.11 1.95 9.93 0 6.14 0 4.05 0 2.71.61 1.92 2.12 1.27 3.36 1 5.21 1 7.83v.79c0 .65.6 1.18 1.35 1.18.34 0 .64-.11.88-.29.17.48.68.84 1.29.84.41 0 .78-.16 1.03-.42.23.37.67.63 1.19.63.57 0 1.05-.31 1.25-.74l.01.63v4.05c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V7.9c.58.41 1.55 1.21 2.47 1.29 1.57.14 1.82-1.07 1.25-1.32z"],"hand-left":["M12.08 4.97c-1.26-.71-3.27-2.15-3.95-3.7C7.88.7 6.67.96 6.81 2.52c.09.93.89 1.9 1.3 2.48H1.5C.67 5 0 5.67 0 6.5S.67 8 1.5 8h4.05l.63.01c-.44.2-.75.69-.75 1.25 0 .52.26.96.63 1.19-.26.25-.42.61-.42 1.03 0 .61.35 1.12.84 1.29-.18.24-.29.54-.29.88 0 .75.54 1.35 1.19 1.35h.79c2.62 0 4.47-.28 5.71-.92 1.51-.79 2.12-2.14 2.12-4.22 0-3.79-1.95-3.97-3.92-4.89z"],"hand-right":["M14.5 5H7.89c.41-.58 1.21-1.55 1.3-2.47C9.34.97 8.12.71 7.87 1.28c-.67 1.54-2.68 2.99-3.95 3.7C1.95 5.89 0 6.07 0 9.86c0 2.09.61 3.43 2.12 4.22 1.24.65 3.09.92 5.71.92h.79c.65 0 1.18-.6 1.18-1.35 0-.34-.11-.64-.29-.88.48-.17.84-.68.84-1.29 0-.41-.16-.78-.42-1.03.37-.23.63-.67.63-1.19 0-.57-.31-1.05-.74-1.25l.63-.01h4.05c.83 0 1.5-.67 1.5-1.5S15.33 5 14.5 5z"],"hand-up":["M13.65 6.19c-.34 0-.64.11-.88.29-.17-.48-.68-.84-1.29-.84-.41 0-.78.16-1.03.42-.23-.37-.67-.63-1.19-.63-.57 0-1.05.31-1.25.74L8 5.55V1.5C8 .67 7.33 0 6.5 0S5 .67 5 1.5v6.61c-.58-.41-1.55-1.21-2.48-1.3C.96 6.67.7 7.88 1.28 8.13c1.54.67 2.99 2.68 3.7 3.95C5.89 14.05 6.07 16 9.86 16c2.09 0 3.43-.61 4.22-2.12.64-1.24.92-3.09.92-5.71v-.79c0-.65-.6-1.19-1.35-1.19z"],hat:["M15 10c.495 0 .933.379.993.882L16 11v.505c0 1.461-3.524 2.45-7.707 2.493L8 14c-4.31 0-8-1-8-2.495V11c0-.561.466-1 1-1 .895 0 3 1 7 1l.381-.003C12.135 10.937 14.134 10 15 10zm-4-8c1.13 0 2.02 2.153 2.671 6.46-1.063.266-2.644.652-4.887.727l-.403.01L8 9.2c-2.664 0-4.488-.444-5.673-.74C2.98 4.153 3.87 2 5 2c2 0 1.329 2 3 2s1-2 3-2z"],header:["M13 1c-.55 0-1 .45-1 1v5H4V2c0-.55-.45-1-1-1s-1 .45-1 1v12c0 .55.45 1 1 1s1-.45 1-1V9h8v5c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],"header-one":["M14.06 8c-.04.23-.12.44-.25.61-.13.17-.29.3-.48.41-.18.11-.39.18-.62.23-.23.04-.46.07-.71.07v1.03h1.74V16H15V8h-.94zM7 0c-.56 0-1 .45-1 1v4H2V1c0-.55-.45-1-1-1-.56 0-1 .45-1 1v10c0 .55.45 1 1 1 .56 0 1-.45 1-1V7h4v4c0 .55.45 1 1 1 .56 0 1-.45 1-1V1c0-.54-.45-1-1-1z"],"header-two":["M13.17 13.93c-.17.15-.33.29-.46.44-.13.16-.22.32-.27.49h3.55V16H11c.01-.65.16-1.22.44-1.71s.67-.91 1.17-1.27c.24-.18.49-.36.75-.54.25-.18.49-.36.71-.57.21-.2.39-.42.53-.65.14-.24.21-.51.22-.82 0-.14-.02-.29-.05-.45-.03-.16-.09-.31-.18-.45a1.13 1.13 0 00-.37-.35c-.16-.09-.37-.14-.63-.14-.24 0-.43.05-.59.15-.16.1-.29.24-.38.42-.1.17-.17.38-.21.62-.05.24-.07.5-.08.77h-1.19c0-.43.05-.83.16-1.2s.27-.69.49-.96c.21-.25.48-.46.79-.62.31-.15.67-.23 1.07-.23.45 0 .82.08 1.11.23.3.16.55.36.73.6.19.24.32.5.39.79.08.28.12.54.12.79 0 .31-.04.6-.13.85s-.22.49-.37.7c-.15.21-.32.41-.52.59s-.4.35-.61.51l-.63.45c-.21.14-.39.28-.57.42zM0 1c0-.55.44-1 1-1 .55 0 1 .46 1 1v10c0 .55-.44 1-1 1-.55 0-1-.46-1-1V1zm6 0c0-.55.44-1 1-1 .55 0 1 .46 1 1v10c0 .55-.44 1-1 1-.55 0-1-.46-1-1V1zM2 5h4v2H2V5z"],headset:["M14.85 6.34C14.18 2.72 11.37 0 8 0S1.82 2.72 1.15 6.34C.47 6.9 0 8.1 0 9.5 0 11.43.9 13 2 13c0 1.1.9 2 2 2h2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1H4c-.55 0-1-.45-1-1 .55 0 1-.45 1-1V7c0-.45-.3-.81-.71-.94C3.97 3.7 5.81 2 8 2s4.03 1.7 4.71 4.06c-.41.13-.71.49-.71.94v5c0 .55.45 1 1 1h1c1.1 0 2-1.57 2-3.5 0-1.4-.47-2.6-1.15-3.16z"],heart:["M16 5.095c0-2.255-1.88-4.083-4.2-4.083-1.682 0-3.13.964-3.8 2.352a4.206 4.206 0 00-3.8-2.352C1.88 1.012 0 2.84 0 5.095c0 .066.007.13.01.194H.004c.001.047.01.096.014.143l.013.142c.07.8.321 1.663.824 2.573C2.073 10.354 4.232 12.018 8 15c3.767-2.982 5.926-4.647 7.144-6.854.501-.905.752-1.766.823-2.562.007-.055.012-.11.016-.164.003-.043.012-.088.013-.13h-.006c.003-.066.01-.13.01-.195z"],"heart-broken":["M7.71 8.87L6.17 6.55l.02-.01A.906.906 0 016 6c0-.07.03-.13.04-.19h-.02l.78-3.92C6.09 1.34 5.19 1 4.2 1 1.88 1 0 2.83 0 5.09c0 .07.01.13.01.19H0c0 .05.01.1.01.14 0 .05.01.1.01.14.07.8.32 1.66.82 2.57 1.07 1.94 2.88 3.47 5.86 5.84l-.68-2.74h.02C6.03 11.16 6 11.08 6 11c0-.28.11-.53.29-.71l1.42-1.42zM16 5.09C16 2.83 14.12 1 11.8 1c-1.2 0-2.27.5-3.04 1.28l-.7 3.51 1.77 2.66-.01.01c.1.15.18.33.18.54 0 .28-.11.53-.29.71l-1.6 1.6.75 3.01c3.23-2.56 5.16-4.15 6.28-6.18.5-.91.75-1.77.82-2.56.01-.05.01-.11.02-.16 0-.04.01-.09.01-.13h-.01c.01-.07.02-.14.02-.2z"],"heat-grid":["M0 10h5V7H0v3zm1-2h3v1H1V8zm14-5h-4v3h5V4c0-.55-.45-1-1-1zm0 2h-3V4h3v1zM0 4v2h5V3H1c-.55 0-1 .45-1 1zm0 9c0 .55.45 1 1 1h4v-3H0v2zm6-7h4V3H6v3zm0 8h4v-3H6v3zm1-2h2v1H7v-1zm4 2h4c.55 0 1-.45 1-1v-2h-5v3zm0-4h5V7h-5v3zm-5 0h4V7H6v3z"],heatmap:["M2 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm11-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm3 4.5A2.5 2.5 0 0013.5 6c-.98 0-1.82.57-2.23 1.39-.6-.78-1.51-1.3-2.56-1.36.18-.49.29-.99.29-1.53C9 2.01 6.99 0 4.5 0S0 2.01 0 4.5 2.01 9 4.5 9c.19 0 .37-.03.56-.06-.03.19-.06.37-.06.56C5 11.43 6.57 13 8.5 13c1.63 0 2.98-1.11 3.37-2.62.44.38 1 .62 1.63.62A2.5 2.5 0 0016 8.5zM14.5 13c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"],help:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm1.93-6.52c-.14.32-.35.64-.62.97L9.25 8.83c-.12.15-.24.29-.28.42-.04.13-.09.3-.09.52V10H7.12V8.88s.05-.51.21-.71L8.4 6.73c.22-.26.35-.49.44-.68.09-.19.12-.38.12-.58 0-.3-.1-.55-.28-.75-.18-.19-.44-.28-.76-.28-.33 0-.59.1-.78.29-.19.19-.33.46-.4.81-.03.11-.1.15-.2.14l-1.7-.25c-.12-.01-.16-.08-.14-.19.12-.82.46-1.47 1.03-1.94.57-.48 1.32-.72 2.25-.72.47 0 .9.07 1.29.22s.72.34 1 .59c.28.25.49.55.65.89.15.35.22.72.22 1.12s-.07.75-.21 1.08z"],"helper-management":["M13 5h-2v2h2V5zm0 6h-2v2h2v-2zm0-3h-2v2h2V8zm2-8H1C.4 0 0 .4 0 1v14c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H2V2h12v12zm-7-3H5v2h2v-2zm3 0H8v2h2v-2z"],highlight:["M9.12 11.07l2-2.02.71.71 4-4.04L10.17 0l-4 4.04.71.71-2 2.02 4.24 4.3zM2 12.97h4c.28 0 .53-.11.71-.3l1-1.01-3.42-3.45-3 3.03c-.18.18-.29.44-.29.72 0 .55.45 1.01 1 1.01zm13 1.01H1c-.55 0-1 .45-1 1.01S.45 16 1 16h14c.55 0 1-.45 1-1.01s-.45-1.01-1-1.01z"],history:["M8 3c-.55 0-1 .45-1 1v4c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L9 7.59V4c0-.55-.45-1-1-1zm0-3a7.95 7.95 0 00-6 2.74V1c0-.55-.45-1-1-1S0 .45 0 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.54C4.64 2.78 6.23 2 8 2c3.31 0 6 2.69 6 6 0 2.61-1.67 4.81-4 5.63v-.01c-.63.23-1.29.38-2 .38-3.31 0-6-2.69-6-6 0-.55-.45-1-1-1s-1 .45-1 1c0 4.42 3.58 8 8 8 .34 0 .67-.03 1-.07.02 0 .04-.01.06-.01C12.98 15.4 16 12.06 16 8c0-4.42-3.58-8-8-8z"],home:["M2 10v5c0 .55.45 1 1 1h3v-5h4v5h3c.55 0 1-.45 1-1v-5L8 4l-6 6zm13.71-2.71L14 5.59V2c0-.55-.45-1-1-1s-1 .45-1 1v1.59L8.71.29C8.53.11 8.28 0 8 0s-.53.11-.71.29l-7 7a1.003 1.003 0 001.42 1.42L8 2.41l6.29 6.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"horizontal-bar-chart":["M4 5h7c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zM1 1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1zm14 6H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-6 5H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1z"],"horizontal-bar-chart-asc":["M1 3h5c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h7c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 11h10c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z"],"horizontal-bar-chart-desc":["M15 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM8 9H1c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm-2 4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm5-8H1c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z"],"horizontal-distribution":["M2 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm13 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-5 2H7c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],"id-number":["M2 5v7h12V5H2zm0-2h12c1.1 0 2 .9 2 2v7c0 1.1-.9 2-2 2H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2z","M7.9 10.48c-.14-.33-.84-.55-1.3-.75-.46-.2-.4-.33-.42-.5v-.07c.16-.14.29-.33.37-.56 0 0 0-.01.01-.02.02-.05.03-.1.05-.15.1-.01.16-.13.19-.23.03-.04.07-.15.06-.27-.02-.16-.08-.24-.15-.26v-.03c0-.2-.02-.48-.05-.67-.01-.05-.02-.1-.03-.16-.07-.23-.21-.44-.4-.58-.2-.15-.48-.23-.73-.23s-.53.08-.72.23c-.19.14-.33.35-.4.58-.02.05-.03.1-.03.16-.05.18-.06.47-.06.67v.03c-.07.03-.14.1-.15.26-.02.12.03.22.06.27.02.1.09.22.2.24.01.05.03.1.05.15v.01c.08.23.22.42.38.56v.07c-.02.17.03.29-.43.5-.46.2-1.16.42-1.3.75s-.09.52-.09.52H8c-.01 0 .05-.19-.1-.52zM10 6h2c.55 0 1 .45 1 1s-.45 1-1 1h-2c-.55 0-1-.45-1-1s.45-1 1-1zM10 9h2c.55 0 1 .45 1 1s-.45 1-1 1h-2c-.55 0-1-.45-1-1s.45-1 1-1z"],"image-rotate-left":["M13 2h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C8.11 2.47 8 2.72 8 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H13c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3zm-5.5 9c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 6.33L7 12l-1 1-2-3-2 2.67V9h7v4.33z"],"image-rotate-right":["M5.71 5.71l2-2C7.89 3.53 8 3.28 8 3c0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H3C1.34 2 0 3.34 0 5v3c0 .55.45 1 1 1s1-.45 1-1V5c0-.55.45-1 1-1h1.59l-.3.29a1.003 1.003 0 001.42 1.42zM12.5 11c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM15 7H6c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 6.33L12 12l-1 1-2-3-2 2.67V9h7v4.33z"],import:["M7.29 11.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L9 8.59V1c0-.55-.45-1-1-1S7 .45 7 1v7.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l4 4zM15 11c-.55 0-1 .45-1 1v2H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z"],inbox:["M13.91 2.6c-.16-.36-.51-.61-.92-.61h-10c-.41 0-.77.25-.92.61L-.01 7.45v5.54c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7.45L13.91 2.6zm-1.92 5.39c-.55 0-1 .45-1 1v1h-6v-1c0-.55-.45-1-1-1H1.94l1.71-4h8.68l1.71 4h-2.05z"],"inbox-filtered":["M6.432 2c.094.14.202.273.324.394L8.42 4H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6.557c.693 0 1.363-.262 1.837-.736l.103-.102.85-1.14a2.564 2.564 0 00.623-1.682V5.058L16 7.46V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h3.432zm9.048-2c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V3.71L8.17.98A.566.566 0 018 .57c0-.31.26-.57.57-.57h6.91z"],"inbox-geo":["M6.341 2A5.99 5.99 0 006 4H3.66L1.95 8H4c.55 0 1 .45 1 1v1h7a5.978 5.978 0 004-1.528V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h3.341zm3.679 2.145c0-.125.075-.23.205-.225h.345l.79.8c.005 0 0 .005 0 .005v.295c0 .13-.085.23-.215.23h-.07v.15c0 .13-.09.2-.215.2v.535c0 .125-.12.225-.245.225s-.245-.1-.245-.225V5.25h-.145c-.125 0-.205-.1-.205-.23v-.875zm2.235-2.195c-.03 0-.055-.005-.06-.035 0-.03.03-.035.06-.035h.11c.035 0 .06.005.06.035 0 .03-.03.035-.06.035h-.11zm-1.165-.025a.094.094 0 01-.13 0l-.25-.25a.094.094 0 010-.13.094.094 0 01.13 0l.25.25a.094.094 0 010 .13zm1.53.445c-.035 0-.07-.025-.07-.06v-.155c0-.03.035-.06.07-.06s.07.025.07.06v.155c0 .03-.035.06-.07.06zM12 0c2.21 0 4 1.79 4 4s-1.79 4-4 4-4-1.79-4-4 1.79-4 4-4zm0 7c1.655 0 3-1.345 3-3 0-.195-.02-.39-.06-.575h-.21c-.125 0-.225-.07-.23-.21h-.215c.075.07.155.14.155.23V3.9c0 .06-.04.115-.075.155h-.015l-.01.005-.015.01-.445.43v.815c0 .13-.07.22-.2.22h-.36c-.125 0-.21-.09-.21-.22v-.84a.627.627 0 00-.36-.345h-.45c-.13 0-.245-.095-.245-.225v-.46c0-.125.115-.23.245-.23l.13-.005.21-.215c.09-.09.24-.09.33 0l.22.225h.47c.105 0 .155-.105.225-.21v-.075h-.205a.106.106 0 01-.105-.105.11.11 0 01.105-.105h.18l.025.005v-.12s-.03-.025-.04-.025h-.2l-.045.05a.235.235 0 01-.33.005l-.045-.06h-.115l.16.175c.015.015.015.06 0 .075-.02.015-.045.02-.06.005l-.195-.185h-.085l-.245.23-.02-.005c-.025.07-.06.055-.095.055-.085 0-.15-.045-.15-.13s.065-.14.15-.14h.115v-.125c0-.06.04-.09.1-.09h.05V2.36c0-.095.095-.2.19-.2h.19c.105 0 .18-.075.18-.185V1.94c0-.015.035.01.035-.06h-.125l-.005.01-.21.22a.085.085 0 01-.115 0 .085.085 0 010-.115l.255-.255c.02-.015.045-.015.065-.015.005 0 .005.015.005.015h.64a2.327 2.327 0 00-.355-.275 2.452 2.452 0 00-.355-.195c-.03-.015-.055-.03-.08-.04a3.025 3.025 0 00-1.735-.175c-.09.02-.175.055-.265.08-.09.03-.18.05-.265.085-.075.03-.145.07-.22.105-.115.06-.235.115-.34.185l-.005.005c-.1.065-.18.145-.27.22h.455c.06 0 .11.045.11.105s-.05.105-.11.105h-.32c0 .07-.025.04-.025.045v.24h.285l.15-.17c.09-.09.235-.105.325-.015.09.09.09.23 0 .32l-.795.79-.01.01c-.005 0-.005 0-.01.005l-.025.015h-.01a.235.235 0 01-.12.025h-.23c-.08.07-.125.1-.125.18v.06c0 .01-.02.02-.02.03l.375.39c.04.04.04.1 0 .14-.04.04-.1.04-.14 0l-.39-.385a.213.213 0 01-.055.01c-.105 0-.195-.085-.195-.185v-.235h-.055A3.1 3.1 0 009 4c0 1.655 1.345 3 3 3zm2.27-2.135c.05 0 .105.04.105.09v.285c0 .05-.055.09-.105.09-.05 0-.105-.04-.105-.09v-.285c0-.05.055-.09.105-.09zm-2.085-3.27c0 .13-.105.21-.225.21h-.25v.07c0 .075-.03.135-.105.135s-.105-.06-.105-.135V1.64c-.075-.02-.025-.025-.025-.04 0-.125.085-.215.21-.215h.27c.13 0 .23.085.23.21z"],"inbox-search":["M5.639 2a5.391 5.391 0 00-.144 2H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6V9c0-.088.012-.174.033-.255.12-.007.238-.019.39-.038.154-.008.252-.03.442-.077a5.34 5.34 0 00.24-.05h.05l.122-.04 1.266 1.271c.425.47 1.116.769 1.847.769.21 0 .414-.025.61-.071V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h2.639zM15.82 7.53c.1.12.17.27.18.44 0 .34-.27.61-.61.61a.57.57 0 01-.43-.18l-2.24-2.25c-.13.08-.26.16-.4.23-.02.01-.05.02-.07.03-.14.06-.27.12-.42.17h-.01c-.14.05-.29.08-.44.11-.04.01-.08.02-.11.02-.15.02-.3.04-.46.04-1.85 0-3.35-1.51-3.35-3.37S8.96.01 10.81 0c1.85 0 3.35 1.51 3.35 3.37 0 .16-.02.31-.04.47-.01.04-.01.07-.02.11-.02.15-.05.29-.1.44v.01c-.05.15-.11.28-.17.42-.01.02-.02.05-.03.07-.07.14-.14.27-.23.4l2.25 2.24zm-5.01-1.94c1.22 0 2.21-.99 2.21-2.22 0-1.23-.99-2.22-2.21-2.22S8.6 2.14 8.6 3.37c0 1.22.99 2.22 2.21 2.22z"],"inbox-update":["M8.1 2a5.023 5.023 0 000 2H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6V9c0-.55.45-1 1-1h2.05c.708 0 1.352-.241 1.905-.645L16 7.46V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h5.1zM13 6a3 3 0 110-6 3 3 0 010 6z"],"info-sign":["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM7 3h2v2H7V3zm3 10H6v-1h1V7H6V6h3v6h1v1z"],inheritance:["M5 8c0 1.66 1.34 3 3 3h4.59L11.3 9.71A.965.965 0 0111 9a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42l1.3-1.29H8c-2.76 0-5-2.24-5-5H1a1 1 0 01-1-1V1a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5zM2 2v4h4V2H2z"],"inherited-group":["M1 7c.51 0 .935.388.993.884L2 8v3c0 .51.388.935.884.993L3 12h1.59l-.3-.29a1.003 1.003 0 011.324-1.504l.096.084 2 2c.18.18.29.43.29.71 0 .233-.076.446-.206.614l-.084.096-2 2A1.003 1.003 0 014 15c0-.24.08-.458.224-.629l.076-.081.29-.29H3a2.996 2.996 0 01-2.995-2.823L0 11V8c0-.55.45-1 1-1zm5.388-7c.629 0 1.338.21 1.838.6.48.38.85.91 1.019 1.52.04.13.07.27.09.4.09.48.14 1.22.14 1.73v.07c.18.08.34.27.37.67.03.32-.09.59-.16.71-.06.28-.21.58-.48.63-.03.13-.07.26-.12.39 0 .01-.01.04-.01.04-.22.58-.55 1.08-.949 1.45v.18c.04.45-.12.77 1.059 1.3 1.179.53 2.947 1.09 3.307 1.95.37.86.22 1.36.22 1.36H9c0-.539-.21-1.045-.583-1.417l-2-2A1.997 1.997 0 005 9c-.149 0-.296-.015-.442-.045.099-.19.082-.37.101-.575 0-.05.01-.11.01-.17-.41-.35-.75-.86-.969-1.45v-.01s-.01-.01-.01-.02c-.04-.12-.09-.26-.12-.39-.28-.05-.44-.36-.5-.64-.06-.12-.19-.39-.16-.71.04-.41.21-.6.39-.68v-.06c0-.51.05-1.26.14-1.74.02-.13.05-.27.09-.4.17-.6.54-1.13 1.02-1.51C5.048.21 5.757 0 6.387 0zm4.625 2.04c.49 0 1.05.16 1.439.46.38.29.67.7.8 1.17.03.1.05.21.07.31.07.37.11.94.11 1.33v.05c.139.06.269.21.289.51.02.25-.07.45-.13.54-.05.21-.16.44-.38.48a1.711 1.711 0 01-.1.33c-.17.44-.43.83-.749 1.11v.14c.03.35-.09.59.83 1 .929.41 2.317.84 2.597 1.5.29.66.17 1.04.17 1.04H13.66v.01c-.05-.24-.14-.5-.25-.76-.36-.86-1.119-1.33-2.687-2-.14-.06-.59-.25-.6-.25-.21-.09-.36-.15-.5-.22.02-.1.02-.2.03-.31 0-.04.01-.08.01-.13-.07-.06-.13-.12-.19-.19.22-.32.4-.67.54-1.05.02-.06.02-.06.03-.1.29-.23.48-.57.59-.96.16-.33.25-.73.21-1.16-.03-.4-.16-.76-.37-1.03-.02-.53-.07-1.13-.15-1.54-.01-.06-.02-.12-.03-.19.23-.06.48-.09.72-.09z"],"inner-join":["M6.6 3.3C5.3 4.4 4.5 6.1 4.5 8s.8 3.6 2.1 4.7c-.5.2-1 .3-1.6.3-2.8 0-5-2.2-5-5s2.2-5 5-5c.6 0 1.1.1 1.6.3zm-1.96 8.68C3.92 10.83 3.5 9.46 3.5 8s.42-2.83 1.14-3.98C2.6 4.2 1 5.91 1 8s1.6 3.8 3.64 3.98zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3zm.35 1.02c.73 1.15 1.14 2.52 1.14 3.98s-.42 2.83-1.14 3.98c2.04-.18 3.64-1.9 3.64-3.98s-1.6-3.8-3.64-3.98z"],insert:["M5 9h2v2c0 .6.4 1 1 1s1-.4 1-1V9h2c.6 0 1-.4 1-1s-.4-1-1-1H9V5c0-.6-.4-1-1-1s-1 .4-1 1v2H5c-.6 0-1 .4-1 1s.4 1 1 1zm10-9H1C.4 0 0 .4 0 1v14c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H2V2h12v12z"],intersection:["M10 3c-.92 0-1.76.26-2.5.69C6.76 3.26 5.92 3 5 3 2.24 3 0 5.24 0 8s2.24 5 5 5c.92 0 1.76-.26 2.5-.69.74.43 1.58.69 2.5.69 2.76 0 5-2.24 5-5s-2.24-5-5-5zm-4.1 7.85c-.29.09-.59.15-.9.15-1.66 0-3-1.34-3-3s1.34-3 3-3c.31 0 .61.06.9.15C5.33 5.96 5 6.94 5 8s.33 2.04.9 2.85zM10 11c-.31 0-.61-.06-.9-.15.57-.81.9-1.79.9-2.85s-.33-2.04-.9-2.85c.29-.09.59-.15.9-.15 1.66 0 3 1.34 3 3s-1.34 3-3 3z"],"ip-address":["M5 2.66C5 4.14 8 8 8 8s3-3.86 3-5.34C10.99 1.2 9.66 0 8 0S5 1.2 5 2.66zM7 3c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1zM10.5 10H8v5h1v-4h1v1H9v1h2v-3h-.5zM2 9h12c.55 0 1 .45 1 1v5c0 .55-.45 1-1 1H2c-.55 0-1-.45-1-1v-5c0-.55.45-1 1-1zm4 1v5h1v-5H6z"],issue:["M8 16A8 8 0 118 0a8 8 0 010 16zm0-2A6 6 0 108 2a6 6 0 000 12zm1-2H7v-2h2v2zm0-3H7V4h2v5z"],"issue-closed":["M9.296.104a2.99 2.99 0 00-1.003.664 2.987 2.987 0 00-.75 1.25 6 6 0 106.28 4.527c.043-.039.085-.079.127-.12l1.456-1.456A8 8 0 119.296.105zm2.532 5.2a.997.997 0 01-.707-.294L9.707 3.596a1 1 0 011.414-1.414l.707.707 1.768-1.768a1 1 0 111.414 1.415L12.536 5.01a.997.997 0 01-.708.293zM9 12H7v-2h2v2zm0-3H7V4h2v5z"],"issue-new":["M10.568.421c-.01.04-.018.08-.026.121-.837.156-1.53.73-1.85 1.497a6 6 0 105.27 5.273 2.51 2.51 0 001.496-1.854c.04-.008.081-.016.121-.026A8 8 0 1110.568.421zM9 12H7v-2h2v2zm0-3H7V4h2v5zm1-6c0-.55.45-1 1-1h1V1c0-.55.45-1 1-1s1 .45 1 1v1h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v1.005c0 .55-.45 1-1 1s-1-.45-1-1V4h-1c-.55 0-1-.45-1-1z"],italic:["M9.8 4H11c.5 0 1-.4 1-1s-.4-1-1-1H7c-.5 0-1 .4-1 1s.4 1 1 1h.8l-1.6 8H5c-.5 0-1 .4-1 1s.4 1 1 1h4c.5 0 1-.4 1-1s-.4-1-1-1h-.8l1.6-8z"],"join-table":["M15 5h-3V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h3v3c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-5-1v2H6V4h4zm0 6H6V7h4v3zM2 4h3v2H2V4zm0 5V7h3v2H2zm4 4v-2h4v2H6zm8 0h-3v-2h3v2zm0-3h-3V8h3v2z"],key:["M11 0C8.24 0 6 2.24 6 5c0 1.02.31 1.96.83 2.75L.29 14.29a1.003 1.003 0 001.42 1.42L3 14.41l1.29 1.29c.18.19.43.3.71.3s.53-.11.71-.29l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71L6.41 11l1.83-1.83c.8.52 1.74.83 2.76.83 2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8c-.23 0-.45-.03-.66-.08-.01 0-.02-.01-.03-.01-.21-.05-.41-.12-.6-.21a3.014 3.014 0 01-1.62-2c0-.01-.01-.02-.01-.03C8.03 5.45 8 5.23 8 5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3z"],"key-backspace":["M15 2H6c-.28 0-.53.11-.71.29l-5 5C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l5 5c.18.18.43.29.71.29h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-2.29 7.29a1.003 1.003 0 01-1.42 1.42L10 9.41 8.71 10.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L8.59 8l-1.3-1.29a1.003 1.003 0 011.42-1.42L10 6.59l1.29-1.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L11.41 8l1.3 1.29z"],"key-command":["M12 9h-1V7h1c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3v1H7V4c0-1.66-1.34-3-3-3S1 2.34 1 4s1.34 3 3 3h1v2H4c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3v-1h2v1c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3zm0-6c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM4 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm5 4H7V7h2v2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"key-control":["M12.71 5.29l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"key-delete":["M15.71 7.29l-5-5A.997.997 0 0010 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h9c.28 0 .53-.11.71-.29l5-5c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zm-7 2a1.003 1.003 0 01-1.42 1.42L6 9.41 4.71 10.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L4.59 8l-1.3-1.29a1.003 1.003 0 011.42-1.42L6 6.59 7.29 5.3c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L7.41 8l1.3 1.29z"],"key-enter":["M14 2c-.55 0-1 .45-1 1v3c0 1.66-1.34 3-3 3H4.41L5.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L4.41 11H10c2.76 0 5-2.24 5-5V3c0-.55-.45-1-1-1z"],"key-escape":["M2 7c.55 0 1-.45 1-1V4.41L7.29 8.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 3H6c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm7-5.9v2A5 5 0 113.1 9h-2c.49 3.39 3.38 6 6.9 6 3.87 0 7-3.13 7-7 0-3.52-2.61-6.41-6-6.9z"],"key-option":["M11 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm4 8h-3.43L5.86 2.49h-.02A.975.975 0 005 2H1c-.55 0-1 .45-1 1s.45 1 1 1h3.43l5.71 9.51.01-.01c.18.3.49.5.85.5h4c.55 0 1-.45 1-1s-.45-1-1-1z"],"key-shift":["M13.71 7.29l-5-5C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-5 5A1.003 1.003 0 003 9h2v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V9h2a1.003 1.003 0 00.71-1.71z"],"key-tab":["M15 10H4.41L5.7 8.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L2 9.59V8c0-.55-.45-1-1-1s-1 .45-1 1v6c0 .55.45 1 1 1s1-.45 1-1v-1.59l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 12H15c.55 0 1-.45 1-1s-.45-1-1-1zm0-9c-.55 0-1 .45-1 1v1.59L11.71 1.3A.965.965 0 0011 1a1.003 1.003 0 00-.71 1.71L11.59 4H1c-.55 0-1 .45-1 1s.45 1 1 1h10.59L10.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L14 6.41V8c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],"known-vehicle":["M15 3a.997.997 0 00-.707.293L12 5.586l-1.293-1.293a1 1 0 10-1.414 1.414l2 2a.997.997 0 001.414 0l3-3A1 1 0 0015 3zm-.879 6.121l-.007-.007c-.313.309-.69.552-1.114.702V10h-.998H12h-1v-.184c-.424-.15-.8-.395-1.112-.704l-.01.01-2-2 .012-.012A2.978 2.978 0 017.184 6H3c-.176 0-.06-.824 0-1l.73-1.63C3.79 3.192 3.823 3 4 3H7.78C8.328 2.39 9.115 2 10 2c.768 0 1.461.293 1.987.77l.844-.844c-.238-.244-.524-.442-.794-.524C12.037 1.402 10.72 1 8 1c-2.72 0-4.037.402-4.037.402-.508.155-1.078.711-1.268 1.237l-.763 2.117H.88c-.484 0-.88.423-.88.939s.396.939.88.939h.375L1 7c-.034.685 0 1.436 0 2v5c0 .657.384 1 1 1s1-.343 1-1v-1h10v1c0 .657.384 1 1 1s1-.343 1-1V9l-.003-.754-.876.875zM5.001 10H3V8h2v2z"],"lab-test":["M11 1a1 1 0 010 2v3l3 7v1.25a.75.75 0 01-.75.75H2.75a.75.75 0 01-.75-.75V13l3-7V3a1 1 0 110-2h6zM9 3H7v3l-1.714 4h5.428L9 6V3z"],label:["M11 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7l-5-5zm3 10H2V4h8v2H3v1h7v1h4v4zm-3-5V4l3 3h-3zm-8 3h10V9H3v1z"],layer:["M16 8c0-.37-.21-.68-.51-.85l.01-.01-7-4-.01.01C8.34 3.06 8.18 3 8 3s-.34.06-.49.15l-.01-.02-7 4 .01.01C.21 7.32 0 7.63 0 8s.21.68.51.85l-.01.01 7 4 .01-.01c.15.09.31.15.49.15s.34-.06.49-.15l.01.01 7-4-.01-.01c.3-.17.51-.48.51-.85z"],layers:["M.55 4.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5a.998.998 0 00-.06-1.81L8.4.08a1.006 1.006 0 00-.79 0l-6.99 3a.992.992 0 00-.07 1.81zM15 10c-.16 0-.31.04-.45.11L8 13.38 1.45 10.1c-.14-.06-.29-.1-.45-.1-.55 0-1 .45-1 1 0 .39.23.73.55.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5c.32-.16.55-.5.55-.89 0-.55-.45-1-1-1zm0-3.5c-.16 0-.31.04-.45.11L8 9.88 1.45 6.61A.997.997 0 001 6.5c-.55 0-1 .45-1 1 0 .39.23.73.55.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5c.32-.16.55-.5.55-.89 0-.55-.45-1-1-1z"],layout:["M14 4c-1.1 0-2 .9-2 2 0 .47.17.9.44 1.24l-.68.91A1.996 1.996 0 009.07 9.5H7.93C7.71 8.64 6.93 8 6 8c-.47 0-.9.17-1.24.44l-.91-.68c.1-.23.15-.49.15-.76 0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .37.11.71.28 1.01L3.01 5.28C2.71 5.11 2.37 5 2 5 .9 5 0 5.9 0 7s.9 2 2 2c.47 0 .9-.17 1.24-.44l.91.68c-.1.23-.15.49-.15.76 0 .37.11.71.28 1.01l-1.27 1.27C2.71 12.11 2.37 12 2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.37-.11-.71-.28-1.01l1.27-1.27c.3.17.64.28 1.01.28.93 0 1.71-.64 1.93-1.5h1.14c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2 0-.47-.17-.9-.44-1.24l.68-.91c.23.1.49.15.76.15 1.1 0 2-.9 2-2s-.9-2-2-2z"],"layout-auto":["M14 9.5c-.56 0-1.06.23-1.42.59L8.99 8l3.59-2.09A2.002 2.002 0 0016 4.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .19.03.37.08.54L8.5 7.13v-3.2c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v3.2L3.92 5.04c.05-.17.08-.35.08-.54 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.56 0 1.06-.23 1.42-.59L7.01 8l-3.59 2.09A2.002 2.002 0 000 11.5c0 1.1.9 2 2 2s2-.9 2-2c0-.19-.03-.37-.08-.54L7.5 8.87v3.2c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-3.2l3.58 2.09c-.05.17-.08.35-.08.54 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z"],"layout-balloon":["M14 11c-.2 0-.38.04-.56.09L12.42 9.4c.36-.36.58-.85.58-1.4 0-.55-.22-1.04-.58-1.4l1.01-1.69c.19.05.37.09.57.09 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .55.22 1.04.58 1.4l-1.01 1.69C11.38 6.04 11.2 6 11 6c-.93 0-1.71.64-1.93 1.5H6.93C6.71 6.64 5.93 6 5 6c-.2 0-.38.04-.56.09L3.42 4.4C3.78 4.04 4 3.55 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.2 0 .38-.04.56-.09L3.58 6.6C3.22 6.96 3 7.45 3 8c0 .55.22 1.04.58 1.4l-1.01 1.69C2.38 11.04 2.2 11 2 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.55-.22-1.04-.58-1.4l1.01-1.69c.19.05.37.09.57.09.93 0 1.71-.64 1.93-1.5h2.14c.22.86 1 1.5 1.93 1.5.2 0 .38-.04.56-.09l1.01 1.69c-.35.36-.57.85-.57 1.4 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z"],"layout-circle":["M14.16 6.02c-.12-.36-.26-.7-.43-1.03.17-.29.27-.63.27-.99 0-1.1-.9-2-2-2-.36 0-.7.1-.99.27-.33-.17-.67-.31-1.03-.43A1.987 1.987 0 008 0C6.95 0 6.1.81 6.02 1.84c-.36.12-.7.26-1.03.43C4.7 2.1 4.36 2 4 2c-1.1 0-2 .9-2 2 0 .36.1.7.27.99-.17.33-.31.67-.43 1.03C.81 6.1 0 6.95 0 8c0 1.05.81 1.9 1.84 1.98.12.36.26.7.43 1.03-.17.29-.27.63-.27.99 0 1.1.9 2 2 2 .36 0 .7-.1.99-.27.33.17.67.32 1.03.43C6.1 15.19 6.95 16 8 16c1.05 0 1.9-.81 1.98-1.84.36-.12.7-.26 1.03-.43.29.17.63.27.99.27 1.1 0 2-.9 2-2 0-.36-.1-.7-.27-.99.17-.33.31-.67.43-1.03C15.19 9.9 16 9.05 16 8c0-1.05-.81-1.9-1.84-1.98zm-.99 3.79c-.05.16-.11.31-.17.46-.3-.17-.64-.27-1-.27-1.1 0-2 .9-2 2 0 .36.1.7.27 1-.15.07-.3.12-.46.17C9.5 12.48 8.81 12 8 12s-1.5.48-1.81 1.17c-.16-.06-.32-.11-.46-.17.17-.3.27-.64.27-1 0-1.1-.9-2-2-2-.36 0-.7.1-1 .27-.07-.15-.12-.3-.17-.46C3.52 9.5 4 8.81 4 8s-.48-1.5-1.17-1.81c.06-.16.11-.32.17-.46.3.17.64.27 1 .27 1.1 0 2-.9 2-2 0-.36-.1-.7-.27-1 .15-.07.3-.12.46-.17C6.5 3.52 7.19 4 8 4s1.5-.48 1.81-1.17c.16.06.32.11.46.17-.17.3-.27.64-.27 1 0 1.1.9 2 2 2 .36 0 .7-.1 1-.27.07.15.12.3.17.46C12.48 6.5 12 7.19 12 8s.48 1.5 1.17 1.81z"],"layout-grid":["M2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 0C6.9 0 6 .9 6 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],"layout-group-by":["M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 5c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 1C.9 1 0 1.9 0 3s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],"layout-hierarchy":["M14.5 12.07V9.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2-.93 0-1.71.64-1.93 1.5H9.93c-.18-.7-.73-1.25-1.43-1.43V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v2.14c-.7.18-1.25.73-1.43 1.43H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8c0 .93.64 1.71 1.5 1.93v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93V9.93c.7-.18 1.25-.73 1.43-1.43h2.14c.18.7.73 1.25 1.43 1.43v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93V9.93c.7-.18 1.25-.73 1.43-1.43h2.14c.18.7.73 1.25 1.43 1.43v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93z"],"layout-linear":["M14 6c-.93 0-1.71.64-1.93 1.5H9.93C9.71 6.64 8.93 6 8 6s-1.71.64-1.93 1.5H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.93 0 1.71-.64 1.93-1.5h2.13C6.29 9.36 7.07 10 8 10s1.71-.64 1.93-1.5h2.13c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2C16 6.9 15.1 6 14 6z"],"layout-skew-grid":["M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],"layout-sorted-clusters":["M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],learning:["M8.441 1.104a.985.985 0 00-.882 0L.365 5c-.487.253-.487.747 0 1L7.56 9.896a.985.985 0 00.882 0L15.635 6c.487-.253.487-.747 0-1L8.44 1.104z","M14 5.5l.016 4.514c.002.548.447.99.994.99a.99.99 0 00.99-.99V5.5h-2zM3.371 9.047l4.387 2.432a.5.5 0 00.485 0l4.39-2.432a.25.25 0 01.371.218v2.955a.25.25 0 01-.134.222l-4.635 2.436a.5.5 0 01-.466 0l-4.635-2.436A.25.25 0 013 12.22V9.265a.25.25 0 01.371-.218z"],"left-join":["M6.6 3.3C6.1 3.1 5.6 3 5 3 2.2 3 0 5.2 0 8s2.2 5 5 5c.6 0 1.1-.1 1.6-.3C5.3 11.6 4.5 9.9 4.5 8s.8-3.6 2.1-4.7zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3zm.35 1.02c.73 1.15 1.14 2.52 1.14 3.98s-.42 2.83-1.14 3.98c2.04-.18 3.64-1.9 3.64-3.98s-1.6-3.8-3.64-3.98z"],"less-than":["M13.287 5.958a1 1 0 00-.574-1.916l-10 3c-.95.285-.95 1.631 0 1.916l10 3a1 1 0 00.574-1.916L6.48 8l6.807-2.042z"],"less-than-or-equal-to":["M13.287 3.958a1 1 0 00-.575-1.916l-10 3c-.95.285-.95 1.63 0 1.916l10 3a1 1 0 00.575-1.916L6.48 6l6.807-2.042zM13 12H3a1 1 0 000 2h10a1 1 0 000-2z"],lifesaver:["M9.405 11.746C8.968 11.91 8.495 12 8 12c-.494 0-.968-.09-1.405-.254l-.702 1.873C6.548 13.865 7.258 14 8 14c.742 0 1.452-.135 2.107-.38l-.702-1.874zm2.341-2.341l1.873.702C13.865 9.452 14 8.742 14 8c0-.742-.135-1.452-.38-2.107l-1.874.702c.164.437.254.91.254 1.405 0 .494-.09.968-.254 1.405zM9.405 4.254l.702-1.873A5.987 5.987 0 008 2c-.742 0-1.452.135-2.107.38l.702 1.874C7.032 4.09 7.505 4 8 4c.494 0 .968.09 1.405.254zM4.254 6.595L2.38 5.893A5.987 5.987 0 002 8c0 .742.135 1.452.38 2.107l1.874-.702A3.991 3.991 0 014 8c0-.494.09-.968.254-1.405zM8 16A8 8 0 118 0a8 8 0 010 16zm0-6a2 2 0 100-4 2 2 0 000 4z"],lightbulb:["M9.01 14h-2c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1s-.44-1-1-1zm1-3h-4c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.44-1-1-1zm-2-11C5.26 0 3.03 1.95 3.03 4.35c0 2.37 1.63 2.64 1.94 5.22 0 .24.22.44.5.44h5.09c.28 0 .5-.19.5-.44C11.37 6.99 13 6.72 13 4.35 13 1.95 10.77 0 8.01 0z"],link:["M4.99 11.99c.28 0 .53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42l-6 6a1.003 1.003 0 00.71 1.71zm3.85-2.02L6.4 12.41l-1 1-.01-.01c-.36.36-.85.6-1.4.6-1.1 0-2-.9-2-2 0-.55.24-1.04.6-1.4l-.01-.01 1-1 2.44-2.44c-.33-.1-.67-.16-1.03-.16-1.1 0-2.09.46-2.81 1.19l-.02-.02-1 1 .02.02c-.73.72-1.19 1.71-1.19 2.81 0 2.21 1.79 4 4 4 1.1 0 2.09-.46 2.81-1.19l.02.02 1-1-.02-.02c.73-.72 1.19-1.71 1.19-2.81 0-.35-.06-.69-.15-1.02zm7.15-5.98c0-2.21-1.79-4-4-4-1.1 0-2.09.46-2.81 1.19l-.02-.02-1 1 .02.02c-.72.72-1.19 1.71-1.19 2.81 0 .36.06.69.15 1.02l2.44-2.44 1-1 .01.01c.36-.36.85-.6 1.4-.6 1.1 0 2 .9 2 2 0 .55-.24 1.04-.6 1.4l.01.01-1 1-2.43 2.45c.33.09.67.15 1.02.15 1.1 0 2.09-.46 2.81-1.19l.02.02 1-1-.02-.02a3.92 3.92 0 001.19-2.81z"],list:["M1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 10H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"list-columns":["M6 1c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm9-12c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5z"],"list-detail-view":["M6 9H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm9-12h-5c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM6 5H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1z"],locate:["M15 7h-.09A6.98 6.98 0 009 1.1V1c0-.55-.45-1-1-1S7 .45 7 1v.09A6.98 6.98 0 001.1 7H1c-.55 0-1 .45-1 1s.45 1 1 1h.1A6.969 6.969 0 007 14.91V15c0 .55.45 1 1 1s1-.45 1-1v-.09A6.98 6.98 0 0014.9 9h.1c.55 0 1-.45 1-1s-.45-1-1-1zm-6.02 5.9c-.05-.5-.46-.9-.98-.9s-.93.4-.98.9A5.017 5.017 0 013.1 8.98c.5-.05.9-.46.9-.98s-.4-.93-.9-.98A5.017 5.017 0 017.02 3.1c.05.5.46.9.98.9s.93-.4.98-.9c1.97.39 3.52 1.95 3.92 3.92-.5.05-.9.46-.9.98s.4.93.9.98a5.017 5.017 0 01-3.92 3.92zM8 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],lock:["M13.96 7H12V3.95C12 1.77 10.21 0 8 0S4 1.77 4 3.95V7H1.96c-.55 0-.96.35-.96.9v6.91c0 .54.41 1.19.96 1.19h12c.55 0 1.04-.65 1.04-1.19V7.9c0-.55-.49-.9-1.04-.9zM6 7V3.95c0-1.09.9-1.97 2-1.97s2 .88 2 1.97V7H6z"],"log-in":["M11 8c0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L7.59 7H1c-.55 0-1 .45-1 1s.45 1 1 1h6.59L6.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71zm4-8H9c-.55 0-1 .45-1 1s.45 1 1 1h5v12H9c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"log-out":["M7 14H2V2h5c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm8.71-6.71l-3-3a1.003 1.003 0 00-1.42 1.42L12.59 7H6c-.55 0-1 .45-1 1s.45 1 1 1h6.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],manual:["M15.99 1.13c-.02-.41-.33-.77-.78-.87C12.26-.36 9.84.13 8 1.7 6.16.13 3.74-.36.78.26.33.35.03.72.01 1.13H0v12c0 .08 0 .17.02.26.12.51.65.82 1.19.71 2.63-.55 4.59-.04 6.01 1.57.02.03.06.04.08.06.02.02.03.04.05.06.04.03.09.04.13.07.05.03.09.05.14.07.11.04.23.07.35.07h.04c.12 0 .24-.03.35-.07.05-.02.09-.05.14-.07.04-.02.09-.04.13-.07.02-.02.03-.04.05-.06.03-.02.06-.03.08-.06 1.42-1.6 3.39-2.12 6.01-1.57.54.11 1.07-.21 1.19-.71.04-.09.04-.18.04-.26l-.01-12zM7 12.99c-1.4-.83-3.07-1.14-5-.93V1.96c2.11-.28 3.75.2 5 1.46v9.57zm7-.92c-1.93-.21-3.6.1-5 .93V3.42c1.25-1.26 2.89-1.74 5-1.46v10.11z"],"manually-entered-data":["M1 8h3.76l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm14.49-4.01c.31-.32.51-.76.51-1.24C16 1.78 15.22 1 14.25 1c-.48 0-.92.2-1.24.51l-1.44 1.44 2.47 2.47 1.45-1.43zM1 4h7.76l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 6c-.55 0-1 .45-1 1 0 .48.35.86.8.96L2.76 10H1zm9.95-6.43l-6.69 6.69 2.47 2.47 6.69-6.69-2.47-2.47zm4.25 2.47L13.24 8H15c.55 0 1-.45 1-1 0-.48-.35-.86-.8-.96zM2 15l3.86-1.39-2.46-2.44L2 15zm13-5h-3.76l-2 2H15c.55 0 1-.45 1-1s-.45-1-1-1z"],map:["M15.55 3.17l-4.49-3A.975.975 0 009.99.15L5.53 2.82 1.56.17A1.003 1.003 0 000 1v11c0 .35.18.65.45.83l4.49 3a.975.975 0 001.07.02l4.46-2.67 3.97 2.65A1.003 1.003 0 0016 15V4c0-.35-.18-.65-.45-.83zM5 13.46l-3-2v-8.6l2.94 1.96c.02.02.04.03.06.04v8.6zm5-2.32s-.01 0-.01.01L6 13.53V4.86s.01 0 .01-.01L10 2.47v8.67zm4 1.99l-2.94-1.96c-.02-.01-.04-.02-.05-.03v-8.6l3 2v8.59z"],"map-create":["M14 6.82v6.32l-2.94-1.96c-.02-.01-.04-.02-.05-.03V6.22c-.08-.07-.15-.16-.22-.24-.28-.02-.54-.08-.79-.16v5.32s-.01 0-.01.01L6 13.53V4.86s.01 0 .01-.01l2.05-1.23C8.02 3.42 8 3.21 8 3c0-.98.47-1.84 1.2-2.39l-3.67 2.2L1.56.17A1.003 1.003 0 000 1v11c0 .35.18.65.45.83l4.49 3a.975.975 0 001.07.02l4.46-2.67 3.97 2.65A1.003 1.003 0 0016 15V5.82c-.25.09-.52.14-.8.16-.33.36-.73.67-1.2.84zm-9 6.64l-3-2v-8.6l2.94 1.96c.02.02.04.03.06.04v8.6zM11 4h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1z"],"map-marker":["M8.46 0C5.42 0 2.95 2.39 2.95 5.33 2.95 8.28 8.46 16 8.46 16s5.51-7.72 5.51-10.67C13.96 2.39 11.5 0 8.46 0zm0 8a2.5 2.5 0 010-5 2.5 2.5 0 010 5z"],maximize:["M5.99 8.99c-.28 0-.53.11-.71.29l-3.29 3.29v-1.59c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.41L6.7 10.7a1.003 1.003 0 00-.71-1.71zm9-9h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.3a.99.99 0 00-.29.7 1.003 1.003 0 001.71.71l3.29-3.29V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z"],media:["M11.99 6.99c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm3-5h-14c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-10c0-.55-.45-1-1-1zm-1 9l-5-3-1 2-3-4-3 5v-7h12v7z"],menu:["M1 4h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 8H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-5H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"menu-closed":["M14.99 6.99h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm-12-2c-.28 0-.53.11-.71.29l-2 2a1.014 1.014 0 000 1.42l2 2a1.003 1.003 0 001.71-.71v-4c0-.55-.45-1-1-1zm3-1h9c.55 0 1-.45 1-1s-.45-1-1-1h-9c-.55 0-1 .45-1 1s.45 1 1 1zm9 8h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1z"],"menu-open":["M9.99 11.99h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm5.71 5.3l-2-2a1.003 1.003 0 00-1.71.71v4a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71z"],"merge-columns":["M5.71 5.29a1.003 1.003 0 00-1.42 1.42l.3.29H2V2h3v1.51c.52.06.99.29 1.34.65l.66.66V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-3.82l-.66.66c-.35.35-.82.59-1.34.65V14H2V9h2.59l-.3.29a1.003 1.003 0 001.42 1.42l2-2C7.89 8.53 8 8.28 8 8c0-.28-.11-.53-.29-.71l-2-2zM15 0h-5c-.55 0-1 .45-1 1v3.82l.66-.66c.35-.35.82-.59 1.34-.65V2h3v5h-2.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C8.11 7.47 8 7.72 8 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14v5h-3v-1.51c-.52-.06-.99-.29-1.34-.65L9 11.18V15c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"merge-links":["M8 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6 3c-.93 0-1.71.64-1.93 1.5H11V3c0-1.66-1.34-3-3-3S5 1.34 5 3v4.5H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.93 0 1.71-.64 1.93-1.5H5V13c0 1.66 1.34 3 3 3s3-1.34 3-3V8.5h1.07c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2s-.9-2-2-2zm-4 7c0 1.1-.9 2-2 2s-2-.9-2-2V3c0-1.1.9-2 2-2s2 .9 2 2v10z"],minimize:["M15.99.99a1.003 1.003 0 00-1.71-.71l-3.29 3.29V1.99c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H12.4l3.3-3.29c.18-.18.29-.43.29-.71zm-10 8h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.29 14.28a1.003 1.003 0 001.42 1.42L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4a1.02 1.02 0 00-1.01-1.01z"],minus:["M13 7H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z"],"mobile-phone":["M12 0H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM8 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3-3H5V3h6v9z"],"mobile-video":["M15 4c-.28 0-.53.11-.71.29L12 6.59V4c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V9.41l2.29 2.29c.18.19.43.3.71.3.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z"],modal:["M15 1a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h14zm-1 4H2v8h12V5zm-3-3H9v2h2V2zm3 0h-2v2h2V2z"],"modal-filled":["M15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm1 4H0V3h16v2zm-3-2h-2V1h2v2z"],moon:["M15 11.38A7.835 7.835 0 017.85 16C3.51 16 0 12.49 0 8.15 0 4.97 1.89 2.23 4.62 1c-.45.99-.7 2.08-.7 3.23a7.85 7.85 0 007.85 7.85c1.15 0 2.24-.25 3.23-.7z"],more:["M2 6.03a2 2 0 100 4 2 2 0 100-4zM14 6.03a2 2 0 100 4 2 2 0 100-4zM8 6.03a2 2 0 100 4 2 2 0 100-4z"],mountain:["M16 13H3l6-9h1l2 2h1l3 7zm-2.5-3.5l-1-2.5h-1l-2-2-3 4.5L9 8l1 1 1-1 2.5 1.5zM5.94 7l-4.122 6H0l5-6h.94z"],move:["M15.71 7.29l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9V3.41l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53.11 8.28 0 8 0s-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V7H3.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 9H7v3.59l-.29-.29A.965.965 0 006 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2a1.003 1.003 0 00-1.42-1.42l-.29.3V9h3.59l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],mugshot:["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14h-.15c-.03-.09-.04-.16-.08-.25-.34-.79-2.01-1.31-3.12-1.8-1.11-.49-.96-.79-1-1.2-.01-.06-.01-.12-.01-.18.38-.34.69-.8.89-1.33 0 0 .01-.03.01-.04.04-.12.08-.24.11-.36.25-.05.4-.33.46-.59.06-.1.18-.36.15-.65-.04-.37-.19-.55-.35-.62v-.06c0-.48-.04-1.16-.13-1.61-.02-.12-.05-.25-.08-.37-.16-.55-.51-1.05-.96-1.39C9.26 3.19 8.6 3 8 3c-.59 0-1.26.19-1.73.55-.45.35-.8.84-.96 1.39-.04.13-.06.25-.08.38-.09.45-.13 1.13-.13 1.61v.06c-.18.06-.33.24-.37.62-.03.29.09.54.15.65.06.26.21.54.47.59.03.12.07.25.11.36 0 .01.01.02.01.02v.01c.21.54.53 1.01.92 1.35 0 .05-.01.11-.01.16-.04.41.08.7-1.03 1.2-1.11.49-2.77 1.01-3.12 1.8-.04.09-.05.16-.08.25H2V2h12v12z"],"multi-select":["M12 3.98H4c-.55 0-1 .45-1 1v1h8v5h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm3-3H7c-.55 0-1 .45-1 1v1h8v5h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm-6 6H1c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm-1 5H2v-3h6v3z"],music:["M15 0c-.07 0-.13.03-.19.04V.02l-10 2v.02C4.35 2.13 4 2.52 4 3v9.12c-.31-.07-.65-.12-1-.12-1.66 0-3 .9-3 2s1.34 2 3 2 3-.9 3-2V6.32l8-1.6v5.4c-.31-.07-.65-.12-1-.12-1.66 0-3 .9-3 2s1.34 2 3 2 3-.9 3-2V1c0-.55-.45-1-1-1z"],"new-drawing":["M14.9 11c.6 0 1 .5 1 1 0 .257-.073.44-.22.614l-.08.086-3 3c-.2.2-.4.3-.7.3-.5 0-1-.4-1-1 0-.257.073-.44.22-.614l.08-.086 3-3c.2-.2.4-.3.7-.3zM1.3.1l6.734 2.45a3.005 3.005 0 002.095 3.322 3.005 3.005 0 003.401 2.081L13.9 9.8v.2c0 .257-.073.44-.22.614l-.08.086-3 3c-.171.171-.343.27-.577.294L9.9 14h-.2l-5-1-.1-.01c-.231-.05-.45-.26-.56-.49L4 12.4l-4-11 .3-.3 5.8 5.8c-.1.2-.2.4-.2.6 0 .8.6 1.5 1.5 1.5s1.5-.7 1.5-1.5S8.2 6 7.4 6c-.16 0-.32.064-.48.14l-.12.06L1 .4l.3-.3zM13 0c.55 0 1 .45 1 1v1h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .503-.376.922-.861.99l-.013.002A.999.999 0 0113 6l.097-.006-.027.004a1 1 0 01-.037.001L13 6c-.55 0-1-.45-1-1V4h-1a.993.993 0 01-.855-.482A1 1 0 0110 3c0-.55.45-1 1-1h1V1c0-.55.45-1 1-1z"],"new-grid-item":["M6 0H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm5 14c0-.55-.45-1-1-1s-1 .45-1 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1s-.45-1-1-1zM6 9H1c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm9 4c-.55 0-1 .45-1 1-.55 0-1 .45-1 1s.45 1 1 1h1c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm-4-4h-1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1s1-.45 1-1c.55 0 1-.45 1-1s-.45-1-1-1zm4-9h-5c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm0 9h-1c-.55 0-1 .45-1 1s.45 1 1 1c0 .55.45 1 1 1s1-.45 1-1v-1c0-.55-.45-1-1-1z"],"new-layer":["M13.982 6.272l1.518.868-.01.01c.3.17.51.48.51.85s-.21.68-.51.85l.01.01-7 4-.01-.01A.94.94 0 018 13a.94.94 0 01-.49-.15l-.01.01-7-4 .01-.01A.977.977 0 010 8c0-.37.21-.68.51-.86L.5 7.13l7-4 .01.02A.94.94 0 018 3c.086 0 .168.014.246.038a2 2 0 105.736 3.234zM14 3c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .55-.45 1-1 1s-1-.45-1-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 1-1s1 .45 1 1v1h1z"],"new-layers":["M13 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5H9a1 1 0 110-2h2V1a1 1 0 012 0v2zm-3-1.983V2H9a2 2 0 100 4h1v1c0 .279.057.544.16.785l-1.71.855c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5a.992.992 0 01.07-1.81l6.99-3a1.006 1.006 0 01.79 0l1.6.687zm.91 7.66a2 2 0 003.085-1.54l.555-.277c.14-.07.29-.11.45-.11.55 0 1 .45 1 1 0 .39-.23.73-.55.89l-7 3.5c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5C.23 8.48 0 8.14 0 7.75c0-.55.45-1 1-1 .16 0 .31.04.45.11L8 10.13l2.91-1.453zM15 10.25c.55 0 1 .45 1 1 0 .39-.23.73-.55.89l-7 3.5c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5c-.32-.16-.55-.5-.55-.89 0-.55.45-1 1-1 .16 0 .31.04.45.1L8 13.63l6.55-3.27c.14-.07.29-.11.45-.11z"],"new-link":["M15 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3.5 6a2.5 2.5 0 00-2.45 2h-4.1a2.5 2.5 0 100 1h4.1a2.5 2.5 0 102.45-3z"],"new-object":["M8 4c0 .6.4 1 1 1h2v2c0 .6.4 1 1 1s1-.4 1-1V5h2c.6 0 1-.4 1-1s-.4-1-1-1h-2V1c0-.6-.4-1-1-1s-1 .4-1 1v2H9c-.6 0-1 .5-1 1zm6.5 2.5V7c0 1.4-1.1 2.5-2.5 2.5S9.5 8.4 9.5 7v-.5H9C7.6 6.5 6.5 5.4 6.5 4S7.6 1.5 9 1.5h.5V1c0-.3.1-.6.1-.8C9.1.1 8.6 0 8 0 3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8c0-.6-.1-1.3-.2-1.9-.4.3-.8.4-1.3.4z"],"new-person":["M9.12 12.69c-1.17-.53-1.01-.85-1.05-1.29-.01-.06-.01-.12-.01-.19.4-.37.73-.87.94-1.44 0 0 .01-.03.01-.04.05-.14.09-.27.12-.4.27-.06.43-.36.49-.63.06-.11.19-.39.16-.7-.04-.41-.2-.6-.38-.68v-.07c0-.51-.05-1.25-.14-1.74-.02-.13-.05-.27-.09-.4-.17-.6-.53-1.14-1.01-1.52C7.66 3.2 6.96 3 6.33 3c-.62 0-1.33.2-1.82.59-.49.38-.85.92-1.02 1.52-.04.13-.07.26-.09.4-.09.49-.13 1.23-.13 1.74v.06c-.19.08-.35.27-.39.68-.03.31.1.59.16.7.06.28.22.59.5.64.03.14.07.27.11.4 0 .01.01.02.01.02v.01c.22.59.55 1.1.96 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.09 1.29-1.17.53-2.93 1.1-3.29 1.95-.35.87-.2 1.37-.2 1.37h12.6s.15-.5-.22-1.36c-.36-.85-2.12-1.42-3.29-1.95zM14.89 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1z"],"new-prescription":["M9.82 11.66l2.48-2.87c.12-.2.13-.37.04-.53-.11-.19-.3-.26-.52-.26h-1.29c-.27 0-.49.13-.63.34L8.44 9.9 6.95 8a.482.482 0 00-.08-.1L5.82 6.55c.57-.24 1.04-.57 1.42-1.01.49-.57.74-1.27.74-2.08 0-.51-.1-.99-.32-1.42-.21-.43-.51-.8-.89-1.11A4.1 4.1 0 005.42.24C4.91.08 4.34 0 3.72 0H.61C.26 0 0 .23 0 .56v9.89c0 .33.26.55.61.55h.8c.36 0 .61-.23.61-.56V6.99H3.3l3.73 4.74-2.71 3.48c-.12.2-.13.37-.04.53.11.19.3.26.52.26h1.27c.27 0 .51-.12.64-.34l1.69-2.15 1.66 2.14c.12.21.34.35.62.35h1.43c.2 0 .39-.08.5-.25.12-.18.09-.38-.02-.55l-2.77-3.54zM4.18 5H1.99V2.02h2.19c.62 0 1.08.13 1.38.37.29.22.44.62.44 1.08 0 .45-.15.94-.44 1.17-.31.23-.76.36-1.38.36zM15 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zM9.99 3.01c0 .02.01.04.01.06V2.95c0 .02-.01.04-.01.06z"],"new-text-box":["M5 6.5c0 .28.22.5.5.5H7v3.5c0 .28.22.5.5.5s.5-.22.5-.5V7h1.5c.28 0 .5-.22.5-.5S9.78 6 9.5 6h-4c-.28 0-.5.22-.5.5zM15 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zm-2 5c-.55 0-1 .45-1 1v5H3V4h5c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1z"],ninja:["M16 5s-2.52 2.11-4.96 1.99C11.03 4.89 10.39.23 5 0c0 0 2.11 2.54 1.96 4.99C4.86 5.01.23 5.65 0 11c0 0 2.56-2.12 5.02-1.95.02 2.11.67 6.72 5.98 6.95 0 0-2.09-2.54-1.94-4.99 2.11-.02 6.71-.68 6.94-6.01zM8 9.5c-.83 0-1.5-.67-1.5-1.5S7.17 6.5 8 6.5s1.5.67 1.5 1.5S8.83 9.5 8 9.5z"],"not-equal-to":["M7.58 5l.44-2.196a1 1 0 011.96.392L9.62 5H13a1 1 0 010 2H9.22l-.4 2H13a1 1 0 010 2H8.42l-.44 2.196a1 1 0 01-1.96-.392L6.38 11H3a1 1 0 010-2h3.78l.4-2H3a1 1 0 110-2h4.58z"],notifications:["M8 16c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm6-5c-.55 0-1-.45-1-1V6c0-2.43-1.73-4.45-4.02-4.9 0-.04.02-.06.02-.1 0-.55-.45-1-1-1S7 .45 7 1c0 .04.02.06.02.1A4.992 4.992 0 003 6v4c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z"],"notifications-updated":["M8 16c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm3.399-13.667l-.413.412A2.99 2.99 0 009 1.99a3 3 0 00-3 2.99c0 .8.32 1.558.876 2.114l2.002 1.992A2.99 2.99 0 0013 9.184V10c0 .55.45 1 1 1s1 .45 1 1-.45 1-1 1H2c-.55 0-1-.45-1-1s.45-1 1-1 1-.45 1-1V6c0-2.43 1.73-4.45 4.02-4.9 0-.04-.02-.06-.02-.1 0-.55.45-1 1-1s1 .45 1 1c0 .04-.02.06-.02.1a4.97 4.97 0 012.419 1.233zM10.29 7.67l-2-1.99a.99.99 0 01-.29-.7 1 1 0 011-.99c.27 0 .52.11.7.29l1.29 1.29 3.28-3.28c.18-.18.42-.29.7-.29.55 0 1 .44 1 .99 0 .28-.11.52-.3.7l-3.98 3.98a.99.99 0 01-1.4 0z"],"numbered-list":["M2.76 7h1.26V0h-.94c-.04.21-.12.39-.25.54-.13.15-.29.27-.48.36-.18.09-.39.16-.62.2-.23.04-.46.06-.71.06v.9h1.74V7zm-.59 7.17c.18-.12.37-.25.58-.37a10.763 10.763 0 001.24-.83c.2-.16.37-.33.52-.51.15-.19.28-.39.37-.61.09-.22.14-.47.14-.74 0-.22-.04-.45-.12-.7-.08-.26-.21-.49-.4-.69-.18-.21-.43-.39-.72-.52-.3-.14-.68-.21-1.12-.21-.41 0-.77.07-1.08.2-.32.14-.58.32-.8.56-.22.23-.38.51-.49.84-.11.32-.16.67-.16 1.05h1.19c.01-.24.03-.47.08-.67.05-.21.11-.39.21-.54.09-.15.22-.27.38-.36.16-.09.35-.13.59-.13.26 0 .47.04.63.12.16.08.29.18.38.3.09.12.15.25.18.39s.05.27.05.4c-.01.27-.08.5-.22.71-.14.21-.32.4-.53.57-.22.18-.45.34-.71.49-.26.15-.51.31-.74.47-.5.31-.89.68-1.17 1.11-.3.41-.44.91-.45 1.48h5v-1H1.43c.05-.15.14-.29.27-.43.14-.13.29-.26.47-.38zM15.01 1.99h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.44-1-1-1zm0 9h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.44-1-1-1z"],numerical:["M2.79 4.61c-.13.17-.29.3-.48.41-.18.11-.39.18-.62.23-.23.04-.46.07-.71.07v1.03h1.74V12h1.26V4h-.94c-.04.23-.12.44-.25.61zm4.37 5.31c.18-.14.37-.28.58-.42l.63-.45c.21-.16.41-.33.61-.51s.37-.38.52-.59c.15-.21.28-.45.37-.7.09-.25.13-.54.13-.85 0-.25-.04-.52-.12-.8-.07-.29-.2-.55-.39-.79a2.18 2.18 0 00-.73-.6c-.29-.15-.66-.23-1.11-.23-.41 0-.77.08-1.08.23-.31.16-.58.37-.79.64-.22.27-.38.59-.49.96-.11.37-.16.77-.16 1.2h1.19c.01-.27.03-.53.08-.77.04-.24.11-.45.21-.62.09-.18.22-.32.38-.42.16-.1.35-.15.59-.15.26 0 .47.05.63.14.15.09.28.21.37.35.09.14.15.29.18.45.03.16.05.31.05.45-.01.31-.08.58-.22.82-.14.23-.32.45-.53.65-.22.21-.46.39-.71.57-.26.18-.51.36-.75.54-.5.36-.89.78-1.17 1.27-.28.49-.43 1.06-.44 1.71h5v-1.15H6.43c.05-.17.14-.33.27-.49.13-.15.29-.29.46-.44zm8.5-1.56c-.23-.35-.54-.57-.95-.65v-.02c.34-.13.6-.34.76-.63.16-.29.24-.63.24-1.02 0-.34-.06-.64-.19-.9s-.3-.47-.51-.64c-.21-.17-.45-.3-.72-.38-.27-.09-.54-.13-.82-.13-.36 0-.68.07-.96.2-.28.13-.53.32-.72.55-.2.23-.36.51-.47.83-.11.32-.18.66-.19 1.04h1.15c-.01-.2.01-.39.06-.58.05-.19.12-.36.22-.51.1-.15.22-.27.37-.36.15-.09.32-.13.53-.13.32 0 .59.1.79.3.21.2.31.46.31.79 0 .23-.05.43-.14.59-.09.16-.21.29-.35.38-.15.09-.32.16-.51.19-.19.04-.38.05-.57.04v.93c.23-.01.45 0 .67.02.22.02.42.08.59.17.18.09.32.23.43.4.11.18.16.41.16.71 0 .44-.13.78-.39 1.02s-.58.36-.97.36c-.45 0-.79-.16-1.02-.47-.23-.31-.33-.7-.32-1.17H11c.01.4.06.77.17 1.1.11.33.26.61.47.85.21.23.46.42.77.54.31.13.67.19 1.08.19.34 0 .66-.05.96-.16.3-.11.57-.27.8-.47.23-.2.41-.45.55-.74.13-.27.2-.6.2-.97 0-.5-.11-.92-.34-1.27z"],office:["M15 5h-3V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h3v-4h4v4h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM5 10H2V7h3v3zm0-5H2V2h3v3zm5 5H7V7h3v3zm0-5H7V2h3v3zm4 9h-2v-2h2v2zm0-4h-2V7h2v3z"],offline:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM6 14l1-5H4l6-7-1 5h3l-6 7z"],"oil-field":["M15 14h-1.35l-3.34-7.51 2.46-.95 1.45 3.21c.09.2.36.3.6.23.1-.03.18-.08.24-.15.05-.08 1.23-1.56.87-4.2-.11-.79-.52-4.62-3.26-4.62-.93 0-1.68.62-1.67 1.37 0 .14.03.28.09.42l.87 1.92L.64 8.07v.01A.98.98 0 000 9c0 .55.45 1 1 1 .13 0 .25-.03.36-.07v.01l1.04-.4L3.67 14H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM4.27 8.81L7.14 7.7 5.2 12.08l-.93-3.27zM6.54 14L9 8.46 11.46 14H6.54z"],"one-column":["M11.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1zm-6 5c-.28 0-.53.11-.71.29l-2 2a1.014 1.014 0 000 1.42l2 2a1.003 1.003 0 001.71-.71v-4c0-.55-.45-1-1-1z"],outdated:["M8 0c4.42 0 8 3.58 8 8 0 4.06-3.02 7.4-6.94 7.92-.02 0-.04.01-.06.01-.33.04-.66.07-1 .07-4.42 0-8-3.58-8-8 0-.55.45-1 1-1s1 .45 1 1c0 3.31 2.69 6 6 6 .71 0 1.37-.15 2-.38v.01c2.33-.82 4-3.02 4-5.63 0-3.31-2.69-6-6-6-1.78 0-3.36.78-4.46 2H5c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v1.74A7.95 7.95 0 018 0zm1 12H7v-2h2v2zm0-3H7V4h2v5z"],"page-layout":["M15 .95H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-12c0-.55-.45-1-1-1zm-9 12H2v-6h4v6zm8 0H7v-6h7v6zm0-7H2v-3h12v3z"],"panel-stats":["M10 4h3v1h-3zM10 6h3v1h-3zM10 8h3v1h-3zM10 10h3v1h-3z","M15 1H1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM8 12H2V3h6v9zm6 0H9V3h5v9z"],"panel-table":["M15 1H1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM8 9H6V7h2v2zm0-3H6V4h2v2zm-6 6V3h3v9H2zm4 0v-2h2v2H6zm8 0H9v-2h5v2zm0-3H9V7h5v2zm0-3H9V4h5v2z"],paperclip:["M14.68 2.31A4.54 4.54 0 0011.46.99c-1.15 0-2.31.44-3.19 1.32L.95 9.63c-.63.63-.95 1.46-.95 2.28a3.21 3.21 0 003.23 3.22c.83 0 1.66-.31 2.3-.95l7.31-7.32c.76-.77.76-1.98.01-2.73s-1.99-.76-2.75 0l-6.07 6.08c-.24.25-.24.65.01.9s.65.25.91.01l6.07-6.08c.25-.25.67-.25.91-.01.25.25.25.67 0 .92l-7.31 7.32c-.75.75-2.04.74-2.76.01-.75-.75-.73-2.02.01-2.76L9.2 3.21c1.24-1.24 3.35-1.26 4.58-.03 1.24 1.24 1.24 3.36 0 4.6l-7.12 7.13c-.24.25-.24.64.01.88.24.24.63.24.88.01v.01l7.13-7.13A4.41 4.41 0 0016 5.51c0-1.16-.44-2.32-1.32-3.2z"],paragraph:["M13 1H6C3.8 1 2 2.8 2 5s1.8 4 4 4v5c0 .6.4 1 1 1s1-.5 1-1V3h2v11c0 .6.4 1 1 1s1-.5 1-1V3h1c.5 0 1-.4 1-1s-.4-1-1-1z"],path:["M14.5 0h-13C.67 0 0 .67 0 1.5S.67 3 1.5 3H7v3H3.5C2.67 6 2 6.67 2 7.5S2.67 9 3.5 9H7v3H5.5c-.83 0-1.5.67-1.5 1.5S4.67 15 5.5 15h5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5H9V9h3.5c.83 0 1.5-.67 1.5-1.5S13.33 6 12.5 6H9V3h5.5c.83 0 1.5-.67 1.5-1.5S15.33 0 14.5 0z"],"path-search":["M15 14.62l-4-2.4V9.77c-.32.09-.66.15-1 .18v2.27l-4 2.4V8.71c-.38-.31-.72-.66-1-1.06v6.97l-4-2.4V8c.55 0 1-.45 1-1s-.45-1-1-1V1.38l3.15 1.89c.08-.34.18-.66.32-.97L.76.07v.01A.496.496 0 00.5 0C.22 0 0 .22 0 .5v12c0 .18.1.33.25.42v.01l5 3v-.01c.07.05.16.08.25.08s.18-.03.25-.08v.01l4.74-2.85 4.74 2.85v-.01c.09.05.18.08.27.08.28 0 .5-.22.5-.5v-3.78c-.3.17-.63.28-1 .28v2.62zM2 5c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1zm6-1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm7.75-.92l-1.19-.72c.18.43.29.9.36 1.38l.08.04v3.39l1 1V3.5c0-.18-.1-.33-.25-.42zM10 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3.3 4.89c.44-.7.7-1.51.7-2.39C14 2.01 11.99 0 9.5 0S5 2.01 5 4.5 7.01 9 9.5 9c.88 0 1.69-.26 2.39-.7l2.41 2.41c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71l-2.41-2.4zM9.5 8C7.57 8 6 6.43 6 4.5S7.57 1 9.5 1 13 2.57 13 4.5 11.43 8 9.5 8z"],pause:["M6 3H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm6 0h-2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],people:["M13.69 13.98c-.05-.24-.14-.5-.25-.76-.36-.86-1.12-1.33-2.69-2-.14-.06-.59-.25-.6-.25-.21-.09-.36-.15-.5-.22.02-.1.02-.2.03-.31 0-.04.01-.08.01-.13-.07-.06-.13-.12-.19-.19.22-.32.4-.67.54-1.05.02-.06.02-.06.03-.1.29-.23.48-.57.59-.96.16-.33.25-.73.21-1.16-.03-.4-.16-.76-.37-1.03-.02-.53-.07-1.13-.15-1.54-.01-.06-.02-.12-.03-.19.23-.06.48-.09.72-.09.49 0 1.05.16 1.44.46.38.29.67.7.8 1.17.03.1.05.21.07.31.07.37.11.94.11 1.33v.05c.14.06.27.21.29.51.02.25-.07.45-.13.54-.05.21-.16.44-.38.48-.02.1-.05.2-.09.3 0 .01-.01.03-.01.03-.17.44-.43.83-.75 1.11v.14c.03.35-.09.59.83 1 .93.41 2.32.84 2.6 1.5.29.66.17 1.04.17 1.04h-2.3zm-1.17-.38c.37.86.22 1.36.22 1.36H.06s-.14-.5.22-1.36 2.13-1.43 3.31-1.96c1.17-.54 1.05-.86 1.09-1.3 0-.05.01-.11.01-.17-.41-.35-.75-.86-.97-1.45v-.01s-.01-.01-.01-.02c-.04-.12-.09-.26-.12-.39-.28-.05-.44-.36-.5-.64-.06-.12-.19-.39-.16-.71.04-.41.21-.6.39-.68v-.06c0-.51.05-1.26.14-1.74.02-.13.05-.27.09-.4.17-.6.54-1.13 1.02-1.51.5-.39 1.21-.6 1.84-.6s1.34.21 1.84.6c.48.38.85.91 1.02 1.52.04.13.07.27.09.4.09.48.14 1.22.14 1.73v.07c.18.08.34.27.37.67.03.32-.09.59-.16.71-.06.28-.21.58-.48.63-.03.13-.07.26-.12.39 0 .01-.01.04-.01.04-.22.58-.55 1.08-.95 1.45v.18c.04.45-.12.77 1.06 1.3 1.18.53 2.95 1.09 3.31 1.95z"],percentage:["M6 6V4c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1c1.1 0 2-.9 2-2zM3.5 6c-.28 0-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5s.5.22.5.5v1c0 .28-.22.5-.5.5zM13 8h-1c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1c1.1 0 2-.9 2-2v-2c0-1.1-.9-2-2-2zm0 3.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5s.5.22.5.5v1zM12 3a1.003 1.003 0 00-1.87-.5l-5.99 9.98c-.09.15-.14.33-.14.52a1.003 1.003 0 001.87.5l5.99-9.98c.09-.15.14-.33.14-.52z"],person:["M15.68 14.32c-.46-1.05-2.68-1.75-4.16-2.4-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15A3.671 3.671 0 0010.32.72C9.68.25 8.79-.01 8-.01c-.79 0-1.68.25-2.31.73-.61.47-1.06 1.13-1.28 1.86-.05.17-.09.33-.11.5-.12.6-.17 1.51-.17 2.15v.08c-.24.09-.45.32-.5.83-.03.38.13.72.2.86.08.35.28.72.63.78.04.17.09.33.15.49 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.37 1.59-1.48.65-3.7 1.35-4.16 2.4-.46 1.05-.27 1.67-.27 1.67h15.92c-.01.01.18-.61-.28-1.66z"],phone:["M15.9 12.41c-.06-.06-3.37-2-3.48-2.05a.794.794 0 00-.32-.08c-.15 0-.34.11-.57.32-.23.22-.94 1.19-1.15 1.4-.21.22-.38.32-.52.32-.07 0-.15-.02-.25-.06-.1-.04-1.16-.58-3.36-2.52-2.2-1.93-2.49-3.2-2.5-3.55 0-.14.11-.31.32-.52.22-.21.45-.41.7-.6.25-.19.49-.4.7-.62.22-.23.32-.42.32-.57 0-.11-.03-.21-.08-.32C5.66 3.46 3.66.15 3.59.08 3.44-.07 2.85 0 2.55.16.16 1.46-.03 3.2 0 3.89c.04.71.49 4.46 4.16 7.95C8.72 16.17 11.89 16 12.1 16c.69 0 2.82-.38 3.72-2.55.13-.32.25-.87.08-1.04z"],"pie-chart":["M7 1.08c-3.37.5-5.97 3.4-5.97 6.92 0 3.87 3.13 7 6.98 7 3.52 0 6.42-2.61 6.91-6H7V1.08z","M8 0v8h8c0-4.42-3.58-8-8-8z"],pin:["M9.41.92c-.51.51-.41 1.5.15 2.56L4.34 7.54C2.8 6.48 1.45 6.05.92 6.58l3.54 3.54-3.54 4.95 4.95-3.54 3.54 3.54c.53-.53.1-1.88-.96-3.42l4.06-5.22c1.06.56 2.04.66 2.55.15L9.41.92z"],pivot:["M4.57 7.02L.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4.27-4.27c-.58-.35-1.07-.84-1.41-1.42zM15 8c-.55 0-1 .45-1 1v.59l-2.57-2.57c-.34.58-.83 1.07-1.41 1.41L12.59 11H12c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-4-3c0-1.66-1.34-3-3-3S5 3.34 5 5s1.34 3 3 3 3-1.34 3-3zM8 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"pivot-table":["M2 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm0-4H1C.45 0 0 .45 0 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm11.71 4.29C13.53 4.11 13.28 4 13 4s-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V9c0 1.66-1.34 3-3 3H7.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H9c2.76 0 5-2.24 5-5V7.41l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2zM15 0H5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],play:["M12 8c0-.35-.19-.64-.46-.82l.01-.02-6-4-.01.02A.969.969 0 005 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 6-4-.01-.02c.27-.18.46-.47.46-.82z"],plus:["M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z"],"polygon-filter":["M14 5c-.24 0-.47.05-.68.13L9.97 2.34c.01-.11.03-.22.03-.34 0-1.1-.9-2-2-2S6 .9 6 2c0 .04.01.08.01.12L2.88 4.21C2.61 4.08 2.32 4 2 4 .9 4 0 4.9 0 6c0 .74.4 1.38 1 1.72v4.55c-.6.35-1 .99-1 1.73 0 1.1.9 2 2 2 .74 0 1.38-.4 1.72-1h4.55c.35.6.98 1 1.72 1 1.1 0 2-.9 2-2 0-.37-.11-.7-.28-1L14 9c1.11-.01 2-.9 2-2s-.9-2-2-2zm-4.01 7c-.73 0-1.37.41-1.71 1H3.73c-.18-.3-.43-.55-.73-.72V7.72c.6-.34 1-.98 1-1.72 0-.04-.01-.08-.01-.12l3.13-2.09c.27.13.56.21.88.21.24 0 .47-.05.68-.13l3.35 2.79c-.01.11-.03.22-.03.34 0 .37.11.7.28 1l-2.29 4z"],power:["M8 8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S7 .45 7 1v6c0 .55.45 1 1 1zm3-5.32v2.34c1.21.91 2 2.35 2 3.98 0 2.76-2.24 5-5 5s-5-2.24-5-5c0-1.63.79-3.06 2-3.98V2.68C2.64 3.81 1 6.21 1 9c0 3.87 3.13 7 7 7s7-3.13 7-7c0-2.79-1.64-5.19-4-6.32z"],"predictive-analysis":["M16 6.41c0-1.01-.49-1.94-1.29-2.49-.43-1.92-2.07-3.28-4-3.28-.46 0-.92.08-1.35.24C8.83.31 8.11 0 7.34 0c-.9 0-1.74.44-2.28 1.16-.12-.01-.24-.02-.36-.02-1.31 0-2.42.89-2.77 2.17C.78 3.72 0 4.84 0 6.13c0 .38.07.76.21 1.12C.07 7.6 0 7.98 0 8.36c0 1.11.58 2.11 1.51 2.63.54.56 1.27.87 2.03.87.49 0 .95-.12 1.37-.36a2.85 2.85 0 002.18 1.04c.52 0 1.03-.14 1.47-.42.49.39 1.07.65 1.69.73 1.04 1.15 1.84 2.63 1.84 2.64 0 0 .28.49.26.49.77 0 1.41-.16 1.32-1.04 0 .02-.73-2.31-.73-2.31.41-.21.75-.55.97-.98.9-.52 1.47-1.53 1.47-2.61 0-.24-.03-.48-.08-.71.45-.52.7-1.21.7-1.92zm-1.23 1.02l-.15-.16-.61-.67c-.27-.29-.54-.94-.58-1.39l-.1-1.01c-.05-.59-.94-.58-.91.11 0 .02.1 1.01.1 1.01.03.29.12.62.24.93-.06-.01-.12-.02-.18-.02 0 0-2.06-.1-2.05-.11-.58-.02-.71.97-.04 1l2.05.11c.42.02 1.04.3 1.29.58l.49.54.02.05c.08.21.12.44.12.66 0 .74-.41 1.41-1.07 1.75l-.16.08-.07.18c-.15.38-.48.66-.88.74l-.54.11.7 2.2c-.38-.61-.95-1.43-1.62-2.14l-.12-.13-.17-.01c-.41-.03-.8-.17-1.14-.38l1.36-1.18c.35-.31.83-.44.99-.39 0 0 .63.17.62.18.63.16.83-.74.23-.97l-.62-.18c-.55-.16-1.33.18-1.79.58l-1.53 1.33-.31.26c-.35.29-.75.44-1.2.44-.64 0-1.23-.33-1.58-.86V9.15c0-.4.17-.79.27-.85 0 0 .52-.34.51-.35.71-.53.18-1.23-.49-.89 0-.01-.52.35-.52.35-.26.15-.45.44-.58.77-.11-.11-.22-.2-.34-.28 0 0-1.53-1.01-1.53-1.02-.65-.45-1.2.51-.49.89 0-.01 1.51 1.02 1.51 1.02.37.24.62.78.62 1.09v.67c-.34.19-.63.29-.99.29-.54 0-1.05-.23-1.41-.63l-.05-.06-.07-.04c-.65-.34-1.05-1-1.05-1.73 0-.3.07-.6.2-.87l.12-.25L1.15 7c-.13-.27-.2-.56-.2-.87 0-.9.61-1.68 1.48-1.89l.31-.08.05-.34a1.926 1.926 0 012.38-1.58l.32.08.18-.31c.35-.6.99-.97 1.67-.97.44 0 .86.15 1.2.42l-.36.36v-.01l-.25.26c-.33.27-.74.42-.89.4 0 0-.67-.1-.67-.11-.67-.13-.87.86-.14 1.02.01 0 .67.11.67.11.02 0 .05 0 .07.01-.11.37-.15.77-.1 1.12 0 0 .17.99.15.99.11.52 1.06.36.93-.18 0-.01-.15-.99-.15-.99-.05-.37.12-.94.36-1.19l.39-.4c.05-.05.1-.09.15-.14l.74-.76c.4-.18.83-.27 1.27-.27 1.55 0 2.86 1.12 3.11 2.67l.04.25.21.12c.61.35.98 1 .98 1.7 0 .36-.1.7-.28 1.01z"],prescription:["M10.91 8.34c.14-.21.36-.34.63-.34h1.29c.22 0 .41.07.52.26.09.16.08.33-.04.53l-2.49 2.87 2.77 3.54c.12.17.14.37.02.55-.11.17-.3.25-.5.25h-1.44a.69.69 0 01-.61-.35L9.4 13.51l-1.69 2.15c-.13.21-.36.34-.63.34H5.8c-.22 0-.41-.07-.52-.26-.09-.16-.08-.33.04-.53l2.71-3.48L4.3 6.99H3.03v3.47c0 .33-.26.56-.62.56h-.8c-.35-.01-.61-.23-.61-.56V.56c0-.33.26-.56.62-.56h3.11c.62 0 1.19.08 1.7.24.51.16.96.39 1.34.69a3.194 3.194 0 011.21 2.53c0 .81-.25 1.5-.74 2.08-.37.44-.84.77-1.42 1.01L7.88 7.9c.04.04.07.08.08.1l1.49 1.9 1.46-1.56zM5.18 5c.62 0 1.08-.13 1.39-.37.29-.23.44-.71.44-1.16s-.15-.87-.44-1.1C6.26 2.12 5.8 2 5.18 2H2.99v3h2.19z"],presentation:["M15 1H9c0-.55-.45-1-1-1S7 .45 7 1H1c-.55 0-1 .45-1 1s.45 1 1 1v8c0 .55.45 1 1 1h3.59L3.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 13.41V15c0 .55.45 1 1 1s1-.45 1-1v-1.59l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L10.41 12H14c.55 0 1-.45 1-1V3c.55 0 1-.45 1-1s-.45-1-1-1zm-2 9H3V3h10v7z"],print:["M12 2.02c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h8v-1zm3 2H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1v-3h12v3h1c.55 0 1-.45 1-1v-6c0-.56-.45-1-1-1zm-1 3h-2v-1h2v1zm-3 6H5v-3H3v4c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-4h-2v3z"],projects:["M14 3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v1h12V3zm-2-3H4c-.55 0-1 .45-1 1h10c0-.55-.45-1-1-1zm3 5H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-3 6c0 .55-.45 1-1 1H5c-.55 0-1-.45-1-1V9h1v2h6V9h1v2z"],properties:["M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-3h9c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1zm-4 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm13-5H6c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0 6H6c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],property:["M3 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-.5-6.5a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM7 3h8c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zm8 10H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zM3 0C1.9 0 1 .9 1 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 6H7c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z"],"publish-function":["M12.16 3.76c.15-.11.3-.16.47-.16.06 0 .17.02.34.06.16.04.31.06.43.06a.58.58 0 00.6-.6c0-.19-.06-.33-.17-.44-.11-.11-.28-.16-.49-.16-.19 0-.37.04-.54.13-.17.09-.39.27-.65.55-.2.21-.48.58-.87 1.11a5.22 5.22 0 00-.78-1.79l-2.05.32-.04.21c.15-.03.28-.04.39-.04.2 0 .37.08.5.25.21.26.5 1.03.88 2.33-.29.36-.49.6-.6.71-.18.19-.33.31-.45.36-.09.04-.19.07-.3.07-.09 0-.23-.04-.42-.13a.904.904 0 00-.36-.09c-.2 0-.36.06-.49.18a.59.59 0 00-.19.46c0 .18.06.32.18.43.12.11.28.16.48.16.2 0 .38-.04.55-.12.17-.08.39-.24.65-.49s.62-.65 1.07-1.19c.18.52.33.89.46 1.13.13.24.28.4.44.51.17.1.37.16.62.16.24 0 .49-.08.74-.25.33-.21.66-.58 1.01-1.09l-.21-.11c-.23.31-.41.5-.52.57a.44.44 0 01-.26.07c-.12 0-.24-.07-.36-.21-.2-.24-.46-.91-.8-2 .29-.49.54-.81.74-.96zM6.37 5.83l.68-2.53h.83l.2-.64h-.84c.24-.91.56-1.59.96-2.01.24-.27.48-.4.71-.4.05 0 .08.01.11.04s.04.06.04.1c0 .04-.03.11-.1.21-.06.1-.1.2-.1.29 0 .13.05.24.15.33.1.09.23.14.39.14.17 0 .31-.06.42-.17.12-.12.18-.27.18-.46 0-.21-.08-.39-.25-.52C9.57.07 9.3 0 8.93 0c-.59 0-1.12.16-1.59.48-.48.32-.93.85-1.36 1.59-.15.26-.29.42-.42.49s-.35.11-.64.1l-.19.65h.81L4.35 7.68c-.2.72-.33 1.16-.4 1.33-.1.24-.26.45-.46.62a.48.48 0 01-.31.1c-.03 0-.06-.01-.08-.03l-.03-.03c0-.02.03-.06.09-.11.06-.06.09-.15.09-.26 0-.13-.05-.23-.14-.32-.1-.09-.23-.13-.41-.13-.21 0-.38.05-.51.16A.52.52 0 002 9.4c0 .16.08.3.23.42.16.12.4.18.74.18.53 0 .99-.13 1.4-.39.41-.26.76-.65 1.07-1.19.3-.53.61-1.39.93-2.59zm2.34 3.46A.997.997 0 008 9c-.28 0-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V15c0 .55.45 1 1 1s1-.45 1-1v-2.59l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2z"],pulse:["M15 8h-1.46l-1.7-2.55-.02.01A.984.984 0 0011 5c-.43 0-.79.27-.93.65h-.01l-1.69 4.51-1.38-8.32h-.02A.989.989 0 006 1c-.41 0-.77.25-.92.61L2.34 8H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.41 0 .77-.25.92-.61l1.65-3.86 1.44 8.63h.02c.08.47.47.84.97.84.43 0 .79-.27.93-.65h.01l2.31-6.17.92 1.38.02-.01c.17.26.46.45.81.45h2c.55 0 1-.45 1-1s-.45-1-1-1z"],random:["M11.48 4h1.11l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H11c-.32 0-.59.16-.77.38l-.01-.01L8.28 4.8l1.28 1.6L11.48 4zm2.23 6.29a1.003 1.003 0 00-1.42 1.42l.3.29h-1.11l-7.7-9.62h-.01A.996.996 0 003 2H1c-.55 0-1 .45-1 1s.45 1 1 1h1.52l7.7 9.62.01-.01c.18.23.45.39.77.39h1.59l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2zM2.52 12H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.32 0 .59-.16.77-.38l.01.01 1.94-2.42L4.44 9.6 2.52 12z"],record:["M8 3a5 5 0 100 10A5 5 0 108 3z"],redo:["M12 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3.71-6.71l-3-3a1.003 1.003 0 00-1.42 1.42L12.59 4H5C2.24 4 0 6.24 0 9s2.24 5 5 5h4v-2H5c-1.66 0-3-1.34-3-3s1.34-3 3-3h7.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],refresh:["M14.99 6.99c-.55 0-1 .45-1 1 0 3.31-2.69 6-6 6-1.77 0-3.36-.78-4.46-2h1.46c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1v-1.74a7.95 7.95 0 006 2.74c4.42 0 8-3.58 8-8 0-.55-.45-1-1-1zm0-7c-.55 0-1 .45-1 1v1.74a7.95 7.95 0 00-6-2.74c-4.42 0-8 3.58-8 8 0 .55.45 1 1 1s1-.45 1-1c0-3.31 2.69-6 6-6 1.77 0 3.36.78 4.46 2h-1.46c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z"],"regression-chart":["M13 6.5c0 .83.67 1.5 1.5 1.5S16 7.33 16 6.5 15.33 5 14.5 5 13 5.67 13 6.5zM8.5 5c.83 0 1.5-.67 1.5-1.5S9.33 2 8.5 2 7 2.67 7 3.5 7.67 5 8.5 5zM9 9.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5S11.33 8 10.5 8 9 8.67 9 9.5zM4.5 8C5.33 8 6 7.33 6 6.5S5.33 5 4.5 5 3 5.67 3 6.5 3.67 8 4.5 8zM15 12H3.26l12.03-8.59-.58-.81L2 11.67V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],remove:["M10.99 6.99h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z"],"remove-column":["M14 0H4c-.55 0-1 .45-1 1v3h2V2h3v12H5v-2H3v3c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14h-3V2h3v12zm-8.71-3.29a1.003 1.003 0 001.42-1.42L4.41 8 5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L3 6.59l-1.29-1.3A1.003 1.003 0 00.29 6.71L1.59 8 .29 9.29a1.003 1.003 0 001.42 1.42L3 9.41l1.29 1.3z"],"remove-column-left":["M4 9h4c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm11-9H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 14H2V2h8v12zm4 0h-3V2h3v12z"],"remove-column-right":["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 14H2V2h3v12zm9 0H6V2h8v12zM8 9h4c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1z"],"remove-row-bottom":["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V6h12v8zm0-9H2V2h12v3zm-8 6h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1z"],"remove-row-top":["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2v-3h12v3zm0-4H2V2h12v8zM6 7h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1z"],repeat:["M10 5c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1.74A7.95 7.95 0 008 0C3.58 0 0 3.58 0 8c0 4.06 3.02 7.4 6.94 7.92.02 0 .04.01.06.01.33.04.66.07 1 .07 4.42 0 8-3.58 8-8 0-.55-.45-1-1-1s-1 .45-1 1c0 3.31-2.69 6-6 6-.71 0-1.37-.15-2-.38v.01C3.67 12.81 2 10.61 2 8c0-3.31 2.69-6 6-6 1.77 0 3.36.78 4.46 2H11c-.55 0-1 .45-1 1z"],reset:["M6 5c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v1.74A7.95 7.95 0 018 0c4.42 0 8 3.58 8 8 0 4.06-3.02 7.4-6.94 7.92-.02 0-.04.01-.06.01-.33.04-.66.07-1 .07-4.42 0-8-3.58-8-8 0-.55.45-1 1-1s1 .45 1 1c0 3.31 2.69 6 6 6 .71 0 1.37-.15 2-.38v.01c2.33-.82 4-3.02 4-5.63 0-3.31-2.69-6-6-6-1.77 0-3.36.78-4.46 2H5c.55 0 1 .45 1 1z"],resolve:["M6.6 3.3C6.1 3.1 5.6 3 5 3 2.2 3 0 5.2 0 8s2.2 5 5 5c.6 0 1.1-.1 1.6-.3C5.3 11.6 4.5 9.9 4.5 8s.8-3.6 2.1-4.7zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c-.6 0-1.1.1-1.6.3 1.3 1.2 2.1 2.9 2.1 4.7s-.8 3.6-2.1 4.7c.5.2 1 .3 1.6.3 2.8 0 5-2.2 5-5s-2.2-5-5-5z"],rig:["M5.71 3c0 1.1.96 2 2.14 2C9.04 5 10 3.96 10 3c0-1.96-1.47-3-2.14-3H5c0 1.96 2.68 1.4.71 3zm2.5 3l.01.01s0-.01-.01-.01zm6.5 8.29L10 9.59V7c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v2.58l-4.71 4.7c-.18.19-.29.44-.29.72a1.003 1.003 0 001.71.71L6 12.42V15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2.58l3.29 3.29a1.003 1.003 0 001.42-1.42z"],"right-join":["M6.6 3.3C5.3 4.4 4.5 6.1 4.5 8s.8 3.6 2.1 4.7c-.5.2-1 .3-1.6.3-2.8 0-5-2.2-5-5s2.2-5 5-5c.6 0 1.1.1 1.6.3zm-1.96 8.68C3.92 10.83 3.5 9.46 3.5 8s.42-2.83 1.14-3.98C2.6 4.2 1 5.91 1 8s1.6 3.8 3.64 3.98zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3z"],ring:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 12c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"],"rotate-document":["M12 2h-1.59l.29-.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-2 2C7.11 2.47 7 2.72 7 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H12c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3zM5.71 5.29A.997.997 0 005 5H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V9c0-.28-.11-.53-.29-.71l-3-3zM7 14H2V7h2v2c0 .55.45 1 1 1h2v4z"],"rotate-page":["M8 6H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm-1 8H3V8h4v6zm5-12h-1.59l.29-.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-2 2C7.11 2.47 7 2.72 7 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H12c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3z"],route:["M11.669 5.066l.099.189c.113.213.236.434.367.661.226.39.468.78.709 1.151l-.198-.004-.48-.004c-1.745.003-2.369.233-2.369.688 0 .053.226.19 1.038.436l.84.24C13.9 9.064 15 9.83 15 11.63c0 2.123-1.607 3.122-4.027 3.366-.651.065-1.266.075-2.043.05l-.958-.035H5.196l.268-.406c.336-.517.672-1.052.998-1.593h1.636l.572.023c.857.036 1.475.034 2.103-.03 1.526-.153 2.227-.59 2.227-1.375 0-.531-.402-.84-1.66-1.22l-.691-.198c-1.04-.293-1.764-.562-2.222-.946C8.8 8.366 9 7.612 9 6.997a5.03 5.03 0 00-.184-1.334c.645-.395 1.598-.562 2.853-.597zM4 3a4.007 4.007 0 014 3.997C8 9.21 4 15 4 15l-.416-.62C2.56 12.827 0 8.767 0 6.997A4.002 4.002 0 014 3zm0 2a2 2 0 10.001 4.001A2 2 0 004 5zm10-4c1.103 0 1.996.896 2 1.999C16 4.105 14 7 14 7l-.293-.44C13.15 5.707 12 3.838 12 2.999 12 1.896 12.897 1 14 1z"],satellite:["M3 9c0-.6.4-1 1-1s1 .4 1 1c0 1.1.9 2 2 2 .6 0 1 .4 1 1s-.4 1-1 1c-2.2 0-4-1.8-4-4zM0 9c0-.6.4-1 1-1s1 .4 1 1c0 2.8 2.2 5 5 5 .6 0 1 .4 1 1s-.4 1-1 1c-3.9 0-7-3.1-7-7zm7 1c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm1.3-2.8c-.4-.4-.4-1 0-1.4l4.5-4.5c.4-.4 1-.4 1.4 0l.5.5c.4.4.4 1 0 1.4l-4.5 4.5c-.4.4-1 .4-1.4 0l-.5-.5zM5.2.3c.4-.4 1-.4 1.4 0l2.1 2.1c.4.4.4 1 0 1.4l-.9.9c-.4.4-1 .4-1.4 0L4.3 2.6c-.4-.4-.4-1 0-1.4l.9-.9zm7 7c.4-.4 1-.4 1.4 0l2.1 2.1c.4.4.4 1 0 1.4l-.9.9c-.4.4-1 .4-1.4 0l-2.1-2.1c-.4-.4-.4-1 0-1.4l.9-.9z"],saved:["M6.71 9.29a1.003 1.003 0 00-1.42 1.42l2 2a.997.997 0 001.6-.27h.01l2-4h-.01c.06-.13.11-.28.11-.44 0-.55-.45-1-1-1-.39 0-.72.23-.89.56H9.1l-1.38 2.76-1.01-1.03zM9 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5L9 0zm3 14H4V2h4v4h4v8z"],"scatter-plot":["M15 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-.5-7c.83 0 1.5-.67 1.5-1.5S15.33 2 14.5 2 13 2.67 13 3.5 13.67 5 14.5 5zm-3 4c.83 0 1.5-.67 1.5-1.5S12.33 6 11.5 6 10 6.67 10 7.5 10.67 9 11.5 9zm-4-2C8.33 7 9 6.33 9 5.5S8.33 4 7.5 4 6 4.67 6 5.5 6.67 7 7.5 7zm-3 4c.83 0 1.5-.67 1.5-1.5S5.33 8 4.5 8 3 8.67 3 9.5 3.67 11 4.5 11z"],search:["M15.55 13.43l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"search-around":["M13.5 11c-.51 0-.98.15-1.38.42l-2.4-2.41c.17-.3.28-.64.28-1.01s-.11-.71-.28-1.01l2.41-2.41c.39.27.86.42 1.37.42a2.5 2.5 0 000-5A2.5 2.5 0 0011 2.5c0 .51.15.98.42 1.38l-2.41 2.4C8.71 6.11 8.37 6 8 6s-.71.11-1.01.28l-2.41-2.4c.27-.4.42-.87.42-1.38a2.5 2.5 0 00-5 0A2.5 2.5 0 002.5 5c.51 0 .98-.15 1.38-.42l2.41 2.41C6.11 7.29 6 7.63 6 8s.11.71.28 1.01l-2.41 2.41c-.39-.27-.86-.42-1.37-.42a2.5 2.5 0 000 5A2.5 2.5 0 005 13.5c0-.51-.15-.98-.42-1.38l2.41-2.41c.3.18.64.29 1.01.29s.71-.11 1.01-.28l2.41 2.41c-.27.39-.42.86-.42 1.37a2.5 2.5 0 005 0 2.5 2.5 0 00-2.5-2.5zm0-10c.83 0 1.5.67 1.5 1.5S14.33 4 13.5 4 12 3.33 12 2.5 12.67 1 13.5 1zm-11 3C1.67 4 1 3.33 1 2.5S1.67 1 2.5 1 4 1.67 4 2.5 3.33 4 2.5 4zm0 11c-.83 0-1.5-.67-1.5-1.5S1.67 12 2.5 12s1.5.67 1.5 1.5S3.33 15 2.5 15zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"],"search-template":["M15.55 13.43l-2.67-2.67c.7-1.09 1.11-2.38 1.11-3.77 0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.41 3.77-1.11l2.67 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm2.5-6h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm0-2h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm0 4h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5z"],"search-text":["M9 4H5c-.55 0-1 .45-1 1s.45 1 1 1h1v3c0 .55.45 1 1 1s1-.45 1-1V6h1c.55 0 1-.45 1-1s-.45-1-1-1zm6.56 9.44l-2.67-2.67C13.59 9.68 14 8.39 14 7c0-3.87-3.13-7-7-7S0 3.13 0 7s3.13 7 7 7c1.39 0 2.68-.41 3.77-1.11l2.67 2.67a1.498 1.498 0 102.12-2.12zM7 12c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"segmented-control":["M15 4H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 6H8V6h6v4z"],select:["M16 15c0-.28-.12-.52-.31-.69l.02-.02-3.12-3.12 3.41-.84-8.05-2.86c.03-.09.05-.17.05-.27V2c0-.55-.45-1-1-1H3c0-.55-.45-1-1-1S1 .45 1 1c-.55 0-1 .45-1 1s.45 1 1 1v4c0 .55.45 1 1 1h5.2c.1 0 .18-.02.27-.05L10.33 16l.85-3.41 3.12 3.12.02-.02c.16.19.4.31.68.31.04 0 .07-.02.1-.02s.06.02.1.02c.44 0 .8-.36.8-.8 0-.04-.02-.07-.02-.1s.02-.06.02-.1zM6 6H3V3h3v3z"],selection:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm0-9C6.34 5 5 6.34 5 8s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"],"send-message":["M15.398 9.01l-13.87 6.865c-.536.267-1.176.081-1.422-.427A.953.953 0 010 15v-4.838l8.67-2.168L0 5.923V1.001C0 .47.407 0 1.004 0c.169 0 .416.04.567.116L15.403 7.07a1.084 1.084 0 01-.005 1.939z"],"send-to":["M15 7.5c-.8 0-1.5-.4-2-1l-1.2 1.2c-.4.5-1.1.7-1.8.7-1.4.1-2.5-1-2.5-2.4 0-.7.3-1.3.7-1.8L9.5 3c-.6-.5-1-1.2-1-2 0-.3.1-.7.2-1H8C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8v-.7c-.3.1-.6.2-1 .2zM15 0h-4c-.6 0-1 .5-1 1s.4 1 1 1h1.6L9.3 5.3c-.2.2-.3.4-.3.7 0 .5.4 1 1 1 .3 0 .5-.1.7-.3L14 3.4V5c0 .6.4 1 1 1 .5 0 1-.4 1-1V1c0-.5-.4-1-1-1z"],"send-to-graph":["M6 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1zm8 .5c-.56 0-1.06.23-1.42.59l-2.13-1.24L8.99 8l3.59-2.09A2.002 2.002 0 0016 4.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .19.03.37.08.54L8.5 7.13v-3.2c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v3.2l-.88-.52-2.7-1.57c.05-.17.08-.35.08-.54 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.56 0 1.06-.23 1.42-.59l2.13 1.24 3.84 2.24 2.7 1.57c-.06.17-.09.35-.09.54 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z"],"send-to-map":["M6 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1zm9.55-5.83l-4.49-3A.975.975 0 009.99.15L5.53 2.82 1.56.17A1.003 1.003 0 000 1v6h2V2.87l2.94 1.96.06.03V7h1V4.86s.01 0 .01-.01L10 2.47v8.67s-.01 0-.01.01l-.99.58v2.33l1.47-.88 3.97 2.65A1.003 1.003 0 0016 15V4c0-.35-.18-.65-.45-.83zM14 13.13l-2.94-1.96c-.02-.01-.04-.02-.05-.03v-8.6l3 2v8.59z"],"series-add":["M10.68 7.9c.44.54 1.07.92 1.79 1.05l-2.76 2.76c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l1.68-1.69zM15 3c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .55-.45 1-1 1s-1-.45-1-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 1-1s1 .45 1 1v1h1z"],"series-configuration":["M9.94 9.64c.65.23 1.34.36 2.06.36.14 0 .29-.01.43-.01L9.7 12.71c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.3L5 9.41l-3 3V14h12.99c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 7.11 4.72 7 5 7c.28 0 .53.11.71.29L9 10.59l.94-.95zm4.73-6.44h.92c.22 0 .4.18.4.4v.8c0 .22-.18.4-.4.4h-.93c-.06.2-.14.38-.24.55l.66.65c.15.15.15.4 0 .55l-.54.55c-.15.15-.4.15-.55 0l-.65-.65c-.17.1-.36.18-.55.24v.91c0 .22-.18.4-.4.4h-.8c-.22 0-.4-.18-.4-.4v-.93c-.18-.06-.36-.13-.52-.22l-.68.68c-.15.16-.41.16-.57 0l-.56-.56a.417.417 0 010-.57l.68-.68c-.08-.16-.16-.33-.22-.52h-.93c-.22 0-.4-.18-.4-.4v-.8c0-.22.18-.4.4-.4h.93c.06-.2.14-.38.24-.55l-.65-.64a.392.392 0 010-.55l.54-.55a.38.38 0 01.54 0l.65.65c.18-.1.36-.18.55-.24V.4c0-.22.18-.4.4-.4h.8c.22 0 .4.18.4.4v.93c.18.06.35.14.52.22l.68-.68c.15-.16.41-.16.57 0l.57.57c.15.16.15.41 0 .57l-.68.68c.09.16.16.33.22.51zm-4.18.8c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5c-.82 0-1.5.67-1.5 1.5z"],"series-derived":["M10.66 7.92c.44.54 1.07.91 1.8 1.03L9.71 11.7c-.18.19-.43.3-.71.3s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l1.66-1.67zM12.3 5.3l.3-.3H8c-.6 0-1-.4-1-1s.4-1 1-1h4.6l-.3-.3c-.2-.2-.3-.4-.3-.7 0-.6.5-1 1-1 .3 0 .5.1.7.3l2 2c.2.2.3.4.3.7s-.1.5-.3.7l-2 2c-.2.2-.4.3-.7.3-.6 0-1-.4-1-1 0-.3.1-.5.3-.7z"],"series-filtered":["M9.29 9.3c.3.62.8 1.12 1.42 1.41l-1 1c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l.29-.29zM15.48 1c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V4.71L8.17 1.98A.566.566 0 018 1.57c0-.31.26-.57.57-.57h6.91z"],"series-search":["M9.6 8.94a4.937 4.937 0 001.82.01c.1-.01.22-.04.39-.08l.23-.07c.04-.01.08-.02.11-.04l.22.22-2.7 2.72c-.18.19-.43.3-.71.3s-.53-.11-.71-.3L4.98 8.41l-2.99 3V13h12.94c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V3.99c0-.55.45-1 1-1s1 .45 1 1v4.59l2.28-2.3c.17-.18.42-.29.7-.29s.53.11.7.29l3.28 3.3.64-.64zm6.22-.41c.1.12.17.27.18.44 0 .34-.27.61-.61.61a.57.57 0 01-.43-.18l-2.24-2.25c-.13.08-.26.16-.4.23-.02.01-.05.02-.07.03-.14.06-.27.12-.42.17h-.01c-.14.05-.29.08-.44.11-.04.01-.08.02-.11.02-.15.02-.3.04-.46.04-1.85 0-3.35-1.51-3.35-3.37S8.96 1.01 10.81 1c1.85 0 3.35 1.51 3.35 3.37 0 .16-.02.31-.04.47-.01.04-.01.07-.02.11-.02.15-.05.29-.1.44v.01c-.05.15-.11.28-.17.42-.01.02-.02.05-.03.07-.07.14-.14.27-.23.4l2.25 2.24zm-5.01-1.94c1.22 0 2.21-.99 2.21-2.22 0-1.23-.99-2.22-2.21-2.22S8.6 3.14 8.6 4.37c0 1.22.99 2.22 2.21 2.22z"],settings:["M3 1c0-.55-.45-1-1-1S1 .45 1 1v3h2V1zm0 4H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm12-4c0-.55-.45-1-1-1s-1 .45-1 1v2h2V1zM9 1c0-.55-.45-1-1-1S7 .45 7 1v6h2V1zM1 15c0 .55.45 1 1 1s1-.45 1-1v-5H1v5zM15 4h-2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-2 11c0 .55.45 1 1 1s1-.45 1-1V9h-2v6zM9 8H7c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-2 7c0 .55.45 1 1 1s1-.45 1-1v-2H7v2z"],share:["M10.99 13.99h-9v-9h4.76l2-2H.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V7.24l-2 2v4.75zm4-14h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L7.29 7.28a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l5.29-5.29V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z"],shield:["M8 16c4.667-3.048 7-7.238 7-12.571-1.556 0-3.889-1.143-7-3.429-3.111 2.286-5.444 3.429-7 3.429C1 8.762 3.333 12.952 8 16zM8 2.121c2.005 1.388 3.715 2.304 5.186 2.735-.342 3.702-2.05 6.683-5.186 9.038V2.121z"],shop:["M3 2h10c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1zm9 11H4v-3H2v5c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-5h-2v3zm4-6l-1.01-3.17C14.9 3.36 14.49 3 14 3H2c-.49 0-.9.36-.98.83L.01 7H0c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2z"],"shopping-cart":["M14 10H7.72l-.33-1H13c.39 0 .72-.23.89-.56h.01l2-4h-.01c.06-.13.11-.28.11-.44 0-.55-.45-1-1-1H5.39l-.44-1.32h-.01C4.8 1.29 4.44 1 4 1H1c-.55 0-1 .45-1 1s.45 1 1 1h2.28l2.33 7H4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2h6c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zM6.05 5h7.33l-1 2H6.72l-.67-2z"],"signal-search":["M5.474 7.971A5.31 5.31 0 006.66 8.9l.007.019.018.056c.015.038.038.06.045.098l1.5 5.999a.75.75 0 01-1.455.36l-.42-1.68h-.704l-.42 1.68a.746.746 0 01-.907.547.746.746 0 01-.547-.907l1.5-6c.007-.037.03-.06.044-.097.015-.037.015-.075.038-.112a.722.722 0 01-.105-.36c0-.207.084-.394.22-.53zM2.795 5.277a.763.763 0 00-.015-1.065.756.756 0 00-1.065.015c-2.286 2.34-2.286 6.21 0 8.549a.747.747 0 101.072-1.042c-1.709-1.763-1.709-4.702.008-6.457zM7.808 9.388a5.318 5.318 0 001.58.211 2.236 2.236 0 01-.656.98.756.756 0 01-1.057-.098.756.756 0 01.097-1.057l.036-.036zM11.544 9.105l.378.378a6.02 6.02 0 01-1.638 3.285c-.285.3-.757.3-1.057.015a.74.74 0 01-.015-1.057 4.52 4.52 0 001.185-2.24c.4-.083.785-.212 1.147-.381z","M4.054 9.424c-.427-.352-.352-1.582-.03-1.822a.752.752 0 00.15-1.05.752.752 0 00-1.05-.15c-1.079.802-1.221 3.18-.03 4.177a.75.75 0 10.96-1.155zM9.318 0a4.318 4.318 0 014.317 4.318c0 .206-.02.402-.049.598-.01.05-.01.088-.02.138-.039.196-.078.382-.137.569v.01c-.059.186-.137.363-.216.54l-.039.087a5.285 5.285 0 01-.294.51l2.884 2.886a.878.878 0 01.236.559.787.787 0 01-.785.785.785.785 0 01-.56-.226L11.772 7.89a5.285 5.285 0 01-.51.295l-.089.039c-.176.079-.353.157-.54.216h-.01a3.701 3.701 0 01-.568.137c-.05.01-.099.02-.138.02-.196.03-.392.049-.598.049A4.318 4.318 0 015 4.327 4.332 4.332 0 019.318 0zm-.02 1.1A3.195 3.195 0 006.1 4.298a3.195 3.195 0 003.198 3.198 3.195 3.195 0 003.198-3.198A3.195 3.195 0 009.298 1.1z"],"sim-card":["M13.71 4.29l-4-4A.997.997 0 009 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.28-.11-.53-.29-.71zM7 6h2v2H7V6zM4 6h2v2H4V6zm2 8H4v-2h2v2zm3 0H7v-2h2v2zm3 0h-2v-2h2v2zm0-3H4V9h8v2zm0-3h-2V6h2v2z"],slash:["M10 2a.99.99 0 00-.96.73l-2.99 9.96A1.003 1.003 0 007 14c.46 0 .85-.31.96-.73l2.99-9.96A1.003 1.003 0 0010 2z"],"small-cross":["M9.41 8l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42L6.59 8 4.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z"],"small-minus":["M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z"],"small-plus":["M11 7H9V5c0-.55-.45-1-1-1s-1 .45-1 1v2H5c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V9h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"small-tick":["M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z"],snowflake:["M13.364 9l.879.879a1 1 0 11-1.415 1.414l-2.12-2.121A1.003 1.003 0 0110.568 9H9v1.604c.042.03.083.065.121.103l2.122 2.121a1 1 0 01-1.415 1.415L9 13.414V15a1 1 0 01-2 0v-1.636l-.879.879a1 1 0 11-1.414-1.415l2.121-2.12c.054-.054.111-.1.172-.139V9H5.38c-.038.06-.084.118-.137.172l-2.122 2.12A1 1 0 111.707 9.88L2.586 9H1a1 1 0 110-2h1.536l-.829-.828a1 1 0 011.414-1.415L5.243 6.88c.038.038.072.079.103.121H7V5.38a1.003 1.003 0 01-.172-.137L4.708 3.12A1 1 0 016.12 1.707L7 2.586V1a1 1 0 112 0v1.536l.828-.829a1 1 0 011.415 1.414L9.12 5.243A1.007 1.007 0 019 5.346V7h1.604c.03-.042.065-.083.103-.121l2.121-2.122a1 1 0 011.415 1.415L13.414 7H15a1 1 0 010 2h-1.636z"],"social-media":["M9.5 4c.4 0 .8-.1 1.1-.3C12 4.5 12.9 6 13 7.6c0 .5.5.9 1 .9.6 0 1-.4 1-1v-.2c-.2-2.4-1.5-4.4-3.5-5.5-.1-1-.9-1.8-2-1.8s-2 .9-2 2 .9 2 2 2zM4 8.5c0-.7-.4-1.3-.9-1.7.3-1.4 1.2-2.6 2.5-3.3.3-.1.6-.4.6-.9s-.4-1-1-1c-.2 0-.3 0-.5.1-1.9 1-3.2 2.8-3.6 5C.4 7.1 0 7.8 0 8.5c0 1.1.9 2 2 2s2-.9 2-2zm8.8 1.2c-1.1 0-2 .9-2 2v.3c-.8.6-1.8.9-2.8.9-1.2 0-2.3-.4-3.2-1.1-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.6.3.8C4.6 14.4 6.2 15 8 15c1.5 0 3-.5 4.1-1.3.2.1.5.1.7.1 1.1 0 2-.9 2-2s-.9-2.1-2-2.1z"],sort:["M5 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm3-9h7c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm7 2H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0 8H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z"],"sort-alphabetical":["M6 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 002 12a1.003 1.003 0 00-.71 1.71l2 2c.19.18.44.29.71.29.28 0 .53-.11.71-.29l2-2c.18-.18.29-.43.29-.71a.99.99 0 00-1-1zm7.93-.95v-1.04H9.25v1.11h2.94L9 14.96V16h5.02v-1.11h-3.27l3.18-3.84zm-1.42-4.84l.62 1.78H15L11.94.01H10.1L7 7.99h1.81l.64-1.78h3.06zm-1.52-4.24h.02l1.03 2.93H9.92l1.07-2.93z"],"sort-alphabetical-desc":["M5.99 11.99c-.28 0-.53.11-.71.29l-.29.29V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l2-2c.18-.18.29-.43.29-.71 0-.56-.45-1.01-1-1.01zM12.7 10h-1.38L9 15.99h1.36l.48-1.33h2.3l.46 1.33H15L12.7 10zm-1.51 3.67l.8-2.2h.02l.77 2.2h-1.59zm3.8-7.17h-4.57l4.45-5.12V0H8.34v1.48h4.1L7.99 6.59v1.39h7V6.5z"],"sort-asc":["M8 7h3c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h1c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0 8h5c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm-3 1c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm10 1H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z"],"sort-desc":["M5 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm4 1H8c-.55 0-1 .45-1 1s.45 1 1 1h1c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H8c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm-2 4H8c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z"],"sort-numerical":["M6 11.99c-.28 0-.53.11-.71.29l-.29.3V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l2-2A1.003 1.003 0 006 11.99zm7.91-.08c-.06-.36-.17-.68-.33-.96-.16-.28-.37-.51-.64-.69-.27-.17-.61-.26-1.03-.26-.28 0-.54.06-.78.17-.23.11-.43.26-.6.45-.17.19-.3.41-.39.67a2.492 2.492 0 00-.04 1.52 1.623 1.623 0 00.89 1.03c.22.11.45.16.68.16.26 0 .5-.05.7-.15s.38-.26.53-.5l.02.02c-.01.16-.03.34-.07.54-.03.2-.09.4-.17.57-.08.18-.18.33-.31.45s-.29.19-.5.19a.63.63 0 01-.48-.21c-.13-.14-.21-.31-.25-.5H10.1c.03.25.1.48.19.68.1.2.22.37.38.5.16.14.33.24.54.31s.42.1.65.1c.39 0 .72-.09.99-.27.27-.18.49-.41.66-.7.17-.29.29-.61.37-.97.08-.36.12-.72.12-1.07 0-.36-.03-.72-.09-1.08zm-1.14.54c-.04.13-.09.24-.16.34a.78.78 0 01-.27.24c-.11.06-.24.09-.39.09a.75.75 0 01-.37-.09.777.777 0 01-.26-.25c-.07-.1-.12-.22-.15-.35-.03-.13-.05-.26-.05-.4 0-.13.02-.26.05-.39.04-.13.09-.24.16-.34.07-.1.16-.18.26-.24s.22-.09.35-.09c.14 0 .26.03.37.09.11.06.2.14.28.24a1.32 1.32 0 01.23.74c0 .15-.02.28-.05.41zm-1.56-4.47H13V0h-1.42c-.05.3-.16.56-.31.76-.16.21-.35.37-.58.5-.23.13-.49.21-.78.26-.3.05-.6.07-.91.06V2.8h2.21v5.18z"],"sort-numerical-desc":["M6 11.99c-.28 0-.53.11-.71.29l-.29.3V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29a.982.982 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 006 11.99zm7.86-9.45c-.09-.48-.26-.9-.5-1.28S12.8.58 12.4.35C12 .12 11.49 0 10.86 0c-.43 0-.82.07-1.17.22s-.65.35-.9.6-.44.55-.58.89c-.14.34-.2.71-.2 1.11 0 .31.05.61.15.91.1.3.26.57.48.8.23.24.52.43.85.58.33.14.68.21 1.03.21.4 0 .75-.07 1.05-.2.3-.13.57-.35.79-.66l.02.02c-.02.21-.05.45-.1.73-.05.27-.13.53-.25.76-.12.24-.27.44-.47.6-.19.16-.44.25-.75.25a.98.98 0 01-.72-.29c-.19-.18-.31-.4-.37-.66H8.15c.05.34.14.64.29.9.15.26.34.49.57.67.23.18.5.32.8.41.31.1.63.15.98.15.58 0 1.08-.12 1.48-.36.4-.24.73-.55.99-.93.26-.39.44-.82.56-1.29.12-.48.18-.96.18-1.44s-.05-.96-.14-1.44zm-1.71.72c-.05.17-.14.32-.24.46-.11.13-.24.24-.41.31-.16.08-.36.12-.58.12-.21 0-.39-.04-.55-.13-.16-.08-.29-.19-.39-.33-.12-.14-.19-.29-.24-.46-.05-.17-.08-.35-.08-.54 0-.18.03-.35.08-.52.06-.16.14-.31.25-.44.11-.13.24-.24.4-.32.16-.08.33-.12.52-.12.21 0 .4.04.56.12.16.08.3.19.41.32.11.14.2.29.26.46.06.17.09.35.09.52 0 .2-.03.38-.08.55zm-.46 7.31c-.12.15-.26.28-.44.37-.17.09-.37.16-.58.2-.22.04-.44.05-.67.05v.92h1.65v3.88h1.33V10h-1.06c-.03.23-.11.42-.23.57z"],"split-columns":["M12 10a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9V2h3v1.71c.31-.13.64-.21 1-.21s.69.08 1 .21V1c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2.71c.31-.13.64-.21 1-.21s.69.08 1 .21V2h3v5H3.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 9H7v5H4v-1.71c-.31.13-.64.21-1 .21s-.69-.08-1-.21V15c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-2.71c-.31.13-.64.21-1 .21s-.69-.08-1-.21V14H9V9h3.59l-.29.29c-.19.18-.3.43-.3.71z"],square:["M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V2h12v12z"],"stacked-chart":["M10 2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3h3V2zm3 10h1c.55 0 1-.45 1-1V8h-3v3c0 .55.45 1 1 1zm2-7c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v2h3V5zm-5 1H7v3h3V6zM5 7c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v1h3V7zm3 5h1c.55 0 1-.45 1-1v-1H7v1c0 .55.45 1 1 1zm7 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h1c.55 0 1-.45 1-1V9H2v2c0 .55.45 1 1 1z"],star:["M8 0l2.5 5.3 5.5.8-4 4.1.9 5.8L8 13.3 3.1 16l.9-5.8-4-4.1 5.5-.8z"],"star-empty":["M16 6.11l-5.53-.84L8 0 5.53 5.27 0 6.11l4 4.1L3.06 16 8 13.27 12.94 16 12 10.21l4-4.1zM4.91 13.2l.59-3.62L3 7.02l3.45-.53L8 3.2l1.55 3.29 3.45.53-2.5 2.56.59 3.62L8 11.49 4.91 13.2z"],"step-backward":["M12 3c-.24 0-.44.09-.62.23l-.01-.01L7 6.72V4c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V9.28l4.38 3.5.01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"step-chart":["M15 12H2v-2h3c.55 0 1-.45 1-1V7h2v1c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h-2V6c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v2H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"step-forward":["M12 3h-1c-.55 0-1 .45-1 1v2.72l-4.38-3.5v.01A.987.987 0 005 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01L10 9.28V12c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],stop:["M12 3H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],stopwatch:["M9 2v1.083A6.002 6.002 0 018 15 6 6 0 017 3.083V2H6a1 1 0 110-2h4a1 1 0 010 2H9zM8 5a4 4 0 104 4H8V5z"],strikethrough:["M14 7H8.65c-.38-.09-.73-.18-1.04-.26-.31-.08-.49-.13-.54-.14-.43-.11-.79-.29-1.05-.52-.27-.23-.4-.55-.4-.95 0-.29.07-.53.21-.72s.32-.34.54-.46c.22-.11.46-.19.72-.24.26-.05.52-.07.77-.07.74 0 1.36.15 1.84.46.32.2.55.5.68.9h2.22c-.06-.33-.17-.64-.32-.92-.25-.45-.59-.84-1.02-1.15-.43-.31-.93-.54-1.49-.7S8.59 2 7.95 2c-.55 0-1.1.07-1.63.2-.54.13-1.02.34-1.45.62-.42.28-.76.63-1.02 1.05-.26.42-.39.92-.39 1.5 0 .3.04.59.13.88.08.26.21.51.39.75H2c-.55 0-1 .45-1 1s.45 1 1 1h7.13c.25.07.49.14.71.22.25.09.48.23.7.44.21.21.32.53.32.97 0 .21-.05.43-.14.63-.09.21-.24.39-.45.55-.21.16-.48.29-.81.39-.33.1-.73.15-1.2.15-.44 0-.84-.05-1.21-.14-.37-.09-.7-.24-.99-.43-.29-.2-.51-.45-.67-.76-.01 0-.01-.01-.02-.02H3.14a3.68 3.68 0 001.39 2.03c.46.34 1 .58 1.62.74.61.15 1.27.23 1.97.23.61 0 1.2-.07 1.79-.2.58-.13 1.11-.34 1.56-.63.46-.29.83-.66 1.11-1.11.28-.45.42-1 .42-1.64 0-.3-.05-.6-.15-.9-.05-.19-.13-.36-.22-.52H14c.55 0 1-.45 1-1s-.45-1-1-1z"],style:["M14 14H2V2h8.76l2-2H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6.24l-2 2V14zm1.4-14L9.7 5.7l2.1 2.1L16 3.6V0h-.6zM4 11.92c2.33.15 4.42.15 6.15-1.5.82-.83.82-2.25 0-3.08-.45-.38-.98-.6-1.5-.6-.53 0-1.05.22-1.43.6-.82.91-1.27 3.38-3.22 4.58z"],"swap-horizontal":["M0 7.02L.05 7H0v.02zm2-2.03h9.57l-1.29 1.29A1.003 1.003 0 0011.7 7.7l2.99-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2.99-3a1.07 1.07 0 00-.71-.28 1.003 1.003 0 00-.71 1.71L11.57 3H2c-.55 0-1 .45-1 1a1 1 0 001 .99zM15.96 9H16v-.02l-.04.02zM14 11.01H4.43l1.29-1.29A1.003 1.003 0 004.3 8.3l-2.99 3a.99.99 0 00-.29.7c0 .28.11.53.29.71l2.99 3a1.003 1.003 0 001.42-1.42L4.43 13H14c.55 0 1-.45 1-1s-.45-.99-1-.99z"],"swap-vertical":["M9 0h-.02L9 .04V0zM7 16h.02L7 15.95V16zM4.7 1.31c-.18-.18-.43-.29-.7-.29s-.53.11-.71.29l-3 2.99a1.003 1.003 0 001.42 1.42L3 4.43V14c0 .55.45 1 1 1s1-.45 1-1V4.43l1.29 1.29c.18.18.43.29.7.29A1.003 1.003 0 007.7 4.3l-3-2.99zM15 9.99c-.28 0-.53.11-.71.29L13 11.57V2c0-.55-.45-1-1-1s-1 .45-1 1v9.57l-1.29-1.29a.99.99 0 00-.7-.29 1.003 1.003 0 00-.71 1.71l3 2.99c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-2.99c.18-.18.29-.43.29-.71-.01-.55-.46-1-1.01-1z"],"symbol-circle":["M8 3.01a5 5 0 100 10 5 5 0 100-10z"],"symbol-cross":["M12 6.01h-2v-2c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v2H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2h2c.55 0 1-.45 1-1v-2c0-.56-.45-1-1-1z"],"symbol-diamond":["M12 8.01c0-.19-.07-.36-.16-.51l.01-.01-3-5-.01.01c-.17-.29-.48-.49-.84-.49s-.67.2-.84.49l-.02-.01-3 5 .02.01c-.09.15-.16.32-.16.51s.07.36.16.51h-.02l3 5 .01-.01c.18.29.49.5.85.5s.67-.2.84-.49l.01.01 3-5-.01-.01c.09-.16.16-.32.16-.51z"],"symbol-square":["M12 3.01H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-8c0-.56-.45-1-1-1z"],"symbol-triangle-down":["M13 4.01c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 .16.05.31.11.44H3.1l4 8h.01c.16.33.49.56.89.56s.72-.23.89-.56h.01l4-8h-.01c.06-.14.11-.28.11-.44z"],"symbol-triangle-up":["M12.89 11.56l-3.99-8h-.01c-.17-.32-.5-.55-.89-.55s-.72.23-.89.55H7.1l-4 8h.01c-.06.14-.11.29-.11.45 0 .55.45 1 1 1h8c.55 0 1-.45 1-1 0-.16-.05-.31-.11-.45z"],tag:["M1 3a2 2 0 012-2h4.584a2 2 0 011.414.586l5.413 5.412a2 2 0 010 2.829L9.827 14.41a2 2 0 01-2.829 0L1.586 8.998A2 2 0 011 7.584V3zm3.487-.007a1.494 1.494 0 100 2.988 1.494 1.494 0 000-2.988z"],"take-action":["M9 11a1.003 1.003 0 001.71.71l4-4a1.003 1.003 0 00-1.42-1.42l-4 4c-.18.18-.29.43-.29.71zM4 6c.28 0 .53-.11.71-.29l4-4A1.003 1.003 0 007.29.29l-4 4A1.003 1.003 0 004 6zm4 4l5-5-.79-.79.5-.5a1.003 1.003 0 00-1.42-1.42l-.5.5L10 2 5 7l.79.79-5.5 5.5a1.003 1.003 0 001.42 1.42l5.5-5.5L8 10zm7 4H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z"],taxi:["M15.12 6.63h-.38L15 7c-.01.3-.01.64 0 .98V8c0 .07-.03.13-.04.19h.02L14 13.1v.9c0 .55-.45 1-1 1s-1-.45-1-1v-1H4v1c0 .55-.45 1-1 1s-1-.45-1-1v-.9l-.98-4.9h.02C1.03 8.13 1 8.07 1 8H.99c0-.33 0-.67.01-1l.26-.37H.88C.4 6.63 0 6.21 0 5.69s.4-.94.88-.94h1.05l.77-2.11c.19-.53.76-1.08 1.26-1.24 0 0 .68-.2 2.05-.32C6.01 1.05 6 1.03 6 1c0-.55.45-1 1-1h2c.55 0 1 .45 1 1 0 .03-.01.05-.02.08 1.37.12 2.05.32 2.05.32.51.15 1.08.71 1.27 1.24l.76 2.12h1.05c.49 0 .89.42.89.93 0 .52-.4.94-.88.94zM11 10h2V8h-2v2zm-8 0h2V8H3v2zm10-5l-.73-1.63C12.21 3.19 12.18 3 12 3H4c-.18 0-.21.19-.27.37L3 5c-.06.18-.18 1 0 1h10c.18 0 .06-.82 0-1z"],"text-highlight":["M9 10H2V6h7V4H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h8v-2zm4 3h-1V3h1c.55 0 1-.45 1-1s-.45-1-1-1h-1c-.37 0-.7.11-1 .28-.3-.17-.63-.28-1-.28H9c-.55 0-1 .45-1 1s.45 1 1 1h1v10H9c-.55 0-1 .45-1 1s.45 1 1 1h1c.37 0 .7-.11 1-.28.3.17.63.28 1 .28h1c.55 0 1-.45 1-1s-.45-1-1-1zm2-9h-2v2h1v4h-1v2h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z"],th:["M15 1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1zM6 13H2v-2h4v2zm0-3H2V8h4v2zm0-3H2V5h4v2zm8 6H7v-2h7v2zm0-3H7V8h7v2zm0-3H7V5h7v2z"],"th-derived":["M5.6 10l-.3.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l2-2c.2-.2.3-.4.3-.7s-.1-.5-.3-.7l-2-2C6.5 6.1 6.3 6 6 6c-.5 0-1 .4-1 1 0 .3.1.5.3.7l.3.3H1c-.6 0-1 .4-1 1s.4 1 1 1h4.6zM15 1H2c-.5 0-1 .5-1 1v5h2V5h11v2H8.8l.6.6c.1.1.2.3.3.4H14v2H9.7c-.1.1-.2.3-.3.4l-.6.6H14v2H3v-2H1v3c0 .5.5 1 1 1h13c.6 0 1-.5 1-1V2c0-.5-.4-1-1-1z"],"th-disconnect":["M12 1h3c.6 0 1 .5 1 1v12c0 .6-.4 1-1 1h-4.97l.286-2H14v-2h-3.398l.143-1H14V8h-2.97l.143-1H14V5h-2.541l.51-3.576C11.99 1.282 12 1.14 12 1zM5.97 1l-.572 4H2v2h3.112L4.97 8H2v2h2.684l-.143 1H2v2h2.255l-.225 1.576c-.02.142-.03.284-.03.424H1c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1h4.97zM8.01.859a1 1 0 111.98.282l-2 14a1 1 0 11-1.98-.282l2-14z"],"th-filtered":["M10 10h3l1.78-2.226a1 1 0 00.22-.625V4.3l1-.9V14c0 .6-.4 1-1 1H1c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1h4.333L9 4.3V5H7v2h2v1H7v2h3zm-4 3v-2H2v2h4zm0-3V8H2v2h4zm0-3V5H2v2h4zm8 6v-2H7v2h7z","M15.48 0c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V3.71L8.17.98A.566.566 0 018 .57c0-.31.26-.57.57-.57h6.91z"],"th-list":["M15 1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1zm-1 12H2v-2h12v2zm0-3H2V8h12v2zm0-3H2V5h12v2z"],"thumbs-down":["M2 2H0v7h2c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm13.99 4.38c.08-.58-.44-1.02-1.15-1.05-.25-.01-.52-.03-.81-.05.02 0 .05-.01.07-.01.7-.1 1.34-.49 1.41-1.07.06-.58-.46-.97-1.17-1.04-.25-.02-.52-.04-.79-.06.47-.15.84-.42.87-.93.04-.58-.79-1.03-1.5-1.09-.27-.02-.51-.04-.73-.05h-.09c-.23-.02-.43-.02-.62-.03C8.35.95 5.66 1.47 4 2.51v6c2.14 1.29 4.76 3.59 4.21 5.51-.18.59.31 1.05.98.98.81-.09 1.37-.91 1.4-1.78.04-1-.15-2.01-.5-2.91-.04-.25.01-.5.37-.53.49-.03 1.11-.06 1.59-.08.26 0 .51-.01.75-.02h.01c.41-.02.8-.05 1.13-.09.7-.09 1.35-.47 1.43-1.05.08-.58-.44-.97-1.15-1.05-.05-.01-.11-.01-.16-.02.17-.01.33-.03.49-.05.72-.08 1.37-.46 1.44-1.04z"],"thumbs-up":["M15.99 9.62c-.08-.58-.73-.96-1.43-1.05-.15-.02-.32-.04-.49-.05.06-.01.11-.01.16-.02.71-.08 1.23-.47 1.15-1.05-.08-.58-.73-.96-1.43-1.05-.34-.04-.72-.07-1.13-.09h-.01c-.24-.01-.49-.02-.75-.02-.48-.02-1.11-.04-1.59-.08-.36-.03-.41-.28-.37-.53.35-.9.54-1.91.5-2.91-.04-.85-.6-1.68-1.41-1.77-.67-.07-1.16.39-.99.98C8.76 3.91 6.13 6.2 4 7.49v6c1.66 1.03 4.35 1.56 7.48 1.5.19 0 .39-.01.62-.02h.09c.22-.01.46-.03.73-.05.71-.06 1.54-.51 1.5-1.09-.03-.51-.4-.79-.87-.93.27-.02.54-.04.79-.06.71-.06 1.24-.45 1.17-1.04-.06-.58-.7-.97-1.41-1.07-.02 0-.05-.01-.07-.01.29-.02.57-.03.81-.05.71-.03 1.23-.47 1.15-1.05zM2 7H0v7h2c.55 0 1-.45 1-1V8c0-.56-.45-1-1-1z"],tick:["M14 3c-.28 0-.53.11-.71.29L6 10.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l8-8A1.003 1.003 0 0014 3z"],"tick-circle":["M8 16c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm4-11c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z"],time:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm1-6.41V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L9 7.59z"],"timeline-area-chart":["M15 2.59L9.91 7.68 6.6 5.2l-.01.01C6.42 5.09 6.23 5 6 5c-.24 0-.44.09-.62.23v-.01L3 7.12V11h12V2.59zM15 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"timeline-bar-chart":["M8 12h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1zm5 0h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1zm2 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h1c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1z"],"timeline-events":["M8 11H7v1h1v-1zm-4 0H3v1h1v-1zm7-8c.6 0 1-.5 1-1V1c0-.5-.4-1-1-1s-1 .5-1 1v1c0 .5.5 1 1 1zM4 3c.5 0 1-.5 1-1V1c0-.5-.5-1-1-1S3 .5 3 1v1c0 .5.5 1 1 1zm10-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H6v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H1c-.5 0-1 .5-1 1v12c0 .5.5 1 1 1h13c.6 0 1-.5 1-1V2c0-.5-.4-1-1-1zM5 13H2v-3h3v3zm0-4H2V6h3v3zm4 4H6v-3h3v3zm0-4H6V6h3v3zm4 4h-3v-3h3v3zm0-4h-3V6h3v3zm-1-2h-1v1h1V7z"],"timeline-line-chart":["M15 12H2V9.41l3-3L8.29 9.7c.18.19.43.3.71.3s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L9 7.59l-3.29-3.3C5.53 4.11 5.28 4 5 4s-.53.11-.71.29L2 6.59V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],tint:["M7.88 1s-4.9 6.28-4.9 8.9c.01 2.82 2.34 5.1 4.99 5.1 2.65-.01 5.03-2.3 5.03-5.13C12.99 7.17 7.88 1 7.88 1z"],torch:["M5 15c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H5v1zm7-15H4c-.55 0-1 .45-1 1v1h10V1c0-.55-.45-1-1-1zM5 7v6h6V7l2-4H3l2 4zm2 0c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1V7z"],tractor:["M3.5 9a3.5 3.5 0 110 7 3.5 3.5 0 010-7zm9.5 1a3 3 0 110 6 3 3 0 010-6zm-9.5 1a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm9.5 1a1 1 0 100 2 1 1 0 000-2zM5 0c1.46 0 2.527.668 3 2l.815 3.255a78.9 78.9 0 012.186.195L11 2h2l.001 3.688c.698.095 1.37.198 2.013.312.623.11.986.479.986 1v3.354a4.001 4.001 0 00-6.873 1.645H7.999l-.026-.002A4.5 4.5 0 00.659 9.01l-.654.001v-.829C.003 7.386.002 6.423 0 6.022 0 5.5.376 4.99 1 4.99V1a1 1 0 011-1h3zm1 2H3v2.99c1.29.024 2.554.069 3.781.135L6 2z"],train:["M13 14h-1l1 2H3l1-2H3c-1.1 0-2-.9-2-2V2C1 .9 4.13 0 8 0s7 .9 7 2v10c0 1.1-.9 2-2 2zm-2-2h2v-2h-2v2zM9 7h4V3H9v4zm-6 5h2v-2H3v2zm0-5h4V3H3v4z"],translate:["M15.89 14.56l-3.99-8h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56h-.01L9 8.76 7.17 7.38l.23-.18C8.37 6.47 9 5.31 9 4V3h1c.55 0 1-.45 1-1s-.45-1-1-1H7c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H1c-.55 0-1 .45-1 1s.45 1 1 1h6v1c0 .66-.32 1.25-.82 1.61l-.68.51-.68-.5C4.32 5.25 4 4.66 4 4H2c0 1.31.63 2.47 1.6 3.2l.23.17L1.4 9.2l.01.01C1.17 9.4 1 9.67 1 10c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01 2.9-2.17 2.6 1.95-1.99 3.98h.01c-.07.13-.12.28-.12.44 0 .55.45 1 1 1 .39 0 .72-.23.89-.56h.01L8.62 14h4.76l.72 1.45h.01c.17.32.5.55.89.55.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44zM9.62 12L11 9.24 12.38 12H9.62z"],trash:["M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z"],tree:["M9 11.857V16H7v-4.143L1 13l3.885-4.44L3 9l3.07-4.297L5 5l3-5 3 5-1.07-.297L13 9l-1.885-.44L15 13l-6-1.143z"],"trending-down":["M15 7c-.55 0-1 .45-1 1v.59l-4.29-4.3A.997.997 0 009 4c-.16 0-.31.05-.44.11V4.1L5 5.88 1.45 4.11v.01C1.31 4.05 1.16 4 1 4c-.55 0-1 .45-1 1 0 .39.23.72.56.89v.01l4 2v-.01c.13.06.28.11.44.11s.31-.05.44-.11v.01L8.8 6.22 12.59 10H12c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1z"],"trending-up":["M15 4h-3c-.55 0-1 .45-1 1s.45 1 1 1h.59L8.8 9.78 5.45 8.11v.01C5.31 8.05 5.16 8 5 8s-.31.05-.44.11V8.1l-4 2v.01c-.33.17-.56.5-.56.89 0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L5 10.12l3.55 1.78v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L14 7.41V8c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1z"],truck:["M12.5 0a.5.5 0 01.5.5V9a1 1 0 011 1v2h.5a.5.5 0 01.5.5v1a.5.5 0 01-.5.5H13v1a1 1 0 01-2 0v-1H5v1a1 1 0 01-2 0v-1H1.5a.5.5 0 01-.5-.5v-1a.5.5 0 01.5-.5H2v-2a1 1 0 011-1V.5a.5.5 0 011 0V3a2 2 0 012-2h4a2 2 0 012 2V.5a.5.5 0 01.5-.5zM9 8H7a1 1 0 00-1 1v2a1 1 0 001 1h2a1 1 0 001-1V9a1 1 0 00-1-1zm3.5 3h-1a.5.5 0 100 1h1a.5.5 0 100-1zm-8 0h-1a.5.5 0 100 1h1a.5.5 0 100-1zM9 9a.5.5 0 01.5.5v1l-.008.09A.5.5 0 019 11H7l-.09-.008a.5.5 0 01-.41-.492v-1l.008-.09A.5.5 0 017 9zm2-5H5v2h6V4z"],"two-columns":["M3.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1zm11.71 7.3l-2-2a1.003 1.003 0 00-1.71.71v4a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71zM9.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1z"],unarchive:["M13.382 0a1 1 0 01.894.553L16 4v11a1 1 0 01-1 1H1a1 1 0 01-1-1V4L1.724.553A1 1 0 012.618 0h10.764zM8 6c-.28 0-.53.11-.71.29l-2 2-.084.096A1.003 1.003 0 006.71 9.71l.29-.3V12l.007.116c.058.496.482.884.993.884.55 0 1-.45 1-1V9.41l.29.29.081.076A.97.97 0 0010 10a1.003 1.003 0 00.71-1.71l-2-2-.096-.084A1.002 1.002 0 008 6zm5-4H3L2 4h12l-1-2z"],underline:["M8 14c2.8 0 5-2.2 5-5V3c0-.6-.4-1-1-1s-1 .4-1 1v6c0 1.7-1.3 3-3 3s-3-1.3-3-3V3c0-.6-.4-1-1-1s-1 .4-1 1v6c0 2.8 2.2 5 5 5zM13.5 15h-11c-.3 0-.5.2-.5.5s.2.5.5.5h11c.3 0 .5-.2.5-.5s-.2-.5-.5-.5z"],undo:["M4 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7-7H3.41L4.7 2.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 4.47 0 4.72 0 5c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 6H11c1.66 0 3 1.34 3 3s-1.34 3-3 3H7v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"],"ungroup-objects":["M3.5 5C1.57 5 0 6.57 0 8.5S1.57 12 3.5 12 7 10.43 7 8.5 5.43 5 3.5 5zm9 0C10.57 5 9 6.57 9 8.5s1.57 3.5 3.5 3.5S16 10.43 16 8.5 14.43 5 12.5 5z"],"unknown-vehicle":["M10.507 9.75v-3.5c0-.089.023-.171.051-.25h-7.55c-.176 0-.061-.824 0-1l.729-1.63c.06-.177.095-.37.27-.37h4.5V1.01c-.166-.003-.32-.01-.5-.01-2.72 0-4.036.402-4.036.402-.508.155-1.079.711-1.268 1.237L1.94 4.756H.887c-.483 0-.88.423-.88.939s.397.939.88.939h.376L1.008 7c-.034.685 0 1.436 0 2v5c0 .657.384 1 1 1s1-.343 1-1v-1h10v1c0 .657.383 1 1 1s1-.343 1-1v-3.5h-3.75a.75.75 0 01-.75-.75zm-5.5.25h-2V8h2v2zm11-4.305zM15.34.826a2.807 2.807 0 00-.932-.598c-.386-.16-.868-.241-1.445-.241-.447 0-.851.076-1.213.228-.362.153-.67.364-.926.636s-.456.592-.598.963a3.535 3.535 0 00-.218 1.144V3h1.789c.003-.208.023-.405.069-.588.049-.193.124-.362.225-.506.102-.144.232-.259.39-.345.159-.087.348-.13.567-.13.325 0 .58.09.762.272.183.18.275.46.275.839.008.222-.031.407-.116.555a1.654 1.654 0 01-.335.408 7.4 7.4 0 01-.452.37c-.162.123-.316.27-.463.438a2.556 2.556 0 00-.384.611c-.11.239-.177.535-.2.889V6h1.645v-.1c.032-.248.111-.453.237-.618.126-.164.27-.31.433-.438.163-.128.335-.255.518-.383a2.413 2.413 0 00.878-1.117c.102-.255.152-.58.152-.975A2.241 2.241 0 0015.34.826zM12.007 7v2h2V7h-2z"],unlock:["M11.99-.01c-2.21 0-4 1.79-4 4v3h-7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1h-3v-3c0-1.1.9-2 2-2s2 .9 2 2v1c0 .55.45 1 1 1s1-.45 1-1v-1c0-2.21-1.79-4-4-4z"],unpin:["M9.39 1c-.5.5-.4 1.48.15 2.53L4.38 7.54C2.85 6.5 1.52 6.07 1 6.59l3.5 3.5c-.02.02-1.4 2.8-1.4 2.8l2.8-1.4 3.5 3.5c.53-.53.1-1.86-.95-3.38l4.02-5.16c1.04.55 2.01.65 2.51.14L9.39 1z"],unresolve:["M11 3c-.55 0-1.07.09-1.57.26a6.46 6.46 0 010 9.48c.5.17 1.02.26 1.57.26 2.76 0 5-2.24 5-5s-2.24-5-5-5zM9.78 9.38l.09-.27c.08-.36.13-.73.13-1.11s-.05-.75-.13-1.11l-.09-.27a5.32 5.32 0 00-.29-.79l-.12-.21c-.14-.27-.31-.52-.51-.76a.7.7 0 00-.08-.1c-.24-.27-.49-.52-.78-.74-.43-.32-.92-.58-1.45-.75l.01-.01c-.1-.03-.2-.05-.3-.08-.12-.03-.23-.07-.36-.09A5.28 5.28 0 005 3C2.24 3 0 5.24 0 8s2.24 5 5 5c.31 0 .61-.04.9-.09.12-.02.24-.06.36-.09.1-.03.21-.04.3-.08l-.01-.01c.88-.29 1.64-.8 2.22-1.49.03-.03.06-.07.09-.1.19-.24.36-.49.51-.76.04-.07.08-.14.11-.21.13-.25.23-.52.3-.79z"],updated:["M8 0a7.95 7.95 0 00-6 2.74V1c0-.55-.45-1-1-1S0 .45 0 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.54C4.64 2.78 6.22 2 8 2c3.31 0 6 2.69 6 6 0 2.61-1.67 4.81-4 5.63-.63.22-1.29.37-2 .37-3.31 0-6-2.69-6-6 0-.55-.45-1-1-1s-1 .45-1 1c0 4.42 3.58 8 8 8 .34 0 .67-.03 1-.07.02 0 .04-.01.06-.01C12.98 15.4 16 12.06 16 8c0-4.42-3.58-8-8-8zm3 5c-.28 0-.53.11-.71.29L7 8.58 5.71 7.29a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l4-4A1.003 1.003 0 0011 5z"],upload:["M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm3 8c-.28 0-.53-.11-.71-.29L9 6.41V12c0 .55-.45 1-1 1s-1-.45-1-1V6.41l-1.29 1.3a1.003 1.003 0 01-1.42-1.42l3-3C7.47 3.11 7.72 3 8 3s.53.11.71.29l3 3A1.003 1.003 0 0111 8z"],user:["M7.99-.01A7.998 7.998 0 00.03 8.77c.01.09.03.18.04.28.02.15.04.31.07.47.02.11.05.22.08.34.03.13.06.26.1.38.04.12.08.25.12.37.04.11.08.21.12.32a6.583 6.583 0 00.3.65c.07.14.14.27.22.4.04.07.08.13.12.2l.27.42.1.13a7.973 7.973 0 003.83 2.82c.03.01.05.02.07.03.37.12.75.22 1.14.29l.2.03c.39.06.79.1 1.2.1s.81-.04 1.2-.1l.2-.03c.39-.07.77-.16 1.14-.29.03-.01.05-.02.07-.03a8.037 8.037 0 003.83-2.82c.03-.04.06-.08.09-.13.1-.14.19-.28.28-.42.04-.07.08-.13.12-.2.08-.13.15-.27.22-.41.04-.08.08-.17.12-.26.06-.13.11-.26.17-.39.04-.1.08-.21.12-.32.04-.12.08-.24.12-.37.04-.13.07-.25.1-.38.03-.11.06-.22.08-.34.03-.16.05-.31.07-.47.01-.09.03-.18.04-.28.02-.26.04-.51.04-.78-.03-4.41-3.61-7.99-8.03-7.99zm0 14.4c-1.98 0-3.75-.9-4.92-2.31.67-.36 1.49-.66 2.14-.95 1.16-.52 1.04-.84 1.08-1.27.01-.06.01-.11.01-.17-.41-.36-.74-.86-.96-1.44v-.01c0-.01-.01-.02-.01-.02-.05-.13-.09-.26-.12-.39-.28-.05-.44-.35-.5-.63-.06-.11-.18-.38-.15-.69.04-.41.2-.59.38-.67v-.06c0-.51.05-1.24.14-1.72.02-.13.05-.26.09-.39.17-.59.53-1.12 1.01-1.49.49-.38 1.19-.59 1.82-.59.62 0 1.32.2 1.82.59.48.37.84.9 1.01 1.49.04.13.07.26.09.4.09.48.14 1.21.14 1.72v.07c.18.08.33.26.37.66.03.31-.1.58-.16.69-.06.27-.21.57-.48.62-.03.13-.07.26-.12.38 0 .01-.01.04-.01.04-.21.57-.54 1.06-.94 1.42 0 .06.01.13.01.19.04.43-.12.75 1.05 1.27.65.29 1.47.6 2.14.95a6.415 6.415 0 01-4.93 2.31z"],variable:["M3.94 3.15c.47-.66 1.05-1.24 1.76-1.73l.13-.4c-1.11.45-2.05 1.01-2.84 1.7-1.02.88-1.8 1.9-2.32 3.05C.22 6.76 0 7.75 0 8.75c0 1.75.66 3.5 1.99 5.25l.13-.42c-.39-.94-.59-1.82-.59-2.63 0-1.28.22-2.64.67-4.1.45-1.45 1.03-2.69 1.74-3.7zm7.51 6.41l-.27-.15c-.3.41-.52.66-.66.77-.09.06-.21.1-.33.1-.15 0-.3-.1-.45-.28-.25-.33-.59-1.22-1.01-2.69.38-.65.69-1.08.95-1.28.19-.15.39-.22.59-.22.08 0 .22.03.43.08.2.06.39.08.54.08.22 0 .4-.07.54-.22.15-.15.22-.34.22-.57 0-.25-.07-.45-.22-.59-.15-.15-.35-.22-.63-.22-.24 0-.47.06-.69.17-.21.11-.49.36-.82.74-.25.28-.61.78-1.1 1.48a6.72 6.72 0 00-.97-2.38l-2.59.44-.05.27c.19-.04.36-.06.49-.06.26 0 .47.11.64.33.26.34.63 1.38 1.11 3.12-.37.49-.63.81-.77.96-.23.24-.41.4-.56.47-.11.06-.24.09-.39.09-.11 0-.29-.06-.53-.18-.17-.07-.32-.11-.45-.11-.25 0-.46.08-.62.24-.16.16-.24.37-.24.61 0 .23.08.42.23.57.15.15.35.22.61.22.25 0 .48-.05.7-.15.22-.1.49-.32.82-.65.33-.33.78-.86 1.36-1.59.22.69.42 1.19.58 1.51.16.31.35.54.56.68.21.14.47.21.79.21.31 0 .62-.11.93-.33.4-.29.82-.77 1.26-1.47zm2.56-8.54l-.12.42c.39.95.59 1.82.59 2.64 0 1.09-.17 2.26-.5 3.51-.26.96-.6 1.87-1.02 2.71-.42.85-.82 1.51-1.21 1.98-.39.48-.87.92-1.44 1.32l-.14.4c1.11-.45 2.05-1.02 2.84-1.7 1.03-.89 1.81-1.91 2.33-3.05.44-.99.66-1.99.66-3 0-1.73-.66-3.48-1.99-5.23z"],"vertical-bar-chart-asc":["M6 7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1zM2 9c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm8-5c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1zm4-4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],"vertical-bar-chart-desc":["M6 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1zM2 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm8 7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1zm4 2c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1z"],"vertical-distribution":["M1 2h14c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1zm14 11H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM3 5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1H3z"],video:["M15 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM5 11V5l6 3-6 3z"],virus:["M11.918 11.107l.737.737.052-.051A1 1 0 0114.2 13.12l-.078.087-1.414 1.414a1 1 0 01-1.492-1.327l.029-.033-.863-.863c-.426.231-.89.402-1.38.502L9 14l.117.007A1 1 0 019 16H7l-.117-.007A1 1 0 017 14v-1.1a4.967 4.967 0 01-1.447-.539l-.846.846.078.087a1 1 0 01-1.492 1.327l-1.414-1.414-.078-.087a1 1 0 011.492-1.327l.744-.744A4.986 4.986 0 013.23 9.5H2a1 1 0 01-1.993.117L0 9.5v-2a1 1 0 011.993-.117L2 7.5h1.025a4.973 4.973 0 01.905-2.405l-.512-.513-.125.125A1 1 0 011.8 3.38l.078-.087 1.414-1.414a1 1 0 011.529 1.277l.573.575a4.969 4.969 0 011.604-.63V2l-.116-.007a1 1 0 010-1.986L7 0h2a1 1 0 01.117 1.993L9 2l.001 1.1c.639.13 1.233.381 1.757.73l.535-.537-.078-.087a1 1 0 011.492-1.327l1.414 1.414.078.087a1 1 0 01-1.492 1.327l-.535.536a4.97 4.97 0 01.803 2.257H14l.007-.117A1 1 0 0116 7.5v2l-.007.117A1 1 0 0114 9.5h-1.229a4.987 4.987 0 01-.853 1.607zM10 9a1 1 0 100 2 1 1 0 000-2zM6.5 5a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"],"volume-down":["M9 2c-.28 0-.53.11-.71.29L5.59 5H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm3.57 1.44l-1.59 1.22C11.62 5.61 12 6.76 12 8s-.38 2.39-1.02 3.34l1.59 1.22C13.47 11.27 14 9.7 14 8c0-1.7-.53-3.27-1.43-4.56z"],"volume-off":["M11 2c-.28 0-.53.11-.71.29L7.59 5H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],"volume-up":["M7 1.86c-.28 0-.53.11-.71.29l-2.7 2.71H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71a1.003 1.003 0 001.71-.71v-10c-.01-.55-.46-1-1.01-1zm6.74-.99l-1.58 1.22A9.985 9.985 0 0114 7.86c0 2.16-.69 4.15-1.85 5.78l1.58 1.22c1.42-1.97 2.26-4.38 2.26-7 .01-2.61-.84-5.02-2.25-6.99zM8.98 4.52C9.62 5.48 10 6.63 10 7.86s-.38 2.39-1.02 3.34l1.59 1.22c.9-1.29 1.43-2.86 1.43-4.56 0-1.7-.53-3.27-1.43-4.56L8.98 4.52z"],walk:["M13 8h-2c-.16 0-.31-.05-.44-.11v.01l-1.02-.51-.37 1.86 1.38.92-.01.02c.27.17.46.46.46.81v4c0 .55-.45 1-1 1s-1-.45-1-1v-3.46l-1.27-.85-1.8 4.67h-.01A.98.98 0 015 16c-.55 0-1-.45-1-1 0-.13.03-.25.07-.36h-.01L7.39 6H5.62l-.73 1.45h-.01C4.72 7.77 4.39 8 4 8c-.55 0-1-.45-1-1 0-.16.05-.31.11-.44H3.1l1-2h.01c.17-.33.5-.56.89-.56h3.16l.29-.75C8.17 2.9 8 2.47 8 2c0-1.1.9-2 2-2s2 .9 2 2c0 1-.73 1.82-1.69 1.97l-.5 1.32 1.43.71H13c.55 0 1 .45 1 1s-.45 1-1 1z"],"warning-sign":["M15.84 13.5l.01-.01-7-12-.01.01c-.17-.3-.48-.5-.85-.5s-.67.2-.85.5l-.01-.01-7 12 .01.01c-.09.15-.15.31-.15.5 0 .55.45 1 1 1h14c.55 0 1-.45 1-1 0-.19-.06-.35-.15-.5zm-6.85-.51h-2v-2h2v2zm0-3h-2v-5h2v5z"],"waterfall-chart":["M8 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-4 4h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1zm7-6c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1s-1 .45-1 1v1c0 .55.45 1 1 1zm4-3h-1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 10H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],widget:["M13 11h2V5h-2v6zM3 5H1v6h2V5zm11-1c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM5 3h6V1H5v2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3 15h6v-2H5v2z"],"widget-button":["M1 3h14c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1zm1 2v6h12V5H2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"widget-footer":["M14 0H2c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H3v-3h10v3zm0-4H3V2h10v8z"],"widget-header":["M14 0H2c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H3V6h10v8zm0-9H3V2h10v3z"],wrench:["M15.83 3.7l-3.06 3.05-2.84-.7-.7-2.83L12.29.17a5.004 5.004 0 00-4.83 1.29 4.967 4.967 0 00-1.12 5.36L.58 12.58c-.36.36-.58.86-.58 1.41 0 1.1.9 2 2 2 .55 0 1.05-.22 1.41-.59l5.77-5.77c1.79.69 3.91.33 5.35-1.12 1.32-1.3 1.74-3.15 1.3-4.81z"],"zoom-in":["M7.99 5.99v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2zm7.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"zoom-out":["M3.99 5.99c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1h-6zm11.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"zoom-to-fit":["M11 10a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42L12.59 8 11.3 9.29c-.19.18-.3.43-.3.71zM1 5c.55 0 1-.45 1-1V2h2c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v3c0 .55.45 1 1 1zm4 1a1.003 1.003 0 00-1.71-.71l-2 2C1.11 7.47 1 7.72 1 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 8 4.7 6.71c.19-.18.3-.43.3-.71zm1-1c.28 0 .53-.11.71-.29L8 3.41 9.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-2 2A1.003 1.003 0 006 5zm9 6c-.55 0-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zm0-11h-3c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zM4 14H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm6-3c-.28 0-.53.11-.71.29L8 12.59 6.71 11.3A.965.965 0 006 11a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 0010 11z"]},r={add:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm5-9h-4V5c0-.55-.45-1-1-1s-1 .45-1 1v4H5c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1v-4h4c.55 0 1-.45 1-1s-.45-1-1-1z"],"add-column-left":["M4 11h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1H8V7c0-.55-.45-1-1-1s-1 .45-1 1v2H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-7 18H2V2h10v16zm6 0h-5V2h5v16z"],"add-column-right":["M10 11h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V7c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1zm9-11H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H2V2h5v16zm11 0H8V2h10v16z"],"add-row-bottom":["M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V8h16v10zm0-11H2V2h16v5zM7 14h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2v-2c0-.55-.45-1-1-1s-1 .45-1 1v2H7c-.55 0-1 .45-1 1s.45 1 1 1z"],"add-row-top":["M7 8h2v2c0 .55.45 1 1 1s1-.45 1-1V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v2H7c-.55 0-1 .45-1 1s.45 1 1 1zm12-8H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2v-5h16v5zm0-6H2V2h16v10z"],"add-to-artifact":["M13 12H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zM1 6h9c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm12 2H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm6-4h-2V2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V6h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"add-to-folder":["M.01 10V6H20v10c0 .55-.45 1-1 1H9.995v-3.99C9.965 11.332 8.635 10 6.987 10H.01zM19 3c.55 0 1 .45.99 1v1H0V2c0-.55.45-1 1-1h5.997c.28 0 .53.11.71.29L9.414 3H19zM6.987 12c.55 0 .999.45 1.009 1.01v5c0 .55-.45 1-1 1s-.999-.45-.999-1v-2.59l-4.288 4.29a1.003 1.003 0 01-1.42-1.42L4.579 14H1.989c-.55 0-1-.45-1-1s.45-1 1-1h4.998z"],airplane:["M20 2c0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-4.84 4.84L2 1 1 3l7.53 5.64L4.17 13H1l-1 1 4 2 2 4 1-1v-3.17l4.36-4.36L17 19l2-1-4.43-9.74 4.84-4.84c.37-.37.59-.87.59-1.42z"],"align-center":["M5 5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1H5zM1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm12 12c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h6zm4 2H3c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm2-8H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],"align-justify":["M1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 14H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-12H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],"align-left":["M1 7h10c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 14H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM1 15h6c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z"],"align-right":["M19 17H5c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 10h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H9c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z"],"alignment-bottom":["M12 16h4c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1zm7 2H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1z"],"alignment-horizontal-center":["M19 9h-2V7c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v2H9V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6H1c-.55 0-1 .45-1 1s.45 1 1 1h2v6c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-6h2v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"alignment-left":["M1 0C.45 0 0 .45 0 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm11 11H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm7-8H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"alignment-right":["M19 0c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-4 11H8c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm0-8H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"alignment-top":["M8 4H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm11-4H1C.45 0 0 .45 0 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-3 4h-4c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z"],"alignment-vertical-center":["M17 3h-6V1c0-.55-.45-1-1-1S9 .45 9 1v2H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h6v2H7c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1h-2V9h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],annotation:["M9.41 13.41l7.65-7.65-2.83-2.83-7.65 7.65 2.83 2.83zm10-10c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.83 1.64-1.66zM18 18H2V2h8.93l2-2H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7.07l-2 2V18zM4 16l4.41-1.59-2.81-2.79L4 16z"],"app-header":["M19 0a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h18zM8 6a1 1 0 00-1.993-.117L6 6v8a1 1 0 001.993.117L8 14v-3h4v3a1 1 0 001.993.117L14 14V6a1 1 0 00-1.993-.117L12 6v3H8V6z"],application:["M3.5 9h9c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-9c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm-1 16H2V6h16v11zM3.5 13h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5z"],applications:["M15 5H1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 13H2V8h12v10zM3.5 10h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-3c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM19 0H5c-.55 0-1 .45-1 1v3h2V3h12v10h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],archive:["M16.434 0a1 1 0 01.857.486L20 5v14a1 1 0 01-1 1H1a1 1 0 01-1-1V5L2.709.486A1 1 0 013.566 0h12.868zM10 8c-.55 0-1 .45-1 1v4.58l-1.29-1.29-.081-.073A.996.996 0 007 11.99a1.003 1.003 0 00-.71 1.71l3 3 .096.084c.168.13.38.206.614.206.28 0 .53-.11.71-.29l3-3 .084-.096a1.003 1.003 0 00-1.504-1.324L11 13.58V9l-.007-.116A1.004 1.004 0 0010 8zm6-6H4L2 5.002h16L16 2z"],"arrow-bottom-left":["M18 3a1.003 1.003 0 00-1.71-.71L4 14.59V7c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1H5.41l12.3-12.29c.18-.18.29-.43.29-.71z"],"arrow-bottom-right":["M17 6c-.55 0-1 .45-1 1v7.59L3.71 2.29a1.003 1.003 0 00-1.42 1.42L14.59 16H7c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z"],"arrow-down":["M16 11c-.3 0-.5.1-.7.3L11 15.6V2c0-.5-.4-1-1-1s-1 .5-1 1v13.6l-4.3-4.3c-.2-.2-.4-.3-.7-.3-.5 0-1 .4-1 1 0 .3.1.5.3.7l6 6c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.2-.2.3-.4.3-.7 0-.6-.5-1-1-1z"],"arrow-left":["M18 9H4.41L8.7 4.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L4.41 11H18c.55 0 1-.45 1-1s-.45-1-1-1z"],"arrow-right":["M18.71 9.29l-6-6a1.003 1.003 0 00-1.42 1.42L15.59 9H2c-.55 0-1 .45-1 1s.45 1 1 1h13.59l-4.29 4.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"arrow-top-left":["M17.71 16.29L5.41 4H13c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5.41L16.29 17.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"arrow-top-right":["M17 2H7c-.55 0-1 .45-1 1s.45 1 1 1h7.59L2.29 16.29a1.003 1.003 0 001.42 1.42L16 5.41V13c0 .55.45 1 1 1s1-.45 1-1V3c0-.55-.45-1-1-1z"],"arrow-up":["M16.7 7.3l-6-6c-.2-.2-.4-.3-.7-.3s-.5.1-.7.3l-6 6c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L9 4.4V18c0 .5.4 1 1 1s1-.5 1-1V4.4l4.3 4.3c.2.2.4.3.7.3.5 0 1-.4 1-1 0-.3-.1-.5-.3-.7z"],"arrows-horizontal":["M19.7 9.3l-5-5c-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.5.3.7L16.6 9H3.4l3.3-3.3c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1-.3 0-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7s.1.5.3.7l5 5c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7L3.4 11h13.2l-3.3 3.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l5-5c.2-.2.3-.4.3-.7s-.1-.5-.3-.7z"],"arrows-vertical":["M15 13c-.3 0-.5.1-.7.3L11 16.6V3.4l3.3 3.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7l-5-5c-.2-.2-.4-.3-.7-.3s-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3L9 3.4v13.2l-3.3-3.3c-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.5.3.7l5 5c.2.2.4.3.7.3s.5-.1.7-.3l5-5c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1z"],asterisk:["M18.52 14.17l.01-.02L11.89 10l6.64-4.15-.01-.02A.97.97 0 0019 5c0-.55-.45-1-1-1-.2 0-.37.07-.52.17l-.01-.02L11 8.2V1c0-.55-.45-1-1-1S9 .45 9 1v7.2L2.53 4.15l-.01.02A.922.922 0 002 4c-.55 0-1 .45-1 1 0 .36.2.66.48.83l-.01.02L8.11 10l-6.64 4.15.01.02A.97.97 0 001 15c0 .55.45 1 1 1 .2 0 .37-.07.52-.17l.01.02L9 11.8V19c0 .55.45 1 1 1s1-.45 1-1v-7.2l6.47 4.04.01-.02c.15.11.32.18.52.18.55 0 1-.45 1-1 0-.36-.2-.66-.48-.83z"],"automatic-updates":["M10 18c-4.42 0-8-3.58-8-8 0-2.52 1.18-4.76 3-6.22V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1h2.06C1.61 3.82 0 6.71 0 10c0 5.52 4.48 10 10 10 .55 0 1-.45 1-1s-.45-1-1-1zm0-16c1.64 0 3.15.49 4.42 1.34l1.43-1.43A9.869 9.869 0 0010 0c-.55 0-1 .45-1 1s.45 1 1 1zm10 8c0-1.13-.2-2.21-.54-3.22L17.84 8.4A7.962 7.962 0 0115 16.22V15c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-2.06c2.45-1.82 4.06-4.71 4.06-8zm0-7a1.003 1.003 0 00-1.71-.71L12 8.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7c.18-.18.29-.43.29-.71z"],backlink:["M18.387 19.79l-.094-.083L14 15.415V18a1 1 0 01-2 0l.003-5.075.017-.126.03-.111.044-.111.052-.098.067-.096.08-.09a1.01 1.01 0 01.112-.097l.11-.071.114-.054.105-.035.15-.03L13 12h5a1 1 0 110 2h-2.585l4.292 4.293a1 1 0 01-1.32 1.497zM7.036 9.136l-4.45 4.45-.117.127a2 2 0 002.818 2.818l.127-.117 4.45-4.449a4 4 0 01-.885 3.704l-.15.16-2 2A4 4 0 011.02 12.33l.15-.16 2-2a3.998 3.998 0 013.865-1.035zm6.671-3.843a1 1 0 01.083 1.32l-.083.094-7 7a1 1 0 01-1.497-1.32l.083-.094 7-7a1 1 0 011.414 0zm4.121-4.121a4 4 0 01.151 5.497l-.15.16-2 2a3.998 3.998 0 01-3.864 1.036l4.45-4.45.116-.128a2 2 0 00-2.818-2.818l-.127.117-4.45 4.45a4 4 0 01.885-3.705l.15-.16 2-2a4 4 0 015.657 0z"],badge:["M16.94 5.73c-.19-1.41.62-2.52 1.38-3.59L17.03.65C14.89 1.76 11.88 1.48 10 0 8.12 1.48 5.11 1.76 2.97.65L1.68 2.14c.76 1.07 1.57 2.18 1.38 3.59C2.68 8.59 0 10.94 1.4 14.08c.56 1.43 1.81 2.37 3.4 2.75 1.95.46 4.4.91 5.2 3.17.8-2.26 3.25-2.71 5.2-3.17 1.6-.38 2.84-1.32 3.4-2.75 1.4-3.14-1.28-5.49-1.66-8.35z"],"ban-circle":["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm5 11H5c-.55 0-1-.45-1-1s.45-1 1-1h10c.55 0 1 .45 1 1s-.45 1-1 1z"],"bank-account":["M19.2 8.02l-.78-.18C18.03 6.4 17.2 5.08 16.08 4l.5-2.28c.11-.42-.22-.78-.61-.72-1.06.12-2 .54-2.67 1.26-1.06-.42-2.34-.66-3.56-.66-3.12 0-5.79 1.5-7.4 3.72-.23-.05-.45-.11-.67-.11C.72 5.21 0 5.98 0 7c0 .72.39 1.32.95 1.62-.06.42-.12.9-.12 1.38 0 2.16.89 4.08 2.28 5.58l-.33 2.04c-.11.72.45 1.38 1.12 1.38h.72c.56 0 1-.42 1.11-1.02l.06-.48c1.17.54 2.5.9 3.95.9 1.39 0 2.78-.3 3.95-.9l.06.48c.11.6.56 1.02 1.11 1.02h.72c.67 0 1.22-.66 1.11-1.38l-.33-1.98c.78-.78 1.34-1.74 1.73-2.76l1-.24c.5-.12.89-.6.89-1.2V9.22c.11-.6-.28-1.08-.78-1.2zM15 10c-.6 0-1-.7-1-1.5S14.4 7 15 7s1 .7 1 1.5-.4 1.5-1 1.5zM7.55 5.83a.99.99 0 01-1.38-.28.99.99 0 01.28-1.38c2.34-1.56 4.77-1.56 7.11 0 .46.31.58.93.28 1.39-.31.46-.93.58-1.39.28-1.67-1.12-3.23-1.12-4.9-.01z"],barcode:["M6 16.98h2v-14H6v14zm3 0h1v-14H9v14zm-6 0h2v-14H3v14zm-3 0h2v-14H0v14zm16 0h2v-14h-2v14zm-4 0h1v-14h-1v14zm7-14v14h1v-14h-1zm-5 14h1v-14h-1v14z"],blank:[],"blocked-person":["M11.55 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.06-.11.14-.35.17-.62C10.33 9.42 8.92 7.38 8.92 5c0-.3.05-.58.09-.87-.33-.08-.67-.13-.99-.13-.79 0-1.68.25-2.31.73-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.17 1.51-.17 2.14v.08c-.24.09-.45.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59C3 16.56.77 17.26.32 18.31-.15 19.38.04 20 .04 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.69-1.75-4.17-2.41zM14.97 0c-2.78 0-5.03 2.24-5.03 5s2.25 5 5.03 5S20 7.76 20 5s-2.25-5-5.03-5zm-3.03 5c0-1.66 1.35-3 3.02-3 .47 0 .9.11 1.29.3l-4.01 3.99c-.18-.4-.3-.83-.3-1.29zm3.03 3c-.47 0-.9-.11-1.29-.3l4.01-3.99c.19.39.3.82.3 1.29 0 1.66-1.36 3-3.02 3z"],bold:["M14.3 9c.4-.8.7-1.6.7-2.5C15 4 13 2 10.5 2H5c-.6 0-1 .4-1 1v13c0 .6.4 1 1 1h6.5c2.5 0 4.5-2 4.5-4.5 0-1.4-.7-2.7-1.7-3.5zM7 5h3.5c.8 0 1.5.7 1.5 1.5S11.3 8 10.5 8H7V5zm4.5 9H7v-3h4.5c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5z"],book:["M3 1v18c0 .55.45 1 1 1h2V0H4c-.55 0-1 .45-1 1zm14-1h-2v8l-2-2-2 2V0H7v20h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],bookmark:["M6 0c-.55 0-1 .45-1 1v18c0 .55.32.68.71.29L9.3 15.7a.996.996 0 011.41 0l3.59 3.59c.38.39.7.26.7-.29v-8-4.5V1c0-.55-.45-1-1-1H6z"],box:["M19.89 6.56l-2.99-6h-.01C16.72.23 16.39 0 16 0H4c-.39 0-.72.23-.89.56H3.1l-3 6h.01C.05 6.69 0 6.84 0 7v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7c0-.16-.05-.31-.11-.44zM11 2h4.38l2 4H11V2zM4.62 2H9v4H2.62l2-4zM18 18H2V8h16v10zM8 12h4c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1z"],briefcase:["M19 5h-4V2c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v3H1c-.55 0-1 .45-1 1v5h4v-1h2v1h8v-1h2v1h4V6c0-.55-.45-1-1-1zm-6 0H7V3h6v2zm3 8h-2v-1H6v1H4v-1H0v6c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-6h-4v1z"],"bring-data":["M18 18a1 1 0 010 2H2a1 1 0 010-2h16zM9.995 3.005c.55 0 1 .45 1 .999v9.584l1.29-1.288a1.002 1.002 0 011.42 1.419l-3 2.996a1.015 1.015 0 01-1.42 0l-3-2.997a1.002 1.002 0 011.42-1.419l1.29 1.29V4.013c0-.55.45-1.009 1-1.009zM16 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zM7 0a1 1 0 110 2 1 1 0 010-2zM4 0a1 1 0 110 2 1 1 0 010-2z"],build:["M19.43 16.67L9.31 7.81l1.47-1.56c.41-.44-.15-.8.15-1.6 1.08-2.76 4.19-2.99 4.19-2.99s.45-.47.87-.92C11.98-1 9.26.7 8.04 1.8L3.83 6.25l-.86.92c-.48.51-.48 1.33 0 1.84l-.87.92c-.48-.51-1.26-.51-1.74 0s-.48 1.33 0 1.84l1.74 1.84c.48.51 1.26.51 1.74 0s.48-1.33 0-1.84l.87-.92c.48.51 1.26.51 1.74 0l1.41-1.49 8.81 10.07c.76.76 2 .76 2.76 0 .76-.76.76-2 0-2.76z"],calculator:["M16 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V8h2v2zm4 8H9v-2h2v2zm0-4H9v-2h2v2zm0-4H9V8h2v2zm4 8h-2v-6h2v6zm0-8h-2V8h2v2zm0-4H5V2h10v4z"],calendar:["M15 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zM5 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm13-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H7v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H2c-.5 0-1 .5-1 1v14c0 .5.5 1 1 1h16c.5 0 1-.5 1-1V4c0-.5-.5-1-1-1zM7 17H3v-4h4v4zm0-5H3V8h4v4zm5 5H8v-4h4v4zm0-5H8V8h4v4zm5 5h-4v-4h4v4zm0-5h-4V8h4v4z"],camera:["M10 8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm9-4h-3.59L13.7 2.29A.956.956 0 0013 2H7c-.28 0-.53.11-.71.29L4.59 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h4.11c1.26 1.24 2.99 2 4.89 2s3.63-.76 4.89-2H19c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM4 8H2V6h2v2zm6 8c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"caret-down":["M16 7c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1 0 .24.1.46.24.63l-.01.01 5 6 .01-.01c.19.22.45.37.76.37s.57-.15.76-.37l.01.01 5-6-.01-.01c.14-.17.24-.39.24-.63z"],"caret-left":["M13 4c-.24 0-.46.1-.63.24l-.01-.01-6 5 .01.01c-.22.19-.37.45-.37.76s.15.57.37.76l-.01.01 6 5 .01-.01c.17.14.39.24.63.24.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z"],"caret-right":["M14 10c0-.31-.15-.57-.37-.76l.01-.01-6-5-.01.01C7.46 4.1 7.24 4 7 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1 .24 0 .46-.1.63-.24l.01.01 6-5-.01-.01c.22-.19.37-.45.37-.76z"],"caret-up":["M15.76 12.37l.01-.01-5-6-.01.01C10.57 6.15 10.31 6 10 6s-.57.15-.76.37l-.01-.01-5 6 .01.01c-.14.17-.24.39-.24.63 0 .55.45 1 1 1h10c.55 0 1-.45 1-1 0-.24-.1-.46-.24-.63z"],"cell-tower":["M11.5 8.32c.31-.35.51-.81.51-1.32 0-1.1-.9-2-2-2s-2 .9-2 2c0 .51.2.97.51 1.32L5.06 18.69c-.17.52.11 1.09.63 1.26s1.09-.11 1.26-.63L8.39 15h3.23l1.44 4.32c.17.52.74.81 1.26.63s.81-.74.63-1.26L11.5 8.32zM10.95 13H9.06l.95-2.84.94 2.84zM5.31 10.73a.996.996 0 101.37-1.45c-1.4-1.33-1.28-3.35-.01-4.54.4-.38.43-1.01.05-1.41-.36-.41-1-.43-1.4-.06-2.09 1.95-2.28 5.3-.01 7.46z","M4.6 12.2C3 11.1 2 9 2 7c0-2.1.9-3.9 2.6-5.2.5-.3.5-1 .2-1.4-.3-.5-1-.5-1.4-.2C1.2 1.9-.1 4.2 0 7c.1 2.7 1.4 5.3 3.4 6.8.2.1.4.2.6.2.3 0 .6-.1.8-.4.4-.5.3-1.1-.2-1.4zM13.27 10.69c.38.4 1.01.42 1.41.04 2.27-2.16 2.08-5.51-.01-7.46a.996.996 0 10-1.36 1.46c1.28 1.19 1.39 3.21-.01 4.54-.39.39-.41 1.02-.03 1.42z","M16.6.2c-.4-.3-1.1-.3-1.4.2-.3.4-.3 1.1.2 1.4C17.1 3.1 18 4.9 18 7c0 2-1 4.1-2.6 5.2-.5.3-.6.9-.2 1.4.2.3.5.4.8.4.2 0 .4-.1.6-.2C18.7 12.3 20 9.7 20 7c.09-2.8-1.2-5.1-3.4-6.8z"],changes:["M18 16H2c-1.1 0-2 .9-2 2s.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2zM3 5c.28 0 .53-.11.71-.29L5 3.41V13c0 .55.45 1 1 1s1-.45 1-1V3.41L8.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C6.53.11 6.28 0 6 0s-.53.11-.71.29l-3 3A1.003 1.003 0 003 5zm7.29 5.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L15 10.59V1c0-.55-.45-1-1-1s-1 .45-1 1v9.59L11.71 9.3A.965.965 0 0011 9a1.003 1.003 0 00-.71 1.71z"],chart:["M7 11v8c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-8l-2 2-4-2zm-7 8c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-8l-6 3v5zM17 7l-3 3v9c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V8.74c-.26.15-.58.26-1 .26-1.92 0-2-2-2-2zm2-6h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59L10.8 8.78 7.45 7.11v.01C7.31 7.05 7.16 7 7 7s-.31.05-.44.11V7.1l-6 3v.01c-.33.17-.56.5-.56.89 0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L7 9.12l3.55 1.78v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L18 4.41V6c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],chat:["M19 0H7c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h5.59l3.71 3.71c.17.18.42.29.7.29.55 0 1-.45 1-1v-3h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 13c-1.1 0-2-.9-2-2V4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h1v3a1.003 1.003 0 001.71.71L7.41 16H13c.55 0 1-.45 1-1v-.17L12.17 13H7z"],"chevron-backward":["M8.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L7 8.59V4c0-.55-.45-1-1-1s-1 .45-1 1v12c0 .55.45 1 1 1s1-.45 1-1v-4.59l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L8.41 10z"],"chevron-down":["M16 6c-.28 0-.53.11-.71.29L10 11.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 6z"],"chevron-forward":["M13 3c-.55 0-1 .45-1 1v4.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5.29-5.3V16c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z"],"chevron-left":["M8.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L8.41 10z"],"chevron-right":["M13.71 9.29l-6-6a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"chevron-up":["M16.71 12.29l-6-6C10.53 6.11 10.28 6 10 6s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42L10 8.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],circle:["M10 0C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10S15.5 0 10 0zm0 18c-4.4 0-8-3.6-8-8s3.6-8 8-8 8 3.6 8 8-3.6 8-8 8z"],"circle-arrow-down":["M14 10c-.28 0-.53.11-.71.29L11 12.59V5c0-.55-.45-1-1-1s-1 .45-1 1v7.59L6.71 10.3A.965.965 0 006 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0014 10zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"],"circle-arrow-left":["M15 9H7.41L9.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L7.41 11H15c.55 0 1-.45 1-1s-.45-1-1-1zm-5-9C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"],"circle-arrow-right":["M15.71 9.29l-4-4a1.003 1.003 0 00-1.42 1.42L12.59 9H5c-.55 0-1 .45-1 1s.45 1 1 1h7.59l-2.29 2.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"],"circle-arrow-up":["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.71-13.71C10.53 4.11 10.28 4 10 4s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L9 7.41V15c0 .55.45 1 1 1s1-.45 1-1V7.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z"],citation:["M4 1C1.79 1 0 2.79 0 5s1.79 4 4 4c.1 0 .2-.01.3-.02C3.82 11.32 2.53 13 1 13c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7-4.48 7-10 0-2.21-1.79-4-4-4zM16 1c-2.21 0-4 1.79-4 4s1.79 4 4 4c.1 0 .2-.01.3-.02C15.82 11.32 14.53 13 13 13c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7-4.48 7-10 0-2.21-1.79-4-4-4z"],clean:["M7 0L5 5 0 6.998 5 9l2 5 2-5 5-1.995L9 5zM15 10l-1.5 3.496-3.5 1.499 3.5 1.498L15 20l1.5-3.507L20 15l-3.5-1.504z"],clipboard:["M13 2c0-.55-.45-1-1-1h-.78a1.98 1.98 0 00-3.44 0H7c-.55 0-1 .45-1 1v2h7V2z","M16 2h-2v3H5V2H3c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z"],cloud:["M15 7c-.12 0-.24.03-.36.04C13.83 4.69 11.62 3 9 3 5.69 3 3 5.69 3 9c0 .05.01.09.01.14A3.98 3.98 0 000 13c0 2.21 1.79 4 4 4h11c2.76 0 5-2.24 5-5s-2.24-5-5-5z"],"cloud-download":["M15 4c-.12 0-.24.03-.36.04C13.83 1.69 11.62 0 9 0 5.69 0 3 2.69 3 6c0 .05.01.09.01.14A3.98 3.98 0 000 10c0 2.21 1.79 4 4 4h.78c.55-.61 1.34-1 2.22-1v-2c0-1.66 1.34-3 3-3s3 1.34 3 3v2c.88 0 1.66.38 2.2.98C17.87 13.87 20 11.69 20 9c0-2.76-2.24-5-5-5zm-2 11c-.28 0-.53.11-.71.29L11 16.59V11c0-.55-.45-1-1-1s-1 .45-1 1v5.59L7.71 15.3A.965.965 0 007 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0013 15z"],"cloud-upload":["M10.71 10.29c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 13.41V19c0 .55.45 1 1 1s1-.45 1-1v-5.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM15 4c-.12 0-.24.03-.36.04C13.83 1.69 11.62 0 9 0 5.69 0 3 2.69 3 6c0 .05.01.09.01.14A3.98 3.98 0 000 10c0 2.21 1.79 4 4 4 0-.83.34-1.58.88-2.12l3-3a2.993 2.993 0 014.24 0l3 3-.01.01c.52.52.85 1.23.87 2.02C18.28 13.44 20 11.42 20 9c0-2.76-2.24-5-5-5z"],code:["M6 6a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L2.41 10 5.7 6.71c.19-.18.3-.43.3-.71zm6-4c-.46 0-.83.31-.95.73l-4 14c-.02.09-.05.17-.05.27 0 .55.45 1 1 1 .46 0 .83-.31.95-.73l4-14c.02-.09.05-.17.05-.27 0-.55-.45-1-1-1zm7.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42l3.3 3.29-3.29 3.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"code-block":["M19 5h-2V3c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v2H9V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM8.71 15.29a1.003 1.003 0 01-1.42 1.42l-4-4C3.11 12.53 3 12.28 3 12s.11-.53.29-.71l4-4a1.003 1.003 0 011.42 1.42L5.41 12l3.3 3.29zm8-2.58l-4 4a1.003 1.003 0 01-1.42-1.42l3.3-3.29-3.29-3.29A.965.965 0 0111 8a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71s-.11.53-.29.71z"],cog:["M19 8h-2.31c-.14-.46-.33-.89-.56-1.3l1.7-1.7a.996.996 0 000-1.41l-1.41-1.41a.996.996 0 00-1.41 0l-1.7 1.7c-.41-.22-.84-.41-1.3-.55V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v2.33c-.48.14-.94.34-1.37.58L5 2.28a.972.972 0 00-1.36 0L2.28 3.64c-.37.38-.37.99 0 1.36L3.9 6.62c-.24.44-.44.89-.59 1.38H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2.31c.14.46.33.89.56 1.3L2.17 15a.996.996 0 000 1.41l1.41 1.41c.39.39 1.02.39 1.41 0l1.7-1.7c.41.22.84.41 1.3.55V19c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2.33c.48-.14.94-.35 1.37-.59L15 17.72c.37.37.98.37 1.36 0l1.36-1.36c.37-.37.37-.98 0-1.36l-1.62-1.62c.24-.43.45-.89.6-1.38H19c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-9 6c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"],"collapse-all":["M9.29 8.71c.18.18.43.29.71.29s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L10 6.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6zm1.42 2.58c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42l5.29-5.3 5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6z"],"column-layout":["M19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM5 17H2V3h3v14zm4 0H6V3h3v14zm9 0h-8V3h8v14z"],comment:["M19 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3v4a1.003 1.003 0 001.71.71l4.7-4.71H19c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 10c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"],comparison:["M6 8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm13-6h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 3h-5V3h5v2zM6 14H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zM6 2H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm4-2c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm9 14h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-5v-2h5v2zm0-9h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm0 3h-5V9h5v2z"],compass:["M15 10c0 .14-.03.28-.09.4l-3.99 8.98-.01.02a.991.991 0 01-1.82 0l-.01-.02-3.99-8.98c-.06-.12-.09-.26-.09-.4s.03-.28.09-.4L9.08.62 9.09.6a.991.991 0 011.82 0l.01.02 3.99 8.98c.06.12.09.26.09.4zm-5-6.54L7.09 10h5.81L10 3.46z"],compressed:["M19.89 6.56l-2.99-6h-.01C16.72.23 16.39 0 16 0H4c-.39 0-.72.23-.89.56H3.1l-3 6h.01C.05 6.69 0 6.84 0 7v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7c0-.16-.05-.31-.11-.44zM11 2h4.38l2 4H11V2zM4.62 2H9v4H2.62l2-4zM18 18H2V8h7v4.59L6.71 10.3A.965.965 0 006 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L11 12.59V8h7v10z"],confirm:["M9.71 5.29a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7a1.003 1.003 0 00-1.42-1.42L12 7.59l-2.29-2.3zm7.93 2.32c.23.75.36 1.56.36 2.39 0 4.42-3.58 8-8 8s-8-3.58-8-8a7.998 7.998 0 0111.8-7.04l1.46-1.46C13.73.56 11.93 0 10 0 4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-1.4-.29-2.73-.81-3.95l-1.55 1.56z"],console:["M19 19H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h18c.55 0 1 .45 1 1v16c0 .55-.45 1-1 1zM18 6H2v11h16V6zM4 8c.28 0 .53.11.71.29l2 2c.18.18.29.43.29.71s-.11.53-.29.71l-2 2a1.003 1.003 0 01-1.42-1.42L4.59 11l-1.3-1.29A1.003 1.003 0 014 8zm5 4h3c.55 0 1 .45 1 1s-.45 1-1 1H9c-.55 0-1-.45-1-1s.45-1 1-1z"],contrast:["M19 8h-1.26c-.19-.73-.48-1.42-.85-2.06l.94-.94a.996.996 0 000-1.41l-1.41-1.41a.996.996 0 00-1.41 0l-.94.94c-.65-.38-1.34-.67-2.07-.86V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v1.26c-.76.2-1.47.5-2.13.89L5 2.28a.972.972 0 00-1.36 0L2.28 3.64c-.37.38-.37.98 0 1.36l.87.87c-.39.66-.69 1.37-.89 2.13H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h1.26c.19.73.48 1.42.85 2.06l-.94.94a.996.996 0 000 1.41l1.41 1.41c.39.39 1.02.39 1.41 0l.94-.94c.64.38 1.33.66 2.06.85V19c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-1.26c.76-.2 1.47-.5 2.13-.89l.88.87c.37.37.98.37 1.36 0l1.36-1.36c.37-.38.37-.98 0-1.36l-.87-.87c.4-.65.7-1.37.89-2.13H19c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-9 7c-2.76 0-5-2.24-5-5s2.24-5 5-5v10z"],control:["M17 10h-7v7h7v-7zm0-7h-7v6h7V3zM9 3H3v14h6V3zm10-3H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V2h16v16z"],"credit-card":["M19 3H1c-.55 0-1 .45-1 1v2h20V4c0-.55-.45-1-1-1zM0 16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V8H0v8zm6.5-2h7c.28 0 .5.22.5.5s-.22.5-.5.5h-7c-.28 0-.5-.22-.5-.5s.22-.5.5-.5zm-4 0h2c.28 0 .5.22.5.5s-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5s.22-.5.5-.5z"],cross:["M11.41 10l4.29-4.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L10 8.59l-4.29-4.3a1.003 1.003 0 00-1.42 1.42L8.59 10 4.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4.29-4.3 4.29 4.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10z"],crown:["M2 8l4 2 4-5 4 5 4-2-1 7H3L2 8zm8-6a1 1 0 110 2 1 1 0 010-2zM1 5a1 1 0 110 2 1 1 0 010-2zm18 0a1 1 0 110 2 1 1 0 010-2zM3 16h14v2H3v-2z"],cube:["M1.953 4.481l7.41-4.02c.394-.215.88-.215 1.275 0l7.409 4.02L10 9.22 1.953 4.48zm-.817.68L9.5 10.085v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547zm17.728 0c.088.166.136.353.136.546v8.35c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281l8.364-4.926z"],"cube-add":["M17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2zm-3.969 4.435L10 9.22 1.953 4.48l7.41-4.02c.394-.215.88-.215 1.275 0l1.33.721A3.001 3.001 0 0013 7c0 .148.01.293.031.435zm.319.972A3 3 0 0019 7v7.057c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281l2.85-1.679zM1.136 5.16L9.5 10.086v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547z"],"cube-remove":["M11.968 1.182A3.001 3.001 0 0013 7h.77L10 9.22 1.953 4.48l7.41-4.02c.394-.215.88-.215 1.275 0l1.33.721zM19 7v7.057c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281L15.74 7H19zM1.136 5.16L9.5 10.086v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547zM13 3h6a1 1 0 010 2h-6a1 1 0 010-2z"],"curved-range-chart":["M19 16H3.02l2.14-1.74c2.25 1.7 7.33.46 11.83-2.99l-1.29-1.5c-3.56 2.74-7.31 4.03-8.93 3.19l10.55-8.57-.63-.78-10.59 8.6c-.64-1.64 1.46-4.91 5.09-7.7L9.9 3.01c-4.6 3.54-6.91 8.12-5.41 10.51L2 15.54V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],cut:["M16 2s.72-1.28 0-2l-5.29 6.25 1.28 1.54L16 2zm.08 10c-.55 0-1.07.12-1.54.32L4.31 0c-.7.72 0 2 0 2l4.45 6.56-3.19 3.77C5.09 12.12 4.56 12 4 12c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.65-.17-1.26-.45-1.8l2.54-3.67 2.49 3.67c-.27.54-.44 1.15-.44 1.8 0 2.21 1.76 4 3.92 4 2.17 0 3.92-1.79 3.92-4 .02-2.21-1.74-4-3.9-4zM4 18c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm12.08 0c-1.08 0-1.96-.9-1.96-2s.88-2 1.96-2 1.96.9 1.96 2-.88 2-1.96 2z"],cycle:["M16 10a4 4 0 110 8 4 4 0 010-8zM4 10a4 4 0 110 8 4 4 0 010-8zm7.299-5.543l.087.089 1.93 2.232 2.048.708a1 1 0 01.65 1.16l-.031.112a1 1 0 01-1.16.65l-.112-.031-2.302-.796a1 1 0 01-.337-.197l-.092-.094-1.387-1.603-1.891 1.982 2.046 2.274a1 1 0 01.25.547l.007.122v4.24a1 1 0 01-1.993.117l-.007-.117-.001-3.857-2.408-2.676a1 1 0 01-.063-1.26l.082-.099 3.29-3.45a1 1 0 011.394-.053zM16 12a2 2 0 100 4 2 2 0 000-4zM4 12a2 2 0 100 4 2 2 0 000-4zm9.5-10a1.5 1.5 0 110 3 1.5 1.5 0 010-3z"],dashboard:["M6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM4 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6-4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-5C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm6-9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-8 5c0 1.1.9 2 2 2s2-.9 2-2c0-.33-2-8-2-8s-2 7.67-2 8zm6-9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"],"data-lineage":["M1.053 0C.47 0 0 .471 0 1.053V4.21c0 .58.471 1.052 1.053 1.052h3.275a6.332 6.332 0 003.728 4.738 6.33 6.33 0 00-3.728 4.737l-3.275-.001C.47 14.737 0 15.208 0 15.789v3.158C0 19.53.471 20 1.053 20h7.435c.581 0 1.053-.471 1.053-1.053V15.79c0-.58-.472-1.052-1.053-1.052H5.406a5.293 5.293 0 015.195-4.21v2.105c0 .58.471 1.052 1.052 1.052h7.294c.582 0 1.053-.471 1.053-1.052V7.368c0-.58-.471-1.052-1.053-1.052h-7.294c-.581 0-1.052.471-1.052 1.052v2.106a5.293 5.293 0 01-5.194-4.21h3.081c.581 0 1.053-.472 1.053-1.053V1.053C9.54.47 9.069 0 8.488 0H1.053z"],database:["M2.01 5.1v5.4c0 1.38 3.58 2.5 8 2.5s8-1.12 8-2.5V5.1c-1.49 1.13-4.51 1.9-8 1.9-3.48 0-6.5-.77-8-1.9zm8 .9c4.42 0 8-1.12 8-2.5s-3.58-2.5-8-2.5-8 1.12-8 2.5S5.6 6 10.01 6zm-8 6.1v5.4c0 1.38 3.58 2.5 8 2.5s8-1.12 8-2.5v-5.4c-1.49 1.13-4.51 1.9-8 1.9-3.48 0-6.5-.77-8-1.9z"],delete:["M15 6a1.003 1.003 0 00-1.71-.71L10 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L8.59 10 5.3 13.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3.29-3.3 3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10l3.29-3.29c.19-.18.3-.43.3-.71zm-5-6C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"],delta:["M10 0L0 20h20L10 0zM9 6l6 12H3L9 6z"],"derive-column":["M7.1 8.2h-.99c.28-1.11.66-1.92 1.12-2.43.28-.32.56-.48.83-.48.05 0 .1.02.13.05.03.03.05.07.05.12 0 .04-.04.13-.11.25a.64.64 0 00-.12.35c0 .15.06.28.18.39.12.11.27.16.45.16.2 0 .36-.07.49-.2s.2-.31.2-.54c0-.26-.1-.47-.3-.63-.19-.16-.51-.24-.95-.24-.68 0-1.3.19-1.85.58-.56.38-1.09 1.02-1.59 1.91-.17.3-.34.5-.49.59-.15.08-.4.13-.74.12l-.23.77h.95l-1.39 5.24c-.23.86-.39 1.39-.47 1.59-.12.29-.3.54-.54.75-.1.08-.21.12-.35.12-.04 0-.07-.01-.1-.03l-.03-.04c0-.02.03-.07.1-.13.07-.07.1-.17.1-.31 0-.15-.05-.28-.16-.38-.11-.1-.27-.15-.47-.15-.25 0-.44.07-.59.2-.15.12-.23.28-.23.46 0 .19.09.36.27.5.19.14.47.21.86.21.61 0 1.16-.15 1.63-.46.48-.31.89-.78 1.25-1.43.35-.64.72-1.68 1.09-3.11l.8-3.03h.96l.24-.77zM19 0h-9c-.55 0-1 .45-1 1v3h2V2h7v16h-7v-2H9v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-8.79 13.49c.15.28.32.49.52.61.19.12.44.19.73.19.28 0 .57-.1.86-.3.38-.25.77-.69 1.17-1.31l-.25-.14c-.27.37-.48.6-.61.69-.09.06-.19.09-.31.09-.14 0-.28-.09-.42-.26-.23-.29-.54-1.09-.93-2.4.35-.59.64-.97.87-1.15.17-.13.35-.2.55-.2.07 0 .2.03.39.08s.36.08.5.08c.2 0 .37-.07.5-.2.15-.14.22-.31.22-.52 0-.22-.07-.4-.2-.53s-.33-.2-.58-.2c-.22 0-.43.05-.63.15-.2.1-.45.32-.75.67-.23.25-.56.7-1.01 1.33a6.52 6.52 0 00-.91-2.15l-2.39.39-.05.25c.18-.03.33-.05.45-.05.24 0 .43.1.59.3.25.31.59 1.24 1.02 2.8-.34.44-.58.73-.7.87-.21.22-.38.36-.52.43-.1.05-.22.08-.35.08-.1 0-.26-.05-.49-.16a1.01 1.01 0 00-.42-.11c-.23 0-.42.07-.57.22-.15.14-.23.33-.23.55 0 .21.07.38.21.51.14.13.33.2.56.2.23 0 .44-.05.64-.14.2-.09.45-.29.75-.59s.72-.78 1.25-1.43c.21.61.39 1.06.54 1.35z"],desktop:["M19 0H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h5.67l-.5 3H5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1h-1.17l-.5-3H19c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 13H2V2h16v11z"],diagnosis:["M4 2a1 1 0 01.117 1.993L4 4v5a2 2 0 001.85 1.995L6 11a2 2 0 001.995-1.85L8 9V4a1 1 0 01-.117-1.993L8 2h1a1 1 0 01.993.883L10 3v6a4.002 4.002 0 01-3 3.874V13a3 3 0 003 3 4 4 0 003.995-3.8L14 12V8.792a2.5 2.5 0 112 0V12a6 6 0 01-6 6 5 5 0 01-4.995-4.783L5 13v-.126A4.002 4.002 0 012.005 9.2L2 9V3a1 1 0 01.883-.993L3 2h1z"],"diagram-tree":["M19 10v5h-2v-4h-6v4H9v-4H3v4H1v-5a1 1 0 011-1h7V5h2v4h7a1 1 0 011 1zM1 16h2a1 1 0 011 1v2a1 1 0 01-1 1H1a1 1 0 01-1-1v-2a1 1 0 011-1zm16 0h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2a1 1 0 011-1zm-8 0h2a1 1 0 011 1v2a1 1 0 01-1 1H9a1 1 0 01-1-1v-2a1 1 0 011-1zM9 0h2a1 1 0 011 1v2a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1z"],"direction-left":["M20 3.02l-20 7 20 7-5-7z"],"direction-right":["M20 10.02l-20-7 5 7-5 7z"],disable:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM2 10c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L3.69 14.9A7.902 7.902 0 012 10zm8 8c-1.85 0-3.55-.63-4.9-1.69L16.31 5.1A7.902 7.902 0 0118 10c0 4.42-3.58 8-8 8z"],document:["M11.98 0h-8c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V6l-6-6zm4 18h-11V2h6v5h5v11z"],"document-open":["M8 15c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h2.59L1.3 16.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 12.41V15zm5-15H5c-.55 0-1 .45-1 1v6h2V2h6v5h5v11H6v-.76L4.04 19.2c.1.45.48.8.96.8h13c.55 0 1-.45 1-1V6l-6-6z"],"document-share":["M14.09 10.09c-.31.31-.67.57-1.09.72V18H2V2h6v5h1.18c.15-.42.39-.8.7-1.11v-.01l2.45-2.45c-.42-.29-.78-.65-1.01-1.11L9 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V9.24l-.88.88-.03-.03zM19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],dollar:["M15.57 11.19c-.27-.51-.63-.93-1.07-1.26-.44-.33-.95-.6-1.51-.79-.56-.2-1.14-.36-1.72-.5-.6-.14-1.19-.26-1.75-.38-.57-.13-1.07-.27-1.51-.44-.44-.17-.8-.38-1.07-.63s-.41-.59-.41-1c0-.33.09-.6.28-.81.19-.21.42-.36.69-.47.27-.11.57-.18.88-.22.31-.04.58-.06.8-.06.71 0 1.35.14 1.9.41.55.27.91.81 1.06 1.62h3.36c-.09-.84-.32-1.56-.69-2.16-.37-.6-.83-1.08-1.38-1.45-.56-.37-1.18-.64-1.86-.81-.19-.05-.38-.07-.57-.1V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v1.1c-.22.03-.43.05-.66.1-.73.13-1.39.37-1.98.71-.6.34-1.09.8-1.47 1.35-.39.56-.58 1.25-.58 2.08 0 .76.13 1.41.4 1.93.26.52.62.95 1.06 1.28.44.33.94.6 1.5.79.55.2 1.13.36 1.74.5.58.14 1.16.26 1.72.38s1.07.26 1.51.43c.44.17.8.39 1.09.66.28.27.43.63.45 1.06.02.43-.08.78-.3 1.04-.22.26-.49.47-.83.6-.34.14-.7.23-1.09.28-.39.05-.73.07-1.03.07-.87 0-1.61-.2-2.23-.59-.62-.39-.98-1.08-1.07-2.06H3c.02.9.19 1.68.52 2.34.33.66.78 1.21 1.35 1.65.57.44 1.25.77 2.03.98.35.1.71.16 1.08.21V19c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1.13c.25-.04.5-.07.76-.13.77-.18 1.47-.46 2.1-.85.63-.39 1.14-.9 1.54-1.53.4-.63.59-1.39.59-2.29.01-.75-.13-1.37-.4-1.88z"],dot:["M10 6a4 4 0 100 8 4 4 0 100-8z"],"double-caret-horizontal":["M8 4c-.24 0-.46.1-.63.24l-.01-.01-6 5 .01.01c-.22.19-.37.45-.37.76s.15.57.37.76l-.01.01 6 5 .01-.01c.17.14.39.24.63.24.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm11 6c0-.31-.15-.57-.37-.76l.01-.01-6-5-.01.01C12.46 4.1 12.24 4 12 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1 .24 0 .46-.1.63-.24l.01.01 6-5-.01-.01c.22-.19.37-.45.37-.76z"],"double-caret-vertical":["M5 9h10c.55 0 1-.45 1-1 0-.24-.1-.46-.24-.63l.01-.01-5-6-.01.01C10.57 1.15 10.31 1 10 1s-.57.15-.76.37l-.01-.01-5 6 .01.01C4.1 7.54 4 7.76 4 8c0 .55.45 1 1 1zm10 2H5c-.55 0-1 .45-1 1 0 .24.1.46.24.63l-.01.01 5 6 .01-.01c.19.22.45.37.76.37s.57-.15.76-.37l.01.01 5-6-.01-.01c.14-.17.24-.39.24-.63 0-.55-.45-1-1-1z"],"double-chevron-down":["M9.29 10.71c.18.18.43.29.71.29s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L10 8.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6zM16 9c-.28 0-.53.11-.71.29L10 14.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 9z"],"double-chevron-left":["M5.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L5.41 10zm6 0l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L11.41 10z"],"double-chevron-right":["M11 10c0-.28-.11-.53-.29-.71l-6-6a1.003 1.003 0 00-1.42 1.42L8.59 10 3.3 15.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71zm5.71-.71l-6-6a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"double-chevron-up":["M4 11c.28 0 .53-.11.71-.29L10 5.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6A.997.997 0 0010 3c-.28 0-.53.11-.71.29l-6 6A1.003 1.003 0 004 11zm6.71-1.71A.997.997 0 0010 9c-.28 0-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42l5.29-5.3 5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6z"],"doughnut-chart":["M16 10c0 3.31-2.69 6-6 6s-6-2.69-6-6 2.69-6 6-6V0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10h-4zm-.09-1h4.04C19.48 4.28 15.72.52 11 .05V4.1A5.98 5.98 0 0115.91 9z"],download:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm4.71 11.71l-4 4c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-4-4a1.003 1.003 0 011.42-1.42L9 12.59V5c0-.55.45-1 1-1s1 .45 1 1v7.59l2.29-2.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71z"],"drag-handle-horizontal":["M7.5 11c-.83 0-1.5.67-1.5 1.5S6.67 14 7.5 14 9 13.33 9 12.5 8.33 11 7.5 11zm-5-5C1.67 6 1 6.67 1 7.5S1.67 9 2.5 9 4 8.33 4 7.5 3.33 6 2.5 6zm0 5c-.83 0-1.5.67-1.5 1.5S1.67 14 2.5 14 4 13.33 4 12.5 3.33 11 2.5 11zm15-2c.83 0 1.5-.67 1.5-1.5S18.33 6 17.5 6 16 6.67 16 7.5 16.67 9 17.5 9zm-5 2c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm5 0c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm-10-5C6.67 6 6 6.67 6 7.5S6.67 9 7.5 9 9 8.33 9 7.5 8.33 6 7.5 6zm5 0c-.83 0-1.5.67-1.5 1.5S11.67 9 12.5 9 14 8.33 14 7.5 13.33 6 12.5 6z"],"drag-handle-vertical":["M7.5 6C6.67 6 6 6.67 6 7.5S6.67 9 7.5 9 9 8.33 9 7.5 8.33 6 7.5 6zm0 5c-.83 0-1.5.67-1.5 1.5S6.67 14 7.5 14 9 13.33 9 12.5 8.33 11 7.5 11zm0 5c-.83 0-1.5.67-1.5 1.5S6.67 19 7.5 19 9 18.33 9 17.5 8.33 16 7.5 16zm5-12c.83 0 1.5-.67 1.5-1.5S13.33 1 12.5 1 11 1.67 11 2.5 11.67 4 12.5 4zm-5-3C6.67 1 6 1.67 6 2.5S6.67 4 7.5 4 9 3.33 9 2.5 8.33 1 7.5 1zm5 10c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-10c-.83 0-1.5.67-1.5 1.5S11.67 9 12.5 9 14 8.33 14 7.5 13.33 6 12.5 6z"],draw:["M17.7 12.7c0-.1 0-.2-.1-.3l-2-7c-.1-.3-.3-.6-.6-.7L1.8 0l-.6.5L7.7 7c.3-.2.6-.3 1-.3 1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2c0-.4.1-.7.3-1L.5 1.2l-.5.6L4.7 15c.1.3.4.5.7.6l7 2c.1 0 .2.1.3.1.3 0 .5-.1.7-.3l4-4c.2-.2.3-.5.3-.7zm1 1c-.3 0-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7 0 .5.4 1 1 1 .3 0 .5-.1.7-.3l4-4c.2-.2.3-.4.3-.7 0-.6-.5-1-1-1z"],"drawer-left":["M9 0a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h8zM8 2H2v16h6V2zm2 7h6.59L14.3 6.71A.965.965 0 0114 6a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10V9z"],"drawer-left-filled":["M1 0h8a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1zm9 9h6.59L14.3 6.71A.965.965 0 0114 6a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10V9z"],"drawer-right":["M19 0a1 1 0 011 1v18a1 1 0 01-1 1h-8a1 1 0 01-1-1V1a1 1 0 011-1h8zm-1 2h-6v16h6V2zm-8 7H3.41L5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 11H10V9z"],"drawer-right-filled":["M11 0h8a1 1 0 011 1v18a1 1 0 01-1 1h-8a1 1 0 01-1-1V1a1 1 0 011-1zm-1 9H3.41L5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 11H10V9z"],"drive-time":["M20.01 7.7c0-.63-.5-1.14-1.1-1.14h-1.32l-.95-2.57c-.24-.64-.95-1.31-1.59-1.5 0 0-1.65-.49-5.05-.49s-5.04.49-5.04.49c-.63.19-1.35.86-1.59 1.5l-.95 2.57H1.1C.5 6.56 0 7.07 0 7.7c0 .63.5 1.14 1.1 1.14h.47l-.34.91c-.24.64-.43 1.72-.43 2.4v5.39c0 .8.63 1.45 1.4 1.45.77 0 1.4-.65 1.4-1.45v-.83h12.8v.83c0 .8.63 1.45 1.4 1.45s1.4-.65 1.4-1.45v-5.39c0-.68-.19-1.77-.43-2.4l-.34-.91h.47c.61 0 1.11-.51 1.11-1.14zm-16.47.34l1.12-3.16c.08-.22.32-.39.54-.39h9.6c.22 0 .46.17.54.39l1.12 3.16c.08.21-.04.39-.26.39H3.8c-.22-.01-.34-.18-.26-.39zm.96 4.94c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.68 1.5 1.5c0 .83-.67 1.5-1.5 1.5zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"],duplicate:["M15 4H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 14H2V6h12v12zm5-18H5c-.55 0-1 .45-1 1v2h2V2h12v12h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],edit:["M4.59 12.59l2.83 2.83 7.65-7.65-2.83-2.83-7.65 7.65zM2 18l4.41-1.59-2.81-2.79L2 18zM16 2c-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.83 1.65-1.65A2.006 2.006 0 0016 2z"],eject:["M4 12h12c.55 0 1-.45 1-1 0-.25-.1-.47-.25-.64l.01-.01-6-7-.01.01C10.57 3.14 10.3 3 10 3s-.57.14-.75.36l-.01-.01-6 7 .01.01c-.15.17-.25.39-.25.64 0 .55.45 1 1 1zm12 1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z"],endorsed:["M19.83 9.38L18.81 7.6V5.62c0-.45-.23-.85-.61-1.08l-1.71-1-1.02-1.76a1.25 1.25 0 00-1.08-.61h-2.03l-1.74-1c-.38-.23-.87-.23-1.25 0l-1.74 1H5.65c-.44 0-.85.23-1.08.61L3.58 3.5l-1.8 1.04c-.38.24-.62.64-.62 1.08v2.06L.17 9.4c-.11.19-.17.4-.17.61s.06.42.17.61l.99 1.72v2.06c0 .45.23.85.61 1.08l1.78 1.02.99 1.72c.23.38.63.61 1.08.61h1.99l1.74 1c.19.11.41.17.62.17.21 0 .42-.06.61-.17l1.74-1h2.03c.44 0 .85-.23 1.08-.61l1.02-1.76 1.71-1c.38-.23.61-.64.61-1.08v-1.97l1.02-1.78c.27-.38.27-.85.04-1.25zm-5.08-.71l-5.01 5.01c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.29l-3.01-3.01a1.003 1.003 0 011.42-1.42l2.3 2.3 4.31-4.3a1.003 1.003 0 011.71.71c0 .28-.12.53-.3.71z"],envelope:["M0 4.01v11.91l6.27-6.27L0 4.01zm18.91-1.03H1.09L10 10.97l8.91-7.99zm-5.18 6.66L20 15.92V4.01l-6.27 5.63zm-3.23 2.9c-.13.12-.31.19-.5.19s-.37-.07-.5-.19l-2.11-1.89-6.33 6.33h17.88l-6.33-6.33-2.11 1.89z"],equals:["M4 7h12a1 1 0 010 2H4a1 1 0 110-2zm0 4h12a1 1 0 010 2H4a1 1 0 010-2z"],eraser:["M18.71 8.43c.39-.4.39-1.05 0-1.45l-5.53-5.72a.967.967 0 00-1.4 0L1.29 12.1c-.39.4-.39 1.05 0 1.45l4.25 4.39 2.13 2.05h9.27c.02 0 .03.01.05.01.55 0 1-.45 1-1s-.45-1-1-1H9.46l.05-.05h.01l.81-.84 8.38-8.68zM7.52 17.94l-4.95-5.12 4.46-4.61 4.95 5.12-4.46 4.61z"],error:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm1 16H9v-2h2v2zm0-3H9V4h2v9z"],euro:["M8.89 4.47c.56-.31 1.23-.47 2.03-.47.44 0 .85.07 1.25.22.4.14.76.35 1.07.6.17.14.33.3.47.47l2.32-2.32c-.16-.15-.3-.32-.47-.46-.62-.49-1.33-.87-2.12-1.13-.8-.25-1.64-.38-2.52-.38-1.24 0-2.35.22-3.33.66-.99.44-1.82 1.05-2.49 1.82-.68.78-1.2 1.68-1.56 2.72-.09.26-.13.54-.2.8H2c-.55 0-1 .45-1 1s.45 1 1 1h1.04c-.01.2-.04.38-.04.58 0 .15.03.28.03.42H2c-.55 0-1 .45-1 1s.45 1 1 1h1.31c.07.3.13.6.23.89.36 1.02.88 1.92 1.56 2.67.68.76 1.51 1.35 2.49 1.79.98.43 2.09.65 3.33.65.99 0 1.9-.15 2.73-.46.83-.3 1.55-.74 2.17-1.32.03-.03.05-.06.08-.09l-2.41-2.15c-.01.01-.02.02-.02.03-.61.67-1.46 1-2.54 1-.8 0-1.47-.16-2.03-.47-.56-.31-1.01-.72-1.35-1.24-.28-.38-.47-.83-.63-1.3H12c.55 0 1-.45 1-1s-.45-1-1-1H6.56c0-.14-.02-.28-.02-.42 0-.2.02-.39.03-.58H13c.55 0 1-.45 1-1s-.45-1-1-1H6.94c.15-.46.34-.9.59-1.28.35-.52.8-.94 1.36-1.25zM18 11.38v0z"],exchange:["M2.5 8a2.5 2.5 0 000 5 2.5 2.5 0 000-5zm10.35 3.15a.495.495 0 10-.7.7L13.3 13H5.5c-.28 0-.5.22-.5.5s.22.5.5.5h7.79l-1.15 1.15c-.08.09-.14.21-.14.35a.495.495 0 00.85.35l2-2c.09-.09.15-.21.15-.35s-.06-.26-.15-.35l-2-2zM17.5 8a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM7.15 9.85a.495.495 0 10.7-.7L6.71 8h7.79c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H6.71l1.15-1.15c.08-.09.14-.21.14-.35a.495.495 0 00-.85-.35l-2 2c-.09.09-.15.21-.15.35s.06.26.15.35l2 2z"],"exclude-row":["M1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zM0 13a1.003 1.003 0 001.71.71L4 11.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L5.41 10 7.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L4 8.59l-2.29-2.3A1.003 1.003 0 00.29 7.71L2.59 10 .3 12.29c-.19.18-.3.43-.3.71zm18-5h-7c-1.1 0-2 .9-2 2s.9 2 2 2h7c1.1 0 2-.9 2-2s-.9-2-2-2zm1 9H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],"expand-all":["M4 9c.28 0 .53-.11.71-.29L10 3.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6C10.53 1.11 10.28 1 10 1s-.53.11-.71.29l-6 6A1.003 1.003 0 004 9zm12 2c-.28 0-.53.11-.71.29L10 16.59 4.71 11.3A.965.965 0 004 11a1.003 1.003 0 00-.71 1.71l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 11z"],export:["M5 7c.28 0 .53-.11.71-.29L9 3.41V15c0 .55.45 1 1 1s1-.45 1-1V3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-5-5C10.53.11 10.28 0 10 0s-.53.11-.71.29l-5 5A1.003 1.003 0 005 7zm14 7c-.55 0-1 .45-1 1v3H2v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z"],"eye-off":["M20 9.96v-.03-.01-.02-.02a.794.794 0 00-.21-.43c-.55-.69-1.19-1.3-1.85-1.87l-3.93 2.62a3.966 3.966 0 01-3.96 3.77c-.47 0-.91-.1-1.33-.24l-2.24 1.49c.52.21 1.05.39 1.6.51 1.21.27 2.43.28 3.64.05 1.11-.21 2.17-.64 3.17-1.18 1.56-.84 2.99-2 4.23-3.3.23-.24.46-.49.67-.75a.87.87 0 00.21-.43v-.02-.02-.01-.03V10v-.04zm-.46-5.14c.27-.18.46-.47.46-.82 0-.55-.45-1-1-1-.21 0-.39.08-.54.18l-.01-.02L15 5.46c-.95-.53-1.95-.96-3.01-1.2a9.158 9.158 0 00-3.65-.04c-1.11.21-2.17.64-3.17 1.18-1.56.84-2.99 2-4.23 3.3-.23.24-.46.48-.67.75-.27.34-.27.76 0 1.1.64.79 1.39 1.5 2.16 2.15.26.21.52.41.79.61L.44 15.16l.01.02A1 1 0 000 16c0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 18-12-.01-.02zm-8.67 3.4c-.25-.12-.53-.2-.83-.2-1.1 0-1.99.89-1.99 1.99 0 .03.02.06.02.09l-1.78 1.19c-.14-.4-.22-.83-.22-1.28 0-2.19 1.78-3.97 3.98-3.97 1.01 0 1.91.38 2.61 1l-1.79 1.18z"],"eye-on":["M13.3 8.71c.18.18.43.29.71.29s.53-.11.71-.29l4.99-5a1.003 1.003 0 00-1.42-1.42L14 6.58l-2.29-2.29a.956.956 0 00-.7-.29 1.003 1.003 0 00-.71 1.71l3 3zM20 9.96v-.03-.01-.02-.02a.823.823 0 00-.21-.44c-.44-.55-.94-1.05-1.46-1.52l-2.2 2.2c-.55.54-1.3.88-2.12.88-.05 0-.09-.01-.14-.01a3.978 3.978 0 01-3.86 3.02 4.007 4.007 0 01-1.66-7.65A2.97 2.97 0 018.02 5c0-.28.05-.54.12-.8-1.05.22-2.07.64-3.02 1.15-1.57.85-3 2.02-4.24 3.33-.23.25-.46.5-.67.76-.28.35-.28.77 0 1.12.64.8 1.4 1.52 2.17 2.17 1.66 1.41 3.56 2.58 5.66 3.06 1.21.27 2.43.29 3.65.05 1.11-.21 2.18-.65 3.18-1.19 1.57-.85 3-2.02 4.24-3.33.23-.24.46-.49.67-.76.11-.12.18-.27.21-.44v-.02-.02-.01-.03V10c.01-.01.01-.03.01-.04zm-9.99 2.05c1.03 0 1.87-.79 1.98-1.8l-.09-.09-.01.01-2.1-2.11c-1 .11-1.77.95-1.77 1.98-.01 1.11.89 2.01 1.99 2.01z"],"eye-open":["M10.01 7.984A2.008 2.008 0 008.012 9.99c0 1.103.9 2.006 1.998 2.006a2.008 2.008 0 001.998-2.006c0-1.103-.9-2.006-1.998-2.006zM20 9.96v-.03-.01-.02-.02a.827.827 0 00-.21-.442c-.64-.802-1.398-1.514-2.168-2.166-1.658-1.404-3.566-2.587-5.664-3.058a8.982 8.982 0 00-3.656-.05c-1.11.2-2.178.641-3.177 1.183-1.569.852-2.997 2.016-4.246 3.33-.23.25-.46.49-.67.761-.279.351-.279.773 0 1.124.64.802 1.4 1.514 2.169 2.166 1.658 1.404 3.566 2.577 5.664 3.058 1.209.271 2.438.281 3.656.05 1.11-.21 2.178-.651 3.177-1.193 1.569-.852 2.997-2.016 4.246-3.33.23-.24.46-.49.67-.751.11-.12.179-.271.209-.442v-.02-.02-.01-.03V10v-.04zM10.01 14A4.003 4.003 0 016.014 9.99a4.003 4.003 0 013.996-4.011 4.003 4.003 0 013.996 4.011 4.003 4.003 0 01-3.996 4.011z"],"fast-backward":["M18 3c-.23 0-.42.09-.59.21l-.01-.01L11 8V4c0-.55-.45-1-1-1-.23 0-.42.09-.59.21L9.4 3.2l-8 6 .01.01C1.17 9.4 1 9.67 1 10s.17.6.41.79l-.01.01 8 6 .01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1v-4l6.4 4.8.01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"fast-forward":["M19 10c0-.33-.17-.6-.41-.79l.01-.01-8-6-.01.01C10.42 3.09 10.23 3 10 3c-.55 0-1 .45-1 1v4L2.6 3.2l-.01.01C2.42 3.09 2.23 3 2 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01L9 12v4c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01 8-6-.01-.01c.24-.19.41-.46.41-.79z"],feed:["M2.5 15a2.5 2.5 0 000 5 2.5 2.5 0 000-5zm.5-5c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5 2.24 5 5 0 .55.45 1 1 1s1-.45 1-1c0-3.87-3.13-7-7-7zM3 0c-.55 0-1 .45-1 1s.45 1 1 1c8.28 0 15 6.72 15 15 0 .55.45 1 1 1s1-.45 1-1C20 7.61 12.39 0 3 0zm0 5c-.55 0-1 .45-1 1s.45 1 1 1c5.52 0 10 4.48 10 10 0 .55.45 1 1 1s1-.45 1-1C15 10.37 9.63 5 3 5z"],"feed-subscribed":["M2.5 15a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM3 2c1.76 0 3.44.31 5.01.87.03-.71.31-1.35.75-1.85C6.96.37 5.03 0 3 0c-.55 0-1 .45-1 1s.45 1 1 1zm10.32 4.67a.99.99 0 001.4 0l4.98-4.98c.19-.17.3-.42.3-.7 0-.55-.45-1-1-1a.99.99 0 00-.7.29l-4.27 4.27-2.28-2.28a.99.99 0 00-.7-.29c-.55 0-.99.45-.99 1 0 .28.11.52.29.7l2.97 2.99zM3 10c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5 2.24 5 5 0 .55.45 1 1 1s1-.45 1-1c0-3.87-3.13-7-7-7zm13.94-2.69l-.82.82-.02-.02c-.2.2-.42.37-.67.51A14.8 14.8 0 0118 17c0 .55.45 1 1 1s1-.45 1-1c0-3.61-1.14-6.94-3.06-9.69zM3 5c-.55 0-1 .45-1 1s.45 1 1 1c5.52 0 10 4.48 10 10 0 .55.45 1 1 1s1-.45 1-1C15 10.37 9.63 5 3 5z"],film:["M19 2h-5v3H6V2H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h5v-3h8v3h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM4 17H2v-2h2v2zm0-3H2v-2h2v2zm0-3H2V9h2v2zm0-3H2V6h2v2zm0-3H2V3h2v2zm10 8H6V7h8v6zm4 4h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm0-3h-2V6h2v2zm0-3h-2V3h2v2z"],filter:["M18 1H2a1.003 1.003 0 00-.71 1.71L7 8.41V18a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71V8.41l5.71-5.71c.18-.17.29-.42.29-.7 0-.55-.45-1-1-1z"],"filter-keep":["M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm4 11c-.28 0-.53.11-.71.29L15 16.59l-1.29-1.29A.965.965 0 0013 15a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0019 13z"],"filter-list":["M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm-4 8c0 .55.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7c-.55 0-1 .45-1 1zm8 7h-7c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0-4h-7c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z"],"filter-open":["M15 2c0 .28-.11.53-.29.7L10 7.41V13c0 .28-.11.53-.29.71l-3 3A1.003 1.003 0 015 16V7.41L.29 2.71A1.003 1.003 0 011 1h13c.55 0 1 .45 1 1zm4.707 11.293a1 1 0 010 1.414l-4 4c-.63.63-1.707.184-1.707-.707v-8c0-.89 1.077-1.337 1.707-.707l4 4z"],"filter-remove":["M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm2.91 13.5l1.79-1.79c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-1.79 1.79-1.79-1.79a1.003 1.003 0 00-1.42 1.42l1.79 1.79-1.79 1.79a1.003 1.003 0 001.42 1.42l1.79-1.79 1.79 1.79a1.003 1.003 0 001.42-1.42l-1.8-1.79z"],flag:["M3 3c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1zm0-3c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm2 4.08v8.28c3.01-2.41 8.67 2.64 13 0V4.08C13.61 7.14 8.01 1 5 4.08z"],flame:["M11.622 0c0 1.71.49 3.077 1.472 4.103C16.364 6.496 18 9.23 18 12.308c0 3.418-1.962 5.983-5.887 7.692 2.887-3 2.453-4.23-.49-8C8.5 13.5 9 14.5 9.5 16.5c-1.048 0-2 0-2.5-.5 0 .684 1.197 2.5 1.952 4-3.924-1.026-8.123-7.18-6.651-7.692.981-.342 2.126-.171 3.434.513C4.1 6.667 6.062 2.393 11.622 0z"],flash:["M4.96 6.37a1.003 1.003 0 001.42-1.42l-2-2a1.07 1.07 0 00-.71-.28 1.003 1.003 0 00-.71 1.71l2 1.99zm9.37.3c.28 0 .53-.11.71-.29l2-2a1.003 1.003 0 00-1.42-1.42l-2 2a1.003 1.003 0 00.71 1.71zM10 5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S9 .45 9 1v3c0 .55.45 1 1 1zm-5 5c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1zm14-1h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm-9-3c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm5.04 1.63a1.003 1.003 0 00-1.42 1.42l2 2a1.003 1.003 0 001.42-1.42l-2-2zM10 15c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1s1-.45 1-1v-3c0-.55-.45-1-1-1zm-4.33-1.67c-.28 0-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l2-2a1.003 1.003 0 00-.71-1.71z"],"floppy-disk":["M14 1h-3v5h3V1zm5.71 2.29l-3-3A.997.997 0 0016 0h-1v7H5V0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V4c0-.28-.11-.53-.29-.71zM17 19H3v-8c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v8z"],"flow-branch":["M14.425 7.953a3.98 3.98 0 01.562 2.045 3.98 3.98 0 01-.583 2.08L18 15.671V12.98c0-.248.097-.496.29-.689.379-.379 1.047-.38 1.426 0a.94.94 0 01.283.696l-.001 5.049a.957.957 0 01-.276.69.955.955 0 01-.69.273h-5.059a.971.971 0 01-.689-.289 1.026 1.026 0 010-1.417.972.972 0 01.69-.29h2.702l-3.634-3.573a3.998 3.998 0 01-5.924-2.431H1a1 1 0 010-2h6.12a3.998 3.998 0 015.96-2.409L16.665 3l-2.694-.001a.972.972 0 01-.689-.29 1.035 1.035 0 010-1.425.94.94 0 01.696-.283l5.05.001c.248 0 .497.083.69.276a.954.954 0 01.272.69l.001 5.052a.971.971 0 01-.29.689 1.028 1.028 0 01-1.419 0 .972.972 0 01-.29-.69V4.323l-3.567 3.63z"],"flow-end":["M12 9.919a3.998 3.998 0 014-3.92c2.21 0 4 1.79 4 3.997a3.998 3.998 0 01-4 3.996 3.998 3.998 0 01-4-3.916.967.967 0 01-.28.612L7.685 14.71a.958.958 0 01-.686.285c-.536 0-.994-.461-.994-.997 0-.273.107-.528.283-.704l2.379-2.302H.98c-.537 0-.976-.46-.976-.996s.44-.992.976-.992h7.676L6.287 6.687a.957.957 0 01-.283-.686c0-.536.458-.996.994-.996.274 0 .51.1.686.285l4.027 4.024c.159.158.27.365.29.605z"],"flow-linear":["M5.125 10.997H.976C.439 10.997 0 10.537 0 10c0-.536.44-.993.976-.993h4.148a4.002 4.002 0 017.752 0h3.776L14.293 6.69a.962.962 0 01-.285-.687c0-.537.46-1.001.996-1.001a.96.96 0 01.698.3l4.005 4.015c.176.176.293.41.293.683a.972.972 0 01-.283.693L15.702 14.7a.997.997 0 01-.698.297c-.537 0-.996-.453-.996-.99 0-.273.107-.517.283-.692l2.371-2.318h-3.787a4.002 4.002 0 01-7.75 0z"],"flow-review":["M6.13 9.004A4.005 4.005 0 0110.012 6c1.87 0 3.44 1.278 3.881 3.005h2.768l-2.354-2.317a.97.97 0 01-.283-.691c0-.536.462-.995 1-.995.273 0 .517.107.693.283l4 4.041a.97.97 0 01.284.692.956.956 0 01-.293.682l-3.991 3.997a.944.944 0 01-.694.292c-.537 0-1-.46-1-.997a.97.97 0 01.284-.692l2.345-2.29h-2.765a4.005 4.005 0 01-3.875 2.981 4.005 4.005 0 01-3.874-2.981H3.349l2.376 2.308a.97.97 0 01.283.691 1 1 0 01-.994.983.989.989 0 01-.713-.291L.293 10.699A.956.956 0 010 10.017a.97.97 0 01.283-.692l4.03-4.037a.996.996 0 01.701-.283c.537 0 .994.464.994 1a.97.97 0 01-.283.691L3.34 9.004h2.79z"],"flow-review-branch":["M13.04 13.424c-.6.36-1.302.568-2.052.568a4 4 0 01-3.868-2.999H3.342l2.372 2.31c.176.176.283.42.283.694 0 .537-.452.998-.988.998a.935.935 0 01-.691-.289L.292 10.683A.96.96 0 010 9.999c0-.274.107-.518.283-.694l4.035-4.04a.973.973 0 01.691-.288c.536 0 .988.47.988 1.007a.975.975 0 01-.283.694L3.332 8.984h3.786a4 4 0 013.87-3.006c.771 0 1.492.22 2.102.599l3.565-3.57-2.538-.003a.974.974 0 01-.69-.29c-.38-.38-.38-1.052-.002-1.431A.94.94 0 0114.122 1l4.896.005a.96.96 0 01.69.277c.193.193.27.442.27.69l.005 4.9a.971.971 0 01-.289.69 1.023 1.023 0 01-1.416 0 .975.975 0 01-.29-.691l-.003-2.54-3.554 3.62c.351.596.553 1.291.553 2.034 0 .763-.213 1.477-.583 2.084l3.595 3.595.003-2.54c0-.249.097-.497.29-.69.38-.38 1.05-.381 1.429-.002a.94.94 0 01.282.697l-.005 4.9a.927.927 0 01-.277.675.974.974 0 01-.69.291L13.974 19a.97.97 0 01-.69-.29 1.03 1.03 0 01.002-1.42.974.974 0 01.69-.29l2.696-.003-3.632-3.573z"],flows:["M17.5 7.93a2.5 2.5 0 00-2.45 2h-2.3l-4.01-4-.75.75 3.26 3.25h-6.3a2.5 2.5 0 100 1h6.3l-3.26 3.25.75.75 4.01-4h2.3a2.5 2.5 0 102.45-3z"],"folder-close":["M0 17c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7H0v10zM19 4H9.41l-1.7-1.71A.997.997 0 007 2H1c-.55 0-1 .45-1 1v3h20V5c0-.55-.45-1-1-1z"],"folder-new":["M12.994 7c0 1.655 1.344 3 2.998 3a3.002 3.002 0 002.999-3H20v10c0 .55-.45 1-1 1H1.01c-.55 0-1-.45-1-1V7h12.984zM10.76 6H0V3c0-.55.45-1 1-1h3.998c.28 0 .53.11.71.29L7.415 4h2.579c0 .768.29 1.469.765 2zm8.23-3c.55 0 1 .45 1 1s-.45 1-1 1h-1.998v2c0 .55-.45 1-1 1s-1-.45-1-1V5h-1.998c-.55 0-1-.45-1-1s.45-1 1-1h1.999V1c0-.55.45-1 .999-1 .55 0 1 .45 1 1v2h1.999z"],"folder-open":["M20 9c0-.55-.45-1-1-1H5c-.43 0-.79.27-.93.65h-.01l-3 8h.01c-.04.11-.07.23-.07.35 0 .55.45 1 1 1h14c.43 0 .79-.27.93-.65h.01l3-8h-.01c.04-.11.07-.23.07-.35zM3.07 7.63C3.22 7.26 3.58 7 4 7h14V5c0-.55-.45-1-1-1H8.41l-1.7-1.71A.997.997 0 006 2H1c-.55 0-1 .45-1 1v12.31l3.07-7.68z"],"folder-shared":["M11 4H9.41l-1.7-1.71A.997.997 0 007 2H1c-.55 0-1 .45-1 1v3h11.78C11.3 5.47 11 4.77 11 4zm8-1h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L12.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1zm-2.46 7.7l-1.42 1.42a2.996 2.996 0 11-4.24-4.24l.88-.88H0v10c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-5.18c-.31.11-.65.18-1 .18-1.02 0-1.92-.52-2.46-1.3z"],"folder-shared-open":["M3.07 7.63C3.22 7.26 3.58 7 4 7h7.76l.54-.54A2.97 2.97 0 0111 4H8.41l-1.7-1.71A.997.997 0 006 2H1c-.55 0-1 .45-1 1v12.31l3.07-7.68zm13.47 3.07l-1.42 1.42A2.996 2.996 0 0110 10c0-.77.3-1.47.78-2H5c-.43 0-.79.27-.93.65h-.01l-3 8h.01c-.04.11-.07.23-.07.35 0 .55.45 1 1 1h14c.43 0 .79-.27.93-.65h.01l2.01-5.36c-1-.01-1.88-.52-2.41-1.29zM19 3h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L12.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z"],follower:["M11.54 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.69 3.69 0 00-1.29-1.86C9.69 4.25 8.8 4 8.01 4c-.8 0-1.69.25-2.32.73-.61.47-1.06 1.13-1.28 1.86-.05.17-.09.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.44.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59-1.48.65-3.71 1.35-4.16 2.4C-.16 19.38.02 20 .02 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.68-1.75-4.16-2.41zm8.15-12.63l-3-3a.956.956 0 00-.7-.29 1.003 1.003 0 00-.71 1.71L16.58 3H13c-.55 0-1 .45-1 1s.45 1 1 1h3.58l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.3-.71z"],following:["M11.55 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.69 3.69 0 00-1.29-1.86C9.7 4.25 8.81 4 8.02 4c-.79 0-1.68.25-2.31.73-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.44.32-.48.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59C3 16.56.77 17.26.32 18.31-.15 19.38.04 20 .04 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.69-1.75-4.17-2.41zM19 3h-3.58l1.29-1.29A1.003 1.003 0 0015.29.29l-3 3c-.17.18-.28.43-.28.71 0 .28.11.53.29.71l3 3c.18.18.43.29.7.29a1.003 1.003 0 00.71-1.71L15.42 5H19c.55 0 1-.45 1-1s-.45-1-1-1z"],font:["M17.93 18.64l-7-18C10.78.27 10.42 0 10 0s-.78.27-.93.64l-7 18c-.04.11-.07.23-.07.36 0 .55.45 1 1 1 .42 0 .78-.27.93-.64L6.41 13h7.19l2.47 6.36c.15.37.51.64.93.64.55 0 1-.45 1-1 0-.13-.03-.25-.07-.36zM7.18 11L10 3.76 12.82 11H7.18z"],fork:["M16.71 11.29a1.003 1.003 0 00-1.42 1.42l1.3 1.29h-2.17l-8-8h10.17L15.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 4H1c-.55 0-1 .45-1 1s.45 1 1 1h2.59l9.71 9.71c.17.18.42.29.7.29h2.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3z"],form:["M2 13v4h4v-4H2zm-1-2h6c.55 0 1 .45 1 1v6c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6c0-.55.45-1 1-1zm11-7h7c.55 0 1 .45 1 1s-.45 1-1 1h-7c-.55 0-1-.45-1-1s.45-1 1-1zM8 1a1.003 1.003 0 01.71 1.71l-5 6C3.53 8.89 3.28 9 3 9s-.53-.11-.71-.29l-2-2a1.003 1.003 0 011.42-1.42L3 6.59l4.29-5.3C7.47 1.11 7.72 1 8 1zm4 13h7c.55 0 1 .45 1 1s-.45 1-1 1h-7c-.55 0-1-.45-1-1s.45-1 1-1z"],"full-circle":["M9.96 0a10 10 0 100 20 10 10 0 100-20z"],"full-stacked-chart":["M15 16h2c.55 0 1-.45 1-1v-5h-4v5c0 .55.45 1 1 1zM12 2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v4h4V2zm6 4h-4v3h4V6zm0-4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h4V2zm-6 5H8v5h4V7zm-9 9h2c.55 0 1-.45 1-1v-3H2v3c0 .55.45 1 1 1zm6 0h2c.55 0 1-.45 1-1v-2H8v2c0 .55.45 1 1 1zm10 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM6 2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v3h4V2zm0 4H2v5h4V6z"],fullscreen:["M3.41 2H6c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1s1-.45 1-1V3.41L7.29 8.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L3.41 2zM8 11c-.28 0-.53.11-.71.29L2 16.59V14c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1H3.41l5.29-5.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1zM19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm0 13c-.55 0-1 .45-1 1v2.59l-5.29-5.29A.965.965 0 0012 11a1.003 1.003 0 00-.71 1.71l5.3 5.29H14c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1z"],function:["M10.14 5.82H8.73c.4-1.66.94-2.87 1.6-3.64.4-.48.8-.72 1.18-.72.08 0 .14.02.19.07.05.05.07.1.07.18 0 .07-.05.19-.16.37s-.16.36-.16.52c0 .23.08.43.25.59a.9.9 0 00.64.25c.28 0 .51-.1.7-.3.19-.2.28-.47.28-.81 0-.39-.14-.7-.42-.94-.28-.24-.74-.36-1.36-.36-.97 0-1.86.29-2.65.87-.79.56-1.54 1.52-2.26 2.85-.24.46-.48.75-.7.88-.22.13-.57.19-1.06.19l-.32 1.15H5.9l-1.99 7.85c-.33 1.29-.56 2.09-.67 2.39-.17.44-.43.81-.77 1.12a.74.74 0 01-.5.19c-.05 0-.1-.02-.14-.05l-.04-.07c0-.03.05-.1.15-.2.1-.1.15-.26.15-.47 0-.23-.08-.42-.23-.57-.16-.15-.38-.23-.67-.23-.35 0-.63.1-.85.29-.21.2-.32.43-.32.7 0 .29.13.54.39.75.25.22.65.33 1.2.33.88 0 1.66-.23 2.33-.69.68-.46 1.27-1.17 1.78-2.14.51-.96 1.03-2.52 1.56-4.66l1.14-4.54H9.8l.34-1.15zm6.8 1.95c.25-.2.51-.29.78-.29.1 0 .29.04.56.11.27.08.51.11.72.11.29 0 .52-.1.72-.3.18-.19.28-.45.28-.77 0-.33-.1-.6-.29-.8-.19-.2-.47-.29-.82-.29-.32 0-.62.08-.9.23-.28.15-.64.49-1.08 1-.33.38-.81 1.05-1.44 2a9.712 9.712 0 00-1.31-3.22l-3.4.59-.07.37c.25-.05.47-.08.64-.08.34 0 .62.15.84.44.35.46.84 1.85 1.46 4.19-.49.66-.82 1.09-1 1.3-.3.33-.55.54-.74.64-.15.08-.32.12-.51.12-.14 0-.38-.08-.7-.24-.22-.1-.42-.16-.59-.16-.33 0-.6.11-.82.32-.21.22-.32.49-.32.83 0 .31.1.57.3.77.2.2.47.29.8.29.32 0 .63-.07.92-.21.29-.14.64-.43 1.08-.88.43-.45 1.03-1.16 1.79-2.14.29.93.55 1.61.76 2.03.21.42.46.73.74.91.28.19.62.28 1.04.28.4 0 .81-.15 1.23-.44.55-.38 1.1-1.04 1.68-1.97l-.35-.21c-.39.55-.68.89-.87 1.03-.12.09-.27.13-.44.13-.2 0-.4-.13-.59-.38-.33-.43-.77-1.63-1.33-3.6.47-.86.89-1.44 1.23-1.71z"],"gantt-chart":["M4 7h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm3 2v1c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1zm12 3h-6c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0 4H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],geofence:["M8 11l.075.003.126.017.111.03.111.044.098.052.096.067.09.08c.036.035.068.073.097.112l.071.11.054.114.035.105.03.148L9 12V18a1 1 0 01-1.993.117L7 18v-3.586l-5.293 5.293a1 1 0 01-1.497-1.32l.083-.094L5.584 13h-3.58a1 1 0 01-.117-1.993L2.004 11H8zm3.018-11a1.003 1.003 0 01.39.087l.12.063.031.02.1.078 8.027 7.026.062.064.068.086.044.068.064.128.04.117.024.113.011.108v.1l-.007.073-.019.103-.037.121-.039.09-.05.087-4.996 7.994c-.06.097-.137.183-.226.254l-.093.067-.095.053-.087.037-.125.037a1.018 1.018 0 01-.218.026H11v-5a3 3 0 00-2.824-2.995L8 9H3V6a1 1 0 01.321-.734l.098-.08 7-5a1.01 1.01 0 01.45-.178L11.018 0z"],geolocation:["M0 8.33l9.17 2.5 2.5 9.17L20 0z"],geosearch:["M8 18.88c-3.79 0-6.88-3.09-6.88-6.88 0-.61.08-1.22.23-1.79.03.01.06-.01.1-.01h.09v.55c0 .23.21.42.44.42.04 0 .09-.01.12-.02l.9.88c.09.09.23.09.32 0s.09-.23 0-.32l-.86-.9c0-.02.05-.04.05-.07v-.13c0-.18.1-.25.29-.41h.53c.1 0 .19-.01.27-.05.01-.01.02 0 .03-.01.02-.01.03-.02.05-.04.01-.01.02-.01.02-.02l.02-.02 1.13-1.13c-.16-.32-.3-.65-.42-.99h-.64v-.53c0-.01.06.06.06-.1h.38c-.04-.16-.08-.32-.1-.48h-.71c.2-.16.42-.31.64-.45C4.02 6.09 4 5.8 4 5.5c0-.14.01-.28.02-.43C1.62 6.46 0 9.04 0 12c0 4.41 3.59 8 8 8 3.87 0 7.09-2.77 7.82-6.44l-.97-1.1c-.26 3.57-3.23 6.42-6.85 6.42zm-2.12-3.67v-.35h.15c.29 0 .49-.23.49-.53v-.68c0-.01.01-.01 0-.02L4.71 11.8h-.77c-.29 0-.47.24-.47.53v2c0 .29.18.53.47.53h.33v2.02c0 .28.28.51.56.51s.56-.23.56-.51v-1.22h-.01c.29 0 .5-.16.5-.45zm13.83-2.92l-3.68-3.68c.14-.21.27-.42.38-.65.02-.04.04-.07.05-.11.11-.22.2-.45.28-.69v-.01c.07-.24.13-.48.17-.73l.03-.17c.04-.24.06-.49.06-.75C17 2.46 14.54 0 11.5 0S6 2.46 6 5.5 8.46 11 11.5 11c.26 0 .51-.02.76-.06l.17-.03c.25-.04.49-.1.73-.17h.01c.24-.08.47-.17.69-.28.04-.02.07-.04.11-.05.23-.11.44-.24.65-.38l3.68 3.68c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71zM11.5 9.5c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm1.93 5.33v-.65c0-.11-.13-.21-.24-.21-.11 0-.24.09-.24.21v.65c0 .11.13.21.24.21.11 0 .24-.1.24-.21zm-2.41.67h.83c.29 0 .46-.21.46-.5v-1.86l.23-.22c-.34.05-.69.08-1.04.08-.36 0-.7-.03-1.05-.08.03.05.06.1.08.16V15c.01.29.2.5.49.5z"],"git-branch":["M15 2c-1.66 0-3 1.34-3 3 0 1.3.84 2.4 2 2.82V9c0 1.1-.9 2-2 2H8c-.73 0-1.41.21-2 .55V5.82C7.16 5.4 8 4.3 8 3c0-1.66-1.34-3-3-3S2 1.34 2 3c0 1.3.84 2.4 2 2.82v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.25-.77-2.3-1.85-2.75C6.45 13.52 7.16 13 8 13h4c2.21 0 4-1.79 4-4V7.82C17.16 7.4 18 6.3 18 5c0-1.66-1.34-3-3-3zM5 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 16c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM15 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-commit":["M19 9h-4.1a5 5 0 00-9.8 0H1c-.55 0-1 .45-1 1s.45 1 1 1h4.1a5 5 0 009.8 0H19c.55 0 1-.45 1-1s-.45-1-1-1zm-9 4c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"],"git-merge":["M15 8c-1.3 0-2.4.84-2.82 2H11c-2.49 0-4.54-1.83-4.92-4.21A2.995 2.995 0 005 0C3.34 0 2 1.34 2 3c0 1.3.84 2.4 2 2.81v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V9.86C7.27 11.17 9.03 12 11 12h1.18A2.996 2.996 0 0018 11c0-1.66-1.34-3-3-3zM5 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM5 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm10 8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-new-branch":["M17 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3 4.86V9c0 1.1-.9 2-2 2H8c-.73 0-1.41.21-2 .55V5.82C7.16 5.4 8 4.3 8 3c0-1.66-1.34-3-3-3S2 1.34 2 3c0 1.3.84 2.4 2 2.82v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.25-.77-2.3-1.85-2.75C6.45 13.52 7.16 13 8 13h4c2.21 0 4-1.79 4-4V7.86c-.32.08-.65.14-1 .14s-.68-.06-1-.14zM5 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 16c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-pull":["M17 14.18V7c0-2.21-1.79-4-4-4h-2.59l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C7.11 3.47 7 3.72 7 4c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L10.41 5H13c1.1 0 2 .9 2 2v7.18A2.996 2.996 0 0016 20c1.66 0 3-1.34 3-3 0-1.3-.84-2.4-2-2.82zM16 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 1C2.34 1 1 2.34 1 4c0 1.3.84 2.4 2 2.82v7.37C1.84 14.6 1 15.7 1 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V6.82C6.16 6.4 7 5.3 7 4c0-1.66-1.34-3-3-3zm0 17c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"git-push":["M15 11c0-.28-.11-.53-.29-.71l-3-3C11.53 7.11 11.28 7 11 7s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42l1.29-1.3V19c0 .55.45 1 1 1s1-.45 1-1v-8.59l1.29 1.29c.18.19.43.3.71.3.55 0 1-.45 1-1zm4-11H1C.45 0 0 .45 0 1v16c0 .55.45 1 1 1h7v-2H2v-2h6v-1H4V2h14v11h-4v1h4v2h-4v2h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 8h2V6H5v2zm2-5H5v2h2V3z"],"git-repo":["M7 3H5v2h2V3zm0 6H5v2h2V9zm0-3H5v2h2V6zm12-6H1C.45 0 0 .45 0 1v16c0 .55.45 1 1 1h4v2l2-1 2 1v-2h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 16H9v-1H5v1H2v-2h16v2zm0-3H4V2h14v11z"],glass:["M17 6V0H3v6c0 3.53 2.61 6.43 6 6.92V18H6c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1h-3v-5.08c3.39-.49 6-3.39 6-6.92z"],globe:["M7.53 4.37c.1-.1.1-.26 0-.35l-.68-.68c-.1-.1-.25-.1-.35 0-.1.1-.1.26 0 .35l.68.68c.1.1.25.1.35 0zm3.17.06h.3c.09 0 .16-.01.16-.1 0-.09-.07-.1-.16-.1h-.3c-.09 0-.16.01-.16.1s.07.1.16.1zm.98 1.15c.09 0 .19-.08.19-.17v-.42c0-.09-.1-.17-.19-.17s-.19.08-.19.17v.42c0 .09.1.17.19.17zm-6.5 4.19c-.35 0-.56.28-.56.63v2.37c0 .35.21.62.56.62h.39v2.4c0 .34.33.61.67.61s.67-.27.67-.61v-1.44h-.02c.35 0 .6-.19.6-.54v-.41h.18c.35 0 .58-.28.58-.62v-.81c0-.01.01-.01 0-.02L6.1 9.77h-.92zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8 0-.74.11-1.46.3-2.14h.03v.65c0 .28.25.5.53.5.05 0 .1-.01.15-.02l1.05 1.05c.1.11.28.11.38 0 .1-.1.11-.27 0-.38L3.42 8.59c0-.03.05-.05.05-.08v-.16c0-.22.12-.3.34-.49h.63c.12 0 .23-.01.32-.07.01-.01.02 0 .03-.01.02-.02.04-.03.06-.04.01-.01.02-.01.03-.02l.02-.02 2.15-2.15c.24-.24.24-.63 0-.86-.23-.24-.62-.19-.86.04l-.41.46H5v-.64c0-.01.07.07.07-.12h.87c.17 0 .3-.12.3-.29 0-.17-.13-.29-.3-.29H4.88C6.27 2.7 8.05 2 10 2s3.73.7 5.12 1.86h-1.58l-.01-.04c-.06 0-.12 0-.17.04l-.71.7c-.09.09-.09.23 0 .31.09.09.23.09.32 0l.56-.6.01-.03h.34c0 .19-.1.13-.1.16v.1c0 .29-.2.5-.49.5h-.51c-.25 0-.52.28-.52.54v.23h-.12c-.16 0-.27.08-.27.24v.33h-.32c-.23 0-.41.15-.41.38 0 .22.18.35.41.35.1 0 .19.04.26-.16l.06.01.66-.59h.23l.53.5c.04.04.11.03.16-.01.04-.04.04-.16 0-.2L13 6.15h.32l.12.16c.25.25.65.23.89-.02l.12-.14H15c.02 0 .11.07.11.07v.33s-.06-.01-.07-.01h-.49c-.16 0-.28.13-.28.29 0 .16.13.29.28.29h.49c.01 0 .07-.01.07-.01v.2c-.19.28-.33.57-.62.57h-1.28s0-.01-.01-.01l-.58-.58a.622.622 0 00-.89 0l-.58.58s0 .01-.01.01h-.34c-.35 0-.67.28-.67.63v1.25c0 .35.32.61.67.61h1.22c.46.19.78.48.97.94v2.28c0 .35.23.6.58.6h.98c.35 0 .54-.25.54-.6v-2.2l1.21-1.17.04-.02.02-.01h.04c.1-.11.2-.26.2-.42V8.49c0-.25-.22-.44-.42-.63h.58c.02.38.29.57.63.57h.43c.13.51.18 1.03.18 1.57 0 4.42-3.58 8-8 8zm6.16-5.65c-.14 0-.29.11-.29.25v.77c0 .14.15.25.29.25.14 0 .29-.11.29-.25v-.77c0-.14-.15-.25-.29-.25zM10.5 3.48c0-.34-.28-.57-.62-.57h-.74c-.34 0-.57.25-.57.59 0 .05-.13.06.06.1v.64c0 .2.09.36.29.36.2 0 .29-.16.29-.36v-.19h.68c.33 0 .61-.23.61-.57z"],"globe-network":["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm7.39 7h-3.63c-.31-1.99-.92-3.66-1.72-4.73 2.45.65 4.41 2.42 5.35 4.73zM13 10c0 .69-.04 1.36-.11 2H7.11a18.419 18.419 0 010-4h5.77c.08.64.12 1.31.12 2zm-3-8c1.07 0 2.25 2.05 2.75 5h-5.5c.5-2.95 1.68-5 2.75-5zm-2.04.27C7.16 3.34 6.55 5.01 6.24 7H2.61c.94-2.31 2.9-4.08 5.35-4.73zM2 10c0-.69.11-1.36.28-2h3.83a18.419 18.419 0 000 4H2.28c-.17-.64-.28-1.31-.28-2zm.61 3h3.63c.31 1.99.92 3.66 1.72 4.73A7.996 7.996 0 012.61 13zM10 18c-1.07 0-2.25-2.05-2.75-5h5.5c-.5 2.95-1.68 5-2.75 5zm2.04-.27c.79-1.07 1.4-2.74 1.72-4.73h3.63a7.996 7.996 0 01-5.35 4.73zM13.89 12a18.419 18.419 0 000-4h3.83c.17.64.28 1.31.28 2s-.11 1.36-.28 2h-3.83z"],graph:["M17.5 4A2.5 2.5 0 0015 6.5c0 .06.01.12.02.18l-1.9.84C12.38 6.6 11.27 6 10 6c-.83 0-1.59.25-2.23.68L4.91 4.14c.05-.21.09-.42.09-.64a2.5 2.5 0 00-5 0A2.5 2.5 0 002.5 6c.42 0 .81-.11 1.16-.3l2.79 2.48C6.17 8.73 6 9.34 6 10c0 1.41.73 2.64 1.83 3.35l-.56 1.67A2.498 2.498 0 005 17.5a2.5 2.5 0 005 0c0-.74-.32-1.39-.83-1.85l.56-1.68c.09.01.18.03.27.03 2.21 0 4-1.79 4-4 0-.22-.03-.44-.07-.65l2.02-.9c.43.34.96.55 1.55.55a2.5 2.5 0 000-5z"],"graph-remove":["M17.41 4l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L16 2.59 13.71.3A.965.965 0 0013 0a1.003 1.003 0 00-.71 1.71L14.59 4 12.3 6.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L16 5.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L17.41 4zM19 10c-.83 0-1.55-.36-2.09-.91l-.03.03-.88-.88-.88.88a2.996 2.996 0 11-4.24-4.24l.88-.88-.88-.88.03-.03C10.36 2.55 10 1.83 10 1c0-.35.07-.68.18-.99-.06 0-.12-.01-.18-.01C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-.06-.01-.12-.01-.18-.31.11-.64.18-.99.18z"],"greater-than":["M12.838 10l-9.154 3.051a1 1 0 00.632 1.898l12-4c.912-.304.912-1.594 0-1.898l-12-4a1 1 0 00-.632 1.898L12.838 10z"],"greater-than-or-equal-to":["M3.684 11.051a1 1 0 00.632 1.898l12-4c.912-.304.912-1.594 0-1.898l-12-4a1 1 0 00-.632 1.898L12.838 8l-9.154 3.051zM4 15h12a1 1 0 110 2H4a1 1 0 010-2z"],grid:["M19 11c.55 0 1-.45 1-1s-.45-1-1-1h-2V5h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-4V1c0-.55-.45-1-1-1S9 .45 9 1v2H5V1c0-.55-.45-1-1-1S3 .45 3 1v2H1c-.55 0-1 .45-1 1s.45 1 1 1h2v4H1c-.55 0-1 .45-1 1s.45 1 1 1h2v4H1c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h4v2c0 .55.45 1 1 1s1-.45 1-1v-2h4v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2v-4h2zM9 15H5v-4h4v4zm0-6H5V5h4v4zm6 6h-4v-4h4v4zm0-6h-4V5h4v4z"],"grid-view":["M0 19c0 .55.45 1 1 1h8v-9H0v8zM0 1v8h9V0H1C.45 0 0 .45 0 1zm19-1h-8v9h9V1c0-.55-.45-1-1-1zm-8 20h8c.55 0 1-.45 1-1v-8h-9v9z"],"group-objects":["M6 7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm8-3H6c-3.31 0-6 2.69-6 6s2.69 6 6 6h8c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 11H6c-2.76 0-5-2.24-5-5s2.24-5 5-5h8c2.76 0 5 2.24 5 5s-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"],"grouped-bar-chart":["M12 16h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1zm7 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-3-1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1zm-9 0h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1zm-4 0h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1z"],hand:["M17 5c-.42 0-.79.27-.93.64L14.38 10h-.77l1.34-6.67c.03-.1.05-.21.05-.33a.998.998 0 00-1.98-.19h-.01L11.57 10H11V1c0-.55-.45-1-1-1S9 .45 9 1v9h-.2L6.97 2.76a.997.997 0 00-1.73-.41l-.03.03c-.01.02-.02.03-.03.04-.01.02-.01.03-.02.04v.01c-.01.01-.02.02-.02.03v.01c-.02.01-.02.02-.03.03 0 0 0 .01-.01.01 0 .01 0 .02-.01.03 0 0 0 .01-.01.01 0 .01-.01.02-.01.03 0 0 0 .01-.01.01 0 .01-.01.02-.01.03 0 .01 0 .01-.01.02 0 .01-.01.02-.01.03 0 .01 0 .01-.01.02 0 .01-.01.02-.01.03v.02c0 .01 0 .02-.01.03V3c0 .05 0 .09.01.14l1.45 10.25L6 12.7v.01L3.84 9.45h-.01A.98.98 0 003 9c-.55 0-1 .45-1 1 0 .2.06.39.17.55L6 18.44C7.06 19.4 8.46 20 10 20c3.31 0 6-2.69 6-6v-1.84l.01-.03v-.06l1.94-5.75A1.003 1.003 0 0017 5z"],"hand-down":["M17.68 9.84C15.91 9 14.27 6.49 13.45 4.9 12.41 2.43 12.21 0 7.87 0 5.49 0 3.95.76 3.05 2.65 2.31 4.2 2 5.48 2 9.79v.99c0 .82.69 1.48 1.54 1.48.38 0 .73-.14 1-.36.19.6.78 1.05 1.47 1.05.47 0 .89-.2 1.17-.52.26.47.77.79 1.36.79.65 0 1.2-.39 1.43-.93l.03.77v5.44c0 .48.23.91.59 1.18.21.19.5.32.85.32h.06c.83 0 1.5-.67 1.5-1.5v-8.24l.01-.67c.85.98 1.92 1.76 3.24 1.89 1.79.19 2.09-1.33 1.43-1.64z"],"hand-left":["M15.1 6.54c-1.58-.81-4.09-2.46-4.94-4.23-.31-.65-1.82-.35-1.64 1.43.13 1.33.91 2.4 1.89 3.24L9.74 7H1.5C.67 7 0 7.67 0 8.5v.06c0 .36.13.64.32.85.27.36.7.59 1.18.59h5.44l.78.01c-.54.23-.93.78-.93 1.43 0 .59.32 1.1.79 1.36-.32.28-.52.7-.52 1.17 0 .69.44 1.28 1.05 1.47-.22.27-.36.62-.36 1 0 .85.66 1.54 1.48 1.54h.99c4.31 0 5.59-.31 7.14-1.05 1.89-.9 2.65-2.44 2.65-4.82-.01-4.32-2.44-4.52-4.91-5.57z"],"hand-right":["M20 8.5c0-.83-.67-1.5-1.5-1.5h-8.24l-.67-.01c.98-.85 1.76-1.92 1.89-3.24.18-1.79-1.33-2.08-1.65-1.43-.84 1.76-3.35 3.41-4.93 4.23C2.43 7.59 0 7.79 0 12.13c0 2.38.76 3.92 2.65 4.82C4.2 17.69 5.48 18 9.79 18h.99c.82 0 1.48-.69 1.48-1.54 0-.38-.14-.73-.36-1 .6-.19 1.05-.78 1.05-1.47 0-.47-.2-.89-.52-1.17.47-.26.79-.77.79-1.36 0-.65-.39-1.2-.93-1.43l.77-.03h5.44c.48 0 .91-.23 1.18-.59.19-.21.32-.49.32-.85v-.03-.03z"],"hand-up":["M16.46 7.74c-.38 0-.73.14-1 .36-.19-.6-.78-1.05-1.47-1.05-.47 0-.89.2-1.17.52-.26-.47-.77-.79-1.36-.79-.65 0-1.2.39-1.43.93L10 6.94V1.5c0-.48-.23-.91-.59-1.18C9.2.13 8.92 0 8.56 0H8.5C7.67 0 7 .67 7 1.5v8.24l-.01.67c-.84-.98-1.92-1.76-3.24-1.89-1.79-.18-2.08 1.33-1.43 1.65 1.77.84 3.41 3.35 4.23 4.94 1.05 2.47 1.25 4.9 5.58 4.9 2.38 0 3.92-.76 4.82-2.65.74-1.56 1.05-2.84 1.05-7.15v-.99c0-.81-.69-1.48-1.54-1.48z"],hat:["M18.5 13c1.118 0 1.466.534 1.498 1.366L20 14.5v.5c0 1.945-5.69 3-10 3S0 16.945 0 15v-.5c0-.908.323-1.5 1.5-1.5.895 0 3.5 1.2 8.5 1.2l.411-.003C15.143 14.134 17.631 13 18.5 13zm-5-10c1.725 0 2.954 2.729 3.688 8.186-1.455.263-3.805.72-6.392.801l-.434.01L10 12c-2.896 0-5.585-.524-7.189-.814C3.546 5.73 4.775 3 6.5 3 8.6 3 8.329 5.5 10 5.5S11.5 3 13.5 3z"],header:["M16 1c-.55 0-1 .45-1 1v7H5V2c0-.55-.45-1-1-1s-1 .45-1 1v16c0 .55.45 1 1 1s1-.45 1-1v-7h10v7c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],"header-one":["M10 0c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1s-1-.45-1-1V9H2v6c0 .55-.45 1-1 1s-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v6h7V1c0-.55.45-1 1-1zm7.4 10.77c.17-.2.29-.46.34-.77H19v10h-1.5v-7.11H15v-1.24c.32 0 .63-.03.93-.08.31-.06.58-.16.83-.29.26-.12.47-.3.64-.51z"],"header-two":["M16.6 17.41c-.22.17-.4.36-.56.55-.16.19-.27.4-.33.61h4.28V20H14c.01-.81.18-1.52.53-2.13.35-.6.81-1.13 1.41-1.58.28-.23.58-.46.89-.68.31-.22.59-.46.85-.71.26-.26.48-.53.63-.83.16-.3.25-.64.26-1.02 0-.18-.02-.37-.06-.57-.04-.2-.11-.39-.22-.56s-.26-.31-.45-.43-.44-.18-.75-.18c-.28 0-.52.06-.71.19s-.34.3-.45.52c-.11.22-.2.48-.25.78-.05.3-.08.62-.09.97h-1.43c0-.54.07-1.04.2-1.5.13-.47.32-.87.58-1.2.26-.34.58-.6.95-.78.37-.19.81-.29 1.3-.29.54 0 .99.09 1.35.29.36.19.65.44.87.74.22.29.38.62.47.97.09.35.14.68.14 1 0 .4-.05.75-.16 1.07-.11.32-.26.61-.44.88-.19.27-.4.52-.63.74-.24.22-.48.43-.73.63s-.5.38-.75.56c-.26.17-.5.35-.71.53zM10 0c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1s-1-.45-1-1V9H2v6c0 .55-.45 1-1 1s-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v6h7V1c0-.55.45-1 1-1z"],headset:["M18.97 9H19A9 9 0 001 9h.03C.41 9.73 0 10.8 0 12c0 1.74.84 3.2 2 3.76V16c0 1.66 1.34 3 3 3h3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1H5c-.55 0-1-.45-1-1 .55 0 1-.45 1-1V9c0-.55-.45-1-1-1h-.92C3.57 4.61 6.47 2 10 2s6.43 2.61 6.92 6H16c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1c1.66 0 3-1.79 3-4 0-1.2-.41-2.27-1.03-3z"],heart:["M20 6.25C20 3.35 17.65 1 14.75 1c-1.02 0-1.95.31-2.75.82v-.04c-.09.06-.17.12-.26.19-.04.03-.09.06-.14.1-.68.51-1.24 1.18-1.6 1.96-.4-.86-1.04-1.57-1.8-2.1-.04-.02-.07-.05-.1-.08a7 7 0 00-.6-.33c-.13-.04-.23-.1-.35-.15-.05-.02-.1-.05-.15-.07v.02C6.45 1.13 5.87 1 5.25 1A5.25 5.25 0 000 6.25c0 .09.01.17.01.25H0c0 .06.01.12.02.18s.01.12.02.18C.13 7.89.44 9 1.07 10.17 2.23 12.33 4.1 14.11 7 16.53v.01c.9.75 1.89 1.55 3 2.46.71-.58 1.38-1.12 2-1.63 3.48-2.86 5.64-4.78 6.93-7.18.63-1.17.94-2.27 1.03-3.3.01-.07.01-.14.02-.21 0-.06.01-.11.02-.17h-.01c0-.09.01-.17.01-.26z"],"heart-broken":["M8.11 7.45C8.05 7.31 8 7.16 8 7c0-.07.03-.13.04-.19h-.02l.86-4.32A5.159 5.159 0 005.25 1 5.25 5.25 0 000 6.25c0 .09.01.17.01.25H0c0 .06.01.12.02.18s.01.12.02.18C.13 7.89.44 9 1.07 10.17c1.38 2.58 3.76 4.6 7.71 7.83l-.76-3.8h.02c-.01-.07-.04-.13-.04-.2 0-.21.08-.39.18-.54l-.02-.01 1.68-2.52-1.73-3.48zM20 6.25C20 3.35 17.65 1 14.75 1c-1.54 0-2.92.67-3.88 1.73l-.83 4.13 1.85 3.69h-.01c.07.14.12.29.12.45 0 .21-.08.39-.18.54l.02.01-1.77 2.66.81 4.07c4.16-3.39 6.63-5.45 8.05-8.1.63-1.17.94-2.27 1.03-3.3.01-.07.01-.14.02-.21 0-.06.01-.11.02-.17h-.01c0-.08.01-.16.01-.25z"],"heat-grid":["M14 12h6V8h-6v4zM0 12h6V8H0v4zm1-3h4v2H1V9zm-1 7c0 .55.45 1 1 1h5v-4H0v3zM19 3h-5v4h6V4c0-.55-.45-1-1-1zm0 3h-4V4h4v2zM0 4v3h6V3H1c-.55 0-1 .45-1 1zm7 3h6V3H7v4zm7 10h5c.55 0 1-.45 1-1v-3h-6v4zm-7 0h6v-4H7v4zm1-3h4v2H8v-2zm-1-2h6V8H7v4z"],heatmap:["M6 0a6 6 0 100 12A6 6 0 106 0z","M10.5 8a4.5 4.5 0 100 9 4.5 4.5 0 100-9z","M16.5 7a3.5 3.5 0 100 7 3.5 3.5 0 100-7zM18 16a2 2 0 100 4 2 2 0 100-4zM2.5 14a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM16.5 0a2.5 2.5 0 100 5 2.5 2.5 0 100-5z"],help:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM7.41 4.62c.65-.54 1.51-.82 2.56-.82.54 0 1.03.08 1.48.25.44.17.83.39 1.14.68.32.29.56.63.74 1.02.17.39.26.82.26 1.27s-.08.87-.24 1.23c-.16.37-.4.73-.71 1.11l-1.21 1.58c-.14.17-.28.33-.32.48-.05.15-.11.35-.11.6v.97H9v-2s.06-.58.24-.81l1.21-1.64c.25-.3.41-.56.51-.77s.14-.44.14-.67c0-.35-.11-.63-.32-.85s-.5-.33-.88-.33c-.37 0-.67.11-.89.33-.22.23-.37.54-.46.94-.03.12-.11.17-.23.16l-1.95-.29c-.12-.01-.16-.08-.14-.22.13-.93.52-1.67 1.18-2.22zM9 14h2.02L11 16H9v-2z"],"helper-management":["M17 10h-3v3h3v-3zm0 4h-3v3h3v-3zm0-8h-3v3h3V6zm2-6H1C.4 0 0 .4 0 1v18c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V1c0-.6-.5-1-1-1zm-1 18H2V2h16v16zm-9-4H6v3h3v-3zm4 0h-3v3h3v-3z"],highlight:["M11.22 14.09l3.03-3.03.71.71L20 6.73l-5.71-5.71-5.04 5.04.71.71-3.02 3.04 4.28 4.28zm6.8 3.91h-16c-.55 0-1 .45-1 1s.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1zm-15-1h4.04c.28 0 .53-.11.71-.3l2.02-2.02-3.44-3.45-4.04 4.04c-.18.18-.3.44-.3.71.01.57.46 1.02 1.01 1.02z"],history:["M10 0C6.71 0 3.82 1.6 2 4.05V2c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.76C5.23 3.17 7.47 2 10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8c0-.55-.45-1-1-1s-1 .45-1 1c0 5.52 4.48 10 10 10s10-4.48 10-10S15.52 0 10 0zm0 3c-.55 0-1 .45-1 1v6c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L11 9.59V4c0-.55-.45-1-1-1z"],home:["M2 12v7c0 .55.45 1 1 1h5v-7h4v7h5c.55 0 1-.45 1-1v-7l-8-8-8 8zm17.71-2.71L17 6.59V3c0-.55-.45-1-1-1s-1 .45-1 1v1.59L10.71.3C10.53.11 10.28 0 10 0s-.53.11-.71.29l-9 9a1.003 1.003 0 001.42 1.42L10 2.41l8.29 8.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"horizontal-bar-chart":["M1 1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1zm3 5h11c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1zm8 8H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm7-6H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h15c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1z"],"horizontal-bar-chart-asc":["M1 9h11c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0-5h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm18 12H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM1 14h14c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1z"],"horizontal-bar-chart-desc":["M10 16H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm2-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h11c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm3-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm4-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z"],"horizontal-distribution":["M12 2H8c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM1 0C.45 0 0 .45 0 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm18 0c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],"id-number":["M2 5v10h16V5H2zm0-2h16c1.1 0 2 .9 2 2v10c0 1.1-.9 2-2 2H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2z","M8.88 12.38c-.17-.39-1.01-.66-1.56-.9-.56-.24-.48-.39-.5-.6v-.09c.19-.17.35-.4.45-.67 0 0 0-.02.01-.02l.06-.18c.13-.03.2-.17.23-.29.03-.05.09-.18.08-.33-.04-.18-.11-.27-.2-.3v-.03c0-.24-.02-.58-.06-.81-.01-.06-.02-.12-.04-.19-.08-.27-.25-.52-.48-.7C6.63 7.09 6.3 7 6 7s-.63.09-.87.27c-.23.17-.4.42-.48.7-.02.06-.03.13-.04.19-.04.22-.06.57-.06.81V9c-.09.03-.17.12-.19.31-.01.14.05.27.08.32.03.14.1.27.23.3.02.06.03.12.06.18v.01c.11.27.27.51.47.68v.08c-.02.2.04.35-.51.6-.56.24-1.39.51-1.56.9-.19.39-.12.62-.12.62h5.98c-.01 0 .06-.23-.11-.62zM12 7h4c.55 0 1 .45 1 1s-.45 1-1 1h-4c-.55 0-1-.45-1-1s.45-1 1-1zM12 11h4c.55 0 1 .45 1 1s-.45 1-1 1h-4c-.55 0-1-.45-1-1s.45-1 1-1z"],"image-rotate-left":["M10.5 13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM14 7H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 10l-5-3-1 2-2-4-3 4.5V9h11v8zm3-15h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H16c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4z"],"image-rotate-right":["M5.29 4.29a1.003 1.003 0 001.42 1.42l2-2C8.89 3.53 9 3.28 9 3c0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H4C1.79 2 0 3.79 0 6v3c0 .55.45 1 1 1s1-.45 1-1V6c0-1.1.9-2 2-2h1.59l-.3.29zM15.5 13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM19 7H6c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 10l-5-3-1 2-2-4-3 4.5V9h11v8z"],import:["M9.29 15.71c.18.18.43.29.71.29s.53-.11.71-.29l5-5a1.003 1.003 0 00-1.42-1.42L11 12.59V1c0-.55-.45-1-1-1S9 .45 9 1v11.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l5 5zM19 14c-.55 0-1 .45-1 1v3H2v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z"],inbox:["M16.92 3.56l-.01-.02c-.16-.35-.5-.6-.91-.6H4c-.41 0-.76.25-.91.6l-.01.02L0 10.49v6.46c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-6.46l-3.08-6.93zM15 10.95c-.55 0-1 .45-1 1v1H6v-1c0-.55-.45-1-1-1H1.98l2.67-6h10.7l2.67 6H15z"],"inbox-filtered":["M10.262 3l1.958 1.958v.05H4.65l-2.67 5.997H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h3.02l-.635-1.426.625-.63c.354-.353.598-.8.707-1.289L20 10.545v6.456c0 .55-.45.999-1 .999H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h6.262zm9.088-3a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V4.13L11.19 1.1a.642.642 0 01.45-1.1h7.71z"],"inbox-geo":["M7.427 3a7.467 7.467 0 00-.411 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8V13c.165.01.332 0 .5 0a7.48 7.48 0 005.5-2.4V17c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h3.427zm5.715-.596a.133.133 0 01-.193 0l-.374-.374a.133.133 0 010-.193.133.133 0 01.193 0l.373.374a.133.133 0 010 .193zm1.743.033c-.05 0-.088-.006-.088-.055 0-.05.038-.056.088-.056h.165c.05 0 .088.006.088.055 0 .05-.038.056-.088.056h-.165zm.539.632c-.05 0-.104-.044-.104-.094v-.23c0-.05.054-.094.104-.094.05 0 .104.044.104.094v.23c0 .05-.055.094-.104.094zm-3.575 2.304h.506l1.182 1.2c.006.005 0 .005 0 .01v.446c0 .187-.126.341-.319.341h-.098v.226c0 .192-.138.296-.33.296h.01v.792c0 .188-.181.336-.368.336s-.369-.149-.369-.335v-1.32h-.214c-.193 0-.308-.149-.308-.341V5.72c0-.192.115-.346.308-.346zM14.5 0C17.536 0 20 2.464 20 5.5S17.536 11 14.5 11A5.502 5.502 0 019 5.5C9 2.464 11.464 0 14.5 0zm0 9.9c2.431 0 4.4-1.969 4.4-4.4 0-.297-.027-.583-.099-.864h-.236c-.188 0-.336-.104-.347-.313h-.319c.11.104.231.209.231.346v.705c0 .088-.055.17-.11.23h-.022l-.011.006-.022.011-.666.643v1.21c0 .193-.104.33-.296.33h-.54c-.192 0-.319-.137-.319-.33V6.221a.915.915 0 00-.533-.518h-.671c-.192 0-.368-.143-.368-.335V4.68c0-.192.176-.346.368-.346l.193-.005.319-.32a.342.342 0 01.489 0l.319.32c.005 0 .005.005.005.005h.704c.16 0 .237-.16.341-.313v-.11l-.038.005h-.27a.159.159 0 01-.153-.16c0-.087.066-.159.154-.159h.269l.039.006V3.42s-.05-.038-.061-.038h-.302l-.067.076a.342.342 0 01-.489.011l-.066-.088h-.176l.248.259c.021.022.021.088 0 .11-.028.022-.067.028-.088.006l-.292-.276h-.127l-.363.325-.033-.006c-.038.11-.087.089-.143.089-.126 0-.225-.072-.225-.193 0-.127.099-.209.225-.209h.176v-.182c0-.088.061-.131.149-.131h.066v-.127c0-.143.149-.297.286-.297h.28c.16 0 .27-.115.27-.275V2.42c0-.016.055.017.055-.088h-.187l-.005.017-.308.33a.123.123 0 01-.177 0c-.049-.044-.049-.121 0-.171l.391-.385c.027-.022.06-.022.094-.022l.005.022h.869A4.376 4.376 0 0014.5 1.1a4.402 4.402 0 00-2.816 1.018h.583c.094 0 .165.066.165.159s-.072.16-.165.16h-.478c0 .104-.039.06-.039.066v.351h.429l.226-.252c.132-.127.346-.155.473-.022a.332.332 0 010 .473l-1.183 1.182-.011.011c-.005.005-.011.005-.016.011a.115.115 0 00-.034.022c-.005.006-.01 0-.016.006a.309.309 0 01-.176.038h-.347c-.12.104-.187.148-.187.27v.088c0 .016-.027.027-.027.043l.561.589c.06.06.055.154 0 .209a.143.143 0 01-.209 0l-.578-.578a.425.425 0 01-.082.011c-.154 0-.292-.12-.292-.274v-.358h-.016c-.104.374-.165.77-.165 1.177 0 2.431 1.969 4.4 4.4 4.4zm3.388-3.107c.077 0 .16.06.16.137v.424c0 .077-.083.137-.16.137s-.16-.06-.16-.137V6.93c0-.077.083-.137.16-.137zm-3.113-4.879c0 .187-.154.314-.335.314h-.374v.104c0 .11-.05.198-.16.198s-.16-.088-.16-.198V1.98c-.104-.022-.033-.028-.033-.055 0-.187.127-.325.314-.325h.407c.187 0 .341.127.341.314z"],"inbox-search":["M7.136 3a6.327 6.327 0 00-.098 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h1.076l1.14 1.14a2.767 2.767 0 001.974.806c.282 0 .554-.042.81-.12V17c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h3.136zm3.244 1.33c0 1.62 1.31 2.93 2.93 2.93s2.93-1.31 2.93-2.93-1.31-2.93-2.93-2.93-2.93 1.31-2.93 2.93zm6.47 2.43l2.89 2.85c.13.15.22.35.23.56 0 .43-.35.78-.78.78-.23 0-.42-.08-.56-.22l-2.87-2.87c-.17.1-.33.2-.51.29-.03.01-.06.03-.09.04-.18.07-.35.15-.55.21-.19.06-.37.11-.57.14-.05.01-.1.02-.14.02-.2.03-.39.05-.6.05A4.3 4.3 0 019 4.31C9 1.93 10.93.01 13.3 0c2.37 0 4.3 1.93 4.3 4.3 0 .21-.02.4-.05.6-.01.05-.01.09-.02.14-.04.2-.08.38-.14.58-.05.19-.13.36-.21.54-.01.03-.03.06-.04.09-.08.18-.18.34-.29.51z"],"inbox-update":["M10.083 3a6.04 6.04 0 00.001 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h3.02l-.53-1.19a5.97 5.97 0 001.824-.811L20 10.545v6.456c0 .55-.45.999-1 .999H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h6.083zM16 8a4 4 0 110-8 4 4 0 010 8z"],"info-sign":["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM9 4h2v2H9V4zm4 12H7v-1h2V8H8V7h3v8h2v1z"],inheritance:["M6 10c0 2.21 1.79 4 4 4h6.59l-2.29-2.29A.965.965 0 0114 11a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10c-3.31 0-6-2.69-6-6H1a1 1 0 01-1-1V1a1 1 0 011-1h8a1 1 0 011 1v8a1 1 0 01-1 1H6zM2 2v6h6V2H2z"],"inherited-group":["M1 9c.55 0 1 .45 1 1v4c0 1.1.9 2 2 2h2.59l-.3-.29a1.003 1.003 0 011.42-1.42l2 2c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2 2A1.003 1.003 0 016 19c0-.28.11-.53.3-.71l.29-.29H4c-2.21 0-4-1.79-4-4v-4c0-.55.45-1 1-1zm6.996-9c.79 0 1.68.25 2.309.73a3.63 3.63 0 011.4 2.36c.11.6.17 1.52.17 2.15v.09c.22.09.42.32.47.82.03.39-.12.73-.2.87-.07.34-.27.71-.61.78-.04.16-.09.33-.15.48-.01.01-.02.05-.02.05-.27.71-.68 1.33-1.19 1.78 0 .08 0 .16.01.23.05.55-.15.95 1.33 1.6 1.469.66 3.698 1.35 4.178 2.39.45 1.05.27 1.67.27 1.67h-5.227a1.982 1.982 0 00-.319-.417l-2-2A2.003 2.003 0 005 15H4c-.548 0-1-.452-1-1v-1.462c.511-.213 1.023-.413 1.468-.608 1.479-.65 1.329-1.05 1.379-1.59l.01-.21c-.52-.45-.95-1.08-1.22-1.8l-.01-.01-.01-.03c-.07-.15-.12-.32-.16-.49-.34-.06-.54-.43-.62-.78-.08-.14-.24-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.64.05-1.55.17-2.15a3.648 3.648 0 011.4-2.36C6.317.25 7.207 0 7.996 0zm5.997 3c.59 0 1.26.19 1.73.55.46.35.8.85.97 1.4.04.13.07.25.08.38.08.45.13 1.14.13 1.61v.07c.16.07.31.24.35.62.02.29-.09.55-.15.65-.05.26-.2.53-.46.59-.03.12-.07.25-.11.36-.01.01-.01.04-.01.04-.2.53-.51 1-.89 1.34 0 .06 0 .12.01.17.04.41-.11.71 1 1.19 1.099.5 2.768 1.01 3.128 1.79.34.79.2 1.25.2 1.25h-3.039V15c-.06-.33-.17-.69-.33-1.06-.45-.97-1.37-1.52-3.238-2.3-.17-.07-.76-.31-.77-.32-.1-.04-.2-.08-.28-.12.05-.14.04-.29.06-.45l.01-.16c-.25-.21-.47-.48-.65-.79.22-.34.41-.71.56-1.12l.028-.078-.002.013-.006.035.06-.15c.36-.26.6-.67.72-1.13.18-.37.29-.82.25-1.3-.05-.5-.21-.92-.47-1.22-.02-.53-.06-1.11-.12-1.59.38-.17.83-.26 1.24-.26z"],"inner-join":["M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zm-3.34 9.25c-.55-1.2-.86-2.54-.86-3.95s.31-2.75.86-3.95a4.001 4.001 0 000 7.9zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm.6 2.05c.55 1.2.86 2.54.86 3.95s-.31 2.75-.86 3.95c1.9-.31 3.36-1.96 3.36-3.95S16.5 6.36 14.6 6.05zM10 5.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z"],insert:["M19 0H1C.4 0 0 .4 0 1v18c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V1c0-.6-.5-1-1-1zm-1 18H2V2h16v16zM5 11h4v4c0 .6.4 1 1 1s1-.4 1-1v-4h4c.6 0 1-.4 1-1s-.4-1-1-1h-4V5c0-.6-.4-1-1-1s-1 .4-1 1v4H5c-.6 0-1 .4-1 1s.4 1 1 1z"],intersection:["M13 4c-1.31 0-2.51.43-3.5 1.14A5.977 5.977 0 006 4c-3.31 0-6 2.69-6 6s2.69 6 6 6c1.31 0 2.51-.43 3.5-1.14.99.71 2.19 1.14 3.5 1.14 3.31 0 6-2.69 6-6s-2.69-6-6-6zm-4.93 9.41c-.61.37-1.31.59-2.07.59-2.21 0-4-1.79-4-4s1.79-4 4-4c.76 0 1.46.22 2.07.59C7.4 7.56 7 8.73 7 10s.4 2.44 1.07 3.41zM13 14c-.76 0-1.46-.22-2.07-.59C11.6 12.44 12 11.27 12 10s-.4-2.44-1.07-3.41C11.54 6.22 12.24 6 13 6c2.21 0 4 1.79 4 4s-1.79 4-4 4z"],"ip-address":["M6 3.66C6 5.69 10 11 10 11s4-5.31 4-7.34C13.99 1.64 12.21 0 10 0S6 1.64 6 3.66zM8 4c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2zM14 13.5V13h-4v1h3v2h-2v1h3v-3.5zM3 12h14c.55 0 1 .45 1 1v6c0 .55-.45 1-1 1H3c-.55 0-1-.45-1-1v-6c0-.55.45-1 1-1zm4 1v6h1v-6H7zm3 1v5h1v-5h-1z"],issue:["M10 20C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 100-16 8 8 0 000 16zm1-2H9v-2h2v2zm0-3H9V4h2v9z"],"issue-closed":["M15.364 5.9a.997.997 0 01-.707-.293l-2.121-2.122a1 1 0 111.414-1.414l1.414 1.414L18.192.657a1 1 0 011.414 1.414l-3.535 3.536a.997.997 0 01-.707.292zM11.78.157a3.002 3.002 0 00-1.437 1.85 8 8 0 107.1 5.055l.042-.042 1.472-1.472A9.959 9.959 0 0120 10c0 5.523-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0c.608 0 1.202.054 1.78.158zM11 16H9v-2h2v2zm0-3H9V4h2v9z"],"issue-new":["M13.167.512a2.98 2.98 0 00-.131.524c-.74.115-1.39.5-1.848 1.052a8 8 0 106.724 6.724 2.997 2.997 0 001.052-1.848 2.98 2.98 0 00.524-.13A9.99 9.99 0 0120 10c0 5.523-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0a9.99 9.99 0 013.167.512zM11 16H9v-2h2v2zm0-3H9V4h2v9zm6-10h1.5a1 1 0 010 2H17v1.5a1 1 0 01-2 0V5h-1.5a1 1 0 010-2H15V1.5a1 1 0 012 0V3z"],italic:["M11.7 4H14c.6 0 1-.4 1-1s-.4-1-1-1H7c-.6 0-1 .4-1 1s.4 1 1 1h2.2L7.3 15H5c-.6 0-1 .4-1 1s.4 1 1 1h7c.6 0 1-.4 1-1s-.4-1-1-1H9.8l1.9-11z"],"join-table":["M19 6h-4V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h4v4c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM6 12H2V9h4v3zm0-4H2V5h4v3zm7 9H7v-3h6v3zm0-4H7V9h6v4zm0-5H7V5h6v3zm5 9h-4v-3h4v3zm0-4h-4v-3h4v3z"],key:["M14 0c-3.31 0-6 2.69-6 6 0 1.11.32 2.14.85 3.03L.44 17.44a1.498 1.498 0 102.12 2.12l.79-.79.94.94c.18.18.43.29.71.29s.53-.11.71-.29l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-.94-.94 3.2-3.2A5.9 5.9 0 0014 12c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 9c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"],"key-backspace":["M19 3H7c-.28 0-.53.11-.71.29l-6 6C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l6 6c.18.18.43.29.71.29h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-2.29 9.29a1.003 1.003 0 01-1.42 1.42L13 11.41l-2.29 2.29c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71l2.3-2.29-2.3-2.29a1.003 1.003 0 011.42-1.42L13 8.59l2.29-2.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L14.41 10l2.3 2.29z"],"key-command":["M15.5 12H14V8h1.5C17.43 8 19 6.43 19 4.5S17.43 1 15.5 1 12 2.57 12 4.5V6H8V4.5C8 2.57 6.43 1 4.5 1S1 2.57 1 4.5 2.57 8 4.5 8H6v4H4.5C2.57 12 1 13.57 1 15.5S2.57 19 4.5 19 8 17.43 8 15.5V14h4v1.5c0 1.93 1.57 3.5 3.5 3.5s3.5-1.57 3.5-3.5-1.57-3.5-3.5-3.5zm0-9c.83 0 1.5.67 1.5 1.5S16.33 6 15.5 6 14 5.33 14 4.5 14.67 3 15.5 3zm-11 14c-.83 0-1.5-.67-1.5-1.5S3.67 14 4.5 14s1.5.67 1.5 1.5S5.33 17 4.5 17zm0-11C3.67 6 3 5.33 3 4.5S3.67 3 4.5 3 6 3.67 6 4.5 5.33 6 4.5 6zm7.5 6H8V8h4v4zm3.5 5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"],"key-control":["M16.71 7.29l-6-6C10.53 1.11 10.28 1 10 1s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42L10 3.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z"],"key-delete":["M19.71 9.29l-6-6A.997.997 0 0013 3H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.28 0 .53-.11.71-.29l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zm-9 3a1.003 1.003 0 01-1.42 1.42L7 11.41 4.71 13.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L5.59 10l-2.3-2.29a1.003 1.003 0 011.42-1.42L7 8.59 9.29 6.3c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L8.41 10l2.3 2.29z"],"key-enter":["M18 2c-.55 0-1 .45-1 1v5c0 2.21-1.79 4-4 4H4.41L6.7 9.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.41 14H13c3.31 0 6-2.69 6-6V3c0-.55-.45-1-1-1z"],"key-escape":["M2 8c.55 0 1-.45 1-1V4.41l6.29 6.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 3H7c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1zm9-6.94V3.1c3.39.49 6 3.38 6 6.9 0 3.87-3.13 7-7 7-3.52 0-6.41-2.61-6.9-6H1.06c.5 4.5 4.31 8 8.94 8a9 9 0 009-9c0-4.63-3.5-8.44-8-8.94z"],"key-option":["M13 4h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm6 12h-4.42L6.87 2.5l-.02.01A.977.977 0 006 2H1c-.55 0-1 .45-1 1s.45 1 1 1h4.42l7.71 13.5.01-.01c.18.3.49.51.86.51h5c.55 0 1-.45 1-1s-.45-1-1-1z"],"key-shift":["M17.74 10.35l-6.99-8.01-.01.01C10.56 2.14 10.3 2 10 2s-.56.14-.74.35l-.01-.01-7 8 .01.01A.95.95 0 002 11c0 .55.45 1 1 1h3v5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-5h3c.55 0 1-.45 1-1 0-.25-.1-.48-.26-.65z"],"key-tab":["M19 13H4.41l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L2 12.59V10c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1s1-.45 1-1v-2.59l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 15H19c.55 0 1-.45 1-1s-.45-1-1-1zm0-12c-.55 0-1 .45-1 1v2.59L14.71 1.3A.965.965 0 0014 1a1.003 1.003 0 00-.71 1.71L15.59 5H1c-.55 0-1 .45-1 1s.45 1 1 1h14.59L13.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 7.41V10c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z"],"known-vehicle":["M19 4a.997.997 0 00-.707.293L14 8.586l-2.293-2.293a1 1 0 00-1.414 1.414l3 3a.997.997 0 001.414 0l5-5A1 1 0 0019 4zm-2.048 7.291c.011.072.048.134.048.209a1.5 1.5 0 01-1.5 1.5c-.225 0-.433-.057-.624-.145-.279.085-.57.145-.876.145a2.99 2.99 0 01-2.121-.879l-3-3 .007-.007A3.027 3.027 0 018.184 8H4V7l1-3h10l.19.568 1.307-1.308c-.336-.356-.758-.658-1.165-.772 0 0-1.74-.488-5.332-.488s-5.332.488-5.332.488c-.67.188-1.424.864-1.674 1.502L2.99 4H3L2 7H1a1 1 0 000 2h.333l-.28.84L1 10v7.5a1.5 1.5 0 103 0V17h12v.5a1.5 1.5 0 003 0V10l-.19-.568-1.858 1.86zM4.5 13a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"],"lab-test":["M13 2a1 1 0 010 2v4l4 8v1a1 1 0 01-1 1H4a1 1 0 01-1-1v-1l4-8V4a1 1 0 110-2h6zm-2 2H9v4l-2 4h6l-2-4V4z"],label:["M3 12h14v-1H3v1zm11-9H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V9l-6-6zm4 12H2V5h11v3H3v1h10v1h5v5zm-4-6V5l4 4h-4z"],layer:["M19.5 9.1l-9-5c-.2-.1-.3-.1-.5-.1s-.3 0-.5.1l-9 5c-.3.2-.5.5-.5.9s.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9s-.2-.7-.5-.9z"],layers:["M.5 6.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9s-.2-.7-.5-.9l-9-5c-.2-.1-.3-.1-.5-.1s-.3 0-.5.1l-9 5c-.3.2-.5.5-.5.9s.2.7.5.9z","M19 9c-.2 0-.3 0-.5.1L10 13.9 1.5 9.1C1.3 9 1.2 9 1 9c-.6 0-1 .4-1 1 0 .4.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9 0-.6-.4-1-1-1z","M19 13c-.2 0-.3 0-.5.1L10 17.9l-8.5-4.7c-.2-.2-.3-.2-.5-.2-.6 0-1 .4-1 1 0 .4.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9 0-.6-.4-1-1-1z"],layout:["M18 6c-1.1 0-2 .9-2 2 0 .37.11.71.28 1.01l-2.27 2.27c-.3-.17-.64-.28-1.01-.28-.93 0-1.71.64-1.93 1.5H8.93c-.22-.86-1-1.5-1.93-1.5-.37 0-.71.11-1.01.28L3.72 9.01C3.89 8.71 4 8.37 4 8c0-.34-.09-.66-.24-.94l3.66-3.38c.31.2.68.32 1.08.32 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .34.09.66.24.94L3.08 6.32C2.77 6.12 2.4 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.37 0 .71-.11 1.01-.28l2.27 2.27c-.17.3-.28.64-.28 1.01s.11.71.28 1.01l-2.27 2.27C2.71 16.11 2.37 16 2 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28.93 0 1.71-.64 1.93-1.5h2.14c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2 0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28 1.1 0 2-.9 2-2s-.9-2-2-2z"],"layout-auto":["M18 13c-.53 0-1.01.21-1.37.55L11.9 10.6c.06-.19.1-.39.1-.6s-.04-.41-.1-.6l4.72-2.95c.37.34.85.55 1.38.55 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .21.04.41.1.6l-4.73 2.96c-.24-.23-.54-.4-.87-.48V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.33.09-.63.26-.87.48L3.9 5.6c.06-.19.1-.39.1-.6 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.53 0 1.01-.21 1.37-.55L8.1 9.4c-.06.19-.1.39-.1.6s.04.41.1.6l-4.72 2.95C3.01 13.21 2.53 13 2 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.21-.04-.41-.1-.6l4.73-2.96c.24.23.54.4.87.48v4.14C8.64 16.29 8 17.07 8 18c0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.33-.09.63-.26.87-.48l4.73 2.96c-.06.18-.1.38-.1.59 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z"],"layout-balloon":["M18 16c-.14 0-.28.02-.42.05l-1.73-3.45c.69-.45 1.14-1.22 1.14-2.1s-.46-1.65-1.14-2.1l1.73-3.45c.14.03.28.05.42.05 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .6.27 1.13.69 1.5l-1.77 3.54c-.14-.02-.28-.04-.42-.04a2.5 2.5 0 00-2.45 2h-4.1A2.5 2.5 0 005.5 8c-.14 0-.28.02-.42.04L3.31 4.5C3.73 4.13 4 3.6 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.14 0 .28-.02.42-.05L4.14 8.4C3.46 8.85 3 9.62 3 10.5s.46 1.65 1.14 2.1l-1.73 3.45A1.84 1.84 0 002 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.6-.27-1.13-.69-1.5l1.77-3.54c.14.02.28.04.42.04a2.5 2.5 0 002.45-2h4.1a2.5 2.5 0 002.45 2c.14 0 .28-.02.42-.04l1.77 3.54c-.42.37-.69.9-.69 1.5 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z"],"layout-circle":["M18.3 8c-.2-.9-.6-1.7-1.1-2.5.2-.3.3-.7.3-1 0-1.1-.9-2-2-2-.4 0-.7.1-1 .3-.8-.5-1.6-.8-2.5-1.1-.1-1-1-1.7-2-1.7S8.2.8 8 1.7c-.9.3-1.7.6-2.5 1.1-.3-.2-.7-.3-1-.3-1.1 0-2 .9-2 2 0 .4.1.7.3 1-.5.8-.8 1.6-1.1 2.5C.8 8.2 0 9 0 10s.8 1.8 1.7 2c.2.9.6 1.7 1.1 2.5-.2.3-.3.7-.3 1 0 1.1.9 2 2 2 .4 0 .7-.1 1-.3.8.5 1.6.8 2.5 1.1.1 1 1 1.7 2 1.7s1.8-.8 2-1.7c.9-.2 1.7-.6 2.5-1.1.3.2.7.3 1 .3 1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1 .5-.8.8-1.6 1.1-2.5 1-.1 1.7-1 1.7-2s-.8-1.8-1.7-2zm-1.8 5.8c-.3-.2-.6-.3-1-.3-1.1 0-2 .9-2 2 0 .4.1.7.3 1-.6.3-1.2.6-1.9.8-.3-.7-1-1.3-1.9-1.3-.8 0-1.6.5-1.9 1.3-.7-.2-1.3-.4-1.9-.8.2-.3.3-.6.3-1 0-1.1-.9-2-2-2-.4 0-.7.1-1 .3-.3-.6-.6-1.2-.8-1.9.8-.3 1.3-1.1 1.3-1.9s-.5-1.6-1.2-1.8c.2-.7.4-1.3.8-1.9.3.2.6.3 1 .3 1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1 .6-.3 1.2-.6 1.9-.8.2.7 1 1.2 1.8 1.2s1.6-.5 1.9-1.3c.7.2 1.3.4 1.9.8-.2.3-.3.6-.3 1 0 1.1.9 2 2 2 .4 0 .7-.1 1-.3.3.6.6 1.2.8 1.9-.8.3-1.3 1.1-1.3 1.9s.5 1.6 1.2 1.8c-.1.7-.4 1.4-.7 2z"],"layout-grid":["M2 0a2 2 0 100 4 2 2 0 100-4zM10 0a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM10 16a2 2 0 100 4 2 2 0 100-4zM2 16a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM10 8a2 2 0 100 4 2 2 0 100-4z"],"layout-group-by":["M2 2a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM2 14a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM13 12a2 2 0 100 4 2 2 0 100-4zM13 4a2 2 0 100 4 2 2 0 100-4z"],"layout-hierarchy":["M18.5 16.07v-4.14c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2-.93 0-1.71.64-1.93 1.5h-4.14c-.18-.7-.73-1.25-1.43-1.43V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.7.18-1.25.73-1.43 1.43H3.93C3.71 8.64 2.93 8 2 8c-1.1 0-2 .9-2 2 0 .93.64 1.71 1.5 1.93v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.7-.18 1.25-.73 1.43-1.43h4.14c.18.7.73 1.25 1.43 1.43v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.7-.18 1.25-.73 1.43-1.43h4.14c.18.7.73 1.25 1.43 1.43v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93z"],"layout-linear":["M16.5 7a2.5 2.5 0 00-2.45 2h-2.1a2.5 2.5 0 00-4.9 0h-2.1a2.5 2.5 0 100 1h2.1a2.5 2.5 0 004.9 0h2.1a2.5 2.5 0 102.45-3z"],"layout-skew-grid":["M2 0a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM2 16a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM10 12a2 2 0 100 4 2 2 0 100-4zM10 4a2 2 0 100 4 2 2 0 100-4z"],"layout-sorted-clusters":["M2 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm16 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-8 4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],learning:["M10.551 1.127a1.256 1.256 0 00-1.102 0L.456 5.89c-.608.309-.608.913 0 1.222l8.993 4.762c.334.17.767.17 1.102 0l8.992-4.762c.61-.309.61-.913 0-1.222l-8.992-4.762z","M18 6.5l.016 4.514c.002.548.447.99.994.99a.99.99 0 00.99-.99V6.5h-2zM3.366 10.033l6.401 3.358a.5.5 0 00.465 0l6.406-3.358a.25.25 0 01.366.221v5.109a.25.25 0 01-.139.224l-6.64 3.302a.5.5 0 01-.446 0l-6.64-3.302A.25.25 0 013 15.363v-5.108a.25.25 0 01.366-.222z"],"left-join":["M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm.6 2.05c.55 1.2.86 2.54.86 3.95s-.31 2.75-.86 3.95c1.9-.31 3.36-1.96 3.36-3.95S16.5 6.36 14.6 6.05zM10 5.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z"],"less-than":["M7.162 10l9.154 3.052a1 1 0 01-.632 1.897l-12-4c-.912-.304-.912-1.594 0-1.897l12-4a1 1 0 01.632 1.897L7.162 10z"],"less-than-or-equal-to":["M16.316 11.051L7.162 8l9.154-3.051a1 1 0 10-.632-1.898l-12 4c-.912.304-.912 1.594 0 1.898l12 4a1 1 0 10.632-1.898zM16 15H4a1 1 0 100 2h12a1 1 0 100-2z"],lifesaver:["M8.143 14.644L7.028 17.43c.919.368 1.922.57 2.972.57s2.053-.202 2.972-.57l-1.115-2.786A4.986 4.986 0 0110 15a4.986 4.986 0 01-1.857-.356zm-2.787-2.787A4.986 4.986 0 015 10c0-.656.126-1.283.356-1.857L2.57 7.028A7.978 7.978 0 002 10c0 1.05.202 2.053.57 2.972l2.786-1.115zm2.787-6.5A4.986 4.986 0 0110 5c.656 0 1.283.126 1.857.356l1.115-2.786A7.978 7.978 0 0010 2c-1.05 0-2.053.202-2.972.57l1.115 2.786zm6.5 2.786c.23.574.357 1.2.357 1.857 0 .656-.126 1.283-.356 1.857l2.786 1.115c.368-.919.57-1.922.57-2.972s-.202-2.053-.57-2.972l-2.786 1.115zM10 13a3 3 0 100-6 3 3 0 000 6zm0 7C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10z"],lightbulb:["M6.33 13.39c0 .34.27.61.6.61h6.13c.33 0 .6-.27.6-.61C14.03 9.78 16 9.4 16 6.09 16 2.72 13.31 0 10 0S4 2.72 4 6.09c0 3.31 1.97 3.69 2.33 7.3zM13 15H7c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-1 3H8c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1z"],link:["M10.85 11.98l-4.44 4.44-1 1c-.36.36-.86.58-1.41.58-1.1 0-2-.9-2-2 0-.55.22-1.05.59-1.41l5.44-5.44C7.69 9.06 7.36 9 7 9c-1.11 0-2.09.46-2.82 1.18l-.01-.01-3 3 .01.01C.46 13.91 0 14.89 0 16c0 2.21 1.79 4 4 4 1.11 0 2.09-.46 2.82-1.18l.01.01 3-3-.01-.01C10.54 15.09 11 14.11 11 13c0-.36-.06-.69-.15-1.02zM20 4c0-2.21-1.79-4-4-4-1.11 0-2.09.46-2.82 1.18l-.01-.01-3 3 .01.01C9.46 4.91 9 5.89 9 7c0 .36.06.69.15 1.02l4.44-4.44 1-1c.36-.36.86-.58 1.41-.58 1.1 0 2 .9 2 2 0 .55-.22 1.05-.59 1.41l-5.44 5.44c.34.09.67.15 1.03.15 1.11 0 2.09-.46 2.82-1.18l.01.01 3-3-.01-.01C19.54 6.09 20 5.11 20 4zM5 14a1.003 1.003 0 001.71.71l8-8a1.003 1.003 0 00-1.42-1.42l-2 2-2 2-2 2-2 2c-.18.18-.29.43-.29.71z"],list:["M1.03 1C.46 1 0 1.46 0 2.03v.95C0 3.54.46 4 1.03 4h17.95C19.54 4 20 3.54 20 2.97v-.94C20 1.46 19.54 1 18.97 1H1.03zM0 17.97C0 18.54.46 19 1.03 19h17.95c.56 0 1.03-.46 1.03-1.03v-.95c0-.56-.46-1.03-1.03-1.03H1.03C.46 16 0 16.46 0 17.03v.94zM0 12.97C0 13.54.46 14 1.03 14h17.95c.56 0 1.03-.46 1.03-1.03v-.95c0-.56-.46-1.03-1.03-1.03H1.03C.46 11 0 11.46 0 12.03v.94zM0 7.97C0 8.54.46 9 1.03 9h17.95C19.54 9 20 8.54 20 7.97v-.94C20 6.46 19.54 6 18.97 6H1.03C.46 6 0 6.46 0 7.03v.94z"],"list-columns":["M0 2.973v-.936C0 1.468.46 1.01 1.029 1H7.97C8.541 1 9 1.468 9 2.027v.946C9 3.542 8.53 4 7.971 4H1.03C.459 4 0 3.542 0 2.973zm0 5v-.936C0 6.468.46 6.01 1.029 6H7.97C8.541 6 9 6.468 9 7.027v.946C9 8.542 8.53 9 7.971 9H1.03C.459 9 0 8.542 0 7.973zm0 5v-.936C0 11.468.46 11.01 1.029 11H7.97C8.541 11 9 11.468 9 12.027v.946C9 13.542 8.53 14 7.971 14H1.03C.459 14 0 13.542 0 12.973zm0 5v-.936C0 16.468.46 16.01 1.029 16H7.97C8.541 16 9 16.468 9 17.027v.946C9 18.542 8.53 19 7.971 19H1.03C.459 19 0 18.542 0 17.973zm11-15v-.936c0-.569.46-1.027 1.029-1.037h6.942C19.541 1 20 1.468 20 2.027v.946C20 3.542 19.53 4 18.971 4H12.03C11.459 4 11 3.542 11 2.973zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942C19.541 6 20 6.468 20 7.027v.946C20 8.542 19.53 9 18.971 9H12.03C11.459 9 11 8.542 11 7.973zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942c.57 0 1.029.468 1.029 1.027v.946c0 .569-.47 1.027-1.029 1.027H12.03c-.57 0-1.029-.458-1.029-1.027zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942c.57 0 1.029.468 1.029 1.027v.946c0 .569-.47 1.027-1.029 1.027H12.03c-.57 0-1.029-.458-1.029-1.027z"],"list-detail-view":["M8 6H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM8 1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm11 0h-7c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z"],locate:["M10 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm9 1h-1.07c-.45-3.61-3.32-6.45-6.93-6.91V1c0-.55-.45-1-1-1S9 .45 9 1v1.09C5.39 2.55 2.52 5.39 2.07 9H1c-.55 0-1 .45-1 1s.45 1 1 1h1.07c.45 3.61 3.32 6.45 6.93 6.91V19c0 .55.45 1 1 1s1-.45 1-1v-1.09c3.61-.46 6.48-3.29 6.93-6.91H19c.55 0 1-.45 1-1s-.45-1-1-1zm-4 2h.9a5.98 5.98 0 01-4.9 4.91V15c0-.55-.45-1-1-1s-1 .45-1 1v.91A5.98 5.98 0 014.1 11H5c.55 0 1-.45 1-1s-.45-1-1-1h-.9A5.98 5.98 0 019 4.09V5c0 .55.45 1 1 1s1-.45 1-1v-.91A5.98 5.98 0 0115.9 9H15c-.55 0-1 .45-1 1s.45 1 1 1z"],lock:["M15.93 9H14V4.99c0-2.21-1.79-4-4-4s-4 1.79-4 4V9H3.93c-.55 0-.93.44-.93.99v8c0 .55.38 1.01.93 1.01h12c.55 0 1.07-.46 1.07-1.01v-8c0-.55-.52-.99-1.07-.99zM8 9V4.99c0-1.1.9-2 2-2s2 .9 2 2V9H8z"],"log-in":["M19 0h-8c-.55 0-1 .45-1 1s.45 1 1 1h7v16h-7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 10c0-.28-.11-.53-.29-.71l-5-5a1.003 1.003 0 00-1.42 1.42L11.59 9H1c-.55 0-1 .45-1 1s.45 1 1 1h10.59L8.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5-5c.18-.18.29-.43.29-.71z"],"log-out":["M19.71 9.29l-5-5a1.003 1.003 0 00-1.42 1.42L16.59 9H6c-.55 0-1 .45-1 1s.45 1 1 1h10.59l-3.29 3.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5-5c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM9 18H2V2h7c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z"],manual:["M20 1.1a.976.976 0 00-.83-.88C15.15-.43 12.07.34 10 2.5 7.93.34 4.85-.43.84.22.37.3.03.67 0 1.1v15.01c0 .07 0 .14.01.21.09.52.61.88 1.15.79 3.85-.62 6.4.16 8 2.46.02.02.03.04.05.07.02.02.04.04.06.07l.01.01a1.07 1.07 0 00.28.19c.01 0 .01.01.02.01.03.01.07.03.1.04.01 0 .02.01.04.01.03.01.07.02.1.02.01 0 .02 0 .04.01H10c.04 0 .09 0 .13-.01.01 0 .03 0 .04-.01.03-.01.06-.01.1-.02.01 0 .03-.01.04-.01.03-.01.07-.02.1-.04.01 0 .02-.01.03-.01.07-.03.13-.07.19-.11.01 0 .01-.01.02-.01.02-.02.04-.03.06-.05.01-.01.02-.02.03-.02l.05-.05c.01-.01.02-.02.02-.03.01-.02.02-.03.04-.05 1.61-2.3 4.15-3.09 8-2.46.54.09 1.06-.26 1.15-.79-.01-.05 0-.09 0-.13V1.1zM9 16.63c-1.78-1.31-4.12-1.83-7-1.55V2c3.26-.37 5.51.39 7 2.35v12.28zm9-1.56c-2.88-.28-5.22.24-7 1.55V4.34c1.49-1.96 3.74-2.71 7-2.35v13.08z"],"manually-entered-data":["M1 12h4.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm16.77-3.94l1.65-1.65c.36-.36.58-.86.58-1.41 0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.82zM1 4h12.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zM0 15c0 .55.45 1 1 1h.34l2-2H1c-.55 0-1 .45-1 1zm1-7h8.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 2h-.34l-2 2H19c.55 0 1-.45 1-1s-.45-1-1-1zm0 4h-4.34l-2 2H19c.55 0 1-.45 1-1s-.45-1-1-1zM4 19l4.41-1.59-2.81-2.79L4 19zM14.23 5.94l-7.65 7.65 2.83 2.83 7.65-7.65-2.83-2.83z"],map:["M19.54 4.18l.01-.02-6-4-.01.02C13.39.08 13.21 0 13 0s-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v14c0 .35.19.64.46.82l-.01.02 6 4 .01-.02c.15.1.33.18.54.18s.39-.08.54-.18l.01.02L13 16.2l5.45 3.63.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1V5c0-.35-.19-.64-.46-.82zM6 17.13l-4-2.67V2.87l4 2.67v11.59zm6-2.67l-4 2.67V5.54l4-2.67v11.59zm6 2.67l-4-2.67V2.87l4 2.67v11.59z"],"map-create":["M18 9.22v7.91l-4-2.67V9.22c-.61-.55-1-1.33-1-2.22-.35 0-.69-.07-1-.18v7.65l-4 2.67V5.54l2.02-1.35c0-.06-.02-.13-.02-.19 0-1.66 1.34-3 3-3 0-.34.07-.66.17-.97C13.12.02 13.06 0 13 0c-.21 0-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v14c0 .35.19.64.46.82l-.01.02 6 4 .01-.02c.15.1.33.18.54.18s.39-.08.54-.18l.01.02L13 16.2l5.45 3.63.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1V6.82c-.31.11-.65.18-1 .18 0 .89-.39 1.67-1 2.22zM6 17.13l-4-2.67V2.87l4 2.67v11.59zM12 4c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1z"],"map-marker":["M9.98 0c-3.87 0-7 2.98-7 6.67 0 3.68 7 13.33 7 13.33s7-9.65 7-13.33c0-3.68-3.14-6.67-7-6.67zm0 10c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"],maximize:["M19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zM8 11c-.28 0-.53.11-.71.29L2 16.59V14c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1H3.41l5.29-5.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1z"],media:["M15 9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-7H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 13l-6-5-2 2-4-5-4 8V4h16v11z"],menu:["M1 6h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 3H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],"menu-closed":["M8 6h11c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM4 6c-.28 0-.53.11-.71.29l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3A1.003 1.003 0 005 13V7c0-.55-.45-1-1-1zm15 8H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0-5H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1z"],"menu-open":["M12 9H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0-10H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm7.71 5.29l-3-3A1.003 1.003 0 0015 7v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],"merge-columns":["M6.71 6.29a1.003 1.003 0 00-1.42 1.42L6.59 9H2V2h5v2.18c.42.15.8.39 1.11.7l.01-.01.88.89V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4.76l-.88.88-.01-.01c-.31.31-.69.56-1.11.71V18H2v-7h4.59L5.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM19 0h-7c-.55 0-1 .45-1 1v4.76l.88-.88.01.01c.31-.31.69-.55 1.11-.7V2h5v7h-4.59l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L13.41 11H18v7h-5v-2.18c-.42-.15-.8-.39-1.11-.7l-.01.01-.88-.89V19c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"merge-links":["M10 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm8-5c-.93 0-1.71.64-1.93 1.5H14V4c0-2.21-1.79-4-4-4S6 1.79 6 4v5.5H3.93C3.71 8.64 2.93 8 2 8c-1.1 0-2 .9-2 2s.9 2 2 2c.93 0 1.71-.64 1.93-1.5H6V16c0 2.21 1.79 4 4 4s4-1.79 4-4v-5.5h2.07c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2s-.9-2-2-2zm-5 8c0 1.66-1.34 3-3 3s-3-1.34-3-3V4c0-1.66 1.34-3 3-3s3 1.34 3 3v12zM10 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],minimize:["M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zM20 1a1.003 1.003 0 00-1.71-.71L13 5.59V3c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1h-2.59l5.29-5.29c.19-.18.3-.43.3-.71z"],minus:["M16 9H4c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z"],"mobile-phone":["M15 0H5c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 19c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4-3H6V3h8v13z"],"mobile-video":["M19 5c-.28 0-.53.11-.71.29L15 8.59V5c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h13c.55 0 1-.45 1-1v-3.59l3.29 3.29c.18.19.43.3.71.3.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z"],modal:["M19 1a1 1 0 011 1v16a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h18zm-1 4H2v12h16V5zm-3-3h-2v2h2V2zm3 0h-2v2h2V2z"],"modal-filled":["M20 5v13a1 1 0 01-1 1H1a1 1 0 01-1-1V5h20zm-3-4h2a1 1 0 011 1v1h-3V1zm-2 2H0V2a1 1 0 011-1h14v2z"],moon:["M19 14.15A9.94 9.94 0 019.94 20C4.45 20 0 15.55 0 10.06 0 6.03 2.4 2.56 5.85 1a9.811 9.811 0 00-.88 4.09c0 5.49 4.45 9.94 9.94 9.94 1.46 0 2.84-.31 4.09-.88z"],more:["M3.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM17.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM10.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5z"],mountain:["M20 16H4l7-11h1l2 2h1l5 9zm-4-5l-1.5-3h-1l-1-1-1-1L8 11.5l3-1.5 1 1 1-1 3 1zM8.055 8L2.79 16H0l7-8h1.055z"],move:["M19.71 9.29l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 9H11V3.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C10.53.11 10.28 0 10 0s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 3.41V9H3.41L4.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 11H9v5.59L7.71 15.3A.965.965 0 007 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L11 16.59V11h5.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z"],mugshot:["M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18h-.07c-.05-.2-.12-.42-.22-.67-.46-1.05-2.68-1.75-4.16-2.4-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.67 3.67 0 00-1.29-1.86C11.7 3.25 10.81 3 10.02 3s-1.68.25-2.31.73c-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.17 1.51-.17 2.14v.08c-.24.09-.44.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59-1.48.65-3.7 1.35-4.16 2.4-.12.27-.18.49-.23.69H2V2h16v16z"],"multi-select":["M19 3H7c-.55 0-1 .45-1 1v1h12v6h1c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-6 6H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm-1 6H2v-4h10v4zm4-9H4c-.55 0-1 .45-1 1v1h12v6h1c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z"],music:["M19 0c-.08 0-.16.03-.24.05V.03l-12 3v.02C6.33 3.16 6 3.53 6 4v11.35c-.59-.22-1.27-.35-2-.35-2.21 0-4 1.12-4 2.5S1.79 20 4 20c1.94 0 3.55-.86 3.92-2H8V7.78l10-2.5v7.07c-.59-.22-1.27-.35-2-.35-2.21 0-4 1.12-4 2.5s1.79 2.5 4 2.5c1.94 0 3.55-.86 3.92-2H20V1c0-.55-.45-1-1-1z"],"new-drawing":["M18.7 13.7c.5 0 1 .4 1 1 0 .257-.073.44-.22.614l-.08.086-4 4c-.2.2-.4.3-.7.3-.6 0-1-.5-1-1 0-.257.073-.44.22-.614L14 18l4-4c.2-.2.4-.3.7-.3zM1.8 0l8.378 2.982A3.003 3.003 0 0013 7a3.003 3.003 0 003.877 2.87l.723 2.53.049.06a.41.41 0 01.051.24c0 .167-.07.403-.208.593l-.092.107-4 4c-.2.2-.4.3-.7.3-.075 0-.15-.056-.225-.084L12.4 17.6l-7-2-.112-.042c-.223-.094-.431-.244-.542-.45L4.7 15 0 1.8l.5-.6L7 7.7c-.2.3-.3.6-.3 1 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2a1.68 1.68 0 00-.871.22L7.7 7 1.2.5l.6-.5zM16 0c.55 0 1 .45 1 1v2h2c.55 0 1 .45 1 1s-.45 1-1 1h-2v2c0 .432-.278.803-.664.941l-.01.004A.989.989 0 0116 8c-.55 0-1-.45-1-1V5h-2c-.55 0-1-.45-1-1l.007-.116C12.065 3.388 12.489 3 13 3h2V1c0-.55.45-1 1-1z"],"new-grid-item":["M8 0H1C.45 0 0 .45 0 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm0 11H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1zm6 7h-1v-1c0-.55-.45-1-1-1s-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1s-.45-1-1-1zm5-7h-2c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1zm0-11h-7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 11h-2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1zm5 5c-.55 0-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z"],"new-layer":["M11.513 2.663A2 2 0 0013 6h1v1a2 2 0 104 0v-.733l1.5.833c.3.2.5.5.5.9s-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5C.2 8.7 0 8.4 0 8s.2-.7.5-.9l9-5c.2-.1.3-.1.5-.1s.3 0 .5.1l1.013.563zM17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2z"],"new-layers":["M17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2zm-1.252 5.984L10.5 11.9c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5C.2 6.7 0 6.4 0 6s.2-.7.5-.9l9-5c.2-.1.3-.1.5-.1s.3 0 .5.1L13.92 2H13a2 2 0 100 4h1v1a2 2 0 001.748 1.984zm2.07-1.15C17.935 7.58 18 7.298 18 7V6h1c.353 0 .684-.091.972-.251.018.078.028.162.028.251 0 .4-.2.7-.5.9l-1.682.934zM19 9c.6 0 1 .4 1 1 0 .4-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5c-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .2 0 .3 0 .5.1l8.5 4.8 8.5-4.8c.2-.1.3-.1.5-.1zm0 4c.6 0 1 .4 1 1 0 .4-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5c-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .2 0 .3 0 .5.2l8.5 4.7 8.5-4.8c.2-.1.3-.1.5-.1z"],"new-link":["M14.5 12a2.5 2.5 0 00-2.45 2h-7.1a2.5 2.5 0 100 1h7.1a2.5 2.5 0 102.45-3zM19 5h-2V3c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V7h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"new-object":["M12 4c0 .6.4 1 1 1h2v2c0 .6.4 1 1 1 .5 0 1-.4 1-1V5h2c.5 0 1-.4 1-1s-.5-1-1-1h-2V1c0-.6-.5-1-1-1-.6 0-1 .4-1 1v2h-2c-.6 0-1 .5-1 1zm7 3c0 1.7-1.3 3-3 3s-3-1.3-3-3c-1.7 0-3-1.3-3-3s1.3-3 3-3c0-.2 0-.4.1-.5-1-.3-2-.5-3.1-.5C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10c0-1.1-.2-2.1-.5-3H19z"],"new-person":["M11.41 15.92c-1.46-.65-1.26-1.05-1.31-1.59-.01-.07-.01-.15-.01-.23.5-.45.91-1.07 1.18-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.33-.07.53-.44.6-.78.08-.14.23-.48.2-.87-.05-.5-.24-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5-.22-.73-.67-1.4-1.27-1.86C9.58 4.25 8.7 4 7.92 4c-.78 0-1.66.25-2.28.73-.61.47-1.06 1.13-1.27 1.86-.05.16-.08.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.43.32-.48.83-.04.39.12.73.2.87.08.35.28.72.62.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.69 1.35 1.21 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.36 1.59-1.46.65-3.66 1.35-4.11 2.4C-.14 19.38.04 20 .04 20h15.75s.18-.62-.27-1.67c-.45-1.06-2.65-1.75-4.11-2.41zM18.87 3h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"new-prescription":["M11.95 10.23c.16-.18.22-.22.46-.22h1.48c.25 0 .47.08.59.33.1.2.09.41-.05.66l-2.71 3.58L14.88 19c.13.21.16.46.03.69-.12.21-.34.31-.57.31H12.7c-.31 0-.56-.17-.7-.44l-1.9-2.67-1.93 2.68c-.15.27-.42.43-.73.43H5.98c-.25 0-.47-.08-.59-.33-.1-.2-.09-.41.05-.66l3.09-4.35L4.26 9H3v4.32c0 .41-.3.69-.7.69H.7c-.41 0-.7-.28-.7-.69V.69C0 .28.3 0 .7 0h4.42c.71 0 1.36.1 1.94.3.59.2 1.11.49 1.54.87.44.38.78.84 1.02 1.39.25.54.37 1.13.37 1.77 0 1.01-.28 1.88-.84 2.6-.43.54-1.35 1.29-2 1.59l3.09 3.94 1.71-2.23zM4.71 6.04c.71 0 1.45-.16 1.81-.46.33-.28.5-.69.5-1.25s-.17-.97-.5-1.25c-.35-.3-1.1-.46-1.81-.46h-1.7v3.42h1.7zM19 3c.55 0 1 .45 1 1s-.45 1-1 1h-2v2c0 .55-.45 1-1 1s-1-.45-1-1V5h-2c-.55 0-1-.45-1-1s.45-1 1-1h2V1c0-.55.45-1 1-1s1 .45 1 1v2h2z"],"new-text-box":["M19 3h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1zM5 7.5v1c0 .28.22.5.5.5s.5-.22.5-.5V8h2v7h-.5c-.28 0-.5.22-.5.5s.22.5.5.5h2c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H9V8h2v.5c0 .28.22.5.5.5s.5-.22.5-.5v-1c0-.28-.22-.5-.5-.5h-6c-.28 0-.5.22-.5.5zM16 9c-.55 0-1 .45-1 1v8H2V5h8c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1h15c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1z"],ninja:["M20 6s-2.98 2.43-6.12 2.19C13.52 5.31 12.05 0 6 0c0 0 2.41 2.99 2.16 6.12C5.27 6.49 0 7.97 0 14c0 0 2.98-2.43 6.11-2.19C6.47 14.69 7.94 20 14 20c0 0-2.42-2.99-2.16-6.13C14.73 13.51 20 12.02 20 6zm-10 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"],"not-equal-to":["M9.487 7l.532-3.196a1 1 0 011.962.392L11.513 7H16a1 1 0 010 2h-4.82l-.333 2H16a1 1 0 010 2h-5.487l-.532 3.196a1 1 0 01-1.962-.392L8.487 13H4a1 1 0 010-2h4.82l.333-2H4a1 1 0 110-2h5.487z"],notifications:["M10 20c1.1 0 2-.9 2-2H8c0 1.1.9 2 2 2zm7-5c-.55 0-1-.45-1-1V8c0-2.61-1.67-4.81-4-5.63V2c0-1.1-.9-2-2-2S8 .9 8 2v.37C5.67 3.19 4 5.39 4 8v6c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z"],"notifications-updated":["M10 20c1.1 0 2-.9 2-2H8c0 1.1.9 2 2 2zm2-17.834A2.994 2.994 0 008 4.99c0 .808.319 1.557.876 2.114l2.97 2.99a2.99 2.99 0 004.154.072V14c0 .55.45 1 1 1s1 .45 1 1-.45 1-1 1H3c-.55 0-1-.45-1-1s.45-1 1-1 1-.45 1-1V8c0-2.61 1.67-4.81 4-5.63V2c0-1.1.9-2 2-2s2 .9 2 2v.166zm1.26 6.514l-2.97-2.99a.973.973 0 01-.29-.7c0-.55.44-1 .99-1 .27 0 .52.11.7.29l2.28 2.28 4.27-4.27a.99.99 0 01.7-.29c.55 0 1 .45 1 1 0 .28-.11.53-.3.7l-4.98 4.98a.99.99 0 01-1.4 0z"],"numbered-list":["M1.74 9.01h1.27V1h-.95c-.04.24-.12.45-.26.62-.13.17-.29.3-.47.41-.19.11-.4.18-.63.23-.23.04-.46.07-.71.07v1.03h1.75v5.65zm.43 7.93c.18-.14.37-.28.58-.43.21-.14.42-.29.63-.45.21-.16.41-.33.61-.5.2-.18.37-.38.52-.59.15-.21.28-.45.37-.7.09-.25.14-.54.14-.85 0-.25-.04-.52-.12-.8-.08-.28-.21-.54-.39-.78-.19-.24-.43-.44-.73-.59-.3-.17-.68-.25-1.12-.25-.41 0-.77.08-1.08.23-.32.16-.58.37-.8.64-.22.27-.38.59-.49.96-.11.37-.16.77-.16 1.21h1.19c.01-.28.03-.53.08-.77s.12-.45.21-.62c.09-.18.22-.31.38-.42.16-.1.35-.15.59-.15.26 0 .47.05.63.14.16.09.29.21.38.35.09.14.15.29.18.45.03.16.05.31.05.45-.01.31-.08.58-.22.81-.14.24-.32.45-.53.66-.22.2-.45.39-.71.57-.26.18-.51.36-.74.54-.5.36-.89.78-1.17 1.27-.3.47-.45 1.04-.46 1.69H5v-1.14H1.43c.05-.17.14-.33.27-.49.13-.15.29-.3.47-.44zM18 4.02H8c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-1c0-.56-.45-1-1-1zm0 9H8c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-1c0-.56-.45-1-1-1z"],numerical:["M2.39 5.75c-.17.21-.38.39-.63.52s-.52.23-.83.29c-.3.05-.61.08-.93.08v1.24h2.49V15h1.49V4.98H2.73c-.05.31-.17.57-.34.77zm17.2 4.71c-.27-.44-.65-.71-1.14-.82v-.02c.42-.16.72-.43.92-.79.2-.36.29-.79.29-1.27 0-.42-.08-.8-.23-1.12-.15-.33-.36-.59-.62-.8-.26-.21-.55-.37-.87-.48-.32-.11-.65-.16-.98-.16-.43 0-.82.08-1.16.25-.34.16-.63.39-.87.69-.24.29-.43.64-.57 1.04-.14.4-.22.83-.23 1.3h1.39c-.01-.25.02-.49.07-.72.06-.23.14-.44.26-.63s.27-.34.45-.45c.18-.11.39-.17.63-.17.39 0 .71.12.96.37s.37.58.37.99c0 .29-.05.54-.16.74-.11.2-.25.36-.43.47-.18.11-.38.19-.61.24-.23.05-.46.06-.68.05v1.17c.28-.01.55 0 .81.03s.5.1.71.21c.21.11.38.28.51.5.13.22.2.52.2.89 0 .55-.16.97-.47 1.27-.31.3-.7.45-1.17.45-.55 0-.95-.19-1.23-.58-.27-.39-.4-.88-.38-1.46h-1.39c.01.5.08.96.21 1.38.13.41.32.77.57 1.06.25.29.56.52.93.68.37.16.8.24 1.3.24.41 0 .79-.07 1.16-.21.37-.14.69-.33.96-.58.28-.25.5-.56.66-.92a3 3 0 00.24-1.23c0-.64-.14-1.17-.41-1.61zM8.58 12.41c.21-.18.45-.36.7-.53.25-.18.5-.36.75-.56.25-.2.49-.41.73-.63.23-.22.44-.47.63-.74.18-.27.33-.56.44-.88.11-.32.16-.67.16-1.07 0-.32-.05-.65-.14-1-.09-.35-.25-.68-.47-.97-.22-.3-.51-.55-.87-.74-.36-.2-.81-.29-1.35-.29-.49 0-.93.1-1.3.29-.37.18-.69.44-.95.78-.26.33-.45.73-.58 1.2-.13.46-.2.96-.2 1.5h1.43c.01-.35.04-.67.09-.97.05-.3.14-.56.25-.78.11-.22.26-.39.45-.52s.43-.19.71-.19c.31 0 .56.06.75.18.19.12.34.26.45.43.11.17.18.36.22.56.04.2.06.39.06.57-.01.38-.1.72-.26 1.02-.15.3-.37.57-.63.83-.26.25-.54.49-.85.71-.31.22-.61.45-.89.68-.6.45-1.06.98-1.41 1.58-.35.61-.52 1.32-.53 2.13h6.01v-1.43H7.69c.06-.21.17-.42.33-.61s.34-.38.56-.55z"],office:["M19 6h-5V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h4v-6h4v6h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM6 12H2V8h4v4zm0-6H2V2h4v4zm6 6H8V8h4v4zm0-6H8V2h4v4zm6 11h-4v-3h4v3zm0-5h-4V8h4v4z"],offline:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM7 18l2-7H5l8-9-2 7h4l-8 9z"],"oil-field":["M19 17.99h-1.36l-4.35-9.57 2.91-.86 1.66 4.1c.11.27.43.4.72.31.12-.04.22-.11.28-.2.06-.11 1.47-2.08 1.05-5.6C19.79 5.12 19.3 0 16.01 0 14.89.01 13.99.83 14 1.84c0 .19.04.38.1.56l1.34 3.31L.72 10.03v.02c-.41.12-.72.49-.72.94 0 .55.45 1 1 1 .1 0 .19-.03.28-.06v.02l2-.59 1.47 6.63H3c-.55 0-1 .45-1 1s.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1zM5.2 10.8l3.95-1.16-2.83 6.22L5.2 10.8zm2.35 7.19l3.95-8.68 3.95 8.68h-7.9z"],"one-column":["M14.94 0h-4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-8 6c-.28 0-.53.11-.71.29l-3 3c-.18.18-.29.43-.29.71s.11.53.29.71l3 3A1.003 1.003 0 007.94 13V7c0-.55-.45-1-1-1z"],outdated:["M10 0c5.52 0 10 4.48 10 10s-4.48 10-10 10S0 15.52 0 10c0-.55.45-1 1-1s1 .45 1 1c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8C7.47 2 5.22 3.17 3.76 5H5c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1s1 .45 1 1v2.05C3.82 1.6 6.71 0 10 0zm1 16H9v-2h2v2zm0-3H9V4h2v9z"],"page-layout":["M19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM7 17H2V8h5v9zm11 0H8V8h10v9zm0-10H2V3h16v4z"],"panel-stats":["M1 1h18a1 1 0 011 1v15a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm1 2v13h16V3H2zm9 0h1v13h-1V3zm2 7h3.952v1H13v-1zm0 2h3.952v1H13v-1zm0 2h3.952v1H13v-1zm0-6h3.952v1H13V8zm0-2h3.952v1H13V6zm0-2h3.952v1H13V4z"],"panel-table":["M19 1H1c-.6 0-1 .4-1 1v15c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zm-9 11H7V9h3v3zm0-4H7V5h3v3zm-8 8V3h4v13H2zm5 0v-3h3v3H7zm11 0h-7v-3h7v3zm0-4h-7V9h7v3zm0-4h-7V5h7v3z"],paperclip:["M18.35 2.67A5.664 5.664 0 0014.33 1c-1.44 0-2.89.56-3.99 1.67l-9.16 9.27C.4 12.73 0 13.78 0 14.83s.39 2.1 1.18 2.9c.78.79 1.82 1.18 2.85 1.18 1.04 0 2.07-.39 2.87-1.2l9.14-9.27c.96-.96.96-2.5.02-3.45-.94-.95-2.49-.96-3.44 0l-7.59 7.69c-.31.32-.3.83.01 1.14.31.31.81.31 1.13.02l7.59-7.69c.31-.31.84-.31 1.13-.02.31.31.31.85 0 1.16l-9.14 9.27c-.93.95-2.54.93-3.45.02-.94-.95-.92-2.55.02-3.49l9.16-9.25c1.55-1.56 4.18-1.59 5.72-.03 1.56 1.57 1.55 4.26 0 5.82l-8.89 9.02c-.3.31-.3.81.01 1.11.3.3.79.31 1.1.01v.01l8.91-9.02A5.645 5.645 0 0020 6.73c0-1.48-.55-2.94-1.65-4.06z"],paragraph:["M16.5 1H7C4.2 1 2 3.2 2 6s2.2 5 5 5v6.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V4h2v13.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V4h1.5c.8 0 1.5-.7 1.5-1.5S17.3 1 16.5 1z"],path:["M18 0H2C.9 0 0 .9 0 2s.9 2 2 2h7v4H4c-1.1 0-2 .9-2 2s.9 2 2 2h5v4H6c-1.1 0-2 .9-2 2s.9 2 2 2h8c1.1 0 2-.9 2-2s-.9-2-2-2h-3v-4h5c1.1 0 2-.9 2-2s-.9-2-2-2h-5V4h7c1.1 0 2-.9 2-2s-.9-2-2-2z"],"path-search":["M4 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 11.69l-5-2.5v-3.63c-.32.11-.66.22-1 .29v3.32l-6 2.57v-7.25c-.36-.27-.69-.57-1-.9v8.1l-5-2.5V10c.55 0 1-.45 1-1s-.45-1-1-1V1.31l3.43 1.71c.11-.31.24-.62.39-.92L.72.05A.545.545 0 00.5 0C.22 0 0 .22 0 .5v16c0 .2.12.36.28.44l6 3c.07.04.14.06.22.06.07 0 .14-.01.2-.04l6.79-2.91 5.79 2.9c.07.03.14.05.22.05.28 0 .5-.22.5-.5v-4.21c-.31.13-.64.21-1 .21v3.19zM10 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3-1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6.72-.94l-1.43-.72c.2.43.36.89.48 1.36l.23.11V5.5c-.55 0-1 .45-1 1s.45 1 1 1v1.96l1 1V3.5c0-.2-.12-.36-.28-.44zm-3.69 5.56c.14-.21.27-.42.38-.65.02-.04.04-.07.05-.11.11-.22.2-.45.28-.69v-.01c.07-.24.13-.48.17-.73l.03-.17c.04-.25.06-.5.06-.76C17 2.46 14.54 0 11.5 0S6 2.46 6 5.5 8.46 11 11.5 11c.26 0 .51-.02.76-.06l.17-.03c.25-.04.49-.1.73-.17h.01c.24-.08.47-.17.69-.28.04-.02.07-.03.11-.05.23-.11.44-.24.65-.38l.18.18 3.5 3.5c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71l-3.68-3.67zm-4.53.88c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"],pause:["M7 3H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm9 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],people:["M16.94 17a4.92 4.92 0 00-.33-1.06c-.45-.97-1.37-1.52-3.24-2.3-.17-.07-.76-.31-.77-.32-.1-.04-.2-.08-.28-.12.05-.14.04-.29.06-.45 0-.05.01-.11.01-.16-.25-.21-.47-.48-.65-.79.22-.34.41-.71.56-1.12l.04-.11c-.01.02-.01.02-.02.08l.06-.15c.36-.26.6-.67.72-1.13.18-.37.29-.82.25-1.3-.05-.5-.21-.92-.47-1.22-.02-.53-.06-1.11-.12-1.59.38-.17.83-.26 1.24-.26.59 0 1.26.19 1.73.55.46.35.8.85.97 1.4.04.13.07.25.08.38.08.45.13 1.14.13 1.61v.07c.16.07.31.24.35.62.02.29-.09.55-.15.65-.05.26-.2.53-.46.59-.03.12-.07.25-.11.36-.01.01-.01.04-.01.04-.2.53-.51 1-.89 1.34 0 .06 0 .12.01.17.04.41-.11.71 1 1.19 1.1.5 2.77 1.01 3.13 1.79.34.79.2 1.25.2 1.25h-3.04zm-5.42-3.06c1.47.66 3.7 1.35 4.18 2.39.45 1.05.27 1.67.27 1.67H.04s-.19-.62.27-1.67c.46-1.05 2.68-1.75 4.16-2.4 1.48-.65 1.33-1.05 1.38-1.59 0-.07.01-.14.01-.21-.52-.45-.95-1.08-1.22-1.8l-.01-.01c0-.01-.01-.02-.01-.03-.07-.15-.12-.32-.16-.49-.34-.06-.54-.43-.62-.78-.08-.14-.24-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.64.05-1.55.17-2.15a3.648 3.648 0 011.4-2.36C6.32 2.25 7.21 2 8 2s1.68.25 2.31.73a3.63 3.63 0 011.4 2.36c.11.6.17 1.52.17 2.15v.09c.22.09.42.32.47.82.03.39-.12.73-.2.87-.07.34-.27.71-.61.78-.04.16-.09.33-.15.48-.01.01-.02.05-.02.05-.27.71-.68 1.33-1.19 1.78 0 .08 0 .16.01.23.05.55-.15.95 1.33 1.6z"],percentage:["M15 10c-1.66 0-3 1.34-3 3v2c0 1.66 1.34 3 3 3s3-1.34 3-3v-2c0-1.66-1.34-3-3-3zm1 5c0 .55-.45 1-1 1s-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2zM8 7V5c0-1.66-1.34-3-3-3S2 3.34 2 5v2c0 1.66 1.34 3 3 3s3-1.34 3-3zM4 7V5c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1zm11-4a1.003 1.003 0 00-1.88-.48L5.14 16.49a1.003 1.003 0 101.74.99l7.99-13.97c.08-.15.13-.32.13-.51z"],person:["M19.61 17.91c-.57-1.32-3.35-2.19-5.19-3.01-1.85-.82-1.59-1.31-1.66-1.99-.01-.09-.01-.19-.02-.29.63-.56 1.15-1.33 1.49-2.22 0 0 .02-.05.02-.06.07-.19.13-.39.19-.6.42-.09.67-.55.76-.98.1-.17.29-.6.25-1.08-.06-.62-.31-.91-.59-1.03v-.11c0-.79-.07-1.93-.22-2.68A4.55 4.55 0 0012.9.92C12.11.32 11 0 10.01 0s-2.1.32-2.89.92a4.55 4.55 0 00-1.74 2.94c-.14.75-.22 1.89-.22 2.68v.1c-.29.11-.55.4-.61 1.04-.04.48.15.91.25 1.08.1.44.35.91.79.98.05.21.12.41.19.6 0 .01.01.03.01.04l.01.02c.34.91.87 1.69 1.52 2.25 0 .09-.01.18-.02.26-.07.68.13 1.17-1.72 1.99S.96 16.59.39 17.91C-.18 19.23.05 20 .05 20h19.9s.23-.77-.34-2.09z"],phone:["M19.91 15.51c-.08-.08-4.21-2.5-4.35-2.57a.876.876 0 00-.4-.1c-.19 0-.42.13-.71.4-.28.27-1.17 1.49-1.43 1.76s-.48.4-.65.4c-.08 0-.19-.02-.32-.07s-1.45-.73-4.2-3.15-3.11-4-3.13-4.44c0-.17.13-.39.4-.65.28-.25.57-.51.89-.74.32-.24.61-.5.88-.78s.4-.52.4-.71c0-.13-.03-.27-.1-.4C7.12 4.32 4.62.19 4.53.1c-.19-.18-.92-.1-1.29.1C.25 1.82 0 4 .05 4.86c.05.89.61 5.58 5.2 9.93 5.7 5.41 9.66 5.2 9.92 5.2.87 0 3.52-.48 4.65-3.19.16-.38.31-1.07.09-1.29z"],"pie-chart":["M9 .98c-4.5.5-8 4.31-8 8.94 0 4.97 4.03 9.04 9 9.04 4.63 0 8.44-3.96 8.94-7.96H9V.98z","M10-.08V10h10C20 4 15.52-.08 10-.08z"],pin:["M11.77 1.16c-.81.81-.74 2.28.02 3.76L6.1 8.71c-2.17-1.46-4.12-2-4.94-1.18l4.95 4.95-4.95 6.36 6.36-4.95 4.95 4.95c.82-.82.27-2.77-1.19-4.94l3.8-5.69c1.47.76 2.94.84 3.76.02l-7.07-7.07z"],pivot:["M5.83 9.75L.29 15.29a1.003 1.003 0 001.42 1.42l5.54-5.54c-.57-.37-1.05-.85-1.42-1.42zM19 11c-.55 0-1 .45-1 1v1.59l-3.83-3.83c-.37.56-.85 1.04-1.41 1.41L16.59 15H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm-5-4c0-2.21-1.79-4-4-4S6 4.79 6 7s1.79 4 4 4 4-1.79 4-4zm-4 2c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"],"pivot-table":["M3 5H1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm0-5H1C.45 0 0 .45 0 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm13.71 5.29C16.53 5.11 16.28 5 16 5s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L15 8.41V11c0 2.21-1.79 4-4 4H8.41l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L8.41 17H11c3.31 0 6-2.69 6-6V8.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM19 0H6c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],play:["M16 10c0-.36-.2-.67-.49-.84l.01-.01-10-6-.01.01A.991.991 0 005 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .19 0 .36-.07.51-.16l.01.01 10-6-.01-.01c.29-.17.49-.48.49-.84z"],plus:["M16 9h-5V4c0-.55-.45-1-1-1s-1 .45-1 1v5H4c-.55 0-1 .45-1 1s.45 1 1 1h5v5c0 .55.45 1 1 1s1-.45 1-1v-5h5c.55 0 1-.45 1-1s-.45-1-1-1z"],"polygon-filter":["M18 7c-.27 0-.52.05-.75.15l-6.28-4.88c.01-.09.03-.18.03-.27 0-1.1-.9-2-2-2S7 .9 7 2c0 .06.01.12.02.19l-4.19 3C2.57 5.07 2.29 5 2 5 .9 5 0 5.9 0 7c0 .74.4 1.38 1 1.72v7.55c-.6.35-1 .99-1 1.73 0 1.1.9 2 2 2 .74 0 1.38-.4 1.72-1h7.55c.35.6.98 1 1.72 1 1.1 0 2-.9 2-2 0-.37-.11-.72-.29-1.02L18.03 11A2 2 0 0018 7zm-5.03 9c-.72.01-1.35.41-1.69 1H3.72c-.17-.3-.42-.55-.72-.72V8.72c.6-.34 1-.98 1-1.72 0-.06-.01-.12-.02-.19l4.19-3c.26.12.54.19.83.19.27 0 .52-.05.75-.15l6.28 4.88c-.01.09-.03.18-.03.27 0 .37.11.72.29 1.02L12.97 16z"],power:["M10 10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S9 .45 9 1v8c0 .55.45 1 1 1zm3-7.45v2.16c2.36 1.12 4 3.5 4 6.29 0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.79 1.64-5.17 4-6.29V2.55C3.51 3.79 1 7.09 1 11a9 9 0 0018 0c0-3.91-2.51-7.21-6-8.45z"],"predictive-analysis":["M20 8.01c0-1.26-.61-2.43-1.61-3.12C17.86 2.5 15.8.79 13.4.79c-.58 0-1.14.1-1.69.29A3.533 3.533 0 009.17 0C8.05 0 7 .55 6.32 1.45c-.15-.02-.3-.03-.45-.03-1.63 0-3.03 1.12-3.46 2.71C.97 4.65 0 6.05 0 7.66c0 .48.09.95.26 1.4-.17.44-.26.91-.26 1.39 0 1.38.72 2.64 1.89 3.29.67.7 1.59 1.09 2.54 1.09.61 0 1.19-.15 1.71-.45.68.82 1.68 1.3 2.73 1.3.66 0 1.28-.18 1.83-.52.61.49 1.34.81 2.11.91 1.3 1.43 2.3 3.28 2.31 3.3 0 0 .35.61.33.61.96-.01 1.77-.2 1.64-1.3.01.02-.92-2.89-.92-2.89.52-.26.94-.69 1.21-1.23 1.12-.66 1.84-1.91 1.84-3.26 0-.3-.03-.6-.1-.89.57-.64.88-1.51.88-2.4zm-1.54 1.28l-.18-.2-.77-.84c-.33-.37-.67-1.17-.73-1.73 0 0-.13-1.25-.13-1.26-.06-.74-1.17-.73-1.13.14 0 .02.13 1.26.13 1.26.04.36.15.77.3 1.17-.08-.01-.15-.02-.22-.02 0 0-2.57-.12-2.57-.13-.73-.03-.89 1.22-.05 1.25l2.57.13c.53.03 1.29.37 1.61.72l.61.67.02.06c.1.27.14.55.14.83 0 .93-.51 1.77-1.34 2.18l-.2.1-.09.23c-.19.48-.6.82-1.1.93l-.67.14.87 2.75c-.48-.76-1.19-1.79-2.02-2.67l-.15-.16-.21-.02c-.51-.04-.99-.21-1.42-.48l1.7-1.48c.44-.39 1.04-.55 1.24-.49 0 0 .78.22.78.23.78.2 1.03-.92.29-1.21l-.78-.23c-.69-.2-1.67.22-2.24.72l-1.91 1.66-.39.32c-.44.36-.93.55-1.5.55-.8 0-1.54-.41-1.97-1.07v-1.88c0-.5.21-.98.34-1.07 0 0 .65-.43.64-.43.87-.69.21-1.57-.64-1.14 0-.01-.65.43-.65.43-.31.2-.54.56-.7.97-.13-.13-.28-.25-.43-.35 0 0-1.91-1.26-1.91-1.28-.81-.56-1.5.63-.61 1.11 0-.02 1.89 1.28 1.89 1.28.46.31.77.97.77 1.36v.84c-.43.24-.78.36-1.24.36-.67 0-1.31-.29-1.77-.79l-.07-.08-.09-.05a2.425 2.425 0 01-1.31-2.16c0-.38.09-.74.25-1.08l.15-.31-.14-.33c-.17-.34-.25-.7-.25-1.08 0-1.13.76-2.1 1.85-2.37l.39-.09.07-.43a2.41 2.41 0 012.39-2.05c.19 0 .39.02.58.07l.4.1.22-.38A2.41 2.41 0 019.17 1.3c.55 0 1.08.19 1.5.53l-.44.45-.01-.01-.31.31c-.41.35-.92.53-1.11.5 0 0-.84-.13-.84-.14-.83-.15-1.09 1.08-.18 1.29.01 0 .84.14.84.14.03 0 .06 0 .09.01-.14.46-.18.96-.12 1.4 0 0 .21 1.24.19 1.23.13.65 1.32.44 1.16-.22 0-.01-.19-1.23-.19-1.23-.07-.48.15-1.19.45-1.5l.48-.5c.07-.06.13-.12.19-.18l.93-.95c.5-.23 1.04-.34 1.59-.34 1.93 0 3.57 1.4 3.89 3.34l.05.31.26.15a2.445 2.445 0 01.87 3.4z"],prescription:["M13.95 10.23c.16-.18.22-.22.46-.22h1.48c.25 0 .47.08.59.33.1.2.09.41-.05.66l-2.71 3.58L16.88 19c.13.21.16.46.03.69-.12.21-.34.31-.57.31H14.7c-.31 0-.56-.17-.7-.44l-1.9-2.67-1.93 2.68c-.15.27-.42.43-.73.43H7.98c-.25 0-.47-.08-.59-.33-.1-.2-.09-.41.05-.66l3.09-4.35L6.26 9H5v4.32c0 .41-.3.69-.7.69H2.7c-.41 0-.7-.28-.7-.69V.69c0-.41.3-.69.7-.69h4.42c.71 0 1.36.1 1.94.3.59.2 1.11.49 1.54.87.44.38.78.84 1.02 1.39.24.54.36 1.14.36 1.78 0 1.01-.28 1.88-.84 2.6-.43.54-1.35 1.29-2 1.59l3.09 3.94 1.72-2.24zM6.71 6.04c.71 0 1.45-.16 1.81-.46.33-.28.5-.69.5-1.25s-.17-.97-.5-1.25c-.35-.3-1.1-.46-1.81-.46h-1.7v3.42h1.7z"],presentation:["M19 1h-8c0-.55-.45-1-1-1S9 .45 9 1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v11c0 .55.45 1 1 1h4.59L4.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L9 16.41V19c0 .55.45 1 1 1s1-.45 1-1v-2.59l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L12.41 15H17c.55 0 1-.45 1-1V3h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3 12H4V3h12v10z"],print:["M14 16H6v-4H4v5c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-5h-2v4zm2-13c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h12V3zm3 2H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h2v-3h14v3h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 4h-2V7h2v2z"],projects:["M18 4c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h16V4zm-2-3c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h12V1zm3 6H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-5 7c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-2h1v2h6v-2h1v2z"],properties:["M2 15c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5-4h12c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zM2 1C.9 1 0 1.9 0 3s.9 2 2 2 2-.9 2-2-.9-2-2-2zm17 8H7c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm0 7H7c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z"],property:["M3 5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm5-1h11c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM3 15c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm16 1H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm-1-8H9c-1.1 0-2 .9-2 2s.9 2 2 2h9c1.1 0 2-.9 2-2s-.9-2-2-2zM3 7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"],"publish-function":["M7.01 10.11c.35-.64.72-1.68 1.09-3.11l.8-3.03h.96l.24-.77h-.99c.28-1.11.66-1.92 1.12-2.43.28-.32.56-.48.83-.48.05 0 .1.02.13.05.03.03.05.07.05.12 0 .04-.04.13-.11.25-.08.12-.11.24-.11.35 0 .15.06.28.18.39.12.11.27.16.45.16.2 0 .36-.07.49-.2s.2-.31.2-.54c0-.26-.1-.47-.3-.63-.2-.16-.52-.24-.96-.24-.68 0-1.3.19-1.86.58-.55.38-1.08 1.02-1.58 1.91-.17.3-.34.5-.49.59-.15.08-.4.13-.74.12l-.23.77h.95L5.74 9.21c-.23.86-.39 1.39-.47 1.59-.12.29-.3.54-.54.75-.1.08-.21.12-.35.12-.04 0-.07-.01-.1-.03l-.03-.04c0-.02.03-.07.1-.13.07-.07.1-.17.1-.31 0-.15-.05-.28-.16-.38-.11-.1-.27-.15-.47-.15-.25 0-.44.07-.59.2-.15.12-.23.28-.23.46 0 .19.09.36.27.5.19.14.47.21.86.21.61 0 1.16-.15 1.63-.46.48-.31.89-.79 1.25-1.43zm3.7 1.18c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 14.41V19c0 .55.45 1 1 1s1-.45 1-1v-4.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zm4.15-6.78c.17-.13.36-.2.55-.2.07 0 .2.03.39.08s.36.08.5.08c.2 0 .37-.07.5-.2.13-.14.2-.31.2-.52 0-.22-.07-.4-.2-.53s-.33-.2-.58-.2c-.22 0-.43.05-.63.15-.2.1-.45.32-.75.67-.23.25-.56.7-1.01 1.33a6.52 6.52 0 00-.91-2.15l-2.38.39-.05.25c.18-.03.33-.05.45-.05.24 0 .43.1.59.3.25.31.59 1.24 1.02 2.79-.34.44-.58.73-.7.87-.21.22-.38.36-.52.43-.1.05-.22.08-.35.08-.1 0-.26-.05-.49-.16a1.01 1.01 0 00-.42-.11c-.23 0-.42.07-.57.22-.17.14-.24.32-.24.55 0 .21.07.38.21.51.14.13.33.2.56.2.23 0 .44-.05.64-.14.2-.09.45-.29.75-.59s.72-.78 1.25-1.43c.2.62.38 1.07.53 1.35.15.28.32.49.52.61.19.12.44.19.73.19.28 0 .57-.1.86-.3.38-.25.77-.69 1.17-1.31l-.25-.14c-.27.37-.48.6-.61.69-.09.06-.19.09-.31.09-.14 0-.28-.09-.42-.26-.23-.29-.54-1.09-.93-2.4.37-.58.66-.96.9-1.14z"],pulse:["M19 10h-2.38L14.9 6.55h-.01c-.17-.32-.5-.55-.89-.55-.43 0-.79.28-.93.66h-.01l-2.75 7.57L7.98 1.82h-.02A.978.978 0 007 1c-.44 0-.8.29-.94.69h-.01L3.28 10H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.44 0 .8-.29.94-.69h.01l1.78-5.34 2.29 12.21h.02c.08.46.47.82.96.82.43 0 .79-.28.93-.66h.01l3.21-8.82.96 1.92h.01c.16.33.49.56.88.56h3c.55 0 1-.45 1-1s-.45-1-1-1z"],random:["M14.47 5h2.12L15.3 6.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 3H14c-.31 0-.57.15-.76.37l-.01-.01-2.93 3.52 1.3 1.56L14.47 5zm2.24 7.29a1.003 1.003 0 00-1.42 1.42l1.3 1.29h-2.12L4.77 3.36l-.01.01A.998.998 0 004 3H1c-.55 0-1 .45-1 1s.45 1 1 1h2.53l9.7 11.64.01-.01c.19.22.45.37.76.37h2.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM3.53 15H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.31 0 .57-.15.76-.37l.01.01 2.93-3.52-1.3-1.56L3.53 15z"],record:["M10 3a7 7 0 100 14 7 7 0 100-14z"],redo:["M19.71 5.29l-4-4a1.003 1.003 0 00-1.42 1.42L16.59 5H6c-3.31 0-6 2.69-6 6s2.69 6 6 6h5v-2H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h10.59L14.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM15 14c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"],refresh:["M19 1c-.55 0-1 .45-1 1v2.06C16.18 1.61 13.29 0 10 0 4.48 0 0 4.48 0 10c0 .55.45 1 1 1s1-.45 1-1c0-4.42 3.58-8 8-8 2.52 0 4.76 1.18 6.22 3H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 8c-.55 0-1 .45-1 1 0 4.42-3.58 8-8 8-2.52 0-4.76-1.18-6.22-3H5c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1v-2.06C3.82 18.39 6.71 20 10 20c5.52 0 10-4.48 10-10 0-.55-.45-1-1-1z"],"regression-chart":["M19 16H3.1L19.31 3.39l-.61-.79L2 15.59V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-9-9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-5 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm10-2c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-5 4c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z"],remove:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm5-9H5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z"],"remove-column":["M19 0H5c-.55 0-1 .45-1 1v4h2V2h5v16H6v-3H4v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18h-5V2h5v16zM6.29 13.71a1.003 1.003 0 001.42-1.42L5.41 10 7.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L4 8.59l-2.29-2.3A1.003 1.003 0 00.29 7.71L2.59 10 .3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L4 11.41l2.29 2.3z"],"remove-column-left":["M4 11h6c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-7 18H2V2h10v16zm6 0h-5V2h5v16z"],"remove-column-right":["M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H2V2h5v16zm11 0H8V2h10v16zm-8-7h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1z"],"remove-row-bottom":["M7 14h6c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V8h16v10zm0-11H2V2h16v5z"],"remove-row-top":["M7 8h6c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zm12-8H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2v-5h16v5zm0-6H2V2h16v10z"],repeat:["M14 6c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1v2.05C16.18 1.6 13.29 0 10 0 4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-.55-.45-1-1-1s-1 .45-1 1c0 4.42-3.58 8-8 8s-8-3.58-8-8 3.58-8 8-8c2.53 0 4.77 1.17 6.24 3H15c-.55 0-1 .45-1 1z"],reset:["M6 6c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1s1 .45 1 1v2.05C3.82 1.6 6.71 0 10 0c5.52 0 10 4.48 10 10s-4.48 10-10 10S0 15.52 0 10c0-.55.45-1 1-1s1 .45 1 1c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8C7.47 2 5.23 3.17 3.76 5H5c.55 0 1 .45 1 1z"],resolve:["M8.7 4.7C7.9 4.2 7 4 6 4c-3.3 0-6 2.7-6 6s2.7 6 6 6c1 0 1.9-.2 2.7-.7C7.3 14 6.5 12.1 6.5 10s.9-4 2.2-5.3zM14 4c-1 0-1.9.2-2.7.7 1.4 1.4 2.2 3.2 2.2 5.3s-.9 4-2.2 5.3c.8.5 1.7.7 2.7.7 3.3 0 6-2.7 6-6s-2.7-6-6-6zm-4 1.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z"],rig:["M7 4.2C7 5.75 8.34 7 10 7s3-1.46 3-2.8C13 1.45 10.94 0 10 0H6c0 2.74 3.76 1.96 1 4.2zm11.71 14.09L13 12.59V9.01c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3.58l-5.71 5.7a1.003 1.003 0 001.42 1.42L7 15.42V19c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3.58l4.29 4.29a1.003 1.003 0 001.42-1.42zM10.21 8c.01 0 .01.01 0 0 .01.01.01 0 0 0z"],"right-join":["M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zm-3.34 9.25c-.55-1.2-.86-2.54-.86-3.95s.31-2.75.86-3.95a4.001 4.001 0 000 7.9zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm-4 1.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z"],ring:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"],"rotate-document":["M8.71 6.29A.997.997 0 008 6H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-8c0-.28-.11-.53-.29-.71l-4-4zM11 18H4V8h3v3c0 .55.45 1 1 1h3v6zm3-16h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C9.11 2.47 9 2.72 9 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4z"],"rotate-page":["M14 2h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C9.11 2.47 9 2.72 9 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4zm-2 5H3c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 11H4V9h7v9z"],route:["M14.028 6.016c.146.275.31.57.485.872.304.524.628 1.047.952 1.545l.118.178-.208-.006-.577-.005c-2.093.004-2.841.303-2.841.895 0 .069.271.248 1.245.567l1.008.313c2.671.831 3.99 1.827 3.99 4.167 0 2.76-1.928 4.059-4.832 4.376-.782.085-1.52.098-2.452.066l-1.15-.046H6.221l.535-.811a67.46 67.46 0 001.122-1.787h2.04l.686.03c1.028.046 1.77.043 2.523-.039 1.832-.2 2.673-.767 2.673-1.789 0-.69-.483-1.09-1.992-1.585l-.83-.257c-1.192-.364-2.037-.7-2.59-1.165.399-1 .612-1.844.612-2.538a6.018 6.018 0 00-.382-2.098c.745-.573 1.884-.822 3.41-.883zM5 4.2c2.648 0 4.791 2.151 4.8 4.797C9.8 11.652 5 18.6 5 18.6l-.5-.744C3.273 15.993.2 11.121.2 8.997A4.802 4.802 0 015 4.2zm0 2.4a2.4 2.4 0 10.002 4.802A2.4 2.4 0 005 6.6zM17 .333a2.671 2.671 0 012.667 2.665C19.667 4.473 17 8.333 17 8.333l-.391-.587c-.741-1.137-2.276-3.629-2.276-4.748A2.668 2.668 0 0117 .333z"],satellite:["M9 18c.6 0 1 .4 1 1s-.4 1-1 1c-5 0-9-4-9-9 0-.6.4-1 1-1s1 .4 1 1c0 3.9 3.1 7 7 7zm0-4c.6 0 1 .4 1 1s-.4 1-1 1c-2.8 0-5-2.2-5-5 0-.6.4-1 1-1s1 .4 1 1c0 1.7 1.3 3 3 3zm5.7-3.7c.4-.4 1-.4 1.4 0l3.6 3.6c.4.4.4 1 0 1.4l-1.4 1.4c-.4.4-1 .4-1.4 0l-3.6-3.6c-.4-.4-.4-1 0-1.4l1.4-1.4zM4.7.3c.4-.4 1-.4 1.4 0l3.6 3.6c.4.4.4 1 0 1.4L8.3 6.7c-.4.4-1 .4-1.4 0L3.3 3.1c-.4-.4-.4-1 0-1.4L4.7.3zm11.1 1c.4-.4 1-.4 1.4 0l1.6 1.6c.4.4.4 1 0 1.4l-6.5 6.5c-.4.4-1 .4-1.4 0L9.3 9.2c-.4-.4-.4-1 0-1.4l6.5-6.5zM9 12c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z"],saved:["M12 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V6l-6-6zm4 18H5V2h6v5h5v11zm-8.29-6.71a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.32 0 .59-.16.77-.38l.01.01 4-5-.01-.01c.14-.18.23-.38.23-.62 0-.55-.45-1-1-1-.32 0-.59.16-.77.38l-.01-.01-3.3 4.13-2.21-2.21z"],"scatter-plot":["M9 9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm5 2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm1 10H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM5 15c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"],search:["M19.56 17.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],"search-around":["M9.9 6.9a3 3 0 100 6 3 3 0 100-6zM3 14c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM17 14c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM17 0c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM10 10L5 5","M5.379 4.671l5.02 5.02-.707.708-5.02-5.02zM10 10l5-5","M14.621 4.671l.707.708-5.02 5.02-.707-.707z","M10 10l5 5M10.379 9.671l5.02 5.02-.707.708-5.02-5.02z","M10 10l-5 5M9.621 9.671l.707.708-5.02 5.02-.707-.707z"],"search-template":["M13 8H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0 3H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0-6H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm6.56 12.44l-3.23-3.23A8.939 8.939 0 0018 9a9 9 0 10-9 9c1.94 0 3.74-.62 5.21-1.67l3.23 3.23a1.498 1.498 0 102.12-2.12zM9 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"],"search-text":["M19.56 17.44l-3.23-3.23A8.939 8.939 0 0018 9a9 9 0 10-9 9c1.94 0 3.74-.62 5.21-1.67l3.23 3.23a1.498 1.498 0 102.12-2.12zM9 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm3.5-11h-7c-.28 0-.5.22-.5.5v2c0 .28.22.5.5.5s.5-.22.5-.5V7h2v6h-.5c-.28 0-.5.22-.5.5s.22.5.5.5h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H10V7h2v.5c0 .28.22.5.5.5s.5-.22.5-.5v-2c0-.28-.22-.5-.5-.5z"],"segmented-control":["M19 5H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 8h-8V7h8v6z"],select:["M19.71 18.29l-4.25-4.25L20 12.91 9.93 9.33c.04-.1.07-.21.07-.33V3c0-.55-.45-1-1-1H4V1c0-.55-.45-1-1-1S2 .45 2 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 .55.45 1 1 1h6c.12 0 .23-.03.34-.07L12.91 20l1.14-4.54 4.25 4.25c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71zM8 8H4V4h4v4z"],selection:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z","M10 6a4 4 0 100 8 4 4 0 100-8z"],"send-message":["M1.754.135L19.393 9.06c.57.288.775.943.458 1.462-.107.176-.266.32-.458.418l-17.64 8.924c-.57.289-1.288.102-1.604-.417A1.001 1.001 0 010 18.925v-6.851L11.021 10 0 7.938V1.075C0 .481.529 0 1.18 0c.201 0 .399.047.574.135z"],"send-to":["M19 0h-5c-.6 0-1 .4-1 1s.4 1 1 1h2.6l-4.3 4.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3L18 3.4V6c0 .5.5 1 1 1s1-.5 1-1V1c0-.6-.5-1-1-1zm0 9c-1 0-1.9-.5-2.5-1.3l-1.4 1.4c-.5.6-1.3.9-2.1.9-1.7 0-3-1.3-3-3 0-.8.3-1.6.9-2.1l1.4-1.4C11.5 2.9 11 2 11 1c0-.3.1-.6.2-.9-.4-.1-.8-.1-1.2-.1C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10c0-.4 0-.8-.1-1.2-.3.1-.6.2-.9.2z"],"send-to-graph":["M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm10 2c-.53 0-1.01.21-1.37.55L11.9 10.6c.06-.19.1-.39.1-.6 0-.21-.04-.41-.1-.6l4.72-2.95c.37.34.85.55 1.38.55 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .21.04.41.1.6l-4.73 2.96c-.24-.23-.54-.4-.87-.48V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.33.09-.63.26-.87.48L7.6 7.91 5.42 6.55 3.9 5.6c.06-.19.1-.39.1-.6 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.53 0 1.01-.21 1.37-.55L9 9.96V10h.06L12 11.84l.4.25 1.51.94 2.19 1.37c-.06.19-.1.39-.1.6 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zm-7-2.96l-.06-.04H11v.04z"],"send-to-map":["M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm11.54-6.82l.01-.02-6-4-.01.02C13.39.08 13.21 0 13 0s-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v9c0-.55.45-1 1-1h1V2.87l4 2.67V9h2V5.54l4-2.67v11.6l-1 .67v2.4l2-1.33 5.45 3.63.01-.02c.15.1.33.18.54.18.55 0 1-.45 1-1V5c0-.35-.19-.64-.46-.82zM18 17.13l-4-2.67V2.87l4 2.67v11.59z"],"series-add":["M13.29 9.29c.3.62.8 1.12 1.42 1.42l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 2.29-2.3zM12 5c0-.5.4-1 1-1h2V2c0-.6.4-1 1-1 .5 0 1 .4 1 1v2h2c.5 0 1 .4 1 1s-.5 1-1 1h-2v2c0 .6-.5 1-1 1-.6 0-1-.4-1-1V6h-2c-.6 0-1-.4-1-1z"],"series-configuration":["M11.91 10.67c.52.45 1.13.8 1.8 1.03l-2.01 2.01c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.3L7 10.41l-5 5V17h16.99c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8c.28 0 .53.11.71.29l3.29 3.3.91-.92zM18.5 4.6h1.04c.25 0 .45.2.46.44v.9c0 .25-.2.45-.45.45h-1.04c-.07.22-.16.42-.27.62l.73.73c.17.17.17.44 0 .61l-.61.61c-.17.17-.44.17-.61 0l-.73-.73c-.2.11-.4.2-.62.26v1.05c0 .25-.2.45-.45.45h-.9c-.25 0-.45-.2-.45-.45V8.51c-.21-.06-.4-.15-.58-.25l-.76.77c-.17.17-.46.17-.64 0l-.64-.64a.465.465 0 010-.64l.76-.77c-.1-.19-.19-.38-.25-.59h-1.04c-.25 0-.45-.2-.45-.45v-.9c0-.25.2-.45.45-.45h1.04c.07-.22.16-.42.27-.61l-.73-.73a.429.429 0 010-.61l.61-.61c.17-.17.44-.17.61 0l.73.73c.2-.11.4-.2.62-.26V1.45a.44.44 0 01.44-.45h.9c.25 0 .45.2.45.45V2.5c.21.06.4.15.58.25l.76-.77c.17-.17.46-.17.64 0l.64.64c.17.17.17.46 0 .64l-.76.77c.1.17.19.36.25.57zm-4.69.9c0 .93.75 1.69 1.69 1.69.93 0 1.69-.75 1.69-1.69s-.75-1.69-1.69-1.69-1.69.76-1.69 1.69z"],"series-derived":["M18.82 6.58c-.03.05-.07.09-.11.13 0 0 0-.01-.01-.01l-2 2c-.2.2-.4.3-.7.3-.6 0-1-.4-1-1 0-.3.1-.5.3-.7L16.6 6H11c-.6 0-1-.4-1-1s.4-1 1-1h5.6l-1.3-1.3c-.2-.2-.3-.4-.3-.7 0-.6.4-1 1-1 .3 0 .5.1.7.3l3 3c.2.2.3.4.3.7s-.1.5-.3.7l-.88.88zm-5.53 2.71c.3.62.8 1.12 1.42 1.42l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 2.29-2.3z"],"series-filtered":["M12.14 10.45c.21.67.65 1.23 1.22 1.61l-1.65 1.65c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 1.14-1.14zM19.35 1a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V5.13L11.19 2.1a.642.642 0 01.45-1.1h7.71z"],"series-search":["M11.28 11.31l-.28.28-3.29-3.3C7.53 8.11 7.28 8 7 8s-.53.11-.71.29L2 12.59V4c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1H2v-1.59l5-5 3.29 3.29c.18.19.43.3.71.3s.53-.11.71-.29l2.09-2.09c-.17.02-.34.02-.51.02-.7 0-1.38-.12-2.01-.33zm-.93-6c0-1.62 1.31-2.93 2.93-2.93s2.93 1.31 2.93 2.93-1.31 2.93-2.93 2.93-2.93-1.31-2.93-2.93zm6.47 2.43c.11-.17.21-.33.29-.51.01-.03.03-.06.04-.09.08-.18.16-.35.21-.54.06-.2.1-.38.14-.58.01-.05.01-.09.02-.14.03-.2.05-.39.05-.6 0-2.37-1.93-4.3-4.3-4.3-2.37.01-4.3 1.93-4.3 4.31s1.93 4.3 4.3 4.3c.21 0 .4-.02.6-.05.04 0 .09-.01.14-.02.2-.03.38-.08.57-.14.2-.06.37-.14.55-.21.03-.01.06-.03.09-.04.18-.09.34-.19.51-.29l2.87 2.87c.14.14.33.22.56.22.43 0 .78-.35.78-.78a.938.938 0 00-.23-.56l-2.89-2.85z"],settings:["M4 1c0-.55-.45-1-1-1S2 .45 2 1v5h2V1zM2 19c0 .55.45 1 1 1s1-.45 1-1v-6H2v6zm9-18c0-.55-.45-1-1-1S9 .45 9 1v8h2V1zm7 0c0-.55-.45-1-1-1s-1 .45-1 1v3h2V1zM9 19c0 .55.45 1 1 1s1-.45 1-1v-3H9v3zm9-14h-2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-2 14c0 .55.45 1 1 1s1-.45 1-1v-8h-2v8zM4 7H2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm7 3H9c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z"],share:["M15 18H2V5h8.76l2-2H1c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1h15c.55 0 1-.45 1-1V7.24l-2 2V18zm4-18h-7c-.55 0-1 .45-1 1s.45 1 1 1h4.59l-7.3 7.29a1.003 1.003 0 001.42 1.42L18 3.41V8c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z"],shield:["M10 20c6-3.81 9-9.048 9-15.714-2 0-5-1.429-9-4.286-4 2.857-7 4.286-9 4.286C1 10.952 4 16.19 10 20zm0-17.348c2.577 1.734 4.776 2.88 6.667 3.419-.44 4.627-2.636 8.353-6.667 11.297V2.652z"],shop:["M17.94 3.63c-.01-.02-.01-.03-.02-.04l-.03-.09h-.01c-.18-.3-.49-.5-.86-.5h-14c-.42 0-.77.25-.92.61L0 8.5h.02a2.5 2.5 0 005 0 2.5 2.5 0 005 0 2.5 2.5 0 005 0 2.5 2.5 0 005 0l-2.08-4.87zM3.02 2h14c.55 0 1-.45 1-1s-.45-1-1-1h-14c-.55 0-1 .45-1 1s.44 1 1 1zm13 14h-12v-4h-2v7c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-7h-2v4z"],"shopping-cart":["M18 14H8.72l-.67-2H17c.44 0 .8-.29.94-.69h.01l2-6h-.01c.03-.1.06-.2.06-.31 0-.55-.45-1-1-1H5.39l-.44-1.32h-.01C4.8 2.29 4.44 2 4 2H1c-.55 0-1 .45-1 1s.45 1 1 1h2.28l3.33 10H5c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2h9c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zM6.05 6h11.56l-1.33 4H7.39L6.05 6z"],"signal-search":["M7.15 10.33c.888.8 1.999 1.36 3.228 1.574l2.326 6.98a.846.846 0 01-.535 1.07.844.844 0 01-1.072-.535l-1.225-3.671H7.125L5.9 19.419a.85.85 0 01-1.072.536.85.85 0 01-.536-1.071l2.857-8.555zm1.353 1.305l-.808 2.413h1.607l-.8-2.413zM5 5.5c0 .76.13 1.49.37 2.17-.496 1.056-.313 2.356.704 3.29.385.353.404.94.038 1.311a.982.982 0 01-1.356.038c-2.183-2.01-2-5.125.01-6.94a.95.95 0 01.24-.156A6.421 6.421 0 005 5.5z","M3.874 13.185c-1.346-.918-2.187-2.67-2.187-4.34 0-1.752.757-3.254 2.187-4.339.42-.25.42-.834.168-1.168-.252-.418-.84-.418-1.177-.167C1.014 4.59-.08 6.509.005 8.846c.084 2.253 1.177 4.423 2.86 5.675.168.083.336.166.504.166.253 0 .505-.083.673-.333.337-.418.253-.918-.168-1.169zM12.246 12.309a.98.98 0 01-1.354-.037.917.917 0 01-.206-.324 6.54 6.54 0 001.959-.049 5.125 5.125 0 01-.399.41zM14.631 11.476l1.228 1.229a6.6 6.6 0 01-1.723 1.816c-.169.083-.337.166-.505.166-.253 0-.505-.083-.673-.333-.337-.418-.253-.918.168-1.169.62-.422 1.133-1.022 1.505-1.709z","M11.5 0C14.54 0 17 2.46 17 5.5c0 .26-.02.51-.06.75l-.03.17c-.04.25-.1.49-.17.73v.01c-.08.24-.17.47-.28.69-.01.04-.03.07-.05.11-.11.23-.24.44-.38.65l3.68 3.68A1.003 1.003 0 0119 14c-.28 0-.53-.11-.7-.29l-3.68-3.68c-.21.14-.42.27-.65.38-.04.01-.07.03-.11.05-.22.11-.45.2-.69.28h-.01c-.24.07-.48.13-.73.17l-.17.03c-.25.04-.5.06-.76.06C8.46 11 6 8.54 6 5.5S8.46 0 11.5 0zm0 1.5c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z"],"sim-card":["M16.71 5.29l-5-5A.997.997 0 0011 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6c0-.28-.11-.53-.29-.71zM9 7h2v3H9V7zM6 7h2v3H6V7zm2 11H6v-3h2v3zm3 0H9v-3h2v3zm3 0h-2v-3h2v3zm0-4H6v-3h8v3zm0-4h-2V7h2v3z"],slash:["M12 2c-.46 0-.85.32-.97.74L7.04 16.7c-.02.1-.04.2-.04.3 0 .55.45 1 1 1 .46 0 .85-.32.97-.74L12.96 3.3c.02-.1.04-.2.04-.3 0-.55-.45-1-1-1z"],"small-cross":["M11.41 10l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L10 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L8.59 10 5.3 13.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3.29-3.3 3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10z"],"small-minus":["M14 9H6c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z"],"small-plus":["M14 9h-3V6c0-.55-.45-1-1-1s-1 .45-1 1v3H6c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45 1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1z"],"small-tick":["M15 5c-.28 0-.53.11-.71.29L8 11.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7A1.003 1.003 0 0015 5z"],snowflake:["M11 11.776v2.81l2.31 2.242a.987.987 0 010 1.415c-.399.39-1.044.39-1.442 0L11 17.414V19a.99.99 0 01-.996 1A.996.996 0 019 19v-1.636l-.912.879c-.398.39-1.043.39-1.441 0a.987.987 0 010-1.415L9 14.536v-2.79l-2.548 1.435-.837 3.063c-.146.534-.705.85-1.248.707a.998.998 0 01-.721-1.224l.309-1.132-1.4.793a1.03 1.03 0 01-1.393-.366.99.99 0 01.373-1.366l1.445-.818-1.224-.322a.998.998 0 01-.72-1.225c.145-.533.704-.85 1.248-.707l3.193.84 2.462-1.395-2.532-1.434-3.123.82a1.022 1.022 0 01-1.249-.706.998.998 0 01.721-1.225L2.91 7.18l-1.4-.793a.99.99 0 01-.373-1.366 1.03 1.03 0 011.392-.366l1.445.818-.328-1.2a.998.998 0 01.72-1.225 1.022 1.022 0 011.25.707l.855 3.132L9 8.311V5.414L6.647 3.121a.987.987 0 010-1.414 1.033 1.033 0 011.441 0L9 2.586V1c0-.552.44-1 1.004-1A.99.99 0 0111 1l-.007 1.536.875-.829a1.033 1.033 0 011.441 0 .987.987 0 010 1.414L11 5.364v2.918l2.53-1.42.855-3.131c.146-.534.705-.85 1.249-.707a.998.998 0 01.72 1.224l-.327 1.2 1.4-.792a1.03 1.03 0 011.392.366.99.99 0 01-.373 1.366l-1.355.768 1.153.303a.998.998 0 01.721 1.225c-.146.533-.705.85-1.249.707l-3.123-.821-2.576 1.459 2.506 1.42 3.193-.84a1.022 1.022 0 011.249.707.998.998 0 01-.72 1.225l-1.224.322 1.4.793a.99.99 0 01.373 1.366 1.03 1.03 0 01-1.393.366l-1.356-.768.31 1.132a.998.998 0 01-.721 1.224 1.022 1.022 0 01-1.249-.707l-.837-3.063L11 11.776z"],"social-media":["M11.5 5c.8 0 1.6-.4 2-1 2 1.2 3.3 3.3 3.5 5.7 0 .5.5.9 1 .9.6 0 1-.5 1-1v-.1c-.2-3.3-2.2-6.2-5.1-7.6C13.7.8 12.7 0 11.5 0 10.1 0 9 1.1 9 2.5S10.1 5 11.5 5zm5 7c-1.4 0-2.5 1.1-2.5 2.5 0 .4.1.7.2 1.1-1.1.9-2.6 1.4-4.2 1.4-1.9 0-3.6-.8-4.9-2-.2-.2-.5-.4-.8-.4-.5 0-1 .5-1 1 0 .3.1.5.3.7C5.3 18 7.5 19 10 19c2.2 0 4.2-.8 5.8-2.1.2.1.5.1.7.1 1.4 0 2.5-1.1 2.5-2.5S17.9 12 16.5 12zM5 10.5c0-1.1-.7-2.1-1.7-2.4.5-1.9 1.9-3.5 3.6-4.4.3-.2.6-.5.6-.9 0-.5-.4-1-1-1-.2 0-.4.1-.6.2-2.4 1.2-4.2 3.6-4.7 6.4C.5 8.9 0 9.6 0 10.5 0 11.9 1.1 13 2.5 13S5 11.9 5 10.5z"],sort:["M19 16h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM7 15c-.28 0-.53.11-.71.29L5 16.59V11c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 15.3A.965.965 0 001 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 15zM19 1h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 5h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z"],"sort-alphabetical":["M8 15c-.28 0-.53.11-.71.29L6 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L2.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 008 15zm8.89-.79v-1.22H11.3v1.3h3.51L11 18.78V20h5.99v-1.3h-3.91l3.81-4.49zM14.97 0h-1.95L9.01 11.01h1.89l.98-2.92h4.17l.98 2.92h1.96L14.97 0zm-2.59 6.63l1.58-4.74H14l1.57 4.74h-3.19z"],"sort-alphabetical-desc":["M8.01 15c-.28 0-.53.11-.71.29L6 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L2.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3a1.014 1.014 0 001.42 0l3-3c.18-.18.29-.43.29-.71.01-.55-.44-1-.99-1zm4.44-5.65l6.4-7.88V0H10.5v1.67h5.91L10 9.44v1.57h9V9.35h-6.55zm1.27 3.64L11 20h1.59l.56-1.56h2.68l.55 1.56h1.64l-2.68-7.01h-1.62zm-.16 4.3l.93-2.57h.02l.9 2.57h-1.85z"],"sort-asc":["M10 8h5c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0 5h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0-10h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm9 12h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM7 14c-.28 0-.53.11-.71.29L5 15.59V10c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 14.3A.965.965 0 001 14a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 14z"],"sort-desc":["M13 15h-3c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm-6-1c-.28 0-.53.11-.71.29L5 15.59V10c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 14.3A.965.965 0 001 14a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 14zM19 0h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 10h-5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm2-5h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z"],"sort-numerical":["M9 14.99c-.28 0-.53.11-.71.29L7 16.58v-5.59c0-.55-.45-1-1-1s-1 .45-1 1v5.59l-1.29-1.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-3c.18-.18.29-.43.29-.71a.99.99 0 00-1-1zm8.88.23c-.08-.42-.22-.79-.42-1.12-.2-.33-.47-.6-.8-.8-.33-.2-.76-.3-1.28-.3a2.333 2.333 0 00-1.72.71c-.21.22-.37.48-.49.78-.11.3-.17.62-.17.97 0 .27.04.54.13.8.08.26.22.5.4.7.19.21.43.38.71.5a2.142 2.142 0 001.72.02c.25-.12.47-.31.66-.58l.02.02c-.01.19-.04.4-.08.63-.04.24-.11.46-.21.67-.1.21-.23.38-.39.53a.92.92 0 01-.62.22c-.24 0-.44-.08-.6-.25-.16-.17-.27-.36-.31-.59h-1.31c.04.29.12.56.24.79.12.23.28.43.48.59.19.16.42.28.67.36.25.08.52.12.82.12.49 0 .9-.1 1.23-.31.34-.21.61-.48.82-.82.21-.34.37-.71.47-1.13.1-.42.15-.83.15-1.25 0-.43-.04-.85-.12-1.26zm-1.42.63c-.05.15-.11.28-.2.4-.09.12-.2.21-.34.27s-.3.1-.49.1c-.17 0-.33-.04-.46-.11s-.24-.17-.33-.29c-.08-.12-.15-.25-.19-.4-.04-.15-.06-.31-.06-.47 0-.15.02-.3.07-.45.05-.15.11-.28.2-.39.09-.12.2-.21.33-.28.13-.07.27-.11.44-.11.17 0 .33.04.47.11.14.07.25.17.34.28a1.387 1.387 0 01.28.86c.01.17-.02.33-.06.48zM15.32 11H17V0h-1.25c-.05.34-.17.62-.34.85-.17.23-.39.42-.63.57-.25.15-.52.25-.83.31-.3.06-.62.09-.94.09v1.41h2.31V11z"],"sort-numerical-desc":["M9 15c-.28 0-.53.11-.71.29L7 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L3.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-3A1.003 1.003 0 009 15zm6.7-1.33a1.5 1.5 0 01-.44.43c-.17.11-.37.19-.58.23-.22.04-.44.06-.67.05v1.07h1.66V20H17v-6.99h-1.06c-.04.26-.12.48-.24.66zm3.15-10.3c-.11-.68-.29-1.26-.55-1.76-.26-.5-.62-.89-1.08-1.18C16.75.14 16.17 0 15.46 0c-.54 0-1.03.09-1.46.27-.43.18-.79.44-1.09.76-.3.33-.52.71-.67 1.15-.16.44-.24.92-.24 1.43 0 .54.08 1.04.23 1.47.15.44.37.81.65 1.12.28.31.61.55 1 .72.39.17.82.26 1.3.26.46 0 .88-.11 1.26-.33.38-.22.68-.53.9-.94l.03.03c-.03.35-.07.74-.12 1.16-.05.42-.15.81-.29 1.18-.14.37-.35.68-.61.92-.26.25-.62.37-1.06.37-.43 0-.77-.13-1.03-.4-.25-.27-.4-.62-.44-1.05h-1.64c.02.43.11.83.29 1.18.17.35.39.66.67.91a3.027 3.027 0 002.07.8c.71 0 1.3-.17 1.79-.5.48-.33.87-.76 1.17-1.29.3-.53.51-1.12.64-1.76.13-.64.19-1.28.19-1.92.01-.77-.05-1.49-.15-2.17zM17.1 4.44c-.08.27-.19.5-.34.71-.15.21-.34.37-.57.49-.23.12-.5.18-.8.18-.3 0-.56-.06-.78-.19-.22-.13-.4-.29-.55-.49-.14-.2-.25-.44-.32-.7-.07-.27-.11-.55-.11-.84 0-.28.04-.55.11-.82.07-.26.18-.49.32-.7.14-.2.33-.36.55-.48.22-.12.48-.17.78-.17.31 0 .57.06.8.18.23.12.42.28.57.48.15.2.26.43.34.69.08.26.11.53.11.82 0 .29-.04.57-.11.84z"],"split-columns":["M15 13a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 9H11V2h5v2c.77 0 1.47.3 2 .78V1c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v3.78C2.53 4.3 3.23 4 4 4V2h5v7H3.41L4.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 11H9v7H4v-2c-.77 0-1.47-.3-2-.78V19c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3.78c-.53.48-1.23.78-2 .78v2h-5v-7h5.59l-1.29 1.29c-.19.18-.3.43-.3.71z"],square:["M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V2h16v16z"],"stacked-chart":["M12 2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v4h4V2zm3 14h2c.55 0 1-.45 1-1v-5h-4v5c0 .55.45 1 1 1zm3-10c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h4V6zm-6 1H8v5h4V7zm-9 9h2c.55 0 1-.45 1-1v-3H2v3c0 .55.45 1 1 1zm16 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM6 9c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h4V9zm3 7h2c.55 0 1-.45 1-1v-2H8v2c0 .55.45 1 1 1z"],star:["M10 0l3.1 6.6 6.9 1-5 5.1 1.2 7.3-6.2-3.4L3.8 20 5 12.7 0 7.6l6.9-1z"],"star-empty":["M20 7.6l-6.9-1.1L10 0 6.9 6.6 0 7.6l5 5.1L3.8 20l6.2-3.4 6.2 3.4-1.2-7.2 5-5.2zM10 15l-4.5 2.4.9-5.2-3.6-3.6 5-.8L10 3.1l2.2 4.7 5 .8-3.6 3.7.9 5.2L10 15z"],"step-backward":["M15 3c-.23 0-.42.09-.59.21l-.01-.01L8 8V4c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-4l6.4 4.8.01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"step-chart":["M19 16H2v-3h4c.55 0 1-.45 1-1V8h3v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V6h2c.55 0 1-.45 1-1s-.45-1-1-1h-3c-.55 0-1 .45-1 1v4h-3V7c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v4H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],"step-forward":["M15 3h-2c-.55 0-1 .45-1 1v4L5.6 3.2l-.01.01C5.42 3.09 5.23 3 5 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01L12 12v4c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],stop:["M16 3H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],stopwatch:["M10 6a6 6 0 106 6h-6V6zm-.998-1.938A1.015 1.015 0 019 4V2H7a1 1 0 110-2h6a1 1 0 010 2h-2v2c0 .02 0 .041-.002.062A8.001 8.001 0 0110 20a8 8 0 01-.998-15.938z"],strikethrough:["M18 9h-4.46a4.7 4.7 0 00-.4-.14c-.19-.05-.51-.14-.96-.25-.45-.11-.9-.23-1.37-.35-.47-.12-.89-.23-1.27-.33s-.6-.16-.65-.17c-.53-.15-.95-.37-1.27-.66-.32-.28-.49-.68-.49-1.19 0-.36.09-.66.26-.9s.39-.43.65-.57c.26-.14.55-.24.87-.3s.63-.09.93-.09c.89 0 1.63.19 2.21.57.45.3.75.76.89 1.38h2.63c-.06-.52-.2-.98-.42-1.4-.3-.57-.71-1.05-1.23-1.43a5.33 5.33 0 00-1.79-.87c-.7-.2-1.42-.3-2.19-.3-.66 0-1.31.08-1.96.25s-1.22.43-1.73.77-.92.79-1.23 1.32c-.31.52-.46 1.15-.46 1.87 0 .37.05.74.15 1.1.1.36.28.7.53 1.02.18.24.41.47.69.67H2c-.55 0-1 .45-1 1s.45 1 1 1h10.14c.02.01.05.02.07.02.3.11.58.29.84.55.25.26.38.67.38 1.21 0 .27-.06.53-.17.79-.11.26-.29.49-.54.69-.25.2-.57.36-.97.49s-.88.19-1.44.19c-.52 0-1.01-.06-1.45-.17-.45-.11-.84-.29-1.19-.54s-.61-.56-.8-.95c-.05-.08-.09-.18-.12-.28H4.11c.09.43.22.82.4 1.18.33.65.77 1.18 1.32 1.59.55.41 1.2.72 1.94.92.74.2 1.53.3 2.37.3.73 0 1.44-.08 2.14-.25.7-.17 1.33-.43 1.88-.79.55-.36.99-.83 1.33-1.39.34-.56.51-1.25.51-2.05 0-.37-.06-.75-.18-1.12a3.12 3.12 0 00-.15-.39H18c.55 0 1-.45 1-1s-.45-1-1-1z"],style:["M18 18H2V2h12.3l2-2H1C.4 0 0 .4 0 1v18c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V7.7l-2 2V18zm1.2-18l-7.6 7.6 2.8 2.8L20 4.8V0h-.8zM4 15.9c3.1.2 5.9.2 8.2-2 1.1-1.1 1.1-3 0-4.1-.6-.5-1.3-.8-2-.8s-1.4.3-1.9.8C7.2 11 6.6 14.3 4 15.9z"],"swap-horizontal":["M16.02 10c-.01 0-.01 0 0 0H16h.02zM2 6h13.58l-2.29 2.29a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-4-4a1.003 1.003 0 00-1.42 1.42L15.58 4H2c-.55 0-1 .45-1 1s.45 1 1 1zm2 4h-.02H4zm14 4H4.42l2.29-2.29a1 1 0 00.3-.71 1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.42 16H18c.55 0 1-.45 1-1s-.45-1-1-1z"],"swap-vertical":["M9.71 5.3l-4-4A.997.997 0 005 1.01c-.28 0-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L4 4.42V18c0 .55.45 1 1 1s1-.45 1-1V4.42l2.29 2.29a1 1 0 00.71.3 1.003 1.003 0 00.71-1.71zM10 3.98c0 .01 0 .01 0 0V4v-.02zm0 12.04c0-.01 0-.01 0 0V16v.02zm9-3.03c-.28 0-.53.11-.71.29L16 15.58V2c0-.55-.45-1-1-1s-1 .45-1 1v13.58l-2.29-2.29a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29.28 0 .53-.11.71-.29l4-4c.18-.18.29-.43.29-.71 0-.56-.45-1.01-1-1.01z"],"symbol-circle":["M10 4.01a6 6 0 100 12 6 6 0 100-12z"],"symbol-cross":["M15 8.01h-3v-3c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v3H5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h3v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-3h3c.55 0 1-.45 1-1v-2c0-.56-.45-1-1-1z"],"symbol-diamond":["M15 10.01c0-.21-.08-.39-.18-.54l.02-.01-4-6-.02.01c-.18-.28-.47-.46-.82-.46s-.64.18-.82.45l-.01-.01-4 6 .02.01c-.11.16-.19.34-.19.55s.08.39.18.54l-.02.01 4 6 .02-.01c.18.27.47.46.82.46s.64-.19.82-.46l.02.01 4-6-.02-.01c.1-.16.18-.34.18-.54z"],"symbol-square":["M15 4.01H5c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10c0-.56-.45-1-1-1z"],"symbol-triangle-down":["M16 5c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1 0 .16.05.31.11.44H4.1l5 10h.01c.17.33.5.56.89.56s.72-.23.89-.56h.01l5-10h-.01c.06-.13.11-.28.11-.44z"],"symbol-triangle-up":["M15.89 14.56l-4.99-10h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56H9.1l-5 10h.01c-.06.13-.11.28-.11.44 0 .55.45 1 1 1h10c.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44z"],tag:["M2 4a2 2 0 012-2h4.588a2 2 0 011.414.586l7.41 7.41a2 2 0 010 2.828l-4.588 4.588a2 2 0 01-2.829 0l-7.41-7.41A2 2 0 012 8.588V4zm3.489-.006a1.495 1.495 0 100 2.99 1.495 1.495 0 000-2.99z"],"take-action":["M5 7c.28 0 .53-.11.71-.29l5-5A1.003 1.003 0 009.29.29l-5 5A1.003 1.003 0 005 7zm6 6a1.003 1.003 0 001.71.71l5-5a1.003 1.003 0 00-1.42-1.42l-5 5c-.18.18-.29.43-.29.71zm8 5h-1c0-.55-.45-1-1-1h-7c-.55 0-1 .45-1 1H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm-9-6l6-6-1.29-1.29a1.003 1.003 0 00-1.42-1.42L12 2 6 8l1.29 1.29-7 7a1.003 1.003 0 001.42 1.42l7-7L10 12z"],taxi:["M19 9h-.33l.33 1v.5c0 .15-.03.3-.07.44h.01L17 17.23v.27c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5V17H6v.5c0 .83-.67 1.5-1.5 1.5S3 18.33 3 17.5v-.27l-1.93-6.28h.01c-.05-.15-.08-.3-.08-.45V10s.02-.06.05-.16c.06-.17.16-.47.28-.84H1c-.55 0-1-.45-1-1s.45-1 1-1h1l1-3h-.01v-.01c.25-.64 1-1.31 1.67-1.5 0 0 .78-.21 2.33-.36V1c0-.55.45-1 1-1h4c.55 0 1 .45 1 1v1.13c1.55.14 2.33.36 2.33.36.67.19 1.42.86 1.67 1.5V4H17l1 3h1c.55 0 1 .45 1 1s-.45 1-1 1zM3 11.5c0 .83.67 1.5 1.5 1.5S6 12.33 6 11.5 5.33 10 4.5 10 3 10.67 3 11.5zM16 7l-1-3H5L4 7v1h12V7zm-.5 3c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"],"text-highlight":["M16 17c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1-.45 1-1-.45-1-1-1c-.77 0-1.47.3-2 .78-.53-.48-1.23-.78-2-.78-.55 0-1 .45-1 1s.45 1 1 1 1 .45 1 1v12c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1c.77 0 1.47-.3 2-.78.53.48 1.23.78 2 .78.55 0 1-.45 1-1s-.45-1-1-1zm-4-4H2V7h10V5H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h11v-2zm7-8h-3v2h2v6h-2v2h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z"],th:["M19 1H1c-.6 0-1 .5-1 1v16c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V2c0-.5-.5-1-1-1zM7 17H2v-3h5v3zm0-4H2v-3h5v3zm0-4H2V6h5v3zm11 8H8v-3h10v3zm0-4H8v-3h10v3zm0-4H8V6h10v3z"],"th-derived":["M5.3 13.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7s-.1-.5-.3-.7l-3-3C6.5 7.1 6.3 7 6 7c-.6 0-1 .4-1 1 0 .3.1.5.3.7L6.6 10H1c-.6 0-1 .4-1 1s.4 1 1 1h5.6l-1.3 1.3zM19 1H3c-.5 0-1 .5-1 1v6h1c0-1.7 1.3-3 3-3 .8 0 1.6.3 2.1.9l.1.1H9v.8l1 1V6h8v3h-6.8c.3.3.5.6.6 1H18v3h-6.8l-.1.1-.9.9H18v3h-8v-2.8l-1 1V17H4v-.8c-.6-.5-1-1.3-1-2.2H2v4c0 .5.5 1 1 1h16c.6 0 1-.5 1-1V2c0-.5-.5-1-1-1z"],"th-disconnect":["M14.25 1H19c.5 0 1 .5 1 1v16c0 .5-.5 1-1 1h-7.221l.278-2H18v-3h-5.527l.14-1H18v-3h-4.971l.139-1H18V6h-4.416l.637-4.587c.02-.139.03-.277.03-.413zM8.221 1l-.694 5H2v3h5.11l-.139 1H2v3h4.555l-.14 1H2v3h3.999l-.22 1.587c-.02.139-.03.277-.03.413H1c-.6 0-1-.5-1-1V2c0-.5.4-1 1-1h7.221zM10.26.862a1 1 0 011.98.276l-2.5 18a1 1 0 01-1.98-.276l2.5-18z"],"th-filtered":["M17.333 10l1.435-1.722a1 1 0 00.232-.64V4.85l1-.9V18c0 .5-.5 1-1 1H1c-.6 0-1-.5-1-1V2c0-.5.4-1 1-1h6.722L12 4.85V6H8v3h4v1H8v3h10v-3h-.667zM7 17v-3H2v3h5zm0-4v-3H2v3h5zm0-4V6H2v3h5zm11 8v-3H8v3h10z","M19.35 0a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V4.13L11.19 1.1a.642.642 0 01.45-1.1h7.71z"],"th-list":["M19 1H1c-.6 0-1 .5-1 1v16c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V2c0-.5-.5-1-1-1zm-1 16H2v-3h16v3zm0-4H2v-3h16v3zm0-4H2V6h16v3z"],"thumbs-down":["M18.55 6.56c-.31-.01-.65-.03-1.02-.06.03 0 .06-.01.09-.01.88-.12 1.68-.63 1.76-1.37.08-.75-.58-1.25-1.46-1.33-.32-.03-.65-.05-.99-.08.59-.19 1.05-.54 1.09-1.2.05-.75-.99-1.32-1.87-1.41-.34-.03-.64-.05-.91-.07h-.11c-.28-.02-.54-.02-.77-.02-3.92-.08-7.29.6-9.36 1.93v7.72c2.67 1.66 5.95 4.61 5.26 7.08-.21.76.39 1.35 1.23 1.26 1.01-.11 1.71-1.18 1.75-2.28.05-1.29-.19-2.59-.62-3.74-.05-.32.01-.65.47-.68.61-.04 1.39-.08 1.99-.1.32 0 .64-.01.94-.03h.01c.52-.03 1-.07 1.42-.12.88-.11 1.69-.6 1.79-1.35.1-.75-.55-1.25-1.44-1.35-.07-.01-.13-.02-.2-.02.21-.02.42-.04.61-.06.88-.11 1.69-.6 1.79-1.35.09-.75-.56-1.31-1.45-1.36zM3 3H0v8h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"thumbs-up":["M3 9H0v8h3c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm16.99 3.09c-.1-.75-.91-1.24-1.79-1.35-.19-.02-.4-.05-.61-.06.07-.01.14-.01.2-.02.88-.1 1.53-.61 1.44-1.35-.1-.74-.91-1.24-1.79-1.35-.42-.05-.9-.09-1.42-.12h-.01l-.94-.03c-.6-.02-1.39-.05-1.99-.1-.45-.03-.51-.36-.47-.68.43-1.15.67-2.45.62-3.74-.04-1.11-.74-2.17-1.75-2.28-.84-.09-1.45.5-1.23 1.26.7 2.47-2.58 5.43-5.25 7.08v7.72c2.08 1.33 5.44 2.01 9.35 1.93.24 0 .49-.01.77-.02h.11c.27-.02.57-.04.91-.07.88-.08 1.92-.66 1.87-1.41-.04-.65-.5-1.01-1.09-1.2.34-.03.67-.05.99-.08.89-.08 1.55-.58 1.46-1.33-.08-.75-.88-1.25-1.76-1.37-.03 0-.06-.01-.09-.01.37-.02.71-.04 1.02-.06.91-.05 1.55-.61 1.45-1.36z"],tick:["M17 4c-.28 0-.53.11-.71.29L7 13.59 3.71 10.3A.965.965 0 003 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l10-10A1.003 1.003 0 0017 4z"],"tick-circle":["M10 20C4.48 20 0 15.52 0 10S4.48 0 10 0s10 4.48 10 10-4.48 10-10 10zm5-14c-.28 0-.53.11-.71.29L8 12.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l7-7A1.003 1.003 0 0015 6z"],time:["M11 9.59V4c0-.55-.45-1-1-1s-1 .45-1 1v6c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L11 9.59zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"],"timeline-area-chart":["M19 16H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-13.41l-7.07 7.07-4.3-3.44-.01.01A.987.987 0 007 6c-.24 0-.46.1-.63.24l-.01-.01L3 9.03V15h16V2.59z"],"timeline-bar-chart":["M19 17H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM9 16h2c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1zm6 0h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1zM3 16h2c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1z"],"timeline-events":["M5 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm10 0c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm-9 9H4v2h2v-2zM17 3v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H7v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H2c-.5 0-1 .5-1 1v14c0 .5.5 1 1 1h16c.5 0 1-.5 1-1V4c0-.5-.5-1-1-1h-1zM7 17H3v-4h4v4zm0-5H3V8h4v4zm5 5H8v-4h4v4zm0-5H8V8h4v4zm5 5h-4v-4h4v4zm0-5h-4V8h4v4zm-6 2H9v2h2v-2zm5-5h-2v2h2V9z"],"timeline-line-chart":["M19 16H2v-1.59l5-5 3.29 3.29c.18.19.43.3.71.3s.53-.11.71-.29l7-7a1.003 1.003 0 00-1.42-1.42L11 10.59l-3.29-3.3C7.53 7.11 7.28 7 7 7s-.53.11-.71.29L2 11.59V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],tint:["M9.86 2S3.98 9.18 3.98 12.17C3.99 15.4 6.78 18 9.96 18c3.18-.01 6.04-2.63 6.03-5.86C15.99 9.05 9.86 2 9.86 2z"],torch:["M6.97 19c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2h-6v2zm-3-15l3 4v8h6V8l3-4h-12zm5 5c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1V9zm6-9h-10c-.55 0-1 .45-1 1v2h12V1c0-.55-.45-1-1-1z"],tractor:["M4.5 11a4.5 4.5 0 110 9 4.5 4.5 0 010-9zm11.499 1a4 4 0 110 8 4 4 0 010-8zm-11.5 1.571a1.928 1.928 0 100 3.857 1.928 1.928 0 000-3.857zM16 14.667a1.333 1.333 0 100 2.666 1.333 1.333 0 000-2.666zM5.999 0C7.46 0 8.527.668 9 2l.851 4.256c1.433.096 2.82.217 4.147.362V2h2L16 6.862c.962.13 1.886.275 2.767.435.779.141 1.232.614 1.232 1.284L20 13a4.995 4.995 0 00-4-1.997A5.001 5.001 0 0011.099 15h-1.12a5.499 5.499 0 00-5.478-4.994 5.482 5.482 0 00-3.377 1.157H.004v-1.18L0 7.327c-.002-.597.37-1.18.999-1.302V1a1 1 0 011-1h4zm1 2H3v4h.75c1.386.027 2.749.073 4.079.139L6.999 2z"],train:["M16 18h-2l2 2H4l.12-.12L6 18H4c-1.1 0-2-.9-2-2V2c0-1.1 3.58-2 8-2s8 .9 8 2v14c0 1.1-.9 2-2 2zM5.5 15c.83 0 1.5-.67 1.5-1.5S6.33 12 5.5 12 4 12.67 4 13.5 4.67 15 5.5 15zM9 3H4v6h5V3zm7 0h-5v6h5V3zm-1.5 9c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"],translate:["M19.89 18.56l-4.99-10h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56h-.01l-1.73 3.46-2.8-2.3 1.99-1.64C11.44 7.34 12 6.23 12 5V4h1c.55 0 1-.45 1-1s-.45-1-1-1H8V1c0-.55-.45-1-1-1S6 .45 6 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h9v1c0 .62-.28 1.18-.73 1.54L7 8.42 4.73 6.54C4.28 6.18 4 5.62 4 5H2c0 1.23.56 2.34 1.44 3.07l1.99 1.64-3.06 2.52.01.01c-.23.18-.38.45-.38.76 0 .55.45 1 1 1 .24 0 .45-.1.63-.24l.01.01L7 11l3.36 2.77.01-.01c.02.02.05.03.08.05.01 0 .01.01.02.02l-2.36 4.73h.01c-.07.13-.12.28-.12.44 0 .55.45 1 1 1 .39 0 .72-.23.89-.56h.01L11.12 17h5.76l1.22 2.45h.01c.17.32.5.55.89.55.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44zM12.12 15L14 11.24 15.88 15h-3.76z"],trash:["M17 1h-5c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1H3c-.55 0-1 .45-1 1v1h16V2c0-.55-.45-1-1-1zm.5 3h-15c-.28 0-.5.22-.5.5s.22.5.5.5H3v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zM7 16c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8zm4 0c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8zm4 0c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8z"],tree:["M11 15.542V20H9v-4.458L2 17l4.5-5.625L4 12l3.655-5.483L6 7l4-7 4 7-1.655-.483L16 12l-2.5-.625L18 17l-7-1.458z"],"trending-down":["M19 10c-.55 0-1 .45-1 1v1.37l-6.25-7.03-.01.01A.971.971 0 0011 5c-.23 0-.42.09-.59.21l-.01-.01-3.43 2.58-5.42-3.61-.01.01A.969.969 0 001 4c-.55 0-1 .45-1 1 0 .35.19.64.46.82l-.01.01 6 4 .01-.02c.15.11.33.19.54.19.23 0 .42-.09.59-.21l.01.01 3.26-2.45L16.77 14H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z"],"trending-up":["M19 4h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.77l-5.91 6.65L7.6 10.2l-.01.01C7.42 10.09 7.23 10 7 10c-.21 0-.39.08-.54.18l-.01-.02-6 4 .01.02c-.27.18-.46.47-.46.82 0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 5.41-3.61 3.43 2.58.01-.01c.18.11.37.2.6.2.3 0 .56-.14.74-.34l.01.01L18 7.63V9c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1z"],truck:["M16 0a1 1 0 011 1v11a1 1 0 011 1v3h.5a.5.5 0 01.5.5v1a.5.5 0 01-.5.5H17v1a1 1 0 01-1 1h-1a1 1 0 01-1-1v-1H6v1a1 1 0 01-1 1H4a1 1 0 01-1-1v-1H1.5a.5.5 0 01-.5-.5v-1a.5.5 0 01.5-.5H2v-3a1 1 0 011-1V1a1 1 0 112 0v3a2 2 0 012-2h6a2 2 0 012 2V1a1 1 0 011-1zm-4 10H8a1 1 0 00-1 1v4a1 1 0 001 1h4a1 1 0 001-1v-4a1 1 0 00-1-1zm-7 4H4a1 1 0 000 2h1a1 1 0 000-2zm11 0h-1a1 1 0 000 2h1a1 1 0 000-2zm-4.5 0a.5.5 0 110 1h-3l-.09-.008A.5.5 0 018.5 14zm0-1.5a.5.5 0 110 1h-3l-.09-.008a.5.5 0 01.09-.992zm0-1.5a.5.5 0 110 1h-3l-.09-.008A.5.5 0 018.5 11zM14 5H6v3h8V5z"],"two-columns":["M5 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm14.71 9.29l-3-3A1.003 1.003 0 0015 7v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM12 0H8c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],unarchive:["M16.434 0a1 1 0 01.857.486L20 5v14a1 1 0 01-1 1H1a1 1 0 01-1-1V5L2.709.486A1 1 0 013.566 0h12.868zM10 8c-.28 0-.53.11-.71.29l-3 3-.084.096A1.003 1.003 0 007.71 12.71L9 11.41v4.58l.007.116c.058.496.482.884.993.884.55 0 1-.45 1-1v-4.58l1.29 1.29.081.073c.171.139.389.227.629.227a1.003 1.003 0 00.71-1.71l-3-3-.096-.084A1.002 1.002 0 0010 8zm6-6H4L2 5.002h16L16 2z"],underline:["M10 17c3.3 0 6-2.7 6-6V3.5c0-.8-.7-1.5-1.5-1.5S13 2.7 13 3.5V11c0 1.7-1.3 3-3 3s-3-1.3-3-3V3.5C7 2.7 6.3 2 5.5 2S4 2.7 4 3.5V11c0 3.3 2.7 6 6 6zM16.5 19h-13c-.3 0-.5.2-.5.5s.2.5.5.5h13c.3 0 .5-.2.5-.5s-.2-.5-.5-.5z"],undo:["M5 14c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm9-9H3.41L5.7 2.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 5.47 0 5.72 0 6c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 7H14c2.21 0 4 1.79 4 4s-1.79 4-4 4H9v2h5c3.31 0 6-2.69 6-6s-2.69-6-6-6z"],"ungroup-objects":["M4.5 6C2.01 6 0 8.01 0 10.5S2.01 15 4.5 15 9 12.99 9 10.5 6.99 6 4.5 6zm11 0C13.01 6 11 8.01 11 10.5s2.01 4.5 4.5 4.5 4.5-2.01 4.5-4.5S17.99 6 15.5 6z"],"unknown-vehicle":["M13 11.988v-4H4v-1l1-3h6V2.003a35.867 35.867 0 00-1-.015c-3.593 0-5.332.488-5.332.488-.67.188-1.424.864-1.674 1.503l-.004.009H3l-1 3H1a1 1 0 100 2h.333l-.28.84-.053.16v7.5a1.5 1.5 0 103 0v-.5h12v.5a1.5 1.5 0 103 0v-4.5h-5a1 1 0 01-1-1zm-8.5 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM19.83 2.782a2.392 2.392 0 00-.592-.853c-.276-.264-.64-.485-1.09-.663C17.695 1.09 17.132 1 16.457 1c-.523 0-.996.084-1.418.253a3.157 3.157 0 00-1.084.703c-.299.3-.532.656-.698 1.065-.166.41-.254.861-.264 1.353h2.096c0-.246.028-.476.085-.69.057-.214.145-.4.264-.56.119-.16.27-.287.456-.383.185-.095.406-.143.663-.143.38 0 .677.1.89.3.215.2.321.51.321.93.01.245-.035.45-.135.614-.1.164-.23.314-.392.45a8.598 8.598 0 01-.527.41 3.53 3.53 0 00-.542.485c-.171.187-.32.412-.45.676-.127.265-.206.592-.234.984v.614h1.924v-.519c.038-.273.13-.5.278-.683.147-.182.316-.343.506-.484a13.5 13.5 0 01.606-.424c.214-.14.408-.312.584-.512s.323-.442.442-.724.178-.642.178-1.079c0-.264-.059-.548-.178-.854zm-4.54 6.099v2.103h2.237V8.881H15.29z"],unlock:["M14 1c-2.21 0-4 1.79-4 4v4H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-8c0-.55-.45-1-1-1h-2V5c0-1.1.9-2 2-2s2 .9 2 2v2c0 .55.45 1 1 1s1-.45 1-1V5c0-2.21-1.79-4-4-4z"],unpin:["M11.77 1.16c-.81.81-.74 2.28.02 3.76L6.1 8.71c-2.17-1.46-4.12-2-4.94-1.18l4.95 4.95-2.12 3.54 3.54-2.12 4.95 4.95c.82-.82.27-2.77-1.19-4.94l3.8-5.69c1.47.76 2.94.84 3.76.02l-7.08-7.08z"],unresolve:["M11.47 12.46c.16-.36.29-.74.38-1.14 0-.02.01-.04.01-.06.09-.4.14-.82.14-1.26 0-.44-.05-.86-.14-1.27 0-.02-.01-.04-.01-.06-.09-.4-.22-.78-.38-1.14-.01-.02-.02-.03-.02-.05a5.94 5.94 0 00-.61-1.03c0-.01-.01-.01-.01-.02a6.308 6.308 0 00-2.1-1.77c-.19-.1-.39-.18-.59-.26-.03-.01-.06-.02-.1-.03-.17-.07-.34-.12-.52-.17-.05-.01-.1-.03-.15-.04a4.34 4.34 0 00-.52-.09c-.05-.01-.11-.02-.17-.03C6.46 4.02 6.23 4 6 4c-3.31 0-6 2.69-6 6s2.69 6 6 6c.23 0 .46-.02.68-.04l.17-.03c.17-.02.34-.06.51-.09.05-.01.1-.03.15-.04.18-.05.36-.1.53-.17l.09-.03a5.973 5.973 0 002.68-2.04c0-.01.01-.01.01-.02.24-.32.44-.66.61-1.03.02-.01.03-.03.04-.05zM14 4c-.99 0-1.91.24-2.73.66a7.51 7.51 0 010 10.68c.82.42 1.74.66 2.73.66 3.31 0 6-2.69 6-6s-2.69-6-6-6z"],updated:["M10 0C6.71 0 3.82 1.6 2 4.05V2c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.76C5.22 3.17 7.47 2 10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8c0-.55-.45-1-1-1s-1 .45-1 1c0 5.52 4.48 10 10 10s10-4.48 10-10S15.52 0 10 0zm4 7c-.28 0-.53.11-.71.29L9 11.58 6.71 9.29a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l5-5A1.003 1.003 0 0014 7z"],upload:["M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm4 10c-.28 0-.53-.11-.71-.29L11 7.41V15c0 .55-.45 1-1 1s-1-.45-1-1V7.41l-2.29 2.3a1.003 1.003 0 01-1.42-1.42l4-4c.18-.18.43-.29.71-.29s.53.11.71.29l4 4A1.003 1.003 0 0114 10z"],user:["M10 0C4.48 0 0 4.48 0 10c0 .33.02.65.05.97.01.12.03.23.05.35.03.2.05.4.09.59.03.14.06.28.1.42l.12.48c.05.16.1.31.15.46.05.13.09.27.15.4.06.16.13.32.21.48.05.11.1.22.16.33.09.17.17.34.27.5.05.09.1.17.15.25.11.18.22.35.34.52.04.06.08.11.12.17 1.19 1.62 2.85 2.86 4.78 3.53l.09.03c.46.15.93.27 1.42.36.08.01.17.03.25.04.49.07.99.12 1.5.12s1.01-.05 1.5-.12c.08-.01.17-.02.25-.04.49-.09.96-.21 1.42-.36l.09-.03c1.93-.67 3.59-1.91 4.78-3.53.04-.05.08-.1.12-.16.12-.17.23-.35.34-.53.05-.08.1-.16.15-.25.1-.17.19-.34.27-.51.05-.11.1-.21.15-.32.07-.16.14-.32.21-.49.05-.13.1-.26.14-.39.05-.15.11-.31.15-.46.05-.16.08-.32.12-.48.03-.14.07-.28.1-.42.04-.19.06-.39.09-.59.02-.12.04-.23.05-.35.05-.32.07-.64.07-.97 0-5.52-4.48-10-10-10zm0 18a7.94 7.94 0 01-6.15-2.89c.84-.44 1.86-.82 2.67-1.19 1.45-.65 1.3-1.05 1.35-1.59.01-.07.01-.14.01-.21-.51-.45-.93-1.08-1.2-1.8l-.01-.01c0-.01-.01-.02-.01-.03a4.42 4.42 0 01-.15-.48c-.33-.07-.53-.44-.61-.79-.08-.14-.23-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.63.06-1.55.17-2.15.02-.17.06-.33.11-.5.21-.73.66-1.4 1.26-1.86.62-.47 1.5-.72 2.28-.72.78 0 1.65.25 2.27.73.6.46 1.05 1.12 1.26 1.86.05.16.08.33.11.5.11.6.17 1.51.17 2.15v.09c.22.1.42.33.46.82.04.39-.12.73-.2.87-.07.34-.27.71-.6.78-.04.16-.09.33-.15.48 0 .01-.02.05-.02.05-.26.71-.67 1.33-1.17 1.78 0 .08.01.16.01.23.05.54-.15.94 1.31 1.59.81.36 1.84.74 2.68 1.19A7.958 7.958 0 0110 18z"],variable:["M4.93 3.79a9.1 9.1 0 012.2-2.27L7.29 1c-1.38.59-2.57 1.33-3.55 2.22C2.46 4.39 1.49 5.72.83 7.23.28 8.51 0 9.81 0 11.12c0 2.28.83 4.57 2.49 6.86l.16-.55c-.49-1.23-.73-2.38-.73-3.44 0-1.67.28-3.46.84-5.36.55-1.9 1.28-3.51 2.17-4.84zm9.38 8.39l-.33-.2c-.37.54-.65.87-.82 1a.74.74 0 01-.42.12c-.19 0-.38-.12-.57-.37-.31-.42-.73-1.59-1.26-3.5.47-.85.86-1.41 1.19-1.67.23-.19.48-.29.74-.29.1 0 .28.04.53.11.26.07.48.11.68.11.27 0 .5-.1.68-.29.18-.19.27-.44.27-.75 0-.33-.09-.58-.27-.77-.18-.19-.44-.29-.78-.29-.3 0-.59.07-.86.22s-.61.47-1.02.97c-.31.37-.77 1.02-1.37 1.94a9.683 9.683 0 00-1.24-3.14l-3.24.59-.06.36c.24-.05.44-.07.61-.07.32 0 .59.14.8.43.33.45.8 1.8 1.39 4.07-.47.64-.78 1.06-.96 1.26-.28.32-.52.53-.7.62-.14.08-.3.11-.48.11-.14 0-.36-.08-.67-.23-.21-.1-.4-.15-.57-.15-.31 0-.57.11-.78.32s-.31.48-.31.8c0 .31.09.55.28.75.19.19.44.29.76.29.31 0 .6-.07.87-.2s.61-.42 1.02-.86c.41-.44.98-1.13 1.7-2.08.28.9.52 1.56.72 1.97.2.41.44.71.7.89.26.18.59.27.99.27.38 0 .77-.14 1.17-.43.54-.36 1.07-1 1.61-1.91zM17.51 1l-.15.54c.49 1.24.73 2.39.73 3.45 0 1.43-.21 2.96-.63 4.6-.33 1.26-.75 2.45-1.27 3.55-.52 1.11-1.02 1.97-1.51 2.6-.49.62-1.09 1.2-1.8 1.72l-.17.53c1.38-.59 2.57-1.34 3.55-2.23 1.29-1.17 2.26-2.5 2.91-4 .55-1.28.83-2.59.83-3.91 0-2.27-.83-4.56-2.49-6.85z"],"vertical-bar-chart-asc":["M8 7H7c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zM3 9H2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1zm10-5h-1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm5-4h-1c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z"],"vertical-bar-chart-desc":["M3 0H2c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm5 4H7c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm5 3h-1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm5 2h-1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1z"],"vertical-distribution":["M1 2h18c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1zm2 5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1H3zm16 11H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],video:["M19 2H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM7 14V6l6 4-6 4z"],virus:["M15.249 13.835l1.251 1.251.354-.354.087-.077a1 1 0 011.327 1.491l-2.122 2.122-.087.077a1 1 0 01-1.327-1.491l.354-.354-1.251-1.251A6.466 6.466 0 0111 16.424L10.999 18h.501a1 1 0 01.117 1.993L11.5 20h-3a1 1 0 01-.117-1.993L8.5 18h.499v-1.577a6.46 6.46 0 01-2.538-.97L5.414 16.5l.354.354a1 1 0 01-1.327 1.491l-.087-.077-2.122-2.122a1 1 0 011.327-1.491l.087.077.354.354.97-.97a6.472 6.472 0 01-1.384-3.057l-.025.002L2 11.06v.44a1 1 0 01-1.993.117L0 11.5v-3a1 1 0 011.993-.117L2 8.5v.56h1.567A6.471 6.471 0 014.97 5.883l-.971-.969-.353.354-.087.077a1 1 0 01-1.327-1.491l2.122-2.122.087-.077a1 1 0 011.327 1.491l-.354.353 1.047 1.048A6.46 6.46 0 019 3.577L9 2h-.5A1 1 0 018.383.007L8.5 0h3a1 1 0 01.117 1.993L11.5 2H11v1.577a6.466 6.466 0 012.838 1.176l.04-.046L15.086 3.5l-.353-.353a1 1 0 011.327-1.491l.087.077 2.122 2.122a1 1 0 01-1.327 1.491l-.087-.077-.354-.354-1.207 1.207-.046.041a6.467 6.467 0 011.16 2.733H18V8.5a1 1 0 011.993-.117L20 8.5v3a1 1 0 01-1.993.117L18 11.5v-.605h-1.561a6.466 6.466 0 01-1.19 2.94zM12.5 11a1.5 1.5 0 100 3 1.5 1.5 0 000-3zM8 6a2 2 0 100 4 2 2 0 000-4z"],"volume-down":["M15.92 3.93l-1.6 1.18A7.948 7.948 0 0116 10c0 1.84-.63 3.54-1.68 4.89l1.6 1.18A9.878 9.878 0 0018 10c0-2.29-.78-4.39-2.08-6.07zM11 3c-.28 0-.53.11-.71.29L7.59 6H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"volume-off":["M14 3c-.28 0-.53.11-.71.29L10.59 6H6c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"],"volume-up":["M9 3.43c-.28 0-.53.11-.71.29l-2.7 2.71H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71a1.003 1.003 0 001.71-.71v-12c-.01-.55-.46-1-1.01-1zm8.31-1.56l-1.62 1.2C17.14 5.16 18 7.69 18 10.43s-.86 5.27-2.31 7.37l1.62 1.2C19 16.57 20 13.62 20 10.43c0-3.18-1-6.13-2.69-8.56zm-3.39 2.49l-1.6 1.18A7.948 7.948 0 0114 10.43c0 1.84-.63 3.54-1.68 4.89l1.6 1.18A9.94 9.94 0 0016 10.43c0-2.28-.78-4.38-2.08-6.07z"],walk:["M16 10h-2c-.23 0-.42-.09-.59-.21l-.01.01-1.69-1.27-.63 3.14 2.62 2.62c.19.18.3.43.3.71v4c0 .55-.45 1-1 1s-1-.45-1-1v-3.59L9.39 12.8l-2.45 6.55h-.01c-.14.38-.5.65-.93.65-.55 0-1-.45-1-1 0-.12.03-.24.07-.35h-.01L9.43 7h-2.9l-1.7 2.55-.01-.01c-.18.27-.47.46-.82.46-.55 0-1-.45-1-1 0-.21.08-.39.18-.54l-.01-.01 2-3 .02.01C5.36 5.19 5.65 5 6 5h4.18l.36-.96c-.33-.43-.54-.96-.54-1.54a2.5 2.5 0 015 0A2.5 2.5 0 0112.5 5c-.06 0-.12-.01-.18-.02l-.44 1.18L14.33 8H16c.55 0 1 .45 1 1s-.45 1-1 1z"],"warning-sign":["M19.86 17.52l.01-.01-9-16-.01.01C10.69 1.21 10.37 1 10 1s-.69.21-.86.52l-.01-.01-9 16 .01.01c-.08.14-.14.3-.14.48 0 .55.45 1 1 1h18c.55 0 1-.45 1-1 0-.18-.06-.34-.14-.48zM11 17H9v-2h2v2zm0-3H9V6h2v8z"],"waterfall-chart":["M13 7h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm-9 8h1c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm4-6h2c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm11-5h-1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm0 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z"],widget:["M18 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm15-1h2V5h-2v10zM3 5H1v10h2V5zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3 3h10V1H5v2zm13 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM5 19h10v-2H5v2z"],"widget-button":["M1 4h18c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1zm1 2v8h16V6H2zm4 5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"],"widget-footer":["M17 0H3c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H4v-4h12v4zm0-5H4V2h12v11z"],"widget-header":["M17 0H3c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H4V7h12v11zm0-12H4V2h12v4z"],wrench:["M19.8 4.44L16.13 8.1l-3.55-.71-.71-3.53L15.54.21c-2.01-.53-4.23-.03-5.8 1.53-1.86 1.85-2.23 4.6-1.14 6.83L.59 16.59C.22 16.95 0 17.45 0 18a2 2 0 002 2c.55 0 1.05-.22 1.41-.59l8.03-8.04c2.23 1.05 4.97.67 6.82-1.16 1.57-1.56 2.07-3.77 1.54-5.77z"],"zoom-in":["M19.56 17.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm3-7H9V5c0-.55-.45-1-1-1s-1 .45-1 1v2H5c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V9h2c.55 0 1-.45 1-1s-.45-1-1-1z"],"zoom-out":["M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm8.56 10.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"],"zoom-to-fit":["M1 7c.55 0 1-.45 1-1V2h4c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1zm5 1a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L4.41 10 5.7 8.71c.19-.18.3-.43.3-.71zm2-2c.28 0 .53-.11.71-.29L10 4.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C10.53 2.11 10.28 2 10 2s-.53.11-.71.29l-2 2A1.003 1.003 0 008 6zM6 18H2v-4c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm8-6a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l1.3 1.29-1.29 1.29c-.19.18-.3.43-.3.71zm5-12h-5c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-7 14c-.28 0-.53.11-.71.29L10 15.59 8.71 14.3A.965.965 0 008 14a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 0012 14zm7-1c-.55 0-1 .45-1 1v4h-4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1z"]}},function(e,t,n){"use strict";n.d(t,"c",(function(){return f})),n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(49),d=function(e){var t,n=e.alignIndicator,r=e.children,s=e.className,l=e.indicatorChildren,u=e.inline,h=e.inputRef,d=e.label,f=e.labelElement,p=e.large,m=e.style,g=e.type,v=e.typeClassName,_=e.tagName,b=void 0===_?"label":_,y=Object(i.d)(e,["alignIndicator","children","className","indicatorChildren","inline","inputRef","label","labelElement","large","style","type","typeClassName","tagName"]),w=o()(c.Classes.CONTROL,v,((t={})[c.Classes.DISABLED]=y.disabled,t[c.Classes.INLINE]=u,t[c.Classes.LARGE]=p,t),c.Classes.alignmentClass(n),s);return a.createElement(b,{className:w,style:m},a.createElement("input",Object(i.a)({},y,{ref:h,type:g})),a.createElement("span",{className:c.Classes.CONTROL_INDICATOR},l),d,f,r)},f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.innerLabelChecked,n=e.innerLabel,r=Object(i.d)(e,["innerLabelChecked","innerLabel"]),o=n||t?[a.createElement("div",{key:"checked",className:c.Classes.CONTROL_INDICATOR_CHILD},a.createElement("div",{className:c.Classes.SWITCH_INNER_TEXT},t||n)),a.createElement("div",{key:"unchecked",className:c.Classes.CONTROL_INDICATOR_CHILD},a.createElement("div",{className:c.Classes.SWITCH_INNER_TEXT},n))]:null;return a.createElement(d,Object(i.a)({},r,{type:"checkbox",typeClassName:c.Classes.SWITCH,indicatorChildren:o}))},t.displayName=u.a+".Switch",t=Object(i.b)([s.polyfill],t)}(l.a),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){return a.createElement(d,Object(i.a)({},this.props,{type:"radio",typeClassName:c.Classes.RADIO}))},t.displayName=u.a+".Radio",t=Object(i.b)([s.polyfill],t)}(l.a),m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={indeterminate:t.props.indeterminate||t.props.defaultIndeterminate||!1},t.handleChange=function(e){var n=e.target.indeterminate;null==t.props.indeterminate&&t.setState({indeterminate:n}),Object(h.b)(t.props.onChange,e)},t.handleInputRef=function(e){t.input=e,Object(h.b)(t.props.inputRef,e)},t}return Object(i.c)(t,e),t.getDerivedStateFromProps=function(e){var t=e.indeterminate;return null!=t?{indeterminate:t}:null},t.prototype.render=function(){var e=this.props,t=(e.defaultIndeterminate,e.indeterminate,Object(i.d)(e,["defaultIndeterminate","indeterminate"]));return a.createElement(d,Object(i.a)({},t,{inputRef:this.handleInputRef,onChange:this.handleChange,type:"checkbox",typeClassName:c.Classes.CHECKBOX}))},t.prototype.componentDidMount=function(){this.updateIndeterminate()},t.prototype.componentDidUpdate=function(){this.updateIndeterminate()},t.prototype.updateIndeterminate=function(){null!=this.input&&(this.input.indeterminate=this.state.indeterminate)},t.displayName=u.a+".Checkbox",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.panel;return a.createElement("div",{className:o()(c.Classes.TAB_PANEL,t),role:"tablist"},n)},t.defaultProps={disabled:!1,id:void 0},t.displayName=u.a+".Tab",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return d}));var i,r=n(26),o=n(5),a=n(17),s=n.n(a),c=n(2),l=n(22),u=n(39),h=n(158);!function(e){e.ALWAYS="always",e.NEVER="never",e.WHEN_TRUNCATED="when-truncated",e.WHEN_TRUNCATED_APPROX="when-truncated-approx"}(i||(i={}));var d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isPopoverOpen:!1,isTruncated:!1},t.handleContentDivRef=function(e){return t.contentDiv=e},t.handlePopoverOpen=function(){t.setState({isPopoverOpen:!0})},t.handlePopoverClose=function(){t.setState({isPopoverOpen:!1})},t}return Object(r.c)(t,e),t.prototype.componentDidMount=function(){this.setTruncationState()},t.prototype.componentDidUpdate=function(){this.setTruncationState()},t.prototype.render=function(){var e=this.props,t=e.children,n=e.detectTruncation,i=e.truncateLength,r=e.truncationSuffix,o=""+t,a=o;if(!n&&i>0&&a.length>i&&(a=a.substring(0,i)+r),this.shouldShowPopover(o)){var u=s()(this.props.className,l.vb);return c.createElement("div",{className:u},c.createElement("div",{className:l.Ab,ref:this.handleContentDivRef},a),this.renderPopover())}u=s()(this.props.className,l.wb);return c.createElement("div",{className:u,ref:this.handleContentDivRef},a)},t.prototype.renderPopover=function(){var e=this.props,t=e.children,n=e.preformatted;if(this.state.isPopoverOpen){var i=s()(l.xb,n?l.N:l.M),r=c.createElement("div",{className:i},t);return c.createElement(o.Popover,{className:l.yb,modifiers:{preventOverflow:{boundariesElement:"window"}},content:r,position:o.Position.BOTTOM,isOpen:!0,onClose:this.handlePopoverClose},c.createElement(o.Icon,{icon:"more"}))}return c.createElement("span",{className:l.yb,onClick:this.handlePopoverOpen},c.createElement(o.Icon,{icon:"more"}))},t.prototype.shouldShowPopover=function(e){var t=this.props,n=t.detectTruncation,r=t.measureByApproxOptions,o=t.showPopover,a=t.truncateLength;switch(o){case i.ALWAYS:return!0;case i.NEVER:return!1;case i.WHEN_TRUNCATED:return n?this.state.isTruncated:a>0&&e.length>a;case i.WHEN_TRUNCATED_APPROX:if(!n)return a>0&&e.length>a;if(null==this.props.parentCellHeight||null==this.props.parentCellWidth)return!1;var s=r.approximateCharWidth,c=r.approximateLineHeight,l=r.cellHorizontalPadding,h=r.numBufferLines,d=this.props.parentCellWidth;return u.b.getApproxCellHeight(e,d,s,c,l,h)>this.props.parentCellHeight;default:return!1}},t.prototype.setTruncationState=function(){if(this.props.detectTruncation&&this.props.showPopover===i.WHEN_TRUNCATED)if(void 0!==this.contentDiv){var e=this.state.isTruncated,t=this.contentDiv,n=t.clientHeight,r=t.clientWidth,o=t.scrollHeight,a=t.scrollWidth,s=e?a-25:a,c=e&&s===r||s>r||o>n;this.setState({isTruncated:c})}else this.setState({isTruncated:!1})},t.displayName=o.DISPLAYNAME_PREFIX+".TruncatedFormat",t.defaultProps={detectTruncation:!1,measureByApproxOptions:{approximateCharWidth:8,approximateLineHeight:18,cellHorizontalPadding:2*h.a.CELL_HORIZONTAL_PADDING,numBufferLines:0},preformatted:!1,showPopover:i.WHEN_TRUNCATED,truncateLength:2e3,truncationSuffix:"..."},t}(c.PureComponent)},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var i=n(22),r=n(74),o=n(39),a=function(){function e(e,t,n){var i=this;this.tableElement=e,this.scrollContainerElement=t,this.cellContainerElement=n,this.convertCellIndexToClientX=function(e){return i.grid.getCumulativeWidthAt(e)},this.convertCellMidpointToClientX=function(e){return(i.grid.getCumulativeWidthBefore(e)+i.grid.getCumulativeWidthAt(e))/2},this.convertCellIndexToClientY=function(e){return i.grid.getCumulativeHeightAt(e)},this.convertCellMidpointToClientY=function(e){return(i.grid.getCumulativeHeightBefore(e)+i.grid.getCumulativeHeightAt(e))/2},this.toGridX=function(e){var t=i.cellContainerElement.getBoundingClientRect().left,n=i.scrollContainerElement.scrollLeft,r=e-(t+n);return null!=i.numFrozenColumns&&i.numFrozenColumns>0&&r<=i.grid.getCumulativeWidthBefore(i.numFrozenColumns)?r:r+n},this.toGridY=function(e){var t=i.cellContainerElement.getBoundingClientRect().top,n=i.scrollContainerElement.scrollTop,r=e-(t+n);return null!=i.numFrozenRows&&i.numFrozenRows>0&&r<=i.grid.getCumulativeHeightBefore(i.numFrozenRows)?r:r+n},this.numFrozenRows=0,this.numFrozenColumns=0}return e.prototype.setGrid=function(e){return this.grid=e,this},e.prototype.setNumFrozenRows=function(e){return this.numFrozenRows=e,this},e.prototype.setNumFrozenColumns=function(e){return this.numFrozenColumns=e,this},e.prototype.getViewportRect=function(){return new r.a(this.scrollContainerElement.scrollLeft,this.scrollContainerElement.scrollTop,this.scrollContainerElement.clientWidth,this.scrollContainerElement.clientHeight)},e.prototype.getWidestVisibleCellInColumn=function(t){for(var n=this.getColumnCellSelector(t),i=this.tableElement.querySelectorAll(n),r=0,a=0;a<i.length;a++){var s=o.b.measureElementTextContent(i.item(a)).width,c=Math.ceil(s)+2*e.CELL_HORIZONTAL_PADDING;c>r&&(r=c)}return r},e.prototype.getTallestVisibleCellInColumn=function(e){for(var t=this.getColumnCellSelector(e),n=this.tableElement.querySelectorAll(t+"."+i.d),r=0,o=0;o<n.length;o++){var a=n.item(o),s=a.querySelector("."+i.Ab),c=a.querySelector("."+i.wb),l=a.querySelector("."+i.zb),u=0;(u=null!=s?s.scrollHeight:null!=c?c.scrollHeight:null!=l?l.scrollHeight:a.scrollHeight)>r&&(r=u)}return r},e.prototype.convertPointToColumn=function(e,t){if(!this.getTableRect().containsX(e))return-1;var n=this.toGridX(e),i=t?this.grid.numCols:this.grid.numCols-1,r=t?this.convertCellMidpointToClientX:this.convertCellIndexToClientX;return o.b.binarySearch(n,i,r)},e.prototype.convertPointToRow=function(e,t){if(!this.getTableRect().containsY(e))return-1;var n=this.toGridY(e),i=t?this.grid.numRows:this.grid.numRows-1,r=t?this.convertCellMidpointToClientY:this.convertCellIndexToClientY;return o.b.binarySearch(n,i,r)},e.prototype.convertPointToCell=function(e,t){var n=this.toGridX(e),i=this.toGridY(t);return{col:o.b.binarySearch(n,this.grid.numCols-1,this.convertCellIndexToClientX),row:o.b.binarySearch(i,this.grid.numRows-1,this.convertCellIndexToClientY)}},e.prototype.getColumnCellSelector=function(e){return"."+(e<this.numFrozenColumns?i.Q:i.R)+" ."+i.Cb(e)},e.prototype.getTableRect=function(){return r.a.wrap(this.tableElement.getBoundingClientRect())},e.CELL_HORIZONTAL_PADDING=10,e}()},function(e,t,n){"use strict";n.d(t,"b",(function(){return d})),n.d(t,"a",(function(){return f}));var i=n(26),r=n(17),o=n.n(r),a=n(2),s=n(22),c=n(5),l=n(137),u=n(157),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.children,r=t.omitQuotesOnStrings,c=t.stringify,l=this.props.showPopover,h=null==n;h&&(l=u.b.NEVER);var d=o()(this.props.className,((e={})[s.I]=h,e)),f="";return f=r&&"string"===typeof n?n:c(n),a.createElement(u.a,Object(i.a)({},this.props,{className:d,showPopover:l}),f)},t.displayName=c.DISPLAYNAME_PREFIX+".JSONFormat",t.defaultProps={omitQuotesOnStrings:!0,stringify:function(e){return JSON.stringify(e,null,2)}},t}(a.Component),d=function(){return a.createElement(f,null)},f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.shouldComponentUpdate=function(e){return!c.Utils.shallowCompareKeys(this.props,e,{exclude:["style"]})||!c.Utils.deepCompareKeys(this.props.style,e.style)},t.prototype.render=function(){var e,t,n=this.props,r=n.cellRef,d=n.tabIndex,f=n.onKeyDown,p=n.onKeyUp,m=n.onKeyPress,g=n.style,v=n.intent,_=n.interactive,b=n.loading,y=n.tooltip,w=n.truncated,O=n.className,C=n.wrapText,E=o()(s.d,c.Classes.intentClass(v),((e={})[s.g]=_,e[c.Classes.LOADING]=b,e[s.ub]=w,e),O),A=o()(((t={})[s.zb]=w,t[s.H]=!C,t)),x=a.Children.map(this.props.children,(function(e){var t=c.Utils.isElementOfType(e,u.a)||c.Utils.isElementOfType(e,h);return null!=g&&a.isValidElement(e)&&t?a.cloneElement(e,{parentCellHeight:parseInt(g.height.toString(),10),parentCellWidth:parseInt(g.width.toString(),10)}):e})),T=a.createElement("div",{className:A},x);return a.createElement("div",Object(i.a)({className:E,title:y,ref:r},{style:g,tabIndex:d,onKeyDown:f,onKeyUp:p,onKeyPress:m}),a.createElement(l.a,{loading:b,variableLength:!0},T))},t.displayName=c.DISPLAYNAME_PREFIX+".Cell",t.defaultProps={truncated:!0,wrapText:!1},t}(a.Component)},function(e,t,n){e.exports=n(440)},function(e,t,n){var i,r;!function(o){if(void 0===(r="function"===typeof(i=o)?i.call(t,n,t,e):i)||(e.exports=r),!0,e.exports=o(),!!0){var a=window.Cookies,s=window.Cookies=o();s.noConflict=function(){return window.Cookies=a,s}}}((function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var i in n)t[i]=n[i]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(i){function r(){}function o(t,n,o){if("undefined"!==typeof document){"number"===typeof(o=e({path:"/"},r.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():"";try{var a=JSON.stringify(n);/^[\{\[]/.test(a)&&(n=a)}catch(l){}n=i.write?i.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var s="";for(var c in o)o[c]&&(s+="; "+c,!0!==o[c]&&(s+="="+o[c].split(";")[0]));return document.cookie=t+"="+n+s}}function a(e,n){if("undefined"!==typeof document){for(var r={},o=document.cookie?document.cookie.split("; "):[],a=0;a<o.length;a++){var s=o[a].split("="),c=s.slice(1).join("=");n||'"'!==c.charAt(0)||(c=c.slice(1,-1));try{var l=t(s[0]);if(c=(i.read||i)(c,l)||t(c),n)try{c=JSON.parse(c)}catch(u){}if(r[l]=c,e===l)break}catch(u){}}return e?r[e]:r}}return r.set=o,r.get=function(e){return a(e,!1)},r.getJSON=function(e){return a(e,!0)},r.remove=function(t,n){o(t,"",e(n,{expires:-1}))},r.defaults={},r.withConverter=n,r}((function(){}))}))},function(e,t,n){"use strict";(function(t){"undefined"===typeof t||!t.version||0===t.version.indexOf("v0.")||0===t.version.indexOf("v1.")&&0!==t.version.indexOf("v1.8.")?e.exports={nextTick:function(e,n,i,r){if("function"!==typeof e)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick((function(){e.call(null,n)}));case 3:return t.nextTick((function(){e.call(null,n,i)}));case 4:return t.nextTick((function(){e.call(null,n,i,r)}));default:for(o=new Array(s-1),a=0;a<o.length;)o[a++]=arguments[a];return t.nextTick((function(){e.apply(null,o)}))}}}:e.exports=t}).call(this,n(85))},function(e,t,n){"use strict";var i="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Int32Array;function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var n=t.shift();if(n){if("object"!==typeof n)throw new TypeError(n+"must be non-object");for(var i in n)r(n,i)&&(e[i]=n[i])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var o={arraySet:function(e,t,n,i,r){if(t.subarray&&e.subarray)e.set(t.subarray(n,n+i),r);else for(var o=0;o<i;o++)e[r+o]=t[n+o]},flattenChunks:function(e){var t,n,i,r,o,a;for(i=0,t=0,n=e.length;t<n;t++)i+=e[t].length;for(a=new Uint8Array(i),r=0,t=0,n=e.length;t<n;t++)o=e[t],a.set(o,r),r+=o.length;return a}},a={arraySet:function(e,t,n,i,r){for(var o=0;o<i;o++)e[r+o]=t[n+o]},flattenChunks:function(e){return[].concat.apply([],e)}};t.setTyped=function(e){e?(t.Buf8=Uint8Array,t.Buf16=Uint16Array,t.Buf32=Int32Array,t.assign(t,o)):(t.Buf8=Array,t.Buf16=Array,t.Buf32=Array,t.assign(t,a))},t.setTyped(i)},function(e,t){(function(t){e.exports=t}).call(this,{})},function(e,t,n){var i,r,o;r=[t],void 0===(o="function"===typeof(i=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=(e.isDate=function(e){return e instanceof Date},e.isEmpty=function(e){return 0===Object.keys(e).length},e.isObject=function(e){return null!=e&&"object"===("undefined"===typeof e?"undefined":n(e))});e.properObject=function(e){return i(e)&&!e.hasOwnProperty?t({},e):e}})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){"use strict";var i=String.fromCharCode;e.exports=i},function(e,t,n){"use strict";var i=n(63),r=n(65),o={tokenize:function(e,t,n){return r(e,(function(e){return null===e||i(e)?t(e):n(e)}),"linePrefix")},partial:!0};e.exports=o},function(e,t,n){"use strict";e.exports=function(e,t,n){for(var i,r=[],o=-1;++o<e.length;)(i=e[o].resolveAll)&&r.indexOf(i)<0&&(t=i(t,n),r.push(i));return t}},function(e,t,n){"use strict";var i=n(105)(/[A-Za-z]/);e.exports=i},function(e,t,n){"use strict";var i={};function r(e,t,n){var o,a,s,c,l,u="";for("string"!==typeof t&&(n=t,t=r.defaultChars),"undefined"===typeof n&&(n=!0),l=function(e){var t,n,r=i[e];if(r)return r;for(r=i[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),/^[0-9a-z]$/i.test(n)?r.push(n):r.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t<e.length;t++)r[e.charCodeAt(t)]=e[t];return r}(t),o=0,a=e.length;o<a;o++)if(s=e.charCodeAt(o),n&&37===s&&o+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(o+1,o+3)))u+=e.slice(o,o+3),o+=2;else if(s<128)u+=l[s];else if(s>=55296&&s<=57343){if(s>=55296&&s<=56319&&o+1<a&&(c=e.charCodeAt(o+1))>=56320&&c<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[o]);return u}r.defaultChars=";/?:@&=+$,-_.!~*'()#",r.componentChars="-_.!~*'()",e.exports=r},function(e,t,n){"use strict";var i=0;function r(){return Math.pow(2,++i)}t.boolean=r(),t.booleanish=r(),t.overloadedBoolean=r(),t.number=r(),t.spaceSeparated=r(),t.commaSeparated=r(),t.commaOrSpaceSeparated=r()},function(e,t,n){(function(e){var i=n(82),r=n(642),o=t&&!t.nodeType&&t,a=o&&"object"==typeof e&&e&&!e.nodeType&&e,s=a&&a.exports===o?i.Buffer:void 0,c=(s?s.isBuffer:void 0)||r;e.exports=c}).call(this,n(139)(e))},function(e,t){e.exports=function(e){return e}},function(e,t,n){var i=n(175),r=n(655),o=n(656),a=n(657),s=n(658),c=n(659);function l(e){var t=this.__data__=new i(e);this.size=t.size}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=a,l.prototype.has=s,l.prototype.set=c,e.exports=l},function(e,t,n){var i=n(650),r=n(651),o=n(652),a=n(653),s=n(654);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=r,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t,n){var i=n(149);e.exports=function(e,t){for(var n=e.length;n--;)if(i(e[n][0],t))return n;return-1}},function(e,t,n){var i=n(110)(Object,"create");e.exports=i},function(e,t,n){var i=n(672);e.exports=function(e,t){var n=e.__data__;return i(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t,n){var i=n(687),r=n(241),o=n(688),a=n(689),s=n(690),c=n(109),l=n(361),u=l(i),h=l(r),d=l(o),f=l(a),p=l(s),m=c;(i&&"[object DataView]"!=m(new i(new ArrayBuffer(1)))||r&&"[object Map]"!=m(new r)||o&&"[object Promise]"!=m(o.resolve())||a&&"[object Set]"!=m(new a)||s&&"[object WeakMap]"!=m(new s))&&(m=function(e){var t=c(e),n="[object Object]"==t?e.constructor:void 0,i=n?l(n):"";if(i)switch(i){case u:return"[object DataView]";case h:return"[object Map]";case d:return"[object Promise]";case f:return"[object Set]";case p:return"[object WeakMap]"}return t}),e.exports=m},function(e,t,n){var i=n(109),r=n(87);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==i(e)}},function(e,t,n){var i=n(180);e.exports=function(e){if("string"==typeof e||i(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){"use strict";t.a=function(e){return 0!==e.length&&"/"===e[e.length-1]||(e+="/"),e}},function(e,t,n){"use strict";var i=n(42),r=n(0),o=n(3);t.a=function(e,t){if(!Object(r.a)(e))throw new o.a("uri is required.");var n="",a=e.lastIndexOf("/");return-1!==a&&(n=e.substring(0,a+1)),t?(e=new i.a(e),Object(r.a)(e.query)&&(n+="?"+e.query),Object(r.a)(e.fragment)&&(n+="#"+e.fragment),n):n}},function(e,t,n){"use strict";t.a=function(e){var t={};if(!e)return t;for(var n=e.split("\r\n"),i=0;i<n.length;++i){var r=n[i],o=r.indexOf(": ");if(o>0){var a=r.substring(0,o),s=r.substring(o+2);t[a]=s}}return t}},function(e,t,n){"use strict";var i=n(4),r=n(1),o=n(0);function a(e){i.a.typeOf.object("options",e),i.a.defined("options.comparator",e.comparator),this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}function s(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}Object.defineProperties(a.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){i.a.typeOf.number.greaterThanOrEquals("maximumLength",e,0);var t=this._length;if(e<t){for(var n=this._array,r=e;r<t;++r)n[r]=void 0;this._length=e,n.length=e}this._maximumLength=e}},comparator:{get:function(){return this._comparator}}}),a.prototype.reserve=function(e){e=Object(r.a)(e,this._length),this._array.length=e},a.prototype.heapify=function(e){e=Object(r.a)(e,0);for(var t=this._length,n=this._comparator,i=this._array,o=-1,a=!0;a;){var c=2*(e+1),l=c-1;o=l<t&&n(i[l],i[e])<0?l:e,c<t&&n(i[c],i[o])<0&&(o=c),o!==e?(s(i,o,e),e=o):a=!1}},a.prototype.resort=function(){for(var e=this._length,t=Math.ceil(e/2);t>=0;--t)this.heapify(t)},a.prototype.insert=function(e){i.a.defined("element",e);var t,n=this._array,r=this._comparator,a=this._maximumLength,c=this._length++;for(c<n.length?n[c]=e:n.push(e);0!==c;){var l=Math.floor((c-1)/2);if(!(r(n[c],n[l])<0))break;s(n,c,l),c=l}return Object(o.a)(a)&&this._length>a&&(t=n[a],this._length=a),t},a.prototype.pop=function(e){if(e=Object(r.a)(e,0),0!==this._length){i.a.typeOf.number.lessThan("index",e,this._length);var t=this._array,n=t[e];return s(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n}},t.a=a},function(e,t,n){"use strict";n.r(t),n.d(t,"BACKSPACE",(function(){return i})),n.d(t,"TAB",(function(){return r})),n.d(t,"ENTER",(function(){return o})),n.d(t,"SHIFT",(function(){return a})),n.d(t,"ESCAPE",(function(){return s})),n.d(t,"SPACE",(function(){return c})),n.d(t,"ARROW_LEFT",(function(){return l})),n.d(t,"ARROW_UP",(function(){return u})),n.d(t,"ARROW_RIGHT",(function(){return h})),n.d(t,"ARROW_DOWN",(function(){return d})),n.d(t,"DELETE",(function(){return f})),n.d(t,"isKeyboardClick",(function(){return p}));var i=8,r=9,o=13,a=16,s=27,c=32,l=37,u=38,h=39,d=40,f=46;function p(e){return e===o||e===c}},function(e,t,n){"use strict";n.d(t,"ContextMenu",(function(){return W}));n(276);var i=n(207),r=n(289);n.d(t,"Breadcrumbs",(function(){return r.a}));var o=n(78);n.d(t,"AnchorButton",(function(){return o.a})),n.d(t,"Button",(function(){return o.b}));var a=n(129);n.d(t,"ButtonGroup",(function(){return a.a}));var s=n(290);n.d(t,"Callout",(function(){return s.a}));var c=n(291);n.d(t,"Card",(function(){return c.a}));var l=n(194);n.d(t,"Collapse",(function(){return l.a}));var u=n(391);n.d(t,"ContextMenuTarget",(function(){return u.a}));var h=n(292);n.d(t,"Dialog",(function(){return h.a}));var d=n(293);n.d(t,"Drawer",(function(){return d.a}));var f=n(195);n.d(t,"ControlGroup",(function(){return f.a}));var p=n(154);n.d(t,"Checkbox",(function(){return p.a})),n.d(t,"Radio",(function(){return p.b})),n.d(t,"Switch",(function(){return p.c}));var m=n(294);n.d(t,"FormGroup",(function(){return m.a}));var g=n(196);n.d(t,"InputGroup",(function(){return g.a}));var v=n(392);n.d(t,"NumericInput",(function(){return v.a}));var _=n(295);n.d(t,"RadioGroup",(function(){return _.a}));var b=n(70);n.d(t,"H5",(function(){return b.b})),n.d(t,"Label",(function(){return b.d}));var y=n(296);n.d(t,"HTMLSelect",(function(){return y.a}));var w=n(297);n.d(t,"HTMLTable",(function(){return w.a}));var O=n(298);n.o(O,"AbstractComponent2")&&n.d(t,"AbstractComponent2",(function(){return O.AbstractComponent2})),n.o(O,"AbstractPureComponent2")&&n.d(t,"AbstractPureComponent2",(function(){return O.AbstractPureComponent2})),n.o(O,"Alignment")&&n.d(t,"Alignment",(function(){return O.Alignment})),n.o(O,"Classes")&&n.d(t,"Classes",(function(){return O.Classes})),n.o(O,"Colors")&&n.d(t,"Colors",(function(){return O.Colors})),n.o(O,"DISPLAYNAME_PREFIX")&&n.d(t,"DISPLAYNAME_PREFIX",(function(){return O.DISPLAYNAME_PREFIX})),n.o(O,"Hotkey")&&n.d(t,"Hotkey",(function(){return O.Hotkey})),n.o(O,"Hotkeys")&&n.d(t,"Hotkeys",(function(){return O.Hotkeys})),n.o(O,"HotkeysTarget")&&n.d(t,"HotkeysTarget",(function(){return O.HotkeysTarget})),n.o(O,"Icon")&&n.d(t,"Icon",(function(){return O.Icon})),n.o(O,"Intent")&&n.d(t,"Intent",(function(){return O.Intent})),n.o(O,"Keys")&&n.d(t,"Keys",(function(){return O.Keys})),n.o(O,"Menu")&&n.d(t,"Menu",(function(){return O.Menu})),n.o(O,"MenuDivider")&&n.d(t,"MenuDivider",(function(){return O.MenuDivider})),n.o(O,"MenuItem")&&n.d(t,"MenuItem",(function(){return O.MenuItem})),n.o(O,"Navbar")&&n.d(t,"Navbar",(function(){return O.Navbar})),n.o(O,"NavbarDivider")&&n.d(t,"NavbarDivider",(function(){return O.NavbarDivider})),n.o(O,"NavbarGroup")&&n.d(t,"NavbarGroup",(function(){return O.NavbarGroup})),n.o(O,"NonIdealState")&&n.d(t,"NonIdealState",(function(){return O.NonIdealState})),n.o(O,"Popover")&&n.d(t,"Popover",(function(){return O.Popover})),n.o(O,"PopoverInteractionKind")&&n.d(t,"PopoverInteractionKind",(function(){return O.PopoverInteractionKind})),n.o(O,"PopoverPosition")&&n.d(t,"PopoverPosition",(function(){return O.PopoverPosition})),n.o(O,"Position")&&n.d(t,"Position",(function(){return O.Position})),n.o(O,"ProgressBar")&&n.d(t,"ProgressBar",(function(){return O.ProgressBar})),n.o(O,"RangeSlider")&&n.d(t,"RangeSlider",(function(){return O.RangeSlider})),n.o(O,"Slider")&&n.d(t,"Slider",(function(){return O.Slider})),n.o(O,"Spinner")&&n.d(t,"Spinner",(function(){return O.Spinner})),n.o(O,"Tab")&&n.d(t,"Tab",(function(){return O.Tab})),n.o(O,"Tabs")&&n.d(t,"Tabs",(function(){return O.Tabs})),n.o(O,"Tag")&&n.d(t,"Tag",(function(){return O.Tag})),n.o(O,"Toaster")&&n.d(t,"Toaster",(function(){return O.Toaster})),n.o(O,"Tooltip")&&n.d(t,"Tooltip",(function(){return O.Tooltip})),n.o(O,"Tree")&&n.d(t,"Tree",(function(){return O.Tree})),n.o(O,"Utils")&&n.d(t,"Utils",(function(){return O.Utils})),n.o(O,"getRef")&&n.d(t,"getRef",(function(){return O.getRef})),n.o(O,"isRefObject")&&n.d(t,"isRefObject",(function(){return O.isRefObject}));var C=n(38);n.d(t,"Icon",(function(){return C.a}));var E=n(126);n.d(t,"Menu",(function(){return E.a}));var A=n(190);n.d(t,"MenuDivider",(function(){return A.a}));var x=n(127);n.d(t,"MenuItem",(function(){return x.a}));var T=n(300);n.d(t,"Navbar",(function(){return T.a}));var S=n(199);n.d(t,"NavbarDivider",(function(){return S.a}));var D=n(200);n.d(t,"NavbarGroup",(function(){return D.a}));var P=n(301);n.d(t,"NonIdealState",(function(){return P.a}));var I=n(302);n.o(I,"AbstractComponent2")&&n.d(t,"AbstractComponent2",(function(){return I.AbstractComponent2})),n.o(I,"AbstractPureComponent2")&&n.d(t,"AbstractPureComponent2",(function(){return I.AbstractPureComponent2})),n.o(I,"Alignment")&&n.d(t,"Alignment",(function(){return I.Alignment})),n.o(I,"Classes")&&n.d(t,"Classes",(function(){return I.Classes})),n.o(I,"Colors")&&n.d(t,"Colors",(function(){return I.Colors})),n.o(I,"DISPLAYNAME_PREFIX")&&n.d(t,"DISPLAYNAME_PREFIX",(function(){return I.DISPLAYNAME_PREFIX})),n.o(I,"Hotkey")&&n.d(t,"Hotkey",(function(){return I.Hotkey})),n.o(I,"Hotkeys")&&n.d(t,"Hotkeys",(function(){return I.Hotkeys})),n.o(I,"HotkeysTarget")&&n.d(t,"HotkeysTarget",(function(){return I.HotkeysTarget})),n.o(I,"Intent")&&n.d(t,"Intent",(function(){return I.Intent})),n.o(I,"Keys")&&n.d(t,"Keys",(function(){return I.Keys})),n.o(I,"Popover")&&n.d(t,"Popover",(function(){return I.Popover})),n.o(I,"PopoverInteractionKind")&&n.d(t,"PopoverInteractionKind",(function(){return I.PopoverInteractionKind})),n.o(I,"PopoverPosition")&&n.d(t,"PopoverPosition",(function(){return I.PopoverPosition})),n.o(I,"Position")&&n.d(t,"Position",(function(){return I.Position})),n.o(I,"ProgressBar")&&n.d(t,"ProgressBar",(function(){return I.ProgressBar})),n.o(I,"RangeSlider")&&n.d(t,"RangeSlider",(function(){return I.RangeSlider})),n.o(I,"Slider")&&n.d(t,"Slider",(function(){return I.Slider})),n.o(I,"Spinner")&&n.d(t,"Spinner",(function(){return I.Spinner})),n.o(I,"Tab")&&n.d(t,"Tab",(function(){return I.Tab})),n.o(I,"Tabs")&&n.d(t,"Tabs",(function(){return I.Tabs})),n.o(I,"Tag")&&n.d(t,"Tag",(function(){return I.Tag})),n.o(I,"Toaster")&&n.d(t,"Toaster",(function(){return I.Toaster})),n.o(I,"Tooltip")&&n.d(t,"Tooltip",(function(){return I.Tooltip})),n.o(I,"Tree")&&n.d(t,"Tree",(function(){return I.Tree})),n.o(I,"Utils")&&n.d(t,"Utils",(function(){return I.Utils})),n.o(I,"getRef")&&n.d(t,"getRef",(function(){return I.getRef})),n.o(I,"isRefObject")&&n.d(t,"isRefObject",(function(){return I.isRefObject}));var M=n(77);n.d(t,"Popover",(function(){return M.a})),n.d(t,"PopoverInteractionKind",(function(){return M.b}));var R=n(303);n.d(t,"PopoverPosition",(function(){return R.a}));var L=n(304);n.d(t,"ProgressBar",(function(){return L.a}));var j=n(305);n.d(t,"RangeSlider",(function(){return j.a}));var F=n(306);n.d(t,"Slider",(function(){return F.a}));var N=n(193);n.d(t,"Spinner",(function(){return N.a}));var z=n(155);n.d(t,"Tab",(function(){return z.a}));var k=n(393);n.d(t,"Tabs",(function(){return k.a}));var B=n(307);n.d(t,"Tag",(function(){return B.a}));var H=n(308);n.d(t,"Toaster",(function(){return H.a}));var V=n(188);n.d(t,"Tooltip",(function(){return V.a}));var U=n(309);n.d(t,"Tree",(function(){return U.a}));var W=i},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(77),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.popover=null,t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this,t=this.props,n=t.children,r=t.intent,s=t.popoverClassName,l=Object(i.d)(t,["children","intent","popoverClassName"]),u=o()(c.Classes.TOOLTIP,c.Classes.intentClass(r),s);return a.createElement(h.a,Object(i.a)({interactionKind:h.b.HOVER_TARGET_ONLY},l,{autoFocus:!1,canEscapeKeyClose:!1,enforceFocus:!1,lazy:!0,popoverClassName:u,portalContainer:this.props.portalContainer,ref:function(t){return e.popover=t}}),n)},t.prototype.reposition=function(){null!=this.popover&&this.popover.reposition()},t.displayName=u.a+".Tooltip",t.defaultProps={hoverCloseDelay:0,hoverOpenDelay:100,transitionDuration:100},t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(2),o=n(54),a=n(34),s=n(35),c=n(27),l=n(49),u=!Object(l.a)(o.createPortal),h={blueprintPortalClassName:function(e,t){if(null!=e[t]&&"string"!==typeof e[t])return new Error(s.D)}},d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={hasMounted:!1},t}return Object(i.c)(t,e),t.prototype.render=function(){return u||"undefined"===typeof document||!this.state.hasMounted?null:o.createPortal(this.props.children,this.portalElement)},t.prototype.componentDidMount=function(){this.props.container&&(this.portalElement=this.createContainerElement(),this.props.container.appendChild(this.portalElement),this.setState({hasMounted:!0},this.props.onChildrenMount),u&&this.unstableRenderNoPortal())},t.prototype.componentDidUpdate=function(e){null!=this.portalElement&&e.className!==this.props.className&&(this.portalElement.classList.remove(e.className),f(this.portalElement.classList,this.props.className)),u&&this.unstableRenderNoPortal()},t.prototype.componentWillUnmount=function(){null!=this.portalElement&&(u&&o.unmountComponentAtNode(this.portalElement),this.portalElement.remove())},t.prototype.createContainerElement=function(){var e=document.createElement("div");return e.classList.add(a.PORTAL),f(e.classList,this.props.className),null!=this.context&&f(e.classList,this.context.blueprintPortalClassName),e},t.prototype.unstableRenderNoPortal=function(){o.unstable_renderSubtreeIntoContainer(this,r.createElement("div",null,this.props.children),this.portalElement)},t.displayName=c.a+".Portal",t.contextTypes=h,t.defaultProps={container:"undefined"!==typeof document?document.body:null},t}(r.Component);function f(e,t){null!=t&&""!==t&&e.add.apply(e,t.split(" "))}},function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(34),c=n(27),l=n(70),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.title;return null==n?a.createElement("li",{className:o()(s.MENU_DIVIDER,t)}):a.createElement("li",{className:o()(s.MENU_HEADER,t)},a.createElement(l.c,null,n))},t.displayName=c.a+".MenuDivider",t}(a.Component)},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var i,r=n(11),o=n(17),a=n.n(o),s=n(2),c=n(90),l=n(34),u=n(35),h=n(27),d=n(206),f=n(49),p=n(112);!function(e){e[e.NONE=0]="NONE",e[e.GROW=1]="GROW",e[e.SHRINK=2]="SHRINK"}(i||(i={}));var m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={direction:i.NONE,lastOverflowCount:0,overflow:[],visible:t.props.items},t.previousWidths=new Map,t.spacer=null,t.resize=function(e){var n=e.some((function(e){var n=t.previousWidths.get(e.target)||0;return e.contentRect.width>n}));t.repartition(n),e.forEach((function(e){return t.previousWidths.set(e.target,e.contentRect.width)}))},t}return Object(r.c)(t,e),t.ofType=function(){return t},t.prototype.componentDidMount=function(){this.repartition(!1)},t.prototype.shouldComponentUpdate=function(e,t){return!(this.state!==t&&Object(d.d)(this.state,t))},t.prototype.componentDidUpdate=function(e,t){e.observeParents!==this.props.observeParents&&console.warn(u.u),e.collapseFrom===this.props.collapseFrom&&e.items===this.props.items&&e.minVisibleItems===this.props.minVisibleItems&&e.overflowRenderer===this.props.overflowRenderer&&e.visibleItemRenderer===this.props.visibleItemRenderer||this.setState({direction:i.GROW,lastOverflowCount:0,overflow:[],visible:this.props.items}),Object(d.d)(t,this.state)||this.repartition(!1);var n=this.state,r=n.direction,o=n.overflow,a=n.lastOverflowCount;r===i.NONE&&r!==t.direction&&o.length!==a&&Object(f.b)(this.props.onOverflow,o)},t.prototype.render=function(){var e=this,t=this.props,n=t.className,i=t.collapseFrom,r=t.observeParents,o=t.style,u=t.tagName,h=void 0===u?"div":u,d=t.visibleItemRenderer,f=this.maybeRenderOverflow(),m=s.createElement(h,{className:a()(l.OVERFLOW_LIST,n),style:o},i===c.a.START?f:null,this.state.visible.map(d),i===c.a.END?f:null,s.createElement("div",{className:l.OVERFLOW_LIST_SPACER,ref:function(t){return e.spacer=t}}));return s.createElement(p.a,{onResize:this.resize,observeParents:r},m)},t.prototype.maybeRenderOverflow=function(){var e=this.state.overflow;return 0===e.length?null:this.props.overflowRenderer(e)},t.prototype.repartition=function(e){var t=this;null!=this.spacer&&(e?this.setState((function(e){return{direction:i.GROW,lastOverflowCount:e.direction===i.NONE?e.overflow.length:e.lastOverflowCount,overflow:[],visible:t.props.items}})):this.spacer.getBoundingClientRect().width<.9?this.setState((function(e){if(e.visible.length<=t.props.minVisibleItems)return null;var n=t.props.collapseFrom===c.a.START,o=e.visible.slice(),a=n?o.shift():o.pop();if(void 0===a)return null;var s=n?Object(r.e)(e.overflow,[a]):Object(r.e)([a],e.overflow);return{direction:e.direction===i.NONE?i.SHRINK:e.direction,overflow:s,visible:o}})):this.setState({direction:i.NONE}))},t.displayName=h.a+".OverflowList",t.defaultProps={collapseFrom:c.a.START,minVisibleItems:0},t}(s.Component)},function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var i=n(17),r=n.n(i),o=n(2),a=n(34),s=n(38),c=function(e){var t,n=r()(a.BREADCRUMB,((t={})[a.BREADCRUMB_CURRENT]=e.current,t[a.DISABLED]=e.disabled,t),e.className),i=null!=e.icon?o.createElement(s.a,{icon:e.icon}):void 0;return null==e.href&&null==e.onClick?o.createElement("span",{className:n},i,e.text,e.children):o.createElement("a",{className:n,href:e.href,onClick:e.disabled?null:e.onClick,tabIndex:e.disabled?null:0,target:e.target},i,e.text,e.children)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(35),h=n(27),d=n(103),f=45,p="M 50,50 m 0,-45 a 45,45 0 1 1 0,90 a 45,45 0 1 1 0,-90",m=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}var n;return Object(i.c)(t,e),n=t,t.prototype.componentDidUpdate=function(e){e.value!==this.props.value&&this.forceUpdate()},t.prototype.render=function(){var e,t=this.props,i=t.className,r=t.intent,s=t.value,l=t.tagName,u=void 0===l?"div":l,h=this.getSize(),f=o()(c.Classes.SPINNER,c.Classes.intentClass(r),((e={})[c.Classes.SPINNER_NO_SPIN]=null!=s,e),i),m=Math.min(16,4*n.SIZE_LARGE/h),g=280-280*(null==s?.25:Object(d.c)(s,0,1));return a.createElement(u,{className:f},a.createElement(u,{className:c.Classes.SPINNER_ANIMATION},a.createElement("svg",{width:h,height:h,strokeWidth:m.toFixed(2),viewBox:this.getViewBox(m)},a.createElement("path",{className:c.Classes.SPINNER_TRACK,d:p}),a.createElement("path",{className:c.Classes.SPINNER_HEAD,d:p,pathLength:280,strokeDasharray:"280 280",strokeDashoffset:g}))))},t.prototype.validateProps=function(e){var t=e.className,n=void 0===t?"":t;null!=e.size&&(n.indexOf(c.Classes.SMALL)>=0||n.indexOf(c.Classes.LARGE)>=0)&&console.warn(u.I)},t.prototype.getSize=function(){var e=this.props,t=e.className,i=void 0===t?"":t,r=e.size;return null==r?i.indexOf(c.Classes.SMALL)>=0?n.SIZE_SMALL:i.indexOf(c.Classes.LARGE)>=0?n.SIZE_LARGE:n.SIZE_STANDARD:Math.max(10,r)},t.prototype.getViewBox=function(e){var t=f+e/2,n=(50-t).toFixed(2),i=(2*t).toFixed(2);return n+" "+n+" "+i+" "+i},t.displayName=h.a+".Spinner",t.SIZE_SMALL=20,t.SIZE_STANDARD=50,t.SIZE_LARGE=100,t=n=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i,r=n(11),o=n(17),a=n.n(o),s=n(2),c=n(24),l=n(9),u=n(40),h=n(27);!function(e){e[e.OPEN_START=0]="OPEN_START",e[e.OPENING=1]="OPENING",e[e.OPEN=2]="OPEN",e[e.CLOSING_START=3]="CLOSING_START",e[e.CLOSING=4]="CLOSING",e[e.CLOSED=5]="CLOSED"}(i||(i={}));var d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={animationState:t.props.isOpen?i.OPEN:i.CLOSED,height:void 0,heightWhenOpen:void 0},t.contentsRefHandler=function(e){if(t.contents=e,null!=t.contents){var n=t.contents.clientHeight;t.setState({animationState:t.props.isOpen?i.OPEN:i.CLOSED,height:0===n?void 0:n+"px",heightWhenOpen:0===n?void 0:n})}},t}return Object(r.c)(t,e),t.getDerivedStateFromProps=function(e,t){var n=e.isOpen,r=t.animationState;if(n)switch(r){case i.OPEN:case i.OPENING:break;default:return{animationState:i.OPEN_START}}else switch(r){case i.CLOSED:case i.CLOSING:break;default:return{animationState:i.CLOSING_START,height:t.heightWhenOpen+"px"}}return null},t.prototype.render=function(){var e=this.state.animationState!==i.CLOSED,t=e||this.props.keepChildrenMounted,n=e&&this.state.animationState!==i.CLOSING,r="auto"===this.state.height,o={height:e?this.state.height:void 0,overflowY:r?"visible":void 0,transition:r?"none":void 0},c={transform:n?"translateY(0)":"translateY(-"+this.state.heightWhenOpen+"px)",transition:r?"none":void 0};return s.createElement(this.props.component,{className:a()(l.Classes.COLLAPSE,this.props.className),style:o},s.createElement("div",{className:l.Classes.COLLAPSE_BODY,ref:this.contentsRefHandler,style:c,"aria-hidden":!e&&this.props.keepChildrenMounted},t?this.props.children:null))},t.prototype.componentDidMount=function(){this.forceUpdate(),this.props.isOpen?this.setState({animationState:i.OPEN,height:"auto"}):this.setState({animationState:i.CLOSED,height:"0px"})},t.prototype.componentDidUpdate=function(){var e=this,t=this.props.transitionDuration,n=this.state.animationState;if(n===i.OPEN_START){var r=this.contents.clientHeight;this.setState({animationState:i.OPENING,height:r+"px",heightWhenOpen:r}),this.setTimeout((function(){return e.onDelayedStateChange()}),t)}else if(n===i.CLOSING_START){var o=this.contents.clientHeight;this.setTimeout((function(){return e.setState({animationState:i.CLOSING,height:"0px",heightWhenOpen:o})})),this.setTimeout((function(){return e.onDelayedStateChange()}),t)}},t.prototype.onDelayedStateChange=function(){switch(this.state.animationState){case i.OPENING:this.setState({animationState:i.OPEN,height:"auto"});break;case i.CLOSING:this.setState({animationState:i.CLOSED})}},t.displayName=h.a+".Collapse",t.defaultProps={component:"div",isOpen:!1,keepChildrenMounted:!1,transitionDuration:200},t=Object(r.b)([c.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.children,r=t.className,s=t.fill,l=t.vertical,u=Object(i.d)(t,["children","className","fill","vertical"]),h=o()(c.Classes.CONTROL_GROUP,((e={})[c.Classes.FILL]=s,e[c.Classes.VERTICAL]=l,e),r);return a.createElement("div",Object(i.a)({},u,{className:h}),n)},t.displayName=u.a+".ControlGroup",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(35),h=n(27),d=n(38),f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={},t.refHandlers={leftElement:function(e){return t.leftElement=e},rightElement:function(e){return t.rightElement=e}},t}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,r=t.disabled,s=t.fill,l=t.intent,u=t.large,d=t.small,f=t.round,p=o()(c.Classes.INPUT_GROUP,c.Classes.intentClass(l),((e={})[c.Classes.DISABLED]=r,e[c.Classes.FILL]=s,e[c.Classes.LARGE]=u,e[c.Classes.SMALL]=d,e[c.Classes.ROUND]=f,e),n),m=Object(i.a)(Object(i.a)({},this.props.style),{paddingLeft:this.state.leftElementWidth,paddingRight:this.state.rightElementWidth});return a.createElement("div",{className:p},this.maybeRenderLeftElement(),a.createElement("input",Object(i.a)({type:"text"},Object(h.b)(this.props),{className:c.Classes.INPUT,ref:this.props.inputRef,style:m})),this.maybeRenderRightElement())},t.prototype.componentDidMount=function(){this.updateInputWidth()},t.prototype.componentDidUpdate=function(e){var t=this.props,n=t.leftElement,i=t.rightElement;e.leftElement===n&&e.rightElement===i||this.updateInputWidth()},t.prototype.validateProps=function(e){null!=e.leftElement&&null!=e.leftIcon&&console.warn(u.k)},t.prototype.maybeRenderLeftElement=function(){var e=this.props,t=e.leftElement,n=e.leftIcon;return null!=t?a.createElement("span",{className:c.Classes.INPUT_LEFT_CONTAINER,ref:this.refHandlers.leftElement},t):null!=n?a.createElement(d.a,{icon:n}):void 0},t.prototype.maybeRenderRightElement=function(){var e=this.props.rightElement;if(null!=e)return a.createElement("span",{className:c.Classes.INPUT_ACTION,ref:this.refHandlers.rightElement},e)},t.prototype.updateInputWidth=function(){var e=this.state,t=e.leftElementWidth,n=e.rightElementWidth;if(null!=this.leftElement){var i=this.leftElement.clientWidth;(void 0===t||Math.abs(i-t)>2)&&this.setState({leftElementWidth:i})}else this.setState({leftElementWidth:void 0});if(null!=this.rightElement){i=this.rightElement.clientWidth;(void 0===n||Math.abs(i-n)>2)&&this.setState({rightElementWidth:i})}else this.setState({rightElementWidth:void 0})},t.displayName=h.a+".InputGroup",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(27),u=n(40),h=n(35),d=n(138),f=n(70),p=n(98),m=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=a.Children.map(this.props.children,(function(e){return e.props}));e.sort((function(e,t){return e.global===t.global?e.group.localeCompare(t.group):e.global?-1:1}));for(var t=null,n=[],r=0,s=e;r<s.length;r++){var l=s[r],u=l.group;u!==t&&(n.push(a.createElement(f.a,{key:"group-"+n.length},u)),t=u),n.push(a.createElement(p.a,Object(i.a)({key:n.length},l)))}var h=o()(c.Classes.HOTKEY_COLUMN,this.props.className);return a.createElement("div",{className:h},n)},t.prototype.validateProps=function(e){a.Children.forEach(e.children,(function(e){if(!Object(d.c)(e,p.a))throw new Error(h.h)}))},t.displayName=l.a+".Hotkeys",t.defaultProps={tabIndex:0},t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(27),u=n(40),h=n(38),d=n(71),f={alt:"key-option",cmd:"key-command",ctrl:"key-control",delete:"key-delete",down:"arrow-down",enter:"key-enter",left:"arrow-left",meta:"key-command",right:"arrow-right",shift:"key-shift",up:"arrow-up"},p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.renderKey=function(e,t){var n=f[e],i="key-"+t;return null==n?a.createElement("kbd",{className:c.Classes.KEY,key:i},e):a.createElement("kbd",{className:o()(c.Classes.KEY,c.Classes.MODIFIER_KEY),key:i},a.createElement(h.a,{icon:n})," ",e)},t.renderMinimalKey=function(e,t){var n=f[e];return null==n?e:a.createElement(h.a,{icon:n,key:"key-"+t})},t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.combo,i=e.minimal,r=Object(d.c)(n).map((function(e){return 1===e.length?e.toUpperCase():e})).map(i?this.renderMinimalKey:this.renderKey);return a.createElement("span",{className:o()(c.Classes.KEY_COMBO,t)},r)},t.displayName=l.a+".KeyCombo",t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=Object(i.d)(e,["className"]);return a.createElement("div",Object(i.a)({className:o()(c.Classes.NAVBAR_DIVIDER,t)},n))},t.displayName=u.a+".NavbarDivider",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(133),u=n(40),h=n(27),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.align,n=e.children,r=e.className,s=Object(i.d)(e,["align","children","className"]),l=o()(c.Classes.NAVBAR_GROUP,c.Classes.alignmentClass(t),r);return a.createElement("div",Object(i.a)({className:l},s),n)},t.displayName=h.a+".NavbarGroup",t.defaultProps={align:l.a.LEFT},t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.children,n=e.className,r=Object(i.d)(e,["children","className"]);return a.createElement("div",Object(i.a)({className:o()(c.Classes.NAVBAR_HEADING,n)},r),t)},t.displayName=u.a+".NavbarHeading",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(49),d=n(129),f=n(78),p=n(38),m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleActionClick=function(e){Object(h.b)(t.props.action.onClick,e),t.triggerDismiss(!1)},t.handleCloseClick=function(){return t.triggerDismiss(!1)},t.startTimeout=function(){t.clearTimeouts(),t.props.timeout>0&&t.setTimeout((function(){return t.triggerDismiss(!0)}),t.props.timeout)},t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.icon,i=e.intent,r=e.message;return a.createElement("div",{className:o()(c.Classes.TOAST,c.Classes.intentClass(i),t),onBlur:this.startTimeout,onFocus:this.clearTimeouts,onMouseEnter:this.clearTimeouts,onMouseLeave:this.startTimeout,tabIndex:0},a.createElement(p.a,{icon:n}),a.createElement("span",{className:c.Classes.TOAST_MESSAGE},r),a.createElement(d.a,{minimal:!0},this.maybeRenderActionButton(),a.createElement(f.b,{icon:"cross",onClick:this.handleCloseClick})))},t.prototype.componentDidMount=function(){this.startTimeout()},t.prototype.componentDidUpdate=function(e){e.timeout!==this.props.timeout&&(this.props.timeout>0?this.startTimeout():this.clearTimeouts())},t.prototype.componentWillUnmount=function(){this.clearTimeouts()},t.prototype.maybeRenderActionButton=function(){var e=this.props.action;return null==e?void 0:a.createElement(f.a,Object(i.a)({},e,{intent:void 0,onClick:this.handleActionClick}))},t.prototype.triggerDismiss=function(e){this.clearTimeouts(),Object(h.b)(this.props.onDismiss,e)},t.defaultProps={className:"",message:"",timeout:5e3},t.displayName=u.a+".Toast",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(34),c=n(27),l=n(49),u=n(194),h=n(38),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleCaretClick=function(e){e.stopPropagation();var n=t.props,i=n.isExpanded,r=n.onCollapse,o=n.onExpand;Object(l.b)(i?r:o,t,e)},t.handleClick=function(e){Object(l.b)(t.props.onClick,t,e)},t.handleContentRef=function(e){Object(l.b)(t.props.contentRef,t,e)},t.handleContextMenu=function(e){Object(l.b)(t.props.onContextMenu,t,e)},t.handleDoubleClick=function(e){Object(l.b)(t.props.onDoubleClick,t,e)},t.handleMouseEnter=function(e){Object(l.b)(t.props.onMouseEnter,t,e)},t.handleMouseLeave=function(e){Object(l.b)(t.props.onMouseLeave,t,e)},t}return Object(i.c)(t,e),t.ofType=function(){return t},t.prototype.render=function(){var e,t=this.props,n=t.children,r=t.className,c=t.disabled,l=t.icon,d=t.isExpanded,f=t.isSelected,p=t.label,m=o()(s.TREE_NODE,((e={})[s.DISABLED]=c,e[s.TREE_NODE_SELECTED]=f,e[s.TREE_NODE_EXPANDED]=d,e),r),g=o()(s.TREE_NODE_CONTENT,s.TREE_NODE_CONTENT+"-"+this.props.depth),v=!0===c?{}:{onClick:this.handleClick,onContextMenu:this.handleContextMenu,onDoubleClick:this.handleDoubleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave};return a.createElement("li",{className:m},a.createElement("div",Object(i.a)({className:g,ref:this.handleContentRef},v),this.maybeRenderCaret(),a.createElement(h.a,{className:s.TREE_NODE_ICON,icon:l}),a.createElement("span",{className:s.TREE_NODE_LABEL},p),this.maybeRenderSecondaryLabel()),a.createElement(u.a,{isOpen:d},n))},t.prototype.maybeRenderCaret=function(){var e=this.props,t=e.children,n=e.isExpanded,i=e.disabled,r=e.hasCaret;if(void 0===r?a.Children.count(t)>0:r){var c=o()(s.TREE_NODE_CARET,n?s.TREE_NODE_CARET_OPEN:s.TREE_NODE_CARET_CLOSED),l=!0===i?void 0:this.handleCaretClick;return a.createElement(h.a,{className:c,onClick:l,icon:"chevron-right"})}return a.createElement("span",{className:s.TREE_NODE_CARET_NONE})},t.prototype.maybeRenderSecondaryLabel=function(){return null!=this.props.secondaryLabel?a.createElement("span",{className:s.TREE_NODE_SECONDARY_LABEL},this.props.secondaryLabel):void 0},t.displayName=c.a+".TreeNode",t}(a.Component)},function(e,t,n){"use strict";var i=n(477),r={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,o,a,s,c,l,u=!1;t||(t={}),n=t.debug||!1;try{if(a=i(),s=document.createRange(),c=document.getSelection(),(l=document.createElement("span")).textContent=e,l.style.all="unset",l.style.position="fixed",l.style.top=0,l.style.clip="rect(0, 0, 0, 0)",l.style.whiteSpace="pre",l.style.webkitUserSelect="text",l.style.MozUserSelect="text",l.style.msUserSelect="text",l.style.userSelect="text",l.addEventListener("copy",(function(i){if(i.stopPropagation(),t.format)if(i.preventDefault(),"undefined"===typeof i.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var o=r[t.format]||r.default;window.clipboardData.setData(o,e)}else i.clipboardData.clearData(),i.clipboardData.setData(t.format,e);t.onCopy&&(i.preventDefault(),t.onCopy(i.clipboardData))})),document.body.appendChild(l),s.selectNodeContents(l),c.addRange(s),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(h){n&&console.error("unable to copy using execCommand: ",h),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(h){n&&console.error("unable to copy using clipboardData: ",h),n&&console.error("falling back to prompt"),o=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(o,e)}}finally{c&&("function"==typeof c.removeRange?c.removeRange(s):c.removeAllRanges()),l&&document.body.removeChild(l),a()}return u}},function(e,t,n){"use strict";function i(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";function i(e,t,n){return void 0===n&&(n=function(e,t){return e===t}),null==e&&null==t||null!=e&&null!=t&&e.length===t.length&&e.every((function(e,i){return n(e,t[i])}))}function r(e,t,n){if(null==e&&null==t)return!0;if(null==e||null==t)return!1;if(Array.isArray(e)||Array.isArray(t))return!1;if(null!=n)return s(e,t,n);var i=Object.keys(e),r=Object.keys(t);return s(e,t,{include:i})&&s(e,t,{include:r})}function o(e,t,n){if(e===t)return!0;if(null==e&&null==t)return!0;if(null==e||null==t)return!1;if(Array.isArray(e)||Array.isArray(t))return i(e,t,o);if(l(e)||l(t))return e===t;if(null!=n)return c(e,t,n);if(e.constructor!==t.constructor)return!1;var r=Object.keys(e),a=Object.keys(t);return null!=r&&null!=a&&(0===r.length&&0===a.length||i(r,a)&&c(e,t,r))}function a(e,t,n){return void 0===e&&(e={}),void 0===t&&(t={}),function(e,t,n,i){return n.filter((function(n){return!i(e,t,n)})).map((function(n){return{key:n,valueA:e[n],valueB:t[n]}}))}(e,t,null==n?function(e,t){var n=Object.keys(e),i=Object.keys(t),r=u(n.concat(i));return Object.keys(r)}(e,t):n,(function(e,t,n){return o(e,t,[n])}))}function s(e,t,n){return function(e,t,n){if(function(e){return null!=e&&null!=e.include}(n))return n.include;if(function(e){return null!=e&&null!=e.exclude}(n)){var i=Object.keys(e),r=Object.keys(t),o=u(i.concat(r));return n.exclude.forEach((function(e){return delete o[e]})),Object.keys(o)}return[]}(e,t,n).every((function(n){return e.hasOwnProperty(n)===t.hasOwnProperty(n)&&e[n]===t[n]}))}function c(e,t,n){return n.every((function(n){return e.hasOwnProperty(n)===t.hasOwnProperty(n)&&o(e[n],t[n])}))}function l(e){return"number"===typeof e||"string"===typeof e||"boolean"===typeof e}function u(e){return e.reduce((function(e,t){return e[t]=!0,e}),{})}n.d(t,"a",(function(){return i})),n.d(t,"d",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return a}))},function(e,t,n){"use strict";n.r(t),n.d(t,"show",(function(){return _})),n.d(t,"hide",(function(){return b})),n.d(t,"isOpen",(function(){return y}));var i,r,o=n(11),a=n(17),s=n.n(a),c=n(2),l=n(54),u=n(24),h=n(9),d=n(47),f=n(40),p=n(49),m=n(77),g={preventOverflow:{boundariesElement:"viewport"}},v=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isDarkTheme:!1,isOpen:!1,menu:null,offset:null},t.cancelContextMenu=function(e){return e.preventDefault()},t.handleBackdropContextMenu=function(e){e.persist(),e.preventDefault(),t.setTimeout((function(){var t=document.elementFromPoint(e.clientX,e.clientY),n=(e.view,Object(o.d)(e,["view"]));t.dispatchEvent(new MouseEvent("contextmenu",n))}),100)},t.handlePopoverInteraction=function(e){e||requestAnimationFrame((function(){return t.hide()}))},t}return Object(o.c)(t,e),t.prototype.render=function(){var e,t=c.createElement("div",{onContextMenu:this.cancelContextMenu},this.state.menu),n=s()(((e={})[h.Classes.DARK]=this.state.isDarkTheme,e)),i=null==this.state.offset?"":this.state.offset.left+"x"+this.state.offset.top;return c.createElement("div",{className:h.Classes.CONTEXT_MENU_POPOVER_TARGET,style:this.state.offset},c.createElement(m.a,Object(o.a)({},this.props,{backdropProps:{onContextMenu:this.handleBackdropContextMenu},content:t,enforceFocus:!1,key:i,hasBackdrop:!0,isOpen:this.state.isOpen,minimal:!0,modifiers:g,onInteraction:this.handlePopoverInteraction,position:d.a.RIGHT_TOP,popoverClassName:n,target:c.createElement("div",null),transitionDuration:100})))},t.prototype.show=function(e,t,n,i){this.setState({isOpen:!0,menu:e,offset:t,onClose:n,isDarkTheme:i})},t.prototype.hide=function(){Object(p.b)(this.state.onClose),this.setState({isOpen:!1,onClose:void 0})},t=Object(o.b)([u.polyfill],t)}(f.a);function _(e,t,n,o){null==i&&((i=document.createElement("div")).classList.add(h.Classes.CONTEXT_MENU),document.body.appendChild(i),r=l.render(c.createElement(v,{onClosed:w}),i)),r.show(e,t,n,o)}function b(){null!=r&&r.hide()}function y(){return null!=r&&r.state.isOpen}function w(){null!=i&&(l.unmountComponentAtNode(i),i.remove(),i=null,r=null)}},,,function(e,t,n){"use strict";var i=n(2),r=Object(i.createContext)(null);t.a=r},,function(e,t,n){"use strict";e.exports=function(e,t,n,i,r,o,a,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,i,r,o,a,s],u=0;(c=new Error(t.replace(/%s/g,(function(){return l[u++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},function(e,t,n){"use strict";var i=s(n(481)),r=s(n(486)),o=s(n(279)),a=s(n(277));function s(e){return e&&e.__esModule?e:{default:e}}e.exports={Transition:a.default,TransitionGroup:o.default,ReplaceTransition:r.default,CSSTransition:i.default}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Sketch=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=h(n(2)),o=h(n(36)),a=h(n(86)),s=h(n(382)),c=n(247),l=h(n(764)),u=h(n(765));function h(e){return e&&e.__esModule?e:{default:e}}var d=t.Sketch=function(e){var t=e.width,n=e.rgb,o=e.hex,h=e.hsv,d=e.hsl,f=e.onChange,p=e.onSwatchHover,m=e.disableAlpha,g=e.presetColors,v=e.renderers,_=e.styles,b=void 0===_?{}:_,y=e.className,w=void 0===y?"":y,O=(0,a.default)((0,s.default)({default:i({picker:{width:t,padding:"10px 10px 0",boxSizing:"initial",background:"#fff",borderRadius:"4px",boxShadow:"0 0 0 1px rgba(0,0,0,.15), 0 8px 16px rgba(0,0,0,.15)"},saturation:{width:"100%",paddingBottom:"75%",position:"relative",overflow:"hidden"},Saturation:{radius:"3px",shadow:"inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)"},controls:{display:"flex"},sliders:{padding:"4px 0",flex:"1"},color:{width:"24px",height:"24px",position:"relative",marginTop:"4px",marginLeft:"4px",borderRadius:"3px"},activeColor:{absolute:"0px 0px 0px 0px",borderRadius:"2px",background:"rgba("+n.r+","+n.g+","+n.b+","+n.a+")",boxShadow:"inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)"},hue:{position:"relative",height:"10px",overflow:"hidden"},Hue:{radius:"2px",shadow:"inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)"},alpha:{position:"relative",height:"10px",marginTop:"4px",overflow:"hidden"},Alpha:{radius:"2px",shadow:"inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)"}},b),disableAlpha:{color:{height:"10px"},hue:{height:"10px"},alpha:{display:"none"}}},b),{disableAlpha:m});return r.default.createElement("div",{style:O.picker,className:"sketch-picker "+w},r.default.createElement("div",{style:O.saturation},r.default.createElement(c.Saturation,{style:O.Saturation,hsl:d,hsv:h,onChange:f})),r.default.createElement("div",{style:O.controls,className:"flexbox-fix"},r.default.createElement("div",{style:O.sliders},r.default.createElement("div",{style:O.hue},r.default.createElement(c.Hue,{style:O.Hue,hsl:d,onChange:f})),r.default.createElement("div",{style:O.alpha},r.default.createElement(c.Alpha,{style:O.Alpha,rgb:n,hsl:d,renderers:v,onChange:f}))),r.default.createElement("div",{style:O.color},r.default.createElement(c.Checkboard,null),r.default.createElement("div",{style:O.activeColor}))),r.default.createElement(l.default,{rgb:n,hsl:d,hex:o,onChange:f,disableAlpha:m}),r.default.createElement(u.default,{colors:g,onClick:f,onSwatchHover:p}))};d.propTypes={disableAlpha:o.default.bool,width:o.default.oneOfType([o.default.string,o.default.number]),styles:o.default.object},d.defaultProps={disableAlpha:!1,width:200,styles:{},presetColors:["#D0021B","#F5A623","#F8E71C","#8B572A","#7ED321","#417505","#BD10E0","#9013FE","#4A90E2","#50E3C2","#B8E986","#000000","#4A4A4A","#9B9B9B","#FFFFFF"]},t.default=(0,c.ColorWrap)(d)},,function(e,t,n){"use strict";var i=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach((function(e){i[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(r){return!1}}()?Object.assign:function(e,t){for(var n,s,c=a(e),l=1;l<arguments.length;l++){for(var u in n=Object(arguments[l]))r.call(n,u)&&(c[u]=n[u]);if(i){s=i(n);for(var h=0;h<s.length;h++)o.call(n,s[h])&&(c[s[h]]=n[s[h]])}}return c}},function(e,t,n){"use strict";var i=n(443),r=n(444);function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){r.isString(e)&&(e=b(e));return e instanceof o?e.format():o.prototype.format.call(e)},t.Url=o;var a=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),h=["%","/","?",";","#"].concat(u),d=["/","?","#"],f=/^[+a-z0-9A-Z_-]{0,63}$/,p=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},_=n(445);function b(e,t,n){if(e&&r.isObject(e)&&e instanceof o)return e;var i=new o;return i.parse(e,t,n),i}o.prototype.parse=function(e,t,n){if(!r.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var o=e.indexOf("?"),s=-1!==o&&o<e.indexOf("#")?"?":"#",l=e.split(s);l[0]=l[0].replace(/\\/g,"/");var b=e=l.join(s);if(b=b.trim(),!n&&1===e.split("#").length){var y=c.exec(b);if(y)return this.path=b,this.href=b,this.pathname=y[1],y[2]?(this.search=y[2],this.query=t?_.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var w=a.exec(b);if(w){var O=(w=w[0]).toLowerCase();this.protocol=O,b=b.substr(w.length)}if(n||w||b.match(/^\/\/[^@\/]+@[^@\/]+/)){var C="//"===b.substr(0,2);!C||w&&g[w]||(b=b.substr(2),this.slashes=!0)}if(!g[w]&&(C||w&&!v[w])){for(var E,A,x=-1,T=0;T<d.length;T++){-1!==(S=b.indexOf(d[T]))&&(-1===x||S<x)&&(x=S)}-1!==(A=-1===x?b.lastIndexOf("@"):b.lastIndexOf("@",x))&&(E=b.slice(0,A),b=b.slice(A+1),this.auth=decodeURIComponent(E)),x=-1;for(T=0;T<h.length;T++){var S;-1!==(S=b.indexOf(h[T]))&&(-1===x||S<x)&&(x=S)}-1===x&&(x=b.length),this.host=b.slice(0,x),b=b.slice(x),this.parseHost(),this.hostname=this.hostname||"";var D="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!D)for(var P=this.hostname.split(/\./),I=(T=0,P.length);T<I;T++){var M=P[T];if(M&&!M.match(f)){for(var R="",L=0,j=M.length;L<j;L++)M.charCodeAt(L)>127?R+="x":R+=M[L];if(!R.match(f)){var F=P.slice(0,T),N=P.slice(T+1),z=M.match(p);z&&(F.push(z[1]),N.unshift(z[2])),N.length&&(b="/"+N.join(".")+b),this.hostname=F.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),D||(this.hostname=i.toASCII(this.hostname));var k=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+k,this.href+=this.host,D&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!m[O])for(T=0,I=u.length;T<I;T++){var H=u[T];if(-1!==b.indexOf(H)){var V=encodeURIComponent(H);V===H&&(V=escape(H)),b=b.split(H).join(V)}}var U=b.indexOf("#");-1!==U&&(this.hash=b.substr(U),b=b.slice(0,U));var W=b.indexOf("?");if(-1!==W?(this.search=b.substr(W),this.query=b.substr(W+1),t&&(this.query=_.parse(this.query)),b=b.slice(0,W)):t&&(this.search="",this.query={}),b&&(this.pathname=b),v[O]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){k=this.pathname||"";var G=this.search||"";this.path=k+G}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",i=this.hash||"",o=!1,a="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&r.isObject(this.query)&&Object.keys(this.query).length&&(a=_.stringify(this.query));var s=this.search||a&&"?"+a||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||v[t])&&!1!==o?(o="//"+(o||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):o||(o=""),i&&"#"!==i.charAt(0)&&(i="#"+i),s&&"?"!==s.charAt(0)&&(s="?"+s),t+o+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(s=s.replace("#","%23"))+i},o.prototype.resolve=function(e){return this.resolveObject(b(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(r.isString(e)){var t=new o;t.parse(e,!1,!0),e=t}for(var n=new o,i=Object.keys(this),a=0;a<i.length;a++){var s=i[a];n[s]=this[s]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),l=0;l<c.length;l++){var u=c[l];"protocol"!==u&&(n[u]=e[u])}return v[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!v[e.protocol]){for(var h=Object.keys(e),d=0;d<h.length;d++){var f=h[d];n[f]=e[f]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||g[e.protocol])n.pathname=e.pathname;else{for(var p=(e.pathname||"").split("/");p.length&&!(e.host=p.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==p[0]&&p.unshift(""),p.length<2&&p.unshift(""),n.pathname=p.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var m=n.pathname||"",_=n.search||"";n.path=m+_}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var b=n.pathname&&"/"===n.pathname.charAt(0),y=e.host||e.pathname&&"/"===e.pathname.charAt(0),w=y||b||n.host&&e.pathname,O=w,C=n.pathname&&n.pathname.split("/")||[],E=(p=e.pathname&&e.pathname.split("/")||[],n.protocol&&!v[n.protocol]);if(E&&(n.hostname="",n.port=null,n.host&&(""===C[0]?C[0]=n.host:C.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===p[0]?p[0]=e.host:p.unshift(e.host)),e.host=null),w=w&&(""===p[0]||""===C[0])),y)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,C=p;else if(p.length)C||(C=[]),C.pop(),C=C.concat(p),n.search=e.search,n.query=e.query;else if(!r.isNullOrUndefined(e.search)){if(E)n.hostname=n.host=C.shift(),(D=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=D.shift(),n.host=n.hostname=D.shift());return n.search=e.search,n.query=e.query,r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!C.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var A=C.slice(-1)[0],x=(n.host||e.host||C.length>1)&&("."===A||".."===A)||""===A,T=0,S=C.length;S>=0;S--)"."===(A=C[S])?C.splice(S,1):".."===A?(C.splice(S,1),T++):T&&(C.splice(S,1),T--);if(!w&&!O)for(;T--;T)C.unshift("..");!w||""===C[0]||C[0]&&"/"===C[0].charAt(0)||C.unshift(""),x&&"/"!==C.join("/").substr(-1)&&C.push("");var D,P=""===C[0]||C[0]&&"/"===C[0].charAt(0);E&&(n.hostname=n.host=P?"":C.length?C.shift():"",(D=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=D.shift(),n.host=n.hostname=D.shift()));return(w=w||n.host&&C.length)&&!P&&C.unshift(""),C.length?n.pathname=C.join("/"):(n.pathname=null,n.path=null),r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},o.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"use strict";var i,r="object"===typeof Reflect?Reflect:null,o=r&&"function"===typeof r.apply?r.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};i=r&&"function"===typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function(e){return e!==e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(n,i){function r(){void 0!==o&&e.removeListener("error",o),n([].slice.call(arguments))}var o;"error"!==t&&(o=function(n){e.removeListener(t,r),i(n)},e.once("error",o)),e.once(t,r)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var c=10;function l(e){if("function"!==typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function h(e,t,n,i){var r,o,a,s;if(l(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"===typeof a?a=o[t]=i?[n,a]:[a,n]:i?a.unshift(n):a.push(n),(r=u(e))>0&&a.length>r&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=d.bind(i);return r.listener=n,i.wrapFn=r,r}function p(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"===typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(r):g(r,r.length)}function m(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"===typeof n)return 1;if(void 0!==n)return n.length}return 0}function g(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e[i];return n}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return c},set:function(e){if("number"!==typeof e||e<0||a(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");c=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if("number"!==typeof e||e<0||a(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return u(this)},s.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i="error"===e,r=this._events;if(void 0!==r)i=i&&void 0===r.error;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=r[e];if(void 0===c)return!1;if("function"===typeof c)o(c,this,t);else{var l=c.length,u=g(c,l);for(n=0;n<l;++n)o(u[n],this,t)}return!0},s.prototype.addListener=function(e,t){return h(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return h(this,e,t,!0)},s.prototype.once=function(e,t){return l(t),this.on(e,f(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return l(t),this.prependListener(e,f(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,i,r,o,a;if(l(t),void 0===(i=this._events))return this;if(void 0===(n=i[e]))return this;if(n===t||n.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!==typeof n){for(r=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,r),1===n.length&&(i[e]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",e,a||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var r,o=Object.keys(n);for(i=0;i<o.length;++i)"removeListener"!==(r=o[i])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"===typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},s.prototype.listeners=function(e){return p(this,e,!0)},s.prototype.rawListeners=function(e){return p(this,e,!1)},s.listenerCount=function(e,t){return"function"===typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(e,t,n){var i=n(84),r=i.Buffer;function o(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(o(i,t),t.Buffer=a),o(r,a),a.from=function(e,t,n){if("number"===typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},a.alloc=function(e,t,n){if("number"!==typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"===typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},a.allocUnsafe=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return r(e)},a.allocUnsafeSlow=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}},function(e,t,n){"use strict";(function(t,i,r){var o=n(162);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var i=e.entry;e.entry=null;for(;i;){var r=i.callback;t.pendingcb--,r(n),i=i.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=_;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?i:o.nextTick;_.WritableState=v;var l=Object.create(n(141));l.inherits=n(104);var u={deprecate:n(455)},h=n(262),d=n(219).Buffer,f=r.Uint8Array||function(){};var p,m=n(263);function g(){}function v(e,t){s=s||n(107),e=e||{};var i=t instanceof s;this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,l=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i&&(l||0===l)?l:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,i=n.sync,r=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,i,r){--t.pendingcb,n?(o.nextTick(r,i),o.nextTick(E,e,t),e._writableState.errorEmitted=!0,e.emit("error",i)):(r(i),e._writableState.errorEmitted=!0,e.emit("error",i),E(e,t))}(e,n,i,t,r);else{var a=O(n);a||n.corked||n.bufferProcessing||!n.bufferedRequest||w(e,n),i?c(y,e,n,a,r):y(e,n,a,r)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function _(e){if(s=s||n(107),!p.call(_,this)&&!(this instanceof s))return new _(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"===typeof e.write&&(this._write=e.write),"function"===typeof e.writev&&(this._writev=e.writev),"function"===typeof e.destroy&&(this._destroy=e.destroy),"function"===typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,n,i,r,o,a){t.writelen=i,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(r,t.onwrite):e._write(r,o,t.onwrite),t.sync=!1}function y(e,t,n,i){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,i(),E(e,t)}function w(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var i=t.bufferedRequestCount,r=new Array(i),o=t.corkedRequestsFree;o.entry=n;for(var s=0,c=!0;n;)r[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;r.allBuffers=c,b(e,t,!0,t.length,r,"",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;n;){var l=n.chunk,u=n.encoding,h=n.callback;if(b(e,t,!1,t.objectMode?1:l.length,l,u,h),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function O(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),E(e,t)}))}function E(e,t){var n=O(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||("function"===typeof e._final?(t.pendingcb++,t.finalCalled=!0,o.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}l.inherits(_,h),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:u.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"===typeof Symbol&&Symbol.hasInstance&&"function"===typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(_,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===_&&(e&&e._writableState instanceof v)}})):p=function(e){return e instanceof this},_.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},_.prototype.write=function(e,t,n){var i,r=this._writableState,a=!1,s=!r.objectMode&&(i=e,d.isBuffer(i)||i instanceof f);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"===typeof t&&(n=t,t=null),s?t="buffer":t||(t=r.defaultEncoding),"function"!==typeof n&&(n=g),r.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),o.nextTick(t,n)}(this,n):(s||function(e,t,n,i){var r=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"===typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),o.nextTick(i,a),r=!1),r}(this,r,e,n))&&(r.pendingcb++,a=function(e,t,n,i,r,o){if(!n){var a=function(e,t,n){e.objectMode||!1===e.decodeStrings||"string"!==typeof t||(t=d.from(t,n));return t}(t,i,r);i!==a&&(n=!0,r="buffer",i=a)}var s=t.objectMode?1:i.length;t.length+=s;var c=t.length<t.highWaterMark;c||(t.needDrain=!0);if(t.writing||t.corked){var l=t.lastBufferedRequest;t.lastBufferedRequest={chunk:i,encoding:r,isBuf:n,callback:o,next:null},l?l.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else b(e,t,!1,s,i,r,o);return c}(this,r,s,e,t,n)),a},_.prototype.cork=function(){this._writableState.corked++},_.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||w(this,e))},_.prototype.setDefaultEncoding=function(e){if("string"===typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(_.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),_.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},_.prototype._writev=null,_.prototype.end=function(e,t,n){var i=this._writableState;"function"===typeof e?(n=e,e=null,t=null):"function"===typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||function(e,t,n){t.ending=!0,E(e,t),n&&(t.finished?o.nextTick(n):e.once("finish",n));t.ended=!0,e.writable=!1}(this,i,n)},Object.defineProperty(_.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),_.prototype.destroy=m.destroy,_.prototype._undestroy=m.undestroy,_.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(85),n(453).setImmediate,n(55))},,function(e,t,n){"use strict";e.exports=function(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}},function(e,t,n){"use strict";e.exports=function(e){return null===e||void 0===e?[]:"length"in e?e:[e]}},function(e,t,n){"use strict";var i=n(95);e.exports=function(e,t){return e.length?(i(e,e.length,0,t),e):t}},function(e,t,n){"use strict";var i=n(530),r=n(105)(i);e.exports=r},function(e,t,n){"use strict";var i=n(105)(/\s/);e.exports=i},function(e,t,n){"use strict";e.exports=function(e){return e<32||127===e}},function(e,t,n){"use strict";var i=n(96),r=n(224),o=n(95),a=n(222),s=n(168),c=n(108),l=n(324),u=n(325),h=n(327),d=n(326),f={name:"labelEnd",tokenize:function(e,t,n){var i,r,o=this,s=o.events.length;for(;s--;)if(("labelImage"===o.events[s][1].type||"labelLink"===o.events[s][1].type)&&!o.events[s][1]._balanced){i=o.events[s][1];break}return function(t){if(!i)return n(t);return i._inactive?l(t):(r=o.parser.defined.indexOf(a(o.sliceSerialize({start:i.end,end:o.now()})))>-1,e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),c)};function c(n){return 40===n?e.attempt(p,t,r?t:l)(n):91===n?e.attempt(m,t,r?e.attempt(g,t,l):l)(n):r?t(n):l(n)}function l(e){return i._balanced=!0,n(e)}},resolveTo:function(e,t){var n,i,a,l,u,h,d,f=e.length,p=0;for(;f--;)if(l=e[f][1],u){if("link"===l.type||"labelLink"===l.type&&l._inactive)break;"enter"===e[f][0]&&"labelLink"===l.type&&(l._inactive=!0)}else if(h){if("enter"===e[f][0]&&("labelImage"===l.type||"labelLink"===l.type)&&!l._balanced&&(u=f,"labelLink"!==l.type)){p=2;break}}else"labelEnd"===l.type&&(h=f);return n={type:"labelLink"===e[u][1].type?"link":"image",start:c(e[u][1].start),end:c(e[e.length-1][1].end)},i={type:"label",start:c(e[u][1].start),end:c(e[h][1].end)},a={type:"labelText",start:c(e[u+p+2][1].end),end:c(e[h-2][1].start)},d=r(d=[["enter",n,t],["enter",i,t]],e.slice(u+1,u+p+3)),d=r(d,[["enter",a,t]]),d=r(d,s(t.parser.constructs.insideSpan.null,e.slice(u+p+4,h-3),t)),d=r(d,[["exit",a,t],e[h-2],e[h-1],["exit",i,t]]),d=r(d,e.slice(h+1)),d=r(d,[["exit",n,t]]),o(e,u,e.length,d),e},resolveAll:function(e){var t,n=-1;for(;++n<e.length;)(t=e[n][1])._used||"labelImage"!==t.type&&"labelLink"!==t.type&&"labelEnd"!==t.type||(e.splice(n+1,"labelImage"===t.type?4:2),t.type="data",n++);return e}},p={tokenize:function(e,t,n){return function(t){return e.enter("resource"),e.enter("resourceMarker"),e.consume(t),e.exit("resourceMarker"),d(e,r)};function r(t){return 41===t?s(t):l(e,o,n,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",3)(t)}function o(t){return i(t)?d(e,a)(t):s(t)}function a(t){return 34===t||39===t||40===t?h(e,d(e,s),n,"resourceTitle","resourceTitleMarker","resourceTitleString")(t):s(t)}function s(i){return 41===i?(e.enter("resourceMarker"),e.consume(i),e.exit("resourceMarker"),e.exit("resource"),t):n(i)}}},m={tokenize:function(e,t,n){var i=this;return function(t){return u.call(i,e,r,n,"reference","referenceMarker","referenceString")(t)};function r(e){return i.parser.defined.indexOf(a(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)))<0?n(e):t(e)}}},g={tokenize:function(e,t,n){return function(t){return e.enter("reference"),e.enter("referenceMarker"),e.consume(t),e.exit("referenceMarker"),i};function i(i){return 93===i?(e.enter("referenceMarker"),e.consume(i),e.exit("referenceMarker"),e.exit("reference"),t):n(i)}}};e.exports=f},function(e,t,n){"use strict";e.exports=s;var i=n(329),r=i.CONTINUE,o=i.SKIP,a=i.EXIT;function s(e,t,n,r){"function"===typeof t&&"function"!==typeof n&&(r=n,n=t,t=null),i(e,t,(function(e,t){var i=t[t.length-1],r=i?i.children.indexOf(e):null;return n(e,r,i)}),r)}s.CONTINUE=r,s.SKIP=o,s.EXIT=a},function(e,t,n){"use strict";var i,r="";e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(i!==e||"undefined"===typeof i)i=e,r="";else if(r.length>=n)return r.substr(0,n);for(;n>r.length&&t>1;)1&t&&(r+=e),t>>=1,e+=e;return r=(r+=e).substr(0,n)}},function(e,t,n){var i=n(354),r=n(358);e.exports=function(e,t){return e&&i(e,r(t))}},function(e,t,n){var i=n(641),r=n(87),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=i(function(){return arguments}())?i:function(e){return r(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=c},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var i=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==i||"symbol"!=i&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t,n){var i=n(643),r=n(236),o=n(237),a=o&&o.isTypedArray,s=a?r(a):i;e.exports=s},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t,n){(function(e){var i=n(353),r=t&&!t.nodeType&&t,o=r&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===r&&i.process,s=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(t){}}();e.exports=s}).call(this,n(139)(e))},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){var i=n(109),r=n(76);e.exports=function(e){if(!r(e))return!1;var t=i(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){var i=n(357)(Object.getPrototypeOf,Object);e.exports=i},function(e,t,n){var i=n(110)(n(82),"Map");e.exports=i},function(e,t,n){var i=n(664),r=n(671),o=n(673),a=n(674),s=n(675);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=r,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t,n){var i=n(686),r=n(368),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),i(a(e),(function(t){return o.call(e,t)})))}:r;e.exports=s},function(e,t,n){var i=n(73),r=n(180),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(i(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!r(e))||(a.test(e)||!o.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var i=n(376);e.exports=function(e,t,n){"__proto__"==t&&i?i(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var i=n(364);e.exports=function(e){var t=new e.constructor(e.byteLength);return new i(t).set(new i(e)),t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(744);Object.defineProperty(t,"Alpha",{enumerable:!0,get:function(){return h(i).default}});var r=n(248);Object.defineProperty(t,"Checkboard",{enumerable:!0,get:function(){return h(r).default}});var o=n(747);Object.defineProperty(t,"EditableInput",{enumerable:!0,get:function(){return h(o).default}});var a=n(748);Object.defineProperty(t,"Hue",{enumerable:!0,get:function(){return h(a).default}});var s=n(750);Object.defineProperty(t,"Raised",{enumerable:!0,get:function(){return h(s).default}});var c=n(751);Object.defineProperty(t,"Saturation",{enumerable:!0,get:function(){return h(c).default}});var l=n(758);Object.defineProperty(t,"ColorWrap",{enumerable:!0,get:function(){return h(l).default}});var u=n(762);function h(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"Swatch",{enumerable:!0,get:function(){return h(u).default}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Checkboard=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=n(2),o=c(r),a=c(n(86)),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(746));function c(e){return e&&e.__esModule?e:{default:e}}var l=t.Checkboard=function(e){var t=e.white,n=e.grey,c=e.size,l=e.renderers,u=e.borderRadius,h=e.boxShadow,d=e.children,f=(0,a.default)({default:{grid:{borderRadius:u,boxShadow:h,absolute:"0px 0px 0px 0px",background:"url("+s.get(t,n,c,l.canvas)+") center left"}}});return(0,r.isValidElement)(d)?o.default.cloneElement(d,i({},d.props,{style:i({},d.props.style,f.grid)})):o.default.createElement("div",{style:f.grid})};l.defaultProps={size:8,white:"transparent",grey:"rgba(0,0,0,.08)",renderers:{}},t.default=l},function(e,t,n){"use strict";e.exports=n(437)},function(e,t,n){"use strict";var i=function(){};e.exports=i},function(e,t,n){"use strict";var i=n(390);n.d(t,"Classes",(function(){return i}))},function(e,t,n){"use strict";(function(e,i){var r,o=n(396);r="undefined"!==typeof self?self:"undefined"!==typeof window?window:"undefined"!==typeof e?e:i;var a=Object(o.a)(r);t.a=a}).call(this,n(55),n(438)(e))},function(e,t,n){"use strict";function i(e,t,n,i,r,o,a){try{var s=e[o](a),c=s.value}catch(l){return void n(l)}s.done?t(c):Promise.resolve(c).then(i,r)}function r(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function s(e){i(a,r,o,s,c,"next",e)}function c(e){i(a,r,o,s,c,"throw",e)}s(void 0)}))}}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";t.__esModule=!0;var i=o(n(2)),r=o(n(479));function o(e){return e&&e.__esModule?e:{default:e}}t.default=i.default.createContext||r.default,e.exports=t.default},function(e,t,n){"use strict";(function(e){var n="undefined"!==typeof window&&"undefined"!==typeof document&&"undefined"!==typeof navigator,i=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(n&&navigator.userAgent.indexOf(e[t])>=0)return 1;return 0}();var r=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),i))}};function o(e){return e&&"[object Function]"==={}.toString.call(e)}function a(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function c(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=a(e),n=t.overflow,i=t.overflowX,r=t.overflowY;return/(auto|scroll|overlay)/.test(n+r+i)?e:c(s(e))}function l(e){return e&&e.referenceNode?e.referenceNode:e}var u=n&&!(!window.MSInputMethodContext||!document.documentMode),h=n&&/MSIE 10/.test(navigator.userAgent);function d(e){return 11===e?u:10===e?h:u||h}function f(e){if(!e)return document.documentElement;for(var t=d(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?f(n):n:e?e.ownerDocument.documentElement:document.documentElement}function p(e){return null!==e.parentNode?p(e.parentNode):e}function m(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,r=n?t:e,o=document.createRange();o.setStart(i,0),o.setEnd(r,0);var a=o.commonAncestorContainer;if(e!==a&&t!==a||i.contains(r))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||f(e.firstElementChild)===e)}(a)?a:f(a);var s=p(e);return s.host?m(s.host,t):m(e,p(t).host)}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"===i||"HTML"===i){var r=e.ownerDocument.documentElement,o=e.ownerDocument.scrollingElement||r;return o[n]}return e[n]}function v(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=g(t,"top"),r=g(t,"left"),o=n?-1:1;return e.top+=i*o,e.bottom+=i*o,e.left+=r*o,e.right+=r*o,e}function _(e,t){var n="x"===t?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"])+parseFloat(e["border"+i+"Width"])}function b(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],d(10)?parseInt(n["offset"+e])+parseInt(i["margin"+("Height"===e?"Top":"Left")])+parseInt(i["margin"+("Height"===e?"Bottom":"Right")]):0)}function y(e){var t=e.body,n=e.documentElement,i=d(10)&&getComputedStyle(n);return{height:b("Height",t,n,i),width:b("Width",t,n,i)}}var w=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},O=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),C=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},E=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function A(e){return E({},e,{right:e.left+e.width,bottom:e.top+e.height})}function x(e){var t={};try{if(d(10)){t=e.getBoundingClientRect();var n=g(e,"top"),i=g(e,"left");t.top+=n,t.left+=i,t.bottom+=n,t.right+=i}else t=e.getBoundingClientRect()}catch(f){}var r={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},o="HTML"===e.nodeName?y(e.ownerDocument):{},s=o.width||e.clientWidth||r.width,c=o.height||e.clientHeight||r.height,l=e.offsetWidth-s,u=e.offsetHeight-c;if(l||u){var h=a(e);l-=_(h,"x"),u-=_(h,"y"),r.width-=l,r.height-=u}return A(r)}function T(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=d(10),r="HTML"===t.nodeName,o=x(e),s=x(t),l=c(e),u=a(t),h=parseFloat(u.borderTopWidth),f=parseFloat(u.borderLeftWidth);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var p=A({top:o.top-s.top-h,left:o.left-s.left-f,width:o.width,height:o.height});if(p.marginTop=0,p.marginLeft=0,!i&&r){var m=parseFloat(u.marginTop),g=parseFloat(u.marginLeft);p.top-=h-m,p.bottom-=h-m,p.left-=f-g,p.right-=f-g,p.marginTop=m,p.marginLeft=g}return(i&&!n?t.contains(l):t===l&&"BODY"!==l.nodeName)&&(p=v(p,t)),p}function S(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,i=T(e,n),r=Math.max(n.clientWidth,window.innerWidth||0),o=Math.max(n.clientHeight,window.innerHeight||0),a=t?0:g(n),s=t?0:g(n,"left"),c={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:r,height:o};return A(c)}function D(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===a(e,"position"))return!0;var n=s(e);return!!n&&D(n)}function P(e){if(!e||!e.parentElement||d())return document.documentElement;for(var t=e.parentElement;t&&"none"===a(t,"transform");)t=t.parentElement;return t||document.documentElement}function I(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o={top:0,left:0},a=r?P(e):m(e,l(t));if("viewport"===i)o=S(a,r);else{var u=void 0;"scrollParent"===i?"BODY"===(u=c(s(t))).nodeName&&(u=e.ownerDocument.documentElement):u="window"===i?e.ownerDocument.documentElement:i;var h=T(u,a,r);if("HTML"!==u.nodeName||D(a))o=h;else{var d=y(e.ownerDocument),f=d.height,p=d.width;o.top+=h.top-h.marginTop,o.bottom=f+h.top,o.left+=h.left-h.marginLeft,o.right=p+h.left}}var g="number"===typeof(n=n||0);return o.left+=g?n:n.left||0,o.top+=g?n:n.top||0,o.right-=g?n:n.right||0,o.bottom-=g?n:n.bottom||0,o}function M(e){return e.width*e.height}function R(e,t,n,i,r){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=I(n,i,o,r),s={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}},c=Object.keys(s).map((function(e){return E({key:e},s[e],{area:M(s[e])})})).sort((function(e,t){return t.area-e.area})),l=c.filter((function(e){var t=e.width,i=e.height;return t>=n.clientWidth&&i>=n.clientHeight})),u=l.length>0?l[0].key:c[0].key,h=e.split("-")[1];return u+(h?"-"+h:"")}function L(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=i?P(t):m(t,l(n));return T(n,r,i)}function j(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),i=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+i,height:e.offsetHeight+n}}function F(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function N(e,t,n){n=n.split("-")[0];var i=j(e),r={width:i.width,height:i.height},o=-1!==["right","left"].indexOf(n),a=o?"top":"left",s=o?"left":"top",c=o?"height":"width",l=o?"width":"height";return r[a]=t[a]+t[c]/2-i[c]/2,r[s]=n===s?t[s]-i[l]:t[F(s)],r}function z(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function k(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var i=z(e,(function(e){return e[t]===n}));return e.indexOf(i)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&o(n)&&(t.offsets.popper=A(t.offsets.popper),t.offsets.reference=A(t.offsets.reference),t=n(t,e))})),t}function B(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=R(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=N(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=k(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function H(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function V(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<t.length;i++){var r=t[i],o=r?""+r+n:e;if("undefined"!==typeof document.body.style[o])return o}return null}function U(){return this.state.isDestroyed=!0,H(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[V("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function W(e){var t=e.ownerDocument;return t?t.defaultView:window}function G(e,t,n,i){n.updateBound=i,W(e).addEventListener("resize",n.updateBound,{passive:!0});var r=c(e);return function e(t,n,i,r){var o="BODY"===t.nodeName,a=o?t.ownerDocument.defaultView:t;a.addEventListener(n,i,{passive:!0}),o||e(c(a.parentNode),n,i,r),r.push(a)}(r,"scroll",n.updateBound,n.scrollParents),n.scrollElement=r,n.eventsEnabled=!0,n}function q(){this.state.eventsEnabled||(this.state=G(this.reference,this.options,this.state,this.scheduleUpdate))}function Y(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,W(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach((function(e){e.removeEventListener("scroll",t.updateBound)})),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function $(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function X(e,t){Object.keys(t).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&$(t[n])&&(i="px"),e.style[n]=t[n]+i}))}var K=n&&/Firefox/i.test(navigator.userAgent);function Q(e,t,n){var i=z(e,(function(e){return e.name===t})),r=!!i&&e.some((function(e){return e.name===n&&e.enabled&&e.order<i.order}));if(!r){var o="`"+t+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+o+" modifier in order to work, be sure to include it before "+o+"!")}return r}var Z=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],J=Z.slice(3);function ee(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=J.indexOf(e),i=J.slice(n+1).concat(J.slice(0,n));return t?i.reverse():i}var te="flip",ne="clockwise",ie="counterclockwise";function re(e,t,n,i){var r=[0,0],o=-1!==["right","left"].indexOf(i),a=e.split(/(\+|\-)/).map((function(e){return e.trim()})),s=a.indexOf(z(a,(function(e){return-1!==e.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var c=/\s*,\s*|\s+/,l=-1!==s?[a.slice(0,s).concat([a[s].split(c)[0]]),[a[s].split(c)[1]].concat(a.slice(s+1))]:[a];return(l=l.map((function(e,i){var r=(1===i?!o:o)?"height":"width",a=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,a=!0,e):a?(e[e.length-1]+=t,a=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,i){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+r[1],a=r[2];if(!o)return e;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return A(s)[t]/100*o}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*o}return o}(e,r,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,i){$(n)&&(r[t]+=n*("-"===e[i-1]?-1:1))}))})),r}var oe={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets,o=r.reference,a=r.popper,s=-1!==["bottom","top"].indexOf(n),c=s?"left":"top",l=s?"width":"height",u={start:C({},c,o[c]),end:C({},c,o[c]+o[l]-a[l])};e.offsets.popper=E({},a,u[i])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,i=e.placement,r=e.offsets,o=r.popper,a=r.reference,s=i.split("-")[0],c=void 0;return c=$(+n)?[+n,0]:re(n,o,a,s),"left"===s?(o.top+=c[0],o.left-=c[1]):"right"===s?(o.top+=c[0],o.left+=c[1]):"top"===s?(o.left+=c[0],o.top-=c[1]):"bottom"===s&&(o.left+=c[0],o.top+=c[1]),e.popper=o,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||f(e.instance.popper);e.instance.reference===n&&(n=f(n));var i=V("transform"),r=e.instance.popper.style,o=r.top,a=r.left,s=r[i];r.top="",r.left="",r[i]="";var c=I(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);r.top=o,r.left=a,r[i]=s,t.boundaries=c;var l=t.priority,u=e.offsets.popper,h={primary:function(e){var n=u[e];return u[e]<c[e]&&!t.escapeWithReference&&(n=Math.max(u[e],c[e])),C({},e,n)},secondary:function(e){var n="right"===e?"left":"top",i=u[n];return u[e]>c[e]&&!t.escapeWithReference&&(i=Math.min(u[n],c[e]-("right"===e?u.width:u.height))),C({},n,i)}};return l.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=E({},u,h[t](e))})),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,r=e.placement.split("-")[0],o=Math.floor,a=-1!==["top","bottom"].indexOf(r),s=a?"right":"bottom",c=a?"left":"top",l=a?"width":"height";return n[s]<o(i[c])&&(e.offsets.popper[c]=o(i[c])-n[l]),n[c]>o(i[s])&&(e.offsets.popper[c]=o(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!Q(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"===typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],o=e.offsets,s=o.popper,c=o.reference,l=-1!==["left","right"].indexOf(r),u=l?"height":"width",h=l?"Top":"Left",d=h.toLowerCase(),f=l?"left":"top",p=l?"bottom":"right",m=j(i)[u];c[p]-m<s[d]&&(e.offsets.popper[d]-=s[d]-(c[p]-m)),c[d]+m>s[p]&&(e.offsets.popper[d]+=c[d]+m-s[p]),e.offsets.popper=A(e.offsets.popper);var g=c[d]+c[u]/2-m/2,v=a(e.instance.popper),_=parseFloat(v["margin"+h]),b=parseFloat(v["border"+h+"Width"]),y=g-e.offsets.popper[d]-_-b;return y=Math.max(Math.min(s[u]-m,y),0),e.arrowElement=i,e.offsets.arrow=(C(n={},d,Math.round(y)),C(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(H(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=I(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),i=e.placement.split("-")[0],r=F(i),o=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case te:a=[i,r];break;case ne:a=ee(i);break;case ie:a=ee(i,!0);break;default:a=t.behavior}return a.forEach((function(s,c){if(i!==s||a.length===c+1)return e;i=e.placement.split("-")[0],r=F(i);var l=e.offsets.popper,u=e.offsets.reference,h=Math.floor,d="left"===i&&h(l.right)>h(u.left)||"right"===i&&h(l.left)<h(u.right)||"top"===i&&h(l.bottom)>h(u.top)||"bottom"===i&&h(l.top)<h(u.bottom),f=h(l.left)<h(n.left),p=h(l.right)>h(n.right),m=h(l.top)<h(n.top),g=h(l.bottom)>h(n.bottom),v="left"===i&&f||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!t.flipVariations&&(_&&"start"===o&&f||_&&"end"===o&&p||!_&&"start"===o&&m||!_&&"end"===o&&g),y=!!t.flipVariationsByContent&&(_&&"start"===o&&p||_&&"end"===o&&f||!_&&"start"===o&&g||!_&&"end"===o&&m),w=b||y;(d||v||w)&&(e.flipped=!0,(d||v)&&(i=a[c+1]),w&&(o=function(e){return"end"===e?"start":"start"===e?"end":e}(o)),e.placement=i+(o?"-"+o:""),e.offsets.popper=E({},e.offsets.popper,N(e.instance.popper,e.offsets.reference,e.placement)),e=k(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,r=i.popper,o=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return r[a?"left":"top"]=o[n]-(s?r[a?"width":"height"]:0),e.placement=F(t),e.offsets.popper=A(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!Q(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=z(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,i=t.y,r=e.offsets.popper,o=z(e.instance.modifiers,(function(e){return"applyStyle"===e.name})).gpuAcceleration;void 0!==o&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==o?o:t.gpuAcceleration,s=f(e.instance.popper),c=x(s),l={position:r.position},u=function(e,t){var n=e.offsets,i=n.popper,r=n.reference,o=Math.round,a=Math.floor,s=function(e){return e},c=o(r.width),l=o(i.width),u=-1!==["left","right"].indexOf(e.placement),h=-1!==e.placement.indexOf("-"),d=t?u||h||c%2===l%2?o:a:s,f=t?o:s;return{left:d(c%2===1&&l%2===1&&!h&&t?i.left-1:i.left),top:f(i.top),bottom:f(i.bottom),right:d(i.right)}}(e,window.devicePixelRatio<2||!K),h="bottom"===n?"top":"bottom",d="right"===i?"left":"right",p=V("transform"),m=void 0,g=void 0;if(g="bottom"===h?"HTML"===s.nodeName?-s.clientHeight+u.bottom:-c.height+u.bottom:u.top,m="right"===d?"HTML"===s.nodeName?-s.clientWidth+u.right:-c.width+u.right:u.left,a&&p)l[p]="translate3d("+m+"px, "+g+"px, 0)",l[h]=0,l[d]=0,l.willChange="transform";else{var v="bottom"===h?-1:1,_="right"===d?-1:1;l[h]=g*v,l[d]=m*_,l.willChange=h+", "+d}var b={"x-placement":e.placement};return e.attributes=E({},b,e.attributes),e.styles=E({},l,e.styles),e.arrowStyles=E({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return X(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach((function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)})),e.arrowElement&&Object.keys(e.arrowStyles).length&&X(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,i,r){var o=L(r,t,e,n.positionFixed),a=R(n.placement,o,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",a),X(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},ae=function(){function e(t,n){var i=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};w(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=r(this.update.bind(this)),this.options=E({},e.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(E({},e.Defaults.modifiers,a.modifiers)).forEach((function(t){i.options.modifiers[t]=E({},e.Defaults.modifiers[t]||{},a.modifiers?a.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return E({name:e},i.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&o(e.onLoad)&&e.onLoad(i.reference,i.popper,i.options,e,i.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return O(e,[{key:"update",value:function(){return B.call(this)}},{key:"destroy",value:function(){return U.call(this)}},{key:"enableEventListeners",value:function(){return q.call(this)}},{key:"disableEventListeners",value:function(){return Y.call(this)}}]),e}();ae.Utils=("undefined"!==typeof window?window:e).PopperUtils,ae.placements=Z,ae.Defaults=oe,t.a=ae}).call(this,n(55))},function(e,t,n){var i,r,o;r=[t,n(499),n(311),n(312),n(313),n(500)],void 0===(o="function"===typeof(i=function(e,t,n,i,r,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.detailedDiff=e.updatedDiff=e.deletedDiff=e.diff=e.addedDiff=void 0;var a=h(t),s=h(n),c=h(i),l=h(r),u=h(o);function h(e){return e&&e.__esModule?e:{default:e}}e.addedDiff=s.default,e.diff=a.default,e.deletedDiff=c.default,e.updatedDiff=l.default,e.detailedDiff=u.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){(function(e){var i=n(449),r=n(260),o=n(266),a=n(459),s=n(217),c=t;c.request=function(t,n){t="string"===typeof t?s.parse(t):o(t);var r=-1===e.location.protocol.search(/^https?:$/)?"http:":"",a=t.protocol||r,c=t.hostname||t.host,l=t.port,u=t.path||"/";c&&-1!==c.indexOf(":")&&(c="["+c+"]"),t.url=(c?a+"//"+c:"")+(l?":"+l:"")+u,t.method=(t.method||"GET").toUpperCase(),t.headers=t.headers||{};var h=new i(t);return n&&h.on("response",n),h},c.get=function(e,t){var n=c.request(e,t);return n.end(),n},c.ClientRequest=i,c.IncomingMessage=r.IncomingMessage,c.Agent=function(){},c.Agent.defaultMaxSockets=4,c.globalAgent=new c.Agent,c.STATUS_CODES=a,c.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(this,n(55))},function(e,t,n){(function(e){t.fetch=s(e.fetch)&&s(e.ReadableStream),t.writableStream=s(e.WritableStream),t.abortController=s(e.AbortController),t.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),t.blobConstructor=!0}catch(c){}var n;function i(){if(void 0!==n)return n;if(e.XMLHttpRequest){n=new e.XMLHttpRequest;try{n.open("GET",e.XDomainRequest?"/":"https://example.com")}catch(c){n=null}}else n=null;return n}function r(e){var t=i();if(!t)return!1;try{return t.responseType=e,t.responseType===e}catch(c){}return!1}var o="undefined"!==typeof e.ArrayBuffer,a=o&&s(e.ArrayBuffer.prototype.slice);function s(e){return"function"===typeof e}t.arraybuffer=t.fetch||o&&r("arraybuffer"),t.msstream=!t.fetch&&a&&r("ms-stream"),t.mozchunkedarraybuffer=!t.fetch&&o&&r("moz-chunked-arraybuffer"),t.overrideMimeType=t.fetch||!!i()&&s(i().overrideMimeType),t.vbArray=s(e.VBArray),n=null}).call(this,n(55))},function(e,t,n){(function(e,i,r){var o=n(259),a=n(104),s=n(140),c=t.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},l=t.IncomingMessage=function(t,n,a,c){var l=this;if(s.Readable.call(l),l._mode=a,l.headers={},l.rawHeaders=[],l.trailers={},l.rawTrailers=[],l.on("end",(function(){e.nextTick((function(){l.emit("close")}))})),"fetch"===a){if(l._fetchResponse=n,l.url=n.url,l.statusCode=n.status,l.statusMessage=n.statusText,n.headers.forEach((function(e,t){l.headers[t.toLowerCase()]=e,l.rawHeaders.push(t,e)})),o.writableStream){var u=new WritableStream({write:function(e){return new Promise((function(t,n){l._destroyed?n():l.push(new r(e))?t():l._resumeFetch=t}))},close:function(){i.clearTimeout(c),l._destroyed||l.push(null)},abort:function(e){l._destroyed||l.emit("error",e)}});try{return void n.body.pipeTo(u).catch((function(e){i.clearTimeout(c),l._destroyed||l.emit("error",e)}))}catch(p){}}var h=n.body.getReader();!function e(){h.read().then((function(t){if(!l._destroyed){if(t.done)return i.clearTimeout(c),void l.push(null);l.push(new r(t.value)),e()}})).catch((function(e){i.clearTimeout(c),l._destroyed||l.emit("error",e)}))}()}else{if(l._xhr=t,l._pos=0,l.url=t.responseURL,l.statusCode=t.status,l.statusMessage=t.statusText,t.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var t=e.match(/^([^:]+):\s*(.*)/);if(t){var n=t[1].toLowerCase();"set-cookie"===n?(void 0===l.headers[n]&&(l.headers[n]=[]),l.headers[n].push(t[2])):void 0!==l.headers[n]?l.headers[n]+=", "+t[2]:l.headers[n]=t[2],l.rawHeaders.push(t[1],t[2])}})),l._charset="x-user-defined",!o.overrideMimeType){var d=l.rawHeaders["mime-type"];if(d){var f=d.match(/;\s*charset=([^;])(;|$)/);f&&(l._charset=f[1].toLowerCase())}l._charset||(l._charset="utf-8")}}};a(l,s.Readable),l.prototype._read=function(){var e=this._resumeFetch;e&&(this._resumeFetch=null,e())},l.prototype._onXHRProgress=function(){var e=this,t=e._xhr,n=null;switch(e._mode){case"text:vbarray":if(t.readyState!==c.DONE)break;try{n=new i.VBArray(t.responseBody).toArray()}catch(u){}if(null!==n){e.push(new r(n));break}case"text":try{n=t.responseText}catch(u){e._mode="text:vbarray";break}if(n.length>e._pos){var o=n.substr(e._pos);if("x-user-defined"===e._charset){for(var a=new r(o.length),s=0;s<o.length;s++)a[s]=255&o.charCodeAt(s);e.push(a)}else e.push(o,e._charset);e._pos=n.length}break;case"arraybuffer":if(t.readyState!==c.DONE||!t.response)break;n=t.response,e.push(new r(new Uint8Array(n)));break;case"moz-chunked-arraybuffer":if(n=t.response,t.readyState!==c.LOADING||!n)break;e.push(new r(new Uint8Array(n)));break;case"ms-stream":if(n=t.response,t.readyState!==c.LOADING)break;var l=new i.MSStreamReader;l.onprogress=function(){l.result.byteLength>e._pos&&(e.push(new r(new Uint8Array(l.result.slice(e._pos)))),e._pos=l.result.byteLength)},l.onload=function(){e.push(null)},l.readAsArrayBuffer(n)}e._xhr.readyState===c.DONE&&"ms-stream"!==e._mode&&e.push(null)}}).call(this,n(85),n(55),n(84).Buffer)},function(e,t,n){"use strict";(function(t,i){var r=n(162);e.exports=b;var o,a=n(257);b.ReadableState=_;n(218).EventEmitter;var s=function(e,t){return e.listeners(t).length},c=n(262),l=n(219).Buffer,u=t.Uint8Array||function(){};var h=Object.create(n(141));h.inherits=n(104);var d=n(450),f=void 0;f=d&&d.debuglog?d.debuglog("stream"):function(){};var p,m=n(451),g=n(263);h.inherits(b,c);var v=["error","close","destroy","pause","resume"];function _(e,t){e=e||{};var i=t instanceof(o=o||n(107));this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,a=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new m,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(264).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(o=o||n(107),!(this instanceof b))return new b(e);this._readableState=new _(e,this),this.readable=!0,e&&("function"===typeof e.read&&(this._read=e.read),"function"===typeof e.destroy&&(this._destroy=e.destroy)),c.call(this)}function y(e,t,n,i,r){var o,a=e._readableState;null===t?(a.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,C(e)}(e,a)):(r||(o=function(e,t){var n;i=t,l.isBuffer(i)||i instanceof u||"string"===typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk"));var i;return n}(a,t)),o?e.emit("error",o):a.objectMode||t&&t.length>0?("string"===typeof t||a.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function(e){return l.from(e)}(t)),i?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):w(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?w(e,a,t,!1):A(e,a)):w(e,a,t,!1))):i||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}function w(e,t,n,i){t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,i?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&C(e)),A(e,t)}Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),b.prototype.destroy=g.destroy,b.prototype._undestroy=g.undestroy,b.prototype._destroy=function(e,t){this.push(null),t(e)},b.prototype.push=function(e,t){var n,i=this._readableState;return i.objectMode?n=!0:"string"===typeof e&&((t=t||i.defaultEncoding)!==i.encoding&&(e=l.from(e,t),t=""),n=!0),y(this,e,t,!1,n)},b.prototype.unshift=function(e){return y(this,e,null,!0,!1)},b.prototype.isPaused=function(){return!1===this._readableState.flowing},b.prototype.setEncoding=function(e){return p||(p=n(264).StringDecoder),this._readableState.decoder=new p(e),this._readableState.encoding=e,this};function O(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(f("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?r.nextTick(E,e):E(e))}function E(e){f("emit readable"),e.emit("readable"),D(e)}function A(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(x,e,t))}function x(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(f("maybeReadMore read 0"),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}function T(e){f("readable nexttick read 0"),e.read(0)}function S(e,t){t.reading||(f("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),D(e),t.flowing&&!t.reading&&e.read(0)}function D(e){var t=e._readableState;for(f("flow",t.flowing);t.flowing&&null!==e.read(););}function P(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var i;e<t.head.data.length?(i=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):i=e===t.head.data.length?t.shift():n?function(e,t){var n=t.head,i=1,r=n.data;e-=r.length;for(;n=n.next;){var o=n.data,a=e>o.length?o.length:e;if(a===o.length?r+=o:r+=o.slice(0,e),0===(e-=a)){a===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++i}return t.length-=i,r}(e,t):function(e,t){var n=l.allocUnsafe(e),i=t.head,r=1;i.data.copy(n),e-=i.data.length;for(;i=i.next;){var o=i.data,a=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,a),0===(e-=a)){a===o.length?(++r,i.next?t.head=i.next:t.head=t.tail=null):(t.head=i,i.data=o.slice(a));break}++r}return t.length-=r,n}(e,t);return i}(e,t.buffer,t.decoder),n);var n}function I(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,r.nextTick(M,t,e))}function M(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function R(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1}b.prototype.read=function(e){f("read",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return f("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?I(this):C(this),null;if(0===(e=O(e,t))&&t.ended)return 0===t.length&&I(this),null;var i,r=t.needReadable;return f("need readable",r),(0===t.length||t.length-e<t.highWaterMark)&&f("length less than watermark",r=!0),t.ended||t.reading?f("reading or ended",r=!1):r&&(f("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=O(n,t))),null===(i=e>0?P(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&I(this)),null!==i&&this.emit("data",i),i},b.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},b.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,f("pipe count=%d opts=%j",o.pipesCount,t);var c=(!t||!1!==t.end)&&e!==i.stdout&&e!==i.stderr?u:b;function l(t,i){f("onunpipe"),t===n&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,f("cleanup"),e.removeListener("close",v),e.removeListener("finish",_),e.removeListener("drain",h),e.removeListener("error",g),e.removeListener("unpipe",l),n.removeListener("end",u),n.removeListener("end",b),n.removeListener("data",m),d=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){f("onend"),e.end()}o.endEmitted?r.nextTick(c):n.once("end",c),e.on("unpipe",l);var h=function(e){return function(){var t=e._readableState;f("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,D(e))}}(n);e.on("drain",h);var d=!1;var p=!1;function m(t){f("ondata"),p=!1,!1!==e.write(t)||p||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==R(o.pipes,e))&&!d&&(f("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function g(t){f("onerror",t),b(),e.removeListener("error",g),0===s(e,"error")&&e.emit("error",t)}function v(){e.removeListener("finish",_),b()}function _(){f("onfinish"),e.removeListener("close",v),b()}function b(){f("unpipe"),n.unpipe(e)}return n.on("data",m),function(e,t,n){if("function"===typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",g),e.once("close",v),e.once("finish",_),e.emit("pipe",n),o.flowing||(f("pipe resume"),n.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var i=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o<r;o++)i[o].emit("unpipe",this,n);return this}var a=R(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this,n)),this},b.prototype.on=function(e,t){var n=c.prototype.on.call(this,e,t);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var i=this._readableState;i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.emittedReadable=!1,i.reading?i.length&&C(this):r.nextTick(T,this))}return n},b.prototype.addListener=b.prototype.on,b.prototype.resume=function(){var e=this._readableState;return e.flowing||(f("resume"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(S,e,t))}(this,e)),this},b.prototype.pause=function(){return f("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(f("pause"),this._readableState.flowing=!1,this.emit("pause")),this},b.prototype.wrap=function(e){var t=this,n=this._readableState,i=!1;for(var r in e.on("end",(function(){if(f("wrapped end"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(r){(f("wrapped data"),n.decoder&&(r=n.decoder.write(r)),!n.objectMode||null!==r&&void 0!==r)&&((n.objectMode||r&&r.length)&&(t.push(r)||(i=!0,e.pause())))})),e)void 0===this[r]&&"function"===typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));for(var o=0;o<v.length;o++)e.on(v[o],this.emit.bind(this,v[o]));return this._read=function(t){f("wrapped _read",t),i&&(i=!1,e.resume())},this},Object.defineProperty(b.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),b._fromList=P}).call(this,n(55),n(85))},function(e,t,n){e.exports=n(218).EventEmitter},function(e,t,n){"use strict";var i=n(162);function r(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||i.nextTick(r,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(i.nextTick(r,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";var i=n(456).Buffer,r=i.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!==typeof t&&(i.isEncoding===r||!r(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=l,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=u,this.end=h,t=3;break;default:return this.write=d,void(this.end=f)}this.lastNeed=0,this.lastTotal=0,this.lastChar=i.allocUnsafe(t)}function a(e){return e<=127?0:e>>5===6?2:e>>4===14?3:e>>3===30?4:e>>6===2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!==(192&t[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&t.length>1){if(128!==(192&t[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&t.length>2&&128!==(192&t[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2===0){var n=e.toString("utf16le",t);if(n){var i=n.charCodeAt(n.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function l(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function u(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function f(e){return e&&e.length?this.write(e):""}t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||""},o.prototype.end=function(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"\ufffd":t},o.prototype.text=function(e,t){var n=function(e,t,n){var i=t.length-1;if(i<n)return 0;var r=a(t[i]);if(r>=0)return r>0&&(e.lastNeed=r-1),r;if(--i<n||-2===r)return 0;if((r=a(t[i]))>=0)return r>0&&(e.lastNeed=r-2),r;if(--i<n||-2===r)return 0;if((r=a(t[i]))>=0)return r>0&&(2===r?r=0:e.lastNeed=r-3),r;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var i=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,i),e.toString("utf8",t,i)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";e.exports=a;var i=n(107),r=Object.create(n(141));function o(e,t){var n=this._transformState;n.transforming=!1;var i=n.writecb;if(!i)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),i(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}function a(e){if(!(this instanceof a))return new a(e);i.call(this,e),this._transformState={afterTransform:o.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"===typeof e.transform&&(this._transform=e.transform),"function"===typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",s)}function s(){var e=this;"function"===typeof this._flush?this._flush((function(t,n){c(e,t,n)})):c(this,null,null)}function c(e,t,n){if(t)return e.emit("error",t);if(null!=n&&e.push(n),e._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(e._transformState.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}r.inherits=n(104),r.inherits(a,i),a.prototype.push=function(e,t){return this._transformState.needTransform=!1,i.prototype.push.call(this,e,t)},a.prototype._transform=function(e,t,n){throw new Error("_transform() is not implemented")},a.prototype._write=function(e,t,n){var i=this._transformState;if(i.writecb=n,i.writechunk=e,i.writeencoding=t,!i.transforming){var r=this._readableState;(i.needTransform||r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}},a.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},a.prototype._destroy=function(e,t){var n=this;i.prototype._destroy.call(this,e,(function(e){t(e),n.emit("close")}))}},function(e,t){e.exports=function(){for(var e={},t=0;t<arguments.length;t++){var i=arguments[t];for(var r in i)n.call(i,r)&&(e[r]=i[r])}return e};var n=Object.prototype.hasOwnProperty},function(e,t,n){"use strict";(function(t){var i=n(216);function r(e,t){if(e===t)return 0;for(var n=e.length,i=t.length,r=0,o=Math.min(n,i);r<o;++r)if(e[r]!==t[r]){n=e[r],i=t[r];break}return n<i?-1:i<n?1:0}function o(e){return t.Buffer&&"function"===typeof t.Buffer.isBuffer?t.Buffer.isBuffer(e):!(null==e||!e._isBuffer)}var a=n(268),s=Object.prototype.hasOwnProperty,c=Array.prototype.slice,l="foo"===function(){}.name;function u(e){return Object.prototype.toString.call(e)}function h(e){return!o(e)&&("function"===typeof t.ArrayBuffer&&("function"===typeof ArrayBuffer.isView?ArrayBuffer.isView(e):!!e&&(e instanceof DataView||!!(e.buffer&&e.buffer instanceof ArrayBuffer))))}var d=e.exports=_,f=/\s*function\s+([^\(\s]*)\s*/;function p(e){if(a.isFunction(e)){if(l)return e.name;var t=e.toString().match(f);return t&&t[1]}}function m(e,t){return"string"===typeof e?e.length<t?e:e.slice(0,t):e}function g(e){if(l||!a.isFunction(e))return a.inspect(e);var t=p(e);return"[Function"+(t?": "+t:"")+"]"}function v(e,t,n,i,r){throw new d.AssertionError({message:n,actual:e,expected:t,operator:i,stackStartFunction:r})}function _(e,t){e||v(e,!0,t,"==",d.ok)}function b(e,t,n,i){if(e===t)return!0;if(o(e)&&o(t))return 0===r(e,t);if(a.isDate(e)&&a.isDate(t))return e.getTime()===t.getTime();if(a.isRegExp(e)&&a.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase;if(null!==e&&"object"===typeof e||null!==t&&"object"===typeof t){if(h(e)&&h(t)&&u(e)===u(t)&&!(e instanceof Float32Array||e instanceof Float64Array))return 0===r(new Uint8Array(e.buffer),new Uint8Array(t.buffer));if(o(e)!==o(t))return!1;var s=(i=i||{actual:[],expected:[]}).actual.indexOf(e);return-1!==s&&s===i.expected.indexOf(t)||(i.actual.push(e),i.expected.push(t),function(e,t,n,i){if(null===e||void 0===e||null===t||void 0===t)return!1;if(a.isPrimitive(e)||a.isPrimitive(t))return e===t;if(n&&Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;var r=y(e),o=y(t);if(r&&!o||!r&&o)return!1;if(r)return e=c.call(e),t=c.call(t),b(e,t,n);var s,l,u=C(e),h=C(t);if(u.length!==h.length)return!1;for(u.sort(),h.sort(),l=u.length-1;l>=0;l--)if(u[l]!==h[l])return!1;for(l=u.length-1;l>=0;l--)if(s=u[l],!b(e[s],t[s],n,i))return!1;return!0}(e,t,n,i))}return n?e===t:e==t}function y(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function w(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(n){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function O(e,t,n,i){var r;if("function"!==typeof t)throw new TypeError('"block" argument must be a function');"string"===typeof n&&(i=n,n=null),r=function(e){var t;try{e()}catch(n){t=n}return t}(t),i=(n&&n.name?" ("+n.name+").":".")+(i?" "+i:"."),e&&!r&&v(r,n,"Missing expected exception"+i);var o="string"===typeof i,s=!e&&r&&!n;if((!e&&a.isError(r)&&o&&w(r,n)||s)&&v(r,n,"Got unwanted exception"+i),e&&r&&n&&!w(r,n)||!e&&r)throw r}d.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return m(g(e.actual),128)+" "+e.operator+" "+m(g(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var i=n.stack,r=p(t),o=i.indexOf("\n"+r);if(o>=0){var a=i.indexOf("\n",o+1);i=i.substring(a+1)}this.stack=i}}},a.inherits(d.AssertionError,Error),d.fail=v,d.ok=_,d.equal=function(e,t,n){e!=t&&v(e,t,n,"==",d.equal)},d.notEqual=function(e,t,n){e==t&&v(e,t,n,"!=",d.notEqual)},d.deepEqual=function(e,t,n){b(e,t,!1)||v(e,t,n,"deepEqual",d.deepEqual)},d.deepStrictEqual=function(e,t,n){b(e,t,!0)||v(e,t,n,"deepStrictEqual",d.deepStrictEqual)},d.notDeepEqual=function(e,t,n){b(e,t,!1)&&v(e,t,n,"notDeepEqual",d.notDeepEqual)},d.notDeepStrictEqual=function e(t,n,i){b(t,n,!0)&&v(t,n,i,"notDeepStrictEqual",e)},d.strictEqual=function(e,t,n){e!==t&&v(e,t,n,"===",d.strictEqual)},d.notStrictEqual=function(e,t,n){e===t&&v(e,t,n,"!==",d.notStrictEqual)},d.throws=function(e,t,n){O(!0,e,t,n)},d.doesNotThrow=function(e,t,n){O(!1,e,t,n)},d.ifError=function(e){if(e)throw e},d.strict=i((function e(t,n){t||v(t,!0,n,"==",e)}),d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var C=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n(55))},function(e,t,n){(function(e){var i=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},i=0;i<t.length;i++)n[t[i]]=Object.getOwnPropertyDescriptor(e,t[i]);return n},r=/%[sdj%]/g;t.format=function(e){if(!v(e)){for(var t=[],n=0;n<arguments.length;n++)t.push(s(arguments[n]));return t.join(" ")}n=1;for(var i=arguments,o=i.length,a=String(e).replace(r,(function(e){if("%%"===e)return"%";if(n>=o)return e;switch(e){case"%s":return String(i[n++]);case"%d":return Number(i[n++]);case"%j":try{return JSON.stringify(i[n++])}catch(t){return"[Circular]"}default:return e}})),c=i[n];n<o;c=i[++n])m(c)||!y(c)?a+=" "+c:a+=" "+s(c);return a},t.deprecate=function(n,i){if("undefined"!==typeof e&&!0===e.noDeprecation)return n;if("undefined"===typeof e)return function(){return t.deprecate(n,i).apply(this,arguments)};var r=!1;return function(){if(!r){if(e.throwDeprecation)throw new Error(i);e.traceDeprecation?console.trace(i):console.error(i),r=!0}return n.apply(this,arguments)}};var o,a={};function s(e,n){var i={seen:[],stylize:l};return arguments.length>=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),p(n)?i.showHidden=n:n&&t._extend(i,n),_(i.showHidden)&&(i.showHidden=!1),_(i.depth)&&(i.depth=2),_(i.colors)&&(i.colors=!1),_(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=c),u(i,e,i.depth)}function c(e,t){var n=s.styles[t];return n?"\x1b["+s.colors[n][0]+"m"+e+"\x1b["+s.colors[n][1]+"m":e}function l(e,t){return e}function u(e,n,i){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var r=n.inspect(i,e);return v(r)||(r=u(e,r,i)),r}var o=function(e,t){if(_(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(g(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(m(t))return e.stylize("null","null")}(e,n);if(o)return o;var a=Object.keys(n),s=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),O(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(n);if(0===a.length){if(C(n)){var c=n.name?": "+n.name:"";return e.stylize("[Function"+c+"]","special")}if(b(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(w(n))return e.stylize(Date.prototype.toString.call(n),"date");if(O(n))return h(n)}var l,y="",E=!1,A=["{","}"];(f(n)&&(E=!0,A=["[","]"]),C(n))&&(y=" [Function"+(n.name?": "+n.name:"")+"]");return b(n)&&(y=" "+RegExp.prototype.toString.call(n)),w(n)&&(y=" "+Date.prototype.toUTCString.call(n)),O(n)&&(y=" "+h(n)),0!==a.length||E&&0!=n.length?i<0?b(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),l=E?function(e,t,n,i,r){for(var o=[],a=0,s=t.length;a<s;++a)S(t,String(a))?o.push(d(e,t,n,i,String(a),!0)):o.push("");return r.forEach((function(r){r.match(/^\d+$/)||o.push(d(e,t,n,i,r,!0))})),o}(e,n,i,s,a):a.map((function(t){return d(e,n,i,s,t,E)})),e.seen.pop(),function(e,t,n){if(e.reduce((function(e,t){return t.indexOf("\n")>=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1];return n[0]+t+" "+e.join(", ")+" "+n[1]}(l,y,A)):A[0]+y+A[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,n,i,r,o){var a,s,c;if((c=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?s=c.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):c.set&&(s=e.stylize("[Setter]","special")),S(i,r)||(a="["+r+"]"),s||(e.seen.indexOf(c.value)<0?(s=m(n)?u(e,c.value,null):u(e,c.value,n-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n")):s=e.stylize("[Circular]","special")),_(a)){if(o&&r.match(/^\d+$/))return s;(a=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function f(e){return Array.isArray(e)}function p(e){return"boolean"===typeof e}function m(e){return null===e}function g(e){return"number"===typeof e}function v(e){return"string"===typeof e}function _(e){return void 0===e}function b(e){return y(e)&&"[object RegExp]"===E(e)}function y(e){return"object"===typeof e&&null!==e}function w(e){return y(e)&&"[object Date]"===E(e)}function O(e){return y(e)&&("[object Error]"===E(e)||e instanceof Error)}function C(e){return"function"===typeof e}function E(e){return Object.prototype.toString.call(e)}function A(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(_(o)&&(o=Object({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,REACT_APP_CATEHUB_ENDPOINT:"https://dev.catehub.brockmann-consult.de/api/v2/"}).NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(o)){var i=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,i,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=f,t.isBoolean=p,t.isNull=m,t.isNullOrUndefined=function(e){return null==e},t.isNumber=g,t.isString=v,t.isSymbol=function(e){return"symbol"===typeof e},t.isUndefined=_,t.isRegExp=b,t.isObject=y,t.isDate=w,t.isError=O,t.isFunction=C,t.isPrimitive=function(e){return null===e||"boolean"===typeof e||"number"===typeof e||"string"===typeof e||"symbol"===typeof e||"undefined"===typeof e},t.isBuffer=n(467);var x=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[A(e.getHours()),A(e.getMinutes()),A(e.getSeconds())].join(":");return[e.getDate(),x[e.getMonth()],t].join(" ")}function S(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",T(),t.format.apply(t,arguments))},t.inherits=n(468),t._extend=function(e,t){if(!t||!y(t))return e;for(var n=Object.keys(t),i=n.length;i--;)e[n[i]]=t[n[i]];return e};var D="undefined"!==typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!==typeof e)throw new TypeError('The "original" argument must be of type Function');if(D&&e[D]){var t;if("function"!==typeof(t=e[D]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,D,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,i=new Promise((function(e,i){t=e,n=i})),r=[],o=0;o<arguments.length;o++)r.push(arguments[o]);r.push((function(e,i){e?n(e):t(i)}));try{e.apply(this,r)}catch(a){n(a)}return i}return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),D&&Object.defineProperty(t,D,{value:t,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(t,i(e))},t.promisify.custom=D,t.callbackify=function(t){if("function"!==typeof t)throw new TypeError('The "original" argument must be of type Function');function n(){for(var n=[],i=0;i<arguments.length;i++)n.push(arguments[i]);var r=n.pop();if("function"!==typeof r)throw new TypeError("The last argument must be of type Function");var o=this,a=function(){return r.apply(o,arguments)};t.apply(this,n).then((function(t){e.nextTick(a,null,t)}),(function(t){e.nextTick(P,t,a)}))}return Object.setPrototypeOf(n,Object.getPrototypeOf(t)),Object.defineProperties(n,i(t)),n}}).call(this,n(85))},function(e,t,n){"use strict";e.exports=function(e,t,n,i){for(var r=65535&e|0,o=e>>>16&65535|0,a=0;0!==n;){n-=a=n>2e3?2e3:n;do{o=o+(r=r+t[i++]|0)|0}while(--a);r%=65521,o%=65521}return r|o<<16|0}},function(e,t,n){"use strict";var i=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();e.exports=function(e,t,n,r){var o=i,a=r+n;e^=-1;for(var s=r;s<a;s++)e=e>>>8^o[255&(e^t[s])];return-1^e}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var i=n(11),r=n(2),o=n(103),a=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.timeoutIds=[],i.clearTimeouts=function(){if(i.timeoutIds.length>0){for(var e=0,t=i.timeoutIds;e<t.length;e++){var n=t[e];window.clearTimeout(n)}i.timeoutIds=[]}},Object(o.e)("production")||i.validateProps(i.props),i}return Object(i.c)(t,e),t.prototype.componentDidUpdate=function(e,t,n){Object(o.e)("production")||this.validateProps(this.props)},t.prototype.componentWillUnmount=function(){this.clearTimeouts()},t.prototype.setTimeout=function(e,t){var n=window.setTimeout(e,t);return this.timeoutIds.push(n),function(){return window.clearTimeout(n)}},t.prototype.validateProps=function(e){},t}(r.Component)},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var i={BLACK:"#10161A",BLUE1:"#0E5A8A",BLUE2:"#106BA3",BLUE3:"#137CBD",BLUE4:"#2B95D6",BLUE5:"#48AFF0",COBALT1:"#1F4B99",COBALT2:"#2458B3",COBALT3:"#2965CC",COBALT4:"#4580E6",COBALT5:"#669EFF",DARK_GRAY1:"#182026",DARK_GRAY2:"#202B33",DARK_GRAY3:"#293742",DARK_GRAY4:"#30404D",DARK_GRAY5:"#394B59",FOREST1:"#1D7324",FOREST2:"#238C2C",FOREST3:"#29A634",FOREST4:"#43BF4D",FOREST5:"#62D96B",GOLD1:"#A67908",GOLD2:"#BF8C0A",GOLD3:"#D99E0B",GOLD4:"#F2B824",GOLD5:"#FFC940",GRAY1:"#5C7080",GRAY2:"#738694",GRAY3:"#8A9BA8",GRAY4:"#A7B6C2",GRAY5:"#BFCCD6",GREEN1:"#0A6640",GREEN2:"#0D8050",GREEN3:"#0F9960",GREEN4:"#15B371",GREEN5:"#3DCC91",INDIGO1:"#5642A6",INDIGO2:"#634DBF",INDIGO3:"#7157D9",INDIGO4:"#9179F2",INDIGO5:"#AD99FF",LIGHT_GRAY1:"#CED9E0",LIGHT_GRAY2:"#D8E1E8",LIGHT_GRAY3:"#E1E8ED",LIGHT_GRAY4:"#EBF1F5",LIGHT_GRAY5:"#F5F8FA",LIME1:"#728C23",LIME2:"#87A629",LIME3:"#9BBF30",LIME4:"#B6D94C",LIME5:"#D1F26D",ORANGE1:"#A66321",ORANGE2:"#BF7326",ORANGE3:"#D9822B",ORANGE4:"#F29D49",ORANGE5:"#FFB366",RED1:"#A82A2A",RED2:"#C23030",RED3:"#DB3737",RED4:"#F55656",RED5:"#FF7373",ROSE1:"#A82255",ROSE2:"#C22762",ROSE3:"#DB2C6F",ROSE4:"#F5498B",ROSE5:"#FF66A1",SEPIA1:"#63411E",SEPIA2:"#7D5125",SEPIA3:"#96622D",SEPIA4:"#B07B46",SEPIA5:"#C99765",TURQUOISE1:"#008075",TURQUOISE2:"#00998C",TURQUOISE3:"#00B3A4",TURQUOISE4:"#14CCBD",TURQUOISE5:"#2EE6D6",VERMILION1:"#9E2B0E",VERMILION2:"#B83211",VERMILION3:"#D13913",VERMILION4:"#EB532D",VERMILION5:"#FF6E4A",VIOLET1:"#5C255C",VIOLET2:"#752F75",VIOLET3:"#8F398F",VIOLET4:"#A854A8",VIOLET5:"#C274C2",WHITE:"#FFFFFF"}},function(e,t){},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return o})),n.d(t,"d",(function(){return a})),n.d(t,"b",(function(){return s}));var i=n(49);function r(e,t){return e===t||e.contains(t)}function o(e,t,n){var i=c((function(t){e.dispatchEvent(new CustomEvent(n,t))}));return e.addEventListener(t,i),i}function a(e,t){return void 0===t&&(t={}),c(e,(function(e){t.preventDefault&&e.preventDefault()}),(function(e){return e.persist()}))}function s(e){return c(e)}function c(e,t,n){var r=!1;return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];Object(i.a)(t)&&t.apply(void 0,o),r||(r=!0,Object(i.a)(n)&&n.apply(void 0,o),requestAnimationFrame((function(){e.apply(void 0,o),r=!1})))}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(49);function r(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];if(null!=e){var o=e[t];if(Object(i.a)(o))return o.apply(void 0,n)}}},function(e,t,n){"undefined"!==typeof window&&"undefined"!==typeof document&&n(478)},function(e,t,n){"use strict";t.__esModule=!0,t.default=t.EXITING=t.ENTERED=t.ENTERING=t.EXITED=t.UNMOUNTED=void 0;var i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var i=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};i.get||i.set?Object.defineProperty(t,n,i):t[n]=e[n]}return t.default=e,t}(n(36)),r=s(n(2)),o=s(n(54)),a=n(24);n(278);function s(e){return e&&e.__esModule?e:{default:e}}t.UNMOUNTED="unmounted";t.EXITED="exited";t.ENTERING="entering";t.ENTERED="entered";t.EXITING="exiting";var c=function(e){var t,n;function i(t,n){var i;i=e.call(this,t,n)||this;var r,o=n.transitionGroup,a=o&&!o.isMounting?t.enter:t.appear;return i.appearStatus=null,t.in?a?(r="exited",i.appearStatus="entering"):r="entered":r=t.unmountOnExit||t.mountOnEnter?"unmounted":"exited",i.state={status:r},i.nextCallback=null,i}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=i.prototype;return a.getChildContext=function(){return{transitionGroup:null}},i.getDerivedStateFromProps=function(e,t){return e.in&&"unmounted"===t.status?{status:"exited"}:null},a.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},a.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?"entering"!==n&&"entered"!==n&&(t="entering"):"entering"!==n&&"entered"!==n||(t="exiting")}this.updateStatus(!1,t)},a.componentWillUnmount=function(){this.cancelNextCallback()},a.getTimeouts=function(){var e,t,n,i=this.props.timeout;return e=t=n=i,null!=i&&"number"!==typeof i&&(e=i.exit,t=i.enter,n=void 0!==i.appear?i.appear:t),{exit:e,enter:t,appear:n}},a.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t){this.cancelNextCallback();var n=o.default.findDOMNode(this);"entering"===t?this.performEnter(n,e):this.performExit(n)}else this.props.unmountOnExit&&"exited"===this.state.status&&this.setState({status:"unmounted"})},a.performEnter=function(e,t){var n=this,i=this.props.enter,r=this.context.transitionGroup?this.context.transitionGroup.isMounting:t,o=this.getTimeouts(),a=r?o.appear:o.enter;t||i?(this.props.onEnter(e,r),this.safeSetState({status:"entering"},(function(){n.props.onEntering(e,r),n.onTransitionEnd(e,a,(function(){n.safeSetState({status:"entered"},(function(){n.props.onEntered(e,r)}))}))}))):this.safeSetState({status:"entered"},(function(){n.props.onEntered(e)}))},a.performExit=function(e){var t=this,n=this.props.exit,i=this.getTimeouts();n?(this.props.onExit(e),this.safeSetState({status:"exiting"},(function(){t.props.onExiting(e),t.onTransitionEnd(e,i.exit,(function(){t.safeSetState({status:"exited"},(function(){t.props.onExited(e)}))}))}))):this.safeSetState({status:"exited"},(function(){t.props.onExited(e)}))},a.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},a.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},a.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(i){n&&(n=!1,t.nextCallback=null,e(i))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},a.onTransitionEnd=function(e,t,n){this.setNextCallback(n);var i=null==t&&!this.props.addEndListener;e&&!i?(this.props.addEndListener&&this.props.addEndListener(e,this.nextCallback),null!=t&&setTimeout(this.nextCallback,t)):setTimeout(this.nextCallback,0)},a.render=function(){var e=this.state.status;if("unmounted"===e)return null;var t=this.props,n=t.children,i=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(t,["children"]);if(delete i.in,delete i.mountOnEnter,delete i.unmountOnExit,delete i.appear,delete i.enter,delete i.exit,delete i.timeout,delete i.addEndListener,delete i.onEnter,delete i.onEntering,delete i.onEntered,delete i.onExit,delete i.onExiting,delete i.onExited,"function"===typeof n)return n(e,i);var o=r.default.Children.only(n);return r.default.cloneElement(o,i)},i}(r.default.Component);function l(){}c.contextTypes={transitionGroup:i.object},c.childContextTypes={transitionGroup:function(){}},c.propTypes={},c.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:l,onEntering:l,onEntered:l,onExit:l,onExiting:l,onExited:l},c.UNMOUNTED=0,c.EXITED=1,c.ENTERING=2,c.ENTERED=3,c.EXITING=4;var u=(0,a.polyfill)(c);t.default=u},function(e,t,n){"use strict";t.__esModule=!0,t.classNamesShape=t.timeoutsShape=void 0;var i;(i=n(36))&&i.__esModule;t.timeoutsShape=null;t.classNamesShape=null},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i=s(n(36)),r=s(n(2)),o=n(24),a=n(487);function s(e){return e&&e.__esModule?e:{default:e}}function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}function l(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var u=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},h=function(e){var t,n;function i(t,n){var i,r=(i=e.call(this,t,n)||this).handleExited.bind(l(l(i)));return i.state={handleExited:r,firstRender:!0},i}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=i.prototype;return o.getChildContext=function(){return{transitionGroup:{isMounting:!this.appeared}}},o.componentDidMount=function(){this.appeared=!0,this.mounted=!0},o.componentWillUnmount=function(){this.mounted=!1},i.getDerivedStateFromProps=function(e,t){var n=t.children,i=t.handleExited;return{children:t.firstRender?(0,a.getInitialChildMapping)(e,i):(0,a.getNextChildMapping)(e,n,i),firstRender:!1}},o.handleExited=function(e,t){var n=(0,a.getChildMapping)(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=c({},t.children);return delete n[e.key],{children:n}})))},o.render=function(){var e=this.props,t=e.component,n=e.childFactory,i=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,["component","childFactory"]),o=u(this.state.children).map(n);return delete i.appear,delete i.enter,delete i.exit,null===t?o:r.default.createElement(t,i,o)},i}(r.default.Component);h.childContextTypes={transitionGroup:i.default.object.isRequired},h.propTypes={},h.defaultProps={component:"div",childFactory:function(e){return e}};var d=(0,o.polyfill)(h);t.default=d,e.exports=t.default},function(e,t,n){"use strict";var i=Array.prototype.slice,r=n(281),o=Object.keys,a=o?function(e){return o(e)}:n(488),s=Object.keys;a.shim=function(){Object.keys?function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2)||(Object.keys=function(e){return r(e)?s(i.call(e)):s(e)}):Object.keys=a;return Object.keys||a},e.exports=a},function(e,t,n){"use strict";var i=Object.prototype.toString;e.exports=function(e){var t=i.call(e),n="[object Arguments]"===t;return n||(n="[object Array]"!==t&&null!==e&&"object"===typeof e&&"number"===typeof e.length&&e.length>=0&&"[object Function]"===i.call(e.callee)),n}},function(e,t,n){"use strict";var i=n(283),r=n(492),o=r("%Function.prototype.apply%"),a=r("%Function.prototype.call%"),s=r("%Reflect.apply%",!0)||i.call(a,o);e.exports=function(){return s(i,a,arguments)},e.exports.apply=function(){return s(i,o,arguments)}},function(e,t,n){"use strict";var i=n(491);e.exports=Function.prototype.bind||i},function(e,t,n){"use strict";(function(t){var i=t.Symbol,r=n(493);e.exports=function(){return"function"===typeof i&&("function"===typeof Symbol&&("symbol"===typeof i("foo")&&("symbol"===typeof Symbol("bar")&&r())))}}).call(this,n(55))},function(e,t,n){"use strict";var i=function(e){return e!==e};e.exports=function(e,t){return 0===e&&0===t?1/e===1/t:e===t||!(!i(e)||!i(t))}},function(e,t,n){"use strict";var i=n(285);e.exports=function(){return"function"===typeof Object.is?Object.is:i}},function(e,t,n){"use strict";var i=Object,r=TypeError;e.exports=function(){if(null!=this&&this!==i(this))throw new r("RegExp.prototype.flags getter called on non-object");var e="";return this.global&&(e+="g"),this.ignoreCase&&(e+="i"),this.multiline&&(e+="m"),this.dotAll&&(e+="s"),this.unicode&&(e+="u"),this.sticky&&(e+="y"),e}},function(e,t,n){"use strict";var i=n(287),r=n(142).supportsDescriptors,o=Object.getOwnPropertyDescriptor,a=TypeError;e.exports=function(){if(!r)throw new a("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");if("gim"===/a/gim.flags){var e=o(RegExp.prototype,"flags");if(e&&"function"===typeof e.get&&"boolean"===typeof/a/.dotAll)return e.get}return i}},function(e,t,n){"use strict";n.d(t,"a",(function(){return _}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(90),l=n(47),u=n(9),h=n(27),d=n(40),f=n(126),p=n(127),m=n(191),g=n(77),v=n(192),_=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.renderOverflow=function(e){var n=t.props.collapseFrom,r=n===c.a.END?l.a.BOTTOM_RIGHT:l.a.BOTTOM_LEFT,o=e;return n===c.a.START&&(o=e.slice().reverse()),a.createElement("li",null,a.createElement(g.a,Object(i.a)({position:r},t.props.popoverProps),a.createElement("span",{className:u.Classes.BREADCRUMBS_COLLAPSED}),a.createElement(f.a,null,o.map(t.renderOverflowBreadcrumb))))},t.renderOverflowBreadcrumb=function(e,t){var n=null!=e.href||null!=e.onClick,r=Object(h.b)(e);return a.createElement(p.a,Object(i.a)({disabled:!n},r,{text:e.text,key:t}))},t.renderBreadcrumbWrapper=function(e,n){var i=t.props.items[t.props.items.length-1]===e;return a.createElement("li",{key:n},t.renderBreadcrumb(e,i))},t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.collapseFrom,r=e.items,s=e.minVisibleItems,c=e.overflowListProps,l=void 0===c?{}:c;return a.createElement(m.a,Object(i.a)({collapseFrom:n,minVisibleItems:s,tagName:"ul"},l,{className:o()(u.Classes.BREADCRUMBS,l.className,t),items:r,overflowRenderer:this.renderOverflow,visibleItemRenderer:this.renderBreadcrumbWrapper}))},t.prototype.renderBreadcrumb=function(e,t){return t&&null!=this.props.currentBreadcrumbRenderer?this.props.currentBreadcrumbRenderer(e):null!=this.props.breadcrumbRenderer?this.props.breadcrumbRenderer(e):a.createElement(v.a,Object(i.a)({current:t},e))},t.defaultProps={collapseFrom:c.a.START},t=Object(i.b)([s.polyfill],t)}(d.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(72),u=n(27),h=n(40),d=n(70),f=n(38),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,r=t.children,s=t.icon,l=t.intent,u=t.title,h=Object(i.d)(t,["className","children","icon","intent","title"]),p=this.getIconName(s,l),m=o()(c.Classes.CALLOUT,c.Classes.intentClass(l),((e={})[c.Classes.CALLOUT_ICON]=null!=p,e),n);return a.createElement("div",Object(i.a)({className:m},h),p&&a.createElement(f.a,{icon:p,iconSize:f.a.SIZE_LARGE}),u&&a.createElement(d.a,null,u),r)},t.prototype.getIconName=function(e,t){if(null!==e){if(void 0!==e)return e;switch(t){case l.a.DANGER:return"error";case l.a.PRIMARY:return"info-sign";case l.a.WARNING:return"warning-sign";case l.a.SUCCESS:return"tick";default:return}}},t.displayName=u.a+".Callout",t=Object(i.b)([s.polyfill],t)}(h.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(102),u=n(40),h=n(27),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,r=t.elevation,s=t.interactive,l=Object(i.d)(t,["className","elevation","interactive"]),u=o()(c.Classes.CARD,((e={})[c.Classes.INTERACTIVE]=s,e),c.Classes.elevationClass(r),n);return a.createElement("div",Object(i.a)({className:u},l))},t.displayName=h.a+".Card",t.defaultProps={elevation:l.a.ZERO,interactive:!1},t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return g}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(35),h=n(27),d=n(78),f=n(70),p=n(38),m=n(88),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){return a.createElement(m.a,Object(i.a)({},this.props,{className:c.Classes.OVERLAY_SCROLL_CONTAINER,hasBackdrop:!0}),a.createElement("div",{className:c.Classes.DIALOG_CONTAINER},a.createElement("div",{className:o()(c.Classes.DIALOG,this.props.className),style:this.props.style},this.maybeRenderHeader(),this.props.children)))},t.prototype.validateProps=function(e){null==e.title&&(null!=e.icon&&console.warn(u.e),null!=e.isCloseButtonShown&&console.warn(u.d))},t.prototype.maybeRenderCloseButton=function(){return!1!==this.props.isCloseButtonShown?a.createElement(d.b,{"aria-label":"Close",className:c.Classes.DIALOG_CLOSE_BUTTON,icon:a.createElement(p.a,{icon:"small-cross",iconSize:p.a.SIZE_LARGE}),minimal:!0,onClick:this.props.onClose}):void 0},t.prototype.maybeRenderHeader=function(){var e=this.props,t=e.icon,n=e.title;if(null!=n)return a.createElement("div",{className:c.Classes.DIALOG_HEADER},a.createElement(p.a,{icon:t,iconSize:p.a.SIZE_LARGE}),a.createElement(f.a,null,n),this.maybeRenderCloseButton())},t.defaultProps={canOutsideClickClose:!0,isOpen:!1},t.displayName=h.a+".Dialog",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return v}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(35),h=n(47),d=n(27),f=n(78),p=n(70),m=n(38),g=n(88),v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t,n=this.props,r=n.size,s=n.style,l=n.position,u=n.vertical,d=l?Object(h.b)(l):null,f=o()(c.Classes.DRAWER,((e={})[c.Classes.VERTICAL]=!d&&u,e[d?c.Classes.positionClass(d):""]=!0,e),this.props.className),p=null==r?s:Object(i.a)(Object(i.a)({},s),((t={})[(d?Object(h.c)(d):u)?"height":"width"]=r,t));return a.createElement(g.a,Object(i.a)({},this.props,{className:c.Classes.OVERLAY_CONTAINER}),a.createElement("div",{className:f,style:p},this.maybeRenderHeader(),this.props.children))},t.prototype.validateProps=function(e){null==e.title&&(null!=e.icon&&console.warn(u.e),null!=e.isCloseButtonShown&&console.warn(u.d)),null!=e.position&&(e.vertical&&console.warn(u.g),e.position!==Object(h.b)(e.position)&&console.warn(u.f))},t.prototype.maybeRenderCloseButton=function(){return!1!==this.props.isCloseButtonShown?a.createElement(f.b,{"aria-label":"Close",className:c.Classes.DIALOG_CLOSE_BUTTON,icon:a.createElement(m.a,{icon:"small-cross",iconSize:m.a.SIZE_LARGE}),minimal:!0,onClick:this.props.onClose}):null},t.prototype.maybeRenderHeader=function(){var e=this.props,t=e.icon,n=e.title;return null==n?null:a.createElement("div",{className:c.Classes.DRAWER_HEADER},a.createElement(m.a,{icon:t,iconSize:m.a.SIZE_LARGE}),a.createElement(p.a,null,n),this.maybeRenderCloseButton())},t.displayName=d.a+".Drawer",t.defaultProps={canOutsideClickClose:!0,isOpen:!1,position:null,style:{},vertical:!1},t.SIZE_SMALL="360px",t.SIZE_STANDARD="50%",t.SIZE_LARGE="90%",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.children,n=e.contentClassName,i=e.helperText,r=e.label,s=e.labelFor,l=e.labelInfo,u=e.style;return a.createElement("div",{className:this.getClassName(),style:u},r&&a.createElement("label",{className:c.Classes.LABEL,htmlFor:s},r," ",a.createElement("span",{className:c.Classes.TEXT_MUTED},l)),a.createElement("div",{className:o()(c.Classes.FORM_CONTENT,n)},t,i&&a.createElement("div",{className:c.Classes.FORM_HELPER_TEXT},i)))},t.prototype.getClassName=function(){var e,t=this.props,n=t.className,i=t.disabled,r=t.inline,a=t.intent;return o()(c.Classes.FORM_GROUP,c.Classes.intentClass(a),((e={})[c.Classes.DISABLED]=i,e[c.Classes.INLINE]=r,e),n)},t.displayName=u.a+".FormGroup",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(2),o=n(24),a=n(9),s=n(40),c=n(35),l=n(27),u=n(138),h=n(154),d=0;function f(){return p.displayName+"-"+d++}var p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.autoGroupName=f(),t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props.label;return r.createElement("div",{className:this.props.className},null==e?null:r.createElement("label",{className:a.Classes.LABEL},e),Array.isArray(this.props.options)?this.renderOptions():this.renderChildren())},t.prototype.validateProps=function(){null!=this.props.children&&null!=this.props.options&&console.warn(c.E)},t.prototype.renderChildren=function(){var e=this;return r.Children.map(this.props.children,(function(t){return Object(u.c)(t,h.b)?r.cloneElement(t,e.getRadioProps(t.props)):t}))},t.prototype.renderOptions=function(){var e=this;return this.props.options.map((function(t){return r.createElement(h.b,Object(i.a)({},e.getRadioProps(t),{key:t.value,labelElement:t.label||t.value}))}))},t.prototype.getRadioProps=function(e){var t=this.props.name,n=e.className,i=e.disabled,r=e.value;return{checked:r===this.props.selectedValue,className:n,disabled:i||this.props.disabled,inline:this.props.inline,name:null==t?this.autoGroupName:t,onChange:this.props.onChange,value:r}},t.displayName=l.a+".RadioGroup",t=Object(i.b)([o.polyfill],t)}(s.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(40),l=n(34),u=n(38),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.className,r=t.disabled,s=t.elementRef,c=t.fill,h=t.iconProps,d=t.large,f=t.minimal,p=t.options,m=void 0===p?[]:p,g=Object(i.d)(t,["className","disabled","elementRef","fill","iconProps","large","minimal","options"]),v=o()(l.HTML_SELECT,((e={})[l.DISABLED]=r,e[l.FILL]=c,e[l.LARGE]=d,e[l.MINIMAL]=f,e),n),_=m.map((function(e){var t="object"===typeof e?e:{value:e};return a.createElement("option",Object(i.a)({},t,{key:t.value,children:t.label||t.value}))}));return a.createElement("div",{className:v},a.createElement("select",Object(i.a)({disabled:r,ref:s},g,{multiple:!1}),_,g.children),a.createElement(u.a,Object(i.a)({icon:"double-caret-vertical"},h)))},t=Object(i.b)([s.polyfill],t)}(c.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.bordered,r=t.className,s=t.condensed,l=t.elementRef,u=t.interactive,h=t.small,d=t.striped,f=Object(i.d)(t,["bordered","className","condensed","elementRef","interactive","small","striped"]),p=o()(c.Classes.HTML_TABLE,((e={})[c.Classes.HTML_TABLE_BORDERED]=n,e[c.Classes.HTML_TABLE_CONDENSED]=s,e[c.Classes.HTML_TABLE_STRIPED]=d,e[c.Classes.INTERACTIVE]=u,e[c.Classes.SMALL]=h,e),r);return a.createElement("table",Object(i.a)({},f,{ref:l,className:p}))},t=Object(i.b)([s.polyfill],t)}(n(40).a)},function(e,t,n){"use strict";var i=n(299);n.o(i,"AbstractComponent2")&&n.d(t,"AbstractComponent2",(function(){return i.AbstractComponent2})),n.o(i,"AbstractPureComponent2")&&n.d(t,"AbstractPureComponent2",(function(){return i.AbstractPureComponent2})),n.o(i,"Alignment")&&n.d(t,"Alignment",(function(){return i.Alignment})),n.o(i,"Classes")&&n.d(t,"Classes",(function(){return i.Classes})),n.o(i,"Colors")&&n.d(t,"Colors",(function(){return i.Colors})),n.o(i,"DISPLAYNAME_PREFIX")&&n.d(t,"DISPLAYNAME_PREFIX",(function(){return i.DISPLAYNAME_PREFIX})),n.o(i,"Hotkeys")&&n.d(t,"Hotkeys",(function(){return i.Hotkeys})),n.o(i,"Icon")&&n.d(t,"Icon",(function(){return i.Icon})),n.o(i,"Intent")&&n.d(t,"Intent",(function(){return i.Intent})),n.o(i,"Keys")&&n.d(t,"Keys",(function(){return i.Keys})),n.o(i,"Menu")&&n.d(t,"Menu",(function(){return i.Menu})),n.o(i,"MenuDivider")&&n.d(t,"MenuDivider",(function(){return i.MenuDivider})),n.o(i,"MenuItem")&&n.d(t,"MenuItem",(function(){return i.MenuItem})),n.o(i,"Navbar")&&n.d(t,"Navbar",(function(){return i.Navbar})),n.o(i,"NavbarDivider")&&n.d(t,"NavbarDivider",(function(){return i.NavbarDivider})),n.o(i,"NavbarGroup")&&n.d(t,"NavbarGroup",(function(){return i.NavbarGroup})),n.o(i,"NonIdealState")&&n.d(t,"NonIdealState",(function(){return i.NonIdealState})),n.o(i,"Popover")&&n.d(t,"Popover",(function(){return i.Popover})),n.o(i,"PopoverInteractionKind")&&n.d(t,"PopoverInteractionKind",(function(){return i.PopoverInteractionKind})),n.o(i,"PopoverPosition")&&n.d(t,"PopoverPosition",(function(){return i.PopoverPosition})),n.o(i,"Position")&&n.d(t,"Position",(function(){return i.Position})),n.o(i,"ProgressBar")&&n.d(t,"ProgressBar",(function(){return i.ProgressBar})),n.o(i,"RangeSlider")&&n.d(t,"RangeSlider",(function(){return i.RangeSlider})),n.o(i,"Slider")&&n.d(t,"Slider",(function(){return i.Slider})),n.o(i,"Spinner")&&n.d(t,"Spinner",(function(){return i.Spinner})),n.o(i,"Tab")&&n.d(t,"Tab",(function(){return i.Tab})),n.o(i,"Tabs")&&n.d(t,"Tabs",(function(){return i.Tabs})),n.o(i,"Tag")&&n.d(t,"Tag",(function(){return i.Tag})),n.o(i,"Toaster")&&n.d(t,"Toaster",(function(){return i.Toaster})),n.o(i,"Tooltip")&&n.d(t,"Tooltip",(function(){return i.Tooltip})),n.o(i,"Tree")&&n.d(t,"Tree",(function(){return i.Tree})),n.o(i,"Utils")&&n.d(t,"Utils",(function(){return i.Utils})),n.o(i,"getRef")&&n.d(t,"getRef",(function(){return i.getRef})),n.o(i,"isRefObject")&&n.d(t,"isRefObject",(function(){return i.isRefObject}));var r=n(197);n.d(t,"Hotkeys",(function(){return r.a}));var o=n(98);n.d(t,"Hotkey",(function(){return o.a}));var a=n(394);n.d(t,"HotkeysTarget",(function(){return a.a}))},function(e,t){},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(199),d=n(200),f=n(201),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.children,r=t.className,s=t.fixedToTop,l=Object(i.d)(t,["children","className","fixedToTop"]),u=o()(c.Classes.NAVBAR,((e={})[c.Classes.FIXED_TOP]=s,e),r);return a.createElement("div",Object(i.a)({className:u},l),n)},t.displayName=u.a+".Navbar",t.Divider=h.a,t.Group=d.a,t.Heading=f.a,t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(40),l=n(34),u=n(27),h=n(138),d=n(70),f=n(38),p=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.action,n=e.children,i=e.className,r=e.description,s=e.title;return a.createElement("div",{className:o()(l.NON_IDEAL_STATE,i)},this.maybeRenderVisual(),s&&a.createElement(d.a,null,s),r&&Object(h.a)(r,"div"),t,n)},t.prototype.maybeRenderVisual=function(){var e=this.props.icon;return null==e?null:a.createElement("div",{className:l.NON_IDEAL_STATE_VISUAL},a.createElement(f.a,{icon:e,iconSize:3*f.a.SIZE_LARGE}))},t.displayName=u.a+".NonIdealState",t=Object(i.b)([s.polyfill],t)}(c.a)},function(e,t){},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var i=n(11),r=n(47),o=Object(i.a)(Object(i.a)({},r.a),{AUTO:"auto",AUTO_END:"auto-end",AUTO_START:"auto-start"})},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(103),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.animate,i=void 0===n||n,r=t.className,s=t.intent,l=t.stripes,u=void 0===l||l,d=t.value,f=o()(c.Classes.PROGRESS_BAR,c.Classes.intentClass(s),((e={})[c.Classes.PROGRESS_NO_ANIMATION]=!i,e[c.Classes.PROGRESS_NO_STRIPES]=!u,e),r),p=null==d?null:100*Object(h.c)(d,0,1)+"%";return a.createElement("div",{className:f},a.createElement("div",{className:c.Classes.PROGRESS_METER,style:{width:p}}))},t.displayName=u.a+".ProgressBar",t=Object(i.b)([s.polyfill],t)}(l.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var i,r=n(11),o=n(2),a=n(24),s=n(72),c=n(40),l=n(35),u=n(27),h=n(80);!function(e){e[e.START=0]="START",e[e.END=1]="END"}(i||(i={}));var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.value,n=Object(r.d)(e,["value"]);return o.createElement(h.a,Object(r.a)({},n),o.createElement(h.a.Handle,{value:t[i.START],type:"start",intentAfter:n.intent}),o.createElement(h.a.Handle,{value:t[i.END],type:"end"}))},t.prototype.validateProps=function(e){var t=e.value;if(null==t||null==t[i.START]||null==t[i.END])throw new Error(l.F)},t.defaultProps=Object(r.a)(Object(r.a)({},h.a.defaultSliderProps),{intent:s.a.PRIMARY,value:[0,10]}),t.displayName=u.a+".RangeSlider",t=Object(r.b)([a.polyfill],t)}(c.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var i=n(11),r=n(2),o=n(24),a=n(72),s=n(40),c=n(27),l=n(80),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.initialValue,n=e.intent,o=e.value,a=e.onChange,s=e.onRelease,c=Object(i.d)(e,["initialValue","intent","value","onChange","onRelease"]);return r.createElement(l.a,Object(i.a)({},c),r.createElement(l.a.Handle,{value:o,intentAfter:o<t?n:void 0,intentBefore:o>=t?n:void 0,onChange:a,onRelease:s}),r.createElement(l.a.Handle,{value:t,interactionKind:"none"}))},t.defaultProps=Object(i.a)(Object(i.a)({},l.a.defaultSliderProps),{initialValue:0,intent:a.a.PRIMARY,value:0}),t.displayName=c.a+".Slider",t=Object(i.b)([o.polyfill],t)}(s.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(27),u=n(40),h=n(138),d=n(38),f=n(128),p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.onRemoveClick=function(e){c.Utils.safeInvoke(t.props.onRemove,e,t.props)},t}return Object(i.c)(t,e),t.prototype.render=function(){var e,t=this.props,n=t.active,r=t.children,s=t.className,l=t.fill,u=t.icon,p=t.intent,m=t.interactive,g=t.large,v=t.minimal,_=t.multiline,b=t.onRemove,y=t.rightIcon,w=t.round,O=t.tabIndex,C=void 0===O?0:O,E=Object(i.d)(t,["active","children","className","fill","icon","intent","interactive","large","minimal","multiline","onRemove","rightIcon","round","tabIndex"]),A=c.Utils.isFunction(b),x=o()(c.Classes.TAG,c.Classes.intentClass(p),((e={})[c.Classes.ACTIVE]=n,e[c.Classes.FILL]=l,e[c.Classes.INTERACTIVE]=m,e[c.Classes.LARGE]=g,e[c.Classes.MINIMAL]=v,e[c.Classes.ROUND]=w,e),s),T=g||x.indexOf(c.Classes.LARGE)>=0,S=A?a.createElement("button",{type:"button",className:c.Classes.TAG_REMOVE,onClick:this.onRemoveClick},a.createElement(d.a,{icon:"small-cross",iconSize:T?d.a.SIZE_LARGE:d.a.SIZE_STANDARD})):null;return a.createElement("span",Object(i.a)({},E,{className:x,tabIndex:m?C:void 0}),a.createElement(d.a,{icon:u}),!Object(h.e)(r)&&a.createElement(f.a,{className:c.Classes.FILL,ellipsize:!_,tagName:"span"},r),a.createElement(d.a,{icon:y}),S)},t.displayName=l.a+".Tag",t=Object(i.b)([s.polyfill],t)}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(54),c=n(24),l=n(9),u=n(47),h=n(40),d=n(35),f=n(186),p=n(27),m=n(103),g=n(49),v=n(88),_=n(202),b=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={toasts:[]},t.toastId=0,t.getDismissHandler=function(e){return function(n){t.dismiss(e.key,n)}},t.handleClose=function(e){e.which===f.ESCAPE&&t.clear()},t}var n;return Object(i.c)(t,e),n=t,t.create=function(e,t){void 0===t&&(t=document.body),null==e||null==e.usePortal||Object(m.e)("production")||console.warn(d.L);var r=document.createElement("div");t.appendChild(r);var o=s.render(a.createElement(n,Object(i.a)({},e,{usePortal:!1})),r);if(null==o)throw new Error(d.J);return o},t.prototype.show=function(e,t){this.props.maxToasts&&this.dismissIfAtLimit();var n=this.createToastOptions(e,t);return void 0===t||this.isNewToastKey(t)?this.setState((function(e){return{toasts:Object(i.e)([n],e.toasts)}})):this.setState((function(e){return{toasts:e.toasts.map((function(e){return e.key===t?n:e}))}})),n.key},t.prototype.dismiss=function(e,t){void 0===t&&(t=!1),this.setState((function(n){return{toasts:n.toasts.filter((function(n){var i=n.key===e;return i&&Object(g.b)(n.onDismiss,t),!i}))}}))},t.prototype.clear=function(){this.state.toasts.map((function(e){return Object(g.b)(e.onDismiss,!1)})),this.setState({toasts:[]})},t.prototype.getToasts=function(){return this.state.toasts},t.prototype.render=function(){var e=o()(l.Classes.TOAST_CONTAINER,this.getPositionClasses(),this.props.className);return a.createElement(v.a,{autoFocus:this.props.autoFocus,canEscapeKeyClose:this.props.canEscapeKeyClear,canOutsideClickClose:!1,className:e,enforceFocus:!1,hasBackdrop:!1,isOpen:this.state.toasts.length>0||null!=this.props.children,onClose:this.handleClose,transitionDuration:350,transitionName:l.Classes.TOAST,usePortal:this.props.usePortal},this.state.toasts.map(this.renderToast,this),this.props.children)},t.prototype.validateProps=function(e){if(e.maxToasts<1)throw new Error(d.K)},t.prototype.isNewToastKey=function(e){return this.state.toasts.every((function(t){return t.key!==e}))},t.prototype.dismissIfAtLimit=function(){this.state.toasts.length===this.props.maxToasts&&this.dismiss(this.state.toasts[this.state.toasts.length-1].key)},t.prototype.renderToast=function(e){return a.createElement(_.a,Object(i.a)({},e,{onDismiss:this.getDismissHandler(e)}))},t.prototype.createToastOptions=function(e,t){return void 0===t&&(t="toast-"+this.toastId++),Object(i.a)(Object(i.a)({},e),{key:t})},t.prototype.getPositionClasses=function(){return this.props.position.split("-").map((function(e){return l.Classes.TOAST_CONTAINER+"-"+e.toLowerCase()}))},t.displayName=p.a+".Toaster",t.defaultProps={autoFocus:!1,canEscapeKeyClear:!0,position:u.a.TOP,usePortal:!0},t=n=Object(i.b)([c.polyfill],t)}(h.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(34),c=n(27),l=n(49),u=n(203),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.nodeRefs={},t.handleNodeCollapse=function(e,n){t.handlerHelper(t.props.onNodeCollapse,e,n)},t.handleNodeClick=function(e,n){t.handlerHelper(t.props.onNodeClick,e,n)},t.handleContentRef=function(e,n){null!=n?t.nodeRefs[e.props.id]=n:delete t.nodeRefs[e.props.id]},t.handleNodeContextMenu=function(e,n){t.handlerHelper(t.props.onNodeContextMenu,e,n)},t.handleNodeDoubleClick=function(e,n){t.handlerHelper(t.props.onNodeDoubleClick,e,n)},t.handleNodeExpand=function(e,n){t.handlerHelper(t.props.onNodeExpand,e,n)},t.handleNodeMouseEnter=function(e,n){t.handlerHelper(t.props.onNodeMouseEnter,e,n)},t.handleNodeMouseLeave=function(e,n){t.handlerHelper(t.props.onNodeMouseLeave,e,n)},t}return Object(i.c)(t,e),t.ofType=function(){return t},t.nodeFromPath=function(e,n){return 1===e.length?n[e[0]]:t.nodeFromPath(e.slice(1),n[e[0]].childNodes)},t.prototype.render=function(){return a.createElement("div",{className:o()(s.TREE,this.props.className)},this.renderNodes(this.props.contents,[],s.TREE_ROOT))},t.prototype.getNodeContentElement=function(e){return this.nodeRefs[e]},t.prototype.renderNodes=function(e,t,n){var r=this;if(null==e)return null;var c=e.map((function(e,n){var o=t.concat(n),s=u.a.ofType();return a.createElement(s,Object(i.a)({},e,{key:e.id,contentRef:r.handleContentRef,depth:o.length-1,onClick:r.handleNodeClick,onContextMenu:r.handleNodeContextMenu,onCollapse:r.handleNodeCollapse,onDoubleClick:r.handleNodeDoubleClick,onExpand:r.handleNodeExpand,onMouseEnter:r.handleNodeMouseEnter,onMouseLeave:r.handleNodeMouseLeave,path:o}),r.renderNodes(e.childNodes,o))}));return a.createElement("ul",{className:o()(s.TREE_NODE_LIST,n)},c)},t.prototype.handlerHelper=function(e,n,i){Object(l.a)(e)&&e(t.nodeFromPath(n.props.path,this.props.contents),n.props.path,i)},t.displayName=c.a+".Tree",t}(a.Component)},,function(e,t,n){var i,r,o;r=[e,t,n(165)],void 0===(o="function"===typeof(i=function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.default=function e(t,o){if(t===o||!(0,n.isObject)(t)||!(0,n.isObject)(o))return{};var a=(0,n.properObject)(t),s=(0,n.properObject)(o);return Object.keys(s).reduce((function(t,o){if(a.hasOwnProperty(o)){var c=e(a[o],s[o]);return(0,n.isObject)(c)&&(0,n.isEmpty)(c)?t:r({},t,i({},o,c))}return r({},t,i({},o,s[o]))}),{})},e.exports=t.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){var i,r,o;r=[e,t,n(165)],void 0===(o="function"===typeof(i=function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.default=function e(t,o){if(t===o||!(0,n.isObject)(t)||!(0,n.isObject)(o))return{};var a=(0,n.properObject)(t),s=(0,n.properObject)(o);return Object.keys(a).reduce((function(t,o){if(s.hasOwnProperty(o)){var c=e(a[o],s[o]);return(0,n.isObject)(c)&&(0,n.isEmpty)(c)?t:r({},t,i({},o,c))}return r({},t,i({},o,void 0))}),{})},e.exports=t.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){var i,r,o;r=[e,t,n(165)],void 0===(o="function"===typeof(i=function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.default=function e(t,r){if(t===r)return{};if(!(0,n.isObject)(t)||!(0,n.isObject)(r))return r;var o=(0,n.properObject)(t),a=(0,n.properObject)(r);return(0,n.isDate)(o)||(0,n.isDate)(a)?o.valueOf()==a.valueOf()?{}:a:Object.keys(a).reduce((function(t,r){if(o.hasOwnProperty(r)){var s=e(o[r],a[r]);return(0,n.isObject)(s)&&(0,n.isEmpty)(s)&&!(0,n.isDate)(s)?t:i({},t,function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r,s))}return t}),{})},e.exports=t.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){"use strict";e.exports=n(501)},function(e,t,n){"use strict";var i={}.hasOwnProperty;function r(e){return e&&"object"===typeof e||(e={}),a(e.line)+":"+a(e.column)}function o(e){return e&&"object"===typeof e||(e={}),r(e.start)+"-"+r(e.end)}function a(e){return e&&"number"===typeof e?e:1}e.exports=function(e){if(!e||"object"!==typeof e)return"";if(i.call(e,"position")||i.call(e,"type"))return o(e.position);if(i.call(e,"start")||i.call(e,"end"))return o(e);if(i.call(e,"line")||i.call(e,"column"))return r(e);return""}},function(e,t,n){"use strict";var i={}.hasOwnProperty;e.exports=i},function(e,t,n){"use strict";e.exports=function(e){for(var t=-1,n=0;++t<e.length;)n+="string"===typeof e[t]?e[t].length:1;return n}},function(e,t,n){"use strict";var i=n(143),r=n(95),o=n(108);function a(e,t){for(var n,i,o,a,s,c,l=e[t][1],u=e[t][2],h=t-1,d=[],f=l._tokenizer||u.parser[l.contentType](l.start),p=f.events,m=[],g={};l;){for(;e[++h][1]!==l;);d.push(h),l._tokenizer||(n=u.sliceStream(l),l.next||n.push(null),i&&f.defineSkip(l.start),l.isInFirstContentOfListItem&&(f._gfmTasklistFirstContentOfListItem=!0),f.write(n),l.isInFirstContentOfListItem&&(f._gfmTasklistFirstContentOfListItem=void 0)),i=l,l=l.next}for(l=i,o=p.length;o--;)"enter"===p[o][0]?a=!0:a&&p[o][1].type===p[o-1][1].type&&p[o][1].start.line!==p[o][1].end.line&&(v(p.slice(o+1,s)),l._tokenizer=l.next=void 0,l=l.previous,s=o+1);for(f.events=l._tokenizer=l.next=void 0,v(p.slice(0,s)),o=-1,c=0;++o<m.length;)g[c+m[o][0]]=c+m[o][1],c+=m[o][1]-m[o][0]-1;return g;function v(t){var n=d.pop();m.unshift([n,n+t.length-1]),r(e,n,2,t)}}e.exports=function(e){for(var t,n,s,c,l,u,h,d={},f=-1;++f<e.length;){for(;f in d;)f=d[f];if(t=e[f],f&&"chunkFlow"===t[1].type&&"listItemPrefix"===e[f-1][1].type&&((s=0)<(u=t[1]._tokenizer.events).length&&"lineEndingBlank"===u[s][1].type&&(s+=2),s<u.length&&"content"===u[s][1].type))for(;++s<u.length&&"content"!==u[s][1].type;)"chunkText"===u[s][1].type&&(u[s][1].isInFirstContentOfListItem=!0,s++);if("enter"===t[0])t[1].contentType&&(i(d,a(e,f)),f=d[f],h=!0);else if(t[1]._container||t[1]._movePreviousLineEndings){for(s=f,n=void 0;s--&&("lineEnding"===(c=e[s])[1].type||"lineEndingBlank"===c[1].type);)"enter"===c[0]&&(n&&(e[n][1].type="lineEndingBlank"),c[1].type="lineEnding",n=s);n&&(t[1].end=o(e[n][1].start),(l=e.slice(n,f)).unshift(t),r(e,n,f-n+1,l))}}return!h}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(143),r=n(108),o=c("text"),a=c("string"),s={resolveAll:l()};function c(e){return{tokenize:function(t){var n=this,i=this.parser.constructs[e],r=t.attempt(i,o,a);return o;function o(e){return c(e)?r(e):a(e)}function a(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return c(e)?(t.exit("data"),r(e)):(t.consume(e),s)}function c(e){var t=i[e],r=-1;if(null===e)return!0;if(t)for(;++r<t.length;)if(!t[r].previous||t[r].previous.call(n,n.previous))return!0}},resolveAll:l("text"===e?u:void 0)}}function l(e){return function(t,n){var i,r=-1;for(;++r<=t.length;)void 0===i?t[r]&&"data"===t[r][1].type&&(i=r,r++):t[r]&&"data"===t[r][1].type||(r!==i+2&&(t[i][1].end=t[r-1][1].end,t.splice(i+2,r-i-2),r=i+2),i=void 0);return e?e(t,n):t}}function u(e,t){for(var n,o,a,s,c,l,u,h,d=-1;++d<=e.length;)if((d===e.length||"lineEnding"===e[d][1].type)&&"data"===e[d-1][1].type){for(o=e[d-1][1],s=(n=t.sliceStream(o)).length,c=-1,l=0,u=void 0;s--;)if("string"===typeof(a=n[s])){for(c=a.length;32===a.charCodeAt(c-1);)l++,c--;if(c)break;c=-1}else if(-2===a)u=!0,l++;else if(-1!==a){s++;break}l&&(h={type:d===e.length||u||l<2?"lineSuffix":"hardBreakTrailing",start:{line:o.end.line,column:o.end.column-l,offset:o.end.offset-l,_index:o.start._index+s,_bufferIndex:s?c:o.start._bufferIndex+c},end:r(o.end)},o.end=r(h.start),o.start.offset===o.end.offset?i(o,h):(e.splice(d,0,["enter",h,t],["exit",h,t]),d+=2)),d++}return e}t.resolver=s,t.string=a,t.text=o},function(e,t,n){"use strict";var i=n(316),r=n(95),o=n(223);function a(e,t){var n,r,a,c;for(n in t)for(c in r=i.call(e,n)?e[n]:e[n]={},a=t[n])r[c]=s(o(a[c]),i.call(r,c)?r[c]:[])}function s(e,t){for(var n=-1,i=[];++n<e.length;)("after"===e[n].add?t:i).push(e[n]);return r(t,0,0,i),t}e.exports=function(e){for(var t={},n=-1;++n<e.length;)a(t,e[n]);return t}},function(e,t,n){"use strict";var i=n(96),r=n(225),o=n(226);e.exports=function(e){return null===e||i(e)||o(e)?1:r(e)?2:void 0}},function(e,t,n){"use strict";var i;e.exports=function(e){var t,n="&"+e+";";if((i=i||document.createElement("i")).innerHTML=n,59===(t=i.textContent).charCodeAt(t.length-1)&&"semi"!==e)return!1;return t!==n&&t}},function(e,t,n){"use strict";var i=n(105)(/\d/);e.exports=i},function(e,t,n){"use strict";var i=n(227),r=n(96),o=n(63);e.exports=function(e,t,n,a,s,c,l,u,h){var d=h||1/0,f=0;return function(t){if(60===t)return e.enter(a),e.enter(s),e.enter(c),e.consume(t),e.exit(c),p;if(i(t)||41===t)return n(t);return e.enter(a),e.enter(l),e.enter(u),e.enter("chunkString",{contentType:"string"}),v(t)};function p(n){return 62===n?(e.enter(c),e.consume(n),e.exit(c),e.exit(s),e.exit(a),t):(e.enter(u),e.enter("chunkString",{contentType:"string"}),m(n))}function m(t){return 62===t?(e.exit("chunkString"),e.exit(u),p(t)):null===t||60===t||o(t)?n(t):(e.consume(t),92===t?g:m)}function g(t){return 60===t||62===t||92===t?(e.consume(t),m):m(t)}function v(o){return 40===o?++f>d?n(o):(e.consume(o),v):41===o?f--?(e.consume(o),v):(e.exit("chunkString"),e.exit(u),e.exit(l),e.exit(a),t(o)):null===o||r(o)?f?n(o):(e.exit("chunkString"),e.exit(u),e.exit(l),e.exit(a),t(o)):i(o)?n(o):(e.consume(o),92===o?_:v)}function _(t){return 40===t||41===t||92===t?(e.consume(t),v):v(t)}}},function(e,t,n){"use strict";var i=n(63),r=n(94);e.exports=function(e,t,n,o,a,s){var c,l=this,u=0;return function(t){return e.enter(o),e.enter(a),e.consume(t),e.exit(a),e.enter(s),h};function h(r){return null===r||91===r||93===r&&!c||94===r&&!u&&"_hiddenFootnoteSupport"in l.parser.constructs||u>999?n(r):93===r?(e.exit(s),e.enter(a),e.consume(r),e.exit(a),e.exit(o),t):i(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),d(r))}function d(t){return null===t||91===t||93===t||i(t)||u++>999?(e.exit("chunkString"),h(t)):(e.consume(t),c=c||!r(t),92===t?f:d)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,d):d(t)}}},function(e,t,n){"use strict";var i=n(63),r=n(94),o=n(65);e.exports=function(e,t){var n;return function a(s){if(i(s))return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),n=!0,a;if(r(s))return o(e,a,n?"linePrefix":"lineSuffix")(s);return t(s)}}},function(e,t,n){"use strict";var i=n(63),r=n(65);e.exports=function(e,t,n,o,a,s){var c;return function(t){return e.enter(o),e.enter(a),e.consume(t),e.exit(a),c=40===t?41:t,l};function l(n){return n===c?(e.enter(a),e.consume(n),e.exit(a),e.exit(o),t):(e.enter(s),u(n))}function u(t){return t===c?(e.exit(s),l(c)):null===t?n(t):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(t))}function h(t){return t===c||null===t||i(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?d:h)}function d(t){return t===c||92===t?(e.consume(t),h):h(t)}}},function(e,t,n){"use strict";var i=n(63),r=n(94),o=n(65),a={name:"thematicBreak",tokenize:function(e,t,n){var a,s=0;return function(t){return e.enter("thematicBreak"),a=t,c(t)};function c(u){return u===a?(e.enter("thematicBreakSequence"),l(u)):r(u)?o(e,c,"whitespace")(u):s<3||null!==u&&!i(u)?n(u):(e.exit("thematicBreak"),t(u))}function l(t){return t===a?(e.consume(t),s++,l):(e.exit("thematicBreakSequence"),c(t))}}};e.exports=a},function(e,t,n){"use strict";e.exports=o;var i=n(330),r=n(559);function o(e,t,n,o){var a,s;"function"===typeof t&&"function"!==typeof n&&(o=n,n=t,t=null),s=i(t),a=o?-1:1,function e(i,c,l){var u,h="object"===typeof i&&null!==i?i:{};"string"===typeof h.type&&(u="string"===typeof h.tagName?h.tagName:"string"===typeof h.name?h.name:void 0,d.displayName="node ("+r(h.type+(u?"<"+u+">":""))+")");return d;function d(){var r,u,h=l.concat(i),d=[];if((!t||s(i,c,l[l.length-1]||null))&&!1===(d=function(e){if(null!==e&&"object"===typeof e&&"length"in e)return e;if("number"===typeof e)return[!0,e];return[e]}(n(i,l)))[0])return d;if(i.children&&"skip"!==d[0])for(u=(o?i.children.length:-1)+a;u>-1&&u<i.children.length;){if(!1===(r=e(i.children[u],u,h)())[0])return r;u="number"===typeof r[1]?r[1]:u+a}return d}}(e,null,[])()}o.CONTINUE=!0,o.SKIP="skip",o.EXIT=!1},function(e,t,n){"use strict";function i(e){if(null==e)return r;if("string"===typeof e)return function(e){return function(t){return Boolean(t&&t.type===e)}}(e);if("object"===typeof e)return"length"in e?function(e){var t=[],n=-1;for(;++n<e.length;)t[n]=i(e[n]);return function(){var e=-1;for(;++e<t.length;)if(t[e].apply(this,arguments))return!0;return!1}}(e):function(e){return function(t){var n;for(n in e)if(t[n]!==e[n])return!1;return!0}}(e);if("function"===typeof e)return e;throw new Error("Expected function, string, or object as test")}function r(){return!0}e.exports=i},function(e,t,n){"use strict";var i=a("start"),r=a("end");function o(e){return{start:i(e),end:r(e)}}function a(e){return t.displayName=e,t;function t(t){var n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:isNaN(n.offset)?null:n.offset}}}e.exports=o,o.start=i,o.end=r},function(e,t,n){"use strict";e.exports=function(e,t,n){var i,r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");i=o.call(e.handlers,r)?e.handlers[r]:e.passThrough&&e.passThrough.indexOf(r)>-1?s:e.unknownHandler;return("function"===typeof i?i:a)(e,t,n)};var i=n(75),r=n(69),o={}.hasOwnProperty;function a(e,t){return function(e){var t=e.data||{};if(o.call(t,"hName")||o.call(t,"hProperties")||o.call(t,"hChildren"))return!1;return"value"in e}(t)?e.augment(t,i("text",t.value)):e(t,"div",r(e,t))}function s(e,t){var n;return t.children?((n=Object.assign({},t)).children=r(e,t),n):t}},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"hr")}},function(e,t,n){"use strict";e.exports=function(e,t){var n,o,a={},s=t.ordered?"ol":"ul",c=-1;"number"===typeof t.start&&1!==t.start&&(a.start=t.start);n=r(e,t),o=n.length;for(;++c<o;)if(n[c].properties.className&&-1!==n[c].properties.className.indexOf("task-list-item")){a.className=["contains-task-list"];break}return e(t,s,a,i(n,!0))};var i=n(146),r=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteOrder,r=String(t.identifier);-1===n.indexOf(r)&&n.push(r);return e(t.position,"sup",{id:"fnref-"+r},[e(t,"a",{href:"#fn-"+r,className:["footnote-ref"]},[i("text",t.label||r)])])};var i=n(75)},function(e,t,n){"use strict";e.exports=function(e,t){var n,o,a,s=t.referenceType,c="]";"collapsed"===s?c+="[]":"full"===s&&(c+="["+(t.label||t.identifier)+"]");if("imageReference"===t.type)return i("text","!["+t.alt+c);n=r(e,t),(o=n[0])&&"text"===o.type?o.value="["+o.value:n.unshift(i("text","["));(a=n[n.length-1])&&"text"===a.type?a.value+=c:n.push(i("text",c));return n};var i=n(75),r=n(69)},function(e,t,n){"use strict";var i=n(266),r=n(338);e.exports=function(e){var t,n,o=e.length,a=[],s=[],c=-1;for(;++c<o;)t=e[c],a.push(t.property),s.push(t.normal),n=t.space;return new r(i.apply(null,a),i.apply(null,s),n)}},function(e,t,n){"use strict";e.exports=r;var i=r.prototype;function r(e,t,n){this.property=e,this.normal=t,n&&(this.space=n)}i.space=null,i.normal={},i.property={}},function(e,t,n){"use strict";var i=n(117);e.exports=i({space:"xlink",transform:function(e,t){return"xlink:"+t.slice(5).toLowerCase()},properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null}})},function(e,t,n){"use strict";e.exports=function(e){return e.toLowerCase()}},function(e,t,n){"use strict";var i=n(342),r=n(171);e.exports=s,s.prototype=new i,s.prototype.defined=!0;var o=["boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated"],a=o.length;function s(e,t,n,s){var l,u=-1;for(c(this,"space",s),i.call(this,e,t);++u<a;)c(this,l=o[u],(n&r[l])===r[l])}function c(e,t,n){n&&(e[t]=n)}},function(e,t,n){"use strict";e.exports=r;var i=r.prototype;function r(e,t){this.property=e,this.attribute=t}i.space=null,i.attribute=null,i.property=null,i.boolean=!1,i.booleanish=!1,i.overloadedBoolean=!1,i.number=!1,i.commaSeparated=!1,i.spaceSeparated=!1,i.commaOrSpaceSeparated=!1,i.mustUseProperty=!1,i.defined=!1},function(e,t,n){"use strict";var i=n(117);e.exports=i({space:"xml",transform:function(e,t){return"xml:"+t.slice(3).toLowerCase()},properties:{xmlLang:null,xmlBase:null,xmlSpace:null}})},function(e,t,n){"use strict";var i=n(117),r=n(345);e.exports=i({space:"xmlns",attributes:{xmlnsxlink:"xmlns:xlink"},transform:r,properties:{xmlns:null,xmlnsXLink:null}})},function(e,t,n){"use strict";var i=n(346);e.exports=function(e,t){return i(e,t.toLowerCase())}},function(e,t,n){"use strict";e.exports=function(e,t){return t in e?e[t]:t}},function(e,t,n){"use strict";var i=n(171),r=n(117),o=i.booleanish,a=i.number,s=i.spaceSeparated;e.exports=r({transform:function(e,t){return"role"===t?t:"aria-"+t.slice(4).toLowerCase()},properties:{ariaActiveDescendant:null,ariaAtomic:o,ariaAutoComplete:null,ariaBusy:o,ariaChecked:o,ariaColCount:a,ariaColIndex:a,ariaColSpan:a,ariaControls:s,ariaCurrent:null,ariaDescribedBy:s,ariaDetails:null,ariaDisabled:o,ariaDropEffect:s,ariaErrorMessage:null,ariaExpanded:o,ariaFlowTo:s,ariaGrabbed:o,ariaHasPopup:null,ariaHidden:o,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:s,ariaLevel:a,ariaLive:null,ariaModal:o,ariaMultiLine:o,ariaMultiSelectable:o,ariaOrientation:null,ariaOwns:s,ariaPlaceholder:null,ariaPosInSet:a,ariaPressed:o,ariaReadOnly:o,ariaRelevant:null,ariaRequired:o,ariaRoleDescription:s,ariaRowCount:a,ariaRowIndex:a,ariaRowSpan:a,ariaSelected:o,ariaSetSize:a,ariaSort:null,ariaValueMax:a,ariaValueMin:a,ariaValueNow:a,ariaValueText:null,role:null}})},function(e,t){e.exports=function(e,t,n){var i,r,o,a=e.children||[],s=[],c=-1,l=n.before;for(;++c<a.length;)o=a[c],c+1<a.length?((r=t.handle.handlers[a[c+1].type])&&r.peek&&(r=r.peek),i=r?r(a[c+1],e,t,{before:"",after:""}).charAt(0):""):i=n.after,s.length>0&&("\r"===l||"\n"===l)&&"html"===o.type&&(s[s.length-1]=s[s.length-1].replace(/(\r?\n|\r)$/," "),l=" "),s.push(t.handle(o,e,t,{before:l,after:i})),l=s[s.length-1].slice(-1);return s.join("")}},function(e,t,n){!function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function e(t,n,i){"string"===typeof t?(2==arguments.length&&(i=n),e.modules[t]||(e.payloads[t]=i,e.modules[t]=null)):e.original?e.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var n=function(e,t,n){if("string"===typeof t){var o=r(e,t);if(void 0!=o)return n&&n(),o}else if("[object Array]"===Object.prototype.toString.call(t)){for(var a=[],s=0,c=t.length;s<c;++s){var l=r(e,t[s]);if(void 0==l&&i.original)return;a.push(l)}return n&&n.apply(null,a)||!0}},i=function e(t,i){var r=n("",t,i);return void 0==r&&e.original?e.original.apply(this,arguments):r},r=function(e,i){i=function e(t,n){if(-1!==n.indexOf("!")){var i=n.split("!");return e(t,i[0])+"!"+e(t,i[1])}if("."==n.charAt(0))for(n=t.split("/").slice(0,-1).join("/")+"/"+n;-1!==n.indexOf(".")&&r!=n;){var r=n;n=n.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return n}(e,i);var r=t.modules[i];if(!r){if("function"===typeof(r=t.payloads[i])){var o={},a={id:i,uri:"",exports:o,packaged:!0};o=r((function(e,t){return n(i,e,t)}),o,a)||a.exports,t.modules[i]=o,delete t.payloads[i]}r=t.modules[i]=o||r}return r};!function(n){var r=e;n&&(e[n]||(e[n]={}),r=e[n]),r.define&&r.define.packaged||(t.original=r.define,r.define=t,r.define.packaged=!0),r.acequire&&r.acequire.packaged||(i.original=r.acequire,r.acequire=i,r.acequire.packaged=!0)}("ace")}(),ace.define("ace/lib/regexp",["require","exports","module"],(function(e,t,n){"use strict";var i={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r=void 0===i.exec.call(/()??/,"")[1],o=function(){var e=/^/g;return i.test.call(e,""),!e.lastIndex}();function a(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":"")}function s(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var i=n||0;i<e.length;i++)if(e[i]===t)return i;return-1}o&&r||(RegExp.prototype.exec=function(e){var t,n,c=i.exec.apply(this,arguments);if("string"==typeof e&&c){if(!r&&c.length>1&&s(c,"")>-1&&(n=RegExp(this.source,i.replace.call(a(this),"g","")),i.replace.call(e.slice(c.index),n,(function(){for(var e=1;e<arguments.length-2;e++)void 0===arguments[e]&&(c[e]=void 0)}))),this._xregexp&&this._xregexp.captureNames)for(var l=1;l<c.length;l++)(t=this._xregexp.captureNames[l-1])&&(c[t]=c[l]);!o&&this.global&&!c[0].length&&this.lastIndex>c.index&&this.lastIndex--}return c},o||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=d.call(arguments,1),r=function i(){if(this instanceof i){var r=t.apply(this,n.concat(d.call(arguments)));return Object(r)===r?r:this}return t.apply(e,n.concat(d.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,o,a,s,c,l=Function.prototype.call,u=Array.prototype,h=Object.prototype,d=u.slice,f=l.bind(h.toString),p=l.bind(h.hasOwnProperty);if((c=p(h,"__defineGetter__"))&&(r=l.bind(h.__defineGetter__),o=l.bind(h.__defineSetter__),a=l.bind(h.__lookupGetter__),s=l.bind(h.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var m=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?m.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):void 0==e?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var i=this.slice(e,e+t),r=d.call(arguments,2),o=r.length;if(e===n)o&&this.push.apply(this,r);else{var a=Math.min(t,n-e),s=e+a,c=s+o-a,l=n-s,u=n-a;if(c<s)for(var h=0;h<l;++h)this[c+h]=this[s+h];else if(c>s)for(h=l;h--;)this[c+h]=this[s+h];if(o&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+o,h=0;h<o;++h)this[e+h]=r[h]}return i};Array.isArray||(Array.isArray=function(e){return"[object Array]"==f(e)});var g,v,_=Object("a"),b="a"!=_[0]||!(0 in _);if(Array.prototype.forEach||(Array.prototype.forEach=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=arguments[1],r=-1,o=n.length>>>0;if("[object Function]"!=f(e))throw new TypeError;for(;++r<o;)r in n&&e.call(i,n[r],r,t)}),Array.prototype.map||(Array.prototype.map=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=n.length>>>0,r=Array(i),o=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var a=0;a<i;a++)a in n&&(r[a]=e.call(o,n[a],a,t));return r}),Array.prototype.filter||(Array.prototype.filter=function(e){var t,n=M(this),i=b&&"[object String]"==f(this)?this.split(""):n,r=i.length>>>0,o=[],a=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var s=0;s<r;s++)s in i&&(t=i[s],e.call(a,t,s,n)&&o.push(t));return o}),Array.prototype.every||(Array.prototype.every=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=n.length>>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o<i;o++)if(o in n&&!e.call(r,n[o],o,t))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=n.length>>>0,r=arguments[1];if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");for(var o=0;o<i;o++)if(o in n&&e.call(r,n[o],o,t))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=n.length>>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,o=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(o in n){r=n[o++];break}if(++o>=i)throw new TypeError("reduce of empty array with no initial value")}for(;o<i;o++)o in n&&(r=e.call(void 0,r,n[o],o,t));return r}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(e){var t=M(this),n=b&&"[object String]"==f(this)?this.split(""):t,i=n.length>>>0;if("[object Function]"!=f(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,o=i-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(o in n){r=n[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}do{o in this&&(r=e.call(void 0,r,n[o],o,t))}while(o--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=b&&"[object String]"==f(this)?this.split(""):M(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=I(arguments[1])),i=i>=0?i:Math.max(0,n+i);i<n;i++)if(i in t&&t[i]===e)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(e){var t=b&&"[object String]"==f(this)?this.split(""):M(this),n=t.length>>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,I(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:h)}),!Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},c){var i=e.__proto__;e.__proto__=h;var r=a(e,t),o=s(e,t);if(e.__proto__=i,r||o)return r&&(n.get=r),o&&(n.set=o),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(g=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=g();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,(n=new i).__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function y(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}if(Object.defineProperty){var w=y({}),O="undefined"==typeof document||y(document.createElement("div"));if(!w||!O)var C=Object.defineProperty}if(!Object.defineProperty||C){Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError("Property description must be an object: "+n);if(C)try{return C.call(Object,e,t,n)}catch(l){}if(p(n,"value"))if(c&&(a(e,t)||s(e,t))){var i=e.__proto__;e.__proto__=h,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!c)throw new TypeError("getters & setters can not be defined on this javascript engine");p(n,"get")&&r(e,t,n.get),p(n,"set")&&o(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(R){Object.freeze=(v=Object.freeze,function(e){return"function"==typeof e?e:v(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";p(e,t);)t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var E=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],x=A.length;for(var T in{toString:null})E=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(E)for(var i=0,r=x;i<r;i++){var o=A[i];p(e,o)&&t.push(o)}return t}}Date.now||(Date.now=function(){return(new Date).getTime()});var S="\t\n\v\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff";if(!String.prototype.trim||S.trim()){S="["+S+"]";var D=new RegExp("^"+S+S+"*"),P=new RegExp(S+S+"*$");String.prototype.trim=function(){return String(this).replace(D,"").replace(P,"")}}function I(e){return(e=+e)!==e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}var M=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim")})),ace.define("ace/lib/dom",["require","exports","module"],(function(e,t,n){"use strict";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||"http://www.w3.org/1999/xhtml",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+"").split(/\s+/g).indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=" "+n)},t.removeCssClass=function(e,t){for(var n=e.className.split(/\s+/g);;){var i=n.indexOf(t);if(-1==i)break;n.splice(i,1)}e.className=n.join(" ")},t.toggleCssClass=function(e,t){for(var n=e.className.split(/\s+/g),i=!0;;){var r=n.indexOf(t);if(-1==r)break;i=!1,n.splice(r,1)}return i&&n.push(t),e.className=n.join(" "),i},t.setCssClass=function(e,n,i){i?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,i=0;if((t=t||document).createStyleSheet&&(n=t.styleSheets)){for(;i<n.length;)if(n[i++].owningElement.id===e)return!0}else if(n=t.getElementsByTagName("style"))for(;i<n.length;)if(n[i++].id===e)return!0;return!1},t.importCssString=function(e,n,i){if(i=i||document,n&&t.hasCssString(n,i))return null;var r;n&&(e+="\n/*# sourceURL=ace/css/"+n+" */"),i.createStyleSheet?((r=i.createStyleSheet()).cssText=e,n&&(r.owningElement.id=n)):((r=t.createElement("style")).appendChild(i.createTextNode(e)),n&&(r.id=n),t.getDocumentHead(i).appendChild(r))},t.importCssStylsheet=function(e,n){if(n.createStyleSheet)n.createStyleSheet(e);else{var i=t.createElement("link");i.rel="stylesheet",i.href=e,t.getDocumentHead(n).appendChild(i)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,"paddingLeft"),10)+parseInt(t.computedStyle(e,"paddingRight"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,"paddingTop"),10)+parseInt(t.computedStyle(e,"paddingBottom"),10)+e.clientHeight},t.scrollbarWidth=function(e){var n=t.createElement("ace_inner");n.style.width="100%",n.style.minWidth="0px",n.style.height="200px",n.style.display="block";var i=t.createElement("ace_outer"),r=i.style;r.position="absolute",r.left="-10000px",r.overflow="hidden",r.width="200px",r.minWidth="0px",r.height="150px",r.display="block",i.appendChild(n);var o=e.documentElement;o.appendChild(i);var a=n.offsetWidth;r.overflow="scroll";var s=n.offsetWidth;return a==s&&(s=i.clientWidth),o.removeChild(i),a-s},"undefined"!=typeof document?(void 0!==window.pageYOffset?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,"")||{})[t]||"":window.getComputedStyle(e,"")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.setInnerHtml=function(e,t){var n=e.cloneNode(!1);return n.innerHTML=t,e.parentNode.replaceChild(n,e),n},"textContent"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}):t.importCssString=function(){}})),ace.define("ace/lib/oop",["require","exports","module"],(function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"],(function(e,t,n){"use strict";e("./fixoldbrowsers");var i=e("./oop"),r=function(){var e,t,n={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return i.mixin(n,n.MODIFIER_KEYS),i.mixin(n,n.PRINTABLE_KEYS),i.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]="-",function(){for(var e=["cmd","ctrl","alt","shift"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join("-")+"-"}(),n.KEY_MODS[0]="",n.KEY_MODS[-1]="input-",n}();i.mixin(t,r),t.keyCodeToString=function(e){var t=r[e];return"string"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define("ace/lib/useragent",["require","exports","module"],(function(e,t,n){"use strict";if(t.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS},"object"==typeof navigator){var i=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),r=navigator.userAgent;t.isWin="win"==i,t.isMac="mac"==i,t.isLinux="linux"==i,t.isIE="Microsoft Internet Explorer"==navigator.appName||navigator.appName.indexOf("MSAppHost")>=0?parseFloat((r.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((r.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((r.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(r.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(r.split(" Chrome/")[1])||void 0,t.isAIR=r.indexOf("AdobeAIR")>=0,t.isIPad=r.indexOf("iPad")>=0,t.isChromeOS=r.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(r)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),o=null,a=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addTouchMoveListener=function(e,n){var i,r;t.addListener(e,"touchstart",(function(e){var t=e.touches[0];i=t.clientX,r=t.clientY})),t.addListener(e,"touchmove",(function(e){var t=e.touches;if(!(t.length>1)){var o=t[0];e.wheelX=i-o.clientX,e.wheelY=r-o.clientY,i=o.clientX,r=o.clientY,n(e)}}))},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,o){var a,s,c,l=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function h(e){if(0!==t.getButton(e)?l=0:e.detail>1?++l>4&&(l=1):l=1,r.isIE){var h=Math.abs(e.clientX-a)>5||Math.abs(e.clientY-s)>5;c&&!h||(l=1),c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),1==l&&(a=e.clientX,s=e.clientY)}if(e._clicks=l,i[o]("mousedown",e),l>4)l=0;else if(l>1)return i[o](u[l],e)}function d(e){l=2,c&&clearTimeout(c),c=setTimeout((function(){c=null}),n[l-1]||600),i[o]("mousedown",e),i[o](u[l],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",h),r.isOldIE&&t.addListener(e,"dblclick",d)}))};var s=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function c(e,t,n){var c=s(t);if(!r.isMac&&o){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(c|=8),o.altGr){if(3==(3&c))return;o.altGr=0}if(18===n||17===n){var l="location"in t?t.location:t.keyLocation;if(17===n&&1===l)1==o[n]&&(a=t.timeStamp);else if(18===n&&3===c&&2===l){t.timeStamp-a<50&&(o.altGr=!0)}}}if((n in i.MODIFIER_KEYS&&(n=-1),8&c&&n>=91&&n<=93&&(n=-1),!c&&13===n)&&(3===(l="location"in t?t.location:t.keyLocation)&&(e(t,c,-n),t.defaultPrevented)))return;if(r.isChromeOS&&8&c){if(e(t,c,n),t.defaultPrevented)return;c&=-9}return!!(c||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,c,n)}function l(){o=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[s(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var a=null;i(e,"keydown",(function(e){a=e.keyCode})),i(e,"keypress",(function(e){return c(n,e,a)}))}else{var s=null;i(e,"keydown",(function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=c(n,e,e.keyCode);return s=e.defaultPrevented,t})),i(e,"keypress",(function(e){s&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),s=null)})),i(e,"keyup",(function(e){o[e.keyCode]=null})),o||(l(),i(window,"focus",l))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){t.nextTick=function(e,n){n=n||window;t.addListener(n,"message",(function i(r){"zero-timeout-message-1"==r.data&&(t.stopPropagation(r),t.removeListener(n,"message",i),e())})),n.postMessage("zero-timeout-message-1","*")}}t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/lib/lang",["require","exports","module"],(function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){for(var n="";t>0;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;n<i;n++)e[n]&&"object"==typeof e[n]?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function e(t){if("object"!==typeof t||!t)return t;var n;if(Array.isArray(t)){n=[];for(var i=0;i<t.length;i++)n[i]=e(t[i]);return n}if("[object Object]"!==Object.prototype.toString.call(t))return t;for(var i in n={},t)n[i]=e(t[i]);return n},t.arrayToMap=function(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,(function(e){n.push({offset:arguments[arguments.length-2],length:e.length})})),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},i=function e(i){return e.cancel(),t=setTimeout(n,i||0),e};return i.schedule=i,i.call=function(){return this.cancel(),e(),i},i.cancel=function(){return clearTimeout(t),t=null,i},i.isPending=function(){return t},i},t.delayedCall=function(e,t){var n=null,i=function(){n=null,e()},r=function(e){null==n&&(n=setTimeout(i,e||t))};return r.delay=function(e){n&&clearTimeout(n),n=setTimeout(i,e||t)},r.schedule=r,r.call=function(){this.cancel(),e()},r.cancel=function(){n&&clearTimeout(n),n=null},r.isPending=function(){return n},r}})),ace.define("ace/keyboard/textinput_ios",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=e("../lib/dom"),a=e("../lib/lang"),s=e("../lib/keys"),c=s.KEY_MODS,l=r.isChrome<18,u=r.isIE;t.TextInput=function(e,t){var n=o.createElement("textarea");n.className=r.isIOS?"ace_text-input ace_text-input-ios":"ace_text-input",r.isTouchPad&&n.setAttribute("x-palm-disable-auto-cap",!0),n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var h=!1,d=!1,f=!1,p=!1,m="",g=!0;try{var v=document.activeElement===n}catch(N){}i.addListener(n,"blur",(function(e){t.onBlur(e),v=!1})),i.addListener(n,"focus",(function(e){v=!0,t.onFocus(e),y()})),this.focus=function(){if(m)return n.focus();n.style.position="fixed",n.focus()},this.blur=function(){n.blur()},this.isFocused=function(){return v};var _=a.delayedCall((function(){v&&y(g)})),b=a.delayedCall((function(){p||(n.value="\n aaaa a\n",v&&y())}));function y(e){if(!p){if(p=!0,O)t=0,i=e?0:n.value.length-1;else var t=4,i=5;try{n.setSelectionRange(t,i)}catch(N){}p=!1}}function w(){p||(n.value="\n aaaa a\n",r.isWebKit&&b.schedule())}r.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=g&&(g=!g,_.schedule())})),w(),v&&t.onFocus();var O=null;this.setInputHandler=function(e){O=e},this.getInputHandler=function(){return O};var C=!1,E=function(e){4===n.selectionStart&&5===n.selectionEnd||(O&&(e=O(e),O=null),f?(y(),e&&t.onPaste(e),f=!1):e=="\n aaaa a\n".substr(0)&&4===n.selectionStart?C?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):h||("\n aaaa a\n"==e.substring(0,9)&&e.length>"\n aaaa a\n".length?e=e.substr(9):e.substr(0,4)=="\n aaaa a\n".substr(0,4)?e=e.substr(4,e.length-"\n aaaa a\n".length+1):e.charAt(e.length-1)=="\n aaaa a\n".charAt(0)&&(e=e.slice(0,-1)),e=="\n aaaa a\n".charAt(0)||e.charAt(e.length-1)=="\n aaaa a\n".charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),h&&(h=!1),C&&(C=!1))},A=function(e){if(!p){var t=n.value;E(t),w()}},x=function e(t,n,i){var r=t.clipboardData||window.clipboardData;if(r&&!l){var o=u||i?"Text":"text/plain";try{return n?!1!==r.setData(o,n):r.getData(o)}catch(t){if(!i)return e(t,n,!0)}}},T=function(e,o){var a=t.getCopyText();if(!a)return i.preventDefault(e);x(e,a)?(r.isIOS&&(d=o,n.value="\n aa"+a+"a a\n",n.setSelectionRange(4,4+a.length),h={value:a}),o?t.onCut():t.onCopy(),r.isIOS||i.preventDefault(e)):(h=!0,n.value=a,n.select(),setTimeout((function(){h=!1,w(),y(),o?t.onCut():t.onCopy()})))};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",(function(e){!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(n)?O&&y(t.selection.isEmpty()):(t.selectAll(),y())})),i.addListener(n,"input",A),i.addListener(n,"cut",(function(e){T(e,!0)})),i.addListener(n,"copy",(function(e){T(e,!1)})),i.addListener(n,"paste",(function(e){var o=x(e);"string"==typeof o?(o&&t.onPaste(o,e),r.isIE&&setTimeout(y),i.preventDefault(e)):(n.value="",f=!0)}));var S,D=function(){if(p&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\x01/g,"");if(p.lastValue!==e&&(t.onCompositionUpdate(e),p.lastValue&&t.undo(),p.canUndo&&(p.lastValue=e),p.lastValue)){var i=t.selection.getRange();t.insert(p.lastValue),t.session.markUndoGroup(),p.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},P=function e(i){if(t.onCompositionEnd&&!t.$readOnly){var o=p;p=!1;var a=setTimeout((function(){a=null;var e=n.value.replace(/\x01/g,"");p||(e==o.lastValue?w():!o.lastValue&&e&&(w(),E(e)))}));O=function(e){return a&&clearTimeout(a),(e=e.replace(/\x01/g,""))==o.lastValue?"":(o.lastValue&&a&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",e),"compositionend"==i.type&&o.range&&t.selection.setRange(o.range),(!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603)&&A()}},I=a.delayedCall(D,50);function M(){clearTimeout(S),S=setTimeout((function(){m&&(n.style.cssText=m,m=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",(function(e){p||!t.onCompositionStart||t.$readOnly||((p={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(D,0),t.on("mousedown",P),p.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),r.isGecko?i.addListener(n,"text",(function(){I.schedule()})):(i.addListener(n,"keyup",(function(){I.schedule()})),i.addListener(n,"keydown",(function(){I.schedule()}))),i.addListener(n,"compositionend",P),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){C=!0,y(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,a){m||(m=n.style.cssText),n.style.cssText=(a?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var s=t.container.getBoundingClientRect(),c=o.computedStyle(t.container),l=s.top+(parseInt(c.borderTopWidth)||0),u=s.left+(parseInt(s.borderLeftWidth)||0),h=s.bottom-l-n.clientHeight-2,d=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,h)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(S),r.isWin&&i.capture(t.container,d,M))},this.onContextMenuClose=M;var R=function(e){t.textInput.onContextMenu(e),M()};if(i.addListener(n,"mouseup",R),i.addListener(n,"mousedown",(function(e){e.preventDefault(),M()})),i.addListener(t.renderer.scroller,"contextmenu",R),i.addListener(n,"contextmenu",R),r.isIOS){var L=null,j=!1;e.addEventListener("keydown",(function(e){L&&clearTimeout(L),j=!0})),e.addEventListener("keyup",(function(e){L=setTimeout((function(){j=!1}),100)}));var F=function(e){if(document.activeElement===n&&!j){if(d)return setTimeout((function(){d=!1}),100);var i=n.selectionStart,r=n.selectionEnd;if(n.setSelectionRange(4,5),i==r)switch(i){case 0:t.onCommandKey(null,0,s.up);break;case 1:t.onCommandKey(null,0,s.home);break;case 2:t.onCommandKey(null,c.option,s.left);break;case 4:t.onCommandKey(null,0,s.left);break;case 5:t.onCommandKey(null,0,s.right);break;case 7:t.onCommandKey(null,c.option,s.right);break;case 8:t.onCommandKey(null,0,s.end);break;case 9:t.onCommandKey(null,0,s.down)}else{switch(r){case 6:t.onCommandKey(null,c.shift,s.right);break;case 7:t.onCommandKey(null,c.shift|c.option,s.right);break;case 8:t.onCommandKey(null,c.shift,s.end);break;case 9:t.onCommandKey(null,c.shift,s.down)}switch(i){case 0:t.onCommandKey(null,c.shift,s.up);break;case 1:t.onCommandKey(null,c.shift,s.home);break;case 2:t.onCommandKey(null,c.shift|c.option,s.left);break;case 3:t.onCommandKey(null,c.shift,s.left)}}}};document.addEventListener("selectionchange",F),t.on("destroy",(function(){document.removeEventListener("selectionchange",F)}))}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/keyboard/textinput_ios"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=e("../lib/dom"),a=e("../lib/lang"),s=r.isChrome<18,c=r.isIE,l=e("./textinput_ios").TextInput;t.TextInput=function(e,t){if(r.isIOS)return l.call(this,e,t);var n=o.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var u=!1,h=!1,d=!1,f="",p=!0;try{var m=document.activeElement===n}catch(j){}i.addListener(n,"blur",(function(e){t.onBlur(e),m=!1})),i.addListener(n,"focus",(function(e){m=!0,t.onFocus(e),_()})),this.focus=function(){if(f)return n.focus();var e=n.style.top;n.style.position="fixed",n.style.top="0px",n.focus(),setTimeout((function(){n.style.position="","0px"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return m};var g=a.delayedCall((function(){m&&_(p)})),v=a.delayedCall((function(){d||(n.value="\u2028\u2028",m&&_())}));function _(e){if(!d){if(d=!0,y)var t=0,i=e?0:n.value.length-1;else t=e?2:1,i=2;try{n.setSelectionRange(t,i)}catch(j){}d=!1}}function b(){d||(n.value="\u2028\u2028",r.isWebKit&&v.schedule())}r.isWebKit||t.addEventListener("changeSelection",(function(){t.selection.isEmpty()!=p&&(p=!p,g.schedule())})),b(),m&&t.onFocus();var y=null;this.setInputHandler=function(e){y=e},this.getInputHandler=function(){return y};var w=!1,O=function(e){y&&(e=y(e),y=null),h?(_(),e&&t.onPaste(e),h=!1):e=="\u2028\u2028".charAt(0)?w?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):("\u2028\u2028"==e.substring(0,2)?e=e.substr(2):e.charAt(0)=="\u2028\u2028".charAt(0)?e=e.substr(1):e.charAt(e.length-1)=="\u2028\u2028".charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)=="\u2028\u2028".charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),w&&(w=!1)},C=function(e){if(!d){var t=n.value;O(t),b()}},E=function e(t,n,i){var r=t.clipboardData||window.clipboardData;if(r&&!s){var o=c||i?"Text":"text/plain";try{return n?!1!==r.setData(o,n):r.getData(o)}catch(t){if(!i)return e(t,n,!0)}}},A=function(e,r){var o=t.getCopyText();if(!o)return i.preventDefault(e);E(e,o)?(r?t.onCut():t.onCopy(),i.preventDefault(e)):(u=!0,n.value=o,n.select(),setTimeout((function(){u=!1,b(),_(),r?t.onCut():t.onCopy()})))},x=function(e){A(e,!0)},T=function(e){A(e,!1)},S=function(e){var o=E(e);"string"==typeof o?(o&&t.onPaste(o,e),r.isIE&&setTimeout(_),i.preventDefault(e)):(n.value="",h=!0)};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",(function(e){u?u=!1:!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(n)?y&&_(t.selection.isEmpty()):(t.selectAll(),_())})),i.addListener(n,"input",C),i.addListener(n,"cut",x),i.addListener(n,"copy",T),i.addListener(n,"paste",S),"oncut"in n&&"oncopy"in n&&"onpaste"in n||i.addListener(e,"keydown",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:T(e);break;case 86:S(e);break;case 88:x(e)}}));var D,P=function(){if(d&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\u2028/g,"");if(d.lastValue!==e&&(t.onCompositionUpdate(e),d.lastValue&&t.undo(),d.canUndo&&(d.lastValue=e),d.lastValue)){var i=t.selection.getRange();t.insert(d.lastValue),t.session.markUndoGroup(),d.range=t.selection.getRange(),t.selection.setRange(i),t.selection.clearSelection()}}},I=function e(i){if(t.onCompositionEnd&&!t.$readOnly){var o=d;d=!1;var a=setTimeout((function(){a=null;var e=n.value.replace(/\u2028/g,"");d||(e==o.lastValue?b():!o.lastValue&&e&&(b(),O(e)))}));y=function(e){return a&&clearTimeout(a),(e=e.replace(/\u2028/g,""))==o.lastValue?"":(o.lastValue&&a&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",e),"compositionend"==i.type&&o.range&&t.selection.setRange(o.range),(!!r.isChrome&&r.isChrome>=53||!!r.isWebKit&&r.isWebKit>=603)&&C()}},M=a.delayedCall(P,50);function R(){clearTimeout(D),D=setTimeout((function(){f&&(n.style.cssText=f,f=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}i.addListener(n,"compositionstart",(function(e){d||!t.onCompositionStart||t.$readOnly||((d={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(P,0),t.on("mousedown",I),d.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),r.isGecko?i.addListener(n,"text",(function(){M.schedule()})):(i.addListener(n,"keyup",(function(){M.schedule()})),i.addListener(n,"keydown",(function(){M.schedule()}))),i.addListener(n,"compositionend",I),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){w=!0,_(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,a){f||(f=n.style.cssText),n.style.cssText=(a?"z-index:100000;":"")+"height:"+n.style.height+";"+(r.isIE?"opacity:0.1;":"");var s=t.container.getBoundingClientRect(),c=o.computedStyle(t.container),l=s.top+(parseInt(c.borderTopWidth)||0),u=s.left+(parseInt(s.borderLeftWidth)||0),h=s.bottom-l-n.clientHeight-2,d=function(e){n.style.left=e.clientX-u-2+"px",n.style.top=Math.min(e.clientY-l-2,h)+"px"};d(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(D),r.isWin&&i.capture(t.container,d,R))},this.onContextMenuClose=R;var L=function(e){t.textInput.onContextMenu(e),R()};i.addListener(n,"mouseup",L),i.addListener(n,"mousedown",(function(e){e.preventDefault(),R()})),i.addListener(t.renderer.scroller,"contextmenu",L),i.addListener(n,"contextmenu",L)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";e("../lib/dom"),e("../lib/event");var i=e("../lib/useragent");function r(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function o(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else var n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,o=e.getButton();if(0!==o){var a=r.getSelectionRange().isEmpty();return r.$blockScrolling++,(a||1==o)&&r.selection.moveToPosition(n),r.$blockScrolling--,void(2==o&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=o(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(n.$blockScrolling++,this.$clickSelection){var a=this.$clickSelection.comparePoint(r.start),s=this.$clickSelection.comparePoint(r.end);if(-1==a&&s<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==s&&a>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==a&&1==s)i=r.end,t=r.start;else{var c=o(this.$clickSelection,i);i=c.cursor,t=c.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,n,i,r=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,n=this.x,i=this.y,Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))),o=Date.now();(r>0||o-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,o=e.wheelX/r,a=e.wheelY/r;r<250&&(o=(o+n.vx)/2,a=(a+n.vy)/2);var s=Math.abs(o/a),c=!1;if(s>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(c=!0),s<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(c=!0),c)n.allowed=i;else if(i-n.allowed<250){Math.abs(o)<=1.1*Math.abs(n.vx)&&Math.abs(a)<=1.1*Math.abs(n.vy)?(c=!0,n.allowed=i):n.allowed=0}return n.t=i,n.vx=o,n.vy=a,c?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){this.editor._emit("mousewheel",e)}}).call(r.prototype),t.DefaultHandlers=r})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(r.prototype),t.Tooltip=r})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),o=e("../lib/event"),a=e("../tooltip").Tooltip;function s(e){a.call(this,e)}r.inherits(s,a),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),o=this.getHeight();(e+=15)+r>n&&(e-=e+r-n),(t+=15)+o>i&&(t-=20+o),a.prototype.setPosition.call(this,e,t)}}.call(s.prototype),t.GutterHandler=function(e){var t,n,r,a=e.editor,c=a.renderer.$gutterLayer,l=new s(a.container);function u(){t&&(t=clearTimeout(t)),r&&(l.hide(),r=null,a._signal("hideGutterTooltip",l),a.removeEventListener("mousewheel",u))}function h(e){l.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(a.isFocused()&&0==t.getButton()&&"foldWidgets"!=c.getRegion(t)){var n=t.getDocumentPosition().row,i=a.session.selection;if(t.getShiftKey())i.selectTo(n,0);else{if(2==t.domEvent.detail)return a.selectAll(),t.preventDefault();e.$clickSelection=a.selection.getLineRange(n)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler("guttermousemove",(function(o){var s=o.domEvent.target||o.domEvent.srcElement;if(i.hasCssClass(s,"ace_fold-widget"))return u();r&&e.$tooltipFollowsMouse&&h(o),n=o,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,i=c.$annotations[t];if(!i)return u();if(t==a.session.getLength()){var o=a.renderer.pixelToScreenCoordinates(0,n.y).row,s=n.$pos;if(o>a.session.documentToScreenRow(s.row,s.column))return u()}if(r!=i)if(r=i.text.join("<br/>"),l.setHtml(r),l.show(),a._signal("showGutterTooltip",l),a.on("mousewheel",u),e.$tooltipFollowsMouse)h(n);else{var d=n.domEvent.target.getBoundingClientRect(),f=l.getElement().style;f.left=d.right+"px",f.top=d.bottom+"px"}}():u()}),50))})),o.addListener(a.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),a.on("changeSession",u)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),o=e("../lib/useragent");function a(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",o.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var a,c,l,u,h,d,f,p,m,g,v,_=t.container,b=0;function y(){var e=d;(function(e,n){var i=Date.now(),r=!n||e.row!=n.row,o=!n||e.column!=n.column;!g||r||o?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,g=i,v={x:c,y:l}):s(v.x,v.y,c,l)>5?g=null:i-g>=200&&(t.renderer.scrollCursorIntoView(),g=null)})(d=t.renderer.screenToTextCoordinates(c,l),e),function(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,a=t.renderer.scroller.getBoundingClientRect(),s={x:{left:c-a.left,right:a.right-c},y:{top:l-a.top,bottom:a.bottom-l}},u=Math.min(s.x.left,s.x.right),h=Math.min(s.y.top,s.y.bottom),d={row:e.row,column:e.column};u/o<=2&&(d.column+=s.x.left<s.x.right?-3:2),h/r<=1&&(d.row+=s.y.top<s.y.bottom?-1:1);var f=e.row!=d.row,p=e.column!=d.column,g=!n||e.row!=n.row;f||p&&!g?m?i-m>=200&&t.renderer.scrollCursorIntoView(d):m=i:m=null}(d,e)}function w(){h=t.selection.toOrientedRange(),a=t.session.addMarker(h,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),y(),u=setInterval(y,20),b=0,r.addListener(document,"mousemove",E)}function O(){clearInterval(u),t.session.removeMarker(a),a=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(h),t.$blockScrolling-=1,t.isFocused()&&!p&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),h=null,d=null,b=0,m=null,g=null,r.removeListener(document,"mousemove",E)}this.onDragStart=function(e){if(this.cancelDrag||!_.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}h=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",o.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),o.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),p=!0,this.setState("drag")},this.onDragEnd=function(e){if(_.draggable=!1,p=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;f||"move"!=n||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return c=e.clientX,l=e.clientY,a||w(),b++,e.dataTransfer.dropEffect=f=x(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return c=e.clientX,l=e.clientY,a||(w(),b++),null!==C&&(C=null),e.dataTransfer.dropEffect=f=x(e),r.preventDefault(e)},this.onDragLeave=function(e){if(--b<=0&&a)return O(),f=null,r.preventDefault(e)},this.onDrop=function(e){if(d){var n=e.dataTransfer;if(p)switch(f){case"move":h=h.contains(d.row,d.column)?{start:d,end:d}:t.moveText(h,d);break;case"copy":h=t.moveText(h,d,!0)}else{var i=n.getData("Text");h={start:d,end:t.session.insert(d,i)},t.focus(),f=null}return O(),r.preventDefault(e)}},r.addListener(_,"dragstart",this.onDragStart.bind(e)),r.addListener(_,"dragend",this.onDragEnd.bind(e)),r.addListener(_,"dragenter",this.onDragEnter.bind(e)),r.addListener(_,"dragover",this.onDragOver.bind(e)),r.addListener(_,"dragleave",this.onDragLeave.bind(e)),r.addListener(_,"drop",this.onDrop.bind(e));var C=null;function E(){null==C&&(C=setTimeout((function(){null!=C&&a&&O()}),20))}function A(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function x(e){var t=["copy","copymove","all","uninitialized"],n=o.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var r="none";return n&&t.indexOf(i)>=0?r="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(i)>=0?r="move":t.indexOf(i)>=0&&(r="copy"),r}}function s(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=o.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&"dragReady"==this.state&&(s(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop());"dragWait"===this.state&&(s(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition())))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton();if(1===(e.domEvent.detail||1)&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var r=e.domEvent.target||e.domEvent.srcElement;if("unselectable"in r&&(r.unselectable="on"),t.getDragDelay()){if(o.isWebKit)this.cancelDrag=!0,t.container.draggable=!0;this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(a.prototype),t.DragdropHandler=a})),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=i.getDocumentHead(),r=document.createElement("script");r.src=e,n.appendChild(r),r.onload=r.onreadystatechange=function(e,n){!n&&r.readyState&&"loaded"!=r.readyState&&"complete"!=r.readyState||(r=r.onload=r.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}})),ace.define("ace/lib/event_emitter",["require","exports","module"],(function(e,t,n){"use strict";var i={},r=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};i._emit=i._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],i=this._defaultHandlers[e];if(n.length||i){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=r),t.preventDefault||(t.preventDefault=o),n=n.slice();for(var a=0;a<n.length&&(n[a](t,this),!t.propagationStopped);a++);return i&&!t.defaultPrevented?i(t,this):void 0}},i._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(n){n=n.slice();for(var i=0;i<n.length;i++)n[i](t,this)}},i.once=function(e,t){var n=this;t&&this.addEventListener(e,(function i(){n.removeEventListener(e,i),t.apply(null,arguments)}))},i.setDefaultHandler=function(e,t){var n=this._defaultHandlers;if(n||(n=this._defaultHandlers={_disabled_:{}}),n[e]){var i=n[e],r=n._disabled_[e];r||(n._disabled_[e]=r=[]),r.push(i);var o=r.indexOf(t);-1!=o&&r.splice(o,1)}n[e]=t},i.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(n){var i=n._disabled_[e];if(n[e]==t){n[e];i&&this.setDefaultHandler(e,i.pop())}else if(i){var r=i.indexOf(t);-1!=r&&i.splice(r,1)}}},i.on=i.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var i=this._eventRegistry[e];return i||(i=this._eventRegistry[e]=[]),-1==i.indexOf(t)&&i[n?"unshift":"push"](t),t},i.off=i.removeListener=i.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(n){var i=n.indexOf(t);-1!==i&&n.splice(i,1)}},i.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=i})),ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],(function(e,t,n){var i=e("./oop"),r=e("./event_emitter").EventEmitter,o={setOptions:function(e){Object.keys(e).forEach((function(t){this.setOption(t,e[t])}),this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach((function(e){t[e]=this.getOption(e)}),this),t},setOption:function(e,t){if(this["$"+e]!==t){var n=this.$options[e];if(!n)return a('misspelled option "'+e+'"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this["$"+e]=t),n&&n.set&&n.set.call(this,t)}},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this["$"+e]:a('misspelled option "'+e+'"')}};function a(e){"undefined"!=typeof console&&console.warn&&console.warn.apply(console,arguments)}function s(e,t){var n=new Error(e);n.data=t,"object"==typeof console&&console.error&&console.error(n),setTimeout((function(){throw n}))}var c=function(){this.$defaultOptions={}};(function(){i.implement(this,r),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach((function(t){var i=n[t];"string"==typeof i&&(i={forwardTo:i}),i.name||(i.name=t),e.$options[i.name]=i,"initialValue"in i&&(e["$"+i.name]=i.initialValue)})),i.implement(e,o),this},this.resetOptions=function(e){Object.keys(e.$options).forEach((function(t){var n=e.$options[t];"value"in n&&e.setOption(t,n.value)}))},this.setDefaultValue=function(e,t,n){var i=this.$defaultOptions[e]||(this.$defaultOptions[e]={});i[t]&&(i.forwardTo?this.setDefaultValue(i.forwardTo,t,n):i[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach((function(n){this.setDefaultValue(e,n,t[n])}),this)},this.warn=a,this.reportError=s}).call(c.prototype),t.AppConfig=c})),ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/lib/net","ace/lib/app_config"],(function(e,t,i){var r=e("./lib/lang"),o=(e("./lib/oop"),e("./lib/net")),a=e("./lib/app_config").AppConfig;i.exports=t=new a;var s=function(){return this||"undefined"!=typeof window&&window}(),c={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:"",suffix:".js",$moduleUrls:{}};function l(r){if(s&&s.document){c.packaged=r||e.packaged||i.packaged||s.define&&n(350).packaged;for(var o,a={},l="",u=document.currentScript||document._currentScript,h=(u&&u.ownerDocument||document).getElementsByTagName("script"),d=0;d<h.length;d++){var f=h[d],p=f.src||f.getAttribute("src");if(p){for(var m=f.attributes,g=0,v=m.length;g<v;g++){var _=m[g];0===_.name.indexOf("data-ace-")&&(a[(o=_.name.replace(/^data-ace-/,""),o.replace(/-(.)/g,(function(e,t){return t.toUpperCase()})))]=_.value)}var b=p.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);b&&(l=b[1])}}for(var y in l&&(a.base=a.base||l,a.packaged=!0),a.basePath=a.base,a.workerPath=a.workerPath||a.base,a.modePath=a.modePath||a.base,a.themePath=a.themePath||a.base,delete a.base,a)"undefined"!==typeof a[y]&&t.set(y,a[y])}}t.get=function(e){if(!c.hasOwnProperty(e))throw new Error("Unknown config key: "+e);return c[e]},t.set=function(e,t){if(!c.hasOwnProperty(e))throw new Error("Unknown config key: "+e);c[e]=t},t.all=function(){return r.copyObject(c)},t.moduleUrl=function(e,t){if(c.$moduleUrls[e])return c.$moduleUrls[e];var n=e.split("/"),i="snippets"==(t=t||n[n.length-2]||"")?"/":"-",r=n[n.length-1];if("worker"==t&&"-"==i){var o=new RegExp("^"+t+"[\\-_]|[\\-_]"+t+"$","g");r=r.replace(o,"")}(!r||r==t)&&n.length>1&&(r=n[n.length-2]);var a=c[t+"Path"];return null==a?a=c.basePath:"/"==i&&(t=i=""),a&&"/"!=a.slice(-1)&&(a+="/"),a+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return c.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,a;Array.isArray(n)&&(a=n[0],n=n[1]);try{r=e(n)}catch(c){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var s=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return s();o.loadScript(t.moduleUrl(n,a),s)}},l(!0),t.init=l})),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),o=e("./default_handlers").DefaultHandlers,a=e("./default_gutter_handler").GutterHandler,s=e("./mouse_event").MouseEvent,c=e("./dragdrop_handler").DragdropHandler,l=e("../config"),u=function(e){var t=this;this.editor=e,new o(this),new a(this),new c(this);var n=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},s=e.renderer.getMouseEventTarget();i.addListener(s,"click",this.onMouseEvent.bind(this,"click")),i.addListener(s,"mousemove",this.onMouseMove.bind(this,"mousemove")),i.addMultiMouseDownListener([s,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),i.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),i.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var l=e.renderer.$gutter;i.addListener(l,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),i.addListener(l,"click",this.onMouseEvent.bind(this,"gutterclick")),i.addListener(l,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),i.addListener(l,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),i.addListener(s,"mousedown",n),i.addListener(l,"mousedown",n),r.isIE&&e.renderer.scrollBarV&&(i.addListener(e.renderer.scrollBarV.element,"mousedown",n),i.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",(function(n){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var i=e.renderer.screenToTextCoordinates(n.x,n.y),r=e.session.selection.getRange(),o=e.renderer;!r.isEmpty()&&r.insideStart(i.row,i.column)?o.setCursorStyle("default"):o.setCursorStyle("")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new s(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new s(t,this.editor))},this.onMouseWheel=function(e,t){var n=new s(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new s(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(e){if(r.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new s(e,o.editor),o.$mouseMoved=!0}},c=function(e){clearInterval(u),l(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",null==n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e)},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(r.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout((function(){c(e)}));o.$onCaptureMouseMove=a,o.releaseMouse=i.capture(this.editor.container,a,c);var u=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&i.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(u.prototype),l.defineOptions(u.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:r.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u})),ace.define("ace/mouse/fold_handler",["require","exports","module"],(function(e,t,n){"use strict";t.FoldHandler=function(e){e.on("click",(function(t){var n=t.getDocumentPosition(),i=e.session,r=i.getFoldAt(n.row,n.column,1);r&&(t.getAccelKey()?i.removeFold(r):i.expandFold(r),t.stop())})),e.on("gutterclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var n=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[n]&&e.session.onFoldWidgetClick(n,t),e.isFocused()||e.focus(),t.stop()}})),e.on("gutterdblclick",(function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var n=t.getDocumentPosition().row,i=e.session,r=i.getParentFoldRangeData(n,!0),o=r.range||r.firstRange;if(o){n=o.start.row;var a=i.getFoldAt(n,i.getLine(n).length,1);a?i.removeFold(a):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}}))}})),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/event"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);-1!=n&&this.$handlers.splice(n,1),void 0==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||""})).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,i){for(var o,a=!1,s=this.$editor.commands,c=this.$handlers.length;c--&&!((o=this.$handlers[c].handleKeyboard(this.$data,e,t,n,i))&&o.command&&((a="null"==o.command||s.exec(o.command,this.$editor,o.args,i))&&i&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&r.stopEvent(i),a)););return a||-1!=e||(o={command:"insertstring"},a=s.exec("insertstring",this.$editor,t)),a&&this.$editor._signal&&this.$editor._signal("keyboardActivity",o),a},this.onCommandKey=function(e,t,n){var r=i.keyCodeToString(n);this.$callKeyboardHandlers(t,r,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o})),ace.define("ace/lib/bidiutil",["require","exports","module"],(function(e,t,n){"use strict";var i=0,r=0,o=!1,a=!1,s=!1,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],u=[18,18,18,18,18,18,18,18,18,6,5,6,8,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,5,5,5,6,8,4,4,11,11,11,4,4,4,4,4,10,9,10,9,9,2,2,2,2,2,2,2,2,2,2,9,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,18,18,18,18,18,18,5,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,9,4,11,11,11,11,4,4,4,4,0,4,4,18,4,4,11,11,2,2,4,0,4,4,4,2,0,4,4,4,4,4],h=[8,8,8,8,8,8,8,8,8,8,8,18,18,18,0,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,5,13,14,15,16,17,9,11,11,11,11,11,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8];function d(e,t,n){if(!(r<e))if(1!=e||1!=i||a)for(var o,s,c,l,u=n.length,h=0;h<u;){if(t[h]>=e){for(o=h+1;o<u&&t[o]>=e;)o++;for(s=h,c=o-1;s<c;s++,c--)l=n[s],n[s]=n[c],n[c]=l;h=o}h++}else n.reverse()}function f(e,t,n,r){var c,l,u,h,d=t[r];switch(d){case 0:case 1:o=!1;case 4:case 3:return d;case 2:return o?3:2;case 7:return o=!0,!0,1;case 8:return 4;case 9:return r<1||r+1>=t.length||2!=(c=n[r-1])&&3!=c||2!=(l=t[r+1])&&3!=l?4:(o&&(l=3),l==c?l:4);case 10:return 2==(c=r>0?n[r-1]:5)&&r+1<t.length&&2==t[r+1]?2:4;case 11:if(r>0&&2==n[r-1])return 2;if(o)return 4;for(h=r+1,u=t.length;h<u&&11==t[h];)h++;return h<u&&2==t[h]?2:4;case 12:for(u=t.length,h=r+1;h<u&&12==t[h];)h++;if(h<u){var f=e[r],p=f>=1425&&f<=2303||64286==f;if(c=t[h],p&&(1==c||7==c))return 1}return r<1||5==(c=t[r-1])?4:n[r-1];case 5:return o=!1,a=!0,i;case 6:return s=!0,4;case 13:case 14:case 16:case 17:case 15:o=!1;case 18:return 4}}function p(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?0:u[t]:5==n?/[\u0591-\u05f4]/.test(e)?1:0:6==n?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?12:/[\u0660-\u0669\u066b-\u066c]/.test(e)?3:1642==t?11:/[\u06f0-\u06f9]/.test(e)?2:7:32==n&&t<=8287?h[255&t]:254==n&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT="\xb7",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var h=e.split(""),m=new Array(h.length),g=new Array(h.length),v=[];i=u?1:0,function(e,t,n,u){var h=i?l:c,d=null,m=null,g=null,v=0,_=null,b=-1,y=null,w=null,O=[];if(!u)for(y=0,u=[];y<n;y++)u[y]=p(e[y]);for(r=i,o=!1,!1,a=!1,s=!1,w=0;w<n;w++){if(d=v,O[w]=m=f(e,u,O,w),_=240&(v=h[d][m]),v&=15,t[w]=g=h[v][5],_>0)if(16==_){for(y=b;y<w;y++)t[y]=1;b=-1}else b=-1;if(h[v][6])-1==b&&(b=w);else if(b>-1){for(y=b;y<w;y++)t[y]=g;b=-1}5==u[w]&&(t[w]=0),r|=g}if(s)for(y=0;y<n;y++)if(6==u[y]){t[y]=i;for(var C=y-1;C>=0&&8==u[C];C--)t[C]=i}}(h,v,h.length,n);for(var _=0;_<m.length;m[_]=_,_++);d(2,v,m),d(1,v,m);for(_=0;_<m.length-1;_++)3===n[_]?v[_]=t.AN:1===v[_]&&(n[_]>7&&n[_]<13||4===n[_]||18===n[_])?v[_]=t.ON_R:_>0&&"\u0644"===h[_-1]&&/\u0622|\u0623|\u0625|\u0627/.test(h[_])&&(v[_-1]=v[_]=t.R_H,_++);h[h.length-1]===t.DOT&&(v[h.length-1]=t.B);for(_=0;_<m.length;_++)g[_]=v[m[_]];return{logicalFromVisual:m,bidiLevels:g}},t.hasBidiCharacters=function(e,t){for(var n=!1,i=0;i<e.length;i++)t[i]=p(e.charAt(i)),n||1!=t[i]&&7!=t[i]||(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}})),ace.define("ace/bidihandler",["require","exports","module","ace/lib/bidiutil","ace/lib/lang","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./lib/bidiutil"),r=e("./lib/lang"),o=e("./lib/useragent"),a=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,s=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=i,this.charWidths=[],this.EOL="\xac",this.showInvisibles=!0,this.isRtlDir=!1,this.line="",this.wrapIndent=0,this.isLastRow=!1,this.EOF="\xb6",this.seenBidi=!1};(function(){this.isBidiRow=function(e,t,n){return!!this.seenBidi&&(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels)},this.onChange=function(e){this.seenBidi?this.currentRow=null:"insert"==e.action&&a.test(e.lines.join("\n"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n=this.session.$getRowCacheIndex(t,this.currentRow);n>=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,i=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===i;)i=n,e++;return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var n=this.session.$wrapData[e];n&&(void 0===t&&(t=this.getSplitIndex()),t>0&&n.length?(this.wrapIndent=n.indent,this.line=t<n.length?this.line.substring(n[t-1],n[n.length-1]):this.line.substring(n[n.length-1])):this.line=this.line.substring(0,n[t]))}var o,a=this.session,s=0;this.line=this.line.replace(/\t|[\u1100-\u2029, \u202F-\uFFE6]/g,(function(e,t){return"\t"===e||a.isFullWidth(e.charCodeAt(0))?(o="\t"===e?a.getScreenTabSize(t+s):2,s+=o-1,r.stringRepeat(i.DOT,o)):e}))},this.updateBidiMap=function(){var e=[],t=this.isLastRow?this.EOF:this.EOL,n=this.line+(this.showInvisibles?t:i.DOT);i.hasBidiCharacters(n,e)?this.bidiMap=i.doBidiReorder(n,e,this.isRtlDir):this.bidiMap={}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){if(this.seenBidi&&this.characterWidth!==e.$characterSize.width){var t=this.characterWidth=e.$characterSize.width,n=e.$measureCharWidth("\u05d4");this.charWidths[i.L]=this.charWidths[i.EN]=this.charWidths[i.ON_R]=t,this.charWidths[i.R]=this.charWidths[i.AN]=n,this.charWidths[i.R_H]=o.isChrome?n:.45*n,this.charWidths[i.B]=0,this.currentRow=null}},this.getShowInvisibles=function(){return this.showInvisibles},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setTextDir=function(e){this.isRtlDir=e},this.getPosLeft=function(e){e-=this.wrapIndent;var t=i.getVisualFromLogicalIdx(e>0?e-1:0,this.bidiMap),n=this.bidiMap.bidiLevels,r=0;0===e&&n[t]%2!==0&&t++;for(var o=0;o<t;o++)r+=this.charWidths[n[o]];return 0!==e&&n[t]%2===0&&(r+=this.charWidths[n[t]]),this.wrapIndent&&(r+=this.wrapIndent*this.charWidths[i.L]),r},this.getSelections=function(e,t){for(var n,r,o=this.bidiMap,a=o.bidiLevels,s=this.wrapIndent*this.charWidths[i.L],c=[],l=Math.min(e,t)-this.wrapIndent,u=Math.max(e,t)-this.wrapIndent,h=!1,d=!1,f=0,p=0;p<a.length;p++)r=o.logicalFromVisual[p],n=a[p],(h=r>=l&&r<u)&&!d?f=s:!h&&d&&c.push({left:f,width:s-f}),s+=this.charWidths[n],d=h;return h&&p===a.length&&c.push({left:f,width:s-f}),c},this.offsetToCol=function(e){var t=0,n=(e=Math.max(e,0),0),r=0,o=this.bidiMap.bidiLevels,a=this.charWidths[o[r]];for(this.wrapIndent&&(e-=this.wrapIndent*this.charWidths[i.L]);e>n+a/2;){if(n+=a,r===o.length-1){a=0;break}a=this.charWidths[o[++r]]}return r>0&&o[r-1]%2!==0&&o[r]%2===0?(e<n&&r--,t=this.bidiMap.logicalFromVisual[r]):r>0&&o[r-1]%2===0&&o[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===o.length-1&&0===a&&o[r-1]%2===0||!this.isRtlDir&&0===r&&o[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&o[r-1]%2!==0&&0!==a&&r--,t=this.bidiMap.logicalFromVisual[r]),t+this.wrapIndent}}).call(s.prototype),t.BidiHandler=s})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return 1==(t=this.compare(n.row,n.column))?1==(t=this.compare(i.row,i.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(i.row,i.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:t<this.start.column?-1:t>this.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(0==n)return this;if(-1==n)var r={row:e,column:t};else var o={row:e,column:t};return i.fromPoints(r||this.start,o||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i})),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/lang"),o=e("./lib/event_emitter").EventEmitter,a=e("./range").Range,s=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on("change",(function(e){t._emit("changeCursor"),t.$isEmpty||t._emit("changeSelection"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.selectionAnchor.on("change",(function(){t.$isEmpty||t._emit("changeSelection")}))};(function(){i.implement(this,o),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.isEmpty()&&this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty)this.moveCursorTo(this.lead.row,this.lead.column+e);else{var t=this.getSelectionAnchor(),n=this.getSelectionLead(),i=this.isBackwards();i&&0===t.column||this.setSelectionAnchor(t.row,t.column+e),(i||0!==n.column)&&this.$moveSelection((function(){this.moveCursorTo(n.row,n.column+e)}))}},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?a.fromPoints(t,t):this.isBackwards()?a.fromPoints(t,e):a.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if("undefined"==typeof t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new a(i,0,n,this.session.getLine(n).length):new a(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize();t=this.lead;this.wouldMoveIntoSoftTab(t,n,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),i=this.session.screenToDocumentPosition(n,0),r=this.session.getDisplayLine(e,null,i.row,i.column).match(/^\s*/);r[0].length==t||this.session.$useEmacsStyleLineStart||(i.column+=r[0].length),this.moveCursorToPosition(i)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var i=n.search(/\s+$/);i>0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e<this.doc.getLength()-1&&this.moveCursorWordRight());this.session.tokenRe.exec(i)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.moveCursorLongWordLeft=function(){var e,t=this.lead.row,n=this.lead.column;if(e=this.session.getFoldAt(t,n,-1))this.moveCursorTo(e.start.row,e.start.column);else{var i=this.session.getFoldStringAt(t,n,-1);null==i&&(i=this.doc.getLine(t).substring(0,n));var o=r.stringReverse(i);if(this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(o)&&(n-=this.session.nonTokenRe.lastIndex,o=o.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0),n<=0)return this.moveCursorTo(t,0),this.moveCursorLeft(),void(t>0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&i.test(t);)n++;if(n<1)for(r.lastIndex=0;(t=e[n])&&!r.test(t);)if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}for(;(t=e[n])&&i.test(t);)n++;if(n>2)break}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var o=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e<o&&/^\s*$/.test(i));/^\s+/.test(i)||(i=""),t=0}var a=this.$shortWordEndIndex(i);this.moveCursorTo(e,t+a)},this.moveCursorShortWordLeft=function(){var e,t=this.lead.row,n=this.lead.column;if(e=this.session.getFoldAt(t,n,-1))return this.moveCursorTo(e.start.row,e.start.column);var i=this.session.getLine(t).substring(0,n);if(0===n){do{t--,i=this.doc.getLine(t)}while(t>0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var o=r.stringReverse(i),a=this.$shortWordEndIndex(o);return this.moveCursorTo(t,n-a)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return a.fromPoints(t,n)}catch(i){return a.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(void 0==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=a.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(s.prototype),t.Selection=s})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,o=this.matchMappings[t]={defaultToken:"text"},a="g",s=[],c=0;c<n.length;c++){var l=n[c];if(l.defaultToken&&(o.defaultToken=l.defaultToken),l.caseInsensitive&&(a="gi"),null!=l.regex){l.regex instanceof RegExp&&(l.regex=l.regex.toString().slice(1,-1));var u=l.regex,h=new RegExp("(?:("+u+")|(.))").exec("a").length-2;Array.isArray(l.token)?1==l.token.length||1==h?l.token=l.token[0]:h-1!=l.token.length?(this.reportError("number of classes and regexp groups doesn't match",{rule:l,groupCount:h-1}),l.token=l.token[0]):(l.tokenArray=l.token,l.token=null,l.onMatch=this.$arrayTokens):"function"!=typeof l.token||l.onMatch||(l.onMatch=h>1?this.$applyToken:l.token),h>1&&(/\\\d/.test(l.regex)?u=l.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(h=1,u=this.removeCapturingGroups(l.regex)),l.splitRegex||"string"==typeof l.token||s.push(l)),o[r]=c,r+=h,i.push(u),l.onMatch||(l.onMatch=null)}}i.length||(o[0]=0,i.push("$")),s.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,a)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",a)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"===typeof n)return[{type:n,value:e}];for(var i=[],r=0,o=n.length;r<o;r++)t[r]&&(i[i.length]={type:n[r],value:t[r]});return i},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return"text";for(var n=[],i=this.tokenArray,r=0,o=i.length;r<o;r++)t[r+1]&&(n[n.length]={type:i[r],value:t[r+1]});return n},this.removeCapturingGroups=function(e){return e.replace(/\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,(function(e,t){return t?"(?:":e}))},this.createSplitterRegexp=function(e,t){if(-1!=e.indexOf("(?=")){var n=0,i=!1,r={};e.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g,(function(e,t,o,a,s,c){return i?i="]"!=s:s?i=!0:a?(n==r.stack&&(r.end=c+1,r.stack=-1),n--):o&&(n++,1!=o.length&&(r.stack=n,r.start=c)),e})),null!=r.end&&/^\)*$/.test(e.substr(r.end))&&(e=e.substring(0,r.start)+e.substr(r.end))}return"^"!=e.charAt(0)&&(e="^"+e),"$"!=e.charAt(e.length-1)&&(e+="$"),new RegExp(e,(t||"").replace("g",""))},this.getLineTokens=function(e,t){if(t&&"string"!=typeof t){var n=t.slice(0);"#tmp"===(t=n[0])&&(n.shift(),t=n.shift())}else n=[];var i=t||"start",o=this.states[i];o||(i="start",o=this.states[i]);var a=this.matchMappings[i],s=this.regExps[i];s.lastIndex=0;for(var c,l=[],u=0,h=0,d={type:null,value:""};c=s.exec(e);){var f=a.defaultToken,p=null,m=c[0],g=s.lastIndex;if(g-m.length>u){var v=e.substring(u,g-m.length);d.type==f?d.value+=v:(d.type&&l.push(d),d={type:f,value:v})}for(var _=0;_<c.length-2;_++)if(void 0!==c[_+1]){f=(p=o[a[_]]).onMatch?p.onMatch(m,i,n,e):p.token,p.next&&(i="string"==typeof p.next?p.next:p.next(i,n),(o=this.states[i])||(this.reportError("state doesn't exist",i),i="start",o=this.states[i]),a=this.matchMappings[i],u=g,(s=this.regExps[i]).lastIndex=g),p.consumeLineEnd&&(u=g);break}if(m)if("string"===typeof f)p&&!1===p.merge||d.type!==f?(d.type&&l.push(d),d={type:f,value:m}):d.value+=m;else if(f){d.type&&l.push(d),d={type:null,value:""};for(_=0;_<f.length;_++)l.push(f[_])}if(u==e.length)break;if(u=g,h++>r){for(h>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});u<e.length;)d.type&&l.push(d),d={value:e.substring(u,u+=2e3),type:"overflow"};i="start",n=[];break}}return d.type&&l.push(d),n.length>1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:l,state:n.length?n:i}},this.reportError=i.reportError}).call(o.prototype),t.Tokenizer=o})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r<i.length;r++){var o=i[r];(o.next||o.onMatch)&&("string"==typeof o.next&&0!==o.next.indexOf(t)&&(o.next=t+o.next),o.nextState&&0!==o.nextState.indexOf(t)&&(o.nextState=t+o.nextState))}this.$rules[t+n]=i}else for(var n in e)this.$rules[n]=e[n]},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,r,o){var a="function"==typeof e?(new e).getRules():e;if(r)for(var s=0;s<r.length;s++)r[s]=t+r[s];else for(var c in r=[],a)r.push(t+c);if(this.addRules(a,t),n){var l=Array.prototype[o?"push":"unshift"];for(s=0;s<r.length;s++)l.apply(this.$rules[r[s]],i.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return("start"!=e||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||"start"};this.normalizeRules=function(){var n=0,i=this.$rules;Object.keys(i).forEach((function r(o){var a=i[o];a.processed=!0;for(var s=0;s<a.length;s++){var c=a[s],l=null;Array.isArray(c)&&(l=c,c={}),!c.regex&&c.start&&(c.regex=c.start,c.next||(c.next=[]),c.next.push({defaultToken:c.token},{token:c.token+".end",regex:c.end||c.start,next:"pop"}),c.token=c.token+".start",c.push=!0);var u=c.next||c.push;if(u&&Array.isArray(u)){var h=c.stateName;h||("string"!=typeof(h=c.token)&&(h=h[0]||""),i[h]&&(h+=n++)),i[h]=u,c.next=h,r(h)}else"pop"==u&&(c.next=t);if(c.push&&(c.nextState=c.next||c.push,c.next=e,delete c.push),c.rules)for(var d in c.rules)i[d]?i[d].push&&i[d].push.apply(i[d],c.rules[d]):i[d]=c.rules[d];var f="string"==typeof c?c:c.include;if(f&&(l=Array.isArray(f)?f.map((function(e){return i[e]})):i[f]),l){var p=[s,1].concat(l);c.noEscape&&(p=p.filter((function(e){return!e.next}))),a.splice.apply(a,p),s--}c.keywordMap&&(c.token=this.createKeywordMapper(c.keywordMap,c.defaultToken||"text",c.caseInsensitive),delete c.defaultToken)}}),this)},this.createKeywordMapper=function(e,t,n,i){var r=Object.create(null);return Object.keys(e).forEach((function(t){var o=e[t];n&&(o=o.toLowerCase());for(var a=o.split(i||"|"),s=a.length;s--;)r[a[s]]=t})),Object.getPrototypeOf(r)&&(r.__proto__=null),this.$keywordList=Object.keys(r),e=null,n?function(e){return r[e.toLowerCase()]||t}:function(e){return r[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(r.prototype),t.TextHighlightRules=r})),ace.define("ace/mode/behaviour",["require","exports","module"],(function(e,t,n){"use strict";var i=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(void 0){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if("function"===typeof e)var n=(new e).getBehaviours(t);else n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(e){for(var t={},n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}return this.$behaviours}}).call(i.prototype),t.Behaviour=i})),ace.define("ace/token_iterator",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("./range").Range,r=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var i=e.getTokenAt(t,n);this.$tokenIndex=i?i.index:-1};(function(){this.stepBackward=function(){for(this.$tokenIndex-=1;this.$tokenIndex<0;){if(this.$row-=1,this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e;for(this.$tokenIndex+=1;this.$tokenIndex>=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;t>0;)n+=e[t-=1].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,n){"use strict";var i,r=e("../../lib/oop"),o=e("../behaviour").Behaviour,a=e("../../token_iterator").TokenIterator,s=e("../../lib/lang"),c=["text","paren.rparen","punctuation.operator"],l=["text","paren.rparen","punctuation.operator","comment"],u={},h={'"':'"',"'":"'"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},f=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},p=function e(t){this.add("braces","insertion",(function(n,r,o,a,c){var l=o.getCursorPosition(),u=a.doc.getLine(l.row);if("{"==c){d(o);var h=o.getSelectionRange(),p=a.doc.getTextRange(h);if(""!==p&&"{"!==p&&o.getWrapBehavioursEnabled())return f(h,p,"{","}");if(e.isSaneInsertion(o,a))return/[\]\}\)]/.test(u[l.column])||o.inMultiSelectMode||t&&t.braces?(e.recordAutoInsert(o,a,"}"),{text:"{}",selection:[1,1]}):(e.recordMaybeInsert(o,a,"{"),{text:"{",selection:[1,1]})}else if("}"==c){if(d(o),"}"==u.substring(l.column,l.column+1))if(null!==a.$findOpeningBracket("}",{column:l.column+1,row:l.row})&&e.isAutoInsertedClosing(l,u,c))return e.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==c||"\r\n"==c){d(o);var m="";if(e.isMaybeInsertedClosing(l,u)&&(m=s.stringRepeat("}",i.maybeInsertedBrackets),e.clearMaybeInsertedClosing()),"}"===u.substring(l.column,l.column+1)){var g=a.findMatchingBracket({row:l.row,column:l.column+1},"}");if(!g)return null;var v=this.$getIndent(a.getLine(g.row))}else{if(!m)return void e.clearMaybeInsertedClosing();v=this.$getIndent(u)}var _=v+a.getTabString();return{text:"\n"+_+"\n"+v+m,selection:[1,_.length,1,_.length]}}e.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,n,r,o){var a=r.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==a){if(d(n),"}"==r.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;i.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(t,n,i,r,o){if("("==o){d(i);var a=i.getSelectionRange(),s=r.doc.getTextRange(a);if(""!==s&&i.getWrapBehavioursEnabled())return f(a,s,"(",")");if(e.isSaneInsertion(i,r))return e.recordAutoInsert(i,r,")"),{text:"()",selection:[1,1]}}else if(")"==o){d(i);var c=i.getCursorPosition(),l=r.doc.getLine(c.row);if(")"==l.substring(c.column,c.column+1))if(null!==r.$findOpeningBracket(")",{column:c.column+1,row:c.row})&&e.isAutoInsertedClosing(c,l,o))return e.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(e,t,n,i,r){var o=i.doc.getTextRange(r);if(!r.isMultiLine()&&"("==o&&(d(n),")"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("brackets","insertion",(function(t,n,i,r,o){if("["==o){d(i);var a=i.getSelectionRange(),s=r.doc.getTextRange(a);if(""!==s&&i.getWrapBehavioursEnabled())return f(a,s,"[","]");if(e.isSaneInsertion(i,r))return e.recordAutoInsert(i,r,"]"),{text:"[]",selection:[1,1]}}else if("]"==o){d(i);var c=i.getCursorPosition(),l=r.doc.getLine(c.row);if("]"==l.substring(c.column,c.column+1))if(null!==r.$findOpeningBracket("]",{column:c.column+1,row:c.row})&&e.isAutoInsertedClosing(c,l,o))return e.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(e,t,n,i,r){var o=i.doc.getTextRange(r);if(!r.isMultiLine()&&"["==o&&(d(n),"]"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("string_dquotes","insertion",(function(e,t,n,i,r){var o=i.$mode.$quotes||h;if(1==r.length&&o[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;d(n);var a=r,s=n.getSelectionRange(),c=i.doc.getTextRange(s);if(!(""===c||1==c.length&&o[c])&&n.getWrapBehavioursEnabled())return f(s,c,a,a);if(!c){var l=n.getCursorPosition(),u=i.doc.getLine(l.row),p=u.substring(l.column-1,l.column),m=u.substring(l.column,l.column+1),g=i.getTokenAt(l.row,l.column),v=i.getTokenAt(l.row,l.column+1);if("\\"==p&&g&&/escape/.test(g.type))return null;var _,b=g&&/string|escape/.test(g.type),y=!v||/string|escape/.test(v.type);if(m==a)(_=b!==y)&&/string\.end/.test(v.type)&&(_=!1);else{if(b&&!y)return null;if(b&&y)return null;var w=i.$mode.tokenRe;w.lastIndex=0;var O=w.test(p);w.lastIndex=0;var C=w.test(p);if(O||C)return null;if(m&&!/[\s;,.})\]\\]/.test(m))return null;_=!0}return{text:_?a+a:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,n,i,r){var o=i.doc.getTextRange(r);if(!r.isMultiLine()&&('"'==o||"'"==o)&&(d(n),i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)==o))return r.end.column++,r}))};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new a(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||"text",c)){var r=new a(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||"text",c))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||"text",l)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,o,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+o.substr(r.column),i.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),o=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,o)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=o.substr(0,r.column)+n,i.maybeInsertedLineEnd=o.substr(r.column),i.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(p,o),t.CstyleBehaviour=p})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,n){"use strict";t.packages={},function(e){var n=/\w{4}/g;for(var i in e)t.packages[i]=e[i].replace(n,"\\u$&")}({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})})),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../tokenizer").Tokenizer,r=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,a=e("../unicode"),s=e("../lib/lang"),c=e("../token_iterator").TokenIterator,l=e("../range").Range,u=function(){this.HighlightRules=r};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp("^["+a.packages.L+a.packages.Mn+a.packages.Mc+a.packages.Nd+a.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+a.packages.L+a.packages.Mn+a.packages.Mc+a.packages.Nd+a.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,i){var r=t.doc,o=!0,a=!0,c=1/0,l=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))m=this.lineCommentStart.map(s.escapeRegExp).join("|"),f=this.lineCommentStart[0];else m=s.escapeRegExp(this.lineCommentStart),f=this.lineCommentStart;m=new RegExp("^(\\s*)(?:"+m+") ?"),u=t.getUseSoftTabs();_=function(e,t){var n=e.match(m);if(n){var i=n[1].length,o=n[0].length;d(e,i,o)||" "!=n[0][o-1]||o--,r.removeInLine(t,i,o)}};var h=f+" ",d=(v=function(e,t){o&&!/\S/.test(e)||(d(e,c,c)?r.insertInLine({row:t,column:c},h):r.insertInLine({row:t,column:c},f))},b=function(e,t){return m.test(e)},function(e,t,n){for(var i=0;t--&&" "==e.charAt(t);)i++;if(i%l!=0)return!1;for(i=0;" "==e.charAt(n++);)i++;return l>2?i%l!=l-1:i%l==0})}else{if(!this.blockComment)return!1;var f=this.blockComment.start,p=this.blockComment.end,m=new RegExp("^(\\s*)(?:"+s.escapeRegExp(f)+")"),g=new RegExp("(?:"+s.escapeRegExp(p)+")\\s*$"),v=function(e,t){b(e,t)||o&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:c},f))},_=function(e,t){var n;(n=e.match(g))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(m))&&r.removeInLine(t,n[1].length,n[0].length)},b=function(e,n){if(m.test(e))return!0;for(var i=t.getTokens(n),r=0;r<i.length;r++)if("comment"===i[r].type)return!0}}function y(e){for(var t=n;t<=i;t++)e(r.getLine(t),t)}var w=1/0;y((function(e,t){var n=e.search(/\S/);-1!==n?(n<c&&(c=n),a&&!b(e,t)&&(a=!1)):w>e.length&&(w=e.length)})),c==1/0&&(c=w,o=!1,a=!1),u&&c%l!=0&&(c=Math.floor(c/l)*l),y(a?_:v)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var o,a,s=(m=new c(t,i.row,i.column)).getCurrentToken(),u=(t.selection,t.selection.toOrientedRange());if(s&&/comment/.test(s.type)){for(var h,d;s&&/comment/.test(s.type);){if(-1!=(g=s.value.indexOf(r.start))){var f=m.getCurrentTokenRow(),p=m.getCurrentTokenColumn()+g;h=new l(f,p,f,p+r.start.length);break}s=m.stepBackward()}var m;for(s=(m=new c(t,i.row,i.column)).getCurrentToken();s&&/comment/.test(s.type);){var g;if(-1!=(g=s.value.indexOf(r.end))){f=m.getCurrentTokenRow(),p=m.getCurrentTokenColumn()+g;d=new l(f,p,f,p+r.end.length);break}s=m.stepForward()}d&&t.remove(d),h&&(t.remove(h),o=h.start.row,a=-r.start.length)}else a=r.start.length,o=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);u.start.row==o&&(u.start.column+=a),u.end.row==o&&(u.end.column+=a),t.selection.fromOrientedRange(u)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;t<n.length;t++)!function(e){var i=n[t],r=e[i];e[n[t]]=function(){return this.$delegator(i,arguments,r)}}(this)},this.$delegator=function(e,t,n){var i=t[0];"string"!=typeof i&&(i=i[0]);for(var r=0;r<this.$embeds.length;r++)if(this.$modes[this.$embeds[r]]){var o=i.split(this.$embeds[r]);if(!o[0]&&o[1]){t[0]=o[1];var a=this.$modes[this.$embeds[r]];return a[e].apply(a,t)}}var s=n.apply(this,t);return n?s:void 0},this.transformAction=function(e,t,n,i,r){if(this.$behaviour){var o=this.$behaviour.getBehaviours();for(var a in o)if(o[a][t]){var s=o[a][t].apply(this,arguments);if(s)return s}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var i in t)for(var r=t[i],o=0,a=r.length;o<a;o++)if("string"===typeof r[o].token)/keyword|support|storage/.test(r[o].token)&&n.push(r[o].regex);else if("object"===typeof r[o].token)for(var s=0,c=r[o].token.length;s<c;s++)if(/keyword|support|storage/.test(r[o].token[s])){i=r[o].regex.match(/\(.+?\)/g)[s];n.push(i.substr(1,i.length-2))}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,i){return(this.$keywordList||this.$createKeywordList()).map((function(e){return{name:e,value:e,score:0,meta:"keyword"}}))},this.$id="ace/mode/text"}).call(u.prototype),t.Mode=u})),ace.define("ace/apply_delta",["require","exports","module"],(function(e,t,n){"use strict";t.applyDelta=function(e,t,n){var i=t.start.row,r=t.start.column,o=e[i]||"";switch(t.action){case"insert":if(1===t.lines.length)e[i]=o.substring(0,r)+t.lines[0]+o.substring(r);else{var a=[i,1].concat(t.lines);e.splice.apply(e,a),e[i]=o.substring(0,r)+e[i],e[i+t.lines.length-1]+=o.substring(r)}break;case"remove":var s=t.end.column,c=t.end.row;i===c?e[i]=o.substring(0,r)+o.substring(s):e.splice(i,c-i+1,o.substring(0,r)+e[c].substring(s))}}})),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,o=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),"undefined"==typeof n?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var i=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&i}i.implement(this,r),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(t){if((t.start.row!=t.end.row||t.start.row==this.row)&&!(t.start.row>this.row)){var n=function(t,n,i){var r="insert"==t.action,o=(r?1:-1)*(t.end.row-t.start.row),a=(r?1:-1)*(t.end.column-t.start.column),s=t.start,c=r?s:t.end;if(e(n,s,i))return{row:n.row,column:n.column};if(e(c,n,!i))return{row:n.row+o,column:n.column+(n.row==c.row?a:0)};return{row:s.row,column:s.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(o.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,a=e("./range").Range,s=e("./anchor").Anchor,c=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new a(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new s(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return void 0==t&&(t=i.length),{row:e,column:t=Math.min(Math.max(t,0),i.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n=0;(e=Math.min(Math.max(e,0),this.getLength()))<this.getLength()?(t=t.concat([""]),n=0):(t=[""].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),i={row:n.row+t.length-1,column:(1==t.length?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:i,action:"insert",lines:t}),this.clonePos(i)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:"remove",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var i=this.clippedPos(e,t),r=this.clippedPos(e,n);return this.applyDelta({start:i,end:r,action:"remove",lines:this.getLinesForRange({start:i,end:r})},!0),this.clonePos(i)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1);var n=(t=Math.min(Math.max(0,t),this.getLength()-1))==this.getLength()-1&&e>0,i=t<this.getLength()-1,r=n?e-1:e,o=n?this.getLine(r).length:0,s=i?t+1:t,c=i?0:this.getLine(s).length,l=new a(r,o,s,c),u=this.$lines.slice(e,t+1);return this.applyDelta({start:l.start,end:l.end,action:"remove",lines:this.getLinesForRange(l)}),u},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof a||(e=a.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!a.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),r(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,i=n.length,r=e.start.row,o=e.start.column,a=0,s=0;;){a=s,s+=t-1;var c=n.slice(a,s);if(s>i){e.lines=c,e.start.row=r+a,e.start.column=o;break}c.push(""),this.applyDelta({start:this.pos(r+a,o),end:this.pos(r+s,o=0),action:e.action,lines:c},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,r=t||0,o=n.length;r<o;r++)if((e-=n[r].length+i)<0)return{row:r,column:e+n[r].length+i};return{row:o-1,column:n[o-1].length}},this.positionToIndex=function(e,t){for(var n=this.$lines||this.getAllLines(),i=this.getNewLineCharacter().length,r=0,o=Math.min(e.row,n.length),a=t||0;a<o;++a)r+=n[a].length+i;return r+e.column}}).call(c.prototype),t.Document=c})),ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/event_emitter").EventEmitter,o=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(n.running){for(var e=new Date,t=n.currentLine,i=-1,r=n.doc,o=t;n.lines[t];)t++;var a=r.getLength(),s=0;for(n.running=!1;t<a;){n.$tokenizeRow(t),i=t;do{t++}while(n.lines[t]);if(++s%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),o<=i&&n.fireUpdateEvent(o,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!==i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(o.prototype),t.BackgroundTokenizer=o})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,o){if(this.regExp)for(var a=o.firstRow,s=o.lastRow,c=a;c<=s;c++){var l=this.cache[c];null==l&&((l=i.getMatchOffsets(n.getLine(c),this.regExp)).length>this.MAX_RANGES&&(l=l.slice(0,this.MAX_RANGES)),l=l.map((function(e){return new r(c,e.offset,c,e.offset+e.length)})),this.cache[c]=l.length?l:"");for(var u=l.length;u--;)t.drawSingleLineMarker(e,l[u].toScreenRange(n),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,o=0,a=this.folds,s=!0;null==t&&(t=this.end.row,n=this.end.column);for(var c=0;c<a.length;c++){if(-1==(r=(i=a[c]).range.compareStart(t,n)))return void e(null,t,n,o,s);if(!e(null,i.start.row,i.start.column,o,s)&&e(i.placeholder,i.start.row,i.start.column,o)||0===r)return;s=!i.sameRow,o=i.end.column}e(null,t,n,o,s)},this.getNextFoldTo=function(e,t){for(var n,i,r=0;r<this.folds.length;r++){if(-1==(i=(n=this.folds[r]).range.compareEnd(e,t)))return{fold:n,kind:"after"};if(0===i)return{fold:n,kind:"inside"}}return null},this.addRemoveChars=function(e,t,n){var i,r,o=this.getNextFoldTo(e,t);if(o)if(i=o.fold,"inside"==o.kind&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){var a=(r=this.folds).indexOf(i);for(0===a&&(this.start.column+=n);a<r.length;a++){if((i=r[a]).start.column+=n,!i.sameRow)return;i.end.column+=n}this.end.column+=n}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||"inside"==n.kind)return null;var i=n.fold,o=this.folds,a=this.foldData,s=o.indexOf(i),c=o[s-1];this.end.row=c.end.row,this.end.column=c.end.column;var l=new r(a,o=o.splice(s,o.length-s));return a.splice(a.indexOf(this)+1,0,l),l},this.merge=function(e){for(var t=e.folds,n=0;n<t.length;n++)this.addFold(t[n]);var i=this.foldData;i.splice(i.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+": ["];return this.folds.forEach((function(t){e.push(" "+t.toString())})),e.push("]"),e.join("\n")},this.idxToPosition=function(e){for(var t=0,n=0;n<this.folds.length;n++){var i=this.folds[n];if((e-=i.start.column-t)<0)return{row:i.start.row,column:i.start.column+e};if((e-=i.placeholder.length)<0)return i.start;t=i.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(r.prototype),t.FoldLine=r})),ace.define("ace/range_list",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("./range").Range.comparePoints,r=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){for(var r=this.ranges,o=n||0;o<r.length;o++){var a=r[o],s=i(e,a.end);if(!(s>0)){var c=i(e,a.start);return 0===s?t&&0!==c?-o-2:o:c>0||0===c&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],n=this.ranges,r=(n=n.sort((function(e,t){return i(e.start,t.start)})))[0],o=1;o<n.length;o++){e=r,r=n[o];var a=i(e.end,r.start);a<0||(0!=a||e.isEmpty()||r.isEmpty())&&(i(e.end,r.end)<0&&(e.end.row=r.end.row,e.end.column=r.end.column),n.splice(o,1),t.push(r),r=e,o--)}return this.ranges=n,t},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var i=this.pointIndex({row:e,column:0});i<0&&(i=-i-1);var r=this.pointIndex({row:t,column:0},i);r<0&&(r=-r-1);for(var o=[],a=i;a<r;a++)o.push(n[a]);return o},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on("change",this.onChange)},this.detach=function(){this.session&&(this.session.removeListener("change",this.onChange),this.session=null)},this.$onChange=function(e){if("insert"==e.action)var t=e.start,n=e.end;else n=e.start,t=e.end;for(var i=t.row,r=n.row-i,o=-t.column+n.column,a=this.ranges,s=0,c=a.length;s<c;s++){if(!((l=a[s]).end.row<i)){if(l.start.row>i)break;if(l.start.row==i&&l.start.column>=t.column&&(l.start.column==t.column&&this.$insertRight||(l.start.column+=o,l.start.row+=r)),l.end.row==i&&l.end.column>=t.column){if(l.end.column==t.column&&this.$insertRight)continue;l.end.column==t.column&&o>0&&s<c-1&&l.end.column>l.start.column&&l.end.column==a[s+1].start.column&&(l.end.column-=o),l.end.column+=o,l.end.row+=r}}}if(0!=r&&s<c)for(;s<c;s++){var l;(l=a[s]).start.row+=r,l.end.row+=r}}}).call(r.prototype),t.RangeList=r})),ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"],(function(e,t,n){"use strict";e("../range").Range;var i=e("../range_list").RangeList,r=e("../lib/oop"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};function a(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}function s(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}r.inherits(o,i),function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach((function(t){t.setFoldLine(e)}))},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach((function(e){t.subFolds.push(e.clone())})),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(!this.range.isEqual(e)){if(!this.range.containsRange(e))throw new Error("A fold can't intersect already existing fold"+e.range+this.range);var t,n;t=e,n=this.start,a(t.start,n),a(t.end,n);for(var i=e.start.row,r=e.start.column,o=0,s=-1;o<this.subFolds.length&&1==(s=this.subFolds[o].range.compare(i,r));o++);var c=this.subFolds[o];if(0==s)return c.addSubFold(e);i=e.range.end.row,r=e.range.end.column;var l=o;for(s=-1;l<this.subFolds.length&&1==(s=this.subFolds[l].range.compare(i,r));l++);this.subFolds[l];if(0==s)throw new Error("A fold can't intersect already existing fold"+e.range+this.range);this.subFolds.splice(o,l-o,e);return e.setFoldLine(this.foldLine),e}},this.restoreRange=function(e){return function(e,t){s(e.start,t),s(e.end,t)}(e,this.start)}}.call(o.prototype)})),ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("./fold_line").FoldLine,o=e("./fold").Fold,a=e("../token_iterator").TokenIterator;t.Folding=function(){this.getFoldAt=function(e,t,n){var i=this.getFoldLine(e);if(!i)return null;for(var r=i.folds,o=0;o<r.length;o++){var a=r[o];if(a.range.contains(e,t)){if(1==n&&a.range.isEnd(e,t))continue;if(-1==n&&a.range.isStart(e,t))continue;return a}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,i=this.$foldData,r=[];t.column+=1,n.column-=1;for(var o=0;o<i.length;o++){var a=i[o].range.compareRange(e);if(2!=a){if(-2==a)break;for(var s=i[o].folds,c=0;c<s.length;c++){var l=s[c];if(-2==(a=l.range.compareRange(e)))break;if(2!=a){if(42==a)break;r.push(l)}}}}return t.column-=1,n.column+=1,r},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach((function(e){t=t.concat(this.getFoldsInRange(e))}),this)}else t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){for(var e=[],t=this.$foldData,n=0;n<t.length;n++)for(var i=0;i<t[n].folds.length;i++)e.push(t[n].folds[i]);return e},this.getFoldStringAt=function(e,t,n,i){if(!(i=i||this.getFoldLine(e)))return null;for(var r,o,a={end:{column:0}},s=0;s<i.folds.length;s++){var c=(o=i.folds[s]).range.compareEnd(e,t);if(-1==c){r=this.getLine(o.start.row).substring(a.end.column,o.start.column);break}if(0===c)return null;a=o}return r||(r=this.getLine(o.start.row).substring(a.end.column)),-1==n?r.substring(0,t-a.end.column):1==n?r.substring(t-a.end.column):r},this.getFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0);i<n.length;i++){var r=n[i];if(r.start.row<=e&&r.end.row>=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0);i<n.length;i++){var r=n[i];if(r.end.row>=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r<n.length;r++){var o=n[r],a=o.end.row,s=o.start.row;if(a>=t){s<t&&(s>=e?i-=t-s:i=0);break}a>=e&&(i-=s>=e?a-s:a-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,a=!1;e instanceof o?n=e:(n=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var s=n.start.row,c=n.start.column,l=n.end.row,u=n.end.column;if(!(s<l||s==l&&c<=u-2))throw new Error("The range has to be at least 2 characters width");var h=this.getFoldAt(s,c,1),d=this.getFoldAt(l,u,-1);if(h&&d==h)return h.addSubFold(n);h&&!h.range.isStart(s,c)&&this.removeFold(h),d&&!d.range.isEnd(l,u)&&this.removeFold(d);var f=this.getFoldsInRange(n.range);f.length>0&&(this.removeFolds(f),f.forEach((function(e){n.addSubFold(e)})));for(var p=0;p<i.length;p++){var m=i[p];if(l==m.start.row){m.addFold(n),a=!0;break}if(s==m.end.row){if(m.addFold(n),a=!0,!n.sameRow){var g=i[p+1];if(g&&g.start.row==l){m.merge(g);break}}break}if(l<=m.start.row)break}return a||(m=this.$addFoldLine(new r(this.$foldData,n))),this.$useWrapMode?this.$updateWrapData(m.start.row,m.start.row):this.$updateRowLengthCache(m.start.row,m.start.row),this.$modified=!0,this._signal("changeFold",{data:n,action:"add"}),n},this.addFolds=function(e){e.forEach((function(e){this.addFold(e)}),this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,i=t.end.row,r=this.$foldData,o=t.folds;if(1==o.length)r.splice(r.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))o.pop(),t.end.row=o[o.length-1].end.row,t.end.column=o[o.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))o.shift(),t.start.row=o[0].start.row,t.start.column=o[0].start.column;else if(e.sameRow)o.splice(o.indexOf(e),1);else{var a=t.split(e.start.row,e.start.column);(o=a.folds).shift(),a.start.row=o[0].start.row,a.start.column=o[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,i):this.$updateRowLengthCache(n,i)),this.$modified=!0,this._signal("changeFold",{data:e,action:"remove"})},this.removeFolds=function(e){for(var t=[],n=0;n<e.length;n++)t.push(e[n]);t.forEach((function(e){this.removeFold(e)}),this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach((function(t){e.restoreRange(t),this.addFold(t)}),this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else for(var o=r;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(n);if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var o=this.doc,a="";return e.walk((function(e,t,n,s){if(!(t<i)){if(t==i){if(n<r)return;s=Math.max(r,s)}a+=null!=e?e:o.getLine(t).substring(s,n)}}),t,n),a},this.getDisplayLine=function(e,t,n,i){var r,o=this.getFoldLine(e);return o?this.getFoldDisplayLine(o,e,t,n,i):(r=this.doc.getLine(e)).substring(i||0,t||r.length)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map((function(t){var n=t.folds.map((function(e){return e.clone()}));return new r(e,n)}))},this.toggleFold=function(e){var t,n,i=this.selection.getRange();if(i.isEmpty()){var r=i.start;if(t=this.getFoldAt(r.row,r.column))return void this.expandFold(t);(n=this.findMatchingBracket(r))?1==i.comparePoint(n)?i.end=n:(i.start=n,i.start.column++,i.end.column--):(n=this.findMatchingBracket({row:r.row,column:r.column+1}))?(1==i.comparePoint(n)?i.end=n:i.start=n,i.start.column++):i=this.getCommentFoldRange(r.row,r.column)||i}else{var o=this.getFoldsInRange(i);if(e&&o.length)return void this.expandFolds(o);1==o.length&&(t=o[0])}if(t||(t=this.getFoldAt(i.start.row,i.start.column)),t&&t.range.toString()==i.toString())this.expandFold(t);else{var a="...";if(!i.isMultiLine()){if((a=this.getTextRange(i)).length<4)return;a=a.trim().substring(0,2)+".."}this.addFold(a,i)}},this.getCommentFoldRange=function(e,t,n){var r=new a(this,e,t),o=r.getCurrentToken(),s=o.type;if(o&&/^comment|string/.test(s)){"comment"==(s=s.match(/comment|string/)[0])&&(s+="|doc-start");var c=new RegExp(s),l=new i;if(1!=n){do{o=r.stepBackward()}while(o&&c.test(o.type));r.stepForward()}if(l.start.row=r.getCurrentTokenRow(),l.start.column=r.getCurrentTokenColumn()+2,r=new a(this,e,t),-1!=n){var u=-1;do{if(o=r.stepForward(),-1==u){var h=this.getState(r.$row);c.test(h)||(u=r.$row)}else if(r.$row>u)break}while(o&&c.test(o.type));o=r.stepBackward()}else o=r.getCurrentToken();return l.end.row=r.getCurrentTokenRow(),l.end.column=r.getCurrentTokenColumn()+o.value.length-2,l}},this.foldAll=function(e,t,n){void 0==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength();for(var r=e=e||0;r<t;r++)if(null==i[r]&&(i[r]=this.getFoldWidget(r)),"start"==i[r]){var o=this.getFoldWidgetRange(r);if(o&&o.isMultiLine()&&o.end.row<=t&&o.start.row>=e){r=o.end.row;try{var a=this.addFold("...",o);a&&(a.collapseChildren=n)}catch(s){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var i,r=e-1;r>=0;){var o=n[r];if(null==o&&(o=n[r]=this.getFoldWidget(r)),"start"==o){var a=this.getFoldWidgetRange(r);if(i||(i=a),a&&a.end.row>=e)break}r--}return{range:-1!==r&&a,firstRange:i}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,n)){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,o=this.getFoldAt(e,-1===r?0:i.length,r);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var a=this.getFoldWidgetRange(e,!0);if(a&&!a.isMultiLine()&&(o=this.getFoldAt(a.start.row,a.start.column,1))&&a.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var s=this.getParentFoldRangeData(e);if(s.range)var c=s.range.start.row+1,l=s.range.end.row;this.foldAll(c,l,t.all?1e4:0)}else t.children?(l=a?a.end.row:this.getLength(),this.foldAll(e+1,l,t.all?1e4:0)):a&&(t.all&&(a.collapseChildren=1e4),this.addFold("...",a));return a}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,o=n.charAt(e.column-1),a=o&&o.match(/([\(\[\{])|([\)\]\}])/);if(a||(o=n.charAt(e.column),e={row:e.row,column:e.column+1},a=o&&o.match(/([\(\[\{])|([\)\]\}])/),i=!1),!a)return null;if(a[1]){if(!(s=this.$findClosingBracket(a[1],e)))return null;t=r.fromPoints(e,s),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{var s;if(!(s=this.$findOpeningBracket(a[2],e)))return null;t=r.fromPoints(s,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],o=1,a=new i(this,t.row,t.column),s=a.getCurrentToken();if(s||(s=a.stepForward()),s){n||(n=new RegExp("(\\.?"+s.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var c=t.column-a.getCurrentTokenColumn()-2,l=s.value;;){for(;c>=0;){var u=l.charAt(c);if(u==r){if(0==(o-=1))return{row:a.getCurrentTokenRow(),column:c+a.getCurrentTokenColumn()}}else u==e&&(o+=1);c-=1}do{s=a.stepBackward()}while(s&&!n.test(s.type));if(null==s)break;c=(l=s.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],o=1,a=new i(this,t.row,t.column),s=a.getCurrentToken();if(s||(s=a.stepForward()),s){n||(n=new RegExp("(\\.?"+s.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var c=t.column-a.getCurrentTokenColumn();;){for(var l=s.value,u=l.length;c<u;){var h=l.charAt(c);if(h==r){if(0==(o-=1))return{row:a.getCurrentTokenRow(),column:c+a.getCurrentTokenColumn()}}else h==e&&(o+=1);c+=1}do{s=a.stepForward()}while(s&&!n.test(s.type));if(null==s)break;c=0}return null}}}})),ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/bidihandler","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/lang"),o=e("./bidihandler").BidiHandler,a=e("./config"),s=e("./lib/event_emitter").EventEmitter,c=e("./selection").Selection,l=e("./mode/text").Mode,u=e("./range").Range,h=e("./document").Document,d=e("./background_tokenizer").BackgroundTokenizer,f=e("./search_highlight").SearchHighlight,p=function e(t,n){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id="session"+ ++e.$uid,this.$foldData.toString=function(){return this.join("\n")},this.on("changeFold",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this),"object"==typeof t&&t.getLine||(t=new h(t)),this.$bidiHandler=new o(this),this.setDocument(t),this.selection=new c(this),a.resetOptions(this),this.setMode(n),a._signal("session",this)};p.$uid=0,function(){i.implement(this,s),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e)return this.$docRowCache=[],void(this.$screenRowCache=[]);var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,i=e.length-1;n<=i;){var r=n+i>>1,o=e[r];if(t>o)n=r+1;else{if(!(t<o))return r;i=r-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);this.$fromUndo||!this.$undoManager||e.ignore||(this.$deltasDoc.push(e),t&&0!=t.length&&this.$deltasFold.push({action:"removeFolds",folds:t}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal("change",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n,i=this.bgTokenizer.getTokens(e),r=0;if(null==t){var o=i.length-1;r=this.getLine(e).length}else for(o=0;o<i.length&&!((r+=i[o].value.length)>=t);o++);return(n=i[o])?(n.index=o,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]="ace_breakpoint";this._signal("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal("changeBreakpoint",{})},this.setBreakpoint=function(e,t){void 0===t&&(t="ace_breakpoint"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal("changeBreakpoint",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal("changeBreakpoint",{})},this.addMarker=function(e,t,n,i){var r=this.$markerId++,o={range:e,type:n||"line",renderer:"function"==typeof n?n:null,clazz:t,inFront:!!i,id:r};return i?(this.$frontMarkers[r]=o,this._signal("changeFrontMarker")):(this.$backMarkers[r]=o,this._signal("changeBackMarker")),r},this.addDynamicMarker=function(e,t){if(e.update){var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal("changeFrontMarker")):(this.$backMarkers[n]=e,this._signal("changeBackMarker")),e}},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(t){var n=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete n[e],this._signal(t.inFront?"changeFrontMarker":"changeBackMarker"))}},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new f(null,"ace_selected-word","text");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,i){"number"!=typeof t&&(n=t,t=e),n||(n="ace_step");var r=new u(e,0,t,1/0);return r.id=this.addMarker(r,n,"fullLine",i),r},this.setAnnotations=function(e){this.$annotations=e,this._signal("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r?\n)/m);this.$autoNewLine=t?t[1]:"\n"},this.getWordRange=function(e,t){var n=this.getLine(e),i=!1;if(t>0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))r=/\s/;else r=this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&n.charAt(o).match(r));o++}for(var a=t;a<n.length&&n.charAt(a).match(r);)a++;return new u(e,o,e,a)},this.getAWordRange=function(e,t){for(var n=this.getWordRange(e,t),i=this.getLine(n.end.row);i.charAt(n.end.column).match(/[ \t]/);)n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption("useWorker",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal("tokenizerUpdate",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&"object"===typeof e){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,i=n.path}else i=e||"ace/mode/text";if(this.$modes["ace/mode/text"]||(this.$modes["ace/mode/text"]=new l),this.$modes[i]&&!n)return this.$onChangeMode(this.$modes[i]),void(t&&t());this.$modeId=i,a.loadModule(["mode",i],function(e){if(this.$modeId!==i)return t&&t();this.$modes[i]&&!n?this.$onChangeMode(this.$modes[i]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[i]=e,e.$id=i),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes["ace/mode/text"],!0)},this.$onChangeMode=function(e,t){if(t||(this.$modeId=e.$id),this.$mode!==e){this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(void 0!==n.addEventListener){var i=this.onReloadTokenizer.bind(this);n.addEventListener("update",i)}if(this.bgTokenizer)this.bgTokenizer.setTokenizer(n);else{this.bgTokenizer=new d(n);var r=this;this.bgTokenizer.addEventListener("update",(function(e){r._signal("tokenizerUpdate",e)}))}this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit("changeMode"))}},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){a.warn("Could not load worker",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){this.$scrollTop===e||isNaN(e)||(this.$scrollTop=e,this._signal("changeScrollTop",e))},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){this.$scrollLeft===e||isNaN(e)||(this.$scrollLeft=e,this._signal("changeScrollLeft",e))},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(null!=this.lineWidgetsWidth)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach((function(t){t&&t.screenWidth>e&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,o=this.$foldData[r],a=o?o.start.row:1/0,s=t.length,c=0;c<s;c++){if(c>a){if((c=o.end.row+1)>=s)break;a=(o=this.$foldData[r++])?o.start.row:1/0}null==n[c]&&(n[c]=this.$getStringScreenWidth(t[c])[0]),n[c]>i&&(i=n[c])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=e.length-1;-1!=i;i--){var r=e[i];"doc"==r.group?(this.doc.revertDeltas(r.deltas),n=this.$getUndoSelection(r.deltas,!0,n)):r.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,i=0;i<e.length;i++){var r=e[i];"doc"==r.group&&(this.doc.applyDeltas(r.deltas),n=this.$getUndoSelection(r.deltas,!1,n))}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,n){function i(e){return t?"insert"!==e.action:"insert"===e.action}var r,o,a=e[0];i(a)?r=u.fromPoints(a.start,a.end):r=u.fromPoints(a.start,a.start);for(var s=1;s<e.length;s++)i(a=e[s])?(o=a.start,-1==r.compare(o.row,o.column)&&r.setStart(o),o=a.end,1==r.compare(o.row,o.column)&&r.setEnd(o),!0):(o=a.start,-1==r.compare(o.row,o.column)&&(r=u.fromPoints(a.start,a.start)),!1);if(null!=n){0===u.comparePoints(n.start,r.start)&&(n.start.column+=r.end.column-r.start.column,n.end.column+=r.end.column-r.start.column);var c=n.compareRange(r);1==c?r.setStart(n.start):-1==c&&r.setEnd(n.end)}return r},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var i=this.getTextRange(e),r=this.getFoldsInRange(e),o=u.fromPoints(t,t);if(!n){this.remove(e);var a=e.start.row-e.end.row;(l=a?-e.end.column:e.start.column-e.end.column)&&(o.start.row==e.end.row&&o.start.column>e.end.column&&(o.start.column+=l),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=l)),a&&o.start.row>=e.end.row&&(o.start.row+=a,o.end.row+=a)}if(o.end=this.insert(o.start,i),r.length){var s=e.start,c=o.start,l=(a=c.row-s.row,c.column-s.column);this.addFolds(r.map((function(e){return(e=e.clone()).start.row==s.row&&(e.start.column+=l),e.end.row==s.row&&(e.end.column+=l),e.start.row+=a,e.end.row+=a,e})))}return o},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var o=this.getLine(r);n.start.row=r,n.end.row=r;for(var a=0;a<i&&" "==o.charAt(a);++a);a<i&&"\t"==o.charAt(a)?(n.start.column=a,n.end.column=a+1):(n.start.column=0,n.end.column=a),this.remove(n)}},this.$moveLines=function(e,t,n){if(e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t),n<0){if((r=this.getRowFoldStart(e+n))<0)return 0;var i=r-e}else if(n>0){var r;if((r=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;i=r-t}else{e=this.$clipRowToDocument(e);i=(t=this.$clipRowToDocument(t))-e+1}var o=new u(e,0,t,Number.MAX_VALUE),a=this.getFoldsInRange(o).map((function(e){return(e=e.clone()).start.row+=i,e.end.row+=i,e})),s=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,s),a.length&&this.addFolds(a),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,o=i.row,a=r.row,s=a-o,c=null;if(this.$updating=!0,0!=s)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(o,s);var l=this.$foldData;c=this.getFoldsInRange(e),this.removeFolds(c);var u=0;if(m=this.getFoldLine(r.row)){m.addRemoveChars(r.row,r.column,i.column-r.column),m.shiftRow(-s);var h=this.getFoldLine(o);h&&h!==m&&(h.merge(m),m=h),u=l.indexOf(m)+1}for(;u<l.length;u++){(m=l[u]).start.row>=r.row&&m.shiftRow(-s)}a=o}else{var d=Array(s);d.unshift(o,0);var f=t?this.$wrapData:this.$rowLengthCache;f.splice.apply(f,d);l=this.$foldData,u=0;if(m=this.getFoldLine(o)){var p=m.range.compareInside(i.row,i.column);0==p?(m=m.split(i.row,i.column))&&(m.shiftRow(s),m.addRemoveChars(a,0,r.column-i.column)):-1==p&&(m.addRemoveChars(o,0,r.column-i.column),m.shiftRow(s)),u=l.indexOf(m)+1}for(;u<l.length;u++){var m;(m=l[u]).start.row>=o&&m.shiftRow(s)}}else s=Math.abs(e.start.column-e.end.column),"remove"===n&&(c=this.getFoldsInRange(e),this.removeFolds(c),s=-s),(m=this.getFoldLine(o))&&m.addRemoveChars(o,i.column,s);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,a):this.$updateRowLengthCache(o,a),c},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(n,i){var r,o,a=this.doc.getAllLines(),s=this.getTabSize(),c=this.$wrapData,l=this.$wrapLimit,u=n;for(i=Math.min(i,a.length-1);u<=i;)(o=this.getFoldLine(u,o))?(r=[],o.walk(function(n,i,o,s){var c;if(null!=n){(c=this.$getDisplayTokens(n,r.length))[0]=e;for(var l=1;l<c.length;l++)c[l]=t}else c=this.$getDisplayTokens(a[i].substring(s,o),r.length);r=r.concat(c)}.bind(this),o.end.row,a[o.end.row].length+1),c[o.start.row]=this.$computeWrapSplits(r,l,s),u=o.end.row+1):(r=this.$getDisplayTokens(a[u]),c[u]=this.$computeWrapSplits(r,l,s),u++)};var e=3,t=4;function n(e){return!(e<4352)&&(e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(n,i,r){if(0==n.length)return[];var o=[],a=n.length,s=0,c=0,l=this.$wrapAsCode,u=this.$indentedSoftWrap,h=i<=Math.max(2*r,8)||!1===u?0:Math.floor(i/2);function d(e){var t=n.slice(s,e),i=t.length;t.join("").replace(/12/g,(function(){i-=1})).replace(/2/g,(function(){i-=1})),o.length||(f=function(){var e=0;if(0===h)return e;if(u)for(var t=0;t<n.length;t++){var i=n[t];if(10==i)e+=1;else{if(11!=i){if(12==i)continue;break}e+=r}}return l&&!1!==u&&(e+=r),Math.min(e,h)}(),o.indent=f),c+=i,o.push(c),s=e}for(var f=0;a-s>i-f;){var p=s+i-f;if(n[p-1]>=10&&n[p]>=10)d(p);else if(n[p]!=e&&n[p]!=t){for(var m=Math.max(p-(i-(i>>2)),s-1);p>m&&n[p]<e;)p--;if(l){for(;p>m&&n[p]<e;)p--;for(;p>m&&9==n[p];)p--}else for(;p>m&&n[p]<10;)p--;p>m?d(++p):(2==n[p=s+i]&&p--,d(p-f))}else{for(;p!=s-1&&n[p]!=e;p--);if(p>s){d(p);continue}for(p=s+i;p<n.length&&n[p]==t;p++);if(p==n.length)break;d(p)}}return o},this.$getDisplayTokens=function(e,t){var i,r=[];t=t||0;for(var o=0;o<e.length;o++){var a=e.charCodeAt(o);if(9==a){i=this.getScreenTabSize(r.length+t),r.push(11);for(var s=1;s<i;s++)r.push(12)}else 32==a?r.push(10):a>39&&a<48||a>57&&a<64?r.push(9):a>=4352&&n(a)?r.push(1,2):r.push(1)}return r},this.$getStringScreenWidth=function(e,t,i){if(0==t)return[0,0];var r,o;for(null==t&&(t=1/0),i=i||0,o=0;o<e.length&&(9==(r=e.charCodeAt(o))?i+=this.getScreenTabSize(i):r>=4352&&n(r)?i+=2:i+=1,!(i>t));o++);return[i,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:void 0},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var i,r,o=0,a=0,s=0,c=0,l=this.$screenRowCache,u=this.$getRowCacheIndex(l,e),h=l.length;if(h&&u>=0){s=l[u],o=this.$docRowCache[u];var d=e>l[h-1]}else d=!h;for(var f=this.getLength()-1,p=this.getNextFoldLine(o),m=p?p.start.row:1/0;s<=e&&!(s+(c=this.getRowLength(o))>e||o>=f);)s+=c,++o>m&&(o=p.end.row+1,m=(p=this.getNextFoldLine(o,p))?p.start.row:1/0),d&&(this.$docRowCache.push(o),this.$screenRowCache.push(s));if(p&&p.start.row<=o)i=this.getFoldDisplayLine(p),o=p.start.row;else{if(s+c<=e||o>f)return{row:f,column:this.getLine(f).length};i=this.getLine(o),p=null}var g=0,v=Math.floor(e-s);if(this.$useWrapMode){var _=this.$wrapData[o];_&&(r=_[v],v>0&&_.length&&(g=_.indent,a=_[v-1]||_[_.length-1],i=i.substring(a)))}return void 0!==n&&this.$bidiHandler.isBidiRow(s+v,o,v)&&(t=this.$bidiHandler.offsetToCol(n)),a+=this.$getStringScreenWidth(i,t-g)[1],this.$useWrapMode&&a>=r&&(a=r-1),p?p.idxToPosition(a):{row:o,column:a}},this.documentToScreenPosition=function(e,t){if("undefined"===typeof t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i,r=0,o=null;(i=this.getFoldAt(e,t,1))&&(e=i.start.row,t=i.start.column);var a,s=0,c=this.$docRowCache,l=this.$getRowCacheIndex(c,e),u=c.length;if(u&&l>=0){s=c[l],r=this.$screenRowCache[l];var h=e>c[u-1]}else h=!u;for(var d=this.getNextFoldLine(s),f=d?d.start.row:1/0;s<e;){if(s>=f){if((a=d.end.row+1)>e)break;f=(d=this.getNextFoldLine(a,d))?d.start.row:1/0}else a=s+1;r+=this.getRowLength(s),s=a,h&&(this.$docRowCache.push(s),this.$screenRowCache.push(r))}var p="";d&&s>=f?(p=this.getFoldDisplayLine(d,e,t),o=d.start.row):(p=this.getLine(e).substring(0,t),o=e);var m=0;if(this.$useWrapMode){var g=this.$wrapData[o];if(g){for(var v=0;p.length>=g[v];)r++,v++;p=p.substring(g[v-1]||0,p.length),m=v>0?g.indent:0}}return{row:r,column:m+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,i=0,r=(s=0,(t=this.$foldData[s++])?t.start.row:1/0);i<n;){var o=this.$wrapData[i];e+=o?o.length+1:1,++i>r&&(i=t.end.row+1,r=(t=this.$foldData[s++])?t.start.row:1/0)}else{e=this.getLength();for(var a=this.$foldData,s=0;s<a.length;s++)e-=(t=a[s]).end.row-t.start.row}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){this.$enableVarChar&&(this.$getStringScreenWidth=function(t,n,i){if(0===n)return[0,0];var r,o;for(n||(n=1/0),i=i||0,o=0;o<t.length&&!((i+="\t"===(r=t.charAt(o))?this.getScreenTabSize(i):e.getCharacterWidth(r))>n);o++);return[i,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),a.defineOptions(p.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),o=e("./range").Range,a=function(){this.$options={}};(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,a){return i=new o(e,n,r,a),!(n==a&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start))||(i=null,!1)})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),a=[],s=t.re;if(t.$isMultiLine){var c,l=s.length,u=r.length-l;e:for(var h=s.offset||0;h<=u;h++){for(var d=0;d<l;d++)if(-1==r[h+d].search(s[d]))continue e;var f=r[h],p=r[h+l-1],m=f.length-f.match(s[0])[0].length,g=p.match(s[l-1])[0].length;c&&c.end.row===h&&c.end.column>m||(a.push(c=new o(h,m,h+l-1,g)),l>2&&(h=h+l-2))}}else for(var v=0;v<r.length;v++){var _=i.getMatchOffsets(r[v],s);for(d=0;d<_.length;d++){var b=_[d];a.push(new o(v,b.offset,v,b.offset+b.length))}}if(n){var y=n.start.column,w=n.start.column;for(v=0,d=a.length-1;v<d&&a[v].start.column<y&&a[v].start.row==n.start.row;)v++;for(;v<d&&a[d].end.column>w&&a[d].end.row==n.end.row;)d--;for(a=a.slice(v,d+1),v=0,d=a.length;v<d;v++)a[v].start.row+=n.start.row,a[v].end.row+=n.start.row}return a},this.replace=function(e,t){var n=this.$options,i=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(i){var r=i.exec(e);if(!r||r[0].length!=e.length)return null;if(t=e.replace(i,t),n.preserveCase){t=t.split("");for(var o=Math.min(e.length,e.length);o--;){var a=e[o];a&&a.toLowerCase()!=a?t[o]=t[o].toUpperCase():t[o]=t[o].toLowerCase()}t=t.join("")}return t}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=i.escapeRegExp(n)),e.wholeWord&&(n=function(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}(n,e));var r=e.caseSensitive?"gm":"gmi";if(e.$isMultiLine=!t&&/[\n\r]/.test(n),e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,r);try{var o=new RegExp(n,r)}catch(a){o=!1}return e.re=o},this.$assembleMultilineRegExp=function(e,t){for(var n=e.replace(/\r\n|\r|\n/g,"$\n^").split("\n"),i=[],r=0;r<n.length;r++)try{i.push(new RegExp(n[r],t))}catch(o){return!1}return i},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var i=1==t.backwards,r=0!=t.skipCurrent,o=t.range,a=t.start;a||(a=o?o[i?"end":"start"]:e.selection.getRange()),a.start&&(a=a[r!=i?"end":"start"]);var s=o?o.start.row:0,c=o?o.end.row:e.getLength()-1;if(i)var l=function(e){var n=a.row;if(!h(n,a.column,e)){for(n--;n>=s;n--)if(h(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=c,s=a.row;n>=s;n--)if(h(n,Number.MAX_VALUE,e))return}};else l=function(e){var n=a.row;if(!h(n,a.column,e)){for(n+=1;n<=c;n++)if(h(n,0,e))return;if(0!=t.wrap)for(n=s,c=a.row;n<=c;n++)if(h(n,0,e))return}};if(t.$isMultiLine)var u=n.length,h=function(t,r,o){var a=i?t-u+1:t;if(!(a<0)){var s=e.getLine(a),c=s.search(n[0]);if(!(!i&&c<r||-1===c)){for(var l=1;l<u;l++)if(-1==(s=e.getLine(a+l)).search(n[l]))return;var h=s.match(n[u-1])[0].length;if(!(i&&h>r))return!!o(a,c,a+u-1,h)||void 0}}};else if(i)h=function(t,i,r){var o,a=e.getLine(t),s=[],c=0;for(n.lastIndex=0;o=n.exec(a);){var l=o[0].length;if(c=o.index,!l){if(c>=a.length)break;n.lastIndex=c+=1}if(o.index+l>i)break;s.push(o.index,l)}for(var u=s.length-1;u>=0;u-=2){var h=s[u-1];if(r(t,h,t,h+(l=s[u])))return!0}};else h=function(t,i,r){var o,a=e.getLine(t),s=i;for(n.lastIndex=i;o=n.exec(a);){var c=o[0].length;if(r(t,s=o.index,t,s+c))return!0;if(!c&&(n.lastIndex=s+=1,s>=a.length))return!1}};return{forEach:l}}}).call(a.prototype),t.Search=a})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),o=i.KEY_MODS;function a(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function s(e,t){a.call(this,e,t),this.$singleCommand=!1}s.prototype=a.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"===typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var o=i[r];if(o==e)delete i[r];else if(Array.isArray(o)){var a=o.indexOf(e);-1!=a&&(o.splice(a,1),1==o.length&&(i[r]=o[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(void 0==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=o[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var a=this.parseKeys(e),s=o[a.hashId]+a.key;this._addCommandToBinding(i+s,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,o=this.commandKeyBinding;if(n)if(!o[t]||this.$singleCommand)o[t]=n;else{Array.isArray(o[t])?-1!=(r=o[t].indexOf(n))&&o[t].splice(r,1):o[t]=[o[t]],"number"!=typeof i&&(i=e(n));var a=o[t];for(r=0;r<a.length;r++){if(e(a[r])>i)break}a.splice(r,0,n)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"===typeof n)return this.bindKey(n,t);"function"===typeof n&&(n={exec:n}),"object"===typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var o=0,a=t.length;a--;){var s=i.KEY_MODS[t[a]];if(null==s)return"undefined"!=typeof console&&console.error("invalid modifier "+t[a]+" in "+e),!1;o|=s}return{key:n,hashId:o}},this.findKeyCommand=function(e,t){var n=o[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=o[t]+n,a=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,a=this.commandKeyBinding[e.$keyChain]||a),!a||"chainKeys"!=a&&"chainKeys"!=a[a.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:a}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(a.prototype),t.HashHandler=a,t.MultiHashHandler=s})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,o=e("../lib/event_emitter").EventEmitter,a=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(a,r),function(){i.implement(this,o),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"===typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(a.prototype),t.CommandManager=a})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),o=e("../range").Range;function a(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:a("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:a("Alt-E","F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:a("Alt-Shift-E","Shift-F4"),exec:function(e){r.loadModule("ace/ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:a("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:a(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:a("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:a("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:a("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:a("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:a("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:a(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:a("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:a("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:a("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:a("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:a("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:a("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:a("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:a("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:a("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:a("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:a("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:a("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:a("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:a("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:a("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:a("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:a("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:a("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:a("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:a("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:a("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:a("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:a("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:a("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:a("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:a("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:a("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:a(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:a("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:a(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:a("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:a("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:a("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:a("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:a("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:a("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:a("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:a(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:a("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:a("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:a("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:a("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:a("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:a("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:a("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:a("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",bindKey:a("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:a("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:a("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:a("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:a("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:a("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:a("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:a("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:a("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:a("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:a("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",bindKey:a("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",bindKey:a("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:a("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:a("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:a("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:a("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:a("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:a("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:a(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:a("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:a("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:a("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:a("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:a(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),a=e.session.doc.getLine(n.row).length,s=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,c=e.session.doc.getLine(n.row),l=n.row+1;l<=r.row+1;l++){var u=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(l)));0!==u.length&&(u=" "+u),c+=u}r.row+1<e.session.doc.getLength()-1&&(c+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new o(n.row,0,r.row+2,0),c),s>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+s)):(a=e.session.doc.getLine(n.row).length>a?a+1:a,e.selection.moveCursorTo(n.row,a))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:a(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var a=0;a<i.length;a++)a==i.length-1&&(i[a].end.row===t&&i[a].end.column===n||r.push(new o(i[a].end.row,i[a].end.column,t,n))),0===a?0===i[a].start.row&&0===i[a].start.column||r.push(new o(0,0,i[a].start.row,i[a].start.column)):r.push(new o(i[a-1].end.row,i[a-1].end.column,i[a].start.row,i[a].start.column));e.exitMultiSelectMode(),e.clearSelection();for(a=0;a<r.length;a++)e.selection.addRange(r[a],!1)},readOnly:!0,scrollIntoView:"none"}]})),ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"],(function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var i=e("./lib/oop"),r=e("./lib/dom"),o=e("./lib/lang"),a=e("./lib/useragent"),s=e("./keyboard/textinput").TextInput,c=e("./mouse/mouse_handler").MouseHandler,l=e("./mouse/fold_handler").FoldHandler,u=e("./keyboard/keybinding").KeyBinding,h=e("./edit_session").EditSession,d=e("./search").Search,f=e("./range").Range,p=e("./lib/event_emitter").EventEmitter,m=e("./commands/command_manager").CommandManager,g=e("./commands/default_commands").commands,v=e("./config"),_=e("./token_iterator").TokenIterator,b=function e(t,n){var i=t.getContainerElement();this.container=i,this.renderer=t,this.id="editor"+ ++e.$uid,this.commands=new m(a.isMac?"mac":"win",g),"object"==typeof document&&(this.textInput=new s(t.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new c(this),new l(this)),this.keyBinding=new u(this),this.$blockScrolling=0,this.$search=(new d).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on("exec",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=o.delayedCall(function(){this._signal("input",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on("change",(function(e,t){t._$emitInputEvent.schedule(31)})),this.setSession(n||new h("")),v.resetOptions(this),v._signal("editor",this)};b.$uid=0,function(){i.implement(this,p),this.$initOperationListeners=function(){this.selections=[],this.commands.on("exec",this.startOperation.bind(this),!0),this.commands.on("afterExec",this.endOperation.bind(this),!0),this.$opResetTimer=o.delayedCall(this.endOperation.bind(this)),this.on("change",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on("changeSelection",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&void 0!==this.curOp.command.scrollIntoView&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&!1===e.returnValue)return this.curOp=null;this._signal("beforeEndOperation");var t=this.curOp.command;t.name&&this.$blockScrolling>0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var i=this.selection.getRange(),r=this.renderer.layerConfig;(i.start.row>=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"===typeof e){this.$keybindingId=e;var n=this;v.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new f(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)i=t.$mode.getMatching(e.session);i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new _(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward())){var o=r.value,a=0,s=i.stepBackward();if("<"==s.value)do{s=r,(r=i.stepForward())&&r.value===o&&-1!==r.type.indexOf("tag-name")&&("<"===s.value?a++:"</"===s.value&&a--)}while(r&&a>=0);else{do{r=s,s=i.stepBackward(),r&&r.value===o&&-1!==r.type.indexOf("tag-name")&&("<"===s.value?a++:"</"===s.value&&a--)}while(s&&a<=0);i.stepForward()}if(!r)return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);var c=i.getCurrentTokenRow(),l=i.getCurrentTokenColumn(),u=new f(c,l,c,l+r.value.length),h=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&void 0!=h&&0!==u.compareRange(h.range)&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),u&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(u,"ace_bracket","text"))}}}),50)}},this.focus=function(){var e=this;setTimeout((function(){e.textInput.focus()})),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus",e))},this.onBlur=function(e){this.$isFocused&&(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur",e))},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:1/0;this.renderer.updateLines(e.start.row,n,t),this._signal("change",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(v.warn("Automatically scrolling cursor into view after selection change","this will be disabled in the next version","set editor.$blockScrolling = Infinity to disable this message"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal("changeSelection")},this.$updateHighlightActiveLine=function(){var e,t=this.getSession();if(this.$highlightActiveLine&&("line"==this.$selectionStyle&&this.selection.isMultiLine()||(e=this.getCursorPosition()),!this.renderer.$maxLines||1!==this.session.getLength()||this.renderer.$minLines>1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new f(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column-1,i=t.end.column+1,r=e.getLine(t.start.row),o=r.length,a=r.substring(Math.max(n,0),Math.min(i,o));if(!(n>=0&&/^[\w\d]/.test(a)||i<=o&&/[\w\d]$/.test(a)))if(a=r.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(a))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:a})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),i=this.selection.rangeList.ranges;if(n.length>i.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var r=i.length;r--;){var o=i[r];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,n[r])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,i=n.getMode(),r=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=i.transformAction(n.getState(r.row),"insertion",this,n,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()&&-1==e.indexOf("\n")){(a=new f.fromPoints(r,r)).end.column+=e.length,this.session.remove(a)}}else{var a=this.getSelectionRange();r=this.session.remove(a),this.clearSelection()}if("\n"==e||"\r\n"==e){var s=n.getLine(r.row);if(r.column>s.search(/\S|$/)){var c=s.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+c)}}this.clearSelection();var l=r.column,u=n.getState(r.row),h=(s=n.getLine(r.row),i.checkOutdent(u,s,e));n.insert(r,e);if(o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new f(r.row,l+o.selection[0],r.row,l+o.selection[1])):this.selection.setSelectionRange(new f(r.row+o.selection[0],o.selection[1],r.row+o.selection[2],o.selection[3]))),n.getDocument().isNewLine(e)){var d=i.getNextLineIndent(u,s.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},d)}h&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var o=n.getTextRange(t);if("\n"==o[o.length-1]){var a=n.getLine(t.end.row);/^\s+$/.test(a)&&(t.end.column=a.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);t<r.length?(n=r.charAt(t)+r.charAt(t-1),i=new f(e.row,t-1,e.row,t+1)):(n=r.charAt(t-1)+r.charAt(t-2),i=new f(e.row,t-2,e.row,t)),this.session.replace(i,n),this.session.selection.moveToPosition(i.end)}}},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row)){if(t.start.column<t.end.column){var n=e.getTextRange(t);if(!/^\s+$/.test(n)){u=this.$getSelectedRows();return void e.indentRows(u.first,u.last,"\t")}}var i=e.getLine(t.start.row),r=t.start,a=e.getTabSize(),s=e.documentToScreenColumn(r.row,r.column);if(this.session.getUseSoftTabs())var c=a-s%a,l=o.stringRepeat(" ",c);else{for(c=s%a;" "==i[t.start.column-1]&&c;)t.start.column--,c--;this.selection.setSelectionRange(t),l="\t"}return this.insert(l)}var u=this.$getSelectedRows();e.indentRows(u.first,u.last,"\t")},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,"\t")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){for(var e=this.$getSelectedRows(),t=this.session,n=[],i=e.first;i<=e.last;i++)n.push(t.getLine(i));n.sort((function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0}));var r=new f(0,0,0,0);for(i=e.first;i<=e.last;i++){var o=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=o.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;for(var i=this.session.getLine(e);n.lastIndex<t;){var r=n.exec(i);if(r.index<=t&&r.index+r[0].length>=t)return{value:r[0],start:r.index,end:r.index+r[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new f(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var o=this.getNumberAt(t,n);if(o){var a=o.value.indexOf(".")>=0?o.start+o.value.indexOf(".")+1:o.end,s=o.start+o.value.length-a,c=parseFloat(o.value);c*=Math.pow(10,s),a!==o.end&&n<a?e*=Math.pow(10,o.end-n-1):e*=Math.pow(10,o.end-n),c+=e;var l=(c/=Math.pow(10,s)).toFixed(s),u=new f(t,o.start,t,o.end);this.session.replace(u,l),this.moveCursorTo(t,Math.max(o.start+1,n+l.length-o.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),i=e.isBackwards();if(n.isEmpty()){var r=n.start.row;t.duplicateLines(r,r)}else{var o=i?n.start:n.end,a=t.insert(o,t.getTextRange(n),!1);n.start=o,n.end=a,e.setSelectionRange(n,i)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,i,r=this.selection;if(!r.inMultiSelectMode||this.inVirtualSelectionMode){var o=r.toOrientedRange();n=this.$getSelectedRows(o),i=this.session.$moveLines(n.first,n.last,t?0:e),t&&-1==e&&(i=0),o.moveBy(i,0),r.fromOrientedRange(o)}else{var a=r.rangeList.ranges;r.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var s=0,c=0,l=a.length,u=0;u<l;u++){var h=u;a[u].moveBy(s,0);for(var d=(n=this.$getSelectedRows(a[u])).first,f=n.last;++u<l;){c&&a[u].moveBy(c,0);var p=this.$getSelectedRows(a[u]);if(t&&p.first!=f)break;if(!t&&p.first>f+1)break;f=p.last}for(u--,s=this.session.$moveLines(d,f,t?0:e),t&&-1==e&&(h=u+1);h<=u;)a[h].moveBy(s,0),h++;t||(s=0),c+=s}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection()),this.$blockScrolling--;var o=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new _(this.session,n.row,n.column),r=i.getCurrentToken(),o=r||i.stepForward();if(o){var a,s,c=!1,l={},u=n.column-o.start,h={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;u<o.value.length&&!c;u++)if(h[o.value[u]])switch(s=h[o.value[u]]+"."+o.type.replace("rparen","lparen"),isNaN(l[s])&&(l[s]=0),o.value[u]){case"(":case"[":case"{":l[s]++;break;case")":case"]":case"}":l[s]--,-1===l[s]&&(a="bracket",c=!0)}}else o&&-1!==o.type.indexOf("tag-name")&&(isNaN(l[o.value])&&(l[o.value]=0),"<"===r.value?l[o.value]++:"</"===r.value&&l[o.value]--,-1===l[o.value]&&(a="tag",c=!0));c||(r=o,o=i.stepForward(),u=0)}while(o&&!c);if(a){var d,p;if("bracket"===a)(d=this.session.getBracketRange(n))||(p=(d=new f(i.getCurrentTokenRow(),i.getCurrentTokenColumn()+u-1,i.getCurrentTokenRow(),i.getCurrentTokenColumn()+u-1)).start,(t||p.row===n.row&&Math.abs(p.column-n.column)<2)&&(d=this.session.getBracketRange(p)));else if("tag"===a){if(!o||-1===o.type.indexOf("tag-name"))return;var m=o.value;if(0===(d=new f(i.getCurrentTokenRow(),i.getCurrentTokenColumn()-2,i.getCurrentTokenRow(),i.getCurrentTokenColumn()-2)).compare(n.row,n.column)){c=!1;do{o=r,(r=i.stepBackward())&&(-1!==r.type.indexOf("tag-close")&&d.setEnd(i.getCurrentTokenRow(),i.getCurrentTokenColumn()+1),o.value===m&&-1!==o.type.indexOf("tag-name")&&("<"===r.value?l[m]++:"</"===r.value&&l[m]--,0===l[m]&&(c=!0)))}while(r&&!c)}o&&o.type.indexOf("tag-name")&&(p=d.start).row==n.row&&Math.abs(p.column-n.column)<2&&(p=d.end)}(p=d&&d.cursor||p)&&(e?d&&t?this.selection.setRange(d):d&&d.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(p.row,p.column):this.selection.moveTo(p.row,p.column))}}},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorLeft();else{var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateRight=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorRight();else{var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),i=0;return n?(this.$tryReplace(n,e)&&(i=1),null!==n&&(this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),i):i},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),i=0;if(!n.length)return i;this.$blockScrolling+=1;var r=this.getSelectionRange();this.selection.moveTo(0,0);for(var o=n.length-1;o>=0;--o)this.$tryReplace(n[o],e)&&i++;return this.selection.setSelectionRange(r),this.$blockScrolling-=1,i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(r)||this.$search.$options.needle)||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,n),o):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var o=this.on("changeSelection",(function(){i=!0})),a=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),s=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,o=e.$cursorLayer.$pixelPos,a=e.layerConfig,s=o.top-a.offset;null!=(i=o.top>=0&&s+t.top<0||!(o.top<a.height&&o.top+t.top+a.lineHeight>window.innerHeight)&&null)&&(r.style.top=s+"px",r.style.left=o.left+"px",r.style.height=a.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",o),this.renderer.off("afterRender",s),this.renderer.off("beforeRender",a))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(b.prototype),v.defineOptions(b.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=b})),ace.define("ace/undomanager",["require","exports","module"],(function(e,t,n){"use strict";var i=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){for(var n=new Array(e.length),i=0;i<e.length;i++){for(var r=e[i],o={group:r.group,deltas:new Array(r.length)},a=0;a<r.deltas.length;a++){var s=r.deltas[a];o.deltas[a]=t(s)}n[i]=o}return n}this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(this.$deserializeDeltas(t),e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(i.prototype),t.UndoManager=i})),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),o=e("../lib/lang"),a=e("../lib/event_emitter").EventEmitter,s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){r.implement(this,a),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],i=n.row,r=this.$annotations[i];r||(r=this.$annotations[i]={text:[]});var a=n.text;a=a?o.escapeHTML(a):n.html||"",-1===r.text.indexOf(a)&&r.text.push(a);var s=n.type;"error"==s?r.className=" ace_error":"warning"==s&&" ace_error"!=r.className?r.className=" ace_warning":"info"!=s||r.className||(r.className=" ace_info")}},this.$updateAnnotations=function(e){if(this.$annotations.length){var t=e.start.row,n=e.end.row-t;if(0===n);else if("remove"==e.action)this.$annotations.splice(t,n+1,null);else{var i=new Array(n+1);i.unshift(t,1),this.$annotations.splice.apply(this.$annotations,i)}}},this.update=function(e){for(var t=this.session,n=e.firstRow,r=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),o=t.getNextFoldLine(n),a=o?o.start.row:1/0,s=this.$showFoldWidgets&&t.foldWidgets,c=t.$breakpoints,l=t.$decorations,u=t.$firstLineNumber,h=0,d=t.gutterRenderer||this.$renderer,f=null,p=-1,m=n;;){if(m>a&&(m=o.end.row+1,a=(o=t.getNextFoldLine(m,o))?o.start.row:1/0),m>r){for(;this.$cells.length>p+1;)f=this.$cells.pop(),this.element.removeChild(f.element);break}(f=this.$cells[++p])||((f={element:null,textNode:null,foldWidget:null}).element=i.createElement("div"),f.textNode=document.createTextNode(""),f.element.appendChild(f.textNode),this.element.appendChild(f.element),this.$cells[p]=f);var g="ace_gutter-cell ";if(c[m]&&(g+=c[m]),l[m]&&(g+=l[m]),this.$annotations[m]&&(g+=this.$annotations[m].className),f.element.className!=g&&(f.element.className=g),(_=t.getRowLength(m)*e.lineHeight+"px")!=f.element.style.height&&(f.element.style.height=_),s){var v=s[m];null==v&&(v=s[m]=t.getFoldWidget(m))}if(v){f.foldWidget||(f.foldWidget=i.createElement("span"),f.element.appendChild(f.foldWidget));g="ace_fold-widget ace_"+v;"start"==v&&m==a&&m<o.end.row?g+=" ace_closed":g+=" ace_open",f.foldWidget.className!=g&&(f.foldWidget.className=g);var _=e.lineHeight+"px";f.foldWidget.style.height!=_&&(f.foldWidget.style.height=_)}else f.foldWidget&&(f.element.removeChild(f.foldWidget),f.foldWidget=null);var b=h=d?d.getText(t,m):m+u;b!==f.textNode.data&&(f.textNode.data=b),m++}this.element.style.height=e.minHeight+"px",(this.$fixedWidth||t.$useWrapMode)&&(h=t.getLength()+u);var y=d?d.getWidth(t,h,e):h.toString().length*e.characterWidth,w=this.$padding||this.$computePadding();(y+=w.left+w.right)===this.gutterWidth||isNaN(y)||(this.gutterWidth=y,this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._emit("changeGutterWidth",y))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer="",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return""},getText:function(){return""}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?i.addCssClass(this.element,"ace_folding-enabled"):i.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=i.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();return e.x<t.left+n.left?"markers":this.$showFoldWidgets&&e.x>n.right-t.right?"foldWidgets":void 0}}).call(s.prototype),t.Gutter=s})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),o=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var n in this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var o=this.$getTop(r.start.row,e),a=this.$padding+(this.session.$bidiHandler.isBidiRow(r.start.row)?this.session.$bidiHandler.getPosLeft(r.start.column):r.start.column*e.characterWidth);i.renderer(t,r,a,o,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.session.$bidiHandler.isBidiRow(r.start.row)?this.drawBidiSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,r,o){for(var a=this.session,s=t.start.row,c=t.end.row,l=s,u=0,h=0,d=a.getScreenLastRowColumn(l),f=null,p=new i(l,t.start.column,l,h);l<=c;l++)p.start.row=p.end.row=l,p.start.column=l==s?t.start.column:a.getRowWrapIndent(l),p.end.column=d,u=h,h=d,d=l+1<c?a.getScreenLastRowColumn(l+1):l==c?0:t.end.column,f=n+(l==s?" ace_start":"")+" ace_br"+((l==s||l==s+1&&t.start.column?1:0)|(u<h?2:0)|(h>d?4:0)|(l==c?8:0)),this.session.$bidiHandler.isBidiRow(l)?this.drawBidiSingleLineMarker(e,p,f,r,l==c?0:1,o):this.drawSingleLineMarker(e,p,f,r,l==c?0:1,o)},this.drawMultiLineMarker=function(e,t,n,i,r){var o,a,s,c=this.$padding;(r=r||"",this.session.$bidiHandler.isBidiRow(t.start.row))?((l=t.clone()).end.row=l.start.row,l.end.column=this.session.getLine(l.start.row).length,this.drawBidiSingleLineMarker(e,l,n+" ace_br1 ace_start",i,null,r)):(o=i.lineHeight,a=this.$getTop(t.start.row,i),s=c+t.start.column*i.characterWidth,e.push("<div class='",n," ace_br1 ace_start' style='","height:",o,"px;","right:0;","top:",a,"px;","left:",s,"px;",r,"'></div>"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var l;(l=t.clone()).start.row=l.end.row,l.start.column=0,this.drawBidiSingleLineMarker(e,l,n+" ace_br12",i,null,r)}else{var u=t.end.column*i.characterWidth;o=i.lineHeight,a=this.$getTop(t.end.row,i),e.push("<div class='",n," ace_br12' style='","height:",o,"px;","width:",u,"px;","top:",a,"px;","left:",c,"px;",r,"'></div>")}if(!((o=(t.end.row-t.start.row-1)*i.lineHeight)<=0)){a=this.$getTop(t.start.row+1,i);var h=(t.start.column?1:0)|(t.end.column?0:8);e.push("<div class='",n,h?" ace_br"+h:"","' style='","height:",o,"px;","right:0;","top:",a,"px;","left:",c,"px;",r,"'></div>")}},this.drawSingleLineMarker=function(e,t,n,i,r,o){var a=i.lineHeight,s=(t.end.column+(r||0)-t.start.column)*i.characterWidth,c=this.$getTop(t.start.row,i),l=this.$padding+t.start.column*i.characterWidth;e.push("<div class='",n,"' style='","height:",a,"px;","width:",s,"px;","top:",c,"px;","left:",l,"px;",o||"","'></div>")},this.drawBidiSingleLineMarker=function(e,t,n,i,r,o){var a=i.lineHeight,s=this.$getTop(t.start.row,i),c=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(t){e.push("<div class='",n,"' style='","height:",a,"px;","width:",t.width+(r||0),"px;","top:",s,"px;","left:",c+t.left,"px;",o||"","'></div>")}))},this.drawFullLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),a=i.lineHeight;t.start.row!=t.end.row&&(a+=this.$getTop(t.end.row,i)-o),e.push("<div class='",n,"' style='","height:",a,"px;","top:",o,"px;","left:0;right:0;",r||"","'></div>")},this.drawScreenLineMarker=function(e,t,n,i,r){var o=this.$getTop(t.start.row,i),a=i.lineHeight;e.push("<div class='",n,"' style='","height:",a,"px;","top:",o,"px;","left:0;right:0;",r||"","'></div>")}}).call(o.prototype),t.Marker=o})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),o=e("../lib/lang"),a=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){i.implement(this,a),this.EOF_CHAR="\xb6",this.EOL_CHAR_LF="\xac",this.EOL_CHAR_CRLF="\xa4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2014",this.SPACE_CHAR="\xb7",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;n<e+1;n++)this.showInvisibles?t.push("<span class='ace_invisible ace_invisible_tab'>"+o.stringRepeat(this.TAB_CHAR,n)+"</span>"):t.push(o.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var i="ace_indent-guide",r="",a="";if(this.showInvisibles){i+=" ace_invisible",r=" ace_invisible_space",a=" ace_invisible_tab";var s=o.stringRepeat(this.SPACE_CHAR,this.tabSize),c=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else c=s=o.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]="<span class='"+i+r+"'>"+s+"</span>",this.$tabStrings["\t"]="<span class='"+i+a+"'>"+c+"</span>"}},this.updateLines=function(e,t,n){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var i=Math.max(t,e.firstRow),r=Math.min(n,e.lastRow),o=this.element.childNodes,a=0,s=e.firstRow;s<i;s++){if(c=this.session.getFoldLine(s)){if(c.containsRow(i)){i=c.start.row;break}s=c.end.row}a++}s=i;for(var c,l=(c=this.session.getNextFoldLine(s))?c.start.row:1/0;s>l&&(s=c.end.row+1,l=(c=this.session.getNextFoldLine(s,c))?c.start.row:1/0),!(s>r);){var u=o[a++];if(u){var h=[];this.$renderLine(h,s,!this.$useLineGroups(),s==l&&c),u.style.height=e.lineHeight*this.session.getRowLength(s)+"px",u.innerHTML=h.join("")}s++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var n=this.element;if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)n.removeChild(n.lastChild);if(e.firstRow<t.firstRow){var r=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r)}if(e.lastRow>t.lastRow){r=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(r)}},this.$renderLinesFragment=function(e,t,n){for(var i=this.element.ownerDocument.createDocumentFragment(),o=t,a=this.session.getNextFoldLine(o),s=a?a.start.row:1/0;o>s&&(o=a.end.row+1,s=(a=this.session.getNextFoldLine(o,a))?a.start.row:1/0),!(o>n);){var c=r.createElement("div"),l=[];if(this.$renderLine(l,o,!1,o==s&&a),c.innerHTML=l.join(""),this.$useLineGroups())c.className="ace_line_group",i.appendChild(c),c.style.height=e.lineHeight*this.session.getRowLength(o)+"px";else for(;c.firstChild;)i.appendChild(c.firstChild);o++}return i},this.update=function(e){this.config=e;for(var t=[],n=e.firstRow,i=e.lastRow,r=n,o=this.session.getNextFoldLine(r),a=o?o.start.row:1/0;r>a&&(r=o.end.row+1,a=(o=this.session.getNextFoldLine(r,o))?o.start.row:1/0),!(r>i);)this.$useLineGroups()&&t.push("<div class='ace_line_group' style='height:",e.lineHeight*this.session.getRowLength(r),"px'>"),this.$renderLine(t,r,!1,r==a&&o),this.$useLineGroups()&&t.push("</div>"),r++;this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){var r=this,a=i.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,(function(e,n,i,a,s){if(n)return r.showInvisibles?"<span class='ace_invisible ace_invisible_space'>"+o.stringRepeat(r.SPACE_CHAR,e.length)+"</span>":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var c=r.session.getScreenTabSize(t+a);return t+=c-1,r.$tabStrings[c]}if("\u3000"==e){var l=r.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",u=r.showInvisibles?r.SPACE_CHAR:"";return t+=1,"<span class='"+l+"' style='width:"+2*r.config.characterWidth+"px'>"+u+"</span>"}return i?"<span class='ace_invisible ace_invisible_space ace_invalid'>"+r.SPACE_CHAR+"</span>":(t+=1,"<span class='ace_cjk' style='width:"+2*r.config.characterWidth+"px'>"+e+"</span>")}));if(this.$textToken[n.type])e.push(a);else{var s="ace_"+n.type.replace(/\./g," ace_"),c="";"fold"==n.type&&(c=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("<span class='",s,"'",c,">",a,"</span>")}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);return i<=0||i>=n?t:" "==t[0]?(i-=i%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[" "],i/this.tabSize)),t.substr(i)):"\t"==t[0]?(e.push(o.stringRepeat(this.$tabStrings["\t"],i)),t.substr(i)):t},this.$renderWrappedLine=function(e,t,n,i){for(var r=0,a=0,s=n[0],c=0,l=0;l<t.length;l++){var u=t[l],h=u.value;if(0==l&&this.displayIndentGuides){if(r=h.length,!(h=this.renderIndentGuide(e,h,s)))continue;r-=h.length}if(r+h.length<s)c=this.$renderToken(e,c,u,h),r+=h.length;else{for(;r+h.length>=s;)c=this.$renderToken(e,c,u,h.substring(0,s-r)),h=h.substring(s-r),r=s,i||e.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px'>"),e.push(o.stringRepeat("\xa0",n.indent)),c=0,s=n[++a]||Number.MAX_VALUE;0!=h.length&&(r+=h.length,c=this.$renderToken(e,c,u,h))}}},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var o=1;o<t.length;o++)r=(i=t[o]).value,n=this.$renderToken(e,n,i,r)},this.$renderLine=function(e,t,n,i){if(i||0==i||(i=this.session.getFoldLine(t)),i)var r=this.$getFoldLineTokens(t,i);else r=this.session.getTokens(t);if(n||e.push("<div class='ace_line' style='height:",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),"px'>"),r.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,r,o,n):this.$renderSimpleLine(e,r)}this.showInvisibles&&(i&&(t=i.end.row),e.push("<span class='ace_invisible ace_invisible_eol'>",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"</span>")),n||e.push("</div>")},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[];var r=n.getTokens(e);return t.walk((function(e,t,o,a,s){null!=e?i.push({type:"fold",value:e}):(s&&(r=n.getTokens(t)),r.length&&function(e,t,n){for(var r=0,o=0;o+e[r].value.length<t;)if(o+=e[r].value.length,++r==e.length)return;for(o!=t&&((a=e[r].value.substring(t-o)).length>n-t&&(a=a.substring(0,n-t)),i.push({type:e[r].type,value:a}),o=t+a.length,r+=1);o<n&&r<e.length;){var a;(a=e[r].value).length+o>n?i.push({type:e[r].type,value:a.substring(0,n-o)}):i.push(e[r]),o+=a.length,r+=1}}(r,a,o))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(s.prototype),t.Text=s})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i,r=e("../lib/dom"),o=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===i&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||i||(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);n=0;for(var r=t.length;n<r;n++){var o=this.getPixelPosition(t[n].cursor,!0);if(!((o.top>e.height+e.offset||o.top<0)&&n>1)){var a=(this.cursors[i++]||this.addCursor()).style;this.drawCursor?this.drawCursor(a,o,e,t[n],this.session):(a.left=o.left+"px",a.top=o.top+"px",a.width=e.characterWidth+"px",a.height=e.lineHeight+"px")}}for(;this.cursors.length>i;)this.removeCursor();var s=this.session.getOverwrite();this.$setOverwrite(s),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),o=e("./lib/event"),a=e("./lib/event_emitter").EventEmitter,s=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){i.implement(this,a),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(s.prototype);var c=function(e,t){s.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};i.inherits(c,s),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>32768?(this.coeff=32768/e,e=32768):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var l=function(e,t){s.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(l,s),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=l,t.VScrollBar=c,t.HScrollBar=l})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;i.nextFrame((function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)}),this.window)}}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),o=e("../lib/lang"),a=e("../lib/useragent"),s=e("../lib/event_emitter").EventEmitter,c=0,l=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),c||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat("X",c),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){i.implement(this,s),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=r.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;c=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",a.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===c){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(n){e={width:0,height:0}}var t={height:e.height,width:e.width/c}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/c};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,c),this.$main.getBoundingClientRect().width/c},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(l.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),o=e("./config"),a=e("./lib/useragent"),s=e("./layer/gutter").Gutter,c=e("./layer/marker").Marker,l=e("./layer/text").Text,u=e("./layer/cursor").Cursor,h=e("./scrollbar").HScrollBar,d=e("./scrollbar").VScrollBar,f=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,m=e("./lib/event_emitter").EventEmitter;r.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}',"ace_editor.css");var g=function(e,t){var n=this;this.container=e||r.createElement("div"),this.$keepTextAreaAtCursor=!a.isOldIE,r.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new s(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new c(this.content);var i=this.$textLayer=new l(this.content);this.canvas=i.element,this.$markerFront=new c(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new d(this.container,this),this.scrollBarH=new h(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new f(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,m),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t},this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}this.$changedLines.firstRow>this.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var o=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var r=0,o=this.$size,a={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return i&&(e||o.height!=i)&&(o.height=i,r|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",r|=this.CHANGE_SCROLL),n&&(e||o.width!=n)&&(r|=this.CHANGE_SIZE,o.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(r|=this.CHANGE_FULL)),o.$dirty=!n||!i,r&&this._signal("resize",a),r},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var i=this.textarea.style,r=this.lineHeight;if(t<0||t>e.height-r)i.top=i.left="0";else{var o=this.characterWidth;if(this.$composition){var a=this.textarea.value.replace(/^\x01+/,"");o*=this.session.$getStringScreenWidth(a)[0]+2,r+=2}(n-=this.scrollLeft)>this.$size.scrollerWidth-o&&(n=this.$size.scrollerWidth-o),n+=this.gutterWidth,i.height=r+"px",i.width=o+"px",i.left=Math.min(n,this.$size.scrollerWidth-o)+"px",i.top=Math.min(t,this.$size.height-r)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength()*this.lineHeight,r=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-r-2*this.$padding<0),a=this.$horizScroll!==o;a&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var s=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var c=this.scrollTop%this.lineHeight,l=t.scrollerHeight+this.lineHeight,u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=u;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,i-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,r+2*this.$padding-t.scrollerWidth+h.right)));var d=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+u<0||this.scrollTop>h.top),f=s!==d;f&&(this.$vScroll=d,this.scrollBarV.setVisible(d));var p,m,g=Math.ceil(l/this.lineHeight)-1,v=Math.max(0,Math.round((this.scrollTop-c)/this.lineHeight)),_=v+g,b=this.lineHeight;v=e.screenToDocumentRow(v,0);var y=e.getFoldLine(v);y&&(v=y.start.row),p=e.documentToScreenRow(v,0),m=e.getRowLength(v)*b,_=Math.min(e.screenToDocumentRow(_,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(_)*b+m,c=this.scrollTop-p*b;var w=0;return this.layerConfig.width!=r&&(w=this.CHANGE_H_SCROLL),(a||f)&&(w=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),f&&(r=this.$getLongestLine())),this.layerConfig={width:r,padding:this.$padding,firstRow:v,firstRowScreen:p,lastRow:_,lineHeight:b,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:c,gutterOffset:b?Math.max(0,Math.ceil((c+t.height-t.scrollerHeight)/b)):0,height:this.$size.scrollerHeight},w},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1)&&!(t<n.firstRow))return t===1/0?(this.$showGutter&&this.$gutterLayer.update(n),void this.$textLayer.update(n)):(this.$textLayer.updateLines(n,e,t),!0)}},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(0!==this.$size.scrollerHeight){var i=this.$cursorLayer.getPixelPosition(e),r=i.left,o=i.top,a=n&&n.top||0,s=n&&n.bottom||0,c=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;c+a>o?(t&&c+a>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):c+this.$size.scrollerHeight-s<o+this.lineHeight&&(t&&c+this.$size.scrollerHeight-s<o-this.lineHeight&&(o+=t*this.$size.scrollerHeight),this.session.setScrollTop(o+this.lineHeight-this.$size.scrollerHeight));var l=this.scrollLeft;l>r?(r<this.$padding+2*this.layerConfig.characterWidth&&(r=-this.scrollMargin.left),this.session.setScrollLeft(r)):l+this.$size.scrollerWidth<r+this.characterWidth?this.session.setScrollLeft(Math.round(r+this.characterWidth-this.$size.scrollerWidth)):l<=this.$padding&&r-l<this.characterWidth&&this.session.setScrollLeft(0)}},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){"number"==typeof e&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),i=this.$size.scrollerHeight-this.lineHeight,r=n.top-i*(t||0);return this.session.setScrollTop(r),r},this.STEPS=8,this.$calcSteps=function(e,t){var n,i,r=0,o=this.STEPS,a=[];for(r=0;r<o;++r)a.push((n=r/this.STEPS,i=e,(t-e)*(Math.pow(n-1,3)+1)+i));return a},this.scrollToLine=function(e,t,n,i){var r=this.$cursorLayer.getPixelPosition({row:e,column:0}).top;t&&(r-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(r),!1!==n&&this.animateScrolling(o,i)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(this.$animatedScroll){var i=this;if(e!=n){if(this.$scrollAnimation){var r=this.$scrollAnimation.steps;if(r.length&&(e=r[0])==n)return}var o=i.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:o},clearInterval(this.$timer),i.session.setScrollTop(o.shift()),i.session.$scrollTop=n,this.$timer=setInterval((function(){o.length?(i.session.setScrollTop(o.shift()),i.session.$scrollTop=n):null!=n?(i.session.$scrollTop=-1,i.session.setScrollTop(n),n=null):(i.$timer=clearInterval(i.$timer),i.$scrollAnimation=null,t&&t())}),10)}}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){return t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),a=Math.round(r);return{row:o,column:a,side:r-a>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=e+this.scrollLeft-n.left-this.$padding,r=Math.round(i/this.characterWidth),o=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(o,Math.max(r,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),o=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+o-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(r.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var n=this;if(this.$themeId=e,n._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)a(e);else{var i=e||this.$options.theme.initialValue;o.loadModule(["theme",i],a)}function a(i){if(n.$themeId!=e)return t&&t();if(!i||!i.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");r.importCssString(i.cssText,i.cssClass,n.container.ownerDocument),n.theme&&r.removeCssClass(n.container,n.theme.cssClass);var o="padding"in i?i.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&o!=n.$padding&&n.setPadding(o),n.$theme=i.cssClass,n.theme=i,r.addCssClass(n.container,i.cssClass),r.setCssClass(n.container,"ace_dark",i.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:i}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){r.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){r.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),o.defineOptions(g.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){r.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=r.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=g})),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/net"),o=e("../lib/event_emitter").EventEmitter,a=e("../config");function s(e,t){var n=function(e,t){var n=t.src;r.qualifyURL(e);try{return new Blob([n],{type:"application/javascript"})}catch(o){var i=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return i.append(n),i.getBlob("application/javascript")}}(e,t),i=(window.URL||window.webkitURL).createObjectURL(n);return new Worker(i)}var c=function(t,n,i,r,o){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),a.get("packaged")||!e.toUrl)r=r||a.moduleUrl(n.id,"worker");else{var c=this.$normalizePath;r=r||c(e.toUrl("ace/worker/worker.js",null,"_"));var l={};t.forEach((function(t){l[t]=c(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))}))}this.$worker=s(r,n),o&&this.send("importScripts",o),this.$worker.postMessage({init:!0,tlns:l,module:n.id,classname:i}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){i.implement(this,o),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return r.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var i=this.callbackId++;this.callbacks[i]=n,t.push(i)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(c.prototype);var l=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var i=null,r=!1,s=Object.create(o),c=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){c.messageBuffer.push(e),i&&(r?setTimeout(l):l())},this.setEmitSync=function(e){r=e};var l=function(){var e=c.messageBuffer.shift();e.command?i[e.command].apply(i,e.args):e.event&&s._signal(e.event,e.data)};s.postMessage=function(e){c.onMessage({data:e})},s.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},s.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},a.loadModule(["worker",t],(function(e){for(i=new e[n](s);c.messageBuffer.length;)l()}))};l.prototype=c.prototype,t.UIWorkerClient=l,t.WorkerClient=c,t.createWorker=s})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,o=e("./lib/oop"),a=function(e,t,n,i,r,o){var a=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){a.onCursorChange()}))},this.$pos=n;var s=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=s.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){o.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)}},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row===t.end.row&&t.start.row===this.pos.row){this.$updating=!0;var n="insert"===e.action?t.end.column-t.start.column:t.start.column-t.end.column,r=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var a=this.others.length-1;a>=0;a--){var s={row:(c=this.others[a]).row,column:c.column+o};this.doc.insertMergedLines(s,e.lines)}else if("remove"===e.action)for(a=this.others.length-1;a>=0;a--){var c;s={row:(c=this.others[a]).row,column:c.column+o};this.doc.remove(new i(s.row,s.column,s.row,s.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n<t;n++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}}).call(a.prototype),t.PlaceHolder=a})),ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){var i=e("../lib/event"),r=e("../lib/useragent");function o(e,t){return e.row==t.row&&e.column==t.column}t.onMouseDown=function(e){var t=e.domEvent,n=t.altKey,a=t.shiftKey,s=t.ctrlKey,c=e.getAccelKey(),l=e.getButton();if(s&&r.isMac&&(l=t.button),e.editor.inMultiSelectMode&&2==l)e.editor.textInput.onContextMenu(e.domEvent);else if(s||n||c){if(0===l){var u,h=e.editor,d=h.selection,f=h.inMultiSelectMode,p=e.getDocumentPosition(),m=d.getCursor(),g=e.inSelection()||d.isEmpty()&&o(p,m),v=e.x,_=e.y,b=h.session,y=h.renderer.pixelToScreenCoordinates(v,_),w=y;if(h.$mouseHandler.$enableJumpToDef)s&&n||c&&n?u=a?"block":"add":n&&h.$blockSelectEnabled&&(u="block");else if(c&&!n){if(u="add",!f&&a)return}else n&&h.$blockSelectEnabled&&(u="block");if(u&&r.isMac&&t.ctrlKey&&h.$mouseHandler.cancelContextMenu(),"add"==u){if(!f&&g)return;if(!f){var O=d.toOrientedRange();h.addSelectionMarker(O)}var C=d.rangeList.rangeAtPoint(p);h.$blockScrolling++,h.inVirtualSelectionMode=!0,a&&(C=null,O=d.ranges[0]||O,h.removeSelectionMarker(O)),h.once("mouseup",(function(){var e=d.toOrientedRange();C&&e.isEmpty()&&o(C.cursor,e.cursor)?d.substractPoint(e.cursor):(a?d.substractPoint(O.cursor):O&&(h.removeSelectionMarker(O),d.addRange(O)),d.addRange(e)),h.$blockScrolling--,h.inVirtualSelectionMode=!1}))}else if("block"==u){var E;e.stop(),h.inVirtualSelectionMode=!0;var A=[];h.$blockScrolling++,f&&!c?d.toSingleRange():!f&&c&&(E=d.toOrientedRange(),h.addSelectionMarker(E)),a?y=b.documentToScreenPosition(d.lead):d.moveToPosition(p),h.$blockScrolling--,w={row:-1,column:-1};var x=function(){var e=h.renderer.pixelToScreenCoordinates(v,_),t=b.screenToDocumentPosition(e.row,e.column,e.offsetX);o(w,e)&&o(t,d.lead)||(w=e,h.$blockScrolling++,h.selection.moveToPosition(t),h.renderer.scrollCursorIntoView(),h.removeSelectionMarkers(A),A=d.rectangularRangeBlock(w,y),h.$mouseHandler.$clickSelection&&1==A.length&&A[0].isEmpty()&&(A[0]=h.$mouseHandler.$clickSelection.clone()),A.forEach(h.addSelectionMarker,h),h.updateSelectionMarkers(),h.$blockScrolling--)};i.capture(h.container,(function(e){v=e.clientX,_=e.clientY}),(function(e){clearInterval(T),h.removeSelectionMarkers(A),A.length||(A=[d.toOrientedRange()]),h.$blockScrolling++,E&&(h.removeSelectionMarker(E),d.toSingleRange(E));for(var t=0;t<A.length;t++)d.addRange(A[t]);h.inVirtualSelectionMode=!1,h.$mouseHandler.$clickSelection=null,h.$blockScrolling--}));var T=setInterval((function(){x()}),20);return e.preventDefault()}}}else 0===l&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode()}})),ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"],(function(e,t,n){t.defaultCommands=[{name:"addCursorAbove",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:"Ctrl-Alt-Up",mac:"Ctrl-Alt-Up"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorBelow",exec:function(e){e.selectMoreLines(1)},bindKey:{win:"Ctrl-Alt-Down",mac:"Ctrl-Alt-Down"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorAboveSkipCurrent",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Up",mac:"Ctrl-Alt-Shift-Up"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorBelowSkipCurrent",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Down",mac:"Ctrl-Alt-Shift-Down"},scrollIntoView:"cursor",readOnly:!0},{name:"selectMoreBefore",exec:function(e){e.selectMore(-1)},bindKey:{win:"Ctrl-Alt-Left",mac:"Ctrl-Alt-Left"},scrollIntoView:"cursor",readOnly:!0},{name:"selectMoreAfter",exec:function(e){e.selectMore(1)},bindKey:{win:"Ctrl-Alt-Right",mac:"Ctrl-Alt-Right"},scrollIntoView:"cursor",readOnly:!0},{name:"selectNextBefore",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Left",mac:"Ctrl-Alt-Shift-Left"},scrollIntoView:"cursor",readOnly:!0},{name:"selectNextAfter",exec:function(e){e.selectMore(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Right",mac:"Ctrl-Alt-Shift-Right"},scrollIntoView:"cursor",readOnly:!0},{name:"splitIntoLines",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Alt-L",mac:"Ctrl-Alt-L"},readOnly:!0},{name:"alignCursors",exec:function(e){e.alignCursors()},bindKey:{win:"Ctrl-Alt-A",mac:"Ctrl-Alt-A"},scrollIntoView:"cursor"},{name:"findAll",exec:function(e){e.findAll()},bindKey:{win:"Ctrl-Alt-K",mac:"Ctrl-Alt-G"},scrollIntoView:"cursor",readOnly:!0}],t.multiSelectCommands=[{name:"singleSelection",bindKey:"esc",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:"cursor",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var i=e("../keyboard/hash_handler").HashHandler;t.keyboardHandler=new i(t.multiSelectCommands)})),ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"],(function(e,t,n){var i=e("./range_list").RangeList,r=e("./range").Range,o=e("./selection").Selection,a=e("./mouse/multi_select_handler").onMouseDown,s=e("./lib/event"),c=e("./lib/lang"),l=e("./commands/multi_select_commands");t.commands=l.defaultCommands.concat(l.multiSelectCommands);var u=new(0,e("./search").Search);var h=e("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(h.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(e){if(!this.inMultiSelectMode&&0===this.rangeCount){var n=this.toOrientedRange();if(this.rangeList.add(n),this.rangeList.add(e),2!=this.rangeList.ranges.length)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var i=this.rangeList.add(e);return this.$onAddRange(e),i.length&&this.$onRemoveRange(i),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),o=n.start.row,a=n.end.row;if(o==a){if(i)var s=n.end,c=n.start;else s=n.start,c=n.end;return this.addRange(r.fromPoints(c,c)),void this.addRange(r.fromPoints(s,s))}var l=[],u=this.getLineRange(o,!0);u.start.column=n.start.column,l.push(u);for(var h=o+1;h<a;h++)l.push(this.getLineRange(h,!0));(u=this.getLineRange(a,!0)).end.column=n.end.column,l.push(u),l.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(i,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],o=e.column<t.column;if(o)var a=e.column,s=t.column,c=e.offsetX,l=t.offsetX;else a=t.column,s=e.column,c=t.offsetX,l=e.offsetX;var u,h,d=e.row<t.row;if(d)var f=e.row,p=t.row;else f=t.row,p=e.row;a<0&&(a=0),f<0&&(f=0),f==p&&(n=!0);for(var m=f;m<=p;m++){var g=r.fromPoints(this.session.screenToDocumentPosition(m,a,c),this.session.screenToDocumentPosition(m,s,l));if(g.isEmpty()){if(v&&(u=g.end,h=v,u.row==h.row&&u.column==h.column))break;var v=g.end}g.cursor=o?g.start:g.end,i.push(g)}if(d&&i.reverse(),!n){for(var _=i.length-1;i[_].isEmpty()&&_>0;)_--;if(_>0)for(var b=0;i[b].isEmpty();)b++;for(var y=_;y>=b;y--)i[y].isEmpty()&&i.splice(y,1)}return i}}.call(o.prototype);var d=e("./editor").Editor;function f(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",a),e.commands.addCommands(l.defaultCommands),function(e){var t=e.textInput.getElement(),n=!1;function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}s.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),s.addListener(t,"keyup",i),s.addListener(t,"blur",i)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(l.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(l.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,a=1==n||n&&n.$byLines,s=this.session,c=this.selection,l=c.rangeList,u=(r?c:l).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var h=c._eventRegistry;c._eventRegistry={};var d=new o(s);this.inVirtualSelectionMode=!0;for(var f=u.length;f--;){if(a)for(;f>0&&u[f].start.row==u[f-1].end.row;)f--;d.fromOrientedRange(u[f]),d.index=f,this.selection=s.selection=d;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),d.toOrientedRange(u[f])}d.detach(),this.selection=s.selection=c,this.inVirtualSelectionMode=!1,c._eventRegistry=h,c.mergeOverlappingRanges();var m=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),m&&m.from==m.to&&this.renderer.animateScrolling(m.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;i<t.length;i++)n.push(this.session.getTextRange(t[i]));var r=this.session.getDocument().getNewLineCharacter();(e=n.join(r)).length==(n.length-1)*r.length&&(e="")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var i=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;i.row==t.row&&this.session.$clipPositionToDocument(i.row,i.column).column==t.column||this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,n){if((t=t||{}).needle=e||t.needle,void 0==t.needle){var i=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(i)}this.$search.set(t);var r=this.$search.findAll(this.session);if(!r.length)return 0;this.$blockScrolling+=1;var o=this.multiSelect;n||o.toSingleRange(r[0]);for(var a=r.length;a--;)o.addRange(r[a],!0);return i&&o.rangeList.rangeAtPoint(i.start)&&o.addRange(i,!0),this.$blockScrolling-=1,r.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),i=n.cursor==n.end,o=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(o.column=this.selection.$desiredColumn);var a,s=this.session.screenToDocumentPosition(o.row+e,o.column);if(n.isEmpty())l=s;else var c=this.session.documentToScreenPosition(i?n.end:n.start),l=this.session.screenToDocumentPosition(c.row+e,c.column);i?(a=r.fromPoints(s,l)).cursor=a.start:(a=r.fromPoints(l,s)).cursor=a.end;if(a.desiredColumn=o.column,this.selection.inMultiSelectMode){if(t)var u=n.cursor}else this.selection.addRange(n);this.selection.addRange(a),u&&this.selection.substractPoint(u)},this.transposeSelections=function(e){for(var t=this.session,n=t.multiSelect,i=n.ranges,r=i.length;r--;){if((s=i[r]).isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var a=[];for(r=i.length;r--;){var s=i[r];a.unshift(t.getTextRange(s))}e<0?a.unshift(a.pop()):a.push(a.shift());for(r=i.length;r--;){o=(s=i[r]).clone();t.replace(s,a[r]),s.start.row=o.start.row,s.start.column=o.start.column}},this.selectMore=function(e,t,n){var i=this.session,r=i.multiSelect.toOrientedRange();if(!r.isEmpty()||((r=i.getWordRange(r.start.row,r.start.column)).cursor=-1==e?r.start:r.end,this.multiSelect.addRange(r),!n)){var o=i.getTextRange(r),a=function(e,t,n){return u.$options.wrap=!0,u.$options.needle=t,u.$options.backwards=-1==n,u.find(e)}(i,o,e);a&&(a.cursor=-1==e?a.start:a.end,this.$blockScrolling+=1,this.session.unfold(a),this.multiSelect.addRange(a),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(r.cursor)}},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,i=-1,o=n.filter((function(e){if(e.cursor.row==i)return!0;i=e.cursor.row}));if(n.length&&o.length!=n.length-1){o.forEach((function(e){t.substractPoint(e.cursor)}));var a=0,s=1/0,l=n.map((function(t){var n=t.cursor,i=e.getLine(n.row).substr(n.column).search(/\S/g);return-1==i&&(i=0),n.column>a&&(a=n.column),i<s&&(s=i),i}));n.forEach((function(t,n){var i=t.cursor,o=a-i.column,u=l[n]-s;o>u?e.insert(i,c.stringRepeat(" ",o-u)):e.remove(new r(i.row,i.column,i.row,i.column-o+u)),t.start.column=t.end.column=a,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),h=u.start.row,d=u.end.row,f=h==d;if(f){var p,m=this.session.getLength();do{p=this.session.getLine(d)}while(/[=:]/.test(p)&&++d<m);do{p=this.session.getLine(h)}while(/[=:]/.test(p)&&--h>0);h<0&&(h=0),d>=m&&(d=m-1)}var g=this.session.removeFullLines(h,d);g=this.$reAlignText(g,f),this.session.insert({row:h,column:0},g.join("\n")+"\n"),f||(u.start.column=0,u.end.column=g[g.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,o=!0,a=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(a=!1),n!=t[1].length&&(o=!1),n>t[1].length&&(n=t[1].length),i<t[2].length&&(i=t[2].length),r>t[3].length&&(r=t[3].length),t):[e]})).map(t?l:o?a?function(e){return e[2]?s(n+i-e[2].length)+e[2]+s(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:l:function(e){return e[2]?s(n)+e[2]+s(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function s(e){return c.stringRepeat(" ",e)}function l(e){return e[2]?s(n)+e[2]+s(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=f,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){f(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",a)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",a))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,o=e.getLine(t),a=o.search(r);if(-1!=a){for(var s=n||o.length,c=e.getLength(),l=t,u=t;++t<c;){var h=e.getLine(t).search(r);if(-1!=h){if(h<=a)break;u=t}}if(u>l){var d=e.getLine(u).length;return new i(l,s,u,d)}}},this.openingBracketBlock=function(e,t,n,r,o){var a={row:n,column:r+1},s=e.$findClosingBracket(t,a,o);if(s){var c=e.foldWidgets[s.row];return null==c&&(c=e.getFoldWidget(s.row)),"start"==c&&s.row>a.row&&(s.row--,s.column=e.getLine(s.row).length),i.fromPoints(a,s)}},this.closingBracketBlock=function(e,t,n,r,o){var a={row:n,column:r},s=e.$findOpeningBracket(t,a);if(s)return s.column++,a.column--,i.fromPoints(s,a)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");e("./range").Range;function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,o=i.end.row,a="add"==e.action,s=r+1;s<o;s++)n[s]&&(n[s].hidden=a);n[o]&&(a?n[r]?n[o].hidden=a:n[r]=n[o]:(n[r]==n[o]&&(n[r]=void 0),n[o].hidden=a))}},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(t){var n=e.start.row,i=e.end.row-n;if(0===i);else if("remove"==e.action){t.splice(n+1,i).forEach((function(e){e&&this.removeLineWidget(e)}),this),this.$updateRows()}else{var r=new Array(i);r.unshift(n,0),t.splice.apply(t,r),this.$updateRows()}}},this.$updateRows=function(){var e=this.session.lineWidgets;if(e){var t=!0;e.forEach((function(e,n){if(e)for(t=!1,e.row=n;e.$oldWidget;)e.$oldWidget.row=n,e=e.$oldWidget})),t&&(this.session.lineWidgets=null)}},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var n=this.editor.renderer;e.html&&!e.el&&(e.el=i.createElement("div"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,"ace_lineWidgetContainer"),e.el.style.position="absolute",e.el.style.zIndex=5,n.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),null==e.pixelHeight&&(e.pixelHeight=e.el.offsetHeight),null==e.rowCount&&(e.rowCount=e.pixelHeight/n.layerConfig.lineHeight);var r=this.session.getFoldAt(e.row,0);if(e.$fold=r,r){var o=this.session.lineWidgets;e.row!=r.end.row||o[r.start.row]?e.hidden=!0:o[r.start.row]=e}return this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,n),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){if(e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el),e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(n){}if(this.session.lineWidgets){var t=this.session.lineWidgets[e.row];if(t==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else for(;t;){if(t.$oldWidget==e){t.$oldWidget=e.$oldWidget;break}t=t.$oldWidget}}this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){for(var t=this.session.lineWidgets,n=t&&t[e],i=[];n;)i.push(n),n=n.$oldWidget;return i},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,i=t.layerConfig;if(n&&n.length){for(var r=1/0,o=0;o<n.length;o++){var a=n[o];if(a&&a.el&&a.session==this.session){if(!a._inDocument){if(this.session.lineWidgets[a.row]!=a)continue;a._inDocument=!0,t.container.appendChild(a.el)}a.h=a.el.offsetHeight,a.fixedWidth||(a.w=a.el.offsetWidth,a.screenWidth=Math.ceil(a.w/i.characterWidth));var s=a.h/i.lineHeight;a.coverLine&&(s-=this.session.getRowLineCount(a.row))<0&&(s=0),a.rowCount!=s&&(a.rowCount=s,a.row<r&&(r=a.row))}}r!=1/0&&(this.session._emit("changeFold",{data:{start:{row:r}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]}},this.renderWidgets=function(e,t){var n=t.layerConfig,i=this.session.lineWidgets;if(i){for(var r=Math.min(this.firstRow,n.firstRow),o=Math.max(this.lastRow,n.lastRow,i.length);r>0&&!i[r];)r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var a=r;a<=o;a++){var s=i[a];if(s&&s.el)if(s.hidden)s.el.style.top=-100-(s.pixelHeight||0)+"px";else{s._inDocument||(s._inDocument=!0,t.container.appendChild(s.el));var c=t.$cursorLayer.getPixelPosition({row:a,column:0},!0).top;s.coverLine||(c+=n.lineHeight*this.session.getRowLineCount(s.row)),s.el.style.top=c-n.offset+"px";var l=s.coverGutter?0:t.gutterWidth;s.fixedWidth||(l-=t.scrollLeft),s.el.style.left=l+"px",s.fullWidth&&s.screenWidth&&(s.el.style.minWidth=n.width+2*n.padding+"px"),s.fixedWidth?s.el.style.right=t.scrollBar.getWidth()+"px":s.el.style.right=""}}}}}).call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),o=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var a=e.getCursorPosition(),s=a.row,c=n.widgetManager.getWidgetsAtRow(s).filter((function(e){return"errorMarker"==e.type}))[0];c?c.destroy():s-=t;var l,u=function(e,t,n){var i=e.getAnnotations().sort(o.comparePoints);if(i.length){var r=function(e,t,n){for(var i=0,r=e.length-1;i<=r;){var o=i+r>>1,a=n(t,e[o]);if(a>0)i=o+1;else{if(!(a<0))return o;r=o-1}}return-(i+1)}(i,{row:t,column:-1},o.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var a=i[r];if(a&&n){if(a.row===t){do{a=i[r+=n]}while(a&&a.row===t);if(!a)return i.slice()}var s=[];t=a.row;do{s[n<0?"unshift":"push"](a),a=i[r+=n]}while(a&&a.row==t);return s.length&&s}}}(n,s,t);if(u){var h=u[0];a.column=(h.pos&&"number"!=typeof h.column?h.pos.sc:h.column)||0,a.row=h.row,l=e.renderer.$gutterLayer.$annotations[a.row]}else{if(c)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(a.row),e.selection.moveToPosition(a);var d={row:a.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},f=d.el.appendChild(r.createElement("div")),p=d.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+l.className;var m=e.renderer.$cursorLayer.getPixelPosition(a).left;p.style.left=m+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",f.className="error_widget "+l.className,f.innerHTML=l.text.join("<br>"),f.appendChild(r.createElement("div"));var g=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(g),n.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(g),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},r.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,i){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),o=e("./lib/event"),a=e("./editor").Editor,s=e("./edit_session").EditSession,c=e("./undomanager").UndoManager,l=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.acequire=e,t.define=n(350),t.edit=function(e){if("string"==typeof e){var n=e;if(!(e=document.getElementById(n)))throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var i="";if(e&&/input|textarea/i.test(e.tagName)){var s=e;i=s.value,e=r.createElement("pre"),s.parentNode.replaceChild(e,s)}else e&&(i=r.getInnerText(e),e.innerHTML="");var c=t.createEditSession(i),u=new a(new l(e));u.setSession(c);var h={document:c,editor:u,onResize:u.resize.bind(u,null)};return s&&(h.textarea=s),o.addListener(window,"resize",h.onResize),u.on("destroy",(function(){o.removeListener(window,"resize",h.onResize),h.editor.container.env=null})),u.container.env=u.env=h,u},t.createEditSession=function(e,t){var n=new s(e,t);return n.setUndoManager(new c),n},t.EditSession=s,t.UndoManager=c,t.version="1.2.9"})),ace.acequire(["ace/ace"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])})),e.exports=window.ace.acequire("ace/ace")},function(e,t){e.exports=function(){throw new Error("define cannot be used indirect")}},function(e,t,n){(function(e,n){var i="[object Arguments]",r="[object Map]",o="[object Object]",a="[object Set]",s=/^\[object .+?Constructor\]$/,c=/^(?:0|[1-9]\d*)$/,l={};l["[object Float32Array]"]=l["[object Float64Array]"]=l["[object Int8Array]"]=l["[object Int16Array]"]=l["[object Int32Array]"]=l["[object Uint8Array]"]=l["[object Uint8ClampedArray]"]=l["[object Uint16Array]"]=l["[object Uint32Array]"]=!0,l[i]=l["[object Array]"]=l["[object ArrayBuffer]"]=l["[object Boolean]"]=l["[object DataView]"]=l["[object Date]"]=l["[object Error]"]=l["[object Function]"]=l[r]=l["[object Number]"]=l[o]=l["[object RegExp]"]=l[a]=l["[object String]"]=l["[object WeakMap]"]=!1;var u="object"==typeof e&&e&&e.Object===Object&&e,h="object"==typeof self&&self&&self.Object===Object&&self,d=u||h||Function("return this")(),f=t&&!t.nodeType&&t,p=f&&"object"==typeof n&&n&&!n.nodeType&&n,m=p&&p.exports===f,g=m&&u.process,v=function(){try{return g&&g.binding&&g.binding("util")}catch(e){}}(),_=v&&v.isTypedArray;function b(e,t){for(var n=-1,i=null==e?0:e.length;++n<i;)if(t(e[n],n,e))return!0;return!1}function y(e){var t=-1,n=Array(e.size);return e.forEach((function(e,i){n[++t]=[i,e]})),n}function w(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}var O,C,E=Array.prototype,A=Function.prototype,x=Object.prototype,T=d["__core-js_shared__"],S=A.toString,D=x.hasOwnProperty,P=function(){var e=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),I=x.toString,M=RegExp("^"+S.call(D).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),R=m?d.Buffer:void 0,L=d.Symbol,j=d.Uint8Array,F=x.propertyIsEnumerable,N=E.splice,z=L?L.toStringTag:void 0,k=Object.getOwnPropertySymbols,B=R?R.isBuffer:void 0,H=(O=Object.keys,C=Object,function(e){return O(C(e))}),V=ge(d,"DataView"),U=ge(d,"Map"),W=ge(d,"Promise"),G=ge(d,"Set"),q=ge(d,"WeakMap"),Y=ge(Object,"create"),$=ye(V),X=ye(U),K=ye(W),Q=ye(G),Z=ye(q),J=L?L.prototype:void 0,ee=J?J.valueOf:void 0;function te(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ne(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ie(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function re(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new ie;++t<n;)this.add(e[t])}function oe(e){var t=this.__data__=new ne(e);this.size=t.size}function ae(e,t){var n=Ce(e),i=!n&&Oe(e),r=!n&&!i&&Ee(e),o=!n&&!i&&!r&&De(e),a=n||i||r||o,s=a?function(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],c=s.length;for(var l in e)!t&&!D.call(e,l)||a&&("length"==l||r&&("offset"==l||"parent"==l)||o&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||be(l,c))||s.push(l);return s}function se(e,t){for(var n=e.length;n--;)if(we(e[n][0],t))return n;return-1}function ce(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":z&&z in Object(e)?function(e){var t=D.call(e,z),n=e[z];try{e[z]=void 0;var i=!0}catch(o){}var r=I.call(e);i&&(t?e[z]=n:delete e[z]);return r}(e):function(e){return I.call(e)}(e)}function le(e){return Se(e)&&ce(e)==i}function ue(e,t,n,s,c){return e===t||(null==e||null==t||!Se(e)&&!Se(t)?e!==e&&t!==t:function(e,t,n,s,c,l){var u=Ce(e),h=Ce(t),d=u?"[object Array]":_e(e),f=h?"[object Array]":_e(t),p=(d=d==i?o:d)==o,m=(f=f==i?o:f)==o,g=d==f;if(g&&Ee(e)){if(!Ee(t))return!1;u=!0,p=!1}if(g&&!p)return l||(l=new oe),u||De(e)?fe(e,t,n,s,c,l):function(e,t,n,i,o,s,c){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!s(new j(e),new j(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return we(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case r:var l=y;case a:var u=1&i;if(l||(l=w),e.size!=t.size&&!u)return!1;var h=c.get(e);if(h)return h==t;i|=2,c.set(e,t);var d=fe(l(e),l(t),i,o,s,c);return c.delete(e),d;case"[object Symbol]":if(ee)return ee.call(e)==ee.call(t)}return!1}(e,t,d,n,s,c,l);if(!(1&n)){var v=p&&D.call(e,"__wrapped__"),_=m&&D.call(t,"__wrapped__");if(v||_){var b=v?e.value():e,O=_?t.value():t;return l||(l=new oe),c(b,O,n,s,l)}}if(!g)return!1;return l||(l=new oe),function(e,t,n,i,r,o){var a=1&n,s=pe(e),c=s.length,l=pe(t).length;if(c!=l&&!a)return!1;var u=c;for(;u--;){var h=s[u];if(!(a?h in t:D.call(t,h)))return!1}var d=o.get(e);if(d&&o.get(t))return d==t;var f=!0;o.set(e,t),o.set(t,e);var p=a;for(;++u<c;){h=s[u];var m=e[h],g=t[h];if(i)var v=a?i(g,m,h,t,e,o):i(m,g,h,e,t,o);if(!(void 0===v?m===g||r(m,g,n,i,o):v)){f=!1;break}p||(p="constructor"==h)}if(f&&!p){var _=e.constructor,b=t.constructor;_==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof _&&_ instanceof _&&"function"==typeof b&&b instanceof b||(f=!1)}return o.delete(e),o.delete(t),f}(e,t,n,s,c,l)}(e,t,n,s,ue,c))}function he(e){return!(!Te(e)||function(e){return!!P&&P in e}(e))&&(Ae(e)?M:s).test(ye(e))}function de(e){if(!function(e){var t=e&&e.constructor,n="function"==typeof t&&t.prototype||x;return e===n}(e))return H(e);var t=[];for(var n in Object(e))D.call(e,n)&&"constructor"!=n&&t.push(n);return t}function fe(e,t,n,i,r,o){var a=1&n,s=e.length,c=t.length;if(s!=c&&!(a&&c>s))return!1;var l=o.get(e);if(l&&o.get(t))return l==t;var u=-1,h=!0,d=2&n?new re:void 0;for(o.set(e,t),o.set(t,e);++u<s;){var f=e[u],p=t[u];if(i)var m=a?i(p,f,u,t,e,o):i(f,p,u,e,t,o);if(void 0!==m){if(m)continue;h=!1;break}if(d){if(!b(t,(function(e,t){if(a=t,!d.has(a)&&(f===e||r(f,e,n,i,o)))return d.push(t);var a}))){h=!1;break}}else if(f!==p&&!r(f,p,n,i,o)){h=!1;break}}return o.delete(e),o.delete(t),h}function pe(e){return function(e,t,n){var i=t(e);return Ce(e)?i:function(e,t){for(var n=-1,i=t.length,r=e.length;++n<i;)e[r+n]=t[n];return e}(i,n(e))}(e,Pe,ve)}function me(e,t){var n=e.__data__;return function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}(t)?n["string"==typeof t?"string":"hash"]:n.map}function ge(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return he(n)?n:void 0}te.prototype.clear=function(){this.__data__=Y?Y(null):{},this.size=0},te.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},te.prototype.get=function(e){var t=this.__data__;if(Y){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return D.call(t,e)?t[e]:void 0},te.prototype.has=function(e){var t=this.__data__;return Y?void 0!==t[e]:D.call(t,e)},te.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Y&&void 0===t?"__lodash_hash_undefined__":t,this},ne.prototype.clear=function(){this.__data__=[],this.size=0},ne.prototype.delete=function(e){var t=this.__data__,n=se(t,e);return!(n<0)&&(n==t.length-1?t.pop():N.call(t,n,1),--this.size,!0)},ne.prototype.get=function(e){var t=this.__data__,n=se(t,e);return n<0?void 0:t[n][1]},ne.prototype.has=function(e){return se(this.__data__,e)>-1},ne.prototype.set=function(e,t){var n=this.__data__,i=se(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},ie.prototype.clear=function(){this.size=0,this.__data__={hash:new te,map:new(U||ne),string:new te}},ie.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},ie.prototype.get=function(e){return me(this,e).get(e)},ie.prototype.has=function(e){return me(this,e).has(e)},ie.prototype.set=function(e,t){var n=me(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},re.prototype.add=re.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},re.prototype.has=function(e){return this.__data__.has(e)},oe.prototype.clear=function(){this.__data__=new ne,this.size=0},oe.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},oe.prototype.get=function(e){return this.__data__.get(e)},oe.prototype.has=function(e){return this.__data__.has(e)},oe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ne){var i=n.__data__;if(!U||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new ie(i)}return n.set(e,t),this.size=n.size,this};var ve=k?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,i=null==e?0:e.length,r=0,o=[];++n<i;){var a=e[n];t(a,n,e)&&(o[r++]=a)}return o}(k(e),(function(t){return F.call(e,t)})))}:function(){return[]},_e=ce;function be(e,t){return!!(t=null==t?9007199254740991:t)&&("number"==typeof e||c.test(e))&&e>-1&&e%1==0&&e<t}function ye(e){if(null!=e){try{return S.call(e)}catch(t){}try{return e+""}catch(t){}}return""}function we(e,t){return e===t||e!==e&&t!==t}(V&&"[object DataView]"!=_e(new V(new ArrayBuffer(1)))||U&&_e(new U)!=r||W&&"[object Promise]"!=_e(W.resolve())||G&&_e(new G)!=a||q&&"[object WeakMap]"!=_e(new q))&&(_e=function(e){var t=ce(e),n=t==o?e.constructor:void 0,i=n?ye(n):"";if(i)switch(i){case $:return"[object DataView]";case X:return r;case K:return"[object Promise]";case Q:return a;case Z:return"[object WeakMap]"}return t});var Oe=le(function(){return arguments}())?le:function(e){return Se(e)&&D.call(e,"callee")&&!F.call(e,"callee")},Ce=Array.isArray;var Ee=B||function(){return!1};function Ae(e){if(!Te(e))return!1;var t=ce(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}function xe(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Te(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Se(e){return null!=e&&"object"==typeof e}var De=_?function(e){return function(t){return e(t)}}(_):function(e){return Se(e)&&xe(e.length)&&!!l[ce(e)]};function Pe(e){return null!=(t=e)&&xe(t.length)&&!Ae(t)?ae(e):de(e);var t}n.exports=function(e,t){return ue(e,t)}}).call(this,n(55),n(139)(e))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.editorOptions=["minLines","maxLines","readOnly","highlightActiveLine","tabSize","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets"],t.editorEvents=["onChange","onFocus","onInput","onBlur","onCopy","onPaste","onSelectionChange","onCursorChange","onScroll","handleOptions","updateRef"]},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n(55))},function(e,t,n){var i=n(355),r=n(148);e.exports=function(e,t){return e&&i(e,t,r)}},function(e,t,n){var i=n(639)();e.exports=i},function(e,t,n){var i=n(640),r=n(232),o=n(73),a=n(172),s=n(233),c=n(234),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=o(e),u=!n&&r(e),h=!n&&!u&&a(e),d=!n&&!u&&!h&&c(e),f=n||u||h||d,p=f?i(e.length,String):[],m=p.length;for(var g in e)!t&&!l.call(e,g)||f&&("length"==g||h&&("offset"==g||"parent"==g)||d&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,m))||p.push(g);return p}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){var i=n(173);e.exports=function(e){return"function"==typeof e?e:i}},function(e,t,n){var i=n(109),r=n(240),o=n(87),a=Function.prototype,s=Object.prototype,c=a.toString,l=s.hasOwnProperty,u=c.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=i(e))return!1;var t=r(e);if(null===t)return!0;var n=l.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==u}},function(e,t){e.exports=function(e,t){for(var n=-1,i=null==e?0:e.length,r=Array(i);++n<i;)r[n]=t(e[n],n,e);return r}},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(t){}try{return e+""}catch(t){}}return""}},function(e,t,n){var i=n(676),r=n(87);e.exports=function e(t,n,o,a,s){return t===n||(null==t||null==n||!r(t)&&!r(n)?t!==t&&n!==n:i(t,n,o,a,e,s))}},function(e,t,n){var i=n(677),r=n(680),o=n(681);e.exports=function(e,t,n,a,s,c){var l=1&n,u=e.length,h=t.length;if(u!=h&&!(l&&h>u))return!1;var d=c.get(e),f=c.get(t);if(d&&f)return d==t&&f==e;var p=-1,m=!0,g=2&n?new i:void 0;for(c.set(e,t),c.set(t,e);++p<u;){var v=e[p],_=t[p];if(a)var b=l?a(_,v,p,t,e,c):a(v,_,p,e,t,c);if(void 0!==b){if(b)continue;m=!1;break}if(g){if(!r(t,(function(e,t){if(!o(g,t)&&(v===e||s(v,e,n,a,c)))return g.push(t)}))){m=!1;break}}else if(v!==_&&!s(v,_,n,a,c)){m=!1;break}}return c.delete(e),c.delete(t),m}},function(e,t,n){var i=n(82).Uint8Array;e.exports=i},function(e,t,n){var i=n(366),r=n(243),o=n(148);e.exports=function(e){return i(e,o,r)}},function(e,t,n){var i=n(367),r=n(73);e.exports=function(e,t,n){var o=t(e);return r(e)?o:i(o,n(e))}},function(e,t){e.exports=function(e,t){for(var n=-1,i=t.length,r=e.length;++n<i;)e[r+n]=t[n];return e}},function(e,t){e.exports=function(){return[]}},function(e,t,n){var i=n(76);e.exports=function(e){return e===e&&!i(e)}},function(e,t){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},function(e,t,n){var i=n(372),r=n(181);e.exports=function(e,t){for(var n=0,o=(t=i(t,e)).length;null!=e&&n<o;)e=e[r(t[n++])];return n&&n==o?e:void 0}},function(e,t,n){var i=n(73),r=n(244),o=n(694),a=n(697);e.exports=function(e,t){return i(e)?e:r(e,t)?[e]:o(a(e))}},function(e,t,n){var i=n(354),r=n(706)(i);e.exports=r},function(e,t){e.exports=function(e,t){for(var n=-1,i=null==e?0:e.length;++n<i&&!1!==t(e[n],n,e););return e}},function(e,t,n){var i=n(245),r=n(149),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var a=e[t];o.call(e,t)&&r(a,n)&&(void 0!==n||t in e)||i(e,t,n)}},function(e,t,n){var i=n(110),r=function(){try{var e=i(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=r},function(e,t,n){(function(e){var i=n(82),r=t&&!t.nodeType&&t,o=r&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===r?i.Buffer:void 0,s=a?a.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,i=s?s(n):new e.constructor(n);return e.copy(i),i}}).call(this,n(139)(e))},function(e,t){e.exports=function(e,t){var n=-1,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}},function(e,t,n){var i=n(367),r=n(240),o=n(243),a=n(368),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)i(t,o(e)),e=r(e);return t}:a;e.exports=s},function(e,t,n){var i=n(246);e.exports=function(e,t){var n=t?i(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},function(e,t,n){var i=n(722),r=n(240),o=n(238);e.exports=function(e){return"function"!=typeof e.constructor||o(e)?{}:i(r(e))}},function(e,t,n){var i=n(731),r=n(735)((function(e,t,n){i(e,t,n)}));e.exports=r},function(e,t,n){var i=n(245),r=n(149);e.exports=function(e,t,n){(void 0!==n&&!r(e[t],n)||void 0===n&&!(t in e))&&i(e,t,n)}},function(e,t){e.exports=function(e,t){if(("constructor"!==t||"function"!==typeof e[t])&&"__proto__"!=t)return e[t]}},function(e,t,n){var i=n(76),r=n(753),o=n(754),a=Math.max,s=Math.min;e.exports=function(e,t,n){var c,l,u,h,d,f,p=0,m=!1,g=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function _(t){var n=c,i=l;return c=l=void 0,p=t,h=e.apply(i,n)}function b(e){return p=e,d=setTimeout(w,t),m?_(e):h}function y(e){var n=e-f;return void 0===f||n>=t||n<0||g&&e-p>=u}function w(){var e=r();if(y(e))return O(e);d=setTimeout(w,function(e){var n=t-(e-f);return g?s(n,u-(e-p)):n}(e))}function O(e){return d=void 0,v&&c?_(e):(c=l=void 0,h)}function C(){var e=r(),n=y(e);if(c=arguments,l=this,f=e,n){if(void 0===d)return b(f);if(g)return clearTimeout(d),d=setTimeout(w,t),_(f)}return void 0===d&&(d=setTimeout(w,t)),h}return t=o(t)||0,i(n)&&(m=!!n.leading,u=(g="maxWait"in n)?a(o(n.maxWait)||0,t):u,v="trailing"in n?!!n.trailing:v),C.cancel=function(){void 0!==d&&clearTimeout(d),p=0,c=f=l=d=void 0},C.flush=function(){return void 0===d?h:O(r())},C}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.red=t.getContrastingColor=t.isValidHex=t.toState=t.simpleCheckForValidColor=void 0;var i=o(n(759)),r=o(n(761));function o(e){return e&&e.__esModule?e:{default:e}}t.simpleCheckForValidColor=function(e){var t=0,n=0;return(0,i.default)(["r","g","b","a","h","s","l","v"],(function(i){if(e[i]&&(t+=1,isNaN(e[i])||(n+=1),"s"===i||"l"===i)){/^\d+%$/.test(e[i])&&(n+=1)}})),t===n&&e};var a=t.toState=function(e,t){var n=e.hex?(0,r.default)(e.hex):(0,r.default)(e),i=n.toHsl(),o=n.toHsv(),a=n.toRgb(),s=n.toHex();return 0===i.s&&(i.h=t||0,o.h=t||0),{hsl:i,hex:"000000"===s&&0===a.a?"transparent":"#"+s,rgb:a,hsv:o,oldHue:e.h||t||i.h,source:e.source}};t.isValidHex=function(e){var t="#"===String(e).charAt(0)?1:0;return e.length!==4+t&&e.length<7+t&&(0,r.default)(e).isValid()},t.getContrastingColor=function(e){if(!e)return"#fff";var t=a(e);return"transparent"===t.hex?"rgba(0,0,0,0.4)":(299*t.rgb.r+587*t.rgb.g+114*t.rgb.b)/1e3>=128?"#000":"#fff"},t.red={hsl:{a:1,h:0,l:.5,s:1},hex:"#ff0000",rgb:{r:255,g:0,b:0,a:1},hsv:{h:0,s:1,v:1,a:1}};t.default=t},function(e,t,n){"use strict";function i(e,t,n){if(0===e.query.length&&void 0!==n)return n;var i=e.filteredItems.map(e.renderItem).filter((function(e){return null!=e}));return i.length>0?i:t}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var i=n(5);function r(e,t,n){return void 0===e||null==t||null==n?t===n:i.Utils.isFunction(e)?e(t,n):t[e]===n[e]}},function(e,t,n){"use strict";function i(){return{__blueprintCreateNewItemBrand:"blueprint-create-new-item"}}function r(e){if(null==e)return!1;var t=Object.keys(e);return 1===t.length&&"__blueprintCreateNewItemBrand"===t[0]&&"blueprint-create-new-item"===e.__blueprintCreateNewItemBrand}function o(e){return null==e||r(e)?null:e}n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";n.r(t),n.d(t,"MULTISELECT",(function(){return r})),n.d(t,"MULTISELECT_POPOVER",(function(){return o})),n.d(t,"MULTISELECT_TAG_INPUT_INPUT",(function(){return a})),n.d(t,"OMNIBAR",(function(){return s})),n.d(t,"OMNIBAR_OVERLAY",(function(){return c})),n.d(t,"SELECT",(function(){return l})),n.d(t,"SELECT_POPOVER",(function(){return u}));var i=n(5).Classes.getClassNamespace(),r=i+"-multi-select",o=r+"-popover",a=r+"-tag-input-input",s=i+"-omnibar",c=s+"-overlay",l=i+"-select",u=l+"-popover"},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var i=n(11),r=n(2),o=n(54),a=n(35),s=n(49),c=n(138),l=(n(276),n(9));var u=n(207);function h(e){var t;return Object(s.a)(e.prototype.renderContextMenu)||console.warn(a.c),(t=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.prototype.render=function(){var t=this,n=e.prototype.render.call(this);if(null==n)return n;if(!r.isValidElement(n))return console.warn(a.b),n;var i=n.props.onContextMenu;return r.cloneElement(n,{onContextMenu:function(e){if(!e.defaultPrevented){if(Object(s.a)(t.renderContextMenu)){var n=t.renderContextMenu(e);if(null!=n){var r=function(e){return e instanceof Element&&null!=e.closest("."+l.Classes.DARK)}(o.findDOMNode(t));e.preventDefault(),u.show(n,{left:e.clientX,top:e.clientY},t.onContextMenuClose,r)}}Object(s.b)(i,e)}}})},t}(e)).displayName="ContextMenuTarget("+Object(c.b)(e)+")",t}},function(e,t,n){"use strict";n.d(t,"a",(function(){return x}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(47),u=n(27),h=n(72),d=n(40),f=n(35),p=n(129),m=n(78),g=n(195),v=n(196),_=n(103);function b(e){return void 0===e&&(e=""),e.toString()}function y(e){return null==e.key||(!!(e.ctrlKey||e.altKey||e.metaKey)||(!(1===e.key.length)||C(e.key)))}var w,O=/^[Ee0-9\+\-\.]$/;function C(e){return O.test(e)}function E(e){return function(e){return e.replace(/[\uFF10-\uFF19]/g,(function(e){return String.fromCharCode(e.charCodeAt(0)-65248)}))}(e).split("").filter(C).join("")}!function(e){e[e.DOWN=-1]="DOWN",e[e.UP=1]="UP"}(w||(w={}));var A=["allowNumericCharactersOnly","buttonPosition","clampValueOnBlur","className","defaultValue","majorStepSize","minorStepSize","onButtonClick","onValueChange","selectAllOnFocus","selectAllOnIncrement","stepSize"],x=function(e){function t(){var t,i=e.apply(this,arguments)||this;return i.state={currentImeInputInvalid:!1,shouldSelectAfterUpdate:!1,stepMaxPrecision:n.getStepMaxPrecision(i.props),value:b(null!==(t=i.props.value)&&void 0!==t?t:i.props.defaultValue)},i.didPasteEventJustOccur=!1,i.delta=0,i.inputElement=null,i.intervalId=null,i.incrementButtonHandlers=i.getButtonEventHandlers(w.UP),i.decrementButtonHandlers=i.getButtonEventHandlers(w.DOWN),i.inputRef=function(e){i.inputElement=e,c.Utils.safeInvoke(i.props.inputRef,e)},i.handleButtonClick=function(e,t){var n,r,o=i.updateDelta(t,e),a=i.incrementValue(o);null===(r=(n=i.props).onButtonClick)||void 0===r||r.call(n,+a,a)},i.stopContinuousChange=function(){i.delta=0,i.clearTimeouts(),clearInterval(i.intervalId),document.removeEventListener("mouseup",i.stopContinuousChange)},i.handleContinuousChange=function(){var e,t,n=i.incrementValue(i.delta);null===(t=(e=i.props).onButtonClick)||void 0===t||t.call(e,+n,n)},i.handleInputFocus=function(e){i.setState({shouldSelectAfterUpdate:i.props.selectAllOnFocus}),c.Utils.safeInvoke(i.props.onFocus,e)},i.handleInputBlur=function(e){if(i.setState({shouldSelectAfterUpdate:!1}),i.props.clampValueOnBlur){var t=e.target.value;i.handleNextValue(i.roundAndClampValue(t))}c.Utils.safeInvoke(i.props.onBlur,e)},i.handleInputKeyDown=function(e){if(!i.props.disabled&&!i.props.readOnly){var t,n=e.keyCode;if(n===c.Keys.ARROW_UP?t=w.UP:n===c.Keys.ARROW_DOWN&&(t=w.DOWN),null!=t){e.preventDefault();var r=i.updateDelta(t,e);i.incrementValue(r)}c.Utils.safeInvoke(i.props.onKeyDown,e)}},i.handleCompositionEnd=function(e){i.props.allowNumericCharactersOnly&&(i.handleNextValue(E(e.data)),i.setState({currentImeInputInvalid:!1}))},i.handleCompositionUpdate=function(e){if(i.props.allowNumericCharactersOnly){var t=e.data;0===E(t).length&&t.length>0?i.setState({currentImeInputInvalid:!0}):i.setState({currentImeInputInvalid:!1})}},i.handleInputKeyPress=function(e){i.props.allowNumericCharactersOnly&&!y(e)&&e.preventDefault(),c.Utils.safeInvoke(i.props.onKeyPress,e)},i.handleInputPaste=function(e){i.didPasteEventJustOccur=!0,c.Utils.safeInvoke(i.props.onPaste,e)},i.handleInputChange=function(e){var t=e.target.value,n=t;i.props.allowNumericCharactersOnly&&i.didPasteEventJustOccur&&(i.didPasteEventJustOccur=!1,n=E(t)),i.handleNextValue(n),i.setState({shouldSelectAfterUpdate:!1})},i}var n;return Object(i.c)(t,e),n=t,t.getDerivedStateFromProps=function(e,t){var r,o,a={prevMaxProp:e.max,prevMinProp:e.min,prevValueProp:e.value},s=e.min!==t.prevMinProp,c=e.max!==t.prevMaxProp,l=s||c,u=null!==(o=null===(r=e.value)||void 0===r?void 0:r.toString())&&void 0!==o?o:t.value,h=n.getStepMaxPrecision(e),d=u!==n.VALUE_EMPTY?n.roundAndClampValue(u,h,e.min,e.max):n.VALUE_EMPTY;return l&&d!==t.value?Object(i.a)(Object(i.a)({},a),{stepMaxPrecision:h,value:d}):Object(i.a)(Object(i.a)({},a),{stepMaxPrecision:h,value:u})},t.getStepMaxPrecision=function(e){return null!=e.minorStepSize?c.Utils.countDecimalPlaces(e.minorStepSize):c.Utils.countDecimalPlaces(e.stepSize)},t.roundAndClampValue=function(e,t,i,r,o){return void 0===o&&(o=0),function(e){return null!=e&&e-parseFloat(e)+1>=0}(e)?function(e,t,n){var i=null!=t?t:-1/0,r=null!=n?n:1/0;return Object(_.c)(e,i,r)}(function(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}(parseFloat(e)+o,t),i,r).toString():n.VALUE_EMPTY},t.prototype.render=function(){var e,t=this.props,n=t.buttonPosition,i=t.className,r=t.fill,s=t.large,u=o()(c.Classes.NUMERIC_INPUT,((e={})[c.Classes.LARGE]=s,e),i),h=this.renderButtons();return a.createElement(g.a,{className:u,fill:r},n===l.a.LEFT&&h,this.renderInput(),n===l.a.RIGHT&&h)},t.prototype.componentDidUpdate=function(t,n){var i,r;e.prototype.componentDidUpdate.call(this,t,n),this.state.shouldSelectAfterUpdate&&this.inputElement.setSelectionRange(0,this.state.value.length);var o=this.props.min!==t.min,a=this.props.max!==t.max;(o||a)&&this.state.value!==n.value&&(null===(r=(i=this.props).onValueChange)||void 0===r||r.call(i,+this.state.value,this.state.value,this.inputElement))},t.prototype.validateProps=function(e){var t=e.majorStepSize,i=e.max,r=e.min,o=e.minorStepSize,a=e.stepSize,s=e.value;if(null!=r&&null!=i&&r>i)throw new Error(f.r);if(null==a)throw new Error(f.t);if(a<=0)throw new Error(f.s);if(o&&o<=0)throw new Error(f.q);if(t&&t<=0)throw new Error(f.o);if(o&&o>a)throw new Error(f.p);if(t&&t<a)throw new Error(f.n);if(null!=s){var c=n.getStepMaxPrecision(e);n.roundAndClampValue(s.toString(),c,r,i)!==s.toString()&&console.warn(f.m)}},t.prototype.renderButtons=function(){var e=this.props,t=e.intent,n=e.max,r=e.min,o=this.state.value,s=this.props.disabled||this.props.readOnly;return a.createElement(p.a,{className:c.Classes.FIXED,key:"button-group",vertical:!0},a.createElement(m.a,Object(i.a)({disabled:s||""!==o&&+o>=n,icon:"chevron-up",intent:t},this.incrementButtonHandlers)),a.createElement(m.a,Object(i.a)({disabled:s||""!==o&&+o<=r,icon:"chevron-down",intent:t},this.decrementButtonHandlers)))},t.prototype.renderInput=function(){var e=Object(u.b)(this.props,A,!0);return a.createElement(v.a,Object(i.a)({autoComplete:"off"},e,{intent:this.state.currentImeInputInvalid?h.a.DANGER:this.props.intent,inputRef:this.inputRef,large:this.props.large,leftIcon:this.props.leftIcon,onFocus:this.handleInputFocus,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onCompositionEnd:this.handleCompositionEnd,onCompositionUpdate:this.handleCompositionUpdate,onKeyDown:this.handleInputKeyDown,onKeyPress:this.handleInputKeyPress,onPaste:this.handleInputPaste,rightElement:this.props.rightElement,value:this.state.value}))},t.prototype.getButtonEventHandlers=function(e){var t=this;return{onKeyDown:function(n){!t.props.disabled&&c.Keys.isKeyboardClick(n.keyCode)&&t.handleButtonClick(n,e)},onMouseDown:function(n){t.props.disabled||(t.handleButtonClick(n,e),t.startContinuousChange())}}},t.prototype.startContinuousChange=function(){var e=this;document.addEventListener("mouseup",this.stopContinuousChange),this.setTimeout((function(){e.intervalId=window.setInterval(e.handleContinuousChange,n.CONTINUOUS_CHANGE_INTERVAL)}),n.CONTINUOUS_CHANGE_DELAY)},t.prototype.handleNextValue=function(e){var t,n;null==this.props.value&&this.setState({value:e}),null===(n=(t=this.props).onValueChange)||void 0===n||n.call(t,+e,e,this.inputElement)},t.prototype.incrementValue=function(e){var t=this.state.value===n.VALUE_EMPTY?n.VALUE_ZERO:this.state.value,i=this.roundAndClampValue(t,e);return i!==this.state.value&&(this.handleNextValue(i),this.setState({shouldSelectAfterUpdate:this.props.selectAllOnIncrement})),i},t.prototype.getIncrementDelta=function(e,t,n){var i=this.props,r=i.majorStepSize,o=i.minorStepSize,a=i.stepSize;return t&&null!=r?e*r:n&&null!=o?e*o:e*a},t.prototype.roundAndClampValue=function(e,t){return void 0===t&&(t=0),n.roundAndClampValue(e,this.state.stepMaxPrecision,this.props.min,this.props.max,t)},t.prototype.updateDelta=function(e,t){return this.delta=this.getIncrementDelta(e,t.shiftKey,t.altKey),this.delta},t.displayName=u.a+".NumericInput",t.VALUE_EMPTY="",t.VALUE_ZERO="0",t.defaultProps={allowNumericCharactersOnly:!0,buttonPosition:l.a.RIGHT,clampValueOnBlur:!1,defaultValue:n.VALUE_EMPTY,large:!1,majorStepSize:10,minorStepSize:.1,selectAllOnFocus:!1,selectAllOnIncrement:!1,stepSize:1},t.CONTINUOUS_CHANGE_DELAY=300,t.CONTINUOUS_CHANGE_INTERVAL=100,t=n=Object(i.b)([s.polyfill],t)}(d.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return y}));var i=n(11),r=n(17),o=n.n(r),a=n(2),s=n(24),c=n(9),l=n(40),u=n(27),h=n(49),d=n(206),f=n(138),p=n(155),m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleClick=function(e){return t.props.onClick(t.props.id,e)},t}return Object(i.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.children,r=e.disabled,s=e.id,l=e.parentId,h=e.selected,d=e.title,f=Object(i.d)(e,["className","children","disabled","id","parentId","selected","title"]);return a.createElement("div",Object(i.a)({},Object(u.b)(f),{"aria-controls":g(l,s),"aria-disabled":r,"aria-expanded":h,"aria-selected":h,className:o()(c.Classes.TAB,t),"data-tab-id":s,id:v(l,s),onClick:r?void 0:this.handleClick,role:"tab",tabIndex:r?void 0:0}),d,n)},t.displayName=u.a+".TabTitle",t=Object(i.b)([s.polyfill],t)}(l.a);function g(e,t){return c.Classes.TAB_PANEL+"_"+e+"_"+t}function v(e,t){return c.Classes.TAB+"-title_"+e+"_"+t}var _=function(){return a.createElement("div",{className:c.Classes.FLEX_EXPANDER})},b="."+c.Classes.TAB,y=function(e){function t(t){var n=e.call(this,t)||this;n.refHandlers={tablist:function(e){return n.tablistElement=e}},n.handleKeyDown=function(e){var t=document.activeElement.closest(b);if(null!=t){var i=n.getTabElements().filter((function(e){return"false"===e.getAttribute("aria-disabled")})),r=i.indexOf(t),o=n.getKeyCodeDirection(e);if(r>=0&&void 0!==o){e.preventDefault();var a=i.length;i[(r+o+a)%a].focus()}}},n.handleKeyPress=function(e){var t=e.target.closest(b);null!=t&&c.Keys.isKeyboardClick(e.which)&&(e.preventDefault(),t.click())},n.handleTabClick=function(e,t){h.b(n.props.onChange,e,n.state.selectedTabId,t),void 0===n.props.selectedTabId&&n.setState({selectedTabId:e})},n.renderTabPanel=function(e){var t=e.props,i=t.className,r=t.panel,s=t.id,l=t.panelClassName;if(void 0!==r)return a.createElement("div",{"aria-labelledby":v(n.props.id,s),"aria-hidden":s!==n.state.selectedTabId,className:o()(c.Classes.TAB_PANEL,i,l),id:g(n.props.id,s),key:s,role:"tabpanel"},r)},n.renderTabTitle=function(e){if(O(e)){var t=e.props.id;return a.createElement(m,Object(i.a)({},e.props,{parentId:n.props.id,onClick:n.handleTabClick,selected:t===n.state.selectedTabId}))}return e};var r=n.getInitialSelectedTabId();return n.state={selectedTabId:r},n}return Object(i.c)(t,e),t.getDerivedStateFromProps=function(e){var t=e.selectedTabId;return void 0!==t?{selectedTabId:t}:null},t.prototype.render=function(){var e,t,n=this.state,i=n.indicatorWrapperStyle,r=n.selectedTabId,s=a.Children.map(this.props.children,this.renderTabTitle),l=this.getTabChildren().filter(this.props.renderActiveTabPanelOnly?function(e){return e.props.id===r}:function(){return!0}).map(this.renderTabPanel),u=this.props.animate?a.createElement("div",{className:c.Classes.TAB_INDICATOR_WRAPPER,style:i},a.createElement("div",{className:c.Classes.TAB_INDICATOR})):null,h=o()(c.Classes.TABS,((e={})[c.Classes.VERTICAL]=this.props.vertical,e),this.props.className),d=o()(c.Classes.TAB_LIST,((t={})[c.Classes.LARGE]=this.props.large,t));return a.createElement("div",{className:h},a.createElement("div",{className:d,onKeyDown:this.handleKeyDown,onKeyPress:this.handleKeyPress,ref:this.refHandlers.tablist,role:"tablist"},u,s),l)},t.prototype.componentDidMount=function(){this.moveSelectionIndicator()},t.prototype.componentDidUpdate=function(e,t){if(this.state.selectedTabId!==t.selectedTabId)this.moveSelectionIndicator();else if(null!=t.selectedTabId){!d.a(this.getTabChildrenProps(e),this.getTabChildrenProps(),d.d)&&this.moveSelectionIndicator()}},t.prototype.getInitialSelectedTabId=function(){var e=this.props,t=e.defaultSelectedTabId,n=e.selectedTabId;if(void 0!==n)return n;if(void 0!==t)return t;var i=this.getTabChildren();return 0===i.length?void 0:i[0].props.id},t.prototype.getKeyCodeDirection=function(e){return w(e,c.Keys.ARROW_LEFT,c.Keys.ARROW_UP)?-1:w(e,c.Keys.ARROW_RIGHT,c.Keys.ARROW_DOWN)?1:void 0},t.prototype.getTabChildrenProps=function(e){return void 0===e&&(e=this.props),this.getTabChildren(e).map((function(e){return e.props}))},t.prototype.getTabChildren=function(e){return void 0===e&&(e=this.props),a.Children.toArray(e.children).filter(O)},t.prototype.getTabElements=function(e){return void 0===e&&(e=""),null==this.tablistElement?[]:Array.from(this.tablistElement.querySelectorAll(b+e))},t.prototype.moveSelectionIndicator=function(){if(null!=this.tablistElement&&this.props.animate){var e=b+'[data-tab-id="'+this.state.selectedTabId+'"]',t=this.tablistElement.querySelector(e),n={display:"none"};if(null!=t){var i=t.clientHeight,r=t.clientWidth,o=t.offsetLeft,a=t.offsetTop;n={height:i,transform:"translateX("+Math.floor(o)+"px) translateY("+Math.floor(a)+"px)",width:r}}this.setState({indicatorWrapperStyle:n})}},t.Expander=_,t.Tab=p.a,t.defaultProps={animate:!0,large:!1,renderActiveTabPanelOnly:!1,vertical:!1},t.displayName=u.a+".Tabs",t=Object(i.b)([s.polyfill],t)}(l.a);function w(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.indexOf(e.which)>=0}function O(e){return f.c(e,p.a)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var i,r=n(11),o=n(2),a=n(35),s=n(49),c=n(138),l=n(98),u=n(71),h=n(100);!function(e){e.LOCAL="local",e.GLOBAL="global"}(i||(i={}));var d=function(){function e(e){var t=this;this.scope=e,this.actions=[],this.handleKeyDown=function(e){var n=Object(u.b)(e);t.isTextInput(e)||!Object(u.a)(Object(u.d)("?"),n)?Object(h.b)()||t.invokeNamedCallbackIfComboRecognized(n,"onKeyDown",e):Object(h.b)()?Object(h.a)():Object(h.c)(t.actions.map((function(e){return e.props})))},this.handleKeyUp=function(e){Object(h.b)()||t.invokeNamedCallbackIfComboRecognized(Object(u.b)(e),"onKeyUp",e)}}return e.prototype.count=function(){return this.actions.length},e.prototype.clear=function(){this.actions=[]},e.prototype.setHotkeys=function(e){var t=this,n=[];o.Children.forEach(e.children,(function(e){Object(c.c)(e,l.a)&&t.isScope(e.props)&&n.push({combo:Object(u.d)(e.props.combo),props:e.props})})),this.actions=n},e.prototype.invokeNamedCallbackIfComboRecognized=function(e,t,n){for(var i=this.isTextInput(n),r=0,o=this.actions;r<o.length;r++){var a=o[r];!(i&&!a.props.allowInInput||a.props.disabled)&&Object(u.a)(a.combo,e)&&(a.props.preventDefault&&n.preventDefault(),a.props.stopPropagation&&(n.isPropagationStopped=!0,n.stopPropagation()),Object(s.b)(a.props[t],n))}},e.prototype.isScope=function(e){return(e.global?i.GLOBAL:i.LOCAL)===this.scope},e.prototype.isTextInput=function(e){var t=e.target;if(null==t||null==t.closest)return!1;var n=t.closest("input, textarea, [contenteditable=true]");if(null==n)return!1;if("input"===n.tagName.toLowerCase()){var i=n.type;if("checkbox"===i||"radio"===i)return!1}return!n.readOnly},e}();function f(e){var t;return Object(s.a)(e.prototype.renderHotkeys)||console.warn(a.j),(t=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.globalHotkeysEvents=new d(i.GLOBAL),t.localHotkeysEvents=new d(i.LOCAL),t}return Object(r.c)(t,e),t.prototype.componentDidMount=function(){null!=e.prototype.componentDidMount&&e.prototype.componentDidMount.call(this),document.addEventListener("keydown",this.globalHotkeysEvents.handleKeyDown),document.addEventListener("keyup",this.globalHotkeysEvents.handleKeyUp)},t.prototype.componentWillUnmount=function(){null!=e.prototype.componentWillUnmount&&e.prototype.componentWillUnmount.call(this),document.removeEventListener("keydown",this.globalHotkeysEvents.handleKeyDown),document.removeEventListener("keyup",this.globalHotkeysEvents.handleKeyUp),this.globalHotkeysEvents.clear(),this.localHotkeysEvents.clear()},t.prototype.render=function(){var t=this,n=e.prototype.render.call(this);if(null==n)return n;if(!o.isValidElement(n))return console.warn(a.i),n;if(Object(s.a)(this.renderHotkeys)){var i=this.renderHotkeys();if(this.localHotkeysEvents&&this.localHotkeysEvents.setHotkeys(i.props),this.globalHotkeysEvents&&this.globalHotkeysEvents.setHotkeys(i.props),this.localHotkeysEvents.count()>0){var r=void 0===i.props.tabIndex?0:i.props.tabIndex,c=n.props,l=c.onKeyDown,u=c.onKeyUp;return o.cloneElement(n,{onKeyDown:function(e){t.localHotkeysEvents.handleKeyDown(e.nativeEvent),Object(s.b)(l,e)},onKeyUp:function(e){t.localHotkeysEvents.handleKeyUp(e.nativeEvent),Object(s.b)(u,e)},tabIndex:r})}}return n},t}(e)).displayName="HotkeysTarget("+Object(c.b)(e)+")",t}},function(e,t,n){"use strict";var i=n(249),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return i.isMemo(e)?a:s[e.$$typeof]||r}s[i.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[i.Memo]=a;var l=Object.defineProperty,u=Object.getOwnPropertyNames,h=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,n,i){if("string"!==typeof n){if(p){var r=f(n);r&&r!==p&&e(t,r,i)}var a=u(n);h&&(a=a.concat(h(n)));for(var s=c(t),m=c(n),g=0;g<a.length;++g){var v=a[g];if(!o[v]&&(!i||!i[v])&&(!m||!m[v])&&(!s||!s[v])){var _=d(n,v);try{l(t,v,_)}catch(b){}}}}return t}},function(e,t,n){"use strict";function i(e){var t,n=e.Symbol;return"function"===typeof n?n.observable?t=n.observable:(t=n("observable"),n.observable=t):t="@@observable",t}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(55))},function(e,t,n){"use strict";function i(e){return function(t){var n=t.dispatch,i=t.getState;return function(t){return function(r){return"function"===typeof r?r(n,i,e):t(r)}}}}var r=i();r.withExtraArgument=i,t.a=r},function(e,t,n){"use strict";(function(e){var n=function(){if("undefined"!==typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,i){return e[0]===t&&(n=i,!0)})),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(t,n){var i=e(this.__entries__,t);~i?this.__entries__[i][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,i=e(n,t);~i&&n.splice(i,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,i=this.__entries__;n<i.length;n++){var r=i[n];e.call(t,r[1],r[0])}},t}()}(),i="undefined"!==typeof window&&"undefined"!==typeof document&&window.document===document,r="undefined"!==typeof e&&e.Math===Math?e:"undefined"!==typeof self&&self.Math===Math?self:"undefined"!==typeof window&&window.Math===Math?window:Function("return this")(),o="function"===typeof requestAnimationFrame?requestAnimationFrame.bind(r):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var a=["top","right","bottom","left","width","height","size","weight"],s="undefined"!==typeof MutationObserver,c=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,i=!1,r=0;function a(){n&&(n=!1,e()),i&&c()}function s(){o(a)}function c(){var e=Date.now();if(n){if(e-r<2)return;i=!0}else n=!0,i=!1,setTimeout(s,t);r=e}return c}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),s?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;a.some((function(e){return!!~n.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),l=function(e,t){for(var n=0,i=Object.keys(t);n<i.length;n++){var r=i[n];Object.defineProperty(e,r,{value:t[r],enumerable:!1,writable:!1,configurable:!0})}return e},u=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||r},h=v(0,0,0,0);function d(e){return parseFloat(e)||0}function f(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce((function(t,n){return t+d(e["border-"+n+"-width"])}),0)}function p(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return h;var i=u(e).getComputedStyle(e),r=function(e){for(var t={},n=0,i=["top","right","bottom","left"];n<i.length;n++){var r=i[n],o=e["padding-"+r];t[r]=d(o)}return t}(i),o=r.left+r.right,a=r.top+r.bottom,s=d(i.width),c=d(i.height);if("border-box"===i.boxSizing&&(Math.round(s+o)!==t&&(s-=f(i,"left","right")+o),Math.round(c+a)!==n&&(c-=f(i,"top","bottom")+a)),!function(e){return e===u(e).document.documentElement}(e)){var l=Math.round(s+o)-t,p=Math.round(c+a)-n;1!==Math.abs(l)&&(s-=l),1!==Math.abs(p)&&(c-=p)}return v(r.left,r.top,s,c)}var m="undefined"!==typeof SVGGraphicsElement?function(e){return e instanceof u(e).SVGGraphicsElement}:function(e){return e instanceof u(e).SVGElement&&"function"===typeof e.getBBox};function g(e){return i?m(e)?function(e){var t=e.getBBox();return v(0,0,t.width,t.height)}(e):p(e):h}function v(e,t,n,i){return{x:e,y:t,width:n,height:i}}var _=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=v(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=g(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),b=function(e,t){var n=function(e){var t=e.x,n=e.y,i=e.width,r=e.height,o="undefined"!==typeof DOMRectReadOnly?DOMRectReadOnly:Object,a=Object.create(o.prototype);return l(a,{x:t,y:n,width:i,height:r,top:n,right:t+i,bottom:r+n,left:t}),a}(t);l(this,{target:e,contentRect:n})},y=function(){function e(e,t,i){if(this.activeObservations_=[],this.observations_=new n,"function"!==typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=i}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!==typeof Element&&Element instanceof Object){if(!(e instanceof u(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new _(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!==typeof Element&&Element instanceof Object){if(!(e instanceof u(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new b(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),w="undefined"!==typeof WeakMap?new WeakMap:new n,O=function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=c.getInstance(),i=new y(t,n,this);w.set(this,i)};["observe","unobserve","disconnect"].forEach((function(e){O.prototype[e]=function(){var t;return(t=w.get(this))[e].apply(t,arguments)}}));var C="undefined"!==typeof r.ResizeObserver?r.ResizeObserver:O;t.a=C}).call(this,n(55))},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),i=e.name||"",r=e.type||"",o=r.replace(/\/.*$/,"");return n.some((function(e){var t=e.trim();return"."===t.charAt(0)?i.toLowerCase().endsWith(t.toLowerCase()):t.endsWith("/*")?o===t.replace(/\/.*$/,""):r===t}))}return!0}},,function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var i=n(26),r=n(5),o=n(2),a=n(159),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(i.c)(t,e),t.displayName=r.DISPLAYNAME_PREFIX+".Column",t.defaultProps={cellRenderer:a.b},t}(o.PureComponent)},function(e,t,n){"use strict";var i=n(2),r=n(314),o=n(507),a=n(514),s=n(556),c=n(36),l=n(583),u=n(585),h=n(586),d=n(587).hastChildrenToReact;e.exports=m;var f={}.hasOwnProperty,p={renderers:{to:"components",id:"change-renderers-to-components"},astPlugins:{id:"remove-buggy-html-in-markdown-parser"},allowDangerousHtml:{id:"remove-buggy-html-in-markdown-parser"},escapeHtml:{id:"remove-buggy-html-in-markdown-parser"},source:{to:"children",id:"change-source-to-children"},allowNode:{to:"allowElement",id:"replace-allownode-allowedtypes-and-disallowedtypes"},allowedTypes:{to:"allowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},disallowedTypes:{to:"disallowedElements",id:"replace-allownode-allowedtypes-and-disallowedtypes"},includeNodeIndex:{to:"includeElementIndex",id:"change-includenodeindex-to-includeelementindex"}};function m(e){for(var t in p)if(f.call(p,t)&&f.call(e,t)){var n=p[t];console.warn("[react-markdown] Warning: please ".concat(n.to?"use `".concat(n.to,"` instead of"):"remove"," `").concat(t,"` (see <").concat("https://github.com/remarkjs/react-markdown/blob/main/changelog.md","#").concat(n.id,"> for more info)")),delete p[t]}var c,h=o().use(a).use(e.remarkPlugins||e.plugins||[]).use(s,{allowDangerousHtml:!0}).use(e.rehypePlugins||[]).use(u,e);"string"===typeof e.children?c=r(e.children):(void 0!==e.children&&null!==e.children&&console.warn("[react-markdown] Warning: please pass a string as `children` (not: `".concat(e.children,"`)")),c=r());var m=h.runSync(h.parse(c),c);if("root"!==m.type)throw new TypeError("Expected a `root` node");var g=i.createElement(i.Fragment,{},d({options:e,schema:l,listDepth:0},m));return e.className&&(g=i.createElement("div",{className:e.className},g)),g}m.defaultProps={transformLinkUri:h},m.propTypes={children:c.string,className:c.string,allowElement:c.func,allowedElements:c.arrayOf(c.string),disallowedElements:c.arrayOf(c.string),unwrapDisallowed:c.bool,remarkPlugins:c.arrayOf(c.oneOfType([c.object,c.func,c.arrayOf(c.oneOfType([c.object,c.func]))])),rehypePlugins:c.arrayOf(c.oneOfType([c.object,c.func,c.arrayOf(c.oneOfType([c.object,c.func]))])),sourcePos:c.bool,rawSourcePos:c.bool,skipHtml:c.bool,includeElementIndex:c.bool,transformLinkUri:c.oneOfType([c.func,c.bool]),linkTarget:c.oneOfType([c.func,c.string]),transformImageUri:c.func,components:c.object},m.uriTransformer=h},function(e,t,n){"use strict";var i,r=n(598),o=n(607),a=n(615);e.exports=function(e){var t=this.data();!i&&(this.Parser&&this.Parser.prototype&&this.Parser.prototype.blockTokenizers||this.Compiler&&this.Compiler.prototype&&this.Compiler.prototype.visitors)&&(i=!0,console.warn("[remark-gfm] Warning: please upgrade to remark 13 to use this plugin"));function n(e,n){t[e]?t[e].push(n):t[e]=[n]}n("micromarkExtensions",r(e)),n("fromMarkdownExtensions",o),n("toMarkdownExtensions",a(e))}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.split=void 0;var i=o(n(629)),r=o(n(630));function o(e){return e&&e.__esModule?e:{default:e}}t.split=r.default,t.default=i.default},,function(e,t,n){"use strict";var i=n(2),r=n.n(i),o=n(36),a=n.n(o);function s(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{c(i.next(e))}catch(t){o(t)}}function s(e){try{c(i.throw(e))}catch(t){o(t)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((i=i.apply(e,t||[])).next())}))}function c(e,t){var n,i,r,o,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"===typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,i=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(r=(r=a.trys).length>0&&r[r.length-1])&&(6===o[0]||2===o[0])){a=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]<r[3])){a.label=o[1];break}if(6===o[0]&&a.label<r[1]){a.label=r[1],r=o;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(o);break}r[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(s){o=[6,s],i=0}finally{n=r=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function l(e,t){var n="function"===typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)a.push(i.value)}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return a}var u=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function h(e,t){var n=function(e){var t=e.name;if(t&&-1!==t.lastIndexOf(".")&&!e.type){var n=t.split(".").pop().toLowerCase(),i=u.get(n);i&&Object.defineProperty(e,"type",{value:i,writable:!1,configurable:!1,enumerable:!0})}return e}(e);if("string"!==typeof n.path){var i=e.webkitRelativePath;Object.defineProperty(n,"path",{value:"string"===typeof t?t:"string"===typeof i&&i.length>0?i:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}var d=[".DS_Store","Thumbs.db"];function f(e){return s(this,void 0,void 0,(function(){return c(this,(function(t){return[2,(n=e,n.dataTransfer&&e.dataTransfer?m(e.dataTransfer,e.type):p(e))];var n}))}))}function p(e){return(null!==e.target&&e.target.files?v(e.target.files):[]).map((function(e){return h(e)}))}function m(e,t){return s(this,void 0,void 0,(function(){var n;return c(this,(function(i){switch(i.label){case 0:return e.items?(n=v(e.items).filter((function(e){return"file"===e.kind})),"drop"!==t?[2,n]:[4,Promise.all(n.map(_))]):[3,2];case 1:return[2,g(b(i.sent()))];case 2:return[2,g(v(e.files).map((function(e){return h(e)})))]}}))}))}function g(e){return e.filter((function(e){return-1===d.indexOf(e.name)}))}function v(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];t.push(i)}return t}function _(e){if("function"!==typeof e.webkitGetAsEntry)return y(e);var t=e.webkitGetAsEntry();return t&&t.isDirectory?O(t):y(e)}function b(e){return e.reduce((function(e,t){return function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(l(arguments[t]));return e}(e,Array.isArray(t)?b(t):[t])}),[])}function y(e){var t=e.getAsFile();if(!t)return Promise.reject(e+" is not a File");var n=h(t);return Promise.resolve(n)}function w(e){return s(this,void 0,void 0,(function(){return c(this,(function(t){return[2,e.isDirectory?O(e):C(e)]}))}))}function O(e){var t=e.createReader();return new Promise((function(e,n){var i=[];!function r(){var o=this;t.readEntries((function(t){return s(o,void 0,void 0,(function(){var o,a,s;return c(this,(function(c){switch(c.label){case 0:if(t.length)return[3,5];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,Promise.all(i)];case 2:return o=c.sent(),e(o),[3,4];case 3:return a=c.sent(),n(a),[3,4];case 4:return[3,6];case 5:s=Promise.all(t.map(w)),i.push(s),r(),c.label=6;case 6:return[2]}}))}))}),(function(e){n(e)}))}()}))}function C(e){return s(this,void 0,void 0,(function(){return c(this,(function(t){return[2,new Promise((function(t,n){e.file((function(n){var i=h(n,e.fullPath);t(i)}),(function(e){n(e)}))}))]}))}))}var E=n(401),A=n.n(E);function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e))&&"[object Arguments]"!==Object.prototype.toString.call(e))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(c){r=!0,o=c}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var T=function(e){e=Array.isArray(e)&&1===e.length?e[0]:e;var t=Array.isArray(e)?"one of ".concat(e.join(", ")):e;return{code:"file-invalid-type",message:"File type must be ".concat(t)}},S=function(e){return{code:"file-too-large",message:"File is larger than ".concat(e," bytes")}},D=function(e){return{code:"file-too-small",message:"File is smaller than ".concat(e," bytes")}},P={code:"too-many-files",message:"Too many files"};function I(e,t){var n="application/x-moz-file"===e.type||A()(e,t);return[n,n?null:T(t)]}function M(e,t,n){if(R(e.size))if(R(t)&&R(n)){if(e.size>n)return[!1,S(n)];if(e.size<t)return[!1,D(t)]}else{if(R(t)&&e.size<t)return[!1,D(t)];if(R(n)&&e.size>n)return[!1,S(n)]}return[!0,null]}function R(e){return void 0!==e&&null!==e}function L(e){var t=e.files,n=e.accept,i=e.minSize,r=e.maxSize;return!(!e.multiple&&t.length>1)&&t.every((function(e){var t=x(I(e,n),1)[0],o=x(M(e,i,r),1)[0];return t&&o}))}function j(e){return"function"===typeof e.isPropagationStopped?e.isPropagationStopped():"undefined"!==typeof e.cancelBubble&&e.cancelBubble}function F(e){return e.dataTransfer?Array.prototype.some.call(e.dataTransfer.types,(function(e){return"Files"===e||"application/x-moz-file"===e})):!!e.target&&!!e.target.files}function N(e){e.preventDefault()}function z(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}function k(e){return-1!==e.indexOf("Edge/")}function B(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return z(e)||k(e)}function H(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];return t.some((function(t){return!j(e)&&t&&t.apply(void 0,[e].concat(i)),j(e)}))}}function V(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function U(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e))&&"[object Arguments]"!==Object.prototype.toString.call(e))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(c){r=!0,o=c}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function W(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function G(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?W(n,!0).forEach((function(t){q(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):W(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var $=Object(i.forwardRef)((function(e,t){var n=e.children,o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.accept,n=e.disabled,r=void 0!==n&&n,o=e.getFilesFromEvent,a=void 0===o?f:o,s=e.maxSize,c=void 0===s?1/0:s,l=e.minSize,u=void 0===l?0:l,h=e.multiple,d=void 0===h||h,p=e.onDragEnter,m=e.onDragLeave,g=e.onDragOver,v=e.onDrop,_=e.onDropAccepted,b=e.onDropRejected,y=e.onFileDialogCancel,w=e.preventDropOnDocument,O=void 0===w||w,C=e.noClick,E=void 0!==C&&C,A=e.noKeyboard,x=void 0!==A&&A,T=e.noDrag,S=void 0!==T&&T,D=e.noDragEventsBubbling,R=void 0!==D&&D,z=Object(i.useRef)(null),k=Object(i.useRef)(null),W=Object(i.useReducer)(K,X),$=U(W,2),Q=$[0],Z=$[1],J=Q.isFocused,ee=Q.isFileDialogActive,te=Q.draggedFiles,ne=Object(i.useCallback)((function(){k.current&&(Z({type:"openDialog"}),k.current.value=null,k.current.click())}),[Z]),ie=function(){ee&&setTimeout((function(){k.current&&(k.current.files.length||(Z({type:"closeDialog"}),"function"===typeof y&&y()))}),300)};Object(i.useEffect)((function(){return window.addEventListener("focus",ie,!1),function(){window.removeEventListener("focus",ie,!1)}}),[k,ee,y]);var re=Object(i.useCallback)((function(e){z.current&&z.current.isEqualNode(e.target)&&(32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),ne()))}),[z,k]),oe=Object(i.useCallback)((function(){Z({type:"focus"})}),[]),ae=Object(i.useCallback)((function(){Z({type:"blur"})}),[]),se=Object(i.useCallback)((function(){E||(B()?setTimeout(ne,0):ne())}),[k,E]),ce=Object(i.useRef)([]),le=function(e){z.current&&z.current.contains(e.target)||(e.preventDefault(),ce.current=[])};Object(i.useEffect)((function(){return O&&(document.addEventListener("dragover",N,!1),document.addEventListener("drop",le,!1)),function(){O&&(document.removeEventListener("dragover",N),document.removeEventListener("drop",le))}}),[z,O]);var ue=Object(i.useCallback)((function(e){e.preventDefault(),e.persist(),ve(e),ce.current=[].concat(V(ce.current),[e.target]),F(e)&&Promise.resolve(a(e)).then((function(t){j(e)&&!R||(Z({draggedFiles:t,isDragActive:!0,type:"setDraggedFiles"}),p&&p(e))}))}),[a,p,R]),he=Object(i.useCallback)((function(e){if(e.preventDefault(),e.persist(),ve(e),e.dataTransfer)try{e.dataTransfer.dropEffect="copy"}catch(t){}return F(e)&&g&&g(e),!1}),[g,R]),de=Object(i.useCallback)((function(e){e.preventDefault(),e.persist(),ve(e);var t=ce.current.filter((function(e){return z.current&&z.current.contains(e)})),n=t.indexOf(e.target);-1!==n&&t.splice(n,1),ce.current=t,t.length>0||(Z({isDragActive:!1,type:"setDraggedFiles",draggedFiles:[]}),F(e)&&m&&m(e))}),[z,m,R]),fe=Object(i.useCallback)((function(e){e.preventDefault(),e.persist(),ve(e),ce.current=[],F(e)&&Promise.resolve(a(e)).then((function(n){if(!j(e)||R){var i=[],r=[];n.forEach((function(e){var n=U(I(e,t),2),o=n[0],a=n[1],s=U(M(e,u,c),2),l=s[0],h=s[1];if(o&&l)i.push(e);else{var d=[a,h].filter((function(e){return e}));r.push({file:e,errors:d})}})),!d&&i.length>1&&(i.forEach((function(e){r.push({file:e,errors:[P]})})),i.splice(0)),Z({acceptedFiles:i,fileRejections:r,type:"setFiles"}),v&&v(i,r,e),r.length>0&&b&&b(r,e),i.length>0&&_&&_(i,e)}})),Z({type:"reset"})}),[d,t,u,c,a,v,_,b,R]),pe=function(e){return r?null:e},me=function(e){return x?null:pe(e)},ge=function(e){return S?null:pe(e)},ve=function(e){R&&e.stopPropagation()},_e=Object(i.useMemo)((function(){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.refKey,n=void 0===t?"ref":t,i=e.onKeyDown,o=e.onFocus,a=e.onBlur,s=e.onClick,c=e.onDragEnter,l=e.onDragOver,u=e.onDragLeave,h=e.onDrop,d=Y(e,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragEnter","onDragOver","onDragLeave","onDrop"]);return G(q({onKeyDown:me(H(i,re)),onFocus:me(H(o,oe)),onBlur:me(H(a,ae)),onClick:pe(H(s,se)),onDragEnter:ge(H(c,ue)),onDragOver:ge(H(l,he)),onDragLeave:ge(H(u,de)),onDrop:ge(H(h,fe))},n,z),r||x?{}:{tabIndex:0},{},d)}}),[z,re,oe,ae,se,ue,he,de,fe,x,S,r]),be=Object(i.useCallback)((function(e){e.stopPropagation()}),[]),ye=Object(i.useMemo)((function(){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,i=void 0===n?"ref":n,r=e.onChange,o=e.onClick,a=Y(e,["refKey","onChange","onClick"]),s=q({accept:t,multiple:d,type:"file",style:{display:"none"},onChange:pe(H(r,fe)),onClick:pe(H(o,be)),autoComplete:"off",tabIndex:-1},i,k);return G({},s,{},a)}}),[k,t,d,fe,r]),we=te.length,Oe=we>0&&L({files:te,accept:t,minSize:u,maxSize:c,multiple:d}),Ce=we>0&&!Oe;return G({},Q,{isDragAccept:Oe,isDragReject:Ce,isFocused:J&&!r,getRootProps:_e,getInputProps:ye,rootRef:z,inputRef:k,open:pe(ne)})}(Y(e,["children"])),a=o.open,s=Y(o,["open"]);return Object(i.useImperativeHandle)(t,(function(){return{open:a}}),[a]),r.a.createElement(i.Fragment,null,n(G({},s,{open:a})))}));$.displayName="Dropzone",$.propTypes={children:a.a.func,accept:a.a.oneOfType([a.a.string,a.a.arrayOf(a.a.string)]),multiple:a.a.bool,preventDropOnDocument:a.a.bool,noClick:a.a.bool,noKeyboard:a.a.bool,noDrag:a.a.bool,noDragEventsBubbling:a.a.bool,minSize:a.a.number,maxSize:a.a.number,disabled:a.a.bool,getFilesFromEvent:a.a.func,onFileDialogCancel:a.a.func,onDragEnter:a.a.func,onDragLeave:a.a.func,onDragOver:a.a.func,onDrop:a.a.func,onDropAccepted:a.a.func,onDropRejected:a.a.func};t.a=$;var X={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,draggedFiles:[],acceptedFiles:[],fileRejections:[]};function K(e,t){switch(t.type){case"focus":return G({},e,{isFocused:!0});case"blur":return G({},e,{isFocused:!1});case"openDialog":return G({},e,{isFileDialogActive:!0});case"closeDialog":return G({},e,{isFileDialogActive:!1});case"setDraggedFiles":var n=t.isDragActive;return G({},e,{draggedFiles:t.draggedFiles,isDragActive:n});case"setFiles":return G({},e,{acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections});case"reset":return G({},e,{isFileDialogActive:!1,isDragActive:!1,draggedFiles:[],acceptedFiles:[],fileRejections:[]});default:return e}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var i=n(66),r=n(132);var o=n(205);function a(e,t,n){return(a=Object(o.a)()?Reflect.construct:function(e,t,n){var i=[null];i.push.apply(i,t);var o=new(Function.bind.apply(e,i));return n&&Object(r.a)(o,n.prototype),o}).apply(null,arguments)}function s(e){var t="function"===typeof Map?new Map:void 0;return(s=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,o)}function o(){return a(e,arguments,Object(i.a)(this).constructor)}return o.prototype=Object.create(e.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),Object(r.a)(o,e)})(e)}},,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";var i=n(216),r="function"===typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,a=r?Symbol.for("react.portal"):60106,s=r?Symbol.for("react.fragment"):60107,c=r?Symbol.for("react.strict_mode"):60108,l=r?Symbol.for("react.profiler"):60114,u=r?Symbol.for("react.provider"):60109,h=r?Symbol.for("react.context"):60110,d=r?Symbol.for("react.forward_ref"):60112,f=r?Symbol.for("react.suspense"):60113,p=r?Symbol.for("react.memo"):60115,m=r?Symbol.for("react.lazy"):60116,g="function"===typeof Symbol&&Symbol.iterator;function v(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b={};function y(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||_}function w(){}function O(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||_}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error(v(85));this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},w.prototype=y.prototype;var C=O.prototype=new w;C.constructor=O,i(C,y.prototype),C.isPureReactComponent=!0;var E={current:null},A=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function T(e,t,n){var i,r={},a=null,s=null;if(null!=t)for(i in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)A.call(t,i)&&!x.hasOwnProperty(i)&&(r[i]=t[i]);var c=arguments.length-2;if(1===c)r.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];r.children=l}if(e&&e.defaultProps)for(i in c=e.defaultProps)void 0===r[i]&&(r[i]=c[i]);return{$$typeof:o,type:e,key:a,ref:s,props:r,_owner:E.current}}function S(e){return"object"===typeof e&&null!==e&&e.$$typeof===o}var D=/\/+/g,P=[];function I(e,t,n,i){if(P.length){var r=P.pop();return r.result=e,r.keyPrefix=t,r.func=n,r.context=i,r.count=0,r}return{result:e,keyPrefix:t,func:n,context:i,count:0}}function M(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>P.length&&P.push(e)}function R(e,t,n){return null==e?0:function e(t,n,i,r){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var c=!1;if(null===t)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case o:case a:c=!0}}if(c)return i(r,t,""===n?"."+L(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+L(s=t[l],l);c+=e(s,u,i,r)}else if(null===t||"object"!==typeof t?u=null:u="function"===typeof(u=g&&t[g]||t["@@iterator"])?u:null,"function"===typeof u)for(t=u.call(t),l=0;!(s=t.next()).done;)c+=e(s=s.value,u=n+L(s,l++),i,r);else if("object"===s)throw i=""+t,Error(v(31,"[object Object]"===i?"object with keys {"+Object.keys(t).join(", ")+"}":i,""));return c}(e,"",t,n)}function L(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function j(e,t){e.func.call(e.context,t,e.count++)}function F(e,t,n){var i=e.result,r=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?N(e,i,n,(function(e){return e})):null!=e&&(S(e)&&(e=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,r+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(D,"$&/")+"/")+n)),i.push(e))}function N(e,t,n,i,r){var o="";null!=n&&(o=(""+n).replace(D,"$&/")+"/"),R(e,F,t=I(t,o,i,r)),M(t)}var z={current:null};function k(){var e=z.current;if(null===e)throw Error(v(321));return e}var B={ReactCurrentDispatcher:z,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:E,IsSomeRendererActing:{current:!1},assign:i};t.Children={map:function(e,t,n){if(null==e)return e;var i=[];return N(e,i,null,t,n),i},forEach:function(e,t,n){if(null==e)return e;R(e,j,t=I(null,null,t,n)),M(t)},count:function(e){return R(e,(function(){return null}),null)},toArray:function(e){var t=[];return N(e,t,null,(function(e){return e})),t},only:function(e){if(!S(e))throw Error(v(143));return e}},t.Component=y,t.Fragment=s,t.Profiler=l,t.PureComponent=O,t.StrictMode=c,t.Suspense=f,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=B,t.cloneElement=function(e,t,n){if(null===e||void 0===e)throw Error(v(267,e));var r=i({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=E.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)A.call(t,u)&&!x.hasOwnProperty(u)&&(r[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)r.children=n;else if(1<u){l=Array(u);for(var h=0;h<u;h++)l[h]=arguments[h+2];r.children=l}return{$$typeof:o,type:e.type,key:a,ref:s,props:r,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:h,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},t.createElement=T,t.createFactory=function(e){var t=T.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:d,render:e}},t.isValidElement=S,t.lazy=function(e){return{$$typeof:m,_ctor:e,_status:-1,_result:null}},t.memo=function(e,t){return{$$typeof:p,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return k().useCallback(e,t)},t.useContext=function(e,t){return k().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return k().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return k().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return k().useLayoutEffect(e,t)},t.useMemo=function(e,t){return k().useMemo(e,t)},t.useReducer=function(e,t,n){return k().useReducer(e,t,n)},t.useRef=function(e){return k().useRef(e)},t.useState=function(e){return k().useState(e)},t.version="16.14.0"},function(e,t,n){"use strict";var i=n(2),r=n(216),o=n(433);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!i)throw Error(a(227));function s(e,t,n,i,r,o,a,s,c){var l=Array.prototype.slice.call(arguments,3);try{t.apply(n,l)}catch(u){this.onError(u)}}var c=!1,l=null,u=!1,h=null,d={onError:function(e){c=!0,l=e}};function f(e,t,n,i,r,o,a,u,h){c=!1,l=null,s.apply(d,arguments)}var p=null,m=null,g=null;function v(e,t,n){var i=e.type||"unknown-event";e.currentTarget=g(n),function(e,t,n,i,r,o,s,d,p){if(f.apply(this,arguments),c){if(!c)throw Error(a(198));var m=l;c=!1,l=null,u||(u=!0,h=m)}}(i,t,void 0,e),e.currentTarget=null}var _=null,b={};function y(){if(_)for(var e in b){var t=b[e],n=_.indexOf(e);if(!(-1<n))throw Error(a(96,e));if(!O[n]){if(!t.extractEvents)throw Error(a(97,e));for(var i in O[n]=t,n=t.eventTypes){var r=void 0,o=n[i],s=t,c=i;if(C.hasOwnProperty(c))throw Error(a(99,c));C[c]=o;var l=o.phasedRegistrationNames;if(l){for(r in l)l.hasOwnProperty(r)&&w(l[r],s,c);r=!0}else o.registrationName?(w(o.registrationName,s,c),r=!0):r=!1;if(!r)throw Error(a(98,i,e))}}}}function w(e,t,n){if(E[e])throw Error(a(100,e));E[e]=t,A[e]=t.eventTypes[n].dependencies}var O=[],C={},E={},A={};function x(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var i=e[t];if(!b.hasOwnProperty(t)||b[t]!==i){if(b[t])throw Error(a(102,t));b[t]=i,n=!0}}n&&y()}var T=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),S=null,D=null,P=null;function I(e){if(e=m(e)){if("function"!==typeof S)throw Error(a(280));var t=e.stateNode;t&&(t=p(t),S(e.stateNode,e.type,t))}}function M(e){D?P?P.push(e):P=[e]:D=e}function R(){if(D){var e=D,t=P;if(P=D=null,I(e),t)for(e=0;e<t.length;e++)I(t[e])}}function L(e,t){return e(t)}function j(e,t,n,i,r){return e(t,n,i,r)}function F(){}var N=L,z=!1,k=!1;function B(){null===D&&null===P||(F(),R())}function H(e,t,n){if(k)return e(t,n);k=!0;try{return N(e,t,n)}finally{k=!1,B()}}var V=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,U=Object.prototype.hasOwnProperty,W={},G={};function q(e,t,n,i,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=i,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o}var Y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){Y[e]=new q(e,0,!1,e,null,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];Y[t]=new q(t,1,!1,e[1],null,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){Y[e]=new q(e,2,!1,e.toLowerCase(),null,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){Y[e]=new q(e,2,!1,e,null,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){Y[e]=new q(e,3,!1,e.toLowerCase(),null,!1)})),["checked","multiple","muted","selected"].forEach((function(e){Y[e]=new q(e,3,!0,e,null,!1)})),["capture","download"].forEach((function(e){Y[e]=new q(e,4,!1,e,null,!1)})),["cols","rows","size","span"].forEach((function(e){Y[e]=new q(e,6,!1,e,null,!1)})),["rowSpan","start"].forEach((function(e){Y[e]=new q(e,5,!1,e.toLowerCase(),null,!1)}));var $=/[\-:]([a-z])/g;function X(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace($,X);Y[t]=new q(t,1,!1,e,null,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace($,X);Y[t]=new q(t,1,!1,e,"http://www.w3.org/1999/xlink",!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace($,X);Y[t]=new q(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)})),["tabIndex","crossOrigin"].forEach((function(e){Y[e]=new q(e,1,!1,e.toLowerCase(),null,!1)})),Y.xlinkHref=new q("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach((function(e){Y[e]=new q(e,1,!1,e.toLowerCase(),null,!0)}));var K=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function Q(e,t,n,i){var r=Y.hasOwnProperty(t)?Y[t]:null;(null!==r?0===r.type:!i&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,i){if(null===t||"undefined"===typeof t||function(e,t,n,i){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!i&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,i))return!0;if(i)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,r,i)&&(n=null),i||null===r?function(e){return!!U.call(G,e)||!U.call(W,e)&&(V.test(e)?G[e]=!0:(W[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=null===n?3!==r.type&&"":n:(t=r.attributeName,i=r.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(r=r.type)||4===r&&!0===n?"":""+n,i?e.setAttributeNS(i,t,n):e.setAttribute(t,n))))}K.hasOwnProperty("ReactCurrentDispatcher")||(K.ReactCurrentDispatcher={current:null}),K.hasOwnProperty("ReactCurrentBatchConfig")||(K.ReactCurrentBatchConfig={suspense:null});var Z=/^(.*)[\\\/]/,J="function"===typeof Symbol&&Symbol.for,ee=J?Symbol.for("react.element"):60103,te=J?Symbol.for("react.portal"):60106,ne=J?Symbol.for("react.fragment"):60107,ie=J?Symbol.for("react.strict_mode"):60108,re=J?Symbol.for("react.profiler"):60114,oe=J?Symbol.for("react.provider"):60109,ae=J?Symbol.for("react.context"):60110,se=J?Symbol.for("react.concurrent_mode"):60111,ce=J?Symbol.for("react.forward_ref"):60112,le=J?Symbol.for("react.suspense"):60113,ue=J?Symbol.for("react.suspense_list"):60120,he=J?Symbol.for("react.memo"):60115,de=J?Symbol.for("react.lazy"):60116,fe=J?Symbol.for("react.block"):60121,pe="function"===typeof Symbol&&Symbol.iterator;function me(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=pe&&e[pe]||e["@@iterator"])?e:null}function ge(e){if(null==e)return null;if("function"===typeof e)return e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case ne:return"Fragment";case te:return"Portal";case re:return"Profiler";case ie:return"StrictMode";case le:return"Suspense";case ue:return"SuspenseList"}if("object"===typeof e)switch(e.$$typeof){case ae:return"Context.Consumer";case oe:return"Context.Provider";case ce:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case he:return ge(e.type);case fe:return ge(e.render);case de:if(e=1===e._status?e._result:null)return ge(e)}return null}function ve(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n="";break e;default:var i=e._debugOwner,r=e._debugSource,o=ge(e.type);n=null,i&&(n=ge(i.type)),i=o,o="",r?o=" (at "+r.fileName.replace(Z,"")+":"+r.lineNumber+")":n&&(o=" (created by "+n+")"),n="\n in "+(i||"Unknown")+o}t+=n,e=e.return}while(e);return t}function _e(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function be(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function ye(e){e._valueTracker||(e._valueTracker=function(e){var t=be(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),i=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof n&&"function"===typeof n.get&&"function"===typeof n.set){var r=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(e){i=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return i},setValue:function(e){i=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function we(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),i="";return e&&(i=be(e)?e.checked?"true":"false":e.value),(e=i)!==n&&(t.setValue(e),!0)}function Oe(e,t){var n=t.checked;return r({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Ce(e,t){var n=null==t.defaultValue?"":t.defaultValue,i=null!=t.checked?t.checked:t.defaultChecked;n=_e(null!=t.value?t.value:n),e._wrapperState={initialChecked:i,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Ee(e,t){null!=(t=t.checked)&&Q(e,"checked",t,!1)}function Ae(e,t){Ee(e,t);var n=_e(t.value),i=t.type;if(null!=n)"number"===i?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===i||"reset"===i)return void e.removeAttribute("value");t.hasOwnProperty("value")?Te(e,t.type,n):t.hasOwnProperty("defaultValue")&&Te(e,t.type,_e(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function xe(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var i=t.type;if(!("submit"!==i&&"reset"!==i||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function Te(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function Se(e,t){return e=r({children:void 0},t),(t=function(e){var t="";return i.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function De(e,t,n,i){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&i&&(e[n].defaultSelected=!0)}else{for(n=""+_e(n),t=null,r=0;r<e.length;r++){if(e[r].value===n)return e[r].selected=!0,void(i&&(e[r].defaultSelected=!0));null!==t||e[r].disabled||(t=e[r])}null!==t&&(t.selected=!0)}}function Pe(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return r({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Ie(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:_e(n)}}function Me(e,t){var n=_e(t.value),i=_e(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=i&&(e.defaultValue=""+i)}function Re(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var Le="http://www.w3.org/1999/xhtml",je="http://www.w3.org/2000/svg";function Fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Ne(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ze,ke=function(e){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,i,r){MSApp.execUnsafeLocalFunction((function(){return e(t,n)}))}:e}((function(e,t){if(e.namespaceURI!==je||"innerHTML"in e)e.innerHTML=t;else{for((ze=ze||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ze.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}));function Be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function He(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Ve={animationend:He("Animation","AnimationEnd"),animationiteration:He("Animation","AnimationIteration"),animationstart:He("Animation","AnimationStart"),transitionend:He("Transition","TransitionEnd")},Ue={},We={};function Ge(e){if(Ue[e])return Ue[e];if(!Ve[e])return e;var t,n=Ve[e];for(t in n)if(n.hasOwnProperty(t)&&t in We)return Ue[e]=n[t];return e}T&&(We=document.createElement("div").style,"AnimationEvent"in window||(delete Ve.animationend.animation,delete Ve.animationiteration.animation,delete Ve.animationstart.animation),"TransitionEvent"in window||delete Ve.transitionend.transition);var qe=Ge("animationend"),Ye=Ge("animationiteration"),$e=Ge("animationstart"),Xe=Ge("transitionend"),Ke="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Qe=new("function"===typeof WeakMap?WeakMap:Map);function Ze(e){var t=Qe.get(e);return void 0===t&&(t=new Map,Qe.set(e,t)),t}function Je(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!==(1026&(t=e).effectTag)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function et(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function tt(e){if(Je(e)!==e)throw Error(a(188))}function nt(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=Je(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,i=t;;){var r=n.return;if(null===r)break;var o=r.alternate;if(null===o){if(null!==(i=r.return)){n=i;continue}break}if(r.child===o.child){for(o=r.child;o;){if(o===n)return tt(r),e;if(o===i)return tt(r),t;o=o.sibling}throw Error(a(188))}if(n.return!==i.return)n=r,i=o;else{for(var s=!1,c=r.child;c;){if(c===n){s=!0,n=r,i=o;break}if(c===i){s=!0,i=r,n=o;break}c=c.sibling}if(!s){for(c=o.child;c;){if(c===n){s=!0,n=o,i=r;break}if(c===i){s=!0,i=o,n=r;break}c=c.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==i)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function it(e,t){if(null==t)throw Error(a(30));return null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function rt(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var ot=null;function at(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var i=0;i<t.length&&!e.isPropagationStopped();i++)v(e,t[i],n[i]);else t&&v(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function st(e){if(null!==e&&(ot=it(ot,e)),e=ot,ot=null,e){if(rt(e,at),ot)throw Error(a(95));if(u)throw e=h,u=!1,h=null,e}}function ct(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function lt(e){if(!T)return!1;var t=(e="on"+e)in document;return t||((t=document.createElement("div")).setAttribute(e,"return;"),t="function"===typeof t[e]),t}var ut=[];function ht(e){e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>ut.length&&ut.push(e)}function dt(e,t,n,i){if(ut.length){var r=ut.pop();return r.topLevelType=e,r.eventSystemFlags=i,r.nativeEvent=t,r.targetInst=n,r}return{topLevelType:e,eventSystemFlags:i,nativeEvent:t,targetInst:n,ancestors:[]}}function ft(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var i=n;if(3===i.tag)i=i.stateNode.containerInfo;else{for(;i.return;)i=i.return;i=3!==i.tag?null:i.stateNode.containerInfo}if(!i)break;5!==(t=n.tag)&&6!==t||e.ancestors.push(n),n=Tn(i)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var r=ct(e.nativeEvent);i=e.topLevelType;var o=e.nativeEvent,a=e.eventSystemFlags;0===n&&(a|=64);for(var s=null,c=0;c<O.length;c++){var l=O[c];l&&(l=l.extractEvents(i,t,o,r,a))&&(s=it(s,l))}st(s)}}function pt(e,t,n){if(!n.has(e)){switch(e){case"scroll":$t(t,"scroll",!0);break;case"focus":case"blur":$t(t,"focus",!0),$t(t,"blur",!0),n.set("blur",null),n.set("focus",null);break;case"cancel":case"close":lt(e)&&$t(t,e,!0);break;case"invalid":case"submit":case"reset":break;default:-1===Ke.indexOf(e)&&Yt(e,t)}n.set(e,null)}}var mt,gt,vt,_t=!1,bt=[],yt=null,wt=null,Ot=null,Ct=new Map,Et=new Map,At=[],xt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),Tt="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" ");function St(e,t,n,i,r){return{blockedOn:e,topLevelType:t,eventSystemFlags:32|n,nativeEvent:r,container:i}}function Dt(e,t){switch(e){case"focus":case"blur":yt=null;break;case"dragenter":case"dragleave":wt=null;break;case"mouseover":case"mouseout":Ot=null;break;case"pointerover":case"pointerout":Ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Et.delete(t.pointerId)}}function Pt(e,t,n,i,r,o){return null===e||e.nativeEvent!==o?(e=St(t,n,i,r,o),null!==t&&(null!==(t=Sn(t))&>(t)),e):(e.eventSystemFlags|=i,e)}function It(e){var t=Tn(e.target);if(null!==t){var n=Je(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=et(n)))return e.blockedOn=t,void o.unstable_runWithPriority(e.priority,(function(){vt(n)}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Mt(e){if(null!==e.blockedOn)return!1;var t=Zt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);if(null!==t){var n=Sn(t);return null!==n&>(n),e.blockedOn=t,!1}return!0}function Rt(e,t,n){Mt(e)&&n.delete(t)}function Lt(){for(_t=!1;0<bt.length;){var e=bt[0];if(null!==e.blockedOn){null!==(e=Sn(e.blockedOn))&&mt(e);break}var t=Zt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);null!==t?e.blockedOn=t:bt.shift()}null!==yt&&Mt(yt)&&(yt=null),null!==wt&&Mt(wt)&&(wt=null),null!==Ot&&Mt(Ot)&&(Ot=null),Ct.forEach(Rt),Et.forEach(Rt)}function jt(e,t){e.blockedOn===t&&(e.blockedOn=null,_t||(_t=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Lt)))}function Ft(e){function t(t){return jt(t,e)}if(0<bt.length){jt(bt[0],e);for(var n=1;n<bt.length;n++){var i=bt[n];i.blockedOn===e&&(i.blockedOn=null)}}for(null!==yt&&jt(yt,e),null!==wt&&jt(wt,e),null!==Ot&&jt(Ot,e),Ct.forEach(t),Et.forEach(t),n=0;n<At.length;n++)(i=At[n]).blockedOn===e&&(i.blockedOn=null);for(;0<At.length&&null===(n=At[0]).blockedOn;)It(n),null===n.blockedOn&&At.shift()}var Nt={},zt=new Map,kt=new Map,Bt=["abort","abort",qe,"animationEnd",Ye,"animationIteration",$e,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Xe,"transitionEnd","waiting","waiting"];function Ht(e,t){for(var n=0;n<e.length;n+=2){var i=e[n],r=e[n+1],o="on"+(r[0].toUpperCase()+r.slice(1));o={phasedRegistrationNames:{bubbled:o,captured:o+"Capture"},dependencies:[i],eventPriority:t},kt.set(i,t),zt.set(i,o),Nt[r]=o}}Ht("blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Ht("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Ht(Bt,2);for(var Vt="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Ut=0;Ut<Vt.length;Ut++)kt.set(Vt[Ut],0);var Wt=o.unstable_UserBlockingPriority,Gt=o.unstable_runWithPriority,qt=!0;function Yt(e,t){$t(t,e,!1)}function $t(e,t,n){var i=kt.get(t);switch(void 0===i?2:i){case 0:i=Xt.bind(null,t,1,e);break;case 1:i=Kt.bind(null,t,1,e);break;default:i=Qt.bind(null,t,1,e)}n?e.addEventListener(t,i,!0):e.addEventListener(t,i,!1)}function Xt(e,t,n,i){z||F();var r=Qt,o=z;z=!0;try{j(r,e,t,n,i)}finally{(z=o)||B()}}function Kt(e,t,n,i){Gt(Wt,Qt.bind(null,e,t,n,i))}function Qt(e,t,n,i){if(qt)if(0<bt.length&&-1<xt.indexOf(e))e=St(null,e,t,n,i),bt.push(e);else{var r=Zt(e,t,n,i);if(null===r)Dt(e,i);else if(-1<xt.indexOf(e))e=St(r,e,t,n,i),bt.push(e);else if(!function(e,t,n,i,r){switch(t){case"focus":return yt=Pt(yt,e,t,n,i,r),!0;case"dragenter":return wt=Pt(wt,e,t,n,i,r),!0;case"mouseover":return Ot=Pt(Ot,e,t,n,i,r),!0;case"pointerover":var o=r.pointerId;return Ct.set(o,Pt(Ct.get(o)||null,e,t,n,i,r)),!0;case"gotpointercapture":return o=r.pointerId,Et.set(o,Pt(Et.get(o)||null,e,t,n,i,r)),!0}return!1}(r,e,t,n,i)){Dt(e,i),e=dt(e,i,null,t);try{H(ft,e)}finally{ht(e)}}}}function Zt(e,t,n,i){if(null!==(n=Tn(n=ct(i)))){var r=Je(n);if(null===r)n=null;else{var o=r.tag;if(13===o){if(null!==(n=et(r)))return n;n=null}else if(3===o){if(r.stateNode.hydrate)return 3===r.tag?r.stateNode.containerInfo:null;n=null}else r!==n&&(n=null)}}e=dt(e,i,n,t);try{H(ft,e)}finally{ht(e)}return null}var Jt={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},en=["Webkit","ms","Moz","O"];function tn(e,t,n){return null==t||"boolean"===typeof t||""===t?"":n||"number"!==typeof t||0===t||Jt.hasOwnProperty(e)&&Jt[e]?(""+t).trim():t+"px"}function nn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var i=0===n.indexOf("--"),r=tn(n,t[n],i);"float"===n&&(n="cssFloat"),i?e.setProperty(n,r):e[n]=r}}Object.keys(Jt).forEach((function(e){en.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Jt[t]=Jt[e]}))}));var rn=r({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function on(e,t){if(t){if(rn[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e,""));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!==typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!==typeof t.style)throw Error(a(62,""))}}function an(e,t){if(-1===e.indexOf("-"))return"string"===typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var sn=Le;function cn(e,t){var n=Ze(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=A[t];for(var i=0;i<t.length;i++)pt(t[i],e,n)}function ln(){}function un(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function hn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function dn(e,t){var n,i=hn(e);for(e=0;i;){if(3===i.nodeType){if(n=e+i.textContent.length,e<=t&&n>=t)return{node:i,offset:t-e};e=n}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=hn(i)}}function fn(){for(var e=window,t=un();t instanceof e.HTMLIFrameElement;){try{var n="string"===typeof t.contentWindow.location.href}catch(i){n=!1}if(!n)break;t=un((e=t.contentWindow).document)}return t}function pn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var mn=null,gn=null;function vn(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function _n(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"===typeof t.children||"number"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var bn="function"===typeof setTimeout?setTimeout:void 0,yn="function"===typeof clearTimeout?clearTimeout:void 0;function wn(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function On(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Cn=Math.random().toString(36).slice(2),En="__reactInternalInstance$"+Cn,An="__reactEventHandlers$"+Cn,xn="__reactContainere$"+Cn;function Tn(e){var t=e[En];if(t)return t;for(var n=e.parentNode;n;){if(t=n[xn]||n[En]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=On(e);null!==e;){if(n=e[En])return n;e=On(e)}return t}n=(e=n).parentNode}return null}function Sn(e){return!(e=e[En]||e[xn])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Dn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function Pn(e){return e[An]||null}function In(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function Mn(e,t){var n=e.stateNode;if(!n)return null;var i=p(n);if(!i)return null;n=i[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(i=!i.disabled)||(i=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!i;break e;default:e=!1}if(e)return null;if(n&&"function"!==typeof n)throw Error(a(231,t,typeof n));return n}function Rn(e,t,n){(t=Mn(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=it(n._dispatchListeners,t),n._dispatchInstances=it(n._dispatchInstances,e))}function Ln(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=In(t);for(t=n.length;0<t--;)Rn(n[t],"captured",e);for(t=0;t<n.length;t++)Rn(n[t],"bubbled",e)}}function jn(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=Mn(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=it(n._dispatchListeners,t),n._dispatchInstances=it(n._dispatchInstances,e))}function Fn(e){e&&e.dispatchConfig.registrationName&&jn(e._targetInst,null,e)}function Nn(e){rt(e,Ln)}var zn=null,kn=null,Bn=null;function Hn(){if(Bn)return Bn;var e,t,n=kn,i=n.length,r="value"in zn?zn.value:zn.textContent,o=r.length;for(e=0;e<i&&n[e]===r[e];e++);var a=i-e;for(t=1;t<=a&&n[i-t]===r[o-t];t++);return Bn=r.slice(e,1<t?1-t:void 0)}function Vn(){return!0}function Un(){return!1}function Wn(e,t,n,i){for(var r in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(r)&&((t=e[r])?this[r]=t(n):"target"===r?this.target=i:this[r]=n[r]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Vn:Un,this.isPropagationStopped=Un,this}function Gn(e,t,n,i){if(this.eventPool.length){var r=this.eventPool.pop();return this.call(r,e,t,n,i),r}return new this(e,t,n,i)}function qn(e){if(!(e instanceof this))throw Error(a(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Yn(e){e.eventPool=[],e.getPooled=Gn,e.release=qn}r(Wn.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vn)},persist:function(){this.isPersistent=Vn},isPersistent:Un,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Un,this._dispatchInstances=this._dispatchListeners=null}}),Wn.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},Wn.extend=function(e){function t(){}function n(){return i.apply(this,arguments)}var i=this;t.prototype=i.prototype;var o=new t;return r(o,n.prototype),n.prototype=o,n.prototype.constructor=n,n.Interface=r({},i.Interface,e),n.extend=i.extend,Yn(n),n},Yn(Wn);var $n=Wn.extend({data:null}),Xn=Wn.extend({data:null}),Kn=[9,13,27,32],Qn=T&&"CompositionEvent"in window,Zn=null;T&&"documentMode"in document&&(Zn=document.documentMode);var Jn=T&&"TextEvent"in window&&!Zn,ei=T&&(!Qn||Zn&&8<Zn&&11>=Zn),ti=String.fromCharCode(32),ni={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},ii=!1;function ri(e,t){switch(e){case"keyup":return-1!==Kn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function oi(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var ai=!1;var si={eventTypes:ni,extractEvents:function(e,t,n,i){var r;if(Qn)e:{switch(e){case"compositionstart":var o=ni.compositionStart;break e;case"compositionend":o=ni.compositionEnd;break e;case"compositionupdate":o=ni.compositionUpdate;break e}o=void 0}else ai?ri(e,n)&&(o=ni.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=ni.compositionStart);return o?(ei&&"ko"!==n.locale&&(ai||o!==ni.compositionStart?o===ni.compositionEnd&&ai&&(r=Hn()):(kn="value"in(zn=i)?zn.value:zn.textContent,ai=!0)),o=$n.getPooled(o,t,n,i),r?o.data=r:null!==(r=oi(n))&&(o.data=r),Nn(o),r=o):r=null,(e=Jn?function(e,t){switch(e){case"compositionend":return oi(t);case"keypress":return 32!==t.which?null:(ii=!0,ti);case"textInput":return(e=t.data)===ti&&ii?null:e;default:return null}}(e,n):function(e,t){if(ai)return"compositionend"===e||!Qn&&ri(e,t)?(e=Hn(),Bn=kn=zn=null,ai=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return ei&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))?((t=Xn.getPooled(ni.beforeInput,t,n,i)).data=e,Nn(t)):t=null,null===r?t:null===t?r:[r,t]}},ci={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function li(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!ci[e.type]:"textarea"===t}var ui={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function hi(e,t,n){return(e=Wn.getPooled(ui.change,e,t,n)).type="change",M(n),Nn(e),e}var di=null,fi=null;function pi(e){st(e)}function mi(e){if(we(Dn(e)))return e}function gi(e,t){if("change"===e)return t}var vi=!1;function _i(){di&&(di.detachEvent("onpropertychange",bi),fi=di=null)}function bi(e){if("value"===e.propertyName&&mi(fi))if(e=hi(fi,e,ct(e)),z)st(e);else{z=!0;try{L(pi,e)}finally{z=!1,B()}}}function yi(e,t,n){"focus"===e?(_i(),fi=n,(di=t).attachEvent("onpropertychange",bi)):"blur"===e&&_i()}function wi(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return mi(fi)}function Oi(e,t){if("click"===e)return mi(t)}function Ci(e,t){if("input"===e||"change"===e)return mi(t)}T&&(vi=lt("input")&&(!document.documentMode||9<document.documentMode));var Ei={eventTypes:ui,_isInputEventSupported:vi,extractEvents:function(e,t,n,i){var r=t?Dn(t):window,o=r.nodeName&&r.nodeName.toLowerCase();if("select"===o||"input"===o&&"file"===r.type)var a=gi;else if(li(r))if(vi)a=Ci;else{a=wi;var s=yi}else(o=r.nodeName)&&"input"===o.toLowerCase()&&("checkbox"===r.type||"radio"===r.type)&&(a=Oi);if(a&&(a=a(e,t)))return hi(a,n,i);s&&s(e,r,t),"blur"===e&&(e=r._wrapperState)&&e.controlled&&"number"===r.type&&Te(r,"number",r.value)}},Ai=Wn.extend({view:null,detail:null}),xi={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Ti(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xi[e])&&!!t[e]}function Si(){return Ti}var Di=0,Pi=0,Ii=!1,Mi=!1,Ri=Ai.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Si,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var t=Di;return Di=e.screenX,Ii?"mousemove"===e.type?e.screenX-t:0:(Ii=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var t=Pi;return Pi=e.screenY,Mi?"mousemove"===e.type?e.screenY-t:0:(Mi=!0,0)}}),Li=Ri.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),ji={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},Fi={eventTypes:ji,extractEvents:function(e,t,n,i,r){var o="mouseover"===e||"pointerover"===e,a="mouseout"===e||"pointerout"===e;if(o&&0===(32&r)&&(n.relatedTarget||n.fromElement)||!a&&!o)return null;(o=i.window===i?i:(o=i.ownerDocument)?o.defaultView||o.parentWindow:window,a)?(a=t,null!==(t=(t=n.relatedTarget||n.toElement)?Tn(t):null)&&(t!==Je(t)||5!==t.tag&&6!==t.tag)&&(t=null)):a=null;if(a===t)return null;if("mouseout"===e||"mouseover"===e)var s=Ri,c=ji.mouseLeave,l=ji.mouseEnter,u="mouse";else"pointerout"!==e&&"pointerover"!==e||(s=Li,c=ji.pointerLeave,l=ji.pointerEnter,u="pointer");if(e=null==a?o:Dn(a),o=null==t?o:Dn(t),(c=s.getPooled(c,a,n,i)).type=u+"leave",c.target=e,c.relatedTarget=o,(n=s.getPooled(l,t,n,i)).type=u+"enter",n.target=o,n.relatedTarget=e,u=t,(i=a)&&u)e:{for(l=u,a=0,e=s=i;e;e=In(e))a++;for(e=0,t=l;t;t=In(t))e++;for(;0<a-e;)s=In(s),a--;for(;0<e-a;)l=In(l),e--;for(;a--;){if(s===l||s===l.alternate)break e;s=In(s),l=In(l)}s=null}else s=null;for(l=s,s=[];i&&i!==l&&(null===(a=i.alternate)||a!==l);)s.push(i),i=In(i);for(i=[];u&&u!==l&&(null===(a=u.alternate)||a!==l);)i.push(u),u=In(u);for(u=0;u<s.length;u++)jn(s[u],"bubbled",c);for(u=i.length;0<u--;)jn(i[u],"captured",n);return 0===(64&r)?[c]:[c,n]}};var Ni="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t},zi=Object.prototype.hasOwnProperty;function ki(e,t){if(Ni(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(i=0;i<n.length;i++)if(!zi.call(t,n[i])||!Ni(e[n[i]],t[n[i]]))return!1;return!0}var Bi=T&&"documentMode"in document&&11>=document.documentMode,Hi={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Vi=null,Ui=null,Wi=null,Gi=!1;function qi(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return Gi||null==Vi||Vi!==un(n)?null:("selectionStart"in(n=Vi)&&pn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},Wi&&ki(Wi,n)?null:(Wi=n,(e=Wn.getPooled(Hi.select,Ui,e,t)).type="select",e.target=Vi,Nn(e),e))}var Yi={eventTypes:Hi,extractEvents:function(e,t,n,i,r,o){if(!(o=!(r=o||(i.window===i?i.document:9===i.nodeType?i:i.ownerDocument)))){e:{r=Ze(r),o=A.onSelect;for(var a=0;a<o.length;a++)if(!r.has(o[a])){r=!1;break e}r=!0}o=!r}if(o)return null;switch(r=t?Dn(t):window,e){case"focus":(li(r)||"true"===r.contentEditable)&&(Vi=r,Ui=t,Wi=null);break;case"blur":Wi=Ui=Vi=null;break;case"mousedown":Gi=!0;break;case"contextmenu":case"mouseup":case"dragend":return Gi=!1,qi(n,i);case"selectionchange":if(Bi)break;case"keydown":case"keyup":return qi(n,i)}return null}},$i=Wn.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Xi=Wn.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Ki=Ai.extend({relatedTarget:null});function Qi(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var Zi={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Ji={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},er=Ai.extend({key:function(e){if(e.key){var t=Zi[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=Qi(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Ji[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Si,charCode:function(e){return"keypress"===e.type?Qi(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Qi(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),tr=Ri.extend({dataTransfer:null}),nr=Ai.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Si}),ir=Wn.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),rr=Ri.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),or={eventTypes:Nt,extractEvents:function(e,t,n,i){var r=zt.get(e);if(!r)return null;switch(e){case"keypress":if(0===Qi(n))return null;case"keydown":case"keyup":e=er;break;case"blur":case"focus":e=Ki;break;case"click":if(2===n.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=Ri;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=tr;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=nr;break;case qe:case Ye:case $e:e=$i;break;case Xe:e=ir;break;case"scroll":e=Ai;break;case"wheel":e=rr;break;case"copy":case"cut":case"paste":e=Xi;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=Li;break;default:e=Wn}return Nn(t=e.getPooled(r,t,n,i)),t}};if(_)throw Error(a(101));_=Array.prototype.slice.call("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),y(),p=Pn,m=Sn,g=Dn,x({SimpleEventPlugin:or,EnterLeaveEventPlugin:Fi,ChangeEventPlugin:Ei,SelectEventPlugin:Yi,BeforeInputEventPlugin:si});var ar=[],sr=-1;function cr(e){0>sr||(e.current=ar[sr],ar[sr]=null,sr--)}function lr(e,t){sr++,ar[sr]=e.current,e.current=t}var ur={},hr={current:ur},dr={current:!1},fr=ur;function pr(e,t){var n=e.type.contextTypes;if(!n)return ur;var i=e.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===t)return i.__reactInternalMemoizedMaskedChildContext;var r,o={};for(r in n)o[r]=t[r];return i&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function mr(e){return null!==(e=e.childContextTypes)&&void 0!==e}function gr(){cr(dr),cr(hr)}function vr(e,t,n){if(hr.current!==ur)throw Error(a(168));lr(hr,t),lr(dr,n)}function _r(e,t,n){var i=e.stateNode;if(e=t.childContextTypes,"function"!==typeof i.getChildContext)return n;for(var o in i=i.getChildContext())if(!(o in e))throw Error(a(108,ge(t)||"Unknown",o));return r({},n,{},i)}function br(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ur,fr=hr.current,lr(hr,e),lr(dr,dr.current),!0}function yr(e,t,n){var i=e.stateNode;if(!i)throw Error(a(169));n?(e=_r(e,t,fr),i.__reactInternalMemoizedMergedChildContext=e,cr(dr),cr(hr),lr(hr,e)):cr(dr),lr(dr,n)}var wr=o.unstable_runWithPriority,Or=o.unstable_scheduleCallback,Cr=o.unstable_cancelCallback,Er=o.unstable_requestPaint,Ar=o.unstable_now,xr=o.unstable_getCurrentPriorityLevel,Tr=o.unstable_ImmediatePriority,Sr=o.unstable_UserBlockingPriority,Dr=o.unstable_NormalPriority,Pr=o.unstable_LowPriority,Ir=o.unstable_IdlePriority,Mr={},Rr=o.unstable_shouldYield,Lr=void 0!==Er?Er:function(){},jr=null,Fr=null,Nr=!1,zr=Ar(),kr=1e4>zr?Ar:function(){return Ar()-zr};function Br(){switch(xr()){case Tr:return 99;case Sr:return 98;case Dr:return 97;case Pr:return 96;case Ir:return 95;default:throw Error(a(332))}}function Hr(e){switch(e){case 99:return Tr;case 98:return Sr;case 97:return Dr;case 96:return Pr;case 95:return Ir;default:throw Error(a(332))}}function Vr(e,t){return e=Hr(e),wr(e,t)}function Ur(e,t,n){return e=Hr(e),Or(e,t,n)}function Wr(e){return null===jr?(jr=[e],Fr=Or(Tr,qr)):jr.push(e),Mr}function Gr(){if(null!==Fr){var e=Fr;Fr=null,Cr(e)}qr()}function qr(){if(!Nr&&null!==jr){Nr=!0;var e=0;try{var t=jr;Vr(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),jr=null}catch(n){throw null!==jr&&(jr=jr.slice(e+1)),Or(Tr,Gr),n}finally{Nr=!1}}}function Yr(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}function $r(e,t){if(e&&e.defaultProps)for(var n in t=r({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var Xr={current:null},Kr=null,Qr=null,Zr=null;function Jr(){Zr=Qr=Kr=null}function eo(e){var t=Xr.current;cr(Xr),e.type._context._currentValue=t}function to(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function no(e,t){Kr=e,Zr=Qr=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(Pa=!0),e.firstContext=null)}function io(e,t){if(Zr!==e&&!1!==t&&0!==t)if("number"===typeof t&&1073741823!==t||(Zr=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Qr){if(null===Kr)throw Error(a(308));Qr=t,Kr.dependencies={expirationTime:0,firstContext:t,responders:null}}else Qr=Qr.next=t;return e._currentValue}var ro=!1;function oo(e){e.updateQueue={baseState:e.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}function ao(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,baseQueue:e.baseQueue,shared:e.shared,effects:e.effects})}function so(e,t){return(e={expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null}).next=e}function co(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function lo(e,t){var n=e.alternate;null!==n&&ao(n,e),null===(n=(e=e.updateQueue).baseQueue)?(e.baseQueue=t.next=t,t.next=t):(t.next=n.next,n.next=t)}function uo(e,t,n,i){var o=e.updateQueue;ro=!1;var a=o.baseQueue,s=o.shared.pending;if(null!==s){if(null!==a){var c=a.next;a.next=s.next,s.next=c}a=s,o.shared.pending=null,null!==(c=e.alternate)&&(null!==(c=c.updateQueue)&&(c.baseQueue=s))}if(null!==a){c=a.next;var l=o.baseState,u=0,h=null,d=null,f=null;if(null!==c)for(var p=c;;){if((s=p.expirationTime)<i){var m={expirationTime:p.expirationTime,suspenseConfig:p.suspenseConfig,tag:p.tag,payload:p.payload,callback:p.callback,next:null};null===f?(d=f=m,h=l):f=f.next=m,s>u&&(u=s)}else{null!==f&&(f=f.next={expirationTime:1073741823,suspenseConfig:p.suspenseConfig,tag:p.tag,payload:p.payload,callback:p.callback,next:null}),oc(s,p.suspenseConfig);e:{var g=e,v=p;switch(s=t,m=n,v.tag){case 1:if("function"===typeof(g=v.payload)){l=g.call(m,l,s);break e}l=g;break e;case 3:g.effectTag=-4097&g.effectTag|64;case 0:if(null===(s="function"===typeof(g=v.payload)?g.call(m,l,s):g)||void 0===s)break e;l=r({},l,s);break e;case 2:ro=!0}}null!==p.callback&&(e.effectTag|=32,null===(s=o.effects)?o.effects=[p]:s.push(p))}if(null===(p=p.next)||p===c){if(null===(s=o.shared.pending))break;p=a.next=s.next,s.next=c,o.baseQueue=a=s,o.shared.pending=null}}null===f?h=l:f.next=d,o.baseState=h,o.baseQueue=f,ac(u),e.expirationTime=u,e.memoizedState=l}}function ho(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var i=e[t],r=i.callback;if(null!==r){if(i.callback=null,i=r,r=n,"function"!==typeof i)throw Error(a(191,i));i.call(r)}}}var fo=K.ReactCurrentBatchConfig,po=(new i.Component).refs;function mo(e,t,n,i){n=null===(n=n(i,t=e.memoizedState))||void 0===n?t:r({},t,n),e.memoizedState=n,0===e.expirationTime&&(e.updateQueue.baseState=n)}var go={isMounted:function(e){return!!(e=e._reactInternalFiber)&&Je(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var i=qs(),r=fo.suspense;(r=so(i=Ys(i,e,r),r)).payload=t,void 0!==n&&null!==n&&(r.callback=n),co(e,r),$s(e,i)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var i=qs(),r=fo.suspense;(r=so(i=Ys(i,e,r),r)).tag=1,r.payload=t,void 0!==n&&null!==n&&(r.callback=n),co(e,r),$s(e,i)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=qs(),i=fo.suspense;(i=so(n=Ys(n,e,i),i)).tag=2,void 0!==t&&null!==t&&(i.callback=t),co(e,i),$s(e,n)}};function vo(e,t,n,i,r,o,a){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(i,o,a):!t.prototype||!t.prototype.isPureReactComponent||(!ki(n,i)||!ki(r,o))}function _o(e,t,n){var i=!1,r=ur,o=t.contextType;return"object"===typeof o&&null!==o?o=io(o):(r=mr(t)?fr:hr.current,o=(i=null!==(i=t.contextTypes)&&void 0!==i)?pr(e,r):ur),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=go,e.stateNode=t,t._reactInternalFiber=e,i&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=o),t}function bo(e,t,n,i){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,i),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,i),t.state!==e&&go.enqueueReplaceState(t,t.state,null)}function yo(e,t,n,i){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs=po,oo(e);var o=t.contextType;"object"===typeof o&&null!==o?r.context=io(o):(o=mr(t)?fr:hr.current,r.context=pr(e,o)),uo(e,n,r,i),r.state=e.memoizedState,"function"===typeof(o=t.getDerivedStateFromProps)&&(mo(e,t,o,n),r.state=e.memoizedState),"function"===typeof t.getDerivedStateFromProps||"function"===typeof r.getSnapshotBeforeUpdate||"function"!==typeof r.UNSAFE_componentWillMount&&"function"!==typeof r.componentWillMount||(t=r.state,"function"===typeof r.componentWillMount&&r.componentWillMount(),"function"===typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),t!==r.state&&go.enqueueReplaceState(r,r.state,null),uo(e,n,r,i),r.state=e.memoizedState),"function"===typeof r.componentDidMount&&(e.effectTag|=4)}var wo=Array.isArray;function Oo(e,t,n){if(null!==(e=n.ref)&&"function"!==typeof e&&"object"!==typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var i=n.stateNode}if(!i)throw Error(a(147,e));var r=""+e;return null!==t&&null!==t.ref&&"function"===typeof t.ref&&t.ref._stringRef===r?t.ref:((t=function(e){var t=i.refs;t===po&&(t=i.refs={}),null===e?delete t[r]:t[r]=e})._stringRef=r,t)}if("string"!==typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Co(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,""))}function Eo(e){function t(t,n){if(e){var i=t.lastEffect;null!==i?(i.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,i){if(!e)return null;for(;null!==i;)t(n,i),i=i.sibling;return null}function i(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function r(e,t){return(e=xc(e,t)).index=0,e.sibling=null,e}function o(t,n,i){return t.index=i,e?null!==(i=t.alternate)?(i=i.index)<n?(t.effectTag=2,n):i:(t.effectTag=2,n):n}function s(t){return e&&null===t.alternate&&(t.effectTag=2),t}function c(e,t,n,i){return null===t||6!==t.tag?((t=Dc(n,e.mode,i)).return=e,t):((t=r(t,n)).return=e,t)}function l(e,t,n,i){return null!==t&&t.elementType===n.type?((i=r(t,n.props)).ref=Oo(e,t,n),i.return=e,i):((i=Tc(n.type,n.key,n.props,null,e.mode,i)).ref=Oo(e,t,n),i.return=e,i)}function u(e,t,n,i){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Pc(n,e.mode,i)).return=e,t):((t=r(t,n.children||[])).return=e,t)}function h(e,t,n,i,o){return null===t||7!==t.tag?((t=Sc(n,e.mode,i,o)).return=e,t):((t=r(t,n)).return=e,t)}function d(e,t,n){if("string"===typeof t||"number"===typeof t)return(t=Dc(""+t,e.mode,n)).return=e,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case ee:return(n=Tc(t.type,t.key,t.props,null,e.mode,n)).ref=Oo(e,null,t),n.return=e,n;case te:return(t=Pc(t,e.mode,n)).return=e,t}if(wo(t)||me(t))return(t=Sc(t,e.mode,n,null)).return=e,t;Co(e,t)}return null}function f(e,t,n,i){var r=null!==t?t.key:null;if("string"===typeof n||"number"===typeof n)return null!==r?null:c(e,t,""+n,i);if("object"===typeof n&&null!==n){switch(n.$$typeof){case ee:return n.key===r?n.type===ne?h(e,t,n.props.children,i,r):l(e,t,n,i):null;case te:return n.key===r?u(e,t,n,i):null}if(wo(n)||me(n))return null!==r?null:h(e,t,n,i,null);Co(e,n)}return null}function p(e,t,n,i,r){if("string"===typeof i||"number"===typeof i)return c(t,e=e.get(n)||null,""+i,r);if("object"===typeof i&&null!==i){switch(i.$$typeof){case ee:return e=e.get(null===i.key?n:i.key)||null,i.type===ne?h(t,e,i.props.children,r,i.key):l(t,e,i,r);case te:return u(t,e=e.get(null===i.key?n:i.key)||null,i,r)}if(wo(i)||me(i))return h(t,e=e.get(n)||null,i,r,null);Co(t,i)}return null}function m(r,a,s,c){for(var l=null,u=null,h=a,m=a=0,g=null;null!==h&&m<s.length;m++){h.index>m?(g=h,h=null):g=h.sibling;var v=f(r,h,s[m],c);if(null===v){null===h&&(h=g);break}e&&h&&null===v.alternate&&t(r,h),a=o(v,a,m),null===u?l=v:u.sibling=v,u=v,h=g}if(m===s.length)return n(r,h),l;if(null===h){for(;m<s.length;m++)null!==(h=d(r,s[m],c))&&(a=o(h,a,m),null===u?l=h:u.sibling=h,u=h);return l}for(h=i(r,h);m<s.length;m++)null!==(g=p(h,r,m,s[m],c))&&(e&&null!==g.alternate&&h.delete(null===g.key?m:g.key),a=o(g,a,m),null===u?l=g:u.sibling=g,u=g);return e&&h.forEach((function(e){return t(r,e)})),l}function g(r,s,c,l){var u=me(c);if("function"!==typeof u)throw Error(a(150));if(null==(c=u.call(c)))throw Error(a(151));for(var h=u=null,m=s,g=s=0,v=null,_=c.next();null!==m&&!_.done;g++,_=c.next()){m.index>g?(v=m,m=null):v=m.sibling;var b=f(r,m,_.value,l);if(null===b){null===m&&(m=v);break}e&&m&&null===b.alternate&&t(r,m),s=o(b,s,g),null===h?u=b:h.sibling=b,h=b,m=v}if(_.done)return n(r,m),u;if(null===m){for(;!_.done;g++,_=c.next())null!==(_=d(r,_.value,l))&&(s=o(_,s,g),null===h?u=_:h.sibling=_,h=_);return u}for(m=i(r,m);!_.done;g++,_=c.next())null!==(_=p(m,r,g,_.value,l))&&(e&&null!==_.alternate&&m.delete(null===_.key?g:_.key),s=o(_,s,g),null===h?u=_:h.sibling=_,h=_);return e&&m.forEach((function(e){return t(r,e)})),u}return function(e,i,o,c){var l="object"===typeof o&&null!==o&&o.type===ne&&null===o.key;l&&(o=o.props.children);var u="object"===typeof o&&null!==o;if(u)switch(o.$$typeof){case ee:e:{for(u=o.key,l=i;null!==l;){if(l.key===u){switch(l.tag){case 7:if(o.type===ne){n(e,l.sibling),(i=r(l,o.props.children)).return=e,e=i;break e}break;default:if(l.elementType===o.type){n(e,l.sibling),(i=r(l,o.props)).ref=Oo(e,l,o),i.return=e,e=i;break e}}n(e,l);break}t(e,l),l=l.sibling}o.type===ne?((i=Sc(o.props.children,e.mode,c,o.key)).return=e,e=i):((c=Tc(o.type,o.key,o.props,null,e.mode,c)).ref=Oo(e,i,o),c.return=e,e=c)}return s(e);case te:e:{for(l=o.key;null!==i;){if(i.key===l){if(4===i.tag&&i.stateNode.containerInfo===o.containerInfo&&i.stateNode.implementation===o.implementation){n(e,i.sibling),(i=r(i,o.children||[])).return=e,e=i;break e}n(e,i);break}t(e,i),i=i.sibling}(i=Pc(o,e.mode,c)).return=e,e=i}return s(e)}if("string"===typeof o||"number"===typeof o)return o=""+o,null!==i&&6===i.tag?(n(e,i.sibling),(i=r(i,o)).return=e,e=i):(n(e,i),(i=Dc(o,e.mode,c)).return=e,e=i),s(e);if(wo(o))return m(e,i,o,c);if(me(o))return g(e,i,o,c);if(u&&Co(e,o),"undefined"===typeof o&&!l)switch(e.tag){case 1:case 0:throw e=e.type,Error(a(152,e.displayName||e.name||"Component"))}return n(e,i)}}var Ao=Eo(!0),xo=Eo(!1),To={},So={current:To},Do={current:To},Po={current:To};function Io(e){if(e===To)throw Error(a(174));return e}function Mo(e,t){switch(lr(Po,t),lr(Do,e),lr(So,To),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Ne(null,"");break;default:t=Ne(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}cr(So),lr(So,t)}function Ro(){cr(So),cr(Do),cr(Po)}function Lo(e){Io(Po.current);var t=Io(So.current),n=Ne(t,e.type);t!==n&&(lr(Do,e),lr(So,n))}function jo(e){Do.current===e&&(cr(So),cr(Do))}var Fo={current:0};function No(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(64&t.effectTag))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function zo(e,t){return{responder:e,props:t}}var ko=K.ReactCurrentDispatcher,Bo=K.ReactCurrentBatchConfig,Ho=0,Vo=null,Uo=null,Wo=null,Go=!1;function qo(){throw Error(a(321))}function Yo(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Ni(e[n],t[n]))return!1;return!0}function $o(e,t,n,i,r,o){if(Ho=o,Vo=t,t.memoizedState=null,t.updateQueue=null,t.expirationTime=0,ko.current=null===e||null===e.memoizedState?va:_a,e=n(i,r),t.expirationTime===Ho){o=0;do{if(t.expirationTime=0,!(25>o))throw Error(a(301));o+=1,Wo=Uo=null,t.updateQueue=null,ko.current=ba,e=n(i,r)}while(t.expirationTime===Ho)}if(ko.current=ga,t=null!==Uo&&null!==Uo.next,Ho=0,Wo=Uo=Vo=null,Go=!1,t)throw Error(a(300));return e}function Xo(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Wo?Vo.memoizedState=Wo=e:Wo=Wo.next=e,Wo}function Ko(){if(null===Uo){var e=Vo.alternate;e=null!==e?e.memoizedState:null}else e=Uo.next;var t=null===Wo?Vo.memoizedState:Wo.next;if(null!==t)Wo=t,Uo=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Uo=e).memoizedState,baseState:Uo.baseState,baseQueue:Uo.baseQueue,queue:Uo.queue,next:null},null===Wo?Vo.memoizedState=Wo=e:Wo=Wo.next=e}return Wo}function Qo(e,t){return"function"===typeof t?t(e):t}function Zo(e){var t=Ko(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var i=Uo,r=i.baseQueue,o=n.pending;if(null!==o){if(null!==r){var s=r.next;r.next=o.next,o.next=s}i.baseQueue=r=o,n.pending=null}if(null!==r){r=r.next,i=i.baseState;var c=s=o=null,l=r;do{var u=l.expirationTime;if(u<Ho){var h={expirationTime:l.expirationTime,suspenseConfig:l.suspenseConfig,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null};null===c?(s=c=h,o=i):c=c.next=h,u>Vo.expirationTime&&(Vo.expirationTime=u,ac(u))}else null!==c&&(c=c.next={expirationTime:1073741823,suspenseConfig:l.suspenseConfig,action:l.action,eagerReducer:l.eagerReducer,eagerState:l.eagerState,next:null}),oc(u,l.suspenseConfig),i=l.eagerReducer===e?l.eagerState:e(i,l.action);l=l.next}while(null!==l&&l!==r);null===c?o=i:c.next=s,Ni(i,t.memoizedState)||(Pa=!0),t.memoizedState=i,t.baseState=o,t.baseQueue=c,n.lastRenderedState=i}return[t.memoizedState,n.dispatch]}function Jo(e){var t=Ko(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var i=n.dispatch,r=n.pending,o=t.memoizedState;if(null!==r){n.pending=null;var s=r=r.next;do{o=e(o,s.action),s=s.next}while(s!==r);Ni(o,t.memoizedState)||(Pa=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,i]}function ea(e){var t=Xo();return"function"===typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:Qo,lastRenderedState:e}).dispatch=ma.bind(null,Vo,e),[t.memoizedState,e]}function ta(e,t,n,i){return e={tag:e,create:t,destroy:n,deps:i,next:null},null===(t=Vo.updateQueue)?(t={lastEffect:null},Vo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(i=n.next,n.next=e,e.next=i,t.lastEffect=e),e}function na(){return Ko().memoizedState}function ia(e,t,n,i){var r=Xo();Vo.effectTag|=e,r.memoizedState=ta(1|t,n,void 0,void 0===i?null:i)}function ra(e,t,n,i){var r=Ko();i=void 0===i?null:i;var o=void 0;if(null!==Uo){var a=Uo.memoizedState;if(o=a.destroy,null!==i&&Yo(i,a.deps))return void ta(t,n,o,i)}Vo.effectTag|=e,r.memoizedState=ta(1|t,n,o,i)}function oa(e,t){return ia(516,4,e,t)}function aa(e,t){return ra(516,4,e,t)}function sa(e,t){return ra(4,2,e,t)}function ca(e,t){return"function"===typeof t?(e=e(),t(e),function(){t(null)}):null!==t&&void 0!==t?(e=e(),t.current=e,function(){t.current=null}):void 0}function la(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,ra(4,2,ca.bind(null,t,e),n)}function ua(){}function ha(e,t){return Xo().memoizedState=[e,void 0===t?null:t],e}function da(e,t){var n=Ko();t=void 0===t?null:t;var i=n.memoizedState;return null!==i&&null!==t&&Yo(t,i[1])?i[0]:(n.memoizedState=[e,t],e)}function fa(e,t){var n=Ko();t=void 0===t?null:t;var i=n.memoizedState;return null!==i&&null!==t&&Yo(t,i[1])?i[0]:(e=e(),n.memoizedState=[e,t],e)}function pa(e,t,n){var i=Br();Vr(98>i?98:i,(function(){e(!0)})),Vr(97<i?97:i,(function(){var i=Bo.suspense;Bo.suspense=void 0===t?null:t;try{e(!1),n()}finally{Bo.suspense=i}}))}function ma(e,t,n){var i=qs(),r=fo.suspense;r={expirationTime:i=Ys(i,e,r),suspenseConfig:r,action:n,eagerReducer:null,eagerState:null,next:null};var o=t.pending;if(null===o?r.next=r:(r.next=o.next,o.next=r),t.pending=r,o=e.alternate,e===Vo||null!==o&&o===Vo)Go=!0,r.expirationTime=Ho,Vo.expirationTime=Ho;else{if(0===e.expirationTime&&(null===o||0===o.expirationTime)&&null!==(o=t.lastRenderedReducer))try{var a=t.lastRenderedState,s=o(a,n);if(r.eagerReducer=o,r.eagerState=s,Ni(s,a))return}catch(c){}$s(e,i)}}var ga={readContext:io,useCallback:qo,useContext:qo,useEffect:qo,useImperativeHandle:qo,useLayoutEffect:qo,useMemo:qo,useReducer:qo,useRef:qo,useState:qo,useDebugValue:qo,useResponder:qo,useDeferredValue:qo,useTransition:qo},va={readContext:io,useCallback:ha,useContext:io,useEffect:oa,useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,ia(4,2,ca.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ia(4,2,e,t)},useMemo:function(e,t){var n=Xo();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var i=Xo();return t=void 0!==n?n(t):t,i.memoizedState=i.baseState=t,e=(e=i.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=ma.bind(null,Vo,e),[i.memoizedState,e]},useRef:function(e){return e={current:e},Xo().memoizedState=e},useState:ea,useDebugValue:ua,useResponder:zo,useDeferredValue:function(e,t){var n=ea(e),i=n[0],r=n[1];return oa((function(){var n=Bo.suspense;Bo.suspense=void 0===t?null:t;try{r(e)}finally{Bo.suspense=n}}),[e,t]),i},useTransition:function(e){var t=ea(!1),n=t[0];return t=t[1],[ha(pa.bind(null,t,e),[t,e]),n]}},_a={readContext:io,useCallback:da,useContext:io,useEffect:aa,useImperativeHandle:la,useLayoutEffect:sa,useMemo:fa,useReducer:Zo,useRef:na,useState:function(){return Zo(Qo)},useDebugValue:ua,useResponder:zo,useDeferredValue:function(e,t){var n=Zo(Qo),i=n[0],r=n[1];return aa((function(){var n=Bo.suspense;Bo.suspense=void 0===t?null:t;try{r(e)}finally{Bo.suspense=n}}),[e,t]),i},useTransition:function(e){var t=Zo(Qo),n=t[0];return t=t[1],[da(pa.bind(null,t,e),[t,e]),n]}},ba={readContext:io,useCallback:da,useContext:io,useEffect:aa,useImperativeHandle:la,useLayoutEffect:sa,useMemo:fa,useReducer:Jo,useRef:na,useState:function(){return Jo(Qo)},useDebugValue:ua,useResponder:zo,useDeferredValue:function(e,t){var n=Jo(Qo),i=n[0],r=n[1];return aa((function(){var n=Bo.suspense;Bo.suspense=void 0===t?null:t;try{r(e)}finally{Bo.suspense=n}}),[e,t]),i},useTransition:function(e){var t=Jo(Qo),n=t[0];return t=t[1],[da(pa.bind(null,t,e),[t,e]),n]}},ya=null,wa=null,Oa=!1;function Ca(e,t){var n=Ec(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ea(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function Aa(e){if(Oa){var t=wa;if(t){var n=t;if(!Ea(e,t)){if(!(t=wn(n.nextSibling))||!Ea(e,t))return e.effectTag=-1025&e.effectTag|2,Oa=!1,void(ya=e);Ca(ya,n)}ya=e,wa=wn(t.firstChild)}else e.effectTag=-1025&e.effectTag|2,Oa=!1,ya=e}}function xa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ya=e}function Ta(e){if(e!==ya)return!1;if(!Oa)return xa(e),Oa=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!_n(t,e.memoizedProps))for(t=wa;t;)Ca(e,t),t=wn(t.nextSibling);if(xa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){wa=wn(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}wa=null}}else wa=ya?wn(e.stateNode.nextSibling):null;return!0}function Sa(){wa=ya=null,Oa=!1}var Da=K.ReactCurrentOwner,Pa=!1;function Ia(e,t,n,i){t.child=null===e?xo(t,null,n,i):Ao(t,e.child,n,i)}function Ma(e,t,n,i,r){n=n.render;var o=t.ref;return no(t,r),i=$o(e,t,n,i,o,r),null===e||Pa?(t.effectTag|=1,Ia(e,t,i,r),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=r&&(e.expirationTime=0),$a(e,t,r))}function Ra(e,t,n,i,r,o){if(null===e){var a=n.type;return"function"!==typeof a||Ac(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Tc(n.type,null,i,null,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,La(e,t,a,i,r,o))}return a=e.child,r<o&&(r=a.memoizedProps,(n=null!==(n=n.compare)?n:ki)(r,i)&&e.ref===t.ref)?$a(e,t,o):(t.effectTag|=1,(e=xc(a,i)).ref=t.ref,e.return=t,t.child=e)}function La(e,t,n,i,r,o){return null!==e&&ki(e.memoizedProps,i)&&e.ref===t.ref&&(Pa=!1,r<o)?(t.expirationTime=e.expirationTime,$a(e,t,o)):Fa(e,t,n,i,o)}function ja(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function Fa(e,t,n,i,r){var o=mr(n)?fr:hr.current;return o=pr(t,o),no(t,r),n=$o(e,t,n,i,o,r),null===e||Pa?(t.effectTag|=1,Ia(e,t,n,r),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=r&&(e.expirationTime=0),$a(e,t,r))}function Na(e,t,n,i,r){if(mr(n)){var o=!0;br(t)}else o=!1;if(no(t,r),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),_o(t,n,i),yo(t,n,i,r),i=!0;else if(null===e){var a=t.stateNode,s=t.memoizedProps;a.props=s;var c=a.context,l=n.contextType;"object"===typeof l&&null!==l?l=io(l):l=pr(t,l=mr(n)?fr:hr.current);var u=n.getDerivedStateFromProps,h="function"===typeof u||"function"===typeof a.getSnapshotBeforeUpdate;h||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(s!==i||c!==l)&&bo(t,a,i,l),ro=!1;var d=t.memoizedState;a.state=d,uo(t,i,a,r),c=t.memoizedState,s!==i||d!==c||dr.current||ro?("function"===typeof u&&(mo(t,n,u,i),c=t.memoizedState),(s=ro||vo(t,n,s,i,d,c,l))?(h||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||("function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"===typeof a.componentDidMount&&(t.effectTag|=4)):("function"===typeof a.componentDidMount&&(t.effectTag|=4),t.memoizedProps=i,t.memoizedState=c),a.props=i,a.state=c,a.context=l,i=s):("function"===typeof a.componentDidMount&&(t.effectTag|=4),i=!1)}else a=t.stateNode,ao(e,t),s=t.memoizedProps,a.props=t.type===t.elementType?s:$r(t.type,s),c=a.context,"object"===typeof(l=n.contextType)&&null!==l?l=io(l):l=pr(t,l=mr(n)?fr:hr.current),(h="function"===typeof(u=n.getDerivedStateFromProps)||"function"===typeof a.getSnapshotBeforeUpdate)||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(s!==i||c!==l)&&bo(t,a,i,l),ro=!1,c=t.memoizedState,a.state=c,uo(t,i,a,r),d=t.memoizedState,s!==i||c!==d||dr.current||ro?("function"===typeof u&&(mo(t,n,u,i),d=t.memoizedState),(u=ro||vo(t,n,s,i,c,d,l))?(h||"function"!==typeof a.UNSAFE_componentWillUpdate&&"function"!==typeof a.componentWillUpdate||("function"===typeof a.componentWillUpdate&&a.componentWillUpdate(i,d,l),"function"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(i,d,l)),"function"===typeof a.componentDidUpdate&&(t.effectTag|=4),"function"===typeof a.getSnapshotBeforeUpdate&&(t.effectTag|=256)):("function"!==typeof a.componentDidUpdate||s===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=4),"function"!==typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=256),t.memoizedProps=i,t.memoizedState=d),a.props=i,a.state=d,a.context=l,i=u):("function"!==typeof a.componentDidUpdate||s===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=4),"function"!==typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=256),i=!1);return za(e,t,n,i,o,r)}function za(e,t,n,i,r,o){ja(e,t);var a=0!==(64&t.effectTag);if(!i&&!a)return r&&yr(t,n,!1),$a(e,t,o);i=t.stateNode,Da.current=t;var s=a&&"function"!==typeof n.getDerivedStateFromError?null:i.render();return t.effectTag|=1,null!==e&&a?(t.child=Ao(t,e.child,null,o),t.child=Ao(t,null,s,o)):Ia(e,t,s,o),t.memoizedState=i.state,r&&yr(t,n,!0),t.child}function ka(e){var t=e.stateNode;t.pendingContext?vr(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vr(0,t.context,!1),Mo(e,t.containerInfo)}var Ba,Ha,Va,Ua={dehydrated:null,retryTime:0};function Wa(e,t,n){var i,r=t.mode,o=t.pendingProps,a=Fo.current,s=!1;if((i=0!==(64&t.effectTag))||(i=0!==(2&a)&&(null===e||null!==e.memoizedState)),i?(s=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),lr(Fo,1&a),null===e){if(void 0!==o.fallback&&Aa(t),s){if(s=o.fallback,(o=Sc(null,r,0,null)).return=t,0===(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=Sc(s,r,n,null)).return=t,o.sibling=n,t.memoizedState=Ua,t.child=o,n}return r=o.children,t.memoizedState=null,t.child=xo(t,null,r,n)}if(null!==e.memoizedState){if(r=(e=e.child).sibling,s){if(o=o.fallback,(n=xc(e,e.pendingProps)).return=t,0===(2&t.mode)&&(s=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=s;null!==s;)s.return=n,s=s.sibling;return(r=xc(r,o)).return=t,n.sibling=r,n.childExpirationTime=0,t.memoizedState=Ua,t.child=n,r}return n=Ao(t,e.child,o.children,n),t.memoizedState=null,t.child=n}if(e=e.child,s){if(s=o.fallback,(o=Sc(null,r,0,null)).return=t,o.child=e,null!==e&&(e.return=o),0===(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,o.child=e;null!==e;)e.return=o,e=e.sibling;return(n=Sc(s,r,n,null)).return=t,o.sibling=n,n.effectTag|=2,o.childExpirationTime=0,t.memoizedState=Ua,t.child=o,n}return t.memoizedState=null,t.child=Ao(t,e,o.children,n)}function Ga(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t),to(e.return,t)}function qa(e,t,n,i,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:i,tail:n,tailExpiration:0,tailMode:r,lastEffect:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=i,a.tail=n,a.tailExpiration=0,a.tailMode=r,a.lastEffect=o)}function Ya(e,t,n){var i=t.pendingProps,r=i.revealOrder,o=i.tail;if(Ia(e,t,i.children,n),0!==(2&(i=Fo.current)))i=1&i|2,t.effectTag|=64;else{if(null!==e&&0!==(64&e.effectTag))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ga(e,n);else if(19===e.tag)Ga(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}i&=1}if(lr(Fo,i),0===(2&t.mode))t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;null!==n;)null!==(e=n.alternate)&&null===No(e)&&(r=n),n=n.sibling;null===(n=r)?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),qa(t,!1,r,n,o,t.lastEffect);break;case"backwards":for(n=null,r=t.child,t.child=null;null!==r;){if(null!==(e=r.alternate)&&null===No(e)){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}qa(t,!0,n,null,o,t.lastEffect);break;case"together":qa(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function $a(e,t,n){null!==e&&(t.dependencies=e.dependencies);var i=t.expirationTime;if(0!==i&&ac(i),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=xc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=xc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Xa(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var i=null;null!==n;)null!==n.alternate&&(i=n),n=n.sibling;null===i?t||null===e.tail?e.tail=null:e.tail.sibling=null:i.sibling=null}}function Ka(e,t,n){var i=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return mr(t.type)&&gr(),null;case 3:return Ro(),cr(dr),cr(hr),(n=t.stateNode).pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||!Ta(t)||(t.effectTag|=4),null;case 5:jo(t),n=Io(Po.current);var o=t.type;if(null!==e&&null!=t.stateNode)Ha(e,t,o,i,n),e.ref!==t.ref&&(t.effectTag|=128);else{if(!i){if(null===t.stateNode)throw Error(a(166));return null}if(e=Io(So.current),Ta(t)){i=t.stateNode,o=t.type;var s=t.memoizedProps;switch(i[En]=t,i[An]=s,o){case"iframe":case"object":case"embed":Yt("load",i);break;case"video":case"audio":for(e=0;e<Ke.length;e++)Yt(Ke[e],i);break;case"source":Yt("error",i);break;case"img":case"image":case"link":Yt("error",i),Yt("load",i);break;case"form":Yt("reset",i),Yt("submit",i);break;case"details":Yt("toggle",i);break;case"input":Ce(i,s),Yt("invalid",i),cn(n,"onChange");break;case"select":i._wrapperState={wasMultiple:!!s.multiple},Yt("invalid",i),cn(n,"onChange");break;case"textarea":Ie(i,s),Yt("invalid",i),cn(n,"onChange")}for(var c in on(o,s),e=null,s)if(s.hasOwnProperty(c)){var l=s[c];"children"===c?"string"===typeof l?i.textContent!==l&&(e=["children",l]):"number"===typeof l&&i.textContent!==""+l&&(e=["children",""+l]):E.hasOwnProperty(c)&&null!=l&&cn(n,c)}switch(o){case"input":ye(i),xe(i,s,!0);break;case"textarea":ye(i),Re(i);break;case"select":case"option":break;default:"function"===typeof s.onClick&&(i.onclick=ln)}n=e,t.updateQueue=n,null!==n&&(t.effectTag|=4)}else{switch(c=9===n.nodeType?n:n.ownerDocument,e===sn&&(e=Fe(o)),e===sn?"script"===o?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"===typeof i.is?e=c.createElement(o,{is:i.is}):(e=c.createElement(o),"select"===o&&(c=e,i.multiple?c.multiple=!0:i.size&&(c.size=i.size))):e=c.createElementNS(e,o),e[En]=t,e[An]=i,Ba(e,t),t.stateNode=e,c=an(o,i),o){case"iframe":case"object":case"embed":Yt("load",e),l=i;break;case"video":case"audio":for(l=0;l<Ke.length;l++)Yt(Ke[l],e);l=i;break;case"source":Yt("error",e),l=i;break;case"img":case"image":case"link":Yt("error",e),Yt("load",e),l=i;break;case"form":Yt("reset",e),Yt("submit",e),l=i;break;case"details":Yt("toggle",e),l=i;break;case"input":Ce(e,i),l=Oe(e,i),Yt("invalid",e),cn(n,"onChange");break;case"option":l=Se(e,i);break;case"select":e._wrapperState={wasMultiple:!!i.multiple},l=r({},i,{value:void 0}),Yt("invalid",e),cn(n,"onChange");break;case"textarea":Ie(e,i),l=Pe(e,i),Yt("invalid",e),cn(n,"onChange");break;default:l=i}on(o,l);var u=l;for(s in u)if(u.hasOwnProperty(s)){var h=u[s];"style"===s?nn(e,h):"dangerouslySetInnerHTML"===s?null!=(h=h?h.__html:void 0)&&ke(e,h):"children"===s?"string"===typeof h?("textarea"!==o||""!==h)&&Be(e,h):"number"===typeof h&&Be(e,""+h):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(E.hasOwnProperty(s)?null!=h&&cn(n,s):null!=h&&Q(e,s,h,c))}switch(o){case"input":ye(e),xe(e,i,!1);break;case"textarea":ye(e),Re(e);break;case"option":null!=i.value&&e.setAttribute("value",""+_e(i.value));break;case"select":e.multiple=!!i.multiple,null!=(n=i.value)?De(e,!!i.multiple,n,!1):null!=i.defaultValue&&De(e,!!i.multiple,i.defaultValue,!0);break;default:"function"===typeof l.onClick&&(e.onclick=ln)}vn(o,i)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Va(0,t,e.memoizedProps,i);else{if("string"!==typeof i&&null===t.stateNode)throw Error(a(166));n=Io(Po.current),Io(So.current),Ta(t)?(n=t.stateNode,i=t.memoizedProps,n[En]=t,n.nodeValue!==i&&(t.effectTag|=4)):((n=(9===n.nodeType?n:n.ownerDocument).createTextNode(i))[En]=t,t.stateNode=n)}return null;case 13:return cr(Fo),i=t.memoizedState,0!==(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==i,i=!1,null===e?void 0!==t.memoizedProps.fallback&&Ta(t):(i=null!==(o=e.memoizedState),n||null===o||null!==(o=e.child.sibling)&&(null!==(s=t.firstEffect)?(t.firstEffect=o,o.nextEffect=s):(t.firstEffect=t.lastEffect=o,o.nextEffect=null),o.effectTag=8)),n&&!i&&0!==(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!==(1&Fo.current)?Ts===ys&&(Ts=ws):(Ts!==ys&&Ts!==ws||(Ts=Os),0!==Ms&&null!==Es&&(Rc(Es,xs),Lc(Es,Ms)))),(n||i)&&(t.effectTag|=4),null);case 4:return Ro(),null;case 10:return eo(t),null;case 17:return mr(t.type)&&gr(),null;case 19:if(cr(Fo),null===(i=t.memoizedState))return null;if(o=0!==(64&t.effectTag),null===(s=i.rendering)){if(o)Xa(i,!1);else if(Ts!==ys||null!==e&&0!==(64&e.effectTag))for(s=t.child;null!==s;){if(null!==(e=No(s))){for(t.effectTag|=64,Xa(i,!1),null!==(o=e.updateQueue)&&(t.updateQueue=o,t.effectTag|=4),null===i.lastEffect&&(t.firstEffect=null),t.lastEffect=i.lastEffect,i=t.child;null!==i;)s=n,(o=i).effectTag&=2,o.nextEffect=null,o.firstEffect=null,o.lastEffect=null,null===(e=o.alternate)?(o.childExpirationTime=0,o.expirationTime=s,o.child=null,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null):(o.childExpirationTime=e.childExpirationTime,o.expirationTime=e.expirationTime,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,s=e.dependencies,o.dependencies=null===s?null:{expirationTime:s.expirationTime,firstContext:s.firstContext,responders:s.responders}),i=i.sibling;return lr(Fo,1&Fo.current|2),t.child}s=s.sibling}}else{if(!o)if(null!==(e=No(s))){if(t.effectTag|=64,o=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),Xa(i,!0),null===i.tail&&"hidden"===i.tailMode&&!s.alternate)return null!==(t=t.lastEffect=i.lastEffect)&&(t.nextEffect=null),null}else 2*kr()-i.renderingStartTime>i.tailExpiration&&1<n&&(t.effectTag|=64,o=!0,Xa(i,!1),t.expirationTime=t.childExpirationTime=n-1);i.isBackwards?(s.sibling=t.child,t.child=s):(null!==(n=i.last)?n.sibling=s:t.child=s,i.last=s)}return null!==i.tail?(0===i.tailExpiration&&(i.tailExpiration=kr()+500),n=i.tail,i.rendering=n,i.tail=n.sibling,i.lastEffect=t.lastEffect,i.renderingStartTime=kr(),n.sibling=null,t=Fo.current,lr(Fo,o?1&t|2:1&t),n):null}throw Error(a(156,t.tag))}function Qa(e){switch(e.tag){case 1:mr(e.type)&&gr();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(Ro(),cr(dr),cr(hr),0!==(64&(t=e.effectTag)))throw Error(a(285));return e.effectTag=-4097&t|64,e;case 5:return jo(e),null;case 13:return cr(Fo),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return cr(Fo),null;case 4:return Ro(),null;case 10:return eo(e),null;default:return null}}function Za(e,t){return{value:e,source:t,stack:ve(t)}}Ba=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ha=function(e,t,n,i,o){var a=e.memoizedProps;if(a!==i){var s,c,l=t.stateNode;switch(Io(So.current),e=null,n){case"input":a=Oe(l,a),i=Oe(l,i),e=[];break;case"option":a=Se(l,a),i=Se(l,i),e=[];break;case"select":a=r({},a,{value:void 0}),i=r({},i,{value:void 0}),e=[];break;case"textarea":a=Pe(l,a),i=Pe(l,i),e=[];break;default:"function"!==typeof a.onClick&&"function"===typeof i.onClick&&(l.onclick=ln)}for(s in on(n,i),n=null,a)if(!i.hasOwnProperty(s)&&a.hasOwnProperty(s)&&null!=a[s])if("style"===s)for(c in l=a[s])l.hasOwnProperty(c)&&(n||(n={}),n[c]="");else"dangerouslySetInnerHTML"!==s&&"children"!==s&&"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(E.hasOwnProperty(s)?e||(e=[]):(e=e||[]).push(s,null));for(s in i){var u=i[s];if(l=null!=a?a[s]:void 0,i.hasOwnProperty(s)&&u!==l&&(null!=u||null!=l))if("style"===s)if(l){for(c in l)!l.hasOwnProperty(c)||u&&u.hasOwnProperty(c)||(n||(n={}),n[c]="");for(c in u)u.hasOwnProperty(c)&&l[c]!==u[c]&&(n||(n={}),n[c]=u[c])}else n||(e||(e=[]),e.push(s,n)),n=u;else"dangerouslySetInnerHTML"===s?(u=u?u.__html:void 0,l=l?l.__html:void 0,null!=u&&l!==u&&(e=e||[]).push(s,u)):"children"===s?l===u||"string"!==typeof u&&"number"!==typeof u||(e=e||[]).push(s,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&(E.hasOwnProperty(s)?(null!=u&&cn(o,s),e||l===u||(e=[])):(e=e||[]).push(s,u))}n&&(e=e||[]).push("style",n),o=e,(t.updateQueue=o)&&(t.effectTag|=4)}},Va=function(e,t,n,i){n!==i&&(t.effectTag|=4)};var Ja="function"===typeof WeakSet?WeakSet:Set;function es(e,t){var n=t.source,i=t.stack;null===i&&null!==n&&(i=ve(n)),null!==n&&ge(n.type),t=t.value,null!==e&&1===e.tag&&ge(e.type);try{console.error(t)}catch(r){setTimeout((function(){throw r}))}}function ts(e){var t=e.ref;if(null!==t)if("function"===typeof t)try{t(null)}catch(n){_c(e,n)}else t.current=null}function ns(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,i=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:$r(t.type,n),i),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(a(163))}function is(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var i=n.destroy;n.destroy=void 0,void 0!==i&&i()}n=n.next}while(n!==t)}}function rs(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var i=n.create;n.destroy=i()}n=n.next}while(n!==t)}}function os(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:return void rs(3,n);case 1:if(e=n.stateNode,4&n.effectTag)if(null===t)e.componentDidMount();else{var i=n.elementType===n.type?t.memoizedProps:$r(n.type,t.memoizedProps);e.componentDidUpdate(i,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate)}return void(null!==(t=n.updateQueue)&&ho(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}ho(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.effectTag&&vn(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Ft(n)))));case 19:case 17:case 20:case 21:return}throw Error(a(163))}function as(e,t,n){switch("function"===typeof Oc&&Oc(t),t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var i=e.next;Vr(97<n?97:n,(function(){var e=i;do{var n=e.destroy;if(void 0!==n){var r=t;try{n()}catch(o){_c(r,o)}}e=e.next}while(e!==i)}))}break;case 1:ts(t),"function"===typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(n){_c(e,n)}}(t,n);break;case 5:ts(t);break;case 4:us(e,t,n)}}function ss(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,e.stateNode=null,null!==t&&ss(t)}function cs(e){return 5===e.tag||3===e.tag||4===e.tag}function ls(e){e:{for(var t=e.return;null!==t;){if(cs(t)){var n=t;break e}t=t.return}throw Error(a(160))}switch(t=n.stateNode,n.tag){case 5:var i=!1;break;case 3:case 4:t=t.containerInfo,i=!0;break;default:throw Error(a(161))}16&n.effectTag&&(Be(t,""),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||cs(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}i?function e(t,n,i){var r=t.tag,o=5===r||6===r;if(o)t=o?t.stateNode:t.stateNode.instance,n?8===i.nodeType?i.parentNode.insertBefore(t,n):i.insertBefore(t,n):(8===i.nodeType?(n=i.parentNode).insertBefore(t,i):(n=i).appendChild(t),null!==(i=i._reactRootContainer)&&void 0!==i||null!==n.onclick||(n.onclick=ln));else if(4!==r&&null!==(t=t.child))for(e(t,n,i),t=t.sibling;null!==t;)e(t,n,i),t=t.sibling}(e,n,t):function e(t,n,i){var r=t.tag,o=5===r||6===r;if(o)t=o?t.stateNode:t.stateNode.instance,n?i.insertBefore(t,n):i.appendChild(t);else if(4!==r&&null!==(t=t.child))for(e(t,n,i),t=t.sibling;null!==t;)e(t,n,i),t=t.sibling}(e,n,t)}function us(e,t,n){for(var i,r,o=t,s=!1;;){if(!s){s=o.return;e:for(;;){if(null===s)throw Error(a(160));switch(i=s.stateNode,s.tag){case 5:r=!1;break e;case 3:case 4:i=i.containerInfo,r=!0;break e}s=s.return}s=!0}if(5===o.tag||6===o.tag){e:for(var c=e,l=o,u=n,h=l;;)if(as(c,h,u),null!==h.child&&4!==h.tag)h.child.return=h,h=h.child;else{if(h===l)break e;for(;null===h.sibling;){if(null===h.return||h.return===l)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}r?(c=i,l=o.stateNode,8===c.nodeType?c.parentNode.removeChild(l):c.removeChild(l)):i.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){i=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(as(e,o,n),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(s=!1)}o.sibling.return=o.return,o=o.sibling}}function hs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:return void is(3,t);case 1:return;case 5:var n=t.stateNode;if(null!=n){var i=t.memoizedProps,r=null!==e?e.memoizedProps:i;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[An]=i,"input"===e&&"radio"===i.type&&null!=i.name&&Ee(n,i),an(e,r),t=an(e,i),r=0;r<o.length;r+=2){var s=o[r],c=o[r+1];"style"===s?nn(n,c):"dangerouslySetInnerHTML"===s?ke(n,c):"children"===s?Be(n,c):Q(n,s,c,t)}switch(e){case"input":Ae(n,i);break;case"textarea":Me(n,i);break;case"select":t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!i.multiple,null!=(e=i.value)?De(n,!!i.multiple,e,!1):t!==!!i.multiple&&(null!=i.defaultValue?De(n,!!i.multiple,i.defaultValue,!0):De(n,!!i.multiple,i.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((t=t.stateNode).hydrate&&(t.hydrate=!1,Ft(t.containerInfo)));case 12:return;case 13:if(n=t,null===t.memoizedState?i=!1:(i=!0,n=t.child,Ls=kr()),null!==n)e:for(e=n;;){if(5===e.tag)o=e.stateNode,i?"function"===typeof(o=o.style).setProperty?o.setProperty("display","none","important"):o.display="none":(o=e.stateNode,r=void 0!==(r=e.memoizedProps.style)&&null!==r&&r.hasOwnProperty("display")?r.display:null,o.style.display=tn("display",r));else if(6===e.tag)e.stateNode.nodeValue=i?"":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(o=e.child.sibling).return=e,e=o;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}return void ds(t);case 19:return void ds(t);case 17:return}throw Error(a(163))}function ds(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ja),t.forEach((function(t){var i=yc.bind(null,e,t);n.has(t)||(n.add(t),t.then(i,i))}))}}var fs="function"===typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=so(n,null)).tag=3,n.payload={element:null};var i=t.value;return n.callback=function(){Fs||(Fs=!0,Ns=i),es(e,t)},n}function ms(e,t,n){(n=so(n,null)).tag=3;var i=e.type.getDerivedStateFromError;if("function"===typeof i){var r=t.value;n.payload=function(){return es(e,t),i(r)}}var o=e.stateNode;return null!==o&&"function"===typeof o.componentDidCatch&&(n.callback=function(){"function"!==typeof i&&(null===zs?zs=new Set([this]):zs.add(this),es(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:""})}),n}var gs,vs=Math.ceil,_s=K.ReactCurrentDispatcher,bs=K.ReactCurrentOwner,ys=0,ws=3,Os=4,Cs=0,Es=null,As=null,xs=0,Ts=ys,Ss=null,Ds=1073741823,Ps=1073741823,Is=null,Ms=0,Rs=!1,Ls=0,js=null,Fs=!1,Ns=null,zs=null,ks=!1,Bs=null,Hs=90,Vs=null,Us=0,Ws=null,Gs=0;function qs(){return 0!==(48&Cs)?1073741821-(kr()/10|0):0!==Gs?Gs:Gs=1073741821-(kr()/10|0)}function Ys(e,t,n){if(0===(2&(t=t.mode)))return 1073741823;var i=Br();if(0===(4&t))return 99===i?1073741823:1073741822;if(0!==(16&Cs))return xs;if(null!==n)e=Yr(e,0|n.timeoutMs||5e3,250);else switch(i){case 99:e=1073741823;break;case 98:e=Yr(e,150,100);break;case 97:case 96:e=Yr(e,5e3,250);break;case 95:e=2;break;default:throw Error(a(326))}return null!==Es&&e===xs&&--e,e}function $s(e,t){if(50<Us)throw Us=0,Ws=null,Error(a(185));if(null!==(e=Xs(e,t))){var n=Br();1073741823===t?0!==(8&Cs)&&0===(48&Cs)?Js(e):(Qs(e),0===Cs&&Gr()):Qs(e),0===(4&Cs)||98!==n&&99!==n||(null===Vs?Vs=new Map([[e,t]]):(void 0===(n=Vs.get(e))||n>t)&&Vs.set(e,t))}}function Xs(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var i=e.return,r=null;if(null===i&&3===e.tag)r=e.stateNode;else for(;null!==i;){if(n=i.alternate,i.childExpirationTime<t&&(i.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===i.return&&3===i.tag){r=i.stateNode;break}i=i.return}return null!==r&&(Es===r&&(ac(t),Ts===Os&&Rc(r,xs)),Lc(r,t)),r}function Ks(e){var t=e.lastExpiredTime;if(0!==t)return t;if(!Mc(e,t=e.firstPendingTime))return t;var n=e.lastPingedTime;return 2>=(e=n>(e=e.nextKnownPendingLevel)?n:e)&&t!==e?0:e}function Qs(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=Wr(Js.bind(null,e));else{var t=Ks(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var i=qs();if(1073741823===t?i=99:1===t||2===t?i=95:i=0>=(i=10*(1073741821-t)-10*(1073741821-i))?99:250>=i?98:5250>=i?97:95,null!==n){var r=e.callbackPriority;if(e.callbackExpirationTime===t&&r>=i)return;n!==Mr&&Cr(n)}e.callbackExpirationTime=t,e.callbackPriority=i,t=1073741823===t?Wr(Js.bind(null,e)):Ur(i,Zs.bind(null,e),{timeout:10*(1073741821-t)-kr()}),e.callbackNode=t}}}function Zs(e,t){if(Gs=0,t)return jc(e,t=qs()),Qs(e),null;var n=Ks(e);if(0!==n){if(t=e.callbackNode,0!==(48&Cs))throw Error(a(327));if(mc(),e===Es&&n===xs||nc(e,n),null!==As){var i=Cs;Cs|=16;for(var r=rc();;)try{cc();break}catch(c){ic(e,c)}if(Jr(),Cs=i,_s.current=r,1===Ts)throw t=Ss,nc(e,n),Rc(e,n),Qs(e),t;if(null===As)switch(r=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,i=Ts,Es=null,i){case ys:case 1:throw Error(a(345));case 2:jc(e,2<n?2:n);break;case ws:if(Rc(e,n),n===(i=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=hc(r)),1073741823===Ds&&10<(r=Ls+500-kr())){if(Rs){var o=e.lastPingedTime;if(0===o||o>=n){e.lastPingedTime=n,nc(e,n);break}}if(0!==(o=Ks(e))&&o!==n)break;if(0!==i&&i!==n){e.lastPingedTime=i;break}e.timeoutHandle=bn(dc.bind(null,e),r);break}dc(e);break;case Os:if(Rc(e,n),n===(i=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=hc(r)),Rs&&(0===(r=e.lastPingedTime)||r>=n)){e.lastPingedTime=n,nc(e,n);break}if(0!==(r=Ks(e))&&r!==n)break;if(0!==i&&i!==n){e.lastPingedTime=i;break}if(1073741823!==Ps?i=10*(1073741821-Ps)-kr():1073741823===Ds?i=0:(i=10*(1073741821-Ds)-5e3,0>(i=(r=kr())-i)&&(i=0),(n=10*(1073741821-n)-r)<(i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*vs(i/1960))-i)&&(i=n)),10<i){e.timeoutHandle=bn(dc.bind(null,e),i);break}dc(e);break;case 5:if(1073741823!==Ds&&null!==Is){o=Ds;var s=Is;if(0>=(i=0|s.busyMinDurationMs)?i=0:(r=0|s.busyDelayMs,i=(o=kr()-(10*(1073741821-o)-(0|s.timeoutMs||5e3)))<=r?0:r+i-o),10<i){Rc(e,n),e.timeoutHandle=bn(dc.bind(null,e),i);break}}dc(e);break;default:throw Error(a(329))}if(Qs(e),e.callbackNode===t)return Zs.bind(null,e)}}return null}function Js(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,0!==(48&Cs))throw Error(a(327));if(mc(),e===Es&&t===xs||nc(e,t),null!==As){var n=Cs;Cs|=16;for(var i=rc();;)try{sc();break}catch(r){ic(e,r)}if(Jr(),Cs=n,_s.current=i,1===Ts)throw n=Ss,nc(e,t),Rc(e,t),Qs(e),n;if(null!==As)throw Error(a(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,Es=null,dc(e),Qs(e)}return null}function ec(e,t){var n=Cs;Cs|=1;try{return e(t)}finally{0===(Cs=n)&&Gr()}}function tc(e,t){var n=Cs;Cs&=-2,Cs|=8;try{return e(t)}finally{0===(Cs=n)&&Gr()}}function nc(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,yn(n)),null!==As)for(n=As.return;null!==n;){var i=n;switch(i.tag){case 1:null!==(i=i.type.childContextTypes)&&void 0!==i&&gr();break;case 3:Ro(),cr(dr),cr(hr);break;case 5:jo(i);break;case 4:Ro();break;case 13:case 19:cr(Fo);break;case 10:eo(i)}n=n.return}Es=e,As=xc(e.current,null),xs=t,Ts=ys,Ss=null,Ps=Ds=1073741823,Is=null,Ms=0,Rs=!1}function ic(e,t){for(;;){try{if(Jr(),ko.current=ga,Go)for(var n=Vo.memoizedState;null!==n;){var i=n.queue;null!==i&&(i.pending=null),n=n.next}if(Ho=0,Wo=Uo=Vo=null,Go=!1,null===As||null===As.return)return Ts=1,Ss=t,As=null;e:{var r=e,o=As.return,a=As,s=t;if(t=xs,a.effectTag|=2048,a.firstEffect=a.lastEffect=null,null!==s&&"object"===typeof s&&"function"===typeof s.then){var c=s;if(0===(2&a.mode)){var l=a.alternate;l?(a.updateQueue=l.updateQueue,a.memoizedState=l.memoizedState,a.expirationTime=l.expirationTime):(a.updateQueue=null,a.memoizedState=null)}var u=0!==(1&Fo.current),h=o;do{var d;if(d=13===h.tag){var f=h.memoizedState;if(null!==f)d=null!==f.dehydrated;else{var p=h.memoizedProps;d=void 0!==p.fallback&&(!0!==p.unstable_avoidThisFallback||!u)}}if(d){var m=h.updateQueue;if(null===m){var g=new Set;g.add(c),h.updateQueue=g}else m.add(c);if(0===(2&h.mode)){if(h.effectTag|=64,a.effectTag&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var v=so(1073741823,null);v.tag=2,co(a,v)}a.expirationTime=1073741823;break e}s=void 0,a=t;var _=r.pingCache;if(null===_?(_=r.pingCache=new fs,s=new Set,_.set(c,s)):void 0===(s=_.get(c))&&(s=new Set,_.set(c,s)),!s.has(a)){s.add(a);var b=bc.bind(null,r,c,a);c.then(b,b)}h.effectTag|=4096,h.expirationTime=t;break e}h=h.return}while(null!==h);s=Error((ge(a.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+ve(a))}5!==Ts&&(Ts=2),s=Za(s,a),h=o;do{switch(h.tag){case 3:c=s,h.effectTag|=4096,h.expirationTime=t,lo(h,ps(h,c,t));break e;case 1:c=s;var y=h.type,w=h.stateNode;if(0===(64&h.effectTag)&&("function"===typeof y.getDerivedStateFromError||null!==w&&"function"===typeof w.componentDidCatch&&(null===zs||!zs.has(w)))){h.effectTag|=4096,h.expirationTime=t,lo(h,ms(h,c,t));break e}}h=h.return}while(null!==h)}As=uc(As)}catch(O){t=O;continue}break}}function rc(){var e=_s.current;return _s.current=ga,null===e?ga:e}function oc(e,t){e<Ds&&2<e&&(Ds=e),null!==t&&e<Ps&&2<e&&(Ps=e,Is=t)}function ac(e){e>Ms&&(Ms=e)}function sc(){for(;null!==As;)As=lc(As)}function cc(){for(;null!==As&&!Rr();)As=lc(As)}function lc(e){var t=gs(e.alternate,e,xs);return e.memoizedProps=e.pendingProps,null===t&&(t=uc(e)),bs.current=null,t}function uc(e){As=e;do{var t=As.alternate;if(e=As.return,0===(2048&As.effectTag)){if(t=Ka(t,As,xs),1===xs||1!==As.childExpirationTime){for(var n=0,i=As.child;null!==i;){var r=i.expirationTime,o=i.childExpirationTime;r>n&&(n=r),o>n&&(n=o),i=i.sibling}As.childExpirationTime=n}if(null!==t)return t;null!==e&&0===(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=As.firstEffect),null!==As.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=As.firstEffect),e.lastEffect=As.lastEffect),1<As.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=As:e.firstEffect=As,e.lastEffect=As))}else{if(null!==(t=Qa(As)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=As.sibling))return t;As=e}while(null!==As);return Ts===ys&&(Ts=5),null}function hc(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function dc(e){var t=Br();return Vr(99,fc.bind(null,e,t)),null}function fc(e,t){do{mc()}while(null!==Bs);if(0!==(48&Cs))throw Error(a(327));var n=e.finishedWork,i=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var r=hc(n);if(e.firstPendingTime=r,i<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:i<=e.firstSuspendedTime&&(e.firstSuspendedTime=i-1),i<=e.lastPingedTime&&(e.lastPingedTime=0),i<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===Es&&(As=Es=null,xs=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){var o=Cs;Cs|=32,bs.current=null,mn=qt;var s=fn();if(pn(s)){if("selectionStart"in s)var c={start:s.selectionStart,end:s.selectionEnd};else e:{var l=(c=(c=s.ownerDocument)&&c.defaultView||window).getSelection&&c.getSelection();if(l&&0!==l.rangeCount){c=l.anchorNode;var u=l.anchorOffset,h=l.focusNode;l=l.focusOffset;try{c.nodeType,h.nodeType}catch(x){c=null;break e}var d=0,f=-1,p=-1,m=0,g=0,v=s,_=null;t:for(;;){for(var b;v!==c||0!==u&&3!==v.nodeType||(f=d+u),v!==h||0!==l&&3!==v.nodeType||(p=d+l),3===v.nodeType&&(d+=v.nodeValue.length),null!==(b=v.firstChild);)_=v,v=b;for(;;){if(v===s)break t;if(_===c&&++m===u&&(f=d),_===h&&++g===l&&(p=d),null!==(b=v.nextSibling))break;_=(v=_).parentNode}v=b}c=-1===f||-1===p?null:{start:f,end:p}}else c=null}c=c||{start:0,end:0}}else c=null;gn={activeElementDetached:null,focusedElem:s,selectionRange:c},qt=!1,js=r;do{try{pc()}catch(x){if(null===js)throw Error(a(330));_c(js,x),js=js.nextEffect}}while(null!==js);js=r;do{try{for(s=e,c=t;null!==js;){var y=js.effectTag;if(16&y&&Be(js.stateNode,""),128&y){var w=js.alternate;if(null!==w){var O=w.ref;null!==O&&("function"===typeof O?O(null):O.current=null)}}switch(1038&y){case 2:ls(js),js.effectTag&=-3;break;case 6:ls(js),js.effectTag&=-3,hs(js.alternate,js);break;case 1024:js.effectTag&=-1025;break;case 1028:js.effectTag&=-1025,hs(js.alternate,js);break;case 4:hs(js.alternate,js);break;case 8:us(s,u=js,c),ss(u)}js=js.nextEffect}}catch(x){if(null===js)throw Error(a(330));_c(js,x),js=js.nextEffect}}while(null!==js);if(O=gn,w=fn(),y=O.focusedElem,c=O.selectionRange,w!==y&&y&&y.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):"contains"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(y.ownerDocument.documentElement,y)){null!==c&&pn(y)&&(w=c.start,void 0===(O=c.end)&&(O=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(O,y.value.length)):(O=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(O=O.getSelection(),u=y.textContent.length,s=Math.min(c.start,u),c=void 0===c.end?s:Math.min(c.end,u),!O.extend&&s>c&&(u=c,c=s,s=u),u=dn(y,s),h=dn(y,c),u&&h&&(1!==O.rangeCount||O.anchorNode!==u.node||O.anchorOffset!==u.offset||O.focusNode!==h.node||O.focusOffset!==h.offset)&&((w=w.createRange()).setStart(u.node,u.offset),O.removeAllRanges(),s>c?(O.addRange(w),O.extend(h.node,h.offset)):(w.setEnd(h.node,h.offset),O.addRange(w))))),w=[];for(O=y;O=O.parentNode;)1===O.nodeType&&w.push({element:O,left:O.scrollLeft,top:O.scrollTop});for("function"===typeof y.focus&&y.focus(),y=0;y<w.length;y++)(O=w[y]).element.scrollLeft=O.left,O.element.scrollTop=O.top}qt=!!mn,gn=mn=null,e.current=n,js=r;do{try{for(y=e;null!==js;){var C=js.effectTag;if(36&C&&os(y,js.alternate,js),128&C){w=void 0;var E=js.ref;if(null!==E){var A=js.stateNode;switch(js.tag){case 5:w=A;break;default:w=A}"function"===typeof E?E(w):E.current=w}}js=js.nextEffect}}catch(x){if(null===js)throw Error(a(330));_c(js,x),js=js.nextEffect}}while(null!==js);js=null,Lr(),Cs=o}else e.current=n;if(ks)ks=!1,Bs=e,Hs=t;else for(js=r;null!==js;)t=js.nextEffect,js.nextEffect=null,js=t;if(0===(t=e.firstPendingTime)&&(zs=null),1073741823===t?e===Ws?Us++:(Us=0,Ws=e):Us=0,"function"===typeof wc&&wc(n.stateNode,i),Qs(e),Fs)throw Fs=!1,e=Ns,Ns=null,e;return 0!==(8&Cs)||Gr(),null}function pc(){for(;null!==js;){var e=js.effectTag;0!==(256&e)&&ns(js.alternate,js),0===(512&e)||ks||(ks=!0,Ur(97,(function(){return mc(),null}))),js=js.nextEffect}}function mc(){if(90!==Hs){var e=97<Hs?97:Hs;return Hs=90,Vr(e,gc)}}function gc(){if(null===Bs)return!1;var e=Bs;if(Bs=null,0!==(48&Cs))throw Error(a(331));var t=Cs;for(Cs|=32,e=e.current.firstEffect;null!==e;){try{var n=e;if(0!==(512&n.effectTag))switch(n.tag){case 0:case 11:case 15:case 22:is(5,n),rs(5,n)}}catch(i){if(null===e)throw Error(a(330));_c(e,i)}n=e.nextEffect,e.nextEffect=null,e=n}return Cs=t,Gr(),!0}function vc(e,t,n){co(e,t=ps(e,t=Za(n,t),1073741823)),null!==(e=Xs(e,1073741823))&&Qs(e)}function _c(e,t){if(3===e.tag)vc(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){vc(n,e,t);break}if(1===n.tag){var i=n.stateNode;if("function"===typeof n.type.getDerivedStateFromError||"function"===typeof i.componentDidCatch&&(null===zs||!zs.has(i))){co(n,e=ms(n,e=Za(t,e),1073741823)),null!==(n=Xs(n,1073741823))&&Qs(n);break}}n=n.return}}function bc(e,t,n){var i=e.pingCache;null!==i&&i.delete(t),Es===e&&xs===n?Ts===Os||Ts===ws&&1073741823===Ds&&kr()-Ls<500?nc(e,xs):Rs=!0:Mc(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,Qs(e)))}function yc(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=Ys(t=qs(),e,null)),null!==(e=Xs(e,t))&&Qs(e)}gs=function(e,t,n){var i=t.expirationTime;if(null!==e){var r=t.pendingProps;if(e.memoizedProps!==r||dr.current)Pa=!0;else{if(i<n){switch(Pa=!1,t.tag){case 3:ka(t),Sa();break;case 5:if(Lo(t),4&t.mode&&1!==n&&r.hidden)return t.expirationTime=t.childExpirationTime=1,null;break;case 1:mr(t.type)&&br(t);break;case 4:Mo(t,t.stateNode.containerInfo);break;case 10:i=t.memoizedProps.value,r=t.type._context,lr(Xr,r._currentValue),r._currentValue=i;break;case 13:if(null!==t.memoizedState)return 0!==(i=t.child.childExpirationTime)&&i>=n?Wa(e,t,n):(lr(Fo,1&Fo.current),null!==(t=$a(e,t,n))?t.sibling:null);lr(Fo,1&Fo.current);break;case 19:if(i=t.childExpirationTime>=n,0!==(64&e.effectTag)){if(i)return Ya(e,t,n);t.effectTag|=64}if(null!==(r=t.memoizedState)&&(r.rendering=null,r.tail=null),lr(Fo,Fo.current),!i)return null}return $a(e,t,n)}Pa=!1}}else Pa=!1;switch(t.expirationTime=0,t.tag){case 2:if(i=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,r=pr(t,hr.current),no(t,n),r=$o(null,t,i,e,r,n),t.effectTag|=1,"object"===typeof r&&null!==r&&"function"===typeof r.render&&void 0===r.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,mr(i)){var o=!0;br(t)}else o=!1;t.memoizedState=null!==r.state&&void 0!==r.state?r.state:null,oo(t);var s=i.getDerivedStateFromProps;"function"===typeof s&&mo(t,i,s,e),r.updater=go,t.stateNode=r,r._reactInternalFiber=t,yo(t,i,e,n),t=za(null,t,i,!0,o,n)}else t.tag=0,Ia(null,t,r,n),t=t.child;return t;case 16:e:{if(r=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(r),1!==r._status)throw r._result;switch(r=r._result,t.type=r,o=t.tag=function(e){if("function"===typeof e)return Ac(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===ce)return 11;if(e===he)return 14}return 2}(r),e=$r(r,e),o){case 0:t=Fa(null,t,r,e,n);break e;case 1:t=Na(null,t,r,e,n);break e;case 11:t=Ma(null,t,r,e,n);break e;case 14:t=Ra(null,t,r,$r(r.type,e),i,n);break e}throw Error(a(306,r,""))}return t;case 0:return i=t.type,r=t.pendingProps,Fa(e,t,i,r=t.elementType===i?r:$r(i,r),n);case 1:return i=t.type,r=t.pendingProps,Na(e,t,i,r=t.elementType===i?r:$r(i,r),n);case 3:if(ka(t),i=t.updateQueue,null===e||null===i)throw Error(a(282));if(i=t.pendingProps,r=null!==(r=t.memoizedState)?r.element:null,ao(e,t),uo(t,i,null,n),(i=t.memoizedState.element)===r)Sa(),t=$a(e,t,n);else{if((r=t.stateNode.hydrate)&&(wa=wn(t.stateNode.containerInfo.firstChild),ya=t,r=Oa=!0),r)for(n=xo(t,null,i,n),t.child=n;n;)n.effectTag=-3&n.effectTag|1024,n=n.sibling;else Ia(e,t,i,n),Sa();t=t.child}return t;case 5:return Lo(t),null===e&&Aa(t),i=t.type,r=t.pendingProps,o=null!==e?e.memoizedProps:null,s=r.children,_n(i,r)?s=null:null!==o&&_n(i,o)&&(t.effectTag|=16),ja(e,t),4&t.mode&&1!==n&&r.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(Ia(e,t,s,n),t=t.child),t;case 6:return null===e&&Aa(t),null;case 13:return Wa(e,t,n);case 4:return Mo(t,t.stateNode.containerInfo),i=t.pendingProps,null===e?t.child=Ao(t,null,i,n):Ia(e,t,i,n),t.child;case 11:return i=t.type,r=t.pendingProps,Ma(e,t,i,r=t.elementType===i?r:$r(i,r),n);case 7:return Ia(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ia(e,t,t.pendingProps.children,n),t.child;case 10:e:{i=t.type._context,r=t.pendingProps,s=t.memoizedProps,o=r.value;var c=t.type._context;if(lr(Xr,c._currentValue),c._currentValue=o,null!==s)if(c=s.value,0===(o=Ni(c,o)?0:0|("function"===typeof i._calculateChangedBits?i._calculateChangedBits(c,o):1073741823))){if(s.children===r.children&&!dr.current){t=$a(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var l=c.dependencies;if(null!==l){s=c.child;for(var u=l.firstContext;null!==u;){if(u.context===i&&0!==(u.observedBits&o)){1===c.tag&&((u=so(n,null)).tag=2,co(c,u)),c.expirationTime<n&&(c.expirationTime=n),null!==(u=c.alternate)&&u.expirationTime<n&&(u.expirationTime=n),to(c.return,n),l.expirationTime<n&&(l.expirationTime=n);break}u=u.next}}else s=10===c.tag&&c.type===t.type?null:c.child;if(null!==s)s.return=c;else for(s=c;null!==s;){if(s===t){s=null;break}if(null!==(c=s.sibling)){c.return=s.return,s=c;break}s=s.return}c=s}Ia(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,i=(o=t.pendingProps).children,no(t,n),i=i(r=io(r,o.unstable_observedBits)),t.effectTag|=1,Ia(e,t,i,n),t.child;case 14:return o=$r(r=t.type,t.pendingProps),Ra(e,t,r,o=$r(r.type,o),i,n);case 15:return La(e,t,t.type,t.pendingProps,i,n);case 17:return i=t.type,r=t.pendingProps,r=t.elementType===i?r:$r(i,r),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,mr(i)?(e=!0,br(t)):e=!1,no(t,n),_o(t,i,r),yo(t,i,r,n),za(null,t,i,!0,e,n);case 19:return Ya(e,t,n)}throw Error(a(156,t.tag))};var wc=null,Oc=null;function Cc(e,t,n,i){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Ec(e,t,n,i){return new Cc(e,t,n,i)}function Ac(e){return!(!(e=e.prototype)||!e.isReactComponent)}function xc(e,t){var n=e.alternate;return null===n?((n=Ec(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Tc(e,t,n,i,r,o){var s=2;if(i=e,"function"===typeof e)Ac(e)&&(s=1);else if("string"===typeof e)s=5;else e:switch(e){case ne:return Sc(n.children,r,o,t);case se:s=8,r|=7;break;case ie:s=8,r|=1;break;case re:return(e=Ec(12,n,t,8|r)).elementType=re,e.type=re,e.expirationTime=o,e;case le:return(e=Ec(13,n,t,r)).type=le,e.elementType=le,e.expirationTime=o,e;case ue:return(e=Ec(19,n,t,r)).elementType=ue,e.expirationTime=o,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case oe:s=10;break e;case ae:s=9;break e;case ce:s=11;break e;case he:s=14;break e;case de:s=16,i=null;break e;case fe:s=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Ec(s,n,t,r)).elementType=e,t.type=i,t.expirationTime=o,t}function Sc(e,t,n,i){return(e=Ec(7,e,i,t)).expirationTime=n,e}function Dc(e,t,n){return(e=Ec(6,e,null,t)).expirationTime=n,e}function Pc(e,t,n){return(t=Ec(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ic(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Mc(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function Rc(e,t){var n=e.firstSuspendedTime,i=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(i>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Lc(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function jc(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Fc(e,t,n,i){var r=t.current,o=qs(),s=fo.suspense;o=Ys(o,r,s);e:if(n){t:{if(Je(n=n._reactInternalFiber)!==n||1!==n.tag)throw Error(a(170));var c=n;do{switch(c.tag){case 3:c=c.stateNode.context;break t;case 1:if(mr(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break t}}c=c.return}while(null!==c);throw Error(a(171))}if(1===n.tag){var l=n.type;if(mr(l)){n=_r(n,l,c);break e}}n=c}else n=ur;return null===t.context?t.context=n:t.pendingContext=n,(t=so(o,s)).payload={element:e},null!==(i=void 0===i?null:i)&&(t.callback=i),co(r,t),$s(r,o),o}function Nc(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function zc(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<t&&(e.retryTime=t)}function kc(e,t){zc(e,t),(e=e.alternate)&&zc(e,t)}function Bc(e,t,n){var i=new Ic(e,t,n=null!=n&&!0===n.hydrate),r=Ec(3,null,null,2===t?7:1===t?3:0);i.current=r,r.stateNode=i,oo(r),e[xn]=i.current,n&&0!==t&&function(e,t){var n=Ze(t);xt.forEach((function(e){pt(e,t,n)})),Tt.forEach((function(e){pt(e,t,n)}))}(0,9===e.nodeType?e:e.ownerDocument),this._internalRoot=i}function Hc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Vc(e,t,n,i,r){var o=n._reactRootContainer;if(o){var a=o._internalRoot;if("function"===typeof r){var s=r;r=function(){var e=Nc(a);s.call(e)}}Fc(t,a,e,r)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Bc(e,0,t?{hydrate:!0}:void 0)}(n,i),a=o._internalRoot,"function"===typeof r){var c=r;r=function(){var e=Nc(a);c.call(e)}}tc((function(){Fc(t,a,e,r)}))}return Nc(a)}function Uc(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:te,key:null==i?null:""+i,children:e,containerInfo:t,implementation:n}}function Wc(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Hc(t))throw Error(a(200));return Uc(e,t,null,n)}Bc.prototype.render=function(e){Fc(e,this._internalRoot,null,null)},Bc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Fc(null,e,null,(function(){t[xn]=null}))},mt=function(e){if(13===e.tag){var t=Yr(qs(),150,100);$s(e,t),kc(e,t)}},gt=function(e){13===e.tag&&($s(e,3),kc(e,3))},vt=function(e){if(13===e.tag){var t=qs();$s(e,t=Ys(t,e,null)),kc(e,t)}},S=function(e,t,n){switch(t){case"input":if(Ae(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var i=n[t];if(i!==e&&i.form===e.form){var r=Pn(i);if(!r)throw Error(a(90));we(i),Ae(i,r)}}}break;case"textarea":Me(e,n);break;case"select":null!=(t=n.value)&&De(e,!!n.multiple,t,!1)}},L=ec,j=function(e,t,n,i,r){var o=Cs;Cs|=4;try{return Vr(98,e.bind(null,t,n,i,r))}finally{0===(Cs=o)&&Gr()}},F=function(){0===(49&Cs)&&(function(){if(null!==Vs){var e=Vs;Vs=null,e.forEach((function(e,t){jc(t,e),Qs(t)})),Gr()}}(),mc())},N=function(e,t){var n=Cs;Cs|=2;try{return e(t)}finally{0===(Cs=n)&&Gr()}};var Gc={Events:[Sn,Dn,Pn,x,C,Nn,function(e){rt(e,Fn)},M,R,Qt,st,mc,{current:!1}]};!function(e){var t=e.findFiberByHostInstance;(function(e){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);wc=function(e){try{t.onCommitFiberRoot(n,e,void 0,64===(64&e.current.effectTag))}catch(i){}},Oc=function(e){try{t.onCommitFiberUnmount(n,e)}catch(i){}}}catch(i){}})(r({},e,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:K.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=nt(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))}({findFiberByHostInstance:Tn,bundleType:0,version:"16.14.0",rendererPackageName:"react-dom"}),t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Gc,t.createPortal=Wc,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternalFiber;if(void 0===t){if("function"===typeof e.render)throw Error(a(188));throw Error(a(268,Object.keys(e)))}return e=null===(e=nt(t))?null:e.stateNode},t.flushSync=function(e,t){if(0!==(48&Cs))throw Error(a(187));var n=Cs;Cs|=1;try{return Vr(99,e.bind(null,t))}finally{Cs=n,Gr()}},t.hydrate=function(e,t,n){if(!Hc(t))throw Error(a(200));return Vc(null,e,t,!0,n)},t.render=function(e,t,n){if(!Hc(t))throw Error(a(200));return Vc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Hc(e))throw Error(a(40));return!!e._reactRootContainer&&(tc((function(){Vc(null,null,e,!1,(function(){e._reactRootContainer=null,e[xn]=null}))})),!0)},t.unstable_batchedUpdates=ec,t.unstable_createPortal=function(e,t){return Wc(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,i){if(!Hc(n))throw Error(a(200));if(null==e||void 0===e._reactInternalFiber)throw Error(a(38));return Vc(e,t,n,!1,i)},t.version="16.14.0"},function(e,t,n){"use strict";e.exports=n(434)},function(e,t,n){"use strict";var i,r,o,a,s;if("undefined"===typeof window||"function"!==typeof MessageChannel){var c=null,l=null,u=function e(){if(null!==c)try{var n=t.unstable_now();c(!0,n),c=null}catch(i){throw setTimeout(e,0),i}},h=Date.now();t.unstable_now=function(){return Date.now()-h},i=function(e){null!==c?setTimeout(i,0,e):(c=e,setTimeout(u,0))},r=function(e,t){l=setTimeout(e,t)},o=function(){clearTimeout(l)},a=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var d=window.performance,f=window.Date,p=window.setTimeout,m=window.clearTimeout;if("undefined"!==typeof console){var g=window.cancelAnimationFrame;"function"!==typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!==typeof g&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"===typeof d&&"function"===typeof d.now)t.unstable_now=function(){return d.now()};else{var v=f.now();t.unstable_now=function(){return f.now()-v}}var _=!1,b=null,y=-1,w=5,O=0;a=function(){return t.unstable_now()>=O},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):w=0<e?Math.floor(1e3/e):5};var C=new MessageChannel,E=C.port2;C.port1.onmessage=function(){if(null!==b){var e=t.unstable_now();O=e+w;try{b(!0,e)?E.postMessage(null):(_=!1,b=null)}catch(n){throw E.postMessage(null),n}}else _=!1},i=function(e){b=e,_||(_=!0,E.postMessage(null))},r=function(e,n){y=p((function(){e(t.unstable_now())}),n)},o=function(){m(y),y=-1}}function A(e,t){var n=e.length;e.push(t);e:for(;;){var i=n-1>>>1,r=e[i];if(!(void 0!==r&&0<S(r,t)))break e;e[i]=t,e[n]=r,n=i}}function x(e){return void 0===(e=e[0])?null:e}function T(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var i=0,r=e.length;i<r;){var o=2*(i+1)-1,a=e[o],s=o+1,c=e[s];if(void 0!==a&&0>S(a,n))void 0!==c&&0>S(c,a)?(e[i]=c,e[s]=n,i=s):(e[i]=a,e[o]=n,i=o);else{if(!(void 0!==c&&0>S(c,n)))break e;e[i]=c,e[s]=n,i=s}}}return t}return null}function S(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var D=[],P=[],I=1,M=null,R=3,L=!1,j=!1,F=!1;function N(e){for(var t=x(P);null!==t;){if(null===t.callback)T(P);else{if(!(t.startTime<=e))break;T(P),t.sortIndex=t.expirationTime,A(D,t)}t=x(P)}}function z(e){if(F=!1,N(e),!j)if(null!==x(D))j=!0,i(k);else{var t=x(P);null!==t&&r(z,t.startTime-e)}}function k(e,n){j=!1,F&&(F=!1,o()),L=!0;var i=R;try{for(N(n),M=x(D);null!==M&&(!(M.expirationTime>n)||e&&!a());){var s=M.callback;if(null!==s){M.callback=null,R=M.priorityLevel;var c=s(M.expirationTime<=n);n=t.unstable_now(),"function"===typeof c?M.callback=c:M===x(D)&&T(D),N(n)}else T(D);M=x(D)}if(null!==M)var l=!0;else{var u=x(P);null!==u&&r(z,u.startTime-n),l=!1}return l}finally{M=null,R=i,L=!1}}function B(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var H=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){j||L||(j=!0,i(k))},t.unstable_getCurrentPriorityLevel=function(){return R},t.unstable_getFirstCallbackNode=function(){return x(D)},t.unstable_next=function(e){switch(R){case 1:case 2:case 3:var t=3;break;default:t=R}var n=R;R=t;try{return e()}finally{R=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=H,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=R;R=e;try{return t()}finally{R=n}},t.unstable_scheduleCallback=function(e,n,a){var s=t.unstable_now();if("object"===typeof a&&null!==a){var c=a.delay;c="number"===typeof c&&0<c?s+c:s,a="number"===typeof a.timeout?a.timeout:B(e)}else a=B(e),c=s;return e={id:I++,callback:n,priorityLevel:e,startTime:c,expirationTime:a=c+a,sortIndex:-1},c>s?(e.sortIndex=c,A(P,e),null===x(D)&&e===x(P)&&(F?o():F=!0,r(z,c-s))):(e.sortIndex=a,A(D,e),j||L||(j=!0,i(k))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();N(e);var n=x(D);return n!==M&&null!==M&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<M.expirationTime||a()},t.unstable_wrapCallback=function(e){var t=R;return function(){var n=R;R=t;try{return e.apply(this,arguments)}finally{R=n}}}},function(e,t,n){"use strict";var i=n(436);function r(){}function o(){}o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,a){if(a!==i){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";var i="function"===typeof Symbol&&Symbol.for,r=i?Symbol.for("react.element"):60103,o=i?Symbol.for("react.portal"):60106,a=i?Symbol.for("react.fragment"):60107,s=i?Symbol.for("react.strict_mode"):60108,c=i?Symbol.for("react.profiler"):60114,l=i?Symbol.for("react.provider"):60109,u=i?Symbol.for("react.context"):60110,h=i?Symbol.for("react.async_mode"):60111,d=i?Symbol.for("react.concurrent_mode"):60111,f=i?Symbol.for("react.forward_ref"):60112,p=i?Symbol.for("react.suspense"):60113,m=i?Symbol.for("react.suspense_list"):60120,g=i?Symbol.for("react.memo"):60115,v=i?Symbol.for("react.lazy"):60116,_=i?Symbol.for("react.block"):60121,b=i?Symbol.for("react.fundamental"):60117,y=i?Symbol.for("react.responder"):60118,w=i?Symbol.for("react.scope"):60119;function O(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case h:case d:case a:case c:case s:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case v:case g:case l:return e;default:return t}}case o:return t}}}function C(e){return O(e)===d}t.AsyncMode=h,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=l,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=v,t.Memo=g,t.Portal=o,t.Profiler=c,t.StrictMode=s,t.Suspense=p,t.isAsyncMode=function(e){return C(e)||O(e)===h},t.isConcurrentMode=C,t.isContextConsumer=function(e){return O(e)===u},t.isContextProvider=function(e){return O(e)===l},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return O(e)===f},t.isFragment=function(e){return O(e)===a},t.isLazy=function(e){return O(e)===v},t.isMemo=function(e){return O(e)===g},t.isPortal=function(e){return O(e)===o},t.isProfiler=function(e){return O(e)===c},t.isStrictMode=function(e){return O(e)===s},t.isSuspense=function(e){return O(e)===p},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===a||e===d||e===c||e===s||e===p||e===m||"object"===typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===g||e.$$typeof===l||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===_)},t.typeOf=O},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){(function(e){!function(t){"use strict";function n(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function i(e,t){Object.defineProperty(this,"kind",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,"path",{value:t,enumerable:!0})}function r(e,t,n){r.super_.call(this,"E",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0}),Object.defineProperty(this,"rhs",{value:n,enumerable:!0})}function o(e,t){o.super_.call(this,"N",e),Object.defineProperty(this,"rhs",{value:t,enumerable:!0})}function a(e,t){a.super_.call(this,"D",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0})}function s(e,t,n){s.super_.call(this,"A",e),Object.defineProperty(this,"index",{value:t,enumerable:!0}),Object.defineProperty(this,"item",{value:n,enumerable:!0})}function c(e,t,n){var i=e.slice((n||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,i),e}function l(e){var t="undefined"==typeof e?"undefined":C(e);return"object"!==t?t:e===Math?"math":null===e?"null":Array.isArray(e)?"array":"[object Date]"===Object.prototype.toString.call(e)?"date":"function"==typeof e.toString&&/^\/.*\//.test(e.toString())?"regexp":"object"}function u(e,t,n,i,h,d,f){f=f||[];var p=(h=h||[]).slice(0);if("undefined"!=typeof d){if(i){if("function"==typeof i&&i(p,d))return;if("object"===("undefined"==typeof i?"undefined":C(i))){if(i.prefilter&&i.prefilter(p,d))return;if(i.normalize){var m=i.normalize(p,d,e,t);m&&(e=m[0],t=m[1])}}}p.push(d)}"regexp"===l(e)&&"regexp"===l(t)&&(e=e.toString(),t=t.toString());var g="undefined"==typeof e?"undefined":C(e),v="undefined"==typeof t?"undefined":C(t),_="undefined"!==g||f&&f[f.length-1].lhs&&f[f.length-1].lhs.hasOwnProperty(d),b="undefined"!==v||f&&f[f.length-1].rhs&&f[f.length-1].rhs.hasOwnProperty(d);if(!_&&b)n(new o(p,t));else if(!b&&_)n(new a(p,e));else if(l(e)!==l(t))n(new r(p,e,t));else if("date"===l(e)&&e-t!==0)n(new r(p,e,t));else if("object"===g&&null!==e&&null!==t)if(f.filter((function(t){return t.lhs===e})).length)e!==t&&n(new r(p,e,t));else{if(f.push({lhs:e,rhs:t}),Array.isArray(e)){var y;for(e.length,y=0;y<e.length;y++)y>=t.length?n(new s(p,y,new a(void 0,e[y]))):u(e[y],t[y],n,i,p,y,f);for(;y<t.length;)n(new s(p,y,new o(void 0,t[y++])))}else{var w=Object.keys(e),O=Object.keys(t);w.forEach((function(r,o){var a=O.indexOf(r);a>=0?(u(e[r],t[r],n,i,p,r,f),O=c(O,a)):u(e[r],void 0,n,i,p,r,f)})),O.forEach((function(e){u(void 0,t[e],n,i,p,e,f)}))}f.length=f.length-1}else e!==t&&("number"===g&&isNaN(e)&&isNaN(t)||n(new r(p,e,t)))}function h(e,t,n,i){return i=i||[],u(e,t,(function(e){e&&i.push(e)}),n),i.length?i:void 0}function d(e,t,n){if(e&&t&&n&&n.kind){for(var i=e,r=-1,o=n.path?n.path.length-1:0;++r<o;)"undefined"==typeof i[n.path[r]]&&(i[n.path[r]]="number"==typeof n.path[r]?[]:{}),i=i[n.path[r]];switch(n.kind){case"A":!function e(t,n,i){if(i.path&&i.path.length){var r,o=t[n],a=i.path.length-1;for(r=0;r<a;r++)o=o[i.path[r]];switch(i.kind){case"A":e(o[i.path[r]],i.index,i.item);break;case"D":delete o[i.path[r]];break;case"E":case"N":o[i.path[r]]=i.rhs}}else switch(i.kind){case"A":e(t[n],i.index,i.item);break;case"D":t=c(t,n);break;case"E":case"N":t[n]=i.rhs}return t}(n.path?i[n.path[r]]:i,n.index,n.item);break;case"D":delete i[n.path[r]];break;case"E":case"N":i[n.path[r]]=n.rhs}}}function f(e){return"color: "+x[e].color+"; font-weight: bold"}function p(e,t,n,i){var r=h(e,t);try{i?n.groupCollapsed("diff"):n.group("diff")}catch(e){n.log("diff")}r?r.forEach((function(e){var t=e.kind,i=function(e){var t=e.kind,n=e.path,i=e.lhs,r=e.rhs,o=e.index,a=e.item;switch(t){case"E":return[n.join("."),i,"\u2192",r];case"N":return[n.join("."),r];case"D":return[n.join(".")];case"A":return[n.join(".")+"["+o+"]",a];default:return[]}}(e);n.log.apply(n,["%c "+x[t].text,f(t)].concat(E(i)))})):n.log("\u2014\u2014 no diff \u2014\u2014");try{n.groupEnd()}catch(e){n.log("\u2014\u2014 diff end \u2014\u2014 ")}}function m(e,t,n,i){switch("undefined"==typeof e?"undefined":C(e)){case"object":return"function"==typeof e[i]?e[i].apply(e,E(n)):e[i];case"function":return e(t);default:return e}}function g(e,t){var n=t.logger,i=t.actionTransformer,r=t.titleFormatter,o=void 0===r?function(e){var t=e.timestamp,n=e.duration;return function(e,i,r){var o=["action"];return o.push("%c"+String(e.type)),t&&o.push("%c@ "+i),n&&o.push("%c(in "+r.toFixed(2)+" ms)"),o.join(" ")}}(t):r,a=t.collapsed,s=t.colors,c=t.level,l=t.diff,u="undefined"==typeof t.titleFormatter;e.forEach((function(r,h){var d=r.started,f=r.startedTime,g=r.action,v=r.prevState,_=r.error,b=r.took,y=r.nextState,O=e[h+1];O&&(y=O.prevState,b=O.started-d);var C=i(g),E="function"==typeof a?a((function(){return y}),g,r):a,A=w(f),x=s.title?"color: "+s.title(C)+";":"",T=["color: gray; font-weight: lighter;"];T.push(x),t.timestamp&&T.push("color: gray; font-weight: lighter;"),t.duration&&T.push("color: gray; font-weight: lighter;");var S=o(C,A,b);try{E?s.title&&u?n.groupCollapsed.apply(n,["%c "+S].concat(T)):n.groupCollapsed(S):s.title&&u?n.group.apply(n,["%c "+S].concat(T)):n.group(S)}catch(e){n.log(S)}var D=m(c,C,[v],"prevState"),P=m(c,C,[C],"action"),I=m(c,C,[_,v],"error"),M=m(c,C,[y],"nextState");if(D)if(s.prevState){var R="color: "+s.prevState(v)+"; font-weight: bold";n[D]("%c prev state",R,v)}else n[D]("prev state",v);if(P)if(s.action){var L="color: "+s.action(C)+"; font-weight: bold";n[P]("%c action ",L,C)}else n[P]("action ",C);if(_&&I)if(s.error){var j="color: "+s.error(_,v)+"; font-weight: bold;";n[I]("%c error ",j,_)}else n[I]("error ",_);if(M)if(s.nextState){var F="color: "+s.nextState(y)+"; font-weight: bold";n[M]("%c next state",F,y)}else n[M]("next state",y);l&&p(v,y,n,E);try{n.groupEnd()}catch(e){n.log("\u2014\u2014 log end \u2014\u2014")}}))}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},T,e),n=t.logger,i=t.stateTransformer,r=t.errorTransformer,o=t.predicate,a=t.logErrors,s=t.diffPredicate;if("undefined"==typeof n)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error("[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\n// Logger with default options\nimport { logger } from 'redux-logger'\nconst store = createStore(\n reducer,\n applyMiddleware(logger)\n)\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\nimport createLogger from 'redux-logger'\nconst logger = createLogger({\n // ...options\n});\nconst store = createStore(\n reducer,\n applyMiddleware(logger)\n)\n"),function(){return function(e){return function(t){return e(t)}}};var c=[];return function(e){var n=e.getState;return function(e){return function(l){if("function"==typeof o&&!o(n,l))return e(l);var u={};c.push(u),u.started=O.now(),u.startedTime=new Date,u.prevState=i(n()),u.action=l;var h=void 0;if(a)try{h=e(l)}catch(e){u.error=r(e)}else h=e(l);u.took=O.now()-u.started,u.nextState=i(n());var d=t.diff&&"function"==typeof s?s(n,l):t.diff;if(g(c,Object.assign({},t,{diff:d})),c.length=0,u.error)throw u.error;return h}}}}var _,b,y=function(e,t){return function(e,t){return new Array(t+1).join(e)}("0",t-e.toString().length)+e},w=function(e){return y(e.getHours(),2)+":"+y(e.getMinutes(),2)+":"+y(e.getSeconds(),2)+"."+y(e.getMilliseconds(),3)},O="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance:Date,C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)},A=[];_="object"===("undefined"==typeof e?"undefined":C(e))&&e?e:"undefined"!=typeof window?window:{},(b=_.DeepDiff)&&A.push((function(){"undefined"!=typeof b&&_.DeepDiff===h&&(_.DeepDiff=b,b=void 0)})),n(r,i),n(o,i),n(a,i),n(s,i),Object.defineProperties(h,{diff:{value:h,enumerable:!0},observableDiff:{value:u,enumerable:!0},applyDiff:{value:function(e,t,n){e&&t&&u(e,t,(function(i){n&&!n(e,t,i)||d(e,t,i)}))},enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:function(e,t,n){if(e&&t&&n&&n.kind){var i,r,o=e;for(r=n.path.length-1,i=0;i<r;i++)"undefined"==typeof o[n.path[i]]&&(o[n.path[i]]={}),o=o[n.path[i]];switch(n.kind){case"A":!function e(t,n,i){if(i.path&&i.path.length){var r,o=t[n],a=i.path.length-1;for(r=0;r<a;r++)o=o[i.path[r]];switch(i.kind){case"A":e(o[i.path[r]],i.index,i.item);break;case"D":case"E":o[i.path[r]]=i.lhs;break;case"N":delete o[i.path[r]]}}else switch(i.kind){case"A":e(t[n],i.index,i.item);break;case"D":case"E":t[n]=i.lhs;break;case"N":t=c(t,n)}return t}(o[n.path[i]],n.index,n.item);break;case"D":case"E":o[n.path[i]]=n.lhs;break;case"N":delete o[n.path[i]]}}},enumerable:!0},isConflict:{value:function(){return"undefined"!=typeof b},enumerable:!0},noConflict:{value:function(){return A&&(A.forEach((function(e){e()})),A=null),h},enumerable:!0}});var x={E:{color:"#2196F3",text:"CHANGED:"},N:{color:"#4CAF50",text:"ADDED:"},D:{color:"#F44336",text:"DELETED:"},A:{color:"#2196F3",text:"ARRAY:"}},T={level:"log",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return"inherit"},prevState:function(){return"#9E9E9E"},action:function(){return"#03A9F4"},nextState:function(){return"#4CAF50"},error:function(){return"#F20404"}},diff:!1,diffPredicate:void 0,transformer:void 0},S=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,n=e.getState;return"function"==typeof t||"function"==typeof n?v()({dispatch:t,getState:n}):void console.error("\n[redux-logger v3] BREAKING CHANGE\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\n[redux-logger v3] Change\n[redux-logger v3] import createLogger from 'redux-logger'\n[redux-logger v3] to\n[redux-logger v3] import { createLogger } from 'redux-logger'\n")};t.defaults=T,t.createLogger=v,t.logger=S,t.default=S,Object.defineProperty(t,"__esModule",{value:!0})}(t)}).call(this,n(55))},function(e,t,n){var i=function(e){"use strict";var t=Object.prototype,n=t.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},r=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(x){s=function(e,t,n){return e[t]=n}}function c(e,t,n,i){var r=t&&t.prototype instanceof h?t:h,o=Object.create(r.prototype),a=new C(i||[]);return o._invoke=function(e,t,n){var i="suspendedStart";return function(r,o){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===r)throw o;return A()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=y(a,n);if(s){if(s===u)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===i)throw i="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i="executing";var c=l(e,t,n);if("normal"===c.type){if(i=n.done?"completed":"suspendedYield",c.arg===u)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(i="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),o}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(x){return{type:"throw",arg:x}}}e.wrap=c;var u={};function h(){}function d(){}function f(){}var p={};p[r]=function(){return this};var m=Object.getPrototypeOf,g=m&&m(m(E([])));g&&g!==t&&n.call(g,r)&&(p=g);var v=f.prototype=h.prototype=Object.create(p);function _(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){var i;this._invoke=function(r,o){function a(){return new t((function(i,a){!function i(r,o,a,s){var c=l(e[r],e,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"===typeof h&&n.call(h,"__await")?t.resolve(h.__await).then((function(e){i("next",e,a,s)}),(function(e){i("throw",e,a,s)})):t.resolve(h).then((function(e){u.value=e,a(u)}),(function(e){return i("throw",e,a,s)}))}s(c.arg)}(r,o,i,a)}))}return i=i?i.then(a,a):a()}}function y(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,y(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var i=l(n,e.iterator,t.arg);if("throw"===i.type)return t.method="throw",t.arg=i.arg,t.delegate=null,u;var r=i.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function E(e){if(e){var t=e[r];if(t)return t.call(e);if("function"===typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(n.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:A}}function A(){return{value:void 0,done:!0}}return d.prototype=v.constructor=f,f.constructor=d,d.displayName=s(f,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"===typeof e&&e.constructor;return!!t&&(t===d||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,s(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},_(b.prototype),b.prototype[o]=function(){return this},e.AsyncIterator=b,e.async=function(t,n,i,r,o){void 0===o&&(o=Promise);var a=new b(c(t,n,i,r),o);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(v),s(v,a,"Generator"),v[r]=function(){return this},v.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},e.values=E,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(n,i){return a.type="throw",a.arg=e,t.next=n,i&&(t.method="next",t.arg=void 0),!!i}for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r],a=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),c=n.call(o,"finallyLoc");if(s&&c){if(this.prev<o.catchLoc)return i(o.catchLoc,!0);if(this.prev<o.finallyLoc)return i(o.finallyLoc)}else if(s){if(this.prev<o.catchLoc)return i(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return i(o.finallyLoc)}}}},abrupt:function(e,t){for(var i=this.tryEntries.length-1;i>=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o.finallyLoc,u):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:E(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}(e.exports);try{regeneratorRuntime=i}catch(r){Function("r","regeneratorRuntime = r")(i)}},function(e,t,n){"use strict";t.byteLength=function(e){var t=l(e),n=t[0],i=t[1];return 3*(n+i)/4-i},t.toByteArray=function(e){var t,n,i=l(e),a=i[0],s=i[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,s)),u=0,h=s>0?a-4:a;for(n=0;n<h;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===s&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===s&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,o=[],a=0,s=n-r;a<s;a+=16383)o.push(u(e,a,a+16383>s?s:a+16383));1===r?(t=e[n-1],o.push(i[t>>2]+i[t<<4&63]+"==")):2===r&&(t=(e[n-2]<<8)+e[n-1],o.push(i[t>>10]+i[t>>4&63]+i[t<<2&63]+"="));return o.join("")};for(var i=[],r=[],o="undefined"!==typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=a.length;s<c;++s)i[s]=a[s],r[a.charCodeAt(s)]=s;function l(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function u(e,t,n){for(var r,o,a=[],s=t;s<n;s+=3)r=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(i[(o=r)>>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,i,r){var o,a,s=8*r-i-1,c=(1<<s)-1,l=c>>1,u=-7,h=n?r-1:0,d=n?-1:1,f=e[t+h];for(h+=d,o=f&(1<<-u)-1,f>>=-u,u+=s;u>0;o=256*o+e[t+h],h+=d,u-=8);for(a=o&(1<<-u)-1,o>>=-u,u+=i;u>0;a=256*a+e[t+h],h+=d,u-=8);if(0===o)o=1-l;else{if(o===c)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=l}return(f?-1:1)*a*Math.pow(2,o-i)},t.write=function(e,t,n,i,r,o){var a,s,c,l=8*o-r-1,u=(1<<l)-1,h=u>>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,p=i?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+h>=1?d/c:d*Math.pow(2,1-h))*c>=2&&(a++,c/=2),a+h>=u?(s=0,a=u):a+h>=1?(s=(t*c-1)*Math.pow(2,r),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,r),a=0));r>=8;e[n+f]=255&s,f+=p,s/=256,r-=8);for(a=a<<r|s,l+=r;l>0;e[n+f]=255&a,f+=p,a/=256,l-=8);e[n+f-p]|=128*m}},function(e,t,n){(function(e,i){var r;!function(o){t&&t.nodeType,e&&e.nodeType;var a="object"==typeof i&&i;a.global!==a&&a.window!==a&&a.self;var s,c=2147483647,l=/^xn--/,u=/[^\x20-\x7E]/,h=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},f=Math.floor,p=String.fromCharCode;function m(e){throw new RangeError(d[e])}function g(e,t){for(var n=e.length,i=[];n--;)i[n]=t(e[n]);return i}function v(e,t){var n=e.split("@"),i="";return n.length>1&&(i=n[0]+"@",e=n[1]),i+g((e=e.replace(h,".")).split("."),t).join(".")}function _(e){for(var t,n,i=[],r=0,o=e.length;r<o;)(t=e.charCodeAt(r++))>=55296&&t<=56319&&r<o?56320==(64512&(n=e.charCodeAt(r++)))?i.push(((1023&t)<<10)+(1023&n)+65536):(i.push(t),r--):i.push(t);return i}function b(e){return g(e,(function(e){var t="";return e>65535&&(t+=p((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=p(e)})).join("")}function y(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,n){var i=0;for(e=n?f(e/700):e>>1,e+=f(e/t);e>455;i+=36)e=f(e/35);return f(i+36*e/(e+38))}function O(e){var t,n,i,r,o,a,s,l,u,h,d,p=[],g=e.length,v=0,_=128,y=72;for((n=e.lastIndexOf("-"))<0&&(n=0),i=0;i<n;++i)e.charCodeAt(i)>=128&&m("not-basic"),p.push(e.charCodeAt(i));for(r=n>0?n+1:0;r<g;){for(o=v,a=1,s=36;r>=g&&m("invalid-input"),((l=(d=e.charCodeAt(r++))-48<10?d-22:d-65<26?d-65:d-97<26?d-97:36)>=36||l>f((c-v)/a))&&m("overflow"),v+=l*a,!(l<(u=s<=y?1:s>=y+26?26:s-y));s+=36)a>f(c/(h=36-u))&&m("overflow"),a*=h;y=w(v-o,t=p.length+1,0==o),f(v/t)>c-_&&m("overflow"),_+=f(v/t),v%=t,p.splice(v++,0,_)}return b(p)}function C(e){var t,n,i,r,o,a,s,l,u,h,d,g,v,b,O,C=[];for(g=(e=_(e)).length,t=128,n=0,o=72,a=0;a<g;++a)(d=e[a])<128&&C.push(p(d));for(i=r=C.length,r&&C.push("-");i<g;){for(s=c,a=0;a<g;++a)(d=e[a])>=t&&d<s&&(s=d);for(s-t>f((c-n)/(v=i+1))&&m("overflow"),n+=(s-t)*v,t=s,a=0;a<g;++a)if((d=e[a])<t&&++n>c&&m("overflow"),d==t){for(l=n,u=36;!(l<(h=u<=o?1:u>=o+26?26:u-o));u+=36)O=l-h,b=36-h,C.push(p(y(h+O%b,0))),l=f(O/b);C.push(p(y(l,0))),o=w(n,v,i==r),n=0,++i}++n,++t}return C.join("")}s={version:"1.4.1",ucs2:{decode:_,encode:b},decode:O,encode:C,toASCII:function(e){return v(e,(function(e){return u.test(e)?"xn--"+C(e):e}))},toUnicode:function(e){return v(e,(function(e){return l.test(e)?O(e.slice(4).toLowerCase()):e}))}},void 0===(r=function(){return s}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(139)(e),n(55))},function(e,t,n){"use strict";e.exports={isString:function(e){return"string"===typeof e},isObject:function(e){return"object"===typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(446),t.encode=t.stringify=n(447)},function(e,t,n){"use strict";function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,o){t=t||"&",n=n||"=";var a={};if("string"!==typeof e||0===e.length)return a;var s=/\+/g;e=e.split(t);var c=1e3;o&&"number"===typeof o.maxKeys&&(c=o.maxKeys);var l=e.length;c>0&&l>c&&(l=c);for(var u=0;u<l;++u){var h,d,f,p,m=e[u].replace(s,"%20"),g=m.indexOf(n);g>=0?(h=m.substr(0,g),d=m.substr(g+1)):(h=m,d=""),f=decodeURIComponent(h),p=decodeURIComponent(d),i(a,f)?r(a[f])?a[f].push(p):a[f]=[a[f],p]:a[f]=p}return a};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";var i=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,s){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"===typeof e?o(a(e),(function(a){var s=encodeURIComponent(i(a))+n;return r(e[a])?o(e[a],(function(e){return s+encodeURIComponent(i(e))})).join(t):s+encodeURIComponent(i(e[a]))})).join(t):s?encodeURIComponent(i(s))+n+encodeURIComponent(i(e)):""};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function o(e,t){if(e.map)return e.map(t);for(var n=[],i=0;i<e.length;i++)n.push(t(e[i],i));return n}var a=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},function(e,t,n){var i=n(258),r=n(217),o=e.exports;for(var a in i)i.hasOwnProperty(a)&&(o[a]=i[a]);function s(e){if("string"===typeof e&&(e=r.parse(e)),e.protocol||(e.protocol="https:"),"https:"!==e.protocol)throw new Error('Protocol "'+e.protocol+'" not supported. Expected "https:"');return e}o.request=function(e,t){return e=s(e),i.request.call(this,e,t)},o.get=function(e,t){return e=s(e),i.get.call(this,e,t)}},function(e,t,n){(function(t,i,r){var o=n(259),a=n(104),s=n(260),c=n(140),l=n(458),u=s.IncomingMessage,h=s.readyStates;var d=e.exports=function(e){var n,i=this;c.Writable.call(i),i._opts=e,i._body=[],i._headers={},e.auth&&i.setHeader("Authorization","Basic "+new t(e.auth).toString("base64")),Object.keys(e.headers).forEach((function(t){i.setHeader(t,e.headers[t])}));var r=!0;if("disable-fetch"===e.mode||"requestTimeout"in e&&!o.abortController)r=!1,n=!0;else if("prefer-streaming"===e.mode)n=!1;else if("allow-wrong-content-type"===e.mode)n=!o.overrideMimeType;else{if(e.mode&&"default"!==e.mode&&"prefer-fast"!==e.mode)throw new Error("Invalid value for opts.mode");n=!0}i._mode=function(e,t){return o.fetch&&t?"fetch":o.mozchunkedarraybuffer?"moz-chunked-arraybuffer":o.msstream?"ms-stream":o.arraybuffer&&e?"arraybuffer":o.vbArray&&e?"text:vbarray":"text"}(n,r),i._fetchTimer=null,i.on("finish",(function(){i._onFinish()}))};a(d,c.Writable),d.prototype.setHeader=function(e,t){var n=e.toLowerCase();-1===f.indexOf(n)&&(this._headers[n]={name:e,value:t})},d.prototype.getHeader=function(e){var t=this._headers[e.toLowerCase()];return t?t.value:null},d.prototype.removeHeader=function(e){delete this._headers[e.toLowerCase()]},d.prototype._onFinish=function(){var e=this;if(!e._destroyed){var n=e._opts,a=e._headers,s=null;"GET"!==n.method&&"HEAD"!==n.method&&(s=o.arraybuffer?l(t.concat(e._body)):o.blobConstructor?new i.Blob(e._body.map((function(e){return l(e)})),{type:(a["content-type"]||{}).value||""}):t.concat(e._body).toString());var c=[];if(Object.keys(a).forEach((function(e){var t=a[e].name,n=a[e].value;Array.isArray(n)?n.forEach((function(e){c.push([t,e])})):c.push([t,n])})),"fetch"===e._mode){var u=null;if(o.abortController){var d=new AbortController;u=d.signal,e._fetchAbortController=d,"requestTimeout"in n&&0!==n.requestTimeout&&(e._fetchTimer=i.setTimeout((function(){e.emit("requestTimeout"),e._fetchAbortController&&e._fetchAbortController.abort()}),n.requestTimeout))}i.fetch(e._opts.url,{method:e._opts.method,headers:c,body:s||void 0,mode:"cors",credentials:n.withCredentials?"include":"same-origin",signal:u}).then((function(t){e._fetchResponse=t,e._connect()}),(function(t){i.clearTimeout(e._fetchTimer),e._destroyed||e.emit("error",t)}))}else{var f=e._xhr=new i.XMLHttpRequest;try{f.open(e._opts.method,e._opts.url,!0)}catch(p){return void r.nextTick((function(){e.emit("error",p)}))}"responseType"in f&&(f.responseType=e._mode.split(":")[0]),"withCredentials"in f&&(f.withCredentials=!!n.withCredentials),"text"===e._mode&&"overrideMimeType"in f&&f.overrideMimeType("text/plain; charset=x-user-defined"),"requestTimeout"in n&&(f.timeout=n.requestTimeout,f.ontimeout=function(){e.emit("requestTimeout")}),c.forEach((function(e){f.setRequestHeader(e[0],e[1])})),e._response=null,f.onreadystatechange=function(){switch(f.readyState){case h.LOADING:case h.DONE:e._onXHRProgress()}},"moz-chunked-arraybuffer"===e._mode&&(f.onprogress=function(){e._onXHRProgress()}),f.onerror=function(){e._destroyed||e.emit("error",new Error("XHR error"))};try{f.send(s)}catch(p){return void r.nextTick((function(){e.emit("error",p)}))}}}},d.prototype._onXHRProgress=function(){(function(e){try{var t=e.status;return null!==t&&0!==t}catch(n){return!1}})(this._xhr)&&!this._destroyed&&(this._response||this._connect(),this._response._onXHRProgress())},d.prototype._connect=function(){var e=this;e._destroyed||(e._response=new u(e._xhr,e._fetchResponse,e._mode,e._fetchTimer),e._response.on("error",(function(t){e.emit("error",t)})),e.emit("response",e._response))},d.prototype._write=function(e,t,n){this._body.push(e),n()},d.prototype.abort=d.prototype.destroy=function(){this._destroyed=!0,i.clearTimeout(this._fetchTimer),this._response&&(this._response._destroyed=!0),this._xhr?this._xhr.abort():this._fetchAbortController&&this._fetchAbortController.abort()},d.prototype.end=function(e,t,n){"function"===typeof e&&(n=e,e=void 0),c.Writable.prototype.end.call(this,e,t,n)},d.prototype.flushHeaders=function(){},d.prototype.setTimeout=function(){},d.prototype.setNoDelay=function(){},d.prototype.setSocketKeepAlive=function(){};var f=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","via"]}).call(this,n(84).Buffer,n(55),n(85))},,function(e,t,n){"use strict";var i=n(219).Buffer,r=n(452);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var t,n,r,o=i.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,n=o,r=s,t.copy(n,r),s+=a.data.length,a=a.next;return o},e}(),r&&r.inspect&&r.inspect.custom&&(e.exports.prototype[r.inspect.custom]=function(){var e=r.inspect({length:this.length});return this.constructor.name+" "+e})},,function(e,t,n){(function(e){var i="undefined"!==typeof e&&e||"undefined"!==typeof self&&self||window,r=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(r.call(setTimeout,i,arguments),clearTimeout)},t.setInterval=function(){return new o(r.call(setInterval,i,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(i,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(454),t.setImmediate="undefined"!==typeof self&&self.setImmediate||"undefined"!==typeof e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!==typeof self&&self.clearImmediate||"undefined"!==typeof e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(55))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var i,r=1,o={},a=!1,s=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,"[object process]"==={}.toString.call(e.process)?i=function(e){t.nextTick((function(){u(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?function(){var t="setImmediate$"+Math.random()+"$",n=function(n){n.source===e&&"string"===typeof n.data&&0===n.data.indexOf(t)&&u(+n.data.slice(t.length))};e.addEventListener?e.addEventListener("message",n,!1):e.attachEvent("onmessage",n),i=function(n){e.postMessage(t+n,"*")}}():e.MessageChannel?function(){var e=new MessageChannel;e.port1.onmessage=function(e){u(e.data)},i=function(t){e.port2.postMessage(t)}}():s&&"onreadystatechange"in s.createElement("script")?function(){var e=s.documentElement;i=function(t){var n=s.createElement("script");n.onreadystatechange=function(){u(t),n.onreadystatechange=null,e.removeChild(n),n=null},e.appendChild(n)}}():i=function(e){setTimeout(u,0,e)},c.setImmediate=function(e){"function"!==typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var a={callback:e,args:t};return o[r]=a,i(r),r++},c.clearImmediate=l}function l(e){delete o[e]}function u(e){if(a)setTimeout(u,0,e);else{var t=o[e];if(t){a=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{l(e),a=!1}}}}}("undefined"===typeof self?"undefined"===typeof e?this:e:self)}).call(this,n(55),n(85))},function(e,t,n){(function(t){function n(e){try{if(!t.localStorage)return!1}catch(i){return!1}var n=t.localStorage[e];return null!=n&&"true"===String(n).toLowerCase()}e.exports=function(e,t){if(n("noDeprecation"))return e;var i=!1;return function(){if(!i){if(n("throwDeprecation"))throw new Error(t);n("traceDeprecation")?console.trace(t):console.warn(t),i=!0}return e.apply(this,arguments)}}}).call(this,n(55))},function(e,t,n){var i=n(84),r=i.Buffer;function o(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(o(i,t),t.Buffer=a),a.prototype=Object.create(r.prototype),o(r,a),a.from=function(e,t,n){if("number"===typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},a.alloc=function(e,t,n){if("number"!==typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"===typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},a.allocUnsafe=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return r(e)},a.allocUnsafeSlow=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}},function(e,t,n){"use strict";e.exports=o;var i=n(265),r=Object.create(n(141));function o(e){if(!(this instanceof o))return new o(e);i.call(this,e)}r.inherits=n(104),r.inherits(o,i),o.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){var i=n(84).Buffer;e.exports=function(e){if(e instanceof Uint8Array){if(0===e.byteOffset&&e.byteLength===e.buffer.byteLength)return e.buffer;if("function"===typeof e.buffer.slice)return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}if(i.isBuffer(e)){for(var t=new Uint8Array(e.length),n=e.length,r=0;r<n;r++)t[r]=e[r];return t.buffer}throw new Error("Argument must be a Buffer")}},function(e,t){e.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}},function(e,t,n){"use strict";(function(e){var i=n(84).Buffer,r=n(461).Transform,o=n(466),a=n(268),s=n(267).ok,c=n(84).kMaxLength,l="Cannot create final Buffer. It would be larger than 0x"+c.toString(16)+" bytes";o.Z_MIN_WINDOWBITS=8,o.Z_MAX_WINDOWBITS=15,o.Z_DEFAULT_WINDOWBITS=15,o.Z_MIN_CHUNK=64,o.Z_MAX_CHUNK=1/0,o.Z_DEFAULT_CHUNK=16384,o.Z_MIN_MEMLEVEL=1,o.Z_MAX_MEMLEVEL=9,o.Z_DEFAULT_MEMLEVEL=8,o.Z_MIN_LEVEL=-1,o.Z_MAX_LEVEL=9,o.Z_DEFAULT_LEVEL=o.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(o),h=0;h<u.length;h++){var d=u[h];d.match(/^Z/)&&Object.defineProperty(t,d,{enumerable:!0,value:o[d],writable:!1})}for(var f={Z_OK:o.Z_OK,Z_STREAM_END:o.Z_STREAM_END,Z_NEED_DICT:o.Z_NEED_DICT,Z_ERRNO:o.Z_ERRNO,Z_STREAM_ERROR:o.Z_STREAM_ERROR,Z_DATA_ERROR:o.Z_DATA_ERROR,Z_MEM_ERROR:o.Z_MEM_ERROR,Z_BUF_ERROR:o.Z_BUF_ERROR,Z_VERSION_ERROR:o.Z_VERSION_ERROR},p=Object.keys(f),m=0;m<p.length;m++){var g=p[m];f[f[g]]=g}function v(e,t,n){var r=[],o=0;function a(){for(var t;null!==(t=e.read());)r.push(t),o+=t.length;e.once("readable",a)}function s(){var t,a=null;o>=c?a=new RangeError(l):t=i.concat(r,o),r=[],e.close(),n(a,t)}e.on("error",(function(t){e.removeListener("end",s),e.removeListener("readable",a),n(t)})),e.on("end",s),e.end(t),a()}function _(e,t){if("string"===typeof t&&(t=i.from(t)),!i.isBuffer(t))throw new TypeError("Not a string or buffer");var n=e._finishFlushFlag;return e._processChunk(t,n)}function b(e){if(!(this instanceof b))return new b(e);T.call(this,e,o.DEFLATE)}function y(e){if(!(this instanceof y))return new y(e);T.call(this,e,o.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);T.call(this,e,o.GZIP)}function O(e){if(!(this instanceof O))return new O(e);T.call(this,e,o.GUNZIP)}function C(e){if(!(this instanceof C))return new C(e);T.call(this,e,o.DEFLATERAW)}function E(e){if(!(this instanceof E))return new E(e);T.call(this,e,o.INFLATERAW)}function A(e){if(!(this instanceof A))return new A(e);T.call(this,e,o.UNZIP)}function x(e){return e===o.Z_NO_FLUSH||e===o.Z_PARTIAL_FLUSH||e===o.Z_SYNC_FLUSH||e===o.Z_FULL_FLUSH||e===o.Z_FINISH||e===o.Z_BLOCK}function T(e,n){var a=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,r.call(this,e),e.flush&&!x(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!x(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||o.Z_NO_FLUSH,this._finishFlushFlag="undefined"!==typeof e.finishFlush?e.finishFlush:o.Z_FINISH,e.chunkSize&&(e.chunkSize<t.Z_MIN_CHUNK||e.chunkSize>t.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBits<t.Z_MIN_WINDOWBITS||e.windowBits>t.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.level<t.Z_MIN_LEVEL||e.level>t.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevel<t.Z_MIN_MEMLEVEL||e.memLevel>t.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!i.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new o.Zlib(n);var s=this;this._hadError=!1,this._handle.onerror=function(e,n){S(s),s._hadError=!0;var i=new Error(e);i.errno=n,i.code=t.codes[n],s.emit("error",i)};var c=t.Z_DEFAULT_COMPRESSION;"number"===typeof e.level&&(c=e.level);var l=t.Z_DEFAULT_STRATEGY;"number"===typeof e.strategy&&(l=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,c,e.memLevel||t.Z_DEFAULT_MEMLEVEL,l,e.dictionary),this._buffer=i.allocUnsafe(this._chunkSize),this._offset=0,this._level=c,this._strategy=l,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!a._handle},configurable:!0,enumerable:!0})}function S(t,n){n&&e.nextTick(n),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(f),writable:!1}),t.Deflate=b,t.Inflate=y,t.Gzip=w,t.Gunzip=O,t.DeflateRaw=C,t.InflateRaw=E,t.Unzip=A,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new y(e)},t.createDeflateRaw=function(e){return new C(e)},t.createInflateRaw=function(e){return new E(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new O(e)},t.createUnzip=function(e){return new A(e)},t.deflate=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new b(t),e,n)},t.deflateSync=function(e,t){return _(new b(t),e)},t.gzip=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new w(t),e,n)},t.gzipSync=function(e,t){return _(new w(t),e)},t.deflateRaw=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new C(t),e,n)},t.deflateRawSync=function(e,t){return _(new C(t),e)},t.unzip=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new A(t),e,n)},t.unzipSync=function(e,t){return _(new A(t),e)},t.inflate=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new y(t),e,n)},t.inflateSync=function(e,t){return _(new y(t),e)},t.gunzip=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new O(t),e,n)},t.gunzipSync=function(e,t){return _(new O(t),e)},t.inflateRaw=function(e,t,n){return"function"===typeof t&&(n=t,t={}),v(new E(t),e,n)},t.inflateRawSync=function(e,t){return _(new E(t),e)},a.inherits(T,r),T.prototype.params=function(n,i,r){if(n<t.Z_MIN_LEVEL||n>t.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+n);if(i!=t.Z_FILTERED&&i!=t.Z_HUFFMAN_ONLY&&i!=t.Z_RLE&&i!=t.Z_FIXED&&i!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+i);if(this._level!==n||this._strategy!==i){var a=this;this.flush(o.Z_SYNC_FLUSH,(function(){s(a._handle,"zlib binding closed"),a._handle.params(n,i),a._hadError||(a._level=n,a._strategy=i,r&&r())}))}else e.nextTick(r)},T.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},T.prototype._flush=function(e){this._transform(i.alloc(0),"",e)},T.prototype.flush=function(t,n){var r=this,a=this._writableState;("function"===typeof t||void 0===t&&!n)&&(n=t,t=o.Z_FULL_FLUSH),a.ended?n&&e.nextTick(n):a.ending?n&&this.once("end",n):a.needDrain?n&&this.once("drain",(function(){return r.flush(t,n)})):(this._flushFlag=t,this.write(i.alloc(0),"",n))},T.prototype.close=function(t){S(this,t),e.nextTick(D,this)},T.prototype._transform=function(e,t,n){var r,a=this._writableState,s=(a.ending||a.ended)&&(!e||a.length===e.length);return null===e||i.isBuffer(e)?this._handle?(s?r=this._finishFlushFlag:(r=this._flushFlag,e.length>=a.length&&(this._flushFlag=this._opts.flush||o.Z_NO_FLUSH)),void this._processChunk(e,r,n)):n(new Error("zlib binding closed")):n(new Error("invalid input"))},T.prototype._processChunk=function(e,t,n){var r=e&&e.length,o=this._chunkSize-this._offset,a=0,u=this,h="function"===typeof n;if(!h){var d,f=[],p=0;this.on("error",(function(e){d=e})),s(this._handle,"zlib binding closed");do{var m=this._handle.writeSync(t,e,a,r,this._buffer,this._offset,o)}while(!this._hadError&&_(m[0],m[1]));if(this._hadError)throw d;if(p>=c)throw S(this),new RangeError(l);var g=i.concat(f,p);return S(this),g}s(this._handle,"zlib binding closed");var v=this._handle.write(t,e,a,r,this._buffer,this._offset,o);function _(c,l){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=o-l;if(s(d>=0,"have should not go down"),d>0){var m=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(m):(f.push(m),p+=m.length)}if((0===l||u._offset>=u._chunkSize)&&(o=u._chunkSize,u._offset=0,u._buffer=i.allocUnsafe(u._chunkSize)),0===l){if(a+=r-c,r=c,!h)return!0;var g=u._handle.write(t,e,a,r,u._buffer,u._offset,u._chunkSize);return g.callback=_,void(g.buffer=e)}if(!h)return!1;n()}}v.buffer=e,v.callback=_},a.inherits(b,T),a.inherits(y,T),a.inherits(w,T),a.inherits(O,T),a.inherits(C,T),a.inherits(E,T),a.inherits(A,T)}).call(this,n(85))},function(e,t,n){e.exports=r;var i=n(218).EventEmitter;function r(){i.call(this)}n(104)(r,i),r.Readable=n(140),r.Writable=n(462),r.Duplex=n(463),r.Transform=n(464),r.PassThrough=n(465),r.Stream=r,r.prototype.pipe=function(e,t){var n=this;function r(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",r),e.on("drain",o),e._isStdio||t&&!1===t.end||(n.on("end",s),n.on("close",c));var a=!1;function s(){a||(a=!0,e.end())}function c(){a||(a=!0,"function"===typeof e.destroy&&e.destroy())}function l(e){if(u(),0===i.listenerCount(this,"error"))throw e}function u(){n.removeListener("data",r),e.removeListener("drain",o),n.removeListener("end",s),n.removeListener("close",c),n.removeListener("error",l),e.removeListener("error",l),n.removeListener("end",u),n.removeListener("close",u),e.removeListener("close",u)}return n.on("error",l),e.on("error",l),n.on("end",u),n.on("close",u),e.on("close",u),e.emit("pipe",n),e}},function(e,t,n){e.exports=n(220)},function(e,t,n){e.exports=n(107)},function(e,t,n){e.exports=n(140).Transform},function(e,t,n){e.exports=n(140).PassThrough},function(e,t,n){"use strict";(function(e,i){var r=n(267),o=n(469),a=n(470),s=n(473),c=n(476);for(var l in c)t[l]=c[l];t.NONE=0,t.DEFLATE=1,t.INFLATE=2,t.GZIP=3,t.GUNZIP=4,t.DEFLATERAW=5,t.INFLATERAW=6,t.UNZIP=7;function u(e){if("number"!==typeof e||e<t.DEFLATE||e>t.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,r(this.init_done,"close before init"),r(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?a.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,n,i,r,o,a){return this._write(!0,e,t,n,i,r,o,a)},u.prototype.writeSync=function(e,t,n,i,r,o,a){return this._write(!1,e,t,n,i,r,o,a)},u.prototype._write=function(n,o,a,s,c,l,u,h){if(r.equal(arguments.length,8),r(this.init_done,"write before init"),r(this.mode!==t.NONE,"already finalized"),r.equal(!1,this.write_in_progress,"write already in progress"),r.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,r.equal(!1,void 0===o,"must provide flush value"),this.write_in_progress=!0,o!==t.Z_NO_FLUSH&&o!==t.Z_PARTIAL_FLUSH&&o!==t.Z_SYNC_FLUSH&&o!==t.Z_FULL_FLUSH&&o!==t.Z_FINISH&&o!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==a&&(a=e.alloc(0),c=0,s=0),this.strm.avail_in=c,this.strm.input=a,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=l,this.strm.next_out=u,this.flush=o,!n)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return i.nextTick((function(){d._process(),d._after()})),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=a.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,n,i,o,a){r(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),r(e>=8&&e<=15,"invalid windowBits"),r(n>=-1&&n<=9,"invalid compression level"),r(i>=1&&i<=9,"invalid memlevel"),r(o===t.Z_FILTERED||o===t.Z_HUFFMAN_ONLY||o===t.Z_RLE||o===t.Z_FIXED||o===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(n,e,i,o,a),this._setDictionary()},u.prototype.params=function(){throw new Error("deflateParams Not supported")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,n,i,r,c){switch(this.level=e,this.windowBits=n,this.memLevel=i,this.strategy=r,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new o,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=a.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=c,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=a.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=a.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=u}).call(this,n(84).Buffer,n(85))},function(e,t){e.exports=function(e){return e&&"object"===typeof e&&"function"===typeof e.copy&&"function"===typeof e.fill&&"function"===typeof e.readUInt8}},function(e,t){"function"===typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},function(e,t,n){"use strict";var i,r=n(163),o=n(471),a=n(269),s=n(270),c=n(472);function l(e,t){return e.msg=c[t],t}function u(e){return(e<<1)-(e>4?9:0)}function h(e){for(var t=e.length;--t>=0;)e[t]=0}function d(e){var t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(r.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function f(e,t){o._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,d(e.strm)}function p(e,t){e.pending_buf[e.pending++]=t}function m(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function g(e,t,n,i){var o=e.avail_in;return o>i&&(o=i),0===o?0:(e.avail_in-=o,r.arraySet(t,e.input,e.next_in,o,n),1===e.state.wrap?e.adler=a(e.adler,t,o,n):2===e.state.wrap&&(e.adler=s(e.adler,t,o,n)),e.next_in+=o,e.total_in+=o,o)}function v(e,t){var n,i,r=e.max_chain_length,o=e.strstart,a=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,l=e.window,u=e.w_mask,h=e.prev,d=e.strstart+258,f=l[o+a-1],p=l[o+a];e.prev_length>=e.good_match&&(r>>=2),s>e.lookahead&&(s=e.lookahead);do{if(l[(n=t)+a]===p&&l[n+a-1]===f&&l[n]===l[o]&&l[++n]===l[o+1]){o+=2,n++;do{}while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&o<d);if(i=258-(d-o),o=d-258,i>a){if(e.match_start=t,a=i,i>=s)break;f=l[o+a-1],p=l[o+a]}}}while((t=h[t&u])>c&&0!==--r);return a<=e.lookahead?a:e.lookahead}function _(e){var t,n,i,o,a,s=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=s+(s-262)){r.arraySet(e.window,e.window,s,s,0),e.match_start-=s,e.strstart-=s,e.block_start-=s,t=n=e.hash_size;do{i=e.head[--t],e.head[t]=i>=s?i-s:0}while(--n);t=n=s;do{i=e.prev[--t],e.prev[t]=i>=s?i-s:0}while(--n);o+=s}if(0===e.strm.avail_in)break;if(n=g(e.strm,e.window,e.strstart+e.lookahead,o),e.lookahead+=n,e.lookahead+e.insert>=3)for(a=e.strstart-e.insert,e.ins_h=e.window[a],e.ins_h=(e.ins_h<<e.hash_shift^e.window[a+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[a+3-1])&e.hash_mask,e.prev[a&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=a,a++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<262&&0!==e.strm.avail_in)}function b(e,t){for(var n,i;;){if(e.lookahead<262){if(_(e),e.lookahead<262&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==n&&e.strstart-n<=e.w_size-262&&(e.match_length=v(e,n)),e.match_length>=3)if(i=o._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!==--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else i=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(i&&(f(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(f(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(f(e,!1),0===e.strm.avail_out)?1:2}function y(e,t){for(var n,i,r;;){if(e.lookahead<262){if(_(e),e.lookahead<262&&0===t)return 1;if(0===e.lookahead)break}if(n=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==n&&e.prev_length<e.max_lazy_match&&e.strstart-n<=e.w_size-262&&(e.match_length=v(e,n),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,i=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!==--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,i&&(f(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((i=o._tr_tally(e,0,e.window[e.strstart-1]))&&f(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(i=o._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(f(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(f(e,!1),0===e.strm.avail_out)?1:2}function w(e,t,n,i,r){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=i,this.func=r}function O(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new r.Buf16(1146),this.dyn_dtree=new r.Buf16(122),this.bl_tree=new r.Buf16(78),h(this.dyn_ltree),h(this.dyn_dtree),h(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new r.Buf16(16),this.heap=new r.Buf16(573),h(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new r.Buf16(573),h(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function C(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:113,e.adler=2===t.wrap?0:1,t.last_flush=0,o._tr_init(t),0):l(e,-2)}function E(e){var t,n=C(e);return 0===n&&((t=e.state).window_size=2*t.w_size,h(t.head),t.max_lazy_match=i[t.level].max_lazy,t.good_match=i[t.level].good_length,t.nice_match=i[t.level].nice_length,t.max_chain_length=i[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0),n}function A(e,t,n,i,o,a){if(!e)return-2;var s=1;if(-1===t&&(t=6),i<0?(s=0,i=-i):i>15&&(s=2,i-=16),o<1||o>9||8!==n||i<8||i>15||t<0||t>9||a<0||a>4)return l(e,-2);8===i&&(i=9);var c=new O;return e.state=c,c.strm=e,c.wrap=s,c.gzhead=null,c.w_bits=i,c.w_size=1<<c.w_bits,c.w_mask=c.w_size-1,c.hash_bits=o+7,c.hash_size=1<<c.hash_bits,c.hash_mask=c.hash_size-1,c.hash_shift=~~((c.hash_bits+3-1)/3),c.window=new r.Buf8(2*c.w_size),c.head=new r.Buf16(c.hash_size),c.prev=new r.Buf16(c.w_size),c.lit_bufsize=1<<o+6,c.pending_buf_size=4*c.lit_bufsize,c.pending_buf=new r.Buf8(c.pending_buf_size),c.d_buf=1*c.lit_bufsize,c.l_buf=3*c.lit_bufsize,c.level=t,c.strategy=a,c.method=n,E(e)}i=[new w(0,0,0,0,(function(e,t){var n=65535;for(n>e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(_(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+n;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,f(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-262&&(f(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(f(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(f(e,!1),e.strm.avail_out),1)})),new w(4,4,8,4,b),new w(4,5,16,8,b),new w(4,6,32,32,b),new w(4,4,16,16,y),new w(8,16,32,32,y),new w(8,16,128,128,y),new w(8,32,128,256,y),new w(32,128,258,1024,y),new w(32,258,258,4096,y)],t.deflateInit=function(e,t){return A(e,t,8,15,8,0)},t.deflateInit2=A,t.deflateReset=E,t.deflateResetKeep=C,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?-2:(e.state.gzhead=t,0):-2},t.deflate=function(e,t){var n,r,a,c;if(!e||!e.state||t>5||t<0)return e?l(e,-2):-2;if(r=e.state,!e.output||!e.input&&0!==e.avail_in||666===r.status&&4!==t)return l(e,0===e.avail_out?-5:-2);if(r.strm=e,n=r.last_flush,r.last_flush=t,42===r.status)if(2===r.wrap)e.adler=0,p(r,31),p(r,139),p(r,8),r.gzhead?(p(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),p(r,255&r.gzhead.time),p(r,r.gzhead.time>>8&255),p(r,r.gzhead.time>>16&255),p(r,r.gzhead.time>>24&255),p(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),p(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(p(r,255&r.gzhead.extra.length),p(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=s(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(p(r,0),p(r,0),p(r,0),p(r,0),p(r,0),p(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),p(r,3),r.status=113);else{var g=8+(r.w_bits-8<<4)<<8;g|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(g|=32),g+=31-g%31,r.status=113,m(r,g),0!==r.strstart&&(m(r,e.adler>>>16),m(r,65535&e.adler)),e.adler=1}if(69===r.status)if(r.gzhead.extra){for(a=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),d(e),a=r.pending,r.pending!==r.pending_buf_size));)p(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),d(e),a=r.pending,r.pending===r.pending_buf_size)){c=1;break}c=r.gzindex<r.gzhead.name.length?255&r.gzhead.name.charCodeAt(r.gzindex++):0,p(r,c)}while(0!==c);r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),0===c&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){a=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),d(e),a=r.pending,r.pending===r.pending_buf_size)){c=1;break}c=r.gzindex<r.gzhead.comment.length?255&r.gzhead.comment.charCodeAt(r.gzindex++):0,p(r,c)}while(0!==c);r.gzhead.hcrc&&r.pending>a&&(e.adler=s(e.adler,r.pending_buf,r.pending-a,a)),0===c&&(r.status=103)}else r.status=103;if(103===r.status&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&d(e),r.pending+2<=r.pending_buf_size&&(p(r,255&e.adler),p(r,e.adler>>8&255),e.adler=0,r.status=113)):r.status=113),0!==r.pending){if(d(e),0===e.avail_out)return r.last_flush=-1,0}else if(0===e.avail_in&&u(t)<=u(n)&&4!==t)return l(e,-5);if(666===r.status&&0!==e.avail_in)return l(e,-5);if(0!==e.avail_in||0!==r.lookahead||0!==t&&666!==r.status){var v=2===r.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(_(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(f(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(f(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(f(e,!1),0===e.strm.avail_out)?1:2}(r,t):3===r.strategy?function(e,t){for(var n,i,r,a,s=e.window;;){if(e.lookahead<=258){if(_(e),e.lookahead<=258&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(i=s[r=e.strstart-1])===s[++r]&&i===s[++r]&&i===s[++r]){a=e.strstart+258;do{}while(i===s[++r]&&i===s[++r]&&i===s[++r]&&i===s[++r]&&i===s[++r]&&i===s[++r]&&i===s[++r]&&i===s[++r]&&r<a);e.match_length=258-(a-r),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=o._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(f(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(f(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(f(e,!1),0===e.strm.avail_out)?1:2}(r,t):i[r.level].func(r,t);if(3!==v&&4!==v||(r.status=666),1===v||3===v)return 0===e.avail_out&&(r.last_flush=-1),0;if(2===v&&(1===t?o._tr_align(r):5!==t&&(o._tr_stored_block(r,0,0,!1),3===t&&(h(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),d(e),0===e.avail_out))return r.last_flush=-1,0}return 4!==t?0:r.wrap<=0?1:(2===r.wrap?(p(r,255&e.adler),p(r,e.adler>>8&255),p(r,e.adler>>16&255),p(r,e.adler>>24&255),p(r,255&e.total_in),p(r,e.total_in>>8&255),p(r,e.total_in>>16&255),p(r,e.total_in>>24&255)):(m(r,e.adler>>>16),m(r,65535&e.adler)),d(e),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},t.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&103!==t&&113!==t&&666!==t?l(e,-2):(e.state=null,113===t?l(e,-3):0):-2},t.deflateSetDictionary=function(e,t){var n,i,o,s,c,l,u,d,f=t.length;if(!e||!e.state)return-2;if(2===(s=(n=e.state).wrap)||1===s&&42!==n.status||n.lookahead)return-2;for(1===s&&(e.adler=a(e.adler,t,f,0)),n.wrap=0,f>=n.w_size&&(0===s&&(h(n.head),n.strstart=0,n.block_start=0,n.insert=0),d=new r.Buf8(n.w_size),r.arraySet(d,t,f-n.w_size,n.w_size,0),t=d,f=n.w_size),c=e.avail_in,l=e.next_in,u=e.input,e.avail_in=f,e.next_in=0,e.input=t,_(n);n.lookahead>=3;){i=n.strstart,o=n.lookahead-2;do{n.ins_h=(n.ins_h<<n.hash_shift^n.window[i+3-1])&n.hash_mask,n.prev[i&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=i,i++}while(--o);n.strstart=i,n.lookahead=2,_(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=l,e.input=u,e.avail_in=c,n.wrap=s,0},t.deflateInfo="pako deflate (from Nodeca project)"},function(e,t,n){"use strict";var i=n(163);function r(e){for(var t=e.length;--t>=0;)e[t]=0}var o=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],a=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],c=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);r(l);var u=new Array(60);r(u);var h=new Array(512);r(h);var d=new Array(256);r(d);var f=new Array(29);r(f);var p,m,g,v=new Array(30);function _(e,t,n,i,r){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=i,this.max_length=r,this.has_stree=e&&e.length}function b(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function y(e){return e<256?h[e]:h[256+(e>>>7)]}function w(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function O(e,t,n){e.bi_valid>16-n?(e.bi_buf|=t<<e.bi_valid&65535,w(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=n)}function C(e,t,n){O(e,n[2*t],n[2*t+1])}function E(e,t){var n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}function A(e,t,n){var i,r,o=new Array(16),a=0;for(i=1;i<=15;i++)o[i]=a=a+n[i-1]<<1;for(r=0;r<=t;r++){var s=e[2*r+1];0!==s&&(e[2*r]=E(o[s]++,s))}}function x(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function T(e){e.bi_valid>8?w(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function S(e,t,n,i){var r=2*t,o=2*n;return e[r]<e[o]||e[r]===e[o]&&i[t]<=i[n]}function D(e,t,n){for(var i=e.heap[n],r=n<<1;r<=e.heap_len&&(r<e.heap_len&&S(t,e.heap[r+1],e.heap[r],e.depth)&&r++,!S(t,i,e.heap[r],e.depth));)e.heap[n]=e.heap[r],n=r,r<<=1;e.heap[n]=i}function P(e,t,n){var i,r,s,c,l=0;if(0!==e.last_lit)do{i=e.pending_buf[e.d_buf+2*l]<<8|e.pending_buf[e.d_buf+2*l+1],r=e.pending_buf[e.l_buf+l],l++,0===i?C(e,r,t):(C(e,(s=d[r])+256+1,t),0!==(c=o[s])&&O(e,r-=f[s],c),C(e,s=y(--i),n),0!==(c=a[s])&&O(e,i-=v[s],c))}while(l<e.last_lit);C(e,256,t)}function I(e,t){var n,i,r,o=t.dyn_tree,a=t.stat_desc.static_tree,s=t.stat_desc.has_stree,c=t.stat_desc.elems,l=-1;for(e.heap_len=0,e.heap_max=573,n=0;n<c;n++)0!==o[2*n]?(e.heap[++e.heap_len]=l=n,e.depth[n]=0):o[2*n+1]=0;for(;e.heap_len<2;)o[2*(r=e.heap[++e.heap_len]=l<2?++l:0)]=1,e.depth[r]=0,e.opt_len--,s&&(e.static_len-=a[2*r+1]);for(t.max_code=l,n=e.heap_len>>1;n>=1;n--)D(e,o,n);r=c;do{n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],D(e,o,1),i=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=i,o[2*r]=o[2*n]+o[2*i],e.depth[r]=(e.depth[n]>=e.depth[i]?e.depth[n]:e.depth[i])+1,o[2*n+1]=o[2*i+1]=r,e.heap[1]=r++,D(e,o,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,i,r,o,a,s,c=t.dyn_tree,l=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,f=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(o=0;o<=15;o++)e.bl_count[o]=0;for(c[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)(o=c[2*c[2*(i=e.heap[n])+1]+1]+1)>p&&(o=p,m++),c[2*i+1]=o,i>l||(e.bl_count[o]++,a=0,i>=f&&(a=d[i-f]),s=c[2*i],e.opt_len+=s*(o+a),h&&(e.static_len+=s*(u[2*i+1]+a)));if(0!==m){do{for(o=p-1;0===e.bl_count[o];)o--;e.bl_count[o]--,e.bl_count[o+1]+=2,e.bl_count[p]--,m-=2}while(m>0);for(o=p;0!==o;o--)for(i=e.bl_count[o];0!==i;)(r=e.heap[--n])>l||(c[2*r+1]!==o&&(e.opt_len+=(o-c[2*r+1])*c[2*r],c[2*r+1]=o),i--)}}(e,t),A(o,l,e.bl_count)}function M(e,t,n){var i,r,o=-1,a=t[1],s=0,c=7,l=4;for(0===a&&(c=138,l=3),t[2*(n+1)+1]=65535,i=0;i<=n;i++)r=a,a=t[2*(i+1)+1],++s<c&&r===a||(s<l?e.bl_tree[2*r]+=s:0!==r?(r!==o&&e.bl_tree[2*r]++,e.bl_tree[32]++):s<=10?e.bl_tree[34]++:e.bl_tree[36]++,s=0,o=r,0===a?(c=138,l=3):r===a?(c=6,l=3):(c=7,l=4))}function R(e,t,n){var i,r,o=-1,a=t[1],s=0,c=7,l=4;for(0===a&&(c=138,l=3),i=0;i<=n;i++)if(r=a,a=t[2*(i+1)+1],!(++s<c&&r===a)){if(s<l)do{C(e,r,e.bl_tree)}while(0!==--s);else 0!==r?(r!==o&&(C(e,r,e.bl_tree),s--),C(e,16,e.bl_tree),O(e,s-3,2)):s<=10?(C(e,17,e.bl_tree),O(e,s-3,3)):(C(e,18,e.bl_tree),O(e,s-11,7));s=0,o=r,0===a?(c=138,l=3):r===a?(c=6,l=3):(c=7,l=4)}}r(v);var L=!1;function j(e,t,n,r){O(e,0+(r?1:0),3),function(e,t,n,r){T(e),r&&(w(e,n),w(e,~n)),i.arraySet(e.pending_buf,e.window,t,n,e.pending),e.pending+=n}(e,t,n,!0)}t._tr_init=function(e){L||(!function(){var e,t,n,i,r,c=new Array(16);for(n=0,i=0;i<28;i++)for(f[i]=n,e=0;e<1<<o[i];e++)d[n++]=i;for(d[n-1]=i,r=0,i=0;i<16;i++)for(v[i]=r,e=0;e<1<<a[i];e++)h[r++]=i;for(r>>=7;i<30;i++)for(v[i]=r<<7,e=0;e<1<<a[i]-7;e++)h[256+r++]=i;for(t=0;t<=15;t++)c[t]=0;for(e=0;e<=143;)l[2*e+1]=8,e++,c[8]++;for(;e<=255;)l[2*e+1]=9,e++,c[9]++;for(;e<=279;)l[2*e+1]=7,e++,c[7]++;for(;e<=287;)l[2*e+1]=8,e++,c[8]++;for(A(l,287,c),e=0;e<30;e++)u[2*e+1]=5,u[2*e]=E(e,5);p=new _(l,o,257,286,15),m=new _(u,a,0,30,15),g=new _(new Array(0),s,0,19,7)}(),L=!0),e.l_desc=new b(e.dyn_ltree,p),e.d_desc=new b(e.dyn_dtree,m),e.bl_desc=new b(e.bl_tree,g),e.bi_buf=0,e.bi_valid=0,x(e)},t._tr_stored_block=j,t._tr_flush_block=function(e,t,n,i){var r,o,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),I(e,e.l_desc),I(e,e.d_desc),a=function(e){var t;for(M(e,e.dyn_ltree,e.l_desc.max_code),M(e,e.dyn_dtree,e.d_desc.max_code),I(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*c[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),r=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=n+5,n+4<=r&&-1!==t?j(e,t,n,i):4===e.strategy||o===r?(O(e,2+(i?1:0),3),P(e,l,u)):(O(e,4+(i?1:0),3),function(e,t,n,i){var r;for(O(e,t-257,5),O(e,n-1,5),O(e,i-4,4),r=0;r<i;r++)O(e,e.bl_tree[2*c[r]+1],3);R(e,e.dyn_ltree,t-1),R(e,e.dyn_dtree,n-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),P(e,e.dyn_ltree,e.dyn_dtree)),x(e),i&&T(e)},t._tr_tally=function(e,t,n){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(d[n]+256+1)]++,e.dyn_dtree[2*y(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){O(e,2,3),C(e,256,l),function(e){16===e.bi_valid?(w(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,n){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},function(e,t,n){"use strict";var i=n(163),r=n(269),o=n(270),a=n(474),s=n(475);function c(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function l(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(852),t.distcode=t.distdyn=new i.Buf32(592),t.sane=1,t.back=-1,0):-2}function h(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,u(e)):-2}function d(e,t){var n,i;return e&&e.state?(i=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?-2:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=n,i.wbits=t,h(e))):-2}function f(e,t){var n,i;return e?(i=new l,e.state=i,i.window=null,0!==(n=d(e,t))&&(e.state=null),n):-2}var p,m,g=!0;function v(e){if(g){var t;for(p=new i.Buf32(512),m=new i.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(1,e.lens,0,288,p,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,m,0,e.work,{bits:5}),g=!1}e.lencode=p,e.lenbits=9,e.distcode=m,e.distbits=5}function _(e,t,n,r){var o,a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new i.Buf8(a.wsize)),r>=a.wsize?(i.arraySet(a.window,t,n-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((o=a.wsize-a.wnext)>r&&(o=r),i.arraySet(a.window,t,n-r,o,a.wnext),(r-=o)?(i.arraySet(a.window,t,n-r,r,0),a.wnext=r,a.whave=a.wsize):(a.wnext+=o,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=o))),0}t.inflateReset=h,t.inflateReset2=d,t.inflateResetKeep=u,t.inflateInit=function(e){return f(e,15)},t.inflateInit2=f,t.inflate=function(e,t){var n,l,u,h,d,f,p,m,g,b,y,w,O,C,E,A,x,T,S,D,P,I,M,R,L=0,j=new i.Buf8(4),F=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return-2;12===(n=e.state).mode&&(n.mode=13),d=e.next_out,u=e.output,p=e.avail_out,h=e.next_in,l=e.input,f=e.avail_in,m=n.hold,g=n.bits,b=f,y=p,I=0;e:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;g<16;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(2&n.wrap&&35615===m){n.check=0,j[0]=255&m,j[1]=m>>>8&255,n.check=o(n.check,j,2,0),m=0,g=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&m)<<8)+(m>>8))%31){e.msg="incorrect header check",n.mode=30;break}if(8!==(15&m)){e.msg="unknown compression method",n.mode=30;break}if(g-=4,P=8+(15&(m>>>=4)),0===n.wbits)n.wbits=P;else if(P>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<<P,e.adler=n.check=1,n.mode=512&m?10:12,m=0,g=0;break;case 2:for(;g<16;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(n.flags=m,8!==(255&n.flags)){e.msg="unknown compression method",n.mode=30;break}if(57344&n.flags){e.msg="unknown header flags set",n.mode=30;break}n.head&&(n.head.text=m>>8&1),512&n.flags&&(j[0]=255&m,j[1]=m>>>8&255,n.check=o(n.check,j,2,0)),m=0,g=0,n.mode=3;case 3:for(;g<32;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.head&&(n.head.time=m),512&n.flags&&(j[0]=255&m,j[1]=m>>>8&255,j[2]=m>>>16&255,j[3]=m>>>24&255,n.check=o(n.check,j,4,0)),m=0,g=0,n.mode=4;case 4:for(;g<16;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.head&&(n.head.xflags=255&m,n.head.os=m>>8),512&n.flags&&(j[0]=255&m,j[1]=m>>>8&255,n.check=o(n.check,j,2,0)),m=0,g=0,n.mode=5;case 5:if(1024&n.flags){for(;g<16;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.length=m,n.head&&(n.head.extra_len=m),512&n.flags&&(j[0]=255&m,j[1]=m>>>8&255,n.check=o(n.check,j,2,0)),m=0,g=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((w=n.length)>f&&(w=f),w&&(n.head&&(P=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),i.arraySet(n.head.extra,l,h,w,P)),512&n.flags&&(n.check=o(n.check,l,w,h)),f-=w,h+=w,n.length-=w),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===f)break e;w=0;do{P=l[h+w++],n.head&&P&&n.length<65536&&(n.head.name+=String.fromCharCode(P))}while(P&&w<f);if(512&n.flags&&(n.check=o(n.check,l,w,h)),f-=w,h+=w,P)break e}else n.head&&(n.head.name=null);n.length=0,n.mode=8;case 8:if(4096&n.flags){if(0===f)break e;w=0;do{P=l[h+w++],n.head&&P&&n.length<65536&&(n.head.comment+=String.fromCharCode(P))}while(P&&w<f);if(512&n.flags&&(n.check=o(n.check,l,w,h)),f-=w,h+=w,P)break e}else n.head&&(n.head.comment=null);n.mode=9;case 9:if(512&n.flags){for(;g<16;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(m!==(65535&n.check)){e.msg="header crc mismatch",n.mode=30;break}m=0,g=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;g<32;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}e.adler=n.check=c(m),m=0,g=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=d,e.avail_out=p,e.next_in=h,e.avail_in=f,n.hold=m,n.bits=g,2;e.adler=n.check=1,n.mode=12;case 12:if(5===t||6===t)break e;case 13:if(n.last){m>>>=7&g,g-=7&g,n.mode=27;break}for(;g<3;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}switch(n.last=1&m,g-=1,3&(m>>>=1)){case 0:n.mode=14;break;case 1:if(v(n),n.mode=20,6===t){m>>>=2,g-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}m>>>=2,g-=2;break;case 14:for(m>>>=7&g,g-=7&g;g<32;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if((65535&m)!==(m>>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&m,m=0,g=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(w=n.length){if(w>f&&(w=f),w>p&&(w=p),0===w)break e;i.arraySet(u,l,h,w,d),f-=w,h+=w,p-=w,d+=w,n.length-=w;break}n.mode=12;break;case 17:for(;g<14;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(n.nlen=257+(31&m),m>>>=5,g-=5,n.ndist=1+(31&m),m>>>=5,g-=5,n.ncode=4+(15&m),m>>>=4,g-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=30;break}n.have=0,n.mode=18;case 18:for(;n.have<n.ncode;){for(;g<3;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.lens[F[n.have++]]=7&m,m>>>=3,g-=3}for(;n.have<19;)n.lens[F[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,M={bits:n.lenbits},I=s(0,n.lens,0,19,n.lencode,0,n.work,M),n.lenbits=M.bits,I){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have<n.nlen+n.ndist;){for(;A=(L=n.lencode[m&(1<<n.lenbits)-1])>>>16&255,x=65535&L,!((E=L>>>24)<=g);){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(x<16)m>>>=E,g-=E,n.lens[n.have++]=x;else{if(16===x){for(R=E+2;g<R;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(m>>>=E,g-=E,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}P=n.lens[n.have-1],w=3+(3&m),m>>>=2,g-=2}else if(17===x){for(R=E+3;g<R;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}g-=E,P=0,w=3+(7&(m>>>=E)),m>>>=3,g-=3}else{for(R=E+7;g<R;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}g-=E,P=0,w=11+(127&(m>>>=E)),m>>>=7,g-=7}if(n.have+w>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;w--;)n.lens[n.have++]=P}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,M={bits:n.lenbits},I=s(1,n.lens,0,n.nlen,n.lencode,0,n.work,M),n.lenbits=M.bits,I){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,M={bits:n.distbits},I=s(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,M),n.distbits=M.bits,I){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(f>=6&&p>=258){e.next_out=d,e.avail_out=p,e.next_in=h,e.avail_in=f,n.hold=m,n.bits=g,a(e,y),d=e.next_out,u=e.output,p=e.avail_out,h=e.next_in,l=e.input,f=e.avail_in,m=n.hold,g=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;A=(L=n.lencode[m&(1<<n.lenbits)-1])>>>16&255,x=65535&L,!((E=L>>>24)<=g);){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(A&&0===(240&A)){for(T=E,S=A,D=x;A=(L=n.lencode[D+((m&(1<<T+S)-1)>>T)])>>>16&255,x=65535&L,!(T+(E=L>>>24)<=g);){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}m>>>=T,g-=T,n.back+=T}if(m>>>=E,g-=E,n.back+=E,n.length=x,0===A){n.mode=26;break}if(32&A){n.back=-1,n.mode=12;break}if(64&A){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&A,n.mode=22;case 22:if(n.extra){for(R=n.extra;g<R;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.length+=m&(1<<n.extra)-1,m>>>=n.extra,g-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;A=(L=n.distcode[m&(1<<n.distbits)-1])>>>16&255,x=65535&L,!((E=L>>>24)<=g);){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(0===(240&A)){for(T=E,S=A,D=x;A=(L=n.distcode[D+((m&(1<<T+S)-1)>>T)])>>>16&255,x=65535&L,!(T+(E=L>>>24)<=g);){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}m>>>=T,g-=T,n.back+=T}if(m>>>=E,g-=E,n.back+=E,64&A){e.msg="invalid distance code",n.mode=30;break}n.offset=x,n.extra=15&A,n.mode=24;case 24:if(n.extra){for(R=n.extra;g<R;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}n.offset+=m&(1<<n.extra)-1,m>>>=n.extra,g-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===p)break e;if(w=y-p,n.offset>w){if((w=n.offset-w)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}w>n.wnext?(w-=n.wnext,O=n.wsize-w):O=n.wnext-w,w>n.length&&(w=n.length),C=n.window}else C=u,O=d-n.offset,w=n.length;w>p&&(w=p),p-=w,n.length-=w;do{u[d++]=C[O++]}while(--w);0===n.length&&(n.mode=21);break;case 26:if(0===p)break e;u[d++]=n.length,p--,n.mode=21;break;case 27:if(n.wrap){for(;g<32;){if(0===f)break e;f--,m|=l[h++]<<g,g+=8}if(y-=p,e.total_out+=y,n.total+=y,y&&(e.adler=n.check=n.flags?o(n.check,u,y,d-y):r(n.check,u,y,d-y)),y=p,(n.flags?m:c(m))!==n.check){e.msg="incorrect data check",n.mode=30;break}m=0,g=0}n.mode=28;case 28:if(n.wrap&&n.flags){for(;g<32;){if(0===f)break e;f--,m+=l[h++]<<g,g+=8}if(m!==(4294967295&n.total)){e.msg="incorrect length check",n.mode=30;break}m=0,g=0}n.mode=29;case 29:I=1;break e;case 30:I=-3;break e;case 31:return-4;case 32:default:return-2}return e.next_out=d,e.avail_out=p,e.next_in=h,e.avail_in=f,n.hold=m,n.bits=g,(n.wsize||y!==e.avail_out&&n.mode<30&&(n.mode<27||4!==t))&&_(e,e.output,e.next_out,y-e.avail_out)?(n.mode=31,-4):(b-=e.avail_in,y-=e.avail_out,e.total_in+=b,e.total_out+=y,n.total+=y,n.wrap&&y&&(e.adler=n.check=n.flags?o(n.check,u,y,e.next_out-y):r(n.check,u,y,e.next_out-y)),e.data_type=n.bits+(n.last?64:0)+(12===n.mode?128:0)+(20===n.mode||15===n.mode?256:0),(0===b&&0===y||4===t)&&0===I&&(I=-5),I)},t.inflateEnd=function(e){if(!e||!e.state)return-2;var t=e.state;return t.window&&(t.window=null),e.state=null,0},t.inflateGetHeader=function(e,t){var n;return e&&e.state?0===(2&(n=e.state).wrap)?-2:(n.head=t,t.done=!1,0):-2},t.inflateSetDictionary=function(e,t){var n,i=t.length;return e&&e.state?0!==(n=e.state).wrap&&11!==n.mode?-2:11===n.mode&&r(1,t,i,0)!==n.check?-3:_(e,t,i,i)?(n.mode=31,-4):(n.havedict=1,0):-2},t.inflateInfo="pako inflate (from Nodeca project)"},function(e,t,n){"use strict";e.exports=function(e,t){var n,i,r,o,a,s,c,l,u,h,d,f,p,m,g,v,_,b,y,w,O,C,E,A,x;n=e.state,i=e.next_in,A=e.input,r=i+(e.avail_in-5),o=e.next_out,x=e.output,a=o-(t-e.avail_out),s=o+(e.avail_out-257),c=n.dmax,l=n.wsize,u=n.whave,h=n.wnext,d=n.window,f=n.hold,p=n.bits,m=n.lencode,g=n.distcode,v=(1<<n.lenbits)-1,_=(1<<n.distbits)-1;e:do{p<15&&(f+=A[i++]<<p,p+=8,f+=A[i++]<<p,p+=8),b=m[f&v];t:for(;;){if(f>>>=y=b>>>24,p-=y,0===(y=b>>>16&255))x[o++]=65535&b;else{if(!(16&y)){if(0===(64&y)){b=m[(65535&b)+(f&(1<<y)-1)];continue t}if(32&y){n.mode=12;break e}e.msg="invalid literal/length code",n.mode=30;break e}w=65535&b,(y&=15)&&(p<y&&(f+=A[i++]<<p,p+=8),w+=f&(1<<y)-1,f>>>=y,p-=y),p<15&&(f+=A[i++]<<p,p+=8,f+=A[i++]<<p,p+=8),b=g[f&_];n:for(;;){if(f>>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0===(64&y)){b=g[(65535&b)+(f&(1<<y)-1)];continue n}e.msg="invalid distance code",n.mode=30;break e}if(O=65535&b,p<(y&=15)&&(f+=A[i++]<<p,(p+=8)<y&&(f+=A[i++]<<p,p+=8)),(O+=f&(1<<y)-1)>c){e.msg="invalid distance too far back",n.mode=30;break e}if(f>>>=y,p-=y,O>(y=o-a)){if((y=O-y)>u&&n.sane){e.msg="invalid distance too far back",n.mode=30;break e}if(C=0,E=d,0===h){if(C+=l-y,y<w){w-=y;do{x[o++]=d[C++]}while(--y);C=o-O,E=x}}else if(h<y){if(C+=l+h-y,(y-=h)<w){w-=y;do{x[o++]=d[C++]}while(--y);if(C=0,h<w){w-=y=h;do{x[o++]=d[C++]}while(--y);C=o-O,E=x}}}else if(C+=h-y,y<w){w-=y;do{x[o++]=d[C++]}while(--y);C=o-O,E=x}for(;w>2;)x[o++]=E[C++],x[o++]=E[C++],x[o++]=E[C++],w-=3;w&&(x[o++]=E[C++],w>1&&(x[o++]=E[C++]))}else{C=o-O;do{x[o++]=x[C++],x[o++]=x[C++],x[o++]=x[C++],w-=3}while(w>2);w&&(x[o++]=x[C++],w>1&&(x[o++]=x[C++]))}break}}break}}while(i<r&&o<s);i-=w=p>>3,f&=(1<<(p-=w<<3))-1,e.next_in=i,e.next_out=o,e.avail_in=i<r?r-i+5:5-(i-r),e.avail_out=o<s?s-o+257:257-(o-s),n.hold=f,n.bits=p}},function(e,t,n){"use strict";var i=n(163),r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],o=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],a=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],s=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(e,t,n,c,l,u,h,d){var f,p,m,g,v,_,b,y,w,O=d.bits,C=0,E=0,A=0,x=0,T=0,S=0,D=0,P=0,I=0,M=0,R=null,L=0,j=new i.Buf16(16),F=new i.Buf16(16),N=null,z=0;for(C=0;C<=15;C++)j[C]=0;for(E=0;E<c;E++)j[t[n+E]]++;for(T=O,x=15;x>=1&&0===j[x];x--);if(T>x&&(T=x),0===x)return l[u++]=20971520,l[u++]=20971520,d.bits=1,0;for(A=1;A<x&&0===j[A];A++);for(T<A&&(T=A),P=1,C=1;C<=15;C++)if(P<<=1,(P-=j[C])<0)return-1;if(P>0&&(0===e||1!==x))return-1;for(F[1]=0,C=1;C<15;C++)F[C+1]=F[C]+j[C];for(E=0;E<c;E++)0!==t[n+E]&&(h[F[t[n+E]]++]=E);if(0===e?(R=N=h,_=19):1===e?(R=r,L-=257,N=o,z-=257,_=256):(R=a,N=s,_=-1),M=0,E=0,C=A,v=u,S=T,D=0,m=-1,g=(I=1<<T)-1,1===e&&I>852||2===e&&I>592)return 1;for(;;){b=C-D,h[E]<_?(y=0,w=h[E]):h[E]>_?(y=N[z+h[E]],w=R[L+h[E]]):(y=96,w=0),f=1<<C-D,A=p=1<<S;do{l[v+(M>>D)+(p-=f)]=b<<24|y<<16|w|0}while(0!==p);for(f=1<<C-1;M&f;)f>>=1;if(0!==f?(M&=f-1,M+=f):M=0,E++,0===--j[C]){if(C===x)break;C=t[n+h[E]]}if(C>T&&(M&g)!==m){for(0===D&&(D=T),v+=A,P=1<<(S=C-D);S+D<x&&!((P-=j[S+D])<=0);)S++,P<<=1;if(I+=1<<S,1===e&&I>852||2===e&&I>592)return 1;l[m=M&g]=T<<24|S<<16|v-u|0}}return 0!==M&&(l[v+M]=C-D<<24|64<<16|0),d.bits=T,0}},function(e,t,n){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t){e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],i=0;i<e.rangeCount;i++)n.push(e.getRangeAt(i));switch(t.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":t.blur();break;default:t=null}return e.removeAllRanges(),function(){"Caret"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},function(e,t){!function(e){"use strict";function t(){return h.createDocumentFragment()}function n(e){return h.createElement(e)}function i(e,t){if(!e)throw new Error("Failed to construct "+t+": 1 argument required, but only 0 present.")}function r(e){if(1===e.length)return o(e[0]);for(var n=t(),i=M.call(e),r=0;r<e.length;r++)n.appendChild(o(i[r]));return n}function o(e){return"object"===typeof e?e:h.createTextNode(e)}for(var a,s,c,l,u,h=e.document,d=Object.prototype.hasOwnProperty,f=Object.defineProperty||function(e,t,n){return d.call(n,"value")?e[t]=n.value:(d.call(n,"get")&&e.__defineGetter__(t,n.get),d.call(n,"set")&&e.__defineSetter__(t,n.set)),e},p=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},m=function(e){var t="undefined"===typeof e.className,n=t?e.getAttribute("class")||"":e.className,i=t||"object"===typeof n,r=(i?t?n:n.baseVal:n).replace(v,"");r.length&&I.push.apply(this,r.split(_)),this._isSVG=i,this._=e},g={get:function(){return new m(this)},set:function(){}},v=/^\s+|\s+$/g,_=/\s+/,b=function(e,t){return this.contains(e)?t||this.remove(e):(void 0===t||t)&&(t=!0,this.add(e)),!!t},y=e.DocumentFragment&&DocumentFragment.prototype,w=e.Node,O=(w||Element).prototype,C=e.CharacterData||w,E=C&&C.prototype,A=e.DocumentType,x=A&&A.prototype,T=(e.Element||w||e.HTMLElement).prototype,S=e.HTMLSelectElement||n("select").constructor,D=S.prototype.remove,P=e.SVGElement,I=["matches",T.matchesSelector||T.webkitMatchesSelector||T.khtmlMatchesSelector||T.mozMatchesSelector||T.msMatchesSelector||T.oMatchesSelector||function(e){var t=this.parentNode;return!!t&&-1<p.call(t.querySelectorAll(e),this)},"closest",function(e){for(var t,n=this;(t=n&&n.matches)&&!n.matches(e);)n=n.parentNode;return t?n:null},"prepend",function(){var e=this.firstChild,t=r(arguments);e?this.insertBefore(t,e):this.appendChild(t)},"append",function(){this.appendChild(r(arguments))},"before",function(){var e=this.parentNode;e&&e.insertBefore(r(arguments),this)},"after",function(){var e=this.parentNode,t=this.nextSibling,n=r(arguments);e&&(t?e.insertBefore(n,t):e.appendChild(n))},"toggleAttribute",function(e,t){var n=this.hasAttribute(e);return 1<arguments.length?n&&!t?this.removeAttribute(e):t&&!n&&this.setAttribute(e,""):n?this.removeAttribute(e):this.setAttribute(e,""),this.hasAttribute(e)},"replace",function(){this.replaceWith.apply(this,arguments)},"replaceWith",function(){var e=this.parentNode;e&&e.replaceChild(r(arguments),this)},"remove",function(){var e=this.parentNode;e&&e.removeChild(this)}],M=I.slice,R=I.length;R;R-=2)if((s=I[R-2])in T||(T[s]=I[R-1]),"remove"!==s||D._dom4||((S.prototype[s]=function(){return 0<arguments.length?D.apply(this,arguments):T.remove.call(this)})._dom4=!0),/^(?:before|after|replace|replaceWith|remove)$/.test(s)&&(C&&!(s in E)&&(E[s]=I[R-1]),A&&!(s in x)&&(x[s]=I[R-1])),/^(?:append|prepend)$/.test(s))if(y)s in y||(y[s]=I[R-1]);else try{t().constructor.prototype[s]=I[R-1]}catch(j){}var L;n("a").matches("a")||(T[s]=(L=T[s],function(e){return L.call(this.parentNode?this:t().appendChild(this),e)})),m.prototype={length:0,add:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)||I.push.call(this,s);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},contains:function(e){return function(t){return-1<(R=e.call(this,s=function(e){if(!e)throw"SyntaxError";if(_.test(e))throw"InvalidCharacterError";return e}(t)))}}([].indexOf||function(e){for(R=this.length;R--&&this[R]!==e;);return R}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)&&I.splice.call(this,R,1);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},toggle:b,toString:function(){return I.join.call(this," ")}},P&&!("classList"in P.prototype)&&f(P.prototype,"classList",g),"classList"in h.documentElement?((l=n("div").classList).add("a","b","a"),"a b"!=l&&("add"in(c=l.constructor.prototype)||(c=e.TemporaryTokenList.prototype),u=function(e){return function(){for(var t=0;t<arguments.length;)e.call(this,arguments[t++])}},c.add=u(c.add),c.remove=u(c.remove),c.toggle=b)):f(T,"classList",g),"contains"in O||f(O,"contains",{value:function(e){for(;e&&e!==this;)e=e.parentNode;return this===e}}),"head"in h||f(h,"head",{get:function(){return a||(a=h.getElementsByTagName("head")[0])}}),function(){for(var t,n=e.requestAnimationFrame,i=e.cancelAnimationFrame,r=["o","ms","moz","webkit"],o=r.length;!i&&o--;)n=n||e[r[o]+"RequestAnimationFrame"],i=e[r[o]+"CancelAnimationFrame"]||e[r[o]+"CancelRequestAnimationFrame"];i||(n?(t=n,n=function(e){var n=!0;return t((function(){n&&e.apply(this,arguments)})),function(){n=!1}},i=function(e){e()}):(n=function(e){return setTimeout(e,15,15)},i=function(e){clearTimeout(e)})),e.requestAnimationFrame=n,e.cancelAnimationFrame=i}();try{new e.CustomEvent("?")}catch(j){e.CustomEvent=function(e,t){function n(e,t,n,i){this.initEvent(e,t,n),this.detail=i}return function(i,r){var o=h.createEvent(e);if("string"!=typeof i)throw new Error("An event name must be provided");return"Event"==e&&(o.initCustomEvent=n),null==r&&(r=t),o.initCustomEvent(i,r.bubbles,r.cancelable,r.detail),o}}(e.CustomEvent?"CustomEvent":"Event",{bubbles:!1,cancelable:!1,detail:null})}try{new Event("_")}catch(j){j=function(e){function t(e,t){i(arguments.length,"Event");var n=h.createEvent("Event");return t||(t={}),n.initEvent(e,!!t.bubbles,!!t.cancelable),n}return t.prototype=e.prototype,t}(e.Event||function(){}),f(e,"Event",{value:j}),Event!==j&&(Event=j)}try{new KeyboardEvent("_",{})}catch(j){j=function(t){var n,r=0,o={char:"",key:"",location:0,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1,altGraphKey:!1,repeat:!1,locale:navigator.language,detail:0,bubbles:!1,cancelable:!1,keyCode:0,charCode:0,which:0};try{var a=h.createEvent("KeyboardEvent");a.initKeyboardEvent("keyup",!1,!1,e,"+",3,!0,!1,!0,!1,!1),r="+"==(a.keyIdentifier||a.key)&&3==(a.keyLocation||a.location)&&(a.ctrlKey?a.altKey?1:3:a.shiftKey?2:4)||9}catch(j){}function s(e){for(var t=[],n=["ctrlKey","Control","shiftKey","Shift","altKey","Alt","metaKey","Meta","altGraphKey","AltGraph"],i=0;i<n.length;i+=2)e[n[i]]&&t.push(n[i+1]);return t.join(" ")}function c(e,t){for(var n in t)t.hasOwnProperty(n)&&!t.hasOwnProperty.call(e,n)&&(e[n]=t[n]);return e}function l(e,t,n){try{t[e]=n[e]}catch(j){}}function u(t,a){i(arguments.length,"KeyboardEvent"),a=c(a||{},o);var u,d=h.createEvent(n),f=a.ctrlKey,p=a.shiftKey,m=a.altKey,g=a.metaKey,v=a.altGraphKey,_=r>3?s(a):null,b=String(a.key),y=String(a.char),w=a.location,O=a.keyCode||(a.keyCode=b)&&b.charCodeAt(0)||0,C=a.charCode||(a.charCode=y)&&y.charCodeAt(0)||0,E=a.bubbles,A=a.cancelable,x=a.repeat,T=a.locale,S=a.view||e;if(a.which||(a.which=a.keyCode),"initKeyEvent"in d)d.initKeyEvent(t,E,A,S,f,m,p,g,O,C);else if(0<r&&"initKeyboardEvent"in d){switch(u=[t,E,A,S],r){case 1:u.push(b,w,f,p,m,g,v);break;case 2:u.push(f,m,p,g,O,C);break;case 3:u.push(b,w,f,m,p,g,v);break;case 4:u.push(b,w,_,x,T);break;default:u.push(char,b,w,_,x,T)}d.initKeyboardEvent.apply(d,u)}else d.initEvent(t,E,A);for(b in d)o.hasOwnProperty(b)&&d[b]!==a[b]&&l(b,d,a);return d}return n=0<r?"KeyboardEvent":"Event",u.prototype=t.prototype,u}(e.KeyboardEvent||function(){}),f(e,"KeyboardEvent",{value:j}),KeyboardEvent!==j&&(KeyboardEvent=j)}try{new MouseEvent("_",{})}catch(j){j=function(t){function n(t,n){i(arguments.length,"MouseEvent");var r=h.createEvent("MouseEvent");return n||(n={}),r.initMouseEvent(t,!!n.bubbles,!!n.cancelable,n.view||e,n.detail||1,n.screenX||0,n.screenY||0,n.clientX||0,n.clientY||0,!!n.ctrlKey,!!n.altKey,!!n.shiftKey,!!n.metaKey,n.button||0,n.relatedTarget||null),r}return n.prototype=t.prototype,n}(e.MouseEvent||function(){}),f(e,"MouseEvent",{value:j}),MouseEvent!==j&&(MouseEvent=j)}h.querySelectorAll("*").forEach||function(){function e(e){var t=e.querySelectorAll;e.querySelectorAll=function(e){var n=t.call(this,e);return n.forEach=Array.prototype.forEach,n}}e(h),e(Element.prototype)}();try{h.querySelector(":scope *")}catch(j){!function(){var e="data-scope-"+(1e9*Math.random()>>>0),t=Element.prototype,n=t.querySelector,i=t.querySelectorAll;function r(t,n,i){t.setAttribute(e,null);var r=n.call(t,String(i).replace(/(^|,\s*)(:scope([ >]|$))/g,(function(t,n,i,r){return n+"["+e+"]"+(r||" ")})));return t.removeAttribute(e),r}t.querySelector=function(e){return r(this,n,e)},t.querySelectorAll=function(e){return r(this,i,e)}}()}}(window),function(e){"use strict";var t=e.WeakMap||function(){var e,t=0,n=!1,i=!1;function r(t,r,o){i=o,n=!1,e=void 0,t.dispatchEvent(r)}function a(e){this.value=e}function s(){t++,this.__ce__=new o("@DOMMap:"+t+Math.random())}return a.prototype.handleEvent=function(t){n=!0,i?t.currentTarget.removeEventListener(t.type,this,!1):e=this.value},s.prototype={constructor:s,delete:function(e){return r(e,this.__ce__,!0),n},get:function(t){r(t,this.__ce__,!1);var n=e;return e=void 0,n},has:function(e){return r(e,this.__ce__,!1),n},set:function(e,t){return r(e,this.__ce__,!0),e.addEventListener(this.__ce__.type,new a(t),!1),this}},s}();function n(){}function i(e,t,n){function r(e){r.once&&(e.currentTarget.removeEventListener(e.type,t,r),r.removed=!0),r.passive&&(e.preventDefault=i.preventDefault),"function"===typeof r.callback?r.callback.call(this,e):r.callback&&r.callback.handleEvent(e),r.passive&&delete e.preventDefault}return r.type=e,r.callback=t,r.capture=!!n.capture,r.passive=!!n.passive,r.once=!!n.once,r.removed=!1,r}n.prototype=(Object.create||Object)(null),i.preventDefault=function(){};var r,o=e.CustomEvent,a=e.dispatchEvent,s=e.addEventListener,c=e.removeEventListener,l=0,u=function(){l++},h=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},d=function(e){return"".concat(e.capture?"1":"0",e.passive?"1":"0",e.once?"1":"0")};try{s("_",u,{once:!0}),a(new o("_")),a(new o("_")),c("_",u,{once:!0})}catch(f){}1!==l&&function(){var o=new t;r=function(e){if(e){var t=e.prototype;t.addEventListener=function(e){return function(t,r,a){if(a&&"boolean"!==typeof a){var s,c,l,u=o.get(this),f=d(a);u||o.set(this,u=new n),t in u||(u[t]={handler:[],wrap:[]}),c=u[t],(s=h.call(c.handler,r))<0?(s=c.handler.push(r)-1,c.wrap[s]=l=new n):l=c.wrap[s],f in l||(l[f]=i(t,r,a),e.call(this,t,l[f],l[f].capture))}else e.call(this,t,r,a)}}(t.addEventListener),t.removeEventListener=function(e){return function(t,n,i){if(i&&"boolean"!==typeof i){var r,a,s,c,l=o.get(this);if(l&&t in l&&(s=l[t],-1<(a=h.call(s.handler,n))&&(r=d(i))in(c=s.wrap[a]))){for(r in e.call(this,t,c[r],c[r].capture),delete c[r],c)return;s.handler.splice(a,1),s.wrap.splice(a,1),0===s.handler.length&&delete l[t]}}else e.call(this,t,n,i)}}(t.removeEventListener)}},e.EventTarget?r(EventTarget):(r(e.Text),r(e.Element||e.HTMLElement),r(e.HTMLDocument),r(e.Window||{prototype:e}),r(e.XMLHttpRequest))}()}(self)},function(e,t,n){"use strict";t.__esModule=!0;var i=n(2),r=(a(i),a(n(36))),o=a(n(480));a(n(250));function a(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function l(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function u(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,i){e=n,t.forEach((function(t){return t(e,i)}))}}}t.default=function(e,t){var n,a,h="__create-react-context-"+(0,o.default)()+"__",d=function(e){function n(){var t,i;s(this,n);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return t=i=c(this,e.call.apply(e,[this].concat(o))),i.emitter=u(i.props.value),c(i,t)}return l(n,e),n.prototype.getChildContext=function(){var e;return(e={})[h]=this.emitter,e},n.prototype.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n=this.props.value,i=e.value,r=void 0;((o=n)===(a=i)?0!==o||1/o===1/a:o!==o&&a!==a)?r=0:(r="function"===typeof t?t(n,i):1073741823,0!==(r|=0)&&this.emitter.set(e.value,r))}var o,a},n.prototype.render=function(){return this.props.children},n}(i.Component);d.childContextTypes=((n={})[h]=r.default.object.isRequired,n);var f=function(t){function n(){var e,i;s(this,n);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return e=i=c(this,t.call.apply(t,[this].concat(o))),i.state={value:i.getValue()},i.onUpdate=function(e,t){0!==((0|i.observedBits)&t)&&i.setState({value:i.getValue()})},c(i,e)}return l(n,t),n.prototype.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=void 0===t||null===t?1073741823:t},n.prototype.componentDidMount=function(){this.context[h]&&this.context[h].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=void 0===e||null===e?1073741823:e},n.prototype.componentWillUnmount=function(){this.context[h]&&this.context[h].off(this.onUpdate)},n.prototype.getValue=function(){return this.context[h]?this.context[h].get():e},n.prototype.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(i.Component);return f.contextTypes=((a={})[h]=r.default.object,a),{Provider:d,Consumer:f}},e.exports=t.default},function(e,t,n){"use strict";(function(t){var n="__global_unique_id__";e.exports=function(){return t[n]=(t[n]||0)+1}}).call(this,n(55))},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;!function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var i=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,n):{};i.get||i.set?Object.defineProperty(t,n,i):t[n]=e[n]}t.default=e}(n(36));var i=s(n(482)),r=s(n(485)),o=s(n(2)),a=s(n(277));n(278);function s(e){return e&&e.__esModule?e:{default:e}}function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}var l=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return(0,i.default)(e,t)}))},u=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return(0,r.default)(e,t)}))},h=function(e){var t,n;function i(){for(var t,n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return(t=e.call.apply(e,[this].concat(i))||this).onEnter=function(e,n){var i=t.getClassNames(n?"appear":"enter").className;t.removeClasses(e,"exit"),l(e,i),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var i=t.getClassNames(n?"appear":"enter").activeClassName;t.reflowAndAddClass(e,i),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var i=t.getClassNames("appear").doneClassName,r=t.getClassNames("enter").doneClassName,o=n?i+" "+r:r;t.removeClasses(e,n?"appear":"enter"),l(e,o),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.getClassNames("exit").className;t.removeClasses(e,"appear"),t.removeClasses(e,"enter"),l(e,n),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.getClassNames("exit").activeClassName;t.reflowAndAddClass(e,n),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.getClassNames("exit").doneClassName;t.removeClasses(e,"exit"),l(e,n),t.props.onExited&&t.props.onExited(e)},t.getClassNames=function(e){var n=t.props.classNames,i="string"===typeof n,r=i?(i&&n?n+"-":"")+e:n[e];return{className:r,activeClassName:i?r+"-active":n[e+"Active"],doneClassName:i?r+"-done":n[e+"Done"]}},t}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var r=i.prototype;return r.removeClasses=function(e,t){var n=this.getClassNames(t),i=n.className,r=n.activeClassName,o=n.doneClassName;i&&u(e,i),r&&u(e,r),o&&u(e,o)},r.reflowAndAddClass=function(e,t){t&&(e&&e.scrollTop,l(e,t))},r.render=function(){var e=c({},this.props);return delete e.classNames,o.default.createElement(a.default,c({},e,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},i}(o.default.Component);h.defaultProps={classNames:""},h.propTypes={};var d=h;t.default=d,e.exports=t.default},function(e,t,n){"use strict";var i=n(483);t.__esModule=!0,t.default=function(e,t){e.classList?e.classList.add(t):(0,r.default)(e,t)||("string"===typeof e.className?e.className=e.className+" "+t:e.setAttribute("class",(e.className&&e.className.baseVal||"")+" "+t))};var r=i(n(484));e.exports=t.default},function(e,t){e.exports=function(e){return e&&e.__esModule?e:{default:e}}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")},e.exports=t.default},function(e,t,n){"use strict";function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}e.exports=function(e,t){e.classList?e.classList.remove(t):"string"===typeof e.className?e.className=i(e.className,t):e.setAttribute("class",i(e.className&&e.className.baseVal||"",t))}},function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;a(n(36));var i=a(n(2)),r=n(54),o=a(n(279));function a(e){return e&&e.__esModule?e:{default:e}}var s=function(e){var t,n;function a(){for(var t,n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return(t=e.call.apply(e,[this].concat(i))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return t.handleLifecycle("onExited",1,n)},t}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=a.prototype;return s.handleLifecycle=function(e,t,n){var o,a=this.props.children,s=i.default.Children.toArray(a)[t];s.props[e]&&(o=s.props)[e].apply(o,n),this.props[e]&&this.props[e]((0,r.findDOMNode)(this))},s.render=function(){var e=this.props,t=e.children,n=e.in,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,["children","in"]),a=i.default.Children.toArray(t),s=a[0],c=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,i.default.createElement(o.default,r,n?i.default.cloneElement(s,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):i.default.cloneElement(c,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},a}(i.default.Component);s.propTypes={};var c=s;t.default=c,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.getChildMapping=r,t.mergeChildMappings=o,t.getInitialChildMapping=function(e,t){return r(e.children,(function(n){return(0,i.cloneElement)(n,{onExited:t.bind(null,n),in:!0,appear:a(n,"appear",e),enter:a(n,"enter",e),exit:a(n,"exit",e)})}))},t.getNextChildMapping=function(e,t,n){var s=r(e.children),c=o(t,s);return Object.keys(c).forEach((function(r){var o=c[r];if((0,i.isValidElement)(o)){var l=r in t,u=r in s,h=t[r],d=(0,i.isValidElement)(h)&&!h.props.in;!u||l&&!d?u||!l||d?u&&l&&(0,i.isValidElement)(h)&&(c[r]=(0,i.cloneElement)(o,{onExited:n.bind(null,o),in:h.props.in,exit:a(o,"exit",e),enter:a(o,"enter",e)})):c[r]=(0,i.cloneElement)(o,{in:!1}):c[r]=(0,i.cloneElement)(o,{onExited:n.bind(null,o),in:!0,exit:a(o,"exit",e),enter:a(o,"enter",e)})}})),c};var i=n(2);function r(e,t){var n=Object.create(null);return e&&i.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,i.isValidElement)(e)?t(e):e}(e)})),n}function o(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var i,r=Object.create(null),o=[];for(var a in e)a in t?o.length&&(r[a]=o,o=[]):o.push(a);var s={};for(var c in t){if(r[c])for(i=0;i<r[c].length;i++){var l=r[c][i];s[r[c][i]]=n(l)}s[c]=n(c)}for(i=0;i<o.length;i++)s[o[i]]=n(o[i]);return s}function a(e,t,n){return null!=n[t]?n[t]:e.props[t]}},function(e,t,n){"use strict";var i;if(!Object.keys){var r=Object.prototype.hasOwnProperty,o=Object.prototype.toString,a=n(281),s=Object.prototype.propertyIsEnumerable,c=!s.call({toString:null},"toString"),l=s.call((function(){}),"prototype"),u=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(e){var t=e.constructor;return t&&t.prototype===e},d={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"===typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&r.call(window,e)&&null!==window[e]&&"object"===typeof window[e])try{h(window[e])}catch(t){return!0}}catch(t){return!0}return!1}();i=function(e){var t=null!==e&&"object"===typeof e,n="[object Function]"===o.call(e),i=a(e),s=t&&"[object String]"===o.call(e),d=[];if(!t&&!n&&!i)throw new TypeError("Object.keys called on a non-object");var p=l&&n;if(s&&e.length>0&&!r.call(e,0))for(var m=0;m<e.length;++m)d.push(String(m));if(i&&e.length>0)for(var g=0;g<e.length;++g)d.push(String(g));else for(var v in e)p&&"prototype"===v||!r.call(e,v)||d.push(String(v));if(c)for(var _=function(e){if("undefined"===typeof window||!f)return h(e);try{return h(e)}catch(t){return!1}}(e),b=0;b<u.length;++b)_&&"constructor"===u[b]||!r.call(e,u[b])||d.push(u[b]);return d}}e.exports=i},function(e,t,n){"use strict";var i="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag,r=Object.prototype.toString,o=function(e){return!(i&&e&&"object"===typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===r.call(e)},a=function(e){return!!o(e)||null!==e&&"object"===typeof e&&"number"===typeof e.length&&e.length>=0&&"[object Array]"!==r.call(e)&&"[object Function]"===r.call(e.callee)},s=function(){return o(arguments)}();o.isLegacyArguments=a,e.exports=s?o:a},function(e,t,n){"use strict";var i=n(142),r=n(282),o=n(285),a=n(286),s=n(494),c=r(a(),Object);i(c,{getPolyfill:a,implementation:o,shim:s}),e.exports=c},function(e,t,n){"use strict";var i="Function.prototype.bind called on incompatible ",r=Array.prototype.slice,o=Object.prototype.toString;e.exports=function(e){var t=this;if("function"!==typeof t||"[object Function]"!==o.call(t))throw new TypeError(i+t);for(var n,a=r.call(arguments,1),s=function(){if(this instanceof n){var i=t.apply(this,a.concat(r.call(arguments)));return Object(i)===i?i:this}return t.apply(e,a.concat(r.call(arguments)))},c=Math.max(0,t.length-a.length),l=[],u=0;u<c;u++)l.push("$"+u);if(n=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this,arguments); }")(s),t.prototype){var h=function(){};h.prototype=t.prototype,n.prototype=new h,h.prototype=null}return n}},function(e,t,n){"use strict";var i=TypeError,r=Object.getOwnPropertyDescriptor;if(r)try{r({},"")}catch(v){r=null}var o=function(){throw new i},a=r?function(){try{return o}catch(e){try{return r(arguments,"callee").get}catch(t){return o}}}():o,s=n(284)(),c=Object.getPrototypeOf||function(e){return e.__proto__},l=void 0,u="undefined"===typeof Uint8Array?void 0:c(Uint8Array),h={"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayBufferPrototype%":"undefined"===typeof ArrayBuffer?void 0:ArrayBuffer.prototype,"%ArrayIteratorPrototype%":s?c([][Symbol.iterator]()):void 0,"%ArrayPrototype%":Array.prototype,"%ArrayProto_entries%":Array.prototype.entries,"%ArrayProto_forEach%":Array.prototype.forEach,"%ArrayProto_keys%":Array.prototype.keys,"%ArrayProto_values%":Array.prototype.values,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":void 0,"%AsyncFunctionPrototype%":void 0,"%AsyncGenerator%":void 0,"%AsyncGeneratorFunction%":void 0,"%AsyncGeneratorPrototype%":void 0,"%AsyncIteratorPrototype%":l&&s&&Symbol.asyncIterator?l[Symbol.asyncIterator]():void 0,"%Atomics%":"undefined"===typeof Atomics?void 0:Atomics,"%Boolean%":Boolean,"%BooleanPrototype%":Boolean.prototype,"%DataView%":"undefined"===typeof DataView?void 0:DataView,"%DataViewPrototype%":"undefined"===typeof DataView?void 0:DataView.prototype,"%Date%":Date,"%DatePrototype%":Date.prototype,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%ErrorPrototype%":Error.prototype,"%eval%":eval,"%EvalError%":EvalError,"%EvalErrorPrototype%":EvalError.prototype,"%Float32Array%":"undefined"===typeof Float32Array?void 0:Float32Array,"%Float32ArrayPrototype%":"undefined"===typeof Float32Array?void 0:Float32Array.prototype,"%Float64Array%":"undefined"===typeof Float64Array?void 0:Float64Array,"%Float64ArrayPrototype%":"undefined"===typeof Float64Array?void 0:Float64Array.prototype,"%Function%":Function,"%FunctionPrototype%":Function.prototype,"%Generator%":void 0,"%GeneratorFunction%":void 0,"%GeneratorPrototype%":void 0,"%Int8Array%":"undefined"===typeof Int8Array?void 0:Int8Array,"%Int8ArrayPrototype%":"undefined"===typeof Int8Array?void 0:Int8Array.prototype,"%Int16Array%":"undefined"===typeof Int16Array?void 0:Int16Array,"%Int16ArrayPrototype%":"undefined"===typeof Int16Array?void 0:Int8Array.prototype,"%Int32Array%":"undefined"===typeof Int32Array?void 0:Int32Array,"%Int32ArrayPrototype%":"undefined"===typeof Int32Array?void 0:Int32Array.prototype,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":s?c(c([][Symbol.iterator]())):void 0,"%JSON%":"object"===typeof JSON?JSON:void 0,"%JSONParse%":"object"===typeof JSON?JSON.parse:void 0,"%Map%":"undefined"===typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&s?c((new Map)[Symbol.iterator]()):void 0,"%MapPrototype%":"undefined"===typeof Map?void 0:Map.prototype,"%Math%":Math,"%Number%":Number,"%NumberPrototype%":Number.prototype,"%Object%":Object,"%ObjectPrototype%":Object.prototype,"%ObjProto_toString%":Object.prototype.toString,"%ObjProto_valueOf%":Object.prototype.valueOf,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?void 0:Promise,"%PromisePrototype%":"undefined"===typeof Promise?void 0:Promise.prototype,"%PromiseProto_then%":"undefined"===typeof Promise?void 0:Promise.prototype.then,"%Promise_all%":"undefined"===typeof Promise?void 0:Promise.all,"%Promise_reject%":"undefined"===typeof Promise?void 0:Promise.reject,"%Promise_resolve%":"undefined"===typeof Promise?void 0:Promise.resolve,"%Proxy%":"undefined"===typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%RangeErrorPrototype%":RangeError.prototype,"%ReferenceError%":ReferenceError,"%ReferenceErrorPrototype%":ReferenceError.prototype,"%Reflect%":"undefined"===typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%RegExpPrototype%":RegExp.prototype,"%Set%":"undefined"===typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&s?c((new Set)[Symbol.iterator]()):void 0,"%SetPrototype%":"undefined"===typeof Set?void 0:Set.prototype,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%SharedArrayBufferPrototype%":"undefined"===typeof SharedArrayBuffer?void 0:SharedArrayBuffer.prototype,"%String%":String,"%StringIteratorPrototype%":s?c(""[Symbol.iterator]()):void 0,"%StringPrototype%":String.prototype,"%Symbol%":s?Symbol:void 0,"%SymbolPrototype%":s?Symbol.prototype:void 0,"%SyntaxError%":SyntaxError,"%SyntaxErrorPrototype%":SyntaxError.prototype,"%ThrowTypeError%":a,"%TypedArray%":u,"%TypedArrayPrototype%":u?u.prototype:void 0,"%TypeError%":i,"%TypeErrorPrototype%":i.prototype,"%Uint8Array%":"undefined"===typeof Uint8Array?void 0:Uint8Array,"%Uint8ArrayPrototype%":"undefined"===typeof Uint8Array?void 0:Uint8Array.prototype,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint8ClampedArrayPrototype%":"undefined"===typeof Uint8ClampedArray?void 0:Uint8ClampedArray.prototype,"%Uint16Array%":"undefined"===typeof Uint16Array?void 0:Uint16Array,"%Uint16ArrayPrototype%":"undefined"===typeof Uint16Array?void 0:Uint16Array.prototype,"%Uint32Array%":"undefined"===typeof Uint32Array?void 0:Uint32Array,"%Uint32ArrayPrototype%":"undefined"===typeof Uint32Array?void 0:Uint32Array.prototype,"%URIError%":URIError,"%URIErrorPrototype%":URIError.prototype,"%WeakMap%":"undefined"===typeof WeakMap?void 0:WeakMap,"%WeakMapPrototype%":"undefined"===typeof WeakMap?void 0:WeakMap.prototype,"%WeakSet%":"undefined"===typeof WeakSet?void 0:WeakSet,"%WeakSetPrototype%":"undefined"===typeof WeakSet?void 0:WeakSet.prototype},d=n(283).call(Function.call,String.prototype.replace),f=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,p=/\\(\\)?/g,m=function(e){var t=[];return d(e,f,(function(e,n,i,r){t[t.length]=i?d(r,p,"$1"):n||e})),t},g=function(e,t){if(!(e in h))throw new SyntaxError("intrinsic "+e+" does not exist!");if("undefined"===typeof h[e]&&!t)throw new i("intrinsic "+e+" exists, but is not available. Please file an issue!");return h[e]};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new TypeError("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new TypeError('"allowMissing" argument must be a boolean');for(var n=m(e),o=g("%"+(n.length>0?n[0]:"")+"%",t),a=1;a<n.length;a+=1)if(null!=o)if(r&&a+1>=n.length){var s=r(o,n[a]);if(!t&&!(n[a]in o))throw new i("base intrinsic for "+e+" exists, but the property is not available.");o=s?s.get||s.value:o[n[a]]}else o=o[n[a]];return o}},function(e,t,n){"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var i=Object.getOwnPropertySymbols(e);if(1!==i.length||i[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},function(e,t,n){"use strict";var i=n(286),r=n(142);e.exports=function(){var e=i();return r(Object,{is:e},{is:function(){return Object.is!==e}}),e}},function(e,t,n){"use strict";var i,r,o,a,s=n(284)()&&"symbol"===typeof Symbol.toStringTag;if(s){i=Function.call.bind(Object.prototype.hasOwnProperty),r=Function.call.bind(RegExp.prototype.exec),o={};var c=function(){throw o};a={toString:c,valueOf:c},"symbol"===typeof Symbol.toPrimitive&&(a[Symbol.toPrimitive]=c)}var l=Object.prototype.toString,u=Object.getOwnPropertyDescriptor;e.exports=s?function(e){if(!e||"object"!==typeof e)return!1;var t=u(e,"lastIndex");if(!(t&&i(t,"value")))return!1;try{r(e,a)}catch(n){return n===o}}:function(e){return!(!e||"object"!==typeof e&&"function"!==typeof e)&&"[object RegExp]"===l.call(e)}},function(e,t,n){"use strict";var i=n(142),r=n(282),o=n(287),a=n(288),s=n(497),c=r(o);i(c,{getPolyfill:a,implementation:o,shim:s}),e.exports=c},function(e,t,n){"use strict";var i=n(142).supportsDescriptors,r=n(288),o=Object.getOwnPropertyDescriptor,a=Object.defineProperty,s=TypeError,c=Object.getPrototypeOf,l=/a/;e.exports=function(){if(!i||!c)throw new s("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var e=r(),t=c(l),n=o(t,"flags");return n&&n.get===e||a(t,"flags",{configurable:!0,enumerable:!1,get:e}),e}},function(e,t,n){"use strict";var i=Date.prototype.getDay,r=Object.prototype.toString,o="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;e.exports=function(e){return"object"===typeof e&&null!==e&&(o?function(e){try{return i.call(e),!0}catch(t){return!1}}(e):"[object Date]"===r.call(e))}},function(e,t,n){var i,r,o;r=[e,t,n(165)],void 0===(o="function"===typeof(i=function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};t.default=function e(t,o){if(t===o)return{};if(!(0,n.isObject)(t)||!(0,n.isObject)(o))return o;var a=(0,n.properObject)(t),s=(0,n.properObject)(o),c=Object.keys(a).reduce((function(e,t){return s.hasOwnProperty(t)?e:r({},e,i({},t,void 0))}),{});return(0,n.isDate)(a)||(0,n.isDate)(s)?a.valueOf()==s.valueOf()?{}:s:Object.keys(s).reduce((function(t,o){if(!a.hasOwnProperty(o))return r({},t,i({},o,s[o]));var c=e(a[o],s[o]);return(0,n.isObject)(c)&&(0,n.isEmpty)(c)&&!(0,n.isDate)(c)?t:r({},t,i({},o,c))}),c)},e.exports=t.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){var i,r,o;r=[e,t,n(311),n(312),n(313)],void 0===(o="function"===typeof(i=function(e,t,n,i,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n),a=c(i),s=c(r);function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){return{added:(0,o.default)(e,t),deleted:(0,a.default)(e,t),updated:(0,s.default)(e,t)}},e.exports=t.default})?i.apply(t,r):i)||(e.exports=o)},function(e,t,n){"use strict";var i=n(502),r=n(503);e.exports=r,r.prototype.message=function(e,t,n){var r=new i(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},r.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},r.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}},function(e,t,n){"use strict";var i=n(315);function r(){}e.exports=a,r.prototype=Error.prototype,a.prototype=new r;var o=a.prototype;function a(e,t,n){var r,o,a;"string"===typeof t&&(n=t,t=null),r=function(e){var t,n=[null,null];"string"===typeof e&&(-1===(t=e.indexOf(":"))?n[1]=e:(n[0]=e.slice(0,t),n[1]=e.slice(t+1)));return n}(n),o=i(t)||"1:1",a={start:{line:null,column:null},end:{line:null,column:null}},t&&t.position&&(t=t.position),t&&(t.start?(a=t,t=t.start):a.start=t),e.stack&&(this.stack=e.stack,e=e.message),this.message=e,this.name=o,this.reason=e,this.line=t?t.line:null,this.column=t?t.column:null,this.location=a,this.source=r[0],this.ruleId=r[1]}o.file="",o.name="",o.reason="",o.message="",o.stack="",o.fatal=null,o.column=null,o.line=null},function(e,t,n){"use strict";var i=n(504),r=n(505),o=n(506);e.exports=c;var a={}.hasOwnProperty,s=["history","path","basename","stem","extname","dirname"];function c(e){var t,n;if(e){if("string"===typeof e||o(e))e={contents:e};else if("message"in e&&"messages"in e)return e}else e={};if(!(this instanceof c))return new c(e);for(this.data={},this.messages=[],this.history=[],this.cwd=r.cwd(),n=-1;++n<s.length;)t=s[n],a.call(e,t)&&(this[t]=e[t]);for(t in e)s.indexOf(t)<0&&(this[t]=e[t])}function l(e,t){if(e&&e.indexOf(i.sep)>-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+i.sep+"`")}function u(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function h(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}c.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(c.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){u(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(c.prototype,"dirname",{get:function(){return"string"===typeof this.path?i.dirname(this.path):void 0},set:function(e){h(this.path,"dirname"),this.path=i.join(e||"",this.basename)}}),Object.defineProperty(c.prototype,"basename",{get:function(){return"string"===typeof this.path?i.basename(this.path):void 0},set:function(e){u(e,"basename"),l(e,"basename"),this.path=i.join(this.dirname||"",e)}}),Object.defineProperty(c.prototype,"extname",{get:function(){return"string"===typeof this.path?i.extname(this.path):void 0},set:function(e){if(l(e,"extname"),h(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=i.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(c.prototype,"stem",{get:function(){return"string"===typeof this.path?i.basename(this.path,this.extname):void 0},set:function(e){u(e,"stem"),l(e,"stem"),this.path=i.join(this.dirname||"",e+(this.extname||""))}})},function(e,t,n){"use strict";function i(e){var t,n;return r(e),t=47===e.charCodeAt(0),(n=function(e,t){var n,i,r="",o=0,a=-1,s=0,c=-1;for(;++c<=e.length;){if(c<e.length)n=e.charCodeAt(c);else{if(47===n)break;n=47}if(47===n){if(a===c-1||1===s);else if(a!==c-1&&2===s){if(r.length<2||2!==o||46!==r.charCodeAt(r.length-1)||46!==r.charCodeAt(r.length-2))if(r.length>2){if((i=r.lastIndexOf("/"))!==r.length-1){i<0?(r="",o=0):(r=r.slice(0,i),o=r.length-1-r.lastIndexOf("/")),a=c,s=0;continue}}else if(r.length){r="",o=0,a=c,s=0;continue}t&&(r=r.length?r+"/..":"..",o=2)}else r.length?r+="/"+e.slice(a+1,c):r=e.slice(a+1,c),o=c-a-1;a=c,s=0}else 46===n&&s>-1?s++:s=-1}return r}(e,!t)).length||t||(n="."),n.length&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function r(e){if("string"!==typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}t.basename=function(e,t){var n,i,o,a,s=0,c=-1;if(void 0!==t&&"string"!==typeof t)throw new TypeError('"ext" argument must be a string');if(r(e),n=e.length,void 0===t||!t.length||t.length>e.length){for(;n--;)if(47===e.charCodeAt(n)){if(o){s=n+1;break}}else c<0&&(o=!0,c=n+1);return c<0?"":e.slice(s,c)}if(t===e)return"";i=-1,a=t.length-1;for(;n--;)if(47===e.charCodeAt(n)){if(o){s=n+1;break}}else i<0&&(o=!0,i=n+1),a>-1&&(e.charCodeAt(n)===t.charCodeAt(a--)?a<0&&(c=n):(a=-1,c=i));s===c?c=i:c<0&&(c=e.length);return e.slice(s,c)},t.dirname=function(e){var t,n,i;if(r(e),!e.length)return".";t=-1,i=e.length;for(;--i;)if(47===e.charCodeAt(i)){if(n){t=i;break}}else n||(n=!0);return t<0?47===e.charCodeAt(0)?"/":".":1===t&&47===e.charCodeAt(0)?"//":e.slice(0,t)},t.extname=function(e){var t,n,i,o=-1,a=0,s=-1,c=0;r(e),i=e.length;for(;i--;)if(47!==(n=e.charCodeAt(i)))s<0&&(t=!0,s=i+1),46===n?o<0?o=i:1!==c&&(c=1):o>-1&&(c=-1);else if(t){a=i+1;break}if(o<0||s<0||0===c||1===c&&o===s-1&&o===a+1)return"";return e.slice(o,s)},t.join=function(){var e,t=-1;for(;++t<arguments.length;)r(arguments[t]),arguments[t]&&(e=void 0===e?arguments[t]:e+"/"+arguments[t]);return void 0===e?".":i(e)},t.sep="/"},function(e,t,n){"use strict";t.cwd=function(){return"/"}},function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,n){"use strict";var i=n(508),r=n(509),o=n(510),a=n(511),s=n(512),c=n(314);e.exports=function e(){var t,n=[],r=s(),_={},b=-1;return y.data=function(e,n){if("string"===typeof e)return 2===arguments.length?(m("data",t),_[e]=n,y):u.call(_,e)&&_[e]||null;if(e)return m("data",t),_=e,y;return _},y.freeze=w,y.attachers=n,y.use=function(e){var i;if(m("use",t),null===e||void 0===e);else if("function"===typeof e)u.apply(null,arguments);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?c(e):r(e)}i&&(_.settings=o(_.settings||{},i));return y;function r(e){c(e.plugins),e.settings&&(i=o(i||{},e.settings))}function s(e){if("function"===typeof e)u(e);else{if("object"!==typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?u.apply(null,e):r(e)}}function c(e){var t=-1;if(null===e||void 0===e);else{if("object"!==typeof e||!("length"in e))throw new Error("Expected a list of plugins, not `"+e+"`");for(;++t<e.length;)s(e[t])}}function u(e,t){var i=O(e);i?(a(i[1])&&a(t)&&(t=o(!0,i[1],t)),i[1]=t):n.push(l.call(arguments))}},y.parse=function(e){var t,n=c(e);if(w(),f("parse",t=y.Parser),d(t,"parse"))return new t(String(n),n).parse();return t(String(n),n)},y.stringify=function(e,t){var n,i=c(t);if(w(),p("stringify",n=y.Compiler),g(e),d(n,"compile"))return new n(e,i).compile();return n(e,i)},y.run=C,y.runSync=function(e,t){var n,r;return C(e,t,(function(e,t){r=!0,n=t,i(e)})),v("runSync","run",r),n},y.process=E,y.processSync=function(e){var t,n;return w(),f("processSync",y.Parser),p("processSync",y.Compiler),E(t=c(e),(function(e){n=!0,i(e)})),v("processSync","process",n),t},y;function y(){for(var t=e(),i=-1;++i<n.length;)t.use.apply(null,n[i]);return t.data(o(!0,{},_)),t}function w(){var e,i;if(t)return y;for(;++b<n.length;)!1!==(e=n[b])[1]&&(!0===e[1]&&(e[1]=void 0),"function"===typeof(i=e[0].apply(y,e.slice(1)))&&r.use(i));return t=!0,b=1/0,y}function O(e){for(var t=-1;++t<n.length;)if(n[t][0]===e)return n[t]}function C(e,t,n){if(g(e),w(),n||"function"!==typeof t||(n=t,t=null),!n)return new Promise(i);function i(i,o){r.run(e,c(t),(function(t,r,a){r=r||e,t?o(t):i?i(r):n(null,r,a)}))}i(null,n)}function E(e,t){if(w(),f("process",y.Parser),p("process",y.Compiler),!t)return new Promise(n);function n(n,i){var r=c(e);h.run(y,{file:r},(function(e){e?i(e):n?n(r):t(null,r)}))}n(null,t)}}().freeze();var l=[].slice,u={}.hasOwnProperty,h=s().use((function(e,t){t.tree=e.parse(t.file)})).use((function(e,t,n){e.run(t.tree,t.file,(function(e,i,r){e?n(e):(t.tree=i,t.file=r,n())}))})).use((function(e,t){var n=e.stringify(t.tree,t.file);void 0===n||null===n||("string"===typeof n||r(n)?t.file.contents=n:t.file.result=n)}));function d(e,t){return"function"===typeof e&&e.prototype&&(function(e){var t;for(t in e)return!0;return!1}(e.prototype)||t in e.prototype)}function f(e,t){if("function"!==typeof t)throw new Error("Cannot `"+e+"` without `Parser`")}function p(e,t){if("function"!==typeof t)throw new Error("Cannot `"+e+"` without `Compiler`")}function m(e,t){if(t)throw new Error("Cannot invoke `"+e+"` on a frozen processor.\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.")}function g(e){if(!e||"string"!==typeof e.type)throw new Error("Expected node, got `"+e+"`")}function v(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}},function(e,t,n){"use strict";e.exports=function(e){if(e)throw e}},function(e,t){e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,n){"use strict";var i=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=Object.defineProperty,a=Object.getOwnPropertyDescriptor,s=function(e){return"function"===typeof Array.isArray?Array.isArray(e):"[object Array]"===r.call(e)},c=function(e){if(!e||"[object Object]"!==r.call(e))return!1;var t,n=i.call(e,"constructor"),o=e.constructor&&e.constructor.prototype&&i.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!o)return!1;for(t in e);return"undefined"===typeof t||i.call(e,t)},l=function(e,t){o&&"__proto__"===t.name?o(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},u=function(e,t){if("__proto__"===t){if(!i.call(e,t))return;if(a)return a(e,t).value}return e[t]};e.exports=function e(){var t,n,i,r,o,a,h=arguments[0],d=1,f=arguments.length,p=!1;for("boolean"===typeof h&&(p=h,h=arguments[1]||{},d=2),(null==h||"object"!==typeof h&&"function"!==typeof h)&&(h={});d<f;++d)if(null!=(t=arguments[d]))for(n in t)i=u(h,n),h!==(r=u(t,n))&&(p&&r&&(c(r)||(o=s(r)))?(o?(o=!1,a=i&&s(i)?i:[]):a=i&&c(i)?i:{},l(h,{name:n,newValue:e(p,a,r)})):"undefined"!==typeof r&&l(h,{name:n,newValue:r}));return h}},function(e,t,n){"use strict";e.exports=function(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}},function(e,t,n){"use strict";var i=n(513);e.exports=o,o.wrap=i;var r=[].slice;function o(){var e=[],t={run:function(){var t=-1,n=r.call(arguments,0,-1),o=arguments[arguments.length-1];if("function"!==typeof o)throw new Error("Expected function as last argument, not "+o);function a(s){var c=e[++t],l=r.call(arguments,0),u=l.slice(1),h=n.length,d=-1;if(s)o(s);else{for(;++d<h;)null!==u[d]&&void 0!==u[d]||(u[d]=n[d]);n=u,c?i(c,a).apply(null,n):o.apply(null,[null].concat(n))}}a.apply(null,[null].concat(n))},use:function(n){if("function"!==typeof n)throw new Error("Expected `fn` to be a function, not "+n);return e.push(n),t}};return t}},function(e,t,n){"use strict";var i=[].slice;e.exports=function(e,t){var n;return function(){var t,a=i.call(arguments,0),s=e.length>a.length;s&&a.push(r);try{t=e.apply(null,a)}catch(c){if(s&&n)throw c;return r(c)}s||(t&&"function"===typeof t.then?t.then(o,r):t instanceof Error?r(t):o(t))};function r(){n||(n=!0,t.apply(null,arguments))}function o(e){r(null,e)}}},function(e,t,n){"use strict";e.exports=function(e){var t=this;this.Parser=function(n){return i(n,Object.assign({},t.data("settings"),e,{extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]}))}};var i=n(515)},function(e,t,n){"use strict";e.exports=n(516)},function(e,t,n){"use strict";e.exports=function(e,t,n){"string"!==typeof t&&(n=t,t=void 0);return function(e){var t=e||{},n=function(e,t){var n=-1;for(;++n<t.length;)f(e,t[n]);return e}({transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:g(P),autolinkProtocol:O,autolinkEmail:O,atxHeading:g(T),blockQuote:g((function(){return{type:"blockquote",children:[]}})),characterEscape:O,characterReference:O,codeFenced:g(x),codeFencedFenceInfo:v,codeFencedFenceMeta:v,codeIndented:g(x,v),codeText:g((function(){return{type:"inlineCode",value:""}}),v),codeTextData:O,data:O,codeFlowValue:O,definition:g((function(){return{type:"definition",identifier:"",label:null,title:null,url:""}})),definitionDestinationString:v,definitionLabelString:v,definitionTitleString:v,emphasis:g((function(){return{type:"emphasis",children:[]}})),hardBreakEscape:g(S),hardBreakTrailing:g(S),htmlFlow:g(D,v),htmlFlowData:O,htmlText:g(D,v),htmlTextData:O,image:g((function(){return{type:"image",title:null,url:"",alt:null}})),label:v,link:g(P),listItem:g((function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}})),listItemValue:function(e){p("expectingFirstListItemValue")&&(this.stack[this.stack.length-2].start=parseInt(this.sliceSerialize(e),10),u("expectingFirstListItemValue"))},listOrdered:g(I,(function(){u("expectingFirstListItemValue",!0)})),listUnordered:g(I),paragraph:g((function(){return{type:"paragraph",children:[]}})),reference:function(){u("referenceType","collapsed")},referenceString:v,resourceDestinationString:v,resourceTitleString:v,setextHeading:g(T),strong:g((function(){return{type:"strong",children:[]}})),thematicBreak:g((function(){return{type:"thematicBreak"}}))},exit:{atxHeading:b(),atxHeadingSequence:function(e){this.stack[this.stack.length-1].depth||(this.stack[this.stack.length-1].depth=this.sliceSerialize(e).length)},autolink:b(),autolinkEmail:function(e){C.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){C.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:b(),characterEscapeValue:C,characterReferenceMarkerHexadecimal:A,characterReferenceMarkerNumeric:A,characterReferenceValue:function(e){var t,n,i=this.sliceSerialize(e),r=p("characterReferenceType");r?(t=s(i,"characterReferenceMarkerNumeric"===r?10:16),u("characterReferenceType")):t=h(i);(n=this.stack.pop()).value+=t,n.position.end=m(e.end)},codeFenced:b((function(){var e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),u("flowCodeInside")})),codeFencedFence:function(){if(p("flowCodeInside"))return;this.buffer(),u("flowCodeInside",!0)},codeFencedFenceInfo:function(){var e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){var e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:C,codeIndented:b((function(){var e=this.resume();this.stack[this.stack.length-1].value=e})),codeText:b((function(){var e=this.resume();this.stack[this.stack.length-1].value=e})),codeTextData:C,data:C,definition:b(),definitionDestinationString:function(){var e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=a(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){var e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:b(),hardBreakEscape:b(E),hardBreakTrailing:b(E),htmlFlow:b((function(){var e=this.resume();this.stack[this.stack.length-1].value=e})),htmlFlowData:C,htmlText:b((function(){var e=this.resume();this.stack[this.stack.length-1].value=e})),htmlTextData:C,image:b((function(){var e=this.stack[this.stack.length-1];p("inReference")?(e.type+="Reference",e.referenceType=p("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType);u("referenceType")})),label:function(){var e=this.stack[this.stack.length-1],t=this.resume();this.stack[this.stack.length-1].label=t,u("inReference",!0),"link"===this.stack[this.stack.length-1].type?this.stack[this.stack.length-1].children=e.children:this.stack[this.stack.length-1].alt=t},labelText:function(e){this.stack[this.stack.length-2].identifier=a(this.sliceSerialize(e)).toLowerCase()},lineEnding:function(e){var t=this.stack[this.stack.length-1];if(p("atHardBreak"))return t.children[t.children.length-1].position.end=m(e.end),void u("atHardBreak");!p("setextHeadingSlurpLineEnding")&&n.canContainEols.indexOf(t.type)>-1&&(O.call(this,e),C.call(this,e))},link:b((function(){var e=this.stack[this.stack.length-1];p("inReference")?(e.type+="Reference",e.referenceType=p("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType);u("referenceType")})),listItem:b(),listOrdered:b(),listUnordered:b(),paragraph:b(),referenceString:function(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=a(this.sliceSerialize(e)).toLowerCase(),u("referenceType","full")},resourceDestinationString:function(){var e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){var e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){u("inReference")},setextHeading:b((function(){u("setextHeadingSlurpLineEnding")})),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).charCodeAt(0)?1:2},setextHeadingText:function(){u("setextHeadingSlurpLineEnding",!0)},strong:b(),thematicBreak:b()}},t.mdastExtensions||[]),c={};return function(e){var t,i,a={type:"root",children:[]},s=[],c=[],h=-1,f={stack:[a],tokenStack:s,config:n,enter:_,exit:y,buffer:v,resume:w,setData:u,getData:p};for(;++h<e.length;)"listOrdered"!==e[h][1].type&&"listUnordered"!==e[h][1].type||("enter"===e[h][0]?c.push(h):(i=c.pop(h),h=l(e,i,h)));h=-1;for(;++h<e.length;)t=n[e[h][0]],o.call(t,e[h][1].type)&&t[e[h][1].type].call(r({sliceSerialize:e[h][2].sliceSerialize},f),e[h][1]);if(s.length)throw new Error("Cannot close document, a token (`"+s[s.length-1].type+"`, "+d({start:s[s.length-1].start,end:s[s.length-1].end})+") is still open");a.position={start:m(e.length?e[0][1].start:{line:1,column:1,offset:0}),end:m(e.length?e[e.length-2][1].end:{line:1,column:1,offset:0})},h=-1;for(;++h<n.transforms.length;)a=n.transforms[h](a)||a;return a};function l(e,t,n){for(var i,r,o,a,s,c,l,u=t-1,h=-1,d=!1;++u<=n;)if("listUnordered"===(s=e[u])[1].type||"listOrdered"===s[1].type||"blockQuote"===s[1].type?("enter"===s[0]?h++:h--,l=void 0):"lineEndingBlank"===s[1].type?"enter"===s[0]&&(!i||l||h||c||(c=u),l=void 0):"linePrefix"===s[1].type||"listItemValue"===s[1].type||"listItemMarker"===s[1].type||"listItemPrefix"===s[1].type||"listItemPrefixWhitespace"===s[1].type||(l=void 0),!h&&"enter"===s[0]&&"listItemPrefix"===s[1].type||-1===h&&"exit"===s[0]&&("listUnordered"===s[1].type||"listOrdered"===s[1].type)){if(i){for(r=u,o=void 0;r--;)if("lineEnding"===(a=e[r])[1].type||"lineEndingBlank"===a[1].type){if("exit"===a[0])continue;o&&(e[o][1].type="lineEndingBlank",d=!0),a[1].type="lineEnding",o=r}else if("linePrefix"!==a[1].type&&"blockQuotePrefix"!==a[1].type&&"blockQuotePrefixWhitespace"!==a[1].type&&"blockQuoteMarker"!==a[1].type&&"listItemIndent"!==a[1].type)break;c&&(!o||c<o)&&(i._spread=!0),i.end=m(o?e[o][1].start:s[1].end),e.splice(o||u,0,["exit",i,s[2]]),u++,n++}"listItemPrefix"===s[1].type&&(i={type:"listItem",_spread:!1,start:m(s[1].start)},e.splice(u,0,["enter",i,s[2]]),u++,n++,c=void 0,l=!0)}return e[t][1]._spread=d,n}function u(e,t){c[e]=t}function p(e){return c[e]}function m(e){return{line:e.line,column:e.column,offset:e.offset}}function g(e,t){return function(n){_.call(this,e(n),n),t&&t.call(this,n)}}function v(){this.stack.push({type:"fragment",children:[]})}function _(e,t){return this.stack[this.stack.length-1].children.push(e),this.stack.push(e),this.tokenStack.push(t),e.position={start:m(t.start)},e}function b(e){return function(t){e&&e.call(this,t);y.call(this,t)}}function y(e){var t=this.stack.pop(),n=this.tokenStack.pop();if(!n)throw new Error("Cannot close `"+e.type+"` ("+d({start:e.start,end:e.end})+"): it\u2019s not open");if(n.type!==e.type)throw new Error("Cannot close `"+e.type+"` ("+d({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+d({start:n.start,end:n.end})+") is open");return t.position.end=m(e.end),t}function w(){return i(this.stack.pop())}function O(e){var t=this.stack[this.stack.length-1].children,n=t[t.length-1];n&&"text"===n.type||((n={type:"text",value:""}).position={start:m(e.start)},this.stack[this.stack.length-1].children.push(n)),this.stack.push(n)}function C(e){var t=this.stack.pop();t.value+=this.sliceSerialize(e),t.position.end=m(e.end)}function E(){u("atHardBreak",!0)}function A(e){u("characterReferenceType",e.type)}function x(){return{type:"code",lang:null,meta:null,value:""}}function T(){return{type:"heading",depth:void 0,children:[]}}function S(){return{type:"break"}}function D(){return{type:"html",value:""}}function P(){return{type:"link",title:null,url:"",children:[]}}function I(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}}(n)(u(c(n).document().write(l()(e,t,!0))))};var i=n(517),r=n(143),o=n(316),a=n(222),s=n(518),c=n(519),l=n(554),u=n(555),h=n(322),d=n(315);function f(e,t){var n,i;for(n in t)i=o.call(e,n)?e[n]:e[n]={},"canContainEols"===n||"transforms"===n?e[n]=[].concat(i,t[n]):Object.assign(i,t[n])}},function(e,t,n){"use strict";function i(e){return e&&(e.value||e.alt||e.title||"children"in e&&r(e.children)||"length"in e&&r(e))||""}function r(e){for(var t=[],n=-1;++n<e.length;)t[n]=i(e[n]);return t.join("")}e.exports=i},function(e,t,n){"use strict";var i=n(166);e.exports=function(e,t){var n=parseInt(e,t);return n<9||11===n||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535===(65535&n)||65534===(65535&n)||n>1114111?"\ufffd":i(n)}},function(e,t,n){"use strict";var i=n(520),r=n(521),o=n(522),a=n(319),s=n(320),c=n(525),l=n(223),u=n(528);e.exports=function(e){var t={defined:[],constructs:s([u].concat(l((e||{}).extensions))),content:n(i),document:n(r),flow:n(o),string:n(a.string),text:n(a.text)};return t;function n(e){return function(n){return c(t,e,n)}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(63),r=n(65),o=function(e){var t,n=e.attempt(this.parser.constructs.contentInitial,(function(t){if(null===t)return void e.consume(t);return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),r(e,n,"linePrefix")}),(function(t){return e.enter("paragraph"),o(t)}));return n;function o(n){var i=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=i),t=i,a(n)}function a(t){return null===t?(e.exit("chunkText"),e.exit("paragraph"),void e.consume(t)):i(t)?(e.consume(t),e.exit("chunkText"),o):(e.consume(t),a)}};t.tokenize=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(63),r=n(65),o=n(167),a=function(e){var t,n,r,a=this,l=[],u=0,h={tokenize:function(e,i){var r=0;return t={},u;function u(i){return r<l.length?(a.containerState=l[r][1],e.attempt(l[r][0].continuation,h,d)(i)):n.currentConstruct&&n.currentConstruct.concrete?(t.flowContinue=!0,m(i)):(a.interrupt=n.currentConstruct&&n.currentConstruct.interruptible,a.containerState={},e.attempt(s,p,m)(i))}function h(e){return r++,a.containerState._closeFlow?p(e):u(e)}function d(t){return n.currentConstruct&&n.currentConstruct.lazy?(a.containerState={},e.attempt(s,p,e.attempt(c,p,e.check(o,p,f)))(t)):p(t)}function f(e){return r=l.length,t.lazy=!0,t.flowContinue=!0,m(e)}function p(e){return t.flowEnd=!0,m(e)}function m(e){return t.continued=r,a.interrupt=a.containerState=void 0,i(e)}},partial:!0};return d;function d(t){return u<l.length?(a.containerState=l[u][1],e.attempt(l[u][0].continuation,f,p)(t)):p(t)}function f(e){return u++,d(e)}function p(i){return t&&t.flowContinue?g(i):(a.interrupt=n&&n.currentConstruct&&n.currentConstruct.interruptible,a.containerState={},e.attempt(s,m,g)(i))}function m(e){return l.push([a.currentConstruct,a.containerState]),a.containerState=void 0,p(e)}function g(t){return null===t?(y(0,!0),void e.consume(t)):(n=n||a.parser.flow(a.now()),e.enter("chunkFlow",{contentType:"flow",previous:r,_tokenizer:n}),v(t))}function v(t){return null===t?(b(e.exit("chunkFlow")),g(t)):i(t)?(e.consume(t),b(e.exit("chunkFlow")),e.check(h,_)):(e.consume(t),v)}function _(e){return y(t.continued,t&&t.flowEnd),u=0,d(e)}function b(e){r&&(r.next=e),r=e,n.lazy=t&&t.lazy,n.defineSkip(e.start),n.write(a.sliceStream(e))}function y(t,i){var o=l.length;for(n&&i&&(n.write([null]),r=n=void 0);o-- >t;)a.containerState=l[o][1],l[o][0].exit.call(a,e);l.length=t}},s={tokenize:function(e,t,n){return r(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},c={tokenize:function(e,t,n){return r(e,e.lazy(this.parser.constructs.flow,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}};t.tokenize=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(523),r=n(65),o=n(167),a=function(e){var t=this,n=e.attempt(o,(function(i){if(null===i)return void e.consume(i);return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,a,r(e,e.attempt(this.parser.constructs.flow,a,e.attempt(i,a)),"linePrefix")));return n;function a(i){if(null!==i)return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(i)}};t.tokenize=a},function(e,t,n){"use strict";var i=n(63),r=n(144),o=n(318),a=n(65),s={tokenize:function(e,t){var n;return function(t){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(t)};function r(t){return null===t?o(t):i(t)?e.check(c,a,o)(t):(e.consume(t),r)}function o(n){return e.exit("chunkContent"),e.exit("content"),t(n)}function a(t){return e.consume(t),e.exit("chunkContent"),n=n.next=e.enter("chunkContent",{contentType:"content",previous:n}),r}},resolve:function(e){return o(e),e},interruptible:!0,lazy:!0},c={tokenize:function(e,t,n){var o=this;return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),a(e,s,"linePrefix")};function s(a){return null===a||i(a)?n(a):o.parser.constructs.disable.null.indexOf("codeIndented")>-1||r(o.events,"linePrefix")<4?e.interrupt(o.parser.constructs.flow,n,t)(a):t(a)}},partial:!0};e.exports=s},function(e,t,n){"use strict";var i=[].splice;e.exports=i},function(e,t,n){"use strict";var i=n(143),r=n(63),o=n(224),a=n(95),s=n(223),c=n(168),l=n(526),u=n(108),h=n(527);e.exports=function(e,t,n){var d=n?u(n):{line:1,column:1,offset:0},f={},p=[],m=[],g=[],v={consume:function(e){r(e)?(d.line++,d.column=1,d.offset+=-3===e?2:1,T()):-1!==e&&(d.column++,d.offset++);d._bufferIndex<0?d._index++:(d._bufferIndex++,d._bufferIndex===m[d._index].length&&(d._bufferIndex=-1,d._index++));_.previous=e},enter:function(e,t){var n=t||{};return n.type=e,n.start=w(),_.events.push(["enter",n,_]),g.push(n),n},exit:function(e){var t=g.pop();return t.end=w(),_.events.push(["exit",t,_]),t},attempt:A((function(e,t){x(e,t.from)})),check:A(E),interrupt:A(E,{interrupt:!0}),lazy:A(E,{lazy:!0})},_={previous:null,events:[],parser:e,sliceStream:y,sliceSerialize:function(e){return l(y(e))},now:w,defineSkip:function(e){f[e.line]=e.column,T()},write:function(e){if(m=o(m,e),O(),null!==m[m.length-1])return[];return x(t,0),_.events=c(p,_.events,_),_.events}},b=t.tokenize.call(_,v);return t.resolveAll&&p.push(t),d._index=0,d._bufferIndex=-1,_;function y(e){return h(m,e)}function w(){return u(d)}function O(){for(var e,t;d._index<m.length;)if("string"===typeof(t=m[d._index]))for(e=d._index,d._bufferIndex<0&&(d._bufferIndex=0);d._index===e&&d._bufferIndex<t.length;)C(t.charCodeAt(d._bufferIndex));else C(t)}function C(e){b=b(e)}function E(e,t){t.restore()}function A(e,t){return function(n,r,o){var a,c,l,u;return n.tokenize||"length"in n?h(s(n)):function(e){if(e in n||null in n)return h(n.null?s(n[e]).concat(s(n.null)):n[e])(e);return o(e)};function h(e){return a=e,f(e[c=0])}function f(e){return function(n){u=function(){var e=w(),t=_.previous,n=_.currentConstruct,i=_.events.length,r=Array.from(g);return{restore:function(){d=e,_.previous=t,_.currentConstruct=n,_.events.length=i,g=r,T()},from:i}}(),l=e,e.partial||(_.currentConstruct=e);if(e.name&&_.parser.constructs.disable.null.indexOf(e.name)>-1)return m();return e.tokenize.call(t?i({},_,t):_,v,p,m)(n)}}function p(t){return e(l,u),r}function m(e){return u.restore(),++c<a.length?f(a[c]):o}}}function x(e,t){e.resolveAll&&p.indexOf(e)<0&&p.push(e),e.resolve&&a(_.events,t,_.events.length-t,e.resolve(_.events.slice(t),_)),e.resolveTo&&(_.events=e.resolveTo(_.events,_))}function T(){d.line in f&&d.column<2&&(d.column=f[d.line],d.offset+=f[d.line]-1)}}},function(e,t,n){"use strict";var i=n(166);e.exports=function(e){for(var t,n,r,o=-1,a=[];++o<e.length;){if("string"===typeof(t=e[o]))n=t;else if(-5===t)n="\r";else if(-4===t)n="\n";else if(-3===t)n="\r\n";else if(-2===t)n="\t";else if(-1===t){if(r)continue;n=" "}else n=i(t);r=-2===t,a.push(n)}return a.join("")}},function(e,t,n){"use strict";e.exports=function(e,t){var n,i=t.start._index,r=t.start._bufferIndex,o=t.end._index,a=t.end._bufferIndex;return i===o?n=[e[i].slice(r,a)]:(n=e.slice(i,o),r>-1&&(n[0]=n[0].slice(r)),a>0&&n.push(e[o].slice(0,a))),n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(319),r=n(529),o=n(532),a=n(534),s=n(535),c=n(537),l=n(539),u=n(540),h=n(541),d=n(542),f=n(543),p=n(544),m=n(545),g=n(548),v=n(228),_=n(549),b=n(550),y=n(551),w=n(552),O=n(553),C=n(328),E={42:w,43:w,45:w,48:w,49:w,50:w,51:w,52:w,53:w,54:w,55:w,56:w,57:w,62:a},A={91:d},x={"-2":u,"-1":u,32:u},T={35:p,42:C,45:[O,C],60:m,61:O,95:C,96:l,126:l},S={38:c,92:s},D={"-5":y,"-4":y,"-3":y,33:_,38:c,42:r,60:[o,g],91:b,92:[f,s],93:v,95:r,96:h},P={null:[r,i.resolver]};t.contentInitial=A,t.disable={null:[]},t.document=E,t.flow=T,t.flowInitial=x,t.insideSpan=P,t.string=S,t.text=D},function(e,t,n){"use strict";var i=n(224),r=n(95),o=n(321),a=n(531),s=n(168),c=n(108),l={name:"attention",tokenize:function(e,t){var n,i=o(this.previous);return function(t){return e.enter("attentionSequence"),n=t,r(t)};function r(a){var s,c,l,u;return a===n?(e.consume(a),r):(s=e.exit("attentionSequence"),l=!(c=o(a))||2===c&&i,u=!i||2===i&&c,s._open=42===n?l:l&&(i||!u),s._close=42===n?u:u&&(c||!l),t(a))}},resolveAll:function(e,t){var n,o,l,u,h,d,f,p,m=-1;for(;++m<e.length;)if("enter"===e[m][0]&&"attentionSequence"===e[m][1].type&&e[m][1]._close)for(n=m;n--;)if("exit"===e[n][0]&&"attentionSequence"===e[n][1].type&&e[n][1]._open&&t.sliceSerialize(e[n][1]).charCodeAt(0)===t.sliceSerialize(e[m][1]).charCodeAt(0)){if((e[n][1]._close||e[m][1]._open)&&(e[m][1].end.offset-e[m][1].start.offset)%3&&!((e[n][1].end.offset-e[n][1].start.offset+e[m][1].end.offset-e[m][1].start.offset)%3))continue;d=e[n][1].end.offset-e[n][1].start.offset>1&&e[m][1].end.offset-e[m][1].start.offset>1?2:1,u={type:d>1?"strongSequence":"emphasisSequence",start:a(c(e[n][1].end),-d),end:c(e[n][1].end)},h={type:d>1?"strongSequence":"emphasisSequence",start:c(e[m][1].start),end:a(c(e[m][1].start),d)},l={type:d>1?"strongText":"emphasisText",start:c(e[n][1].end),end:c(e[m][1].start)},o={type:d>1?"strong":"emphasis",start:c(u.start),end:c(h.end)},e[n][1].end=c(u.start),e[m][1].start=c(h.end),f=[],e[n][1].end.offset-e[n][1].start.offset&&(f=i(f,[["enter",e[n][1],t],["exit",e[n][1],t]])),f=i(f,[["enter",o,t],["enter",u,t],["exit",u,t],["enter",l,t]]),f=i(f,s(t.parser.constructs.insideSpan.null,e.slice(n+1,m),t)),f=i(f,[["exit",l,t],["enter",h,t],["exit",h,t],["exit",o,t]]),e[m][1].end.offset-e[m][1].start.offset?(p=2,f=i(f,[["enter",e[m][1],t],["exit",e[m][1],t]])):p=0,r(e,n-1,m-n+3,f),m=n+f.length-p-2;break}m=-1;for(;++m<e.length;)"attentionSequence"===e[m][1].type&&(e[m][1].type="data");return e}};e.exports=l},function(e,t,n){"use strict";e.exports=/[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/},function(e,t,n){"use strict";e.exports=function(e,t){return e.column+=t,e.offset+=t,e._bufferIndex+=t,e}},function(e,t,n){"use strict";var i=n(169),r=n(145),o=n(533),a=n(227),s={name:"autolink",tokenize:function(e,t,n){var s=1;return function(t){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),c};function c(t){return i(t)?(e.consume(t),l):o(t)?d(t):n(t)}function l(e){return 43===e||45===e||46===e||r(e)?u(e):d(e)}function u(t){return 58===t?(e.consume(t),h):(43===t||45===t||46===t||r(t))&&s++<32?(e.consume(t),u):d(t)}function h(t){return 62===t?(e.exit("autolinkProtocol"),g(t)):32===t||60===t||a(t)?n(t):(e.consume(t),h)}function d(t){return 64===t?(e.consume(t),s=0,f):o(t)?(e.consume(t),d):n(t)}function f(e){return r(e)?p(e):n(e)}function p(t){return 46===t?(e.consume(t),s=0,f):62===t?(e.exit("autolinkProtocol").type="autolinkEmail",g(t)):m(t)}function m(t){return(45===t||r(t))&&s++<63?(e.consume(t),45===t?m:p):n(t)}function g(n){return e.enter("autolinkMarker"),e.consume(n),e.exit("autolinkMarker"),e.exit("autolink"),t}}};e.exports=s},function(e,t,n){"use strict";var i=n(105)(/[#-'*+\--9=?A-Z^-~]/);e.exports=i},function(e,t,n){"use strict";var i=n(94),r=n(65),o={name:"blockQuote",tokenize:function(e,t,n){var r=this;return function(t){if(62===t)return r.containerState.open||(e.enter("blockQuote",{_container:!0}),r.containerState.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(t),e.exit("blockQuoteMarker"),o;return n(t)};function o(n){return i(n)?(e.enter("blockQuotePrefixWhitespace"),e.consume(n),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(n))}},continuation:{tokenize:function(e,t,n){return r(e,e.attempt(o,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},exit:function(e){e.exit("blockQuote")}};e.exports=o},function(e,t,n){"use strict";var i=n(536),r={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return i(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}};e.exports=r},function(e,t,n){"use strict";var i=n(105)(/[!-/:-@[-`{-~]/);e.exports=i},function(e,t,n){"use strict";var i=n(322),r=n(145),o=n(323),a=n(538);function s(e){return e&&"object"===typeof e&&"default"in e?e:{default:e}}var c=s(i),l={name:"characterReference",tokenize:function(e,t,n){var i,s,l=this,u=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),h};function h(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),d):(e.enter("characterReferenceValue"),i=31,s=r,f(t))}function d(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,s=a,f):(e.enter("characterReferenceValue"),i=7,s=o,f(t))}function f(o){var a;return 59===o&&u?(a=e.exit("characterReferenceValue"),s!==r||c.default(l.sliceSerialize(a))?(e.enter("characterReferenceMarker"),e.consume(o),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(o)):s(o)&&u++<i?(e.consume(o),f):n(o)}}};e.exports=l},function(e,t,n){"use strict";var i=n(105)(/[\dA-Fa-f]/);e.exports=i},function(e,t,n){"use strict";var i=n(63),r=n(96),o=n(144),a=n(65),s={name:"codeFenced",tokenize:function(e,t,n){var s,c=this,l={tokenize:function(e,t,n){var r=0;return a(e,(function(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),o(t)}),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4);function o(t){return t===s?(e.consume(t),r++,o):r<h?n(t):(e.exit("codeFencedFenceSequence"),a(e,c,"whitespace")(t))}function c(r){return null===r||i(r)?(e.exit("codeFencedFence"),t(r)):n(r)}},partial:!0},u=o(this.events,"linePrefix"),h=0;return function(t){return e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s=t,d(t)};function d(t){return t===s?(e.consume(t),h++,d):(e.exit("codeFencedFenceSequence"),h<3?n(t):a(e,f,"whitespace")(t))}function f(t){return null===t||i(t)?v(t):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),p(t))}function p(t){return null===t||r(t)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),a(e,m,"whitespace")(t)):96===t&&t===s?n(t):(e.consume(t),p)}function m(t){return null===t||i(t)?v(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(t))}function g(t){return null===t||i(t)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),v(t)):96===t&&t===s?n(t):(e.consume(t),g)}function v(n){return e.exit("codeFencedFence"),c.interrupt?t(n):_(n)}function _(t){return null===t?y(t):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),e.attempt(l,y,u?a(e,_,"linePrefix",u+1):_)):(e.enter("codeFlowValue"),b(t))}function b(t){return null===t||i(t)?(e.exit("codeFlowValue"),_(t)):(e.consume(t),b)}function y(n){return e.exit("codeFenced"),t(n)}},concrete:!0};e.exports=s},function(e,t,n){"use strict";var i=n(63),r=n(95),o=n(144),a=n(65),s={name:"codeIndented",tokenize:function(e,t,n){return e.attempt(c,r,n);function r(n){return null===n?t(n):i(n)?e.attempt(c,r,t)(n):(e.enter("codeFlowValue"),o(n))}function o(t){return null===t||i(t)?(e.exit("codeFlowValue"),r(t)):(e.consume(t),o)}},resolve:function(e,t){var n={type:"codeIndented",start:e[0][1].start,end:e[e.length-1][1].end};return r(e,0,0,[["enter",n,t]]),r(e,e.length,0,[["exit",n,t]]),e}},c={tokenize:function(e,t,n){var r=this;return a(e,(function s(c){if(i(c))return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),a(e,s,"linePrefix",5);return o(r.events,"linePrefix")<4?n(c):t(c)}),"linePrefix",5)},partial:!0};e.exports=s},function(e,t,n){"use strict";var i=n(63),r={name:"codeText",tokenize:function(e,t,n){var r,o,a=0;return function(t){return e.enter("codeText"),e.enter("codeTextSequence"),s(t)};function s(t){return 96===t?(e.consume(t),a++,s):(e.exit("codeTextSequence"),c(t))}function c(t){return null===t?n(t):96===t?(o=e.enter("codeTextSequence"),r=0,u(t)):32===t?(e.enter("space"),e.consume(t),e.exit("space"),c):i(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),c):(e.enter("codeTextData"),l(t))}function l(t){return null===t||32===t||96===t||i(t)?(e.exit("codeTextData"),c(t)):(e.consume(t),l)}function u(n){return 96===n?(e.consume(n),r++,u):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(n)):(o.type="codeTextData",l(n))}},resolve:function(e){var t,n,i=e.length-4,r=3;if(("lineEnding"===e[r][1].type||"space"===e[r][1].type)&&("lineEnding"===e[i][1].type||"space"===e[i][1].type))for(t=r;++t<i;)if("codeTextData"===e[t][1].type){e[i][1].type=e[r][1].type="codeTextPadding",r+=2,i-=2;break}t=r-1,i++;for(;++t<=i;)void 0===n?t!==i&&"lineEnding"!==e[t][1].type&&(n=t):t!==i&&"lineEnding"!==e[t][1].type||(e[n][1].type="codeTextData",t!==n+2&&(e[n][1].end=e[t-1][1].end,e.splice(n+2,t-n-2),i-=t-n-2,t=n+2),n=void 0);return e},previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type}};e.exports=r},function(e,t,n){"use strict";var i=n(63),r=n(96),o=n(222),a=n(324),s=n(325),c=n(65),l=n(326),u=n(327),h={name:"definition",tokenize:function(e,t,n){var r,u=this;return function(t){return e.enter("definition"),s.call(u,e,h,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(t)};function h(t){return r=o(u.sliceSerialize(u.events[u.events.length-1][1]).slice(1,-1)),58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),l(e,a(e,e.attempt(d,c(e,f,"whitespace"),c(e,f,"whitespace")),n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):n(t)}function f(o){return null===o||i(o)?(e.exit("definition"),u.parser.defined.indexOf(r)<0&&u.parser.defined.push(r),t(o)):n(o)}}},d={tokenize:function(e,t,n){return function(t){return r(t)?l(e,o)(t):n(t)};function o(t){return 34===t||39===t||40===t?u(e,c(e,a,"whitespace"),n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t):n(t)}function a(e){return null===e||i(e)?t(e):n(e)}},partial:!0};e.exports=h},function(e,t,n){"use strict";var i=n(63),r={name:"hardBreakEscape",tokenize:function(e,t,n){return function(t){return e.enter("hardBreakEscape"),e.enter("escapeMarker"),e.consume(t),r};function r(r){return i(r)?(e.exit("escapeMarker"),e.exit("hardBreakEscape"),t(r)):n(r)}}};e.exports=r},function(e,t,n){"use strict";var i=n(63),r=n(96),o=n(94),a=n(95),s=n(65),c={name:"headingAtx",tokenize:function(e,t,n){var a=this,c=0;return function(t){return e.enter("atxHeading"),e.enter("atxHeadingSequence"),l(t)};function l(i){return 35===i&&c++<6?(e.consume(i),l):null===i||r(i)?(e.exit("atxHeadingSequence"),a.interrupt?t(i):u(i)):n(i)}function u(n){return 35===n?(e.enter("atxHeadingSequence"),h(n)):null===n||i(n)?(e.exit("atxHeading"),t(n)):o(n)?s(e,u,"whitespace")(n):(e.enter("atxHeadingText"),d(n))}function h(t){return 35===t?(e.consume(t),h):(e.exit("atxHeadingSequence"),u(t))}function d(t){return null===t||35===t||r(t)?(e.exit("atxHeadingText"),u(t)):(e.consume(t),d)}},resolve:function(e,t){var n,i,r=e.length-2,o=3;"whitespace"===e[o][1].type&&(o+=2);r-2>o&&"whitespace"===e[r][1].type&&(r-=2);"atxHeadingSequence"===e[r][1].type&&(o===r-1||r-4>o&&"whitespace"===e[r-2][1].type)&&(r-=o+1===r?2:4);r>o&&(n={type:"atxHeadingText",start:e[o][1].start,end:e[r][1].end},i={type:"chunkText",start:e[o][1].start,end:e[r][1].end,contentType:"text"},a(e,o,r-o+1,[["enter",n,t],["enter",i,t],["exit",i,t],["exit",n,t]]));return e}};e.exports=c},function(e,t,n){"use strict";var i=n(169),r=n(145),o=n(63),a=n(96),s=n(94),c=n(166),l=n(546),u=n(547),h=n(167),d={name:"htmlFlow",tokenize:function(e,t,n){var h,d,p,m,g,v=this;return function(t){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(t),_};function _(r){return 33===r?(e.consume(r),b):47===r?(e.consume(r),O):63===r?(e.consume(r),h=3,v.interrupt?t:V):i(r)?(e.consume(r),p=c(r),d=!0,C):n(r)}function b(r){return 45===r?(e.consume(r),h=2,y):91===r?(e.consume(r),h=5,p="CDATA[",m=0,w):i(r)?(e.consume(r),h=4,v.interrupt?t:V):n(r)}function y(i){return 45===i?(e.consume(i),v.interrupt?t:V):n(i)}function w(i){return i===p.charCodeAt(m++)?(e.consume(i),m===p.length?v.interrupt?t:j:w):n(i)}function O(t){return i(t)?(e.consume(t),p=c(t),C):n(t)}function C(i){return null===i||47===i||62===i||a(i)?47!==i&&d&&u.indexOf(p.toLowerCase())>-1?(h=1,v.interrupt?t(i):j(i)):l.indexOf(p.toLowerCase())>-1?(h=6,47===i?(e.consume(i),E):v.interrupt?t(i):j(i)):(h=7,v.interrupt?n(i):d?x(i):A(i)):45===i||r(i)?(e.consume(i),p+=c(i),C):n(i)}function E(i){return 62===i?(e.consume(i),v.interrupt?t:j):n(i)}function A(t){return s(t)?(e.consume(t),A):R(t)}function x(t){return 47===t?(e.consume(t),R):58===t||95===t||i(t)?(e.consume(t),T):s(t)?(e.consume(t),x):R(t)}function T(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),T):S(t)}function S(t){return 61===t?(e.consume(t),D):s(t)?(e.consume(t),S):x(t)}function D(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),g=t,P):s(t)?(e.consume(t),D):(g=void 0,I(t))}function P(t){return t===g?(e.consume(t),M):null===t||o(t)?n(t):(e.consume(t),P)}function I(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||a(t)?S(t):(e.consume(t),I)}function M(e){return 47===e||62===e||s(e)?x(e):n(e)}function R(t){return 62===t?(e.consume(t),L):n(t)}function L(t){return s(t)?(e.consume(t),L):null===t||o(t)?j(t):n(t)}function j(t){return 45===t&&2===h?(e.consume(t),z):60===t&&1===h?(e.consume(t),k):62===t&&4===h?(e.consume(t),U):63===t&&3===h?(e.consume(t),V):93===t&&5===h?(e.consume(t),H):!o(t)||6!==h&&7!==h?null===t||o(t)?F(t):(e.consume(t),j):e.check(f,U,F)(t)}function F(t){return e.exit("htmlFlowData"),N(t)}function N(t){return null===t?W(t):o(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),N):(e.enter("htmlFlowData"),j(t))}function z(t){return 45===t?(e.consume(t),V):j(t)}function k(t){return 47===t?(e.consume(t),p="",B):j(t)}function B(t){return 62===t&&u.indexOf(p.toLowerCase())>-1?(e.consume(t),U):i(t)&&p.length<8?(e.consume(t),p+=c(t),B):j(t)}function H(t){return 93===t?(e.consume(t),V):j(t)}function V(t){return 62===t?(e.consume(t),U):j(t)}function U(t){return null===t||o(t)?(e.exit("htmlFlowData"),W(t)):(e.consume(t),U)}function W(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},f={tokenize:function(e,t,n){return function(i){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),e.attempt(h,t,n)}},partial:!0};e.exports=d},function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},function(e,t,n){"use strict";e.exports=["pre","script","style","textarea"]},function(e,t,n){"use strict";var i=n(169),r=n(145),o=n(63),a=n(96),s=n(94),c=n(65),l={name:"htmlText",tokenize:function(e,t,n){var l,u,h,d,f=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),p};function p(t){return 33===t?(e.consume(t),m):47===t?(e.consume(t),S):63===t?(e.consume(t),x):i(t)?(e.consume(t),I):n(t)}function m(t){return 45===t?(e.consume(t),g):91===t?(e.consume(t),u="CDATA[",h=0,w):i(t)?(e.consume(t),A):n(t)}function g(t){return 45===t?(e.consume(t),v):n(t)}function v(t){return null===t||62===t?n(t):45===t?(e.consume(t),_):b(t)}function _(e){return null===e||62===e?n(e):b(e)}function b(t){return null===t?n(t):45===t?(e.consume(t),y):o(t)?(d=b,k(t)):(e.consume(t),b)}function y(t){return 45===t?(e.consume(t),H):b(t)}function w(t){return t===u.charCodeAt(h++)?(e.consume(t),h===u.length?O:w):n(t)}function O(t){return null===t?n(t):93===t?(e.consume(t),C):o(t)?(d=O,k(t)):(e.consume(t),O)}function C(t){return 93===t?(e.consume(t),E):O(t)}function E(t){return 62===t?H(t):93===t?(e.consume(t),E):O(t)}function A(t){return null===t||62===t?H(t):o(t)?(d=A,k(t)):(e.consume(t),A)}function x(t){return null===t?n(t):63===t?(e.consume(t),T):o(t)?(d=x,k(t)):(e.consume(t),x)}function T(e){return 62===e?H(e):x(e)}function S(t){return i(t)?(e.consume(t),D):n(t)}function D(t){return 45===t||r(t)?(e.consume(t),D):P(t)}function P(t){return o(t)?(d=P,k(t)):s(t)?(e.consume(t),P):H(t)}function I(t){return 45===t||r(t)?(e.consume(t),I):47===t||62===t||a(t)?M(t):n(t)}function M(t){return 47===t?(e.consume(t),H):58===t||95===t||i(t)?(e.consume(t),R):o(t)?(d=M,k(t)):s(t)?(e.consume(t),M):H(t)}function R(t){return 45===t||46===t||58===t||95===t||r(t)?(e.consume(t),R):L(t)}function L(t){return 61===t?(e.consume(t),j):o(t)?(d=L,k(t)):s(t)?(e.consume(t),L):M(t)}function j(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),l=t,F):o(t)?(d=j,k(t)):s(t)?(e.consume(t),j):(e.consume(t),l=void 0,z)}function F(t){return t===l?(e.consume(t),N):null===t?n(t):o(t)?(d=F,k(t)):(e.consume(t),F)}function N(e){return 62===e||47===e||a(e)?M(e):n(e)}function z(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):62===t||a(t)?M(t):(e.consume(t),z)}function k(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),c(e,B,"linePrefix",f.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}function B(t){return e.enter("htmlTextData"),d(t)}function H(i){return 62===i?(e.consume(i),e.exit("htmlTextData"),e.exit("htmlText"),t):n(i)}}};e.exports=l},function(e,t,n){"use strict";var i={name:"labelStartImage",tokenize:function(e,t,n){var i=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),r};function r(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),o):n(t)}function o(e){return 94===e&&"_hiddenFootnoteSupport"in i.parser.constructs?n(e):t(e)}},resolveAll:n(228).resolveAll};e.exports=i},function(e,t,n){"use strict";var i={name:"labelStartLink",tokenize:function(e,t,n){var i=this;return function(t){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelLink"),r};function r(e){return 94===e&&"_hiddenFootnoteSupport"in i.parser.constructs?n(e):t(e)}},resolveAll:n(228).resolveAll};e.exports=i},function(e,t,n){"use strict";var i=n(65),r={name:"lineEnding",tokenize:function(e,t){return function(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),i(e,t,"linePrefix")}}};e.exports=r},function(e,t,n){"use strict";var i=n(323),r=n(94),o=n(144),a=n(317),s=n(65),c=n(167),l=n(328),u={name:"list",tokenize:function(e,t,n){var s=this,u=o(s.events,"linePrefix"),d=0;return function(t){var r=s.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===r?!s.containerState.marker||t===s.containerState.marker:i(t)){if(s.containerState.type||(s.containerState.type=r,e.enter(r,{_container:!0})),"listUnordered"===r)return e.enter("listItemPrefix"),42===t||45===t?e.check(l,n,p)(t):p(t);if(!s.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),f(t)}return n(t)};function f(t){return i(t)&&++d<10?(e.consume(t),f):(!s.interrupt||d<2)&&(s.containerState.marker?t===s.containerState.marker:41===t||46===t)?(e.exit("listItemValue"),p(t)):n(t)}function p(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),s.containerState.marker=s.containerState.marker||t,e.check(c,s.interrupt?n:m,e.attempt(h,v,g))}function m(e){return s.containerState.initialBlankLine=!0,u++,v(e)}function g(t){return r(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),v):n(t)}function v(n){return s.containerState.size=u+a(s.sliceStream(e.exit("listItemPrefix"))),t(n)}},continuation:{tokenize:function(e,t,n){var i=this;return i.containerState._closeFlow=void 0,e.check(c,(function(n){return i.containerState.furtherBlankLines=i.containerState.furtherBlankLines||i.containerState.initialBlankLine,s(e,t,"listItemIndent",i.containerState.size+1)(n)}),(function(n){if(i.containerState.furtherBlankLines||!r(n))return i.containerState.furtherBlankLines=i.containerState.initialBlankLine=void 0,o(n);return i.containerState.furtherBlankLines=i.containerState.initialBlankLine=void 0,e.attempt(d,t,o)(n)}));function o(r){return i.containerState._closeFlow=!0,i.interrupt=void 0,s(e,e.attempt(u,t,n),"linePrefix",i.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)(r)}}},exit:function(e){e.exit(this.containerState.type)}},h={tokenize:function(e,t,n){var i=this;return s(e,(function(e){return r(e)||!o(i.events,"listItemPrefixWhitespace")?n(e):t(e)}),"listItemPrefixWhitespace",i.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:5)},partial:!0},d={tokenize:function(e,t,n){var i=this;return s(e,(function(e){return o(i.events,"listItemIndent")===i.containerState.size?t(e):n(e)}),"listItemIndent",i.containerState.size+1)},partial:!0};e.exports=u},function(e,t,n){"use strict";var i=n(63),r=n(108),o=n(65),a={name:"setextUnderline",tokenize:function(e,t,n){var r,a,s=this,c=s.events.length;for(;c--;)if("lineEnding"!==s.events[c][1].type&&"linePrefix"!==s.events[c][1].type&&"content"!==s.events[c][1].type){a="paragraph"===s.events[c][1].type;break}return function(t){if(!s.lazy&&(s.interrupt||a))return e.enter("setextHeadingLine"),e.enter("setextHeadingLineSequence"),r=t,l(t);return n(t)};function l(t){return t===r?(e.consume(t),l):(e.exit("setextHeadingLineSequence"),o(e,u,"lineSuffix")(t))}function u(r){return null===r||i(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}},resolveTo:function(e,t){var n,i,o,a,s=e.length;for(;s--;)if("enter"===e[s][0]){if("content"===e[s][1].type){n=s;break}"paragraph"===e[s][1].type&&(i=s)}else"content"===e[s][1].type&&e.splice(s,1),o||"definition"!==e[s][1].type||(o=s);a={type:"setextHeading",start:r(e[i][1].start),end:r(e[e.length-1][1].end)},e[i][1].type="setextHeadingText",o?(e.splice(i,0,["enter",a,t]),e.splice(o+1,0,["exit",e[n][1],t]),e[n][1].end=r(e[o][1].end)):e[n][1]=a;return e.push(["exit",a,t]),e}};e.exports=a},function(e,t,n){"use strict";var i=/[\0\t\n\r]/g;e.exports=function(){var e,t=!0,n=1,r="";return function(o,a,s){var c,l,u,h,d,f=[];o=r+o.toString(a),u=0,r="",t&&(65279===o.charCodeAt(0)&&u++,t=void 0);for(;u<o.length;){if(i.lastIndex=u,c=i.exec(o),h=c?c.index:o.length,d=o.charCodeAt(h),!c){r=o.slice(u);break}if(10===d&&u===h&&e)f.push(-3),e=void 0;else if(e&&(f.push(-5),e=void 0),u<h&&(f.push(o.slice(u,h)),n+=h-u),0===d)f.push(65533),n++;else if(9===d)for(l=4*Math.ceil(n/4),f.push(-2);n++<l;)f.push(-1);else 10===d?(f.push(-4),n=1):(e=!0,n=1);u=h+1}s&&(e&&f.push(-5),r&&f.push(r),f.push(null));return f}}},function(e,t,n){"use strict";var i=n(318);e.exports=function(e){for(;!i(e););return e}},function(e,t,n){"use strict";var i=n(557);e.exports=function(e,t){e&&!e.process&&(t=e,e=null);return e?function(e,t){return function(n,r,o){e.run(i(n,t),r,(function(e){o(e)}))}}(e,t):function(e){return function(t){return i(t,e)}}(t)}},function(e,t,n){"use strict";e.exports=n(558)},function(e,t,n){"use strict";e.exports=function(e,t){var n=function(e,t){var n=t||{};void 0===n.allowDangerousHTML||d||(d=!0,console.warn("mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead"));var i=n.allowDangerousHtml||n.allowDangerousHTML,c={};return f.dangerous=i,f.definition=s(e),f.footnoteById=c,f.footnoteOrder=[],f.augment=l,f.handlers=Object.assign({},u,n.handlers),f.unknownHandler=n.unknownHandler,f.passThrough=n.passThrough,r(e,"footnoteDefinition",(function(e){var t=String(e.identifier).toUpperCase();h.call(c,t)||(c[t]=e)})),f;function l(e,t){var n,i;return e&&e.data&&((n=e.data).hName&&("element"!==t.type&&(t={type:"element",tagName:"",properties:{},children:[]}),t.tagName=n.hName),"element"===t.type&&n.hProperties&&(t.properties=Object.assign({},t.properties,n.hProperties)),t.children&&n.hChildren&&(t.children=n.hChildren)),i=e&&e.position?e:{position:e},a(i)||(t.position={start:o.start(i),end:o.end(i)}),t}function f(e,t,n,i){return void 0!==i&&null!==i||"object"!==typeof n||!("length"in n)||(i=n,n={}),l(e,{type:"element",tagName:t,properties:n||{},children:i||[]})}}(e,t),f=c(n,e),p=l(n);p&&(f.children=f.children.concat(i("text","\n"),p));return f};var i=n(75),r=n(229),o=n(331),a=n(560),s=n(561),c=n(332),l=n(562),u=n(563),h={}.hasOwnProperty,d=!1},function(e,t){e.exports=function(e){return e}},function(e,t,n){"use strict";e.exports=function(e){return!e||!e.position||!e.position.start||!e.position.start.line||!e.position.start.column||!e.position.end||!e.position.end.line||!e.position.end.column}},function(e,t,n){"use strict";var i=n(229);e.exports=function(e,t){return function(e){return function(t){var n=t&&o(t);return n&&r.call(e,n)?e[n]:null}}(function(e){var t={};if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return i(e,"definition",(function(e){var n=o(e.identifier);r.call(t,n)||(t[n]=e)})),t}(e))};var r={}.hasOwnProperty;function o(e){return e.toUpperCase()}},function(e,t,n){"use strict";e.exports=function(e){var t,n,a,s,c=e.footnoteById,l=e.footnoteOrder,u=l.length,h=-1,d=[];for(;++h<u;)(t=c[l[h].toUpperCase()])&&(a=t.children.concat(),s=a[a.length-1],n={type:"link",url:"#fnref-"+t.identifier,data:{hProperties:{className:["footnote-backref"]}},children:[{type:"text",value:"\u21a9"}]},s&&"paragraph"===s.type||(s={type:"paragraph",children:[]},a.push(s)),s.children.push(n),d.push({type:"listItem",data:{hProperties:{id:"fn-"+t.identifier}},children:a,position:t.position}));if(0===d.length)return null;return e(null,"div",{className:["footnotes"]},o([i(e),r(e,{type:"list",ordered:!0,children:d})],!0))};var i=n(333),r=n(334),o=n(146)},function(e,t,n){"use strict";function i(){return null}e.exports={blockquote:n(564),break:n(565),code:n(566),delete:n(567),emphasis:n(568),footnoteReference:n(335),footnote:n(569),heading:n(570),html:n(571),imageReference:n(572),image:n(573),inlineCode:n(574),linkReference:n(575),link:n(576),listItem:n(577),list:n(334),paragraph:n(578),root:n(579),strong:n(580),table:n(581),text:n(582),thematicBreak:n(333),toml:i,yaml:i,definition:i,footnoteDefinition:i}},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"blockquote",i(r(e,t),!0))};var i=n(146),r=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return[e(t,"br"),i("text","\n")]};var i=n(75)},function(e,t,n){"use strict";e.exports=function(e,t){var n,r=t.value?t.value+"\n":"",o=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),a={};o&&(a.className=["language-"+o]);n=e(t,"code",a,[i("text",r)]),t.meta&&(n.data={meta:t.meta});return e(t.position,"pre",[n])};var i=n(75)},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"del",i(e,t))};var i=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"em",i(e,t))};var i=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){var n=e.footnoteById,r=e.footnoteOrder,o=1;for(;o in n;)o++;return o=String(o),r.push(o),n[o]={type:"footnoteDefinition",identifier:o,children:[{type:"paragraph",children:t.children}],position:t.position},i(e,{type:"footnoteReference",identifier:o,position:t.position})};var i=n(335)},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"h"+t.depth,i(e,t))};var i=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return e.dangerous?e.augment(t,i("raw",t.value)):null};var i=n(75)},function(e,t,n){"use strict";e.exports=function(e,t){var n,o=e.definition(t.identifier);if(!o)return r(e,t);n={src:i(o.url||""),alt:t.alt},null!==o.title&&void 0!==o.title&&(n.title=o.title);return e(t,"img",n)};var i=n(170),r=n(336)},function(e,t,n){"use strict";var i=n(170);e.exports=function(e,t){var n={src:i(t.url),alt:t.alt};null!==t.title&&void 0!==t.title&&(n.title=t.title);return e(t,"img",n)}},function(e,t,n){"use strict";e.exports=function(e,t){var n=t.value.replace(/\r?\n|\r/g," ");return e(t,"code",[i("text",n)])};var i=n(75)},function(e,t,n){"use strict";e.exports=function(e,t){var n,a=e.definition(t.identifier);if(!a)return r(e,t);n={href:i(a.url||"")},null!==a.title&&void 0!==a.title&&(n.title=a.title);return e(t,"a",n,o(e,t))};var i=n(170),r=n(336),o=n(69)},function(e,t,n){"use strict";var i=n(170),r=n(69);e.exports=function(e,t){var n={href:i(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);return e(t,"a",n,r(e,t))}},function(e,t,n){"use strict";e.exports=function(e,t,n){var a,s,c,l=r(e,t),u=l[0],h=n?function(e){var t=e.spread,n=e.children,i=n.length,r=-1;for(;!t&&++r<i;)t=o(n[r]);return t}(n):o(t),d={},f=[];"boolean"===typeof t.checked&&(u&&"p"===u.tagName||(u=e(null,"p",[]),l.unshift(u)),u.children.length>0&&u.children.unshift(i("text"," ")),u.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),d.className=["task-list-item"]);a=l.length,s=-1;for(;++s<a;)c=l[s],(h||0!==s||"p"!==c.tagName)&&f.push(i("text","\n")),"p"!==c.tagName||h?f.push(c):f=f.concat(c.children);a&&(h||"p"!==c.tagName)&&f.push(i("text","\n"));return e(t,"li",d,f)};var i=n(75),r=n(69);function o(e){var t=e.spread;return void 0===t||null===t?e.children.length>1:t}},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"p",i(e,t))};var i=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return e.augment(t,i("root",r(o(e,t))))};var i=n(75),r=n(146),o=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return e(t,"strong",i(e,t))};var i=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){var n,a,s,c,l,u=t.children,h=u.length,d=t.align||[],f=d.length,p=[];for(;h--;){for(a=u[h].children,c=0===h?"th":"td",n=f||a.length,s=[];n--;)l=a[n],s[n]=e(l,c,{align:d[n]},l?o(e,l):[]);p[h]=e(u[h],"tr",r(s,!0))}return e(t,"table",r([e(p[0].position,"thead",r([p[0]],!0))].concat(p[1]?e({start:i.start(p[1]),end:i.end(p[p.length-1])},"tbody",r(p.slice(1),!0)):[]),!0))};var i=n(331),r=n(146),o=n(69)},function(e,t,n){"use strict";e.exports=function(e,t){return e.augment(t,i("text",String(t.value).replace(/[ \t]*(\r?\n|\r)[ \t]*/g,"$1")))};var i=n(75)},function(e,t,n){"use strict";var i=n(337),r=n(339),o=n(343),a=n(344),s=n(347),c=n(584);e.exports=i([o,r,a,s,c])},function(e,t,n){"use strict";var i=n(171),r=n(117),o=n(345),a=i.boolean,s=i.overloadedBoolean,c=i.booleanish,l=i.number,u=i.spaceSeparated,h=i.commaSeparated;e.exports=r({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:o,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:h,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:a,allowPaymentRequest:a,allowUserMedia:a,alt:null,as:null,async:a,autoCapitalize:null,autoComplete:u,autoFocus:a,autoPlay:a,capture:a,charSet:null,checked:a,cite:null,className:u,cols:l,colSpan:null,content:null,contentEditable:c,controls:a,controlsList:u,coords:l|h,crossOrigin:null,data:null,dateTime:null,decoding:null,default:a,defer:a,dir:null,dirName:null,disabled:a,download:s,draggable:c,encType:null,enterKeyHint:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:a,formTarget:null,headers:u,height:l,hidden:a,high:l,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:h,inputMode:null,integrity:null,is:null,isMap:a,itemId:null,itemProp:u,itemRef:u,itemScope:a,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:a,low:l,manifest:null,max:null,maxLength:l,media:null,method:null,min:null,minLength:l,multiple:a,muted:a,name:null,nonce:null,noModule:a,noValidate:a,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforePrint:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextMenu:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:a,optimum:l,pattern:null,ping:u,placeholder:null,playsInline:a,poster:null,preload:null,readOnly:a,referrerPolicy:null,rel:u,required:a,reversed:a,rows:l,rowSpan:l,sandbox:u,scope:null,scoped:a,seamless:a,selected:a,shape:null,size:l,sizes:null,slot:null,span:l,spellCheck:c,src:null,srcDoc:null,srcLang:null,srcSet:h,start:l,step:null,style:null,tabIndex:l,target:null,title:null,translate:null,type:null,typeMustMatch:a,useMap:null,value:c,width:l,wrap:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:l,borderColor:null,bottomMargin:l,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:a,declare:a,event:null,face:null,frame:null,frameBorder:null,hSpace:l,leftMargin:l,link:null,longDesc:null,lowSrc:null,marginHeight:l,marginWidth:l,noResize:a,noHref:a,noShade:a,noWrap:a,object:null,profile:null,prompt:null,rev:null,rightMargin:l,rules:null,scheme:null,scrolling:c,standby:null,summary:null,text:null,topMargin:l,valueType:null,version:null,vAlign:null,vLink:null,vSpace:l,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:a,disableRemotePlayback:a,prefix:null,property:null,results:l,security:null,unselectable:null}})},function(e,t,n){var i=n(229),r=[].splice;e.exports=function(e){if(e.allowedElements&&e.disallowedElements)throw new TypeError("Only one of `allowedElements` and `disallowedElements` should be defined");return e.allowedElements||e.disallowedElements||e.allowElement?function(e){i(e,"element",t)}:void 0;function t(t,n,i){var o;if(e.allowedElements?o=!e.allowedElements.includes(t.tagName):e.disallowedElements&&(o=e.disallowedElements.includes(t.tagName)),!o&&e.allowElement&&(o=!e.allowElement(t,n,i)),o){var a=[n,1];return e.unwrapDisallowed&&t.children&&(a=a.concat(t.children)),r.apply(i.children,a),n}}}},function(e,t){var n=["http","https","mailto","tel"];e.exports=function(e){var t=(e||"").trim(),i=t.charAt(0);if("#"===i||"/"===i)return t;var r=t.indexOf(":");if(-1===r)return t;var o=-1;for(;++o<n.length;){var a=n[o];if(r===a.length&&t.slice(0,a.length).toLowerCase()===a)return t}if(-1!==(o=t.indexOf("?"))&&r>o)return t;if(-1!==(o=t.indexOf("#"))&&r>o)return t;return"javascript:void(0)"}},function(e,t,n){"use strict";var i=n(2),r=n(588),o=n(590),a=n(592),s=n(593),c=n(594),l=n(595),u=n(596);t.hastToReact=p,t.hastChildrenToReact=f;var h={}.hasOwnProperty,d=new Set(["table","thead","tbody","tfoot","tr"]);function f(e,t){for(var n,i=[],r=-1;++r<t.children.length;)"element"===(n=t.children[r]).type?i.push(p(e,n,r,t)):"text"===n.type?"element"===t.type&&d.has(t.tagName)&&"\n"===n.value||i.push(n.value):"raw"!==n.type||e.options.skipHtml||i.push(n.value);return i}function p(e,t,n,a){var s,c=e.options,l=e.schema,u=t.tagName,d={},p=l;for(s in"html"===l.space&&"svg"===u&&(p=o,e.schema=p),t.properties)h.call(t.properties,s)&&g(d,s,t.properties[s],e);"ol"!==u&&"ul"!==u||e.listDepth++;var v=f(e,t);"ol"!==u&&"ul"!==u||e.listDepth--,e.schema=l;var _,b=t.position||{start:{line:null,column:null,offset:null},end:{line:null,column:null,offset:null}},y=c.components&&h.call(c.components,u)?c.components[u]:u,w="string"===typeof y||y===i.Fragment;if(!r.isValidElementType(y))throw new TypeError("Component for name `".concat(u,"` not defined or is not renderable"));if(d.key=[u,b.start.line,b.start.column,n].join("-"),"a"===u&&c.linkTarget&&(d.target="function"===typeof c.linkTarget?c.linkTarget(d.href,t.children,d.title):c.linkTarget),"a"===u&&c.transformLinkUri&&(d.href=c.transformLinkUri(d.href,t.children,d.title)),w||"code"!==u||"pre"===a.tagName||(d.inline=!0),w||"h1"!==u&&"h2"!==u&&"h3"!==u&&"h4"!==u&&"h5"!==u&&"h6"!==u||(d.level=parseInt(u.charAt(1),10)),"img"===u&&c.transformImageUri&&(d.src=c.transformImageUri(d.src,d.alt,d.title)),!w&&"li"===u){var O=function(e){var t=-1;for(;++t<e.children.length;){var n=e.children[t];if("element"===n.type&&"input"===n.tagName)return n}return null}(t);d.checked=O?Boolean(O.properties.checked):null,d.index=m(a,t),d.ordered="ol"===a.tagName}return w||"ol"!==u&&"ul"!==u||(d.ordered="ol"===u,d.depth=e.listDepth),"td"!==u&&"th"!==u||(d.align&&(d.style||(d.style={}),d.style.textAlign=d.align,delete d.align),w||(d.isHeader="th"===u)),w||"tr"!==u||(d.isHeader=Boolean("thead"===a.tagName)),c.sourcePos&&(d["data-sourcepos"]=[(_=b).start.line,":",_.start.column,"-",_.end.line,":",_.end.column].map((function(e){return String(e)})).join("")),!w&&c.rawSourcePos&&(d.sourcePosition=t.position),!w&&c.includeElementIndex&&(d.index=m(a,t),d.siblingCount=m(a)),w||(d.node=t),v.length>0?i.createElement(y,d,v):i.createElement(y,d)}function m(e,t){for(var n=-1,i=0;++n<e.children.length&&e.children[n]!==t;)"element"===e.children[n].type&&i++;return i}function g(e,t,n,i){var r=a(i.schema,t),o=n;null!==o&&void 0!==o&&o===o&&(o&&"object"===typeof o&&"length"in o&&(o=(r.commaSeparated?l:c).stringify(o)),"style"===r.property&&"string"===typeof o&&(o=function(e){var t={};try{u(e,(function(e,n){var i="-ms-"===e.slice(0,4)?"ms-".concat(e.slice(4)):e;t[i.replace(/-([a-z])/g,v)]=n}))}catch(n){}return t}(o)),r.space?e[h.call(s,r.property)?s[r.property]:r.property]=o:e[r.attribute]=o)}function v(e,t){return t.toUpperCase()}},function(e,t,n){"use strict";e.exports=n(589)},function(e,t,n){"use strict";var i=60103,r=60106,o=60107,a=60108,s=60114,c=60109,l=60110,u=60112,h=60113,d=60120,f=60115,p=60116,m=60121,g=60122,v=60117,_=60129,b=60131;if("function"===typeof Symbol&&Symbol.for){var y=Symbol.for;i=y("react.element"),r=y("react.portal"),o=y("react.fragment"),a=y("react.strict_mode"),s=y("react.profiler"),c=y("react.provider"),l=y("react.context"),u=y("react.forward_ref"),h=y("react.suspense"),d=y("react.suspense_list"),f=y("react.memo"),p=y("react.lazy"),m=y("react.block"),g=y("react.server.block"),v=y("react.fundamental"),_=y("react.debug_trace_mode"),b=y("react.legacy_hidden")}function w(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case i:switch(e=e.type){case o:case s:case a:case h:case d:return e;default:switch(e=e&&e.$$typeof){case l:case u:case p:case f:case c:return e;default:return t}}case r:return t}}}var O=c,C=i,E=u,A=o,x=p,T=f,S=r,D=s,P=a,I=h;t.ContextConsumer=l,t.ContextProvider=O,t.Element=C,t.ForwardRef=E,t.Fragment=A,t.Lazy=x,t.Memo=T,t.Portal=S,t.Profiler=D,t.StrictMode=P,t.Suspense=I,t.isAsyncMode=function(){return!1},t.isConcurrentMode=function(){return!1},t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===c},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===i},t.isForwardRef=function(e){return w(e)===u},t.isFragment=function(e){return w(e)===o},t.isLazy=function(e){return w(e)===p},t.isMemo=function(e){return w(e)===f},t.isPortal=function(e){return w(e)===r},t.isProfiler=function(e){return w(e)===s},t.isStrictMode=function(e){return w(e)===a},t.isSuspense=function(e){return w(e)===h},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===o||e===s||e===_||e===a||e===h||e===d||e===b||"object"===typeof e&&null!==e&&(e.$$typeof===p||e.$$typeof===f||e.$$typeof===c||e.$$typeof===l||e.$$typeof===u||e.$$typeof===v||e.$$typeof===m||e[0]===g)},t.typeOf=w},function(e,t,n){"use strict";var i=n(337),r=n(339),o=n(343),a=n(344),s=n(347),c=n(591);e.exports=i([o,r,a,s,c])},function(e,t,n){"use strict";var i=n(171),r=n(117),o=n(346),a=i.boolean,s=i.number,c=i.spaceSeparated,l=i.commaSeparated,u=i.commaOrSpaceSeparated;e.exports=r({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:o,properties:{about:u,accentHeight:s,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:s,amplitude:s,arabicForm:null,ascent:s,attributeName:null,attributeType:null,azimuth:s,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:s,by:null,calcMode:null,capHeight:s,className:c,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:s,diffuseConstant:s,direction:null,display:null,dur:null,divisor:s,dominantBaseline:null,download:a,dx:null,dy:null,edgeMode:null,editable:null,elevation:s,enableBackground:null,end:null,event:null,exponent:s,externalResourcesRequired:null,fill:null,fillOpacity:s,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:l,g2:l,glyphName:l,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:s,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:s,horizOriginX:s,horizOriginY:s,id:null,ideographic:s,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:s,k:s,k1:s,k2:s,k3:s,k4:s,kernelMatrix:u,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:s,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:s,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:s,overlineThickness:s,paintOrder:null,panose1:null,path:null,pathLength:s,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:c,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:s,pointsAtY:s,pointsAtZ:s,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:u,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:u,rev:u,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:u,requiredFeatures:u,requiredFonts:u,requiredFormats:u,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:s,specularExponent:s,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:s,strikethroughThickness:s,string:null,stroke:null,strokeDashArray:u,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:s,strokeOpacity:s,strokeWidth:null,style:null,surfaceScale:s,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:u,tabIndex:s,tableValues:null,target:null,targetX:s,targetY:s,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:u,to:null,transform:null,u1:null,u2:null,underlinePosition:s,underlineThickness:s,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:s,values:null,vAlphabetic:s,vMathematical:s,vectorEffect:null,vHanging:s,vIdeographic:s,version:null,vertAdvY:s,vertOriginX:s,vertOriginY:s,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:s,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}})},function(e,t,n){"use strict";var i=n(340),r=n(341),o=n(342);e.exports=function(e,t){var n=i(t),h=t,d=o;if(n in e.normal)return e.property[e.normal[n]];n.length>4&&"data"===n.slice(0,4)&&a.test(t)&&("-"===t.charAt(4)?h=function(e){var t=e.slice(5).replace(s,u);return"data"+t.charAt(0).toUpperCase()+t.slice(1)}(t):t=function(e){var t=e.slice(4);if(s.test(t))return e;"-"!==(t=t.replace(c,l)).charAt(0)&&(t="-"+t);return"data"+t}(t),d=r);return new d(h,t)};var a=/^data[-\w.:]+$/i,s=/-[a-z]/g,c=/[A-Z]/g;function l(e){return"-"+e.toLowerCase()}function u(e){return e.charAt(1).toUpperCase()}},function(e){e.exports=JSON.parse('{"classId":"classID","dataType":"datatype","itemId":"itemID","strokeDashArray":"strokeDasharray","strokeDashOffset":"strokeDashoffset","strokeLineCap":"strokeLinecap","strokeLineJoin":"strokeLinejoin","strokeMiterLimit":"strokeMiterlimit","typeOf":"typeof","xLinkActuate":"xlinkActuate","xLinkArcRole":"xlinkArcrole","xLinkHref":"xlinkHref","xLinkRole":"xlinkRole","xLinkShow":"xlinkShow","xLinkTitle":"xlinkTitle","xLinkType":"xlinkType","xmlnsXLink":"xmlnsXlink"}')},function(e,t,n){"use strict";t.parse=function(e){var t=String(e||"").trim();return""===t?[]:t.split(i)},t.stringify=function(e){return e.join(" ").trim()};var i=/[ \t\n\r\f]+/g},function(e,t,n){"use strict";t.parse=function(e){var t,n=[],i=String(e||""),r=i.indexOf(","),o=0,a=!1;for(;!a;)-1===r&&(r=i.length,a=!0),!(t=i.slice(o,r).trim())&&a||n.push(t),o=r+1,r=i.indexOf(",",o);return n},t.stringify=function(e,t){var n=t||{},i=!1===n.padLeft?"":" ",r=n.padRight?" ":"";""===e[e.length-1]&&(e=e.concat(""));return e.join(r+","+i).trim()}},function(e,t,n){var i=n(597);e.exports=function(e,t){var n,r=null;if(!e||"string"!==typeof e)return r;for(var o,a,s=i(e),c="function"===typeof t,l=0,u=s.length;l<u;l++)o=(n=s[l]).property,a=n.value,c?t(o,a,n):a&&(r||(r={}),r[o]=a);return r}},function(e,t){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,i=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g;function u(e){return e?e.replace(l,""):""}e.exports=function(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var l=1,h=1;function d(e){var t=e.match(i);t&&(l+=t.length);var n=e.lastIndexOf("\n");h=~n?e.length-n:h+e.length}function f(){var e={line:l,column:h};return function(t){return t.position=new p(e),_(),t}}function p(e){this.start=e,this.end={line:l,column:h},this.source=t.source}p.prototype.content=e;var m=[];function g(n){var i=new Error(t.source+":"+l+":"+h+": "+n);if(i.reason=n,i.filename=t.source,i.line=l,i.column=h,i.source=e,!t.silent)throw i;m.push(i)}function v(t){var n=t.exec(e);if(n){var i=n[0];return d(i),e=e.slice(i.length),n}}function _(){v(r)}function b(e){var t;for(e=e||[];t=y();)!1!==t&&e.push(t);return e}function y(){var t=f();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;""!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,""===e.charAt(n-1))return g("End of comment missing");var i=e.slice(2,n-2);return h+=2,d(i),e=e.slice(n),h+=2,t({type:"comment",comment:i})}}function w(){var e=f(),t=v(o);if(t){if(y(),!v(a))return g("property missing ':'");var i=v(s),r=e({type:"declaration",property:u(t[0].replace(n,"")),value:i?u(i[0].replace(n,"")):""});return v(c),r}}return _(),function(){var e,t=[];for(b(t);e=w();)!1!==e&&(t.push(e),b(t));return t}()}},function(e,t,n){e.exports=n(599)},function(e,t,n){var i=n(320),r=n(600),o=n(602),a=n(603),s=n(605);e.exports=function(e){return i([r,o(e),a,s])}},function(e,t,n){e.exports=n(601)},function(e,t,n){var i=n(169),r=n(145),o=n(227),a=n(63),s=n(225),c=n(226),l={tokenize:function(e,t,n){return function(t){return e.consume(t),i};function i(t){return 87===t||t-32===87?(e.consume(t),r):n(t)}function r(t){return 87===t||t-32===87?(e.consume(t),o):n(t)}function o(t){return 46===t?(e.consume(t),s):n(t)}function s(e){return null===e||a(e)?n(e):t(e)}},partial:!0},u={tokenize:function(e,t,n){var i,r;return a;function a(t){return 38===t?e.check(f,u,l)(t):46===t||95===t?e.check(d,u,l)(t):o(t)||c(t)||45!==t&&s(t)?u(t):(e.consume(t),a)}function l(t){return 46===t?(r=i,i=void 0,e.consume(t),a):(95===t&&(i=!0),e.consume(t),a)}function u(e){return r||i?n(e):t(e)}},partial:!0},h={tokenize:function(e,t){var n=0;return i;function i(a){return 38===a?e.check(f,t,r)(a):(40===a&&n++,41===a?e.check(d,o,r)(a):y(a)?t(a):b(a)?e.check(d,t,r)(a):(e.consume(a),i))}function r(t){return e.consume(t),i}function o(e){return--n<0?t(e):r(e)}},partial:!0},d={tokenize:function(e,t,n){return function(t){return e.consume(t),i};function i(r){return b(r)?(e.consume(r),i):y(r)?t(r):n(r)}},partial:!0},f={tokenize:function(e,t,n){return function(t){return e.consume(t),r};function r(t){return i(t)?(e.consume(t),r):59===t?(e.consume(t),o):n(t)}function o(e){return y(e)?t(e):n(e)}},partial:!0},p={tokenize:function(e,t,n){var i=this;return function(t){if(87!==t&&t-32!==87||!O(i.previous)||A(i.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(l,e.attempt(u,e.attempt(h,r),n),n)(t)};function r(n){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(n)}},previous:O},m={tokenize:function(e,t,n){var i=this;return function(t){if(72!==t&&t-32!==72||!C(i.previous)||A(i.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),e.consume(t),r};function r(t){return 84===t||t-32===84?(e.consume(t),a):n(t)}function a(t){return 84===t||t-32===84?(e.consume(t),l):n(t)}function l(t){return 80===t||t-32===80?(e.consume(t),d):n(t)}function d(t){return 83===t||t-32===83?(e.consume(t),f):f(t)}function f(t){return 58===t?(e.consume(t),p):n(t)}function p(t){return 47===t?(e.consume(t),m):n(t)}function m(t){return 47===t?(e.consume(t),g):n(t)}function g(t){return o(t)||c(t)||s(t)?n(t):e.attempt(u,e.attempt(h,v),n)(t)}function v(n){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(n)}},previous:C},g={tokenize:function(e,t,n){var i,o=this;return function(t){if(!w(t)||!E(o.previous)||A(o.events))return n(t);return e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),a(t)};function a(t){return w(t)?(e.consume(t),a):64===t?(e.consume(t),s):n(t)}function s(t){return 46===t?e.check(d,h,c)(t):45===t||95===t?e.check(d,n,l)(t):r(t)?(e.consume(t),s):h(t)}function c(t){return e.consume(t),i=!0,s}function l(t){return e.consume(t),u}function u(t){return 46===t?e.check(d,n,c)(t):s(t)}function h(r){return i?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(r)):n(r)}},previous:E},v={};t.text=v;for(var _=48;_<123;)v[_]=g,58===++_?_=65:91===_&&(_=97);function b(e){return 33===e||34===e||39===e||41===e||42===e||44===e||46===e||58===e||59===e||60===e||63===e||95===e||126===e}function y(e){return null===e||e<0||32===e||60===e}function w(e){return 43===e||45===e||46===e||95===e||r(e)}function O(e){return null===e||e<0||32===e||40===e||42===e||95===e||126===e}function C(e){return null===e||!i(e)}function E(e){return 47!==e&&C(e)}function A(e){for(var t=e.length;t--;)if(("labelLink"===e[t][1].type||"labelImage"===e[t][1].type)&&!e[t][1]._balanced)return!0}v[43]=g,v[45]=g,v[46]=g,v[95]=g,v[72]=[g,m],v[104]=[g,m],v[87]=[g,p],v[119]=[g,p]},function(e,t,n){e.exports=function(e){var t=(e||{}).singleTilde,n={tokenize:function(e,n,r){var o=this.previous,a=this.events,s=0;return function(t){if(126!==t||126===o&&"characterEscape"!==a[a.length-1][1].type)return r(t);return e.enter("strikethroughSequenceTemporary"),c(t)};function c(a){var l,u,h=i(o);return 126===a?s>1?r(a):(e.consume(a),s++,c):s<2&&!t?r(a):(l=e.exit("strikethroughSequenceTemporary"),u=i(a),l._open=!u||2===u&&h,l._close=!h||2===h&&u,n(a))}},resolveAll:function(e,t){var n,i,s,c,l=-1;for(;++l<e.length;)if("enter"===e[l][0]&&"strikethroughSequenceTemporary"===e[l][1].type&&e[l][1]._close)for(s=l;s--;)if("exit"===e[s][0]&&"strikethroughSequenceTemporary"===e[s][1].type&&e[s][1]._open&&e[l][1].end.offset-e[l][1].start.offset===e[s][1].end.offset-e[s][1].start.offset){e[l][1].type="strikethroughSequence",e[s][1].type="strikethroughSequence",n={type:"strikethrough",start:a(e[s][1].start),end:a(e[l][1].end)},i={type:"strikethroughText",start:a(e[s][1].end),end:a(e[l][1].start)},c=[["enter",n,t],["enter",e[s][1],t],["exit",e[s][1],t],["enter",i,t]],r(c,c.length,0,o(t.parser.constructs.insideSpan.null,e.slice(s+1,l),t)),r(c,c.length,0,[["exit",i,t],["enter",e[l][1],t],["exit",e[l][1],t],["exit",n,t]]),r(e,s-1,l-s+3,c),l=s+c.length-2;break}return function(e){var t=-1,n=e.length;for(;++t<n;)"strikethroughSequenceTemporary"===e[t][1].type&&(e[t][1].type="data");return e}(e)}};null!==t&&void 0!==t||(t=!0);return{text:{126:n},insideSpan:{null:n}}};var i=n(321),r=n(95),o=n(168),a=n(108)},function(e,t,n){e.exports=n(604)},function(e,t,n){t.flow={null:{tokenize:function(e,t,n){var a,s,c=[],l=0;return function(t){if(null===t||-5===t||-4===t||-3===t)return n(t);if(e.enter("table")._align=c,e.enter("tableHead"),e.enter("tableRow"),124===t)return u(t);return l++,e.enter("temporaryTableCellContent"),f(t)};function u(t){return e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),a=!0,h}function h(t){return null===t||-5===t||-4===t||-3===t?function(t){if(null===t)return n(t);return e.exit("tableRow"),e.exit("tableHead"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),e.check(r,n,i(e,m,"linePrefix",4))}(t):-2===t||-1===t||32===t?(e.enter("whitespace"),e.consume(t),d):(a&&(a=void 0,l++),124===t?u(t):(e.enter("temporaryTableCellContent"),f(t)))}function d(t){return-2===t||-1===t||32===t?(e.consume(t),d):(e.exit("whitespace"),h(t))}function f(t){return null===t||t<0||32===t||124===t?(e.exit("temporaryTableCellContent"),h(t)):(e.consume(t),92===t?p:f)}function p(t){return 92===t||124===t?(e.consume(t),f):f(t)}function m(t){return null===t||t<0||32===t?n(t):(e.enter("tableDelimiterRow"),g(t))}function g(t){return null===t||-5===t||-4===t||-3===t?w(t):-2===t||-1===t||32===t?(e.enter("whitespace"),e.consume(t),v):45===t?(e.enter("tableDelimiterFiller"),e.consume(t),s=!0,c.push(null),_):58===t?(e.enter("tableDelimiterAlignment"),e.consume(t),e.exit("tableDelimiterAlignment"),c.push("left"),b):124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),g):n(t)}function v(t){return-2===t||-1===t||32===t?(e.consume(t),v):(e.exit("whitespace"),g(t))}function _(t){return 45===t?(e.consume(t),_):(e.exit("tableDelimiterFiller"),58===t?(e.enter("tableDelimiterAlignment"),e.consume(t),e.exit("tableDelimiterAlignment"),c[c.length-1]="left"===c[c.length-1]?"center":"right",y):g(t))}function b(t){return 45===t?(e.enter("tableDelimiterFiller"),e.consume(t),s=!0,_):n(t)}function y(t){return null===t||-5===t||-4===t||-3===t?w(t):-2===t||-1===t||32===t?(e.enter("whitespace"),e.consume(t),v):124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),g):n(t)}function w(t){return e.exit("tableDelimiterRow"),s&&l===c.length?null===t?O(t):e.check(o,O,C)(t):n(t)}function O(n){return e.exit("table"),t(n)}function C(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i(e,E,"linePrefix",4)}function E(t){return e.enter("tableBody"),A(t)}function A(t){return e.enter("tableRow"),124===t?x(t):(e.enter("temporaryTableCellContent"),D(t))}function x(t){return e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),T}function T(t){return null===t||-5===t||-4===t||-3===t?function(t){if(e.exit("tableRow"),null===t)return I(t);return e.check(o,I,M)(t)}(t):-2===t||-1===t||32===t?(e.enter("whitespace"),e.consume(t),S):124===t?x(t):(e.enter("temporaryTableCellContent"),D(t))}function S(t){return-2===t||-1===t||32===t?(e.consume(t),S):(e.exit("whitespace"),T(t))}function D(t){return null===t||t<0||32===t||124===t?(e.exit("temporaryTableCellContent"),T(t)):(e.consume(t),92===t?P:D)}function P(t){return 92===t||124===t?(e.consume(t),D):D(t)}function I(t){return e.exit("tableBody"),O(t)}function M(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i(e,A,"linePrefix",4)}},resolve:function(e,t){var n,i,r,o,a,s,c,l,u,h,d=e.length,f=-1;for(;++f<d;)n=e[f][1],o&&("temporaryTableCellContent"===n.type&&(l=l||f,u=f),"tableCellDivider"!==n.type&&"tableRow"!==n.type||!u||(s={type:"tableContent",start:e[l][1].start,end:e[u][1].end},c={type:"chunkText",start:s.start,end:s.end,contentType:"text"},e.splice(l,u-l+1,["enter",s,t],["enter",c,t],["exit",c,t],["exit",s,t]),f-=u-l-3,d=e.length,l=void 0,u=void 0)),"exit"===e[f][0]&&h&&h+1<f&&("tableCellDivider"===n.type||"tableRow"===n.type&&(h+3<f||"whitespace"!==e[h][1].type))&&(a={type:r?"tableDelimiter":i?"tableHeader":"tableData",start:e[h][1].start,end:e[f][1].end},e.splice(f+("tableCellDivider"===n.type?1:0),0,["exit",a,t]),e.splice(h,0,["enter",a,t]),f+=2,d=e.length,h=f+1),"tableRow"===n.type&&(o="enter"===e[f][0])&&(h=f+1),"tableDelimiterRow"===n.type&&(r="enter"===e[f][0])&&(h=f+1),"tableHead"===n.type&&(i="enter"===e[f][0]);return e},interruptible:!0}};var i=n(65),r={tokenize:function(e,t,n){return function(t){if(45!==t)return n(t);return e.enter("setextUnderline"),i(t)};function i(t){return 45===t?(e.consume(t),i):r(t)}function r(i){return-2===i||-1===i||32===i?(e.consume(i),r):null===i||-5===i||-4===i||-3===i?t(i):n(i)}},partial:!0},o={tokenize:function(e,t,n){var i=0;return function(t){return e.enter("check"),e.consume(t),r};function r(o){return-1===o||32===o?(e.consume(o),4===++i?t:r):null===o||o<0?t(o):n(o)}},partial:!0}},function(e,t,n){e.exports=n(606)},function(e,t,n){var i=n(96),r=n(65),o=n(144),a={tokenize:function(e,t,n){var i=this;return function(t){if(91!==t||null!==i.previous||!i._gfmTasklistFirstContentOfListItem)return n(t);return e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),r};function r(t){return-2===t||32===t?(e.enter("taskListCheckValueUnchecked"),e.consume(t),e.exit("taskListCheckValueUnchecked"),o):88===t||120===t?(e.enter("taskListCheckValueChecked"),e.consume(t),e.exit("taskListCheckValueChecked"),o):n(t)}function o(i){return 93===i?(e.enter("taskListCheckMarker"),e.consume(i),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),e.check({tokenize:s},t,n)):n(i)}}};function s(e,t,n){var a=this;return r(e,(function(e){return o(a.events,"whitespace")&&null!==e&&!i(e)?t(e):n(e)}),"whitespace")}t.text={91:a}},function(e,t,n){var i=n(608),r=n(612),o=n(613),a=n(614),s={}.hasOwnProperty;function c(e,t){var n,i,r;for(n in t)i=s.call(e,n)?e[n]:e[n]={},r=t[n],"canContainEols"===n||"transforms"===n?e[n]=[].concat(i,r):Object.assign(i,r)}e.exports=function(e){var t={transforms:[],canContainEols:[]},n=e.length,i=-1;for(;++i<n;)c(t,e[i]);return t}([i,r,o,a])},function(e,t,n){var i=n(609),r=n(610),o=n(225),a=n(226);function s(e){this.config.enter.autolinkProtocol.call(this,e)}function c(e,t,n,r,o){var a,s,c="";return!!u(o)&&(/^w/i.test(t)&&(n=t+n,t="",c="http://"),!!function(e){var t=e.split(".");if(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))return!1;return!0}(n)&&(!!(a=function(e){var t,n,r,o=/[!"&'),.:;<>?\]}]+$/.exec(e);if(o)for(e=e.slice(0,o.index),o=o[0],t=o.indexOf(")"),n=i(e,"("),r=i(e,")");-1!==t&&n>r;)e+=o.slice(0,t+1),o=o.slice(t+1),t=o.indexOf(")"),r++;return[e,o]}(n+r))[0]&&(s={type:"link",title:null,url:c+t+a[0],children:[{type:"text",value:t+a[0]}]},a[1]&&(s=[s,{type:"text",value:a[1]}]),s)))}function l(e,t,n,i){return!(!u(i,!0)||/[_-]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function u(e,t){var n=e.input.charCodeAt(e.index-1);return(n!==n||a(n)||o(n))&&(!t||47!==n)}t.transforms=[function(e){r(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/i,c],[/([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/,l]],{ignore:["link","linkReference"]})}],t.enter={literalAutolink:function(e){this.enter({type:"link",title:null,url:"",children:[]},e)},literalAutolinkEmail:s,literalAutolinkHttp:s,literalAutolinkWww:s},t.exit={literalAutolink:function(e){this.exit(e)},literalAutolinkEmail:function(e){this.config.exit.autolinkEmail.call(this,e)},literalAutolinkHttp:function(e){this.config.exit.autolinkProtocol.call(this,e)},literalAutolinkWww:function(e){this.config.exit.data.call(this,e),this.stack[this.stack.length-1].url="http://"+this.sliceSerialize(e)}}},function(e,t,n){"use strict";e.exports=function(e,t){var n,i=String(e),r=0;if("string"!==typeof t)throw new Error("Expected character");n=i.indexOf(t);for(;-1!==n;)r++,n=i.indexOf(t,n+t.length);return r}},function(e,t,n){"use strict";e.exports=function(e,t,n,i){var r,o;"string"===typeof t||t&&"function"===typeof t.exec?o=[[t,n]]:(o=t,i=n);return s(e,r=i||{},function e(t){var n=t[0];return i;function i(i,o){var c,l,u,h,d=n[0],f=n[1],p=[],m=0,g=o.children.indexOf(i);for(d.lastIndex=0,l=d.exec(i.value);l&&(c=l.index,!1!==(h=f.apply(null,[].concat(l,{index:l.index,input:l.input})))&&(m!==c&&p.push({type:"text",value:i.value.slice(m,c)}),"string"===typeof h&&h.length>0&&(h={type:"text",value:h}),h&&(p=[].concat(p,h)),m=c+l[0].length),d.global);)l=d.exec(i.value);if(void 0===c?(p=[i],g--):(m<i.value.length&&p.push({type:"text",value:i.value.slice(m)}),p.unshift(g,1),a.apply(o.children,p)),t.length>1)for(u=e(t.slice(1)),c=-1;++c<p.length;)"text"===(i=p[c]).type?u(i,o):s(i,r,u);return g+p.length+1}}(function(e){var t,n,i=[];if("object"!==typeof e)throw new Error("Expected array or object as schema");if("length"in e)for(n=-1;++n<e.length;)i.push([c(e[n][0]),l(e[n][1])]);else for(t in e)i.push([c(t),l(e[t])]);return i}(o))),e};var i=n(329),r=n(330),o=n(611),a=[].splice;function s(e,t,n){var o=r(t.ignore||[]);return i(e,"text",(function(e,t){var i,r,a=-1;for(;++a<t.length;){if(i=t[a],o(i,r?r.children.indexOf(i):void 0,r))return;r=i}return n(e,r)})),[]}function c(e){return"string"===typeof e?new RegExp(o(e),"g"):e}function l(e){return"function"===typeof e?e:function(){return e}}},function(e,t,n){"use strict";e.exports=function(e){if("string"!==typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},function(e,t){t.canContainEols=["delete"],t.enter={strikethrough:function(e){this.enter({type:"delete",children:[]},e)}},t.exit={strikethrough:function(e){this.exit(e)}}},function(e,t){function n(e){this.exit(e)}function i(e){this.enter({type:"tableCell",children:[]},e)}function r(e,t){return"|"===t?t:e}t.enter={table:function(e){this.enter({type:"table",align:e._align,children:[]},e),this.setData("inTable",!0)},tableData:i,tableHeader:i,tableRow:function(e){this.enter({type:"tableRow",children:[]},e)}},t.exit={codeText:function(e){var t=this.resume();this.getData("inTable")&&(t=t.replace(/\\([\\|])/g,r));this.stack[this.stack.length-1].value=t,this.exit(e)},table:function(e){this.exit(e),this.setData("inTable")},tableData:n,tableHeader:n,tableRow:n}},function(e,t){function n(e){this.stack[this.stack.length-2].checked="taskListCheckValueChecked"===e.type}t.exit={taskListCheckValueChecked:n,taskListCheckValueUnchecked:n,paragraph:function(e){var t,n=this.stack[this.stack.length-2],i=this.stack[this.stack.length-1],r=n.children,o=i.children[0],a=-1;if(n&&"listItem"===n.type&&"boolean"===typeof n.checked&&o&&"text"===o.type){for(;++a<r.length;)if("paragraph"===r[a].type){t=r[a];break}t===i&&(o.value=o.value.slice(1),0===o.value.length?i.children.shift():(o.position.start.column++,o.position.start.offset++,i.position.start=Object.assign({},o.position.start)))}this.exit(e)}}},function(e,t,n){var i=n(616),r=n(617),o=n(618),a=n(622),s=n(628);e.exports=function(e){var t=s({handlers:{},join:[],unsafe:[],options:{}},{extensions:[i,r,o(e),a]});return Object.assign(t.options,{handlers:t.handlers,join:t.join,unsafe:t.unsafe})}},function(e,t){var n=["autolink","link","image","label"];t.unsafe=[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:"phrasing",notInConstruct:n},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:"phrasing",notInConstruct:n},{character:":",before:"[ps]",after:"\\/",inConstruct:"phrasing",notInConstruct:n}]},function(e,t,n){var i=n(348);function r(e,t,n){var r=n.enter("emphasis"),o=i(e,n,{before:"~",after:"~"});return r(),"~~"+o+"~~"}t.unsafe=[{character:"~",inConstruct:"phrasing"}],t.handlers={delete:r},r.peek=function(){return"~"}},function(e,t,n){var i=n(348),r=n(619),o=n(621);e.exports=function(e){var t=e||{},n=t.tableCellPadding,a=t.tablePipeAlign,s=t.stringLength,c=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{table:function(e,t,n){return u(function(e,t){var n=e.children,i=-1,r=n.length,o=[],a=t.enter("table");for(;++i<r;)o[i]=h(n[i],t);return a(),o}(e,n),e.align)},tableRow:function(e,t,n){var i=u([h(e,n)]);return i.slice(0,i.indexOf("\n"))},tableCell:l,inlineCode:function(e,t,n){var i=r(e,t,n);-1!==n.stack.indexOf("tableCell")&&(i=i.replace(/\|/g,"\\$&"));return i}}};function l(e,t,n){var r=n.enter("tableCell"),o=i(e,n,{before:c,after:c});return r(),o}function u(e,t){return o(e,{align:t,alignDelimiters:a,padding:n,stringLength:s})}function h(e,t){for(var n=e.children,i=-1,r=n.length,o=[],a=t.enter("tableRow");++i<r;)o[i]=l(n[i],0,t);return a(),o}}},function(e,t,n){e.exports=r,r.peek=function(){return"`"};var i=n(620);function r(e,t,n){for(var r,o,a,s,c=e.value||"",l="`",u=-1;new RegExp("(^|[^`])"+l+"([^`]|$)").test(c);)l+="`";for(/[^ \r\n]/.test(c)&&(/[ \r\n`]/.test(c.charAt(0))||/[ \r\n`]/.test(c.charAt(c.length-1)))&&(c=" "+c+" ");++u<n.unsafe.length;)if((r=n.unsafe[u]).atBreak)for(o=i(r);a=o.exec(c);)s=a.index,10===c.charCodeAt(s)&&13===c.charCodeAt(s-1)&&s--,c=c.slice(0,s)+" "+c.slice(a.index+1);return l+c+l}},function(e,t){e.exports=function(e){var t,n;e._compiled||(t=e.before?"(?:"+e.before+")":"",n=e.after?"(?:"+e.after+")":"",e.atBreak&&(t="[\\r\\n][\\t ]*"+t),e._compiled=new RegExp((t?"("+t+")":"")+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?"\\":"")+e.character+(n||""),"g"));return e._compiled}},function(e,t,n){"use strict";var i=n(230);e.exports=function(e,t){var n,c,l,u,h,d,f,p,m,g,v,_=t||{},b=!1!==_.padding,y=!1!==_.delimiterStart,w=!1!==_.delimiterEnd,O=(_.align||[]).concat(),C=!1!==_.alignDelimiters,E=[],A=_.stringLength||a,x=-1,T=e.length,S=[],D=[],P=[],I=[],M=[],R=0;for(;++x<T;){for(n=e[x],c=-1,l=n.length,P=[],I=[],l>R&&(R=l);++c<l;)L=n[c],d=null===L||void 0===L?"":String(L),!0===C&&(h=A(d),I[c]=h,(void 0===(u=M[c])||h>u)&&(M[c]=h)),P.push(d);S[x]=P,D[x]=I}var L;if(c=-1,l=R,"object"===typeof O&&"length"in O)for(;++c<l;)E[c]=s(O[c]);else for(v=s(O);++c<l;)E[c]=v;c=-1,l=R,P=[],I=[];for(;++c<l;)v=E[c],m="",g="",108===v?m=":":v===o?g=":":99===v&&(m=":",g=":"),h=C?Math.max(1,M[c]-m.length-g.length):1,d=m+i("-",h)+g,!0===C&&((h=m.length+h+g.length)>M[c]&&(M[c]=h),I[c]=h),P[c]=d;S.splice(1,0,P),D.splice(1,0,I),x=-1,T=S.length,f=[];for(;++x<T;){for(P=S[x],I=D[x],c=-1,l=R,p=[];++c<l;)d=P[c]||"",m="",g="",!0===C&&(h=M[c]-(I[c]||0),(v=E[c])===o?m=i(" ",h):99===v?h%2===0?(m=i(" ",h/2),g=m):(m=i(" ",h/2+.5),g=i(" ",h/2-.5)):g=i(" ",h)),!0===y&&0===c&&p.push("|"),!0!==b||!1===C&&""===d||!0!==y&&0===c||p.push(" "),!0===C&&p.push(m),p.push(d),!0===C&&p.push(g),!0===b&&p.push(" "),!0!==w&&c===l-1||p.push("|");p=p.join(""),!1===w&&(p=p.replace(r,"")),f.push(p)}return f.join("\n")};var r=/ +$/,o=114;function a(e){return e.length}function s(e){var t="string"===typeof e?e.charCodeAt(0):0;return 76===t||108===t?108:82===t||t===o?o:67===t||99===t?99:0}},function(e,t,n){var i=n(623);t.unsafe=[{atBreak:!0,character:"-",after:"[:|-]"}],t.handlers={listItem:function(e,t,n){var r=i(e,t,n),o=e.children[0];"boolean"===typeof e.checked&&o&&"paragraph"===o.type&&(r=r.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,(function(t){return t+"["+(e.checked?"x":" ")+"] "})));return r}}},function(e,t,n){e.exports=function(e,t,n){var c,l,u,h=r(n),d=o(n);t&&t.ordered&&(h=(t.start>-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+".");c=h.length+1,("tab"===d||"mixed"===d&&(t&&t.spread||e.spread))&&(c=4*Math.ceil(c/4));return u=n.enter("listItem"),l=s(a(e,n),(function(e,t,n){if(t)return(n?"":i(" ",c))+e;return(n?h:h+i(" ",c-h.length))+e})),u(),l};var i=n(230),r=n(624),o=n(625),a=n(626),s=n(627)},function(e,t){e.exports=function(e){var t=e.options.bullet||"*";if("*"!==t&&"+"!==t&&"-"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}},function(e,t){e.exports=function(e){var t=e.options.listItemIndent||"tab";if(1===t||"1"===t)return"one";if("tab"!==t&&"one"!==t&&"mixed"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}},function(e,t,n){e.exports=function(e,t){var n,r=e.children||[],o=[],a=-1;for(;++a<r.length;)n=r[a],o.push(t.handle(n,e,t,{before:"\n",after:"\n"})),a+1<r.length&&o.push(s(n,r[a+1]));return o.join("");function s(n,r){for(var o,a=-1;++a<t.join.length&&!0!==(o=t.join[a](n,r,e,t))&&1!==o;){if("number"===typeof o)return i("\n",1+Number(o));if(!1===o)return"\n\n\x3c!----\x3e\n\n"}return"\n\n"}};var i=n(230)},function(e,t){e.exports=function(e,t){var i,r=[],o=0,a=0;for(;i=n.exec(e);)s(e.slice(o,i.index)),r.push(i[0]),o=i.index+i[0].length,a++;return s(e.slice(o)),r.join("");function s(e){r.push(t(e,a,!e))}};var n=/\r?\n|\r/g},function(e,t){e.exports=function e(t,n){var i,r=-1;if(n.extensions)for(;++r<n.extensions.length;)e(t,n.extensions[r]);for(i in n)"extensions"===i||("unsafe"===i||"join"===i?t[i]=t[i].concat(n[i]||[]):"handlers"===i?t[i]=Object.assign(t[i],n[i]||{}):t.options[i]=n[i]);return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=h(n(349)),a=n(2),s=h(a),c=h(n(36)),l=h(n(351)),u=n(352);function h(e){return e&&e.__esModule?e:{default:e}}var d=o.default.acequire("ace/range").Range,f=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return u.editorEvents.forEach((function(e){n[e]=n[e].bind(n)})),n}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.className,i=t.onBeforeLoad,r=t.onValidate,a=t.mode,s=t.focus,c=t.theme,l=t.fontSize,h=t.value,d=t.defaultValue,f=t.cursorStart,p=t.showGutter,m=t.wrapEnabled,g=t.showPrintMargin,v=t.scrollMargin,_=void 0===v?[0,0,0,0]:v,b=t.keyboardHandler,y=t.onLoad,w=t.commands,O=t.annotations,C=t.markers;this.editor=o.default.edit(this.refEditor),i&&i(o.default);for(var E=Object.keys(this.props.editorProps),A=0;A<E.length;A++)this.editor[E[A]]=this.props.editorProps[E[A]];this.props.debounceChangePeriod&&(this.onChange=this.debounce(this.onChange,this.props.debounceChangePeriod)),this.editor.renderer.setScrollMargin(_[0],_[1],_[2],_[3]),this.editor.getSession().setMode("ace/mode/"+a),this.editor.setTheme("ace/theme/"+c),this.editor.setFontSize(l),this.editor.getSession().setValue(d||h,f),this.editor.navigateFileEnd(),this.editor.renderer.setShowGutter(p),this.editor.getSession().setUseWrapMode(m),this.editor.setShowPrintMargin(g),this.editor.on("focus",this.onFocus),this.editor.on("blur",this.onBlur),this.editor.on("copy",this.onCopy),this.editor.on("paste",this.onPaste),this.editor.on("change",this.onChange),this.editor.on("input",this.onInput),this.editor.getSession().selection.on("changeSelection",this.onSelectionChange),this.editor.getSession().selection.on("changeCursor",this.onCursorChange),r&&this.editor.getSession().on("changeAnnotation",(function(){var t=e.editor.getSession().getAnnotations();e.props.onValidate(t)})),this.editor.session.on("changeScrollTop",this.onScroll),this.editor.getSession().setAnnotations(O||[]),C&&C.length>0&&this.handleMarkers(C);for(var x=this.editor.$options,T=0;T<u.editorOptions.length;T++){var S=u.editorOptions[T];x.hasOwnProperty(S)?this.editor.setOption(S,this.props[S]):this.props[S]&&console.warn("ReaceAce: editor option "+S+" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?")}this.handleOptions(this.props),Array.isArray(w)&&w.forEach((function(t){"string"==typeof t.exec?e.editor.commands.bindKey(t.bindKey,t.exec):e.editor.commands.addCommand(t)})),b&&this.editor.setKeyboardHandler("ace/keyboard/"+b),n&&(this.refEditor.className+=" "+n),s&&this.editor.focus(),y&&y(this.editor),this.editor.resize()}},{key:"debounce",value:function(e,t){var n=null;return function(){var i=this,r=arguments;clearTimeout(n),n=setTimeout((function(){e.apply(i,r)}),t)}}},{key:"componentWillReceiveProps",value:function(e){for(var t=this.props,n=0;n<u.editorOptions.length;n++){var i=u.editorOptions[n];e[i]!==t[i]&&this.editor.setOption(i,e[i])}if(e.className!==t.className){var r=this.refEditor.className.trim().split(" ");t.className.trim().split(" ").forEach((function(e){var t=r.indexOf(e);r.splice(t,1)})),this.refEditor.className=" "+e.className+" "+r.join(" ")}if(e.mode!==t.mode&&this.editor.getSession().setMode("ace/mode/"+e.mode),e.theme!==t.theme&&this.editor.setTheme("ace/theme/"+e.theme),e.keyboardHandler!==t.keyboardHandler&&(e.keyboardHandler?this.editor.setKeyboardHandler("ace/keyboard/"+e.keyboardHandler):this.editor.setKeyboardHandler(null)),e.fontSize!==t.fontSize&&this.editor.setFontSize(e.fontSize),e.wrapEnabled!==t.wrapEnabled&&this.editor.getSession().setUseWrapMode(e.wrapEnabled),e.showPrintMargin!==t.showPrintMargin&&this.editor.setShowPrintMargin(e.showPrintMargin),e.showGutter!==t.showGutter&&this.editor.renderer.setShowGutter(e.showGutter),(0,l.default)(e.setOptions,t.setOptions)||this.handleOptions(e),(0,l.default)(e.annotations,t.annotations)||this.editor.getSession().setAnnotations(e.annotations||[]),!(0,l.default)(e.markers,t.markers)&&Array.isArray(e.markers)&&this.handleMarkers(e.markers),(0,l.default)(e.scrollMargin,t.scrollMargin)||this.handleScrollMargins(e.scrollMargin),this.editor&&this.editor.getValue()!==e.value){this.silent=!0;var o=this.editor.session.selection.toJSON();this.editor.setValue(e.value,e.cursorStart),this.editor.session.selection.fromJSON(o),this.silent=!1}e.focus&&!t.focus&&this.editor.focus()}},{key:"componentDidUpdate",value:function(e){e.height===this.props.height&&e.width===this.props.width||this.editor.resize()}},{key:"handleScrollMargins",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0];this.editor.renderer.setScrollMargins(e[0],e[1],e[2],e[3])}},{key:"componentWillUnmount",value:function(){this.editor.destroy(),this.editor=null}},{key:"onChange",value:function(e){if(this.props.onChange&&!this.silent){var t=this.editor.getValue();this.props.onChange(t,e)}}},{key:"onSelectionChange",value:function(e){if(this.props.onSelectionChange){var t=this.editor.getSelection();this.props.onSelectionChange(t,e)}}},{key:"onCursorChange",value:function(e){if(this.props.onCursorChange){var t=this.editor.getSelection();this.props.onCursorChange(t,e)}}},{key:"onInput",value:function(e){this.props.onInput&&this.props.onInput(e)}},{key:"onFocus",value:function(e){this.props.onFocus&&this.props.onFocus(e)}},{key:"onBlur",value:function(e){this.props.onBlur&&this.props.onBlur(e,this.editor)}},{key:"onCopy",value:function(e){this.props.onCopy&&this.props.onCopy(e)}},{key:"onPaste",value:function(e){this.props.onPaste&&this.props.onPaste(e)}},{key:"onScroll",value:function(){this.props.onScroll&&this.props.onScroll(this.editor)}},{key:"handleOptions",value:function(e){for(var t=Object.keys(e.setOptions),n=0;n<t.length;n++)this.editor.setOption(t[n],e.setOptions[t[n]])}},{key:"handleMarkers",value:function(e){var t=this,n=this.editor.getSession().getMarkers(!0);for(var i in n)n.hasOwnProperty(i)&&this.editor.getSession().removeMarker(n[i].id);for(var r in n=this.editor.getSession().getMarkers(!1))n.hasOwnProperty(r)&&this.editor.getSession().removeMarker(n[r].id);e.forEach((function(e){var n=e.startRow,i=e.startCol,r=e.endRow,o=e.endCol,a=e.className,s=e.type,c=e.inFront,l=void 0!==c&&c,u=new d(n,i,r,o);t.editor.getSession().addMarker(u,a,s,l)}))}},{key:"updateRef",value:function(e){this.refEditor=e}},{key:"render",value:function(){var e=this.props,t=e.name,n=e.width,r=e.height,o=e.style,a=i({width:n,height:r},o);return s.default.createElement("div",{ref:this.updateRef,id:t,style:a})}}]),t}(a.Component);t.default=f,f.propTypes={mode:c.default.string,focus:c.default.bool,theme:c.default.string,name:c.default.string,className:c.default.string,height:c.default.string,width:c.default.string,fontSize:c.default.oneOfType([c.default.number,c.default.string]),showGutter:c.default.bool,onChange:c.default.func,onCopy:c.default.func,onPaste:c.default.func,onFocus:c.default.func,onInput:c.default.func,onBlur:c.default.func,onScroll:c.default.func,value:c.default.string,defaultValue:c.default.string,onLoad:c.default.func,onSelectionChange:c.default.func,onCursorChange:c.default.func,onBeforeLoad:c.default.func,onValidate:c.default.func,minLines:c.default.number,maxLines:c.default.number,readOnly:c.default.bool,highlightActiveLine:c.default.bool,tabSize:c.default.number,showPrintMargin:c.default.bool,cursorStart:c.default.number,debounceChangePeriod:c.default.number,editorProps:c.default.object,setOptions:c.default.object,style:c.default.object,scrollMargin:c.default.array,annotations:c.default.array,markers:c.default.array,keyboardHandler:c.default.string,wrapEnabled:c.default.bool,enableBasicAutocompletion:c.default.oneOfType([c.default.bool,c.default.array]),enableLiveAutocompletion:c.default.oneOfType([c.default.bool,c.default.array]),commands:c.default.array},f.defaultProps={name:"brace-editor",focus:!1,mode:"",theme:"",height:"500px",width:"500px",value:"",fontSize:12,showGutter:!0,onChange:null,onPaste:null,onLoad:null,onScroll:null,minLines:null,maxLines:null,readOnly:!1,highlightActiveLine:!0,showPrintMargin:!0,tabSize:4,cursorStart:1,editorProps:{},style:{},scrollMargin:[0,0,0,0],setOptions:{},wrapEnabled:!1,enableBasicAutocompletion:!1,enableLiveAutocompletion:!1}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(349),a=f(o),s=n(2),c=f(s),l=f(n(36)),u=f(n(351)),h=f(n(631)),d=n(352);function f(e){return e&&e.__esModule?e:{default:e}}n(632);var p=a.default.acequire("ace/range").Range,m=a.default.acequire("ace/split").Split,g=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return d.editorEvents.forEach((function(e){n[e]=n[e].bind(n)})),n}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.className,i=t.onBeforeLoad,r=t.mode,s=t.focus,c=t.theme,l=t.fontSize,u=t.value,f=t.defaultValue,p=t.cursorStart,g=t.showGutter,v=t.wrapEnabled,_=t.showPrintMargin,b=t.scrollMargin,y=void 0===b?[0,0,0,0]:b,w=t.keyboardHandler,O=t.onLoad,C=t.commands,E=t.annotations,A=t.markers,x=t.splits;this.editor=a.default.edit(this.refEditor),i&&i(a.default);var T=Object.keys(this.props.editorProps),S=new m(this.editor.container,"ace/theme/"+c,x);this.editor.env.split=S,this.splitEditor=S.getEditor(0),this.split=S,this.editor.setShowPrintMargin(!1),this.editor.renderer.setShowGutter(!1);var D=this.splitEditor.$options;S.forEach((function(t,n){for(var i=0;i<T.length;i++)t[T[i]]=e.props.editorProps[T[i]];var a=(0,h.default)(f,n),s=(0,h.default)(u,n,"");t.session.setUndoManager(new o.UndoManager),t.setTheme("ace/theme/"+c),t.renderer.setScrollMargin(y[0],y[1],y[2],y[3]),t.getSession().setMode("ace/mode/"+r),t.setFontSize(l),t.renderer.setShowGutter(g),t.getSession().setUseWrapMode(v),t.setShowPrintMargin(_),t.on("focus",e.onFocus),t.on("blur",e.onBlur),t.on("input",e.onInput),t.on("copy",e.onCopy),t.on("paste",e.onPaste),t.on("change",e.onChange),t.getSession().selection.on("changeSelection",e.onSelectionChange),t.getSession().selection.on("changeCursor",e.onCursorChange),t.session.on("changeScrollTop",e.onScroll),t.setValue(void 0===a?s:a,p);var m=(0,h.default)(E,n,[]),b=(0,h.default)(A,n,[]);t.getSession().setAnnotations(m),b&&b.length>0&&e.handleMarkers(b,t);for(var O=0;O<d.editorOptions.length;O++){var x=d.editorOptions[O];D.hasOwnProperty(x)?t.setOption(x,e.props[x]):e.props[x]&&console.warn("ReaceAce: editor option "+x+" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?")}e.handleOptions(e.props,t),Array.isArray(C)&&C.forEach((function(e){"string"==typeof e.exec?t.commands.bindKey(e.bindKey,e.exec):t.commands.addCommand(e)})),w&&t.setKeyboardHandler("ace/keyboard/"+w)})),n&&(this.refEditor.className+=" "+n),s&&this.splitEditor.focus();var P=this.editor.env.split;P.setOrientation("below"===this.props.orientation?P.BELOW:P.BESIDE),P.resize(!0),O&&O(P)}},{key:"componentWillReceiveProps",value:function(e){var t=this,n=this.props,i=this.editor.env.split;if(e.splits!==n.splits&&i.setSplits(e.splits),e.orientation!==n.orientation&&i.setOrientation("below"===e.orientation?i.BELOW:i.BESIDE),i.forEach((function(i,r){e.mode!==n.mode&&i.getSession().setMode("ace/mode/"+e.mode),e.keyboardHandler!==n.keyboardHandler&&(e.keyboardHandler?i.setKeyboardHandler("ace/keyboard/"+e.keyboardHandler):i.setKeyboardHandler(null)),e.fontSize!==n.fontSize&&i.setFontSize(e.fontSize),e.wrapEnabled!==n.wrapEnabled&&i.getSession().setUseWrapMode(e.wrapEnabled),e.showPrintMargin!==n.showPrintMargin&&i.setShowPrintMargin(e.showPrintMargin),e.showGutter!==n.showGutter&&i.renderer.setShowGutter(e.showGutter);for(var o=0;o<d.editorOptions.length;o++){var a=d.editorOptions[o];e[a]!==n[a]&&i.setOption(a,e[a])}(0,u.default)(e.setOptions,n.setOptions)||t.handleOptions(e,i);var s=(0,h.default)(e.value,r,"");if(i.getValue()!==s){t.silent=!0;var c=i.session.selection.toJSON();i.setValue(s,e.cursorStart),i.session.selection.fromJSON(c),t.silent=!1}var l=(0,h.default)(e.annotations,r,[]),f=(0,h.default)(n.annotations,r,[]);(0,u.default)(l,f)||i.getSession().setAnnotations(l);var p=(0,h.default)(e.markers,r,[]),m=(0,h.default)(n.markers,r,[]);!(0,u.default)(p,m)&&Array.isArray(p)&&t.handleMarkers(p,i)})),e.className!==n.className){var r=this.refEditor.className.trim().split(" ");n.className.trim().split(" ").forEach((function(e){var t=r.indexOf(e);r.splice(t,1)})),this.refEditor.className=" "+e.className+" "+r.join(" ")}e.theme!==n.theme&&i.setTheme("ace/theme/"+e.theme),e.focus&&!n.focus&&this.splitEditor.focus(),e.height===this.props.height&&e.width===this.props.width||this.editor.resize()}},{key:"componentWillUnmount",value:function(){this.editor.destroy(),this.editor=null}},{key:"onChange",value:function(e){if(this.props.onChange&&!this.silent){var t=[];this.editor.env.split.forEach((function(e){t.push(e.getValue())})),this.props.onChange(t,e)}}},{key:"onSelectionChange",value:function(e){if(this.props.onSelectionChange){var t=[];this.editor.env.split.forEach((function(e){t.push(e.getSelection())})),this.props.onSelectionChange(t,e)}}},{key:"onCursorChange",value:function(e){if(this.props.onCursorChange){var t=[];this.editor.env.split.forEach((function(e){t.push(e.getSelection())})),this.props.onCursorChange(t,e)}}},{key:"onFocus",value:function(e){this.props.onFocus&&this.props.onFocus(e)}},{key:"onInput",value:function(e){this.props.onInput&&this.props.onInput(e)}},{key:"onBlur",value:function(e){this.props.onBlur&&this.props.onBlur(e)}},{key:"onCopy",value:function(e){this.props.onCopy&&this.props.onCopy(e)}},{key:"onPaste",value:function(e){this.props.onPaste&&this.props.onPaste(e)}},{key:"onScroll",value:function(){this.props.onScroll&&this.props.onScroll(this.editor)}},{key:"handleOptions",value:function(e,t){for(var n=Object.keys(e.setOptions),i=0;i<n.length;i++)t.setOption(n[i],e.setOptions[n[i]])}},{key:"handleMarkers",value:function(e,t){var n=t.getSession().getMarkers(!0);for(var i in n)n.hasOwnProperty(i)&&t.getSession().removeMarker(n[i].id);for(var r in n=t.getSession().getMarkers(!1))n.hasOwnProperty(r)&&t.getSession().removeMarker(n[r].id);e.forEach((function(e){var n=e.startRow,i=e.startCol,r=e.endRow,o=e.endCol,a=e.className,s=e.type,c=e.inFront,l=void 0!==c&&c,u=new p(n,i,r,o);t.getSession().addMarker(u,a,s,l)}))}},{key:"updateRef",value:function(e){this.refEditor=e}},{key:"render",value:function(){var e=this.props,t=e.name,n=e.width,r=e.height,o=e.style,a=i({width:n,height:r},o);return c.default.createElement("div",{ref:this.updateRef,id:t,style:a})}}]),t}(s.Component);t.default=g,g.propTypes={mode:l.default.string,splits:l.default.number,orientation:l.default.string,focus:l.default.bool,theme:l.default.string,name:l.default.string,className:l.default.string,height:l.default.string,width:l.default.string,fontSize:l.default.oneOfType([l.default.number,l.default.string]),showGutter:l.default.bool,onChange:l.default.func,onCopy:l.default.func,onPaste:l.default.func,onFocus:l.default.func,onInput:l.default.func,onBlur:l.default.func,onScroll:l.default.func,value:l.default.arrayOf(l.default.string),defaultValue:l.default.arrayOf(l.default.string),onLoad:l.default.func,onSelectionChange:l.default.func,onCursorChange:l.default.func,onBeforeLoad:l.default.func,minLines:l.default.number,maxLines:l.default.number,readOnly:l.default.bool,highlightActiveLine:l.default.bool,tabSize:l.default.number,showPrintMargin:l.default.bool,cursorStart:l.default.number,editorProps:l.default.object,setOptions:l.default.object,style:l.default.object,scrollMargin:l.default.array,annotations:l.default.array,markers:l.default.array,keyboardHandler:l.default.string,wrapEnabled:l.default.bool,enableBasicAutocompletion:l.default.oneOfType([l.default.bool,l.default.array]),enableLiveAutocompletion:l.default.oneOfType([l.default.bool,l.default.array]),commands:l.default.array},g.defaultProps={name:"brace-editor",focus:!1,orientation:"beside",splits:2,mode:"",theme:"",height:"500px",width:"500px",value:[],fontSize:12,showGutter:!0,onChange:null,onPaste:null,onLoad:null,onScroll:null,minLines:null,maxLines:null,readOnly:!1,highlightActiveLine:!0,showPrintMargin:!0,tabSize:4,cursorStart:1,editorProps:{},style:{},scrollMargin:[0,0,0,0],setOptions:{},wrapEnabled:!1,enableBasicAutocompletion:!1,enableLiveAutocompletion:!1}},function(e,t,n){(function(t){var n=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/,r=/^\./,o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,s=/^\[object .+?Constructor\]$/,c="object"==typeof t&&t&&t.Object===Object&&t,l="object"==typeof self&&self&&self.Object===Object&&self,u=c||l||Function("return this")();var h=Array.prototype,d=Function.prototype,f=Object.prototype,p=u["__core-js_shared__"],m=function(){var e=/[^.]+$/.exec(p&&p.keys&&p.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),g=d.toString,v=f.hasOwnProperty,_=f.toString,b=RegExp("^"+g.call(v).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=u.Symbol,w=h.splice,O=R(u,"Map"),C=R(Object,"create"),E=y?y.prototype:void 0,A=E?E.toString:void 0;function x(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function T(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function S(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function D(e,t){for(var n,i,r=e.length;r--;)if((n=e[r][0])===(i=t)||n!==n&&i!==i)return r;return-1}function P(e,t){for(var r,o=0,a=(t=function(e,t){if(N(e))return!1;var r=typeof e;if("number"==r||"symbol"==r||"boolean"==r||null==e||k(e))return!0;return i.test(e)||!n.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:N(r=t)?r:L(r)).length;null!=e&&o<a;)e=e[j(t[o++])];return o&&o==a?e:void 0}function I(e){return!(!z(e)||(t=e,m&&m in t))&&(function(e){var t=z(e)?_.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(n){}return t}(e)?b:s).test(function(e){if(null!=e){try{return g.call(e)}catch(t){}try{return e+""}catch(t){}}return""}(e));var t}function M(e,t){var n=e.__data__;return function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}(t)?n["string"==typeof t?"string":"hash"]:n.map}function R(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return I(n)?n:void 0}x.prototype.clear=function(){this.__data__=C?C(null):{}},x.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},x.prototype.get=function(e){var t=this.__data__;if(C){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return v.call(t,e)?t[e]:void 0},x.prototype.has=function(e){var t=this.__data__;return C?void 0!==t[e]:v.call(t,e)},x.prototype.set=function(e,t){return this.__data__[e]=C&&void 0===t?"__lodash_hash_undefined__":t,this},T.prototype.clear=function(){this.__data__=[]},T.prototype.delete=function(e){var t=this.__data__,n=D(t,e);return!(n<0)&&(n==t.length-1?t.pop():w.call(t,n,1),!0)},T.prototype.get=function(e){var t=this.__data__,n=D(t,e);return n<0?void 0:t[n][1]},T.prototype.has=function(e){return D(this.__data__,e)>-1},T.prototype.set=function(e,t){var n=this.__data__,i=D(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},S.prototype.clear=function(){this.__data__={hash:new x,map:new(O||T),string:new x}},S.prototype.delete=function(e){return M(this,e).delete(e)},S.prototype.get=function(e){return M(this,e).get(e)},S.prototype.has=function(e){return M(this,e).has(e)},S.prototype.set=function(e,t){return M(this,e).set(e,t),this};var L=F((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(k(e))return A?A.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return r.test(e)&&n.push(""),e.replace(o,(function(e,t,i,r){n.push(i?r.replace(a,"$1"):t||e)})),n}));function j(e){if("string"==typeof e||k(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function F(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function n(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var a=e.apply(this,i);return n.cache=o.set(r,a),a};return n.cache=new(F.Cache||S),n}F.Cache=S;var N=Array.isArray;function z(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function k(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==_.call(e)}e.exports=function(e,t,n){var i=null==e?void 0:P(e,t);return void 0===i?n:i}}).call(this,n(55))},function(e,t){ace.define("ace/split",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/editor","ace/virtual_renderer","ace/edit_session"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/lang"),o=e("./lib/event_emitter").EventEmitter,a=e("./editor").Editor,s=e("./virtual_renderer").VirtualRenderer,c=e("./edit_session").EditSession,l=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS="",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on("focus",function(e){this.$cEditor=e}.bind(this))};function u(e,t){this.$u=e,this.$doc=t}(function(){i.implement(this,o),this.$createEditor=function(){var e=document.createElement("div");e.className=this.$editorCSS,e.style.cssText="position: absolute; top:0px; bottom:0px",this.$container.appendChild(e);var t=new a(new s(e,this.$theme));return t.on("focus",function(){this._emit("focus",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw"The number of splits have to be > 0!";if(e!=this.$splits){if(e>this.$splits){for(;this.$splits<this.$editors.length&&this.$splits<e;)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;for(;this.$splits<e;)this.$createEditor(),this.$splits++}else for(;this.$splits>e;)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()}},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach((function(t){t.setTheme(e)}))},this.setKeyboardHandler=function(e){this.$editors.forEach((function(t){t.setKeyboardHandler(e)}))},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize="",this.setFontSize=function(e){this.$fontSize=e,this.forEach((function(t){t.setFontSize(e)}))},this.$cloneSession=function(e){var t=new c(e.getDocument(),e.getMode()),n=e.getUndoManager();if(n){var i=new u(n,t);t.setUndoManager(i)}return t.$informUndoManager=r.delayedCall((function(){t.$deltas=[]})),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;return n=null==t?this.$cEditor:this.$editors[t],this.$editors.some((function(t){return t.session===e}))&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){this.$orientation!=e&&(this.$orientation=e,this.resize())},this.resize=function(){var e,t=this.$container.clientWidth,n=this.$container.clientHeight;if(this.$orientation==this.BESIDE)for(var i=t/this.$splits,r=0;r<this.$splits;r++)(e=this.$editors[r]).container.style.width=i+"px",e.container.style.top="0px",e.container.style.left=r*i+"px",e.container.style.height=n+"px",e.resize();else{var o=n/this.$splits;for(r=0;r<this.$splits;r++)(e=this.$editors[r]).container.style.width=t+"px",e.container.style.top=r*o+"px",e.container.style.left="0px",e.container.style.height=o+"px",e.resize()}}}).call(l.prototype),function(){this.execute=function(e){this.$u.execute(e)},this.undo=function(){var e=this.$u.undo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.redo=function(){var e=this.$u.redo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.reset=function(){this.$u.reset()},this.hasUndo=function(){return this.$u.hasUndo()},this.hasRedo=function(){return this.$u.hasRedo()}}.call(u.prototype),t.Split=l})),ace.define("ace/ext/split",["require","exports","module","ace/split"],(function(e,t,n){"use strict";n.exports=e("../split")})),ace.acequire(["ace/ext/split"],(function(){}))},function(e,t){ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text_highlight_rules").TextHighlightRules,o=function(){var e=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern","constant.language":"True|False|None|NotImplemented|Ellipsis|__debug__",keyword:"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield|async|await"},"identifier"),t="(?:r|u|ur|R|U|UR|Ur|uR)?",n="(?:(?:(?:[1-9]\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\dA-Fa-f]+)|(?:0[bB][01]+))",i="(?:(?:(?:\\d+)?(?:\\.\\d+))|(?:(?:\\d+)\\.))",r="(?:(?:(?:(?:(?:(?:\\d+)?(?:\\.\\d+))|(?:(?:\\d+)\\.))|(?:\\d+))(?:[eE][+-]?\\d+))|"+i+")",o="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:t+'"{3}',next:"qqstring3"},{token:"string",regex:t+'"(?=.)',next:"qqstring"},{token:"string",regex:t+"'{3}",next:"qstring3"},{token:"string",regex:t+"'(?=.)",next:"qstring"},{token:"constant.numeric",regex:"(?:"+r+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:r},{token:"constant.numeric",regex:n+"[lL]\\b"},{token:"constant.numeric",regex:n+"\\b"},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring3:[{token:"constant.language.escape",regex:o},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:o},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:o},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:o},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}]}};i.inherits(o,r),t.PythonHighlightRules=o})),ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};i.inherits(o,r),function(){this.getFoldWidgetRange=function(e,t,n){var i=e.getLine(n).match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(o.prototype)})),ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text").Mode,o=e("./python_highlight_rules").PythonHighlightRules,a=e("./folding/pythonic").FoldMode,s=e("../range").Range,c=function(){this.HighlightRules=o,this.foldingRules=new a("\\:"),this.$behaviour=this.$defaultBehaviour};i.inherits(c,r),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e).tokens;if(r.length&&"comment"==r[r.length-1].type)return i;"start"==e&&(t.match(/^.*[\{\(\[:]\s*$/)&&(i+=n));return i};var e={pass:1,return:1,raise:1,break:1,continue:1};this.checkOutdent=function(t,n,i){if("\r\n"!==i&&"\r"!==i&&"\n"!==i)return!1;var r=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!r)return!1;do{var o=r.pop()}while(o&&("comment"==o.type||"text"==o.type&&o.value.match(/^\s+$/)));return!!o&&("keyword"==o.type&&e[o.value])},this.autoOutdent=function(e,t,n){n+=1;var i=this.$getIndent(t.getLine(n)),r=t.getTabString();i.slice(-r.length)==r&&t.remove(new s(n,i.length-r.length,n,i.length))},this.$id="ace/mode/python"}.call(c.prototype),t.Mode=c}))},function(e,t){ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.flattenNames=void 0;var i=s(n(636)),r=s(n(231)),o=s(n(359)),a=s(n(646));function s(e){return e&&e.__esModule?e:{default:e}}var c=t.flattenNames=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return(0,a.default)(t,(function(t){Array.isArray(t)?e(t).map((function(e){return n.push(e)})):(0,o.default)(t)?(0,r.default)(t,(function(e,t){!0===e&&n.push(t),n.push(t+"-"+e)})):(0,i.default)(t)&&n.push(t)})),n};t.default=c},function(e,t,n){var i=n(109),r=n(73),o=n(87);e.exports=function(e){return"string"==typeof e||!r(e)&&o(e)&&"[object String]"==i(e)}},function(e,t,n){var i=n(147),r=Object.prototype,o=r.hasOwnProperty,a=r.toString,s=i?i.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var i=!0}catch(c){}var r=a.call(e);return i&&(t?e[s]=n:delete e[s]),r}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t){e.exports=function(e){return function(t,n,i){for(var r=-1,o=Object(t),a=i(t),s=a.length;s--;){var c=a[e?s:++r];if(!1===n(o[c],c,o))break}return t}}},function(e,t){e.exports=function(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}},function(e,t,n){var i=n(109),r=n(87);e.exports=function(e){return r(e)&&"[object Arguments]"==i(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var i=n(109),r=n(235),o=n(87),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&r(e.length)&&!!a[i(e)]}},function(e,t,n){var i=n(238),r=n(645),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!i(e))return r(e);var t=[];for(var n in Object(e))o.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t,n){var i=n(357)(Object.keys,Object);e.exports=i},function(e,t,n){var i=n(360),r=n(647),o=n(705),a=n(73);e.exports=function(e,t){return(a(e)?i:o)(e,r(t,3))}},function(e,t,n){var i=n(648),r=n(692),o=n(173),a=n(73),s=n(702);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?a(e)?r(e[0],e[1]):i(e):s(e)}},function(e,t,n){var i=n(649),r=n(691),o=n(370);e.exports=function(e){var t=r(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(n){return n===e||i(n,e,t)}}},function(e,t,n){var i=n(174),r=n(362);e.exports=function(e,t,n,o){var a=n.length,s=a,c=!o;if(null==e)return!s;for(e=Object(e);a--;){var l=n[a];if(c&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++a<s;){var u=(l=n[a])[0],h=e[u],d=l[1];if(c&&l[2]){if(void 0===h&&!(u in e))return!1}else{var f=new i;if(o)var p=o(h,d,u,e,t,f);if(!(void 0===p?r(d,h,3,o,f):p))return!1}}return!0}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var i=n(176),r=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=i(t,e);return!(n<0)&&(n==t.length-1?t.pop():r.call(t,n,1),--this.size,!0)}},function(e,t,n){var i=n(176);e.exports=function(e){var t=this.__data__,n=i(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var i=n(176);e.exports=function(e){return i(this.__data__,e)>-1}},function(e,t,n){var i=n(176);e.exports=function(e,t){var n=this.__data__,r=i(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}},function(e,t,n){var i=n(175);e.exports=function(){this.__data__=new i,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var i=n(175),r=n(241),o=n(242);e.exports=function(e,t){var n=this.__data__;if(n instanceof i){var a=n.__data__;if(!r||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new o(a)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var i=n(239),r=n(661),o=n(76),a=n(361),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,h=l.hasOwnProperty,d=RegExp("^"+u.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||r(e))&&(i(e)?d:s).test(a(e))}},function(e,t,n){var i=n(662),r=function(){var e=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=function(e){return!!r&&r in e}},function(e,t,n){var i=n(82)["__core-js_shared__"];e.exports=i},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var i=n(665),r=n(175),o=n(241);e.exports=function(){this.size=0,this.__data__={hash:new i,map:new(o||r),string:new i}}},function(e,t,n){var i=n(666),r=n(667),o=n(668),a=n(669),s=n(670);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=r,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t,n){var i=n(177);e.exports=function(){this.__data__=i?i(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var i=n(177),r=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(i){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return r.call(t,e)?t[e]:void 0}},function(e,t,n){var i=n(177),r=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return i?void 0!==t[e]:r.call(t,e)}},function(e,t,n){var i=n(177);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=i&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t,n){var i=n(178);e.exports=function(e){var t=i(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var i=n(178);e.exports=function(e){return i(this,e).get(e)}},function(e,t,n){var i=n(178);e.exports=function(e){return i(this,e).has(e)}},function(e,t,n){var i=n(178);e.exports=function(e,t){var n=i(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}},function(e,t,n){var i=n(174),r=n(363),o=n(682),a=n(685),s=n(179),c=n(73),l=n(172),u=n(234),h="[object Object]",d=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,f,p,m){var g=c(e),v=c(t),_=g?"[object Array]":s(e),b=v?"[object Array]":s(t),y=(_="[object Arguments]"==_?h:_)==h,w=(b="[object Arguments]"==b?h:b)==h,O=_==b;if(O&&l(e)){if(!l(t))return!1;g=!0,y=!1}if(O&&!y)return m||(m=new i),g||u(e)?r(e,t,n,f,p,m):o(e,t,_,n,f,p,m);if(!(1&n)){var C=y&&d.call(e,"__wrapped__"),E=w&&d.call(t,"__wrapped__");if(C||E){var A=C?e.value():e,x=E?t.value():t;return m||(m=new i),p(A,x,n,f,m)}}return!!O&&(m||(m=new i),a(e,t,n,f,p,m))}},function(e,t,n){var i=n(242),r=n(678),o=n(679);function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new i;++t<n;)this.add(e[t])}a.prototype.add=a.prototype.push=r,a.prototype.has=o,e.exports=a},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t){e.exports=function(e,t){for(var n=-1,i=null==e?0:e.length;++n<i;)if(t(e[n],n,e))return!0;return!1}},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t,n){var i=n(147),r=n(364),o=n(149),a=n(363),s=n(683),c=n(684),l=i?i.prototype:void 0,u=l?l.valueOf:void 0;e.exports=function(e,t,n,i,l,h,d){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!h(new r(e),new r(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var f=s;case"[object Set]":var p=1&i;if(f||(f=c),e.size!=t.size&&!p)return!1;var m=d.get(e);if(m)return m==t;i|=2,d.set(e,t);var g=a(f(e),f(t),i,l,h,d);return d.delete(e),g;case"[object Symbol]":if(u)return u.call(e)==u.call(t)}return!1}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,i){n[++t]=[i,e]})),n}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},function(e,t,n){var i=n(365),r=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,o,a,s){var c=1&n,l=i(e),u=l.length;if(u!=i(t).length&&!c)return!1;for(var h=u;h--;){var d=l[h];if(!(c?d in t:r.call(t,d)))return!1}var f=s.get(e),p=s.get(t);if(f&&p)return f==t&&p==e;var m=!0;s.set(e,t),s.set(t,e);for(var g=c;++h<u;){var v=e[d=l[h]],_=t[d];if(o)var b=c?o(_,v,d,t,e,s):o(v,_,d,e,t,s);if(!(void 0===b?v===_||a(v,_,n,o,s):b)){m=!1;break}g||(g="constructor"==d)}if(m&&!g){var y=e.constructor,w=t.constructor;y==w||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof w&&w instanceof w||(m=!1)}return s.delete(e),s.delete(t),m}},function(e,t){e.exports=function(e,t){for(var n=-1,i=null==e?0:e.length,r=0,o=[];++n<i;){var a=e[n];t(a,n,e)&&(o[r++]=a)}return o}},function(e,t,n){var i=n(110)(n(82),"DataView");e.exports=i},function(e,t,n){var i=n(110)(n(82),"Promise");e.exports=i},function(e,t,n){var i=n(110)(n(82),"Set");e.exports=i},function(e,t,n){var i=n(110)(n(82),"WeakMap");e.exports=i},function(e,t,n){var i=n(369),r=n(148);e.exports=function(e){for(var t=r(e),n=t.length;n--;){var o=t[n],a=e[o];t[n]=[o,a,i(a)]}return t}},function(e,t,n){var i=n(362),r=n(693),o=n(699),a=n(244),s=n(369),c=n(370),l=n(181);e.exports=function(e,t){return a(e)&&s(t)?c(l(e),t):function(n){var a=r(n,e);return void 0===a&&a===t?o(n,e):i(t,a,3)}}},function(e,t,n){var i=n(371);e.exports=function(e,t,n){var r=null==e?void 0:i(e,t);return void 0===r?n:r}},function(e,t,n){var i=n(695),r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=i((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(r,(function(e,n,i,r){t.push(i?r.replace(o,"$1"):n||e)})),t}));e.exports=a},function(e,t,n){var i=n(696);e.exports=function(e){var t=i(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},function(e,t,n){var i=n(242);function r(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function n(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var a=e.apply(this,i);return n.cache=o.set(r,a)||o,a};return n.cache=new(r.Cache||i),n}r.Cache=i,e.exports=r},function(e,t,n){var i=n(698);e.exports=function(e){return null==e?"":i(e)}},function(e,t,n){var i=n(147),r=n(360),o=n(73),a=n(180),s=i?i.prototype:void 0,c=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return r(t,e)+"";if(a(t))return c?c.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t,n){var i=n(700),r=n(701);e.exports=function(e,t){return null!=e&&r(e,t,i)}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var i=n(372),r=n(232),o=n(73),a=n(233),s=n(235),c=n(181);e.exports=function(e,t,n){for(var l=-1,u=(t=i(t,e)).length,h=!1;++l<u;){var d=c(t[l]);if(!(h=null!=e&&n(e,d)))break;e=e[d]}return h||++l!=u?h:!!(u=null==e?0:e.length)&&s(u)&&a(d,u)&&(o(e)||r(e))}},function(e,t,n){var i=n(703),r=n(704),o=n(244),a=n(181);e.exports=function(e){return o(e)?i(a(e)):r(e)}},function(e,t){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},function(e,t,n){var i=n(371);e.exports=function(e){return function(t){return i(t,e)}}},function(e,t,n){var i=n(373),r=n(118);e.exports=function(e,t){var n=-1,o=r(e)?Array(e.length):[];return i(e,(function(e,i,r){o[++n]=t(e,i,r)})),o}},function(e,t,n){var i=n(118);e.exports=function(e,t){return function(n,r){if(null==n)return n;if(!i(n))return e(n,r);for(var o=n.length,a=t?o:-1,s=Object(n);(t?a--:++a<o)&&!1!==r(s[a],a,s););return n}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mergeClasses=void 0;var i=a(n(231)),r=a(n(708)),o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function a(e){return e&&e.__esModule?e:{default:e}}var s=t.mergeClasses=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=e.default&&(0,r.default)(e.default)||{};return t.map((function(t){var r=e[t];return r&&(0,i.default)(r,(function(e,t){n[t]||(n[t]={}),n[t]=o({},n[t],r[t])})),t})),n};t.default=s},function(e,t,n){var i=n(709);e.exports=function(e){return i(e,5)}},function(e,t,n){var i=n(174),r=n(374),o=n(375),a=n(710),s=n(711),c=n(377),l=n(378),u=n(714),h=n(715),d=n(365),f=n(716),p=n(179),m=n(717),g=n(718),v=n(381),_=n(73),b=n(172),y=n(723),w=n(76),O=n(725),C=n(148),E=n(151),A={};A["[object Arguments]"]=A["[object Array]"]=A["[object ArrayBuffer]"]=A["[object DataView]"]=A["[object Boolean]"]=A["[object Date]"]=A["[object Float32Array]"]=A["[object Float64Array]"]=A["[object Int8Array]"]=A["[object Int16Array]"]=A["[object Int32Array]"]=A["[object Map]"]=A["[object Number]"]=A["[object Object]"]=A["[object RegExp]"]=A["[object Set]"]=A["[object String]"]=A["[object Symbol]"]=A["[object Uint8Array]"]=A["[object Uint8ClampedArray]"]=A["[object Uint16Array]"]=A["[object Uint32Array]"]=!0,A["[object Error]"]=A["[object Function]"]=A["[object WeakMap]"]=!1,e.exports=function e(t,n,x,T,S,D){var P,I=1&n,M=2&n,R=4&n;if(x&&(P=S?x(t,T,S,D):x(t)),void 0!==P)return P;if(!w(t))return t;var L=_(t);if(L){if(P=m(t),!I)return l(t,P)}else{var j=p(t),F="[object Function]"==j||"[object GeneratorFunction]"==j;if(b(t))return c(t,I);if("[object Object]"==j||"[object Arguments]"==j||F&&!S){if(P=M||F?{}:v(t),!I)return M?h(t,s(P,t)):u(t,a(P,t))}else{if(!A[j])return S?t:{};P=g(t,j,I)}}D||(D=new i);var N=D.get(t);if(N)return N;D.set(t,P),O(t)?t.forEach((function(i){P.add(e(i,n,x,i,t,D))})):y(t)&&t.forEach((function(i,r){P.set(r,e(i,n,x,r,t,D))}));var z=L?void 0:(R?M?f:d:M?E:C)(t);return r(z||t,(function(i,r){z&&(i=t[r=i]),o(P,r,e(i,n,x,r,t,D))})),P}},function(e,t,n){var i=n(150),r=n(148);e.exports=function(e,t){return e&&i(t,r(t),e)}},function(e,t,n){var i=n(150),r=n(151);e.exports=function(e,t){return e&&i(t,r(t),e)}},function(e,t,n){var i=n(76),r=n(238),o=n(713),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!i(e))return o(e);var t=r(e),n=[];for(var s in e)("constructor"!=s||!t&&a.call(e,s))&&n.push(s);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t,n){var i=n(150),r=n(243);e.exports=function(e,t){return i(e,r(e),t)}},function(e,t,n){var i=n(150),r=n(379);e.exports=function(e,t){return i(e,r(e),t)}},function(e,t,n){var i=n(366),r=n(379),o=n(151);e.exports=function(e){return i(e,o,r)}},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,i=new e.constructor(t);return t&&"string"==typeof e[0]&&n.call(e,"index")&&(i.index=e.index,i.input=e.input),i}},function(e,t,n){var i=n(246),r=n(719),o=n(720),a=n(721),s=n(380);e.exports=function(e,t,n){var c=e.constructor;switch(t){case"[object ArrayBuffer]":return i(e);case"[object Boolean]":case"[object Date]":return new c(+e);case"[object DataView]":return r(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":return new c;case"[object Number]":case"[object String]":return new c(e);case"[object RegExp]":return o(e);case"[object Set]":return new c;case"[object Symbol]":return a(e)}}},function(e,t,n){var i=n(246);e.exports=function(e,t){var n=t?i(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},function(e,t){var n=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}},function(e,t,n){var i=n(147),r=i?i.prototype:void 0,o=r?r.valueOf:void 0;e.exports=function(e){return o?Object(o.call(e)):{}}},function(e,t,n){var i=n(76),r=Object.create,o=function(){function e(){}return function(t){if(!i(t))return{};if(r)return r(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=o},function(e,t,n){var i=n(724),r=n(236),o=n(237),a=o&&o.isMap,s=a?r(a):i;e.exports=s},function(e,t,n){var i=n(179),r=n(87);e.exports=function(e){return r(e)&&"[object Map]"==i(e)}},function(e,t,n){var i=n(726),r=n(236),o=n(237),a=o&&o.isSet,s=a?r(a):i;e.exports=s},function(e,t,n){var i=n(179),r=n(87);e.exports=function(e){return r(e)&&"[object Set]"==i(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.autoprefix=void 0;var i,r=n(231),o=(i=r)&&i.__esModule?i:{default:i},a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};var s={borderRadius:function(e){return{msBorderRadius:e,MozBorderRadius:e,OBorderRadius:e,WebkitBorderRadius:e,borderRadius:e}},boxShadow:function(e){return{msBoxShadow:e,MozBoxShadow:e,OBoxShadow:e,WebkitBoxShadow:e,boxShadow:e}},userSelect:function(e){return{WebkitTouchCallout:e,KhtmlUserSelect:e,MozUserSelect:e,msUserSelect:e,WebkitUserSelect:e,userSelect:e}},flex:function(e){return{WebkitBoxFlex:e,MozBoxFlex:e,WebkitFlex:e,msFlex:e,flex:e}},flexBasis:function(e){return{WebkitFlexBasis:e,flexBasis:e}},justifyContent:function(e){return{WebkitJustifyContent:e,justifyContent:e}},transition:function(e){return{msTransition:e,MozTransition:e,OTransition:e,WebkitTransition:e,transition:e}},transform:function(e){return{msTransform:e,MozTransform:e,OTransform:e,WebkitTransform:e,transform:e}},absolute:function(e){var t=e&&e.split(" ");return{position:"absolute",top:t&&t[0],right:t&&t[1],bottom:t&&t[2],left:t&&t[3]}},extend:function(e,t){var n=t[e];return n||{extend:e}}},c=t.autoprefix=function(e){var t={};return(0,o.default)(e,(function(e,n){var i={};(0,o.default)(e,(function(e,t){var n=s[t];n?i=a({},i,n(e)):i[t]=e})),t[n]=i})),t};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hover=void 0;var i,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=n(2),a=(i=o)&&i.__esModule?i:{default:i};function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function l(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=t.hover=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span";return function(n){function i(){var n,o,l;s(this,i);for(var u=arguments.length,h=Array(u),d=0;d<u;d++)h[d]=arguments[d];return o=l=c(this,(n=i.__proto__||Object.getPrototypeOf(i)).call.apply(n,[this].concat(h))),l.state={hover:!1},l.handleMouseOver=function(){return l.setState({hover:!0})},l.handleMouseOut=function(){return l.setState({hover:!1})},l.render=function(){return a.default.createElement(t,{onMouseOver:l.handleMouseOver,onMouseOut:l.handleMouseOut},a.default.createElement(e,r({},l.props,l.state)))},c(l,o)}return l(i,n),i}(a.default.Component)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.active=void 0;var i,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=n(2),a=(i=o)&&i.__esModule?i:{default:i};function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function l(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=t.active=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span";return function(n){function i(){var n,o,l;s(this,i);for(var u=arguments.length,h=Array(u),d=0;d<u;d++)h[d]=arguments[d];return o=l=c(this,(n=i.__proto__||Object.getPrototypeOf(i)).call.apply(n,[this].concat(h))),l.state={active:!1},l.handleMouseDown=function(){return l.setState({active:!0})},l.handleMouseUp=function(){return l.setState({active:!1})},l.render=function(){return a.default.createElement(t,{onMouseDown:l.handleMouseDown,onMouseUp:l.handleMouseUp},a.default.createElement(e,r({},l.props,l.state)))},c(l,o)}return l(i,n),i}(a.default.Component)};t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){var n={},i=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];n[e]=t};return 0===e&&i("first-child"),e===t-1&&i("last-child"),(0===e||e%2===0)&&i("even"),1===Math.abs(e%2)&&i("odd"),i("nth-child",e),n}},function(e,t,n){var i=n(174),r=n(383),o=n(355),a=n(732),s=n(76),c=n(151),l=n(384);e.exports=function e(t,n,u,h,d){t!==n&&o(n,(function(o,c){if(d||(d=new i),s(o))a(t,n,c,u,e,h,d);else{var f=h?h(l(t,c),o,c+"",t,n,d):void 0;void 0===f&&(f=o),r(t,c,f)}}),c)}},function(e,t,n){var i=n(383),r=n(377),o=n(380),a=n(378),s=n(381),c=n(232),l=n(73),u=n(733),h=n(172),d=n(239),f=n(76),p=n(359),m=n(234),g=n(384),v=n(734);e.exports=function(e,t,n,_,b,y,w){var O=g(e,n),C=g(t,n),E=w.get(C);if(E)i(e,n,E);else{var A=y?y(O,C,n+"",e,t,w):void 0,x=void 0===A;if(x){var T=l(C),S=!T&&h(C),D=!T&&!S&&m(C);A=C,T||S||D?l(O)?A=O:u(O)?A=a(O):S?(x=!1,A=r(C,!0)):D?(x=!1,A=o(C,!0)):A=[]:p(C)||c(C)?(A=O,c(O)?A=v(O):f(O)&&!d(O)||(A=s(C))):x=!1}x&&(w.set(C,A),b(A,C,_,y,w),w.delete(C)),i(e,n,A)}}},function(e,t,n){var i=n(118),r=n(87);e.exports=function(e){return r(e)&&i(e)}},function(e,t,n){var i=n(150),r=n(151);e.exports=function(e){return i(e,r(e))}},function(e,t,n){var i=n(736),r=n(743);e.exports=function(e){return i((function(t,n){var i=-1,o=n.length,a=o>1?n[o-1]:void 0,s=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,s&&r(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),t=Object(t);++i<o;){var c=n[i];c&&e(t,c,i,a)}return t}))}},function(e,t,n){var i=n(173),r=n(737),o=n(739);e.exports=function(e,t){return o(r(e,t,i),e+"")}},function(e,t,n){var i=n(738),r=Math.max;e.exports=function(e,t,n){return t=r(void 0===t?e.length-1:t,0),function(){for(var o=arguments,a=-1,s=r(o.length-t,0),c=Array(s);++a<s;)c[a]=o[t+a];a=-1;for(var l=Array(t+1);++a<t;)l[a]=o[a];return l[t]=n(c),i(e,this,l)}}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var i=n(740),r=n(742)(i);e.exports=r},function(e,t,n){var i=n(741),r=n(376),o=n(173),a=r?function(e,t){return r(e,"toString",{configurable:!0,enumerable:!1,value:i(t),writable:!0})}:o;e.exports=a},function(e,t){e.exports=function(e){return function(){return e}}},function(e,t){var n=Date.now;e.exports=function(e){var t=0,i=0;return function(){var r=n(),o=16-(r-i);if(i=r,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var i=n(149),r=n(118),o=n(233),a=n(76);e.exports=function(e,t,n){if(!a(n))return!1;var s=typeof t;return!!("number"==s?r(n)&&o(t,n.length):"string"==s&&t in n)&&i(n[t],e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Alpha=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(2),a=u(o),s=u(n(86)),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(745)),l=u(n(248));function u(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}var f=t.Alpha=function(e){function t(){var e,n,i;h(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=d(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i.handleChange=function(e){var t=c.calculateChange(e,i.props.hsl,i.props.direction,i.props.a,i.container);t&&"function"===typeof i.props.onChange&&i.props.onChange(t,e)},i.handleMouseDown=function(e){i.handleChange(e),window.addEventListener("mousemove",i.handleChange),window.addEventListener("mouseup",i.handleMouseUp)},i.handleMouseUp=function(){i.unbindEventListeners()},i.unbindEventListeners=function(){window.removeEventListener("mousemove",i.handleChange),window.removeEventListener("mouseup",i.handleMouseUp)},d(i,n)}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"render",value:function(){var e=this,t=this.props.rgb,n=(0,s.default)({default:{alpha:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},checkboard:{absolute:"0px 0px 0px 0px",overflow:"hidden",borderRadius:this.props.radius},gradient:{absolute:"0px 0px 0px 0px",background:"linear-gradient(to right, rgba("+t.r+","+t.g+","+t.b+", 0) 0%,\n rgba("+t.r+","+t.g+","+t.b+", 1) 100%)",boxShadow:this.props.shadow,borderRadius:this.props.radius},container:{position:"relative",height:"100%",margin:"0 3px"},pointer:{position:"absolute",left:100*t.a+"%"},slider:{width:"4px",borderRadius:"1px",height:"8px",boxShadow:"0 0 2px rgba(0, 0, 0, .6)",background:"#fff",marginTop:"1px",transform:"translateX(-2px)"}},vertical:{gradient:{background:"linear-gradient(to bottom, rgba("+t.r+","+t.g+","+t.b+", 0) 0%,\n rgba("+t.r+","+t.g+","+t.b+", 1) 100%)"},pointer:{left:0,top:100*t.a+"%"}},overwrite:i({},this.props.style)},{vertical:"vertical"===this.props.direction,overwrite:!0});return a.default.createElement("div",{style:n.alpha},a.default.createElement("div",{style:n.checkboard},a.default.createElement(l.default,{renderers:this.props.renderers})),a.default.createElement("div",{style:n.gradient}),a.default.createElement("div",{style:n.container,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},a.default.createElement("div",{style:n.pointer},this.props.pointer?a.default.createElement(this.props.pointer,this.props):a.default.createElement("div",{style:n.slider}))))}}]),t}(o.PureComponent||o.Component);t.default=f},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.calculateChange=function(e,t,n,i,r){var o=r.clientWidth,a=r.clientHeight,s="number"===typeof e.pageX?e.pageX:e.touches[0].pageX,c="number"===typeof e.pageY?e.pageY:e.touches[0].pageY,l=s-(r.getBoundingClientRect().left+window.pageXOffset),u=c-(r.getBoundingClientRect().top+window.pageYOffset);if("vertical"===n){var h=void 0;if(h=u<0?0:u>a?1:Math.round(100*u/a)/100,t.a!==h)return{h:t.h,s:t.s,l:t.l,a:h,source:"rgb"}}else{var d=void 0;if(i!==(d=l<0?0:l>o?1:Math.round(100*l/o)/100))return{h:t.h,s:t.s,l:t.l,a:d,source:"rgb"}}return null}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i={},r=t.render=function(e,t,n,i){if("undefined"===typeof document&&!i)return null;var r=i?new i:document.createElement("canvas");r.width=2*n,r.height=2*n;var o=r.getContext("2d");return o?(o.fillStyle=e,o.fillRect(0,0,r.width,r.height),o.fillStyle=t,o.fillRect(0,0,n,n),o.translate(n,n),o.fillRect(0,0,n,n),r.toDataURL()):null};t.get=function(e,t,n,o){var a=e+"-"+t+"-"+n+(o?"-server":"");if(i[a])return i[a];var s=r(e,t,n,o);return i[a]=s,s}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EditableInput=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=n(2),o=s(r),a=s(n(86));function s(e){return e&&e.__esModule?e:{default:e}}var c=[38,40],l=t.EditableInput=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.handleBlur=function(){n.state.blurValue&&n.setState({value:n.state.blurValue,blurValue:null})},n.handleChange=function(e){n.setUpdatedValue(e.target.value,e)},n.handleKeyDown=function(e){var t,i=function(e){return Number(String(e).replace(/%/g,""))}(e.target.value);if(!isNaN(i)&&(t=e.keyCode,c.indexOf(t)>-1)){var r=n.getArrowOffset(),o=38===e.keyCode?i+r:i-r;n.setUpdatedValue(o,e)}},n.handleDrag=function(e){if(n.props.dragLabel){var t=Math.round(n.props.value+e.movementX);t>=0&&t<=n.props.dragMax&&n.props.onChange&&n.props.onChange(n.getValueObjectWithLabel(t),e)}},n.handleMouseDown=function(e){n.props.dragLabel&&(e.preventDefault(),n.handleDrag(e),window.addEventListener("mousemove",n.handleDrag),window.addEventListener("mouseup",n.handleMouseUp))},n.handleMouseUp=function(){n.unbindEventListeners()},n.unbindEventListeners=function(){window.removeEventListener("mousemove",n.handleDrag),window.removeEventListener("mouseup",n.handleMouseUp)},n.state={value:String(e.value).toUpperCase(),blurValue:String(e.value).toUpperCase()},n}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),i(t,[{key:"componentDidUpdate",value:function(e,t){this.props.value===this.state.value||e.value===this.props.value&&t.value===this.state.value||(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(e){return function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},this.props.label,e)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||1}},{key:"setUpdatedValue",value:function(e,t){var n=this.props.label?this.getValueObjectWithLabel(e):e;this.props.onChange&&this.props.onChange(n,t),this.setState({value:e})}},{key:"render",value:function(){var e=this,t=(0,a.default)({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return o.default.createElement("div",{style:t.wrap},o.default.createElement("input",{style:t.input,ref:function(t){return e.input=t},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?o.default.createElement("span",{style:t.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),t}(r.PureComponent||r.Component);t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Hue=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=n(2),o=c(r),a=c(n(86)),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(749));function c(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}var h=t.Hue=function(e){function t(){var e,n,i;l(this,t);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=i=u(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),i.handleChange=function(e){var t=s.calculateChange(e,i.props.direction,i.props.hsl,i.container);t&&"function"===typeof i.props.onChange&&i.props.onChange(t,e)},i.handleMouseDown=function(e){i.handleChange(e),window.addEventListener("mousemove",i.handleChange),window.addEventListener("mouseup",i.handleMouseUp)},i.handleMouseUp=function(){i.unbindEventListeners()},u(i,n)}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),i(t,[{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"unbindEventListeners",value:function(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var e=this,t=this.props.direction,n=void 0===t?"horizontal":t,i=(0,a.default)({default:{hue:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius,boxShadow:this.props.shadow},container:{padding:"0 2px",position:"relative",height:"100%",borderRadius:this.props.radius},pointer:{position:"absolute",left:100*this.props.hsl.h/360+"%"},slider:{marginTop:"1px",width:"4px",borderRadius:"1px",height:"8px",boxShadow:"0 0 2px rgba(0, 0, 0, .6)",background:"#fff",transform:"translateX(-2px)"}},vertical:{pointer:{left:"0px",top:-100*this.props.hsl.h/360+100+"%"}}},{vertical:"vertical"===n});return o.default.createElement("div",{style:i.hue},o.default.createElement("div",{className:"hue-"+n,style:i.container,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},o.default.createElement("style",null,"\n .hue-horizontal {\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\n 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n background: -webkit-linear-gradient(to right, #f00 0%, #ff0\n 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n }\n\n .hue-vertical {\n background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\n #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\n #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n }\n "),o.default.createElement("div",{style:i.pointer},this.props.pointer?o.default.createElement(this.props.pointer,this.props):o.default.createElement("div",{style:i.slider}))))}}]),t}(r.PureComponent||r.Component);t.default=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.calculateChange=function(e,t,n,i){var r=i.clientWidth,o=i.clientHeight,a="number"===typeof e.pageX?e.pageX:e.touches[0].pageX,s="number"===typeof e.pageY?e.pageY:e.touches[0].pageY,c=a-(i.getBoundingClientRect().left+window.pageXOffset),l=s-(i.getBoundingClientRect().top+window.pageYOffset);if("vertical"===t){var u=void 0;if(l<0)u=359;else if(l>o)u=0;else{u=360*(-100*l/o+100)/100}if(n.h!==u)return{h:u,s:n.s,l:n.l,a:n.a,source:"hsl"}}else{var h=void 0;if(c<0)h=0;else if(c>r)h=359;else{h=360*(100*c/r)/100}if(n.h!==h)return{h:h,s:n.s,l:n.l,a:n.a,source:"hsl"}}return null}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Raised=void 0;var i=s(n(2)),r=s(n(36)),o=s(n(86)),a=s(n(382));function s(e){return e&&e.__esModule?e:{default:e}}var c=t.Raised=function(e){var t=e.zDepth,n=e.radius,r=e.background,s=e.children,c=e.styles,l=void 0===c?{}:c,u=(0,o.default)((0,a.default)({default:{wrap:{position:"relative",display:"inline-block"},content:{position:"relative"},bg:{absolute:"0px 0px 0px 0px",boxShadow:"0 "+t+"px "+4*t+"px rgba(0,0,0,.24)",borderRadius:n,background:r}},"zDepth-0":{bg:{boxShadow:"none"}},"zDepth-1":{bg:{boxShadow:"0 2px 10px rgba(0,0,0,.12), 0 2px 5px rgba(0,0,0,.16)"}},"zDepth-2":{bg:{boxShadow:"0 6px 20px rgba(0,0,0,.19), 0 8px 17px rgba(0,0,0,.2)"}},"zDepth-3":{bg:{boxShadow:"0 17px 50px rgba(0,0,0,.19), 0 12px 15px rgba(0,0,0,.24)"}},"zDepth-4":{bg:{boxShadow:"0 25px 55px rgba(0,0,0,.21), 0 16px 28px rgba(0,0,0,.22)"}},"zDepth-5":{bg:{boxShadow:"0 40px 77px rgba(0,0,0,.22), 0 27px 24px rgba(0,0,0,.2)"}},square:{bg:{borderRadius:"0"}},circle:{bg:{borderRadius:"50%"}}},l),{"zDepth-1":1===t});return i.default.createElement("div",{style:u.wrap},i.default.createElement("div",{style:u.bg}),i.default.createElement("div",{style:u.content},s))};c.propTypes={background:r.default.string,zDepth:r.default.oneOf([0,1,2,3,4,5]),radius:r.default.number,styles:r.default.object},c.defaultProps={background:"#fff",zDepth:1,radius:2,styles:{}},t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Saturation=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),r=n(2),o=l(r),a=l(n(86)),s=l(n(752)),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(757));function l(e){return e&&e.__esModule?e:{default:e}}var u=t.Saturation=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleChange=function(e){"function"===typeof n.props.onChange&&n.throttle(n.props.onChange,c.calculateChange(e,n.props.hsl,n.container),e)},n.handleMouseDown=function(e){n.handleChange(e),window.addEventListener("mousemove",n.handleChange),window.addEventListener("mouseup",n.handleMouseUp)},n.handleMouseUp=function(){n.unbindEventListeners()},n.throttle=(0,s.default)((function(e,t,n){e(t,n)}),50),n}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),i(t,[{key:"componentWillUnmount",value:function(){this.throttle.cancel(),this.unbindEventListeners()}},{key:"unbindEventListeners",value:function(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var e=this,t=this.props.style||{},n=t.color,i=t.white,r=t.black,s=t.pointer,c=t.circle,l=(0,a.default)({default:{color:{absolute:"0px 0px 0px 0px",background:"hsl("+this.props.hsl.h+",100%, 50%)",borderRadius:this.props.radius},white:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},black:{absolute:"0px 0px 0px 0px",boxShadow:this.props.shadow,borderRadius:this.props.radius},pointer:{position:"absolute",top:-100*this.props.hsv.v+100+"%",left:100*this.props.hsv.s+"%",cursor:"default"},circle:{width:"4px",height:"4px",boxShadow:"0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\n 0 0 1px 2px rgba(0,0,0,.4)",borderRadius:"50%",cursor:"hand",transform:"translate(-2px, -2px)"}},custom:{color:n,white:i,black:r,pointer:s,circle:c}},{custom:!!this.props.style});return o.default.createElement("div",{style:l.color,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},o.default.createElement("style",null,"\n .saturation-white {\n background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\n background: linear-gradient(to right, #fff, rgba(255,255,255,0));\n }\n .saturation-black {\n background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\n background: linear-gradient(to top, #000, rgba(0,0,0,0));\n }\n "),o.default.createElement("div",{style:l.white,className:"saturation-white"},o.default.createElement("div",{style:l.black,className:"saturation-black"}),o.default.createElement("div",{style:l.pointer},this.props.pointer?o.default.createElement(this.props.pointer,this.props):o.default.createElement("div",{style:l.circle}))))}}]),t}(r.PureComponent||r.Component);t.default=u},function(e,t,n){var i=n(385),r=n(76);e.exports=function(e,t,n){var o=!0,a=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return r(n)&&(o="leading"in n?!!n.leading:o,a="trailing"in n?!!n.trailing:a),i(e,t,{leading:o,maxWait:t,trailing:a})}},function(e,t,n){var i=n(82);e.exports=function(){return i.Date.now()}},function(e,t,n){var i=n(755),r=n(76),o=n(180),a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(o(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=i(e);var n=s.test(e);return n||c.test(e)?l(e.slice(2),n?2:8):a.test(e)?NaN:+e}},function(e,t,n){var i=n(756),r=/^\s+/;e.exports=function(e){return e?e.slice(0,i(e)+1).replace(r,""):e}},function(e,t){var n=/\s/;e.exports=function(e){for(var t=e.length;t--&&n.test(e.charAt(t)););return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.calculateChange=function(e,t,n){var i=n.getBoundingClientRect(),r=i.width,o=i.height,a="number"===typeof e.pageX?e.pageX:e.touches[0].pageX,s="number"===typeof e.pageY?e.pageY:e.touches[0].pageY,c=a-(n.getBoundingClientRect().left+window.pageXOffset),l=s-(n.getBoundingClientRect().top+window.pageYOffset);c<0?c=0:c>r&&(c=r),l<0?l=0:l>o&&(l=o);var u=c/r,h=1-l/o;return{h:t.h,s:u,v:h,a:t.a,source:"hsv"}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ColorWrap=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=n(2),a=l(o),s=l(n(385)),c=l(n(386));function l(e){return e&&e.__esModule?e:{default:e}}var u=t.ColorWrap=function(e){var t=function(t){function n(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.handleChange=function(e,n){if(c.default.simpleCheckForValidColor(e)){var i=c.default.toState(e,e.h||t.state.oldHue);t.setState(i),t.props.onChangeComplete&&t.debounce(t.props.onChangeComplete,i,n),t.props.onChange&&t.props.onChange(i,n)}},t.handleSwatchHover=function(e,n){if(c.default.simpleCheckForValidColor(e)){var i=c.default.toState(e,e.h||t.state.oldHue);t.props.onSwatchHover&&t.props.onSwatchHover(i,n)}},t.state=i({},c.default.toState(e.color,0)),t.debounce=(0,s.default)((function(e,t,n){e(t,n)}),100),t}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,t),r(n,[{key:"render",value:function(){var t={};return this.props.onSwatchHover&&(t.onSwatchHover=this.handleSwatchHover),a.default.createElement(e,i({},this.props,this.state,{onChange:this.handleChange},t))}}],[{key:"getDerivedStateFromProps",value:function(e,t){return i({},c.default.toState(e.color,t.oldHue))}}]),n}(o.PureComponent||o.Component);return t.propTypes=i({},e.propTypes),t.defaultProps=i({},e.defaultProps,{color:{h:250,s:.5,l:.2,a:1}}),t};t.default=u},function(e,t,n){e.exports=n(760)},function(e,t,n){var i=n(374),r=n(373),o=n(358),a=n(73);e.exports=function(e,t){return(a(e)?i:r)(e,o(t))}},function(e,t,n){var i;!function(r){var o=/^\s+/,a=/\s+$/,s=0,c=r.round,l=r.min,u=r.max,h=r.random;function d(e,t){if(t=t||{},(e=e||"")instanceof d)return e;if(!(this instanceof d))return new d(e,t);var n=function(e){var t={r:0,g:0,b:0},n=1,i=null,s=null,c=null,h=!1,d=!1;"string"==typeof e&&(e=function(e){e=e.replace(o,"").replace(a,"").toLowerCase();var t,n=!1;if(P[e])e=P[e],n=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=B.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=B.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=B.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=B.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=B.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=B.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=B.hex8.exec(e))return{r:j(t[1]),g:j(t[2]),b:j(t[3]),a:k(t[4]),format:n?"name":"hex8"};if(t=B.hex6.exec(e))return{r:j(t[1]),g:j(t[2]),b:j(t[3]),format:n?"name":"hex"};if(t=B.hex4.exec(e))return{r:j(t[1]+""+t[1]),g:j(t[2]+""+t[2]),b:j(t[3]+""+t[3]),a:k(t[4]+""+t[4]),format:n?"name":"hex8"};if(t=B.hex3.exec(e))return{r:j(t[1]+""+t[1]),g:j(t[2]+""+t[2]),b:j(t[3]+""+t[3]),format:n?"name":"hex"};return!1}(e));"object"==typeof e&&(H(e.r)&&H(e.g)&&H(e.b)?(f=e.r,p=e.g,m=e.b,t={r:255*R(f,255),g:255*R(p,255),b:255*R(m,255)},h=!0,d="%"===String(e.r).substr(-1)?"prgb":"rgb"):H(e.h)&&H(e.s)&&H(e.v)?(i=N(e.s),s=N(e.v),t=function(e,t,n){e=6*R(e,360),t=R(t,100),n=R(n,100);var i=r.floor(e),o=e-i,a=n*(1-t),s=n*(1-o*t),c=n*(1-(1-o)*t),l=i%6;return{r:255*[n,s,a,a,c,n][l],g:255*[c,n,n,s,a,a][l],b:255*[a,a,c,n,n,s][l]}}(e.h,i,s),h=!0,d="hsv"):H(e.h)&&H(e.s)&&H(e.l)&&(i=N(e.s),c=N(e.l),t=function(e,t,n){var i,r,o;function a(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}if(e=R(e,360),t=R(t,100),n=R(n,100),0===t)i=r=o=n;else{var s=n<.5?n*(1+t):n+t-n*t,c=2*n-s;i=a(c,s,e+1/3),r=a(c,s,e),o=a(c,s,e-1/3)}return{r:255*i,g:255*r,b:255*o}}(e.h,i,c),h=!0,d="hsl"),e.hasOwnProperty("a")&&(n=e.a));var f,p,m;return n=M(n),{ok:h,format:e.format||d,r:l(255,u(t.r,0)),g:l(255,u(t.g,0)),b:l(255,u(t.b,0)),a:n}}(e);this._originalInput=e,this._r=n.r,this._g=n.g,this._b=n.b,this._a=n.a,this._roundA=c(100*this._a)/100,this._format=t.format||n.format,this._gradientType=t.gradientType,this._r<1&&(this._r=c(this._r)),this._g<1&&(this._g=c(this._g)),this._b<1&&(this._b=c(this._b)),this._ok=n.ok,this._tc_id=s++}function f(e,t,n){e=R(e,255),t=R(t,255),n=R(n,255);var i,r,o=u(e,t,n),a=l(e,t,n),s=(o+a)/2;if(o==a)i=r=0;else{var c=o-a;switch(r=s>.5?c/(2-o-a):c/(o+a),o){case e:i=(t-n)/c+(t<n?6:0);break;case t:i=(n-e)/c+2;break;case n:i=(e-t)/c+4}i/=6}return{h:i,s:r,l:s}}function p(e,t,n){e=R(e,255),t=R(t,255),n=R(n,255);var i,r,o=u(e,t,n),a=l(e,t,n),s=o,c=o-a;if(r=0===o?0:c/o,o==a)i=0;else{switch(o){case e:i=(t-n)/c+(t<n?6:0);break;case t:i=(n-e)/c+2;break;case n:i=(e-t)/c+4}i/=6}return{h:i,s:r,v:s}}function m(e,t,n,i){var r=[F(c(e).toString(16)),F(c(t).toString(16)),F(c(n).toString(16))];return i&&r[0].charAt(0)==r[0].charAt(1)&&r[1].charAt(0)==r[1].charAt(1)&&r[2].charAt(0)==r[2].charAt(1)?r[0].charAt(0)+r[1].charAt(0)+r[2].charAt(0):r.join("")}function g(e,t,n,i){return[F(z(i)),F(c(e).toString(16)),F(c(t).toString(16)),F(c(n).toString(16))].join("")}function v(e,t){t=0===t?0:t||10;var n=d(e).toHsl();return n.s-=t/100,n.s=L(n.s),d(n)}function _(e,t){t=0===t?0:t||10;var n=d(e).toHsl();return n.s+=t/100,n.s=L(n.s),d(n)}function b(e){return d(e).desaturate(100)}function y(e,t){t=0===t?0:t||10;var n=d(e).toHsl();return n.l+=t/100,n.l=L(n.l),d(n)}function w(e,t){t=0===t?0:t||10;var n=d(e).toRgb();return n.r=u(0,l(255,n.r-c(-t/100*255))),n.g=u(0,l(255,n.g-c(-t/100*255))),n.b=u(0,l(255,n.b-c(-t/100*255))),d(n)}function O(e,t){t=0===t?0:t||10;var n=d(e).toHsl();return n.l-=t/100,n.l=L(n.l),d(n)}function C(e,t){var n=d(e).toHsl(),i=(n.h+t)%360;return n.h=i<0?360+i:i,d(n)}function E(e){var t=d(e).toHsl();return t.h=(t.h+180)%360,d(t)}function A(e){var t=d(e).toHsl(),n=t.h;return[d(e),d({h:(n+120)%360,s:t.s,l:t.l}),d({h:(n+240)%360,s:t.s,l:t.l})]}function x(e){var t=d(e).toHsl(),n=t.h;return[d(e),d({h:(n+90)%360,s:t.s,l:t.l}),d({h:(n+180)%360,s:t.s,l:t.l}),d({h:(n+270)%360,s:t.s,l:t.l})]}function T(e){var t=d(e).toHsl(),n=t.h;return[d(e),d({h:(n+72)%360,s:t.s,l:t.l}),d({h:(n+216)%360,s:t.s,l:t.l})]}function S(e,t,n){t=t||6,n=n||30;var i=d(e).toHsl(),r=360/n,o=[d(e)];for(i.h=(i.h-(r*t>>1)+720)%360;--t;)i.h=(i.h+r)%360,o.push(d(i));return o}function D(e,t){t=t||6;for(var n=d(e).toHsv(),i=n.h,r=n.s,o=n.v,a=[],s=1/t;t--;)a.push(d({h:i,s:r,v:o})),o=(o+s)%1;return a}d.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,n,i=this.toRgb();return e=i.r/255,t=i.g/255,n=i.b/255,.2126*(e<=.03928?e/12.92:r.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:r.pow((t+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:r.pow((n+.055)/1.055,2.4))},setAlpha:function(e){return this._a=M(e),this._roundA=c(100*this._a)/100,this},toHsv:function(){var e=p(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=p(this._r,this._g,this._b),t=c(360*e.h),n=c(100*e.s),i=c(100*e.v);return 1==this._a?"hsv("+t+", "+n+"%, "+i+"%)":"hsva("+t+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var e=f(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=f(this._r,this._g,this._b),t=c(360*e.h),n=c(100*e.s),i=c(100*e.l);return 1==this._a?"hsl("+t+", "+n+"%, "+i+"%)":"hsla("+t+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(e){return m(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,n,i,r){var o=[F(c(e).toString(16)),F(c(t).toString(16)),F(c(n).toString(16)),F(z(i))];if(r&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:c(this._r),g:c(this._g),b:c(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+c(this._r)+", "+c(this._g)+", "+c(this._b)+")":"rgba("+c(this._r)+", "+c(this._g)+", "+c(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:c(100*R(this._r,255))+"%",g:c(100*R(this._g,255))+"%",b:c(100*R(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+c(100*R(this._r,255))+"%, "+c(100*R(this._g,255))+"%, "+c(100*R(this._b,255))+"%)":"rgba("+c(100*R(this._r,255))+"%, "+c(100*R(this._g,255))+"%, "+c(100*R(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(I[m(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+g(this._r,this._g,this._b,this._a),n=t,i=this._gradientType?"GradientType = 1, ":"";if(e){var r=d(e);n="#"+g(r._r,r._g,r._b,r._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+t+",endColorstr="+n+")"},toString:function(e){var t=!!e;e=e||this._format;var n=!1,i=this._a<1&&this._a>=0;return t||!i||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return d(this.toString())},_applyModification:function(e,t){var n=e.apply(null,[this].concat([].slice.call(t)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(y,arguments)},brighten:function(){return this._applyModification(w,arguments)},darken:function(){return this._applyModification(O,arguments)},desaturate:function(){return this._applyModification(v,arguments)},saturate:function(){return this._applyModification(_,arguments)},greyscale:function(){return this._applyModification(b,arguments)},spin:function(){return this._applyModification(C,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(S,arguments)},complement:function(){return this._applyCombination(E,arguments)},monochromatic:function(){return this._applyCombination(D,arguments)},splitcomplement:function(){return this._applyCombination(T,arguments)},triad:function(){return this._applyCombination(A,arguments)},tetrad:function(){return this._applyCombination(x,arguments)}},d.fromRatio=function(e,t){if("object"==typeof e){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]="a"===i?e[i]:N(e[i]));e=n}return d(e,t)},d.equals=function(e,t){return!(!e||!t)&&d(e).toRgbString()==d(t).toRgbString()},d.random=function(){return d.fromRatio({r:h(),g:h(),b:h()})},d.mix=function(e,t,n){n=0===n?0:n||50;var i=d(e).toRgb(),r=d(t).toRgb(),o=n/100;return d({r:(r.r-i.r)*o+i.r,g:(r.g-i.g)*o+i.g,b:(r.b-i.b)*o+i.b,a:(r.a-i.a)*o+i.a})},d.readability=function(e,t){var n=d(e),i=d(t);return(r.max(n.getLuminance(),i.getLuminance())+.05)/(r.min(n.getLuminance(),i.getLuminance())+.05)},d.isReadable=function(e,t,n){var i,r,o=d.readability(e,t);switch(r=!1,(i=function(e){var t,n;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),n=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==n&&"large"!==n&&(n="small");return{level:t,size:n}}(n)).level+i.size){case"AAsmall":case"AAAlarge":r=o>=4.5;break;case"AAlarge":r=o>=3;break;case"AAAsmall":r=o>=7}return r},d.mostReadable=function(e,t,n){var i,r,o,a,s=null,c=0;r=(n=n||{}).includeFallbackColors,o=n.level,a=n.size;for(var l=0;l<t.length;l++)(i=d.readability(e,t[l]))>c&&(c=i,s=d(t[l]));return d.isReadable(e,s,{level:o,size:a})||!r?s:(n.includeFallbackColors=!1,d.mostReadable(e,["#fff","#000"],n))};var P=d.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},I=d.hexNames=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[e[n]]=n);return t}(P);function M(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function R(e,t){(function(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)})(e)&&(e="100%");var n=function(e){return"string"===typeof e&&-1!=e.indexOf("%")}(e);return e=l(t,u(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),r.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function L(e){return l(1,u(0,e))}function j(e){return parseInt(e,16)}function F(e){return 1==e.length?"0"+e:""+e}function N(e){return e<=1&&(e=100*e+"%"),e}function z(e){return r.round(255*parseFloat(e)).toString(16)}function k(e){return j(e)/255}var B=function(){var e="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",t="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",n="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+t),rgba:new RegExp("rgba"+n),hsl:new RegExp("hsl"+t),hsla:new RegExp("hsla"+n),hsv:new RegExp("hsv"+t),hsva:new RegExp("hsva"+n),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function H(e){return!!B.CSS_UNIT.exec(e)}e.exports?e.exports=d:void 0===(i=function(){return d}.call(t,n,t,e))||(e.exports=i)}(Math)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Swatch=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=c(n(2)),o=c(n(86)),a=n(763),s=c(n(248));function c(e){return e&&e.__esModule?e:{default:e}}var l=t.Swatch=function(e){var t=e.color,n=e.style,a=e.onClick,c=void 0===a?function(){}:a,l=e.onHover,u=e.title,h=void 0===u?t:u,d=e.children,f=e.focus,p=e.focusStyle,m=void 0===p?{}:p,g="transparent"===t,v=(0,o.default)({default:{swatch:i({background:t,height:"100%",width:"100%",cursor:"pointer",position:"relative",outline:"none"},n,f?m:{})}}),_={};return l&&(_.onMouseOver=function(e){return l(t,e)}),r.default.createElement("div",i({style:v.swatch,onClick:function(e){return c(t,e)},title:h,tabIndex:0,onKeyDown:function(e){return 13===e.keyCode&&c(t,e)}},_),d,g&&r.default.createElement(s.default,{borderRadius:v.swatch.borderRadius,boxShadow:"inset 0 0 0 1px rgba(0,0,0,0.1)"}))};t.default=(0,a.handleFocus)(l)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleFocus=void 0;var i,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=n(2),s=(i=a)&&i.__esModule?i:{default:i};function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function u(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.handleFocus=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span";return function(n){function i(){var e,t,n;c(this,i);for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];return t=n=l(this,(e=i.__proto__||Object.getPrototypeOf(i)).call.apply(e,[this].concat(o))),n.state={focus:!1},n.handleFocus=function(){return n.setState({focus:!0})},n.handleBlur=function(){return n.setState({focus:!1})},l(n,t)}return u(i,n),o(i,[{key:"render",value:function(){return s.default.createElement(t,{onFocus:this.handleFocus,onBlur:this.handleBlur},s.default.createElement(e,r({},this.props,this.state)))}}]),i}(s.default.Component)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SketchFields=void 0;var i=s(n(2)),r=s(n(86)),o=s(n(386)),a=n(247);function s(e){return e&&e.__esModule?e:{default:e}}var c=t.SketchFields=function(e){var t=e.onChange,n=e.rgb,s=e.hsl,c=e.hex,l=e.disableAlpha,u=(0,r.default)({default:{fields:{display:"flex",paddingTop:"4px"},single:{flex:"1",paddingLeft:"6px"},alpha:{flex:"1",paddingLeft:"6px"},double:{flex:"2"},input:{width:"80%",padding:"4px 10% 3px",border:"none",boxShadow:"inset 0 0 0 1px #ccc",fontSize:"11px"},label:{display:"block",textAlign:"center",fontSize:"11px",color:"#222",paddingTop:"3px",paddingBottom:"4px",textTransform:"capitalize"}},disableAlpha:{alpha:{display:"none"}}},{disableAlpha:l}),h=function(e,i){e.hex?o.default.isValidHex(e.hex)&&t({hex:e.hex,source:"hex"},i):e.r||e.g||e.b?t({r:e.r||n.r,g:e.g||n.g,b:e.b||n.b,a:n.a,source:"rgb"},i):e.a&&(e.a<0?e.a=0:e.a>100&&(e.a=100),e.a/=100,t({h:s.h,s:s.s,l:s.l,a:e.a,source:"rgb"},i))};return i.default.createElement("div",{style:u.fields,className:"flexbox-fix"},i.default.createElement("div",{style:u.double},i.default.createElement(a.EditableInput,{style:{input:u.input,label:u.label},label:"hex",value:c.replace("#",""),onChange:h})),i.default.createElement("div",{style:u.single},i.default.createElement(a.EditableInput,{style:{input:u.input,label:u.label},label:"r",value:n.r,onChange:h,dragLabel:"true",dragMax:"255"})),i.default.createElement("div",{style:u.single},i.default.createElement(a.EditableInput,{style:{input:u.input,label:u.label},label:"g",value:n.g,onChange:h,dragLabel:"true",dragMax:"255"})),i.default.createElement("div",{style:u.single},i.default.createElement(a.EditableInput,{style:{input:u.input,label:u.label},label:"b",value:n.b,onChange:h,dragLabel:"true",dragMax:"255"})),i.default.createElement("div",{style:u.alpha},i.default.createElement(a.EditableInput,{style:{input:u.input,label:u.label},label:"a",value:Math.round(100*n.a),onChange:h,dragLabel:"true",dragMax:"100"})))};t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SketchPresetColors=void 0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},r=c(n(2)),o=c(n(36)),a=c(n(86)),s=n(247);function c(e){return e&&e.__esModule?e:{default:e}}var l=t.SketchPresetColors=function(e){var t=e.colors,n=e.onClick,o=void 0===n?function(){}:n,c=e.onSwatchHover,l=(0,a.default)({default:{colors:{margin:"0 -10px",padding:"10px 0 0 10px",borderTop:"1px solid #eee",display:"flex",flexWrap:"wrap",position:"relative"},swatchWrap:{width:"16px",height:"16px",margin:"0 10px 10px 0"},swatch:{borderRadius:"3px",boxShadow:"inset 0 0 0 1px rgba(0,0,0,.15)"}},"no-presets":{colors:{display:"none"}}},{"no-presets":!t||!t.length}),u=function(e,t){o({hex:e,source:"hex"},t)};return r.default.createElement("div",{style:l.colors,className:"flexbox-fix"},t.map((function(e){var t="string"===typeof e?{color:e}:e,n=""+t.color+(t.title||"");return r.default.createElement("div",{key:n,style:l.swatchWrap},r.default.createElement(s.Swatch,i({},t,{style:l.swatch,onClick:u,onHover:c,focusStyle:{boxShadow:"inset 0 0 0 1px rgba(0,0,0,.15), 0 0 4px "+t.color}})))})))};l.propTypes={colors:o.default.arrayOf(o.default.oneOfType([o.default.string,o.default.shape({color:o.default.string,title:o.default.string})])).isRequired},t.default=l},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},,,,,,,,,,function(e,t,n){"use strict";var i=n(2),r=n.n(i),o=n(210);t.a=function(e){var t=e.children,n=e.value,i=o.a;return r.a.createElement(i.Provider,{value:n},t)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return ye}));var i,r=n(26),o=n(5),a=n(17),s=n.n(a),c=n(2),l=n(24),u=n(403),h=n(22),d={applySelectableStyles:function(e){return e.style.overflow="hidden",e.style.height="0px",e.style.setProperty("-webkit-user-select","all"),e.style.setProperty("-moz-user-select","all"),e.style.setProperty("-ms-user-select","all"),e.style.setProperty("user-select","all"),e},copyCells:function(e){var t=document.createElement("table");d.applySelectableStyles(t);for(var n=0,i=e;n<i.length;n++)for(var r=i[n],o=t.appendChild(document.createElement("tr")),a=0,s=r;a<s.length;a++){var c=s[a];o.appendChild(document.createElement("td")).textContent=c}var l=e.map((function(e){return e.join("\t")})).join("\n");return d.copyElement(t,l)},copyString:function(e){var t=document.createElement("textarea");return d.applySelectableStyles(t),t.value=e,d.copyElement(t,e)},copyElement:function(e,t){if(!d.isCopySupported())return!1;document.body.appendChild(e);try{return window.getSelection().selectAllChildren(e),null!=t&&e.addEventListener("copy",(function(e){e.preventDefault();var n=e.clipboardData||window.clipboardData;null!=n&&n.setData("text",t)})),document.execCommand("copy")}catch(n){return!1}finally{document.body.removeChild(e)}},isCopySupported:function(){return null!=document.queryCommandSupported&&document.queryCommandSupported("copy")}},f={enableColumnInteractionBar:n(36).bool};!function(e){e.UP="up",e.DOWN="down",e.LEFT="left",e.RIGHT="right"}(i||(i={}));var p,m=n(39);!function(e){e.CELLS="cells",e.FULL_ROWS="full-rows",e.FULL_COLUMNS="full-columns",e.FULL_TABLE="full-table"}(p||(p={}));var g,v,_,b={ALL:[p.FULL_TABLE,p.FULL_COLUMNS,p.FULL_ROWS,p.CELLS],COLUMNS_AND_CELLS:[p.FULL_COLUMNS,p.CELLS],COLUMNS_ONLY:[p.FULL_COLUMNS],NONE:[],ROWS_AND_CELLS:[p.FULL_ROWS,p.CELLS],ROWS_ONLY:[p.FULL_ROWS]};!function(e){e.CELLS="cells",e.HEADER="column-header"}(g||(g={})),function(e){e.CELLS="cells",e.HEADER="row-header"}(v||(v={})),function(e){e.CELLS="cells",e.COLUMN_HEADERS="column-header",e.ROW_HEADERS="row-header"}(_||(_={}));var y=function(){function e(){}return e.getRegionCardinality=function(e){return null!=e.cols&&null!=e.rows?p.CELLS:null!=e.cols?p.FULL_COLUMNS:null!=e.rows?p.FULL_ROWS:p.FULL_TABLE},e.getFocusCellCoordinatesFromRegion=function(t){switch(e.getRegionCardinality(t)){case p.FULL_TABLE:return{col:0,row:0};case p.FULL_COLUMNS:return{col:t.cols[0],row:0};case p.FULL_ROWS:return{col:0,row:t.rows[0]};case p.CELLS:return{col:t.cols[0],row:t.rows[0]};default:return null}},e.copy=function(t){var n=e.getRegionCardinality(t);return n===p.CELLS?e.cell(t.rows[0],t.cols[0],t.rows[1],t.cols[1]):n===p.FULL_COLUMNS?e.column(t.cols[0],t.cols[1]):n===p.FULL_ROWS?e.row(t.rows[0],t.rows[1]):e.table()},e.cell=function(e,t,n,i){return{cols:this.normalizeInterval(t,i),rows:this.normalizeInterval(e,n)}},e.row=function(e,t){return{rows:this.normalizeInterval(e,t)}},e.column=function(e,t){return{cols:this.normalizeInterval(e,t)}},e.table=function(){return{}},e.add=function(e,t){var n=e.slice();return n.push(t),n},e.update=function(e,t,n){var i=e.slice();return null!=n?i.splice(n,1,t):(i.pop(),i.push(t)),i},e.clampRegion=function(t,n,i){var r=e.copy(t);return null!=t.rows&&(r.rows[0]=m.b.clamp(t.rows[0],0,n),r.rows[1]=m.b.clamp(t.rows[1],0,n)),null!=t.cols&&(r.cols[0]=m.b.clamp(t.cols[0],0,i),r.cols[1]=m.b.clamp(t.cols[1],0,i)),r},e.lastRegionIsEqual=function(t,n){if(null==t||0===t.length)return!1;var i=t[t.length-1];return e.regionsEqual(i,n)},e.findMatchingRegion=function(t,n){if(null==t)return-1;for(var i=0;i<t.length;i++)if(e.regionsEqual(t[i],n))return i;return-1},e.findContainingRegion=function(t,n){if(null==t)return-1;for(var i=0;i<t.length;i++)if(e.regionContains(t[i],n))return i;return-1},e.hasFullColumn=function(t,n){if(null==t)return!1;for(var i=0,r=t;i<r.length;i++){var o=r[i],a=e.getRegionCardinality(o);if(a===p.FULL_TABLE)return!0;if(a===p.FULL_COLUMNS&&e.intervalContainsIndex(o.cols,n))return!0}return!1},e.hasFullRow=function(t,n){if(null==t)return!1;for(var i=0,r=t;i<r.length;i++){var o=r[i],a=e.getRegionCardinality(o);if(a===p.FULL_TABLE)return!0;if(a===p.FULL_ROWS&&e.intervalContainsIndex(o.rows,n))return!0}return!1},e.hasFullTable=function(t){if(null==t)return!1;for(var n=0,i=t;n<i.length;n++){var r=i[n];if(e.getRegionCardinality(r)===p.FULL_TABLE)return!0}return!1},e.containsRegion=function(t,n){return e.overlapsRegion(t,n,!1)},e.overlapsRegion=function(t,n,i){void 0===i&&(i=!1);var r=i?e.intervalOverlaps:e.intervalContains;if(null==t||null==n)return!1;for(var o=0,a=t;o<a.length;o++){var s=a[o];switch(e.getRegionCardinality(s)){case p.FULL_TABLE:return!0;case p.FULL_COLUMNS:if(r(s.cols,n.cols))return!0;continue;case p.FULL_ROWS:if(r(s.rows,n.rows))return!0;continue;case p.CELLS:if(r(s.cols,n.cols)&&r(s.rows,n.rows))return!0;continue}}return!1},e.eachUniqueFullColumn=function(t,n){if(null!=t&&0!==t.length&&null!=n){var i={};t.forEach((function(t){if(e.getRegionCardinality(t)===p.FULL_COLUMNS)for(var r=t.cols,o=r[0],a=r[1],s=o;s<=a;s++)i[s]||(i[s]=!0,n(s))}))}},e.eachUniqueFullRow=function(t,n){if(null!=t&&0!==t.length&&null!=n){var i={};t.forEach((function(t){if(e.getRegionCardinality(t)===p.FULL_ROWS)for(var r=t.rows,o=r[0],a=r[1],s=o;s<=a;s++)i[s]||(i[s]=!0,n(s))}))}},e.enumerateUniqueCells=function(t,n,i){if(null==t||0===t.length)return[];for(var r={},o=[],a=0,s=t;a<s.length;a++){var c=s[a];e.eachCellInRegion(c,n,i,(function(e,t){var n=e+"-"+t;!0!==r[n]&&(r[n]=!0,o.push([e,t]))}))}return o.sort(e.rowFirstComparator),o},e.getCellRegionFromRegion=function(t,n,i){switch(e.getRegionCardinality(t)){case p.FULL_TABLE:return e.cell(0,0,n-1,i-1);case p.FULL_COLUMNS:return e.cell(0,t.cols[0],n-1,t.cols[1]);case p.FULL_ROWS:return e.cell(t.rows[0],0,t.rows[1],i-1);case p.CELLS:return e.cell(t.rows[0],t.cols[0],t.rows[1],t.cols[1]);default:return null}},e.sparseMapCells=function(t,n){var i=e.getBoundingRegion(t);if(null==i)return null;var r=i.rows[1]+1-i.rows[0],o=i.cols[1]+1-i.cols[0],a=m.b.times(r,(function(){return new Array(o)}));return t.forEach((function(e){var t=e[0],r=e[1];a[t-i.rows[0]][r-i.cols[0]]=n(t,r)})),a},e.getBoundingRegion=function(e){for(var t,n,i,r,o=0,a=e;o<a.length;o++){var s=a[o],c=s[0],l=s[1];t=null==t||c<t?c:t,n=null==n||c>n?c:n,i=null==i||l<i?l:i,r=null==r||l>r?l:r}return null==t?null:{cols:[i,r],rows:[t,n]}},e.isValid=function(e){return null!=e&&((null==e.rows||!(e.rows[0]<0||e.rows[1]<0))&&(null==e.cols||!(e.cols[0]<0||e.cols[1]<0)))},e.isRegionValidForTable=function(e,t,n){return 0!==t&&0!==n&&(!(null!=e.rows&&!w(e.rows,0,t-1))&&!(null!=e.cols&&!w(e.cols,0,n-1)))},e.joinStyledRegionGroups=function(t,n,i){var r=[];return null!=n&&(r=r.concat(n)),null!=t&&t.length>0&&r.push({className:h.nb,regions:t}),null!=i&&r.push({className:h.q,regions:[e.cell(i.row,i.col)]}),r},e.regionsEqual=function(t,n){return e.intervalsEqual(t.rows,n.rows)&&e.intervalsEqual(t.cols,n.cols)},e.expandRegion=function(t,n){var i=e.getRegionCardinality(t),r=e.getRegionCardinality(n);if(r!==i)return n;switch(r){case p.FULL_ROWS:var o=Math.min(t.rows[0],n.rows[0]),a=Math.max(t.rows[1],n.rows[1]);return e.row(o,a);case p.FULL_COLUMNS:var s=Math.min(t.cols[0],n.cols[0]),c=Math.max(t.cols[1],n.cols[1]);return e.column(s,c);case p.CELLS:o=Math.min(t.rows[0],n.rows[0]),s=Math.min(t.cols[0],n.cols[0]),a=Math.max(t.rows[1],n.rows[1]),c=Math.max(t.cols[1],n.cols[1]);return e.cell(o,s,a,c);default:return e.table()}},e.eachCellInRegion=function(t,n,i,r){switch(e.getRegionCardinality(t)){case p.FULL_TABLE:for(var o=0;o<n;o++)for(var a=0;a<i;a++)r(o,a);break;case p.FULL_COLUMNS:for(o=0;o<n;o++)for(a=t.cols[0];a<=t.cols[1];a++)r(o,a);break;case p.FULL_ROWS:for(o=t.rows[0];o<=t.rows[1];o++)for(a=0;a<i;a++)r(o,a);break;case p.CELLS:for(o=t.rows[0];o<=t.rows[1];o++)for(a=t.cols[0];a<=t.cols[1];a++)r(o,a)}},e.regionContains=function(t,n){return e.overlapsRegion([t],n,!1)},e.intervalsEqual=function(e,t){return null==e?null==t:null!=t&&(e[0]===t[0]&&e[1]===t[1])},e.intervalContainsIndex=function(e,t){return null!=e&&(e[0]<=t&&e[1]>=t)},e.intervalContains=function(e,t){return null!=e&&null!=t&&(e[0]<=t[0]&&t[1]<=e[1])},e.intervalOverlaps=function(e,t){return null!=e&&null!=t&&!(e[1]<t[0]||e[0]>t[1])},e.rowFirstComparator=function(e,t){var n=e[0]-t[0];return 0===n?e[1]-t[1]:n},e.numericalComparator=function(e,t){return e-t},e.normalizeInterval=function(t,n){null==n&&(n=t);var i=[t,n];return i.sort(e.numericalComparator),i},e}();function w(e,t,n){return O(e[0],t,n)&&O(e[1],t,n)}function O(e,t,n){return e>=t&&e<=n}var C,E=n(74),A=function(){function e(t,n,i,r,o){var a=this;void 0===i&&(i=e.DEFAULT_BLEED),void 0===r&&(r=e.DEFAULT_GHOST_HEIGHT),void 0===o&&(o=e.DEFAULT_GHOST_WIDTH),this.getCumulativeWidthBefore=function(e){return 0===e?0:a.getCumulativeWidthAt(e-1)},this.getCumulativeWidthAt=function(e){return 0===a.numCols?a.ghostWidth*e:e>=a.numCols?a.cumulativeColumnWidths[a.numCols-1]+a.ghostWidth*(e-a.numCols+1):a.cumulativeColumnWidths[e]},this.getCumulativeHeightBefore=function(e){return 0===e?0:a.getCumulativeHeightAt(e-1)},this.getCumulativeHeightAt=function(e){return 0===a.numRows?a.ghostHeight*e:e>=a.numRows?a.cumulativeRowHeights[a.numRows-1]+a.ghostHeight*(e-a.numRows+1):a.cumulativeRowHeights[e]},this.columnWidths=n,this.rowHeights=t,this.cumulativeColumnWidths=m.b.accumulate(n),this.cumulativeRowHeights=m.b.accumulate(t),this.numCols=n.length,this.numRows=t.length,this.bleed=i,this.ghostHeight=r,this.ghostWidth=o}return e.prototype.getCellRect=function(e,t){var n=this.rowHeights[e],i=this.cumulativeRowHeights[e]-n,r=this.columnWidths[t],o=this.cumulativeColumnWidths[t]-r;return new E.a(o,i,r,n)},e.prototype.getGhostCellRect=function(e,t){var n=0,i=0,r=0,o=0;return e>=this.rowHeights.length?(o=this.ghostHeight,i=this.getHeight()+this.ghostHeight*(e-this.numRows)):(o=this.rowHeights[e],i=this.cumulativeRowHeights[e]-o),t>=this.columnWidths.length?(r=this.ghostWidth,n=this.getWidth()+this.ghostWidth*(t-this.numCols)):(r=this.columnWidths[t],n=this.cumulativeColumnWidths[t]-r),new E.a(n,i,r,o)},e.prototype.getRowRect=function(e){var t=this.rowHeights[e],n=this.cumulativeRowHeights[e]-t;return new E.a(0,n,this.getWidth(),t)},e.prototype.getColumnRect=function(e){var t=this.columnWidths[e],n=this.cumulativeColumnWidths[e]-t;return new E.a(n,0,t,this.getHeight())},e.prototype.getWidth=function(){return 0===this.numCols?0:this.cumulativeColumnWidths[this.numCols-1]},e.prototype.getHeight=function(){return 0===this.numRows?0:this.cumulativeRowHeights[this.numRows-1]},e.prototype.getRect=function(){return new E.a(0,0,this.getWidth(),this.getHeight())},e.prototype.mapCellsInRect=function(e,t){var n=[];if(null==e)return n;for(var i=this.getRowIndicesInRect(e),r=i.rowIndexStart,o=i.rowIndexEnd,a=this.getColumnIndicesInRect(e),s=a.columnIndexStart,c=a.columnIndexEnd,l=r;l<=o;l++)for(var u=s;u<=c;u++)n.push(t(l,u));return n},e.prototype.mapRowsInRect=function(e,t){var n=[];if(null==e)return n;for(var i=this.getRowIndicesInRect(e),r=i.rowIndexStart,o=i.rowIndexEnd,a=r;a<=o;a++)n.push(t(a));return n},e.prototype.mapColumnsInRect=function(e,t){var n=[];if(null==e)return n;for(var i=this.getColumnIndicesInRect(e),r=i.columnIndexStart,o=i.columnIndexEnd,a=r;a<=o;a++)n.push(t(a));return n},e.prototype.getRowIndicesInRect=function(t,n,i){if(void 0===n&&(n=!1),void 0===i&&(i=e.DEFAULT_MAX_ROWS),null==t)return{rowIndexEnd:0,rowIndexStart:0};var r=n?Math.max(this.numRows,e.DEFAULT_MAX_ROWS):this.numRows,o=this.getIndicesInInterval(t.top,t.top+t.height,r,!n,this.getCumulativeHeightAt),a=o.start,s=o.end;return{rowIndexEnd:i>0&&s-a>i?a+i:s,rowIndexStart:a}},e.prototype.getColumnIndicesInRect=function(t,n,i){if(void 0===n&&(n=!1),void 0===i&&(i=e.DEFAULT_MAX_COLUMNS),null==t)return{columnIndexEnd:0,columnIndexStart:0};var r=n?Math.max(this.numCols,e.DEFAULT_MAX_COLUMNS):this.numCols,o=this.getIndicesInInterval(t.left,t.left+t.width,r,!n,this.getCumulativeWidthAt),a=o.start,s=o.end;return{columnIndexEnd:i>0&&s-a>i?a+i:s,columnIndexStart:a}},e.prototype.isGhostIndex=function(e,t){return e>=this.numRows||t>=this.numCols},e.prototype.isGhostColumn=function(e){return e>=this.numCols},e.prototype.getExtremaClasses=function(e,t,n,i){return e===n&&t===i?[h.B,h.C]:e===n?[h.B]:t===i?[h.C]:[]},e.prototype.getRegionStyle=function(e){switch(y.getRegionCardinality(e)){case p.CELLS:var t=e.rows,n=t[0],i=t[1],o=e.cols,a=o[0],s=o[1];if(this.isGhostIndex(n,a)||this.isGhostIndex(i,s))return{display:"none"};var c=this.getCellRect(n,a),l=this.getCellRect(i,s),u=0===a?0:1,h=0===n?0:1;return(m=c.union(l)).height+=h,m.left-=u,m.width+=u,m.top-=h,Object(r.a)(Object(r.a)({},m.style()),{display:"block"});case p.FULL_COLUMNS:var d=e.cols;a=d[0],s=d[1];if(this.isGhostIndex(0,a)||this.isGhostIndex(0,s))return{display:"none"};c=this.getCellRect(0,a),l=this.getCellRect(0,s),u=0===a?0:1;return{bottom:0,display:"block",left:(m=c.union(l)).left-u,top:0,width:m.width+u};case p.FULL_ROWS:var f=e.rows;n=f[0],i=f[1];if(this.isGhostIndex(n,0)||this.isGhostIndex(i,0))return{display:"none"};var m;c=this.getCellRect(n,0),l=this.getCellRect(i,0),h=0===n?0:1;return{display:"block",height:(m=c.union(l)).height+h,left:0,right:0,top:m.top-h};case p.FULL_TABLE:return{bottom:0,display:"block",left:0,right:0,top:0};default:return{display:"none"}}},e.prototype.getIndicesInInterval=function(e,t,n,i,r){var o=m.b.binarySearch(e,n-1,r),a=m.b.binarySearch(t,n-1,r);return o>=0&&e===r(o)&&(o+=1),{start:o=Math.max(0,o-this.bleed),end:a=i?Math.min(n-1,a+this.bleed):Math.min(n-1,a)}},e.DEFAULT_BLEED=3,e.DEFAULT_MAX_COLUMNS=50,e.DEFAULT_MAX_ROWS=200,e.DEFAULT_GHOST_HEIGHT=20,e.DEFAULT_GHOST_WIDTH=150,e}();function x(e,t,n,i){if(e){if(null!=t)return t;if(null!=n)return n;if(i.length>0){var o=i.length-1;return Object(r.a)(Object(r.a)({},y.getFocusCellCoordinatesFromRegion(i[o])),{focusSelectionIndex:o})}return{col:0,row:0,focusSelectionIndex:0}}}function T(e,t){return void 0===t&&(t=0),Object(r.a)(Object(r.a)({},e),{focusSelectionIndex:t})}function S(e,t,n,i){var r=e[n],o=t[i],a=o[0];if(a!==o[1]){if("rows"===i)throw new Error("[Blueprint Table] <Table> Cannot expand a FULL_COLUMNS selection using a multi-row region.");if("cols"===i)throw new Error("[Blueprint Table] <Table> Cannot expand a FULL_COLUMNS selection using a multi-column region.")}return r<=a?[r,a]:[a,r]}function D(e,t){return"horizontal"===t?e.offsetHeight-e.clientHeight:e.offsetWidth-e.clientWidth}function P(e,t){return Math.max(e-t,0)}function I(e,t,n){if(y.getRegionCardinality(e)===p.FULL_TABLE)return e;var r=y.copy(e),o=0,a=0;if(null!=n){var s=function(e,t){return null!=e.rows&&t.row===e.rows[0]}(r,n),c=function(e,t){return null!=e.rows&&t.row===e.rows[1]}(r,n),l=function(e,t){return null!=e.cols&&t.col===e.cols[0]}(r,n),u=function(e,t){return null!=e.cols&&t.col===e.cols[1]}(r,n);t===i.UP?o=s&&!c?1:0:t===i.DOWN?o=c&&!s?0:1:a=t===i.LEFT?l&&!u?1:0:u&&!l?0:1}else o=t===i.DOWN?1:0,a=t===i.RIGHT?1:0;var h=function(e){switch(e){case i.UP:return{rows:-1,cols:0};case i.DOWN:return{rows:1,cols:0};case i.LEFT:return{rows:0,cols:-1};case i.RIGHT:return{rows:0,cols:1};default:return}}(t);return null!=r.rows&&(r.rows[o]+=h.rows),null!=r.cols&&(r.cols[a]+=h.cols),r}!function(e){e.BATCH="batch",e.BATCH_ON_UPDATE="batch-on-update",e.NONE="none"}(C||(C={}));var M,R=n(54),L=function(){function e(){var t=this;this.handleMouseDown=function(e){if((t.initCoordinateData(e),null!=t.handler&&null!=t.handler.onActivate)&&!1===t.handler.onActivate(e))return;t.isActivated=!0,t.maybeAlterEventChain(e),t.detachDocumentEventListeners(),t.attachDocumentEventListeners()},this.handleMouseMove=function(e){if(t.maybeAlterEventChain(e),t.isActivated&&(t.isDragging=!0),t.isDragging){var n=t.updateCoordinateData(e);null!=t.handler&&null!=t.handler.onDragMove&&t.handler.onDragMove(e,n)}},this.handleMouseUp=function(n){if(t.maybeAlterEventChain(n),null!=t.handler)if(t.isDragging){var i=t.updateCoordinateData(n);null!=t.handler.onDragMove&&t.handler.onDragMove(n,i),null!=t.handler.onDragEnd&&t.handler.onDragEnd(n,i)}else t.isActivated&&(null!=t.handler.onDoubleClick?null==t.doubleClickTimeoutToken?t.doubleClickTimeoutToken=window.setTimeout((function(){delete t.doubleClickTimeoutToken,null!=t.handler.onClick&&t.handler.onClick(n)}),e.DOUBLE_CLICK_TIMEOUT_MSEC):(window.clearTimeout(t.doubleClickTimeoutToken),delete t.doubleClickTimeoutToken,t.handler.onDoubleClick(n)):null!=t.handler.onClick&&t.handler.onClick(n));t.isActivated=!1,t.isDragging=!1,t.detachDocumentEventListeners()}}return e.isAdditive=function(e){return e.ctrlKey||e.metaKey},e.prototype.attach=function(e,t){return this.detach(),this.handler=t,this.element=e,this.isValidDragHandler(t)&&this.element.addEventListener("mousedown",this.handleMouseDown),this},e.prototype.detach=function(){null!=this.element&&(this.element.removeEventListener("mousedown",this.handleMouseDown),this.detachDocumentEventListeners())},e.prototype.isValidDragHandler=function(e){return null!=e&&(null!=e.onActivate||null!=e.onDragMove||null!=e.onDragEnd||null!=e.onClick||null!=e.onDoubleClick)},e.prototype.attachDocumentEventListeners=function(){document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)},e.prototype.detachDocumentEventListeners=function(){document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp)},e.prototype.initCoordinateData=function(e){this.activationCoordinates=[e.clientX,e.clientY],this.lastCoordinates=this.activationCoordinates},e.prototype.updateCoordinateData=function(e){var t=[e.clientX,e.clientY],n=[t[0]-this.lastCoordinates[0],t[1]-this.lastCoordinates[1]],i=[t[0]-this.activationCoordinates[0],t[1]-this.activationCoordinates[1]],r={activation:this.activationCoordinates,current:t,delta:n,last:this.lastCoordinates,offset:i};return this.lastCoordinates=[e.clientX,e.clientY],r},e.prototype.maybeAlterEventChain=function(e){this.handler.preventDefault&&e.preventDefault(),this.handler.stopPropagation&&e.stopPropagation()},e.DOUBLE_CLICK_TIMEOUT_MSEC=500,e}(),j=["stopPropagation","preventDefault"],F=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.render=function(){return c.Children.only(this.props.children)},t.prototype.componentDidUpdate=function(e){var t={include:j};this.events&&!o.Utils.shallowCompareKeys(e,this.props,t)&&this.events.attach(R.findDOMNode(this),this.props)},t.prototype.componentDidMount=function(){this.events=new L,this.events.attach(R.findDOMNode(this),this.props)},t.prototype.componentWillUnmount=function(){this.events.detach(),delete this.events},t.defaultProps={preventDefault:!0,stopPropagation:!1},t}(c.PureComponent);!function(e){e[e.HORIZONTAL=1]="HORIZONTAL",e[e.VERTICAL=0]="VERTICAL"}(M||(M={}));var N=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isDragging:!1},t.handleActivate=function(e){return t.setState({isDragging:!0}),t.props.onLayoutLock(!0),e.stopPropagation(),e.stopImmediatePropagation(),!0},t.handleDragMove=function(e,n){var i=t.props.orientation;null!=t.props.onResizeMove&&t.props.onResizeMove(n.offset[i],n.delta[i])},t.handleDragEnd=function(e,n){var i=t.props.orientation;t.setState({isDragging:!1}),t.props.onLayoutLock(!1),null!=t.props.onResizeMove&&t.props.onResizeMove(n.offset[i],n.delta[i]),null!=t.props.onResizeEnd&&t.props.onResizeEnd(n.offset[i])},t.handleClick=function(e){t.setState({isDragging:!1}),t.props.onLayoutLock(!1)},t.handleDoubleClick=function(e){t.setState({isDragging:!1}),t.props.onLayoutLock(!1),null!=t.props.onDoubleClick&&t.props.onDoubleClick()},t}return Object(r.c)(t,e),t.prototype.render=function(){var e,t,n=this.props,i=n.onResizeMove,r=n.onResizeEnd,o=n.onDoubleClick,a=n.orientation;if(null!=i||null!=r||null!=o){var l=s()(h.cb,((e={})[h.p]=this.state.isDragging,e[h.db]=a===M.HORIZONTAL,e[h.hb]=a===M.VERTICAL,e),this.props.className),u=s()(h.bb,((t={})[h.p]=this.state.isDragging,t));return c.createElement(F,{onActivate:this.handleActivate,onClick:this.handleClick,onDoubleClick:this.handleDoubleClick,onDragEnd:this.handleDragEnd,onDragMove:this.handleDragMove},c.createElement("div",{className:l},c.createElement("div",{className:u})))}},t}(c.PureComponent),z=n(137),k=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isActive:!1},t}return Object(r.c)(t,e),t.prototype.shouldComponentUpdate=function(e){return!o.Utils.shallowCompareKeys(this.props,e,{exclude:["style"]})||!o.Utils.deepCompareKeys(this.props,e,["style"])},t.prototype.renderContextMenu=function(e){var t=this.props.menuRenderer;return o.Utils.isFunction(t)?t(this.props.index):void 0},t.prototype.render=function(){var e,t=s()(h.t,((e={})[h.u]=this.props.isActive||this.state.isActive,e[h.x]=this.props.isSelected,e[o.Classes.LOADING]=this.props.loading,e),this.props.className);return c.createElement("div",{className:t,style:this.props.style},this.props.children)},t=Object(r.b)([o.ContextMenuTarget],t)}(c.Component);function B(){return c.createElement("div",{className:h.y})}var H=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={isActive:!1},t.handlePopoverOpened=function(){return t.setState({isActive:!0})},t.handlePopoverClosing=function(){return t.setState({isActive:!1})},t}return Object(r.c)(t,e),t.isHeaderMouseTarget=function(e){return e.classList.contains(h.t)||e.classList.contains(h.m)||e.classList.contains(h.A)||e.classList.contains(h.v)},t.prototype.render=function(){var e,t=this.props,n=(t.enableColumnReordering,t.isColumnSelected,t.menuIcon,t.name,t.nameRenderer,Object(r.d)(t,["enableColumnReordering","isColumnSelected","menuIcon","name","nameRenderer"])),i=s()(n.className,h.k,((e={})[h.r]=this.context.enableColumnInteractionBar,e[h.s]=null!=this.props.reorderHandle,e));return c.createElement(k,Object(r.a)({isReorderable:this.props.enableColumnReordering,isSelected:this.props.isColumnSelected},n,{className:i}),this.renderName(),this.maybeRenderContent(),this.props.loading?void 0:this.props.resizeHandle)},t.prototype.renderName=function(){var e=this.props,t=e.index,n=e.loading,i=e.name,r=e.nameRenderer,o=e.reorderHandle,a=this.maybeRenderDropdownMenu(),s=c.createElement("div",{className:h.zb},i),l=c.createElement(z.a,{loading:n,variableLength:!0},null==r?s:r(i,t));return this.context.enableColumnInteractionBar?c.createElement("div",{className:h.m,title:i},c.createElement("div",{className:h.A},o,a),c.createElement(B,null),c.createElement("div",{className:h.n},l)):c.createElement("div",{className:h.m,title:i},o,a,c.createElement("div",{className:h.n},l))},t.prototype.maybeRenderContent=function(){if(null!==this.props.children)return c.createElement("div",{className:h.v},this.props.children)},t.prototype.maybeRenderDropdownMenu=function(){var e,t=this.props,n=t.index,i=t.menuIcon,r=t.menuRenderer;if(o.Utils.isFunction(r)){var a=s()(h.qb,m.a,((e={})[h.sb]=this.state.isActive,e));return c.createElement("div",{className:a},c.createElement("div",{className:h.rb}),c.createElement(o.Popover,{content:r(n),position:o.Position.BOTTOM,className:h.pb,modifiers:{preventOverflow:{boundariesElement:"window"}},onOpened:this.handlePopoverOpened,onClosing:this.handlePopoverClosing},c.createElement(o.Icon,{icon:i})))}},t.defaultProps={isActive:!1,menuIcon:"chevron-down"},t.contextTypes=f,t=Object(r.b)([l.polyfill],t)}(o.AbstractPureComponent2),V=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleActivate=function(e){if(t.shouldIgnoreMouseDown(e))return!1;var n=t.props.locateClick(e);if(!y.isValid(n))return!1;var i=y.getRegionCardinality(n),r=i===p.FULL_COLUMNS,o=i===p.FULL_ROWS;if(!r&&!o)return!1;var a=t.props.selectedRegions,s=y.findContainingRegion(a,n);if(s>=0){var c=a[s];if(y.getRegionCardinality(c)!==i)return!1;var l=o?c.rows:c.cols;t.selectedRegionStartIndex=l[0],t.selectedRegionLength=l[1]-l[0]+1}else{t.maybeSelectRegion(n);var u=o?n.rows:n.cols;t.selectedRegionStartIndex=u[0],t.selectedRegionLength=u[1]-u[0]+1}return!0},t.handleDragMove=function(e,n){var i=t.selectedRegionStartIndex,r=t.props.locateDrag(e,n),o=t.selectedRegionLength,a=m.b.guideIndexToReorderedIndex(i,r,o);t.props.onReordering(i,a,o)},t.handleDragEnd=function(e,n){var i=t.selectedRegionStartIndex,r=t.props.locateDrag(e,n),o=t.selectedRegionLength,a=m.b.guideIndexToReorderedIndex(i,r,o);t.props.onReordered(i,a,o);var s=t.props.toRegion(a,a+o-1);t.maybeSelectRegion(s),t.selectedRegionStartIndex=void 0,t.selectedRegionLength=void 0},t}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.getDraggableProps();return c.createElement(F,Object(r.a)({},e,{preventDefault:!1}),this.props.children)},t.prototype.getDraggableProps=function(){return null==this.props.onReordered?{}:{onActivate:this.handleActivate,onDragEnd:this.handleDragEnd,onDragMove:this.handleDragMove}},t.prototype.shouldIgnoreMouseDown=function(e){var t=this.props.disabled,n=o.Utils.isFunction(t)?o.Utils.safeInvoke(t,e):t;return!m.b.isLeftClick(e)||n},t.prototype.maybeSelectRegion=function(e){var t=[e];o.Utils.deepCompareKeys(t,this.props.selectedRegions)||(this.props.onSelection(t),this.props.onFocusedCell(Object(r.a)(Object(r.a)({},y.getFocusCellCoordinatesFromRegion(e)),{focusSelectionIndex:0})))},t.defaultProps={selectedRegions:[]},t}(c.PureComponent),U=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state=n.getDerivedStateFromProps(t.props,null),t.onResizeMove=function(e,n){t.offsetSize(n),null!=t.props.onSizeChanged&&t.props.onSizeChanged(t.state.size)},t.onResizeEnd=function(e){t.setState({unclampedSize:t.state.size}),null!=t.props.onResizeEnd&&t.props.onResizeEnd(t.state.size)},t}var n;return Object(r.c)(t,e),n=t,t.getDerivedStateFromProps=function(e,t){var n=e.size;return null==t?{size:n,unclampedSize:n}:null},t.prototype.componentDidUpdate=function(e){e.size!==this.props.size&&this.setState(n.getDerivedStateFromProps(this.props,null))},t.prototype.render=function(){var e=c.Children.only(this.props.children),t=Object(r.a)(Object(r.a)({},e.props.style),this.getStyle());if(!1===this.props.isResizable)return c.cloneElement(e,{style:t});var n=this.renderResizeHandle();return c.cloneElement(e,{style:t,resizeHandle:n})},t.prototype.renderResizeHandle=function(){var e=this.props,t=e.onLayoutLock,n=e.onDoubleClick,i=e.orientation;return c.createElement(N,{key:"resize-handle",onDoubleClick:n,onLayoutLock:t,onResizeEnd:this.onResizeEnd,onResizeMove:this.onResizeMove,orientation:i})},t.prototype.getStyle=function(){return this.props.orientation===M.VERTICAL?{flexBasis:this.state.size+"px",minWidth:"0px",width:this.state.size+"px"}:{flexBasis:this.state.size+"px",height:this.state.size+"px",minHeight:"0px"}},t.prototype.offsetSize=function(e){var t=this.state.unclampedSize+e;this.setState({size:m.b.clamp(t,this.props.minSize,this.props.maxSize),unclampedSize:t})},t.defaultProps={isResizable:!0,minSize:0},t=n=Object(r.b)([l.polyfill],t)}(o.AbstractPureComponent2);function W(e){var t="undefined"!==typeof navigator?navigator.platform:void 0,n=null!=e?e:t;return null!=n&&/Mac|iPod|iPhone|iPad/.test(n)}var G=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.didExpandSelectionOnActivate=!1,t.handleActivate=function(e){var n=t.props,i=n.locateClick,r=n.selectedRegions,o=n.selectedRegionTransform;if(t.shouldIgnoreMouseDown(e))return!1;var a=i(e);if(!y.isValid(a))return!1;null!=o&&(a=o(a,e));var s=y.findMatchingRegion(r,a),c=-1!==s;return c&&L.isAdditive(e)?(t.handleClearSelectionAtIndex(s),!1):(c?t.handleClearAllSelectionsNotAtIndex(s):t.shouldExpandSelection(e)?t.handleExpandSelection(a):t.shouldAddDisjointSelection(e)?t.handleAddDisjointSelection(a):t.handleReplaceSelection(a),!0)},t.handleDragMove=function(e,n){var i=t.props,r=i.enableMultipleSelection,o=i.focusedCell,a=i.locateClick,s=i.locateDrag,c=i.selectedRegions,l=i.selectedRegionTransform,u=r?s(e,n,t.didExpandSelectionOnActivate):a(e);if(y.isValid(u)){null!=l&&(u=l(u,e,n));var h=t.didExpandSelectionOnActivate?t.expandSelectedRegions(c,u,o):y.update(c,u);if(t.maybeInvokeSelectionCallback(h),!r){var d=h.length-1,f=h[d];t.invokeOnFocusCallbackForRegion(f,d)}}},t.handleDragEnd=function(){t.finishInteraction()},t.handleClick=function(){t.finishInteraction()},t.shouldExpandSelection=function(e){return t.props.enableMultipleSelection&&e.shiftKey},t.shouldAddDisjointSelection=function(e){return t.props.enableMultipleSelection&&L.isAdditive(e)},t.handleClearSelectionAtIndex=function(e){var n=t.props.selectedRegions.slice();if(n.splice(e,1),t.maybeInvokeSelectionCallback(n),n.length>0){var i=n.length-1;t.invokeOnFocusCallbackForRegion(n[i],i)}},t.handleClearAllSelectionsNotAtIndex=function(e){var n=t.props.selectedRegions[e];t.maybeInvokeSelectionCallback([n]),t.invokeOnFocusCallbackForRegion(n,0)},t.handleExpandSelection=function(e){var n=t.props,i=n.focusedCell,r=n.selectedRegions;t.didExpandSelectionOnActivate=!0;var o=t.expandSelectedRegions(r,e,i);t.maybeInvokeSelectionCallback(o),null!=r&&0!==r.length||t.invokeOnFocusCallbackForRegion(e)},t.handleAddDisjointSelection=function(e){var n=t.props.selectedRegions,i=y.add(n,e);t.maybeInvokeSelectionCallback(i),t.invokeOnFocusCallbackForRegion(e,i.length-1)},t.handleReplaceSelection=function(e){var n=[e];t.maybeInvokeSelectionCallback(n),t.invokeOnFocusCallbackForRegion(e)},t.invokeOnFocusCallbackForRegion=function(e,n){void 0===n&&(n=0),(0,t.props.onFocusedCell)(T(y.getFocusCellCoordinatesFromRegion(e),n))},t.finishInteraction=function(){o.Utils.safeInvoke(t.props.onSelectionEnd,t.props.selectedRegions),t.didExpandSelectionOnActivate=!1,t.lastEmittedSelectedRegions=null},t}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.getDraggableProps();return c.createElement(F,Object(r.a)({},e,{preventDefault:!1}),this.props.children)},t.prototype.getDraggableProps=function(){return null==this.props.onSelection?{}:{onActivate:this.handleActivate,onClick:this.handleClick,onDragEnd:this.handleDragEnd,onDragMove:this.handleDragMove}},t.prototype.shouldIgnoreMouseDown=function(e){var t=this.props,n=t.disabled,i=t.ignoredSelectors,r=void 0===i?[]:i,a=e.target,s=m.b.isLeftClick(e),c=s&&e.ctrlKey&&W(),l=o.Utils.safeInvokeOrValue(n,e);return!s||c||l||r.some((function(e){return null!=a.closest(e)}))},t.prototype.maybeInvokeSelectionCallback=function(e){var t=this.props.onSelection;null!=this.lastEmittedSelectedRegions&&o.Utils.deepCompareKeys(this.lastEmittedSelectedRegions,e)||(t(e),this.lastEmittedSelectedRegions=e)},t.prototype.expandSelectedRegions=function(e,t,n){if(0===e.length)return[t];if(null!=n){var i=function(e,t){switch(y.getRegionCardinality(t)){case p.FULL_COLUMNS:var n=S(e,t,"col","cols"),i=n[0],r=n[1];return y.column(i,r);case p.FULL_ROWS:var o=S(e,t,"row","rows");i=o[0],r=o[1];return y.row(i,r);case p.CELLS:var a=S(e,t,"row","rows"),s=a[0],c=a[1],l=S(e,t,"col","cols"),u=l[0],h=l[1];return y.cell(s,u,c,h);default:return y.table()}}(n,t);return y.update(e,i)}i=y.expandRegion(e[e.length-1],t);return y.update(e,i)},t.defaultProps={disabled:!1,enableMultipleSelection:!1,selectedRegions:[]},t}(c.PureComponent),q=["focusedCell","selectedRegions"],Y=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.convertEventToIndex=function(e){var t=i.props.getMouseCoordinate(e);return i.props.convertPointToIndex(t)},i.locateClick=function(e){return i.activationIndex=i.convertEventToIndex(e),i.props.toRegion(i.activationIndex)},i.locateDragForSelection=function(e,t,n){void 0===n&&(n=!1);var r=i.props.getDragCoordinate(t.current),o=i.activationIndex,a=i.props.convertPointToIndex(r);return n?i.props.toRegion(a):i.props.toRegion(o,a)},i.locateDragForReordering=function(e,t){var n=i.props.getDragCoordinate(t.current),r=i.props.convertPointToIndex(n,!0);return r<0?void 0:r},i.renderCells=function(){for(var e=i.props,t=e.indexStart,n=e.indexEnd,r=[],o=t;o<=n;o++)r.push(i.renderNewCell(o));return r},i.renderNewCell=function(e){var t=i.props.getCellExtremaClasses(e,i.props.indexEnd);return(i.props.isGhostIndex(e)?i.props.ghostCellRenderer:i.renderCell)(e,t)},i.renderCell=function(e,t){var n,r,a=i.props,l=a.getIndexClass,u=a.selectedRegions,d=i.props.headerCellRenderer(e);if(null==d)return null;var f=null!=d.props.loading?d.props.loading:i.props.loading,p=i.props.isCellSelected(e),m=i.isEntireCellTargetReorderable(e),g=((r={className:s()(t,((n={})[h.w]=m,n),i.props.getCellIndexClass(e),d.props.className),index:e})[i.props.headerCellIsSelectedPropName]=p,r[i.props.headerCellIsReorderablePropName]=m,r.loading=f,r.reorderHandle=i.maybeRenderReorderHandle(e),r),v=c.createElement(G,{enableMultipleSelection:i.props.enableMultipleSelection,disabled:i.isDragSelectableDisabled,focusedCell:i.props.focusedCell,ignoredSelectors:["."+h.Z],key:l(e),locateClick:i.locateClick,locateDrag:i.locateDragForSelection,onFocusedCell:i.props.onFocusedCell,onSelection:i.handleDragSelectableSelection,onSelectionEnd:i.handleDragSelectableSelectionEnd,selectedRegions:u,selectedRegionTransform:i.props.selectedRegionTransform},c.createElement(U,{isResizable:i.props.isResizable,maxSize:i.props.maxSize,minSize:i.props.minSize,onDoubleClick:function(){return o.Utils.safeInvoke(i.props.handleResizeDoubleClick,e)},onLayoutLock:i.props.onLayoutLock,onResizeEnd:function(t){return i.props.handleResizeEnd(e,t)},onSizeChanged:function(t){return i.props.handleSizeChanged(e,t)},orientation:i.props.resizeOrientation,size:i.props.getCellSize(e)},c.cloneElement(d,g)));return i.isReorderHandleEnabled()?v:i.wrapInDragReorderable(e,v,i.isDragReorderableDisabled)},i.handleDragSelectableSelection=function(e){i.props.onSelection(e),i.setState({hasValidSelection:!1})},i.handleDragSelectableSelectionEnd=function(){i.activationIndex=null,i.setState({hasValidSelection:!0})},i.isDragSelectableDisabled=function(e){if(L.isAdditive(e))return!1;var t=i.convertEventToIndex(e);return i.isEntireCellTargetReorderable(t)},i.isDragReorderableDisabled=function(e){if(!i.isDragSelectableDisabled(e))return!0;var t=i.convertEventToIndex(e);return!i.isEntireCellTargetReorderable(t)},i.isEntireCellTargetReorderable=function(e){var t=i.props.selectedRegions;return i.props.isReorderable&&i.props.isCellSelected(e)&&i.state.hasValidSelection&&y.getRegionCardinality(t[0])===i.props.fullRegionCardinality&&1===t.length&&!i.isReorderHandleEnabled()},i.state={hasValidSelection:i.isSelectedRegionsControlledAndNonEmpty(t)},i}return Object(r.c)(t,e),t.prototype.componentDidUpdate=function(e,t){var n=this.isSelectedRegionsControlledAndNonEmpty(this.props);t.hasValidSelection!==n&&this.setState({hasValidSelection:n})},t.prototype.shouldComponentUpdate=function(e,t){return!o.Utils.shallowCompareKeys(this.state,t)||!o.Utils.shallowCompareKeys(this.props,e,{exclude:q})||!o.Utils.deepCompareKeys(this.props,e,q)},t.prototype.render=function(){return this.props.wrapCells(this.renderCells())},t.prototype.isSelectedRegionsControlledAndNonEmpty=function(e){return void 0===e&&(e=this.props),null!=e.selectedRegions&&e.selectedRegions.length>0},t.prototype.isReorderHandleEnabled=function(){return this.isColumnHeader()&&this.props.isReorderable},t.prototype.maybeRenderReorderHandle=function(e){return this.isReorderHandleEnabled()?this.wrapInDragReorderable(e,c.createElement("div",{className:h.Z},c.createElement("div",{className:s()(h.Y,m.a)},c.createElement(o.Icon,{icon:"drag-handle-vertical"}))),!1):void 0},t.prototype.isColumnHeader=function(){return this.props.fullRegionCardinality===p.FULL_COLUMNS},t.prototype.wrapInDragReorderable=function(e,t,n){return c.createElement(V,{disabled:n,key:this.props.getIndexClass(e),locateClick:this.locateClick,locateDrag:this.locateDragForReordering,onReordered:this.props.onReordered,onReordering:this.props.onReordering,onSelection:this.props.onSelection,onFocusedCell:this.props.onFocusedCell,selectedRegions:this.props.selectedRegions,toRegion:this.props.toRegion},t)},t}(c.Component),$=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wrapCells=function(e){var n=t.props,i=n.columnIndexStart,r=n.grid.getRect().width,o=t.props.grid.getCumulativeWidthBefore(i),a={transform:"translateX("+(o||0)+"px)",width:r-o},l=s()(h.ob,h.l);return c.createElement("div",{style:{width:r}},c.createElement("div",{style:a,className:l,ref:t.props.measurableElementRef},e))},t.convertPointToColumn=function(e,n){var i=t.props.locator;return null!=i?i.convertPointToColumn(e,n):null},t.getCellExtremaClasses=function(e,n){return t.props.grid.getExtremaClasses(0,e,1,n)},t.getColumnWidth=function(e){return t.props.grid.getColumnRect(e).width},t.getDragCoordinate=function(e){return e[0]},t.getMouseCoordinate=function(e){return e.clientX},t.handleResizeEnd=function(e,n){t.props.onResizeGuide(null),t.props.onColumnWidthChanged(e,n)},t.handleResizeDoubleClick=function(e){var n=t.props,i=n.minColumnWidth,r=n.maxColumnWidth,o=t.props.locator.getWidestVisibleCellInColumn(e),a=m.b.clamp(o,i,r);t.props.onResizeGuide(null),t.props.onColumnWidthChanged(e,a)},t.handleSizeChanged=function(e,n){var i=t.props.grid.getColumnRect(e);t.props.onResizeGuide([i.left+n])},t.isCellSelected=function(e){return y.hasFullColumn(t.props.selectedRegions,e)},t.isGhostIndex=function(e){return t.props.grid.isGhostIndex(-1,e)},t.renderGhostCell=function(e,n){var i=t.props,r=i.grid,o=i.loading,a=r.getGhostCellRect(0,e),l={flexBasis:a.width+"px",width:a.width+"px"};return c.createElement(H,{className:s()(n),index:e,key:h.Db(e),loading:o,style:l})},t.toRegion=function(e,t){return y.column(e,t)},t}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.cellRenderer,n=(e.onColumnWidthChanged,e.minColumnWidth),i=e.maxColumnWidth,o=(e.defaultColumnWidth,e.columnIndexStart),a=e.columnIndexEnd,s=Object(r.d)(e,["cellRenderer","onColumnWidthChanged","minColumnWidth","maxColumnWidth","defaultColumnWidth","columnIndexStart","columnIndexEnd"]);return c.createElement(Y,Object(r.a)({convertPointToIndex:this.convertPointToColumn,fullRegionCardinality:p.FULL_COLUMNS,getCellExtremaClasses:this.getCellExtremaClasses,getCellIndexClass:h.Cb,getCellSize:this.getColumnWidth,getDragCoordinate:this.getDragCoordinate,getIndexClass:h.Db,getMouseCoordinate:this.getMouseCoordinate,ghostCellRenderer:this.renderGhostCell,handleResizeDoubleClick:this.handleResizeDoubleClick,handleResizeEnd:this.handleResizeEnd,handleSizeChanged:this.handleSizeChanged,headerCellIsReorderablePropName:"enableColumnReordering",headerCellIsSelectedPropName:"isColumnSelected",headerCellRenderer:t,indexEnd:a,indexStart:o,isCellSelected:this.isCellSelected,isGhostIndex:this.isGhostIndex,maxSize:i,minSize:n,resizeOrientation:M.VERTICAL,selectedRegions:[],toRegion:this.toRegion,wrapCells:this.wrapCells},s))},t.defaultProps={isReorderable:!1,isResizable:!0,loading:!1},t}(c.Component),X=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=(e.enableRowReordering,e.isRowSelected,e.name),n=e.nameRenderer,i=Object(r.d)(e,["enableRowReordering","isRowSelected","name","nameRenderer"]),o=c.createElement("div",{className:h.lb},t),a=c.createElement(z.a,{loading:i.loading},null==n?o:n(t,i.index));return c.createElement(k,Object(r.a)({isReorderable:this.props.enableRowReordering,isSelected:this.props.isRowSelected},i),c.createElement("div",{className:h.kb},a),this.props.children,i.loading?void 0:i.resizeHandle)},t=Object(r.b)([l.polyfill],t)}(o.AbstractPureComponent2),K=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wrapCells=function(e){var n=t.props,i=n.rowIndexStart,r=n.grid.getRect().height,o=t.props.grid.getCumulativeHeightBefore(i),a={height:r-o,transform:"translateY("+(o||0)+"px)"};return c.createElement("div",{style:{height:r}},c.createElement("div",{className:h.jb,style:a},e))},t.convertPointToRow=function(e,n){var i=t.props.locator;return null!=i?i.convertPointToRow(e,n):null},t.getCellExtremaClasses=function(e,n){return t.props.grid.getExtremaClasses(e,0,n,1)},t.getRowHeight=function(e){return t.props.grid.getRowRect(e).height},t.getDragCoordinate=function(e){return e[1]},t.getMouseCoordinate=function(e){return e.clientY},t.handleResizeEnd=function(e,n){t.props.onResizeGuide(null),t.props.onRowHeightChanged(e,n)},t.handleSizeChanged=function(e,n){var i=t.props.grid.getRowRect(e);t.props.onResizeGuide([i.top+n])},t.isCellSelected=function(e){return y.hasFullRow(t.props.selectedRegions,e)},t.isGhostIndex=function(e){return t.props.grid.isGhostIndex(e,-1)},t.renderGhostCell=function(e,n){var i=t.props.grid.getGhostCellRect(e,0);return c.createElement(X,{className:s()(n),index:e,key:h.Fb(e),loading:t.props.loading,style:{height:i.height+"px"}})},t.toRegion=function(e,t){return y.row(e,t)},t}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=(e.onRowHeightChanged,e.rowHeaderCellRenderer),n=e.minRowHeight,i=e.maxRowHeight,o=(e.defaultRowHeight,e.rowIndexStart),a=e.rowIndexEnd,s=Object(r.d)(e,["onRowHeightChanged","rowHeaderCellRenderer","minRowHeight","maxRowHeight","defaultRowHeight","rowIndexStart","rowIndexEnd"]);return c.createElement(Y,Object(r.a)({convertPointToIndex:this.convertPointToRow,fullRegionCardinality:p.FULL_ROWS,getCellExtremaClasses:this.getCellExtremaClasses,getCellIndexClass:h.Eb,getCellSize:this.getRowHeight,getDragCoordinate:this.getDragCoordinate,getIndexClass:h.Fb,getMouseCoordinate:this.getMouseCoordinate,ghostCellRenderer:this.renderGhostCell,handleResizeEnd:this.handleResizeEnd,handleSizeChanged:this.handleSizeChanged,headerCellIsReorderablePropName:"enableRowReordering",headerCellIsSelectedPropName:"isRowSelected",headerCellRenderer:t,indexEnd:a,indexStart:o,isCellSelected:this.isCellSelected,isGhostIndex:this.isGhostIndex,maxSize:i,minSize:n,resizeOrientation:M.HORIZONTAL,selectedRegions:[],toRegion:this.toRegion,wrapCells:this.wrapCells},s))},t.defaultProps={rowHeaderCellRenderer:Q},t}(c.Component);function Q(e){return c.createElement(X,{index:e,name:""+(e+1)})}var Z,J=function(){function e(){}return e.attach=function(t,n){var i=e.debounce(n),r=document.createElement("div");r.className=h.eb,r.style.cssText=e.RESIZE_SENSOR_STYLE,r.innerHTML=e.RESIZE_SENSOR_HTML,t.appendChild(r),"static"===getComputedStyle(t,null).getPropertyValue("position")&&(t.style.position="relative");var o,a,s=r.childNodes[0],c=s.childNodes[0],l=r.childNodes[1],u=function(){c.style.width="100000px",c.style.height="100000px",s.scrollLeft=1e5,s.scrollTop=1e5,l.scrollLeft=1e5,l.scrollTop=1e5};u();var d=function(){var e=t.offsetWidth,n=t.offsetHeight;e===o&&n===a||(o=e,a=n,i.trigger()),u()};return s.addEventListener("scroll",d),l.addEventListener("scroll",d),function(){t.removeChild(r),i.cancelled=!0}},e.debounce=function(e){var t={cancelled:!1,trigger:function(){t.triggered||t.cancelled||(t.triggered=!0,requestAnimationFrame((function(){t.triggered=!1,t.cancelled||e()})))},triggered:!1};return t},e.RESIZE_SENSOR_STYLE="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;",e.RESIZE_SENSOR_HTML='<div class="'+h.fb+'"\n style="'+e.RESIZE_SENSOR_STYLE+'"><div style="position: absolute; left: 0; top: 0; transition: 0s;"\n ></div></div><div class="'+h.gb+'" style="'+e.RESIZE_SENSOR_STYLE+'"\n ><div style="position: absolute; left: 0; top: 0; transition: 0s; width: 200%; height: 200%;"></div></div>',e}(),ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.renderVerticalGuide=function(e,t){var n,i={left:e+"px"},r=s()(h.J,h.Bb,((n={})[h.Bb+"-flush-left"]=0===e,n));return c.createElement("div",{className:r,key:t,style:i})},t.renderHorizontalGuide=function(e,t){var n,i={top:e+"px"},r=s()(h.J,h.z,((n={})[h.z+"-flush-top"]=0===e,n));return c.createElement("div",{className:r,key:t,style:i})},t}return Object(r.c)(t,e),t.prototype.shouldComponentUpdate=function(e){return this.props.className!==e.className||(!o.Utils.arraysEqual(this.props.verticalGuides,e.verticalGuides)||!o.Utils.arraysEqual(this.props.horizontalGuides,e.horizontalGuides))},t.prototype.render=function(){var e=this.props,t=e.verticalGuides,n=e.horizontalGuides,i=e.className,r=null==t?void 0:t.map(this.renderVerticalGuide),o=null==n?void 0:n.map(this.renderHorizontalGuide);return c.createElement("div",{className:s()(i,h.K)},r,o)},t}(c.Component),te=["className"],ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.renderRegion=function(e,n){var i=t.props,r=i.className,o=i.regionStyles;return c.createElement("div",{className:s()(h.J,h.W,r),key:n,style:o[n]})},t}return Object(r.c)(t,e),t.prototype.shouldComponentUpdate=function(e){return!o.Utils.arraysEqual(this.props.regions,e.regions,y.regionsEqual)||!o.Utils.arraysEqual(this.props.regionStyles,e.regionStyles,o.Utils.shallowCompareKeys)||!o.Utils.shallowCompareKeys(this.props,e,{include:te})},t.prototype.render=function(){return c.createElement("div",{className:h.K},this.renderRegionChildren())},t.prototype.renderRegionChildren=function(){var e=this.props.regions;if(null!=e)return e.map(this.renderRegion)},t}(c.Component),ie=n(158);!function(e){e.MAIN="main",e.TOP="top",e.LEFT="left",e.TOP_LEFT="top-left"}(Z||(Z={}));var re=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.grid,n=e.enableRowHeader,i=e.quadrantType,r=e.bodyRenderer,a=i===Z.TOP||i===Z.TOP_LEFT,l=i===Z.LEFT||i===Z.TOP_LEFT,u=s()(h.O,this.getQuadrantCssClass(),this.props.className),d=n&&o.Utils.safeInvoke(this.props.menuRenderer),f=n&&o.Utils.safeInvoke(this.props.rowHeaderCellRenderer,a),p=o.Utils.safeInvoke(this.props.columnHeaderCellRenderer,l),m=null!=i?r(i,a,l):r(),g={height:t.getHeight(),width:t.getWidth()};return c.createElement("div",{className:u,style:this.props.style,ref:this.props.quadrantRef},c.createElement("div",{className:h.S,ref:this.props.scrollContainerRef,onScroll:this.props.onScroll,onWheel:this.props.onWheel},c.createElement("div",{className:h.tb},d,p),c.createElement("div",{className:h.c,style:g},f,c.createElement("div",{className:h.P,ref:this.props.bodyRef},m))))},t.prototype.validateProps=function(e){var t=e.quadrantType;null!=e.onScroll&&null!=t&&t!==Z.MAIN&&console.warn("[Blueprint Table] <TableQuadrant> onScroll need not be defined for any quadrant aside from the MAIN quadrant.")},t.prototype.getQuadrantCssClass=function(){switch(this.props.quadrantType){case Z.MAIN:return h.R;case Z.TOP:return h.U;case Z.LEFT:return h.Q;case Z.TOP_LEFT:return h.V;default:return}},t.defaultProps={enableRowHeader:!0},t=Object(r.b)([l.polyfill],t)}(o.AbstractComponent2),oe=function(){function e(){this.reset()}return e.prototype.reset=function(){this.cachedRowHeaderWidth=0,this.cachedColumnHeaderHeight=0,this.cachedScrollLeft=0,this.cachedScrollTop=0},e.prototype.getScrollOffset=function(e){return"scrollLeft"===e?this.cachedScrollLeft:this.cachedScrollTop},e.prototype.getRowHeaderWidth=function(){return this.cachedRowHeaderWidth},e.prototype.getColumnHeaderHeight=function(){return this.cachedColumnHeaderHeight},e.prototype.getScrollContainerClientWidth=function(){return this.cachedScrollContainerClientWidth},e.prototype.getScrollContainerClientHeight=function(){return this.cachedScrollContainerClientHeight},e.prototype.setColumnHeaderHeight=function(e){this.cachedColumnHeaderHeight=e},e.prototype.setRowHeaderWidth=function(e){this.cachedRowHeaderWidth=e},e.prototype.setScrollOffset=function(e,t){"scrollLeft"===e?this.cachedScrollLeft=t:this.cachedScrollTop=t},e.prototype.setScrollContainerClientWidth=function(e){this.cachedScrollContainerClientWidth=e},e.prototype.setScrollContainerClientHeight=function(e){this.cachedScrollContainerClientHeight=e},e}(),ae=["enableRowHeader","loadingOptions","numFrozenColumns","numFrozenRows","numColumns","numRows","enableColumnInteractionBar"],se=function(e){function t(t,n){var i,r,a=e.call(this,t,n)||this;return a.quadrantRefs=((i={})[Z.MAIN]={},i[Z.TOP]={},i[Z.LEFT]={},i[Z.TOP_LEFT]={},i),a.quadrantRefHandlers=((r={})[Z.MAIN]=a.generateQuadrantRefHandlers(Z.MAIN),r[Z.TOP]=a.generateQuadrantRefHandlers(Z.TOP),r[Z.LEFT]=a.generateQuadrantRefHandlers(Z.LEFT),r[Z.TOP_LEFT]=a.generateQuadrantRefHandlers(Z.TOP_LEFT),r),a.wasMainQuadrantScrollTriggeredByWheelEvent=!1,a.renderMainQuadrantMenu=function(){return o.Utils.safeInvoke(a.props.menuRenderer,a.quadrantRefHandlers[Z.MAIN].menu)},a.renderTopQuadrantMenu=function(){return o.Utils.safeInvoke(a.props.menuRenderer,a.quadrantRefHandlers[Z.TOP].menu)},a.renderLeftQuadrantMenu=function(){return o.Utils.safeInvoke(a.props.menuRenderer,a.quadrantRefHandlers[Z.LEFT].menu)},a.renderTopLeftQuadrantMenu=function(){return o.Utils.safeInvoke(a.props.menuRenderer,a.quadrantRefHandlers[Z.TOP_LEFT].menu)},a.renderMainQuadrantColumnHeader=function(e){var t=a.quadrantRefHandlers[Z.MAIN].columnHeader,n=a.handleColumnResizeGuideMain,i=a.handleColumnsReordering;return o.Utils.safeInvoke(a.props.columnHeaderCellRenderer,t,n,i,e)},a.renderTopQuadrantColumnHeader=function(e){var t=a.quadrantRefHandlers[Z.TOP].columnHeader,n=a.handleColumnResizeGuideTop,i=a.handleColumnsReordering;return o.Utils.safeInvoke(a.props.columnHeaderCellRenderer,t,n,i,e)},a.renderLeftQuadrantColumnHeader=function(e){var t=a.quadrantRefHandlers[Z.LEFT].columnHeader,n=a.handleColumnResizeGuideLeft,i=a.handleColumnsReordering;return o.Utils.safeInvoke(a.props.columnHeaderCellRenderer,t,n,i,e)},a.renderTopLeftQuadrantColumnHeader=function(e){var t=a.quadrantRefHandlers[Z.TOP_LEFT].columnHeader,n=a.handleColumnResizeGuideTopLeft,i=a.handleColumnsReordering;return o.Utils.safeInvoke(a.props.columnHeaderCellRenderer,t,n,i,e)},a.renderMainQuadrantRowHeader=function(e){var t=a.quadrantRefHandlers[Z.MAIN].rowHeader,n=a.handleRowResizeGuideMain,i=a.handleRowsReordering;return o.Utils.safeInvoke(a.props.rowHeaderCellRenderer,t,n,i,e)},a.renderTopQuadrantRowHeader=function(e){var t=a.quadrantRefHandlers[Z.TOP].rowHeader,n=a.handleRowResizeGuideTop,i=a.handleRowsReordering;return o.Utils.safeInvoke(a.props.rowHeaderCellRenderer,t,n,i,e)},a.renderLeftQuadrantRowHeader=function(e){var t=a.quadrantRefHandlers[Z.LEFT].rowHeader,n=a.handleRowResizeGuideLeft,i=a.handleRowsReordering;return o.Utils.safeInvoke(a.props.rowHeaderCellRenderer,t,n,i,e)},a.renderTopLeftQuadrantRowHeader=function(e){var t=a.quadrantRefHandlers[Z.TOP_LEFT].rowHeader,n=a.handleRowResizeGuideTopLeft,i=a.handleRowsReordering;return o.Utils.safeInvoke(a.props.rowHeaderCellRenderer,t,n,i,e)},a.handleMainQuadrantScroll=function(e){if(a.wasMainQuadrantScrollTriggeredByWheelEvent)a.wasMainQuadrantScrollTriggeredByWheelEvent=!1;else{o.Utils.safeInvoke(a.props.onScroll,e);var t=a.quadrantRefs[Z.MAIN].scrollContainer,n=t.scrollLeft,i=t.scrollTop;a.handleScrollOffsetChange("scrollLeft",n),a.handleScrollOffsetChange("scrollTop",i),a.syncQuadrantViewsDebounced()}},a.handleWheel=function(e){o.Utils.safeInvoke(a.props.onScroll,e);var t=a.getNextScrollOffset("horizontal",e.deltaX),n=a.getNextScrollOffset("vertical",e.deltaY);null==t&&null==n||(a.wasMainQuadrantScrollTriggeredByWheelEvent=!0),a.quadrantRefs[Z.MAIN].scrollContainer.scrollLeft=t,a.quadrantRefs[Z.MAIN].scrollContainer.scrollTop=n,a.handleScrollOffsetChange("scrollLeft",t),a.handleScrollOffsetChange("scrollTop",n),a.syncQuadrantViewsDebounced()},a.getNextScrollOffset=function(e,t){var n=a.props,i=n.grid,r=n.isHorizontalScrollDisabled,s=n.isVerticalScrollDisabled,c="horizontal"===e,l=c?"scrollLeft":"scrollTop";if(!(c?r:s)){var u=c?a.cache.getScrollContainerClientWidth():a.cache.getScrollContainerClientHeight();null==u&&(u=a.updateScrollContainerClientSize(c));var h=c?a.cache.getScrollContainerClientWidth()-a.cache.getRowHeaderWidth():a.cache.getScrollContainerClientHeight()-a.cache.getColumnHeaderHeight(),d=c?i.getWidth():i.getHeight(),f=Math.max(0,d-h),p=a.cache.getScrollOffset(l);return o.Utils.clamp(p+t,0,f)}},a.handleColumnResizeGuideMain=function(e){a.invokeColumnResizeHandler(e,Z.MAIN)},a.handleColumnResizeGuideTop=function(e){a.invokeColumnResizeHandler(e,Z.TOP)},a.handleColumnResizeGuideLeft=function(e){a.invokeColumnResizeHandler(e,Z.LEFT)},a.handleColumnResizeGuideTopLeft=function(e){a.invokeColumnResizeHandler(e,Z.TOP_LEFT)},a.invokeColumnResizeHandler=function(e,t){var n=a.adjustVerticalGuides(e,t);o.Utils.safeInvoke(a.props.handleColumnResizeGuide,n)},a.handleRowResizeGuideMain=function(e){a.invokeRowResizeHandler(e,Z.MAIN)},a.handleRowResizeGuideTop=function(e){a.invokeRowResizeHandler(e,Z.TOP)},a.handleRowResizeGuideLeft=function(e){a.invokeRowResizeHandler(e,Z.LEFT)},a.handleRowResizeGuideTopLeft=function(e){a.invokeRowResizeHandler(e,Z.TOP_LEFT)},a.invokeRowResizeHandler=function(e,t){var n=a.adjustHorizontalGuides(e,t);o.Utils.safeInvoke(a.props.handleRowResizeGuide,n)},a.handleColumnsReordering=function(e,t,n){var i=m.b.reorderedIndexToGuideIndex(e,t,n),r=a.props.grid.getCumulativeWidthBefore(i),s=i<=a.props.numFrozenColumns?Z.TOP_LEFT:Z.TOP,c=a.adjustVerticalGuides([r],s);o.Utils.safeInvoke(a.props.handleColumnsReordering,c)},a.handleRowsReordering=function(e,t,n){var i=m.b.reorderedIndexToGuideIndex(e,t,n),r=a.props.grid.getCumulativeHeightBefore(i),s=i<=a.props.numFrozenRows?Z.TOP_LEFT:Z.LEFT,c=a.adjustHorizontalGuides([r],s);o.Utils.safeInvoke(a.props.handleRowsReordering,c)},a.syncQuadrantViewsDebounced=function(){var e=a.props.viewSyncDelay;e<0?a.syncQuadrantViews():(clearInterval(a.debouncedViewSyncInterval),a.debouncedViewSyncInterval=window.setTimeout(a.syncQuadrantViews,e))},a.syncQuadrantViews=function(){var e=a.quadrantRefs[Z.MAIN].scrollContainer,t=a.measureDesiredRowHeaderWidth(),n=a.measureDesiredColumnHeaderHeight(),i=t+a.getSecondaryQuadrantGridSize("width"),r=n+a.getSecondaryQuadrantGridSize("height"),o=D(e,"vertical"),s=D(e,"horizontal"),c=a.maybeIncreaseToDefaultColumnHeaderHeight(n),l=a.maybeIncreaseToDefaultColumnHeaderHeight(r);a.cache.setRowHeaderWidth(t),a.cache.setColumnHeaderHeight(n),a.cache.setScrollContainerClientWidth(void 0),a.cache.setScrollContainerClientHeight(void 0),a.maybesSetQuadrantRowHeaderSizes(t),a.maybeSetQuadrantMenuElementSizes(t,c),a.maybeSetQuadrantSizes(i,l),a.maybeSetQuadrantPositionOffset(Z.TOP,"right",o),a.maybeSetQuadrantPositionOffset(Z.LEFT,"bottom",s),a.maybeSetQuadrantScrollOffset(Z.LEFT,"scrollTop"),a.maybeSetQuadrantScrollOffset(Z.TOP,"scrollLeft")},a.maybeSetQuadrantSizes=function(e,t){a.maybesSetQuadrantSize(Z.LEFT,"width",e),a.maybesSetQuadrantSize(Z.TOP,"height",t),a.maybesSetQuadrantSize(Z.TOP_LEFT,"width",e),a.maybesSetQuadrantSize(Z.TOP_LEFT,"height",t)},a.maybesSetQuadrantSize=function(e,t,n){var i=a.quadrantRefs[e].quadrant;null!=i&&(i.style[t]=n+"px")},a.maybeSetQuadrantPositionOffset=function(e,t,n){var i=a.quadrantRefs[e].quadrant;null!=i&&(i.style[t]=n+"px")},a.maybesSetQuadrantRowHeaderSizes=function(e){a.maybeSetQuadrantRowHeaderSize(Z.MAIN,e),a.maybeSetQuadrantRowHeaderSize(Z.TOP,e),a.maybeSetQuadrantRowHeaderSize(Z.LEFT,e),a.maybeSetQuadrantRowHeaderSize(Z.TOP_LEFT,e)},a.maybeSetQuadrantRowHeaderSize=function(e,t){var n=a.quadrantRefs[e].rowHeader;null!=n&&(n.style.width=t+"px")},a.maybeSetQuadrantMenuElementSizes=function(e,t){a.maybeSetQuadrantMenuElementSize(Z.MAIN,e,t),a.maybeSetQuadrantMenuElementSize(Z.TOP,e,t),a.maybeSetQuadrantMenuElementSize(Z.LEFT,e,t),a.maybeSetQuadrantMenuElementSize(Z.TOP_LEFT,e,t)},a.maybeSetQuadrantMenuElementSize=function(e,t,n){var i=a.quadrantRefs[e].menu;null!=i&&(i.style.width=t+"px",i.style.height=n+"px")},a.maybeSetQuadrantScrollOffset=function(e,t,n){var i=a.quadrantRefs[e].scrollContainer,r=null!=n?n:a.cache.getScrollOffset(t);null!=i&&(i[t]=r)},a.handleScrollOffsetChange=function(e,t){a.cache.setScrollOffset(e,t);var n="scrollLeft"===e?Z.TOP:Z.LEFT;a.maybeSetQuadrantScrollOffset(n,e)},a.throttledHandleMainQuadrantScroll=o.Utils.throttleReactEventCallback(a.handleMainQuadrantScroll),a.throttledHandleWheel=o.Utils.throttleReactEventCallback(a.handleWheel),a.cache=new oe,a}return Object(r.c)(t,e),t.prototype.scrollToPosition=function(e,t){var n=this.quadrantRefs[Z.MAIN].scrollContainer;this.wasMainQuadrantScrollTriggeredByWheelEvent=!1,n.scrollLeft=e,n.scrollTop=t,this.syncQuadrantViews()},t.prototype.synchronizeQuadrantViews=function(){this.syncQuadrantViews()},t.prototype.componentDidMount=function(){this.emitRefs(),this.syncQuadrantViews()},t.prototype.componentDidUpdate=function(e){o.Utils.shallowCompareKeys(this.props,e,{include:ae})||(this.emitRefs(),this.syncQuadrantViews())},t.prototype.render=function(){var e=this.props,t=e.grid,n=e.enableRowHeader,i=e.bodyRenderer,o=e.throttleScrolling,a=o?this.throttledHandleMainQuadrantScroll:this.handleMainQuadrantScroll,s={bodyRenderer:i,enableRowHeader:n,grid:t,onWheel:o?this.throttledHandleWheel:this.handleWheel},l=this.shouldRenderLeftQuadrants(),u=l?c.createElement(re,Object(r.a)({},s,{quadrantRef:this.quadrantRefHandlers[Z.LEFT].quadrant,quadrantType:Z.LEFT,columnHeaderCellRenderer:this.renderLeftQuadrantColumnHeader,menuRenderer:this.renderLeftQuadrantMenu,rowHeaderCellRenderer:this.renderLeftQuadrantRowHeader,scrollContainerRef:this.quadrantRefHandlers[Z.LEFT].scrollContainer})):void 0,d=l?c.createElement(re,Object(r.a)({},s,{quadrantRef:this.quadrantRefHandlers[Z.TOP_LEFT].quadrant,quadrantType:Z.TOP_LEFT,columnHeaderCellRenderer:this.renderTopLeftQuadrantColumnHeader,menuRenderer:this.renderTopLeftQuadrantMenu,rowHeaderCellRenderer:this.renderTopLeftQuadrantRowHeader,scrollContainerRef:this.quadrantRefHandlers[Z.TOP_LEFT].scrollContainer})):void 0;return c.createElement("div",{className:h.T},c.createElement(re,Object(r.a)({},s,{bodyRef:this.props.bodyRef,onScroll:a,quadrantRef:this.quadrantRefHandlers[Z.MAIN].quadrant,quadrantType:Z.MAIN,columnHeaderCellRenderer:this.renderMainQuadrantColumnHeader,menuRenderer:this.renderMainQuadrantMenu,rowHeaderCellRenderer:this.renderMainQuadrantRowHeader,scrollContainerRef:this.quadrantRefHandlers[Z.MAIN].scrollContainer})),c.createElement(re,Object(r.a)({},s,{quadrantRef:this.quadrantRefHandlers[Z.TOP].quadrant,quadrantType:Z.TOP,columnHeaderCellRenderer:this.renderTopQuadrantColumnHeader,menuRenderer:this.renderTopQuadrantMenu,rowHeaderCellRenderer:this.renderTopQuadrantRowHeader,scrollContainerRef:this.quadrantRefHandlers[Z.TOP].scrollContainer})),u,d)},t.prototype.generateQuadrantRefHandlers=function(e){var t=this;return["columnHeader","menu","quadrant","rowHeader","scrollContainer"].reduce((function(n,i){return n[i]=function(n){return t.quadrantRefs[e][i]=n},n}),{})},t.prototype.emitRefs=function(){o.Utils.safeInvoke(this.props.quadrantRef,this.quadrantRefs[Z.MAIN].quadrant),o.Utils.safeInvoke(this.props.rowHeaderRef,this.quadrantRefs[Z.MAIN].rowHeader),o.Utils.safeInvoke(this.props.columnHeaderRef,this.quadrantRefs[Z.MAIN].columnHeader),o.Utils.safeInvoke(this.props.scrollContainerRef,this.quadrantRefs[Z.MAIN].scrollContainer)},t.prototype.updateScrollContainerClientSize=function(e){var t=this.quadrantRefs[Z.MAIN].scrollContainer;return e?(this.cache.setScrollContainerClientWidth(t.clientWidth),this.cache.getScrollContainerClientWidth()):(this.cache.setScrollContainerClientHeight(t.clientHeight),this.cache.getScrollContainerClientHeight())},t.prototype.maybeIncreaseToDefaultColumnHeaderHeight=function(e){return e<=1?30:e},t.prototype.getSecondaryQuadrantGridSize=function(e){var t=this.props,n=t.grid,i=t.numFrozenColumns,r=t.numFrozenRows,o="width"===e?i:r,a="width"===e?n.getCumulativeWidthAt:n.getCumulativeHeightAt;return o>0?a(o-1):1},t.prototype.measureDesiredRowHeaderWidth=function(){var e=this.quadrantRefs[Z.MAIN].rowHeader;return null==e?0:(e.style.width="auto",e.clientWidth)},t.prototype.measureDesiredColumnHeaderHeight=function(){var e=this.quadrantRefs[Z.MAIN].columnHeader;return null==e?0:e.clientHeight},t.prototype.shouldRenderLeftQuadrants=function(e){void 0===e&&(e=this.props);var t=e.enableRowHeader,n=e.numFrozenColumns;return t||null!=n&&n>0},t.prototype.adjustVerticalGuides=function(e,t){var n=t===Z.LEFT||t===Z.TOP_LEFT?0:this.cache.getScrollOffset("scrollLeft"),i=this.cache.getRowHeaderWidth();return null!=e?e.map((function(e){return e-n+i})):e},t.prototype.adjustHorizontalGuides=function(e,t){var n=t===Z.TOP||t===Z.TOP_LEFT?0:this.cache.getScrollOffset("scrollTop"),i=this.cache.getColumnHeaderHeight();return null!=e?e.map((function(e){return e-n+i})):e},t.defaultProps={enableColumnInteractionBar:void 0,enableRowHeader:!0,isHorizontalScrollDisabled:!1,isVerticalScrollDisabled:!1,throttleScrolling:!0,viewSyncDelay:500},t=Object(r.b)([l.polyfill],t)}(o.AbstractComponent2),ce=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.render=function(){var e=this.props,t=e.className,n=e.children,i=e.style;return c.createElement("div",{className:t,style:i},n)},t.prototype.renderContextMenu=function(e){return this.props.renderContextMenu(e)},t=Object(r.b)([o.ContextMenuTarget],t)}(c.PureComponent),le=function(){function e(e,t,n,i){this.target=e,this.selectedRegions=t,this.numRows=n,this.numCols=i,this.regions=y.overlapsRegion(t,e)?t:[e]}return e.prototype.getTarget=function(){return this.target},e.prototype.getSelectedRegions=function(){return this.selectedRegions},e.prototype.getRegions=function(){return this.regions},e.prototype.getUniqueCells=function(){return y.enumerateUniqueCells(this.regions,this.numRows,this.numCols)},e}(),ue=n(159),he={callbacks:[],triggered:!1};"undefined"!==typeof window&&null!=window.addEventListener&&window.addEventListener("message",(function(e){if(e.source===window&&"blueprint-table-post-message"===e.data){he.triggered=!1;var t=null;he.callbacks.length>0&&(t=he.callbacks.shift()),he.callbacks.length>0&&de(),t&&t()}}),!1);var de=function(){he.triggered||(he.triggered=!0,requestAnimationFrame((function(){requestAnimationFrame((function(){postMessage("blueprint-table-post-message","*")}))})))},fe=function(){function e(){var e=this;this.currentObjects={},this.oldObjects={},this.batchArgs={},this.done=!0,this.handleIdleCallback=function(){var t=e.callback;delete e.callback,o.Utils.safeInvoke(t)},this.mapCurrentObjectKey=function(t){return e.currentObjects[t]}}return e.prototype.reset=function(){this.batchArgs={},this.oldObjects=this.currentObjects,this.currentObjects={}},e.prototype.startNewBatch=function(){this.batchArgs={}},e.prototype.addArgsToBatch=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];this.batchArgs[this.getKey(e)]=e},e.prototype.removeOldAddNew=function(t,n,i,r){var o=this;void 0===n&&(n=e.DEFAULT_ADD_LIMIT),void 0===i&&(i=e.DEFAULT_REMOVE_LIMIT),void 0===r&&(r=e.DEFAULT_UPDATE_LIMIT),this.setKeysDifference(this.currentObjects,this.batchArgs,i).forEach((function(e){return delete o.currentObjects[e]})),this.setKeysDifference(this.oldObjects,this.batchArgs,-1).forEach((function(e){return delete o.oldObjects[e]})),Object.keys(this.oldObjects).forEach((function(e){null==o.currentObjects[e]&&(o.currentObjects[e]=o.oldObjects[e])})),this.setKeysIntersection(this.oldObjects,this.currentObjects,r).forEach((function(e){delete o.oldObjects[e],o.currentObjects[e]=t.apply(void 0,o.batchArgs[e])})),this.setKeysDifference(this.batchArgs,this.currentObjects,n).forEach((function(e){return o.currentObjects[e]=t.apply(void 0,o.batchArgs[e])})),this.done=this.setHasSameKeys(this.batchArgs,this.currentObjects)&&0===Object.keys(this.oldObjects).length},e.prototype.isDone=function(){return this.done},e.prototype.getList=function(){return Object.keys(this.currentObjects).map(this.mapCurrentObjectKey)},e.prototype.idleCallback=function(e){this.callback||(this.callback=e,function(e){he.callbacks.push(e),de()}(this.handleIdleCallback))},e.prototype.cancelOutstandingCallback=function(){delete this.callback},e.prototype.setList=function(e,t){var n=this;this.reset(),e.forEach((function(e,i){n.addArgsToBatch.apply(n,e),n.currentObjects[n.getKey(e)]=t[i]})),this.done=!0},e.prototype.getKey=function(t){return t.join(e.ARG_DELIMITER)},e.prototype.setKeysDifference=function(e,t,n){return this.setKeysOperation(e,t,"difference",n)},e.prototype.setKeysIntersection=function(e,t,n){return this.setKeysOperation(e,t,"intersect",n)},e.prototype.setKeysOperation=function(e,t,n,i){for(var r=[],o=Object.keys(e),a=0;a<o.length&&(i<0||r.length<i);a++){var s=o[a];("difference"===n&&e[s]&&!t[s]||"intersect"===n&&e[s]&&t[s])&&r.push(s)}return r},e.prototype.setHasSameKeys=function(e,t){var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var r=0,o=n;r<o.length;r++){if(void 0===t[o[r]])return!1}return!0},e.DEFAULT_ADD_LIMIT=20,e.DEFAULT_UPDATE_LIMIT=20,e.DEFAULT_REMOVE_LIMIT=20,e.ARG_DELIMITER="|",e}(),pe=["viewportRect"],me=["columnIndexEnd","columnIndexStart","rowIndexEnd","rowIndexStart"],ge=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.batcher=new fe,n.renderNewCell=function(e,t){var i=n.props,r=i.columnIndexEnd,o=i.grid,a=i.rowIndexEnd,s=o.getExtremaClasses(e,t,a,r),c=o.isGhostIndex(e,t);return n.renderCell(e,t,s,c)},n.renderCell=function(e,i,o,a){var l,u=n.props,d=u.cellRenderer,f=u.focusedCell,p=u.loading,m=u.grid,g=a?Object(ue.b)():d(e,i);g=null==g?Object(ue.b)():g;var v=s()(ve(e,i),o,((l={})[h.f]=a,l[h.i]=e%2===1,l[h.h]=e%2===0,l),g.props.className),_=t.cellReactKey(e,i),b=a?m.getGhostCellRect(e,i):m.getCellRect(e,i),y=null!=g.props.loading?g.props.loading:p,w=Object(r.a)(Object(r.a)({},g.props.style),E.a.style(b)),O=null!=f&&f.row===e&&f.col===i;return c.cloneElement(g,{className:v,isFocused:O,key:_,loading:y,style:w})},n.didViewportRectChange=function(e,t){return(null!=e||null!=t)&&(null==e||null==t||!e.equals(t))},n}return Object(r.c)(t,e),t.cellReactKey=function(e,t){return"cell-"+e+"-"+t},t.prototype.componentDidMount=function(){this.maybeInvokeOnCompleteRender()},t.prototype.shouldComponentUpdate=function(e){return!o.Utils.shallowCompareKeys(e,this.props,{exclude:pe})||this.didViewportRectChange(e.viewportRect,this.props.viewportRect)},t.prototype.componentDidUpdate=function(e){!o.Utils.shallowCompareKeys(e,this.props,{exclude:me})&&this.batcher.reset(),this.maybeInvokeOnCompleteRender()},t.prototype.componentWillUnmount=function(){this.batcher.cancelOutstandingCallback()},t.prototype.render=function(){var e=this.props.renderMode===C.BATCH?this.renderBatchedCells():this.renderAllCells();return c.createElement("div",{className:h.a},e)},t.prototype.renderBatchedCells=function(){var e=this,t=this.props,n=t.columnIndexEnd,i=t.columnIndexStart,r=t.rowIndexEnd,o=t.rowIndexStart;this.batcher.startNewBatch();for(var a=o;a<=r;a++)for(var s=i;s<=n;s++)this.batcher.addArgsToBatch(a,s);return this.batcher.removeOldAddNew(this.renderNewCell),this.batcher.isDone()||this.batcher.idleCallback((function(){return e.forceUpdate()})),this.batcher.getList()},t.prototype.renderAllCells=function(){for(var e=this.props,t=e.columnIndexEnd,n=e.columnIndexStart,i=e.rowIndexEnd,r=[],o=[],a=e.rowIndexStart;a<=i;a++)for(var s=n;s<=t;s++)r.push(this.renderNewCell(a,s)),o.push([a,s]);return this.batcher.setList(o,r),r},t.prototype.maybeInvokeOnCompleteRender=function(){var e=this.props,t=e.onCompleteRender,n=e.renderMode;(n===C.NONE||n===C.BATCH&&this.batcher.isDone())&&o.Utils.safeInvoke(t)},t.defaultProps={renderMode:C.BATCH},t}(o.AbstractComponent2);function ve(e,t){return[h.Eb(e),h.Cb(t)]}var _e=["selectedRegions"],be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.renderContextMenu=function(e){var n=t.props,i=n.grid,o=n.onFocusedCell,a=n.onSelection,s=n.bodyContextMenuRenderer,c=n.selectedRegions,l=i.numRows,u=i.numCols;if(null!=s){var h=t.locateClick(e.nativeEvent),d=c;if(y.findContainingRegion(c,h)<0)a(d=[h]),o(Object(r.a)(Object(r.a)({},y.getFocusCellCoordinatesFromRegion(h)),{focusSelectionIndex:0}));var f=s(new le(h,d,l,u));return null==f?void 0:f}},t.handleSelectionEnd=function(){t.activationCell=null},t.locateClick=function(e){return t.activationCell=t.props.locator.convertPointToCell(e.clientX,e.clientY),y.cell(t.activationCell.row,t.activationCell.col)},t.locateDrag=function(e,n,i){void 0===i&&(i=!1);var r=t.activationCell,o=t.props.locator.convertPointToCell(n.current[0],n.current[1]);return i?y.cell(o.row,o.col):y.cell(r.row,r.col,o.row,o.col)},t}return Object(r.c)(t,e),t.cellClassNames=function(e,t){return ve(e,t)},t.prototype.shouldComponentUpdate=function(e){return!o.Utils.shallowCompareKeys(this.props,e,{exclude:_e})||!o.Utils.deepCompareKeys(this.props,e,_e)},t.prototype.render=function(){var e=this.props,t=e.grid,n=e.numFrozenColumns,i=e.numFrozenRows,r=t.getRect().sizeStyle(),o={height:null!=i?t.getCumulativeHeightAt(i-1):r.height,width:null!=n?t.getCumulativeWidthAt(n-1):r.width};return c.createElement(G,{enableMultipleSelection:this.props.enableMultipleSelection,focusedCell:this.props.focusedCell,locateClick:this.locateClick,locateDrag:this.locateDrag,onFocusedCell:this.props.onFocusedCell,onSelection:this.props.onSelection,onSelectionEnd:this.handleSelectionEnd,selectedRegions:this.props.selectedRegions,selectedRegionTransform:this.props.selectedRegionTransform},c.createElement(ce,{className:s()(h.b,h.e),renderContextMenu:this.renderContextMenu,style:o},c.createElement(ge,{cellRenderer:this.props.cellRenderer,focusedCell:this.props.focusedCell,grid:t,loading:this.props.loading,onCompleteRender:this.props.onCompleteRender,renderMode:this.props.renderMode,columnIndexStart:this.props.columnIndexStart,columnIndexEnd:this.props.columnIndexEnd,rowIndexStart:this.props.rowIndexStart,rowIndexEnd:this.props.rowIndexEnd,viewportRect:this.props.viewportRect})))},t.defaultProps={loading:!1,renderMode:C.BATCH},t}(o.AbstractComponent2),ye=function(e){function t(t,a){var l=e.call(this,t,a)||this;l.refHandlers={cellContainer:function(e){return l.cellContainerElement=e},columnHeader:function(e){return l.columnHeaderElement=e},quadrantStack:function(e){return l.quadrantStackInstance=e},rootTable:function(e){return l.rootTableElement=e},rowHeader:function(e){return l.rowHeaderElement=e},scrollContainer:function(e){return l.scrollContainerElement=e}},l.didCompletelyMount=!1,l.handleSelectionResizeUp=function(e){return l.handleSelectionResize(e,i.UP)},l.handleSelectionResizeDown=function(e){return l.handleSelectionResize(e,i.DOWN)},l.handleSelectionResizeLeft=function(e){return l.handleSelectionResize(e,i.LEFT)},l.handleSelectionResizeRight=function(e){return l.handleSelectionResize(e,i.RIGHT)},l.handleSelectionResize=function(e,t){e.preventDefault(),e.stopPropagation();var n=l.state,i=n.focusedCell,r=n.selectedRegions;if(0!==r.length){var o=function(e,t){return 0===e.length?void 0:null!=t?t.focusSelectionIndex:e.length-1}(r,i),a=I(r[o],t,i);l.updateSelectedRegionAtIndex(a,o)}},l.handleCopy=function(e){var t=l.props,n=t.getCellClipboardData,i=t.onCopy,r=l.state.selectedRegions;if(null!=n){e.preventDefault(),e.stopPropagation();var a=y.enumerateUniqueCells(r,l.grid.numRows,l.grid.numCols),s=y.sparseMapCells(a,n);if(null!=s){var c=d.copyCells(s);o.Utils.safeInvoke(i,c)}}},l.renderMenu=function(e){var t,i=s()(h.D,((t={})[h.mb]=n.isSelectionModeEnabled(l.props,p.FULL_TABLE),t));return c.createElement("div",{className:i,ref:e,onMouseDown:l.handleMenuMouseDown},l.maybeRenderRegions(l.styleMenuRegion))},l.handleMenuMouseDown=function(e){l.selectAll(!e.shiftKey)},l.selectAll=function(e){if(l.getEnabledSelectionHandler(p.FULL_TABLE)([y.table()]),e){var t=y.getFocusCellCoordinatesFromRegion(y.table());l.handleFocus(T(t))}},l.handleSelectAllHotkey=function(e){e.preventDefault(),e.stopPropagation(),l.selectAll(!1)},l.columnHeaderCellRenderer=function(e){var t=l.getColumnProps(e);if(void 0===t)return null;t.id;var n=t.loadingOptions,i=(t.cellRenderer,t.columnHeaderCellRenderer),o=Object(r.d)(t,["id","loadingOptions","cellRenderer","columnHeaderCellRenderer"]),a=l.hasLoadingOption(n,g.HEADER);if(null!=i){var s=i(e),u=s.props.loading,h={loading:null!=u?u:a};return c.cloneElement(s,h)}var d=Object(r.a)({index:e,loading:a},o);return null!=t.name?c.createElement(H,Object(r.a)({},d)):c.createElement(H,Object(r.a)({},d,{name:m.b.toBase26Alpha(e)}))},l.renderColumnHeader=function(e,t,i,r){var o;void 0===r&&(r=!1);var a=l.state,u=a.focusedCell,d=a.selectedRegions,f=a.viewportRect,m=l.props,g=m.enableMultipleSelection,v=m.enableGhostCells,b=m.enableColumnReordering,y=m.enableColumnResizing,w=m.loadingOptions,O=m.maxColumnWidth,C=m.minColumnWidth,E=m.selectedRegionTransform,A=s()(h.j,((o={})[h.mb]=n.isSelectionModeEnabled(l.props,p.FULL_COLUMNS),o)),x=l.grid.getColumnIndicesInRect(f,v),T=r?0:x.columnIndexStart,S=r?l.getMaxFrozenColumnIndex():x.columnIndexEnd;return c.createElement("div",{className:A},c.createElement($,{enableMultipleSelection:g,cellRenderer:l.columnHeaderCellRenderer,focusedCell:u,grid:l.grid,isReorderable:b,isResizable:y,loading:l.hasLoadingOption(w,_.COLUMN_HEADERS),locator:l.locator,maxColumnWidth:O,measurableElementRef:e,minColumnWidth:C,onColumnWidthChanged:l.handleColumnWidthChanged,onFocusedCell:l.handleFocus,onLayoutLock:l.handleLayoutLock,onReordered:l.handleColumnsReordered,onReordering:i,onResizeGuide:t,onSelection:l.getEnabledSelectionHandler(p.FULL_COLUMNS),selectedRegions:d,selectedRegionTransform:E,columnIndexStart:T,columnIndexEnd:S},l.props.children),l.maybeRenderRegions(l.styleColumnHeaderRegion))},l.renderRowHeader=function(e,t,i,r){var o;void 0===r&&(r=!1);var a=l.state,u=a.focusedCell,d=a.selectedRegions,f=a.viewportRect,m=l.props,g=m.enableMultipleSelection,v=m.enableGhostCells,b=m.enableRowReordering,y=m.enableRowResizing,w=m.loadingOptions,O=m.maxRowHeight,C=m.minRowHeight,E=m.rowHeaderCellRenderer,A=m.selectedRegionTransform,x=s()(h.ib,((o={})[h.mb]=n.isSelectionModeEnabled(l.props,p.FULL_ROWS),o)),T=l.grid.getRowIndicesInRect(f,v),S=r?0:T.rowIndexStart,D=r?l.getMaxFrozenRowIndex():T.rowIndexEnd;return c.createElement("div",{className:x,ref:e},c.createElement(K,{enableMultipleSelection:g,focusedCell:u,grid:l.grid,locator:l.locator,isReorderable:b,isResizable:y,loading:l.hasLoadingOption(w,_.ROW_HEADERS),maxRowHeight:O,minRowHeight:C,onFocusedCell:l.handleFocus,onLayoutLock:l.handleLayoutLock,onResizeGuide:t,onReordered:l.handleRowsReordered,onReordering:i,onRowHeightChanged:l.handleRowHeightChanged,onSelection:l.getEnabledSelectionHandler(p.FULL_ROWS),rowHeaderCellRenderer:E,selectedRegions:d,selectedRegionTransform:A,rowIndexStart:S,rowIndexEnd:D}),l.maybeRenderRegions(l.styleRowHeaderRegion))},l.bodyCellRenderer=function(e,t){var n=l.getColumnProps(t);if(void 0===n)return null;n.id;var i=n.loadingOptions,o=n.cellRenderer,a=(n.columnHeaderCellRenderer,n.name,n.nameRenderer,Object(r.d)(n,["id","loadingOptions","cellRenderer","columnHeaderCellRenderer","name","nameRenderer"])),s=o(e,t),u=s.props.loading,h=void 0===u?l.hasLoadingOption(i,g.CELLS):u,d=Object(r.a)(Object(r.a)({},a),{loading:h});return c.cloneElement(s,d)},l.renderBody=function(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=l.state,r=i.focusedCell,o=i.numFrozenColumnsClamped,a=i.numFrozenRowsClamped,s=i.selectedRegions,u=i.viewportRect,h=l.props,d=h.enableMultipleSelection,f=h.enableGhostCells,m=h.loadingOptions,g=h.bodyContextMenuRenderer,v=h.selectedRegionTransform,b=l.grid.getRowIndicesInRect(u,f),y=l.grid.getColumnIndicesInRect(u,f),w=n?0:y.columnIndexStart+o,O=t?0:b.rowIndexStart+a,C=n?o-1:y.columnIndexEnd,E=t?a-1:b.rowIndexEnd,A=e===Z.MAIN?l.handleCompleteRender:void 0;return c.createElement("div",null,c.createElement(be,{enableMultipleSelection:d,cellRenderer:l.bodyCellRenderer,focusedCell:r,grid:l.grid,loading:l.hasLoadingOption(m,_.CELLS),locator:l.locator,onCompleteRender:A,onFocusedCell:l.handleFocus,onSelection:l.getEnabledSelectionHandler(p.CELLS),bodyContextMenuRenderer:g,renderMode:l.getNormalizedRenderMode(),selectedRegions:s,selectedRegionTransform:v,viewportRect:u,columnIndexStart:w,columnIndexEnd:C,rowIndexStart:O,rowIndexEnd:E,numFrozenColumns:n?o:void 0,numFrozenRows:t?a:void 0}),l.maybeRenderRegions(l.styleBodyRegion,e))},l.handleCompleteRender=function(){null!=l.state.viewportRect&&(o.Utils.safeInvoke(l.props.onCompleteRender),l.didCompletelyMount=!0)},l.handleFocusMoveLeft=function(e){return l.handleFocusMove(e,"left")},l.handleFocusMoveLeftInternal=function(e){return l.handleFocusMoveInternal(e,"left")},l.handleFocusMoveRight=function(e){return l.handleFocusMove(e,"right")},l.handleFocusMoveRightInternal=function(e){return l.handleFocusMoveInternal(e,"right")},l.handleFocusMoveUp=function(e){return l.handleFocusMove(e,"up")},l.handleFocusMoveUpInternal=function(e){return l.handleFocusMoveInternal(e,"up")},l.handleFocusMoveDown=function(e){return l.handleFocusMove(e,"down")},l.handleFocusMoveDownInternal=function(e){return l.handleFocusMoveInternal(e,"down")},l.styleBodyRegion=function(e,t){var n=l.props.numFrozenColumns,i=y.getRegionCardinality(e),r=l.grid.getRegionStyle(e),o=(t===Z.TOP_LEFT||t===Z.LEFT)&&null!=n&&n>0,a=l.grid.getHeight(),s=l.grid.getWidth();switch(i){case p.CELLS:return r;case p.FULL_COLUMNS:return r.top="-1px",r.height=a+1,r;case p.FULL_ROWS:return r.left="-1px",r.width=s+1,o&&(r.right="-1px"),r;case p.FULL_TABLE:return r.left="-1px",r.top="-1px",r.width=s+1,r.height=a+1,o&&(r.right="-1px"),r;default:return{display:"none"}}},l.styleMenuRegion=function(e){if(null==l.state.viewportRect)return{};var t=y.getRegionCardinality(e),n=l.grid.getRegionStyle(e);switch(t){case p.FULL_TABLE:return n.right="0px",n.bottom="0px",n.top="0px",n.left="0px",n.borderBottom="none",n.borderRight="none",n;default:return{display:"none"}}},l.styleColumnHeaderRegion=function(e){if(null==l.state.viewportRect)return{};var t=y.getRegionCardinality(e),n=l.grid.getRegionStyle(e);switch(t){case p.FULL_TABLE:return n.left="-1px",n.borderLeft="none",n.bottom="-1px",n;case p.FULL_COLUMNS:return n.bottom="-1px",n;default:return{display:"none"}}},l.styleRowHeaderRegion=function(e){if(null==l.state.viewportRect)return{};var t=y.getRegionCardinality(e),n=l.grid.getRegionStyle(e);switch(t){case p.FULL_TABLE:return n.top="-1px",n.borderTop="none",n.right="-1px",n;case p.FULL_ROWS:return n.right="-1px",n;default:return{display:"none"}}},l.handleColumnWidthChanged=function(e,t){var n=l.state.selectedRegions,i=l.state.columnWidths.slice();if(y.hasFullTable(n))for(var r=0;r<i.length;r++)i[r]=t;y.hasFullColumn(n,e)?y.eachUniqueFullColumn(n,(function(e){i[e]=t})):i[e]=t,l.invalidateGrid(),l.setState({columnWidths:i});var o=l.props.onColumnWidthChanged;null!=o&&o(e,t)},l.handleRowHeightChanged=function(e,t){var n=l.state.selectedRegions,i=l.state.rowHeights.slice();if(y.hasFullTable(n))for(var r=0;r<i.length;r++)i[r]=t;y.hasFullRow(n,e)?y.eachUniqueFullRow(n,(function(e){i[e]=t})):i[e]=t,l.invalidateGrid(),l.setState({rowHeights:i});var o=l.props.onRowHeightChanged;null!=o&&o(e,t)},l.handleRootScroll=function(e){null!=l.rootTableElement&&(l.rootTableElement.scrollLeft=0,l.rootTableElement.scrollTop=0)},l.handleBodyScroll=function(e){if(e.stopPropagation(),null!=l.locator&&!l.state.isLayoutLocked){var t=l.locator.getViewportRect();l.updateViewportRect(t)}},l.clearSelection=function(e){l.handleSelection([])},l.handleFocusMove=function(e,t){e.preventDefault(),e.stopPropagation();var n=l.state.focusedCell;if(null!=n){var i={col:n.col,focusSelectionIndex:0,row:n.row};switch(t){case"up":i.row-=1;break;case"down":i.row+=1;break;case"left":i.col-=1;break;case"right":i.col+=1}if(!(i.row<0||i.row>=l.grid.numRows||i.col<0||i.col>=l.grid.numCols)){var r=[y.cell(i.row,i.col)],o=l.props.selectedRegionTransform,a=null!=o?r.map((function(t){return o(t,e)})):r;l.handleSelection(a),l.handleFocus(i),l.scrollBodyToFocusedCell(i)}}},l.handleFocusMoveInternal=function(e,t){e.preventDefault(),e.stopPropagation();var n=l.state,i=n.focusedCell,r=n.selectedRegions;if(null!=i){var o={col:i.col,focusSelectionIndex:i.focusSelectionIndex,row:i.row};if(null==i.focusSelectionIndex&&r.length>0){o={col:(a=y.getCellRegionFromRegion(r[0],l.grid.numRows,l.grid.numCols)).cols[0],focusSelectionIndex:0,row:a.rows[0]}}else{if(0===r.length)return void l.handleFocusMove(e,t);var a;if((a=y.getCellRegionFromRegion(r[i.focusSelectionIndex],l.grid.numRows,l.grid.numCols)).cols[0]===a.cols[1]&&a.rows[0]===a.rows[1]&&1===r.length)return void l.handleFocusMove(e,t);switch(t){case"up":o=l.moveFocusCell("row","col",!0,o,a);break;case"left":o=l.moveFocusCell("col","row",!0,o,a);break;case"down":o=l.moveFocusCell("row","col",!1,o,a);break;case"right":o=l.moveFocusCell("col","row",!1,o,a)}}o.row<0||o.row>=l.grid.numRows||o.col<0||o.col>=l.grid.numCols||(l.handleFocus(o),l.scrollBodyToFocusedCell(o))}},l.scrollBodyToFocusedCell=function(e){var t=e.row,n=e.col,i=l.state.viewportRect,r=i.top,o=i.left+i.width,a=i.top+i.height,s=i.left,c=l.grid.getCumulativeHeightBefore(t),u=l.grid.getCumulativeWidthAt(n),h=l.grid.getCumulativeHeightAt(t),d=l.grid.getCumulativeWidthBefore(n),f=h-c,p=u-d>i.width,m=f>i.height,g={};if(c<r||m)g.nextScrollTop=Math.max(0,c-1);else if(h>a){var v=h-a;g.nextScrollTop=r+v}if(d<s||p)g.nextScrollLeft=Math.max(0,d-1);else if(u>o){v=u-o;g.nextScrollLeft=s+v}l.syncViewportPosition(g)},l.handleFocus=function(e){l.props.enableFocusedCell&&(null==l.props.focusedCell&&l.setState({focusedCell:e}),o.Utils.safeInvoke(l.props.onFocusedCell,e))},l.handleSelection=function(e){null==l.props.selectedRegions&&l.setState({selectedRegions:e});var t=l.props.onSelection;null!=t&&t(e)},l.handleColumnsReordering=function(e){l.setState({isReordering:!0,verticalGuides:e})},l.handleColumnsReordered=function(e,t,n){l.setState({isReordering:!1,verticalGuides:void 0}),o.Utils.safeInvoke(l.props.onColumnsReordered,e,t,n)},l.handleRowsReordering=function(e){l.setState({isReordering:!0,horizontalGuides:e})},l.handleRowsReordered=function(e,t,n){l.setState({isReordering:!1,horizontalGuides:void 0}),o.Utils.safeInvoke(l.props.onRowsReordered,e,t,n)},l.handleLayoutLock=function(e){void 0===e&&(e=!1),l.setState({isLayoutLocked:e})},l.hasLoadingOption=function(e,t){if(null!=e)return e.indexOf(t)>=0},l.updateViewportRect=function(e){var t=l.state.viewportRect;l.setState({viewportRect:e}),(null!=t&&!t.equals(e)||null==t&&null!=e)&&l.invokeOnVisibleCellsChangeCallback(e)},l.getMaxFrozenColumnIndex=function(){var e=l.state.numFrozenColumnsClamped;return null!=e?e-1:void 0},l.getMaxFrozenRowIndex=function(){var e=l.state.numFrozenRowsClamped;return null!=e?e-1:void 0},l.handleColumnResizeGuide=function(e){l.setState({verticalGuides:e})},l.handleRowResizeGuide=function(e){l.setState({horizontalGuides:e})};var u=l.props,f=u.children,v=u.columnWidths,b=u.defaultRowHeight,w=u.defaultColumnWidth,O=u.numRows,C=u.rowHeights,E=c.Children.toArray(f),A=n.createColumnIdIndex(E),S=E.map((function(){return w}));S=m.b.assignSparseValues(S,v);var D=m.b.times(O,(function(){return b}));D=m.b.assignSparseValues(D,C);var P=null==t.selectedRegions?[]:t.selectedRegions,M=x(t.enableFocusedCell,t.focusedCell,void 0,P);return l.state={childrenArray:E,columnIdToIndex:A,columnWidths:S,focusedCell:M,isLayoutLocked:!1,isReordering:!1,numFrozenColumnsClamped:we(t),numFrozenRowsClamped:Oe(t),rowHeights:D,selectedRegions:P},l}var n;return Object(r.c)(t,e),n=t,t.getDerivedStateFromProps=function(e,t){var i=e.children,r=e.defaultColumnWidth,a=e.defaultRowHeight,s=e.enableFocusedCell,l=e.focusedCell,u=e.numRows,h=e.selectedRegions,d=e.selectionModes,f=e.columnWidths,p=e.rowHeights;null==f&&(f=t.columnWidths),null==p&&(p=t.rowHeights);var g=c.Children.toArray(i),v=g!==t.childrenArray,_=g.length,b=f;if(f!==t.columnWidths||v){var w=g.map((function(e,n){var i=t.columnIdToIndex[e.props.id];return t.columnWidths[null!=i?i:n]}));b=m.b.arrayOfLength(b,_,r),b=m.b.assignSparseValues(b,w),b=m.b.assignSparseValues(b,f)}var O=p;p===t.rowHeights&&u===t.rowHeights.length||(O=m.b.arrayOfLength(O,u,a),O=m.b.assignSparseValues(O,p));var C=h;null==h&&(C=t.selectedRegions.filter((function(t){var i=y.getRegionCardinality(t);return n.isSelectionModeEnabled(e,i,d)&&y.isRegionValidForTable(t,u,_)})));var E=x(s,l,t.focusedCell,C),A={childrenArray:g,columnIdToIndex:v?n.createColumnIdIndex(g):t.columnIdToIndex,columnWidths:b,focusedCell:E,numFrozenColumnsClamped:we(e),numFrozenRowsClamped:Oe(e),rowHeights:O,selectedRegions:C};return o.Utils.deepCompareKeys(t,A,n.SHALLOW_COMPARE_STATE_KEYS_DENYLIST)?null:A},t.createColumnIdIndex=function(e){for(var t={},n=0;n<e.length;n++){var i=e[n].props.id;null!=i&&(t[String(i)]=n)}return t},t.isSelectionModeEnabled=function(e,t,n){void 0===n&&(n=e.selectionModes);var i=e.children,r=e.numRows,o=c.Children.count(i);return n.indexOf(t)>=0&&r>0&&o>0},t.prototype.resizeRowsByApproximateHeight=function(e,t){for(var n=this.props.numRows,i=this.state.columnWidths,r=i.length,o=[],a=0;a<n;a++){for(var s=0,c=0;c<r;c++){var l=this.resolveResizeRowsByApproximateHeightOptions(t,a,c),u=l.getApproximateCharWidth,h=l.getApproximateLineHeight,d=l.getCellHorizontalPadding,f=l.getNumBufferLines,p=e(a,c),g=m.b.getApproxCellHeight(p,i[c],u,h,d,f);g>s&&(s=g)}o.push(s)}this.invalidateGrid(),this.setState({rowHeights:o})},t.prototype.resizeRowsByTallestCell=function(e){var t=this,n=0;if(null==e)for(var i=this.grid.getColumnIndicesInRect(this.state.viewportRect),r=i.columnIndexStart;r<=i.columnIndexEnd;r++)n=Math.max(n,this.locator.getTallestVisibleCellInColumn(r));else{var o=(Array.isArray(e)?e:[e]).map((function(e){return t.locator.getTallestVisibleCellInColumn(e)}));n=Math.max.apply(Math,o)}var a=Array(this.state.rowHeights.length).fill(n);this.invalidateGrid(),this.setState({rowHeights:a})},t.prototype.scrollToRegion=function(e){var t=this.state,n=t.numFrozenColumnsClamped,i=t.numFrozenRowsClamped,r=this.state.viewportRect,o=function(e,t,n,i,r,o,a){void 0===o&&(o=0),void 0===a&&(a=0);var s=y.getRegionCardinality(e),c=n,l=t,u=i(a),h=r(o);switch(s){case p.CELLS:var d=r(e.rows[0]),f=i(e.cols[0]);c=P(d,h),l=P(f,u);break;case p.FULL_ROWS:c=P(d=r(e.rows[0]),h);break;case p.FULL_COLUMNS:l=P(f=i(e.cols[0]),u);break;default:c=0,l=0}return{scrollLeft:l,scrollTop:c}}(e,r.left,r.top,this.grid.getCumulativeWidthBefore,this.grid.getCumulativeHeightBefore,i,n),a=o.scrollLeft,s=o.scrollTop,c=this.shouldDisableHorizontalScroll()?0:a,l=this.shouldDisableVerticalScroll()?0:s;this.quadrantStackInstance.scrollToPosition(c,l)},t.prototype.getChildContext=function(){return{enableColumnInteractionBar:this.props.enableColumnInteractionBar}},t.prototype.shouldComponentUpdate=function(e,t){var i={exclude:n.SHALLOW_COMPARE_PROP_KEYS_DENYLIST},r={exclude:n.SHALLOW_COMPARE_STATE_KEYS_DENYLIST};return!o.Utils.shallowCompareKeys(this.props,e,i)||!o.Utils.shallowCompareKeys(this.state,t,r)||!o.Utils.deepCompareKeys(this.props,e,n.SHALLOW_COMPARE_PROP_KEYS_DENYLIST)||!o.Utils.deepCompareKeys(this.state,t,n.SHALLOW_COMPARE_STATE_KEYS_DENYLIST)},t.prototype.render=function(){var e,t=this.props,i=t.children,r=t.className,o=t.enableRowHeader,a=t.loadingOptions,l=t.numRows,u=t.enableColumnInteractionBar,d=this.state,f=d.horizontalGuides,m=d.numFrozenColumnsClamped,g=d.numFrozenRowsClamped,v=d.verticalGuides;this.gridDimensionsMatchProps()||this.invalidateGrid(),this.validateGrid();var _=s()(h.o,((e={})[h.X]=this.state.isReordering,e[h.G]=this.shouldDisableVerticalScroll(),e[h.E]=this.shouldDisableHorizontalScroll(),e[h.mb]=n.isSelectionModeEnabled(this.props,p.CELLS),e[h.F]=0===l,e),r);return c.createElement("div",{className:_,ref:this.refHandlers.rootTable,onScroll:this.handleRootScroll},c.createElement(se,{bodyRef:this.refHandlers.cellContainer,bodyRenderer:this.renderBody,columnHeaderCellRenderer:this.renderColumnHeader,columnHeaderRef:this.refHandlers.columnHeader,enableColumnInteractionBar:u,enableRowHeader:o,grid:this.grid,handleColumnResizeGuide:this.handleColumnResizeGuide,handleColumnsReordering:this.handleColumnsReordering,handleRowResizeGuide:this.handleRowResizeGuide,handleRowsReordering:this.handleRowsReordering,isHorizontalScrollDisabled:this.shouldDisableHorizontalScroll(),isVerticalScrollDisabled:this.shouldDisableVerticalScroll(),loadingOptions:a,numColumns:c.Children.count(i),numFrozenColumns:m,numFrozenRows:g,numRows:l,onScroll:this.handleBodyScroll,ref:this.refHandlers.quadrantStack,menuRenderer:this.renderMenu,rowHeaderCellRenderer:this.renderRowHeader,rowHeaderRef:this.refHandlers.rowHeader,scrollContainerRef:this.refHandlers.scrollContainer}),c.createElement("div",{className:s()(h.K,h.L)}),c.createElement(ee,{className:h.ab,verticalGuides:v,horizontalGuides:f}))},t.prototype.renderHotkeys=function(){var e=[this.maybeRenderCopyHotkey(),this.maybeRenderSelectAllHotkey(),this.maybeRenderFocusHotkeys(),this.maybeRenderSelectionResizeHotkeys()];return c.createElement(o.Hotkeys,null,e.filter((function(e){return void 0!==e})))},t.prototype.componentDidMount=function(){var e=this;this.validateGrid(),this.locator=new ie.a(this.rootTableElement,this.scrollContainerElement,this.cellContainerElement),this.updateLocator(),this.updateViewportRect(this.locator.getViewportRect()),this.resizeSensorDetach=J.attach(this.rootTableElement,(function(){e.state.isLayoutLocked||e.updateViewportRect(e.locator.getViewportRect())}))},t.prototype.componentWillUnmount=function(){null!=this.resizeSensorDetach&&(this.resizeSensorDetach(),delete this.resizeSensorDetach),this.didCompletelyMount=!1},t.prototype.getSnapshotBeforeUpdate=function(){var e=this.state.viewportRect;this.validateGrid();var t=this.grid.getCumulativeHeightAt(this.grid.numRows-1),n=this.grid.getCumulativeWidthAt(this.grid.numCols-1),i=t<e.top+e.height?Math.max(0,t-e.height):void 0;return{nextScrollLeft:n<e.left+e.width?Math.max(0,n-e.width):void 0,nextScrollTop:i}},t.prototype.componentDidUpdate=function(t,n,i){e.prototype.componentDidUpdate.call(this,t,n,i),(c.Children.toArray(this.props.children)!==this.state.childrenArray||this.props.columnWidths!==n.columnWidths||this.props.rowHeights!==n.rowHeights||this.props.numRows!==t.numRows||this.props.forceRerenderOnSelectionChange&&this.props.selectedRegions!==t.selectedRegions)&&this.invalidateGrid(),null!=this.locator&&(this.validateGrid(),this.updateLocator()),(!o.Utils.arraysEqual(this.state.columnWidths,n.columnWidths)||!o.Utils.arraysEqual(this.state.rowHeights,n.rowHeights))&&(this.quadrantStackInstance.synchronizeQuadrantViews(),this.syncViewportPosition(i))},t.prototype.validateProps=function(e){var t=e.children,n=e.columnWidths,i=e.numFrozenColumns,r=e.numFrozenRows,a=e.numRows,s=e.rowHeights,l=c.Children.count(t);if(null!=a&&a<0)throw new Error("[Blueprint Table] <Table> requires numRows to be greater than or equal to 0.");if(null!=r&&r<0)throw new Error("[Blueprint Table] <Table> requires numFrozenRows to be greater than or equal to 0.");if(null!=i&&i<0)throw new Error("[Blueprint Table] <Table> requires numFrozenColumns to be greater than or equal to 0.");if(null!=a&&null!=s&&s.length!==a)throw new Error("[Blueprint Table] <Table> requires rowHeights.length to equal numRows when both props are provided.");if(null!=l&&null!=n&&n.length!==l)throw new Error("[Blueprint Table] <Table> requires columnWidths.length to equal the number of <Column>s if provided.");c.Children.forEach(t,(function(e){if(!o.Utils.isElementOfType(e,u.a))throw new Error('[Blueprint Table] <Table> Children of Table must be Columns"')})),null!=r&&null!=a&&r>a&&console.warn("[Blueprint Table] <Table> numFrozenRows must be less than or equal to numRows. Clamping the value for you."),null!=i&&i>l&&console.warn("[Blueprint Table] <Table> numFrozenColumns must be in less than or equal to the number of columns. Clamping the value for you.")},t.prototype.gridDimensionsMatchProps=function(){var e=this.props,t=e.children,n=e.numRows;return null!=this.grid&&this.grid.numCols===c.Children.count(t)&&this.grid.numRows===n},t.prototype.maybeRenderCopyHotkey=function(){return null!=this.props.getCellClipboardData?c.createElement(o.Hotkey,{key:"copy-hotkey",label:"Copy selected table cells",group:"Table",combo:"mod+c",onKeyDown:this.handleCopy}):void 0},t.prototype.maybeRenderSelectionResizeHotkeys=function(){var e=this.props,t=e.enableMultipleSelection,n=e.selectionModes.length>0;return t&&n?[c.createElement(o.Hotkey,{key:"resize-selection-up",label:"Resize selection upward",group:"Table",combo:"shift+up",onKeyDown:this.handleSelectionResizeUp}),c.createElement(o.Hotkey,{key:"resize-selection-down",label:"Resize selection downward",group:"Table",combo:"shift+down",onKeyDown:this.handleSelectionResizeDown}),c.createElement(o.Hotkey,{key:"resize-selection-left",label:"Resize selection leftward",group:"Table",combo:"shift+left",onKeyDown:this.handleSelectionResizeLeft}),c.createElement(o.Hotkey,{key:"resize-selection-right",label:"Resize selection rightward",group:"Table",combo:"shift+right",onKeyDown:this.handleSelectionResizeRight})]:void 0},t.prototype.maybeRenderFocusHotkeys=function(){return null!=this.props.enableFocusedCell?[c.createElement(o.Hotkey,{key:"move left",label:"Move focus cell left",group:"Table",combo:"left",onKeyDown:this.handleFocusMoveLeft}),c.createElement(o.Hotkey,{key:"move right",label:"Move focus cell right",group:"Table",combo:"right",onKeyDown:this.handleFocusMoveRight}),c.createElement(o.Hotkey,{key:"move up",label:"Move focus cell up",group:"Table",combo:"up",onKeyDown:this.handleFocusMoveUp}),c.createElement(o.Hotkey,{key:"move down",label:"Move focus cell down",group:"Table",combo:"down",onKeyDown:this.handleFocusMoveDown}),c.createElement(o.Hotkey,{key:"move tab",label:"Move focus cell tab",group:"Table",combo:"tab",onKeyDown:this.handleFocusMoveRightInternal,allowInInput:!0}),c.createElement(o.Hotkey,{key:"move shift-tab",label:"Move focus cell shift tab",group:"Table",combo:"shift+tab",onKeyDown:this.handleFocusMoveLeftInternal,allowInInput:!0}),c.createElement(o.Hotkey,{key:"move enter",label:"Move focus cell enter",group:"Table",combo:"enter",onKeyDown:this.handleFocusMoveDownInternal,allowInInput:!0}),c.createElement(o.Hotkey,{key:"move shift-enter",label:"Move focus cell shift enter",group:"Table",combo:"shift+enter",onKeyDown:this.handleFocusMoveUpInternal,allowInInput:!0})]:[]},t.prototype.maybeRenderSelectAllHotkey=function(){return n.isSelectionModeEnabled(this.props,p.FULL_TABLE)?c.createElement(o.Hotkey,{key:"select-all-hotkey",label:"Select all",group:"Table",combo:"mod+a",onKeyDown:this.handleSelectAllHotkey}):void 0},t.prototype.updateSelectedRegionAtIndex=function(e,t){var n=this.props,i=n.children,r=n.numRows,o=this.state.selectedRegions,a=c.Children.count(i),s=Math.max(0,r-1),l=Math.max(0,a-1),u=y.clampRegion(e,s,l),h=y.update(o,u,t);this.handleSelection(h)},t.prototype.moveFocusCell=function(e,t,n,i,r){var o=this.state.selectedRegions,a="row"===e?"rows":"cols",s="row"===t?"rows":"cols",c=n?-1:1,l=n?1:0;if((i[e]+=c,n?i[e]<r[a][0]:i[e]>r[a][1])&&(i[e]=r[a][l],i[t]+=c,n?i[t]<r[s][0]:i[t]>r[s][1])){var u=i.focusSelectionIndex+c;(n?u<0:u>=o.length)&&(u=n?o.length-1:0);var h=y.getCellRegionFromRegion(o[u],this.grid.numRows,this.grid.numCols);i={col:h.cols[l],focusSelectionIndex:u,row:h.rows[l]}}return i},t.prototype.shouldDisableVerticalScroll=function(){var e=this.props.enableGhostCells,t=this.state.viewportRect,n=this.grid.getRowIndicesInRect(t,e),i=null!=t&&0===t.top,r=this.hasLoadingOption(this.props.loadingOptions,_.ROW_HEADERS);return e&&this.grid.isGhostIndex(n.rowIndexEnd,0)&&(i||r)},t.prototype.shouldDisableHorizontalScroll=function(){var e=this.props.enableGhostCells,t=this.state.viewportRect,n=this.grid.getColumnIndicesInRect(t,e),i=null!=t&&0===t.left,r=e&&this.grid.isGhostColumn(n.columnIndexEnd),o=this.hasLoadingOption(this.props.loadingOptions,_.COLUMN_HEADERS);return r&&(i||o)},t.prototype.getColumnProps=function(e){var t=this.state.childrenArray[e];return void 0===t?void 0:t.props},t.prototype.isGuidesShowing=function(){return null!=this.state.verticalGuides||null!=this.state.horizontalGuides},t.prototype.getEnabledSelectionHandler=function(e){return n.isSelectionModeEnabled(this.props,e)?this.handleSelection:this.clearSelection},t.prototype.invalidateGrid=function(){this.grid=null},t.prototype.validateGrid=function(){if(null==this.grid){var e=this.props,t=e.defaultRowHeight,n=e.defaultColumnWidth,i=this.state,r=i.rowHeights,o=i.columnWidths;this.grid=new A(r,o,A.DEFAULT_BLEED,t,n),this.invokeOnVisibleCellsChangeCallback(this.state.viewportRect)}},t.prototype.maybeRenderRegions=function(e,t){if(!this.isGuidesShowing()||this.state.isReordering)return y.joinStyledRegionGroups(this.state.selectedRegions,this.props.styledRegionGroups,this.state.focusedCell).map((function(n,i){var r=n.regions.map((function(n){return e(n,t)}));return c.createElement(ne,{className:s()(n.className),key:i,regions:n.regions,regionStyles:r})}))},t.prototype.syncViewportPosition=function(e){var t=e.nextScrollLeft,n=e.nextScrollTop,i=this.state.viewportRect;if(void 0!==t||void 0!==n){if(void 0!==n){var r=this.shouldDisableVerticalScroll()?0:this.columnHeaderElement.clientHeight;this.scrollContainerElement.scrollTop=n+r}if(void 0!==t){var o=this.shouldDisableHorizontalScroll()||null==this.rowHeaderElement?0:this.rowHeaderElement.clientWidth;this.scrollContainerElement.scrollLeft=t+o}var a=new E.a(t,n,i.width,i.height);this.updateViewportRect(a)}},t.prototype.updateLocator=function(){this.locator.setGrid(this.grid).setNumFrozenRows(this.state.numFrozenRowsClamped).setNumFrozenColumns(this.state.numFrozenColumnsClamped)},t.prototype.invokeOnVisibleCellsChangeCallback=function(e){var t=this.grid.getColumnIndicesInRect(e),n=this.grid.getRowIndicesInRect(e);o.Utils.safeInvoke(this.props.onVisibleCellsChange,n,t)},t.prototype.getNormalizedRenderMode=function(){var e=this.props.renderMode;return e===C.BATCH||e===C.BATCH_ON_UPDATE&&this.didCompletelyMount?C.BATCH:C.NONE},t.prototype.resolveResizeRowsByApproximateHeightOptions=function(e,t,i){return Object.keys(n.resizeRowsByApproximateHeightDefaults).reduce((function(r,a){return r[a]=null!=e&&null!=e[a]?o.Utils.safeInvokeOrValue(e[a],t,i):n.resizeRowsByApproximateHeightDefaults[a],r}),{})},t.displayName=o.DISPLAYNAME_PREFIX+".Table",t.defaultProps={defaultColumnWidth:150,defaultRowHeight:20,enableFocusedCell:!1,enableGhostCells:!1,enableMultipleSelection:!0,enableRowHeader:!0,forceRerenderOnSelectionChange:!1,loadingOptions:[],minColumnWidth:50,minRowHeight:20,numFrozenColumns:0,numFrozenRows:0,numRows:0,renderMode:C.BATCH_ON_UPDATE,rowHeaderCellRenderer:Q,selectionModes:b.ALL},t.childContextTypes=f,t.resizeRowsByApproximateHeightDefaults={getApproximateCharWidth:8,getApproximateLineHeight:18,getCellHorizontalPadding:2*ie.a.CELL_HORIZONTAL_PADDING,getNumBufferLines:1},t.SHALLOW_COMPARE_PROP_KEYS_DENYLIST=["selectedRegions"],t.SHALLOW_COMPARE_STATE_KEYS_DENYLIST=["selectedRegions","viewportRect"],t=n=Object(r.b)([o.HotkeysTarget,l.polyfill],t)}(o.AbstractComponent2);function we(e){return Ce(e.numFrozenColumns,c.Children.count(e.children))}function Oe(e){return Ce(e.numFrozenRows,e.numRows)}function Ce(e,t){return null==e?0:m.b.clamp(e,0,t)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return v}));var i={},r={};function o(e){return new Function("d","return {"+e.map((function(e,t){return JSON.stringify(e)+": d["+t+'] || ""'})).join(",")+"}")}function a(e){var t=Object.create(null),n=[];return e.forEach((function(e){for(var i in e)i in t||n.push(t[i]=i)})),n}function s(e,t){var n=e+"",i=n.length;return i<t?new Array(t-i+1).join(0)+n:n}function c(e){var t,n=e.getUTCHours(),i=e.getUTCMinutes(),r=e.getUTCSeconds(),o=e.getUTCMilliseconds();return isNaN(e)?"Invalid Date":((t=e.getUTCFullYear())<0?"-"+s(-t,6):t>9999?"+"+s(t,6):s(t,4))+"-"+s(e.getUTCMonth()+1,2)+"-"+s(e.getUTCDate(),2)+(o?"T"+s(n,2)+":"+s(i,2)+":"+s(r,2)+"."+s(o,3)+"Z":r?"T"+s(n,2)+":"+s(i,2)+":"+s(r,2)+"Z":i||n?"T"+s(n,2)+":"+s(i,2)+"Z":"")}var l=function(e){var t=new RegExp('["'+e+"\n\r]"),n=e.charCodeAt(0);function s(e,t){var o,a=[],s=e.length,c=0,l=0,u=s<=0,h=!1;function d(){if(u)return r;if(h)return h=!1,i;var t,o,a=c;if(34===e.charCodeAt(a)){for(;c++<s&&34!==e.charCodeAt(c)||34===e.charCodeAt(++c););return(t=c)>=s?u=!0:10===(o=e.charCodeAt(c++))?h=!0:13===o&&(h=!0,10===e.charCodeAt(c)&&++c),e.slice(a+1,t-1).replace(/""/g,'"')}for(;c<s;){if(10===(o=e.charCodeAt(t=c++)))h=!0;else if(13===o)h=!0,10===e.charCodeAt(c)&&++c;else if(o!==n)continue;return e.slice(a,t)}return u=!0,e.slice(a,s)}for(10===e.charCodeAt(s-1)&&--s,13===e.charCodeAt(s-1)&&--s;(o=d())!==r;){for(var f=[];o!==i&&o!==r;)f.push(o),o=d();t&&null==(f=t(f,l++))||a.push(f)}return a}function l(t,n){return t.map((function(t){return n.map((function(e){return h(t[e])})).join(e)}))}function u(t){return t.map(h).join(e)}function h(e){return null==e?"":e instanceof Date?c(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function(e,t){var n,i,r=s(e,(function(e,r){if(n)return n(e,r-1);i=e,n=t?function(e,t){var n=o(e);return function(i,r){return t(n(i),r,e)}}(e,t):o(e)}));return r.columns=i||[],r},parseRows:s,format:function(t,n){return null==n&&(n=a(t)),[n.map(h).join(e)].concat(l(t,n)).join("\n")},formatBody:function(e,t){return null==t&&(t=a(e)),l(e,t).join("\n")},formatRows:function(e){return e.map(u).join("\n")},formatRow:u,formatValue:h}},u=l(","),h=u.parse,d=(u.parseRows,u.format,u.formatBody,u.formatRows,u.formatRow,u.formatValue,l("\t")),f=d.parse;d.parseRows,d.format,d.formatBody,d.formatRows,d.formatRow,d.formatValue;function p(e){if(!e.ok)throw new Error(e.status+" "+e.statusText);return e.text()}var m=function(e,t){return fetch(e,t).then(p)};function g(e){return function(t,n,i){return 2===arguments.length&&"function"===typeof n&&(i=n,n=void 0),m(t,n).then((function(t){return e(t,i)}))}}var v=g(h);g(f)},function(e,t,n){"use strict";var i="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!==typeof msCrypto&&"function"===typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),r=new Uint8Array(16);function o(){if(!i)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return i(r)}var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var s=function(e){return"string"===typeof e&&a.test(e)},c=[],l=0;l<256;++l)c.push((l+256).toString(16).substr(1));var u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!s(n))throw TypeError("Stringified UUID is invalid");return n};t.a=function(e,t,n){var i=(e=e||{}).random||(e.rng||o)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(var r=0;r<16;++r)t[n+r]=i[r];return t}return u(i)}},function(e,t,n){"use strict";var i=n(68),r=n(15),o=n(16),a="trackEvent",s="trackLink",c="trackSiteSearch",l="trackPageView",u="trackEcommerceOrder",h="trackEcommerceCartUpdate",d=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n},f=function(){function e(t){if(Object(r.a)(this,e),!t.urlBase)throw new Error("Matomo urlBase is required.");if(!t.siteId)throw new Error("Matomo siteId is required.");this.initialize(t)}return Object(o.a)(e,[{key:"initialize",value:function(e){var t,n=this,i=e.urlBase,r=e.siteId,o=e.userId,a=e.trackerUrl,s=e.srcUrl,c=e.disabled,l=e.heartBeat,u=e.linkTracking,h=void 0===u||u,d=e.configurations,f=void 0===d?{}:d,p="/"!==i[i.length-1]?"".concat(i,"/"):i;if("undefined"!==typeof window&&(window._paq=window._paq||[],0===window._paq.length&&!c)){this.pushInstruction("setTrackerUrl",null!==a&&void 0!==a?a:"".concat(p,"matomo.php")),this.pushInstruction("setSiteId",r),o&&this.pushInstruction("setUserId",o),Object.entries(f).forEach((function(e){n.pushInstruction(e[0],e[1])})),(!l||l&&l.active)&&this.enableHeartBeatTimer(null!==(t=l&&l.seconds)&&void 0!==t?t:15),this.enableLinkTracking(h);var m=document,g=m.createElement("script"),v=m.getElementsByTagName("script")[0];g.type="text/javascript",g.async=!0,g.defer=!0,g.src=s||"".concat(p,"matomo.js"),v&&v.parentNode&&v.parentNode.insertBefore(g,v)}}},{key:"enableHeartBeatTimer",value:function(e){this.pushInstruction("enableHeartBeatTimer",e)}},{key:"enableLinkTracking",value:function(e){this.pushInstruction("enableLinkTracking",e)}},{key:"trackEventsForElements",value:function(e){var t=this;e.length&&e.forEach((function(e){e.addEventListener("click",(function(){var n=e.dataset,i=n.matomoCategory,r=n.matomoAction,o=n.matomoName,a=n.matomoValue;if(!i||!r)throw new Error("Error: data-matomo-category and data-matomo-action are required.");t.trackEvent({category:i,action:r,name:o,value:Number(a)})}))}))}},{key:"trackEvents",value:function(){var e=this,t='[data-matomo-event="click"]',n=!1;if(this.mutationObserver||(n=!0,this.mutationObserver=new MutationObserver((function(n){n.forEach((function(n){n.addedNodes.forEach((function(n){if(n instanceof HTMLElement){n.matches(t)&&e.trackEventsForElements([n]);var i=Array.from(n.querySelectorAll(t));e.trackEventsForElements(i)}}))}))}))),this.mutationObserver.observe(document,{childList:!0,subtree:!0}),n){var i=Array.from(document.querySelectorAll(t));this.trackEventsForElements(i)}}},{key:"stopObserving",value:function(){this.mutationObserver&&this.mutationObserver.disconnect()}},{key:"trackEvent",value:function(e){var t=e.category,n=e.action,i=e.name,r=e.value,o=d(e,["category","action","name","value"]);if(!t||!n)throw new Error("Error: category and action are required.");this.track(Object.assign({data:[a,t,n,i,r]},o))}},{key:"trackSiteSearch",value:function(e){var t=e.keyword,n=e.category,i=e.count,r=d(e,["keyword","category","count"]);if(!t)throw new Error("Error: keyword is required.");this.track(Object.assign({data:[c,t,n,i]},r))}},{key:"trackLink",value:function(e){var t=e.href,n=e.linkType,i=void 0===n?"link":n;this.pushInstruction(s,t,i)}},{key:"trackPageView",value:function(e){this.track(Object.assign({data:[l]},e))}},{key:"addEcommerceItem",value:function(e){var t=e.sku,n=e.productName,i=e.productCategory,r=e.productPrice,o=void 0===r?0:r,a=e.productQuantity,s=void 0===a?1:a;this.pushInstruction("addEcommerceItem",t,n,i,o,s)}},{key:"trackEcommerceOrder",value:function(e){var t=e.orderId,n=e.orderRevenue,i=e.orderSubTotal,r=e.taxAmount,o=e.shippingAmount,a=e.discountOffered,s=void 0!==a&&a;this.track({data:[u,t,n,i,r,o,s]})}},{key:"trackEcommerceCartUpdate",value:function(e){this.pushInstruction(h,e)}},{key:"setEcommerceView",value:function(e){var t=e.sku,n=e.productName,i=e.productCategory,r=e.productPrice;this.pushInstruction("setEcommerceView",t,n,i,r)}},{key:"setEcommerceCategoryView",value:function(e){this.setEcommerceView({productCategory:e,productName:!1,sku:!1})}},{key:"track",value:function(e){var t=this,n=e.data,r=void 0===n?[]:n,o=e.documentTitle,a=void 0===o?window.document.title:o,s=e.href,c=void 0===s?window.location.href:s,l=e.customDimensions,u=void 0!==l&&l;r.length&&(u&&Array.isArray(u)&&u.length&&u.map((function(e){return t.pushInstruction("setCustomDimension",e.id,e.value)})),this.pushInstruction("setCustomUrl",c),this.pushInstruction("setDocumentTitle",a),this.pushInstruction.apply(this,Object(i.a)(r)))}},{key:"pushInstruction",value:function(e){if("undefined"!==typeof window){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];window._paq.push([e].concat(n))}return this}}]),e}();t.a=function(e){return new f(e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return w}));var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return(o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function a(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}var s=n(17),c=n.n(s),l=n(2),u=n(5),h=n(251),d=n(387),f=n(388),p=n(389),m=function(e){function t(t,n){var i,r=e.call(this,t,n)||this;r.refHandlers={itemsParent:function(e){return r.itemsParentRef=e}},r.shouldCheckActiveItemInViewport=!1,r.expectedNextActiveItem=null,r.isEnterKeyPressed=!1,r.renderItemList=function(e){var t=r.props,n=t.initialContent,i=t.noResults,o=r.isCreateItemRendered()?null:i,a=Object(d.a)(e,o,n),s=r.isCreateItemRendered()?r.renderCreateItemMenuItem(r.state.query.trim()):null;return null==a&&null==s?null:l.createElement(u.Menu,{ulRef:e.itemsParentRef},a,s)},r.renderItem=function(e,t){if(!0!==r.props.disabled){var n=r.state,i=n.activeItem,o=n.query,a=r.state.filteredItems.indexOf(e)>=0,s={active:Object(f.a)(r.props.itemsEqual,Object(p.a)(i),e),disabled:b(e,t,r.props.itemDisabled),matchesPredicate:a};return r.props.itemRenderer(e,{handleClick:function(t){return r.handleItemSelect(e,t)},index:t,modifiers:s,query:o})}return null},r.renderCreateItemMenuItem=function(e){var t=r.state.activeItem,n=Object(p.c)(t);return u.Utils.safeInvoke(r.props.createNewItemRenderer,e,n,(function(t){r.handleItemCreate(e,t)}))},r.handleItemCreate=function(e,t){var n=u.Utils.safeInvoke(r.props.createNewItemFromQuery,e);null!=n&&(u.Utils.safeInvoke(r.props.onItemSelect,n,t),r.maybeResetQuery())},r.handleItemSelect=function(e,t){r.setActiveItem(e),u.Utils.safeInvoke(r.props.onItemSelect,e,t),r.maybeResetQuery()},r.handlePaste=function(e){for(var t,n=r.props,i=n.createNewItemFromQuery,o=n.onItemsPaste,a=[],s=[],c=0,l=e;c<l.length;c++){var h=l[c],d=v(h,r.props);if(void 0!==d)t=d,s.push(d);else if(r.canCreateItems()){var f=u.Utils.safeInvoke(i,h);void 0!==f&&s.push(f)}else a.push(h)}r.setQuery(a.join(", "),!1),void 0!==t&&r.setActiveItem(t),u.Utils.safeInvoke(o,s)},r.handleKeyDown=function(e){var t=e.keyCode;if(t===u.Keys.ARROW_UP||t===u.Keys.ARROW_DOWN){e.preventDefault();var n=r.getNextActiveItem(t===u.Keys.ARROW_UP?-1:1);null!=n&&r.setActiveItem(n)}else t===u.Keys.ENTER&&(r.isEnterKeyPressed=!0);u.Utils.safeInvoke(r.props.onKeyDown,e)},r.handleKeyUp=function(e){var t=r.props.onKeyUp,n=r.state.activeItem;e.keyCode===u.Keys.ENTER&&r.isEnterKeyPressed&&(e.preventDefault(),null==n||Object(p.c)(n)?r.handleItemCreate(r.state.query,e):r.handleItemSelect(n,e),r.isEnterKeyPressed=!1),u.Utils.safeInvoke(t,e)},r.handleInputQueryChange=function(e){var t=null==e?"":e.target.value;r.setQuery(t),u.Utils.safeInvoke(r.props.onQueryChange,t,e)};var o=t.query,a=void 0===o?"":o,s=u.Utils.safeInvoke(t.createNewItemFromQuery,a),c=_(a,t);return r.state={activeItem:void 0!==t.activeItem?t.activeItem:null!==(i=t.initialActiveItem)&&void 0!==i?i:y(c,t.itemDisabled),createNewItem:s,filteredItems:c,query:a},r}return r(t,e),t.ofType=function(){return t},t.prototype.render=function(){var e=this.props,t=e.className,n=e.items,i=e.renderer,r=e.itemListRenderer,s=void 0===r?this.renderItemList:r,c=this.state,l=(c.createNewItem,a(c,["createNewItem"]));return i(o(o({},l),{className:t,handleItemSelect:this.handleItemSelect,handleKeyDown:this.handleKeyDown,handleKeyUp:this.handleKeyUp,handlePaste:this.handlePaste,handleQueryChange:this.handleInputQueryChange,itemList:s(o(o({},l),{items:n,itemsParentRef:this.refHandlers.itemsParent,renderItem:this.renderItem}))}))},t.prototype.componentDidUpdate=function(e){var t=this;void 0!==this.props.activeItem&&this.props.activeItem!==this.state.activeItem&&(this.shouldCheckActiveItemInViewport=!0,this.setState({activeItem:this.props.activeItem})),null!=this.props.query&&this.props.query!==e.query?this.setQuery(this.props.query,this.props.resetOnQuery,this.props):u.Utils.shallowCompareKeys(this.props,e,{include:["items","itemListPredicate","itemPredicate"]})||this.setQuery(this.state.query),this.shouldCheckActiveItemInViewport&&(requestAnimationFrame((function(){return t.scrollActiveItemIntoView()})),this.shouldCheckActiveItemInViewport=!1)},t.prototype.scrollActiveItemIntoView=function(){var e=!1!==this.props.scrollToActiveItem,t=!Object(f.a)(this.props.itemsEqual,Object(p.a)(this.expectedNextActiveItem),Object(p.a)(this.props.activeItem));if(this.expectedNextActiveItem=null,e||!t){var n=this.getActiveElement();if(null!=this.itemsParentRef&&null!=n){var i=n.offsetTop,r=n.offsetHeight,o=this.itemsParentRef,a=o.offsetTop,s=o.scrollTop,c=o.clientHeight,l=this.getItemsParentPadding(),u=l.paddingTop,h=i+r+l.paddingBottom-a,d=i-u-a;h>=s+c?this.itemsParentRef.scrollTop=h+r-c:d<=s&&(this.itemsParentRef.scrollTop=d-r)}}},t.prototype.setQuery=function(e,t,n){void 0===t&&(t=this.props.resetOnQuery),void 0===n&&(n=this.props);var i=n.createNewItemFromQuery;this.shouldCheckActiveItemInViewport=!0,e!==this.state.query&&u.Utils.safeInvoke(n.onQueryChange,e);var r=e.trim(),o=_(r,n),a=null!=i&&""!==r?i(r):void 0;this.setState({createNewItem:a,filteredItems:o,query:e});var s=this.getActiveIndex(o);(t||s<0||b(Object(p.a)(this.state.activeItem),s,n.itemDisabled))&&this.setActiveItem(y(o,n.itemDisabled))},t.prototype.setActiveItem=function(e){this.expectedNextActiveItem=e,void 0===this.props.activeItem&&(this.shouldCheckActiveItemInViewport=!0,this.setState({activeItem:e})),Object(p.c)(e)?u.Utils.safeInvoke(this.props.onActiveItemChange,null,!0):u.Utils.safeInvoke(this.props.onActiveItemChange,e,!1)},t.prototype.getActiveElement=function(){var e=this.state.activeItem;if(null!=this.itemsParentRef){if(Object(p.c)(e))return this.itemsParentRef.children.item(this.state.filteredItems.length);var t=this.getActiveIndex();return this.itemsParentRef.children.item(t)}},t.prototype.getActiveIndex=function(e){void 0===e&&(e=this.state.filteredItems);var t=this.state.activeItem;if(null==t||Object(p.c)(t))return-1;for(var n=0;n<e.length;++n)if(Object(f.a)(this.props.itemsEqual,e[n],t))return n;return-1},t.prototype.getItemsParentPadding=function(){var e=getComputedStyle(this.itemsParentRef),t=e.paddingTop;return{paddingBottom:g(e.paddingBottom),paddingTop:g(t)}},t.prototype.getNextActiveItem=function(e,t){if((void 0===t&&(t=this.getActiveIndex()),this.isCreateItemRendered())&&(0===t&&-1===e||t===this.state.filteredItems.length-1&&1===e))return Object(p.b)();return y(this.state.filteredItems,this.props.itemDisabled,e,t)},t.prototype.isCreateItemRendered=function(){return this.canCreateItems()&&""!==this.state.query&&!this.wouldCreatedItemMatchSomeExistingItem()},t.prototype.canCreateItems=function(){return null!=this.props.createNewItemFromQuery&&null!=this.props.createNewItemRenderer},t.prototype.wouldCreatedItemMatchSomeExistingItem=function(){var e=this;return this.state.filteredItems.some((function(t){return Object(f.a)(e.props.itemsEqual,t,e.state.createNewItem)}))},t.prototype.maybeResetQuery=function(){this.props.resetOnSelect&&this.setQuery("",!0)},t.displayName=u.DISPLAYNAME_PREFIX+".QueryList",t.defaultProps={disabled:!1,resetOnQuery:!0},t}(u.AbstractComponent2);function g(e){return null==e?0:parseInt(e.slice(0,-2),10)}function v(e,t){var n=t.items,i=t.itemPredicate;if(u.Utils.isFunction(i))for(var r=0;r<n.length;r++){var o=n[r];if(i(e,o,r,!0))return o}}function _(e,t){var n=t.items,i=t.itemPredicate,r=t.itemListPredicate;return u.Utils.isFunction(r)?r(e,n):u.Utils.isFunction(i)?n.filter((function(t,n){return i(e,t,n)})):n}function b(e,t,n){return null!=n&&null!=e&&(u.Utils.isFunction(n)?n(e,t):!!e[n])}function y(e,t,n,i){if(void 0===n&&(n=1),void 0===i&&(i=e.length-1),0===e.length)return null;var r,o,a,s=i,c=e.length-1;do{if(a=c,!b(e[s=(r=s+n)<(o=0)?a:r>a?o:r],s,t))return e[s]}while(s!==i&&-1!==i);return null}var w=function(e){function t(){var t,n=e.apply(this,arguments)||this;return n.state={isOpen:!1},n.TypedQueryList=m.ofType(),n.inputEl=null,n.queryList=null,n.refHandlers={input:Object(u.isRefObject)(null===(t=n.props.inputProps)||void 0===t?void 0:t.inputRef)?n.inputEl=n.props.inputProps.inputRef:function(e){var t,i;n.inputEl=e,null===(i=null===(t=n.props.inputProps)||void 0===t?void 0:t.inputRef)||void 0===i||i(e)},queryList:function(e){return n.queryList=e}},n.renderQueryList=function(e){var t=n.props,i=t.filterable,r=void 0===i||i,a=t.disabled,s=void 0!==a&&a,d=t.inputProps,f=void 0===d?{}:d,p=t.popoverProps,m=void 0===p?{}:p,g=l.createElement(u.InputGroup,o({leftIcon:"search",placeholder:"Filter...",rightElement:n.maybeRenderClearButton(e.query)},f,{inputRef:n.refHandlers.input,onChange:e.handleQueryChange,value:e.query})),v=e.handleKeyDown,_=e.handleKeyUp;return l.createElement(u.Popover,o({autoFocus:!1,enforceFocus:!1,isOpen:n.state.isOpen,disabled:s,position:u.Position.BOTTOM_LEFT},m,{className:c()(e.className,m.className),onInteraction:n.handlePopoverInteraction,popoverClassName:c()(h.Classes.SELECT_POPOVER,m.popoverClassName),onOpening:n.handlePopoverOpening,onOpened:n.handlePopoverOpened,onClosing:n.handlePopoverClosing}),l.createElement("div",{onKeyDown:n.state.isOpen?v:n.handleTargetKeyDown,onKeyUp:n.state.isOpen?_:void 0},n.props.children),l.createElement("div",{onKeyDown:v,onKeyUp:_},r?g:void 0,e.itemList))},n.handleTargetKeyDown=function(e){e.which!==u.Keys.ARROW_UP&&e.which!==u.Keys.ARROW_DOWN||(e.preventDefault(),n.setState({isOpen:!0}))},n.handleItemSelect=function(e,t){n.setState({isOpen:!1}),u.Utils.safeInvoke(n.props.onItemSelect,e,t)},n.handlePopoverInteraction=function(e){n.setState({isOpen:e}),u.Utils.safeInvokeMember(n.props.popoverProps,"onInteraction",e)},n.handlePopoverOpening=function(e){n.previousFocusedElement=document.activeElement,n.props.resetOnClose&&n.resetQuery(),u.Utils.safeInvokeMember(n.props.popoverProps,"onOpening",e)},n.handlePopoverOpened=function(e){null!=n.queryList&&n.queryList.scrollActiveItemIntoView(),requestAnimationFrame((function(){var e=n.props.inputProps;!1!==(void 0===e?{}:e).autoFocus&&null!=n.inputEl&&Object(u.getRef)(n.inputEl).focus()})),u.Utils.safeInvokeMember(n.props.popoverProps,"onOpened",e)},n.handlePopoverClosing=function(e){requestAnimationFrame((function(){void 0!==n.previousFocusedElement&&(n.previousFocusedElement.focus(),n.previousFocusedElement=void 0)})),u.Utils.safeInvokeMember(n.props.popoverProps,"onClosing",e)},n.resetQuery=function(){return n.queryList&&n.queryList.setQuery("",!0)},n}return r(t,e),t.ofType=function(){return t},t.prototype.render=function(){var e=this.props,t=(e.filterable,e.inputProps,e.popoverProps,a(e,["filterable","inputProps","popoverProps"]));return l.createElement(this.TypedQueryList,o({},t,{onItemSelect:this.handleItemSelect,ref:this.refHandlers.queryList,renderer:this.renderQueryList}))},t.prototype.componentDidUpdate=function(e,t){this.state.isOpen&&!t.isOpen&&null!=this.queryList&&this.queryList.scrollActiveItemIntoView()},t.prototype.maybeRenderClearButton=function(e){return e.length>0?l.createElement(u.Button,{icon:"cross",minimal:!0,onClick:this.resetQuery}):void 0},t.displayName=u.DISPLAYNAME_PREFIX+".Select",t}(l.PureComponent)},function(e,t,n){"use strict";var i=n(2),r=n(210),o=function(e){var t=function(t){var n=t.target;if(n instanceof HTMLAnchorElement){var i=n.href;i.match(new RegExp("^(http://www.|https://www.|http://|https://)+(".concat(window.location.hostname,")")))||e.trackLink({href:i})}};Object(i.useEffect)((function(){return window.document.addEventListener("click",t),function(){return window.document.removeEventListener("click",t)}}),[])};t.a=function(){var e=Object(i.useContext)(r.a),t=Object(i.useCallback)((function(t){return null===e||void 0===e?void 0:e.trackPageView(t)}),[e]);return{trackEvent:Object(i.useCallback)((function(t){return null===e||void 0===e?void 0:e.trackEvent(t)}),[e]),trackEvents:Object(i.useCallback)((function(){return null===e||void 0===e?void 0:e.trackEvents()}),[e]),trackPageView:t,trackSiteSearch:Object(i.useCallback)((function(t){return null===e||void 0===e?void 0:e.trackSiteSearch(t)}),[e]),trackLink:Object(i.useCallback)((function(t){return null===e||void 0===e?void 0:e.trackLink(t)}),[e]),enableLinkTracking:Object(i.useCallback)((function(){e&&o(e)}),[e]),pushInstruction:Object(i.useCallback)((function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];null===e||void 0===e||e.pushInstruction.apply(e,[t].concat(i))}),[e])}}}]]); +//# sourceMappingURL=2.7342eb6f.chunk.js.map \ No newline at end of file diff --git a/cate/webapi/app/static/js/2.7342eb6f.chunk.js.LICENSE.txt b/cate/webapi/app/static/js/2.7342eb6f.chunk.js.LICENSE.txt new file mode 100644 index 000000000..39785f0a8 --- /dev/null +++ b/cate/webapi/app/static/js/2.7342eb6f.chunk.js.LICENSE.txt @@ -0,0 +1,502 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */ + +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ + +/*! + * Autolinker.js + * 3.11.0 + * + * Copyright(c) 2019 Gregory Jacobs <greg@greg-jacobs.com> + * MIT License + * + * https://github.com/gregjacobs/Autolinker.js + */ + +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh <https://feross.org> + * @license MIT + */ + +/*! + * JavaScript Cookie v2.2.1 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ + +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org> + * @license MIT + */ + +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh <http://feross.org> + * @license MIT + */ + +/*! + * protobuf.js v6.7.0 (c) 2016, Daniel Wirtz + * Compiled Wed, 22 Mar 2017 17:30:26 UTC + * Licensed under the BSD-3-Clause License + * see: https://github.com/dcodeIO/protobuf.js for details + */ + +/*! + * repeat-string <https://github.com/jonschlinkert/repeat-string> + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +/*! +Copyright (C) 2013-2015 by Andrea Giammarchi - @WebReflection + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +/*! NoSleep.js v0.9.0 - git.io/vfn01 - Rich Tibbett - MIT license */ + +/*! https://mths.be/punycode v1.4.1 by @mathias */ + +/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ + +/** + @license + when.js - https://github.com/cujojs/when + + MIT License (c) copyright B Cavalier & J Hann + + * A lightweight CommonJS Promises/A and when() implementation + * when is part of the cujo.js family of libraries (http://cujojs.com/) + * + * Licensed under the MIT License at: + * http://www.opensource.org/licenses/mit-license.php + * + * @version 1.7.1 + */ + +/** + * @license + * + * Grauw URI utilities + * + * See: http://hg.grauw.nl/grauw-lib/file/tip/src/uri.js + * + * @author Laurens Holst (http://www.grauw.nl/) + * + * Copyright 2012 Laurens Holst + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/** + * @license + * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of the project 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 OWNER 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. + * + * Modifications made by Cesium GS, Inc. + */ + +/** +@license + Copyright (c) 2013 Gildas Lormeau. All rights reserved. + + 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. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 JCRAFT, + INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE 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. +**/ + +/** +@license +mersenne-twister.js - https://gist.github.com/banksean/300494 + + Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, + All rights reserved. + + 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. The names of its contributors may not 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 OWNER 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. +*/ + +/** +@license +sprintf.js from the php.js project - https://github.com/kvz/phpjs +Directly from https://github.com/kvz/phpjs/blob/master/functions/strings/sprintf.js + +php.js is copyright 2012 Kevin van Zonneveld. + +Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld +(http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White +(http://getsprink.com), Waldo Malqui Silva, Paulo Freitas, Jack, Jonas +Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Legaev +Andrey, Ates Goral (http://magnetiq.com), Alex, Ratheous, Martijn Wieringa, +Rafa? Kukawski (http://blog.kukawski.pl), lmeyrick +(https://sourceforge.net/projects/bcmath-js/), Nate, Philippe Baumann, +Enrique Gonzalez, Webtoolkit.info (http://www.webtoolkit.info/), Carlos R. +L. Rodrigues (http://www.jsfromhell.com), Ash Searle +(http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek, +Erkekjetter, Michael Grier, Rafa? Kukawski (http://kukawski.pl), Johnny +Mast (http://www.phpvrouwen.nl), T.Wild, d3x, +http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript, +Rafa? Kukawski (http://blog.kukawski.pl/), stag019, pilus, WebDevHobo +(http://webdevhobo.blogspot.com/), marrtins, GeekFG +(http://geekfg.blogspot.com), Andrea Giammarchi +(http://webreflection.blogspot.com), Arpad Ray (mailto:arpad@php.net), +gorthaur, Paul Smith, Tim de Koning (http://www.kingsquare.nl), Joris, Oleg +Eremeev, Steve Hilder, majak, gettimeofday, KELAN, Josh Fraser +(http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/), +Marc Palau, Martin +(http://www.erlenwiese.de/), Breaking Par Consulting Inc +(http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7), +Chris, Mirek Slugen, saulius, Alfonso Jimenez +(http://www.alfonsojimenez.com), Diplom@t (http://difane.com/), felix, +Mailfaker (http://www.weedem.fr/), Tyler Akins (http://rumkin.com), Caio +Ariede (http://caioariede.com), Robin, Kankrelune +(http://www.webfaktory.info/), Karol Kowalski, Imgen Tata +(http://www.myipdf.com/), mdsjack (http://www.mdsjack.bo.it), Dreamer, +Felix Geisendoerfer (http://www.debuggable.com/felix), Lars Fischer, AJ, +David, Aman Gupta, Michael White, Public Domain +(http://www.json.org/json2.js), Steven Levithan +(http://blog.stevenlevithan.com), Sakimori, Pellentesque Malesuada, +Thunder.m, Dj (http://phpjs.org/functions/htmlentities:425#comment_134018), +Steve Clay, David James, Francois, class_exists, nobbler, T. Wild, Itsacon +(http://www.itsacon.net/), date, Ole Vrijenhoek (http://www.nervous.nl/), +Fox, Raphael (Ao RUDLER), Marco, noname, Mateusz "loonquawl" Zalega, Frank +Forte, Arno, ger, mktime, john (http://www.jd-tech.net), Nick Kolosov +(http://sammy.ru), marc andreu, Scott Cariss, Douglas Crockford +(http://javascript.crockford.com), madipta, Slawomir Kaniecki, +ReverseSyntax, Nathan, Alex Wilson, kenneth, Bayron Guevara, Adam Wallner +(http://web2.bitbaro.hu/), paulo kuong, jmweb, Lincoln Ramsay, djmix, +Pyerre, Jon Hohle, Thiago Mata (http://thiagomata.blog.com), lmeyrick +(https://sourceforge.net/projects/bcmath-js/this.), Linuxworld, duncan, +Gilbert, Sanjoy Roy, Shingo, sankai, Oskar Larsson H?gfeldt +(http://oskar-lh.name/), Denny Wardhana, 0m3r, Everlasto, Subhasis Deb, +josh, jd, Pier Paolo Ramon (http://www.mastersoup.com/), P, merabi, Soren +Hansen, Eugene Bulkin (http://doubleaw.com/), Der Simon +(http://innerdom.sourceforge.net/), echo is bad, Ozh, XoraX +(http://www.xorax.info), EdorFaus, JB, J A R, Marc Jansen, Francesco, LH, +Stoyan Kyosev (http://www.svest.org/), nord_ua, omid +(http://phpjs.org/functions/380:380#comment_137122), Brad Touesnard, MeEtc +(http://yass.meetcweb.com), Peter-Paul Koch +(http://www.quirksmode.org/js/beat.html), Olivier Louvignes +(http://mg-crea.com/), T0bsn, Tim Wiel, Bryan Elliott, Jalal Berrami, +Martin, JT, David Randall, Thomas Beaucourt (http://www.webapp.fr), taith, +vlado houba, Pierre-Luc Paour, Kristof Coomans (SCK-CEN Belgian Nucleair +Research Centre), Martin Pool, Kirk Strobeck, Rick Waldron, Brant Messenger +(http://www.brantmessenger.com/), Devan Penner-Woelk, Saulo Vallory, Wagner +B. Soares, Artur Tchernychev, Valentina De Rosa, Jason Wong +(http://carrot.org/), Christoph, Daniel Esteban, strftime, Mick@el, rezna, +Simon Willison (http://simonwillison.net), Anton Ongson, Gabriel Paderni, +Marco van Oort, penutbutterjelly, Philipp Lenssen, Bjorn Roesbeke +(http://www.bjornroesbeke.be/), Bug?, Eric Nagel, Tomasz Wesolowski, +Evertjan Garretsen, Bobby Drake, Blues (http://tech.bluesmoon.info/), Luke +Godfrey, Pul, uestla, Alan C, Ulrich, Rafal Kukawski, Yves Sucaet, +sowberry, Norman "zEh" Fuchs, hitwork, Zahlii, johnrembo, Nick Callen, +Steven Levithan (stevenlevithan.com), ejsanders, Scott Baker, Brian Tafoya +(http://www.premasolutions.com/), Philippe Jausions +(http://pear.php.net/user/jausions), Aidan Lister +(http://aidanlister.com/), Rob, e-mike, HKM, ChaosNo1, metjay, strcasecmp, +strcmp, Taras Bogach, jpfle, Alexander Ermolaev +(http://snippets.dzone.com/user/AlexanderErmolaev), DxGx, kilops, Orlando, +dptr1988, Le Torbi, James (http://www.james-bell.co.uk/), Pedro Tainha +(http://www.pedrotainha.com), James, Arnout Kazemier +(http://www.3rd-Eden.com), Chris McMacken, gabriel paderni, Yannoo, +FGFEmperor, baris ozdil, Tod Gentille, Greg Frazier, jakes, 3D-GRAF, Allan +Jensen (http://www.winternet.no), Howard Yeend, Benjamin Lupton, davook, +daniel airton wermann (http://wermann.com.br), Atli T¨®r, Maximusya, Ryan +W Tenney (http://ryan.10e.us), Alexander M Beedie, fearphage +(http://http/my.opera.com/fearphage/), Nathan Sepulveda, Victor, Matteo, +Billy, stensi, Cord, Manish, T.J. Leahy, Riddler +(http://www.frontierwebdev.com/), Rafa? Kukawski, FremyCompany, Matt +Bradley, Tim de Koning, Luis Salazar (http://www.freaky-media.com/), Diogo +Resende, Rival, Andrej Pavlovic, Garagoth, Le Torbi +(http://www.letorbi.de/), Dino, Josep Sanz (http://www.ws3.es/), rem, +Russell Walker (http://www.nbill.co.uk/), Jamie Beck +(http://www.terabit.ca/), setcookie, Michael, YUI Library: +http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Blues at +http://hacks.bluesmoon.info/strftime/strftime.js, Ben +(http://benblume.co.uk/), DtTvB +(http://dt.in.th/2008-09-16.string-length-in-bytes.html), Andreas, William, +meo, incidence, Cagri Ekin, Amirouche, Amir Habibi +(http://www.residence-mixte.com/), Luke Smith (http://lucassmith.name), +Kheang Hok Chin (http://www.distantia.ca/), Jay Klehr, Lorenzo Pisani, +Tony, Yen-Wei Liu, Greenseed, mk.keck, Leslie Hoare, dude, booeyOH, Ben +Bryan + +Licensed under the MIT (MIT-LICENSE.txt) license. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** +@license +topojson - https://github.com/topojson/topojson + +Copyright (c) 2012-2016, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* 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. + +* The name Michael Bostock may not 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 MICHAEL BOSTOCK 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. +**/ + +/** +@license +tween.js - https://github.com/sole/tween.js + +Copyright (c) 2010-2012 Tween.js authors. + +Easing equations Copyright (c) 2001 Robert Penner http://robertpenner.com/easing/ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +/** @license React v0.19.1 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.14.0 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.14.0 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.16.1 + * @license + * Copyright (c) 2016 Federico Zivolo and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ diff --git a/cate/webapi/app/static/js/2.7342eb6f.chunk.js.map b/cate/webapi/app/static/js/2.7342eb6f.chunk.js.map new file mode 100644 index 000000000..5880f5860 --- /dev/null +++ b/cate/webapi/app/static/js/2.7342eb6f.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../node_modules/cesium/Source/Core/defined.js","../node_modules/cesium/Source/Core/defaultValue.js","../node_modules/react/index.js","../node_modules/cesium/Source/Core/DeveloperError.js","../node_modules/cesium/Source/Core/Check.js","../../../src/index.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../src/common/index.ts","../node_modules/@blueprintjs/core/node_modules/tslib/tslib.es6.js","../node_modules/cesium/Source/ThirdParty/when.js","../node_modules/cesium/Source/Core/RuntimeError.js","../node_modules/cesium/Source/Core/Event.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/classnames/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/cesium/Source/Core/Resource.js","../../../src/common/classes.ts","../node_modules/cesium/Source/ThirdParty/mersenne-twister.js","../node_modules/cesium/Source/Core/Math.js","../node_modules/cesium/Source/Core/Cartesian3.js","../node_modules/cesium/Source/Core/scaleToGeodeticSurface.js","../node_modules/cesium/Source/Core/Cartographic.js","../node_modules/cesium/Source/Core/Ellipsoid.js","../node_modules/cesium/Source/Core/GeographicProjection.js","../node_modules/cesium/Source/Core/Intersect.js","../node_modules/cesium/Source/Core/Interval.js","../node_modules/cesium/Source/Core/Matrix3.js","../node_modules/cesium/Source/Core/Cartesian4.js","../node_modules/cesium/Source/Core/Matrix4.js","../node_modules/cesium/Source/Core/Rectangle.js","../node_modules/cesium/Source/Core/BoundingSphere.js","../node_modules/cesium/Source/Core/buildModuleUrl.js","../node_modules/cesium/Source/Core/Cartesian2.js","../node_modules/cesium/Source/Core/GeographicTilingScheme.js","../node_modules/cesium/Source/Core/ApproximateTerrainHeights.js","../node_modules/cesium/Source/ThirdParty/purify.js","../node_modules/cesium/Source/Core/Credit.js","../node_modules/cesium/Source/Core/HeightmapEncoding.js","../node_modules/cesium/Source/Core/AxisAlignedBoundingBox.js","../node_modules/cesium/Source/Core/EllipsoidalOccluder.js","../node_modules/cesium/Source/Core/QuadraticRealPolynomial.js","../node_modules/cesium/Source/Core/CubicRealPolynomial.js","../node_modules/cesium/Source/Core/QuarticRealPolynomial.js","../node_modules/cesium/Source/Core/Ray.js","../node_modules/cesium/Source/Core/IntersectionTests.js","../node_modules/cesium/Source/Core/Plane.js","../node_modules/cesium/Source/Core/binarySearch.js","../node_modules/cesium/Source/Core/EarthOrientationParametersSample.js","../node_modules/cesium/Source/ThirdParty/sprintf.js","../node_modules/cesium/Source/Core/GregorianDate.js","../node_modules/cesium/Source/Core/isLeapYear.js","../node_modules/cesium/Source/Core/LeapSecond.js","../node_modules/cesium/Source/Core/TimeConstants.js","../node_modules/cesium/Source/Core/TimeStandard.js","../node_modules/cesium/Source/Core/JulianDate.js","../node_modules/cesium/Source/Core/EarthOrientationParameters.js","../node_modules/cesium/Source/Core/HeadingPitchRoll.js","../node_modules/cesium/Source/Core/Iau2006XysSample.js","../node_modules/cesium/Source/Core/Iau2006XysData.js","../node_modules/cesium/Source/Core/Fullscreen.js","../node_modules/cesium/Source/Core/FeatureDetection.js","../node_modules/cesium/Source/Core/Quaternion.js","../node_modules/cesium/Source/Core/Transforms.js","../node_modules/cesium/Source/Core/EllipsoidTangentPlane.js","../node_modules/cesium/Source/Core/OrientedBoundingBox.js","../node_modules/cesium/Source/Core/AttributeCompression.js","../node_modules/cesium/Source/Core/WebGLConstants.js","../node_modules/cesium/Source/Core/ComponentDatatype.js","../node_modules/cesium/Source/Core/TerrainQuantization.js","../node_modules/cesium/Source/Core/TerrainEncoding.js","../node_modules/cesium/Source/Core/WebMercatorProjection.js","../node_modules/cesium/Source/Core/HeightmapTessellator.js","../node_modules/cesium/Source/Core/destroyObject.js","../node_modules/cesium/Source/Core/TaskProcessor.js","../node_modules/cesium/Source/Core/TerrainMesh.js","../node_modules/cesium/Source/Core/IndexDatatype.js","../node_modules/cesium/Source/Core/TerrainProvider.js","../node_modules/cesium/Source/Core/HeightmapTerrainData.js","../node_modules/cesium/Source/Core/TileAvailability.js","../node_modules/cesium/Source/Core/formatError.js","../node_modules/cesium/Source/Core/TileProviderError.js","../node_modules/cesium/Source/Core/WebMercatorTilingScheme.js","../node_modules/cesium/Source/Core/ArcGISTiledElevationTerrainProvider.js","../node_modules/cesium/Source/Core/ArcType.js","../node_modules/cesium/Source/Core/arrayFill.js","../node_modules/cesium/Source/Core/arrayRemoveDuplicates.js","../node_modules/cesium/Source/Core/arraySlice.js","../node_modules/cesium/Source/Core/AssociativeArray.js","../node_modules/cesium/Source/Core/barycentricCoordinates.js","../node_modules/cesium/Source/Core/BingMapsApi.js","../node_modules/cesium/Source/Core/BingMapsGeocoderService.js","../node_modules/cesium/Source/Core/BoundingRectangle.js","../node_modules/cesium/Source/Core/GeometryType.js","../node_modules/cesium/Source/Core/Matrix2.js","../node_modules/cesium/Source/Core/PrimitiveType.js","../node_modules/cesium/Source/Core/Geometry.js","../node_modules/cesium/Source/Core/GeometryAttribute.js","../node_modules/cesium/Source/Core/GeometryAttributes.js","../node_modules/cesium/Source/Core/GeometryOffsetAttribute.js","../node_modules/cesium/Source/Core/VertexFormat.js","../node_modules/cesium/Source/Core/BoxGeometry.js","../node_modules/cesium/Source/Core/BoxOutlineGeometry.js","../node_modules/cesium/Source/Core/cancelAnimationFrame.js","../node_modules/cesium/Source/Core/CartographicGeocoderService.js","../node_modules/cesium/Source/Core/Spline.js","../node_modules/cesium/Source/Core/LinearSpline.js","../node_modules/cesium/Source/Core/TridiagonalSystemSolver.js","../node_modules/cesium/Source/Core/HermiteSpline.js","../node_modules/cesium/Source/Core/CatmullRomSpline.js","../node_modules/cesium/Source/Core/getStringFromTypedArray.js","../node_modules/cesium/Source/Core/Intersections2D.js","../node_modules/cesium/Source/Core/QuantizedMeshTerrainData.js","../node_modules/cesium/Source/Core/CesiumTerrainProvider.js","../node_modules/cesium/Source/Core/EllipseGeometryLibrary.js","../node_modules/cesium/Source/Core/GeometryInstance.js","../node_modules/cesium/Source/Core/EncodedCartesian3.js","../node_modules/cesium/Source/Core/Tipsify.js","../node_modules/cesium/Source/Core/GeometryPipeline.js","../node_modules/cesium/Source/Core/EllipseGeometry.js","../node_modules/cesium/Source/Core/CircleGeometry.js","../node_modules/cesium/Source/Core/EllipseOutlineGeometry.js","../node_modules/cesium/Source/Core/CircleOutlineGeometry.js","../node_modules/cesium/Source/Core/ClockRange.js","../node_modules/cesium/Source/Core/ClockStep.js","../node_modules/cesium/Source/Core/getTimestamp.js","../node_modules/cesium/Source/Core/Clock.js","../node_modules/cesium/Source/Core/Color.js","../node_modules/cesium/Source/Core/ColorGeometryInstanceAttribute.js","../node_modules/cesium/Source/Core/CompressedTextureBuffer.js","../node_modules/cesium/Source/Core/CoplanarPolygonGeometryLibrary.js","../node_modules/cesium/Source/Core/EllipsoidRhumbLine.js","../node_modules/cesium/Source/ThirdParty/earcut-2.2.1.js","../node_modules/cesium/Source/Core/WindingOrder.js","../node_modules/cesium/Source/Core/PolygonPipeline.js","../node_modules/cesium/Source/Core/Queue.js","../node_modules/cesium/Source/Core/PolygonGeometryLibrary.js","../node_modules/cesium/Source/Core/CoplanarPolygonGeometry.js","../node_modules/cesium/Source/Core/CoplanarPolygonOutlineGeometry.js","../node_modules/cesium/Source/Core/CornerType.js","../node_modules/cesium/Source/Core/EllipsoidGeodesic.js","../node_modules/cesium/Source/Core/PolylinePipeline.js","../node_modules/cesium/Source/Core/PolylineVolumeGeometryLibrary.js","../node_modules/cesium/Source/Core/CorridorGeometryLibrary.js","../node_modules/cesium/Source/Core/CorridorGeometry.js","../node_modules/cesium/Source/Core/CorridorOutlineGeometry.js","../node_modules/cesium/Source/Core/createGuid.js","../node_modules/cesium/Source/Core/Ion.js","../node_modules/cesium/Source/Core/IonResource.js","../node_modules/cesium/Source/Core/createWorldTerrain.js","../node_modules/cesium/Source/Core/CullingVolume.js","../node_modules/cesium/Source/Core/CylinderGeometryLibrary.js","../node_modules/cesium/Source/Core/CylinderGeometry.js","../node_modules/cesium/Source/Core/CylinderOutlineGeometry.js","../node_modules/cesium/Source/Core/decodeGoogleEarthEnterpriseData.js","../node_modules/cesium/Source/Core/DefaultProxy.js","../node_modules/cesium/Source/Core/oneTimeWarning.js","../node_modules/cesium/Source/Core/deprecationWarning.js","../node_modules/cesium/Source/Core/DistanceDisplayCondition.js","../node_modules/cesium/Source/Core/DistanceDisplayConditionGeometryInstanceAttribute.js","../node_modules/cesium/Source/Core/DoublyLinkedList.js","../node_modules/cesium/Source/ThirdParty/Tween.js","../node_modules/cesium/Source/Core/EasingFunction.js","../node_modules/cesium/Source/Core/EllipsoidGeometry.js","../node_modules/cesium/Source/Core/EllipsoidOutlineGeometry.js","../node_modules/cesium/Source/Core/EllipsoidTerrainProvider.js","../node_modules/cesium/Source/Core/EventHelper.js","../node_modules/cesium/Source/Core/ExtrapolationType.js","../node_modules/cesium/Source/Core/OrthographicOffCenterFrustum.js","../node_modules/cesium/Source/Core/OrthographicFrustum.js","../node_modules/cesium/Source/Core/PerspectiveOffCenterFrustum.js","../node_modules/cesium/Source/Core/PerspectiveFrustum.js","../node_modules/cesium/Source/Core/FrustumGeometry.js","../node_modules/cesium/Source/Core/FrustumOutlineGeometry.js","../node_modules/cesium/Source/Core/GeocoderService.js","../node_modules/cesium/Source/Core/GeocodeType.js","../node_modules/cesium/Source/Core/GeometryFactory.js","../node_modules/cesium/Source/Core/GeometryInstanceAttribute.js","../node_modules/cesium/Source/Core/getFilenameFromUri.js","../node_modules/cesium/Source/Core/getImagePixels.js","../node_modules/cesium/Source/Core/getMagic.js","../node_modules/cesium/Source/Core/isBitSet.js","../node_modules/cesium/Source/Core/GoogleEarthEnterpriseTileInformation.js","../node_modules/cesium/Source/Core/GoogleEarthEnterpriseMetadata.js","../node_modules/cesium/Source/Core/GoogleEarthEnterpriseTerrainData.js","../node_modules/cesium/Source/Core/GoogleEarthEnterpriseTerrainProvider.js","../node_modules/cesium/Source/Core/GroundPolylineGeometry.js","../node_modules/cesium/Source/Core/HeadingPitchRange.js","../node_modules/cesium/Source/Core/HermitePolynomialApproximation.js","../node_modules/cesium/Source/Core/IauOrientationParameters.js","../node_modules/cesium/Source/Core/Iau2000Orientation.js","../node_modules/cesium/Source/Core/IauOrientationAxes.js","../node_modules/cesium/Source/Core/InterpolationAlgorithm.js","../node_modules/cesium/Source/Core/PeliasGeocoderService.js","../node_modules/cesium/Source/Core/IonGeocoderService.js","../node_modules/cesium/Source/Core/TimeInterval.js","../node_modules/cesium/Source/Core/Iso8601.js","../node_modules/cesium/Source/Core/KeyboardEventModifier.js","../node_modules/cesium/Source/Core/LagrangePolynomialApproximation.js","../node_modules/cesium/Source/Core/LinearApproximation.js","../node_modules/cesium/Source/Core/loadCRN.js","../node_modules/cesium/Source/Core/loadImageFromTypedArray.js","../node_modules/cesium/Source/Renderer/PixelDatatype.js","../node_modules/cesium/Source/Core/PixelFormat.js","../node_modules/cesium/Source/Core/loadKTX.js","../node_modules/cesium/Source/Core/ManagedArray.js","../node_modules/cesium/Source/Core/MapboxApi.js","../node_modules/cesium/Source/Core/MapProjection.js","../node_modules/cesium/Source/Core/mergeSort.js","../node_modules/cesium/Source/Core/NearFarScalar.js","../node_modules/cesium/Source/Core/Visibility.js","../node_modules/cesium/Source/Core/Occluder.js","../node_modules/cesium/Source/Core/OffsetGeometryInstanceAttribute.js","../node_modules/cesium/Source/Core/OpenCageGeocoderService.js","../node_modules/cesium/Source/Core/Packable.js","../node_modules/cesium/Source/Core/PackableForInterpolation.js","../node_modules/cesium/Source/Core/writeTextToCanvas.js","../node_modules/cesium/Source/ThirdParty/measureText.js","../node_modules/cesium/Source/Core/PinBuilder.js","../node_modules/cesium/Source/Core/PlaneGeometry.js","../node_modules/cesium/Source/Core/PlaneOutlineGeometry.js","../node_modules/cesium/Source/Core/pointInsideTriangle.js","../node_modules/cesium/Source/Core/PolygonGeometry.js","../node_modules/cesium/Source/Core/PolygonHierarchy.js","../node_modules/cesium/Source/Core/PolygonOutlineGeometry.js","../node_modules/cesium/Source/Core/PolylineGeometry.js","../node_modules/cesium/Source/Core/PolylineVolumeGeometry.js","../node_modules/cesium/Source/Core/PolylineVolumeOutlineGeometry.js","../node_modules/cesium/Source/Core/Proxy.js","../node_modules/cesium/Source/Core/QuaternionSpline.js","../node_modules/cesium/Source/ThirdParty/rbush.js","../node_modules/cesium/Source/Core/RectangleCollisionChecker.js","../node_modules/cesium/Source/Core/RectangleGeometryLibrary.js","../node_modules/cesium/Source/Core/RectangleGeometry.js","../node_modules/cesium/Source/Core/RectangleOutlineGeometry.js","../node_modules/cesium/Source/Core/requestAnimationFrame.js","../node_modules/cesium/Source/Core/ReferenceFrame.js","../node_modules/cesium/Source/Core/sampleTerrain.js","../node_modules/cesium/Source/Core/sampleTerrainMostDetailed.js","../node_modules/cesium/Source/Core/ScreenSpaceEventType.js","../node_modules/cesium/Source/Core/ScreenSpaceEventHandler.js","../node_modules/cesium/Source/Core/ShowGeometryInstanceAttribute.js","../node_modules/cesium/Source/Core/Simon1994PlanetaryPositions.js","../node_modules/cesium/Source/Core/SimplePolylineGeometry.js","../node_modules/cesium/Source/Core/SphereGeometry.js","../node_modules/cesium/Source/Core/SphereOutlineGeometry.js","../node_modules/cesium/Source/Core/Spherical.js","../node_modules/cesium/Source/Core/subdivideArray.js","../node_modules/cesium/Source/Core/TerrainData.js","../node_modules/cesium/Source/Core/TileEdge.js","../node_modules/cesium/Source/Core/TilingScheme.js","../node_modules/cesium/Source/Core/TimeIntervalCollection.js","../node_modules/cesium/Source/Core/TranslationRotationScale.js","../node_modules/cesium/Source/Core/VideoSynchronizer.js","../node_modules/cesium/Source/Core/VRTheWorldTerrainProvider.js","../node_modules/cesium/Source/Core/WallGeometryLibrary.js","../node_modules/cesium/Source/Core/WallGeometry.js","../node_modules/cesium/Source/Core/WallOutlineGeometry.js","../node_modules/cesium/Source/Core/webGLConstantToGlslType.js","../node_modules/cesium/Source/Core/WeightSpline.js","../node_modules/cesium/Source/DataSources/ConstantProperty.js","../node_modules/cesium/Source/DataSources/createPropertyDescriptor.js","../node_modules/cesium/Source/DataSources/BillboardGraphics.js","../node_modules/cesium/Source/Scene/HeightReference.js","../node_modules/cesium/Source/Scene/HorizontalOrigin.js","../node_modules/cesium/Source/Scene/VerticalOrigin.js","../node_modules/cesium/Source/DataSources/BoundingSphereState.js","../node_modules/cesium/Source/DataSources/Property.js","../node_modules/cesium/Source/DataSources/BillboardVisualizer.js","../node_modules/cesium/Source/Scene/BlendEquation.js","../node_modules/cesium/Source/Scene/BlendFunction.js","../node_modules/cesium/Source/Scene/BlendingState.js","../node_modules/cesium/Source/Scene/CullFace.js","../node_modules/cesium/Source/Scene/Appearance.js","../node_modules/cesium/Source/Renderer/ContextLimits.js","../node_modules/cesium/Source/Renderer/CubeMapFace.js","../node_modules/cesium/Source/Renderer/MipmapHint.js","../node_modules/cesium/Source/Renderer/TextureMagnificationFilter.js","../node_modules/cesium/Source/Renderer/TextureMinificationFilter.js","../node_modules/cesium/Source/Renderer/TextureWrap.js","../node_modules/cesium/Source/Renderer/Sampler.js","../node_modules/cesium/Source/Renderer/CubeMap.js","../node_modules/cesium/Source/Renderer/Texture.js","../node_modules/cesium/Source/Scene/Material.js","../node_modules/cesium/Source/Shaders/Materials/BumpMapMaterial.js","../node_modules/cesium/Source/Shaders/Materials/NormalMapMaterial.js","../node_modules/cesium/Source/Shaders/Materials/GridMaterial.js","../node_modules/cesium/Source/Shaders/Materials/StripeMaterial.js","../node_modules/cesium/Source/Shaders/Materials/CheckerboardMaterial.js","../node_modules/cesium/Source/Shaders/Materials/DotMaterial.js","../node_modules/cesium/Source/Shaders/Materials/Water.js","../node_modules/cesium/Source/Shaders/Materials/RimLightingMaterial.js","../node_modules/cesium/Source/Shaders/Materials/FadeMaterial.js","../node_modules/cesium/Source/Shaders/Materials/PolylineArrowMaterial.js","../node_modules/cesium/Source/Shaders/Materials/PolylineDashMaterial.js","../node_modules/cesium/Source/Shaders/Materials/PolylineGlowMaterial.js","../node_modules/cesium/Source/Shaders/Materials/PolylineOutlineMaterial.js","../node_modules/cesium/Source/Shaders/Materials/ElevationContourMaterial.js","../node_modules/cesium/Source/Shaders/Materials/ElevationRampMaterial.js","../node_modules/cesium/Source/Shaders/Materials/SlopeRampMaterial.js","../node_modules/cesium/Source/Shaders/Materials/AspectRampMaterial.js","../node_modules/cesium/Source/Scene/MaterialAppearance.js","../node_modules/cesium/Source/Shaders/Appearances/BasicMaterialAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/BasicMaterialAppearanceFS.js","../node_modules/cesium/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.js","../node_modules/cesium/Source/Shaders/Appearances/AllMaterialAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/AllMaterialAppearanceFS.js","../node_modules/cesium/Source/Scene/PerInstanceColorAppearance.js","../node_modules/cesium/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js","../node_modules/cesium/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.js","../node_modules/cesium/Source/DataSources/ColorMaterialProperty.js","../node_modules/cesium/Source/Renderer/DrawCommand.js","../node_modules/cesium/Source/Renderer/Pass.js","../node_modules/cesium/Source/Renderer/freezeRenderState.js","../node_modules/cesium/Source/Renderer/RenderState.js","../node_modules/cesium/Source/Renderer/AutomaticUniforms.js","../node_modules/cesium/Source/Renderer/createUniform.js","../node_modules/cesium/Source/Renderer/createUniformArray.js","../node_modules/cesium/Source/Renderer/ShaderProgram.js","../node_modules/cesium/Source/Renderer/modernizeShader.js","../node_modules/cesium/Source/Shaders/Builtin/CzmBuiltins.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/degreesPerRadian.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/depthRange.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon1.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon2.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon3.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon4.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon5.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon6.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/epsilon7.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/infinity.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/oneOverPi.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/oneOverTwoPi.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passCesium3DTile.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passClassification.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passCompute.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passEnvironment.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passGlobe.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passOpaque.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passOverlay.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passTerrainClassification.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/passTranslucent.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/pi.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/piOverFour.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/piOverSix.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/piOverThree.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/piOverTwo.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/radiansPerDegree.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/sceneMode2D.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/sceneMode3D.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/sceneModeColumbusView.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/sceneModeMorphing.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/solarRadius.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/threePiOver2.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/twoPi.js","../node_modules/cesium/Source/Shaders/Builtin/Constants/webMercatorMaxLatitude.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/depthRangeStruct.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/material.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/materialInput.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/ray.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/raySegment.js","../node_modules/cesium/Source/Shaders/Builtin/Structs/shadowParameters.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/acesTonemapping.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/alphaWeight.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/antialias.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/approximateSphericalCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/backFacing.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/branchFreeTernary.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/cascadeColor.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/cascadeDistance.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/cascadeMatrix.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/cascadeWeights.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/columbusViewMorph.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/computePosition.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/cosineAndSine.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/decompressTextureCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/depthClamp.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/eastNorthUpToEyeCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/ellipsoidContainsPoint.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/ellipsoidWgs84TextureCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/equalsEpsilon.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/eyeOffset.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/eyeToWindowCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/fastApproximateAtan.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/fog.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/gammaCorrect.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/geodeticSurfaceNormal.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/getDefaultMaterial.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/getLambertDiffuse.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/getSpecular.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/getWaterNoise.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/HSBToRGB.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/HSLToRGB.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/hue.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/inverseGamma.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/isEmpty.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/isFull.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/latitudeToWebMercatorFraction.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/lineDistance.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/luminance.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/metersPerPixel.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/multiplyWithColorBalance.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/nearFarScalar.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/octDecode.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/packDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/phong.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/planeDistance.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/pointAlongRay.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/rayEllipsoidIntersectionInterval.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/readDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/readNonPerspective.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/reverseLogDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/RGBToHSB.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/RGBToHSL.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/RGBToXYZ.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/saturation.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/shadowDepthCompare.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/shadowVisibility.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/signNotZero.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/sphericalHarmonics.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/transformPlane.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/translateRelativeToEye.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/translucentPhong.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/transpose.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/unpackDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/unpackFloat.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/vertexLogDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/writeDepthClamp.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/writeLogDepth.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/writeNonPerspective.js","../node_modules/cesium/Source/Shaders/Builtin/Functions/XYZToRGB.js","../node_modules/cesium/Source/Renderer/ShaderSource.js","../node_modules/cesium/Source/Shaders/ShadowVolumeFS.js","../node_modules/cesium/Source/Scene/ClassificationType.js","../node_modules/cesium/Source/Scene/DepthFunction.js","../node_modules/cesium/Source/Renderer/BufferUsage.js","../node_modules/cesium/Source/Renderer/Buffer.js","../node_modules/cesium/Source/Renderer/VertexArray.js","../node_modules/cesium/Source/Scene/BatchTable.js","../node_modules/cesium/Source/Scene/PrimitivePipeline.js","../node_modules/cesium/Source/Scene/PrimitiveState.js","../node_modules/cesium/Source/Scene/SceneMode.js","../node_modules/cesium/Source/Scene/ShadowMode.js","../node_modules/cesium/Source/Scene/Primitive.js","../node_modules/cesium/Source/Shaders/ShadowVolumeAppearanceFS.js","../node_modules/cesium/Source/Scene/ShadowVolumeAppearance.js","../node_modules/cesium/Source/Scene/StencilFunction.js","../node_modules/cesium/Source/Scene/StencilOperation.js","../node_modules/cesium/Source/Scene/StencilConstants.js","../node_modules/cesium/Source/Scene/ClassificationPrimitive.js","../node_modules/cesium/Source/Shaders/ShadowVolumeAppearanceVS.js","../node_modules/cesium/Source/Scene/GroundPrimitive.js","../node_modules/cesium/Source/DataSources/MaterialProperty.js","../node_modules/cesium/Source/DataSources/DynamicGeometryUpdater.js","../node_modules/cesium/Source/Shaders/PolylineCommon.js","../node_modules/cesium/Source/Scene/PolylineColorAppearance.js","../node_modules/cesium/Source/Shaders/PolylineFS.js","../node_modules/cesium/Source/Scene/PolylineMaterialAppearance.js","../node_modules/cesium/Source/Scene/GroundPolylinePrimitive.js","../node_modules/cesium/Source/Shaders/PolylineShadowVolumeVS.js","../node_modules/cesium/Source/Shaders/PolylineShadowVolumeMorphVS.js","../node_modules/cesium/Source/Shaders/PolylineShadowVolumeFS.js","../node_modules/cesium/Source/Shaders/PolylineShadowVolumeMorphFS.js","../node_modules/cesium/Source/DataSources/ImageMaterialProperty.js","../node_modules/cesium/Source/DataSources/createMaterialPropertyDescriptor.js","../node_modules/cesium/Source/DataSources/BoxGraphics.js","../node_modules/cesium/Source/DataSources/PositionProperty.js","../node_modules/cesium/Source/DataSources/ConstantPositionProperty.js","../node_modules/cesium/Source/DataSources/CorridorGraphics.js","../node_modules/cesium/Source/DataSources/createRawPropertyDescriptor.js","../node_modules/cesium/Source/DataSources/CylinderGraphics.js","../node_modules/cesium/Source/DataSources/EllipseGraphics.js","../node_modules/cesium/Source/DataSources/EllipsoidGraphics.js","../node_modules/cesium/Source/DataSources/LabelGraphics.js","../node_modules/cesium/Source/DataSources/NodeTransformationProperty.js","../node_modules/cesium/Source/DataSources/PropertyBag.js","../node_modules/cesium/Source/DataSources/ModelGraphics.js","../node_modules/cesium/Source/DataSources/Cesium3DTilesetGraphics.js","../node_modules/cesium/Source/DataSources/PathGraphics.js","../node_modules/cesium/Source/DataSources/PlaneGraphics.js","../node_modules/cesium/Source/DataSources/PointGraphics.js","../node_modules/cesium/Source/DataSources/PolygonGraphics.js","../node_modules/cesium/Source/DataSources/PolylineGraphics.js","../node_modules/cesium/Source/DataSources/PolylineVolumeGraphics.js","../node_modules/cesium/Source/DataSources/RectangleGraphics.js","../node_modules/cesium/Source/DataSources/WallGraphics.js","../node_modules/cesium/Source/DataSources/Entity.js","../node_modules/cesium/Source/DataSources/GeometryUpdater.js","../node_modules/cesium/Source/DataSources/CallbackProperty.js","../node_modules/cesium/Source/DataSources/TerrainOffsetProperty.js","../node_modules/cesium/Source/DataSources/heightReferenceOnEntityPropertyChanged.js","../node_modules/cesium/Source/DataSources/BoxGeometryUpdater.js","../node_modules/cesium/Source/Renderer/ClearCommand.js","../node_modules/cesium/Source/Scene/Axis.js","../node_modules/cesium/Source/Scene/AttributeType.js","../node_modules/cesium/Source/Scene/Cesium3DTileColorBlendMode.js","../node_modules/cesium/Source/Scene/getBinaryAccessor.js","../node_modules/cesium/Source/Scene/Cesium3DTileBatchTable.js","../node_modules/cesium/Source/Scene/Cesium3DTileFeature.js","../node_modules/cesium/Source/Scene/Cesium3DTileFeatureTable.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addToArray.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/hasExtension.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/ForEach.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/numberOfComponentsForType.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/getAccessorByteStride.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addDefaults.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addPipelineExtras.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/removeExtensionsRequired.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/removeExtensionsUsed.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/parseGlb.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addExtensionsUsed.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/getComponentReader.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/findAccessorMinMax.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/moveTechniqueRenderStates.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addExtensionsRequired.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/moveTechniquesToExtension.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/removeUnusedElements.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/addBuffer.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/readAccessorPacked.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/updateAccessorComponentTypes.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/updateVersion.js","../node_modules/cesium/Source/Scene/ModelLoadResources.js","../node_modules/cesium/Source/Scene/ModelUtility.js","../node_modules/cesium/Source/Scene/processModelMaterialsCommon.js","../node_modules/cesium/Source/Scene/processPbrMaterials.js","../node_modules/cesium/Source/Scene/Vector3DTileBatch.js","../node_modules/cesium/Source/Shaders/VectorTileVS.js","../node_modules/cesium/Source/ThirdParty/jsep.js","../node_modules/cesium/Source/Scene/ExpressionNodeType.js","../node_modules/cesium/Source/Scene/Expression.js","../node_modules/cesium/Source/Scene/Vector3DTilePrimitive.js","../node_modules/cesium/Source/Scene/ClassificationModel.js","../node_modules/cesium/Source/Scene/ClippingPlane.js","../node_modules/cesium/Source/Scene/ClippingPlaneCollection.js","../node_modules/cesium/Source/Scene/ColorBlendMode.js","../node_modules/cesium/Source/Scene/DracoLoader.js","../node_modules/cesium/Source/Scene/getClipAndStyleCode.js","../node_modules/cesium/Source/Scene/getClippingFunction.js","../node_modules/cesium/Source/Scene/JobType.js","../node_modules/cesium/Source/Scene/ModelAnimationCache.js","../node_modules/cesium/Source/Scene/ModelAnimationLoop.js","../node_modules/cesium/Source/Scene/ModelAnimationState.js","../node_modules/cesium/Source/Scene/ModelAnimation.js","../node_modules/cesium/Source/Scene/ModelAnimationCollection.js","../node_modules/cesium/Source/Scene/ModelMaterial.js","../node_modules/cesium/Source/Scene/ModelMesh.js","../node_modules/cesium/Source/Scene/ModelNode.js","../node_modules/cesium/Source/Scene/ModelOutlineLoader.js","../node_modules/cesium/Source/Renderer/ComputeCommand.js","../node_modules/cesium/Source/Scene/OctahedralProjectedCubeMap.js","../node_modules/cesium/Source/Shaders/OctahedralProjectionVS.js","../node_modules/cesium/Source/Shaders/OctahedralProjectionFS.js","../node_modules/cesium/Source/Shaders/OctahedralProjectionAtlasFS.js","../node_modules/cesium/Source/Scene/Model.js","../node_modules/cesium/Source/Scene/Batched3DModel3DTileContent.js","../node_modules/cesium/Source/Scene/Composite3DTileContent.js","../node_modules/cesium/Source/Scene/Vector3DTileGeometry.js","../node_modules/cesium/Source/Scene/Geometry3DTileContent.js","../node_modules/cesium/Source/Scene/ModelInstance.js","../node_modules/cesium/Source/Scene/ModelInstanceCollection.js","../node_modules/cesium/Source/Scene/Instanced3DModel3DTileContent.js","../node_modules/cesium/Source/Scene/Cesium3DTileRefine.js","../node_modules/cesium/Source/Scene/PointCloud.js","../node_modules/cesium/Source/Renderer/Framebuffer.js","../node_modules/cesium/Source/Scene/PointCloudEyeDomeLighting.js","../node_modules/cesium/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.js","../node_modules/cesium/Source/Scene/PointCloudShading.js","../node_modules/cesium/Source/Scene/PointCloud3DTileContent.js","../node_modules/cesium/Source/Scene/Tileset3DTileContent.js","../node_modules/cesium/Source/Renderer/VertexArrayFacade.js","../node_modules/cesium/Source/Scene/SceneTransforms.js","../node_modules/cesium/Source/Scene/Billboard.js","../node_modules/cesium/Source/Scene/BlendOption.js","../node_modules/cesium/Source/Scene/SDFSettings.js","../node_modules/cesium/Source/Scene/TextureAtlas.js","../node_modules/cesium/Source/Scene/BillboardCollection.js","../node_modules/cesium/Source/Shaders/BillboardCollectionVS.js","../node_modules/cesium/Source/Shaders/BillboardCollectionFS.js","../node_modules/cesium/Source/Scene/createBillboardPointCallback.js","../node_modules/cesium/Source/Scene/Cesium3DTilePointFeature.js","../node_modules/cesium/Source/ThirdParty/bitmap-sdf.js","../node_modules/cesium/Source/Scene/LabelStyle.js","../node_modules/cesium/Source/Scene/Label.js","../node_modules/cesium/Source/ThirdParty/graphemesplitter.js","../node_modules/cesium/Source/Scene/LabelCollection.js","../node_modules/cesium/Source/Scene/Polyline.js","../node_modules/cesium/Source/Scene/PolylineCollection.js","../node_modules/cesium/Source/Shaders/PolylineVS.js","../node_modules/cesium/Source/Scene/Vector3DTilePoints.js","../node_modules/cesium/Source/Scene/Vector3DTilePolygons.js","../node_modules/cesium/Source/Scene/Vector3DTilePolylines.js","../node_modules/cesium/Source/Shaders/Vector3DTilePolylinesVS.js","../node_modules/cesium/Source/Scene/Vector3DTileContent.js","../node_modules/cesium/Source/Scene/Cesium3DTileContentFactory.js","../node_modules/cesium/Source/Scene/Cesium3DTileContentState.js","../node_modules/cesium/Source/Scene/Cesium3DTileOptimizationHint.js","../node_modules/cesium/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js","../node_modules/cesium/Source/Scene/Cesium3DTilesetTraversal.js","../node_modules/cesium/Source/Scene/Cesium3DTilePass.js","../node_modules/cesium/Source/Scene/Empty3DTileContent.js","../node_modules/cesium/Source/Scene/TileBoundingRegion.js","../node_modules/cesium/Source/Scene/TileBoundingSphere.js","../node_modules/cesium/Source/Scene/TileOrientedBoundingBox.js","../node_modules/cesium/Source/Scene/Cesium3DTile.js","../node_modules/cesium/Source/Scene/Cesium3DTileOptimizations.js","../node_modules/cesium/Source/Scene/Cesium3DTilesetCache.js","../node_modules/cesium/Source/Scene/Cesium3DTilesetHeatmap.js","../node_modules/cesium/Source/Scene/Cesium3DTilesetStatistics.js","../node_modules/cesium/Source/Scene/Cesium3DTileStyleEngine.js","../node_modules/cesium/Source/Scene/Cesium3DTileset.js","../node_modules/cesium/Source/DataSources/Cesium3DTilesetVisualizer.js","../node_modules/cesium/Source/DataSources/CheckerboardMaterialProperty.js","../node_modules/cesium/Source/DataSources/EntityCollection.js","../node_modules/cesium/Source/DataSources/CompositeEntityCollection.js","../node_modules/cesium/Source/DataSources/CompositeProperty.js","../node_modules/cesium/Source/DataSources/CompositeMaterialProperty.js","../node_modules/cesium/Source/DataSources/CompositePositionProperty.js","../node_modules/cesium/Source/DataSources/GroundGeometryUpdater.js","../node_modules/cesium/Source/DataSources/CorridorGeometryUpdater.js","../node_modules/cesium/Source/DataSources/DataSource.js","../node_modules/cesium/Source/Scene/PointPrimitive.js","../node_modules/cesium/Source/Shaders/PointPrimitiveCollectionFS.js","../node_modules/cesium/Source/Scene/PointPrimitiveCollection.js","../node_modules/cesium/Source/Shaders/PointPrimitiveCollectionVS.js","../node_modules/cesium/Source/ThirdParty/kdbush.js","../node_modules/cesium/Source/DataSources/EntityCluster.js","../node_modules/cesium/Source/DataSources/CustomDataSource.js","../node_modules/cesium/Source/DataSources/CylinderGeometryUpdater.js","../node_modules/cesium/Source/DataSources/DataSourceClock.js","../node_modules/cesium/Source/DataSources/GridMaterialProperty.js","../node_modules/cesium/Source/DataSources/PolylineArrowMaterialProperty.js","../node_modules/cesium/Source/DataSources/PolylineDashMaterialProperty.js","../node_modules/cesium/Source/DataSources/PolylineGlowMaterialProperty.js","../node_modules/cesium/Source/DataSources/PolylineOutlineMaterialProperty.js","../node_modules/cesium/Source/DataSources/PositionPropertyArray.js","../node_modules/cesium/Source/DataSources/PropertyArray.js","../node_modules/cesium/Source/DataSources/ReferenceProperty.js","../node_modules/cesium/Source/DataSources/Rotation.js","../node_modules/cesium/Source/DataSources/SampledProperty.js","../node_modules/cesium/Source/DataSources/SampledPositionProperty.js","../node_modules/cesium/Source/DataSources/StripeOrientation.js","../node_modules/cesium/Source/DataSources/StripeMaterialProperty.js","../node_modules/cesium/Source/DataSources/TimeIntervalCollectionPositionProperty.js","../node_modules/cesium/Source/DataSources/TimeIntervalCollectionProperty.js","../node_modules/cesium/Source/DataSources/VelocityVectorProperty.js","../node_modules/cesium/Source/DataSources/VelocityOrientationProperty.js","../node_modules/cesium/Source/DataSources/CzmlDataSource.js","../node_modules/cesium/Source/DataSources/DataSourceCollection.js","../node_modules/cesium/Source/Scene/PrimitiveCollection.js","../node_modules/cesium/Source/Scene/OrderedGroundPrimitiveCollection.js","../node_modules/cesium/Source/DataSources/DynamicGeometryBatch.js","../node_modules/cesium/Source/DataSources/EllipseGeometryUpdater.js","../node_modules/cesium/Source/DataSources/EllipsoidGeometryUpdater.js","../node_modules/cesium/Source/DataSources/PlaneGeometryUpdater.js","../node_modules/cesium/Source/DataSources/PolygonGeometryUpdater.js","../node_modules/cesium/Source/DataSources/PolylineVolumeGeometryUpdater.js","../node_modules/cesium/Source/DataSources/RectangleGeometryUpdater.js","../node_modules/cesium/Source/DataSources/StaticGeometryColorBatch.js","../node_modules/cesium/Source/DataSources/StaticGeometryPerMaterialBatch.js","../node_modules/cesium/Source/DataSources/StaticGroundGeometryColorBatch.js","../node_modules/cesium/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js","../node_modules/cesium/Source/DataSources/StaticOutlineGeometryBatch.js","../node_modules/cesium/Source/DataSources/WallGeometryUpdater.js","../node_modules/cesium/Source/DataSources/GeometryVisualizer.js","../node_modules/cesium/Source/DataSources/LabelVisualizer.js","../node_modules/cesium/Source/DataSources/ModelVisualizer.js","../node_modules/cesium/Source/DataSources/ScaledPositionProperty.js","../node_modules/cesium/Source/DataSources/PathVisualizer.js","../node_modules/cesium/Source/DataSources/PointVisualizer.js","../node_modules/cesium/Source/DataSources/PolylineGeometryUpdater.js","../node_modules/cesium/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js","../node_modules/cesium/Source/DataSources/PolylineVisualizer.js","../node_modules/cesium/Source/DataSources/DataSourceDisplay.js","../node_modules/cesium/Source/DataSources/EntityView.js","../node_modules/cesium/Source/ThirdParty/zip.js","../node_modules/cesium/Source/DataSources/exportKml.js","../node_modules/cesium/Source/ThirdParty/topojson.js","../node_modules/cesium/Source/DataSources/GeoJsonDataSource.js","../node_modules/cesium/Source/DataSources/KmlCamera.js","../node_modules/cesium/Source/ThirdParty/Autolinker.js","../node_modules/cesium/Source/DataSources/KmlLookAt.js","../node_modules/cesium/Source/DataSources/KmlTour.js","../node_modules/cesium/Source/DataSources/KmlTourFlyTo.js","../node_modules/cesium/Source/DataSources/KmlTourWait.js","../node_modules/cesium/Source/DataSources/KmlDataSource.js","../node_modules/cesium/Source/DataSources/Visualizer.js","../node_modules/cesium/Source/Renderer/ComputeEngine.js","../node_modules/cesium/Source/Shaders/ViewportQuadVS.js","../node_modules/cesium/Source/Renderer/PassState.js","../node_modules/cesium/Source/Renderer/ShaderCache.js","../node_modules/cesium/Source/Renderer/TextureCache.js","../node_modules/cesium/Source/Scene/SunLight.js","../node_modules/cesium/Source/Renderer/UniformState.js","../node_modules/cesium/Source/Renderer/Context.js","../node_modules/cesium/Source/Renderer/loadCubeMap.js","../node_modules/cesium/Source/Renderer/RenderbufferFormat.js","../node_modules/cesium/Source/Renderer/Renderbuffer.js","../node_modules/cesium/Source/Scene/DiscardMissingTileImagePolicy.js","../node_modules/cesium/Source/Scene/ImageryLayerFeatureInfo.js","../node_modules/cesium/Source/Scene/ImageryProvider.js","../node_modules/cesium/Source/Scene/ArcGisMapServerImageryProvider.js","../node_modules/cesium/Source/Scene/AutoExposure.js","../node_modules/cesium/Source/Scene/DiscardEmptyTileImagePolicy.js","../node_modules/cesium/Source/Scene/BingMapsStyle.js","../node_modules/cesium/Source/Scene/BingMapsImageryProvider.js","../node_modules/cesium/Source/Scene/BoxEmitter.js","../node_modules/cesium/Source/Scene/BrdfLutGenerator.js","../node_modules/cesium/Source/Shaders/BrdfLutGeneratorFS.js","../node_modules/cesium/Source/Scene/CameraFlightPath.js","../node_modules/cesium/Source/Scene/MapMode2D.js","../node_modules/cesium/Source/Scene/Camera.js","../node_modules/cesium/Source/Scene/CameraEventType.js","../node_modules/cesium/Source/Scene/CameraEventAggregator.js","../node_modules/cesium/Source/Scene/Cesium3DTileContent.js","../node_modules/cesium/Source/Scene/Cesium3DTilePassState.js","../node_modules/cesium/Source/Scene/ConditionsExpression.js","../node_modules/cesium/Source/Scene/Cesium3DTileStyle.js","../node_modules/cesium/Source/Scene/CircleEmitter.js","../node_modules/cesium/Source/Scene/computeFlyToLocationForRectangle.js","../node_modules/cesium/Source/Scene/ConeEmitter.js","../node_modules/cesium/Source/Scene/createTangentSpaceDebugPrimitive.js","../node_modules/cesium/Source/Scene/UrlTemplateImageryProvider.js","../node_modules/cesium/Source/Scene/TileMapServiceImageryProvider.js","../node_modules/cesium/Source/Scene/GoogleEarthEnterpriseMapsProvider.js","../node_modules/cesium/Source/Scene/MapboxImageryProvider.js","../node_modules/cesium/Source/Scene/SingleTileImageryProvider.js","../node_modules/cesium/Source/Scene/GetFeatureInfoFormat.js","../node_modules/cesium/Source/Scene/TimeDynamicImagery.js","../node_modules/cesium/Source/Scene/WebMapServiceImageryProvider.js","../node_modules/cesium/Source/Scene/WebMapTileServiceImageryProvider.js","../node_modules/cesium/Source/Scene/IonImageryProvider.js","../node_modules/cesium/Source/Scene/IonWorldImageryStyle.js","../node_modules/cesium/Source/Scene/createWorldImagery.js","../node_modules/cesium/Source/Scene/CreditDisplay.js","../node_modules/cesium/Source/Scene/DebugAppearance.js","../node_modules/cesium/Source/Scene/DebugCameraPrimitive.js","../node_modules/cesium/Source/Scene/DebugModelMatrixPrimitive.js","../node_modules/cesium/Source/Scene/DepthPlane.js","../node_modules/cesium/Source/Shaders/DepthPlaneVS.js","../node_modules/cesium/Source/Shaders/DepthPlaneFS.js","../node_modules/cesium/Source/Scene/DerivedCommand.js","../node_modules/cesium/Source/Scene/DeviceOrientationCameraController.js","../node_modules/cesium/Source/Scene/DirectionalLight.js","../node_modules/cesium/Source/Shaders/EllipsoidFS.js","../node_modules/cesium/Source/Shaders/EllipsoidVS.js","../node_modules/cesium/Source/Scene/EllipsoidPrimitive.js","../node_modules/cesium/Source/Scene/EllipsoidSurfaceAppearance.js","../node_modules/cesium/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js","../node_modules/cesium/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js","../node_modules/cesium/Source/Scene/Fog.js","../node_modules/cesium/Source/Scene/FrameRateMonitor.js","../node_modules/cesium/Source/Scene/FrameState.js","../node_modules/cesium/Source/Scene/FrustumCommands.js","../node_modules/cesium/Source/Shaders/GroundAtmosphere.js","../node_modules/cesium/Source/Scene/GlobeSurfaceShaderSet.js","../node_modules/cesium/Source/Scene/ImageryState.js","../node_modules/cesium/Source/Scene/QuadtreeTileLoadState.js","../node_modules/cesium/Source/Scene/TerrainState.js","../node_modules/cesium/Source/Scene/GlobeSurfaceTile.js","../node_modules/cesium/Source/Scene/Imagery.js","../node_modules/cesium/Source/Scene/ImagerySplitDirection.js","../node_modules/cesium/Source/Scene/TileImagery.js","../node_modules/cesium/Source/Scene/ImageryLayer.js","../node_modules/cesium/Source/Shaders/ReprojectWebMercatorVS.js","../node_modules/cesium/Source/Shaders/ReprojectWebMercatorFS.js","../node_modules/cesium/Source/Scene/TileSelectionResult.js","../node_modules/cesium/Source/Scene/TerrainFillMesh.js","../node_modules/cesium/Source/Scene/GlobeSurfaceTileProvider.js","../node_modules/cesium/Source/Scene/GlobeTranslucency.js","../node_modules/cesium/Source/Scene/ImageryLayerCollection.js","../node_modules/cesium/Source/Scene/QuadtreeOccluders.js","../node_modules/cesium/Source/Scene/QuadtreeTile.js","../node_modules/cesium/Source/Scene/TileReplacementQueue.js","../node_modules/cesium/Source/Scene/QuadtreePrimitive.js","../node_modules/cesium/Source/Scene/Globe.js","../node_modules/cesium/Source/Shaders/GlobeFS.js","../node_modules/cesium/Source/Shaders/GlobeVS.js","../node_modules/cesium/Source/Shaders/PostProcessStages/PassThrough.js","../node_modules/cesium/Source/Shaders/PostProcessStages/PassThroughDepth.js","../node_modules/cesium/Source/Scene/GlobeDepth.js","../node_modules/cesium/Source/Scene/GlobeTranslucencyFramebuffer.js","../node_modules/cesium/Source/Scene/GlobeTranslucencyState.js","../node_modules/cesium/Source/Scene/GoogleEarthEnterpriseImageryProvider.js","../node_modules/cesium/Source/Scene/GridImageryProvider.js","../node_modules/cesium/Source/Scene/InvertClassification.js","../node_modules/cesium/Source/Scene/JobScheduler.js","../node_modules/cesium/Source/Scene/Light.js","../node_modules/cesium/Source/Scene/MapboxStyleImageryProvider.js","../node_modules/cesium/Source/Scene/Moon.js","../node_modules/cesium/Source/Scene/NeverTileDiscardPolicy.js","../node_modules/cesium/Source/Shaders/AdjustTranslucentFS.js","../node_modules/cesium/Source/Scene/OIT.js","../node_modules/cesium/Source/Shaders/CompositeOITFS.js","../node_modules/cesium/Source/Scene/OpenStreetMapImageryProvider.js","../node_modules/cesium/Source/Scene/Particle.js","../node_modules/cesium/Source/Scene/ParticleBurst.js","../node_modules/cesium/Source/Scene/ParticleEmitter.js","../node_modules/cesium/Source/Scene/ParticleSystem.js","../node_modules/cesium/Source/Widgets/getElement.js","../node_modules/cesium/Source/Scene/PerformanceDisplay.js","../node_modules/cesium/Source/Scene/PickDepth.js","../node_modules/cesium/Source/Scene/PickDepthFramebuffer.js","../node_modules/cesium/Source/Scene/PickFramebuffer.js","../node_modules/cesium/Source/Scene/SceneFramebuffer.js","../node_modules/cesium/Source/Scene/ShadowMapShader.js","../node_modules/cesium/Source/Scene/ShadowMap.js","../node_modules/cesium/Source/Scene/View.js","../node_modules/cesium/Source/Scene/Picking.js","../node_modules/cesium/Source/Scene/PostProcessStageSampleMode.js","../node_modules/cesium/Source/Scene/PostProcessStage.js","../node_modules/cesium/Source/Shaders/PostProcessStages/GaussianBlur1D.js","../node_modules/cesium/Source/Scene/PostProcessStageComposite.js","../node_modules/cesium/Source/Scene/PostProcessStageLibrary.js","../node_modules/cesium/Source/Shaders/PostProcessStages/DepthOfField.js","../node_modules/cesium/Source/Shaders/PostProcessStages/EdgeDetection.js","../node_modules/cesium/Source/Shaders/PostProcessStages/Silhouette.js","../node_modules/cesium/Source/Shaders/PostProcessStages/ContrastBias.js","../node_modules/cesium/Source/Shaders/PostProcessStages/BloomComposite.js","../node_modules/cesium/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js","../node_modules/cesium/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js","../node_modules/cesium/Source/Shaders/PostProcessStages/AcesTonemappingStage.js","../node_modules/cesium/Source/Shaders/PostProcessStages/FilmicTonemapping.js","../node_modules/cesium/Source/Shaders/PostProcessStages/ReinhardTonemapping.js","../node_modules/cesium/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js","../node_modules/cesium/Source/Shaders/PostProcessStages/BlackAndWhite.js","../node_modules/cesium/Source/Shaders/PostProcessStages/Brightness.js","../node_modules/cesium/Source/Shaders/PostProcessStages/NightVision.js","../node_modules/cesium/Source/Shaders/PostProcessStages/DepthView.js","../node_modules/cesium/Source/Shaders/PostProcessStages/LensFlare.js","../node_modules/cesium/Source/Scene/PostProcessStageTextureCache.js","../node_modules/cesium/Source/Scene/Tonemapper.js","../node_modules/cesium/Source/Scene/PostProcessStageCollection.js","../node_modules/cesium/Source/Scene/QuadtreeTileProvider.js","../node_modules/cesium/Source/Scene/SceneTransitioner.js","../node_modules/cesium/Source/Scene/TweenCollection.js","../node_modules/cesium/Source/Scene/ScreenSpaceCameraController.js","../node_modules/cesium/Source/Scene/SunPostProcess.js","../node_modules/cesium/Source/Shaders/PostProcessStages/BrightPass.js","../node_modules/cesium/Source/Shaders/PostProcessStages/AdditiveBlend.js","../node_modules/cesium/Source/Scene/Scene.js","../node_modules/cesium/Source/Shaders/SkyAtmosphereCommon.js","../node_modules/cesium/Source/Shaders/SkyAtmosphereFS.js","../node_modules/cesium/Source/Shaders/SkyAtmosphereVS.js","../node_modules/cesium/Source/Scene/SkyAtmosphere.js","../node_modules/cesium/Source/Scene/SkyBox.js","../node_modules/cesium/Source/Shaders/SkyBoxFS.js","../node_modules/cesium/Source/Shaders/SkyBoxVS.js","../node_modules/cesium/Source/Scene/SphereEmitter.js","../node_modules/cesium/Source/Scene/StyleExpression.js","../node_modules/cesium/Source/Scene/Sun.js","../node_modules/cesium/Source/Shaders/SunTextureFS.js","../node_modules/cesium/Source/Shaders/SunVS.js","../node_modules/cesium/Source/Shaders/SunFS.js","../node_modules/cesium/Source/Scene/TileBoundingVolume.js","../node_modules/cesium/Source/Scene/TileCoordinatesImageryProvider.js","../node_modules/cesium/Source/Scene/TileDiscardPolicy.js","../node_modules/cesium/Source/Scene/TileState.js","../node_modules/cesium/Source/Scene/TimeDynamicPointCloud.js","../node_modules/cesium/Source/Scene/ViewportQuad.js","../node_modules/cesium/Source/Shaders/ViewportQuadFS.js","../node_modules/cesium/Source/ThirdParty/knockout-es5.js","../node_modules/cesium/Source/Widgets/SvgPathBindingHandler.js","../node_modules/cesium/Source/ThirdParty/knockout.js","../node_modules/cesium/Source/ThirdParty/LercDecode.js","../node_modules/cesium/Source/ThirdParty/NoSleep.js","../node_modules/cesium/Source/Widgets/ClockViewModel.js","../node_modules/cesium/Source/Widgets/createCommand.js","../node_modules/cesium/Source/Widgets/InspectorShared.js","../node_modules/cesium/Source/Widgets/subscribeAndEvaluate.js","../node_modules/cesium/Source/Widgets/ToggleButtonViewModel.js","../node_modules/cesium/Source/ThirdParty/GltfPipeline/removePipelineExtras.js","../node_modules/cesium/Source/Widgets/Animation/Animation.js","../node_modules/cesium/Source/Widgets/Animation/AnimationViewModel.js","../node_modules/cesium/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js","../node_modules/cesium/Source/Widgets/BaseLayerPicker/BaseLayerPicker.js","../node_modules/cesium/Source/Widgets/BaseLayerPicker/ProviderViewModel.js","../node_modules/cesium/Source/Widgets/BaseLayerPicker/createDefaultImageryProviderViewModels.js","../node_modules/cesium/Source/Widgets/BaseLayerPicker/createDefaultTerrainProviderViewModels.js","../node_modules/cesium/Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel.js","../node_modules/cesium/Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.js","../node_modules/cesium/Source/Widgets/CesiumInspector/CesiumInspectorViewModel.js","../node_modules/cesium/Source/Widgets/CesiumInspector/CesiumInspector.js","../node_modules/cesium/Source/Widgets/CesiumWidget/CesiumWidget.js","../node_modules/cesium/Source/Widgets/FullscreenButton/FullscreenButtonViewModel.js","../node_modules/cesium/Source/Widgets/FullscreenButton/FullscreenButton.js","../node_modules/cesium/Source/Widgets/Geocoder/GeocoderViewModel.js","../node_modules/cesium/Source/Widgets/Geocoder/Geocoder.js","../node_modules/cesium/Source/Widgets/HomeButton/HomeButtonViewModel.js","../node_modules/cesium/Source/Widgets/HomeButton/HomeButton.js","../node_modules/cesium/Source/Widgets/InfoBox/InfoBoxViewModel.js","../node_modules/cesium/Source/Widgets/InfoBox/InfoBox.js","../node_modules/cesium/Source/Widgets/NavigationHelpButton/NavigationHelpButtonViewModel.js","../node_modules/cesium/Source/Widgets/NavigationHelpButton/NavigationHelpButton.js","../node_modules/cesium/Source/Widgets/PerformanceWatchdog/PerformanceWatchdogViewModel.js","../node_modules/cesium/Source/Widgets/PerformanceWatchdog/PerformanceWatchdog.js","../node_modules/cesium/Source/Widgets/ProjectionPicker/ProjectionPickerViewModel.js","../node_modules/cesium/Source/Widgets/ProjectionPicker/ProjectionPicker.js","../node_modules/cesium/Source/Widgets/SceneModePicker/SceneModePickerViewModel.js","../node_modules/cesium/Source/Widgets/SceneModePicker/SceneModePicker.js","../node_modules/cesium/Source/Widgets/SelectionIndicator/SelectionIndicatorViewModel.js","../node_modules/cesium/Source/Widgets/SelectionIndicator/SelectionIndicator.js","../node_modules/cesium/Source/Widgets/Timeline/TimelineHighlightRange.js","../node_modules/cesium/Source/Widgets/Timeline/TimelineTrack.js","../node_modules/cesium/Source/Widgets/Timeline/Timeline.js","../node_modules/cesium/Source/Widgets/VRButton/VRButtonViewModel.js","../node_modules/cesium/Source/Widgets/VRButton/VRButton.js","../node_modules/cesium/Source/Widgets/Viewer/Viewer.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/@blueprintjs/table/node_modules/tslib/tslib.es6.js","../../../src/common/props.ts","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-redux/es/utils/PropTypes.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/cesium/Source/Core/clone.js","../node_modules/reselect/lib/index.js","../node_modules/cesium/Source/Core/combine.js","../../../src/common/errors.ts","../node_modules/prop-types/index.js","../../../src/components/icon/icon.tsx","../../../src/common/utils.ts","../../../src/common/abstractPureComponent2.ts","../node_modules/cesium/Source/ThirdParty/Uri.js","../node_modules/cesium/Source/Core/RequestState.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../src/common/position.ts","../../../src/common/utils/functionUtils.ts","../../../src/common/utils/index.ts","../node_modules/react-dom/index.js","../node_modules/webpack/buildin/global.js","../node_modules/cesium/Source/Core/Request.js","../node_modules/cesium/Source/Core/RequestType.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/micromark/dist/character/markdown-line-ending.js","../node_modules/micromark/dist/tokenize/factory-space.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/mdast-util-to-hast/lib/all.js","../../../src/components/html/html.tsx","../../../src/components/hotkeys/hotkeyParser.ts","../../../src/common/intent.ts","../node_modules/lodash/isArray.js","../../../src/common/rect.ts","../node_modules/unist-builder/index.js","../node_modules/lodash/isObject.js","../node_modules/react-popper/lib/esm/Manager.js","../node_modules/react-popper/lib/esm/utils.js","../node_modules/react-popper/lib/esm/Reference.js","../node_modules/react-popper/lib/esm/Popper.js","../../../src/components/popover/popperUtils.ts","../../../src/components/popover/popoverArrow.tsx","../../../src/components/popover/popoverMigrationUtils.ts","../../../src/components/popover/popover.tsx","../../../src/components/button/abstractButton.tsx","../../../src/components/button/buttons.tsx","../node_modules/cesium/Source/Core/queryToObject.js","../../../src/components/slider/sliderUtils.ts","../../../src/components/slider/handle.tsx","../../../src/components/slider/multiSlider.tsx","../node_modules/lodash/_root.js","../node_modules/cesium/Source/Core/RequestScheduler.js","../node_modules/buffer/index.js","../node_modules/process/browser.js","../node_modules/reactcss/lib/index.js","../node_modules/lodash/isObjectLike.js","../../../src/components/overlay/overlay.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/superPropBase.js","../../../src/common/boundary.ts","../../../src/generated/iconNames.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/micromark/dist/character/markdown-space.js","../node_modules/micromark/dist/util/chunked-splice.js","../node_modules/micromark/dist/character/markdown-line-ending-or-space.js","../node_modules/cesium/Source/Core/getAbsoluteUri.js","../../../src/components/hotkeys/hotkey.tsx","../node_modules/deep-equal/index.js","../../../src/components/hotkeys/hotkeysDialog.tsx","../../../src/common/elevation.ts","../../../src/common/utils/jsUtils.ts","../node_modules/inherits/inherits_browser.js","../node_modules/micromark/dist/util/regex-check.js","../node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/micromark/dist/util/shallow.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_getNative.js","../../../src/common/refs.ts","../../../src/components/resize-sensor/resizeSensor.tsx","../node_modules/cesium/Source/Core/RequestErrorEvent.js","../../../src/components/slider/handleProps.tsx","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/redux/es/createStore.js","../node_modules/redux/es/combineReducers.js","../node_modules/redux/es/bindActionCreators.js","../node_modules/redux/es/compose.js","../node_modules/redux/es/applyMiddleware.js","../node_modules/@babel/runtime/helpers/extends.js","../node_modules/property-information/lib/util/create.js","../node_modules/lodash/isArrayLike.js","../node_modules/cesium/Source/Core/getExtensionFromUri.js","../node_modules/cesium/Source/Core/isBlobUri.js","../node_modules/cesium/Source/Core/isCrossOriginUrl.js","../node_modules/cesium/Source/Core/isDataUri.js","../node_modules/cesium/Source/Core/loadAndExecuteScript.js","../node_modules/cesium/Source/Core/objectToQuery.js","../node_modules/cesium/Source/ThirdParty/protobuf-minimal.js","../../../src/components/menu/menu.tsx","../../../src/components/menu/menuItem.tsx","../../../src/components/text/text.tsx","../../../src/components/button/buttonGroup.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/cesium/Source/ThirdParty/knockout-3.5.1.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../src/common/alignment.ts","../node_modules/@babel/runtime/helpers/inheritsLoose.js","../../../src/common/loadableContent.tsx","../../../src/common/utils/reactUtils.ts","../node_modules/webpack/buildin/module.js","../node_modules/readable-stream/readable-browser.js","../node_modules/core-util-is/lib/util.js","../node_modules/define-properties/index.js","../node_modules/micromark/dist/constant/assign.js","../node_modules/micromark/dist/util/prefix-size.js","../node_modules/micromark/dist/character/ascii-alphanumeric.js","../node_modules/mdast-util-to-hast/lib/wrap.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/keys.js","../node_modules/lodash/eq.js","../node_modules/lodash/_copyObject.js","../node_modules/lodash/keysIn.js","../node_modules/cesium/Source/Core/TrustedServers.js","../../../src/generated/iconSvgPaths.ts","../../../src/components/forms/controls.tsx","../../../src/components/tabs/tab.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../src/cell/formats/truncatedFormat.tsx","../../../src/locator.ts","../../../src/cell/formats/jsonFormat.tsx","../../../src/cell/cell.tsx","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/js-cookie/src/js.cookie.js","../node_modules/process-nextick-args/index.js","../node_modules/pako/lib/utils/common.js","../node_modules/webpack/buildin/amd-options.js","../node_modules/deep-object-diff/dist/utils/index.js","../node_modules/micromark/dist/constant/from-char-code.js","../node_modules/micromark/dist/tokenize/partial-blank-line.js","../node_modules/micromark/dist/util/resolve-all.js","../node_modules/micromark/dist/character/ascii-alpha.js","../node_modules/mdurl/encode.js","../node_modules/property-information/lib/util/types.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/identity.js","../node_modules/lodash/_Stack.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/_toKey.js","../node_modules/cesium/Source/Core/appendForwardSlash.js","../node_modules/cesium/Source/Core/getBaseUri.js","../node_modules/cesium/Source/Core/parseResponseHeaders.js","../node_modules/cesium/Source/Core/Heap.js","../../../src/common/keys.ts","../../../src/components/index.ts","../../../src/components/tooltip/tooltip.tsx","../../../src/components/portal/portal.tsx","../../../src/components/menu/menuDivider.tsx","../../../src/components/overflow-list/overflowList.tsx","../../../src/components/breadcrumbs/breadcrumb.tsx","../../../src/components/spinner/spinner.tsx","../../../src/components/collapse/collapse.tsx","../../../src/components/forms/controlGroup.tsx","../../../src/components/forms/inputGroup.tsx","../../../src/components/hotkeys/hotkeys.tsx","../../../src/components/hotkeys/keyCombo.tsx","../../../src/components/navbar/navbarDivider.tsx","../../../src/components/navbar/navbarGroup.tsx","../../../src/components/navbar/navbarHeading.tsx","../../../src/components/toast/toast.tsx","../../../src/components/tree/treeNode.tsx","../node_modules/copy-to-clipboard/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../../src/common/utils/compareUtils.ts","../../../src/components/context-menu/contextMenu.tsx","../../src/MatomoContext.tsx","../node_modules/invariant/browser.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/index.js","../node_modules/react-color/lib/components/sketch/Sketch.js","../node_modules/object-assign/index.js","../node_modules/url/url.js","../node_modules/events/events.js","../node_modules/readable-stream/node_modules/safe-buffer/index.js","../node_modules/readable-stream/lib/_stream_writable.js","../node_modules/micromark/dist/util/normalize-identifier.js","../node_modules/micromark/dist/util/miniflat.js","../node_modules/micromark/dist/util/chunked-push.js","../node_modules/micromark/dist/character/unicode-punctuation.js","../node_modules/micromark/dist/character/unicode-whitespace.js","../node_modules/micromark/dist/character/ascii-control.js","../node_modules/micromark/dist/tokenize/label-end.js","../node_modules/unist-util-visit/index.js","../node_modules/repeat-string/index.js","../node_modules/lodash/forOwn.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/_isIndex.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/isLength.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_getPrototype.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_getSymbols.js","../node_modules/lodash/_isKey.js","../node_modules/lodash/_baseAssignValue.js","../node_modules/lodash/_cloneArrayBuffer.js","../node_modules/react-color/lib/components/common/index.js","../node_modules/react-color/lib/components/common/Checkboard.js","../node_modules/react-is/index.js","../node_modules/warning/warning.js","../node_modules/symbol-observable/es/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/create-react-context/lib/index.js","../../../src/utils/isBrowser.js","../../../src/utils/debounce.js","../../../src/utils/isFunction.js","../../../src/utils/getStyleComputedProperty.js","../../../src/utils/getParentNode.js","../../../src/utils/getScrollParent.js","../../../src/utils/getReferenceNode.js","../../../src/utils/isIE.js","../../../src/utils/getOffsetParent.js","../../../src/utils/getRoot.js","../../../src/utils/findCommonOffsetParent.js","../../../src/utils/isOffsetContainer.js","../../../src/utils/getScroll.js","../../../src/utils/includeScroll.js","../../../src/utils/getBordersSize.js","../../../src/utils/getWindowSizes.js","../../../src/utils/getClientRect.js","../../../src/utils/getBoundingClientRect.js","../../../src/utils/getOffsetRectRelativeToArbitraryNode.js","../../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../../../src/utils/isFixed.js","../../../src/utils/getFixedPositionOffsetParent.js","../../../src/utils/getBoundaries.js","../../../src/utils/computeAutoPlacement.js","../../../src/utils/getReferenceOffsets.js","../../../src/utils/getOuterSizes.js","../../../src/utils/getOppositePlacement.js","../../../src/utils/getPopperOffsets.js","../../../src/utils/find.js","../../../src/utils/runModifiers.js","../../../src/utils/findIndex.js","../../../src/methods/update.js","../../../src/utils/isModifierEnabled.js","../../../src/utils/getSupportedPropertyName.js","../../../src/methods/destroy.js","../../../src/utils/getWindow.js","../../../src/utils/setupEventListeners.js","../../../src/methods/enableEventListeners.js","../../../src/methods/disableEventListeners.js","../../../src/utils/removeEventListeners.js","../../../src/utils/isNumeric.js","../../../src/utils/setStyles.js","../../../src/modifiers/computeStyle.js","../../../src/utils/isModifierRequired.js","../../../src/methods/placements.js","../../../src/utils/clockwise.js","../../../src/modifiers/flip.js","../../../src/modifiers/offset.js","../../../src/modifiers/index.js","../../../src/methods/defaults.js","../../../src/modifiers/shift.js","../../../src/modifiers/preventOverflow.js","../../../src/modifiers/keepTogether.js","../../../src/modifiers/arrow.js","../../../src/utils/getOppositeVariation.js","../../../src/modifiers/inner.js","../../../src/modifiers/hide.js","../../../src/utils/getRoundedOffsets.js","../../../src/modifiers/applyStyle.js","../../../src/utils/setAttributes.js","../../../src/index.js","../node_modules/deep-object-diff/dist/index.js","../node_modules/isarray/index.js","../node_modules/stream-http/index.js","../node_modules/stream-http/lib/capability.js","../node_modules/stream-http/lib/response.js","../node_modules/readable-stream/lib/_stream_readable.js","../node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/node-libs-browser/node_modules/string_decoder/lib/string_decoder.js","../node_modules/readable-stream/lib/_stream_transform.js","../node_modules/xtend/immutable.js","../node_modules/node-libs-browser/node_modules/assert/assert.js","../node_modules/node-libs-browser/node_modules/util/util.js","../node_modules/pako/lib/zlib/adler32.js","../node_modules/pako/lib/zlib/crc32.js","../../../src/common/abstractComponent2.ts","../../../src/common/colors.ts","../../../src/common/utils/domUtils.ts","../../../src/common/utils/safeInvokeMember.ts","../../../src/common/configureDom4.ts","../node_modules/@blueprintjs/core/node_modules/react-transition-group/Transition.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/utils/PropTypes.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/TransitionGroup.js","../node_modules/object-keys/index.js","../node_modules/object-keys/isArguments.js","../node_modules/es-abstract/helpers/callBind.js","../node_modules/function-bind/index.js","../node_modules/has-symbols/index.js","../node_modules/object-is/implementation.js","../node_modules/object-is/polyfill.js","../node_modules/regexp.prototype.flags/implementation.js","../node_modules/regexp.prototype.flags/polyfill.js","../../../src/components/breadcrumbs/breadcrumbs.tsx","../../../src/components/callout/callout.tsx","../../../src/components/card/card.tsx","../../../src/components/dialog/dialog.tsx","../../../src/components/drawer/drawer.tsx","../../../src/components/forms/formGroup.tsx","../../../src/components/forms/radioGroup.tsx","../../../src/components/html-select/htmlSelect.tsx","../../../src/components/html-table/htmlTable.tsx","../../../src/components/hotkeys/index.ts","../../../src/components/navbar/navbar.tsx","../../../src/components/non-ideal-state/nonIdealState.tsx","../../../src/components/popover/popoverSharedProps.ts","../../../src/components/progress-bar/progressBar.tsx","../../../src/components/slider/rangeSlider.tsx","../../../src/components/slider/slider.tsx","../../../src/components/tag/tag.tsx","../../../src/components/toast/toaster.tsx","../../../src/components/tree/tree.tsx","../node_modules/deep-object-diff/dist/added/index.js","../node_modules/deep-object-diff/dist/deleted/index.js","../node_modules/deep-object-diff/dist/updated/index.js","../node_modules/vfile/index.js","../node_modules/unist-util-stringify-position/index.js","../node_modules/micromark/dist/constant/has-own-property.js","../node_modules/micromark/dist/util/size-chunks.js","../node_modules/micromark/dist/util/subtokenize.js","../node_modules/micromark/dist/initialize/text.js","../node_modules/micromark/dist/util/combine-extensions.js","../node_modules/micromark/dist/util/classify-character.js","../node_modules/parse-entities/decode-entity.browser.js","../node_modules/micromark/dist/character/ascii-digit.js","../node_modules/micromark/dist/tokenize/factory-destination.js","../node_modules/micromark/dist/tokenize/factory-label.js","../node_modules/micromark/dist/tokenize/factory-whitespace.js","../node_modules/micromark/dist/tokenize/factory-title.js","../node_modules/micromark/dist/tokenize/thematic-break.js","../node_modules/unist-util-visit-parents/index.js","../node_modules/unist-util-is/convert.js","../node_modules/unist-util-position/index.js","../node_modules/mdast-util-to-hast/lib/one.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/normalize.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/aria.js","../node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","../node_modules/brace/index.js","../node_modules/webpack/buildin/amd-define.js","../node_modules/lodash.isequal/index.js","../node_modules/react-ace/lib/editorOptions.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_baseForOwn.js","../node_modules/lodash/_baseFor.js","../node_modules/lodash/_arrayLikeKeys.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_castFunction.js","../node_modules/lodash/isPlainObject.js","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsEqual.js","../node_modules/lodash/_equalArrays.js","../node_modules/lodash/_Uint8Array.js","../node_modules/lodash/_getAllKeys.js","../node_modules/lodash/_baseGetAllKeys.js","../node_modules/lodash/_arrayPush.js","../node_modules/lodash/stubArray.js","../node_modules/lodash/_isStrictComparable.js","../node_modules/lodash/_matchesStrictComparable.js","../node_modules/lodash/_baseGet.js","../node_modules/lodash/_castPath.js","../node_modules/lodash/_baseEach.js","../node_modules/lodash/_arrayEach.js","../node_modules/lodash/_assignValue.js","../node_modules/lodash/_defineProperty.js","../node_modules/lodash/_cloneBuffer.js","../node_modules/lodash/_copyArray.js","../node_modules/lodash/_getSymbolsIn.js","../node_modules/lodash/_cloneTypedArray.js","../node_modules/lodash/_initCloneObject.js","../node_modules/lodash/merge.js","../node_modules/lodash/_assignMergeValue.js","../node_modules/lodash/_safeGet.js","../node_modules/lodash/debounce.js","../node_modules/react-color/lib/helpers/color.js","../../../src/common/itemListRenderer.ts","../../../src/common/listItemsProps.ts","../../../src/common/listItemsUtils.ts","../../../src/components/context-menu/contextMenuTarget.tsx","../../../src/common/utils/isDarkTheme.ts","../../../src/components/forms/numericInputUtils.ts","../../../src/components/forms/numericInput.tsx","../../../src/components/tabs/tabTitle.tsx","../../../src/components/tabs/tabs.tsx","../../../src/components/hotkeys/hotkeysEvents.ts","../../../src/components/hotkeys/hotkeysTarget.tsx","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/redux-thunk/es/index.js","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/attr-accept/dist/es/index.js","../../../src/column.tsx","../node_modules/react-markdown/src/react-markdown.js","../node_modules/remark-gfm/index.js","../node_modules/react-ace/lib/index.js","../node_modules/tslib/tslib.es6.js","../../../src/file.ts","../../../src/file-selector.ts","../node_modules/react-dropzone/dist/es/utils/index.js","../node_modules/react-dropzone/dist/es/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/webpack/buildin/harmony-module.js","../node_modules/redux-logger/dist/redux-logger.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/node-libs-browser/node_modules/punycode/punycode.js","../node_modules/url/util.js","../node_modules/querystring-es3/index.js","../node_modules/querystring-es3/decode.js","../node_modules/querystring-es3/encode.js","../node_modules/https-browserify/index.js","../node_modules/stream-http/lib/request.js","../node_modules/readable-stream/lib/internal/streams/BufferList.js","../node_modules/timers-browserify/main.js","../node_modules/setimmediate/setImmediate.js","../node_modules/util-deprecate/browser.js","../node_modules/safe-buffer/index.js","../node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/to-arraybuffer/index.js","../node_modules/builtin-status-codes/browser.js","../node_modules/browserify-zlib/lib/index.js","../node_modules/stream-browserify/index.js","../node_modules/readable-stream/writable-browser.js","../node_modules/readable-stream/duplex-browser.js","../node_modules/readable-stream/transform.js","../node_modules/readable-stream/passthrough.js","../node_modules/browserify-zlib/lib/binding.js","../node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","../node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js","../node_modules/pako/lib/zlib/zstream.js","../node_modules/pako/lib/zlib/deflate.js","../node_modules/pako/lib/zlib/trees.js","../node_modules/pako/lib/zlib/messages.js","../node_modules/pako/lib/zlib/inflate.js","../node_modules/pako/lib/zlib/inffast.js","../node_modules/pako/lib/zlib/inftrees.js","../node_modules/pako/lib/zlib/constants.js","../node_modules/toggle-selection/index.js","../node_modules/dom4/build/dom4.max.js","../node_modules/create-react-context/lib/implementation.js","../node_modules/gud/index.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/CSSTransition.js","../node_modules/dom-helpers/class/addClass.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/dom-helpers/class/hasClass.js","../node_modules/dom-helpers/class/removeClass.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/ReplaceTransition.js","../node_modules/@blueprintjs/core/node_modules/react-transition-group/utils/ChildMapping.js","../node_modules/object-keys/implementation.js","../node_modules/is-arguments/index.js","../node_modules/object-is/index.js","../node_modules/function-bind/implementation.js","../node_modules/es-abstract/GetIntrinsic.js","../node_modules/has-symbols/shams.js","../node_modules/object-is/shim.js","../node_modules/is-regex/index.js","../node_modules/regexp.prototype.flags/index.js","../node_modules/regexp.prototype.flags/shim.js","../node_modules/is-date-object/index.js","../node_modules/deep-object-diff/dist/diff/index.js","../node_modules/deep-object-diff/dist/detailed/index.js","../node_modules/vfile/lib/index.js","../node_modules/vfile-message/index.js","../node_modules/vfile/lib/core.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/node_modules/is-buffer/index.js","../node_modules/unified/index.js","../node_modules/bail/index.js","../node_modules/unified/node_modules/is-buffer/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/index.js","../node_modules/trough/wrap.js","../node_modules/remark-parse/index.js","../node_modules/mdast-util-from-markdown/index.js","../node_modules/mdast-util-from-markdown/dist/index.js","../node_modules/mdast-util-to-string/index.js","../node_modules/micromark/dist/util/safe-from-int.js","../node_modules/micromark/dist/parse.js","../node_modules/micromark/dist/initialize/content.js","../node_modules/micromark/dist/initialize/document.js","../node_modules/micromark/dist/initialize/flow.js","../node_modules/micromark/dist/tokenize/content.js","../node_modules/micromark/dist/constant/splice.js","../node_modules/micromark/dist/util/create-tokenizer.js","../node_modules/micromark/dist/util/serialize-chunks.js","../node_modules/micromark/dist/util/slice-chunks.js","../node_modules/micromark/dist/constructs.js","../node_modules/micromark/dist/tokenize/attention.js","../node_modules/micromark/dist/constant/unicode-punctuation-regex.js","../node_modules/micromark/dist/util/move-point.js","../node_modules/micromark/dist/tokenize/autolink.js","../node_modules/micromark/dist/character/ascii-atext.js","../node_modules/micromark/dist/tokenize/block-quote.js","../node_modules/micromark/dist/tokenize/character-escape.js","../node_modules/micromark/dist/character/ascii-punctuation.js","../node_modules/micromark/dist/tokenize/character-reference.js","../node_modules/micromark/dist/character/ascii-hex-digit.js","../node_modules/micromark/dist/tokenize/code-fenced.js","../node_modules/micromark/dist/tokenize/code-indented.js","../node_modules/micromark/dist/tokenize/code-text.js","../node_modules/micromark/dist/tokenize/definition.js","../node_modules/micromark/dist/tokenize/hard-break-escape.js","../node_modules/micromark/dist/tokenize/heading-atx.js","../node_modules/micromark/dist/tokenize/html-flow.js","../node_modules/micromark/dist/constant/html-block-names.js","../node_modules/micromark/dist/constant/html-raw-names.js","../node_modules/micromark/dist/tokenize/html-text.js","../node_modules/micromark/dist/tokenize/label-start-image.js","../node_modules/micromark/dist/tokenize/label-start-link.js","../node_modules/micromark/dist/tokenize/line-ending.js","../node_modules/micromark/dist/tokenize/list.js","../node_modules/micromark/dist/tokenize/setext-underline.js","../node_modules/micromark/dist/preprocess.js","../node_modules/micromark/dist/postprocess.js","../node_modules/remark-rehype/index.js","../node_modules/mdast-util-to-hast/index.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/unist-util-visit-parents/color.browser.js","../node_modules/unist-util-generated/index.js","../node_modules/mdast-util-definitions/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/property-information/html.js","../node_modules/property-information/lib/html.js","../node_modules/react-markdown/src/rehype-filter.js","../node_modules/react-markdown/src/uri-transformer.js","../node_modules/react-markdown/src/ast-to-react.js","../node_modules/react-markdown/node_modules/react-is/index.js","../node_modules/react-markdown/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/property-information/svg.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/find.js","../node_modules/space-separated-tokens/index.js","../node_modules/comma-separated-tokens/index.js","../node_modules/style-to-object/index.js","../node_modules/inline-style-parser/index.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/micromark-extension-gfm/syntax.js","../node_modules/micromark-extension-gfm-autolink-literal/index.js","../node_modules/micromark-extension-gfm-autolink-literal/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/index.js","../node_modules/micromark-extension-gfm-table/index.js","../node_modules/micromark-extension-gfm-table/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/index.js","../node_modules/micromark-extension-gfm-task-list-item/syntax.js","../node_modules/mdast-util-gfm/from-markdown.js","../node_modules/mdast-util-gfm-autolink-literal/from-markdown.js","../node_modules/ccount/index.js","../node_modules/mdast-util-find-and-replace/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-gfm-strikethrough/from-markdown.js","../node_modules/mdast-util-gfm-table/from-markdown.js","../node_modules/mdast-util-gfm-task-list-item/from-markdown.js","../node_modules/mdast-util-gfm/to-markdown.js","../node_modules/mdast-util-gfm-autolink-literal/to-markdown.js","../node_modules/mdast-util-gfm-strikethrough/to-markdown.js","../node_modules/mdast-util-gfm-table/to-markdown.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-gfm-task-list-item/to-markdown.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/util/container-flow.js","../node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","../node_modules/mdast-util-to-markdown/lib/configure.js","../node_modules/react-ace/lib/ace.js","../node_modules/react-ace/lib/split.js","../node_modules/lodash.get/index.js","../node_modules/brace/ext/split.js","../node_modules/brace/mode/python.js","../node_modules/brace/theme/monokai.js","../node_modules/reactcss/lib/flattenNames.js","../node_modules/lodash/isString.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_createBaseFor.js","../node_modules/lodash/_baseTimes.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/map.js","../node_modules/lodash/_baseIteratee.js","../node_modules/lodash/_baseMatches.js","../node_modules/lodash/_baseIsMatch.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_stackClear.js","../node_modules/lodash/_stackDelete.js","../node_modules/lodash/_stackGet.js","../node_modules/lodash/_stackHas.js","../node_modules/lodash/_stackSet.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_baseIsEqualDeep.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_arraySome.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_equalByTag.js","../node_modules/lodash/_mapToArray.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_equalObjects.js","../node_modules/lodash/_arrayFilter.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_getMatchData.js","../node_modules/lodash/_baseMatchesProperty.js","../node_modules/lodash/get.js","../node_modules/lodash/_stringToPath.js","../node_modules/lodash/_memoizeCapped.js","../node_modules/lodash/memoize.js","../node_modules/lodash/toString.js","../node_modules/lodash/_baseToString.js","../node_modules/lodash/hasIn.js","../node_modules/lodash/_baseHasIn.js","../node_modules/lodash/_hasPath.js","../node_modules/lodash/property.js","../node_modules/lodash/_baseProperty.js","../node_modules/lodash/_basePropertyDeep.js","../node_modules/lodash/_baseMap.js","../node_modules/lodash/_createBaseEach.js","../node_modules/reactcss/lib/mergeClasses.js","../node_modules/lodash/cloneDeep.js","../node_modules/lodash/_baseClone.js","../node_modules/lodash/_baseAssign.js","../node_modules/lodash/_baseAssignIn.js","../node_modules/lodash/_baseKeysIn.js","../node_modules/lodash/_nativeKeysIn.js","../node_modules/lodash/_copySymbols.js","../node_modules/lodash/_copySymbolsIn.js","../node_modules/lodash/_getAllKeysIn.js","../node_modules/lodash/_initCloneArray.js","../node_modules/lodash/_initCloneByTag.js","../node_modules/lodash/_cloneDataView.js","../node_modules/lodash/_cloneRegExp.js","../node_modules/lodash/_cloneSymbol.js","../node_modules/lodash/_baseCreate.js","../node_modules/lodash/isMap.js","../node_modules/lodash/_baseIsMap.js","../node_modules/lodash/isSet.js","../node_modules/lodash/_baseIsSet.js","../node_modules/reactcss/lib/autoprefix.js","../node_modules/reactcss/lib/components/hover.js","../node_modules/reactcss/lib/components/active.js","../node_modules/reactcss/lib/loop.js","../node_modules/lodash/_baseMerge.js","../node_modules/lodash/_baseMergeDeep.js","../node_modules/lodash/isArrayLikeObject.js","../node_modules/lodash/toPlainObject.js","../node_modules/lodash/_createAssigner.js","../node_modules/lodash/_baseRest.js","../node_modules/lodash/_overRest.js","../node_modules/lodash/_apply.js","../node_modules/lodash/_setToString.js","../node_modules/lodash/_baseSetToString.js","../node_modules/lodash/constant.js","../node_modules/lodash/_shortOut.js","../node_modules/lodash/_isIterateeCall.js","../node_modules/react-color/lib/components/common/Alpha.js","../node_modules/react-color/lib/helpers/alpha.js","../node_modules/react-color/lib/helpers/checkboard.js","../node_modules/react-color/lib/components/common/EditableInput.js","../node_modules/react-color/lib/components/common/Hue.js","../node_modules/react-color/lib/helpers/hue.js","../node_modules/react-color/lib/components/common/Raised.js","../node_modules/react-color/lib/components/common/Saturation.js","../node_modules/lodash/throttle.js","../node_modules/lodash/now.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/react-color/lib/helpers/saturation.js","../node_modules/react-color/lib/components/common/ColorWrap.js","../node_modules/lodash/each.js","../node_modules/lodash/forEach.js","../node_modules/tinycolor2/tinycolor.js","../node_modules/react-color/lib/components/common/Swatch.js","../node_modules/react-color/lib/helpers/interaction.js","../node_modules/react-color/lib/components/sketch/SketchFields.js","../node_modules/react-color/lib/components/sketch/SketchPresetColors.js","../../src/MatomoProvider.tsx","../../../src/common/direction.ts","../../../src/common/clipboard.ts","../../../src/common/context.ts","../../../src/regions.ts","../../../src/common/renderMode.ts","../../../src/common/grid.ts","../../../src/common/internal/focusedCellUtils.ts","../../../src/common/internal/scrollUtils.ts","../../../src/common/internal/selectionUtils.ts","../../../src/common/internal/directionUtils.ts","../../../src/interactions/resizeHandle.tsx","../../../src/interactions/dragEvents.ts","../../../src/interactions/draggable.tsx","../../../src/headers/headerCell.tsx","../../../src/headers/columnHeaderCell.tsx","../../../src/interactions/reorderable.tsx","../../../src/interactions/resizable.tsx","../../../src/common/internal/platformUtils.ts","../../../src/interactions/selectable.tsx","../../../src/headers/header.tsx","../../../src/headers/columnHeader.tsx","../../../src/headers/rowHeaderCell.tsx","../../../src/headers/rowHeader.tsx","../../../src/interactions/resizeSensor.ts","../../../src/quadrants/tableQuadrant.tsx","../../../src/layers/guides.tsx","../../../src/layers/regions.tsx","../../../src/quadrants/tableQuadrantStackCache.ts","../../../src/quadrants/tableQuadrantStack.tsx","../../../src/common/contextMenuTargetWrapper.tsx","../../../src/interactions/menus/menuContext.ts","../../../src/common/requestIdleCallback.ts","../../../src/common/batcher.ts","../../../src/tableBodyCells.tsx","../../../src/tableBody.tsx","../../../src/table.tsx","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/d3-fetch/src/text.js","../node_modules/d3-fetch/src/dsv.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/v4.js","../../src/constants.ts","../../src/index.ts","../../src/MatomoTracker.ts","../../src/instance.ts","../node_modules/@blueprintjs/select/node_modules/tslib/tslib.es6.js","../../../src/components/query-list/queryList.tsx","../../../src/components/select/select.tsx","../../../src/utils/useOutboundClickListener.tsx","../../src/useMatomo.ts"],"names":["defined","value","undefined","defaultValue","a","b","EMPTY_OBJECT","Object","freeze","module","exports","require","DeveloperError","message","stack","this","name","Error","e","create","prototype","constructor","toString","str","throwInstantiationError","Check","getFailedTypeErrorMessage","actual","expected","typeOf","test","getUndefinedErrorMessage","func","string","number","lessThan","limit","lessThanOrEquals","greaterThan","greaterThanOrEquals","object","bool","equals","name1","name2","test1","test2","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","_assertThisInitialized","self","ReferenceError","extendStatics","d","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","__assign","assign","t","s","n","call","__rest","indexOf","propertyIsEnumerable","__decorate","decorators","desc","c","r","Reflect","decorate","__spreadArrays","il","k","j","jl","reduceArray","slice","when","promiseOrValue","onFulfilled","onRejected","onProgress","resolve","then","promise","deferred","Promise","isPromise","defer","reason","reject","update","progress","rejected","_","handlers","progressHandlers","_then","_progress","_resolve","progressHandler","processQueue","noop","undef","promiseResolve","promiseReject","promiseProgress","resolver","val","err","some","promisesOrValues","howMany","checkCallbacks","toResolve","toReject","values","reasons","fulfillOne","rejectOne","len","Math","max","min","fulfiller","rejecter","all","map","identity","mapFunc","array","results","item","mapped","queue","handler","start","arrayOfCallbacks","arg","x","join","reduce","reduceFunc","args","total","current","any","chain","resolveValue","useResolveValue","always","onFulfilledOrRejected","otherwise","yield","spread","arr","reduced","TypeError","RuntimeError","Event","_listeners","_scopes","_toRemove","_insideRaiseEvent","compareNumber","numberOfListeners","get","addEventListener","listener","scope","event","removeEventListener","listeners","scopes","index","splice","raiseEvent","toRemove","sort","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","configurable","writable","_createClass","protoProps","staticProps","hasOwn","classNames","classes","argType","isArray","inner","default","_inherits","subClass","superClass","_typeof","obj","Symbol","iterator","_possibleConstructorReturn","assertThisInitialized","_createSuper","Derived","result","Super","getPrototypeOf","isNativeReflectConstruct","NewTarget","construct","supportsImageBitmapOptionsPromise","xhrBlobSupported","xhr","XMLHttpRequest","open","responseType","parseQuery","uri","resource","merge","preserveQueryParameters","query","queryString","queryToObject","_queryParameters","combineQueryParameters","defaultClone","defaultVal","clone","checkAndResetRequest","request","state","RequestState","ISSUED","ACTIVE","UNISSUED","q1","q2","combine","param","q2Value","concat","Resource","options","url","_url","_templateValues","templateValues","queryParameters","headers","Request","proxy","retryCallback","retryAttempts","_retryCount","Uri","fragment","fetchImage","flipY","preferImageBitmap","requestFunction","crossOrigin","isDataUri","isBlobUri","isCrossOriginUrl","_Implementations","createImage","RequestScheduler","FAILED","retryOnError","retry","createIfNeeded","getDerivedResource","supportsImageBitmapOptions","createImageBitmap","fetchBlob","blob","imageOrientation","premultiplyAlpha","imageBitmap","isBlobSupported","getUrlComponent","set","extension","getExtensionFromUri","hasHeaders","queryObject","objectToQuery","stringifyQuery","replace","match","replacement","encodeURIComponent","getURL","setQueryParameters","params","useAsDefault","appendQueryParameters","setTemplateValues","template","getAbsoluteUri","error","that","getBaseUri","includeQuery","appendForwardSlash","fetchArrayBuffer","fetch","preferBlob","useImageBitmap","generatedBlobResource","generatedBlob","blobPromise","createImageBitmapFromBlob","blobUrl","window","URL","createObjectURL","image","revokeObjectURL","fetchText","fetchJson","Accept","JSON","parse","fetchXML","overrideMimeType","fetchJsonp","callbackParameterName","functionName","random","substring","callbackQuery","data","loadAndExecuteScript","_makeRequest","method","loadWithXhr","abort","cancelFunction","dataUriRegex","decodeDataUriText","isBase64","decodeURIComponent","atob","decodeDataUriArrayBuffer","byteString","buffer","ArrayBuffer","view","Uint8Array","charCodeAt","decodeResponse","loadWithHttpResponse","delete","head","post","put","patch","supportsImageBitmap","xhrDeferred","Image","onload","onerror","TrustedServers","contains","src","loadImageElement","noXMLHttpRequest","dataUriRegexResult","exec","withCredentials","setRequestHeader","localFile","location","origin","status","response","browserResponseType","splitHeaders","getAllResponseHeaders","trim","split","responseHeaders","line","parts","header","shift","responseXML","hasChildNodes","responseText","RequestErrorEvent","send","http","protocol","zlib","hostname","port","path","on","res","statusCode","chunkArray","chunk","Buffer","gunzip","resultUnzipped","end","loadWithHttpRequest","mimeType","Blob","type","DOMParser","parseFromString","decodeDataUri","_DefaultImplementations","DEFAULT","document","href","MersenneTwister","seed","Date","getTime","N","M","MATRIX_A","UPPER_MASK","LOWER_MASK","mt","mti","init_genrand","genrand_int32","y","mag01","kk","CesiumMath","sign","signNotZero","toSNorm","rangeMaximum","round","clamp","fromSNorm","normalize","rangeMinimum","sinh","exp","cosh","lerp","q","time","PI","ONE_OVER_PI","PI_OVER_TWO","PI_OVER_THREE","PI_OVER_FOUR","PI_OVER_SIX","THREE_PI_OVER_TWO","TWO_PI","ONE_OVER_TWO_PI","RADIANS_PER_DEGREE","DEGREES_PER_RADIAN","RADIANS_PER_ARCSECOND","toRadians","degrees","toDegrees","radians","convertLongitudeRange","angle","twoPi","simplified","floor","clampToLatitudeRange","negativePiToPi","zeroToTwoPi","mod","abs","EPSILON14","m","equalsEpsilon","left","right","relativeEpsilon","absoluteEpsilon","absDiff","factorials","factorial","sum","next","incrementWrap","maximumValue","minimumValue","isPowerOfTwo","nextPowerOfTwo","randomNumberGenerator","setRandomNumberSeed","nextRandomNumber","randomBetween","acosClamped","acos","asinClamped","asin","chordLength","radius","sin","logBase","base","log","cbrt","pow","log2","LOG2E","fog","distanceToCamera","density","scalar","fastApproximateAtan","fastApproximateAtan2","opposite","adjacent","oppositeOverAdjacent","isNaN","Cartesian3","z","fromSpherical","spherical","clock","cone","magnitude","radial","cos","fromElements","cartesian","fromCartesian4","packedLength","pack","startingIndex","unpack","packArray","resultLength","unpackArray","fromArray","maximumComponent","minimumComponent","minimumByComponent","first","second","maximumByComponent","magnitudeSquared","sqrt","distanceScratch","distance","subtract","distanceSquared","dot","multiplyComponents","divideComponents","add","multiplyByScalar","divideByScalar","negate","lerpScratch","angleBetweenScratch","angleBetweenScratch2","angleBetween","cosine","sine","cross","atan2","mostOrthogonalAxisScratch","mostOrthogonalAxis","f","UNIT_X","UNIT_Z","UNIT_Y","projectVector","equalsArray","offset","leftX","leftY","leftZ","rightX","rightY","rightZ","midpoint","fromDegrees","longitude","latitude","height","ellipsoid","fromRadians","scratchN","scratchK","wgs84RadiiSquared","radiiSquared","cosLatitude","gamma","fromDegreesArray","coordinates","fromRadiansArray","fromDegreesArrayHeights","fromRadiansArrayHeights","ZERO","scaleToGeodeticSurfaceIntersection","scaleToGeodeticSurfaceGradient","scaleToGeodeticSurface","oneOverRadii","oneOverRadiiSquared","centerToleranceSquared","positionX","positionY","positionZ","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","x2","y2","z2","squaredNorm","ratio","intersection","isFinite","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","gradient","xMultiplier","yMultiplier","zMultiplier","xMultiplier2","yMultiplier2","zMultiplier2","lambda","correction","EPSILON12","Cartographic","cartesianToCartographicN","cartesianToCartographicP","cartesianToCartographicH","wgs84OneOverRadii","wgs84OneOverRadiiSquared","wgs84CenterToleranceSquared","EPSILON1","fromCartesian","_centerToleranceSquared","h","toCartesian","cartographic","epsilon","initialize","_radii","_radiiSquared","_radiiToTheFourth","_oneOverRadii","_oneOverRadiiSquared","_minimumRadius","_maximumRadius","_squaredXOverSquaredZ","Ellipsoid","radii","radiiToTheFourth","minimumRadius","maximumRadius","fromCartesian3","WGS84","UNIT_SPHERE","MOON","LUNAR_RADIUS","geocentricSurfaceNormal","geodeticSurfaceNormalCartographic","geodeticSurfaceNormal","cartographicToCartesianNormal","cartographicToCartesianK","cartographicToCartesian","cartographicArrayToCartesianArray","cartographics","cartesianToCartographic","cartesianArrayToCartographicArray","cartesians","scaleToGeocentricSurface","beta","transformPositionToScaledSpace","position","transformPositionFromScaledSpace","getSurfaceNormalIntersectionWithZAxis","EPSILON15","squaredXOverSquaredZ","abscissas","weights","gaussLegendreQuadrature","xMean","xRange","dx","surfaceArea","rectangle","minLongitude","west","maxLongitude","east","minLatitude","south","maxLatitude","north","a2","b2","c2","a2b2","lat","sinPhi","cosPhi","lon","cosTheta","sinTheta","GeographicProjection","_ellipsoid","_semimajorAxis","_oneOverSemimajorAxis","project","semimajorAxis","unproject","oneOverEarthSemimajorAxis","OUTSIDE","INTERSECTING","INSIDE","Interval","stop","Matrix3","column0Row0","column1Row0","column2Row0","column0Row1","column1Row1","column2Row1","column0Row2","column1Row2","column2Row2","matrix","fromColumnMajorArray","fromRowMajorArray","fromQuaternion","quaternion","xy","xz","xw","w","yz","yw","zw","w2","m00","m01","m02","m10","m11","m12","m20","m21","m22","fromHeadingPitchRoll","headingPitchRoll","pitch","cosPsi","heading","roll","sinPsi","fromScale","scale","fromUniformScale","fromCrossProduct","vector","fromRotationX","cosAngle","sinAngle","fromRotationY","fromRotationZ","toArray","getElementIndex","column","row","getColumn","startIndex","setColumn","getRow","setRow","scratchColumn","getScale","scratchScale","getMaximumScale","multiply","multiplyByVector","vX","vY","vZ","multiplyByScale","transpose","UNIT","getRotation","inverseScale","rowVal","colVal","offDiagonalFrobeniusNorm","norm","temp","shurDecomposition","tolerance","maxDiagonal","rotAxis","tau","IDENTITY","jMatrix","jMatrixTranspose","computeEigenDecomposition","EPSILON20","count","sweep","unitaryMatrix","unitary","diagMatrix","diagonal","computeFrobeniusNorm","determinant","m31","m32","m13","m23","m33","inverse","COLUMN0ROW0","COLUMN0ROW1","COLUMN0ROW2","COLUMN1ROW0","COLUMN1ROW1","COLUMN1ROW2","COLUMN2ROW0","COLUMN2ROW1","COLUMN2ROW2","Cartesian4","fromColor","color","red","green","blue","alpha","UNIT_W","scratchFloatArray","Float32Array","packFloat","exponent","unpackFloat","packedFloat","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","unpacked","Matrix4","column3Row0","column3Row1","column3Row2","column0Row3","column1Row3","column2Row3","column3Row3","fromRotationTranslation","rotation","translation","fromTranslationQuaternionRotationScale","scaleX","scaleY","scaleZ","fromTranslationRotationScale","translationRotationScale","fromTranslation","fromCameraF","fromCameraR","fromCameraU","fromCamera","camera","direction","up","sX","sY","sZ","fX","fY","fZ","uX","uY","uZ","t0","t1","t2","computePerspectiveFieldOfView","fovY","aspectRatio","near","far","tan","computeOrthographicOffCenter","bottom","top","tx","ty","tz","computePerspectiveOffCenter","computeInfinitePerspectiveOffCenter","computeViewportTransformation","viewport","nearDepthRange","farDepthRange","width","halfWidth","halfHeight","halfDepth","computeView","setTranslation","scaleScratch","setScale","existingScale","newScale","left0","left1","left2","left3","left4","left5","left6","left7","left8","left9","left10","left11","left12","left13","left14","left15","right0","right1","right2","right3","right4","right5","right6","right7","right8","right9","right10","right11","right12","right13","right14","right15","multiplyTransformation","multiplyByMatrix3","multiplyByTranslation","uniformScaleScratch","multiplyByUniformScale","vW","multiplyByPointAsVector","multiplyByPoint","matrix1","matrix2","matrix3","matrix6","matrix7","matrix11","getTranslation","getMatrix3","scratchInverseRotation","scratchMatrix3Zero","scratchBottomRow","scratchExpectedBottomRow","src0","src1","src2","src3","src4","src5","src6","src7","src8","src9","src10","src11","src12","src13","src14","src15","tmp0","tmp1","tmp2","tmp3","tmp4","tmp5","tmp6","tmp7","tmp8","tmp9","tmp10","tmp11","dst0","dst1","dst2","dst3","dst4","dst5","dst6","dst7","dst8","dst9","dst10","dst11","dst12","dst13","dst14","dst15","det","EPSILON21","EPSILON7","inverseTransformation","matrix0","matrix4","matrix5","matrix8","matrix9","matrix10","COLUMN0ROW3","COLUMN1ROW3","COLUMN2ROW3","COLUMN3ROW0","COLUMN3ROW1","COLUMN3ROW2","COLUMN3ROW3","Rectangle","computeWidth","computeHeight","fromCartographicArray","MAX_VALUE","westOverIDL","eastOverIDL","lonAdjusted","fromCartesianArray","other","validate","southwest","northwest","northeast","southeast","center","otherRectangle","rectangleEast","rectangleWest","otherRectangleEast","otherRectangleWest","simpleIntersection","union","expand","subsampleLlaScratch","subsample","surfaceHeight","lla","BoundingSphere","fromPointsXMin","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","fromPoints","positions","currentPos","xMin","yMin","zMin","xMax","yMax","zMax","numPositions","xSpan","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","minBoxPt","maxBoxPt","naiveCenter","naiveRadius","oldCenterToPointSquared","oldCenterToPoint","oldToNew","defaultProjection","fromRectangle2DLowerLeft","fromRectangle2DUpperRight","fromRectangle2DSouthwest","fromRectangle2DNortheast","fromRectangle2D","projection","fromRectangleWithHeights2D","minimumHeight","maximumHeight","lowerLeft","upperRight","elevation","fromRectangle3DScratch","fromRectangle3D","fromVertices","stride","numElements","fromEncodedCartesianVertices","positionsHigh","positionsLow","fromCornerPoints","corner","oppositeCorner","fromEllipsoid","fromBoundingSpheresScratch","fromBoundingSpheres","boundingSpheres","tmp","fromOrientedBoundingBoxScratchU","fromOrientedBoundingBoxScratchV","fromOrientedBoundingBoxScratchW","fromOrientedBoundingBox","orientedBoundingBox","halfAxes","u","v","sphere","unionScratch","unionScratchCenter","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","centerSeparation","halfDistanceBetweenTangentPoints","expandScratch","point","intersectPlane","plane","normal","distanceToPlane","Intersect","transform","distanceSquaredToScratch","distanceSquaredTo","diff","transformWithoutScale","scratchCartesian3","computePlaneDistances","toCenter","mag","projectTo2DNormalScratch","projectTo2DEastScratch","projectTo2DNorthScratch","projectTo2DWestScratch","projectTo2DSouthScratch","projectTo2DCartographicScratch","projectTo2DPositionsScratch","projectTo2DProjection","projectTo2D","isOccluded","occluder","isBoundingSphereVisible","volume","baseResource","implementation","cesiumScriptRegex","tryMakeAbsolute","createElement","getCesiumBaseUrl","baseUrlString","CESIUM_BASE_URL","define","toUrlUndefined","toUrl","buildModuleUrl","scripts","getElementsByTagName","getAttribute","getBaseUrlFromCesiumScript","buildModuleUrlFromRequireToUrl","moduleID","buildModuleUrlFromBaseUrl","relativeUrl","_cesiumScriptRegex","_buildModuleUrlFromBaseUrl","_clearBaseResource","setBaseUrl","Cartesian2","GeographicTilingScheme","_rectangle","_projection","_numberOfLevelZeroTilesX","numberOfLevelZeroTilesX","_numberOfLevelZeroTilesY","numberOfLevelZeroTilesY","getNumberOfXTilesAtLevel","level","getNumberOfYTilesAtLevel","rectangleToNativeRectangle","tileXYToNativeRectangle","rectangleRadians","tileXYToRectangle","xTiles","yTiles","xTileWidth","yTileHeight","positionToTileXY","xTileCoordinate","yTileCoordinate","scratchDiagonalCartesianNE","scratchDiagonalCartesianSW","scratchDiagonalCartographic","scratchCenterCartesian","scratchSurfaceCartesian","scratchBoundingSphere","tilingScheme","scratchCorners","scratchTileXY","ApproximateTerrainHeights","getTileXYLevel","lastLevelX","lastLevelY","currentX","currentY","maxLevel","_terrainHeightsMaxLevel","failed","initPromise","_initPromise","json","_terrainHeights","getMinimumMaximumHeights","xyLevel","minTerrainHeight","_defaultMinTerrainHeight","maxTerrainHeight","_defaultMaxTerrainHeight","heights","surfacePosition","minimumTerrainHeight","maximumTerrainHeight","getBoundingSphere","initialized","html","svg","svgFilters","mathMl","text","html$1","svg$1","mathMl$1","xml","addToSet","l","toLowerCase","newObject","property","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","_toConsumableArray","arr2","from","getGlobal","purify","createDOMPurify","DOMPurify","root","version","removed","nodeType","isSupported","originalDocument","useDOMParser","removeTitle","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","Text","Comment","content","ownerDocument","_document","createNodeIterator","createDocumentFragment","importNode","hooks","createHTMLDocument","documentMode","MUSTACHE_EXPR$$1","ERB_EXPR$$1","DATA_ATTR$$1","ARIA_ATTR$$1","IS_SCRIPT_OR_DATA$$1","ATTR_WHITESPACE$$1","IS_ALLOWED_URI$$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_JQUERY","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_DOM_IMPORT","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","CONFIG","formElement","_parseConfig","cfg","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","ADD_URI_SAFE_ATTR","table","_forceRemove","node","element","parentNode","removeChild","outerHTML","_removeAttribute","attribute","getAttributeNode","removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","documentElement","body","firstElementChild","insertBefore","createTextNode","childNodes","querySelector","textContent","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","FILTER_ACCEPT","_isClobbered","elm","nodeName","attributes","setAttribute","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","tagName","allowedTags","insertAdjacentHTML","innerHTML","cloneNode","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","idAttr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","namespaceURI","id","setAttributeNS","pop","_sanitizeShadowDOM","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toStaticHTML","appendChild","firstChild","nodeIterator","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","nextCreditId","creditToId","Credit","showOnScreen","_id","_html","_showOnScreen","_element","div","_creditId","style","display","links","querySelectorAll","credit","getIonCredit","attribution","collapsible","_isIon","NONE","LERC","AxisAlignedBoundingBox","minimum","maximum","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ","box","intersectScratch","EllipsoidalOccluder","cameraPosition","_cameraPosition","_cameraPositionInScaledSpace","_distanceToLimbInScaledSpaceSquared","cv","vhMagnitudeSquared","scratchCartesian","isPointVisible","occludee","isScaledSpacePointVisible","occludeeScaledSpacePosition","scratchCameraPositionInScaledSpaceShrunk","isScaledSpacePointVisiblePossiblyUnderEllipsoid","computeHorizonCullingPoint","directionToPoint","computeHorizonCullingPointFromPositions","scratchEllipsoidShrunk","computeHorizonCullingPointPossiblyUnderEllipsoid","getPossiblyShrunkEllipsoid","computeHorizonCullingPointFromVertices","vertices","computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid","subsampleScratch","computeHorizonCullingPointFromRectangle","bs","scratchEllipsoidShrunkRadii","ellipsoidShrunkRadii","scaledSpaceDirectionToPoint","computeScaledSpaceDirectionToPoint","resultMagnitude","candidateMagnitude","computeMagnitude","magnitudeToPoint","positionScratch","cameraPositionInScaledSpace","distanceToLimbInScaledSpaceSquared","vt","vtDotVc","scaledSpaceScratch","directionScratch","scaledSpacePosition","cosBeta","directionToPointScratch","QuadraticRealPolynomial","addWithCancellationCheck","difference","computeDiscriminant","computeRealRoots","cMagnitude","aMagnitude","radicand","CubicRealPolynomial","temp1","A","B","C","D","AC","BD","B2","C2","delta1","delta2","delta3","discriminant","ABar","CBar","DBar","temp0","CBarA","DBarA","CBarD","DBarD","squareRootOfDiscriminant","halfSquareRootOf3","theta","temp3","numeratorLarge","denominatorLarge","root1","numeratorSmall","denominatorSmall","root3","F","root2","roots","Length","QuarticRealPolynomial","original","a3","a1","a0","a3Squared","cubicRoots","hSquared","root0","y0","y1","roots1","roots2","neumark","g2","h2","G","g","H","tempSquared","g1","h1","mError","nError","squareRootOfN","squareRootOfM","b3","c3","d2","d3","e2","Ray","ray","getPoint","IntersectionTests","denominator","scratchEdge0","scratchEdge1","scratchPVec","scratchTVec","scratchQVec","rayTriangleParametric","p0","p1","p2","cullBackFaces","tvec","edge0","edge1","EPSILON6","invDet","rayTriangle","scratchLineSegmentTriangleRay","lineSegmentTriangle","v0","v1","raySphereRoots","raySphere","denom","disc","solveQuadratic","scratchLineSegmentRay","lineSegmentSphere","maxT","scratchQ","scratchW","rayEllipsoid","product","inverseRadii","qw","qw2","firstAxisScratch","secondAxisScratch","thirdAxisScratch","referenceScratch","bCart","bScratch","btScratch","diScratch","dScratch","cScratch","tempMatrix","aScratch","sScratch","closestScratch","surfPointScratch","grazingAltitudeLocation","intersects","firstAxis","reference","secondAxis","thirdAxis","B_T","D_I","altitude","solutions","cosines","xSquared","wSquared","l2","l1","l0","r1","r0","cosine0","sine0","cosine1","sine1","r0Squared","r1Squared","r0r1","c4","c1","c0","cosineSquared","sineSquared","quadraticVectorExpression","closest","dotProduct","surfacePoint","lineSegmentPlaneDifference","lineSegmentPlane","endPoint0","endPoint1","nDotDiff","nDotP0","trianglePlaneIntersection","u1","u2","planeNormal","planeD","p0Behind","p1Behind","p2Behind","numBehind","indices","Plane","fromPointNormal","scratchNormal","coefficients","getPointDistance","projectPointOntoPlane","pointDistance","scaledNormal","scratchPosition","ORIGIN_XY_PLANE","ORIGIN_YZ_PLANE","ORIGIN_ZX_PLANE","binarySearch","itemToFind","comparator","comparison","low","high","EarthOrientationParametersSample","xPoleWander","yPoleWander","xPoleOffset","yPoleOffset","ut1MinusUtc","sprintf","regex","format","pad","chr","leftJustify","padding","justify","prefix","minWidth","zeroPad","customPadChar","formatBaseX","precision","formatString","doFormat","valueIndex","flags","textTransform","positivePrefix","prefixBaseX","flagsl","charAt","String","fromCharCode","toUpperCase","GregorianDate","year","month","day","hour","minute","millisecond","isLeapSecond","isLeapYear","LeapSecond","date","julianDate","SECONDS_PER_MILLISECOND","SECONDS_PER_MINUTE","MINUTES_PER_HOUR","HOURS_PER_DAY","SECONDS_PER_HOUR","MINUTES_PER_DAY","SECONDS_PER_DAY","DAYS_PER_JULIAN_CENTURY","PICOSECOND","MODIFIED_JULIAN_DATE_DIFFERENCE","UTC","TAI","gregorianDateScratch","daysInMonth","compareLeapSecondDates","leapSecond","dateToFind","JulianDate","compare","binarySearchScratchLeapSecond","convertUtcToTai","leapSeconds","secondsDifference","addSeconds","convertTaiToUtc","setComponents","wholeDays","secondsOfDay","extraDays","TimeConstants","dayNumber","computeJulianDateComponents","matchCalendarYear","matchCalendarMonth","matchOrdinalDate","matchWeekDate","matchCalendarDate","utcOffset","matchHours","matchHoursMinutes","matchHoursMinutesSeconds","iso8601ErrorMessage","julianDayNumber","timeStandard","TimeStandard","fromGregorianDate","components","fromDate","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","fromIso8601","iso8601String","inLeapYear","dashCount","offsetIndex","tokens","dayOfYear","weekNumber","dayOfWeek","getUTCDay","setUTCDate","offsetHours","offsetMinutes","getTimezoneOffset","now","toGregorianDateScratch","toGregorianDate","thisUtc","L","I","J","remainingSeconds","toDate","gDate","toIso8601","millisecondStr","toFixed","julianDayNumberDifference","totalDays","daysDifference","computeTaiMinusUtc","seconds","addMinutes","minutes","newSecondsOfDay","addHours","hours","addDays","days","EarthOrientationParameters","_dates","_samples","_dateColumn","_xPoleWanderRadiansColumn","_yPoleWanderRadiansColumn","_ut1MinusUtcSecondsColumn","_xCelestialPoleOffsetRadiansColumn","_yCelestialPoleOffsetRadiansColumn","_taiMinusUtcSecondsColumn","_columnCount","_lastIndex","_downloadPromise","_dataError","_addNewLeapSeconds","addNewLeapSeconds","onDataReady","eopData","columnNames","samples","eop","dateColumn","xPoleWanderRadiansColumn","yPoleWanderRadiansColumn","ut1MinusUtcSecondsColumn","xCelestialPoleOffsetRadiansColumn","yCelestialPoleOffsetRadiansColumn","taiMinusUtcSecondsColumn","lastTaiMinusUtc","dates","mjd","taiMinusUtc","leapSecondIndex","fillResultFromIndex","columnCount","linearInterp","interpolate","before","after","beforeDate","afterDate","factor","startBefore","startAfter","beforeUt1MinusUtc","afterUt1MinusUtc","offsetDifference","beforeTaiMinusUtc","afterTaiMinusUtc","getPromiseToLoad","compute","lastIndex","previousIndexDate","nextIndexDate","isAfterPrevious","isAfterLastSample","isBeforeNext","HeadingPitchRoll","denominatorRoll","numeratorRoll","denominatorHeading","numeratorHeading","Iau2006XysSample","Iau2006XysData","_xysFileUrlTemplate","xysFileUrlTemplate","_interpolationOrder","interpolationOrder","_sampleZeroJulianEphemerisDate","sampleZeroJulianEphemerisDate","_sampleZeroDateTT","_stepSizeDays","stepSizeDays","_samplesPerXysFile","samplesPerXysFile","_totalSamples","totalSamples","_chunkDownloadsInProgress","order","_denominators","xTable","_xTable","stepN","_work","_coef","julianDateScratch","getDaysSinceEpoch","xys","dayTT","secondTT","dateTT","requestXysChunk","xysData","chunkIndex","chunkUrl","newSamples","preload","startDayTT","startSecondTT","stopDayTT","stopSecondTT","startDaysSinceEpoch","stopDaysSinceEpoch","stopIndex","startChunk","stopChunk","promises","computeXysRadians","daysSinceEpoch","centerIndex","degree","firstIndex","isDataMissing","work","coef","sampleIndex","_supportsFullscreen","_names","requestFullscreen","exitFullscreen","fullscreenEnabled","fullscreenElement","fullscreenchange","fullscreenerror","Fullscreen","supportsFullscreen","changeEventName","errorEventName","enabled","fullscreen","prefixes","vrDevice","vrDisplay","theNavigator","isChromeResult","chromeVersionResult","isSafariResult","safariVersionResult","isWebkitResult","webkitVersionResult","isInternetExplorerResult","internetExplorerVersionResult","isEdgeResult","edgeVersionResult","isFirefoxResult","firefoxVersionResult","isWindowsResult","hasPointerEvents","imageRenderingValueResult","supportsImageRenderingPixelatedResult","extractVersion","versionString","parseInt","isChrome","isEdge","fields","userAgent","isSafari","isWebkit","isNightly","isInternetExplorer","appName","isFirefox","supportsImageRenderingPixelated","canvas","imageRendering","supportsWebP","_result","navigator","_promise","supportsWebPDeferred","typedArrayTypes","Int8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float64Array","Uint8ClampedArray","FeatureDetection","chromeVersion","safariVersion","webkitVersion","internetExplorerVersion","edgeVersion","firefoxVersion","isWindows","appVersion","hardwareConcurrency","supportsPointerEvents","PointerEvent","pointerEnabled","imageRenderingValue","Worker","WebAssembly","Quaternion","fromAxisAngleScratch","fromAxisAngle","axis","halfAngle","fromRotationMatrixNext","fromRotationMatrixQuat","fromRotationMatrix","trace","quat","scratchHPRQuaternion","scratchHeadingQuaternion","scratchPitchQuaternion","scratchRollQuaternion","sampledQuaternionAxis","sampledQuaternionRotation","sampledQuaternionTempQuaternion","sampledQuaternionQuaternion0","sampledQuaternionQuaternion0Conjugate","packedInterpolationLength","convertPackedArrayForInterpolation","packedArray","conjugate","computeAxis","computeAngle","unpackInterpolationResult","sourceArray","inverseMagnitude","leftW","rightW","slerpEndNegated","slerpScaledP","slerpScaledR","slerp","thetaOverSinTheta","sinThetaOverTheta","squadScratchCartesian0","squadScratchCartesian1","squadScratchQuaternion0","squadScratchQuaternion1","computeInnerQuadrangle","q0","qInv","cart0","cart1","squad","s0","s1","slerp0","slerp1","fastSlerpScratchQuaternion","opmu","supportsTypedArrays","bT","bD","fastSlerp","xm1","sqrT","sqrD","cT","cD","fastSquad","Transforms","vectorProductLocalFrame","down","degeneratePositionLocalFrame","localFrameToFixedFrameCache","scratchCalculateCartesian","scratchFirstCartesian","scratchSecondCartesian","scratchThirdCartesian","localFrameToFixedFrameGenerator","resultat","hashAxis","eastNorthUpToFixedFrame","northEastDownToFixedFrame","northUpEastToFixedFrame","northWestUpToFixedFrame","scratchHPRMatrix4","headingPitchRollToFixedFrame","fixedFrameTransform","hprQuaternion","hprMatrix","scratchENUMatrix4","scratchHPRMatrix3","headingPitchRollQuaternion","noScale","hprCenterScratch","ffScratch","hprTransformScratch","hprRotationScratch","hprQuaternionScratch","fixedFrameToHeadingPitchRoll","toFixedFrame","transformCopy","quaternionRotation","twoPiOverSecondsInDay","dateInUtc","computeTemeToPseudoFixedMatrix","utcDayNumber","utcSecondsIntoDay","diffDays","gha","cosGha","sinGha","iau2006XysData","earthOrientationParameters","preloadIcrfFixed","timeInterval","xysPromise","eopPromise","computeIcrfToFixedMatrix","fixedToIcrfMtx","computeFixedToIcrfMatrix","xysScratch","eopScratch","rotation1Scratch","rotation2Scratch","rotation1","rotation2","matrixQ","daysSinceJ2000","fractionOfDay","era","earthRotation","pfToIcrf","cosxp","cosyp","sinxp","sinyp","ttt","sp","cossp","sinsp","fToPfMtx","pointToWindowCoordinatesTemp","pointToWindowCoordinates","modelViewProjectionMatrix","viewportTransformation","pointToGLWindowCoordinates","normalScratch","rightScratch","upScratch","rotationMatrixFromPositionVelocity","velocity","swizzleMatrix","scratchCartographic","scratchCartesian3Projection","scratchCenter","scratchRotation","scratchFromENU","scratchToENU","basisTo2D","rtcCenter","projectedPosition","fromENU","toENU","local","wgs84To2DModelMatrix","scratchCart4","EllipsoidTangentPlane","eastNorthUp","_origin","_xAxis","_yAxis","_plane","xAxis","yAxis","zAxis","scratchProjectPointOntoPlaneRay","scratchProjectPointOntoPlaneCartesian3","intersectionPoint","rayPlane","projectPointsOntoPlane","projectPointToNearestOnPlane","projectPointsToNearestOnPlane","projectPointsOntoEllipsoidScratch","projectPointOntoEllipsoid","projectPointsOntoEllipsoid","OrientedBoundingBox","scratchCartesian1","scratchCartesian2","scratchCartesian4","scratchCartesian5","scratchCartesian6","scratchCovarianceResult","scratchEigenResult","meanPoint","invLength","exx","exy","exz","eyy","eyz","ezz","covarianceMatrix","eigenDecomposition","v2","v3","u3","l3","scratchOffset","fromPlaneExtents","planeOrigin","planeXAxis","planeYAxis","planeZAxis","centerOffset","scratchRectangleCenterCartographic","scratchRectangleCenter","scratchPerimeterCartographicNC","scratchPerimeterCartographicNW","scratchPerimeterCartographicCW","scratchPerimeterCartographicSW","scratchPerimeterCartographicSC","scratchPerimeterCartesianNC","scratchPerimeterCartesianNW","scratchPerimeterCartesianCW","scratchPerimeterCartesianSW","scratchPerimeterCartesianSC","scratchPerimeterProjectedNC","scratchPerimeterProjectedNW","scratchPerimeterProjectedCW","scratchPerimeterProjectedSW","scratchPerimeterProjectedSC","scratchPlaneOrigin","scratchPlaneNormal","scratchPlaneXAxis","scratchHorizonCartesian","scratchHorizonProjected","scratchMaxY","scratchMinY","scratchZ","scratchPlane","fromRectangle","minX","maxX","minY","maxY","minZ","maxZ","tangentPointCartographic","tangentPoint","tangentPlane","lonCenter","latCenter","perimeterCartographicNC","perimeterCartographicNW","perimeterCartographicCW","perimeterCartographicSW","perimeterCartographicSC","perimeterCartesianNC","perimeterCartesianNW","perimeterCartesianCW","perimeterCartesianSW","perimeterCartesianSC","perimeterProjectedNC","perimeterProjectedNW","perimeterProjectedCW","perimeterProjectedSW","perimeterProjectedSC","fullyAboveEquator","fullyBelowEquator","latitudeNearestToEquator","centerLongitude","EPSILON10","horizonCartesian","farZ","normalX","normalY","normalZ","radEffective","scratchCartesianU","scratchCartesianV","scratchCartesianW","scratchPPrime","uHalf","vHalf","wHalf","pPrime","scratchCorner","scratchToCenter","minDist","maxDist","AttributeCompression","rangeMax","magSquared","octEncodeInRange","octEncodeScratch","uint8ForceArray","forceUint8","octEncodeToCartesian4","octDecodeInRange","oldVX","octDecode","octDecodeFromCartesian4","encoded","xOct16","yOct16","octPackFloat","scratchEncodeCart2","zigZagDecode","octEncodeFloat","octEncode","octDecodeFloat","octPack","encoded1","encoded2","encoded3","octUnpack","packed","encodedFloat1","encodedFloat2","compressTextureCoordinates","textureCoordinates","decompressTextureCoordinates","compressed","xZeroTo4095","zigZagDeltaDecode","uBuffer","vBuffer","heightBuffer","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","COLOR_BUFFER_BIT","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","FUNC_ADD","BLEND_EQUATION","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","BLEND_DST_RGB","BLEND_SRC_RGB","BLEND_DST_ALPHA","BLEND_SRC_ALPHA","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","BLEND_COLOR","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER_BINDING","STREAM_DRAW","STATIC_DRAW","DYNAMIC_DRAW","BUFFER_SIZE","BUFFER_USAGE","CURRENT_VERTEX_ATTRIB","FRONT","BACK","FRONT_AND_BACK","CULL_FACE","BLEND","DITHER","STENCIL_TEST","DEPTH_TEST","SCISSOR_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","OUT_OF_MEMORY","CW","CCW","LINE_WIDTH","ALIASED_POINT_SIZE_RANGE","ALIASED_LINE_WIDTH_RANGE","CULL_FACE_MODE","FRONT_FACE","DEPTH_RANGE","DEPTH_WRITEMASK","DEPTH_CLEAR_VALUE","DEPTH_FUNC","STENCIL_CLEAR_VALUE","STENCIL_FUNC","STENCIL_FAIL","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","STENCIL_BACK_FUNC","STENCIL_BACK_FAIL","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","VIEWPORT","SCISSOR_BOX","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","UNPACK_ALIGNMENT","PACK_ALIGNMENT","MAX_TEXTURE_SIZE","MAX_VIEWPORT_DIMS","SUBPIXEL_BITS","RED_BITS","GREEN_BITS","BLUE_BITS","ALPHA_BITS","DEPTH_BITS","STENCIL_BITS","POLYGON_OFFSET_UNITS","POLYGON_OFFSET_FACTOR","TEXTURE_BINDING_2D","SAMPLE_BUFFERS","SAMPLES","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","COMPRESSED_TEXTURE_FORMATS","DONT_CARE","FASTEST","NICEST","GENERATE_MIPMAP_HINT","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","FLOAT","DEPTH_COMPONENT","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","FRAGMENT_SHADER","VERTEX_SHADER","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VARYING_VECTORS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_IMAGE_UNITS","MAX_FRAGMENT_UNIFORM_VECTORS","SHADER_TYPE","DELETE_STATUS","LINK_STATUS","VALIDATE_STATUS","ATTACHED_SHADERS","ACTIVE_UNIFORMS","ACTIVE_ATTRIBUTES","SHADING_LANGUAGE_VERSION","CURRENT_PROGRAM","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","ALWAYS","KEEP","REPLACE","INCR","DECR","INVERT","INCR_WRAP","DECR_WRAP","VENDOR","RENDERER","VERSION","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_2D","TEXTURE","TEXTURE_CUBE_MAP","TEXTURE_BINDING_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_Z","MAX_CUBE_MAP_TEXTURE_SIZE","TEXTURE0","TEXTURE1","TEXTURE2","TEXTURE3","TEXTURE4","TEXTURE5","TEXTURE6","TEXTURE7","TEXTURE8","TEXTURE9","TEXTURE10","TEXTURE11","TEXTURE12","TEXTURE13","TEXTURE14","TEXTURE15","TEXTURE16","TEXTURE17","TEXTURE18","TEXTURE19","TEXTURE20","TEXTURE21","TEXTURE22","TEXTURE23","TEXTURE24","TEXTURE25","TEXTURE26","TEXTURE27","TEXTURE28","TEXTURE29","TEXTURE30","TEXTURE31","ACTIVE_TEXTURE","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","SAMPLER_CUBE","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","IMPLEMENTATION_COLOR_READ_TYPE","IMPLEMENTATION_COLOR_READ_FORMAT","COMPILE_STATUS","LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT","FRAMEBUFFER","RENDERBUFFER","RGBA4","RGB5_A1","RGB565","DEPTH_COMPONENT16","STENCIL_INDEX","STENCIL_INDEX8","DEPTH_STENCIL","RENDERBUFFER_WIDTH","RENDERBUFFER_HEIGHT","RENDERBUFFER_INTERNAL_FORMAT","RENDERBUFFER_RED_SIZE","RENDERBUFFER_GREEN_SIZE","RENDERBUFFER_BLUE_SIZE","RENDERBUFFER_ALPHA_SIZE","RENDERBUFFER_DEPTH_SIZE","RENDERBUFFER_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL","FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_BINDING","RENDERBUFFER_BINDING","MAX_RENDERBUFFER_SIZE","INVALID_FRAMEBUFFER_OPERATION","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","CONTEXT_LOST_WEBGL","UNPACK_COLORSPACE_CONVERSION_WEBGL","BROWSER_DEFAULT_WEBGL","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","HALF_FLOAT_OES","DOUBLE","READ_BUFFER","UNPACK_ROW_LENGTH","UNPACK_SKIP_ROWS","UNPACK_SKIP_PIXELS","PACK_ROW_LENGTH","PACK_SKIP_ROWS","PACK_SKIP_PIXELS","COLOR","DEPTH","STENCIL","RED","RGB8","RGBA8","RGB10_A2","TEXTURE_BINDING_3D","UNPACK_SKIP_IMAGES","UNPACK_IMAGE_HEIGHT","TEXTURE_3D","TEXTURE_WRAP_R","MAX_3D_TEXTURE_SIZE","UNSIGNED_INT_2_10_10_10_REV","MAX_ELEMENTS_VERTICES","MAX_ELEMENTS_INDICES","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","MIN","MAX","DEPTH_COMPONENT24","MAX_TEXTURE_LOD_BIAS","TEXTURE_COMPARE_MODE","TEXTURE_COMPARE_FUNC","CURRENT_QUERY","QUERY_RESULT","QUERY_RESULT_AVAILABLE","STREAM_READ","STREAM_COPY","STATIC_READ","STATIC_COPY","DYNAMIC_READ","DYNAMIC_COPY","MAX_DRAW_BUFFERS","DRAW_BUFFER0","DRAW_BUFFER1","DRAW_BUFFER2","DRAW_BUFFER3","DRAW_BUFFER4","DRAW_BUFFER5","DRAW_BUFFER6","DRAW_BUFFER7","DRAW_BUFFER8","DRAW_BUFFER9","DRAW_BUFFER10","DRAW_BUFFER11","DRAW_BUFFER12","DRAW_BUFFER13","DRAW_BUFFER14","DRAW_BUFFER15","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_VERTEX_UNIFORM_COMPONENTS","SAMPLER_3D","SAMPLER_2D_SHADOW","FRAGMENT_SHADER_DERIVATIVE_HINT","PIXEL_PACK_BUFFER","PIXEL_UNPACK_BUFFER","PIXEL_PACK_BUFFER_BINDING","PIXEL_UNPACK_BUFFER_BINDING","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","SRGB","SRGB8","SRGB8_ALPHA8","COMPARE_REF_TO_TEXTURE","RGBA32F","RGB32F","RGBA16F","RGB16F","VERTEX_ATTRIB_ARRAY_INTEGER","MAX_ARRAY_TEXTURE_LAYERS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET","MAX_VARYING_COMPONENTS","TEXTURE_2D_ARRAY","TEXTURE_BINDING_2D_ARRAY","R11F_G11F_B10F","UNSIGNED_INT_10F_11F_11F_REV","RGB9_E5","UNSIGNED_INT_5_9_9_9_REV","TRANSFORM_FEEDBACK_BUFFER_MODE","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","TRANSFORM_FEEDBACK_VARYINGS","TRANSFORM_FEEDBACK_BUFFER_START","TRANSFORM_FEEDBACK_BUFFER_SIZE","TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN","RASTERIZER_DISCARD","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","INTERLEAVED_ATTRIBS","SEPARATE_ATTRIBS","TRANSFORM_FEEDBACK_BUFFER","TRANSFORM_FEEDBACK_BUFFER_BINDING","RGBA32UI","RGB32UI","RGBA16UI","RGB16UI","RGBA8UI","RGB8UI","RGBA32I","RGB32I","RGBA16I","RGB16I","RGBA8I","RGB8I","RED_INTEGER","RGB_INTEGER","RGBA_INTEGER","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","DEPTH_COMPONENT32F","DEPTH32F_STENCIL8","FLOAT_32_UNSIGNED_INT_24_8_REV","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_DEFAULT","UNSIGNED_INT_24_8","DEPTH24_STENCIL8","UNSIGNED_NORMALIZED","DRAW_FRAMEBUFFER_BINDING","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","READ_FRAMEBUFFER_BINDING","RENDERBUFFER_SAMPLES","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","MAX_COLOR_ATTACHMENTS","COLOR_ATTACHMENT1","COLOR_ATTACHMENT2","COLOR_ATTACHMENT3","COLOR_ATTACHMENT4","COLOR_ATTACHMENT5","COLOR_ATTACHMENT6","COLOR_ATTACHMENT7","COLOR_ATTACHMENT8","COLOR_ATTACHMENT9","COLOR_ATTACHMENT10","COLOR_ATTACHMENT11","COLOR_ATTACHMENT12","COLOR_ATTACHMENT13","COLOR_ATTACHMENT14","COLOR_ATTACHMENT15","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","MAX_SAMPLES","HALF_FLOAT","RG","RG_INTEGER","R8","RG8","R16F","R32F","RG16F","RG32F","R8I","R8UI","R16I","R16UI","R32I","R32UI","RG8I","RG8UI","RG16I","RG16UI","RG32I","RG32UI","VERTEX_ARRAY_BINDING","R8_SNORM","RG8_SNORM","RGB8_SNORM","RGBA8_SNORM","SIGNED_NORMALIZED","COPY_READ_BUFFER","COPY_WRITE_BUFFER","COPY_READ_BUFFER_BINDING","COPY_WRITE_BUFFER_BINDING","UNIFORM_BUFFER","UNIFORM_BUFFER_BINDING","UNIFORM_BUFFER_START","UNIFORM_BUFFER_SIZE","MAX_VERTEX_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_UNIFORM_BUFFER_BINDINGS","MAX_UNIFORM_BLOCK_SIZE","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","UNIFORM_BUFFER_OFFSET_ALIGNMENT","ACTIVE_UNIFORM_BLOCKS","UNIFORM_TYPE","UNIFORM_SIZE","UNIFORM_BLOCK_INDEX","UNIFORM_OFFSET","UNIFORM_ARRAY_STRIDE","UNIFORM_MATRIX_STRIDE","UNIFORM_IS_ROW_MAJOR","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_ACTIVE_UNIFORMS","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","INVALID_INDEX","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_SERVER_WAIT_TIMEOUT","OBJECT_TYPE","SYNC_CONDITION","SYNC_STATUS","SYNC_FLAGS","SYNC_FENCE","SYNC_GPU_COMMANDS_COMPLETE","UNSIGNALED","SIGNALED","ALREADY_SIGNALED","TIMEOUT_EXPIRED","CONDITION_SATISFIED","WAIT_FAILED","SYNC_FLUSH_COMMANDS_BIT","VERTEX_ATTRIB_ARRAY_DIVISOR","ANY_SAMPLES_PASSED","ANY_SAMPLES_PASSED_CONSERVATIVE","SAMPLER_BINDING","RGB10_A2UI","INT_2_10_10_10_REV","TRANSFORM_FEEDBACK","TRANSFORM_FEEDBACK_PAUSED","TRANSFORM_FEEDBACK_ACTIVE","TRANSFORM_FEEDBACK_BINDING","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","TEXTURE_IMMUTABLE_FORMAT","MAX_ELEMENT_INDEX","TEXTURE_IMMUTABLE_LEVELS","MAX_TEXTURE_MAX_ANISOTROPY_EXT","ComponentDatatype","WebGLConstants","componentDatatype","BYTES_PER_ELEMENT","valuesOrLength","byteOffset","byteLength","getSizeInBytes","BITS12","cartesian3Scratch","cartesian3DimScratch","cartesian2Scratch","matrix4Scratch","matrix4Scratch2","SHIFT_LEFT_12","TerrainEncoding","axisAlignedBoundingBox","hasVertexNormals","hasWebMercatorT","quantization","TerrainQuantization","dimensions","hDim","translationMatrix","scaleMatrix","st","toScaledENU","fromScaledENU","encode","vertexBuffer","bufferIndex","uv","normalToPack","webMercatorT","compressed0","compressed1","compressed2","compressed3","decodePosition","getStride","zh","decodeTextureCoordinates","decodeHeight","decodeWebMercatorT","getOctEncodedNormal","vertexStride","attributesNone","position3DAndHeight","textureCoordAndEncodedNormals","getAttributes","datatype","sizeInBytes","numTexCoordComponents","componentsPerAttribute","offsetInBytes","strideInBytes","numCompressed0","numCompressed1","getAttributeLocations","encoding","WebMercatorProjection","mercatorAngleToGeodeticLatitude","mercatorAngle","atan","geodeticLatitudeToMercatorAngle","MaximumLatitude","sinLatitude","HeightmapTessellator","DEFAULT_STRUCTURE","heightScale","heightOffset","elementsPerHeight","elementMultiplier","isBigEndian","minimumScratch","maximumScratch","computeVertices","heightmap","nativeRectangle","skirtHeight","geographicWest","geographicSouth","geographicEast","geographicNorth","piOverTwo","isGeographic","oneOverGlobeSemimajorAxis","relativeToCenter","hasRelativeToCenter","exaggeration","includeWebMercatorT","structure","rectangleWidth","rectangleHeight","granularityX","granularityY","southMercatorY","oneOverMercatorHeight","radiiSquaredX","radiiSquaredY","radiiSquaredZ","hMin","gridVertexCount","vertexCount","uvs","webMercatorTs","startRow","endRow","startCol","endCol","rowIndex","isNorthEdge","isSouthEdge","nZ","kZ","colIndex","col","heightSample","elementOffset","terrainOffset","isWestEdge","isEastEdge","nX","nY","kX","kY","oneOverGamma","rSurfaceX","rSurfaceY","rSurfaceZ","occludeePointInScaledSpace","boundingSphere3D","aaBox","returnTrue","destroyObject","throwOnDestroyed","isDestroyed","canTransferArrayBuffer","TaskProcessor","_canTransferArrayBuffer","worker","getWorkerUrl","postMessage","webkitPostMessage","onmessage","terminate","bootstrapperUrlResult","taskCompletedEvent","completeTask","processor","_activeTasks","deferreds","_deferreds","script","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","webkitURL","createWorker","bootstrapMessage","loaderConfig","paths","Workers","baseUrl","workerModule","_workerModulePrefix","_workerName","workerName","maximumActiveTasks","_maximumActiveTasks","_nextID","emptyTransferableObjectArray","scheduleTask","parameters","transferableObjects","_worker","initWebAssemblyModule","webAssemblyOptions","wasmOptions","config","modulePath","wasmBinaryFile","wasmBinary","supportsWebAssembly","fallbackModulePath","arrayBuffer","getWebAssemblyLoaderConfig","wasmConfig","binary","webAssemblyConfig","destroy","_defaultWorkerModulePrefix","TerrainMesh","indexCountWithoutSkirts","vertexCountWithoutSkirts","westIndicesSouthToNorth","southIndicesEastToWest","eastIndicesNorthToSouth","northIndicesWestToEast","IndexDatatype","indexDatatype","numberOfVertices","indicesLengthOrArray","SIXTY_FOUR_KILOBYTES","TerrainProvider","errorEvent","ready","readyPromise","hasWaterMask","availability","regularGridIndicesCache","getRegularGridIndices","FOUR_GIGABYTES","byWidth","addRegularGridIndices","regularGridAndEdgeIndicesCache","getRegularGridIndicesAndEdgeIndices","indicesAndEdges","edgeIndices","getEdgeIndices","regularGridAndSkirtAndEdgeIndicesCache","upperLeft","lowerRight","addSkirtIndices","vertexIndex","previousIndex","getRegularGridAndSkirtIndicesAndEdgeIndices","gridIndexCount","edgeVertexCount","indexCount","createTypedArray","heightmapTerrainQuality","getEstimatedLevelZeroGeometricErrorForAHeightmap","tileImageWidth","numberOfTilesAtLevelZero","requestTileGeometry","getLevelMaximumGeometricError","getTileDataAvailable","loadTileDataAvailability","HeightmapTerrainData","_buffer","_width","_height","_childTileMask","childTileMask","_encoding","HeightmapEncoding","defaultStructure","_structure","_createdByUpsampling","createdByUpsampling","_waterMask","waterMask","_skirtHeight","_bufferType","_mesh","credits","taskProcessor","interpolateMeshHeight","sourceRectangle","fromWest","fromSouth","westInteger","eastInteger","southInteger","northInteger","dy","triangleInterpolateHeight","dX","dY","southwestHeight","southeastHeight","northwestHeight","northeastHeight","getHeight","setHeight","divisor","createMesh","thisLevelMaxError","verticesPromise","gridWidth","gridHeight","numberOfAttributes","_createMeshSync","interpolateHeight","sourceHeights","upsample","thisX","thisY","thisLevel","descendantX","descendantY","descendantLevel","meshData","destinationRectangle","lowestEncodedHeight","highestEncodedHeight","isChildAvailable","childX","childY","bitNumber","wasCreatedByUpsampling","TileAvailability","maximumLevel","_tilingScheme","_maximumLevel","_rootNodes","rectangleScratch","findNode","nodes","addAvailableTileRange","startX","startY","endX","endY","rootNodes","QuadtreeNode","rectangleWithLevel","RectangleWithLevel","rootNode","rectanglesOverlap","extent","putRectangleInQuadtree","computeMaximumLevelAtPosition","nodeIndex","rectangleContainsPosition","findMaxLevelFromNode","stopNode","found","nw","_nw","ne","_ne","sw","_sw","se","_se","rectangles","parent","rectanglesScratch","remainingToCoverByLevelScratch","westScratch","eastScratch","computeBestAvailableLevelOverRectangle","remainingToCoverByLevel","updateCoverageWithNode","cartographicScratch","rectangle1","rectangle2","maxDepth","rectangleFullyContainsRectangle","rectangleLevelComparator","potentialContainer","rectangleToTest","positionToTest","rectanglesToCover","anyOverlap","subtractRectangle","rectangleList","rectangleToSubtract","isTileAvailable","computeChildMaskForTile","childLevel","mask","formatError","TileProviderError","provider","timesRetried","handleError","previousError","retryFunction","errorDetails","console","handleSuccess","WebMercatorTilingScheme","rectangleSouthwestInMeters","rectangleNortheastInMeters","_rectangleSouthwestInMeters","_rectangleNortheastInMeters","semimajorAxisTimesPi","webMercatorPosition","ArcGISTiledElevationTerrainProvider","_resource","_credit","_levelZeroMaximumGeometricError","_maxLevel","_terrainDataStructure","_ready","token","_hasAvailability","_tilesAvailable","_tilesAvailablityLoaded","_availableCache","_readyPromise","metadata","copyrightText","spatialReference","wkid","latestWkid","tilingSchemeOptions","xmin","ymin","xmax","ymax","tileInfo","rows","cols","_lodCount","lods","capabilities","bandCount","minValues","maxValues","_errorEvent","tilesAvailablityLoaded","tilesAvailable","findRange","endingIndices","range","doneX","doneY","requestAvailability","xOffset","yOffset","dim","availableCache","throttle","throttleByServer","RequestType","TERRAIN","available","ranges","every","computeAvailability","availabilityRequest","tileResource","hasAvailability","availabilityPromise","availabilityResult","CANCELLED","cancel","GEODESIC","RHUMB","arrayFill","fill","relativeStart","relativeEnd","last","removeDuplicatesEpsilon","arrayRemoveDuplicates","wrapAround","cleanedvalues","arraySlice","begin","copy","AssociativeArray","_array","_hash","remove","hasValue","removeAll","barycentricCoordinates","dot00","dot01","dot02","dot11","dot12","BingMapsApi","providedKey","defaultKey","BingMapsGeocoderService","_key","getKey","geocode","resourceSets","resources","bbox","displayName","destination","BoundingRectangle","fromRectangleLowerLeft","fromRectangleUpperRight","lowerLeftX","lowerLeftY","upperRightX","upperRightY","intersect","POLYLINES","Matrix2","fromRotation","PrimitiveType","primitiveType","Geometry","boundingSphere","geometryType","GeometryType","boundingSphereCV","offsetAttribute","computeNumberOfVertices","geometry","num","rectangleCenterScratch","enuCenterScratch","fixedFrameToEnuScratch","boundingRectanglePointsCartographicScratch","boundingRectanglePointsEnuScratch","points2DScratch","pointEnuScratch","enuRotationScratch","enuRotationMatrixScratch","rotation2DScratch","_textureCoordinateRotationPoints","stRotation","boundingRectangle","rectangleCenter","enuCenter","enuToFixedFrame","fixedFrameToEnu","boundingPointsEnu","boundingPointsCarto","posEnu","textureMatrix","positionsLength","enuMinX","enuMinY","enuMaxX","enuMaxY","toDesiredInComputed","points2D","boundingEnuMin","boundingPointsWidth","boundingPointsHeight","point2D","minXYCorner","maxYCorner","maxXCorner","GeometryAttribute","GeometryAttributes","bitangent","tangent","TOP","ALL","VertexFormat","POSITION_ONLY","POSITION_AND_NORMAL","POSITION_NORMAL_AND_ST","POSITION_AND_ST","POSITION_AND_COLOR","vertexFormat","diffScratch","BoxGeometry","GeometryOffsetAttribute","_minimum","_maximum","_vertexFormat","_offsetAttribute","fromDimensions","fromAxisAlignedBoundingBox","boundingBox","unitBoxGeometry","scratchMin","scratchMax","scratchVertexFormat","scratchOptions","createGeometry","boxGeometry","normals","texCoords","tangents","bitangents","applyOffset","offsetValue","getUnitBox","BoxOutlineGeometry","_min","_max","cancelAnimationFrame","vendors","clearTimeout","CartographicGeocoderService","splitQuery","coordTest","splitCoord","Spline","times","points","evaluate","findTimeInterval","wrapTime","timeEnd","timeStart","timeStretch","clampTime","LinearSpline","_times","_points","_lastTimeIndex","TridiagonalSystemSolver","lower","upper","scratchLower","scratchDiagonal","scratchUpper","scratchRight","HermiteSpline","inTangents","outTangents","_inTangents","_outTangents","createC1","createNaturalCubic","solve","generateNatural","createClampedCubic","firstTangent","lastTangent","generateClamped","hermiteCoefficientMatrix","scratchTimeVec","scratchTemp","timeVec","coefs","scratchTemp0","scratchTemp1","firstTangentScratch","lastTangentScratch","CatmullRomSpline","_firstTangent","_lastTangent","_evaluateFunction","spline","invSpan","p3","catmullRomCoefficientMatrix","createEvaluateFunction","getStringFromTypedArray","uint8Array","subarray","decode","inRange","decodeWithTextDecoder","TextDecoder","decodeWithFromCharCode","codePoints","utfBytes","codePoint","bytesSeen","bytesNeeded","lowerBoundary","upperBoundary","currentByte","utf8Handler","cp","Intersections2D","threshold","keepAbove","u0","u0Behind","u1Behind","u2Behind","u01Ratio","u02Ratio","u12Ratio","u10Ratio","u20Ratio","u21Ratio","x1","x3","y3","x1mx3","x3mx2","y2my3","y1my3","inverseDeterminant","ymy3","xmx3","x00","y00","x01","y01","x10","y10","x11","y11","denominator1","ua1","ub1","QuantizedMeshTerrainData","quantizedVertices","horizonOcclusionPoint","westIndices","southIndices","eastIndices","northIndices","westSkirtHeight","southSkirtHeight","eastSkirtHeight","northSkirtHeight","_quantizedVertices","_encodedNormals","encodedNormals","_indices","_minimumHeight","_maximumHeight","_boundingSphere","_orientedBoundingBox","_horizonOcclusionPoint","_credits","uValues","_uValues","vValues","_vValues","sortByV","sortByU","_heightValues","_westIndices","sortIndicesIfNecessary","_southIndices","_eastIndices","_northIndices","_westSkirtHeight","_southSkirtHeight","_eastSkirtHeight","_northSkirtHeight","canUpsample","arrayScratch","sortFunction","needsSort","createMeshTaskProcessor","octEncodedNormals","indicesTypedArray","rtc","obb","terrainEncoding","upsampleTaskProcessor","mesh","isEastChild","isNorthChild","childRectangle","upsamplePromise","shortestSkirt","barycentricCoordinateScratch","pointInBoundingBox","minU","maxU","minV","maxV","terrainData","i0","i1","i2","uv0","texCoordScratch0","uv1","texCoordScratch1","uv2","texCoordScratch2","barycentric","computeBarycentricCoordinates","h0","quantizedHeight","LayerInformation","layer","isHeightmap","tileUrlTemplates","hasMetadata","availabilityLevels","availabilityTilesLoaded","littleEndianExtensionSize","availabilityPromiseCache","CesiumTerrainProvider","_heightmapWidth","_heightmapStructure","_hasWaterMask","_hasVertexNormals","_requestVertexNormals","requestVertexNormals","_requestWaterMask","requestWaterMask","_requestMetadata","requestMetadata","_availability","_tileCredits","lastResource","layerJsonResource","metadataError","layers","_layers","overallAvailability","overallMaxZoom","parseMetadataSuccess","requestLayerJson","tiles","maxZoom","maxzoom","scheme","_scheme","extensions","metadataAvailability","availableTiles","rangesAtLevel","rangeIndex","yStart","yEnd","_hasMetadata","parentUrl","parentMetadata","parseMetadataFailure","metadataSuccess","levelRanges","layerJsonCredit","metadataFailure","tilejson","QuantizedMeshExtensionIds","getRequestHeader","extensionsList","layerToUse","urlTemplates","terrainY","extensionList","_ionEndpoint","externalType","createHeightmapTerrainData","pos","cartesian3Length","boundingSphereLength","cartesian3Elements","encodedVertexLength","bytesPerIndex","triangleLength","DataView","getFloat64","getFloat32","getUint32","encodedVertexBuffer","triangleCount","createTypedArrayFromArrayBuffer","highest","code","westVertexCount","southVertexCount","eastVertexCount","northVertexCount","encodedNormalBuffer","waterMaskBuffer","extensionId","getUint8","extensionLength","stringLength","jsonString","availableLevel","createQuantizedMeshTerrainData","getAvailabilityTile","parentLevel","checkLayer","topLayer","cacheKey","deleteFromCache","tile","requestPromise","layerCount","layerResult","_getAvailabilityTile","EllipseGeometryLibrary","tempVec","unitQuat","rotMtx","pointOnEllipsoid","northVec","eastVec","aSqr","ab","bSqr","unitPos","azimuth","cosThetaSquared","sinThetaSquared","raisePositionsToHeight","extrude","extrudedHeight","size","finalPositions","bottomOffset","extrudedPosition","unitPosScratch","eastVecScratch","northVecScratch","computeEllipsePositions","addFillPositions","addEdgePositions","semiMinorAxis","semiMajorAxis","granularity","numPts","ceil","deltaTheta","numInterior","interiorPosition","positionIndex","reflectedPosition","outerPositionsLength","outerRightIndex","outerLeftIndex","outerPositions","GeometryInstance","modelMatrix","pickPrimitive","westHemisphereGeometry","eastHemisphereGeometry","EncodedCartesian3","doubleHigh","scratchEncode","encodedP","writeElements","cartesianArray","Tipsify","maximumIndex","cacheSize","numIndices","currentIndex","intoIndices","vertexTimeStamps","tipsify","cursor","getNextVertex","oneRing","deadEnd","maximumIndexPlusOne","itOneRing","numLiveTriangles","timeStamp","skipDeadEnd","endIndex","vertexTriangles","triangle","vertex","intoVertices","currentOutputIndex","outputIndices","numTriangles","triangleEmitted","GeometryPipeline","addTriangle","lines","copyAttributesDescriptions","newAttributes","copyVertex","destinationAttributes","sourceAttributes","toWireframe","triangles","trianglesToLines","triangleStripToLines","triangleFanToLines","createLineSegmentsForVectors","attributeName","newBoundingSphere","vectors","newPositions","createAttributeLocations","semantics","semantic","reorderForPreVertexCache","numVertices","indexCrossReferenceOldToNew","tempIndex","indicesIn","indicesOut","intoIndicesIn","intoIndicesOut","nextIndex","elementsIn","intoElementsIn","numComponents","elementsOut","reorderForPostVertexCache","cacheCapacity","fitToUnsignedShortIndices","geometries","indicesPerPrimitive","oldToNewIndex","newIndices","originalIndices","numberOfIndices","scratchProjectTo2DCartesian3","scratchProjectTo2DCartographic","attributeName3D","attributeName2D","values3D","projectedValues","lonLat","projectedLonLat","encodedResult","encodeAttribute","attributeHighName","attributeLowName","highValues","lowValues","transformPoint","transformVector","inverseTranspose","normalMatrix","transformToWorldCoordinates","prevPosition","nextPosition","tempScratch","combineGeometries","instances","propertyName","haveIndices","sourceValues","sourceValuesLength","attributesInAllGeometries","attributes0","numberOfComponents","inAllGeometries","otherAttribute","findAttributesInAllGeometries","destIndices","destOffset","sourceIndices","sourceIndicesLen","tempRadius","combineInstances","instanceGeometry","instanceSplitGeometry","computeNormal","normalsPerVertex","normalsPerTriangle","normalIndices","indexOffset","currentCount","i03","i13","i23","vertexNormalData","normalValues","i3","normalScale","tScratch","computeTangentAndBitangent","tan1","i02","i12","i22","ux","uy","uz","wx","wy","sdirx","sdiry","sdirz","tangentValues","bitangentValues","toEncode1","toEncode2","toEncode3","encodeResult2","indexPrimitive","indicesIndex","indexTriangleFan","indexTriangleStrip","indexTriangles","indexLineStrip","indexLineLoop","indexLines","offsetPointFromXZPlane","isBehind","compressVertices","extrudeAttribute","extrudeDirection","extrudeDirections","compressedDirections","compressedAttributes","normalAttribute","stAttribute","hasNormal","hasSt","tangentAttribute","bitangentAttribute","hasTangent","hasBitangent","compressedLength","numCompressedComponents","normalIndex","getXZIntersectionOffsetPoints","splitTriangleResult","splitTriangle","p0y","p1y","p2y","offsetTriangleFromXZPlane","updateGeometryAfterSplit","computeBoundingSphere","copyGeometryForSplit","copiedAttributes","updateInstanceAfterSplit","westGeometry","eastGeometry","generateBarycentricInterpolateFunction","CartesianType","v0Scratch","v1Scratch","v2Scratch","coords","currentValues","insertedIndex","interpolateAndPackCartesian4","interpolateAndPackCartesian3","interpolateAndPackCartesian2","p0Scratch","p1Scratch","p2Scratch","barycentricScratch","computeTriangleAttributes","currentAttributes","customAttributeNames","customAttributesLength","allAttributes","d0","d1","interpolateAndPackBoolean","genericInterpolate","sourceAttribute","currentAttribute","insertSplitPoint","currentIndices","currentIndexMap","insertIndex","prevIndex","newIndex","NAMED_ATTRIBUTES","splitLongitudeTriangles","westGeometryIndexMap","eastGeometryIndexMap","resultPositions","resultIndices","resultIndex","xzPlane","offsetScratch","offsetPointScratch","computeLineAttributes","splitLongitudeLines","p0Attributes","p0Indices","p0IndexMap","p1Attributes","p1Indices","p1IndexMap","EPSILON9","offsetPoint","cartesian2Scratch0","cartesian2Scratch1","cartesian3Scratch0","cartesian3Scratch2","cartesian3Scratch3","cartesian3Scratch4","cartesian3Scratch5","cartesian3Scratch6","cartesian4Scratch0","updateAdjacencyAfterSplit","prevPositions","nextPositions","offsetScalar","coplanarOffset","splitLongitude","expandAndWidths","expandAndWidth","colors","intersectionFound","p2Attributes","p2Indices","ew0","s3","sx","splitLongitudePolyline","texCoordScratch","textureMatrixScratch","tangentMatrixScratch","quaternionScratch","scratchTangent","scratchBitangent","projectedCenterScratch","scratchMinTexCoord","scratchMaxTexCoord","computeTopBottomAttributes","shadowVolume","extrudeNormals","textureCoordIndex","projectedCenter","geodeticNormal","tangentMatrix","minTexCoord","maxTexCoord","stOffset","rotatedPoint","projectedPoint","topIndices","boundingSphereCenter","topBoundingSphere","bottomBoundingSphere","computeExtrudedEllipse","cep","topBottomAttributes","posLength","topBottomIndices","topBottomGeo","wallAttributes","computeWallAttributes","UL","LL","UR","LR","computeWallIndices","wallIndices","wallGeo","geo","computeRectangle","positionsFlat","positionsCount","EllipseGeometry","_center","_semiMajorAxis","_semiMinorAxis","_rotation","_stRotation","_granularity","_extrudedHeight","_shadowVolume","scratchEllipsoid","ellipseGeometry","EPSILON2","computeEllipse","createShadowVolume","minHeightFunc","maxHeightFunc","minHeight","maxHeight","textureCoordinateRotationPoints","CircleGeometry","ellipseGeometryOptions","_ellipseGeometry","scratchEllipseGeometry","circleGeometry","EllipseOutlineGeometry","_numberOfVerticalLines","numberOfVerticalLines","numSide","numSideLines","maxI","CircleOutlineGeometry","UNBOUNDED","CLAMPED","LOOP_STOP","TICK_DEPENDENT","SYSTEM_CLOCK_MULTIPLIER","SYSTEM_CLOCK","getTimestamp","performance","Clock","currentTime","startTime","stopTime","clockRange","ClockRange","canAnimate","onTick","onStop","_currentTime","_multiplier","_clockStep","_shouldAnimate","_lastSystemTime","multiplier","shouldAnimate","clockStep","ClockStep","tick","currentSystemTime","milliseconds","scratchArrayBuffer","scratchUint32Array","scratchUint8Array","hue2rgb","m1","m2","Color","fromBytes","byteToFloat","fromAlpha","fromRgba","rgba","fromHsl","hue","saturation","lightness","fromRandom","minimumRed","maximumRed","minimumGreen","maximumGreen","minimumBlue","maximumBlue","minimumAlpha","maximumAlpha","rgbaMatcher","rrggbbaaMatcher","rgbParenthesesMatcher","hslParenthesesMatcher","fromCssColorString","namedColor","parseFloat","substr","floatToByte","toCssColorString","toCssHexString","hexAlpha","toBytes","toRgba","brighten","darken","withAlpha","divide","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDAR_BLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","TRANSPARENT","ColorGeometryInstanceAttribute","toValue","CompressedTextureBuffer","internalFormat","_format","bufferView","CoplanarPolygonGeometryLibrary","scratchIntersectionPoint","scratchXAxis","scratchYAxis","scratchZAxis","obbScratch","axis1","axis2","validOutline","xMag","yMag","zMag","computeProjectTo2DArguments","centerResult","planeAxis1Result","planeAxis2Result","planeAxis1","planeAxis2","createProjectPointsTo2DFunction","positionResults","createProjectPointTo2DFunction","calculateM","ellipticity","major","e4","e6","e8","e10","e12","phi","calculateSigma","eSinL","scratchCart1","scratchCart2","computeProperties","ellipsoidRhumbLine","firstCartesian","lastCartesian","minor","majorSquared","minorSquared","_ellipticitySquared","_ellipticity","_start","_end","_heading","firstLongitude","firstLatitude","secondLongitude","secondLatitude","sigma1","sigma2","calculateHeading","_distance","deltaLongitude","EPSILON8","M1","calculateArcLength","interpolateUsingSurfaceDistance","ellipticitySquared","d4","sin2D","cos2D","sin4D","cos4D","sin6D","cos6D","sin8D","cos8D","sin10D","calculateInverseM","localRad","EllipsoidRhumbLine","surfaceDistance","fromStartHeadingDistance","setEndPoints","interpolateUsingFraction","fraction","findIntersectionWithLongitude","intersectionLongitude","absHeading","phi1","eSinPhi1","leftComponent","newPhi","eSinPhi","numerator","findIntersectionWithLatitude","intersectionLatitude","earcut","holeIndices","invSize","hasHoles","outerLen","outerNode","linkedList","prev","list","steiner","getLeftmost","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","clockwise","signedArea","insertNode","removeNode","again","area","ear","pass","zOrder","prevZ","nextZ","tail","numMerges","pSize","qSize","inSize","sortLinked","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","hole","hx","hy","qx","Infinity","mx","my","tanMin","sectorContainsSector","findHoleBridge","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","inside","middleInside","o1","o2","o3","o4","onSegment","an","bp","deviation","polygonArea","trianglesArea","flatten","holes","holeIndex","WindingOrder","CLOCKWISE","COUNTER_CLOCKWISE","windingOrder","scaleToGeodeticHeightN","scaleToGeodeticHeightP","PolygonPipeline","computeArea2D","flattenedPositions","subdivisionV0Scratch","subdivisionV1Scratch","subdivisionV2Scratch","subdivisionS0Scratch","subdivisionS1Scratch","subdivisionS2Scratch","subdivisionMidScratch","computeSubdivision","subdividedPositions","subdividedIndices","edges","minDistance","minDistanceSqrd","edge","mid","s2","g0","subdivisionC0Scratch","subdivisionC1Scratch","subdivisionC2Scratch","subdivisionCartographicScratch","computeRhumbLineSubdivision","rhumb0","rhumb1","rhumb2","midHeight","midCartesian3","scaleToGeodeticHeight","scaleToSurface","Queue","_offset","_length","enqueue","dequeue","peek","clear","compareFunction","PolygonGeometryLibrary","polygonHierarchy","hierarchy","holesLength","unpackPolygonHierarchy","getPointAtDistance","subdivideLineCount","countDivide","scratchCartographic0","scratchCartographic1","scratchCartographic2","scratchCartesian0","subdivideRhumbLineCount","subdivideLine","distanceBetweenVertices","subdivideRhumbLine","rhumb","scaleToGeodeticHeightN1","scaleToGeodeticHeightN2","scaleToGeodeticHeightP1","scaleToGeodeticHeightP2","scaleToGeodeticHeightExtruded","perPositionHeight","n1","n2","polygonOutlinesFromHierarchy","scaleToEllipsoidSurface","polygons","outerRing","numChildren","holePositions","numGrandchildren","polygonsFromHierarchy","projectPointsTo2D","positions2D","originalWindingOrder","computeWindingOrder2D","reverse","polygonHoles","holePositions2D","computeBoundingRectangleCartesian2","computeBoundingRectangleCartesian3","computeBoundingRectangleQuaternion","computeBoundingRectangleMatrix3","computeBoundingRectangle","projectPointTo2D","createGeometryFromPositions","polygon","arcType","triangulate","ArcType","computeWallIndicesSubdivided","computeWallGeometry","edgePositions","topEdgeLength","tempPositions","tempPositionsLength","edgeIndex","scratchBR","stScratch","textureCoordinatesOrigin","centerScratch","axis1Scratch","axis2Scratch","tangentRotationScratch","surfaceNormalScratch","createGeometryFromPolygon","tangentRotation","stOrigin","flatPositions","bitangentIndex","tangentIndex","stIndex","stx","sty","CoplanarPolygonGeometry","_polygonHierarchy","computeHierarchyPackedLength","fromPositions","packPolygonHierarchy","polygonGeometry","surfaceNormal","projectPoints","projectPoint","geometryInstance","CoplanarPolygonOutlineGeometry","ROUNDED","MITERED","BEVELED","computeDeltaLambda","sineAlpha","cosineSquaredAlpha","sigma","sineSigma","cosineSigma","cosineTwiceSigmaMidpoint","computeC","ellipsoidGeodesic","eff","cosineU1","sineU1","cosineU2","sineU2","cc","cs","ss","sc","lambdaDot","cosineLambda","sineLambda","uSquared","cosineSquaredTwiceSigmaMidpoint","startHeading","endHeading","_startHeading","_endHeading","_uSquared","vincentyInverseFormula","cosineHeading","sineHeading","tanU","cosineU","sineU","sineSquaredAlpha","cosineAlpha","u2Over4","u4Over16","u6Over64","u8Over256","distanceRatio","constants","_constants","setConstants","EllipsoidGeodesic","cosine2S","cosine4S","cosine6S","sine2S","sine4S","sine6S","sine8S","PolylinePipeline","radiansDistanceSquared","cartoScratch","extractHeights","wrapLongitudeInversMatrix","wrapLongitudeOrigin","wrapLongitudeXZNormal","wrapLongitudeXZPlane","wrapLongitudeYZNormal","wrapLongitudeYZPlane","wrapLongitudeIntersection","wrapLongitudeOffset","subdivideHeightsScratchArray","subdivideHeights","numPoints","heightPerVertex","carto1","carto2","scaleFirst","scaleLast","ellipsoidRhumb","generateCartesianArc","numberOfPoints","surfaceDistanceBetweenPoints","cart","carto","generateCartesianRhumbArc","numberOfPointsRhumbLine","wrapLongitude","segments","inverseModelMatrix","xzNormal","yzNormal","yzPlane","cur","lengths","generateArc","hasHeightArray","arrayLength","lastPoint","generateRhumbArc","numberArray","scratch2Array","scratchCartesian7","scratchCartesian8","scratchCartesian9","scratch1","scratch2","PolylineVolumeGeometryLibrary","nextScratch","prevScratch","negativeX","rotationZ","finalPosScratch","heightCartesian","addPosition","shape","xScalar","repeat","finalPosition","computeRotationAngle","addPositions","centers","convertShapeTo3D","shape2D","quaterion","startPointScratch","rotMatrix","computeRoundCorner","pivot","startPoint","endPoint","cornerType","leftIsOutside","duplicatePoints","CornerType","removeDuplicatesFromShape","shapePositions","cleanedPositions","angleIsGreaterThanPi","forward","backward","scratchForwardProjection","scratchBackwardProjection","computePositions","_cornerType","shapeForSides","convertShapeTo3DDuplicate","shapeForEnds","ends","cornerDirection","previousPosition","subdividedHeights","forwardProjection","backwardProjection","combinedPositions","CorridorGeometryLibrary","scratch3","scratch4","scaleArray2","cartesian1","cartesian2","cartesian3","cartesian4","cartesian5","cartesian6","cartesian7","cartesian8","cartesian9","cartesian10","cornerPoint","computeMiteredCorner","leftCornerDirection","addShiftedPositions","calculatedPositions","rightPositions","leftPositions","scaledLeft","scaledRight","rightIndex","leftIndex","rightPos","leftPos","addAttribute","front","back","saveAttributes","previousPos","calculatedLefts","calculatedNormals","endPositions","corners","leftEdge","firstEndCap","rightEdge","addEndCaps","lefts","addNormals","computedPositions","computedLefts","computedNormals","leftCount","rightCount","indicesLength","leftSide","endPositionLength","addEndPositions","halfLength","firstEndPositions","rightNormal","leftNormal","posIndex","compIndex","outsidePoint","previousPoint","nextPoint","lastEndPositions","rightSt","leftSt","halfEndPos","addWallPositions","wallPositions","computePositionsExtruded","topVertexFormat","extrudedPositions","topNormals","topBitangents","threeSize","twoSize","sixSize","topPosition","bottomPosition","attrIndex","attrIndexOffset","topTangents","topSt","extrudedAttributes","applyOffsetValue","iLength","computeOffsetPoints","position1","position2","offsetDirection","minLat","minLon","maxLat","maxLon","scratchCartesianOffset","scratchCartesianEnds","scratchCartographicMin","scratchCartographicMax","cleanPositions","CorridorGeometry","_positions","corridorGeometry","CorridorOutlineGeometry","corridorOutlineGeometry","createGuid","defaultTokenCredit","defaultAccessToken","Ion","defaultServer","getDefaultTokenCredit","IonResource","endpoint","endpointResource","isExternal","_ionEndpointDomain","authority","_ionEndpointResource","_ionRoot","_pendingPromise","_isExternal","ionRoot","newEndpoint","fromAssetId","assetId","_createEndpointResource","getCreditsFromEndpoint","attributions","access_token","userOptions","Authorization","accessToken","server","resourceOptions","createWorldTerrain","CullingVolume","planes","faces","scratchPlaneCenter","fromBoundingSphere","planeIndex","faceNormal","plane0","plane1","computeVisibility","boundingVolume","intersecting","computeVisibilityWithPlaneMask","parentPlaneMask","MASK_OUTSIDE","MASK_INSIDE","flag","MASK_INDETERMINATE","CylinderGeometryLibrary","topRadius","bottomRadius","slices","topZ","bottomZ","twoSlice","tbIndex","topOffset","bottomX","bottomY","topX","topY","radiusScratch","bitangentScratch","tangentScratch","CylinderGeometry","_topRadius","_bottomRadius","_slices","unitCylinderGeometry","cylinderGeometry","twoSlices","threeSlices","computeTangent","rad","getUnitCylinder","CylinderOutlineGeometry","decodeGoogleEarthEnterpriseData","passThroughDataForTesting","keyLength","dataView","magic","kp","keyView","dp","dpend","dpend64","kpend","off","setUint32","setUint8","DefaultProxy","warnings","oneTimeWarning","identifier","warn","geometryOutlines","geometryZIndex","geometryHeightReference","geometryExtrudedHeightReference","deprecationWarning","DistanceDisplayCondition","_near","_far","DistanceDisplayConditionGeometryInstanceAttribute","fromDistanceDisplayCondition","distanceDisplayCondition","DoublyLinkedList","DoublyLinkedListNode","previous","oldNodeNext","valueOf","TWEEN","_tweens","REVISION","getAll","tween","Tween","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_isPlaying","_reversed","_delayTime","_startTime","_easingFunction","Easing","Linear","None","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onCompleteCallback","_onStopCallback","field","to","properties","duration","stopChainedTweens","numChainedTweens","delay","amount","yoyo","easing","interpolation","onStart","callback","onUpdate","onComplete","elapsed","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","Back","Bounce","fn","Utils","Bezier","pw","bn","Bernstein","CatmullRom","fc","Factorial","EasingFunction","LINEAR_NONE","QUADRACTIC_IN","QUADRACTIC_OUT","QUADRACTIC_IN_OUT","CUBIC_IN","CUBIC_OUT","CUBIC_IN_OUT","QUARTIC_IN","QUARTIC_OUT","QUARTIC_IN_OUT","QUINTIC_IN","QUINTIC_OUT","QUINTIC_IN_OUT","SINUSOIDAL_IN","SINUSOIDAL_OUT","SINUSOIDAL_IN_OUT","EXPONENTIAL_IN","EXPONENTIAL_OUT","EXPONENTIAL_IN_OUT","CIRCULAR_IN","CIRCULAR_OUT","CIRCULAR_IN_OUT","ELASTIC_IN","ELASTIC_OUT","ELASTIC_IN_OUT","BACK_IN","BACK_OUT","BACK_IN_OUT","BOUNCE_IN","BOUNCE_OUT","BOUNCE_IN_OUT","scratchNormalST","defaultRadii","EllipsoidGeometry","innerRadii","minimumClock","maximumClock","minimumCone","maximumCone","stackPartitions","slicePartitions","_innerRadii","_minimumClock","_maximumClock","_minimumCone","_maximumCone","_stackPartitions","_slicePartitions","unitEllipsoidGeometry","scratchRadii","scratchInnerRadii","ellipsoidGeometry","phis","thetas","numPhis","numThetas","extraIndices","vertexMultiplier","hasInnerSurface","isTopOpen","isBotOpen","isClockOpen","isInner","negateNormal","outerOffset","innerOffset","vertexCountHalf","ellipsoidOuter","ellipsoidInner","normalST","unit","tangetOffset","getUnitEllipsoid","EllipsoidOutlineGeometry","subdivisions","_subdivisions","EllipsoidTerrainProvider","EventHelper","_removalFunctions","removalFunction","removalFunctions","HOLD","EXTRAPOLATE","OrthographicOffCenterFrustum","_left","_right","_top","_bottom","_cullingVolume","_orthographicMatrix","frustum","projectionMatrix","getPlanesRight","getPlanesNearCenter","getPlanesPoint","negateScratch","computeCullingVolume","nearCenter","getPixelDimensions","drawingBufferWidth","drawingBufferHeight","pixelRatio","pixelWidth","pixelHeight","OrthographicFrustum","_offCenterFrustum","_aspectRatio","PerspectiveOffCenterFrustum","_perspectiveMatrix","_infinitePerspective","infiniteProjectionMatrix","getPlanesFarCenter","getPlanesNormal","farCenter","inverseNear","tanTheta","PerspectiveFrustum","fov","_fov","_fovy","_sseDenominator","_xOffset","_yOffset","fovy","sseDenominator","FrustumGeometry","orientation","frustumType","frustumPackedLength","drawNearPlane","_drawNearPlane","_frustumType","_frustum","_orientation","scratchPackPerspective","scratchPackOrthographic","scratchPackQuaternion","scratchPackorigin","frustumResult","scratchRotationMatrix","scratchViewMatrix","scratchInverseMatrix","scratchXDirection","scratchYDirection","scratchZDirection","scratchNegativeX","scratchNegativeY","scratchNegativeZ","frustumSplits","frustumCornersNDC","scratchFrustumCorners","_computeNearFarPlanes","xDirection","yDirection","zDirection","rotationMatrix","inverseView","inverseViewProjection","viewProjection","fac","frustumGeometry","numberOfPlanes","negativeY","negativeZ","FrustumOutlineGeometry","GeocoderService","SEARCH","AUTOCOMPLETE","GeometryFactory","geometryFactory","GeometryInstanceAttribute","getFilenameFromUri","uriObject","lastIndexOf","context2DsByWidthAndHeight","getImagePixels","context2DsByHeight","context2d","getContext","globalCompositeOperation","drawImage","getImageData","getMagic","isBitSet","bits","childrenBitmasks","GoogleEarthEnterpriseTileInformation","cnodeVersion","imageryVersion","terrainVersion","imageryProvider","terrainProvider","_bits","ancestorHasTerrain","terrainState","info","setParent","hasTerrain","hasSubtree","hasImagery","hasChildren","hasChild","getChildBitmask","ui8","stringToBuffer","GoogleEarthEnterpriseMetadata","resourceOrUrl","imageryPresent","protoImagery","terrainPresent","negativeAltitudeExponentBias","negativeAltitudeThreshold","providers","_quadPacketVersion","_tileInfo","_subtreePromises","output","dbrootParserPromise","oldValue","cesiumGoogleEarthDbRootParser","dbrootParser","protobufMinimal","buf","encryptedDbRootProto","EncryptedDbRootProto","byteArray","encryptionData","dbrootData","dbRootCompressed","dbRoot","DbRootProto","endSnippet","model","compressedNegativeAltitudeThreshold","databaseVersion","quadtreeVersion","providerInfo","copyrightString","providerId","requestDbRoot","getQuadTreePacket","getMetadataResource","tileXYToQuadKey","quadkey","bitmask","digit","quadKeyToTileXY","isValid","quadKey","getTileInformationFromQuadKey","valid","topLevelKeyLength","keysLength","populateSubtree","subtreeRequest","subtreePromises","priorityFunction","getTileInformation","GoogleEarthEnterpriseTerrainData","negativeElevationThreshold","_negativeAltitudeExponentBias","_negativeElevationThreshold","googleChildTileMask","nativeRectangleScratch","quad","uStart","vStart","dv","sizeOfUint32","sizeOfDouble","xSize","ySize","xScale","yScale","getInt32","sizeOfInt32","sizeOfFloat","getUint16","sizeOfUint16","TerrainState","TerrainCache","_terrainCache","_lastTidy","GoogleEarthEnterpriseTerrainProvider","_metadata","_terrainPromises","_terrainRequests","timestamp","tidy","terrainCache","computeChildMask","childMask","child","parentInfo","sharedPromise","sharedRequest","terrainPromises","terrainRequests","buildTerrainResource","terrain","terrainTiles","requestedInfo","childKey","PROJECTIONS","PROJECTION_COUNT","MITER_BREAK_SMALL","MITER_BREAK_LARGE","GroundPolylineGeometry","loop","_projectionIndex","_scene3DOnly","setProjectionAndEllipsoid","groundPolylineGeometry","mapProjection","projectionIndex","cart3Scratch1","cart3Scratch2","cart3Scratch3","computeRightNormal","startBottom","getPosition","startTop","endBottom","interpolatedCartographicScratch","interpolatedBottomScratch","interpolatedTopScratch","interpolatedNormalScratch","interpolateSegment","normalsArray","bottomPositionsArray","topPositionsArray","cartographicsArray","ellipsoidLine","interpolatedNormal","interpointDistance","distanceFromStart","pointsToAdd","packIndex","interpolatedCartographic","interpolatedBottom","interpolatedTop","heightlessCartographicScratch","tangentDirection","scene3DOnly","toPreviousScratch","toNextScratch","forwardScratch","vertexUpScratch","computeVertexMiterNormal","previousBottom","vertexBottom","vertexTop","nextBottom","toPrevious","toNext","EPSILON5","XZ_PLANE","previousBottomScratch","vertexBottomScratch","vertexTopScratch","nextBottomScratch","vertexNormalScratch","intersectionScratch","cartographicScratch0","cartographicScratch1","cartographicIntersectionScratch","compute2dAttributes","intersectionCartographic","rhumbLine","splitPositions","cartographicsLength","vertexNormal","startCartographic","nextCartographic","vertexCartographic","endCartographic","preEndCartographic","postEndCartographic","startHiLo2D","offsetAndRight2D","startEndNormals2D","texcoordNormalization2D","segmentCount","arraySizeVec4","positionsArray","startHiAndForwardOffsetX","startLoAndForwardOffsetY","startNormalAndForwardOffsetZ","endNormalAndTextureCoordinateNormalizationX","rightNormalAndTextureCoordinateNormalizationY","length2D","startCartographicScratch","endCartographicScratch","segmentStartCartesian","segmentStartTopScratch","segmentEndCartesian","segmentEndTopScratch","length3D","cartographicsIndex","vec2sWriteIndex","vec3sWriteIndex","vec4sWriteIndex","miterBroken","segmentEndBottomScratch","endTop","endGeometryNormal","segmentEndNormalScratch","preEndBottom","segmentStartBottomScratch","breakMiter","lengthSoFar3D","lengthSoFar2D","sumHeights","start2D","end2D","startGeometryNormal2D","endGeometryNormal2D","startGeometryNormal","segmentStartNormalScratch","nudgeResult","nudgeCartographic","segmentStart2DScratch","direction2D","segmentEnd2DScratch","forwardOffset2DScratch","segmentStartNormal2DScratch","segmentEndNormal2DScratch","projectNormal","segmentLength3D","encodedStart","encodeScratch","forwardOffset","startUp","startUpScratch","startPlaneNormal","startPlaneNormalScratch","endUp","endUpScratch","endPlaneNormal","endPlaneNormalScratch","encodedStart2D","forwardOffset2D","right2D","texcoordNormalization3DX","texcoordNormalization3DY","segmentLength2D","texcoordNormalization2DX","texcoordNormalization2DY","encodeScratch2D","swap","right2DScratch","vec4Index","vec2Index","wIndex","rightPlaneSide","topBottomSide","texcoordNormalization","adjustHeightStartBottom","adjustHeightStartBottomScratch","adjustHeightEndBottom","adjustHeightEndBottomScratch","adjustHeightStartTop","adjustHeightStartTopScratch","adjustHeightEndTop","adjustHeightEndTopScratch","getHeightsRectangle","getHeightCartographics","getHeightRectangleScratch","minMaxHeights","adjustHeights","normalNudge","normalNudgeScratch","nudgeXZ","REFERENCE_INDICES_LENGTH","REFERENCE_INDICES","scratchBoundingSpheres","getVec4GeometryAttribute","generateGeometryAttributes","lineDirectionScratch","matrix3Scratch","lineDirection","vertexUp","endPosCartographicScratch","normalStartpointScratch","normalEndpointScratch","normalEndpoint","flipNormal","normalEndpointCartographic","normalEndpointProjected","adjustHeightNormalScratch","adjustHeightOffsetScratch","adjustHeightBottom","adjustHeightTop","adjustHeightNormal","distanceForBottom","adjustHeightOffset","distanceForTop","nudgeDirectionScratch","startToXZdistance","endToXZdistance","absStartLon","absEndLon","EPSILON11","endSign","startSign","typedArray","_projectNormal","HeadingPitchRange","hpr","calculateCoefficientTerm","zIndices","derivOrder","termOrder","reservedIndices","reserved","HermitePolynomialApproximation","inputOrder","yTable","yStride","zIndicesLength","highestNonZeroCoef","nonZeroCoefficients","zj","zn","tempTerm","coeff","outputOrder","zIndiceslength","highestNonZero","dimOne","coefIndex","dimTwo","coefficient","dimTwoMinusOne","fillCoefficientList","loopStop","IauOrientationParameters","rightAscension","declination","rotationRate","Iau2000Orientation","c5","c6","c7","c8","c9","ComputeMoon","T","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","E13","sinE1","sinE2","sinE3","sinE4","sinE5","sinE6","sinE7","sinE8","sinE9","sinE10","sinE11","sinE12","sinE13","cosE1","cosE2","cosE3","cosE4","cosE5","cosE6","cosE7","cosE8","cosE9","cosE10","cosE11","cosE12","cosE13","IauOrientationAxes","computeFunction","_computeFunction","xAxisScratch","yAxisScratch","zAxisScratch","rotMtxScratch","quatScratch","alphaDeltaW","precMtx","delta","cosDec","computeRotationMatrix","rot","InterpolationAlgorithm","getRequiredDataPoints","interpolateOrderZero","PeliasGeocoderService","GeocodeType","features","resultObject","bboxDegrees","label","IonGeocoderService","scene","frameState","creditDisplay","addDefaultCredit","searchEndpoint","_accessToken","_server","_pelias","geocodeType","TimeInterval","isStartIncluded","isStopIncluded","isEmpty","stopComparedToStart","scratchInterval","iso8601","dataComparer","mergeCallback","EMPTY","leftStart","leftStop","rightStart","rightStop","intersectsStartRight","intersectsStartLeft","leftIsStartIncluded","leftIsStopIncluded","rightIsStartIncluded","rightIsStopIncluded","leftLessThanRight","startComparedToDate","dateComparedToStop","MINIMUM_VALUE","MAXIMUM_VALUE","Iso8601","MAXIMUM_INTERVAL","SHIFT","CTRL","ALT","LagrangePolynomialApproximation","diffX","LinearApproximation","x0","transcodeTaskProcessor","loadCRN","resourceOrUrlOrBuffer","loadPromise","isView","transferrableObjects","compressedTextureBuffer","loadImageFromTypedArray","PixelDatatype","pixelDatatype","context","webgl2","PixelFormat","RGB_DXT1","RGBA_DXT1","RGBA_DXT3","RGBA_DXT5","RGB_PVRTC_4BPPV1","RGB_PVRTC_2BPPV1","RGBA_PVRTC_4BPPV1","RGBA_PVRTC_2BPPV1","RGB_ETC1","pixelFormat","componentsLength","isPacked","textureSizeInBytes","flipped","textureWidth","flippedRow","R","fileIdentifier","faceOrder","loadKTX","byteBuffer","isKTX","endianness","glType","glTypeSize","glFormat","glInternalFormat","glBaseInternalFormat","pixelDepth","numberOfArrayElements","numberOfFaces","numberOfMipmapLevels","bytesOfKeyValueByteSize","texture","imageSize","isCompressedFormat","mipmaps","levelSize","compressedTextureSizeInBytes","levelBuffer","parseKTX","ManagedArray","originalLength","reserve","resize","errorCredit","MapboxApi","printedMapboxWarning","errorString","getAccessToken","providedToken","getErrorCredit","MapProjection","leftScratchArray","rightScratchArray","userDefinedObject","middle","leftLength","rightLength","leftElement","rightElement","mergeSort","scratchLength","NearFarScalar","nearValue","farValue","nearFarScalar","PARTIAL","FULL","Occluder","occluderBoundingSphere","_occluderPosition","_occluderRadius","_horizonDistance","_horizonPlaneNormal","_horizonPlanePosition","horizonDistance","horizonPlaneNormal","horizonPlanePosition","cameraToOccluderVec","invCameraToOccluderDistance","occluderRadiusSqrd","nearPlaneDistance","tempVecScratch","occludeePositionScratch","occludeePosition","occludeeRadius","tempVecMagnitudeSquared","occluderRadiusSquared","occludeeRadiusSquared","occludeeBS","Visibility","occluderToOccludeeDistSqrd","cameraToOccludeeDistSqrd","occludeePointScratch","computeOccludeePoint","occludeePos","occluderPosition","occluderRadius","occluderPlaneNormal","occluderPlaneD","aRotationVector","_anyRotationVector","_horizonToPlaneNormalDotProduct","tempDot","computeOccludeePointFromRectangleScratch","computeOccludeePointFromRectangle","ellipsoidCenter","tempVec0Scratch","tempVec0","majorAxis","tempVec1","posDirectionScratch","_rotationVector","anyRotationVector","positionDirection","crossProduct","EPSILON13","posScratch1","occluerPosScratch","posScratch2","horizonPlanePosScratch","occluderBS","positionToOccluder","occluderToPositionDistanceSquared","horizonDistanceSquared","horizonPlaneDistance","horizonCrossDistance","horizonCrossDirection","dot0","dot1","OffsetGeometryInstanceAttribute","OpenCageGeocoderService","apiKey","_params","bounds","lng","formatted","imageSmoothingEnabledName","getCSSValue","defaultView","getComputedStyle","getPropertyValue","measureText","context2D","textstring","stroke","metrics","fontFamily","fontSize","fontStyle","fontWeight","isSpace","fontsize","leadDiv","opacity","font","leading","leadDivHeight","ascent","descent","minx","maxx","miny","maxy","ctx","baseline","fillStyle","fillRect","strokeStyle","lineWidth","strokeText","fillText","pixelData","w4","step","writeTextToCanvas","strokeWidth","backgroundColor","doublePadding","imageSmoothingEnabled","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","lineJoin","textBaseline","visibility","strokeColor","fillColor","PinBuilder","_cache","createPin","fromUrl","fromMakiIconId","fromText","colorScratch","drawIcon","sizeX","sizeY","stringifyScratch","cache","stringify","save","beginPath","moveTo","lineTo","bezierCurveTo","closePath","restore","drawPin","PlaneGeometry","planeGeometry","PlaneOutlineGeometry","pointInsideTriangle","scratchCarto1","scratchCarto2","adjustPosHeightsForNormal","p1Carto","p2Carto","scratchBoundingRectangle","scratchPerPosNormal","scratchPerPosTangent","scratchPerPosBitangent","appendTextureCoordinatesOrigin","appendTextureCoordinatesCartesian2","appendTextureCoordinatesCartesian3","appendTextureCoordinatesQuaternion","appendTextureCoordinatesMatrix3","computeAttributes","wall","recomputeNormal","tangentRotationMatrix","bottomOffset2","attrIndex1","attrIndex2","idlCross","inverseChordLength","interpolateAndGrowRectangle","segmentLength","subsegmentDistance","interpolationDistance","createGeometryFromPositionsExtrudedPositions","createGeometryFromPositionsExtruded","closeTop","closeBottom","geos","walls","topGeo","edgePoints","topBottomPositions","ilength","topAndBottom","PolygonGeometry","perPositionHeightExtrude","_closeTop","_closeBottom","_perPositionHeight","_perPositionHeightExtrude","_arcType","dummyOptions","bind","splitGeometry","PolygonHierarchy","createGeometryFromPositionsPositions","createGeometryFromPositionsSubdivided","indicesSize","cornersLength","PolygonOutlineGeometry","scratchInterpolateColorsArray","interpolateColors","color0","color1","b0","b1","redPerVertex","greenPerVertex","bluePerVertex","alphaPerVertex","PolylineGeometry","colorsPerVertex","_colors","_colorsPerVertex","scratchPrevPosition","scratchNextPosition","polylineGeometry","subdivisionSize","numberOfPointsFunction","colorLength","newColors","newColorIndex","numColors","interpolatedColors","interpolatedColorsLength","finalColors","expandAndWidthIndex","colorIndex","endK","PolylineVolumeGeometry","polylinePositions","_shape","brScratch","polylineVolumeGeometry","ll","ul","ur","lr","shapeLength","firstEndIndices","indicesCount","lengthSt","heightSt","stindex","endOffset","PolylineVolumeOutlineGeometry","polylineVolumeOutlineGeometry","shapeCount","firstOffset","secondOffset","Proxy","QuaternionSpline","quickselect","quickselectStep","sd","newLeft","newRight","defaultCompare","RBush","maxEntries","_maxEntries","_minEntries","findItem","items","equalsFn","calcBBox","toBBox","distBBox","children","destNode","createNode","extend","leaf","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","intersectionArea","multiSelect","_all","search","nodesToSearch","childBBox","collides","load","insert","_build","_splitRoot","tmpNode","_insert","goingUp","indexes","_condense","compareMinX","compareMinY","toJSON","fromJSON","N2","N1","_chooseSubtree","minArea","minEnlargement","targetNode","enlargement","isNode","insertPath","_split","_adjustParentBBoxes","_chooseSplitAxis","splitIndex","_chooseSplitIndex","newNode","minOverlap","bbox1","bbox2","overlap","_allDistMargin","leftBBox","rightBBox","margin","i$1","child$1","siblings","RectangleCollisionChecker","_tree","RectangleWithId","idCompare","fromRectangleAndId","withId","removalScratch","collisionScratch","RectangleGeometryLibrary","computedOptions","computeST","nwCorner","stLatitude","granYCos","granXSin","stLongitude","granYSin","granXCos","stNwCorner","stGranYCos","stGranXSin","stGranYSin","stGranXCos","stWest","lonScalar","stSouth","latScalar","rotationMatrixScratch","nwCartesian","centerCartesian","proj","getRotationOptions","cosRotation","sinRotation","latitude0","latitude1","latitude2","longitude0","longitude1","longitude2","computeOptions","boundingRectangleScratch","nwCornerResult","stNwCornerResult","northCap","southCap","rotationOptions","stRotationOptions","createAttributes","constructRectangle","rectangleGeometry","rowStart","rowEnd","rowHeight","computePosition","calculateAttributes","northIndex","southIndex","topPositions","bottomPositions","addWallTextureCoordinates","wallTextures","constructExtrudedRectangle","offsetAttributeValue","_surfaceHeight","newVertexFormat","newLength","textures","hasOffsets","widthMultiplier","perimeterPositions","dupliateCorners","wallCount","wallExtrudeNormals","wallOffsetAttribute","computeTopOffsets","threeI","extrudeNormalIndex","wallOffsetIndex","calculateAttributesWall","scratchRectanglePoints","nwScratch","stNwScratch","RectangleGeometry","_rotatedRectangle","scratchRectangle","tangentRotationMatrixScratch","topBS","bottomBS","unrotatedTextureRectangleScratch","unrotatedTextureRectangle","boundingRectangleCenter","RectangleOutlineGeometry","bottomCorner","topRightCorner","bottomLeftCorner","FIXED","INERTIAL","requestAnimationFrame","lastFrameTime","setTimeout","requestAnimationFramePolyFill","createInterpolateFunction","tileRequest","tilePositions","createMarkFailedFunction","sampleTerrain","tileRequests","tileRequestSet","tilePromises","tilePromise","doSampling","sampleTerrainMostDetailed","byLevel","maxLevels","atLevel","positionsAtLevel","changedPositions","LEFT_DOWN","LEFT_UP","LEFT_CLICK","LEFT_DOUBLE_CLICK","RIGHT_DOWN","RIGHT_UP","RIGHT_CLICK","MIDDLE_DOWN","MIDDLE_UP","MIDDLE_CLICK","MOUSE_MOVE","WHEEL","PINCH_START","PINCH_END","PINCH_MOVE","screenSpaceEventHandler","clientX","clientY","rect","getBoundingClientRect","getInputEventKey","modifier","getModifier","shiftKey","KeyboardEventModifier","ctrlKey","altKey","MouseButton","registerListener","domType","capture","passive","mouseDownEvent","gotTouchEvent","_lastSeenTouchEvent","canProcessMouseEvent","ScreenSpaceEventHandler","mouseEmulationIgnoreMilliseconds","checkPixelTolerance","startPosition","endPosition","pixelTolerance","xDiff","yDiff","handleMouseDown","screenSpaceEventType","button","_buttonDown","ScreenSpaceEventType","_primaryPosition","_primaryStartPosition","_primaryPreviousPosition","action","getInputAction","preventDefault","mouseUpEvent","mouseClickEvent","cancelMouseEvent","clickScreenSpaceEventType","clickAction","_clickPixelTolerance","handleMouseUp","mouseMoveEvent","handleMouseMove","mouseDblClickEvent","handleDblClick","handleWheel","deltaY","deltaMode","DOM_DELTA_PIXEL","DOM_DELTA_LINE","detail","wheelDelta","handleTouchStart","touch","changedTouches","fireTouchEvents","previousPositions","_previousPositions","handleTouchEnd","touchStartEvent","touch2StartEvent","touchEndEvent","touchClickEvent","touchHoldEvent","numberOfTouches","pinching","_isPinching","_touchHoldTimer","_isTouchHolding","_holdPixelTolerance","touchHoldDelayMilliseconds","handleTouchMove","fireTouchMoveEvents","touchMoveEvent","touchPinchMovementEvent","angleAndHeight","previousPosition1","previousPosition2","dist","prevDX","prevDY","prevDist","cY","prevCY","prevAngle","handlePointerDown","setPointerCapture","pointerId","pointerType","handlePointerUp","handlePointerMove","_inputEvents","LEFT","MIDDLE","RIGHT","alternateElement","disableRootEvents","onmousewheel","registerListeners","setInputAction","removeInputAction","unregisterListeners","ShowGeometryInstanceAttribute","show","Simon1994PlanetaryPositions","taiToTdb","daysSinceJ2000InTerrestrialTime","computeTdbMinusTtSpice","epoch","RadiansPerDegree","RadiansPerArcSecond","perifocalToEquatorial","elementsToCartesian","eccentricity","inclination","longitudeOfPerigee","longitudeOfNode","meanLongitude","radiusOfPeriapsis","argumentOfPeriapsis","rightAscensionOfAscendingNode","trueAnomaly","meanAnomaly","eccentricAnomaly","revs","trueAnomalyX","trueAnomalyY","eccentricAnomalyToTrueAnomaly","iterationValue","keplerEqConvergence","NRfunction","dNRfunction","meanAnomalyToEccentricAnomaly","meanAnomalyToTrueAnomaly","chooseOrbit","cosap","sinap","cosi","sini","cosraan","sinraan","perifocalToCartesianMatrix","semilatus","costheta","sintheta","Epsilon10","meanLongitude0","meanLongitude1","scratchDate","computeSimonMoon","t3","t4","inclinationConstant","inclinationSecPart","longitudeOfPerigeeConstant","longitudeOfPerigeeSecPart","longitudeOfNodeConstant","longitudeOfNodeSecPart","meanLongitudeConstant","meanLongitudeSecPart","lprime","psi","twoD","fourD","sixD","twol","threel","fourl","twoF","twoPsi","threePsi","perigeeAndMean","axesTransformation","computeSunPositionInEarthInertialFrame","computeSimonEarthMoonBarycenter","moonEarthMassRatio","computeSimonEarth","computeMoonPositionInEarthInertialFrame","SimplePolylineGeometry","scratchArray1","scratchArray2","generateArcOptionsScratch","simplePolylineGeometry","positionValues","numberOfPositions","colorValues","perSegmentColors","generateArcFunction","generateArcOptions","positionCount","ci","segLen","lastColor","SphereGeometry","ellipsoidOptions","_ellipsoidGeometry","scratchEllipsoidGeometry","sphereGeometry","SphereOutlineGeometry","Spherical","radialSquared","subdivideArray","numberOfArrays","TerrainData","TileEdge","WEST","NORTH","EAST","SOUTH","NORTHWEST","NORTHEAST","SOUTHWEST","SOUTHEAST","TilingScheme","compareIntervalStartTimes","TimeIntervalCollection","intervals","_intervals","_changedEvent","addInterval","changedEvent","rightIntervals","findIntervalContainingDate","findDataForIntervalContainingDate","indexOfScratch","findInterval","interval","removeInterval","otherIntervals","leftInterval","rightInterval","fromJulianDateArray","julianDates","dataCallback","leadingInterval","trailingInterval","startDate","endDate","scratchGregorianDate","monthLengths","addToDate","scratchJulianDate","durationRegex","parseDuration","scratchDuration","fromIso8601DateArray","iso8601Dates","fromIso8601DurationArray","iso8601Durations","previousDate","relativeToPrevious","defaultScale","defaultTranslation","defaultRotation","TranslationRotationScale","VideoSynchronizer","_clock","_clockSubscription","_seekFunction","_lastPlaybackRate","_seeking","_firstTickAfterSeek","_onTick","_trySetPlaybackRate","playbackRate","readyState","paused","play","pause","desiredTime","clockTime","videoTime","DataRectangle","VRTheWorldTerrainProvider","_rectangles","srs","tileFormat","_heightmapHeight","dataRectangles","dataRectangle","cesium","getChildMask","parentRectangle","testRectangle","isTileInRectangle","tileRectangle","WallGeometryLibrary","latLonEquals","positionsArrayScratch","heightsArrayScratch","maximumHeights","minimumHeights","duplicateCorners","o","topHeights","bottomHeights","hasBottomHeights","hasTopHeights","hasAllZeroHeights","cleanedTopHeights","cleanedBottomHeights","removeDuplicates","numCorners","generateArcPositions","generateArcHeights","scratchCartesian3Position1","scratchCartesian3Position2","scratchCartesian3Position3","scratchCartesian3Position4","scratchCartesian3Position5","WallGeometry","_minimumHeights","_maximumHeights","fromConstantHeights","minHeights","maxHeights","doMin","doMax","wallGeometry","ds","nextTop","groundPosition","scalednextPosition","scaledGroundPosition","pl","pr","WallOutlineGeometry","webGLConstantToGlslType","webGLValue","WeightSpline","_weights","_count","ConstantProperty","_value","_hasClone","_hasEquals","_definitionChanged","setValue","isConstant","definitionChanged","getValue","isDefined","hasClone","hasEquals","createConstantProperty","createPropertyDescriptor","createPropertyCallback","privateName","subscriptionName","subscription","createProperty","BillboardGraphics","_show","_showSubscription","_image","_imageSubscription","_scale","_scaleSubscription","_pixelOffset","_pixelOffsetSubscription","_eyeOffset","_eyeOffsetSubscription","_horizontalOrigin","_horizontalOriginSubscription","_verticalOrigin","_verticalOriginSubscription","_heightReference","_heightReferenceSubscription","_color","_colorSubscription","_rotationSubscription","_alignedAxis","_alignedAxisSubscription","_sizeInMeters","_sizeInMetersSubscription","_widthSubscription","_heightSubscription","_scaleByDistance","_scaleByDistanceSubscription","_translucencyByDistance","_translucencyByDistanceSubscription","_pixelOffsetScaleByDistance","_pixelOffsetScaleByDistanceSubscription","_imageSubRegion","_imageSubRegionSubscription","_distanceDisplayCondition","_distanceDisplayConditionSubscription","_disableDepthTestDistance","_disableDepthTestDistanceSubscription","pixelOffset","eyeOffset","horizontalOrigin","verticalOrigin","heightReference","alignedAxis","sizeInMeters","scaleByDistance","translucencyByDistance","pixelOffsetScaleByDistance","imageSubRegion","disableDepthTestDistance","CLAMP_TO_GROUND","RELATIVE_TO_GROUND","CENTER","BOTTOM","BASELINE","DONE","PENDING","Property","arrayEquals","getValueOrUndefined","getValueOrDefault","valueDefault","getValueOrClonedDefault","defaultColor","defaultEyeOffset","defaultHeightReference","HeightReference","defaultPixelOffset","defaultAlignedAxis","defaultHorizontalOrigin","HorizontalOrigin","defaultVerticalOrigin","VerticalOrigin","eyeOffsetScratch","pixelOffsetScratch","scaleByDistanceScratch","translucencyByDistanceScratch","pixelOffsetScaleByDistanceScratch","distanceDisplayConditionScratch","EntityData","entity","billboard","textureValue","BillboardVisualizer","entityCluster","entityCollection","collectionChanged","_onCollectionChanged","_cluster","_entityCollection","_items","returnPrimitive","cluster","removeBillboard","billboardGraphics","_billboard","isShowing","isAvailable","_position","_clusterDirty","getBillboard","subRegion","setImageSubRegion","_imageId","BoundingSphereState","_clampedPosition","entities","added","changed","BlendEquation","ADD","SUBTRACT","REVERSE_SUBTRACT","BlendFunction","SOURCE_COLOR","ONE_MINUS_SOURCE_COLOR","DESTINATION_COLOR","ONE_MINUS_DESTINATION_COLOR","SOURCE_ALPHA","ONE_MINUS_SOURCE_ALPHA","DESTINATION_ALPHA","ONE_MINUS_DESTINATION_ALPHA","SOURCE_ALPHA_SATURATE","BlendingState","DISABLED","ALPHA_BLEND","equationRgb","equationAlpha","functionSourceRgb","functionSourceAlpha","functionDestinationRgb","functionDestinationAlpha","PRE_MULTIPLIED_ALPHA_BLEND","ADDITIVE_BLEND","CullFace","Appearance","material","translucent","_vertexShaderSource","vertexShaderSource","_fragmentShaderSource","fragmentShaderSource","_renderState","renderState","_closed","closed","getFragmentShaderSource","flat","faceForward","shaderSource","isTranslucent","getRenderState","rs","depthMask","blending","getDefaultRenderState","existing","depthTest","cull","face","ContextLimits","_maximumCombinedTextureImageUnits","_maximumCubeMapSize","_maximumFragmentUniformVectors","_maximumTextureImageUnits","_maximumRenderbufferSize","_maximumTextureSize","_maximumVaryingVectors","_maximumVertexAttributes","_maximumVertexTextureImageUnits","_maximumVertexUniformVectors","_minimumAliasedLineWidth","_maximumAliasedLineWidth","_minimumAliasedPointSize","_maximumAliasedPointSize","_maximumViewportWidth","_maximumViewportHeight","_maximumTextureFilterAnisotropy","_maximumDrawBuffers","_maximumColorAttachments","_highpFloatSupported","_highpIntSupported","maximumCombinedTextureImageUnits","maximumCubeMapSize","maximumFragmentUniformVectors","maximumTextureImageUnits","maximumRenderbufferSize","maximumTextureSize","maximumVaryingVectors","maximumVertexAttributes","maximumVertexTextureImageUnits","maximumVertexUniformVectors","minimumAliasedLineWidth","maximumAliasedLineWidth","minimumAliasedPointSize","maximumAliasedPointSize","maximumViewportWidth","maximumViewportHeight","maximumTextureFilterAnisotropy","maximumDrawBuffers","maximumColorAttachments","highpFloatSupported","highpIntSupported","CubeMapFace","textureTarget","targetFace","preMultiplyAlpha","_context","_texture","_textureTarget","_targetFace","_pixelDatatype","_internalFormat","_pixelFormat","_size","_preMultiplyAlpha","_flipY","_initialized","_target","copyFrom","gl","_gl","activeTexture","bindTexture","arrayBufferView","unpackAlignment","alignmentInBytes","pixelStorei","uploaded","texImage2D","toWebGLConstant","texSubImage2D","copyFromFramebuffer","framebufferXOffset","framebufferYOffset","copyTexSubImage2D","MipmapHint","mipmapHint","TextureMagnificationFilter","textureMagnificationFilter","TextureMinificationFilter","textureMinificationFilter","TextureWrap","textureWrap","Sampler","wrapS","wrapT","minificationFilter","magnificationFilter","maximumAnisotropy","_wrapS","_wrapT","_minificationFilter","_magnificationFilter","_maximumAnisotropy","CubeMap","positiveX","positiveY","positiveZ","toInternalFormat","isDepthFormat","floatingPointTexture","halfFloatingPointTexture","createTexture","createFace","sourceFace","_textureFilterAnisotropic","_hasMipmap","_sizeInBytes","_sampler","_positiveX","_negativeX","_positiveY","_negativeY","_positiveZ","_negativeZ","sampler","mipmap","textureFloatLinear","textureHalfFloatLinear","texParameteri","TEXTURE_MAX_ANISOTROPY_EXT","generateMipmap","hint","deleteTexture","Texture","videoWidth","videoHeight","isCompressed","depthTexture","isDXTFormat","s3tc","isPVRTCFormat","pvrtc","isETC1Format","etc1","compressedTexImage2D","mipLevels","mipWidth","mipHeight","framebuffer","defaultFramebuffer","_bind","copyTexImage2D","_unBind","_dimensions","fromFramebuffer","textureHeight","Material","materials","uniforms","_uniforms","_strict","_template","_texturePaths","_loadedImages","_loadedCubeMaps","_textures","_updateFunctions","_defaultTexture","strict","fabric","_translucentFunctions","cachedMaterial","_materialCache","getMaterial","checkForValidProperties","templateProperties","invalidNameError","componentProperties","materialNames","duplicateNameError","checkForTemplateErrors","addMaterial","isMultiMaterial","component","componentSource","isMaterialFused","createMethodDefinition","uniformId","createUniform","createUniforms","subMaterialTemplates","subMaterialId","subMaterial","newMethodName","originalMethodName","replaceToken","createSubMaterials","defaultTranslucent","initializeMaterial","_uniformList","throwNotFound","hasProperty","fromType","funcs","loadedImages","loadedImage","uniformDimensionsName","uniformDimensions","loadedCubeMaps","loadedCubeMap","images","cubeMap","updateFunctions","subMaterials","shaderComponent","matrixMap","mat2","mat3","mat4","ktxRegex","crnRegex","materialUniforms","uniformValue","uniformType","HTMLCanvasElement","HTMLImageElement","DefaultCubeMapId","numAttributes","getUniformType","imageDimensionsUniformName","excludePeriod","getNumberOfTokens","RegExp","uniformDeclaration","newUniformId","oldUniformValue","uniformChanged","HTMLVideoElement","defaultTexture","DefaultImageId","isResource","createTexture2DUpdateFunction","defaultCubeMap","createCubeMapUpdateFunction","scratchMatrix","newToken","regExp","$0","$1","$2","_materials","materialTemplate","ColorType","diffuse","ImageType","DiffuseMapType","channels","AlphaMapType","channel","SpecularMapType","specular","EmissionMapType","emission","BumpMapType","strength","NormalMapType","GridType","cellAlpha","lineCount","lineThickness","lineOffset","StripeType","horizontal","evenColor","oddColor","CheckerboardType","lightColor","darkColor","DotType","WaterType","baseWaterColor","blendColor","specularMap","normalMap","frequency","animationSpeed","amplitude","specularIntensity","fadeFactor","RimLightingType","rimColor","FadeType","fadeInColor","fadeOutColor","maximumDistance","fadeDirection","PolylineArrowType","PolylineDashType","gapColor","dashLength","dashPattern","PolylineGlowType","glowPower","taperPower","PolylineOutlineType","outlineColor","outlineWidth","ElevationContourType","spacing","ElevationRampType","SlopeRampMaterialType","AspectRampMaterialType","MaterialAppearance","materialSupport","MaterialSupport","TEXTURED","_materialSupport","_flat","_faceForward","BASIC","PerInstanceColorAppearance","vs","fs","FLAT_VERTEX_FORMAT","VERTEX_FORMAT","ColorMaterialProperty","getType","DrawCommand","_boundingVolume","_cull","_occlude","occlude","_modelMatrix","_primitiveType","_vertexArray","vertexArray","_instanceCount","instanceCount","_shaderProgram","shaderProgram","_uniformMap","uniformMap","_framebuffer","_pass","_executeInClosestFrustum","executeInClosestFrustum","_owner","owner","_debugShowBoundingVolume","debugShowBoundingVolume","_debugOverlappingFrustums","_castShadows","castShadows","_receiveShadows","receiveShadows","_pickId","pickId","_pickOnly","pickOnly","lastDirtyTime","derivedCommands","debugOverlappingFrustums","shallowClone","command","execute","passState","draw","ENVIRONMENT","COMPUTE","GLOBE","TERRAIN_CLASSIFICATION","CESIUM_3D_TILE","CESIUM_3D_TILE_CLASSIFICATION","CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW","OPAQUE","TRANSLUCENT","OVERLAY","NUMBER_OF_PASSES","freezeRenderState","propName","propNames","validateBlendEquation","blendEquation","validateBlendFunction","blendFunction","validateStencilFunction","stencilFunction","validateStencilOperation","stencilOperation","RenderState","cullFace","depthFunction","polygonOffset","scissorTest","scissorTestRectangle","depthRange","colorMask","blendingColor","stencilTest","stencilTestFrontOperation","frontOperation","stencilTestBackOperation","backOperation","sampleCoverage","frontFace","units","stencilMask","frontFunction","backFunction","fail","zFail","zPass","invert","_applyFunctions","nextRenderStateId","renderStateCache","enableOrDisable","glEnum","enable","disable","applyFrontFace","applyCull","applyLineWidth","applyPolygonOffset","applyScissorTest","scissor","applyDepthRange","applyDepthTest","depthFunc","applyColorMask","applyDepthMask","applyStencilMask","applyBlending","blendingEnabled","applyBlendingColor","blendEquationSeparate","blendFuncSeparate","applyStencilTest","stencilFunc","stencilFuncSeparate","frontOperationFail","frontOperationZFail","frontOperationZPass","stencilOpSeparate","backOperationFail","backOperationZFail","backOperationZPass","applySampleCoverage","fromCache","partialKey","cachedState","referenceCount","states","fullKey","removeFromCache","fullCachedState","getCache","clearCache","scratchViewport","applyViewport","uniformState","partialApply","previousRenderState","previousPassState","previousState","nextState","createFuncs","previousBlendingEnabled","getState","viewerPositionWCScratch","AutomaticUniform","_datatype","datatypeToGlsl","getDeclaration","declaration","AutomaticUniforms","czm_viewport","viewportCartesian4","czm_viewportOrthographic","viewportOrthographic","czm_viewportTransformation","czm_globeDepthTexture","globeDepthTexture","czm_model","czm_inverseModel","inverseModel","czm_view","czm_view3D","view3D","czm_viewRotation","viewRotation","czm_viewRotation3D","viewRotation3D","czm_inverseView","czm_inverseView3D","inverseView3D","czm_inverseViewRotation","inverseViewRotation","czm_inverseViewRotation3D","inverseViewRotation3D","czm_projection","czm_inverseProjection","inverseProjection","czm_infiniteProjection","infiniteProjection","czm_modelView","modelView","czm_modelView3D","modelView3D","czm_modelViewRelativeToEye","modelViewRelativeToEye","czm_inverseModelView","inverseModelView","czm_inverseModelView3D","inverseModelView3D","czm_viewProjection","czm_inverseViewProjection","czm_modelViewProjection","modelViewProjection","czm_inverseModelViewProjection","inverseModelViewProjection","czm_modelViewProjectionRelativeToEye","modelViewProjectionRelativeToEye","czm_modelViewInfiniteProjection","modelViewInfiniteProjection","czm_orthographicIn3D","orthographicIn3D","czm_normal","czm_normal3D","normal3D","czm_inverseNormal","inverseNormal","czm_inverseNormal3D","inverseNormal3D","czm_eyeHeight","eyeHeight","czm_eyeHeight2D","eyeHeight2D","czm_entireFrustum","entireFrustum","czm_currentFrustum","currentFrustum","czm_frustumPlanes","frustumPlanes","czm_farDepthFromNearPlusOne","farDepthFromNearPlusOne","czm_log2FarDepthFromNearPlusOne","log2FarDepthFromNearPlusOne","czm_oneOverLog2FarDepthFromNearPlusOne","oneOverLog2FarDepthFromNearPlusOne","czm_sunPositionWC","sunPositionWC","czm_sunPositionColumbusView","sunPositionColumbusView","czm_sunDirectionEC","sunDirectionEC","czm_sunDirectionWC","sunDirectionWC","czm_moonDirectionEC","moonDirectionEC","czm_lightDirectionEC","lightDirectionEC","czm_lightDirectionWC","lightDirectionWC","czm_lightColor","czm_lightColorHdr","lightColorHdr","czm_encodedCameraPositionMCHigh","encodedCameraPositionMCHigh","czm_encodedCameraPositionMCLow","encodedCameraPositionMCLow","czm_viewerPositionWC","czm_frameNumber","frameNumber","czm_morphTime","morphTime","czm_sceneMode","mode","czm_pass","czm_backgroundColor","czm_brdfLut","brdfLut","czm_environmentMap","environmentMap","czm_specularEnvironmentMaps","specularEnvironmentMaps","czm_specularEnvironmentMapSize","specularEnvironmentMapsDimensions","czm_specularEnvironmentMapsMaximumLOD","specularEnvironmentMapsMaximumLOD","czm_sphericalHarmonicCoefficients","sphericalHarmonicCoefficients","czm_temeToPseudoFixed","temeToPseudoFixedMatrix","czm_pixelRatio","czm_fogDensity","fogDensity","czm_imagerySplitPosition","imagerySplitPosition","czm_geometricToleranceOverMeter","geometricToleranceOverMeter","czm_minimumDisableDepthTestDistance","minimumDisableDepthTestDistance","czm_invertClassificationColor","invertClassificationColor","czm_gamma","czm_ellipsoidRadii","czm_ellipsoidInverseRadii","UniformFloat","activeUniform","uniformName","_location","UniformFloatVec2","UniformFloatVec3","UniformFloatVec4","UniformSampler","textureUnitIndex","UniformInt","UniformIntVec2","UniformIntVec3","UniformIntVec4","uniform1f","uniform2f","uniform3f","uniform4f","_setSampler","uniform1i","uniform2i","uniform3i","uniform4i","scratchUniformArray","UniformMat2","uniformMatrix2fv","scratchMat3Array","UniformMat3","uniformMatrix3fv","scratchMat4Array","UniformMat4","uniformMatrix4fv","UniformArrayFloat","locations","UniformArrayFloatVec2","UniformArrayFloatVec3","UniformArrayFloatVec4","UniformArraySampler","_locations","UniformArrayInt","UniformArrayIntVec2","UniformArrayIntVec3","UniformArrayIntVec4","UniformArrayMat2","UniformArrayMat3","UniformArrayMat4","arraybuffer","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","createUniformArray","nextShaderProgramId","ShaderProgram","vertexShaderText","fragmentShaderText","spector","modifiedFS","duplicateUniformNames","duplicateName","vertexShaderUniforms","extractUniforms","fragmentShaderUniforms","vertexUniformsCount","fragmentUniformsCount","re","handleUniformPrecisionMismatches","_logShaderCompilation","logShaderCompilation","_debugShaders","debugShaders","_attributeLocations","attributeLocations","_program","_numberOfVertexAttributes","_vertexAttributes","_uniformsByName","_automaticUniforms","_manualUniforms","_duplicateUniformNames","_cachedShader","maximumTextureUnitIndex","_vertexShaderText","_fragmentShaderText","shaderText","uniformNames","uniformLines","shaderCache","getShaderProgram","replaceCache","replaceShaderProgram","vertexAttributes","numberOfVertexAttributes","allUniforms","consolePrefix","shader","reinitialize","oldProgram","program","vsSource","fsSource","vertexShader","createShader","compileShader","fragmentShader","createProgram","attachShader","deleteShader","bindAttribLocation","linkProgram","getProgramParameter","getShaderParameter","getShaderInfoLog","fragmentSourceTranslation","getTranslatedShaderSource","deleteProgram","vertexSourceTranslation","getProgramInfoLog","createAndLinkProgram","uniformsByName","samplerUniforms","numberOfUniforms","getActiveUniform","getUniformLocation","uniform","uniformArray","loc","indexOfBracket","getUniform","findUniforms","partitionedUniforms","automaticUniforms","manualUniforms","uniformObject","duplicateUniform","automaticUniform","partitionUniforms","getActiveAttrib","getAttribLocation","findVertexAttributes","useProgram","setSamplerUniforms","__SPECTOR_rebuildProgram","vertexSourceCode","fragmentSourceCode","onCompiled","onError","originalVS","originalFS","_setUniforms","mu","au","validateProgram","releaseShaderProgram","finalDestroy","replaceInSourceString","splitSource","splitSourceLength","setAdd","variable","removeExtension","webgl2UniqueID","replaceInSourceRegex","modernizeShader","isFragmentShader","outputDeclarationRegex","outputDeclarationLine","outputVariables","fragDataString","newOutput","findInSource","variableMap","layoutVariables","numLayoutVariables","hasIF","hasELSE","hasENDIF","op","varIndex","varName","getVariablePreprocessorBranch","lineAdds","layoutDeclaration","variableName","lineNumber","entry","depth","foundVersion","wholeSource","compileSource","czm_degreesPerRadian","czm_depthRange","czm_epsilon1","czm_epsilon2","czm_epsilon3","czm_epsilon4","czm_epsilon5","czm_epsilon6","czm_epsilon7","czm_infinity","czm_oneOverPi","czm_oneOverTwoPi","czm_passCesium3DTile","czm_passCesium3DTileClassification","czm_passCesium3DTileClassificationIgnoreShow","czm_passClassification","czm_passCompute","czm_passEnvironment","czm_passGlobe","czm_passOpaque","czm_passOverlay","czm_passTerrainClassification","czm_passTranslucent","czm_pi","czm_piOverFour","czm_piOverSix","czm_piOverThree","czm_piOverTwo","czm_radiansPerDegree","czm_sceneMode2D","czm_sceneMode3D","czm_sceneModeColumbusView","czm_sceneModeMorphing","czm_solarRadius","czm_threePiOver2","czm_twoPi","czm_webMercatorMaxLatitude","czm_depthRangeStruct","czm_material","czm_materialInput","czm_ray","czm_raySegment","czm_shadowParameters","czm_acesTonemapping","czm_alphaWeight","czm_antialias","czm_approximateSphericalCoordinates","czm_backFacing","czm_branchFreeTernary","czm_cascadeColor","czm_cascadeDistance","czm_cascadeMatrix","czm_cascadeWeights","czm_columbusViewMorph","czm_computePosition","czm_cosineAndSine","czm_decompressTextureCoordinates","czm_depthClamp","czm_eastNorthUpToEyeCoordinates","czm_ellipsoidContainsPoint","czm_ellipsoidWgs84TextureCoordinates","czm_equalsEpsilon","czm_eyeOffset","czm_eyeToWindowCoordinates","czm_fastApproximateAtan","czm_fog","czm_gammaCorrect","czm_geodeticSurfaceNormal","czm_getDefaultMaterial","czm_getLambertDiffuse","czm_getSpecular","czm_getWaterNoise","czm_HSBToRGB","czm_HSLToRGB","czm_hue","czm_inverseGamma","czm_isEmpty","czm_isFull","czm_latitudeToWebMercatorFraction","czm_lineDistance","czm_luminance","czm_metersPerPixel","czm_modelToWindowCoordinates","czm_multiplyWithColorBalance","czm_nearFarScalar","czm_octDecode","czm_packDepth","czm_phong","czm_planeDistance","czm_pointAlongRay","czm_rayEllipsoidIntersectionInterval","czm_readDepth","czm_readNonPerspective","czm_reverseLogDepth","czm_RGBToHSB","czm_RGBToHSL","czm_RGBToXYZ","czm_sampleOctahedralProjection","czm_saturation","czm_shadowDepthCompare","czm_shadowVisibility","czm_signNotZero","czm_sphericalHarmonics","czm_tangentToEyeSpaceMatrix","czm_transformPlane","czm_translateRelativeToEye","czm_translucentPhong","czm_transpose","czm_unpackDepth","czm_unpackFloat","czm_vertexLogDepth","czm_windowToEyeCoordinates","czm_writeDepthClamp","czm_writeLogDepth","czm_writeNonPerspective","czm_XYZToRGB","removeComments","numberOfLines","getDependencyNode","glslSource","dependencyNode","dependsOn","requiredBy","evaluated","getBuiltinsAndAutomaticUniforms","dependencyNodes","generateDependencies","czmMatches","elem","ShaderSource","_czmBuiltinsAndUniforms","referencedNode","nodesWithoutIncomingEdges","allNodes","badNodes","sortDependencies","builtinsSource","combineShader","combinedSources","sources","group1","pickColorQualifier","createPickFragmentShaderSource","extensionsLength","defines","includeBuiltIns","builtinName","replaceMain","renamedMain","createCombinedVertexShader","createCombinedFragmentShader","CzmBuiltins","createPickVertexShaderSource","renamedVS","findVarying","names","namesLength","sourcesLength","normalVaryingNames","findNormalVarying","positionVaryingNames","findPositionVarying","ClassificationType","BOTH","DepthFunction","LESS_OR_EQUAL","NOT_EQUAL","GREATER_OR_EQUAL","BufferUsage","bufferUsage","usage","bufferTarget","hasArray","createBuffer","bindBuffer","bufferData","_webgl2","_bufferTarget","_usage","vertexArrayDestroyable","createVertexBuffer","createIndexBuffer","elementIndexUint","_getBuffer","copyFromArrayView","arrayView","bufferSubData","copyFromBuffer","readBuffer","readOffset","writeOffset","readTarget","writeTarget","copyBufferSubData","getBufferData","sourceOffset","destinationOffset","copyLength","elementSize","getBufferSubData","deleteBuffer","hasVertexBuffer","instanceDivisor","instancedArrays","vertexAttrib","vertexAttribPointer","enableVertexAttribArray","glVertexAttribDivisor","_vertexAttribDivisors","_previousDrawInstanced","disableVertexAttribArray","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","indexBuffer","VertexArray","vaAttributes","hasInstancedAttributes","hasConstantAttributes","bytes","vao","uniqueIndices","vertexArrayObject","glCreateVertexArray","glBindVertexArray","_numberOfVertices","_hasInstancedAttributes","_hasConstantAttributes","_vao","_attributes","_indexBuffer","computeAttributeSizeInBytes","fromGeometry","interleave","createdVAAttributes","vertexArrayAttributes","interleavedAttributes","currentNumberOfVertices","vertexSizeInBytes","offsetsInBytes","maxComponentSizeInBytes","remainder","views","pointer","strideInComponentType","interleaveAttributes","divisors","maxAttributes","setVertexAttribDivisor","setConstantAttributes","glDeleteVertexArray","BatchTable","numberOfInstances","_numberOfInstances","foundFloatDatatype","getDatatype","textureFloatSupported","packFloats","offsets","currentOffset","attributesLength","createOffsets","lastOffset","maxNumberOfInstancesPerRow","instancesPerWidth","stepX","centerX","stepY","centerY","_textureDimensions","_textureStep","_packFloats","_offsets","_stride","batchLength","_batchValues","_batchValuesDirty","getAttributeType","attributeIndex","scratchPackedFloatCartesian4","scratchGetAttributeCartesian4","getBatchedAttribute","instanceIndex","getPackedFloat","attributeType","setAttributeScratchValues","setAttributeScratchCartesian4","getGlslAttributeFunction","batchTable","functionReturnType","getComponentType","functionReturnValue","getComponentSwizzle","glslFunction","setBatchedAttribute","attributeValue","setPackedAttribute","updateTexture","getUniformMapCallback","batchUniformMap","batchTexture","batchTextureDimensions","batchTextureStep","getVertexShaderCallback","batchTableShader","getGlslComputeSt","mainIndex","beforeMain","afterMain","addGeometryBatchId","batchId","positionAttr","geometryPipeline","uintIndexSupport","elementIndexUintSupported","vertexCacheOptimize","primitiveModelMatrix","toWorld","addBatchIds","name3D","name2D","position2D","splitGeometries","createPickOffsets","geometryName","pickOffsets","geometryIndex","pickOffset","PrimitivePipeline","transferGeometry","packInstancesForCombine","packedData","packBoundingSpheres","bufferLength","unpackBoundingSpheres","combineGeometry","offsetInstanceExtend","hasOffset","createInstancePickOffsets","boundingSpheresCV","packCreateGeometryResults","countCreateGeometryResults","stringTable","stringHash","validGeometry","validBoundingSphere","validBoundingSphereCV","attributesToWrite","unpackCreateGeometryResults","createGeometryResult","packedGeometry","packedGeometryIndex","valuesIndex","packCombineGeometryParameters","createGeometryResults","packedInstances","unpackCombineGeometryParameters","packedParameters","unpackInstancesForCombine","geometriesLength","packCombineGeometryResults","transferGeometries","packedBoundingSpheres","packedBoundingSpheresCV","unpackCombineGeometryResults","packedResult","READY","CREATING","CREATED","COMBINING","COMBINED","COMPLETE","SceneMode","MORPHING","COLUMBUS_VIEW","SCENE2D","SCENE3D","ShadowMode","ENABLED","CAST_ONLY","RECEIVE_ONLY","shadowMode","Primitive","geometryInstances","appearance","_appearance","_material","depthFailAppearance","_depthFailAppearance","_depthFailMaterial","_vertexCacheOptimize","_interleave","_releaseGeometryInstances","releaseGeometryInstances","_allowPicking","allowPicking","_asynchronous","asynchronous","_compressVertices","shadows","_translucent","_state","PrimitiveState","_geometries","_error","_boundingSpheres","_boundingSphereWC","_boundingSphereCV","_boundingSphere2D","_boundingSphereMorph","_perInstanceAttributeCache","_instanceIds","_lastPerInstanceAttributeIndex","_va","_frontFaceRS","_backFaceRS","_sp","_spDepthFail","_frontFaceDepthFailRS","_backFaceDepthFailRS","_pickIds","_colorCommands","_pickCommands","_createBoundingVolumeFunction","_createRenderStatesFunction","_createShaderProgramFunction","_createCommandsFunction","_updateAndQueueCommandsFunction","_createPickOffsets","_pickOffsets","_createGeometryResults","_batchTable","_batchTableAttributeIndices","_offsetInstanceExtend","_batchTableOffsetAttribute2DIndex","_batchTableOffsetsUpdated","_instanceBoundingSpheres","_instanceBoundingSpheresCV","_tempBoundingSpheres","_recomputeBoundingSpheres","_batchTableBoundingSpheresUpdated","_batchTableBoundingSphereAttributeIndices","scratchGetAttributeCartesian2","scratchGetAttributeCartesian3","getAttributeValue","createBatchTable","primitive","offset2DIndex","attributesInAllInstances","inAllInstances","getCommonPerInstanceAttributeNames","attributeIndices","boundingSphereAttributeIndices","instanceAttributes","center3DHigh","center3DLow","center2DHigh","center2DLow","pickObject","createPickId","pickColor","cloneAttribute","clonedValues","cloneGeometry","cloneInstance","positionRegex","appendPickToVertexShader","appendPickToFragmentShader","modifyForEncodedNormals","containsNormal","containsSt","containsTangent","containsBitangent","attributeDecl","globalDecl","modifiedVS","validateShaderMatching","shaderAttributes","getUniformFunction","_modifyShaderPosition","forwardDecl","computeFunctions","_appendShowToShader","_updateColorAttribute","isDepthFail","depthFailColor","_updatePickColorAttribute","vsPick","_appendOffsetToShader","modifiedShader","_appendDistanceDisplayConditionToShader","distanceDisplayConditionMain","createGeometryTaskProcessors","numberOfCreationWorkers","combineGeometryTaskProcessor","scratchBoundingSphereCenterEncoded","scratchBoundingSphereCartographic","scratchBoundingSphereCenter2D","offsetScratchCartesian","offsetCenterScratch","updateBatchTableOffsets","index2D","center2D","newPoint","newPointProjected","newVector","createRenderStates","twoPasses","createShaderProgram","depthClampVS","depthClampFS","modifiedModelViewScratch","rtcScratch","getUniforms","materialUniformMap","appearanceUniformMap","appearanceUniforms","u_modifiedModelView","viewMatrix","createCommands","colorCommands","pickCommands","depthFailUniforms","Pass","vaIndex","colorCommand","updateAndQueueCommands","_updateBoundingVolumes","commandList","passes","render","pick","sphereIndex","forceUpdate","pixelSize","boundingSphereWC","getPixelSize","instanceIds","subTask","subTasks","moduleName","subTaskTransferableObjects","workerSubTasks","workerSubTasksLength","setReady","loadAsynchronous","clonedInstances","createdGeometry","loadSynchronous","center3DHighIndex","center3DLowIndex","center2DHighIndex","center2DLowIndex","radiusIndex","encodedCenter","updateBatchTableBoundingSpheres","va","createVertexArray","newBoundingSpheres","newBS","transformBoundingSphere","combinedBS","combinedWestBS","combinedEastBS","resultBS1","resultBS2","resultBS3","recomputeBoundingSpheres","createRS","createSP","depthFailMaterial","rsFunc","spFunc","commandFunc","updateAndQueueCommandsFunc","offsetBoundingSphereScratch1","offsetBoundingSphereScratch2","origBS","offsetBS","createGetFunction","createSetFunction","afterRender","getGeometryInstanceAttributes","ids","curIndex","perInstanceAttributeIndices","createBoundingSphereProperties","createPickIdProperty","pickIds","ShadowVolumeAppearance","extentsCulling","planarExtents","_projectionExtentDefines","eastMostYhighDefine","eastMostYlowDefine","westMostYhighDefine","westMostYlowDefine","colorShaderDependencies","ShaderDependencies","requiresTextureCoordinates","requiresEC","pickShaderDependencies","requiresNormalEC","materialShaderSource","normalEC","positionToEyeEC","tangentToEyeMatrix","_colorShaderDependencies","_pickShaderDependencies","_extentsCulling","_planarExtents","createFragmentShader","columbusView2D","dependencies","requiresWC","materialSource","ShadowVolumeAppearanceFS","createPickFragmentShader","createVertexShader","createShadowVolumeAppearanceVS","createPickVertexShader","longitudeExtentsCartesianScratch","longitudeExtentsCartographicScratch","longitudeExtentsEncodeScratch","shaderDependencies","projectionExtentDefines","allDefines","eastMostCartographic","eastMostCartesian","westMostCartographic","westMostCartesian","_requiresEC","_requiresWC","_requiresNormalEC","_requiresTextureCoordinates","_usesNormalEC","_usesPositionToEyeEC","_usesTangentToEyeMat","_usesSt","pointLineDistance","point1","point2","addTextureCoordinateRotationAttributes","uMaxVmax","inverseExtentX","inverseExtentY","uvMinAndExtents","cornerScratch","northWestScratch","southEastScratch","highLowScratch","add2DTextureCoordinateAttributes","southWestCorner","northWest","southEast","valuesHigh","valuesLow","planes2D_HIGH","planes2D_LOW","enuMatrixScratch","inverseEnuScratch","rectanglePointCartesianScratch","pointsCartographicScratch","eastwardScratch","northwardScratch","getPlanarTextureCoordinateAttributes","eastward","northward","southWestCornerResult","eastVectorResult","northVectorResult","centerCartographic","enuMatrix","inverseEnu","longitudeCenter","latitudeCenter","pointCartesian","southEastCorner","northWestCorner","computeRectangleBounds","southWest_HIGH","southWest_LOW","spherePointScratch","latLongToSpherical","spherePoint","magXY","sphereLatitude","sphereLongitude","sphericalScratch","getSphericalExtentGeometryInstanceAttributes","southWestExtents","northEastExtents","rotationRadians","longitudeRangeInverse","latitudeRangeInverse","sphericalExtents","longitudeRotation","hasAttributesForTextureCoordinatePlanes","hasAttributesForSphericalExtents","shouldUseSphericalCoordinates","MAX_WIDTH_FOR_PLANAR_EXTENTS","shouldUseSpherical","StencilFunction","StencilOperation","INCREMENT","DECREMENT","INCREMENT_WRAP","DECREMENT_WRAP","StencilConstants","CESIUM_3D_TILE_MASK","SKIP_LOD_MASK","SKIP_LOD_BIT_SHIFT","CLASSIFICATION_MASK","ClassificationPrimitive","classificationType","debugShowShadowVolume","_debugShowShadowVolume","_extruded","_spStencil","_spPick","_spColor","_spPick2D","_spColor2D","_rsStencilDepthPass","_rsStencilDepthPass3DTiles","_rsColorPass","_rsPickPass","_commandsIgnoreShow","_primitive","_pickPrimitive","_hasSphericalExtentsAttribute","_hasPlanarExtentsAttributes","_hasPerColorAttribute","_usePickOffsets","_primitiveOptions","getStencilDepthRenderState","enableStencil","mask3DTiles","getColorRenderState","_needs2DShader","stencilBuffer","pickRenderState","classificationPrimitive","cullFragmentsUsingExtents","extrudedDefine","ShadowVolumeFS","shadowVolumeAppearance","pickFS3D","pickVS3D","pickProgram2D","getDerivedShaderProgram","pickFS2D","pickVS2D","createDerivedShaderProgram","fsColorSource","vsColorSource","colorProgram2D","fsColorSource2D","vsColorSource2D","derivedCommand","needs2DShader","tileset","derived2DCommand","appearance2D","commandsIgnoreShow","spStencil","commandIndex","commandIgnoreShow","createColorCommands","usePickOffsets","pickIndex","pick2D","createPickCommands","boundingVolumeIndex","updateAndQueueRenderCommand","updateAndQueuePickCommand","primitiveOptions","firstColor","hasPerColorAttribute","allColorsSame","hasSphericalExtentsAttribute","hasPlanarExtentsAttributes","stencilEnabled","boundingVolumes","queueTerrainCommands","queue3DTilesCommands","invertClassification","ignoreShowCommands","ignoreShowCommandsLength","pickLength","GroundPrimitiveUniformMap","u_globeMinimumAltitude","GroundPrimitive","geometryInstancesArray","geometryInstanceCount","_boundingVolumes","_boundingVolumes2D","_maxHeight","_minHeight","_maxTerrainHeight","_minTerrainHeight","_boundingSpheresKeys","_useFragmentCulling","_zIndex","_classificationPrimitiveOptions","getComputeMaximumHeightFunction","getComputeMinimumHeightFunction","scratchBVCartesianHigh","scratchBVCartesianLow","scratchBVCartesian","scratchBVCartographic","scratchBVRectangle","getRectangle","position3DHigh","highPositions","lowPositions","position3DLow","highPosition","lowPosition","groundPrimitive","initializeTerrainHeights","instanceType","groundInstances","instanceRectangle","setMinMaxTerrainHeights","terrainExaggeration","useFragmentCulling","_supportsMaterials","usePlanarExtents","attributeKey","createBoundingVolume","supportsMaterials","MaterialProperty","materialProperty","DynamicGeometryUpdater","geometryUpdater","primitives","orderedGroundPrimitives","_primitives","_orderedGroundPrimitives","_outlinePrimitive","_geometryUpdater","_options","_entity","_isHidden","_setOptions","onTerrain","_onTerrain","removeAndDestroy","_geometryPropertyName","shadowsProperty","fillMaterialProperty","isColorAppearance","_getIsClosed","_supportsMaterialsforEntitiesOnTerrain","createFillGeometryInstance","classificationTypeProperty","zIndex","fillInstance","outline","outlineInstance","createOutlineGeometryInstance","_scene","clampLineWidth","outlinePrimitive","defaultVertexShaderSource","PolylineCommon","PolylineColorAppearance","PolylineMaterialAppearance","PolylineFS","GroundPolylinePrimitive","_hasPerInstanceColors","_sp2D","_spMorph","_renderState3DTiles","_renderStateMorph","updateAndQueueCommand","groundPolylinePrimitive","colorMorph","color2D","geometryInstancesLength","vsMorph","vsDefines","colorDefine","fsDefines","vsColor3D","fsColor3D","vsColor2D","colorProgramMorph","vsColorMorph","fsColorMorph","derivedTilesetCommand","derived2DTilesetCommand","derivedMorphCommand","morphing","defaultRepeat","ImageMaterialProperty","_repeatSubscription","_transparent","_transparentSubscription","transparent","createMaterialProperty","createMaterialPropertyDescriptor","BoxGraphics","_dimensionsSubscription","_fill","_fillSubscription","_materialSubscription","_outline","_outlineSubscription","_outlineColor","_outlineColorSubscription","_outlineWidth","_outlineWidthSubscription","_shadows","_shadowsSubscription","PositionProperty","referenceFrame","getValueInReferenceFrame","scratchMatrix3","convertToReferenceFrame","inputFrame","outputFrame","icrfToFixed","ReferenceFrame","ConstantPositionProperty","_referenceFrame","CorridorGraphics","_positionsSubscription","_extrudedHeightSubscription","_extrudedHeightReference","_extrudedHeightReferenceSubscription","_cornerTypeSubscription","_granularitySubscription","_classificationType","_classificationTypeSubscription","_zIndexSubscription","extrudedHeightReference","createRawProperty","createRawPropertyDescriptor","CylinderGraphics","_lengthSubscription","_topRadiusSubscription","_bottomRadiusSubscription","_numberOfVerticalLinesSubscription","_slicesSubscription","EllipseGraphics","_semiMajorAxisSubscription","_semiMinorAxisSubscription","_stRotationSubscription","EllipsoidGraphics","_radiiSubscription","_innerRadiiSubscription","_minimumClockSubscription","_maximumClockSubscription","_minimumConeSubscription","_maximumConeSubscription","_stackPartitionsSubscription","_slicePartitionsSubscription","_subdivisionsSubscription","LabelGraphics","_text","_textSubscription","_font","_fontSubscription","_style","_styleSubscription","_showBackground","_showBackgroundSubscription","_backgroundColor","_backgroundColorSubscription","_backgroundPadding","_backgroundPaddingSubscription","_fillColor","_fillColorSubscription","showBackground","backgroundPadding","defaultNodeTransformation","NodeTransformationProperty","_translation","_translationSubscription","PropertyBag","_propertyNames","propertyNames","addProperty","removeProperty","sourcePropertyNames","targetProperty","sourceProperty","aPropertyNames","bPropertyNames","aIndex","propertiesEqual","createNodeTransformationProperty","ModelGraphics","_uri","_uriSubscription","_minimumPixelSize","_minimumPixelSizeSubscription","_maximumScale","_maximumScaleSubscription","_incrementallyLoadTextures","_incrementallyLoadTexturesSubscription","_runAnimations","_runAnimationsSubscription","_clampAnimations","_clampAnimationsSubscription","_silhouetteColor","_silhouetteColorSubscription","_silhouetteSize","_silhouetteSizeSubscription","_colorBlendMode","_colorBlendModeSubscription","_colorBlendAmount","_colorBlendAmountSubscription","_imageBasedLightingFactor","_imageBasedLightingFactorSubscription","_lightColor","_lightColorSubscription","_nodeTransformations","_nodeTransformationsSubscription","_articulations","_articulationsSubscription","_clippingPlanes","_clippingPlanesSubscription","minimumPixelSize","maximumScale","incrementallyLoadTextures","runAnimations","clampAnimations","silhouetteColor","silhouetteSize","colorBlendMode","colorBlendAmount","imageBasedLightingFactor","nodeTransformations","articulations","clippingPlanes","sourceNodeTransformations","targetNodeTransformations","sourceArticulations","targetArticulations","Cesium3DTilesetGraphics","_maximumScreenSpaceError","_maximumScreenSpaceErrorSubscription","maximumScreenSpaceError","PathGraphics","_leadTime","_leadTimeSubscription","_trailTime","_trailTimeSubscription","_resolution","_resolutionSubscription","leadTime","trailTime","resolution","PlaneGraphics","_planeSubscription","PointGraphics","_pixelSize","_pixelSizeSubscription","PolygonGraphics","_hierarchy","_hierarchySubscription","_perPositionHeightSubscription","_closeTopSubscription","_closeBottomSubscription","_arcTypeSubscription","PolylineGraphics","_depthFailMaterialSubscription","_clampToGround","_clampToGroundSubscription","clampToGround","PolylineVolumeGraphics","_shapeSubscription","_distanceDisplayConditionSubsription","RectangleGraphics","_coordinates","_coordinatesSubscription","_distancedisplayConditionSubscription","WallGraphics","_minimumHeightsSubscription","_maximumHeightsSubscription","createConstantPositionProperty","createPropertyTypeDescriptor","Type","Entity","_name","_parent","_billboardSubscription","_box","_boxSubscription","_corridor","_corridorSubscription","_cylinder","_cylinderSubscription","_description","_descriptionSubscription","_ellipse","_ellipseSubscription","_ellipsoidSubscription","_label","_labelSubscription","_model","_modelSubscription","_tileset","_tilesetSubscription","_orientationSubscription","_path","_pathSubscription","_point","_pointSubscription","_polygon","_polygonSubscription","_polyline","_polylineSubscription","_polylineVolume","_polylineVolumeSubscription","_positionSubscription","_properties","_propertiesSubscription","_rectangleSubscription","_viewFrom","_viewFromSubscription","_wall","_wallSubscription","_children","updateShow","childShow","wasShowing","corridor","cylinder","description","ellipse","polyline","polylineVolume","viewFrom","propertyNamesLength","orientationScratch","computeModelMatrix","computeModelMatrixForHeightReference","heightReferenceProperty","supportsMaterialsforEntitiesOnTerrain","supportsPolylinesOnTerrain","defaultMaterial","defaultShow","defaultFill","defaultOutline","defaultOutlineColor","defaultShadows","defaultDistanceDisplayCondition","defaultClassificationType","GeometryUpdater","geometryOptions","geometryPropertyName","observedPropertyNames","_fillEnabled","_isClosed","_dynamic","_outlineEnabled","_geometryChanged","_showProperty","_materialProperty","_showOutlineProperty","_outlineColorProperty","_shadowsProperty","_distanceDisplayConditionProperty","_classificationTypeProperty","_observedPropertyNames","fillEnabled","hasConstantFill","_fillProperty","outlineEnabled","hasConstantOutline","outlineColorProperty","distanceDisplayConditionProperty","isDynamic","isClosed","geometryChanged","isOutlineVisible","visible","isFilled","_isOnTerrain","_isDynamic","_setStaticOptions","_onEntityPropertyChanged","newValue","fillProperty","outlineProperty","createDynamicUpdater","groundPrimitives","CallbackProperty","_callback","_isConstant","setCallback","scratchCarto","TerrainOffsetProperty","positionProperty","extrudedHeightReferenceProperty","_positionProperty","_cartographicPosition","_normal","_terrainHeight","_removeCallbackFunc","_removeEventListener","_removeModeListener","globe","terrainProviderChanged","_updateClamping","morphComplete","surface","_surface","cartographicPosition","updateHeight","clampedPosition","heightReferenceOnEntityPropertyChanged","_terrainOffsetProperty","centerPosition","_computeCenter","defaultOffset","scratchColor","BoxGeometryOptions","BoxGeometryUpdater","DynamicBoxGeometryUpdater","terrainOffsetProperty","currentColor","ClearCommand","stencil","Axis","X","Y","Z","Y_UP_TO_Z_UP","Z_UP_TO_Y_UP","X_UP_TO_Z_UP","Z_UP_TO_X_UP","X_UP_TO_Y_UP","Y_UP_TO_X_UP","fromName","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","HIGHLIGHT","MIX","ComponentsPerAttribute","ClassPerType","getBinaryAccessor","accessor","componentType","classType","createArrayBufferView","DEFAULT_COLOR_VALUE","Cesium3DTileBatchTable","featuresLength","batchTableJson","batchTableBinary","colorChangedCallback","_translucentFeaturesLength","_extensions","textureDimensions","textureStep","jsonHeader","initializeProperties","_batchTableHierarchy","binaryBody","legacyHierarchy","HIERARCHY","_deprecationWarning","hierarchyJson","classId","binaryAccessor","parentIndexes","instancesLength","classIds","parentCounts","parentIds","parentIdsLength","AttributeType","classesLength","classInstancesLength","binaryProperties","getBinaryProperties","classCounts","classIndexes","scratchValidateStack","validateInstance","validateHierarchy","initializeHierarchyValues","initializeHierarchy","_batchTableBinaryProperties","_showAlphaProperties","_batchTexture","_pickTexture","_content","_colorChangedCallback","memorySizeInBytes","memory","parentCount","parentIndex","parentId","componentCount","getByteLength","getBatchValues","getShowAlphaProperties","checkBatchId","setShow","showAlphaProperties","propertyOffset","newShow","setAllShow","getShow","scratchColorBytes","setColor","newColor","newAlpha","batchValues","wasTranslucent","setAllColor","getColor","getPickColor","getBinaryProperty","binaryProperty","setBinaryProperty","applyStyle","feature","getFeature","evaluateColor","scratchVisited","scratchStack","marker","traverseHierarchy","endConditionCallback","visited","visitedMarker","traverseHierarchyMultipleParents","hasParent","traverseHierarchySingleParent","getDefaultShader","applyHighlight","modifyDiffuse","diffuseAttributeOrUniformName","uniformMatch","sourceDiffuse","replaceDiffuse","functionCall","fromIndex","nestedLevel","character","replacedFunction","replaceDiffuseTextureCalls","isClass","className","isExactClass","getExactClassName","hasPropertyInHierarchy","getPropertyNames","getPropertyNamesInHierarchy","getProperty","propertyValues","hierarchyProperty","instanceClass","indexInClass","getHierarchyProperty","setProperty","setHierarchyProperty","handleTranslucent","batchIdAttributeName","newMain","renamedSource","getFragmentShaderCallback","getClassificationFragmentShaderCallback","tile_batchTexture","tile_textureDimensions","tile_textureStep","tile_colorBlend","Cesium3DTileColorBlendMode","EPSILON4","getColorBlend","tile_pickTexture","getPickId","StyleCommandsNeeded","deriveCommand","translucentCommand","tile_translucentCommand","deriveTranslucentCommand","getTranslucentRenderState","deriveOpaqueCommand","setCesium3DTileBit","getOpaqueRenderState","deriveZBackfaceCommand","u_polygonOffset","unshift","getLogDepthPolygonOffsetFragmentShaderProgram","deriveStencilCommand","getLastSelectionDepth","stencilCommand","addDerivedCommands","commandStart","commandEnd","_tile","finalResolution","_finalResolution","bivariateVisibilityTest","_skipLevelOfDetail","_hasMixedContent","styleCommandsNeeded","translucentFeaturesLength","getStyleCommandsNeeded","originalCommand","opaque","zback","_backfaceCommands","_selectionDepth","opaqueCommand","postProcess","_statistics","batchTableByteLength","createPickTexture","updateBatchTexture","Cesium3DTileFeature","_batchId","featurePropertiesDirty","Cesium3DTileFeatureTable","featureTableJson","featureTableBinary","_cachedTypedArrays","getTypedArrayFromBinary","featureTable","componentLength","cachedTypedArrays","getGlobalProperty","jsonValue","getPropertyArray","getTypedArrayFromArray","featureId","addToArray","checkDuplicates","hasExtension","gltf","extensionsUsed","ForEach","objectLegacy","objects","objectId","arrayOfObjects","topLevel","gltfProperty","accessorWithSemantic","meshPrimitive","valueForEach","meshPrimitiveAttribute","accessorId","attributeSemantic","meshPrimitiveTarget","meshPrimitiveTargetAttribute","accessorContainingVertexAttributeData","accessorContainingIndexData","animation","animationChannel","animationSampler","samplers","compressedImage","extras","compressedImages","compressedImage3DTiles","materialValue","KHR_techniques_webgl","primitivesLength","targets","nodeInTree","nodeIds","nodeId","nodeInScene","sceneNodeIds","programs","shaders","skin","skinJoint","joints","jointsLength","techniqueAttribute","technique","techniqueUniform","techniqueParameter","parameterName","techniques","numberOfComponentsForType","getAccessorByteStride","bufferViewId","bufferViews","byteStride","addTextureDefaults","texCoord","addDefaults","accessors","normalized","materialsCommon","KHR_materials_common","ambient","transparency","doubleSided","shininess","emissiveFactor","alphaMode","alphaCutoff","techniquesExtension","emissiveTexture","normalTexture","occlusionTexture","pbrMetallicRoughness","baseColorFactor","metallicFactor","roughnessFactor","baseColorTexture","metallicRoughnessTexture","pbrSpecularGlossiness","diffuseFactor","specularFactor","glossinessFactor","specularGlossinessTexture","animatedNodes","getAnimatedNodes","scenes","addExtras","_pipeline","addPipelineExtras","removeExtensionsRequired","extensionsRequired","removeExtensionsUsed","readHeader","glb","parseGlb","contentLength","binaryStart","contentString","binaryBuffer","buffers","binaryGltfBuffer","binary_glTF","KHR_binary_glTF","parseGlbVersion1","chunkHeader","chunkLength","chunkType","chunkBuffer","parseGlbVersion2","addExtensionsUsed","getComponentReader","componentTypeByteLength","getInt8","getInt16","findAccessorMinMax","componentReader","defaultBlendEquation","defaultBlendFactors","isStateEnabled","renderStates","supportedBlendFactors","getSupportedBlendFactors","moveTechniqueRenderStates","blendingForTechnique","materialPropertiesForTechnique","techniquesLegacy","techniqueLegacy","techniqueIndex","materialProperties","blendFunctions","functions","blendFactors","KHR_blend","addExtensionsRequired","moveTechniquesToExtension","mappedUniforms","updatedTechniqueIndices","glExtensions","glExtensionsUsed","parameterLegacy","programLegacy","materialExtension","allElementTypes","TypeToGltfElementName","Remove","getListOfElementsIdsInUse","attributeAccessorId","inverseBindMatrices","input","bufferId","compressedImageBufferView","KHR_draco_mesh_compression","meshId","meshes","skeleton","materialId","usedAccessorIds","usedBufferIds","usedBufferViewIds","usedMeshIds","usedNodeIds","nodeIsEmpty","joint","usedMaterialIds","removeUnusedElements","elementTypes","usedIds","removeUnusedElementsByType","addBuffer","newBuffer","readAccessorPacked","convertType","updatedComponentType","updateAccessorComponentTypes","asset","profile","api","updateInstanceTechniques","setPrimitiveModes","updateNodes","updateAnimations","removeTechniquePasses","allExtensions","lights","animations","animationId","samplerId","removeAnimationSamplersIndirection","isNodeEmpty","deleteNode","sceneNodes","parentNodeId","removeEmptyNodes","jointName","globalMapping","cameras","skins","jointNameToId","topLevelId","objectMapping","objectToArray","binaryGltf","parameter","childrenLength","meshesLength","meshNode","meshNodeId","skeletons","jointNames","jointNamesLength","sceneNodesLength","samplerMapping","compressedExtensions","compressedBinaryGltf","objectsToArrays","removeAnimationSamplerNames","premultipliedAlpha","stripAsset","extensionsUsedLength","knownExtensions","requireKnownExtensions","accessorByteStride","computeAccessorByteStride","accessorByteEnd","requireByteLength","bufferViewHasVertexAttributes","bufferViewMap","currentByteOffset","accessorsLength","accessorByteOffset","accessorByteLength","hasNextAccessor","nextAccessorByteStride","newBufferView","newBufferViewId","moveByteStrideToBufferView","minMax","requirePositionAccessorMinMax","requireAnimationAccessorMinMax","removeBufferType","removeTextureProperties","TEXCOORD_0","COLOR_0","TEXCOORD","requireAttributeSetIndex","mappedSemantics","newSemantic","setIndex","strippedSemantic","suffix","indexedSemantic","indexedSemantics","knownSemantics","mappedSemantic","underscoreApplicationSpecificSemantics","perspective","yfov","clampCameraParameters","removeEmptyArrays","instanceTechnique","defaultMode","instanceSkin","updatedAccessors","channelsLength","techniqueId","passName","instanceProgram","mapping","CESIUM_RTC","WEB3D_quantized_attributes","POSITION","NORMAL","TANGENT","JOINT","JOINTS","WEIGHT","WEIGHTS","updateVersion","targetVersion","updateFunction","ModelLoadResources","resourcesParsed","vertexBuffersToCreate","indexBuffersToCreate","pendingBufferLoads","programsToCreate","pendingShaderLoads","texturesToCreate","pendingTextureLoads","texturesToCreateFromBufferView","pendingBufferViewToImage","createSamplers","createSkins","createRuntimeAnimations","createVertexArrays","createUniformMaps","createRuntimeNodes","createdBufferViews","primitivesToDecode","activeDecodingTasks","pendingDecodingCache","skinnedNodesIds","getBuffer","finishedPendingBufferLoads","finishedBuffersCreation","finishedProgramCreation","finishedTextureCreation","finishedPendingLoads","finishedResourceCreation","finishedEverythingButTextureCreation","finishedDecoding","finished","ModelUtility","cachedSourceVersion","sourceVersion","getAssetVersion","_gltfForwardAxis","primitiveInfoByMaterial","accessorType","materialIndex","jointAccessorId","JOINTS_0","jointAccessor","isSkinned","hasVertexColors","hasMorphTargets","hasNormals","hasTangents","hasTexCoords","hasOutline","CESIUM_primitive_outline","primitiveInfo","skinning","skinned","clonedMaterial","NEEDS_LOAD","LOADING","LOADED","ModelState","bufferLoad","loadResources","_loadResources","bufferResource","getFailedLoadFunction","aMinScratch","aMaxScratch","techniqueAttributeForSemantic","getTechniqueAttributeOrUniformFunction","ignoreNodes","attributeOrUniform","attributeOrUniformName","gltfNodes","gltfMeshes","rootNodesLength","nodeStack","_transformToRoot","getTransform","transformToRoot","positionAccessor","getAccessorMinMax","aMin","aMax","_forwardAxis","_upAxis","ensureSemanticExistence","techniquesWebgl","targetAttributes","lowerCase","pipelineExtras","getShaderVariable","ensureSemanticExistenceForPrimitive","precreatedAttributes","hasIndex0","accessorMin","accessorMax","quantizedAttributes","decodedMin","decodedMax","getAttributeOrUniformBySemantic","programId","getDiffuseAttributeOrUniform","diffuseUniformName","nodeTranslationScratch","nodeQuaternionScratch","nodeScaleScratch","replaceAllButFirstInString","find","getQuantizedAttributes","getAttributeVariableName","getScalarUniformFunction","getVec2UniformFunction","getVec3UniformFunction","getVec4UniformFunction","getMat2UniformFunction","getMat3UniformFunction","getMat4UniformFunction","DelayLoadedTextureUniform","_textureId","getUsedExtensions","cachedExtensionsUsed","getRequiredExtensions","cachedExtensionsRequired","extensionsRequiredLength","supportedExtensions","AGI_articulations","EXT_texture_webp","KHR_materials_unlit","KHR_materials_pbrSpecularGlossiness","KHR_texture_transform","checkSupportedExtensions","browserSupportsWebp","checkSupportedGlExtensions","glExtensionsUsedLength","modifyShaderForDracoQuantizedAttributes","decodedAttributes","quantizedUniforms","attributeVarName","decodeUniformVarName","variableType","decodedAttributeVarName","octEncoded","vec3Color","decodeUniformVarNameRangeConstant","decodeUniformVarNameNormConstant","decodeUniformVarNameMin","modifyShaderForQuantizedAttributes","decodeUniformVarNameScale","decodeUniformVarNameTranslate","decodeMatrix","mat","vec","gltfUniformFunctions","translateFromMatrix5Array","createUniformFunction","createUniformsForDracoQuantizedAttributes","decodedData","uniformVarName","uniformVarNameRangeConstant","rangeConstant","quantizationBits","uniformVarNameNormConstant","normConstant","uniformVarNameMin","createUniformsForQuantizedAttributes","setUniforms","uniformVariable","uniformVariableScale","uniformVariableTranslate","quantizedUniform","scratchTranslationRtc","gltfSemanticUniforms","MODEL","VIEW","PROJECTION","MODELVIEW","CESIUM_RTC_MODELVIEW","mvRtc","_rtcCenter","MODELVIEWPROJECTION","MODELINVERSE","VIEWINVERSE","PROJECTIONINVERSE","MODELVIEWINVERSE","MODELVIEWPROJECTIONINVERSE","MODELINVERSETRANSPOSE","inverseTransposeModel","MODELVIEWINVERSETRANSPOSE","getGltfSemanticUniforms","getKHRMaterialsCommonValueType","paramName","paramValue","processModelMaterialsCommon","khrMaterialsCommon","lightsLength","lightId","light","ambientLight","directional","directionalLight","pointLight","constantAttenuation","linearAttenuation","quadraticAttenuation","spot","spotLight","fallOffAngle","fallOffExponent","lightDefaults","lightParameters","nodeLightId","lightCount","lightName","lightType","lightBaseName","baseName","useInFragment","generateLightParameters","primitiveByMaterial","splitIncompatibleMaterials","generatedTechniques","techniqueKey","keysCount","jointCount","skinningInfo","getTechniqueKey","addBatchIdToGeneratedShaders","lightingModel","parameterValues","hasSkinning","techniqueUniforms","u_modelViewMatrix","u_projectionMatrix","u_normalMatrix","u_jointMatrix","u_diffuse","lightParamName","arraySize","vertexShaderMain","v_texcoord","techniqueAttributes","a_position","a_normal","a_texcoord_0","a_joint","a_weight","a_vertexColor","a_batchId","hasSpecular","u_specular","u_shininess","hasNonAmbientLights","hasAmbientLights","fragmentLightingBlock","varyingDirectionName","varyingPositionName","lightColorName","finalColorComputation","colorCreationBlock","u_transparency","u_emission","u_ambient","vertexShaderId","fragmentShaderId","generateTechnique","materialValues","valueName","addTextureCoordinates","textureName","generatedMaterialValues","defaultTexCoord","fragmentShaderMain","DEFAULT_TEXTURE_OFFSET","DEFAULT_TEXTURE_ROTATION","DEFAULT_TEXTURE_SCALE","handleKHRTextureTransform","getPBRValueType","processPbrMaterials","useSpecGloss","isSpecularGlossinessMaterial","additional","morphTargets","isUnlit","u_morphWeights","u_alphaCutoff","baseColorUniform","u_baseColorTexture","u_baseColorFactor","a_outlineCoordinates","targetAttribute","a_tangent","v_texCoord","normalTexCoord","baseColorTexCoord","specularGlossinessTexCoord","diffuseTexCoord","metallicRoughnessTexCoord","occlusionTexCoord","emissiveTexCoord","u_normalTexture","u_specularGlossinessTexture","u_specularFactor","u_glossinessFactor","u_diffuseTexture","u_diffuseFactor","u_metallicRoughnessTexture","u_metallicFactor","u_roughnessFactor","u_occlusionTexture","u_emissiveTexture","u_emissiveFactor","Vector3DTileBatch","batchIds","throwError","unary_ops","binary_ops","getMaxKeyLen","max_len","max_unop_len","max_binop_len","literals","binaryPrecedence","op_val","createBinaryExpression","operator","isDecimalDigit","ch","isIdentifierStart","isIdentifierPart","jsep","expr","ch_i","charAtFunc","charCodeAtFunc","exprI","exprICode","gobbleSpaces","gobbleExpression","consequent","alternate","gobbleBinaryExpression","gobbleBinaryOp","to_check","tc_len","biop","prec","biop_info","gobbleToken","gobbleNumericLiteral","gobbleStringLiteral","gobbleVariable","gobbleArray","argument","chCode","raw","quote","gobbleIdentifier","gobbleArguments","termination","gobbleGroup","computed","callee","elements","addUnaryOp","op_name","addBinaryOp","precedence","addLiteral","literal_name","literal_value","removeUnaryOp","removeAllUnaryOps","removeBinaryOp","removeAllBinaryOps","removeLiteral","removeAllLiterals","VARIABLE","UNARY","BINARY","TERNARY","CONDITIONAL","MEMBER","FUNCTION_CALL","ARRAY","REGEX","VARIABLE_IN_STRING","LITERAL_NULL","LITERAL_BOOLEAN","LITERAL_NUMBER","LITERAL_STRING","LITERAL_COLOR","LITERAL_VECTOR","LITERAL_REGEX","LITERAL_UNDEFINED","BUILTIN_VARIABLE","Expression","expression","ast","_expression","closeQuote","openSingleQuote","openDoubleQuote","replaceVariables","backslashRegex","removeBackslashes","definePlaceholder","defineReplace","replaceDefines","_runtimeAst","createRuntimeAst","scratchStorage","arrayIndex","arrayArray","cartesian2Index","cartesian3Index","cartesian4Index","cartesian2Array","cartesian3Array","cartesian4Array","reset","getArray","getCartesian2","getCartesian3","getCartesian4","getShaderFunction","propertyNameMap","shaderState","returnType","shaderExpression","getShaderExpression","unaryOperators","binaryOperators","variableRegex","replacementRegex","unaryFunctions","getEvaluateUnaryComponentwise","exp2","fract","binaryFunctions","getEvaluateBinaryComponentwise","ternaryFunctions","getEvaluateTernaryComponentwise","mix","operation","allowScalar","_type","_test","ExpressionNodeType","_evaluateConditional","_evaluateRegExpTest","_evaluateRegExpExec","_evaluateToString","_evaluateNot","_evaluateNegative","_evaluatePositive","_evaluateNaN","_evaluateIsFinite","_evaluateIsExactClass","_evaluateIsClass","_evaluateGetExactClassName","_evaluateBooleanConversion","_evaluateNumberConversion","_evaluateStringConversion","getEvaluateUnaryFunction","_evaluatePlus","_evaluateMinus","_evaluateTimes","_evaluateDivide","_evaluateMod","_evaluateEqualsStrict","_evaluateNotEqualsStrict","_evaluateLessThan","_evaluateLessThanOrEquals","_evaluateGreaterThan","_evaluateGreaterThanOrEquals","_evaluateAnd","_evaluateOr","_evaluateRegExpMatch","_evaluateRegExpNotMatch","getEvaluateBinaryFunction","getEvaluateTernaryFunction","_evaluateMemberBrackets","_evaluateMemberDot","_evaluateArray","_evaluateVariable","_evaluateVariableString","_evaluateLiteralColor","_evaluateLiteralVector","_evaluateLiteralString","_evaluateRegExp","evaluateTilesetTime","_evaluateLiteral","replaceBackslashes","parseCall","argsLength","pattern","isLiteralType","parseRegex","parseMemberExpression","E","parseMathConstant","parseNumberConstant","parseLiteral","isVariable","NaN","parseKeywordsAndVariables","timeSinceLoad","getFeatureProperty","checkFeature","convertHSLToRGB","convertRGBToColor","numberToString","colorToVec4","getExpressionArray","expressions","getVariableName","vectorLength","placeholder","member","Boolean","colorToVec3","rgb","vectorExpression","Vector3DTilePrimitive","_batchIds","_vertexBatchIds","vertexBatchIds","_indexCounts","indexCounts","_indexOffsets","indexOffsets","_batchedIndices","batchedIndices","_vaSwap","_rsWireframe","_commands","_constantColor","_highlightColor","_batchDirty","_pickCommandsDirty","_framesSinceLastRebatch","_updatingAllCommands","_trianglesLength","_geometryByteLength","debugWireframe","_debugWireframe","_wireframeDirty","forceRebatch","_batchIdLookUp","trianglesLength","geometryByteLength","defaultAttributeLocations","colorRenderState","copyIndicesCPU","counts","batchIdLookUp","batchedIdsLength","copyIndicesGPU","writeBuffer","compareColors","rebatchCommands","needToRebatch","colorCounts","newBatchedIndices","rebatchGPU","rebatchCPU","createFeatures","applyDebugSettings","complexExpressionReg","queueCommands","commands","commandLength","colorExpression","isSimpleStyle","clearStyle","updateCommands","batchedOffset","batchedCount","startIds","endIds","batchIdsLength","positionBuffer","idBuffer","fromTypedArray","_batchedPositions","_transferrableBatchIds","_verticesPromise","VectorTileVS","pickVS","pickFS","createShaders","u_modifiedModelViewProjection","u_highlightColor","createUniformMap","needsRebatch","commandsLength","bv","stencilDepthCommand","stencilDepthDerivedCommand","colorDerivedCommand","_commandsDirty","createColorCommandsIgnoreShow","earlyExit","updateWireframe","queueWireframeCommands","spPick","boundingSphereCartesian3Scratch","ClassificationModel","gltfPrimitives","gltfPositionAttribute","gltfBatchIdAttribute","_BATCHID","_gltf","_vertexShaderLoaded","vertexShaderLoaded","_classificationShaderLoaded","classificationShaderLoaded","_uniformMapLoaded","uniformMapLoaded","_pickIdLoaded","pickIdLoaded","_ignoreCommands","ignoreCommands","upAxis","_computedModelMatrix","_initialRadius","_scaledBoundingSphere","_mode","_dirty","_nodeMatrix","_extensionsUsed","_extensionsRequired","_quantizedUniforms","_buffers","_rtcCenterEye","_rtcCenter3D","_rtcCenter2D","modifyShader","positionName","batchIdName","uniformDecl","toClip","modelViewProjectionName","projectionName","modelViewName","drawVS","drawFS","nonUniformScale","scaledBoundingSphere","texturesByteLength","createPrimitive","ix","triangleCountFromPrimitiveIndices","quantizedUniformMap","positionsBuffer","currentId","createResources","createBuffers","rendererBuffers","attributeLocation","gltfNode","scratchComputedTranslation","scratchComputedMatrixIn2D","projectedCart","parseBuffers","justLoaded","addBuffersToLoadResources","indexBufferIds","parseBufferViews","modeChanged","modelTransformChanged","computedModelMatrix","to2D","updateNodeModelMatrix","ClippingPlane","UpdateChangedCartesian3","onChangeCallback","clippingPlane","_clippingPlane","_cartesian3","fromPlane","ClippingPlaneCollection","_planes","_dirtyIndex","_multipleDirtyPlanes","_enabled","edgeColor","edgeWidth","planeAdded","planeRemoved","unionClippingRegions","_unionClippingRegions","_testIntersection","unionIntersectFunction","defaultIntersectFunction","_uint8View","_float32View","_clippingPlanesTexture","planesLength","setIndexDirty","collection","clippingPlanesState","newPlaneIndex","planeToKeep","planesCount","distanceEncodeScratch","oct32EncodeScratch","packPlanesAsUint8","clippingPlaneCollection","uint8View","byteIndex","oct32Normal","encodedDistance","packPlanesAsFloats","float32View","floatIndex","computeTextureResolution","pixelsNeeded","maxSize","textureResolutionScratch","clippingPlanesTexture","useFloatTexture","currentPixelCount","requiredResolution","dirtyIndex","offsetX","offsetY","computeIntersectionWithBoundingVolume","tileBoundingVolume","setOwner","getTextureResolution","ColorBlendMode","DracoLoader","addBufferToLoadResources","loadResourceBuffers","addNewVertexBuffer","scheduleDecodingTask","decoderTaskProcessor","_taskProcessorReady","taskData","decodedIndexBuffer","indexArray","addNewIndexBuffer","decodedAttributeData","attributeData","vertexBufferView","_decodedData","_maxDecodingConcurrency","_decoderTaskProcessor","_getDecoderTaskProcessor","_decodedModelResourceCache","modelDecodingCache","cachedData","dequantizeInShader","_dequantizeInShader","primitiveId","compressionData","decodeModel","decodingPromises","decodePointCloud","cacheDataForModel","destroyCachedDataForModel","getClipAndStyleCode","samplerUniformName","matrixUniformName","styleUniformName","getClippingFunction","clippingPlanesLength","usingFloatTexture","textureResolution","pixelWidthString","pixelHeightString","getClippingPlaneFloat","getClippingPlaneUint8","clippingFunctionUnion","clippingFunctionIntersect","PROGRAM","BUFFER","NUMBER_OF_JOB_TYPES","ModelAnimationCache","getAccessorKey","uriKey","cachedAnimationParameters","getAnimationParameterValues","typedArrayView","cachedAnimationSplines","ConstantSpline","SteppedSpline","backingSpline","_spline","steppedTime","getAnimationSpline","animationName","samplerName","getAnimationSplineKey","controlPoints","cachedSkinInverseBindMatrices","getSkinInverseBindMatrices","matrices","STOPPED","ANIMATING","ModelAnimation","runtimeAnimation","_delay","_stopTime","removeOnStop","_reverse","_loop","ModelAnimationLoop","ModelAnimationState","_runtimeAnimation","_computedStartTime","_raiseStartEvent","_updateEventTime","_raiseUpdateEvent","_raiseStopEvent","ModelAnimationCollection","animationAdded","animationRemoved","_scheduledAnimations","_previousTime","_runtime","scheduledAnimation","animateChannels","localAnimationTime","channelEvaluators","addAll","scheduledAnimations","animationsToRemove","createAnimationRemovedFunction","modelAnimationCollection","animationOccured","sceneTime","pastStartTime","animationToRemove","ModelMaterial","_uniformMaps","_technique","_values","ModelMesh","runtimeMaterialsById","ModelNode","runtimeNode","_runtimeNode","useMatrix","_matrix","_originalMatrix","_perNodeShowDirty","_cesiumAnimationsDirty","dirtyNumber","_maxDirtyNumber","originalMatrix","setMatrix","ModelOutlineLoader","computeOrderMask","outlineCoordinates","third","popcount0to63","matchAndStoreCoordinates","has01","has12","has20","i0Mask","i1Mask","i2Mask","workingOrders","i0Popcount","i1Popcount","i2Popcount","i0Start","i1Start","i2Start","isHighlighted","edgeSmallMultiplier","updateBufferViewsWithNewVertices","vertexNumberingScope","newVertices","extraVertices","sourceData","newVerticesLength","destData","sourceIndex","destIndex","createdOutlines","outlineCoordinateBuffer","bufferViewIndex","accessorIndex","_OUTLINE_COORDINATES","usesBuffer","outlinePrimitives","vertexNumberingScopes","outlineData","vertexCopies","getVertexNumberingScope","edgeIndicesAccessorId","attributeId","triangleIndexAccessorGltf","triangleIndexBufferViewGltf","edgeIndexAccessorGltf","edgeIndexBufferViewGltf","triangleIndexBufferView","edgeIndexBufferView","triangleIndices","small","big","unmatchableVertexIndex","toCreate","addOutline","bufferViewsUsingThisBuffer","compactBuffers","modelOutliningCache","outlineTexture","levelZero","ComputeCommand","outputTexture","preExecute","postExecute","persists","computeEngine","OctahedralProjectedCubeMap","_cubeMapBuffers","_cubeMaps","_mipTextures","_maximumMipmapLevel","_loading","maximumMipmapLevel","colorBufferHalfFloat","colorBufferFloat","v4","v5","cubeMapCoordinates","flatCubeMapCoordinates","createUniformTexture","cleanupResources","cubeMaps","mipTextures","cachedTexture","textureCache","getTexture","cubeMapBuffers","cubeMapCoordinatesBuffer","originalSize","mipTexture","addTexture","atlasCommand","articulationEpsilon","EPSILON16","setCachedGltf","cachedGltf","_cachedGltf","CachedGltf","modelsToLoad","makeReady","gltfJson","models","gltfCache","uriToGuid","Model","_cacheKey","_releaseGltfJson","releaseGltfJson","basePath","_resourceCredits","_silhouetteColorPreviousAlpha","_normalAttributeName","_clampedModelMatrix","_heightChanged","_removeUpdateHeightCallback","_terrainProviderChangedCallback","_pickObject","activeAnimations","_colorPreviousAlpha","_colorShadingEnabled","_clippingPlanesState","clippingPlanesOriginMatrix","backFaceCulling","_addBatchIdToGeneratedShaders","_precreatedAttributes","_fragmentShaderLoaded","fragmentShaderLoaded","_requestType","requestType","forwardAxis","opaquePass","_clippingPlaneModelViewMatrix","articulationsByName","articulationsByStageKey","stagesByKey","nodesByName","skinnedNodes","meshesByName","materialsByName","materialsById","_programPrimitives","_rendererResources","vertexArrays","sourceShaders","silhouettePrograms","_cachedRendererResources","_loadRendererResourcesFromCache","_cachedGeometryByteLength","_cachedTexturesByteLength","_texturesByteLength","_sourceTechniques","_sourcePrograms","_quantizedVertexShaders","_nodeCommands","_sourceVersion","_sourceKHRTechniquesWebGL","_luminanceAtZenith","luminanceAtZenith","_sphericalHarmonicCoefficients","_specularEnvironmentMaps","_shouldUpdateSpecularMapAtlas","_specularEnvironmentMapAtlas","_useDefaultSphericalHarmonics","_useDefaultSpecularMaps","_shouldRegenerateShaders","silhouetteSupported","isColorShadingEnabled","isClippingEnabled","getRuntime","runtimeName","cachedGeometryByteLength","cachedTexturesByteLength","lum","fromGltf","modelResource","parsedGltf","resourceCredits","_gltfCache","getNode","publicNode","getMesh","setArticulationStage","articulationStageKey","stage","articulation","currentValue","isDirty","scratchArticulationCartesian","scratchArticulationRotation","applyArticulationStageMatrix","scratchApplyArticulationTransform","imageLoad","textureId","applyArticulations","articulationName","numNodes","numStages","stages","scratchArticulationStageInitialTransform","CreateVertexBufferJob","CreateIndexBufferJob","scratchVertexBufferJob","scratchIndexBufferJob","getProgramForPrimitive","programName","CreateProgramJob","programToCreate","quantizedVertexShaders","quantizedVS","useIBL","usesSH","usesSM","createAttributesAndProgram","recreateProgram","addClippingPlaneCode","finalFS","_modifyShaderForColor","_getClippingFunction","modifyShaderForClippingPlanes","scratchCreateProgramJob","getOnImageCreatedFromTypedArray","gltfTexture","CreateTextureJob","usesTextureTransform","materialsLength","minFilter","requiresNpot","npot","scratchCreateTextureJob","getChannelEvaluator","targetPath","rendererVertexArrays","programVertexAttributes","programAttributeLocations","decodedAttribute","rendererRenderStates","enableCulling","createRenderStateForMaterial","gltfUniformsFromNode","computedMatrix","mv","mvp","mInverse","mvInverse","mvpInverse","mInverseTranspose","mvInverseTranspose","createUniformsForMaterial","instanceValues","jointMatrixUniformName","morphWeightsUniformName","uniformValues","getUniformFunctionFromSource","alphaCutoffValue","createPickColorFunction","createJointMatricesFunction","computedJointMatrices","createMorphWeightsFunction","createSilhouetteColorFunction","createSilhouetteSizeFunction","createColorFunction","scratchClippingPlaneMatrix","createClippingPlanesMatrixFunction","createClippingPlanesFunction","createClippingPlanesEdgeStyleFunction","createColorBlendFunction","createIBLFactorFunction","createLightColorFunction","createLuminanceAtZenithFunction","createSphericalHarmonicCoefficientsFunction","createSpecularEnvironmentMapFunction","createSpecularEnvironmentMapSizeFunction","createSpecularEnvironmentMapLOD","createCommand","nodeCommands","runtimeMeshesByName","rendererPrograms","uniformMaps","um","jointUniformMap","morphWeightsUniformMap","gltf_color","gltf_colorBlend","gltf_clippingPlanes","gltf_clippingPlanesEdgeStyle","gltf_clippingPlanesMatrix","gltf_iblFactor","gltf_lightColor","gltf_sphericalHarmonicCoefficients","gltf_specularMap","gltf_specularMapSize","gltf_maxSpecularLOD","gltf_luminanceAtZenith","pickUniforms","czm_pickColor","command2D","nodeCommand","silhouetteModelCommand","silhouetteModelCommand2D","silhouetteColorCommand","silhouetteColorCommand2D","translucentCommand2D","disableCullingCommand","disableCullingCommand2D","cachedResources","getGeometryByteLength","getTexturesByteLength","jobScheduler","JobType","createPrograms","rendererSamplers","magFilter","loadTexturesFromBufferViews","createTextures","runtimeSkins","bindShapeMatrix","runtimeNodes","skinnedNode","runtimeSkin","gltfJoints","jointNode","createJoints","modelMaterial","u_outlineTexture","seen","parentRuntimeNode","parents","childId","getNodeMatrix","publicMatrix","scratchNodeStack","scratchObjectSpace","updateColor","forceDerive","deriveDisableCullingCommand","getDisableCullingRenderState","updateBackFaceCulling","getProgramId","createSilhouetteProgram","normalAttributeName","hasSilhouette","isInvisible","alphaDirty","currAlpha","prevAlpha","silhouettesLength","createSilhouetteCommands","stencilReference","silhouetteTranslucent","hasTranslucentCommands","modelCommand","silhouetteProgram","silhouetteUniformMap","gltf_silhouetteColor","gltf_silhouetteSize","updateSilhouette","force","maxPixelSize","metersPerPixel","positionWC","scaleInPixels","pixelsPerMeter","releaseCachedGltf","CachedRendererResources","getUpdateHeightCallback","cartoPosition","clampedCart","clampedModelMatrix","release","modelRendererResourceCache","scratchDisplayConditionCartesian","scratchDistanceDisplayConditionCartographic","destroyIfNotCached","rendererResources","cachedRendererResources","modelCaches","brdfLutGenerator","updateForwardAxis","sourceKHRTechniquesWebGL","runtimeStagesByKey","gltfArticulations","numArticulations","initialValue","stageKey","parseArticulations","sourcePrograms","sourceTechniques","parseTechniques","shaderResource","shaderLoad","parseShaders","parsePrograms","imageId","gltfImage","crunch","pvrtc1","imageResource","parseTextures","runtimeMaterialsByName","parseMaterials","programPrimitives","parseMeshes","runtimeNodesByName","computedShow","parseNodes","iblSupported","recompileWithDefaultAtlas","recompileWithoutDefaultAtlas","recompileWithDefaultSHCoeffs","recompileWithoutDefaultSHCoeffs","silhouette","invisible","displayConditionPassed","distance2","ddc","nearSquared","farSquared","distanceDisplayConditionVisible","animated","cb","updateClamping","maxDirtyNumber","nodeMatrix","primitiveCommand","updateNodeHierarchyModelMatrix","inverseBindMatricesLength","applySkins","nodeCommandsLength","updatePerNodeShow","updatePickIds","updateShowBoundingVolume","updateShadows","updateClippingPlanes","currentClippingPlanesState","useClippingPlanes","shouldRegenerateShaders","currentlyColorShadingEnabled","visitedPrograms","commandCount","renderProgram","regenerateShaders","nc","idl2D","addCredit","creditCount","Batched3DModel3DTileContent","_features","_batchIdAttributeName","_diffuseAttributeOrUniformName","_rtcCenterTransform","_contentModelMatrix","byteStart","featureTableJsonByteLength","featureTableBinaryByteLength","batchTableJsonByteLength","batchTableBinaryByteLength","BATCH_LENGTH","featureTableString","batchTableString","createColorChangedCallback","gltfView","gltfByteLength","computedTransform","TILES3D","_gltfUpAxis","getPickIdCallback","pointsLength","innerContents","getBatchIdAttributeName","hasColorStyle","hasShowStyle","tilesetClippingPlanes","clippingPlanesDirty","_isClipped","Composite3DTileContent","factory","_contents","tilesLength","contentPromises","tileType","tileByteLength","contentFactory","innerContent","contents","Vector3DTileGeometry","_boxes","boxes","_boxBatchIds","boxBatchIds","_cylinders","cylinders","_cylinderBatchIds","cylinderBatchIds","_ellipsoids","ellipsoids","_ellipsoidBatchIds","ellipsoidBatchIds","_spheres","spheres","_sphereBatchIds","sphereBatchIds","_batchTableColors","_packedBuffer","packedBoxLength","packedCylinderLength","packedEllipsoidLength","packedSphereLength","createVerticesTaskProcessor","batchTableColors","packedBuffer","_sphere","packBuffer","indicesBytesPerElement","numBVS","bvs","numBatchedIndices","bis","unpackBuffer","Geometry3DTileContent","_contentReadyPromise","featureTableJSONByteLength","batchTableJSONByteLength","numberOfBoxes","BOXES_LENGTH","numberOfCylinders","CYLINDERS_LENGTH","numberOfEllipsoids","ELLIPSOIDS_LENGTH","numberOfSpheres","SPHERES_LENGTH","totalPrimitives","RTC_CENTER","BOX_BATCH_IDS","boxBatchIdsByteOffset","CYLINDER_BATCH_IDS","cylinderBatchIdsByteOffset","ELLIPSOID_BATCH_IDS","ellipsoidBatchIdsByteOffset","SPHERE_BATCH_IDS","sphereBatchIdsByteOffset","atLeastOneDefined","atLeastOneUndefined","getBatchIds","boxesByteOffset","BOXES","cylindersByteOffset","CYLINDERS","ellipsoidsByteOffset","ELLIPSOIDS","spheresByteOffset","SPHERES","ModelInstance","instanceId","_instanceId","expandBoundingSphere","LoadState","ModelInstanceCollection","_instancingSupported","dynamic","_opaquePass","_instances","instancesOptions","instanceOptions","createInstances","_vertexBufferTypedArray","_vertexBuffer","_batchIdBuffer","_instancedUniformsByProgram","_drawCommands","_modelCommands","_renderStates","_disableCullingRenderStates","createBoundingSphere","_rtcTransform","_rtcModelView","_basePath","_backFaceCulling","getCheckUniformSemanticFunction","modelSemantics","supportedSemantics","getInstancedUniforms","instancedUniformsByProgram","czm_instanced_modifiedModelView","createModifiedModelView","czm_instanced_nodeTransform","createNodeTransformFunction","instancedUniforms","getVertexBufferTypedArray","collectionCenter","instanceMatrix","createModel","instancingSupported","usesBatchTable","modelOptions","createPickIds","batchIdBufferData","pickIdBuffer","_pickIdBuffer","vertexBufferTypedArray","componentSizeInBytes","instancedAttributes","czm_modelMatrixRow0","czm_modelMatrixRow1","czm_modelMatrixRow2","globalVarsHeader","globalVarsMain","batchIdAttribute","pickAttribute","pickVarying","instancedSource","getVertexShaderNonInstancedCallback","getFragmentShaderNonInstancedCallback","getUniformMapNonInstancedCallback","createBatchIdFunction","updateCommandsNonInstanced","modelCommands","collectionTransform","drawCommand","nodeBoundingSphere","getModelCommands","drawCommands","generateModelCommands","modelInstanceCollection","createCommandsNonInstanced","instanceModelMatrix","modelRadius","modelMatrixChanged","rtcTransform","updateVertexBuffer","modelCommandsDirty","commandsDirty","derivedRenderState","Instanced3DModel3DTileContent","_modelInstanceCollection","gltfFormat","collectionOptions","gltfUrl","rtcCenterArray","instancePosition","instancePositionArray","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","instanceQuaternion","instanceScale","instanceTranslationRotationScale","instanceTransform","propertyScratch1","positionQuantized","quantizedVolumeOffset","quantizedVolumeScale","normalUp","normalRight","propertyScratch2","hasCustomOrientation","octNormalUp","octNormalRight","DecodingState","PointCloud","_parsedContent","_drawCommand","_isTranslucent","_styleTranslucent","_pointSize","_quantizedVolumeScale","_quantizedVolumeOffset","_styleableShaderAttributes","_isQuantized","_isOctEncoded16P","_isRGB565","_hasColors","_hasNormals","_hasBatchIds","_decodingState","_isQuantizedDraco","_isOctEncodedDraco","_quantizedRange","_octEncodedRange","normalShading","_normalShading","_opaqueRenderState","_translucentRenderState","_pointsLength","_batchTableLoaded","batchTableLoaded","styleDirty","isClipped","attenuation","_attenuation","geometricError","geometricErrorScale","maximumAttenuation","pointCloud","dracoBuffer","dracoFeatureTableProperties","dracoBatchTableProperties","draco","styleableProperties","hasPositions","hasColors","hasBatchIds","isQuantized","isRGB565","isOctEncoded16P","featureTableDraco","batchTableDraco","dracoByteOffset","dracoByteLength","BATCH_ID","featureTableProperties","batchTableProperties","POSITION_QUANTIZED","NORMAL_OCT16P","CONSTANT_RGBA","constantRGBA","randomValues","computeApproximateBoundingSphereFromPositions","samplesLength","getRandomValues","maxValue","minValue","prepareVertexAttribute","scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier","scratchQuantizedVolumeScaleAndOctEncodedRange","getStyleablePropertyIds","propertyIds","getBuiltinPropertyNames","getVertexAttribute","builtinPropertyNameMap","POSITION_ABSOLUTE","modifyStyleFunction","colorStyleFunction","showStyleFunction","pointSizeStyleFunction","hasStyle","isQuantizedDraco","isOctEncodedDraco","styleTranslucent","propertyIdToAttributeMap","styleableShaderAttributes","getColorShaderFunction","getShowShaderFunction","getPointSizeShaderFunction","hasPointSizeStyle","hasClippedContent","styleablePropertyIds","builtinPropertyNames","usesColorSemantic","usesNormalSemantic","usesColors","usesNormals","a_color","attributeDeclarations","propertyId","u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier","scratch","depthMultiplier","u_constantColor","u_clippingPlanes","u_clippingPlanesEdgeStyle","u_clippingPlanesMatrix","u_quantizedVolumeScaleAndOctEncodedRange","parsedContent","decodePromise","decodedPositions","decodedRgb","decodedRgba","decodedNormals","decodedBatchIds","decodeDraco","shadersDirty","modelMatrixDirty","hasStyleableProperties","quantizedRange","octEncodedRange","styleableVertexAttributes","vertexAttribute","colorsVertexBuffer","normalsVertexBuffer","batchIdsVertexBuffer","positionsVertexBuffer","colorComponentsPerAttribute","opaqueRenderState","attachTexture","attachment","framebufferTexture2D","attachRenderbuffer","renderbuffer","framebufferRenderbuffer","_getRenderbuffer","Framebuffer","createFramebuffer","_colorTextures","_colorRenderbuffers","_activeColorAttachments","_depthTexture","_depthRenderbuffer","_stencilRenderbuffer","_depthStencilTexture","_depthStencilRenderbuffer","destroyAttachments","colorTextures","colorRenderbuffers","depthRenderbuffer","depthStencilTexture","depthStencilRenderbuffer","attachmentEnum","depthAttachment","depthStencilAttachment","stencilRenderbuffer","isColorFormat","renderbuffers","checkFramebufferStatus","numberOfColorAttachments","hasDepthAttachment","bindFramebuffer","_getActiveColorAttachments","getColorTexture","getColorRenderbuffer","deleteFramebuffer","PointCloudEyeDomeLighting","_colorGBuffer","_depthGBuffer","_clearCommand","_strength","_radius","destroyFramebuffer","distanceAndEdlStrengthScratch","screenWidth","screenHeight","colorGBuffer","nowDirty","resized","depthGBuffer","blendFS","blendUniformMap","u_pointCloud_colorGBuffer","u_pointCloud_depthGBuffer","u_distanceAndEdlStrength","blendRenderState","createViewportQuadCommand","drawBuffers","fragmentDepth","getECShaderProgram","pointCloudShading","eyeDomeLightingStrength","eyeDomeLightingRadius","pointCloudProcessor","clearCommand","blendCommand","PointCloudShading","baseResolution","eyeDomeLighting","PointCloud3DTileContent","_styleDirty","_pointCloud","getFragmentShaderLoaded","getUniformMapLoaded","getBatchTableLoaded","getPickIdLoaded","defaultShading","_contentBoundingVolume","_contentBoundingVolume2D","_boundingVolume2D","sphereVolume","contentBoundingVolume","baseResolutionApproximation","getGeometricError","refine","Cesium3DTileRefine","Tileset3DTileContent","tilesetJson","loadTileset","VertexArrayFacade","sizeInVertices","instanced","attrs","_verifyAttributes","attributesForUsage","attributesByUsage","_allBuffers","_vertexSizeInBytes","needsCommit","arrayViews","_createArrayViews","_instanced","_precreated","writers","vertexSizeInComponentType","allBuffers","_resize","_appendWriters","destroyVA","destView","sourceView","sourceLength","createWriters","component0","component1","component2","component3","commit","vertexArrayFacade","vertexBufferSizeInBytes","vertexBufferDefined","subCommit","offsetInVertices","lengthInVertices","recreateVA","chunkSize","numberOfVertexArrays","_appendAttributes","vertexBufferOffset","endSubCommits","SceneTransforms","actualPositionScratch","positionCC","scratchWindowCoord0","scratchWindowCoord1","wgs84ToWindowCoordinates","wgs84WithEyeOffsetToWindowCoordinates","scratchEyeOffset","worldToClip","positionEC","zEyeOffset","scratchMaxCartographic","scratchProjectedCartesian","scratchCameraPosition","actualPosition","computeActualWgs84Position","clientWidth","clientHeight","cameraCentered","maxCartographic","maxCoord","eyePoint","windowCoordinates","clipToGLWindowCoordinates","wgs84ToDrawingBufferCoordinates","transformWindowToDrawingBuffer","positionInCartographic","positionNDC","viewportTransform","windowPosition","scratchNDC","scratchWorldCoords","drawingBufferToWgs84Coordinates","drawingBufferPosition","useLogDepth","log2Depth","worldCoords","ndc","Billboard","billboardCollection","_actualPosition","_translate","_collection","_billboardCollection","_index","_batchIndex","_imageIndex","_imageIndexPromise","_imageWidth","_imageHeight","_labelDimensions","_labelHorizontalOrigin","_labelTranslate","_textureAtlas","_loadImage","_actualClampedPosition","_clusterShow","SHOW_INDEX","POSITION_INDEX","PIXEL_OFFSET_INDEX","EYE_OFFSET_INDEX","HORIZONTAL_ORIGIN_INDEX","VERTICAL_ORIGIN_INDEX","SCALE_INDEX","IMAGE_INDEX_INDEX","COLOR_INDEX","ROTATION_INDEX","ALIGNED_AXIS_INDEX","SCALE_BY_DISTANCE_INDEX","TRANSLUCENCY_BY_DISTANCE_INDEX","PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX","DISTANCE_DISPLAY_CONDITION","DISABLE_DEPTH_DISTANCE","TEXTURE_COORDINATE_BOUNDS","SDF_INDEX","makeDirty","propertyChanged","_updateBillboard","NUMBER_OF_PROPERTIES","setImage","clusterShow","imageIndexPromise","atlas","addImage","addSubRegion","_setTranslate","translate","_getActualPosition","_setActualPosition","tempCartesian3","_computeActualPosition","_computeScreenSpacePosition","positionWorld","scratchPixelOffset","computeScreenSpacePosition","getScreenSpaceBoundingBox","screenSpacePosition","_destroy","_customData","removeTileCustomData","OPAQUE_AND_TRANSLUCENT","FONT_SIZE","PADDING","RADIUS","CUTOFF","TextureAtlasNode","bottomLeft","topRight","childNode1","childNode2","imageIndex","defaultInitialSize","TextureAtlas","borderWidthInPixels","initialSize","_borderWidthInPixels","_textureCoordinates","_guid","_idHash","_initialSize","_root","textureAtlas","nodeWidth","nodeHeight","widthDifference","heightDifference","childNode2BottomLeftX","childNode2BottomLeftY","atlasWidth","atlasHeight","numImages","numberOfImages","oldAtlasWidth","oldAtlasHeight","widthRatio","heightRatio","nodeBottomRight","nodeBottomHalf","nodeTopHalf","nodeMain","newTexture","initialWidth","initialHeight","resizeAtlas","guid","indexPromise","baseRegion","getIndexBuffer","DISTANCE_DISPLAY_CONDITION_INDEX","attributeLocationsBatched","positionHighAndScale","positionLowAndRotation","compressedAttribute0","compressedAttribute1","compressedAttribute2","compressedAttribute3","textureCoordinateBoundsOrLabelTranslate","sdf","attributeLocationsInstanced","BillboardCollection","_textureAtlasGUID","_destroyTextureAtlas","_spTranslucent","_rsOpaque","_rsTranslucent","_vaf","_billboards","_billboardsToUpdate","_billboardsToUpdateIndex","_billboardsRemoved","_createVertexArray","_shaderRotation","_compiledShaderRotation","_shaderAlignedAxis","_compiledShaderAlignedAxis","_shaderScaleByDistance","_compiledShaderScaleByDistance","_shaderTranslucencyByDistance","_compiledShaderTranslucencyByDistance","_shaderPixelOffsetScaleByDistance","_compiledShaderPixelOffsetScaleByDistance","_shaderDistanceDisplayCondition","_compiledShaderDistanceDisplayCondition","_shaderDisableDepthDistance","_compiledShaderDisableDepthDistance","_shaderClampToGround","_compiledShaderClampToGround","_propertiesChanged","_maxSize","_maxEyeOffset","_maxScale","_maxPixelOffset","_allHorizontalCenter","_allVerticalCenter","_allSizedInMeters","_baseVolume","_baseVolumeWC","_baseVolume2D","_boundingVolumeDirty","debugShowTextureAtlas","blendOption","BlendOption","_blendOption","_buffersUsage","u_atlas","billboards","destroyBillboards","removeBillboards","newBillboards","getIndexBufferBatched","billboardCollection_indexBufferBatched","sixteenK","getIndexBufferInstanced","billboardCollection_indexBufferInstanced","getVertexBufferInstanced","billboardCollection_vertexBufferInstanced","destroyTextureAtlas","computeNewBuffersUsage","buffersUsage","usageChanged","newUsage","writePositionScratch","writePositionScaleAndRotation","textureAtlasCoordinates","vafWriters","positionHighWriter","positionLowWriter","writeCompressedAttrib0","writer","pixelOffsetX","pixelOffsetY","translateX","translateY","bottomLeftX","bottomLeftY","imageRectangle","topRightX","topRightY","tempTanslateY","upperTranslateY","compressedTexCoordsLL","compressedTexCoordsLR","compressedTexCoordsUR","compressedTexCoordsUL","writeCompressedAttrib1","translucency","imageWidth","writeCompressedAttrib2","validAlignedAxis","imageHeight","labelHorizontalOrigin","writeEyeOffset","eyeOffsetZ","compressedTexCoordsRange","writeScaleByDistance","writePixelOffsetScaleByDistance","pixelOffsetScale","writeCompressedAttribute3","writeTextureCoordinateBoundsOrLabelTranslate","globeTranslucent","globeTranslucencyState","depthTestAgainstTerrain","writeSDF","_sdf","outlineDistance","SDFSettings","writeBillboard","writeBatchId","recomputeActualPositions","recomputeBoundingVolume","scratchWriterArray","billboardsLength","ii","billboardsToUpdate","updateMode","billboardsToUpdateLength","textureAtlasGUID","picking","numberOfBillboards","createVAF","numWriters","bb","pixelScale","updateBoundingVolume","vertDefines","blendOptionChanged","useTranslucentDepthMask","supportVSTextureReads","_compiledSDF","sdfEdge","vectorFragDefine","colorList","opaqueAndTranslucent","vaLength","totalLength","debugCommand","billboard_texture","createDebugCommand","createBillboardPointCallback","centerAlpha","cssColor","cssOutlineColor","cssOutlineWidth","clearRect","arc","Cesium3DTilePointFeature","_billboardImage","_billboardColor","_billboardOutlineColor","_billboardOutlineWidth","_billboardSize","_pointOutlineColor","_pointOutlineWidth","_heightOffset","setBillboardImage","newOutlineColor","defaultPointOutlineColor","newOutlineWidth","defaultPointOutlineWidth","newPointSize","defaultPointSize","currentOutlineColor","currentOutlineWidth","currentPointSize","pointSize","pointOutlineColor","pointOutlineWidth","labelColor","labelOutlineColor","labelOutlineWidth","labelStyle","labelText","backgroundEnabled","newPosition","anchorLineEnabled","anchorLineColor","imageChanged","labelVerticalOrigin","INF","edt","edt1d","calcSDF","intData","imgData","cutoff","CanvasRenderingContext2D","ImageData","gridOuter","gridInner","FILL","OUTLINE","FILL_AND_OUTLINE","fontInfoCache","fontInfoCacheLength","defaultBackgroundColor","defaultBackgroundPadding","textTypes","LTR","RTL","WEAK","BRACKETS","rebindAllGlyphs","_rebindAllGlyphs","_repositionAllGlyphs","_labelCollection","_labelsToUpdate","repositionAllGlyphs","parseFont","fontInfo","family","weight","_fontFamily","_fontSize","_fontStyle","_fontWeight","Label","labelCollection","_renderedText","LabelStyle","_glyphs","_backgroundBillboard","_relativeSize","convertTextToTypes","rtlChars","ltrChars","bracketsChars","parsedText","word","lastType","currentType","textLength","textIndex","Word","spliceWord","reverseBrackets","bracket","glyphs","backgroundBillboard","enableRightToLeftDetection","texts","rtlDir","splicePointer","wordIndex","subText","reverseRtl","glyph","totalScale","glyphX","glyphY","glyphWidth","glyphHeight","GraphemeSplitter","Extend","Regional_Indicator","Prepend","E_Base","Glue_After_Zwj","E_Base_GAZ","codePointAt","idx","hi","shouldBreak","eModifierIndex","rIIndex","previousNonExtendIndex","getGraphemeBreakProperty","nextBreak","splitGraphemes","brk","iterateGraphemes","done","countGraphemes","Glyph","textureInfo","GlyphTextureInfo","whitePixelSize","whitePixelBoundingRegion","writeTextToCanvasParameters","createGlyphCanvas","unbindGlyph","_spareBillboards","addGlyphToTextureAtlas","glyphTextureInfo","splitter","glyphIndex","graphemes","glyphsLength","backgroundBillboardCollection","_backgroundBillboardCollection","glyphTextureCache","_glyphTextureCache","sdfValues","bitmapSDF","canvasWidth","canvasHeight","baseIndex","putImageData","spareBillboards","calculateWidthOffset","glyphPixelOffset","scratchBackgroundPadding","lastLineWidth","maxLineWidth","lineWidths","maxGlyphDescent","maxGlyphY","glyphLength","maxLineHeight","lineIndex","widthOffset","lineSpacing","otherLinesHeight","totalLineWidth","totalLineHeight","firstCharOfLine","lineOffsetY","nextGlyph","destroyLabel","LabelCollection","_backgroundTextureAtlas","_whitePixelIndex","_labels","_totalGlyphCount","labels","addWhitePixelCanvas","preUpdateGlyphCount","glyphCountDifference","Polyline","polylineCollection","_actualPositions","_segments","_actualLength","_polylineCollection","_boundingVolumeWC","WIDTH_INDEX","MATERIAL_INDEX","POSITION_SIZE_INDEX","_updatePolyline","segmentPositionsLength","segmentLengths","positionsChanged","_clean","texCoordExpandAndBatchIndex","position2DHigh","position2DLow","prevPosition3DHigh","prevPosition3DLow","prevPosition2DHigh","prevPosition2DLow","nextPosition3DHigh","nextPosition3DLow","nextPosition2DHigh","nextPosition2DLow","PolylineCollection","_opaqueRS","_translucentRS","_polylinesUpdated","_polylinesRemoved","_polylines","_polylineBuckets","_positionBufferUsage","frameCount","_polylinesToUpdate","_vertexArrays","_positionBuffer","_texCoordExpandAndBatchIndexBuffer","_createBatchTable","_useHighlightColor","removePolylines","_bucket","bucket","releaseShaders","destroyPolylines","scratchUpdatePolylineEncodedCartesian","scratchUpdatePolylineCartesian4","scratchNearFarCartesian2","polylinesToUpdate","updateLength","polylineBuckets","writeUpdate","lengthOfPositions","nearFarCartesian","useDepthTest","cloneBoundingSphere","uniformCallback","buckets","bucketLength","currentMaterial","bucketLocator","polylines","polylineLength","mId","createMaterialId","boundingSphereScratch","locators","_locatorBuckets","locatorLength","locator","boundingSphereScratch2","createCommandLists","destroyVertexArrays","emptyVertexBuffer","PolylineBucket","addPolyline","sortPolylinesIntoBuckets","totalIndices","useHighlightColor","vertexArrayBuckets","updateShader","position3DArray","positionArray","texCoordExpandAndBatchIndexArray","texCoordExpandAndBatchIndexIndex","write","writeForMorph","updateIndices","position3DBuffer","positionBufferUsage","texCoordExpandAndBatchIndexBufferUsage","positionSizeInBytes","texCoordExpandAndBatchIndexSizeInBytes","vbo","numberOfIndicesArrays","indicesArray","buffer3D","bufferProperty3D","buffer2D","bufferProperty2D","positionHighOffset","positionLowOffset","prevPositionHighOffset","prevPositionLowOffset","nextPositionHighOffset","nextPositionLowOffset","vertexTexCoordExpandAndBatchIndexBufferOffset","replacer","definedPolylines","definedPolylinesToUpdate","polyIndex","VertexArrayBucketLocator","intersectsIDL","getPolylinePositionsLength","scratchWritePosition","scratchWritePrevPosition","scratchWriteNextPosition","scratchWriteVector","scratchPickColorCartesian","scratchWidthShowCartesian","polylineBatchIndex","getSegments","segmentIndex","segmentStart","segmentEnd","colorCartesian","widthShowCartesian","morphPositionScratch","morphPrevPositionScratch","morphNextPositionScratch","morphVectorScratch","scratchSegmentLengths","vaCount","numberOfSegments","segmentIndexCount","getPolylineStartIndex","scratchPositionsArray","scratchSegments","scratchLengths","pscratch","positionsArrayLength","endJ","Vector3DTilePoints","_resolvedPromise","createPoints","scratchColor2","scratchColor3","scratchColor4","scratchColor5","scratchColor6","scratchScaleByDistance","scratchTranslucencyByDistance","scratchDistanceDisplayCondition","scaleByDistanceCart4","translucencyByDistanceCart4","distanceDisplayConditionCart2","Vector3DTilePolygons","_counts","_polygonMinimumHeights","polygonMinimumHeights","_polygonMaximumHeights","polygonMaximumHeights","Vector3DTilePolylines","_widths","widths","_rs","_command","_currentPositions","_nextPositions","_expandAndWidth","currentPosition","currentPositions","curPositions","prevPositionBuffer","curPositionBuffer","nextPositionBuffer","expandAndWidthBuffer","Vector3DTileContent","_polygons","indicesByteLength","positionByteLength","polylinePositionByteLength","pointsPositionByteLength","numberOfPolygons","POLYGONS_LENGTH","numberOfPolylines","POLYLINES_LENGTH","POINTS_LENGTH","region","polygonBatchIds","polylineBatchIds","pointBatchIds","POLYGON_BATCH_IDS","polygonBatchIdsByteOffset","POLYLINE_BATCH_IDS","polylineBatchIdsByteOffset","POINT_BATCH_IDS","pointBatchIdsByteOffset","polygonCounts","polygonIndexCounts","numPolygonPositions","numPolygonIndices","polygonPositions","POLYGON_MINIMUM_HEIGHTS","POLYGON_MAXIMUM_HEIGHTS","polylineCounts","numPolylinePositions","pointPositions","pointsPromise","polygonPromise","polylinePromise","Cesium3DTileContentFactory","b3dm","pnts","i3dm","cmpt","geom","vctr","UNLOADED","PROCESSING","EXPIRED","NOT_COMPUTED","USE_OPTIMIZATION","SKIP_OPTIMIZATION","Cesium3DTilesetMostDetailedTraversal","traversal","stackMaximumLength","isVisible","_visible","_inRequestVolume","hasEmptyContent","hasTilesetContent","canTraverse","contentExpired","updateAndPushChildren","updateVisibility","loadTile","contentUnloaded","hasUnloadedContent","_priority","_requestedTiles","touchTile","_touchedFrame","visitTile","statistics","selectDesiredTile","contentAvailable","contentVisibility","_selectedTiles","selectTiles","traverse","Cesium3DTilesetTraversal","emptyTraversal","descendantTraversal","selectionTraversal","ancestorStack","ancestorStackMaximumLength","skipLevelOfDetail","addEmptyTile","_emptyTiles","selectTile","tileContent","lastStyleTime","_selectedTilesToStyle","_selectedFrame","loadedTile","_ancestorWithContentAvailable","_shouldSelect","updateTile","_depth","selectDescendants","_visitedFrame","_requestedFrame","_cullRequestsWhileMoving","diameter","deltaMagnitude","positionWCDeltaMagnitude","positionWCDeltaMagnitudeLastFrame","cullRequestsWhileMovingMultiplier","isOnScreenLongEnough","cameraHasNotStoppedMovingLongEnough","timeSinceMoved","foveatedTimeDelay","priorityDeferred","_updatedVisibilityFrame","updateTileVisibility","getScreenSpaceError","meetsScreenSpaceErrorEarly","useOptimization","_optimChildrenWithinParent","Cesium3DTileOptimizationHint","anyVisible","anyChildrenVisible","numberOfTilesCulledWithChildrenUnion","updateExpiration","_wasMinPriorityChild","_priorityHolder","_maximumPriority","_distanceToCamera","_minimumPriority","foveatedFactor","_foveatedFactor","reverseScreenSpaceError","_priorityReverseScreenSpaceError","updateMinimumMaximumPriority","updateTileAncestorContentLinks","_ancestorWithContent","hasContent","reachedSkippingThreshold","ancestor","immediatelyLoadDesiredLevelOfDetail","_priorityProgressiveResolutionScreenSpaceErrorLeaf","_screenSpaceError","skipScreenSpaceErrorFactor","skipLevels","sortChildrenByDistanceToCamera","_centerZDepth","checkRefines","refines","minIndex","minimumPriority","childRefines","loadSiblings","executeEmptyTraversal","minPriorityChild","priorityHolder","inBaseTraversal","baseScreenSpaceError","executeTraversal","baseTraversal","parentRefines","_refines","stoppedRefining","allDescendantsLoaded","traverseAndSelect","lastAncestor","waitingTile","_stackLength","shouldSelect","debugFreezeFrame","executeSkipTraversal","executeBaseAndSkipTraversal","executeBaseTraversal","requestedTiles","updatePriority","Cesium3DTilePass","RENDER","PICK","SHADOW","PRELOAD","PRELOAD_FLIGHT","REQUEST_RENDER_MODE_DEFER_CHECK","MOST_DETAILED_PRELOAD","MOST_DETAILED_PICK","passOptions","isRender","requestTiles","getPassOptions","Empty3DTileContent","TileBoundingRegion","southwestCornerCartesian","northeastCornerCartesian","westNormal","southNormal","eastNormal","northNormal","tileBB","westernMidpointCartesian","westernMidpointScratch","easternMidpointCartesian","easternMidpointScratch","southSurfaceNormal","westVector","eastWestNormal","eastWestNormalScratch","southCenterCartesian","rayScratch","westPlane","planeScratch","northSurfaceNormal","northCenterCartesian","eastPlane","computeBox","computeBoundingVolumes","southwestCornerScratch","northeastCornerScratch","negativeUnitY","negativeUnitZ","vectorScratch","cameraHeight","cameraCartesianPosition","cameraCartographicPosition","positionCartographic","vectorFromSouthwestCorner","distanceToWestPlane","distanceToSouthPlane","vectorFromNortheastCorner","distanceToEastPlane","distanceToNorthPlane","distanceAboveTop","distanceBelowBottom","createDebugVolume","TileBoundingSphere","scratchU","scratchV","computeMissingVector","findOrthogonalVector","checkHalfAxes","uZero","vZero","wZero","TileOrientedBoundingBox","Cesium3DTile","_header","contentHeader","viewerRequestVolume","contentState","contentResource","serverKey","parentTransform","parentInitialTransform","_initialTransform","_viewerRequestVolume","_geometricError","updateGeometricErrorScale","contentHeaderUri","Cesium3DTileContentState","getServerKey","_contentResource","_contentState","_contentReadyToProcessPromise","_expiredContent","_serverKey","cacheNode","expireDuration","expireDate","expire","_screenSpaceErrorProgressiveResolution","_visibilityPlaneMask","_debugBoundingVolume","_debugContentBoundingVolume","_debugViewerRequestVolume","_debugColor","_debugColorizeTiles","_priorityProgressiveResolution","_loadTimestamp","_commandsLength","_colorDirty","_request","contentReady","contentFailed","contentReadyToProcessPromise","contentReadyPromise","useParentGeometricError","progressiveResolutionHeightFraction","heightFraction","parentGeometricError","dynamicScreenSpaceError","_dynamicScreenSpaceErrorComputedDensity","dynamicScreenSpaceErrorFactor","parentVisibilityPlaneMask","updateTransform","distanceToTile","distanceToTileCenter","insideViewerRequestVolume","screenSpaceError","getPriorityReverseScreenSpaceError","isProgressiveResolutionTile","tilePasses","parentFails","isPriorityProgressiveResolution","scaledCameraDirection","directionWC","closestPointOnLine","toLine","toLineNormalized","scaledToLine","closestOnSphere","toClosestOnSphere","toClosestOnSphereNormalize","foveatedScreenSpaceError","foveatedConeSize","maximumFovatedFactor","foveatedConeFactor","normalizedFoveatedFactor","sseRelaxation","foveatedInterpolationCallback","foveatedMinimumScreenSpaceErrorRelaxation","sse","isPriorityDeferred","requestContent","expired","contentFailedFunction","numberOfTilesProcessing","numberOfPendingRequests","getContentFailedFunction","_disableSkipLevelOfDetail","expireDurationDate","updateExpireDate","numberOfAttemptedRequests","unloadContent","scratchProjectedBoundingSphere","getBoundingVolume","cullingVolume","getContentBoundingVolume","scratchToTileCenter","scratchHalfAxes","scratchOrientedBoundingBox","scratchTransform","createRegion","initialTransform","rotationScale","createBoxFromTransformedRegion","rectangleRegion","boundingVolumeHeader","createBox","createSphere","uniformScale","initCommandLength","hasContentBoundingVolume","empty","showVolume","debugShowContentBoundingVolume","debugShowViewerRequestVolume","debugColorizeTilesOn","debugColorizeTiles","_heatmap","tilePropertyName","debugColorizeTilesOff","colorize","makeStyleDirty","expiredContent","updateContent","scratchCommandList","isolateDigits","normalizedValue","numberOfDigits","leftShift","scaled","priorityNormalizeAndClamp","process","savedCommandList","preferLeaves","maximumPriority","preloadProgressiveResolutionScale","foveatedLeftShift","foveatedDeferScale","preloadProgressiveResolutionLeftShift","preloadFlightScale","foveatedDeferLeftShift","depthDigits","preferredSortingDigits","preloadProgressiveResolutionDigits","foveatedDigits","preferredSortingLeftShift","foveatedDeferDigits","preloadFlightDigits","Cesium3DTileOptimizations","scratchAxis","checkChildrenWithinParent","childBoundingVolume","childOrientedBoundingBox","axisLength","Cesium3DTilesetCache","_list","_sentinel","_trimTiles","unloadTile","unloadCallback","unloadTiles","trimTiles","maximumMemoryUsageInBytes","maximumMemoryUsage","sentinel","totalMemoryUsageInBytes","Cesium3DTilesetHeatmap","_previousMinimum","_previousMaximum","_referenceMinimum","_referenceMaximum","getHeatmapValue","tileValue","setReferenceMinimumMaximum","heatmapColors","heatmapValue","heatmap","getHeatmapValueAndUpdateMinimumMaximum","shiftedMax","colorPosition","colorPositionFloor","colorPositionCeil","colorZero","colorOne","finalColor","resetMinimumMaximum","referenceMinimum","referenceMaximum","useReference","Cesium3DTilesetStatistics","selected","numberOfCommands","numberOfTilesWithContentReady","numberOfTilesTotal","numberOfLoadedTilesTotal","numberOfFeaturesSelected","numberOfFeaturesLoaded","numberOfPointsSelected","numberOfPointsLoaded","numberOfTrianglesSelected","numberOfTilesStyled","numberOfFeaturesStyled","updatePointAndFeatureCounts","decrement","incrementSelectionCounts","incrementLoadCounts","decrementLoadCounts","Cesium3DTileStyleEngine","_lastStyleTime","Cesium3DTileset","_asset","_processingQueue","_timeSinceLoad","_updatedModelMatrixFrame","_modelMatrixChanged","_previousModelMatrix","_extras","_cullWithChildrenBounds","cullWithChildrenBounds","_allTilesAdditive","_stencilClearCommand","_maximumMemoryUsage","_styleEngine","_statisticsLast","_statisticsPerPass","_requestedTilesInFlight","debugHeatmapTilePropertyName","cullRequestsWhileMoving","_tilesLoaded","_initialTilesLoaded","_tileDebugLabels","_initialClippingPlanesOriginMatrix","_clippingPlanesOriginMatrix","_clippingPlanesOriginMatrixDirty","preloadWhenHidden","preloadFlightDestinations","_foveatedConeSize","_foveatedMinimumScreenSpaceErrorRelaxation","dynamicScreenSpaceErrorDensity","dynamicScreenSpaceErrorHeightFalloff","_pointCloudEyeDomeLighting","loadProgress","allTilesLoaded","initialTilesLoaded","tileLoad","tileUnload","tileFailed","tileVisible","debugPickedTileLabelOnly","debugPickedTile","debugPickPosition","debugShowGeometricError","debugShowRenderingStatistics","debugShowMemoryUsage","debugShowUrl","loadJson","gltfUpAxis","extraCredits","clippingPlanesOrigin","originCartographic","isCesium3DTileset","tilesLoaded","styleEngine","tilesetUrl","parentTile","tilesetVersion","rootTile","childHeader","childTile","scratchPositionNormal","scratchDirection","destroyTile","destroySubtree","addToProcessingQueue","handleTileSuccess","handleTileFailure","sortRequestByPriority","postPassesUpdate","requestedTilesInFlight","removeCount","outOfView","cancelOutOfViewRequests","statisticsLast","lastNumberOfPendingRequest","lastNumberOfTilesProcessing","progressChanged","raiseLoadProgressEvent","prePassesUpdate","filterProcessingQueue","processTiles","transformLocal","centerLocal","positionLocal","boxHeight","heightClose","heightFar","horizonFactor","updateDynamicScreenSpaceError","newFrame","stringOptions","maximumFractionDigits","formatMemoryString","memoryInMegabytes","toLocaleString","computeTileLabelPosition","addTileDebugLabel","labelString","newLabel","updateTiles","numberOfInitialCommands","selectedTiles","selectedLength","emptyTiles","emptyLength","lengthBeforeUpdate","addedCommandsLength","backfaceCommands","backfaceCommandsLength","updateTileDebugLabels","passStatistics","detectModelMatrixChanged","isAsync","trimLoadedTiles","updateForPass","tilesetPassState","originalCommandList","originalCamera","originalCullingVolume","extensionName","modelMatrixScratch","Cesium3DTilesetVisualizer","_tilesetHash","_entitiesToVisualize","removeTileset","visualizer","tilesetHash","tilesetData","tilesetPrimitive","checkLoad","loadFail","tilesetGraphics","defaultEvenColor","defaultOddColor","CheckerboardMaterialProperty","_evenColor","_evenColorSubscription","_oddColor","_oddColorSubscription","entityOptionsScratch","fireChangedEvent","_firing","_refire","_suspendCount","_addedEntities","_removedEntities","_changedEntities","addedArray","removedArray","changedArray","_collectionChanged","EntityCollection","_entities","suspendEvents","resumeEvents","collectionChangedEventCallback","oldShows","entitiesLength","oldShow","_onEntityDefinitionChanged","removeById","addedEntities","existingItem","existingItemId","addedItem","getById","getOrCreateEntity","entityIdScratch","clean","subscribeToEntity","eventHash","collectionId","CompositeEntityCollection","_onDefinitionChanged","unsubscribeFromEntity","recomposite","_shouldRecomposite","iEntities","collections","_collections","collectionsLength","collectionsCopy","_collectionsCopy","collectionsCopyLength","composite","_composite","newEntities","_eventHash","compositeEntity","newEntitiesArray","getCollectionIndex","swapCollections","addCollection","hasIndex","removeCollection","removeAllCollections","containsCollection","indexOfCollection","getCollection","getCollectionsLength","raiseCollection","lowerCollection","raiseCollectionToTop","lowerCollectionToBottom","removedLength","removedEntity","removedId","addedLength","addedEntity","addedId","compositeProperty","newProperty","firstTime","innerEntity","CompositeProperty","_eventHelper","_intervalsChanged","innerProperty","eventHelper","subscribeAll","CompositeMaterialProperty","_raiseDefinitionChanged","CompositePositionProperty","defaultZIndex","GroundGeometryUpdater","getGeometryHeight","getGeometryExtrudedHeight","computeGeometryOffsetAttribute","CorridorGeometryOptions","CorridorGeometryUpdater","DynamicCorridorGeometryUpdater","heightValue","heightReferenceValue","extrudedHeightValue","extrudedHeightReferenceValue","DataSource","isLoading","loadingEvent","clustering","setLoading","dataSource","_isLoading","PointPrimitive","pointPrimitiveCollection","_pointPrimitiveCollection","OUTLINE_COLOR_INDEX","OUTLINE_WIDTH_INDEX","PIXEL_SIZE_INDEX","DISABLE_DEPTH_DISTANCE_INDEX","pointPrimitive","_updatePointPrimitive","halfSize","positionHighAndSize","positionLowAndOutline","distanceDisplayConditionAndDisableDepth","PointPrimitiveCollection","_pointPrimitives","_pointPrimitivesToUpdate","_pointPrimitivesToUpdateIndex","_pointPrimitivesRemoved","_maxPixelSize","_maxTotalPointSize","u_maxTotalPointSize","destroyPointPrimitives","pointPrimitives","removePointPrimitives","newPointPrimitives","writePositionSizeAndOutline","writeDistanceDisplayConditionAndDepthDisable","writePointPrimitive","pointPrimitivesToUpdate","pointPrimitivesLength","pointPrimitivesToUpdateLength","numberOfPointPrimitives","positionLowAndShow","PointPrimitiveCollectionFS","KDBush","getX","getY","nodeSize","ArrayType","defaultGetX","defaultGetY","select","inc","swapItem","sqDist","nextAxis","within","qy","r2","kdbush","EntityCluster","_pixelRange","pixelRange","_minimumClusterSize","minimumClusterSize","_clusterBillboards","clusterBillboards","_clusterLabels","clusterLabels","_clusterPoints","clusterPoints","_pointCollection","_clusterBillboardCollection","_clusterLabelCollection","_clusterPointCollection","_collectionIndicesByEntity","_unusedLabelIndices","_unusedBillboardIndices","_unusedPointIndices","_previousClusters","_previousHeight","_enabledDirty","_clusterEvent","coord","expandBoundingBox","labelBoundingBoxScratch","getBoundingBox","hasLabelIndex","labelIndex","labelBBox","addNonClusteredItem","addCluster","entityId","getScreenSpacePositions","canClusterLabels","canClusterBillboards","canClusterPoints","clustered","pointBoundinRectangleScratch","totalBoundingRectangleScratch","neighborBoundingRectangleScratch","createGetEntity","collectionProperty","CollectionConstructor","unusedIndicesProperty","entityIndexProperty","entityItem","entityIndices","billboardIndex","pointIndex","unusedIndices","removeEntityIndicesIfUnused","disableCollectionClustering","_initialize","pointCollection","clusteredLabelCollection","clusteredBillboardCollection","clusteredPointCollection","neighbors","neighborLength","neighborPoint","collectionIndex","clusters","newClusters","previousHeight","currentHeight","minimumWidth","totalBBox","clusterPosition","neighborItem","neighborBBox","clusterEvent","getLabel","removeLabel","removePoint","_pixelRangeDirty","_minimumClusterSizeDirty","CustomDataSource","_changed","_entityCluster","CylinderGeometryOptions","CylinderGeometryUpdater","DynamicCylinderGeometryUpdater","DataSourceClock","_clockRange","defaultLineCount","defaultLineOffset","defaultLineThickness","GridMaterialProperty","_cellAlpha","_cellAlphaSubscription","_lineCount","_lineCountSubscription","_lineThickness","_lineThicknessSubscription","_lineOffset","_lineOffsetSubscription","PolylineArrowMaterialProperty","defaultGapColor","PolylineDashMaterialProperty","_gapColor","_gapColorSubscription","_dashLength","_dashLengthSubscription","_dashPattern","_dashPatternSubscription","PolylineGlowMaterialProperty","_glowPower","_glowPowerSubscription","_taperPower","_taperPowerSubscription","_glow","PolylineOutlineMaterialProperty","PositionPropertyArray","itemValue","PropertyArray","_targetProperty","targetEntity","_targetEntity","_targetCollection","_targetId","ReferenceProperty","_onTargetEntityDefinitionChanged","targetPropertyNames","_targetPropertyNames","targetCollection","targetId","resolvedProperty","fromString","referenceString","inIdentifier","isEscaped","otherNames","Rotation","previousValue","PackableNumber","arrayInsert","itemsLength","convertDate","timesSpliceArgs","valuesSpliceArgs","mergeNewSamples","newData","prevItem","timesInsertionPoint","valuesInsertionPoint","nextTime","newDataIndex","timesSpliceArgsCount","valuesSpliceArgsCount","SampledProperty","derivativeTypes","innerType","innerDerivativeTypes","derivativeType","derivativePackedLength","_innerType","_interpolationDegree","_interpolationAlgorithm","_numberOfPoints","_yTable","_packedLength","_packedInterpolationLength","_updateTableLength","_interpolationResult","_derivativeTypes","_innerDerivativeTypes","_inputOrder","_forwardExtrapolationType","ExtrapolationType","_forwardExtrapolationDuration","_backwardExtrapolationType","_backwardExtrapolationDuration","removeSamples","numberToRemove","interpolationDegree","interpolationAlgorithm","forwardExtrapolationType","forwardExtrapolationDuration","backwardExtrapolationType","backwardExtrapolationDuration","timesLength","timeout","endTime","computedFirstIndex","computedLastIndex","destinationIndex","interpolationResult","setInterpolationOptions","valuesChanged","addSample","derivatives","hasDerivatives","derivativesLength","addSamples","derivativeValues","addSamplesPackedArray","packedSamples","removeSample","otherDerivativeTypes","otherTimes","otherValues","_mergeNewSamples","SampledPositionProperty","numberOfDerivatives","_numberOfDerivatives","_property","HORIZONTAL","VERTICAL","defaultOrientation","StripeOrientation","StripeMaterialProperty","_offsetSubscription","TimeIntervalCollectionPositionProperty","TimeIntervalCollectionProperty","VelocityVectorProperty","_subscription","_normalize","position1Scratch","position2Scratch","timeScratch","_getValue","velocityResult","positionResult","VelocityOrientationProperty","_velocityVectorProperty","velocityScratch","rotationScratch","UnitCartesian3","createReferenceProperty","createSpecializedProperty","packetData","velocityReference","referenceProperty","scratchSpherical","scratchTimeInterval","scratchQuaternion","unwrapUriInterval","czmlInterval","sourceUri","unwrapCartesianInterval","cartesianVelocity","unitCartesian","unitSpherical","convertUnitSphericalToCartesian","convertSphericalToCartesian","cartographicRadians","convertCartographicRadiansToCartesian","cartographicDegrees","convertCartographicDegreesToCartesian","normalizePackedCartesianArray","normalizePackedQuaternionArray","getPropertyType","unwrapInterval","unwrapUnitCartesianInterval","rgbaf","unwrapColorInterval","unitQuaternion","unwrapQuaternionInterval","stripeOrientation","wsen","wsenDegrees","unwrapRectangleInterval","interpolators","HERMITE","LAGRANGE","updateInterpolationSettings","iso8601Scratch","intervalFromString","intervalString","wrapPropertyInInfiniteInterval","convertPropertyToComposite","convertPositionPropertyToComposite","processProperty","constrainedInterval","unwrappedInterval","unwrappedIntervalLength","combinedInterval","isValue","hasInterval","removePropertyData","isSampled","needsUnpacking","packetEpoch","processPacketData","processPositionProperty","removePositionPropertyData","processPositionPacketData","processShapePacketData","references","processReferencesArrayPacketData","processMaterialProperty","existingMaterial","existingInterval","materialData","thisIntervals","solidColor","grid","stripe","polylineOutline","polylineGlow","polylineArrow","polylineDash","checkerboard","processMaterialPacketData","PropertyArrayType","CompositePropertyArrayType","processArrayPacketData","processArray","processPositionArrayPacketData","processPositionArray","unpackCartesianArray","unpackCartographicRadiansArray","unpackCartographicDegreesArray","processPositionArrayOfArraysPacketData","referenceArray","tempObj","processNodeTransformations","nodeTransformationsData","nodeNames","nodeTransformationData","nodeTransformation","processArticulations","articulationsData","articulationStageData","PolygonHierarchyProperty","adaptFollowSurfaceToArcType","followSurface","processCzmlPacket","packet","updaterFunctions","_version","documentPacket","_documentPacket","clockPacket","processDocument","czml","DocumentPacket","CzmlDataSource","_processCzml","raiseChangedEvent","totalSeconds","updateClock","loadCzml","_holes","updaters","billboardData","processAlignedAxis","boxData","corridorData","cylinderData","ellipseData","ellipsoidData","labelData","modelData","nameData","descriptionData","pathData","pointData","polygonData","processPositionArrayOfArrays","polylineData","adapterFunction","polylineVolumeData","processShape","propertiesData","propertyData","rectangleData","positionData","viewFromData","wallData","orientationData","DataSourceCollection","_dataSources","_dataSourceAdded","_dataSourceRemoved","_dataSourceMoved","getIndex","dataSources","swapDataSources","dataSourceMoved","dataSourceAdded","dataSourceRemoved","getByName","raise","raiseToTop","lowerToBottom","PrimitiveCollection","destroyPrimitives","getPrimitiveIndex","compositePrimitive","external","_external","_composites","OrderedGroundPrimitiveCollection","_collectionsArray","doNotDestroy","DynamicGeometryBatch","_dynamicUpdaters","updater","dynamicUpdater","removeAllPrimitives","EllipseGeometryOptions","EllipseGeometryUpdater","DynamicEllipseGeometryUpdater","radiiScratch","innerRadiiScratch","unitSphere","EllipsoidGeometryOptions","EllipsoidGeometryUpdater","DynamicEllipsoidGeometryUpdater","_outlineAttributes","_lastSceneMode","_lastShow","_lastOutlineShow","_lastOutlineWidth","_lastOutlineColor","_lastOffset","skipModelMatrix","modelMatrixResult","showFill","showOutline","sceneMode","in3D","_lastDistanceDisplayCondition","outlineAttributes","PlaneGeometryOptions","PlaneGeometryUpdater","DynamicPlaneGeometryUpdater","distanceDisplayConditionAttribute","planeGraphics","createPrimitiveMatrix","isColorMaterial","scratchAxis2","scratchTranslation","transformedNormal","scratch2DPositions","cart2Scratch","PolygonGeometryOptions","PolygonGeometryUpdater","DyanmicPolygonGeometryUpdater","centroid2D","perPositionHeightProperty","perPositionHeightEnabled","hierarchyValue","perPositionHeightValue","isExtruded","PolylineVolumeGeometryOptions","PolylineVolumeGeometryUpdater","DynamicPolylineVolumeGeometryUpdater","scratchCenterRect","RectangleGeometryOptions","RectangleGeometryUpdater","DynamicRectangleGeometryUpdater","Batch","appearanceType","depthFailAppearanceType","depthFailMaterialProperty","removeMaterialSubscription","waitingOnCreate","oldPrimitive","updatersWithAttributes","subscriptions","showsUpdated","itemsToRemove","invalidated","onMaterialChanged","StaticGeometryColorBatch","_solidItems","_translucentItems","_appearanceType","_depthFailAppearanceType","removeItem","moveItems","batch","itemsMoved","itemsToMoveLength","updateItems","isUpdated","updatersLength","isMaterial","updaterMaterial","unsubscribe","removedCount","colorProperty","resultColor","_lastColor","depthFailColorProperty","depthColor","_lastDepthFailColor","offsetProperty","updateShows","solidsMoved","translucentsMoved","updaterDepthFailMaterial","StaticGeometryPerMaterialBatch","rectangleCollisionCheck","StaticGroundGeometryColorBatch","_batches","overlapping","batches","batchCount","oldBatch","newBatch","usingSphericalTextureCoordinates","StaticGroundGeometryPerMaterialBatch","StaticOutlineGeometryBatch","_solidBatches","_translucentBatches","solidBatches","solidBatchesLength","translucentBatches","translucentBatchesLength","needUpdate","solidsToMoveLength","translucentToMoveLength","solidBatch","translucentBatch","WallGeometryOptions","WallGeometryUpdater","DynamicWallGeometryUpdater","emptyArray","geometryUpdaters","GeometryUpdaterSet","_removeEntitySubscription","GeometryVisualizer","_groundPrimitives","_addedObjects","_removedObjects","_changedObjects","numberOfShadowModes","NUMBER_OF_SHADOW_MODES","_outlineBatches","_closedColorBatches","_closedMaterialBatches","_openColorBatches","_openMaterialBatches","numberOfClassificationTypes","NUMBER_OF_CLASSIFICATION_TYPES","groundColorBatches","groundMaterialBatches","_groundColorBatches","_groundMaterialBatches","_dynamicBatch","_subscriptions","_updaterSets","updaterSet","addedObjects","removedObjects","changedObjects","_removeUpdater","_insertUpdaterIntoBatch","_onGeometryChanged","getBoundingSphereArrayScratch","getBoundingSphereBoundingSphereScratch","batchesLength","updaterSets","defaultStyle","defaultFillColor","fillColorScratch","outlineColorScratch","backgroundColorScratch","backgroundPaddingScratch","LabelVisualizer","labelGraphics","defaultSilhouetteColor","defaultColorBlendMode","defaultImageBasedLightingFactor","nodeMatrixScratch","ModelVisualizer","_modelHash","removeModel","modelHash","modelPrimitive","clearNodeTransformationsArticulationsScratch","nodeTransformationsScratch","articulationsScratch","checkModelLoad","modelGraphics","animationsRunning","nodeLength","modelNode","transformationMatrix","anyArticulationUpdated","articulationStageKeys","numKeys","articulationStageValue","ScaledPositionProperty","_removeSubscription","subSampleCompositePropertyScratch","subSampleIntervalPropertyScratch","reallySubSample","updateTime","maximumStep","sampleStepsToTake","sampleStepsTaken","sampleStepSize","steppedOnNow","sampling","secondsUntilNext","subSampleSampledProperty","intervalStart","intervalStop","sampleStart","sampleStop","subSampleCompositeProperty","subSampleIntervalProperty","subSampleConstantProperty","stepSize","subSampleGenericProperty","subSample","toFixedScratch","PolylineUpdater","_unusedIndexes","PathVisualizer","_updaters","updateObject","pathGraphics","showProperty","hasLeadTime","hasTrailTime","unusedIndexes","removeObject","lastUpdater","frameToVisualize","currentUpdater","_subSample","PointVisualizer","pointGraphics","needsRedraw","newPixelSize","polylineCollections","GeometryOptions","GroundGeometryOptions","PolylineGeometryUpdater","_entitySubscription","_depthFailMaterialProperty","_geometryOptions","_groundGeometryOptions","_supportsPolylinesOnTerrain","positionsProperty","groundGeometryOptions","generateCartesianArcOptions","_line","_groundPolylinePrimitive","getLine","dynamicGeometryUpdater","sceneId","StaticGroundPolylinePerMaterialBatch","removeUpdater","insertUpdaterIntoBatch","_groundBatches","_colorBatches","_materialBatches","PolylineVisualizer","DataSourceDisplay","dataSourceCollection","_onDataSourceAdded","_onDataSourceRemoved","_onDataSourceMoved","postRender","_postRender","_dataSourceCollection","_visualizersCallback","visualizersCallback","defaultVisualizersCallback","primitivesAdded","removeDefaultDataSourceListener","removeDataSourceCollectionListener","defaultDataSource","_defaultDataSource","addPrimitives","_removeDefaultDataSourceListener","_removeDataSourceCollectionListener","visualizers","vLength","_visualizers","allowPartial","visualizersLength","displayPrimitives","displayGroundPrimitives","oldIndex","updateTransformMatrix3Scratch1","updateTransformMatrix3Scratch2","updateTransformMatrix3Scratch3","updateTransformMatrix4Scratch","updateTransformCartesian3Scratch1","updateTransformCartesian3Scratch2","updateTransformCartesian3Scratch3","updateTransformCartesian3Scratch4","updateTransformCartesian3Scratch5","updateTransformCartesian3Scratch6","deltaTime","EntityView","_lastEntity","_lastCartesian","_defaultOffset3D","_offset3D","defaultOffset3D","scratchHeadingPitchRange","objectChanged","sceneModeChanged","updateLookAt","saveCamera","viewFromProperty","hasViewFrom","viewBoundingSphere","xBasis","yBasis","zBasis","hasBasis","invertVelocity","deltaCartesian","toInertial","toInertialDelta","inertialCartesian","inertialDeltaCartesian","inertialVelocity","GRAVITATIONALPARAMETER","_setTransform","lookAtTransform","appendABViewSupported","workerScriptsPath","ERR_BAD_FORMAT","ERR_READ","Crc32","crc","getDataHelper","dataBuffer","dataArray","Reader","TextReader","blobReader","init","BlobReader","readUint8Array","Data64URIReader","dataURI","dataStart","dataEnd","reader","FileReader","readAsArrayBuffer","webkitSlice","mozSlice","msSlice","blobSlice","Writer","TextWriter","writeUint8Array","getData","readAsText","Data64URIWriter","contentType","pending","dataString","btoa","BlobWriter","launchWorkerProcess","onappend","onprogress","onend","onreaderror","onwriteerror","outputSize","onflush","flush","launchProcess","outputData","inputData","computeCrc32","crc32","decodeASCII","charCode","out","extendedASCII","decodeUTF8","escape","getString","readCommonHeader","centralDirectory","bitFlag","compressionMethod","lastModDateRaw","lastModDate","timeRaw","getDate","compressedSize","uncompressedSize","filenameLength","extraFieldLength","createZipReader","Entry","checkCrc32","getWriterData","dataCrc32","testCrc32","dataOffset","oninflateappend","sending","oninflateend","zip","useWebWorkers","Inflater","inflate","getEntries","seekEOCDR","entriesCallback","datalength","fileslength","filename","comment","entries","commentLength","directory","close","encodeUTF8","unescape","getBytes","createZipWriter","dontDeflate","files","filenames","writeFooter","footer","writeFile","headerArray","setUint16","getHours","getMinutes","getSeconds","getFullYear","getMonth","writeHeader","ondeflateappend","ondeflateend","Deflater","deflate","indexFilename","file","createReader","createWriter","gxNamespace","ExternalFileHandler","modelCallback","_files","_promises","_modelCallback","imageTypeRegex","getModelBlobHander","ValueGetter","_time","StyleCache","_ids","_styles","IdManager","exportKml","kmz","_createState","rootEntities","kmlDoc","kmlElement","kmlDocumentElement","recurseEntities","overlays","styles","styleCache","valueGetter","idManager","timeSpan","createPoint","createLineString","createPolygon","createBasicElementWithText","overlayIndex","overlay","geometryCount","placemark","styleCount","styleIndex","multigeometry","folderNode","externalFileHandler","kmlString","XMLSerializer","serializeToString","externalFiles","addKmlToZip","addExternalFilesToZip","createKmz","kml","regexResult","toBlob","colorToString","getMaterialType","styleId","parentElement","firstElement","entityAvailability","defaultAvailability","sampleDuration","createDocument","entityPositionProperty","getCoordinates","pointGeometry","altitudeMode","getAltitudeMode","iconStyle","createIconStyleFromBillboard","createIconStyleFromPoint","createTracks","useEntityPositionProperty","isModel","tracks","trackAltitudeMode","positionTimes","constCoordinates","stopDate","trackGeometry","createElementNS","createModelGeometry","multiTrackGeometry","lineStyle","processMaterial","icon","hotSpot","polylineGraphics","altitudeModeText","lineStringGeometry","getLinearRing","coordinateStrings","linearRing","isRectangle","rectangleGraphics","groundOverlay","latLonBox","createGroundOverlay","boundaries","coordinatesProperty","cornerFunction","outerBoundaryIs","getRectangleBoundaries","polygonGraphics","holeCount","innerBoundaryIs","getPolygonBoundaries","boundaryCount","polyStyle","modelGeometry","scaleElement","link","elementName","elementValue","namespace","createCDATASection","global","kx","ky","topology","bboxPoint","bboxGeometry","arcs","feature$1","ring","stitch","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","fg","gf","meshArcs","object$$1","extractArcs","geomsByArc","extract0","extract1","extract2","extract3","geoms","mergeArcs","polygonsByArc","groups","extract","planarRingArea","group","ki","bisect","lo","untransform","hashmap","hash","equal","keyType","keyEmpty","valueType","keystore","LN2","valstore","matchKey","collisions","maybeSet","missingValue","equalPoint","pointA","pointB","uints","hashPoint","rings","indexByPoint","hashIndex","equalIndex","visitedByIndex","leftByIndex","rightByIndex","junctionByIndex","junctionCount","lineStart","lineEnd","sequence","ringStart","ringEnd","junctionByPoint","store","has","hashset","reverse$1","inputs","outputs","geomifyFeatureCollection","geomifyFeature","geomifyGeometry","hashArc","equalArc","arcA","arcB","ia","ja","ib","jb","filterTrue","filterIdentity","filterNotNull","filterAttached","ownerByArc","ownerIndex","testGeometry","testArcs","planarTriangleArea","planarRingArea$1","filterWeight","minWeight","MIN_VALUE","interior","descending","pi","quarterPi","halfArea","lambda0","cosPhi0","lambda1","cosPhi1","sinPhi1","dLambda","sdLambda","adLambda","indexesByArc","LineString","MultiLineString","Polygon","MultiPolygon","ij","ik","quantize","quantizePoint","quantizeGeometry","boundGeometry","boundGeometryType","GeometryCollection","Point","boundPoint","MultiPoint","boundLine","boundMultiLine","quantizePoints","quantizeLine","quantizeRing","quantizePolygon","quantizeGeometryType","prequantize","arcCount","arcsByEnd","dedupLine","dedupRing","startArcs","startArc","endArcs","endArc","equalLine","reverseEqualLine","equalRing","reverseEqualRing","findMinimumOffset","ka","kb","minimumPoint","dedup","junctions","lineMid","0","1","ringMid","ringFixed","cut","extractGeometry","extractGeometryType","extractLine","extractRing","extractMultiRing","indexByArc","indexGeometry","geometry$$1","indexGeometryType","indexArcs","indexMultiArcs","oldObjects","newObjects","filterGeometry","filterRings","filterInteriorRing","newArcs","oldArcs","oldArcsLength","newIndexByOldIndex","newArcsLength","scanGeometry","scanArcs","scanMultiArcs","scanArc","reindexGeometry","reindexArcs","reindexMultiArcs","reindexArc","prune","filterAttachedWeight","presimplify","heap","newHeap","maxWeight","quantile","quantile$1","simplify","sphericalRingArea","sphericalTriangleArea","topojson","defaultCrsFunction","defaultMarkerSymbol","crsNames","crsLinkHrefs","crsLinkTypes","defaultMarkerSize","defaultMarkerColor","defaultStroke","defaultStrokeWidth","defaultClampToGround","sizes","medium","large","simpleStyleIdentifiers","defaultDescribe","nameProperty","defaultDescribeProperty","describe","createDescriptionCallback","createObject","geoJson","finalId","title","namePropertyPrecedence","lowerKey","coordinatesArrayToCartesianArray","crsFunction","geoJsonObjectTypes","Feature","processFeature","FeatureCollection","featureCollection","notUsed","processGeometryCollection","processLineString","processMultiLineString","processMultiPoint","processMultiPolygon","processPoint","processPolygon","Topology","processTopology","geometryTypes","geometryHandler","geometryCollection","canvasOrPromise","symbol","markerSymbol","markerColor","markerSize","_pinBuilder","strokeMaterialProperty","widthProperty","strokeWidthProperty","lineStrings","typeHandler","GeoJsonDataSource","crs","KmlCamera","Autolinker","throwUnhandledCaseError","theValue","HtmlTag","whitespaceRegex","innerHtml","setTagName","getTagName","setAttr","getAttrs","getAttr","setAttrs","setClass","cssClass","addClass","newClass","classAttr","getClass","newClasses","removeClass","removeClasses","hasClass","setInnerHTML","setInnerHtml","getInnerHTML","getInnerHtml","toAnchorString","attrsStr","buildAttrsStr","attrsArr","prop","AnchorTagBuilder","newWindow","truncate","build","createAttrs","processAnchorText","getAnchorText","getAnchorHref","createCssClass","returnClasses","cssClassSuffixes","getCssClassSuffixes","anchorText","doTruncate","truncateLength","truncateLocation","truncateLen","ellipsisChars","ellipsisLengthBeforeParsing","ellipsisLength","buildUrl","urlObj","host","buildSegment","segment","remainingAvailableLength","remainingAvailableLengthHalf","startOffset","availableLength","urlSub","parse_url","matchQuery","pathAndQuery","truncateSmart","truncateMiddle","ellipsis","truncateEnd","Match","__jsduckDummyDocProp","matchedText","tagBuilder","getMatchedText","setOffset","getOffset","buildTag","EmailMatch","_super","_this","email","getEmail","HashtagMatch","serviceName","hashtag","getServiceName","getHashtag","MentionMatch","mention","getMention","PhoneMatch","plusSign","getPhoneNumber","getNumber","UrlMatch","urlMatchType","protocolUrlMatch","protocolRelativeMatch","stripPrefix","www","stripTrailingSlash","decodePercentEncoding","schemePrefixRegex","wwwPrefixRegex","protocolRelativeRegex","protocolPrepended","getUrlMatchType","getUrl","stripProtocolRelativePrefix","stripSchemePrefix","stripWwwPrefix","removeTrailingSlash","removePercentEncoding","preProcessedEntityAnchorText","Matcher","letterRe","digitRe","whitespaceRe","quoteRe","controlCharsRe","alphaCharsStr","alphaCharsAndMarksStr","decimalNumbersStr","alphaNumericCharsStr","alphaNumericAndMarksCharsStr","ipStr","domainLabelStr","getDomainLabelStr","getDomainNameStr","domainNameCharRegex","tldRegex","EmailMatcher","localPartCharRegex","strictTldRegex","parseMatches","noCurrentEmailMatch","CurrentEmailMatch","mailtoTransitions","charIdx","currentEmailMatch","char","stateNonEmailAddress","stateMailTo","stateLocalPart","stateLocalPartDot","stateAtSign","stateDomainChar","stateDomainHyphen","stateDomainDot","captureMatchIfValidAndReset","beginEmailMatch","prevChar","hasMailtoPrefix","resetToNonEmailMatchState","hasDomainDot","newState","emailAddress","emailAddressNormalized","doesEmailHaveValidTld","UrlMatchValidator","urlMatch","isValidUriScheme","urlMatchDoesNotHaveProtocolOrDot","urlMatchDoesNotHaveAtLeastOneWordChar","isValidIpAddress","containsMultipleDots","uriSchemeMatch","newRegex","hasFullProtocolRegex","ipRegex","stringBeforeSlash","uriSchemeMatchArr","uriSchemeRegex","uriScheme","hasWordCharAfterProtocolRegex","UrlMatcher","matcherRegex","urlSuffixRegex","wordCharRegExp","_loop_1","matchStr","schemeUrlMatch","wwwUrlMatch","wwwProtocolRelativeMatch","tldProtocolRelativeMatch","this_1","matchHasUnbalancedClosingParen","matchHasInvalidCharAfterTld","foundCommonScheme","commonScheme","indexOfSchemeStart","startChar","endChar","numOpenBraces","HashtagMatcher","nonWordCharRegex","PhoneMatcher","cleanNumber","contextClear","testMatch","MentionMatcher","matcherRegexes","parseHtml","_a","onOpenTag","onCloseTag","onText","onComment","onDoctype","noCurrentTag","CurrentTag","currentDataIdx","currentTag","stateData","stateTagOpen","stateEndTagOpen","stateTagName","stateBeforeAttributeName","stateAttributeName","stateAfterAttributeName","stateBeforeAttributeValue","stateAttributeValueDoubleQuoted","stateAttributeValueSingleQuoted","stateAttributeValueUnquoted","stateAfterAttributeValueQuoted","stateSelfClosingStartTag","stateMarkupDeclarationOpen","stateCommentStart","stateCommentStartDash","stateComment","stateCommentEndDash","stateCommentEnd","stateCommentEndBang","stateDoctype","startNewTag","isClosing","isOpening","captureTagName","emitTagAndPreviousTextNode","resetToDataState","textBeforeTag","startIdx","emitText","urls","phone","replaceFn","matchers","normalizeUrlsCfg","normalizeStripPrefixCfg","normalizeTruncateCfg","textOrHtml","schemeMatches","wwwMatches","tldMatches","dest","defaults","skipTagNames","skipTagsStackCount","textSplit","splitRegex","lastIdx","splitAndCapture","currentOffset_1","splitText","textNodeMatches","parseText","compactMatches","removeUnwantedMatches","matchedTextLength","endIdx","removeIdx","getMatchers","numMatchers","textMatches","numTextMatches","newHtml","createMatchReturnVal","replaceFnResult","getTagBuilder","matcher","Email","Hashtag","Mention","Phone","Url","KmlLookAt","headingPitchRange","KmlTour","playlistIndex","playlist","tourStart","tourEnd","entryStart","entryEnd","_activeEntries","cancelAllEntries","activeEntries","playEntry","viewer","cameraOptions","allDone","_playNext","playNext","blocking","tour","indx","terminated","addPlaylistEntry","KmlTourFlyTo","flyToMode","activeCamera","activeCallback","getCameraOptions","flyTo","flyToBoundingSphere","cancelFlight","complete","easingFunction","KmlTourWait","parser","MimeTypes","avi","bmp","bz2","chm","css","csv","dvi","eps","flv","gif","gz","htm","ico","jnlp","jpeg","jpg","m3u","m4v","mathml","midi","mov","mp3","mp4","mp4v","mpeg","mpg","odp","ods","odt","ogg","pdf","png","pps","ppt","ps","qt","rdf","rss","rtf","swf","tif","tiff","txt","wav","wma","wmv","detectFromFilename","ext","autolinker","kmlNamespaces","gxNamespaces","namespaces","gx","atom","kmlgx","featureTypes","Document","Folder","processingData","deferredLoading","newProcessingData","parentEntity","Placemark","styleEntity","hasGeometry","childNode","geometryProcessor","localName","processPositionGraphics","NetworkLink","networkEntity","sourceResource","uriResolver","queryFirstNode","viewRefreshMode","viewBoundScale","queryStringValue","newSourceUri","resolveHref","defaultViewFormat","viewFormat","httpQuery","cleanupString","processNetworkLinkQueryString","_camera","_canvas","_lastCameraView","networkLinkCollection","rootElement","newEntity","mergeAvailabilityWithParent","refreshMode","refreshInterval","queryNumericValue","networkLinkControl","hasNetworkLinkControl","networkLinkInfo","cookie","lastUpdated","updating","needsUpdate","cameraUpdateTime","minRefreshPeriod","RefreshMode","expires","_networkLinks","addPromise","GroundOverlay","isLatLonQuad","readCoordinates","createDefaultPolygon","iconNode","getIconHref","queryColorValue","PhotoOverlay","processUnsupportedFeature","ScreenOverlay","Tour","queryStringAttribute","playlistNode","entryNode","playlistNodeProcessor","playlistNodeProcessors","kmlTours","DeferredLoading","_dataSource","_deferred","_stack","_timeoutSet","_used","_started","_timeThreshold","insertNamespaces","firstPart","lastPart","namespaceMap","xsi","removeDuplicateNamespaces","endDeclaration","loadDataUriFromZip","dataUri","embedDataUris","elementType","baseUri","applyBasePath","createEntity","KmlFeatureData","isExtrudable","gxAltitudeMode","readCoordinate","digits","tuples","queryNumericAttribute","queryNodes","getElementsByTagNameNS","queryChildNodes","resultNode","queryBooleanValue","addNodes","wait","isFirstCall","KmlDataSource","_getTimestamp","_process","_giveUpTime","_nextNode","_pop","featureProcessor","colorOptions","parseColorString","isRandom","createDefaultBillboard","createDefaultLabel","canRefresh","palette","hrefResource","processBillboardIcon","hotSpotNode","hotSpotX","hotSpotY","hotSpotXUnit","hotSpotYUnit","BILLBOARD_SIZE","styleNode","bgColor","textColor","balloonStyle","listItemType","processExternalStyles","styleCollection","styleKml","processStyles","styleNodes","styleNodesLength","styleMaps","styleMapsLength","styleMap","pairs","pair","styleUrl","styleUrlNodes","styleUrlNodesLength","styleReference","createDropLine","entityPosition","heightReferenceFromAltitudeMode","createPositionPropertyFromAltitudeMode","processPathGraphics","processLineStringOrLinearRing","geometryNode","coordinatesNode","tessellate","canExtrude","propertiesLength","createPositionPropertyArrayFromAltitudeMode","addToMultiTrack","dropShowProperty","includeEndPoints","scratchDiv","coordinatesString","LinearRing","outerBoundaryIsNode","linearRingNode","innerBoundaryIsNodes","Track","coordNodes","angleNodes","timeNodes","MultiTrack","lastStop","lastStopPosition","trackNodes","needDropLine","trackNode","MultiGeometry","childEntity","featureNode","kmlData","placeMark","inlineStyleNode","externalStyle","computeFinalStyle","beginNode","beginDate","endNode","processTimeSpan","whenString","processTimeStamp","ancestryIsVisible","authorNode","author","linkNode","hreflang","rel","address","phoneNumber","snippet","extendedDataNode","dataNodes","dataNode","extendedData","processExtendedData","background","foreground","isDisplayName","processDescription","processLookAt","processCamera","FlyTo","lookAt","flyto","Wait","SoundCue","processTourUnsupportedNode","AnimatedUpdate","TourControl","tilt","viewPoint","_unsupportedNode","sFirst","zeroRectangle","fixLatitude","fixLongitude","pickEllipsoid","newHalfWidth","newHalfHeight","horizFov","vertFov","loadKml","_DeferredLoading","processFeatureNode","loadKmz","docEntry","docDefer","innerDefer","loadXmlFromZip","dataToLoad","magicBlob","isZipFile","isZip","readBlobAsText","msg","nodeValue","innerText","_refresh","upWC","computeViewRectangle","parentAvailability","childAvailability","refreshEvent","unsupportedNodeEvent","oldName","isMinStart","isMaxStop","setHours","entitiesToIgnore","networkLinks","cameraViewUpdate","lastCameraView","newNetworkLinks","networkLink","doUpdate","recurseIgnoreEntities","newEntityCollection","processedHref","networkLinkEntity","entitiesCopy","entityToRemove","removeChildren","getNetworkLinkUpdateCallback","Visualizer","renderStateScratch","ComputeEngine","drawCommandScratch","clearCommandScratch","computeCommand","getViewportQuadVertexArray","ViewportQuadVS","createViewportQuadShader","createRenderState","PassState","ShaderCache","_shaders","_numberOfShaders","_shadersToRelease","destroyShader","cachedShader","derivedKeywords","keyword","numberOfShaders","replaceDerivedShaderProgram","derivedKeyword","cachedDerivedShader","derivedShaderProgram","derivedCachedShader","destroyReleasedShaderPrograms","shadersToRelease","TextureCache","_numberOfTextures","_texturesToRelease","numberOfTextures","destroyReleasedTextures","texturesToRelease","SunLight","intensity","UniformState","_viewport","_viewportCartesian4","_viewportDirty","_viewportOrthographicMatrix","_viewportTransformation","_view","_inverseView","_infiniteProjection","_entireFrustum","_currentFrustum","_frustumPlanes","_farDepthFromNearPlusOne","_log2FarDepthFromNearPlusOne","_oneOverLog2FarDepthFromNearPlusOne","_frameState","_temeToPseudoFixed","_view3DDirty","_view3D","_inverseView3DDirty","_inverseView3D","_inverseModelDirty","_inverseModel","_inverseTransposeModelDirty","_inverseTransposeModel","_viewRotation","_inverseViewRotation","_viewRotation3D","_inverseViewRotation3D","_inverseProjectionDirty","_inverseProjection","_modelViewDirty","_modelView","_modelView3DDirty","_modelView3D","_modelViewRelativeToEyeDirty","_modelViewRelativeToEye","_inverseModelViewDirty","_inverseModelView","_inverseModelView3DDirty","_inverseModelView3D","_viewProjectionDirty","_viewProjection","_inverseViewProjectionDirty","_inverseViewProjection","_modelViewProjectionDirty","_modelViewProjection","_inverseModelViewProjectionDirty","_inverseModelViewProjection","_modelViewProjectionRelativeToEyeDirty","_modelViewProjectionRelativeToEye","_modelViewInfiniteProjectionDirty","_modelViewInfiniteProjection","_normalDirty","_normal3DDirty","_normal3D","_inverseNormalDirty","_inverseNormal","_inverseNormal3DDirty","_inverseNormal3D","_encodedCameraPositionMCDirty","_encodedCameraPositionMC","_sunPositionWC","_sunPositionColumbusView","_sunDirectionWC","_sunDirectionEC","_moonDirectionEC","_lightDirectionWC","_lightDirectionEC","_lightColorHdr","_mapProjection","_cameraDirection","_cameraRight","_cameraUp","_frustum2DWidth","_eyeHeight","_eyeHeight2D","_pixelRatio","_orthographicIn3D","_brdfLut","_environmentMap","_specularEnvironmentMapsDimensions","_specularEnvironmentMapsMaximumLOD","_fogDensity","_invertClassificationColor","_imagerySplitPosition","_pixelSizePerMeter","_geometricToleranceOverMeter","_minimumDisableDepthTestDistance","vc","cleanViewport","updateView3D","updateInverseView3D","mvRte","cleanModelViewRelativeToEye","cleanNormal","cleanNormal3D","cleanEncodedCameraPositionMC","transformMatrix","sunCartographicScratch","updateCamera","setInverseView","inverseViewMatrix","rightWC","setCamera","updateFrustum","setInfiniteProjection","updatePass","EMPTY_ARRAY","defaultLight","sunCartographic","setSunAndMoonDirections","colorTexture","pixelSizePerMeter","cameraPositionMC","view2Dto3DPScratch","view2Dto3DRScratch","view2Dto3DUScratch","view2Dto3DDScratch","view2Dto3DCartographicScratch","view2Dto3DCartesian3Scratch","view2Dto3DMatrix4Scratch","up2D","frustum2DWidth","position3D","enuToFixed","view2Dto3D","throwOnError","glFunc","glFuncArguments","getError","errorToString","createErrorMessage","makeGetterSetter","logFunction","getExtension","Context","WebGLRenderingContext","allowTextureFilterAnisotropic","webglOptions","webgl","glContext","requestWebgl2","WebGL2RenderingContext","getWebGLStub","_originalGLContext","validateFramebuffer","validateShaderProgram","_throwOnWebGLError","_shaderCache","_textureCache","_stencilBits","getParameter","aliasedLineWidthRange","aliasedPointSizeRange","maximumViewportDimensions","highpFloat","getShaderPrecisionFormat","highpInt","_antialias","getContextAttributes","antialias","_standardDerivatives","_blendMinmax","_elementIndexUint","_fragDepth","_textureFloat","_textureHalfFloat","_textureFloatLinear","_textureHalfFloatLinear","_colorBufferFloat","_floatBlend","_colorBufferHalfFloat","_s3tc","_pvrtc","_etc1","glDrawElementsInstanced","glDrawArraysInstanced","glDrawBuffers","textureFilterAnisotropic","bindVertexArray","deleteVertexArray","drawElementsInstanced","drawArraysInstanced","vertexAttribDivisor","createVertexArrayOES","bindVertexArrayOES","deleteVertexArrayOES","drawElementsInstancedANGLE","drawArraysInstancedANGLE","vertexAttribDivisorANGLE","drawBuffersWEBGL","_vertexArrayObject","_instancedArrays","_drawBuffers","_clearColor","_clearDepth","_clearStencil","us","_defaultPassState","_defaultRenderState","_defaultCubeMap","_us","_currentRenderState","_currentPassState","_currentFramebuffer","_maxFrameTextureUnitIndex","_pickObjects","_nextPickColor","scratchBackBufferArray","defaultFramebufferMarker","applyRenderState","stencilBits","standardDerivatives","floatBlend","blendMinmax","throwOnWebGLError","wrapFunction","glWrapper","Function","wrapGL","defaultClearCommand","clearColor","clearDepth","clearStencil","beginDraw","drawElements","drawArrays","continueDraw","endFrame","readPixels","readState","pixels","viewportQuadAttributeLocations","PickId","pickObjects","viewportQuad_vertexArray","overrides","getObjectByPickColor","propertyValue","loadCubeMap","flipOptions","facePromises","RenderbufferFormat","renderbufferFormat","Renderbuffer","_renderbuffer","createRenderbuffer","bindRenderbuffer","renderbufferStorage","deleteRenderbuffer","DiscardMissingTileImagePolicy","missingImageUrl","pixelsToCheck","_pixelsToCheck","_missingImagePixels","_missingImageByteLength","_isReady","disableCheckIfAllPixelsAreTransparent","allAreTransparent","isReady","shouldDiscardImage","missingImagePixels","pixel","ImageryLayerFeatureInfo","imageryLayer","configureNameFromProperties","configureDescriptionFromProperties","ImageryProvider","defaultAlpha","defaultNightAlpha","defaultDayAlpha","defaultBrightness","defaultContrast","defaultHue","defaultSaturation","defaultGamma","defaultMinificationFilter","defaultMagnificationFilter","tileWidth","tileHeight","minimumLevel","tileDiscardPolicy","hasAlphaChannel","getTileCredits","requestImage","pickFeatures","loadImage","ArcGisMapServerImageryProvider","_tileDiscardPolicy","_tileWidth","_tileHeight","_useTiles","usePreCachedTilesIfAvailable","enablePickFeatures","fullExtent","extentMessage","buildImageResource","bboxSR","imageSR","usingPrecachedTiles","vertical","sr","projected","mapExtent","imageDisplay","featureInfo","AutoExposure","_colorTexture","_logDepthChanged","_useLogDepth","_framebuffers","_previousLuminance","_minMaxLuminance","minimumLuminance","maximumLuminance","destroyFramebuffers","autoexposure","framebuffers","destroyCommands","colorTextureDimensions","minMaxLuminance","previousLuminance","getShaderSource","lastTexture","createFramebuffers","emptyImage","AERIAL","AERIAL_WITH_LABELS","AERIAL_WITH_LABELS_ON_DEMAND","ROAD","ROAD_ON_DEMAND","CANVAS_DARK","CANVAS_LIGHT","CANVAS_GRAY","ORDNANCE_SURVEY","COLLINS_BART","DiscardEmptyTileImagePolicy","EMPTY_IMAGE","BingMapsImageryProvider","_tileProtocol","tileProtocol","_mapStyle","mapStyle","BingMapsStyle","_culture","culture","DiscardEmptyTilePolicy","_proxy","logoUrl","_imageUrlTemplate","_imageUrlSubdomains","metadataResource","incl","zoomMax","imageUrlSubdomains","imageUrl","attributionList","_attributionList","imageryProviders","attributionIndex","attributionLength","coverageAreas","areaIndex","areaLength","_metadataCache","included","zoomMin","getRectangleAttribution","subdomains","subdomainIndex","subdomain","_logoUrl","defaultDimensions","BoxEmitter","scratchHalfDim","emit","particle","halfDim","BrdfLutGenerator","generator","CameraFlightPath","scratchCart","createHeightFunction","startHeight","endHeight","optionAltitude","verticalDistance","horizontalDistance","getAltitude","adjustAngleForLERP","startAngle","endAngle","scratchStart","createUpdateCV","startPitch","startRoll","heightFunction","setView","scratchStartCart","scratchEndCart","createUpdate3D","optionFlyOverLongitude","optionFlyOverLongitudeWeight","optionPitchAdjustHeight","startCart","destCart","useLongFlight","hitLon","lonMin","lonMax","hitInside","din","useLongestFlight","useShortestFlight","pitchFunction","endPitch","pitchAdjustHeight","middleHeight","createPitchFunction","startLongitude","destLongitude","startLatitude","destLatitude","isolateUpdateFunction","createUpdate2D","zoom","incrementAmount","scratchDestination","emptyFlight","startObject","stopObject","wrapCallback","controller","enableInputs","createTween","convert","flyOverLongitude","flyOverLongitudeWeight","endTransform","screenSpaceCameraController","ROTATE","INFINITE_SCROLL","Camera","_transform","_invTransform","_actualTransform","_actualInvTransform","_transformChanged","_positionWC","_positionCartographic","_oldPositionWC","_lastMovedTimestamp","_direction","_directionWC","_up","_upWC","_rightWC","defaultMoveAmount","defaultLookAmount","defaultRotateAmount","defaultZoomAmount","constrainedAxis","maximumZoomFactor","_moveStart","_moveEnd","_changedPosition","_changedDirection","_changedFrustum","percentageChanged","_viewMatrix","_invViewMatrix","updateViewMatrix","_modeChanged","_maxCoord","_max2Dfrustum","rectangleCameraPosition3D","DEFAULT_VIEW_RECTANGLE","DEFAULT_VIEW_FACTOR","TRANSFORM_2D","TRANSFORM_2D_INVERSE","DEFAULT_OFFSET","canPreloadFlight","_currentFlight","_updateCameraChanged","updateCameraDeltas","dirPercentage","dirAngle","heightPercentage","areaPercentage","lastPosition","lastFrustum","areaRef","scratchCartesian4Origin","scratchCartesian4NewOrigin","scratchCartesian4NewXAxis","scratchCartesian4NewYAxis","scratchCartesian4NewZAxis","updateMembers","heightChanged","positionChanged","directionChanged","upChanged","rightChanged","transformChanged","convertTransformForColumbusView","newOrigin","newZAxis","newXAxis","newYAxis","convertTransformFor2D","positionENU","invUpMag","w0","getHeading","EPSILON3","getPitch","getRoll","scratchHPRMatrix1","scratchHPRMatrix2","inverseTransform","oldTransform","moveStart","moveEnd","clampMove2D","setTransformPosition","setTransformUp","setTransformDirection","scratchAdjustOrthographicFrustumMousePosition","scratchPickRay","scratchRayIntersection","scratchDepthIntersection","calculateOrthographicFrustumWidth","rayIntersection","depthIntersection","mousePosition","getPickRay","pickWorldCoordinates","pickPositionSupported","pickPositionWorldCoordinates","depthDistance","rayDistance","_adjustOrthographicFrustum","zooming","scratchSetViewCartesian","scratchSetViewTransform1","scratchSetViewTransform2","scratchSetViewQuaternion","scratchSetViewMatrix3","scratchSetViewCartographic","scratchToHPRDirection","scratchToHPRUp","scratchToHPRRight","directionUpToHeadingPitchRoll","invTransform","scratchSetViewOptions","scratchHpr","getRectangleCameraCoordinates","currentTransform","localTransform","rotQuat","rotMat","setView3D","mapMode2D","MapMode2D","setView2D","setViewCV","pitchScratch","rotatable2D","maxProjectedX","maxProjectedY","flyHome","completeMorph","maxRadii","worldToCameraCoordinates","worldToCameraCoordinatesPoint","worldToCameraCoordinatesVector","cameraToWorldCoordinates","cameraToWorldCoordinatesPoint","cameraToWorldCoordinatesVector","moveScratch","move","moveForward","zoom2D","moveBackward","moveUp","moveDown","moveRight","moveLeft","lookLeft","look","lookRight","lookUp","lookDown","lookScratchQuaternion","lookScratchMatrix","turnAngle","twistLeft","twistRight","rotateScratchQuaternion","rotateScratchMatrix","rotate","rotateDown","rotateVertical","rotateUp","rotateVertScratchP","rotateVertScratchA","rotateVertScratchTan","rotateVertScratchNegate","northParallel","southParallel","angleToAxis","rotateHorizontal","newTop","newBottom","maxBottom","maxRight","zoom3D","rotateRight","rotateLeft","zoomIn","zoomOut","getMagnitude","scratchLookAtMatrix4","scratchLookAtHeadingPitchRangeOffset","scratchLookAtHeadingPitchRangeQuaternion1","scratchLookAtHeadingPitchRangeQuaternion2","scratchHeadingPitchRangeMatrix3","offsetFromHeadingPitchRange","pitchQuat","headingQuat","cartesianOffset","viewRectangle3DEllipsoidGeodesic","viewRectangle3DCartographic1","viewRectangle3DCartographic2","viewRectangle3DNorthEast","viewRectangle3DSouthWest","viewRectangle3DNorthWest","viewRectangle3DSouthEast","viewRectangle3DNorthCenter","viewRectangle3DSouthCenter","viewRectangle3DCenter","viewRectangle3DEquator","defaultRF","computeD","upOrRight","tanThetaOrPhi","cameraRF","northCartographic","southCartographic","northEast","northCenter","southCenter","southWest","rightScalar","topScalar","tanPhi","equatorCartographic","equatorPosition","viewRectangleCVCartographic","viewRectangleCVNorthEast","viewRectangleCVSouthWest","viewRectangle2DCartographic","viewRectangle2DNorthEast","viewRectangle2DSouthWest","rectangleCameraPositionColumbusView","rectangleCameraPosition2D","pickEllipsoid3DRay","pickEllipsoid2DRay","pickEllipsoidCVRay","pickEllipsoid3D","pickMap2D","pickMapColumbusView","pickPerspCenter","pickPerspXDir","pickPerspYDir","xDir","yDir","getPickRayPerspective","getPickRayOrthographic","scratchProj","distanceToBoundingSphere","scratchPixelSize","posScratch","scratchCartesian3Subtract","createAnimationCV","distToC","dWidth","dHeight","mapWidth","mapHeight","interp","createAnimationTemplateCV","createCorrectPositionTween","scratchFlyToDestination","newOptions","cancelTween","completeFlight","setViewOptions","flightTween","tweenOptions","tweens","preloadFlightCamera","preloadFlightCullingVolume","adjustBoundingSphereOffset","minimumZoom","minimumZoomDistance","maximumZoom","maximumZoomDistance","distanceToBoundingSphere2D","distanceToBoundingSphere3D","scratchflyToBoundingSphereTransform","scratchflyToBoundingSphereDestination","scratchflyToBoundingSphereDirection","scratchflyToBoundingSphereUp","scratchflyToBoundingSphereRight","scratchFlyToBoundingSphereCart4","scratchFlyToBoundingSphereQuaternion","scratchFlyToBoundingSphereMatrix3","scene2D","rotateQuat","scratchCartesian3_1","scratchCartesian3_2","scratchCartesian3_3","scratchCartesian3_4","horizonPoints","scratchPickCartesian2","scratchRectCartesian","cartoArray","addToResult","computedHorizonQuad","successfulPickCount","eUnit","nUnit","qMagnitude","qUnit","wMagnitude","eastOffset","northOffset","computeHorizonQuad","lastLon","switchToPerspectiveFrustum","switchToOrthographicFrustum","frustumWidth","LEFT_DRAG","RIGHT_DRAG","MIDDLE_DRAG","PINCH","listenToPinch","aggregator","CameraEventType","_update","isDown","_isDown","eventStartPosition","_eventStartPosition","pressTime","_pressTime","releaseTime","_releaseTime","movement","_movement","_eventHandler","_buttonsDown","mouseMovement","pinchMovement","TwoPI","listenToWheel","arcLength","listenMouseButtonDownUp","lastMovement","_lastMovement","cloneMouseMovement","listenMouseMove","typeName","_currentMousePosition","CameraEventAggregator","modifierName","currentMousePosition","anyButtonDown","wheelMoved","isMoving","getMovement","getLastMovement","isButtonDown","getStartMousePosition","getButtonPressTime","getButtonReleaseTime","Cesium3DTileContent","Cesium3DTilePassState","ConditionsExpression","conditionsExpression","_conditionsExpression","_conditions","conditions","_runtimeConditions","runtimeConditions","statement","cond","condExpression","Statement","setRuntime","condition","shaderFunction","Cesium3DTileStyle","_labelColor","_labelOutlineColor","_labelOutlineWidth","_labelStyle","_labelText","_backgroundEnabled","_anchorLineEnabled","_anchorLineColor","_labelVerticalOrigin","_meta","_colorShaderFunction","_showShaderFunction","_pointSizeShaderFunction","_colorShaderFunctionReady","_showShaderFunctionReady","_pointSizeShaderFunctionReady","_colorShaderTranslucent","styleJson","meta","metaJson","setup","getExpression","tileStyle","getJsonFromExpression","CircleEmitter","computeFlyToLocationForRectangle","positionWithoutTerrain","_sampleTerrainMostDetailed","positionsOnTerrain","currentMax","defaultAngle","ConeEmitter","_angle","createTangentSpaceDebugPrimitive","templateRegex","tags","padWithZerosIfNecessary","_subdomains","reverseX","reverseY","reverseZ","westDegrees","computeDegrees","degreesScratch","southDegrees","eastDegrees","northDegrees","westProjected","computeProjected","projectedScratch","southProjected","eastProjected","northProjected","pickFeaturesTags","computeIJ","ijScratch","reverseI","reverseJ","longitudeDegrees","latitudeDegrees","longitudeProjected","computeLongitudeLatitudeProjected","longitudeLatitudeProjectedScratch","latitudeProjected","UrlTemplateImageryProvider","_urlSchemeZeroPadding","_pickFeaturesResource","_minimumLevel","_hasAlphaChannel","_tags","_pickFeaturesTags","urlSchemeZeroPadding","pickFeaturesUrl","customTags","allTags","allPickFeaturesTags","pickFeaturesResource","_getFeatureInfoFormats","getFeatureInfoFormats","degreesScratchComputed","projectedScratchComputed","formatIndex","doRequest","ijScratchComputed","longitudeLatitudeProjectedScratchComputed","buildPickFeaturesResource","handleResponse","paddingTemplate","paddingTemplateWidth","TileMapServiceImageryProvider","_tmsResource","_xmlResource","_metadataError","_metadataSuccess","_metadataFailure","confineRectangleToTilingScheme","calculateSafeMinimumDetailLevel","swTile","neTile","tilesets","tileFormatRegex","tileSetRegex","tileSetsRegex","bboxRegex","tilesetsList","xmlResource","nodeList","tileSetNodes","fileExtension","tilingSchemeName","swXY","neXY","flipXY","isGdal2tiles","templateResource","GoogleEarthEnterpriseMapsProvider","_channel","vars","is2d","trailingSlashRegex","defaultCredit","MapboxImageryProvider","mapId","_mapId","_accessTokenErrorCredit","templateUrl","_imageryProvider","_defaultCredit","SingleTileImageryProvider","success","failure","geoJsonToFeatureInfo","xmlToFeatureInfo","featureIndex","propertyElements","propertyIndex","propertyElement","hasAttribute","mapInfoXmlToFeatureInfo","featureInfoResponse","propertyAttributes","imageryLayerFeatureInfoFromDataAndProperties","featureInfoElements","featureInfoElementIndex","featureInfoElement","featureInfoChildren","childIndex","ELEMENT_NODE","esriXmlToFeatureInfo","featureMembers","featureMember","getGmlPropertiesRecursively","gmlToFeatureInfo","msGmlToFeatureInfo","xmlText","pre","unknownXmlToFeatureInfo","gmlNode","isSingleValue","emptyBodyRegex","wmsServiceExceptionReportRegex","titleRegex","textToFeatureInfo","GetFeatureInfoFormat","TimeDynamicImagery","requestImageFunction","reloadFunction","_tileCache","_tilesRequestedForInterval","_requestImageFunction","_reloadFunction","_currentIntervalIndex","_clockOnTick","getApproachingInterval","isAnimating","addToCache","tileCache","intervalTileCache","keyElements","getKeyElements","IMAGERY","currentInterval","getFromCache","checkApproachingInterval","tilesRequestedForInterval","approachingInterval","currentIntervalIndex","currentCache","tilesRequested","WebMapServiceImageryProvider","pickFeatureResource","DefaultParameters","GetFeatureInfoDefaultParameters","objectToLowercase","getFeatureInfoParameters","_reload","_timeDynamicImagery","pickFeatureParams","query_layers","info_format","_tileProvider","DefaultGetFeatureInfoFormats","dynamicIntervalData","tileProvider","timeDynamicImagery","service","defaultParameters","WebMapTileServiceImageryProvider","tileMatrixSetID","Style","TileMatrixSet","_useKvp","_layer","_tileMatrixSetID","_tileMatrixLabels","tileMatrixLabels","tileCount","tileMatrix","staticDimensions","tilematrix","tilerow","tilecol","tilematrixset","TileMatrix","TileRow","TileCol","createFactory","ImageryProviderMapping","ARCGIS_MAPSERVER","BING","GOOGLE_EARTH","MAPBOX","SINGLE_TILE","TMS","URL_TEMPLATE","WMS","WMTS","IonImageryProvider","_endpointCache","tileProviderError","innerCredits","createWorldImagery","IonWorldImageryStyle","createDelimiterElement","delimiter","delimiterElement","createCreditElement","elementWrapperTagName","wrapper","displayCredits","container","domIndex","creditIndex","delimiterDomIndex","existingDelimiter","replaceChild","existingElement","addStyle","selector","CreditDisplay","lightbox","lightboxCredits","hideLightbox","closeButton","onclick","creditList","cesiumCreditContainer","screenContainer","expandLink","showLightbox","lightboxHeight","border","appendCss","cesiumCredit","_delimiter","_screenContainer","_cesiumCreditContainer","_lastViewportHeight","_lastViewportWidth","_lightboxCredits","_creditList","_lightbox","_hideLightbox","_expandLink","_expanded","_defaultCredits","_cesiumCredit","_previousCesiumCredit","_currentCesiumCredit","_currentFrameCredits","screenCredits","getDefaultCredit","logo","getPath","_cesiumCreditInitialized","defaultCredits","existingCredit","removeDefaultCredit","marginTop","styleLightboxContainer","beginFrame","currentFrameCredits","previousCredit","currentCredit","swapCesiumCredit","DebugAppearance","perInstanceAttribute","glslDatatype","varyingName","_attributeName","_glslDatatype","DebugCameraPrimitive","_frustumSplits","_updateOnChange","updateOnChange","_outlinePrimitives","_planesPrimitives","scratchOrientation","scratchPerspective","scratchPerspectiveOffCenter","scratchOrthographic","scratchOrthographicOffCenter","scratchSplits","planesPrimitives","numFrustums","cameraFrustum","DebugModelMatrixPrimitive","DepthPlane","depthQuadScratch","depthQuad","computeDepthQuad","DerivedCommand","fragDepthRegex","discardRegex","createDepthOnlyDerivedCommand","depthOnlyCommand","shaderProgramId","writesDepthOrDiscards","usesLogDepth","getDepthOnlyShaderProgram","_depthOnlyRenderStateCache","depthOnlyState","getDepthOnlyRenderState","writeLogDepthRegex","vertexlogDepthRegex","extensionRegex","createLogDepthCommand","writesLogDepth","addExtension","logSource","getLogDepthShaderProgram","createPickDerivedCommand","pickCommand","newSources","getPickShaderProgram","pickRenderStateCache","pickState","getPickRenderState","createHdrCommand","getHdrShaderProgram","DeviceOrientationCameraController","_lastAlpha","_lastBeta","_lastGamma","_alpha","_beta","_gamma","_removeListener","scratchQuaternion1","scratchQuaternion2","bQuat","gQuat","aQuat","DirectionalLight","EllipsoidPrimitive","_oneOverEllipsoidRadiiSquared","onlySunLighting","_onlySunLighting","_depthTestEnabled","depthTestEnabled","_pickSP","_colorCommand","_pickCommand","u_radii","u_oneOverEllipsoidRadiiSquared","_pickUniforms","logDepthExtension","translucencyChanged","ellipsoidPrimitive_vertexArray","getVertexArray","boundingSphereDirty","materialChanged","lightingChanged","useLogDepthChanged","EllipsoidVS","EllipsoidFS","EllipsoidSurfaceAppearance","aboveGround","_aboveGround","Fog","screenSpaceErrorFactor","minimumBrightness","heightsTable","densityTable","tableStartDensity","tableEndDensity","tableLastIndex","startDensity","positionNormal","FrameRateMonitor","samplingWindow","defaultSettings","quietPeriod","warmupPeriod","minimumFrameRateDuringWarmup","minimumFrameRateAfterWarmup","_lowFrameRate","_nominalFrameRate","_frameTimes","_needsQuietPeriod","_quietPeriodEndTime","_warmupPeriodEndTime","_frameRateIsLow","_lastFramesPerSecond","_pauseCount","_preUpdateRemoveListener","preUpdate","monitor","beginningOfWindow","averageTimeBetweenFrames","maximumFrameTime","lowFrameRate","nominalFrameRate","_hiddenPropertyName","hidden","mozHidden","msHidden","webkitHidden","visibilityChangeEventName","visibilityChangeListener","unpause","_visibilityChangeRemoveListener","fromScene","_frameRateMonitor","lastFramesPerSecond","FrameState","shadowMaps","getMorphTime","cameraUnderground","offscreen","shadowState","shadowsEnabled","lightShadowMaps","nearPlane","farPlane","closestObjectSize","FrustumCommands","numPasses","GlobeSurfaceShader","numberOfDayTextures","clippingShaderState","GlobeSurfaceShaderSet","baseVertexShaderSource","baseFragmentShaderSource","_shadersByTexturesFlags","surfaceTile","applyBrightness","applyContrast","applyHue","applySaturation","applyGamma","applyAlpha","applyDayNightAlpha","applySplit","showReflectiveOcean","showOceanWaves","enableLighting","dynamicAtmosphereLighting","dynamicAtmosphereLightingFromSun","showGroundAtmosphere","perFragmentGroundAtmosphere","useWebMercatorProjection","enableFog","enableClippingPlanes","clippedByBoundaries","hasImageryLayerCutout","colorCorrect","highlightFillTile","colorToAlpha","showUndergroundColor","quantizationDefine","renderedMesh","cartographicLimitRectangleFlag","cartographicLimitRectangleDefine","imageryCutoutFlag","imageryCutoutDefine","currentClippingShaderState","surfaceShader","shadersByFlags","computeDayColor","positionMode","getPositionMode","get2DYPositionFraction","shadersByTexturesFlags","textureCount","TRANSITIONING","RECEIVED","TEXTURE_LOADED","INVALID","PLACEHOLDER","START","RECEIVING","TRANSFORMING","TRANSFORMED","GlobeSurfaceTile","imagery","waterMaskTexture","waterMaskTranslationAndScale","boundingVolumeSourceTile","tileBoundingRegion","pickBoundingSphere","positionCart","eligibleForUnloading","shouldRemoveTile","tileImagery","loadingImagery","ImageryState","scratchV0","scratchV1","scratchV2","minT","freeResources","imageryList","freeVertexArray","_freeVertexArray","wireframeVertexArray","imageryLayerCollection","QuadtreeTileLoadState","parentSurfaceTile","_createTileImagerySkeletons","prepareNewTile","processStateMachine","vertexArraysToDestroy","terrainOnly","sourceX","sourceY","sourceLevel","terrainDataPromise","_requestError","meshPromise","_createVertexArrayForMesh","waterMaskData","tile_waterMaskData","allWaterTexture","getContextWaterMaskData","waterMaskLength","textureSize","createWaterMaskTextureIfNeeded","sourceTile","_findAncestorTileWithTerrainData","_computeWaterMaskTranslationAndScale","processTerrainStateMachine","wasAlreadyRenderable","renderable","isTerrainDoneLoading","upsampledFromParent","isImageryDoneLoading","processImagery","callbacks","_loadedCallbacks","newCallbacks","layerId","skipLoading","isUpsampledOnly","isAnyTileLoaded","isDoneLoading","tileImageryCollection","thisTileDoneLoading","readyImagery","indexBuffers","fromSizeInBytes","sourceTileRectangle","Imagery","parentX","parentY","getImageryFromCache","textureWebMercator","createPlaceholder","addReference","releaseReference","removeImageryFromCache","needGeographicProjection","_requestImagery","_createTexture","needsReprojection","_reprojectTexture","TileImagery","textureCoordinateRectangle","useWebMercatorT","textureTranslationAndScale","_calculateTextureTranslationAndScale","closestAncestorThatNeedsLoading","ImageryLayer","nightAlpha","dayAlpha","brightness","DEFAULT_BRIGHTNESS","contrast","DEFAULT_CONTRAST","DEFAULT_HUE","DEFAULT_SATURATION","DEFAULT_GAMMA","splitDirection","defaultSplit","DEFAULT_SPLIT","DEFAULT_MINIFICATION_FILTER","DEFAULT_MAGNIFICATION_FILTER","_minimumTerrainLevel","minimumTerrainLevel","_maximumTerrainLevel","maximumTerrainLevel","_imageryCache","_skeletonPlaceholder","_layerIndex","_isBaseLayer","_requestImageError","_reprojectComputeCommands","cutoutRectangle","colorToAlphaThreshold","DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD","ImagerySplitDirection","isBaseLayer","imageryBoundsScratch","tileImageryBoundsScratch","clippedRectangleScratch","terrainRectangleScratch","getSamplerKey","getImageryCacheKey","getViewableRectangle","insertionPoint","imageryBounds","baseImageryRectangle","baseTerrainRectangle","latitudeClosestToEquator","imageryLevel","texelSpacing","latitudeFactor","tilingSchemeRectangle","twoToTheLevelPower","getLevelWithMaximumTexelSpacing","imageryTilingScheme","northwestTileCoordinates","southeastTileCoordinates","veryCloseX","veryCloseY","northwestTileRectangle","southeastTileRectangle","imageryTileXYToRectangle","terrainRectangle","imageryRectangle","clippedImageryRectangle","initialMinV","texCoordsRectangle","terrainWidth","terrainHeight","imagePromise","_createTextureWebGL","discardPolicy","_finalizeReprojectTexture","maximumSupportedAnisotropy","mipmapSamplerKey","mipmapSamplers","imageryLayerMipmapSamplers","mipmapSampler","nonMipmapSamplerKey","nonMipmapSamplers","imageryLayerNonMipmapSamplers","nonMipmapSampler","reproject","imageryLayer_reproject","reprojectAttributeIndices","float32ArrayScratch","outputIndex","webMercatorTIndex","mercatorFraction","reprojectToGeographic","queueReprojectionCommands","computeCommands","cancelReprojections","u_textureDimensions","u_texture","TileSelectionResult","CULLED","RENDERED","REFINED","RENDERED_AND_KICKED","REFINED_AND_KICKED","CULLED_BUT_NEEDED","wasKicked","originalResult","kick","TerrainFillMesh","frameLastUpdated","westMeshes","westTiles","southMeshes","southTiles","eastMeshes","eastTiles","northMeshes","northTiles","southwestMesh","southwestTile","southeastMesh","southeastTile","northwestMesh","northwestTile","northeastMesh","northeastTile","changedThisFrame","visitedFrame","enqueuedFrame","createFillMesh","traversalQueueScratch","visitRenderedTiles","startTile","currentFrameNumber","tileEdge","downOnly","traversalQueue","_lastSelectionResultFrame","_lastSelectionResult","northwestChild","northeastChild","southwestChild","southeastChild","destinationTile","destinationSurfaceTile","sourceMesh","edgeMeshes","edgeTiles","existingTile","existingRectangle","destinationFill","sourceFill","propagateEdge","updateFillTiles","renderedTiles","quadtree","_quadtree","levelZeroTiles","_levelZeroTiles","lastSelectionFrameNumber","_lastSelectionFrameNumber","renderedTile","tileToWest","findTileToWest","tileToSouth","findTileToSouth","tileToEast","findTileToEast","tileToNorth","findTileToNorth","tileToNorthwest","tileToSouthwest","tileToNortheast","tileToSoutheast","centerCartographicScratch","cartesianScratch","octEncodedNormalScratch","uvScratch2","uvScratch","HeightAndNormal","encodedNormal","fillMissingCorner","adjacentCorner1","adjacentCorner2","getVertexWithHeightAtCorner","heightRangeScratch","swVertexScratch","seVertexScratch","nwVertexScratch","neVertexScratch","heightmapBuffer","_imageryLayers","getCorner","swCorner","seCorner","neCorner","minCutThroughRadius","maxTileWidth","maxVertexCount","heightRange","northwestIndex","southwestIndex","addEdge","addVertexWithComputedPosition","southeastIndex","northeastIndex","centerWebMercatorT","centerEncodedNormal","indexDataBytes","indexOut","ellipsoidalOccluder","_occluders","cornerPositions","cornerPositionsScratch","oldTexture","waterSourceTile","sourceRectangleScratch","transformTextureCoordinates","targetTile","targetRectangle","sourceWidth","umin","umax","sourceHeight","vmin","vmax","encodedNormalScratch","getVertexFromTileAtCorner","sourceEncoding","sourceVertices","encodedNormalScratch2","cartesianScratch2","terrainFillMesh","cornerTile","cornerMesh","previousEdgeTiles","previousEdgeMeshes","nextEdgeTiles","nextEdgeMeshes","getCornerFromEdge","meshIsUsable","getClosestHeightToCorner","previousMeshes","previousTiles","previousEdge","nextMeshes","nextTiles","nextEdge","height1","getNearestHeightOnEdge","height2","addEdgeMesh","edgeTile","edgeMesh","lastU","lastV","compareU","targetStride","uOrV","nearlyEdgeU","nearlyEdgeV","isNext","meshStart","meshEnd","meshStep","meshIndex","edgeVertices","increasing","vertexIndexIndex","targetUv","textureCoordinate","interpolateU","previousUv","nextUv","encodedNormal1","encodedNormal2","normal1","normal2","getInterpolatedVertexAtCorner","GlobeSurfaceTileProvider","imageryLayers","surfaceShaderSet","lightingFadeOutDistance","lightingFadeInDistance","oceanNormalMap","zoomedOutOceanSpecularIntensity","fillHighlightColor","hueShift","saturationShift","brightnessShift","showSkirts","undergroundColor","undergroundColorAlphaByDistance","_materialUniformMap","_terrainProvider","_surfaceShaderSet","_blendRenderState","_disableCullingRenderState","_disableCullingBlendRenderState","layerAdded","_onLayerAdded","layerRemoved","_onLayerRemoved","layerMoved","_onLayerMoved","layerShownOrHidden","_onLayerShownOrHidden","_imageryLayersUpdatedEvent","_layerOrderChanged","_tilesToRenderByTextureCount","_usedDrawCommands","_vertexArraysToDestroy","_debug","wireframe","boundingSphereTile","_baseColor","_firstPassInitialColor","baseColor","cartographicLimitRectangle","_hasLoadedTilesThisFrame","_hasFillTilesThisFrame","sortTileImageryByLayerIndex","aImagery","bImagery","pushCommand","isBlendCommand","pushDerivedCommands","imageryLayersUpdatedEvent","invalidateAllTiles","forEachLoadedTile","updateCredits","beginUpdate","tilesToRenderByTextureCount","endUpdate","_tilesToRender","textureCountIndex","textureCountLength","tilesToRender","tileIndex","tileLength","addDrawCommandsForTile","updateForPick","terrainStateBefore","computeTileVisibility","occluders","rectangleIntersectionScratch","splitCartographicLimitRectangleScratch","clipRectangleAntimeridian","splitRectangle","isUndergroundVisible","computeDistanceToTile","undergroundVisible","clippedCartographicLimitRectangle","areaLimitIntersection","planeIntersection","ortho3D","canRefine","readyImageryScratch","canRenderTraversalStack","canRenderWithoutLosingDetail","terrainReady","initialImageryState","layerIndex","lastFrame","descendant","lastFrameSelectionResult","descendantSurface","descendantImagery","descendantTileImagery","descendantLoadingImagery","descendantIsReady","descendantLayerIndex","tileDirectionScratch","computeTileLoadPriority","cameraDirection","tileDirection","modifiedModelViewProjectionScratch","tileRectangleScratch","localizedCartographicLimitRectangleScratch","localizedTranslucencyRectangleScratch","centerEyeScratch","southwestScratch","northeastScratch","showTileThisFrame","readyTextureCount","tileSet","debug","tilesRendered","texturesRendered","heightSource","ancestorSurfaceTile","ancestorMesh","ancestorTerrainData","updateTileBoundingRegion","tileImageryUpdatedEvent","tileImageriesToFree","getTileReadyCallback","numDestroyed","getDebugOrientedBoundingBox","getDebugBoundingSphere","debugDestroyPrimitive","createTileUniformMap","globeSurfaceTileProvider","u_initialColor","initialColor","u_fillHighlightColor","u_zoomedOutOceanSpecularIntensity","u_oceanNormalMap","u_lightingFadeDistance","lightingFadeDistance","u_nightFadeDistance","nightFadeDistance","u_center3D","center3D","u_tileRectangle","centerEye","u_dayTextures","dayTextures","u_dayTextureTranslationAndScale","dayTextureTranslationAndScale","u_dayTextureTexCoordsRectangle","dayTextureTexCoordsRectangle","u_dayTextureUseWebMercatorT","dayTextureUseWebMercatorT","u_dayTextureAlpha","dayTextureAlpha","u_dayTextureNightAlpha","dayTextureNightAlpha","u_dayTextureDayAlpha","dayTextureDayAlpha","u_dayTextureBrightness","dayTextureBrightness","u_dayTextureContrast","dayTextureContrast","u_dayTextureHue","dayTextureHue","u_dayTextureSaturation","dayTextureSaturation","u_dayTextureOneOverGamma","dayTextureOneOverGamma","u_dayIntensity","dayIntensity","u_southAndNorthLatitude","southAndNorthLatitude","u_southMercatorYAndOneOverHeight","southMercatorYAndOneOverHeight","u_waterMask","u_waterMaskTranslationAndScale","u_minMaxHeight","minMaxHeight","u_scaleAndBias","scaleAndBias","u_dayTextureSplit","dayTextureSplit","u_dayTextureCutoutRectangles","dayTextureCutoutRectangles","u_cartographicLimitRectangle","localizedCartographicLimitRectangle","clippingPlanesEdgeColor","clippingPlanesEdgeWidth","u_minimumBrightness","u_hsbShift","hsbShift","u_colorsToAlpha","colorsToAlpha","u_frontFaceAlphaByDistance","frontFaceAlphaByDistance","u_backFaceAlphaByDistance","backFaceAlphaByDistance","u_translucencyRectangle","localizedTranslucencyRectangle","u_undergroundColor","u_undergroundColorAlphaByDistance","modifiedModelView","createWireframeVertexArrayIfNecessary","terrainMesh","wireframeIndices","wireframeIndexBuffer","createWireframeVertexArray","previousVolume","instanceOBB","instanceSphere","createDebugPrimitive","otherPassesInitialColor","surfaceShaderSetOptionsScratch","defaultUndergroundColor","defaultundergroundColorAlphaByDistance","tileCredits","tileCreditIndex","tileCreditLength","maxTextures","translucencyRectangle","nightFadeOutDistance","numberOfTextureUniforms","southLatitude","northLatitude","widthEpsilon","heightEpsilon","surfaceShaderSetOptions","imageryIndex","imageryLen","firstPassRenderState","otherPassesRenderState","drawCommandsLength","uniformMapProperties","nightFadeInDistance","frontFaceAlphaByDistanceFinal","backFaceAlphaByDistanceFinal","clippedTranslucencyRectangle","cartographicTileRectangle","inverseTileWidth","inverseTileHeight","applyFog","applyCutout","applyColorToAlpha","dayTextureCutoutRectangle","hasColorToAlpha","creditLength","clippingPlanesEnabled","updateDerivedCommands","GlobeTranslucency","_frontFaceAlpha","_frontFaceAlphaByDistance","_backFaceAlpha","_backFaceAlphaByDistance","frontFaceAlpha","backFaceAlpha","ImageryLayerCollection","getLayerIndex","swapLayers","addImageryProvider","applicableRectangleScratch","pickImageryLayerFeatures","pickedPosition","pickedTile","pickedLocation","textureIndex","imageryTiles","terrainImagery","applicableRectangle","layersShownOrHidden","QuadtreeOccluders","QuadtreeTile","_x","_y","_level","_southwestChild","_southeastChild","_northwestChild","_northeastChild","replacementPrevious","replacementNext","_loadPriority","_frameUpdated","freeTile","createLevelZeroTiles","_updateCustomData","customData","parentCustomData","needsLoading","findLevelZeroTile","westOfParent","eastOfParent","southOfParent","northOfParent","TileReplacementQueue","_lastBeforeStartOfFrame","tileReplacementQueue","markStartOfRenderFrame","maximumTiles","tileToTrim","keepTrimming","markTileRendered","comparisonPoint","QuadtreePrimitive","enableDebugOutput","maxDepthVisited","tilesVisited","tilesCulled","tilesWaitingForChildren","lastMaxDepth","lastMaxDepthVisited","lastTilesVisited","lastTilesCulled","lastTilesRendered","lastTilesWaitingForChildren","suspendLodUpdate","_tileLoadQueueHigh","_tileLoadQueueMedium","_tileLoadQueueLow","_tileReplacementQueue","_loadQueueTimeSlice","_tilesInvalidated","_addHeightCallbacks","_removeHeightCallbacks","_tileToUpdateHeights","_lastTileIndex","_updateHeightsTimeSlice","_cameraPositionCartographic","_cameraReferenceFrameOriginCartographic","tileCacheSize","loadingDescendantLimit","preloadAncestors","preloadSiblings","_tileLoadProgressEvent","_lastTileLoadQueueLength","clearTileLoadQueue","tileLoadProgressEvent","tileFunction","forEachRenderedTile","positionOnEllipsoidSurface","addedCallbacks","removeFunc","replacementQueue","customDataLength","numberOfRootTiles","rootTraversalDetails","TraversalDetails","compareDistanceToPoint","customDataAdded","customDataRemoved","cameraFrameOrigin","cameraOriginScratch","visitIfVisible","queueTileLoad","selectTilesForRendering","createRenderCommandsForSelectedTiles","tileLoadQueueHigh","tileLoadQueueMedium","tileLoadQueueLow","didSomeLoading","processSinglePriorityLoadQueue","processTileLoadQueue","tryNextFrame","scratchArray","tilesToUpdateHeights","timeSlice","timeSliceMax","scratchRay","rayOrigin","vectorToMinimumPoint","tileDataAvailable","selectionResult","updateHeights","currentLoadQueueLength","updateTileLoadProgress","alon","alat","blon","blat","allAreRenderable","anyWereRenderedLastFrame","notYetRenderableCount","TraversalQuadDetails","traversalQuadsByLevel","ancestorMeetsSse","traversalDetails","meetsSse","maxGeometricError","screenSpaceError2D","oneRenderedLastFrame","twoCulledOrNotVisited","threeCompletelyLoaded","addTileToRenderList","firstRenderedDescendantIndex","loadIndexLow","loadIndexMedium","loadIndexHigh","tilesToUpdateHeightsIndex","quadDetails","southwestDetails","southeastDetails","northwestDetails","northeastDetails","visitVisibleChildrenNearToFar","queuedForLoad","renderList","workTile","KICKED","wasRenderedLastFrame","containsNeededPosition","sortByLoadPriority","loadQueue","Globe","_imageryLayerCollection","_terrainProviderChanged","_undergroundColor","_undergroundColorAlphaByDistance","_translucency","makeShadersDirty","_oceanNormalMapResourceDirty","_oceanNormalMapResource","showWaterEffect","atmosphereHueShift","atmosphereSaturationShift","atmosphereBrightnessShift","_oceanNormalMap","_zoomedOutOceanSpecularIntensity","requireNormals","fragmentSources","GroundAtmosphere","oceanNormalMapUrl","scratchSphereIntersectionResult","sphereIntersections","boundingSphereIntersection","scratchGetHeightCartesian","scratchGetHeightIntersection","scratchGetHeightCartographic","scratchGetHeightRay","tileIfContainsCartographic","tileWithMesh","oceanNormalMapResource","GlobeDepth","_globeColorTexture","_primitiveColorTexture","_globeDepthTexture","_tempGlobeDepthTexture","_tempCopyDepthTexture","_globeColorFramebuffer","_primitiveColorFramebuffer","_copyDepthFramebuffer","_tempCopyDepthFramebuffer","_updateDepthFramebuffer","_clearGlobeColorCommand","_clearPrimitiveColorCommand","_copyColorCommand","_copyDepthCommand","_tempCopyDepthCommand","_updateDepthCommand","_mergeColorCommand","_rsBlend","_rsUpdate","_useScissorTest","_scissorRectangle","_useHdr","_clearGlobeDepth","_debugGlobeDepthViewportCommand","destroyTextures","globeDepth","destroyUpdateDepthResources","destroyPrimitiveFramebuffer","updateFramebuffers","hdr","clearGlobeDepth","textureChanged","createPrimitiveFramebuffer","updateCopyCommands","useScissorTest","updateScissor","PassThroughDepth","u_depthTexture","PassThrough","primitiveFramebuffer","executeDebugGlobeDepth","executeCopyDepth","executeUpdateDepth","depthTextureToCopy","createUpdateDepthResources","executeCopyColor","executeMergeColor","GlobeTranslucencyFramebuffer","_packedDepthTexture","_packedDepthFramebuffer","_packedDepthCommand","destroyResources","globeTranslucency","updateResources","classificationTexture","classificationFramebuffer","updateAndClear","clearClassification","packDepth","DerivedCommandType","derivedCommandsMaximumLength","DerivedCommandNames","GlobeTranslucencyState","_frontFaceTranslucent","_backFaceTranslucent","_requiresManualDepthTest","_sunVisibleThroughGlobe","_environmentVisible","_useDepthPlane","_numberOfTextureUniforms","_globeTranslucencyFramebuffer","_derivedCommandKey","_derivedCommandsDirty","_derivedCommandPacks","_derivedCommandTypes","_derivedBlendCommandTypes","_derivedPickCommandTypes","_derivedCommandTypesToUpdate","_derivedCommandsLength","_derivedBlendCommandsLength","_derivedPickCommandsLength","_derivedCommandsToUpdateLength","updateAlphaByDistance","alphaByDistance","isFaceTranslucent","translucencyEnabled","getDerivedCommandTypes","isPickCommand","types","frontTranslucent","backTranslucent","requiresManualDepthTest","translucentFrontFaceCommandType","translucentBackFaceCommandType","removeDefine","defineToRemove","hasDefine","getOpaqueFrontFaceShaderProgram","getOpaqueBackFaceShaderProgram","getTranslucentShaderProgram","getTranslucentBackFaceShaderProgram","getTranslucentFrontFaceManualDepthTestShaderProgram","getTranslucentBackFaceManualDepthTestShaderProgram","shaderProgramDirty","getShaderProgramFunction","cacheName","getOpaqueFrontFaceRenderState","getOpaqueBackFaceRenderState","getDepthOnlyFrontFaceRenderState","getDepthOnlyBackFaceRenderState","getDepthOnlyFrontAndBackFaceRenderState","getTranslucentFrontFaceRenderState","getTranslucentBackFaceRenderState","getPickFrontFaceRenderState","getPickBackFaceRenderState","getDerivedRenderState","renderStateDirty","getRenderStateFunction","cachedRenderState","getTranslucencyUniformMap","u_classificationTexture","getDerivedUniformMap","derivedUniformMap","uniformMapDirty","getDerivedUniformMapFunction","DerivedCommandPack","getUniformMapFunction","sunVisibleThroughGlobe","environmentVisible","useDepthPlane","isSunVisibleThroughGlobe","isEnvironmentVisible","getNumberOfTextureUniforms","derivedCommandKey","derivedCommandsToUpdateLength","derivedCommandsDirty","gatherDerivedCommandRequirements","derivedCommandNames","derivedCommandPacks","executeCommandsMatchingType","executeCommandFunction","executeCommands","derivedCommandTypes","derivedCommandsLength","derivedCommandsObject","uniformMapDirtyFrame","shaderProgramDirtyFrame","renderStateDirtyFrame","renderStateId","derivedCommandPack","derivedCommandType","derivedCommandName","derivedUniformMapDirtyFrame","derivedShaderProgramDirtyFrame","derivedRenderStateDirtyFrame","derivedUniformMapDirty","derivedShaderProgramDirty","derivedRenderStateDirty","opaqueTypes","depthOnlyTypes","executeGlobeCommands","frustumCommands","globeTranslucencyFramebuffer","globeCommands","globeCommandsLength","executeGlobeClassificationCommands","classificationCommands","classificationCommandsLength","originalGlobeDepthTexture","originalFramebuffer","packedDepthTexture","GoogleEarthEnterpriseDiscardPolicy","GoogleEarthEnterpriseImageryProvider","invalidImage","metadataRequest","getImageType","protobuf","uint32","imageType","imageData","alphaType","imageAlpha","copyrightIds","end2","skipType","decodeEarthImageryPacket","defaultGlowColor","GridImageryProvider","_cells","cells","_glowColor","glowColor","_glowWidth","glowWidth","_canvasSize","canvasSize","_createGridCanvas","_drawGrid","maxPixel","cssBackgroundColor","cssGlowColor","strokeRect","InvertClassification","previousFramebuffer","_previousFramebuffer","_classifiedTexture","_fbo","_fboClassified","_rsUnclassified","_rsClassified","_unclassifiedCommand","_classifiedCommand","_translucentCommand","_clearColorCommand","classifiedTexture","unclassifiedCommand","isTranslucencySupported","rsUnclassified","rsClassified","rsDefault","previousFramebufferChanged","_rsDefault","unclassifiedFSSource","classifiedFSSource","executeClassified","executeUnclassified","JobTypeBudget","_total","usedThisFrame","stolenFromMeThisFrame","starvedThisFrame","starvedLastFrame","JobScheduler","budgets","jobBudgets","totalBudget","executedThisFrame","_totalBudget","_totalUsedThisFrame","_budgets","_executedThisFrame","disableThisFrame","resetBudgets","budget","job","jobType","stolenBudget","progressThisFrame","Light","MapboxStyleImageryProvider","_styleId","tilesize","_tilesize","username","_username","scaleFactor","Moon","textureUrl","_ellipsoidPrimitive","_axes","translationScratch","ellipsoidPrimitive","NeverTileDiscardPolicy","OIT","_translucentMultipassSupport","_translucentMRTSupport","extensionsSupported","_opaqueFBO","_opaqueTexture","_accumulationTexture","_translucentFBO","_alphaFBO","_adjustTranslucentFBO","_adjustAlphaFBO","_opaqueClearCommand","_translucentMRTClearCommand","_translucentMultipassClearCommand","_alphaClearCommand","_translucentRenderStateCache","_alphaRenderStateCache","_compositeCommand","_adjustTranslucentCommand","_adjustAlphaCommand","_useHDR","oit","_revealageTexture","useHDR","accumulationTexture","updateTextures","completeFBO","supported","translucentComplete","alphaComplete","adjustTranslucentComplete","adjustAlphaComplete","u_opaque","u_accumulation","u_revealage","AdjustTranslucentFS","u_bgColor","translucentMRTBlend","translucentColorBlend","translucentAlphaBlend","translucentBlending","translucentState","createDerivedCommands","translucentShader","translucentRenderState","colorShader","alphaShader","alphaRenderState","getTranslucentMRTShaderProgram","alphaCommand","getTranslucentColorShaderProgram","getTranslucentColorRenderState","getTranslucentAlphaShaderProgram","getTranslucentAlphaRenderState","executeFunction","useHdr","_hdr","lightShadowsEnabled","debugFramebuffer","logDepth","executeTranslucentCommandsSortedMRT","executeTranslucentCommandsSortedMultipass","OpenStreetMapImageryProvider","defaultSize","Particle","mass","life","startColor","endColor","startScale","endScale","_age","_normalizedAge","age","normalizedAge","deltaScratch","dt","particleUpdateFunction","ParticleBurst","_complete","ParticleEmitter","defaultImageSize","ParticleSystem","updateCallback","emitter","_emitter","_bursts","bursts","_emitterModelMatrix","emitterModelMatrix","_matrixDirty","_combinedMatrix","_startColor","_endColor","_startScale","_endScale","_emissionRate","emissionRate","_minimumSpeed","speed","minimumSpeed","_maximumSpeed","maximumSpeed","_minimumParticleLife","particleLife","minimumParticleLife","_maximumParticleLife","maximumParticleLife","_minimumMass","minimumMass","_maximumMass","maximumMass","_minimumImageSize","minimumImageSize","_maximumImageSize","maximumImageSize","_lifetime","lifetime","_particles","_particlePool","_carryOver","_isComplete","_updateParticlePool","_particleEstimate","getOrCreateParticle","system","addParticleToPool","updateBillboard","addParticle","isComplete","rotatedVelocityScratch","burstAmount","particleEstimate","particles","particlePool","numToAdd","updateParticlePool","numToEmit","burst","calculateNumberToEmit","combinedMatrix","burstLength","numParticles","numInPool","estimate","freeParticlePool","getElement","foundElement","getElementById","PerformanceDisplay","_container","fpsElement","_fpsText","msElement","_msText","_lastFpsSampleTime","_lastMsSampleTime","_fpsFrameCount","_msFrameCount","_throttled","throttledElement","_throttledText","throttled","renderedThisFrame","updateDisplay","fpsElapsedTime","fps","msElapsedTime","ms","PickDepth","_textureToCopy","_debugPickDepthViewportCommand","pickDepth","executeDebugPickDepth","scratchPackedDepth","packedDepthScale","getDepth","packedDepth","PickDepthFramebuffer","_passState","PickFramebuffer","_fb","screenSpaceRectangle","SceneFramebuffer","_idTexture","_idFramebuffer","_idClearColor","_depthStencilIdTexture","_depthStencilIdRenderbuffer","getFramebuffer","getIdFramebuffer","ShadowMapShader","getShadowCastShaderKeyword","isPointLight","isTerrain","usesDepthTexture","isOpaque","createShadowCastVertexShader","positionVaryingName","hasPositionVarying","createShadowCastFragmentShader","getShadowReceiveShaderKeyword","shadowMap","hasTerrainNormal","_usesDepthTexture","_polygonOffsetSupported","_isPointLight","_isSpotLight","_numberOfCascades","debugCascadeColors","softShadows","createShadowReceiveVertexShader","createShadowReceiveFragmentShader","normalVaryingName","hasNormalVarying","polygonOffsetSupported","isSpotLight","hasCascades","bias","_pointBias","_terrainBias","_primitiveBias","normalShadingSmooth","normalOffset","ShadowMap","lightCamera","numberOfCascades","_softShadows","_normalOffset","fromLightSource","darkness","_darkness","_outOfView","_outOfViewPrevious","_needsUpdate","numberOfPasses","polygonOffsetFactor","polygonOffsetUnits","normalOffsetScale","depthBias","_depthAttachment","_colorAttachment","_shadowMapMatrix","_shadowMapTexture","_lightPositionEC","_lightCamera","_shadowMapCamera","ShadowMapCamera","_shadowMapCullingVolume","_sceneCamera","_pointLightRadius","pointLightRadius","_cascadesEnabled","cascadesEnabled","_fitNearFar","_maximumCascadeDistances","_textureSize","_cascadeSplits","_cascadeMatrices","_cascadeDistances","_passes","ShadowPass","debugShow","_debugFreezeFrame","_debugCascadeColors","_debugLightFrustum","_debugCameraFrustum","_debugCascadeFrustums","_debugShadowViewCommand","_primitiveRenderState","_terrainRenderState","_pointRenderState","_clearPassState","textureOffsets","createFramebufferCube","createFramebufferDepth","createFramebufferColor","updateFramebuffer","checkFramebuffer","clearFramebuffer","shadowPass","MAXIMUM_DISTANCE","debugCreateRenderStates","faceViewport","biasX","biasY","shadowMapCullingVolume","updateDebugShadowViewCommand","shadowMap_texture","shadowMap_textureCube","createDebugShadowViewCommand","debugOutlineColors","enterFreezeFrame","createDebugPointLight","viewProjectionMatrix","scaleBiasMatrix","getViewProjection","scratchFrustum","scratchCascadeDistances","scratchLightView","scratchUp","directions","ups","rights","updateCameras","sceneCamera","shadowMapCamera","lightDirection","darknessAmount","frustumRadius","frustumCenter","checkVisibility","computeOmnidirectional","lightDir","lightUp","lightRight","lightPosition","lightView","cameraToLight","fitShadowMapToScene","cameraNear","cameraFar","clampCascadeDistances","cascadeDistances","splits","logScale","shadowFrustum","cascadeSubFrustum","shadowViewProjection","shadowMapMatrix","cascadeCamera","cascadeMatrix","computeCascades","scratchTexelStepSize","combineUniforms","mapUniforms","shadowMap_matrix","shadowMap_cascadeSplits","shadowMap_cascadeMatrices","shadowMap_lightDirectionEC","shadowMap_lightPositionEC","shadowMap_cascadeDistances","shadowMap_texelSizeDepthBiasAndNormalShadingSmooth","texelStepSize","combinedUniforms1","shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness","combinedUniforms2","createCastDerivedCommand","shadowsDirty","oldShaderId","castShader","castRenderState","castUniformMap","castVS","castFS","createReceiveDerivedCommand","lightShadowMapsEnabled","receiveShader","receiveUniformMap","receiveCommand","castShadowsDirty","receiveShaderCastShadows","shaderDirty","receiveShaderProgramId","receiveVS","receiveFS","castCommands","castShaderProgramId","shadowMapLength","CommandExtent","View","_useOIT","_cameraClone","_cameraStartFired","_cameraMovedTime","pickFramebuffer","pickDepthFramebuffer","sceneFramebuffer","pickDepths","debugGlobeDepths","frustumCommandsList","debugFrustumStatistics","_commandExtents","scratchPosition0","scratchPosition1","cameraEqual","camera0","camera1","maxComponent","insertIntoBin","commandNear","commandFar","debugShowFrustums","curNear","cf","commandsInFrustums","totalCommands","checkForCameraUpdates","cameraClone","cameraEventWaitTime","scratchCullingVolume","scratchNearFarInterval","createPotentiallyVisibleSet","computeList","_computeCommandList","overlayList","_overlayCommandList","numberOfFrustums","commandExtents","commandExtentCapacity","commandExtentCount","shadowNear","shadowFar","shadowClosestObjectSize","ce","nearFarInterval","farToNearRatio","logarithmicDepthFarToNearRatio","is2D","nearToFarDistance2D","curFar","updateFrustums","mostDetailedPreloadTilesetPassState","mostDetailedPickTilesetPassState","pickTilesetPassState","Picking","_mostDetailedRayPicks","_pickPositionCache","_pickPositionCacheDirty","pickOffscreenViewport","pickOffscreenCamera","_pickOffscreenView","getPickDepth","scratchOrthoPickingFrustum","scratchOrthoOrigin","scratchOrthoDirection","scratchOrthoPixelSize","scratchOrthoPickVolumeMatrix4","scratchPerspPickingFrustum","scratchPerspPixelSize","getPickCullingVolume","ortho","getPickOrthographicCullingVolume","pickWidth","pickHeight","offCenter","getPickPerspectiveCullingVolume","scratchRectangleWidth","scratchRectangleHeight","scratchColorZero","updateFrameState","updateEnvironment","updateAndExecuteCommands","resolveFramebuffers","scratchPerspectiveFrustum","scratchPerspectiveOffCenterFrustum","scratchOrthographicFrustum","scratchOrthographicOffCenterFrustum","useDepthPicking","pickTranslucentDepth","environmentState","clearPasses","renderTranslucentDepthForPick","height2D","renderedFrustum","opaqueFrustumNearOffset","scratchPickPositionCartographic","drillPick","pickCallback","pickedPrimitives","pickedAttributes","pickedFeatures","pickedResult","exclude","hasShowAttribute","pickPosition","MostDetailedRayPick","updateOffscreenCameraFromRay","orthogonalAxis","updateMostDetailedRayPick","rayPick","tilesetsLength","launchMostDetailedRayPick","objectsToExclude","getTilesets","isExcluded","getRayIntersections","requirePosition","mostDetailed","getRayIntersection","pickFromRay","drillPickFromRay","deferPromiseUntilPostRender","removeCallback","requestRender","updateMostDetailedRayPicks","rayPicks","pickFromRayMostDetailed","drillPickFromRayMostDetailed","scratchSurfacePosition","scratchSurfaceNormal","scratchSurfaceRay","getRayForSampleHeight","surfaceRay","getRayForClampToHeight","getHeightFromCartesian","sampleHeightMostDetailed","pickResult","clampToHeightMostDetailed","sampleHeight","sampleHeightSupported","clampToHeight","clampToHeightSupported","clampedCartesians","PostProcessStageSampleMode","PostProcessStage","textureScale","_fragmentShader","_textureScale","_forcePowerOfTwo","forcePowerOfTwo","_sampleMode","sampleMode","_actualUniforms","_dirtyUniforms","_texturesToCreate","_texturePromise","scissorRectangle","_selectedIdTexture","_selected","_selectedShadow","_parentSelected","_parentSelectedShadow","_combinedSelected","_combinedSelectedShadow","_selectedLength","_parentSelectedLength","_selectedDirty","parentSelected","depthTextureRegex","getUniformValueGetterAndSetter","actualUniforms","actualValue","getStageByName","getUniformMapDimensionsFunction","createLoadImageFunction","createStageOutputTextureFunction","getOutputTexture","releaseResources","_isSupported","parentLength","isSelectedTextureDirty","textureLength","pickIdsLength","createSelectedTexture","newUniforms","depthTextureDimensions","czm_idTexture","czm_selectedIdTexture","czm_selectedIdTextureStep","textureToCreate","dirtyUniforms","stageNameUrlOrImage","stageWithName","updateUniformTextures","createDrawCommand","createSampler","idTexture","PostProcessStageComposite","_stages","_inputPreviousStageTexture","inputPreviousStageTexture","PostProcessStageLibrary","createBlur","blurShader","GaussianBlur1D","blurX","blurY","blurXUniforms","blurYUniforms","createBlurStage","createDepthOfFieldStage","blur","dof","focalDistance","blurTexture","isDepthOfFieldSupported","createEdgeDetectionStage","isEdgeDetectionSupported","createSilhouetteStage","edgeDetectionStages","edgeDetection","compositeUniforms","fsDecl","fsLoop","edgeComposite","getSilhouetteEdgeDetection","silhouetteProcess","silhouetteTexture","isSilhouetteSupported","createBloomStage","contrastBias","generateComposite","bloomComposite","glowOnly","bloomTexture","createAmbientOcclusionStage","generate","lengthCap","frustumLength","randomTexture","generateAndBlur","ambientOcclusionModulate","ambientOcclusionOnly","ambientOcclusionTexture","blurStepSize","isAmbientOcclusionSupported","createFXAAStage","createAcesTonemappingStage","useAutoExposure","autoExposure","createFilmicTonemappingStage","createReinhardTonemappingStage","createModifiedReinhardTonemappingStage","white","createAutoExposureStage","createBlackAndWhiteStage","gradations","createBrightnessStage","createNightVisionStage","createDepthViewStage","createLensFlareStage","dirtTexture","starTexture","distortion","ghostDispersal","haloWidth","dirtAmount","earthRadius","PostProcessStageTextureCache","postProcessStageCollection","_stageNameToFramebuffer","_updateDependencies","getLastStageName","getStageDependencies","previousName","stageDependencies","getOwnPropertyNames","uniformNamesLength","dependent","getCompositeDependencies","originalDependency","inSeries","currentName","currentDependencies","stageName","stageNames","stagesLength","foundConflict","ambientOcclusion","ao","bloom","tonemapping","_tonemapping","fxaa","getDependencies","updateDependencies","aoEnabled","bloomEnabled","tonemappingEnabled","fxaaEnabled","needsCheckDimensionsUpdate","_activeStages","dimensionsChanged","Tonemapper","REINHARD","MODIFIED_REINHARD","FILMIC","ACES","tonemapper","stackScratch","PostProcessStageCollection","_autoExposureEnabled","_autoExposure","_tonemapper","_previousActiveStages","_randomTexture","_ao","_bloom","_fxaa","_lastLength","_aoEnabled","_bloomEnabled","_tonemappingEnabled","_fxaaEnabled","_stagesRemoved","_textureCacheDirty","_stageNames","removeStages","newStages","readyAndEnabled","hasSelected","currentStage","previousActiveStages","activeStages","activeStagesChanged","autoExposureEnabled","initialTexture","QuadtreeTileProvider","computeDefaultLevelZeroMaximumGeometricError","SceneTransitioner","_currentTweens","_morphHandler","_morphCancelled","_completeMorph","_morphToOrthographic","morphTo2D","_previousMode","morphStart","transitioner","startPos","scratchCVTo2DStartPos","startDir","scratchCVTo2DStartDir","scratchCVTo2DStartUp","endDir","scratchCVTo2DEndDir","scratchCVTo2DEndUp","endPos","scratchCVTo2DEndPos","scratchCVTo2DRay","pickPos","scratchCVTo2DPickPos","scratchCVTo2DFrustum","camera2D","scratchCVTo2DCamera","complete2DCallback","createMorphHandler","columbusViewMorph","morphPerspectiveToOrthographic","morphFromColumbusViewTo2D","scratch3DTo2DCamera","scratch3DTo2DCartographic","scratch3DTo2DRay","rayDirection","scratch3DTo2DSurfacePoint","scratch3DTo2DToENU","pickedPos","scratch3DTo2DPickPosition","endCamera","scratch3DTo2DEndCamera","morphFrom3DToColumbusView","morphFrom3DTo2D","scratchToCVPosition","scratchToCVDirection","scratchToCVUp","scratchToCVPosition2D","scratchToCVDirection2D","scratchToCVUp2D","scratchToCVSurfacePosition","scratchToCVCartographic","scratchToCVToENU","scratchToCVFrustumPerspective","scratchToCVFrustumOrthographic","scratchToCVCamera","morphToColumbusView","cameraCV","destroyMorphHandler","_previousModeMode","wasMorphing","completeColumbusViewCallback","scratch3DToCVEndPos","scratch3DToCVEndDir","scratch3DToCVEndUp","morph","scratch3DToCVStartPos","scratch3DToCVStartDir","scratch3DToCVStartUp","morphOrthographicToPerspective","morphFrom2DToColumbusView","scratchCVTo3DCamera","scratch2DTo3DFrustumPersp","completeMorphFunction","completeMorphOnUserInput","morphTo3D","camera3D","getColumbusViewTo3DCamera","scratch2DTo3DFrustumOrtho","complete3DCallback","morphFromColumbusViewTo3D","morphFrom2DTo3D","scratchCVTo3DCartographic","scratchCVTo3DSurfacePoint","scratchCVTo3DFromENU","positionCarto","scratchCVTo3DStartPos","scratchCVTo3DStartDir","scratchCVTo3DStartUp","scratchCVTo3DEndPos","scratchCVTo3DEndDir","scratchCVTo3DEndUp","addMorphTimeAnimations","startFOV","endFOV","startValue","stopValue","tweenjs","_tweenjs","_startObject","_stopObject","needsStart","TweenCollection","delayInSeconds","TweenJS","addAlpha","addOffsetIncrement","ScreenSpaceCameraController","enableTranslate","enableZoom","enableRotate","enableTilt","enableLook","inertiaSpin","inertiaTranslate","inertiaZoom","maximumMovementRatio","bounceAnimationTime","translateEventTypes","zoomEventTypes","rotateEventTypes","tiltEventTypes","eventType","lookEventTypes","minimumPickingTerrainHeight","_minimumPickingTerrainHeight","minimumCollisionTerrainHeight","_minimumCollisionTerrainHeight","minimumTrackBallHeight","_minimumTrackBallHeight","enableCollisionDetection","_globe","_aggregator","_lastInertiaSpinMovement","_lastInertiaZoomMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement","_inertiaDisablers","_tween","_horizontalRotationAxis","_tiltCenterMousePosition","_tiltCenter","_rotateMousePosition","_rotateStartPosition","_strafeStartPosition","_strafeMousePosition","_strafeEndMousePosition","_zoomMouseStart","_zoomWorldPosition","_useZoomWorldPosition","_tiltCVOffMap","_looking","_rotating","_strafing","_zoomingOnVector","_zoomingUnderground","_rotatingZoom","_adjustedHeightForTerrain","_cameraUnderground","_zoomFactor","_rotateFactor","_rotateRateRangeAdjustment","_maximumRotateRate","_minimumRotateRate","_minimumZoomRate","_maximumZoomRate","_minimumUndergroundPickDistance","_maximumUndergroundPickDistance","maintainInertia","decayCoef","lastMovementName","movementState","motion","inertiaEnabled","ts","tr","fromNow","decay","activateInertia","inertiaStateName","inertiasToDisable","scratchEventTypeArray","reactToInput","eventTypes","inertiaConstant","scratchZoomPickRay","scratchPickCartesian","scratchZoomOffset","scratchZoomDirection","scratchCenterPixel","scratchCenterPosition","scratchPickNormal","scratchZoomAxis","scratchCameraPositionNormal","scratchTargetNormal","scratchCameraUpNormal","scratchCameraRightNormal","scratchForwardNormal","scratchPositionToTarget","scratchPositionToTargetNormal","scratchPan","scratchCenterMovement","scratchCartesianTwo","scratchCartesianThree","scratchZoomViewOptions","handleZoom","zoomFactor","distanceMeasure","unitPositionDotDirection","percentage","zoomRate","rangeWindowRatio","sameStartPosition","zoomingOnVector","rotatingZoom","pickGlobe","zoomOnVector","worldPosition","savedX","cameraPositionNormal","centerPixel","targetNormal","positionToTarget","positionToTargetNormal","alphaDot","cameraDistance","targetDistance","remainingDistance","positionToTargetDistance","pMid","cMid","pickedNormal","zoomMouseStart","translate2DStart","translate2DEnd","scratchTranslateP0","translate2D","twist2DStart","twist2DEnd","twist2D","rotateRate","phiWindowRatio","deltaPhi","singleAxisTwist2D","startTheta","endTheta","pickGlobeScratchRay","scratchDistanceCartographic","getDistanceFromSurface","globeHeight","getZoomDistanceUnderground","distanceFromSurface","getTiltCenterUnderground","getStrafeStartPositionUnderground","scratchInertialDelta","continueStrafing","originalEndPosition","inertialDelta","strafe","translateCVStartRay","translateCVEndRay","translateCVStartPos","translateCVEndPos","translateCVDifference","translateCVOrigin","translateCVPlane","translateCVStartMouse","translateCVEndMouse","translateCV","_translateMousePosition","look3D","globePos","startMouse","endMouse","startRay","startPlanePos","endRay","endPlanePos","rotateCVWindowPos","rotateCVWindowRay","rotateCVCenter","rotateCVVerticalCenter","rotateCVTransform","rotateCVVerticalTransform","rotateCVOrigin","rotateCVPlane","rotateCVCartesian3","rotateCVCart","rotateCVOldTransform","rotateCVQuaternion","rotateCVMatrix","tilt3DCartesian3","rotateCV","onMap","normalDotDirection","oldGlobe","oldEllipsoid","rotate3D","rotateCVOnPlane","verticalCenter","verticalTransform","movementDelta","oldConstrainedAxis","originalPosition","adjustHeightForTerrain","magSqrd","rotateCVOnTerrain","zoomCVWindowPos","zoomCVWindowRay","zoomCVIntersection","zoomCV","distanceUnderground","scratchStrafeRay","scratchStrafePlane","scratchStrafeIntersection","scratchStrafeDirection","scratchMousePos","strafeStartPosition","spin3DPick","scratchLookUp","spin3D","pan3D","mousePos","strafing","rotateOnlyVertical","rotateOnlyHorizontal","oldAxis","rho","thetaWindowRatio","pan3DP0","pan3DP1","pan3DTemp0","pan3DTemp1","pan3DTemp2","pan3DTemp3","pan3DStartMousePosition","pan3DEndMousePosition","startMousePosition","endMousePosition","basis0","basis1","basis2","startRho","startDot","startRej","endRho","endDot","endRej","startPhi","endPhi","side0","side1","zoom3DUnitPosition","zoom3DCartographic","unitPosition","tilt3DWindowPos","tilt3DRay","tilt3DCenter","tilt3DVerticalCenter","tilt3DTransform","tilt3DVerticalTransform","tilt3DOldTransform","tilt3DQuaternion","tilt3DMatrix","tilt3DCart","tilt3DLookUp","tilt3D","_tiltOnEllipsoid","tilt3DOnEllipsoidCartographic","grazingAltitudeCart","tilt3DOnEllipsoid","newEllipsoid","tilt3DOnTerrain","look3DStartPos","look3DEndPos","look3DStartRay","look3DEndRay","look3DNegativeRot","look3DTan","rotationAxis","horizontalRotationAxis","negativeRotationAxis","scratchAdjustHeightTransform","scratchAdjustHeightCartographic","heightUpdated","scratchPreviousPosition","scratchPreviousDirection","previousDirection","update2D","updateCV","SunPostProcess","_sceneFramebuffer","brightPass","avgLuminance","_delta","_sigma","_blurStep","_uCenter","_uRadius","colorTexture2","sunPositionECScratch","sunPositionWCScratch","sizeScratch","postProcessMatrix4Scratch","sunPosition","sunPositionEC","SOLAR_RADIUS","limbWC","sunSize","firstStage","downSampleWidth","downSampleHeight","downSampleViewport","updateSunPosition","requestRenderAfterFrame","Scene","creditContainer","creditViewport","contextOptions","powerPreference","hasCreditContainer","_jobScheduler","_removeCreditContainer","_creditContainer","_computeEngine","_globeTranslucencyState","_globeHeight","_logDepthBuffer","_logDepthBufferDirty","_shaderFrameCount","_sunPostProcess","orderIndependentTranslucency","_executeOITFunction","_depthPlane","_depthClearCommand","_classificationStencilClearCommand","_transitioner","_preUpdate","_postUpdate","_renderError","_preRender","rethrowRenderErrors","skyBox","skyAtmosphere","sun","sunBloom","_sunBloom","moon","debugCommandFilter","debugShowCommands","debugShowFramesPerSecond","debugShowGlobeDepth","debugShowDepthFrustum","debugShowFrustumPlanes","_debugShowFrustumPlanes","_debugFrustumPlanes","_actualInvertClassificationColor","_invertClassification","focalLength","eyeSeparation","postProcessStages","_brdfLutGenerator","_terrainExaggeration","_performanceDisplay","_debugVolume","_screenSpaceCameraController","_mapMode2D","_environmentState","skyBoxCommand","skyAtmosphereCommand","sunDrawCommand","sunComputeCommand","moonCommand","isSunVisible","isMoonVisible","isReadyForAtmosphere","isSkyAtmosphereVisible","useGlobeDepthFramebuffer","separatePrimitiveFramebuffer","useOIT","useInvertClassification","usePostProcess","usePostProcessSelected","useWebVR","_useWebVR","_cameraVR","_aspectRatioVR","requestRenderMode","_renderRequested","maximumRenderTimeChange","_lastRenderTime","_removeRequestListenerCallback","requestCompletedEvent","_removeTaskProcessorListenerCallback","_removeGlobeCallbacks","_picking","_defaultView","_hdrDirty","highDynamicRange","updateFrameNumber","initializeFrame","invertClassificationSupported","specularEnvironmentMapsSupported","removeGlobeCallbacks","updateGlobeListeners","postUpdate","renderError","preRender","lastRenderTime","_deviceOrientationCameraController","logarithmicDepthBuffer","highDynamicRangeSupported","getCompressedTextureFormatSupported","hasLogDepthDerivedCommands","hasHdrCommands","hasDerivedCommands","needsLogDepthDerivedCommands","needsHdrCommands","needsDerivedCommands","scratchOccluder","renderTilesetPassState","preloadTilesetPassState","preloadFlightTilesetPassState","requestRenderModeDeferCheckPassState","scratchOccluderBoundingSphere","executeDebugCommand","createDebugFragmentShaderProgram","_cubeMap","getOccluder","transformFrom2D","executeCommand","executeIdCommand","backToFront","frontToBack","executeTranslucentCommandsBackToFront","executeTranslucentCommandsFrontToBack","getDebugGlobeDepth","globeDepths","executeTranslucentCommands","clearClassificationStencil","depthPlane","fb","opaqueClassificationFramebuffer","executeComputeCommands","insertShadowCastCommands","wasVisible","cascadeVolume","executeShadowMapCastCommands","scratchEyeTranslation","updateAndClearFramebuffers","updateAndRenderPrimitives","savedCamera","fo","eyeTranslation","executeWebVRCommands","executeCommandsInViewport","originalViewport","scratch2DViewport","scratch2DViewportCartographic","scratch2DViewportMaxCoord","scratch2DViewportSavedPosition","scratch2DViewportCameraTransform","scratch2DViewportTransform","scratch2DViewportEyePoint","scratch2DViewportWindowCoords","viewportX","viewportWidth","execute2DViewportCommands","firstViewport","updateDebugFrustumPlanes","updateShadowMaps","depthFramebuffer","renderPass","offscreenPass","setDynamicAtmosphereColor","sunCommands","envMaps","envMapAtlas","globeFramebuffer","idFramebuffer","inputFramebuffer","debugShowPickDepth","getGlobeHeight","cameraController","isCameraUnderground","scratchBackgroundColor","executeOverlayCommands","tryAndCatchError","functionToExecute","updatePreloadPass","updatePreloadFlightPass","updateRequestRenderModeDeferCheckPass","cameraChanged","shouldRender","performanceContainer","performanceDisplay","_performanceContainer","updateDebugShowFramesPerSecond","callAfterRenderFunctions","forceRender","cartesianToCanvasCoordinates","_debugSphere","SkyAtmosphere","perFragmentAtmosphere","scaleVector","_scaleMatrix","_spSkyFromSpace","_spSkyFromAtmosphere","_flags","_hueSaturationBrightness","radiiAndDynamicAtmosphereColor","_radiiAndDynamicAtmosphereColor","u_radiiAndDynamicAtmosphereColor","useSunDirection","lightEnum","scratchModelMatrix","rotationOffsetMatrix","SkyAtmosphereCommon","SkyAtmosphereVS","SkyAtmosphereFS","SkyBox","_sources","u_cubeMap","SphereEmitter","StyleExpression","Sun","_drawingBufferWidth","_drawingBufferHeight","_radiusTS","glowFactor","_glowFactorDirty","u_size","_glowFactor","scratchPositionWC","scratchLimbWC","scratchPositionEC","_glowLengthTS","u_radiusTS","sunPositionCV","boundingVolume2D","projMatrix","limbCC","TileBoundingVolume","TileCoordinatesImageryProvider","textAlign","TileDiscardPolicy","UPSAMPLED_ONLY","TimeDynamicPointCloud","shading","frameFailed","frameChanged","_totalMemoryUsageInBytes","_frames","_previousInterval","_nextInterval","_lastRenderedFrame","_clockMultiplier","_runningSum","_runningLength","_runningIndex","_runningSamples","_runningAverage","_getAverageLoadTime","getClockMultiplier","getIntervalIndex","requestFrame","frames","frame","transformArray","sequential","touchedFrameNumber","stream","handleFrameFailure","prepareFrame","updateState","renderFrame","loadTime","updateAverageLoadTime","getMaximumAttenuation","loadFrame","unloadFrames","unloadCondition","updateInterval","framesLength","setFramesDirty","previousInterval","nextInterval","getCurrentInterval","clockMultiplierChanged","clockMultiplier","clockPaused","reachedInterval","averageLoadTime","getNextInterval","getFrame","getNearestReadyInterval","getUnloadCondition","ViewportQuad","_overlayCommand","track","ko","allObservablesForObject","getAllObservablesForObject","origValue","observable","isObservable","observableArray","isWriteableObservable","watchingArraySubscription","dispose","newArrayInstance","arrayInstance","subscribable","notificationPauseSignal","fnName","origMutator","notifySubscribers","wrapStandardArrayMutators","addKnockoutArrayMutators","getSubscribableForArray","subscribe","startWatchingArrayInstance","notifyWhenPresentOrFutureArrayValuesMutate","createIfNotDefined","defineComputedProperty","evaluatorOrOptions","deferEvaluation","read","getObservable","valueHasMutated","SvgPathBindingHandler","register","knockout","bindingHandlers","cesiumSvgPath","valueAccessor","pathElement","virtualElements","setDomNodeChildren","unwrap","pathWidth","pathHeight","svgClassName","disposeWhenNodeIsRemoved","controlsDescendantBindings","allowedBindings","attachToKo","LercDecode","CntZImage","skipMask","encodedMaskData","parsedData","inputOffset","noDataValue","defaultNoDataValue","uncompressedData","uncompressPixelValues","pixelType","returnMask","resultPixels","resultMask","maskData","returnEncodedMask","bitset","returnFileInfo","fileInfo","formatFileInfo","computeUsedBitDepths","bitDepths","TypedArrayClass","maskBitset","storeDecodedMask","blockIdx","numX","numBlocksX","numY","numBlocksY","blockWidth","blockHeight","maxZError","xx","yy","blockDataBuffer","thisBlockHeight","thisBlockWidth","blockData","blockPtr","constValue","maskByte","outPtr","outStride","block","blocks","rawData","unstuff","stuffedData","bitsPerPixel","numValidPixels","fileIdentifierString","fileVersion","eofOffset","numBytes","numBlocks","float32","fp","fileIdView","cnt","ip","actualNumBlocksX","actualNumBlocksY","blockI","blockY","blockX","bytesLeft","headerByte","offsetType","numValidPixelsType","arrayBuf","numPixels","dataBytes","dataWords","bitMask","bitsLeft","nmax","numInvalidTailBytes","missingBits","Lerc2Decode","BitStuffer","lutArr","bitPos","Lerc2Helpers","HUFFMAN_LUT_BITS_MAX","computeChecksumFletcher32","sum1","sum2","words","tlen","readHeaderInfo","ptr","headerInfo","checksum","numDims","numValidPixel","microBlockSize","blobSize","checkMinMaxRanges","OutPixelTypeArray","getDataTypeArray","rangeBytes","getDataTypeSize","readSubArray","readMask","mb","readDataOneSweep","nStart","readHuffmanTree","BITS_MAX","decodeBits","codeTable","srcPtr","numBitsLUT","numBitsLUTQick","tree","TreeNode","numEntries","jj","decodeLut","readHuffman","valTmp","valTmpQuick","huffmanInfo","prevVal","iDim","deltaEncode","encodeMode","resultPixelsAllDim","viewByteLength","bits67","doLut","numBits","store8","lutData","lutBytes","counter","lut","bitstuffer","readTiles","dataTypeSize","blockEncoding","bytesleft","lastBlockHeight","lastBlockWidth","uncompressed","getDataTypeUsed","getOnePixel","constantoffset","constant","getPixelType","constructConstantSurface","numPixelAllDims","tp","isValidPixelValue","tc","getUInt32","onesweep","bReadDataOneSweep","flagHuffman","validPixelCount","dimCount","dimStats","getBandCount","isPlatformLittleEndian","Lerc","encodedData","lerc","majorVersion","bandMask","iPlane","eof","bandMasks","decodedPixelBlock","modules","installedModules","__webpack_require__","moduleId","getter","__esModule","_require","webm","oldIOS","MSStream","NoSleep","noSleepTimer","noSleepVideo","_addSourceToVideo","setInterval","clearInterval","ClockViewModel","synchronize","systemTime","equalityComparer","canExecute","beforeExecute","afterExecute","commandInfo","InspectorShared","checkedBinding","enableBinding","checkboxContainer","checkboxLabel","checkboxInput","binding","panel","headerText","sectionVisibleBinding","toggleSectionVisibilityBinding","section","sectionHeader","sectionContent","subscribeAndEvaluate","observablePropertyName","ToggleButtonViewModel","toggled","tooltip","removePipelineExtras","widgetForDrag","svgNS","xlinkNS","gradientEnabledColor0","gradientEnabledColor1","gradientEnabledColor2","gradientEnabledColor3","gradientDisabledColor0","gradientDisabledColor1","gradientKnobColor","gradientPointerColor","getElementColor","svgIconsById","animation_pathReset","animation_pathPause","animation_pathPlay","animation_pathPlayReverse","animation_pathLoop","animation_pathClock","animation_pathWingButton","animation_pathPointer","animation_pathSwooshFX","svgFromObject","ele","svgText","tspan","makeColorStringScratch","makeColorString","gradientAlpha","backgroundAlpha","rectButton","iconInfo","class","rx","ry","SvgButton","svgElement","viewModel","_viewModel","_toggled","_clickFunction","setToggled","setTooltip","setEnabled","Animation","_centerX","_centerY","_defsElement","_svgNode","_topG","_lastHeight","_lastWidth","cssStyle","themeEle","_theme","_themeNormal","_themeHover","_themeSelect","_themeDisabled","_themeKnob","_themePointer","_themeSwoosh","_themeSwooshHover","topG","_realtimeSVG","buttonIconInfo","wingIconInfo","wingButton","playRealtimeViewModel","_playReverseSVG","playReverseViewModel","_playForwardSVG","playForwardViewModel","_pauseSVG","pauseViewModel","buttonsG","shuttleRingBackPanel","_shuttleRingBackPanel","swooshIconInfo","shuttleRingPointerIconInfo","shuttleRingSwooshG","_shuttleRingSwooshG","_shuttleRingPointer","knobG","_knobOuter","knobInner","_knobDate","_knobTime","_knobStatus","knobShield","shuttleRingBackG","mouseCallback","widget","shuttleRingDragging","touches","pointerRect","shuttleRingAngle","slower","faster","setShuttleRingFromMouseOrTouch","_mouseCallback","isPaused","timeNode","dateNode","statusNode","shuttleRingPointer","knobOuter","applyThemeChanges","_observer","disconnect","parentWidth","parentHeight","cssText","MutationObserver","observe","childList","subtree","buttonNormalBackColor","buttonHoverBackColor","buttonToggledBackColor","buttonDisabledBackColor","knobBackColor","pointerColor","swooshColor","swooshHoverColor","defsElement","stdDeviation","in","monthNames","numberComparator","getTypicalMultiplierIndex","shuttleRingTicks","AnimationViewModel","clockViewModel","_clockViewModel","_allShuttleRingTicks","_dateFormatter","defaultDateFormatter","_timeFormatter","defaultTimeFormatter","snapToTicks","_sortedFilteredPositiveTicks","setShuttleRingTicks","defaultTicks","timeLabel","dateLabel","multiplierLabel","fastedMultipler","multiplierToAngle","ticks","angleToMultiplier","positiveMultiplier","numDigits","_canAnimate","_isSystemTimeAvailable","_isAnimating","pauseCommand","_pauseViewModel","playReverseCommand","_playReverseViewModel","playForwardCommand","_playForwardViewModel","playRealtimeCommand","_playRealtimeViewModel","_slower","_faster","gregorianDate","getShuttleRingTicks","positiveTicks","sortedFilteredPositiveTicks","allTicks","dateFormatter","timeFormatter","_maxShuttleRingAngle","_realtimeShuttleRingAngle","BaseLayerPickerViewModel","imageryProviderViewModels","terrainProviderViewModels","dropDownVisible","imageryObservable","pureComputed","categories","category","allCategoryNames","_imageryProviders","terrainObservable","terrainProviders","_terrainProviders","buttonTooltip","selectedImagery","selectedTerrain","imageryTip","terrainTip","buttonImageUrl","iconUrl","selectedImageryViewModel","_currentImageryProviders","currentImageryProviders","currentImageryProvidersLength","hadExistingBaseLayer","layersLength","newProviders","creationCommand","baseLayer","selectedTerrainViewModel","newProvider","_toggleDropDown","selectedImageryProviderViewModel","selectedTerrainProviderViewModel","toggleDropDown","BaseLayerPicker","imgElement","dropPanel","imageryTitle","imagerySection","imageryCategories","categoryTitle","imageryChoices","providerIcon","providerLabel","terrainTitle","terrainSection","terrainCategories","terrainCategoryTitle","terrainChoices","terrainProviderIcon","terrainProviderLabel","applyBindings","_dropPanel","_closeDropDown","cleanNode","ProviderViewModel","creationFunction","_creationCommand","_category","createDefaultImageryProviderViewModels","providerViewModels","createDefaultTerrainProviderViewModels","selectTilesetOnHover","getStatistics","isPick","colorBlendModes","highlightColor","oldColor","Cesium3DTilesInspectorViewModel","_statisticsText","_pickStatisticsText","_editorError","showStatistics","showPickStatistics","inspectorVisible","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","tileDebugLabelsVisible","optimizationVisible","styleString","_feature","showOnlyPickedTileDebugLabel","picked","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","dynamicScreenSpaceErrorDensitySliderValue","pickTileset","pickActive","_shouldStyle","_definedProperties","_removePostRenderEvent","hasFeatures","statisticsText","pickStatisticsText","editorError","settings","setting","currentFeature","currentTile","togglePickTileset","toggleInspector","toggleTileset","toggleDisplay","toggleUpdate","toggleLogging","toggleStyle","toggleTileDebugLabels","toggleOptimization","trimTilesCache","compileStyle","styleEditorKeyPress","sender","keyCode","textArea","selectionStart","selectionEnd","newEnd","newText","Cesium3DTilesInspector","_panel","createSection","createCheckbox","tilesetPanelContents","displayPanelContents","updatePanelContents","loggingPanelContents","tileDebugLabelsPanelContents","stylePanelContents","optimizationPanelContents","propertiesLabel","propertiesField","makeButton","pointCloudShadingContainer","makeRangeInput","edlContainer","sseContainer","dynamicScreenSpaceErrorContainer","pickStatistics","stylePanelEditor","blendDropdown","styleEditor","closeStylesBtn","errorBox","skipScreenSpaceErrorFactorContainer","skipLevelsContainer","displayProperty","slider","active","boundDepthFrustum","proposed","bounded","CesiumInspectorViewModel","eventHandler","_modelMatrixPrimitive","tileBoundariesLayer","newPick","pickPrimitiveActive","selectedTile","tilesRenderedByTextureCount","pickTileActive","frustums","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","depthFrustum","_numberOfFrustums","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","generalVisible","primitivesVisible","terrainVisible","depthFrustumText","_toggleGeneral","_togglePrimitives","_toggleTerrain","_frustumsSubscription","_frustumPlanesSubscription","_performanceSubscription","_showPrimitiveBoundingSphere","_primitiveBoundingSphereSubscription","_showPrimitiveReferenceFrame","_primitiveReferenceFrameSubscription","_doFilterPrimitive","_filterPrimitiveSubscription","_wireframeSubscription","_globeDepthSubscription","_pickDepthSubscription","_depthFrustumSubscription","_incrementDepthFrustum","_decrementDepthFrustum","_suspendUpdatesSubscription","_showTileCoordinates","_tileCoordinatesSubscription","_tileBoundingSphereSubscription","_showTileBoundingSphere","_doFilterTile","_filterTileSubscription","doFilterTile","_pickPrimitiveActiveSubscription","_pickTile","_pickTileActiveSubscription","showPrimitiveBoundingSphere","showPrimitiveReferenceFrame","doFilterPrimitive","incrementDepthFrustum","decrementDepthFrustum","showTileCoordinates","showTileBoundingSphere","toggleGeneral","togglePrimitives","toggleTerrain","pickTile","selectParent","selectNW","selectNE","selectSW","selectSE","newPrimitive","newTile","com","frustumStatisticsToString","CesiumInspector","generalSection","frustumStatistics","shaderCacheDisplay","gLabel","gText","gMinusButton","gPlusButton","primSection","pickPrimRequired","pickPrimitiveButton","buttonWrap","_primitiveOnly","pickTileRequired","pickTileButton","nwTile","seTile","relativeText","tr1","tr2","td1","td2","td3","td4","td5","td6","getDefaultSkyBoxUrl","configurePixelRatio","_useBrowserRecommendedResolution","devicePixelRatio","_resolutionScale","configureCanvasSize","_canvasClientWidth","_canvasClientHeight","_canRender","_lastDevicePixelRatio","configureCameraFrustum","CesiumWidget","blurActiveElement","activeElement","_supportsImageRenderingPixelated","oncontextmenu","onselectstart","innerCreditContainer","showRenderLoopErrors","useBrowserRecommendedResolution","_creditViewport","_innerCreditContainer","_renderLoopRunning","_showRenderLoopErrors","_forceResize","terrainShadows","_screenSpaceEventHandler","_useDefaultRenderLoop","useDefaultRenderLoop","_targetFrameRate","targetFrameRate","_onRenderError","showErrorPanel","frameTime","startRenderLoop","resolutionScale","errorHeader","errorPanelScroller","resizeCallback","hasMessage","hasError","errorMessage","errorMessageDetails","moreDetails","buttonPanel","okButton","FullscreenButtonViewModel","tmpIsFullscreen","tmpIsEnabled","isFullscreen","isFullscreenEnabled","_fullscreenElement","Element","FullscreenButton","_exitFullScreenPath","_enterFullScreenPath","GeocoderViewModel","geocoderServices","_geocoderServices","_viewContainer","_flightDuration","flightDuration","_searchText","_isSearchInProgress","_geocodePromise","_suggestions","_selectedSuggestion","_showSuggestions","_handleArrowDown","handleArrowDown","_handleArrowUp","handleArrowUp","_suggestionsVisible","suggestionsNotEmpty","suggestions","showSuggestions","_searchCommand","_focusTextbox","activateSuggestion","hideSuggestions","isSearchInProgress","hasOnlyWhitespace","chainPromise","geocoderResults","destinationFound","deselectSuggestion","handleKeyDown","downKey","upKey","handleKeyUp","enterKey","clearSuggestions","handleMouseover","keepExpanded","autoComplete","autocomplete","flyToDestination","searchTextObservable","rateLimit","_suggestionSubscription","_updateSearchSuggestions","searchText","_adjustSuggestionsScroll","numberOfSuggestions","geocoderService","selectedSuggestion","finalDestination","positionOnTerrain","computeFlyToLocationForCartographic","newResults","focusedItemIndex","searchResults","getElementsByClassName","offsetTop","scrollTop","Geocoder","_startSearchPath","_stopSearchPath","form","textBox","_onTextBoxFocus","_textBox","searchButton","searchSuggestionsContainer","suggestionsList","_searchSuggestionsContainer","_form","_onInputBegin","composedPath","_onInputEnd","HomeButtonViewModel","HomeButton","_svgPath","InfoBoxViewModel","_cameraClicked","_closeClicked","enableCamera","isCameraTracking","showInfo","titleText","_loadingIndicatorHtml","cameraIconPath","maxHeightOffset","cameraClicked","closeClicked","InfoBox","infoElement","titleElement","cameraElement","closeElement","_frame","frameDocument","contentDocument","cssLink","frameContent","NavigationHelpButtonViewModel","showInstructions","_showClick","_touch","_showTouch","showClick","showTouch","NavigationHelpButton","showInsructionsDefault","instructionsInitiallyVisible","instructionContainer","mouseButton","mouseIcon","touchButton","touchIcon","clickInstructions","touchInstructions","_wrapper","_closeInstructions","PerformanceWatchdogViewModel","lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage","_dismissMessage","_unsubscribeLowFrameRate","_unsubscribeNominalFrameRate","dismissMessage","PerformanceWatchdog","dismissButton","ProjectionPickerViewModel","_orthographic","_flightInProgress","tooltipPerspective","tooltipOrthographic","selectedTooltip","oldMode","newMode","isMorphing","_switchToPerspective","_switchToOrthographic","_sceneMode","switchToPerspective","switchToOrthographic","isOrthographicProjection","ProjectionPicker","_perspectivePath","_orthographicPath","perspectiveButton","orthographicButton","SceneModePickerViewModel","tooltip2D","tooltip3D","tooltipColumbusView","_morphTo2D","_morphTo3D","_morphToColumbusView","SceneModePicker","_globePath","_flatMapPath","_columbusViewPath","morphTo3DButton","morphTo2DButton","morphToCVButton","screenSpacePos","SelectionIndicatorViewModel","selectionIndicatorElement","_screenPositionX","_screenPositionY","_selectionIndicatorElement","showSelection","screenPosition","containerWidth","containerHeight","indicatorSize","animateAppear","animateDepart","SelectionIndicator","el","TimelineHighlightRange","heightInPx","_base","getBase","getStartTime","getStopTime","_stop","setRange","highlightStart","epochJulian","highlightLeft","timeBarWidth","getAlpha","highlightStop","highlightWidth","TimelineTrack","startInterval","stopInterval","spanStart","startJulian","spanStop","timelineWheelDelta","timelineMouseMode","timelineTouchMode","timelineTicScales","timelineMonthNames","Timeline","timeline","topDiv","_topDiv","_endJulian","_epochJulian","_lastXPos","_scrubElement","_startJulian","_timeBarSecondsSpan","_scrubJulian","_mainTicSpan","_mouseMode","_touchMode","_touchState","spanX","_mouseX","_timelineDrag","_timelineDragLocation","_timeBarEle","_trackContainer","_trackListEle","_needleEle","_rulerEle","_trackList","_highlightRanges","zoomTo","_onMouseDown","backgroundPosition","_onMouseMove","_onMouseUp","createMouseUpCallback","_setTimeBarTime","dsec","zoomFrom","createMouseMoveCallback","_onMouseWheel","wheelDeltaY","createMouseWheelCallback","_onTouchStart","xPos","createTouchStartCallback","_onTouchMove","newCenter","newSpan","newStartTime","createTouchMoveCallback","_onTouchEnd","createTouchEndCallback","timeBarEle","updateFromClock","twoDigits","useCapture","addHighlightRange","newHighlightRange","addTrack","newTrack","clockStart","clockEnd","clockSpan","_makeTics","evt","createEvent","initEvent","endJulian","totalSpan","mainTicSpan","dispatchEvent","centerSec","centerSecFlip","makeLabel","gregorian","millisecondString","smallestTicInPixels","tic","timeBar","scrubX","tics","minSize","epsilonTime","getStartTic","ticScale","getNextTic","sampleWidth","offsetWidth","origMinSize","highlightRange","mainTic","subTic","tinyTic","idealTic","ticIndex","smallestIndex","ticScaleLen","textWidth","lastTextLeft","ticTime","ticLeap","ticLeft","ticLabel","labelLeft","lastChild","scrubElement","timeSeconds","timeJulian","trackListHeight","unlockScreen","screen","unlockOrientation","mozUnlockOrientation","msUnlockOrientation","unlock","toggleVR","isVRMode","isOrthographic","_locked","_noSleep","_vrElement","locked","lockOrientation","mozLockOrientation","msLockOrientation","lock","lockScreen","VRButtonViewModel","vrElement","isEnabled","isVREnabled","_isOrthographic","VRButton","_exitVRPath","_enterVRPath","onTimelineScrubfunction","pickEntity","pickRay","imageryLayerFeaturePromise","loadingMessage","selectedEntity","ecfPosition","createNoFeaturesEntity","pickImageryLayerFeature","trackDataSourceClock","dataSourceClock","Viewer","createBaseLayerPicker","baseLayerPicker","viewerContainer","cesiumWidgetContainer","bottomContainer","destroyClockViewModel","cesiumWidget","destroyDataSourceCollection","selectionIndicator","infoBox","dataSourceDisplay","_clearTrackedObject","selectionIndicatorContainer","infoBoxContainer","infoBoxViewModel","_onInfoBoxCameraClicked","_onInfoBoxClockClicked","geocoder","homeButton","sceneModePicker","projectionPicker","baseLayerPickerDropDown","navigationHelpButton","fullscreenButton","fullscreenSubscription","fullscreenContainer","vrButton","vrSubscription","vrModeSubscription","toolbar","geocoderContainer","_clearObjects","showNavHelp","localStorage","hasSeenNavHelp","getItem","setItem","navigationInstructionsInitiallyVisible","animationContainer","timelineContainer","vrContainer","fullScreenElement","_geocoder","_homeButton","_sceneModePicker","_projectionPicker","_baseLayerPicker","_animation","_timeline","_fullscreenButton","_infoBox","_selectionIndicator","_vrButton","forceResize","enableVRUI","_baseLayerPickerDropDown","_fullscreenSubscription","_vrSubscription","_vrModeSubscription","_dataSourceChangedListeners","_automaticallyTrackDataSourceClocks","automaticallyTrackDataSourceClocks","_bottomContainer","_cesiumWidget","_destroyDataSourceCollection","_dataSourceDisplay","_destroyClockViewModel","_toolbar","_navigationHelpButton","_allowDataSourcesToSuspendAnimation","_entityView","_enableInfoOrSelection","_clockTrackedDataSource","_trackedEntity","_needTrackedEntityUpdate","_selectedEntity","_zoomIsFlight","_zoomTarget","_zoomPromise","_zoomOptions","_selectedEntityChanged","_trackedEntityChanged","dataSourceLength","trackedEntity","zoomToOrFly","zoomTarget","isFlight","cancelZoom","zoomPromise","removeEvent","clearZoom","allowDataSourcesToSuspendAnimation","selectionIndicatorViewModel","selectedEntityChanged","trackedEntityChanged","clockTrackedDataSource","mixin","animationExists","timelineExists","panelMaxHeight","animationWidth","creditLeft","creditBottom","lastWidth","timelineStyle","_onEntityCollectionChanged","entityView","removedObject","_onDataSourceChanged","removalFunc","resetClock","numDataSources","zoomOptions","updateZoomTarget","updateTrackedEntity","componentWillMount","getDerivedStateFromProps","setState","componentWillReceiveProps","nextProps","prevState","componentWillUpdate","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","Component","isReactComponent","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","componentName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","__suppressDeprecationWarning","_inheritsLoose","subscriptionShape","PropTypes","trySubscribe","isRequired","tryUnsubscribe","notifyNestedSubs","isSubscribed","storeShape","dispatch","React","forwardRef","createProvider","storeKey","_Provider$childContex","subscriptionKey","Provider","_Component","_proto","getChildContext","_ref","Children","only","propTypes","childContextTypes","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","nullListeners","notify","Subscription","parentSub","onStateChange","addNestedSub","createListenerCollection","prefixUnsafeLifecycleMethods","hotReloadingVersion","dummyState","connectAdvanced","selectorFactory","_contextTypes","_childContextTypes","_ref2","_ref2$getDisplayName","getDisplayName","_ref2$methodName","methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","shouldHandleStateChanges","_ref2$storeKey","_ref2$withRef","withRef","connectOptions","contextTypes","WrappedComponent","invariant","isValidElementType","wrappedComponentName","selectorFactoryOptions","Connect","renderCount","propsMode","setWrappedInstance","initSelector","initSubscription","_ref3","componentDidMount","run","shouldComponentUpdate","componentWillUnmount","getWrappedInstance","wrappedInstance","ref","sourceSelector","makeSelectorStateful","notifyNestedSubsOnComponentDidUpdate","addExtraProps","withExtras","hoistStatics","is","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","stateOrDispatch","ownProps","mapDispatchToProps","bindActionCreators","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","mergedProps","pure","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","nextStateProps","statePropsChanged","handleNewState","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_temp","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","defaultMapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","defaultMapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","defaultMergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","_createForOfIteratorHelper","_e","it","normalCompletion","didErr","_e2","deep","defaultEqualityCheck","defaultMemoize","equalityCheck","lastArgs","lastResult","_len","dep","dependencyTypes","createSelectorCreator","memoize","_len2","memoizeOptions","_key2","_len3","_key3","recomputations","resultFunc","memoizedResultFunc","_len4","_key4","dependency","resetRecomputations","createStructuredSelector","selectors","selectorCreator","createSelector","objectKeys","_len5","_key5","composition","object1","object2","object1Value","object2Value","object1Defined","object2Defined","clearTimeouts","URI","getScheme","getAuthority","getQuery","getFragment","isAbsolute","isSameDocumentAs","removeDotSegments","authorityRegex","replaceAuthority","caseRegex","replaceCase","percentRegex","dec","baseURI","absPath","_defineProperty","Position","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","priority","OTHER","cancelled","_slicedToArray","_arr","_n","_d","_s","_i","unsupportedIterableToArray","markdownSpace","effects","ok","enter","consume","exit","_getPrototypeOf","arrayLikeToArray","iter","one","rect0","ManagerReferenceNodeContext","createContext","ManagerReferenceNodeSetterContext","Manager","_React$Component","newReferenceNode","referenceNode","setReferenceNode","unwrapArray","safeInvoke","setRef","InnerReference","innerRef","warning","refHandler","Reference","Consumer","initialStyle","pointerEvents","initialArrowStyle","InnerPopper","placement","popperNode","updatePopperInstance","arrowNode","eventsEnabled","positionFixed","modifiers","arrow","updateStateModifier","popper","arrowStyles","hide","popperInstance","destroyPopperInstance","referenceElement","PopperJS","getOptions","scheduleUpdate","deepEqual","enableEventListeners","disableEventListeners","setPopperNode","getPopperStyle","getPopperPlacement","outOfBoundaries","getOutOfBoundariesState","arrowProps","setArrowNode","getArrowStyle","placements","Popper","isVerticalPosition","subparts","resultValue","freeGlobal","freeSelf","numberOfActiveRequests","numberOfCancelledRequests","numberOfCancelledActiveRequests","numberOfFailedRequests","numberOfActiveRequestsEver","lastNumberOfActiveRequests","priorityHeapLength","requestHeap","Heap","maximumLength","activeRequests","numberOfActiveRequestsByServer","pageUri","serverHasOpenSlots","maxRequests","requestsByServer","maximumRequestsPerServer","issueRequest","startRequest","getRequestReceivedFunction","getRequestFailedFunction","cancelRequest","maximumRequests","throttleRequests","debugShowStatistics","activeLength","issuedRequests","internalArray","issuedLength","resort","openSlots","filledSlots","updateStatistics","removedRequest","clearForSpecs","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","RangeError","encodingOrOffset","allocUnsafe","fromArrayLike","fromArrayBuffer","isEncoding","isBuffer","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","bytesPerSequence","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","ret","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","nextTick","browser","env","argv","versions","addListener","once","removeListener","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","ReactCSS","handleActive","handleHover","hover","_flattenNames2","_interopRequireDefault","_mergeClasses2","_autoprefix2","_hover3","_active2","_loop3","activations","activeNames","merged","receiver","_objectWithoutProperties","sourceSymbolKeys","chunkStart","relative","documentObject","_implementation","isArguments","isRegex","isDate","opts","isUndefinedOrNull","aIsRegex","bIsRegex","aIsBuffer","bIsBuffer","objEquiv","ctor","superCtor","super_","TempCtor","pna","Duplex","util","inherits","Readable","Writable","readable","allowHalfOpen","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","getRawTag","objectToString","symToStringTag","toStringTag","baseIsNative","parseResponseHeaders","objectProto","nativeObjectToString","isOwn","unmasked","baseGetTag","overArg","getPrototype","isObjectLike","funcProto","funcToString","objectCtorString","isPlainObject","proto","Ctor","ActionTypes","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","$$observable","outerSubscribe","observer","observeState","getUndefinedStateErrorMessage","actionType","combineReducers","reducers","reducerKeys","finalReducers","finalReducerKeys","shapeAssertionError","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","bindActionCreator","actionCreator","actionCreators","boundActionCreators","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","middleware","Schema","DefinedInfo","definition","space","mustUseProperty","isFunction","isLength","blobUriRegex","async","part","2","b64","s64","3","EventEmitter","4","inquire","eval","5","SIZE","slab","6","utf8","7","configure","_configure","BufferReader","BufferWriter","rpc","8","LongBits","indexOutOfRange","writeLength","create_array","readLongVarint","readFixed32","readFixed64","_slice","int32","sint32","fixed32","sfixed32","readFloat","f32","f8b","uint","mantissa","float","readDouble","f64","double","skip","wireType","BufferReader_","Long","int64","uint64","sint64","zzDecode","fixed64","sfixed64","9","10","Service","11","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","asPromise","finish","endedByRPC","12","zero","toNumber","zzEncode","zeroHash","fromNumber","isString","unsigned","toLong","fromHash","toHash","part0","part1","part2","13","ifNotSet","newError","CustomError","captureStackTrace","pool","emptyObject","isInteger","isObject","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","fromBits","lcFirst","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","lazyResolve","lazyTypes","toJSONOptions","longs","enums","14","Op","State","writeByte","VarintOp","writeVarint64","writeFixed32","writeBytes","fork","ldelim","BufferWriter_","15","writeBytesBuffer","writeStringBuffer","$require","$module","_unsupportedIterableToArray","minLen","jQuery","S","K","W","pc","gb","qc","aa","ba","qd","ra","Qb","uc","da","$c","Ja","gd","deferUpdates","useOnlyNativeEvents","foreachHidesDestroyed","Na","MouseEvents","propertychange","Jc","Lb","Pa","wc","Mb","Nb","bc","Ba","Ab","P","Ga","Tb","Yb","la","oa","Ca","Xc","Ua","nextSibling","Zc","Db","Ud","vd","compareDocumentPosition","Sb","kd","Ac","Gc","attachEvent","za","detachEvent","Fb","click","fireEvent","trigger","O","Eb","classList","baseVal","Bb","Ad","Yc","mergeAttributes","wd","Pd","Da","Zd","$d","Lc","Nd","hc","Od","includeFields","submitter","submit","Ub","cleanExternalData","yb","cleanData","thead","tbody","tfoot","td","th","option","optgroup","ua","parseHTML","parentWindow","innerShiv","Md","Xb","bd","cd","Uc","ud","Kd","na","scheduler","toggle","onreadystatechange","zb","resetForTesting","Sd","Ta","throttleEvaluation","$","Hb","ub","ic","lc","mc","Ib","Jb","qb","U","change","hb","Qa","Gb","Wa","ed","xc","ob","Dd","sb","rc","Bd","Qc","od","pd","fd","qa","Va","Ya","Yd","ta","ya","xa","Ma","Za","Nc","Ha","trackArrayChanges","destroyAll","sorted","reversed","zc","Pc","Pb","Ob","sparse","Kc","nb","Xa","ha","sa","rb","jc","wb","Wc","Sa","disposeWhen","Rb","V","Ic","ea","Ka","Vb","La","Ia","Jd","Rd","Hc","zd","yd","Oc","Fd","xb","ad","Wd","ma","__ko__hasDomDataOptionValue__","$b","specified","selectedIndex","unknown","Ra","wa","ac","vb","getBindingHandler","preprocess","valueAccessors","bindingParams","Id","eb","createComment","ol","Ea","Vc","Wb","Cd","Vd","Sc","ga","nd","nodeHasBindings","getComponentNameForNode","getBindings","getBindingsString","parseBindingsString","getBindingAccessors","Tc","yc","Kb","preprocessNode","bindingContextForDescendants","hd","Zb","Ec","pa","Cb","ca","Mc","$data","shouldBindDescendants","fa","textarea","$parents","$root","$rawData","dataDependency","exportDependencies","createChildContext","as","noChildContext","$parentContext","$parent","Cc","Fa","notifyImmediately","Td","ld","Oa","Dc","synchronous","Gd","loaders","suppressLoaderExceptions","Bc","oc","Xd","tb","unregister","Fc","getConfig","loadComponent","loadTemplate","HTMLElement","loadViewModel","dd","$raw","createViewModel","templateNodes","$component","$componentTemplateNodes","koDescendantsComplete","lookupNamespaceURI","removeAttributeNS","uniqueName","checkedValue","__ko__cssValue","disabled","returnValue","cancelBubble","stopPropagation","foreach","Rc","includeDestroyed","afterAdd","beforeRemove","beforeMove","afterMove","templateEngine","hasfocus","__ko_hasfocusUpdating","__ko_hasfocusLastValue","focus","hasFocus","let","Q","multiple","ec","selectedOptions","opera","textInput","textinput","rd","using","renderTemplateSource","createJavaScriptEvaluatorBlock","makeTemplateSource","renderTemplate","isTemplateRewritten","allowTemplateRewriting","rewriteTemplate","kc","xd","Ld","md","lb","jd","previousSibling","gc","dc","Qd","$index","ifnot","moved","dontLimitMoves","Aa","pb","_countWaitingForRemove","Ed","$a","Hd","tmpl","koBindingContext","templateOptions","appendTo","addTemplate","ko_code","ko_with","_setPrototypeOf","isReactElement","webpackPolyfill","deprecate","Stream","Transform","isBoolean","isNull","isNullOrUndefined","isNumber","isSymbol","isUndefined","isRegExp","isError","isPrimitive","hasSymbols","toStr","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","predicate","predicates","sizeChunks","events","sliceStream","asciiAlphanumeric","regexCheck","loose","arrayLikeKeys","baseKeys","isArrayLike","assignValue","baseAssignValue","customizer","isNew","baseKeysIn","_servers","_arrayLikeToArray","TruncatedPopoverMode","numFrozenRows","OldCookies","Cookies","noConflict","converter","toUTCString","stringifiedAttributes","jar","cookies","getJSON","withConverter","arg1","arg2","arg3","TYPED_OK","_has","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","chunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","__webpack_amd_options__","properObject","markdownLineEnding","factorySpace","partialBlankLine","tokenize","nok","partial","constructs","called","resolveAll","asciiAlpha","encodeCache","keepEscaped","nextCode","defaultChars","getEncodeCache","componentChars","powers","increment","boolean","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","stubFalse","freeExports","freeModule","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","__data__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","eq","nativeCreate","getNative","isKeyable","Map","Set","WeakMap","toSource","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","headerString","headerPairs","headerPair","_comparator","_maximumLength","heapify","candidate","inserting","removedElement","OverflowDirection","breadcrumbProps","deselectCurrent","clipboardToIE11Formatting","reselectPrevious","selection","mark","createRange","getSelection","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","clipboardData","clearData","setData","onCopy","selectNodeContents","addRange","execCommand","copyKey","prompt","removeRange","removeAllRanges","_isNativeReflectConstruct","sham","argIndex","framesToPop","_CSSTransition","_ReplaceTransition","_TransitionGroup","_Transition","Transition","TransitionGroup","ReplaceTransition","CSSTransition","Sketch","_react2","_propTypes2","_reactcss2","_merge2","_common","_SketchFields2","_SketchPresetColors2","hex","hsv","hsl","onChange","onSwatchHover","disableAlpha","presetColors","renderers","_ref$styles","passedStyles","_ref$className","picker","boxSizing","borderRadius","boxShadow","paddingBottom","overflow","Saturation","shadow","controls","sliders","flex","marginLeft","activeColor","absolute","Hue","Alpha","Checkboard","onClick","oneOfType","defaultProps","ColorWrap","propIsEnumerable","toObject","test3","letter","shouldUseNative","punycode","slashes","auth","pathname","urlParse","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","queryIndex","uSplit","rest","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","toASCII","ae","esc","qm","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","ReflectOwnKeys","ReflectApply","NumberIsNaN","eventListener","errorListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","wrapped","evlistener","unwrapListeners","arrayClone","listenerCount","setMaxListeners","getMaxListeners","doError","er","originalListener","spliceOne","rawListeners","eventNames","copyProps","SafeBuffer","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","setImmediate","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","final","_final","doWrite","onwriteDrain","holder","isBuf","callFinal","need","prefinish","hasInstance","pipe","_uint8ArrayToBuffer","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","chunkedSplice","unicodePunctuationRegex","unicodePunctuation","unicodeWhitespace","markdownLineEndingOrSpace","chunkedPush","normalizeIdentifier","shallow","factoryDestination","factoryLabel","factoryTitle","factoryWhitespace","labelEnd","labelStart","_balanced","_inactive","balanced","sliceSerialize","afterLabelEnd","attempt","resourceConstruct","fullReferenceConstruct","collapsedReferenceConstruct","resolveTo","media","insideSpan","null","destinationAfter","between","afterLabel","visit","visitParents","CONTINUE","SKIP","EXIT","visitor","baseForOwn","castFunction","iteratee","baseIsArguments","reIsUint","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","freeProcess","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayFilter","stubArray","nativeGetSymbols","getSymbols","reIsDeepProp","reIsPlainProp","_Alpha","_Checkboard","_EditableInput","_Hue","_Raised","_Saturation","_ColorWrap","_Swatch","_react","checkboard","newObj","_interopRequireWildcard","grey","isValidElement","cloneElement","ponyfill","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_implementation2","timeoutDuration","longerTimeoutBrowsers","isBrowser","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","getScrollParent","overflowX","overflowY","getReferenceNode","isIE11","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","getRoot","findCommonOffsetParent","element1","element2","commonAncestorContainer","isOffsetContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","scrollLeft","getBordersSize","sideA","sideB","getSize","computedStyle","getWindowSizes","getClientRect","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","runIsIE","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","getBoundaries","boundariesElement","boundariesNode","isPaddingNumber","getArea","computeAutoPlacement","rects","refRect","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","findIndex","flip","isModifierEnabled","getSupportedPropertyName","upperProp","toCheck","getWindow","setupEventListeners","scrollElement","attachToScrollParents","scrollParents","isBody","removeEventListeners","isNumeric","setStyles","isModifierRequired","requesting","requested","validPlacements","BEHAVIORS","parseOffset","useHeight","basePlacement","frag","divider","ops","mergeWithPrevious","index2","shiftvariation","isVertical","shiftOffsets","transformProp","popperStyles","opSide","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flippedVariationByContent","flippedVariation","getOppositeVariation","subtractLength","bound","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","bothOddWidth","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","debounce","modifierOptions","PopperUtils","Defaults","_diff","_added","_deleted","_updated","_detailed","detailedDiff","updatedDiff","deletedDiff","addedDiff","_diff2","_added2","_deleted2","_updated2","_detailed2","ClientRequest","statusCodes","defaultProtocol","req","IncomingMessage","Agent","defaultMaxSockets","globalAgent","STATUS_CODES","METHODS","ReadableStream","writableStream","WritableStream","abortController","AbortController","blobConstructor","getXHR","XDomainRequest","checkTypeSupport","haveArrayBuffer","haveSlice","msstream","mozchunkedarraybuffer","vbArray","VBArray","capability","rStates","readyStates","UNSENT","OPENED","HEADERS_RECEIVED","fetchTimer","rawHeaders","trailers","rawTrailers","_fetchResponse","statusMessage","statusText","_destroyed","_resumeFetch","pipeTo","catch","getReader","_xhr","_pos","responseURL","_charset","charsetMatch","_read","_onXHRProgress","responseBody","MSStreamReader","ReadableState","EElistenerCount","debugUtil","debuglog","StringDecoder","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","setEncoding","enc","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","copyFromBufferString","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","ondata","cleanedUp","pipeOnDrain","increasedAwaitDrain","resume","dests","ev","wrap","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","afterTransform","_transformState","transforming","writechunk","needTransform","writeencoding","_flush","_this2","err2","objectAssign","pSlice","functionsHaveNames","pToString","arrbuf","assert","getName","something","rawname","stackStartFunction","AssertionError","_deepEqual","memos","multiline","ignoreCase","actualIndex","actualVisitedObjects","aIsArgs","bIsArgs","expectedException","isPrototypeOf","_throws","shouldThrow","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","getMessage","fn_name","next_line","notEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","notStrictEqual","throws","doesNotThrow","ifError","descriptors","formatRegExp","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","recurseTimes","simple","formatPrimitive","visibleKeys","arrayToHash","braces","formatProperty","formatArray","numLinesEst","reduceToSingleString","ar","NODE_DEBUG","pid","months","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","custom","callbackify","callbackified","maybeCb","rej","adler","crcTable","makeTable","EXITING","ENTERED","ENTERING","EXITED","UNMOUNTED","_reactDom","_reactLifecyclesCompat","initialStatus","parentGroup","transitionGroup","appear","isMounting","appearStatus","unmountOnExit","mountOnEnter","nextCallback","updateStatus","nextStatus","cancelNextCallback","getTimeouts","mounting","findDOMNode","performEnter","performExit","appearing","timeouts","enterTimeout","onEnter","safeSetState","onEntering","onTransitionEnd","onEntered","_this3","onExit","onExiting","onExited","setNextCallback","_this4","doesNotHaveTimeoutOrListener","addEndListener","_this$props","childProps","_default","classNamesShape","timeoutsShape","_propTypes","_ChildMapping","handleExited","firstRender","appeared","mounted","prevChildMapping","getInitialChildMapping","getNextChildMapping","currentChildMapping","getChildMapping","childFactory","isArgs","origKeys","keysShim","originalKeys","shim","GetIntrinsic","$apply","$call","$reflectApply","origSymbol","hasSymbolSham","numberIsNaN","$Object","$TypeError","dotAll","unicode","sticky","$gOPD","_utils","lhs","rhs","acc","own","subcontent","eventIndex","entered","adjust","startPositions","tokenizer","_tokenizer","childEvents","jumps","gaps","defineSkip","isInFirstContentOfListItem","_gfmTasklistFirstContentOfListItem","otherIndex","otherEvent","subevents","more","_movePreviousLineEndings","initializeFactory","createResolver","notText","atBreak","resolveAllLineSuffixes","extraResolver","tabs","_bufferIndex","miniflat","characters","asciiDigit","asciiControl","literalType","literalMarkerType","rawType","stringType","balance","destinationEnclosedBefore","destinationRaw","destinationEnclosed","destinationEnclosedEscape","destinationRawEscape","markerType","labelEscape","atFirstTitleBreak","atTitleBreak","titleEscape","thematicBreak","subresult","grandparents","toResult","typeFactory","tests","checks","anyFactory","allFactory","passThrough","unknownHandler","augment","ordered","footnoteOrder","subtype","referenceType","alt","xtend","definitions","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","Info","checksLength","xmlLang","xmlBase","xmlSpace","caseInsensitiveTransform","xmlnsxlink","xmlns","xmlnsXLink","caseSensitiveTransform","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabel","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","safeOptions","handle","deps","payload","payloads","_acequire","lookup","acequire","packagedModule","normalizeModule","packaged","ns","exportAce","ace","real","compliantExecNpcg","compliantLastIndexIncrement","getNativeFlags","extended","_xregexp","captureNames","Empty","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","makeArray","lengthBefore","array_splice","deleteCount","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","createEmpty","freezeObject","boxedString","splitString","thisp","reduceRight","sought","toInteger","setter","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","preventExtensions","isSealed","isFrozen","isExtensible","hasDontEnumBug","dontEnums","dontEnumsLength","dontEnum","ws","trimBeginRegexp","trimEndRegexp","getDocumentHead","hasCssClass","addCssClass","removeCssClass","toggleCssClass","setCssClass","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","importCssStylsheet","getInnerWidth","getInnerHeight","scrollbarWidth","outer","noScrollbar","withScrollbar","pageYOffset","getPageScrollTop","getPageScrollLeft","pageXOffset","currentStyle","setInnerText","getInnerText","getParentWindow","implement","oop","Keys","MODIFIER_KEYS","16","17","18","224","KEY_MODS","FUNCTION_KEYS","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","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","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","del","mods","keyCodeToString","keyString","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","os","platform","isWin","isOldIE","isGecko","isMozilla","Controllers","controllers","isOldGecko","isOpera","isWebKit","isAIR","isIPad","isChromeOS","isIOS","useragent","pressedKeys","stopEvent","getButton","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","deltaX","DOM_DELTA_PAGE","HORIZONTAL_AXIS","addMultiMouseDownListener","callbackName","timer","clicks","onMousedown","isNewClick","_clicks","onDblclick","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","keyLocation","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","win","nextFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","stringReverse","stringRepeat","stringTrimLeft","stringTrimRight","copyObject","copyArray","deepCopy","arrayToMap","createMap","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","deferredCall","fcn","schedule","isPending","delayedCall","defaultTimeout","_self","dom","lang","KEYS","MODS","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","isTouchPad","copied","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","onBlur","onFocus","resetSelection","syncSelection","syncValue","inputHandler","setSelectionRange","resetValue","setInputHandler","getInputHandler","afterContextMenu","sendText","onPaste","onTextInput","onInput","handleClipboardData","forceIEMime","mime","doCopy","isCut","getCopyText","onCut","onCommandKey","isAllSelected","selectAll","closeTimeout","onCompositionUpdate","$readOnly","lastValue","undo","canUndo","getRange","session","markUndoGroup","clearSelection","onCompositionEnd","syncComposition","onContextMenuClose","renderer","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","$undoManager","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","maxTop","scroller","typingResetTimeout","typing","detectArrowKeys","home","TextInputIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","cmp","anchor","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","$blockScrolling","moveToPosition","$focusTimout","inMultiSelectMode","captureMouse","startSelect","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","getBracketRange","getWordRange","isMultiLine","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","canScroll","isScrollableBy","scrollBy","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","setPosition","setClassName","offsetHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","hideTooltip","_signal","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","DragdropHandler","blankImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","characterWidth","editorRect","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","$cursorLayer","setBlinking","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","getReadOnly","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","eventTarget","unselectable","loadScript","isAbort","qualifyURL","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","defaultHandler","newCallback","_disabled_","old","removeDefaultHandler","capturing","optionsProvider","setOptions","optList","setOption","optionNames","$options","getOption","opt","forwardTo","handlesSet","reportError","AppConfig","$defaultOptions","defineOptions","resetOptions","setDefaultValue","setDefaultValues","optionHash","net","workerPath","modePath","themePath","$moduleUrls","scriptOptions","scriptUrl","currentScript","_currentScript","moduleUrl","sep","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","DefaultGutterHandler","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","insideStart","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$handlers","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","passEvent","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_getCharClass","chars","wType","nType","cType","rtlCandidate","_getCharacterType","EN","ON_R","AN","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","newLevel","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","wrapIndent","isLastRow","EOF","seenBidi","isBidiRow","docRow","updateRowLine","updateBidiMap","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","$useWrapMode","$wrapData","indent","isFullWidth","getScreenTabSize","endOfLine","markAsDirty","updateCharacterWidths","fontMetrics","$characterSize","bidiCharWidth","$measureCharWidth","getShowInvisibles","setShowInvisibles","setEolChar","eolChar","setTextDir","getPosLeft","visualIdx","getSelections","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","logicalIdx","charWidth","Range","startColumn","endColumn","isEqual","compareRange","containsRange","isEnd","isStart","setStart","setEnd","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","screenPos","$bidiHandler","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","rangeCount","rangeList","toSingleRange","MAX_TOKEN_COUNT","Tokenizer","rules","regExps","matchMappings","ruleRegExps","matchTotal","defaultToken","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","matchAttempts","skipped","consumeLineEnd","TextHighlightRules","$rules","addRules","getRules","embedRules","HighlightRules","escapeRules","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getCursorPosition","getWrapBehavioursEnabled","isSaneInsertion","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","leftChar","rightChar","rightToken","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","$matchTokenType","iterator2","packages","addUnicodePackage","Ll","Lu","Lt","Lm","Lo","Mn","Me","Nl","No","Ps","Pe","Pi","Pf","Po","Sm","Sk","So","Zs","Zl","Zp","Cf","Co","Cs","Cn","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","insertInLine","testRemove","spaces","lineCommentEnd","regexpEnd","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","autoOutdent","createModeDelegates","$modes","delegations","$delegator","transformAction","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","scheduleStart","$updateOnChange","SearchHighlight","clazz","setRegexp","MAX_RANGES","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","getNextFoldTo","kind","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","lastFoldEndColumn","RangeList","excludeEdges","addList","substractPoint","containsPoint","rangeAtPoint","clipped","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","restoreRange","Folding","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","$brackets","typeRe","openBracket","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","undoManager","$syncInformUndoManager","mergeUndoDeltas","$defaultUndoManager","redo","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","getMode","$scrollTop","setScrollTop","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","lineWidgetsWidth","lineWidgetWidth","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","Search","$matchIterator","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","$mouseHandler","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","cursorPos","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","$mergeNextCommand","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","getAnimatedScroll","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","originalRange","$getSelectedRows","getNumberAt","_numberRx","charRange","nr","decimals","nnr","replaceRange","sel","totalDiff","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","animate","alignCursor","getCursorPositionScreen","matchType","bracketType","brackets","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","getText","$fixedWidth","$padding","$computePadding","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingLeft","paddingRight","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","drawBidiSingleLineMarker","firstRowScreen","stringBuilder","extraStyle","curr","clazzModified","lineRange","range1","radiusClass","extraLength","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","$renderLinesFragment","$textToken","$renderToken","tabIdx","idx4","classToUse","renderIndentGuide","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","changes","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","isRoot","$measureSizes","boldSize","charSizes","allowBoldFonts","setPolling","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","textToScreenCoordinates","pageX","pageY","keepTextAreaAtCursor","$themeId","$theme","isDark","setMouseCursor","maxPixelHeight","workerUrl","$workerBlob","blobURL","WorkerClient","topLevelNamespaces","classname","importScripts","$sendDeltaQueue","changeListener","onMessage","nameToUrl","normalizePath","$normalizePath","tlns","callbackId","deltaQueue","cmd","ex","attachToDocument","UIWorkerClient","messageBuffer","main","emitSync","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","$others","undoStack","$undostack","$undoStackDepth","selectionBefore","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","nl","additive","screenLead","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","coverGutter","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","findAnnotations","onmousedown","Renderer","edit","createEditSession","argsTag","mapTag","objectTag","setTag","reIsHostCtor","typedArrayTags","moduleExports","arraySome","mapToArray","setToArray","arrayProto","coreJsData","maskSrcKey","uid","IE_PROTO","reIsNative","nativeIsBuffer","nativeKeys","symbolProto","symbolValueOf","Hash","SetCache","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseTimes","isIndex","assocIndexOf","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","getAllKeys","objLength","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","isMasked","isPrototype","arrValue","othIndex","keysFunc","symbolsFunc","arrayPush","baseGetAllKeys","getMapData","LARGE_ARRAY_SIZE","resIndex","editorOptions","editorEvents","baseFor","createBaseFor","cacheHas","arrStacked","othStacked","srcValue","castPath","toKey","isKey","stringToPath","baseEach","createBaseEach","isDeep","getSymbolsIn","cloneArrayBuffer","baseCreate","baseMerge","createAssigner","srcIndex","nativeMax","nativeMin","lastThis","maxWait","lastCallTime","lastInvokeTime","maxing","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","getContrastingColor","isValidHex","toState","simpleCheckForValidColor","_each2","_tinycolor2","passed","oldHue","toHsl","toHsv","toRgb","lh","TabTitle","actions","reactIs","REACT_STATICS","contextType","getDefaultProps","getDerivedStateFromError","mixins","KNOWN_STATICS","caller","arity","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","symbolObservablePonyfill","createThunkMiddleware","extraArgument","thunk","withExtraArgument","MapShim","class_1","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","resolvePending","timeoutCallback","addObserver","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","characterData","_b","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getHTMLElementContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","isDocumentElement","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","ResizeObserver","acceptedFiles","acceptedFilesArray","fileName","baseMimeType","validType","endsWith","vfile","unified","remarkRehype","uriTransformer","childrenToReact","hastChildrenToReact","ReactMarkdown","deprecated","astPlugins","allowDangerousHtml","escapeHtml","allowNode","allowedTypes","disallowedTypes","includeNodeIndex","deprecation","use","remarkPlugins","plugins","rehypePlugins","hastNode","runSync","Fragment","schema","listDepth","transformLinkUri","allowElement","allowedElements","arrayOf","disallowedElements","unwrapDisallowed","sourcePos","rawSourcePos","skipHtml","includeElementIndex","linkTarget","transformImageUri","warningIssued","syntax","fromMarkdown","toMarkdown","Parser","blockTokenizers","Compiler","visitors","_ace2","_split2","__awaiter","_arguments","fulfilled","__generator","sent","trys","verb","__read","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","getInvalidTypeRejectionErr","accept","messageSuffix","getTooLargeRejectionErr","getTooSmallRejectionErr","TOO_MANY_FILES_REJECTION","fileAccepted","isAcceptable","accepts","fileMatchSize","allFilesAccepted","accepted","sizeMatch","isPropagationStopped","isEvtWithFiles","onDocumentDragOver","isIe","isIeOrEdge","composeEventHandlers","fns","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_objectSpread","Dropzone","_useDropzone","_ref2$disabled","_ref2$getFilesFromEve","getFilesFromEvent","fromEvent","_ref2$maxSize","_ref2$minSize","_ref2$multiple","onDropAccepted","onDropRejected","onFileDialogCancel","_ref2$preventDropOnDo","preventDropOnDocument","_ref2$noClick","noClick","_ref2$noKeyboard","noKeyboard","_ref2$noDrag","noDrag","_ref2$noDragEventsBub","noDragEventsBubbling","rootRef","useRef","inputRef","_useReducer","useReducer","initialState","_useReducer2","isFileDialogActive","draggedFiles","openFileDialog","useCallback","onWindowFocus","useEffect","onKeyDownCb","isEqualNode","onFocusCb","onBlurCb","onClickCb","dragTargetsRef","onDocumentDrop","onDragEnterCb","persist","isDragActive","onDragOverCb","_unused","onDragLeaveCb","targetIdx","onDropCb","fileRejections","_fileAccepted2","acceptError","_fileMatchSize2","sizeError","errors","composeHandler","composeKeyboardHandler","composeDragHandler","getRootProps","useMemo","_ref3$refKey","refKey","onKeyDown","tabIndex","onInputElementClick","getInputProps","_ref4","_ref4$refKey","inputProps","fileCount","isDragAccept","isDragReject","useDropzone","useImperativeHandle","Parent","Class","Wrapper","for","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","refs","isPureReactComponent","__self","__source","$$typeof","keyPrefix","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","createRef","lazy","_ctor","_status","memo","useContext","useDebugValue","useLayoutEffect","useState","currentTarget","extractEvents","phasedRegistrationNames","registrationName","stateNode","acceptsBooleans","attributeNamespace","sanitizeURL","xlinkHref","db","_debugOwner","_debugSource","return","_valueTracker","stopTracking","defaultChecked","_wrapperState","initialChecked","controlled","defaultSelected","dangerouslySetInnerHTML","MSApp","execUnsafeLocalFunction","animationend","animationiteration","animationstart","transitionend","transition","effectTag","memoizedState","dehydrated","sibling","_dispatchListeners","_dispatchInstances","isPersistent","correspondingUseElement","topLevelType","nativeEvent","targetInst","ancestors","eventSystemFlags","containerInfo","blockedOn","unstable_runWithPriority","hydrate","unstable_scheduleCallback","unstable_NormalPriority","bubbled","captured","eventPriority","unstable_UserBlockingPriority","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","orphans","widows","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","menuitem","br","embed","hr","img","keygen","wbr","HTMLIFrameElement","contentWindow","contentEditable","autoFocus","__html","dispatchConfig","_targetInst","be","Interface","isDefaultPrevented","ee","eventPool","fe","destructor","de","getPooled","eventPhase","bubbles","cancelable","isTrusted","ge","he","ie","je","ke","le","me","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","ve","locale","te","ue","we","datetime","password","tel","week","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","_isInputEventSupported","Ne","Oe","Alt","Control","Meta","Shift","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","buttons","relatedTarget","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","bf","df","ef","ff","hf","jf","anchorNode","anchorOffset","focusNode","focusOffset","kf","onSelect","lf","elapsedTime","pseudoElement","mf","nf","of","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","20","rf","sf","tf","targetTouches","uf","vf","deltaZ","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Df","Ef","Ff","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","shared","vg","wg","suspenseConfig","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","Lg","Mg","Ng","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","dh","eh","fh","gh","hh","memoizedProps","revealOrder","ih","responder","jh","kh","mh","nh","oh","ph","qh","rh","sh","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","xh","yh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","di","ei","fi","gi","pendingContext","ni","qi","retryTime","ji","fallback","unstable_avoidThisFallback","li","rendering","renderingStartTime","tailExpiration","tailMode","mi","ri","si","wasMultiple","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","WeakSet","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","Di","Mi","Ni","Oi","Qi","_reactRootContainer","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","Pj","Qj","Sj","firstSuspendedTime","activeElementDetached","focusedElem","Tj","Uj","Vj","Wj","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","_internalRoot","gk","hk","jk","unmount","Lj","lk","Events","findFiberByHostInstance","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","createPortal","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","port2","port1","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","propFullName","secret","getShim","ReactPropTypes","instanceOf","objectOf","oneOf","exact","checkPropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","originalModule","prefilter","groupCollapsed","groupEnd","logger","actionTransformer","titleFormatter","collapsed","started","startedTime","took","stateTransformer","errorTransformer","logErrors","diffPredicate","getMilliseconds","DeepDiff","observableDiff","applyDiff","applyChange","revertChange","isConflict","transformer","createLogger","runtime","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","awrap","skipTempReset","rootRecord","rval","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","extra","ucs2encode","digitToBasic","adapt","baseMinusTMin","basic","oldi","baseMinusT","inputLength","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","qs","regexp","maxKeys","kstr","vstr","stringifyPrimitive","ks","https","validateParams","toArrayBuffer","preferBinary","_opts","_body","_headers","setHeader","useFetch","decideMode","_fetchTimer","_onFinish","lowerName","unsafeHeaders","getHeader","removeHeader","headersObj","headersList","keyName","signal","_fetchAbortController","requestTimeout","credentials","_connect","ontimeout","_response","statusValid","flushHeaders","setNoDelay","setSocketKeepAlive","Timeout","clearFn","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","messagePrefix","onGlobalMessage","installPostMessageImplementation","installMessageChannelImplementation","installReadyStateChangeImplementation","task","arrayCopy","kRangeErrorMessage","Z_MIN_WINDOWBITS","Z_MAX_WINDOWBITS","Z_DEFAULT_WINDOWBITS","Z_MIN_CHUNK","Z_MAX_CHUNK","Z_DEFAULT_CHUNK","Z_MIN_MEMLEVEL","Z_MAX_MEMLEVEL","Z_DEFAULT_MEMLEVEL","Z_MIN_LEVEL","Z_MAX_LEVEL","Z_DEFAULT_LEVEL","Z_DEFAULT_COMPRESSION","bkeys","bkey","codes","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_VERSION_ERROR","ckeys","ckey","zlibBuffer","engine","nread","onEnd","zlibBufferSync","flushFlag","_finishFlushFlag","_processChunk","Deflate","Zlib","DEFLATE","Inflate","INFLATE","Gzip","GZIP","Gunzip","GUNZIP","DeflateRaw","DEFLATERAW","InflateRaw","INFLATERAW","Unzip","UNZIP","isValidFlushFlag","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","_chunkSize","finishFlush","_flushFlag","windowBits","memLevel","strategy","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","dictionary","_handle","_hadError","errno","_close","_strategy","emitCloseNT","createDeflate","createInflate","createDeflateRaw","createInflateRaw","createGzip","createGunzip","createUnzip","deflateSync","gzip","gzipSync","deflateRaw","deflateRawSync","unzip","unzipSync","inflateSync","gunzipSync","inflateRaw","inflateRawSync","availInBefore","availOutBefore","inOff","writeSync","availInAfter","availOutAfter","have","newReq","EE","_isStdio","didOnEnd","cleanup","Zstream","zlib_deflate","zlib_inflate","init_done","write_in_progress","pending_close","gzip_id_bytes_read","deflateEnd","strm","inflateEnd","in_off","in_len","out_off","out_len","avail_in","next_in","avail_out","next_out","_checkError","_afterSync","_after","next_expected_header_byte","inflateSetDictionary","_init","_setDictionary","_reset","deflateInit2","Z_DEFLATED","inflateInit2","deflateSetDictionary","deflateReset","inflateReset","total_in","total_out","data_type","configuration_table","utils","trees","adler32","errorCode","rank","flush_pending","pending_buf","pending_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","MIN_MATCH","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","_tr_init","max_block_size","max_start","deflateInit","deflateSetHeader","old_flush","beg","hcrc","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","D_CODES","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","bi_reverse","gen_codes","next_code","init_block","LITERALS","END_BLOCK","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","L_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","inflate_fast","inflate_table","zswap32","InflateState","havedict","dmax","wbits","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","ncode","nlen","ndist","lendyn","distdyn","sane","was","inflateResetKeep","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","_in","_out","from_source","here_bits","here_op","here_val","last_bits","last_op","last_val","here","hbuf","inf_leave","xflags","extra_len","inflateGetHeader","inflateInfo","s_window","lcode","dcode","lmask","dmask","dolen","dodist","lbase","lext","dbase","dext","lens_index","table_index","incr","drop","used","huff","base_index","MAXBITS","offs","extra_index","Z_TREES","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_BINARY","Z_TEXT","Z_UNKNOWN","getRangeAt","enoughArguments","mutationMacro","textNodeIfPrimitive","TemporaryPrototype","TemporaryTokenList","wrapVerifyToken","hOP","DOMTokenList","noClassName","isSVG","_isSVG","classListDescriptor","DocumentFragmentPrototype","NodePrototype","CharacterData","CharacterDataPrototype","DocumentType","DocumentTypePrototype","ElementPrototype","HTMLSelectElement","selectRemove","matchesSelector","webkitMatchesSelector","khtmlMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","had","replaceWith","_dom4","o_O","verifyToken","raf","rAF","cAF","goOn","CustomEvent","defaultInitDict","initCustomEvent","eventInitDict","$Event","KeyboardEvent","$KeyboardEvent","initType","altGraphKey","language","initKeyboardEvent","keyIdentifier","withDefaults","withInitValues","initKeyEvent","$MouseEvent","initMouseEvent","what","dataScope","$3","DOMMap","dispatched","shouldDrop","Handler","__ce__","handleEvent","Dict","createEventListener","dE","aEL","rEL","getListenerKey","dm","createAEL","createREL","EventTarget","HTMLDocument","Window","_gud2","createEventEmitter","changedBits","calculateChangedBits","_Consumer$contextType","contextProp","_Component2","_temp2","_addClass","_removeClass","getClassNames","activeClassName","reflowAndAddClass","appearClassName","doneClassName","enterClassName","isStringClassNames","_this$getClassNames6","_hasClass","replaceClassName","origClass","classToRemove","_args","handleEnter","handleLifecycle","handleEntering","handleEntered","handleExit","handleExiting","_len6","_key6","_len7","_key7","originalArgs","_child$props","inProp","_React$Children$toArr","mergeChildMappings","getProp","nextChildMapping","hasPrev","hasNext","prevChild","isLeaving","mapFn","mapper","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","isEnumerable","hasProtoEnumBug","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","hasToStringTag","isStandardArguments","isLegacyArguments","supportsStandardArguments","callBind","getPolyfill","ERROR_MESSAGE","binder","boundLength","boundArgs","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","asyncGenIterator","TypedArray","INTRINSICS","Atomics","decodeURI","encodeURI","EvalError","SharedArrayBuffer","SyntaxError","URIError","$replace","rePropName","reEscapeChar","subString","getBaseIntrinsic","allowMissing","symObj","syms","regexExec","isRegexMarker","badStringifier","throwRegexMarker","toPrimitive","gOPD","flagsBound","TypeErr","getDay","tryDateObject","deletedValues","deleted","updated","VMessage","VFile","fatal","messages","VMessagePrototype","parseOrigin","ruleId","proc","history","assertPart","assertNonEmpty","assertPath","dirname","basename","extname","stem","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","firstNonSlashEnd","seenNonSlash","extIndex","unmatchedSlash","startPart","preDotState","joined","bail","plain","trough","frozen","attachers","transformers","freezeIndex","assertUnfrozen","addPlugin","addPreset","plugin","assertParser","newable","assertCompiler","assertNode","compile","assertDone","processSync","executor","pipeline","asyncName","hasOwnConstructor","hasIsPrototypeOf","copyIsArray","invoked","mdastExtensions","transforms","canContainEols","autolink","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","blockQuote","characterEscape","characterReference","codeFenced","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeIndented","codeText","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreakEscape","hardBreak","hardBreakTrailing","htmlFlow","htmlFlowData","htmlText","htmlTextData","listItem","_spread","listItemValue","listOrdered","listUnordered","paragraph","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","onexitdata","characterEscapeValue","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","safeFromInt","codeFencedFence","onexithardbreak","lineEnding","setextHeadingLineSequence","setextHeadingText","listStart","tokenStack","listStack","prepareList","stringifyPosition","tailIndex","tailEvent","firstBlankLineIndex","atMarker","containerBalance","listSpread","and","compiler","postprocess","preprocessor","combineExtensions","createTokenizer","initializer","contentStart","contentInitial","inspectResult","childFlow","childToken","continued","inspectConstruct","subcontinued","inspectStart","containerState","continuation","inspectContinue","inspectLess","currentConstruct","concrete","flowContinue","inspectDone","interrupt","interruptible","containerConstruct","inspectFlowEnd","_closeFlow","lazyFlowConstruct","inspectLazy","flowEnd","documentContinue","documentContinued","flowStart","containerContinue","exitContainers","continueFlow","documentAfterPeek","initial","flowInitial","afterConstruct","prefixSize","subtokenize","contentEnd","continuationConstruct","contentContinue","prefixed","serializeChunks","sliceChunks","columnStart","resolveAllConstructs","accountForPotentialSkip","constructFactory","addResult","onsuccessfulcheck","go","onreturn","returnState","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","handleConstruct","startPrevious","startCurrentConstruct","startEventsIndex","startStack","atTab","startBufferIndex","endBufferIndex","text$1","attention","headingAtx","labelStartImage","labelStartLink","setextUnderline","42","43","62","91","60","95","126","92","93","classifyCharacter","movePoint","_open","openingSequence","closingSequence","nextEvents","asciiAtext","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","asciiPunctuation","decodeEntity","asciiHexDigit","_interopDefaultLegacy","decodeEntity__default","numeric","closingFenceConstruct","sizeOpen","closingSequenceEnd","initialPrefix","sequenceOpen","infoOpen","openAfter","infoAfter","indentedContentConstruct","afterPrefix","gap","tailExitIndex","headEnterIndex","labelAfter","titleConstruct","fenceOpenInside","headingBreak","htmlBlockNames","htmlRawNames","startTag","declarationStart","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","basicSelfClosing","completeAttributeNameBefore","completeClosingTagAfter","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCharacterDataInside","continuationAtLineEnding","nextBlankConstruct","htmlContinueStart","continuationRawEndTag","declarationOpen","instruction","tagOpen","commentOpen","cdataOpen","commentStart","commentStartDash","commentClose","atLineEnding","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","furtherBlankLines","notInCurrentItem","indentConstruct","atCarriageReturn","mdast2hast","bridge","mutate","allowDangerousHTML","deprecationWarningIssued","dangerous","footnoteById","hName","hProperties","hChildren","generated","foot","normalise","getterFactory","gather","def","backReference","listItems","blockquote","break","footnoteReference","footnote","imageReference","inlineCode","linkReference","toml","yaml","footnoteDefinition","revert","listItemLoose","listLoose","align","alignLength","xlink","aria","acceptcharset","htmlfor","httpequiv","abbr","acceptCharset","accessKey","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","autoCapitalize","autoPlay","charSet","cite","colSpan","controlsList","dateTime","decoding","dirName","download","encType","enterKeyHint","formAction","formEncType","formMethod","formNoValidate","formTarget","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inputMode","integrity","isMap","itemId","itemProp","itemRef","itemScope","itemType","loading","manifest","maxLength","minLength","muted","nonce","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforePrint","onBeforeUnload","onCancel","onCanPlay","onCanPlayThrough","onClose","onCueChange","onDblClick","onDrag","onDragExit","onDurationChange","onEmptied","onEnded","onFormData","onHashChange","onInvalid","onKeyPress","onKeyUp","onLanguageChange","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessageError","onMouseEnter","onMouseLeave","onMouseOut","onMouseOver","onOffline","onOnline","onPageHide","onPageShow","onPause","onPlay","onPlaying","onPopState","onRateChange","onRejectionHandled","onReset","onSecurityPolicyViolation","onSeeked","onSeeking","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","ping","playsInline","poster","referrerPolicy","required","rowSpan","sandbox","scoped","seamless","slot","span","spellCheck","srcDoc","srcLang","srcSet","typeMustMatch","useMap","aLink","archive","borderColor","cellPadding","cellSpacing","charOff","codeBase","codeType","compact","declare","frameBorder","hSpace","leftMargin","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","rev","rightMargin","scrolling","standby","summary","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","security","onelement","protocols","colon","ReactIs","hastToReact","commas","toReact","tableElements","parentSchema","inline","getInputElement","getElementsBeforeCount","isHeader","sourcePosition","siblingCount","styleReplacer","parseStyle","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillRule","floodColor","fontSizeAdjust","fontStretch","fontVariant","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onFocusIn","onFocusOut","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","renderingIntent","shapeRendering","stopColor","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","textAnchor","textDecoration","textRendering","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","alphabetic","bandwidth","baseFrequency","baseProfile","calcMode","clipPathUnits","contentScriptType","contentStyleType","defaultAction","diffuseConstant","dur","edgeMode","editable","externalResourcesRequired","filterRes","filterUnits","focusable","focusHighlight","fx","fy","glyphRef","gradientTransform","gradientUnits","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","numOctaves","orient","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","stemh","stemv","stitchTiles","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","transformBehavior","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan","dash","camelcase","datasetToProperty","cap","kebab","datasetToAttribute","padLeft","padRight","declarations","hasIterator","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","lineno","updatePosition","whitespace","errorsList","silent","comments","decl","decls","strikethrough","tasklist","w3","domain","hasUnderscoreInLastSegment","hasUnderscoreInLastLastSegment","namedCharacterReference","punctuationContinuation","punctuation","inPath","continuedPunctuation","parenAtPathEnd","pathEnd","trailingPunctuation","wwwAutolink","previousWww","httpAutolink","previousHttp","slash1","slash2","emailAutolink","hasDot","gfmAtext","previousEmail","atext","dotContinuation","dashOrUnderscoreContinuation","afterDashOrUnderscore","single","singleTilde","removeRemainingSequences","seenDelimiter","hasDash","tableHeaderCount","_align","cellDividerHead","inCellContentHead","cellBreakHead","setextUnderlineMini","createSpace","rowStartDelimiter","atRowEndHead","inWhitespaceHead","inCellContentEscapeHead","atDelimiterRowBreak","rowEndDelimiter","inWhitespaceDelimiter","inFillerDelimiter","afterLeftAlignment","afterRightAlignment","tableClose","nextPrefixedOrBlank","tableContinue","bodyStart","rowStartBody","cellDividerBody","inCellContentBody","cellBreakBody","tableBodyClose","tableBodyContinue","atRowEndBody","inWhitespaceBody","inCellContentEscapeBody","inHead","inDelimiterRow","inRow","cellStart","spaceFactory","tasklistCheck","spaceThenNonSpace","autolinkLiteral","taskListItem","ccount","findAndReplace","enterLiteralAutolinkValue","findUrl","isCorrectDomain","closingParenIndex","openingParens","closingParens","trail","splitUrl","findEmail","literalAutolink","literalAutolinkEmail","literalAutolinkHttp","literalAutolinkWww","handlerFactory","subhandler","toExpression","toFunction","toPairs","ignored","grandparent","enterCell","tableData","tableHeader","tableRow","exitCheck","taskListCheckValueChecked","taskListCheckValueUnchecked","firstParaghraph","unsafe","notInConstruct","inConstruct","phrasing","handleDelete","defaultInlineCode","markdownTable","tableCellPadding","alignDelimiters","tablePipeAlign","around","serializeData","subexit","handleTableRowAsData","handleTableAsData","tableCell","handleTableCell","patternCompile","_compiled","columnIndex","columnLength","largest","delimiterStart","delimiterEnd","alignments","defaultStringLength","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","toAlignment","trailingWhitespace","defaultListItem","bullet","checkBullet","listItemIndent","checkListItemIndent","incrementListMarker","indentLines","blank","eol","_brace2","_lodash2","_editorOptions","ReactAce","_props","onBeforeLoad","onValidate","cursorStart","wrapEnabled","_props$scrollMargin","refEditor","editorProps","debounceChangePeriod","handleMarkers","availableOptions","handleOptions","oldProps","appliedClassesArray","oldClass","handleScrollMargins","margins","setScrollMargins","currentMarkers","_i2","_ref$inFront","_props2","divStyle","updateRef","enableBasicAutocompletion","enableLiveAutocompletion","_brace","_lodash4","Split","SplitComponent","splitEditor","getEditor","defaultValueForEditor","valueForEditor","newAnnotations","newMarkers","setOrientation","BELOW","BESIDE","setSplits","nextValue","oldAnnotations","oldMarkers","reLeadingDot","symbolToString","baseGet","isHostObject","baseToString","memoized","Cache","$container","$splits","$editorCSS","$editors","$orientation","$cEditor","UndoManagerProxy","$u","$createEditor","$fontSize","getSplits","getCurrentEditor","keybinding","$cloneSession","undoManagerProxy","getOrientation","editorWidth","editorHeight","PythonHighlightRules","keywordMapper","strPre","integer","pointFloat","floatNumber","stringEscape","BaseFoldMode","PythonFoldMode","outdents","flattenNames","_isString3","_forOwn3","_isPlainObject3","_map3","things","thing","fromRight","arrayMap","baseIteratee","baseMap","baseMatches","baseMatchesProperty","baseIsMatch","getMatchData","matchesStrictComparable","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","hashClear","hashDelete","hashGet","hashHas","hashSet","setCacheAdd","setCacheHas","objStacked","isStrictComparable","hasIn","memoizeCapped","baseHasIn","hasPath","hasFunc","baseProperty","basePropertyDeep","eachFunc","mergeClasses","_cloneDeep3","toMerge","baseClone","CLONE_DEEP_FLAG","arrayEach","baseAssign","baseAssignIn","cloneBuffer","copySymbols","copySymbolsIn","getAllKeysIn","initCloneArray","initCloneByTag","initCloneObject","isSet","keysIn","cloneableTags","isFlat","isFull","isFunc","subValue","nativeKeysIn","isProto","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","reFlags","objectCreate","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","autoprefix","_forOwn2","msBorderRadius","MozBorderRadius","OBorderRadius","WebkitBorderRadius","msBoxShadow","MozBoxShadow","OBoxShadow","WebkitBoxShadow","WebkitTouchCallout","KhtmlUserSelect","WebkitUserSelect","WebkitBoxFlex","MozBoxFlex","WebkitFlex","msFlex","flexBasis","WebkitFlexBasis","justifyContent","WebkitJustifyContent","msTransition","MozTransition","OTransition","WebkitTransition","msTransform","MozTransform","OTransform","WebkitTransform","otherElementStyles","otherStyle","expanded","Span","Hover","handleMouseOver","handleMouseOut","Active","setProp","assignMergeValue","baseMergeDeep","safeGet","isArrayLikeObject","toPlainObject","mergeFunc","isCommon","isTyped","baseRest","isIterateeCall","assigner","guard","overRest","setToString","otherArgs","baseSetToString","shortOut","nativeNow","lastCalled","stamp","_Checkboard2","handleChange","calculateChange","unbindEventListeners","onTouchStart","initialA","checkboardCache","serverCanvas","toDataURL","EditableInput","VALID_KEY_CODES","handleBlur","blurValue","setUpdatedValue","getNumberValue","getArrowOffset","updatedValue","handleDrag","dragLabel","dragMax","getValueObjectWithLabel","arrowOffset","onChangeValue","hideLabel","_props$direction","_h","Raised","zDepth","_throttle2","black","circle","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","_container$getBoundin","bright","_debounce2","_color2","Picker","ColorPicker","onChangeComplete","handleSwatchHover","optionalEvents","trimLeft","trimRight","tinyCounter","mathRound","mathMin","mathMax","mathRandom","tinycolor","named","hsla","hsva","hex8","parseIntFromHex","convertHexToDecimal","hex6","hex4","hex3","stringInputToObject","isValidCSSUnit","bound01","convertToPercentage","hsvToRgb","hslToRgb","boundAlpha","inputToRGB","_originalInput","_r","_g","_roundA","_gradientType","gradientType","_ok","_tc_id","rgbToHsl","rgbToHsv","rgbToHex","allow3Char","pad2","rgbaToArgbHex","convertDecimalToHex","desaturate","clamp01","saturate","greyscale","lighten","spin","complement","triad","tetrad","splitcomplement","analogous","monochromatic","modification","getBrightness","isLight","getOriginalInput","getFormat","getLuminance","RsRGB","GsRGB","BsRGB","setAlpha","toHsvString","toHslString","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toRgbString","toPercentageRgb","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex8String","secondHex8String","formatSet","formattedString","hasAlpha","_applyModification","_applyCombination","fromRatio","color2","rgb1","rgb2","readability","isReadable","wcag2","wcag2Parms","parms","validateWCAG2Parms","mostReadable","includeFallbackColors","bestColor","bestScore","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","isOnePointZero","processPercent","isPercentage","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","Swatch","_interaction","_ref$onClick","onHover","_ref$title","_ref$focusStyle","focusStyle","swatch","handleFocus","Focus","SketchFields","paddingTop","SketchPresetColors","borderTop","flexWrap","swatchWrap","handleClick","colorObjOrString","Direction","RegionCardinality","focusedCell","RenderMode","Resizable","resizeSensor","QuadrantType","batchArgs","rowIndexStart","rowIndexEnd","columnIndexStart","columnIndexEnd","getCumulativeHeightAt","numFrozenColumns","getCumulativeWidthAt","selectedRegions","rowHeights","objectConverter","inferColumns","columnSet","formatDate","reFormat","DELIMITER","parseRows","preformatBody","formatRow","customConverter","formatBody","formatRows","dsv","csvParse","tsv","tsvParse","dsvParse","crypto","msCrypto","rnds8","rng","uuid","byteToHex","rnds","TRACK_TYPES","trackEvent"],"mappings":"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AsB,YAAa,UAAWC,GAC9CD,GAAsB,cAAe,UAAWC,GAChDD,GAAsB,kBAAmB,eAAgBC,GAErDQ,EACFT,GAAsB,UAAW,KAAMC,IAEvCD,GAAsB,YAAa,KAAMC,GACzCD,GAAsB,UAAW,MAAOC,IAyC5C,SAAuBA,GAIrB,IAHA,IAAIgC,EAAc,GAEd/B,EAAoBD,EAAYn6O,OAC3BF,EAAI,EAAGA,EAAIs6O,IAAqBt6O,EACvCq8O,GAAehC,EAAYr6O,GAAK,KAElC,OAAOq8O,EA7CAC,CAAcjC,ICjBR,IACXkC,qBCtHW,wYDuHXC,eEvHW,oaFwHXC,aGxHW,mGHyHXC,aIzHW,qGJ0HXC,aK1HW,uGL2HXC,aM3HW,yGN4HXC,aO5HW,2GP6HXC,aQ7HW,6GR8HXC,aS9HW,+GT+HXC,aU/HW,qNVgIXC,cWhIW,yVXiIXC,iBYjIW,2WZkIXC,qBalIW,iMbmIXC,mCcnIW,4OdoIXC,6CepIW,4QfqIXC,uBgBrIW,qMhBsIXC,gBiBtIW,gLjBuIXC,oBkBvIW,4LlBwIXC,cmBxIW,0KnByIXC,eoBzIW,6KpB0IXC,gBqB1IW,gLrB2IXC,8BsB3IW,2NtB4IXC,oBuB5IW,4LvB6IXC,OwB7IW,yTxB8IXC,eyB9IW,8VzB+IXC,c0B/IW,yV1BgJXC,gB2BhJW,mW3BiJXC,c4BjJW,yV5BkJXC,qB6BlJW,2Y7BmJXC,gB8BnJW,4Q9BoJXC,gB+BpJW,4Q/BqJXC,0BgCrJW,iShCsJXC,sBiCtJW,wRjCuJXC,gBkCvJW,iSlCwJXC,iBmCxJW,kXnCyJXC,UoCzJW,kUpC0JXC,2BqC1JW,wwBrC2JXC,qBsC3JW,iItC4JXC,auC5JW,0gCvC6JXC,kBwC7JW,ouCxC8JXC,QyC9JW,6HzC+JXC,e0C/JW,wc1CgKXC,qB2ChKW,sQ3CiKXC,oB4CjKW,iY5CkKXC,gB6ClKW,ya7CmKXC,c8CnKW,irD9CoKXC,oC+CpKW,0zB/CqKXC,egDrKW,6ahDsKXC,sBiDtKW,wyEjDuKXC,iBkDvKW,2PlDwKXC,oBmDxKW,sJnDyKXC,kBoDzKW,0TpD0KXC,mBqD1KW,sTrD2KXC,sBsD3KW,+QtD4KXC,oBuD5KW,ovBvD6KXC,kBwD7KW,giOxD8KXC,iCyD9KW,8hBzD+KXC,e0D/KW,gpB1DgLXC,gC2DhLW,otD3DiLXC,2B4DjLW,6S5DkLXC,qC6DlLW,uQ7DmLXC,kB8DnLW,28C9DoLXC,c+DpLW,oc/DqLXC,2BgErLW,mxChEsLXC,wBiEtLW,0xEjEuLXC,QkEvLW,m0ClEwLXC,iBmExLW,kdnEyLXC,0BoEzLW,gepE0LXC,uBqE1LW,s0BrE2LXC,sBsE3LW,ixBtE4LXC,gBuE5LW,8wCvE6LXC,kBwE7LW,o6CxE8LXC,ayE9LW,sqBzE+LXC,a0E/LW,4uB1EgMXC,Q2EhMW,q+B3EiMXC,iB4EjMW,2S5EkMXC,Y6ElMW,4jB7EmMXC,W8EnMW,6lB9EoMXC,kC+EpMW,4kC/EqMXC,iBgFrMW,2jBhFsMXC,ciFtMW,idjFuMXC,mBkFvMW,88DlFwMXC,6BmFxMW,giDnFyMXC,6BoFzMW,ggBpF0MXC,kBqF1MW,69BrF2MXC,csF3MW,snGtF4MXC,cuF5MW,8kBvF6MXC,UwF7MW,8vExF8MXC,kByF9MW,67BzF+MXC,kB0F/MW,wmB1FgNXC,qC2FhNW,21F3FiNXC,c4FjNW,6I5FkNXC,uB6FlNW,yoC7FmNXC,oB8FnNW,wW9FoNXC,a+FpNW,k0B/FqNXC,agGrNW,q8BhGsNXC,aiGtNW,00BjGuNXC,+BkGvNW,g4FlGwNXC,emGxNW,ipBnGyNXC,uBoGzNW,2mBpG0NXC,qBqG1NW,qjFrG2NXC,gBsG3NW,k6BtG4NXC,uBuG5NW,w0CvG6NXC,4BwG7NW,89BxG8NXC,mByG9NW,2bzG+NXC,2B0G/NW,ihD1GgOXC,qB2GhOW,47B3GiOXC,c4GjOW,ozC5GkOXC,gB6GlOW,wgB7GmOXC,gB8GnOW,g9B9GoOXC,mB+GpOW,4+D/GqOXC,2BgHrOW,y7HhHsOXC,oBiHtOW,0iBjHuOXC,kBkHvOW,+nElHwOXC,wBmHxOW,4sCnHyOXC,aoHzOW,w1BCMf,SAASC,GAAexjP,GAItB,OAFAA,EAASA,EAAOiQ,QAAQ,UAAW,KAErBA,QAAQ,wBAAwB,SAAUC,GAItD,IAFA,IAAIuzO,EAAgBvzO,EAAMA,MAAM,QAAQnQ,OACpCoQ,EAAc,GAC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GAAkB,kDAClBA,GACE,2DACFA,GAAkB,qCAElBA,GACE,gFACFA,GACE,uEACFA,GACE,2FAGFA,GACE,sFAEFA,GACE,gFAEFA,GAAkB,iDAClBA,GACE,qFACFA,GACE,kEAEFA,GAAkB,oBAClBA,GAAkB,mDAClBA,GAAkB,oBAElBA,GAAkB,mDAClBA,GAAkB,8CAClBA,GACE,sFAEFA,GAAkB,uCAClBA,GACE,gGACFA,GAAkB,oDAClBA,GACE,wIACFA,GACE,kHACFA,GACE,oHACFA,GACE,qFAEFA,GACE,oGACFA,GAAkB,mDAClBA,GACE,+FACFA,GACE,gIACFA,GACE,6EAEFA,GAAkB,yDAClBA,GACE,4HACFA,GACE,gHACFA,GACE,+HAEFA,GACE,2EACFA,GACE,yJACFA,GACE,4JACFA,GACE,2IAGFA,GAAkB,8BAElBA,GACE,yHACFA,GAAkB,oCAElBA,GACE,yHAEFA,GAAkB,mCAClBA,GACE,0HACFA,GACE,6GACFA,GACE,8EACFA,GAAkB,YAElBA,GACE,0EACFA,GACE,gLAEFA,GACE,8FACFA,GACE,sEACFA,GAAkB,gCAElBA,GAAkB,8BAClBA,GAAkB,uCAClBA,GAAkB,WAClBA,GAAkB,4BAClBA,GAAkB,YAGlBA,GAAkB,yDAElBA,GACE,mIACFA,GACE,mIACFA,GACE,oIACFA,GACE,oFACFA,GACE,sFAEFA,GAAkB,wBAClBA,GAAkB,uCAClBA,GACE,uGACFA,GAAkB,WAClBA,GACE,sGACFA,GAAkB,YAClBA,GAAkB,WAClBA,GAAkB,6CAClBA,GAAkB,YAElBA,GAAkB,yBAClBA,GACE,0EACFA,GAAkB,gCAClBA,GACE,mKACFA,GAAkB,WAClBA,GACE,4NACFA,GAAkB,YAClBA,GAAkB,kDAClBA,GAAkB,WAClBA,GAAkB,uCAClBA,GAAkB,YAElBA,GACE,iFAEFA,GAAkB,aAElBA,GAAkB,gCAIfyiE,IACCt9S,YAAQy8S,EAAwBuC,sBAClCnkE,GACE,8CACAwjE,EACA,UAEAr+S,YAAQy8S,EAAwBwC,oBAClCpkE,GACE,kEACAyjE,GACA,YACEt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V,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,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CV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,EAzsCL,EA+sCJ,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,O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,KAChC0rI,EAAmB,IAAI1rI,IAEzB4rI,EAAe/D,EAAWpqY,MAC1BytY,GACE9qY,MACAsrY,EACA,QACAE,EAAanuY,WACb3V,EACAugZ,EACA12L,GAEFu5L,GACEv2W,GACA+2W,EACA,SACAE,EAAah0P,YACb9vJ,EACAugZ,EACA12L,GAEFu5L,GACEl5Q,GACA05Q,EACA,QACAE,EAAa3tX,WACbn2B,EACAugZ,EACA12L,GAEFu5L,GACEn3F,QACA23F,EACA,cACAE,EAAaxrI,iBACbt4Q,EACAugZ,EACA12L,IAEO/pN,YAAQigZ,EAAWmE,SACtBN,aAA4BjF,KAChCiF,EAAmB,IAAIjF,IAEzBmF,EAAe/D,EAAWmE,OAC1Bd,GACE1E,GACAkF,EACA,cACAE,EAAap4O,iBACb1rK,EACAugZ,EACA12L,GAEFu5L,GACEl5Q,GACA05Q,EACA,YACAE,EAAa7kL,eACbj/N,EACAugZ,EACA12L,GAEFu5L,GACEl5Q,GACA05Q,EACA,WACAE,EAAa5kL,cACbl/N,EACAugZ,EACA12L,GAEFu5L,GACErsX,OACA6sX,EACA,SACAE,EAAah+X,YACb9lB,EACAugZ,EACA12L,GAEFu5L,GACErsX,OACA6sX,EACA,SACAE,EAAah0P,YACb9vJ,EACAugZ,EACA12L,IAEO/pN,YAAQigZ,EAAWoE,kBACtBP,aAA4BpL,KAChCoL,EAAmB,IAAIpL,IAEzBsL,EAAe/D,EAAWoE,gBAC1Bf,GACEl5Q,GACA05Q,EACA,QACAE,EAAa3tX,WACbn2B,EACAugZ,EACA12L,GAEFu5L,GACEl5Q,GACA05Q,EACA,eACAE,EAAa7iL,kBACbjhO,EACAugZ,EACA12L,GAEFu5L,GACErsX,OACA6sX,EACA,eACAE,EAAa5iL,kBACblhO,EACAugZ,EACA12L,IAEO/pN,YAAQigZ,EAAWqE,eACtBR,aAA4B1L,KAChC0L,EAAmB,IAAI1L,IAEzB4L,EAAe/D,EAAWqE,aAC1BhB,GACEl5Q,GACA05Q,EACA,QACAE,EAAa3tX,WACbn2B,EACAugZ,EACA12L,GAEFu5L,GACErsX,OACA6sX,EACA,YACAE,E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EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAe,EACA,kBACAy9L,EAAchgM,gBACdvK,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACAu/E,EACA,QACAy9L,EAAc/wX,MACdwmL,EACA4jM,EACA12L,GAEFu5L,GACEvJ,GACApwL,EACA,WACAy9L,EAActvX,SACd+kL,EACA4jM,EACA12L,GA1HJ,SACEJ,EACAs2L,EACApjM,EACA4jM,EACA12L,GAEK/pN,YAAQigZ,IAIbqD,GACExD,GACAn2L,EACA,cACAs2L,EACApjM,EACA4jM,EACA12L,GA0GFs9L,CACE19L,EACAy9L,EAAc//L,YACdxK,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAxiG,EACA,eACAy9L,EAAc9/L,aACdzK,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA0yL,EACA,QACAy9L,EAAcxsX,MACdiiL,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA0yL,EACA,SACAy9L,EAAczgY,OACdk2L,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAm4B,EACA,kBACAy9L,EAAc7/L,gBACd1K,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAm4B,EACA,yBACAy9L,EAAc5/L,uBACd3K,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAm4B,EACA,6BACAy9L,EAAc3/L,2BACd5K,EACA4jM,EACA12L,GAEFu5L,GACE1rS,GACA+xG,EACA,iBACAy9L,EAAc1/L,eACd7K,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACA4qD,EACA,2BACAy9L,EAAchoP,yBACdy9C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA0yL,EACA,2BACAy9L,EAAcz/L,yBACd9K,EACA4jM,EACA12L,KAIJ,SAAoBL,EAAQy8L,EAAQp8L,EAAkB02L,GACpD,IAAI6G,EAAUnB,EAAO/oW,IACrB,GAAKp9C,YAAQsnZ,GAAb,CAIA,IAAIzqM,EAAWylM,GAAmBgF,EAAQzqM,UACtCz/J,EAAMssK,EAAOtsK,IACZp9C,YAAQo9C,KACXssK,EAAOtsK,IAAMA,EAAM,IAAIu7N,IAGzB2qI,GACEn3F,QACA/uQ,EACA,OACAkqW,EAAQpyM,KACR2H,EACA4jM,EACA12L,GAEFu5L,GACE7gY,EACA26B,EACA,aACAkqW,EAAQxsT,WACR+hH,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAxrK,EACA,kBACAkqW,EAAQlgM,gBACRvK,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA/uQ,EACA,OACAkqW,EAAQ7xS,KACRonG,EACA4jM,EACA12L,GAEF26L,GACEtnW,EACA,WACAkqW,EAAQp6L,SACRrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA/uQ,EACA,UACAkqW,EAAQvxI,QACRl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACAhtF,EACA,eACAkqW,EAAQnmL,aACRtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAmmB,EACA,eACAkqW,EAAQlmL,aACRvkB,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAz6M,EACA,UACAkqW,EAAQnuJ,QACRt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACA3hH,EACA,2BACAkqW,EAAQloP,yBACRy9C,EACA4jM,EACA12L,KAIJ,SAAyBL,EAAQy8L,EAAQp8L,EAAkB02L,GACzD,IAAI8G,EAAepB,EAAOr/H,SAC1B,GAAK9mR,YAAQunZ,GAAb,CAIA,IAAI1qM,EAAWylM,GAAmBiF,EAAa1qM,UAC3CiqE,EAAWp9D,EAAOo9D,SACjB9mR,YAAQ8mR,KACXp9D,EAAOo9D,SAAWA,EAAW,IAAI3M,IAGnCmpI,GACEn3F,QACArlC,EACA,OACAygI,EAAaryM,KACb2H,EACA4jM,EACA12L,GAEFi7L,GACEl+H,EACA,YACAygI,EAAariX,UACb6kL,GAEFu5L,GACErsX,OACA6vP,EACA,QACAygI,EAAa3sX,MACbiiL,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA6vP,EACA,SACAygI,EAAa5gY,OACbk2L,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAk+D,EACA,kBACAygI,EAAangM,gBACbvK,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA6vP,EACA,iBACAygI,EAAa32R,eACbisF,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAk+D,EACA,0BACAygI,EAAa1sI,wBACbh+D,EACA4jM,EACA12L,GAEFu5L,GACEryP,GACA61H,EACA,aACAygI,EAAaz2P,WACb+rD,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA6vP,EACA,cACAygI,EAAa91R,YACborF,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACArlC,EACA,OACAygI,EAAa9xS,KACbonG,EACA4jM,EACA12L,GAEF26L,GACE59H,EACA,WACAygI,EAAar6L,SACbrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACArlC,EACA,UACAygI,EAAaxxI,QACbl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA08I,EACA,eACAygI,EAAapmL,aACbtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA6vP,EACA,eACAygI,EAAanmL,aACbvkB,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAivB,EACA,UACAygI,EAAapuJ,QACbt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACA+nH,EACA,2BACAygI,EAAanoP,yBACby9C,EACA4jM,EACA12L,GAEFu5L,GACEj5J,GACAy8B,EACA,qBACAygI,EAAaz6I,mBACbjwD,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA6vP,EACA,SACAygI,EAAa1xI,OACbh5D,EACA4jM,EACA12L,KAIJ,SAAyBL,EAAQy8L,EAAQp8L,EAAkB02L,GACzD,IAAI+G,EAAerB,EAAOp/H,SAC1B,GAAK/mR,YAAQwnZ,GAAb,CAIA,IAAI3qM,EAAWylM,GAAmBkF,EAAa3qM,UAC3CkqE,EAAWr9D,EAAOq9D,SACjB/mR,YAAQ+mR,KACXr9D,EAAOq9D,SAAWA,EAAW,IAAI/L,IAGnCsoI,GACEn3F,QACAplC,EACA,OACAygI,EAAatyM,KACb2H,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,SACAygI,EAAa1jZ,OACb+4M,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,YACAygI,EAAa5rP,UACbihD,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,eACAygI,EAAa3rP,aACbghD,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAm+D,EACA,kBACAygI,EAAapgM,gBACbvK,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAplC,EACA,OACAygI,EAAa/xS,KACbonG,EACA4jM,EACA12L,GAEF26L,GACE39H,EACA,WACAygI,EAAat6L,SACbrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAplC,EACA,UACAygI,EAAazxI,QACbl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA28I,EACA,eACAygI,EAAarmL,aACbtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,eACAygI,EAAapmL,aACbvkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,wBACAygI,EAAa5/Q,sBACbi1E,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8vP,EACA,SACAygI,EAAa1rP,OACb+gD,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAkvB,EACA,UACAygI,EAAaruJ,QACbt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAgoH,EACA,2BACAygI,EAAapoP,yBACby9C,EACA4jM,EACA12L,KAsDJ,SAAwBL,EAAQy8L,EAAQp8L,EAAkB02L,GACxD,IAAIgH,EAActB,EAAOl/H,QACzB,GAAKjnR,YAAQynZ,GAAb,CAIA,IAAI5qM,EAAWylM,GAAmBmF,EAAY5qM,UAC1CoqE,EAAUv9D,EAAOu9D,QAChBjnR,YAAQinR,KACXv9D,EAAOu9D,QAAUA,EAAU,IAAI3L,IAGjCgoI,GACEn3F,QACAllC,EACA,OACAwgI,EAAYvyM,KACZ2H,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,gBACAwgI,EAAYj2R,cACZqrF,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,gBACAwgI,EAAYl2R,cACZsrF,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,SACAwgI,EAAY9gY,OACZk2L,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAq+D,EACA,kBACAwgI,EAAYrgM,gBACZvK,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,iBACAwgI,EAAY72R,eACZisF,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAq+D,EACA,0BACAwgI,EAAY5sI,wBACZh+D,EACA4jM,EACA12L,GAEFu5L,GACEvJ,GACA9yH,EACA,WACAwgI,EAAY3vX,SACZ+kL,EACA4jM,EACA12L,GAEFu5L,GACEvJ,GACA9yH,EACA,aACAwgI,EAAY5tS,WACZgjG,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,cACAwgI,EAAYh2R,YACZorF,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAllC,EACA,OACAwgI,EAAYhyS,KACZonG,EACA4jM,EACA12L,GAEF26L,GACEz9H,EACA,WACAwgI,EAAYv6L,SACZrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAllC,EACA,UACAwgI,EAAY1xI,QACZl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA68I,EACA,eACAwgI,EAAYtmL,aACZtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,eACAwgI,EAAYrmL,aACZvkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,wBACAwgI,EAAY7/Q,sBACZi1E,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAovB,EACA,UACAwgI,EAAYtuJ,QACZt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAkoH,EACA,2BACAwgI,EAAYroP,yBACZy9C,EACA4jM,EACA12L,GAEFu5L,GACEj5J,GACA48B,EACA,qBACAwgI,EAAY36I,mBACZjwD,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAgwP,EACA,SACAwgI,EAAY5xI,OACZh5D,EACA4jM,EACA12L,KAIJ,SAA0BL,EAAQy8L,EAAQp8L,EAAkB02L,GAC1D,IAAIiH,EAAgBvB,EAAOv/X,UAC3B,GAAK5mB,YAAQ0nZ,GAAb,CAIA,IAAI7qM,EAAWylM,GAAmBoF,EAAc7qM,UAC5Cj2L,EAAY8iM,EAAO9iM,UAClB5mB,YAAQ4mB,KACX8iM,EAAO9iM,UAAYA,EAAY,IAAI80P,IAGrC4nI,GACEn3F,QACAvlS,EACA,OACA8gY,EAAcxyM,KACd2H,EACA4jM,EACA12L,GAEFu5L,GACE7gY,EACAmE,EACA,QACA8gY,EAAcx8X,MACd2xL,EACA4jM,EACA12L,GAEFu5L,GACE7gY,EACAmE,EACA,aACA8gY,EAAc1hP,WACd62C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,eACA8gY,EAAczhP,aACd42C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,eACA8gY,EAAcxhP,aACd22C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,cACA8gY,EAAcvhP,YACd02C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,cACA8gY,EAActhP,YACdy2C,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAhiM,EACA,kBACA8gY,EAActgM,gBACdvK,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAvlS,EACA,OACA8gY,EAAcjyS,KACdonG,EACA4jM,EACA12L,GAEF26L,GACE99X,EACA,WACA8gY,EAAcx6L,SACdrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAvlS,EACA,UACA8gY,EAAc3xI,QACdl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACAxjH,EACA,eACA8gY,EAAcvmL,aACdtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,eACA8gY,EAActmL,aACdvkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,kBACA8gY,EAAcrhP,gBACdw2C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,kBACA8gY,EAAcphP,gBACdu2C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACArQ,EACA,eACA8gY,EAAcl/O,aACdq0C,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAjxO,EACA,UACA8gY,EAAcvuJ,QACdt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAn4I,EACA,2BACA8gY,EAActoP,yBACdy9C,EACA4jM,EACA12L,KAIJ,SAAsBL,EAAQy8L,EAAQp8L,EAAkB02L,GACtD,IAAIkH,EAAYxB,EAAOp8N,MACvB,GAAK/pL,YAAQ2nZ,GAAb,CAIA,IAAI9qM,EAAWylM,GAAmBqF,EAAU9qM,UACxC9yB,EAAQ2/B,EAAO3/B,MACd/pL,YAAQ+pL,KACX2/B,EAAO3/B,MAAQA,EAAQ,IAAIqyF,IAG7BknI,GACEn3F,QACApiI,EACA,OACA49N,EAAUzyM,KACV2H,EACA4jM,EACA12L,GAEFu5L,GACEj1V,OACA07H,EACA,OACA49N,EAAUh3W,KACVksK,EACA4jM,EACA12L,GAEFu5L,GACEj1V,OACA07H,EACA,OACA49N,EAAUtwN,KACVwlB,EACA4jM,EACA12L,GAEFu5L,GACExxC,GACA/nL,EACA,QACA49N,EAAU3rW,MACV6gK,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8yJ,EACA,QACA49N,EAAU91X,MACVgrL,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACApiI,EACA,iBACA49N,EAAUxqI,eACVtgE,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA2/C,EACA,kBACA49N,EAAUhvN,gBACVkkB,EACA4jM,EACA12L,GAEFu5L,GACEv2W,GACAg9I,EACA,oBACA49N,EAAUvqI,kBACVvgE,EACA4jM,EACA12L,GAEFu5L,GACEv2W,GACAg9I,EACA,cACA49N,EAAU3gM,YACVnK,EACA4jM,EACA12L,GAEFu5L,GACE7gY,EACAsnK,EACA,YACA49N,EAAU1gM,UACVpK,EACA4jM,EACA12L,GAEFu5L,GACEt6L,GACAj/B,EACA,mBACA49N,EAAUzgM,iBACVrK,EACA4jM,EACA12L,GAEFu5L,GACEp6L,GACAn/B,EACA,iBACA49N,EAAUxgM,eACVtK,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACA7+B,EACA,kBACA49N,EAAUvgM,gBACVvK,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA2/C,EACA,YACA49N,EAAUtuN,UACVwjB,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA2/C,EACA,eACA49N,EAAUxmL,aACVtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8yJ,EACA,eACA49N,EAAUvmL,aACVvkB,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAzH,EACA,yBACA49N,EAAUngM,uBACV3K,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAzH,EACA,6BACA49N,EAAUlgM,2BACV5K,EACA4jM,EACA12L,GAEFu5L,GACE9xN,GACAzH,EACA,kBACA49N,EAAUpgM,gBACV1K,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAgrB,EACA,2BACA49N,EAAUvoP,yBACVy9C,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA8yJ,EACA,2BACA49N,EAAUhgM,yBACV9K,EACA4jM,EACA12L,KAIJ,SAAsBL,EAAQy8L,EAAQp8L,EAAkB02L,GACtD,IAAImH,EAAYzB,EAAO7zO,MACvB,GAAKtyK,YAAQ4nZ,GAAb,CAIA,IAuJIhkZ,EAAGuF,EAvJH0zM,EAAWylM,GAAmBsF,EAAU/qM,UACxCvqC,EAAQo3C,EAAOp3C,MACdtyK,YAAQsyK,KACXo3C,EAAOp3C,MAAQA,EAAQ,IAAIgsG,IAG7BglI,GACEn3F,QACA75I,EACA,OACAs1O,EAAU1yM,KACV2H,EACA4jM,EACA12L,GAEFu5L,GACExxY,KACAwgK,EACA,MACAs1O,EAAUttH,KACVz9E,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAq7I,EACA,QACAs1O,EAAU/1X,MACVgrL,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAq7I,EACA,mBACAs1O,EAAUvnI,iBACVxjE,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAq7I,EACA,eACAs1O,EAAUtnI,aACVzjE,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA75I,EACA,4BACAs1O,EAAUrnI,0BACV1jE,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA75I,EACA,gBACAs1O,EAAUpnI,cACV3jE,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA75I,EACA,kBACAs1O,EAAUnnI,gBACV5jE,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAvlF,EACA,UACAs1O,EAAUzuJ,QACVt8C,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAt2C,EACA,kBACAs1O,EAAUxgM,gBACVvK,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACAkoC,EACA,kBACAs1O,EAAUlnI,gBACV7jE,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAq7I,EACA,iBACAs1O,EAAUjnI,eACV9jE,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACAkoC,EACA,QACAs1O,EAAUvxX,MACVwmL,EACA4jM,EACA12L,GAEFu5L,GACE/pF,GACAjnJ,EACA,iBACAs1O,EAAUhnI,eACV/jE,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAq7I,EACA,mBACAs1O,EAAU/mI,iBACVhkE,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAuT,EACA,2BACAs1O,EAAUxoP,yBACVy9C,EACA4jM,EACA12L,GAIF,IAAIy7L,EAA0BoC,EAAU7mI,oBACxC,GAAI/gR,YAAQwlZ,GACV,GAAI5gZ,MAAMiJ,QAAQ23Y,GAChB,IAAK5hZ,EAAI,EAAGuF,EAAMq8Y,EAAwB1hZ,OAAQF,EAAIuF,IAAOvF,EAC3D2hZ,GACEjzO,EACAkzO,EAAwB5hZ,GACxBi5M,EACA4jM,EACA12L,QAIJw7L,GACEjzO,EACAkzO,EACA3oM,EACA4jM,EACA12L,GAKN,IAAI87L,EAAoB+B,EA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lK,EACA,WACAyhQ,EAAYrrN,SACZigB,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA3lK,EACA,cACAyhQ,EAAYprN,YACZggB,EACA4jM,EACA12L,GAEFu5L,GACE38P,GACAH,EACA,UACAyhQ,EAAYxhQ,QACZo2D,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACArxG,EACA,UACAyhQ,EAAY9uJ,QACZt8C,EACA4jM,EACA12L,GAEFu5L,GACEvkP,GACAvY,EACA,2BACAyhQ,EAAY7oP,yBACZy9C,EACA4jM,EACA12L,GAEFu5L,GACEj5J,GACA7jG,EACA,qBACAyhQ,EAAYn7I,mBACZjwD,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAuvH,EACA,SACAyhQ,EAAYpyI,OACZh5D,EACA4jM,EACA12L,KAQJ,SAAyBL,EAAQy8L,EAAQp8L,EAAkB02L,GACzD,IAAI0H,EAAehC,EAAOj/H,SAC1B,GAAKlnR,YAAQmoZ,GAAb,CAIA,IAt0H6B/2W,EAAUg3W,EAs0HnCvrM,EAAWylM,GAAmB6F,EAAatrM,UAC3CqqE,EAAWx9D,EAAOw9D,SA8GtB,GA7GKlnR,YAAQknR,KACXx9D,EAAOw9D,SAAWA,EAAW,IAAIlE,IAGnCsgI,GACEn3F,QACAjlC,EACA,OACAihI,EAAajzM,KACb2H,EACA4jM,EACA12L,GAEFi7L,GACE99H,EACA,YACAihI,EAAajjX,UACb6kL,GAEFu5L,GACErsX,OACAiwP,EACA,QACAihI,EAAavtX,MACbiiL,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACAiwP,EACA,cACAihI,EAAa12R,YACborF,EACA4jM,EACA12L,GAEF26L,GACEx9H,EACA,WACAihI,EAAaj7L,SACbrQ,EACA4jM,EACA12L,GAEF26L,GACEx9H,EACA,oBACAihI,EAAarkJ,kBACbjnD,EACA4jM,EACA12L,GAEFu5L,GACE38P,GACAugI,EACA,UACAihI,EAAa1hQ,QACbo2D,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACAjlC,EACA,gBACAihI,EAAa/kI,cACbvmE,EACA4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ACA12L,KAuhFZ,SAA0BL,EAAQy8L,EAAQp8L,EAAkB02L,GAC1D,IAAIgI,EAAgBtC,EAAO94X,UAC3B,GAAKrtB,YAAQyoZ,GAAb,CAIA,IAAI5rM,EAAWylM,GAAmBmG,EAAc5rM,UAC5CxvL,EAAYq8L,EAAOr8L,UAClBrtB,YAAQqtB,KACXq8L,EAAOr8L,UAAYA,EAAY,IAAIm2P,IAGrC8/H,GACEn3F,QACA9+R,EACA,OACAo7X,EAAcvzM,KACd2H,EACA4jM,EACA12L,GAEFu5L,GACE/gX,GACAlV,EACA,cACAo7X,EAAcphY,YACdw1L,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA5J,EACA,SACAo7X,EAAc9hY,OACdk2L,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAv7L,EACA,kBACAo7X,EAAcrhM,gBACdvK,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA5J,EACA,iBACAo7X,EAAc73R,eACdisF,EACA4jM,EACA12L,GAEFu5L,GACE16L,GACAv7L,EACA,0BACAo7X,EAAc5tI,wBACdh+D,EACA4jM,EACA12L,GAEFu5L,GACEvJ,GACA1sX,EACA,WACAo7X,EAAc3wX,SACd+kL,EACA4jM,EACA12L,GAEFu5L,GACEvJ,GACA1sX,EACA,aACAo7X,EAAc5uS,WACdgjG,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA5J,EACA,cACAo7X,EAAch3R,YACdorF,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA9+R,EACA,OACAo7X,EAAchzS,KACdonG,EACA4jM,EACA12L,GAEF26L,GACEr3X,EACA,WACAo7X,EAAcv7L,SACdrQ,EACA4jM,EACA12L,GAEFu5L,GACEn3F,QACA9+R,EACA,UACAo7X,EAAc1yI,QACdl5D,EACA4jM,EACA12L,GAEFu5L,GACEl5Q,GACA/8G,EACA,eACAo7X,EAActnL,aACdtkB,EACA4jM,EACA12L,GAEFu5L,GACErsX,OACA5J,EACA,eACAo7X,EAAcrnL,aACdvkB,EACA4jM,EACA12L,GAEFu5L,GACEzrJ,GACAxqO,EACA,U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A36D,EACA26X,EACAP,EACApuS,GAASC,MACT,EACA4sS,EACA3L,GAEFsL,IACEzgB,EACAp9S,EACA36D,EACA66X,EACAT,EACApuS,GAASI,OACT,EACAysS,EACA3L,GAGF,IAAI6N,EAAkBR,EAAWO,gBAAgBZ,GAC7Cc,EAAkBT,EAAWG,gBAAgBR,GAC7Ce,EAAkBN,EAAWG,gBAAgBZ,GAC7CgB,EAAkBP,EAAWD,gBAAgBR,GACjD1B,IACEzgB,EACAp9S,EACA36D,EACA+6X,EACAX,EACApuS,GAASQ,WACT,EACAqsS,EACA3L,GAEFsL,IACEzgB,EACAp9S,EACA36D,EACAi7X,EACAb,EACApuS,GAASO,WACT,EACAssS,EACA3L,GAEFsL,IACEzgB,EACAp9S,EACA36D,EACAg7X,EACAZ,EACApuS,GAASM,WACT,EACAusS,EACA3L,GAEFsL,IACEzgB,EACAp9S,EACA36D,EACAk7X,EACAd,EACApuS,GAASK,WACT,EACAwsS,EACA3L,GAGFltX,EAAO64X,EAAe/kW,YA2gB1B,IAAI9zC,IAAsB,IAAI7lF,EAC1Bghe,IAA4B,IAAIhhe,EAChCihe,IAAmB,IAAIloe,EACvBwnD,IAAgB,IAAIxnD,EACpBmoe,IAA0B,IAAI79c,GAC9B89c,IAAa,IAAI99c,GACjB+9c,IAAY,IAAI/9c,GAEpB,SAASg+c,MACPhqf,KAAK4lB,OAAS,EACd5lB,KAAKiqf,cAAgB,IAAIj+c,GAG3B,SAASk+c,IACPx1Y,EACA7uF,EACAkiB,EACAC,EACAd,EACAijd,EACAC,EACAjjd,EACAksF,GAEA,GAAIp0H,YAAQioC,GACV,OAAOA,EAGT,IAAIthB,EAEJ,GAAI3mB,YAAQkrf,IAAoBlrf,YAAQmrf,GACtCxke,EAA6D,IAAnDuke,EAAgBvke,OAASwke,EAAgBxke,aAC9C,GAAI3mB,YAAQkrf,GACjBvke,EAASuke,EAAgBvke,YACpB,GAAI3mB,YAAQmrf,GACjBxke,EAASwke,EAAgBxke,YACpB,GAAI3mB,YAAQkoC,GACjBvhB,EAASuhB,EAAevhB,WACnB,CACL,IACIu0d,EAD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,IAANC,EAEO8ld,IACPT,EAAgB1H,WAChB0H,EAAgBzH,UAChBprS,GAASG,KACT0yS,EAAgBxH,YAChBwH,EAAgBvH,WAChBtrS,GAASE,MACT3yK,EACAC,GAIO8ld,IACPT,EAAgBpH,YAChBoH,EAAgBnH,WAChB1rS,GAASI,MACTyyS,EAAgB1H,WAChB0H,EAAgBzH,UAChBprS,GAASG,KACT5yK,EACAC,GAGW,IAANA,EAEA8ld,IACPT,EAAgBxH,YAChBwH,EAAgBvH,WAChBtrS,GAASE,MACT2yS,EAAgBtH,WAChBsH,EAAgBrH,UAChBxrS,GAASC,KACT1yK,EACAC,GAIO8ld,IACPT,EAAgBtH,WAChBsH,EAAgBrH,UAChBxrS,GAASC,KACT4yS,EAAgBpH,YAChBoH,EAAgBnH,WAChB1rS,GAASI,MACT7yK,EACAC,GAIA/oC,YAAQ2mB,IACVyke,IACEgD,EACAxne,EACAkiB,EACAC,EACApiB,EACAytG,GAEKA,QATT,GAgBF,SAASy6X,IACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EACArmd,EACAC,GAEA,IAAIqmd,EAAUC,IACZP,EACAC,GACA,EACAC,EACAlmd,EACAC,GAEEumd,EAAUD,IACZJ,EACAC,GACA,EACAC,EACArmd,EACAC,GAEF,OAAI/oC,YAAQovf,IAAYpvf,YAAQsvf,GAGD,IAArBF,EAAUE,GACTtvf,YAAQovf,GACVA,EAEFE,EAGT,SAAShD,IACP8B,EACAxne,EACAw2E,EACAmmF,EACAhtD,EACAwyX,EACAD,EACAZ,EACAiE,GAEA,IAAK,IAAIvof,EAAI,EAAGA,EAAImlf,EAAUjlf,SAAUF,EACtC2yH,EAAYg5X,IACVnB,EACAxne,EACAw2E,EACAmmF,EACAhtD,EACAwyX,EAAUnlf,GACVklf,EAAWllf,GACXskf,EACAiE,GAGJ,OAAO51X,EAGT,SAASg5X,IACPnB,EACAxne,EACAw2E,EACAmmF,EACAhtD,EACAi5X,EACAC,EACAvH,EACAiE,GAGA,IAAIniZ,EAAkBwlZ,EAASnie,UAC3B66d,IAAa3sS,GAASG,MAAmC,IAA3B0yS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,GACF2if,EAAQG,QAAQ9if,GACT8grB,GAGLp+L,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACT6grB,GAGFJ,EAA4BzgrB,GAGrC,SAAS8grB,EAA6B9grB,GACpC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,EAEO07gB,EAAI17gB,GAGA,KAATA,GAAwB,KAATA,GACjB2if,EAAQG,QAAQ9if,GAChBslK,EAAStlK,EACF+grB,GAGLr+L,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACT8grB,IAGTx7gB,OAASvzR,EACFivyB,EAA+BhhrB,IAGxC,SAAS+grB,EAA6B/grB,GACpC,OAAIA,IAASslK,GACXq9U,EAAQG,QAAQ9if,GACTihrB,GAGI,OAATjhrB,GAAiBs7gB,EAAmBt7gB,GAC/B07gB,EAAI17gB,IAGb2if,EAAQG,QAAQ9if,GACT+grB,GAGT,SAASC,EAA+BhhrB,GACtC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACA4uhB,EAA0B5uhB,GAEnB6grB,EAA2B7grB,IAGpC2if,EAAQG,QAAQ9if,GACTghrB,GAGT,SAASC,EAAkCjhrB,GACzC,OAAa,KAATA,GAAwB,KAATA,GAAe0if,EAAc1if,GACvCygrB,EAA4BzgrB,GAG9B07gB,EAAI17gB,GAGb,SAAS2grB,EAAY3grB,GACnB,OAAa,KAATA,GACF2if,EAAQG,QAAQ9if,GACTkhrB,GAGFxlK,EAAI17gB,GAGb,SAASkhrB,EAAclhrB,GACrB,OAAI0if,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACTkhrB,GAGO,OAATlhrB,GAAiBs7gB,EAAmBt7gB,GACvCs5qB,EAAat5qB,GACb07gB,EAAI17gB,GAGV,SAASs5qB,EAAat5qB,GACpB,OAAa,KAATA,GAAwB,IAATq/kB,GACjB18F,EAAQG,QAAQ9if,GACTmhrB,GAGI,KAATnhrB,GAAwB,IAATq/kB,GACjB18F,EAAQG,QAAQ9if,GACTohrB,GAGI,KAATphrB,GAAwB,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TA,GAAe04gB,EAAkB14gB,IACnC2if,EAAQG,QAAQ9if,GACTwirB,GAGFC,EAAgBzirB,GAGzB,SAASyirB,EAAgBzirB,GACvB,OAAIs7gB,EAAmBt7gB,IACrB+7qB,EAAc0G,EACPN,EAAanirB,IAGlB0if,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACTyirB,GAGFt1xB,EAAI6yG,GAGb,SAAS6hrB,EAAQ7hrB,GACf,OAAa,KAATA,GAAe04gB,EAAkB14gB,IACnC2if,EAAQG,QAAQ9if,GACT6hrB,GAGI,KAAT7hrB,GAAwB,KAATA,GAAe4uhB,EAA0B5uhB,GACnD0irB,EAAe1irB,GAGjB07gB,EAAI17gB,GAGb,SAAS0irB,EAAe1irB,GACtB,OAAa,KAATA,GACF2if,EAAQG,QAAQ9if,GACT7yG,GAGI,KAAT6yG,GAAwB,KAATA,GAAe+7gB,EAAW/7gB,IAC3C2if,EAAQG,QAAQ9if,GACT2irB,GAGLrnK,EAAmBt7gB,IACrB+7qB,EAAc2G,EACPP,EAAanirB,IAGlB0if,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACT0irB,GAGFv1xB,EAAI6yG,GAGb,SAAS2irB,EAAqB3irB,GAC5B,OACW,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACA04gB,EAAkB14gB,IAElB2if,EAAQG,QAAQ9if,GACT2irB,GAGFC,EAA0B5irB,GAGnC,SAAS4irB,EAA0B5irB,GACjC,OAAa,KAATA,GACF2if,EAAQG,QAAQ9if,GACT6irB,GAGLvnK,EAAmBt7gB,IACrB+7qB,EAAc6G,EACPT,EAAanirB,IAGlB0if,EAAc1if,IAChB2if,EAAQG,QAAQ9if,GACT4irB,GAGFF,EAAe1irB,GAGxB,SAAS6irB,EAA4B7irB,GACnC,OACW,OAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,GACS,KAATA,EAEO07gB,EAAI17gB,GAGA,KAATA,GAAwB,KAATA,GACjB2if,EAAQG,QAAQ9if,GAChBslK,EAAStlK,EACF8irB,GAGLxnK,EAAmBt7gB,IACrB+7qB,EAAc8G,EACPV,EAA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","file":"static/js/2.7342eb6f.chunk.js","sourcesContent":["/**\n * @function\n *\n * @param {*} value The object.\n * @returns {Boolean} Returns true if the object is defined, returns false otherwise.\n *\n * @example\n * if (Cesium.defined(positions)) {\n * doSomething();\n * } else {\n * doSomethingElse();\n * }\n */\nfunction defined(value) {\n return value !== undefined && value !== null;\n}\nexport default defined;\n","/**\n * Returns the first parameter if not undefined, otherwise the second parameter.\n * Useful for setting a default value for a parameter.\n *\n * @function\n *\n * @param {*} a\n * @param {*} b\n * @returns {*} Returns the first parameter if not undefined, otherwise the second parameter.\n *\n * @example\n * param = Cesium.defaultValue(param, 'default');\n */\nfunction defaultValue(a, b) {\n if (a !== undefined && a !== null) {\n return a;\n }\n return b;\n}\n\n/**\n * A frozen empty object that can be used as the default value for options passed as\n * an object literal.\n * @type {Object}\n * @memberof defaultValue\n */\ndefaultValue.EMPTY_OBJECT = Object.freeze({});\n\nexport default defaultValue;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","import defined from \"./defined.js\";\n\n/**\n * Constructs an exception object that is thrown due to a developer error, e.g., invalid argument,\n * argument out of range, etc. This exception should only be thrown during development;\n * it usually indicates a bug in the calling code. This exception should never be\n * caught; instead the calling code should strive not to generate it.\n * <br /><br />\n * On the other hand, a {@link RuntimeError} indicates an exception that may\n * be thrown at runtime, e.g., out of memory, that the calling code should be prepared\n * to catch.\n *\n * @alias DeveloperError\n * @constructor\n * @extends Error\n *\n * @param {String} [message] The error message for this exception.\n *\n * @see RuntimeError\n */\nfunction DeveloperError(message) {\n /**\n * 'DeveloperError' indicating that this exception was thrown due to a developer error.\n * @type {String}\n * @readonly\n */\n this.name = \"DeveloperError\";\n\n /**\n * The explanation for why this exception was thrown.\n * @type {String}\n * @readonly\n */\n this.message = message;\n\n //Browsers such as IE don't have a stack property until you actually throw the error.\n var stack;\n try {\n throw new Error();\n } catch (e) {\n stack = e.stack;\n }\n\n /**\n * The stack trace of this exception, if available.\n * @type {String}\n * @readonly\n */\n this.stack = stack;\n}\n\nif (defined(Object.create)) {\n DeveloperError.prototype = Object.create(Error.prototype);\n DeveloperError.prototype.constructor = DeveloperError;\n}\n\nDeveloperError.prototype.toString = function () {\n var str = this.name + \": \" + this.message;\n\n if (defined(this.stack)) {\n str += \"\\n\" + this.stack.toString();\n }\n\n return str;\n};\n\n/**\n * @private\n */\nDeveloperError.throwInstantiationError = function () {\n throw new DeveloperError(\n \"This function defines an interface and should not be called directly.\"\n );\n};\nexport default DeveloperError;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Contains functions for checking that supplied arguments are of a specified type\n * or meet specified conditions\n * @private\n */\nvar Check = {};\n\n/**\n * Contains type checking functions, all using the typeof operator\n */\nCheck.typeOf = {};\n\nfunction getUndefinedErrorMessage(name) {\n return name + \" is required, actual value was undefined\";\n}\n\nfunction getFailedTypeErrorMessage(actual, expected, name) {\n return (\n \"Expected \" +\n name +\n \" to be typeof \" +\n expected +\n \", actual typeof was \" +\n actual\n );\n}\n\n/**\n * Throws if test is not defined\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value that is to be checked\n * @exception {DeveloperError} test must be defined\n */\nCheck.defined = function (name, test) {\n if (!defined(test)) {\n throw new DeveloperError(getUndefinedErrorMessage(name));\n }\n};\n\n/**\n * Throws if test is not typeof 'function'\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'function'\n */\nCheck.typeOf.func = function (name, test) {\n if (typeof test !== \"function\") {\n throw new DeveloperError(\n getFailedTypeErrorMessage(typeof test, \"function\", name)\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'string'\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'string'\n */\nCheck.typeOf.string = function (name, test) {\n if (typeof test !== \"string\") {\n throw new DeveloperError(\n getFailedTypeErrorMessage(typeof test, \"string\", name)\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'number'\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'number'\n */\nCheck.typeOf.number = function (name, test) {\n if (typeof test !== \"number\") {\n throw new DeveloperError(\n getFailedTypeErrorMessage(typeof test, \"number\", name)\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'number' and less than limit\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {Number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and less than limit\n */\nCheck.typeOf.number.lessThan = function (name, test, limit) {\n Check.typeOf.number(name, test);\n if (test >= limit) {\n throw new DeveloperError(\n \"Expected \" +\n name +\n \" to be less than \" +\n limit +\n \", actual value was \" +\n test\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'number' and less than or equal to limit\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {Number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and less than or equal to limit\n */\nCheck.typeOf.number.lessThanOrEquals = function (name, test, limit) {\n Check.typeOf.number(name, test);\n if (test > limit) {\n throw new DeveloperError(\n \"Expected \" +\n name +\n \" to be less than or equal to \" +\n limit +\n \", actual value was \" +\n test\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'number' and greater than limit\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {Number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and greater than limit\n */\nCheck.typeOf.number.greaterThan = function (name, test, limit) {\n Check.typeOf.number(name, test);\n if (test <= limit) {\n throw new DeveloperError(\n \"Expected \" +\n name +\n \" to be greater than \" +\n limit +\n \", actual value was \" +\n test\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'number' and greater than or equal to limit\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {Number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and greater than or equal to limit\n */\nCheck.typeOf.number.greaterThanOrEquals = function (name, test, limit) {\n Check.typeOf.number(name, test);\n if (test < limit) {\n throw new DeveloperError(\n \"Expected \" +\n name +\n \" to be greater than or equal to\" +\n limit +\n \", actual value was \" +\n test\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'object'\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'object'\n */\nCheck.typeOf.object = function (name, test) {\n if (typeof test !== \"object\") {\n throw new DeveloperError(\n getFailedTypeErrorMessage(typeof test, \"object\", name)\n );\n }\n};\n\n/**\n * Throws if test is not typeof 'boolean'\n *\n * @param {String} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'boolean'\n */\nCheck.typeOf.bool = function (name, test) {\n if (typeof test !== \"boolean\") {\n throw new DeveloperError(\n getFailedTypeErrorMessage(typeof test, \"boolean\", name)\n );\n }\n};\n\n/**\n * Throws if test1 and test2 is not typeof 'number' and not equal in value\n *\n * @param {String} name1 The name of the first variable being tested\n * @param {String} name2 The name of the second variable being tested against\n * @param {*} test1 The value to test\n * @param {*} test2 The value to test against\n * @exception {DeveloperError} test1 and test2 should be type of 'number' and be equal in value\n */\nCheck.typeOf.number.equals = function (name1, name2, test1, test2) {\n Check.typeOf.number(name1, test1);\n Check.typeOf.number(name2, test2);\n if (test1 !== test2) {\n throw new DeveloperError(\n name1 +\n \" must be equal to \" +\n name2 +\n \", the actual values are \" +\n test1 +\n \" and \" +\n test2\n );\n }\n};\nexport default Check;\n","export { fromEvent } from './file-selector';\n//# sourceMappingURL=index.js.map","import defineProperty from \"./defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Classes from \"./classes\";\nexport { Classes };\nexport * from \"./itemListRenderer\";\nexport * from \"./itemRenderer\";\nexport * from \"./listItemsProps\";\nexport * from \"./listItemsUtils\";\nexport * from \"./predicate\";\n//# sourceMappingURL=index.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/**\n @license\n when.js - https://github.com/cujojs/when\n\n MIT License (c) copyright B Cavalier & J Hann\n\n * A lightweight CommonJS Promises/A and when() implementation\n * when is part of the cujo.js family of libraries (http://cujojs.com/)\n *\n * Licensed under the MIT License at:\n * http://www.opensource.org/licenses/mit-license.php\n *\n * @version 1.7.1\n */\n\n\tvar reduceArray, slice, undef;\n\n\t//\n\t// Public API\n\t//\n\n\twhen.defer = defer; // Create a deferred\n\twhen.resolve = resolve; // Create a resolved promise\n\twhen.reject = reject; // Create a rejected promise\n\n\twhen.join = join; // Join 2 or more promises\n\n\twhen.all = all; // Resolve a list of promises\n\twhen.map = map; // Array.map() for promises\n\twhen.reduce = reduce; // Array.reduce() for promises\n\n\twhen.any = any; // One-winner race\n\twhen.some = some; // Multi-winner race\n\n\twhen.chain = chain; // Make a promise trigger another resolver\n\n\twhen.isPromise = isPromise; // Determine if a thing is a promise\n\n\t/**\n\t * Register an observer for a promise or immediate value.\n\t *\n\t * @param {*} promiseOrValue\n\t * @param {function?} [onFulfilled] callback to be called when promiseOrValue is\n\t * successfully fulfilled. If promiseOrValue is an immediate value, callback\n\t * will be invoked immediately.\n\t * @param {function?} [onRejected] callback to be called when promiseOrValue is\n\t * rejected.\n\t * @param {function?} [onProgress] callback to be called when progress updates\n\t * are issued for promiseOrValue.\n\t * @returns {Promise} a new {@link Promise} that will complete with the return\n\t * value of callback or errback or the completion value of promiseOrValue if\n\t * callback and/or errback is not supplied.\n\t */\n\tfunction when(promiseOrValue, onFulfilled, onRejected, onProgress) {\n\t\t// Get a trusted promise for the input promiseOrValue, and then\n\t\t// register promise handlers\n\t\treturn resolve(promiseOrValue).then(onFulfilled, onRejected, onProgress);\n\t}\n\n\t/**\n\t * Returns promiseOrValue if promiseOrValue is a {@link Promise}, a new Promise if\n\t * promiseOrValue is a foreign promise, or a new, already-fulfilled {@link Promise}\n\t * whose value is promiseOrValue if promiseOrValue is an immediate value.\n\t *\n\t * @param {*} promiseOrValue\n\t * @returns Guaranteed to return a trusted Promise. If promiseOrValue is a when.js {@link Promise}\n\t * returns promiseOrValue, otherwise, returns a new, already-resolved, when.js {@link Promise}\n\t * whose resolution value is:\n\t * * the resolution value of promiseOrValue if it's a foreign promise, or\n\t * * promiseOrValue if it's a value\n\t */\n\tfunction resolve(promiseOrValue) {\n\t\tvar promise, deferred;\n\n\t\tif(promiseOrValue instanceof Promise) {\n\t\t\t// It's a when.js promise, so we trust it\n\t\t\tpromise = promiseOrValue;\n\n\t\t} else {\n\t\t\t// It's not a when.js promise. See if it's a foreign promise or a value.\n\t\t\tif(isPromise(promiseOrValue)) {\n\t\t\t\t// It's a thenable, but we don't know where it came from, so don't trust\n\t\t\t\t// its implementation entirely. Introduce a trusted middleman when.js promise\n\t\t\t\tdeferred = defer();\n\n\t\t\t\t// IMPORTANT: This is the only place when.js should ever call .then() on an\n\t\t\t\t// untrusted promise. Don't expose the return value to the untrusted promise\n\t\t\t\tpromiseOrValue.then(\n\t\t\t\t\tfunction(value) { deferred.resolve(value); },\n\t\t\t\t\tfunction(reason) { deferred.reject(reason); },\n\t\t\t\t\tfunction(update) { deferred.progress(update); }\n\t\t\t\t);\n\n\t\t\t\tpromise = deferred.promise;\n\n\t\t\t} else {\n\t\t\t\t// It's a value, not a promise. Create a resolved promise for it.\n\t\t\t\tpromise = fulfilled(promiseOrValue);\n\t\t\t}\n\t\t}\n\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Returns a rejected promise for the supplied promiseOrValue. The returned\n\t * promise will be rejected with:\n\t * - promiseOrValue, if it is a value, or\n\t * - if promiseOrValue is a promise\n\t * - promiseOrValue's value after it is fulfilled\n\t * - promiseOrValue's reason after it is rejected\n\t * @param {*} promiseOrValue the rejected value of the returned {@link Promise}\n\t * @returns {Promise} rejected {@link Promise}\n\t */\n\tfunction reject(promiseOrValue) {\n\t\treturn when(promiseOrValue, rejected);\n\t}\n\n\t/**\n\t * Trusted Promise constructor. A Promise created from this constructor is\n\t * a trusted when.js promise. Any other duck-typed promise is considered\n\t * untrusted.\n\t * @constructor\n\t * @name Promise\n\t */\n\tfunction Promise(then) {\n\t\tthis.then = then;\n\t}\n\n\tPromise.prototype = {\n\t\t/**\n\t\t * Register a callback that will be called when a promise is\n\t\t * fulfilled or rejected. Optionally also register a progress handler.\n\t\t * Shortcut for .then(onFulfilledOrRejected, onFulfilledOrRejected, onProgress)\n\t\t * @param {function?} [onFulfilledOrRejected]\n\t\t * @param {function?} [onProgress]\n\t\t * @returns {Promise}\n\t\t */\n\t\talways: function(onFulfilledOrRejected, onProgress) {\n\t\t\treturn this.then(onFulfilledOrRejected, onFulfilledOrRejected, onProgress);\n\t\t},\n\n\t\t/**\n\t\t * Register a rejection handler. Shortcut for .then(undefined, onRejected)\n\t\t * @param {function?} onRejected\n\t\t * @returns {Promise}\n\t\t */\n\t\totherwise: function(onRejected) {\n\t\t\treturn this.then(undef, onRejected);\n\t\t},\n\n\t\t/**\n\t\t * Shortcut for .then(function() { return value; })\n\t\t * @param {*} value\n\t\t * @returns {Promise} a promise that:\n\t\t * - is fulfilled if value is not a promise, or\n\t\t * - if value is a promise, will fulfill with its value, or reject\n\t\t * with its reason.\n\t\t */\n\t\tyield: function(value) {\n\t\t\treturn this.then(function() {\n\t\t\t\treturn value;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Assumes that this promise will fulfill with an array, and arranges\n\t\t * for the onFulfilled to be called with the array as its argument list\n\t\t * i.e. onFulfilled.spread(undefined, array).\n\t\t * @param {function} onFulfilled function to receive spread arguments\n\t\t * @returns {Promise}\n\t\t */\n\t\tspread: function(onFulfilled) {\n\t\t\treturn this.then(function(array) {\n\t\t\t\t// array may contain promises, so resolve its contents.\n\t\t\t\treturn all(array, function(array) {\n\t\t\t\t\treturn onFulfilled.apply(undef, array);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Create an already-resolved promise for the supplied value\n\t * @private\n\t *\n\t * @param {*} value\n\t * @returns {Promise} fulfilled promise\n\t */\n\tfunction fulfilled(value) {\n\t\tvar p = new Promise(function(onFulfilled) {\n\t\t\t// TODO: Promises/A+ check typeof onFulfilled\n\t\t\ttry {\n\t\t\t\treturn resolve(onFulfilled ? onFulfilled(value) : value);\n\t\t\t} catch(e) {\n\t\t\t\treturn rejected(e);\n\t\t\t}\n\t\t});\n\n\t\treturn p;\n\t}\n\n\t/**\n\t * Create an already-rejected {@link Promise} with the supplied\n\t * rejection reason.\n\t * @private\n\t *\n\t * @param {*} reason\n\t * @returns {Promise} rejected promise\n\t */\n\tfunction rejected(reason) {\n\t\tvar p = new Promise(function(_, onRejected) {\n\t\t\t// TODO: Promises/A+ check typeof onRejected\n\t\t\ttry {\n\t\t\t\treturn onRejected ? resolve(onRejected(reason)) : rejected(reason);\n\t\t\t} catch(e) {\n\t\t\t\treturn rejected(e);\n\t\t\t}\n\t\t});\n\n\t\treturn p;\n\t}\n\n\t/**\n\t * Creates a new, Deferred with fully isolated resolver and promise parts,\n\t * either or both of which may be given out safely to consumers.\n\t * The Deferred itself has the full API: resolve, reject, progress, and\n\t * then. The resolver has resolve, reject, and progress. The promise\n\t * only has then.\n\t *\n\t * @returns {Deferred}\n\t */\n\tfunction defer() {\n\t\tvar deferred, promise, handlers, progressHandlers,\n\t\t\t_then, _progress, _resolve;\n\n\t\t/**\n\t\t * The promise for the new deferred\n\t\t * @type {Promise}\n\t\t */\n\t\tpromise = new Promise(then);\n\n\t\t/**\n\t\t * The full Deferred object, with {@link Promise} and {@link Resolver} parts\n\t\t * @class Deferred\n\t\t * @name Deferred\n\t\t */\n\t\tdeferred = {\n\t\t\tthen: then, // DEPRECATED: use deferred.promise.then\n\t\t\tresolve: promiseResolve,\n\t\t\treject: promiseReject,\n\t\t\t// TODO: Consider renaming progress() to notify()\n\t\t\tprogress: promiseProgress,\n\n\t\t\tpromise: promise,\n\n\t\t\tresolver: {\n\t\t\t\tresolve: promiseResolve,\n\t\t\t\treject: promiseReject,\n\t\t\t\tprogress: promiseProgress\n\t\t\t}\n\t\t};\n\n\t\thandlers = [];\n\t\tprogressHandlers = [];\n\n\t\t/**\n\t\t * Pre-resolution then() that adds the supplied callback, errback, and progback\n\t\t * functions to the registered listeners\n\t\t * @private\n\t\t *\n\t\t * @param {function?} [onFulfilled] resolution handler\n\t\t * @param {function?} [onRejected] rejection handler\n\t\t * @param {function?} [onProgress] progress handler\n\t\t */\n\t\t_then = function(onFulfilled, onRejected, onProgress) {\n\t\t\t// TODO: Promises/A+ check typeof onFulfilled, onRejected, onProgress\n\t\t\tvar deferred, progressHandler;\n\n\t\t\tdeferred = defer();\n\n\t\t\tprogressHandler = typeof onProgress === 'function'\n\t\t\t\t? function(update) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Allow progress handler to transform progress event\n\t\t\t\t\t\tdeferred.progress(onProgress(update));\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// Use caught value as progress\n\t\t\t\t\t\tdeferred.progress(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t: function(update) { deferred.progress(update); };\n\n\t\t\thandlers.push(function(promise) {\n\t\t\t\tpromise.then(onFulfilled, onRejected)\n\t\t\t\t\t.then(deferred.resolve, deferred.reject, progressHandler);\n\t\t\t});\n\n\t\t\tprogressHandlers.push(progressHandler);\n\n\t\t\treturn deferred.promise;\n\t\t};\n\n\t\t/**\n\t\t * Issue a progress event, notifying all progress listeners\n\t\t * @private\n\t\t * @param {*} update progress event payload to pass to all listeners\n\t\t */\n\t\t_progress = function(update) {\n\t\t\tprocessQueue(progressHandlers, update);\n\t\t\treturn update;\n\t\t};\n\n\t\t/**\n\t\t * Transition from pre-resolution state to post-resolution state, notifying\n\t\t * all listeners of the resolution or rejection\n\t\t * @private\n\t\t * @param {*} value the value of this deferred\n\t\t */\n\t\t_resolve = function(value) {\n\t\t\tvalue = resolve(value);\n\n\t\t\t// Replace _then with one that directly notifies with the result.\n\t\t\t_then = value.then;\n\t\t\t// Replace _resolve so that this Deferred can only be resolved once\n\t\t\t_resolve = resolve;\n\t\t\t// Make _progress a noop, to disallow progress for the resolved promise.\n\t\t\t_progress = noop;\n\n\t\t\t// Notify handlers\n\t\t\tprocessQueue(handlers, value);\n\n\t\t\t// Free progressHandlers array since we'll never issue progress events\n\t\t\tprogressHandlers = handlers = undef;\n\n\t\t\treturn value;\n\t\t};\n\n\t\treturn deferred;\n\n\t\t/**\n\t\t * Wrapper to allow _then to be replaced safely\n\t\t * @param {function?} [onFulfilled] resolution handler\n\t\t * @param {function?} [onRejected] rejection handler\n\t\t * @param {function?} [onProgress] progress handler\n\t\t * @returns {Promise} new promise\n\t\t */\n\t\tfunction then(onFulfilled, onRejected, onProgress) {\n\t\t\t// TODO: Promises/A+ check typeof onFulfilled, onRejected, onProgress\n\t\t\treturn _then(onFulfilled, onRejected, onProgress);\n\t\t}\n\n\t\t/**\n\t\t * Wrapper to allow _resolve to be replaced\n\t\t */\n\t\tfunction promiseResolve(val) {\n\t\t\treturn _resolve(val);\n\t\t}\n\n\t\t/**\n\t\t * Wrapper to allow _reject to be replaced\n\t\t */\n\t\tfunction promiseReject(err) {\n\t\t\treturn _resolve(rejected(err));\n\t\t}\n\n\t\t/**\n\t\t * Wrapper to allow _progress to be replaced\n\t\t */\n\t\tfunction promiseProgress(update) {\n\t\t\treturn _progress(update);\n\t\t}\n\t}\n\n\t/**\n\t * Determines if promiseOrValue is a promise or not. Uses the feature\n\t * test from http://wiki.commonjs.org/wiki/Promises/A to determine if\n\t * promiseOrValue is a promise.\n\t *\n\t * @param {*} promiseOrValue anything\n\t * @returns {boolean} true if promiseOrValue is a {@link Promise}\n\t */\n\tfunction isPromise(promiseOrValue) {\n\t\treturn promiseOrValue && typeof promiseOrValue.then === 'function';\n\t}\n\n\t/**\n\t * Initiates a competitive race, returning a promise that will resolve when\n\t * howMany of the supplied promisesOrValues have resolved, or will reject when\n\t * it becomes impossible for howMany to resolve, for example, when\n\t * (promisesOrValues.length - howMany) + 1 input promises reject.\n\t *\n\t * @param {Array} promisesOrValues array of anything, may contain a mix\n\t * of promises and values\n\t * @param howMany {number} number of promisesOrValues to resolve\n\t * @param {function?} [onFulfilled] resolution handler\n\t * @param {function?} [onRejected] rejection handler\n\t * @param {function?} [onProgress] progress handler\n\t * @returns {Promise} promise that will resolve to an array of howMany values that\n\t * resolved first, or will reject with an array of (promisesOrValues.length - howMany) + 1\n\t * rejection reasons.\n\t */\n\tfunction some(promisesOrValues, howMany, onFulfilled, onRejected, onProgress) {\n\n\t\tcheckCallbacks(2, arguments);\n\n\t\treturn when(promisesOrValues, function(promisesOrValues) {\n\n\t\t\tvar toResolve, toReject, values, reasons, deferred, fulfillOne, rejectOne, progress, len, i;\n\n\t\t\tlen = promisesOrValues.length >>> 0;\n\n\t\t\ttoResolve = Math.max(0, Math.min(howMany, len));\n\t\t\tvalues = [];\n\n\t\t\ttoReject = (len - toResolve) + 1;\n\t\t\treasons = [];\n\n\t\t\tdeferred = defer();\n\n\t\t\t// No items in the input, resolve immediately\n\t\t\tif (!toResolve) {\n\t\t\t\tdeferred.resolve(values);\n\n\t\t\t} else {\n\t\t\t\tprogress = deferred.progress;\n\n\t\t\t\trejectOne = function(reason) {\n\t\t\t\t\treasons.push(reason);\n\t\t\t\t\tif(!--toReject) {\n\t\t\t\t\t\tfulfillOne = rejectOne = noop;\n\t\t\t\t\t\tdeferred.reject(reasons);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfulfillOne = function(val) {\n\t\t\t\t\t// This orders the values based on promise resolution order\n\t\t\t\t\t// Another strategy would be to use the original position of\n\t\t\t\t\t// the corresponding promise.\n\t\t\t\t\tvalues.push(val);\n\n\t\t\t\t\tif (!--toResolve) {\n\t\t\t\t\t\tfulfillOne = rejectOne = noop;\n\t\t\t\t\t\tdeferred.resolve(values);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfor(i = 0; i < len; ++i) {\n\t\t\t\t\tif(i in promisesOrValues) {\n\t\t\t\t\t\twhen(promisesOrValues[i], fulfiller, rejecter, progress);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn deferred.then(onFulfilled, onRejected, onProgress);\n\n\t\t\tfunction rejecter(reason) {\n\t\t\t\trejectOne(reason);\n\t\t\t}\n\n\t\t\tfunction fulfiller(val) {\n\t\t\t\tfulfillOne(val);\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Initiates a competitive race, returning a promise that will resolve when\n\t * any one of the supplied promisesOrValues has resolved or will reject when\n\t * *all* promisesOrValues have rejected.\n\t *\n\t * @param {Array|Promise} promisesOrValues array of anything, may contain a mix\n\t * of {@link Promise}s and values\n\t * @param {function?} [onFulfilled] resolution handler\n\t * @param {function?} [onRejected] rejection handler\n\t * @param {function?} [onProgress] progress handler\n\t * @returns {Promise} promise that will resolve to the value that resolved first, or\n\t * will reject with an array of all rejected inputs.\n\t */\n\tfunction any(promisesOrValues, onFulfilled, onRejected, onProgress) {\n\n\t\tfunction unwrapSingleResult(val) {\n\t\t\treturn onFulfilled ? onFulfilled(val[0]) : val[0];\n\t\t}\n\n\t\treturn some(promisesOrValues, 1, unwrapSingleResult, onRejected, onProgress);\n\t}\n\n\t/**\n\t * Return a promise that will resolve only once all the supplied promisesOrValues\n\t * have resolved. The resolution value of the returned promise will be an array\n\t * containing the resolution values of each of the promisesOrValues.\n\t * @memberOf when\n\t *\n\t * @param {Array|Promise} promisesOrValues array of anything, may contain a mix\n\t * of {@link Promise}s and values\n\t * @param {function?} [onFulfilled] resolution handler\n\t * @param {function?} [onRejected] rejection handler\n\t * @param {function?} [onProgress] progress handler\n\t * @returns {Promise}\n\t */\n\tfunction all(promisesOrValues, onFulfilled, onRejected, onProgress) {\n\t\tcheckCallbacks(1, arguments);\n\t\treturn map(promisesOrValues, identity).then(onFulfilled, onRejected, onProgress);\n\t}\n\n\t/**\n\t * Joins multiple promises into a single returned promise.\n\t * @returns {Promise} a promise that will fulfill when *all* the input promises\n\t * have fulfilled, or will reject when *any one* of the input promises rejects.\n\t */\n\tfunction join(/* ...promises */) {\n\t\treturn map(arguments, identity);\n\t}\n\n\t/**\n\t * Traditional map function, similar to `Array.prototype.map()`, but allows\n\t * input to contain {@link Promise}s and/or values, and mapFunc may return\n\t * either a value or a {@link Promise}\n\t *\n\t * @param {Array|Promise} promise array of anything, may contain a mix\n\t * of {@link Promise}s and values\n\t * @param {function} mapFunc mapping function mapFunc(value) which may return\n\t * either a {@link Promise} or value\n\t * @returns {Promise} a {@link Promise} that will resolve to an array containing\n\t * the mapped output values.\n\t */\n\tfunction map(promise, mapFunc) {\n\t\treturn when(promise, function(array) {\n\t\t\tvar results, len, toResolve, resolve, i, d;\n\n\t\t\t// Since we know the resulting length, we can preallocate the results\n\t\t\t// array to avoid array expansions.\n\t\t\ttoResolve = len = array.length >>> 0;\n\t\t\tresults = [];\n\t\t\td = defer();\n\n\t\t\tif(!toResolve) {\n\t\t\t\td.resolve(results);\n\t\t\t} else {\n\n\t\t\t\tresolve = function resolveOne(item, i) {\n\t\t\t\t\twhen(item, mapFunc).then(function(mapped) {\n\t\t\t\t\t\tresults[i] = mapped;\n\n\t\t\t\t\t\tif(!--toResolve) {\n\t\t\t\t\t\t\td.resolve(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, d.reject);\n\t\t\t\t};\n\n\t\t\t\t// Since mapFunc may be async, get all invocations of it into flight\n\t\t\t\tfor(i = 0; i < len; i++) {\n\t\t\t\t\tif(i in array) {\n\t\t\t\t\t\tresolve(array[i], i);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t--toResolve;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn d.promise;\n\n\t\t});\n\t}\n\n\t/**\n\t * Traditional reduce function, similar to `Array.prototype.reduce()`, but\n\t * input may contain promises and/or values, and reduceFunc\n\t * may return either a value or a promise, *and* initialValue may\n\t * be a promise for the starting value.\n\t *\n\t * @param {Array|Promise} promise array or promise for an array of anything,\n\t * may contain a mix of promises and values.\n\t * @param {function} reduceFunc reduce function reduce(currentValue, nextValue, index, total),\n\t * where total is the total number of items being reduced, and will be the same\n\t * in each call to reduceFunc.\n\t * @returns {Promise} that will resolve to the final reduced value\n\t */\n\tfunction reduce(promise, reduceFunc /*, initialValue */) {\n\t\tvar args = slice.call(arguments, 1);\n\n\t\treturn when(promise, function(array) {\n\t\t\tvar total;\n\n\t\t\ttotal = array.length;\n\n\t\t\t// Wrap the supplied reduceFunc with one that handles promises and then\n\t\t\t// delegates to the supplied.\n\t\t\targs[0] = function (current, val, i) {\n\t\t\t\treturn when(current, function (c) {\n\t\t\t\t\treturn when(val, function (value) {\n\t\t\t\t\t\treturn reduceFunc(c, value, i, total);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t};\n\n\t\t\treturn reduceArray.apply(array, args);\n\t\t});\n\t}\n\n\t/**\n\t * Ensure that resolution of promiseOrValue will trigger resolver with the\n\t * value or reason of promiseOrValue, or instead with resolveValue if it is provided.\n\t *\n\t * @param promiseOrValue\n\t * @param {Object} resolver\n\t * @param {function} resolver.resolve\n\t * @param {function} resolver.reject\n\t * @param {*} [resolveValue]\n\t * @returns {Promise}\n\t */\n\tfunction chain(promiseOrValue, resolver, resolveValue) {\n\t\tvar useResolveValue = arguments.length > 2;\n\n\t\treturn when(promiseOrValue,\n\t\t\tfunction(val) {\n\t\t\t\tval = useResolveValue ? resolveValue : val;\n\t\t\t\tresolver.resolve(val);\n\t\t\t\treturn val;\n\t\t\t},\n\t\t\tfunction(reason) {\n\t\t\t\tresolver.reject(reason);\n\t\t\t\treturn rejected(reason);\n\t\t\t},\n\t\t\tresolver.progress\n\t\t);\n\t}\n\n\t//\n\t// Utility functions\n\t//\n\n\t/**\n\t * Apply all functions in queue to value\n\t * @param {Array} queue array of functions to execute\n\t * @param {*} value argument passed to each function\n\t */\n\tfunction processQueue(queue, value) {\n\t\tvar handler, i = 0;\n\n\t\twhile (handler = queue[i++]) {\n\t\t\thandler(value);\n\t\t}\n\t}\n\n\t/**\n\t * Helper that checks arrayOfCallbacks to ensure that each element is either\n\t * a function, or null or undefined.\n\t * @private\n\t * @param {number} start index at which to start checking items in arrayOfCallbacks\n\t * @param {Array} arrayOfCallbacks array to check\n\t * @throws {Error} if any element of arrayOfCallbacks is something other than\n\t * a functions, null, or undefined.\n\t */\n\tfunction checkCallbacks(start, arrayOfCallbacks) {\n\t\t// TODO: Promises/A+ update type checking and docs\n\t\tvar arg, i = arrayOfCallbacks.length;\n\n\t\twhile(i > start) {\n\t\t\targ = arrayOfCallbacks[--i];\n\n\t\t\tif (arg != null && typeof arg != 'function') {\n\t\t\t\tthrow new Error('arg '+i+' must be a function');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * No-Op function used in method replacement\n\t * @private\n\t */\n\tfunction noop() {}\n\n\tslice = [].slice;\n\n\t// ES5 reduce implementation if native not available\n\t// See: http://es5.github.com/#x15.4.4.21 as there are many\n\t// specifics and edge cases.\n\treduceArray = [].reduce ||\n\t\tfunction(reduceFunc /*, initialValue */) {\n\t\t\t/*jshint maxcomplexity: 7*/\n\n\t\t\t// ES5 dictates that reduce.length === 1\n\n\t\t\t// This implementation deviates from ES5 spec in the following ways:\n\t\t\t// 1. It does not check if reduceFunc is a Callable\n\n\t\t\tvar arr, args, reduced, len, i;\n\n\t\t\ti = 0;\n\t\t\t// This generates a jshint warning, despite being valid\n\t\t\t// \"Missing 'new' prefix when invoking a constructor.\"\n\t\t\t// See https://github.com/jshint/jshint/issues/392\n\t\t\tarr = Object(this);\n\t\t\tlen = arr.length >>> 0;\n\t\t\targs = arguments;\n\n\t\t\t// If no initialValue, use first item of array (we know length !== 0 here)\n\t\t\t// and adjust i to start at second item\n\t\t\tif(args.length <= 1) {\n\t\t\t\t// Skip to the first real element in the array\n\t\t\t\tfor(;;) {\n\t\t\t\t\tif(i in arr) {\n\t\t\t\t\t\treduced = arr[i++];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If we reached the end of the array without finding any real\n\t\t\t\t\t// elements, it's a TypeError\n\t\t\t\t\tif(++i >= len) {\n\t\t\t\t\t\tthrow new TypeError();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If initialValue provided, use it\n\t\t\t\treduced = args[1];\n\t\t\t}\n\n\t\t\t// Do the actual reduce\n\t\t\tfor(;i < len; ++i) {\n\t\t\t\t// Skip holes\n\t\t\t\tif(i in arr) {\n\t\t\t\t\treduced = reduceFunc(reduced, arr[i], i, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn reduced;\n\t\t};\n\n\tfunction identity(x) {\n\t\treturn x;\n\t}\n\nexport default when;\n","import defined from \"./defined.js\";\n\n/**\n * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g.,\n * out of memory, could not compile shader, etc. If a function may throw this\n * exception, the calling code should be prepared to catch it.\n * <br /><br />\n * On the other hand, a {@link DeveloperError} indicates an exception due\n * to a developer error, e.g., invalid argument, that usually indicates a bug in the\n * calling code.\n *\n * @alias RuntimeError\n * @constructor\n * @extends Error\n *\n * @param {String} [message] The error message for this exception.\n *\n * @see DeveloperError\n */\nfunction RuntimeError(message) {\n /**\n * 'RuntimeError' indicating that this exception was thrown due to a runtime error.\n * @type {String}\n * @readonly\n */\n this.name = \"RuntimeError\";\n\n /**\n * The explanation for why this exception was thrown.\n * @type {String}\n * @readonly\n */\n this.message = message;\n\n //Browsers such as IE don't have a stack property until you actually throw the error.\n var stack;\n try {\n throw new Error();\n } catch (e) {\n stack = e.stack;\n }\n\n /**\n * The stack trace of this exception, if available.\n * @type {String}\n * @readonly\n */\n this.stack = stack;\n}\n\nif (defined(Object.create)) {\n RuntimeError.prototype = Object.create(Error.prototype);\n RuntimeError.prototype.constructor = RuntimeError;\n}\n\nRuntimeError.prototype.toString = function () {\n var str = this.name + \": \" + this.message;\n\n if (defined(this.stack)) {\n str += \"\\n\" + this.stack.toString();\n }\n\n return str;\n};\nexport default RuntimeError;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A generic utility class for managing subscribers for a particular event.\n * This class is usually instantiated inside of a container class and\n * exposed as a property for others to subscribe to.\n *\n * @alias Event\n * @constructor\n * @example\n * MyObject.prototype.myListener = function(arg1, arg2) {\n * this.myArg1Copy = arg1;\n * this.myArg2Copy = arg2;\n * }\n *\n * var myObjectInstance = new MyObject();\n * var evt = new Cesium.Event();\n * evt.addEventListener(MyObject.prototype.myListener, myObjectInstance);\n * evt.raiseEvent('1', '2');\n * evt.removeEventListener(MyObject.prototype.myListener);\n */\nfunction Event() {\n this._listeners = [];\n this._scopes = [];\n this._toRemove = [];\n this._insideRaiseEvent = false;\n}\n\nObject.defineProperties(Event.prototype, {\n /**\n * The number of listeners currently subscribed to the event.\n * @memberof Event.prototype\n * @type {Number}\n * @readonly\n */\n numberOfListeners: {\n get: function () {\n return this._listeners.length - this._toRemove.length;\n },\n },\n});\n\n/**\n * Registers a callback function to be executed whenever the event is raised.\n * An optional scope can be provided to serve as the <code>this</code> pointer\n * in which the function will execute.\n *\n * @param {Function} listener The function to be executed when the event is raised.\n * @param {Object} [scope] An optional object scope to serve as the <code>this</code>\n * pointer in which the listener function will execute.\n * @returns {Event.RemoveCallback} A function that will remove this event listener when invoked.\n *\n * @see Event#raiseEvent\n * @see Event#removeEventListener\n */\nEvent.prototype.addEventListener = function (listener, scope) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.func(\"listener\", listener);\n //>>includeEnd('debug');\n\n this._listeners.push(listener);\n this._scopes.push(scope);\n\n var event = this;\n return function () {\n event.removeEventListener(listener, scope);\n };\n};\n\n/**\n * Unregisters a previously registered callback.\n *\n * @param {Function} listener The function to be unregistered.\n * @param {Object} [scope] The scope that was originally passed to addEventListener.\n * @returns {Boolean} <code>true</code> if the listener was removed; <code>false</code> if the listener and scope are not registered with the event.\n *\n * @see Event#addEventListener\n * @see Event#raiseEvent\n */\nEvent.prototype.removeEventListener = function (listener, scope) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.func(\"listener\", listener);\n //>>includeEnd('debug');\n\n var listeners = this._listeners;\n var scopes = this._scopes;\n\n var index = -1;\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i] === listener && scopes[i] === scope) {\n index = i;\n break;\n }\n }\n\n if (index !== -1) {\n if (this._insideRaiseEvent) {\n //In order to allow removing an event subscription from within\n //a callback, we don't actually remove the items here. Instead\n //remember the index they are at and undefined their value.\n this._toRemove.push(index);\n listeners[index] = undefined;\n scopes[index] = undefined;\n } else {\n listeners.splice(index, 1);\n scopes.splice(index, 1);\n }\n return true;\n }\n\n return false;\n};\n\nfunction compareNumber(a, b) {\n return b - a;\n}\n\n/**\n * Raises the event by calling each registered listener with all supplied arguments.\n *\n * @param {...Object} arguments This method takes any number of parameters and passes them through to the listener functions.\n *\n * @see Event#addEventListener\n * @see Event#removeEventListener\n */\nEvent.prototype.raiseEvent = function () {\n this._insideRaiseEvent = true;\n\n var i;\n var listeners = this._listeners;\n var scopes = this._scopes;\n var length = listeners.length;\n\n for (i = 0; i < length; i++) {\n var listener = listeners[i];\n if (defined(listener)) {\n listeners[i].apply(scopes[i], arguments);\n }\n }\n\n //Actually remove items removed in removeEventListener.\n var toRemove = this._toRemove;\n length = toRemove.length;\n if (length > 0) {\n toRemove.sort(compareNumber);\n for (i = 0; i < length; i++) {\n var index = toRemove[i];\n listeners.splice(index, 1);\n scopes.splice(index, 1);\n }\n toRemove.length = 0;\n }\n\n this._insideRaiseEvent = false;\n};\n\n/**\n * A function that removes a listener.\n * @callback Event.RemoveCallback\n */\nexport default Event;\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (isNativeReflectConstruct()) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","import Uri from \"../ThirdParty/Uri.js\";\nimport when from \"../ThirdParty/when.js\";\nimport appendForwardSlash from \"./appendForwardSlash.js\";\nimport Check from \"./Check.js\";\nimport clone from \"./clone.js\";\nimport combine from \"./combine.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\nimport getBaseUri from \"./getBaseUri.js\";\nimport getExtensionFromUri from \"./getExtensionFromUri.js\";\nimport isBlobUri from \"./isBlobUri.js\";\nimport isCrossOriginUrl from \"./isCrossOriginUrl.js\";\nimport isDataUri from \"./isDataUri.js\";\nimport loadAndExecuteScript from \"./loadAndExecuteScript.js\";\nimport objectToQuery from \"./objectToQuery.js\";\nimport queryToObject from \"./queryToObject.js\";\nimport Request from \"./Request.js\";\nimport RequestErrorEvent from \"./RequestErrorEvent.js\";\nimport RequestScheduler from \"./RequestScheduler.js\";\nimport RequestState from \"./RequestState.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TrustedServers from \"./TrustedServers.js\";\n\nvar xhrBlobSupported = (function () {\n try {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", \"#\", true);\n xhr.responseType = \"blob\";\n return xhr.responseType === \"blob\";\n } catch (e) {\n return false;\n }\n})();\n\n/**\n * Parses a query string and returns the object equivalent.\n *\n * @param {Uri} uri The Uri with a query object.\n * @param {Resource} resource The Resource that will be assigned queryParameters.\n * @param {Boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced.\n * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in uri will take precedence.\n *\n * @private\n */\nfunction parseQuery(uri, resource, merge, preserveQueryParameters) {\n var queryString = uri.query;\n if (!defined(queryString) || queryString.length === 0) {\n return {};\n }\n\n var query;\n // Special case we run into where the querystring is just a string, not key/value pairs\n if (queryString.indexOf(\"=\") === -1) {\n var result = {};\n result[queryString] = undefined;\n query = result;\n } else {\n query = queryToObject(queryString);\n }\n\n if (merge) {\n resource._queryParameters = combineQueryParameters(\n query,\n resource._queryParameters,\n preserveQueryParameters\n );\n } else {\n resource._queryParameters = query;\n }\n uri.query = undefined;\n}\n\n/**\n * Converts a query object into a string.\n *\n * @param {Uri} uri The Uri object that will have the query object set.\n * @param {Resource} resource The resource that has queryParameters\n *\n * @private\n */\nfunction stringifyQuery(uri, resource) {\n var queryObject = resource._queryParameters;\n\n var keys = Object.keys(queryObject);\n\n // We have 1 key with an undefined value, so this is just a string, not key/value pairs\n if (keys.length === 1 && !defined(queryObject[keys[0]])) {\n uri.query = keys[0];\n } else {\n uri.query = objectToQuery(queryObject);\n }\n}\n\n/**\n * Clones a value if it is defined, otherwise returns the default value\n *\n * @param {*} [val] The value to clone.\n * @param {*} [defaultVal] The default value.\n *\n * @returns {*} A clone of val or the defaultVal.\n *\n * @private\n */\nfunction defaultClone(val, defaultVal) {\n if (!defined(val)) {\n return defaultVal;\n }\n\n return defined(val.clone) ? val.clone() : clone(val);\n}\n\n/**\n * Checks to make sure the Resource isn't already being requested.\n *\n * @param {Request} request The request to check.\n *\n * @private\n */\nfunction checkAndResetRequest(request) {\n if (\n request.state === RequestState.ISSUED ||\n request.state === RequestState.ACTIVE\n ) {\n throw new RuntimeError(\"The Resource is already being fetched.\");\n }\n\n request.state = RequestState.UNISSUED;\n request.deferred = undefined;\n}\n\n/**\n * This combines a map of query parameters.\n *\n * @param {Object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false.\n * @param {Object} q2 The second map of query parameters.\n * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence.\n *\n * @returns {Object} The combined map of query parameters.\n *\n * @example\n * var q1 = {\n * a: 1,\n * b: 2\n * };\n * var q2 = {\n * a: 3,\n * c: 4\n * };\n * var q3 = {\n * b: [5, 6],\n * d: 7\n * }\n *\n * // Returns\n * // {\n * // a: [1, 3],\n * // b: 2,\n * // c: 4\n * // };\n * combineQueryParameters(q1, q2, true);\n *\n * // Returns\n * // {\n * // a: 1,\n * // b: 2,\n * // c: 4\n * // };\n * combineQueryParameters(q1, q2, false);\n *\n * // Returns\n * // {\n * // a: 1,\n * // b: [2, 5, 6],\n * // d: 7\n * // };\n * combineQueryParameters(q1, q3, true);\n *\n * // Returns\n * // {\n * // a: 1,\n * // b: 2,\n * // d: 7\n * // };\n * combineQueryParameters(q1, q3, false);\n *\n * @private\n */\nfunction combineQueryParameters(q1, q2, preserveQueryParameters) {\n if (!preserveQueryParameters) {\n return combine(q1, q2);\n }\n\n var result = clone(q1, true);\n for (var param in q2) {\n if (q2.hasOwnProperty(param)) {\n var value = result[param];\n var q2Value = q2[param];\n if (defined(value)) {\n if (!Array.isArray(value)) {\n value = result[param] = [value];\n }\n\n result[param] = value.concat(q2Value);\n } else {\n result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;\n }\n }\n }\n\n return result;\n}\n\n/**\n * A resource that includes the location and any other parameters we need to retrieve it or create derived resources. It also provides the ability to retry requests.\n *\n * @alias Resource\n * @constructor\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n *\n * @example\n * function refreshTokenRetryCallback(resource, error) {\n * if (error.statusCode === 403) {\n * // 403 status code means a new token should be generated\n * return getNewAccessToken()\n * .then(function(token) {\n * resource.queryParameters.access_token = token;\n * return true;\n * })\n * .otherwise(function() {\n * return false;\n * });\n * }\n *\n * return false;\n * }\n *\n * var resource = new Resource({\n * url: 'http://server.com/path/to/resource.json',\n * proxy: new DefaultProxy('/proxy/'),\n * headers: {\n * 'X-My-Header': 'valueOfHeader'\n * },\n * queryParameters: {\n * 'access_token': '123-435-456-000'\n * },\n * retryCallback: refreshTokenRetryCallback,\n * retryAttempts: 1\n * });\n */\nfunction Resource(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n if (typeof options === \"string\") {\n options = {\n url: options,\n };\n }\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"options.url\", options.url);\n //>>includeEnd('debug');\n\n this._url = undefined;\n this._templateValues = defaultClone(options.templateValues, {});\n this._queryParameters = defaultClone(options.queryParameters, {});\n\n /**\n * Additional HTTP headers that will be sent with the request.\n *\n * @type {Object}\n */\n this.headers = defaultClone(options.headers, {});\n\n /**\n * A Request object that will be used. Intended for internal use only.\n *\n * @type {Request}\n */\n this.request = defaultValue(options.request, new Request());\n\n /**\n * A proxy to be used when loading the resource.\n *\n * @type {Proxy}\n */\n this.proxy = options.proxy;\n\n /**\n * Function to call when a request for this resource fails. If it returns true or a Promise that resolves to true, the request will be retried.\n *\n * @type {Function}\n */\n this.retryCallback = options.retryCallback;\n\n /**\n * The number of times the retryCallback should be called before giving up.\n *\n * @type {Number}\n */\n this.retryAttempts = defaultValue(options.retryAttempts, 0);\n this._retryCount = 0;\n\n var uri = new Uri(options.url);\n parseQuery(uri, this, true, true);\n\n // Remove the fragment as it's not sent with a request\n uri.fragment = undefined;\n\n this._url = uri.toString();\n}\n\n/**\n * A helper function to create a resource depending on whether we have a String or a Resource\n *\n * @param {Resource|String} resource A Resource or a String to use when creating a new Resource.\n *\n * @returns {Resource} If resource is a String, a Resource constructed with the url and options. Otherwise the resource parameter is returned.\n *\n * @private\n */\nResource.createIfNeeded = function (resource) {\n if (resource instanceof Resource) {\n // Keep existing request object. This function is used internally to duplicate a Resource, so that it can't\n // be modified outside of a class that holds it (eg. an imagery or terrain provider). Since the Request objects\n // are managed outside of the providers, by the tile loading code, we want to keep the request property the same so if it is changed\n // in the underlying tiling code the requests for this resource will use it.\n return resource.getDerivedResource({\n request: resource.request,\n });\n }\n\n if (typeof resource !== \"string\") {\n return resource;\n }\n\n return new Resource({\n url: resource,\n });\n};\n\nvar supportsImageBitmapOptionsPromise;\n/**\n * A helper function to check whether createImageBitmap supports passing ImageBitmapOptions.\n *\n * @returns {Promise<Boolean>} A promise that resolves to true if this browser supports creating an ImageBitmap with options.\n *\n * @private\n */\nResource.supportsImageBitmapOptions = function () {\n // Until the HTML folks figure out what to do about this, we need to actually try loading an image to\n // know if this browser supports passing options to the createImageBitmap function.\n // https://github.com/whatwg/html/pull/4248\n if (defined(supportsImageBitmapOptionsPromise)) {\n return supportsImageBitmapOptionsPromise;\n }\n\n if (typeof createImageBitmap !== \"function\") {\n supportsImageBitmapOptionsPromise = when.resolve(false);\n return supportsImageBitmapOptionsPromise;\n }\n\n var imageDataUri =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWP4////fwAJ+wP9CNHoHgAAAABJRU5ErkJggg==\";\n\n supportsImageBitmapOptionsPromise = Resource.fetchBlob({\n url: imageDataUri,\n })\n .then(function (blob) {\n return createImageBitmap(blob, {\n imageOrientation: \"flipY\",\n premultiplyAlpha: \"none\",\n });\n })\n .then(function (imageBitmap) {\n return true;\n })\n .otherwise(function () {\n return false;\n });\n\n return supportsImageBitmapOptionsPromise;\n};\n\nObject.defineProperties(Resource, {\n /**\n * Returns true if blobs are supported.\n *\n * @memberof Resource\n * @type {Boolean}\n *\n * @readonly\n */\n isBlobSupported: {\n get: function () {\n return xhrBlobSupported;\n },\n },\n});\n\nObject.defineProperties(Resource.prototype, {\n /**\n * Query parameters appended to the url.\n *\n * @memberof Resource.prototype\n * @type {Object}\n *\n * @readonly\n */\n queryParameters: {\n get: function () {\n return this._queryParameters;\n },\n },\n\n /**\n * The key/value pairs used to replace template parameters in the url.\n *\n * @memberof Resource.prototype\n * @type {Object}\n *\n * @readonly\n */\n templateValues: {\n get: function () {\n return this._templateValues;\n },\n },\n\n /**\n * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set.\n *\n * @memberof Resource.prototype\n * @type {String}\n */\n url: {\n get: function () {\n return this.getUrlComponent(true, true);\n },\n set: function (value) {\n var uri = new Uri(value);\n\n parseQuery(uri, this, false);\n\n // Remove the fragment as it's not sent with a request\n uri.fragment = undefined;\n\n this._url = uri.toString();\n },\n },\n\n /**\n * The file extension of the resource.\n *\n * @memberof Resource.prototype\n * @type {String}\n *\n * @readonly\n */\n extension: {\n get: function () {\n return getExtensionFromUri(this._url);\n },\n },\n\n /**\n * True if the Resource refers to a data URI.\n *\n * @memberof Resource.prototype\n * @type {Boolean}\n */\n isDataUri: {\n get: function () {\n return isDataUri(this._url);\n },\n },\n\n /**\n * True if the Resource refers to a blob URI.\n *\n * @memberof Resource.prototype\n * @type {Boolean}\n */\n isBlobUri: {\n get: function () {\n return isBlobUri(this._url);\n },\n },\n\n /**\n * True if the Resource refers to a cross origin URL.\n *\n * @memberof Resource.prototype\n * @type {Boolean}\n */\n isCrossOriginUrl: {\n get: function () {\n return isCrossOriginUrl(this._url);\n },\n },\n\n /**\n * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys.\n *\n * @memberof Resource.prototype\n * @type {Boolean}\n */\n hasHeaders: {\n get: function () {\n return Object.keys(this.headers).length > 0;\n },\n },\n});\n\n/**\n * Override Object#toString so that implicit string conversion gives the\n * complete URL represented by this Resource.\n *\n * @returns {String} The URL represented by this Resource\n */\nResource.prototype.toString = function () {\n return this.getUrlComponent(true, true);\n};\n\n/**\n * Returns the url, optional with the query string and processed by a proxy.\n *\n * @param {Boolean} [query=false] If true, the query string is included.\n * @param {Boolean} [proxy=false] If true, the url is processed by the proxy object, if defined.\n *\n * @returns {String} The url with all the requested components.\n */\nResource.prototype.getUrlComponent = function (query, proxy) {\n if (this.isDataUri) {\n return this._url;\n }\n\n var uri = new Uri(this._url);\n\n if (query) {\n stringifyQuery(uri, this);\n }\n\n // objectToQuery escapes the placeholders. Undo that.\n var url = uri.toString().replace(/%7B/g, \"{\").replace(/%7D/g, \"}\");\n\n var templateValues = this._templateValues;\n url = url.replace(/{(.*?)}/g, function (match, key) {\n var replacement = templateValues[key];\n if (defined(replacement)) {\n // use the replacement value from templateValues if there is one...\n return encodeURIComponent(replacement);\n }\n // otherwise leave it unchanged\n return match;\n });\n\n if (proxy && defined(this.proxy)) {\n url = this.proxy.getURL(url);\n }\n return url;\n};\n\n/**\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\n * as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value.\n *\n * @param {Object} params The query parameters\n * @param {Boolean} [useAsDefault=false] If true the params will be used as the default values, so they will only be set if they are undefined.\n */\nResource.prototype.setQueryParameters = function (params, useAsDefault) {\n if (useAsDefault) {\n this._queryParameters = combineQueryParameters(\n this._queryParameters,\n params,\n false\n );\n } else {\n this._queryParameters = combineQueryParameters(\n params,\n this._queryParameters,\n false\n );\n }\n};\n\n/**\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\n * as opposed to adding them one at a time to the queryParameters property.\n *\n * @param {Object} params The query parameters\n */\nResource.prototype.appendQueryParameters = function (params) {\n this._queryParameters = combineQueryParameters(\n params,\n this._queryParameters,\n true\n );\n};\n\n/**\n * Combines the specified object and the existing template values. This allows you to add many values at once,\n * as opposed to adding them one at a time to the templateValues property. If a value is already set, it will become an array and the new value will be appended.\n *\n * @param {Object} template The template values\n * @param {Boolean} [useAsDefault=false] If true the values will be used as the default values, so they will only be set if they are undefined.\n */\nResource.prototype.setTemplateValues = function (template, useAsDefault) {\n if (useAsDefault) {\n this._templateValues = combine(this._templateValues, template);\n } else {\n this._templateValues = combine(template, this._templateValues);\n }\n};\n\n/**\n * Returns a resource relative to the current instance. All properties remain the same as the current instance unless overridden in options.\n *\n * @param {Object} options An object with the following properties\n * @param {String} [options.url] The url that will be resolved relative to the url of the current instance.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be combined with those of the current instance.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). These will be combined with those of the current instance.\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The function to call when loading the resource fails.\n * @param {Number} [options.retryAttempts] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {Boolean} [options.preserveQueryParameters=false] If true, this will keep all query parameters from the current resource and derived resource. If false, derived parameters will replace those of the current resource.\n *\n * @returns {Resource} The resource derived from the current one.\n */\nResource.prototype.getDerivedResource = function (options) {\n var resource = this.clone();\n resource._retryCount = 0;\n\n if (defined(options.url)) {\n var uri = new Uri(options.url);\n\n var preserveQueryParameters = defaultValue(\n options.preserveQueryParameters,\n false\n );\n parseQuery(uri, resource, true, preserveQueryParameters);\n\n // Remove the fragment as it's not sent with a request\n uri.fragment = undefined;\n\n resource._url = uri.resolve(new Uri(getAbsoluteUri(this._url))).toString();\n }\n\n if (defined(options.queryParameters)) {\n resource._queryParameters = combine(\n options.queryParameters,\n resource._queryParameters\n );\n }\n if (defined(options.templateValues)) {\n resource._templateValues = combine(\n options.templateValues,\n resource.templateValues\n );\n }\n if (defined(options.headers)) {\n resource.headers = combine(options.headers, resource.headers);\n }\n if (defined(options.proxy)) {\n resource.proxy = options.proxy;\n }\n if (defined(options.request)) {\n resource.request = options.request;\n }\n if (defined(options.retryCallback)) {\n resource.retryCallback = options.retryCallback;\n }\n if (defined(options.retryAttempts)) {\n resource.retryAttempts = options.retryAttempts;\n }\n\n return resource;\n};\n\n/**\n * Called when a resource fails to load. This will call the retryCallback function if defined until retryAttempts is reached.\n *\n * @param {Error} [error] The error that was encountered.\n *\n * @returns {Promise<Boolean>} A promise to a boolean, that if true will cause the resource request to be retried.\n *\n * @private\n */\nResource.prototype.retryOnError = function (error) {\n var retryCallback = this.retryCallback;\n if (\n typeof retryCallback !== \"function\" ||\n this._retryCount >= this.retryAttempts\n ) {\n return when(false);\n }\n\n var that = this;\n return when(retryCallback(this, error)).then(function (result) {\n ++that._retryCount;\n\n return result;\n });\n};\n\n/**\n * Duplicates a Resource instance.\n *\n * @param {Resource} [result] The object onto which to store the result.\n *\n * @returns {Resource} The modified result parameter or a new Resource instance if one was not provided.\n */\nResource.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new Resource({\n url: this._url,\n });\n }\n\n result._url = this._url;\n result._queryParameters = clone(this._queryParameters);\n result._templateValues = clone(this._templateValues);\n result.headers = clone(this.headers);\n result.proxy = this.proxy;\n result.retryCallback = this.retryCallback;\n result.retryAttempts = this.retryAttempts;\n result._retryCount = 0;\n result.request = this.request.clone();\n\n return result;\n};\n\n/**\n * Returns the base path of the Resource.\n *\n * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\n *\n * @returns {String} The base URI of the resource\n */\nResource.prototype.getBaseUri = function (includeQuery) {\n return getBaseUri(this.getUrlComponent(includeQuery), includeQuery);\n};\n\n/**\n * Appends a forward slash to the URL.\n */\nResource.prototype.appendForwardSlash = function () {\n this._url = appendForwardSlash(this._url);\n};\n\n/**\n * Asynchronously loads the resource as raw binary data. Returns a promise that will resolve to\n * an ArrayBuffer once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise.<ArrayBuffer>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load a single URL asynchronously\n * resource.fetchArrayBuffer().then(function(arrayBuffer) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchArrayBuffer = function () {\n return this.fetch({\n responseType: \"arraybuffer\",\n });\n};\n\n/**\n * Creates a Resource and calls fetchArrayBuffer() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise.<ArrayBuffer>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchArrayBuffer = function (options) {\n var resource = new Resource(options);\n return resource.fetchArrayBuffer();\n};\n\n/**\n * Asynchronously loads the given resource as a blob. Returns a promise that will resolve to\n * a Blob once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise.<Blob>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load a single URL asynchronously\n * resource.fetchBlob().then(function(blob) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchBlob = function () {\n return this.fetch({\n responseType: \"blob\",\n });\n};\n\n/**\n * Creates a Resource and calls fetchBlob() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise.<Blob>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchBlob = function (options) {\n var resource = new Resource(options);\n return resource.fetchBlob();\n};\n\n/**\n * Asynchronously loads the given image resource. Returns a promise that will resolve to\n * an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if <code>preferImageBitmap</code> is true and the browser supports <code>createImageBitmap</code> or otherwise an\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load.\n *\n * @param {Object} [options] An object with the following properties.\n * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob.\n * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @param {Boolean} [options.flipY=false] If true, image will be vertically flipped during decode. Only applies if the browser supports <code>createImageBitmap</code>.\n * @returns {Promise.<ImageBitmap>|Promise.<HTMLImageElement>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load a single image asynchronously\n * resource.fetchImage().then(function(image) {\n * // use the loaded image\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * // load several images in parallel\n * when.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) {\n * // images is an array containing all the loaded images\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchImage = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var preferImageBitmap = defaultValue(options.preferImageBitmap, false);\n var preferBlob = defaultValue(options.preferBlob, false);\n var flipY = defaultValue(options.flipY, false);\n\n checkAndResetRequest(this.request);\n\n // We try to load the image normally if\n // 1. Blobs aren't supported\n // 2. It's a data URI\n // 3. It's a blob URI\n // 4. It doesn't have request headers and we preferBlob is false\n if (\n !xhrBlobSupported ||\n this.isDataUri ||\n this.isBlobUri ||\n (!this.hasHeaders && !preferBlob)\n ) {\n return fetchImage({\n resource: this,\n flipY: flipY,\n preferImageBitmap: preferImageBitmap,\n });\n }\n\n var blobPromise = this.fetchBlob();\n if (!defined(blobPromise)) {\n return;\n }\n\n var supportsImageBitmap;\n var useImageBitmap;\n var generatedBlobResource;\n var generatedBlob;\n return Resource.supportsImageBitmapOptions()\n .then(function (result) {\n supportsImageBitmap = result;\n useImageBitmap = supportsImageBitmap && preferImageBitmap;\n return blobPromise;\n })\n .then(function (blob) {\n if (!defined(blob)) {\n return;\n }\n generatedBlob = blob;\n if (useImageBitmap) {\n return Resource.createImageBitmapFromBlob(blob, {\n flipY: flipY,\n premultiplyAlpha: false,\n });\n }\n var blobUrl = window.URL.createObjectURL(blob);\n generatedBlobResource = new Resource({\n url: blobUrl,\n });\n\n return fetchImage({\n resource: generatedBlobResource,\n flipY: flipY,\n preferImageBitmap: false,\n });\n })\n .then(function (image) {\n if (!defined(image)) {\n return;\n }\n\n // The blob object may be needed for use by a TileDiscardPolicy,\n // so attach it to the image.\n image.blob = generatedBlob;\n\n if (useImageBitmap) {\n return image;\n }\n\n window.URL.revokeObjectURL(generatedBlobResource.url);\n return image;\n })\n .otherwise(function (error) {\n if (defined(generatedBlobResource)) {\n window.URL.revokeObjectURL(generatedBlobResource.url);\n }\n\n // If the blob load succeeded but the image decode failed, attach the blob\n // to the error object for use by a TileDiscardPolicy.\n // In particular, BingMapsImageryProvider uses this to detect the\n // zero-length response that is returned when a tile is not available.\n error.blob = generatedBlob;\n\n return when.reject(error);\n });\n};\n\n/**\n * Fetches an image and returns a promise to it.\n *\n * @param {Object} [options] An object with the following properties.\n * @param {Resource} [options.resource] Resource object that points to an image to fetch.\n * @param {Boolean} [options.preferImageBitmap] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @param {Boolean} [options.flipY] If true, image will be vertically flipped during decode. Only applies if the browser supports <code>createImageBitmap</code>.\n *\n * @private\n */\nfunction fetchImage(options) {\n var resource = options.resource;\n var flipY = options.flipY;\n var preferImageBitmap = options.preferImageBitmap;\n\n var request = resource.request;\n request.url = resource.url;\n request.requestFunction = function () {\n var crossOrigin = false;\n\n // data URIs can't have crossorigin set.\n if (!resource.isDataUri && !resource.isBlobUri) {\n crossOrigin = resource.isCrossOriginUrl;\n }\n\n var deferred = when.defer();\n Resource._Implementations.createImage(\n request,\n crossOrigin,\n deferred,\n flipY,\n preferImageBitmap\n );\n\n return deferred.promise;\n };\n\n var promise = RequestScheduler.request(request);\n if (!defined(promise)) {\n return;\n }\n\n return promise.otherwise(function (e) {\n // Don't retry cancelled or otherwise aborted requests\n if (request.state !== RequestState.FAILED) {\n return when.reject(e);\n }\n\n return resource.retryOnError(e).then(function (retry) {\n if (retry) {\n // Reset request so it can try again\n request.state = RequestState.UNISSUED;\n request.deferred = undefined;\n\n return fetchImage({\n resource: resource,\n flipY: flipY,\n preferImageBitmap: preferImageBitmap,\n });\n }\n\n return when.reject(e);\n });\n });\n}\n\n/**\n * Creates a Resource and calls fetchImage() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Boolean} [options.flipY=false] Whether to vertically flip the image during fetch and decode. Only applies when requesting an image and the browser supports <code>createImageBitmap</code>.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob.\n * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @returns {Promise.<ImageBitmap>|Promise.<HTMLImageElement>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchImage = function (options) {\n var resource = new Resource(options);\n return resource.fetchImage({\n flipY: options.flipY,\n preferBlob: options.preferBlob,\n preferImageBitmap: options.preferImageBitmap,\n });\n};\n\n/**\n * Asynchronously loads the given resource as text. Returns a promise that will resolve to\n * a String once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise.<String>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load text from a URL, setting a custom header\n * var resource = new Resource({\n * url: 'http://someUrl.com/someJson.txt',\n * headers: {\n * 'X-Custom-Header' : 'some value'\n * }\n * });\n * resource.fetchText().then(function(text) {\n * // Do something with the text\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchText = function () {\n return this.fetch({\n responseType: \"text\",\n });\n};\n\n/**\n * Creates a Resource and calls fetchText() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise.<String>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchText = function (options) {\n var resource = new Resource(options);\n return resource.fetchText();\n};\n\n// note: */* below is */* but that ends the comment block early\n/**\n * Asynchronously loads the given resource as JSON. Returns a promise that will resolve to\n * a JSON object once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. This function\n * adds 'Accept: application/json,*/*;q=0.01' to the request headers, if not\n * already specified.\n *\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.fetchJson().then(function(jsonData) {\n * // Do something with the JSON object\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchJson = function () {\n var promise = this.fetch({\n responseType: \"text\",\n headers: {\n Accept: \"application/json,*/*;q=0.01\",\n },\n });\n\n if (!defined(promise)) {\n return undefined;\n }\n\n return promise.then(function (value) {\n if (!defined(value)) {\n return;\n }\n return JSON.parse(value);\n });\n};\n\n/**\n * Creates a Resource and calls fetchJson() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchJson = function (options) {\n var resource = new Resource(options);\n return resource.fetchJson();\n};\n\n/**\n * Asynchronously loads the given resource as XML. Returns a promise that will resolve to\n * an XML Document once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise.<XMLDocument>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load XML from a URL, setting a custom header\n * Cesium.loadXML('http://someUrl.com/someXML.xml', {\n * 'X-Custom-Header' : 'some value'\n * }).then(function(document) {\n * // Do something with the document\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchXML = function () {\n return this.fetch({\n responseType: \"document\",\n overrideMimeType: \"text/xml\",\n });\n};\n\n/**\n * Creates a Resource and calls fetchXML() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise.<XMLDocument>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchXML = function (options) {\n var resource = new Resource(options);\n return resource.fetchXML();\n};\n\n/**\n * Requests a resource using JSONP.\n *\n * @param {String} [callbackParameterName='callback'] The callback parameter name that the server expects.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load a data asynchronously\n * resource.fetchJsonp().then(function(data) {\n * // use the loaded data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchJsonp = function (callbackParameterName) {\n callbackParameterName = defaultValue(callbackParameterName, \"callback\");\n\n checkAndResetRequest(this.request);\n\n //generate a unique function name\n var functionName;\n do {\n functionName = \"loadJsonp\" + Math.random().toString().substring(2, 8);\n } while (defined(window[functionName]));\n\n return fetchJsonp(this, callbackParameterName, functionName);\n};\n\nfunction fetchJsonp(resource, callbackParameterName, functionName) {\n var callbackQuery = {};\n callbackQuery[callbackParameterName] = functionName;\n resource.setQueryParameters(callbackQuery);\n\n var request = resource.request;\n request.url = resource.url;\n request.requestFunction = function () {\n var deferred = when.defer();\n\n //assign a function with that name in the global scope\n window[functionName] = function (data) {\n deferred.resolve(data);\n\n try {\n delete window[functionName];\n } catch (e) {\n window[functionName] = undefined;\n }\n };\n\n Resource._Implementations.loadAndExecuteScript(\n resource.url,\n functionName,\n deferred\n );\n return deferred.promise;\n };\n\n var promise = RequestScheduler.request(request);\n if (!defined(promise)) {\n return;\n }\n\n return promise.otherwise(function (e) {\n if (request.state !== RequestState.FAILED) {\n return when.reject(e);\n }\n\n return resource.retryOnError(e).then(function (retry) {\n if (retry) {\n // Reset request so it can try again\n request.state = RequestState.UNISSUED;\n request.deferred = undefined;\n\n return fetchJsonp(resource, callbackParameterName, functionName);\n }\n\n return when.reject(e);\n });\n });\n}\n\n/**\n * Creates a Resource from a URL and calls fetchJsonp() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.callbackParameterName='callback'] The callback parameter name that the server expects.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchJsonp = function (options) {\n var resource = new Resource(options);\n return resource.fetchJsonp(options.callbackParameterName);\n};\n\n/**\n * @private\n */\nResource.prototype._makeRequest = function (options) {\n var resource = this;\n checkAndResetRequest(resource.request);\n\n var request = resource.request;\n request.url = resource.url;\n\n request.requestFunction = function () {\n var responseType = options.responseType;\n var headers = combine(options.headers, resource.headers);\n var overrideMimeType = options.overrideMimeType;\n var method = options.method;\n var data = options.data;\n var deferred = when.defer();\n var xhr = Resource._Implementations.loadWithXhr(\n resource.url,\n responseType,\n method,\n data,\n headers,\n deferred,\n overrideMimeType\n );\n if (defined(xhr) && defined(xhr.abort)) {\n request.cancelFunction = function () {\n xhr.abort();\n };\n }\n return deferred.promise;\n };\n\n var promise = RequestScheduler.request(request);\n if (!defined(promise)) {\n return;\n }\n\n return promise\n .then(function (data) {\n // explicitly set to undefined to ensure GC of request response data. See #8843\n request.cancelFunction = undefined;\n return data;\n })\n .otherwise(function (e) {\n request.cancelFunction = undefined;\n if (request.state !== RequestState.FAILED) {\n return when.reject(e);\n }\n\n return resource.retryOnError(e).then(function (retry) {\n if (retry) {\n // Reset request so it can try again\n request.state = RequestState.UNISSUED;\n request.deferred = undefined;\n\n return resource.fetch(options);\n }\n\n return when.reject(e);\n });\n });\n};\n\nvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\nfunction decodeDataUriText(isBase64, data) {\n var result = decodeURIComponent(data);\n if (isBase64) {\n return atob(result);\n }\n return result;\n}\n\nfunction decodeDataUriArrayBuffer(isBase64, data) {\n var byteString = decodeDataUriText(isBase64, data);\n var buffer = new ArrayBuffer(byteString.length);\n var view = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n view[i] = byteString.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction decodeDataUri(dataUriRegexResult, responseType) {\n responseType = defaultValue(responseType, \"\");\n var mimeType = dataUriRegexResult[1];\n var isBase64 = !!dataUriRegexResult[2];\n var data = dataUriRegexResult[3];\n\n switch (responseType) {\n case \"\":\n case \"text\":\n return decodeDataUriText(isBase64, data);\n case \"arraybuffer\":\n return decodeDataUriArrayBuffer(isBase64, data);\n case \"blob\":\n var buffer = decodeDataUriArrayBuffer(isBase64, data);\n return new Blob([buffer], {\n type: mimeType,\n });\n case \"document\":\n var parser = new DOMParser();\n return parser.parseFromString(\n decodeDataUriText(isBase64, data),\n mimeType\n );\n case \"json\":\n return JSON.parse(decodeDataUriText(isBase64, data));\n default:\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\"Unhandled responseType: \" + responseType);\n //>>includeEnd('debug');\n }\n}\n\n/**\n * Asynchronously loads the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. It's recommended that you use\n * the more specific functions eg. fetchJson, fetchBlob, etc.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.fetch()\n * .then(function(body) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetch = function (options) {\n options = defaultClone(options, {});\n options.method = \"GET\";\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls fetch() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetch = function (options) {\n var resource = new Resource(options);\n return resource.fetch({\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Asynchronously deletes the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.delete()\n * .then(function(body) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.delete = function (options) {\n options = defaultClone(options, {});\n options.method = \"DELETE\";\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls delete() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.data] Data that is posted with the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.delete = function (options) {\n var resource = new Resource(options);\n return resource.delete({\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n data: options.data,\n });\n};\n\n/**\n * Asynchronously gets headers the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.head()\n * .then(function(headers) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.head = function (options) {\n options = defaultClone(options, {});\n options.method = \"HEAD\";\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls head() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.head = function (options) {\n var resource = new Resource(options);\n return resource.head({\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Asynchronously gets options the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.options()\n * .then(function(headers) {\n * // use the data\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.options = function (options) {\n options = defaultClone(options, {});\n options.method = \"OPTIONS\";\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls options() on it.\n *\n * @param {String|Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.options = function (options) {\n var resource = new Resource(options);\n return resource.options({\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Asynchronously posts data to the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} data Data that is posted with the resource.\n * @param {Object} [options] Object with the following properties:\n * @param {Object} [options.data] Data that is posted with the resource.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.post(data)\n * .then(function(result) {\n * // use the result\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.post = function (data, options) {\n Check.defined(\"data\", data);\n\n options = defaultClone(options, {});\n options.method = \"POST\";\n options.data = data;\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls post() on it.\n *\n * @param {Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} options.data Data that is posted with the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.post = function (options) {\n var resource = new Resource(options);\n return resource.post(options.data, {\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Asynchronously puts data to the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} data Data that is posted with the resource.\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.put(data)\n * .then(function(result) {\n * // use the result\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.put = function (data, options) {\n Check.defined(\"data\", data);\n\n options = defaultClone(options, {});\n options.method = \"PUT\";\n options.data = data;\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls put() on it.\n *\n * @param {Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} options.data Data that is posted with the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.put = function (options) {\n var resource = new Resource(options);\n return resource.put(options.data, {\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Asynchronously patches data to the given resource. Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {Object} data Data that is posted with the resource.\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.patch(data)\n * .then(function(result) {\n * // use the result\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.patch = function (data, options) {\n Check.defined(\"data\", data);\n\n options = defaultClone(options, {});\n options.method = \"PATCH\";\n options.data = data;\n\n return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls patch() on it.\n *\n * @param {Object} options A url or an object with the following properties\n * @param {String} options.url The url of the resource.\n * @param {Object} options.data Data that is posted with the resource.\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.patch = function (options) {\n var resource = new Resource(options);\n return resource.patch(options.data, {\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n responseType: options.responseType,\n overrideMimeType: options.overrideMimeType,\n });\n};\n\n/**\n * Contains implementations of functions that can be replaced for testing\n *\n * @private\n */\nResource._Implementations = {};\n\nfunction loadImageElement(url, crossOrigin, deferred) {\n var image = new Image();\n\n image.onload = function () {\n deferred.resolve(image);\n };\n\n image.onerror = function (e) {\n deferred.reject(e);\n };\n\n if (crossOrigin) {\n if (TrustedServers.contains(url)) {\n image.crossOrigin = \"use-credentials\";\n } else {\n image.crossOrigin = \"\";\n }\n }\n\n image.src = url;\n}\n\nResource._Implementations.createImage = function (\n request,\n crossOrigin,\n deferred,\n flipY,\n preferImageBitmap\n) {\n var url = request.url;\n // Passing an Image to createImageBitmap will force it to run on the main thread\n // since DOM elements don't exist on workers. We convert it to a blob so it's non-blocking.\n // See:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1044102#c38\n // https://bugs.chromium.org/p/chromium/issues/detail?id=580202#c10\n Resource.supportsImageBitmapOptions()\n .then(function (supportsImageBitmap) {\n // We can only use ImageBitmap if we can flip on decode.\n // See: https://github.com/CesiumGS/cesium/pull/7579#issuecomment-466146898\n if (!(supportsImageBitmap && preferImageBitmap)) {\n loadImageElement(url, crossOrigin, deferred);\n return;\n }\n var responseType = \"blob\";\n var method = \"GET\";\n var xhrDeferred = when.defer();\n var xhr = Resource._Implementations.loadWithXhr(\n url,\n responseType,\n method,\n undefined,\n undefined,\n xhrDeferred,\n undefined,\n undefined,\n undefined\n );\n\n if (defined(xhr) && defined(xhr.abort)) {\n request.cancelFunction = function () {\n xhr.abort();\n };\n }\n return xhrDeferred.promise\n .then(function (blob) {\n if (!defined(blob)) {\n deferred.reject(\n new RuntimeError(\n \"Successfully retrieved \" +\n url +\n \" but it contained no content.\"\n )\n );\n return;\n }\n\n return Resource.createImageBitmapFromBlob(blob, {\n flipY: flipY,\n premultiplyAlpha: false,\n });\n })\n .then(deferred.resolve);\n })\n .otherwise(deferred.reject);\n};\n\n/**\n * Wrapper for createImageBitmap\n *\n * @private\n */\nResource.createImageBitmapFromBlob = function (blob, options) {\n Check.defined(\"options\", options);\n Check.typeOf.bool(\"options.flipY\", options.flipY);\n Check.typeOf.bool(\"options.premultiplyAlpha\", options.premultiplyAlpha);\n\n return createImageBitmap(blob, {\n imageOrientation: options.flipY ? \"flipY\" : \"none\",\n premultiplyAlpha: options.premultiplyAlpha ? \"premultiply\" : \"none\",\n });\n};\n\nfunction decodeResponse(loadWithHttpResponse, responseType) {\n switch (responseType) {\n case \"text\":\n return loadWithHttpResponse.toString(\"utf8\");\n case \"json\":\n return JSON.parse(loadWithHttpResponse.toString(\"utf8\"));\n default:\n return new Uint8Array(loadWithHttpResponse).buffer;\n }\n}\n\nfunction loadWithHttpRequest(\n url,\n responseType,\n method,\n data,\n headers,\n deferred,\n overrideMimeType\n) {\n // Note: only the 'json' and 'text' responseTypes transforms the loaded buffer\n /* eslint-disable no-undef */\n var URL = require(\"url\").parse(url);\n var http = URL.protocol === \"https:\" ? require(\"https\") : require(\"http\");\n var zlib = require(\"zlib\");\n /* eslint-enable no-undef */\n\n var options = {\n protocol: URL.protocol,\n hostname: URL.hostname,\n port: URL.port,\n path: URL.path,\n query: URL.query,\n method: method,\n headers: headers,\n };\n\n http\n .request(options)\n .on(\"response\", function (res) {\n if (res.statusCode < 200 || res.statusCode >= 300) {\n deferred.reject(\n new RequestErrorEvent(res.statusCode, res, res.headers)\n );\n return;\n }\n\n var chunkArray = [];\n res.on(\"data\", function (chunk) {\n chunkArray.push(chunk);\n });\n\n res.on(\"end\", function () {\n // eslint-disable-next-line no-undef\n var result = Buffer.concat(chunkArray);\n if (res.headers[\"content-encoding\"] === \"gzip\") {\n zlib.gunzip(result, function (error, resultUnzipped) {\n if (error) {\n deferred.reject(\n new RuntimeError(\"Error decompressing response.\")\n );\n } else {\n deferred.resolve(decodeResponse(resultUnzipped, responseType));\n }\n });\n } else {\n deferred.resolve(decodeResponse(result, responseType));\n }\n });\n })\n .on(\"error\", function (e) {\n deferred.reject(new RequestErrorEvent());\n })\n .end();\n}\n\nvar noXMLHttpRequest = typeof XMLHttpRequest === \"undefined\";\nResource._Implementations.loadWithXhr = function (\n url,\n responseType,\n method,\n data,\n headers,\n deferred,\n overrideMimeType\n) {\n var dataUriRegexResult = dataUriRegex.exec(url);\n if (dataUriRegexResult !== null) {\n deferred.resolve(decodeDataUri(dataUriRegexResult, responseType));\n return;\n }\n\n if (noXMLHttpRequest) {\n loadWithHttpRequest(\n url,\n responseType,\n method,\n data,\n headers,\n deferred,\n overrideMimeType\n );\n return;\n }\n\n var xhr = new XMLHttpRequest();\n\n if (TrustedServers.contains(url)) {\n xhr.withCredentials = true;\n }\n\n xhr.open(method, url, true);\n\n if (defined(overrideMimeType) && defined(xhr.overrideMimeType)) {\n xhr.overrideMimeType(overrideMimeType);\n }\n\n if (defined(headers)) {\n for (var key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n if (defined(responseType)) {\n xhr.responseType = responseType;\n }\n\n // While non-standard, file protocol always returns a status of 0 on success\n var localFile = false;\n if (typeof url === \"string\") {\n localFile =\n url.indexOf(\"file://\") === 0 ||\n (typeof window !== \"undefined\" && window.location.origin === \"file://\");\n }\n\n xhr.onload = function () {\n if (\n (xhr.status < 200 || xhr.status >= 300) &&\n !(localFile && xhr.status === 0)\n ) {\n deferred.reject(\n new RequestErrorEvent(\n xhr.status,\n xhr.response,\n xhr.getAllResponseHeaders()\n )\n );\n return;\n }\n\n var response = xhr.response;\n var browserResponseType = xhr.responseType;\n\n if (method === \"HEAD\" || method === \"OPTIONS\") {\n var responseHeaderString = xhr.getAllResponseHeaders();\n var splitHeaders = responseHeaderString.trim().split(/[\\r\\n]+/);\n\n var responseHeaders = {};\n splitHeaders.forEach(function (line) {\n var parts = line.split(\": \");\n var header = parts.shift();\n responseHeaders[header] = parts.join(\": \");\n });\n\n deferred.resolve(responseHeaders);\n return;\n }\n\n //All modern browsers will go into either the first or second if block or last else block.\n //Other code paths support older browsers that either do not support the supplied responseType\n //or do not support the xhr.response property.\n if (xhr.status === 204) {\n // accept no content\n deferred.resolve();\n } else if (\n defined(response) &&\n (!defined(responseType) || browserResponseType === responseType)\n ) {\n deferred.resolve(response);\n } else if (responseType === \"json\" && typeof response === \"string\") {\n try {\n deferred.resolve(JSON.parse(response));\n } catch (e) {\n deferred.reject(e);\n }\n } else if (\n (browserResponseType === \"\" || browserResponseType === \"document\") &&\n defined(xhr.responseXML) &&\n xhr.responseXML.hasChildNodes()\n ) {\n deferred.resolve(xhr.responseXML);\n } else if (\n (browserResponseType === \"\" || browserResponseType === \"text\") &&\n defined(xhr.responseText)\n ) {\n deferred.resolve(xhr.responseText);\n } else {\n deferred.reject(\n new RuntimeError(\"Invalid XMLHttpRequest response type.\")\n );\n }\n };\n\n xhr.onerror = function (e) {\n deferred.reject(new RequestErrorEvent());\n };\n\n xhr.send(data);\n\n return xhr;\n};\n\nResource._Implementations.loadAndExecuteScript = function (\n url,\n functionName,\n deferred\n) {\n return loadAndExecuteScript(url, functionName).otherwise(deferred.reject);\n};\n\n/**\n * The default implementations\n *\n * @private\n */\nResource._DefaultImplementations = {};\nResource._DefaultImplementations.createImage =\n Resource._Implementations.createImage;\nResource._DefaultImplementations.loadWithXhr =\n Resource._Implementations.loadWithXhr;\nResource._DefaultImplementations.loadAndExecuteScript =\n Resource._Implementations.loadAndExecuteScript;\n\n/**\n * A resource instance initialized to the current browser location\n *\n * @type {Resource}\n * @constant\n */\nResource.DEFAULT = Object.freeze(\n new Resource({\n url:\n typeof document === \"undefined\"\n ? \"\"\n : document.location.href.split(\"?\")[0],\n })\n);\n\n/**\n * A function that returns the value of the property.\n * @callback Resource.RetryCallback\n *\n * @param {Resource} [resource] The resource that failed to load.\n * @param {Error} [error] The error that occurred during the loading of the resource.\n * @returns {Boolean|Promise<Boolean>} If true or a promise that resolved to true, the resource will be retried. Otherwise the failure will be returned.\n */\nexport default Resource;\n","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Classes } from \"@blueprintjs/core\";\nvar NS = Classes.getClassNamespace();\nexport var MULTISELECT = NS + \"-multi-select\";\nexport var MULTISELECT_POPOVER = MULTISELECT + \"-popover\";\nexport var MULTISELECT_TAG_INPUT_INPUT = MULTISELECT + \"-tag-input-input\";\nexport var OMNIBAR = NS + \"-omnibar\";\nexport var OMNIBAR_OVERLAY = OMNIBAR + \"-overlay\";\nexport var SELECT = NS + \"-select\";\nexport var SELECT_POPOVER = SELECT + \"-popover\";\n//# sourceMappingURL=classes.js.map","/*\n I've wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n so it's better encapsulated. Now you can have multiple random number generators\n and they won't stomp all over eachother's state.\n\n If you want to use this as a substitute for Math.random(), use the random()\n method like so:\n\n var m = new MersenneTwister();\n var randomNumber = m.random();\n\n You can also call the other genrand_{foo}() methods on the instance.\n\n If you want to use a specific seed in order to get a repeatable random\n sequence, pass an integer into the constructor:\n\n var m = new MersenneTwister(123);\n\n and that will always produce the same random sequence.\n\n Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_genrand(seed)\n or init_by_array(init_key, key_length).\n*/\n/**\n@license\nmersenne-twister.js - https://gist.github.com/banksean/300494\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nfunction MersenneTwister(seed) {\n if (seed == undefined) {\n seed = new Date().getTime();\n }\n /* Period parameters */\n this.N = 624;\n this.M = 397;\n this.MATRIX_A = 0x9908b0df; /* constant vector a */\n this.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n this.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n this.mt = new Array(this.N); /* the array for the state vector */\n this.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n this.init_genrand(seed);\n}\n\n/* initializes mt[N] with a seed */\nMersenneTwister.prototype.init_genrand = function(s) {\n this.mt[0] = s >>> 0;\n for (this.mti=1; this.mti<this.N; this.mti++) {\n var s = this.mt[this.mti-1] ^ (this.mt[this.mti-1] >>> 30);\n this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n + this.mti;\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n /* In the previous versions, MSBs of the seed affect */\n /* only MSBs of the array mt[]. */\n /* 2002/01/09 modified by Makoto Matsumoto */\n this.mt[this.mti] >>>= 0;\n /* for >32 bit machines */\n }\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\n//MersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n// var i, j, k;\n// this.init_genrand(19650218);\n// i=1; j=0;\n// k = (this.N>key_length ? this.N : key_length);\n// for (; k; k--) {\n// var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n// this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n// + init_key[j] + j; /* non linear */\n// this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n// i++; j++;\n// if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n// if (j>=key_length) j=0;\n// }\n// for (k=this.N-1; k; k--) {\n// var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n// this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n// - i; /* non linear */\n// this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n// i++;\n// if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n// }\n//\n// this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n//}\n\n/* generates a random number on [0,0xffffffff]-interval */\nMersenneTwister.prototype.genrand_int32 = function() {\n var y;\n var mag01 = new Array(0x0, this.MATRIX_A);\n /* mag01[x] = x * MATRIX_A for x=0,1 */\n\n if (this.mti >= this.N) { /* generate N words at one time */\n var kk;\n\n if (this.mti == this.N+1) /* if init_genrand() has not been called, */\n this.init_genrand(5489); /* a default initial seed is used */\n\n for (kk=0;kk<this.N-this.M;kk++) {\n y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);\n this.mt[kk] = this.mt[kk+this.M] ^ (y >>> 1) ^ mag01[y & 0x1];\n }\n for (;kk<this.N-1;kk++) {\n y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);\n this.mt[kk] = this.mt[kk+(this.M-this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];\n }\n y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n this.mti = 0;\n }\n\n y = this.mt[this.mti++];\n\n /* Tempering */\n y ^= (y >>> 11);\n y ^= (y << 7) & 0x9d2c5680;\n y ^= (y << 15) & 0xefc60000;\n y ^= (y >>> 18);\n\n return y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n//MersenneTwister.prototype.genrand_int31 = function() {\n// return (this.genrand_int32()>>>1);\n//}\n\n/* generates a random number on [0,1]-real-interval */\n//MersenneTwister.prototype.genrand_real1 = function() {\n// return this.genrand_int32()*(1.0/4294967295.0);\n// /* divided by 2^32-1 */\n//}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n return this.genrand_int32()*(1.0/4294967296.0);\n /* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n//MersenneTwister.prototype.genrand_real3 = function() {\n// return (this.genrand_int32() + 0.5)*(1.0/4294967296.0);\n// /* divided by 2^32 */\n//}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n//MersenneTwister.prototype.genrand_res53 = function() {\n// var a=this.genrand_int32()>>>5, b=this.genrand_int32()>>>6;\n// return(a*67108864.0+b)*(1.0/9007199254740992.0);\n//}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nexport default MersenneTwister;\n","import MersenneTwister from \"../ThirdParty/mersenne-twister.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Math functions.\n *\n * @exports CesiumMath\n * @alias Math\n */\nvar CesiumMath = {};\n\n/**\n * 0.1\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON1 = 0.1;\n\n/**\n * 0.01\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON2 = 0.01;\n\n/**\n * 0.001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON3 = 0.001;\n\n/**\n * 0.0001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON4 = 0.0001;\n\n/**\n * 0.00001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON5 = 0.00001;\n\n/**\n * 0.000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON6 = 0.000001;\n\n/**\n * 0.0000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON7 = 0.0000001;\n\n/**\n * 0.00000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON8 = 0.00000001;\n\n/**\n * 0.000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON9 = 0.000000001;\n\n/**\n * 0.0000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON10 = 0.0000000001;\n\n/**\n * 0.00000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON11 = 0.00000000001;\n\n/**\n * 0.000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON12 = 0.000000000001;\n\n/**\n * 0.0000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON13 = 0.0000000000001;\n\n/**\n * 0.00000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON14 = 0.00000000000001;\n\n/**\n * 0.000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON15 = 0.000000000000001;\n\n/**\n * 0.0000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON16 = 0.0000000000000001;\n\n/**\n * 0.00000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON17 = 0.00000000000000001;\n\n/**\n * 0.000000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON18 = 0.000000000000000001;\n\n/**\n * 0.0000000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON19 = 0.0000000000000000001;\n\n/**\n * 0.00000000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON20 = 0.00000000000000000001;\n\n/**\n * 0.000000000000000000001\n * @type {Number}\n * @constant\n */\nCesiumMath.EPSILON21 = 0.000000000000000000001;\n\n/**\n * The gravitational parameter of the Earth in meters cubed\n * per second squared as defined by the WGS84 model: 3.986004418e14\n * @type {Number}\n * @constant\n */\nCesiumMath.GRAVITATIONALPARAMETER = 3.986004418e14;\n\n/**\n * Radius of the sun in meters: 6.955e8\n * @type {Number}\n * @constant\n */\nCesiumMath.SOLAR_RADIUS = 6.955e8;\n\n/**\n * The mean radius of the moon, according to the \"Report of the IAU/IAG Working Group on\n * Cartographic Coordinates and Rotational Elements of the Planets and satellites: 2000\",\n * Celestial Mechanics 82: 83-110, 2002.\n * @type {Number}\n * @constant\n */\nCesiumMath.LUNAR_RADIUS = 1737400.0;\n\n/**\n * 64 * 1024\n * @type {Number}\n * @constant\n */\nCesiumMath.SIXTY_FOUR_KILOBYTES = 64 * 1024;\n\n/**\n * 4 * 1024 * 1024 * 1024\n * @type {Number}\n * @constant\n */\nCesiumMath.FOUR_GIGABYTES = 4 * 1024 * 1024 * 1024;\n\n/**\n * Returns the sign of the value; 1 if the value is positive, -1 if the value is\n * negative, or 0 if the value is 0.\n *\n * @function\n * @param {Number} value The value to return the sign of.\n * @returns {Number} The sign of value.\n */\nCesiumMath.sign = defaultValue(Math.sign, function sign(value) {\n value = +value; // coerce to number\n if (value === 0 || value !== value) {\n // zero or NaN\n return value;\n }\n return value > 0 ? 1 : -1;\n});\n\n/**\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative.\n * This is similar to {@link CesiumMath#sign} except that returns 1.0 instead of\n * 0.0 when the input value is 0.0.\n * @param {Number} value The value to return the sign of.\n * @returns {Number} The sign of value.\n */\nCesiumMath.signNotZero = function (value) {\n return value < 0.0 ? -1.0 : 1.0;\n};\n\n/**\n * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum]\n * @param {Number} value The scalar value in the range [-1.0, 1.0]\n * @param {Number} [rangeMaximum=255] The maximum value in the mapped range, 255 by default.\n * @returns {Number} A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0.\n *\n * @see CesiumMath.fromSNorm\n */\nCesiumMath.toSNorm = function (value, rangeMaximum) {\n rangeMaximum = defaultValue(rangeMaximum, 255);\n return Math.round(\n (CesiumMath.clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum\n );\n};\n\n/**\n * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0].\n * @param {Number} value SNORM value in the range [0, rangeMaximum]\n * @param {Number} [rangeMaximum=255] The maximum value in the SNORM range, 255 by default.\n * @returns {Number} Scalar in the range [-1.0, 1.0].\n *\n * @see CesiumMath.toSNorm\n */\nCesiumMath.fromSNorm = function (value, rangeMaximum) {\n rangeMaximum = defaultValue(rangeMaximum, 255);\n return (\n (CesiumMath.clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0\n );\n};\n\n/**\n * Converts a scalar value in the range [rangeMinimum, rangeMaximum] to a scalar in the range [0.0, 1.0]\n * @param {Number} value The scalar value in the range [rangeMinimum, rangeMaximum]\n * @param {Number} rangeMinimum The minimum value in the mapped range.\n * @param {Number} rangeMaximum The maximum value in the mapped range.\n * @returns {Number} A scalar value, where rangeMinimum maps to 0.0 and rangeMaximum maps to 1.0.\n */\nCesiumMath.normalize = function (value, rangeMinimum, rangeMaximum) {\n rangeMaximum = Math.max(rangeMaximum - rangeMinimum, 0.0);\n return rangeMaximum === 0.0\n ? 0.0\n : CesiumMath.clamp((value - rangeMinimum) / rangeMaximum, 0.0, 1.0);\n};\n\n/**\n * Returns the hyperbolic sine of a number.\n * The hyperbolic sine of <em>value</em> is defined to be\n * (<em>e<sup>x</sup> - e<sup>-x</sup></em>)/2.0\n * where <i>e</i> is Euler's number, approximately 2.71828183.\n *\n * <p>Special cases:\n * <ul>\n * <li>If the argument is NaN, then the result is NaN.</li>\n *\n * <li>If the argument is infinite, then the result is an infinity\n * with the same sign as the argument.</li>\n *\n * <li>If the argument is zero, then the result is a zero with the\n * same sign as the argument.</li>\n * </ul>\n *</p>\n *\n * @function\n * @param {Number} value The number whose hyperbolic sine is to be returned.\n * @returns {Number} The hyperbolic sine of <code>value</code>.\n */\nCesiumMath.sinh = defaultValue(Math.sinh, function sinh(value) {\n return (Math.exp(value) - Math.exp(-value)) / 2.0;\n});\n\n/**\n * Returns the hyperbolic cosine of a number.\n * The hyperbolic cosine of <strong>value</strong> is defined to be\n * (<em>e<sup>x</sup> + e<sup>-x</sup></em>)/2.0\n * where <i>e</i> is Euler's number, approximately 2.71828183.\n *\n * <p>Special cases:\n * <ul>\n * <li>If the argument is NaN, then the result is NaN.</li>\n *\n * <li>If the argument is infinite, then the result is positive infinity.</li>\n *\n * <li>If the argument is zero, then the result is 1.0.</li>\n * </ul>\n *</p>\n *\n * @function\n * @param {Number} value The number whose hyperbolic cosine is to be returned.\n * @returns {Number} The hyperbolic cosine of <code>value</code>.\n */\nCesiumMath.cosh = defaultValue(Math.cosh, function cosh(value) {\n return (Math.exp(value) + Math.exp(-value)) / 2.0;\n});\n\n/**\n * Computes the linear interpolation of two values.\n *\n * @param {Number} p The start value to interpolate.\n * @param {Number} q The end value to interpolate.\n * @param {Number} time The time of interpolation generally in the range <code>[0.0, 1.0]</code>.\n * @returns {Number} The linearly interpolated value.\n *\n * @example\n * var n = Cesium.Math.lerp(0.0, 2.0, 0.5); // returns 1.0\n */\nCesiumMath.lerp = function (p, q, time) {\n return (1.0 - time) * p + time * q;\n};\n\n/**\n * pi\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.PI = Math.PI;\n\n/**\n * 1/pi\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.ONE_OVER_PI = 1.0 / Math.PI;\n\n/**\n * pi/2\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.PI_OVER_TWO = Math.PI / 2.0;\n\n/**\n * pi/3\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.PI_OVER_THREE = Math.PI / 3.0;\n\n/**\n * pi/4\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.PI_OVER_FOUR = Math.PI / 4.0;\n\n/**\n * pi/6\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.PI_OVER_SIX = Math.PI / 6.0;\n\n/**\n * 3pi/2\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.THREE_PI_OVER_TWO = (3.0 * Math.PI) / 2.0;\n\n/**\n * 2pi\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.TWO_PI = 2.0 * Math.PI;\n\n/**\n * 1/2pi\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.ONE_OVER_TWO_PI = 1.0 / (2.0 * Math.PI);\n\n/**\n * The number of radians in a degree.\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.RADIANS_PER_DEGREE = Math.PI / 180.0;\n\n/**\n * The number of degrees in a radian.\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.DEGREES_PER_RADIAN = 180.0 / Math.PI;\n\n/**\n * The number of radians in an arc second.\n *\n * @type {Number}\n * @constant\n */\nCesiumMath.RADIANS_PER_ARCSECOND = CesiumMath.RADIANS_PER_DEGREE / 3600.0;\n\n/**\n * Converts degrees to radians.\n * @param {Number} degrees The angle to convert in degrees.\n * @returns {Number} The corresponding angle in radians.\n */\nCesiumMath.toRadians = function (degrees) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(degrees)) {\n throw new DeveloperError(\"degrees is required.\");\n }\n //>>includeEnd('debug');\n return degrees * CesiumMath.RADIANS_PER_DEGREE;\n};\n\n/**\n * Converts radians to degrees.\n * @param {Number} radians The angle to convert in radians.\n * @returns {Number} The corresponding angle in degrees.\n */\nCesiumMath.toDegrees = function (radians) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(radians)) {\n throw new DeveloperError(\"radians is required.\");\n }\n //>>includeEnd('debug');\n return radians * CesiumMath.DEGREES_PER_RADIAN;\n};\n\n/**\n * Converts a longitude value, in radians, to the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n *\n * @param {Number} angle The longitude value, in radians, to convert to the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n * @returns {Number} The equivalent longitude value in the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n *\n * @example\n * // Convert 270 degrees to -90 degrees longitude\n * var longitude = Cesium.Math.convertLongitudeRange(Cesium.Math.toRadians(270.0));\n */\nCesiumMath.convertLongitudeRange = function (angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(angle)) {\n throw new DeveloperError(\"angle is required.\");\n }\n //>>includeEnd('debug');\n var twoPi = CesiumMath.TWO_PI;\n\n var simplified = angle - Math.floor(angle / twoPi) * twoPi;\n\n if (simplified < -Math.PI) {\n return simplified + twoPi;\n }\n if (simplified >= Math.PI) {\n return simplified - twoPi;\n }\n\n return simplified;\n};\n\n/**\n * Convenience function that clamps a latitude value, in radians, to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n * Useful for sanitizing data before use in objects requiring correct range.\n *\n * @param {Number} angle The latitude value, in radians, to clamp to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n * @returns {Number} The latitude value clamped to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n *\n * @example\n * // Clamp 108 degrees latitude to 90 degrees latitude\n * var latitude = Cesium.Math.clampToLatitudeRange(Cesium.Math.toRadians(108.0));\n */\nCesiumMath.clampToLatitudeRange = function (angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(angle)) {\n throw new DeveloperError(\"angle is required.\");\n }\n //>>includeEnd('debug');\n\n return CesiumMath.clamp(\n angle,\n -1 * CesiumMath.PI_OVER_TWO,\n CesiumMath.PI_OVER_TWO\n );\n};\n\n/**\n * Produces an angle in the range -Pi <= angle <= Pi which is equivalent to the provided angle.\n *\n * @param {Number} angle in radians\n * @returns {Number} The angle in the range [<code>-CesiumMath.PI</code>, <code>CesiumMath.PI</code>].\n */\nCesiumMath.negativePiToPi = function (angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(angle)) {\n throw new DeveloperError(\"angle is required.\");\n }\n //>>includeEnd('debug');\n return CesiumMath.zeroToTwoPi(angle + CesiumMath.PI) - CesiumMath.PI;\n};\n\n/**\n * Produces an angle in the range 0 <= angle <= 2Pi which is equivalent to the provided angle.\n *\n * @param {Number} angle in radians\n * @returns {Number} The angle in the range [0, <code>CesiumMath.TWO_PI</code>].\n */\nCesiumMath.zeroToTwoPi = function (angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(angle)) {\n throw new DeveloperError(\"angle is required.\");\n }\n //>>includeEnd('debug');\n var mod = CesiumMath.mod(angle, CesiumMath.TWO_PI);\n if (\n Math.abs(mod) < CesiumMath.EPSILON14 &&\n Math.abs(angle) > CesiumMath.EPSILON14\n ) {\n return CesiumMath.TWO_PI;\n }\n return mod;\n};\n\n/**\n * The modulo operation that also works for negative dividends.\n *\n * @param {Number} m The dividend.\n * @param {Number} n The divisor.\n * @returns {Number} The remainder.\n */\nCesiumMath.mod = function (m, n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(m)) {\n throw new DeveloperError(\"m is required.\");\n }\n if (!defined(n)) {\n throw new DeveloperError(\"n is required.\");\n }\n //>>includeEnd('debug');\n return ((m % n) + n) % n;\n};\n\n/**\n * Determines if two values are equal using an absolute or relative tolerance test. This is useful\n * to avoid problems due to roundoff error when comparing floating-point values directly. The values are\n * first compared using an absolute tolerance test. If that fails, a relative tolerance test is performed.\n * Use this test if you are unsure of the magnitudes of left and right.\n *\n * @param {Number} left The first value to compare.\n * @param {Number} right The other value to compare.\n * @param {Number} [relativeEpsilon=0] The maximum inclusive delta between <code>left</code> and <code>right</code> for the relative tolerance test.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The maximum inclusive delta between <code>left</code> and <code>right</code> for the absolute tolerance test.\n * @returns {Boolean} <code>true</code> if the values are equal within the epsilon; otherwise, <code>false</code>.\n *\n * @example\n * var a = Cesium.Math.equalsEpsilon(0.0, 0.01, Cesium.Math.EPSILON2); // true\n * var b = Cesium.Math.equalsEpsilon(0.0, 0.1, Cesium.Math.EPSILON2); // false\n * var c = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON7); // true\n * var d = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON9); // false\n */\nCesiumMath.equalsEpsilon = function (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"left is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"right is required.\");\n }\n //>>includeEnd('debug');\n\n relativeEpsilon = defaultValue(relativeEpsilon, 0.0);\n absoluteEpsilon = defaultValue(absoluteEpsilon, relativeEpsilon);\n var absDiff = Math.abs(left - right);\n return (\n absDiff <= absoluteEpsilon ||\n absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right))\n );\n};\n\n/**\n * Determines if the left value is less than the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns false.\n *\n * @param {Number} left The first number to compare.\n * @param {Number} right The second number to compare.\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {Boolean} <code>true</code> if <code>left</code> is less than <code>right</code> by more than\n * <code>absoluteEpsilon<code>. <code>false</code> if <code>left</code> is greater or if the two\n * values are nearly equal.\n */\nCesiumMath.lessThan = function (left, right, absoluteEpsilon) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"first is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"second is required.\");\n }\n if (!defined(absoluteEpsilon)) {\n throw new DeveloperError(\"relativeEpsilon is required.\");\n }\n //>>includeEnd('debug');\n return left - right < -absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is less than or equal to the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns true.\n *\n * @param {Number} left The first number to compare.\n * @param {Number} right The second number to compare.\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {Boolean} <code>true</code> if <code>left</code> is less than <code>right</code> or if the\n * the values are nearly equal.\n */\nCesiumMath.lessThanOrEquals = function (left, right, absoluteEpsilon) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"first is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"second is required.\");\n }\n if (!defined(absoluteEpsilon)) {\n throw new DeveloperError(\"relativeEpsilon is required.\");\n }\n //>>includeEnd('debug');\n return left - right < absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is greater the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns false.\n *\n * @param {Number} left The first number to compare.\n * @param {Number} right The second number to compare.\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {Boolean} <code>true</code> if <code>left</code> is greater than <code>right</code> by more than\n * <code>absoluteEpsilon<code>. <code>false</code> if <code>left</code> is less or if the two\n * values are nearly equal.\n */\nCesiumMath.greaterThan = function (left, right, absoluteEpsilon) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"first is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"second is required.\");\n }\n if (!defined(absoluteEpsilon)) {\n throw new DeveloperError(\"relativeEpsilon is required.\");\n }\n //>>includeEnd('debug');\n return left - right > absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is greater than or equal to the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns true.\n *\n * @param {Number} left The first number to compare.\n * @param {Number} right The second number to compare.\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {Boolean} <code>true</code> if <code>left</code> is greater than <code>right</code> or if the\n * the values are nearly equal.\n */\nCesiumMath.greaterThanOrEquals = function (left, right, absoluteEpsilon) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"first is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"second is required.\");\n }\n if (!defined(absoluteEpsilon)) {\n throw new DeveloperError(\"relativeEpsilon is required.\");\n }\n //>>includeEnd('debug');\n return left - right > -absoluteEpsilon;\n};\n\nvar factorials = [1];\n\n/**\n * Computes the factorial of the provided number.\n *\n * @param {Number} n The number whose factorial is to be computed.\n * @returns {Number} The factorial of the provided number or undefined if the number is less than 0.\n *\n * @exception {DeveloperError} A number greater than or equal to 0 is required.\n *\n *\n * @example\n * //Compute 7!, which is equal to 5040\n * var computedFactorial = Cesium.Math.factorial(7);\n *\n * @see {@link http://en.wikipedia.org/wiki/Factorial|Factorial on Wikipedia}\n */\nCesiumMath.factorial = function (n) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof n !== \"number\" || n < 0) {\n throw new DeveloperError(\n \"A number greater than or equal to 0 is required.\"\n );\n }\n //>>includeEnd('debug');\n\n var length = factorials.length;\n if (n >= length) {\n var sum = factorials[length - 1];\n for (var i = length; i <= n; i++) {\n var next = sum * i;\n factorials.push(next);\n sum = next;\n }\n }\n return factorials[n];\n};\n\n/**\n * Increments a number with a wrapping to a minimum value if the number exceeds the maximum value.\n *\n * @param {Number} [n] The number to be incremented.\n * @param {Number} [maximumValue] The maximum incremented value before rolling over to the minimum value.\n * @param {Number} [minimumValue=0.0] The number reset to after the maximum value has been exceeded.\n * @returns {Number} The incremented number.\n *\n * @exception {DeveloperError} Maximum value must be greater than minimum value.\n *\n * @example\n * var n = Cesium.Math.incrementWrap(5, 10, 0); // returns 6\n * var n = Cesium.Math.incrementWrap(10, 10, 0); // returns 0\n */\nCesiumMath.incrementWrap = function (n, maximumValue, minimumValue) {\n minimumValue = defaultValue(minimumValue, 0.0);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(n)) {\n throw new DeveloperError(\"n is required.\");\n }\n if (maximumValue <= minimumValue) {\n throw new DeveloperError(\"maximumValue must be greater than minimumValue.\");\n }\n //>>includeEnd('debug');\n\n ++n;\n if (n > maximumValue) {\n n = minimumValue;\n }\n return n;\n};\n\n/**\n * Determines if a positive integer is a power of two.\n *\n * @param {Number} n The positive integer to test.\n * @returns {Boolean} <code>true</code> if the number if a power of two; otherwise, <code>false</code>.\n *\n * @exception {DeveloperError} A number greater than or equal to 0 is required.\n *\n * @example\n * var t = Cesium.Math.isPowerOfTwo(16); // true\n * var f = Cesium.Math.isPowerOfTwo(20); // false\n */\nCesiumMath.isPowerOfTwo = function (n) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof n !== \"number\" || n < 0) {\n throw new DeveloperError(\n \"A number greater than or equal to 0 is required.\"\n );\n }\n //>>includeEnd('debug');\n\n return n !== 0 && (n & (n - 1)) === 0;\n};\n\n/**\n * Computes the next power-of-two integer greater than or equal to the provided positive integer.\n *\n * @param {Number} n The positive integer to test.\n * @returns {Number} The next power-of-two integer.\n *\n * @exception {DeveloperError} A number greater than or equal to 0 is required.\n *\n * @example\n * var n = Cesium.Math.nextPowerOfTwo(29); // 32\n * var m = Cesium.Math.nextPowerOfTwo(32); // 32\n */\nCesiumMath.nextPowerOfTwo = function (n) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof n !== \"number\" || n < 0) {\n throw new DeveloperError(\n \"A number greater than or equal to 0 is required.\"\n );\n }\n //>>includeEnd('debug');\n\n // From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2\n --n;\n n |= n >> 1;\n n |= n >> 2;\n n |= n >> 4;\n n |= n >> 8;\n n |= n >> 16;\n ++n;\n\n return n;\n};\n\n/**\n * Constraint a value to lie between two values.\n *\n * @param {Number} value The value to constrain.\n * @param {Number} min The minimum value.\n * @param {Number} max The maximum value.\n * @returns {Number} The value clamped so that min <= value <= max.\n */\nCesiumMath.clamp = function (value, min, max) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(min)) {\n throw new DeveloperError(\"min is required.\");\n }\n if (!defined(max)) {\n throw new DeveloperError(\"max is required.\");\n }\n //>>includeEnd('debug');\n return value < min ? min : value > max ? max : value;\n};\n\nvar randomNumberGenerator = new MersenneTwister();\n\n/**\n * Sets the seed used by the random number generator\n * in {@link CesiumMath#nextRandomNumber}.\n *\n * @param {Number} seed An integer used as the seed.\n */\nCesiumMath.setRandomNumberSeed = function (seed) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(seed)) {\n throw new DeveloperError(\"seed is required.\");\n }\n //>>includeEnd('debug');\n\n randomNumberGenerator = new MersenneTwister(seed);\n};\n\n/**\n * Generates a random floating point number in the range of [0.0, 1.0)\n * using a Mersenne twister.\n *\n * @returns {Number} A random number in the range of [0.0, 1.0).\n *\n * @see CesiumMath.setRandomNumberSeed\n * @see {@link http://en.wikipedia.org/wiki/Mersenne_twister|Mersenne twister on Wikipedia}\n */\nCesiumMath.nextRandomNumber = function () {\n return randomNumberGenerator.random();\n};\n\n/**\n * Generates a random number between two numbers.\n *\n * @param {Number} min The minimum value.\n * @param {Number} max The maximum value.\n * @returns {Number} A random number between the min and max.\n */\nCesiumMath.randomBetween = function (min, max) {\n return CesiumMath.nextRandomNumber() * (max - min) + min;\n};\n\n/**\n * Computes <code>Math.acos(value)</code>, but first clamps <code>value</code> to the range [-1.0, 1.0]\n * so that the function will never return NaN.\n *\n * @param {Number} value The value for which to compute acos.\n * @returns {Number} The acos of the value if the value is in the range [-1.0, 1.0], or the acos of -1.0 or 1.0,\n * whichever is closer, if the value is outside the range.\n */\nCesiumMath.acosClamped = function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n return Math.acos(CesiumMath.clamp(value, -1.0, 1.0));\n};\n\n/**\n * Computes <code>Math.asin(value)</code>, but first clamps <code>value</code> to the range [-1.0, 1.0]\n * so that the function will never return NaN.\n *\n * @param {Number} value The value for which to compute asin.\n * @returns {Number} The asin of the value if the value is in the range [-1.0, 1.0], or the asin of -1.0 or 1.0,\n * whichever is closer, if the value is outside the range.\n */\nCesiumMath.asinClamped = function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n return Math.asin(CesiumMath.clamp(value, -1.0, 1.0));\n};\n\n/**\n * Finds the chord length between two points given the circle's radius and the angle between the points.\n *\n * @param {Number} angle The angle between the two points.\n * @param {Number} radius The radius of the circle.\n * @returns {Number} The chord length.\n */\nCesiumMath.chordLength = function (angle, radius) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(angle)) {\n throw new DeveloperError(\"angle is required.\");\n }\n if (!defined(radius)) {\n throw new DeveloperError(\"radius is required.\");\n }\n //>>includeEnd('debug');\n return 2.0 * radius * Math.sin(angle * 0.5);\n};\n\n/**\n * Finds the logarithm of a number to a base.\n *\n * @param {Number} number The number.\n * @param {Number} base The base.\n * @returns {Number} The result.\n */\nCesiumMath.logBase = function (number, base) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(number)) {\n throw new DeveloperError(\"number is required.\");\n }\n if (!defined(base)) {\n throw new DeveloperError(\"base is required.\");\n }\n //>>includeEnd('debug');\n return Math.log(number) / Math.log(base);\n};\n\n/**\n * Finds the cube root of a number.\n * Returns NaN if <code>number</code> is not provided.\n *\n * @function\n * @param {Number} [number] The number.\n * @returns {Number} The result.\n */\nCesiumMath.cbrt = defaultValue(Math.cbrt, function cbrt(number) {\n var result = Math.pow(Math.abs(number), 1.0 / 3.0);\n return number < 0.0 ? -result : result;\n});\n\n/**\n * Finds the base 2 logarithm of a number.\n *\n * @function\n * @param {Number} number The number.\n * @returns {Number} The result.\n */\nCesiumMath.log2 = defaultValue(Math.log2, function log2(number) {\n return Math.log(number) * Math.LOG2E;\n});\n\n/**\n * @private\n */\nCesiumMath.fog = function (distanceToCamera, density) {\n var scalar = distanceToCamera * density;\n return 1.0 - Math.exp(-(scalar * scalar));\n};\n\n/**\n * Computes a fast approximation of Atan for input in the range [-1, 1].\n *\n * Based on Michal Drobot's approximation from ShaderFastLibs,\n * which in turn is based on \"Efficient approximations for the arctangent function,\"\n * Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\n * Adapted from ShaderFastLibs under MIT License.\n *\n * @param {Number} x An input number in the range [-1, 1]\n * @returns {Number} An approximation of atan(x)\n */\nCesiumMath.fastApproximateAtan = function (x) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"x\", x);\n //>>includeEnd('debug');\n\n return x * (-0.1784 * Math.abs(x) - 0.0663 * x * x + 1.0301);\n};\n\n/**\n * Computes a fast approximation of Atan2(x, y) for arbitrary input scalars.\n *\n * Range reduction math based on nvidia's cg reference implementation: http://developer.download.nvidia.com/cg/atan2.html\n *\n * @param {Number} x An input number that isn't zero if y is zero.\n * @param {Number} y An input number that isn't zero if x is zero.\n * @returns {Number} An approximation of atan2(x, y)\n */\nCesiumMath.fastApproximateAtan2 = function (x, y) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"x\", x);\n Check.typeOf.number(\"y\", y);\n //>>includeEnd('debug');\n\n // atan approximations are usually only reliable over [-1, 1]\n // So reduce the range by flipping whether x or y is on top based on which is bigger.\n var opposite;\n var adjacent;\n var t = Math.abs(x); // t used as swap and atan result.\n opposite = Math.abs(y);\n adjacent = Math.max(t, opposite);\n opposite = Math.min(t, opposite);\n\n var oppositeOverAdjacent = opposite / adjacent;\n //>>includeStart('debug', pragmas.debug);\n if (isNaN(oppositeOverAdjacent)) {\n throw new DeveloperError(\"either x or y must be nonzero\");\n }\n //>>includeEnd('debug');\n t = CesiumMath.fastApproximateAtan(oppositeOverAdjacent);\n\n // Undo range reduction\n t = Math.abs(y) > Math.abs(x) ? CesiumMath.PI_OVER_TWO - t : t;\n t = x < 0.0 ? CesiumMath.PI - t : t;\n t = y < 0.0 ? -t : t;\n return t;\n};\nexport default CesiumMath;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A 3D Cartesian point.\n * @alias Cartesian3\n * @constructor\n *\n * @param {Number} [x=0.0] The X component.\n * @param {Number} [y=0.0] The Y component.\n * @param {Number} [z=0.0] The Z component.\n *\n * @see Cartesian2\n * @see Cartesian4\n * @see Packable\n */\nfunction Cartesian3(x, y, z) {\n /**\n * The X component.\n * @type {Number}\n * @default 0.0\n */\n this.x = defaultValue(x, 0.0);\n\n /**\n * The Y component.\n * @type {Number}\n * @default 0.0\n */\n this.y = defaultValue(y, 0.0);\n\n /**\n * The Z component.\n * @type {Number}\n * @default 0.0\n */\n this.z = defaultValue(z, 0.0);\n}\n\n/**\n * Converts the provided Spherical into Cartesian3 coordinates.\n *\n * @param {Spherical} spherical The Spherical to be converted to Cartesian3.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.fromSpherical = function (spherical, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"spherical\", spherical);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var clock = spherical.clock;\n var cone = spherical.cone;\n var magnitude = defaultValue(spherical.magnitude, 1.0);\n var radial = magnitude * Math.sin(cone);\n result.x = radial * Math.cos(clock);\n result.y = radial * Math.sin(clock);\n result.z = magnitude * Math.cos(cone);\n return result;\n};\n\n/**\n * Creates a Cartesian3 instance from x, y and z coordinates.\n *\n * @param {Number} x The x coordinate.\n * @param {Number} y The y coordinate.\n * @param {Number} z The z coordinate.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.fromElements = function (x, y, z, result) {\n if (!defined(result)) {\n return new Cartesian3(x, y, z);\n }\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Duplicates a Cartesian3 instance.\n *\n * @param {Cartesian3} cartesian The Cartesian to duplicate.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. (Returns undefined if cartesian is undefined)\n */\nCartesian3.clone = function (cartesian, result) {\n if (!defined(cartesian)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n }\n\n result.x = cartesian.x;\n result.y = cartesian.y;\n result.z = cartesian.z;\n return result;\n};\n\n/**\n * Creates a Cartesian3 instance from an existing Cartesian4. This simply takes the\n * x, y, and z properties of the Cartesian4 and drops w.\n * @function\n *\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian3 instance from.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.fromCartesian4 = Cartesian3.clone;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCartesian3.packedLength = 3;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Cartesian3} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCartesian3.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.x;\n array[startingIndex++] = value.y;\n array[startingIndex] = value.z;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Cartesian3} [result] The object into which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n result.x = array[startingIndex++];\n result.y = array[startingIndex++];\n result.z = array[startingIndex];\n return result;\n};\n\n/**\n * Flattens an array of Cartesian3s into an array of components.\n *\n * @param {Cartesian3[]} array The array of cartesians to pack.\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 3 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 3) elements.\n * @returns {Number[]} The packed array.\n */\nCartesian3.packArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n var length = array.length;\n var resultLength = length * 3;\n if (!defined(result)) {\n result = new Array(resultLength);\n } else if (!Array.isArray(result) && result.length !== resultLength) {\n throw new DeveloperError(\n \"If result is a typed array, it must have exactly array.length * 3 elements\"\n );\n } else if (result.length !== resultLength) {\n result.length = resultLength;\n }\n\n for (var i = 0; i < length; ++i) {\n Cartesian3.pack(array[i], result, i * 3);\n }\n return result;\n};\n\n/**\n * Unpacks an array of cartesian components into an array of Cartesian3s.\n *\n * @param {Number[]} array The array of components to unpack.\n * @param {Cartesian3[]} [result] The array onto which to store the result.\n * @returns {Cartesian3[]} The unpacked array.\n */\nCartesian3.unpackArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 3);\n if (array.length % 3 !== 0) {\n throw new DeveloperError(\"array length must be a multiple of 3.\");\n }\n //>>includeEnd('debug');\n\n var length = array.length;\n if (!defined(result)) {\n result = new Array(length / 3);\n } else {\n result.length = length / 3;\n }\n\n for (var i = 0; i < length; i += 3) {\n var index = i / 3;\n result[index] = Cartesian3.unpack(array, i, result[index]);\n }\n return result;\n};\n\n/**\n * Creates a Cartesian3 from three consecutive elements in an array.\n * @function\n *\n * @param {Number[]} array The array whose three consecutive elements correspond to the x, y, and z components, respectively.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian3 with (1.0, 2.0, 3.0)\n * var v = [1.0, 2.0, 3.0];\n * var p = Cesium.Cartesian3.fromArray(v);\n *\n * // Create a Cartesian3 with (1.0, 2.0, 3.0) using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 2.0, 3.0];\n * var p2 = Cesium.Cartesian3.fromArray(v2, 2);\n */\nCartesian3.fromArray = Cartesian3.unpack;\n\n/**\n * Computes the value of the maximum component for the supplied Cartesian.\n *\n * @param {Cartesian3} cartesian The cartesian to use.\n * @returns {Number} The value of the maximum component.\n */\nCartesian3.maximumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.max(cartesian.x, cartesian.y, cartesian.z);\n};\n\n/**\n * Computes the value of the minimum component for the supplied Cartesian.\n *\n * @param {Cartesian3} cartesian The cartesian to use.\n * @returns {Number} The value of the minimum component.\n */\nCartesian3.minimumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.min(cartesian.x, cartesian.y, cartesian.z);\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n *\n * @param {Cartesian3} first A cartesian to compare.\n * @param {Cartesian3} second A cartesian to compare.\n * @param {Cartesian3} result The object into which to store the result.\n * @returns {Cartesian3} A cartesian with the minimum components.\n */\nCartesian3.minimumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.min(first.x, second.x);\n result.y = Math.min(first.y, second.y);\n result.z = Math.min(first.z, second.z);\n\n return result;\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n *\n * @param {Cartesian3} first A cartesian to compare.\n * @param {Cartesian3} second A cartesian to compare.\n * @param {Cartesian3} result The object into which to store the result.\n * @returns {Cartesian3} A cartesian with the maximum components.\n */\nCartesian3.maximumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.max(first.x, second.x);\n result.y = Math.max(first.y, second.y);\n result.z = Math.max(first.z, second.z);\n return result;\n};\n\n/**\n * Computes the provided Cartesian's squared magnitude.\n *\n * @param {Cartesian3} cartesian The Cartesian instance whose squared magnitude is to be computed.\n * @returns {Number} The squared magnitude.\n */\nCartesian3.magnitudeSquared = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return (\n cartesian.x * cartesian.x +\n cartesian.y * cartesian.y +\n cartesian.z * cartesian.z\n );\n};\n\n/**\n * Computes the Cartesian's magnitude (length).\n *\n * @param {Cartesian3} cartesian The Cartesian instance whose magnitude is to be computed.\n * @returns {Number} The magnitude.\n */\nCartesian3.magnitude = function (cartesian) {\n return Math.sqrt(Cartesian3.magnitudeSquared(cartesian));\n};\n\nvar distanceScratch = new Cartesian3();\n\n/**\n * Computes the distance between two points.\n *\n * @param {Cartesian3} left The first point to compute the distance from.\n * @param {Cartesian3} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 1.0\n * var d = Cesium.Cartesian3.distance(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(2.0, 0.0, 0.0));\n */\nCartesian3.distance = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian3.subtract(left, right, distanceScratch);\n return Cartesian3.magnitude(distanceScratch);\n};\n\n/**\n * Computes the squared distance between two points. Comparing squared distances\n * using this function is more efficient than comparing distances using {@link Cartesian3#distance}.\n *\n * @param {Cartesian3} left The first point to compute the distance from.\n * @param {Cartesian3} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 4.0, not 2.0\n * var d = Cesium.Cartesian3.distanceSquared(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(3.0, 0.0, 0.0));\n */\nCartesian3.distanceSquared = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian3.subtract(left, right, distanceScratch);\n return Cartesian3.magnitudeSquared(distanceScratch);\n};\n\n/**\n * Computes the normalized form of the supplied Cartesian.\n *\n * @param {Cartesian3} cartesian The Cartesian to be normalized.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.normalize = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var magnitude = Cartesian3.magnitude(cartesian);\n\n result.x = cartesian.x / magnitude;\n result.y = cartesian.y / magnitude;\n result.z = cartesian.z / magnitude;\n\n //>>includeStart('debug', pragmas.debug);\n if (isNaN(result.x) || isNaN(result.y) || isNaN(result.z)) {\n throw new DeveloperError(\"normalized result is not a number\");\n }\n //>>includeEnd('debug');\n\n return result;\n};\n\n/**\n * Computes the dot (scalar) product of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @returns {Number} The dot product.\n */\nCartesian3.dot = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n return left.x * right.x + left.y * right.y + left.z * right.z;\n};\n\n/**\n * Computes the componentwise product of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.multiplyComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x * right.x;\n result.y = left.y * right.y;\n result.z = left.z * right.z;\n return result;\n};\n\n/**\n * Computes the componentwise quotient of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.divideComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x / right.x;\n result.y = left.y / right.y;\n result.z = left.z / right.z;\n return result;\n};\n\n/**\n * Computes the componentwise sum of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x + right.x;\n result.y = left.y + right.y;\n result.z = left.z + right.z;\n return result;\n};\n\n/**\n * Computes the componentwise difference of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x - right.x;\n result.y = left.y - right.y;\n result.z = left.z - right.z;\n return result;\n};\n\n/**\n * Multiplies the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian3} cartesian The Cartesian to be scaled.\n * @param {Number} scalar The scalar to multiply with.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.multiplyByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x * scalar;\n result.y = cartesian.y * scalar;\n result.z = cartesian.z * scalar;\n return result;\n};\n\n/**\n * Divides the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian3} cartesian The Cartesian to be divided.\n * @param {Number} scalar The scalar to divide by.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.divideByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x / scalar;\n result.y = cartesian.y / scalar;\n result.z = cartesian.z / scalar;\n return result;\n};\n\n/**\n * Negates the provided Cartesian.\n *\n * @param {Cartesian3} cartesian The Cartesian to be negated.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.negate = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = -cartesian.x;\n result.y = -cartesian.y;\n result.z = -cartesian.z;\n return result;\n};\n\n/**\n * Computes the absolute value of the provided Cartesian.\n *\n * @param {Cartesian3} cartesian The Cartesian whose absolute value is to be computed.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.abs = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.abs(cartesian.x);\n result.y = Math.abs(cartesian.y);\n result.z = Math.abs(cartesian.z);\n return result;\n};\n\nvar lerpScratch = new Cartesian3();\n/**\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n *\n * @param {Cartesian3} start The value corresponding to t at 0.0.\n * @param {Cartesian3} end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nCartesian3.lerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n Cartesian3.multiplyByScalar(end, t, lerpScratch);\n result = Cartesian3.multiplyByScalar(start, 1.0 - t, result);\n return Cartesian3.add(lerpScratch, result, result);\n};\n\nvar angleBetweenScratch = new Cartesian3();\nvar angleBetweenScratch2 = new Cartesian3();\n/**\n * Returns the angle, in radians, between the provided Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @returns {Number} The angle between the Cartesians.\n */\nCartesian3.angleBetween = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian3.normalize(left, angleBetweenScratch);\n Cartesian3.normalize(right, angleBetweenScratch2);\n var cosine = Cartesian3.dot(angleBetweenScratch, angleBetweenScratch2);\n var sine = Cartesian3.magnitude(\n Cartesian3.cross(\n angleBetweenScratch,\n angleBetweenScratch2,\n angleBetweenScratch\n )\n );\n return Math.atan2(sine, cosine);\n};\n\nvar mostOrthogonalAxisScratch = new Cartesian3();\n/**\n * Returns the axis that is most orthogonal to the provided Cartesian.\n *\n * @param {Cartesian3} cartesian The Cartesian on which to find the most orthogonal axis.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The most orthogonal axis.\n */\nCartesian3.mostOrthogonalAxis = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var f = Cartesian3.normalize(cartesian, mostOrthogonalAxisScratch);\n Cartesian3.abs(f, f);\n\n if (f.x <= f.y) {\n if (f.x <= f.z) {\n result = Cartesian3.clone(Cartesian3.UNIT_X, result);\n } else {\n result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n } else if (f.y <= f.z) {\n result = Cartesian3.clone(Cartesian3.UNIT_Y, result);\n } else {\n result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n\n return result;\n};\n\n/**\n * Projects vector a onto vector b\n * @param {Cartesian3} a The vector that needs projecting\n * @param {Cartesian3} b The vector to project onto\n * @param {Cartesian3} result The result cartesian\n * @returns {Cartesian3} The modified result parameter\n */\nCartesian3.projectVector = function (a, b, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"a\", a);\n Check.defined(\"b\", b);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n var scalar = Cartesian3.dot(a, b) / Cartesian3.dot(b, b);\n return Cartesian3.multiplyByScalar(b, scalar, result);\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian3} [left] The first Cartesian.\n * @param {Cartesian3} [right] The second Cartesian.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartesian3.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.x === right.x &&\n left.y === right.y &&\n left.z === right.z)\n );\n};\n\n/**\n * @private\n */\nCartesian3.equalsArray = function (cartesian, array, offset) {\n return (\n cartesian.x === array[offset] &&\n cartesian.y === array[offset + 1] &&\n cartesian.z === array[offset + 2]\n );\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian3} [left] The first Cartesian.\n * @param {Cartesian3} [right] The second Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian3.equalsEpsilon = function (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n CesiumMath.equalsEpsilon(\n left.x,\n right.x,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.y,\n right.y,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.z,\n right.z,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\n\n/**\n * Computes the cross (outer) product of two Cartesians.\n *\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The cross product.\n */\nCartesian3.cross = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var leftX = left.x;\n var leftY = left.y;\n var leftZ = left.z;\n var rightX = right.x;\n var rightY = right.y;\n var rightZ = right.z;\n\n var x = leftY * rightZ - leftZ * rightY;\n var y = leftZ * rightX - leftX * rightZ;\n var z = leftX * rightY - leftY * rightX;\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes the midpoint between the right and left Cartesian.\n * @param {Cartesian3} left The first Cartesian.\n * @param {Cartesian3} right The second Cartesian.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The midpoint.\n */\nCartesian3.midpoint = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = (left.x + right.x) * 0.5;\n result.y = (left.y + right.y) * 0.5;\n result.z = (left.z + right.z) * 0.5;\n\n return result;\n};\n\n/**\n * Returns a Cartesian3 position from longitude and latitude values given in degrees.\n *\n * @param {Number} longitude The longitude, in degrees\n * @param {Number} latitude The latitude, in degrees\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The position\n *\n * @example\n * var position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0);\n */\nCartesian3.fromDegrees = function (\n longitude,\n latitude,\n height,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"longitude\", longitude);\n Check.typeOf.number(\"latitude\", latitude);\n //>>includeEnd('debug');\n\n longitude = CesiumMath.toRadians(longitude);\n latitude = CesiumMath.toRadians(latitude);\n return Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result);\n};\n\nvar scratchN = new Cartesian3();\nvar scratchK = new Cartesian3();\nvar wgs84RadiiSquared = new Cartesian3(\n 6378137.0 * 6378137.0,\n 6378137.0 * 6378137.0,\n 6356752.3142451793 * 6356752.3142451793\n);\n\n/**\n * Returns a Cartesian3 position from longitude and latitude values given in radians.\n *\n * @param {Number} longitude The longitude, in radians\n * @param {Number} latitude The latitude, in radians\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The position\n *\n * @example\n * var position = Cesium.Cartesian3.fromRadians(-2.007, 0.645);\n */\nCartesian3.fromRadians = function (\n longitude,\n latitude,\n height,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"longitude\", longitude);\n Check.typeOf.number(\"latitude\", latitude);\n //>>includeEnd('debug');\n\n height = defaultValue(height, 0.0);\n var radiiSquared = defined(ellipsoid)\n ? ellipsoid.radiiSquared\n : wgs84RadiiSquared;\n\n var cosLatitude = Math.cos(latitude);\n scratchN.x = cosLatitude * Math.cos(longitude);\n scratchN.y = cosLatitude * Math.sin(longitude);\n scratchN.z = Math.sin(latitude);\n scratchN = Cartesian3.normalize(scratchN, scratchN);\n\n Cartesian3.multiplyComponents(radiiSquared, scratchN, scratchK);\n var gamma = Math.sqrt(Cartesian3.dot(scratchN, scratchK));\n scratchK = Cartesian3.divideByScalar(scratchK, gamma, scratchK);\n scratchN = Cartesian3.multiplyByScalar(scratchN, height, scratchN);\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n return Cartesian3.add(scratchK, scratchN, result);\n};\n\n/**\n * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in degrees.\n *\n * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie.\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n * @returns {Cartesian3[]} The array of positions.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]);\n */\nCartesian3.fromDegreesArray = function (coordinates, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"coordinates\", coordinates);\n if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\n throw new DeveloperError(\n \"the number of coordinates must be a multiple of 2 and at least 2\"\n );\n }\n //>>includeEnd('debug');\n\n var length = coordinates.length;\n if (!defined(result)) {\n result = new Array(length / 2);\n } else {\n result.length = length / 2;\n }\n\n for (var i = 0; i < length; i += 2) {\n var longitude = coordinates[i];\n var latitude = coordinates[i + 1];\n var index = i / 2;\n result[index] = Cartesian3.fromDegrees(\n longitude,\n latitude,\n 0,\n ellipsoid,\n result[index]\n );\n }\n\n return result;\n};\n\n/**\n * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in radians.\n *\n * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie.\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n * @returns {Cartesian3[]} The array of positions.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]);\n */\nCartesian3.fromRadiansArray = function (coordinates, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"coordinates\", coordinates);\n if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\n throw new DeveloperError(\n \"the number of coordinates must be a multiple of 2 and at least 2\"\n );\n }\n //>>includeEnd('debug');\n\n var length = coordinates.length;\n if (!defined(result)) {\n result = new Array(length / 2);\n } else {\n result.length = length / 2;\n }\n\n for (var i = 0; i < length; i += 2) {\n var longitude = coordinates[i];\n var latitude = coordinates[i + 1];\n var index = i / 2;\n result[index] = Cartesian3.fromRadians(\n longitude,\n latitude,\n 0,\n ellipsoid,\n result[index]\n );\n }\n\n return result;\n};\n\n/**\n * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in degrees.\n *\n * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n * @returns {Cartesian3[]} The array of positions.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]);\n */\nCartesian3.fromDegreesArrayHeights = function (coordinates, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"coordinates\", coordinates);\n if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\n throw new DeveloperError(\n \"the number of coordinates must be a multiple of 3 and at least 3\"\n );\n }\n //>>includeEnd('debug');\n\n var length = coordinates.length;\n if (!defined(result)) {\n result = new Array(length / 3);\n } else {\n result.length = length / 3;\n }\n\n for (var i = 0; i < length; i += 3) {\n var longitude = coordinates[i];\n var latitude = coordinates[i + 1];\n var height = coordinates[i + 2];\n var index = i / 3;\n result[index] = Cartesian3.fromDegrees(\n longitude,\n latitude,\n height,\n ellipsoid,\n result[index]\n );\n }\n\n return result;\n};\n\n/**\n * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in radians.\n *\n * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n * @returns {Cartesian3[]} The array of positions.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]);\n */\nCartesian3.fromRadiansArrayHeights = function (coordinates, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"coordinates\", coordinates);\n if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\n throw new DeveloperError(\n \"the number of coordinates must be a multiple of 3 and at least 3\"\n );\n }\n //>>includeEnd('debug');\n\n var length = coordinates.length;\n if (!defined(result)) {\n result = new Array(length / 3);\n } else {\n result.length = length / 3;\n }\n\n for (var i = 0; i < length; i += 3) {\n var longitude = coordinates[i];\n var latitude = coordinates[i + 1];\n var height = coordinates[i + 2];\n var index = i / 3;\n result[index] = Cartesian3.fromRadians(\n longitude,\n latitude,\n height,\n ellipsoid,\n result[index]\n );\n }\n\n return result;\n};\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.ZERO = Object.freeze(new Cartesian3(0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (1.0, 0.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_X = Object.freeze(new Cartesian3(1.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 1.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_Y = Object.freeze(new Cartesian3(0.0, 1.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 1.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_Z = Object.freeze(new Cartesian3(0.0, 0.0, 1.0));\n\n/**\n * Duplicates this Cartesian3 instance.\n *\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.prototype.clone = function (result) {\n return Cartesian3.clone(this, result);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian3} [right] The right hand side Cartesian.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nCartesian3.prototype.equals = function (right) {\n return Cartesian3.equals(this, right);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian3} [right] The right hand side Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian3.prototype.equalsEpsilon = function (\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return Cartesian3.equalsEpsilon(\n this,\n right,\n relativeEpsilon,\n absoluteEpsilon\n );\n};\n\n/**\n * Creates a string representing this Cartesian in the format '(x, y, z)'.\n *\n * @returns {String} A string representing this Cartesian in the format '(x, y, z)'.\n */\nCartesian3.prototype.toString = function () {\n return \"(\" + this.x + \", \" + this.y + \", \" + this.z + \")\";\n};\nexport default Cartesian3;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\nvar scaleToGeodeticSurfaceIntersection = new Cartesian3();\nvar scaleToGeodeticSurfaceGradient = new Cartesian3();\n\n/**\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid.\n * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid.\n * @param {Number} centerToleranceSquared Tolerance for closeness to the center.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n *\n * @function scaleToGeodeticSurface\n *\n * @private\n */\nfunction scaleToGeodeticSurface(\n cartesian,\n oneOverRadii,\n oneOverRadiiSquared,\n centerToleranceSquared,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n if (!defined(oneOverRadii)) {\n throw new DeveloperError(\"oneOverRadii is required.\");\n }\n if (!defined(oneOverRadiiSquared)) {\n throw new DeveloperError(\"oneOverRadiiSquared is required.\");\n }\n if (!defined(centerToleranceSquared)) {\n throw new DeveloperError(\"centerToleranceSquared is required.\");\n }\n //>>includeEnd('debug');\n\n var positionX = cartesian.x;\n var positionY = cartesian.y;\n var positionZ = cartesian.z;\n\n var oneOverRadiiX = oneOverRadii.x;\n var oneOverRadiiY = oneOverRadii.y;\n var oneOverRadiiZ = oneOverRadii.z;\n\n var x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n var y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n var z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n // Compute the squared ellipsoid norm.\n var squaredNorm = x2 + y2 + z2;\n var ratio = Math.sqrt(1.0 / squaredNorm);\n\n // As an initial approximation, assume that the radial intersection is the projection point.\n var intersection = Cartesian3.multiplyByScalar(\n cartesian,\n ratio,\n scaleToGeodeticSurfaceIntersection\n );\n\n // If the position is near the center, the iteration will not converge.\n if (squaredNorm < centerToleranceSquared) {\n return !isFinite(ratio)\n ? undefined\n : Cartesian3.clone(intersection, result);\n }\n\n var oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n var oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n var oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n\n // Use the gradient at the intersection point in place of the true unit normal.\n // The difference in magnitude will be absorbed in the multiplier.\n var gradient = scaleToGeodeticSurfaceGradient;\n gradient.x = intersection.x * oneOverRadiiSquaredX * 2.0;\n gradient.y = intersection.y * oneOverRadiiSquaredY * 2.0;\n gradient.z = intersection.z * oneOverRadiiSquaredZ * 2.0;\n\n // Compute the initial guess at the normal vector multiplier, lambda.\n var lambda =\n ((1.0 - ratio) * Cartesian3.magnitude(cartesian)) /\n (0.5 * Cartesian3.magnitude(gradient));\n var correction = 0.0;\n\n var func;\n var denominator;\n var xMultiplier;\n var yMultiplier;\n var zMultiplier;\n var xMultiplier2;\n var yMultiplier2;\n var zMultiplier2;\n var xMultiplier3;\n var yMultiplier3;\n var zMultiplier3;\n\n do {\n lambda -= correction;\n\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n xMultiplier2 = xMultiplier * xMultiplier;\n yMultiplier2 = yMultiplier * yMultiplier;\n zMultiplier2 = zMultiplier * zMultiplier;\n\n xMultiplier3 = xMultiplier2 * xMultiplier;\n yMultiplier3 = yMultiplier2 * yMultiplier;\n zMultiplier3 = zMultiplier2 * zMultiplier;\n\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n // computations in the sections to follow.\n denominator =\n x2 * xMultiplier3 * oneOverRadiiSquaredX +\n y2 * yMultiplier3 * oneOverRadiiSquaredY +\n z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n var derivative = -2.0 * denominator;\n\n correction = func / derivative;\n } while (Math.abs(func) > CesiumMath.EPSILON12);\n\n if (!defined(result)) {\n return new Cartesian3(\n positionX * xMultiplier,\n positionY * yMultiplier,\n positionZ * zMultiplier\n );\n }\n result.x = positionX * xMultiplier;\n result.y = positionY * yMultiplier;\n result.z = positionZ * zMultiplier;\n return result;\n}\nexport default scaleToGeodeticSurface;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\n\n/**\n * A position defined by longitude, latitude, and height.\n * @alias Cartographic\n * @constructor\n *\n * @param {Number} [longitude=0.0] The longitude, in radians.\n * @param {Number} [latitude=0.0] The latitude, in radians.\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\n *\n * @see Ellipsoid\n */\nfunction Cartographic(longitude, latitude, height) {\n /**\n * The longitude, in radians.\n * @type {Number}\n * @default 0.0\n */\n this.longitude = defaultValue(longitude, 0.0);\n\n /**\n * The latitude, in radians.\n * @type {Number}\n * @default 0.0\n */\n this.latitude = defaultValue(latitude, 0.0);\n\n /**\n * The height, in meters, above the ellipsoid.\n * @type {Number}\n * @default 0.0\n */\n this.height = defaultValue(height, 0.0);\n}\n\n/**\n * Creates a new Cartographic instance from longitude and latitude\n * specified in radians.\n *\n * @param {Number} longitude The longitude, in radians.\n * @param {Number} latitude The latitude, in radians.\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.fromRadians = function (longitude, latitude, height, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"longitude\", longitude);\n Check.typeOf.number(\"latitude\", latitude);\n //>>includeEnd('debug');\n\n height = defaultValue(height, 0.0);\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude, height);\n }\n\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = height;\n return result;\n};\n\n/**\n * Creates a new Cartographic instance from longitude and latitude\n * specified in degrees. The values in the resulting object will\n * be in radians.\n *\n * @param {Number} longitude The longitude, in degrees.\n * @param {Number} latitude The latitude, in degrees.\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.fromDegrees = function (longitude, latitude, height, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"longitude\", longitude);\n Check.typeOf.number(\"latitude\", latitude);\n //>>includeEnd('debug');\n longitude = CesiumMath.toRadians(longitude);\n latitude = CesiumMath.toRadians(latitude);\n\n return Cartographic.fromRadians(longitude, latitude, height, result);\n};\n\nvar cartesianToCartographicN = new Cartesian3();\nvar cartesianToCartographicP = new Cartesian3();\nvar cartesianToCartographicH = new Cartesian3();\nvar wgs84OneOverRadii = new Cartesian3(\n 1.0 / 6378137.0,\n 1.0 / 6378137.0,\n 1.0 / 6356752.3142451793\n);\nvar wgs84OneOverRadiiSquared = new Cartesian3(\n 1.0 / (6378137.0 * 6378137.0),\n 1.0 / (6378137.0 * 6378137.0),\n 1.0 / (6356752.3142451793 * 6356752.3142451793)\n);\nvar wgs84CenterToleranceSquared = CesiumMath.EPSILON1;\n\n/**\n * Creates a new Cartographic instance from a Cartesian position. The values in the\n * resulting object will be in radians.\n *\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n */\nCartographic.fromCartesian = function (cartesian, ellipsoid, result) {\n var oneOverRadii = defined(ellipsoid)\n ? ellipsoid.oneOverRadii\n : wgs84OneOverRadii;\n var oneOverRadiiSquared = defined(ellipsoid)\n ? ellipsoid.oneOverRadiiSquared\n : wgs84OneOverRadiiSquared;\n var centerToleranceSquared = defined(ellipsoid)\n ? ellipsoid._centerToleranceSquared\n : wgs84CenterToleranceSquared;\n\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\n var p = scaleToGeodeticSurface(\n cartesian,\n oneOverRadii,\n oneOverRadiiSquared,\n centerToleranceSquared,\n cartesianToCartographicP\n );\n\n if (!defined(p)) {\n return undefined;\n }\n\n var n = Cartesian3.multiplyComponents(\n p,\n oneOverRadiiSquared,\n cartesianToCartographicN\n );\n n = Cartesian3.normalize(n, n);\n\n var h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\n\n var longitude = Math.atan2(n.y, n.x);\n var latitude = Math.asin(n.z);\n var height =\n CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude, height);\n }\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = height;\n return result;\n};\n\n/**\n * Creates a new Cartesian3 instance from a Cartographic input. The values in the inputted\n * object should be in radians.\n *\n * @param {Cartographic} cartographic Input to be converted into a Cartesian3 output.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The position\n */\nCartographic.toCartesian = function (cartographic, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartographic\", cartographic);\n //>>includeEnd('debug');\n\n return Cartesian3.fromRadians(\n cartographic.longitude,\n cartographic.latitude,\n cartographic.height,\n ellipsoid,\n result\n );\n};\n\n/**\n * Duplicates a Cartographic instance.\n *\n * @param {Cartographic} cartographic The cartographic to duplicate.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. (Returns undefined if cartographic is undefined)\n */\nCartographic.clone = function (cartographic, result) {\n if (!defined(cartographic)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Cartographic(\n cartographic.longitude,\n cartographic.latitude,\n cartographic.height\n );\n }\n result.longitude = cartographic.longitude;\n result.latitude = cartographic.latitude;\n result.height = cartographic.height;\n return result;\n};\n\n/**\n * Compares the provided cartographics componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartographic} [left] The first cartographic.\n * @param {Cartographic} [right] The second cartographic.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartographic.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.longitude === right.longitude &&\n left.latitude === right.latitude &&\n left.height === right.height)\n );\n};\n\n/**\n * Compares the provided cartographics componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Cartographic} [left] The first cartographic.\n * @param {Cartographic} [right] The second cartographic.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartographic.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left.longitude - right.longitude) <= epsilon &&\n Math.abs(left.latitude - right.latitude) <= epsilon &&\n Math.abs(left.height - right.height) <= epsilon)\n );\n};\n\n/**\n * An immutable Cartographic instance initialized to (0.0, 0.0, 0.0).\n *\n * @type {Cartographic}\n * @constant\n */\nCartographic.ZERO = Object.freeze(new Cartographic(0.0, 0.0, 0.0));\n\n/**\n * Duplicates this instance.\n *\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.prototype.clone = function (result) {\n return Cartographic.clone(this, result);\n};\n\n/**\n * Compares the provided against this cartographic componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartographic} [right] The second cartographic.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartographic.prototype.equals = function (right) {\n return Cartographic.equals(this, right);\n};\n\n/**\n * Compares the provided against this cartographic componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Cartographic} [right] The second cartographic.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartographic.prototype.equalsEpsilon = function (right, epsilon) {\n return Cartographic.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this cartographic in the format '(longitude, latitude, height)'.\n *\n * @returns {String} A string representing the provided cartographic in the format '(longitude, latitude, height)'.\n */\nCartographic.prototype.toString = function () {\n return \"(\" + this.longitude + \", \" + this.latitude + \", \" + this.height + \")\";\n};\nexport default Cartographic;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\n\nfunction initialize(ellipsoid, x, y, z) {\n x = defaultValue(x, 0.0);\n y = defaultValue(y, 0.0);\n z = defaultValue(z, 0.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"x\", x, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"y\", y, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"z\", z, 0.0);\n //>>includeEnd('debug');\n\n ellipsoid._radii = new Cartesian3(x, y, z);\n\n ellipsoid._radiiSquared = new Cartesian3(x * x, y * y, z * z);\n\n ellipsoid._radiiToTheFourth = new Cartesian3(\n x * x * x * x,\n y * y * y * y,\n z * z * z * z\n );\n\n ellipsoid._oneOverRadii = new Cartesian3(\n x === 0.0 ? 0.0 : 1.0 / x,\n y === 0.0 ? 0.0 : 1.0 / y,\n z === 0.0 ? 0.0 : 1.0 / z\n );\n\n ellipsoid._oneOverRadiiSquared = new Cartesian3(\n x === 0.0 ? 0.0 : 1.0 / (x * x),\n y === 0.0 ? 0.0 : 1.0 / (y * y),\n z === 0.0 ? 0.0 : 1.0 / (z * z)\n );\n\n ellipsoid._minimumRadius = Math.min(x, y, z);\n\n ellipsoid._maximumRadius = Math.max(x, y, z);\n\n ellipsoid._centerToleranceSquared = CesiumMath.EPSILON1;\n\n if (ellipsoid._radiiSquared.z !== 0) {\n ellipsoid._squaredXOverSquaredZ =\n ellipsoid._radiiSquared.x / ellipsoid._radiiSquared.z;\n }\n}\n\n/**\n * A quadratic surface defined in Cartesian coordinates by the equation\n * <code>(x / a)^2 + (y / b)^2 + (z / c)^2 = 1</code>. Primarily used\n * by Cesium to represent the shape of planetary bodies.\n *\n * Rather than constructing this object directly, one of the provided\n * constants is normally used.\n * @alias Ellipsoid\n * @constructor\n *\n * @param {Number} [x=0] The radius in the x direction.\n * @param {Number} [y=0] The radius in the y direction.\n * @param {Number} [z=0] The radius in the z direction.\n *\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\n *\n * @see Ellipsoid.fromCartesian3\n * @see Ellipsoid.WGS84\n * @see Ellipsoid.UNIT_SPHERE\n */\nfunction Ellipsoid(x, y, z) {\n this._radii = undefined;\n this._radiiSquared = undefined;\n this._radiiToTheFourth = undefined;\n this._oneOverRadii = undefined;\n this._oneOverRadiiSquared = undefined;\n this._minimumRadius = undefined;\n this._maximumRadius = undefined;\n this._centerToleranceSquared = undefined;\n this._squaredXOverSquaredZ = undefined;\n\n initialize(this, x, y, z);\n}\n\nObject.defineProperties(Ellipsoid.prototype, {\n /**\n * Gets the radii of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Cartesian3}\n * @readonly\n */\n radii: {\n get: function () {\n return this._radii;\n },\n },\n /**\n * Gets the squared radii of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Cartesian3}\n * @readonly\n */\n radiiSquared: {\n get: function () {\n return this._radiiSquared;\n },\n },\n /**\n * Gets the radii of the ellipsoid raise to the fourth power.\n * @memberof Ellipsoid.prototype\n * @type {Cartesian3}\n * @readonly\n */\n radiiToTheFourth: {\n get: function () {\n return this._radiiToTheFourth;\n },\n },\n /**\n * Gets one over the radii of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Cartesian3}\n * @readonly\n */\n oneOverRadii: {\n get: function () {\n return this._oneOverRadii;\n },\n },\n /**\n * Gets one over the squared radii of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Cartesian3}\n * @readonly\n */\n oneOverRadiiSquared: {\n get: function () {\n return this._oneOverRadiiSquared;\n },\n },\n /**\n * Gets the minimum radius of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Number}\n * @readonly\n */\n minimumRadius: {\n get: function () {\n return this._minimumRadius;\n },\n },\n /**\n * Gets the maximum radius of the ellipsoid.\n * @memberof Ellipsoid.prototype\n * @type {Number}\n * @readonly\n */\n maximumRadius: {\n get: function () {\n return this._maximumRadius;\n },\n },\n});\n\n/**\n * Duplicates an Ellipsoid instance.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to duplicate.\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n * instance should be created.\n * @returns {Ellipsoid} The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined)\n */\nEllipsoid.clone = function (ellipsoid, result) {\n if (!defined(ellipsoid)) {\n return undefined;\n }\n var radii = ellipsoid._radii;\n\n if (!defined(result)) {\n return new Ellipsoid(radii.x, radii.y, radii.z);\n }\n\n Cartesian3.clone(radii, result._radii);\n Cartesian3.clone(ellipsoid._radiiSquared, result._radiiSquared);\n Cartesian3.clone(ellipsoid._radiiToTheFourth, result._radiiToTheFourth);\n Cartesian3.clone(ellipsoid._oneOverRadii, result._oneOverRadii);\n Cartesian3.clone(ellipsoid._oneOverRadiiSquared, result._oneOverRadiiSquared);\n result._minimumRadius = ellipsoid._minimumRadius;\n result._maximumRadius = ellipsoid._maximumRadius;\n result._centerToleranceSquared = ellipsoid._centerToleranceSquared;\n\n return result;\n};\n\n/**\n * Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions.\n *\n * @param {Cartesian3} [cartesian=Cartesian3.ZERO] The ellipsoid's radius in the x, y, and z directions.\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n * instance should be created.\n * @returns {Ellipsoid} A new Ellipsoid instance.\n *\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\n *\n * @see Ellipsoid.WGS84\n * @see Ellipsoid.UNIT_SPHERE\n */\nEllipsoid.fromCartesian3 = function (cartesian, result) {\n if (!defined(result)) {\n result = new Ellipsoid();\n }\n\n if (!defined(cartesian)) {\n return result;\n }\n\n initialize(result, cartesian.x, cartesian.y, cartesian.z);\n return result;\n};\n\n/**\n * An Ellipsoid instance initialized to the WGS84 standard.\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.WGS84 = Object.freeze(\n new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793)\n);\n\n/**\n * An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0).\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.UNIT_SPHERE = Object.freeze(new Ellipsoid(1.0, 1.0, 1.0));\n\n/**\n * An Ellipsoid instance initialized to a sphere with the lunar radius.\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.MOON = Object.freeze(\n new Ellipsoid(\n CesiumMath.LUNAR_RADIUS,\n CesiumMath.LUNAR_RADIUS,\n CesiumMath.LUNAR_RADIUS\n )\n);\n\n/**\n * Duplicates an Ellipsoid instance.\n *\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n * instance should be created.\n * @returns {Ellipsoid} The cloned Ellipsoid.\n */\nEllipsoid.prototype.clone = function (result) {\n return Ellipsoid.clone(this, result);\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nEllipsoid.packedLength = Cartesian3.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Ellipsoid} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nEllipsoid.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._radii, array, startingIndex);\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Ellipsoid} [result] The object into which to store the result.\n * @returns {Ellipsoid} The modified result parameter or a new Ellipsoid instance if one was not provided.\n */\nEllipsoid.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var radii = Cartesian3.unpack(array, startingIndex);\n return Ellipsoid.fromCartesian3(radii, result);\n};\n\n/**\n * Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position.\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian for which to to determine the geocentric normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.geocentricSurfaceNormal = Cartesian3.normalize;\n\n/**\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\n *\n * @param {Cartographic} cartographic The cartographic position for which to to determine the geodetic normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.geodeticSurfaceNormalCartographic = function (\n cartographic,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartographic\", cartographic);\n //>>includeEnd('debug');\n\n var longitude = cartographic.longitude;\n var latitude = cartographic.latitude;\n var cosLatitude = Math.cos(latitude);\n\n var x = cosLatitude * Math.cos(longitude);\n var y = cosLatitude * Math.sin(longitude);\n var z = Math.sin(latitude);\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n result.x = x;\n result.y = y;\n result.z = z;\n return Cartesian3.normalize(result, result);\n};\n\n/**\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\n *\n * @param {Cartesian3} cartesian The Cartesian position for which to to determine the surface normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.geodeticSurfaceNormal = function (cartesian, result) {\n if (\n Cartesian3.equalsEpsilon(cartesian, Cartesian3.ZERO, CesiumMath.EPSILON14)\n ) {\n return undefined;\n }\n if (!defined(result)) {\n result = new Cartesian3();\n }\n result = Cartesian3.multiplyComponents(\n cartesian,\n this._oneOverRadiiSquared,\n result\n );\n return Cartesian3.normalize(result, result);\n};\n\nvar cartographicToCartesianNormal = new Cartesian3();\nvar cartographicToCartesianK = new Cartesian3();\n\n/**\n * Converts the provided cartographic to Cartesian representation.\n *\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n *\n * @example\n * //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid.\n * var position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000);\n * var cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);\n */\nEllipsoid.prototype.cartographicToCartesian = function (cartographic, result) {\n //`cartographic is required` is thrown from geodeticSurfaceNormalCartographic.\n var n = cartographicToCartesianNormal;\n var k = cartographicToCartesianK;\n this.geodeticSurfaceNormalCartographic(cartographic, n);\n Cartesian3.multiplyComponents(this._radiiSquared, n, k);\n var gamma = Math.sqrt(Cartesian3.dot(n, k));\n Cartesian3.divideByScalar(k, gamma, k);\n Cartesian3.multiplyByScalar(n, cartographic.height, n);\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n return Cartesian3.add(k, n, result);\n};\n\n/**\n * Converts the provided array of cartographics to an array of Cartesians.\n *\n * @param {Cartographic[]} cartographics An array of cartographic positions.\n * @param {Cartesian3[]} [result] The object onto which to store the result.\n * @returns {Cartesian3[]} The modified result parameter or a new Array instance if none was provided.\n *\n * @example\n * //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid.\n * var positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0),\n * new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100),\n * new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)];\n * var cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions);\n */\nEllipsoid.prototype.cartographicArrayToCartesianArray = function (\n cartographics,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartographics\", cartographics);\n //>>includeEnd('debug')\n\n var length = cartographics.length;\n if (!defined(result)) {\n result = new Array(length);\n } else {\n result.length = length;\n }\n for (var i = 0; i < length; i++) {\n result[i] = this.cartographicToCartesian(cartographics[i], result[i]);\n }\n return result;\n};\n\nvar cartesianToCartographicN = new Cartesian3();\nvar cartesianToCartographicP = new Cartesian3();\nvar cartesianToCartographicH = new Cartesian3();\n\n/**\n * Converts the provided cartesian to cartographic representation.\n * The cartesian is undefined at the center of the ellipsoid.\n *\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n *\n * @example\n * //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid.\n * var position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73);\n * var cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\n */\nEllipsoid.prototype.cartesianToCartographic = function (cartesian, result) {\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\n var p = this.scaleToGeodeticSurface(cartesian, cartesianToCartographicP);\n\n if (!defined(p)) {\n return undefined;\n }\n\n var n = this.geodeticSurfaceNormal(p, cartesianToCartographicN);\n var h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\n\n var longitude = Math.atan2(n.y, n.x);\n var latitude = Math.asin(n.z);\n var height =\n CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude, height);\n }\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = height;\n return result;\n};\n\n/**\n * Converts the provided array of cartesians to an array of cartographics.\n *\n * @param {Cartesian3[]} cartesians An array of Cartesian positions.\n * @param {Cartographic[]} [result] The object onto which to store the result.\n * @returns {Cartographic[]} The modified result parameter or a new Array instance if none was provided.\n *\n * @example\n * //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid.\n * var positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73),\n * new Cesium.Cartesian3(17832.13, 83234.53, 952313.73),\n * new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)]\n * var cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions);\n */\nEllipsoid.prototype.cartesianArrayToCartographicArray = function (\n cartesians,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n\n var length = cartesians.length;\n if (!defined(result)) {\n result = new Array(length);\n } else {\n result.length = length;\n }\n for (var i = 0; i < length; ++i) {\n result[i] = this.cartesianToCartographic(cartesians[i], result[i]);\n }\n return result;\n};\n\n/**\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid. If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n */\nEllipsoid.prototype.scaleToGeodeticSurface = function (cartesian, result) {\n return scaleToGeodeticSurface(\n cartesian,\n this._oneOverRadii,\n this._oneOverRadiiSquared,\n this._centerToleranceSquared,\n result\n );\n};\n\n/**\n * Scales the provided Cartesian position along the geocentric surface normal\n * so that it is on the surface of this ellipsoid.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.scaleToGeocentricSurface = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var positionX = cartesian.x;\n var positionY = cartesian.y;\n var positionZ = cartesian.z;\n var oneOverRadiiSquared = this._oneOverRadiiSquared;\n\n var beta =\n 1.0 /\n Math.sqrt(\n positionX * positionX * oneOverRadiiSquared.x +\n positionY * positionY * oneOverRadiiSquared.y +\n positionZ * positionZ * oneOverRadiiSquared.z\n );\n\n return Cartesian3.multiplyByScalar(cartesian, beta, result);\n};\n\n/**\n * Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\n * its components by the result of {@link Ellipsoid#oneOverRadii}.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\n * return a new instance.\n * @returns {Cartesian3} The position expressed in the scaled space. The returned instance is the\n * one passed as the result parameter if it is not undefined, or a new instance of it is.\n */\nEllipsoid.prototype.transformPositionToScaledSpace = function (\n position,\n result\n) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n return Cartesian3.multiplyComponents(position, this._oneOverRadii, result);\n};\n\n/**\n * Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\n * its components by the result of {@link Ellipsoid#radii}.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\n * return a new instance.\n * @returns {Cartesian3} The position expressed in the unscaled space. The returned instance is the\n * one passed as the result parameter if it is not undefined, or a new instance of it is.\n */\nEllipsoid.prototype.transformPositionFromScaledSpace = function (\n position,\n result\n) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n return Cartesian3.multiplyComponents(position, this._radii, result);\n};\n\n/**\n * Compares this Ellipsoid against the provided Ellipsoid componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Ellipsoid} [right] The other Ellipsoid.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nEllipsoid.prototype.equals = function (right) {\n return (\n this === right ||\n (defined(right) && Cartesian3.equals(this._radii, right._radii))\n );\n};\n\n/**\n * Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'.\n *\n * @returns {String} A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'.\n */\nEllipsoid.prototype.toString = function () {\n return this._radii.toString();\n};\n\n/**\n * Computes a point which is the intersection of the surface normal with the z-axis.\n *\n * @param {Cartesian3} position the position. must be on the surface of the ellipsoid.\n * @param {Number} [buffer = 0.0] A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid.\n * In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center.\n * In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis).\n * Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2\n * @param {Cartesian3} [result] The cartesian to which to copy the result, or undefined to create and\n * return a new instance.\n * @returns {Cartesian3 | undefined} the intersection point if it's inside the ellipsoid, undefined otherwise\n *\n * @exception {DeveloperError} position is required.\n * @exception {DeveloperError} Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y).\n * @exception {DeveloperError} Ellipsoid.radii.z must be greater than 0.\n */\nEllipsoid.prototype.getSurfaceNormalIntersectionWithZAxis = function (\n position,\n buffer,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"position\", position);\n\n if (\n !CesiumMath.equalsEpsilon(\n this._radii.x,\n this._radii.y,\n CesiumMath.EPSILON15\n )\n ) {\n throw new DeveloperError(\n \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\"\n );\n }\n\n Check.typeOf.number.greaterThan(\"Ellipsoid.radii.z\", this._radii.z, 0);\n //>>includeEnd('debug');\n\n buffer = defaultValue(buffer, 0.0);\n\n var squaredXOverSquaredZ = this._squaredXOverSquaredZ;\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n result.x = 0.0;\n result.y = 0.0;\n result.z = position.z * (1 - squaredXOverSquaredZ);\n\n if (Math.abs(result.z) >= this._radii.z - buffer) {\n return undefined;\n }\n\n return result;\n};\n\nvar abscissas = [\n 0.14887433898163,\n 0.43339539412925,\n 0.67940956829902,\n 0.86506336668898,\n 0.97390652851717,\n 0.0,\n];\nvar weights = [\n 0.29552422471475,\n 0.26926671930999,\n 0.21908636251598,\n 0.14945134915058,\n 0.066671344308684,\n 0.0,\n];\n\n/**\n * Compute the 10th order Gauss-Legendre Quadrature of the given definite integral.\n *\n * @param {Number} a The lower bound for the integration.\n * @param {Number} b The upper bound for the integration.\n * @param {Ellipsoid~RealValuedScalarFunction} func The function to integrate.\n * @returns {Number} The value of the integral of the given function over the given domain.\n *\n * @private\n */\nfunction gaussLegendreQuadrature(a, b, func) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"a\", a);\n Check.typeOf.number(\"b\", b);\n Check.typeOf.func(\"func\", func);\n //>>includeEnd('debug');\n\n // The range is half of the normal range since the five weights add to one (ten weights add to two).\n // The values of the abscissas are multiplied by two to account for this.\n var xMean = 0.5 * (b + a);\n var xRange = 0.5 * (b - a);\n\n var sum = 0.0;\n for (var i = 0; i < 5; i++) {\n var dx = xRange * abscissas[i];\n sum += weights[i] * (func(xMean + dx) + func(xMean - dx));\n }\n\n // Scale the sum to the range of x.\n sum *= xRange;\n return sum;\n}\n\n/**\n * A real valued scalar function.\n * @callback Ellipsoid~RealValuedScalarFunction\n *\n * @param {Number} x The value used to evaluate the function.\n * @returns {Number} The value of the function at x.\n *\n * @private\n */\n\n/**\n * Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using\n * Gauss-Legendre 10th order quadrature.\n *\n * @param {Rectangle} rectangle The rectangle used for computing the surface area.\n * @returns {Number} The approximate area of the rectangle on the surface of this ellipsoid.\n */\nEllipsoid.prototype.surfaceArea = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n var minLongitude = rectangle.west;\n var maxLongitude = rectangle.east;\n var minLatitude = rectangle.south;\n var maxLatitude = rectangle.north;\n\n while (maxLongitude < minLongitude) {\n maxLongitude += CesiumMath.TWO_PI;\n }\n\n var radiiSquared = this._radiiSquared;\n var a2 = radiiSquared.x;\n var b2 = radiiSquared.y;\n var c2 = radiiSquared.z;\n var a2b2 = a2 * b2;\n return gaussLegendreQuadrature(minLatitude, maxLatitude, function (lat) {\n // phi represents the angle measured from the north pole\n // sin(phi) = sin(pi / 2 - lat) = cos(lat), cos(phi) is similar\n var sinPhi = Math.cos(lat);\n var cosPhi = Math.sin(lat);\n return (\n Math.cos(lat) *\n gaussLegendreQuadrature(minLongitude, maxLongitude, function (lon) {\n var cosTheta = Math.cos(lon);\n var sinTheta = Math.sin(lon);\n return Math.sqrt(\n a2b2 * cosPhi * cosPhi +\n c2 *\n (b2 * cosTheta * cosTheta + a2 * sinTheta * sinTheta) *\n sinPhi *\n sinPhi\n );\n })\n );\n });\n};\n\nexport default Ellipsoid;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\n\n/**\n * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying\n * them by the {@link Ellipsoid#maximumRadius}. This projection\n * is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée. It\n * is also known as EPSG:4326.\n *\n * @alias GeographicProjection\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n *\n * @see WebMercatorProjection\n */\nfunction GeographicProjection(ellipsoid) {\n this._ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n this._semimajorAxis = this._ellipsoid.maximumRadius;\n this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\n}\n\nObject.defineProperties(GeographicProjection.prototype, {\n /**\n * Gets the {@link Ellipsoid}.\n *\n * @memberof GeographicProjection.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n});\n\n/**\n * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters.\n * X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the\n * ellipsoid. Z is the unmodified height.\n *\n * @param {Cartographic} cartographic The coordinates to project.\n * @param {Cartesian3} [result] An instance into which to copy the result. If this parameter is\n * undefined, a new instance is created and returned.\n * @returns {Cartesian3} The projected coordinates. If the result parameter is not undefined, the\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\n * created and returned.\n */\nGeographicProjection.prototype.project = function (cartographic, result) {\n // Actually this is the special case of equidistant cylindrical called the plate carree\n var semimajorAxis = this._semimajorAxis;\n var x = cartographic.longitude * semimajorAxis;\n var y = cartographic.latitude * semimajorAxis;\n var z = cartographic.height;\n\n if (!defined(result)) {\n return new Cartesian3(x, y, z);\n }\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic}\n * coordinates, in radians. Longitude and Latitude are the X and Y coordinates, respectively,\n * divided by the maximum radius of the ellipsoid. Height is the unmodified Z coordinate.\n *\n * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters.\n * @param {Cartographic} [result] An instance into which to copy the result. If this parameter is\n * undefined, a new instance is created and returned.\n * @returns {Cartographic} The unprojected coordinates. If the result parameter is not undefined, the\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\n * created and returned.\n */\nGeographicProjection.prototype.unproject = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required\");\n }\n //>>includeEnd('debug');\n\n var oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\n var longitude = cartesian.x * oneOverEarthSemimajorAxis;\n var latitude = cartesian.y * oneOverEarthSemimajorAxis;\n var height = cartesian.z;\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude, height);\n }\n\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = height;\n return result;\n};\nexport default GeographicProjection;\n","/**\n * This enumerated type is used in determining where, relative to the frustum, an\n * object is located. The object can either be fully contained within the frustum (INSIDE),\n * partially inside the frustum and partially outside (INTERSECTING), or somewhere entirely\n * outside of the frustum's 6 planes (OUTSIDE).\n *\n * @enum {Number}\n */\nvar Intersect = {\n /**\n * Represents that an object is not contained within the frustum.\n *\n * @type {Number}\n * @constant\n */\n OUTSIDE: -1,\n\n /**\n * Represents that an object intersects one of the frustum's planes.\n *\n * @type {Number}\n * @constant\n */\n INTERSECTING: 0,\n\n /**\n * Represents that an object is fully within the frustum.\n *\n * @type {Number}\n * @constant\n */\n INSIDE: 1,\n};\nexport default Object.freeze(Intersect);\n","import defaultValue from \"./defaultValue.js\";\n\n/**\n * Represents the closed interval [start, stop].\n * @alias Interval\n * @constructor\n *\n * @param {Number} [start=0.0] The beginning of the interval.\n * @param {Number} [stop=0.0] The end of the interval.\n */\nfunction Interval(start, stop) {\n /**\n * The beginning of the interval.\n * @type {Number}\n * @default 0.0\n */\n this.start = defaultValue(start, 0.0);\n /**\n * The end of the interval.\n * @type {Number}\n * @default 0.0\n */\n this.stop = defaultValue(stop, 0.0);\n}\nexport default Interval;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A 3x3 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix3\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {Number} [column2Row0=0.0] The value for column 2, row 0.\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\n * @param {Number} [column2Row1=0.0] The value for column 2, row 1.\n * @param {Number} [column0Row2=0.0] The value for column 0, row 2.\n * @param {Number} [column1Row2=0.0] The value for column 1, row 2.\n * @param {Number} [column2Row2=0.0] The value for column 2, row 2.\n *\n * @see Matrix3.fromColumnMajorArray\n * @see Matrix3.fromRowMajorArray\n * @see Matrix3.fromQuaternion\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix2\n * @see Matrix4\n */\nfunction Matrix3(\n column0Row0,\n column1Row0,\n column2Row0,\n column0Row1,\n column1Row1,\n column2Row1,\n column0Row2,\n column1Row2,\n column2Row2\n) {\n this[0] = defaultValue(column0Row0, 0.0);\n this[1] = defaultValue(column0Row1, 0.0);\n this[2] = defaultValue(column0Row2, 0.0);\n this[3] = defaultValue(column1Row0, 0.0);\n this[4] = defaultValue(column1Row1, 0.0);\n this[5] = defaultValue(column1Row2, 0.0);\n this[6] = defaultValue(column2Row0, 0.0);\n this[7] = defaultValue(column2Row1, 0.0);\n this[8] = defaultValue(column2Row2, 0.0);\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nMatrix3.packedLength = 9;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix3} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nMatrix3.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value[0];\n array[startingIndex++] = value[1];\n array[startingIndex++] = value[2];\n array[startingIndex++] = value[3];\n array[startingIndex++] = value[4];\n array[startingIndex++] = value[5];\n array[startingIndex++] = value[6];\n array[startingIndex++] = value[7];\n array[startingIndex++] = value[8];\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix3} [result] The object into which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n */\nMatrix3.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n result[0] = array[startingIndex++];\n result[1] = array[startingIndex++];\n result[2] = array[startingIndex++];\n result[3] = array[startingIndex++];\n result[4] = array[startingIndex++];\n result[5] = array[startingIndex++];\n result[6] = array[startingIndex++];\n result[7] = array[startingIndex++];\n result[8] = array[startingIndex++];\n return result;\n};\n\n/**\n * Duplicates a Matrix3 instance.\n *\n * @param {Matrix3} matrix The matrix to duplicate.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix3.clone = function (matrix, result) {\n if (!defined(matrix)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Matrix3(\n matrix[0],\n matrix[3],\n matrix[6],\n matrix[1],\n matrix[4],\n matrix[7],\n matrix[2],\n matrix[5],\n matrix[8]\n );\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n result[8] = matrix[8];\n return result;\n};\n\n/**\n * Creates a Matrix3 from 9 consecutive elements in an array.\n *\n * @param {Number[]} array The array whose 9 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Create the Matrix3:\n * // [1.0, 2.0, 3.0]\n * // [1.0, 2.0, 3.0]\n * // [1.0, 2.0, 3.0]\n *\n * var v = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\n * var m = Cesium.Matrix3.fromArray(v);\n *\n * // Create same Matrix3 with using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\n * var m2 = Cesium.Matrix3.fromArray(v2, 2);\n */\nMatrix3.fromArray = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n result[0] = array[startingIndex];\n result[1] = array[startingIndex + 1];\n result[2] = array[startingIndex + 2];\n result[3] = array[startingIndex + 3];\n result[4] = array[startingIndex + 4];\n result[5] = array[startingIndex + 5];\n result[6] = array[startingIndex + 6];\n result[7] = array[startingIndex + 7];\n result[8] = array[startingIndex + 8];\n return result;\n};\n\n/**\n * Creates a Matrix3 instance from a column-major order array.\n *\n * @param {Number[]} values The column-major order array.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n */\nMatrix3.fromColumnMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n return Matrix3.clone(values, result);\n};\n\n/**\n * Creates a Matrix3 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {Number[]} values The row-major order array.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n */\nMatrix3.fromRowMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix3(\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n values[7],\n values[8]\n );\n }\n result[0] = values[0];\n result[1] = values[3];\n result[2] = values[6];\n result[3] = values[1];\n result[4] = values[4];\n result[5] = values[7];\n result[6] = values[2];\n result[7] = values[5];\n result[8] = values[8];\n return result;\n};\n\n/**\n * Computes a 3x3 rotation matrix from the provided quaternion.\n *\n * @param {Quaternion} quaternion the quaternion to use.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The 3x3 rotation matrix from this quaternion.\n */\nMatrix3.fromQuaternion = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n //>>includeEnd('debug');\n\n var x2 = quaternion.x * quaternion.x;\n var xy = quaternion.x * quaternion.y;\n var xz = quaternion.x * quaternion.z;\n var xw = quaternion.x * quaternion.w;\n var y2 = quaternion.y * quaternion.y;\n var yz = quaternion.y * quaternion.z;\n var yw = quaternion.y * quaternion.w;\n var z2 = quaternion.z * quaternion.z;\n var zw = quaternion.z * quaternion.w;\n var w2 = quaternion.w * quaternion.w;\n\n var m00 = x2 - y2 - z2 + w2;\n var m01 = 2.0 * (xy - zw);\n var m02 = 2.0 * (xz + yw);\n\n var m10 = 2.0 * (xy + zw);\n var m11 = -x2 + y2 - z2 + w2;\n var m12 = 2.0 * (yz - xw);\n\n var m20 = 2.0 * (xz - yw);\n var m21 = 2.0 * (yz + xw);\n var m22 = -x2 - y2 + z2 + w2;\n\n if (!defined(result)) {\n return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\n }\n result[0] = m00;\n result[1] = m10;\n result[2] = m20;\n result[3] = m01;\n result[4] = m11;\n result[5] = m21;\n result[6] = m02;\n result[7] = m12;\n result[8] = m22;\n return result;\n};\n\n/**\n * Computes a 3x3 rotation matrix from the provided headingPitchRoll. (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\n *\n * @param {HeadingPitchRoll} headingPitchRoll the headingPitchRoll to use.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The 3x3 rotation matrix from this headingPitchRoll.\n */\nMatrix3.fromHeadingPitchRoll = function (headingPitchRoll, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\n //>>includeEnd('debug');\n\n var cosTheta = Math.cos(-headingPitchRoll.pitch);\n var cosPsi = Math.cos(-headingPitchRoll.heading);\n var cosPhi = Math.cos(headingPitchRoll.roll);\n var sinTheta = Math.sin(-headingPitchRoll.pitch);\n var sinPsi = Math.sin(-headingPitchRoll.heading);\n var sinPhi = Math.sin(headingPitchRoll.roll);\n\n var m00 = cosTheta * cosPsi;\n var m01 = -cosPhi * sinPsi + sinPhi * sinTheta * cosPsi;\n var m02 = sinPhi * sinPsi + cosPhi * sinTheta * cosPsi;\n\n var m10 = cosTheta * sinPsi;\n var m11 = cosPhi * cosPsi + sinPhi * sinTheta * sinPsi;\n var m12 = -sinPhi * cosPsi + cosPhi * sinTheta * sinPsi;\n\n var m20 = -sinTheta;\n var m21 = sinPhi * cosTheta;\n var m22 = cosPhi * cosTheta;\n\n if (!defined(result)) {\n return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\n }\n result[0] = m00;\n result[1] = m10;\n result[2] = m20;\n result[3] = m01;\n result[4] = m11;\n result[5] = m21;\n result[6] = m02;\n result[7] = m12;\n result[8] = m22;\n return result;\n};\n\n/**\n * Computes a Matrix3 instance representing a non-uniform scale.\n *\n * @param {Cartesian3} scale The x, y, and z scale factors.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [7.0, 0.0, 0.0]\n * // [0.0, 8.0, 0.0]\n * // [0.0, 0.0, 9.0]\n * var m = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix3.fromScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, scale.z);\n }\n\n result[0] = scale.x;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = scale.y;\n result[5] = 0.0;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = scale.z;\n return result;\n};\n\n/**\n * Computes a Matrix3 instance representing a uniform scale.\n *\n * @param {Number} scale The uniform scale factor.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [2.0, 0.0, 0.0]\n * // [0.0, 2.0, 0.0]\n * // [0.0, 0.0, 2.0]\n * var m = Cesium.Matrix3.fromUniformScale(2.0);\n */\nMatrix3.fromUniformScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix3(scale, 0.0, 0.0, 0.0, scale, 0.0, 0.0, 0.0, scale);\n }\n\n result[0] = scale;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = scale;\n result[5] = 0.0;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = scale;\n return result;\n};\n\n/**\n * Computes a Matrix3 instance representing the cross product equivalent matrix of a Cartesian3 vector.\n *\n * @param {Cartesian3} vector the vector on the left hand side of the cross product operation.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [0.0, -9.0, 8.0]\n * // [9.0, 0.0, -7.0]\n * // [-8.0, 7.0, 0.0]\n * var m = Cesium.Matrix3.fromCrossProduct(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix3.fromCrossProduct = function (vector, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"vector\", vector);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix3(\n 0.0,\n -vector.z,\n vector.y,\n vector.z,\n 0.0,\n -vector.x,\n -vector.y,\n vector.x,\n 0.0\n );\n }\n\n result[0] = 0.0;\n result[1] = vector.z;\n result[2] = -vector.y;\n result[3] = -vector.z;\n result[4] = 0.0;\n result[5] = vector.x;\n result[6] = vector.y;\n result[7] = -vector.x;\n result[8] = 0.0;\n return result;\n};\n\n/**\n * Creates a rotation matrix around the x-axis.\n *\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the x-axis.\n * var p = new Cesium.Cartesian3(5, 6, 7);\n * var m = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(45.0));\n * var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationX = function (angle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"angle\", angle);\n //>>includeEnd('debug');\n\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n\n if (!defined(result)) {\n return new Matrix3(\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n cosAngle,\n -sinAngle,\n 0.0,\n sinAngle,\n cosAngle\n );\n }\n\n result[0] = 1.0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = cosAngle;\n result[5] = sinAngle;\n result[6] = 0.0;\n result[7] = -sinAngle;\n result[8] = cosAngle;\n\n return result;\n};\n\n/**\n * Creates a rotation matrix around the y-axis.\n *\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the y-axis.\n * var p = new Cesium.Cartesian3(5, 6, 7);\n * var m = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(45.0));\n * var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationY = function (angle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"angle\", angle);\n //>>includeEnd('debug');\n\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n\n if (!defined(result)) {\n return new Matrix3(\n cosAngle,\n 0.0,\n sinAngle,\n 0.0,\n 1.0,\n 0.0,\n -sinAngle,\n 0.0,\n cosAngle\n );\n }\n\n result[0] = cosAngle;\n result[1] = 0.0;\n result[2] = -sinAngle;\n result[3] = 0.0;\n result[4] = 1.0;\n result[5] = 0.0;\n result[6] = sinAngle;\n result[7] = 0.0;\n result[8] = cosAngle;\n\n return result;\n};\n\n/**\n * Creates a rotation matrix around the z-axis.\n *\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the z-axis.\n * var p = new Cesium.Cartesian3(5, 6, 7);\n * var m = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45.0));\n * var rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationZ = function (angle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"angle\", angle);\n //>>includeEnd('debug');\n\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n\n if (!defined(result)) {\n return new Matrix3(\n cosAngle,\n -sinAngle,\n 0.0,\n sinAngle,\n cosAngle,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n\n result[0] = cosAngle;\n result[1] = sinAngle;\n result[2] = 0.0;\n result[3] = -sinAngle;\n result[4] = cosAngle;\n result[5] = 0.0;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 1.0;\n\n return result;\n};\n\n/**\n * Creates an Array from the provided Matrix3 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix3} matrix The matrix to use..\n * @param {Number[]} [result] The Array onto which to store the result.\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\n */\nMatrix3.toArray = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return [\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[4],\n matrix[5],\n matrix[6],\n matrix[7],\n matrix[8],\n ];\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n result[8] = matrix[8];\n return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {Number} row The zero-based index of the row.\n * @param {Number} column The zero-based index of the column.\n * @returns {Number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0, 1, or 2.\n * @exception {DeveloperError} column must be 0, 1, or 2.\n *\n * @example\n * var myMatrix = new Cesium.Matrix3();\n * var column1Row0Index = Cesium.Matrix3.getElementIndex(1, 0);\n * var column1Row0 = myMatrix[column1Row0Index]\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix3.getElementIndex = function (column, row) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 2);\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 2);\n //>>includeEnd('debug');\n\n return column * 3 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to retrieve.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.getColumn = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var startIndex = index * 3;\n var x = matrix[startIndex];\n var y = matrix[startIndex + 1];\n var z = matrix[startIndex + 2];\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to set.\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.setColumn = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix3.clone(matrix, result);\n var startIndex = index * 3;\n result[startIndex] = cartesian.x;\n result[startIndex + 1] = cartesian.y;\n result[startIndex + 2] = cartesian.z;\n return result;\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to retrieve.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.getRow = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = matrix[index];\n var y = matrix[index + 3];\n var z = matrix[index + 6];\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to set.\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.setRow = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix3.clone(matrix, result);\n result[index] = cartesian.x;\n result[index + 3] = cartesian.y;\n result[index + 6] = cartesian.z;\n return result;\n};\n\nvar scratchColumn = new Cartesian3();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nMatrix3.getScale = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn)\n );\n result.y = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[3], matrix[4], matrix[5], scratchColumn)\n );\n result.z = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[6], matrix[7], matrix[8], scratchColumn)\n );\n return result;\n};\n\nvar scratchScale = new Cartesian3();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors.\n *\n * @param {Matrix3} matrix The matrix.\n * @returns {Number} The maximum scale.\n */\nMatrix3.getMaximumScale = function (matrix) {\n Matrix3.getScale(matrix, scratchScale);\n return Cartesian3.maximumComponent(scratchScale);\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.multiply = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 =\n left[0] * right[0] + left[3] * right[1] + left[6] * right[2];\n var column0Row1 =\n left[1] * right[0] + left[4] * right[1] + left[7] * right[2];\n var column0Row2 =\n left[2] * right[0] + left[5] * right[1] + left[8] * right[2];\n\n var column1Row0 =\n left[0] * right[3] + left[3] * right[4] + left[6] * right[5];\n var column1Row1 =\n left[1] * right[3] + left[4] * right[4] + left[7] * right[5];\n var column1Row2 =\n left[2] * right[3] + left[5] * right[4] + left[8] * right[5];\n\n var column2Row0 =\n left[0] * right[6] + left[3] * right[7] + left[6] * right[8];\n var column2Row1 =\n left[1] * right[6] + left[4] * right[7] + left[7] * right[8];\n var column2Row2 =\n left[2] * right[6] + left[5] * right[7] + left[8] * right[8];\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = column1Row0;\n result[4] = column1Row1;\n result[5] = column1Row2;\n result[6] = column2Row0;\n result[7] = column2Row1;\n result[8] = column2Row2;\n return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] + right[0];\n result[1] = left[1] + right[1];\n result[2] = left[2] + right[2];\n result[3] = left[3] + right[3];\n result[4] = left[4] + right[4];\n result[5] = left[5] + right[5];\n result[6] = left[6] + right[6];\n result[7] = left[7] + right[7];\n result[8] = left[8] + right[8];\n return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] - right[0];\n result[1] = left[1] - right[1];\n result[2] = left[2] - right[2];\n result[3] = left[3] - right[3];\n result[4] = left[4] - right[4];\n result[5] = left[5] - right[5];\n result[6] = left[6] - right[6];\n result[7] = left[7] - right[7];\n result[8] = left[8] - right[8];\n return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Cartesian3} cartesian The column.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nMatrix3.multiplyByVector = function (matrix, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var vX = cartesian.x;\n var vY = cartesian.y;\n var vZ = cartesian.z;\n\n var x = matrix[0] * vX + matrix[3] * vY + matrix[6] * vZ;\n var y = matrix[1] * vX + matrix[4] * vY + matrix[7] * vZ;\n var z = matrix[2] * vX + matrix[5] * vY + matrix[8] * vZ;\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Number} scalar The number to multiply by.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.multiplyByScalar = function (matrix, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0] * scalar;\n result[1] = matrix[1] * scalar;\n result[2] = matrix[2] * scalar;\n result[3] = matrix[3] * scalar;\n result[4] = matrix[4] * scalar;\n result[5] = matrix[5] * scalar;\n result[6] = matrix[6] * scalar;\n result[7] = matrix[7] * scalar;\n result[8] = matrix[8] * scalar;\n return result;\n};\n\n/**\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\n *\n * @param {Matrix3} matrix The matrix on the left-hand side.\n * @param {Cartesian3} scale The non-uniform scale on the right-hand side.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromScale(scale), m);\n * Cesium.Matrix3.multiplyByScale(m, scale, m);\n *\n * @see Matrix3.fromScale\n * @see Matrix3.multiplyByUniformScale\n */\nMatrix3.multiplyByScale = function (matrix, scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"scale\", scale);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0] * scale.x;\n result[1] = matrix[1] * scale.x;\n result[2] = matrix[2] * scale.x;\n result[3] = matrix[3] * scale.y;\n result[4] = matrix[4] * scale.y;\n result[5] = matrix[5] * scale.y;\n result[6] = matrix[6] * scale.z;\n result[7] = matrix[7] * scale.z;\n result[8] = matrix[8] * scale.z;\n return result;\n};\n\n/**\n * Creates a negated copy of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to negate.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.negate = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = -matrix[0];\n result[1] = -matrix[1];\n result[2] = -matrix[2];\n result[3] = -matrix[3];\n result[4] = -matrix[4];\n result[5] = -matrix[5];\n result[6] = -matrix[6];\n result[7] = -matrix[7];\n result[8] = -matrix[8];\n return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to transpose.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.transpose = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 = matrix[0];\n var column0Row1 = matrix[3];\n var column0Row2 = matrix[6];\n var column1Row0 = matrix[1];\n var column1Row1 = matrix[4];\n var column1Row2 = matrix[7];\n var column2Row0 = matrix[2];\n var column2Row1 = matrix[5];\n var column2Row2 = matrix[8];\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = column1Row0;\n result[4] = column1Row1;\n result[5] = column1Row2;\n result[6] = column2Row0;\n result[7] = column2Row1;\n result[8] = column2Row2;\n return result;\n};\n\nvar UNIT = new Cartesian3(1, 1, 1);\n\n/**\n * Extracts the rotation assuming the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter\n */\nMatrix3.getRotation = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var inverseScale = Cartesian3.divideComponents(\n UNIT,\n Matrix3.getScale(matrix, scratchScale),\n scratchScale\n );\n result = Matrix3.multiplyByScale(matrix, inverseScale, result);\n\n return result;\n};\n\nfunction computeFrobeniusNorm(matrix) {\n var norm = 0.0;\n for (var i = 0; i < 9; ++i) {\n var temp = matrix[i];\n norm += temp * temp;\n }\n\n return Math.sqrt(norm);\n}\n\nvar rowVal = [1, 0, 0];\nvar colVal = [2, 2, 1];\n\nfunction offDiagonalFrobeniusNorm(matrix) {\n // Computes the \"off-diagonal\" Frobenius norm.\n // Assumes matrix is symmetric.\n\n var norm = 0.0;\n for (var i = 0; i < 3; ++i) {\n var temp = matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])];\n norm += 2.0 * temp * temp;\n }\n\n return Math.sqrt(norm);\n}\n\nfunction shurDecomposition(matrix, result) {\n // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n // section 8.4.2 The 2by2 Symmetric Schur Decomposition.\n //\n // The routine takes a matrix, which is assumed to be symmetric, and\n // finds the largest off-diagonal term, and then creates\n // a matrix (result) which can be used to help reduce it\n\n var tolerance = CesiumMath.EPSILON15;\n\n var maxDiagonal = 0.0;\n var rotAxis = 1;\n\n // find pivot (rotAxis) based on max diagonal of matrix\n for (var i = 0; i < 3; ++i) {\n var temp = Math.abs(matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])]);\n if (temp > maxDiagonal) {\n rotAxis = i;\n maxDiagonal = temp;\n }\n }\n\n var c = 1.0;\n var s = 0.0;\n\n var p = rowVal[rotAxis];\n var q = colVal[rotAxis];\n\n if (Math.abs(matrix[Matrix3.getElementIndex(q, p)]) > tolerance) {\n var qq = matrix[Matrix3.getElementIndex(q, q)];\n var pp = matrix[Matrix3.getElementIndex(p, p)];\n var qp = matrix[Matrix3.getElementIndex(q, p)];\n\n var tau = (qq - pp) / 2.0 / qp;\n var t;\n\n if (tau < 0.0) {\n t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau));\n } else {\n t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau));\n }\n\n c = 1.0 / Math.sqrt(1.0 + t * t);\n s = t * c;\n }\n\n result = Matrix3.clone(Matrix3.IDENTITY, result);\n\n result[Matrix3.getElementIndex(p, p)] = result[\n Matrix3.getElementIndex(q, q)\n ] = c;\n result[Matrix3.getElementIndex(q, p)] = s;\n result[Matrix3.getElementIndex(p, q)] = -s;\n\n return result;\n}\n\nvar jMatrix = new Matrix3();\nvar jMatrixTranspose = new Matrix3();\n\n/**\n * Computes the eigenvectors and eigenvalues of a symmetric matrix.\n * <p>\n * Returns a diagonal matrix and unitary matrix such that:\n * <code>matrix = unitary matrix * diagonal matrix * transpose(unitary matrix)</code>\n * </p>\n * <p>\n * The values along the diagonal of the diagonal matrix are the eigenvalues. The columns\n * of the unitary matrix are the corresponding eigenvectors.\n * </p>\n *\n * @param {Matrix3} matrix The matrix to decompose into diagonal and unitary matrix. Expected to be symmetric.\n * @param {Object} [result] An object with unitary and diagonal properties which are matrices onto which to store the result.\n * @returns {Object} An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively.\n *\n * @example\n * var a = //... symetric matrix\n * var result = {\n * unitary : new Cesium.Matrix3(),\n * diagonal : new Cesium.Matrix3()\n * };\n * Cesium.Matrix3.computeEigenDecomposition(a, result);\n *\n * var unitaryTranspose = Cesium.Matrix3.transpose(result.unitary, new Cesium.Matrix3());\n * var b = Cesium.Matrix3.multiply(result.unitary, result.diagonal, new Cesium.Matrix3());\n * Cesium.Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a\n *\n * var lambda = Cesium.Matrix3.getColumn(result.diagonal, 0, new Cesium.Cartesian3()).x; // first eigenvalue\n * var v = Cesium.Matrix3.getColumn(result.unitary, 0, new Cesium.Cartesian3()); // first eigenvector\n * var c = Cesium.Cartesian3.multiplyByScalar(v, lambda, new Cesium.Cartesian3()); // equal to Cesium.Matrix3.multiplyByVector(a, v)\n */\nMatrix3.computeEigenDecomposition = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n // section 8.4.3 The Classical Jacobi Algorithm\n\n var tolerance = CesiumMath.EPSILON20;\n var maxSweeps = 10;\n\n var count = 0;\n var sweep = 0;\n\n if (!defined(result)) {\n result = {};\n }\n\n var unitaryMatrix = (result.unitary = Matrix3.clone(\n Matrix3.IDENTITY,\n result.unitary\n ));\n var diagMatrix = (result.diagonal = Matrix3.clone(matrix, result.diagonal));\n\n var epsilon = tolerance * computeFrobeniusNorm(diagMatrix);\n\n while (sweep < maxSweeps && offDiagonalFrobeniusNorm(diagMatrix) > epsilon) {\n shurDecomposition(diagMatrix, jMatrix);\n Matrix3.transpose(jMatrix, jMatrixTranspose);\n Matrix3.multiply(diagMatrix, jMatrix, diagMatrix);\n Matrix3.multiply(jMatrixTranspose, diagMatrix, diagMatrix);\n Matrix3.multiply(unitaryMatrix, jMatrix, unitaryMatrix);\n\n if (++count > 2) {\n ++sweep;\n count = 0;\n }\n }\n\n return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix3} matrix The matrix with signed elements.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.abs = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = Math.abs(matrix[0]);\n result[1] = Math.abs(matrix[1]);\n result[2] = Math.abs(matrix[2]);\n result[3] = Math.abs(matrix[3]);\n result[4] = Math.abs(matrix[4]);\n result[5] = Math.abs(matrix[5]);\n result[6] = Math.abs(matrix[6]);\n result[7] = Math.abs(matrix[7]);\n result[8] = Math.abs(matrix[8]);\n\n return result;\n};\n\n/**\n * Computes the determinant of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @returns {Number} The value of the determinant of the matrix.\n */\nMatrix3.determinant = function (matrix) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n var m11 = matrix[0];\n var m21 = matrix[3];\n var m31 = matrix[6];\n var m12 = matrix[1];\n var m22 = matrix[4];\n var m32 = matrix[7];\n var m13 = matrix[2];\n var m23 = matrix[5];\n var m33 = matrix[8];\n\n return (\n m11 * (m22 * m33 - m23 * m32) +\n m12 * (m23 * m31 - m21 * m33) +\n m13 * (m21 * m32 - m22 * m31)\n );\n};\n\n/**\n * Computes the inverse of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to invert.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} matrix is not invertible.\n */\nMatrix3.inverse = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var m11 = matrix[0];\n var m21 = matrix[1];\n var m31 = matrix[2];\n var m12 = matrix[3];\n var m22 = matrix[4];\n var m32 = matrix[5];\n var m13 = matrix[6];\n var m23 = matrix[7];\n var m33 = matrix[8];\n\n var determinant = Matrix3.determinant(matrix);\n\n //>>includeStart('debug', pragmas.debug);\n if (Math.abs(determinant) <= CesiumMath.EPSILON15) {\n throw new DeveloperError(\"matrix is not invertible\");\n }\n //>>includeEnd('debug');\n\n result[0] = m22 * m33 - m23 * m32;\n result[1] = m23 * m31 - m21 * m33;\n result[2] = m21 * m32 - m22 * m31;\n result[3] = m13 * m32 - m12 * m33;\n result[4] = m11 * m33 - m13 * m31;\n result[5] = m12 * m31 - m11 * m32;\n result[6] = m12 * m23 - m13 * m22;\n result[7] = m13 * m21 - m11 * m23;\n result[8] = m11 * m22 - m12 * m21;\n\n var scale = 1.0 / determinant;\n return Matrix3.multiplyByScalar(result, scale, result);\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix3} [left] The first matrix.\n * @param {Matrix3} [right] The second matrix.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMatrix3.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left[0] === right[0] &&\n left[1] === right[1] &&\n left[2] === right[2] &&\n left[3] === right[3] &&\n left[4] === right[4] &&\n left[5] === right[5] &&\n left[6] === right[6] &&\n left[7] === right[7] &&\n left[8] === right[8])\n );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix3} [left] The first matrix.\n * @param {Matrix3} [right] The second matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix3.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left[0] - right[0]) <= epsilon &&\n Math.abs(left[1] - right[1]) <= epsilon &&\n Math.abs(left[2] - right[2]) <= epsilon &&\n Math.abs(left[3] - right[3]) <= epsilon &&\n Math.abs(left[4] - right[4]) <= epsilon &&\n Math.abs(left[5] - right[5]) <= epsilon &&\n Math.abs(left[6] - right[6]) <= epsilon &&\n Math.abs(left[7] - right[7]) <= epsilon &&\n Math.abs(left[8] - right[8]) <= epsilon)\n );\n};\n\n/**\n * An immutable Matrix3 instance initialized to the identity matrix.\n *\n * @type {Matrix3}\n * @constant\n */\nMatrix3.IDENTITY = Object.freeze(\n new Matrix3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\n);\n\n/**\n * An immutable Matrix3 instance initialized to the zero matrix.\n *\n * @type {Matrix3}\n * @constant\n */\nMatrix3.ZERO = Object.freeze(\n new Matrix3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n);\n\n/**\n * The index into Matrix3 for column 0, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix3 for column 0, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix3 for column 0, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN0ROW2 = 2;\n\n/**\n * The index into Matrix3 for column 1, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN1ROW0 = 3;\n\n/**\n * The index into Matrix3 for column 1, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN1ROW1 = 4;\n\n/**\n * The index into Matrix3 for column 1, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN1ROW2 = 5;\n\n/**\n * The index into Matrix3 for column 2, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN2ROW0 = 6;\n\n/**\n * The index into Matrix3 for column 2, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN2ROW1 = 7;\n\n/**\n * The index into Matrix3 for column 2, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix3.COLUMN2ROW2 = 8;\n\nObject.defineProperties(Matrix3.prototype, {\n /**\n * Gets the number of items in the collection.\n * @memberof Matrix3.prototype\n *\n * @type {Number}\n */\n length: {\n get: function () {\n return Matrix3.packedLength;\n },\n },\n});\n\n/**\n * Duplicates the provided Matrix3 instance.\n *\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n */\nMatrix3.prototype.clone = function (result) {\n return Matrix3.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix3} [right] The right hand side matrix.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix3.prototype.equals = function (right) {\n return Matrix3.equals(this, right);\n};\n\n/**\n * @private\n */\nMatrix3.equalsArray = function (matrix, array, offset) {\n return (\n matrix[0] === array[offset] &&\n matrix[1] === array[offset + 1] &&\n matrix[2] === array[offset + 2] &&\n matrix[3] === array[offset + 3] &&\n matrix[4] === array[offset + 4] &&\n matrix[5] === array[offset + 5] &&\n matrix[6] === array[offset + 6] &&\n matrix[7] === array[offset + 7] &&\n matrix[8] === array[offset + 8]\n );\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix3} [right] The right hand side matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix3.prototype.equalsEpsilon = function (right, epsilon) {\n return Matrix3.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1, column2)'.\n *\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2)'.\n */\nMatrix3.prototype.toString = function () {\n return (\n \"(\" +\n this[0] +\n \", \" +\n this[3] +\n \", \" +\n this[6] +\n \")\\n\" +\n \"(\" +\n this[1] +\n \", \" +\n this[4] +\n \", \" +\n this[7] +\n \")\\n\" +\n \"(\" +\n this[2] +\n \", \" +\n this[5] +\n \", \" +\n this[8] +\n \")\"\n );\n};\nexport default Matrix3;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A 4D Cartesian point.\n * @alias Cartesian4\n * @constructor\n *\n * @param {Number} [x=0.0] The X component.\n * @param {Number} [y=0.0] The Y component.\n * @param {Number} [z=0.0] The Z component.\n * @param {Number} [w=0.0] The W component.\n *\n * @see Cartesian2\n * @see Cartesian3\n * @see Packable\n */\nfunction Cartesian4(x, y, z, w) {\n /**\n * The X component.\n * @type {Number}\n * @default 0.0\n */\n this.x = defaultValue(x, 0.0);\n\n /**\n * The Y component.\n * @type {Number}\n * @default 0.0\n */\n this.y = defaultValue(y, 0.0);\n\n /**\n * The Z component.\n * @type {Number}\n * @default 0.0\n */\n this.z = defaultValue(z, 0.0);\n\n /**\n * The W component.\n * @type {Number}\n * @default 0.0\n */\n this.w = defaultValue(w, 0.0);\n}\n\n/**\n * Creates a Cartesian4 instance from x, y, z and w coordinates.\n *\n * @param {Number} x The x coordinate.\n * @param {Number} y The y coordinate.\n * @param {Number} z The z coordinate.\n * @param {Number} w The w coordinate.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n */\nCartesian4.fromElements = function (x, y, z, w, result) {\n if (!defined(result)) {\n return new Cartesian4(x, y, z, w);\n }\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Creates a Cartesian4 instance from a {@link Color}. <code>red</code>, <code>green</code>, <code>blue</code>,\n * and <code>alpha</code> map to <code>x</code>, <code>y</code>, <code>z</code>, and <code>w</code>, respectively.\n *\n * @param {Color} color The source color.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n */\nCartesian4.fromColor = function (color, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"color\", color);\n //>>includeEnd('debug');\n if (!defined(result)) {\n return new Cartesian4(color.red, color.green, color.blue, color.alpha);\n }\n\n result.x = color.red;\n result.y = color.green;\n result.z = color.blue;\n result.w = color.alpha;\n return result;\n};\n\n/**\n * Duplicates a Cartesian4 instance.\n *\n * @param {Cartesian4} cartesian The Cartesian to duplicate.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. (Returns undefined if cartesian is undefined)\n */\nCartesian4.clone = function (cartesian, result) {\n if (!defined(cartesian)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Cartesian4(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n }\n\n result.x = cartesian.x;\n result.y = cartesian.y;\n result.z = cartesian.z;\n result.w = cartesian.w;\n return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCartesian4.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Cartesian4} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCartesian4.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.x;\n array[startingIndex++] = value.y;\n array[startingIndex++] = value.z;\n array[startingIndex] = value.w;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Cartesian4} [result] The object into which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n */\nCartesian4.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Cartesian4();\n }\n result.x = array[startingIndex++];\n result.y = array[startingIndex++];\n result.z = array[startingIndex++];\n result.w = array[startingIndex];\n return result;\n};\n\n/**\n * Flattens an array of Cartesian4s into and array of components.\n *\n * @param {Cartesian4[]} array The array of cartesians to pack.\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements.\n\n * @returns {Number[]} The packed array.\n */\nCartesian4.packArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n var length = array.length;\n var resultLength = length * 4;\n if (!defined(result)) {\n result = new Array(resultLength);\n } else if (!Array.isArray(result) && result.length !== resultLength) {\n throw new DeveloperError(\n \"If result is a typed array, it must have exactly array.length * 4 elements\"\n );\n } else if (result.length !== resultLength) {\n result.length = resultLength;\n }\n\n for (var i = 0; i < length; ++i) {\n Cartesian4.pack(array[i], result, i * 4);\n }\n return result;\n};\n\n/**\n * Unpacks an array of cartesian components into and array of Cartesian4s.\n *\n * @param {Number[]} array The array of components to unpack.\n * @param {Cartesian4[]} [result] The array onto which to store the result.\n * @returns {Cartesian4[]} The unpacked array.\n */\nCartesian4.unpackArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 4);\n if (array.length % 4 !== 0) {\n throw new DeveloperError(\"array length must be a multiple of 4.\");\n }\n //>>includeEnd('debug');\n\n var length = array.length;\n if (!defined(result)) {\n result = new Array(length / 4);\n } else {\n result.length = length / 4;\n }\n\n for (var i = 0; i < length; i += 4) {\n var index = i / 4;\n result[index] = Cartesian4.unpack(array, i, result[index]);\n }\n return result;\n};\n\n/**\n * Creates a Cartesian4 from four consecutive elements in an array.\n * @function\n *\n * @param {Number[]} array The array whose four consecutive elements correspond to the x, y, z, and w components, respectively.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0)\n * var v = [1.0, 2.0, 3.0, 4.0];\n * var p = Cesium.Cartesian4.fromArray(v);\n *\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 2.0, 3.0, 4.0];\n * var p2 = Cesium.Cartesian4.fromArray(v2, 2);\n */\nCartesian4.fromArray = Cartesian4.unpack;\n\n/**\n * Computes the value of the maximum component for the supplied Cartesian.\n *\n * @param {Cartesian4} cartesian The cartesian to use.\n * @returns {Number} The value of the maximum component.\n */\nCartesian4.maximumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.max(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n};\n\n/**\n * Computes the value of the minimum component for the supplied Cartesian.\n *\n * @param {Cartesian4} cartesian The cartesian to use.\n * @returns {Number} The value of the minimum component.\n */\nCartesian4.minimumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.min(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n *\n * @param {Cartesian4} first A cartesian to compare.\n * @param {Cartesian4} second A cartesian to compare.\n * @param {Cartesian4} result The object into which to store the result.\n * @returns {Cartesian4} A cartesian with the minimum components.\n */\nCartesian4.minimumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.min(first.x, second.x);\n result.y = Math.min(first.y, second.y);\n result.z = Math.min(first.z, second.z);\n result.w = Math.min(first.w, second.w);\n\n return result;\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n *\n * @param {Cartesian4} first A cartesian to compare.\n * @param {Cartesian4} second A cartesian to compare.\n * @param {Cartesian4} result The object into which to store the result.\n * @returns {Cartesian4} A cartesian with the maximum components.\n */\nCartesian4.maximumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.max(first.x, second.x);\n result.y = Math.max(first.y, second.y);\n result.z = Math.max(first.z, second.z);\n result.w = Math.max(first.w, second.w);\n\n return result;\n};\n\n/**\n * Computes the provided Cartesian's squared magnitude.\n *\n * @param {Cartesian4} cartesian The Cartesian instance whose squared magnitude is to be computed.\n * @returns {Number} The squared magnitude.\n */\nCartesian4.magnitudeSquared = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return (\n cartesian.x * cartesian.x +\n cartesian.y * cartesian.y +\n cartesian.z * cartesian.z +\n cartesian.w * cartesian.w\n );\n};\n\n/**\n * Computes the Cartesian's magnitude (length).\n *\n * @param {Cartesian4} cartesian The Cartesian instance whose magnitude is to be computed.\n * @returns {Number} The magnitude.\n */\nCartesian4.magnitude = function (cartesian) {\n return Math.sqrt(Cartesian4.magnitudeSquared(cartesian));\n};\n\nvar distanceScratch = new Cartesian4();\n\n/**\n * Computes the 4-space distance between two points.\n *\n * @param {Cartesian4} left The first point to compute the distance from.\n * @param {Cartesian4} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 1.0\n * var d = Cesium.Cartesian4.distance(\n * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\n * new Cesium.Cartesian4(2.0, 0.0, 0.0, 0.0));\n */\nCartesian4.distance = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian4.subtract(left, right, distanceScratch);\n return Cartesian4.magnitude(distanceScratch);\n};\n\n/**\n * Computes the squared distance between two points. Comparing squared distances\n * using this function is more efficient than comparing distances using {@link Cartesian4#distance}.\n *\n * @param {Cartesian4} left The first point to compute the distance from.\n * @param {Cartesian4} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 4.0, not 2.0\n * var d = Cesium.Cartesian4.distance(\n * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\n * new Cesium.Cartesian4(3.0, 0.0, 0.0, 0.0));\n */\nCartesian4.distanceSquared = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian4.subtract(left, right, distanceScratch);\n return Cartesian4.magnitudeSquared(distanceScratch);\n};\n\n/**\n * Computes the normalized form of the supplied Cartesian.\n *\n * @param {Cartesian4} cartesian The Cartesian to be normalized.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.normalize = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var magnitude = Cartesian4.magnitude(cartesian);\n\n result.x = cartesian.x / magnitude;\n result.y = cartesian.y / magnitude;\n result.z = cartesian.z / magnitude;\n result.w = cartesian.w / magnitude;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n isNaN(result.x) ||\n isNaN(result.y) ||\n isNaN(result.z) ||\n isNaN(result.w)\n ) {\n throw new DeveloperError(\"normalized result is not a number\");\n }\n //>>includeEnd('debug');\n\n return result;\n};\n\n/**\n * Computes the dot (scalar) product of two Cartesians.\n *\n * @param {Cartesian4} left The first Cartesian.\n * @param {Cartesian4} right The second Cartesian.\n * @returns {Number} The dot product.\n */\nCartesian4.dot = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n return (\n left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\n );\n};\n\n/**\n * Computes the componentwise product of two Cartesians.\n *\n * @param {Cartesian4} left The first Cartesian.\n * @param {Cartesian4} right The second Cartesian.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.multiplyComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x * right.x;\n result.y = left.y * right.y;\n result.z = left.z * right.z;\n result.w = left.w * right.w;\n return result;\n};\n\n/**\n * Computes the componentwise quotient of two Cartesians.\n *\n * @param {Cartesian4} left The first Cartesian.\n * @param {Cartesian4} right The second Cartesian.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.divideComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x / right.x;\n result.y = left.y / right.y;\n result.z = left.z / right.z;\n result.w = left.w / right.w;\n return result;\n};\n\n/**\n * Computes the componentwise sum of two Cartesians.\n *\n * @param {Cartesian4} left The first Cartesian.\n * @param {Cartesian4} right The second Cartesian.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x + right.x;\n result.y = left.y + right.y;\n result.z = left.z + right.z;\n result.w = left.w + right.w;\n return result;\n};\n\n/**\n * Computes the componentwise difference of two Cartesians.\n *\n * @param {Cartesian4} left The first Cartesian.\n * @param {Cartesian4} right The second Cartesian.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x - right.x;\n result.y = left.y - right.y;\n result.z = left.z - right.z;\n result.w = left.w - right.w;\n return result;\n};\n\n/**\n * Multiplies the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian4} cartesian The Cartesian to be scaled.\n * @param {Number} scalar The scalar to multiply with.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.multiplyByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x * scalar;\n result.y = cartesian.y * scalar;\n result.z = cartesian.z * scalar;\n result.w = cartesian.w * scalar;\n return result;\n};\n\n/**\n * Divides the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian4} cartesian The Cartesian to be divided.\n * @param {Number} scalar The scalar to divide by.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.divideByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x / scalar;\n result.y = cartesian.y / scalar;\n result.z = cartesian.z / scalar;\n result.w = cartesian.w / scalar;\n return result;\n};\n\n/**\n * Negates the provided Cartesian.\n *\n * @param {Cartesian4} cartesian The Cartesian to be negated.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.negate = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = -cartesian.x;\n result.y = -cartesian.y;\n result.z = -cartesian.z;\n result.w = -cartesian.w;\n return result;\n};\n\n/**\n * Computes the absolute value of the provided Cartesian.\n *\n * @param {Cartesian4} cartesian The Cartesian whose absolute value is to be computed.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.abs = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.abs(cartesian.x);\n result.y = Math.abs(cartesian.y);\n result.z = Math.abs(cartesian.z);\n result.w = Math.abs(cartesian.w);\n return result;\n};\n\nvar lerpScratch = new Cartesian4();\n/**\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n *\n * @param {Cartesian4} start The value corresponding to t at 0.0.\n * @param {Cartesian4}end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nCartesian4.lerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n Cartesian4.multiplyByScalar(end, t, lerpScratch);\n result = Cartesian4.multiplyByScalar(start, 1.0 - t, result);\n return Cartesian4.add(lerpScratch, result, result);\n};\n\nvar mostOrthogonalAxisScratch = new Cartesian4();\n/**\n * Returns the axis that is most orthogonal to the provided Cartesian.\n *\n * @param {Cartesian4} cartesian The Cartesian on which to find the most orthogonal axis.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The most orthogonal axis.\n */\nCartesian4.mostOrthogonalAxis = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var f = Cartesian4.normalize(cartesian, mostOrthogonalAxisScratch);\n Cartesian4.abs(f, f);\n\n if (f.x <= f.y) {\n if (f.x <= f.z) {\n if (f.x <= f.w) {\n result = Cartesian4.clone(Cartesian4.UNIT_X, result);\n } else {\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n }\n } else if (f.z <= f.w) {\n result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\n } else {\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n }\n } else if (f.y <= f.z) {\n if (f.y <= f.w) {\n result = Cartesian4.clone(Cartesian4.UNIT_Y, result);\n } else {\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n }\n } else if (f.z <= f.w) {\n result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\n } else {\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n }\n\n return result;\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian4} [left] The first Cartesian.\n * @param {Cartesian4} [right] The second Cartesian.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartesian4.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.x === right.x &&\n left.y === right.y &&\n left.z === right.z &&\n left.w === right.w)\n );\n};\n\n/**\n * @private\n */\nCartesian4.equalsArray = function (cartesian, array, offset) {\n return (\n cartesian.x === array[offset] &&\n cartesian.y === array[offset + 1] &&\n cartesian.z === array[offset + 2] &&\n cartesian.w === array[offset + 3]\n );\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian4} [left] The first Cartesian.\n * @param {Cartesian4} [right] The second Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian4.equalsEpsilon = function (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n CesiumMath.equalsEpsilon(\n left.x,\n right.x,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.y,\n right.y,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.z,\n right.z,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.w,\n right.w,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.ZERO = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (1.0, 0.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_X = Object.freeze(new Cartesian4(1.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 1.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_Y = Object.freeze(new Cartesian4(0.0, 1.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 1.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_Z = Object.freeze(new Cartesian4(0.0, 0.0, 1.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 1.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_W = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 1.0));\n\n/**\n * Duplicates this Cartesian4 instance.\n *\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n */\nCartesian4.prototype.clone = function (result) {\n return Cartesian4.clone(this, result);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian4} [right] The right hand side Cartesian.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nCartesian4.prototype.equals = function (right) {\n return Cartesian4.equals(this, right);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian4} [right] The right hand side Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian4.prototype.equalsEpsilon = function (\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return Cartesian4.equalsEpsilon(\n this,\n right,\n relativeEpsilon,\n absoluteEpsilon\n );\n};\n\n/**\n * Creates a string representing this Cartesian in the format '(x, y, z, w)'.\n *\n * @returns {String} A string representing the provided Cartesian in the format '(x, y, z, w)'.\n */\nCartesian4.prototype.toString = function () {\n return \"(\" + this.x + \", \" + this.y + \", \" + this.z + \", \" + this.w + \")\";\n};\n\nvar scratchFloatArray = new Float32Array(1);\nvar SHIFT_LEFT_8 = 256.0;\nvar SHIFT_LEFT_16 = 65536.0;\nvar SHIFT_LEFT_24 = 16777216.0;\n\nvar SHIFT_RIGHT_8 = 1.0 / SHIFT_LEFT_8;\nvar SHIFT_RIGHT_16 = 1.0 / SHIFT_LEFT_16;\nvar SHIFT_RIGHT_24 = 1.0 / SHIFT_LEFT_24;\n\nvar BIAS = 38.0;\n\n/**\n * Packs an arbitrary floating point value to 4 values representable using uint8.\n *\n * @param {Number} value A floating point number\n * @param {Cartesian4} [result] The Cartesian4 that will contain the packed float.\n * @returns {Cartesian4} A Cartesian4 representing the float packed to values in x, y, z, and w.\n */\nCartesian4.packFloat = function (value, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian4();\n }\n\n // Force the value to 32 bit precision\n scratchFloatArray[0] = value;\n value = scratchFloatArray[0];\n\n if (value === 0.0) {\n return Cartesian4.clone(Cartesian4.ZERO, result);\n }\n\n var sign = value < 0.0 ? 1.0 : 0.0;\n var exponent;\n\n if (!isFinite(value)) {\n value = 0.1;\n exponent = BIAS;\n } else {\n value = Math.abs(value);\n exponent = Math.floor(CesiumMath.logBase(value, 10)) + 1.0;\n value = value / Math.pow(10.0, exponent);\n }\n\n var temp = value * SHIFT_LEFT_8;\n result.x = Math.floor(temp);\n temp = (temp - result.x) * SHIFT_LEFT_8;\n result.y = Math.floor(temp);\n temp = (temp - result.y) * SHIFT_LEFT_8;\n result.z = Math.floor(temp);\n result.w = (exponent + BIAS) * 2.0 + sign;\n\n return result;\n};\n\n/**\n * Unpacks a float packed using Cartesian4.packFloat.\n *\n * @param {Cartesian4} packedFloat A Cartesian4 containing a float packed to 4 values representable using uint8.\n * @returns {Number} The unpacked float.\n * @private\n */\nCartesian4.unpackFloat = function (packedFloat) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"packedFloat\", packedFloat);\n //>>includeEnd('debug');\n\n var temp = packedFloat.w / 2.0;\n var exponent = Math.floor(temp);\n var sign = (temp - exponent) * 2.0;\n exponent = exponent - BIAS;\n\n sign = sign * 2.0 - 1.0;\n sign = -sign;\n\n if (exponent >= BIAS) {\n return sign < 0.0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY;\n }\n\n var unpacked = sign * packedFloat.x * SHIFT_RIGHT_8;\n unpacked += sign * packedFloat.y * SHIFT_RIGHT_16;\n unpacked += sign * packedFloat.z * SHIFT_RIGHT_24;\n\n return unpacked * Math.pow(10.0, exponent);\n};\nexport default Cartesian4;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * A 4x4 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix4\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {Number} [column2Row0=0.0] The value for column 2, row 0.\n * @param {Number} [column3Row0=0.0] The value for column 3, row 0.\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\n * @param {Number} [column2Row1=0.0] The value for column 2, row 1.\n * @param {Number} [column3Row1=0.0] The value for column 3, row 1.\n * @param {Number} [column0Row2=0.0] The value for column 0, row 2.\n * @param {Number} [column1Row2=0.0] The value for column 1, row 2.\n * @param {Number} [column2Row2=0.0] The value for column 2, row 2.\n * @param {Number} [column3Row2=0.0] The value for column 3, row 2.\n * @param {Number} [column0Row3=0.0] The value for column 0, row 3.\n * @param {Number} [column1Row3=0.0] The value for column 1, row 3.\n * @param {Number} [column2Row3=0.0] The value for column 2, row 3.\n * @param {Number} [column3Row3=0.0] The value for column 3, row 3.\n *\n * @see Matrix4.fromColumnMajorArray\n * @see Matrix4.fromRowMajorArray\n * @see Matrix4.fromRotationTranslation\n * @see Matrix4.fromTranslationRotationScale\n * @see Matrix4.fromTranslationQuaternionRotationScale\n * @see Matrix4.fromTranslation\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.fromCamera\n * @see Matrix4.computePerspectiveFieldOfView\n * @see Matrix4.computeOrthographicOffCenter\n * @see Matrix4.computePerspectiveOffCenter\n * @see Matrix4.computeInfinitePerspectiveOffCenter\n * @see Matrix4.computeViewportTransformation\n * @see Matrix4.computeView\n * @see Matrix2\n * @see Matrix3\n * @see Packable\n */\nfunction Matrix4(\n column0Row0,\n column1Row0,\n column2Row0,\n column3Row0,\n column0Row1,\n column1Row1,\n column2Row1,\n column3Row1,\n column0Row2,\n column1Row2,\n column2Row2,\n column3Row2,\n column0Row3,\n column1Row3,\n column2Row3,\n column3Row3\n) {\n this[0] = defaultValue(column0Row0, 0.0);\n this[1] = defaultValue(column0Row1, 0.0);\n this[2] = defaultValue(column0Row2, 0.0);\n this[3] = defaultValue(column0Row3, 0.0);\n this[4] = defaultValue(column1Row0, 0.0);\n this[5] = defaultValue(column1Row1, 0.0);\n this[6] = defaultValue(column1Row2, 0.0);\n this[7] = defaultValue(column1Row3, 0.0);\n this[8] = defaultValue(column2Row0, 0.0);\n this[9] = defaultValue(column2Row1, 0.0);\n this[10] = defaultValue(column2Row2, 0.0);\n this[11] = defaultValue(column2Row3, 0.0);\n this[12] = defaultValue(column3Row0, 0.0);\n this[13] = defaultValue(column3Row1, 0.0);\n this[14] = defaultValue(column3Row2, 0.0);\n this[15] = defaultValue(column3Row3, 0.0);\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nMatrix4.packedLength = 16;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix4} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nMatrix4.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value[0];\n array[startingIndex++] = value[1];\n array[startingIndex++] = value[2];\n array[startingIndex++] = value[3];\n array[startingIndex++] = value[4];\n array[startingIndex++] = value[5];\n array[startingIndex++] = value[6];\n array[startingIndex++] = value[7];\n array[startingIndex++] = value[8];\n array[startingIndex++] = value[9];\n array[startingIndex++] = value[10];\n array[startingIndex++] = value[11];\n array[startingIndex++] = value[12];\n array[startingIndex++] = value[13];\n array[startingIndex++] = value[14];\n array[startingIndex] = value[15];\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix4} [result] The object into which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n */\nMatrix4.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Matrix4();\n }\n\n result[0] = array[startingIndex++];\n result[1] = array[startingIndex++];\n result[2] = array[startingIndex++];\n result[3] = array[startingIndex++];\n result[4] = array[startingIndex++];\n result[5] = array[startingIndex++];\n result[6] = array[startingIndex++];\n result[7] = array[startingIndex++];\n result[8] = array[startingIndex++];\n result[9] = array[startingIndex++];\n result[10] = array[startingIndex++];\n result[11] = array[startingIndex++];\n result[12] = array[startingIndex++];\n result[13] = array[startingIndex++];\n result[14] = array[startingIndex++];\n result[15] = array[startingIndex];\n return result;\n};\n\n/**\n * Duplicates a Matrix4 instance.\n *\n * @param {Matrix4} matrix The matrix to duplicate.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix4.clone = function (matrix, result) {\n if (!defined(matrix)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Matrix4(\n matrix[0],\n matrix[4],\n matrix[8],\n matrix[12],\n matrix[1],\n matrix[5],\n matrix[9],\n matrix[13],\n matrix[2],\n matrix[6],\n matrix[10],\n matrix[14],\n matrix[3],\n matrix[7],\n matrix[11],\n matrix[15]\n );\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = matrix[15];\n return result;\n};\n\n/**\n * Creates a Matrix4 from 16 consecutive elements in an array.\n * @function\n *\n * @param {Number[]} array The array whose 16 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Create the Matrix4:\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n *\n * var v = [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\n * var m = Cesium.Matrix4.fromArray(v);\n *\n * // Create same Matrix4 with using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\n * var m2 = Cesium.Matrix4.fromArray(v2, 2);\n */\nMatrix4.fromArray = Matrix4.unpack;\n\n/**\n * Computes a Matrix4 instance from a column-major order array.\n *\n * @param {Number[]} values The column-major order array.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromColumnMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n return Matrix4.clone(values, result);\n};\n\n/**\n * Computes a Matrix4 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {Number[]} values The row-major order array.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromRowMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix4(\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n values[7],\n values[8],\n values[9],\n values[10],\n values[11],\n values[12],\n values[13],\n values[14],\n values[15]\n );\n }\n result[0] = values[0];\n result[1] = values[4];\n result[2] = values[8];\n result[3] = values[12];\n result[4] = values[1];\n result[5] = values[5];\n result[6] = values[9];\n result[7] = values[13];\n result[8] = values[2];\n result[9] = values[6];\n result[10] = values[10];\n result[11] = values[14];\n result[12] = values[3];\n result[13] = values[7];\n result[14] = values[11];\n result[15] = values[15];\n return result;\n};\n\n/**\n * Computes a Matrix4 instance from a Matrix3 representing the rotation\n * and a Cartesian3 representing the translation.\n *\n * @param {Matrix3} rotation The upper left portion of the matrix representing the rotation.\n * @param {Cartesian3} [translation=Cartesian3.ZERO] The upper right portion of the matrix representing the translation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromRotationTranslation = function (rotation, translation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rotation\", rotation);\n //>>includeEnd('debug');\n\n translation = defaultValue(translation, Cartesian3.ZERO);\n\n if (!defined(result)) {\n return new Matrix4(\n rotation[0],\n rotation[3],\n rotation[6],\n translation.x,\n rotation[1],\n rotation[4],\n rotation[7],\n translation.y,\n rotation[2],\n rotation[5],\n rotation[8],\n translation.z,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n\n result[0] = rotation[0];\n result[1] = rotation[1];\n result[2] = rotation[2];\n result[3] = 0.0;\n result[4] = rotation[3];\n result[5] = rotation[4];\n result[6] = rotation[5];\n result[7] = 0.0;\n result[8] = rotation[6];\n result[9] = rotation[7];\n result[10] = rotation[8];\n result[11] = 0.0;\n result[12] = translation.x;\n result[13] = translation.y;\n result[14] = translation.z;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance from a translation, rotation, and scale (TRS)\n * representation with the rotation represented as a quaternion.\n *\n * @param {Cartesian3} translation The translation transformation.\n * @param {Quaternion} rotation The rotation transformation.\n * @param {Cartesian3} scale The non-uniform scale transformation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * var result = Cesium.Matrix4.fromTranslationQuaternionRotationScale(\n * new Cesium.Cartesian3(1.0, 2.0, 3.0), // translation\n * Cesium.Quaternion.IDENTITY, // rotation\n * new Cesium.Cartesian3(7.0, 8.0, 9.0), // scale\n * result);\n */\nMatrix4.fromTranslationQuaternionRotationScale = function (\n translation,\n rotation,\n scale,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"translation\", translation);\n Check.typeOf.object(\"rotation\", rotation);\n Check.typeOf.object(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Matrix4();\n }\n\n var scaleX = scale.x;\n var scaleY = scale.y;\n var scaleZ = scale.z;\n\n var x2 = rotation.x * rotation.x;\n var xy = rotation.x * rotation.y;\n var xz = rotation.x * rotation.z;\n var xw = rotation.x * rotation.w;\n var y2 = rotation.y * rotation.y;\n var yz = rotation.y * rotation.z;\n var yw = rotation.y * rotation.w;\n var z2 = rotation.z * rotation.z;\n var zw = rotation.z * rotation.w;\n var w2 = rotation.w * rotation.w;\n\n var m00 = x2 - y2 - z2 + w2;\n var m01 = 2.0 * (xy - zw);\n var m02 = 2.0 * (xz + yw);\n\n var m10 = 2.0 * (xy + zw);\n var m11 = -x2 + y2 - z2 + w2;\n var m12 = 2.0 * (yz - xw);\n\n var m20 = 2.0 * (xz - yw);\n var m21 = 2.0 * (yz + xw);\n var m22 = -x2 - y2 + z2 + w2;\n\n result[0] = m00 * scaleX;\n result[1] = m10 * scaleX;\n result[2] = m20 * scaleX;\n result[3] = 0.0;\n result[4] = m01 * scaleY;\n result[5] = m11 * scaleY;\n result[6] = m21 * scaleY;\n result[7] = 0.0;\n result[8] = m02 * scaleZ;\n result[9] = m12 * scaleZ;\n result[10] = m22 * scaleZ;\n result[11] = 0.0;\n result[12] = translation.x;\n result[13] = translation.y;\n result[14] = translation.z;\n result[15] = 1.0;\n\n return result;\n};\n\n/**\n * Creates a Matrix4 instance from a {@link TranslationRotationScale} instance.\n *\n * @param {TranslationRotationScale} translationRotationScale The instance.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromTranslationRotationScale = function (\n translationRotationScale,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"translationRotationScale\", translationRotationScale);\n //>>includeEnd('debug');\n\n return Matrix4.fromTranslationQuaternionRotationScale(\n translationRotationScale.translation,\n translationRotationScale.rotation,\n translationRotationScale.scale,\n result\n );\n};\n\n/**\n * Creates a Matrix4 instance from a Cartesian3 representing the translation.\n *\n * @param {Cartesian3} translation The upper right portion of the matrix representing the translation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @see Matrix4.multiplyByTranslation\n */\nMatrix4.fromTranslation = function (translation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"translation\", translation);\n //>>includeEnd('debug');\n\n return Matrix4.fromRotationTranslation(Matrix3.IDENTITY, translation, result);\n};\n\n/**\n * Computes a Matrix4 instance representing a non-uniform scale.\n *\n * @param {Cartesian3} scale The x, y, and z scale factors.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [7.0, 0.0, 0.0, 0.0]\n * // [0.0, 8.0, 0.0, 0.0]\n * // [0.0, 0.0, 9.0, 0.0]\n * // [0.0, 0.0, 0.0, 1.0]\n * var m = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix4.fromScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix4(\n scale.x,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n scale.y,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n scale.z,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n\n result[0] = scale.x;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = scale.y;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = scale.z;\n result[11] = 0.0;\n result[12] = 0.0;\n result[13] = 0.0;\n result[14] = 0.0;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance representing a uniform scale.\n *\n * @param {Number} scale The uniform scale factor.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [2.0, 0.0, 0.0, 0.0]\n * // [0.0, 2.0, 0.0, 0.0]\n * // [0.0, 0.0, 2.0, 0.0]\n * // [0.0, 0.0, 0.0, 1.0]\n * var m = Cesium.Matrix4.fromUniformScale(2.0);\n */\nMatrix4.fromUniformScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix4(\n scale,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n scale,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n scale,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n\n result[0] = scale;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = scale;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = scale;\n result[11] = 0.0;\n result[12] = 0.0;\n result[13] = 0.0;\n result[14] = 0.0;\n result[15] = 1.0;\n return result;\n};\n\nvar fromCameraF = new Cartesian3();\nvar fromCameraR = new Cartesian3();\nvar fromCameraU = new Cartesian3();\n\n/**\n * Computes a Matrix4 instance from a Camera.\n *\n * @param {Camera} camera The camera to use.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromCamera = function (camera, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"camera\", camera);\n //>>includeEnd('debug');\n\n var position = camera.position;\n var direction = camera.direction;\n var up = camera.up;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"camera.position\", position);\n Check.typeOf.object(\"camera.direction\", direction);\n Check.typeOf.object(\"camera.up\", up);\n //>>includeEnd('debug');\n\n Cartesian3.normalize(direction, fromCameraF);\n Cartesian3.normalize(\n Cartesian3.cross(fromCameraF, up, fromCameraR),\n fromCameraR\n );\n Cartesian3.normalize(\n Cartesian3.cross(fromCameraR, fromCameraF, fromCameraU),\n fromCameraU\n );\n\n var sX = fromCameraR.x;\n var sY = fromCameraR.y;\n var sZ = fromCameraR.z;\n var fX = fromCameraF.x;\n var fY = fromCameraF.y;\n var fZ = fromCameraF.z;\n var uX = fromCameraU.x;\n var uY = fromCameraU.y;\n var uZ = fromCameraU.z;\n var positionX = position.x;\n var positionY = position.y;\n var positionZ = position.z;\n var t0 = sX * -positionX + sY * -positionY + sZ * -positionZ;\n var t1 = uX * -positionX + uY * -positionY + uZ * -positionZ;\n var t2 = fX * positionX + fY * positionY + fZ * positionZ;\n\n // The code below this comment is an optimized\n // version of the commented lines.\n // Rather that create two matrices and then multiply,\n // we just bake in the multiplcation as part of creation.\n // var rotation = new Matrix4(\n // sX, sY, sZ, 0.0,\n // uX, uY, uZ, 0.0,\n // -fX, -fY, -fZ, 0.0,\n // 0.0, 0.0, 0.0, 1.0);\n // var translation = new Matrix4(\n // 1.0, 0.0, 0.0, -position.x,\n // 0.0, 1.0, 0.0, -position.y,\n // 0.0, 0.0, 1.0, -position.z,\n // 0.0, 0.0, 0.0, 1.0);\n // return rotation.multiply(translation);\n if (!defined(result)) {\n return new Matrix4(\n sX,\n sY,\n sZ,\n t0,\n uX,\n uY,\n uZ,\n t1,\n -fX,\n -fY,\n -fZ,\n t2,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n result[0] = sX;\n result[1] = uX;\n result[2] = -fX;\n result[3] = 0.0;\n result[4] = sY;\n result[5] = uY;\n result[6] = -fY;\n result[7] = 0.0;\n result[8] = sZ;\n result[9] = uZ;\n result[10] = -fZ;\n result[11] = 0.0;\n result[12] = t0;\n result[13] = t1;\n result[14] = t2;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance representing a perspective transformation matrix.\n *\n * @param {Number} fovY The field of view along the Y axis in radians.\n * @param {Number} aspectRatio The aspect ratio.\n * @param {Number} near The distance to the near plane in meters.\n * @param {Number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} fovY must be in (0, PI].\n * @exception {DeveloperError} aspectRatio must be greater than zero.\n * @exception {DeveloperError} near must be greater than zero.\n * @exception {DeveloperError} far must be greater than zero.\n */\nMatrix4.computePerspectiveFieldOfView = function (\n fovY,\n aspectRatio,\n near,\n far,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"fovY\", fovY, 0.0);\n Check.typeOf.number.lessThan(\"fovY\", fovY, Math.PI);\n Check.typeOf.number.greaterThan(\"near\", near, 0.0);\n Check.typeOf.number.greaterThan(\"far\", far, 0.0);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var bottom = Math.tan(fovY * 0.5);\n\n var column1Row1 = 1.0 / bottom;\n var column0Row0 = column1Row1 / aspectRatio;\n var column2Row2 = (far + near) / (near - far);\n var column3Row2 = (2.0 * far * near) / (near - far);\n\n result[0] = column0Row0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = column1Row1;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = column2Row2;\n result[11] = -1.0;\n result[12] = 0.0;\n result[13] = 0.0;\n result[14] = column3Row2;\n result[15] = 0.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an orthographic transformation matrix.\n *\n * @param {Number} left The number of meters to the left of the camera that will be in view.\n * @param {Number} right The number of meters to the right of the camera that will be in view.\n * @param {Number} bottom The number of meters below of the camera that will be in view.\n * @param {Number} top The number of meters above of the camera that will be in view.\n * @param {Number} near The distance to the near plane in meters.\n * @param {Number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeOrthographicOffCenter = function (\n left,\n right,\n bottom,\n top,\n near,\n far,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"left\", left);\n Check.typeOf.number(\"right\", right);\n Check.typeOf.number(\"bottom\", bottom);\n Check.typeOf.number(\"top\", top);\n Check.typeOf.number(\"near\", near);\n Check.typeOf.number(\"far\", far);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var a = 1.0 / (right - left);\n var b = 1.0 / (top - bottom);\n var c = 1.0 / (far - near);\n\n var tx = -(right + left) * a;\n var ty = -(top + bottom) * b;\n var tz = -(far + near) * c;\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n\n result[0] = a;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = b;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = c;\n result[11] = 0.0;\n result[12] = tx;\n result[13] = ty;\n result[14] = tz;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an off center perspective transformation.\n *\n * @param {Number} left The number of meters to the left of the camera that will be in view.\n * @param {Number} right The number of meters to the right of the camera that will be in view.\n * @param {Number} bottom The number of meters below of the camera that will be in view.\n * @param {Number} top The number of meters above of the camera that will be in view.\n * @param {Number} near The distance to the near plane in meters.\n * @param {Number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computePerspectiveOffCenter = function (\n left,\n right,\n bottom,\n top,\n near,\n far,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"left\", left);\n Check.typeOf.number(\"right\", right);\n Check.typeOf.number(\"bottom\", bottom);\n Check.typeOf.number(\"top\", top);\n Check.typeOf.number(\"near\", near);\n Check.typeOf.number(\"far\", far);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 = (2.0 * near) / (right - left);\n var column1Row1 = (2.0 * near) / (top - bottom);\n var column2Row0 = (right + left) / (right - left);\n var column2Row1 = (top + bottom) / (top - bottom);\n var column2Row2 = -(far + near) / (far - near);\n var column2Row3 = -1.0;\n var column3Row2 = (-2.0 * far * near) / (far - near);\n\n result[0] = column0Row0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = column1Row1;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = 0.0;\n result[13] = 0.0;\n result[14] = column3Row2;\n result[15] = 0.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an infinite off center perspective transformation.\n *\n * @param {Number} left The number of meters to the left of the camera that will be in view.\n * @param {Number} right The number of meters to the right of the camera that will be in view.\n * @param {Number} bottom The number of meters below of the camera that will be in view.\n * @param {Number} top The number of meters above of the camera that will be in view.\n * @param {Number} near The distance to the near plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeInfinitePerspectiveOffCenter = function (\n left,\n right,\n bottom,\n top,\n near,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"left\", left);\n Check.typeOf.number(\"right\", right);\n Check.typeOf.number(\"bottom\", bottom);\n Check.typeOf.number(\"top\", top);\n Check.typeOf.number(\"near\", near);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 = (2.0 * near) / (right - left);\n var column1Row1 = (2.0 * near) / (top - bottom);\n var column2Row0 = (right + left) / (right - left);\n var column2Row1 = (top + bottom) / (top - bottom);\n var column2Row2 = -1.0;\n var column2Row3 = -1.0;\n var column3Row2 = -2.0 * near;\n\n result[0] = column0Row0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = column1Row1;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = 0.0;\n result[13] = 0.0;\n result[14] = column3Row2;\n result[15] = 0.0;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates.\n *\n * @param {Object} [viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] The viewport's corners as shown in Example 1.\n * @param {Number} [nearDepthRange=0.0] The near plane distance in window coordinates.\n * @param {Number} [farDepthRange=1.0] The far plane distance in window coordinates.\n * @param {Matrix4} [result] The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Create viewport transformation using an explicit viewport and depth range.\n * var m = Cesium.Matrix4.computeViewportTransformation({\n * x : 0.0,\n * y : 0.0,\n * width : 1024.0,\n * height : 768.0\n * }, 0.0, 1.0, new Cesium.Matrix4());\n */\nMatrix4.computeViewportTransformation = function (\n viewport,\n nearDepthRange,\n farDepthRange,\n result\n) {\n if (!defined(result)) {\n result = new Matrix4();\n }\n\n viewport = defaultValue(viewport, defaultValue.EMPTY_OBJECT);\n var x = defaultValue(viewport.x, 0.0);\n var y = defaultValue(viewport.y, 0.0);\n var width = defaultValue(viewport.width, 0.0);\n var height = defaultValue(viewport.height, 0.0);\n nearDepthRange = defaultValue(nearDepthRange, 0.0);\n farDepthRange = defaultValue(farDepthRange, 1.0);\n\n var halfWidth = width * 0.5;\n var halfHeight = height * 0.5;\n var halfDepth = (farDepthRange - nearDepthRange) * 0.5;\n\n var column0Row0 = halfWidth;\n var column1Row1 = halfHeight;\n var column2Row2 = halfDepth;\n var column3Row0 = x + halfWidth;\n var column3Row1 = y + halfHeight;\n var column3Row2 = nearDepthRange + halfDepth;\n var column3Row3 = 1.0;\n\n result[0] = column0Row0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = column1Row1;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = column2Row2;\n result[11] = 0.0;\n result[12] = column3Row0;\n result[13] = column3Row1;\n result[14] = column3Row2;\n result[15] = column3Row3;\n return result;\n};\n\n/**\n * Computes a Matrix4 instance that transforms from world space to view space.\n *\n * @param {Cartesian3} position The position of the camera.\n * @param {Cartesian3} direction The forward direction.\n * @param {Cartesian3} up The up direction.\n * @param {Cartesian3} right The right direction.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeView = function (position, direction, up, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"position\", position);\n Check.typeOf.object(\"direction\", direction);\n Check.typeOf.object(\"up\", up);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = right.x;\n result[1] = up.x;\n result[2] = -direction.x;\n result[3] = 0.0;\n result[4] = right.y;\n result[5] = up.y;\n result[6] = -direction.y;\n result[7] = 0.0;\n result[8] = right.z;\n result[9] = up.z;\n result[10] = -direction.z;\n result[11] = 0.0;\n result[12] = -Cartesian3.dot(right, position);\n result[13] = -Cartesian3.dot(up, position);\n result[14] = Cartesian3.dot(direction, position);\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes an Array from the provided Matrix4 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix4} matrix The matrix to use..\n * @param {Number[]} [result] The Array onto which to store the result.\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\n *\n * @example\n * //create an array from an instance of Matrix4\n * // m = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n * var a = Cesium.Matrix4.toArray(m);\n *\n * // m remains the same\n * //creates a = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0]\n */\nMatrix4.toArray = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return [\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[4],\n matrix[5],\n matrix[6],\n matrix[7],\n matrix[8],\n matrix[9],\n matrix[10],\n matrix[11],\n matrix[12],\n matrix[13],\n matrix[14],\n matrix[15],\n ];\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = matrix[15];\n return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {Number} row The zero-based index of the row.\n * @param {Number} column The zero-based index of the column.\n * @returns {Number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0, 1, 2, or 3.\n * @exception {DeveloperError} column must be 0, 1, 2, or 3.\n *\n * @example\n * var myMatrix = new Cesium.Matrix4();\n * var column1Row0Index = Cesium.Matrix4.getElementIndex(1, 0);\n * var column1Row0 = myMatrix[column1Row0Index];\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix4.getElementIndex = function (column, row) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 3);\n\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 3);\n //>>includeEnd('debug');\n\n return column * 4 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to retrieve.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //returns a Cartesian4 instance with values from the specified column\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * //Example 1: Creates an instance of Cartesian\n * var a = Cesium.Matrix4.getColumn(m, 2, new Cesium.Cartesian4());\n *\n * @example\n * //Example 2: Sets values for Cartesian instance\n * var a = new Cesium.Cartesian4();\n * Cesium.Matrix4.getColumn(m, 2, a);\n *\n * // a.x = 12.0; a.y = 16.0; a.z = 20.0; a.w = 24.0;\n */\nMatrix4.getColumn = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var startIndex = index * 4;\n var x = matrix[startIndex];\n var y = matrix[startIndex + 1];\n var z = matrix[startIndex + 2];\n var w = matrix[startIndex + 3];\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to set.\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //creates a new Matrix4 instance with new column values from the Cartesian4 instance\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * var a = Cesium.Matrix4.setColumn(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 11.0, 99.0, 13.0]\n * // [14.0, 15.0, 98.0, 17.0]\n * // [18.0, 19.0, 97.0, 21.0]\n * // [22.0, 23.0, 96.0, 25.0]\n */\nMatrix4.setColumn = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix4.clone(matrix, result);\n var startIndex = index * 4;\n result[startIndex] = cartesian.x;\n result[startIndex + 1] = cartesian.y;\n result[startIndex + 2] = cartesian.z;\n result[startIndex + 3] = cartesian.w;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the translation in the rightmost column of the provided\n * matrix with the provided translation. This assumes the matrix is an affine transformation\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} translation The translation that replaces the translation of the provided matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.setTranslation = function (matrix, translation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"translation\", translation);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n\n result[12] = translation.x;\n result[13] = translation.y;\n result[14] = translation.z;\n result[15] = matrix[15];\n\n return result;\n};\n\nvar scaleScratch = new Cartesian3();\n/**\n * Computes a new matrix that replaces the scale with the provided scale. This assumes the matrix is an affine transformation\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.setScale = function (matrix, scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"scale\", scale);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var existingScale = Matrix4.getScale(matrix, scaleScratch);\n var newScale = Cartesian3.divideComponents(\n scale,\n existingScale,\n scaleScratch\n );\n return Matrix4.multiplyByScale(matrix, newScale, result);\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to retrieve.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //returns a Cartesian4 instance with values from the specified column\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * //Example 1: Returns an instance of Cartesian\n * var a = Cesium.Matrix4.getRow(m, 2, new Cesium.Cartesian4());\n *\n * @example\n * //Example 2: Sets values for a Cartesian instance\n * var a = new Cesium.Cartesian4();\n * Cesium.Matrix4.getRow(m, 2, a);\n *\n * // a.x = 18.0; a.y = 19.0; a.z = 20.0; a.w = 21.0;\n */\nMatrix4.getRow = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = matrix[index];\n var y = matrix[index + 4];\n var z = matrix[index + 8];\n var w = matrix[index + 12];\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to set.\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //create a new Matrix4 instance with new row values from the Cartesian4 instance\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * var a = Cesium.Matrix4.setRow(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [99.0, 98.0, 97.0, 96.0]\n * // [22.0, 23.0, 24.0, 25.0]\n */\nMatrix4.setRow = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix4.clone(matrix, result);\n result[index] = cartesian.x;\n result[index + 4] = cartesian.y;\n result[index + 8] = cartesian.z;\n result[index + 12] = cartesian.w;\n return result;\n};\n\nvar scratchColumn = new Cartesian3();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter\n */\nMatrix4.getScale = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn)\n );\n result.y = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[4], matrix[5], matrix[6], scratchColumn)\n );\n result.z = Cartesian3.magnitude(\n Cartesian3.fromElements(matrix[8], matrix[9], matrix[10], scratchColumn)\n );\n return result;\n};\n\nvar scratchScale = new Cartesian3();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors in the upper-left\n * 3x3 matrix.\n *\n * @param {Matrix4} matrix The matrix.\n * @returns {Number} The maximum scale.\n */\nMatrix4.getMaximumScale = function (matrix) {\n Matrix4.getScale(matrix, scratchScale);\n return Cartesian3.maximumComponent(scratchScale);\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.multiply = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var left0 = left[0];\n var left1 = left[1];\n var left2 = left[2];\n var left3 = left[3];\n var left4 = left[4];\n var left5 = left[5];\n var left6 = left[6];\n var left7 = left[7];\n var left8 = left[8];\n var left9 = left[9];\n var left10 = left[10];\n var left11 = left[11];\n var left12 = left[12];\n var left13 = left[13];\n var left14 = left[14];\n var left15 = left[15];\n\n var right0 = right[0];\n var right1 = right[1];\n var right2 = right[2];\n var right3 = right[3];\n var right4 = right[4];\n var right5 = right[5];\n var right6 = right[6];\n var right7 = right[7];\n var right8 = right[8];\n var right9 = right[9];\n var right10 = right[10];\n var right11 = right[11];\n var right12 = right[12];\n var right13 = right[13];\n var right14 = right[14];\n var right15 = right[15];\n\n var column0Row0 =\n left0 * right0 + left4 * right1 + left8 * right2 + left12 * right3;\n var column0Row1 =\n left1 * right0 + left5 * right1 + left9 * right2 + left13 * right3;\n var column0Row2 =\n left2 * right0 + left6 * right1 + left10 * right2 + left14 * right3;\n var column0Row3 =\n left3 * right0 + left7 * right1 + left11 * right2 + left15 * right3;\n\n var column1Row0 =\n left0 * right4 + left4 * right5 + left8 * right6 + left12 * right7;\n var column1Row1 =\n left1 * right4 + left5 * right5 + left9 * right6 + left13 * right7;\n var column1Row2 =\n left2 * right4 + left6 * right5 + left10 * right6 + left14 * right7;\n var column1Row3 =\n left3 * right4 + left7 * right5 + left11 * right6 + left15 * right7;\n\n var column2Row0 =\n left0 * right8 + left4 * right9 + left8 * right10 + left12 * right11;\n var column2Row1 =\n left1 * right8 + left5 * right9 + left9 * right10 + left13 * right11;\n var column2Row2 =\n left2 * right8 + left6 * right9 + left10 * right10 + left14 * right11;\n var column2Row3 =\n left3 * right8 + left7 * right9 + left11 * right10 + left15 * right11;\n\n var column3Row0 =\n left0 * right12 + left4 * right13 + left8 * right14 + left12 * right15;\n var column3Row1 =\n left1 * right12 + left5 * right13 + left9 * right14 + left13 * right15;\n var column3Row2 =\n left2 * right12 + left6 * right13 + left10 * right14 + left14 * right15;\n var column3Row3 =\n left3 * right12 + left7 * right13 + left11 * right14 + left15 * right15;\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = column0Row3;\n result[4] = column1Row0;\n result[5] = column1Row1;\n result[6] = column1Row2;\n result[7] = column1Row3;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = column2Row3;\n result[12] = column3Row0;\n result[13] = column3Row1;\n result[14] = column3Row2;\n result[15] = column3Row3;\n return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] + right[0];\n result[1] = left[1] + right[1];\n result[2] = left[2] + right[2];\n result[3] = left[3] + right[3];\n result[4] = left[4] + right[4];\n result[5] = left[5] + right[5];\n result[6] = left[6] + right[6];\n result[7] = left[7] + right[7];\n result[8] = left[8] + right[8];\n result[9] = left[9] + right[9];\n result[10] = left[10] + right[10];\n result[11] = left[11] + right[11];\n result[12] = left[12] + right[12];\n result[13] = left[13] + right[13];\n result[14] = left[14] + right[14];\n result[15] = left[15] + right[15];\n return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] - right[0];\n result[1] = left[1] - right[1];\n result[2] = left[2] - right[2];\n result[3] = left[3] - right[3];\n result[4] = left[4] - right[4];\n result[5] = left[5] - right[5];\n result[6] = left[6] - right[6];\n result[7] = left[7] - right[7];\n result[8] = left[8] - right[8];\n result[9] = left[9] - right[9];\n result[10] = left[10] - right[10];\n result[11] = left[11] - right[11];\n result[12] = left[12] - right[12];\n result[13] = left[13] - right[13];\n result[14] = left[14] - right[14];\n result[15] = left[15] - right[15];\n return result;\n};\n\n/**\n * Computes the product of two matrices assuming the matrices are\n * affine transformation matrices, where the upper left 3x3 elements\n * are a rotation matrix, and the upper three elements in the fourth\n * column are the translation. The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * This method is faster than computing the product for general 4x4\n * matrices using {@link Matrix4.multiply}.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * var m1 = new Cesium.Matrix4(1.0, 6.0, 7.0, 0.0, 2.0, 5.0, 8.0, 0.0, 3.0, 4.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0);\n * var m2 = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(1.0, 1.0, 1.0));\n * var m3 = Cesium.Matrix4.multiplyTransformation(m1, m2, new Cesium.Matrix4());\n */\nMatrix4.multiplyTransformation = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var left0 = left[0];\n var left1 = left[1];\n var left2 = left[2];\n var left4 = left[4];\n var left5 = left[5];\n var left6 = left[6];\n var left8 = left[8];\n var left9 = left[9];\n var left10 = left[10];\n var left12 = left[12];\n var left13 = left[13];\n var left14 = left[14];\n\n var right0 = right[0];\n var right1 = right[1];\n var right2 = right[2];\n var right4 = right[4];\n var right5 = right[5];\n var right6 = right[6];\n var right8 = right[8];\n var right9 = right[9];\n var right10 = right[10];\n var right12 = right[12];\n var right13 = right[13];\n var right14 = right[14];\n\n var column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n var column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n var column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n var column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n var column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n var column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n var column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n var column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n var column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n var column3Row0 =\n left0 * right12 + left4 * right13 + left8 * right14 + left12;\n var column3Row1 =\n left1 * right12 + left5 * right13 + left9 * right14 + left13;\n var column3Row2 =\n left2 * right12 + left6 * right13 + left10 * right14 + left14;\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = 0.0;\n result[4] = column1Row0;\n result[5] = column1Row1;\n result[6] = column1Row2;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = 0.0;\n result[12] = column3Row0;\n result[13] = column3Row1;\n result[14] = column3Row2;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by a 3x3 rotation matrix. This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromRotationTranslation(rotation), m);</code> with less allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The matrix on the left-hand side.\n * @param {Matrix3} rotation The 3x3 rotation matrix on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromRotationTranslation(rotation), m);\n * Cesium.Matrix4.multiplyByMatrix3(m, rotation, m);\n */\nMatrix4.multiplyByMatrix3 = function (matrix, rotation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"rotation\", rotation);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var left0 = matrix[0];\n var left1 = matrix[1];\n var left2 = matrix[2];\n var left4 = matrix[4];\n var left5 = matrix[5];\n var left6 = matrix[6];\n var left8 = matrix[8];\n var left9 = matrix[9];\n var left10 = matrix[10];\n\n var right0 = rotation[0];\n var right1 = rotation[1];\n var right2 = rotation[2];\n var right4 = rotation[3];\n var right5 = rotation[4];\n var right6 = rotation[5];\n var right8 = rotation[6];\n var right9 = rotation[7];\n var right10 = rotation[8];\n\n var column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n var column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n var column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n var column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n var column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n var column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n var column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n var column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n var column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column0Row2;\n result[3] = 0.0;\n result[4] = column1Row0;\n result[5] = column1Row1;\n result[6] = column1Row2;\n result[7] = 0.0;\n result[8] = column2Row0;\n result[9] = column2Row1;\n result[10] = column2Row2;\n result[11] = 0.0;\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = matrix[15];\n return result;\n};\n\n/**\n * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by an implicit translation matrix defined by a {@link Cartesian3}. This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromTranslation(position), m);</code> with less allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The matrix on the left-hand side.\n * @param {Cartesian3} translation The translation on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromTranslation(position), m);\n * Cesium.Matrix4.multiplyByTranslation(m, position, m);\n */\nMatrix4.multiplyByTranslation = function (matrix, translation, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"translation\", translation);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = translation.x;\n var y = translation.y;\n var z = translation.z;\n\n var tx = x * matrix[0] + y * matrix[4] + z * matrix[8] + matrix[12];\n var ty = x * matrix[1] + y * matrix[5] + z * matrix[9] + matrix[13];\n var tz = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14];\n\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n result[4] = matrix[4];\n result[5] = matrix[5];\n result[6] = matrix[6];\n result[7] = matrix[7];\n result[8] = matrix[8];\n result[9] = matrix[9];\n result[10] = matrix[10];\n result[11] = matrix[11];\n result[12] = tx;\n result[13] = ty;\n result[14] = tz;\n result[15] = matrix[15];\n return result;\n};\n\nvar uniformScaleScratch = new Cartesian3();\n\n/**\n * Multiplies an affine transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by an implicit uniform scale matrix. This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);</code>, where\n * <code>m</code> must be an affine matrix.\n * This function performs fewer allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The affine matrix on the left-hand side.\n * @param {Number} scale The uniform scale on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromUniformScale(scale), m);\n * Cesium.Matrix4.multiplyByUniformScale(m, scale, m);\n *\n * @see Matrix4.fromUniformScale\n * @see Matrix4.multiplyByScale\n */\nMatrix4.multiplyByUniformScale = function (matrix, scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number(\"scale\", scale);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n uniformScaleScratch.x = scale;\n uniformScaleScratch.y = scale;\n uniformScaleScratch.z = scale;\n return Matrix4.multiplyByScale(matrix, uniformScaleScratch, result);\n};\n\n/**\n * Multiplies an affine transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by an implicit non-uniform scale matrix. This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);</code>, where\n * <code>m</code> must be an affine matrix.\n * This function performs fewer allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The affine matrix on the left-hand side.\n * @param {Cartesian3} scale The non-uniform scale on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromScale(scale), m);\n * Cesium.Matrix4.multiplyByScale(m, scale, m);\n *\n * @see Matrix4.fromScale\n * @see Matrix4.multiplyByUniformScale\n */\nMatrix4.multiplyByScale = function (matrix, scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"scale\", scale);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var scaleX = scale.x;\n var scaleY = scale.y;\n var scaleZ = scale.z;\n\n // Faster than Cartesian3.equals\n if (scaleX === 1.0 && scaleY === 1.0 && scaleZ === 1.0) {\n return Matrix4.clone(matrix, result);\n }\n\n result[0] = scaleX * matrix[0];\n result[1] = scaleX * matrix[1];\n result[2] = scaleX * matrix[2];\n result[3] = 0.0;\n result[4] = scaleY * matrix[4];\n result[5] = scaleY * matrix[5];\n result[6] = scaleY * matrix[6];\n result[7] = 0.0;\n result[8] = scaleZ * matrix[8];\n result[9] = scaleZ * matrix[9];\n result[10] = scaleZ * matrix[10];\n result[11] = 0.0;\n result[12] = matrix[12];\n result[13] = matrix[13];\n result[14] = matrix[14];\n result[15] = 1.0;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian4} cartesian The vector.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nMatrix4.multiplyByVector = function (matrix, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var vX = cartesian.x;\n var vY = cartesian.y;\n var vZ = cartesian.z;\n var vW = cartesian.w;\n\n var x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12] * vW;\n var y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13] * vW;\n var z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14] * vW;\n var w = matrix[3] * vX + matrix[7] * vY + matrix[11] * vZ + matrix[15] * vW;\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}\n * with a {@link Cartesian4} with a <code>w</code> component of zero.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} cartesian The point.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @example\n * var p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * var result = Cesium.Matrix4.multiplyByPointAsVector(matrix, p, new Cesium.Cartesian3());\n * // A shortcut for\n * // Cartesian3 p = ...\n * // Cesium.Matrix4.multiplyByVector(matrix, new Cesium.Cartesian4(p.x, p.y, p.z, 0.0), result);\n */\nMatrix4.multiplyByPointAsVector = function (matrix, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var vX = cartesian.x;\n var vY = cartesian.y;\n var vZ = cartesian.z;\n\n var x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ;\n var y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ;\n var z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ;\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}\n * with a {@link Cartesian4} with a <code>w</code> component of 1, but returns a {@link Cartesian3} instead of a {@link Cartesian4}.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} cartesian The point.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @example\n * var p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * var result = Cesium.Matrix4.multiplyByPoint(matrix, p, new Cesium.Cartesian3());\n */\nMatrix4.multiplyByPoint = function (matrix, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var vX = cartesian.x;\n var vY = cartesian.y;\n var vZ = cartesian.z;\n\n var x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12];\n var y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13];\n var z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14];\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Number} scalar The number to multiply by.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //create a Matrix4 instance which is a scaled version of the supplied Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * var a = Cesium.Matrix4.multiplyByScalar(m, -2, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [-20.0, -22.0, -24.0, -26.0]\n * // [-28.0, -30.0, -32.0, -34.0]\n * // [-36.0, -38.0, -40.0, -42.0]\n * // [-44.0, -46.0, -48.0, -50.0]\n */\nMatrix4.multiplyByScalar = function (matrix, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0] * scalar;\n result[1] = matrix[1] * scalar;\n result[2] = matrix[2] * scalar;\n result[3] = matrix[3] * scalar;\n result[4] = matrix[4] * scalar;\n result[5] = matrix[5] * scalar;\n result[6] = matrix[6] * scalar;\n result[7] = matrix[7] * scalar;\n result[8] = matrix[8] * scalar;\n result[9] = matrix[9] * scalar;\n result[10] = matrix[10] * scalar;\n result[11] = matrix[11] * scalar;\n result[12] = matrix[12] * scalar;\n result[13] = matrix[13] * scalar;\n result[14] = matrix[14] * scalar;\n result[15] = matrix[15] * scalar;\n return result;\n};\n\n/**\n * Computes a negated copy of the provided matrix.\n *\n * @param {Matrix4} matrix The matrix to negate.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //create a new Matrix4 instance which is a negation of a Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * var a = Cesium.Matrix4.negate(m, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [-10.0, -11.0, -12.0, -13.0]\n * // [-14.0, -15.0, -16.0, -17.0]\n * // [-18.0, -19.0, -20.0, -21.0]\n * // [-22.0, -23.0, -24.0, -25.0]\n */\nMatrix4.negate = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = -matrix[0];\n result[1] = -matrix[1];\n result[2] = -matrix[2];\n result[3] = -matrix[3];\n result[4] = -matrix[4];\n result[5] = -matrix[5];\n result[6] = -matrix[6];\n result[7] = -matrix[7];\n result[8] = -matrix[8];\n result[9] = -matrix[9];\n result[10] = -matrix[10];\n result[11] = -matrix[11];\n result[12] = -matrix[12];\n result[13] = -matrix[13];\n result[14] = -matrix[14];\n result[15] = -matrix[15];\n return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix4} matrix The matrix to transpose.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //returns transpose of a Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * // [14.0, 15.0, 16.0, 17.0]\n * // [18.0, 19.0, 20.0, 21.0]\n * // [22.0, 23.0, 24.0, 25.0]\n *\n * var a = Cesium.Matrix4.transpose(m, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n */\nMatrix4.transpose = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var matrix1 = matrix[1];\n var matrix2 = matrix[2];\n var matrix3 = matrix[3];\n var matrix6 = matrix[6];\n var matrix7 = matrix[7];\n var matrix11 = matrix[11];\n\n result[0] = matrix[0];\n result[1] = matrix[4];\n result[2] = matrix[8];\n result[3] = matrix[12];\n result[4] = matrix1;\n result[5] = matrix[5];\n result[6] = matrix[9];\n result[7] = matrix[13];\n result[8] = matrix2;\n result[9] = matrix6;\n result[10] = matrix[10];\n result[11] = matrix[14];\n result[12] = matrix3;\n result[13] = matrix7;\n result[14] = matrix11;\n result[15] = matrix[15];\n return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix4} matrix The matrix with signed elements.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.abs = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = Math.abs(matrix[0]);\n result[1] = Math.abs(matrix[1]);\n result[2] = Math.abs(matrix[2]);\n result[3] = Math.abs(matrix[3]);\n result[4] = Math.abs(matrix[4]);\n result[5] = Math.abs(matrix[5]);\n result[6] = Math.abs(matrix[6]);\n result[7] = Math.abs(matrix[7]);\n result[8] = Math.abs(matrix[8]);\n result[9] = Math.abs(matrix[9]);\n result[10] = Math.abs(matrix[10]);\n result[11] = Math.abs(matrix[11]);\n result[12] = Math.abs(matrix[12]);\n result[13] = Math.abs(matrix[13]);\n result[14] = Math.abs(matrix[14]);\n result[15] = Math.abs(matrix[15]);\n\n return result;\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix4} [left] The first matrix.\n * @param {Matrix4} [right] The second matrix.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n *\n * @example\n * //compares two Matrix4 instances\n *\n * // a = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n *\n * // b = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n *\n * if(Cesium.Matrix4.equals(a,b)) {\n * console.log(\"Both matrices are equal\");\n * } else {\n * console.log(\"They are not equal\");\n * }\n *\n * //Prints \"Both matrices are equal\" on the console\n */\nMatrix4.equals = function (left, right) {\n // Given that most matrices will be transformation matrices, the elements\n // are tested in order such that the test is likely to fail as early\n // as possible. I _think_ this is just as friendly to the L1 cache\n // as testing in index order. It is certainty faster in practice.\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n // Translation\n left[12] === right[12] &&\n left[13] === right[13] &&\n left[14] === right[14] &&\n // Rotation/scale\n left[0] === right[0] &&\n left[1] === right[1] &&\n left[2] === right[2] &&\n left[4] === right[4] &&\n left[5] === right[5] &&\n left[6] === right[6] &&\n left[8] === right[8] &&\n left[9] === right[9] &&\n left[10] === right[10] &&\n // Bottom row\n left[3] === right[3] &&\n left[7] === right[7] &&\n left[11] === right[11] &&\n left[15] === right[15])\n );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix4} [left] The first matrix.\n * @param {Matrix4} [right] The second matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n *\n * @example\n * //compares two Matrix4 instances\n *\n * // a = [10.5, 14.5, 18.5, 22.5]\n * // [11.5, 15.5, 19.5, 23.5]\n * // [12.5, 16.5, 20.5, 24.5]\n * // [13.5, 17.5, 21.5, 25.5]\n *\n * // b = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n *\n * if(Cesium.Matrix4.equalsEpsilon(a,b,0.1)){\n * console.log(\"Difference between both the matrices is less than 0.1\");\n * } else {\n * console.log(\"Difference between both the matrices is not less than 0.1\");\n * }\n *\n * //Prints \"Difference between both the matrices is not less than 0.1\" on the console\n */\nMatrix4.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left[0] - right[0]) <= epsilon &&\n Math.abs(left[1] - right[1]) <= epsilon &&\n Math.abs(left[2] - right[2]) <= epsilon &&\n Math.abs(left[3] - right[3]) <= epsilon &&\n Math.abs(left[4] - right[4]) <= epsilon &&\n Math.abs(left[5] - right[5]) <= epsilon &&\n Math.abs(left[6] - right[6]) <= epsilon &&\n Math.abs(left[7] - right[7]) <= epsilon &&\n Math.abs(left[8] - right[8]) <= epsilon &&\n Math.abs(left[9] - right[9]) <= epsilon &&\n Math.abs(left[10] - right[10]) <= epsilon &&\n Math.abs(left[11] - right[11]) <= epsilon &&\n Math.abs(left[12] - right[12]) <= epsilon &&\n Math.abs(left[13] - right[13]) <= epsilon &&\n Math.abs(left[14] - right[14]) <= epsilon &&\n Math.abs(left[15] - right[15]) <= epsilon)\n );\n};\n\n/**\n * Gets the translation portion of the provided matrix, assuming the matrix is a affine transformation matrix.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nMatrix4.getTranslation = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = matrix[12];\n result.y = matrix[13];\n result.z = matrix[14];\n return result;\n};\n\n/**\n * Gets the upper left 3x3 rotation matrix of the provided matrix, assuming the matrix is an affine transformation matrix.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @example\n * // returns a Matrix3 instance from a Matrix4 instance\n *\n * // m = [10.0, 14.0, 18.0, 22.0]\n * // [11.0, 15.0, 19.0, 23.0]\n * // [12.0, 16.0, 20.0, 24.0]\n * // [13.0, 17.0, 21.0, 25.0]\n *\n * var b = new Cesium.Matrix3();\n * Cesium.Matrix4.getMatrix3(m,b);\n *\n * // b = [10.0, 14.0, 18.0]\n * // [11.0, 15.0, 19.0]\n * // [12.0, 16.0, 20.0]\n */\nMatrix4.getMatrix3 = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[4];\n result[4] = matrix[5];\n result[5] = matrix[6];\n result[6] = matrix[8];\n result[7] = matrix[9];\n result[8] = matrix[10];\n return result;\n};\n\nvar scratchInverseRotation = new Matrix3();\nvar scratchMatrix3Zero = new Matrix3();\nvar scratchBottomRow = new Cartesian4();\nvar scratchExpectedBottomRow = new Cartesian4(0.0, 0.0, 0.0, 1.0);\n\n/**\n * Computes the inverse of the provided matrix using Cramers Rule.\n * If the determinant is zero, the matrix can not be inverted, and an exception is thrown.\n * If the matrix is an affine transformation matrix, it is more efficient\n * to invert it with {@link Matrix4.inverseTransformation}.\n *\n * @param {Matrix4} matrix The matrix to invert.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {RuntimeError} matrix is not invertible because its determinate is zero.\n */\nMatrix4.inverse = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n //\n // Ported from:\n // ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf\n //\n var src0 = matrix[0];\n var src1 = matrix[4];\n var src2 = matrix[8];\n var src3 = matrix[12];\n var src4 = matrix[1];\n var src5 = matrix[5];\n var src6 = matrix[9];\n var src7 = matrix[13];\n var src8 = matrix[2];\n var src9 = matrix[6];\n var src10 = matrix[10];\n var src11 = matrix[14];\n var src12 = matrix[3];\n var src13 = matrix[7];\n var src14 = matrix[11];\n var src15 = matrix[15];\n\n // calculate pairs for first 8 elements (cofactors)\n var tmp0 = src10 * src15;\n var tmp1 = src11 * src14;\n var tmp2 = src9 * src15;\n var tmp3 = src11 * src13;\n var tmp4 = src9 * src14;\n var tmp5 = src10 * src13;\n var tmp6 = src8 * src15;\n var tmp7 = src11 * src12;\n var tmp8 = src8 * src14;\n var tmp9 = src10 * src12;\n var tmp10 = src8 * src13;\n var tmp11 = src9 * src12;\n\n // calculate first 8 elements (cofactors)\n var dst0 =\n tmp0 * src5 +\n tmp3 * src6 +\n tmp4 * src7 -\n (tmp1 * src5 + tmp2 * src6 + tmp5 * src7);\n var dst1 =\n tmp1 * src4 +\n tmp6 * src6 +\n tmp9 * src7 -\n (tmp0 * src4 + tmp7 * src6 + tmp8 * src7);\n var dst2 =\n tmp2 * src4 +\n tmp7 * src5 +\n tmp10 * src7 -\n (tmp3 * src4 + tmp6 * src5 + tmp11 * src7);\n var dst3 =\n tmp5 * src4 +\n tmp8 * src5 +\n tmp11 * src6 -\n (tmp4 * src4 + tmp9 * src5 + tmp10 * src6);\n var dst4 =\n tmp1 * src1 +\n tmp2 * src2 +\n tmp5 * src3 -\n (tmp0 * src1 + tmp3 * src2 + tmp4 * src3);\n var dst5 =\n tmp0 * src0 +\n tmp7 * src2 +\n tmp8 * src3 -\n (tmp1 * src0 + tmp6 * src2 + tmp9 * src3);\n var dst6 =\n tmp3 * src0 +\n tmp6 * src1 +\n tmp11 * src3 -\n (tmp2 * src0 + tmp7 * src1 + tmp10 * src3);\n var dst7 =\n tmp4 * src0 +\n tmp9 * src1 +\n tmp10 * src2 -\n (tmp5 * src0 + tmp8 * src1 + tmp11 * src2);\n\n // calculate pairs for second 8 elements (cofactors)\n tmp0 = src2 * src7;\n tmp1 = src3 * src6;\n tmp2 = src1 * src7;\n tmp3 = src3 * src5;\n tmp4 = src1 * src6;\n tmp5 = src2 * src5;\n tmp6 = src0 * src7;\n tmp7 = src3 * src4;\n tmp8 = src0 * src6;\n tmp9 = src2 * src4;\n tmp10 = src0 * src5;\n tmp11 = src1 * src4;\n\n // calculate second 8 elements (cofactors)\n var dst8 =\n tmp0 * src13 +\n tmp3 * src14 +\n tmp4 * src15 -\n (tmp1 * src13 + tmp2 * src14 + tmp5 * src15);\n var dst9 =\n tmp1 * src12 +\n tmp6 * src14 +\n tmp9 * src15 -\n (tmp0 * src12 + tmp7 * src14 + tmp8 * src15);\n var dst10 =\n tmp2 * src12 +\n tmp7 * src13 +\n tmp10 * src15 -\n (tmp3 * src12 + tmp6 * src13 + tmp11 * src15);\n var dst11 =\n tmp5 * src12 +\n tmp8 * src13 +\n tmp11 * src14 -\n (tmp4 * src12 + tmp9 * src13 + tmp10 * src14);\n var dst12 =\n tmp2 * src10 +\n tmp5 * src11 +\n tmp1 * src9 -\n (tmp4 * src11 + tmp0 * src9 + tmp3 * src10);\n var dst13 =\n tmp8 * src11 +\n tmp0 * src8 +\n tmp7 * src10 -\n (tmp6 * src10 + tmp9 * src11 + tmp1 * src8);\n var dst14 =\n tmp6 * src9 +\n tmp11 * src11 +\n tmp3 * src8 -\n (tmp10 * src11 + tmp2 * src8 + tmp7 * src9);\n var dst15 =\n tmp10 * src10 +\n tmp4 * src8 +\n tmp9 * src9 -\n (tmp8 * src9 + tmp11 * src10 + tmp5 * src8);\n\n // calculate determinant\n var det = src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3;\n\n if (Math.abs(det) < CesiumMath.EPSILON21) {\n // Special case for a zero scale matrix that can occur, for example,\n // when a model's node has a [0, 0, 0] scale.\n if (\n Matrix3.equalsEpsilon(\n Matrix4.getMatrix3(matrix, scratchInverseRotation),\n scratchMatrix3Zero,\n CesiumMath.EPSILON7\n ) &&\n Cartesian4.equals(\n Matrix4.getRow(matrix, 3, scratchBottomRow),\n scratchExpectedBottomRow\n )\n ) {\n result[0] = 0.0;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = 0.0;\n result[4] = 0.0;\n result[5] = 0.0;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 0.0;\n result[9] = 0.0;\n result[10] = 0.0;\n result[11] = 0.0;\n result[12] = -matrix[12];\n result[13] = -matrix[13];\n result[14] = -matrix[14];\n result[15] = 1.0;\n return result;\n }\n\n throw new RuntimeError(\n \"matrix is not invertible because its determinate is zero.\"\n );\n }\n\n // calculate matrix inverse\n det = 1.0 / det;\n\n result[0] = dst0 * det;\n result[1] = dst1 * det;\n result[2] = dst2 * det;\n result[3] = dst3 * det;\n result[4] = dst4 * det;\n result[5] = dst5 * det;\n result[6] = dst6 * det;\n result[7] = dst7 * det;\n result[8] = dst8 * det;\n result[9] = dst9 * det;\n result[10] = dst10 * det;\n result[11] = dst11 * det;\n result[12] = dst12 * det;\n result[13] = dst13 * det;\n result[14] = dst14 * det;\n result[15] = dst15 * det;\n return result;\n};\n\n/**\n * Computes the inverse of the provided matrix assuming it is\n * an affine transformation matrix, where the upper left 3x3 elements\n * are a rotation matrix, and the upper three elements in the fourth\n * column are the translation. The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * This method is faster than computing the inverse for a general 4x4\n * matrix using {@link Matrix4.inverse}.\n *\n * @param {Matrix4} matrix The matrix to invert.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.inverseTransformation = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n //This function is an optimized version of the below 4 lines.\n //var rT = Matrix3.transpose(Matrix4.getMatrix3(matrix));\n //var rTN = Matrix3.negate(rT);\n //var rTT = Matrix3.multiplyByVector(rTN, Matrix4.getTranslation(matrix));\n //return Matrix4.fromRotationTranslation(rT, rTT, result);\n\n var matrix0 = matrix[0];\n var matrix1 = matrix[1];\n var matrix2 = matrix[2];\n var matrix4 = matrix[4];\n var matrix5 = matrix[5];\n var matrix6 = matrix[6];\n var matrix8 = matrix[8];\n var matrix9 = matrix[9];\n var matrix10 = matrix[10];\n\n var vX = matrix[12];\n var vY = matrix[13];\n var vZ = matrix[14];\n\n var x = -matrix0 * vX - matrix1 * vY - matrix2 * vZ;\n var y = -matrix4 * vX - matrix5 * vY - matrix6 * vZ;\n var z = -matrix8 * vX - matrix9 * vY - matrix10 * vZ;\n\n result[0] = matrix0;\n result[1] = matrix4;\n result[2] = matrix8;\n result[3] = 0.0;\n result[4] = matrix1;\n result[5] = matrix5;\n result[6] = matrix9;\n result[7] = 0.0;\n result[8] = matrix2;\n result[9] = matrix6;\n result[10] = matrix10;\n result[11] = 0.0;\n result[12] = x;\n result[13] = y;\n result[14] = z;\n result[15] = 1.0;\n return result;\n};\n\n/**\n * An immutable Matrix4 instance initialized to the identity matrix.\n *\n * @type {Matrix4}\n * @constant\n */\nMatrix4.IDENTITY = Object.freeze(\n new Matrix4(\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n )\n);\n\n/**\n * An immutable Matrix4 instance initialized to the zero matrix.\n *\n * @type {Matrix4}\n * @constant\n */\nMatrix4.ZERO = Object.freeze(\n new Matrix4(\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0\n )\n);\n\n/**\n * The index into Matrix4 for column 0, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix4 for column 0, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix4 for column 0, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN0ROW2 = 2;\n\n/**\n * The index into Matrix4 for column 0, row 3.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN0ROW3 = 3;\n\n/**\n * The index into Matrix4 for column 1, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN1ROW0 = 4;\n\n/**\n * The index into Matrix4 for column 1, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN1ROW1 = 5;\n\n/**\n * The index into Matrix4 for column 1, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN1ROW2 = 6;\n\n/**\n * The index into Matrix4 for column 1, row 3.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN1ROW3 = 7;\n\n/**\n * The index into Matrix4 for column 2, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN2ROW0 = 8;\n\n/**\n * The index into Matrix4 for column 2, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN2ROW1 = 9;\n\n/**\n * The index into Matrix4 for column 2, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN2ROW2 = 10;\n\n/**\n * The index into Matrix4 for column 2, row 3.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN2ROW3 = 11;\n\n/**\n * The index into Matrix4 for column 3, row 0.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN3ROW0 = 12;\n\n/**\n * The index into Matrix4 for column 3, row 1.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN3ROW1 = 13;\n\n/**\n * The index into Matrix4 for column 3, row 2.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN3ROW2 = 14;\n\n/**\n * The index into Matrix4 for column 3, row 3.\n *\n * @type {Number}\n * @constant\n */\nMatrix4.COLUMN3ROW3 = 15;\n\nObject.defineProperties(Matrix4.prototype, {\n /**\n * Gets the number of items in the collection.\n * @memberof Matrix4.prototype\n *\n * @type {Number}\n */\n length: {\n get: function () {\n return Matrix4.packedLength;\n },\n },\n});\n\n/**\n * Duplicates the provided Matrix4 instance.\n *\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n */\nMatrix4.prototype.clone = function (result) {\n return Matrix4.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix4} [right] The right hand side matrix.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix4.prototype.equals = function (right) {\n return Matrix4.equals(this, right);\n};\n\n/**\n * @private\n */\nMatrix4.equalsArray = function (matrix, array, offset) {\n return (\n matrix[0] === array[offset] &&\n matrix[1] === array[offset + 1] &&\n matrix[2] === array[offset + 2] &&\n matrix[3] === array[offset + 3] &&\n matrix[4] === array[offset + 4] &&\n matrix[5] === array[offset + 5] &&\n matrix[6] === array[offset + 6] &&\n matrix[7] === array[offset + 7] &&\n matrix[8] === array[offset + 8] &&\n matrix[9] === array[offset + 9] &&\n matrix[10] === array[offset + 10] &&\n matrix[11] === array[offset + 11] &&\n matrix[12] === array[offset + 12] &&\n matrix[13] === array[offset + 13] &&\n matrix[14] === array[offset + 14] &&\n matrix[15] === array[offset + 15]\n );\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix4} [right] The right hand side matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix4.prototype.equalsEpsilon = function (right, epsilon) {\n return Matrix4.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Computes a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1, column2, column3)'.\n *\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'.\n */\nMatrix4.prototype.toString = function () {\n return (\n \"(\" +\n this[0] +\n \", \" +\n this[4] +\n \", \" +\n this[8] +\n \", \" +\n this[12] +\n \")\\n\" +\n \"(\" +\n this[1] +\n \", \" +\n this[5] +\n \", \" +\n this[9] +\n \", \" +\n this[13] +\n \")\\n\" +\n \"(\" +\n this[2] +\n \", \" +\n this[6] +\n \", \" +\n this[10] +\n \", \" +\n this[14] +\n \")\\n\" +\n \"(\" +\n this[3] +\n \", \" +\n this[7] +\n \", \" +\n this[11] +\n \", \" +\n this[15] +\n \")\"\n );\n};\nexport default Matrix4;\n","import Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A two dimensional region specified as longitude and latitude coordinates.\n *\n * @alias Rectangle\n * @constructor\n *\n * @param {Number} [west=0.0] The westernmost longitude, in radians, in the range [-Pi, Pi].\n * @param {Number} [south=0.0] The southernmost latitude, in radians, in the range [-Pi/2, Pi/2].\n * @param {Number} [east=0.0] The easternmost longitude, in radians, in the range [-Pi, Pi].\n * @param {Number} [north=0.0] The northernmost latitude, in radians, in the range [-Pi/2, Pi/2].\n *\n * @see Packable\n */\nfunction Rectangle(west, south, east, north) {\n /**\n * The westernmost longitude in radians in the range [-Pi, Pi].\n *\n * @type {Number}\n * @default 0.0\n */\n this.west = defaultValue(west, 0.0);\n\n /**\n * The southernmost latitude in radians in the range [-Pi/2, Pi/2].\n *\n * @type {Number}\n * @default 0.0\n */\n this.south = defaultValue(south, 0.0);\n\n /**\n * The easternmost longitude in radians in the range [-Pi, Pi].\n *\n * @type {Number}\n * @default 0.0\n */\n this.east = defaultValue(east, 0.0);\n\n /**\n * The northernmost latitude in radians in the range [-Pi/2, Pi/2].\n *\n * @type {Number}\n * @default 0.0\n */\n this.north = defaultValue(north, 0.0);\n}\n\nObject.defineProperties(Rectangle.prototype, {\n /**\n * Gets the width of the rectangle in radians.\n * @memberof Rectangle.prototype\n * @type {Number}\n * @readonly\n */\n width: {\n get: function () {\n return Rectangle.computeWidth(this);\n },\n },\n\n /**\n * Gets the height of the rectangle in radians.\n * @memberof Rectangle.prototype\n * @type {Number}\n * @readonly\n */\n height: {\n get: function () {\n return Rectangle.computeHeight(this);\n },\n },\n});\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nRectangle.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Rectangle} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nRectangle.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.west;\n array[startingIndex++] = value.south;\n array[startingIndex++] = value.east;\n array[startingIndex] = value.north;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Rectangle} [result] The object into which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\n */\nRectangle.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Rectangle();\n }\n\n result.west = array[startingIndex++];\n result.south = array[startingIndex++];\n result.east = array[startingIndex++];\n result.north = array[startingIndex];\n return result;\n};\n\n/**\n * Computes the width of a rectangle in radians.\n * @param {Rectangle} rectangle The rectangle to compute the width of.\n * @returns {Number} The width.\n */\nRectangle.computeWidth = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n var east = rectangle.east;\n var west = rectangle.west;\n if (east < west) {\n east += CesiumMath.TWO_PI;\n }\n return east - west;\n};\n\n/**\n * Computes the height of a rectangle in radians.\n * @param {Rectangle} rectangle The rectangle to compute the height of.\n * @returns {Number} The height.\n */\nRectangle.computeHeight = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n return rectangle.north - rectangle.south;\n};\n\n/**\n * Creates a rectangle given the boundary longitude and latitude in degrees.\n *\n * @param {Number} [west=0.0] The westernmost longitude in degrees in the range [-180.0, 180.0].\n * @param {Number} [south=0.0] The southernmost latitude in degrees in the range [-90.0, 90.0].\n * @param {Number} [east=0.0] The easternmost longitude in degrees in the range [-180.0, 180.0].\n * @param {Number} [north=0.0] The northernmost latitude in degrees in the range [-90.0, 90.0].\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n *\n * @example\n * var rectangle = Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0);\n */\nRectangle.fromDegrees = function (west, south, east, north, result) {\n west = CesiumMath.toRadians(defaultValue(west, 0.0));\n south = CesiumMath.toRadians(defaultValue(south, 0.0));\n east = CesiumMath.toRadians(defaultValue(east, 0.0));\n north = CesiumMath.toRadians(defaultValue(north, 0.0));\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n\n return result;\n};\n\n/**\n * Creates a rectangle given the boundary longitude and latitude in radians.\n *\n * @param {Number} [west=0.0] The westernmost longitude in radians in the range [-Math.PI, Math.PI].\n * @param {Number} [south=0.0] The southernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\n * @param {Number} [east=0.0] The easternmost longitude in radians in the range [-Math.PI, Math.PI].\n * @param {Number} [north=0.0] The northernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n *\n * @example\n * var rectangle = Cesium.Rectangle.fromRadians(0.0, Math.PI/4, Math.PI/8, 3*Math.PI/4);\n */\nRectangle.fromRadians = function (west, south, east, north, result) {\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = defaultValue(west, 0.0);\n result.south = defaultValue(south, 0.0);\n result.east = defaultValue(east, 0.0);\n result.north = defaultValue(north, 0.0);\n\n return result;\n};\n\n/**\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\n *\n * @param {Cartographic[]} cartographics The list of Cartographic instances.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.fromCartographicArray = function (cartographics, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartographics\", cartographics);\n //>>includeEnd('debug');\n\n var west = Number.MAX_VALUE;\n var east = -Number.MAX_VALUE;\n var westOverIDL = Number.MAX_VALUE;\n var eastOverIDL = -Number.MAX_VALUE;\n var south = Number.MAX_VALUE;\n var north = -Number.MAX_VALUE;\n\n for (var i = 0, len = cartographics.length; i < len; i++) {\n var position = cartographics[i];\n west = Math.min(west, position.longitude);\n east = Math.max(east, position.longitude);\n south = Math.min(south, position.latitude);\n north = Math.max(north, position.latitude);\n\n var lonAdjusted =\n position.longitude >= 0\n ? position.longitude\n : position.longitude + CesiumMath.TWO_PI;\n westOverIDL = Math.min(westOverIDL, lonAdjusted);\n eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\n }\n\n if (east - west > eastOverIDL - westOverIDL) {\n west = westOverIDL;\n east = eastOverIDL;\n\n if (east > CesiumMath.PI) {\n east = east - CesiumMath.TWO_PI;\n }\n if (west > CesiumMath.PI) {\n west = west - CesiumMath.TWO_PI;\n }\n }\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\n *\n * @param {Cartesian3[]} cartesians The list of Cartesian instances.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid the cartesians are on.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.fromCartesianArray = function (cartesians, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var west = Number.MAX_VALUE;\n var east = -Number.MAX_VALUE;\n var westOverIDL = Number.MAX_VALUE;\n var eastOverIDL = -Number.MAX_VALUE;\n var south = Number.MAX_VALUE;\n var north = -Number.MAX_VALUE;\n\n for (var i = 0, len = cartesians.length; i < len; i++) {\n var position = ellipsoid.cartesianToCartographic(cartesians[i]);\n west = Math.min(west, position.longitude);\n east = Math.max(east, position.longitude);\n south = Math.min(south, position.latitude);\n north = Math.max(north, position.latitude);\n\n var lonAdjusted =\n position.longitude >= 0\n ? position.longitude\n : position.longitude + CesiumMath.TWO_PI;\n westOverIDL = Math.min(westOverIDL, lonAdjusted);\n eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\n }\n\n if (east - west > eastOverIDL - westOverIDL) {\n west = westOverIDL;\n east = eastOverIDL;\n\n if (east > CesiumMath.PI) {\n east = east - CesiumMath.TWO_PI;\n }\n if (west > CesiumMath.PI) {\n west = west - CesiumMath.TWO_PI;\n }\n }\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Duplicates a Rectangle.\n *\n * @param {Rectangle} rectangle The rectangle to clone.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. (Returns undefined if rectangle is undefined)\n */\nRectangle.clone = function (rectangle, result) {\n if (!defined(rectangle)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Rectangle(\n rectangle.west,\n rectangle.south,\n rectangle.east,\n rectangle.north\n );\n }\n\n result.west = rectangle.west;\n result.south = rectangle.south;\n result.east = rectangle.east;\n result.north = rectangle.north;\n return result;\n};\n\n/**\n * Compares the provided Rectangles componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [left] The first Rectangle.\n * @param {Rectangle} [right] The second Rectangle.\n * @param {Number} [absoluteEpsilon=0] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nRectangle.equalsEpsilon = function (left, right, absoluteEpsilon) {\n absoluteEpsilon = defaultValue(absoluteEpsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left.west - right.west) <= absoluteEpsilon &&\n Math.abs(left.south - right.south) <= absoluteEpsilon &&\n Math.abs(left.east - right.east) <= absoluteEpsilon &&\n Math.abs(left.north - right.north) <= absoluteEpsilon)\n );\n};\n\n/**\n * Duplicates this Rectangle.\n *\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.prototype.clone = function (result) {\n return Rectangle.clone(this, result);\n};\n\n/**\n * Compares the provided Rectangle with this Rectangle componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Rectangle} [other] The Rectangle to compare.\n * @returns {Boolean} <code>true</code> if the Rectangles are equal, <code>false</code> otherwise.\n */\nRectangle.prototype.equals = function (other) {\n return Rectangle.equals(this, other);\n};\n\n/**\n * Compares the provided rectangles and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [left] The first Rectangle.\n * @param {Rectangle} [right] The second Rectangle.\n * @returns {Boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nRectangle.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.west === right.west &&\n left.south === right.south &&\n left.east === right.east &&\n left.north === right.north)\n );\n};\n\n/**\n * Compares the provided Rectangle with this Rectangle componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [other] The Rectangle to compare.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if the Rectangles are within the provided epsilon, <code>false</code> otherwise.\n */\nRectangle.prototype.equalsEpsilon = function (other, epsilon) {\n return Rectangle.equalsEpsilon(this, other, epsilon);\n};\n\n/**\n * Checks a Rectangle's properties and throws if they are not in valid ranges.\n *\n * @param {Rectangle} rectangle The rectangle to validate\n *\n * @exception {DeveloperError} <code>north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n */\nRectangle.validate = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n\n var north = rectangle.north;\n Check.typeOf.number.greaterThanOrEquals(\n \"north\",\n north,\n -CesiumMath.PI_OVER_TWO\n );\n Check.typeOf.number.lessThanOrEquals(\"north\", north, CesiumMath.PI_OVER_TWO);\n\n var south = rectangle.south;\n Check.typeOf.number.greaterThanOrEquals(\n \"south\",\n south,\n -CesiumMath.PI_OVER_TWO\n );\n Check.typeOf.number.lessThanOrEquals(\"south\", south, CesiumMath.PI_OVER_TWO);\n\n var west = rectangle.west;\n Check.typeOf.number.greaterThanOrEquals(\"west\", west, -Math.PI);\n Check.typeOf.number.lessThanOrEquals(\"west\", west, Math.PI);\n\n var east = rectangle.east;\n Check.typeOf.number.greaterThanOrEquals(\"east\", east, -Math.PI);\n Check.typeOf.number.lessThanOrEquals(\"east\", east, Math.PI);\n //>>includeEnd('debug');\n};\n\n/**\n * Computes the southwest corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.southwest = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Cartographic(rectangle.west, rectangle.south);\n }\n result.longitude = rectangle.west;\n result.latitude = rectangle.south;\n result.height = 0.0;\n return result;\n};\n\n/**\n * Computes the northwest corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.northwest = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Cartographic(rectangle.west, rectangle.north);\n }\n result.longitude = rectangle.west;\n result.latitude = rectangle.north;\n result.height = 0.0;\n return result;\n};\n\n/**\n * Computes the northeast corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.northeast = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Cartographic(rectangle.east, rectangle.north);\n }\n result.longitude = rectangle.east;\n result.latitude = rectangle.north;\n result.height = 0.0;\n return result;\n};\n\n/**\n * Computes the southeast corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.southeast = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Cartographic(rectangle.east, rectangle.south);\n }\n result.longitude = rectangle.east;\n result.latitude = rectangle.south;\n result.height = 0.0;\n return result;\n};\n\n/**\n * Computes the center of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the center\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.center = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var east = rectangle.east;\n var west = rectangle.west;\n\n if (east < west) {\n east += CesiumMath.TWO_PI;\n }\n\n var longitude = CesiumMath.negativePiToPi((west + east) * 0.5);\n var latitude = (rectangle.south + rectangle.north) * 0.5;\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude);\n }\n\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = 0.0;\n return result;\n};\n\n/**\n * Computes the intersection of two rectangles. This function assumes that the rectangle's coordinates are\n * latitude and longitude in radians and produces a correct intersection, taking into account the fact that\n * the same angle can be represented with multiple values as well as the wrapping of longitude at the\n * anti-meridian. For a simple intersection that ignores these factors and can be used with projected\n * coordinates, see {@link Rectangle.simpleIntersection}.\n *\n * @param {Rectangle} rectangle On rectangle to find an intersection\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\n */\nRectangle.intersection = function (rectangle, otherRectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\n //>>includeEnd('debug');\n\n var rectangleEast = rectangle.east;\n var rectangleWest = rectangle.west;\n\n var otherRectangleEast = otherRectangle.east;\n var otherRectangleWest = otherRectangle.west;\n\n if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\n rectangleEast += CesiumMath.TWO_PI;\n } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\n otherRectangleEast += CesiumMath.TWO_PI;\n }\n\n if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\n otherRectangleWest += CesiumMath.TWO_PI;\n } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\n rectangleWest += CesiumMath.TWO_PI;\n }\n\n var west = CesiumMath.negativePiToPi(\n Math.max(rectangleWest, otherRectangleWest)\n );\n var east = CesiumMath.negativePiToPi(\n Math.min(rectangleEast, otherRectangleEast)\n );\n\n if (\n (rectangle.west < rectangle.east ||\n otherRectangle.west < otherRectangle.east) &&\n east <= west\n ) {\n return undefined;\n }\n\n var south = Math.max(rectangle.south, otherRectangle.south);\n var north = Math.min(rectangle.north, otherRectangle.north);\n\n if (south >= north) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Computes a simple intersection of two rectangles. Unlike {@link Rectangle.intersection}, this function\n * does not attempt to put the angular coordinates into a consistent range or to account for crossing the\n * anti-meridian. As such, it can be used for rectangles where the coordinates are not simply latitude\n * and longitude (i.e. projected coordinates).\n *\n * @param {Rectangle} rectangle On rectangle to find an intersection\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\n */\nRectangle.simpleIntersection = function (rectangle, otherRectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\n //>>includeEnd('debug');\n\n var west = Math.max(rectangle.west, otherRectangle.west);\n var south = Math.max(rectangle.south, otherRectangle.south);\n var east = Math.min(rectangle.east, otherRectangle.east);\n var north = Math.min(rectangle.north, otherRectangle.north);\n\n if (south >= north || west >= east) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Computes a rectangle that is the union of two rectangles.\n *\n * @param {Rectangle} rectangle A rectangle to enclose in rectangle.\n * @param {Rectangle} otherRectangle A rectangle to enclose in a rectangle.\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.union = function (rectangle, otherRectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Rectangle();\n }\n\n var rectangleEast = rectangle.east;\n var rectangleWest = rectangle.west;\n\n var otherRectangleEast = otherRectangle.east;\n var otherRectangleWest = otherRectangle.west;\n\n if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\n rectangleEast += CesiumMath.TWO_PI;\n } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\n otherRectangleEast += CesiumMath.TWO_PI;\n }\n\n if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\n otherRectangleWest += CesiumMath.TWO_PI;\n } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\n rectangleWest += CesiumMath.TWO_PI;\n }\n\n var west = CesiumMath.convertLongitudeRange(\n Math.min(rectangleWest, otherRectangleWest)\n );\n var east = CesiumMath.convertLongitudeRange(\n Math.max(rectangleEast, otherRectangleEast)\n );\n\n result.west = west;\n result.south = Math.min(rectangle.south, otherRectangle.south);\n result.east = east;\n result.north = Math.max(rectangle.north, otherRectangle.north);\n\n return result;\n};\n\n/**\n * Computes a rectangle by enlarging the provided rectangle until it contains the provided cartographic.\n *\n * @param {Rectangle} rectangle A rectangle to expand.\n * @param {Cartographic} cartographic A cartographic to enclose in a rectangle.\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\n */\nRectangle.expand = function (rectangle, cartographic, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"cartographic\", cartographic);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Rectangle();\n }\n\n result.west = Math.min(rectangle.west, cartographic.longitude);\n result.south = Math.min(rectangle.south, cartographic.latitude);\n result.east = Math.max(rectangle.east, cartographic.longitude);\n result.north = Math.max(rectangle.north, cartographic.latitude);\n\n return result;\n};\n\n/**\n * Returns true if the cartographic is on or inside the rectangle, false otherwise.\n *\n * @param {Rectangle} rectangle The rectangle\n * @param {Cartographic} cartographic The cartographic to test.\n * @returns {Boolean} true if the provided cartographic is inside the rectangle, false otherwise.\n */\nRectangle.contains = function (rectangle, cartographic) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"cartographic\", cartographic);\n //>>includeEnd('debug');\n\n var longitude = cartographic.longitude;\n var latitude = cartographic.latitude;\n\n var west = rectangle.west;\n var east = rectangle.east;\n\n if (east < west) {\n east += CesiumMath.TWO_PI;\n if (longitude < 0.0) {\n longitude += CesiumMath.TWO_PI;\n }\n }\n return (\n (longitude > west ||\n CesiumMath.equalsEpsilon(longitude, west, CesiumMath.EPSILON14)) &&\n (longitude < east ||\n CesiumMath.equalsEpsilon(longitude, east, CesiumMath.EPSILON14)) &&\n latitude >= rectangle.south &&\n latitude <= rectangle.north\n );\n};\n\nvar subsampleLlaScratch = new Cartographic();\n/**\n * Samples a rectangle so that it includes a list of Cartesian points suitable for passing to\n * {@link BoundingSphere#fromPoints}. Sampling is necessary to account\n * for rectangles that cover the poles or cross the equator.\n *\n * @param {Rectangle} rectangle The rectangle to subsample.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\n * @param {Number} [surfaceHeight=0.0] The height of the rectangle above the ellipsoid.\n * @param {Cartesian3[]} [result] The array of Cartesians onto which to store the result.\n * @returns {Cartesian3[]} The modified result parameter or a new Array of Cartesians instances if none was provided.\n */\nRectangle.subsample = function (rectangle, ellipsoid, surfaceHeight, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n surfaceHeight = defaultValue(surfaceHeight, 0.0);\n\n if (!defined(result)) {\n result = [];\n }\n var length = 0;\n\n var north = rectangle.north;\n var south = rectangle.south;\n var east = rectangle.east;\n var west = rectangle.west;\n\n var lla = subsampleLlaScratch;\n lla.height = surfaceHeight;\n\n lla.longitude = west;\n lla.latitude = north;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n\n lla.longitude = east;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n\n lla.latitude = south;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n\n lla.longitude = west;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n\n if (north < 0.0) {\n lla.latitude = north;\n } else if (south > 0.0) {\n lla.latitude = south;\n } else {\n lla.latitude = 0.0;\n }\n\n for (var i = 1; i < 8; ++i) {\n lla.longitude = -Math.PI + i * CesiumMath.PI_OVER_TWO;\n if (Rectangle.contains(rectangle, lla)) {\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n }\n }\n\n if (lla.latitude === 0.0) {\n lla.longitude = west;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n lla.longitude = east;\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n length++;\n }\n result.length = length;\n return result;\n};\n\n/**\n * The largest possible rectangle.\n *\n * @type {Rectangle}\n * @constant\n */\nRectangle.MAX_VALUE = Object.freeze(\n new Rectangle(\n -Math.PI,\n -CesiumMath.PI_OVER_TWO,\n Math.PI,\n CesiumMath.PI_OVER_TWO\n )\n);\nexport default Rectangle;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Intersect from \"./Intersect.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A bounding sphere with a center and a radius.\n * @alias BoundingSphere\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.\n * @param {Number} [radius=0.0] The radius of the bounding sphere.\n *\n * @see AxisAlignedBoundingBox\n * @see BoundingRectangle\n * @see Packable\n */\nfunction BoundingSphere(center, radius) {\n /**\n * The center point of the sphere.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.center = Cartesian3.clone(defaultValue(center, Cartesian3.ZERO));\n\n /**\n * The radius of the sphere.\n * @type {Number}\n * @default 0.0\n */\n this.radius = defaultValue(radius, 0.0);\n}\n\nvar fromPointsXMin = new Cartesian3();\nvar fromPointsYMin = new Cartesian3();\nvar fromPointsZMin = new Cartesian3();\nvar fromPointsXMax = new Cartesian3();\nvar fromPointsYMax = new Cartesian3();\nvar fromPointsZMax = new Cartesian3();\nvar fromPointsCurrentPos = new Cartesian3();\nvar fromPointsScratch = new Cartesian3();\nvar fromPointsRitterCenter = new Cartesian3();\nvar fromPointsMinBoxPt = new Cartesian3();\nvar fromPointsMaxBoxPt = new Cartesian3();\nvar fromPointsNaiveCenterScratch = new Cartesian3();\nvar volumeConstant = (4.0 / 3.0) * CesiumMath.PI;\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.\n * The bounding sphere is computed by running two algorithms, a naive algorithm and\n * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.\n *\n * @param {Cartesian3[]} [positions] An array of points that the bounding sphere will enclose. Each point must have <code>x</code>, <code>y</code>, and <code>z</code> properties.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @see {@link http://help.agi.com/AGIComponents/html/BlogBoundingSphere.htm|Bounding Sphere computation article}\n */\nBoundingSphere.fromPoints = function (positions, result) {\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n var currentPos = Cartesian3.clone(positions[0], fromPointsCurrentPos);\n\n var xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n var yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n var zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n var xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n var yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n var zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n var numPositions = positions.length;\n var i;\n for (i = 1; i < numPositions; i++) {\n Cartesian3.clone(positions[i], currentPos);\n\n var x = currentPos.x;\n var y = currentPos.y;\n var z = currentPos.z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n Cartesian3.clone(currentPos, xMin);\n }\n\n if (x > xMax.x) {\n Cartesian3.clone(currentPos, xMax);\n }\n\n if (y < yMin.y) {\n Cartesian3.clone(currentPos, yMin);\n }\n\n if (y > yMax.y) {\n Cartesian3.clone(currentPos, yMax);\n }\n\n if (z < zMin.z) {\n Cartesian3.clone(currentPos, zMin);\n }\n\n if (z > zMax.z) {\n Cartesian3.clone(currentPos, zMax);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n var xSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\n );\n var ySpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\n );\n var zSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\n );\n\n // Set the diameter endpoints to the largest span.\n var diameter1 = xMin;\n var diameter2 = xMax;\n var maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n var ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n var radiusSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\n );\n var ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n var minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n var maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n var naiveCenter = Cartesian3.midpoint(\n minBoxPt,\n maxBoxPt,\n fromPointsNaiveCenterScratch\n );\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n var naiveRadius = 0;\n for (i = 0; i < numPositions; i++) {\n Cartesian3.clone(positions[i], currentPos);\n\n // Find the furthest point from the naive center to calculate the naive radius.\n var r = Cartesian3.magnitude(\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\n );\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n var oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\n );\n if (oldCenterToPointSquared > radiusSquared) {\n var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n var oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x =\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n oldCenterToPoint;\n ritterCenter.y =\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n oldCenterToPoint;\n ritterCenter.z =\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n Cartesian3.clone(ritterCenter, result.center);\n result.radius = ritterRadius;\n } else {\n Cartesian3.clone(naiveCenter, result.center);\n result.radius = naiveRadius;\n }\n\n return result;\n};\n\nvar defaultProjection = new GeographicProjection();\nvar fromRectangle2DLowerLeft = new Cartesian3();\nvar fromRectangle2DUpperRight = new Cartesian3();\nvar fromRectangle2DSouthwest = new Cartographic();\nvar fromRectangle2DNortheast = new Cartographic();\n\n/**\n * Computes a bounding sphere from a rectangle projected in 2D.\n *\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangle2D = function (rectangle, projection, result) {\n return BoundingSphere.fromRectangleWithHeights2D(\n rectangle,\n projection,\n 0.0,\n 0.0,\n result\n );\n};\n\n/**\n * Computes a bounding sphere from a rectangle projected in 2D. The bounding sphere accounts for the\n * object's minimum and maximum heights over the rectangle.\n *\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {Number} [minimumHeight=0.0] The minimum height over the rectangle.\n * @param {Number} [maximumHeight=0.0] The maximum height over the rectangle.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangleWithHeights2D = function (\n rectangle,\n projection,\n minimumHeight,\n maximumHeight,\n result\n) {\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (!defined(rectangle)) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n projection = defaultValue(projection, defaultProjection);\n\n Rectangle.southwest(rectangle, fromRectangle2DSouthwest);\n fromRectangle2DSouthwest.height = minimumHeight;\n Rectangle.northeast(rectangle, fromRectangle2DNortheast);\n fromRectangle2DNortheast.height = maximumHeight;\n\n var lowerLeft = projection.project(\n fromRectangle2DSouthwest,\n fromRectangle2DLowerLeft\n );\n var upperRight = projection.project(\n fromRectangle2DNortheast,\n fromRectangle2DUpperRight\n );\n\n var width = upperRight.x - lowerLeft.x;\n var height = upperRight.y - lowerLeft.y;\n var elevation = upperRight.z - lowerLeft.z;\n\n result.radius =\n Math.sqrt(width * width + height * height + elevation * elevation) * 0.5;\n var center = result.center;\n center.x = lowerLeft.x + width * 0.5;\n center.y = lowerLeft.y + height * 0.5;\n center.z = lowerLeft.z + elevation * 0.5;\n return result;\n};\n\nvar fromRectangle3DScratch = [];\n\n/**\n * Computes a bounding sphere from a rectangle in 3D. The bounding sphere is created using a subsample of points\n * on the ellipsoid and contained in the rectangle. It may not be accurate for all rectangles on all types of ellipsoids.\n *\n * @param {Rectangle} [rectangle] The valid rectangle used to create a bounding sphere.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the rectangle.\n * @param {Number} [surfaceHeight=0.0] The height above the surface of the ellipsoid.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangle3D = function (\n rectangle,\n ellipsoid,\n surfaceHeight,\n result\n) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n surfaceHeight = defaultValue(surfaceHeight, 0.0);\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (!defined(rectangle)) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n var positions = Rectangle.subsample(\n rectangle,\n ellipsoid,\n surfaceHeight,\n fromRectangle3DScratch\n );\n return BoundingSphere.fromPoints(positions, result);\n};\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are\n * stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\n * ensure a tight fit.\n *\n * @param {Number[]} [positions] An array of points that the bounding sphere will enclose. Each point\n * is formed from three elements in the array in the order X, Y, Z.\n * @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the\n * origin of the coordinate system. This is useful when the positions are to be used for\n * relative-to-center (RTC) rendering.\n * @param {Number} [stride=3] The number of array elements per vertex. It must be at least 3, but it may\n * be higher. Regardless of the value of this parameter, the X coordinate of the first position\n * is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index\n * 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If\n * the stride is 5, however, two array elements are skipped and the next position begins at array\n * index 5.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @example\n * // Compute the bounding sphere from 3 positions, each specified relative to a center.\n * // In addition to the X, Y, and Z coordinates, the points array contains two additional\n * // elements per point which are ignored for the purpose of computing the bounding sphere.\n * var center = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * var points = [1.0, 2.0, 3.0, 0.1, 0.2,\n * 4.0, 5.0, 6.0, 0.1, 0.2,\n * 7.0, 8.0, 9.0, 0.1, 0.2];\n * var sphere = Cesium.BoundingSphere.fromVertices(points, center, 5);\n *\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\n */\nBoundingSphere.fromVertices = function (positions, center, stride, result) {\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n center = defaultValue(center, Cartesian3.ZERO);\n\n stride = defaultValue(stride, 3);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"stride\", stride, 3);\n //>>includeEnd('debug');\n\n var currentPos = fromPointsCurrentPos;\n currentPos.x = positions[0] + center.x;\n currentPos.y = positions[1] + center.y;\n currentPos.z = positions[2] + center.z;\n\n var xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n var yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n var zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n var xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n var yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n var zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n var numElements = positions.length;\n var i;\n for (i = 0; i < numElements; i += stride) {\n var x = positions[i] + center.x;\n var y = positions[i + 1] + center.y;\n var z = positions[i + 2] + center.z;\n\n currentPos.x = x;\n currentPos.y = y;\n currentPos.z = z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n Cartesian3.clone(currentPos, xMin);\n }\n\n if (x > xMax.x) {\n Cartesian3.clone(currentPos, xMax);\n }\n\n if (y < yMin.y) {\n Cartesian3.clone(currentPos, yMin);\n }\n\n if (y > yMax.y) {\n Cartesian3.clone(currentPos, yMax);\n }\n\n if (z < zMin.z) {\n Cartesian3.clone(currentPos, zMin);\n }\n\n if (z > zMax.z) {\n Cartesian3.clone(currentPos, zMax);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n var xSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\n );\n var ySpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\n );\n var zSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\n );\n\n // Set the diameter endpoints to the largest span.\n var diameter1 = xMin;\n var diameter2 = xMax;\n var maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n var ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n var radiusSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\n );\n var ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n var minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n var maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n var naiveCenter = Cartesian3.midpoint(\n minBoxPt,\n maxBoxPt,\n fromPointsNaiveCenterScratch\n );\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n var naiveRadius = 0;\n for (i = 0; i < numElements; i += stride) {\n currentPos.x = positions[i] + center.x;\n currentPos.y = positions[i + 1] + center.y;\n currentPos.z = positions[i + 2] + center.z;\n\n // Find the furthest point from the naive center to calculate the naive radius.\n var r = Cartesian3.magnitude(\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\n );\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n var oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\n );\n if (oldCenterToPointSquared > radiusSquared) {\n var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n var oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x =\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n oldCenterToPoint;\n ritterCenter.y =\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n oldCenterToPoint;\n ritterCenter.z =\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n Cartesian3.clone(ritterCenter, result.center);\n result.radius = ritterRadius;\n } else {\n Cartesian3.clone(naiveCenter, result.center);\n result.radius = naiveRadius;\n }\n\n return result;\n};\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of EncodedCartesian3s, where the points are\n * stored in parallel flat arrays in X, Y, Z, order. The bounding sphere is computed by running two\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\n * ensure a tight fit.\n *\n * @param {Number[]} [positionsHigh] An array of high bits of the encoded cartesians that the bounding sphere will enclose. Each point\n * is formed from three elements in the array in the order X, Y, Z.\n * @param {Number[]} [positionsLow] An array of low bits of the encoded cartesians that the bounding sphere will enclose. Each point\n * is formed from three elements in the array in the order X, Y, Z.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\n */\nBoundingSphere.fromEncodedCartesianVertices = function (\n positionsHigh,\n positionsLow,\n result\n) {\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (\n !defined(positionsHigh) ||\n !defined(positionsLow) ||\n positionsHigh.length !== positionsLow.length ||\n positionsHigh.length === 0\n ) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n var currentPos = fromPointsCurrentPos;\n currentPos.x = positionsHigh[0] + positionsLow[0];\n currentPos.y = positionsHigh[1] + positionsLow[1];\n currentPos.z = positionsHigh[2] + positionsLow[2];\n\n var xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n var yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n var zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n var xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n var yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n var zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n var numElements = positionsHigh.length;\n var i;\n for (i = 0; i < numElements; i += 3) {\n var x = positionsHigh[i] + positionsLow[i];\n var y = positionsHigh[i + 1] + positionsLow[i + 1];\n var z = positionsHigh[i + 2] + positionsLow[i + 2];\n\n currentPos.x = x;\n currentPos.y = y;\n currentPos.z = z;\n\n // Store points containing the the smallest and largest components\n if (x < xMin.x) {\n Cartesian3.clone(currentPos, xMin);\n }\n\n if (x > xMax.x) {\n Cartesian3.clone(currentPos, xMax);\n }\n\n if (y < yMin.y) {\n Cartesian3.clone(currentPos, yMin);\n }\n\n if (y > yMax.y) {\n Cartesian3.clone(currentPos, yMax);\n }\n\n if (z < zMin.z) {\n Cartesian3.clone(currentPos, zMin);\n }\n\n if (z > zMax.z) {\n Cartesian3.clone(currentPos, zMax);\n }\n }\n\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n var xSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\n );\n var ySpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\n );\n var zSpan = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\n );\n\n // Set the diameter endpoints to the largest span.\n var diameter1 = xMin;\n var diameter2 = xMax;\n var maxSpan = xSpan;\n if (ySpan > maxSpan) {\n maxSpan = ySpan;\n diameter1 = yMin;\n diameter2 = yMax;\n }\n if (zSpan > maxSpan) {\n maxSpan = zSpan;\n diameter1 = zMin;\n diameter2 = zMax;\n }\n\n // Calculate the center of the initial sphere found by Ritter's algorithm\n var ritterCenter = fromPointsRitterCenter;\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n // Calculate the radius of the initial sphere found by Ritter's algorithm\n var radiusSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\n );\n var ritterRadius = Math.sqrt(radiusSquared);\n\n // Find the center of the sphere found using the Naive method.\n var minBoxPt = fromPointsMinBoxPt;\n minBoxPt.x = xMin.x;\n minBoxPt.y = yMin.y;\n minBoxPt.z = zMin.z;\n\n var maxBoxPt = fromPointsMaxBoxPt;\n maxBoxPt.x = xMax.x;\n maxBoxPt.y = yMax.y;\n maxBoxPt.z = zMax.z;\n\n var naiveCenter = Cartesian3.midpoint(\n minBoxPt,\n maxBoxPt,\n fromPointsNaiveCenterScratch\n );\n\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\n var naiveRadius = 0;\n for (i = 0; i < numElements; i += 3) {\n currentPos.x = positionsHigh[i] + positionsLow[i];\n currentPos.y = positionsHigh[i + 1] + positionsLow[i + 1];\n currentPos.z = positionsHigh[i + 2] + positionsLow[i + 2];\n\n // Find the furthest point from the naive center to calculate the naive radius.\n var r = Cartesian3.magnitude(\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\n );\n if (r > naiveRadius) {\n naiveRadius = r;\n }\n\n // Make adjustments to the Ritter Sphere to include all points.\n var oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\n );\n if (oldCenterToPointSquared > radiusSquared) {\n var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n // Calculate new radius to include the point that lies outside\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n radiusSquared = ritterRadius * ritterRadius;\n // Calculate center of new Ritter sphere\n var oldToNew = oldCenterToPoint - ritterRadius;\n ritterCenter.x =\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n oldCenterToPoint;\n ritterCenter.y =\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n oldCenterToPoint;\n ritterCenter.z =\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n oldCenterToPoint;\n }\n }\n\n if (ritterRadius < naiveRadius) {\n Cartesian3.clone(ritterCenter, result.center);\n result.radius = ritterRadius;\n } else {\n Cartesian3.clone(naiveCenter, result.center);\n result.radius = naiveRadius;\n }\n\n return result;\n};\n\n/**\n * Computes a bounding sphere from the corner points of an axis-aligned bounding box. The sphere\n * tighly and fully encompases the box.\n *\n * @param {Cartesian3} [corner] The minimum height over the rectangle.\n * @param {Cartesian3} [oppositeCorner] The maximum height over the rectangle.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * // Create a bounding sphere around the unit cube\n * var sphere = Cesium.BoundingSphere.fromCornerPoints(new Cesium.Cartesian3(-0.5, -0.5, -0.5), new Cesium.Cartesian3(0.5, 0.5, 0.5));\n */\nBoundingSphere.fromCornerPoints = function (corner, oppositeCorner, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"corner\", corner);\n Check.typeOf.object(\"oppositeCorner\", oppositeCorner);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n var center = Cartesian3.midpoint(corner, oppositeCorner, result.center);\n result.radius = Cartesian3.distance(center, oppositeCorner);\n return result;\n};\n\n/**\n * Creates a bounding sphere encompassing an ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid around which to create a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * var boundingSphere = Cesium.BoundingSphere.fromEllipsoid(ellipsoid);\n */\nBoundingSphere.fromEllipsoid = function (ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = ellipsoid.maximumRadius;\n return result;\n};\n\nvar fromBoundingSpheresScratch = new Cartesian3();\n\n/**\n * Computes a tight-fitting bounding sphere enclosing the provided array of bounding spheres.\n *\n * @param {BoundingSphere[]} [boundingSpheres] The array of bounding spheres.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromBoundingSpheres = function (boundingSpheres, result) {\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n if (!defined(boundingSpheres) || boundingSpheres.length === 0) {\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n result.radius = 0.0;\n return result;\n }\n\n var length = boundingSpheres.length;\n if (length === 1) {\n return BoundingSphere.clone(boundingSpheres[0], result);\n }\n\n if (length === 2) {\n return BoundingSphere.union(boundingSpheres[0], boundingSpheres[1], result);\n }\n\n var positions = [];\n var i;\n for (i = 0; i < length; i++) {\n positions.push(boundingSpheres[i].center);\n }\n\n result = BoundingSphere.fromPoints(positions, result);\n\n var center = result.center;\n var radius = result.radius;\n for (i = 0; i < length; i++) {\n var tmp = boundingSpheres[i];\n radius = Math.max(\n radius,\n Cartesian3.distance(center, tmp.center, fromBoundingSpheresScratch) +\n tmp.radius\n );\n }\n result.radius = radius;\n\n return result;\n};\n\nvar fromOrientedBoundingBoxScratchU = new Cartesian3();\nvar fromOrientedBoundingBoxScratchV = new Cartesian3();\nvar fromOrientedBoundingBoxScratchW = new Cartesian3();\n\n/**\n * Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box.\n *\n * @param {OrientedBoundingBox} orientedBoundingBox The oriented bounding box.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromOrientedBoundingBox = function (\n orientedBoundingBox,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"orientedBoundingBox\", orientedBoundingBox);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n var halfAxes = orientedBoundingBox.halfAxes;\n var u = Matrix3.getColumn(halfAxes, 0, fromOrientedBoundingBoxScratchU);\n var v = Matrix3.getColumn(halfAxes, 1, fromOrientedBoundingBoxScratchV);\n var w = Matrix3.getColumn(halfAxes, 2, fromOrientedBoundingBoxScratchW);\n\n Cartesian3.add(u, v, u);\n Cartesian3.add(u, w, u);\n\n result.center = Cartesian3.clone(orientedBoundingBox.center, result.center);\n result.radius = Cartesian3.magnitude(u);\n\n return result;\n};\n\n/**\n * Duplicates a BoundingSphere instance.\n *\n * @param {BoundingSphere} sphere The bounding sphere to duplicate.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. (Returns undefined if sphere is undefined)\n */\nBoundingSphere.clone = function (sphere, result) {\n if (!defined(sphere)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new BoundingSphere(sphere.center, sphere.radius);\n }\n\n result.center = Cartesian3.clone(sphere.center, result.center);\n result.radius = sphere.radius;\n return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nBoundingSphere.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoundingSphere} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nBoundingSphere.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var center = value.center;\n array[startingIndex++] = center.x;\n array[startingIndex++] = center.y;\n array[startingIndex++] = center.z;\n array[startingIndex] = value.radius;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoundingSphere} [result] The object into which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n */\nBoundingSphere.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n var center = result.center;\n center.x = array[startingIndex++];\n center.y = array[startingIndex++];\n center.z = array[startingIndex++];\n result.radius = array[startingIndex];\n return result;\n};\n\nvar unionScratch = new Cartesian3();\nvar unionScratchCenter = new Cartesian3();\n/**\n * Computes a bounding sphere that contains both the left and right bounding spheres.\n *\n * @param {BoundingSphere} left A sphere to enclose in a bounding sphere.\n * @param {BoundingSphere} right A sphere to enclose in a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.union = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n var leftCenter = left.center;\n var leftRadius = left.radius;\n var rightCenter = right.center;\n var rightRadius = right.radius;\n\n var toRightCenter = Cartesian3.subtract(\n rightCenter,\n leftCenter,\n unionScratch\n );\n var centerSeparation = Cartesian3.magnitude(toRightCenter);\n\n if (leftRadius >= centerSeparation + rightRadius) {\n // Left sphere wins.\n left.clone(result);\n return result;\n }\n\n if (rightRadius >= centerSeparation + leftRadius) {\n // Right sphere wins.\n right.clone(result);\n return result;\n }\n\n // There are two tangent points, one on far side of each sphere.\n var halfDistanceBetweenTangentPoints =\n (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n // Compute the center point halfway between the two tangent points.\n var center = Cartesian3.multiplyByScalar(\n toRightCenter,\n (-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation,\n unionScratchCenter\n );\n Cartesian3.add(center, leftCenter, center);\n Cartesian3.clone(center, result.center);\n result.radius = halfDistanceBetweenTangentPoints;\n\n return result;\n};\n\nvar expandScratch = new Cartesian3();\n/**\n * Computes a bounding sphere by enlarging the provided sphere to contain the provided point.\n *\n * @param {BoundingSphere} sphere A sphere to expand.\n * @param {Cartesian3} point A point to enclose in a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.expand = function (sphere, point, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"point\", point);\n //>>includeEnd('debug');\n\n result = BoundingSphere.clone(sphere, result);\n\n var radius = Cartesian3.magnitude(\n Cartesian3.subtract(point, result.center, expandScratch)\n );\n if (radius > result.radius) {\n result.radius = radius;\n }\n\n return result;\n};\n\n/**\n * Determines which side of a plane a sphere is located.\n *\n * @param {BoundingSphere} sphere The bounding sphere to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n * intersects the plane.\n */\nBoundingSphere.intersectPlane = function (sphere, plane) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"plane\", plane);\n //>>includeEnd('debug');\n\n var center = sphere.center;\n var radius = sphere.radius;\n var normal = plane.normal;\n var distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\n\n if (distanceToPlane < -radius) {\n // The center point is negative side of the plane normal\n return Intersect.OUTSIDE;\n } else if (distanceToPlane < radius) {\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n return Intersect.INTERSECTING;\n }\n return Intersect.INSIDE;\n};\n\n/**\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\n *\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.transform = function (sphere, transform, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"transform\", transform);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n result.center = Matrix4.multiplyByPoint(\n transform,\n sphere.center,\n result.center\n );\n result.radius = Matrix4.getMaximumScale(transform) * sphere.radius;\n\n return result;\n};\n\nvar distanceSquaredToScratch = new Cartesian3();\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n *\n * @param {BoundingSphere} sphere The sphere.\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding spheres from back to front\n * spheres.sort(function(a, b) {\n * return Cesium.BoundingSphere.distanceSquaredTo(b, camera.positionWC) - Cesium.BoundingSphere.distanceSquaredTo(a, camera.positionWC);\n * });\n */\nBoundingSphere.distanceSquaredTo = function (sphere, cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n var diff = Cartesian3.subtract(\n sphere.center,\n cartesian,\n distanceSquaredToScratch\n );\n return Cartesian3.magnitudeSquared(diff) - sphere.radius * sphere.radius;\n};\n\n/**\n * Applies a 4x4 affine transformation matrix to a bounding sphere where there is no scale\n * The transformation matrix is not verified to have a uniform scale of 1.\n * This method is faster than computing the general bounding sphere transform using {@link BoundingSphere.transform}.\n *\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid);\n * var boundingSphere = new Cesium.BoundingSphere();\n * var newBoundingSphere = Cesium.BoundingSphere.transformWithoutScale(boundingSphere, modelMatrix);\n */\nBoundingSphere.transformWithoutScale = function (sphere, transform, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"transform\", transform);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingSphere();\n }\n\n result.center = Matrix4.multiplyByPoint(\n transform,\n sphere.center,\n result.center\n );\n result.radius = sphere.radius;\n\n return result;\n};\n\nvar scratchCartesian3 = new Cartesian3();\n/**\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\n * plus/minus the radius of the bounding sphere.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding sphere.\n *\n * @param {BoundingSphere} sphere The bounding sphere to calculate the distance to.\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\n */\nBoundingSphere.computePlaneDistances = function (\n sphere,\n position,\n direction,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"position\", position);\n Check.typeOf.object(\"direction\", direction);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Interval();\n }\n\n var toCenter = Cartesian3.subtract(\n sphere.center,\n position,\n scratchCartesian3\n );\n var mag = Cartesian3.dot(direction, toCenter);\n\n result.start = mag - sphere.radius;\n result.stop = mag + sphere.radius;\n return result;\n};\n\nvar projectTo2DNormalScratch = new Cartesian3();\nvar projectTo2DEastScratch = new Cartesian3();\nvar projectTo2DNorthScratch = new Cartesian3();\nvar projectTo2DWestScratch = new Cartesian3();\nvar projectTo2DSouthScratch = new Cartesian3();\nvar projectTo2DCartographicScratch = new Cartographic();\nvar projectTo2DPositionsScratch = new Array(8);\nfor (var n = 0; n < 8; ++n) {\n projectTo2DPositionsScratch[n] = new Cartesian3();\n}\n\nvar projectTo2DProjection = new GeographicProjection();\n/**\n * Creates a bounding sphere in 2D from a bounding sphere in 3D world coordinates.\n *\n * @param {BoundingSphere} sphere The bounding sphere to transform to 2D.\n * @param {Object} [projection=GeographicProjection] The projection to 2D.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.projectTo2D = function (sphere, projection, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n //>>includeEnd('debug');\n\n projection = defaultValue(projection, projectTo2DProjection);\n\n var ellipsoid = projection.ellipsoid;\n var center = sphere.center;\n var radius = sphere.radius;\n\n var normal;\n if (Cartesian3.equals(center, Cartesian3.ZERO)) {\n // Bounding sphere is at the center. The geodetic surface normal is not\n // defined here so pick the x-axis as a fallback.\n normal = Cartesian3.clone(Cartesian3.UNIT_X, projectTo2DNormalScratch);\n } else {\n normal = ellipsoid.geodeticSurfaceNormal(center, projectTo2DNormalScratch);\n }\n var east = Cartesian3.cross(\n Cartesian3.UNIT_Z,\n normal,\n projectTo2DEastScratch\n );\n Cartesian3.normalize(east, east);\n var north = Cartesian3.cross(normal, east, projectTo2DNorthScratch);\n Cartesian3.normalize(north, north);\n\n Cartesian3.multiplyByScalar(normal, radius, normal);\n Cartesian3.multiplyByScalar(north, radius, north);\n Cartesian3.multiplyByScalar(east, radius, east);\n\n var south = Cartesian3.negate(north, projectTo2DSouthScratch);\n var west = Cartesian3.negate(east, projectTo2DWestScratch);\n\n var positions = projectTo2DPositionsScratch;\n\n // top NE corner\n var corner = positions[0];\n Cartesian3.add(normal, north, corner);\n Cartesian3.add(corner, east, corner);\n\n // top NW corner\n corner = positions[1];\n Cartesian3.add(normal, north, corner);\n Cartesian3.add(corner, west, corner);\n\n // top SW corner\n corner = positions[2];\n Cartesian3.add(normal, south, corner);\n Cartesian3.add(corner, west, corner);\n\n // top SE corner\n corner = positions[3];\n Cartesian3.add(normal, south, corner);\n Cartesian3.add(corner, east, corner);\n\n Cartesian3.negate(normal, normal);\n\n // bottom NE corner\n corner = positions[4];\n Cartesian3.add(normal, north, corner);\n Cartesian3.add(corner, east, corner);\n\n // bottom NW corner\n corner = positions[5];\n Cartesian3.add(normal, north, corner);\n Cartesian3.add(corner, west, corner);\n\n // bottom SW corner\n corner = positions[6];\n Cartesian3.add(normal, south, corner);\n Cartesian3.add(corner, west, corner);\n\n // bottom SE corner\n corner = positions[7];\n Cartesian3.add(normal, south, corner);\n Cartesian3.add(corner, east, corner);\n\n var length = positions.length;\n for (var i = 0; i < length; ++i) {\n var position = positions[i];\n Cartesian3.add(center, position, position);\n var cartographic = ellipsoid.cartesianToCartographic(\n position,\n projectTo2DCartographicScratch\n );\n projection.project(cartographic, position);\n }\n\n result = BoundingSphere.fromPoints(positions, result);\n\n // swizzle center components\n center = result.center;\n var x = center.x;\n var y = center.y;\n var z = center.z;\n center.x = z;\n center.y = x;\n center.z = y;\n\n return result;\n};\n\n/**\n * Determines whether or not a sphere is hidden from view by the occluder.\n *\n * @param {BoundingSphere} sphere The bounding sphere surrounding the occludee object.\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nBoundingSphere.isOccluded = function (sphere, occluder) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"sphere\", sphere);\n Check.typeOf.object(\"occluder\", occluder);\n //>>includeEnd('debug');\n return !occluder.isBoundingSphereVisible(sphere);\n};\n\n/**\n * Compares the provided BoundingSphere componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingSphere} [left] The first BoundingSphere.\n * @param {BoundingSphere} [right] The second BoundingSphere.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nBoundingSphere.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Cartesian3.equals(left.center, right.center) &&\n left.radius === right.radius)\n );\n};\n\n/**\n * Determines which side of a plane the sphere is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n * intersects the plane.\n */\nBoundingSphere.prototype.intersectPlane = function (plane) {\n return BoundingSphere.intersectPlane(this, plane);\n};\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n *\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding spheres from back to front\n * spheres.sort(function(a, b) {\n * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\n * });\n */\nBoundingSphere.prototype.distanceSquaredTo = function (cartesian) {\n return BoundingSphere.distanceSquaredTo(this, cartesian);\n};\n\n/**\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\n * plus/minus the radius of the bounding sphere.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding sphere.\n *\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\n */\nBoundingSphere.prototype.computePlaneDistances = function (\n position,\n direction,\n result\n) {\n return BoundingSphere.computePlaneDistances(\n this,\n position,\n direction,\n result\n );\n};\n\n/**\n * Determines whether or not a sphere is hidden from view by the occluder.\n *\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nBoundingSphere.prototype.isOccluded = function (occluder) {\n return BoundingSphere.isOccluded(this, occluder);\n};\n\n/**\n * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingSphere} [right] The right hand side BoundingSphere.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nBoundingSphere.prototype.equals = function (right) {\n return BoundingSphere.equals(this, right);\n};\n\n/**\n * Duplicates this BoundingSphere instance.\n *\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.prototype.clone = function (result) {\n return BoundingSphere.clone(this, result);\n};\n\n/**\n * Computes the radius of the BoundingSphere.\n * @returns {Number} The radius of the BoundingSphere.\n */\nBoundingSphere.prototype.volume = function () {\n var radius = this.radius;\n return volumeConstant * radius * radius * radius;\n};\nexport default BoundingSphere;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\nimport Resource from \"./Resource.js\";\n\n/*global CESIUM_BASE_URL*/\n\nvar cesiumScriptRegex = /((?:.*\\/)|^)Cesium\\.js(?:\\?|\\#|$)/;\nfunction getBaseUrlFromCesiumScript() {\n var scripts = document.getElementsByTagName(\"script\");\n for (var i = 0, len = scripts.length; i < len; ++i) {\n var src = scripts[i].getAttribute(\"src\");\n var result = cesiumScriptRegex.exec(src);\n if (result !== null) {\n return result[1];\n }\n }\n return undefined;\n}\n\nvar a;\nfunction tryMakeAbsolute(url) {\n if (typeof document === \"undefined\") {\n //Node.js and Web Workers. In both cases, the URL will already be absolute.\n return url;\n }\n\n if (!defined(a)) {\n a = document.createElement(\"a\");\n }\n a.href = url;\n\n // IE only absolutizes href on get, not set\n // eslint-disable-next-line no-self-assign\n a.href = a.href;\n return a.href;\n}\n\nvar baseResource;\nfunction getCesiumBaseUrl() {\n if (defined(baseResource)) {\n return baseResource;\n }\n\n var baseUrlString;\n if (typeof CESIUM_BASE_URL !== \"undefined\") {\n baseUrlString = CESIUM_BASE_URL;\n } else if (\n typeof define === \"object\" &&\n defined(define.amd) &&\n !define.amd.toUrlUndefined &&\n defined(require.toUrl)\n ) {\n baseUrlString = getAbsoluteUri(\n \"..\",\n buildModuleUrl(\"Core/buildModuleUrl.js\")\n );\n } else {\n baseUrlString = getBaseUrlFromCesiumScript();\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(baseUrlString)) {\n throw new DeveloperError(\n \"Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL.\"\n );\n }\n //>>includeEnd('debug');\n\n baseResource = new Resource({\n url: tryMakeAbsolute(baseUrlString),\n });\n baseResource.appendForwardSlash();\n\n return baseResource;\n}\n\nfunction buildModuleUrlFromRequireToUrl(moduleID) {\n //moduleID will be non-relative, so require it relative to this module, in Core.\n return tryMakeAbsolute(require.toUrl(\"../\" + moduleID));\n}\n\nfunction buildModuleUrlFromBaseUrl(moduleID) {\n var resource = getCesiumBaseUrl().getDerivedResource({\n url: moduleID,\n });\n return resource.url;\n}\n\nvar implementation;\n\n/**\n * Given a relative URL under the Cesium base URL, returns an absolute URL.\n * @function\n *\n * @param {String} relativeUrl The relative path.\n * @returns {String} The absolutely URL representation of the provided path.\n *\n * @example\n * var viewer = new Cesium.Viewer(\"cesiumContainer\", {\n * imageryProvider: new Cesium.TileMapServiceImageryProvider({\n * url: Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\"),\n * }),\n * baseLayerPicker: false,\n * });\n */\nfunction buildModuleUrl(relativeUrl) {\n if (!defined(implementation)) {\n //select implementation\n if (\n typeof define === \"object\" &&\n defined(define.amd) &&\n !define.amd.toUrlUndefined &&\n defined(require.toUrl)\n ) {\n implementation = buildModuleUrlFromRequireToUrl;\n } else {\n implementation = buildModuleUrlFromBaseUrl;\n }\n }\n\n var url = implementation(relativeUrl);\n return url;\n}\n\n// exposed for testing\nbuildModuleUrl._cesiumScriptRegex = cesiumScriptRegex;\nbuildModuleUrl._buildModuleUrlFromBaseUrl = buildModuleUrlFromBaseUrl;\nbuildModuleUrl._clearBaseResource = function () {\n baseResource = undefined;\n};\n\n/**\n * Sets the base URL for resolving modules.\n * @param {String} value The new base URL.\n */\nbuildModuleUrl.setBaseUrl = function (value) {\n baseResource = Resource.DEFAULT.getDerivedResource({\n url: value,\n });\n};\n\n/**\n * Gets the base URL for resolving modules.\n */\nbuildModuleUrl.getCesiumBaseUrl = getCesiumBaseUrl;\n\nexport default buildModuleUrl;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A 2D Cartesian point.\n * @alias Cartesian2\n * @constructor\n *\n * @param {Number} [x=0.0] The X component.\n * @param {Number} [y=0.0] The Y component.\n *\n * @see Cartesian3\n * @see Cartesian4\n * @see Packable\n */\nfunction Cartesian2(x, y) {\n /**\n * The X component.\n * @type {Number}\n * @default 0.0\n */\n this.x = defaultValue(x, 0.0);\n\n /**\n * The Y component.\n * @type {Number}\n * @default 0.0\n */\n this.y = defaultValue(y, 0.0);\n}\n\n/**\n * Creates a Cartesian2 instance from x and y coordinates.\n *\n * @param {Number} x The x coordinate.\n * @param {Number} y The y coordinate.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.fromElements = function (x, y, result) {\n if (!defined(result)) {\n return new Cartesian2(x, y);\n }\n\n result.x = x;\n result.y = y;\n return result;\n};\n\n/**\n * Duplicates a Cartesian2 instance.\n *\n * @param {Cartesian2} cartesian The Cartesian to duplicate.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. (Returns undefined if cartesian is undefined)\n */\nCartesian2.clone = function (cartesian, result) {\n if (!defined(cartesian)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Cartesian2(cartesian.x, cartesian.y);\n }\n\n result.x = cartesian.x;\n result.y = cartesian.y;\n return result;\n};\n\n/**\n * Creates a Cartesian2 instance from an existing Cartesian3. This simply takes the\n * x and y properties of the Cartesian3 and drops z.\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian3 instance to create a Cartesian2 instance from.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.fromCartesian3 = Cartesian2.clone;\n\n/**\n * Creates a Cartesian2 instance from an existing Cartesian4. This simply takes the\n * x and y properties of the Cartesian4 and drops z and w.\n * @function\n *\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian2 instance from.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.fromCartesian4 = Cartesian2.clone;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCartesian2.packedLength = 2;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Cartesian2} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCartesian2.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.x;\n array[startingIndex] = value.y;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Cartesian2} [result] The object into which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Cartesian2();\n }\n result.x = array[startingIndex++];\n result.y = array[startingIndex];\n return result;\n};\n\n/**\n * Flattens an array of Cartesian2s into and array of components.\n *\n * @param {Cartesian2[]} array The array of cartesians to pack.\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 2 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 2) elements.\n\n * @returns {Number[]} The packed array.\n */\nCartesian2.packArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n var length = array.length;\n var resultLength = length * 2;\n if (!defined(result)) {\n result = new Array(resultLength);\n } else if (!Array.isArray(result) && result.length !== resultLength) {\n throw new DeveloperError(\n \"If result is a typed array, it must have exactly array.length * 2 elements\"\n );\n } else if (result.length !== resultLength) {\n result.length = resultLength;\n }\n\n for (var i = 0; i < length; ++i) {\n Cartesian2.pack(array[i], result, i * 2);\n }\n return result;\n};\n\n/**\n * Unpacks an array of cartesian components into and array of Cartesian2s.\n *\n * @param {Number[]} array The array of components to unpack.\n * @param {Cartesian2[]} [result] The array onto which to store the result.\n * @returns {Cartesian2[]} The unpacked array.\n */\nCartesian2.unpackArray = function (array, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 2);\n if (array.length % 2 !== 0) {\n throw new DeveloperError(\"array length must be a multiple of 2.\");\n }\n //>>includeEnd('debug');\n\n var length = array.length;\n if (!defined(result)) {\n result = new Array(length / 2);\n } else {\n result.length = length / 2;\n }\n\n for (var i = 0; i < length; i += 2) {\n var index = i / 2;\n result[index] = Cartesian2.unpack(array, i, result[index]);\n }\n return result;\n};\n\n/**\n * Creates a Cartesian2 from two consecutive elements in an array.\n * @function\n *\n * @param {Number[]} array The array whose two consecutive elements correspond to the x and y components, respectively.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian2 with (1.0, 2.0)\n * var v = [1.0, 2.0];\n * var p = Cesium.Cartesian2.fromArray(v);\n *\n * // Create a Cartesian2 with (1.0, 2.0) using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 2.0];\n * var p2 = Cesium.Cartesian2.fromArray(v2, 2);\n */\nCartesian2.fromArray = Cartesian2.unpack;\n\n/**\n * Computes the value of the maximum component for the supplied Cartesian.\n *\n * @param {Cartesian2} cartesian The cartesian to use.\n * @returns {Number} The value of the maximum component.\n */\nCartesian2.maximumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.max(cartesian.x, cartesian.y);\n};\n\n/**\n * Computes the value of the minimum component for the supplied Cartesian.\n *\n * @param {Cartesian2} cartesian The cartesian to use.\n * @returns {Number} The value of the minimum component.\n */\nCartesian2.minimumComponent = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return Math.min(cartesian.x, cartesian.y);\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n *\n * @param {Cartesian2} first A cartesian to compare.\n * @param {Cartesian2} second A cartesian to compare.\n * @param {Cartesian2} result The object into which to store the result.\n * @returns {Cartesian2} A cartesian with the minimum components.\n */\nCartesian2.minimumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.min(first.x, second.x);\n result.y = Math.min(first.y, second.y);\n\n return result;\n};\n\n/**\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n *\n * @param {Cartesian2} first A cartesian to compare.\n * @param {Cartesian2} second A cartesian to compare.\n * @param {Cartesian2} result The object into which to store the result.\n * @returns {Cartesian2} A cartesian with the maximum components.\n */\nCartesian2.maximumByComponent = function (first, second, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"first\", first);\n Check.typeOf.object(\"second\", second);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.max(first.x, second.x);\n result.y = Math.max(first.y, second.y);\n return result;\n};\n\n/**\n * Computes the provided Cartesian's squared magnitude.\n *\n * @param {Cartesian2} cartesian The Cartesian instance whose squared magnitude is to be computed.\n * @returns {Number} The squared magnitude.\n */\nCartesian2.magnitudeSquared = function (cartesian) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n return cartesian.x * cartesian.x + cartesian.y * cartesian.y;\n};\n\n/**\n * Computes the Cartesian's magnitude (length).\n *\n * @param {Cartesian2} cartesian The Cartesian instance whose magnitude is to be computed.\n * @returns {Number} The magnitude.\n */\nCartesian2.magnitude = function (cartesian) {\n return Math.sqrt(Cartesian2.magnitudeSquared(cartesian));\n};\n\nvar distanceScratch = new Cartesian2();\n\n/**\n * Computes the distance between two points.\n *\n * @param {Cartesian2} left The first point to compute the distance from.\n * @param {Cartesian2} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 1.0\n * var d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(2.0, 0.0));\n */\nCartesian2.distance = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian2.subtract(left, right, distanceScratch);\n return Cartesian2.magnitude(distanceScratch);\n};\n\n/**\n * Computes the squared distance between two points. Comparing squared distances\n * using this function is more efficient than comparing distances using {@link Cartesian2#distance}.\n *\n * @param {Cartesian2} left The first point to compute the distance from.\n * @param {Cartesian2} right The second point to compute the distance to.\n * @returns {Number} The distance between two points.\n *\n * @example\n * // Returns 4.0, not 2.0\n * var d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(3.0, 0.0));\n */\nCartesian2.distanceSquared = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian2.subtract(left, right, distanceScratch);\n return Cartesian2.magnitudeSquared(distanceScratch);\n};\n\n/**\n * Computes the normalized form of the supplied Cartesian.\n *\n * @param {Cartesian2} cartesian The Cartesian to be normalized.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.normalize = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var magnitude = Cartesian2.magnitude(cartesian);\n\n result.x = cartesian.x / magnitude;\n result.y = cartesian.y / magnitude;\n\n //>>includeStart('debug', pragmas.debug);\n if (isNaN(result.x) || isNaN(result.y)) {\n throw new DeveloperError(\"normalized result is not a number\");\n }\n //>>includeEnd('debug');\n\n return result;\n};\n\n/**\n * Computes the dot (scalar) product of two Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @returns {Number} The dot product.\n */\nCartesian2.dot = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n return left.x * right.x + left.y * right.y;\n};\n\n/**\n * Computes the componentwise product of two Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.multiplyComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x * right.x;\n result.y = left.y * right.y;\n return result;\n};\n\n/**\n * Computes the componentwise quotient of two Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.divideComponents = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x / right.x;\n result.y = left.y / right.y;\n return result;\n};\n\n/**\n * Computes the componentwise sum of two Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x + right.x;\n result.y = left.y + right.y;\n return result;\n};\n\n/**\n * Computes the componentwise difference of two Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x - right.x;\n result.y = left.y - right.y;\n return result;\n};\n\n/**\n * Multiplies the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian2} cartesian The Cartesian to be scaled.\n * @param {Number} scalar The scalar to multiply with.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.multiplyByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x * scalar;\n result.y = cartesian.y * scalar;\n return result;\n};\n\n/**\n * Divides the provided Cartesian componentwise by the provided scalar.\n *\n * @param {Cartesian2} cartesian The Cartesian to be divided.\n * @param {Number} scalar The scalar to divide by.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.divideByScalar = function (cartesian, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = cartesian.x / scalar;\n result.y = cartesian.y / scalar;\n return result;\n};\n\n/**\n * Negates the provided Cartesian.\n *\n * @param {Cartesian2} cartesian The Cartesian to be negated.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.negate = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = -cartesian.x;\n result.y = -cartesian.y;\n return result;\n};\n\n/**\n * Computes the absolute value of the provided Cartesian.\n *\n * @param {Cartesian2} cartesian The Cartesian whose absolute value is to be computed.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.abs = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Math.abs(cartesian.x);\n result.y = Math.abs(cartesian.y);\n return result;\n};\n\nvar lerpScratch = new Cartesian2();\n/**\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n *\n * @param {Cartesian2} start The value corresponding to t at 0.0.\n * @param {Cartesian2} end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nCartesian2.lerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n Cartesian2.multiplyByScalar(end, t, lerpScratch);\n result = Cartesian2.multiplyByScalar(start, 1.0 - t, result);\n return Cartesian2.add(lerpScratch, result, result);\n};\n\nvar angleBetweenScratch = new Cartesian2();\nvar angleBetweenScratch2 = new Cartesian2();\n/**\n * Returns the angle, in radians, between the provided Cartesians.\n *\n * @param {Cartesian2} left The first Cartesian.\n * @param {Cartesian2} right The second Cartesian.\n * @returns {Number} The angle between the Cartesians.\n */\nCartesian2.angleBetween = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n Cartesian2.normalize(left, angleBetweenScratch);\n Cartesian2.normalize(right, angleBetweenScratch2);\n return CesiumMath.acosClamped(\n Cartesian2.dot(angleBetweenScratch, angleBetweenScratch2)\n );\n};\n\nvar mostOrthogonalAxisScratch = new Cartesian2();\n/**\n * Returns the axis that is most orthogonal to the provided Cartesian.\n *\n * @param {Cartesian2} cartesian The Cartesian on which to find the most orthogonal axis.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The most orthogonal axis.\n */\nCartesian2.mostOrthogonalAxis = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var f = Cartesian2.normalize(cartesian, mostOrthogonalAxisScratch);\n Cartesian2.abs(f, f);\n\n if (f.x <= f.y) {\n result = Cartesian2.clone(Cartesian2.UNIT_X, result);\n } else {\n result = Cartesian2.clone(Cartesian2.UNIT_Y, result);\n }\n\n return result;\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian2} [left] The first Cartesian.\n * @param {Cartesian2} [right] The second Cartesian.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartesian2.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.x === right.x &&\n left.y === right.y)\n );\n};\n\n/**\n * @private\n */\nCartesian2.equalsArray = function (cartesian, array, offset) {\n return cartesian.x === array[offset] && cartesian.y === array[offset + 1];\n};\n\n/**\n * Compares the provided Cartesians componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian2} [left] The first Cartesian.\n * @param {Cartesian2} [right] The second Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian2.equalsEpsilon = function (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n CesiumMath.equalsEpsilon(\n left.x,\n right.x,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.y,\n right.y,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\n\n/**\n * An immutable Cartesian2 instance initialized to (0.0, 0.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.ZERO = Object.freeze(new Cartesian2(0.0, 0.0));\n\n/**\n * An immutable Cartesian2 instance initialized to (1.0, 0.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.UNIT_X = Object.freeze(new Cartesian2(1.0, 0.0));\n\n/**\n * An immutable Cartesian2 instance initialized to (0.0, 1.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.UNIT_Y = Object.freeze(new Cartesian2(0.0, 1.0));\n\n/**\n * Duplicates this Cartesian2 instance.\n *\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.prototype.clone = function (result) {\n return Cartesian2.clone(this, result);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartesian2} [right] The right hand side Cartesian.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nCartesian2.prototype.equals = function (right) {\n return Cartesian2.equals(this, right);\n};\n\n/**\n * Compares this Cartesian against the provided Cartesian componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Cartesian2} [right] The right hand side Cartesian.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nCartesian2.prototype.equalsEpsilon = function (\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return Cartesian2.equalsEpsilon(\n this,\n right,\n relativeEpsilon,\n absoluteEpsilon\n );\n};\n\n/**\n * Creates a string representing this Cartesian in the format '(x, y)'.\n *\n * @returns {String} A string representing the provided Cartesian in the format '(x, y)'.\n */\nCartesian2.prototype.toString = function () {\n return \"(\" + this.x + \", \" + this.y + \")\";\n};\nexport default Cartesian2;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A tiling scheme for geometry referenced to a simple {@link GeographicProjection} where\n * longitude and latitude are directly mapped to X and Y. This projection is commonly\n * known as geographic, equirectangular, equidistant cylindrical, or plate carrée.\n *\n * @alias GeographicTilingScheme\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid whose surface is being tiled. Defaults to\n * the WGS84 ellipsoid.\n * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the tiling scheme.\n * @param {Number} [options.numberOfLevelZeroTilesX=2] The number of tiles in the X direction at level zero of\n * the tile tree.\n * @param {Number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of\n * the tile tree.\n */\nfunction GeographicTilingScheme(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._rectangle = defaultValue(options.rectangle, Rectangle.MAX_VALUE);\n this._projection = new GeographicProjection(this._ellipsoid);\n this._numberOfLevelZeroTilesX = defaultValue(\n options.numberOfLevelZeroTilesX,\n 2\n );\n this._numberOfLevelZeroTilesY = defaultValue(\n options.numberOfLevelZeroTilesY,\n 1\n );\n}\n\nObject.defineProperties(GeographicTilingScheme.prototype, {\n /**\n * Gets the ellipsoid that is tiled by this tiling scheme.\n * @memberof GeographicTilingScheme.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Gets the rectangle, in radians, covered by this tiling scheme.\n * @memberof GeographicTilingScheme.prototype\n * @type {Rectangle}\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n\n /**\n * Gets the map projection used by this tiling scheme.\n * @memberof GeographicTilingScheme.prototype\n * @type {MapProjection}\n */\n projection: {\n get: function () {\n return this._projection;\n },\n },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the X direction at the given level.\n */\nGeographicTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) {\n return this._numberOfLevelZeroTilesX << level;\n};\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the Y direction at the given level.\n */\nGeographicTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) {\n return this._numberOfLevelZeroTilesY << level;\n};\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n * is undefined.\n */\nGeographicTilingScheme.prototype.rectangleToNativeRectangle = function (\n rectangle,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var west = CesiumMath.toDegrees(rectangle.west);\n var south = CesiumMath.toDegrees(rectangle.south);\n var east = CesiumMath.toDegrees(rectangle.east);\n var north = CesiumMath.toDegrees(rectangle.north);\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.tileXYToNativeRectangle = function (\n x,\n y,\n level,\n result\n) {\n var rectangleRadians = this.tileXYToRectangle(x, y, level, result);\n rectangleRadians.west = CesiumMath.toDegrees(rectangleRadians.west);\n rectangleRadians.south = CesiumMath.toDegrees(rectangleRadians.south);\n rectangleRadians.east = CesiumMath.toDegrees(rectangleRadians.east);\n rectangleRadians.north = CesiumMath.toDegrees(rectangleRadians.north);\n return rectangleRadians;\n};\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.tileXYToRectangle = function (\n x,\n y,\n level,\n result\n) {\n var rectangle = this._rectangle;\n\n var xTiles = this.getNumberOfXTilesAtLevel(level);\n var yTiles = this.getNumberOfYTilesAtLevel(level);\n\n var xTileWidth = rectangle.width / xTiles;\n var west = x * xTileWidth + rectangle.west;\n var east = (x + 1) * xTileWidth + rectangle.west;\n\n var yTileHeight = rectangle.height / yTiles;\n var north = rectangle.north - y * yTileHeight;\n var south = rectangle.north - (y + 1) * yTileHeight;\n\n if (!defined(result)) {\n result = new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n *\n * @param {Cartographic} position The position.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n * if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.positionToTileXY = function (\n position,\n level,\n result\n) {\n var rectangle = this._rectangle;\n if (!Rectangle.contains(rectangle, position)) {\n // outside the bounds of the tiling scheme\n return undefined;\n }\n\n var xTiles = this.getNumberOfXTilesAtLevel(level);\n var yTiles = this.getNumberOfYTilesAtLevel(level);\n\n var xTileWidth = rectangle.width / xTiles;\n var yTileHeight = rectangle.height / yTiles;\n\n var longitude = position.longitude;\n if (rectangle.east < rectangle.west) {\n longitude += CesiumMath.TWO_PI;\n }\n\n var xTileCoordinate = ((longitude - rectangle.west) / xTileWidth) | 0;\n if (xTileCoordinate >= xTiles) {\n xTileCoordinate = xTiles - 1;\n }\n\n var yTileCoordinate =\n ((rectangle.north - position.latitude) / yTileHeight) | 0;\n if (yTileCoordinate >= yTiles) {\n yTileCoordinate = yTiles - 1;\n }\n\n if (!defined(result)) {\n return new Cartesian2(xTileCoordinate, yTileCoordinate);\n }\n\n result.x = xTileCoordinate;\n result.y = yTileCoordinate;\n return result;\n};\nexport default GeographicTilingScheme;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\nvar scratchDiagonalCartesianNE = new Cartesian3();\nvar scratchDiagonalCartesianSW = new Cartesian3();\nvar scratchDiagonalCartographic = new Cartographic();\nvar scratchCenterCartesian = new Cartesian3();\nvar scratchSurfaceCartesian = new Cartesian3();\n\nvar scratchBoundingSphere = new BoundingSphere();\nvar tilingScheme = new GeographicTilingScheme();\nvar scratchCorners = [\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n];\nvar scratchTileXY = new Cartesian2();\n\n/**\n * A collection of functions for approximating terrain height\n * @private\n */\nvar ApproximateTerrainHeights = {};\n\n/**\n * Initializes the minimum and maximum terrain heights\n * @return {Promise<void>}\n */\nApproximateTerrainHeights.initialize = function () {\n var initPromise = ApproximateTerrainHeights._initPromise;\n if (defined(initPromise)) {\n return initPromise;\n }\n\n initPromise = Resource.fetchJson(\n buildModuleUrl(\"Assets/approximateTerrainHeights.json\")\n ).then(function (json) {\n ApproximateTerrainHeights._terrainHeights = json;\n });\n ApproximateTerrainHeights._initPromise = initPromise;\n\n return initPromise;\n};\n\n/**\n * Computes the minimum and maximum terrain heights for a given rectangle\n * @param {Rectangle} rectangle The bounding rectangle\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid\n * @return {{minimumTerrainHeight: Number, maximumTerrainHeight: Number}}\n */\nApproximateTerrainHeights.getMinimumMaximumHeights = function (\n rectangle,\n ellipsoid\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"rectangle\", rectangle);\n if (!defined(ApproximateTerrainHeights._terrainHeights)) {\n throw new DeveloperError(\n \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\"\n );\n }\n //>>includeEnd('debug');\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var xyLevel = getTileXYLevel(rectangle);\n\n // Get the terrain min/max for that tile\n var minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n var maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n if (defined(xyLevel)) {\n var key = xyLevel.level + \"-\" + xyLevel.x + \"-\" + xyLevel.y;\n var heights = ApproximateTerrainHeights._terrainHeights[key];\n if (defined(heights)) {\n minTerrainHeight = heights[0];\n maxTerrainHeight = heights[1];\n }\n\n // Compute min by taking the center of the NE->SW diagonal and finding distance to the surface\n ellipsoid.cartographicToCartesian(\n Rectangle.northeast(rectangle, scratchDiagonalCartographic),\n scratchDiagonalCartesianNE\n );\n ellipsoid.cartographicToCartesian(\n Rectangle.southwest(rectangle, scratchDiagonalCartographic),\n scratchDiagonalCartesianSW\n );\n\n Cartesian3.midpoint(\n scratchDiagonalCartesianSW,\n scratchDiagonalCartesianNE,\n scratchCenterCartesian\n );\n var surfacePosition = ellipsoid.scaleToGeodeticSurface(\n scratchCenterCartesian,\n scratchSurfaceCartesian\n );\n if (defined(surfacePosition)) {\n var distance = Cartesian3.distance(\n scratchCenterCartesian,\n surfacePosition\n );\n minTerrainHeight = Math.min(minTerrainHeight, -distance);\n } else {\n minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n }\n }\n\n minTerrainHeight = Math.max(\n ApproximateTerrainHeights._defaultMinTerrainHeight,\n minTerrainHeight\n );\n\n return {\n minimumTerrainHeight: minTerrainHeight,\n maximumTerrainHeight: maxTerrainHeight,\n };\n};\n\n/**\n * Computes the bounding sphere based on the tile heights in the rectangle\n * @param {Rectangle} rectangle The bounding rectangle\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid\n * @return {BoundingSphere} The result bounding sphere\n */\nApproximateTerrainHeights.getBoundingSphere = function (rectangle, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"rectangle\", rectangle);\n if (!defined(ApproximateTerrainHeights._terrainHeights)) {\n throw new DeveloperError(\n \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\"\n );\n }\n //>>includeEnd('debug');\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var xyLevel = getTileXYLevel(rectangle);\n\n // Get the terrain max for that tile\n var maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n if (defined(xyLevel)) {\n var key = xyLevel.level + \"-\" + xyLevel.x + \"-\" + xyLevel.y;\n var heights = ApproximateTerrainHeights._terrainHeights[key];\n if (defined(heights)) {\n maxTerrainHeight = heights[1];\n }\n }\n\n var result = BoundingSphere.fromRectangle3D(rectangle, ellipsoid, 0.0);\n BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n maxTerrainHeight,\n scratchBoundingSphere\n );\n\n return BoundingSphere.union(result, scratchBoundingSphere, result);\n};\n\nfunction getTileXYLevel(rectangle) {\n Cartographic.fromRadians(\n rectangle.east,\n rectangle.north,\n 0.0,\n scratchCorners[0]\n );\n Cartographic.fromRadians(\n rectangle.west,\n rectangle.north,\n 0.0,\n scratchCorners[1]\n );\n Cartographic.fromRadians(\n rectangle.east,\n rectangle.south,\n 0.0,\n scratchCorners[2]\n );\n Cartographic.fromRadians(\n rectangle.west,\n rectangle.south,\n 0.0,\n scratchCorners[3]\n );\n\n // Determine which tile the bounding rectangle is in\n var lastLevelX = 0,\n lastLevelY = 0;\n var currentX = 0,\n currentY = 0;\n var maxLevel = ApproximateTerrainHeights._terrainHeightsMaxLevel;\n var i;\n for (i = 0; i <= maxLevel; ++i) {\n var failed = false;\n for (var j = 0; j < 4; ++j) {\n var corner = scratchCorners[j];\n tilingScheme.positionToTileXY(corner, i, scratchTileXY);\n if (j === 0) {\n currentX = scratchTileXY.x;\n currentY = scratchTileXY.y;\n } else if (currentX !== scratchTileXY.x || currentY !== scratchTileXY.y) {\n failed = true;\n break;\n }\n }\n\n if (failed) {\n break;\n }\n\n lastLevelX = currentX;\n lastLevelY = currentY;\n }\n\n if (i === 0) {\n return undefined;\n }\n\n return {\n x: lastLevelX,\n y: lastLevelY,\n level: i > maxLevel ? maxLevel : i - 1,\n };\n}\n\nApproximateTerrainHeights._terrainHeightsMaxLevel = 6;\nApproximateTerrainHeights._defaultMaxTerrainHeight = 9000.0;\nApproximateTerrainHeights._defaultMinTerrainHeight = -100000.0;\nApproximateTerrainHeights._terrainHeights = undefined;\nApproximateTerrainHeights._initPromise = undefined;\n\nObject.defineProperties(ApproximateTerrainHeights, {\n /**\n * Determines if the terrain heights are initialized and ready to use. To initialize the terrain heights,\n * call {@link ApproximateTerrainHeights#initialize} and wait for the returned promise to resolve.\n * @type {Boolean}\n * @readonly\n * @memberof ApproximateTerrainHeights\n */\n initialized: {\n get: function () {\n return defined(ApproximateTerrainHeights._terrainHeights);\n },\n },\n});\nexport default ApproximateTerrainHeights;\n","var html = ['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'];\n\n// SVG\nvar svg = ['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern'];\n\nvar svgFilters = ['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence'];\n\nvar mathMl = ['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmuliscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mpspace', 'msqrt', 'mystyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover'];\n\nvar text = ['#text'];\n\nvar html$1 = ['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns'];\n\nvar svg$1 = ['accent-height', 'accumulate', 'additivive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan'];\n\nvar mathMl$1 = ['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns'];\n\nvar xml = ['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink'];\n\n/* Add properties to a lookup table */\nfunction addToSet(set, array) {\n var l = array.length;\n while (l--) {\n if (typeof array[l] === 'string') {\n array[l] = array[l].toLowerCase();\n }\n set[array[l]] = true;\n }\n return set;\n}\n\n/* Shallow clone an object */\nfunction clone(object) {\n var newObject = {};\n var property = void 0;\n for (property in object) {\n if (Object.prototype.hasOwnProperty.call(object, property)) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n}\n\nvar MUSTACHE_EXPR = /\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm; // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nvar ERB_EXPR = /<%[\\s\\S]*|[\\s\\S]*%>/gm;\nvar DATA_ATTR = /^data-[\\-\\w.\\u00B7-\\uFFFF]/; // eslint-disable-line no-useless-escape\nvar ARIA_ATTR = /^aria-[\\-\\w]+$/; // eslint-disable-line no-useless-escape\nvar IS_ALLOWED_URI = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nvar IS_SCRIPT_OR_DATA = /^(?:\\w+script|data):/i;\nvar ATTR_WHITESPACE = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n\nfunction createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '1.0.8';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n var useDOMParser = false; // See comment below\n var removeTitle = false; // See comment below\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser;\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n getElementsByTagName = _document.getElementsByTagName,\n createDocumentFragment = _document.createDocumentFragment;\n var importNode = originalDocument.importNode;\n\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for jQuery's $() factory? */\n var SAFE_FOR_JQUERY = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string.\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify. */\n var RETURN_DOM_IMPORT = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = addToSet({}, ['audio', 'head', 'math', 'script', 'style', 'template', 'svg', 'video']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n /* Shield configuration object from tampering */\n if ((typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (Object && 'freeze' in Object) {\n Object.freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n DOMPurify.removed.push({ element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (err) {\n node.outerHTML = '';\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n DOMPurify.removed.push({\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (err) {\n DOMPurify.removed.push({\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = dirty.match(/^[\\s]+/);\n leadingWhitespace = matches && matches[0];\n if (leadingWhitespace) {\n dirty = dirty.slice(leadingWhitespace.length);\n }\n }\n\n /* Use DOMParser to workaround Firefox bug (see comment below) */\n if (useDOMParser) {\n try {\n doc = new DOMParser().parseFromString(dirty, 'text/html');\n } catch (err) {}\n }\n\n /* Remove title to fix an mXSS bug in older MS Edge */\n if (removeTitle) {\n addToSet(FORBID_TAGS, ['title']);\n }\n\n /* Otherwise use createHTMLDocument, because DOMParser is unsafe in\n Safari (see comment below) */\n if (!doc || !doc.documentElement) {\n doc = implementation.createHTMLDocument('');\n var _doc = doc,\n body = _doc.body;\n\n body.parentNode.removeChild(body.parentNode.firstElementChild);\n body.outerHTML = dirty;\n }\n\n if (leadingWhitespace) {\n doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n };\n\n // Firefox uses a different parser for innerHTML rather than\n // DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)\n // which means that you *must* use DOMParser, otherwise the output may\n // not be safe if used in a document.write context later.\n //\n // So we feature detect the Firefox bug and use the DOMParser if necessary.\n //\n // MS Edge, in older versions, is affected by an mXSS behavior. The second\n // check tests for the behavior and fixes it if necessary.\n if (DOMPurify.isSupported) {\n (function () {\n try {\n var doc = _initDocument('<svg><p><style><img src=\"</style><img src=x onerror=alert(1)//\">');\n if (doc.querySelector('svg img')) {\n useDOMParser = true;\n }\n } catch (err) {}\n })();\n (function () {\n try {\n var doc = _initDocument('<x/><title></title><img>');\n if (doc.querySelector('title').textContent.match(/<\\/title/)) {\n removeTitle = true;\n }\n } catch (err) {}\n })();\n }\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {\n return NodeFilter.FILTER_ACCEPT;\n }, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function') {\n return true;\n }\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(obj) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n hooks[entryPoint].forEach(function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = currentNode.nodeName.toLowerCase();\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for black-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') {\n try {\n currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);\n } catch (err) {}\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Convert markup to cover jQuery behavior */\n if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n if (currentNode.innerHTML) {\n currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '<');\n } else {\n currentNode.innerHTML = currentNode.textContent.replace(/</g, '<');\n }\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = content.replace(MUSTACHE_EXPR$$1, ' ');\n content = content.replace(ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n DOMPurify.removed.push({ element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = value.replace(MUSTACHE_EXPR$$1, ' ');\n value = value.replace(ERB_EXPR$$1, ' ');\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if ((lcName === 'src' || lcName === 'xlink:href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {\n // This attribute is safe\n /* Check for binary attributes */\n // eslint-disable-next-line no-negated-condition\n } else if (!value) {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n } else {\n return false;\n }\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} node to sanitize\n */\n // eslint-disable-next-line complexity\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var idAttr = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = attr.value.trim();\n lcName = name.toLowerCase();\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Remove attribute */\n // Safari (iOS + Mac), last tested v8.0.5, crashes if you try to\n // remove a \"name\" attribute from an <img> tag that has an \"id\"\n // attribute at the time.\n if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) {\n idAttr = attributes.id;\n attributes = Array.prototype.slice.apply(attributes);\n _removeAttribute('id', currentNode);\n _removeAttribute(name, currentNode);\n if (attributes.indexOf(idAttr) > l) {\n currentNode.setAttribute('id', idAttr.value);\n }\n } else if (\n // This works around a bug in Safari, where input[type=file]\n // cannot be dynamically set after type has been removed\n currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {\n continue;\n } else {\n // This avoids a crash in Safari v9.0 with double-ids.\n // The trick is to first set the id to be empty and then to\n // remove the attribute\n if (name === 'id') {\n currentNode.setAttribute(name, '');\n }\n _removeAttribute(name, currentNode);\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n DOMPurify.removed.pop();\n } catch (err) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw new TypeError('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw new TypeError('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n if (IN_PLACE) {\n /* No special handling necessary for in-place sanitization */\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!-->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else {\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n return dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /* AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs. */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n var lcTag = tag.toLowerCase();\n var lcName = attr.toLowerCase();\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n hooks[entryPoint].push(hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint].pop();\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nvar purify = createDOMPurify();\n\nexport default purify;\n","import DOMPurify from \"../ThirdParty/purify.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\nvar nextCreditId = 0;\nvar creditToId = {};\n\n/**\n * A credit contains data pertaining to how to display attributions/credits for certain content on the screen.\n * @param {String} html An string representing an html code snippet\n * @param {Boolean} [showOnScreen=false] If true, the credit will be visible in the main credit container. Otherwise, it will appear in a popover\n *\n * @alias Credit\n * @constructor\n *\n * @exception {DeveloperError} html is required.\n *\n * @example\n * //Create a credit with a tooltip, image and link\n * var credit = new Cesium.Credit('<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"/images/cesium_logo.png\" title=\"Cesium\"/></a>');\n */\nfunction Credit(html, showOnScreen) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"html\", html);\n //>>includeEnd('debug');\n var id;\n var key = html;\n\n if (defined(creditToId[key])) {\n id = creditToId[key];\n } else {\n id = nextCreditId++;\n creditToId[key] = id;\n }\n\n showOnScreen = defaultValue(showOnScreen, false);\n\n // Credits are immutable so generate an id to use to optimize equal()\n this._id = id;\n this._html = html;\n this._showOnScreen = showOnScreen;\n this._element = undefined;\n}\n\nObject.defineProperties(Credit.prototype, {\n /**\n * The credit content\n * @memberof Credit.prototype\n * @type {String}\n * @readonly\n */\n html: {\n get: function () {\n return this._html;\n },\n },\n\n /**\n * @memberof Credit.prototype\n * @type {Number}\n * @readonly\n *\n * @private\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n\n /**\n * Whether the credit should be displayed on screen or in a lightbox\n * @memberof Credit.prototype\n * @type {Boolean}\n * @readonly\n */\n showOnScreen: {\n get: function () {\n return this._showOnScreen;\n },\n },\n\n /**\n * Gets the credit element\n * @memberof Credit.prototype\n * @type {HTMLElement}\n * @readonly\n */\n element: {\n get: function () {\n if (!defined(this._element)) {\n var html = DOMPurify.sanitize(this._html);\n\n var div = document.createElement(\"div\");\n div._creditId = this._id;\n div.style.display = \"inline\";\n div.innerHTML = html;\n\n var links = div.querySelectorAll(\"a\");\n for (var i = 0; i < links.length; i++) {\n links[i].setAttribute(\"target\", \"_blank\");\n }\n\n this._element = div;\n }\n return this._element;\n },\n },\n});\n\n/**\n * Returns true if the credits are equal\n *\n * @param {Credit} left The first credit\n * @param {Credit} right The second credit\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCredit.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) && defined(right) && left._id === right._id)\n );\n};\n\n/**\n * Returns true if the credits are equal\n *\n * @param {Credit} credit The credit to compare to.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCredit.prototype.equals = function (credit) {\n return Credit.equals(this, credit);\n};\n\n/**\n * @private\n * @param attribution\n * @return {Credit}\n */\nCredit.getIonCredit = function (attribution) {\n var showOnScreen =\n defined(attribution.collapsible) && !attribution.collapsible;\n var credit = new Credit(attribution.html, showOnScreen);\n\n credit._isIon = credit.html.indexOf(\"ion-credit.png\") !== -1;\n return credit;\n};\n\n/**\n * Duplicates a Credit instance.\n *\n * @param {Credit} [credit] The Credit to duplicate.\n * @returns {Credit} A new Credit instance that is a duplicate of the one provided. (Returns undefined if the credit is undefined)\n */\nCredit.clone = function (credit) {\n if (defined(credit)) {\n return new Credit(credit.html, credit.showOnScreen);\n }\n};\nexport default Credit;\n","/**\n * The encoding that is used for a heightmap\n *\n * @enum {Number}\n */\nvar HeightmapEncoding = {\n /**\n * No encoding\n *\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * LERC encoding\n *\n * @type {Number}\n * @constant\n *\n * @see {@link https://github.com/Esri/lerc|The LERC specification}\n */\n LERC: 1,\n};\nexport default Object.freeze(HeightmapEncoding);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Intersect from \"./Intersect.js\";\n\n/**\n * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes.\n * @alias AxisAlignedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [minimum=Cartesian3.ZERO] The minimum point along the x, y, and z axes.\n * @param {Cartesian3} [maximum=Cartesian3.ZERO] The maximum point along the x, y, and z axes.\n * @param {Cartesian3} [center] The center of the box; automatically computed if not supplied.\n *\n * @see BoundingSphere\n * @see BoundingRectangle\n */\nfunction AxisAlignedBoundingBox(minimum, maximum, center) {\n /**\n * The minimum point defining the bounding box.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.minimum = Cartesian3.clone(defaultValue(minimum, Cartesian3.ZERO));\n\n /**\n * The maximum point defining the bounding box.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.maximum = Cartesian3.clone(defaultValue(maximum, Cartesian3.ZERO));\n\n //If center was not defined, compute it.\n if (!defined(center)) {\n center = Cartesian3.midpoint(this.minimum, this.maximum, new Cartesian3());\n } else {\n center = Cartesian3.clone(center);\n }\n\n /**\n * The center point of the bounding box.\n * @type {Cartesian3}\n */\n this.center = center;\n}\n\n/**\n * Computes an instance of an AxisAlignedBoundingBox. The box is determined by\n * finding the points spaced the farthest apart on the x, y, and z axes.\n *\n * @param {Cartesian3[]} positions List of points that the bounding box will enclose. Each point must have a <code>x</code>, <code>y</code>, and <code>z</code> properties.\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an axis aligned bounding box enclosing two points.\n * var box = Cesium.AxisAlignedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\n */\nAxisAlignedBoundingBox.fromPoints = function (positions, result) {\n if (!defined(result)) {\n result = new AxisAlignedBoundingBox();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.minimum = Cartesian3.clone(Cartesian3.ZERO, result.minimum);\n result.maximum = Cartesian3.clone(Cartesian3.ZERO, result.maximum);\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n return result;\n }\n\n var minimumX = positions[0].x;\n var minimumY = positions[0].y;\n var minimumZ = positions[0].z;\n\n var maximumX = positions[0].x;\n var maximumY = positions[0].y;\n var maximumZ = positions[0].z;\n\n var length = positions.length;\n for (var i = 1; i < length; i++) {\n var p = positions[i];\n var x = p.x;\n var y = p.y;\n var z = p.z;\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n minimumZ = Math.min(z, minimumZ);\n maximumZ = Math.max(z, maximumZ);\n }\n\n var minimum = result.minimum;\n minimum.x = minimumX;\n minimum.y = minimumY;\n minimum.z = minimumZ;\n\n var maximum = result.maximum;\n maximum.x = maximumX;\n maximum.y = maximumY;\n maximum.z = maximumZ;\n\n result.center = Cartesian3.midpoint(minimum, maximum, result.center);\n\n return result;\n};\n\n/**\n * Duplicates a AxisAlignedBoundingBox instance.\n *\n * @param {AxisAlignedBoundingBox} box The bounding box to duplicate.\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\n */\nAxisAlignedBoundingBox.clone = function (box, result) {\n if (!defined(box)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new AxisAlignedBoundingBox(box.minimum, box.maximum, box.center);\n }\n\n result.minimum = Cartesian3.clone(box.minimum, result.minimum);\n result.maximum = Cartesian3.clone(box.maximum, result.maximum);\n result.center = Cartesian3.clone(box.center, result.center);\n return result;\n};\n\n/**\n * Compares the provided AxisAlignedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {AxisAlignedBoundingBox} [left] The first AxisAlignedBoundingBox.\n * @param {AxisAlignedBoundingBox} [right] The second AxisAlignedBoundingBox.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nAxisAlignedBoundingBox.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Cartesian3.equals(left.center, right.center) &&\n Cartesian3.equals(left.minimum, right.minimum) &&\n Cartesian3.equals(left.maximum, right.maximum))\n );\n};\n\nvar intersectScratch = new Cartesian3();\n/**\n * Determines which side of a plane a box is located.\n *\n * @param {AxisAlignedBoundingBox} box The bounding box to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nAxisAlignedBoundingBox.intersectPlane = function (box, plane) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"box\", box);\n Check.defined(\"plane\", plane);\n //>>includeEnd('debug');\n\n intersectScratch = Cartesian3.subtract(\n box.maximum,\n box.minimum,\n intersectScratch\n );\n var h = Cartesian3.multiplyByScalar(intersectScratch, 0.5, intersectScratch); //The positive half diagonal\n var normal = plane.normal;\n var e =\n h.x * Math.abs(normal.x) +\n h.y * Math.abs(normal.y) +\n h.z * Math.abs(normal.z);\n var s = Cartesian3.dot(box.center, normal) + plane.distance; //signed distance from center\n\n if (s - e > 0) {\n return Intersect.INSIDE;\n }\n\n if (s + e < 0) {\n //Not in front because normals point inward\n return Intersect.OUTSIDE;\n }\n\n return Intersect.INTERSECTING;\n};\n\n/**\n * Duplicates this AxisAlignedBoundingBox instance.\n *\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\n */\nAxisAlignedBoundingBox.prototype.clone = function (result) {\n return AxisAlignedBoundingBox.clone(this, result);\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nAxisAlignedBoundingBox.prototype.intersectPlane = function (plane) {\n return AxisAlignedBoundingBox.intersectPlane(this, plane);\n};\n\n/**\n * Compares this AxisAlignedBoundingBox against the provided AxisAlignedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {AxisAlignedBoundingBox} [right] The right hand side AxisAlignedBoundingBox.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nAxisAlignedBoundingBox.prototype.equals = function (right) {\n return AxisAlignedBoundingBox.equals(this, right);\n};\nexport default AxisAlignedBoundingBox;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Determine whether or not other objects are visible or hidden behind the visible horizon defined by\n * an {@link Ellipsoid} and a camera position. The ellipsoid is assumed to be located at the\n * origin of the coordinate system. This class uses the algorithm described in the\n * {@link https://cesium.com/blog/2013/04/25/Horizon-culling/|Horizon Culling} blog post.\n *\n * @alias EllipsoidalOccluder\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to use as an occluder.\n * @param {Cartesian3} [cameraPosition] The coordinate of the viewer/camera. If this parameter is not\n * specified, {@link EllipsoidalOccluder#cameraPosition} must be called before\n * testing visibility.\n *\n * @constructor\n *\n * @example\n * // Construct an ellipsoidal occluder with radii 1.0, 1.1, and 0.9.\n * var cameraPosition = new Cesium.Cartesian3(5.0, 6.0, 7.0);\n * var occluderEllipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * var occluder = new Cesium.EllipsoidalOccluder(occluderEllipsoid, cameraPosition);\n *\n * @private\n */\nfunction EllipsoidalOccluder(ellipsoid, cameraPosition) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n //>>includeEnd('debug');\n\n this._ellipsoid = ellipsoid;\n this._cameraPosition = new Cartesian3();\n this._cameraPositionInScaledSpace = new Cartesian3();\n this._distanceToLimbInScaledSpaceSquared = 0.0;\n\n // cameraPosition fills in the above values\n if (defined(cameraPosition)) {\n this.cameraPosition = cameraPosition;\n }\n}\n\nObject.defineProperties(EllipsoidalOccluder.prototype, {\n /**\n * Gets the occluding ellipsoid.\n * @memberof EllipsoidalOccluder.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n /**\n * Gets or sets the position of the camera.\n * @memberof EllipsoidalOccluder.prototype\n * @type {Cartesian3}\n */\n cameraPosition: {\n get: function () {\n return this._cameraPosition;\n },\n set: function (cameraPosition) {\n // See https://cesium.com/blog/2013/04/25/Horizon-culling/\n var ellipsoid = this._ellipsoid;\n var cv = ellipsoid.transformPositionToScaledSpace(\n cameraPosition,\n this._cameraPositionInScaledSpace\n );\n var vhMagnitudeSquared = Cartesian3.magnitudeSquared(cv) - 1.0;\n\n Cartesian3.clone(cameraPosition, this._cameraPosition);\n this._cameraPositionInScaledSpace = cv;\n this._distanceToLimbInScaledSpaceSquared = vhMagnitudeSquared;\n },\n },\n});\n\nvar scratchCartesian = new Cartesian3();\n\n/**\n * Determines whether or not a point, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {Cartesian3} occludee The point to test for visibility.\n * @returns {Boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n * @example\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\n * var ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * var occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\n * var point = new Cesium.Cartesian3(0, -3, -3);\n * occluder.isPointVisible(point); //returns true\n */\nEllipsoidalOccluder.prototype.isPointVisible = function (occludee) {\n var ellipsoid = this._ellipsoid;\n var occludeeScaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\n occludee,\n scratchCartesian\n );\n return isScaledSpacePointVisible(\n occludeeScaledSpacePosition,\n this._cameraPositionInScaledSpace,\n this._distanceToLimbInScaledSpaceSquared\n );\n};\n\n/**\n * Determines whether or not a point expressed in the ellipsoid scaled space, is hidden from view by the\n * occluder. To transform a Cartesian X, Y, Z position in the coordinate system aligned with the ellipsoid\n * into the scaled space, call {@link Ellipsoid#transformPositionToScaledSpace}.\n *\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space.\n * @returns {Boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n * @example\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\n * var ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * var occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\n * var point = new Cesium.Cartesian3(0, -3, -3);\n * var scaledSpacePoint = ellipsoid.transformPositionToScaledSpace(point);\n * occluder.isScaledSpacePointVisible(scaledSpacePoint); //returns true\n */\nEllipsoidalOccluder.prototype.isScaledSpacePointVisible = function (\n occludeeScaledSpacePosition\n) {\n return isScaledSpacePointVisible(\n occludeeScaledSpacePosition,\n this._cameraPositionInScaledSpace,\n this._distanceToLimbInScaledSpaceSquared\n );\n};\n\nvar scratchCameraPositionInScaledSpaceShrunk = new Cartesian3();\n\n/**\n * Similar to {@link EllipsoidalOccluder#isScaledSpacePointVisible} except tests against an\n * ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. This is intended to be used with points generated by\n * {@link EllipsoidalOccluder#computeHorizonCullingPointPossiblyUnderEllipsoid} or\n * {@link EllipsoidalOccluder#computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space of the possibly-shrunk ellipsoid.\n * @returns {Boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n */\nEllipsoidalOccluder.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid = function (\n occludeeScaledSpacePosition,\n minimumHeight\n) {\n var ellipsoid = this._ellipsoid;\n var vhMagnitudeSquared;\n var cv;\n\n if (\n defined(minimumHeight) &&\n minimumHeight < 0.0 &&\n ellipsoid.minimumRadius > -minimumHeight\n ) {\n // This code is similar to the cameraPosition setter, but unrolled for performance because it will be called a lot.\n cv = scratchCameraPositionInScaledSpaceShrunk;\n cv.x = this._cameraPosition.x / (ellipsoid.radii.x + minimumHeight);\n cv.y = this._cameraPosition.y / (ellipsoid.radii.y + minimumHeight);\n cv.z = this._cameraPosition.z / (ellipsoid.radii.z + minimumHeight);\n vhMagnitudeSquared = cv.x * cv.x + cv.y * cv.y + cv.z * cv.z - 1.0;\n } else {\n cv = this._cameraPositionInScaledSpace;\n vhMagnitudeSquared = this._distanceToLimbInScaledSpaceSquared;\n }\n\n return isScaledSpacePointVisible(\n occludeeScaledSpacePosition,\n cv,\n vhMagnitudeSquared\n );\n};\n\n/**\n * Computes a point that can be used for horizon culling from a list of positions. If the point is below\n * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point\n * is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n * A reasonable direction to use is the direction from the center of the ellipsoid to\n * the center of the bounding sphere computed from the positions. The direction need not\n * be normalized.\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\n * ellipsoid's axes.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPoint = function (\n directionToPoint,\n positions,\n result\n) {\n return computeHorizonCullingPointFromPositions(\n this._ellipsoid,\n directionToPoint,\n positions,\n result\n );\n};\n\nvar scratchEllipsoidShrunk = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\n\n/**\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPoint} except computes the culling\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n * A reasonable direction to use is the direction from the center of the ellipsoid to\n * the center of the bounding sphere computed from the positions. The direction need not\n * be normalized.\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\n * ellipsoid's axes.\n * @param {Number} [minimumHeight] The minimum height of all positions. If this value is undefined, all positions are assumed to be above the ellipsoid.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid = function (\n directionToPoint,\n positions,\n minimumHeight,\n result\n) {\n var possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\n this._ellipsoid,\n minimumHeight,\n scratchEllipsoidShrunk\n );\n return computeHorizonCullingPointFromPositions(\n possiblyShrunkEllipsoid,\n directionToPoint,\n positions,\n result\n );\n};\n/**\n * Computes a point that can be used for horizon culling from a list of positions. If the point is below\n * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point\n * is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n * A reasonable direction to use is the direction from the center of the ellipsoid to\n * the center of the bounding sphere computed from the positions. The direction need not\n * be normalized.\n * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\n * ellipsoid's axes.\n * @param {Number} [stride=3]\n * @param {Cartesian3} [center=Cartesian3.ZERO]\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVertices = function (\n directionToPoint,\n vertices,\n stride,\n center,\n result\n) {\n return computeHorizonCullingPointFromVertices(\n this._ellipsoid,\n directionToPoint,\n vertices,\n stride,\n center,\n result\n );\n};\n\n/**\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPointFromVertices} except computes the culling\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n * A reasonable direction to use is the direction from the center of the ellipsoid to\n * the center of the bounding sphere computed from the positions. The direction need not\n * be normalized.\n * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\n * ellipsoid's axes.\n * @param {Number} [stride=3]\n * @param {Cartesian3} [center=Cartesian3.ZERO]\n * @param {Number} [minimumHeight] The minimum height of all vertices. If this value is undefined, all vertices are assumed to be above the ellipsoid.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid = function (\n directionToPoint,\n vertices,\n stride,\n center,\n minimumHeight,\n result\n) {\n var possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\n this._ellipsoid,\n minimumHeight,\n scratchEllipsoidShrunk\n );\n return computeHorizonCullingPointFromVertices(\n possiblyShrunkEllipsoid,\n directionToPoint,\n vertices,\n stride,\n center,\n result\n );\n};\n\nvar subsampleScratch = [];\n\n/**\n * Computes a point that can be used for horizon culling of a rectangle. If the point is below\n * the horizon, the ellipsoid-conforming rectangle is guaranteed to be below the horizon as well.\n * The returned point is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Rectangle} rectangle The rectangle for which to compute the horizon culling point.\n * @param {Ellipsoid} ellipsoid The ellipsoid on which the rectangle is defined. This may be different from\n * the ellipsoid used by this instance for occlusion testing.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromRectangle = function (\n rectangle,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var positions = Rectangle.subsample(\n rectangle,\n ellipsoid,\n 0.0,\n subsampleScratch\n );\n var bs = BoundingSphere.fromPoints(positions);\n\n // If the bounding sphere center is too close to the center of the occluder, it doesn't make\n // sense to try to horizon cull it.\n if (Cartesian3.magnitude(bs.center) < 0.1 * ellipsoid.minimumRadius) {\n return undefined;\n }\n\n return this.computeHorizonCullingPoint(bs.center, positions, result);\n};\n\nvar scratchEllipsoidShrunkRadii = new Cartesian3();\n\nfunction getPossiblyShrunkEllipsoid(ellipsoid, minimumHeight, result) {\n if (\n defined(minimumHeight) &&\n minimumHeight < 0.0 &&\n ellipsoid.minimumRadius > -minimumHeight\n ) {\n var ellipsoidShrunkRadii = Cartesian3.fromElements(\n ellipsoid.radii.x + minimumHeight,\n ellipsoid.radii.y + minimumHeight,\n ellipsoid.radii.z + minimumHeight,\n scratchEllipsoidShrunkRadii\n );\n ellipsoid = Ellipsoid.fromCartesian3(ellipsoidShrunkRadii, result);\n }\n return ellipsoid;\n}\n\nfunction computeHorizonCullingPointFromPositions(\n ellipsoid,\n directionToPoint,\n positions,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"directionToPoint\", directionToPoint);\n Check.defined(\"positions\", positions);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\n ellipsoid,\n directionToPoint\n );\n var resultMagnitude = 0.0;\n\n for (var i = 0, len = positions.length; i < len; ++i) {\n var position = positions[i];\n var candidateMagnitude = computeMagnitude(\n ellipsoid,\n position,\n scaledSpaceDirectionToPoint\n );\n if (candidateMagnitude < 0.0) {\n // all points should face the same direction, but this one doesn't, so return undefined\n return undefined;\n }\n resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\n }\n\n return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\n}\n\nvar positionScratch = new Cartesian3();\n\nfunction computeHorizonCullingPointFromVertices(\n ellipsoid,\n directionToPoint,\n vertices,\n stride,\n center,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"directionToPoint\", directionToPoint);\n Check.defined(\"vertices\", vertices);\n Check.typeOf.number(\"stride\", stride);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n stride = defaultValue(stride, 3);\n center = defaultValue(center, Cartesian3.ZERO);\n var scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\n ellipsoid,\n directionToPoint\n );\n var resultMagnitude = 0.0;\n\n for (var i = 0, len = vertices.length; i < len; i += stride) {\n positionScratch.x = vertices[i] + center.x;\n positionScratch.y = vertices[i + 1] + center.y;\n positionScratch.z = vertices[i + 2] + center.z;\n\n var candidateMagnitude = computeMagnitude(\n ellipsoid,\n positionScratch,\n scaledSpaceDirectionToPoint\n );\n if (candidateMagnitude < 0.0) {\n // all points should face the same direction, but this one doesn't, so return undefined\n return undefined;\n }\n resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\n }\n\n return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\n}\n\nfunction isScaledSpacePointVisible(\n occludeeScaledSpacePosition,\n cameraPositionInScaledSpace,\n distanceToLimbInScaledSpaceSquared\n) {\n // See https://cesium.com/blog/2013/04/25/Horizon-culling/\n var cv = cameraPositionInScaledSpace;\n var vhMagnitudeSquared = distanceToLimbInScaledSpaceSquared;\n var vt = Cartesian3.subtract(\n occludeeScaledSpacePosition,\n cv,\n scratchCartesian\n );\n var vtDotVc = -Cartesian3.dot(vt, cv);\n // If vhMagnitudeSquared < 0 then we are below the surface of the ellipsoid and\n // in this case, set the culling plane to be on V.\n var isOccluded =\n vhMagnitudeSquared < 0\n ? vtDotVc > 0\n : vtDotVc > vhMagnitudeSquared &&\n (vtDotVc * vtDotVc) / Cartesian3.magnitudeSquared(vt) >\n vhMagnitudeSquared;\n return !isOccluded;\n}\n\nvar scaledSpaceScratch = new Cartesian3();\nvar directionScratch = new Cartesian3();\n\nfunction computeMagnitude(ellipsoid, position, scaledSpaceDirectionToPoint) {\n var scaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\n position,\n scaledSpaceScratch\n );\n var magnitudeSquared = Cartesian3.magnitudeSquared(scaledSpacePosition);\n var magnitude = Math.sqrt(magnitudeSquared);\n var direction = Cartesian3.divideByScalar(\n scaledSpacePosition,\n magnitude,\n directionScratch\n );\n\n // For the purpose of this computation, points below the ellipsoid are consider to be on it instead.\n magnitudeSquared = Math.max(1.0, magnitudeSquared);\n magnitude = Math.max(1.0, magnitude);\n\n var cosAlpha = Cartesian3.dot(direction, scaledSpaceDirectionToPoint);\n var sinAlpha = Cartesian3.magnitude(\n Cartesian3.cross(direction, scaledSpaceDirectionToPoint, direction)\n );\n var cosBeta = 1.0 / magnitude;\n var sinBeta = Math.sqrt(magnitudeSquared - 1.0) * cosBeta;\n\n return 1.0 / (cosAlpha * cosBeta - sinAlpha * sinBeta);\n}\n\nfunction magnitudeToPoint(\n scaledSpaceDirectionToPoint,\n resultMagnitude,\n result\n) {\n // The horizon culling point is undefined if there were no positions from which to compute it,\n // the directionToPoint is pointing opposite all of the positions, or if we computed NaN or infinity.\n if (\n resultMagnitude <= 0.0 ||\n resultMagnitude === 1.0 / 0.0 ||\n resultMagnitude !== resultMagnitude\n ) {\n return undefined;\n }\n\n return Cartesian3.multiplyByScalar(\n scaledSpaceDirectionToPoint,\n resultMagnitude,\n result\n );\n}\n\nvar directionToPointScratch = new Cartesian3();\n\nfunction computeScaledSpaceDirectionToPoint(ellipsoid, directionToPoint) {\n if (Cartesian3.equals(directionToPoint, Cartesian3.ZERO)) {\n return directionToPoint;\n }\n\n ellipsoid.transformPositionToScaledSpace(\n directionToPoint,\n directionToPointScratch\n );\n return Cartesian3.normalize(directionToPointScratch, directionToPointScratch);\n}\nexport default EllipsoidalOccluder;\n","import DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Defines functions for 2nd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuadraticRealPolynomial\n */\nvar QuadraticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quadratic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 2nd order monomial.\n * @param {Number} b The coefficient of the 1st order monomial.\n * @param {Number} c The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nQuadraticRealPolynomial.computeDiscriminant = function (a, b, c) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n //>>includeEnd('debug');\n\n var discriminant = b * b - 4.0 * a * c;\n return discriminant;\n};\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n var difference = left + right;\n if (\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n ) {\n return 0.0;\n }\n\n return difference;\n}\n\n/**\n * Provides the real valued roots of the quadratic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 2nd order monomial.\n * @param {Number} b The coefficient of the 1st order monomial.\n * @param {Number} c The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nQuadraticRealPolynomial.computeRealRoots = function (a, b, c) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n //>>includeEnd('debug');\n\n var ratio;\n if (a === 0.0) {\n if (b === 0.0) {\n // Constant function: c = 0.\n return [];\n }\n\n // Linear function: b * x + c = 0.\n return [-c / b];\n } else if (b === 0.0) {\n if (c === 0.0) {\n // 2nd order monomial: a * x^2 = 0.\n return [0.0, 0.0];\n }\n\n var cMagnitude = Math.abs(c);\n var aMagnitude = Math.abs(a);\n\n if (\n cMagnitude < aMagnitude &&\n cMagnitude / aMagnitude < CesiumMath.EPSILON14\n ) {\n // c ~= 0.0.\n // 2nd order monomial: a * x^2 = 0.\n return [0.0, 0.0];\n } else if (\n cMagnitude > aMagnitude &&\n aMagnitude / cMagnitude < CesiumMath.EPSILON14\n ) {\n // a ~= 0.0.\n // Constant function: c = 0.\n return [];\n }\n\n // a * x^2 + c = 0\n ratio = -c / a;\n\n if (ratio < 0.0) {\n // Both roots are complex.\n return [];\n }\n\n // Both roots are real.\n var root = Math.sqrt(ratio);\n return [-root, root];\n } else if (c === 0.0) {\n // a * x^2 + b * x = 0\n ratio = -b / a;\n if (ratio < 0.0) {\n return [ratio, 0.0];\n }\n\n return [0.0, ratio];\n }\n\n // a * x^2 + b * x + c = 0\n var b2 = b * b;\n var four_ac = 4.0 * a * c;\n var radicand = addWithCancellationCheck(b2, -four_ac, CesiumMath.EPSILON14);\n\n if (radicand < 0.0) {\n // Both roots are complex.\n return [];\n }\n\n var q =\n -0.5 *\n addWithCancellationCheck(\n b,\n CesiumMath.sign(b) * Math.sqrt(radicand),\n CesiumMath.EPSILON14\n );\n if (b > 0.0) {\n return [q / a, c / q];\n }\n\n return [c / q, q / a];\n};\nexport default QuadraticRealPolynomial;\n","import DeveloperError from \"./DeveloperError.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 3rd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace CubicRealPolynomial\n */\nvar CubicRealPolynomial = {};\n\n/**\n * Provides the discriminant of the cubic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 3rd order monomial.\n * @param {Number} b The coefficient of the 2nd order monomial.\n * @param {Number} c The coefficient of the 1st order monomial.\n * @param {Number} d The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nCubicRealPolynomial.computeDiscriminant = function (a, b, c, d) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n //>>includeEnd('debug');\n\n var a2 = a * a;\n var b2 = b * b;\n var c2 = c * c;\n var d2 = d * d;\n\n var discriminant =\n 18.0 * a * b * c * d +\n b2 * c2 -\n 27.0 * a2 * d2 -\n 4.0 * (a * c2 * c + b2 * b * d);\n return discriminant;\n};\n\nfunction computeRealRoots(a, b, c, d) {\n var A = a;\n var B = b / 3.0;\n var C = c / 3.0;\n var D = d;\n\n var AC = A * C;\n var BD = B * D;\n var B2 = B * B;\n var C2 = C * C;\n var delta1 = A * C - B2;\n var delta2 = A * D - B * C;\n var delta3 = B * D - C2;\n\n var discriminant = 4.0 * delta1 * delta3 - delta2 * delta2;\n var temp;\n var temp1;\n\n if (discriminant < 0.0) {\n var ABar;\n var CBar;\n var DBar;\n\n if (B2 * BD >= AC * C2) {\n ABar = A;\n CBar = delta1;\n DBar = -2.0 * B * delta1 + A * delta2;\n } else {\n ABar = D;\n CBar = delta3;\n DBar = -D * delta2 + 2.0 * C * delta3;\n }\n\n var s = DBar < 0.0 ? -1.0 : 1.0; // This is not Math.Sign()!\n var temp0 = -s * Math.abs(ABar) * Math.sqrt(-discriminant);\n temp1 = -DBar + temp0;\n\n var x = temp1 / 2.0;\n var p = x < 0.0 ? -Math.pow(-x, 1.0 / 3.0) : Math.pow(x, 1.0 / 3.0);\n var q = temp1 === temp0 ? -p : -CBar / p;\n\n temp = CBar <= 0.0 ? p + q : -DBar / (p * p + q * q + CBar);\n\n if (B2 * BD >= AC * C2) {\n return [(temp - B) / A];\n }\n\n return [-D / (temp + C)];\n }\n\n var CBarA = delta1;\n var DBarA = -2.0 * B * delta1 + A * delta2;\n\n var CBarD = delta3;\n var DBarD = -D * delta2 + 2.0 * C * delta3;\n\n var squareRootOfDiscriminant = Math.sqrt(discriminant);\n var halfSquareRootOf3 = Math.sqrt(3.0) / 2.0;\n\n var theta = Math.abs(Math.atan2(A * squareRootOfDiscriminant, -DBarA) / 3.0);\n temp = 2.0 * Math.sqrt(-CBarA);\n var cosine = Math.cos(theta);\n temp1 = temp * cosine;\n var temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n var numeratorLarge = temp1 + temp3 > 2.0 * B ? temp1 - B : temp3 - B;\n var denominatorLarge = A;\n\n var root1 = numeratorLarge / denominatorLarge;\n\n theta = Math.abs(Math.atan2(D * squareRootOfDiscriminant, -DBarD) / 3.0);\n temp = 2.0 * Math.sqrt(-CBarD);\n cosine = Math.cos(theta);\n temp1 = temp * cosine;\n temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n var numeratorSmall = -D;\n var denominatorSmall = temp1 + temp3 < 2.0 * C ? temp1 + C : temp3 + C;\n\n var root3 = numeratorSmall / denominatorSmall;\n\n var E = denominatorLarge * denominatorSmall;\n var F =\n -numeratorLarge * denominatorSmall - denominatorLarge * numeratorSmall;\n var G = numeratorLarge * numeratorSmall;\n\n var root2 = (C * F - B * G) / (-B * F + C * E);\n\n if (root1 <= root2) {\n if (root1 <= root3) {\n if (root2 <= root3) {\n return [root1, root2, root3];\n }\n return [root1, root3, root2];\n }\n return [root3, root1, root2];\n }\n if (root1 <= root3) {\n return [root2, root1, root3];\n }\n if (root2 <= root3) {\n return [root2, root3, root1];\n }\n return [root3, root2, root1];\n}\n\n/**\n * Provides the real valued roots of the cubic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 3rd order monomial.\n * @param {Number} b The coefficient of the 2nd order monomial.\n * @param {Number} c The coefficient of the 1st order monomial.\n * @param {Number} d The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nCubicRealPolynomial.computeRealRoots = function (a, b, c, d) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n //>>includeEnd('debug');\n\n var roots;\n var ratio;\n if (a === 0.0) {\n // Quadratic function: b * x^2 + c * x + d = 0.\n return QuadraticRealPolynomial.computeRealRoots(b, c, d);\n } else if (b === 0.0) {\n if (c === 0.0) {\n if (d === 0.0) {\n // 3rd order monomial: a * x^3 = 0.\n return [0.0, 0.0, 0.0];\n }\n\n // a * x^3 + d = 0\n ratio = -d / a;\n var root =\n ratio < 0.0 ? -Math.pow(-ratio, 1.0 / 3.0) : Math.pow(ratio, 1.0 / 3.0);\n return [root, root, root];\n } else if (d === 0.0) {\n // x * (a * x^2 + c) = 0.\n roots = QuadraticRealPolynomial.computeRealRoots(a, 0, c);\n\n // Return the roots in ascending order.\n if (roots.Length === 0) {\n return [0.0];\n }\n return [roots[0], 0.0, roots[1]];\n }\n\n // Deflated cubic polynomial: a * x^3 + c * x + d= 0.\n return computeRealRoots(a, 0, c, d);\n } else if (c === 0.0) {\n if (d === 0.0) {\n // x^2 * (a * x + b) = 0.\n ratio = -b / a;\n if (ratio < 0.0) {\n return [ratio, 0.0, 0.0];\n }\n return [0.0, 0.0, ratio];\n }\n // a * x^3 + b * x^2 + d = 0.\n return computeRealRoots(a, b, 0, d);\n } else if (d === 0.0) {\n // x * (a * x^2 + b * x + c) = 0\n roots = QuadraticRealPolynomial.computeRealRoots(a, b, c);\n\n // Return the roots in ascending order.\n if (roots.length === 0) {\n return [0.0];\n } else if (roots[1] <= 0.0) {\n return [roots[0], roots[1], 0.0];\n } else if (roots[0] >= 0.0) {\n return [0.0, roots[0], roots[1]];\n }\n return [roots[0], 0.0, roots[1]];\n }\n\n return computeRealRoots(a, b, c, d);\n};\nexport default CubicRealPolynomial;\n","import CubicRealPolynomial from \"./CubicRealPolynomial.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 4th order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuarticRealPolynomial\n */\nvar QuarticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quartic equation from the supplied coefficients.\n *\n * @param {Number} a The coefficient of the 4th order monomial.\n * @param {Number} b The coefficient of the 3rd order monomial.\n * @param {Number} c The coefficient of the 2nd order monomial.\n * @param {Number} d The coefficient of the 1st order monomial.\n * @param {Number} e The coefficient of the 0th order monomial.\n * @returns {Number} The value of the discriminant.\n */\nQuarticRealPolynomial.computeDiscriminant = function (a, b, c, d, e) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n if (typeof e !== \"number\") {\n throw new DeveloperError(\"e is a required number.\");\n }\n //>>includeEnd('debug');\n\n var a2 = a * a;\n var a3 = a2 * a;\n var b2 = b * b;\n var b3 = b2 * b;\n var c2 = c * c;\n var c3 = c2 * c;\n var d2 = d * d;\n var d3 = d2 * d;\n var e2 = e * e;\n var e3 = e2 * e;\n\n var discriminant =\n b2 * c2 * d2 -\n 4.0 * b3 * d3 -\n 4.0 * a * c3 * d2 +\n 18 * a * b * c * d3 -\n 27.0 * a2 * d2 * d2 +\n 256.0 * a3 * e3 +\n e *\n (18.0 * b3 * c * d -\n 4.0 * b2 * c3 +\n 16.0 * a * c2 * c2 -\n 80.0 * a * b * c2 * d -\n 6.0 * a * b2 * d2 +\n 144.0 * a2 * c * d2) +\n e2 *\n (144.0 * a * b2 * c -\n 27.0 * b2 * b2 -\n 128.0 * a2 * c2 -\n 192.0 * a2 * b * d);\n return discriminant;\n};\n\nfunction original(a3, a2, a1, a0) {\n var a3Squared = a3 * a3;\n\n var p = a2 - (3.0 * a3Squared) / 8.0;\n var q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0;\n var r =\n a0 -\n (a1 * a3) / 4.0 +\n (a2 * a3Squared) / 16.0 -\n (3.0 * a3Squared * a3Squared) / 256.0;\n\n // Find the roots of the cubic equations: h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0.\n var cubicRoots = CubicRealPolynomial.computeRealRoots(\n 1.0,\n 2.0 * p,\n p * p - 4.0 * r,\n -q * q\n );\n\n if (cubicRoots.length > 0) {\n var temp = -a3 / 4.0;\n\n // Use the largest positive root.\n var hSquared = cubicRoots[cubicRoots.length - 1];\n\n if (Math.abs(hSquared) < CesiumMath.EPSILON14) {\n // y^4 + p y^2 + r = 0.\n var roots = QuadraticRealPolynomial.computeRealRoots(1.0, p, r);\n\n if (roots.length === 2) {\n var root0 = roots[0];\n var root1 = roots[1];\n\n var y;\n if (root0 >= 0.0 && root1 >= 0.0) {\n var y0 = Math.sqrt(root0);\n var y1 = Math.sqrt(root1);\n\n return [temp - y1, temp - y0, temp + y0, temp + y1];\n } else if (root0 >= 0.0 && root1 < 0.0) {\n y = Math.sqrt(root0);\n return [temp - y, temp + y];\n } else if (root0 < 0.0 && root1 >= 0.0) {\n y = Math.sqrt(root1);\n return [temp - y, temp + y];\n }\n }\n return [];\n } else if (hSquared > 0.0) {\n var h = Math.sqrt(hSquared);\n\n var m = (p + hSquared - q / h) / 2.0;\n var n = (p + hSquared + q / h) / 2.0;\n\n // Now solve the two quadratic factors: (y^2 + h y + m)(y^2 - h y + n);\n var roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, h, m);\n var roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, -h, n);\n\n if (roots1.length !== 0) {\n roots1[0] += temp;\n roots1[1] += temp;\n\n if (roots2.length !== 0) {\n roots2[0] += temp;\n roots2[1] += temp;\n\n if (roots1[1] <= roots2[0]) {\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\n } else if (roots2[1] <= roots1[0]) {\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\n }\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\n }\n return roots1;\n }\n\n if (roots2.length !== 0) {\n roots2[0] += temp;\n roots2[1] += temp;\n\n return roots2;\n }\n return [];\n }\n }\n return [];\n}\n\nfunction neumark(a3, a2, a1, a0) {\n var a1Squared = a1 * a1;\n var a2Squared = a2 * a2;\n var a3Squared = a3 * a3;\n\n var p = -2.0 * a2;\n var q = a1 * a3 + a2Squared - 4.0 * a0;\n var r = a3Squared * a0 - a1 * a2 * a3 + a1Squared;\n\n var cubicRoots = CubicRealPolynomial.computeRealRoots(1.0, p, q, r);\n\n if (cubicRoots.length > 0) {\n // Use the most positive root\n var y = cubicRoots[0];\n\n var temp = a2 - y;\n var tempSquared = temp * temp;\n\n var g1 = a3 / 2.0;\n var h1 = temp / 2.0;\n\n var m = tempSquared - 4.0 * a0;\n var mError = tempSquared + 4.0 * Math.abs(a0);\n\n var n = a3Squared - 4.0 * y;\n var nError = a3Squared + 4.0 * Math.abs(y);\n\n var g2;\n var h2;\n\n if (y < 0.0 || m * nError < n * mError) {\n var squareRootOfN = Math.sqrt(n);\n g2 = squareRootOfN / 2.0;\n h2 = squareRootOfN === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfN;\n } else {\n var squareRootOfM = Math.sqrt(m);\n g2 = squareRootOfM === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfM;\n h2 = squareRootOfM / 2.0;\n }\n\n var G;\n var g;\n if (g1 === 0.0 && g2 === 0.0) {\n G = 0.0;\n g = 0.0;\n } else if (CesiumMath.sign(g1) === CesiumMath.sign(g2)) {\n G = g1 + g2;\n g = y / G;\n } else {\n g = g1 - g2;\n G = y / g;\n }\n\n var H;\n var h;\n if (h1 === 0.0 && h2 === 0.0) {\n H = 0.0;\n h = 0.0;\n } else if (CesiumMath.sign(h1) === CesiumMath.sign(h2)) {\n H = h1 + h2;\n h = a0 / H;\n } else {\n h = h1 - h2;\n H = a0 / h;\n }\n\n // Now solve the two quadratic factors: (y^2 + G y + H)(y^2 + g y + h);\n var roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, G, H);\n var roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, g, h);\n\n if (roots1.length !== 0) {\n if (roots2.length !== 0) {\n if (roots1[1] <= roots2[0]) {\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\n } else if (roots2[1] <= roots1[0]) {\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\n }\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\n }\n return roots1;\n }\n if (roots2.length !== 0) {\n return roots2;\n }\n }\n return [];\n}\n\n/**\n * Provides the real valued roots of the quartic polynomial with the provided coefficients.\n *\n * @param {Number} a The coefficient of the 4th order monomial.\n * @param {Number} b The coefficient of the 3rd order monomial.\n * @param {Number} c The coefficient of the 2nd order monomial.\n * @param {Number} d The coefficient of the 1st order monomial.\n * @param {Number} e The coefficient of the 0th order monomial.\n * @returns {Number[]} The real valued roots.\n */\nQuarticRealPolynomial.computeRealRoots = function (a, b, c, d, e) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof a !== \"number\") {\n throw new DeveloperError(\"a is a required number.\");\n }\n if (typeof b !== \"number\") {\n throw new DeveloperError(\"b is a required number.\");\n }\n if (typeof c !== \"number\") {\n throw new DeveloperError(\"c is a required number.\");\n }\n if (typeof d !== \"number\") {\n throw new DeveloperError(\"d is a required number.\");\n }\n if (typeof e !== \"number\") {\n throw new DeveloperError(\"e is a required number.\");\n }\n //>>includeEnd('debug');\n\n if (Math.abs(a) < CesiumMath.EPSILON15) {\n return CubicRealPolynomial.computeRealRoots(b, c, d, e);\n }\n var a3 = b / a;\n var a2 = c / a;\n var a1 = d / a;\n var a0 = e / a;\n\n var k = a3 < 0.0 ? 1 : 0;\n k += a2 < 0.0 ? k + 1 : k;\n k += a1 < 0.0 ? k + 1 : k;\n k += a0 < 0.0 ? k + 1 : k;\n\n switch (k) {\n case 0:\n return original(a3, a2, a1, a0);\n case 1:\n return neumark(a3, a2, a1, a0);\n case 2:\n return neumark(a3, a2, a1, a0);\n case 3:\n return original(a3, a2, a1, a0);\n case 4:\n return original(a3, a2, a1, a0);\n case 5:\n return neumark(a3, a2, a1, a0);\n case 6:\n return original(a3, a2, a1, a0);\n case 7:\n return original(a3, a2, a1, a0);\n case 8:\n return neumark(a3, a2, a1, a0);\n case 9:\n return original(a3, a2, a1, a0);\n case 10:\n return original(a3, a2, a1, a0);\n case 11:\n return neumark(a3, a2, a1, a0);\n case 12:\n return original(a3, a2, a1, a0);\n case 13:\n return original(a3, a2, a1, a0);\n case 14:\n return original(a3, a2, a1, a0);\n case 15:\n return original(a3, a2, a1, a0);\n default:\n return undefined;\n }\n};\nexport default QuarticRealPolynomial;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Represents a ray that extends infinitely from the provided origin in the provided direction.\n * @alias Ray\n * @constructor\n *\n * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray.\n * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray.\n */\nfunction Ray(origin, direction) {\n direction = Cartesian3.clone(defaultValue(direction, Cartesian3.ZERO));\n if (!Cartesian3.equals(direction, Cartesian3.ZERO)) {\n Cartesian3.normalize(direction, direction);\n }\n\n /**\n * The origin of the ray.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.origin = Cartesian3.clone(defaultValue(origin, Cartesian3.ZERO));\n\n /**\n * The direction of the ray.\n * @type {Cartesian3}\n */\n this.direction = direction;\n}\n\n/**\n * Duplicates a Ray instance.\n *\n * @param {Ray} ray The ray to duplicate.\n * @param {Ray} [result] The object onto which to store the result.\n * @returns {Ray} The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined)\n */\nRay.clone = function (ray, result) {\n if (!defined(ray)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Ray(ray.origin, ray.direction);\n }\n result.origin = Cartesian3.clone(ray.origin);\n result.direction = Cartesian3.clone(ray.direction);\n return result;\n};\n\n/**\n * Computes the point along the ray given by r(t) = o + t*d,\n * where o is the origin of the ray and d is the direction.\n *\n * @param {Ray} ray The ray.\n * @param {Number} t A scalar value.\n * @param {Cartesian3} [result] The object in which the result will be stored.\n * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided.\n *\n * @example\n * //Get the first intersection point of a ray and an ellipsoid.\n * var intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\n * var point = Cesium.Ray.getPoint(ray, intersection.start);\n */\nRay.getPoint = function (ray, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ray\", ray);\n Check.typeOf.number(\"t\", t);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n result = Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\nexport default Ray;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\nimport QuarticRealPolynomial from \"./QuarticRealPolynomial.js\";\nimport Ray from \"./Ray.js\";\n\n/**\n * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.\n *\n * @namespace IntersectionTests\n */\nvar IntersectionTests = {};\n\n/**\n * Computes the intersection of a ray and a plane.\n *\n * @param {Ray} ray The ray.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayPlane = function (ray, plane, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var origin = ray.origin;\n var direction = ray.direction;\n var normal = plane.normal;\n var denominator = Cartesian3.dot(normal, direction);\n\n if (Math.abs(denominator) < CesiumMath.EPSILON15) {\n // Ray is parallel to plane. The ray may be in the polygon's plane.\n return undefined;\n }\n\n var t = (-plane.distance - Cartesian3.dot(normal, origin)) / denominator;\n\n if (t < 0) {\n return undefined;\n }\n\n result = Cartesian3.multiplyByScalar(direction, t, result);\n return Cartesian3.add(origin, result, result);\n};\n\nvar scratchEdge0 = new Cartesian3();\nvar scratchEdge1 = new Cartesian3();\nvar scratchPVec = new Cartesian3();\nvar scratchTVec = new Cartesian3();\nvar scratchQVec = new Cartesian3();\n\n/**\n * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray.\n *\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @returns {Number} The intersection as a parametric distance along the ray, or undefined if there is no intersection.\n */\nIntersectionTests.rayTriangleParametric = function (\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(p2)) {\n throw new DeveloperError(\"p2 is required.\");\n }\n //>>includeEnd('debug');\n\n cullBackFaces = defaultValue(cullBackFaces, false);\n\n var origin = ray.origin;\n var direction = ray.direction;\n\n var edge0 = Cartesian3.subtract(p1, p0, scratchEdge0);\n var edge1 = Cartesian3.subtract(p2, p0, scratchEdge1);\n\n var p = Cartesian3.cross(direction, edge1, scratchPVec);\n var det = Cartesian3.dot(edge0, p);\n\n var tvec;\n var q;\n\n var u;\n var v;\n var t;\n\n if (cullBackFaces) {\n if (det < CesiumMath.EPSILON6) {\n return undefined;\n }\n\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n u = Cartesian3.dot(tvec, p);\n if (u < 0.0 || u > det) {\n return undefined;\n }\n\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n v = Cartesian3.dot(direction, q);\n if (v < 0.0 || u + v > det) {\n return undefined;\n }\n\n t = Cartesian3.dot(edge1, q) / det;\n } else {\n if (Math.abs(det) < CesiumMath.EPSILON6) {\n return undefined;\n }\n var invDet = 1.0 / det;\n\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n u = Cartesian3.dot(tvec, p) * invDet;\n if (u < 0.0 || u > 1.0) {\n return undefined;\n }\n\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n v = Cartesian3.dot(direction, q) * invDet;\n if (v < 0.0 || u + v > 1.0) {\n return undefined;\n }\n\n t = Cartesian3.dot(edge1, q) * invDet;\n }\n\n return t;\n};\n\n/**\n * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate.\n *\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayTriangle = function (\n ray,\n p0,\n p1,\n p2,\n cullBackFaces,\n result\n) {\n var t = IntersectionTests.rayTriangleParametric(\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n );\n if (!defined(t) || t < 0.0) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\n\nvar scratchLineSegmentTriangleRay = new Ray();\n\n/**\n * Computes the intersection of a line segment and a triangle.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} v0 The an end point of the line segment.\n * @param {Cartesian3} v1 The other end point of the line segment.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {Boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n * and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.lineSegmentTriangle = function (\n v0,\n v1,\n p0,\n p1,\n p2,\n cullBackFaces,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(v0)) {\n throw new DeveloperError(\"v0 is required.\");\n }\n if (!defined(v1)) {\n throw new DeveloperError(\"v1 is required.\");\n }\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(p2)) {\n throw new DeveloperError(\"p2 is required.\");\n }\n //>>includeEnd('debug');\n\n var ray = scratchLineSegmentTriangleRay;\n Cartesian3.clone(v0, ray.origin);\n Cartesian3.subtract(v1, v0, ray.direction);\n Cartesian3.normalize(ray.direction, ray.direction);\n\n var t = IntersectionTests.rayTriangleParametric(\n ray,\n p0,\n p1,\n p2,\n cullBackFaces\n );\n if (!defined(t) || t < 0.0 || t > Cartesian3.distance(v0, v1)) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n Cartesian3.multiplyByScalar(ray.direction, t, result);\n return Cartesian3.add(ray.origin, result, result);\n};\n\nfunction solveQuadratic(a, b, c, result) {\n var det = b * b - 4.0 * a * c;\n if (det < 0.0) {\n return undefined;\n } else if (det > 0.0) {\n var denom = 1.0 / (2.0 * a);\n var disc = Math.sqrt(det);\n var root0 = (-b + disc) * denom;\n var root1 = (-b - disc) * denom;\n\n if (root0 < root1) {\n result.root0 = root0;\n result.root1 = root1;\n } else {\n result.root0 = root1;\n result.root1 = root0;\n }\n\n return result;\n }\n\n var root = -b / (2.0 * a);\n if (root === 0.0) {\n return undefined;\n }\n\n result.root0 = result.root1 = root;\n return result;\n}\n\nvar raySphereRoots = {\n root0: 0.0,\n root1: 0.0,\n};\n\nfunction raySphere(ray, sphere, result) {\n if (!defined(result)) {\n result = new Interval();\n }\n\n var origin = ray.origin;\n var direction = ray.direction;\n\n var center = sphere.center;\n var radiusSquared = sphere.radius * sphere.radius;\n\n var diff = Cartesian3.subtract(origin, center, scratchPVec);\n\n var a = Cartesian3.dot(direction, direction);\n var b = 2.0 * Cartesian3.dot(direction, diff);\n var c = Cartesian3.magnitudeSquared(diff) - radiusSquared;\n\n var roots = solveQuadratic(a, b, c, raySphereRoots);\n if (!defined(roots)) {\n return undefined;\n }\n\n result.start = roots.root0;\n result.stop = roots.root1;\n return result;\n}\n\n/**\n * Computes the intersection points of a ray with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.raySphere = function (ray, sphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(sphere)) {\n throw new DeveloperError(\"sphere is required.\");\n }\n //>>includeEnd('debug');\n\n result = raySphere(ray, sphere, result);\n if (!defined(result) || result.stop < 0.0) {\n return undefined;\n }\n\n result.start = Math.max(result.start, 0.0);\n return result;\n};\n\nvar scratchLineSegmentRay = new Ray();\n\n/**\n * Computes the intersection points of a line segment with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} p0 An end point of the line segment.\n * @param {Cartesian3} p1 The other end point of the line segment.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.lineSegmentSphere = function (p0, p1, sphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(p0)) {\n throw new DeveloperError(\"p0 is required.\");\n }\n if (!defined(p1)) {\n throw new DeveloperError(\"p1 is required.\");\n }\n if (!defined(sphere)) {\n throw new DeveloperError(\"sphere is required.\");\n }\n //>>includeEnd('debug');\n\n var ray = scratchLineSegmentRay;\n Cartesian3.clone(p0, ray.origin);\n var direction = Cartesian3.subtract(p1, p0, ray.direction);\n\n var maxT = Cartesian3.magnitude(direction);\n Cartesian3.normalize(direction, direction);\n\n result = raySphere(ray, sphere, result);\n if (!defined(result) || result.stop < 0.0 || result.start > maxT) {\n return undefined;\n }\n\n result.start = Math.max(result.start, 0.0);\n result.stop = Math.min(result.stop, maxT);\n return result;\n};\n\nvar scratchQ = new Cartesian3();\nvar scratchW = new Cartesian3();\n\n/**\n * Computes the intersection points of a ray with an ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.rayEllipsoid = function (ray, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(ellipsoid)) {\n throw new DeveloperError(\"ellipsoid is required.\");\n }\n //>>includeEnd('debug');\n\n var inverseRadii = ellipsoid.oneOverRadii;\n var q = Cartesian3.multiplyComponents(inverseRadii, ray.origin, scratchQ);\n var w = Cartesian3.multiplyComponents(inverseRadii, ray.direction, scratchW);\n\n var q2 = Cartesian3.magnitudeSquared(q);\n var qw = Cartesian3.dot(q, w);\n\n var difference, w2, product, discriminant, temp;\n\n if (q2 > 1.0) {\n // Outside ellipsoid.\n if (qw >= 0.0) {\n // Looking outward or tangent (0 intersections).\n return undefined;\n }\n\n // qw < 0.0.\n var qw2 = qw * qw;\n difference = q2 - 1.0; // Positively valued.\n w2 = Cartesian3.magnitudeSquared(w);\n product = w2 * difference;\n\n if (qw2 < product) {\n // Imaginary roots (0 intersections).\n return undefined;\n } else if (qw2 > product) {\n // Distinct roots (2 intersections).\n discriminant = qw * qw - product;\n temp = -qw + Math.sqrt(discriminant); // Avoid cancellation.\n var root0 = temp / w2;\n var root1 = difference / temp;\n if (root0 < root1) {\n return new Interval(root0, root1);\n }\n\n return {\n start: root1,\n stop: root0,\n };\n }\n // qw2 == product. Repeated roots (2 intersections).\n var root = Math.sqrt(difference / w2);\n return new Interval(root, root);\n } else if (q2 < 1.0) {\n // Inside ellipsoid (2 intersections).\n difference = q2 - 1.0; // Negatively valued.\n w2 = Cartesian3.magnitudeSquared(w);\n product = w2 * difference; // Negatively valued.\n\n discriminant = qw * qw - product;\n temp = -qw + Math.sqrt(discriminant); // Positively valued.\n return new Interval(0.0, temp / w2);\n }\n // q2 == 1.0. On ellipsoid.\n if (qw < 0.0) {\n // Looking inward.\n w2 = Cartesian3.magnitudeSquared(w);\n return new Interval(0.0, -qw / w2);\n }\n\n // qw >= 0.0. Looking outward or tangent.\n return undefined;\n};\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n var difference = left + right;\n if (\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n ) {\n return 0.0;\n }\n\n return difference;\n}\n\nfunction quadraticVectorExpression(A, b, c, x, w) {\n var xSquared = x * x;\n var wSquared = w * w;\n\n var l2 = (A[Matrix3.COLUMN1ROW1] - A[Matrix3.COLUMN2ROW2]) * wSquared;\n var l1 =\n w *\n (x *\n addWithCancellationCheck(\n A[Matrix3.COLUMN1ROW0],\n A[Matrix3.COLUMN0ROW1],\n CesiumMath.EPSILON15\n ) +\n b.y);\n var l0 =\n A[Matrix3.COLUMN0ROW0] * xSquared +\n A[Matrix3.COLUMN2ROW2] * wSquared +\n x * b.x +\n c;\n\n var r1 =\n wSquared *\n addWithCancellationCheck(\n A[Matrix3.COLUMN2ROW1],\n A[Matrix3.COLUMN1ROW2],\n CesiumMath.EPSILON15\n );\n var r0 =\n w *\n (x *\n addWithCancellationCheck(A[Matrix3.COLUMN2ROW0], A[Matrix3.COLUMN0ROW2]) +\n b.z);\n\n var cosines;\n var solutions = [];\n if (r0 === 0.0 && r1 === 0.0) {\n cosines = QuadraticRealPolynomial.computeRealRoots(l2, l1, l0);\n if (cosines.length === 0) {\n return solutions;\n }\n\n var cosine0 = cosines[0];\n var sine0 = Math.sqrt(Math.max(1.0 - cosine0 * cosine0, 0.0));\n solutions.push(new Cartesian3(x, w * cosine0, w * -sine0));\n solutions.push(new Cartesian3(x, w * cosine0, w * sine0));\n\n if (cosines.length === 2) {\n var cosine1 = cosines[1];\n var sine1 = Math.sqrt(Math.max(1.0 - cosine1 * cosine1, 0.0));\n solutions.push(new Cartesian3(x, w * cosine1, w * -sine1));\n solutions.push(new Cartesian3(x, w * cosine1, w * sine1));\n }\n\n return solutions;\n }\n\n var r0Squared = r0 * r0;\n var r1Squared = r1 * r1;\n var l2Squared = l2 * l2;\n var r0r1 = r0 * r1;\n\n var c4 = l2Squared + r1Squared;\n var c3 = 2.0 * (l1 * l2 + r0r1);\n var c2 = 2.0 * l0 * l2 + l1 * l1 - r1Squared + r0Squared;\n var c1 = 2.0 * (l0 * l1 - r0r1);\n var c0 = l0 * l0 - r0Squared;\n\n if (c4 === 0.0 && c3 === 0.0 && c2 === 0.0 && c1 === 0.0) {\n return solutions;\n }\n\n cosines = QuarticRealPolynomial.computeRealRoots(c4, c3, c2, c1, c0);\n var length = cosines.length;\n if (length === 0) {\n return solutions;\n }\n\n for (var i = 0; i < length; ++i) {\n var cosine = cosines[i];\n var cosineSquared = cosine * cosine;\n var sineSquared = Math.max(1.0 - cosineSquared, 0.0);\n var sine = Math.sqrt(sineSquared);\n\n //var left = l2 * cosineSquared + l1 * cosine + l0;\n var left;\n if (CesiumMath.sign(l2) === CesiumMath.sign(l0)) {\n left = addWithCancellationCheck(\n l2 * cosineSquared + l0,\n l1 * cosine,\n CesiumMath.EPSILON12\n );\n } else if (CesiumMath.sign(l0) === CesiumMath.sign(l1 * cosine)) {\n left = addWithCancellationCheck(\n l2 * cosineSquared,\n l1 * cosine + l0,\n CesiumMath.EPSILON12\n );\n } else {\n left = addWithCancellationCheck(\n l2 * cosineSquared + l1 * cosine,\n l0,\n CesiumMath.EPSILON12\n );\n }\n\n var right = addWithCancellationCheck(r1 * cosine, r0, CesiumMath.EPSILON15);\n var product = left * right;\n\n if (product < 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n } else if (product > 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n } else if (sine !== 0.0) {\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n ++i;\n } else {\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\n }\n }\n\n return solutions;\n}\n\nvar firstAxisScratch = new Cartesian3();\nvar secondAxisScratch = new Cartesian3();\nvar thirdAxisScratch = new Cartesian3();\nvar referenceScratch = new Cartesian3();\nvar bCart = new Cartesian3();\nvar bScratch = new Matrix3();\nvar btScratch = new Matrix3();\nvar diScratch = new Matrix3();\nvar dScratch = new Matrix3();\nvar cScratch = new Matrix3();\nvar tempMatrix = new Matrix3();\nvar aScratch = new Matrix3();\nvar sScratch = new Cartesian3();\nvar closestScratch = new Cartesian3();\nvar surfPointScratch = new Cartographic();\n\n/**\n * Provides the point along the ray which is nearest to the ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Cartesian3} The nearest planetodetic point on the ray.\n */\nIntersectionTests.grazingAltitudeLocation = function (ray, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required.\");\n }\n if (!defined(ellipsoid)) {\n throw new DeveloperError(\"ellipsoid is required.\");\n }\n //>>includeEnd('debug');\n\n var position = ray.origin;\n var direction = ray.direction;\n\n if (!Cartesian3.equals(position, Cartesian3.ZERO)) {\n var normal = ellipsoid.geodeticSurfaceNormal(position, firstAxisScratch);\n if (Cartesian3.dot(direction, normal) >= 0.0) {\n // The location provided is the closest point in altitude\n return position;\n }\n }\n\n var intersects = defined(this.rayEllipsoid(ray, ellipsoid));\n\n // Compute the scaled direction vector.\n var f = ellipsoid.transformPositionToScaledSpace(direction, firstAxisScratch);\n\n // Constructs a basis from the unit scaled direction vector. Construct its rotation and transpose.\n var firstAxis = Cartesian3.normalize(f, f);\n var reference = Cartesian3.mostOrthogonalAxis(f, referenceScratch);\n var secondAxis = Cartesian3.normalize(\n Cartesian3.cross(reference, firstAxis, secondAxisScratch),\n secondAxisScratch\n );\n var thirdAxis = Cartesian3.normalize(\n Cartesian3.cross(firstAxis, secondAxis, thirdAxisScratch),\n thirdAxisScratch\n );\n var B = bScratch;\n B[0] = firstAxis.x;\n B[1] = firstAxis.y;\n B[2] = firstAxis.z;\n B[3] = secondAxis.x;\n B[4] = secondAxis.y;\n B[5] = secondAxis.z;\n B[6] = thirdAxis.x;\n B[7] = thirdAxis.y;\n B[8] = thirdAxis.z;\n\n var B_T = Matrix3.transpose(B, btScratch);\n\n // Get the scaling matrix and its inverse.\n var D_I = Matrix3.fromScale(ellipsoid.radii, diScratch);\n var D = Matrix3.fromScale(ellipsoid.oneOverRadii, dScratch);\n\n var C = cScratch;\n C[0] = 0.0;\n C[1] = -direction.z;\n C[2] = direction.y;\n C[3] = direction.z;\n C[4] = 0.0;\n C[5] = -direction.x;\n C[6] = -direction.y;\n C[7] = direction.x;\n C[8] = 0.0;\n\n var temp = Matrix3.multiply(\n Matrix3.multiply(B_T, D, tempMatrix),\n C,\n tempMatrix\n );\n var A = Matrix3.multiply(Matrix3.multiply(temp, D_I, aScratch), B, aScratch);\n var b = Matrix3.multiplyByVector(temp, position, bCart);\n\n // Solve for the solutions to the expression in standard form:\n var solutions = quadraticVectorExpression(\n A,\n Cartesian3.negate(b, firstAxisScratch),\n 0.0,\n 0.0,\n 1.0\n );\n\n var s;\n var altitude;\n var length = solutions.length;\n if (length > 0) {\n var closest = Cartesian3.clone(Cartesian3.ZERO, closestScratch);\n var maximumValue = Number.NEGATIVE_INFINITY;\n\n for (var i = 0; i < length; ++i) {\n s = Matrix3.multiplyByVector(\n D_I,\n Matrix3.multiplyByVector(B, solutions[i], sScratch),\n sScratch\n );\n var v = Cartesian3.normalize(\n Cartesian3.subtract(s, position, referenceScratch),\n referenceScratch\n );\n var dotProduct = Cartesian3.dot(v, direction);\n\n if (dotProduct > maximumValue) {\n maximumValue = dotProduct;\n closest = Cartesian3.clone(s, closest);\n }\n }\n\n var surfacePoint = ellipsoid.cartesianToCartographic(\n closest,\n surfPointScratch\n );\n maximumValue = CesiumMath.clamp(maximumValue, 0.0, 1.0);\n altitude =\n Cartesian3.magnitude(\n Cartesian3.subtract(closest, position, referenceScratch)\n ) * Math.sqrt(1.0 - maximumValue * maximumValue);\n altitude = intersects ? -altitude : altitude;\n surfacePoint.height = altitude;\n return ellipsoid.cartographicToCartesian(surfacePoint, new Cartesian3());\n }\n\n return undefined;\n};\n\nvar lineSegmentPlaneDifference = new Cartesian3();\n\n/**\n * Computes the intersection of a line segment and a plane.\n *\n * @param {Cartesian3} endPoint0 An end point of the line segment.\n * @param {Cartesian3} endPoint1 The other end point of the line segment.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersection.\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * var normal = ellipsoid.geodeticSurfaceNormal(origin);\n * var plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * var p0 = new Cesium.Cartesian3(...);\n * var p1 = new Cesium.Cartesian3(...);\n *\n * // find the intersection of the line segment from p0 to p1 and the tangent plane at origin.\n * var intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane);\n */\nIntersectionTests.lineSegmentPlane = function (\n endPoint0,\n endPoint1,\n plane,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(endPoint0)) {\n throw new DeveloperError(\"endPoint0 is required.\");\n }\n if (!defined(endPoint1)) {\n throw new DeveloperError(\"endPoint1 is required.\");\n }\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var difference = Cartesian3.subtract(\n endPoint1,\n endPoint0,\n lineSegmentPlaneDifference\n );\n var normal = plane.normal;\n var nDotDiff = Cartesian3.dot(normal, difference);\n\n // check if the segment and plane are parallel\n if (Math.abs(nDotDiff) < CesiumMath.EPSILON6) {\n return undefined;\n }\n\n var nDotP0 = Cartesian3.dot(normal, endPoint0);\n var t = -(plane.distance + nDotP0) / nDotDiff;\n\n // intersection only if t is in [0, 1]\n if (t < 0.0 || t > 1.0) {\n return undefined;\n }\n\n // intersection is endPoint0 + t * (endPoint1 - endPoint0)\n Cartesian3.multiplyByScalar(difference, t, result);\n Cartesian3.add(endPoint0, result, result);\n return result;\n};\n\n/**\n * Computes the intersection of a triangle and a plane\n *\n * @param {Cartesian3} p0 First point of the triangle\n * @param {Cartesian3} p1 Second point of the triangle\n * @param {Cartesian3} p2 Third point of the triangle\n * @param {Plane} plane Intersection plane\n * @returns {Object} An object with properties <code>positions</code> and <code>indices</code>, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists)\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * var normal = ellipsoid.geodeticSurfaceNormal(origin);\n * var plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * var p0 = new Cesium.Cartesian3(...);\n * var p1 = new Cesium.Cartesian3(...);\n * var p2 = new Cesium.Cartesian3(...);\n *\n * // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane\n * var triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane);\n */\nIntersectionTests.trianglePlaneIntersection = function (p0, p1, p2, plane) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(p0) || !defined(p1) || !defined(p2) || !defined(plane)) {\n throw new DeveloperError(\"p0, p1, p2, and plane are required.\");\n }\n //>>includeEnd('debug');\n\n var planeNormal = plane.normal;\n var planeD = plane.distance;\n var p0Behind = Cartesian3.dot(planeNormal, p0) + planeD < 0.0;\n var p1Behind = Cartesian3.dot(planeNormal, p1) + planeD < 0.0;\n var p2Behind = Cartesian3.dot(planeNormal, p2) + planeD < 0.0;\n // Given these dots products, the calls to lineSegmentPlaneIntersection\n // always have defined results.\n\n var numBehind = 0;\n numBehind += p0Behind ? 1 : 0;\n numBehind += p1Behind ? 1 : 0;\n numBehind += p2Behind ? 1 : 0;\n\n var u1, u2;\n if (numBehind === 1 || numBehind === 2) {\n u1 = new Cartesian3();\n u2 = new Cartesian3();\n }\n\n if (numBehind === 1) {\n if (p0Behind) {\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u1);\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 0,\n 3,\n 4,\n\n // In front\n 1,\n 2,\n 4,\n 1,\n 4,\n 3,\n ],\n };\n } else if (p1Behind) {\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u1);\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 1,\n 3,\n 4,\n\n // In front\n 2,\n 0,\n 4,\n 2,\n 4,\n 3,\n ],\n };\n } else if (p2Behind) {\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u1);\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 2,\n 3,\n 4,\n\n // In front\n 0,\n 1,\n 4,\n 0,\n 4,\n 3,\n ],\n };\n }\n } else if (numBehind === 2) {\n if (!p0Behind) {\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u1);\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 1,\n 2,\n 4,\n 1,\n 4,\n 3,\n\n // In front\n 0,\n 3,\n 4,\n ],\n };\n } else if (!p1Behind) {\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u1);\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 2,\n 0,\n 4,\n 2,\n 4,\n 3,\n\n // In front\n 1,\n 3,\n 4,\n ],\n };\n } else if (!p2Behind) {\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u1);\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u2);\n\n return {\n positions: [p0, p1, p2, u1, u2],\n indices: [\n // Behind\n 0,\n 1,\n 4,\n 0,\n 4,\n 3,\n\n // In front\n 2,\n 3,\n 4,\n ],\n };\n }\n }\n\n // if numBehind is 3, the triangle is completely behind the plane;\n // otherwise, it is completely in front (numBehind is 0).\n return undefined;\n};\nexport default IntersectionTests;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * A plane in Hessian Normal Form defined by\n * <pre>\n * ax + by + cz + d = 0\n * </pre>\n * where (a, b, c) is the plane's <code>normal</code>, d is the signed\n * <code>distance</code> to the plane, and (x, y, z) is any point on\n * the plane.\n *\n * @alias Plane\n * @constructor\n *\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {Number} distance The shortest distance from the origin to the plane. The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on. If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n *\n * @example\n * // The plane x=0\n * var plane = new Cesium.Plane(Cesium.Cartesian3.UNIT_X, 0.0);\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nfunction Plane(normal, distance) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"normal\", normal);\n if (\n !CesiumMath.equalsEpsilon(\n Cartesian3.magnitude(normal),\n 1.0,\n CesiumMath.EPSILON6\n )\n ) {\n throw new DeveloperError(\"normal must be normalized.\");\n }\n Check.typeOf.number(\"distance\", distance);\n //>>includeEnd('debug');\n\n /**\n * The plane's normal.\n *\n * @type {Cartesian3}\n */\n this.normal = Cartesian3.clone(normal);\n\n /**\n * The shortest distance from the origin to the plane. The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on. If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n *\n * @type {Number}\n */\n this.distance = distance;\n}\n\n/**\n * Creates a plane from a normal and a point on the plane.\n *\n * @param {Cartesian3} point The point on the plane.\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} A new plane instance or the modified result parameter.\n *\n * @example\n * var point = Cesium.Cartesian3.fromDegrees(-72.0, 40.0);\n * var normal = ellipsoid.geodeticSurfaceNormal(point);\n * var tangentPlane = Cesium.Plane.fromPointNormal(point, normal);\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nPlane.fromPointNormal = function (point, normal, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"point\", point);\n Check.typeOf.object(\"normal\", normal);\n if (\n !CesiumMath.equalsEpsilon(\n Cartesian3.magnitude(normal),\n 1.0,\n CesiumMath.EPSILON6\n )\n ) {\n throw new DeveloperError(\"normal must be normalized.\");\n }\n //>>includeEnd('debug');\n\n var distance = -Cartesian3.dot(normal, point);\n\n if (!defined(result)) {\n return new Plane(normal, distance);\n }\n\n Cartesian3.clone(normal, result.normal);\n result.distance = distance;\n return result;\n};\n\nvar scratchNormal = new Cartesian3();\n/**\n * Creates a plane from the general equation\n *\n * @param {Cartesian4} coefficients The plane's normal (normalized).\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} A new plane instance or the modified result parameter.\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nPlane.fromCartesian4 = function (coefficients, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"coefficients\", coefficients);\n //>>includeEnd('debug');\n\n var normal = Cartesian3.fromCartesian4(coefficients, scratchNormal);\n var distance = coefficients.w;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !CesiumMath.equalsEpsilon(\n Cartesian3.magnitude(normal),\n 1.0,\n CesiumMath.EPSILON6\n )\n ) {\n throw new DeveloperError(\"normal must be normalized.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Plane(normal, distance);\n }\n Cartesian3.clone(normal, result.normal);\n result.distance = distance;\n return result;\n};\n\n/**\n * Computes the signed shortest distance of a point to a plane.\n * The sign of the distance determines which side of the plane the point\n * is on. If the distance is positive, the point is in the half-space\n * in the direction of the normal; if negative, the point is in the half-space\n * opposite to the normal; if zero, the plane passes through the point.\n *\n * @param {Plane} plane The plane.\n * @param {Cartesian3} point The point.\n * @returns {Number} The signed shortest distance of the point to the plane.\n */\nPlane.getPointDistance = function (plane, point) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"plane\", plane);\n Check.typeOf.object(\"point\", point);\n //>>includeEnd('debug');\n\n return Cartesian3.dot(plane.normal, point) + plane.distance;\n};\n\nvar scratchCartesian = new Cartesian3();\n/**\n * Projects a point onto the plane.\n * @param {Plane} plane The plane to project the point onto\n * @param {Cartesian3} point The point to project onto the plane\n * @param {Cartesian3} [result] The result point. If undefined, a new Cartesian3 will be created.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nPlane.projectPointOntoPlane = function (plane, point, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"plane\", plane);\n Check.typeOf.object(\"point\", point);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n // projectedPoint = point - (normal.point + scale) * normal\n var pointDistance = Plane.getPointDistance(plane, point);\n var scaledNormal = Cartesian3.multiplyByScalar(\n plane.normal,\n pointDistance,\n scratchCartesian\n );\n\n return Cartesian3.subtract(point, scaledNormal, result);\n};\n\nvar scratchPosition = new Cartesian3();\n/**\n * Transforms the plane by the given transformation matrix.\n *\n * @param {Plane} plane The plane.\n * @param {Matrix4} transform The transformation matrix.\n * @param {Plane} [result] The object into which to store the result.\n * @returns {Plane} The plane transformed by the given transformation matrix.\n */\nPlane.transform = function (plane, transform, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"plane\", plane);\n Check.typeOf.object(\"transform\", transform);\n //>>includeEnd('debug');\n\n Matrix4.multiplyByPointAsVector(transform, plane.normal, scratchNormal);\n Cartesian3.normalize(scratchNormal, scratchNormal);\n\n Cartesian3.multiplyByScalar(plane.normal, -plane.distance, scratchPosition);\n Matrix4.multiplyByPoint(transform, scratchPosition, scratchPosition);\n\n return Plane.fromPointNormal(scratchPosition, scratchNormal, result);\n};\n\n/**\n * Duplicates a Plane instance.\n *\n * @param {Plane} plane The plane to duplicate.\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} The modified result parameter or a new Plane instance if one was not provided.\n */\nPlane.clone = function (plane, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"plane\", plane);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Plane(plane.normal, plane.distance);\n }\n\n Cartesian3.clone(plane.normal, result.normal);\n result.distance = plane.distance;\n\n return result;\n};\n\n/**\n * Compares the provided Planes by normal and distance and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Plane} left The first plane.\n * @param {Plane} right The second plane.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPlane.equals = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n return (\n left.distance === right.distance &&\n Cartesian3.equals(left.normal, right.normal)\n );\n};\n\n/**\n * A constant initialized to the XY plane passing through the origin, with normal in positive Z.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_XY_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Z, 0.0));\n\n/**\n * A constant initialized to the YZ plane passing through the origin, with normal in positive X.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_YZ_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_X, 0.0));\n\n/**\n * A constant initialized to the ZX plane passing through the origin, with normal in positive Y.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_ZX_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Y, 0.0));\nexport default Plane;\n","import Check from \"./Check.js\";\n\n/**\n * Finds an item in a sorted array.\n *\n * @function\n * @param {Array} array The sorted array to search.\n * @param {*} itemToFind The item to find in the array.\n * @param {binarySearchComparator} comparator The function to use to compare the item to\n * elements in the array.\n * @returns {Number} The index of <code>itemToFind</code> in the array, if it exists. If <code>itemToFind</code>\n * does not exist, the return value is a negative number which is the bitwise complement (~)\n * of the index before which the itemToFind should be inserted in order to maintain the\n * sorted order of the array.\n *\n * @example\n * // Create a comparator function to search through an array of numbers.\n * function comparator(a, b) {\n * return a - b;\n * };\n * var numbers = [0, 2, 4, 6, 8];\n * var index = Cesium.binarySearch(numbers, 6, comparator); // 3\n */\nfunction binarySearch(array, itemToFind, comparator) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n Check.defined(\"itemToFind\", itemToFind);\n Check.defined(\"comparator\", comparator);\n //>>includeEnd('debug');\n\n var low = 0;\n var high = array.length - 1;\n var i;\n var comparison;\n\n while (low <= high) {\n i = ~~((low + high) / 2);\n comparison = comparator(array[i], itemToFind);\n if (comparison < 0) {\n low = i + 1;\n continue;\n }\n if (comparison > 0) {\n high = i - 1;\n continue;\n }\n return i;\n }\n return ~(high + 1);\n}\n\n/**\n * A function used to compare two items while performing a binary search.\n * @callback binarySearchComparator\n *\n * @param {*} a An item in the array.\n * @param {*} b The item being searched for.\n * @returns {Number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n * a positive value if <code>a</code> is greater than <code>b</code>, or\n * 0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b) {\n * return a - b;\n * }\n */\nexport default binarySearch;\n","/**\n * A set of Earth Orientation Parameters (EOP) sampled at a time.\n *\n * @alias EarthOrientationParametersSample\n * @constructor\n *\n * @param {Number} xPoleWander The pole wander about the X axis, in radians.\n * @param {Number} yPoleWander The pole wander about the Y axis, in radians.\n * @param {Number} xPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\n * @param {Number} yPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\n * @param {Number} ut1MinusUtc The difference in time standards, UT1 - UTC, in seconds.\n *\n * @private\n */\nfunction EarthOrientationParametersSample(\n xPoleWander,\n yPoleWander,\n xPoleOffset,\n yPoleOffset,\n ut1MinusUtc\n) {\n /**\n * The pole wander about the X axis, in radians.\n * @type {Number}\n */\n this.xPoleWander = xPoleWander;\n\n /**\n * The pole wander about the Y axis, in radians.\n * @type {Number}\n */\n this.yPoleWander = yPoleWander;\n\n /**\n * The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\n * @type {Number}\n */\n this.xPoleOffset = xPoleOffset;\n\n /**\n * The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\n * @type {Number}\n */\n this.yPoleOffset = yPoleOffset;\n\n /**\n * The difference in time standards, UT1 - UTC, in seconds.\n * @type {Number}\n */\n this.ut1MinusUtc = ut1MinusUtc;\n}\nexport default EarthOrientationParametersSample;\n","/**\n@license\nsprintf.js from the php.js project - https://github.com/kvz/phpjs\nDirectly from https://github.com/kvz/phpjs/blob/master/functions/strings/sprintf.js\n\nphp.js is copyright 2012 Kevin van Zonneveld.\n\nPortions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld\n(http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White\n(http://getsprink.com), Waldo Malqui Silva, Paulo Freitas, Jack, Jonas\nRaoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Legaev\nAndrey, Ates Goral (http://magnetiq.com), Alex, Ratheous, Martijn Wieringa,\nRafa? Kukawski (http://blog.kukawski.pl), lmeyrick\n(https://sourceforge.net/projects/bcmath-js/), Nate, Philippe Baumann,\nEnrique Gonzalez, Webtoolkit.info (http://www.webtoolkit.info/), Carlos R.\nL. Rodrigues (http://www.jsfromhell.com), Ash Searle\n(http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek,\nErkekjetter, Michael Grier, Rafa? Kukawski (http://kukawski.pl), Johnny\nMast (http://www.phpvrouwen.nl), T.Wild, d3x,\nhttp://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,\nRafa? Kukawski (http://blog.kukawski.pl/), stag019, pilus, WebDevHobo\n(http://webdevhobo.blogspot.com/), marrtins, GeekFG\n(http://geekfg.blogspot.com), Andrea Giammarchi\n(http://webreflection.blogspot.com), Arpad Ray (mailto:arpad@php.net),\ngorthaur, Paul Smith, Tim de Koning (http://www.kingsquare.nl), Joris, Oleg\nEremeev, Steve Hilder, majak, gettimeofday, KELAN, Josh Fraser\n(http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),\nMarc Palau, Martin\n(http://www.erlenwiese.de/), Breaking Par Consulting Inc\n(http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),\nChris, Mirek Slugen, saulius, Alfonso Jimenez\n(http://www.alfonsojimenez.com), Diplom@t (http://difane.com/), felix,\nMailfaker (http://www.weedem.fr/), Tyler Akins (http://rumkin.com), Caio\nAriede (http://caioariede.com), Robin, Kankrelune\n(http://www.webfaktory.info/), Karol Kowalski, Imgen Tata\n(http://www.myipdf.com/), mdsjack (http://www.mdsjack.bo.it), Dreamer,\nFelix Geisendoerfer (http://www.debuggable.com/felix), Lars Fischer, AJ,\nDavid, Aman Gupta, Michael White, Public Domain\n(http://www.json.org/json2.js), Steven Levithan\n(http://blog.stevenlevithan.com), Sakimori, Pellentesque Malesuada,\nThunder.m, Dj (http://phpjs.org/functions/htmlentities:425#comment_134018),\nSteve Clay, David James, Francois, class_exists, nobbler, T. Wild, Itsacon\n(http://www.itsacon.net/), date, Ole Vrijenhoek (http://www.nervous.nl/),\nFox, Raphael (Ao RUDLER), Marco, noname, Mateusz \"loonquawl\" Zalega, Frank\nForte, Arno, ger, mktime, john (http://www.jd-tech.net), Nick Kolosov\n(http://sammy.ru), marc andreu, Scott Cariss, Douglas Crockford\n(http://javascript.crockford.com), madipta, Slawomir Kaniecki,\nReverseSyntax, Nathan, Alex Wilson, kenneth, Bayron Guevara, Adam Wallner\n(http://web2.bitbaro.hu/), paulo kuong, jmweb, Lincoln Ramsay, djmix,\nPyerre, Jon Hohle, Thiago Mata (http://thiagomata.blog.com), lmeyrick\n(https://sourceforge.net/projects/bcmath-js/this.), Linuxworld, duncan,\nGilbert, Sanjoy Roy, Shingo, sankai, Oskar Larsson H?gfeldt\n(http://oskar-lh.name/), Denny Wardhana, 0m3r, Everlasto, Subhasis Deb,\njosh, jd, Pier Paolo Ramon (http://www.mastersoup.com/), P, merabi, Soren\nHansen, Eugene Bulkin (http://doubleaw.com/), Der Simon\n(http://innerdom.sourceforge.net/), echo is bad, Ozh, XoraX\n(http://www.xorax.info), EdorFaus, JB, J A R, Marc Jansen, Francesco, LH,\nStoyan Kyosev (http://www.svest.org/), nord_ua, omid\n(http://phpjs.org/functions/380:380#comment_137122), Brad Touesnard, MeEtc\n(http://yass.meetcweb.com), Peter-Paul Koch\n(http://www.quirksmode.org/js/beat.html), Olivier Louvignes\n(http://mg-crea.com/), T0bsn, Tim Wiel, Bryan Elliott, Jalal Berrami,\nMartin, JT, David Randall, Thomas Beaucourt (http://www.webapp.fr), taith,\nvlado houba, Pierre-Luc Paour, Kristof Coomans (SCK-CEN Belgian Nucleair\nResearch Centre), Martin Pool, Kirk Strobeck, Rick Waldron, Brant Messenger\n(http://www.brantmessenger.com/), Devan Penner-Woelk, Saulo Vallory, Wagner\nB. Soares, Artur Tchernychev, Valentina De Rosa, Jason Wong\n(http://carrot.org/), Christoph, Daniel Esteban, strftime, Mick@el, rezna,\nSimon Willison (http://simonwillison.net), Anton Ongson, Gabriel Paderni,\nMarco van Oort, penutbutterjelly, Philipp Lenssen, Bjorn Roesbeke\n(http://www.bjornroesbeke.be/), Bug?, Eric Nagel, Tomasz Wesolowski,\nEvertjan Garretsen, Bobby Drake, Blues (http://tech.bluesmoon.info/), Luke\nGodfrey, Pul, uestla, Alan C, Ulrich, Rafal Kukawski, Yves Sucaet,\nsowberry, Norman \"zEh\" Fuchs, hitwork, Zahlii, johnrembo, Nick Callen,\nSteven Levithan (stevenlevithan.com), ejsanders, Scott Baker, Brian Tafoya\n(http://www.premasolutions.com/), Philippe Jausions\n(http://pear.php.net/user/jausions), Aidan Lister\n(http://aidanlister.com/), Rob, e-mike, HKM, ChaosNo1, metjay, strcasecmp,\nstrcmp, Taras Bogach, jpfle, Alexander Ermolaev\n(http://snippets.dzone.com/user/AlexanderErmolaev), DxGx, kilops, Orlando,\ndptr1988, Le Torbi, James (http://www.james-bell.co.uk/), Pedro Tainha\n(http://www.pedrotainha.com), James, Arnout Kazemier\n(http://www.3rd-Eden.com), Chris McMacken, gabriel paderni, Yannoo,\nFGFEmperor, baris ozdil, Tod Gentille, Greg Frazier, jakes, 3D-GRAF, Allan\nJensen (http://www.winternet.no), Howard Yeend, Benjamin Lupton, davook,\ndaniel airton wermann (http://wermann.com.br), Atli T¨®r, Maximusya, Ryan\nW Tenney (http://ryan.10e.us), Alexander M Beedie, fearphage\n(http://http/my.opera.com/fearphage/), Nathan Sepulveda, Victor, Matteo,\nBilly, stensi, Cord, Manish, T.J. Leahy, Riddler\n(http://www.frontierwebdev.com/), Rafa? Kukawski, FremyCompany, Matt\nBradley, Tim de Koning, Luis Salazar (http://www.freaky-media.com/), Diogo\nResende, Rival, Andrej Pavlovic, Garagoth, Le Torbi\n(http://www.letorbi.de/), Dino, Josep Sanz (http://www.ws3.es/), rem,\nRussell Walker (http://www.nbill.co.uk/), Jamie Beck\n(http://www.terabit.ca/), setcookie, Michael, YUI Library:\nhttp://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Blues at\nhttp://hacks.bluesmoon.info/strftime/strftime.js, Ben\n(http://benblume.co.uk/), DtTvB\n(http://dt.in.th/2008-09-16.string-length-in-bytes.html), Andreas, William,\nmeo, incidence, Cagri Ekin, Amirouche, Amir Habibi\n(http://www.residence-mixte.com/), Luke Smith (http://lucassmith.name),\nKheang Hok Chin (http://www.distantia.ca/), Jay Klehr, Lorenzo Pisani,\nTony, Yen-Wei Liu, Greenseed, mk.keck, Leslie Hoare, dude, booeyOH, Ben\nBryan\n\nLicensed under the MIT (MIT-LICENSE.txt) license.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES\nOR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n*/\n\nfunction sprintf () {\n // http://kevin.vanzonneveld.net\n // + original by: Ash Searle (http://hexmen.com/blog/)\n // + namespaced by: Michael White (http://getsprink.com)\n // + tweaked by: Jack\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + input by: Paulo Freitas\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + input by: Brett Zamir (http://brett-zamir.me)\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + improved by: Dj\n // + improved by: Allidylls\n // * example 1: sprintf(\"%01.2f\", 123.1);\n // * returns 1: 123.10\n // * example 2: sprintf(\"[%10s]\", 'monkey');\n // * returns 2: '[ monkey]'\n // * example 3: sprintf(\"[%'#10s]\", 'monkey');\n // * returns 3: '[####monkey]'\n // * example 4: sprintf(\"%d\", 123456789012345);\n // * returns 4: '123456789012345'\n var regex = /%%|%(\\d+\\$)?([-+\\'#0 ]*)(\\*\\d+\\$|\\*|\\d+)?(\\.(\\*\\d+\\$|\\*|\\d+))?([scboxXuideEfFgG])/g;\n var a = arguments,\n i = 0,\n format = a[i++];\n\n // pad()\n var pad = function (str, len, chr, leftJustify) {\n if (!chr) {\n chr = ' ';\n }\n\n var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);\n return leftJustify ? str + padding : padding + str;\n };\n\n // justify()\n var justify = function (value, prefix, leftJustify, minWidth, zeroPad, customPadChar) {\n var diff = minWidth - value.length;\n if (diff > 0) {\n if (leftJustify || !zeroPad) {\n value = pad(value, minWidth, customPadChar, leftJustify);\n } else {\n value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);\n }\n }\n return value;\n };\n\n // formatBaseX()\n var formatBaseX = function (value, base, prefix, leftJustify, minWidth, precision, zeroPad) {\n // Note: casts negative numbers to positive ones\n var number = value >>> 0;\n prefix = prefix && number && {\n '2': '0b',\n '8': '0',\n '16': '0x'\n }[base] || '';\n value = prefix + pad(number.toString(base), precision || 0, '0', false);\n return justify(value, prefix, leftJustify, minWidth, zeroPad);\n };\n\n // formatString()\n var formatString = function (value, leftJustify, minWidth, precision, zeroPad, customPadChar) {\n if (precision != null) {\n value = value.slice(0, precision);\n }\n return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar);\n };\n\n // doFormat()\n var doFormat = function (substring, valueIndex, flags, minWidth, _, precision, type) {\n var number;\n var prefix;\n var method;\n var textTransform;\n var value;\n\n if (substring == '%%') {\n return '%';\n }\n\n // parse flags\n var leftJustify = false,\n positivePrefix = '',\n zeroPad = false,\n prefixBaseX = false,\n customPadChar = ' ';\n var flagsl = flags.length;\n for (var j = 0; flags && j < flagsl; j++) {\n switch (flags.charAt(j)) {\n case ' ':\n positivePrefix = ' ';\n break;\n case '+':\n positivePrefix = '+';\n break;\n case '-':\n leftJustify = true;\n break;\n case \"'\":\n customPadChar = flags.charAt(j + 1);\n break;\n case '0':\n zeroPad = true;\n break;\n case '#':\n prefixBaseX = true;\n break;\n }\n }\n\n // parameters may be null, undefined, empty-string or real valued\n // we want to ignore null, undefined and empty-string values\n if (!minWidth) {\n minWidth = 0;\n } else if (minWidth == '*') {\n minWidth = +a[i++];\n } else if (minWidth.charAt(0) == '*') {\n minWidth = +a[minWidth.slice(1, -1)];\n } else {\n minWidth = +minWidth;\n }\n\n // Note: undocumented perl feature:\n if (minWidth < 0) {\n minWidth = -minWidth;\n leftJustify = true;\n }\n\n if (!isFinite(minWidth)) {\n throw new Error('sprintf: (minimum-)width must be finite');\n }\n\n if (!precision) {\n precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : undefined;\n } else if (precision == '*') {\n precision = +a[i++];\n } else if (precision.charAt(0) == '*') {\n precision = +a[precision.slice(1, -1)];\n } else {\n precision = +precision;\n }\n\n // grab value using valueIndex if required?\n value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];\n\n switch (type) {\n case 's':\n return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar);\n case 'c':\n return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);\n case 'b':\n return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);\n case 'o':\n return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);\n case 'x':\n return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);\n case 'X':\n return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();\n case 'u':\n return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);\n case 'i':\n case 'd':\n number = +value || 0;\n number = Math.round(number - number % 1); // Plain Math.round doesn't just truncate\n prefix = number < 0 ? '-' : positivePrefix;\n value = prefix + pad(String(Math.abs(number)), precision, '0', false);\n return justify(value, prefix, leftJustify, minWidth, zeroPad);\n case 'e':\n case 'E':\n case 'f': // Should handle locales (as per setlocale)\n case 'F':\n case 'g':\n case 'G':\n number = +value;\n prefix = number < 0 ? '-' : positivePrefix;\n method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];\n textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];\n value = prefix + Math.abs(number)[method](precision);\n return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();\n default:\n return substring;\n }\n };\n\n return format.replace(regex, doFormat);\n}\n\nexport default sprintf;\n","/**\n * Represents a Gregorian date in a more precise format than the JavaScript Date object.\n * In addition to submillisecond precision, this object can also represent leap seconds.\n * @alias GregorianDate\n * @constructor\n *\n * @param {Number} [year] The year as a whole number.\n * @param {Number} [month] The month as a whole number with range [1, 12].\n * @param {Number} [day] The day of the month as a whole number starting at 1.\n * @param {Number} [hour] The hour as a whole number with range [0, 23].\n * @param {Number} [minute] The minute of the hour as a whole number with range [0, 59].\n * @param {Number} [second] The second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\n * @param {Number} [millisecond] The millisecond of the second as a floating point number with range [0.0, 1000.0).\n * @param {Boolean} [isLeapSecond] Whether this time is during a leap second.\n *\n * @see JulianDate#toGregorianDate\n */\nfunction GregorianDate(\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond,\n isLeapSecond\n) {\n /**\n * Gets or sets the year as a whole number.\n * @type {Number}\n */\n this.year = year;\n /**\n * Gets or sets the month as a whole number with range [1, 12].\n * @type {Number}\n */\n this.month = month;\n /**\n * Gets or sets the day of the month as a whole number starting at 1.\n * @type {Number}\n */\n this.day = day;\n /**\n * Gets or sets the hour as a whole number with range [0, 23].\n * @type {Number}\n */\n this.hour = hour;\n /**\n * Gets or sets the minute of the hour as a whole number with range [0, 59].\n * @type {Number}\n */\n this.minute = minute;\n /**\n * Gets or sets the second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\n * @type {Number}\n */\n this.second = second;\n /**\n * Gets or sets the millisecond of the second as a floating point number with range [0.0, 1000.0).\n * @type {Number}\n */\n this.millisecond = millisecond;\n /**\n * Gets or sets whether this time is during a leap second.\n * @type {Boolean}\n */\n this.isLeapSecond = isLeapSecond;\n}\nexport default GregorianDate;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Determines if a given date is a leap year.\n *\n * @function isLeapYear\n *\n * @param {Number} year The year to be tested.\n * @returns {Boolean} True if <code>year</code> is a leap year.\n *\n * @example\n * var leapYear = Cesium.isLeapYear(2000); // true\n */\nfunction isLeapYear(year) {\n //>>includeStart('debug', pragmas.debug);\n if (year === null || isNaN(year)) {\n throw new DeveloperError(\"year is required and must be a number.\");\n }\n //>>includeEnd('debug');\n\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\nexport default isLeapYear;\n","/**\n * Describes a single leap second, which is constructed from a {@link JulianDate} and a\n * numerical offset representing the number of seconds TAI is ahead of the UTC time standard.\n * @alias LeapSecond\n * @constructor\n *\n * @param {JulianDate} [date] A Julian date representing the time of the leap second.\n * @param {Number} [offset] The cumulative number of seconds that TAI is ahead of UTC at the provided date.\n */\nfunction LeapSecond(date, offset) {\n /**\n * Gets or sets the date at which this leap second occurs.\n * @type {JulianDate}\n */\n this.julianDate = date;\n\n /**\n * Gets or sets the cumulative number of seconds between the UTC and TAI time standards at the time\n * of this leap second.\n * @type {Number}\n */\n this.offset = offset;\n}\nexport default LeapSecond;\n","/**\n * Constants for time conversions like those done by {@link JulianDate}.\n *\n * @namespace TimeConstants\n *\n * @see JulianDate\n *\n * @private\n */\nvar TimeConstants = {\n /**\n * The number of seconds in one millisecond: <code>0.001</code>\n * @type {Number}\n * @constant\n */\n SECONDS_PER_MILLISECOND: 0.001,\n\n /**\n * The number of seconds in one minute: <code>60</code>.\n * @type {Number}\n * @constant\n */\n SECONDS_PER_MINUTE: 60.0,\n\n /**\n * The number of minutes in one hour: <code>60</code>.\n * @type {Number}\n * @constant\n */\n MINUTES_PER_HOUR: 60.0,\n\n /**\n * The number of hours in one day: <code>24</code>.\n * @type {Number}\n * @constant\n */\n HOURS_PER_DAY: 24.0,\n\n /**\n * The number of seconds in one hour: <code>3600</code>.\n * @type {Number}\n * @constant\n */\n SECONDS_PER_HOUR: 3600.0,\n\n /**\n * The number of minutes in one day: <code>1440</code>.\n * @type {Number}\n * @constant\n */\n MINUTES_PER_DAY: 1440.0,\n\n /**\n * The number of seconds in one day, ignoring leap seconds: <code>86400</code>.\n * @type {Number}\n * @constant\n */\n SECONDS_PER_DAY: 86400.0,\n\n /**\n * The number of days in one Julian century: <code>36525</code>.\n * @type {Number}\n * @constant\n */\n DAYS_PER_JULIAN_CENTURY: 36525.0,\n\n /**\n * One trillionth of a second.\n * @type {Number}\n * @constant\n */\n PICOSECOND: 0.000000001,\n\n /**\n * The number of days to subtract from a Julian date to determine the\n * modified Julian date, which gives the number of days since midnight\n * on November 17, 1858.\n * @type {Number}\n * @constant\n */\n MODIFIED_JULIAN_DATE_DIFFERENCE: 2400000.5,\n};\nexport default Object.freeze(TimeConstants);\n","/**\n * Provides the type of time standards which JulianDate can take as input.\n *\n * @enum {Number}\n *\n * @see JulianDate\n */\nvar TimeStandard = {\n /**\n * Represents the coordinated Universal Time (UTC) time standard.\n *\n * UTC is related to TAI according to the relationship\n * <code>UTC = TAI - deltaT</code> where <code>deltaT</code> is the number of leap\n * seconds which have been introduced as of the time in TAI.\n *\n * @type {Number}\n * @constant\n */\n UTC: 0,\n\n /**\n * Represents the International Atomic Time (TAI) time standard.\n * TAI is the principal time standard to which the other time standards are related.\n *\n * @type {Number}\n * @constant\n */\n TAI: 1,\n};\nexport default Object.freeze(TimeStandard);\n","import sprintf from \"../ThirdParty/sprintf.js\";\nimport binarySearch from \"./binarySearch.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GregorianDate from \"./GregorianDate.js\";\nimport isLeapYear from \"./isLeapYear.js\";\nimport LeapSecond from \"./LeapSecond.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\nvar gregorianDateScratch = new GregorianDate();\nvar daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar daysInLeapFeburary = 29;\n\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\n return JulianDate.compare(leapSecond.julianDate, dateToFind.julianDate);\n}\n\n// we don't really need a leap second instance, anything with a julianDate property will do\nvar binarySearchScratchLeapSecond = new LeapSecond();\n\nfunction convertUtcToTai(julianDate) {\n //Even though julianDate is in UTC, we'll treat it as TAI and\n //search the leap second table for it.\n binarySearchScratchLeapSecond.julianDate = julianDate;\n var leapSeconds = JulianDate.leapSeconds;\n var index = binarySearch(\n leapSeconds,\n binarySearchScratchLeapSecond,\n compareLeapSecondDates\n );\n\n if (index < 0) {\n index = ~index;\n }\n\n if (index >= leapSeconds.length) {\n index = leapSeconds.length - 1;\n }\n\n var offset = leapSeconds[index].offset;\n if (index > 0) {\n //Now we have the index of the closest leap second that comes on or after our UTC time.\n //However, if the difference between the UTC date being converted and the TAI\n //defined leap second is greater than the offset, we are off by one and need to use\n //the previous leap second.\n var difference = JulianDate.secondsDifference(\n leapSeconds[index].julianDate,\n julianDate\n );\n if (difference > offset) {\n index--;\n offset = leapSeconds[index].offset;\n }\n }\n\n JulianDate.addSeconds(julianDate, offset, julianDate);\n}\n\nfunction convertTaiToUtc(julianDate, result) {\n binarySearchScratchLeapSecond.julianDate = julianDate;\n var leapSeconds = JulianDate.leapSeconds;\n var index = binarySearch(\n leapSeconds,\n binarySearchScratchLeapSecond,\n compareLeapSecondDates\n );\n if (index < 0) {\n index = ~index;\n }\n\n //All times before our first leap second get the first offset.\n if (index === 0) {\n return JulianDate.addSeconds(julianDate, -leapSeconds[0].offset, result);\n }\n\n //All times after our leap second get the last offset.\n if (index >= leapSeconds.length) {\n return JulianDate.addSeconds(\n julianDate,\n -leapSeconds[index - 1].offset,\n result\n );\n }\n\n //Compute the difference between the found leap second and the time we are converting.\n var difference = JulianDate.secondsDifference(\n leapSeconds[index].julianDate,\n julianDate\n );\n\n if (difference === 0) {\n //The date is in our leap second table.\n return JulianDate.addSeconds(\n julianDate,\n -leapSeconds[index].offset,\n result\n );\n }\n\n if (difference <= 1.0) {\n //The requested date is during the moment of a leap second, then we cannot convert to UTC\n return undefined;\n }\n\n //The time is in between two leap seconds, index is the leap second after the date\n //we're converting, so we subtract one to get the correct LeapSecond instance.\n return JulianDate.addSeconds(\n julianDate,\n -leapSeconds[--index].offset,\n result\n );\n}\n\nfunction setComponents(wholeDays, secondsOfDay, julianDate) {\n var extraDays = (secondsOfDay / TimeConstants.SECONDS_PER_DAY) | 0;\n wholeDays += extraDays;\n secondsOfDay -= TimeConstants.SECONDS_PER_DAY * extraDays;\n\n if (secondsOfDay < 0) {\n wholeDays--;\n secondsOfDay += TimeConstants.SECONDS_PER_DAY;\n }\n\n julianDate.dayNumber = wholeDays;\n julianDate.secondsOfDay = secondsOfDay;\n return julianDate;\n}\n\nfunction computeJulianDateComponents(\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n) {\n // Algorithm from page 604 of the Explanatory Supplement to the\n // Astronomical Almanac (Seidelmann 1992).\n\n var a = ((month - 14) / 12) | 0;\n var b = year + 4800 + a;\n var dayNumber =\n (((1461 * b) / 4) | 0) +\n (((367 * (month - 2 - 12 * a)) / 12) | 0) -\n (((3 * (((b + 100) / 100) | 0)) / 4) | 0) +\n day -\n 32075;\n\n // JulianDates are noon-based\n hour = hour - 12;\n if (hour < 0) {\n hour += 24;\n }\n\n var secondsOfDay =\n second +\n (hour * TimeConstants.SECONDS_PER_HOUR +\n minute * TimeConstants.SECONDS_PER_MINUTE +\n millisecond * TimeConstants.SECONDS_PER_MILLISECOND);\n\n if (secondsOfDay >= 43200.0) {\n dayNumber -= 1;\n }\n\n return [dayNumber, secondsOfDay];\n}\n\n//Regular expressions used for ISO8601 date parsing.\n//YYYY\nvar matchCalendarYear = /^(\\d{4})$/;\n//YYYY-MM (YYYYMM is invalid)\nvar matchCalendarMonth = /^(\\d{4})-(\\d{2})$/;\n//YYYY-DDD or YYYYDDD\nvar matchOrdinalDate = /^(\\d{4})-?(\\d{3})$/;\n//YYYY-Www or YYYYWww or YYYY-Www-D or YYYYWwwD\nvar matchWeekDate = /^(\\d{4})-?W(\\d{2})-?(\\d{1})?$/;\n//YYYY-MM-DD or YYYYMMDD\nvar matchCalendarDate = /^(\\d{4})-?(\\d{2})-?(\\d{2})$/;\n// Match utc offset\nvar utcOffset = /([Z+\\-])?(\\d{2})?:?(\\d{2})?$/;\n// Match hours HH or HH.xxxxx\nvar matchHours = /^(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n// Match hours/minutes HH:MM HHMM.xxxxx\nvar matchHoursMinutes = /^(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n// Match hours/minutes HH:MM:SS HHMMSS.xxxxx\nvar matchHoursMinutesSeconds =\n /^(\\d{2}):?(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n\nvar iso8601ErrorMessage = \"Invalid ISO 8601 date.\";\n\n/**\n * Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC).\n * For increased precision, this class stores the whole number part of the date and the seconds\n * part of the date in separate components. In order to be safe for arithmetic and represent\n * leap seconds, the date is always stored in the International Atomic Time standard\n * {@link TimeStandard.TAI}.\n * @alias JulianDate\n * @constructor\n *\n * @param {Number} [julianDayNumber=0.0] The Julian Day Number representing the number of whole days. Fractional days will also be handled correctly.\n * @param {Number} [secondsOfDay=0.0] The number of seconds into the current Julian Day Number. Fractional seconds, negative seconds and seconds greater than a day will be handled correctly.\n * @param {TimeStandard} [timeStandard=TimeStandard.UTC] The time standard in which the first two parameters are defined.\n */\nfunction JulianDate(julianDayNumber, secondsOfDay, timeStandard) {\n /**\n * Gets or sets the number of whole days.\n * @type {Number}\n */\n this.dayNumber = undefined;\n\n /**\n * Gets or sets the number of seconds into the current day.\n * @type {Number}\n */\n this.secondsOfDay = undefined;\n\n julianDayNumber = defaultValue(julianDayNumber, 0.0);\n secondsOfDay = defaultValue(secondsOfDay, 0.0);\n timeStandard = defaultValue(timeStandard, TimeStandard.UTC);\n\n //If julianDayNumber is fractional, make it an integer and add the number of seconds the fraction represented.\n var wholeDays = julianDayNumber | 0;\n secondsOfDay =\n secondsOfDay +\n (julianDayNumber - wholeDays) * TimeConstants.SECONDS_PER_DAY;\n\n setComponents(wholeDays, secondsOfDay, this);\n\n if (timeStandard === TimeStandard.UTC) {\n convertUtcToTai(this);\n }\n}\n\n/**\n * Creates a new instance from a GregorianDate.\n *\n * @param {GregorianDate} date A GregorianDate.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} date must be a valid GregorianDate.\n */\nJulianDate.fromGregorianDate = function (date, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!(date instanceof GregorianDate)) {\n throw new DeveloperError(\"date must be a valid GregorianDate.\");\n }\n //>>includeEnd('debug');\n\n var components = computeJulianDateComponents(\n date.year,\n date.month,\n date.day,\n date.hour,\n date.minute,\n date.second,\n date.millisecond\n );\n if (!defined(result)) {\n return new JulianDate(components[0], components[1], TimeStandard.UTC);\n }\n setComponents(components[0], components[1], result);\n convertUtcToTai(result);\n return result;\n};\n\n/**\n * Creates a new instance from a JavaScript Date.\n *\n * @param {Date} date A JavaScript Date.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} date must be a valid JavaScript Date.\n */\nJulianDate.fromDate = function (date, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!(date instanceof Date) || isNaN(date.getTime())) {\n throw new DeveloperError(\"date must be a valid JavaScript Date.\");\n }\n //>>includeEnd('debug');\n\n var components = computeJulianDateComponents(\n date.getUTCFullYear(),\n date.getUTCMonth() + 1,\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds()\n );\n if (!defined(result)) {\n return new JulianDate(components[0], components[1], TimeStandard.UTC);\n }\n setComponents(components[0], components[1], result);\n convertUtcToTai(result);\n return result;\n};\n\n/**\n * Creates a new instance from a from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date.\n * This method is superior to <code>Date.parse</code> because it will handle all valid formats defined by the ISO 8601\n * specification, including leap seconds and sub-millisecond times, which discarded by most JavaScript implementations.\n *\n * @param {String} iso8601String An ISO 8601 date.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} Invalid ISO 8601 date.\n */\nJulianDate.fromIso8601 = function (iso8601String, result) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof iso8601String !== \"string\") {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug');\n\n //Comma and decimal point both indicate a fractional number according to ISO 8601,\n //start out by blanket replacing , with . which is the only valid such symbol in JS.\n iso8601String = iso8601String.replace(\",\", \".\");\n\n //Split the string into its date and time components, denoted by a mandatory T\n var tokens = iso8601String.split(\"T\");\n var year;\n var month = 1;\n var day = 1;\n var hour = 0;\n var minute = 0;\n var second = 0;\n var millisecond = 0;\n\n //Lacking a time is okay, but a missing date is illegal.\n var date = tokens[0];\n var time = tokens[1];\n var tmp;\n var inLeapYear;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(date)) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n\n var dashCount;\n //>>includeEnd('debug');\n\n //First match the date against possible regular expressions.\n tokens = date.match(matchCalendarDate);\n if (tokens !== null) {\n //>>includeStart('debug', pragmas.debug);\n dashCount = date.split(\"-\").length - 1;\n if (dashCount > 0 && dashCount !== 2) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug');\n year = +tokens[1];\n month = +tokens[2];\n day = +tokens[3];\n } else {\n tokens = date.match(matchCalendarMonth);\n if (tokens !== null) {\n year = +tokens[1];\n month = +tokens[2];\n } else {\n tokens = date.match(matchCalendarYear);\n if (tokens !== null) {\n year = +tokens[1];\n } else {\n //Not a year/month/day so it must be an ordinal date.\n var dayOfYear;\n tokens = date.match(matchOrdinalDate);\n if (tokens !== null) {\n year = +tokens[1];\n dayOfYear = +tokens[2];\n inLeapYear = isLeapYear(year);\n\n //This validation is only applicable for this format.\n //>>includeStart('debug', pragmas.debug);\n if (\n dayOfYear < 1 ||\n (inLeapYear && dayOfYear > 366) ||\n (!inLeapYear && dayOfYear > 365)\n ) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug')\n } else {\n tokens = date.match(matchWeekDate);\n if (tokens !== null) {\n //ISO week date to ordinal date from\n //http://en.wikipedia.org/w/index.php?title=ISO_week_date&oldid=474176775\n year = +tokens[1];\n var weekNumber = +tokens[2];\n var dayOfWeek = +tokens[3] || 0;\n\n //>>includeStart('debug', pragmas.debug);\n dashCount = date.split(\"-\").length - 1;\n if (\n dashCount > 0 &&\n ((!defined(tokens[3]) && dashCount !== 1) ||\n (defined(tokens[3]) && dashCount !== 2))\n ) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug')\n\n var january4 = new Date(Date.UTC(year, 0, 4));\n dayOfYear = weekNumber * 7 + dayOfWeek - january4.getUTCDay() - 3;\n } else {\n //None of our regular expressions succeeded in parsing the date properly.\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(iso8601ErrorMessage);\n //>>includeEnd('debug')\n }\n }\n //Split an ordinal date into month/day.\n tmp = new Date(Date.UTC(year, 0, 1));\n tmp.setUTCDate(dayOfYear);\n month = tmp.getUTCMonth() + 1;\n day = tmp.getUTCDate();\n }\n }\n }\n\n //Now that we have all of the date components, validate them to make sure nothing is out of range.\n inLeapYear = isLeapYear(year);\n //>>includeStart('debug', pragmas.debug);\n if (\n month < 1 ||\n month > 12 ||\n day < 1 ||\n ((month !== 2 || !inLeapYear) && day > daysInMonth[month - 1]) ||\n (inLeapYear && month === 2 && day > daysInLeapFeburary)\n ) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug')\n\n //Now move onto the time string, which is much simpler.\n //If no time is specified, it is considered the beginning of the day, UTC to match Javascript's implementation.\n var offsetIndex;\n if (defined(time)) {\n tokens = time.match(matchHoursMinutesSeconds);\n if (tokens !== null) {\n //>>includeStart('debug', pragmas.debug);\n dashCount = time.split(\":\").length - 1;\n if (dashCount > 0 && dashCount !== 2 && dashCount !== 3) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug')\n\n hour = +tokens[1];\n minute = +tokens[2];\n second = +tokens[3];\n millisecond = +(tokens[4] || 0) * 1000.0;\n offsetIndex = 5;\n } else {\n tokens = time.match(matchHoursMinutes);\n if (tokens !== null) {\n //>>includeStart('debug', pragmas.debug);\n dashCount = time.split(\":\").length - 1;\n if (dashCount > 2) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug')\n\n hour = +tokens[1];\n minute = +tokens[2];\n second = +(tokens[3] || 0) * 60.0;\n offsetIndex = 4;\n } else {\n tokens = time.match(matchHours);\n if (tokens !== null) {\n hour = +tokens[1];\n minute = +(tokens[2] || 0) * 60.0;\n offsetIndex = 3;\n } else {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(iso8601ErrorMessage);\n //>>includeEnd('debug')\n }\n }\n }\n\n //Validate that all values are in proper range. Minutes and hours have special cases at 60 and 24.\n //>>includeStart('debug', pragmas.debug);\n if (\n minute >= 60 ||\n second >= 61 ||\n hour > 24 ||\n (hour === 24 && (minute > 0 || second > 0 || millisecond > 0))\n ) {\n throw new DeveloperError(iso8601ErrorMessage);\n }\n //>>includeEnd('debug');\n\n //Check the UTC offset value, if no value exists, use local time\n //a Z indicates UTC, + or - are offsets.\n var offset = tokens[offsetIndex];\n var offsetHours = +tokens[offsetIndex + 1];\n var offsetMinutes = +(tokens[offsetIndex + 2] || 0);\n switch (offset) {\n case \"+\":\n hour = hour - offsetHours;\n minute = minute - offsetMinutes;\n break;\n case \"-\":\n hour = hour + offsetHours;\n minute = minute + offsetMinutes;\n break;\n case \"Z\":\n break;\n default:\n minute =\n minute +\n new Date(\n Date.UTC(year, month - 1, day, hour, minute)\n ).getTimezoneOffset();\n break;\n }\n }\n\n //ISO8601 denotes a leap second by any time having a seconds component of 60 seconds.\n //If that's the case, we need to temporarily subtract a second in order to build a UTC date.\n //Then we add it back in after converting to TAI.\n var isLeapSecond = second === 60;\n if (isLeapSecond) {\n second--;\n }\n\n //Even if we successfully parsed the string into its components, after applying UTC offset or\n //special cases like 24:00:00 denoting midnight, we need to normalize the data appropriately.\n\n //milliseconds can never be greater than 1000, and seconds can't be above 60, so we start with minutes\n while (minute >= 60) {\n minute -= 60;\n hour++;\n }\n\n while (hour >= 24) {\n hour -= 24;\n day++;\n }\n\n tmp = inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\n while (day > tmp) {\n day -= tmp;\n month++;\n\n if (month > 12) {\n month -= 12;\n year++;\n }\n\n tmp =\n inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\n }\n\n //If UTC offset is at the beginning/end of the day, minutes can be negative.\n while (minute < 0) {\n minute += 60;\n hour--;\n }\n\n while (hour < 0) {\n hour += 24;\n day--;\n }\n\n while (day < 1) {\n month--;\n if (month < 1) {\n month += 12;\n year--;\n }\n\n tmp =\n inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\n day += tmp;\n }\n\n //Now create the JulianDate components from the Gregorian date and actually create our instance.\n var components = computeJulianDateComponents(\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n );\n\n if (!defined(result)) {\n result = new JulianDate(components[0], components[1], TimeStandard.UTC);\n } else {\n setComponents(components[0], components[1], result);\n convertUtcToTai(result);\n }\n\n //If we were on a leap second, add it back.\n if (isLeapSecond) {\n JulianDate.addSeconds(result, 1, result);\n }\n\n return result;\n};\n\n/**\n * Creates a new instance that represents the current system time.\n * This is equivalent to calling <code>JulianDate.fromDate(new Date());</code>.\n *\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.now = function (result) {\n return JulianDate.fromDate(new Date(), result);\n};\n\nvar toGregorianDateScratch = new JulianDate(0, 0, TimeStandard.TAI);\n\n/**\n * Creates a {@link GregorianDate} from the provided instance.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @param {GregorianDate} [result] An existing instance to use for the result.\n * @returns {GregorianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.toGregorianDate = function (julianDate, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n //>>includeEnd('debug');\n\n var isLeapSecond = false;\n var thisUtc = convertTaiToUtc(julianDate, toGregorianDateScratch);\n if (!defined(thisUtc)) {\n //Conversion to UTC will fail if we are during a leap second.\n //If that's the case, subtract a second and convert again.\n //JavaScript doesn't support leap seconds, so this results in second 59 being repeated twice.\n JulianDate.addSeconds(julianDate, -1, toGregorianDateScratch);\n thisUtc = convertTaiToUtc(toGregorianDateScratch, toGregorianDateScratch);\n isLeapSecond = true;\n }\n\n var julianDayNumber = thisUtc.dayNumber;\n var secondsOfDay = thisUtc.secondsOfDay;\n\n if (secondsOfDay >= 43200.0) {\n julianDayNumber += 1;\n }\n\n // Algorithm from page 604 of the Explanatory Supplement to the\n // Astronomical Almanac (Seidelmann 1992).\n var L = (julianDayNumber + 68569) | 0;\n var N = ((4 * L) / 146097) | 0;\n L = (L - (((146097 * N + 3) / 4) | 0)) | 0;\n var I = ((4000 * (L + 1)) / 1461001) | 0;\n L = (L - (((1461 * I) / 4) | 0) + 31) | 0;\n var J = ((80 * L) / 2447) | 0;\n var day = (L - (((2447 * J) / 80) | 0)) | 0;\n L = (J / 11) | 0;\n var month = (J + 2 - 12 * L) | 0;\n var year = (100 * (N - 49) + I + L) | 0;\n\n var hour = (secondsOfDay / TimeConstants.SECONDS_PER_HOUR) | 0;\n var remainingSeconds = secondsOfDay - hour * TimeConstants.SECONDS_PER_HOUR;\n var minute = (remainingSeconds / TimeConstants.SECONDS_PER_MINUTE) | 0;\n remainingSeconds =\n remainingSeconds - minute * TimeConstants.SECONDS_PER_MINUTE;\n var second = remainingSeconds | 0;\n var millisecond =\n (remainingSeconds - second) / TimeConstants.SECONDS_PER_MILLISECOND;\n\n // JulianDates are noon-based\n hour += 12;\n if (hour > 23) {\n hour -= 24;\n }\n\n //If we were on a leap second, add it back.\n if (isLeapSecond) {\n second += 1;\n }\n\n if (!defined(result)) {\n return new GregorianDate(\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond,\n isLeapSecond\n );\n }\n\n result.year = year;\n result.month = month;\n result.day = day;\n result.hour = hour;\n result.minute = minute;\n result.second = second;\n result.millisecond = millisecond;\n result.isLeapSecond = isLeapSecond;\n return result;\n};\n\n/**\n * Creates a JavaScript Date from the provided instance.\n * Since JavaScript dates are only accurate to the nearest millisecond and\n * cannot represent a leap second, consider using {@link JulianDate.toGregorianDate} instead.\n * If the provided JulianDate is during a leap second, the previous second is used.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @returns {Date} A new instance representing the provided date.\n */\nJulianDate.toDate = function (julianDate) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n //>>includeEnd('debug');\n\n var gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\n var second = gDate.second;\n if (gDate.isLeapSecond) {\n second -= 1;\n }\n return new Date(\n Date.UTC(\n gDate.year,\n gDate.month - 1,\n gDate.day,\n gDate.hour,\n gDate.minute,\n second,\n gDate.millisecond\n )\n );\n};\n\n/**\n * Creates an ISO8601 representation of the provided date.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @param {Number} [precision] The number of fractional digits used to represent the seconds component. By default, the most precise representation is used.\n * @returns {String} The ISO8601 representation of the provided date.\n */\nJulianDate.toIso8601 = function (julianDate, precision) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n //>>includeEnd('debug');\n\n var gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\n var year = gDate.year;\n var month = gDate.month;\n var day = gDate.day;\n var hour = gDate.hour;\n var minute = gDate.minute;\n var second = gDate.second;\n var millisecond = gDate.millisecond;\n\n // special case - Iso8601.MAXIMUM_VALUE produces a string which we can't parse unless we adjust.\n // 10000-01-01T00:00:00 is the same instant as 9999-12-31T24:00:00\n if (\n year === 10000 &&\n month === 1 &&\n day === 1 &&\n hour === 0 &&\n minute === 0 &&\n second === 0 &&\n millisecond === 0\n ) {\n year = 9999;\n month = 12;\n day = 31;\n hour = 24;\n }\n\n var millisecondStr;\n\n if (!defined(precision) && millisecond !== 0) {\n //Forces milliseconds into a number with at least 3 digits to whatever the default toString() precision is.\n millisecondStr = (millisecond * 0.01).toString().replace(\".\", \"\");\n return sprintf(\n \"%04d-%02d-%02dT%02d:%02d:%02d.%sZ\",\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecondStr\n );\n }\n\n //Precision is either 0 or milliseconds is 0 with undefined precision, in either case, leave off milliseconds entirely\n if (!defined(precision) || precision === 0) {\n return sprintf(\n \"%04d-%02d-%02dT%02d:%02d:%02dZ\",\n year,\n month,\n day,\n hour,\n minute,\n second\n );\n }\n\n //Forces milliseconds into a number with at least 3 digits to whatever the specified precision is.\n millisecondStr = (millisecond * 0.01)\n .toFixed(precision)\n .replace(\".\", \"\")\n .slice(0, precision);\n return sprintf(\n \"%04d-%02d-%02dT%02d:%02d:%02d.%sZ\",\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecondStr\n );\n};\n\n/**\n * Duplicates a JulianDate instance.\n *\n * @param {JulianDate} julianDate The date to duplicate.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided. Returns undefined if julianDate is undefined.\n */\nJulianDate.clone = function (julianDate, result) {\n if (!defined(julianDate)) {\n return undefined;\n }\n if (!defined(result)) {\n return new JulianDate(\n julianDate.dayNumber,\n julianDate.secondsOfDay,\n TimeStandard.TAI\n );\n }\n result.dayNumber = julianDate.dayNumber;\n result.secondsOfDay = julianDate.secondsOfDay;\n return result;\n};\n\n/**\n * Compares two instances.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Number} A negative value if left is less than right, a positive value if left is greater than right, or zero if left and right are equal.\n */\nJulianDate.compare = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"left is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"right is required.\");\n }\n //>>includeEnd('debug');\n\n var julianDayNumberDifference = left.dayNumber - right.dayNumber;\n if (julianDayNumberDifference !== 0) {\n return julianDayNumberDifference;\n }\n return left.secondsOfDay - right.secondsOfDay;\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {JulianDate} [left] The first instance.\n * @param {JulianDate} [right] The second instance.\n * @returns {Boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nJulianDate.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.dayNumber === right.dayNumber &&\n left.secondsOfDay === right.secondsOfDay)\n );\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other. That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {JulianDate} [left] The first instance.\n * @param {JulianDate} [right] The second instance.\n * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @returns {Boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nJulianDate.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(JulianDate.secondsDifference(left, right)) <= epsilon)\n );\n};\n\n/**\n * Computes the total number of whole and fractional days represented by the provided instance.\n *\n * @param {JulianDate} julianDate The date.\n * @returns {Number} The Julian date as single floating point number.\n */\nJulianDate.totalDays = function (julianDate) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n //>>includeEnd('debug');\n return (\n julianDate.dayNumber +\n julianDate.secondsOfDay / TimeConstants.SECONDS_PER_DAY\n );\n};\n\n/**\n * Computes the difference in seconds between the provided instance.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Number} The difference, in seconds, when subtracting <code>right</code> from <code>left</code>.\n */\nJulianDate.secondsDifference = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"left is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"right is required.\");\n }\n //>>includeEnd('debug');\n\n var dayDifference =\n (left.dayNumber - right.dayNumber) * TimeConstants.SECONDS_PER_DAY;\n return dayDifference + (left.secondsOfDay - right.secondsOfDay);\n};\n\n/**\n * Computes the difference in days between the provided instance.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Number} The difference, in days, when subtracting <code>right</code> from <code>left</code>.\n */\nJulianDate.daysDifference = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\"left is required.\");\n }\n if (!defined(right)) {\n throw new DeveloperError(\"right is required.\");\n }\n //>>includeEnd('debug');\n\n var dayDifference = left.dayNumber - right.dayNumber;\n var secondDifference =\n (left.secondsOfDay - right.secondsOfDay) / TimeConstants.SECONDS_PER_DAY;\n return dayDifference + secondDifference;\n};\n\n/**\n * Computes the number of seconds the provided instance is ahead of UTC.\n *\n * @param {JulianDate} julianDate The date.\n * @returns {Number} The number of seconds the provided instance is ahead of UTC\n */\nJulianDate.computeTaiMinusUtc = function (julianDate) {\n binarySearchScratchLeapSecond.julianDate = julianDate;\n var leapSeconds = JulianDate.leapSeconds;\n var index = binarySearch(\n leapSeconds,\n binarySearchScratchLeapSecond,\n compareLeapSecondDates\n );\n if (index < 0) {\n index = ~index;\n --index;\n if (index < 0) {\n index = 0;\n }\n }\n return leapSeconds[index].offset;\n};\n\n/**\n * Adds the provided number of seconds to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {Number} seconds The number of seconds to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addSeconds = function (julianDate, seconds, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n if (!defined(seconds)) {\n throw new DeveloperError(\"seconds is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n return setComponents(\n julianDate.dayNumber,\n julianDate.secondsOfDay + seconds,\n result\n );\n};\n\n/**\n * Adds the provided number of minutes to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {Number} minutes The number of minutes to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addMinutes = function (julianDate, minutes, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n if (!defined(minutes)) {\n throw new DeveloperError(\"minutes is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var newSecondsOfDay =\n julianDate.secondsOfDay + minutes * TimeConstants.SECONDS_PER_MINUTE;\n return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\n};\n\n/**\n * Adds the provided number of hours to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {Number} hours The number of hours to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addHours = function (julianDate, hours, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n if (!defined(hours)) {\n throw new DeveloperError(\"hours is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var newSecondsOfDay =\n julianDate.secondsOfDay + hours * TimeConstants.SECONDS_PER_HOUR;\n return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\n};\n\n/**\n * Adds the provided number of days to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {Number} days The number of days to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addDays = function (julianDate, days, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(julianDate)) {\n throw new DeveloperError(\"julianDate is required.\");\n }\n if (!defined(days)) {\n throw new DeveloperError(\"days is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var newJulianDayNumber = julianDate.dayNumber + days;\n return setComponents(newJulianDayNumber, julianDate.secondsOfDay, result);\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is earlier than <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Boolean} <code>true</code> if <code>left</code> is earlier than <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.lessThan = function (left, right) {\n return JulianDate.compare(left, right) < 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is earlier than or equal to <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Boolean} <code>true</code> if <code>left</code> is earlier than or equal to <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.lessThanOrEquals = function (left, right) {\n return JulianDate.compare(left, right) <= 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is later than <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Boolean} <code>true</code> if <code>left</code> is later than <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.greaterThan = function (left, right) {\n return JulianDate.compare(left, right) > 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is later than or equal to <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {Boolean} <code>true</code> if <code>left</code> is later than or equal to <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.greaterThanOrEquals = function (left, right) {\n return JulianDate.compare(left, right) >= 0;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.prototype.clone = function (result) {\n return JulianDate.clone(this, result);\n};\n\n/**\n * Compares this and the provided instance and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {JulianDate} [right] The second instance.\n * @returns {Boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nJulianDate.prototype.equals = function (right) {\n return JulianDate.equals(this, right);\n};\n\n/**\n * Compares this and the provided instance and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other. That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {JulianDate} [right] The second instance.\n * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @returns {Boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nJulianDate.prototype.equalsEpsilon = function (right, epsilon) {\n return JulianDate.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this date in ISO8601 format.\n *\n * @returns {String} A string representing this date in ISO8601 format.\n */\nJulianDate.prototype.toString = function () {\n return JulianDate.toIso8601(this);\n};\n\n/**\n * Gets or sets the list of leap seconds used throughout Cesium.\n * @memberof JulianDate\n * @type {LeapSecond[]}\n */\nJulianDate.leapSeconds = [\n new LeapSecond(new JulianDate(2441317, 43210.0, TimeStandard.TAI), 10), // January 1, 1972 00:00:00 UTC\n new LeapSecond(new JulianDate(2441499, 43211.0, TimeStandard.TAI), 11), // July 1, 1972 00:00:00 UTC\n new LeapSecond(new JulianDate(2441683, 43212.0, TimeStandard.TAI), 12), // January 1, 1973 00:00:00 UTC\n new LeapSecond(new JulianDate(2442048, 43213.0, TimeStandard.TAI), 13), // January 1, 1974 00:00:00 UTC\n new LeapSecond(new JulianDate(2442413, 43214.0, TimeStandard.TAI), 14), // January 1, 1975 00:00:00 UTC\n new LeapSecond(new JulianDate(2442778, 43215.0, TimeStandard.TAI), 15), // January 1, 1976 00:00:00 UTC\n new LeapSecond(new JulianDate(2443144, 43216.0, TimeStandard.TAI), 16), // January 1, 1977 00:00:00 UTC\n new LeapSecond(new JulianDate(2443509, 43217.0, TimeStandard.TAI), 17), // January 1, 1978 00:00:00 UTC\n new LeapSecond(new JulianDate(2443874, 43218.0, TimeStandard.TAI), 18), // January 1, 1979 00:00:00 UTC\n new LeapSecond(new JulianDate(2444239, 43219.0, TimeStandard.TAI), 19), // January 1, 1980 00:00:00 UTC\n new LeapSecond(new JulianDate(2444786, 43220.0, TimeStandard.TAI), 20), // July 1, 1981 00:00:00 UTC\n new LeapSecond(new JulianDate(2445151, 43221.0, TimeStandard.TAI), 21), // July 1, 1982 00:00:00 UTC\n new LeapSecond(new JulianDate(2445516, 43222.0, TimeStandard.TAI), 22), // July 1, 1983 00:00:00 UTC\n new LeapSecond(new JulianDate(2446247, 43223.0, TimeStandard.TAI), 23), // July 1, 1985 00:00:00 UTC\n new LeapSecond(new JulianDate(2447161, 43224.0, TimeStandard.TAI), 24), // January 1, 1988 00:00:00 UTC\n new LeapSecond(new JulianDate(2447892, 43225.0, TimeStandard.TAI), 25), // January 1, 1990 00:00:00 UTC\n new LeapSecond(new JulianDate(2448257, 43226.0, TimeStandard.TAI), 26), // January 1, 1991 00:00:00 UTC\n new LeapSecond(new JulianDate(2448804, 43227.0, TimeStandard.TAI), 27), // July 1, 1992 00:00:00 UTC\n new LeapSecond(new JulianDate(2449169, 43228.0, TimeStandard.TAI), 28), // July 1, 1993 00:00:00 UTC\n new LeapSecond(new JulianDate(2449534, 43229.0, TimeStandard.TAI), 29), // July 1, 1994 00:00:00 UTC\n new LeapSecond(new JulianDate(2450083, 43230.0, TimeStandard.TAI), 30), // January 1, 1996 00:00:00 UTC\n new LeapSecond(new JulianDate(2450630, 43231.0, TimeStandard.TAI), 31), // July 1, 1997 00:00:00 UTC\n new LeapSecond(new JulianDate(2451179, 43232.0, TimeStandard.TAI), 32), // January 1, 1999 00:00:00 UTC\n new LeapSecond(new JulianDate(2453736, 43233.0, TimeStandard.TAI), 33), // January 1, 2006 00:00:00 UTC\n new LeapSecond(new JulianDate(2454832, 43234.0, TimeStandard.TAI), 34), // January 1, 2009 00:00:00 UTC\n new LeapSecond(new JulianDate(2456109, 43235.0, TimeStandard.TAI), 35), // July 1, 2012 00:00:00 UTC\n new LeapSecond(new JulianDate(2457204, 43236.0, TimeStandard.TAI), 36), // July 1, 2015 00:00:00 UTC\n new LeapSecond(new JulianDate(2457754, 43237.0, TimeStandard.TAI), 37), // January 1, 2017 00:00:00 UTC\n];\nexport default JulianDate;\n","import when from \"../ThirdParty/when.js\";\nimport binarySearch from \"./binarySearch.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport LeapSecond from \"./LeapSecond.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * Specifies Earth polar motion coordinates and the difference between UT1 and UTC.\n * These Earth Orientation Parameters (EOP) are primarily used in the transformation from\n * the International Celestial Reference Frame (ICRF) to the International Terrestrial\n * Reference Frame (ITRF).\n *\n * @alias EarthOrientationParameters\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Resource|String} [options.url] The URL from which to obtain EOP data. If neither this\n * parameter nor options.data is specified, all EOP values are assumed\n * to be 0.0. If options.data is specified, this parameter is\n * ignored.\n * @param {Object} [options.data] The actual EOP data. If neither this\n * parameter nor options.data is specified, all EOP values are assumed\n * to be 0.0.\n * @param {Boolean} [options.addNewLeapSeconds=true] True if leap seconds that\n * are specified in the EOP data but not in {@link JulianDate.leapSeconds}\n * should be added to {@link JulianDate.leapSeconds}. False if\n * new leap seconds should be handled correctly in the context\n * of the EOP data but otherwise ignored.\n *\n * @example\n * // An example EOP data file, EOP.json:\n * {\n * \"columnNames\" : [\"dateIso8601\",\"modifiedJulianDateUtc\",\"xPoleWanderRadians\",\"yPoleWanderRadians\",\"ut1MinusUtcSeconds\",\"lengthOfDayCorrectionSeconds\",\"xCelestialPoleOffsetRadians\",\"yCelestialPoleOffsetRadians\",\"taiMinusUtcSeconds\"],\n * \"samples\" : [\n * \"2011-07-01T00:00:00Z\",55743.0,2.117957047295119e-7,2.111518721609984e-6,-0.2908948,-2.956e-4,3.393695767766752e-11,3.3452143996557983e-10,34.0,\n * \"2011-07-02T00:00:00Z\",55744.0,2.193297093339541e-7,2.115460256837405e-6,-0.29065,-1.824e-4,-8.241832578862112e-11,5.623838700870617e-10,34.0,\n * \"2011-07-03T00:00:00Z\",55745.0,2.262286080161428e-7,2.1191157519929706e-6,-0.2905572,1.9e-6,-3.490658503988659e-10,6.981317007977318e-10,34.0\n * ]\n * }\n *\n * @example\n * // Loading the EOP data\n * var eop = new Cesium.EarthOrientationParameters({ url : 'Data/EOP.json' });\n * Cesium.Transforms.earthOrientationParameters = eop;\n *\n * @private\n */\nfunction EarthOrientationParameters(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._dates = undefined;\n this._samples = undefined;\n\n this._dateColumn = -1;\n this._xPoleWanderRadiansColumn = -1;\n this._yPoleWanderRadiansColumn = -1;\n this._ut1MinusUtcSecondsColumn = -1;\n this._xCelestialPoleOffsetRadiansColumn = -1;\n this._yCelestialPoleOffsetRadiansColumn = -1;\n this._taiMinusUtcSecondsColumn = -1;\n\n this._columnCount = 0;\n this._lastIndex = -1;\n\n this._downloadPromise = undefined;\n this._dataError = undefined;\n\n this._addNewLeapSeconds = defaultValue(options.addNewLeapSeconds, true);\n\n if (defined(options.data)) {\n // Use supplied EOP data.\n onDataReady(this, options.data);\n } else if (defined(options.url)) {\n var resource = Resource.createIfNeeded(options.url);\n\n // Download EOP data.\n var that = this;\n this._downloadPromise = resource\n .fetchJson()\n .then(function (eopData) {\n onDataReady(that, eopData);\n })\n .otherwise(function () {\n that._dataError =\n \"An error occurred while retrieving the EOP data from the URL \" +\n resource.url +\n \".\";\n });\n } else {\n // Use all zeros for EOP data.\n onDataReady(this, {\n columnNames: [\n \"dateIso8601\",\n \"modifiedJulianDateUtc\",\n \"xPoleWanderRadians\",\n \"yPoleWanderRadians\",\n \"ut1MinusUtcSeconds\",\n \"lengthOfDayCorrectionSeconds\",\n \"xCelestialPoleOffsetRadians\",\n \"yCelestialPoleOffsetRadians\",\n \"taiMinusUtcSeconds\",\n ],\n samples: [],\n });\n }\n}\n\n/**\n * A default {@link EarthOrientationParameters} instance that returns zero for all EOP values.\n */\nEarthOrientationParameters.NONE = Object.freeze({\n getPromiseToLoad: function () {\n return when.resolve();\n },\n compute: function (date, result) {\n if (!defined(result)) {\n result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\n } else {\n result.xPoleWander = 0.0;\n result.yPoleWander = 0.0;\n result.xPoleOffset = 0.0;\n result.yPoleOffset = 0.0;\n result.ut1MinusUtc = 0.0;\n }\n return result;\n },\n});\n\n/**\n * Gets a promise that, when resolved, indicates that the EOP data has been loaded and is\n * ready to use.\n *\n * @returns {Promise<void>} The promise.\n */\nEarthOrientationParameters.prototype.getPromiseToLoad = function () {\n return when(this._downloadPromise);\n};\n\n/**\n * Computes the Earth Orientation Parameters (EOP) for a given date by interpolating.\n * If the EOP data has not yet been download, this method returns undefined.\n *\n * @param {JulianDate} date The date for each to evaluate the EOP.\n * @param {EarthOrientationParametersSample} [result] The instance to which to copy the result.\n * If this parameter is undefined, a new instance is created and returned.\n * @returns {EarthOrientationParametersSample} The EOP evaluated at the given date, or\n * undefined if the data necessary to evaluate EOP at the date has not yet been\n * downloaded.\n *\n * @exception {RuntimeError} The loaded EOP data has an error and cannot be used.\n *\n * @see EarthOrientationParameters#getPromiseToLoad\n */\nEarthOrientationParameters.prototype.compute = function (date, result) {\n // We cannot compute until the samples are available.\n if (!defined(this._samples)) {\n if (defined(this._dataError)) {\n throw new RuntimeError(this._dataError);\n }\n\n return undefined;\n }\n\n if (!defined(result)) {\n result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\n }\n\n if (this._samples.length === 0) {\n result.xPoleWander = 0.0;\n result.yPoleWander = 0.0;\n result.xPoleOffset = 0.0;\n result.yPoleOffset = 0.0;\n result.ut1MinusUtc = 0.0;\n return result;\n }\n\n var dates = this._dates;\n var lastIndex = this._lastIndex;\n\n var before = 0;\n var after = 0;\n if (defined(lastIndex)) {\n var previousIndexDate = dates[lastIndex];\n var nextIndexDate = dates[lastIndex + 1];\n var isAfterPrevious = JulianDate.lessThanOrEquals(previousIndexDate, date);\n var isAfterLastSample = !defined(nextIndexDate);\n var isBeforeNext =\n isAfterLastSample || JulianDate.greaterThanOrEquals(nextIndexDate, date);\n\n if (isAfterPrevious && isBeforeNext) {\n before = lastIndex;\n\n if (!isAfterLastSample && nextIndexDate.equals(date)) {\n ++before;\n }\n after = before + 1;\n\n interpolate(this, dates, this._samples, date, before, after, result);\n return result;\n }\n }\n\n var index = binarySearch(dates, date, JulianDate.compare, this._dateColumn);\n if (index >= 0) {\n // If the next entry is the same date, use the later entry. This way, if two entries\n // describe the same moment, one before a leap second and the other after, then we will use\n // the post-leap second data.\n if (index < dates.length - 1 && dates[index + 1].equals(date)) {\n ++index;\n }\n before = index;\n after = index;\n } else {\n after = ~index;\n before = after - 1;\n\n // Use the first entry if the date requested is before the beginning of the data.\n if (before < 0) {\n before = 0;\n }\n }\n\n this._lastIndex = before;\n\n interpolate(this, dates, this._samples, date, before, after, result);\n return result;\n};\n\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\n return JulianDate.compare(leapSecond.julianDate, dateToFind);\n}\n\nfunction onDataReady(eop, eopData) {\n if (!defined(eopData.columnNames)) {\n eop._dataError =\n \"Error in loaded EOP data: The columnNames property is required.\";\n return;\n }\n\n if (!defined(eopData.samples)) {\n eop._dataError =\n \"Error in loaded EOP data: The samples property is required.\";\n return;\n }\n\n var dateColumn = eopData.columnNames.indexOf(\"modifiedJulianDateUtc\");\n var xPoleWanderRadiansColumn = eopData.columnNames.indexOf(\n \"xPoleWanderRadians\"\n );\n var yPoleWanderRadiansColumn = eopData.columnNames.indexOf(\n \"yPoleWanderRadians\"\n );\n var ut1MinusUtcSecondsColumn = eopData.columnNames.indexOf(\n \"ut1MinusUtcSeconds\"\n );\n var xCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\n \"xCelestialPoleOffsetRadians\"\n );\n var yCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\n \"yCelestialPoleOffsetRadians\"\n );\n var taiMinusUtcSecondsColumn = eopData.columnNames.indexOf(\n \"taiMinusUtcSeconds\"\n );\n\n if (\n dateColumn < 0 ||\n xPoleWanderRadiansColumn < 0 ||\n yPoleWanderRadiansColumn < 0 ||\n ut1MinusUtcSecondsColumn < 0 ||\n xCelestialPoleOffsetRadiansColumn < 0 ||\n yCelestialPoleOffsetRadiansColumn < 0 ||\n taiMinusUtcSecondsColumn < 0\n ) {\n eop._dataError =\n \"Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns\";\n return;\n }\n\n var samples = (eop._samples = eopData.samples);\n var dates = (eop._dates = []);\n\n eop._dateColumn = dateColumn;\n eop._xPoleWanderRadiansColumn = xPoleWanderRadiansColumn;\n eop._yPoleWanderRadiansColumn = yPoleWanderRadiansColumn;\n eop._ut1MinusUtcSecondsColumn = ut1MinusUtcSecondsColumn;\n eop._xCelestialPoleOffsetRadiansColumn = xCelestialPoleOffsetRadiansColumn;\n eop._yCelestialPoleOffsetRadiansColumn = yCelestialPoleOffsetRadiansColumn;\n eop._taiMinusUtcSecondsColumn = taiMinusUtcSecondsColumn;\n\n eop._columnCount = eopData.columnNames.length;\n eop._lastIndex = undefined;\n\n var lastTaiMinusUtc;\n\n var addNewLeapSeconds = eop._addNewLeapSeconds;\n\n // Convert the ISO8601 dates to JulianDates.\n for (var i = 0, len = samples.length; i < len; i += eop._columnCount) {\n var mjd = samples[i + dateColumn];\n var taiMinusUtc = samples[i + taiMinusUtcSecondsColumn];\n var day = mjd + TimeConstants.MODIFIED_JULIAN_DATE_DIFFERENCE;\n var date = new JulianDate(day, taiMinusUtc, TimeStandard.TAI);\n dates.push(date);\n\n if (addNewLeapSeconds) {\n if (taiMinusUtc !== lastTaiMinusUtc && defined(lastTaiMinusUtc)) {\n // We crossed a leap second boundary, so add the leap second\n // if it does not already exist.\n var leapSeconds = JulianDate.leapSeconds;\n var leapSecondIndex = binarySearch(\n leapSeconds,\n date,\n compareLeapSecondDates\n );\n if (leapSecondIndex < 0) {\n var leapSecond = new LeapSecond(date, taiMinusUtc);\n leapSeconds.splice(~leapSecondIndex, 0, leapSecond);\n }\n }\n lastTaiMinusUtc = taiMinusUtc;\n }\n }\n}\n\nfunction fillResultFromIndex(eop, samples, index, columnCount, result) {\n var start = index * columnCount;\n result.xPoleWander = samples[start + eop._xPoleWanderRadiansColumn];\n result.yPoleWander = samples[start + eop._yPoleWanderRadiansColumn];\n result.xPoleOffset = samples[start + eop._xCelestialPoleOffsetRadiansColumn];\n result.yPoleOffset = samples[start + eop._yCelestialPoleOffsetRadiansColumn];\n result.ut1MinusUtc = samples[start + eop._ut1MinusUtcSecondsColumn];\n}\n\nfunction linearInterp(dx, y1, y2) {\n return y1 + dx * (y2 - y1);\n}\n\nfunction interpolate(eop, dates, samples, date, before, after, result) {\n var columnCount = eop._columnCount;\n\n // First check the bounds on the EOP data\n // If we are after the bounds of the data, return zeros.\n // The 'before' index should never be less than zero.\n if (after > dates.length - 1) {\n result.xPoleWander = 0;\n result.yPoleWander = 0;\n result.xPoleOffset = 0;\n result.yPoleOffset = 0;\n result.ut1MinusUtc = 0;\n return result;\n }\n\n var beforeDate = dates[before];\n var afterDate = dates[after];\n if (beforeDate.equals(afterDate) || date.equals(beforeDate)) {\n fillResultFromIndex(eop, samples, before, columnCount, result);\n return result;\n } else if (date.equals(afterDate)) {\n fillResultFromIndex(eop, samples, after, columnCount, result);\n return result;\n }\n\n var factor =\n JulianDate.secondsDifference(date, beforeDate) /\n JulianDate.secondsDifference(afterDate, beforeDate);\n\n var startBefore = before * columnCount;\n var startAfter = after * columnCount;\n\n // Handle UT1 leap second edge case\n var beforeUt1MinusUtc = samples[startBefore + eop._ut1MinusUtcSecondsColumn];\n var afterUt1MinusUtc = samples[startAfter + eop._ut1MinusUtcSecondsColumn];\n\n var offsetDifference = afterUt1MinusUtc - beforeUt1MinusUtc;\n if (offsetDifference > 0.5 || offsetDifference < -0.5) {\n // The absolute difference between the values is more than 0.5, so we may have\n // crossed a leap second. Check if this is the case and, if so, adjust the\n // afterValue to account for the leap second. This way, our interpolation will\n // produce reasonable results.\n var beforeTaiMinusUtc =\n samples[startBefore + eop._taiMinusUtcSecondsColumn];\n var afterTaiMinusUtc = samples[startAfter + eop._taiMinusUtcSecondsColumn];\n if (beforeTaiMinusUtc !== afterTaiMinusUtc) {\n if (afterDate.equals(date)) {\n // If we are at the end of the leap second interval, take the second value\n // Otherwise, the interpolation below will yield the wrong side of the\n // discontinuity\n // At the end of the leap second, we need to start accounting for the jump\n beforeUt1MinusUtc = afterUt1MinusUtc;\n } else {\n // Otherwise, remove the leap second so that the interpolation is correct\n afterUt1MinusUtc -= afterTaiMinusUtc - beforeTaiMinusUtc;\n }\n }\n }\n\n result.xPoleWander = linearInterp(\n factor,\n samples[startBefore + eop._xPoleWanderRadiansColumn],\n samples[startAfter + eop._xPoleWanderRadiansColumn]\n );\n result.yPoleWander = linearInterp(\n factor,\n samples[startBefore + eop._yPoleWanderRadiansColumn],\n samples[startAfter + eop._yPoleWanderRadiansColumn]\n );\n result.xPoleOffset = linearInterp(\n factor,\n samples[startBefore + eop._xCelestialPoleOffsetRadiansColumn],\n samples[startAfter + eop._xCelestialPoleOffsetRadiansColumn]\n );\n result.yPoleOffset = linearInterp(\n factor,\n samples[startBefore + eop._yCelestialPoleOffsetRadiansColumn],\n samples[startAfter + eop._yCelestialPoleOffsetRadiansColumn]\n );\n result.ut1MinusUtc = linearInterp(\n factor,\n beforeUt1MinusUtc,\n afterUt1MinusUtc\n );\n return result;\n}\nexport default EarthOrientationParameters;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A rotation expressed as a heading, pitch, and roll. Heading is the rotation about the\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\n * the positive x axis.\n * @alias HeadingPitchRoll\n * @constructor\n *\n * @param {Number} [heading=0.0] The heading component in radians.\n * @param {Number} [pitch=0.0] The pitch component in radians.\n * @param {Number} [roll=0.0] The roll component in radians.\n */\nfunction HeadingPitchRoll(heading, pitch, roll) {\n /**\n * Gets or sets the heading.\n * @type {Number}\n * @default 0.0\n */\n this.heading = defaultValue(heading, 0.0);\n /**\n * Gets or sets the pitch.\n * @type {Number}\n * @default 0.0\n */\n this.pitch = defaultValue(pitch, 0.0);\n /**\n * Gets or sets the roll.\n * @type {Number}\n * @default 0.0\n */\n this.roll = defaultValue(roll, 0.0);\n}\n\n/**\n * Computes the heading, pitch and roll from a quaternion (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\n *\n * @param {Quaternion} quaternion The quaternion from which to retrieve heading, pitch, and roll, all expressed in radians.\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\n */\nHeadingPitchRoll.fromQuaternion = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(quaternion)) {\n throw new DeveloperError(\"quaternion is required\");\n }\n //>>includeEnd('debug');\n if (!defined(result)) {\n result = new HeadingPitchRoll();\n }\n var test = 2 * (quaternion.w * quaternion.y - quaternion.z * quaternion.x);\n var denominatorRoll =\n 1 - 2 * (quaternion.x * quaternion.x + quaternion.y * quaternion.y);\n var numeratorRoll =\n 2 * (quaternion.w * quaternion.x + quaternion.y * quaternion.z);\n var denominatorHeading =\n 1 - 2 * (quaternion.y * quaternion.y + quaternion.z * quaternion.z);\n var numeratorHeading =\n 2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y);\n result.heading = -Math.atan2(numeratorHeading, denominatorHeading);\n result.roll = Math.atan2(numeratorRoll, denominatorRoll);\n result.pitch = -CesiumMath.asinClamped(test);\n return result;\n};\n\n/**\n * Returns a new HeadingPitchRoll instance from angles given in degrees.\n *\n * @param {Number} heading the heading in degrees\n * @param {Number} pitch the pitch in degrees\n * @param {Number} roll the heading in degrees\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\n * @returns {HeadingPitchRoll} A new HeadingPitchRoll instance\n */\nHeadingPitchRoll.fromDegrees = function (heading, pitch, roll, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(heading)) {\n throw new DeveloperError(\"heading is required\");\n }\n if (!defined(pitch)) {\n throw new DeveloperError(\"pitch is required\");\n }\n if (!defined(roll)) {\n throw new DeveloperError(\"roll is required\");\n }\n //>>includeEnd('debug');\n if (!defined(result)) {\n result = new HeadingPitchRoll();\n }\n result.heading = heading * CesiumMath.RADIANS_PER_DEGREE;\n result.pitch = pitch * CesiumMath.RADIANS_PER_DEGREE;\n result.roll = roll * CesiumMath.RADIANS_PER_DEGREE;\n return result;\n};\n\n/**\n * Duplicates a HeadingPitchRoll instance.\n *\n * @param {HeadingPitchRoll} headingPitchRoll The HeadingPitchRoll to duplicate.\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. (Returns undefined if headingPitchRoll is undefined)\n */\nHeadingPitchRoll.clone = function (headingPitchRoll, result) {\n if (!defined(headingPitchRoll)) {\n return undefined;\n }\n if (!defined(result)) {\n return new HeadingPitchRoll(\n headingPitchRoll.heading,\n headingPitchRoll.pitch,\n headingPitchRoll.roll\n );\n }\n result.heading = headingPitchRoll.heading;\n result.pitch = headingPitchRoll.pitch;\n result.roll = headingPitchRoll.roll;\n return result;\n};\n\n/**\n * Compares the provided HeadingPitchRolls componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nHeadingPitchRoll.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.heading === right.heading &&\n left.pitch === right.pitch &&\n left.roll === right.roll)\n );\n};\n\n/**\n * Compares the provided HeadingPitchRolls componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nHeadingPitchRoll.equalsEpsilon = function (\n left,\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n CesiumMath.equalsEpsilon(\n left.heading,\n right.heading,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.pitch,\n right.pitch,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n left.roll,\n right.roll,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\n\n/**\n * Duplicates this HeadingPitchRoll instance.\n *\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\n */\nHeadingPitchRoll.prototype.clone = function (result) {\n return HeadingPitchRoll.clone(this, result);\n};\n\n/**\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nHeadingPitchRoll.prototype.equals = function (right) {\n return HeadingPitchRoll.equals(this, right);\n};\n\n/**\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nHeadingPitchRoll.prototype.equalsEpsilon = function (\n right,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return HeadingPitchRoll.equalsEpsilon(\n this,\n right,\n relativeEpsilon,\n absoluteEpsilon\n );\n};\n\n/**\n * Creates a string representing this HeadingPitchRoll in the format '(heading, pitch, roll)' in radians.\n *\n * @returns {String} A string representing the provided HeadingPitchRoll in the format '(heading, pitch, roll)'.\n */\nHeadingPitchRoll.prototype.toString = function () {\n return \"(\" + this.heading + \", \" + this.pitch + \", \" + this.roll + \")\";\n};\nexport default HeadingPitchRoll;\n","/**\n * An IAU 2006 XYS value sampled at a particular time.\n *\n * @alias Iau2006XysSample\n * @constructor\n *\n * @param {Number} x The X value.\n * @param {Number} y The Y value.\n * @param {Number} s The S value.\n *\n * @private\n */\nfunction Iau2006XysSample(x, y, s) {\n /**\n * The X value.\n * @type {Number}\n */\n this.x = x;\n\n /**\n * The Y value.\n * @type {Number}\n */\n this.y = y;\n\n /**\n * The S value.\n * @type {Number}\n */\n this.s = s;\n}\nexport default Iau2006XysSample;\n","import when from \"../ThirdParty/when.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport Resource from \"./Resource.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * A set of IAU2006 XYS data that is used to evaluate the transformation between the International\n * Celestial Reference Frame (ICRF) and the International Terrestrial Reference Frame (ITRF).\n *\n * @alias Iau2006XysData\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Resource|String} [options.xysFileUrlTemplate='Assets/IAU2006_XYS/IAU2006_XYS_{0}.json'] A template URL for obtaining the XYS data. In the template,\n * `{0}` will be replaced with the file index.\n * @param {Number} [options.interpolationOrder=9] The order of interpolation to perform on the XYS data.\n * @param {Number} [options.sampleZeroJulianEphemerisDate=2442396.5] The Julian ephemeris date (JED) of the\n * first XYS sample.\n * @param {Number} [options.stepSizeDays=1.0] The step size, in days, between successive XYS samples.\n * @param {Number} [options.samplesPerXysFile=1000] The number of samples in each XYS file.\n * @param {Number} [options.totalSamples=27426] The total number of samples in all XYS files.\n *\n * @private\n */\nfunction Iau2006XysData(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._xysFileUrlTemplate = Resource.createIfNeeded(\n options.xysFileUrlTemplate\n );\n this._interpolationOrder = defaultValue(options.interpolationOrder, 9);\n this._sampleZeroJulianEphemerisDate = defaultValue(\n options.sampleZeroJulianEphemerisDate,\n 2442396.5\n );\n this._sampleZeroDateTT = new JulianDate(\n this._sampleZeroJulianEphemerisDate,\n 0.0,\n TimeStandard.TAI\n );\n this._stepSizeDays = defaultValue(options.stepSizeDays, 1.0);\n this._samplesPerXysFile = defaultValue(options.samplesPerXysFile, 1000);\n this._totalSamples = defaultValue(options.totalSamples, 27426);\n this._samples = new Array(this._totalSamples * 3);\n this._chunkDownloadsInProgress = [];\n\n var order = this._interpolationOrder;\n\n // Compute denominators and X values for interpolation.\n var denom = (this._denominators = new Array(order + 1));\n var xTable = (this._xTable = new Array(order + 1));\n\n var stepN = Math.pow(this._stepSizeDays, order);\n\n for (var i = 0; i <= order; ++i) {\n denom[i] = stepN;\n xTable[i] = i * this._stepSizeDays;\n\n for (var j = 0; j <= order; ++j) {\n if (j !== i) {\n denom[i] *= i - j;\n }\n }\n\n denom[i] = 1.0 / denom[i];\n }\n\n // Allocate scratch arrays for interpolation.\n this._work = new Array(order + 1);\n this._coef = new Array(order + 1);\n}\n\nvar julianDateScratch = new JulianDate(0, 0.0, TimeStandard.TAI);\n\nfunction getDaysSinceEpoch(xys, dayTT, secondTT) {\n var dateTT = julianDateScratch;\n dateTT.dayNumber = dayTT;\n dateTT.secondsOfDay = secondTT;\n return JulianDate.daysDifference(dateTT, xys._sampleZeroDateTT);\n}\n\n/**\n * Preloads XYS data for a specified date range.\n *\n * @param {Number} startDayTT The Julian day number of the beginning of the interval to preload, expressed in\n * the Terrestrial Time (TT) time standard.\n * @param {Number} startSecondTT The seconds past noon of the beginning of the interval to preload, expressed in\n * the Terrestrial Time (TT) time standard.\n * @param {Number} stopDayTT The Julian day number of the end of the interval to preload, expressed in\n * the Terrestrial Time (TT) time standard.\n * @param {Number} stopSecondTT The seconds past noon of the end of the interval to preload, expressed in\n * the Terrestrial Time (TT) time standard.\n * @returns {Promise<void>} A promise that, when resolved, indicates that the requested interval has been\n * preloaded.\n */\nIau2006XysData.prototype.preload = function (\n startDayTT,\n startSecondTT,\n stopDayTT,\n stopSecondTT\n) {\n var startDaysSinceEpoch = getDaysSinceEpoch(this, startDayTT, startSecondTT);\n var stopDaysSinceEpoch = getDaysSinceEpoch(this, stopDayTT, stopSecondTT);\n\n var startIndex =\n (startDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\n 0;\n if (startIndex < 0) {\n startIndex = 0;\n }\n\n var stopIndex =\n (stopDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\n (0 + this._interpolationOrder);\n if (stopIndex >= this._totalSamples) {\n stopIndex = this._totalSamples - 1;\n }\n\n var startChunk = (startIndex / this._samplesPerXysFile) | 0;\n var stopChunk = (stopIndex / this._samplesPerXysFile) | 0;\n\n var promises = [];\n for (var i = startChunk; i <= stopChunk; ++i) {\n promises.push(requestXysChunk(this, i));\n }\n\n return when.all(promises);\n};\n\n/**\n * Computes the XYS values for a given date by interpolating. If the required data is not yet downloaded,\n * this method will return undefined.\n *\n * @param {Number} dayTT The Julian day number for which to compute the XYS value, expressed in\n * the Terrestrial Time (TT) time standard.\n * @param {Number} secondTT The seconds past noon of the date for which to compute the XYS value, expressed in\n * the Terrestrial Time (TT) time standard.\n * @param {Iau2006XysSample} [result] The instance to which to copy the interpolated result. If this parameter\n * is undefined, a new instance is allocated and returned.\n * @returns {Iau2006XysSample} The interpolated XYS values, or undefined if the required data for this\n * computation has not yet been downloaded.\n *\n * @see Iau2006XysData#preload\n */\nIau2006XysData.prototype.computeXysRadians = function (\n dayTT,\n secondTT,\n result\n) {\n var daysSinceEpoch = getDaysSinceEpoch(this, dayTT, secondTT);\n if (daysSinceEpoch < 0.0) {\n // Can't evaluate prior to the epoch of the data.\n return undefined;\n }\n\n var centerIndex = (daysSinceEpoch / this._stepSizeDays) | 0;\n if (centerIndex >= this._totalSamples) {\n // Can't evaluate after the last sample in the data.\n return undefined;\n }\n\n var degree = this._interpolationOrder;\n\n var firstIndex = centerIndex - ((degree / 2) | 0);\n if (firstIndex < 0) {\n firstIndex = 0;\n }\n var lastIndex = firstIndex + degree;\n if (lastIndex >= this._totalSamples) {\n lastIndex = this._totalSamples - 1;\n firstIndex = lastIndex - degree;\n if (firstIndex < 0) {\n firstIndex = 0;\n }\n }\n\n // Are all the samples we need present?\n // We can assume so if the first and last are present\n var isDataMissing = false;\n var samples = this._samples;\n if (!defined(samples[firstIndex * 3])) {\n requestXysChunk(this, (firstIndex / this._samplesPerXysFile) | 0);\n isDataMissing = true;\n }\n\n if (!defined(samples[lastIndex * 3])) {\n requestXysChunk(this, (lastIndex / this._samplesPerXysFile) | 0);\n isDataMissing = true;\n }\n\n if (isDataMissing) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Iau2006XysSample(0.0, 0.0, 0.0);\n } else {\n result.x = 0.0;\n result.y = 0.0;\n result.s = 0.0;\n }\n\n var x = daysSinceEpoch - firstIndex * this._stepSizeDays;\n\n var work = this._work;\n var denom = this._denominators;\n var coef = this._coef;\n var xTable = this._xTable;\n\n var i, j;\n for (i = 0; i <= degree; ++i) {\n work[i] = x - xTable[i];\n }\n\n for (i = 0; i <= degree; ++i) {\n coef[i] = 1.0;\n\n for (j = 0; j <= degree; ++j) {\n if (j !== i) {\n coef[i] *= work[j];\n }\n }\n\n coef[i] *= denom[i];\n\n var sampleIndex = (firstIndex + i) * 3;\n result.x += coef[i] * samples[sampleIndex++];\n result.y += coef[i] * samples[sampleIndex++];\n result.s += coef[i] * samples[sampleIndex];\n }\n\n return result;\n};\n\nfunction requestXysChunk(xysData, chunkIndex) {\n if (xysData._chunkDownloadsInProgress[chunkIndex]) {\n // Chunk has already been requested.\n return xysData._chunkDownloadsInProgress[chunkIndex];\n }\n\n var deferred = when.defer();\n\n xysData._chunkDownloadsInProgress[chunkIndex] = deferred;\n\n var chunkUrl;\n var xysFileUrlTemplate = xysData._xysFileUrlTemplate;\n if (defined(xysFileUrlTemplate)) {\n chunkUrl = xysFileUrlTemplate.getDerivedResource({\n templateValues: {\n \"0\": chunkIndex,\n },\n });\n } else {\n chunkUrl = new Resource({\n url: buildModuleUrl(\n \"Assets/IAU2006_XYS/IAU2006_XYS_\" + chunkIndex + \".json\"\n ),\n });\n }\n\n when(chunkUrl.fetchJson(), function (chunk) {\n xysData._chunkDownloadsInProgress[chunkIndex] = false;\n\n var samples = xysData._samples;\n var newSamples = chunk.samples;\n var startIndex = chunkIndex * xysData._samplesPerXysFile * 3;\n\n for (var i = 0, len = newSamples.length; i < len; ++i) {\n samples[startIndex + i] = newSamples[i];\n }\n\n deferred.resolve();\n });\n\n return deferred.promise;\n}\nexport default Iau2006XysData;\n","import defined from \"./defined.js\";\n\nvar _supportsFullscreen;\nvar _names = {\n requestFullscreen: undefined,\n exitFullscreen: undefined,\n fullscreenEnabled: undefined,\n fullscreenElement: undefined,\n fullscreenchange: undefined,\n fullscreenerror: undefined,\n};\n\n/**\n * Browser-independent functions for working with the standard fullscreen API.\n *\n * @namespace Fullscreen\n *\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\n */\nvar Fullscreen = {};\n\nObject.defineProperties(Fullscreen, {\n /**\n * The element that is currently fullscreen, if any. To simply check if the\n * browser is in fullscreen mode or not, use {@link Fullscreen#fullscreen}.\n * @memberof Fullscreen\n * @type {Object}\n * @readonly\n */\n element: {\n get: function () {\n if (!Fullscreen.supportsFullscreen()) {\n return undefined;\n }\n\n return document[_names.fullscreenElement];\n },\n },\n\n /**\n * The name of the event on the document that is fired when fullscreen is\n * entered or exited. This event name is intended for use with addEventListener.\n * In your event handler, to determine if the browser is in fullscreen mode or not,\n * use {@link Fullscreen#fullscreen}.\n * @memberof Fullscreen\n * @type {String}\n * @readonly\n */\n changeEventName: {\n get: function () {\n if (!Fullscreen.supportsFullscreen()) {\n return undefined;\n }\n\n return _names.fullscreenchange;\n },\n },\n\n /**\n * The name of the event that is fired when a fullscreen error\n * occurs. This event name is intended for use with addEventListener.\n * @memberof Fullscreen\n * @type {String}\n * @readonly\n */\n errorEventName: {\n get: function () {\n if (!Fullscreen.supportsFullscreen()) {\n return undefined;\n }\n\n return _names.fullscreenerror;\n },\n },\n\n /**\n * Determine whether the browser will allow an element to be made fullscreen, or not.\n * For example, by default, iframes cannot go fullscreen unless the containing page\n * adds an \"allowfullscreen\" attribute (or prefixed equivalent).\n * @memberof Fullscreen\n * @type {Boolean}\n * @readonly\n */\n enabled: {\n get: function () {\n if (!Fullscreen.supportsFullscreen()) {\n return undefined;\n }\n\n return document[_names.fullscreenEnabled];\n },\n },\n\n /**\n * Determines if the browser is currently in fullscreen mode.\n * @memberof Fullscreen\n * @type {Boolean}\n * @readonly\n */\n fullscreen: {\n get: function () {\n if (!Fullscreen.supportsFullscreen()) {\n return undefined;\n }\n\n return Fullscreen.element !== null;\n },\n },\n});\n\n/**\n * Detects whether the browser supports the standard fullscreen API.\n *\n * @returns {Boolean} <code>true</code> if the browser supports the standard fullscreen API,\n * <code>false</code> otherwise.\n */\nFullscreen.supportsFullscreen = function () {\n if (defined(_supportsFullscreen)) {\n return _supportsFullscreen;\n }\n\n _supportsFullscreen = false;\n\n var body = document.body;\n if (typeof body.requestFullscreen === \"function\") {\n // go with the unprefixed, standard set of names\n _names.requestFullscreen = \"requestFullscreen\";\n _names.exitFullscreen = \"exitFullscreen\";\n _names.fullscreenEnabled = \"fullscreenEnabled\";\n _names.fullscreenElement = \"fullscreenElement\";\n _names.fullscreenchange = \"fullscreenchange\";\n _names.fullscreenerror = \"fullscreenerror\";\n _supportsFullscreen = true;\n return _supportsFullscreen;\n }\n\n //check for the correct combination of prefix plus the various names that browsers use\n var prefixes = [\"webkit\", \"moz\", \"o\", \"ms\", \"khtml\"];\n var name;\n for (var i = 0, len = prefixes.length; i < len; ++i) {\n var prefix = prefixes[i];\n\n // casing of Fullscreen differs across browsers\n name = prefix + \"RequestFullscreen\";\n if (typeof body[name] === \"function\") {\n _names.requestFullscreen = name;\n _supportsFullscreen = true;\n } else {\n name = prefix + \"RequestFullScreen\";\n if (typeof body[name] === \"function\") {\n _names.requestFullscreen = name;\n _supportsFullscreen = true;\n }\n }\n\n // disagreement about whether it's \"exit\" as per spec, or \"cancel\"\n name = prefix + \"ExitFullscreen\";\n if (typeof document[name] === \"function\") {\n _names.exitFullscreen = name;\n } else {\n name = prefix + \"CancelFullScreen\";\n if (typeof document[name] === \"function\") {\n _names.exitFullscreen = name;\n }\n }\n\n // casing of Fullscreen differs across browsers\n name = prefix + \"FullscreenEnabled\";\n if (document[name] !== undefined) {\n _names.fullscreenEnabled = name;\n } else {\n name = prefix + \"FullScreenEnabled\";\n if (document[name] !== undefined) {\n _names.fullscreenEnabled = name;\n }\n }\n\n // casing of Fullscreen differs across browsers\n name = prefix + \"FullscreenElement\";\n if (document[name] !== undefined) {\n _names.fullscreenElement = name;\n } else {\n name = prefix + \"FullScreenElement\";\n if (document[name] !== undefined) {\n _names.fullscreenElement = name;\n }\n }\n\n // thankfully, event names are all lowercase per spec\n name = prefix + \"fullscreenchange\";\n // event names do not have 'on' in the front, but the property on the document does\n if (document[\"on\" + name] !== undefined) {\n //except on IE\n if (prefix === \"ms\") {\n name = \"MSFullscreenChange\";\n }\n _names.fullscreenchange = name;\n }\n\n name = prefix + \"fullscreenerror\";\n if (document[\"on\" + name] !== undefined) {\n //except on IE\n if (prefix === \"ms\") {\n name = \"MSFullscreenError\";\n }\n _names.fullscreenerror = name;\n }\n }\n\n return _supportsFullscreen;\n};\n\n/**\n * Asynchronously requests the browser to enter fullscreen mode on the given element.\n * If fullscreen mode is not supported by the browser, does nothing.\n *\n * @param {Object} element The HTML element which will be placed into fullscreen mode.\n * @param {Object} [vrDevice] The HMDVRDevice device.\n *\n * @example\n * // Put the entire page into fullscreen.\n * Cesium.Fullscreen.requestFullscreen(document.body)\n *\n * // Place only the Cesium canvas into fullscreen.\n * Cesium.Fullscreen.requestFullscreen(scene.canvas)\n */\nFullscreen.requestFullscreen = function (element, vrDevice) {\n if (!Fullscreen.supportsFullscreen()) {\n return;\n }\n\n element[_names.requestFullscreen]({ vrDisplay: vrDevice });\n};\n\n/**\n * Asynchronously exits fullscreen mode. If the browser is not currently\n * in fullscreen, or if fullscreen mode is not supported by the browser, does nothing.\n */\nFullscreen.exitFullscreen = function () {\n if (!Fullscreen.supportsFullscreen()) {\n return;\n }\n\n document[_names.exitFullscreen]();\n};\n\n//For unit tests\nFullscreen._names = _names;\nexport default Fullscreen;\n","import when from \"../ThirdParty/when.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Fullscreen from \"./Fullscreen.js\";\n\nvar theNavigator;\nif (typeof navigator !== \"undefined\") {\n theNavigator = navigator;\n} else {\n theNavigator = {};\n}\n\nfunction extractVersion(versionString) {\n var parts = versionString.split(\".\");\n for (var i = 0, len = parts.length; i < len; ++i) {\n parts[i] = parseInt(parts[i], 10);\n }\n return parts;\n}\n\nvar isChromeResult;\nvar chromeVersionResult;\nfunction isChrome() {\n if (!defined(isChromeResult)) {\n isChromeResult = false;\n // Edge contains Chrome in the user agent too\n if (!isEdge()) {\n var fields = / Chrome\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isChromeResult = true;\n chromeVersionResult = extractVersion(fields[1]);\n }\n }\n }\n\n return isChromeResult;\n}\n\nfunction chromeVersion() {\n return isChrome() && chromeVersionResult;\n}\n\nvar isSafariResult;\nvar safariVersionResult;\nfunction isSafari() {\n if (!defined(isSafariResult)) {\n isSafariResult = false;\n\n // Chrome and Edge contain Safari in the user agent too\n if (\n !isChrome() &&\n !isEdge() &&\n / Safari\\/[\\.0-9]+/.test(theNavigator.userAgent)\n ) {\n var fields = / Version\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isSafariResult = true;\n safariVersionResult = extractVersion(fields[1]);\n }\n }\n }\n\n return isSafariResult;\n}\n\nfunction safariVersion() {\n return isSafari() && safariVersionResult;\n}\n\nvar isWebkitResult;\nvar webkitVersionResult;\nfunction isWebkit() {\n if (!defined(isWebkitResult)) {\n isWebkitResult = false;\n\n var fields = / AppleWebKit\\/([\\.0-9]+)(\\+?)/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isWebkitResult = true;\n webkitVersionResult = extractVersion(fields[1]);\n webkitVersionResult.isNightly = !!fields[2];\n }\n }\n\n return isWebkitResult;\n}\n\nfunction webkitVersion() {\n return isWebkit() && webkitVersionResult;\n}\n\nvar isInternetExplorerResult;\nvar internetExplorerVersionResult;\nfunction isInternetExplorer() {\n if (!defined(isInternetExplorerResult)) {\n isInternetExplorerResult = false;\n\n var fields;\n if (theNavigator.appName === \"Microsoft Internet Explorer\") {\n fields = /MSIE ([0-9]{1,}[\\.0-9]{0,})/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isInternetExplorerResult = true;\n internetExplorerVersionResult = extractVersion(fields[1]);\n }\n } else if (theNavigator.appName === \"Netscape\") {\n fields = /Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/.exec(\n theNavigator.userAgent\n );\n if (fields !== null) {\n isInternetExplorerResult = true;\n internetExplorerVersionResult = extractVersion(fields[1]);\n }\n }\n }\n return isInternetExplorerResult;\n}\n\nfunction internetExplorerVersion() {\n return isInternetExplorer() && internetExplorerVersionResult;\n}\n\nvar isEdgeResult;\nvar edgeVersionResult;\nfunction isEdge() {\n if (!defined(isEdgeResult)) {\n isEdgeResult = false;\n var fields = / Edge\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isEdgeResult = true;\n edgeVersionResult = extractVersion(fields[1]);\n }\n }\n return isEdgeResult;\n}\n\nfunction edgeVersion() {\n return isEdge() && edgeVersionResult;\n}\n\nvar isFirefoxResult;\nvar firefoxVersionResult;\nfunction isFirefox() {\n if (!defined(isFirefoxResult)) {\n isFirefoxResult = false;\n\n var fields = /Firefox\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n if (fields !== null) {\n isFirefoxResult = true;\n firefoxVersionResult = extractVersion(fields[1]);\n }\n }\n return isFirefoxResult;\n}\n\nvar isWindowsResult;\nfunction isWindows() {\n if (!defined(isWindowsResult)) {\n isWindowsResult = /Windows/i.test(theNavigator.appVersion);\n }\n return isWindowsResult;\n}\n\nfunction firefoxVersion() {\n return isFirefox() && firefoxVersionResult;\n}\n\nvar hasPointerEvents;\nfunction supportsPointerEvents() {\n if (!defined(hasPointerEvents)) {\n //While navigator.pointerEnabled is deprecated in the W3C specification\n //we still need to use it if it exists in order to support browsers\n //that rely on it, such as the Windows WebBrowser control which defines\n //PointerEvent but sets navigator.pointerEnabled to false.\n\n //Firefox disabled because of https://github.com/CesiumGS/cesium/issues/6372\n hasPointerEvents =\n !isFirefox() &&\n typeof PointerEvent !== \"undefined\" &&\n (!defined(theNavigator.pointerEnabled) || theNavigator.pointerEnabled);\n }\n return hasPointerEvents;\n}\n\nvar imageRenderingValueResult;\nvar supportsImageRenderingPixelatedResult;\nfunction supportsImageRenderingPixelated() {\n if (!defined(supportsImageRenderingPixelatedResult)) {\n var canvas = document.createElement(\"canvas\");\n canvas.setAttribute(\n \"style\",\n \"image-rendering: -moz-crisp-edges;\" + \"image-rendering: pixelated;\"\n );\n //canvas.style.imageRendering will be undefined, null or an empty string on unsupported browsers.\n var tmp = canvas.style.imageRendering;\n supportsImageRenderingPixelatedResult = defined(tmp) && tmp !== \"\";\n if (supportsImageRenderingPixelatedResult) {\n imageRenderingValueResult = tmp;\n }\n }\n return supportsImageRenderingPixelatedResult;\n}\n\nfunction imageRenderingValue() {\n return supportsImageRenderingPixelated()\n ? imageRenderingValueResult\n : undefined;\n}\n\nfunction supportsWebP() {\n //>>includeStart('debug', pragmas.debug);\n if (!supportsWebP.initialized) {\n throw new DeveloperError(\n \"You must call FeatureDetection.supportsWebP.initialize and wait for the promise to resolve before calling FeatureDetection.supportsWebP\"\n );\n }\n //>>includeEnd('debug');\n return supportsWebP._result;\n}\nsupportsWebP._promise = undefined;\nsupportsWebP._result = undefined;\nsupportsWebP.initialize = function () {\n // From https://developers.google.com/speed/webp/faq#how_can_i_detect_browser_support_for_webp\n if (defined(supportsWebP._promise)) {\n return supportsWebP._promise;\n }\n\n var supportsWebPDeferred = when.defer();\n supportsWebP._promise = supportsWebPDeferred.promise;\n if (isEdge()) {\n // Edge's WebP support with WebGL is incomplete.\n // See bug report: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/19221241/\n supportsWebP._result = false;\n supportsWebPDeferred.resolve(supportsWebP._result);\n return supportsWebPDeferred.promise;\n }\n\n var image = new Image();\n image.onload = function () {\n supportsWebP._result = image.width > 0 && image.height > 0;\n supportsWebPDeferred.resolve(supportsWebP._result);\n };\n\n image.onerror = function () {\n supportsWebP._result = false;\n supportsWebPDeferred.resolve(supportsWebP._result);\n };\n\n image.src =\n \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\n\n return supportsWebPDeferred.promise;\n};\nObject.defineProperties(supportsWebP, {\n initialized: {\n get: function () {\n return defined(supportsWebP._result);\n },\n },\n});\n\nvar typedArrayTypes = [];\nif (typeof ArrayBuffer !== \"undefined\") {\n typedArrayTypes.push(\n Int8Array,\n Uint8Array,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array\n );\n\n if (typeof Uint8ClampedArray !== \"undefined\") {\n typedArrayTypes.push(Uint8ClampedArray);\n }\n\n if (typeof Uint8ClampedArray !== \"undefined\") {\n typedArrayTypes.push(Uint8ClampedArray);\n }\n}\n\n/**\n * A set of functions to detect whether the current browser supports\n * various features.\n *\n * @namespace FeatureDetection\n */\nvar FeatureDetection = {\n isChrome: isChrome,\n chromeVersion: chromeVersion,\n isSafari: isSafari,\n safariVersion: safariVersion,\n isWebkit: isWebkit,\n webkitVersion: webkitVersion,\n isInternetExplorer: isInternetExplorer,\n internetExplorerVersion: internetExplorerVersion,\n isEdge: isEdge,\n edgeVersion: edgeVersion,\n isFirefox: isFirefox,\n firefoxVersion: firefoxVersion,\n isWindows: isWindows,\n hardwareConcurrency: defaultValue(theNavigator.hardwareConcurrency, 3),\n supportsPointerEvents: supportsPointerEvents,\n supportsImageRenderingPixelated: supportsImageRenderingPixelated,\n supportsWebP: supportsWebP,\n imageRenderingValue: imageRenderingValue,\n typedArrayTypes: typedArrayTypes,\n};\n\n/**\n * Detects whether the current browser supports the full screen standard.\n *\n * @returns {Boolean} true if the browser supports the full screen standard, false if not.\n *\n * @see Fullscreen\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\n */\nFeatureDetection.supportsFullscreen = function () {\n return Fullscreen.supportsFullscreen();\n};\n\n/**\n * Detects whether the current browser supports typed arrays.\n *\n * @returns {Boolean} true if the browser supports typed arrays, false if not.\n *\n * @see {@link http://www.khronos.org/registry/typedarray/specs/latest/|Typed Array Specification}\n */\nFeatureDetection.supportsTypedArrays = function () {\n return typeof ArrayBuffer !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports Web Workers.\n *\n * @returns {Boolean} true if the browsers supports Web Workers, false if not.\n *\n * @see {@link http://www.w3.org/TR/workers/}\n */\nFeatureDetection.supportsWebWorkers = function () {\n return typeof Worker !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports Web Assembly.\n *\n * @returns {Boolean} true if the browsers supports Web Assembly, false if not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/WebAssembly}\n */\nFeatureDetection.supportsWebAssembly = function () {\n return typeof WebAssembly !== \"undefined\" && !FeatureDetection.isEdge();\n};\nexport default FeatureDetection;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\n\n/**\n * A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space.\n * @alias Quaternion\n * @constructor\n *\n * @param {Number} [x=0.0] The X component.\n * @param {Number} [y=0.0] The Y component.\n * @param {Number} [z=0.0] The Z component.\n * @param {Number} [w=0.0] The W component.\n *\n * @see PackableForInterpolation\n */\nfunction Quaternion(x, y, z, w) {\n /**\n * The X component.\n * @type {Number}\n * @default 0.0\n */\n this.x = defaultValue(x, 0.0);\n\n /**\n * The Y component.\n * @type {Number}\n * @default 0.0\n */\n this.y = defaultValue(y, 0.0);\n\n /**\n * The Z component.\n * @type {Number}\n * @default 0.0\n */\n this.z = defaultValue(z, 0.0);\n\n /**\n * The W component.\n * @type {Number}\n * @default 0.0\n */\n this.w = defaultValue(w, 0.0);\n}\n\nvar fromAxisAngleScratch = new Cartesian3();\n\n/**\n * Computes a quaternion representing a rotation around an axis.\n *\n * @param {Cartesian3} axis The axis of rotation.\n * @param {Number} angle The angle in radians to rotate around the axis.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.fromAxisAngle = function (axis, angle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"axis\", axis);\n Check.typeOf.number(\"angle\", angle);\n //>>includeEnd('debug');\n\n var halfAngle = angle / 2.0;\n var s = Math.sin(halfAngle);\n fromAxisAngleScratch = Cartesian3.normalize(axis, fromAxisAngleScratch);\n\n var x = fromAxisAngleScratch.x * s;\n var y = fromAxisAngleScratch.y * s;\n var z = fromAxisAngleScratch.z * s;\n var w = Math.cos(halfAngle);\n if (!defined(result)) {\n return new Quaternion(x, y, z, w);\n }\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\nvar fromRotationMatrixNext = [1, 2, 0];\nvar fromRotationMatrixQuat = new Array(3);\n/**\n * Computes a Quaternion from the provided Matrix3 instance.\n *\n * @param {Matrix3} matrix The rotation matrix.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n *\n * @see Matrix3.fromQuaternion\n */\nQuaternion.fromRotationMatrix = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n var root;\n var x;\n var y;\n var z;\n var w;\n\n var m00 = matrix[Matrix3.COLUMN0ROW0];\n var m11 = matrix[Matrix3.COLUMN1ROW1];\n var m22 = matrix[Matrix3.COLUMN2ROW2];\n var trace = m00 + m11 + m22;\n\n if (trace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n root = Math.sqrt(trace + 1.0); // 2w\n w = 0.5 * root;\n root = 0.5 / root; // 1/(4w)\n\n x = (matrix[Matrix3.COLUMN1ROW2] - matrix[Matrix3.COLUMN2ROW1]) * root;\n y = (matrix[Matrix3.COLUMN2ROW0] - matrix[Matrix3.COLUMN0ROW2]) * root;\n z = (matrix[Matrix3.COLUMN0ROW1] - matrix[Matrix3.COLUMN1ROW0]) * root;\n } else {\n // |w| <= 1/2\n var next = fromRotationMatrixNext;\n\n var i = 0;\n if (m11 > m00) {\n i = 1;\n }\n if (m22 > m00 && m22 > m11) {\n i = 2;\n }\n var j = next[i];\n var k = next[j];\n\n root = Math.sqrt(\n matrix[Matrix3.getElementIndex(i, i)] -\n matrix[Matrix3.getElementIndex(j, j)] -\n matrix[Matrix3.getElementIndex(k, k)] +\n 1.0\n );\n\n var quat = fromRotationMatrixQuat;\n quat[i] = 0.5 * root;\n root = 0.5 / root;\n w =\n (matrix[Matrix3.getElementIndex(k, j)] -\n matrix[Matrix3.getElementIndex(j, k)]) *\n root;\n quat[j] =\n (matrix[Matrix3.getElementIndex(j, i)] +\n matrix[Matrix3.getElementIndex(i, j)]) *\n root;\n quat[k] =\n (matrix[Matrix3.getElementIndex(k, i)] +\n matrix[Matrix3.getElementIndex(i, k)]) *\n root;\n\n x = -quat[0];\n y = -quat[1];\n z = -quat[2];\n }\n\n if (!defined(result)) {\n return new Quaternion(x, y, z, w);\n }\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\nvar scratchHPRQuaternion = new Quaternion();\nvar scratchHeadingQuaternion = new Quaternion();\nvar scratchPitchQuaternion = new Quaternion();\nvar scratchRollQuaternion = new Quaternion();\n\n/**\n * Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\n * the positive x axis.\n *\n * @param {HeadingPitchRoll} headingPitchRoll The rotation expressed as a heading, pitch and roll.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\n */\nQuaternion.fromHeadingPitchRoll = function (headingPitchRoll, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\n //>>includeEnd('debug');\n\n scratchRollQuaternion = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_X,\n headingPitchRoll.roll,\n scratchHPRQuaternion\n );\n scratchPitchQuaternion = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_Y,\n -headingPitchRoll.pitch,\n result\n );\n result = Quaternion.multiply(\n scratchPitchQuaternion,\n scratchRollQuaternion,\n scratchPitchQuaternion\n );\n scratchHeadingQuaternion = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_Z,\n -headingPitchRoll.heading,\n scratchHPRQuaternion\n );\n return Quaternion.multiply(scratchHeadingQuaternion, result, result);\n};\n\nvar sampledQuaternionAxis = new Cartesian3();\nvar sampledQuaternionRotation = new Cartesian3();\nvar sampledQuaternionTempQuaternion = new Quaternion();\nvar sampledQuaternionQuaternion0 = new Quaternion();\nvar sampledQuaternionQuaternion0Conjugate = new Quaternion();\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nQuaternion.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Quaternion} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nQuaternion.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.x;\n array[startingIndex++] = value.y;\n array[startingIndex++] = value.z;\n array[startingIndex] = value.w;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Quaternion} [result] The object into which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Quaternion();\n }\n result.x = array[startingIndex];\n result.y = array[startingIndex + 1];\n result.z = array[startingIndex + 2];\n result.w = array[startingIndex + 3];\n return result;\n};\n\n/**\n * The number of elements used to store the object into an array in its interpolatable form.\n * @type {Number}\n */\nQuaternion.packedInterpolationLength = 3;\n\n/**\n * Converts a packed array into a form suitable for interpolation.\n *\n * @param {Number[]} packedArray The packed array.\n * @param {Number} [startingIndex=0] The index of the first element to be converted.\n * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted.\n * @param {Number[]} [result] The object into which to store the result.\n */\nQuaternion.convertPackedArrayForInterpolation = function (\n packedArray,\n startingIndex,\n lastIndex,\n result\n) {\n Quaternion.unpack(\n packedArray,\n lastIndex * 4,\n sampledQuaternionQuaternion0Conjugate\n );\n Quaternion.conjugate(\n sampledQuaternionQuaternion0Conjugate,\n sampledQuaternionQuaternion0Conjugate\n );\n\n for (var i = 0, len = lastIndex - startingIndex + 1; i < len; i++) {\n var offset = i * 3;\n Quaternion.unpack(\n packedArray,\n (startingIndex + i) * 4,\n sampledQuaternionTempQuaternion\n );\n\n Quaternion.multiply(\n sampledQuaternionTempQuaternion,\n sampledQuaternionQuaternion0Conjugate,\n sampledQuaternionTempQuaternion\n );\n\n if (sampledQuaternionTempQuaternion.w < 0) {\n Quaternion.negate(\n sampledQuaternionTempQuaternion,\n sampledQuaternionTempQuaternion\n );\n }\n\n Quaternion.computeAxis(\n sampledQuaternionTempQuaternion,\n sampledQuaternionAxis\n );\n var angle = Quaternion.computeAngle(sampledQuaternionTempQuaternion);\n if (!defined(result)) {\n result = [];\n }\n result[offset] = sampledQuaternionAxis.x * angle;\n result[offset + 1] = sampledQuaternionAxis.y * angle;\n result[offset + 2] = sampledQuaternionAxis.z * angle;\n }\n};\n\n/**\n * Retrieves an instance from a packed array converted with {@link convertPackedArrayForInterpolation}.\n *\n * @param {Number[]} array The array previously packed for interpolation.\n * @param {Number[]} sourceArray The original packed array.\n * @param {Number} [firstIndex=0] The firstIndex used to convert the array.\n * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n * @param {Quaternion} [result] The object into which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.unpackInterpolationResult = function (\n array,\n sourceArray,\n firstIndex,\n lastIndex,\n result\n) {\n if (!defined(result)) {\n result = new Quaternion();\n }\n Cartesian3.fromArray(array, 0, sampledQuaternionRotation);\n var magnitude = Cartesian3.magnitude(sampledQuaternionRotation);\n\n Quaternion.unpack(sourceArray, lastIndex * 4, sampledQuaternionQuaternion0);\n\n if (magnitude === 0) {\n Quaternion.clone(Quaternion.IDENTITY, sampledQuaternionTempQuaternion);\n } else {\n Quaternion.fromAxisAngle(\n sampledQuaternionRotation,\n magnitude,\n sampledQuaternionTempQuaternion\n );\n }\n\n return Quaternion.multiply(\n sampledQuaternionTempQuaternion,\n sampledQuaternionQuaternion0,\n result\n );\n};\n\n/**\n * Duplicates a Quaternion instance.\n *\n * @param {Quaternion} quaternion The quaternion to duplicate.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined)\n */\nQuaternion.clone = function (quaternion, result) {\n if (!defined(quaternion)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Quaternion(\n quaternion.x,\n quaternion.y,\n quaternion.z,\n quaternion.w\n );\n }\n\n result.x = quaternion.x;\n result.y = quaternion.y;\n result.z = quaternion.z;\n result.w = quaternion.w;\n return result;\n};\n\n/**\n * Computes the conjugate of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.conjugate = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = -quaternion.x;\n result.y = -quaternion.y;\n result.z = -quaternion.z;\n result.w = quaternion.w;\n return result;\n};\n\n/**\n * Computes magnitude squared for the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @returns {Number} The magnitude squared.\n */\nQuaternion.magnitudeSquared = function (quaternion) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n //>>includeEnd('debug');\n\n return (\n quaternion.x * quaternion.x +\n quaternion.y * quaternion.y +\n quaternion.z * quaternion.z +\n quaternion.w * quaternion.w\n );\n};\n\n/**\n * Computes magnitude for the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @returns {Number} The magnitude.\n */\nQuaternion.magnitude = function (quaternion) {\n return Math.sqrt(Quaternion.magnitudeSquared(quaternion));\n};\n\n/**\n * Computes the normalized form of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to normalize.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.normalize = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var inverseMagnitude = 1.0 / Quaternion.magnitude(quaternion);\n var x = quaternion.x * inverseMagnitude;\n var y = quaternion.y * inverseMagnitude;\n var z = quaternion.z * inverseMagnitude;\n var w = quaternion.w * inverseMagnitude;\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Computes the inverse of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to normalize.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.inverse = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var magnitudeSquared = Quaternion.magnitudeSquared(quaternion);\n result = Quaternion.conjugate(quaternion, result);\n return Quaternion.multiplyByScalar(result, 1.0 / magnitudeSquared, result);\n};\n\n/**\n * Computes the componentwise sum of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x + right.x;\n result.y = left.y + right.y;\n result.z = left.z + right.z;\n result.w = left.w + right.w;\n return result;\n};\n\n/**\n * Computes the componentwise difference of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = left.x - right.x;\n result.y = left.y - right.y;\n result.z = left.z - right.z;\n result.w = left.w - right.w;\n return result;\n};\n\n/**\n * Negates the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to be negated.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.negate = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = -quaternion.x;\n result.y = -quaternion.y;\n result.z = -quaternion.z;\n result.w = -quaternion.w;\n return result;\n};\n\n/**\n * Computes the dot (scalar) product of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @returns {Number} The dot product.\n */\nQuaternion.dot = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n return (\n left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\n );\n};\n\n/**\n * Computes the product of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.multiply = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var leftX = left.x;\n var leftY = left.y;\n var leftZ = left.z;\n var leftW = left.w;\n\n var rightX = right.x;\n var rightY = right.y;\n var rightZ = right.z;\n var rightW = right.w;\n\n var x = leftW * rightX + leftX * rightW + leftY * rightZ - leftZ * rightY;\n var y = leftW * rightY - leftX * rightZ + leftY * rightW + leftZ * rightX;\n var z = leftW * rightZ + leftX * rightY - leftY * rightX + leftZ * rightW;\n var w = leftW * rightW - leftX * rightX - leftY * rightY - leftZ * rightZ;\n\n result.x = x;\n result.y = y;\n result.z = z;\n result.w = w;\n return result;\n};\n\n/**\n * Multiplies the provided quaternion componentwise by the provided scalar.\n *\n * @param {Quaternion} quaternion The quaternion to be scaled.\n * @param {Number} scalar The scalar to multiply with.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.multiplyByScalar = function (quaternion, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = quaternion.x * scalar;\n result.y = quaternion.y * scalar;\n result.z = quaternion.z * scalar;\n result.w = quaternion.w * scalar;\n return result;\n};\n\n/**\n * Divides the provided quaternion componentwise by the provided scalar.\n *\n * @param {Quaternion} quaternion The quaternion to be divided.\n * @param {Number} scalar The scalar to divide by.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.divideByScalar = function (quaternion, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = quaternion.x / scalar;\n result.y = quaternion.y / scalar;\n result.z = quaternion.z / scalar;\n result.w = quaternion.w / scalar;\n return result;\n};\n\n/**\n * Computes the axis of rotation of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to use.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nQuaternion.computeAxis = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var w = quaternion.w;\n if (Math.abs(w - 1.0) < CesiumMath.EPSILON6) {\n result.x = result.y = result.z = 0;\n return result;\n }\n\n var scalar = 1.0 / Math.sqrt(1.0 - w * w);\n\n result.x = quaternion.x * scalar;\n result.y = quaternion.y * scalar;\n result.z = quaternion.z * scalar;\n return result;\n};\n\n/**\n * Computes the angle of rotation of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to use.\n * @returns {Number} The angle of rotation.\n */\nQuaternion.computeAngle = function (quaternion) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n //>>includeEnd('debug');\n\n if (Math.abs(quaternion.w - 1.0) < CesiumMath.EPSILON6) {\n return 0.0;\n }\n return 2.0 * Math.acos(quaternion.w);\n};\n\nvar lerpScratch = new Quaternion();\n/**\n * Computes the linear interpolation or extrapolation at t using the provided quaternions.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.lerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n lerpScratch = Quaternion.multiplyByScalar(end, t, lerpScratch);\n result = Quaternion.multiplyByScalar(start, 1.0 - t, result);\n return Quaternion.add(lerpScratch, result, result);\n};\n\nvar slerpEndNegated = new Quaternion();\nvar slerpScaledP = new Quaternion();\nvar slerpScaledR = new Quaternion();\n/**\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#fastSlerp\n */\nQuaternion.slerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var dot = Quaternion.dot(start, end);\n\n // The angle between start must be acute. Since q and -q represent\n // the same rotation, negate q to get the acute angle.\n var r = end;\n if (dot < 0.0) {\n dot = -dot;\n r = slerpEndNegated = Quaternion.negate(end, slerpEndNegated);\n }\n\n // dot > 0, as the dot product approaches 1, the angle between the\n // quaternions vanishes. use linear interpolation.\n if (1.0 - dot < CesiumMath.EPSILON6) {\n return Quaternion.lerp(start, r, t, result);\n }\n\n var theta = Math.acos(dot);\n slerpScaledP = Quaternion.multiplyByScalar(\n start,\n Math.sin((1 - t) * theta),\n slerpScaledP\n );\n slerpScaledR = Quaternion.multiplyByScalar(\n r,\n Math.sin(t * theta),\n slerpScaledR\n );\n result = Quaternion.add(slerpScaledP, slerpScaledR, result);\n return Quaternion.multiplyByScalar(result, 1.0 / Math.sin(theta), result);\n};\n\n/**\n * The logarithmic quaternion function.\n *\n * @param {Quaternion} quaternion The unit quaternion.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nQuaternion.log = function (quaternion, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"quaternion\", quaternion);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var theta = CesiumMath.acosClamped(quaternion.w);\n var thetaOverSinTheta = 0.0;\n\n if (theta !== 0.0) {\n thetaOverSinTheta = theta / Math.sin(theta);\n }\n\n return Cartesian3.multiplyByScalar(quaternion, thetaOverSinTheta, result);\n};\n\n/**\n * The exponential quaternion function.\n *\n * @param {Cartesian3} cartesian The cartesian.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.exp = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var theta = Cartesian3.magnitude(cartesian);\n var sinThetaOverTheta = 0.0;\n\n if (theta !== 0.0) {\n sinThetaOverTheta = Math.sin(theta) / theta;\n }\n\n result.x = cartesian.x * sinThetaOverTheta;\n result.y = cartesian.y * sinThetaOverTheta;\n result.z = cartesian.z * sinThetaOverTheta;\n result.w = Math.cos(theta);\n\n return result;\n};\n\nvar squadScratchCartesian0 = new Cartesian3();\nvar squadScratchCartesian1 = new Cartesian3();\nvar squadScratchQuaternion0 = new Quaternion();\nvar squadScratchQuaternion1 = new Quaternion();\n\n/**\n * Computes an inner quadrangle point.\n * <p>This will compute quaternions that ensure a squad curve is C<sup>1</sup>.</p>\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} q2 The third quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#squad\n */\nQuaternion.computeInnerQuadrangle = function (q0, q1, q2, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"q0\", q0);\n Check.typeOf.object(\"q1\", q1);\n Check.typeOf.object(\"q2\", q2);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var qInv = Quaternion.conjugate(q1, squadScratchQuaternion0);\n Quaternion.multiply(qInv, q2, squadScratchQuaternion1);\n var cart0 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian0);\n\n Quaternion.multiply(qInv, q0, squadScratchQuaternion1);\n var cart1 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian1);\n\n Cartesian3.add(cart0, cart1, cart0);\n Cartesian3.multiplyByScalar(cart0, 0.25, cart0);\n Cartesian3.negate(cart0, cart0);\n Quaternion.exp(cart0, squadScratchQuaternion0);\n\n return Quaternion.multiply(q1, squadScratchQuaternion0, result);\n};\n\n/**\n * Computes the spherical quadrangle interpolation between quaternions.\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} s0 The first inner quadrangle.\n * @param {Quaternion} s1 The second inner quadrangle.\n * @param {Number} t The time in [0,1] used to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n *\n * @example\n * // 1. compute the squad interpolation between two quaternions on a curve\n * var s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion());\n * var s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion());\n * var q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion());\n *\n * // 2. compute the squad interpolation as above but where the first quaternion is a end point.\n * var s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion());\n * var q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion());\n *\n * @see Quaternion#computeInnerQuadrangle\n */\nQuaternion.squad = function (q0, q1, s0, s1, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"q0\", q0);\n Check.typeOf.object(\"q1\", q1);\n Check.typeOf.object(\"s0\", s0);\n Check.typeOf.object(\"s1\", s1);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var slerp0 = Quaternion.slerp(q0, q1, t, squadScratchQuaternion0);\n var slerp1 = Quaternion.slerp(s0, s1, t, squadScratchQuaternion1);\n return Quaternion.slerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\n};\n\nvar fastSlerpScratchQuaternion = new Quaternion();\nvar opmu = 1.90110745351730037;\nvar u = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nvar v = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nvar bT = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nvar bD = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\n\nfor (var i = 0; i < 7; ++i) {\n var s = i + 1.0;\n var t = 2.0 * s + 1.0;\n u[i] = 1.0 / (s * t);\n v[i] = s / t;\n}\n\nu[7] = opmu / (8.0 * 17.0);\nv[7] = (opmu * 8.0) / 17.0;\n\n/**\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\n * This implementation is faster than {@link Quaternion#slerp}, but is only accurate up to 10<sup>-6</sup>.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#slerp\n */\nQuaternion.fastSlerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = Quaternion.dot(start, end);\n\n var sign;\n if (x >= 0) {\n sign = 1.0;\n } else {\n sign = -1.0;\n x = -x;\n }\n\n var xm1 = x - 1.0;\n var d = 1.0 - t;\n var sqrT = t * t;\n var sqrD = d * d;\n\n for (var i = 7; i >= 0; --i) {\n bT[i] = (u[i] * sqrT - v[i]) * xm1;\n bD[i] = (u[i] * sqrD - v[i]) * xm1;\n }\n\n var cT =\n sign *\n t *\n (1.0 +\n bT[0] *\n (1.0 +\n bT[1] *\n (1.0 +\n bT[2] *\n (1.0 +\n bT[3] *\n (1.0 +\n bT[4] *\n (1.0 + bT[5] * (1.0 + bT[6] * (1.0 + bT[7]))))))));\n var cD =\n d *\n (1.0 +\n bD[0] *\n (1.0 +\n bD[1] *\n (1.0 +\n bD[2] *\n (1.0 +\n bD[3] *\n (1.0 +\n bD[4] *\n (1.0 + bD[5] * (1.0 + bD[6] * (1.0 + bD[7]))))))));\n\n var temp = Quaternion.multiplyByScalar(start, cD, fastSlerpScratchQuaternion);\n Quaternion.multiplyByScalar(end, cT, result);\n return Quaternion.add(temp, result, result);\n};\n\n/**\n * Computes the spherical quadrangle interpolation between quaternions.\n * An implementation that is faster than {@link Quaternion#squad}, but less accurate.\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} s0 The first inner quadrangle.\n * @param {Quaternion} s1 The second inner quadrangle.\n * @param {Number} t The time in [0,1] used to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new instance if none was provided.\n *\n * @see Quaternion#squad\n */\nQuaternion.fastSquad = function (q0, q1, s0, s1, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"q0\", q0);\n Check.typeOf.object(\"q1\", q1);\n Check.typeOf.object(\"s0\", s0);\n Check.typeOf.object(\"s1\", s1);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var slerp0 = Quaternion.fastSlerp(q0, q1, t, squadScratchQuaternion0);\n var slerp1 = Quaternion.fastSlerp(s0, s1, t, squadScratchQuaternion1);\n return Quaternion.fastSlerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\n};\n\n/**\n * Compares the provided quaternions componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Quaternion} [left] The first quaternion.\n * @param {Quaternion} [right] The second quaternion.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nQuaternion.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.x === right.x &&\n left.y === right.y &&\n left.z === right.z &&\n left.w === right.w)\n );\n};\n\n/**\n * Compares the provided quaternions componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Quaternion} [left] The first quaternion.\n * @param {Quaternion} [right] The second quaternion.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nQuaternion.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left.x - right.x) <= epsilon &&\n Math.abs(left.y - right.y) <= epsilon &&\n Math.abs(left.z - right.z) <= epsilon &&\n Math.abs(left.w - right.w) <= epsilon)\n );\n};\n\n/**\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0).\n *\n * @type {Quaternion}\n * @constant\n */\nQuaternion.ZERO = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0).\n *\n * @type {Quaternion}\n * @constant\n */\nQuaternion.IDENTITY = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 1.0));\n\n/**\n * Duplicates this Quaternion instance.\n *\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.prototype.clone = function (result) {\n return Quaternion.clone(this, result);\n};\n\n/**\n * Compares this and the provided quaternion componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Quaternion} [right] The right hand side quaternion.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nQuaternion.prototype.equals = function (right) {\n return Quaternion.equals(this, right);\n};\n\n/**\n * Compares this and the provided quaternion componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Quaternion} [right] The right hand side quaternion.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nQuaternion.prototype.equalsEpsilon = function (right, epsilon) {\n return Quaternion.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Returns a string representing this quaternion in the format (x, y, z, w).\n *\n * @returns {String} A string representing this Quaternion.\n */\nQuaternion.prototype.toString = function () {\n return \"(\" + this.x + \", \" + this.y + \", \" + this.z + \", \" + this.w + \")\";\n};\nexport default Quaternion;\n","import when from \"../ThirdParty/when.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EarthOrientationParameters from \"./EarthOrientationParameters.js\";\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport HeadingPitchRoll from \"./HeadingPitchRoll.js\";\nimport Iau2006XysData from \"./Iau2006XysData.js\";\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport TimeConstants from \"./TimeConstants.js\";\n\n/**\n * Contains functions for transforming positions to various reference frames.\n *\n * @namespace Transforms\n */\nvar Transforms = {};\n\nvar vectorProductLocalFrame = {\n up: {\n south: \"east\",\n north: \"west\",\n west: \"south\",\n east: \"north\",\n },\n down: {\n south: \"west\",\n north: \"east\",\n west: \"north\",\n east: \"south\",\n },\n south: {\n up: \"west\",\n down: \"east\",\n west: \"down\",\n east: \"up\",\n },\n north: {\n up: \"east\",\n down: \"west\",\n west: \"up\",\n east: \"down\",\n },\n west: {\n up: \"north\",\n down: \"south\",\n north: \"down\",\n south: \"up\",\n },\n east: {\n up: \"south\",\n down: \"north\",\n north: \"up\",\n south: \"down\",\n },\n};\n\nvar degeneratePositionLocalFrame = {\n north: [-1, 0, 0],\n east: [0, 1, 0],\n up: [0, 0, 1],\n south: [1, 0, 0],\n west: [0, -1, 0],\n down: [0, 0, -1],\n};\n\nvar localFrameToFixedFrameCache = {};\n\nvar scratchCalculateCartesian = {\n east: new Cartesian3(),\n north: new Cartesian3(),\n up: new Cartesian3(),\n west: new Cartesian3(),\n south: new Cartesian3(),\n down: new Cartesian3(),\n};\nvar scratchFirstCartesian = new Cartesian3();\nvar scratchSecondCartesian = new Cartesian3();\nvar scratchThirdCartesian = new Cartesian3();\n/**\n * Generates a function that computes a 4x4 transformation matrix from a reference frame\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * @param {String} firstAxis name of the first axis of the local reference frame. Must be\n * 'east', 'north', 'up', 'west', 'south' or 'down'.\n * @param {String} secondAxis name of the second axis of the local reference frame. Must be\n * 'east', 'north', 'up', 'west', 'south' or 'down'.\n * @return {Transforms.LocalFrameToFixedFrame} The function that will computes a\n * 4x4 transformation matrix from a reference frame, with first axis and second axis compliant with the parameters,\n */\nTransforms.localFrameToFixedFrameGenerator = function (firstAxis, secondAxis) {\n if (\n !vectorProductLocalFrame.hasOwnProperty(firstAxis) ||\n !vectorProductLocalFrame[firstAxis].hasOwnProperty(secondAxis)\n ) {\n throw new DeveloperError(\n \"firstAxis and secondAxis must be east, north, up, west, south or down.\"\n );\n }\n var thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis];\n\n /**\n * Computes a 4x4 transformation matrix from a reference frame\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * @callback Transforms.LocalFrameToFixedFrame\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n */\n var resultat;\n var hashAxis = firstAxis + secondAxis;\n if (defined(localFrameToFixedFrameCache[hashAxis])) {\n resultat = localFrameToFixedFrameCache[hashAxis];\n } else {\n resultat = function (origin, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(origin)) {\n throw new DeveloperError(\"origin is required.\");\n }\n //>>includeEnd('debug');\n if (!defined(result)) {\n result = new Matrix4();\n }\n if (\n Cartesian3.equalsEpsilon(origin, Cartesian3.ZERO, CesiumMath.EPSILON14)\n ) {\n // If x, y, and z are zero, use the degenerate local frame, which is a special case\n Cartesian3.unpack(\n degeneratePositionLocalFrame[firstAxis],\n 0,\n scratchFirstCartesian\n );\n Cartesian3.unpack(\n degeneratePositionLocalFrame[secondAxis],\n 0,\n scratchSecondCartesian\n );\n Cartesian3.unpack(\n degeneratePositionLocalFrame[thirdAxis],\n 0,\n scratchThirdCartesian\n );\n } else if (\n CesiumMath.equalsEpsilon(origin.x, 0.0, CesiumMath.EPSILON14) &&\n CesiumMath.equalsEpsilon(origin.y, 0.0, CesiumMath.EPSILON14)\n ) {\n // If x and y are zero, assume origin is at a pole, which is a special case.\n var sign = CesiumMath.sign(origin.z);\n\n Cartesian3.unpack(\n degeneratePositionLocalFrame[firstAxis],\n 0,\n scratchFirstCartesian\n );\n if (firstAxis !== \"east\" && firstAxis !== \"west\") {\n Cartesian3.multiplyByScalar(\n scratchFirstCartesian,\n sign,\n scratchFirstCartesian\n );\n }\n\n Cartesian3.unpack(\n degeneratePositionLocalFrame[secondAxis],\n 0,\n scratchSecondCartesian\n );\n if (secondAxis !== \"east\" && secondAxis !== \"west\") {\n Cartesian3.multiplyByScalar(\n scratchSecondCartesian,\n sign,\n scratchSecondCartesian\n );\n }\n\n Cartesian3.unpack(\n degeneratePositionLocalFrame[thirdAxis],\n 0,\n scratchThirdCartesian\n );\n if (thirdAxis !== \"east\" && thirdAxis !== \"west\") {\n Cartesian3.multiplyByScalar(\n scratchThirdCartesian,\n sign,\n scratchThirdCartesian\n );\n }\n } else {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n ellipsoid.geodeticSurfaceNormal(origin, scratchCalculateCartesian.up);\n\n var up = scratchCalculateCartesian.up;\n var east = scratchCalculateCartesian.east;\n east.x = -origin.y;\n east.y = origin.x;\n east.z = 0.0;\n Cartesian3.normalize(east, scratchCalculateCartesian.east);\n Cartesian3.cross(up, east, scratchCalculateCartesian.north);\n\n Cartesian3.multiplyByScalar(\n scratchCalculateCartesian.up,\n -1,\n scratchCalculateCartesian.down\n );\n Cartesian3.multiplyByScalar(\n scratchCalculateCartesian.east,\n -1,\n scratchCalculateCartesian.west\n );\n Cartesian3.multiplyByScalar(\n scratchCalculateCartesian.north,\n -1,\n scratchCalculateCartesian.south\n );\n\n scratchFirstCartesian = scratchCalculateCartesian[firstAxis];\n scratchSecondCartesian = scratchCalculateCartesian[secondAxis];\n scratchThirdCartesian = scratchCalculateCartesian[thirdAxis];\n }\n result[0] = scratchFirstCartesian.x;\n result[1] = scratchFirstCartesian.y;\n result[2] = scratchFirstCartesian.z;\n result[3] = 0.0;\n result[4] = scratchSecondCartesian.x;\n result[5] = scratchSecondCartesian.y;\n result[6] = scratchSecondCartesian.z;\n result[7] = 0.0;\n result[8] = scratchThirdCartesian.x;\n result[9] = scratchThirdCartesian.y;\n result[10] = scratchThirdCartesian.z;\n result[11] = 0.0;\n result[12] = origin.x;\n result[13] = origin.y;\n result[14] = origin.z;\n result[15] = 1.0;\n return result;\n };\n localFrameToFixedFrameCache[hashAxis] = resultat;\n }\n return resultat;\n};\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local east direction.</li>\n * <li>The <code>y</code> axis points in the local north direction.</li>\n * <li>The <code>z</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n */\nTransforms.eastNorthUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n \"east\",\n \"north\"\n);\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the local east direction.</li>\n * <li>The <code>z</code> axis points in the opposite direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var transform = Cesium.Transforms.northEastDownToFixedFrame(center);\n */\nTransforms.northEastDownToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n \"north\",\n \"east\"\n);\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-up-east axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * <li>The <code>z</code> axis points in the local east direction.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-up-east at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var transform = Cesium.Transforms.northUpEastToFixedFrame(center);\n */\nTransforms.northUpEastToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n \"north\",\n \"up\"\n);\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-west-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the local west direction.</li>\n * <li>The <code>z</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-West-Up at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var transform = Cesium.Transforms.northWestUpToFixedFrame(center);\n */\nTransforms.northWestUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n \"north\",\n \"west\"\n);\n\nvar scratchHPRQuaternion = new Quaternion();\nvar scratchScale = new Cartesian3(1.0, 1.0, 1.0);\nvar scratchHPRMatrix4 = new Matrix4();\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with axes computed from the heading-pitch-roll angles\n * centered at the provided origin to the provided ellipsoid's fixed reference frame. Heading is the rotation from the local north\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var heading = -Cesium.Math.PI_OVER_TWO;\n * var pitch = Cesium.Math.PI_OVER_FOUR;\n * var roll = 0.0;\n * var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\n * var transform = Cesium.Transforms.headingPitchRollToFixedFrame(center, hpr);\n */\nTransforms.headingPitchRollToFixedFrame = function (\n origin,\n headingPitchRoll,\n ellipsoid,\n fixedFrameTransform,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\n //>>includeEnd('debug');\n\n fixedFrameTransform = defaultValue(\n fixedFrameTransform,\n Transforms.eastNorthUpToFixedFrame\n );\n var hprQuaternion = Quaternion.fromHeadingPitchRoll(\n headingPitchRoll,\n scratchHPRQuaternion\n );\n var hprMatrix = Matrix4.fromTranslationQuaternionRotationScale(\n Cartesian3.ZERO,\n hprQuaternion,\n scratchScale,\n scratchHPRMatrix4\n );\n result = fixedFrameTransform(origin, ellipsoid, result);\n return Matrix4.multiply(result, hprMatrix, result);\n};\n\nvar scratchENUMatrix4 = new Matrix4();\nvar scratchHPRMatrix3 = new Matrix3();\n\n/**\n * Computes a quaternion from a reference frame with axes computed from the heading-pitch-roll angles\n * centered at the provided origin. Heading is the rotation from the local north\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\n *\n * @example\n * // Get the quaternion from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\n * var center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var heading = -Cesium.Math.PI_OVER_TWO;\n * var pitch = Cesium.Math.PI_OVER_FOUR;\n * var roll = 0.0;\n * var hpr = new HeadingPitchRoll(heading, pitch, roll);\n * var quaternion = Cesium.Transforms.headingPitchRollQuaternion(center, hpr);\n */\nTransforms.headingPitchRollQuaternion = function (\n origin,\n headingPitchRoll,\n ellipsoid,\n fixedFrameTransform,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\n //>>includeEnd('debug');\n\n var transform = Transforms.headingPitchRollToFixedFrame(\n origin,\n headingPitchRoll,\n ellipsoid,\n fixedFrameTransform,\n scratchENUMatrix4\n );\n var rotation = Matrix4.getMatrix3(transform, scratchHPRMatrix3);\n return Quaternion.fromRotationMatrix(rotation, result);\n};\n\nvar noScale = new Cartesian3(1.0, 1.0, 1.0);\nvar hprCenterScratch = new Cartesian3();\nvar ffScratch = new Matrix4();\nvar hprTransformScratch = new Matrix4();\nvar hprRotationScratch = new Matrix3();\nvar hprQuaternionScratch = new Quaternion();\n/**\n * Computes heading-pitch-roll angles from a transform in a particular reference frame. Heading is the rotation from the local north\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Matrix4} transform The transform\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if none was provided.\n */\nTransforms.fixedFrameToHeadingPitchRoll = function (\n transform,\n ellipsoid,\n fixedFrameTransform,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"transform\", transform);\n //>>includeEnd('debug');\n\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n fixedFrameTransform = defaultValue(\n fixedFrameTransform,\n Transforms.eastNorthUpToFixedFrame\n );\n if (!defined(result)) {\n result = new HeadingPitchRoll();\n }\n\n var center = Matrix4.getTranslation(transform, hprCenterScratch);\n if (Cartesian3.equals(center, Cartesian3.ZERO)) {\n result.heading = 0;\n result.pitch = 0;\n result.roll = 0;\n return result;\n }\n var toFixedFrame = Matrix4.inverseTransformation(\n fixedFrameTransform(center, ellipsoid, ffScratch),\n ffScratch\n );\n var transformCopy = Matrix4.setScale(transform, noScale, hprTransformScratch);\n transformCopy = Matrix4.setTranslation(\n transformCopy,\n Cartesian3.ZERO,\n transformCopy\n );\n\n toFixedFrame = Matrix4.multiply(toFixedFrame, transformCopy, toFixedFrame);\n var quaternionRotation = Quaternion.fromRotationMatrix(\n Matrix4.getMatrix3(toFixedFrame, hprRotationScratch),\n hprQuaternionScratch\n );\n quaternionRotation = Quaternion.normalize(\n quaternionRotation,\n quaternionRotation\n );\n\n return HeadingPitchRoll.fromQuaternion(quaternionRotation, result);\n};\n\nvar gmstConstant0 = 6 * 3600 + 41 * 60 + 50.54841;\nvar gmstConstant1 = 8640184.812866;\nvar gmstConstant2 = 0.093104;\nvar gmstConstant3 = -6.2e-6;\nvar rateCoef = 1.1772758384668e-19;\nvar wgs84WRPrecessing = 7.2921158553e-5;\nvar twoPiOverSecondsInDay = CesiumMath.TWO_PI / 86400.0;\nvar dateInUtc = new JulianDate();\n\n/**\n * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the\n * pseudo-fixed axes at a given time. This method treats the UT1 time standard as equivalent to UTC.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\n *\n * @example\n * //Set the view to the inertial frame.\n * scene.postUpdate.addEventListener(function(scene, time) {\n * var now = Cesium.JulianDate.now();\n * var offset = Cesium.Matrix4.multiplyByPoint(camera.transform, camera.position, new Cesium.Cartesian3());\n * var transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Transforms.computeTemeToPseudoFixedMatrix(now));\n * var inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());\n * Cesium.Matrix4.multiplyByPoint(inverseTransform, offset, offset);\n * camera.lookAtTransform(transform, offset);\n * });\n */\nTransforms.computeTemeToPseudoFixedMatrix = function (date, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(date)) {\n throw new DeveloperError(\"date is required.\");\n }\n //>>includeEnd('debug');\n\n // GMST is actually computed using UT1. We're using UTC as an approximation of UT1.\n // We do not want to use the function like convertTaiToUtc in JulianDate because\n // we explicitly do not want to fail when inside the leap second.\n\n dateInUtc = JulianDate.addSeconds(\n date,\n -JulianDate.computeTaiMinusUtc(date),\n dateInUtc\n );\n var utcDayNumber = dateInUtc.dayNumber;\n var utcSecondsIntoDay = dateInUtc.secondsOfDay;\n\n var t;\n var diffDays = utcDayNumber - 2451545;\n if (utcSecondsIntoDay >= 43200.0) {\n t = (diffDays + 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n } else {\n t = (diffDays - 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n }\n\n var gmst0 =\n gmstConstant0 +\n t * (gmstConstant1 + t * (gmstConstant2 + t * gmstConstant3));\n var angle = (gmst0 * twoPiOverSecondsInDay) % CesiumMath.TWO_PI;\n var ratio = wgs84WRPrecessing + rateCoef * (utcDayNumber - 2451545.5);\n var secondsSinceMidnight =\n (utcSecondsIntoDay + TimeConstants.SECONDS_PER_DAY * 0.5) %\n TimeConstants.SECONDS_PER_DAY;\n var gha = angle + ratio * secondsSinceMidnight;\n var cosGha = Math.cos(gha);\n var sinGha = Math.sin(gha);\n\n if (!defined(result)) {\n return new Matrix3(\n cosGha,\n sinGha,\n 0.0,\n -sinGha,\n cosGha,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n result[0] = cosGha;\n result[1] = -sinGha;\n result[2] = 0.0;\n result[3] = sinGha;\n result[4] = cosGha;\n result[5] = 0.0;\n result[6] = 0.0;\n result[7] = 0.0;\n result[8] = 1.0;\n return result;\n};\n\n/**\n * The source of IAU 2006 XYS data, used for computing the transformation between the\n * Fixed and ICRF axes.\n * @type {Iau2006XysData}\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n *\n * @private\n */\nTransforms.iau2006XysData = new Iau2006XysData();\n\n/**\n * The source of Earth Orientation Parameters (EOP) data, used for computing the transformation\n * between the Fixed and ICRF axes. By default, zero values are used for all EOP values,\n * yielding a reasonable but not completely accurate representation of the ICRF axes.\n * @type {EarthOrientationParameters}\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n *\n * @private\n */\nTransforms.earthOrientationParameters = EarthOrientationParameters.NONE;\n\nvar ttMinusTai = 32.184;\nvar j2000ttDays = 2451545.0;\n\n/**\n * Preloads the data necessary to transform between the ICRF and Fixed axes, in either\n * direction, over a given interval. This function returns a promise that, when resolved,\n * indicates that the preload has completed.\n *\n * @param {TimeInterval} timeInterval The interval to preload.\n * @returns {Promise<void>} A promise that, when resolved, indicates that the preload has completed\n * and evaluation of the transformation between the fixed and ICRF axes will\n * no longer return undefined for a time inside the interval.\n *\n *\n * @example\n * var interval = new Cesium.TimeInterval(...);\n * when(Cesium.Transforms.preloadIcrfFixed(interval), function() {\n * // the data is now loaded\n * });\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n * @see when\n */\nTransforms.preloadIcrfFixed = function (timeInterval) {\n var startDayTT = timeInterval.start.dayNumber;\n var startSecondTT = timeInterval.start.secondsOfDay + ttMinusTai;\n var stopDayTT = timeInterval.stop.dayNumber;\n var stopSecondTT = timeInterval.stop.secondsOfDay + ttMinusTai;\n\n var xysPromise = Transforms.iau2006XysData.preload(\n startDayTT,\n startSecondTT,\n stopDayTT,\n stopSecondTT\n );\n var eopPromise = Transforms.earthOrientationParameters.getPromiseToLoad();\n\n return when.all([xysPromise, eopPromise]);\n};\n\n/**\n * Computes a rotation matrix to transform a point or vector from the International Celestial\n * Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF)\n * at a given time. This function may return undefined if the data necessary to\n * do the transformation is not yet loaded.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result. If this parameter is\n * not specified, a new instance is created and returned.\n * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the\n * transformation is not yet loaded.\n *\n *\n * @example\n * scene.postUpdate.addEventListener(function(scene, time) {\n * // View in ICRF.\n * var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\n * if (Cesium.defined(icrfToFixed)) {\n * var offset = Cesium.Cartesian3.clone(camera.position);\n * var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n * camera.lookAtTransform(transform, offset);\n * }\n * });\n *\n * @see Transforms.preloadIcrfFixed\n */\nTransforms.computeIcrfToFixedMatrix = function (date, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(date)) {\n throw new DeveloperError(\"date is required.\");\n }\n //>>includeEnd('debug');\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n var fixedToIcrfMtx = Transforms.computeFixedToIcrfMatrix(date, result);\n if (!defined(fixedToIcrfMtx)) {\n return undefined;\n }\n\n return Matrix3.transpose(fixedToIcrfMtx, result);\n};\n\nvar xysScratch = new Iau2006XysSample(0.0, 0.0, 0.0);\nvar eopScratch = new EarthOrientationParametersSample(\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0\n);\nvar rotation1Scratch = new Matrix3();\nvar rotation2Scratch = new Matrix3();\n\n/**\n * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF)\n * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes\n * at a given time. This function may return undefined if the data necessary to\n * do the transformation is not yet loaded.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result. If this parameter is\n * not specified, a new instance is created and returned.\n * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the\n * transformation is not yet loaded.\n *\n *\n * @example\n * // Transform a point from the ICRF axes to the Fixed axes.\n * var now = Cesium.JulianDate.now();\n * var pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now);\n * var pointInInertial = new Cesium.Cartesian3();\n * if (Cesium.defined(fixedToIcrf)) {\n * pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);\n * }\n *\n * @see Transforms.preloadIcrfFixed\n */\nTransforms.computeFixedToIcrfMatrix = function (date, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(date)) {\n throw new DeveloperError(\"date is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n // Compute pole wander\n var eop = Transforms.earthOrientationParameters.compute(date, eopScratch);\n if (!defined(eop)) {\n return undefined;\n }\n\n // There is no external conversion to Terrestrial Time (TT).\n // So use International Atomic Time (TAI) and convert using offsets.\n // Here we are assuming that dayTT and secondTT are positive\n var dayTT = date.dayNumber;\n // It's possible here that secondTT could roll over 86400\n // This does not seem to affect the precision (unit tests check for this)\n var secondTT = date.secondsOfDay + ttMinusTai;\n\n var xys = Transforms.iau2006XysData.computeXysRadians(\n dayTT,\n secondTT,\n xysScratch\n );\n if (!defined(xys)) {\n return undefined;\n }\n\n var x = xys.x + eop.xPoleOffset;\n var y = xys.y + eop.yPoleOffset;\n\n // Compute XYS rotation\n var a = 1.0 / (1.0 + Math.sqrt(1.0 - x * x - y * y));\n\n var rotation1 = rotation1Scratch;\n rotation1[0] = 1.0 - a * x * x;\n rotation1[3] = -a * x * y;\n rotation1[6] = x;\n rotation1[1] = -a * x * y;\n rotation1[4] = 1 - a * y * y;\n rotation1[7] = y;\n rotation1[2] = -x;\n rotation1[5] = -y;\n rotation1[8] = 1 - a * (x * x + y * y);\n\n var rotation2 = Matrix3.fromRotationZ(-xys.s, rotation2Scratch);\n var matrixQ = Matrix3.multiply(rotation1, rotation2, rotation1Scratch);\n\n // Similar to TT conversions above\n // It's possible here that secondTT could roll over 86400\n // This does not seem to affect the precision (unit tests check for this)\n var dateUt1day = date.dayNumber;\n var dateUt1sec =\n date.secondsOfDay - JulianDate.computeTaiMinusUtc(date) + eop.ut1MinusUtc;\n\n // Compute Earth rotation angle\n // The IERS standard for era is\n // era = 0.7790572732640 + 1.00273781191135448 * Tu\n // where\n // Tu = JulianDateInUt1 - 2451545.0\n // However, you get much more precision if you make the following simplification\n // era = a + (1 + b) * (JulianDayNumber + FractionOfDay - 2451545)\n // era = a + (JulianDayNumber - 2451545) + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\n // era = a + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\n // since (JulianDayNumber - 2451545) represents an integer number of revolutions which will be discarded anyway.\n var daysSinceJ2000 = dateUt1day - 2451545;\n var fractionOfDay = dateUt1sec / TimeConstants.SECONDS_PER_DAY;\n var era =\n 0.779057273264 +\n fractionOfDay +\n 0.00273781191135448 * (daysSinceJ2000 + fractionOfDay);\n era = (era % 1.0) * CesiumMath.TWO_PI;\n\n var earthRotation = Matrix3.fromRotationZ(era, rotation2Scratch);\n\n // pseudoFixed to ICRF\n var pfToIcrf = Matrix3.multiply(matrixQ, earthRotation, rotation1Scratch);\n\n // Compute pole wander matrix\n var cosxp = Math.cos(eop.xPoleWander);\n var cosyp = Math.cos(eop.yPoleWander);\n var sinxp = Math.sin(eop.xPoleWander);\n var sinyp = Math.sin(eop.yPoleWander);\n\n var ttt = dayTT - j2000ttDays + secondTT / TimeConstants.SECONDS_PER_DAY;\n ttt /= 36525.0;\n\n // approximate sp value in rad\n var sp = (-47.0e-6 * ttt * CesiumMath.RADIANS_PER_DEGREE) / 3600.0;\n var cossp = Math.cos(sp);\n var sinsp = Math.sin(sp);\n\n var fToPfMtx = rotation2Scratch;\n fToPfMtx[0] = cosxp * cossp;\n fToPfMtx[1] = cosxp * sinsp;\n fToPfMtx[2] = sinxp;\n fToPfMtx[3] = -cosyp * sinsp + sinyp * sinxp * cossp;\n fToPfMtx[4] = cosyp * cossp + sinyp * sinxp * sinsp;\n fToPfMtx[5] = -sinyp * cosxp;\n fToPfMtx[6] = -sinyp * sinsp - cosyp * sinxp * cossp;\n fToPfMtx[7] = sinyp * cossp - cosyp * sinxp * sinsp;\n fToPfMtx[8] = cosyp * cosxp;\n\n return Matrix3.multiply(pfToIcrf, fToPfMtx, result);\n};\n\nvar pointToWindowCoordinatesTemp = new Cartesian4();\n\n/**\n * Transform a point from model coordinates to window coordinates.\n *\n * @param {Matrix4} modelViewProjectionMatrix The 4x4 model-view-projection matrix.\n * @param {Matrix4} viewportTransformation The 4x4 viewport transformation.\n * @param {Cartesian3} point The point to transform.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\n */\nTransforms.pointToWindowCoordinates = function (\n modelViewProjectionMatrix,\n viewportTransformation,\n point,\n result\n) {\n result = Transforms.pointToGLWindowCoordinates(\n modelViewProjectionMatrix,\n viewportTransformation,\n point,\n result\n );\n result.y = 2.0 * viewportTransformation[5] - result.y;\n return result;\n};\n\n/**\n * @private\n */\nTransforms.pointToGLWindowCoordinates = function (\n modelViewProjectionMatrix,\n viewportTransformation,\n point,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(modelViewProjectionMatrix)) {\n throw new DeveloperError(\"modelViewProjectionMatrix is required.\");\n }\n\n if (!defined(viewportTransformation)) {\n throw new DeveloperError(\"viewportTransformation is required.\");\n }\n\n if (!defined(point)) {\n throw new DeveloperError(\"point is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n var tmp = pointToWindowCoordinatesTemp;\n\n Matrix4.multiplyByVector(\n modelViewProjectionMatrix,\n Cartesian4.fromElements(point.x, point.y, point.z, 1, tmp),\n tmp\n );\n Cartesian4.multiplyByScalar(tmp, 1.0 / tmp.w, tmp);\n Matrix4.multiplyByVector(viewportTransformation, tmp, tmp);\n return Cartesian2.fromCartesian4(tmp, result);\n};\n\nvar normalScratch = new Cartesian3();\nvar rightScratch = new Cartesian3();\nvar upScratch = new Cartesian3();\n\n/**\n * Transform a position and velocity to a rotation matrix.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} velocity The velocity vector to transform.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\n */\nTransforms.rotationMatrixFromPositionVelocity = function (\n position,\n velocity,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n\n if (!defined(velocity)) {\n throw new DeveloperError(\"velocity is required.\");\n }\n //>>includeEnd('debug');\n\n var normal = defaultValue(ellipsoid, Ellipsoid.WGS84).geodeticSurfaceNormal(\n position,\n normalScratch\n );\n var right = Cartesian3.cross(velocity, normal, rightScratch);\n\n if (Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)) {\n right = Cartesian3.clone(Cartesian3.UNIT_X, right);\n }\n\n var up = Cartesian3.cross(right, velocity, upScratch);\n Cartesian3.normalize(up, up);\n Cartesian3.cross(velocity, up, right);\n Cartesian3.negate(right, right);\n Cartesian3.normalize(right, right);\n\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n result[0] = velocity.x;\n result[1] = velocity.y;\n result[2] = velocity.z;\n result[3] = right.x;\n result[4] = right.y;\n result[5] = right.z;\n result[6] = up.x;\n result[7] = up.y;\n result[8] = up.z;\n\n return result;\n};\n\nvar swizzleMatrix = new Matrix4(\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n);\n\nvar scratchCartographic = new Cartographic();\nvar scratchCartesian3Projection = new Cartesian3();\nvar scratchCenter = new Cartesian3();\nvar scratchRotation = new Matrix3();\nvar scratchFromENU = new Matrix4();\nvar scratchToENU = new Matrix4();\n\n/**\n * @private\n */\nTransforms.basisTo2D = function (projection, matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(projection)) {\n throw new DeveloperError(\"projection is required.\");\n }\n if (!defined(matrix)) {\n throw new DeveloperError(\"matrix is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var rtcCenter = Matrix4.getTranslation(matrix, scratchCenter);\n var ellipsoid = projection.ellipsoid;\n\n // Get the 2D Center\n var cartographic = ellipsoid.cartesianToCartographic(\n rtcCenter,\n scratchCartographic\n );\n var projectedPosition = projection.project(\n cartographic,\n scratchCartesian3Projection\n );\n Cartesian3.fromElements(\n projectedPosition.z,\n projectedPosition.x,\n projectedPosition.y,\n projectedPosition\n );\n\n // Assuming the instance are positioned in WGS84, invert the WGS84 transform to get the local transform and then convert to 2D\n var fromENU = Transforms.eastNorthUpToFixedFrame(\n rtcCenter,\n ellipsoid,\n scratchFromENU\n );\n var toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\n var rotation = Matrix4.getMatrix3(matrix, scratchRotation);\n var local = Matrix4.multiplyByMatrix3(toENU, rotation, result);\n Matrix4.multiply(swizzleMatrix, local, result); // Swap x, y, z for 2D\n Matrix4.setTranslation(result, projectedPosition, result); // Use the projected center\n\n return result;\n};\n\n/**\n * @private\n */\nTransforms.wgs84To2DModelMatrix = function (projection, center, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(projection)) {\n throw new DeveloperError(\"projection is required.\");\n }\n if (!defined(center)) {\n throw new DeveloperError(\"center is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var ellipsoid = projection.ellipsoid;\n\n var fromENU = Transforms.eastNorthUpToFixedFrame(\n center,\n ellipsoid,\n scratchFromENU\n );\n var toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\n\n var cartographic = ellipsoid.cartesianToCartographic(\n center,\n scratchCartographic\n );\n var projectedPosition = projection.project(\n cartographic,\n scratchCartesian3Projection\n );\n Cartesian3.fromElements(\n projectedPosition.z,\n projectedPosition.x,\n projectedPosition.y,\n projectedPosition\n );\n\n var translation = Matrix4.fromTranslation(projectedPosition, scratchFromENU);\n Matrix4.multiply(swizzleMatrix, toENU, result);\n Matrix4.multiply(translation, result, result);\n\n return result;\n};\nexport default Transforms;\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport Ray from \"./Ray.js\";\nimport Transforms from \"./Transforms.js\";\n\nvar scratchCart4 = new Cartesian4();\n/**\n * A plane tangent to the provided ellipsoid at the provided origin.\n * If origin is not on the surface of the ellipsoid, it's surface projection will be used.\n * If origin is at the center of the ellipsoid, an exception will be thrown.\n * @alias EllipsoidTangentPlane\n * @constructor\n *\n * @param {Cartesian3} origin The point on the surface of the ellipsoid where the tangent plane touches.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\n *\n * @exception {DeveloperError} origin must not be at the center of the ellipsoid.\n */\nfunction EllipsoidTangentPlane(origin, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"origin\", origin);\n //>>includeEnd('debug');\n\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n origin = ellipsoid.scaleToGeodeticSurface(origin);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(origin)) {\n throw new DeveloperError(\n \"origin must not be at the center of the ellipsoid.\"\n );\n }\n //>>includeEnd('debug');\n\n var eastNorthUp = Transforms.eastNorthUpToFixedFrame(origin, ellipsoid);\n this._ellipsoid = ellipsoid;\n this._origin = origin;\n this._xAxis = Cartesian3.fromCartesian4(\n Matrix4.getColumn(eastNorthUp, 0, scratchCart4)\n );\n this._yAxis = Cartesian3.fromCartesian4(\n Matrix4.getColumn(eastNorthUp, 1, scratchCart4)\n );\n\n var normal = Cartesian3.fromCartesian4(\n Matrix4.getColumn(eastNorthUp, 2, scratchCart4)\n );\n this._plane = Plane.fromPointNormal(origin, normal);\n}\n\nObject.defineProperties(EllipsoidTangentPlane.prototype, {\n /**\n * Gets the ellipsoid.\n * @memberof EllipsoidTangentPlane.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Gets the origin.\n * @memberof EllipsoidTangentPlane.prototype\n * @type {Cartesian3}\n */\n origin: {\n get: function () {\n return this._origin;\n },\n },\n\n /**\n * Gets the plane which is tangent to the ellipsoid.\n * @memberof EllipsoidTangentPlane.prototype\n * @readonly\n * @type {Plane}\n */\n plane: {\n get: function () {\n return this._plane;\n },\n },\n\n /**\n * Gets the local X-axis (east) of the tangent plane.\n * @memberof EllipsoidTangentPlane.prototype\n * @readonly\n * @type {Cartesian3}\n */\n xAxis: {\n get: function () {\n return this._xAxis;\n },\n },\n\n /**\n * Gets the local Y-axis (north) of the tangent plane.\n * @memberof EllipsoidTangentPlane.prototype\n * @readonly\n * @type {Cartesian3}\n */\n yAxis: {\n get: function () {\n return this._yAxis;\n },\n },\n\n /**\n * Gets the local Z-axis (up) of the tangent plane.\n * @memberof EllipsoidTangentPlane.prototype\n * @readonly\n * @type {Cartesian3}\n */\n zAxis: {\n get: function () {\n return this._plane.normal;\n },\n },\n});\n\nvar tmp = new AxisAlignedBoundingBox();\n/**\n * Creates a new instance from the provided ellipsoid and the center\n * point of the provided Cartesians.\n *\n * @param {Cartesian3[]} cartesians The list of positions surrounding the center point.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\n */\nEllipsoidTangentPlane.fromPoints = function (cartesians, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n\n var box = AxisAlignedBoundingBox.fromPoints(cartesians, tmp);\n return new EllipsoidTangentPlane(box.center, ellipsoid);\n};\n\nvar scratchProjectPointOntoPlaneRay = new Ray();\nvar scratchProjectPointOntoPlaneCartesian3 = new Cartesian3();\n\n/**\n * Computes the projection of the provided 3D position onto the 2D plane, radially outward from the {@link EllipsoidTangentPlane.ellipsoid} coordinate system origin.\n *\n * @param {Cartesian3} cartesian The point to project.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. Undefined if there is no intersection point\n */\nEllipsoidTangentPlane.prototype.projectPointOntoPlane = function (\n cartesian,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n var ray = scratchProjectPointOntoPlaneRay;\n ray.origin = cartesian;\n Cartesian3.normalize(cartesian, ray.direction);\n\n var intersectionPoint = IntersectionTests.rayPlane(\n ray,\n this._plane,\n scratchProjectPointOntoPlaneCartesian3\n );\n if (!defined(intersectionPoint)) {\n Cartesian3.negate(ray.direction, ray.direction);\n intersectionPoint = IntersectionTests.rayPlane(\n ray,\n this._plane,\n scratchProjectPointOntoPlaneCartesian3\n );\n }\n\n if (defined(intersectionPoint)) {\n var v = Cartesian3.subtract(\n intersectionPoint,\n this._origin,\n intersectionPoint\n );\n var x = Cartesian3.dot(this._xAxis, v);\n var y = Cartesian3.dot(this._yAxis, v);\n\n if (!defined(result)) {\n return new Cartesian2(x, y);\n }\n result.x = x;\n result.y = y;\n return result;\n }\n return undefined;\n};\n\n/**\n * Computes the projection of the provided 3D positions onto the 2D plane (where possible), radially outward from the global origin.\n * The resulting array may be shorter than the input array - if a single projection is impossible it will not be included.\n *\n * @see EllipsoidTangentPlane.projectPointOntoPlane\n *\n * @param {Cartesian3[]} cartesians The array of points to project.\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointsOntoPlane = function (\n cartesians,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = [];\n }\n\n var count = 0;\n var length = cartesians.length;\n for (var i = 0; i < length; i++) {\n var p = this.projectPointOntoPlane(cartesians[i], result[count]);\n if (defined(p)) {\n result[count] = p;\n count++;\n }\n }\n result.length = count;\n return result;\n};\n\n/**\n * Computes the projection of the provided 3D position onto the 2D plane, along the plane normal.\n *\n * @param {Cartesian3} cartesian The point to project.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointToNearestOnPlane = function (\n cartesian,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n var ray = scratchProjectPointOntoPlaneRay;\n ray.origin = cartesian;\n Cartesian3.clone(this._plane.normal, ray.direction);\n\n var intersectionPoint = IntersectionTests.rayPlane(\n ray,\n this._plane,\n scratchProjectPointOntoPlaneCartesian3\n );\n if (!defined(intersectionPoint)) {\n Cartesian3.negate(ray.direction, ray.direction);\n intersectionPoint = IntersectionTests.rayPlane(\n ray,\n this._plane,\n scratchProjectPointOntoPlaneCartesian3\n );\n }\n\n var v = Cartesian3.subtract(\n intersectionPoint,\n this._origin,\n intersectionPoint\n );\n var x = Cartesian3.dot(this._xAxis, v);\n var y = Cartesian3.dot(this._yAxis, v);\n\n result.x = x;\n result.y = y;\n return result;\n};\n\n/**\n * Computes the projection of the provided 3D positions onto the 2D plane, along the plane normal.\n *\n * @see EllipsoidTangentPlane.projectPointToNearestOnPlane\n *\n * @param {Cartesian3[]} cartesians The array of points to project.\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided. This will have the same length as <code>cartesians</code>.\n */\nEllipsoidTangentPlane.prototype.projectPointsToNearestOnPlane = function (\n cartesians,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = [];\n }\n\n var length = cartesians.length;\n result.length = length;\n for (var i = 0; i < length; i++) {\n result[i] = this.projectPointToNearestOnPlane(cartesians[i], result[i]);\n }\n return result;\n};\n\nvar projectPointsOntoEllipsoidScratch = new Cartesian3();\n/**\n * Computes the projection of the provided 2D position onto the 3D ellipsoid.\n *\n * @param {Cartesian2} cartesian The points to project.\n * @param {Cartesian3} [result] The Cartesian3 instance to store result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointOntoEllipsoid = function (\n cartesian,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n var ellipsoid = this._ellipsoid;\n var origin = this._origin;\n var xAxis = this._xAxis;\n var yAxis = this._yAxis;\n var tmp = projectPointsOntoEllipsoidScratch;\n\n Cartesian3.multiplyByScalar(xAxis, cartesian.x, tmp);\n result = Cartesian3.add(origin, tmp, result);\n Cartesian3.multiplyByScalar(yAxis, cartesian.y, tmp);\n Cartesian3.add(result, tmp, result);\n ellipsoid.scaleToGeocentricSurface(result, result);\n\n return result;\n};\n\n/**\n * Computes the projection of the provided 2D positions onto the 3D ellipsoid.\n *\n * @param {Cartesian2[]} cartesians The array of points to project.\n * @param {Cartesian3[]} [result] The array of Cartesian3 instances onto which to store results.\n * @returns {Cartesian3[]} The modified result parameter or a new array of Cartesian3 instances if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointsOntoEllipsoid = function (\n cartesians,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n //>>includeEnd('debug');\n\n var length = cartesians.length;\n if (!defined(result)) {\n result = new Array(length);\n } else {\n result.length = length;\n }\n\n for (var i = 0; i < length; ++i) {\n result[i] = this.projectPointOntoEllipsoid(cartesians[i], result[i]);\n }\n\n return result;\n};\nexport default EllipsoidTangentPlane;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Intersect from \"./Intersect.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Plane from \"./Plane.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Creates an instance of an OrientedBoundingBox.\n * An OrientedBoundingBox of some object is a closed and convex cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases.\n * @alias OrientedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\n * Equivalently, the transformation matrix, to rotate and scale a 0x0x0\n * cube centered at the origin.\n *\n *\n * @example\n * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale.\n * var center = new Cesium.Cartesian3(1.0, 0.0, 0.0);\n * var halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3());\n *\n * var obb = new Cesium.OrientedBoundingBox(center, halfAxes);\n *\n * @see BoundingSphere\n * @see BoundingRectangle\n */\nfunction OrientedBoundingBox(center, halfAxes) {\n /**\n * The center of the box.\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.center = Cartesian3.clone(defaultValue(center, Cartesian3.ZERO));\n /**\n * The transformation matrix, to rotate the box to the right position.\n * @type {Matrix3}\n * @default {@link Matrix3.ZERO}\n */\n this.halfAxes = Matrix3.clone(defaultValue(halfAxes, Matrix3.ZERO));\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nOrientedBoundingBox.packedLength =\n Cartesian3.packedLength + Matrix3.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrientedBoundingBox} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nOrientedBoundingBox.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value.center, array, startingIndex);\n Matrix3.pack(value.halfAxes, array, startingIndex + Cartesian3.packedLength);\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrientedBoundingBox} [result] The object into which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n Cartesian3.unpack(array, startingIndex, result.center);\n Matrix3.unpack(\n array,\n startingIndex + Cartesian3.packedLength,\n result.halfAxes\n );\n return result;\n};\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartesian4 = new Cartesian3();\nvar scratchCartesian5 = new Cartesian3();\nvar scratchCartesian6 = new Cartesian3();\nvar scratchCovarianceResult = new Matrix3();\nvar scratchEigenResult = {\n unitary: new Matrix3(),\n diagonal: new Matrix3(),\n};\n\n/**\n * Computes an instance of an OrientedBoundingBox of the given positions.\n * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis).\n * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf\n *\n * @param {Cartesian3[]} [positions] List of {@link Cartesian3} points that the bounding box will enclose.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an object oriented bounding box enclosing two points.\n * var box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\n */\nOrientedBoundingBox.fromPoints = function (positions, result) {\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.halfAxes = Matrix3.ZERO;\n result.center = Cartesian3.ZERO;\n return result;\n }\n\n var i;\n var length = positions.length;\n\n var meanPoint = Cartesian3.clone(positions[0], scratchCartesian1);\n for (i = 1; i < length; i++) {\n Cartesian3.add(meanPoint, positions[i], meanPoint);\n }\n var invLength = 1.0 / length;\n Cartesian3.multiplyByScalar(meanPoint, invLength, meanPoint);\n\n var exx = 0.0;\n var exy = 0.0;\n var exz = 0.0;\n var eyy = 0.0;\n var eyz = 0.0;\n var ezz = 0.0;\n var p;\n\n for (i = 0; i < length; i++) {\n p = Cartesian3.subtract(positions[i], meanPoint, scratchCartesian2);\n exx += p.x * p.x;\n exy += p.x * p.y;\n exz += p.x * p.z;\n eyy += p.y * p.y;\n eyz += p.y * p.z;\n ezz += p.z * p.z;\n }\n\n exx *= invLength;\n exy *= invLength;\n exz *= invLength;\n eyy *= invLength;\n eyz *= invLength;\n ezz *= invLength;\n\n var covarianceMatrix = scratchCovarianceResult;\n covarianceMatrix[0] = exx;\n covarianceMatrix[1] = exy;\n covarianceMatrix[2] = exz;\n covarianceMatrix[3] = exy;\n covarianceMatrix[4] = eyy;\n covarianceMatrix[5] = eyz;\n covarianceMatrix[6] = exz;\n covarianceMatrix[7] = eyz;\n covarianceMatrix[8] = ezz;\n\n var eigenDecomposition = Matrix3.computeEigenDecomposition(\n covarianceMatrix,\n scratchEigenResult\n );\n var rotation = Matrix3.clone(eigenDecomposition.unitary, result.halfAxes);\n\n var v1 = Matrix3.getColumn(rotation, 0, scratchCartesian4);\n var v2 = Matrix3.getColumn(rotation, 1, scratchCartesian5);\n var v3 = Matrix3.getColumn(rotation, 2, scratchCartesian6);\n\n var u1 = -Number.MAX_VALUE;\n var u2 = -Number.MAX_VALUE;\n var u3 = -Number.MAX_VALUE;\n var l1 = Number.MAX_VALUE;\n var l2 = Number.MAX_VALUE;\n var l3 = Number.MAX_VALUE;\n\n for (i = 0; i < length; i++) {\n p = positions[i];\n u1 = Math.max(Cartesian3.dot(v1, p), u1);\n u2 = Math.max(Cartesian3.dot(v2, p), u2);\n u3 = Math.max(Cartesian3.dot(v3, p), u3);\n\n l1 = Math.min(Cartesian3.dot(v1, p), l1);\n l2 = Math.min(Cartesian3.dot(v2, p), l2);\n l3 = Math.min(Cartesian3.dot(v3, p), l3);\n }\n\n v1 = Cartesian3.multiplyByScalar(v1, 0.5 * (l1 + u1), v1);\n v2 = Cartesian3.multiplyByScalar(v2, 0.5 * (l2 + u2), v2);\n v3 = Cartesian3.multiplyByScalar(v3, 0.5 * (l3 + u3), v3);\n\n var center = Cartesian3.add(v1, v2, result.center);\n Cartesian3.add(center, v3, center);\n\n var scale = scratchCartesian3;\n scale.x = u1 - l1;\n scale.y = u2 - l2;\n scale.z = u3 - l3;\n Cartesian3.multiplyByScalar(scale, 0.5, scale);\n Matrix3.multiplyByScale(result.halfAxes, scale, result.halfAxes);\n\n return result;\n};\n\nvar scratchOffset = new Cartesian3();\nvar scratchScale = new Cartesian3();\nfunction fromPlaneExtents(\n planeOrigin,\n planeXAxis,\n planeYAxis,\n planeZAxis,\n minimumX,\n maximumX,\n minimumY,\n maximumY,\n minimumZ,\n maximumZ,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(minimumX) ||\n !defined(maximumX) ||\n !defined(minimumY) ||\n !defined(maximumY) ||\n !defined(minimumZ) ||\n !defined(maximumZ)\n ) {\n throw new DeveloperError(\n \"all extents (minimum/maximum X/Y/Z) are required.\"\n );\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new OrientedBoundingBox();\n }\n\n var halfAxes = result.halfAxes;\n Matrix3.setColumn(halfAxes, 0, planeXAxis, halfAxes);\n Matrix3.setColumn(halfAxes, 1, planeYAxis, halfAxes);\n Matrix3.setColumn(halfAxes, 2, planeZAxis, halfAxes);\n\n var centerOffset = scratchOffset;\n centerOffset.x = (minimumX + maximumX) / 2.0;\n centerOffset.y = (minimumY + maximumY) / 2.0;\n centerOffset.z = (minimumZ + maximumZ) / 2.0;\n\n var scale = scratchScale;\n scale.x = (maximumX - minimumX) / 2.0;\n scale.y = (maximumY - minimumY) / 2.0;\n scale.z = (maximumZ - minimumZ) / 2.0;\n\n var center = result.center;\n centerOffset = Matrix3.multiplyByVector(halfAxes, centerOffset, centerOffset);\n Cartesian3.add(planeOrigin, centerOffset, center);\n Matrix3.multiplyByScale(halfAxes, scale, halfAxes);\n\n return result;\n}\n\nvar scratchRectangleCenterCartographic = new Cartographic();\nvar scratchRectangleCenter = new Cartesian3();\nvar scratchPerimeterCartographicNC = new Cartographic();\nvar scratchPerimeterCartographicNW = new Cartographic();\nvar scratchPerimeterCartographicCW = new Cartographic();\nvar scratchPerimeterCartographicSW = new Cartographic();\nvar scratchPerimeterCartographicSC = new Cartographic();\nvar scratchPerimeterCartesianNC = new Cartesian3();\nvar scratchPerimeterCartesianNW = new Cartesian3();\nvar scratchPerimeterCartesianCW = new Cartesian3();\nvar scratchPerimeterCartesianSW = new Cartesian3();\nvar scratchPerimeterCartesianSC = new Cartesian3();\nvar scratchPerimeterProjectedNC = new Cartesian2();\nvar scratchPerimeterProjectedNW = new Cartesian2();\nvar scratchPerimeterProjectedCW = new Cartesian2();\nvar scratchPerimeterProjectedSW = new Cartesian2();\nvar scratchPerimeterProjectedSC = new Cartesian2();\n\nvar scratchPlaneOrigin = new Cartesian3();\nvar scratchPlaneNormal = new Cartesian3();\nvar scratchPlaneXAxis = new Cartesian3();\nvar scratchHorizonCartesian = new Cartesian3();\nvar scratchHorizonProjected = new Cartesian2();\nvar scratchMaxY = new Cartesian3();\nvar scratchMinY = new Cartesian3();\nvar scratchZ = new Cartesian3();\nvar scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\n\n/**\n * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}.\n * There are no guarantees about the orientation of the bounding box.\n *\n * @param {Rectangle} rectangle The cartographic rectangle on the surface of the ellipsoid.\n * @param {Number} [minimumHeight=0.0] The minimum height (elevation) within the tile.\n * @param {Number} [maximumHeight=0.0] The maximum height (elevation) within the tile.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle is defined.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\n *\n * @exception {DeveloperError} rectangle.width must be between 0 and pi.\n * @exception {DeveloperError} rectangle.height must be between 0 and pi.\n * @exception {DeveloperError} ellipsoid must be an ellipsoid of revolution (<code>radii.x == radii.y</code>)\n */\nOrientedBoundingBox.fromRectangle = function (\n rectangle,\n minimumHeight,\n maximumHeight,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(rectangle)) {\n throw new DeveloperError(\"rectangle is required\");\n }\n if (rectangle.width < 0.0 || rectangle.width > CesiumMath.TWO_PI) {\n throw new DeveloperError(\"Rectangle width must be between 0 and 2*pi\");\n }\n if (rectangle.height < 0.0 || rectangle.height > CesiumMath.PI) {\n throw new DeveloperError(\"Rectangle height must be between 0 and pi\");\n }\n if (\n defined(ellipsoid) &&\n !CesiumMath.equalsEpsilon(\n ellipsoid.radii.x,\n ellipsoid.radii.y,\n CesiumMath.EPSILON15\n )\n ) {\n throw new DeveloperError(\n \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\"\n );\n }\n //>>includeEnd('debug');\n\n minimumHeight = defaultValue(minimumHeight, 0.0);\n maximumHeight = defaultValue(maximumHeight, 0.0);\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var minX, maxX, minY, maxY, minZ, maxZ, plane;\n\n if (rectangle.width <= CesiumMath.PI) {\n // The bounding box will be aligned with the tangent plane at the center of the rectangle.\n var tangentPointCartographic = Rectangle.center(\n rectangle,\n scratchRectangleCenterCartographic\n );\n var tangentPoint = ellipsoid.cartographicToCartesian(\n tangentPointCartographic,\n scratchRectangleCenter\n );\n var tangentPlane = new EllipsoidTangentPlane(tangentPoint, ellipsoid);\n plane = tangentPlane.plane;\n\n // If the rectangle spans the equator, CW is instead aligned with the equator (because it sticks out the farthest at the equator).\n var lonCenter = tangentPointCartographic.longitude;\n var latCenter =\n rectangle.south < 0.0 && rectangle.north > 0.0\n ? 0.0\n : tangentPointCartographic.latitude;\n\n // Compute XY extents using the rectangle at maximum height\n var perimeterCartographicNC = Cartographic.fromRadians(\n lonCenter,\n rectangle.north,\n maximumHeight,\n scratchPerimeterCartographicNC\n );\n var perimeterCartographicNW = Cartographic.fromRadians(\n rectangle.west,\n rectangle.north,\n maximumHeight,\n scratchPerimeterCartographicNW\n );\n var perimeterCartographicCW = Cartographic.fromRadians(\n rectangle.west,\n latCenter,\n maximumHeight,\n scratchPerimeterCartographicCW\n );\n var perimeterCartographicSW = Cartographic.fromRadians(\n rectangle.west,\n rectangle.south,\n maximumHeight,\n scratchPerimeterCartographicSW\n );\n var perimeterCartographicSC = Cartographic.fromRadians(\n lonCenter,\n rectangle.south,\n maximumHeight,\n scratchPerimeterCartographicSC\n );\n\n var perimeterCartesianNC = ellipsoid.cartographicToCartesian(\n perimeterCartographicNC,\n scratchPerimeterCartesianNC\n );\n var perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n perimeterCartographicNW,\n scratchPerimeterCartesianNW\n );\n var perimeterCartesianCW = ellipsoid.cartographicToCartesian(\n perimeterCartographicCW,\n scratchPerimeterCartesianCW\n );\n var perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n perimeterCartographicSW,\n scratchPerimeterCartesianSW\n );\n var perimeterCartesianSC = ellipsoid.cartographicToCartesian(\n perimeterCartographicSC,\n scratchPerimeterCartesianSC\n );\n\n var perimeterProjectedNC = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianNC,\n scratchPerimeterProjectedNC\n );\n var perimeterProjectedNW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianNW,\n scratchPerimeterProjectedNW\n );\n var perimeterProjectedCW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianCW,\n scratchPerimeterProjectedCW\n );\n var perimeterProjectedSW = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianSW,\n scratchPerimeterProjectedSW\n );\n var perimeterProjectedSC = tangentPlane.projectPointToNearestOnPlane(\n perimeterCartesianSC,\n scratchPerimeterProjectedSC\n );\n\n minX = Math.min(\n perimeterProjectedNW.x,\n perimeterProjectedCW.x,\n perimeterProjectedSW.x\n );\n maxX = -minX; // symmetrical\n\n maxY = Math.max(perimeterProjectedNW.y, perimeterProjectedNC.y);\n minY = Math.min(perimeterProjectedSW.y, perimeterProjectedSC.y);\n\n // Compute minimum Z using the rectangle at minimum height, since it will be deeper than the maximum height\n perimeterCartographicNW.height = perimeterCartographicSW.height = minimumHeight;\n perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n perimeterCartographicNW,\n scratchPerimeterCartesianNW\n );\n perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n perimeterCartographicSW,\n scratchPerimeterCartesianSW\n );\n\n minZ = Math.min(\n Plane.getPointDistance(plane, perimeterCartesianNW),\n Plane.getPointDistance(plane, perimeterCartesianSW)\n );\n maxZ = maximumHeight; // Since the tangent plane touches the surface at height = 0, this is okay\n\n return fromPlaneExtents(\n tangentPlane.origin,\n tangentPlane.xAxis,\n tangentPlane.yAxis,\n tangentPlane.zAxis,\n minX,\n maxX,\n minY,\n maxY,\n minZ,\n maxZ,\n result\n );\n }\n\n // Handle the case where rectangle width is greater than PI (wraps around more than half the ellipsoid).\n var fullyAboveEquator = rectangle.south > 0.0;\n var fullyBelowEquator = rectangle.north < 0.0;\n var latitudeNearestToEquator = fullyAboveEquator\n ? rectangle.south\n : fullyBelowEquator\n ? rectangle.north\n : 0.0;\n var centerLongitude = Rectangle.center(\n rectangle,\n scratchRectangleCenterCartographic\n ).longitude;\n\n // Plane is located at the rectangle's center longitude and the rectangle's latitude that is closest to the equator. It rotates around the Z axis.\n // This results in a better fit than the obb approach for smaller rectangles, which orients with the rectangle's center normal.\n var planeOrigin = Cartesian3.fromRadians(\n centerLongitude,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchPlaneOrigin\n );\n planeOrigin.z = 0.0; // center the plane on the equator to simpify plane normal calculation\n var isPole =\n Math.abs(planeOrigin.x) < CesiumMath.EPSILON10 &&\n Math.abs(planeOrigin.y) < CesiumMath.EPSILON10;\n var planeNormal = !isPole\n ? Cartesian3.normalize(planeOrigin, scratchPlaneNormal)\n : Cartesian3.UNIT_X;\n var planeYAxis = Cartesian3.UNIT_Z;\n var planeXAxis = Cartesian3.cross(planeNormal, planeYAxis, scratchPlaneXAxis);\n plane = Plane.fromPointNormal(planeOrigin, planeNormal, scratchPlane);\n\n // Get the horizon point relative to the center. This will be the farthest extent in the plane's X dimension.\n var horizonCartesian = Cartesian3.fromRadians(\n centerLongitude + CesiumMath.PI_OVER_TWO,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchHorizonCartesian\n );\n maxX = Cartesian3.dot(\n Plane.projectPointOntoPlane(\n plane,\n horizonCartesian,\n scratchHorizonProjected\n ),\n planeXAxis\n );\n minX = -maxX; // symmetrical\n\n // Get the min and max Y, using the height that will give the largest extent\n maxY = Cartesian3.fromRadians(\n 0.0,\n rectangle.north,\n fullyBelowEquator ? minimumHeight : maximumHeight,\n ellipsoid,\n scratchMaxY\n ).z;\n minY = Cartesian3.fromRadians(\n 0.0,\n rectangle.south,\n fullyAboveEquator ? minimumHeight : maximumHeight,\n ellipsoid,\n scratchMinY\n ).z;\n\n var farZ = Cartesian3.fromRadians(\n rectangle.east,\n latitudeNearestToEquator,\n maximumHeight,\n ellipsoid,\n scratchZ\n );\n minZ = Plane.getPointDistance(plane, farZ);\n maxZ = 0.0; // plane origin starts at maxZ already\n\n // min and max are local to the plane axes\n return fromPlaneExtents(\n planeOrigin,\n planeXAxis,\n planeYAxis,\n planeNormal,\n minX,\n maxX,\n minY,\n maxY,\n minZ,\n maxZ,\n result\n );\n};\n\n/**\n * Duplicates a OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} box The bounding box to duplicate.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\n */\nOrientedBoundingBox.clone = function (box, result) {\n if (!defined(box)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new OrientedBoundingBox(box.center, box.halfAxes);\n }\n\n Cartesian3.clone(box.center, result.center);\n Matrix3.clone(box.halfAxes, result.halfAxes);\n\n return result;\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {OrientedBoundingBox} box The oriented bounding box to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nOrientedBoundingBox.intersectPlane = function (box, plane) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n\n if (!defined(plane)) {\n throw new DeveloperError(\"plane is required.\");\n }\n //>>includeEnd('debug');\n\n var center = box.center;\n var normal = plane.normal;\n var halfAxes = box.halfAxes;\n var normalX = normal.x,\n normalY = normal.y,\n normalZ = normal.z;\n // plane is used as if it is its normal; the first three components are assumed to be normalized\n var radEffective =\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN0ROW0] +\n normalY * halfAxes[Matrix3.COLUMN0ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN0ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN1ROW0] +\n normalY * halfAxes[Matrix3.COLUMN1ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN1ROW2]\n ) +\n Math.abs(\n normalX * halfAxes[Matrix3.COLUMN2ROW0] +\n normalY * halfAxes[Matrix3.COLUMN2ROW1] +\n normalZ * halfAxes[Matrix3.COLUMN2ROW2]\n );\n var distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\n\n if (distanceToPlane <= -radEffective) {\n // The entire box is on the negative side of the plane normal\n return Intersect.OUTSIDE;\n } else if (distanceToPlane >= radEffective) {\n // The entire box is on the positive side of the plane normal\n return Intersect.INSIDE;\n }\n return Intersect.INTERSECTING;\n};\n\nvar scratchCartesianU = new Cartesian3();\nvar scratchCartesianV = new Cartesian3();\nvar scratchCartesianW = new Cartesian3();\nvar scratchPPrime = new Cartesian3();\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {OrientedBoundingBox} box The box.\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n * return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC);\n * });\n */\nOrientedBoundingBox.distanceSquaredTo = function (box, cartesian) {\n // See Geometric Tools for Computer Graphics 10.4.2\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n var offset = Cartesian3.subtract(cartesian, box.center, scratchOffset);\n\n var halfAxes = box.halfAxes;\n var u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n var v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n var w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n var uHalf = Cartesian3.magnitude(u);\n var vHalf = Cartesian3.magnitude(v);\n var wHalf = Cartesian3.magnitude(w);\n\n Cartesian3.normalize(u, u);\n Cartesian3.normalize(v, v);\n Cartesian3.normalize(w, w);\n\n var pPrime = scratchPPrime;\n pPrime.x = Cartesian3.dot(offset, u);\n pPrime.y = Cartesian3.dot(offset, v);\n pPrime.z = Cartesian3.dot(offset, w);\n\n var distanceSquared = 0.0;\n var d;\n\n if (pPrime.x < -uHalf) {\n d = pPrime.x + uHalf;\n distanceSquared += d * d;\n } else if (pPrime.x > uHalf) {\n d = pPrime.x - uHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime.y < -vHalf) {\n d = pPrime.y + vHalf;\n distanceSquared += d * d;\n } else if (pPrime.y > vHalf) {\n d = pPrime.y - vHalf;\n distanceSquared += d * d;\n }\n\n if (pPrime.z < -wHalf) {\n d = pPrime.z + wHalf;\n distanceSquared += d * d;\n } else if (pPrime.z > wHalf) {\n d = pPrime.z - wHalf;\n distanceSquared += d * d;\n }\n\n return distanceSquared;\n};\n\nvar scratchCorner = new Cartesian3();\nvar scratchToCenter = new Cartesian3();\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {OrientedBoundingBox} box The bounding box to calculate the distance to.\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.computePlaneDistances = function (\n box,\n position,\n direction,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Interval();\n }\n\n var minDist = Number.POSITIVE_INFINITY;\n var maxDist = Number.NEGATIVE_INFINITY;\n\n var center = box.center;\n var halfAxes = box.halfAxes;\n\n var u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n var v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n var w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n // project first corner\n var corner = Cartesian3.add(u, v, scratchCorner);\n Cartesian3.add(corner, w, corner);\n Cartesian3.add(corner, center, corner);\n\n var toCenter = Cartesian3.subtract(corner, position, scratchToCenter);\n var mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project second corner\n Cartesian3.add(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project third corner\n Cartesian3.add(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fourth corner\n Cartesian3.add(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project fifth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project sixth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.add(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project seventh corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.add(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n // project eighth corner\n Cartesian3.subtract(center, u, corner);\n Cartesian3.subtract(corner, v, corner);\n Cartesian3.subtract(corner, w, corner);\n\n Cartesian3.subtract(corner, position, toCenter);\n mag = Cartesian3.dot(direction, toCenter);\n\n minDist = Math.min(mag, minDist);\n maxDist = Math.max(mag, maxDist);\n\n result.start = minDist;\n result.stop = maxDist;\n return result;\n};\n\nvar scratchBoundingSphere = new BoundingSphere();\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {OrientedBoundingBox} box The bounding box surrounding the occludee object.\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the box is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.isOccluded = function (box, occluder) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(box)) {\n throw new DeveloperError(\"box is required.\");\n }\n if (!defined(occluder)) {\n throw new DeveloperError(\"occluder is required.\");\n }\n //>>includeEnd('debug');\n\n var sphere = BoundingSphere.fromOrientedBoundingBox(\n box,\n scratchBoundingSphere\n );\n\n return !occluder.isBoundingSphereVisible(sphere);\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nOrientedBoundingBox.prototype.intersectPlane = function (plane) {\n return OrientedBoundingBox.intersectPlane(this, plane);\n};\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {Cartesian3} cartesian The point\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\n * });\n */\nOrientedBoundingBox.prototype.distanceSquaredTo = function (cartesian) {\n return OrientedBoundingBox.distanceSquaredTo(this, cartesian);\n};\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.prototype.computePlaneDistances = function (\n position,\n direction,\n result\n) {\n return OrientedBoundingBox.computePlaneDistances(\n this,\n position,\n direction,\n result\n );\n};\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {Occluder} occluder The occluder.\n * @returns {Boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.prototype.isOccluded = function (occluder) {\n return OrientedBoundingBox.isOccluded(this, occluder);\n};\n\n/**\n * Compares the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} left The first OrientedBoundingBox.\n * @param {OrientedBoundingBox} right The second OrientedBoundingBox.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Cartesian3.equals(left.center, right.center) &&\n Matrix3.equals(left.halfAxes, right.halfAxes))\n );\n};\n\n/**\n * Duplicates this OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.prototype.clone = function (result) {\n return OrientedBoundingBox.clone(this, result);\n};\n\n/**\n * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} [right] The right hand side OrientedBoundingBox.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.prototype.equals = function (right) {\n return OrientedBoundingBox.equals(this, right);\n};\nexport default OrientedBoundingBox;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\nvar RIGHT_SHIFT = 1.0 / 256.0;\nvar LEFT_SHIFT = 256.0;\n\n/**\n * Attribute compression and decompression functions.\n *\n * @namespace AttributeCompression\n *\n * @private\n */\nvar AttributeCompression = {};\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-rangeMax] following the 'oct' encoding.\n *\n * Oct encoding is a compact representation of unit length vectors.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: {@link http://jcgt.org/published/0003/02/01/}\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 component 'oct' encoding.\n * @param {Cartesian2} result The 2 component oct-encoded unit length vector.\n * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @returns {Cartesian2} The 2 component oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octDecodeInRange\n */\nAttributeCompression.octEncodeInRange = function (vector, rangeMax, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"vector\", vector);\n Check.defined(\"result\", result);\n var magSquared = Cartesian3.magnitudeSquared(vector);\n if (Math.abs(magSquared - 1.0) > CesiumMath.EPSILON6) {\n throw new DeveloperError(\"vector must be normalized.\");\n }\n //>>includeEnd('debug');\n\n result.x =\n vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n result.y =\n vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n if (vector.z < 0) {\n var x = result.x;\n var y = result.y;\n result.x = (1.0 - Math.abs(y)) * CesiumMath.signNotZero(x);\n result.y = (1.0 - Math.abs(x)) * CesiumMath.signNotZero(y);\n }\n\n result.x = CesiumMath.toSNorm(result.x, rangeMax);\n result.y = CesiumMath.toSNorm(result.y, rangeMax);\n\n return result;\n};\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding.\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @param {Cartesian2} result The 2 byte oct-encoded unit length vector.\n * @returns {Cartesian2} The 2 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octEncodeInRange\n * @see AttributeCompression.octDecode\n */\nAttributeCompression.octEncode = function (vector, result) {\n return AttributeCompression.octEncodeInRange(vector, 255, result);\n};\n\nvar octEncodeScratch = new Cartesian2();\nvar uint8ForceArray = new Uint8Array(1);\nfunction forceUint8(value) {\n uint8ForceArray[0] = value;\n return uint8ForceArray[0];\n}\n/**\n * @param {Cartesian3} vector The normalized vector to be compressed into 4 byte 'oct' encoding.\n * @param {Cartesian4} result The 4 byte oct-encoded unit length vector.\n * @returns {Cartesian4} The 4 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octEncodeInRange\n * @see AttributeCompression.octDecodeFromCartesian4\n */\nAttributeCompression.octEncodeToCartesian4 = function (vector, result) {\n AttributeCompression.octEncodeInRange(vector, 65535, octEncodeScratch);\n result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT);\n result.y = forceUint8(octEncodeScratch.x);\n result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT);\n result.w = forceUint8(octEncodeScratch.y);\n return result;\n};\n\n/**\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component vector.\n *\n * @param {Number} x The x component of the oct-encoded unit length vector.\n * @param {Number} y The y component of the oct-encoded unit length vector.\n * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @param {Cartesian3} result The decoded and normalized vector\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x and y must be unsigned normalized integers between 0 and rangeMax.\n *\n * @see AttributeCompression.octEncodeInRange\n */\nAttributeCompression.octDecodeInRange = function (x, y, rangeMax, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"result\", result);\n if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) {\n throw new DeveloperError(\n \"x and y must be unsigned normalized integers between 0 and \" + rangeMax\n );\n }\n //>>includeEnd('debug');\n\n result.x = CesiumMath.fromSNorm(x, rangeMax);\n result.y = CesiumMath.fromSNorm(y, rangeMax);\n result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y));\n\n if (result.z < 0.0) {\n var oldVX = result.x;\n result.x = (1.0 - Math.abs(result.y)) * CesiumMath.signNotZero(oldVX);\n result.y = (1.0 - Math.abs(oldVX)) * CesiumMath.signNotZero(result.y);\n }\n\n return Cartesian3.normalize(result, result);\n};\n\n/**\n * Decodes a unit-length vector in 2 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param {Number} x The x component of the oct-encoded unit length vector.\n * @param {Number} y The y component of the oct-encoded unit length vector.\n * @param {Cartesian3} result The decoded and normalized vector.\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x and y must be an unsigned normalized integer between 0 and 255.\n *\n * @see AttributeCompression.octDecodeInRange\n */\nAttributeCompression.octDecode = function (x, y, result) {\n return AttributeCompression.octDecodeInRange(x, y, 255, result);\n};\n\n/**\n * Decodes a unit-length vector in 4 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param {Cartesian4} encoded The oct-encoded unit length vector.\n * @param {Cartesian3} result The decoded and normalized vector.\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x, y, z, and w must be unsigned normalized integers between 0 and 255.\n *\n * @see AttributeCompression.octDecodeInRange\n * @see AttributeCompression.octEncodeToCartesian4\n */\nAttributeCompression.octDecodeFromCartesian4 = function (encoded, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"encoded\", encoded);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n var x = encoded.x;\n var y = encoded.y;\n var z = encoded.z;\n var w = encoded.w;\n //>>includeStart('debug', pragmas.debug);\n if (\n x < 0 ||\n x > 255 ||\n y < 0 ||\n y > 255 ||\n z < 0 ||\n z > 255 ||\n w < 0 ||\n w > 255\n ) {\n throw new DeveloperError(\n \"x, y, z, and w must be unsigned normalized integers between 0 and 255\"\n );\n }\n //>>includeEnd('debug');\n\n var xOct16 = x * LEFT_SHIFT + y;\n var yOct16 = z * LEFT_SHIFT + w;\n return AttributeCompression.octDecodeInRange(xOct16, yOct16, 65535, result);\n};\n\n/**\n * Packs an oct encoded vector into a single floating-point number.\n *\n * @param {Cartesian2} encoded The oct encoded vector.\n * @returns {Number} The oct encoded vector packed into a single float.\n *\n */\nAttributeCompression.octPackFloat = function (encoded) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"encoded\", encoded);\n //>>includeEnd('debug');\n return 256.0 * encoded.x + encoded.y;\n};\n\nvar scratchEncodeCart2 = new Cartesian2();\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding and\n * stores those values in a single float-point number.\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @returns {Number} The 2 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n */\nAttributeCompression.octEncodeFloat = function (vector) {\n AttributeCompression.octEncode(vector, scratchEncodeCart2);\n return AttributeCompression.octPackFloat(scratchEncodeCart2);\n};\n\n/**\n * Decodes a unit-length vector in 'oct' encoding packed in a floating-point number to a normalized 3-component vector.\n *\n * @param {Number} value The oct-encoded unit length vector stored as a single floating-point number.\n * @param {Cartesian3} result The decoded and normalized vector\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n */\nAttributeCompression.octDecodeFloat = function (value, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n\n var temp = value / 256.0;\n var x = Math.floor(temp);\n var y = (temp - x) * 256.0;\n\n return AttributeCompression.octDecode(x, y, result);\n};\n\n/**\n * Encodes three normalized vectors into 6 SNORM values in the range of [0-255] following the 'oct' encoding and\n * packs those into two floating-point numbers.\n *\n * @param {Cartesian3} v1 A normalized vector to be compressed.\n * @param {Cartesian3} v2 A normalized vector to be compressed.\n * @param {Cartesian3} v3 A normalized vector to be compressed.\n * @param {Cartesian2} result The 'oct' encoded vectors packed into two floating-point numbers.\n * @returns {Cartesian2} The 'oct' encoded vectors packed into two floating-point numbers.\n *\n */\nAttributeCompression.octPack = function (v1, v2, v3, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"v1\", v1);\n Check.defined(\"v2\", v2);\n Check.defined(\"v3\", v3);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n var encoded1 = AttributeCompression.octEncodeFloat(v1);\n var encoded2 = AttributeCompression.octEncodeFloat(v2);\n\n var encoded3 = AttributeCompression.octEncode(v3, scratchEncodeCart2);\n result.x = 65536.0 * encoded3.x + encoded1;\n result.y = 65536.0 * encoded3.y + encoded2;\n return result;\n};\n\n/**\n * Decodes three unit-length vectors in 'oct' encoding packed into a floating-point number to a normalized 3-component vector.\n *\n * @param {Cartesian2} packed The three oct-encoded unit length vectors stored as two floating-point number.\n * @param {Cartesian3} v1 One decoded and normalized vector.\n * @param {Cartesian3} v2 One decoded and normalized vector.\n * @param {Cartesian3} v3 One decoded and normalized vector.\n */\nAttributeCompression.octUnpack = function (packed, v1, v2, v3) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"packed\", packed);\n Check.defined(\"v1\", v1);\n Check.defined(\"v2\", v2);\n Check.defined(\"v3\", v3);\n //>>includeEnd('debug');\n\n var temp = packed.x / 65536.0;\n var x = Math.floor(temp);\n var encodedFloat1 = (temp - x) * 65536.0;\n\n temp = packed.y / 65536.0;\n var y = Math.floor(temp);\n var encodedFloat2 = (temp - y) * 65536.0;\n\n AttributeCompression.octDecodeFloat(encodedFloat1, v1);\n AttributeCompression.octDecodeFloat(encodedFloat2, v2);\n AttributeCompression.octDecode(x, y, v3);\n};\n\n/**\n * Pack texture coordinates into a single float. The texture coordinates will only preserve 12 bits of precision.\n *\n * @param {Cartesian2} textureCoordinates The texture coordinates to compress. Both coordinates must be in the range 0.0-1.0.\n * @returns {Number} The packed texture coordinates.\n *\n */\nAttributeCompression.compressTextureCoordinates = function (\n textureCoordinates\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"textureCoordinates\", textureCoordinates);\n //>>includeEnd('debug');\n\n // Move x and y to the range 0-4095;\n var x = (textureCoordinates.x * 4095.0) | 0;\n var y = (textureCoordinates.y * 4095.0) | 0;\n return 4096.0 * x + y;\n};\n\n/**\n * Decompresses texture coordinates that were packed into a single float.\n *\n * @param {Number} compressed The compressed texture coordinates.\n * @param {Cartesian2} result The decompressed texture coordinates.\n * @returns {Cartesian2} The modified result parameter.\n *\n */\nAttributeCompression.decompressTextureCoordinates = function (\n compressed,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"compressed\", compressed);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n var temp = compressed / 4096.0;\n var xZeroTo4095 = Math.floor(temp);\n result.x = xZeroTo4095 / 4095.0;\n result.y = (compressed - xZeroTo4095 * 4096) / 4095;\n return result;\n};\n\nfunction zigZagDecode(value) {\n return (value >> 1) ^ -(value & 1);\n}\n\n/**\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\n *\n * @param {Uint16Array} uBuffer The buffer view of u values.\n * @param {Uint16Array} vBuffer The buffer view of v values.\n * @param {Uint16Array} [heightBuffer] The buffer view of height values.\n *\n * @see {@link https://github.com/CesiumGS/quantized-mesh|quantized-mesh-1.0 terrain format}\n */\nAttributeCompression.zigZagDeltaDecode = function (\n uBuffer,\n vBuffer,\n heightBuffer\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"uBuffer\", uBuffer);\n Check.defined(\"vBuffer\", vBuffer);\n Check.typeOf.number.equals(\n \"uBuffer.length\",\n \"vBuffer.length\",\n uBuffer.length,\n vBuffer.length\n );\n if (defined(heightBuffer)) {\n Check.typeOf.number.equals(\n \"uBuffer.length\",\n \"heightBuffer.length\",\n uBuffer.length,\n heightBuffer.length\n );\n }\n //>>includeEnd('debug');\n\n var count = uBuffer.length;\n\n var u = 0;\n var v = 0;\n var height = 0;\n\n for (var i = 0; i < count; ++i) {\n u += zigZagDecode(uBuffer[i]);\n v += zigZagDecode(vBuffer[i]);\n\n uBuffer[i] = u;\n vBuffer[i] = v;\n\n if (defined(heightBuffer)) {\n height += zigZagDecode(heightBuffer[i]);\n heightBuffer[i] = height;\n }\n }\n};\nexport default AttributeCompression;\n","/**\n * Enum containing WebGL Constant values by name.\n * for use without an active WebGL context, or in cases where certain constants are unavailable using the WebGL context\n * (For example, in [Safari 9]{@link https://github.com/CesiumGS/cesium/issues/2989}).\n *\n * These match the constants from the [WebGL 1.0]{@link https://www.khronos.org/registry/webgl/specs/latest/1.0/}\n * and [WebGL 2.0]{@link https://www.khronos.org/registry/webgl/specs/latest/2.0/}\n * specifications.\n *\n * @enum {Number}\n */\nvar WebGLConstants = {\n DEPTH_BUFFER_BIT: 0x00000100,\n STENCIL_BUFFER_BIT: 0x00000400,\n COLOR_BUFFER_BIT: 0x00004000,\n POINTS: 0x0000,\n LINES: 0x0001,\n LINE_LOOP: 0x0002,\n LINE_STRIP: 0x0003,\n TRIANGLES: 0x0004,\n TRIANGLE_STRIP: 0x0005,\n TRIANGLE_FAN: 0x0006,\n ZERO: 0,\n ONE: 1,\n SRC_COLOR: 0x0300,\n ONE_MINUS_SRC_COLOR: 0x0301,\n SRC_ALPHA: 0x0302,\n ONE_MINUS_SRC_ALPHA: 0x0303,\n DST_ALPHA: 0x0304,\n ONE_MINUS_DST_ALPHA: 0x0305,\n DST_COLOR: 0x0306,\n ONE_MINUS_DST_COLOR: 0x0307,\n SRC_ALPHA_SATURATE: 0x0308,\n FUNC_ADD: 0x8006,\n BLEND_EQUATION: 0x8009,\n BLEND_EQUATION_RGB: 0x8009, // same as BLEND_EQUATION\n BLEND_EQUATION_ALPHA: 0x883d,\n FUNC_SUBTRACT: 0x800a,\n FUNC_REVERSE_SUBTRACT: 0x800b,\n BLEND_DST_RGB: 0x80c8,\n BLEND_SRC_RGB: 0x80c9,\n BLEND_DST_ALPHA: 0x80ca,\n BLEND_SRC_ALPHA: 0x80cb,\n CONSTANT_COLOR: 0x8001,\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\n CONSTANT_ALPHA: 0x8003,\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n BLEND_COLOR: 0x8005,\n ARRAY_BUFFER: 0x8892,\n ELEMENT_ARRAY_BUFFER: 0x8893,\n ARRAY_BUFFER_BINDING: 0x8894,\n ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\n STREAM_DRAW: 0x88e0,\n STATIC_DRAW: 0x88e4,\n DYNAMIC_DRAW: 0x88e8,\n BUFFER_SIZE: 0x8764,\n BUFFER_USAGE: 0x8765,\n CURRENT_VERTEX_ATTRIB: 0x8626,\n FRONT: 0x0404,\n BACK: 0x0405,\n FRONT_AND_BACK: 0x0408,\n CULL_FACE: 0x0b44,\n BLEND: 0x0be2,\n DITHER: 0x0bd0,\n STENCIL_TEST: 0x0b90,\n DEPTH_TEST: 0x0b71,\n SCISSOR_TEST: 0x0c11,\n POLYGON_OFFSET_FILL: 0x8037,\n SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\n SAMPLE_COVERAGE: 0x80a0,\n NO_ERROR: 0,\n INVALID_ENUM: 0x0500,\n INVALID_VALUE: 0x0501,\n INVALID_OPERATION: 0x0502,\n OUT_OF_MEMORY: 0x0505,\n CW: 0x0900,\n CCW: 0x0901,\n LINE_WIDTH: 0x0b21,\n ALIASED_POINT_SIZE_RANGE: 0x846d,\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\n CULL_FACE_MODE: 0x0b45,\n FRONT_FACE: 0x0b46,\n DEPTH_RANGE: 0x0b70,\n DEPTH_WRITEMASK: 0x0b72,\n DEPTH_CLEAR_VALUE: 0x0b73,\n DEPTH_FUNC: 0x0b74,\n STENCIL_CLEAR_VALUE: 0x0b91,\n STENCIL_FUNC: 0x0b92,\n STENCIL_FAIL: 0x0b94,\n STENCIL_PASS_DEPTH_FAIL: 0x0b95,\n STENCIL_PASS_DEPTH_PASS: 0x0b96,\n STENCIL_REF: 0x0b97,\n STENCIL_VALUE_MASK: 0x0b93,\n STENCIL_WRITEMASK: 0x0b98,\n STENCIL_BACK_FUNC: 0x8800,\n STENCIL_BACK_FAIL: 0x8801,\n STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,\n STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,\n STENCIL_BACK_REF: 0x8ca3,\n STENCIL_BACK_VALUE_MASK: 0x8ca4,\n STENCIL_BACK_WRITEMASK: 0x8ca5,\n VIEWPORT: 0x0ba2,\n SCISSOR_BOX: 0x0c10,\n COLOR_CLEAR_VALUE: 0x0c22,\n COLOR_WRITEMASK: 0x0c23,\n UNPACK_ALIGNMENT: 0x0cf5,\n PACK_ALIGNMENT: 0x0d05,\n MAX_TEXTURE_SIZE: 0x0d33,\n MAX_VIEWPORT_DIMS: 0x0d3a,\n SUBPIXEL_BITS: 0x0d50,\n RED_BITS: 0x0d52,\n GREEN_BITS: 0x0d53,\n BLUE_BITS: 0x0d54,\n ALPHA_BITS: 0x0d55,\n DEPTH_BITS: 0x0d56,\n STENCIL_BITS: 0x0d57,\n POLYGON_OFFSET_UNITS: 0x2a00,\n POLYGON_OFFSET_FACTOR: 0x8038,\n TEXTURE_BINDING_2D: 0x8069,\n SAMPLE_BUFFERS: 0x80a8,\n SAMPLES: 0x80a9,\n SAMPLE_COVERAGE_VALUE: 0x80aa,\n SAMPLE_COVERAGE_INVERT: 0x80ab,\n COMPRESSED_TEXTURE_FORMATS: 0x86a3,\n DONT_CARE: 0x1100,\n FASTEST: 0x1101,\n NICEST: 0x1102,\n GENERATE_MIPMAP_HINT: 0x8192,\n BYTE: 0x1400,\n UNSIGNED_BYTE: 0x1401,\n SHORT: 0x1402,\n UNSIGNED_SHORT: 0x1403,\n INT: 0x1404,\n UNSIGNED_INT: 0x1405,\n FLOAT: 0x1406,\n DEPTH_COMPONENT: 0x1902,\n ALPHA: 0x1906,\n RGB: 0x1907,\n RGBA: 0x1908,\n LUMINANCE: 0x1909,\n LUMINANCE_ALPHA: 0x190a,\n UNSIGNED_SHORT_4_4_4_4: 0x8033,\n UNSIGNED_SHORT_5_5_5_1: 0x8034,\n UNSIGNED_SHORT_5_6_5: 0x8363,\n FRAGMENT_SHADER: 0x8b30,\n VERTEX_SHADER: 0x8b31,\n MAX_VERTEX_ATTRIBS: 0x8869,\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n MAX_VARYING_VECTORS: 0x8dfc,\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n SHADER_TYPE: 0x8b4f,\n DELETE_STATUS: 0x8b80,\n LINK_STATUS: 0x8b82,\n VALIDATE_STATUS: 0x8b83,\n ATTACHED_SHADERS: 0x8b85,\n ACTIVE_UNIFORMS: 0x8b86,\n ACTIVE_ATTRIBUTES: 0x8b89,\n SHADING_LANGUAGE_VERSION: 0x8b8c,\n CURRENT_PROGRAM: 0x8b8d,\n NEVER: 0x0200,\n LESS: 0x0201,\n EQUAL: 0x0202,\n LEQUAL: 0x0203,\n GREATER: 0x0204,\n NOTEQUAL: 0x0205,\n GEQUAL: 0x0206,\n ALWAYS: 0x0207,\n KEEP: 0x1e00,\n REPLACE: 0x1e01,\n INCR: 0x1e02,\n DECR: 0x1e03,\n INVERT: 0x150a,\n INCR_WRAP: 0x8507,\n DECR_WRAP: 0x8508,\n VENDOR: 0x1f00,\n RENDERER: 0x1f01,\n VERSION: 0x1f02,\n NEAREST: 0x2600,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_NEAREST: 0x2700,\n LINEAR_MIPMAP_NEAREST: 0x2701,\n NEAREST_MIPMAP_LINEAR: 0x2702,\n LINEAR_MIPMAP_LINEAR: 0x2703,\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n TEXTURE_2D: 0x0de1,\n TEXTURE: 0x1702,\n TEXTURE_CUBE_MAP: 0x8513,\n TEXTURE_BINDING_CUBE_MAP: 0x8514,\n TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\n TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\n TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\n TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\n TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\n TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\n MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\n TEXTURE0: 0x84c0,\n TEXTURE1: 0x84c1,\n TEXTURE2: 0x84c2,\n TEXTURE3: 0x84c3,\n TEXTURE4: 0x84c4,\n TEXTURE5: 0x84c5,\n TEXTURE6: 0x84c6,\n TEXTURE7: 0x84c7,\n TEXTURE8: 0x84c8,\n TEXTURE9: 0x84c9,\n TEXTURE10: 0x84ca,\n TEXTURE11: 0x84cb,\n TEXTURE12: 0x84cc,\n TEXTURE13: 0x84cd,\n TEXTURE14: 0x84ce,\n TEXTURE15: 0x84cf,\n TEXTURE16: 0x84d0,\n TEXTURE17: 0x84d1,\n TEXTURE18: 0x84d2,\n TEXTURE19: 0x84d3,\n TEXTURE20: 0x84d4,\n TEXTURE21: 0x84d5,\n TEXTURE22: 0x84d6,\n TEXTURE23: 0x84d7,\n TEXTURE24: 0x84d8,\n TEXTURE25: 0x84d9,\n TEXTURE26: 0x84da,\n TEXTURE27: 0x84db,\n TEXTURE28: 0x84dc,\n TEXTURE29: 0x84dd,\n TEXTURE30: 0x84de,\n TEXTURE31: 0x84df,\n ACTIVE_TEXTURE: 0x84e0,\n REPEAT: 0x2901,\n CLAMP_TO_EDGE: 0x812f,\n MIRRORED_REPEAT: 0x8370,\n FLOAT_VEC2: 0x8b50,\n FLOAT_VEC3: 0x8b51,\n FLOAT_VEC4: 0x8b52,\n INT_VEC2: 0x8b53,\n INT_VEC3: 0x8b54,\n INT_VEC4: 0x8b55,\n BOOL: 0x8b56,\n BOOL_VEC2: 0x8b57,\n BOOL_VEC3: 0x8b58,\n BOOL_VEC4: 0x8b59,\n FLOAT_MAT2: 0x8b5a,\n FLOAT_MAT3: 0x8b5b,\n FLOAT_MAT4: 0x8b5c,\n SAMPLER_2D: 0x8b5e,\n SAMPLER_CUBE: 0x8b60,\n VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,\n VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,\n VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,\n VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,\n VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,\n VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,\n IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\n IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\n COMPILE_STATUS: 0x8b81,\n LOW_FLOAT: 0x8df0,\n MEDIUM_FLOAT: 0x8df1,\n HIGH_FLOAT: 0x8df2,\n LOW_INT: 0x8df3,\n MEDIUM_INT: 0x8df4,\n HIGH_INT: 0x8df5,\n FRAMEBUFFER: 0x8d40,\n RENDERBUFFER: 0x8d41,\n RGBA4: 0x8056,\n RGB5_A1: 0x8057,\n RGB565: 0x8d62,\n DEPTH_COMPONENT16: 0x81a5,\n STENCIL_INDEX: 0x1901,\n STENCIL_INDEX8: 0x8d48,\n DEPTH_STENCIL: 0x84f9,\n RENDERBUFFER_WIDTH: 0x8d42,\n RENDERBUFFER_HEIGHT: 0x8d43,\n RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\n RENDERBUFFER_RED_SIZE: 0x8d50,\n RENDERBUFFER_GREEN_SIZE: 0x8d51,\n RENDERBUFFER_BLUE_SIZE: 0x8d52,\n RENDERBUFFER_ALPHA_SIZE: 0x8d53,\n RENDERBUFFER_DEPTH_SIZE: 0x8d54,\n RENDERBUFFER_STENCIL_SIZE: 0x8d55,\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\n COLOR_ATTACHMENT0: 0x8ce0,\n DEPTH_ATTACHMENT: 0x8d00,\n STENCIL_ATTACHMENT: 0x8d20,\n DEPTH_STENCIL_ATTACHMENT: 0x821a,\n NONE: 0,\n FRAMEBUFFER_COMPLETE: 0x8cd5,\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\n FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\n FRAMEBUFFER_BINDING: 0x8ca6,\n RENDERBUFFER_BINDING: 0x8ca7,\n MAX_RENDERBUFFER_SIZE: 0x84e8,\n INVALID_FRAMEBUFFER_OPERATION: 0x0506,\n UNPACK_FLIP_Y_WEBGL: 0x9240,\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\n CONTEXT_LOST_WEBGL: 0x9242,\n UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\n BROWSER_DEFAULT_WEBGL: 0x9244,\n\n // WEBGL_compressed_texture_s3tc\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n\n // WEBGL_compressed_texture_pvrtc\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n\n // WEBGL_compressed_texture_etc1\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n\n // EXT_color_buffer_half_float\n HALF_FLOAT_OES: 0x8d61,\n\n // Desktop OpenGL\n DOUBLE: 0x140a,\n\n // WebGL 2\n READ_BUFFER: 0x0c02,\n UNPACK_ROW_LENGTH: 0x0cf2,\n UNPACK_SKIP_ROWS: 0x0cf3,\n UNPACK_SKIP_PIXELS: 0x0cf4,\n PACK_ROW_LENGTH: 0x0d02,\n PACK_SKIP_ROWS: 0x0d03,\n PACK_SKIP_PIXELS: 0x0d04,\n COLOR: 0x1800,\n DEPTH: 0x1801,\n STENCIL: 0x1802,\n RED: 0x1903,\n RGB8: 0x8051,\n RGBA8: 0x8058,\n RGB10_A2: 0x8059,\n TEXTURE_BINDING_3D: 0x806a,\n UNPACK_SKIP_IMAGES: 0x806d,\n UNPACK_IMAGE_HEIGHT: 0x806e,\n TEXTURE_3D: 0x806f,\n TEXTURE_WRAP_R: 0x8072,\n MAX_3D_TEXTURE_SIZE: 0x8073,\n UNSIGNED_INT_2_10_10_10_REV: 0x8368,\n MAX_ELEMENTS_VERTICES: 0x80e8,\n MAX_ELEMENTS_INDICES: 0x80e9,\n TEXTURE_MIN_LOD: 0x813a,\n TEXTURE_MAX_LOD: 0x813b,\n TEXTURE_BASE_LEVEL: 0x813c,\n TEXTURE_MAX_LEVEL: 0x813d,\n MIN: 0x8007,\n MAX: 0x8008,\n DEPTH_COMPONENT24: 0x81a6,\n MAX_TEXTURE_LOD_BIAS: 0x84fd,\n TEXTURE_COMPARE_MODE: 0x884c,\n TEXTURE_COMPARE_FUNC: 0x884d,\n CURRENT_QUERY: 0x8865,\n QUERY_RESULT: 0x8866,\n QUERY_RESULT_AVAILABLE: 0x8867,\n STREAM_READ: 0x88e1,\n STREAM_COPY: 0x88e2,\n STATIC_READ: 0x88e5,\n STATIC_COPY: 0x88e6,\n DYNAMIC_READ: 0x88e9,\n DYNAMIC_COPY: 0x88ea,\n MAX_DRAW_BUFFERS: 0x8824,\n DRAW_BUFFER0: 0x8825,\n DRAW_BUFFER1: 0x8826,\n DRAW_BUFFER2: 0x8827,\n DRAW_BUFFER3: 0x8828,\n DRAW_BUFFER4: 0x8829,\n DRAW_BUFFER5: 0x882a,\n DRAW_BUFFER6: 0x882b,\n DRAW_BUFFER7: 0x882c,\n DRAW_BUFFER8: 0x882d,\n DRAW_BUFFER9: 0x882e,\n DRAW_BUFFER10: 0x882f,\n DRAW_BUFFER11: 0x8830,\n DRAW_BUFFER12: 0x8831,\n DRAW_BUFFER13: 0x8832,\n DRAW_BUFFER14: 0x8833,\n DRAW_BUFFER15: 0x8834,\n MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\n MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\n SAMPLER_3D: 0x8b5f,\n SAMPLER_2D_SHADOW: 0x8b62,\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n PIXEL_PACK_BUFFER: 0x88eb,\n PIXEL_UNPACK_BUFFER: 0x88ec,\n PIXEL_PACK_BUFFER_BINDING: 0x88ed,\n PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,\n FLOAT_MAT2x3: 0x8b65,\n FLOAT_MAT2x4: 0x8b66,\n FLOAT_MAT3x2: 0x8b67,\n FLOAT_MAT3x4: 0x8b68,\n FLOAT_MAT4x2: 0x8b69,\n FLOAT_MAT4x3: 0x8b6a,\n SRGB: 0x8c40,\n SRGB8: 0x8c41,\n SRGB8_ALPHA8: 0x8c43,\n COMPARE_REF_TO_TEXTURE: 0x884e,\n RGBA32F: 0x8814,\n RGB32F: 0x8815,\n RGBA16F: 0x881a,\n RGB16F: 0x881b,\n VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\n MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\n MAX_VARYING_COMPONENTS: 0x8b4b,\n TEXTURE_2D_ARRAY: 0x8c1a,\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n R11F_G11F_B10F: 0x8c3a,\n UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,\n RGB9_E5: 0x8c3d,\n UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,\n TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,\n TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n RASTERIZER_DISCARD: 0x8c89,\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,\n INTERLEAVED_ATTRIBS: 0x8c8c,\n SEPARATE_ATTRIBS: 0x8c8d,\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n RGBA32UI: 0x8d70,\n RGB32UI: 0x8d71,\n RGBA16UI: 0x8d76,\n RGB16UI: 0x8d77,\n RGBA8UI: 0x8d7c,\n RGB8UI: 0x8d7d,\n RGBA32I: 0x8d82,\n RGB32I: 0x8d83,\n RGBA16I: 0x8d88,\n RGB16I: 0x8d89,\n RGBA8I: 0x8d8e,\n RGB8I: 0x8d8f,\n RED_INTEGER: 0x8d94,\n RGB_INTEGER: 0x8d98,\n RGBA_INTEGER: 0x8d99,\n SAMPLER_2D_ARRAY: 0x8dc1,\n SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,\n SAMPLER_CUBE_SHADOW: 0x8dc5,\n UNSIGNED_INT_VEC2: 0x8dc6,\n UNSIGNED_INT_VEC3: 0x8dc7,\n UNSIGNED_INT_VEC4: 0x8dc8,\n INT_SAMPLER_2D: 0x8dca,\n INT_SAMPLER_3D: 0x8dcb,\n INT_SAMPLER_CUBE: 0x8dcc,\n INT_SAMPLER_2D_ARRAY: 0x8dcf,\n UNSIGNED_INT_SAMPLER_2D: 0x8dd2,\n UNSIGNED_INT_SAMPLER_3D: 0x8dd3,\n UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,\n DEPTH_COMPONENT32F: 0x8cac,\n DEPTH32F_STENCIL8: 0x8cad,\n FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,\n FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,\n FRAMEBUFFER_DEFAULT: 0x8218,\n UNSIGNED_INT_24_8: 0x84fa,\n DEPTH24_STENCIL8: 0x88f0,\n UNSIGNED_NORMALIZED: 0x8c17,\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6, // Same as FRAMEBUFFER_BINDING\n READ_FRAMEBUFFER: 0x8ca8,\n DRAW_FRAMEBUFFER: 0x8ca9,\n READ_FRAMEBUFFER_BINDING: 0x8caa,\n RENDERBUFFER_SAMPLES: 0x8cab,\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\n COLOR_ATTACHMENT1: 0x8ce1,\n COLOR_ATTACHMENT2: 0x8ce2,\n COLOR_ATTACHMENT3: 0x8ce3,\n COLOR_ATTACHMENT4: 0x8ce4,\n COLOR_ATTACHMENT5: 0x8ce5,\n COLOR_ATTACHMENT6: 0x8ce6,\n COLOR_ATTACHMENT7: 0x8ce7,\n COLOR_ATTACHMENT8: 0x8ce8,\n COLOR_ATTACHMENT9: 0x8ce9,\n COLOR_ATTACHMENT10: 0x8cea,\n COLOR_ATTACHMENT11: 0x8ceb,\n COLOR_ATTACHMENT12: 0x8cec,\n COLOR_ATTACHMENT13: 0x8ced,\n COLOR_ATTACHMENT14: 0x8cee,\n COLOR_ATTACHMENT15: 0x8cef,\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,\n MAX_SAMPLES: 0x8d57,\n HALF_FLOAT: 0x140b,\n RG: 0x8227,\n RG_INTEGER: 0x8228,\n R8: 0x8229,\n RG8: 0x822b,\n R16F: 0x822d,\n R32F: 0x822e,\n RG16F: 0x822f,\n RG32F: 0x8230,\n R8I: 0x8231,\n R8UI: 0x8232,\n R16I: 0x8233,\n R16UI: 0x8234,\n R32I: 0x8235,\n R32UI: 0x8236,\n RG8I: 0x8237,\n RG8UI: 0x8238,\n RG16I: 0x8239,\n RG16UI: 0x823a,\n RG32I: 0x823b,\n RG32UI: 0x823c,\n VERTEX_ARRAY_BINDING: 0x85b5,\n R8_SNORM: 0x8f94,\n RG8_SNORM: 0x8f95,\n RGB8_SNORM: 0x8f96,\n RGBA8_SNORM: 0x8f97,\n SIGNED_NORMALIZED: 0x8f9c,\n COPY_READ_BUFFER: 0x8f36,\n COPY_WRITE_BUFFER: 0x8f37,\n COPY_READ_BUFFER_BINDING: 0x8f36, // Same as COPY_READ_BUFFER\n COPY_WRITE_BUFFER_BINDING: 0x8f37, // Same as COPY_WRITE_BUFFER\n UNIFORM_BUFFER: 0x8a11,\n UNIFORM_BUFFER_BINDING: 0x8a28,\n UNIFORM_BUFFER_START: 0x8a29,\n UNIFORM_BUFFER_SIZE: 0x8a2a,\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n UNIFORM_TYPE: 0x8a37,\n UNIFORM_SIZE: 0x8a38,\n UNIFORM_BLOCK_INDEX: 0x8a3a,\n UNIFORM_OFFSET: 0x8a3b,\n UNIFORM_ARRAY_STRIDE: 0x8a3c,\n UNIFORM_MATRIX_STRIDE: 0x8a3d,\n UNIFORM_IS_ROW_MAJOR: 0x8a3e,\n UNIFORM_BLOCK_BINDING: 0x8a3f,\n UNIFORM_BLOCK_DATA_SIZE: 0x8a40,\n UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,\n INVALID_INDEX: 0xffffffff,\n MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,\n MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,\n MAX_SERVER_WAIT_TIMEOUT: 0x9111,\n OBJECT_TYPE: 0x9112,\n SYNC_CONDITION: 0x9113,\n SYNC_STATUS: 0x9114,\n SYNC_FLAGS: 0x9115,\n SYNC_FENCE: 0x9116,\n SYNC_GPU_COMMANDS_COMPLETE: 0x9117,\n UNSIGNALED: 0x9118,\n SIGNALED: 0x9119,\n ALREADY_SIGNALED: 0x911a,\n TIMEOUT_EXPIRED: 0x911b,\n CONDITION_SATISFIED: 0x911c,\n WAIT_FAILED: 0x911d,\n SYNC_FLUSH_COMMANDS_BIT: 0x00000001,\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n ANY_SAMPLES_PASSED: 0x8c2f,\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n SAMPLER_BINDING: 0x8919,\n RGB10_A2UI: 0x906f,\n INT_2_10_10_10_REV: 0x8d9f,\n TRANSFORM_FEEDBACK: 0x8e22,\n TRANSFORM_FEEDBACK_PAUSED: 0x8e23,\n TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,\n TRANSFORM_FEEDBACK_BINDING: 0x8e25,\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_SRGB8_ETC2: 0x9275,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9278,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279,\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n MAX_ELEMENT_INDEX: 0x8d6b,\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n\n // Extensions\n MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\n};\nexport default Object.freeze(WebGLConstants);\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * WebGL component datatypes. Components are intrinsics,\n * which form attributes, which form vertices.\n *\n * @enum {Number}\n */\nvar ComponentDatatype = {\n /**\n * 8-bit signed byte corresponding to <code>gl.BYTE</code> and the type\n * of an element in <code>Int8Array</code>.\n *\n * @type {Number}\n * @constant\n */\n BYTE: WebGLConstants.BYTE,\n\n /**\n * 8-bit unsigned byte corresponding to <code>UNSIGNED_BYTE</code> and the type\n * of an element in <code>Uint8Array</code>.\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n\n /**\n * 16-bit signed short corresponding to <code>SHORT</code> and the type\n * of an element in <code>Int16Array</code>.\n *\n * @type {Number}\n * @constant\n */\n SHORT: WebGLConstants.SHORT,\n\n /**\n * 16-bit unsigned short corresponding to <code>UNSIGNED_SHORT</code> and the type\n * of an element in <code>Uint16Array</code>.\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n\n /**\n * 32-bit signed int corresponding to <code>INT</code> and the type\n * of an element in <code>Int32Array</code>.\n *\n * @memberOf ComponentDatatype\n *\n * @type {Number}\n * @constant\n */\n INT: WebGLConstants.INT,\n\n /**\n * 32-bit unsigned int corresponding to <code>UNSIGNED_INT</code> and the type\n * of an element in <code>Uint32Array</code>.\n *\n * @memberOf ComponentDatatype\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n\n /**\n * 32-bit floating-point corresponding to <code>FLOAT</code> and the type\n * of an element in <code>Float32Array</code>.\n *\n * @type {Number}\n * @constant\n */\n FLOAT: WebGLConstants.FLOAT,\n\n /**\n * 64-bit floating-point corresponding to <code>gl.DOUBLE</code> (in Desktop OpenGL;\n * this is not supported in WebGL, and is emulated in Cesium via {@link GeometryPipeline.encodeAttribute})\n * and the type of an element in <code>Float64Array</code>.\n *\n * @memberOf ComponentDatatype\n *\n * @type {Number}\n * @constant\n * @default 0x140A\n */\n DOUBLE: WebGLConstants.DOUBLE,\n};\n\n/**\n * Returns the size, in bytes, of the corresponding datatype.\n *\n * @param {ComponentDatatype} componentDatatype The component datatype to get the size of.\n * @returns {Number} The size in bytes.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n *\n * @example\n * // Returns Int8Array.BYTES_PER_ELEMENT\n * var size = Cesium.ComponentDatatype.getSizeInBytes(Cesium.ComponentDatatype.BYTE);\n */\nComponentDatatype.getSizeInBytes = function (componentDatatype) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(componentDatatype)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n switch (componentDatatype) {\n case ComponentDatatype.BYTE:\n return Int8Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.UNSIGNED_BYTE:\n return Uint8Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.SHORT:\n return Int16Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.UNSIGNED_SHORT:\n return Uint16Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.INT:\n return Int32Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.UNSIGNED_INT:\n return Uint32Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.FLOAT:\n return Float32Array.BYTES_PER_ELEMENT;\n case ComponentDatatype.DOUBLE:\n return Float64Array.BYTES_PER_ELEMENT;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\n //>>includeEnd('debug');\n }\n};\n\n/**\n * Gets the {@link ComponentDatatype} for the provided TypedArray instance.\n *\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The typed array.\n * @returns {ComponentDatatype} The ComponentDatatype for the provided array, or undefined if the array is not a TypedArray.\n */\nComponentDatatype.fromTypedArray = function (array) {\n if (array instanceof Int8Array) {\n return ComponentDatatype.BYTE;\n }\n if (array instanceof Uint8Array) {\n return ComponentDatatype.UNSIGNED_BYTE;\n }\n if (array instanceof Int16Array) {\n return ComponentDatatype.SHORT;\n }\n if (array instanceof Uint16Array) {\n return ComponentDatatype.UNSIGNED_SHORT;\n }\n if (array instanceof Int32Array) {\n return ComponentDatatype.INT;\n }\n if (array instanceof Uint32Array) {\n return ComponentDatatype.UNSIGNED_INT;\n }\n if (array instanceof Float32Array) {\n return ComponentDatatype.FLOAT;\n }\n if (array instanceof Float64Array) {\n return ComponentDatatype.DOUBLE;\n }\n};\n\n/**\n * Validates that the provided component datatype is a valid {@link ComponentDatatype}\n *\n * @param {ComponentDatatype} componentDatatype The component datatype to validate.\n * @returns {Boolean} <code>true</code> if the provided component datatype is a valid value; otherwise, <code>false</code>.\n *\n * @example\n * if (!Cesium.ComponentDatatype.validate(componentDatatype)) {\n * throw new Cesium.DeveloperError('componentDatatype must be a valid value.');\n * }\n */\nComponentDatatype.validate = function (componentDatatype) {\n return (\n defined(componentDatatype) &&\n (componentDatatype === ComponentDatatype.BYTE ||\n componentDatatype === ComponentDatatype.UNSIGNED_BYTE ||\n componentDatatype === ComponentDatatype.SHORT ||\n componentDatatype === ComponentDatatype.UNSIGNED_SHORT ||\n componentDatatype === ComponentDatatype.INT ||\n componentDatatype === ComponentDatatype.UNSIGNED_INT ||\n componentDatatype === ComponentDatatype.FLOAT ||\n componentDatatype === ComponentDatatype.DOUBLE)\n );\n};\n\n/**\n * Creates a typed array corresponding to component data type.\n *\n * @param {ComponentDatatype} componentDatatype The component data type.\n * @param {Number|Array} valuesOrLength The length of the array to create or an array.\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n *\n * @example\n * // creates a Float32Array with length of 100\n * var typedArray = Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, 100);\n */\nComponentDatatype.createTypedArray = function (\n componentDatatype,\n valuesOrLength\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(componentDatatype)) {\n throw new DeveloperError(\"componentDatatype is required.\");\n }\n if (!defined(valuesOrLength)) {\n throw new DeveloperError(\"valuesOrLength is required.\");\n }\n //>>includeEnd('debug');\n\n switch (componentDatatype) {\n case ComponentDatatype.BYTE:\n return new Int8Array(valuesOrLength);\n case ComponentDatatype.UNSIGNED_BYTE:\n return new Uint8Array(valuesOrLength);\n case ComponentDatatype.SHORT:\n return new Int16Array(valuesOrLength);\n case ComponentDatatype.UNSIGNED_SHORT:\n return new Uint16Array(valuesOrLength);\n case ComponentDatatype.INT:\n return new Int32Array(valuesOrLength);\n case ComponentDatatype.UNSIGNED_INT:\n return new Uint32Array(valuesOrLength);\n case ComponentDatatype.FLOAT:\n return new Float32Array(valuesOrLength);\n case ComponentDatatype.DOUBLE:\n return new Float64Array(valuesOrLength);\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\n //>>includeEnd('debug');\n }\n};\n\n/**\n * Creates a typed view of an array of bytes.\n *\n * @param {ComponentDatatype} componentDatatype The type of the view to create.\n * @param {ArrayBuffer} buffer The buffer storage to use for the view.\n * @param {Number} [byteOffset] The offset, in bytes, to the first element in the view.\n * @param {Number} [length] The number of elements in the view.\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array view of the buffer.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n */\nComponentDatatype.createArrayBufferView = function (\n componentDatatype,\n buffer,\n byteOffset,\n length\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(componentDatatype)) {\n throw new DeveloperError(\"componentDatatype is required.\");\n }\n if (!defined(buffer)) {\n throw new DeveloperError(\"buffer is required.\");\n }\n //>>includeEnd('debug');\n\n byteOffset = defaultValue(byteOffset, 0);\n length = defaultValue(\n length,\n (buffer.byteLength - byteOffset) /\n ComponentDatatype.getSizeInBytes(componentDatatype)\n );\n\n switch (componentDatatype) {\n case ComponentDatatype.BYTE:\n return new Int8Array(buffer, byteOffset, length);\n case ComponentDatatype.UNSIGNED_BYTE:\n return new Uint8Array(buffer, byteOffset, length);\n case ComponentDatatype.SHORT:\n return new Int16Array(buffer, byteOffset, length);\n case ComponentDatatype.UNSIGNED_SHORT:\n return new Uint16Array(buffer, byteOffset, length);\n case ComponentDatatype.INT:\n return new Int32Array(buffer, byteOffset, length);\n case ComponentDatatype.UNSIGNED_INT:\n return new Uint32Array(buffer, byteOffset, length);\n case ComponentDatatype.FLOAT:\n return new Float32Array(buffer, byteOffset, length);\n case ComponentDatatype.DOUBLE:\n return new Float64Array(buffer, byteOffset, length);\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\n //>>includeEnd('debug');\n }\n};\n\n/**\n * Get the ComponentDatatype from its name.\n *\n * @param {String} name The name of the ComponentDatatype.\n * @returns {ComponentDatatype} The ComponentDatatype.\n *\n * @exception {DeveloperError} name is not a valid value.\n */\nComponentDatatype.fromName = function (name) {\n switch (name) {\n case \"BYTE\":\n return ComponentDatatype.BYTE;\n case \"UNSIGNED_BYTE\":\n return ComponentDatatype.UNSIGNED_BYTE;\n case \"SHORT\":\n return ComponentDatatype.SHORT;\n case \"UNSIGNED_SHORT\":\n return ComponentDatatype.UNSIGNED_SHORT;\n case \"INT\":\n return ComponentDatatype.INT;\n case \"UNSIGNED_INT\":\n return ComponentDatatype.UNSIGNED_INT;\n case \"FLOAT\":\n return ComponentDatatype.FLOAT;\n case \"DOUBLE\":\n return ComponentDatatype.DOUBLE;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\"name is not a valid value.\");\n //>>includeEnd('debug');\n }\n};\nexport default Object.freeze(ComponentDatatype);\n","/**\n * This enumerated type is used to determine how the vertices of the terrain mesh are compressed.\n *\n * @enum {Number}\n *\n * @private\n */\nvar TerrainQuantization = {\n /**\n * The vertices are not compressed.\n *\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * The vertices are compressed to 12 bits.\n *\n * @type {Number}\n * @constant\n */\n BITS12: 1,\n};\nexport default Object.freeze(TerrainQuantization);\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport TerrainQuantization from \"./TerrainQuantization.js\";\n\nvar cartesian3Scratch = new Cartesian3();\nvar cartesian3DimScratch = new Cartesian3();\nvar cartesian2Scratch = new Cartesian2();\nvar matrix4Scratch = new Matrix4();\nvar matrix4Scratch2 = new Matrix4();\n\nvar SHIFT_LEFT_12 = Math.pow(2.0, 12.0);\n\n/**\n * Data used to quantize and pack the terrain mesh. The position can be unpacked for picking and all attributes\n * are unpacked in the vertex shader.\n *\n * @alias TerrainEncoding\n * @constructor\n *\n * @param {AxisAlignedBoundingBox} axisAlignedBoundingBox The bounds of the tile in the east-north-up coordinates at the tiles center.\n * @param {Number} minimumHeight The minimum height.\n * @param {Number} maximumHeight The maximum height.\n * @param {Matrix4} fromENU The east-north-up to fixed frame matrix at the center of the terrain mesh.\n * @param {Boolean} hasVertexNormals If the mesh has vertex normals.\n * @param {Boolean} [hasWebMercatorT=false] true if the terrain data includes a Web Mercator texture coordinate; otherwise, false.\n *\n * @private\n */\nfunction TerrainEncoding(\n axisAlignedBoundingBox,\n minimumHeight,\n maximumHeight,\n fromENU,\n hasVertexNormals,\n hasWebMercatorT\n) {\n var quantization = TerrainQuantization.NONE;\n var center;\n var toENU;\n var matrix;\n\n if (\n defined(axisAlignedBoundingBox) &&\n defined(minimumHeight) &&\n defined(maximumHeight) &&\n defined(fromENU)\n ) {\n var minimum = axisAlignedBoundingBox.minimum;\n var maximum = axisAlignedBoundingBox.maximum;\n\n var dimensions = Cartesian3.subtract(\n maximum,\n minimum,\n cartesian3DimScratch\n );\n var hDim = maximumHeight - minimumHeight;\n var maxDim = Math.max(Cartesian3.maximumComponent(dimensions), hDim);\n\n if (maxDim < SHIFT_LEFT_12 - 1.0) {\n quantization = TerrainQuantization.BITS12;\n } else {\n quantization = TerrainQuantization.NONE;\n }\n\n center = axisAlignedBoundingBox.center;\n toENU = Matrix4.inverseTransformation(fromENU, new Matrix4());\n\n var translation = Cartesian3.negate(minimum, cartesian3Scratch);\n Matrix4.multiply(\n Matrix4.fromTranslation(translation, matrix4Scratch),\n toENU,\n toENU\n );\n\n var scale = cartesian3Scratch;\n scale.x = 1.0 / dimensions.x;\n scale.y = 1.0 / dimensions.y;\n scale.z = 1.0 / dimensions.z;\n Matrix4.multiply(Matrix4.fromScale(scale, matrix4Scratch), toENU, toENU);\n\n matrix = Matrix4.clone(fromENU);\n Matrix4.setTranslation(matrix, Cartesian3.ZERO, matrix);\n\n fromENU = Matrix4.clone(fromENU, new Matrix4());\n\n var translationMatrix = Matrix4.fromTranslation(minimum, matrix4Scratch);\n var scaleMatrix = Matrix4.fromScale(dimensions, matrix4Scratch2);\n var st = Matrix4.multiply(translationMatrix, scaleMatrix, matrix4Scratch);\n\n Matrix4.multiply(fromENU, st, fromENU);\n Matrix4.multiply(matrix, st, matrix);\n }\n\n /**\n * How the vertices of the mesh were compressed.\n * @type {TerrainQuantization}\n */\n this.quantization = quantization;\n\n /**\n * The minimum height of the tile including the skirts.\n * @type {Number}\n */\n this.minimumHeight = minimumHeight;\n\n /**\n * The maximum height of the tile.\n * @type {Number}\n */\n this.maximumHeight = maximumHeight;\n\n /**\n * The center of the tile.\n * @type {Cartesian3}\n */\n this.center = center;\n\n /**\n * A matrix that takes a vertex from the tile, transforms it to east-north-up at the center and scales\n * it so each component is in the [0, 1] range.\n * @type {Matrix4}\n */\n this.toScaledENU = toENU;\n\n /**\n * A matrix that restores a vertex transformed with toScaledENU back to the earth fixed reference frame\n * @type {Matrix4}\n */\n this.fromScaledENU = fromENU;\n\n /**\n * The matrix used to decompress the terrain vertices in the shader for RTE rendering.\n * @type {Matrix4}\n */\n this.matrix = matrix;\n\n /**\n * The terrain mesh contains normals.\n * @type {Boolean}\n */\n this.hasVertexNormals = hasVertexNormals;\n\n /**\n * The terrain mesh contains a vertical texture coordinate following the Web Mercator projection.\n * @type {Boolean}\n */\n this.hasWebMercatorT = defaultValue(hasWebMercatorT, false);\n}\n\nTerrainEncoding.prototype.encode = function (\n vertexBuffer,\n bufferIndex,\n position,\n uv,\n height,\n normalToPack,\n webMercatorT\n) {\n var u = uv.x;\n var v = uv.y;\n\n if (this.quantization === TerrainQuantization.BITS12) {\n position = Matrix4.multiplyByPoint(\n this.toScaledENU,\n position,\n cartesian3Scratch\n );\n\n position.x = CesiumMath.clamp(position.x, 0.0, 1.0);\n position.y = CesiumMath.clamp(position.y, 0.0, 1.0);\n position.z = CesiumMath.clamp(position.z, 0.0, 1.0);\n\n var hDim = this.maximumHeight - this.minimumHeight;\n var h = CesiumMath.clamp((height - this.minimumHeight) / hDim, 0.0, 1.0);\n\n Cartesian2.fromElements(position.x, position.y, cartesian2Scratch);\n var compressed0 = AttributeCompression.compressTextureCoordinates(\n cartesian2Scratch\n );\n\n Cartesian2.fromElements(position.z, h, cartesian2Scratch);\n var compressed1 = AttributeCompression.compressTextureCoordinates(\n cartesian2Scratch\n );\n\n Cartesian2.fromElements(u, v, cartesian2Scratch);\n var compressed2 = AttributeCompression.compressTextureCoordinates(\n cartesian2Scratch\n );\n\n vertexBuffer[bufferIndex++] = compressed0;\n vertexBuffer[bufferIndex++] = compressed1;\n vertexBuffer[bufferIndex++] = compressed2;\n\n if (this.hasWebMercatorT) {\n Cartesian2.fromElements(webMercatorT, 0.0, cartesian2Scratch);\n var compressed3 = AttributeCompression.compressTextureCoordinates(\n cartesian2Scratch\n );\n vertexBuffer[bufferIndex++] = compressed3;\n }\n } else {\n Cartesian3.subtract(position, this.center, cartesian3Scratch);\n\n vertexBuffer[bufferIndex++] = cartesian3Scratch.x;\n vertexBuffer[bufferIndex++] = cartesian3Scratch.y;\n vertexBuffer[bufferIndex++] = cartesian3Scratch.z;\n vertexBuffer[bufferIndex++] = height;\n vertexBuffer[bufferIndex++] = u;\n vertexBuffer[bufferIndex++] = v;\n\n if (this.hasWebMercatorT) {\n vertexBuffer[bufferIndex++] = webMercatorT;\n }\n }\n\n if (this.hasVertexNormals) {\n vertexBuffer[bufferIndex++] = AttributeCompression.octPackFloat(\n normalToPack\n );\n }\n\n return bufferIndex;\n};\n\nTerrainEncoding.prototype.decodePosition = function (buffer, index, result) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n index *= this.getStride();\n\n if (this.quantization === TerrainQuantization.BITS12) {\n var xy = AttributeCompression.decompressTextureCoordinates(\n buffer[index],\n cartesian2Scratch\n );\n result.x = xy.x;\n result.y = xy.y;\n\n var zh = AttributeCompression.decompressTextureCoordinates(\n buffer[index + 1],\n cartesian2Scratch\n );\n result.z = zh.x;\n\n return Matrix4.multiplyByPoint(this.fromScaledENU, result, result);\n }\n\n result.x = buffer[index];\n result.y = buffer[index + 1];\n result.z = buffer[index + 2];\n return Cartesian3.add(result, this.center, result);\n};\n\nTerrainEncoding.prototype.decodeTextureCoordinates = function (\n buffer,\n index,\n result\n) {\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n index *= this.getStride();\n\n if (this.quantization === TerrainQuantization.BITS12) {\n return AttributeCompression.decompressTextureCoordinates(\n buffer[index + 2],\n result\n );\n }\n\n return Cartesian2.fromElements(buffer[index + 4], buffer[index + 5], result);\n};\n\nTerrainEncoding.prototype.decodeHeight = function (buffer, index) {\n index *= this.getStride();\n\n if (this.quantization === TerrainQuantization.BITS12) {\n var zh = AttributeCompression.decompressTextureCoordinates(\n buffer[index + 1],\n cartesian2Scratch\n );\n return (\n zh.y * (this.maximumHeight - this.minimumHeight) + this.minimumHeight\n );\n }\n\n return buffer[index + 3];\n};\n\nTerrainEncoding.prototype.decodeWebMercatorT = function (buffer, index) {\n index *= this.getStride();\n\n if (this.quantization === TerrainQuantization.BITS12) {\n return AttributeCompression.decompressTextureCoordinates(\n buffer[index + 3],\n cartesian2Scratch\n ).x;\n }\n\n return buffer[index + 6];\n};\n\nTerrainEncoding.prototype.getOctEncodedNormal = function (\n buffer,\n index,\n result\n) {\n var stride = this.getStride();\n index = (index + 1) * stride - 1;\n\n var temp = buffer[index] / 256.0;\n var x = Math.floor(temp);\n var y = (temp - x) * 256.0;\n\n return Cartesian2.fromElements(x, y, result);\n};\n\nTerrainEncoding.prototype.getStride = function () {\n var vertexStride;\n\n switch (this.quantization) {\n case TerrainQuantization.BITS12:\n vertexStride = 3;\n break;\n default:\n vertexStride = 6;\n }\n\n if (this.hasWebMercatorT) {\n ++vertexStride;\n }\n\n if (this.hasVertexNormals) {\n ++vertexStride;\n }\n\n return vertexStride;\n};\n\nvar attributesNone = {\n position3DAndHeight: 0,\n textureCoordAndEncodedNormals: 1,\n};\nvar attributes = {\n compressed0: 0,\n compressed1: 1,\n};\n\nTerrainEncoding.prototype.getAttributes = function (buffer) {\n var datatype = ComponentDatatype.FLOAT;\n var sizeInBytes = ComponentDatatype.getSizeInBytes(datatype);\n var stride;\n\n if (this.quantization === TerrainQuantization.NONE) {\n var position3DAndHeightLength = 4;\n var numTexCoordComponents = 2;\n\n if (this.hasWebMercatorT) {\n ++numTexCoordComponents;\n }\n\n if (this.hasVertexNormals) {\n ++numTexCoordComponents;\n }\n\n stride = (position3DAndHeightLength + numTexCoordComponents) * sizeInBytes;\n\n return [\n {\n index: attributesNone.position3DAndHeight,\n vertexBuffer: buffer,\n componentDatatype: datatype,\n componentsPerAttribute: position3DAndHeightLength,\n offsetInBytes: 0,\n strideInBytes: stride,\n },\n {\n index: attributesNone.textureCoordAndEncodedNormals,\n vertexBuffer: buffer,\n componentDatatype: datatype,\n componentsPerAttribute: numTexCoordComponents,\n offsetInBytes: position3DAndHeightLength * sizeInBytes,\n strideInBytes: stride,\n },\n ];\n }\n\n var numCompressed0 = 3;\n var numCompressed1 = 0;\n\n if (this.hasWebMercatorT || this.hasVertexNormals) {\n ++numCompressed0;\n }\n\n if (this.hasWebMercatorT && this.hasVertexNormals) {\n ++numCompressed1;\n\n stride = (numCompressed0 + numCompressed1) * sizeInBytes;\n\n return [\n {\n index: attributes.compressed0,\n vertexBuffer: buffer,\n componentDatatype: datatype,\n componentsPerAttribute: numCompressed0,\n offsetInBytes: 0,\n strideInBytes: stride,\n },\n {\n index: attributes.compressed1,\n vertexBuffer: buffer,\n componentDatatype: datatype,\n componentsPerAttribute: numCompressed1,\n offsetInBytes: numCompressed0 * sizeInBytes,\n strideInBytes: stride,\n },\n ];\n }\n return [\n {\n index: attributes.compressed0,\n vertexBuffer: buffer,\n componentDatatype: datatype,\n componentsPerAttribute: numCompressed0,\n },\n ];\n};\n\nTerrainEncoding.prototype.getAttributeLocations = function () {\n if (this.quantization === TerrainQuantization.NONE) {\n return attributesNone;\n }\n return attributes;\n};\n\nTerrainEncoding.clone = function (encoding, result) {\n if (!defined(result)) {\n result = new TerrainEncoding();\n }\n\n result.quantization = encoding.quantization;\n result.minimumHeight = encoding.minimumHeight;\n result.maximumHeight = encoding.maximumHeight;\n result.center = Cartesian3.clone(encoding.center);\n result.toScaledENU = Matrix4.clone(encoding.toScaledENU);\n result.fromScaledENU = Matrix4.clone(encoding.fromScaledENU);\n result.matrix = Matrix4.clone(encoding.matrix);\n result.hasVertexNormals = encoding.hasVertexNormals;\n result.hasWebMercatorT = encoding.hasWebMercatorT;\n return result;\n};\nexport default TerrainEncoding;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * The map projection used by Google Maps, Bing Maps, and most of ArcGIS Online, EPSG:3857. This\n * projection use longitude and latitude expressed with the WGS84 and transforms them to Mercator using\n * the spherical (rather than ellipsoidal) equations.\n *\n * @alias WebMercatorProjection\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n *\n * @see GeographicProjection\n */\nfunction WebMercatorProjection(ellipsoid) {\n this._ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n this._semimajorAxis = this._ellipsoid.maximumRadius;\n this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\n}\n\nObject.defineProperties(WebMercatorProjection.prototype, {\n /**\n * Gets the {@link Ellipsoid}.\n *\n * @memberof WebMercatorProjection.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n});\n\n/**\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\n * in the range -PI/2 to PI/2.\n *\n * @param {Number} mercatorAngle The angle to convert.\n * @returns {Number} The geodetic latitude in radians.\n */\nWebMercatorProjection.mercatorAngleToGeodeticLatitude = function (\n mercatorAngle\n) {\n return CesiumMath.PI_OVER_TWO - 2.0 * Math.atan(Math.exp(-mercatorAngle));\n};\n\n/**\n * Converts a geodetic latitude in radians, in the range -PI/2 to PI/2, to a Mercator\n * angle in the range -PI to PI.\n *\n * @param {Number} latitude The geodetic latitude in radians.\n * @returns {Number} The Mercator angle.\n */\nWebMercatorProjection.geodeticLatitudeToMercatorAngle = function (latitude) {\n // Clamp the latitude coordinate to the valid Mercator bounds.\n if (latitude > WebMercatorProjection.MaximumLatitude) {\n latitude = WebMercatorProjection.MaximumLatitude;\n } else if (latitude < -WebMercatorProjection.MaximumLatitude) {\n latitude = -WebMercatorProjection.MaximumLatitude;\n }\n var sinLatitude = Math.sin(latitude);\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n};\n\n/**\n * The maximum latitude (both North and South) supported by a Web Mercator\n * (EPSG:3857) projection. Technically, the Mercator projection is defined\n * for any latitude up to (but not including) 90 degrees, but it makes sense\n * to cut it off sooner because it grows exponentially with increasing latitude.\n * The logic behind this particular cutoff value, which is the one used by\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\n * square. That is, the rectangle is equal in the X and Y directions.\n *\n * The constant value is computed by calling:\n * WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI)\n *\n * @type {Number}\n */\nWebMercatorProjection.MaximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(\n Math.PI\n);\n\n/**\n * Converts geodetic ellipsoid coordinates, in radians, to the equivalent Web Mercator\n * X, Y, Z coordinates expressed in meters and returned in a {@link Cartesian3}. The height\n * is copied unmodified to the Z coordinate.\n *\n * @param {Cartographic} cartographic The cartographic coordinates in radians.\n * @param {Cartesian3} [result] The instance to which to copy the result, or undefined if a\n * new instance should be created.\n * @returns {Cartesian3} The equivalent web mercator X, Y, Z coordinates, in meters.\n */\nWebMercatorProjection.prototype.project = function (cartographic, result) {\n var semimajorAxis = this._semimajorAxis;\n var x = cartographic.longitude * semimajorAxis;\n var y =\n WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n cartographic.latitude\n ) * semimajorAxis;\n var z = cartographic.height;\n\n if (!defined(result)) {\n return new Cartesian3(x, y, z);\n }\n\n result.x = x;\n result.y = y;\n result.z = z;\n return result;\n};\n\n/**\n * Converts Web Mercator X, Y coordinates, expressed in meters, to a {@link Cartographic}\n * containing geodetic ellipsoid coordinates. The Z coordinate is copied unmodified to the\n * height.\n *\n * @param {Cartesian3} cartesian The web mercator Cartesian position to unrproject with height (z) in meters.\n * @param {Cartographic} [result] The instance to which to copy the result, or undefined if a\n * new instance should be created.\n * @returns {Cartographic} The equivalent cartographic coordinates.\n */\nWebMercatorProjection.prototype.unproject = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required\");\n }\n //>>includeEnd('debug');\n\n var oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\n var longitude = cartesian.x * oneOverEarthSemimajorAxis;\n var latitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(\n cartesian.y * oneOverEarthSemimajorAxis\n );\n var height = cartesian.z;\n\n if (!defined(result)) {\n return new Cartographic(longitude, latitude, height);\n }\n\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = height;\n return result;\n};\nexport default WebMercatorProjection;\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidalOccluder from \"./EllipsoidalOccluder.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport Transforms from \"./Transforms.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\n/**\n * Contains functions to create a mesh from a heightmap image.\n *\n * @namespace HeightmapTessellator\n *\n * @private\n */\nvar HeightmapTessellator = {};\n\n/**\n * The default structure of a heightmap, as given to {@link HeightmapTessellator.computeVertices}.\n *\n * @constant\n */\nHeightmapTessellator.DEFAULT_STRUCTURE = Object.freeze({\n heightScale: 1.0,\n heightOffset: 0.0,\n elementsPerHeight: 1,\n stride: 1,\n elementMultiplier: 256.0,\n isBigEndian: false,\n});\n\nvar cartesian3Scratch = new Cartesian3();\nvar matrix4Scratch = new Matrix4();\nvar minimumScratch = new Cartesian3();\nvar maximumScratch = new Cartesian3();\n\n/**\n * Fills an array of vertices from a heightmap image.\n *\n * @param {Object} options Object with the following properties:\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.heightmap The heightmap to tessellate.\n * @param {Number} options.width The width of the heightmap, in height samples.\n * @param {Number} options.height The height of the heightmap, in height samples.\n * @param {Number} options.skirtHeight The height of skirts to drape at the edges of the heightmap.\n * @param {Rectangle} options.nativeRectangle A rectangle in the native coordinates of the heightmap's projection. For\n * a heightmap with a geographic projection, this is degrees. For the web mercator\n * projection, this is meters.\n * @param {Number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {Rectangle} [options.rectangle] The rectangle covered by the heightmap, in geodetic coordinates with north, south, east and\n * west properties in radians. Either rectangle or nativeRectangle must be provided. If both\n * are provided, they're assumed to be consistent.\n * @param {Boolean} [options.isGeographic=true] True if the heightmap uses a {@link GeographicProjection}, or false if it uses\n * a {@link WebMercatorProjection}.\n * @param {Cartesian3} [options.relativeToCenter=Cartesian3.ZERO] The positions will be computed as <code>Cartesian3.subtract(worldPosition, relativeToCenter)</code>.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to which the heightmap applies.\n * @param {Object} [options.structure] An object describing the structure of the height data.\n * @param {Number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain\n * the height above the heightOffset, in meters. The heightOffset is added to the resulting\n * height after multiplying by the scale.\n * @param {Number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final\n * height in meters. The offset is added after the height sample is multiplied by the\n * heightScale.\n * @param {Number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height\n * sample. This is usually 1, indicating that each element is a separate height sample. If\n * it is greater than 1, that number of elements together form the height sample, which is\n * computed according to the structure.elementMultiplier and structure.isBigEndian properties.\n * @param {Number} [options.structure.stride=1] The number of elements to skip to get from the first element of\n * one height to the first element of the next height.\n * @param {Number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the\n * stride property is greater than 1. For example, if the stride is 4 and the strideMultiplier\n * is 256, the height is computed as follows:\n * `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256`\n * This is assuming that the isBigEndian property is false. If it is true, the order of the\n * elements is reversed.\n * @param {Number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer. Any heights that are lower\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\n * buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers. If this parameter is\n * not specified, no minimum value is enforced.\n * @param {Number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer. Any heights that are higher\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\n * buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger\n * than 65535. If this parameter is not specified, no maximum value is enforced.\n * @param {Boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the\n * stride property is greater than 1. If this property is false, the first element is the\n * low-order element. If it is true, the first element is the high-order element.\n *\n * @example\n * var width = 5;\n * var height = 5;\n * var statistics = Cesium.HeightmapTessellator.computeVertices({\n * heightmap : [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0],\n * width : width,\n * height : height,\n * skirtHeight : 0.0,\n * nativeRectangle : {\n * west : 10.0,\n * east : 20.0,\n * south : 30.0,\n * north : 40.0\n * }\n * });\n *\n * var encoding = statistics.encoding;\n * var position = encoding.decodePosition(statistics.vertices, index * encoding.getStride());\n */\nHeightmapTessellator.computeVertices = function (options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.heightmap)) {\n throw new DeveloperError(\"options.heightmap is required.\");\n }\n if (!defined(options.width) || !defined(options.height)) {\n throw new DeveloperError(\"options.width and options.height are required.\");\n }\n if (!defined(options.nativeRectangle)) {\n throw new DeveloperError(\"options.nativeRectangle is required.\");\n }\n if (!defined(options.skirtHeight)) {\n throw new DeveloperError(\"options.skirtHeight is required.\");\n }\n //>>includeEnd('debug');\n\n // This function tends to be a performance hotspot for terrain rendering,\n // so it employs a lot of inlining and unrolling as an optimization.\n // In particular, the functionality of Ellipsoid.cartographicToCartesian\n // is inlined.\n\n var cos = Math.cos;\n var sin = Math.sin;\n var sqrt = Math.sqrt;\n var atan = Math.atan;\n var exp = Math.exp;\n var piOverTwo = CesiumMath.PI_OVER_TWO;\n var toRadians = CesiumMath.toRadians;\n\n var heightmap = options.heightmap;\n var width = options.width;\n var height = options.height;\n var skirtHeight = options.skirtHeight;\n\n var isGeographic = defaultValue(options.isGeographic, true);\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n var oneOverGlobeSemimajorAxis = 1.0 / ellipsoid.maximumRadius;\n\n var nativeRectangle = options.nativeRectangle;\n\n var geographicWest;\n var geographicSouth;\n var geographicEast;\n var geographicNorth;\n\n var rectangle = options.rectangle;\n if (!defined(rectangle)) {\n if (isGeographic) {\n geographicWest = toRadians(nativeRectangle.west);\n geographicSouth = toRadians(nativeRectangle.south);\n geographicEast = toRadians(nativeRectangle.east);\n geographicNorth = toRadians(nativeRectangle.north);\n } else {\n geographicWest = nativeRectangle.west * oneOverGlobeSemimajorAxis;\n geographicSouth =\n piOverTwo -\n 2.0 * atan(exp(-nativeRectangle.south * oneOverGlobeSemimajorAxis));\n geographicEast = nativeRectangle.east * oneOverGlobeSemimajorAxis;\n geographicNorth =\n piOverTwo -\n 2.0 * atan(exp(-nativeRectangle.north * oneOverGlobeSemimajorAxis));\n }\n } else {\n geographicWest = rectangle.west;\n geographicSouth = rectangle.south;\n geographicEast = rectangle.east;\n geographicNorth = rectangle.north;\n }\n\n var relativeToCenter = options.relativeToCenter;\n var hasRelativeToCenter = defined(relativeToCenter);\n relativeToCenter = hasRelativeToCenter ? relativeToCenter : Cartesian3.ZERO;\n var exaggeration = defaultValue(options.exaggeration, 1.0);\n var includeWebMercatorT = defaultValue(options.includeWebMercatorT, false);\n\n var structure = defaultValue(\n options.structure,\n HeightmapTessellator.DEFAULT_STRUCTURE\n );\n var heightScale = defaultValue(\n structure.heightScale,\n HeightmapTessellator.DEFAULT_STRUCTURE.heightScale\n );\n var heightOffset = defaultValue(\n structure.heightOffset,\n HeightmapTessellator.DEFAULT_STRUCTURE.heightOffset\n );\n var elementsPerHeight = defaultValue(\n structure.elementsPerHeight,\n HeightmapTessellator.DEFAULT_STRUCTURE.elementsPerHeight\n );\n var stride = defaultValue(\n structure.stride,\n HeightmapTessellator.DEFAULT_STRUCTURE.stride\n );\n var elementMultiplier = defaultValue(\n structure.elementMultiplier,\n HeightmapTessellator.DEFAULT_STRUCTURE.elementMultiplier\n );\n var isBigEndian = defaultValue(\n structure.isBigEndian,\n HeightmapTessellator.DEFAULT_STRUCTURE.isBigEndian\n );\n\n var rectangleWidth = Rectangle.computeWidth(nativeRectangle);\n var rectangleHeight = Rectangle.computeHeight(nativeRectangle);\n\n var granularityX = rectangleWidth / (width - 1);\n var granularityY = rectangleHeight / (height - 1);\n\n if (!isGeographic) {\n rectangleWidth *= oneOverGlobeSemimajorAxis;\n rectangleHeight *= oneOverGlobeSemimajorAxis;\n }\n\n var radiiSquared = ellipsoid.radiiSquared;\n var radiiSquaredX = radiiSquared.x;\n var radiiSquaredY = radiiSquared.y;\n var radiiSquaredZ = radiiSquared.z;\n\n var minimumHeight = 65536.0;\n var maximumHeight = -65536.0;\n\n var fromENU = Transforms.eastNorthUpToFixedFrame(relativeToCenter, ellipsoid);\n var toENU = Matrix4.inverseTransformation(fromENU, matrix4Scratch);\n\n var southMercatorY;\n var oneOverMercatorHeight;\n if (includeWebMercatorT) {\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n geographicSouth\n );\n oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) -\n southMercatorY);\n }\n\n var minimum = minimumScratch;\n minimum.x = Number.POSITIVE_INFINITY;\n minimum.y = Number.POSITIVE_INFINITY;\n minimum.z = Number.POSITIVE_INFINITY;\n\n var maximum = maximumScratch;\n maximum.x = Number.NEGATIVE_INFINITY;\n maximum.y = Number.NEGATIVE_INFINITY;\n maximum.z = Number.NEGATIVE_INFINITY;\n\n var hMin = Number.POSITIVE_INFINITY;\n\n var gridVertexCount = width * height;\n var edgeVertexCount = skirtHeight > 0.0 ? width * 2 + height * 2 : 0;\n var vertexCount = gridVertexCount + edgeVertexCount;\n\n var positions = new Array(vertexCount);\n var heights = new Array(vertexCount);\n var uvs = new Array(vertexCount);\n var webMercatorTs = includeWebMercatorT ? new Array(vertexCount) : [];\n\n var startRow = 0;\n var endRow = height;\n var startCol = 0;\n var endCol = width;\n\n if (skirtHeight > 0.0) {\n --startRow;\n ++endRow;\n --startCol;\n ++endCol;\n }\n\n var skirtOffsetPercentage = 0.00001;\n\n for (var rowIndex = startRow; rowIndex < endRow; ++rowIndex) {\n var row = rowIndex;\n if (row < 0) {\n row = 0;\n }\n if (row >= height) {\n row = height - 1;\n }\n\n var latitude = nativeRectangle.north - granularityY * row;\n\n if (!isGeographic) {\n latitude =\n piOverTwo - 2.0 * atan(exp(-latitude * oneOverGlobeSemimajorAxis));\n } else {\n latitude = toRadians(latitude);\n }\n\n var v = (latitude - geographicSouth) / (geographicNorth - geographicSouth);\n v = CesiumMath.clamp(v, 0.0, 1.0);\n\n var isNorthEdge = rowIndex === startRow;\n var isSouthEdge = rowIndex === endRow - 1;\n if (skirtHeight > 0.0) {\n if (isNorthEdge) {\n latitude += skirtOffsetPercentage * rectangleHeight;\n } else if (isSouthEdge) {\n latitude -= skirtOffsetPercentage * rectangleHeight;\n }\n }\n\n var cosLatitude = cos(latitude);\n var nZ = sin(latitude);\n var kZ = radiiSquaredZ * nZ;\n\n var webMercatorT;\n if (includeWebMercatorT) {\n webMercatorT =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\n southMercatorY) *\n oneOverMercatorHeight;\n }\n\n for (var colIndex = startCol; colIndex < endCol; ++colIndex) {\n var col = colIndex;\n if (col < 0) {\n col = 0;\n }\n if (col >= width) {\n col = width - 1;\n }\n\n var terrainOffset = row * (width * stride) + col * stride;\n\n var heightSample;\n if (elementsPerHeight === 1) {\n heightSample = heightmap[terrainOffset];\n } else {\n heightSample = 0;\n\n var elementOffset;\n if (isBigEndian) {\n for (\n elementOffset = 0;\n elementOffset < elementsPerHeight;\n ++elementOffset\n ) {\n heightSample =\n heightSample * elementMultiplier +\n heightmap[terrainOffset + elementOffset];\n }\n } else {\n for (\n elementOffset = elementsPerHeight - 1;\n elementOffset >= 0;\n --elementOffset\n ) {\n heightSample =\n heightSample * elementMultiplier +\n heightmap[terrainOffset + elementOffset];\n }\n }\n }\n\n heightSample = (heightSample * heightScale + heightOffset) * exaggeration;\n\n maximumHeight = Math.max(maximumHeight, heightSample);\n minimumHeight = Math.min(minimumHeight, heightSample);\n\n var longitude = nativeRectangle.west + granularityX * col;\n\n if (!isGeographic) {\n longitude = longitude * oneOverGlobeSemimajorAxis;\n } else {\n longitude = toRadians(longitude);\n }\n\n var u = (longitude - geographicWest) / (geographicEast - geographicWest);\n u = CesiumMath.clamp(u, 0.0, 1.0);\n\n var index = row * width + col;\n\n if (skirtHeight > 0.0) {\n var isWestEdge = colIndex === startCol;\n var isEastEdge = colIndex === endCol - 1;\n var isEdge = isNorthEdge || isSouthEdge || isWestEdge || isEastEdge;\n var isCorner =\n (isNorthEdge || isSouthEdge) && (isWestEdge || isEastEdge);\n if (isCorner) {\n // Don't generate skirts on the corners.\n continue;\n } else if (isEdge) {\n heightSample -= skirtHeight;\n\n if (isWestEdge) {\n // The outer loop iterates north to south but the indices are ordered south to north, hence the index flip below\n index = gridVertexCount + (height - row - 1);\n longitude -= skirtOffsetPercentage * rectangleWidth;\n } else if (isSouthEdge) {\n // Add after west indices. South indices are ordered east to west.\n index = gridVertexCount + height + (width - col - 1);\n } else if (isEastEdge) {\n // Add after west and south indices. East indices are ordered north to south. The index is flipped like above.\n index = gridVertexCount + height + width + row;\n longitude += skirtOffsetPercentage * rectangleWidth;\n } else if (isNorthEdge) {\n // Add after west, south, and east indices. North indices are ordered west to east.\n index = gridVertexCount + height + width + height + col;\n }\n }\n }\n\n var nX = cosLatitude * cos(longitude);\n var nY = cosLatitude * sin(longitude);\n\n var kX = radiiSquaredX * nX;\n var kY = radiiSquaredY * nY;\n\n var gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\n var oneOverGamma = 1.0 / gamma;\n\n var rSurfaceX = kX * oneOverGamma;\n var rSurfaceY = kY * oneOverGamma;\n var rSurfaceZ = kZ * oneOverGamma;\n\n var position = new Cartesian3();\n position.x = rSurfaceX + nX * heightSample;\n position.y = rSurfaceY + nY * heightSample;\n position.z = rSurfaceZ + nZ * heightSample;\n\n positions[index] = position;\n heights[index] = heightSample;\n uvs[index] = new Cartesian2(u, v);\n\n if (includeWebMercatorT) {\n webMercatorTs[index] = webMercatorT;\n }\n\n Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch);\n\n Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum);\n Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum);\n hMin = Math.min(hMin, heightSample);\n }\n }\n\n var boundingSphere3D = BoundingSphere.fromPoints(positions);\n var orientedBoundingBox;\n if (defined(rectangle)) {\n orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n ellipsoid\n );\n }\n\n var occludeePointInScaledSpace;\n if (hasRelativeToCenter) {\n var occluder = new EllipsoidalOccluder(ellipsoid);\n occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n relativeToCenter,\n positions,\n minimumHeight\n );\n }\n\n var aaBox = new AxisAlignedBoundingBox(minimum, maximum, relativeToCenter);\n var encoding = new TerrainEncoding(\n aaBox,\n hMin,\n maximumHeight,\n fromENU,\n false,\n includeWebMercatorT\n );\n var vertices = new Float32Array(vertexCount * encoding.getStride());\n\n var bufferIndex = 0;\n for (var j = 0; j < vertexCount; ++j) {\n bufferIndex = encoding.encode(\n vertices,\n bufferIndex,\n positions[j],\n uvs[j],\n heights[j],\n undefined,\n webMercatorTs[j]\n );\n }\n\n return {\n vertices: vertices,\n maximumHeight: maximumHeight,\n minimumHeight: minimumHeight,\n encoding: encoding,\n boundingSphere3D: boundingSphere3D,\n orientedBoundingBox: orientedBoundingBox,\n occludeePointInScaledSpace: occludeePointInScaledSpace,\n };\n};\nexport default HeightmapTessellator;\n","import defaultValue from \"./defaultValue.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nfunction returnTrue() {\n return true;\n}\n\n/**\n * Destroys an object. Each of the object's functions, including functions in its prototype,\n * is replaced with a function that throws a {@link DeveloperError}, except for the object's\n * <code>isDestroyed</code> function, which is set to a function that returns <code>true</code>.\n * The object's properties are removed with <code>delete</code>.\n * <br /><br />\n * This function is used by objects that hold native resources, e.g., WebGL resources, which\n * need to be explicitly released. Client code calls an object's <code>destroy</code> function,\n * which then releases the native resource and calls <code>destroyObject</code> to put itself\n * in a destroyed state.\n *\n * @function\n *\n * @param {Object} object The object to destroy.\n * @param {String} [message] The message to include in the exception that is thrown if\n * a destroyed object's function is called.\n *\n *\n * @example\n * // How a texture would destroy itself.\n * this.destroy = function () {\n * _gl.deleteTexture(_texture);\n * return Cesium.destroyObject(this);\n * };\n *\n * @see DeveloperError\n */\nfunction destroyObject(object, message) {\n message = defaultValue(\n message,\n \"This object was destroyed, i.e., destroy() was called.\"\n );\n\n function throwOnDestroyed() {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(message);\n //>>includeEnd('debug');\n }\n\n for (var key in object) {\n if (typeof object[key] === \"function\") {\n object[key] = throwOnDestroyed;\n }\n }\n\n object.isDestroyed = returnTrue;\n\n return undefined;\n}\nexport default destroyObject;\n","import when from \"../ThirdParty/when.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport isCrossOriginUrl from \"./isCrossOriginUrl.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\nfunction canTransferArrayBuffer() {\n if (!defined(TaskProcessor._canTransferArrayBuffer)) {\n var worker = new Worker(getWorkerUrl(\"Workers/transferTypedArrayTest.js\"));\n worker.postMessage = defaultValue(\n worker.webkitPostMessage,\n worker.postMessage\n );\n\n var value = 99;\n var array = new Int8Array([value]);\n\n try {\n // postMessage might fail with a DataCloneError\n // if transferring array buffers is not supported.\n worker.postMessage(\n {\n array: array,\n },\n [array.buffer]\n );\n } catch (e) {\n TaskProcessor._canTransferArrayBuffer = false;\n return TaskProcessor._canTransferArrayBuffer;\n }\n\n var deferred = when.defer();\n\n worker.onmessage = function (event) {\n var array = event.data.array;\n\n // some versions of Firefox silently fail to transfer typed arrays.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=841904\n // Check to make sure the value round-trips successfully.\n var result = defined(array) && array[0] === value;\n deferred.resolve(result);\n\n worker.terminate();\n\n TaskProcessor._canTransferArrayBuffer = result;\n };\n\n TaskProcessor._canTransferArrayBuffer = deferred.promise;\n }\n\n return TaskProcessor._canTransferArrayBuffer;\n}\n\nvar taskCompletedEvent = new Event();\n\nfunction completeTask(processor, data) {\n --processor._activeTasks;\n\n var id = data.id;\n if (!defined(id)) {\n // This is not one of ours.\n return;\n }\n\n var deferreds = processor._deferreds;\n var deferred = deferreds[id];\n\n if (defined(data.error)) {\n var error = data.error;\n if (error.name === \"RuntimeError\") {\n error = new RuntimeError(data.error.message);\n error.stack = data.error.stack;\n } else if (error.name === \"DeveloperError\") {\n error = new DeveloperError(data.error.message);\n error.stack = data.error.stack;\n }\n taskCompletedEvent.raiseEvent(error);\n deferred.reject(error);\n } else {\n taskCompletedEvent.raiseEvent();\n deferred.resolve(data.result);\n }\n\n delete deferreds[id];\n}\n\nfunction getWorkerUrl(moduleID) {\n var url = buildModuleUrl(moduleID);\n\n if (isCrossOriginUrl(url)) {\n //to load cross-origin, create a shim worker from a blob URL\n var script = 'importScripts(\"' + url + '\");';\n\n var blob;\n try {\n blob = new Blob([script], {\n type: \"application/javascript\",\n });\n } catch (e) {\n var BlobBuilder =\n window.BlobBuilder ||\n window.WebKitBlobBuilder ||\n window.MozBlobBuilder ||\n window.MSBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n blob = blobBuilder.getBlob(\"application/javascript\");\n }\n\n var URL = window.URL || window.webkitURL;\n url = URL.createObjectURL(blob);\n }\n\n return url;\n}\n\nvar bootstrapperUrlResult;\nfunction getBootstrapperUrl() {\n if (!defined(bootstrapperUrlResult)) {\n bootstrapperUrlResult = getWorkerUrl(\"Workers/cesiumWorkerBootstrapper.js\");\n }\n return bootstrapperUrlResult;\n}\n\nfunction createWorker(processor) {\n var worker = new Worker(getBootstrapperUrl());\n worker.postMessage = defaultValue(\n worker.webkitPostMessage,\n worker.postMessage\n );\n\n var bootstrapMessage = {\n loaderConfig: {\n paths: {\n Workers: buildModuleUrl(\"Workers\"),\n },\n baseUrl: buildModuleUrl.getCesiumBaseUrl().url,\n },\n workerModule: TaskProcessor._workerModulePrefix + processor._workerName,\n };\n\n worker.postMessage(bootstrapMessage);\n worker.onmessage = function (event) {\n completeTask(processor, event.data);\n };\n\n return worker;\n}\n\nfunction getWebAssemblyLoaderConfig(processor, wasmOptions) {\n var config = {\n modulePath: undefined,\n wasmBinaryFile: undefined,\n wasmBinary: undefined,\n };\n\n // Web assembly not supported, use fallback js module if provided\n if (!FeatureDetection.supportsWebAssembly()) {\n if (!defined(wasmOptions.fallbackModulePath)) {\n throw new RuntimeError(\n \"This browser does not support Web Assembly, and no backup module was provided for \" +\n processor._workerName\n );\n }\n\n config.modulePath = buildModuleUrl(wasmOptions.fallbackModulePath);\n return when.resolve(config);\n }\n\n config.modulePath = buildModuleUrl(wasmOptions.modulePath);\n config.wasmBinaryFile = buildModuleUrl(wasmOptions.wasmBinaryFile);\n\n return Resource.fetchArrayBuffer({\n url: config.wasmBinaryFile,\n }).then(function (arrayBuffer) {\n config.wasmBinary = arrayBuffer;\n return config;\n });\n}\n\n/**\n * A wrapper around a web worker that allows scheduling tasks for a given worker,\n * returning results asynchronously via a promise.\n *\n * The Worker is not constructed until a task is scheduled.\n *\n * @alias TaskProcessor\n * @constructor\n *\n * @param {String} workerName The name of the worker. This is expected to be a script\n * in the Workers folder.\n * @param {Number} [maximumActiveTasks=5] The maximum number of active tasks. Once exceeded,\n * scheduleTask will not queue any more tasks, allowing\n * work to be rescheduled in future frames.\n */\nfunction TaskProcessor(workerName, maximumActiveTasks) {\n this._workerName = workerName;\n this._maximumActiveTasks = defaultValue(maximumActiveTasks, 5);\n this._activeTasks = 0;\n this._deferreds = {};\n this._nextID = 0;\n}\n\nvar emptyTransferableObjectArray = [];\n\n/**\n * Schedule a task to be processed by the web worker asynchronously. If there are currently more\n * tasks active than the maximum set by the constructor, will immediately return undefined.\n * Otherwise, returns a promise that will resolve to the result posted back by the worker when\n * finished.\n *\n * @param {Object} parameters Any input data that will be posted to the worker.\n * @param {Object[]} [transferableObjects] An array of objects contained in parameters that should be\n * transferred to the worker instead of copied.\n * @returns {Promise.<Object>|undefined} Either a promise that will resolve to the result when available, or undefined\n * if there are too many active tasks,\n *\n * @example\n * var taskProcessor = new Cesium.TaskProcessor('myWorkerName');\n * var promise = taskProcessor.scheduleTask({\n * someParameter : true,\n * another : 'hello'\n * });\n * if (!Cesium.defined(promise)) {\n * // too many active tasks - try again later\n * } else {\n * Cesium.when(promise, function(result) {\n * // use the result of the task\n * });\n * }\n */\nTaskProcessor.prototype.scheduleTask = function (\n parameters,\n transferableObjects\n) {\n if (!defined(this._worker)) {\n this._worker = createWorker(this);\n }\n\n if (this._activeTasks >= this._maximumActiveTasks) {\n return undefined;\n }\n\n ++this._activeTasks;\n\n var processor = this;\n return when(canTransferArrayBuffer(), function (canTransferArrayBuffer) {\n if (!defined(transferableObjects)) {\n transferableObjects = emptyTransferableObjectArray;\n } else if (!canTransferArrayBuffer) {\n transferableObjects.length = 0;\n }\n\n var id = processor._nextID++;\n var deferred = when.defer();\n processor._deferreds[id] = deferred;\n\n processor._worker.postMessage(\n {\n id: id,\n parameters: parameters,\n canTransferArrayBuffer: canTransferArrayBuffer,\n },\n transferableObjects\n );\n\n return deferred.promise;\n });\n};\n\n/**\n * Posts a message to a web worker with configuration to initialize loading\n * and compiling a web assembly module asychronously, as well as an optional\n * fallback JavaScript module to use if Web Assembly is not supported.\n *\n * @param {Object} [webAssemblyOptions] An object with the following properties:\n * @param {String} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.\n * @param {String} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.\n * @param {String} [webAssemblyOptions.fallbackModulePath] The path of the fallback JavaScript module to use if web assembly is not supported.\n * @returns {Promise.<Object>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.\n */\nTaskProcessor.prototype.initWebAssemblyModule = function (webAssemblyOptions) {\n if (!defined(this._worker)) {\n this._worker = createWorker(this);\n }\n\n var deferred = when.defer();\n var processor = this;\n var worker = this._worker;\n getWebAssemblyLoaderConfig(this, webAssemblyOptions).then(function (\n wasmConfig\n ) {\n return when(canTransferArrayBuffer(), function (canTransferArrayBuffer) {\n var transferableObjects;\n var binary = wasmConfig.wasmBinary;\n if (defined(binary) && canTransferArrayBuffer) {\n transferableObjects = [binary];\n }\n\n worker.onmessage = function (event) {\n worker.onmessage = function (event) {\n completeTask(processor, event.data);\n };\n\n deferred.resolve(event.data);\n };\n\n worker.postMessage(\n { webAssemblyConfig: wasmConfig },\n transferableObjects\n );\n });\n });\n\n return deferred;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see TaskProcessor#destroy\n */\nTaskProcessor.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys this object. This will immediately terminate the Worker.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n */\nTaskProcessor.prototype.destroy = function () {\n if (defined(this._worker)) {\n this._worker.terminate();\n }\n return destroyObject(this);\n};\n\n/**\n * An event that's raised when a task is completed successfully. Event handlers are passed\n * the error object is a task fails.\n *\n * @type {Event}\n *\n * @private\n */\nTaskProcessor.taskCompletedEvent = taskCompletedEvent;\n\n// exposed for testing purposes\nTaskProcessor._defaultWorkerModulePrefix = \"Workers/\";\nTaskProcessor._workerModulePrefix = TaskProcessor._defaultWorkerModulePrefix;\nTaskProcessor._canTransferArrayBuffer = undefined;\nexport default TaskProcessor;\n","import defaultValue from \"./defaultValue.js\";\n\n/**\n * A mesh plus related metadata for a single tile of terrain. Instances of this type are\n * usually created from raw {@link TerrainData}.\n *\n * @alias TerrainMesh\n * @constructor\n *\n * @param {Cartesian3} center The center of the tile. Vertex positions are specified relative to this center.\n * @param {Float32Array} vertices The vertex data, including positions, texture coordinates, and heights.\n * The vertex data is in the order [X, Y, Z, H, U, V], where X, Y, and Z represent\n * the Cartesian position of the vertex, H is the height above the ellipsoid, and\n * U and V are the texture coordinates.\n * @param {Uint8Array|Uint16Array|Uint32Array} indices The indices describing how the vertices are connected to form triangles.\n * @param {Number} indexCountWithoutSkirts The index count of the mesh not including skirts.\n * @param {Number} vertexCountWithoutSkirts The vertex count of the mesh not including skirts.\n * @param {Number} minimumHeight The lowest height in the tile, in meters above the ellipsoid.\n * @param {Number} maximumHeight The highest height in the tile, in meters above the ellipsoid.\n * @param {BoundingSphere} boundingSphere3D A bounding sphere that completely contains the tile.\n * @param {Cartesian3} occludeePointInScaledSpace The occludee point of the tile, represented in ellipsoid-\n * scaled space, and used for horizon culling. If this point is below the horizon,\n * the tile is considered to be entirely below the horizon.\n * @param {Number} [vertexStride=6] The number of components in each vertex.\n * @param {OrientedBoundingBox} [orientedBoundingBox] A bounding box that completely contains the tile.\n * @param {TerrainEncoding} encoding Information used to decode the mesh.\n * @param {Number} exaggeration The amount that this mesh was exaggerated.\n * @param {Number[]} westIndicesSouthToNorth The indices of the vertices on the Western edge of the tile, ordered from South to North (clockwise).\n * @param {Number[]} southIndicesEastToWest The indices of the vertices on the Southern edge of the tile, ordered from East to West (clockwise).\n * @param {Number[]} eastIndicesNorthToSouth The indices of the vertices on the Eastern edge of the tile, ordered from North to South (clockwise).\n * @param {Number[]} northIndicesWestToEast The indices of the vertices on the Northern edge of the tile, ordered from West to East (clockwise).\n *\n * @private\n */\nfunction TerrainMesh(\n center,\n vertices,\n indices,\n indexCountWithoutSkirts,\n vertexCountWithoutSkirts,\n minimumHeight,\n maximumHeight,\n boundingSphere3D,\n occludeePointInScaledSpace,\n vertexStride,\n orientedBoundingBox,\n encoding,\n exaggeration,\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast\n) {\n /**\n * The center of the tile. Vertex positions are specified relative to this center.\n * @type {Cartesian3}\n */\n this.center = center;\n\n /**\n * The vertex data, including positions, texture coordinates, and heights.\n * The vertex data is in the order [X, Y, Z, H, U, V], where X, Y, and Z represent\n * the Cartesian position of the vertex, H is the height above the ellipsoid, and\n * U and V are the texture coordinates. The vertex data may have additional attributes after those\n * mentioned above when the {@link TerrainMesh#stride} is greater than 6.\n * @type {Float32Array}\n */\n this.vertices = vertices;\n\n /**\n * The number of components in each vertex. Typically this is 6 for the 6 components\n * [X, Y, Z, H, U, V], but if each vertex has additional data (such as a vertex normal), this value\n * may be higher.\n * @type {Number}\n */\n this.stride = defaultValue(vertexStride, 6);\n\n /**\n * The indices describing how the vertices are connected to form triangles.\n * @type {Uint8Array|Uint16Array|Uint32Array}\n */\n this.indices = indices;\n\n /**\n * The index count of the mesh not including skirts.\n * @type {Number}\n */\n this.indexCountWithoutSkirts = indexCountWithoutSkirts;\n\n /**\n * The vertex count of the mesh not including skirts.\n * @type {Number}\n */\n this.vertexCountWithoutSkirts = vertexCountWithoutSkirts;\n\n /**\n * The lowest height in the tile, in meters above the ellipsoid.\n * @type {Number}\n */\n this.minimumHeight = minimumHeight;\n\n /**\n * The highest height in the tile, in meters above the ellipsoid.\n * @type {Number}\n */\n this.maximumHeight = maximumHeight;\n\n /**\n * A bounding sphere that completely contains the tile.\n * @type {BoundingSphere}\n */\n this.boundingSphere3D = boundingSphere3D;\n\n /**\n * The occludee point of the tile, represented in ellipsoid-\n * scaled space, and used for horizon culling. If this point is below the horizon,\n * the tile is considered to be entirely below the horizon.\n * @type {Cartesian3}\n */\n this.occludeePointInScaledSpace = occludeePointInScaledSpace;\n\n /**\n * A bounding box that completely contains the tile.\n * @type {OrientedBoundingBox}\n */\n this.orientedBoundingBox = orientedBoundingBox;\n\n /**\n * Information for decoding the mesh vertices.\n * @type {TerrainEncoding}\n */\n this.encoding = encoding;\n\n /**\n * The amount that this mesh was exaggerated.\n * @type {Number}\n */\n this.exaggeration = exaggeration;\n\n /**\n * The indices of the vertices on the Western edge of the tile, ordered from South to North (clockwise).\n * @type {Number[]}\n */\n this.westIndicesSouthToNorth = westIndicesSouthToNorth;\n\n /**\n * The indices of the vertices on the Southern edge of the tile, ordered from East to West (clockwise).\n * @type {Number[]}\n */\n this.southIndicesEastToWest = southIndicesEastToWest;\n\n /**\n * The indices of the vertices on the Eastern edge of the tile, ordered from North to South (clockwise).\n * @type {Number[]}\n */\n this.eastIndicesNorthToSouth = eastIndicesNorthToSouth;\n\n /**\n * The indices of the vertices on the Northern edge of the tile, ordered from West to East (clockwise).\n * @type {Number[]}\n */\n this.northIndicesWestToEast = northIndicesWestToEast;\n}\nexport default TerrainMesh;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * Constants for WebGL index datatypes. These corresponds to the\n * <code>type</code> parameter of {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml|drawElements}.\n *\n * @enum {Number}\n */\nvar IndexDatatype = {\n /**\n * 8-bit unsigned byte corresponding to <code>UNSIGNED_BYTE</code> and the type\n * of an element in <code>Uint8Array</code>.\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n\n /**\n * 16-bit unsigned short corresponding to <code>UNSIGNED_SHORT</code> and the type\n * of an element in <code>Uint16Array</code>.\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n\n /**\n * 32-bit unsigned int corresponding to <code>UNSIGNED_INT</code> and the type\n * of an element in <code>Uint32Array</code>.\n *\n * @type {Number}\n * @constant\n */\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n};\n\n/**\n * Returns the size, in bytes, of the corresponding datatype.\n *\n * @param {IndexDatatype} indexDatatype The index datatype to get the size of.\n * @returns {Number} The size in bytes.\n *\n * @example\n * // Returns 2\n * var size = Cesium.IndexDatatype.getSizeInBytes(Cesium.IndexDatatype.UNSIGNED_SHORT);\n */\nIndexDatatype.getSizeInBytes = function (indexDatatype) {\n switch (indexDatatype) {\n case IndexDatatype.UNSIGNED_BYTE:\n return Uint8Array.BYTES_PER_ELEMENT;\n case IndexDatatype.UNSIGNED_SHORT:\n return Uint16Array.BYTES_PER_ELEMENT;\n case IndexDatatype.UNSIGNED_INT:\n return Uint32Array.BYTES_PER_ELEMENT;\n }\n\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n \"indexDatatype is required and must be a valid IndexDatatype constant.\"\n );\n //>>includeEnd('debug');\n};\n\n/**\n * Gets the datatype with a given size in bytes.\n *\n * @param {Number} sizeInBytes The size of a single index in bytes.\n * @returns {IndexDatatype} The index datatype with the given size.\n */\nIndexDatatype.fromSizeInBytes = function (sizeInBytes) {\n switch (sizeInBytes) {\n case 2:\n return IndexDatatype.UNSIGNED_SHORT;\n case 4:\n return IndexDatatype.UNSIGNED_INT;\n case 1:\n return IndexDatatype.UNSIGNED_BYTE;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\n \"Size in bytes cannot be mapped to an IndexDatatype\"\n );\n //>>includeEnd('debug');\n }\n};\n\n/**\n * Validates that the provided index datatype is a valid {@link IndexDatatype}.\n *\n * @param {IndexDatatype} indexDatatype The index datatype to validate.\n * @returns {Boolean} <code>true</code> if the provided index datatype is a valid value; otherwise, <code>false</code>.\n *\n * @example\n * if (!Cesium.IndexDatatype.validate(indexDatatype)) {\n * throw new Cesium.DeveloperError('indexDatatype must be a valid value.');\n * }\n */\nIndexDatatype.validate = function (indexDatatype) {\n return (\n defined(indexDatatype) &&\n (indexDatatype === IndexDatatype.UNSIGNED_BYTE ||\n indexDatatype === IndexDatatype.UNSIGNED_SHORT ||\n indexDatatype === IndexDatatype.UNSIGNED_INT)\n );\n};\n\n/**\n * Creates a typed array that will store indices, using either <code><Uint16Array</code>\n * or <code>Uint32Array</code> depending on the number of vertices.\n *\n * @param {Number} numberOfVertices Number of vertices that the indices will reference.\n * @param {Number|Array} indicesLengthOrArray Passed through to the typed array constructor.\n * @returns {Uint16Array|Uint32Array} A <code>Uint16Array</code> or <code>Uint32Array</code> constructed with <code>indicesLengthOrArray</code>.\n *\n * @example\n * this.indices = Cesium.IndexDatatype.createTypedArray(positions.length / 3, numberOfIndices);\n */\nIndexDatatype.createTypedArray = function (\n numberOfVertices,\n indicesLengthOrArray\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(numberOfVertices)) {\n throw new DeveloperError(\"numberOfVertices is required.\");\n }\n //>>includeEnd('debug');\n\n if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\n return new Uint32Array(indicesLengthOrArray);\n }\n\n return new Uint16Array(indicesLengthOrArray);\n};\n\n/**\n * Creates a typed array from a source array buffer. The resulting typed array will store indices, using either <code><Uint16Array</code>\n * or <code>Uint32Array</code> depending on the number of vertices.\n *\n * @param {Number} numberOfVertices Number of vertices that the indices will reference.\n * @param {ArrayBuffer} sourceArray Passed through to the typed array constructor.\n * @param {Number} byteOffset Passed through to the typed array constructor.\n * @param {Number} length Passed through to the typed array constructor.\n * @returns {Uint16Array|Uint32Array} A <code>Uint16Array</code> or <code>Uint32Array</code> constructed with <code>sourceArray</code>, <code>byteOffset</code>, and <code>length</code>.\n *\n */\nIndexDatatype.createTypedArrayFromArrayBuffer = function (\n numberOfVertices,\n sourceArray,\n byteOffset,\n length\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(numberOfVertices)) {\n throw new DeveloperError(\"numberOfVertices is required.\");\n }\n if (!defined(sourceArray)) {\n throw new DeveloperError(\"sourceArray is required.\");\n }\n if (!defined(byteOffset)) {\n throw new DeveloperError(\"byteOffset is required.\");\n }\n //>>includeEnd('debug');\n\n if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\n return new Uint32Array(sourceArray, byteOffset, length);\n }\n\n return new Uint16Array(sourceArray, byteOffset, length);\n};\nexport default Object.freeze(IndexDatatype);\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is\n * organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TerrainProvider\n * @constructor\n *\n * @see EllipsoidTerrainProvider\n * @see CesiumTerrainProvider\n * @see VRTheWorldTerrainProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n */\nfunction TerrainProvider() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(TerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error.. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof TerrainProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should\n * not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Credit}\n */\n credit: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {TilingScheme}\n */\n tilingScheme: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof TerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n */\n hasWaterMask: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n */\n hasVertexNormals: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof TerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\nvar regularGridIndicesCache = [];\n\n/**\n * Gets a list of indices for a triangle mesh representing a regular grid. Calling\n * this function multiple times with the same grid width and height returns the\n * same list of indices. The total number of vertices must be less than or equal\n * to 65536.\n *\n * @param {Number} width The number of vertices in the regular grid in the horizontal direction.\n * @param {Number} height The number of vertices in the regular grid in the vertical direction.\n * @returns {Uint16Array|Uint32Array} The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less.\n */\nTerrainProvider.getRegularGridIndices = function (width, height) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n var byWidth = regularGridIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridIndicesCache[width] = byWidth = [];\n }\n\n var indices = byWidth[height];\n if (!defined(indices)) {\n if (width * height < CesiumMath.SIXTY_FOUR_KILOBYTES) {\n indices = byWidth[height] = new Uint16Array(\n (width - 1) * (height - 1) * 6\n );\n } else {\n indices = byWidth[height] = new Uint32Array(\n (width - 1) * (height - 1) * 6\n );\n }\n addRegularGridIndices(width, height, indices, 0);\n }\n\n return indices;\n};\n\nvar regularGridAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridIndicesAndEdgeIndices = function (width, height) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n var byWidth = regularGridAndEdgeIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridAndEdgeIndicesCache[width] = byWidth = [];\n }\n\n var indicesAndEdges = byWidth[height];\n if (!defined(indicesAndEdges)) {\n var indices = TerrainProvider.getRegularGridIndices(width, height);\n\n var edgeIndices = getEdgeIndices(width, height);\n var westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n var southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n var eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n var northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n indicesAndEdges = byWidth[height] = {\n indices: indices,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n };\n }\n\n return indicesAndEdges;\n};\n\nvar regularGridAndSkirtAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices = function (\n width,\n height\n) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n var byWidth = regularGridAndSkirtAndEdgeIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridAndSkirtAndEdgeIndicesCache[width] = byWidth = [];\n }\n\n var indicesAndEdges = byWidth[height];\n if (!defined(indicesAndEdges)) {\n var gridVertexCount = width * height;\n var gridIndexCount = (width - 1) * (height - 1) * 6;\n var edgeVertexCount = width * 2 + height * 2;\n var edgeIndexCount = Math.max(0, edgeVertexCount - 4) * 6;\n var vertexCount = gridVertexCount + edgeVertexCount;\n var indexCount = gridIndexCount + edgeIndexCount;\n\n var edgeIndices = getEdgeIndices(width, height);\n var westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n var southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n var eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n var northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n var indices = IndexDatatype.createTypedArray(vertexCount, indexCount);\n addRegularGridIndices(width, height, indices, 0);\n TerrainProvider.addSkirtIndices(\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast,\n gridVertexCount,\n indices,\n gridIndexCount\n );\n\n indicesAndEdges = byWidth[height] = {\n indices: indices,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n indexCountWithoutSkirts: gridIndexCount,\n };\n }\n\n return indicesAndEdges;\n};\n\n/**\n * @private\n */\nTerrainProvider.addSkirtIndices = function (\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast,\n vertexCount,\n indices,\n offset\n) {\n var vertexIndex = vertexCount;\n offset = addSkirtIndices(\n westIndicesSouthToNorth,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += westIndicesSouthToNorth.length;\n offset = addSkirtIndices(\n southIndicesEastToWest,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += southIndicesEastToWest.length;\n offset = addSkirtIndices(\n eastIndicesNorthToSouth,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += eastIndicesNorthToSouth.length;\n addSkirtIndices(northIndicesWestToEast, vertexIndex, indices, offset);\n};\n\nfunction getEdgeIndices(width, height) {\n var westIndicesSouthToNorth = new Array(height);\n var southIndicesEastToWest = new Array(width);\n var eastIndicesNorthToSouth = new Array(height);\n var northIndicesWestToEast = new Array(width);\n\n var i;\n for (i = 0; i < width; ++i) {\n northIndicesWestToEast[i] = i;\n southIndicesEastToWest[i] = width * height - 1 - i;\n }\n\n for (i = 0; i < height; ++i) {\n eastIndicesNorthToSouth[i] = (i + 1) * width - 1;\n westIndicesSouthToNorth[i] = (height - i - 1) * width;\n }\n\n return {\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n };\n}\n\nfunction addRegularGridIndices(width, height, indices, offset) {\n var index = 0;\n for (var j = 0; j < height - 1; ++j) {\n for (var i = 0; i < width - 1; ++i) {\n var upperLeft = index;\n var lowerLeft = upperLeft + width;\n var lowerRight = lowerLeft + 1;\n var upperRight = upperLeft + 1;\n\n indices[offset++] = upperLeft;\n indices[offset++] = lowerLeft;\n indices[offset++] = upperRight;\n indices[offset++] = upperRight;\n indices[offset++] = lowerLeft;\n indices[offset++] = lowerRight;\n\n ++index;\n }\n ++index;\n }\n}\n\nfunction addSkirtIndices(edgeIndices, vertexIndex, indices, offset) {\n var previousIndex = edgeIndices[0];\n\n var length = edgeIndices.length;\n for (var i = 1; i < length; ++i) {\n var index = edgeIndices[i];\n\n indices[offset++] = previousIndex;\n indices[offset++] = index;\n indices[offset++] = vertexIndex;\n\n indices[offset++] = vertexIndex;\n indices[offset++] = index;\n indices[offset++] = vertexIndex + 1;\n\n previousIndex = index;\n ++vertexIndex;\n }\n\n return offset;\n}\n\n/**\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\n * ensure that adjacent heightmap vertices are separated by no more than\n * {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly.\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\n * @type {Number}\n */\nTerrainProvider.heightmapTerrainQuality = 0.25;\n\n/**\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\n * @returns {Number} An estimated geometric error.\n */\nTerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (\n ellipsoid,\n tileImageWidth,\n numberOfTilesAtLevelZero\n) {\n return (\n (ellipsoid.maximumRadius *\n 2 *\n Math.PI *\n TerrainProvider.heightmapTerrainQuality) /\n (tileImageWidth * numberOfTilesAtLevelZero)\n );\n};\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link TerrainProvider#ready} returns true. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n */\nTerrainProvider.prototype.requestTileGeometry =\n DeveloperError.throwInstantiationError;\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level. This function should not be\n * called before {@link TerrainProvider#ready} returns true.\n * @function\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nTerrainProvider.prototype.getLevelMaximumGeometricError =\n DeveloperError.throwInstantiationError;\n\n/**\n * Determines whether data for a tile is available to be loaded.\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported by the terrain provider, otherwise true or false.\n */\nTerrainProvider.prototype.getTileDataAvailable =\n DeveloperError.throwInstantiationError;\n\n/**\n * Makes sure we load availability data for a tile\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nTerrainProvider.prototype.loadTileDataAvailability =\n DeveloperError.throwInstantiationError;\nexport default TerrainProvider;\n","import when from \"../ThirdParty/when.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport HeightmapEncoding from \"./HeightmapEncoding.js\";\nimport HeightmapTessellator from \"./HeightmapTessellator.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * Terrain data for a single tile where the terrain data is represented as a heightmap. A heightmap\n * is a rectangular array of heights in row-major order from north to south and west to east.\n *\n * @alias HeightmapTerrainData\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.buffer The buffer containing height data.\n * @param {Number} options.width The width (longitude direction) of the heightmap, in samples.\n * @param {Number} options.height The height (latitude direction) of the heightmap, in samples.\n * @param {Number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n * If a child's bit is set, geometry will be requested for that tile as well when it\n * is needed. If the bit is cleared, the child tile is not requested and geometry is\n * instead upsampled from the parent. The bit values are as follows:\n * <table>\n * <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n * <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n * <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n * <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n * <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n * </table>\n * @param {Uint8Array} [options.waterMask] The water mask included in this terrain data, if any. A water mask is a square\n * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @param {Object} [options.structure] An object describing the structure of the height data.\n * @param {Number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain\n * the height above the heightOffset, in meters. The heightOffset is added to the resulting\n * height after multiplying by the scale.\n * @param {Number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final\n * height in meters. The offset is added after the height sample is multiplied by the\n * heightScale.\n * @param {Number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height\n * sample. This is usually 1, indicating that each element is a separate height sample. If\n * it is greater than 1, that number of elements together form the height sample, which is\n * computed according to the structure.elementMultiplier and structure.isBigEndian properties.\n * @param {Number} [options.structure.stride=1] The number of elements to skip to get from the first element of\n * one height to the first element of the next height.\n * @param {Number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the\n * stride property is greater than 1. For example, if the stride is 4 and the strideMultiplier\n * is 256, the height is computed as follows:\n * `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256`\n * This is assuming that the isBigEndian property is false. If it is true, the order of the\n * elements is reversed.\n * @param {Boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the\n * stride property is greater than 1. If this property is false, the first element is the\n * low-order element. If it is true, the first element is the high-order element.\n * @param {Number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer. Any heights that are lower\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\n * buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers. If this parameter is\n * not specified, no minimum value is enforced.\n * @param {Number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer. Any heights that are higher\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\n * buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger\n * than 65535. If this parameter is not specified, no maximum value is enforced.\n * @param {HeightmapEncoding} [options.encoding=HeightmapEncoding.NONE] The encoding that is used on the buffer.\n * @param {Boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n * otherwise, false.\n *\n *\n * @example\n * var buffer = ...\n * var heightBuffer = new Uint16Array(buffer, 0, that._heightmapWidth * that._heightmapWidth);\n * var childTileMask = new Uint8Array(buffer, heightBuffer.byteLength, 1)[0];\n * var waterMask = new Uint8Array(buffer, heightBuffer.byteLength + 1, buffer.byteLength - heightBuffer.byteLength - 1);\n * var terrainData = new Cesium.HeightmapTerrainData({\n * buffer : heightBuffer,\n * width : 65,\n * height : 65,\n * childTileMask : childTileMask,\n * waterMask : waterMask\n * });\n *\n * @see TerrainData\n * @see QuantizedMeshTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction HeightmapTerrainData(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.buffer)) {\n throw new DeveloperError(\"options.buffer is required.\");\n }\n if (!defined(options.width)) {\n throw new DeveloperError(\"options.width is required.\");\n }\n if (!defined(options.height)) {\n throw new DeveloperError(\"options.height is required.\");\n }\n //>>includeEnd('debug');\n\n this._buffer = options.buffer;\n this._width = options.width;\n this._height = options.height;\n this._childTileMask = defaultValue(options.childTileMask, 15);\n this._encoding = defaultValue(options.encoding, HeightmapEncoding.NONE);\n\n var defaultStructure = HeightmapTessellator.DEFAULT_STRUCTURE;\n var structure = options.structure;\n if (!defined(structure)) {\n structure = defaultStructure;\n } else if (structure !== defaultStructure) {\n structure.heightScale = defaultValue(\n structure.heightScale,\n defaultStructure.heightScale\n );\n structure.heightOffset = defaultValue(\n structure.heightOffset,\n defaultStructure.heightOffset\n );\n structure.elementsPerHeight = defaultValue(\n structure.elementsPerHeight,\n defaultStructure.elementsPerHeight\n );\n structure.stride = defaultValue(structure.stride, defaultStructure.stride);\n structure.elementMultiplier = defaultValue(\n structure.elementMultiplier,\n defaultStructure.elementMultiplier\n );\n structure.isBigEndian = defaultValue(\n structure.isBigEndian,\n defaultStructure.isBigEndian\n );\n }\n\n this._structure = structure;\n this._createdByUpsampling = defaultValue(options.createdByUpsampling, false);\n this._waterMask = options.waterMask;\n\n this._skirtHeight = undefined;\n this._bufferType =\n this._encoding === HeightmapEncoding.LERC\n ? Float32Array\n : this._buffer.constructor;\n this._mesh = undefined;\n}\n\nObject.defineProperties(HeightmapTerrainData.prototype, {\n /**\n * An array of credits for this tile.\n * @memberof HeightmapTerrainData.prototype\n * @type {Credit[]}\n */\n credits: {\n get: function () {\n return undefined;\n },\n },\n /**\n * The water mask included in this terrain data, if any. A water mask is a square\n * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @memberof HeightmapTerrainData.prototype\n * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement}\n */\n waterMask: {\n get: function () {\n return this._waterMask;\n },\n },\n\n childTileMask: {\n get: function () {\n return this._childTileMask;\n },\n },\n});\n\nvar taskProcessor = new TaskProcessor(\"createVerticesFromHeightmap\");\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme to which this tile belongs.\n * @param {Number} x The X coordinate of the tile for which to create the terrain data.\n * @param {Number} y The Y coordinate of the tile for which to create the terrain data.\n * @param {Number} level The level of the tile for which to create the terrain data.\n * @param {Number} [exaggeration=1.0] The scale used to exaggerate the terrain.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n * asynchronous mesh creations are already in progress and the operation should\n * be retried later.\n */\nHeightmapTerrainData.prototype.createMesh = function (\n tilingScheme,\n x,\n y,\n level,\n exaggeration\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n if (!defined(x)) {\n throw new DeveloperError(\"x is required.\");\n }\n if (!defined(y)) {\n throw new DeveloperError(\"y is required.\");\n }\n if (!defined(level)) {\n throw new DeveloperError(\"level is required.\");\n }\n //>>includeEnd('debug');\n\n var ellipsoid = tilingScheme.ellipsoid;\n var nativeRectangle = tilingScheme.tileXYToNativeRectangle(x, y, level);\n var rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n exaggeration = defaultValue(exaggeration, 1.0);\n\n // Compute the center of the tile for RTC rendering.\n var center = ellipsoid.cartographicToCartesian(Rectangle.center(rectangle));\n\n var structure = this._structure;\n\n var levelZeroMaxError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n ellipsoid,\n this._width,\n tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n var thisLevelMaxError = levelZeroMaxError / (1 << level);\n this._skirtHeight = Math.min(thisLevelMaxError * 4.0, 1000.0);\n\n var verticesPromise = taskProcessor.scheduleTask({\n heightmap: this._buffer,\n structure: structure,\n includeWebMercatorT: true,\n width: this._width,\n height: this._height,\n nativeRectangle: nativeRectangle,\n rectangle: rectangle,\n relativeToCenter: center,\n ellipsoid: ellipsoid,\n skirtHeight: this._skirtHeight,\n isGeographic: tilingScheme.projection instanceof GeographicProjection,\n exaggeration: exaggeration,\n encoding: this._encoding,\n });\n\n if (!defined(verticesPromise)) {\n // Postponed\n return undefined;\n }\n\n var that = this;\n return when(verticesPromise, function (result) {\n var indicesAndEdges;\n if (that._skirtHeight > 0.0) {\n indicesAndEdges = TerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices(\n result.gridWidth,\n result.gridHeight\n );\n } else {\n indicesAndEdges = TerrainProvider.getRegularGridIndicesAndEdgeIndices(\n result.gridWidth,\n result.gridHeight\n );\n }\n\n var vertexCountWithoutSkirts = result.gridWidth * result.gridHeight;\n\n // Clone complex result objects because the transfer from the web worker\n // has stripped them down to JSON-style objects.\n that._mesh = new TerrainMesh(\n center,\n new Float32Array(result.vertices),\n indicesAndEdges.indices,\n indicesAndEdges.indexCountWithoutSkirts,\n vertexCountWithoutSkirts,\n result.minimumHeight,\n result.maximumHeight,\n BoundingSphere.clone(result.boundingSphere3D),\n Cartesian3.clone(result.occludeePointInScaledSpace),\n result.numberOfAttributes,\n OrientedBoundingBox.clone(result.orientedBoundingBox),\n TerrainEncoding.clone(result.encoding),\n exaggeration,\n indicesAndEdges.westIndicesSouthToNorth,\n indicesAndEdges.southIndicesEastToWest,\n indicesAndEdges.eastIndicesNorthToSouth,\n indicesAndEdges.northIndicesWestToEast\n );\n\n // Free memory received from server after mesh is created.\n that._buffer = undefined;\n return that._mesh;\n });\n};\n\n/**\n * @private\n */\nHeightmapTerrainData.prototype._createMeshSync = function (\n tilingScheme,\n x,\n y,\n level,\n exaggeration\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n if (!defined(x)) {\n throw new DeveloperError(\"x is required.\");\n }\n if (!defined(y)) {\n throw new DeveloperError(\"y is required.\");\n }\n if (!defined(level)) {\n throw new DeveloperError(\"level is required.\");\n }\n //>>includeEnd('debug');\n\n var ellipsoid = tilingScheme.ellipsoid;\n var nativeRectangle = tilingScheme.tileXYToNativeRectangle(x, y, level);\n var rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n exaggeration = defaultValue(exaggeration, 1.0);\n\n // Compute the center of the tile for RTC rendering.\n var center = ellipsoid.cartographicToCartesian(Rectangle.center(rectangle));\n\n var structure = this._structure;\n\n var levelZeroMaxError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n ellipsoid,\n this._width,\n tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n var thisLevelMaxError = levelZeroMaxError / (1 << level);\n this._skirtHeight = Math.min(thisLevelMaxError * 4.0, 1000.0);\n\n var result = HeightmapTessellator.computeVertices({\n heightmap: this._buffer,\n structure: structure,\n includeWebMercatorT: true,\n width: this._width,\n height: this._height,\n nativeRectangle: nativeRectangle,\n rectangle: rectangle,\n relativeToCenter: center,\n ellipsoid: ellipsoid,\n skirtHeight: this._skirtHeight,\n isGeographic: tilingScheme.projection instanceof GeographicProjection,\n exaggeration: exaggeration,\n });\n\n // Free memory received from server after mesh is created.\n this._buffer = undefined;\n\n var indicesAndEdges;\n if (this._skirtHeight > 0.0) {\n indicesAndEdges = TerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices(\n this._width,\n this._height\n );\n } else {\n indicesAndEdges = TerrainProvider.getRegularGridIndicesAndEdgeIndices(\n this._width,\n this._height\n );\n }\n\n var vertexCountWithoutSkirts = result.gridWidth * result.gridHeight;\n\n // No need to clone here (as we do in the async version) because the result\n // is not coming from a web worker.\n return new TerrainMesh(\n center,\n result.vertices,\n indicesAndEdges.indices,\n indicesAndEdges.indexCountWithoutSkirts,\n vertexCountWithoutSkirts,\n result.minimumHeight,\n result.maximumHeight,\n result.boundingSphere3D,\n result.occludeePointInScaledSpace,\n result.encoding.getStride(),\n result.orientedBoundingBox,\n result.encoding,\n exaggeration,\n indicesAndEdges.westIndicesSouthToNorth,\n indicesAndEdges.southIndicesEastToWest,\n indicesAndEdges.eastIndicesNorthToSouth,\n indicesAndEdges.northIndicesWestToEast\n );\n};\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {Number} longitude The longitude in radians.\n * @param {Number} latitude The latitude in radians.\n * @returns {Number} The terrain height at the specified position. If the position\n * is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n * incorrect for positions far outside the rectangle.\n */\nHeightmapTerrainData.prototype.interpolateHeight = function (\n rectangle,\n longitude,\n latitude\n) {\n var width = this._width;\n var height = this._height;\n\n var structure = this._structure;\n var stride = structure.stride;\n var elementsPerHeight = structure.elementsPerHeight;\n var elementMultiplier = structure.elementMultiplier;\n var isBigEndian = structure.isBigEndian;\n var heightOffset = structure.heightOffset;\n var heightScale = structure.heightScale;\n\n var heightSample;\n if (defined(this._mesh)) {\n var buffer = this._mesh.vertices;\n var encoding = this._mesh.encoding;\n var exaggeration = this._mesh.exaggeration;\n heightSample = interpolateMeshHeight(\n buffer,\n encoding,\n heightOffset,\n heightScale,\n rectangle,\n width,\n height,\n longitude,\n latitude,\n exaggeration\n );\n } else {\n heightSample = interpolateHeight(\n this._buffer,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n rectangle,\n width,\n height,\n longitude,\n latitude\n );\n heightSample = heightSample * heightScale + heightOffset;\n }\n\n return heightSample;\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the\n * height samples in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {Number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {Number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {Number} thisLevel The level of this tile in the tiling scheme.\n * @param {Number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<HeightmapTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n * or undefined if too many asynchronous upsample operations are in progress and the request has been\n * deferred.\n */\nHeightmapTerrainData.prototype.upsample = function (\n tilingScheme,\n thisX,\n thisY,\n thisLevel,\n descendantX,\n descendantY,\n descendantLevel\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n if (!defined(thisX)) {\n throw new DeveloperError(\"thisX is required.\");\n }\n if (!defined(thisY)) {\n throw new DeveloperError(\"thisY is required.\");\n }\n if (!defined(thisLevel)) {\n throw new DeveloperError(\"thisLevel is required.\");\n }\n if (!defined(descendantX)) {\n throw new DeveloperError(\"descendantX is required.\");\n }\n if (!defined(descendantY)) {\n throw new DeveloperError(\"descendantY is required.\");\n }\n if (!defined(descendantLevel)) {\n throw new DeveloperError(\"descendantLevel is required.\");\n }\n var levelDifference = descendantLevel - thisLevel;\n if (levelDifference > 1) {\n throw new DeveloperError(\n \"Upsampling through more than one level at a time is not currently supported.\"\n );\n }\n //>>includeEnd('debug');\n\n var meshData = this._mesh;\n if (!defined(meshData)) {\n return undefined;\n }\n\n var width = this._width;\n var height = this._height;\n var structure = this._structure;\n var stride = structure.stride;\n\n var heights = new this._bufferType(width * height * stride);\n\n var buffer = meshData.vertices;\n var encoding = meshData.encoding;\n\n // PERFORMANCE_IDEA: don't recompute these rectangles - the caller already knows them.\n var sourceRectangle = tilingScheme.tileXYToRectangle(thisX, thisY, thisLevel);\n var destinationRectangle = tilingScheme.tileXYToRectangle(\n descendantX,\n descendantY,\n descendantLevel\n );\n\n var heightOffset = structure.heightOffset;\n var heightScale = structure.heightScale;\n var exaggeration = meshData.exaggeration;\n\n var elementsPerHeight = structure.elementsPerHeight;\n var elementMultiplier = structure.elementMultiplier;\n var isBigEndian = structure.isBigEndian;\n\n var divisor = Math.pow(elementMultiplier, elementsPerHeight - 1);\n\n for (var j = 0; j < height; ++j) {\n var latitude = CesiumMath.lerp(\n destinationRectangle.north,\n destinationRectangle.south,\n j / (height - 1)\n );\n for (var i = 0; i < width; ++i) {\n var longitude = CesiumMath.lerp(\n destinationRectangle.west,\n destinationRectangle.east,\n i / (width - 1)\n );\n var heightSample = interpolateMeshHeight(\n buffer,\n encoding,\n heightOffset,\n heightScale,\n sourceRectangle,\n width,\n height,\n longitude,\n latitude,\n exaggeration\n );\n\n // Use conditionals here instead of Math.min and Math.max so that an undefined\n // lowestEncodedHeight or highestEncodedHeight has no effect.\n heightSample =\n heightSample < structure.lowestEncodedHeight\n ? structure.lowestEncodedHeight\n : heightSample;\n heightSample =\n heightSample > structure.highestEncodedHeight\n ? structure.highestEncodedHeight\n : heightSample;\n\n setHeight(\n heights,\n elementsPerHeight,\n elementMultiplier,\n divisor,\n stride,\n isBigEndian,\n j * width + i,\n heightSample\n );\n }\n }\n\n return new HeightmapTerrainData({\n buffer: heights,\n width: width,\n height: height,\n childTileMask: 0,\n structure: this._structure,\n createdByUpsampling: true,\n });\n};\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {Number} thisX The tile X coordinate of this (the parent) tile.\n * @param {Number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {Number} childX The tile X coordinate of the child tile to check for availability.\n * @param {Number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {Boolean} True if the child tile is available; otherwise, false.\n */\nHeightmapTerrainData.prototype.isChildAvailable = function (\n thisX,\n thisY,\n childX,\n childY\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(thisX)) {\n throw new DeveloperError(\"thisX is required.\");\n }\n if (!defined(thisY)) {\n throw new DeveloperError(\"thisY is required.\");\n }\n if (!defined(childX)) {\n throw new DeveloperError(\"childX is required.\");\n }\n if (!defined(childY)) {\n throw new DeveloperError(\"childY is required.\");\n }\n //>>includeEnd('debug');\n\n var bitNumber = 2; // northwest child\n if (childX !== thisX * 2) {\n ++bitNumber; // east child\n }\n if (childY !== thisY * 2) {\n bitNumber -= 2; // south child\n }\n\n return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {Boolean} True if this instance was created by upsampling; otherwise, false.\n */\nHeightmapTerrainData.prototype.wasCreatedByUpsampling = function () {\n return this._createdByUpsampling;\n};\n\nfunction interpolateHeight(\n sourceHeights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n sourceRectangle,\n width,\n height,\n longitude,\n latitude\n) {\n var fromWest =\n ((longitude - sourceRectangle.west) * (width - 1)) /\n (sourceRectangle.east - sourceRectangle.west);\n var fromSouth =\n ((latitude - sourceRectangle.south) * (height - 1)) /\n (sourceRectangle.north - sourceRectangle.south);\n\n var westInteger = fromWest | 0;\n var eastInteger = westInteger + 1;\n if (eastInteger >= width) {\n eastInteger = width - 1;\n westInteger = width - 2;\n }\n\n var southInteger = fromSouth | 0;\n var northInteger = southInteger + 1;\n if (northInteger >= height) {\n northInteger = height - 1;\n southInteger = height - 2;\n }\n\n var dx = fromWest - westInteger;\n var dy = fromSouth - southInteger;\n\n southInteger = height - 1 - southInteger;\n northInteger = height - 1 - northInteger;\n\n var southwestHeight = getHeight(\n sourceHeights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n southInteger * width + westInteger\n );\n var southeastHeight = getHeight(\n sourceHeights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n southInteger * width + eastInteger\n );\n var northwestHeight = getHeight(\n sourceHeights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n northInteger * width + westInteger\n );\n var northeastHeight = getHeight(\n sourceHeights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n northInteger * width + eastInteger\n );\n\n return triangleInterpolateHeight(\n dx,\n dy,\n southwestHeight,\n southeastHeight,\n northwestHeight,\n northeastHeight\n );\n}\n\nfunction interpolateMeshHeight(\n buffer,\n encoding,\n heightOffset,\n heightScale,\n sourceRectangle,\n width,\n height,\n longitude,\n latitude,\n exaggeration\n) {\n // returns a height encoded according to the structure's heightScale and heightOffset.\n var fromWest =\n ((longitude - sourceRectangle.west) * (width - 1)) /\n (sourceRectangle.east - sourceRectangle.west);\n var fromSouth =\n ((latitude - sourceRectangle.south) * (height - 1)) /\n (sourceRectangle.north - sourceRectangle.south);\n\n var westInteger = fromWest | 0;\n var eastInteger = westInteger + 1;\n if (eastInteger >= width) {\n eastInteger = width - 1;\n westInteger = width - 2;\n }\n\n var southInteger = fromSouth | 0;\n var northInteger = southInteger + 1;\n if (northInteger >= height) {\n northInteger = height - 1;\n southInteger = height - 2;\n }\n\n var dx = fromWest - westInteger;\n var dy = fromSouth - southInteger;\n\n southInteger = height - 1 - southInteger;\n northInteger = height - 1 - northInteger;\n\n var southwestHeight =\n (encoding.decodeHeight(buffer, southInteger * width + westInteger) /\n exaggeration -\n heightOffset) /\n heightScale;\n var southeastHeight =\n (encoding.decodeHeight(buffer, southInteger * width + eastInteger) /\n exaggeration -\n heightOffset) /\n heightScale;\n var northwestHeight =\n (encoding.decodeHeight(buffer, northInteger * width + westInteger) /\n exaggeration -\n heightOffset) /\n heightScale;\n var northeastHeight =\n (encoding.decodeHeight(buffer, northInteger * width + eastInteger) /\n exaggeration -\n heightOffset) /\n heightScale;\n\n return triangleInterpolateHeight(\n dx,\n dy,\n southwestHeight,\n southeastHeight,\n northwestHeight,\n northeastHeight\n );\n}\n\nfunction triangleInterpolateHeight(\n dX,\n dY,\n southwestHeight,\n southeastHeight,\n northwestHeight,\n northeastHeight\n) {\n // The HeightmapTessellator bisects the quad from southwest to northeast.\n if (dY < dX) {\n // Lower right triangle\n return (\n southwestHeight +\n dX * (southeastHeight - southwestHeight) +\n dY * (northeastHeight - southeastHeight)\n );\n }\n\n // Upper left triangle\n return (\n southwestHeight +\n dX * (northeastHeight - northwestHeight) +\n dY * (northwestHeight - southwestHeight)\n );\n}\n\nfunction getHeight(\n heights,\n elementsPerHeight,\n elementMultiplier,\n stride,\n isBigEndian,\n index\n) {\n index *= stride;\n\n var height = 0;\n var i;\n\n if (isBigEndian) {\n for (i = 0; i < elementsPerHeight; ++i) {\n height = height * elementMultiplier + heights[index + i];\n }\n } else {\n for (i = elementsPerHeight - 1; i >= 0; --i) {\n height = height * elementMultiplier + heights[index + i];\n }\n }\n\n return height;\n}\n\nfunction setHeight(\n heights,\n elementsPerHeight,\n elementMultiplier,\n divisor,\n stride,\n isBigEndian,\n index,\n height\n) {\n index *= stride;\n\n var i;\n if (isBigEndian) {\n for (i = 0; i < elementsPerHeight - 1; ++i) {\n heights[index + i] = (height / divisor) | 0;\n height -= heights[index + i] * divisor;\n divisor /= elementMultiplier;\n }\n } else {\n for (i = elementsPerHeight - 1; i > 0; --i) {\n heights[index + i] = (height / divisor) | 0;\n height -= heights[index + i] * divisor;\n divisor /= elementMultiplier;\n }\n }\n heights[index + i] = height;\n}\nexport default HeightmapTerrainData;\n","import binarySearch from \"./binarySearch.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Reports the availability of tiles in a {@link TilingScheme}.\n *\n * @alias TileAvailability\n * @constructor\n *\n * @param {TilingScheme} tilingScheme The tiling scheme in which to report availability.\n * @param {Number} maximumLevel The maximum tile level that is potentially available.\n */\nfunction TileAvailability(tilingScheme, maximumLevel) {\n this._tilingScheme = tilingScheme;\n this._maximumLevel = maximumLevel;\n\n this._rootNodes = [];\n}\n\nvar rectangleScratch = new Rectangle();\n\nfunction findNode(level, x, y, nodes) {\n var count = nodes.length;\n for (var i = 0; i < count; ++i) {\n var node = nodes[i];\n if (node.x === x && node.y === y && node.level === level) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Marks a rectangular range of tiles in a particular level as being available. For best performance,\n * add your ranges in order of increasing level.\n *\n * @param {Number} level The level.\n * @param {Number} startX The X coordinate of the first available tiles at the level.\n * @param {Number} startY The Y coordinate of the first available tiles at the level.\n * @param {Number} endX The X coordinate of the last available tiles at the level.\n * @param {Number} endY The Y coordinate of the last available tiles at the level.\n */\nTileAvailability.prototype.addAvailableTileRange = function (\n level,\n startX,\n startY,\n endX,\n endY\n) {\n var tilingScheme = this._tilingScheme;\n\n var rootNodes = this._rootNodes;\n if (level === 0) {\n for (var y = startY; y <= endY; ++y) {\n for (var x = startX; x <= endX; ++x) {\n if (!findNode(level, x, y, rootNodes)) {\n rootNodes.push(new QuadtreeNode(tilingScheme, undefined, 0, x, y));\n }\n }\n }\n }\n\n tilingScheme.tileXYToRectangle(startX, startY, level, rectangleScratch);\n var west = rectangleScratch.west;\n var north = rectangleScratch.north;\n\n tilingScheme.tileXYToRectangle(endX, endY, level, rectangleScratch);\n var east = rectangleScratch.east;\n var south = rectangleScratch.south;\n\n var rectangleWithLevel = new RectangleWithLevel(\n level,\n west,\n south,\n east,\n north\n );\n\n for (var i = 0; i < rootNodes.length; ++i) {\n var rootNode = rootNodes[i];\n if (rectanglesOverlap(rootNode.extent, rectangleWithLevel)) {\n putRectangleInQuadtree(this._maximumLevel, rootNode, rectangleWithLevel);\n }\n }\n};\n\n/**\n * Determines the level of the most detailed tile covering the position. This function\n * usually completes in time logarithmic to the number of rectangles added with\n * {@link TileAvailability#addAvailableTileRange}.\n *\n * @param {Cartographic} position The position for which to determine the maximum available level. The height component is ignored.\n * @return {Number} The level of the most detailed tile covering the position.\n * @throws {DeveloperError} If position is outside any tile according to the tiling scheme.\n */\nTileAvailability.prototype.computeMaximumLevelAtPosition = function (position) {\n // Find the root node that contains this position.\n var node;\n for (var nodeIndex = 0; nodeIndex < this._rootNodes.length; ++nodeIndex) {\n var rootNode = this._rootNodes[nodeIndex];\n if (rectangleContainsPosition(rootNode.extent, position)) {\n node = rootNode;\n break;\n }\n }\n\n if (!defined(node)) {\n return -1;\n }\n\n return findMaxLevelFromNode(undefined, node, position);\n};\n\nvar rectanglesScratch = [];\nvar remainingToCoverByLevelScratch = [];\nvar westScratch = new Rectangle();\nvar eastScratch = new Rectangle();\n\n/**\n * Finds the most detailed level that is available _everywhere_ within a given rectangle. More detailed\n * tiles may be available in parts of the rectangle, but not the whole thing. The return value of this\n * function may be safely passed to {@link sampleTerrain} for any position within the rectangle. This function\n * usually completes in time logarithmic to the number of rectangles added with\n * {@link TileAvailability#addAvailableTileRange}.\n *\n * @param {Rectangle} rectangle The rectangle.\n * @return {Number} The best available level for the entire rectangle.\n */\nTileAvailability.prototype.computeBestAvailableLevelOverRectangle = function (\n rectangle\n) {\n var rectangles = rectanglesScratch;\n rectangles.length = 0;\n\n if (rectangle.east < rectangle.west) {\n // Rectangle crosses the IDL, make it two rectangles.\n rectangles.push(\n Rectangle.fromRadians(\n -Math.PI,\n rectangle.south,\n rectangle.east,\n rectangle.north,\n westScratch\n )\n );\n rectangles.push(\n Rectangle.fromRadians(\n rectangle.west,\n rectangle.south,\n Math.PI,\n rectangle.north,\n eastScratch\n )\n );\n } else {\n rectangles.push(rectangle);\n }\n\n var remainingToCoverByLevel = remainingToCoverByLevelScratch;\n remainingToCoverByLevel.length = 0;\n\n var i;\n for (i = 0; i < this._rootNodes.length; ++i) {\n updateCoverageWithNode(\n remainingToCoverByLevel,\n this._rootNodes[i],\n rectangles\n );\n }\n\n for (i = remainingToCoverByLevel.length - 1; i >= 0; --i) {\n if (\n defined(remainingToCoverByLevel[i]) &&\n remainingToCoverByLevel[i].length === 0\n ) {\n return i;\n }\n }\n\n return 0;\n};\n\nvar cartographicScratch = new Cartographic();\n\n/**\n * Determines if a particular tile is available.\n * @param {Number} level The tile level to check.\n * @param {Number} x The X coordinate of the tile to check.\n * @param {Number} y The Y coordinate of the tile to check.\n * @return {Boolean} True if the tile is available; otherwise, false.\n */\nTileAvailability.prototype.isTileAvailable = function (level, x, y) {\n // Get the center of the tile and find the maximum level at that position.\n // Because availability is by tile, if the level is available at that point, it\n // is sure to be available for the whole tile. We assume that if a tile at level n exists,\n // then all its parent tiles back to level 0 exist too. This isn't really enforced\n // anywhere, but Cesium would never load a tile for which this is not true.\n var rectangle = this._tilingScheme.tileXYToRectangle(\n x,\n y,\n level,\n rectangleScratch\n );\n Rectangle.center(rectangle, cartographicScratch);\n return this.computeMaximumLevelAtPosition(cartographicScratch) >= level;\n};\n\n/**\n * Computes a bit mask indicating which of a tile's four children exist.\n * If a child's bit is set, a tile is available for that child. If it is cleared,\n * the tile is not available. The bit values are as follows:\n * <table>\n * <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n * <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n * <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n * <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n * <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n * </table>\n *\n * @param {Number} level The level of the parent tile.\n * @param {Number} x The X coordinate of the parent tile.\n * @param {Number} y The Y coordinate of the parent tile.\n * @return {Number} The bit mask indicating child availability.\n */\nTileAvailability.prototype.computeChildMaskForTile = function (level, x, y) {\n var childLevel = level + 1;\n if (childLevel >= this._maximumLevel) {\n return 0;\n }\n\n var mask = 0;\n\n mask |= this.isTileAvailable(childLevel, 2 * x, 2 * y + 1) ? 1 : 0;\n mask |= this.isTileAvailable(childLevel, 2 * x + 1, 2 * y + 1) ? 2 : 0;\n mask |= this.isTileAvailable(childLevel, 2 * x, 2 * y) ? 4 : 0;\n mask |= this.isTileAvailable(childLevel, 2 * x + 1, 2 * y) ? 8 : 0;\n\n return mask;\n};\n\nfunction QuadtreeNode(tilingScheme, parent, level, x, y) {\n this.tilingScheme = tilingScheme;\n this.parent = parent;\n this.level = level;\n this.x = x;\n this.y = y;\n this.extent = tilingScheme.tileXYToRectangle(x, y, level);\n\n this.rectangles = [];\n this._sw = undefined;\n this._se = undefined;\n this._nw = undefined;\n this._ne = undefined;\n}\n\nObject.defineProperties(QuadtreeNode.prototype, {\n nw: {\n get: function () {\n if (!this._nw) {\n this._nw = new QuadtreeNode(\n this.tilingScheme,\n this,\n this.level + 1,\n this.x * 2,\n this.y * 2\n );\n }\n return this._nw;\n },\n },\n\n ne: {\n get: function () {\n if (!this._ne) {\n this._ne = new QuadtreeNode(\n this.tilingScheme,\n this,\n this.level + 1,\n this.x * 2 + 1,\n this.y * 2\n );\n }\n return this._ne;\n },\n },\n\n sw: {\n get: function () {\n if (!this._sw) {\n this._sw = new QuadtreeNode(\n this.tilingScheme,\n this,\n this.level + 1,\n this.x * 2,\n this.y * 2 + 1\n );\n }\n return this._sw;\n },\n },\n\n se: {\n get: function () {\n if (!this._se) {\n this._se = new QuadtreeNode(\n this.tilingScheme,\n this,\n this.level + 1,\n this.x * 2 + 1,\n this.y * 2 + 1\n );\n }\n return this._se;\n },\n },\n});\n\nfunction RectangleWithLevel(level, west, south, east, north) {\n this.level = level;\n this.west = west;\n this.south = south;\n this.east = east;\n this.north = north;\n}\n\nfunction rectanglesOverlap(rectangle1, rectangle2) {\n var west = Math.max(rectangle1.west, rectangle2.west);\n var south = Math.max(rectangle1.south, rectangle2.south);\n var east = Math.min(rectangle1.east, rectangle2.east);\n var north = Math.min(rectangle1.north, rectangle2.north);\n return south < north && west < east;\n}\n\nfunction putRectangleInQuadtree(maxDepth, node, rectangle) {\n while (node.level < maxDepth) {\n if (rectangleFullyContainsRectangle(node.nw.extent, rectangle)) {\n node = node.nw;\n } else if (rectangleFullyContainsRectangle(node.ne.extent, rectangle)) {\n node = node.ne;\n } else if (rectangleFullyContainsRectangle(node.sw.extent, rectangle)) {\n node = node.sw;\n } else if (rectangleFullyContainsRectangle(node.se.extent, rectangle)) {\n node = node.se;\n } else {\n break;\n }\n }\n\n if (\n node.rectangles.length === 0 ||\n node.rectangles[node.rectangles.length - 1].level <= rectangle.level\n ) {\n node.rectangles.push(rectangle);\n } else {\n // Maintain ordering by level when inserting.\n var index = binarySearch(\n node.rectangles,\n rectangle.level,\n rectangleLevelComparator\n );\n if (index <= 0) {\n index = ~index;\n }\n node.rectangles.splice(index, 0, rectangle);\n }\n}\n\nfunction rectangleLevelComparator(a, b) {\n return a.level - b;\n}\n\nfunction rectangleFullyContainsRectangle(potentialContainer, rectangleToTest) {\n return (\n rectangleToTest.west >= potentialContainer.west &&\n rectangleToTest.east <= potentialContainer.east &&\n rectangleToTest.south >= potentialContainer.south &&\n rectangleToTest.north <= potentialContainer.north\n );\n}\n\nfunction rectangleContainsPosition(potentialContainer, positionToTest) {\n return (\n positionToTest.longitude >= potentialContainer.west &&\n positionToTest.longitude <= potentialContainer.east &&\n positionToTest.latitude >= potentialContainer.south &&\n positionToTest.latitude <= potentialContainer.north\n );\n}\n\nfunction findMaxLevelFromNode(stopNode, node, position) {\n var maxLevel = 0;\n\n // Find the deepest quadtree node containing this point.\n var found = false;\n while (!found) {\n var nw = node._nw && rectangleContainsPosition(node._nw.extent, position);\n var ne = node._ne && rectangleContainsPosition(node._ne.extent, position);\n var sw = node._sw && rectangleContainsPosition(node._sw.extent, position);\n var se = node._se && rectangleContainsPosition(node._se.extent, position);\n\n // The common scenario is that the point is in only one quadrant and we can simply\n // iterate down the tree. But if the point is on a boundary between tiles, it is\n // in multiple tiles and we need to check all of them, so use recursion.\n if (nw + ne + sw + se > 1) {\n if (nw) {\n maxLevel = Math.max(\n maxLevel,\n findMaxLevelFromNode(node, node._nw, position)\n );\n }\n if (ne) {\n maxLevel = Math.max(\n maxLevel,\n findMaxLevelFromNode(node, node._ne, position)\n );\n }\n if (sw) {\n maxLevel = Math.max(\n maxLevel,\n findMaxLevelFromNode(node, node._sw, position)\n );\n }\n if (se) {\n maxLevel = Math.max(\n maxLevel,\n findMaxLevelFromNode(node, node._se, position)\n );\n }\n break;\n } else if (nw) {\n node = node._nw;\n } else if (ne) {\n node = node._ne;\n } else if (sw) {\n node = node._sw;\n } else if (se) {\n node = node._se;\n } else {\n found = true;\n }\n }\n\n // Work up the tree until we find a rectangle that contains this point.\n while (node !== stopNode) {\n var rectangles = node.rectangles;\n\n // Rectangles are sorted by level, lowest first.\n for (\n var i = rectangles.length - 1;\n i >= 0 && rectangles[i].level > maxLevel;\n --i\n ) {\n var rectangle = rectangles[i];\n if (rectangleContainsPosition(rectangle, position)) {\n maxLevel = rectangle.level;\n }\n }\n\n node = node.parent;\n }\n\n return maxLevel;\n}\n\nfunction updateCoverageWithNode(\n remainingToCoverByLevel,\n node,\n rectanglesToCover\n) {\n if (!node) {\n return;\n }\n\n var i;\n var anyOverlap = false;\n for (i = 0; i < rectanglesToCover.length; ++i) {\n anyOverlap =\n anyOverlap || rectanglesOverlap(node.extent, rectanglesToCover[i]);\n }\n\n if (!anyOverlap) {\n // This node is not applicable to the rectangle(s).\n return;\n }\n\n var rectangles = node.rectangles;\n for (i = 0; i < rectangles.length; ++i) {\n var rectangle = rectangles[i];\n\n if (!remainingToCoverByLevel[rectangle.level]) {\n remainingToCoverByLevel[rectangle.level] = rectanglesToCover;\n }\n\n remainingToCoverByLevel[rectangle.level] = subtractRectangle(\n remainingToCoverByLevel[rectangle.level],\n rectangle\n );\n }\n\n // Update with child nodes.\n updateCoverageWithNode(remainingToCoverByLevel, node._nw, rectanglesToCover);\n updateCoverageWithNode(remainingToCoverByLevel, node._ne, rectanglesToCover);\n updateCoverageWithNode(remainingToCoverByLevel, node._sw, rectanglesToCover);\n updateCoverageWithNode(remainingToCoverByLevel, node._se, rectanglesToCover);\n}\n\nfunction subtractRectangle(rectangleList, rectangleToSubtract) {\n var result = [];\n for (var i = 0; i < rectangleList.length; ++i) {\n var rectangle = rectangleList[i];\n if (!rectanglesOverlap(rectangle, rectangleToSubtract)) {\n // Disjoint rectangles. Original rectangle is unmodified.\n result.push(rectangle);\n } else {\n // rectangleToSubtract partially or completely overlaps rectangle.\n if (rectangle.west < rectangleToSubtract.west) {\n result.push(\n new Rectangle(\n rectangle.west,\n rectangle.south,\n rectangleToSubtract.west,\n rectangle.north\n )\n );\n }\n if (rectangle.east > rectangleToSubtract.east) {\n result.push(\n new Rectangle(\n rectangleToSubtract.east,\n rectangle.south,\n rectangle.east,\n rectangle.north\n )\n );\n }\n if (rectangle.south < rectangleToSubtract.south) {\n result.push(\n new Rectangle(\n Math.max(rectangleToSubtract.west, rectangle.west),\n rectangle.south,\n Math.min(rectangleToSubtract.east, rectangle.east),\n rectangleToSubtract.south\n )\n );\n }\n if (rectangle.north > rectangleToSubtract.north) {\n result.push(\n new Rectangle(\n Math.max(rectangleToSubtract.west, rectangle.west),\n rectangleToSubtract.north,\n Math.min(rectangleToSubtract.east, rectangle.east),\n rectangle.north\n )\n );\n }\n }\n }\n\n return result;\n}\nexport default TileAvailability;\n","import defined from \"./defined.js\";\n\n/**\n * Formats an error object into a String. If available, uses name, message, and stack\n * properties, otherwise, falls back on toString().\n *\n * @function\n *\n * @param {*} object The item to find in the array.\n * @returns {String} A string containing the formatted error.\n */\nfunction formatError(object) {\n var result;\n\n var name = object.name;\n var message = object.message;\n if (defined(name) && defined(message)) {\n result = name + \": \" + message;\n } else {\n result = object.toString();\n }\n\n var stack = object.stack;\n if (defined(stack)) {\n result += \"\\n\" + stack;\n }\n\n return result;\n}\nexport default formatError;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport formatError from \"./formatError.js\";\n\n/**\n * Provides details about an error that occurred in an {@link ImageryProvider} or a {@link TerrainProvider}.\n *\n * @alias TileProviderError\n * @constructor\n *\n * @param {ImageryProvider|TerrainProvider} provider The imagery or terrain provider that experienced the error.\n * @param {String} message A message describing the error.\n * @param {Number} [x] The X coordinate of the tile that experienced the error, or undefined if the error\n * is not specific to a particular tile.\n * @param {Number} [y] The Y coordinate of the tile that experienced the error, or undefined if the error\n * is not specific to a particular tile.\n * @param {Number} [level] The level of the tile that experienced the error, or undefined if the error\n * is not specific to a particular tile.\n * @param {Number} [timesRetried=0] The number of times this operation has been retried.\n * @param {Error} [error] The error or exception that occurred, if any.\n */\nfunction TileProviderError(\n provider,\n message,\n x,\n y,\n level,\n timesRetried,\n error\n) {\n /**\n * The {@link ImageryProvider} or {@link TerrainProvider} that experienced the error.\n * @type {ImageryProvider|TerrainProvider}\n */\n this.provider = provider;\n\n /**\n * The message describing the error.\n * @type {String}\n */\n this.message = message;\n\n /**\n * The X coordinate of the tile that experienced the error. If the error is not specific\n * to a particular tile, this property will be undefined.\n * @type {Number}\n */\n this.x = x;\n\n /**\n * The Y coordinate of the tile that experienced the error. If the error is not specific\n * to a particular tile, this property will be undefined.\n * @type {Number}\n */\n this.y = y;\n\n /**\n * The level-of-detail of the tile that experienced the error. If the error is not specific\n * to a particular tile, this property will be undefined.\n * @type {Number}\n */\n this.level = level;\n\n /**\n * The number of times this operation has been retried.\n * @type {Number}\n * @default 0\n */\n this.timesRetried = defaultValue(timesRetried, 0);\n\n /**\n * True if the failed operation should be retried; otherwise, false. The imagery or terrain provider\n * will set the initial value of this property before raising the event, but any listeners\n * can change it. The value after the last listener is invoked will be acted upon.\n * @type {Boolean}\n * @default false\n */\n this.retry = false;\n\n /**\n * The error or exception that occurred, if any.\n * @type {Error}\n */\n this.error = error;\n}\n\n/**\n * Handles an error in an {@link ImageryProvider} or {@link TerrainProvider} by raising an event if it has any listeners, or by\n * logging the error to the console if the event has no listeners. This method also tracks the number\n * of times the operation has been retried and will automatically retry if requested to do so by the\n * event listeners.\n *\n * @param {TileProviderError} previousError The error instance returned by this function the last\n * time it was called for this error, or undefined if this is the first time this error has\n * occurred.\n * @param {ImageryProvider|TerrainProvider} provider The imagery or terrain provider that encountered the error.\n * @param {Event} event The event to raise to inform listeners of the error.\n * @param {String} message The message describing the error.\n * @param {Number} x The X coordinate of the tile that experienced the error, or undefined if the\n * error is not specific to a particular tile.\n * @param {Number} y The Y coordinate of the tile that experienced the error, or undefined if the\n * error is not specific to a particular tile.\n * @param {Number} level The level-of-detail of the tile that experienced the error, or undefined if the\n * error is not specific to a particular tile.\n * @param {TileProviderError.RetryFunction} retryFunction The function to call to retry the operation. If undefined, the\n * operation will not be retried.\n * @param {Error} [errorDetails] The error or exception that occurred, if any.\n * @returns {TileProviderError} The error instance that was passed to the event listeners and that\n * should be passed to this function the next time it is called for the same error in order\n * to track retry counts.\n */\nTileProviderError.handleError = function (\n previousError,\n provider,\n event,\n message,\n x,\n y,\n level,\n retryFunction,\n errorDetails\n) {\n var error = previousError;\n if (!defined(previousError)) {\n error = new TileProviderError(\n provider,\n message,\n x,\n y,\n level,\n 0,\n errorDetails\n );\n } else {\n error.provider = provider;\n error.message = message;\n error.x = x;\n error.y = y;\n error.level = level;\n error.retry = false;\n error.error = errorDetails;\n ++error.timesRetried;\n }\n\n if (event.numberOfListeners > 0) {\n event.raiseEvent(error);\n } else {\n console.log(\n 'An error occurred in \"' +\n provider.constructor.name +\n '\": ' +\n formatError(message)\n );\n }\n\n if (error.retry && defined(retryFunction)) {\n retryFunction();\n }\n\n return error;\n};\n\n/**\n * Handles success of an operation by resetting the retry count of a previous error, if any. This way,\n * if the error occurs again in the future, the listeners will be informed that it has not yet been retried.\n *\n * @param {TileProviderError} previousError The previous error, or undefined if this operation has\n * not previously resulted in an error.\n */\nTileProviderError.handleSuccess = function (previousError) {\n if (defined(previousError)) {\n previousError.timesRetried = -1;\n }\n};\n\n/**\n * A function that will be called to retry the operation.\n * @callback TileProviderError.RetryFunction\n */\nexport default TileProviderError;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\n/**\n * A tiling scheme for geometry referenced to a {@link WebMercatorProjection}, EPSG:3857. This is\n * the tiling scheme used by Google Maps, Microsoft Bing Maps, and most of ESRI ArcGIS Online.\n *\n * @alias WebMercatorTilingScheme\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid whose surface is being tiled. Defaults to\n * the WGS84 ellipsoid.\n * @param {Number} [options.numberOfLevelZeroTilesX=1] The number of tiles in the X direction at level zero of\n * the tile tree.\n * @param {Number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of\n * the tile tree.\n * @param {Cartesian2} [options.rectangleSouthwestInMeters] The southwest corner of the rectangle covered by the\n * tiling scheme, in meters. If this parameter or rectangleNortheastInMeters is not specified, the entire\n * globe is covered in the longitude direction and an equal distance is covered in the latitude\n * direction, resulting in a square projection.\n * @param {Cartesian2} [options.rectangleNortheastInMeters] The northeast corner of the rectangle covered by the\n * tiling scheme, in meters. If this parameter or rectangleSouthwestInMeters is not specified, the entire\n * globe is covered in the longitude direction and an equal distance is covered in the latitude\n * direction, resulting in a square projection.\n */\nfunction WebMercatorTilingScheme(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._numberOfLevelZeroTilesX = defaultValue(\n options.numberOfLevelZeroTilesX,\n 1\n );\n this._numberOfLevelZeroTilesY = defaultValue(\n options.numberOfLevelZeroTilesY,\n 1\n );\n\n this._projection = new WebMercatorProjection(this._ellipsoid);\n\n if (\n defined(options.rectangleSouthwestInMeters) &&\n defined(options.rectangleNortheastInMeters)\n ) {\n this._rectangleSouthwestInMeters = options.rectangleSouthwestInMeters;\n this._rectangleNortheastInMeters = options.rectangleNortheastInMeters;\n } else {\n var semimajorAxisTimesPi = this._ellipsoid.maximumRadius * Math.PI;\n this._rectangleSouthwestInMeters = new Cartesian2(\n -semimajorAxisTimesPi,\n -semimajorAxisTimesPi\n );\n this._rectangleNortheastInMeters = new Cartesian2(\n semimajorAxisTimesPi,\n semimajorAxisTimesPi\n );\n }\n\n var southwest = this._projection.unproject(this._rectangleSouthwestInMeters);\n var northeast = this._projection.unproject(this._rectangleNortheastInMeters);\n this._rectangle = new Rectangle(\n southwest.longitude,\n southwest.latitude,\n northeast.longitude,\n northeast.latitude\n );\n}\n\nObject.defineProperties(WebMercatorTilingScheme.prototype, {\n /**\n * Gets the ellipsoid that is tiled by this tiling scheme.\n * @memberof WebMercatorTilingScheme.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Gets the rectangle, in radians, covered by this tiling scheme.\n * @memberof WebMercatorTilingScheme.prototype\n * @type {Rectangle}\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n\n /**\n * Gets the map projection used by this tiling scheme.\n * @memberof WebMercatorTilingScheme.prototype\n * @type {MapProjection}\n */\n projection: {\n get: function () {\n return this._projection;\n },\n },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the X direction at the given level.\n */\nWebMercatorTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) {\n return this._numberOfLevelZeroTilesX << level;\n};\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the Y direction at the given level.\n */\nWebMercatorTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) {\n return this._numberOfLevelZeroTilesY << level;\n};\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n * is undefined.\n */\nWebMercatorTilingScheme.prototype.rectangleToNativeRectangle = function (\n rectangle,\n result\n) {\n var projection = this._projection;\n var southwest = projection.project(Rectangle.southwest(rectangle));\n var northeast = projection.project(Rectangle.northeast(rectangle));\n\n if (!defined(result)) {\n return new Rectangle(southwest.x, southwest.y, northeast.x, northeast.y);\n }\n\n result.west = southwest.x;\n result.south = southwest.y;\n result.east = northeast.x;\n result.north = northeast.y;\n return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.tileXYToNativeRectangle = function (\n x,\n y,\n level,\n result\n) {\n var xTiles = this.getNumberOfXTilesAtLevel(level);\n var yTiles = this.getNumberOfYTilesAtLevel(level);\n\n var xTileWidth =\n (this._rectangleNortheastInMeters.x - this._rectangleSouthwestInMeters.x) /\n xTiles;\n var west = this._rectangleSouthwestInMeters.x + x * xTileWidth;\n var east = this._rectangleSouthwestInMeters.x + (x + 1) * xTileWidth;\n\n var yTileHeight =\n (this._rectangleNortheastInMeters.y - this._rectangleSouthwestInMeters.y) /\n yTiles;\n var north = this._rectangleNortheastInMeters.y - y * yTileHeight;\n var south = this._rectangleNortheastInMeters.y - (y + 1) * yTileHeight;\n\n if (!defined(result)) {\n return new Rectangle(west, south, east, north);\n }\n\n result.west = west;\n result.south = south;\n result.east = east;\n result.north = north;\n return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.tileXYToRectangle = function (\n x,\n y,\n level,\n result\n) {\n var nativeRectangle = this.tileXYToNativeRectangle(x, y, level, result);\n\n var projection = this._projection;\n var southwest = projection.unproject(\n new Cartesian2(nativeRectangle.west, nativeRectangle.south)\n );\n var northeast = projection.unproject(\n new Cartesian2(nativeRectangle.east, nativeRectangle.north)\n );\n\n nativeRectangle.west = southwest.longitude;\n nativeRectangle.south = southwest.latitude;\n nativeRectangle.east = northeast.longitude;\n nativeRectangle.north = northeast.latitude;\n return nativeRectangle;\n};\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n *\n * @param {Cartographic} position The position.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n * if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.positionToTileXY = function (\n position,\n level,\n result\n) {\n var rectangle = this._rectangle;\n if (!Rectangle.contains(rectangle, position)) {\n // outside the bounds of the tiling scheme\n return undefined;\n }\n\n var xTiles = this.getNumberOfXTilesAtLevel(level);\n var yTiles = this.getNumberOfYTilesAtLevel(level);\n\n var overallWidth =\n this._rectangleNortheastInMeters.x - this._rectangleSouthwestInMeters.x;\n var xTileWidth = overallWidth / xTiles;\n var overallHeight =\n this._rectangleNortheastInMeters.y - this._rectangleSouthwestInMeters.y;\n var yTileHeight = overallHeight / yTiles;\n\n var projection = this._projection;\n\n var webMercatorPosition = projection.project(position);\n var distanceFromWest =\n webMercatorPosition.x - this._rectangleSouthwestInMeters.x;\n var distanceFromNorth =\n this._rectangleNortheastInMeters.y - webMercatorPosition.y;\n\n var xTileCoordinate = (distanceFromWest / xTileWidth) | 0;\n if (xTileCoordinate >= xTiles) {\n xTileCoordinate = xTiles - 1;\n }\n var yTileCoordinate = (distanceFromNorth / yTileHeight) | 0;\n if (yTileCoordinate >= yTiles) {\n yTileCoordinate = yTiles - 1;\n }\n\n if (!defined(result)) {\n return new Cartesian2(xTileCoordinate, yTileCoordinate);\n }\n\n result.x = xTileCoordinate;\n result.y = yTileCoordinate;\n return result;\n};\nexport default WebMercatorTilingScheme;\n","import when from \"../ThirdParty/when.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport HeightmapEncoding from \"./HeightmapEncoding.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Request from \"./Request.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileAvailability from \"./TileAvailability.js\";\nimport TileProviderError from \"./TileProviderError.js\";\nimport WebMercatorTilingScheme from \"./WebMercatorTilingScheme.js\";\n\nvar ALL_CHILDREN = 15;\n\n/**\n * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from Elevation Tiles of an an ArcGIS ImageService.\n *\n * @alias ArcGISTiledElevationTerrainProvider\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String|Promise<Resource>|Promise<String>} options.url The URL of the ArcGIS ImageServer service.\n * @param {String} [options.token] The authorization token to use to connect to the service.\n * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead.\n * If neither parameter is specified, the WGS84 ellipsoid is used.\n *\n * @example\n * var terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({\n * url : 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',\n * token : 'KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..'\n * });\n * viewer.terrainProvider = terrainProvider;\n *\n * @see TerrainProvider\n */\nfunction ArcGISTiledElevationTerrainProvider(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n this._resource = undefined;\n this._credit = undefined;\n this._tilingScheme = undefined;\n this._levelZeroMaximumGeometricError = undefined;\n this._maxLevel = undefined;\n this._terrainDataStructure = undefined;\n this._ready = false;\n this._width = undefined;\n this._height = undefined;\n this._encoding = undefined;\n var token = options.token;\n\n this._hasAvailability = false;\n this._tilesAvailable = undefined;\n this._tilesAvailablityLoaded = undefined;\n this._availableCache = {};\n\n var that = this;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._readyPromise = when(options.url)\n .then(function (url) {\n var resource = Resource.createIfNeeded(url);\n resource.appendForwardSlash();\n if (defined(token)) {\n resource = resource.getDerivedResource({\n queryParameters: {\n token: token,\n },\n });\n }\n that._resource = resource;\n\n var metadataResource = resource.getDerivedResource({\n queryParameters: {\n f: \"pjson\",\n },\n });\n\n return metadataResource.fetchJson();\n })\n .then(function (metadata) {\n var copyrightText = metadata.copyrightText;\n if (defined(copyrightText)) {\n that._credit = new Credit(copyrightText);\n }\n\n var spatialReference = metadata.spatialReference;\n var wkid = defaultValue(\n spatialReference.latestWkid,\n spatialReference.wkid\n );\n var extent = metadata.extent;\n var tilingSchemeOptions = {\n ellipsoid: ellipsoid,\n };\n if (wkid === 4326) {\n tilingSchemeOptions.rectangle = Rectangle.fromDegrees(\n extent.xmin,\n extent.ymin,\n extent.xmax,\n extent.ymax\n );\n that._tilingScheme = new GeographicTilingScheme(tilingSchemeOptions);\n } else if (wkid === 3857) {\n tilingSchemeOptions.rectangleSouthwestInMeters = new Cartesian2(\n extent.xmin,\n extent.ymin\n );\n tilingSchemeOptions.rectangleNortheastInMeters = new Cartesian2(\n extent.xmax,\n extent.ymax\n );\n that._tilingScheme = new WebMercatorTilingScheme(tilingSchemeOptions);\n } else {\n return when.reject(new RuntimeError(\"Invalid spatial reference\"));\n }\n\n var tileInfo = metadata.tileInfo;\n if (!defined(tileInfo)) {\n return when.reject(new RuntimeError(\"tileInfo is required\"));\n }\n\n that._width = tileInfo.rows + 1;\n that._height = tileInfo.cols + 1;\n that._encoding =\n tileInfo.format === \"LERC\"\n ? HeightmapEncoding.LERC\n : HeightmapEncoding.NONE;\n that._lodCount = tileInfo.lods.length - 1;\n\n var hasAvailability = (that._hasAvailability =\n metadata.capabilities.indexOf(\"Tilemap\") !== -1);\n if (hasAvailability) {\n that._tilesAvailable = new TileAvailability(\n that._tilingScheme,\n that._lodCount\n );\n that._tilesAvailable.addAvailableTileRange(\n 0,\n 0,\n 0,\n that._tilingScheme.getNumberOfXTilesAtLevel(0),\n that._tilingScheme.getNumberOfYTilesAtLevel(0)\n );\n that._tilesAvailablityLoaded = new TileAvailability(\n that._tilingScheme,\n that._lodCount\n );\n }\n\n that._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n that._tilingScheme.ellipsoid,\n that._width,\n that._tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n\n if (metadata.bandCount > 1) {\n console.log(\n \"ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one.\"\n );\n }\n\n that._terrainDataStructure = {\n elementMultiplier: 1.0,\n lowestEncodedHeight: metadata.minValues[0],\n highestEncodedHeight: metadata.maxValues[0],\n };\n\n that._ready = true;\n\n return true;\n })\n .otherwise(function (error) {\n var message =\n \"An error occurred while accessing \" + that._resource.url + \".\";\n TileProviderError.handleError(undefined, that, that._errorEvent, message);\n return when.reject(error);\n });\n\n this._errorEvent = new Event();\n}\n\nObject.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"credit must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n return this._credit;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {GeographicTilingScheme}\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Boolean}\n */\n hasWaterMask: {\n get: function () {\n return false;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {Boolean}\n */\n hasVertexNormals: {\n get: function () {\n return false;\n },\n },\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof ArcGISTiledElevationTerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: function () {\n return undefined;\n },\n },\n});\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link ArcGISTiledElevationTerrainProvider#ready} returns true. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n */\nArcGISTiledElevationTerrainProvider.prototype.requestTileGeometry = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var tileResource = this._resource.getDerivedResource({\n url: \"tile/\" + level + \"/\" + y + \"/\" + x,\n request: request,\n });\n\n var hasAvailability = this._hasAvailability;\n var availabilityPromise = when.resolve(true);\n var availabilityRequest;\n if (\n hasAvailability &&\n !defined(isTileAvailable(this, level + 1, x * 2, y * 2))\n ) {\n // We need to load child availability\n var availabilityResult = requestAvailability(this, level + 1, x * 2, y * 2);\n\n availabilityPromise = availabilityResult.promise;\n availabilityRequest = availabilityResult.request;\n }\n\n var promise = tileResource.fetchArrayBuffer();\n if (!defined(promise) || !defined(availabilityPromise)) {\n return undefined;\n }\n\n var that = this;\n var tilesAvailable = this._tilesAvailable;\n return when\n .join(promise, availabilityPromise)\n .then(function (result) {\n return new HeightmapTerrainData({\n buffer: result[0],\n width: that._width,\n height: that._height,\n childTileMask: hasAvailability\n ? tilesAvailable.computeChildMaskForTile(level, x, y)\n : ALL_CHILDREN,\n structure: that._terrainDataStructure,\n encoding: that._encoding,\n });\n })\n .otherwise(function (error) {\n if (\n defined(availabilityRequest) &&\n availabilityRequest.state === RequestState.CANCELLED\n ) {\n request.cancel();\n\n // Don't reject the promise till the request is actually cancelled\n // Otherwise it will think the request failed, but it didn't.\n return request.deferred.promise.always(function () {\n request.state = RequestState.CANCELLED;\n return when.reject(error);\n });\n }\n return when.reject(error);\n });\n};\n\nfunction isTileAvailable(that, level, x, y) {\n if (!that._hasAvailability) {\n return undefined;\n }\n\n var tilesAvailablityLoaded = that._tilesAvailablityLoaded;\n var tilesAvailable = that._tilesAvailable;\n\n if (level > that._lodCount) {\n return false;\n }\n\n // Check if tiles are known to be available\n if (tilesAvailable.isTileAvailable(level, x, y)) {\n return true;\n }\n\n // or to not be available\n if (tilesAvailablityLoaded.isTileAvailable(level, x, y)) {\n return false;\n }\n\n return undefined;\n}\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nArcGISTiledElevationTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"getLevelMaximumGeometricError must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported, otherwise true or false.\n */\nArcGISTiledElevationTerrainProvider.prototype.getTileDataAvailable = function (\n x,\n y,\n level\n) {\n if (!this._hasAvailability) {\n return undefined;\n }\n\n var result = isTileAvailable(this, level, x, y);\n if (defined(result)) {\n return result;\n }\n\n requestAvailability(this, level, x, y);\n\n return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nArcGISTiledElevationTerrainProvider.prototype.loadTileDataAvailability = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\nfunction findRange(origin, width, height, data) {\n var endCol = width - 1;\n var endRow = height - 1;\n\n var value = data[origin.y * width + origin.x];\n var endingIndices = [];\n var range = {\n startX: origin.x,\n startY: origin.y,\n endX: 0,\n endY: 0,\n };\n\n var corner = new Cartesian2(origin.x + 1, origin.y + 1);\n var doneX = false;\n var doneY = false;\n while (!(doneX && doneY)) {\n // We want to use the original value when checking Y,\n // so get it before it possibly gets incremented\n var endX = corner.x;\n\n // If we no longer move in the Y direction we need to check the corner tile in X pass\n var endY = doneY ? corner.y + 1 : corner.y;\n\n // Check X range\n if (!doneX) {\n for (var y = origin.y; y < endY; ++y) {\n if (data[y * width + corner.x] !== value) {\n doneX = true;\n break;\n }\n }\n\n if (doneX) {\n endingIndices.push(new Cartesian2(corner.x, origin.y));\n\n // Use the last good column so we can continue with Y\n --corner.x;\n --endX;\n range.endX = corner.x;\n } else if (corner.x === endCol) {\n range.endX = corner.x;\n doneX = true;\n } else {\n ++corner.x;\n }\n }\n\n // Check Y range - The corner tile is checked here\n if (!doneY) {\n var col = corner.y * width;\n for (var x = origin.x; x <= endX; ++x) {\n if (data[col + x] !== value) {\n doneY = true;\n break;\n }\n }\n\n if (doneY) {\n endingIndices.push(new Cartesian2(origin.x, corner.y));\n\n // Use the last good row so we can continue with X\n --corner.y;\n range.endY = corner.y;\n } else if (corner.y === endRow) {\n range.endY = corner.y;\n doneY = true;\n } else {\n ++corner.y;\n }\n }\n }\n\n return {\n endingIndices: endingIndices,\n range: range,\n value: value,\n };\n}\n\nfunction computeAvailability(x, y, width, height, data) {\n var ranges = [];\n\n var singleValue = data.every(function (val) {\n return val === data[0];\n });\n if (singleValue) {\n if (data[0] === 1) {\n ranges.push({\n startX: x,\n startY: y,\n endX: x + width - 1,\n endY: y + height - 1,\n });\n }\n\n return ranges;\n }\n\n var positions = [new Cartesian2(0, 0)];\n while (positions.length > 0) {\n var origin = positions.pop();\n var result = findRange(origin, width, height, data);\n\n if (result.value === 1) {\n // Convert range into the array into global tile coordinates\n var range = result.range;\n range.startX += x;\n range.endX += x;\n range.startY += y;\n range.endY += y;\n ranges.push(range);\n }\n\n var endingIndices = result.endingIndices;\n if (endingIndices.length > 0) {\n positions = positions.concat(endingIndices);\n }\n }\n\n return ranges;\n}\n\nfunction requestAvailability(that, level, x, y) {\n if (!that._hasAvailability) {\n return {};\n }\n\n // Fetch 128x128 availability list, so we make the minimum amount of requests\n var xOffset = Math.floor(x / 128) * 128;\n var yOffset = Math.floor(y / 128) * 128;\n\n var dim = Math.min(1 << level, 128);\n var url =\n \"tilemap/\" + level + \"/\" + yOffset + \"/\" + xOffset + \"/\" + dim + \"/\" + dim;\n\n var availableCache = that._availableCache;\n if (defined(availableCache[url])) {\n return availableCache[url];\n }\n\n var request = new Request({\n throttle: true,\n throttleByServer: true,\n type: RequestType.TERRAIN,\n });\n\n var tilemapResource = that._resource.getDerivedResource({\n url: url,\n request: request,\n });\n\n var promise = tilemapResource.fetchJson();\n if (!defined(promise)) {\n return {};\n }\n\n promise = promise.then(function (result) {\n var available = computeAvailability(\n xOffset,\n yOffset,\n dim,\n dim,\n result.data\n );\n\n // Mark whole area as having availability loaded\n that._tilesAvailablityLoaded.addAvailableTileRange(\n xOffset,\n yOffset,\n xOffset + dim,\n yOffset + dim\n );\n\n var tilesAvailable = that._tilesAvailable;\n for (var i = 0; i < available.length; ++i) {\n var range = available[i];\n tilesAvailable.addAvailableTileRange(\n level,\n range.startX,\n range.startY,\n range.endX,\n range.endY\n );\n }\n\n // Conveniently return availability of original tile\n return isTileAvailable(that, level, x, y);\n });\n\n availableCache[url] = {\n promise: promise,\n request: request,\n };\n\n promise = promise.always(function (result) {\n delete availableCache[url];\n\n return result;\n });\n\n return {\n promise: promise,\n request: request,\n };\n}\nexport default ArcGISTiledElevationTerrainProvider;\n","/**\n * ArcType defines the path that should be taken connecting vertices.\n *\n * @enum {Number}\n */\nvar ArcType = {\n /**\n * Straight line that does not conform to the surface of the ellipsoid.\n *\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * Follow geodesic path.\n *\n * @type {Number}\n * @constant\n */\n GEODESIC: 1,\n\n /**\n * Follow rhumb or loxodrome path.\n *\n * @type {Number}\n * @constant\n */\n RHUMB: 2,\n};\nexport default Object.freeze(ArcType);\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Fill an array or a portion of an array with a given value.\n *\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill the array with.\n * @param {Number} [start=0] The index to start filling at.\n * @param {Number} [end=array.length] The index to end stop at.\n *\n * @returns {Array} The resulting array.\n * @private\n */\nfunction arrayFill(array, value, start, end) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n Check.defined(\"value\", value);\n if (defined(start)) {\n Check.typeOf.number(\"start\", start);\n }\n if (defined(end)) {\n Check.typeOf.number(\"end\", end);\n }\n //>>includeEnd('debug');\n\n if (typeof array.fill === \"function\") {\n return array.fill(value, start, end);\n }\n\n var length = array.length >>> 0;\n var relativeStart = defaultValue(start, 0);\n // If negative, find wrap around position\n var k =\n relativeStart < 0\n ? Math.max(length + relativeStart, 0)\n : Math.min(relativeStart, length);\n var relativeEnd = defaultValue(end, length);\n // If negative, find wrap around position\n var last =\n relativeEnd < 0\n ? Math.max(length + relativeEnd, 0)\n : Math.min(relativeEnd, length);\n\n // Fill array accordingly\n while (k < last) {\n array[k] = value;\n k++;\n }\n return array;\n}\nexport default arrayFill;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\n\nvar removeDuplicatesEpsilon = CesiumMath.EPSILON10;\n\n/**\n * Removes adjacent duplicate values in an array of values.\n *\n * @param {Array.<*>} [values] The array of values.\n * @param {Function} equalsEpsilon Function to compare values with an epsilon. Boolean equalsEpsilon(left, right, epsilon).\n * @param {Boolean} [wrapAround=false] Compare the last value in the array against the first value.\n * @returns {Array.<*>|undefined} A new array of values with no adjacent duplicate values or the input array if no duplicates were found.\n *\n * @example\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0), (1.0, 1.0, 1.0)]\n * var values = [\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\n * new Cesium.Cartesian3(3.0, 3.0, 3.0),\n * new Cesium.Cartesian3(1.0, 1.0, 1.0)];\n * var nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon);\n *\n * @example\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)]\n * var values = [\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\n * new Cesium.Cartesian3(3.0, 3.0, 3.0),\n * new Cesium.Cartesian3(1.0, 1.0, 1.0)];\n * var nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true);\n *\n * @private\n */\nfunction arrayRemoveDuplicates(values, equalsEpsilon, wrapAround) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"equalsEpsilon\", equalsEpsilon);\n //>>includeEnd('debug');\n\n if (!defined(values)) {\n return undefined;\n }\n\n wrapAround = defaultValue(wrapAround, false);\n\n var length = values.length;\n if (length < 2) {\n return values;\n }\n\n var i;\n var v0;\n var v1;\n\n for (i = 1; i < length; ++i) {\n v0 = values[i - 1];\n v1 = values[i];\n if (equalsEpsilon(v0, v1, removeDuplicatesEpsilon)) {\n break;\n }\n }\n\n if (i === length) {\n if (\n wrapAround &&\n equalsEpsilon(\n values[0],\n values[values.length - 1],\n removeDuplicatesEpsilon\n )\n ) {\n return values.slice(1);\n }\n return values;\n }\n\n var cleanedvalues = values.slice(0, i);\n for (; i < length; ++i) {\n // v0 is set by either the previous loop, or the previous clean point.\n v1 = values[i];\n if (!equalsEpsilon(v0, v1, removeDuplicatesEpsilon)) {\n cleanedvalues.push(v1);\n v0 = v1;\n }\n }\n\n if (\n wrapAround &&\n cleanedvalues.length > 1 &&\n equalsEpsilon(\n cleanedvalues[0],\n cleanedvalues[cleanedvalues.length - 1],\n removeDuplicatesEpsilon\n )\n ) {\n cleanedvalues.shift();\n }\n\n return cleanedvalues;\n}\nexport default arrayRemoveDuplicates;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\n\n/**\n * Create a shallow copy of an array from begin to end.\n *\n * @param {Array} array The array to fill.\n * @param {Number} [begin=0] The index to start at.\n * @param {Number} [end=array.length] The index to end at which is not included.\n *\n * @returns {Array} The resulting array.\n * @private\n */\nfunction arraySlice(array, begin, end) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n if (defined(begin)) {\n Check.typeOf.number(\"begin\", begin);\n }\n if (defined(end)) {\n Check.typeOf.number(\"end\", end);\n }\n //>>includeEnd('debug');\n\n if (typeof array.slice === \"function\") {\n return array.slice(begin, end);\n }\n\n var copy = Array.prototype.slice.call(array, begin, end);\n var typedArrayTypes = FeatureDetection.typedArrayTypes;\n var length = typedArrayTypes.length;\n for (var i = 0; i < length; ++i) {\n if (array instanceof typedArrayTypes[i]) {\n copy = new typedArrayTypes[i](copy);\n break;\n }\n }\n\n return copy;\n}\nexport default arraySlice;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A collection of key-value pairs that is stored as a hash for easy\n * lookup but also provides an array for fast iteration.\n * @alias AssociativeArray\n * @constructor\n */\nfunction AssociativeArray() {\n this._array = [];\n this._hash = {};\n}\n\nObject.defineProperties(AssociativeArray.prototype, {\n /**\n * Gets the number of items in the collection.\n * @memberof AssociativeArray.prototype\n *\n * @type {Number}\n */\n length: {\n get: function () {\n return this._array.length;\n },\n },\n /**\n * Gets an unordered array of all values in the collection.\n * This is a live array that will automatically reflect the values in the collection,\n * it should not be modified directly.\n * @memberof AssociativeArray.prototype\n *\n * @type {Array}\n */\n values: {\n get: function () {\n return this._array;\n },\n },\n});\n\n/**\n * Determines if the provided key is in the array.\n *\n * @param {String|Number} key The key to check.\n * @returns {Boolean} <code>true</code> if the key is in the array, <code>false</code> otherwise.\n */\nAssociativeArray.prototype.contains = function (key) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n throw new DeveloperError(\"key is required to be a string or number.\");\n }\n //>>includeEnd('debug');\n return defined(this._hash[key]);\n};\n\n/**\n * Associates the provided key with the provided value. If the key already\n * exists, it is overwritten with the new value.\n *\n * @param {String|Number} key A unique identifier.\n * @param {*} value The value to associate with the provided key.\n */\nAssociativeArray.prototype.set = function (key, value) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n throw new DeveloperError(\"key is required to be a string or number.\");\n }\n //>>includeEnd('debug');\n\n var oldValue = this._hash[key];\n if (value !== oldValue) {\n this.remove(key);\n this._hash[key] = value;\n this._array.push(value);\n }\n};\n\n/**\n * Retrieves the value associated with the provided key.\n *\n * @param {String|Number} key The key whose value is to be retrieved.\n * @returns {*} The associated value, or undefined if the key does not exist in the collection.\n */\nAssociativeArray.prototype.get = function (key) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n throw new DeveloperError(\"key is required to be a string or number.\");\n }\n //>>includeEnd('debug');\n return this._hash[key];\n};\n\n/**\n * Removes a key-value pair from the collection.\n *\n * @param {String|Number} key The key to be removed.\n * @returns {Boolean} True if it was removed, false if the key was not in the collection.\n */\nAssociativeArray.prototype.remove = function (key) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(key) && typeof key !== \"string\" && typeof key !== \"number\") {\n throw new DeveloperError(\"key is required to be a string or number.\");\n }\n //>>includeEnd('debug');\n\n var value = this._hash[key];\n var hasValue = defined(value);\n if (hasValue) {\n var array = this._array;\n array.splice(array.indexOf(value), 1);\n delete this._hash[key];\n }\n return hasValue;\n};\n\n/**\n * Clears the collection.\n */\nAssociativeArray.prototype.removeAll = function () {\n var array = this._array;\n if (array.length > 0) {\n this._hash = {};\n array.length = 0;\n }\n};\nexport default AssociativeArray;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\n\n/**\n * Computes the barycentric coordinates for a point with respect to a triangle.\n *\n * @function\n *\n * @param {Cartesian2|Cartesian3} point The point to test.\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle, corresponding to the barycentric x-axis.\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle, corresponding to the barycentric y-axis.\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle, corresponding to the barycentric z-axis.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n *\n * @example\n * // Returns Cartesian3.UNIT_X\n * var p = new Cesium.Cartesian3(-1.0, 0.0, 0.0);\n * var b = Cesium.barycentricCoordinates(p,\n * new Cesium.Cartesian3(-1.0, 0.0, 0.0),\n * new Cesium.Cartesian3( 1.0, 0.0, 0.0),\n * new Cesium.Cartesian3( 0.0, 1.0, 1.0));\n */\nfunction barycentricCoordinates(point, p0, p1, p2, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"point\", point);\n Check.defined(\"p0\", p0);\n Check.defined(\"p1\", p1);\n Check.defined(\"p2\", p2);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n // Implementation based on http://www.blackpawn.com/texts/pointinpoly/default.html.\n var v0;\n var v1;\n var v2;\n var dot00;\n var dot01;\n var dot02;\n var dot11;\n var dot12;\n\n if (!defined(p0.z)) {\n if (Cartesian2.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\n }\n if (Cartesian2.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n }\n if (Cartesian2.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n\n v0 = Cartesian2.subtract(p1, p0, scratchCartesian1);\n v1 = Cartesian2.subtract(p2, p0, scratchCartesian2);\n v2 = Cartesian2.subtract(point, p0, scratchCartesian3);\n\n dot00 = Cartesian2.dot(v0, v0);\n dot01 = Cartesian2.dot(v0, v1);\n dot02 = Cartesian2.dot(v0, v2);\n dot11 = Cartesian2.dot(v1, v1);\n dot12 = Cartesian2.dot(v1, v2);\n } else {\n if (Cartesian3.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\n }\n if (Cartesian3.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n }\n if (Cartesian3.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n\n v0 = Cartesian3.subtract(p1, p0, scratchCartesian1);\n v1 = Cartesian3.subtract(p2, p0, scratchCartesian2);\n v2 = Cartesian3.subtract(point, p0, scratchCartesian3);\n\n dot00 = Cartesian3.dot(v0, v0);\n dot01 = Cartesian3.dot(v0, v1);\n dot02 = Cartesian3.dot(v0, v2);\n dot11 = Cartesian3.dot(v1, v1);\n dot12 = Cartesian3.dot(v1, v2);\n }\n\n result.y = dot11 * dot02 - dot01 * dot12;\n result.z = dot00 * dot12 - dot01 * dot02;\n var q = dot00 * dot11 - dot01 * dot01;\n\n // This is done to avoid dividing by infinity causing a NaN\n if (result.y !== 0) {\n result.y /= q;\n }\n if (result.z !== 0) {\n result.z /= q;\n }\n\n result.x = 1.0 - result.y - result.z;\n return result;\n}\nexport default barycentricCoordinates;\n","import defined from \"./defined.js\";\n\n/**\n * Object for setting and retrieving the default Bing Maps API key.\n *\n * A Bing API key is only required if you are using {@link BingMapsImageryProvider}\n * or {@link BingMapsGeocoderService}. You can create your own key at\n * {@link https://www.bingmapsportal.com/}.\n *\n * @namespace BingMapsApi\n */\nvar BingMapsApi = {};\n\n/**\n * The default Bing Maps API key to use if one is not provided to the\n * constructor of an object that uses the Bing Maps API.\n *\n * @type {String}\n */\nBingMapsApi.defaultKey = undefined;\n\n/**\n * Gets the key to use to access the Bing Maps API. If the provided\n * key is defined, it is returned. Otherwise, returns {@link BingMapsApi.defaultKey}.\n * @param {string|null|undefined} providedKey The provided key to use if defined.\n * @returns {string|undefined} The Bing Maps API key to use.\n */\nBingMapsApi.getKey = function (providedKey) {\n if (defined(providedKey)) {\n return providedKey;\n }\n\n return BingMapsApi.defaultKey;\n};\nexport default BingMapsApi;\n","import BingMapsApi from \"./BingMapsApi.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\nvar url = \"https://dev.virtualearth.net/REST/v1/Locations\";\n\n/**\n * Provides geocoding through Bing Maps.\n * @alias BingMapsGeocoderService\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {String} [options.key] A key to use with the Bing Maps geocoding service\n */\nfunction BingMapsGeocoderService(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var key = options.key;\n this._key = BingMapsApi.getKey(key);\n\n this._resource = new Resource({\n url: url,\n queryParameters: {\n key: this._key,\n },\n });\n}\n\nObject.defineProperties(BingMapsGeocoderService.prototype, {\n /**\n * The URL endpoint for the Bing geocoder service\n * @type {String}\n * @memberof BingMapsGeocoderService.prototype\n * @readonly\n */\n url: {\n get: function () {\n return url;\n },\n },\n\n /**\n * The key for the Bing geocoder service\n * @type {String}\n * @memberof BingMapsGeocoderService.prototype\n * @readonly\n */\n key: {\n get: function () {\n return this._key;\n },\n },\n});\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nBingMapsGeocoderService.prototype.geocode = function (query) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"query\", query);\n //>>includeEnd('debug');\n\n var resource = this._resource.getDerivedResource({\n queryParameters: {\n query: query,\n },\n });\n\n return resource.fetchJsonp(\"jsonp\").then(function (result) {\n if (result.resourceSets.length === 0) {\n return [];\n }\n\n var results = result.resourceSets[0].resources;\n\n return results.map(function (resource) {\n var bbox = resource.bbox;\n var south = bbox[0];\n var west = bbox[1];\n var north = bbox[2];\n var east = bbox[3];\n return {\n displayName: resource.name,\n destination: Rectangle.fromDegrees(west, south, east, north),\n };\n });\n });\n};\nexport default BingMapsGeocoderService;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Intersect from \"./Intersect.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A bounding rectangle given by a corner, width and height.\n * @alias BoundingRectangle\n * @constructor\n *\n * @param {Number} [x=0.0] The x coordinate of the rectangle.\n * @param {Number} [y=0.0] The y coordinate of the rectangle.\n * @param {Number} [width=0.0] The width of the rectangle.\n * @param {Number} [height=0.0] The height of the rectangle.\n *\n * @see BoundingSphere\n * @see Packable\n */\nfunction BoundingRectangle(x, y, width, height) {\n /**\n * The x coordinate of the rectangle.\n * @type {Number}\n * @default 0.0\n */\n this.x = defaultValue(x, 0.0);\n\n /**\n * The y coordinate of the rectangle.\n * @type {Number}\n * @default 0.0\n */\n this.y = defaultValue(y, 0.0);\n\n /**\n * The width of the rectangle.\n * @type {Number}\n * @default 0.0\n */\n this.width = defaultValue(width, 0.0);\n\n /**\n * The height of the rectangle.\n * @type {Number}\n * @default 0.0\n */\n this.height = defaultValue(height, 0.0);\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nBoundingRectangle.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoundingRectangle} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nBoundingRectangle.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.x;\n array[startingIndex++] = value.y;\n array[startingIndex++] = value.width;\n array[startingIndex] = value.height;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoundingRectangle} [result] The object into which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n result.x = array[startingIndex++];\n result.y = array[startingIndex++];\n result.width = array[startingIndex++];\n result.height = array[startingIndex];\n return result;\n};\n\n/**\n * Computes a bounding rectangle enclosing the list of 2D points.\n * The rectangle is oriented with the corner at the bottom left.\n *\n * @param {Cartesian2[]} positions List of points that the bounding rectangle will enclose. Each point must have <code>x</code> and <code>y</code> properties.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.fromPoints = function (positions, result) {\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n if (!defined(positions) || positions.length === 0) {\n result.x = 0;\n result.y = 0;\n result.width = 0;\n result.height = 0;\n return result;\n }\n\n var length = positions.length;\n\n var minimumX = positions[0].x;\n var minimumY = positions[0].y;\n\n var maximumX = positions[0].x;\n var maximumY = positions[0].y;\n\n for (var i = 1; i < length; i++) {\n var p = positions[i];\n var x = p.x;\n var y = p.y;\n\n minimumX = Math.min(x, minimumX);\n maximumX = Math.max(x, maximumX);\n minimumY = Math.min(y, minimumY);\n maximumY = Math.max(y, maximumY);\n }\n\n result.x = minimumX;\n result.y = minimumY;\n result.width = maximumX - minimumX;\n result.height = maximumY - minimumY;\n return result;\n};\n\nvar defaultProjection = new GeographicProjection();\nvar fromRectangleLowerLeft = new Cartographic();\nvar fromRectangleUpperRight = new Cartographic();\n/**\n * Computes a bounding rectangle from a rectangle.\n *\n * @param {Rectangle} rectangle The valid rectangle used to create a bounding rectangle.\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.fromRectangle = function (rectangle, projection, result) {\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n if (!defined(rectangle)) {\n result.x = 0;\n result.y = 0;\n result.width = 0;\n result.height = 0;\n return result;\n }\n\n projection = defaultValue(projection, defaultProjection);\n\n var lowerLeft = projection.project(\n Rectangle.southwest(rectangle, fromRectangleLowerLeft)\n );\n var upperRight = projection.project(\n Rectangle.northeast(rectangle, fromRectangleUpperRight)\n );\n\n Cartesian2.subtract(upperRight, lowerLeft, upperRight);\n\n result.x = lowerLeft.x;\n result.y = lowerLeft.y;\n result.width = upperRight.x;\n result.height = upperRight.y;\n return result;\n};\n\n/**\n * Duplicates a BoundingRectangle instance.\n *\n * @param {BoundingRectangle} rectangle The bounding rectangle to duplicate.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. (Returns undefined if rectangle is undefined)\n */\nBoundingRectangle.clone = function (rectangle, result) {\n if (!defined(rectangle)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new BoundingRectangle(\n rectangle.x,\n rectangle.y,\n rectangle.width,\n rectangle.height\n );\n }\n\n result.x = rectangle.x;\n result.y = rectangle.y;\n result.width = rectangle.width;\n result.height = rectangle.height;\n return result;\n};\n\n/**\n * Computes a bounding rectangle that is the union of the left and right bounding rectangles.\n *\n * @param {BoundingRectangle} left A rectangle to enclose in bounding rectangle.\n * @param {BoundingRectangle} right A rectangle to enclose in a bounding rectangle.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.union = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n var lowerLeftX = Math.min(left.x, right.x);\n var lowerLeftY = Math.min(left.y, right.y);\n var upperRightX = Math.max(left.x + left.width, right.x + right.width);\n var upperRightY = Math.max(left.y + left.height, right.y + right.height);\n\n result.x = lowerLeftX;\n result.y = lowerLeftY;\n result.width = upperRightX - lowerLeftX;\n result.height = upperRightY - lowerLeftY;\n return result;\n};\n\n/**\n * Computes a bounding rectangle by enlarging the provided rectangle until it contains the provided point.\n *\n * @param {BoundingRectangle} rectangle A rectangle to expand.\n * @param {Cartesian2} point A point to enclose in a bounding rectangle.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.expand = function (rectangle, point, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Check.typeOf.object(\"point\", point);\n //>>includeEnd('debug');\n\n result = BoundingRectangle.clone(rectangle, result);\n\n var width = point.x - result.x;\n var height = point.y - result.y;\n\n if (width > result.width) {\n result.width = width;\n } else if (width < 0) {\n result.width -= width;\n result.x = point.x;\n }\n\n if (height > result.height) {\n result.height = height;\n } else if (height < 0) {\n result.height -= height;\n result.y = point.y;\n }\n\n return result;\n};\n\n/**\n * Determines if two rectangles intersect.\n *\n * @param {BoundingRectangle} left A rectangle to check for intersection.\n * @param {BoundingRectangle} right The other rectangle to check for intersection.\n * @returns {Intersect} <code>Intersect.INTESECTING</code> if the rectangles intersect, <code>Intersect.OUTSIDE</code> otherwise.\n */\nBoundingRectangle.intersect = function (left, right) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n //>>includeEnd('debug');\n\n var leftX = left.x;\n var leftY = left.y;\n var rightX = right.x;\n var rightY = right.y;\n if (\n !(\n leftX > rightX + right.width ||\n leftX + left.width < rightX ||\n leftY + left.height < rightY ||\n leftY > rightY + right.height\n )\n ) {\n return Intersect.INTERSECTING;\n }\n\n return Intersect.OUTSIDE;\n};\n\n/**\n * Compares the provided BoundingRectangles componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingRectangle} [left] The first BoundingRectangle.\n * @param {BoundingRectangle} [right] The second BoundingRectangle.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nBoundingRectangle.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.x === right.x &&\n left.y === right.y &&\n left.width === right.width &&\n left.height === right.height)\n );\n};\n\n/**\n * Duplicates this BoundingRectangle instance.\n *\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.prototype.clone = function (result) {\n return BoundingRectangle.clone(this, result);\n};\n\n/**\n * Determines if this rectangle intersects with another.\n *\n * @param {BoundingRectangle} right A rectangle to check for intersection.\n * @returns {Intersect} <code>Intersect.INTESECTING</code> if the rectangles intersect, <code>Intersect.OUTSIDE</code> otherwise.\n */\nBoundingRectangle.prototype.intersect = function (right) {\n return BoundingRectangle.intersect(this, right);\n};\n\n/**\n * Compares this BoundingRectangle against the provided BoundingRectangle componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingRectangle} [right] The right hand side BoundingRectangle.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nBoundingRectangle.prototype.equals = function (right) {\n return BoundingRectangle.equals(this, right);\n};\nexport default BoundingRectangle;\n","/**\n * @private\n */\nvar GeometryType = {\n NONE: 0,\n TRIANGLES: 1,\n LINES: 2,\n POLYLINES: 3,\n};\nexport default Object.freeze(GeometryType);\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A 2x2 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix2\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\n *\n * @see Matrix2.fromColumnMajorArray\n * @see Matrix2.fromRowMajorArray\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix3\n * @see Matrix4\n */\nfunction Matrix2(column0Row0, column1Row0, column0Row1, column1Row1) {\n this[0] = defaultValue(column0Row0, 0.0);\n this[1] = defaultValue(column0Row1, 0.0);\n this[2] = defaultValue(column1Row0, 0.0);\n this[3] = defaultValue(column1Row1, 0.0);\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nMatrix2.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix2} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nMatrix2.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value[0];\n array[startingIndex++] = value[1];\n array[startingIndex++] = value[2];\n array[startingIndex++] = value[3];\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix2} [result] The object into which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n */\nMatrix2.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Matrix2();\n }\n\n result[0] = array[startingIndex++];\n result[1] = array[startingIndex++];\n result[2] = array[startingIndex++];\n result[3] = array[startingIndex++];\n return result;\n};\n\n/**\n * Duplicates a Matrix2 instance.\n *\n * @param {Matrix2} matrix The matrix to duplicate.\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix2.clone = function (matrix, result) {\n if (!defined(matrix)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Matrix2(matrix[0], matrix[2], matrix[1], matrix[3]);\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n return result;\n};\n\n/**\n * Creates a Matrix2 from 4 consecutive elements in an array.\n *\n * @param {Number[]} array The array whose 4 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Create the Matrix2:\n * // [1.0, 2.0]\n * // [1.0, 2.0]\n *\n * var v = [1.0, 1.0, 2.0, 2.0];\n * var m = Cesium.Matrix2.fromArray(v);\n *\n * // Create same Matrix2 with using an offset into an array\n * var v2 = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0];\n * var m2 = Cesium.Matrix2.fromArray(v2, 2);\n */\nMatrix2.fromArray = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new Matrix2();\n }\n\n result[0] = array[startingIndex];\n result[1] = array[startingIndex + 1];\n result[2] = array[startingIndex + 2];\n result[3] = array[startingIndex + 3];\n return result;\n};\n\n/**\n * Creates a Matrix2 instance from a column-major order array.\n *\n * @param {Number[]} values The column-major order array.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n */\nMatrix2.fromColumnMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n return Matrix2.clone(values, result);\n};\n\n/**\n * Creates a Matrix2 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {Number[]} values The row-major order array.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n */\nMatrix2.fromRowMajorArray = function (values, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"values\", values);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix2(values[0], values[1], values[2], values[3]);\n }\n result[0] = values[0];\n result[1] = values[2];\n result[2] = values[1];\n result[3] = values[3];\n return result;\n};\n\n/**\n * Computes a Matrix2 instance representing a non-uniform scale.\n *\n * @param {Cartesian2} scale The x and y scale factors.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [7.0, 0.0]\n * // [0.0, 8.0]\n * var m = Cesium.Matrix2.fromScale(new Cesium.Cartesian2(7.0, 8.0));\n */\nMatrix2.fromScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix2(scale.x, 0.0, 0.0, scale.y);\n }\n\n result[0] = scale.x;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = scale.y;\n return result;\n};\n\n/**\n * Computes a Matrix2 instance representing a uniform scale.\n *\n * @param {Number} scale The uniform scale factor.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Creates\n * // [2.0, 0.0]\n * // [0.0, 2.0]\n * var m = Cesium.Matrix2.fromUniformScale(2.0);\n */\nMatrix2.fromUniformScale = function (scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"scale\", scale);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Matrix2(scale, 0.0, 0.0, scale);\n }\n\n result[0] = scale;\n result[1] = 0.0;\n result[2] = 0.0;\n result[3] = scale;\n return result;\n};\n\n/**\n * Creates a rotation matrix.\n *\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise.\n * var p = new Cesium.Cartesian2(5, 6);\n * var m = Cesium.Matrix2.fromRotation(Cesium.Math.toRadians(45.0));\n * var rotated = Cesium.Matrix2.multiplyByVector(m, p, new Cesium.Cartesian2());\n */\nMatrix2.fromRotation = function (angle, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"angle\", angle);\n //>>includeEnd('debug');\n\n var cosAngle = Math.cos(angle);\n var sinAngle = Math.sin(angle);\n\n if (!defined(result)) {\n return new Matrix2(cosAngle, -sinAngle, sinAngle, cosAngle);\n }\n result[0] = cosAngle;\n result[1] = sinAngle;\n result[2] = -sinAngle;\n result[3] = cosAngle;\n return result;\n};\n\n/**\n * Creates an Array from the provided Matrix2 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix2} matrix The matrix to use..\n * @param {Number[]} [result] The Array onto which to store the result.\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\n */\nMatrix2.toArray = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return [matrix[0], matrix[1], matrix[2], matrix[3]];\n }\n result[0] = matrix[0];\n result[1] = matrix[1];\n result[2] = matrix[2];\n result[3] = matrix[3];\n return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {Number} row The zero-based index of the row.\n * @param {Number} column The zero-based index of the column.\n * @returns {Number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0 or 1.\n * @exception {DeveloperError} column must be 0 or 1.\n *\n * @example\n * var myMatrix = new Cesium.Matrix2();\n * var column1Row0Index = Cesium.Matrix2.getElementIndex(1, 0);\n * var column1Row0 = myMatrix[column1Row0Index]\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix2.getElementIndex = function (column, row) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 1);\n\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 1);\n //>>includeEnd('debug');\n\n return column * 2 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to retrieve.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.getColumn = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var startIndex = index * 2;\n var x = matrix[startIndex];\n var y = matrix[startIndex + 1];\n\n result.x = x;\n result.y = y;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {Number} index The zero-based index of the column to set.\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.setColumn = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix2.clone(matrix, result);\n var startIndex = index * 2;\n result[startIndex] = cartesian.x;\n result[startIndex + 1] = cartesian.y;\n return result;\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to retrieve.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.getRow = function (matrix, index, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = matrix[index];\n var y = matrix[index + 2];\n\n result.x = x;\n result.y = y;\n return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {Number} index The zero-based index of the row to set.\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.setRow = function (matrix, index, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result = Matrix2.clone(matrix, result);\n result[index] = cartesian.x;\n result[index + 2] = cartesian.y;\n return result;\n};\n\nvar scratchColumn = new Cartesian2();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nMatrix2.getScale = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.x = Cartesian2.magnitude(\n Cartesian2.fromElements(matrix[0], matrix[1], scratchColumn)\n );\n result.y = Cartesian2.magnitude(\n Cartesian2.fromElements(matrix[2], matrix[3], scratchColumn)\n );\n return result;\n};\n\nvar scratchScale = new Cartesian2();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors.\n *\n * @param {Matrix2} matrix The matrix.\n * @returns {Number} The maximum scale.\n */\nMatrix2.getMaximumScale = function (matrix) {\n Matrix2.getScale(matrix, scratchScale);\n return Cartesian2.maximumComponent(scratchScale);\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.multiply = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 = left[0] * right[0] + left[2] * right[1];\n var column1Row0 = left[0] * right[2] + left[2] * right[3];\n var column0Row1 = left[1] * right[0] + left[3] * right[1];\n var column1Row1 = left[1] * right[2] + left[3] * right[3];\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column1Row0;\n result[3] = column1Row1;\n return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] + right[0];\n result[1] = left[1] + right[1];\n result[2] = left[2] + right[2];\n result[3] = left[3] + right[3];\n return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = left[0] - right[0];\n result[1] = left[1] - right[1];\n result[2] = left[2] - right[2];\n result[3] = left[3] - right[3];\n return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Cartesian2} cartesian The column.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nMatrix2.multiplyByVector = function (matrix, cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"cartesian\", cartesian);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var x = matrix[0] * cartesian.x + matrix[2] * cartesian.y;\n var y = matrix[1] * cartesian.x + matrix[3] * cartesian.y;\n\n result.x = x;\n result.y = y;\n return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Number} scalar The number to multiply by.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.multiplyByScalar = function (matrix, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0] * scalar;\n result[1] = matrix[1] * scalar;\n result[2] = matrix[2] * scalar;\n result[3] = matrix[3] * scalar;\n return result;\n};\n\n/**\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\n *\n * @param {Matrix2} matrix The matrix on the left-hand side.\n * @param {Cartesian2} scale The non-uniform scale on the right-hand side.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromScale(scale), m);\n * Cesium.Matrix2.multiplyByScale(m, scale, m);\n *\n * @see Matrix2.fromScale\n * @see Matrix2.multiplyByUniformScale\n */\nMatrix2.multiplyByScale = function (matrix, scale, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"scale\", scale);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = matrix[0] * scale.x;\n result[1] = matrix[1] * scale.x;\n result[2] = matrix[2] * scale.y;\n result[3] = matrix[3] * scale.y;\n return result;\n};\n\n/**\n * Creates a negated copy of the provided matrix.\n *\n * @param {Matrix2} matrix The matrix to negate.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.negate = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = -matrix[0];\n result[1] = -matrix[1];\n result[2] = -matrix[2];\n result[3] = -matrix[3];\n return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix2} matrix The matrix to transpose.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.transpose = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var column0Row0 = matrix[0];\n var column0Row1 = matrix[2];\n var column1Row0 = matrix[1];\n var column1Row1 = matrix[3];\n\n result[0] = column0Row0;\n result[1] = column0Row1;\n result[2] = column1Row0;\n result[3] = column1Row1;\n return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix2} matrix The matrix with signed elements.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.abs = function (matrix, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"matrix\", matrix);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result[0] = Math.abs(matrix[0]);\n result[1] = Math.abs(matrix[1]);\n result[2] = Math.abs(matrix[2]);\n result[3] = Math.abs(matrix[3]);\n\n return result;\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix2} [left] The first matrix.\n * @param {Matrix2} [right] The second matrix.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMatrix2.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left[0] === right[0] &&\n left[1] === right[1] &&\n left[2] === right[2] &&\n left[3] === right[3])\n );\n};\n\n/**\n * @private\n */\nMatrix2.equalsArray = function (matrix, array, offset) {\n return (\n matrix[0] === array[offset] &&\n matrix[1] === array[offset + 1] &&\n matrix[2] === array[offset + 2] &&\n matrix[3] === array[offset + 3]\n );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix2} [left] The first matrix.\n * @param {Matrix2} [right] The second matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix2.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0);\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left[0] - right[0]) <= epsilon &&\n Math.abs(left[1] - right[1]) <= epsilon &&\n Math.abs(left[2] - right[2]) <= epsilon &&\n Math.abs(left[3] - right[3]) <= epsilon)\n );\n};\n\n/**\n * An immutable Matrix2 instance initialized to the identity matrix.\n *\n * @type {Matrix2}\n * @constant\n */\nMatrix2.IDENTITY = Object.freeze(new Matrix2(1.0, 0.0, 0.0, 1.0));\n\n/**\n * An immutable Matrix2 instance initialized to the zero matrix.\n *\n * @type {Matrix2}\n * @constant\n */\nMatrix2.ZERO = Object.freeze(new Matrix2(0.0, 0.0, 0.0, 0.0));\n\n/**\n * The index into Matrix2 for column 0, row 0.\n *\n * @type {Number}\n * @constant\n *\n * @example\n * var matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN0ROW0] = 5.0; // set column 0, row 0 to 5.0\n */\nMatrix2.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix2 for column 0, row 1.\n *\n * @type {Number}\n * @constant\n *\n * @example\n * var matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN0ROW1] = 5.0; // set column 0, row 1 to 5.0\n */\nMatrix2.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix2 for column 1, row 0.\n *\n * @type {Number}\n * @constant\n *\n * @example\n * var matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN1ROW0] = 5.0; // set column 1, row 0 to 5.0\n */\nMatrix2.COLUMN1ROW0 = 2;\n\n/**\n * The index into Matrix2 for column 1, row 1.\n *\n * @type {Number}\n * @constant\n *\n * @example\n * var matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN1ROW1] = 5.0; // set column 1, row 1 to 5.0\n */\nMatrix2.COLUMN1ROW1 = 3;\n\nObject.defineProperties(Matrix2.prototype, {\n /**\n * Gets the number of items in the collection.\n * @memberof Matrix2.prototype\n *\n * @type {Number}\n */\n length: {\n get: function () {\n return Matrix2.packedLength;\n },\n },\n});\n\n/**\n * Duplicates the provided Matrix2 instance.\n *\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n */\nMatrix2.prototype.clone = function (result) {\n return Matrix2.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix2} [right] The right hand side matrix.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix2.prototype.equals = function (right) {\n return Matrix2.equals(this, right);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix2} [right] The right hand side matrix.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix2.prototype.equalsEpsilon = function (right, epsilon) {\n return Matrix2.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1)'.\n *\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1)'.\n */\nMatrix2.prototype.toString = function () {\n return (\n \"(\" +\n this[0] +\n \", \" +\n this[2] +\n \")\\n\" +\n \"(\" +\n this[1] +\n \", \" +\n this[3] +\n \")\"\n );\n};\nexport default Matrix2;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * The type of a geometric primitive, i.e., points, lines, and triangles.\n *\n * @enum {Number}\n */\nvar PrimitiveType = {\n /**\n * Points primitive where each vertex (or index) is a separate point.\n *\n * @type {Number}\n * @constant\n */\n POINTS: WebGLConstants.POINTS,\n\n /**\n * Lines primitive where each two vertices (or indices) is a line segment. Line segments are not necessarily connected.\n *\n * @type {Number}\n * @constant\n */\n LINES: WebGLConstants.LINES,\n\n /**\n * Line loop primitive where each vertex (or index) after the first connects a line to\n * the previous vertex, and the last vertex implicitly connects to the first.\n *\n * @type {Number}\n * @constant\n */\n LINE_LOOP: WebGLConstants.LINE_LOOP,\n\n /**\n * Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex.\n *\n * @type {Number}\n * @constant\n */\n LINE_STRIP: WebGLConstants.LINE_STRIP,\n\n /**\n * Triangles primitive where each three vertices (or indices) is a triangle. Triangles do not necessarily share edges.\n *\n * @type {Number}\n * @constant\n */\n TRIANGLES: WebGLConstants.TRIANGLES,\n\n /**\n * Triangle strip primitive where each vertex (or index) after the first two connect to\n * the previous two vertices forming a triangle. For example, this can be used to model a wall.\n *\n * @type {Number}\n * @constant\n */\n TRIANGLE_STRIP: WebGLConstants.TRIANGLE_STRIP,\n\n /**\n * Triangle fan primitive where each vertex (or index) after the first two connect to\n * the previous vertex and the first vertex forming a triangle. For example, this can be used\n * to model a cone or circle.\n *\n * @type {Number}\n * @constant\n */\n TRIANGLE_FAN: WebGLConstants.TRIANGLE_FAN,\n};\n\n/**\n * @private\n */\nPrimitiveType.validate = function (primitiveType) {\n return (\n primitiveType === PrimitiveType.POINTS ||\n primitiveType === PrimitiveType.LINES ||\n primitiveType === PrimitiveType.LINE_LOOP ||\n primitiveType === PrimitiveType.LINE_STRIP ||\n primitiveType === PrimitiveType.TRIANGLES ||\n primitiveType === PrimitiveType.TRIANGLE_STRIP ||\n primitiveType === PrimitiveType.TRIANGLE_FAN\n );\n};\n\nexport default Object.freeze(PrimitiveType);\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Transforms from \"./Transforms.js\";\n\n/**\n * A geometry representation with attributes forming vertices and optional index data\n * defining primitives. Geometries and an {@link Appearance}, which describes the shading,\n * can be assigned to a {@link Primitive} for visualization. A <code>Primitive</code> can\n * be created from many heterogeneous - in many cases - geometries for performance.\n * <p>\n * Geometries can be transformed and optimized using functions in {@link GeometryPipeline}.\n * </p>\n *\n * @alias Geometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {GeometryAttributes} options.attributes Attributes, which make up the geometry's vertices.\n * @param {PrimitiveType} [options.primitiveType=PrimitiveType.TRIANGLES] The type of primitives in the geometry.\n * @param {Uint16Array|Uint32Array} [options.indices] Optional index data that determines the primitives in the geometry.\n * @param {BoundingSphere} [options.boundingSphere] An optional bounding sphere that fully enclosed the geometry.\n *\n * @see PolygonGeometry\n * @see RectangleGeometry\n * @see EllipseGeometry\n * @see CircleGeometry\n * @see WallGeometry\n * @see SimplePolylineGeometry\n * @see BoxGeometry\n * @see EllipsoidGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Geometry%20and%20Appearances.html|Geometry and Appearances Demo}\n *\n * @example\n * // Create geometry with a position attribute and indexed lines.\n * var positions = new Float64Array([\n * 0.0, 0.0, 0.0,\n * 7500000.0, 0.0, 0.0,\n * 0.0, 7500000.0, 0.0\n * ]);\n *\n * var geometry = new Cesium.Geometry({\n * attributes : {\n * position : new Cesium.GeometryAttribute({\n * componentDatatype : Cesium.ComponentDatatype.DOUBLE,\n * componentsPerAttribute : 3,\n * values : positions\n * })\n * },\n * indices : new Uint16Array([0, 1, 1, 2, 2, 0]),\n * primitiveType : Cesium.PrimitiveType.LINES,\n * boundingSphere : Cesium.BoundingSphere.fromVertices(positions)\n * });\n */\nfunction Geometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.attributes\", options.attributes);\n //>>includeEnd('debug');\n\n /**\n * Attributes, which make up the geometry's vertices. Each property in this object corresponds to a\n * {@link GeometryAttribute} containing the attribute's data.\n * <p>\n * Attributes are always stored non-interleaved in a Geometry.\n * </p>\n * <p>\n * There are reserved attribute names with well-known semantics. The following attributes\n * are created by a Geometry (depending on the provided {@link VertexFormat}.\n * <ul>\n * <li><code>position</code> - 3D vertex position. 64-bit floating-point (for precision). 3 components per attribute. See {@link VertexFormat#position}.</li>\n * <li><code>normal</code> - Normal (normalized), commonly used for lighting. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#normal}.</li>\n * <li><code>st</code> - 2D texture coordinate. 32-bit floating-point. 2 components per attribute. See {@link VertexFormat#st}.</li>\n * <li><code>bitangent</code> - Bitangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#bitangent}.</li>\n * <li><code>tangent</code> - Tangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#tangent}.</li>\n * </ul>\n * </p>\n * <p>\n * The following attribute names are generally not created by a Geometry, but are added\n * to a Geometry by a {@link Primitive} or {@link GeometryPipeline} functions to prepare\n * the geometry for rendering.\n * <ul>\n * <li><code>position3DHigh</code> - High 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.</li>\n * <li><code>position3DLow</code> - Low 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.</li>\n * <li><code>position3DHigh</code> - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.</li>\n * <li><code>position2DLow</code> - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.</li>\n * <li><code>color</code> - RGBA color (normalized) usually from {@link GeometryInstance#color}. 32-bit floating-point. 4 components per attribute.</li>\n * <li><code>pickColor</code> - RGBA color used for picking. 32-bit floating-point. 4 components per attribute.</li>\n * </ul>\n * </p>\n *\n * @type GeometryAttributes\n *\n * @default undefined\n *\n *\n * @example\n * geometry.attributes.position = new Cesium.GeometryAttribute({\n * componentDatatype : Cesium.ComponentDatatype.FLOAT,\n * componentsPerAttribute : 3,\n * values : new Float32Array(0)\n * });\n *\n * @see GeometryAttribute\n * @see VertexFormat\n */\n this.attributes = options.attributes;\n\n /**\n * Optional index data that - along with {@link Geometry#primitiveType} -\n * determines the primitives in the geometry.\n *\n * @type Array\n *\n * @default undefined\n */\n this.indices = options.indices;\n\n /**\n * The type of primitives in the geometry. This is most often {@link PrimitiveType.TRIANGLES},\n * but can varying based on the specific geometry.\n *\n * @type PrimitiveType\n *\n * @default undefined\n */\n this.primitiveType = defaultValue(\n options.primitiveType,\n PrimitiveType.TRIANGLES\n );\n\n /**\n * An optional bounding sphere that fully encloses the geometry. This is\n * commonly used for culling.\n *\n * @type BoundingSphere\n *\n * @default undefined\n */\n this.boundingSphere = options.boundingSphere;\n\n /**\n * @private\n */\n this.geometryType = defaultValue(options.geometryType, GeometryType.NONE);\n\n /**\n * @private\n */\n this.boundingSphereCV = options.boundingSphereCV;\n\n /**\n * Used for computing the bounding sphere for geometry using the applyOffset vertex attribute\n * @private\n */\n this.offsetAttribute = options.offsetAttribute;\n}\n\n/**\n * Computes the number of vertices in a geometry. The runtime is linear with\n * respect to the number of attributes in a vertex, not the number of vertices.\n *\n * @param {Geometry} geometry The geometry.\n * @returns {Number} The number of vertices in the geometry.\n *\n * @example\n * var numVertices = Cesium.Geometry.computeNumberOfVertices(geometry);\n */\nGeometry.computeNumberOfVertices = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"geometry\", geometry);\n //>>includeEnd('debug');\n\n var numberOfVertices = -1;\n for (var property in geometry.attributes) {\n if (\n geometry.attributes.hasOwnProperty(property) &&\n defined(geometry.attributes[property]) &&\n defined(geometry.attributes[property].values)\n ) {\n var attribute = geometry.attributes[property];\n var num = attribute.values.length / attribute.componentsPerAttribute;\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices !== num && numberOfVertices !== -1) {\n throw new DeveloperError(\n \"All attribute lists must have the same number of attributes.\"\n );\n }\n //>>includeEnd('debug');\n numberOfVertices = num;\n }\n }\n\n return numberOfVertices;\n};\n\nvar rectangleCenterScratch = new Cartographic();\nvar enuCenterScratch = new Cartesian3();\nvar fixedFrameToEnuScratch = new Matrix4();\nvar boundingRectanglePointsCartographicScratch = [\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n];\nvar boundingRectanglePointsEnuScratch = [\n new Cartesian2(),\n new Cartesian2(),\n new Cartesian2(),\n];\nvar points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\nvar pointEnuScratch = new Cartesian3();\nvar enuRotationScratch = new Quaternion();\nvar enuRotationMatrixScratch = new Matrix4();\nvar rotation2DScratch = new Matrix2();\n\n/**\n * For remapping texture coordinates when rendering GroundPrimitives with materials.\n * GroundPrimitive texture coordinates are computed to align with the cartographic coordinate system on the globe.\n * However, EllipseGeometry, RectangleGeometry, and PolygonGeometry all bake rotations to per-vertex texture coordinates\n * using different strategies.\n *\n * This method is used by EllipseGeometry and PolygonGeometry to approximate the same visual effect.\n * We encapsulate rotation and scale by computing a \"transformed\" texture coordinate system and computing\n * a set of reference points from which \"cartographic\" texture coordinates can be remapped to the \"transformed\"\n * system using distances to lines in 2D.\n *\n * This approximation becomes less accurate as the covered area increases, especially for GroundPrimitives near the poles,\n * but is generally reasonable for polygons and ellipses around the size of USA states.\n *\n * RectangleGeometry has its own version of this method that computes remapping coordinates using cartographic space\n * as an intermediary instead of local ENU, which is more accurate for large-area rectangles.\n *\n * @param {Cartesian3[]} positions Array of positions outlining the geometry\n * @param {Number} stRotation Texture coordinate rotation.\n * @param {Ellipsoid} ellipsoid Ellipsoid for projecting and generating local vectors.\n * @param {Rectangle} boundingRectangle Bounding rectangle around the positions.\n * @returns {Number[]} An array of 6 numbers specifying [minimum point, u extent, v extent] as points in the \"cartographic\" system.\n * @private\n */\nGeometry._textureCoordinateRotationPoints = function (\n positions,\n stRotation,\n ellipsoid,\n boundingRectangle\n) {\n var i;\n\n // Create a local east-north-up coordinate system centered on the polygon's bounding rectangle.\n // Project the southwest, northwest, and southeast corners of the bounding rectangle into the plane of ENU as 2D points.\n // These are the equivalents of (0,0), (0,1), and (1,0) in the texture coordiante system computed in ShadowVolumeAppearanceFS,\n // aka \"ENU texture space.\"\n var rectangleCenter = Rectangle.center(\n boundingRectangle,\n rectangleCenterScratch\n );\n var enuCenter = Cartographic.toCartesian(\n rectangleCenter,\n ellipsoid,\n enuCenterScratch\n );\n var enuToFixedFrame = Transforms.eastNorthUpToFixedFrame(\n enuCenter,\n ellipsoid,\n fixedFrameToEnuScratch\n );\n var fixedFrameToEnu = Matrix4.inverse(\n enuToFixedFrame,\n fixedFrameToEnuScratch\n );\n\n var boundingPointsEnu = boundingRectanglePointsEnuScratch;\n var boundingPointsCarto = boundingRectanglePointsCartographicScratch;\n\n boundingPointsCarto[0].longitude = boundingRectangle.west;\n boundingPointsCarto[0].latitude = boundingRectangle.south;\n\n boundingPointsCarto[1].longitude = boundingRectangle.west;\n boundingPointsCarto[1].latitude = boundingRectangle.north;\n\n boundingPointsCarto[2].longitude = boundingRectangle.east;\n boundingPointsCarto[2].latitude = boundingRectangle.south;\n\n var posEnu = pointEnuScratch;\n\n for (i = 0; i < 3; i++) {\n Cartographic.toCartesian(boundingPointsCarto[i], ellipsoid, posEnu);\n posEnu = Matrix4.multiplyByPointAsVector(fixedFrameToEnu, posEnu, posEnu);\n boundingPointsEnu[i].x = posEnu.x;\n boundingPointsEnu[i].y = posEnu.y;\n }\n\n // Rotate each point in the polygon around the up vector in the ENU by -stRotation and project into ENU as 2D.\n // Compute the bounding box of these rotated points in the 2D ENU plane.\n // Rotate the corners back by stRotation, then compute their equivalents in the ENU texture space using the corners computed earlier.\n var rotation = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_Z,\n -stRotation,\n enuRotationScratch\n );\n var textureMatrix = Matrix3.fromQuaternion(\n rotation,\n enuRotationMatrixScratch\n );\n\n var positionsLength = positions.length;\n var enuMinX = Number.POSITIVE_INFINITY;\n var enuMinY = Number.POSITIVE_INFINITY;\n var enuMaxX = Number.NEGATIVE_INFINITY;\n var enuMaxY = Number.NEGATIVE_INFINITY;\n for (i = 0; i < positionsLength; i++) {\n posEnu = Matrix4.multiplyByPointAsVector(\n fixedFrameToEnu,\n positions[i],\n posEnu\n );\n posEnu = Matrix3.multiplyByVector(textureMatrix, posEnu, posEnu);\n\n enuMinX = Math.min(enuMinX, posEnu.x);\n enuMinY = Math.min(enuMinY, posEnu.y);\n enuMaxX = Math.max(enuMaxX, posEnu.x);\n enuMaxY = Math.max(enuMaxY, posEnu.y);\n }\n\n var toDesiredInComputed = Matrix2.fromRotation(stRotation, rotation2DScratch);\n\n var points2D = points2DScratch;\n points2D[0].x = enuMinX;\n points2D[0].y = enuMinY;\n\n points2D[1].x = enuMinX;\n points2D[1].y = enuMaxY;\n\n points2D[2].x = enuMaxX;\n points2D[2].y = enuMinY;\n\n var boundingEnuMin = boundingPointsEnu[0];\n var boundingPointsWidth = boundingPointsEnu[2].x - boundingEnuMin.x;\n var boundingPointsHeight = boundingPointsEnu[1].y - boundingEnuMin.y;\n\n for (i = 0; i < 3; i++) {\n var point2D = points2D[i];\n // rotate back\n Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\n\n // Convert point into east-north texture coordinate space\n point2D.x = (point2D.x - boundingEnuMin.x) / boundingPointsWidth;\n point2D.y = (point2D.y - boundingEnuMin.y) / boundingPointsHeight;\n }\n\n var minXYCorner = points2D[0];\n var maxYCorner = points2D[1];\n var maxXCorner = points2D[2];\n var result = new Array(6);\n Cartesian2.pack(minXYCorner, result);\n Cartesian2.pack(maxYCorner, result, 2);\n Cartesian2.pack(maxXCorner, result, 4);\n\n return result;\n};\nexport default Geometry;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Values and type information for geometry attributes. A {@link Geometry}\n * generally contains one or more attributes. All attributes together form\n * the geometry's vertices.\n *\n * @alias GeometryAttribute\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {ComponentDatatype} [options.componentDatatype] The datatype of each component in the attribute, e.g., individual elements in values.\n * @param {Number} [options.componentsPerAttribute] A number between 1 and 4 that defines the number of components in an attributes.\n * @param {Boolean} [options.normalize=false] When <code>true</code> and <code>componentDatatype</code> is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * @param {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} [options.values] The values for the attributes stored in a typed array.\n *\n * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4.\n *\n *\n * @example\n * var geometry = new Cesium.Geometry({\n * attributes : {\n * position : new Cesium.GeometryAttribute({\n * componentDatatype : Cesium.ComponentDatatype.FLOAT,\n * componentsPerAttribute : 3,\n * values : new Float32Array([\n * 0.0, 0.0, 0.0,\n * 7500000.0, 0.0, 0.0,\n * 0.0, 7500000.0, 0.0\n * ])\n * })\n * },\n * primitiveType : Cesium.PrimitiveType.LINE_LOOP\n * });\n *\n * @see Geometry\n */\nfunction GeometryAttribute(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.componentDatatype)) {\n throw new DeveloperError(\"options.componentDatatype is required.\");\n }\n if (!defined(options.componentsPerAttribute)) {\n throw new DeveloperError(\"options.componentsPerAttribute is required.\");\n }\n if (\n options.componentsPerAttribute < 1 ||\n options.componentsPerAttribute > 4\n ) {\n throw new DeveloperError(\n \"options.componentsPerAttribute must be between 1 and 4.\"\n );\n }\n if (!defined(options.values)) {\n throw new DeveloperError(\"options.values is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link GeometryAttribute#values}.\n *\n * @type ComponentDatatype\n *\n * @default undefined\n */\n this.componentDatatype = options.componentDatatype;\n\n /**\n * A number between 1 and 4 that defines the number of components in an attributes.\n * For example, a position attribute with x, y, and z components would have 3 as\n * shown in the code example.\n *\n * @type Number\n *\n * @default undefined\n *\n * @example\n * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\n * attribute.componentsPerAttribute = 3;\n * attribute.values = new Float32Array([\n * 0.0, 0.0, 0.0,\n * 7500000.0, 0.0, 0.0,\n * 0.0, 7500000.0, 0.0\n * ]);\n */\n this.componentsPerAttribute = options.componentsPerAttribute;\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * <p>\n * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n *\n * @example\n * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE;\n * attribute.componentsPerAttribute = 4;\n * attribute.normalize = true;\n * attribute.values = new Uint8Array([\n * Cesium.Color.floatToByte(color.red),\n * Cesium.Color.floatToByte(color.green),\n * Cesium.Color.floatToByte(color.blue),\n * Cesium.Color.floatToByte(color.alpha)\n * ]);\n */\n this.normalize = defaultValue(options.normalize, false);\n\n /**\n * The values for the attributes stored in a typed array. In the code example,\n * every three elements in <code>values</code> defines one attributes since\n * <code>componentsPerAttribute</code> is 3.\n *\n * @type {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array}\n *\n * @default undefined\n *\n * @example\n * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\n * attribute.componentsPerAttribute = 3;\n * attribute.values = new Float32Array([\n * 0.0, 0.0, 0.0,\n * 7500000.0, 0.0, 0.0,\n * 0.0, 7500000.0, 0.0\n * ]);\n */\n this.values = options.values;\n}\nexport default GeometryAttribute;\n","import defaultValue from \"./defaultValue.js\";\n\n/**\n * Attributes, which make up a geometry's vertices. Each property in this object corresponds to a\n * {@link GeometryAttribute} containing the attribute's data.\n * <p>\n * Attributes are always stored non-interleaved in a Geometry.\n * </p>\n *\n * @alias GeometryAttributes\n * @constructor\n */\nfunction GeometryAttributes(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The 3D position attribute.\n * <p>\n * 64-bit floating-point (for precision). 3 components per attribute.\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.position = options.position;\n\n /**\n * The normal attribute (normalized), which is commonly used for lighting.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.normal = options.normal;\n\n /**\n * The 2D texture coordinate attribute.\n * <p>\n * 32-bit floating-point. 2 components per attribute\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.st = options.st;\n\n /**\n * The bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.bitangent = options.bitangent;\n\n /**\n * The tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.tangent = options.tangent;\n\n /**\n * The color attribute.\n * <p>\n * 8-bit unsigned integer. 4 components per attribute.\n * </p>\n *\n * @type GeometryAttribute\n *\n * @default undefined\n */\n this.color = options.color;\n}\nexport default GeometryAttributes;\n","/**\n * Represents which vertices should have a value of `true` for the `applyOffset` attribute\n * @private\n */\nvar GeometryOffsetAttribute = {\n NONE: 0,\n TOP: 1,\n ALL: 2,\n};\nexport default Object.freeze(GeometryOffsetAttribute);\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A vertex format defines what attributes make up a vertex. A VertexFormat can be provided\n * to a {@link Geometry} to request that certain properties be computed, e.g., just position,\n * position and normal, etc.\n *\n * @param {Object} [options] An object with boolean properties corresponding to VertexFormat properties as shown in the code example.\n *\n * @alias VertexFormat\n * @constructor\n *\n * @example\n * // Create a vertex format with position and 2D texture coordinate attributes.\n * var format = new Cesium.VertexFormat({\n * position : true,\n * st : true\n * });\n *\n * @see Geometry#attributes\n * @see Packable\n */\nfunction VertexFormat(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * When <code>true</code>, the vertex has a 3D position attribute.\n * <p>\n * 64-bit floating-point (for precision). 3 components per attribute.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.position = defaultValue(options.position, false);\n\n /**\n * When <code>true</code>, the vertex has a normal attribute (normalized), which is commonly used for lighting.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.normal = defaultValue(options.normal, false);\n\n /**\n * When <code>true</code>, the vertex has a 2D texture coordinate attribute.\n * <p>\n * 32-bit floating-point. 2 components per attribute\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.st = defaultValue(options.st, false);\n\n /**\n * When <code>true</code>, the vertex has a bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.bitangent = defaultValue(options.bitangent, false);\n\n /**\n * When <code>true</code>, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n * <p>\n * 32-bit floating-point. 3 components per attribute.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.tangent = defaultValue(options.tangent, false);\n\n /**\n * When <code>true</code>, the vertex has an RGB color attribute.\n * <p>\n * 8-bit unsigned byte. 3 components per attribute.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.color = defaultValue(options.color, false);\n}\n\n/**\n * An immutable vertex format with only a position attribute.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n */\nVertexFormat.POSITION_ONLY = Object.freeze(\n new VertexFormat({\n position: true,\n })\n);\n\n/**\n * An immutable vertex format with position and normal attributes.\n * This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n */\nVertexFormat.POSITION_AND_NORMAL = Object.freeze(\n new VertexFormat({\n position: true,\n normal: true,\n })\n);\n\n/**\n * An immutable vertex format with position, normal, and st attributes.\n * This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport}\n * is <code>TEXTURED/code>.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n * @see VertexFormat#st\n */\nVertexFormat.POSITION_NORMAL_AND_ST = Object.freeze(\n new VertexFormat({\n position: true,\n normal: true,\n st: true,\n })\n);\n\n/**\n * An immutable vertex format with position and st attributes.\n * This is compatible with {@link EllipsoidSurfaceAppearance}.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#st\n */\nVertexFormat.POSITION_AND_ST = Object.freeze(\n new VertexFormat({\n position: true,\n st: true,\n })\n);\n\n/**\n * An immutable vertex format with position and color attributes.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#color\n */\nVertexFormat.POSITION_AND_COLOR = Object.freeze(\n new VertexFormat({\n position: true,\n color: true,\n })\n);\n\n/**\n * An immutable vertex format with well-known attributes: position, normal, st, tangent, and bitangent.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n * @see VertexFormat#st\n * @see VertexFormat#tangent\n * @see VertexFormat#bitangent\n */\nVertexFormat.ALL = Object.freeze(\n new VertexFormat({\n position: true,\n normal: true,\n st: true,\n tangent: true,\n bitangent: true,\n })\n);\n\n/**\n * An immutable vertex format with position, normal, and st attributes.\n * This is compatible with most appearances and materials; however\n * normal and st attributes are not always required. When this is\n * known in advance, another <code>VertexFormat</code> should be used.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n */\nVertexFormat.DEFAULT = VertexFormat.POSITION_NORMAL_AND_ST;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nVertexFormat.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {VertexFormat} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nVertexFormat.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.position ? 1.0 : 0.0;\n array[startingIndex++] = value.normal ? 1.0 : 0.0;\n array[startingIndex++] = value.st ? 1.0 : 0.0;\n array[startingIndex++] = value.tangent ? 1.0 : 0.0;\n array[startingIndex++] = value.bitangent ? 1.0 : 0.0;\n array[startingIndex] = value.color ? 1.0 : 0.0;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {VertexFormat} [result] The object into which to store the result.\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided.\n */\nVertexFormat.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new VertexFormat();\n }\n\n result.position = array[startingIndex++] === 1.0;\n result.normal = array[startingIndex++] === 1.0;\n result.st = array[startingIndex++] === 1.0;\n result.tangent = array[startingIndex++] === 1.0;\n result.bitangent = array[startingIndex++] === 1.0;\n result.color = array[startingIndex] === 1.0;\n return result;\n};\n\n/**\n * Duplicates a VertexFormat instance.\n *\n * @param {VertexFormat} vertexFormat The vertex format to duplicate.\n * @param {VertexFormat} [result] The object onto which to store the result.\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided. (Returns undefined if vertexFormat is undefined)\n */\nVertexFormat.clone = function (vertexFormat, result) {\n if (!defined(vertexFormat)) {\n return undefined;\n }\n if (!defined(result)) {\n result = new VertexFormat();\n }\n\n result.position = vertexFormat.position;\n result.normal = vertexFormat.normal;\n result.st = vertexFormat.st;\n result.tangent = vertexFormat.tangent;\n result.bitangent = vertexFormat.bitangent;\n result.color = vertexFormat.color;\n return result;\n};\nexport default VertexFormat;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar diffScratch = new Cartesian3();\n\n/**\n * Describes a cube centered at the origin.\n *\n * @alias BoxGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @see BoxGeometry.fromDimensions\n * @see BoxGeometry.createGeometry\n * @see Packable\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Box.html|Cesium Sandcastle Box Demo}\n *\n * @example\n * var box = new Cesium.BoxGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\n * });\n * var geometry = Cesium.BoxGeometry.createGeometry(box);\n */\nfunction BoxGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var min = options.minimum;\n var max = options.maximum;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"min\", min);\n Check.typeOf.object(\"max\", max);\n if (\n defined(options.offsetAttribute) &&\n options.offsetAttribute === GeometryOffsetAttribute.TOP\n ) {\n throw new DeveloperError(\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n this._minimum = Cartesian3.clone(min);\n this._maximum = Cartesian3.clone(max);\n this._vertexFormat = vertexFormat;\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createBoxGeometry\";\n}\n\n/**\n * Creates a cube centered at the origin given its dimensions.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the <code>Cartesian3</code>, respectively.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @returns {BoxGeometry}\n *\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\n *\n *\n * @example\n * var box = Cesium.BoxGeometry.fromDimensions({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\n * });\n * var geometry = Cesium.BoxGeometry.createGeometry(box);\n *\n * @see BoxGeometry.createGeometry\n */\nBoxGeometry.fromDimensions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var dimensions = options.dimensions;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"dimensions\", dimensions);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\n //>>includeEnd('debug');\n\n var corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\n\n return new BoxGeometry({\n minimum: Cartesian3.negate(corner, new Cartesian3()),\n maximum: corner,\n vertexFormat: options.vertexFormat,\n offsetAttribute: options.offsetAttribute,\n });\n};\n\n/**\n * Creates a cube from the dimensions of an AxisAlignedBoundingBox.\n *\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\n * @returns {BoxGeometry}\n *\n *\n *\n * @example\n * var aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ]));\n * var box = Cesium.BoxGeometry.fromAxisAlignedBoundingBox(aabb);\n *\n * @see BoxGeometry.createGeometry\n */\nBoxGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"boundingBox\", boundingBox);\n //>>includeEnd('debug');\n\n return new BoxGeometry({\n minimum: boundingBox.minimum,\n maximum: boundingBox.maximum,\n });\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nBoxGeometry.packedLength =\n 2 * Cartesian3.packedLength + VertexFormat.packedLength + 1;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoxGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nBoxGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._minimum, array, startingIndex);\n Cartesian3.pack(\n value._maximum,\n array,\n startingIndex + Cartesian3.packedLength\n );\n VertexFormat.pack(\n value._vertexFormat,\n array,\n startingIndex + 2 * Cartesian3.packedLength\n );\n array[\n startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\n ] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchMin = new Cartesian3();\nvar scratchMax = new Cartesian3();\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n minimum: scratchMin,\n maximum: scratchMax,\n vertexFormat: scratchVertexFormat,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoxGeometry} [result] The object into which to store the result.\n * @returns {BoxGeometry} The modified result parameter or a new BoxGeometry instance if one was not provided.\n */\nBoxGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var min = Cartesian3.unpack(array, startingIndex, scratchMin);\n var max = Cartesian3.unpack(\n array,\n startingIndex + Cartesian3.packedLength,\n scratchMax\n );\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex + 2 * Cartesian3.packedLength,\n scratchVertexFormat\n );\n var offsetAttribute =\n array[\n startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\n ];\n\n if (!defined(result)) {\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new BoxGeometry(scratchOptions);\n }\n\n result._minimum = Cartesian3.clone(min, result._minimum);\n result._maximum = Cartesian3.clone(max, result._maximum);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of a box, including its vertices, indices, and a bounding sphere.\n *\n * @param {BoxGeometry} boxGeometry A description of the box.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nBoxGeometry.createGeometry = function (boxGeometry) {\n var min = boxGeometry._minimum;\n var max = boxGeometry._maximum;\n var vertexFormat = boxGeometry._vertexFormat;\n\n if (Cartesian3.equals(min, max)) {\n return;\n }\n\n var attributes = new GeometryAttributes();\n var indices;\n var positions;\n\n if (\n vertexFormat.position &&\n (vertexFormat.st ||\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent)\n ) {\n if (vertexFormat.position) {\n // 8 corner points. Duplicated 3 times each for each incident edge/face.\n positions = new Float64Array(6 * 4 * 3);\n\n // +z face\n positions[0] = min.x;\n positions[1] = min.y;\n positions[2] = max.z;\n positions[3] = max.x;\n positions[4] = min.y;\n positions[5] = max.z;\n positions[6] = max.x;\n positions[7] = max.y;\n positions[8] = max.z;\n positions[9] = min.x;\n positions[10] = max.y;\n positions[11] = max.z;\n\n // -z face\n positions[12] = min.x;\n positions[13] = min.y;\n positions[14] = min.z;\n positions[15] = max.x;\n positions[16] = min.y;\n positions[17] = min.z;\n positions[18] = max.x;\n positions[19] = max.y;\n positions[20] = min.z;\n positions[21] = min.x;\n positions[22] = max.y;\n positions[23] = min.z;\n\n // +x face\n positions[24] = max.x;\n positions[25] = min.y;\n positions[26] = min.z;\n positions[27] = max.x;\n positions[28] = max.y;\n positions[29] = min.z;\n positions[30] = max.x;\n positions[31] = max.y;\n positions[32] = max.z;\n positions[33] = max.x;\n positions[34] = min.y;\n positions[35] = max.z;\n\n // -x face\n positions[36] = min.x;\n positions[37] = min.y;\n positions[38] = min.z;\n positions[39] = min.x;\n positions[40] = max.y;\n positions[41] = min.z;\n positions[42] = min.x;\n positions[43] = max.y;\n positions[44] = max.z;\n positions[45] = min.x;\n positions[46] = min.y;\n positions[47] = max.z;\n\n // +y face\n positions[48] = min.x;\n positions[49] = max.y;\n positions[50] = min.z;\n positions[51] = max.x;\n positions[52] = max.y;\n positions[53] = min.z;\n positions[54] = max.x;\n positions[55] = max.y;\n positions[56] = max.z;\n positions[57] = min.x;\n positions[58] = max.y;\n positions[59] = max.z;\n\n // -y face\n positions[60] = min.x;\n positions[61] = min.y;\n positions[62] = min.z;\n positions[63] = max.x;\n positions[64] = min.y;\n positions[65] = min.z;\n positions[66] = max.x;\n positions[67] = min.y;\n positions[68] = max.z;\n positions[69] = min.x;\n positions[70] = min.y;\n positions[71] = max.z;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n }\n\n if (vertexFormat.normal) {\n var normals = new Float32Array(6 * 4 * 3);\n\n // +z face\n normals[0] = 0.0;\n normals[1] = 0.0;\n normals[2] = 1.0;\n normals[3] = 0.0;\n normals[4] = 0.0;\n normals[5] = 1.0;\n normals[6] = 0.0;\n normals[7] = 0.0;\n normals[8] = 1.0;\n normals[9] = 0.0;\n normals[10] = 0.0;\n normals[11] = 1.0;\n\n // -z face\n normals[12] = 0.0;\n normals[13] = 0.0;\n normals[14] = -1.0;\n normals[15] = 0.0;\n normals[16] = 0.0;\n normals[17] = -1.0;\n normals[18] = 0.0;\n normals[19] = 0.0;\n normals[20] = -1.0;\n normals[21] = 0.0;\n normals[22] = 0.0;\n normals[23] = -1.0;\n\n // +x face\n normals[24] = 1.0;\n normals[25] = 0.0;\n normals[26] = 0.0;\n normals[27] = 1.0;\n normals[28] = 0.0;\n normals[29] = 0.0;\n normals[30] = 1.0;\n normals[31] = 0.0;\n normals[32] = 0.0;\n normals[33] = 1.0;\n normals[34] = 0.0;\n normals[35] = 0.0;\n\n // -x face\n normals[36] = -1.0;\n normals[37] = 0.0;\n normals[38] = 0.0;\n normals[39] = -1.0;\n normals[40] = 0.0;\n normals[41] = 0.0;\n normals[42] = -1.0;\n normals[43] = 0.0;\n normals[44] = 0.0;\n normals[45] = -1.0;\n normals[46] = 0.0;\n normals[47] = 0.0;\n\n // +y face\n normals[48] = 0.0;\n normals[49] = 1.0;\n normals[50] = 0.0;\n normals[51] = 0.0;\n normals[52] = 1.0;\n normals[53] = 0.0;\n normals[54] = 0.0;\n normals[55] = 1.0;\n normals[56] = 0.0;\n normals[57] = 0.0;\n normals[58] = 1.0;\n normals[59] = 0.0;\n\n // -y face\n normals[60] = 0.0;\n normals[61] = -1.0;\n normals[62] = 0.0;\n normals[63] = 0.0;\n normals[64] = -1.0;\n normals[65] = 0.0;\n normals[66] = 0.0;\n normals[67] = -1.0;\n normals[68] = 0.0;\n normals[69] = 0.0;\n normals[70] = -1.0;\n normals[71] = 0.0;\n\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.st) {\n var texCoords = new Float32Array(6 * 4 * 2);\n\n // +z face\n texCoords[0] = 0.0;\n texCoords[1] = 0.0;\n texCoords[2] = 1.0;\n texCoords[3] = 0.0;\n texCoords[4] = 1.0;\n texCoords[5] = 1.0;\n texCoords[6] = 0.0;\n texCoords[7] = 1.0;\n\n // -z face\n texCoords[8] = 1.0;\n texCoords[9] = 0.0;\n texCoords[10] = 0.0;\n texCoords[11] = 0.0;\n texCoords[12] = 0.0;\n texCoords[13] = 1.0;\n texCoords[14] = 1.0;\n texCoords[15] = 1.0;\n\n //+x face\n texCoords[16] = 0.0;\n texCoords[17] = 0.0;\n texCoords[18] = 1.0;\n texCoords[19] = 0.0;\n texCoords[20] = 1.0;\n texCoords[21] = 1.0;\n texCoords[22] = 0.0;\n texCoords[23] = 1.0;\n\n // -x face\n texCoords[24] = 1.0;\n texCoords[25] = 0.0;\n texCoords[26] = 0.0;\n texCoords[27] = 0.0;\n texCoords[28] = 0.0;\n texCoords[29] = 1.0;\n texCoords[30] = 1.0;\n texCoords[31] = 1.0;\n\n // +y face\n texCoords[32] = 1.0;\n texCoords[33] = 0.0;\n texCoords[34] = 0.0;\n texCoords[35] = 0.0;\n texCoords[36] = 0.0;\n texCoords[37] = 1.0;\n texCoords[38] = 1.0;\n texCoords[39] = 1.0;\n\n // -y face\n texCoords[40] = 0.0;\n texCoords[41] = 0.0;\n texCoords[42] = 1.0;\n texCoords[43] = 0.0;\n texCoords[44] = 1.0;\n texCoords[45] = 1.0;\n texCoords[46] = 0.0;\n texCoords[47] = 1.0;\n\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: texCoords,\n });\n }\n\n if (vertexFormat.tangent) {\n var tangents = new Float32Array(6 * 4 * 3);\n\n // +z face\n tangents[0] = 1.0;\n tangents[1] = 0.0;\n tangents[2] = 0.0;\n tangents[3] = 1.0;\n tangents[4] = 0.0;\n tangents[5] = 0.0;\n tangents[6] = 1.0;\n tangents[7] = 0.0;\n tangents[8] = 0.0;\n tangents[9] = 1.0;\n tangents[10] = 0.0;\n tangents[11] = 0.0;\n\n // -z face\n tangents[12] = -1.0;\n tangents[13] = 0.0;\n tangents[14] = 0.0;\n tangents[15] = -1.0;\n tangents[16] = 0.0;\n tangents[17] = 0.0;\n tangents[18] = -1.0;\n tangents[19] = 0.0;\n tangents[20] = 0.0;\n tangents[21] = -1.0;\n tangents[22] = 0.0;\n tangents[23] = 0.0;\n\n // +x face\n tangents[24] = 0.0;\n tangents[25] = 1.0;\n tangents[26] = 0.0;\n tangents[27] = 0.0;\n tangents[28] = 1.0;\n tangents[29] = 0.0;\n tangents[30] = 0.0;\n tangents[31] = 1.0;\n tangents[32] = 0.0;\n tangents[33] = 0.0;\n tangents[34] = 1.0;\n tangents[35] = 0.0;\n\n // -x face\n tangents[36] = 0.0;\n tangents[37] = -1.0;\n tangents[38] = 0.0;\n tangents[39] = 0.0;\n tangents[40] = -1.0;\n tangents[41] = 0.0;\n tangents[42] = 0.0;\n tangents[43] = -1.0;\n tangents[44] = 0.0;\n tangents[45] = 0.0;\n tangents[46] = -1.0;\n tangents[47] = 0.0;\n\n // +y face\n tangents[48] = -1.0;\n tangents[49] = 0.0;\n tangents[50] = 0.0;\n tangents[51] = -1.0;\n tangents[52] = 0.0;\n tangents[53] = 0.0;\n tangents[54] = -1.0;\n tangents[55] = 0.0;\n tangents[56] = 0.0;\n tangents[57] = -1.0;\n tangents[58] = 0.0;\n tangents[59] = 0.0;\n\n // -y face\n tangents[60] = 1.0;\n tangents[61] = 0.0;\n tangents[62] = 0.0;\n tangents[63] = 1.0;\n tangents[64] = 0.0;\n tangents[65] = 0.0;\n tangents[66] = 1.0;\n tangents[67] = 0.0;\n tangents[68] = 0.0;\n tangents[69] = 1.0;\n tangents[70] = 0.0;\n tangents[71] = 0.0;\n\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n var bitangents = new Float32Array(6 * 4 * 3);\n\n // +z face\n bitangents[0] = 0.0;\n bitangents[1] = 1.0;\n bitangents[2] = 0.0;\n bitangents[3] = 0.0;\n bitangents[4] = 1.0;\n bitangents[5] = 0.0;\n bitangents[6] = 0.0;\n bitangents[7] = 1.0;\n bitangents[8] = 0.0;\n bitangents[9] = 0.0;\n bitangents[10] = 1.0;\n bitangents[11] = 0.0;\n\n // -z face\n bitangents[12] = 0.0;\n bitangents[13] = 1.0;\n bitangents[14] = 0.0;\n bitangents[15] = 0.0;\n bitangents[16] = 1.0;\n bitangents[17] = 0.0;\n bitangents[18] = 0.0;\n bitangents[19] = 1.0;\n bitangents[20] = 0.0;\n bitangents[21] = 0.0;\n bitangents[22] = 1.0;\n bitangents[23] = 0.0;\n\n // +x face\n bitangents[24] = 0.0;\n bitangents[25] = 0.0;\n bitangents[26] = 1.0;\n bitangents[27] = 0.0;\n bitangents[28] = 0.0;\n bitangents[29] = 1.0;\n bitangents[30] = 0.0;\n bitangents[31] = 0.0;\n bitangents[32] = 1.0;\n bitangents[33] = 0.0;\n bitangents[34] = 0.0;\n bitangents[35] = 1.0;\n\n // -x face\n bitangents[36] = 0.0;\n bitangents[37] = 0.0;\n bitangents[38] = 1.0;\n bitangents[39] = 0.0;\n bitangents[40] = 0.0;\n bitangents[41] = 1.0;\n bitangents[42] = 0.0;\n bitangents[43] = 0.0;\n bitangents[44] = 1.0;\n bitangents[45] = 0.0;\n bitangents[46] = 0.0;\n bitangents[47] = 1.0;\n\n // +y face\n bitangents[48] = 0.0;\n bitangents[49] = 0.0;\n bitangents[50] = 1.0;\n bitangents[51] = 0.0;\n bitangents[52] = 0.0;\n bitangents[53] = 1.0;\n bitangents[54] = 0.0;\n bitangents[55] = 0.0;\n bitangents[56] = 1.0;\n bitangents[57] = 0.0;\n bitangents[58] = 0.0;\n bitangents[59] = 1.0;\n\n // -y face\n bitangents[60] = 0.0;\n bitangents[61] = 0.0;\n bitangents[62] = 1.0;\n bitangents[63] = 0.0;\n bitangents[64] = 0.0;\n bitangents[65] = 1.0;\n bitangents[66] = 0.0;\n bitangents[67] = 0.0;\n bitangents[68] = 1.0;\n bitangents[69] = 0.0;\n bitangents[70] = 0.0;\n bitangents[71] = 1.0;\n\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n // 12 triangles: 6 faces, 2 triangles each.\n indices = new Uint16Array(6 * 2 * 3);\n\n // +z face\n indices[0] = 0;\n indices[1] = 1;\n indices[2] = 2;\n indices[3] = 0;\n indices[4] = 2;\n indices[5] = 3;\n\n // -z face\n indices[6] = 4 + 2;\n indices[7] = 4 + 1;\n indices[8] = 4 + 0;\n indices[9] = 4 + 3;\n indices[10] = 4 + 2;\n indices[11] = 4 + 0;\n\n // +x face\n indices[12] = 8 + 0;\n indices[13] = 8 + 1;\n indices[14] = 8 + 2;\n indices[15] = 8 + 0;\n indices[16] = 8 + 2;\n indices[17] = 8 + 3;\n\n // -x face\n indices[18] = 12 + 2;\n indices[19] = 12 + 1;\n indices[20] = 12 + 0;\n indices[21] = 12 + 3;\n indices[22] = 12 + 2;\n indices[23] = 12 + 0;\n\n // +y face\n indices[24] = 16 + 2;\n indices[25] = 16 + 1;\n indices[26] = 16 + 0;\n indices[27] = 16 + 3;\n indices[28] = 16 + 2;\n indices[29] = 16 + 0;\n\n // -y face\n indices[30] = 20 + 0;\n indices[31] = 20 + 1;\n indices[32] = 20 + 2;\n indices[33] = 20 + 0;\n indices[34] = 20 + 2;\n indices[35] = 20 + 3;\n } else {\n // Positions only - no need to duplicate corner points\n positions = new Float64Array(8 * 3);\n\n positions[0] = min.x;\n positions[1] = min.y;\n positions[2] = min.z;\n positions[3] = max.x;\n positions[4] = min.y;\n positions[5] = min.z;\n positions[6] = max.x;\n positions[7] = max.y;\n positions[8] = min.z;\n positions[9] = min.x;\n positions[10] = max.y;\n positions[11] = min.z;\n positions[12] = min.x;\n positions[13] = min.y;\n positions[14] = max.z;\n positions[15] = max.x;\n positions[16] = min.y;\n positions[17] = max.z;\n positions[18] = max.x;\n positions[19] = max.y;\n positions[20] = max.z;\n positions[21] = min.x;\n positions[22] = max.y;\n positions[23] = max.z;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n // 12 triangles: 6 faces, 2 triangles each.\n indices = new Uint16Array(6 * 2 * 3);\n\n // plane z = corner.Z\n indices[0] = 4;\n indices[1] = 5;\n indices[2] = 6;\n indices[3] = 4;\n indices[4] = 6;\n indices[5] = 7;\n\n // plane z = -corner.Z\n indices[6] = 1;\n indices[7] = 0;\n indices[8] = 3;\n indices[9] = 1;\n indices[10] = 3;\n indices[11] = 2;\n\n // plane x = corner.X\n indices[12] = 1;\n indices[13] = 6;\n indices[14] = 5;\n indices[15] = 1;\n indices[16] = 2;\n indices[17] = 6;\n\n // plane y = corner.Y\n indices[18] = 2;\n indices[19] = 3;\n indices[20] = 7;\n indices[21] = 2;\n indices[22] = 7;\n indices[23] = 6;\n\n // plane x = -corner.X\n indices[24] = 3;\n indices[25] = 0;\n indices[26] = 4;\n indices[27] = 3;\n indices[28] = 4;\n indices[29] = 7;\n\n // plane y = -corner.Y\n indices[30] = 0;\n indices[31] = 1;\n indices[32] = 5;\n indices[33] = 0;\n indices[34] = 5;\n indices[35] = 4;\n }\n\n var diff = Cartesian3.subtract(max, min, diffScratch);\n var radius = Cartesian3.magnitude(diff) * 0.5;\n\n if (defined(boxGeometry._offsetAttribute)) {\n var length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\n offsetAttribute: boxGeometry._offsetAttribute,\n });\n};\n\nvar unitBoxGeometry;\n\n/**\n * Returns the geometric representation of a unit box, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nBoxGeometry.getUnitBox = function () {\n if (!defined(unitBoxGeometry)) {\n unitBoxGeometry = BoxGeometry.createGeometry(\n BoxGeometry.fromDimensions({\n dimensions: new Cartesian3(1.0, 1.0, 1.0),\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n }\n return unitBoxGeometry;\n};\nexport default BoxGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nvar diffScratch = new Cartesian3();\n\n/**\n * A description of the outline of a cube centered at the origin.\n *\n * @alias BoxOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\n *\n * @see BoxOutlineGeometry.fromDimensions\n * @see BoxOutlineGeometry.createGeometry\n * @see Packable\n *\n * @example\n * var box = new Cesium.BoxOutlineGeometry({\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\n * });\n * var geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\n */\nfunction BoxOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var min = options.minimum;\n var max = options.maximum;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"min\", min);\n Check.typeOf.object(\"max\", max);\n if (\n defined(options.offsetAttribute) &&\n options.offsetAttribute === GeometryOffsetAttribute.TOP\n ) {\n throw new DeveloperError(\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n this._min = Cartesian3.clone(min);\n this._max = Cartesian3.clone(max);\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createBoxOutlineGeometry\";\n}\n\n/**\n * Creates an outline of a cube centered at the origin given its dimensions.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the <code>Cartesian3</code>, respectively.\n * @returns {BoxOutlineGeometry}\n *\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\n *\n *\n * @example\n * var box = Cesium.BoxOutlineGeometry.fromDimensions({\n * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\n * });\n * var geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\n *\n * @see BoxOutlineGeometry.createGeometry\n */\nBoxOutlineGeometry.fromDimensions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var dimensions = options.dimensions;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"dimensions\", dimensions);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\n //>>includeEnd('debug');\n\n var corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\n\n return new BoxOutlineGeometry({\n minimum: Cartesian3.negate(corner, new Cartesian3()),\n maximum: corner,\n offsetAttribute: options.offsetAttribute,\n });\n};\n\n/**\n * Creates an outline of a cube from the dimensions of an AxisAlignedBoundingBox.\n *\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\n * @returns {BoxOutlineGeometry}\n *\n *\n *\n * @example\n * var aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ]));\n * var box = Cesium.BoxOutlineGeometry.fromAxisAlignedBoundingBox(aabb);\n *\n * @see BoxOutlineGeometry.createGeometry\n */\nBoxOutlineGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"boundindBox\", boundingBox);\n //>>includeEnd('debug');\n\n return new BoxOutlineGeometry({\n minimum: boundingBox.minimum,\n maximum: boundingBox.maximum,\n });\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nBoxOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 1;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoxOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nBoxOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._min, array, startingIndex);\n Cartesian3.pack(value._max, array, startingIndex + Cartesian3.packedLength);\n array[startingIndex + Cartesian3.packedLength * 2] = defaultValue(\n value._offsetAttribute,\n -1\n );\n\n return array;\n};\n\nvar scratchMin = new Cartesian3();\nvar scratchMax = new Cartesian3();\nvar scratchOptions = {\n minimum: scratchMin,\n maximum: scratchMax,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoxOutlineGeometry} [result] The object into which to store the result.\n * @returns {BoxOutlineGeometry} The modified result parameter or a new BoxOutlineGeometry instance if one was not provided.\n */\nBoxOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var min = Cartesian3.unpack(array, startingIndex, scratchMin);\n var max = Cartesian3.unpack(\n array,\n startingIndex + Cartesian3.packedLength,\n scratchMax\n );\n var offsetAttribute = array[startingIndex + Cartesian3.packedLength * 2];\n\n if (!defined(result)) {\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new BoxOutlineGeometry(scratchOptions);\n }\n\n result._min = Cartesian3.clone(min, result._min);\n result._max = Cartesian3.clone(max, result._max);\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a box, including its vertices, indices, and a bounding sphere.\n *\n * @param {BoxOutlineGeometry} boxGeometry A description of the box outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nBoxOutlineGeometry.createGeometry = function (boxGeometry) {\n var min = boxGeometry._min;\n var max = boxGeometry._max;\n\n if (Cartesian3.equals(min, max)) {\n return;\n }\n\n var attributes = new GeometryAttributes();\n var indices = new Uint16Array(12 * 2);\n var positions = new Float64Array(8 * 3);\n\n positions[0] = min.x;\n positions[1] = min.y;\n positions[2] = min.z;\n positions[3] = max.x;\n positions[4] = min.y;\n positions[5] = min.z;\n positions[6] = max.x;\n positions[7] = max.y;\n positions[8] = min.z;\n positions[9] = min.x;\n positions[10] = max.y;\n positions[11] = min.z;\n\n positions[12] = min.x;\n positions[13] = min.y;\n positions[14] = max.z;\n positions[15] = max.x;\n positions[16] = min.y;\n positions[17] = max.z;\n positions[18] = max.x;\n positions[19] = max.y;\n positions[20] = max.z;\n positions[21] = min.x;\n positions[22] = max.y;\n positions[23] = max.z;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n // top\n indices[0] = 4;\n indices[1] = 5;\n indices[2] = 5;\n indices[3] = 6;\n indices[4] = 6;\n indices[5] = 7;\n indices[6] = 7;\n indices[7] = 4;\n\n // bottom\n indices[8] = 0;\n indices[9] = 1;\n indices[10] = 1;\n indices[11] = 2;\n indices[12] = 2;\n indices[13] = 3;\n indices[14] = 3;\n indices[15] = 0;\n\n // left\n indices[16] = 0;\n indices[17] = 4;\n indices[18] = 1;\n indices[19] = 5;\n\n //right\n indices[20] = 2;\n indices[21] = 6;\n indices[22] = 3;\n indices[23] = 7;\n\n var diff = Cartesian3.subtract(max, min, diffScratch);\n var radius = Cartesian3.magnitude(diff) * 0.5;\n\n if (defined(boxGeometry._offsetAttribute)) {\n var length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\n offsetAttribute: boxGeometry._offsetAttribute,\n });\n};\nexport default BoxOutlineGeometry;\n","import defined from \"./defined.js\";\n\nvar implementation;\nif (typeof cancelAnimationFrame !== \"undefined\") {\n implementation = cancelAnimationFrame;\n}\n\n(function () {\n // look for vendor prefixed function\n if (!defined(implementation) && typeof window !== \"undefined\") {\n var vendors = [\"webkit\", \"moz\", \"ms\", \"o\"];\n var i = 0;\n var len = vendors.length;\n while (i < len && !defined(implementation)) {\n implementation = window[vendors[i] + \"CancelAnimationFrame\"];\n if (!defined(implementation)) {\n implementation = window[vendors[i] + \"CancelRequestAnimationFrame\"];\n }\n ++i;\n }\n }\n\n // otherwise, assume requestAnimationFrame is based on setTimeout, so use clearTimeout\n if (!defined(implementation)) {\n implementation = clearTimeout;\n }\n})();\n\n/**\n * A browser-independent function to cancel an animation frame requested using {@link requestAnimationFrame}.\n *\n * @function cancelAnimationFrame\n *\n * @param {Number} requestID The value returned by {@link requestAnimationFrame}.\n *\n * @see {@link http://www.w3.org/TR/animation-timing/#the-WindowAnimationTiming-interface|The WindowAnimationTiming interface}\n */\nfunction cancelAnimationFramePolyfill(requestID) {\n // we need this extra wrapper function because the native cancelAnimationFrame\n // functions must be invoked on the global scope (window), which is not the case\n // if invoked as Cesium.cancelAnimationFrame(requestID)\n implementation(requestID);\n}\nexport default cancelAnimationFramePolyfill;\n","import when from \"../ThirdParty/when.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\n\n/**\n * Geocodes queries containing longitude and latitude coordinates and an optional height.\n * Query format: `longitude latitude (height)` with longitude/latitude in degrees and height in meters.\n *\n * @alias CartographicGeocoderService\n * @constructor\n */\nfunction CartographicGeocoderService() {}\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nCartographicGeocoderService.prototype.geocode = function (query) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"query\", query);\n //>>includeEnd('debug');\n\n var splitQuery = query.match(/[^\\s,\\n]+/g);\n if (splitQuery.length === 2 || splitQuery.length === 3) {\n var longitude = +splitQuery[0];\n var latitude = +splitQuery[1];\n var height = splitQuery.length === 3 ? +splitQuery[2] : 300.0;\n\n if (isNaN(longitude) && isNaN(latitude)) {\n var coordTest = /^(\\d+.?\\d*)([nsew])/i;\n for (var i = 0; i < splitQuery.length; ++i) {\n var splitCoord = splitQuery[i].match(coordTest);\n if (coordTest.test(splitQuery[i]) && splitCoord.length === 3) {\n if (/^[ns]/i.test(splitCoord[2])) {\n latitude = /^[n]/i.test(splitCoord[2])\n ? +splitCoord[1]\n : -splitCoord[1];\n } else if (/^[ew]/i.test(splitCoord[2])) {\n longitude = /^[e]/i.test(splitCoord[2])\n ? +splitCoord[1]\n : -splitCoord[1];\n }\n }\n }\n }\n\n if (!isNaN(longitude) && !isNaN(latitude) && !isNaN(height)) {\n var result = {\n displayName: query,\n destination: Cartesian3.fromDegrees(longitude, latitude, height),\n };\n return when.resolve([result]);\n }\n }\n return when.resolve([]);\n};\nexport default CartographicGeocoderService;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Creates a curve parameterized and evaluated by time. This type describes an interface\n * and is not intended to be instantiated directly.\n *\n * @alias Spline\n * @constructor\n *\n * @see CatmullRomSpline\n * @see HermiteSpline\n * @see LinearSpline\n * @see QuaternionSpline\n */\nfunction Spline() {\n /**\n * An array of times for the control points.\n * @type {Number[]}\n * @default undefined\n */\n this.times = undefined;\n\n /**\n * An array of control points.\n * @type {Cartesian3[]|Quaternion[]}\n * @default undefined\n */\n this.points = undefined;\n\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Evaluates the curve at a given time.\n * @function\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Cartesian3|Quaternion|Number[]} [result] The object onto which to store the result.\n * @returns {Cartesian3|Quaternion|Number[]} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nSpline.prototype.evaluate = DeveloperError.throwInstantiationError;\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n *\n * @param {Number} time The time.\n * @param {Number} startIndex The index from which to start the search.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nSpline.prototype.findTimeInterval = function (time, startIndex) {\n var times = this.times;\n var length = times.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (time < times[0] || time > times[length - 1]) {\n throw new DeveloperError(\"time is out of range.\");\n }\n //>>includeEnd('debug');\n\n // Take advantage of temporal coherence by checking current, next and previous intervals\n // for containment of time.\n startIndex = defaultValue(startIndex, 0);\n\n if (time >= times[startIndex]) {\n if (startIndex + 1 < length && time < times[startIndex + 1]) {\n return startIndex;\n } else if (startIndex + 2 < length && time < times[startIndex + 2]) {\n return startIndex + 1;\n }\n } else if (startIndex - 1 >= 0 && time >= times[startIndex - 1]) {\n return startIndex - 1;\n }\n\n // The above failed so do a linear search. For the use cases so far, the\n // length of the list is less than 10. In the future, if there is a bottle neck,\n // it might be here.\n\n var i;\n if (time > times[startIndex]) {\n for (i = startIndex; i < length - 1; ++i) {\n if (time >= times[i] && time < times[i + 1]) {\n break;\n }\n }\n } else {\n for (i = startIndex - 1; i >= 0; --i) {\n if (time >= times[i] && time < times[i + 1]) {\n break;\n }\n }\n }\n\n if (i === length - 1) {\n i = length - 2;\n }\n\n return i;\n};\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around the animation period.\n */\nSpline.prototype.wrapTime = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"time\", time);\n //>>includeEnd('debug');\n\n var times = this.times;\n var timeEnd = times[times.length - 1];\n var timeStart = times[0];\n var timeStretch = timeEnd - timeStart;\n var divs;\n if (time < timeStart) {\n divs = Math.floor((timeStart - time) / timeStretch) + 1;\n time += divs * timeStretch;\n }\n if (time > timeEnd) {\n divs = Math.floor((time - timeEnd) / timeStretch) + 1;\n time -= divs * timeStretch;\n }\n return time;\n};\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nSpline.prototype.clampTime = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"time\", time);\n //>>includeEnd('debug');\n\n var times = this.times;\n return CesiumMath.clamp(time, times[0], times[times.length - 1]);\n};\nexport default Spline;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that uses piecewise linear interpolation to create a curve.\n *\n * @alias LinearSpline\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n * The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Cartesian3[]} options.points The array of {@link Cartesian3} control points.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n *\n * @example\n * var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * var spline = new Cesium.LinearSpline({\n * times : times,\n * points : [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ]\n * });\n *\n * var p0 = spline.evaluate(times[0]);\n *\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n * @see WeightSpline\n */\nfunction LinearSpline(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var points = options.points;\n var times = options.times;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(points) || !defined(times)) {\n throw new DeveloperError(\"points and times are required.\");\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length) {\n throw new DeveloperError(\"times.length must be equal to points.length.\");\n }\n //>>includeEnd('debug');\n\n this._times = times;\n this._points = points;\n\n this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(LinearSpline.prototype, {\n /**\n * An array of times for the control points.\n *\n * @memberof LinearSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n times: {\n get: function () {\n return this._times;\n },\n },\n\n /**\n * An array of {@link Cartesian3} control points.\n *\n * @memberof LinearSpline.prototype\n *\n * @type {Cartesian3[]}\n * @readonly\n */\n points: {\n get: function () {\n return this._points;\n },\n },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {Number} time The time.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nLinearSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around to the updated animation.\n */\nLinearSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nLinearSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nLinearSpline.prototype.evaluate = function (time, result) {\n var points = this.points;\n var times = this.times;\n\n var i = (this._lastTimeIndex = this.findTimeInterval(\n time,\n this._lastTimeIndex\n ));\n var u = (time - times[i]) / (times[i + 1] - times[i]);\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n return Cartesian3.lerp(points[i], points[i + 1], u, result);\n};\nexport default LinearSpline;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Uses the Tridiagonal Matrix Algorithm, also known as the Thomas Algorithm, to solve\n * a system of linear equations where the coefficient matrix is a tridiagonal matrix.\n *\n * @namespace TridiagonalSystemSolver\n */\nvar TridiagonalSystemSolver = {};\n\n/**\n * Solves a tridiagonal system of linear equations.\n *\n * @param {Number[]} diagonal An array with length <code>n</code> that contains the diagonal of the coefficient matrix.\n * @param {Number[]} lower An array with length <code>n - 1</code> that contains the lower diagonal of the coefficient matrix.\n * @param {Number[]} upper An array with length <code>n - 1</code> that contains the upper diagonal of the coefficient matrix.\n * @param {Cartesian3[]} right An array of Cartesians with length <code>n</code> that is the right side of the system of equations.\n *\n * @exception {DeveloperError} diagonal and right must have the same lengths.\n * @exception {DeveloperError} lower and upper must have the same lengths.\n * @exception {DeveloperError} lower and upper must be one less than the length of diagonal.\n *\n * @performance Linear time.\n *\n * @example\n * var lowerDiagonal = [1.0, 1.0, 1.0, 1.0];\n * var diagonal = [2.0, 4.0, 4.0, 4.0, 2.0];\n * var upperDiagonal = [1.0, 1.0, 1.0, 1.0];\n * var rightHandSide = [\n * new Cesium.Cartesian3(410757.0, -1595711.0, 1375302.0),\n * new Cesium.Cartesian3(-5986705.0, -2190640.0, 1099600.0),\n * new Cesium.Cartesian3(-12593180.0, 288588.0, -1755549.0),\n * new Cesium.Cartesian3(-5349898.0, 2457005.0, -2685438.0),\n * new Cesium.Cartesian3(845820.0, 1573488.0, -1205591.0)\n * ];\n *\n * var solution = Cesium.TridiagonalSystemSolver.solve(lowerDiagonal, diagonal, upperDiagonal, rightHandSide);\n *\n * @returns {Cartesian3[]} An array of Cartesians with length <code>n</code> that is the solution to the tridiagonal system of equations.\n */\nTridiagonalSystemSolver.solve = function (lower, diagonal, upper, right) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(lower) || !(lower instanceof Array)) {\n throw new DeveloperError(\"The array lower is required.\");\n }\n if (!defined(diagonal) || !(diagonal instanceof Array)) {\n throw new DeveloperError(\"The array diagonal is required.\");\n }\n if (!defined(upper) || !(upper instanceof Array)) {\n throw new DeveloperError(\"The array upper is required.\");\n }\n if (!defined(right) || !(right instanceof Array)) {\n throw new DeveloperError(\"The array right is required.\");\n }\n if (diagonal.length !== right.length) {\n throw new DeveloperError(\"diagonal and right must have the same lengths.\");\n }\n if (lower.length !== upper.length) {\n throw new DeveloperError(\"lower and upper must have the same lengths.\");\n } else if (lower.length !== diagonal.length - 1) {\n throw new DeveloperError(\n \"lower and upper must be one less than the length of diagonal.\"\n );\n }\n //>>includeEnd('debug');\n\n var c = new Array(upper.length);\n var d = new Array(right.length);\n var x = new Array(right.length);\n\n var i;\n for (i = 0; i < d.length; i++) {\n d[i] = new Cartesian3();\n x[i] = new Cartesian3();\n }\n\n c[0] = upper[0] / diagonal[0];\n d[0] = Cartesian3.multiplyByScalar(right[0], 1.0 / diagonal[0], d[0]);\n\n var scalar;\n for (i = 1; i < c.length; ++i) {\n scalar = 1.0 / (diagonal[i] - c[i - 1] * lower[i - 1]);\n c[i] = upper[i] * scalar;\n d[i] = Cartesian3.subtract(\n right[i],\n Cartesian3.multiplyByScalar(d[i - 1], lower[i - 1], d[i]),\n d[i]\n );\n d[i] = Cartesian3.multiplyByScalar(d[i], scalar, d[i]);\n }\n\n scalar = 1.0 / (diagonal[i] - c[i - 1] * lower[i - 1]);\n d[i] = Cartesian3.subtract(\n right[i],\n Cartesian3.multiplyByScalar(d[i - 1], lower[i - 1], d[i]),\n d[i]\n );\n d[i] = Cartesian3.multiplyByScalar(d[i], scalar, d[i]);\n\n x[x.length - 1] = d[d.length - 1];\n for (i = x.length - 2; i >= 0; --i) {\n x[i] = Cartesian3.subtract(\n d[i],\n Cartesian3.multiplyByScalar(x[i + 1], c[i], x[i]),\n x[i]\n );\n }\n\n return x;\n};\nexport default TridiagonalSystemSolver;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport LinearSpline from \"./LinearSpline.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Spline from \"./Spline.js\";\nimport TridiagonalSystemSolver from \"./TridiagonalSystemSolver.js\";\n\nvar scratchLower = [];\nvar scratchDiagonal = [];\nvar scratchUpper = [];\nvar scratchRight = [];\n\nfunction generateClamped(points, firstTangent, lastTangent) {\n var l = scratchLower;\n var u = scratchUpper;\n var d = scratchDiagonal;\n var r = scratchRight;\n\n l.length = u.length = points.length - 1;\n d.length = r.length = points.length;\n\n var i;\n l[0] = d[0] = 1.0;\n u[0] = 0.0;\n\n var right = r[0];\n if (!defined(right)) {\n right = r[0] = new Cartesian3();\n }\n Cartesian3.clone(firstTangent, right);\n\n for (i = 1; i < l.length - 1; ++i) {\n l[i] = u[i] = 1.0;\n d[i] = 4.0;\n\n right = r[i];\n if (!defined(right)) {\n right = r[i] = new Cartesian3();\n }\n Cartesian3.subtract(points[i + 1], points[i - 1], right);\n Cartesian3.multiplyByScalar(right, 3.0, right);\n }\n\n l[i] = 0.0;\n u[i] = 1.0;\n d[i] = 4.0;\n\n right = r[i];\n if (!defined(right)) {\n right = r[i] = new Cartesian3();\n }\n Cartesian3.subtract(points[i + 1], points[i - 1], right);\n Cartesian3.multiplyByScalar(right, 3.0, right);\n\n d[i + 1] = 1.0;\n right = r[i + 1];\n if (!defined(right)) {\n right = r[i + 1] = new Cartesian3();\n }\n Cartesian3.clone(lastTangent, right);\n\n return TridiagonalSystemSolver.solve(l, d, u, r);\n}\n\nfunction generateNatural(points) {\n var l = scratchLower;\n var u = scratchUpper;\n var d = scratchDiagonal;\n var r = scratchRight;\n\n l.length = u.length = points.length - 1;\n d.length = r.length = points.length;\n\n var i;\n l[0] = u[0] = 1.0;\n d[0] = 2.0;\n\n var right = r[0];\n if (!defined(right)) {\n right = r[0] = new Cartesian3();\n }\n Cartesian3.subtract(points[1], points[0], right);\n Cartesian3.multiplyByScalar(right, 3.0, right);\n\n for (i = 1; i < l.length; ++i) {\n l[i] = u[i] = 1.0;\n d[i] = 4.0;\n\n right = r[i];\n if (!defined(right)) {\n right = r[i] = new Cartesian3();\n }\n Cartesian3.subtract(points[i + 1], points[i - 1], right);\n Cartesian3.multiplyByScalar(right, 3.0, right);\n }\n\n d[i] = 2.0;\n\n right = r[i];\n if (!defined(right)) {\n right = r[i] = new Cartesian3();\n }\n Cartesian3.subtract(points[i], points[i - 1], right);\n Cartesian3.multiplyByScalar(right, 3.0, right);\n\n return TridiagonalSystemSolver.solve(l, d, u, r);\n}\n\n/**\n * A Hermite spline is a cubic interpolating spline. Points, incoming tangents, outgoing tangents, and times\n * must be defined for each control point. The outgoing tangents are defined for points [0, n - 2] and the incoming\n * tangents are defined for points [1, n - 1]. For example, when interpolating a segment of the curve between <code>points[i]</code> and\n * <code>points[i + 1]</code>, the tangents at the points will be <code>outTangents[i]</code> and <code>inTangents[i]</code>,\n * respectively.\n *\n * @alias HermiteSpline\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n * The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Cartesian3[]} options.points The array of {@link Cartesian3} control points.\n * @param {Cartesian3[]} options.inTangents The array of {@link Cartesian3} incoming tangents at each control point.\n * @param {Cartesian3[]} options.outTangents The array of {@link Cartesian3} outgoing tangents at each control point.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n * @exception {DeveloperError} inTangents and outTangents must have a length equal to points.length - 1.\n *\n *\n * @example\n * // Create a G<sup>1</sup> continuous Hermite spline\n * var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * var spline = new Cesium.HermiteSpline({\n * times : times,\n * points : [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ],\n * outTangents : [\n * new Cesium.Cartesian3(1125196, -161816, 270551),\n * new Cesium.Cartesian3(-996690.5, -365906.5, 184028.5),\n * new Cesium.Cartesian3(-2096917, 48379.5, -292683.5),\n * new Cesium.Cartesian3(-890902.5, 408999.5, -447115)\n * ],\n * inTangents : [\n * new Cesium.Cartesian3(-1993381, -731813, 368057),\n * new Cesium.Cartesian3(-4193834, 96759, -585367),\n * new Cesium.Cartesian3(-1781805, 817999, -894230),\n * new Cesium.Cartesian3(1165345, 112641, 47281)\n * ]\n * });\n *\n * var p0 = spline.evaluate(times[0]);\n *\n * @see CatmullRomSpline\n * @see LinearSpline\n * @see QuaternionSpline\n * @see WeightSpline\n */\nfunction HermiteSpline(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var points = options.points;\n var times = options.times;\n var inTangents = options.inTangents;\n var outTangents = options.outTangents;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(points) ||\n !defined(times) ||\n !defined(inTangents) ||\n !defined(outTangents)\n ) {\n throw new DeveloperError(\n \"times, points, inTangents, and outTangents are required.\"\n );\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length) {\n throw new DeveloperError(\"times.length must be equal to points.length.\");\n }\n if (\n inTangents.length !== outTangents.length ||\n inTangents.length !== points.length - 1\n ) {\n throw new DeveloperError(\n \"inTangents and outTangents must have a length equal to points.length - 1.\"\n );\n }\n //>>includeEnd('debug');\n\n this._times = times;\n this._points = points;\n this._inTangents = inTangents;\n this._outTangents = outTangents;\n\n this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(HermiteSpline.prototype, {\n /**\n * An array of times for the control points.\n *\n * @memberof HermiteSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n times: {\n get: function () {\n return this._times;\n },\n },\n\n /**\n * An array of {@link Cartesian3} control points.\n *\n * @memberof HermiteSpline.prototype\n *\n * @type {Cartesian3[]}\n * @readonly\n */\n points: {\n get: function () {\n return this._points;\n },\n },\n\n /**\n * An array of {@link Cartesian3} incoming tangents at each control point.\n *\n * @memberof HermiteSpline.prototype\n *\n * @type {Cartesian3[]}\n * @readonly\n */\n inTangents: {\n get: function () {\n return this._inTangents;\n },\n },\n\n /**\n * An array of {@link Cartesian3} outgoing tangents at each control point.\n *\n * @memberof HermiteSpline.prototype\n *\n * @type {Cartesian3[]}\n * @readonly\n */\n outTangents: {\n get: function () {\n return this._outTangents;\n },\n },\n});\n\n/**\n * Creates a spline where the tangents at each control point are the same.\n * The curves are guaranteed to be at least in the class C<sup>1</sup>.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times The array of control point times.\n * @param {Cartesian3[]} options.points The array of control points.\n * @param {Cartesian3[]} options.tangents The array of tangents at the control points.\n * @returns {HermiteSpline} A hermite spline.\n *\n * @exception {DeveloperError} points, times and tangents are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times, points and tangents must have the same length.\n *\n * @example\n * var points = [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ];\n *\n * // Add tangents\n * var tangents = new Array(points.length);\n * tangents[0] = new Cesium.Cartesian3(1125196, -161816, 270551);\n * var temp = new Cesium.Cartesian3();\n * for (var i = 1; i < tangents.length - 1; ++i) {\n * tangents[i] = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.subtract(points[i + 1], points[i - 1], temp), 0.5, new Cesium.Cartesian3());\n * }\n * tangents[tangents.length - 1] = new Cesium.Cartesian3(1165345, 112641, 47281);\n *\n * var spline = Cesium.HermiteSpline.createC1({\n * times : times,\n * points : points,\n * tangents : tangents\n * });\n */\nHermiteSpline.createC1 = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var times = options.times;\n var points = options.points;\n var tangents = options.tangents;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(points) || !defined(times) || !defined(tangents)) {\n throw new DeveloperError(\"points, times and tangents are required.\");\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length || times.length !== tangents.length) {\n throw new DeveloperError(\n \"times, points and tangents must have the same length.\"\n );\n }\n //>>includeEnd('debug');\n\n var outTangents = tangents.slice(0, tangents.length - 1);\n var inTangents = tangents.slice(1, tangents.length);\n\n return new HermiteSpline({\n times: times,\n points: points,\n inTangents: inTangents,\n outTangents: outTangents,\n });\n};\n\n/**\n * Creates a natural cubic spline. The tangents at the control points are generated\n * to create a curve in the class C<sup>2</sup>.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times The array of control point times.\n * @param {Cartesian3[]} options.points The array of control points.\n * @returns {HermiteSpline|LinearSpline} A hermite spline or a linear spline if less than 3 control points were given.\n *\n * @exception {DeveloperError} points and times are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n * @example\n * // Create a natural cubic spline above the earth from Philadelphia to Los Angeles.\n * var spline = Cesium.HermiteSpline.createNaturalCubic({\n * times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n * points : [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ]\n * });\n */\nHermiteSpline.createNaturalCubic = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var times = options.times;\n var points = options.points;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(points) || !defined(times)) {\n throw new DeveloperError(\"points and times are required.\");\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length) {\n throw new DeveloperError(\"times.length must be equal to points.length.\");\n }\n //>>includeEnd('debug');\n\n if (points.length < 3) {\n return new LinearSpline({\n points: points,\n times: times,\n });\n }\n\n var tangents = generateNatural(points);\n var outTangents = tangents.slice(0, tangents.length - 1);\n var inTangents = tangents.slice(1, tangents.length);\n\n return new HermiteSpline({\n times: times,\n points: points,\n inTangents: inTangents,\n outTangents: outTangents,\n });\n};\n\n/**\n * Creates a clamped cubic spline. The tangents at the interior control points are generated\n * to create a curve in the class C<sup>2</sup>.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times The array of control point times.\n * @param {Cartesian3[]} options.points The array of control points.\n * @param {Cartesian3} options.firstTangent The outgoing tangent of the first control point.\n * @param {Cartesian3} options.lastTangent The incoming tangent of the last control point.\n * @returns {HermiteSpline|LinearSpline} A hermite spline or a linear spline if less than 3 control points were given.\n *\n * @exception {DeveloperError} points, times, firstTangent and lastTangent are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n * @example\n * // Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.\n * var spline = Cesium.HermiteSpline.createClampedCubic({\n * times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n * points : [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ],\n * firstTangent : new Cesium.Cartesian3(1125196, -161816, 270551),\n * lastTangent : new Cesium.Cartesian3(1165345, 112641, 47281)\n * });\n */\nHermiteSpline.createClampedCubic = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var times = options.times;\n var points = options.points;\n var firstTangent = options.firstTangent;\n var lastTangent = options.lastTangent;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(points) ||\n !defined(times) ||\n !defined(firstTangent) ||\n !defined(lastTangent)\n ) {\n throw new DeveloperError(\n \"points, times, firstTangent and lastTangent are required.\"\n );\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length) {\n throw new DeveloperError(\"times.length must be equal to points.length.\");\n }\n //>>includeEnd('debug');\n\n if (points.length < 3) {\n return new LinearSpline({\n points: points,\n times: times,\n });\n }\n\n var tangents = generateClamped(points, firstTangent, lastTangent);\n var outTangents = tangents.slice(0, tangents.length - 1);\n var inTangents = tangents.slice(1, tangents.length);\n\n return new HermiteSpline({\n times: times,\n points: points,\n inTangents: inTangents,\n outTangents: outTangents,\n });\n};\n\nHermiteSpline.hermiteCoefficientMatrix = new Matrix4(\n 2.0,\n -3.0,\n 0.0,\n 1.0,\n -2.0,\n 3.0,\n 0.0,\n 0.0,\n 1.0,\n -2.0,\n 1.0,\n 0.0,\n 1.0,\n -1.0,\n 0.0,\n 0.0\n);\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {Number} time The time.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nHermiteSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\nvar scratchTimeVec = new Cartesian4();\nvar scratchTemp = new Cartesian3();\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around to the updated animation.\n */\nHermiteSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nHermiteSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nHermiteSpline.prototype.evaluate = function (time, result) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n var points = this.points;\n var times = this.times;\n var inTangents = this.inTangents;\n var outTangents = this.outTangents;\n\n var i = (this._lastTimeIndex = this.findTimeInterval(\n time,\n this._lastTimeIndex\n ));\n var u = (time - times[i]) / (times[i + 1] - times[i]);\n\n var timeVec = scratchTimeVec;\n timeVec.z = u;\n timeVec.y = u * u;\n timeVec.x = timeVec.y * u;\n timeVec.w = 1.0;\n\n var coefs = Matrix4.multiplyByVector(\n HermiteSpline.hermiteCoefficientMatrix,\n timeVec,\n timeVec\n );\n\n result = Cartesian3.multiplyByScalar(points[i], coefs.x, result);\n Cartesian3.multiplyByScalar(points[i + 1], coefs.y, scratchTemp);\n Cartesian3.add(result, scratchTemp, result);\n Cartesian3.multiplyByScalar(outTangents[i], coefs.z, scratchTemp);\n Cartesian3.add(result, scratchTemp, result);\n Cartesian3.multiplyByScalar(inTangents[i], coefs.w, scratchTemp);\n return Cartesian3.add(result, scratchTemp, result);\n};\nexport default HermiteSpline;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport HermiteSpline from \"./HermiteSpline.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Spline from \"./Spline.js\";\n\nvar scratchTimeVec = new Cartesian4();\nvar scratchTemp0 = new Cartesian3();\nvar scratchTemp1 = new Cartesian3();\n\nfunction createEvaluateFunction(spline) {\n var points = spline.points;\n var times = spline.times;\n\n if (points.length < 3) {\n var t0 = times[0];\n var invSpan = 1.0 / (times[1] - t0);\n\n var p0 = points[0];\n var p1 = points[1];\n\n return function (time, result) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n var u = (time - t0) * invSpan;\n return Cartesian3.lerp(p0, p1, u, result);\n };\n }\n\n return function (time, result) {\n if (!defined(result)) {\n result = new Cartesian3();\n }\n var i = (spline._lastTimeIndex = spline.findTimeInterval(\n time,\n spline._lastTimeIndex\n ));\n var u = (time - times[i]) / (times[i + 1] - times[i]);\n\n var timeVec = scratchTimeVec;\n timeVec.z = u;\n timeVec.y = u * u;\n timeVec.x = timeVec.y * u;\n timeVec.w = 1.0;\n\n var p0;\n var p1;\n var p2;\n var p3;\n var coefs;\n\n if (i === 0) {\n p0 = points[0];\n p1 = points[1];\n p2 = spline.firstTangent;\n\n p3 = Cartesian3.subtract(points[2], p0, scratchTemp0);\n Cartesian3.multiplyByScalar(p3, 0.5, p3);\n\n coefs = Matrix4.multiplyByVector(\n HermiteSpline.hermiteCoefficientMatrix,\n timeVec,\n timeVec\n );\n } else if (i === points.length - 2) {\n p0 = points[i];\n p1 = points[i + 1];\n p3 = spline.lastTangent;\n\n p2 = Cartesian3.subtract(p1, points[i - 1], scratchTemp0);\n Cartesian3.multiplyByScalar(p2, 0.5, p2);\n\n coefs = Matrix4.multiplyByVector(\n HermiteSpline.hermiteCoefficientMatrix,\n timeVec,\n timeVec\n );\n } else {\n p0 = points[i - 1];\n p1 = points[i];\n p2 = points[i + 1];\n p3 = points[i + 2];\n coefs = Matrix4.multiplyByVector(\n CatmullRomSpline.catmullRomCoefficientMatrix,\n timeVec,\n timeVec\n );\n }\n result = Cartesian3.multiplyByScalar(p0, coefs.x, result);\n Cartesian3.multiplyByScalar(p1, coefs.y, scratchTemp1);\n Cartesian3.add(result, scratchTemp1, result);\n Cartesian3.multiplyByScalar(p2, coefs.z, scratchTemp1);\n Cartesian3.add(result, scratchTemp1, result);\n Cartesian3.multiplyByScalar(p3, coefs.w, scratchTemp1);\n return Cartesian3.add(result, scratchTemp1, result);\n };\n}\n\nvar firstTangentScratch = new Cartesian3();\nvar lastTangentScratch = new Cartesian3();\n\n/**\n * A Catmull-Rom spline is a cubic spline where the tangent at control points,\n * except the first and last, are computed using the previous and next control points.\n * Catmull-Rom splines are in the class C<sup>1</sup>.\n *\n * @alias CatmullRomSpline\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n * The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Cartesian3[]} options.points The array of {@link Cartesian3} control points.\n * @param {Cartesian3} [options.firstTangent] The tangent of the curve at the first control point.\n * If the tangent is not given, it will be estimated.\n * @param {Cartesian3} [options.lastTangent] The tangent of the curve at the last control point.\n * If the tangent is not given, it will be estimated.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n *\n * @example\n * // spline above the earth from Philadelphia to Los Angeles\n * var spline = new Cesium.CatmullRomSpline({\n * times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n * points : [\n * new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n * new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n * new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n * new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n * new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ]\n * });\n *\n * var p0 = spline.evaluate(times[i]); // equal to positions[i]\n * var p1 = spline.evaluate(times[i] + delta); // interpolated value when delta < times[i + 1] - times[i]\n *\n * @see HermiteSpline\n * @see LinearSpline\n * @see QuaternionSpline\n * @see WeightSpline\n */\nfunction CatmullRomSpline(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var points = options.points;\n var times = options.times;\n var firstTangent = options.firstTangent;\n var lastTangent = options.lastTangent;\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"points\", points);\n Check.defined(\"times\", times);\n Check.typeOf.number.greaterThanOrEquals(\"points.length\", points.length, 2);\n Check.typeOf.number.equals(\n \"times.length\",\n \"points.length\",\n times.length,\n points.length\n );\n //>>includeEnd('debug');\n\n if (points.length > 2) {\n if (!defined(firstTangent)) {\n firstTangent = firstTangentScratch;\n Cartesian3.multiplyByScalar(points[1], 2.0, firstTangent);\n Cartesian3.subtract(firstTangent, points[2], firstTangent);\n Cartesian3.subtract(firstTangent, points[0], firstTangent);\n Cartesian3.multiplyByScalar(firstTangent, 0.5, firstTangent);\n }\n\n if (!defined(lastTangent)) {\n var n = points.length - 1;\n lastTangent = lastTangentScratch;\n Cartesian3.multiplyByScalar(points[n - 1], 2.0, lastTangent);\n Cartesian3.subtract(points[n], lastTangent, lastTangent);\n Cartesian3.add(lastTangent, points[n - 2], lastTangent);\n Cartesian3.multiplyByScalar(lastTangent, 0.5, lastTangent);\n }\n }\n\n this._times = times;\n this._points = points;\n this._firstTangent = Cartesian3.clone(firstTangent);\n this._lastTangent = Cartesian3.clone(lastTangent);\n\n this._evaluateFunction = createEvaluateFunction(this);\n this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(CatmullRomSpline.prototype, {\n /**\n * An array of times for the control points.\n *\n * @memberof CatmullRomSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n times: {\n get: function () {\n return this._times;\n },\n },\n\n /**\n * An array of {@link Cartesian3} control points.\n *\n * @memberof CatmullRomSpline.prototype\n *\n * @type {Cartesian3[]}\n * @readonly\n */\n points: {\n get: function () {\n return this._points;\n },\n },\n\n /**\n * The tangent at the first control point.\n *\n * @memberof CatmullRomSpline.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n firstTangent: {\n get: function () {\n return this._firstTangent;\n },\n },\n\n /**\n * The tangent at the last control point.\n *\n * @memberof CatmullRomSpline.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n lastTangent: {\n get: function () {\n return this._lastTangent;\n },\n },\n});\n\n/**\n * @private\n */\nCatmullRomSpline.catmullRomCoefficientMatrix = new Matrix4(\n -0.5,\n 1.0,\n -0.5,\n 0.0,\n 1.5,\n -2.5,\n 0.0,\n 1.0,\n -1.5,\n 2.0,\n 0.5,\n 0.0,\n 0.5,\n -0.5,\n 0.0,\n 0.0\n);\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {Number} time The time.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nCatmullRomSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around to the updated animation.\n */\nCatmullRomSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nCatmullRomSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nCatmullRomSpline.prototype.evaluate = function (time, result) {\n return this._evaluateFunction(time, result);\n};\nexport default CatmullRomSpline;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * @private\n */\nfunction getStringFromTypedArray(uint8Array, byteOffset, byteLength) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(uint8Array)) {\n throw new DeveloperError(\"uint8Array is required.\");\n }\n if (byteOffset < 0) {\n throw new DeveloperError(\"byteOffset cannot be negative.\");\n }\n if (byteLength < 0) {\n throw new DeveloperError(\"byteLength cannot be negative.\");\n }\n if (byteOffset + byteLength > uint8Array.byteLength) {\n throw new DeveloperError(\"sub-region exceeds array bounds.\");\n }\n //>>includeEnd('debug');\n\n byteOffset = defaultValue(byteOffset, 0);\n byteLength = defaultValue(byteLength, uint8Array.byteLength - byteOffset);\n\n uint8Array = uint8Array.subarray(byteOffset, byteOffset + byteLength);\n\n return getStringFromTypedArray.decode(uint8Array);\n}\n\n// Exposed functions for testing\ngetStringFromTypedArray.decodeWithTextDecoder = function (view) {\n var decoder = new TextDecoder(\"utf-8\");\n return decoder.decode(view);\n};\n\ngetStringFromTypedArray.decodeWithFromCharCode = function (view) {\n var result = \"\";\n var codePoints = utf8Handler(view);\n var length = codePoints.length;\n for (var i = 0; i < length; ++i) {\n var cp = codePoints[i];\n if (cp <= 0xffff) {\n result += String.fromCharCode(cp);\n } else {\n cp -= 0x10000;\n result += String.fromCharCode((cp >> 10) + 0xd800, (cp & 0x3ff) + 0xdc00);\n }\n }\n return result;\n};\n\nfunction inRange(a, min, max) {\n return min <= a && a <= max;\n}\n\n// This code is inspired by public domain code found here: https://github.com/inexorabletash/text-encoding\nfunction utf8Handler(utfBytes) {\n var codePoint = 0;\n var bytesSeen = 0;\n var bytesNeeded = 0;\n var lowerBoundary = 0x80;\n var upperBoundary = 0xbf;\n\n var codePoints = [];\n var length = utfBytes.length;\n for (var i = 0; i < length; ++i) {\n var currentByte = utfBytes[i];\n\n // If bytesNeeded = 0, then we are starting a new character\n if (bytesNeeded === 0) {\n // 1 Byte Ascii character\n if (inRange(currentByte, 0x00, 0x7f)) {\n // Return a code point whose value is byte.\n codePoints.push(currentByte);\n continue;\n }\n\n // 2 Byte character\n if (inRange(currentByte, 0xc2, 0xdf)) {\n bytesNeeded = 1;\n codePoint = currentByte & 0x1f;\n continue;\n }\n\n // 3 Byte character\n if (inRange(currentByte, 0xe0, 0xef)) {\n // If byte is 0xE0, set utf-8 lower boundary to 0xA0.\n if (currentByte === 0xe0) {\n lowerBoundary = 0xa0;\n }\n // If byte is 0xED, set utf-8 upper boundary to 0x9F.\n if (currentByte === 0xed) {\n upperBoundary = 0x9f;\n }\n\n bytesNeeded = 2;\n codePoint = currentByte & 0xf;\n continue;\n }\n\n // 4 Byte character\n if (inRange(currentByte, 0xf0, 0xf4)) {\n // If byte is 0xF0, set utf-8 lower boundary to 0x90.\n if (currentByte === 0xf0) {\n lowerBoundary = 0x90;\n }\n // If byte is 0xF4, set utf-8 upper boundary to 0x8F.\n if (currentByte === 0xf4) {\n upperBoundary = 0x8f;\n }\n\n bytesNeeded = 3;\n codePoint = currentByte & 0x7;\n continue;\n }\n\n throw new RuntimeError(\"String decoding failed.\");\n }\n\n // Out of range, so ignore the first part(s) of the character and continue with this byte on its own\n if (!inRange(currentByte, lowerBoundary, upperBoundary)) {\n codePoint = bytesNeeded = bytesSeen = 0;\n lowerBoundary = 0x80;\n upperBoundary = 0xbf;\n --i;\n continue;\n }\n\n // Set appropriate boundaries, since we've now checked byte 2 of a potential longer character\n lowerBoundary = 0x80;\n upperBoundary = 0xbf;\n\n // Add byte to code point\n codePoint = (codePoint << 6) | (currentByte & 0x3f);\n\n // We have the correct number of bytes, so push and reset for next character\n ++bytesSeen;\n if (bytesSeen === bytesNeeded) {\n codePoints.push(codePoint);\n codePoint = bytesNeeded = bytesSeen = 0;\n }\n }\n\n return codePoints;\n}\n\nif (typeof TextDecoder !== \"undefined\") {\n getStringFromTypedArray.decode =\n getStringFromTypedArray.decodeWithTextDecoder;\n} else {\n getStringFromTypedArray.decode =\n getStringFromTypedArray.decodeWithFromCharCode;\n}\nexport default getStringFromTypedArray;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Contains functions for operating on 2D triangles.\n *\n * @namespace Intersections2D\n */\nvar Intersections2D = {};\n\n/**\n * Splits a 2D triangle at given axis-aligned threshold value and returns the resulting\n * polygon on a given side of the threshold. The resulting polygon may have 0, 1, 2,\n * 3, or 4 vertices.\n *\n * @param {Number} threshold The threshold coordinate value at which to clip the triangle.\n * @param {Boolean} keepAbove true to keep the portion of the triangle above the threshold, or false\n * to keep the portion below.\n * @param {Number} u0 The coordinate of the first vertex in the triangle, in counter-clockwise order.\n * @param {Number} u1 The coordinate of the second vertex in the triangle, in counter-clockwise order.\n * @param {Number} u2 The coordinate of the third vertex in the triangle, in counter-clockwise order.\n * @param {Number[]} [result] The array into which to copy the result. If this parameter is not supplied,\n * a new array is constructed and returned.\n * @returns {Number[]} The polygon that results after the clip, specified as a list of\n * vertices. The vertices are specified in counter-clockwise order.\n * Each vertex is either an index from the existing list (identified as\n * a 0, 1, or 2) or -1 indicating a new vertex not in the original triangle.\n * For new vertices, the -1 is followed by three additional numbers: the\n * index of each of the two original vertices forming the line segment that\n * the new vertex lies on, and the fraction of the distance from the first\n * vertex to the second one.\n *\n * @example\n * var result = Cesium.Intersections2D.clipTriangleAtAxisAlignedThreshold(0.5, false, 0.2, 0.6, 0.4);\n * // result === [2, 0, -1, 1, 0, 0.25, -1, 1, 2, 0.5]\n */\nIntersections2D.clipTriangleAtAxisAlignedThreshold = function (\n threshold,\n keepAbove,\n u0,\n u1,\n u2,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(threshold)) {\n throw new DeveloperError(\"threshold is required.\");\n }\n if (!defined(keepAbove)) {\n throw new DeveloperError(\"keepAbove is required.\");\n }\n if (!defined(u0)) {\n throw new DeveloperError(\"u0 is required.\");\n }\n if (!defined(u1)) {\n throw new DeveloperError(\"u1 is required.\");\n }\n if (!defined(u2)) {\n throw new DeveloperError(\"u2 is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = [];\n } else {\n result.length = 0;\n }\n\n var u0Behind;\n var u1Behind;\n var u2Behind;\n if (keepAbove) {\n u0Behind = u0 < threshold;\n u1Behind = u1 < threshold;\n u2Behind = u2 < threshold;\n } else {\n u0Behind = u0 > threshold;\n u1Behind = u1 > threshold;\n u2Behind = u2 > threshold;\n }\n\n var numBehind = u0Behind + u1Behind + u2Behind;\n\n var u01Ratio;\n var u02Ratio;\n var u12Ratio;\n var u10Ratio;\n var u20Ratio;\n var u21Ratio;\n\n if (numBehind === 1) {\n if (u0Behind) {\n u01Ratio = (threshold - u0) / (u1 - u0);\n u02Ratio = (threshold - u0) / (u2 - u0);\n\n result.push(1);\n\n result.push(2);\n\n if (u02Ratio !== 1.0) {\n result.push(-1);\n result.push(0);\n result.push(2);\n result.push(u02Ratio);\n }\n\n if (u01Ratio !== 1.0) {\n result.push(-1);\n result.push(0);\n result.push(1);\n result.push(u01Ratio);\n }\n } else if (u1Behind) {\n u12Ratio = (threshold - u1) / (u2 - u1);\n u10Ratio = (threshold - u1) / (u0 - u1);\n\n result.push(2);\n\n result.push(0);\n\n if (u10Ratio !== 1.0) {\n result.push(-1);\n result.push(1);\n result.push(0);\n result.push(u10Ratio);\n }\n\n if (u12Ratio !== 1.0) {\n result.push(-1);\n result.push(1);\n result.push(2);\n result.push(u12Ratio);\n }\n } else if (u2Behind) {\n u20Ratio = (threshold - u2) / (u0 - u2);\n u21Ratio = (threshold - u2) / (u1 - u2);\n\n result.push(0);\n\n result.push(1);\n\n if (u21Ratio !== 1.0) {\n result.push(-1);\n result.push(2);\n result.push(1);\n result.push(u21Ratio);\n }\n\n if (u20Ratio !== 1.0) {\n result.push(-1);\n result.push(2);\n result.push(0);\n result.push(u20Ratio);\n }\n }\n } else if (numBehind === 2) {\n if (!u0Behind && u0 !== threshold) {\n u10Ratio = (threshold - u1) / (u0 - u1);\n u20Ratio = (threshold - u2) / (u0 - u2);\n\n result.push(0);\n\n result.push(-1);\n result.push(1);\n result.push(0);\n result.push(u10Ratio);\n\n result.push(-1);\n result.push(2);\n result.push(0);\n result.push(u20Ratio);\n } else if (!u1Behind && u1 !== threshold) {\n u21Ratio = (threshold - u2) / (u1 - u2);\n u01Ratio = (threshold - u0) / (u1 - u0);\n\n result.push(1);\n\n result.push(-1);\n result.push(2);\n result.push(1);\n result.push(u21Ratio);\n\n result.push(-1);\n result.push(0);\n result.push(1);\n result.push(u01Ratio);\n } else if (!u2Behind && u2 !== threshold) {\n u02Ratio = (threshold - u0) / (u2 - u0);\n u12Ratio = (threshold - u1) / (u2 - u1);\n\n result.push(2);\n\n result.push(-1);\n result.push(0);\n result.push(2);\n result.push(u02Ratio);\n\n result.push(-1);\n result.push(1);\n result.push(2);\n result.push(u12Ratio);\n }\n } else if (numBehind !== 3) {\n // Completely in front of threshold\n result.push(0);\n result.push(1);\n result.push(2);\n }\n // else Completely behind threshold\n\n return result;\n};\n\n/**\n * Compute the barycentric coordinates of a 2D position within a 2D triangle.\n *\n * @param {Number} x The x coordinate of the position for which to find the barycentric coordinates.\n * @param {Number} y The y coordinate of the position for which to find the barycentric coordinates.\n * @param {Number} x1 The x coordinate of the triangle's first vertex.\n * @param {Number} y1 The y coordinate of the triangle's first vertex.\n * @param {Number} x2 The x coordinate of the triangle's second vertex.\n * @param {Number} y2 The y coordinate of the triangle's second vertex.\n * @param {Number} x3 The x coordinate of the triangle's third vertex.\n * @param {Number} y3 The y coordinate of the triangle's third vertex.\n * @param {Cartesian3} [result] The instance into to which to copy the result. If this parameter\n * is undefined, a new instance is created and returned.\n * @returns {Cartesian3} The barycentric coordinates of the position within the triangle.\n *\n * @example\n * var result = Cesium.Intersections2D.computeBarycentricCoordinates(0.0, 0.0, 0.0, 1.0, -1, -0.5, 1, -0.5);\n * // result === new Cesium.Cartesian3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0);\n */\nIntersections2D.computeBarycentricCoordinates = function (\n x,\n y,\n x1,\n y1,\n x2,\n y2,\n x3,\n y3,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(x)) {\n throw new DeveloperError(\"x is required.\");\n }\n if (!defined(y)) {\n throw new DeveloperError(\"y is required.\");\n }\n if (!defined(x1)) {\n throw new DeveloperError(\"x1 is required.\");\n }\n if (!defined(y1)) {\n throw new DeveloperError(\"y1 is required.\");\n }\n if (!defined(x2)) {\n throw new DeveloperError(\"x2 is required.\");\n }\n if (!defined(y2)) {\n throw new DeveloperError(\"y2 is required.\");\n }\n if (!defined(x3)) {\n throw new DeveloperError(\"x3 is required.\");\n }\n if (!defined(y3)) {\n throw new DeveloperError(\"y3 is required.\");\n }\n //>>includeEnd('debug');\n\n var x1mx3 = x1 - x3;\n var x3mx2 = x3 - x2;\n var y2my3 = y2 - y3;\n var y1my3 = y1 - y3;\n var inverseDeterminant = 1.0 / (y2my3 * x1mx3 + x3mx2 * y1my3);\n var ymy3 = y - y3;\n var xmx3 = x - x3;\n var l1 = (y2my3 * xmx3 + x3mx2 * ymy3) * inverseDeterminant;\n var l2 = (-y1my3 * xmx3 + x1mx3 * ymy3) * inverseDeterminant;\n var l3 = 1.0 - l1 - l2;\n\n if (defined(result)) {\n result.x = l1;\n result.y = l2;\n result.z = l3;\n return result;\n }\n return new Cartesian3(l1, l2, l3);\n};\n\n/**\n * Compute the intersection between 2 line segments\n *\n * @param {Number} x00 The x coordinate of the first line's first vertex.\n * @param {Number} y00 The y coordinate of the first line's first vertex.\n * @param {Number} x01 The x coordinate of the first line's second vertex.\n * @param {Number} y01 The y coordinate of the first line's second vertex.\n * @param {Number} x10 The x coordinate of the second line's first vertex.\n * @param {Number} y10 The y coordinate of the second line's first vertex.\n * @param {Number} x11 The x coordinate of the second line's second vertex.\n * @param {Number} y11 The y coordinate of the second line's second vertex.\n * @param {Cartesian2} [result] The instance into to which to copy the result. If this parameter\n * is undefined, a new instance is created and returned.\n * @returns {Cartesian2} The intersection point, undefined if there is no intersection point or lines are coincident.\n *\n * @example\n * var result = Cesium.Intersections2D.computeLineSegmentLineSegmentIntersection(0.0, 0.0, 0.0, 2.0, -1, 1, 1, 1);\n * // result === new Cesium.Cartesian2(0.0, 1.0);\n */\nIntersections2D.computeLineSegmentLineSegmentIntersection = function (\n x00,\n y00,\n x01,\n y01,\n x10,\n y10,\n x11,\n y11,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"x00\", x00);\n Check.typeOf.number(\"y00\", y00);\n Check.typeOf.number(\"x01\", x01);\n Check.typeOf.number(\"y01\", y01);\n Check.typeOf.number(\"x10\", x10);\n Check.typeOf.number(\"y10\", y10);\n Check.typeOf.number(\"x11\", x11);\n Check.typeOf.number(\"y11\", y11);\n //>>includeEnd('debug');\n\n var numerator1A = (x11 - x10) * (y00 - y10) - (y11 - y10) * (x00 - x10);\n var numerator1B = (x01 - x00) * (y00 - y10) - (y01 - y00) * (x00 - x10);\n var denominator1 = (y11 - y10) * (x01 - x00) - (x11 - x10) * (y01 - y00);\n\n // If denominator = 0, then lines are parallel. If denominator = 0 and both numerators are 0, then coincident\n if (denominator1 === 0) {\n return;\n }\n\n var ua1 = numerator1A / denominator1;\n var ub1 = numerator1B / denominator1;\n\n if (ua1 >= 0 && ua1 <= 1 && ub1 >= 0 && ub1 <= 1) {\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n result.x = x00 + ua1 * (x01 - x00);\n result.y = y00 + ua1 * (y01 - y00);\n\n return result;\n }\n};\nexport default Intersections2D;\n","import when from \"../ThirdParty/when.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersections2D from \"./Intersections2D.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\n\n/**\n * Terrain data for a single tile where the terrain data is represented as a quantized mesh. A quantized\n * mesh consists of three vertex attributes, longitude, latitude, and height. All attributes are expressed\n * as 16-bit values in the range 0 to 32767. Longitude and latitude are zero at the southwest corner\n * of the tile and 32767 at the northeast corner. Height is zero at the minimum height in the tile\n * and 32767 at the maximum height in the tile.\n *\n * @alias QuantizedMeshTerrainData\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Uint16Array} options.quantizedVertices The buffer containing the quantized mesh.\n * @param {Uint16Array|Uint32Array} options.indices The indices specifying how the quantized vertices are linked\n * together into triangles. Each three indices specifies one triangle.\n * @param {Number} options.minimumHeight The minimum terrain height within the tile, in meters above the ellipsoid.\n * @param {Number} options.maximumHeight The maximum terrain height within the tile, in meters above the ellipsoid.\n * @param {BoundingSphere} options.boundingSphere A sphere bounding all of the vertices in the mesh.\n * @param {OrientedBoundingBox} [options.orientedBoundingBox] An OrientedBoundingBox bounding all of the vertices in the mesh.\n * @param {Cartesian3} options.horizonOcclusionPoint The horizon occlusion point of the mesh. If this point\n * is below the horizon, the entire tile is assumed to be below the horizon as well.\n * The point is expressed in ellipsoid-scaled coordinates.\n * @param {Number[]} options.westIndices The indices of the vertices on the western edge of the tile.\n * @param {Number[]} options.southIndices The indices of the vertices on the southern edge of the tile.\n * @param {Number[]} options.eastIndices The indices of the vertices on the eastern edge of the tile.\n * @param {Number[]} options.northIndices The indices of the vertices on the northern edge of the tile.\n * @param {Number} options.westSkirtHeight The height of the skirt to add on the western edge of the tile.\n * @param {Number} options.southSkirtHeight The height of the skirt to add on the southern edge of the tile.\n * @param {Number} options.eastSkirtHeight The height of the skirt to add on the eastern edge of the tile.\n * @param {Number} options.northSkirtHeight The height of the skirt to add on the northern edge of the tile.\n * @param {Number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n * If a child's bit is set, geometry will be requested for that tile as well when it\n * is needed. If the bit is cleared, the child tile is not requested and geometry is\n * instead upsampled from the parent. The bit values are as follows:\n * <table>\n * <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n * <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n * <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n * <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n * <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n * </table>\n * @param {Boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n * otherwise, false.\n * @param {Uint8Array} [options.encodedNormals] The buffer containing per vertex normals, encoded using 'oct' encoding\n * @param {Uint8Array} [options.waterMask] The buffer containing the watermask.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n *\n *\n * @example\n * var data = new Cesium.QuantizedMeshTerrainData({\n * minimumHeight : -100,\n * maximumHeight : 2101,\n * quantizedVertices : new Uint16Array([// order is SW NW SE NE\n * // longitude\n * 0, 0, 32767, 32767,\n * // latitude\n * 0, 32767, 0, 32767,\n * // heights\n * 16384, 0, 32767, 16384]),\n * indices : new Uint16Array([0, 3, 1,\n * 0, 2, 3]),\n * boundingSphere : new Cesium.BoundingSphere(new Cesium.Cartesian3(1.0, 2.0, 3.0), 10000),\n * orientedBoundingBox : new Cesium.OrientedBoundingBox(new Cesium.Cartesian3(1.0, 2.0, 3.0), Cesium.Matrix3.fromRotationX(Cesium.Math.PI, new Cesium.Matrix3())),\n * horizonOcclusionPoint : new Cesium.Cartesian3(3.0, 2.0, 1.0),\n * westIndices : [0, 1],\n * southIndices : [0, 1],\n * eastIndices : [2, 3],\n * northIndices : [1, 3],\n * westSkirtHeight : 1.0,\n * southSkirtHeight : 1.0,\n * eastSkirtHeight : 1.0,\n * northSkirtHeight : 1.0\n * });\n *\n * @see TerrainData\n * @see HeightmapTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction QuantizedMeshTerrainData(options) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(options) || !defined(options.quantizedVertices)) {\n throw new DeveloperError(\"options.quantizedVertices is required.\");\n }\n if (!defined(options.indices)) {\n throw new DeveloperError(\"options.indices is required.\");\n }\n if (!defined(options.minimumHeight)) {\n throw new DeveloperError(\"options.minimumHeight is required.\");\n }\n if (!defined(options.maximumHeight)) {\n throw new DeveloperError(\"options.maximumHeight is required.\");\n }\n if (!defined(options.maximumHeight)) {\n throw new DeveloperError(\"options.maximumHeight is required.\");\n }\n if (!defined(options.boundingSphere)) {\n throw new DeveloperError(\"options.boundingSphere is required.\");\n }\n if (!defined(options.horizonOcclusionPoint)) {\n throw new DeveloperError(\"options.horizonOcclusionPoint is required.\");\n }\n if (!defined(options.westIndices)) {\n throw new DeveloperError(\"options.westIndices is required.\");\n }\n if (!defined(options.southIndices)) {\n throw new DeveloperError(\"options.southIndices is required.\");\n }\n if (!defined(options.eastIndices)) {\n throw new DeveloperError(\"options.eastIndices is required.\");\n }\n if (!defined(options.northIndices)) {\n throw new DeveloperError(\"options.northIndices is required.\");\n }\n if (!defined(options.westSkirtHeight)) {\n throw new DeveloperError(\"options.westSkirtHeight is required.\");\n }\n if (!defined(options.southSkirtHeight)) {\n throw new DeveloperError(\"options.southSkirtHeight is required.\");\n }\n if (!defined(options.eastSkirtHeight)) {\n throw new DeveloperError(\"options.eastSkirtHeight is required.\");\n }\n if (!defined(options.northSkirtHeight)) {\n throw new DeveloperError(\"options.northSkirtHeight is required.\");\n }\n //>>includeEnd('debug');\n\n this._quantizedVertices = options.quantizedVertices;\n this._encodedNormals = options.encodedNormals;\n this._indices = options.indices;\n this._minimumHeight = options.minimumHeight;\n this._maximumHeight = options.maximumHeight;\n this._boundingSphere = options.boundingSphere;\n this._orientedBoundingBox = options.orientedBoundingBox;\n this._horizonOcclusionPoint = options.horizonOcclusionPoint;\n this._credits = options.credits;\n\n var vertexCount = this._quantizedVertices.length / 3;\n var uValues = (this._uValues = this._quantizedVertices.subarray(\n 0,\n vertexCount\n ));\n var vValues = (this._vValues = this._quantizedVertices.subarray(\n vertexCount,\n 2 * vertexCount\n ));\n this._heightValues = this._quantizedVertices.subarray(\n 2 * vertexCount,\n 3 * vertexCount\n );\n\n // We don't assume that we can count on the edge vertices being sorted by u or v.\n function sortByV(a, b) {\n return vValues[a] - vValues[b];\n }\n\n function sortByU(a, b) {\n return uValues[a] - uValues[b];\n }\n\n this._westIndices = sortIndicesIfNecessary(\n options.westIndices,\n sortByV,\n vertexCount\n );\n this._southIndices = sortIndicesIfNecessary(\n options.southIndices,\n sortByU,\n vertexCount\n );\n this._eastIndices = sortIndicesIfNecessary(\n options.eastIndices,\n sortByV,\n vertexCount\n );\n this._northIndices = sortIndicesIfNecessary(\n options.northIndices,\n sortByU,\n vertexCount\n );\n\n this._westSkirtHeight = options.westSkirtHeight;\n this._southSkirtHeight = options.southSkirtHeight;\n this._eastSkirtHeight = options.eastSkirtHeight;\n this._northSkirtHeight = options.northSkirtHeight;\n\n this._childTileMask = defaultValue(options.childTileMask, 15);\n\n this._createdByUpsampling = defaultValue(options.createdByUpsampling, false);\n this._waterMask = options.waterMask;\n\n this._mesh = undefined;\n}\n\nObject.defineProperties(QuantizedMeshTerrainData.prototype, {\n /**\n * An array of credits for this tile.\n * @memberof QuantizedMeshTerrainData.prototype\n * @type {Credit[]}\n */\n credits: {\n get: function () {\n return this._credits;\n },\n },\n /**\n * The water mask included in this terrain data, if any. A water mask is a rectangular\n * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @memberof QuantizedMeshTerrainData.prototype\n * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement}\n */\n waterMask: {\n get: function () {\n return this._waterMask;\n },\n },\n\n childTileMask: {\n get: function () {\n return this._childTileMask;\n },\n },\n\n canUpsample: {\n get: function () {\n return defined(this._mesh);\n },\n },\n});\n\nvar arrayScratch = [];\n\nfunction sortIndicesIfNecessary(indices, sortFunction, vertexCount) {\n arrayScratch.length = indices.length;\n\n var needsSort = false;\n for (var i = 0, len = indices.length; i < len; ++i) {\n arrayScratch[i] = indices[i];\n needsSort =\n needsSort || (i > 0 && sortFunction(indices[i - 1], indices[i]) > 0);\n }\n\n if (needsSort) {\n arrayScratch.sort(sortFunction);\n return IndexDatatype.createTypedArray(vertexCount, arrayScratch);\n }\n return indices;\n}\n\nvar createMeshTaskProcessor = new TaskProcessor(\n \"createVerticesFromQuantizedTerrainMesh\"\n);\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme to which this tile belongs.\n * @param {Number} x The X coordinate of the tile for which to create the terrain data.\n * @param {Number} y The Y coordinate of the tile for which to create the terrain data.\n * @param {Number} level The level of the tile for which to create the terrain data.\n * @param {Number} [exaggeration=1.0] The scale used to exaggerate the terrain.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n * asynchronous mesh creations are already in progress and the operation should\n * be retried later.\n */\nQuantizedMeshTerrainData.prototype.createMesh = function (\n tilingScheme,\n x,\n y,\n level,\n exaggeration\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n if (!defined(x)) {\n throw new DeveloperError(\"x is required.\");\n }\n if (!defined(y)) {\n throw new DeveloperError(\"y is required.\");\n }\n if (!defined(level)) {\n throw new DeveloperError(\"level is required.\");\n }\n //>>includeEnd('debug');\n\n var ellipsoid = tilingScheme.ellipsoid;\n var rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n exaggeration = defaultValue(exaggeration, 1.0);\n\n var verticesPromise = createMeshTaskProcessor.scheduleTask({\n minimumHeight: this._minimumHeight,\n maximumHeight: this._maximumHeight,\n quantizedVertices: this._quantizedVertices,\n octEncodedNormals: this._encodedNormals,\n includeWebMercatorT: true,\n indices: this._indices,\n westIndices: this._westIndices,\n southIndices: this._southIndices,\n eastIndices: this._eastIndices,\n northIndices: this._northIndices,\n westSkirtHeight: this._westSkirtHeight,\n southSkirtHeight: this._southSkirtHeight,\n eastSkirtHeight: this._eastSkirtHeight,\n northSkirtHeight: this._northSkirtHeight,\n rectangle: rectangle,\n relativeToCenter: this._boundingSphere.center,\n ellipsoid: ellipsoid,\n exaggeration: exaggeration,\n });\n\n if (!defined(verticesPromise)) {\n // Postponed\n return undefined;\n }\n\n var that = this;\n return when(verticesPromise, function (result) {\n var vertexCountWithoutSkirts = that._quantizedVertices.length / 3;\n var vertexCount =\n vertexCountWithoutSkirts +\n that._westIndices.length +\n that._southIndices.length +\n that._eastIndices.length +\n that._northIndices.length;\n var indicesTypedArray = IndexDatatype.createTypedArray(\n vertexCount,\n result.indices\n );\n\n var vertices = new Float32Array(result.vertices);\n var rtc = result.center;\n var minimumHeight = result.minimumHeight;\n var maximumHeight = result.maximumHeight;\n var boundingSphere = defaultValue(\n BoundingSphere.clone(result.boundingSphere),\n that._boundingSphere\n );\n var obb = defaultValue(\n OrientedBoundingBox.clone(result.orientedBoundingBox),\n that._orientedBoundingBox\n );\n var occludeePointInScaledSpace = defaultValue(\n Cartesian3.clone(result.occludeePointInScaledSpace),\n that._horizonOcclusionPoint\n );\n var stride = result.vertexStride;\n var terrainEncoding = TerrainEncoding.clone(result.encoding);\n\n // Clone complex result objects because the transfer from the web worker\n // has stripped them down to JSON-style objects.\n that._mesh = new TerrainMesh(\n rtc,\n vertices,\n indicesTypedArray,\n result.indexCountWithoutSkirts,\n vertexCountWithoutSkirts,\n minimumHeight,\n maximumHeight,\n boundingSphere,\n occludeePointInScaledSpace,\n stride,\n obb,\n terrainEncoding,\n exaggeration,\n result.westIndicesSouthToNorth,\n result.southIndicesEastToWest,\n result.eastIndicesNorthToSouth,\n result.northIndicesWestToEast\n );\n\n // Free memory received from server after mesh is created.\n that._quantizedVertices = undefined;\n that._encodedNormals = undefined;\n that._indices = undefined;\n\n that._uValues = undefined;\n that._vValues = undefined;\n that._heightValues = undefined;\n\n that._westIndices = undefined;\n that._southIndices = undefined;\n that._eastIndices = undefined;\n that._northIndices = undefined;\n\n return that._mesh;\n });\n};\n\nvar upsampleTaskProcessor = new TaskProcessor(\"upsampleQuantizedTerrainMesh\");\n\n/**\n * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the\n * vertices in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {Number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {Number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {Number} thisLevel The level of this tile in the tiling scheme.\n * @param {Number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<QuantizedMeshTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n * or undefined if too many asynchronous upsample operations are in progress and the request has been\n * deferred.\n */\nQuantizedMeshTerrainData.prototype.upsample = function (\n tilingScheme,\n thisX,\n thisY,\n thisLevel,\n descendantX,\n descendantY,\n descendantLevel\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n if (!defined(thisX)) {\n throw new DeveloperError(\"thisX is required.\");\n }\n if (!defined(thisY)) {\n throw new DeveloperError(\"thisY is required.\");\n }\n if (!defined(thisLevel)) {\n throw new DeveloperError(\"thisLevel is required.\");\n }\n if (!defined(descendantX)) {\n throw new DeveloperError(\"descendantX is required.\");\n }\n if (!defined(descendantY)) {\n throw new DeveloperError(\"descendantY is required.\");\n }\n if (!defined(descendantLevel)) {\n throw new DeveloperError(\"descendantLevel is required.\");\n }\n var levelDifference = descendantLevel - thisLevel;\n if (levelDifference > 1) {\n throw new DeveloperError(\n \"Upsampling through more than one level at a time is not currently supported.\"\n );\n }\n //>>includeEnd('debug');\n\n var mesh = this._mesh;\n if (!defined(this._mesh)) {\n return undefined;\n }\n\n var isEastChild = thisX * 2 !== descendantX;\n var isNorthChild = thisY * 2 === descendantY;\n\n var ellipsoid = tilingScheme.ellipsoid;\n var childRectangle = tilingScheme.tileXYToRectangle(\n descendantX,\n descendantY,\n descendantLevel\n );\n\n var upsamplePromise = upsampleTaskProcessor.scheduleTask({\n vertices: mesh.vertices,\n vertexCountWithoutSkirts: mesh.vertexCountWithoutSkirts,\n indices: mesh.indices,\n indexCountWithoutSkirts: mesh.indexCountWithoutSkirts,\n encoding: mesh.encoding,\n minimumHeight: this._minimumHeight,\n maximumHeight: this._maximumHeight,\n isEastChild: isEastChild,\n isNorthChild: isNorthChild,\n childRectangle: childRectangle,\n ellipsoid: ellipsoid,\n exaggeration: mesh.exaggeration,\n });\n\n if (!defined(upsamplePromise)) {\n // Postponed\n return undefined;\n }\n\n var shortestSkirt = Math.min(this._westSkirtHeight, this._eastSkirtHeight);\n shortestSkirt = Math.min(shortestSkirt, this._southSkirtHeight);\n shortestSkirt = Math.min(shortestSkirt, this._northSkirtHeight);\n\n var westSkirtHeight = isEastChild\n ? shortestSkirt * 0.5\n : this._westSkirtHeight;\n var southSkirtHeight = isNorthChild\n ? shortestSkirt * 0.5\n : this._southSkirtHeight;\n var eastSkirtHeight = isEastChild\n ? this._eastSkirtHeight\n : shortestSkirt * 0.5;\n var northSkirtHeight = isNorthChild\n ? this._northSkirtHeight\n : shortestSkirt * 0.5;\n var credits = this._credits;\n\n return when(upsamplePromise).then(function (result) {\n var quantizedVertices = new Uint16Array(result.vertices);\n var indicesTypedArray = IndexDatatype.createTypedArray(\n quantizedVertices.length / 3,\n result.indices\n );\n var encodedNormals;\n if (defined(result.encodedNormals)) {\n encodedNormals = new Uint8Array(result.encodedNormals);\n }\n\n return new QuantizedMeshTerrainData({\n quantizedVertices: quantizedVertices,\n indices: indicesTypedArray,\n encodedNormals: encodedNormals,\n minimumHeight: result.minimumHeight,\n maximumHeight: result.maximumHeight,\n boundingSphere: BoundingSphere.clone(result.boundingSphere),\n orientedBoundingBox: OrientedBoundingBox.clone(\n result.orientedBoundingBox\n ),\n horizonOcclusionPoint: Cartesian3.clone(result.horizonOcclusionPoint),\n westIndices: result.westIndices,\n southIndices: result.southIndices,\n eastIndices: result.eastIndices,\n northIndices: result.northIndices,\n westSkirtHeight: westSkirtHeight,\n southSkirtHeight: southSkirtHeight,\n eastSkirtHeight: eastSkirtHeight,\n northSkirtHeight: northSkirtHeight,\n childTileMask: 0,\n credits: credits,\n createdByUpsampling: true,\n });\n });\n};\n\nvar maxShort = 32767;\nvar barycentricCoordinateScratch = new Cartesian3();\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {Number} longitude The longitude in radians.\n * @param {Number} latitude The latitude in radians.\n * @returns {Number} The terrain height at the specified position. The position is clamped to\n * the rectangle, so expect incorrect results for positions far outside the rectangle.\n */\nQuantizedMeshTerrainData.prototype.interpolateHeight = function (\n rectangle,\n longitude,\n latitude\n) {\n var u = CesiumMath.clamp(\n (longitude - rectangle.west) / rectangle.width,\n 0.0,\n 1.0\n );\n u *= maxShort;\n var v = CesiumMath.clamp(\n (latitude - rectangle.south) / rectangle.height,\n 0.0,\n 1.0\n );\n v *= maxShort;\n\n if (!defined(this._mesh)) {\n return interpolateHeight(this, u, v);\n }\n\n return interpolateMeshHeight(this, u, v);\n};\n\nfunction pointInBoundingBox(u, v, u0, v0, u1, v1, u2, v2) {\n var minU = Math.min(u0, u1, u2);\n var maxU = Math.max(u0, u1, u2);\n var minV = Math.min(v0, v1, v2);\n var maxV = Math.max(v0, v1, v2);\n return u >= minU && u <= maxU && v >= minV && v <= maxV;\n}\n\nvar texCoordScratch0 = new Cartesian2();\nvar texCoordScratch1 = new Cartesian2();\nvar texCoordScratch2 = new Cartesian2();\n\nfunction interpolateMeshHeight(terrainData, u, v) {\n var mesh = terrainData._mesh;\n var vertices = mesh.vertices;\n var encoding = mesh.encoding;\n var indices = mesh.indices;\n\n for (var i = 0, len = indices.length; i < len; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var uv0 = encoding.decodeTextureCoordinates(vertices, i0, texCoordScratch0);\n var uv1 = encoding.decodeTextureCoordinates(vertices, i1, texCoordScratch1);\n var uv2 = encoding.decodeTextureCoordinates(vertices, i2, texCoordScratch2);\n\n if (pointInBoundingBox(u, v, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y)) {\n var barycentric = Intersections2D.computeBarycentricCoordinates(\n u,\n v,\n uv0.x,\n uv0.y,\n uv1.x,\n uv1.y,\n uv2.x,\n uv2.y,\n barycentricCoordinateScratch\n );\n if (\n barycentric.x >= -1e-15 &&\n barycentric.y >= -1e-15 &&\n barycentric.z >= -1e-15\n ) {\n var h0 = encoding.decodeHeight(vertices, i0);\n var h1 = encoding.decodeHeight(vertices, i1);\n var h2 = encoding.decodeHeight(vertices, i2);\n return barycentric.x * h0 + barycentric.y * h1 + barycentric.z * h2;\n }\n }\n }\n\n // Position does not lie in any triangle in this mesh.\n return undefined;\n}\n\nfunction interpolateHeight(terrainData, u, v) {\n var uBuffer = terrainData._uValues;\n var vBuffer = terrainData._vValues;\n var heightBuffer = terrainData._heightValues;\n\n var indices = terrainData._indices;\n for (var i = 0, len = indices.length; i < len; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var u0 = uBuffer[i0];\n var u1 = uBuffer[i1];\n var u2 = uBuffer[i2];\n\n var v0 = vBuffer[i0];\n var v1 = vBuffer[i1];\n var v2 = vBuffer[i2];\n\n if (pointInBoundingBox(u, v, u0, v0, u1, v1, u2, v2)) {\n var barycentric = Intersections2D.computeBarycentricCoordinates(\n u,\n v,\n u0,\n v0,\n u1,\n v1,\n u2,\n v2,\n barycentricCoordinateScratch\n );\n if (\n barycentric.x >= -1e-15 &&\n barycentric.y >= -1e-15 &&\n barycentric.z >= -1e-15\n ) {\n var quantizedHeight =\n barycentric.x * heightBuffer[i0] +\n barycentric.y * heightBuffer[i1] +\n barycentric.z * heightBuffer[i2];\n return CesiumMath.lerp(\n terrainData._minimumHeight,\n terrainData._maximumHeight,\n quantizedHeight / maxShort\n );\n }\n }\n }\n\n // Position does not lie in any triangle in this mesh.\n return undefined;\n}\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {Number} thisX The tile X coordinate of this (the parent) tile.\n * @param {Number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {Number} childX The tile X coordinate of the child tile to check for availability.\n * @param {Number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {Boolean} True if the child tile is available; otherwise, false.\n */\nQuantizedMeshTerrainData.prototype.isChildAvailable = function (\n thisX,\n thisY,\n childX,\n childY\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(thisX)) {\n throw new DeveloperError(\"thisX is required.\");\n }\n if (!defined(thisY)) {\n throw new DeveloperError(\"thisY is required.\");\n }\n if (!defined(childX)) {\n throw new DeveloperError(\"childX is required.\");\n }\n if (!defined(childY)) {\n throw new DeveloperError(\"childY is required.\");\n }\n //>>includeEnd('debug');\n\n var bitNumber = 2; // northwest child\n if (childX !== thisX * 2) {\n ++bitNumber; // east child\n }\n if (childY !== thisY * 2) {\n bitNumber -= 2; // south child\n }\n\n return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {Boolean} True if this instance was created by upsampling; otherwise, false.\n */\nQuantizedMeshTerrainData.prototype.wasCreatedByUpsampling = function () {\n return this._createdByUpsampling;\n};\nexport default QuantizedMeshTerrainData;\n","import when from \"../ThirdParty/when.js\";\nimport AttributeCompression from \"./AttributeCompression.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport WebMercatorTilingScheme from \"./WebMercatorTilingScheme.js\";\nimport getStringFromTypedArray from \"./getStringFromTypedArray.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport QuantizedMeshTerrainData from \"./QuantizedMeshTerrainData.js\";\nimport Request from \"./Request.js\";\nimport RequestType from \"./RequestType.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileAvailability from \"./TileAvailability.js\";\nimport TileProviderError from \"./TileProviderError.js\";\n\nfunction LayerInformation(layer) {\n this.resource = layer.resource;\n this.version = layer.version;\n this.isHeightmap = layer.isHeightmap;\n this.tileUrlTemplates = layer.tileUrlTemplates;\n this.availability = layer.availability;\n this.hasVertexNormals = layer.hasVertexNormals;\n this.hasWaterMask = layer.hasWaterMask;\n this.hasMetadata = layer.hasMetadata;\n this.availabilityLevels = layer.availabilityLevels;\n this.availabilityTilesLoaded = layer.availabilityTilesLoaded;\n this.littleEndianExtensionSize = layer.littleEndianExtensionSize;\n this.availabilityTilesLoaded = layer.availabilityTilesLoaded;\n this.availabilityPromiseCache = {};\n}\n\n/**\n * A {@link TerrainProvider} that accesses terrain data in a Cesium terrain format.\n *\n * @alias CesiumTerrainProvider\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String|Promise<Resource>|Promise<String>} options.url The URL of the Cesium terrain server.\n * @param {Boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server, in the form of per vertex normals if available.\n * @param {Boolean} [options.requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server, if available.\n * @param {Boolean} [options.requestMetadata=true] Flag that indicates if the client should request per tile metadata from the server, if available.\n * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n *\n * @example\n * // Create Arctic DEM terrain with normals.\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * terrainProvider : new Cesium.CesiumTerrainProvider({\n * url : Cesium.IonResource.fromAssetId(3956),\n * requestVertexNormals : true\n * })\n * });\n *\n * @see createWorldTerrain\n * @see TerrainProvider\n */\nfunction CesiumTerrainProvider(options) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(options) || !defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n this._heightmapWidth = 65;\n this._heightmapStructure = undefined;\n this._hasWaterMask = false;\n this._hasVertexNormals = false;\n this._ellipsoid = options.ellipsoid;\n\n /**\n * Boolean flag that indicates if the client should request vertex normals from the server.\n * @type {Boolean}\n * @default false\n * @private\n */\n this._requestVertexNormals = defaultValue(\n options.requestVertexNormals,\n false\n );\n\n /**\n * Boolean flag that indicates if the client should request tile watermasks from the server.\n * @type {Boolean}\n * @default false\n * @private\n */\n this._requestWaterMask = defaultValue(options.requestWaterMask, false);\n\n /**\n * Boolean flag that indicates if the client should request tile metadata from the server.\n * @type {Boolean}\n * @default true\n * @private\n */\n this._requestMetadata = defaultValue(options.requestMetadata, true);\n\n this._errorEvent = new Event();\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n this._availability = undefined;\n\n var deferred = when.defer();\n this._ready = false;\n this._readyPromise = deferred;\n this._tileCredits = undefined;\n\n var that = this;\n var lastResource;\n var layerJsonResource;\n var metadataError;\n\n var layers = (this._layers = []);\n var attribution = \"\";\n var overallAvailability = [];\n var overallMaxZoom = 0;\n when(options.url)\n .then(function (url) {\n var resource = Resource.createIfNeeded(url);\n resource.appendForwardSlash();\n lastResource = resource;\n layerJsonResource = lastResource.getDerivedResource({\n url: \"layer.json\",\n });\n\n // ion resources have a credits property we can use for additional attribution.\n that._tileCredits = resource.credits;\n\n requestLayerJson();\n })\n .otherwise(function (e) {\n deferred.reject(e);\n });\n\n function parseMetadataSuccess(data) {\n var message;\n\n if (!data.format) {\n message = \"The tile format is not specified in the layer.json file.\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n return;\n }\n\n if (!data.tiles || data.tiles.length === 0) {\n message = \"The layer.json file does not specify any tile URL templates.\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n return;\n }\n\n var hasVertexNormals = false;\n var hasWaterMask = false;\n var hasMetadata = false;\n var littleEndianExtensionSize = true;\n var isHeightmap = false;\n if (data.format === \"heightmap-1.0\") {\n isHeightmap = true;\n if (!defined(that._heightmapStructure)) {\n that._heightmapStructure = {\n heightScale: 1.0 / 5.0,\n heightOffset: -1000.0,\n elementsPerHeight: 1,\n stride: 1,\n elementMultiplier: 256.0,\n isBigEndian: false,\n lowestEncodedHeight: 0,\n highestEncodedHeight: 256 * 256 - 1,\n };\n }\n hasWaterMask = true;\n that._requestWaterMask = true;\n } else if (data.format.indexOf(\"quantized-mesh-1.\") !== 0) {\n message =\n 'The tile format \"' + data.format + '\" is invalid or not supported.';\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n return;\n }\n\n var tileUrlTemplates = data.tiles;\n\n var maxZoom = data.maxzoom;\n overallMaxZoom = Math.max(overallMaxZoom, maxZoom);\n // Keeps track of which of the availablity containing tiles have been loaded\n\n if (!data.projection || data.projection === \"EPSG:4326\") {\n that._tilingScheme = new GeographicTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 1,\n ellipsoid: that._ellipsoid,\n });\n } else if (data.projection === \"EPSG:3857\") {\n that._tilingScheme = new WebMercatorTilingScheme({\n numberOfLevelZeroTilesX: 1,\n numberOfLevelZeroTilesY: 1,\n ellipsoid: that._ellipsoid,\n });\n } else {\n message =\n 'The projection \"' + data.projection + '\" is invalid or not supported.';\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n return;\n }\n\n that._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n that._tilingScheme.ellipsoid,\n that._heightmapWidth,\n that._tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n if (!data.scheme || data.scheme === \"tms\" || data.scheme === \"slippyMap\") {\n that._scheme = data.scheme;\n } else {\n message = 'The scheme \"' + data.scheme + '\" is invalid or not supported.';\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n return;\n }\n\n var availabilityTilesLoaded;\n\n // The vertex normals defined in the 'octvertexnormals' extension is identical to the original\n // contents of the original 'vertexnormals' extension. 'vertexnormals' extension is now\n // deprecated, as the extensionLength for this extension was incorrectly using big endian.\n // We maintain backwards compatibility with the legacy 'vertexnormal' implementation\n // by setting the _littleEndianExtensionSize to false. Always prefer 'octvertexnormals'\n // over 'vertexnormals' if both extensions are supported by the server.\n if (\n defined(data.extensions) &&\n data.extensions.indexOf(\"octvertexnormals\") !== -1\n ) {\n hasVertexNormals = true;\n } else if (\n defined(data.extensions) &&\n data.extensions.indexOf(\"vertexnormals\") !== -1\n ) {\n hasVertexNormals = true;\n littleEndianExtensionSize = false;\n }\n if (\n defined(data.extensions) &&\n data.extensions.indexOf(\"watermask\") !== -1\n ) {\n hasWaterMask = true;\n }\n if (\n defined(data.extensions) &&\n data.extensions.indexOf(\"metadata\") !== -1\n ) {\n hasMetadata = true;\n }\n\n var availabilityLevels = data.metadataAvailability;\n var availableTiles = data.available;\n var availability;\n if (defined(availableTiles) && !defined(availabilityLevels)) {\n availability = new TileAvailability(\n that._tilingScheme,\n availableTiles.length\n );\n for (var level = 0; level < availableTiles.length; ++level) {\n var rangesAtLevel = availableTiles[level];\n var yTiles = that._tilingScheme.getNumberOfYTilesAtLevel(level);\n if (!defined(overallAvailability[level])) {\n overallAvailability[level] = [];\n }\n\n for (\n var rangeIndex = 0;\n rangeIndex < rangesAtLevel.length;\n ++rangeIndex\n ) {\n var range = rangesAtLevel[rangeIndex];\n var yStart = yTiles - range.endY - 1;\n var yEnd = yTiles - range.startY - 1;\n overallAvailability[level].push([\n range.startX,\n yStart,\n range.endX,\n yEnd,\n ]);\n availability.addAvailableTileRange(\n level,\n range.startX,\n yStart,\n range.endX,\n yEnd\n );\n }\n }\n } else if (defined(availabilityLevels)) {\n availabilityTilesLoaded = new TileAvailability(\n that._tilingScheme,\n maxZoom\n );\n availability = new TileAvailability(that._tilingScheme, maxZoom);\n overallAvailability[0] = [[0, 0, 1, 0]];\n availability.addAvailableTileRange(0, 0, 0, 1, 0);\n }\n\n that._hasWaterMask = that._hasWaterMask || hasWaterMask;\n that._hasVertexNormals = that._hasVertexNormals || hasVertexNormals;\n that._hasMetadata = that._hasMetadata || hasMetadata;\n if (defined(data.attribution)) {\n if (attribution.length > 0) {\n attribution += \" \";\n }\n attribution += data.attribution;\n }\n\n layers.push(\n new LayerInformation({\n resource: lastResource,\n version: data.version,\n isHeightmap: isHeightmap,\n tileUrlTemplates: tileUrlTemplates,\n availability: availability,\n hasVertexNormals: hasVertexNormals,\n hasWaterMask: hasWaterMask,\n hasMetadata: hasMetadata,\n availabilityLevels: availabilityLevels,\n availabilityTilesLoaded: availabilityTilesLoaded,\n littleEndianExtensionSize: littleEndianExtensionSize,\n })\n );\n\n var parentUrl = data.parentUrl;\n if (defined(parentUrl)) {\n if (!defined(availability)) {\n console.log(\n \"A layer.json can't have a parentUrl if it does't have an available array.\"\n );\n return when.resolve();\n }\n lastResource = lastResource.getDerivedResource({\n url: parentUrl,\n });\n lastResource.appendForwardSlash(); // Terrain always expects a directory\n layerJsonResource = lastResource.getDerivedResource({\n url: \"layer.json\",\n });\n var parentMetadata = layerJsonResource.fetchJson();\n return when(parentMetadata, parseMetadataSuccess, parseMetadataFailure);\n }\n\n return when.resolve();\n }\n\n function parseMetadataFailure(data) {\n var message =\n \"An error occurred while accessing \" + layerJsonResource.url + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestLayerJson\n );\n }\n\n function metadataSuccess(data) {\n parseMetadataSuccess(data).then(function () {\n if (defined(metadataError)) {\n return;\n }\n\n var length = overallAvailability.length;\n if (length > 0) {\n var availability = (that._availability = new TileAvailability(\n that._tilingScheme,\n overallMaxZoom\n ));\n for (var level = 0; level < length; ++level) {\n var levelRanges = overallAvailability[level];\n for (var i = 0; i < levelRanges.length; ++i) {\n var range = levelRanges[i];\n availability.addAvailableTileRange(\n level,\n range[0],\n range[1],\n range[2],\n range[3]\n );\n }\n }\n }\n\n if (attribution.length > 0) {\n var layerJsonCredit = new Credit(attribution);\n\n if (defined(that._tileCredits)) {\n that._tileCredits.push(layerJsonCredit);\n } else {\n that._tileCredits = [layerJsonCredit];\n }\n }\n\n that._ready = true;\n that._readyPromise.resolve(true);\n });\n }\n\n function metadataFailure(data) {\n // If the metadata is not found, assume this is a pre-metadata heightmap tileset.\n if (defined(data) && data.statusCode === 404) {\n metadataSuccess({\n tilejson: \"2.1.0\",\n format: \"heightmap-1.0\",\n version: \"1.0.0\",\n scheme: \"tms\",\n tiles: [\"{z}/{x}/{y}.terrain?v={version}\"],\n });\n return;\n }\n parseMetadataFailure(data);\n }\n\n function requestLayerJson() {\n when(layerJsonResource.fetchJson())\n .then(metadataSuccess)\n .otherwise(metadataFailure);\n }\n}\n\n/**\n * When using the Quantized-Mesh format, a tile may be returned that includes additional extensions, such as PerVertexNormals, watermask, etc.\n * This enumeration defines the unique identifiers for each type of extension data that has been appended to the standard mesh data.\n *\n * @namespace QuantizedMeshExtensionIds\n * @see CesiumTerrainProvider\n * @private\n */\nvar QuantizedMeshExtensionIds = {\n /**\n * Oct-Encoded Per-Vertex Normals are included as an extension to the tile mesh\n *\n * @type {Number}\n * @constant\n * @default 1\n */\n OCT_VERTEX_NORMALS: 1,\n /**\n * A watermask is included as an extension to the tile mesh\n *\n * @type {Number}\n * @constant\n * @default 2\n */\n WATER_MASK: 2,\n /**\n * A json object contain metadata about the tile\n *\n * @type {Number}\n * @constant\n * @default 4\n */\n METADATA: 4,\n};\n\nfunction getRequestHeader(extensionsList) {\n if (!defined(extensionsList) || extensionsList.length === 0) {\n return {\n Accept:\n \"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01\",\n };\n }\n var extensions = extensionsList.join(\"-\");\n return {\n Accept:\n \"application/vnd.quantized-mesh;extensions=\" +\n extensions +\n \",application/octet-stream;q=0.9,*/*;q=0.01\",\n };\n}\n\nfunction createHeightmapTerrainData(provider, buffer, level, x, y) {\n var heightBuffer = new Uint16Array(\n buffer,\n 0,\n provider._heightmapWidth * provider._heightmapWidth\n );\n return new HeightmapTerrainData({\n buffer: heightBuffer,\n childTileMask: new Uint8Array(buffer, heightBuffer.byteLength, 1)[0],\n waterMask: new Uint8Array(\n buffer,\n heightBuffer.byteLength + 1,\n buffer.byteLength - heightBuffer.byteLength - 1\n ),\n width: provider._heightmapWidth,\n height: provider._heightmapWidth,\n structure: provider._heightmapStructure,\n credits: provider._tileCredits,\n });\n}\n\nfunction createQuantizedMeshTerrainData(provider, buffer, level, x, y, layer) {\n var littleEndianExtensionSize = layer.littleEndianExtensionSize;\n var pos = 0;\n var cartesian3Elements = 3;\n var boundingSphereElements = cartesian3Elements + 1;\n var cartesian3Length = Float64Array.BYTES_PER_ELEMENT * cartesian3Elements;\n var boundingSphereLength =\n Float64Array.BYTES_PER_ELEMENT * boundingSphereElements;\n var encodedVertexElements = 3;\n var encodedVertexLength =\n Uint16Array.BYTES_PER_ELEMENT * encodedVertexElements;\n var triangleElements = 3;\n var bytesPerIndex = Uint16Array.BYTES_PER_ELEMENT;\n var triangleLength = bytesPerIndex * triangleElements;\n\n var view = new DataView(buffer);\n var center = new Cartesian3(\n view.getFloat64(pos, true),\n view.getFloat64(pos + 8, true),\n view.getFloat64(pos + 16, true)\n );\n pos += cartesian3Length;\n\n var minimumHeight = view.getFloat32(pos, true);\n pos += Float32Array.BYTES_PER_ELEMENT;\n var maximumHeight = view.getFloat32(pos, true);\n pos += Float32Array.BYTES_PER_ELEMENT;\n\n var boundingSphere = new BoundingSphere(\n new Cartesian3(\n view.getFloat64(pos, true),\n view.getFloat64(pos + 8, true),\n view.getFloat64(pos + 16, true)\n ),\n view.getFloat64(pos + cartesian3Length, true)\n );\n pos += boundingSphereLength;\n\n var horizonOcclusionPoint = new Cartesian3(\n view.getFloat64(pos, true),\n view.getFloat64(pos + 8, true),\n view.getFloat64(pos + 16, true)\n );\n pos += cartesian3Length;\n\n var vertexCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var encodedVertexBuffer = new Uint16Array(buffer, pos, vertexCount * 3);\n pos += vertexCount * encodedVertexLength;\n\n if (vertexCount > 64 * 1024) {\n // More than 64k vertices, so indices are 32-bit.\n bytesPerIndex = Uint32Array.BYTES_PER_ELEMENT;\n triangleLength = bytesPerIndex * triangleElements;\n }\n\n // Decode the vertex buffer.\n var uBuffer = encodedVertexBuffer.subarray(0, vertexCount);\n var vBuffer = encodedVertexBuffer.subarray(vertexCount, 2 * vertexCount);\n var heightBuffer = encodedVertexBuffer.subarray(\n vertexCount * 2,\n 3 * vertexCount\n );\n\n AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\n\n // skip over any additional padding that was added for 2/4 byte alignment\n if (pos % bytesPerIndex !== 0) {\n pos += bytesPerIndex - (pos % bytesPerIndex);\n }\n\n var triangleCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var indices = IndexDatatype.createTypedArrayFromArrayBuffer(\n vertexCount,\n buffer,\n pos,\n triangleCount * triangleElements\n );\n pos += triangleCount * triangleLength;\n\n // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\n // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\n // Copyright 2012 Google Inc., Apache 2.0 license.\n var highest = 0;\n var length = indices.length;\n for (var i = 0; i < length; ++i) {\n var code = indices[i];\n indices[i] = highest - code;\n if (code === 0) {\n ++highest;\n }\n }\n\n var westVertexCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var westIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n vertexCount,\n buffer,\n pos,\n westVertexCount\n );\n pos += westVertexCount * bytesPerIndex;\n\n var southVertexCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var southIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n vertexCount,\n buffer,\n pos,\n southVertexCount\n );\n pos += southVertexCount * bytesPerIndex;\n\n var eastVertexCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var eastIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n vertexCount,\n buffer,\n pos,\n eastVertexCount\n );\n pos += eastVertexCount * bytesPerIndex;\n\n var northVertexCount = view.getUint32(pos, true);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n var northIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n vertexCount,\n buffer,\n pos,\n northVertexCount\n );\n pos += northVertexCount * bytesPerIndex;\n\n var encodedNormalBuffer;\n var waterMaskBuffer;\n while (pos < view.byteLength) {\n var extensionId = view.getUint8(pos, true);\n pos += Uint8Array.BYTES_PER_ELEMENT;\n var extensionLength = view.getUint32(pos, littleEndianExtensionSize);\n pos += Uint32Array.BYTES_PER_ELEMENT;\n\n if (\n extensionId === QuantizedMeshExtensionIds.OCT_VERTEX_NORMALS &&\n provider._requestVertexNormals\n ) {\n encodedNormalBuffer = new Uint8Array(buffer, pos, vertexCount * 2);\n } else if (\n extensionId === QuantizedMeshExtensionIds.WATER_MASK &&\n provider._requestWaterMask\n ) {\n waterMaskBuffer = new Uint8Array(buffer, pos, extensionLength);\n } else if (\n extensionId === QuantizedMeshExtensionIds.METADATA &&\n provider._requestMetadata\n ) {\n var stringLength = view.getUint32(pos, true);\n if (stringLength > 0) {\n var jsonString = getStringFromTypedArray(\n new Uint8Array(buffer),\n pos + Uint32Array.BYTES_PER_ELEMENT,\n stringLength\n );\n var metadata = JSON.parse(jsonString);\n var availableTiles = metadata.available;\n if (defined(availableTiles)) {\n for (var offset = 0; offset < availableTiles.length; ++offset) {\n var availableLevel = level + offset + 1;\n var rangesAtLevel = availableTiles[offset];\n var yTiles = provider._tilingScheme.getNumberOfYTilesAtLevel(\n availableLevel\n );\n\n for (\n var rangeIndex = 0;\n rangeIndex < rangesAtLevel.length;\n ++rangeIndex\n ) {\n var range = rangesAtLevel[rangeIndex];\n var yStart = yTiles - range.endY - 1;\n var yEnd = yTiles - range.startY - 1;\n provider.availability.addAvailableTileRange(\n availableLevel,\n range.startX,\n yStart,\n range.endX,\n yEnd\n );\n layer.availability.addAvailableTileRange(\n availableLevel,\n range.startX,\n yStart,\n range.endX,\n yEnd\n );\n }\n }\n }\n }\n layer.availabilityTilesLoaded.addAvailableTileRange(level, x, y, x, y);\n }\n pos += extensionLength;\n }\n\n var skirtHeight = provider.getLevelMaximumGeometricError(level) * 5.0;\n\n // The skirt is not included in the OBB computation. If this ever\n // causes any rendering artifacts (cracks), they are expected to be\n // minor and in the corners of the screen. It's possible that this\n // might need to be changed - just change to `minimumHeight - skirtHeight`\n // A similar change might also be needed in `upsampleQuantizedTerrainMesh.js`.\n var rectangle = provider._tilingScheme.tileXYToRectangle(x, y, level);\n var orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n provider._tilingScheme.ellipsoid\n );\n\n return new QuantizedMeshTerrainData({\n center: center,\n minimumHeight: minimumHeight,\n maximumHeight: maximumHeight,\n boundingSphere: boundingSphere,\n orientedBoundingBox: orientedBoundingBox,\n horizonOcclusionPoint: horizonOcclusionPoint,\n quantizedVertices: encodedVertexBuffer,\n encodedNormals: encodedNormalBuffer,\n indices: indices,\n westIndices: westIndices,\n southIndices: southIndices,\n eastIndices: eastIndices,\n northIndices: northIndices,\n westSkirtHeight: skirtHeight,\n southSkirtHeight: skirtHeight,\n eastSkirtHeight: skirtHeight,\n northSkirtHeight: skirtHeight,\n childTileMask: provider.availability.computeChildMaskForTile(level, x, y),\n waterMask: waterMaskBuffer,\n credits: provider._tileCredits,\n });\n}\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link CesiumTerrainProvider#ready} returns true. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n *\n * @exception {DeveloperError} This function must not be called before {@link CesiumTerrainProvider#ready}\n * returns true.\n */\nCesiumTerrainProvider.prototype.requestTileGeometry = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var layers = this._layers;\n var layerToUse;\n var layerCount = layers.length;\n\n if (layerCount === 1) {\n // Optimized path for single layers\n layerToUse = layers[0];\n } else {\n for (var i = 0; i < layerCount; ++i) {\n var layer = layers[i];\n if (\n !defined(layer.availability) ||\n layer.availability.isTileAvailable(level, x, y)\n ) {\n layerToUse = layer;\n break;\n }\n }\n }\n\n return requestTileGeometry(this, x, y, level, layerToUse, request);\n};\n\nfunction requestTileGeometry(provider, x, y, level, layerToUse, request) {\n if (!defined(layerToUse)) {\n return when.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n }\n\n var urlTemplates = layerToUse.tileUrlTemplates;\n if (urlTemplates.length === 0) {\n return undefined;\n }\n\n // The TileMapService scheme counts from the bottom left\n var terrainY;\n if (!provider._scheme || provider._scheme === \"tms\") {\n var yTiles = provider._tilingScheme.getNumberOfYTilesAtLevel(level);\n terrainY = yTiles - y - 1;\n } else {\n terrainY = y;\n }\n\n var extensionList = [];\n if (provider._requestVertexNormals && layerToUse.hasVertexNormals) {\n extensionList.push(\n layerToUse.littleEndianExtensionSize\n ? \"octvertexnormals\"\n : \"vertexnormals\"\n );\n }\n if (provider._requestWaterMask && layerToUse.hasWaterMask) {\n extensionList.push(\"watermask\");\n }\n if (provider._requestMetadata && layerToUse.hasMetadata) {\n extensionList.push(\"metadata\");\n }\n\n var headers;\n var query;\n var url = urlTemplates[(x + terrainY + level) % urlTemplates.length];\n\n var resource = layerToUse.resource;\n if (\n defined(resource._ionEndpoint) &&\n !defined(resource._ionEndpoint.externalType)\n ) {\n // ion uses query paremeters to request extensions\n if (extensionList.length !== 0) {\n query = { extensions: extensionList.join(\"-\") };\n }\n headers = getRequestHeader(undefined);\n } else {\n //All other terrain servers\n headers = getRequestHeader(extensionList);\n }\n\n var promise = resource\n .getDerivedResource({\n url: url,\n templateValues: {\n version: layerToUse.version,\n z: level,\n x: x,\n y: terrainY,\n },\n queryParameters: query,\n headers: headers,\n request: request,\n })\n .fetchArrayBuffer();\n\n if (!defined(promise)) {\n return undefined;\n }\n\n return promise.then(function (buffer) {\n if (defined(provider._heightmapStructure)) {\n return createHeightmapTerrainData(provider, buffer, level, x, y);\n }\n return createQuantizedMeshTerrainData(\n provider,\n buffer,\n level,\n x,\n y,\n layerToUse\n );\n });\n}\n\nObject.defineProperties(CesiumTerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should not be called before {@link CesiumTerrainProvider#ready} returns true.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"credit must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._credit;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link CesiumTerrainProvider#ready} returns true.\n * @memberof CesiumTerrainProvider.prototype\n * @type {GeographicTilingScheme}\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link CesiumTerrainProvider#ready} returns true.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n * @exception {DeveloperError} This property must not be called before {@link CesiumTerrainProvider#ready}\n */\n hasWaterMask: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"hasWaterMask must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._hasWaterMask && this._requestWaterMask;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link CesiumTerrainProvider#ready} returns true.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n * @exception {DeveloperError} This property must not be called before {@link CesiumTerrainProvider#ready}\n */\n hasVertexNormals: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"hasVertexNormals must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n // returns true if we can request vertex normals from the server\n return this._hasVertexNormals && this._requestVertexNormals;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include metadata.\n * This function should not be called before {@link CesiumTerrainProvider#ready} returns true.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n * @exception {DeveloperError} This property must not be called before {@link CesiumTerrainProvider#ready}\n */\n hasMetadata: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"hasMetadata must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n // returns true if we can request metadata from the server\n return this._hasMetadata && this._requestMetadata;\n },\n },\n\n /**\n * Boolean flag that indicates if the client should request vertex normals from the server.\n * Vertex normals data is appended to the standard tile mesh data only if the client requests the vertex normals and\n * if the server provides vertex normals.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n */\n requestVertexNormals: {\n get: function () {\n return this._requestVertexNormals;\n },\n },\n\n /**\n * Boolean flag that indicates if the client should request a watermask from the server.\n * Watermask data is appended to the standard tile mesh data only if the client requests the watermask and\n * if the server provides a watermask.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n */\n requestWaterMask: {\n get: function () {\n return this._requestWaterMask;\n },\n },\n\n /**\n * Boolean flag that indicates if the client should request metadata from the server.\n * Metadata is appended to the standard tile mesh data only if the client requests the metadata and\n * if the server provides a metadata.\n * @memberof CesiumTerrainProvider.prototype\n * @type {Boolean}\n */\n requestMetadata: {\n get: function () {\n return this._requestMetadata;\n },\n },\n\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link CesiumTerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available. Note that this reflects tiles that are known to be available currently.\n * Additional tiles may be discovered to be available in the future, e.g. if availability information\n * exists deeper in the tree rather than it all being discoverable at the root. However, a tile that\n * is available now will not become unavailable in the future.\n * @memberof CesiumTerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: function () {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"availability must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._availability;\n },\n },\n});\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nCesiumTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported or availability is unknown, otherwise true or false.\n */\nCesiumTerrainProvider.prototype.getTileDataAvailable = function (x, y, level) {\n if (!defined(this._availability)) {\n return undefined;\n }\n if (level > this._availability._maximumLevel) {\n return false;\n }\n\n if (this._availability.isTileAvailable(level, x, y)) {\n // If the tile is listed as available, then we are done\n return true;\n }\n if (!this._hasMetadata) {\n // If we don't have any layers with the metadata extension then we don't have this tile\n return false;\n }\n\n var layers = this._layers;\n var count = layers.length;\n for (var i = 0; i < count; ++i) {\n var layerResult = checkLayer(this, x, y, level, layers[i], i === 0);\n if (layerResult.result) {\n // There is a layer that may or may not have the tile\n return undefined;\n }\n }\n\n return false;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nCesiumTerrainProvider.prototype.loadTileDataAvailability = function (\n x,\n y,\n level\n) {\n if (\n !defined(this._availability) ||\n level > this._availability._maximumLevel ||\n this._availability.isTileAvailable(level, x, y) ||\n !this._hasMetadata\n ) {\n // We know the tile is either available or not available so nothing to wait on\n return undefined;\n }\n\n var layers = this._layers;\n var count = layers.length;\n for (var i = 0; i < count; ++i) {\n var layerResult = checkLayer(this, x, y, level, layers[i], i === 0);\n if (defined(layerResult.promise)) {\n return layerResult.promise;\n }\n }\n};\n\nfunction getAvailabilityTile(layer, x, y, level) {\n if (level === 0) {\n return;\n }\n\n var availabilityLevels = layer.availabilityLevels;\n var parentLevel =\n level % availabilityLevels === 0\n ? level - availabilityLevels\n : ((level / availabilityLevels) | 0) * availabilityLevels;\n var divisor = 1 << (level - parentLevel);\n var parentX = (x / divisor) | 0;\n var parentY = (y / divisor) | 0;\n\n return {\n level: parentLevel,\n x: parentX,\n y: parentY,\n };\n}\n\nfunction checkLayer(provider, x, y, level, layer, topLayer) {\n if (!defined(layer.availabilityLevels)) {\n // It's definitely not in this layer\n return {\n result: false,\n };\n }\n\n var cacheKey;\n var deleteFromCache = function () {\n delete layer.availabilityPromiseCache[cacheKey];\n };\n var availabilityTilesLoaded = layer.availabilityTilesLoaded;\n var availability = layer.availability;\n\n var tile = getAvailabilityTile(layer, x, y, level);\n while (defined(tile)) {\n if (\n availability.isTileAvailable(tile.level, tile.x, tile.y) &&\n !availabilityTilesLoaded.isTileAvailable(tile.level, tile.x, tile.y)\n ) {\n var requestPromise;\n if (!topLayer) {\n cacheKey = tile.level + \"-\" + tile.x + \"-\" + tile.y;\n requestPromise = layer.availabilityPromiseCache[cacheKey];\n if (!defined(requestPromise)) {\n // For cutout terrain, if this isn't the top layer the availability tiles\n // may never get loaded, so request it here.\n var request = new Request({\n throttle: true,\n throttleByServer: true,\n type: RequestType.TERRAIN,\n });\n requestPromise = requestTileGeometry(\n provider,\n tile.x,\n tile.y,\n tile.level,\n layer,\n request\n );\n if (defined(requestPromise)) {\n layer.availabilityPromiseCache[cacheKey] = requestPromise;\n requestPromise.then(deleteFromCache);\n }\n }\n }\n\n // The availability tile is available, but not loaded, so there\n // is still a chance that it may become available at some point\n return {\n result: true,\n promise: requestPromise,\n };\n }\n\n tile = getAvailabilityTile(layer, tile.x, tile.y, tile.level);\n }\n\n return {\n result: false,\n };\n}\n\n// Used for testing\nCesiumTerrainProvider._getAvailabilityTile = getAvailabilityTile;\nexport default CesiumTerrainProvider;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nvar EllipseGeometryLibrary = {};\n\nvar rotAxis = new Cartesian3();\nvar tempVec = new Cartesian3();\nvar unitQuat = new Quaternion();\nvar rotMtx = new Matrix3();\n\nfunction pointOnEllipsoid(\n theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n result\n) {\n var azimuth = theta + rotation;\n\n Cartesian3.multiplyByScalar(eastVec, Math.cos(azimuth), rotAxis);\n Cartesian3.multiplyByScalar(northVec, Math.sin(azimuth), tempVec);\n Cartesian3.add(rotAxis, tempVec, rotAxis);\n\n var cosThetaSquared = Math.cos(theta);\n cosThetaSquared = cosThetaSquared * cosThetaSquared;\n\n var sinThetaSquared = Math.sin(theta);\n sinThetaSquared = sinThetaSquared * sinThetaSquared;\n\n var radius = ab / Math.sqrt(bSqr * cosThetaSquared + aSqr * sinThetaSquared);\n var angle = radius / mag;\n\n // Create the quaternion to rotate the position vector to the boundary of the ellipse.\n Quaternion.fromAxisAngle(rotAxis, angle, unitQuat);\n Matrix3.fromQuaternion(unitQuat, rotMtx);\n\n Matrix3.multiplyByVector(rotMtx, unitPos, result);\n Cartesian3.normalize(result, result);\n Cartesian3.multiplyByScalar(result, mag, result);\n return result;\n}\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchNormal = new Cartesian3();\n/**\n * Returns the positions raised to the given heights\n * @private\n */\nEllipseGeometryLibrary.raisePositionsToHeight = function (\n positions,\n options,\n extrude\n) {\n var ellipsoid = options.ellipsoid;\n var height = options.height;\n var extrudedHeight = options.extrudedHeight;\n var size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\n\n var finalPositions = new Float64Array(size * 3);\n\n var length = positions.length;\n var bottomOffset = extrude ? length : 0;\n for (var i = 0; i < length; i += 3) {\n var i1 = i + 1;\n var i2 = i + 2;\n\n var position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n ellipsoid.scaleToGeodeticSurface(position, position);\n\n var extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\n var normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\n var scaledNormal = Cartesian3.multiplyByScalar(\n normal,\n height,\n scratchCartesian3\n );\n Cartesian3.add(position, scaledNormal, position);\n\n if (extrude) {\n Cartesian3.multiplyByScalar(normal, extrudedHeight, scaledNormal);\n Cartesian3.add(extrudedPosition, scaledNormal, extrudedPosition);\n\n finalPositions[i + bottomOffset] = extrudedPosition.x;\n finalPositions[i1 + bottomOffset] = extrudedPosition.y;\n finalPositions[i2 + bottomOffset] = extrudedPosition.z;\n }\n\n finalPositions[i] = position.x;\n finalPositions[i1] = position.y;\n finalPositions[i2] = position.z;\n }\n\n return finalPositions;\n};\n\nvar unitPosScratch = new Cartesian3();\nvar eastVecScratch = new Cartesian3();\nvar northVecScratch = new Cartesian3();\n/**\n * Returns an array of positions that make up the ellipse.\n * @private\n */\nEllipseGeometryLibrary.computeEllipsePositions = function (\n options,\n addFillPositions,\n addEdgePositions\n) {\n var semiMinorAxis = options.semiMinorAxis;\n var semiMajorAxis = options.semiMajorAxis;\n var rotation = options.rotation;\n var center = options.center;\n\n // Computing the arc-length of the ellipse is too expensive to be practical. Estimating it using the\n // arc length of the sphere is too inaccurate and creates sharp edges when either the semi-major or\n // semi-minor axis is much bigger than the other. Instead, scale the angle delta to make\n // the distance along the ellipse boundary more closely match the granularity.\n var granularity = options.granularity * 8.0;\n\n var aSqr = semiMinorAxis * semiMinorAxis;\n var bSqr = semiMajorAxis * semiMajorAxis;\n var ab = semiMajorAxis * semiMinorAxis;\n\n var mag = Cartesian3.magnitude(center);\n\n var unitPos = Cartesian3.normalize(center, unitPosScratch);\n var eastVec = Cartesian3.cross(Cartesian3.UNIT_Z, center, eastVecScratch);\n eastVec = Cartesian3.normalize(eastVec, eastVec);\n var northVec = Cartesian3.cross(unitPos, eastVec, northVecScratch);\n\n // The number of points in the first quadrant\n var numPts = 1 + Math.ceil(CesiumMath.PI_OVER_TWO / granularity);\n\n var deltaTheta = CesiumMath.PI_OVER_TWO / (numPts - 1);\n var theta = CesiumMath.PI_OVER_TWO - numPts * deltaTheta;\n if (theta < 0.0) {\n numPts -= Math.ceil(Math.abs(theta) / deltaTheta);\n }\n\n // If the number of points were three, the ellipse\n // would be tessellated like below:\n //\n // *---*\n // / | \\ | \\\n // *---*---*---*\n // / | \\ | \\ | \\ | \\\n // / .*---*---*---*. \\\n // * ` | \\ | \\ | \\ | `*\n // \\`.*---*---*---*.`/\n // \\ | \\ | \\ | \\ | /\n // *---*---*---*\n // \\ | \\ | /\n // *---*\n // The first and last column have one position and fan to connect to the adjacent column.\n // Each other vertical column contains an even number of positions.\n var size = 2 * (numPts * (numPts + 2));\n var positions = addFillPositions ? new Array(size * 3) : undefined;\n var positionIndex = 0;\n var position = scratchCartesian1;\n var reflectedPosition = scratchCartesian2;\n\n var outerPositionsLength = numPts * 4 * 3;\n var outerRightIndex = outerPositionsLength - 1;\n var outerLeftIndex = 0;\n var outerPositions = addEdgePositions\n ? new Array(outerPositionsLength)\n : undefined;\n\n var i;\n var j;\n var numInterior;\n var t;\n var interiorPosition;\n\n // Compute points in the 'eastern' half of the ellipse\n theta = CesiumMath.PI_OVER_TWO;\n position = pointOnEllipsoid(\n theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n position\n );\n if (addFillPositions) {\n positions[positionIndex++] = position.x;\n positions[positionIndex++] = position.y;\n positions[positionIndex++] = position.z;\n }\n if (addEdgePositions) {\n outerPositions[outerRightIndex--] = position.z;\n outerPositions[outerRightIndex--] = position.y;\n outerPositions[outerRightIndex--] = position.x;\n }\n theta = CesiumMath.PI_OVER_TWO - deltaTheta;\n for (i = 1; i < numPts + 1; ++i) {\n position = pointOnEllipsoid(\n theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n position\n );\n reflectedPosition = pointOnEllipsoid(\n Math.PI - theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n reflectedPosition\n );\n\n if (addFillPositions) {\n positions[positionIndex++] = position.x;\n positions[positionIndex++] = position.y;\n positions[positionIndex++] = position.z;\n\n numInterior = 2 * i + 2;\n for (j = 1; j < numInterior - 1; ++j) {\n t = j / (numInterior - 1);\n interiorPosition = Cartesian3.lerp(\n position,\n reflectedPosition,\n t,\n scratchCartesian3\n );\n positions[positionIndex++] = interiorPosition.x;\n positions[positionIndex++] = interiorPosition.y;\n positions[positionIndex++] = interiorPosition.z;\n }\n\n positions[positionIndex++] = reflectedPosition.x;\n positions[positionIndex++] = reflectedPosition.y;\n positions[positionIndex++] = reflectedPosition.z;\n }\n\n if (addEdgePositions) {\n outerPositions[outerRightIndex--] = position.z;\n outerPositions[outerRightIndex--] = position.y;\n outerPositions[outerRightIndex--] = position.x;\n outerPositions[outerLeftIndex++] = reflectedPosition.x;\n outerPositions[outerLeftIndex++] = reflectedPosition.y;\n outerPositions[outerLeftIndex++] = reflectedPosition.z;\n }\n\n theta = CesiumMath.PI_OVER_TWO - (i + 1) * deltaTheta;\n }\n\n // Compute points in the 'western' half of the ellipse\n for (i = numPts; i > 1; --i) {\n theta = CesiumMath.PI_OVER_TWO - (i - 1) * deltaTheta;\n\n position = pointOnEllipsoid(\n -theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n position\n );\n reflectedPosition = pointOnEllipsoid(\n theta + Math.PI,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n reflectedPosition\n );\n\n if (addFillPositions) {\n positions[positionIndex++] = position.x;\n positions[positionIndex++] = position.y;\n positions[positionIndex++] = position.z;\n\n numInterior = 2 * (i - 1) + 2;\n for (j = 1; j < numInterior - 1; ++j) {\n t = j / (numInterior - 1);\n interiorPosition = Cartesian3.lerp(\n position,\n reflectedPosition,\n t,\n scratchCartesian3\n );\n positions[positionIndex++] = interiorPosition.x;\n positions[positionIndex++] = interiorPosition.y;\n positions[positionIndex++] = interiorPosition.z;\n }\n\n positions[positionIndex++] = reflectedPosition.x;\n positions[positionIndex++] = reflectedPosition.y;\n positions[positionIndex++] = reflectedPosition.z;\n }\n\n if (addEdgePositions) {\n outerPositions[outerRightIndex--] = position.z;\n outerPositions[outerRightIndex--] = position.y;\n outerPositions[outerRightIndex--] = position.x;\n outerPositions[outerLeftIndex++] = reflectedPosition.x;\n outerPositions[outerLeftIndex++] = reflectedPosition.y;\n outerPositions[outerLeftIndex++] = reflectedPosition.z;\n }\n }\n\n theta = CesiumMath.PI_OVER_TWO;\n position = pointOnEllipsoid(\n -theta,\n rotation,\n northVec,\n eastVec,\n aSqr,\n ab,\n bSqr,\n mag,\n unitPos,\n position\n );\n\n var r = {};\n if (addFillPositions) {\n positions[positionIndex++] = position.x;\n positions[positionIndex++] = position.y;\n positions[positionIndex++] = position.z;\n r.positions = positions;\n r.numPts = numPts;\n }\n if (addEdgePositions) {\n outerPositions[outerRightIndex--] = position.z;\n outerPositions[outerRightIndex--] = position.y;\n outerPositions[outerRightIndex--] = position.x;\n r.outerPositions = outerPositions;\n }\n\n return r;\n};\nexport default EllipseGeometryLibrary;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * Geometry instancing allows one {@link Geometry} object to be positions in several\n * different locations and colored uniquely. For example, one {@link BoxGeometry} can\n * be instanced several times, each with a different <code>modelMatrix</code> to change\n * its position, rotation, and scale.\n *\n * @alias GeometryInstance\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Geometry|GeometryFactory} options.geometry The geometry to instance.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates.\n * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick} or get/set per-instance attributes with {@link Primitive#getGeometryInstanceAttributes}.\n * @param {Object} [options.attributes] Per-instance attributes like a show or color attribute shown in the example below.\n *\n *\n * @example\n * // Create geometry for a box, and two instances that refer to it.\n * // One instance positions the box on the bottom and colored aqua.\n * // The other instance positions the box on the top and color white.\n * var geometry = Cesium.BoxGeometry.fromDimensions({\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n * dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n * });\n * var instanceBottom = new Cesium.GeometryInstance({\n * geometry : geometry,\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n * },\n * id : 'bottom'\n * });\n * var instanceTop = new Cesium.GeometryInstance({\n * geometry : geometry,\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 3000000.0), new Cesium.Matrix4()),\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n * },\n * id : 'top'\n * });\n *\n * @see Geometry\n */\nfunction GeometryInstance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.geometry)) {\n throw new DeveloperError(\"options.geometry is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The geometry being instanced.\n *\n * @type Geometry\n *\n * @default undefined\n */\n this.geometry = options.geometry;\n\n /**\n * The 4x4 transformation matrix that transforms the geometry from model to world coordinates.\n * When this is the identity matrix, the geometry is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type Matrix4\n *\n * @default Matrix4.IDENTITY\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n\n /**\n * User-defined object returned when the instance is picked or used to get/set per-instance attributes.\n *\n * @type Object\n *\n * @default undefined\n *\n * @see Scene#pick\n * @see Primitive#getGeometryInstanceAttributes\n */\n this.id = options.id;\n\n /**\n * Used for picking primitives that wrap geometry instances.\n *\n * @private\n */\n this.pickPrimitive = options.pickPrimitive;\n\n /**\n * Per-instance attributes like {@link ColorGeometryInstanceAttribute} or {@link ShowGeometryInstanceAttribute}.\n * {@link Geometry} attributes varying per vertex; these attributes are constant for the entire instance.\n *\n * @type Object\n *\n * @default undefined\n */\n this.attributes = defaultValue(options.attributes, {});\n\n /**\n * @private\n */\n this.westHemisphereGeometry = undefined;\n /**\n * @private\n */\n this.eastHemisphereGeometry = undefined;\n}\nexport default GeometryInstance;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A fixed-point encoding of a {@link Cartesian3} with 64-bit floating-point components, as two {@link Cartesian3}\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\n * <p>\n * This is used to encode positions in vertex buffers for rendering without jittering artifacts\n * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @alias EncodedCartesian3\n * @constructor\n *\n * @private\n */\nfunction EncodedCartesian3() {\n /**\n * The high bits for each component. Bits 0 to 22 store the whole value. Bits 23 to 31 are not used.\n *\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.high = Cartesian3.clone(Cartesian3.ZERO);\n\n /**\n * The low bits for each component. Bits 7 to 22 store the whole value, and bits 0 to 6 store the fraction. Bits 23 to 31 are not used.\n *\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n */\n this.low = Cartesian3.clone(Cartesian3.ZERO);\n}\n\n/**\n * Encodes a 64-bit floating-point value as two floating-point values that, when converted to\n * 32-bit floating-point and added, approximate the original input. The returned object\n * has <code>high</code> and <code>low</code> properties for the high and low bits, respectively.\n * <p>\n * The fixed-point encoding follows {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @param {Number} value The floating-point value to encode.\n * @param {Object} [result] The object onto which to store the result.\n * @returns {Object} The modified result parameter or a new instance if one was not provided.\n *\n * @example\n * var value = 1234567.1234567;\n * var splitValue = Cesium.EncodedCartesian3.encode(value);\n */\nEncodedCartesian3.encode = function (value, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = {\n high: 0.0,\n low: 0.0,\n };\n }\n\n var doubleHigh;\n if (value >= 0.0) {\n doubleHigh = Math.floor(value / 65536.0) * 65536.0;\n result.high = doubleHigh;\n result.low = value - doubleHigh;\n } else {\n doubleHigh = Math.floor(-value / 65536.0) * 65536.0;\n result.high = -doubleHigh;\n result.low = value + doubleHigh;\n }\n\n return result;\n};\n\nvar scratchEncode = {\n high: 0.0,\n low: 0.0,\n};\n\n/**\n * Encodes a {@link Cartesian3} with 64-bit floating-point components as two {@link Cartesian3}\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\n * <p>\n * The fixed-point encoding follows {@link http://blogs.agi.com/insight3d/index.php/2008/09/03/precisions-precisions/|Precisions, Precisions}.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian to encode.\n * @param {EncodedCartesian3} [result] The object onto which to store the result.\n * @returns {EncodedCartesian3} The modified result parameter or a new EncodedCartesian3 instance if one was not provided.\n *\n * @example\n * var cart = new Cesium.Cartesian3(-10000000.0, 0.0, 10000000.0);\n * var encoded = Cesium.EncodedCartesian3.fromCartesian(cart);\n */\nEncodedCartesian3.fromCartesian = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new EncodedCartesian3();\n }\n\n var high = result.high;\n var low = result.low;\n\n EncodedCartesian3.encode(cartesian.x, scratchEncode);\n high.x = scratchEncode.high;\n low.x = scratchEncode.low;\n\n EncodedCartesian3.encode(cartesian.y, scratchEncode);\n high.y = scratchEncode.high;\n low.y = scratchEncode.low;\n\n EncodedCartesian3.encode(cartesian.z, scratchEncode);\n high.z = scratchEncode.high;\n low.z = scratchEncode.low;\n\n return result;\n};\n\nvar encodedP = new EncodedCartesian3();\n\n/**\n * Encodes the provided <code>cartesian</code>, and writes it to an array with <code>high</code>\n * components followed by <code>low</code> components, i.e. <code>[high.x, high.y, high.z, low.x, low.y, low.z]</code>.\n * <p>\n * This is used to create interleaved high-precision position vertex attributes.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian to encode.\n * @param {Number[]} cartesianArray The array to write to.\n * @param {Number} index The index into the array to start writing. Six elements will be written.\n *\n * @exception {DeveloperError} index must be a number greater than or equal to 0.\n *\n * @example\n * var positions = [\n * new Cesium.Cartesian3(),\n * // ...\n * ];\n * var encodedPositions = new Float32Array(2 * 3 * positions.length);\n * var j = 0;\n * for (var i = 0; i < positions.length; ++i) {\n * Cesium.EncodedCartesian3.writeElement(positions[i], encodedPositions, j);\n * j += 6;\n * }\n */\nEncodedCartesian3.writeElements = function (cartesian, cartesianArray, index) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesianArray\", cartesianArray);\n Check.typeOf.number(\"index\", index);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n //>>includeEnd('debug');\n\n EncodedCartesian3.fromCartesian(cartesian, encodedP);\n var high = encodedP.high;\n var low = encodedP.low;\n\n cartesianArray[index] = high.x;\n cartesianArray[index + 1] = high.y;\n cartesianArray[index + 2] = high.z;\n cartesianArray[index + 3] = low.x;\n cartesianArray[index + 4] = low.y;\n cartesianArray[index + 5] = low.z;\n};\nexport default EncodedCartesian3;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Encapsulates an algorithm to optimize triangles for the post\n * vertex-shader cache. This is based on the 2007 SIGGRAPH paper\n * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.'\n * The runtime is linear but several passes are made.\n *\n * @namespace Tipsify\n *\n * @see <a href='http://gfx.cs.princeton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf'>\n * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw</a>\n * by Sander, Nehab, and Barczak\n *\n * @private\n */\nvar Tipsify = {};\n\n/**\n * Calculates the average cache miss ratio (ACMR) for a given set of indices.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n * in the vertex buffer that define the geometry's triangles.\n * @param {Number} [options.maximumIndex] The maximum value of the elements in <code>args.indices</code>.\n * If not supplied, this value will be computed.\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {Number} The average cache miss ratio (ACMR).\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * var indices = [0, 1, 2, 3, 4, 5];\n * var maxIndex = 5;\n * var cacheSize = 3;\n * var acmr = Cesium.Tipsify.calculateACMR({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.calculateACMR = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var indices = options.indices;\n var maximumIndex = options.maximumIndex;\n var cacheSize = defaultValue(options.cacheSize, 24);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(indices)) {\n throw new DeveloperError(\"indices is required.\");\n }\n //>>includeEnd('debug');\n\n var numIndices = indices.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (numIndices < 3 || numIndices % 3 !== 0) {\n throw new DeveloperError(\"indices length must be a multiple of three.\");\n }\n if (maximumIndex <= 0) {\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n }\n if (cacheSize < 3) {\n throw new DeveloperError(\"cacheSize must be greater than two.\");\n }\n //>>includeEnd('debug');\n\n // Compute the maximumIndex if not given\n if (!defined(maximumIndex)) {\n maximumIndex = 0;\n var currentIndex = 0;\n var intoIndices = indices[currentIndex];\n while (currentIndex < numIndices) {\n if (intoIndices > maximumIndex) {\n maximumIndex = intoIndices;\n }\n ++currentIndex;\n intoIndices = indices[currentIndex];\n }\n }\n\n // Vertex time stamps\n var vertexTimeStamps = [];\n for (var i = 0; i < maximumIndex + 1; i++) {\n vertexTimeStamps[i] = 0;\n }\n\n // Cache processing\n var s = cacheSize + 1;\n for (var j = 0; j < numIndices; ++j) {\n if (s - vertexTimeStamps[indices[j]] > cacheSize) {\n vertexTimeStamps[indices[j]] = s;\n ++s;\n }\n }\n\n return (s - cacheSize + 1) / (numIndices / 3);\n};\n\n/**\n * Optimizes triangles for the post-vertex shader cache.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n * in the vertex buffer that define the geometry's triangles.\n * @param {Number} [options.maximumIndex] The maximum value of the elements in <code>args.indices</code>.\n * If not supplied, this value will be computed.\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {Number[]} A list of the input indices in an optimized order.\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * var indices = [0, 1, 2, 3, 4, 5];\n * var maxIndex = 5;\n * var cacheSize = 3;\n * var reorderedIndices = Cesium.Tipsify.tipsify({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.tipsify = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var indices = options.indices;\n var maximumIndex = options.maximumIndex;\n var cacheSize = defaultValue(options.cacheSize, 24);\n\n var cursor;\n\n function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) {\n while (deadEnd.length >= 1) {\n // while the stack is not empty\n var d = deadEnd[deadEnd.length - 1]; // top of the stack\n deadEnd.splice(deadEnd.length - 1, 1); // pop the stack\n\n if (vertices[d].numLiveTriangles > 0) {\n return d;\n }\n }\n\n while (cursor < maximumIndexPlusOne) {\n if (vertices[cursor].numLiveTriangles > 0) {\n ++cursor;\n return cursor - 1;\n }\n ++cursor;\n }\n return -1;\n }\n\n function getNextVertex(\n indices,\n cacheSize,\n oneRing,\n vertices,\n s,\n deadEnd,\n maximumIndexPlusOne\n ) {\n var n = -1;\n var p;\n var m = -1;\n var itOneRing = 0;\n while (itOneRing < oneRing.length) {\n var index = oneRing[itOneRing];\n if (vertices[index].numLiveTriangles) {\n p = 0;\n if (\n s -\n vertices[index].timeStamp +\n 2 * vertices[index].numLiveTriangles <=\n cacheSize\n ) {\n p = s - vertices[index].timeStamp;\n }\n if (p > m || m === -1) {\n m = p;\n n = index;\n }\n }\n ++itOneRing;\n }\n if (n === -1) {\n return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne);\n }\n return n;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(indices)) {\n throw new DeveloperError(\"indices is required.\");\n }\n //>>includeEnd('debug');\n\n var numIndices = indices.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (numIndices < 3 || numIndices % 3 !== 0) {\n throw new DeveloperError(\"indices length must be a multiple of three.\");\n }\n if (maximumIndex <= 0) {\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n }\n if (cacheSize < 3) {\n throw new DeveloperError(\"cacheSize must be greater than two.\");\n }\n //>>includeEnd('debug');\n\n // Determine maximum index\n var maximumIndexPlusOne = 0;\n var currentIndex = 0;\n var intoIndices = indices[currentIndex];\n var endIndex = numIndices;\n if (defined(maximumIndex)) {\n maximumIndexPlusOne = maximumIndex + 1;\n } else {\n while (currentIndex < endIndex) {\n if (intoIndices > maximumIndexPlusOne) {\n maximumIndexPlusOne = intoIndices;\n }\n ++currentIndex;\n intoIndices = indices[currentIndex];\n }\n if (maximumIndexPlusOne === -1) {\n return 0;\n }\n ++maximumIndexPlusOne;\n }\n\n // Vertices\n var vertices = [];\n var i;\n for (i = 0; i < maximumIndexPlusOne; i++) {\n vertices[i] = {\n numLiveTriangles: 0,\n timeStamp: 0,\n vertexTriangles: [],\n };\n }\n currentIndex = 0;\n var triangle = 0;\n while (currentIndex < endIndex) {\n vertices[indices[currentIndex]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex]].numLiveTriangles;\n vertices[indices[currentIndex + 1]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex + 1]].numLiveTriangles;\n vertices[indices[currentIndex + 2]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex + 2]].numLiveTriangles;\n ++triangle;\n currentIndex += 3;\n }\n\n // Starting index\n var f = 0;\n\n // Time Stamp\n var s = cacheSize + 1;\n cursor = 1;\n\n // Process\n var oneRing = [];\n var deadEnd = []; //Stack\n var vertex;\n var intoVertices;\n var currentOutputIndex = 0;\n var outputIndices = [];\n var numTriangles = numIndices / 3;\n var triangleEmitted = [];\n for (i = 0; i < numTriangles; i++) {\n triangleEmitted[i] = false;\n }\n var index;\n var limit;\n while (f !== -1) {\n oneRing = [];\n intoVertices = vertices[f];\n limit = intoVertices.vertexTriangles.length;\n for (var k = 0; k < limit; ++k) {\n triangle = intoVertices.vertexTriangles[k];\n if (!triangleEmitted[triangle]) {\n triangleEmitted[triangle] = true;\n currentIndex = triangle + triangle + triangle;\n for (var j = 0; j < 3; ++j) {\n // Set this index as a possible next index\n index = indices[currentIndex];\n oneRing.push(index);\n deadEnd.push(index);\n\n // Output index\n outputIndices[currentOutputIndex] = index;\n ++currentOutputIndex;\n\n // Cache processing\n vertex = vertices[index];\n --vertex.numLiveTriangles;\n if (s - vertex.timeStamp > cacheSize) {\n vertex.timeStamp = s;\n ++s;\n }\n ++currentIndex;\n }\n }\n }\n f = getNextVertex(\n indices,\n cacheSize,\n oneRing,\n vertices,\n s,\n deadEnd,\n maximumIndexPlusOne\n );\n }\n\n return outputIndices;\n};\nexport default Tipsify;\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport barycentricCoordinates from \"./barycentricCoordinates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersect from \"./Intersect.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Tipsify from \"./Tipsify.js\";\n\n/**\n * Content pipeline functions for geometries.\n *\n * @namespace GeometryPipeline\n *\n * @see Geometry\n */\nvar GeometryPipeline = {};\n\nfunction addTriangle(lines, index, i0, i1, i2) {\n lines[index++] = i0;\n lines[index++] = i1;\n\n lines[index++] = i1;\n lines[index++] = i2;\n\n lines[index++] = i2;\n lines[index] = i0;\n}\n\nfunction trianglesToLines(triangles) {\n var count = triangles.length;\n var size = (count / 3) * 6;\n var lines = IndexDatatype.createTypedArray(count, size);\n\n var index = 0;\n for (var i = 0; i < count; i += 3, index += 6) {\n addTriangle(lines, index, triangles[i], triangles[i + 1], triangles[i + 2]);\n }\n\n return lines;\n}\n\nfunction triangleStripToLines(triangles) {\n var count = triangles.length;\n if (count >= 3) {\n var size = (count - 2) * 6;\n var lines = IndexDatatype.createTypedArray(count, size);\n\n addTriangle(lines, 0, triangles[0], triangles[1], triangles[2]);\n var index = 6;\n\n for (var i = 3; i < count; ++i, index += 6) {\n addTriangle(\n lines,\n index,\n triangles[i - 1],\n triangles[i],\n triangles[i - 2]\n );\n }\n\n return lines;\n }\n\n return new Uint16Array();\n}\n\nfunction triangleFanToLines(triangles) {\n if (triangles.length > 0) {\n var count = triangles.length - 1;\n var size = (count - 1) * 6;\n var lines = IndexDatatype.createTypedArray(count, size);\n\n var base = triangles[0];\n var index = 0;\n for (var i = 1; i < count; ++i, index += 6) {\n addTriangle(lines, index, base, triangles[i], triangles[i + 1]);\n }\n\n return lines;\n }\n\n return new Uint16Array();\n}\n\n/**\n * Converts a geometry's triangle indices to line indices. If the geometry has an <code>indices</code>\n * and its <code>primitiveType</code> is <code>TRIANGLES</code>, <code>TRIANGLE_STRIP</code>,\n * <code>TRIANGLE_FAN</code>, it is converted to <code>LINES</code>; otherwise, the geometry is not changed.\n * <p>\n * This is commonly used to create a wireframe geometry for visual debugging.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its triangle indices converted to lines.\n *\n * @exception {DeveloperError} geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.toWireframe(geometry);\n */\nGeometryPipeline.toWireframe = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n var indices = geometry.indices;\n if (defined(indices)) {\n switch (geometry.primitiveType) {\n case PrimitiveType.TRIANGLES:\n geometry.indices = trianglesToLines(indices);\n break;\n case PrimitiveType.TRIANGLE_STRIP:\n geometry.indices = triangleStripToLines(indices);\n break;\n case PrimitiveType.TRIANGLE_FAN:\n geometry.indices = triangleFanToLines(indices);\n break;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\n \"geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\"\n );\n //>>includeEnd('debug');\n }\n\n geometry.primitiveType = PrimitiveType.LINES;\n }\n\n return geometry;\n};\n\n/**\n * Creates a new {@link Geometry} with <code>LINES</code> representing the provided\n * attribute (<code>attributeName</code>) for the provided geometry. This is used to\n * visualize vector attributes like normals, tangents, and bitangents.\n *\n * @param {Geometry} geometry The <code>Geometry</code> instance with the attribute.\n * @param {String} [attributeName='normal'] The name of the attribute.\n * @param {Number} [length=10000.0] The length of each line segment in meters. This can be negative to point the vector in the opposite direction.\n * @returns {Geometry} A new <code>Geometry</code> instance with line segments for the vector.\n *\n * @exception {DeveloperError} geometry.attributes must have an attribute with the same name as the attributeName parameter.\n *\n * @example\n * var geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0);\n */\nGeometryPipeline.createLineSegmentsForVectors = function (\n geometry,\n attributeName,\n length\n) {\n attributeName = defaultValue(attributeName, \"normal\");\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(geometry.attributes.position)) {\n throw new DeveloperError(\"geometry.attributes.position is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n \"geometry.attributes must have an attribute with the same name as the attributeName parameter, \" +\n attributeName +\n \".\"\n );\n }\n //>>includeEnd('debug');\n\n length = defaultValue(length, 10000.0);\n\n var positions = geometry.attributes.position.values;\n var vectors = geometry.attributes[attributeName].values;\n var positionsLength = positions.length;\n\n var newPositions = new Float64Array(2 * positionsLength);\n\n var j = 0;\n for (var i = 0; i < positionsLength; i += 3) {\n newPositions[j++] = positions[i];\n newPositions[j++] = positions[i + 1];\n newPositions[j++] = positions[i + 2];\n\n newPositions[j++] = positions[i] + vectors[i] * length;\n newPositions[j++] = positions[i + 1] + vectors[i + 1] * length;\n newPositions[j++] = positions[i + 2] + vectors[i + 2] * length;\n }\n\n var newBoundingSphere;\n var bs = geometry.boundingSphere;\n if (defined(bs)) {\n newBoundingSphere = new BoundingSphere(bs.center, bs.radius + length);\n }\n\n return new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: newPositions,\n }),\n },\n primitiveType: PrimitiveType.LINES,\n boundingSphere: newBoundingSphere,\n });\n};\n\n/**\n * Creates an object that maps attribute names to unique locations (indices)\n * for matching vertex attributes and shader programs.\n *\n * @param {Geometry} geometry The geometry, which is not modified, to create the object for.\n * @returns {Object} An object with attribute name / index pairs.\n *\n * @example\n * var attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry);\n * // Example output\n * // {\n * // 'position' : 0,\n * // 'normal' : 1\n * // }\n */\nGeometryPipeline.createAttributeLocations = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug')\n\n // There can be a WebGL performance hit when attribute 0 is disabled, so\n // assign attribute locations to well-known attributes.\n var semantics = [\n \"position\",\n \"positionHigh\",\n \"positionLow\",\n\n // From VertexFormat.position - after 2D projection and high-precision encoding\n \"position3DHigh\",\n \"position3DLow\",\n \"position2DHigh\",\n \"position2DLow\",\n\n // From Primitive\n \"pickColor\",\n\n // From VertexFormat\n \"normal\",\n \"st\",\n \"tangent\",\n \"bitangent\",\n\n // For shadow volumes\n \"extrudeDirection\",\n\n // From compressing texture coordinates and normals\n \"compressedAttributes\",\n ];\n\n var attributes = geometry.attributes;\n var indices = {};\n var j = 0;\n var i;\n var len = semantics.length;\n\n // Attribute locations for well-known attributes\n for (i = 0; i < len; ++i) {\n var semantic = semantics[i];\n\n if (defined(attributes[semantic])) {\n indices[semantic] = j++;\n }\n }\n\n // Locations for custom attributes\n for (var name in attributes) {\n if (attributes.hasOwnProperty(name) && !defined(indices[name])) {\n indices[name] = j++;\n }\n }\n\n return indices;\n};\n\n/**\n * Reorders a geometry's attributes and <code>indices</code> to achieve better performance from the GPU's pre-vertex-shader cache.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache.\n *\n * @exception {DeveloperError} Each attribute array in geometry.attributes must have the same number of attributes.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPostVertexCache\n */\nGeometryPipeline.reorderForPreVertexCache = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n var numVertices = Geometry.computeNumberOfVertices(geometry);\n\n var indices = geometry.indices;\n if (defined(indices)) {\n var indexCrossReferenceOldToNew = new Int32Array(numVertices);\n for (var i = 0; i < numVertices; i++) {\n indexCrossReferenceOldToNew[i] = -1;\n }\n\n // Construct cross reference and reorder indices\n var indicesIn = indices;\n var numIndices = indicesIn.length;\n var indicesOut = IndexDatatype.createTypedArray(numVertices, numIndices);\n\n var intoIndicesIn = 0;\n var intoIndicesOut = 0;\n var nextIndex = 0;\n var tempIndex;\n while (intoIndicesIn < numIndices) {\n tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]];\n if (tempIndex !== -1) {\n indicesOut[intoIndicesOut] = tempIndex;\n } else {\n tempIndex = indicesIn[intoIndicesIn];\n indexCrossReferenceOldToNew[tempIndex] = nextIndex;\n\n indicesOut[intoIndicesOut] = nextIndex;\n ++nextIndex;\n }\n ++intoIndicesIn;\n ++intoIndicesOut;\n }\n geometry.indices = indicesOut;\n\n // Reorder attributes\n var attributes = geometry.attributes;\n for (var property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n var attribute = attributes[property];\n var elementsIn = attribute.values;\n var intoElementsIn = 0;\n var numComponents = attribute.componentsPerAttribute;\n var elementsOut = ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n nextIndex * numComponents\n );\n while (intoElementsIn < numVertices) {\n var temp = indexCrossReferenceOldToNew[intoElementsIn];\n if (temp !== -1) {\n for (var j = 0; j < numComponents; j++) {\n elementsOut[numComponents * temp + j] =\n elementsIn[numComponents * intoElementsIn + j];\n }\n }\n ++intoElementsIn;\n }\n attribute.values = elementsOut;\n }\n }\n }\n\n return geometry;\n};\n\n/**\n * Reorders a geometry's <code>indices</code> to achieve better performance from the GPU's\n * post vertex-shader cache by using the Tipsify algorithm. If the geometry <code>primitiveType</code>\n * is not <code>TRIANGLES</code> or the geometry does not have an <code>indices</code>, this function has no effect.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {Number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its indices reordered for the post-vertex-shader cache.\n *\n * @exception {DeveloperError} cacheCapacity must be greater than two.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPreVertexCache\n * @see {@link http://gfx.cs.princ0eton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf|Fast Triangle Reordering for Vertex Locality and Reduced Overdraw}\n * by Sander, Nehab, and Barczak\n */\nGeometryPipeline.reorderForPostVertexCache = function (\n geometry,\n cacheCapacity\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n var indices = geometry.indices;\n if (geometry.primitiveType === PrimitiveType.TRIANGLES && defined(indices)) {\n var numIndices = indices.length;\n var maximumIndex = 0;\n for (var j = 0; j < numIndices; j++) {\n if (indices[j] > maximumIndex) {\n maximumIndex = indices[j];\n }\n }\n geometry.indices = Tipsify.tipsify({\n indices: indices,\n maximumIndex: maximumIndex,\n cacheSize: cacheCapacity,\n });\n }\n\n return geometry;\n};\n\nfunction copyAttributesDescriptions(attributes) {\n var newAttributes = {};\n\n for (var attribute in attributes) {\n if (\n attributes.hasOwnProperty(attribute) &&\n defined(attributes[attribute]) &&\n defined(attributes[attribute].values)\n ) {\n var attr = attributes[attribute];\n newAttributes[attribute] = new GeometryAttribute({\n componentDatatype: attr.componentDatatype,\n componentsPerAttribute: attr.componentsPerAttribute,\n normalize: attr.normalize,\n values: [],\n });\n }\n }\n\n return newAttributes;\n}\n\nfunction copyVertex(destinationAttributes, sourceAttributes, index) {\n for (var attribute in sourceAttributes) {\n if (\n sourceAttributes.hasOwnProperty(attribute) &&\n defined(sourceAttributes[attribute]) &&\n defined(sourceAttributes[attribute].values)\n ) {\n var attr = sourceAttributes[attribute];\n\n for (var k = 0; k < attr.componentsPerAttribute; ++k) {\n destinationAttributes[attribute].values.push(\n attr.values[index * attr.componentsPerAttribute + k]\n );\n }\n }\n }\n}\n\n/**\n * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the\n * <code>indices</code> fit into unsigned shorts. This is used to meet the WebGL requirements\n * when unsigned int indices are not supported.\n * <p>\n * If the geometry does not have any <code>indices</code>, this function has no effect.\n * </p>\n *\n * @param {Geometry} geometry The geometry to be split into multiple geometries.\n * @returns {Geometry[]} An array of geometries, each with indices that fit into unsigned shorts.\n *\n * @exception {DeveloperError} geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS\n * @exception {DeveloperError} All geometry attribute lists must have the same number of attributes.\n *\n * @example\n * var geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry);\n */\nGeometryPipeline.fitToUnsignedShortIndices = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (\n defined(geometry.indices) &&\n geometry.primitiveType !== PrimitiveType.TRIANGLES &&\n geometry.primitiveType !== PrimitiveType.LINES &&\n geometry.primitiveType !== PrimitiveType.POINTS\n ) {\n throw new DeveloperError(\n \"geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS.\"\n );\n }\n //>>includeEnd('debug');\n\n var geometries = [];\n\n // If there's an index list and more than 64K attributes, it is possible that\n // some indices are outside the range of unsigned short [0, 64K - 1]\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n if (\n defined(geometry.indices) &&\n numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES\n ) {\n var oldToNewIndex = [];\n var newIndices = [];\n var currentIndex = 0;\n var newAttributes = copyAttributesDescriptions(geometry.attributes);\n\n var originalIndices = geometry.indices;\n var numberOfIndices = originalIndices.length;\n\n var indicesPerPrimitive;\n\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n indicesPerPrimitive = 3;\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\n indicesPerPrimitive = 2;\n } else if (geometry.primitiveType === PrimitiveType.POINTS) {\n indicesPerPrimitive = 1;\n }\n\n for (var j = 0; j < numberOfIndices; j += indicesPerPrimitive) {\n for (var k = 0; k < indicesPerPrimitive; ++k) {\n var x = originalIndices[j + k];\n var i = oldToNewIndex[x];\n if (!defined(i)) {\n i = currentIndex++;\n oldToNewIndex[x] = i;\n copyVertex(newAttributes, geometry.attributes, x);\n }\n newIndices.push(i);\n }\n\n if (\n currentIndex + indicesPerPrimitive >=\n CesiumMath.SIXTY_FOUR_KILOBYTES\n ) {\n geometries.push(\n new Geometry({\n attributes: newAttributes,\n indices: newIndices,\n primitiveType: geometry.primitiveType,\n boundingSphere: geometry.boundingSphere,\n boundingSphereCV: geometry.boundingSphereCV,\n })\n );\n\n // Reset for next vertex-array\n oldToNewIndex = [];\n newIndices = [];\n currentIndex = 0;\n newAttributes = copyAttributesDescriptions(geometry.attributes);\n }\n }\n\n if (newIndices.length !== 0) {\n geometries.push(\n new Geometry({\n attributes: newAttributes,\n indices: newIndices,\n primitiveType: geometry.primitiveType,\n boundingSphere: geometry.boundingSphere,\n boundingSphereCV: geometry.boundingSphereCV,\n })\n );\n }\n } else {\n // No need to split into multiple geometries\n geometries.push(geometry);\n }\n\n return geometries;\n};\n\nvar scratchProjectTo2DCartesian3 = new Cartesian3();\nvar scratchProjectTo2DCartographic = new Cartographic();\n\n/**\n * Projects a geometry's 3D <code>position</code> attribute to 2D, replacing the <code>position</code>\n * attribute with separate <code>position3D</code> and <code>position2D</code> attributes.\n * <p>\n * If the geometry does not have a <code>position</code>, this function has no effect.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {String} attributeName The name of the attribute.\n * @param {String} attributeName3D The name of the attribute in 3D.\n * @param {String} attributeName2D The name of the attribute in 2D.\n * @param {Object} [projection=new GeographicProjection()] The projection to use.\n * @returns {Geometry} The modified <code>geometry</code> argument with <code>position3D</code> and <code>position2D</code> attributes.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n * @exception {DeveloperError} Could not project a point to 2D.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D');\n */\nGeometryPipeline.projectTo2D = function (\n geometry,\n attributeName,\n attributeName3D,\n attributeName2D,\n projection\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(attributeName)) {\n throw new DeveloperError(\"attributeName is required.\");\n }\n if (!defined(attributeName3D)) {\n throw new DeveloperError(\"attributeName3D is required.\");\n }\n if (!defined(attributeName2D)) {\n throw new DeveloperError(\"attributeName2D is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n \"geometry must have attribute matching the attributeName argument: \" +\n attributeName +\n \".\"\n );\n }\n if (\n geometry.attributes[attributeName].componentDatatype !==\n ComponentDatatype.DOUBLE\n ) {\n throw new DeveloperError(\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\n );\n }\n //>>includeEnd('debug');\n\n var attribute = geometry.attributes[attributeName];\n projection = defined(projection) ? projection : new GeographicProjection();\n var ellipsoid = projection.ellipsoid;\n\n // Project original values to 2D.\n var values3D = attribute.values;\n var projectedValues = new Float64Array(values3D.length);\n var index = 0;\n\n for (var i = 0; i < values3D.length; i += 3) {\n var value = Cartesian3.fromArray(values3D, i, scratchProjectTo2DCartesian3);\n\n var lonLat = ellipsoid.cartesianToCartographic(\n value,\n scratchProjectTo2DCartographic\n );\n //>>includeStart('debug', pragmas.debug);\n if (!defined(lonLat)) {\n throw new DeveloperError(\n \"Could not project point (\" +\n value.x +\n \", \" +\n value.y +\n \", \" +\n value.z +\n \") to 2D.\"\n );\n }\n //>>includeEnd('debug');\n\n var projectedLonLat = projection.project(\n lonLat,\n scratchProjectTo2DCartesian3\n );\n\n projectedValues[index++] = projectedLonLat.x;\n projectedValues[index++] = projectedLonLat.y;\n projectedValues[index++] = projectedLonLat.z;\n }\n\n // Rename original cartesians to WGS84 cartesians.\n geometry.attributes[attributeName3D] = attribute;\n\n // Replace original cartesians with 2D projected cartesians\n geometry.attributes[attributeName2D] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: projectedValues,\n });\n delete geometry.attributes[attributeName];\n\n return geometry;\n};\n\nvar encodedResult = {\n high: 0.0,\n low: 0.0,\n};\n\n/**\n * Encodes floating-point geometry attribute values as two separate attributes to improve\n * rendering precision.\n * <p>\n * This is commonly used to create high-precision position vertex attributes.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {String} attributeName The name of the attribute.\n * @param {String} attributeHighName The name of the attribute for the encoded high bits.\n * @param {String} attributeLowName The name of the attribute for the encoded low bits.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its encoded attribute.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow');\n */\nGeometryPipeline.encodeAttribute = function (\n geometry,\n attributeName,\n attributeHighName,\n attributeLowName\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(attributeName)) {\n throw new DeveloperError(\"attributeName is required.\");\n }\n if (!defined(attributeHighName)) {\n throw new DeveloperError(\"attributeHighName is required.\");\n }\n if (!defined(attributeLowName)) {\n throw new DeveloperError(\"attributeLowName is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n \"geometry must have attribute matching the attributeName argument: \" +\n attributeName +\n \".\"\n );\n }\n if (\n geometry.attributes[attributeName].componentDatatype !==\n ComponentDatatype.DOUBLE\n ) {\n throw new DeveloperError(\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\n );\n }\n //>>includeEnd('debug');\n\n var attribute = geometry.attributes[attributeName];\n var values = attribute.values;\n var length = values.length;\n var highValues = new Float32Array(length);\n var lowValues = new Float32Array(length);\n\n for (var i = 0; i < length; ++i) {\n EncodedCartesian3.encode(values[i], encodedResult);\n highValues[i] = encodedResult.high;\n lowValues[i] = encodedResult.low;\n }\n\n var componentsPerAttribute = attribute.componentsPerAttribute;\n\n geometry.attributes[attributeHighName] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: componentsPerAttribute,\n values: highValues,\n });\n geometry.attributes[attributeLowName] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: componentsPerAttribute,\n values: lowValues,\n });\n delete geometry.attributes[attributeName];\n\n return geometry;\n};\n\nvar scratchCartesian3 = new Cartesian3();\n\nfunction transformPoint(matrix, attribute) {\n if (defined(attribute)) {\n var values = attribute.values;\n var length = values.length;\n for (var i = 0; i < length; i += 3) {\n Cartesian3.unpack(values, i, scratchCartesian3);\n Matrix4.multiplyByPoint(matrix, scratchCartesian3, scratchCartesian3);\n Cartesian3.pack(scratchCartesian3, values, i);\n }\n }\n}\n\nfunction transformVector(matrix, attribute) {\n if (defined(attribute)) {\n var values = attribute.values;\n var length = values.length;\n for (var i = 0; i < length; i += 3) {\n Cartesian3.unpack(values, i, scratchCartesian3);\n Matrix3.multiplyByVector(matrix, scratchCartesian3, scratchCartesian3);\n scratchCartesian3 = Cartesian3.normalize(\n scratchCartesian3,\n scratchCartesian3\n );\n Cartesian3.pack(scratchCartesian3, values, i);\n }\n }\n}\n\nvar inverseTranspose = new Matrix4();\nvar normalMatrix = new Matrix3();\n\n/**\n * Transforms a geometry instance to world coordinates. This changes\n * the instance's <code>modelMatrix</code> to {@link Matrix4.IDENTITY} and transforms the\n * following attributes if they are present: <code>position</code>, <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>.\n *\n * @param {GeometryInstance} instance The geometry instance to modify.\n * @returns {GeometryInstance} The modified <code>instance</code> argument, with its attributes transforms to world coordinates.\n *\n * @example\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instance);\n */\nGeometryPipeline.transformToWorldCoordinates = function (instance) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instance)) {\n throw new DeveloperError(\"instance is required.\");\n }\n //>>includeEnd('debug');\n\n var modelMatrix = instance.modelMatrix;\n\n if (Matrix4.equals(modelMatrix, Matrix4.IDENTITY)) {\n // Already in world coordinates\n return instance;\n }\n\n var attributes = instance.geometry.attributes;\n\n // Transform attributes in known vertex formats\n transformPoint(modelMatrix, attributes.position);\n transformPoint(modelMatrix, attributes.prevPosition);\n transformPoint(modelMatrix, attributes.nextPosition);\n\n if (\n defined(attributes.normal) ||\n defined(attributes.tangent) ||\n defined(attributes.bitangent)\n ) {\n Matrix4.inverse(modelMatrix, inverseTranspose);\n Matrix4.transpose(inverseTranspose, inverseTranspose);\n Matrix4.getMatrix3(inverseTranspose, normalMatrix);\n\n transformVector(normalMatrix, attributes.normal);\n transformVector(normalMatrix, attributes.tangent);\n transformVector(normalMatrix, attributes.bitangent);\n }\n\n var boundingSphere = instance.geometry.boundingSphere;\n if (defined(boundingSphere)) {\n instance.geometry.boundingSphere = BoundingSphere.transform(\n boundingSphere,\n modelMatrix,\n boundingSphere\n );\n }\n\n instance.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n return instance;\n};\n\nfunction findAttributesInAllGeometries(instances, propertyName) {\n var length = instances.length;\n\n var attributesInAllGeometries = {};\n\n var attributes0 = instances[0][propertyName].attributes;\n var name;\n\n for (name in attributes0) {\n if (\n attributes0.hasOwnProperty(name) &&\n defined(attributes0[name]) &&\n defined(attributes0[name].values)\n ) {\n var attribute = attributes0[name];\n var numberOfComponents = attribute.values.length;\n var inAllGeometries = true;\n\n // Does this same attribute exist in all geometries?\n for (var i = 1; i < length; ++i) {\n var otherAttribute = instances[i][propertyName].attributes[name];\n\n if (\n !defined(otherAttribute) ||\n attribute.componentDatatype !== otherAttribute.componentDatatype ||\n attribute.componentsPerAttribute !==\n otherAttribute.componentsPerAttribute ||\n attribute.normalize !== otherAttribute.normalize\n ) {\n inAllGeometries = false;\n break;\n }\n\n numberOfComponents += otherAttribute.values.length;\n }\n\n if (inAllGeometries) {\n attributesInAllGeometries[name] = new GeometryAttribute({\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n values: ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n numberOfComponents\n ),\n });\n }\n }\n }\n\n return attributesInAllGeometries;\n}\n\nvar tempScratch = new Cartesian3();\n\nfunction combineGeometries(instances, propertyName) {\n var length = instances.length;\n\n var name;\n var i;\n var j;\n var k;\n\n var m = instances[0].modelMatrix;\n var haveIndices = defined(instances[0][propertyName].indices);\n var primitiveType = instances[0][propertyName].primitiveType;\n\n //>>includeStart('debug', pragmas.debug);\n for (i = 1; i < length; ++i) {\n if (!Matrix4.equals(instances[i].modelMatrix, m)) {\n throw new DeveloperError(\"All instances must have the same modelMatrix.\");\n }\n if (defined(instances[i][propertyName].indices) !== haveIndices) {\n throw new DeveloperError(\n \"All instance geometries must have an indices or not have one.\"\n );\n }\n if (instances[i][propertyName].primitiveType !== primitiveType) {\n throw new DeveloperError(\n \"All instance geometries must have the same primitiveType.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n // Find subset of attributes in all geometries\n var attributes = findAttributesInAllGeometries(instances, propertyName);\n var values;\n var sourceValues;\n var sourceValuesLength;\n\n // Combine attributes from each geometry into a single typed array\n for (name in attributes) {\n if (attributes.hasOwnProperty(name)) {\n values = attributes[name].values;\n\n k = 0;\n for (i = 0; i < length; ++i) {\n sourceValues = instances[i][propertyName].attributes[name].values;\n sourceValuesLength = sourceValues.length;\n\n for (j = 0; j < sourceValuesLength; ++j) {\n values[k++] = sourceValues[j];\n }\n }\n }\n }\n\n // Combine index lists\n var indices;\n\n if (haveIndices) {\n var numberOfIndices = 0;\n for (i = 0; i < length; ++i) {\n numberOfIndices += instances[i][propertyName].indices.length;\n }\n\n var numberOfVertices = Geometry.computeNumberOfVertices(\n new Geometry({\n attributes: attributes,\n primitiveType: PrimitiveType.POINTS,\n })\n );\n var destIndices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfIndices\n );\n\n var destOffset = 0;\n var offset = 0;\n\n for (i = 0; i < length; ++i) {\n var sourceIndices = instances[i][propertyName].indices;\n var sourceIndicesLen = sourceIndices.length;\n\n for (k = 0; k < sourceIndicesLen; ++k) {\n destIndices[destOffset++] = offset + sourceIndices[k];\n }\n\n offset += Geometry.computeNumberOfVertices(instances[i][propertyName]);\n }\n\n indices = destIndices;\n }\n\n // Create bounding sphere that includes all instances\n var center = new Cartesian3();\n var radius = 0.0;\n var bs;\n\n for (i = 0; i < length; ++i) {\n bs = instances[i][propertyName].boundingSphere;\n if (!defined(bs)) {\n // If any geometries have an undefined bounding sphere, then so does the combined geometry\n center = undefined;\n break;\n }\n\n Cartesian3.add(bs.center, center, center);\n }\n\n if (defined(center)) {\n Cartesian3.divideByScalar(center, length, center);\n\n for (i = 0; i < length; ++i) {\n bs = instances[i][propertyName].boundingSphere;\n var tempRadius =\n Cartesian3.magnitude(\n Cartesian3.subtract(bs.center, center, tempScratch)\n ) + bs.radius;\n\n if (tempRadius > radius) {\n radius = tempRadius;\n }\n }\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: primitiveType,\n boundingSphere: defined(center)\n ? new BoundingSphere(center, radius)\n : undefined,\n });\n}\n\n/**\n * Combines geometry from several {@link GeometryInstance} objects into one geometry.\n * This concatenates the attributes, concatenates and adjusts the indices, and creates\n * a bounding sphere encompassing all instances.\n * <p>\n * If the instances do not have the same attributes, a subset of attributes common\n * to all instances is used, and the others are ignored.\n * </p>\n * <p>\n * This is used by {@link Primitive} to efficiently render a large amount of static data.\n * </p>\n *\n * @private\n *\n * @param {GeometryInstance[]} [instances] The array of {@link GeometryInstance} objects whose geometry will be combined.\n * @returns {Geometry} A single geometry created from the provided geometry instances.\n *\n * @exception {DeveloperError} All instances must have the same modelMatrix.\n * @exception {DeveloperError} All instance geometries must have an indices or not have one.\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n *\n *\n * @example\n * for (var i = 0; i < instances.length; ++i) {\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]);\n * }\n * var geometries = Cesium.GeometryPipeline.combineInstances(instances);\n *\n * @see GeometryPipeline.transformToWorldCoordinates\n */\nGeometryPipeline.combineInstances = function (instances) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instances) || instances.length < 1) {\n throw new DeveloperError(\n \"instances is required and must have length greater than zero.\"\n );\n }\n //>>includeEnd('debug');\n\n var instanceGeometry = [];\n var instanceSplitGeometry = [];\n var length = instances.length;\n for (var i = 0; i < length; ++i) {\n var instance = instances[i];\n\n if (defined(instance.geometry)) {\n instanceGeometry.push(instance);\n } else if (\n defined(instance.westHemisphereGeometry) &&\n defined(instance.eastHemisphereGeometry)\n ) {\n instanceSplitGeometry.push(instance);\n }\n }\n\n var geometries = [];\n if (instanceGeometry.length > 0) {\n geometries.push(combineGeometries(instanceGeometry, \"geometry\"));\n }\n\n if (instanceSplitGeometry.length > 0) {\n geometries.push(\n combineGeometries(instanceSplitGeometry, \"westHemisphereGeometry\")\n );\n geometries.push(\n combineGeometries(instanceSplitGeometry, \"eastHemisphereGeometry\")\n );\n }\n\n return geometries;\n};\n\nvar normal = new Cartesian3();\nvar v0 = new Cartesian3();\nvar v1 = new Cartesian3();\nvar v2 = new Cartesian3();\n\n/**\n * Computes per-vertex normals for a geometry containing <code>TRIANGLES</code> by averaging the normals of\n * all triangles incident to the vertex. The result is a new <code>normal</code> attribute added to the geometry.\n * This assumes a counter-clockwise winding order.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument with the computed <code>normal</code> attribute.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeNormal(geometry);\n */\nGeometryPipeline.computeNormal = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (\n !defined(geometry.attributes.position) ||\n !defined(geometry.attributes.position.values)\n ) {\n throw new DeveloperError(\n \"geometry.attributes.position.values is required.\"\n );\n }\n if (!defined(geometry.indices)) {\n throw new DeveloperError(\"geometry.indices is required.\");\n }\n if (geometry.indices.length < 2 || geometry.indices.length % 3 !== 0) {\n throw new DeveloperError(\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\n );\n }\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n throw new DeveloperError(\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\n );\n }\n //>>includeEnd('debug');\n\n var indices = geometry.indices;\n var attributes = geometry.attributes;\n var vertices = attributes.position.values;\n var numVertices = attributes.position.values.length / 3;\n var numIndices = indices.length;\n var normalsPerVertex = new Array(numVertices);\n var normalsPerTriangle = new Array(numIndices / 3);\n var normalIndices = new Array(numIndices);\n var i;\n for (i = 0; i < numVertices; i++) {\n normalsPerVertex[i] = {\n indexOffset: 0,\n count: 0,\n currentCount: 0,\n };\n }\n\n var j = 0;\n for (i = 0; i < numIndices; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n var i03 = i0 * 3;\n var i13 = i1 * 3;\n var i23 = i2 * 3;\n\n v0.x = vertices[i03];\n v0.y = vertices[i03 + 1];\n v0.z = vertices[i03 + 2];\n v1.x = vertices[i13];\n v1.y = vertices[i13 + 1];\n v1.z = vertices[i13 + 2];\n v2.x = vertices[i23];\n v2.y = vertices[i23 + 1];\n v2.z = vertices[i23 + 2];\n\n normalsPerVertex[i0].count++;\n normalsPerVertex[i1].count++;\n normalsPerVertex[i2].count++;\n\n Cartesian3.subtract(v1, v0, v1);\n Cartesian3.subtract(v2, v0, v2);\n normalsPerTriangle[j] = Cartesian3.cross(v1, v2, new Cartesian3());\n j++;\n }\n\n var indexOffset = 0;\n for (i = 0; i < numVertices; i++) {\n normalsPerVertex[i].indexOffset += indexOffset;\n indexOffset += normalsPerVertex[i].count;\n }\n\n j = 0;\n var vertexNormalData;\n for (i = 0; i < numIndices; i += 3) {\n vertexNormalData = normalsPerVertex[indices[i]];\n var index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n vertexNormalData = normalsPerVertex[indices[i + 1]];\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n vertexNormalData = normalsPerVertex[indices[i + 2]];\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n j++;\n }\n\n var normalValues = new Float32Array(numVertices * 3);\n for (i = 0; i < numVertices; i++) {\n var i3 = i * 3;\n vertexNormalData = normalsPerVertex[i];\n Cartesian3.clone(Cartesian3.ZERO, normal);\n if (vertexNormalData.count > 0) {\n for (j = 0; j < vertexNormalData.count; j++) {\n Cartesian3.add(\n normal,\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset + j]],\n normal\n );\n }\n\n // We can run into an issue where a vertex is used with 2 primitives that have opposite winding order.\n if (\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n ) {\n Cartesian3.clone(\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset]],\n normal\n );\n }\n }\n\n // We end up with a zero vector probably because of a degenerate triangle\n if (\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n ) {\n // Default to (0,0,1)\n normal.z = 1.0;\n }\n\n Cartesian3.normalize(normal, normal);\n normalValues[i3] = normal.x;\n normalValues[i3 + 1] = normal.y;\n normalValues[i3 + 2] = normal.z;\n }\n\n geometry.attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normalValues,\n });\n\n return geometry;\n};\n\nvar normalScratch = new Cartesian3();\nvar normalScale = new Cartesian3();\nvar tScratch = new Cartesian3();\n\n/**\n * Computes per-vertex tangents and bitangents for a geometry containing <code>TRIANGLES</code>.\n * The result is new <code>tangent</code> and <code>bitangent</code> attributes added to the geometry.\n * This assumes a counter-clockwise winding order.\n * <p>\n * Based on <a href=\"http://www.terathon.com/code/tangent.html\">Computing Tangent Space Basis Vectors\n * for an Arbitrary Mesh</a> by Eric Lengyel.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument with the computed <code>tangent</code> and <code>bitangent</code> attributes.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry);\n */\nGeometryPipeline.computeTangentAndBitangent = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n var attributes = geometry.attributes;\n var indices = geometry.indices;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(attributes.position) || !defined(attributes.position.values)) {\n throw new DeveloperError(\n \"geometry.attributes.position.values is required.\"\n );\n }\n if (!defined(attributes.normal) || !defined(attributes.normal.values)) {\n throw new DeveloperError(\"geometry.attributes.normal.values is required.\");\n }\n if (!defined(attributes.st) || !defined(attributes.st.values)) {\n throw new DeveloperError(\"geometry.attributes.st.values is required.\");\n }\n if (!defined(indices)) {\n throw new DeveloperError(\"geometry.indices is required.\");\n }\n if (indices.length < 2 || indices.length % 3 !== 0) {\n throw new DeveloperError(\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\n );\n }\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n throw new DeveloperError(\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\n );\n }\n //>>includeEnd('debug');\n\n var vertices = geometry.attributes.position.values;\n var normals = geometry.attributes.normal.values;\n var st = geometry.attributes.st.values;\n\n var numVertices = geometry.attributes.position.values.length / 3;\n var numIndices = indices.length;\n var tan1 = new Array(numVertices * 3);\n\n var i;\n for (i = 0; i < tan1.length; i++) {\n tan1[i] = 0;\n }\n\n var i03;\n var i13;\n var i23;\n for (i = 0; i < numIndices; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n i03 = i0 * 3;\n i13 = i1 * 3;\n i23 = i2 * 3;\n var i02 = i0 * 2;\n var i12 = i1 * 2;\n var i22 = i2 * 2;\n\n var ux = vertices[i03];\n var uy = vertices[i03 + 1];\n var uz = vertices[i03 + 2];\n\n var wx = st[i02];\n var wy = st[i02 + 1];\n var t1 = st[i12 + 1] - wy;\n var t2 = st[i22 + 1] - wy;\n\n var r = 1.0 / ((st[i12] - wx) * t2 - (st[i22] - wx) * t1);\n var sdirx = (t2 * (vertices[i13] - ux) - t1 * (vertices[i23] - ux)) * r;\n var sdiry =\n (t2 * (vertices[i13 + 1] - uy) - t1 * (vertices[i23 + 1] - uy)) * r;\n var sdirz =\n (t2 * (vertices[i13 + 2] - uz) - t1 * (vertices[i23 + 2] - uz)) * r;\n\n tan1[i03] += sdirx;\n tan1[i03 + 1] += sdiry;\n tan1[i03 + 2] += sdirz;\n\n tan1[i13] += sdirx;\n tan1[i13 + 1] += sdiry;\n tan1[i13 + 2] += sdirz;\n\n tan1[i23] += sdirx;\n tan1[i23 + 1] += sdiry;\n tan1[i23 + 2] += sdirz;\n }\n\n var tangentValues = new Float32Array(numVertices * 3);\n var bitangentValues = new Float32Array(numVertices * 3);\n\n for (i = 0; i < numVertices; i++) {\n i03 = i * 3;\n i13 = i03 + 1;\n i23 = i03 + 2;\n\n var n = Cartesian3.fromArray(normals, i03, normalScratch);\n var t = Cartesian3.fromArray(tan1, i03, tScratch);\n var scalar = Cartesian3.dot(n, t);\n Cartesian3.multiplyByScalar(n, scalar, normalScale);\n Cartesian3.normalize(Cartesian3.subtract(t, normalScale, t), t);\n\n tangentValues[i03] = t.x;\n tangentValues[i13] = t.y;\n tangentValues[i23] = t.z;\n\n Cartesian3.normalize(Cartesian3.cross(n, t, t), t);\n\n bitangentValues[i03] = t.x;\n bitangentValues[i13] = t.y;\n bitangentValues[i23] = t.z;\n }\n\n geometry.attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangentValues,\n });\n\n geometry.attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangentValues,\n });\n\n return geometry;\n};\n\nvar scratchCartesian2 = new Cartesian2();\nvar toEncode1 = new Cartesian3();\nvar toEncode2 = new Cartesian3();\nvar toEncode3 = new Cartesian3();\nvar encodeResult2 = new Cartesian2();\n/**\n * Compresses and packs geometry normal attribute values to save memory.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its normals compressed and packed.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.compressVertices(geometry);\n */\nGeometryPipeline.compressVertices = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n var extrudeAttribute = geometry.attributes.extrudeDirection;\n var i;\n var numVertices;\n if (defined(extrudeAttribute)) {\n //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\n var extrudeDirections = extrudeAttribute.values;\n numVertices = extrudeDirections.length / 3.0;\n var compressedDirections = new Float32Array(numVertices * 2);\n\n var i2 = 0;\n for (i = 0; i < numVertices; ++i) {\n Cartesian3.fromArray(extrudeDirections, i * 3.0, toEncode1);\n if (Cartesian3.equals(toEncode1, Cartesian3.ZERO)) {\n i2 += 2;\n continue;\n }\n encodeResult2 = AttributeCompression.octEncodeInRange(\n toEncode1,\n 65535,\n encodeResult2\n );\n compressedDirections[i2++] = encodeResult2.x;\n compressedDirections[i2++] = encodeResult2.y;\n }\n\n geometry.attributes.compressedAttributes = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: compressedDirections,\n });\n delete geometry.attributes.extrudeDirection;\n return geometry;\n }\n\n var normalAttribute = geometry.attributes.normal;\n var stAttribute = geometry.attributes.st;\n\n var hasNormal = defined(normalAttribute);\n var hasSt = defined(stAttribute);\n if (!hasNormal && !hasSt) {\n return geometry;\n }\n\n var tangentAttribute = geometry.attributes.tangent;\n var bitangentAttribute = geometry.attributes.bitangent;\n\n var hasTangent = defined(tangentAttribute);\n var hasBitangent = defined(bitangentAttribute);\n\n var normals;\n var st;\n var tangents;\n var bitangents;\n\n if (hasNormal) {\n normals = normalAttribute.values;\n }\n if (hasSt) {\n st = stAttribute.values;\n }\n if (hasTangent) {\n tangents = tangentAttribute.values;\n }\n if (hasBitangent) {\n bitangents = bitangentAttribute.values;\n }\n\n var length = hasNormal ? normals.length : st.length;\n var numComponents = hasNormal ? 3.0 : 2.0;\n numVertices = length / numComponents;\n\n var compressedLength = numVertices;\n var numCompressedComponents = hasSt && hasNormal ? 2.0 : 1.0;\n numCompressedComponents += hasTangent || hasBitangent ? 1.0 : 0.0;\n compressedLength *= numCompressedComponents;\n\n var compressedAttributes = new Float32Array(compressedLength);\n\n var normalIndex = 0;\n for (i = 0; i < numVertices; ++i) {\n if (hasSt) {\n Cartesian2.fromArray(st, i * 2.0, scratchCartesian2);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n }\n\n var index = i * 3.0;\n if (hasNormal && defined(tangents) && defined(bitangents)) {\n Cartesian3.fromArray(normals, index, toEncode1);\n Cartesian3.fromArray(tangents, index, toEncode2);\n Cartesian3.fromArray(bitangents, index, toEncode3);\n\n AttributeCompression.octPack(\n toEncode1,\n toEncode2,\n toEncode3,\n scratchCartesian2\n );\n compressedAttributes[normalIndex++] = scratchCartesian2.x;\n compressedAttributes[normalIndex++] = scratchCartesian2.y;\n } else {\n if (hasNormal) {\n Cartesian3.fromArray(normals, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n\n if (hasTangent) {\n Cartesian3.fromArray(tangents, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n\n if (hasBitangent) {\n Cartesian3.fromArray(bitangents, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n }\n }\n\n geometry.attributes.compressedAttributes = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: numCompressedComponents,\n values: compressedAttributes,\n });\n\n if (hasNormal) {\n delete geometry.attributes.normal;\n }\n if (hasSt) {\n delete geometry.attributes.st;\n }\n if (hasBitangent) {\n delete geometry.attributes.bitangent;\n }\n if (hasTangent) {\n delete geometry.attributes.tangent;\n }\n\n return geometry;\n};\n\nfunction indexTriangles(geometry) {\n if (defined(geometry.indices)) {\n return geometry;\n }\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least three.\");\n }\n if (numberOfVertices % 3 !== 0) {\n throw new DeveloperError(\n \"The number of vertices must be a multiple of three.\"\n );\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices\n );\n for (var i = 0; i < numberOfVertices; ++i) {\n indices[i] = i;\n }\n\n geometry.indices = indices;\n return geometry;\n}\n\nfunction indexTriangleFan(geometry) {\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least three.\");\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 2) * 3\n );\n indices[0] = 1;\n indices[1] = 0;\n indices[2] = 2;\n\n var indicesIndex = 3;\n for (var i = 3; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = 0;\n indices[indicesIndex++] = i;\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.TRIANGLES;\n return geometry;\n}\n\nfunction indexTriangleStrip(geometry) {\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least 3.\");\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 2) * 3\n );\n indices[0] = 0;\n indices[1] = 1;\n indices[2] = 2;\n\n if (numberOfVertices > 3) {\n indices[3] = 0;\n indices[4] = 2;\n indices[5] = 3;\n }\n\n var indicesIndex = 6;\n for (var i = 3; i < numberOfVertices - 1; i += 2) {\n indices[indicesIndex++] = i;\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i + 1;\n\n if (i + 2 < numberOfVertices) {\n indices[indicesIndex++] = i;\n indices[indicesIndex++] = i + 1;\n indices[indicesIndex++] = i + 2;\n }\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.TRIANGLES;\n return geometry;\n}\n\nfunction indexLines(geometry) {\n if (defined(geometry.indices)) {\n return geometry;\n }\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n if (numberOfVertices % 2 !== 0) {\n throw new DeveloperError(\"The number of vertices must be a multiple of 2.\");\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices\n );\n for (var i = 0; i < numberOfVertices; ++i) {\n indices[i] = i;\n }\n\n geometry.indices = indices;\n return geometry;\n}\n\nfunction indexLineStrip(geometry) {\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 1) * 2\n );\n indices[0] = 0;\n indices[1] = 1;\n var indicesIndex = 2;\n for (var i = 2; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i;\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.LINES;\n return geometry;\n}\n\nfunction indexLineLoop(geometry) {\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n //>>includeEnd('debug');\n\n var indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices * 2\n );\n\n indices[0] = 0;\n indices[1] = 1;\n\n var indicesIndex = 2;\n for (var i = 2; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i;\n }\n\n indices[indicesIndex++] = numberOfVertices - 1;\n indices[indicesIndex] = 0;\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.LINES;\n return geometry;\n}\n\nfunction indexPrimitive(geometry) {\n switch (geometry.primitiveType) {\n case PrimitiveType.TRIANGLE_FAN:\n return indexTriangleFan(geometry);\n case PrimitiveType.TRIANGLE_STRIP:\n return indexTriangleStrip(geometry);\n case PrimitiveType.TRIANGLES:\n return indexTriangles(geometry);\n case PrimitiveType.LINE_STRIP:\n return indexLineStrip(geometry);\n case PrimitiveType.LINE_LOOP:\n return indexLineLoop(geometry);\n case PrimitiveType.LINES:\n return indexLines(geometry);\n }\n\n return geometry;\n}\n\nfunction offsetPointFromXZPlane(p, isBehind) {\n if (Math.abs(p.y) < CesiumMath.EPSILON6) {\n if (isBehind) {\n p.y = -CesiumMath.EPSILON6;\n } else {\n p.y = CesiumMath.EPSILON6;\n }\n }\n}\n\nfunction offsetTriangleFromXZPlane(p0, p1, p2) {\n if (p0.y !== 0.0 && p1.y !== 0.0 && p2.y !== 0.0) {\n offsetPointFromXZPlane(p0, p0.y < 0.0);\n offsetPointFromXZPlane(p1, p1.y < 0.0);\n offsetPointFromXZPlane(p2, p2.y < 0.0);\n return;\n }\n\n var p0y = Math.abs(p0.y);\n var p1y = Math.abs(p1.y);\n var p2y = Math.abs(p2.y);\n\n var sign;\n if (p0y > p1y) {\n if (p0y > p2y) {\n sign = CesiumMath.sign(p0.y);\n } else {\n sign = CesiumMath.sign(p2.y);\n }\n } else if (p1y > p2y) {\n sign = CesiumMath.sign(p1.y);\n } else {\n sign = CesiumMath.sign(p2.y);\n }\n\n var isBehind = sign < 0.0;\n offsetPointFromXZPlane(p0, isBehind);\n offsetPointFromXZPlane(p1, isBehind);\n offsetPointFromXZPlane(p2, isBehind);\n}\n\nvar c3 = new Cartesian3();\nfunction getXZIntersectionOffsetPoints(p, p1, u1, v1) {\n Cartesian3.add(\n p,\n Cartesian3.multiplyByScalar(\n Cartesian3.subtract(p1, p, c3),\n p.y / (p.y - p1.y),\n c3\n ),\n u1\n );\n Cartesian3.clone(u1, v1);\n offsetPointFromXZPlane(u1, true);\n offsetPointFromXZPlane(v1, false);\n}\n\nvar u1 = new Cartesian3();\nvar u2 = new Cartesian3();\nvar q1 = new Cartesian3();\nvar q2 = new Cartesian3();\n\nvar splitTriangleResult = {\n positions: new Array(7),\n indices: new Array(3 * 3),\n};\n\nfunction splitTriangle(p0, p1, p2) {\n // In WGS84 coordinates, for a triangle approximately on the\n // ellipsoid to cross the IDL, first it needs to be on the\n // negative side of the plane x = 0.\n if (p0.x >= 0.0 || p1.x >= 0.0 || p2.x >= 0.0) {\n return undefined;\n }\n\n offsetTriangleFromXZPlane(p0, p1, p2);\n\n var p0Behind = p0.y < 0.0;\n var p1Behind = p1.y < 0.0;\n var p2Behind = p2.y < 0.0;\n\n var numBehind = 0;\n numBehind += p0Behind ? 1 : 0;\n numBehind += p1Behind ? 1 : 0;\n numBehind += p2Behind ? 1 : 0;\n\n var indices = splitTriangleResult.indices;\n\n if (numBehind === 1) {\n indices[1] = 3;\n indices[2] = 4;\n indices[5] = 6;\n indices[7] = 6;\n indices[8] = 5;\n\n if (p0Behind) {\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n indices[0] = 0;\n indices[3] = 1;\n indices[4] = 2;\n indices[6] = 1;\n } else if (p1Behind) {\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n indices[0] = 1;\n indices[3] = 2;\n indices[4] = 0;\n indices[6] = 2;\n } else if (p2Behind) {\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n indices[0] = 2;\n indices[3] = 0;\n indices[4] = 1;\n indices[6] = 0;\n }\n } else if (numBehind === 2) {\n indices[2] = 4;\n indices[4] = 4;\n indices[5] = 3;\n indices[7] = 5;\n indices[8] = 6;\n\n if (!p0Behind) {\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n indices[0] = 1;\n indices[1] = 2;\n indices[3] = 1;\n indices[6] = 0;\n } else if (!p1Behind) {\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n indices[0] = 2;\n indices[1] = 0;\n indices[3] = 2;\n indices[6] = 1;\n } else if (!p2Behind) {\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n indices[0] = 0;\n indices[1] = 1;\n indices[3] = 0;\n indices[6] = 2;\n }\n }\n\n var positions = splitTriangleResult.positions;\n positions[0] = p0;\n positions[1] = p1;\n positions[2] = p2;\n positions.length = 3;\n\n if (numBehind === 1 || numBehind === 2) {\n positions[3] = u1;\n positions[4] = u2;\n positions[5] = q1;\n positions[6] = q2;\n positions.length = 7;\n }\n\n return splitTriangleResult;\n}\n\nfunction updateGeometryAfterSplit(geometry, computeBoundingSphere) {\n var attributes = geometry.attributes;\n\n if (attributes.position.values.length === 0) {\n return undefined;\n }\n\n for (var property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n var attribute = attributes[property];\n attribute.values = ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n attribute.values\n );\n }\n }\n\n var numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n geometry.indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n geometry.indices\n );\n\n if (computeBoundingSphere) {\n geometry.boundingSphere = BoundingSphere.fromVertices(\n attributes.position.values\n );\n }\n\n return geometry;\n}\n\nfunction copyGeometryForSplit(geometry) {\n var attributes = geometry.attributes;\n var copiedAttributes = {};\n\n for (var property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n var attribute = attributes[property];\n copiedAttributes[property] = new GeometryAttribute({\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n values: [],\n });\n }\n }\n\n return new Geometry({\n attributes: copiedAttributes,\n indices: [],\n primitiveType: geometry.primitiveType,\n });\n}\n\nfunction updateInstanceAfterSplit(instance, westGeometry, eastGeometry) {\n var computeBoundingSphere = defined(instance.geometry.boundingSphere);\n\n westGeometry = updateGeometryAfterSplit(westGeometry, computeBoundingSphere);\n eastGeometry = updateGeometryAfterSplit(eastGeometry, computeBoundingSphere);\n\n if (defined(eastGeometry) && !defined(westGeometry)) {\n instance.geometry = eastGeometry;\n } else if (!defined(eastGeometry) && defined(westGeometry)) {\n instance.geometry = westGeometry;\n } else {\n instance.westHemisphereGeometry = westGeometry;\n instance.eastHemisphereGeometry = eastGeometry;\n instance.geometry = undefined;\n }\n}\n\nfunction generateBarycentricInterpolateFunction(\n CartesianType,\n numberOfComponents\n) {\n var v0Scratch = new CartesianType();\n var v1Scratch = new CartesianType();\n var v2Scratch = new CartesianType();\n\n return function (\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n normalize\n ) {\n var v0 = CartesianType.fromArray(\n sourceValues,\n i0 * numberOfComponents,\n v0Scratch\n );\n var v1 = CartesianType.fromArray(\n sourceValues,\n i1 * numberOfComponents,\n v1Scratch\n );\n var v2 = CartesianType.fromArray(\n sourceValues,\n i2 * numberOfComponents,\n v2Scratch\n );\n\n CartesianType.multiplyByScalar(v0, coords.x, v0);\n CartesianType.multiplyByScalar(v1, coords.y, v1);\n CartesianType.multiplyByScalar(v2, coords.z, v2);\n\n var value = CartesianType.add(v0, v1, v0);\n CartesianType.add(value, v2, value);\n\n if (normalize) {\n CartesianType.normalize(value, value);\n }\n\n CartesianType.pack(\n value,\n currentValues,\n insertedIndex * numberOfComponents\n );\n };\n}\n\nvar interpolateAndPackCartesian4 = generateBarycentricInterpolateFunction(\n Cartesian4,\n 4\n);\nvar interpolateAndPackCartesian3 = generateBarycentricInterpolateFunction(\n Cartesian3,\n 3\n);\nvar interpolateAndPackCartesian2 = generateBarycentricInterpolateFunction(\n Cartesian2,\n 2\n);\nvar interpolateAndPackBoolean = function (\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex\n) {\n var v1 = sourceValues[i0] * coords.x;\n var v2 = sourceValues[i1] * coords.y;\n var v3 = sourceValues[i2] * coords.z;\n currentValues[insertedIndex] = v1 + v2 + v3 > CesiumMath.EPSILON6 ? 1 : 0;\n};\n\nvar p0Scratch = new Cartesian3();\nvar p1Scratch = new Cartesian3();\nvar p2Scratch = new Cartesian3();\nvar barycentricScratch = new Cartesian3();\n\nfunction computeTriangleAttributes(\n i0,\n i1,\n i2,\n point,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n allAttributes,\n insertedIndex\n) {\n if (\n !defined(normals) &&\n !defined(tangents) &&\n !defined(bitangents) &&\n !defined(texCoords) &&\n !defined(extrudeDirections) &&\n customAttributesLength === 0\n ) {\n return;\n }\n\n var p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n var p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n var p2 = Cartesian3.fromArray(positions, i2 * 3, p2Scratch);\n var coords = barycentricCoordinates(point, p0, p1, p2, barycentricScratch);\n\n if (defined(normals)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n normals,\n currentAttributes.normal.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(extrudeDirections)) {\n var d0 = Cartesian3.fromArray(extrudeDirections, i0 * 3, p0Scratch);\n var d1 = Cartesian3.fromArray(extrudeDirections, i1 * 3, p1Scratch);\n var d2 = Cartesian3.fromArray(extrudeDirections, i2 * 3, p2Scratch);\n\n Cartesian3.multiplyByScalar(d0, coords.x, d0);\n Cartesian3.multiplyByScalar(d1, coords.y, d1);\n Cartesian3.multiplyByScalar(d2, coords.z, d2);\n\n var direction;\n if (\n !Cartesian3.equals(d0, Cartesian3.ZERO) ||\n !Cartesian3.equals(d1, Cartesian3.ZERO) ||\n !Cartesian3.equals(d2, Cartesian3.ZERO)\n ) {\n direction = Cartesian3.add(d0, d1, d0);\n Cartesian3.add(direction, d2, direction);\n Cartesian3.normalize(direction, direction);\n } else {\n direction = p0Scratch;\n direction.x = 0;\n direction.y = 0;\n direction.z = 0;\n }\n Cartesian3.pack(\n direction,\n currentAttributes.extrudeDirection.values,\n insertedIndex * 3\n );\n }\n\n if (defined(applyOffset)) {\n interpolateAndPackBoolean(\n i0,\n i1,\n i2,\n coords,\n applyOffset,\n currentAttributes.applyOffset.values,\n insertedIndex\n );\n }\n\n if (defined(tangents)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n tangents,\n currentAttributes.tangent.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(bitangents)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n bitangents,\n currentAttributes.bitangent.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(texCoords)) {\n interpolateAndPackCartesian2(\n i0,\n i1,\n i2,\n coords,\n texCoords,\n currentAttributes.st.values,\n insertedIndex\n );\n }\n\n if (customAttributesLength > 0) {\n for (var i = 0; i < customAttributesLength; i++) {\n var attributeName = customAttributeNames[i];\n genericInterpolate(\n i0,\n i1,\n i2,\n coords,\n insertedIndex,\n allAttributes[attributeName],\n currentAttributes[attributeName]\n );\n }\n }\n}\n\nfunction genericInterpolate(\n i0,\n i1,\n i2,\n coords,\n insertedIndex,\n sourceAttribute,\n currentAttribute\n) {\n var componentsPerAttribute = sourceAttribute.componentsPerAttribute;\n var sourceValues = sourceAttribute.values;\n var currentValues = currentAttribute.values;\n switch (componentsPerAttribute) {\n case 4:\n interpolateAndPackCartesian4(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n case 3:\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n case 2:\n interpolateAndPackCartesian2(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n default:\n currentValues[insertedIndex] =\n sourceValues[i0] * coords.x +\n sourceValues[i1] * coords.y +\n sourceValues[i2] * coords.z;\n }\n}\n\nfunction insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n currentIndex,\n point\n) {\n var insertIndex = currentAttributes.position.values.length / 3;\n\n if (currentIndex !== -1) {\n var prevIndex = indices[currentIndex];\n var newIndex = currentIndexMap[prevIndex];\n\n if (newIndex === -1) {\n currentIndexMap[prevIndex] = insertIndex;\n currentAttributes.position.values.push(point.x, point.y, point.z);\n currentIndices.push(insertIndex);\n return insertIndex;\n }\n\n currentIndices.push(newIndex);\n return newIndex;\n }\n\n currentAttributes.position.values.push(point.x, point.y, point.z);\n currentIndices.push(insertIndex);\n return insertIndex;\n}\n\nvar NAMED_ATTRIBUTES = {\n position: true,\n normal: true,\n bitangent: true,\n tangent: true,\n st: true,\n extrudeDirection: true,\n applyOffset: true,\n};\nfunction splitLongitudeTriangles(instance) {\n var geometry = instance.geometry;\n var attributes = geometry.attributes;\n var positions = attributes.position.values;\n var normals = defined(attributes.normal)\n ? attributes.normal.values\n : undefined;\n var bitangents = defined(attributes.bitangent)\n ? attributes.bitangent.values\n : undefined;\n var tangents = defined(attributes.tangent)\n ? attributes.tangent.values\n : undefined;\n var texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n var extrudeDirections = defined(attributes.extrudeDirection)\n ? attributes.extrudeDirection.values\n : undefined;\n var applyOffset = defined(attributes.applyOffset)\n ? attributes.applyOffset.values\n : undefined;\n var indices = geometry.indices;\n\n var customAttributeNames = [];\n for (var attributeName in attributes) {\n if (\n attributes.hasOwnProperty(attributeName) &&\n !NAMED_ATTRIBUTES[attributeName] &&\n defined(attributes[attributeName])\n ) {\n customAttributeNames.push(attributeName);\n }\n }\n var customAttributesLength = customAttributeNames.length;\n\n var eastGeometry = copyGeometryForSplit(geometry);\n var westGeometry = copyGeometryForSplit(geometry);\n\n var currentAttributes;\n var currentIndices;\n var currentIndexMap;\n var insertedIndex;\n var i;\n\n var westGeometryIndexMap = [];\n westGeometryIndexMap.length = positions.length / 3;\n\n var eastGeometryIndexMap = [];\n eastGeometryIndexMap.length = positions.length / 3;\n\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\n westGeometryIndexMap[i] = -1;\n eastGeometryIndexMap[i] = -1;\n }\n\n var len = indices.length;\n for (i = 0; i < len; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var p0 = Cartesian3.fromArray(positions, i0 * 3);\n var p1 = Cartesian3.fromArray(positions, i1 * 3);\n var p2 = Cartesian3.fromArray(positions, i2 * 3);\n\n var result = splitTriangle(p0, p1, p2);\n if (defined(result) && result.positions.length > 3) {\n var resultPositions = result.positions;\n var resultIndices = result.indices;\n var resultLength = resultIndices.length;\n\n for (var j = 0; j < resultLength; ++j) {\n var resultIndex = resultIndices[j];\n var point = resultPositions[resultIndex];\n\n if (point.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n resultIndex < 3 ? i + resultIndex : -1,\n point\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n point,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n }\n } else {\n if (defined(result)) {\n p0 = result.positions[0];\n p1 = result.positions[1];\n p2 = result.positions[2];\n }\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i,\n p0\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p0,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 1,\n p1\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p1,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 2,\n p2\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p2,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n }\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nvar xzPlane = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\n\nvar offsetScratch = new Cartesian3();\nvar offsetPointScratch = new Cartesian3();\n\nfunction computeLineAttributes(\n i0,\n i1,\n point,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n) {\n if (!defined(applyOffset)) {\n return;\n }\n\n var p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n if (Cartesian3.equalsEpsilon(p0, point, CesiumMath.EPSILON10)) {\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i0];\n } else {\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i1];\n }\n}\n\nfunction splitLongitudeLines(instance) {\n var geometry = instance.geometry;\n var attributes = geometry.attributes;\n var positions = attributes.position.values;\n var applyOffset = defined(attributes.applyOffset)\n ? attributes.applyOffset.values\n : undefined;\n var indices = geometry.indices;\n\n var eastGeometry = copyGeometryForSplit(geometry);\n var westGeometry = copyGeometryForSplit(geometry);\n\n var i;\n var length = indices.length;\n\n var westGeometryIndexMap = [];\n westGeometryIndexMap.length = positions.length / 3;\n\n var eastGeometryIndexMap = [];\n eastGeometryIndexMap.length = positions.length / 3;\n\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\n westGeometryIndexMap[i] = -1;\n eastGeometryIndexMap[i] = -1;\n }\n\n for (i = 0; i < length; i += 2) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n\n var p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n var p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n var insertIndex;\n\n if (Math.abs(p0.y) < CesiumMath.EPSILON6) {\n if (p0.y < 0.0) {\n p0.y = -CesiumMath.EPSILON6;\n } else {\n p0.y = CesiumMath.EPSILON6;\n }\n }\n\n if (Math.abs(p1.y) < CesiumMath.EPSILON6) {\n if (p1.y < 0.0) {\n p1.y = -CesiumMath.EPSILON6;\n } else {\n p1.y = CesiumMath.EPSILON6;\n }\n }\n\n var p0Attributes = eastGeometry.attributes;\n var p0Indices = eastGeometry.indices;\n var p0IndexMap = eastGeometryIndexMap;\n var p1Attributes = westGeometry.attributes;\n var p1Indices = westGeometry.indices;\n var p1IndexMap = westGeometryIndexMap;\n\n var intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p1,\n xzPlane,\n p2Scratch\n );\n if (defined(intersection)) {\n // move point on the xz-plane slightly away from the plane\n var offset = Cartesian3.multiplyByScalar(\n Cartesian3.UNIT_Y,\n 5.0 * CesiumMath.EPSILON9,\n offsetScratch\n );\n if (p0.y < 0.0) {\n Cartesian3.negate(offset, offset);\n\n p0Attributes = westGeometry.attributes;\n p0Indices = westGeometry.indices;\n p0IndexMap = westGeometryIndexMap;\n p1Attributes = eastGeometry.attributes;\n p1Indices = eastGeometry.indices;\n p1IndexMap = eastGeometryIndexMap;\n }\n\n var offsetPoint = Cartesian3.add(\n intersection,\n offset,\n offsetPointScratch\n );\n\n insertIndex = insertSplitPoint(\n p0Attributes,\n p0Indices,\n p0IndexMap,\n indices,\n i,\n p0\n );\n computeLineAttributes(\n i0,\n i1,\n p0,\n positions,\n insertIndex,\n p0Attributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n p0Attributes,\n p0Indices,\n p0IndexMap,\n indices,\n -1,\n offsetPoint\n );\n computeLineAttributes(\n i0,\n i1,\n offsetPoint,\n positions,\n insertIndex,\n p0Attributes,\n applyOffset\n );\n\n Cartesian3.negate(offset, offset);\n Cartesian3.add(intersection, offset, offsetPoint);\n insertIndex = insertSplitPoint(\n p1Attributes,\n p1Indices,\n p1IndexMap,\n indices,\n -1,\n offsetPoint\n );\n computeLineAttributes(\n i0,\n i1,\n offsetPoint,\n positions,\n insertIndex,\n p1Attributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n p1Attributes,\n p1Indices,\n p1IndexMap,\n indices,\n i + 1,\n p1\n );\n computeLineAttributes(\n i0,\n i1,\n p1,\n positions,\n insertIndex,\n p1Attributes,\n applyOffset\n );\n } else {\n var currentAttributes;\n var currentIndices;\n var currentIndexMap;\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i,\n p0\n );\n computeLineAttributes(\n i0,\n i1,\n p0,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 1,\n p1\n );\n computeLineAttributes(\n i0,\n i1,\n p1,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n );\n }\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nvar cartesian2Scratch0 = new Cartesian2();\nvar cartesian2Scratch1 = new Cartesian2();\n\nvar cartesian3Scratch0 = new Cartesian3();\nvar cartesian3Scratch2 = new Cartesian3();\nvar cartesian3Scratch3 = new Cartesian3();\nvar cartesian3Scratch4 = new Cartesian3();\nvar cartesian3Scratch5 = new Cartesian3();\nvar cartesian3Scratch6 = new Cartesian3();\n\nvar cartesian4Scratch0 = new Cartesian4();\n\nfunction updateAdjacencyAfterSplit(geometry) {\n var attributes = geometry.attributes;\n var positions = attributes.position.values;\n var prevPositions = attributes.prevPosition.values;\n var nextPositions = attributes.nextPosition.values;\n\n var length = positions.length;\n for (var j = 0; j < length; j += 3) {\n var position = Cartesian3.unpack(positions, j, cartesian3Scratch0);\n if (position.x > 0.0) {\n continue;\n }\n\n var prevPosition = Cartesian3.unpack(prevPositions, j, cartesian3Scratch2);\n if (\n (position.y < 0.0 && prevPosition.y > 0.0) ||\n (position.y > 0.0 && prevPosition.y < 0.0)\n ) {\n if (j - 3 > 0) {\n prevPositions[j] = positions[j - 3];\n prevPositions[j + 1] = positions[j - 2];\n prevPositions[j + 2] = positions[j - 1];\n } else {\n Cartesian3.pack(position, prevPositions, j);\n }\n }\n\n var nextPosition = Cartesian3.unpack(nextPositions, j, cartesian3Scratch3);\n if (\n (position.y < 0.0 && nextPosition.y > 0.0) ||\n (position.y > 0.0 && nextPosition.y < 0.0)\n ) {\n if (j + 3 < length) {\n nextPositions[j] = positions[j + 3];\n nextPositions[j + 1] = positions[j + 4];\n nextPositions[j + 2] = positions[j + 5];\n } else {\n Cartesian3.pack(position, nextPositions, j);\n }\n }\n }\n}\n\nvar offsetScalar = 5.0 * CesiumMath.EPSILON9;\nvar coplanarOffset = CesiumMath.EPSILON6;\n\nfunction splitLongitudePolyline(instance) {\n var geometry = instance.geometry;\n var attributes = geometry.attributes;\n var positions = attributes.position.values;\n var prevPositions = attributes.prevPosition.values;\n var nextPositions = attributes.nextPosition.values;\n var expandAndWidths = attributes.expandAndWidth.values;\n\n var texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n var colors = defined(attributes.color) ? attributes.color.values : undefined;\n\n var eastGeometry = copyGeometryForSplit(geometry);\n var westGeometry = copyGeometryForSplit(geometry);\n\n var i;\n var j;\n var index;\n\n var intersectionFound = false;\n\n var length = positions.length / 3;\n for (i = 0; i < length; i += 4) {\n var i0 = i;\n var i2 = i + 2;\n\n var p0 = Cartesian3.fromArray(positions, i0 * 3, cartesian3Scratch0);\n var p2 = Cartesian3.fromArray(positions, i2 * 3, cartesian3Scratch2);\n\n // Offset points that are close to the 180 longitude and change the previous/next point\n // to be the same offset point so it can be projected to 2D. There is special handling in the\n // shader for when position == prevPosition || position == nextPosition.\n if (Math.abs(p0.y) < coplanarOffset) {\n p0.y = coplanarOffset * (p2.y < 0.0 ? -1.0 : 1.0);\n positions[i * 3 + 1] = p0.y;\n positions[(i + 1) * 3 + 1] = p0.y;\n\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n prevPositions[j] = positions[i * 3];\n prevPositions[j + 1] = positions[i * 3 + 1];\n prevPositions[j + 2] = positions[i * 3 + 2];\n }\n }\n\n // Do the same but for when the line crosses 180 longitude in the opposite direction.\n if (Math.abs(p2.y) < coplanarOffset) {\n p2.y = coplanarOffset * (p0.y < 0.0 ? -1.0 : 1.0);\n positions[(i + 2) * 3 + 1] = p2.y;\n positions[(i + 3) * 3 + 1] = p2.y;\n\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n nextPositions[j] = positions[(i + 2) * 3];\n nextPositions[j + 1] = positions[(i + 2) * 3 + 1];\n nextPositions[j + 2] = positions[(i + 2) * 3 + 2];\n }\n }\n\n var p0Attributes = eastGeometry.attributes;\n var p0Indices = eastGeometry.indices;\n var p2Attributes = westGeometry.attributes;\n var p2Indices = westGeometry.indices;\n\n var intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p2,\n xzPlane,\n cartesian3Scratch4\n );\n if (defined(intersection)) {\n intersectionFound = true;\n\n // move point on the xz-plane slightly away from the plane\n var offset = Cartesian3.multiplyByScalar(\n Cartesian3.UNIT_Y,\n offsetScalar,\n cartesian3Scratch5\n );\n if (p0.y < 0.0) {\n Cartesian3.negate(offset, offset);\n p0Attributes = westGeometry.attributes;\n p0Indices = westGeometry.indices;\n p2Attributes = eastGeometry.attributes;\n p2Indices = eastGeometry.indices;\n }\n\n var offsetPoint = Cartesian3.add(\n intersection,\n offset,\n cartesian3Scratch6\n );\n p0Attributes.position.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n p0Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n p0Attributes.prevPosition.values.push(\n prevPositions[i0 * 3],\n prevPositions[i0 * 3 + 1],\n prevPositions[i0 * 3 + 2]\n );\n p0Attributes.prevPosition.values.push(\n prevPositions[i0 * 3 + 3],\n prevPositions[i0 * 3 + 4],\n prevPositions[i0 * 3 + 5]\n );\n p0Attributes.prevPosition.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n Cartesian3.negate(offset, offset);\n Cartesian3.add(intersection, offset, offsetPoint);\n p2Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.position.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n p2Attributes.nextPosition.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n p2Attributes.nextPosition.values.push(\n nextPositions[i2 * 3],\n nextPositions[i2 * 3 + 1],\n nextPositions[i2 * 3 + 2]\n );\n p2Attributes.nextPosition.values.push(\n nextPositions[i2 * 3 + 3],\n nextPositions[i2 * 3 + 4],\n nextPositions[i2 * 3 + 5]\n );\n\n var ew0 = Cartesian2.fromArray(\n expandAndWidths,\n i0 * 2,\n cartesian2Scratch0\n );\n var width = Math.abs(ew0.y);\n\n p0Attributes.expandAndWidth.values.push(-1, width, 1, width);\n p0Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n p2Attributes.expandAndWidth.values.push(-1, width, 1, width);\n p2Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n\n var t = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(intersection, p0, cartesian3Scratch3)\n );\n t /= Cartesian3.magnitudeSquared(\n Cartesian3.subtract(p2, p0, cartesian3Scratch3)\n );\n\n if (defined(colors)) {\n var c0 = Cartesian4.fromArray(colors, i0 * 4, cartesian4Scratch0);\n var c2 = Cartesian4.fromArray(colors, i2 * 4, cartesian4Scratch0);\n\n var r = CesiumMath.lerp(c0.x, c2.x, t);\n var g = CesiumMath.lerp(c0.y, c2.y, t);\n var b = CesiumMath.lerp(c0.z, c2.z, t);\n var a = CesiumMath.lerp(c0.w, c2.w, t);\n\n for (j = i0 * 4; j < i0 * 4 + 2 * 4; ++j) {\n p0Attributes.color.values.push(colors[j]);\n }\n p0Attributes.color.values.push(r, g, b, a);\n p0Attributes.color.values.push(r, g, b, a);\n p2Attributes.color.values.push(r, g, b, a);\n p2Attributes.color.values.push(r, g, b, a);\n for (j = i2 * 4; j < i2 * 4 + 2 * 4; ++j) {\n p2Attributes.color.values.push(colors[j]);\n }\n }\n\n if (defined(texCoords)) {\n var s0 = Cartesian2.fromArray(texCoords, i0 * 2, cartesian2Scratch0);\n var s3 = Cartesian2.fromArray(\n texCoords,\n (i + 3) * 2,\n cartesian2Scratch1\n );\n\n var sx = CesiumMath.lerp(s0.x, s3.x, t);\n\n for (j = i0 * 2; j < i0 * 2 + 2 * 2; ++j) {\n p0Attributes.st.values.push(texCoords[j]);\n }\n p0Attributes.st.values.push(sx, s0.y);\n p0Attributes.st.values.push(sx, s3.y);\n p2Attributes.st.values.push(sx, s0.y);\n p2Attributes.st.values.push(sx, s3.y);\n for (j = i2 * 2; j < i2 * 2 + 2 * 2; ++j) {\n p2Attributes.st.values.push(texCoords[j]);\n }\n }\n\n index = p0Attributes.position.values.length / 3 - 4;\n p0Indices.push(index, index + 2, index + 1);\n p0Indices.push(index + 1, index + 2, index + 3);\n\n index = p2Attributes.position.values.length / 3 - 4;\n p2Indices.push(index, index + 2, index + 1);\n p2Indices.push(index + 1, index + 2, index + 3);\n } else {\n var currentAttributes;\n var currentIndices;\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n }\n\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n\n for (j = i * 3; j < i * 3 + 4 * 3; ++j) {\n currentAttributes.prevPosition.values.push(prevPositions[j]);\n currentAttributes.nextPosition.values.push(nextPositions[j]);\n }\n\n for (j = i * 2; j < i * 2 + 4 * 2; ++j) {\n currentAttributes.expandAndWidth.values.push(expandAndWidths[j]);\n if (defined(texCoords)) {\n currentAttributes.st.values.push(texCoords[j]);\n }\n }\n\n if (defined(colors)) {\n for (j = i * 4; j < i * 4 + 4 * 4; ++j) {\n currentAttributes.color.values.push(colors[j]);\n }\n }\n\n index = currentAttributes.position.values.length / 3 - 4;\n currentIndices.push(index, index + 2, index + 1);\n currentIndices.push(index + 1, index + 2, index + 3);\n }\n }\n\n if (intersectionFound) {\n updateAdjacencyAfterSplit(westGeometry);\n updateAdjacencyAfterSplit(eastGeometry);\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\n/**\n * Splits the instances's geometry, by introducing new vertices and indices,that\n * intersect the International Date Line and Prime Meridian so that no primitives cross longitude\n * -180/180 degrees. This is not required for 3D drawing, but is required for\n * correcting drawing in 2D and Columbus view.\n *\n * @private\n *\n * @param {GeometryInstance} instance The instance to modify.\n * @returns {GeometryInstance} The modified <code>instance</code> argument, with it's geometry split at the International Date Line.\n *\n * @example\n * instance = Cesium.GeometryPipeline.splitLongitude(instance);\n */\nGeometryPipeline.splitLongitude = function (instance) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instance)) {\n throw new DeveloperError(\"instance is required.\");\n }\n //>>includeEnd('debug');\n\n var geometry = instance.geometry;\n var boundingSphere = geometry.boundingSphere;\n if (defined(boundingSphere)) {\n var minX = boundingSphere.center.x - boundingSphere.radius;\n if (\n minX > 0 ||\n BoundingSphere.intersectPlane(boundingSphere, Plane.ORIGIN_ZX_PLANE) !==\n Intersect.INTERSECTING\n ) {\n return instance;\n }\n }\n\n if (geometry.geometryType !== GeometryType.NONE) {\n switch (geometry.geometryType) {\n case GeometryType.POLYLINES:\n splitLongitudePolyline(instance);\n break;\n case GeometryType.TRIANGLES:\n splitLongitudeTriangles(instance);\n break;\n case GeometryType.LINES:\n splitLongitudeLines(instance);\n break;\n }\n } else {\n indexPrimitive(geometry);\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n splitLongitudeTriangles(instance);\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\n splitLongitudeLines(instance);\n }\n }\n\n return instance;\n};\nexport default GeometryPipeline;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartesian4 = new Cartesian3();\nvar texCoordScratch = new Cartesian2();\nvar textureMatrixScratch = new Matrix3();\nvar tangentMatrixScratch = new Matrix3();\nvar quaternionScratch = new Quaternion();\n\nvar scratchNormal = new Cartesian3();\nvar scratchTangent = new Cartesian3();\nvar scratchBitangent = new Cartesian3();\n\nvar scratchCartographic = new Cartographic();\nvar projectedCenterScratch = new Cartesian3();\n\nvar scratchMinTexCoord = new Cartesian2();\nvar scratchMaxTexCoord = new Cartesian2();\n\nfunction computeTopBottomAttributes(positions, options, extrude) {\n var vertexFormat = options.vertexFormat;\n var center = options.center;\n var semiMajorAxis = options.semiMajorAxis;\n var semiMinorAxis = options.semiMinorAxis;\n var ellipsoid = options.ellipsoid;\n var stRotation = options.stRotation;\n var size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\n var shadowVolume = options.shadowVolume;\n\n var textureCoordinates = vertexFormat.st\n ? new Float32Array(size * 2)\n : undefined;\n var normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(size * 3) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(size * 3)\n : undefined;\n\n var extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\n\n var textureCoordIndex = 0;\n\n // Raise positions to a height above the ellipsoid and compute the\n // texture coordinates, normals, tangents, and bitangents.\n var normal = scratchNormal;\n var tangent = scratchTangent;\n var bitangent = scratchBitangent;\n\n var projection = new GeographicProjection(ellipsoid);\n var projectedCenter = projection.project(\n ellipsoid.cartesianToCartographic(center, scratchCartographic),\n projectedCenterScratch\n );\n\n var geodeticNormal = ellipsoid.scaleToGeodeticSurface(\n center,\n scratchCartesian1\n );\n ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\n\n var textureMatrix = textureMatrixScratch;\n var tangentMatrix = tangentMatrixScratch;\n if (stRotation !== 0) {\n var rotation = Quaternion.fromAxisAngle(\n geodeticNormal,\n stRotation,\n quaternionScratch\n );\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n rotation = Quaternion.fromAxisAngle(\n geodeticNormal,\n -stRotation,\n quaternionScratch\n );\n tangentMatrix = Matrix3.fromQuaternion(rotation, tangentMatrix);\n } else {\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n tangentMatrix = Matrix3.clone(Matrix3.IDENTITY, tangentMatrix);\n }\n\n var minTexCoord = Cartesian2.fromElements(\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n scratchMinTexCoord\n );\n var maxTexCoord = Cartesian2.fromElements(\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n scratchMaxTexCoord\n );\n\n var length = positions.length;\n var bottomOffset = extrude ? length : 0;\n var stOffset = (bottomOffset / 3) * 2;\n for (var i = 0; i < length; i += 3) {\n var i1 = i + 1;\n var i2 = i + 2;\n var position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n\n if (vertexFormat.st) {\n var rotatedPoint = Matrix3.multiplyByVector(\n textureMatrix,\n position,\n scratchCartesian2\n );\n var projectedPoint = projection.project(\n ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\n scratchCartesian3\n );\n Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\n\n texCoordScratch.x =\n (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\n texCoordScratch.y =\n (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\n\n minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\n minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\n maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\n maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\n\n if (extrude) {\n textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\n textureCoordinates[textureCoordIndex + 1 + stOffset] =\n texCoordScratch.y;\n }\n\n textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\n textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\n }\n\n if (\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent ||\n shadowVolume\n ) {\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n\n if (shadowVolume) {\n extrudeNormals[i + bottomOffset] = -normal.x;\n extrudeNormals[i1 + bottomOffset] = -normal.y;\n extrudeNormals[i2 + bottomOffset] = -normal.z;\n }\n\n if (\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent\n ) {\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\n tangent\n );\n Matrix3.multiplyByVector(tangentMatrix, tangent, tangent);\n }\n if (vertexFormat.normal) {\n normals[i] = normal.x;\n normals[i1] = normal.y;\n normals[i2] = normal.z;\n if (extrude) {\n normals[i + bottomOffset] = -normal.x;\n normals[i1 + bottomOffset] = -normal.y;\n normals[i2 + bottomOffset] = -normal.z;\n }\n }\n\n if (vertexFormat.tangent) {\n tangents[i] = tangent.x;\n tangents[i1] = tangent.y;\n tangents[i2] = tangent.z;\n if (extrude) {\n tangents[i + bottomOffset] = -tangent.x;\n tangents[i1 + bottomOffset] = -tangent.y;\n tangents[i2 + bottomOffset] = -tangent.z;\n }\n }\n\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n bitangents[i] = bitangent.x;\n bitangents[i1] = bitangent.y;\n bitangents[i2] = bitangent.z;\n if (extrude) {\n bitangents[i + bottomOffset] = bitangent.x;\n bitangents[i1 + bottomOffset] = bitangent.y;\n bitangents[i2 + bottomOffset] = bitangent.z;\n }\n }\n }\n }\n }\n\n if (vertexFormat.st) {\n length = textureCoordinates.length;\n for (var k = 0; k < length; k += 2) {\n textureCoordinates[k] =\n (textureCoordinates[k] - minTexCoord.x) /\n (maxTexCoord.x - minTexCoord.x);\n textureCoordinates[k + 1] =\n (textureCoordinates[k + 1] - minTexCoord.y) /\n (maxTexCoord.y - minTexCoord.y);\n }\n }\n\n var attributes = new GeometryAttributes();\n\n if (vertexFormat.position) {\n var finalPositions = EllipseGeometryLibrary.raisePositionsToHeight(\n positions,\n options,\n extrude\n );\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: finalPositions,\n });\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (shadowVolume) {\n attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: extrudeNormals,\n });\n }\n\n if (extrude && defined(options.offsetAttribute)) {\n var offsetAttribute = new Uint8Array(size);\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else {\n var offsetValue =\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n });\n }\n\n return attributes;\n}\n\nfunction topIndices(numPts) {\n // numTriangles in half = 3 + 8 + 12 + ... = -1 + 4 + (4 + 4) + (4 + 4 + 4) + ... = -1 + 4 * (1 + 2 + 3 + ...)\n // = -1 + 4 * ((n * ( n + 1)) / 2)\n // total triangles = 2 * numTrangles in half\n // indices = total triangles * 3;\n // Substitute numPts for n above\n\n var indices = new Array(12 * (numPts * (numPts + 1)) - 6);\n var indicesIndex = 0;\n var prevIndex;\n var numInterior;\n var positionIndex;\n var i;\n var j;\n // Indices triangles to the 'right' of the north vector\n\n prevIndex = 0;\n positionIndex = 1;\n for (i = 0; i < 3; i++) {\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n\n for (i = 2; i < numPts + 1; ++i) {\n positionIndex = i * (i + 1) - 1;\n prevIndex = (i - 1) * i - 1;\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n\n numInterior = 2 * i;\n for (j = 0; j < numInterior - 1; ++j) {\n indices[indicesIndex++] = positionIndex;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n\n // Indices for center column of triangles\n numInterior = numPts * 2;\n ++positionIndex;\n ++prevIndex;\n for (i = 0; i < numInterior - 1; ++i) {\n indices[indicesIndex++] = positionIndex;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n\n indices[indicesIndex++] = positionIndex;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n\n // Reverse the process creating indices to the 'left' of the north vector\n ++prevIndex;\n for (i = numPts - 1; i > 1; --i) {\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n\n numInterior = 2 * i;\n for (j = 0; j < numInterior - 1; ++j) {\n indices[indicesIndex++] = positionIndex;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n\n indices[indicesIndex++] = positionIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = positionIndex++;\n }\n\n for (i = 0; i < 3; i++) {\n indices[indicesIndex++] = prevIndex++;\n indices[indicesIndex++] = prevIndex;\n indices[indicesIndex++] = positionIndex;\n }\n return indices;\n}\n\nvar boundingSphereCenter = new Cartesian3();\n\nfunction computeEllipse(options) {\n var center = options.center;\n boundingSphereCenter = Cartesian3.multiplyByScalar(\n options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\n options.height,\n boundingSphereCenter\n );\n boundingSphereCenter = Cartesian3.add(\n center,\n boundingSphereCenter,\n boundingSphereCenter\n );\n var boundingSphere = new BoundingSphere(\n boundingSphereCenter,\n options.semiMajorAxis\n );\n var cep = EllipseGeometryLibrary.computeEllipsePositions(\n options,\n true,\n false\n );\n var positions = cep.positions;\n var numPts = cep.numPts;\n var attributes = computeTopBottomAttributes(positions, options, false);\n var indices = topIndices(numPts);\n indices = IndexDatatype.createTypedArray(positions.length / 3, indices);\n return {\n boundingSphere: boundingSphere,\n attributes: attributes,\n indices: indices,\n };\n}\n\nfunction computeWallAttributes(positions, options) {\n var vertexFormat = options.vertexFormat;\n var center = options.center;\n var semiMajorAxis = options.semiMajorAxis;\n var semiMinorAxis = options.semiMinorAxis;\n var ellipsoid = options.ellipsoid;\n var height = options.height;\n var extrudedHeight = options.extrudedHeight;\n var stRotation = options.stRotation;\n var size = (positions.length / 3) * 2;\n\n var finalPositions = new Float64Array(size * 3);\n var textureCoordinates = vertexFormat.st\n ? new Float32Array(size * 2)\n : undefined;\n var normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(size * 3) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(size * 3)\n : undefined;\n\n var shadowVolume = options.shadowVolume;\n var extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\n\n var textureCoordIndex = 0;\n\n // Raise positions to a height above the ellipsoid and compute the\n // texture coordinates, normals, tangents, and bitangents.\n var normal = scratchNormal;\n var tangent = scratchTangent;\n var bitangent = scratchBitangent;\n\n var projection = new GeographicProjection(ellipsoid);\n var projectedCenter = projection.project(\n ellipsoid.cartesianToCartographic(center, scratchCartographic),\n projectedCenterScratch\n );\n\n var geodeticNormal = ellipsoid.scaleToGeodeticSurface(\n center,\n scratchCartesian1\n );\n ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\n var rotation = Quaternion.fromAxisAngle(\n geodeticNormal,\n stRotation,\n quaternionScratch\n );\n var textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrixScratch);\n\n var minTexCoord = Cartesian2.fromElements(\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n scratchMinTexCoord\n );\n var maxTexCoord = Cartesian2.fromElements(\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n scratchMaxTexCoord\n );\n\n var length = positions.length;\n var stOffset = (length / 3) * 2;\n for (var i = 0; i < length; i += 3) {\n var i1 = i + 1;\n var i2 = i + 2;\n var position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n var extrudedPosition;\n\n if (vertexFormat.st) {\n var rotatedPoint = Matrix3.multiplyByVector(\n textureMatrix,\n position,\n scratchCartesian2\n );\n var projectedPoint = projection.project(\n ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\n scratchCartesian3\n );\n Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\n\n texCoordScratch.x =\n (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\n texCoordScratch.y =\n (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\n\n minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\n minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\n maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\n maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\n\n textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\n textureCoordinates[textureCoordIndex + 1 + stOffset] = texCoordScratch.y;\n\n textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\n textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\n }\n\n position = ellipsoid.scaleToGeodeticSurface(position, position);\n extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n\n if (shadowVolume) {\n extrudeNormals[i + length] = -normal.x;\n extrudeNormals[i1 + length] = -normal.y;\n extrudeNormals[i2 + length] = -normal.z;\n }\n\n var scaledNormal = Cartesian3.multiplyByScalar(\n normal,\n height,\n scratchCartesian4\n );\n position = Cartesian3.add(position, scaledNormal, position);\n scaledNormal = Cartesian3.multiplyByScalar(\n normal,\n extrudedHeight,\n scaledNormal\n );\n extrudedPosition = Cartesian3.add(\n extrudedPosition,\n scaledNormal,\n extrudedPosition\n );\n\n if (vertexFormat.position) {\n finalPositions[i + length] = extrudedPosition.x;\n finalPositions[i1 + length] = extrudedPosition.y;\n finalPositions[i2 + length] = extrudedPosition.z;\n\n finalPositions[i] = position.x;\n finalPositions[i1] = position.y;\n finalPositions[i2] = position.z;\n }\n\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n bitangent = Cartesian3.clone(normal, bitangent);\n var next = Cartesian3.fromArray(\n positions,\n (i + 3) % length,\n scratchCartesian4\n );\n Cartesian3.subtract(next, position, next);\n var bottom = Cartesian3.subtract(\n extrudedPosition,\n position,\n scratchCartesian3\n );\n\n normal = Cartesian3.normalize(\n Cartesian3.cross(bottom, next, normal),\n normal\n );\n\n if (vertexFormat.normal) {\n normals[i] = normal.x;\n normals[i1] = normal.y;\n normals[i2] = normal.z;\n\n normals[i + length] = normal.x;\n normals[i1 + length] = normal.y;\n normals[i2 + length] = normal.z;\n }\n\n if (vertexFormat.tangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(bitangent, normal, tangent),\n tangent\n );\n tangents[i] = tangent.x;\n tangents[i1] = tangent.y;\n tangents[i2] = tangent.z;\n\n tangents[i + length] = tangent.x;\n tangents[i + 1 + length] = tangent.y;\n tangents[i + 2 + length] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n bitangents[i] = bitangent.x;\n bitangents[i1] = bitangent.y;\n bitangents[i2] = bitangent.z;\n\n bitangents[i + length] = bitangent.x;\n bitangents[i1 + length] = bitangent.y;\n bitangents[i2 + length] = bitangent.z;\n }\n }\n }\n\n if (vertexFormat.st) {\n length = textureCoordinates.length;\n for (var k = 0; k < length; k += 2) {\n textureCoordinates[k] =\n (textureCoordinates[k] - minTexCoord.x) /\n (maxTexCoord.x - minTexCoord.x);\n textureCoordinates[k + 1] =\n (textureCoordinates[k + 1] - minTexCoord.y) /\n (maxTexCoord.y - minTexCoord.y);\n }\n }\n\n var attributes = new GeometryAttributes();\n\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: finalPositions,\n });\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (shadowVolume) {\n attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: extrudeNormals,\n });\n }\n\n if (defined(options.offsetAttribute)) {\n var offsetAttribute = new Uint8Array(size);\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else {\n var offsetValue =\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n });\n }\n\n return attributes;\n}\n\nfunction computeWallIndices(positions) {\n var length = positions.length / 3;\n var indices = IndexDatatype.createTypedArray(length, length * 6);\n var index = 0;\n for (var i = 0; i < length; i++) {\n var UL = i;\n var LL = i + length;\n var UR = (UL + 1) % length;\n var LR = UR + length;\n indices[index++] = UL;\n indices[index++] = LL;\n indices[index++] = UR;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n }\n\n return indices;\n}\n\nvar topBoundingSphere = new BoundingSphere();\nvar bottomBoundingSphere = new BoundingSphere();\n\nfunction computeExtrudedEllipse(options) {\n var center = options.center;\n var ellipsoid = options.ellipsoid;\n var semiMajorAxis = options.semiMajorAxis;\n var scaledNormal = Cartesian3.multiplyByScalar(\n ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\n options.height,\n scratchCartesian1\n );\n topBoundingSphere.center = Cartesian3.add(\n center,\n scaledNormal,\n topBoundingSphere.center\n );\n topBoundingSphere.radius = semiMajorAxis;\n\n scaledNormal = Cartesian3.multiplyByScalar(\n ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\n options.extrudedHeight,\n scaledNormal\n );\n bottomBoundingSphere.center = Cartesian3.add(\n center,\n scaledNormal,\n bottomBoundingSphere.center\n );\n bottomBoundingSphere.radius = semiMajorAxis;\n\n var cep = EllipseGeometryLibrary.computeEllipsePositions(options, true, true);\n var positions = cep.positions;\n var numPts = cep.numPts;\n var outerPositions = cep.outerPositions;\n var boundingSphere = BoundingSphere.union(\n topBoundingSphere,\n bottomBoundingSphere\n );\n var topBottomAttributes = computeTopBottomAttributes(\n positions,\n options,\n true\n );\n var indices = topIndices(numPts);\n var length = indices.length;\n indices.length = length * 2;\n var posLength = positions.length / 3;\n for (var i = 0; i < length; i += 3) {\n indices[i + length] = indices[i + 2] + posLength;\n indices[i + 1 + length] = indices[i + 1] + posLength;\n indices[i + 2 + length] = indices[i] + posLength;\n }\n\n var topBottomIndices = IndexDatatype.createTypedArray(\n (posLength * 2) / 3,\n indices\n );\n\n var topBottomGeo = new Geometry({\n attributes: topBottomAttributes,\n indices: topBottomIndices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n var wallAttributes = computeWallAttributes(outerPositions, options);\n indices = computeWallIndices(outerPositions);\n var wallIndices = IndexDatatype.createTypedArray(\n (outerPositions.length * 2) / 3,\n indices\n );\n\n var wallGeo = new Geometry({\n attributes: wallAttributes,\n indices: wallIndices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n var geo = GeometryPipeline.combineInstances([\n new GeometryInstance({\n geometry: topBottomGeo,\n }),\n new GeometryInstance({\n geometry: wallGeo,\n }),\n ]);\n\n return {\n boundingSphere: boundingSphere,\n attributes: geo[0].attributes,\n indices: geo[0].indices,\n };\n}\n\nfunction computeRectangle(\n center,\n semiMajorAxis,\n semiMinorAxis,\n rotation,\n granularity,\n ellipsoid,\n result\n) {\n var cep = EllipseGeometryLibrary.computeEllipsePositions(\n {\n center: center,\n semiMajorAxis: semiMajorAxis,\n semiMinorAxis: semiMinorAxis,\n rotation: rotation,\n granularity: granularity,\n },\n false,\n true\n );\n var positionsFlat = cep.outerPositions;\n var positionsCount = positionsFlat.length / 3;\n var positions = new Array(positionsCount);\n for (var i = 0; i < positionsCount; ++i) {\n positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\n }\n var rectangle = Rectangle.fromCartesianArray(positions, ellipsoid, result);\n // Rectangle width goes beyond 180 degrees when the ellipse crosses a pole.\n // When this happens, make the rectangle into a \"circle\" around the pole\n if (rectangle.width > CesiumMath.PI) {\n rectangle.north =\n rectangle.north > 0.0\n ? CesiumMath.PI_OVER_TWO - CesiumMath.EPSILON7\n : rectangle.north;\n rectangle.south =\n rectangle.south < 0.0\n ? CesiumMath.EPSILON7 - CesiumMath.PI_OVER_TWO\n : rectangle.south;\n rectangle.east = CesiumMath.PI;\n rectangle.west = -CesiumMath.PI;\n }\n return rectangle;\n}\n\n/**\n * A description of an ellipse on an ellipsoid. Ellipse geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias EllipseGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\n * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\n * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates counter-clockwise from north.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n *\n * @example\n * // Create an ellipse.\n * var ellipse = new Cesium.EllipseGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n * semiMajorAxis : 500000.0,\n * semiMinorAxis : 300000.0,\n * rotation : Cesium.Math.toRadians(60.0)\n * });\n * var geometry = Cesium.EllipseGeometry.createGeometry(ellipse);\n *\n * @see EllipseGeometry.createGeometry\n */\nfunction EllipseGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var center = options.center;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var semiMajorAxis = options.semiMajorAxis;\n var semiMinorAxis = options.semiMinorAxis;\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.center\", center);\n Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\n Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\n if (semiMajorAxis < semiMinorAxis) {\n throw new DeveloperError(\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\n );\n }\n if (granularity <= 0.0) {\n throw new DeveloperError(\"granularity must be greater than zero.\");\n }\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._center = Cartesian3.clone(center);\n this._semiMajorAxis = semiMajorAxis;\n this._semiMinorAxis = semiMinorAxis;\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._rotation = defaultValue(options.rotation, 0.0);\n this._stRotation = defaultValue(options.stRotation, 0.0);\n this._height = Math.max(extrudedHeight, height);\n this._granularity = granularity;\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._extrudedHeight = Math.min(extrudedHeight, height);\n this._shadowVolume = defaultValue(options.shadowVolume, false);\n this._workerName = \"createEllipseGeometry\";\n this._offsetAttribute = options.offsetAttribute;\n\n this._rectangle = undefined;\n this._textureCoordinateRotationPoints = undefined;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nEllipseGeometry.packedLength =\n Cartesian3.packedLength +\n Ellipsoid.packedLength +\n VertexFormat.packedLength +\n 9;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipseGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nEllipseGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._center, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._semiMajorAxis;\n array[startingIndex++] = value._semiMinorAxis;\n array[startingIndex++] = value._rotation;\n array[startingIndex++] = value._stRotation;\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchCenter = new Cartesian3();\nvar scratchEllipsoid = new Ellipsoid();\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n center: scratchCenter,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n semiMajorAxis: undefined,\n semiMinorAxis: undefined,\n rotation: undefined,\n stRotation: undefined,\n height: undefined,\n granularity: undefined,\n extrudedHeight: undefined,\n shadowVolume: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipseGeometry} [result] The object into which to store the result.\n * @returns {EllipseGeometry} The modified result parameter or a new EllipseGeometry instance if one was not provided.\n */\nEllipseGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var center = Cartesian3.unpack(array, startingIndex, scratchCenter);\n startingIndex += Cartesian3.packedLength;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var semiMajorAxis = array[startingIndex++];\n var semiMinorAxis = array[startingIndex++];\n var rotation = array[startingIndex++];\n var stRotation = array[startingIndex++];\n var height = array[startingIndex++];\n var granularity = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var shadowVolume = array[startingIndex++] === 1.0;\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.height = height;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.granularity = granularity;\n scratchOptions.stRotation = stRotation;\n scratchOptions.rotation = rotation;\n scratchOptions.semiMajorAxis = semiMajorAxis;\n scratchOptions.semiMinorAxis = semiMinorAxis;\n scratchOptions.shadowVolume = shadowVolume;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return new EllipseGeometry(scratchOptions);\n }\n\n result._center = Cartesian3.clone(center, result._center);\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._semiMajorAxis = semiMajorAxis;\n result._semiMinorAxis = semiMinorAxis;\n result._rotation = rotation;\n result._stRotation = stRotation;\n result._height = height;\n result._granularity = granularity;\n result._extrudedHeight = extrudedHeight;\n result._shadowVolume = shadowVolume;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the bounding rectangle based on the provided options\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\n * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\n * @param {Rectangle} [result] An object in which to store the result\n *\n * @returns {Rectangle} The result rectangle\n */\nEllipseGeometry.computeRectangle = function (options, result) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var center = options.center;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var semiMajorAxis = options.semiMajorAxis;\n var semiMinorAxis = options.semiMinorAxis;\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var rotation = defaultValue(options.rotation, 0.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.center\", center);\n Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\n Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\n if (semiMajorAxis < semiMinorAxis) {\n throw new DeveloperError(\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\n );\n }\n if (granularity <= 0.0) {\n throw new DeveloperError(\"granularity must be greater than zero.\");\n }\n //>>includeEnd('debug');\n\n return computeRectangle(\n center,\n semiMajorAxis,\n semiMinorAxis,\n rotation,\n granularity,\n ellipsoid,\n result\n );\n};\n\n/**\n * Computes the geometric representation of a ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipseGeometry} ellipseGeometry A description of the ellipse.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipseGeometry.createGeometry = function (ellipseGeometry) {\n if (\n ellipseGeometry._semiMajorAxis <= 0.0 ||\n ellipseGeometry._semiMinorAxis <= 0.0\n ) {\n return;\n }\n\n var height = ellipseGeometry._height;\n var extrudedHeight = ellipseGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n height,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n\n ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\n ellipseGeometry._center,\n ellipseGeometry._center\n );\n var options = {\n center: ellipseGeometry._center,\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\n ellipsoid: ellipseGeometry._ellipsoid,\n rotation: ellipseGeometry._rotation,\n height: height,\n granularity: ellipseGeometry._granularity,\n vertexFormat: ellipseGeometry._vertexFormat,\n stRotation: ellipseGeometry._stRotation,\n };\n var geometry;\n if (extrude) {\n options.extrudedHeight = extrudedHeight;\n options.shadowVolume = ellipseGeometry._shadowVolume;\n options.offsetAttribute = ellipseGeometry._offsetAttribute;\n geometry = computeExtrudedEllipse(options);\n } else {\n geometry = computeEllipse(options);\n\n if (defined(ellipseGeometry._offsetAttribute)) {\n var length = geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n }\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: geometry.boundingSphere,\n offsetAttribute: ellipseGeometry._offsetAttribute,\n });\n};\n\n/**\n * @private\n */\nEllipseGeometry.createShadowVolume = function (\n ellipseGeometry,\n minHeightFunc,\n maxHeightFunc\n) {\n var granularity = ellipseGeometry._granularity;\n var ellipsoid = ellipseGeometry._ellipsoid;\n\n var minHeight = minHeightFunc(granularity, ellipsoid);\n var maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n return new EllipseGeometry({\n center: ellipseGeometry._center,\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\n ellipsoid: ellipsoid,\n rotation: ellipseGeometry._rotation,\n stRotation: ellipseGeometry._stRotation,\n granularity: granularity,\n extrudedHeight: minHeight,\n height: maxHeight,\n vertexFormat: VertexFormat.POSITION_ONLY,\n shadowVolume: true,\n });\n};\n\nfunction textureCoordinateRotationPoints(ellipseGeometry) {\n var stRotation = -ellipseGeometry._stRotation;\n if (stRotation === 0.0) {\n return [0, 0, 0, 1, 1, 0];\n }\n\n var cep = EllipseGeometryLibrary.computeEllipsePositions(\n {\n center: ellipseGeometry._center,\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\n rotation: ellipseGeometry._rotation,\n granularity: ellipseGeometry._granularity,\n },\n false,\n true\n );\n var positionsFlat = cep.outerPositions;\n var positionsCount = positionsFlat.length / 3;\n var positions = new Array(positionsCount);\n for (var i = 0; i < positionsCount; ++i) {\n positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\n }\n\n var ellipsoid = ellipseGeometry._ellipsoid;\n var boundingRectangle = ellipseGeometry.rectangle;\n return Geometry._textureCoordinateRotationPoints(\n positions,\n stRotation,\n ellipsoid,\n boundingRectangle\n );\n}\n\nObject.defineProperties(EllipseGeometry.prototype, {\n /**\n * @private\n */\n rectangle: {\n get: function () {\n if (!defined(this._rectangle)) {\n this._rectangle = computeRectangle(\n this._center,\n this._semiMajorAxis,\n this._semiMinorAxis,\n this._rotation,\n this._granularity,\n this._ellipsoid\n );\n }\n return this._rectangle;\n },\n },\n /**\n * For remapping texture coordinates when rendering EllipseGeometries as GroundPrimitives.\n * @private\n */\n textureCoordinateRotationPoints: {\n get: function () {\n if (!defined(this._textureCoordinateRotationPoints)) {\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\n this\n );\n }\n return this._textureCoordinateRotationPoints;\n },\n },\n});\nexport default EllipseGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport EllipseGeometry from \"./EllipseGeometry.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * A description of a circle on the ellipsoid. Circle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias CircleGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\n * @param {Number} options.radius The radius in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on.\n * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\n * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n *\n * @exception {DeveloperError} radius must be greater than zero.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see CircleGeometry.createGeometry\n * @see Packable\n *\n * @example\n * // Create a circle.\n * var circle = new Cesium.CircleGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n * radius : 100000.0\n * });\n * var geometry = Cesium.CircleGeometry.createGeometry(circle);\n */\nfunction CircleGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var radius = options.radius;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"radius\", radius);\n //>>includeEnd('debug');\n\n var ellipseGeometryOptions = {\n center: options.center,\n semiMajorAxis: radius,\n semiMinorAxis: radius,\n ellipsoid: options.ellipsoid,\n height: options.height,\n extrudedHeight: options.extrudedHeight,\n granularity: options.granularity,\n vertexFormat: options.vertexFormat,\n stRotation: options.stRotation,\n shadowVolume: options.shadowVolume,\n };\n this._ellipseGeometry = new EllipseGeometry(ellipseGeometryOptions);\n this._workerName = \"createCircleGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCircleGeometry.packedLength = EllipseGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CircleGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCircleGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n //>>includeEnd('debug');\n return EllipseGeometry.pack(value._ellipseGeometry, array, startingIndex);\n};\n\nvar scratchEllipseGeometry = new EllipseGeometry({\n center: new Cartesian3(),\n semiMajorAxis: 1.0,\n semiMinorAxis: 1.0,\n});\nvar scratchOptions = {\n center: new Cartesian3(),\n radius: undefined,\n ellipsoid: Ellipsoid.clone(Ellipsoid.UNIT_SPHERE),\n height: undefined,\n extrudedHeight: undefined,\n granularity: undefined,\n vertexFormat: new VertexFormat(),\n stRotation: undefined,\n semiMajorAxis: undefined,\n semiMinorAxis: undefined,\n shadowVolume: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CircleGeometry} [result] The object into which to store the result.\n * @returns {CircleGeometry} The modified result parameter or a new CircleGeometry instance if one was not provided.\n */\nCircleGeometry.unpack = function (array, startingIndex, result) {\n var ellipseGeometry = EllipseGeometry.unpack(\n array,\n startingIndex,\n scratchEllipseGeometry\n );\n scratchOptions.center = Cartesian3.clone(\n ellipseGeometry._center,\n scratchOptions.center\n );\n scratchOptions.ellipsoid = Ellipsoid.clone(\n ellipseGeometry._ellipsoid,\n scratchOptions.ellipsoid\n );\n scratchOptions.height = ellipseGeometry._height;\n scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\n scratchOptions.granularity = ellipseGeometry._granularity;\n scratchOptions.vertexFormat = VertexFormat.clone(\n ellipseGeometry._vertexFormat,\n scratchOptions.vertexFormat\n );\n scratchOptions.stRotation = ellipseGeometry._stRotation;\n scratchOptions.shadowVolume = ellipseGeometry._shadowVolume;\n\n if (!defined(result)) {\n scratchOptions.radius = ellipseGeometry._semiMajorAxis;\n return new CircleGeometry(scratchOptions);\n }\n\n scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\n scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\n result._ellipseGeometry = new EllipseGeometry(scratchOptions);\n return result;\n};\n\n/**\n * Computes the geometric representation of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {CircleGeometry} circleGeometry A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCircleGeometry.createGeometry = function (circleGeometry) {\n return EllipseGeometry.createGeometry(circleGeometry._ellipseGeometry);\n};\n\n/**\n * @private\n */\nCircleGeometry.createShadowVolume = function (\n circleGeometry,\n minHeightFunc,\n maxHeightFunc\n) {\n var granularity = circleGeometry._ellipseGeometry._granularity;\n var ellipsoid = circleGeometry._ellipseGeometry._ellipsoid;\n\n var minHeight = minHeightFunc(granularity, ellipsoid);\n var maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n return new CircleGeometry({\n center: circleGeometry._ellipseGeometry._center,\n radius: circleGeometry._ellipseGeometry._semiMajorAxis,\n ellipsoid: ellipsoid,\n stRotation: circleGeometry._ellipseGeometry._stRotation,\n granularity: granularity,\n extrudedHeight: minHeight,\n height: maxHeight,\n vertexFormat: VertexFormat.POSITION_ONLY,\n shadowVolume: true,\n });\n};\n\nObject.defineProperties(CircleGeometry.prototype, {\n /**\n * @private\n */\n rectangle: {\n get: function () {\n return this._ellipseGeometry.rectangle;\n },\n },\n /**\n * For remapping texture coordinates when rendering CircleGeometries as GroundPrimitives.\n * @private\n */\n textureCoordinateRotationPoints: {\n get: function () {\n return this._ellipseGeometry.textureCoordinateRotationPoints;\n },\n },\n});\nexport default CircleGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nvar scratchCartesian1 = new Cartesian3();\nvar boundingSphereCenter = new Cartesian3();\n\nfunction computeEllipse(options) {\n var center = options.center;\n boundingSphereCenter = Cartesian3.multiplyByScalar(\n options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\n options.height,\n boundingSphereCenter\n );\n boundingSphereCenter = Cartesian3.add(\n center,\n boundingSphereCenter,\n boundingSphereCenter\n );\n var boundingSphere = new BoundingSphere(\n boundingSphereCenter,\n options.semiMajorAxis\n );\n var positions = EllipseGeometryLibrary.computeEllipsePositions(\n options,\n false,\n true\n ).outerPositions;\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: EllipseGeometryLibrary.raisePositionsToHeight(\n positions,\n options,\n false\n ),\n }),\n });\n\n var length = positions.length / 3;\n var indices = IndexDatatype.createTypedArray(length, length * 2);\n var index = 0;\n for (var i = 0; i < length; ++i) {\n indices[index++] = i;\n indices[index++] = (i + 1) % length;\n }\n\n return {\n boundingSphere: boundingSphere,\n attributes: attributes,\n indices: indices,\n };\n}\n\nvar topBoundingSphere = new BoundingSphere();\nvar bottomBoundingSphere = new BoundingSphere();\nfunction computeExtrudedEllipse(options) {\n var center = options.center;\n var ellipsoid = options.ellipsoid;\n var semiMajorAxis = options.semiMajorAxis;\n var scaledNormal = Cartesian3.multiplyByScalar(\n ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\n options.height,\n scratchCartesian1\n );\n topBoundingSphere.center = Cartesian3.add(\n center,\n scaledNormal,\n topBoundingSphere.center\n );\n topBoundingSphere.radius = semiMajorAxis;\n\n scaledNormal = Cartesian3.multiplyByScalar(\n ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\n options.extrudedHeight,\n scaledNormal\n );\n bottomBoundingSphere.center = Cartesian3.add(\n center,\n scaledNormal,\n bottomBoundingSphere.center\n );\n bottomBoundingSphere.radius = semiMajorAxis;\n\n var positions = EllipseGeometryLibrary.computeEllipsePositions(\n options,\n false,\n true\n ).outerPositions;\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: EllipseGeometryLibrary.raisePositionsToHeight(\n positions,\n options,\n true\n ),\n }),\n });\n\n positions = attributes.position.values;\n var boundingSphere = BoundingSphere.union(\n topBoundingSphere,\n bottomBoundingSphere\n );\n var length = positions.length / 3;\n\n if (defined(options.offsetAttribute)) {\n var applyOffset = new Uint8Array(length);\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n applyOffset = arrayFill(applyOffset, 1, 0, length / 2);\n } else {\n var offsetValue =\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n applyOffset = arrayFill(applyOffset, offsetValue);\n }\n\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n var numberOfVerticalLines = defaultValue(options.numberOfVerticalLines, 16);\n numberOfVerticalLines = CesiumMath.clamp(\n numberOfVerticalLines,\n 0,\n length / 2\n );\n\n var indices = IndexDatatype.createTypedArray(\n length,\n length * 2 + numberOfVerticalLines * 2\n );\n\n length /= 2;\n var index = 0;\n var i;\n for (i = 0; i < length; ++i) {\n indices[index++] = i;\n indices[index++] = (i + 1) % length;\n indices[index++] = i + length;\n indices[index++] = ((i + 1) % length) + length;\n }\n\n var numSide;\n if (numberOfVerticalLines > 0) {\n var numSideLines = Math.min(numberOfVerticalLines, length);\n numSide = Math.round(length / numSideLines);\n\n var maxI = Math.min(numSide * numberOfVerticalLines, length);\n for (i = 0; i < maxI; i += numSide) {\n indices[index++] = i;\n indices[index++] = i + length;\n }\n }\n\n return {\n boundingSphere: boundingSphere,\n attributes: attributes,\n indices: indices,\n };\n}\n\n/**\n * A description of the outline of an ellipse on an ellipsoid.\n *\n * @alias EllipseOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\n * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\n * @param {Number} [options.rotation=0.0] The angle from north (counter-clockwise) in radians.\n * @param {Number} [options.granularity=0.02] The angular distance between points on the ellipse in radians.\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surface of an extruded ellipse.\n *\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see EllipseOutlineGeometry.createGeometry\n *\n * @example\n * var ellipse = new Cesium.EllipseOutlineGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n * semiMajorAxis : 500000.0,\n * semiMinorAxis : 300000.0,\n * rotation : Cesium.Math.toRadians(60.0)\n * });\n * var geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse);\n */\nfunction EllipseOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var center = options.center;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var semiMajorAxis = options.semiMajorAxis;\n var semiMinorAxis = options.semiMinorAxis;\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(center)) {\n throw new DeveloperError(\"center is required.\");\n }\n if (!defined(semiMajorAxis)) {\n throw new DeveloperError(\"semiMajorAxis is required.\");\n }\n if (!defined(semiMinorAxis)) {\n throw new DeveloperError(\"semiMinorAxis is required.\");\n }\n if (semiMajorAxis < semiMinorAxis) {\n throw new DeveloperError(\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\n );\n }\n if (granularity <= 0.0) {\n throw new DeveloperError(\"granularity must be greater than zero.\");\n }\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._center = Cartesian3.clone(center);\n this._semiMajorAxis = semiMajorAxis;\n this._semiMinorAxis = semiMinorAxis;\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._rotation = defaultValue(options.rotation, 0.0);\n this._height = Math.max(extrudedHeight, height);\n this._granularity = granularity;\n this._extrudedHeight = Math.min(extrudedHeight, height);\n this._numberOfVerticalLines = Math.max(\n defaultValue(options.numberOfVerticalLines, 16),\n 0\n );\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createEllipseOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nEllipseOutlineGeometry.packedLength =\n Cartesian3.packedLength + Ellipsoid.packedLength + 8;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipseOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nEllipseOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._center, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._semiMajorAxis;\n array[startingIndex++] = value._semiMinorAxis;\n array[startingIndex++] = value._rotation;\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._numberOfVerticalLines;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchCenter = new Cartesian3();\nvar scratchEllipsoid = new Ellipsoid();\nvar scratchOptions = {\n center: scratchCenter,\n ellipsoid: scratchEllipsoid,\n semiMajorAxis: undefined,\n semiMinorAxis: undefined,\n rotation: undefined,\n height: undefined,\n granularity: undefined,\n extrudedHeight: undefined,\n numberOfVerticalLines: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipseOutlineGeometry} [result] The object into which to store the result.\n * @returns {EllipseOutlineGeometry} The modified result parameter or a new EllipseOutlineGeometry instance if one was not provided.\n */\nEllipseOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var center = Cartesian3.unpack(array, startingIndex, scratchCenter);\n startingIndex += Cartesian3.packedLength;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var semiMajorAxis = array[startingIndex++];\n var semiMinorAxis = array[startingIndex++];\n var rotation = array[startingIndex++];\n var height = array[startingIndex++];\n var granularity = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var numberOfVerticalLines = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.height = height;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.granularity = granularity;\n scratchOptions.rotation = rotation;\n scratchOptions.semiMajorAxis = semiMajorAxis;\n scratchOptions.semiMinorAxis = semiMinorAxis;\n scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return new EllipseOutlineGeometry(scratchOptions);\n }\n\n result._center = Cartesian3.clone(center, result._center);\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._semiMajorAxis = semiMajorAxis;\n result._semiMinorAxis = semiMinorAxis;\n result._rotation = rotation;\n result._height = height;\n result._granularity = granularity;\n result._extrudedHeight = extrudedHeight;\n result._numberOfVerticalLines = numberOfVerticalLines;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of an ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipseOutlineGeometry} ellipseGeometry A description of the ellipse.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipseOutlineGeometry.createGeometry = function (ellipseGeometry) {\n if (\n ellipseGeometry._semiMajorAxis <= 0.0 ||\n ellipseGeometry._semiMinorAxis <= 0.0\n ) {\n return;\n }\n\n var height = ellipseGeometry._height;\n var extrudedHeight = ellipseGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n height,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n\n ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\n ellipseGeometry._center,\n ellipseGeometry._center\n );\n var options = {\n center: ellipseGeometry._center,\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\n ellipsoid: ellipseGeometry._ellipsoid,\n rotation: ellipseGeometry._rotation,\n height: height,\n granularity: ellipseGeometry._granularity,\n numberOfVerticalLines: ellipseGeometry._numberOfVerticalLines,\n };\n var geometry;\n if (extrude) {\n options.extrudedHeight = extrudedHeight;\n options.offsetAttribute = ellipseGeometry._offsetAttribute;\n geometry = computeExtrudedEllipse(options);\n } else {\n geometry = computeEllipse(options);\n\n if (defined(ellipseGeometry._offsetAttribute)) {\n var length = geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n }\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: geometry.boundingSphere,\n offsetAttribute: ellipseGeometry._offsetAttribute,\n });\n};\nexport default EllipseOutlineGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport EllipseOutlineGeometry from \"./EllipseOutlineGeometry.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\n\n/**\n * A description of the outline of a circle on the ellipsoid.\n *\n * @alias CircleOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\n * @param {Number} options.radius The radius in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on.\n * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\n * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians.\n * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom of an extruded circle.\n *\n * @exception {DeveloperError} radius must be greater than zero.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see CircleOutlineGeometry.createGeometry\n * @see Packable\n *\n * @example\n * // Create a circle.\n * var circle = new Cesium.CircleOutlineGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n * radius : 100000.0\n * });\n * var geometry = Cesium.CircleOutlineGeometry.createGeometry(circle);\n */\nfunction CircleOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var radius = options.radius;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"radius\", radius);\n //>>includeEnd('debug');\n\n var ellipseGeometryOptions = {\n center: options.center,\n semiMajorAxis: radius,\n semiMinorAxis: radius,\n ellipsoid: options.ellipsoid,\n height: options.height,\n extrudedHeight: options.extrudedHeight,\n granularity: options.granularity,\n numberOfVerticalLines: options.numberOfVerticalLines,\n };\n this._ellipseGeometry = new EllipseOutlineGeometry(ellipseGeometryOptions);\n this._workerName = \"createCircleOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCircleOutlineGeometry.packedLength = EllipseOutlineGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CircleOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCircleOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n //>>includeEnd('debug');\n return EllipseOutlineGeometry.pack(\n value._ellipseGeometry,\n array,\n startingIndex\n );\n};\n\nvar scratchEllipseGeometry = new EllipseOutlineGeometry({\n center: new Cartesian3(),\n semiMajorAxis: 1.0,\n semiMinorAxis: 1.0,\n});\nvar scratchOptions = {\n center: new Cartesian3(),\n radius: undefined,\n ellipsoid: Ellipsoid.clone(Ellipsoid.UNIT_SPHERE),\n height: undefined,\n extrudedHeight: undefined,\n granularity: undefined,\n numberOfVerticalLines: undefined,\n semiMajorAxis: undefined,\n semiMinorAxis: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CircleOutlineGeometry} [result] The object into which to store the result.\n * @returns {CircleOutlineGeometry} The modified result parameter or a new CircleOutlineGeometry instance if one was not provided.\n */\nCircleOutlineGeometry.unpack = function (array, startingIndex, result) {\n var ellipseGeometry = EllipseOutlineGeometry.unpack(\n array,\n startingIndex,\n scratchEllipseGeometry\n );\n scratchOptions.center = Cartesian3.clone(\n ellipseGeometry._center,\n scratchOptions.center\n );\n scratchOptions.ellipsoid = Ellipsoid.clone(\n ellipseGeometry._ellipsoid,\n scratchOptions.ellipsoid\n );\n scratchOptions.height = ellipseGeometry._height;\n scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\n scratchOptions.granularity = ellipseGeometry._granularity;\n scratchOptions.numberOfVerticalLines = ellipseGeometry._numberOfVerticalLines;\n\n if (!defined(result)) {\n scratchOptions.radius = ellipseGeometry._semiMajorAxis;\n return new CircleOutlineGeometry(scratchOptions);\n }\n\n scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\n scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\n result._ellipseGeometry = new EllipseOutlineGeometry(scratchOptions);\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {CircleOutlineGeometry} circleGeometry A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCircleOutlineGeometry.createGeometry = function (circleGeometry) {\n return EllipseOutlineGeometry.createGeometry(circleGeometry._ellipseGeometry);\n};\nexport default CircleOutlineGeometry;\n","/**\n * Constants used by {@link Clock#tick} to determine behavior\n * when {@link Clock#startTime} or {@link Clock#stopTime} is reached.\n *\n * @enum {Number}\n *\n * @see Clock\n * @see ClockStep\n */\nvar ClockRange = {\n /**\n * {@link Clock#tick} will always advances the clock in its current direction.\n *\n * @type {Number}\n * @constant\n */\n UNBOUNDED: 0,\n\n /**\n * When {@link Clock#startTime} or {@link Clock#stopTime} is reached,\n * {@link Clock#tick} will not advance {@link Clock#currentTime} any further.\n *\n * @type {Number}\n * @constant\n */\n CLAMPED: 1,\n\n /**\n * When {@link Clock#stopTime} is reached, {@link Clock#tick} will advance\n * {@link Clock#currentTime} to the opposite end of the interval. When\n * time is moving backwards, {@link Clock#tick} will not advance past\n * {@link Clock#startTime}\n *\n * @type {Number}\n * @constant\n */\n LOOP_STOP: 2,\n};\nexport default Object.freeze(ClockRange);\n","/**\n * Constants to determine how much time advances with each call\n * to {@link Clock#tick}.\n *\n * @enum {Number}\n *\n * @see Clock\n * @see ClockRange\n */\nvar ClockStep = {\n /**\n * {@link Clock#tick} advances the current time by a fixed step,\n * which is the number of seconds specified by {@link Clock#multiplier}.\n *\n * @type {Number}\n * @constant\n */\n TICK_DEPENDENT: 0,\n\n /**\n * {@link Clock#tick} advances the current time by the amount of system\n * time elapsed since the previous call multiplied by {@link Clock#multiplier}.\n *\n * @type {Number}\n * @constant\n */\n SYSTEM_CLOCK_MULTIPLIER: 1,\n\n /**\n * {@link Clock#tick} sets the clock to the current system time;\n * ignoring all other settings.\n *\n * @type {Number}\n * @constant\n */\n SYSTEM_CLOCK: 2,\n};\nexport default Object.freeze(ClockStep);\n","/**\n * Gets a timestamp that can be used in measuring the time between events. Timestamps\n * are expressed in milliseconds, but it is not specified what the milliseconds are\n * measured from. This function uses performance.now() if it is available, or Date.now()\n * otherwise.\n *\n * @function getTimestamp\n *\n * @returns {Number} The timestamp in milliseconds since some unspecified reference time.\n */\nvar getTimestamp;\n\nif (\n typeof performance !== \"undefined\" &&\n typeof performance.now === \"function\" &&\n isFinite(performance.now())\n) {\n getTimestamp = function () {\n return performance.now();\n };\n} else {\n getTimestamp = function () {\n return Date.now();\n };\n}\nexport default getTimestamp;\n","import ClockRange from \"./ClockRange.js\";\nimport ClockStep from \"./ClockStep.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport getTimestamp from \"./getTimestamp.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * A simple clock for keeping track of simulated time.\n *\n * @alias Clock\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {JulianDate} [options.startTime] The start time of the clock.\n * @param {JulianDate} [options.stopTime] The stop time of the clock.\n * @param {JulianDate} [options.currentTime] The current time.\n * @param {Number} [options.multiplier=1.0] Determines how much time advances when {@link Clock#tick} is called, negative values allow for advancing backwards.\n * @param {ClockStep} [options.clockStep=ClockStep.SYSTEM_CLOCK_MULTIPLIER] Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent.\n * @param {ClockRange} [options.clockRange=ClockRange.UNBOUNDED] Determines how the clock should behave when {@link Clock#startTime} or {@link Clock#stopTime} is reached.\n * @param {Boolean} [options.canAnimate=true] Indicates whether {@link Clock#tick} can advance time. This could be false if data is being buffered, for example. The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n * @param {Boolean} [options.shouldAnimate=false] Indicates whether {@link Clock#tick} should attempt to advance time. The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n *\n * @exception {DeveloperError} startTime must come before stopTime.\n *\n *\n * @example\n * // Create a clock that loops on Christmas day 2013 and runs in real-time.\n * var clock = new Cesium.Clock({\n * startTime : Cesium.JulianDate.fromIso8601(\"2013-12-25\"),\n * currentTime : Cesium.JulianDate.fromIso8601(\"2013-12-25\"),\n * stopTime : Cesium.JulianDate.fromIso8601(\"2013-12-26\"),\n * clockRange : Cesium.ClockRange.LOOP_STOP,\n * clockStep : Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER\n * });\n *\n * @see ClockStep\n * @see ClockRange\n * @see JulianDate\n */\nfunction Clock(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var currentTime = options.currentTime;\n var startTime = options.startTime;\n var stopTime = options.stopTime;\n\n if (!defined(currentTime)) {\n // if not specified, current time is the start time,\n // or if that is not specified, 1 day before the stop time,\n // or if that is not specified, then now.\n if (defined(startTime)) {\n currentTime = JulianDate.clone(startTime);\n } else if (defined(stopTime)) {\n currentTime = JulianDate.addDays(stopTime, -1.0, new JulianDate());\n } else {\n currentTime = JulianDate.now();\n }\n } else {\n currentTime = JulianDate.clone(currentTime);\n }\n\n if (!defined(startTime)) {\n // if not specified, start time is the current time\n // (as determined above)\n startTime = JulianDate.clone(currentTime);\n } else {\n startTime = JulianDate.clone(startTime);\n }\n\n if (!defined(stopTime)) {\n // if not specified, stop time is 1 day after the start time\n // (as determined above)\n stopTime = JulianDate.addDays(startTime, 1.0, new JulianDate());\n } else {\n stopTime = JulianDate.clone(stopTime);\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (JulianDate.greaterThan(startTime, stopTime)) {\n throw new DeveloperError(\"startTime must come before stopTime.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The start time of the clock.\n * @type {JulianDate}\n */\n this.startTime = startTime;\n\n /**\n * The stop time of the clock.\n * @type {JulianDate}\n */\n this.stopTime = stopTime;\n\n /**\n * Determines how the clock should behave when\n * {@link Clock#startTime} or {@link Clock#stopTime}\n * is reached.\n * @type {ClockRange}\n * @default {@link ClockRange.UNBOUNDED}\n */\n this.clockRange = defaultValue(options.clockRange, ClockRange.UNBOUNDED);\n\n /**\n * Indicates whether {@link Clock#tick} can advance time. This could be false if data is being buffered,\n * for example. The clock will only advance time when both\n * {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n * @type {Boolean}\n * @default true\n */\n this.canAnimate = defaultValue(options.canAnimate, true);\n\n /**\n * An {@link Event} that is fired whenever {@link Clock#tick} is called.\n * @type {Event}\n */\n this.onTick = new Event();\n /**\n * An {@link Event} that is fired whenever {@link Clock#stopTime} is reached.\n * @type {Event}\n */\n this.onStop = new Event();\n\n this._currentTime = undefined;\n this._multiplier = undefined;\n this._clockStep = undefined;\n this._shouldAnimate = undefined;\n this._lastSystemTime = getTimestamp();\n\n // set values using the property setters to\n // make values consistent.\n\n this.currentTime = currentTime;\n this.multiplier = defaultValue(options.multiplier, 1.0);\n this.shouldAnimate = defaultValue(options.shouldAnimate, false);\n this.clockStep = defaultValue(\n options.clockStep,\n ClockStep.SYSTEM_CLOCK_MULTIPLIER\n );\n}\n\nObject.defineProperties(Clock.prototype, {\n /**\n * The current time.\n * Changing this property will change\n * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n * @memberof Clock.prototype\n * @type {JulianDate}\n */\n currentTime: {\n get: function () {\n return this._currentTime;\n },\n set: function (value) {\n if (JulianDate.equals(this._currentTime, value)) {\n return;\n }\n\n if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n }\n\n this._currentTime = value;\n },\n },\n\n /**\n * Gets or sets how much time advances when {@link Clock#tick} is called. Negative values allow for advancing backwards.\n * If {@link Clock#clockStep} is set to {@link ClockStep.TICK_DEPENDENT}, this is the number of seconds to advance.\n * If {@link Clock#clockStep} is set to {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}, this value is multiplied by the\n * elapsed system time since the last call to {@link Clock#tick}.\n * Changing this property will change\n * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n * @memberof Clock.prototype\n * @type {Number}\n * @default 1.0\n */\n multiplier: {\n get: function () {\n return this._multiplier;\n },\n set: function (value) {\n if (this._multiplier === value) {\n return;\n }\n\n if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n }\n\n this._multiplier = value;\n },\n },\n\n /**\n * Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent.\n * Changing this property to {@link ClockStep.SYSTEM_CLOCK} will set\n * {@link Clock#multiplier} to 1.0, {@link Clock#shouldAnimate} to true, and\n * {@link Clock#currentTime} to the current system clock time.\n * @memberof Clock.prototype\n * @type ClockStep\n * @default {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}\n */\n clockStep: {\n get: function () {\n return this._clockStep;\n },\n set: function (value) {\n if (value === ClockStep.SYSTEM_CLOCK) {\n this._multiplier = 1.0;\n this._shouldAnimate = true;\n this._currentTime = JulianDate.now();\n }\n\n this._clockStep = value;\n },\n },\n\n /**\n * Indicates whether {@link Clock#tick} should attempt to advance time.\n * The clock will only advance time when both\n * {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n * Changing this property will change\n * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n * @memberof Clock.prototype\n * @type {Boolean}\n * @default false\n */\n shouldAnimate: {\n get: function () {\n return this._shouldAnimate;\n },\n set: function (value) {\n if (this._shouldAnimate === value) {\n return;\n }\n\n if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n }\n\n this._shouldAnimate = value;\n },\n },\n});\n\n/**\n * Advances the clock from the current time based on the current configuration options.\n * tick should be called every frame, regardless of whether animation is taking place\n * or not. To control animation, use the {@link Clock#shouldAnimate} property.\n *\n * @returns {JulianDate} The new value of the {@link Clock#currentTime} property.\n */\nClock.prototype.tick = function () {\n var currentSystemTime = getTimestamp();\n var currentTime = JulianDate.clone(this._currentTime);\n\n if (this.canAnimate && this._shouldAnimate) {\n var clockStep = this._clockStep;\n if (clockStep === ClockStep.SYSTEM_CLOCK) {\n currentTime = JulianDate.now(currentTime);\n } else {\n var multiplier = this._multiplier;\n\n if (clockStep === ClockStep.TICK_DEPENDENT) {\n currentTime = JulianDate.addSeconds(\n currentTime,\n multiplier,\n currentTime\n );\n } else {\n var milliseconds = currentSystemTime - this._lastSystemTime;\n currentTime = JulianDate.addSeconds(\n currentTime,\n multiplier * (milliseconds / 1000.0),\n currentTime\n );\n }\n\n var clockRange = this.clockRange;\n var startTime = this.startTime;\n var stopTime = this.stopTime;\n\n if (clockRange === ClockRange.CLAMPED) {\n if (JulianDate.lessThan(currentTime, startTime)) {\n currentTime = JulianDate.clone(startTime, currentTime);\n } else if (JulianDate.greaterThan(currentTime, stopTime)) {\n currentTime = JulianDate.clone(stopTime, currentTime);\n this.onStop.raiseEvent(this);\n }\n } else if (clockRange === ClockRange.LOOP_STOP) {\n if (JulianDate.lessThan(currentTime, startTime)) {\n currentTime = JulianDate.clone(startTime, currentTime);\n }\n while (JulianDate.greaterThan(currentTime, stopTime)) {\n currentTime = JulianDate.addSeconds(\n startTime,\n JulianDate.secondsDifference(currentTime, stopTime),\n currentTime\n );\n this.onStop.raiseEvent(this);\n }\n }\n }\n }\n\n this._currentTime = currentTime;\n this._lastSystemTime = currentSystemTime;\n this.onTick.raiseEvent(this);\n return currentTime;\n};\nexport default Clock;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction hue2rgb(m1, m2, h) {\n if (h < 0) {\n h += 1;\n }\n if (h > 1) {\n h -= 1;\n }\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * 6 * h;\n }\n if (h * 2 < 1) {\n return m2;\n }\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n}\n\n/**\n * A color, specified using red, green, blue, and alpha values,\n * which range from <code>0</code> (no intensity) to <code>1.0</code> (full intensity).\n * @param {Number} [red=1.0] The red component.\n * @param {Number} [green=1.0] The green component.\n * @param {Number} [blue=1.0] The blue component.\n * @param {Number} [alpha=1.0] The alpha component.\n *\n * @constructor\n * @alias Color\n *\n * @see Packable\n */\nfunction Color(red, green, blue, alpha) {\n /**\n * The red component.\n * @type {Number}\n * @default 1.0\n */\n this.red = defaultValue(red, 1.0);\n /**\n * The green component.\n * @type {Number}\n * @default 1.0\n */\n this.green = defaultValue(green, 1.0);\n /**\n * The blue component.\n * @type {Number}\n * @default 1.0\n */\n this.blue = defaultValue(blue, 1.0);\n /**\n * The alpha component.\n * @type {Number}\n * @default 1.0\n */\n this.alpha = defaultValue(alpha, 1.0);\n}\n\n/**\n * Creates a Color instance from a {@link Cartesian4}. <code>x</code>, <code>y</code>, <code>z</code>,\n * and <code>w</code> map to <code>red</code>, <code>green</code>, <code>blue</code>, and <code>alpha</code>, respectively.\n *\n * @param {Cartesian4} cartesian The source cartesian.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.fromCartesian4 = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian\", cartesian);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Color(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n }\n\n result.red = cartesian.x;\n result.green = cartesian.y;\n result.blue = cartesian.z;\n result.alpha = cartesian.w;\n return result;\n};\n\n/**\n * Creates a new Color specified using red, green, blue, and alpha values\n * that are in the range of 0 to 255, converting them internally to a range of 0.0 to 1.0.\n *\n * @param {Number} [red=255] The red component.\n * @param {Number} [green=255] The green component.\n * @param {Number} [blue=255] The blue component.\n * @param {Number} [alpha=255] The alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.fromBytes = function (red, green, blue, alpha, result) {\n red = Color.byteToFloat(defaultValue(red, 255.0));\n green = Color.byteToFloat(defaultValue(green, 255.0));\n blue = Color.byteToFloat(defaultValue(blue, 255.0));\n alpha = Color.byteToFloat(defaultValue(alpha, 255.0));\n\n if (!defined(result)) {\n return new Color(red, green, blue, alpha);\n }\n\n result.red = red;\n result.green = green;\n result.blue = blue;\n result.alpha = alpha;\n return result;\n};\n\n/**\n * Creates a new Color that has the same red, green, and blue components\n * of the specified color, but with the specified alpha value.\n *\n * @param {Color} color The base color\n * @param {Number} alpha The new alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n *\n * @example var translucentRed = Cesium.Color.fromAlpha(Cesium.Color.RED, 0.9);\n */\nColor.fromAlpha = function (color, alpha, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"color\", color);\n Check.typeOf.number(\"alpha\", alpha);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Color(color.red, color.green, color.blue, alpha);\n }\n\n result.red = color.red;\n result.green = color.green;\n result.blue = color.blue;\n result.alpha = alpha;\n return result;\n};\n\nvar scratchArrayBuffer;\nvar scratchUint32Array;\nvar scratchUint8Array;\nif (FeatureDetection.supportsTypedArrays()) {\n scratchArrayBuffer = new ArrayBuffer(4);\n scratchUint32Array = new Uint32Array(scratchArrayBuffer);\n scratchUint8Array = new Uint8Array(scratchArrayBuffer);\n}\n\n/**\n * Creates a new Color from a single numeric unsigned 32-bit RGBA value, using the endianness\n * of the system.\n *\n * @param {Number} rgba A single numeric unsigned 32-bit RGBA value.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object.\n *\n * @example\n * var color = Cesium.Color.fromRgba(0x67ADDFFF);\n *\n * @see Color#toRgba\n */\nColor.fromRgba = function (rgba, result) {\n // scratchUint32Array and scratchUint8Array share an underlying array buffer\n scratchUint32Array[0] = rgba;\n return Color.fromBytes(\n scratchUint8Array[0],\n scratchUint8Array[1],\n scratchUint8Array[2],\n scratchUint8Array[3],\n result\n );\n};\n\n/**\n * Creates a Color instance from hue, saturation, and lightness.\n *\n * @param {Number} [hue=0] The hue angle 0...1\n * @param {Number} [saturation=0] The saturation value 0...1\n * @param {Number} [lightness=0] The lightness value 0...1\n * @param {Number} [alpha=1.0] The alpha component 0...1\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object.\n *\n * @see {@link http://www.w3.org/TR/css3-color/#hsl-color|CSS color values}\n */\nColor.fromHsl = function (hue, saturation, lightness, alpha, result) {\n hue = defaultValue(hue, 0.0) % 1.0;\n saturation = defaultValue(saturation, 0.0);\n lightness = defaultValue(lightness, 0.0);\n alpha = defaultValue(alpha, 1.0);\n\n var red = lightness;\n var green = lightness;\n var blue = lightness;\n\n if (saturation !== 0) {\n var m2;\n if (lightness < 0.5) {\n m2 = lightness * (1 + saturation);\n } else {\n m2 = lightness + saturation - lightness * saturation;\n }\n\n var m1 = 2.0 * lightness - m2;\n red = hue2rgb(m1, m2, hue + 1 / 3);\n green = hue2rgb(m1, m2, hue);\n blue = hue2rgb(m1, m2, hue - 1 / 3);\n }\n\n if (!defined(result)) {\n return new Color(red, green, blue, alpha);\n }\n\n result.red = red;\n result.green = green;\n result.blue = blue;\n result.alpha = alpha;\n return result;\n};\n\n/**\n * Creates a random color using the provided options. For reproducible random colors, you should\n * call {@link CesiumMath#setRandomNumberSeed} once at the beginning of your application.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.red] If specified, the red component to use instead of a randomized value.\n * @param {Number} [options.minimumRed=0.0] The maximum red value to generate if none was specified.\n * @param {Number} [options.maximumRed=1.0] The minimum red value to generate if none was specified.\n * @param {Number} [options.green] If specified, the green component to use instead of a randomized value.\n * @param {Number} [options.minimumGreen=0.0] The maximum green value to generate if none was specified.\n * @param {Number} [options.maximumGreen=1.0] The minimum green value to generate if none was specified.\n * @param {Number} [options.blue] If specified, the blue component to use instead of a randomized value.\n * @param {Number} [options.minimumBlue=0.0] The maximum blue value to generate if none was specified.\n * @param {Number} [options.maximumBlue=1.0] The minimum blue value to generate if none was specified.\n * @param {Number} [options.alpha] If specified, the alpha component to use instead of a randomized value.\n * @param {Number} [options.minimumAlpha=0.0] The maximum alpha value to generate if none was specified.\n * @param {Number} [options.maximumAlpha=1.0] The minimum alpha value to generate if none was specified.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\n *\n * @exception {DeveloperError} minimumRed must be less than or equal to maximumRed.\n * @exception {DeveloperError} minimumGreen must be less than or equal to maximumGreen.\n * @exception {DeveloperError} minimumBlue must be less than or equal to maximumBlue.\n * @exception {DeveloperError} minimumAlpha must be less than or equal to maximumAlpha.\n *\n * @example\n * //Create a completely random color\n * var color = Cesium.Color.fromRandom();\n *\n * //Create a random shade of yellow.\n * var color = Cesium.Color.fromRandom({\n * red : 1.0,\n * green : 1.0,\n * alpha : 1.0\n * });\n *\n * //Create a random bright color.\n * var color = Cesium.Color.fromRandom({\n * minimumRed : 0.75,\n * minimumGreen : 0.75,\n * minimumBlue : 0.75,\n * alpha : 1.0\n * });\n */\nColor.fromRandom = function (options, result) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var red = options.red;\n if (!defined(red)) {\n var minimumRed = defaultValue(options.minimumRed, 0);\n var maximumRed = defaultValue(options.maximumRed, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThanOrEquals(\"minimumRed\", minimumRed, maximumRed);\n //>>includeEnd('debug');\n\n red =\n minimumRed + CesiumMath.nextRandomNumber() * (maximumRed - minimumRed);\n }\n\n var green = options.green;\n if (!defined(green)) {\n var minimumGreen = defaultValue(options.minimumGreen, 0);\n var maximumGreen = defaultValue(options.maximumGreen, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThanOrEquals(\n \"minimumGreen\",\n minimumGreen,\n maximumGreen\n );\n //>>includeEnd('debug');\n green =\n minimumGreen +\n CesiumMath.nextRandomNumber() * (maximumGreen - minimumGreen);\n }\n\n var blue = options.blue;\n if (!defined(blue)) {\n var minimumBlue = defaultValue(options.minimumBlue, 0);\n var maximumBlue = defaultValue(options.maximumBlue, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThanOrEquals(\n \"minimumBlue\",\n minimumBlue,\n maximumBlue\n );\n //>>includeEnd('debug');\n\n blue =\n minimumBlue + CesiumMath.nextRandomNumber() * (maximumBlue - minimumBlue);\n }\n\n var alpha = options.alpha;\n if (!defined(alpha)) {\n var minimumAlpha = defaultValue(options.minimumAlpha, 0);\n var maximumAlpha = defaultValue(options.maximumAlpha, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThanOrEquals(\n \"minumumAlpha\",\n minimumAlpha,\n maximumAlpha\n );\n //>>includeEnd('debug');\n\n alpha =\n minimumAlpha +\n CesiumMath.nextRandomNumber() * (maximumAlpha - minimumAlpha);\n }\n\n if (!defined(result)) {\n return new Color(red, green, blue, alpha);\n }\n\n result.red = red;\n result.green = green;\n result.blue = blue;\n result.alpha = alpha;\n return result;\n};\n\n//#rgba\nvar rgbaMatcher = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i;\n//#rrggbbaa\nvar rrggbbaaMatcher = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;\n//rgb(), rgba(), or rgb%()\nvar rgbParenthesesMatcher = /^rgba?\\(\\s*([0-9.]+%?)\\s*,\\s*([0-9.]+%?)\\s*,\\s*([0-9.]+%?)(?:\\s*,\\s*([0-9.]+))?\\s*\\)$/i;\n//hsl() or hsla()\nvar hslParenthesesMatcher = /^hsla?\\(\\s*([0-9.]+)\\s*,\\s*([0-9.]+%)\\s*,\\s*([0-9.]+%)(?:\\s*,\\s*([0-9.]+))?\\s*\\)$/i;\n\n/**\n * Creates a Color instance from a CSS color value.\n *\n * @param {String} color The CSS color value in #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), or hsla() format.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object, or undefined if the string was not a valid CSS color.\n *\n *\n * @example\n * var cesiumBlue = Cesium.Color.fromCssColorString('#67ADDF');\n * var green = Cesium.Color.fromCssColorString('green');\n *\n * @see {@link http://www.w3.org/TR/css3-color|CSS color values}\n */\nColor.fromCssColorString = function (color, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"color\", color);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Color();\n }\n\n var namedColor = Color[color.toUpperCase()];\n if (defined(namedColor)) {\n Color.clone(namedColor, result);\n return result;\n }\n\n var matches = rgbaMatcher.exec(color);\n if (matches !== null) {\n result.red = parseInt(matches[1], 16) / 15;\n result.green = parseInt(matches[2], 16) / 15.0;\n result.blue = parseInt(matches[3], 16) / 15.0;\n result.alpha = parseInt(defaultValue(matches[4], \"f\"), 16) / 15.0;\n return result;\n }\n\n matches = rrggbbaaMatcher.exec(color);\n if (matches !== null) {\n result.red = parseInt(matches[1], 16) / 255.0;\n result.green = parseInt(matches[2], 16) / 255.0;\n result.blue = parseInt(matches[3], 16) / 255.0;\n result.alpha = parseInt(defaultValue(matches[4], \"ff\"), 16) / 255.0;\n return result;\n }\n\n matches = rgbParenthesesMatcher.exec(color);\n if (matches !== null) {\n result.red =\n parseFloat(matches[1]) / (\"%\" === matches[1].substr(-1) ? 100.0 : 255.0);\n result.green =\n parseFloat(matches[2]) / (\"%\" === matches[2].substr(-1) ? 100.0 : 255.0);\n result.blue =\n parseFloat(matches[3]) / (\"%\" === matches[3].substr(-1) ? 100.0 : 255.0);\n result.alpha = parseFloat(defaultValue(matches[4], \"1.0\"));\n return result;\n }\n\n matches = hslParenthesesMatcher.exec(color);\n if (matches !== null) {\n return Color.fromHsl(\n parseFloat(matches[1]) / 360.0,\n parseFloat(matches[2]) / 100.0,\n parseFloat(matches[3]) / 100.0,\n parseFloat(defaultValue(matches[4], \"1.0\")),\n result\n );\n }\n\n result = undefined;\n return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nColor.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Color} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nColor.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n array[startingIndex++] = value.red;\n array[startingIndex++] = value.green;\n array[startingIndex++] = value.blue;\n array[startingIndex] = value.alpha;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Color} [result] The object into which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n if (!defined(result)) {\n result = new Color();\n }\n result.red = array[startingIndex++];\n result.green = array[startingIndex++];\n result.blue = array[startingIndex++];\n result.alpha = array[startingIndex];\n return result;\n};\n\n/**\n * Converts a 'byte' color component in the range of 0 to 255 into\n * a 'float' color component in the range of 0 to 1.0.\n *\n * @param {Number} number The number to be converted.\n * @returns {Number} The converted number.\n */\nColor.byteToFloat = function (number) {\n return number / 255.0;\n};\n\n/**\n * Converts a 'float' color component in the range of 0 to 1.0 into\n * a 'byte' color component in the range of 0 to 255.\n *\n * @param {Number} number The number to be converted.\n * @returns {Number} The converted number.\n */\nColor.floatToByte = function (number) {\n return number === 1.0 ? 255.0 : (number * 256.0) | 0;\n};\n\n/**\n * Duplicates a Color.\n *\n * @param {Color} color The Color to duplicate.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined. (Returns undefined if color is undefined)\n */\nColor.clone = function (color, result) {\n if (!defined(color)) {\n return undefined;\n }\n if (!defined(result)) {\n return new Color(color.red, color.green, color.blue, color.alpha);\n }\n result.red = color.red;\n result.green = color.green;\n result.blue = color.blue;\n result.alpha = color.alpha;\n return result;\n};\n\n/**\n * Returns true if the first Color equals the second color.\n *\n * @param {Color} left The first Color to compare for equality.\n * @param {Color} right The second Color to compare for equality.\n * @returns {Boolean} <code>true</code> if the Colors are equal; otherwise, <code>false</code>.\n */\nColor.equals = function (left, right) {\n return (\n left === right || //\n (defined(left) && //\n defined(right) && //\n left.red === right.red && //\n left.green === right.green && //\n left.blue === right.blue && //\n left.alpha === right.alpha)\n );\n};\n\n/**\n * @private\n */\nColor.equalsArray = function (color, array, offset) {\n return (\n color.red === array[offset] &&\n color.green === array[offset + 1] &&\n color.blue === array[offset + 2] &&\n color.alpha === array[offset + 3]\n );\n};\n\n/**\n * Returns a duplicate of a Color instance.\n *\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\n */\nColor.prototype.clone = function (result) {\n return Color.clone(this, result);\n};\n\n/**\n * Returns true if this Color equals other.\n *\n * @param {Color} other The Color to compare for equality.\n * @returns {Boolean} <code>true</code> if the Colors are equal; otherwise, <code>false</code>.\n */\nColor.prototype.equals = function (other) {\n return Color.equals(this, other);\n};\n\n/**\n * Returns <code>true</code> if this Color equals other componentwise within the specified epsilon.\n *\n * @param {Color} other The Color to compare for equality.\n * @param {Number} [epsilon=0.0] The epsilon to use for equality testing.\n * @returns {Boolean} <code>true</code> if the Colors are equal within the specified epsilon; otherwise, <code>false</code>.\n */\nColor.prototype.equalsEpsilon = function (other, epsilon) {\n return (\n this === other || //\n (defined(other) && //\n Math.abs(this.red - other.red) <= epsilon && //\n Math.abs(this.green - other.green) <= epsilon && //\n Math.abs(this.blue - other.blue) <= epsilon && //\n Math.abs(this.alpha - other.alpha) <= epsilon)\n );\n};\n\n/**\n * Creates a string representing this Color in the format '(red, green, blue, alpha)'.\n *\n * @returns {String} A string representing this Color in the format '(red, green, blue, alpha)'.\n */\nColor.prototype.toString = function () {\n return (\n \"(\" +\n this.red +\n \", \" +\n this.green +\n \", \" +\n this.blue +\n \", \" +\n this.alpha +\n \")\"\n );\n};\n\n/**\n * Creates a string containing the CSS color value for this color.\n *\n * @returns {String} The CSS equivalent of this color.\n *\n * @see {@link http://www.w3.org/TR/css3-color/#rgba-color|CSS RGB or RGBA color values}\n */\nColor.prototype.toCssColorString = function () {\n var red = Color.floatToByte(this.red);\n var green = Color.floatToByte(this.green);\n var blue = Color.floatToByte(this.blue);\n if (this.alpha === 1) {\n return \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\n }\n return \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + this.alpha + \")\";\n};\n\n/**\n * Creates a string containing CSS hex string color value for this color.\n *\n * @returns {String} The CSS hex string equivalent of this color.\n */\nColor.prototype.toCssHexString = function () {\n var r = Color.floatToByte(this.red).toString(16);\n if (r.length < 2) {\n r = \"0\" + r;\n }\n var g = Color.floatToByte(this.green).toString(16);\n if (g.length < 2) {\n g = \"0\" + g;\n }\n var b = Color.floatToByte(this.blue).toString(16);\n if (b.length < 2) {\n b = \"0\" + b;\n }\n if (this.alpha < 1) {\n var hexAlpha = Color.floatToByte(this.alpha).toString(16);\n if (hexAlpha.length < 2) {\n hexAlpha = \"0\" + hexAlpha;\n }\n return \"#\" + r + g + b + hexAlpha;\n }\n return \"#\" + r + g + b;\n};\n\n/**\n * Converts this color to an array of red, green, blue, and alpha values\n * that are in the range of 0 to 255.\n *\n * @param {Number[]} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Number[]} The modified result parameter or a new instance if result was undefined.\n */\nColor.prototype.toBytes = function (result) {\n var red = Color.floatToByte(this.red);\n var green = Color.floatToByte(this.green);\n var blue = Color.floatToByte(this.blue);\n var alpha = Color.floatToByte(this.alpha);\n\n if (!defined(result)) {\n return [red, green, blue, alpha];\n }\n result[0] = red;\n result[1] = green;\n result[2] = blue;\n result[3] = alpha;\n return result;\n};\n\n/**\n * Converts this color to a single numeric unsigned 32-bit RGBA value, using the endianness\n * of the system.\n *\n * @returns {Number} A single numeric unsigned 32-bit RGBA value.\n *\n *\n * @example\n * var rgba = Cesium.Color.BLUE.toRgba();\n *\n * @see Color.fromRgba\n */\nColor.prototype.toRgba = function () {\n // scratchUint32Array and scratchUint8Array share an underlying array buffer\n scratchUint8Array[0] = Color.floatToByte(this.red);\n scratchUint8Array[1] = Color.floatToByte(this.green);\n scratchUint8Array[2] = Color.floatToByte(this.blue);\n scratchUint8Array[3] = Color.floatToByte(this.alpha);\n return scratchUint32Array[0];\n};\n\n/**\n * Brightens this color by the provided magnitude.\n *\n * @param {Number} magnitude A positive number indicating the amount to brighten.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n *\n * @example\n * var brightBlue = Cesium.Color.BLUE.brighten(0.5, new Cesium.Color());\n */\nColor.prototype.brighten = function (magnitude, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"magnitude\", magnitude);\n Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n magnitude = 1.0 - magnitude;\n result.red = 1.0 - (1.0 - this.red) * magnitude;\n result.green = 1.0 - (1.0 - this.green) * magnitude;\n result.blue = 1.0 - (1.0 - this.blue) * magnitude;\n result.alpha = this.alpha;\n return result;\n};\n\n/**\n * Darkens this color by the provided magnitude.\n *\n * @param {Number} magnitude A positive number indicating the amount to darken.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n *\n * @example\n * var darkBlue = Cesium.Color.BLUE.darken(0.5, new Cesium.Color());\n */\nColor.prototype.darken = function (magnitude, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"magnitude\", magnitude);\n Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n magnitude = 1.0 - magnitude;\n result.red = this.red * magnitude;\n result.green = this.green * magnitude;\n result.blue = this.blue * magnitude;\n result.alpha = this.alpha;\n return result;\n};\n\n/**\n * Creates a new Color that has the same red, green, and blue components\n * as this Color, but with the specified alpha value.\n *\n * @param {Number} alpha The new alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n *\n * @example var translucentRed = Cesium.Color.RED.withAlpha(0.9);\n */\nColor.prototype.withAlpha = function (alpha, result) {\n return Color.fromAlpha(this, alpha, result);\n};\n\n/**\n * Computes the componentwise sum of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.add = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = left.red + right.red;\n result.green = left.green + right.green;\n result.blue = left.blue + right.blue;\n result.alpha = left.alpha + right.alpha;\n return result;\n};\n\n/**\n * Computes the componentwise difference of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.subtract = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = left.red - right.red;\n result.green = left.green - right.green;\n result.blue = left.blue - right.blue;\n result.alpha = left.alpha - right.alpha;\n return result;\n};\n\n/**\n * Computes the componentwise product of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.multiply = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = left.red * right.red;\n result.green = left.green * right.green;\n result.blue = left.blue * right.blue;\n result.alpha = left.alpha * right.alpha;\n return result;\n};\n\n/**\n * Computes the componentwise quotient of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.divide = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = left.red / right.red;\n result.green = left.green / right.green;\n result.blue = left.blue / right.blue;\n result.alpha = left.alpha / right.alpha;\n return result;\n};\n\n/**\n * Computes the componentwise modulus of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.mod = function (left, right, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n Check.typeOf.object(\"right\", right);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = left.red % right.red;\n result.green = left.green % right.green;\n result.blue = left.blue % right.blue;\n result.alpha = left.alpha % right.alpha;\n return result;\n};\n\n/**\n * Computes the linear interpolation or extrapolation at t between the provided colors.\n *\n * @param {Color} start The color corresponding to t at 0.0.\n * @param {Color} end The color corresponding to t at 1.0.\n * @param {Number} t The point along t at which to interpolate.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.lerp = function (start, end, t, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"start\", start);\n Check.typeOf.object(\"end\", end);\n Check.typeOf.number(\"t\", t);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = CesiumMath.lerp(start.red, end.red, t);\n result.green = CesiumMath.lerp(start.green, end.green, t);\n result.blue = CesiumMath.lerp(start.blue, end.blue, t);\n result.alpha = CesiumMath.lerp(start.alpha, end.alpha, t);\n return result;\n};\n\n/**\n * Multiplies the provided Color componentwise by the provided scalar.\n *\n * @param {Color} color The Color to be scaled.\n * @param {Number} scalar The scalar to multiply with.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.multiplyByScalar = function (color, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"color\", color);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = color.red * scalar;\n result.green = color.green * scalar;\n result.blue = color.blue * scalar;\n result.alpha = color.alpha * scalar;\n return result;\n};\n\n/**\n * Divides the provided Color componentwise by the provided scalar.\n *\n * @param {Color} color The Color to be divided.\n * @param {Number} scalar The scalar to divide with.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.divideByScalar = function (color, scalar, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"color\", color);\n Check.typeOf.number(\"scalar\", scalar);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n result.red = color.red / scalar;\n result.green = color.green / scalar;\n result.blue = color.blue / scalar;\n result.alpha = color.alpha / scalar;\n return result;\n};\n\n/**\n * An immutable Color instance initialized to CSS color #F0F8FF\n * <span class=\"colorSwath\" style=\"background: #F0F8FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ALICEBLUE = Object.freeze(Color.fromCssColorString(\"#F0F8FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAEBD7\n * <span class=\"colorSwath\" style=\"background: #FAEBD7;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ANTIQUEWHITE = Object.freeze(Color.fromCssColorString(\"#FAEBD7\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FFFF\n * <span class=\"colorSwath\" style=\"background: #00FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AQUA = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7FFFD4\n * <span class=\"colorSwath\" style=\"background: #7FFFD4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AQUAMARINE = Object.freeze(Color.fromCssColorString(\"#7FFFD4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F0FFFF\n * <span class=\"colorSwath\" style=\"background: #F0FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AZURE = Object.freeze(Color.fromCssColorString(\"#F0FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5F5DC\n * <span class=\"colorSwath\" style=\"background: #F5F5DC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BEIGE = Object.freeze(Color.fromCssColorString(\"#F5F5DC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4C4\n * <span class=\"colorSwath\" style=\"background: #FFE4C4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BISQUE = Object.freeze(Color.fromCssColorString(\"#FFE4C4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #000000\n * <span class=\"colorSwath\" style=\"background: #000000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLACK = Object.freeze(Color.fromCssColorString(\"#000000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFEBCD\n * <span class=\"colorSwath\" style=\"background: #FFEBCD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLANCHEDALMOND = Object.freeze(Color.fromCssColorString(\"#FFEBCD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #0000FF\n * <span class=\"colorSwath\" style=\"background: #0000FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLUE = Object.freeze(Color.fromCssColorString(\"#0000FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8A2BE2\n * <span class=\"colorSwath\" style=\"background: #8A2BE2;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLUEVIOLET = Object.freeze(Color.fromCssColorString(\"#8A2BE2\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A52A2A\n * <span class=\"colorSwath\" style=\"background: #A52A2A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BROWN = Object.freeze(Color.fromCssColorString(\"#A52A2A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DEB887\n * <span class=\"colorSwath\" style=\"background: #DEB887;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BURLYWOOD = Object.freeze(Color.fromCssColorString(\"#DEB887\"));\n\n/**\n * An immutable Color instance initialized to CSS color #5F9EA0\n * <span class=\"colorSwath\" style=\"background: #5F9EA0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CADETBLUE = Object.freeze(Color.fromCssColorString(\"#5F9EA0\"));\n/**\n * An immutable Color instance initialized to CSS color #7FFF00\n * <span class=\"colorSwath\" style=\"background: #7FFF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CHARTREUSE = Object.freeze(Color.fromCssColorString(\"#7FFF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D2691E\n * <span class=\"colorSwath\" style=\"background: #D2691E;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CHOCOLATE = Object.freeze(Color.fromCssColorString(\"#D2691E\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF7F50\n * <span class=\"colorSwath\" style=\"background: #FF7F50;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORAL = Object.freeze(Color.fromCssColorString(\"#FF7F50\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6495ED\n * <span class=\"colorSwath\" style=\"background: #6495ED;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORNFLOWERBLUE = Object.freeze(Color.fromCssColorString(\"#6495ED\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF8DC\n * <span class=\"colorSwath\" style=\"background: #FFF8DC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORNSILK = Object.freeze(Color.fromCssColorString(\"#FFF8DC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DC143C\n * <span class=\"colorSwath\" style=\"background: #DC143C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CRIMSON = Object.freeze(Color.fromCssColorString(\"#DC143C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FFFF\n * <span class=\"colorSwath\" style=\"background: #00FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CYAN = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00008B\n * <span class=\"colorSwath\" style=\"background: #00008B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKBLUE = Object.freeze(Color.fromCssColorString(\"#00008B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008B8B\n * <span class=\"colorSwath\" style=\"background: #008B8B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKCYAN = Object.freeze(Color.fromCssColorString(\"#008B8B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B8860B\n * <span class=\"colorSwath\" style=\"background: #B8860B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGOLDENROD = Object.freeze(Color.fromCssColorString(\"#B8860B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A9A9A9\n * <span class=\"colorSwath\" style=\"background: #A9A9A9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGRAY = Object.freeze(Color.fromCssColorString(\"#A9A9A9\"));\n\n/**\n * An immutable Color instance initialized to CSS color #006400\n * <span class=\"colorSwath\" style=\"background: #006400;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGREEN = Object.freeze(Color.fromCssColorString(\"#006400\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A9A9A9\n * <span class=\"colorSwath\" style=\"background: #A9A9A9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGREY = Color.DARKGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #BDB76B\n * <span class=\"colorSwath\" style=\"background: #BDB76B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKKHAKI = Object.freeze(Color.fromCssColorString(\"#BDB76B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B008B\n * <span class=\"colorSwath\" style=\"background: #8B008B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKMAGENTA = Object.freeze(Color.fromCssColorString(\"#8B008B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #556B2F\n * <span class=\"colorSwath\" style=\"background: #556B2F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKOLIVEGREEN = Object.freeze(Color.fromCssColorString(\"#556B2F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF8C00\n * <span class=\"colorSwath\" style=\"background: #FF8C00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKORANGE = Object.freeze(Color.fromCssColorString(\"#FF8C00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9932CC\n * <span class=\"colorSwath\" style=\"background: #9932CC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKORCHID = Object.freeze(Color.fromCssColorString(\"#9932CC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B0000\n * <span class=\"colorSwath\" style=\"background: #8B0000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKRED = Object.freeze(Color.fromCssColorString(\"#8B0000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E9967A\n * <span class=\"colorSwath\" style=\"background: #E9967A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSALMON = Object.freeze(Color.fromCssColorString(\"#E9967A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8FBC8F\n * <span class=\"colorSwath\" style=\"background: #8FBC8F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSEAGREEN = Object.freeze(Color.fromCssColorString(\"#8FBC8F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #483D8B\n * <span class=\"colorSwath\" style=\"background: #483D8B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#483D8B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2F4F4F\n * <span class=\"colorSwath\" style=\"background: #2F4F4F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#2F4F4F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2F4F4F\n * <span class=\"colorSwath\" style=\"background: #2F4F4F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEGREY = Color.DARKSLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #00CED1\n * <span class=\"colorSwath\" style=\"background: #00CED1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKTURQUOISE = Object.freeze(Color.fromCssColorString(\"#00CED1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9400D3\n * <span class=\"colorSwath\" style=\"background: #9400D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKVIOLET = Object.freeze(Color.fromCssColorString(\"#9400D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF1493\n * <span class=\"colorSwath\" style=\"background: #FF1493;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DEEPPINK = Object.freeze(Color.fromCssColorString(\"#FF1493\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00BFFF\n * <span class=\"colorSwath\" style=\"background: #00BFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DEEPSKYBLUE = Object.freeze(Color.fromCssColorString(\"#00BFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #696969\n * <span class=\"colorSwath\" style=\"background: #696969;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DIMGRAY = Object.freeze(Color.fromCssColorString(\"#696969\"));\n\n/**\n * An immutable Color instance initialized to CSS color #696969\n * <span class=\"colorSwath\" style=\"background: #696969;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DIMGREY = Color.DIMGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #1E90FF\n * <span class=\"colorSwath\" style=\"background: #1E90FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DODGERBLUE = Object.freeze(Color.fromCssColorString(\"#1E90FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B22222\n * <span class=\"colorSwath\" style=\"background: #B22222;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FIREBRICK = Object.freeze(Color.fromCssColorString(\"#B22222\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFAF0\n * <span class=\"colorSwath\" style=\"background: #FFFAF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FLORALWHITE = Object.freeze(Color.fromCssColorString(\"#FFFAF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #228B22\n * <span class=\"colorSwath\" style=\"background: #228B22;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FORESTGREEN = Object.freeze(Color.fromCssColorString(\"#228B22\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF00FF\n * <span class=\"colorSwath\" style=\"background: #FF00FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FUCHSIA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DCDCDC\n * <span class=\"colorSwath\" style=\"background: #DCDCDC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GAINSBORO = Object.freeze(Color.fromCssColorString(\"#DCDCDC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F8F8FF\n * <span class=\"colorSwath\" style=\"background: #F8F8FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GHOSTWHITE = Object.freeze(Color.fromCssColorString(\"#F8F8FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFD700\n * <span class=\"colorSwath\" style=\"background: #FFD700;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GOLD = Object.freeze(Color.fromCssColorString(\"#FFD700\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DAA520\n * <span class=\"colorSwath\" style=\"background: #DAA520;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GOLDENROD = Object.freeze(Color.fromCssColorString(\"#DAA520\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808080\n * <span class=\"colorSwath\" style=\"background: #808080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GRAY = Object.freeze(Color.fromCssColorString(\"#808080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008000\n * <span class=\"colorSwath\" style=\"background: #008000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREEN = Object.freeze(Color.fromCssColorString(\"#008000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #ADFF2F\n * <span class=\"colorSwath\" style=\"background: #ADFF2F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREENYELLOW = Object.freeze(Color.fromCssColorString(\"#ADFF2F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808080\n * <span class=\"colorSwath\" style=\"background: #808080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREY = Color.GRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #F0FFF0\n * <span class=\"colorSwath\" style=\"background: #F0FFF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.HONEYDEW = Object.freeze(Color.fromCssColorString(\"#F0FFF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF69B4\n * <span class=\"colorSwath\" style=\"background: #FF69B4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.HOTPINK = Object.freeze(Color.fromCssColorString(\"#FF69B4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #CD5C5C\n * <span class=\"colorSwath\" style=\"background: #CD5C5C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.INDIANRED = Object.freeze(Color.fromCssColorString(\"#CD5C5C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4B0082\n * <span class=\"colorSwath\" style=\"background: #4B0082;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.INDIGO = Object.freeze(Color.fromCssColorString(\"#4B0082\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFF0\n * <span class=\"colorSwath\" style=\"background: #FFFFF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.IVORY = Object.freeze(Color.fromCssColorString(\"#FFFFF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F0E68C\n * <span class=\"colorSwath\" style=\"background: #F0E68C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.KHAKI = Object.freeze(Color.fromCssColorString(\"#F0E68C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E6E6FA\n * <span class=\"colorSwath\" style=\"background: #E6E6FA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAVENDER = Object.freeze(Color.fromCssColorString(\"#E6E6FA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF0F5\n * <span class=\"colorSwath\" style=\"background: #FFF0F5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAVENDAR_BLUSH = Object.freeze(Color.fromCssColorString(\"#FFF0F5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7CFC00\n * <span class=\"colorSwath\" style=\"background: #7CFC00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAWNGREEN = Object.freeze(Color.fromCssColorString(\"#7CFC00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFACD\n * <span class=\"colorSwath\" style=\"background: #FFFACD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LEMONCHIFFON = Object.freeze(Color.fromCssColorString(\"#FFFACD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #ADD8E6\n * <span class=\"colorSwath\" style=\"background: #ADD8E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#ADD8E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F08080\n * <span class=\"colorSwath\" style=\"background: #F08080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTCORAL = Object.freeze(Color.fromCssColorString(\"#F08080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E0FFFF\n * <span class=\"colorSwath\" style=\"background: #E0FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTCYAN = Object.freeze(Color.fromCssColorString(\"#E0FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAFAD2\n * <span class=\"colorSwath\" style=\"background: #FAFAD2;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGOLDENRODYELLOW = Object.freeze(Color.fromCssColorString(\"#FAFAD2\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D3D3D3\n * <span class=\"colorSwath\" style=\"background: #D3D3D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGRAY = Object.freeze(Color.fromCssColorString(\"#D3D3D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #90EE90\n * <span class=\"colorSwath\" style=\"background: #90EE90;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGREEN = Object.freeze(Color.fromCssColorString(\"#90EE90\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D3D3D3\n * <span class=\"colorSwath\" style=\"background: #D3D3D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGREY = Color.LIGHTGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #FFB6C1\n * <span class=\"colorSwath\" style=\"background: #FFB6C1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTPINK = Object.freeze(Color.fromCssColorString(\"#FFB6C1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #20B2AA\n * <span class=\"colorSwath\" style=\"background: #20B2AA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSEAGREEN = Object.freeze(Color.fromCssColorString(\"#20B2AA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #87CEFA\n * <span class=\"colorSwath\" style=\"background: #87CEFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #778899\n * <span class=\"colorSwath\" style=\"background: #778899;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#778899\"));\n\n/**\n * An immutable Color instance initialized to CSS color #778899\n * <span class=\"colorSwath\" style=\"background: #778899;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSLATEGREY = Color.LIGHTSLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #B0C4DE\n * <span class=\"colorSwath\" style=\"background: #B0C4DE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSTEELBLUE = Object.freeze(Color.fromCssColorString(\"#B0C4DE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFE0\n * <span class=\"colorSwath\" style=\"background: #FFFFE0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTYELLOW = Object.freeze(Color.fromCssColorString(\"#FFFFE0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FF00\n * <span class=\"colorSwath\" style=\"background: #00FF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIME = Object.freeze(Color.fromCssColorString(\"#00FF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #32CD32\n * <span class=\"colorSwath\" style=\"background: #32CD32;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIMEGREEN = Object.freeze(Color.fromCssColorString(\"#32CD32\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAF0E6\n * <span class=\"colorSwath\" style=\"background: #FAF0E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LINEN = Object.freeze(Color.fromCssColorString(\"#FAF0E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF00FF\n * <span class=\"colorSwath\" style=\"background: #FF00FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MAGENTA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #800000\n * <span class=\"colorSwath\" style=\"background: #800000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MAROON = Object.freeze(Color.fromCssColorString(\"#800000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #66CDAA\n * <span class=\"colorSwath\" style=\"background: #66CDAA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMAQUAMARINE = Object.freeze(Color.fromCssColorString(\"#66CDAA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #0000CD\n * <span class=\"colorSwath\" style=\"background: #0000CD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMBLUE = Object.freeze(Color.fromCssColorString(\"#0000CD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #BA55D3\n * <span class=\"colorSwath\" style=\"background: #BA55D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMORCHID = Object.freeze(Color.fromCssColorString(\"#BA55D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9370DB\n * <span class=\"colorSwath\" style=\"background: #9370DB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMPURPLE = Object.freeze(Color.fromCssColorString(\"#9370DB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #3CB371\n * <span class=\"colorSwath\" style=\"background: #3CB371;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSEAGREEN = Object.freeze(Color.fromCssColorString(\"#3CB371\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7B68EE\n * <span class=\"colorSwath\" style=\"background: #7B68EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#7B68EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FA9A\n * <span class=\"colorSwath\" style=\"background: #00FA9A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FA9A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #48D1CC\n * <span class=\"colorSwath\" style=\"background: #48D1CC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMTURQUOISE = Object.freeze(Color.fromCssColorString(\"#48D1CC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #C71585\n * <span class=\"colorSwath\" style=\"background: #C71585;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMVIOLETRED = Object.freeze(Color.fromCssColorString(\"#C71585\"));\n\n/**\n * An immutable Color instance initialized to CSS color #191970\n * <span class=\"colorSwath\" style=\"background: #191970;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MIDNIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#191970\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5FFFA\n * <span class=\"colorSwath\" style=\"background: #F5FFFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MINTCREAM = Object.freeze(Color.fromCssColorString(\"#F5FFFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4E1\n * <span class=\"colorSwath\" style=\"background: #FFE4E1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MISTYROSE = Object.freeze(Color.fromCssColorString(\"#FFE4E1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4B5\n * <span class=\"colorSwath\" style=\"background: #FFE4B5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MOCCASIN = Object.freeze(Color.fromCssColorString(\"#FFE4B5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFDEAD\n * <span class=\"colorSwath\" style=\"background: #FFDEAD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.NAVAJOWHITE = Object.freeze(Color.fromCssColorString(\"#FFDEAD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #000080\n * <span class=\"colorSwath\" style=\"background: #000080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.NAVY = Object.freeze(Color.fromCssColorString(\"#000080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FDF5E6\n * <span class=\"colorSwath\" style=\"background: #FDF5E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLDLACE = Object.freeze(Color.fromCssColorString(\"#FDF5E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808000\n * <span class=\"colorSwath\" style=\"background: #808000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLIVE = Object.freeze(Color.fromCssColorString(\"#808000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6B8E23\n * <span class=\"colorSwath\" style=\"background: #6B8E23;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLIVEDRAB = Object.freeze(Color.fromCssColorString(\"#6B8E23\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFA500\n * <span class=\"colorSwath\" style=\"background: #FFA500;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORANGE = Object.freeze(Color.fromCssColorString(\"#FFA500\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF4500\n * <span class=\"colorSwath\" style=\"background: #FF4500;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORANGERED = Object.freeze(Color.fromCssColorString(\"#FF4500\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DA70D6\n * <span class=\"colorSwath\" style=\"background: #DA70D6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORCHID = Object.freeze(Color.fromCssColorString(\"#DA70D6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #EEE8AA\n * <span class=\"colorSwath\" style=\"background: #EEE8AA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEGOLDENROD = Object.freeze(Color.fromCssColorString(\"#EEE8AA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #98FB98\n * <span class=\"colorSwath\" style=\"background: #98FB98;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEGREEN = Object.freeze(Color.fromCssColorString(\"#98FB98\"));\n\n/**\n * An immutable Color instance initialized to CSS color #AFEEEE\n * <span class=\"colorSwath\" style=\"background: #AFEEEE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALETURQUOISE = Object.freeze(Color.fromCssColorString(\"#AFEEEE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DB7093\n * <span class=\"colorSwath\" style=\"background: #DB7093;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEVIOLETRED = Object.freeze(Color.fromCssColorString(\"#DB7093\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFEFD5\n * <span class=\"colorSwath\" style=\"background: #FFEFD5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PAPAYAWHIP = Object.freeze(Color.fromCssColorString(\"#FFEFD5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFDAB9\n * <span class=\"colorSwath\" style=\"background: #FFDAB9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PEACHPUFF = Object.freeze(Color.fromCssColorString(\"#FFDAB9\"));\n\n/**\n * An immutable Color instance initialized to CSS color #CD853F\n * <span class=\"colorSwath\" style=\"background: #CD853F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PERU = Object.freeze(Color.fromCssColorString(\"#CD853F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFC0CB\n * <span class=\"colorSwath\" style=\"background: #FFC0CB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PINK = Object.freeze(Color.fromCssColorString(\"#FFC0CB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DDA0DD\n * <span class=\"colorSwath\" style=\"background: #DDA0DD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PLUM = Object.freeze(Color.fromCssColorString(\"#DDA0DD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B0E0E6\n * <span class=\"colorSwath\" style=\"background: #B0E0E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.POWDERBLUE = Object.freeze(Color.fromCssColorString(\"#B0E0E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #800080\n * <span class=\"colorSwath\" style=\"background: #800080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PURPLE = Object.freeze(Color.fromCssColorString(\"#800080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF0000\n * <span class=\"colorSwath\" style=\"background: #FF0000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.RED = Object.freeze(Color.fromCssColorString(\"#FF0000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #BC8F8F\n * <span class=\"colorSwath\" style=\"background: #BC8F8F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ROSYBROWN = Object.freeze(Color.fromCssColorString(\"#BC8F8F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4169E1\n * <span class=\"colorSwath\" style=\"background: #4169E1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ROYALBLUE = Object.freeze(Color.fromCssColorString(\"#4169E1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B4513\n * <span class=\"colorSwath\" style=\"background: #8B4513;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SADDLEBROWN = Object.freeze(Color.fromCssColorString(\"#8B4513\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FA8072\n * <span class=\"colorSwath\" style=\"background: #FA8072;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SALMON = Object.freeze(Color.fromCssColorString(\"#FA8072\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F4A460\n * <span class=\"colorSwath\" style=\"background: #F4A460;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SANDYBROWN = Object.freeze(Color.fromCssColorString(\"#F4A460\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2E8B57\n * <span class=\"colorSwath\" style=\"background: #2E8B57;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SEAGREEN = Object.freeze(Color.fromCssColorString(\"#2E8B57\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF5EE\n * <span class=\"colorSwath\" style=\"background: #FFF5EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SEASHELL = Object.freeze(Color.fromCssColorString(\"#FFF5EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A0522D\n * <span class=\"colorSwath\" style=\"background: #A0522D;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SIENNA = Object.freeze(Color.fromCssColorString(\"#A0522D\"));\n\n/**\n * An immutable Color instance initialized to CSS color #C0C0C0\n * <span class=\"colorSwath\" style=\"background: #C0C0C0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SILVER = Object.freeze(Color.fromCssColorString(\"#C0C0C0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #87CEEB\n * <span class=\"colorSwath\" style=\"background: #87CEEB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEEB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6A5ACD\n * <span class=\"colorSwath\" style=\"background: #6A5ACD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEBLUE = Object.freeze(Color.fromCssColorString(\"#6A5ACD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #708090\n * <span class=\"colorSwath\" style=\"background: #708090;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEGRAY = Object.freeze(Color.fromCssColorString(\"#708090\"));\n\n/**\n * An immutable Color instance initialized to CSS color #708090\n * <span class=\"colorSwath\" style=\"background: #708090;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEGREY = Color.SLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #FFFAFA\n * <span class=\"colorSwath\" style=\"background: #FFFAFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SNOW = Object.freeze(Color.fromCssColorString(\"#FFFAFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FF7F\n * <span class=\"colorSwath\" style=\"background: #00FF7F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FF7F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4682B4\n * <span class=\"colorSwath\" style=\"background: #4682B4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.STEELBLUE = Object.freeze(Color.fromCssColorString(\"#4682B4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D2B48C\n * <span class=\"colorSwath\" style=\"background: #D2B48C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TAN = Object.freeze(Color.fromCssColorString(\"#D2B48C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008080\n * <span class=\"colorSwath\" style=\"background: #008080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TEAL = Object.freeze(Color.fromCssColorString(\"#008080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D8BFD8\n * <span class=\"colorSwath\" style=\"background: #D8BFD8;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.THISTLE = Object.freeze(Color.fromCssColorString(\"#D8BFD8\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF6347\n * <span class=\"colorSwath\" style=\"background: #FF6347;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TOMATO = Object.freeze(Color.fromCssColorString(\"#FF6347\"));\n\n/**\n * An immutable Color instance initialized to CSS color #40E0D0\n * <span class=\"colorSwath\" style=\"background: #40E0D0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TURQUOISE = Object.freeze(Color.fromCssColorString(\"#40E0D0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #EE82EE\n * <span class=\"colorSwath\" style=\"background: #EE82EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.VIOLET = Object.freeze(Color.fromCssColorString(\"#EE82EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5DEB3\n * <span class=\"colorSwath\" style=\"background: #F5DEB3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHEAT = Object.freeze(Color.fromCssColorString(\"#F5DEB3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFFF\n * <span class=\"colorSwath\" style=\"background: #FFFFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHITE = Object.freeze(Color.fromCssColorString(\"#FFFFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5F5F5\n * <span class=\"colorSwath\" style=\"background: #F5F5F5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHITESMOKE = Object.freeze(Color.fromCssColorString(\"#F5F5F5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFF00\n * <span class=\"colorSwath\" style=\"background: #FFFF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.YELLOW = Object.freeze(Color.fromCssColorString(\"#FFFF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9ACD32\n * <span class=\"colorSwath\" style=\"background: #9ACD32;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.YELLOWGREEN = Object.freeze(Color.fromCssColorString(\"#9ACD32\"));\n\n/**\n * An immutable Color instance initialized to CSS transparent.\n * <span class=\"colorSwath\" style=\"background: transparent;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TRANSPARENT = Object.freeze(new Color(0, 0, 0, 0));\nexport default Color;\n","import Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry color.\n *\n * @alias ColorGeometryInstanceAttribute\n * @constructor\n *\n * @param {Number} [red=1.0] The red component.\n * @param {Number} [green=1.0] The green component.\n * @param {Number} [blue=1.0] The blue component.\n * @param {Number} [alpha=1.0] The alpha component.\n *\n *\n * @example\n * var instance = new Cesium.GeometryInstance({\n * geometry : Cesium.BoxGeometry.fromDimensions({\n * dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n * }),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n * id : 'box',\n * attributes : {\n * color : new Cesium.ColorGeometryInstanceAttribute(red, green, blue, alpha)\n * }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction ColorGeometryInstanceAttribute(red, green, blue, alpha) {\n red = defaultValue(red, 1.0);\n green = defaultValue(green, 1.0);\n blue = defaultValue(blue, 1.0);\n alpha = defaultValue(alpha, 1.0);\n\n /**\n * The values for the attributes stored in a typed array.\n *\n * @type Uint8Array\n *\n * @default [255, 255, 255, 255]\n */\n this.value = new Uint8Array([\n Color.floatToByte(red),\n Color.floatToByte(green),\n Color.floatToByte(blue),\n Color.floatToByte(alpha),\n ]);\n}\n\nObject.defineProperties(ColorGeometryInstanceAttribute.prototype, {\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link ColorGeometryInstanceAttribute#value}.\n *\n * @memberof ColorGeometryInstanceAttribute.prototype\n *\n * @type {ComponentDatatype}\n * @readonly\n *\n * @default {@link ComponentDatatype.UNSIGNED_BYTE}\n */\n componentDatatype: {\n get: function () {\n return ComponentDatatype.UNSIGNED_BYTE;\n },\n },\n\n /**\n * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}.\n *\n * @memberof ColorGeometryInstanceAttribute.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default 4\n */\n componentsPerAttribute: {\n get: function () {\n return 4;\n },\n },\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n *\n * @memberof ColorGeometryInstanceAttribute.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n normalize: {\n get: function () {\n return true;\n },\n },\n});\n\n/**\n * Creates a new {@link ColorGeometryInstanceAttribute} instance given the provided {@link Color}.\n *\n * @param {Color} color The color.\n * @returns {ColorGeometryInstanceAttribute} The new {@link ColorGeometryInstanceAttribute} instance.\n *\n * @example\n * var instance = new Cesium.GeometryInstance({\n * geometry : geometry,\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.CORNFLOWERBLUE),\n * }\n * });\n */\nColorGeometryInstanceAttribute.fromColor = function (color) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(color)) {\n throw new DeveloperError(\"color is required.\");\n }\n //>>includeEnd('debug');\n\n return new ColorGeometryInstanceAttribute(\n color.red,\n color.green,\n color.blue,\n color.alpha\n );\n};\n\n/**\n * Converts a color to a typed array that can be used to assign a color attribute.\n *\n * @param {Color} color The color.\n * @param {Uint8Array} [result] The array to store the result in, if undefined a new instance will be created.\n *\n * @returns {Uint8Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA, attributes.color);\n */\nColorGeometryInstanceAttribute.toValue = function (color, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(color)) {\n throw new DeveloperError(\"color is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Uint8Array(color.toBytes());\n }\n return color.toBytes(result);\n};\n\n/**\n * Compares the provided ColorGeometryInstanceAttributes and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {ColorGeometryInstanceAttribute} [left] The first ColorGeometryInstanceAttribute.\n * @param {ColorGeometryInstanceAttribute} [right] The second ColorGeometryInstanceAttribute.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nColorGeometryInstanceAttribute.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.value[0] === right.value[0] &&\n left.value[1] === right.value[1] &&\n left.value[2] === right.value[2] &&\n left.value[3] === right.value[3])\n );\n};\nexport default ColorGeometryInstanceAttribute;\n","import defined from \"./defined.js\";\n\n/**\n * Describes a compressed texture and contains a compressed texture buffer.\n * @alias CompressedTextureBuffer\n * @constructor\n *\n * @param {PixelFormat} internalFormat The pixel format of the compressed texture.\n * @param {Number} width The width of the texture.\n * @param {Number} height The height of the texture.\n * @param {Uint8Array} buffer The compressed texture buffer.\n */\nfunction CompressedTextureBuffer(internalFormat, width, height, buffer) {\n this._format = internalFormat;\n this._width = width;\n this._height = height;\n this._buffer = buffer;\n}\n\nObject.defineProperties(CompressedTextureBuffer.prototype, {\n /**\n * The format of the compressed texture.\n * @type PixelFormat\n * @readonly\n * @memberof CompressedTextureBuffer.prototype\n */\n internalFormat: {\n get: function () {\n return this._format;\n },\n },\n /**\n * The width of the texture.\n * @type Number\n * @readonly\n * @memberof CompressedTextureBuffer.prototype\n */\n width: {\n get: function () {\n return this._width;\n },\n },\n /**\n * The height of the texture.\n * @type Number\n * @readonly\n * @memberof CompressedTextureBuffer.prototype\n */\n height: {\n get: function () {\n return this._height;\n },\n },\n /**\n * The compressed texture buffer.\n * @type Uint8Array\n * @readonly\n * @memberof CompressedTextureBuffer.prototype\n */\n bufferView: {\n get: function () {\n return this._buffer;\n },\n },\n});\n\n/**\n * Creates a shallow clone of a compressed texture buffer.\n *\n * @param {CompressedTextureBuffer} object The compressed texture buffer to be cloned.\n * @return {CompressedTextureBuffer} A shallow clone of the compressed texture buffer.\n */\nCompressedTextureBuffer.clone = function (object) {\n if (!defined(object)) {\n return undefined;\n }\n\n return new CompressedTextureBuffer(\n object._format,\n object._width,\n object._height,\n object._buffer\n );\n};\n\n/**\n * Creates a shallow clone of this compressed texture buffer.\n *\n * @return {CompressedTextureBuffer} A shallow clone of the compressed texture buffer.\n */\nCompressedTextureBuffer.prototype.clone = function () {\n return CompressedTextureBuffer.clone(this);\n};\nexport default CompressedTextureBuffer;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\n\n/**\n * @private\n */\nvar CoplanarPolygonGeometryLibrary = {};\n\nvar scratchIntersectionPoint = new Cartesian3();\nvar scratchXAxis = new Cartesian3();\nvar scratchYAxis = new Cartesian3();\nvar scratchZAxis = new Cartesian3();\nvar obbScratch = new OrientedBoundingBox();\n\nCoplanarPolygonGeometryLibrary.validOutline = function (positions) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"positions\", positions);\n //>>includeEnd('debug');\n\n var orientedBoundingBox = OrientedBoundingBox.fromPoints(\n positions,\n obbScratch\n );\n var halfAxes = orientedBoundingBox.halfAxes;\n var xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n var yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n var zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n var xMag = Cartesian3.magnitude(xAxis);\n var yMag = Cartesian3.magnitude(yAxis);\n var zMag = Cartesian3.magnitude(zAxis);\n\n // If all the points are on a line return undefined because we can't draw a polygon\n return !(\n (xMag === 0 && (yMag === 0 || zMag === 0)) ||\n (yMag === 0 && zMag === 0)\n );\n};\n\n// call after removeDuplicates\nCoplanarPolygonGeometryLibrary.computeProjectTo2DArguments = function (\n positions,\n centerResult,\n planeAxis1Result,\n planeAxis2Result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"positions\", positions);\n Check.defined(\"centerResult\", centerResult);\n Check.defined(\"planeAxis1Result\", planeAxis1Result);\n Check.defined(\"planeAxis2Result\", planeAxis2Result);\n //>>includeEnd('debug');\n\n var orientedBoundingBox = OrientedBoundingBox.fromPoints(\n positions,\n obbScratch\n );\n var halfAxes = orientedBoundingBox.halfAxes;\n var xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n var yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n var zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n var xMag = Cartesian3.magnitude(xAxis);\n var yMag = Cartesian3.magnitude(yAxis);\n var zMag = Cartesian3.magnitude(zAxis);\n var min = Math.min(xMag, yMag, zMag);\n\n // If all the points are on a line return undefined because we can't draw a polygon\n if (\n (xMag === 0 && (yMag === 0 || zMag === 0)) ||\n (yMag === 0 && zMag === 0)\n ) {\n return false;\n }\n\n var planeAxis1;\n var planeAxis2;\n\n if (min === yMag || min === zMag) {\n planeAxis1 = xAxis;\n }\n if (min === xMag) {\n planeAxis1 = yAxis;\n } else if (min === zMag) {\n planeAxis2 = yAxis;\n }\n if (min === xMag || min === yMag) {\n planeAxis2 = zAxis;\n }\n\n Cartesian3.normalize(planeAxis1, planeAxis1Result);\n Cartesian3.normalize(planeAxis2, planeAxis2Result);\n Cartesian3.clone(orientedBoundingBox.center, centerResult);\n return true;\n};\n\nfunction projectTo2D(position, center, axis1, axis2, result) {\n var v = Cartesian3.subtract(position, center, scratchIntersectionPoint);\n var x = Cartesian3.dot(axis1, v);\n var y = Cartesian3.dot(axis2, v);\n\n return Cartesian2.fromElements(x, y, result);\n}\n\nCoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction = function (\n center,\n axis1,\n axis2\n) {\n return function (positions) {\n var positionResults = new Array(positions.length);\n for (var i = 0; i < positions.length; i++) {\n positionResults[i] = projectTo2D(positions[i], center, axis1, axis2);\n }\n\n return positionResults;\n };\n};\n\nCoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction = function (\n center,\n axis1,\n axis2\n) {\n return function (position, result) {\n return projectTo2D(position, center, axis1, axis2, result);\n };\n};\nexport default CoplanarPolygonGeometryLibrary;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction calculateM(ellipticity, major, latitude) {\n if (ellipticity === 0.0) {\n // sphere\n return major * latitude;\n }\n\n var e2 = ellipticity * ellipticity;\n var e4 = e2 * e2;\n var e6 = e4 * e2;\n var e8 = e6 * e2;\n var e10 = e8 * e2;\n var e12 = e10 * e2;\n var phi = latitude;\n var sin2Phi = Math.sin(2 * phi);\n var sin4Phi = Math.sin(4 * phi);\n var sin6Phi = Math.sin(6 * phi);\n var sin8Phi = Math.sin(8 * phi);\n var sin10Phi = Math.sin(10 * phi);\n var sin12Phi = Math.sin(12 * phi);\n\n return (\n major *\n ((1 -\n e2 / 4 -\n (3 * e4) / 64 -\n (5 * e6) / 256 -\n (175 * e8) / 16384 -\n (441 * e10) / 65536 -\n (4851 * e12) / 1048576) *\n phi -\n ((3 * e2) / 8 +\n (3 * e4) / 32 +\n (45 * e6) / 1024 +\n (105 * e8) / 4096 +\n (2205 * e10) / 131072 +\n (6237 * e12) / 524288) *\n sin2Phi +\n ((15 * e4) / 256 +\n (45 * e6) / 1024 +\n (525 * e8) / 16384 +\n (1575 * e10) / 65536 +\n (155925 * e12) / 8388608) *\n sin4Phi -\n ((35 * e6) / 3072 +\n (175 * e8) / 12288 +\n (3675 * e10) / 262144 +\n (13475 * e12) / 1048576) *\n sin6Phi +\n ((315 * e8) / 131072 + (2205 * e10) / 524288 + (43659 * e12) / 8388608) *\n sin8Phi -\n ((693 * e10) / 1310720 + (6237 * e12) / 5242880) * sin10Phi +\n ((1001 * e12) / 8388608) * sin12Phi)\n );\n}\n\nfunction calculateInverseM(M, ellipticity, major) {\n var d = M / major;\n\n if (ellipticity === 0.0) {\n // sphere\n return d;\n }\n\n var d2 = d * d;\n var d3 = d2 * d;\n var d4 = d3 * d;\n var e = ellipticity;\n var e2 = e * e;\n var e4 = e2 * e2;\n var e6 = e4 * e2;\n var e8 = e6 * e2;\n var e10 = e8 * e2;\n var e12 = e10 * e2;\n var sin2D = Math.sin(2 * d);\n var cos2D = Math.cos(2 * d);\n var sin4D = Math.sin(4 * d);\n var cos4D = Math.cos(4 * d);\n var sin6D = Math.sin(6 * d);\n var cos6D = Math.cos(6 * d);\n var sin8D = Math.sin(8 * d);\n var cos8D = Math.cos(8 * d);\n var sin10D = Math.sin(10 * d);\n var cos10D = Math.cos(10 * d);\n var sin12D = Math.sin(12 * d);\n\n return (\n d +\n (d * e2) / 4 +\n (7 * d * e4) / 64 +\n (15 * d * e6) / 256 +\n (579 * d * e8) / 16384 +\n (1515 * d * e10) / 65536 +\n (16837 * d * e12) / 1048576 +\n ((3 * d * e4) / 16 +\n (45 * d * e6) / 256 -\n (d * (32 * d2 - 561) * e8) / 4096 -\n (d * (232 * d2 - 1677) * e10) / 16384 +\n (d * (399985 - 90560 * d2 + 512 * d4) * e12) / 5242880) *\n cos2D +\n ((21 * d * e6) / 256 +\n (483 * d * e8) / 4096 -\n (d * (224 * d2 - 1969) * e10) / 16384 -\n (d * (33152 * d2 - 112599) * e12) / 1048576) *\n cos4D +\n ((151 * d * e8) / 4096 +\n (4681 * d * e10) / 65536 +\n (1479 * d * e12) / 16384 -\n (453 * d3 * e12) / 32768) *\n cos6D +\n ((1097 * d * e10) / 65536 + (42783 * d * e12) / 1048576) * cos8D +\n ((8011 * d * e12) / 1048576) * cos10D +\n ((3 * e2) / 8 +\n (3 * e4) / 16 +\n (213 * e6) / 2048 -\n (3 * d2 * e6) / 64 +\n (255 * e8) / 4096 -\n (33 * d2 * e8) / 512 +\n (20861 * e10) / 524288 -\n (33 * d2 * e10) / 512 +\n (d4 * e10) / 1024 +\n (28273 * e12) / 1048576 -\n (471 * d2 * e12) / 8192 +\n (9 * d4 * e12) / 4096) *\n sin2D +\n ((21 * e4) / 256 +\n (21 * e6) / 256 +\n (533 * e8) / 8192 -\n (21 * d2 * e8) / 512 +\n (197 * e10) / 4096 -\n (315 * d2 * e10) / 4096 +\n (584039 * e12) / 16777216 -\n (12517 * d2 * e12) / 131072 +\n (7 * d4 * e12) / 2048) *\n sin4D +\n ((151 * e6) / 6144 +\n (151 * e8) / 4096 +\n (5019 * e10) / 131072 -\n (453 * d2 * e10) / 16384 +\n (26965 * e12) / 786432 -\n (8607 * d2 * e12) / 131072) *\n sin6D +\n ((1097 * e8) / 131072 +\n (1097 * e10) / 65536 +\n (225797 * e12) / 10485760 -\n (1097 * d2 * e12) / 65536) *\n sin8D +\n ((8011 * e10) / 2621440 + (8011 * e12) / 1048576) * sin10D +\n ((293393 * e12) / 251658240) * sin12D\n );\n}\n\nfunction calculateSigma(ellipticity, latitude) {\n if (ellipticity === 0.0) {\n // sphere\n return Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude)));\n }\n\n var eSinL = ellipticity * Math.sin(latitude);\n return (\n Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude))) -\n (ellipticity / 2.0) * Math.log((1 + eSinL) / (1 - eSinL))\n );\n}\n\nfunction calculateHeading(\n ellipsoidRhumbLine,\n firstLongitude,\n firstLatitude,\n secondLongitude,\n secondLatitude\n) {\n var sigma1 = calculateSigma(ellipsoidRhumbLine._ellipticity, firstLatitude);\n var sigma2 = calculateSigma(ellipsoidRhumbLine._ellipticity, secondLatitude);\n return Math.atan2(\n CesiumMath.negativePiToPi(secondLongitude - firstLongitude),\n sigma2 - sigma1\n );\n}\n\nfunction calculateArcLength(\n ellipsoidRhumbLine,\n major,\n minor,\n firstLongitude,\n firstLatitude,\n secondLongitude,\n secondLatitude\n) {\n var heading = ellipsoidRhumbLine._heading;\n var deltaLongitude = secondLongitude - firstLongitude;\n\n var distance = 0.0;\n\n //Check to see if the rhumb line has constant latitude\n //This equation will diverge if heading gets close to 90 degrees\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(heading),\n CesiumMath.PI_OVER_TWO,\n CesiumMath.EPSILON8\n )\n ) {\n //If heading is close to 90 degrees\n if (major === minor) {\n distance =\n major *\n Math.cos(firstLatitude) *\n CesiumMath.negativePiToPi(deltaLongitude);\n } else {\n var sinPhi = Math.sin(firstLatitude);\n distance =\n (major *\n Math.cos(firstLatitude) *\n CesiumMath.negativePiToPi(deltaLongitude)) /\n Math.sqrt(1 - ellipsoidRhumbLine._ellipticitySquared * sinPhi * sinPhi);\n }\n } else {\n var M1 = calculateM(ellipsoidRhumbLine._ellipticity, major, firstLatitude);\n var M2 = calculateM(ellipsoidRhumbLine._ellipticity, major, secondLatitude);\n\n distance = (M2 - M1) / Math.cos(heading);\n }\n return Math.abs(distance);\n}\n\nvar scratchCart1 = new Cartesian3();\nvar scratchCart2 = new Cartesian3();\n\nfunction computeProperties(ellipsoidRhumbLine, start, end, ellipsoid) {\n var firstCartesian = Cartesian3.normalize(\n ellipsoid.cartographicToCartesian(start, scratchCart2),\n scratchCart1\n );\n var lastCartesian = Cartesian3.normalize(\n ellipsoid.cartographicToCartesian(end, scratchCart2),\n scratchCart2\n );\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\n \"value\",\n Math.abs(\n Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI\n ),\n 0.0125\n );\n //>>includeEnd('debug');\n\n var major = ellipsoid.maximumRadius;\n var minor = ellipsoid.minimumRadius;\n var majorSquared = major * major;\n var minorSquared = minor * minor;\n ellipsoidRhumbLine._ellipticitySquared =\n (majorSquared - minorSquared) / majorSquared;\n ellipsoidRhumbLine._ellipticity = Math.sqrt(\n ellipsoidRhumbLine._ellipticitySquared\n );\n\n ellipsoidRhumbLine._start = Cartographic.clone(\n start,\n ellipsoidRhumbLine._start\n );\n ellipsoidRhumbLine._start.height = 0;\n\n ellipsoidRhumbLine._end = Cartographic.clone(end, ellipsoidRhumbLine._end);\n ellipsoidRhumbLine._end.height = 0;\n\n ellipsoidRhumbLine._heading = calculateHeading(\n ellipsoidRhumbLine,\n start.longitude,\n start.latitude,\n end.longitude,\n end.latitude\n );\n ellipsoidRhumbLine._distance = calculateArcLength(\n ellipsoidRhumbLine,\n ellipsoid.maximumRadius,\n ellipsoid.minimumRadius,\n start.longitude,\n start.latitude,\n end.longitude,\n end.latitude\n );\n}\n\nfunction interpolateUsingSurfaceDistance(\n start,\n heading,\n distance,\n major,\n ellipticity,\n result\n) {\n var ellipticitySquared = ellipticity * ellipticity;\n\n var longitude;\n var latitude;\n var deltaLongitude;\n\n //Check to see if the rhumb line has constant latitude\n //This won't converge if heading is close to 90 degrees\n if (\n Math.abs(CesiumMath.PI_OVER_TWO - Math.abs(heading)) > CesiumMath.EPSILON8\n ) {\n //Calculate latitude of the second point\n var M1 = calculateM(ellipticity, major, start.latitude);\n var deltaM = distance * Math.cos(heading);\n var M2 = M1 + deltaM;\n latitude = calculateInverseM(M2, ellipticity, major);\n\n //Now find the longitude of the second point\n var sigma1 = calculateSigma(ellipticity, start.latitude);\n var sigma2 = calculateSigma(ellipticity, latitude);\n deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\n longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n } else {\n //If heading is close to 90 degrees\n latitude = start.latitude;\n var localRad;\n\n if (ellipticity === 0.0) {\n // sphere\n localRad = major * Math.cos(start.latitude);\n } else {\n var sinPhi = Math.sin(start.latitude);\n localRad =\n (major * Math.cos(start.latitude)) /\n Math.sqrt(1 - ellipticitySquared * sinPhi * sinPhi);\n }\n\n deltaLongitude = distance / localRad;\n if (heading > 0.0) {\n longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n } else {\n longitude = CesiumMath.negativePiToPi(start.longitude - deltaLongitude);\n }\n }\n\n if (defined(result)) {\n result.longitude = longitude;\n result.latitude = latitude;\n result.height = 0;\n\n return result;\n }\n\n return new Cartographic(longitude, latitude, 0);\n}\n\n/**\n * Initializes a rhumb line on the ellipsoid connecting the two provided planetodetic points.\n *\n * @alias EllipsoidRhumbLine\n * @constructor\n *\n * @param {Cartographic} [start] The initial planetodetic point on the path.\n * @param {Cartographic} [end] The final planetodetic point on the path.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies.\n *\n * @exception {DeveloperError} angle between start and end must be at least 0.0125 radians.\n */\nfunction EllipsoidRhumbLine(start, end, ellipsoid) {\n var e = defaultValue(ellipsoid, Ellipsoid.WGS84);\n this._ellipsoid = e;\n this._start = new Cartographic();\n this._end = new Cartographic();\n\n this._heading = undefined;\n this._distance = undefined;\n this._ellipticity = undefined;\n this._ellipticitySquared = undefined;\n\n if (defined(start) && defined(end)) {\n computeProperties(this, start, end, e);\n }\n}\n\nObject.defineProperties(EllipsoidRhumbLine.prototype, {\n /**\n * Gets the ellipsoid.\n * @memberof EllipsoidRhumbLine.prototype\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Gets the surface distance between the start and end point\n * @memberof EllipsoidRhumbLine.prototype\n * @type {Number}\n * @readonly\n */\n surfaceDistance: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n return this._distance;\n },\n },\n\n /**\n * Gets the initial planetodetic point on the path.\n * @memberof EllipsoidRhumbLine.prototype\n * @type {Cartographic}\n * @readonly\n */\n start: {\n get: function () {\n return this._start;\n },\n },\n\n /**\n * Gets the final planetodetic point on the path.\n * @memberof EllipsoidRhumbLine.prototype\n * @type {Cartographic}\n * @readonly\n */\n end: {\n get: function () {\n return this._end;\n },\n },\n\n /**\n * Gets the heading from the start point to the end point.\n * @memberof EllipsoidRhumbLine.prototype\n * @type {Number}\n * @readonly\n */\n heading: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n return this._heading;\n },\n },\n});\n\n/**\n * Create a rhumb line using an initial position with a heading and distance.\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {Number} heading The heading in radians.\n * @param {Number} distance The rhumb line distance between the start and end point.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies.\n * @param {EllipsoidRhumbLine} [result] The object in which to store the result.\n * @returns {EllipsoidRhumbLine} The EllipsoidRhumbLine object.\n */\nEllipsoidRhumbLine.fromStartHeadingDistance = function (\n start,\n heading,\n distance,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"start\", start);\n Check.defined(\"heading\", heading);\n Check.defined(\"distance\", distance);\n Check.typeOf.number.greaterThan(\"distance\", distance, 0.0);\n //>>includeEnd('debug');\n\n var e = defaultValue(ellipsoid, Ellipsoid.WGS84);\n var major = e.maximumRadius;\n var minor = e.minimumRadius;\n var majorSquared = major * major;\n var minorSquared = minor * minor;\n var ellipticity = Math.sqrt((majorSquared - minorSquared) / majorSquared);\n\n heading = CesiumMath.negativePiToPi(heading);\n var end = interpolateUsingSurfaceDistance(\n start,\n heading,\n distance,\n e.maximumRadius,\n ellipticity\n );\n\n if (\n !defined(result) ||\n (defined(ellipsoid) && !ellipsoid.equals(result.ellipsoid))\n ) {\n return new EllipsoidRhumbLine(start, end, e);\n }\n\n result.setEndPoints(start, end);\n return result;\n};\n\n/**\n * Sets the start and end points of the rhumb line.\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {Cartographic} end The final planetodetic point on the path.\n */\nEllipsoidRhumbLine.prototype.setEndPoints = function (start, end) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"start\", start);\n Check.defined(\"end\", end);\n //>>includeEnd('debug');\n\n computeProperties(this, start, end, this._ellipsoid);\n};\n\n/**\n * Provides the location of a point at the indicated portion along the rhumb line.\n *\n * @param {Number} fraction The portion of the distance between the initial and final points.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the rhumb line.\n */\nEllipsoidRhumbLine.prototype.interpolateUsingFraction = function (\n fraction,\n result\n) {\n return this.interpolateUsingSurfaceDistance(\n fraction * this._distance,\n result\n );\n};\n\n/**\n * Provides the location of a point at the indicated distance along the rhumb line.\n *\n * @param {Number} distance The distance from the inital point to the point of interest along the rhumbLine.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the rhumb line.\n *\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\n */\nEllipsoidRhumbLine.prototype.interpolateUsingSurfaceDistance = function (\n distance,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"distance\", distance);\n if (!defined(this._distance) || this._distance === 0.0) {\n throw new DeveloperError(\n \"EllipsoidRhumbLine must have distinct start and end set.\"\n );\n }\n //>>includeEnd('debug');\n\n return interpolateUsingSurfaceDistance(\n this._start,\n this._heading,\n distance,\n this._ellipsoid.maximumRadius,\n this._ellipticity,\n result\n );\n};\n\n/**\n * Provides the location of a point at the indicated longitude along the rhumb line.\n * If the longitude is outside the range of start and end points, the first intersection with the longitude from the start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\n *\n * @param {Number} intersectionLongitude The longitude, in radians, at which to find the intersection point from the starting point using the heading.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\n *\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\n */\nEllipsoidRhumbLine.prototype.findIntersectionWithLongitude = function (\n intersectionLongitude,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"intersectionLongitude\", intersectionLongitude);\n if (!defined(this._distance) || this._distance === 0.0) {\n throw new DeveloperError(\n \"EllipsoidRhumbLine must have distinct start and end set.\"\n );\n }\n //>>includeEnd('debug');\n\n var ellipticity = this._ellipticity;\n var heading = this._heading;\n var absHeading = Math.abs(heading);\n var start = this._start;\n\n intersectionLongitude = CesiumMath.negativePiToPi(intersectionLongitude);\n\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(intersectionLongitude),\n Math.PI,\n CesiumMath.EPSILON14\n )\n ) {\n intersectionLongitude = CesiumMath.sign(start.longitude) * Math.PI;\n }\n\n if (!defined(result)) {\n result = new Cartographic();\n }\n\n // If heading is -PI/2 or PI/2, this is an E-W rhumb line\n // If heading is 0 or PI, this is an N-S rhumb line\n if (Math.abs(CesiumMath.PI_OVER_TWO - absHeading) <= CesiumMath.EPSILON8) {\n result.longitude = intersectionLongitude;\n result.latitude = start.latitude;\n result.height = 0;\n return result;\n } else if (\n CesiumMath.equalsEpsilon(\n Math.abs(CesiumMath.PI_OVER_TWO - absHeading),\n CesiumMath.PI_OVER_TWO,\n CesiumMath.EPSILON8\n )\n ) {\n if (\n CesiumMath.equalsEpsilon(\n intersectionLongitude,\n start.longitude,\n CesiumMath.EPSILON12\n )\n ) {\n return undefined;\n }\n\n result.longitude = intersectionLongitude;\n result.latitude =\n CesiumMath.PI_OVER_TWO *\n CesiumMath.sign(CesiumMath.PI_OVER_TWO - heading);\n result.height = 0;\n return result;\n }\n\n // Use iterative solver from Equation 9 from http://edwilliams.org/ellipsoid/ellipsoid.pdf\n var phi1 = start.latitude;\n var eSinPhi1 = ellipticity * Math.sin(phi1);\n var leftComponent =\n Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + phi1)) *\n Math.exp((intersectionLongitude - start.longitude) / Math.tan(heading));\n var denominator = (1 + eSinPhi1) / (1 - eSinPhi1);\n\n var newPhi = start.latitude;\n var phi;\n do {\n phi = newPhi;\n var eSinPhi = ellipticity * Math.sin(phi);\n var numerator = (1 + eSinPhi) / (1 - eSinPhi);\n newPhi =\n 2 *\n Math.atan(\n leftComponent * Math.pow(numerator / denominator, ellipticity / 2)\n ) -\n CesiumMath.PI_OVER_TWO;\n } while (!CesiumMath.equalsEpsilon(newPhi, phi, CesiumMath.EPSILON12));\n\n result.longitude = intersectionLongitude;\n result.latitude = newPhi;\n result.height = 0;\n return result;\n};\n\n/**\n * Provides the location of a point at the indicated latitude along the rhumb line.\n * If the latitude is outside the range of start and end points, the first intersection with the latitude from that start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\n *\n * @param {Number} intersectionLatitude The latitude, in radians, at which to find the intersection point from the starting point using the heading.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\n *\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\n */\nEllipsoidRhumbLine.prototype.findIntersectionWithLatitude = function (\n intersectionLatitude,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"intersectionLatitude\", intersectionLatitude);\n if (!defined(this._distance) || this._distance === 0.0) {\n throw new DeveloperError(\n \"EllipsoidRhumbLine must have distinct start and end set.\"\n );\n }\n //>>includeEnd('debug');\n\n var ellipticity = this._ellipticity;\n var heading = this._heading;\n var start = this._start;\n\n // If start and end have same latitude, return undefined since it's either no intersection or infinite intersections\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(heading),\n CesiumMath.PI_OVER_TWO,\n CesiumMath.EPSILON8\n )\n ) {\n return;\n }\n\n // Can be solved using the same equations from interpolateUsingSurfaceDistance\n var sigma1 = calculateSigma(ellipticity, start.latitude);\n var sigma2 = calculateSigma(ellipticity, intersectionLatitude);\n var deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\n var longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n\n if (defined(result)) {\n result.longitude = longitude;\n result.latitude = intersectionLatitude;\n result.height = 0;\n\n return result;\n }\n\n return new Cartographic(longitude, intersectionLatitude, 0);\n};\nexport default EllipsoidRhumbLine;\n","function earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n outerNode = findHoleBridge(hole, outerNode);\n if (outerNode) {\n var b = splitPolygon(outerNode, hole);\n filterPoints(b, b.next);\n }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n\nexport default earcut;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * Winding order defines the order of vertices for a triangle to be considered front-facing.\n *\n * @enum {Number}\n */\nvar WindingOrder = {\n /**\n * Vertices are in clockwise order.\n *\n * @type {Number}\n * @constant\n */\n CLOCKWISE: WebGLConstants.CW,\n\n /**\n * Vertices are in counter-clockwise order.\n *\n * @type {Number}\n * @constant\n */\n COUNTER_CLOCKWISE: WebGLConstants.CCW,\n};\n\n/**\n * @private\n */\nWindingOrder.validate = function (windingOrder) {\n return (\n windingOrder === WindingOrder.CLOCKWISE ||\n windingOrder === WindingOrder.COUNTER_CLOCKWISE\n );\n};\n\nexport default Object.freeze(WindingOrder);\n","import earcut from \"../ThirdParty/earcut-2.2.1.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nvar scaleToGeodeticHeightN = new Cartesian3();\nvar scaleToGeodeticHeightP = new Cartesian3();\n\n/**\n * @private\n */\nvar PolygonPipeline = {};\n\n/**\n * @exception {DeveloperError} At least three positions are required.\n */\nPolygonPipeline.computeArea2D = function (positions) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"positions\", positions);\n Check.typeOf.number.greaterThanOrEquals(\n \"positions.length\",\n positions.length,\n 3\n );\n //>>includeEnd('debug');\n\n var length = positions.length;\n var area = 0.0;\n\n for (var i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\n var v0 = positions[i0];\n var v1 = positions[i1];\n\n area += v0.x * v1.y - v1.x * v0.y;\n }\n\n return area * 0.5;\n};\n\n/**\n * @returns {WindingOrder} The winding order.\n *\n * @exception {DeveloperError} At least three positions are required.\n */\nPolygonPipeline.computeWindingOrder2D = function (positions) {\n var area = PolygonPipeline.computeArea2D(positions);\n return area > 0.0 ? WindingOrder.COUNTER_CLOCKWISE : WindingOrder.CLOCKWISE;\n};\n\n/**\n * Triangulate a polygon.\n *\n * @param {Cartesian2[]} positions Cartesian2 array containing the vertices of the polygon\n * @param {Number[]} [holes] An array of the staring indices of the holes.\n * @returns {Number[]} Index array representing triangles that fill the polygon\n */\nPolygonPipeline.triangulate = function (positions, holes) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"positions\", positions);\n //>>includeEnd('debug');\n\n var flattenedPositions = Cartesian2.packArray(positions);\n return earcut(flattenedPositions, holes, 2);\n};\n\nvar subdivisionV0Scratch = new Cartesian3();\nvar subdivisionV1Scratch = new Cartesian3();\nvar subdivisionV2Scratch = new Cartesian3();\nvar subdivisionS0Scratch = new Cartesian3();\nvar subdivisionS1Scratch = new Cartesian3();\nvar subdivisionS2Scratch = new Cartesian3();\nvar subdivisionMidScratch = new Cartesian3();\n\n/**\n * Subdivides positions and raises points to the surface of the ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\n * @param {Number[]} indices An array of indices that determines the triangles in the polygon.\n * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n *\n * @exception {DeveloperError} At least three indices are required.\n * @exception {DeveloperError} The number of indices must be divisable by three.\n * @exception {DeveloperError} Granularity must be greater than zero.\n */\nPolygonPipeline.computeSubdivision = function (\n ellipsoid,\n positions,\n indices,\n granularity\n) {\n granularity = defaultValue(granularity, CesiumMath.RADIANS_PER_DEGREE);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n Check.defined(\"positions\", positions);\n Check.defined(\"indices\", indices);\n Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\n Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\n Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\n //>>includeEnd('debug');\n\n // triangles that need (or might need) to be subdivided.\n var triangles = indices.slice(0);\n\n // New positions due to edge splits are appended to the positions list.\n var i;\n var length = positions.length;\n var subdividedPositions = new Array(length * 3);\n var q = 0;\n for (i = 0; i < length; i++) {\n var item = positions[i];\n subdividedPositions[q++] = item.x;\n subdividedPositions[q++] = item.y;\n subdividedPositions[q++] = item.z;\n }\n\n var subdividedIndices = [];\n\n // Used to make sure shared edges are not split more than once.\n var edges = {};\n\n var radius = ellipsoid.maximumRadius;\n var minDistance = CesiumMath.chordLength(granularity, radius);\n var minDistanceSqrd = minDistance * minDistance;\n\n while (triangles.length > 0) {\n var i2 = triangles.pop();\n var i1 = triangles.pop();\n var i0 = triangles.pop();\n\n var v0 = Cartesian3.fromArray(\n subdividedPositions,\n i0 * 3,\n subdivisionV0Scratch\n );\n var v1 = Cartesian3.fromArray(\n subdividedPositions,\n i1 * 3,\n subdivisionV1Scratch\n );\n var v2 = Cartesian3.fromArray(\n subdividedPositions,\n i2 * 3,\n subdivisionV2Scratch\n );\n\n var s0 = Cartesian3.multiplyByScalar(\n Cartesian3.normalize(v0, subdivisionS0Scratch),\n radius,\n subdivisionS0Scratch\n );\n var s1 = Cartesian3.multiplyByScalar(\n Cartesian3.normalize(v1, subdivisionS1Scratch),\n radius,\n subdivisionS1Scratch\n );\n var s2 = Cartesian3.multiplyByScalar(\n Cartesian3.normalize(v2, subdivisionS2Scratch),\n radius,\n subdivisionS2Scratch\n );\n\n var g0 = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(s0, s1, subdivisionMidScratch)\n );\n var g1 = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(s1, s2, subdivisionMidScratch)\n );\n var g2 = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(s2, s0, subdivisionMidScratch)\n );\n\n var max = Math.max(g0, g1, g2);\n var edge;\n var mid;\n\n // if the max length squared of a triangle edge is greater than the chord length of squared\n // of the granularity, subdivide the triangle\n if (max > minDistanceSqrd) {\n if (g0 === max) {\n edge = Math.min(i0, i1) + \" \" + Math.max(i0, i1);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = Cartesian3.add(v0, v1, subdivisionMidScratch);\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\n subdividedPositions.push(mid.x, mid.y, mid.z);\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i0, i, i2);\n triangles.push(i, i1, i2);\n } else if (g1 === max) {\n edge = Math.min(i1, i2) + \" \" + Math.max(i1, i2);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = Cartesian3.add(v1, v2, subdivisionMidScratch);\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\n subdividedPositions.push(mid.x, mid.y, mid.z);\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i1, i, i0);\n triangles.push(i, i2, i0);\n } else if (g2 === max) {\n edge = Math.min(i2, i0) + \" \" + Math.max(i2, i0);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = Cartesian3.add(v2, v0, subdivisionMidScratch);\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\n subdividedPositions.push(mid.x, mid.y, mid.z);\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i2, i, i1);\n triangles.push(i, i0, i1);\n }\n } else {\n subdividedIndices.push(i0);\n subdividedIndices.push(i1);\n subdividedIndices.push(i2);\n }\n }\n\n return new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: subdividedPositions,\n }),\n },\n indices: subdividedIndices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n};\n\nvar subdivisionC0Scratch = new Cartographic();\nvar subdivisionC1Scratch = new Cartographic();\nvar subdivisionC2Scratch = new Cartographic();\nvar subdivisionCartographicScratch = new Cartographic();\n\n/**\n * Subdivides positions on rhumb lines and raises points to the surface of the ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\n * @param {Number[]} indices An array of indices that determines the triangles in the polygon.\n * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n *\n * @exception {DeveloperError} At least three indices are required.\n * @exception {DeveloperError} The number of indices must be divisable by three.\n * @exception {DeveloperError} Granularity must be greater than zero.\n */\nPolygonPipeline.computeRhumbLineSubdivision = function (\n ellipsoid,\n positions,\n indices,\n granularity\n) {\n granularity = defaultValue(granularity, CesiumMath.RADIANS_PER_DEGREE);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n Check.defined(\"positions\", positions);\n Check.defined(\"indices\", indices);\n Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\n Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\n Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\n //>>includeEnd('debug');\n\n // triangles that need (or might need) to be subdivided.\n var triangles = indices.slice(0);\n\n // New positions due to edge splits are appended to the positions list.\n var i;\n var length = positions.length;\n var subdividedPositions = new Array(length * 3);\n var q = 0;\n for (i = 0; i < length; i++) {\n var item = positions[i];\n subdividedPositions[q++] = item.x;\n subdividedPositions[q++] = item.y;\n subdividedPositions[q++] = item.z;\n }\n\n var subdividedIndices = [];\n\n // Used to make sure shared edges are not split more than once.\n var edges = {};\n\n var radius = ellipsoid.maximumRadius;\n var minDistance = CesiumMath.chordLength(granularity, radius);\n\n var rhumb0 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n var rhumb1 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n var rhumb2 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n\n while (triangles.length > 0) {\n var i2 = triangles.pop();\n var i1 = triangles.pop();\n var i0 = triangles.pop();\n\n var v0 = Cartesian3.fromArray(\n subdividedPositions,\n i0 * 3,\n subdivisionV0Scratch\n );\n var v1 = Cartesian3.fromArray(\n subdividedPositions,\n i1 * 3,\n subdivisionV1Scratch\n );\n var v2 = Cartesian3.fromArray(\n subdividedPositions,\n i2 * 3,\n subdivisionV2Scratch\n );\n\n var c0 = ellipsoid.cartesianToCartographic(v0, subdivisionC0Scratch);\n var c1 = ellipsoid.cartesianToCartographic(v1, subdivisionC1Scratch);\n var c2 = ellipsoid.cartesianToCartographic(v2, subdivisionC2Scratch);\n\n rhumb0.setEndPoints(c0, c1);\n var g0 = rhumb0.surfaceDistance;\n rhumb1.setEndPoints(c1, c2);\n var g1 = rhumb1.surfaceDistance;\n rhumb2.setEndPoints(c2, c0);\n var g2 = rhumb2.surfaceDistance;\n\n var max = Math.max(g0, g1, g2);\n var edge;\n var mid;\n var midHeight;\n var midCartesian3;\n\n // if the max length squared of a triangle edge is greater than granularity, subdivide the triangle\n if (max > minDistance) {\n if (g0 === max) {\n edge = Math.min(i0, i1) + \" \" + Math.max(i0, i1);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = rhumb0.interpolateUsingFraction(\n 0.5,\n subdivisionCartographicScratch\n );\n midHeight = (c0.height + c1.height) * 0.5;\n midCartesian3 = Cartesian3.fromRadians(\n mid.longitude,\n mid.latitude,\n midHeight,\n ellipsoid,\n subdivisionMidScratch\n );\n subdividedPositions.push(\n midCartesian3.x,\n midCartesian3.y,\n midCartesian3.z\n );\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i0, i, i2);\n triangles.push(i, i1, i2);\n } else if (g1 === max) {\n edge = Math.min(i1, i2) + \" \" + Math.max(i1, i2);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = rhumb1.interpolateUsingFraction(\n 0.5,\n subdivisionCartographicScratch\n );\n midHeight = (c1.height + c2.height) * 0.5;\n midCartesian3 = Cartesian3.fromRadians(\n mid.longitude,\n mid.latitude,\n midHeight,\n ellipsoid,\n subdivisionMidScratch\n );\n subdividedPositions.push(\n midCartesian3.x,\n midCartesian3.y,\n midCartesian3.z\n );\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i1, i, i0);\n triangles.push(i, i2, i0);\n } else if (g2 === max) {\n edge = Math.min(i2, i0) + \" \" + Math.max(i2, i0);\n\n i = edges[edge];\n if (!defined(i)) {\n mid = rhumb2.interpolateUsingFraction(\n 0.5,\n subdivisionCartographicScratch\n );\n midHeight = (c2.height + c0.height) * 0.5;\n midCartesian3 = Cartesian3.fromRadians(\n mid.longitude,\n mid.latitude,\n midHeight,\n ellipsoid,\n subdivisionMidScratch\n );\n subdividedPositions.push(\n midCartesian3.x,\n midCartesian3.y,\n midCartesian3.z\n );\n i = subdividedPositions.length / 3 - 1;\n edges[edge] = i;\n }\n\n triangles.push(i2, i, i1);\n triangles.push(i, i0, i1);\n }\n } else {\n subdividedIndices.push(i0);\n subdividedIndices.push(i1);\n subdividedIndices.push(i2);\n }\n }\n\n return new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: subdividedPositions,\n }),\n },\n indices: subdividedIndices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n};\n\n/**\n * Scales each position of a geometry's position attribute to a height, in place.\n *\n * @param {Number[]} positions The array of numbers representing the positions to be scaled\n * @param {Number} [height=0.0] The desired height to add to the positions\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\n * @param {Boolean} [scaleToSurface=true] <code>true</code> if the positions need to be scaled to the surface before the height is added.\n * @returns {Number[]} The input array of positions, scaled to height\n */\nPolygonPipeline.scaleToGeodeticHeight = function (\n positions,\n height,\n ellipsoid,\n scaleToSurface\n) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var n = scaleToGeodeticHeightN;\n var p = scaleToGeodeticHeightP;\n\n height = defaultValue(height, 0.0);\n scaleToSurface = defaultValue(scaleToSurface, true);\n\n if (defined(positions)) {\n var length = positions.length;\n\n for (var i = 0; i < length; i += 3) {\n Cartesian3.fromArray(positions, i, p);\n\n if (scaleToSurface) {\n p = ellipsoid.scaleToGeodeticSurface(p, p);\n }\n\n if (height !== 0) {\n n = ellipsoid.geodeticSurfaceNormal(p, n);\n\n Cartesian3.multiplyByScalar(n, height, n);\n Cartesian3.add(p, n, p);\n }\n\n positions[i] = p.x;\n positions[i + 1] = p.y;\n positions[i + 2] = p.z;\n }\n }\n\n return positions;\n};\nexport default PolygonPipeline;\n","/**\n * A queue that can enqueue items at the end, and dequeue items from the front.\n *\n * @alias Queue\n * @constructor\n */\nfunction Queue() {\n this._array = [];\n this._offset = 0;\n this._length = 0;\n}\n\nObject.defineProperties(Queue.prototype, {\n /**\n * The length of the queue.\n *\n * @memberof Queue.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._length;\n },\n },\n});\n\n/**\n * Enqueues the specified item.\n *\n * @param {*} item The item to enqueue.\n */\nQueue.prototype.enqueue = function (item) {\n this._array.push(item);\n this._length++;\n};\n\n/**\n * Dequeues an item. Returns undefined if the queue is empty.\n *\n * @returns {*} The the dequeued item.\n */\nQueue.prototype.dequeue = function () {\n if (this._length === 0) {\n return undefined;\n }\n\n var array = this._array;\n var offset = this._offset;\n var item = array[offset];\n array[offset] = undefined;\n\n offset++;\n if (offset > 10 && offset * 2 > array.length) {\n //compact array\n this._array = array.slice(offset);\n offset = 0;\n }\n\n this._offset = offset;\n this._length--;\n\n return item;\n};\n\n/**\n * Returns the item at the front of the queue. Returns undefined if the queue is empty.\n *\n * @returns {*} The item at the front of the queue.\n */\nQueue.prototype.peek = function () {\n if (this._length === 0) {\n return undefined;\n }\n\n return this._array[this._offset];\n};\n\n/**\n * Check whether this queue contains the specified item.\n *\n * @param {*} item The item to search for.\n */\nQueue.prototype.contains = function (item) {\n return this._array.indexOf(item) !== -1;\n};\n\n/**\n * Remove all items from the queue.\n */\nQueue.prototype.clear = function () {\n this._array.length = this._offset = this._length = 0;\n};\n\n/**\n * Sort the items in the queue in-place.\n *\n * @param {Queue.Comparator} compareFunction A function that defines the sort order.\n */\nQueue.prototype.sort = function (compareFunction) {\n if (this._offset > 0) {\n //compact array\n this._array = this._array.slice(this._offset);\n this._offset = 0;\n }\n\n this._array.sort(compareFunction);\n};\n\n/**\n * A function used to compare two items while sorting a queue.\n * @callback Queue.Comparator\n *\n * @param {*} a An item in the array.\n * @param {*} b An item in the array.\n * @returns {Number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n * a positive value if <code>a</code> is greater than <code>b</code>, or\n * 0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b) {\n * return a - b;\n * }\n */\nexport default Queue;\n","import ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Queue from \"./Queue.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\n/**\n * @private\n */\nvar PolygonGeometryLibrary = {};\n\nPolygonGeometryLibrary.computeHierarchyPackedLength = function (\n polygonHierarchy\n) {\n var numComponents = 0;\n var stack = [polygonHierarchy];\n while (stack.length > 0) {\n var hierarchy = stack.pop();\n if (!defined(hierarchy)) {\n continue;\n }\n\n numComponents += 2;\n\n var positions = hierarchy.positions;\n var holes = hierarchy.holes;\n\n if (defined(positions)) {\n numComponents += positions.length * Cartesian3.packedLength;\n }\n\n if (defined(holes)) {\n var length = holes.length;\n for (var i = 0; i < length; ++i) {\n stack.push(holes[i]);\n }\n }\n }\n\n return numComponents;\n};\n\nPolygonGeometryLibrary.packPolygonHierarchy = function (\n polygonHierarchy,\n array,\n startingIndex\n) {\n var stack = [polygonHierarchy];\n while (stack.length > 0) {\n var hierarchy = stack.pop();\n if (!defined(hierarchy)) {\n continue;\n }\n\n var positions = hierarchy.positions;\n var holes = hierarchy.holes;\n\n array[startingIndex++] = defined(positions) ? positions.length : 0;\n array[startingIndex++] = defined(holes) ? holes.length : 0;\n\n if (defined(positions)) {\n var positionsLength = positions.length;\n for (var i = 0; i < positionsLength; ++i, startingIndex += 3) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n }\n\n if (defined(holes)) {\n var holesLength = holes.length;\n for (var j = 0; j < holesLength; ++j) {\n stack.push(holes[j]);\n }\n }\n }\n\n return startingIndex;\n};\n\nPolygonGeometryLibrary.unpackPolygonHierarchy = function (\n array,\n startingIndex\n) {\n var positionsLength = array[startingIndex++];\n var holesLength = array[startingIndex++];\n\n var positions = new Array(positionsLength);\n var holes = holesLength > 0 ? new Array(holesLength) : undefined;\n\n for (\n var i = 0;\n i < positionsLength;\n ++i, startingIndex += Cartesian3.packedLength\n ) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n for (var j = 0; j < holesLength; ++j) {\n holes[j] = PolygonGeometryLibrary.unpackPolygonHierarchy(\n array,\n startingIndex\n );\n startingIndex = holes[j].startingIndex;\n delete holes[j].startingIndex;\n }\n\n return {\n positions: positions,\n holes: holes,\n startingIndex: startingIndex,\n };\n};\n\nvar distanceScratch = new Cartesian3();\nfunction getPointAtDistance(p0, p1, distance, length) {\n Cartesian3.subtract(p1, p0, distanceScratch);\n Cartesian3.multiplyByScalar(\n distanceScratch,\n distance / length,\n distanceScratch\n );\n Cartesian3.add(p0, distanceScratch, distanceScratch);\n return [distanceScratch.x, distanceScratch.y, distanceScratch.z];\n}\n\nPolygonGeometryLibrary.subdivideLineCount = function (p0, p1, minDistance) {\n var distance = Cartesian3.distance(p0, p1);\n var n = distance / minDistance;\n var countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n return Math.pow(2, countDivide);\n};\n\nvar scratchCartographic0 = new Cartographic();\nvar scratchCartographic1 = new Cartographic();\nvar scratchCartographic2 = new Cartographic();\nvar scratchCartesian0 = new Cartesian3();\nPolygonGeometryLibrary.subdivideRhumbLineCount = function (\n ellipsoid,\n p0,\n p1,\n minDistance\n) {\n var c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\n var c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\n var rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\n var n = rhumb.surfaceDistance / minDistance;\n var countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n return Math.pow(2, countDivide);\n};\n\nPolygonGeometryLibrary.subdivideLine = function (p0, p1, minDistance, result) {\n var numVertices = PolygonGeometryLibrary.subdivideLineCount(\n p0,\n p1,\n minDistance\n );\n var length = Cartesian3.distance(p0, p1);\n var distanceBetweenVertices = length / numVertices;\n\n if (!defined(result)) {\n result = [];\n }\n\n var positions = result;\n positions.length = numVertices * 3;\n\n var index = 0;\n for (var i = 0; i < numVertices; i++) {\n var p = getPointAtDistance(p0, p1, i * distanceBetweenVertices, length);\n positions[index++] = p[0];\n positions[index++] = p[1];\n positions[index++] = p[2];\n }\n\n return positions;\n};\n\nPolygonGeometryLibrary.subdivideRhumbLine = function (\n ellipsoid,\n p0,\n p1,\n minDistance,\n result\n) {\n var c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\n var c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\n var rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\n\n var n = rhumb.surfaceDistance / minDistance;\n var countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n var numVertices = Math.pow(2, countDivide);\n var distanceBetweenVertices = rhumb.surfaceDistance / numVertices;\n\n if (!defined(result)) {\n result = [];\n }\n\n var positions = result;\n positions.length = numVertices * 3;\n\n var index = 0;\n for (var i = 0; i < numVertices; i++) {\n var c = rhumb.interpolateUsingSurfaceDistance(\n i * distanceBetweenVertices,\n scratchCartographic2\n );\n var p = ellipsoid.cartographicToCartesian(c, scratchCartesian0);\n positions[index++] = p.x;\n positions[index++] = p.y;\n positions[index++] = p.z;\n }\n\n return positions;\n};\n\nvar scaleToGeodeticHeightN1 = new Cartesian3();\nvar scaleToGeodeticHeightN2 = new Cartesian3();\nvar scaleToGeodeticHeightP1 = new Cartesian3();\nvar scaleToGeodeticHeightP2 = new Cartesian3();\n\nPolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function (\n geometry,\n maxHeight,\n minHeight,\n ellipsoid,\n perPositionHeight\n) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var n1 = scaleToGeodeticHeightN1;\n var n2 = scaleToGeodeticHeightN2;\n var p = scaleToGeodeticHeightP1;\n var p2 = scaleToGeodeticHeightP2;\n\n if (\n defined(geometry) &&\n defined(geometry.attributes) &&\n defined(geometry.attributes.position)\n ) {\n var positions = geometry.attributes.position.values;\n var length = positions.length / 2;\n\n for (var i = 0; i < length; i += 3) {\n Cartesian3.fromArray(positions, i, p);\n\n ellipsoid.geodeticSurfaceNormal(p, n1);\n p2 = ellipsoid.scaleToGeodeticSurface(p, p2);\n n2 = Cartesian3.multiplyByScalar(n1, minHeight, n2);\n n2 = Cartesian3.add(p2, n2, n2);\n positions[i + length] = n2.x;\n positions[i + 1 + length] = n2.y;\n positions[i + 2 + length] = n2.z;\n\n if (perPositionHeight) {\n p2 = Cartesian3.clone(p, p2);\n }\n n2 = Cartesian3.multiplyByScalar(n1, maxHeight, n2);\n n2 = Cartesian3.add(p2, n2, n2);\n positions[i] = n2.x;\n positions[i + 1] = n2.y;\n positions[i + 2] = n2.z;\n }\n }\n return geometry;\n};\n\nPolygonGeometryLibrary.polygonOutlinesFromHierarchy = function (\n polygonHierarchy,\n scaleToEllipsoidSurface,\n ellipsoid\n) {\n // create from a polygon hierarchy\n // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\n var polygons = [];\n var queue = new Queue();\n queue.enqueue(polygonHierarchy);\n var i;\n var j;\n var length;\n while (queue.length !== 0) {\n var outerNode = queue.dequeue();\n var outerRing = outerNode.positions;\n if (scaleToEllipsoidSurface) {\n length = outerRing.length;\n for (i = 0; i < length; i++) {\n ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\n }\n }\n outerRing = arrayRemoveDuplicates(\n outerRing,\n Cartesian3.equalsEpsilon,\n true\n );\n if (outerRing.length < 3) {\n continue;\n }\n\n var numChildren = outerNode.holes ? outerNode.holes.length : 0;\n // The outer polygon contains inner polygons\n for (i = 0; i < numChildren; i++) {\n var hole = outerNode.holes[i];\n var holePositions = hole.positions;\n if (scaleToEllipsoidSurface) {\n length = holePositions.length;\n for (j = 0; j < length; ++j) {\n ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\n }\n }\n holePositions = arrayRemoveDuplicates(\n holePositions,\n Cartesian3.equalsEpsilon,\n true\n );\n if (holePositions.length < 3) {\n continue;\n }\n polygons.push(holePositions);\n\n var numGrandchildren = 0;\n if (defined(hole.holes)) {\n numGrandchildren = hole.holes.length;\n }\n\n for (j = 0; j < numGrandchildren; j++) {\n queue.enqueue(hole.holes[j]);\n }\n }\n\n polygons.push(outerRing);\n }\n\n return polygons;\n};\n\nPolygonGeometryLibrary.polygonsFromHierarchy = function (\n polygonHierarchy,\n projectPointsTo2D,\n scaleToEllipsoidSurface,\n ellipsoid\n) {\n // create from a polygon hierarchy\n // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\n var hierarchy = [];\n var polygons = [];\n\n var queue = new Queue();\n queue.enqueue(polygonHierarchy);\n\n while (queue.length !== 0) {\n var outerNode = queue.dequeue();\n var outerRing = outerNode.positions;\n var holes = outerNode.holes;\n\n var i;\n var length;\n if (scaleToEllipsoidSurface) {\n length = outerRing.length;\n for (i = 0; i < length; i++) {\n ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\n }\n }\n\n outerRing = arrayRemoveDuplicates(\n outerRing,\n Cartesian3.equalsEpsilon,\n true\n );\n if (outerRing.length < 3) {\n continue;\n }\n\n var positions2D = projectPointsTo2D(outerRing);\n if (!defined(positions2D)) {\n continue;\n }\n var holeIndices = [];\n\n var originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\n positions2D\n );\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n positions2D.reverse();\n outerRing = outerRing.slice().reverse();\n }\n\n var positions = outerRing.slice();\n var numChildren = defined(holes) ? holes.length : 0;\n var polygonHoles = [];\n var j;\n\n for (i = 0; i < numChildren; i++) {\n var hole = holes[i];\n var holePositions = hole.positions;\n if (scaleToEllipsoidSurface) {\n length = holePositions.length;\n for (j = 0; j < length; ++j) {\n ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\n }\n }\n\n holePositions = arrayRemoveDuplicates(\n holePositions,\n Cartesian3.equalsEpsilon,\n true\n );\n if (holePositions.length < 3) {\n continue;\n }\n\n var holePositions2D = projectPointsTo2D(holePositions);\n if (!defined(holePositions2D)) {\n continue;\n }\n\n originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\n holePositions2D\n );\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n holePositions2D.reverse();\n holePositions = holePositions.slice().reverse();\n }\n\n polygonHoles.push(holePositions);\n holeIndices.push(positions.length);\n positions = positions.concat(holePositions);\n positions2D = positions2D.concat(holePositions2D);\n\n var numGrandchildren = 0;\n if (defined(hole.holes)) {\n numGrandchildren = hole.holes.length;\n }\n\n for (j = 0; j < numGrandchildren; j++) {\n queue.enqueue(hole.holes[j]);\n }\n }\n\n hierarchy.push({\n outerRing: outerRing,\n holes: polygonHoles,\n });\n polygons.push({\n positions: positions,\n positions2D: positions2D,\n holes: holeIndices,\n });\n }\n\n return {\n hierarchy: hierarchy,\n polygons: polygons,\n };\n};\n\nvar computeBoundingRectangleCartesian2 = new Cartesian2();\nvar computeBoundingRectangleCartesian3 = new Cartesian3();\nvar computeBoundingRectangleQuaternion = new Quaternion();\nvar computeBoundingRectangleMatrix3 = new Matrix3();\nPolygonGeometryLibrary.computeBoundingRectangle = function (\n planeNormal,\n projectPointTo2D,\n positions,\n angle,\n result\n) {\n var rotation = Quaternion.fromAxisAngle(\n planeNormal,\n angle,\n computeBoundingRectangleQuaternion\n );\n var textureMatrix = Matrix3.fromQuaternion(\n rotation,\n computeBoundingRectangleMatrix3\n );\n\n var minX = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n\n var length = positions.length;\n for (var i = 0; i < length; ++i) {\n var p = Cartesian3.clone(positions[i], computeBoundingRectangleCartesian3);\n Matrix3.multiplyByVector(textureMatrix, p, p);\n var st = projectPointTo2D(p, computeBoundingRectangleCartesian2);\n\n if (defined(st)) {\n minX = Math.min(minX, st.x);\n maxX = Math.max(maxX, st.x);\n\n minY = Math.min(minY, st.y);\n maxY = Math.max(maxY, st.y);\n }\n }\n\n result.x = minX;\n result.y = minY;\n result.width = maxX - minX;\n result.height = maxY - minY;\n return result;\n};\n\nPolygonGeometryLibrary.createGeometryFromPositions = function (\n ellipsoid,\n polygon,\n granularity,\n perPositionHeight,\n vertexFormat,\n arcType\n) {\n var indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\n\n /* If polygon is completely unrenderable, just use the first three vertices */\n if (indices.length < 3) {\n indices = [0, 1, 2];\n }\n\n var positions = polygon.positions;\n\n if (perPositionHeight) {\n var length = positions.length;\n var flattenedPositions = new Array(length * 3);\n var index = 0;\n for (var i = 0; i < length; i++) {\n var p = positions[i];\n flattenedPositions[index++] = p.x;\n flattenedPositions[index++] = p.y;\n flattenedPositions[index++] = p.z;\n }\n var geometry = new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: flattenedPositions,\n }),\n },\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n if (vertexFormat.normal) {\n return GeometryPipeline.computeNormal(geometry);\n }\n\n return geometry;\n }\n\n if (arcType === ArcType.GEODESIC) {\n return PolygonPipeline.computeSubdivision(\n ellipsoid,\n positions,\n indices,\n granularity\n );\n } else if (arcType === ArcType.RHUMB) {\n return PolygonPipeline.computeRhumbLineSubdivision(\n ellipsoid,\n positions,\n indices,\n granularity\n );\n }\n};\n\nvar computeWallIndicesSubdivided = [];\nvar p1Scratch = new Cartesian3();\nvar p2Scratch = new Cartesian3();\n\nPolygonGeometryLibrary.computeWallGeometry = function (\n positions,\n ellipsoid,\n granularity,\n perPositionHeight,\n arcType\n) {\n var edgePositions;\n var topEdgeLength;\n var i;\n var p1;\n var p2;\n\n var length = positions.length;\n var index = 0;\n\n if (!perPositionHeight) {\n var minDistance = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n\n var numVertices = 0;\n if (arcType === ArcType.GEODESIC) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n } else if (arcType === ArcType.RHUMB) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n ellipsoid,\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n }\n\n topEdgeLength = (numVertices + length) * 3;\n edgePositions = new Array(topEdgeLength * 2);\n for (i = 0; i < length; i++) {\n p1 = positions[i];\n p2 = positions[(i + 1) % length];\n\n var tempPositions;\n if (arcType === ArcType.GEODESIC) {\n tempPositions = PolygonGeometryLibrary.subdivideLine(\n p1,\n p2,\n minDistance,\n computeWallIndicesSubdivided\n );\n } else if (arcType === ArcType.RHUMB) {\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n ellipsoid,\n p1,\n p2,\n minDistance,\n computeWallIndicesSubdivided\n );\n }\n var tempPositionsLength = tempPositions.length;\n for (var j = 0; j < tempPositionsLength; ++j, ++index) {\n edgePositions[index] = tempPositions[j];\n edgePositions[index + topEdgeLength] = tempPositions[j];\n }\n\n edgePositions[index] = p2.x;\n edgePositions[index + topEdgeLength] = p2.x;\n ++index;\n\n edgePositions[index] = p2.y;\n edgePositions[index + topEdgeLength] = p2.y;\n ++index;\n\n edgePositions[index] = p2.z;\n edgePositions[index + topEdgeLength] = p2.z;\n ++index;\n }\n } else {\n topEdgeLength = length * 3 * 2;\n edgePositions = new Array(topEdgeLength * 2);\n for (i = 0; i < length; i++) {\n p1 = positions[i];\n p2 = positions[(i + 1) % length];\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.x;\n ++index;\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.y;\n ++index;\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.z;\n ++index;\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.x;\n ++index;\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.y;\n ++index;\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.z;\n ++index;\n }\n }\n\n length = edgePositions.length;\n var indices = IndexDatatype.createTypedArray(\n length / 3,\n length - positions.length * 6\n );\n var edgeIndex = 0;\n length /= 6;\n\n for (i = 0; i < length; i++) {\n var UL = i;\n var UR = UL + 1;\n var LL = UL + length;\n var LR = LL + 1;\n\n p1 = Cartesian3.fromArray(edgePositions, UL * 3, p1Scratch);\n p2 = Cartesian3.fromArray(edgePositions, UR * 3, p2Scratch);\n if (\n Cartesian3.equalsEpsilon(\n p1,\n p2,\n CesiumMath.EPSILON10,\n CesiumMath.EPSILON10\n )\n ) {\n //skip corner\n continue;\n }\n\n indices[edgeIndex++] = UL;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = UR;\n indices[edgeIndex++] = UR;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = LR;\n }\n\n return new Geometry({\n attributes: new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: edgePositions,\n }),\n }),\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n};\nexport default PolygonGeometryLibrary;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar scratchPosition = new Cartesian3();\nvar scratchBR = new BoundingRectangle();\nvar stScratch = new Cartesian2();\nvar textureCoordinatesOrigin = new Cartesian2();\nvar scratchNormal = new Cartesian3();\nvar scratchTangent = new Cartesian3();\nvar scratchBitangent = new Cartesian3();\nvar centerScratch = new Cartesian3();\nvar axis1Scratch = new Cartesian3();\nvar axis2Scratch = new Cartesian3();\nvar quaternionScratch = new Quaternion();\nvar textureMatrixScratch = new Matrix3();\nvar tangentRotationScratch = new Matrix3();\nvar surfaceNormalScratch = new Cartesian3();\n\nfunction createGeometryFromPolygon(\n polygon,\n vertexFormat,\n boundingRectangle,\n stRotation,\n projectPointTo2D,\n normal,\n tangent,\n bitangent\n) {\n var positions = polygon.positions;\n var indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\n\n /* If polygon is completely unrenderable, just use the first three vertices */\n if (indices.length < 3) {\n indices = [0, 1, 2];\n }\n\n var newIndices = IndexDatatype.createTypedArray(\n positions.length,\n indices.length\n );\n newIndices.set(indices);\n\n var textureMatrix = textureMatrixScratch;\n if (stRotation !== 0.0) {\n var rotation = Quaternion.fromAxisAngle(\n normal,\n stRotation,\n quaternionScratch\n );\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n rotation = Quaternion.fromAxisAngle(\n normal,\n -stRotation,\n quaternionScratch\n );\n var tangentRotation = Matrix3.fromQuaternion(\n rotation,\n tangentRotationScratch\n );\n\n tangent = Cartesian3.normalize(\n Matrix3.multiplyByVector(tangentRotation, tangent, tangent),\n tangent\n );\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n }\n }\n } else {\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n }\n\n var stOrigin = textureCoordinatesOrigin;\n if (vertexFormat.st) {\n stOrigin.x = boundingRectangle.x;\n stOrigin.y = boundingRectangle.y;\n }\n\n var length = positions.length;\n var size = length * 3;\n var flatPositions = new Float64Array(size);\n var normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n var bitangents = vertexFormat.bitangent ? new Float32Array(size) : undefined;\n var textureCoordinates = vertexFormat.st\n ? new Float32Array(length * 2)\n : undefined;\n\n var positionIndex = 0;\n var normalIndex = 0;\n var bitangentIndex = 0;\n var tangentIndex = 0;\n var stIndex = 0;\n\n for (var i = 0; i < length; i++) {\n var position = positions[i];\n flatPositions[positionIndex++] = position.x;\n flatPositions[positionIndex++] = position.y;\n flatPositions[positionIndex++] = position.z;\n\n if (vertexFormat.st) {\n var p = Matrix3.multiplyByVector(\n textureMatrix,\n position,\n scratchPosition\n );\n var st = projectPointTo2D(p, stScratch);\n Cartesian2.subtract(st, stOrigin, st);\n\n var stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\n var sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\n textureCoordinates[stIndex++] = stx;\n textureCoordinates[stIndex++] = sty;\n }\n\n if (vertexFormat.normal) {\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n }\n\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n }\n }\n\n var attributes = new GeometryAttributes();\n\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: flatPositions,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: newIndices,\n primitiveType: PrimitiveType.TRIANGLES,\n });\n}\n\n/**\n * A description of a polygon composed of arbitrary coplanar positions.\n *\n * @alias CoplanarPolygonGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n *\n * @example\n * var polygon = new Cesium.CoplanarPolygonGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n * -90.0, 30.0, 0.0,\n * -90.0, 30.0, 1000.0,\n * -80.0, 30.0, 1000.0,\n * -80.0, 30.0, 0.0\n * ])\n * });\n * var geometry = Cesium.CoplanarPolygonGeometry.createGeometry(polygon);\n *\n * @see CoplanarPolygonGeometry.createGeometry\n */\nfunction CoplanarPolygonGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var polygonHierarchy = options.polygonHierarchy;\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\n //>>includeEnd('debug');\n\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._polygonHierarchy = polygonHierarchy;\n this._stRotation = defaultValue(options.stRotation, 0.0);\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._workerName = \"createCoplanarPolygonGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n PolygonGeometryLibrary.computeHierarchyPackedLength(polygonHierarchy) +\n VertexFormat.packedLength +\n Ellipsoid.packedLength +\n 2;\n}\n\n/**\n * A description of a coplanar polygon from an array of positions.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @returns {CoplanarPolygonGeometry}\n *\n * @example\n * // create a polygon from points\n * var polygon = Cesium.CoplanarPolygonGeometry.fromPositions({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * });\n * var geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * @see PolygonGeometry#createGeometry\n */\nCoplanarPolygonGeometry.fromPositions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", options.positions);\n //>>includeEnd('debug');\n\n var newOptions = {\n polygonHierarchy: {\n positions: options.positions,\n },\n vertexFormat: options.vertexFormat,\n stRotation: options.stRotation,\n ellipsoid: options.ellipsoid,\n };\n return new CoplanarPolygonGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CoplanarPolygonGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCoplanarPolygonGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n value._polygonHierarchy,\n array,\n startingIndex\n );\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._stRotation;\n array[startingIndex] = value.packedLength;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n polygonHierarchy: {},\n};\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CoplanarPolygonGeometry} [result] The object into which to store the result.\n * @returns {CoplanarPolygonGeometry} The modified result parameter or a new CoplanarPolygonGeometry instance if one was not provided.\n */\nCoplanarPolygonGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n array,\n startingIndex\n );\n startingIndex = polygonHierarchy.startingIndex;\n delete polygonHierarchy.startingIndex;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var stRotation = array[startingIndex++];\n var packedLength = array[startingIndex];\n\n if (!defined(result)) {\n result = new CoplanarPolygonGeometry(scratchOptions);\n }\n\n result._polygonHierarchy = polygonHierarchy;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._stRotation = stRotation;\n result.packedLength = packedLength;\n return result;\n};\n\n/**\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {CoplanarPolygonGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCoplanarPolygonGeometry.createGeometry = function (polygonGeometry) {\n var vertexFormat = polygonGeometry._vertexFormat;\n var polygonHierarchy = polygonGeometry._polygonHierarchy;\n var stRotation = polygonGeometry._stRotation;\n\n var outerPositions = polygonHierarchy.positions;\n outerPositions = arrayRemoveDuplicates(\n outerPositions,\n Cartesian3.equalsEpsilon,\n true\n );\n if (outerPositions.length < 3) {\n return;\n }\n\n var normal = scratchNormal;\n var tangent = scratchTangent;\n var bitangent = scratchBitangent;\n var axis1 = axis1Scratch;\n var axis2 = axis2Scratch;\n\n var validGeometry = CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments(\n outerPositions,\n centerScratch,\n axis1,\n axis2\n );\n if (!validGeometry) {\n return undefined;\n }\n\n normal = Cartesian3.cross(axis1, axis2, normal);\n normal = Cartesian3.normalize(normal, normal);\n\n if (\n !Cartesian3.equalsEpsilon(\n centerScratch,\n Cartesian3.ZERO,\n CesiumMath.EPSILON6\n )\n ) {\n var surfaceNormal = polygonGeometry._ellipsoid.geodeticSurfaceNormal(\n centerScratch,\n surfaceNormalScratch\n );\n if (Cartesian3.dot(normal, surfaceNormal) < 0) {\n normal = Cartesian3.negate(normal, normal);\n axis1 = Cartesian3.negate(axis1, axis1);\n }\n }\n\n var projectPoints = CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction(\n centerScratch,\n axis1,\n axis2\n );\n var projectPoint = CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction(\n centerScratch,\n axis1,\n axis2\n );\n\n if (vertexFormat.tangent) {\n tangent = Cartesian3.clone(axis1, tangent);\n }\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.clone(axis2, bitangent);\n }\n\n var results = PolygonGeometryLibrary.polygonsFromHierarchy(\n polygonHierarchy,\n projectPoints,\n false\n );\n var hierarchy = results.hierarchy;\n var polygons = results.polygons;\n\n if (hierarchy.length === 0) {\n return;\n }\n outerPositions = hierarchy[0].outerRing;\n\n var boundingSphere = BoundingSphere.fromPoints(outerPositions);\n var boundingRectangle = PolygonGeometryLibrary.computeBoundingRectangle(\n normal,\n projectPoint,\n outerPositions,\n stRotation,\n scratchBR\n );\n\n var geometries = [];\n for (var i = 0; i < polygons.length; i++) {\n var geometryInstance = new GeometryInstance({\n geometry: createGeometryFromPolygon(\n polygons[i],\n vertexFormat,\n boundingRectangle,\n stRotation,\n projectPoint,\n normal,\n tangent,\n bitangent\n ),\n });\n\n geometries.push(geometryInstance);\n }\n\n var geometry = GeometryPipeline.combineInstances(geometries)[0];\n geometry.attributes.position.values = new Float64Array(\n geometry.attributes.position.values\n );\n geometry.indices = IndexDatatype.createTypedArray(\n geometry.attributes.position.values.length / 3,\n geometry.indices\n );\n\n var attributes = geometry.attributes;\n if (!vertexFormat.position) {\n delete attributes.position;\n }\n return new Geometry({\n attributes: attributes,\n indices: geometry.indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: boundingSphere,\n });\n};\nexport default CoplanarPolygonGeometry;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nfunction createGeometryFromPositions(positions) {\n var length = positions.length;\n var flatPositions = new Float64Array(length * 3);\n var indices = IndexDatatype.createTypedArray(length, length * 2);\n\n var positionIndex = 0;\n var index = 0;\n\n for (var i = 0; i < length; i++) {\n var position = positions[i];\n flatPositions[positionIndex++] = position.x;\n flatPositions[positionIndex++] = position.y;\n flatPositions[positionIndex++] = position.z;\n\n indices[index++] = i;\n indices[index++] = (i + 1) % length;\n }\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: flatPositions,\n }),\n });\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n });\n}\n\n/**\n * A description of the outline of a polygon composed of arbitrary coplanar positions.\n *\n * @alias CoplanarPolygonOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n *\n * @see CoplanarPolygonOutlineGeometry.createGeometry\n *\n * @example\n * var polygonOutline = new Cesium.CoplanarPolygonOutlineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n * -90.0, 30.0, 0.0,\n * -90.0, 30.0, 1000.0,\n * -80.0, 30.0, 1000.0,\n * -80.0, 30.0, 0.0\n * ])\n * });\n * var geometry = Cesium.CoplanarPolygonOutlineGeometry.createGeometry(polygonOutline);\n */\nfunction CoplanarPolygonOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var polygonHierarchy = options.polygonHierarchy;\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\n //>>includeEnd('debug');\n\n this._polygonHierarchy = polygonHierarchy;\n this._workerName = \"createCoplanarPolygonOutlineGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n PolygonGeometryLibrary.computeHierarchyPackedLength(polygonHierarchy) + 1;\n}\n\n/**\n * A description of a coplanar polygon outline from an array of positions.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @returns {CoplanarPolygonOutlineGeometry}\n */\nCoplanarPolygonOutlineGeometry.fromPositions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", options.positions);\n //>>includeEnd('debug');\n\n var newOptions = {\n polygonHierarchy: {\n positions: options.positions,\n },\n };\n return new CoplanarPolygonOutlineGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CoplanarPolygonOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCoplanarPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n value._polygonHierarchy,\n array,\n startingIndex\n );\n\n array[startingIndex] = value.packedLength;\n\n return array;\n};\n\nvar scratchOptions = {\n polygonHierarchy: {},\n};\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CoplanarPolygonOutlineGeometry} [result] The object into which to store the result.\n * @returns {CoplanarPolygonOutlineGeometry} The modified result parameter or a new CoplanarPolygonOutlineGeometry instance if one was not provided.\n */\nCoplanarPolygonOutlineGeometry.unpack = function (\n array,\n startingIndex,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n array,\n startingIndex\n );\n startingIndex = polygonHierarchy.startingIndex;\n delete polygonHierarchy.startingIndex;\n var packedLength = array[startingIndex];\n\n if (!defined(result)) {\n result = new CoplanarPolygonOutlineGeometry(scratchOptions);\n }\n\n result._polygonHierarchy = polygonHierarchy;\n result.packedLength = packedLength;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {CoplanarPolygonOutlineGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCoplanarPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\n var polygonHierarchy = polygonGeometry._polygonHierarchy;\n\n var outerPositions = polygonHierarchy.positions;\n outerPositions = arrayRemoveDuplicates(\n outerPositions,\n Cartesian3.equalsEpsilon,\n true\n );\n if (outerPositions.length < 3) {\n return;\n }\n var isValid = CoplanarPolygonGeometryLibrary.validOutline(outerPositions);\n if (!isValid) {\n return undefined;\n }\n\n var polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\n polygonHierarchy,\n false\n );\n\n if (polygons.length === 0) {\n return undefined;\n }\n\n var geometries = [];\n\n for (var i = 0; i < polygons.length; i++) {\n var geometryInstance = new GeometryInstance({\n geometry: createGeometryFromPositions(polygons[i]),\n });\n geometries.push(geometryInstance);\n }\n\n var geometry = GeometryPipeline.combineInstances(geometries)[0];\n var boundingSphere = BoundingSphere.fromPoints(polygonHierarchy.positions);\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: boundingSphere,\n });\n};\nexport default CoplanarPolygonOutlineGeometry;\n","/**\n * Style options for corners.\n *\n * @demo The {@link https://sandcastle.cesium.com/index.html?src=Corridor.html&label=Geometries|Corridor Demo}\n * demonstrates the three corner types, as used by {@link CorridorGraphics}.\n *\n * @enum {Number}\n */\nvar CornerType = {\n /**\n * <img src=\"Images/CornerTypeRounded.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n *\n * Corner has a smooth edge.\n * @type {Number}\n * @constant\n */\n ROUNDED: 0,\n\n /**\n * <img src=\"Images/CornerTypeMitered.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n *\n * Corner point is the intersection of adjacent edges.\n * @type {Number}\n * @constant\n */\n MITERED: 1,\n\n /**\n * <img src=\"Images/CornerTypeBeveled.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n *\n * Corner is clipped.\n * @type {Number}\n * @constant\n */\n BEVELED: 2,\n};\nexport default Object.freeze(CornerType);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction setConstants(ellipsoidGeodesic) {\n var uSquared = ellipsoidGeodesic._uSquared;\n var a = ellipsoidGeodesic._ellipsoid.maximumRadius;\n var b = ellipsoidGeodesic._ellipsoid.minimumRadius;\n var f = (a - b) / a;\n\n var cosineHeading = Math.cos(ellipsoidGeodesic._startHeading);\n var sineHeading = Math.sin(ellipsoidGeodesic._startHeading);\n\n var tanU = (1 - f) * Math.tan(ellipsoidGeodesic._start.latitude);\n\n var cosineU = 1.0 / Math.sqrt(1.0 + tanU * tanU);\n var sineU = cosineU * tanU;\n\n var sigma = Math.atan2(tanU, cosineHeading);\n\n var sineAlpha = cosineU * sineHeading;\n var sineSquaredAlpha = sineAlpha * sineAlpha;\n\n var cosineSquaredAlpha = 1.0 - sineSquaredAlpha;\n var cosineAlpha = Math.sqrt(cosineSquaredAlpha);\n\n var u2Over4 = uSquared / 4.0;\n var u4Over16 = u2Over4 * u2Over4;\n var u6Over64 = u4Over16 * u2Over4;\n var u8Over256 = u4Over16 * u4Over16;\n\n var a0 =\n 1.0 +\n u2Over4 -\n (3.0 * u4Over16) / 4.0 +\n (5.0 * u6Over64) / 4.0 -\n (175.0 * u8Over256) / 64.0;\n var a1 = 1.0 - u2Over4 + (15.0 * u4Over16) / 8.0 - (35.0 * u6Over64) / 8.0;\n var a2 = 1.0 - 3.0 * u2Over4 + (35.0 * u4Over16) / 4.0;\n var a3 = 1.0 - 5.0 * u2Over4;\n\n var distanceRatio =\n a0 * sigma -\n (a1 * Math.sin(2.0 * sigma) * u2Over4) / 2.0 -\n (a2 * Math.sin(4.0 * sigma) * u4Over16) / 16.0 -\n (a3 * Math.sin(6.0 * sigma) * u6Over64) / 48.0 -\n (Math.sin(8.0 * sigma) * 5.0 * u8Over256) / 512;\n\n var constants = ellipsoidGeodesic._constants;\n\n constants.a = a;\n constants.b = b;\n constants.f = f;\n constants.cosineHeading = cosineHeading;\n constants.sineHeading = sineHeading;\n constants.tanU = tanU;\n constants.cosineU = cosineU;\n constants.sineU = sineU;\n constants.sigma = sigma;\n constants.sineAlpha = sineAlpha;\n constants.sineSquaredAlpha = sineSquaredAlpha;\n constants.cosineSquaredAlpha = cosineSquaredAlpha;\n constants.cosineAlpha = cosineAlpha;\n constants.u2Over4 = u2Over4;\n constants.u4Over16 = u4Over16;\n constants.u6Over64 = u6Over64;\n constants.u8Over256 = u8Over256;\n constants.a0 = a0;\n constants.a1 = a1;\n constants.a2 = a2;\n constants.a3 = a3;\n constants.distanceRatio = distanceRatio;\n}\n\nfunction computeC(f, cosineSquaredAlpha) {\n return (\n (f * cosineSquaredAlpha * (4.0 + f * (4.0 - 3.0 * cosineSquaredAlpha))) /\n 16.0\n );\n}\n\nfunction computeDeltaLambda(\n f,\n sineAlpha,\n cosineSquaredAlpha,\n sigma,\n sineSigma,\n cosineSigma,\n cosineTwiceSigmaMidpoint\n) {\n var C = computeC(f, cosineSquaredAlpha);\n\n return (\n (1.0 - C) *\n f *\n sineAlpha *\n (sigma +\n C *\n sineSigma *\n (cosineTwiceSigmaMidpoint +\n C *\n cosineSigma *\n (2.0 * cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint - 1.0)))\n );\n}\n\nfunction vincentyInverseFormula(\n ellipsoidGeodesic,\n major,\n minor,\n firstLongitude,\n firstLatitude,\n secondLongitude,\n secondLatitude\n) {\n var eff = (major - minor) / major;\n var l = secondLongitude - firstLongitude;\n\n var u1 = Math.atan((1 - eff) * Math.tan(firstLatitude));\n var u2 = Math.atan((1 - eff) * Math.tan(secondLatitude));\n\n var cosineU1 = Math.cos(u1);\n var sineU1 = Math.sin(u1);\n var cosineU2 = Math.cos(u2);\n var sineU2 = Math.sin(u2);\n\n var cc = cosineU1 * cosineU2;\n var cs = cosineU1 * sineU2;\n var ss = sineU1 * sineU2;\n var sc = sineU1 * cosineU2;\n\n var lambda = l;\n var lambdaDot = CesiumMath.TWO_PI;\n\n var cosineLambda = Math.cos(lambda);\n var sineLambda = Math.sin(lambda);\n\n var sigma;\n var cosineSigma;\n var sineSigma;\n var cosineSquaredAlpha;\n var cosineTwiceSigmaMidpoint;\n\n do {\n cosineLambda = Math.cos(lambda);\n sineLambda = Math.sin(lambda);\n\n var temp = cs - sc * cosineLambda;\n sineSigma = Math.sqrt(\n cosineU2 * cosineU2 * sineLambda * sineLambda + temp * temp\n );\n cosineSigma = ss + cc * cosineLambda;\n\n sigma = Math.atan2(sineSigma, cosineSigma);\n\n var sineAlpha;\n\n if (sineSigma === 0.0) {\n sineAlpha = 0.0;\n cosineSquaredAlpha = 1.0;\n } else {\n sineAlpha = (cc * sineLambda) / sineSigma;\n cosineSquaredAlpha = 1.0 - sineAlpha * sineAlpha;\n }\n\n lambdaDot = lambda;\n\n cosineTwiceSigmaMidpoint = cosineSigma - (2.0 * ss) / cosineSquaredAlpha;\n\n if (isNaN(cosineTwiceSigmaMidpoint)) {\n cosineTwiceSigmaMidpoint = 0.0;\n }\n\n lambda =\n l +\n computeDeltaLambda(\n eff,\n sineAlpha,\n cosineSquaredAlpha,\n sigma,\n sineSigma,\n cosineSigma,\n cosineTwiceSigmaMidpoint\n );\n } while (Math.abs(lambda - lambdaDot) > CesiumMath.EPSILON12);\n\n var uSquared =\n (cosineSquaredAlpha * (major * major - minor * minor)) / (minor * minor);\n var A =\n 1.0 +\n (uSquared *\n (4096.0 + uSquared * (uSquared * (320.0 - 175.0 * uSquared) - 768.0))) /\n 16384.0;\n var B =\n (uSquared *\n (256.0 + uSquared * (uSquared * (74.0 - 47.0 * uSquared) - 128.0))) /\n 1024.0;\n\n var cosineSquaredTwiceSigmaMidpoint =\n cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint;\n var deltaSigma =\n B *\n sineSigma *\n (cosineTwiceSigmaMidpoint +\n (B *\n (cosineSigma * (2.0 * cosineSquaredTwiceSigmaMidpoint - 1.0) -\n (B *\n cosineTwiceSigmaMidpoint *\n (4.0 * sineSigma * sineSigma - 3.0) *\n (4.0 * cosineSquaredTwiceSigmaMidpoint - 3.0)) /\n 6.0)) /\n 4.0);\n\n var distance = minor * A * (sigma - deltaSigma);\n\n var startHeading = Math.atan2(cosineU2 * sineLambda, cs - sc * cosineLambda);\n var endHeading = Math.atan2(cosineU1 * sineLambda, cs * cosineLambda - sc);\n\n ellipsoidGeodesic._distance = distance;\n ellipsoidGeodesic._startHeading = startHeading;\n ellipsoidGeodesic._endHeading = endHeading;\n ellipsoidGeodesic._uSquared = uSquared;\n}\n\nvar scratchCart1 = new Cartesian3();\nvar scratchCart2 = new Cartesian3();\nfunction computeProperties(ellipsoidGeodesic, start, end, ellipsoid) {\n var firstCartesian = Cartesian3.normalize(\n ellipsoid.cartographicToCartesian(start, scratchCart2),\n scratchCart1\n );\n var lastCartesian = Cartesian3.normalize(\n ellipsoid.cartographicToCartesian(end, scratchCart2),\n scratchCart2\n );\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\n \"value\",\n Math.abs(\n Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI\n ),\n 0.0125\n );\n //>>includeEnd('debug');\n\n vincentyInverseFormula(\n ellipsoidGeodesic,\n ellipsoid.maximumRadius,\n ellipsoid.minimumRadius,\n start.longitude,\n start.latitude,\n end.longitude,\n end.latitude\n );\n\n ellipsoidGeodesic._start = Cartographic.clone(\n start,\n ellipsoidGeodesic._start\n );\n ellipsoidGeodesic._end = Cartographic.clone(end, ellipsoidGeodesic._end);\n ellipsoidGeodesic._start.height = 0;\n ellipsoidGeodesic._end.height = 0;\n\n setConstants(ellipsoidGeodesic);\n}\n\n/**\n * Initializes a geodesic on the ellipsoid connecting the two provided planetodetic points.\n *\n * @alias EllipsoidGeodesic\n * @constructor\n *\n * @param {Cartographic} [start] The initial planetodetic point on the path.\n * @param {Cartographic} [end] The final planetodetic point on the path.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the geodesic lies.\n */\nfunction EllipsoidGeodesic(start, end, ellipsoid) {\n var e = defaultValue(ellipsoid, Ellipsoid.WGS84);\n this._ellipsoid = e;\n this._start = new Cartographic();\n this._end = new Cartographic();\n\n this._constants = {};\n this._startHeading = undefined;\n this._endHeading = undefined;\n this._distance = undefined;\n this._uSquared = undefined;\n\n if (defined(start) && defined(end)) {\n computeProperties(this, start, end, e);\n }\n}\n\nObject.defineProperties(EllipsoidGeodesic.prototype, {\n /**\n * Gets the ellipsoid.\n * @memberof EllipsoidGeodesic.prototype\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Gets the surface distance between the start and end point\n * @memberof EllipsoidGeodesic.prototype\n * @type {Number}\n * @readonly\n */\n surfaceDistance: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n return this._distance;\n },\n },\n\n /**\n * Gets the initial planetodetic point on the path.\n * @memberof EllipsoidGeodesic.prototype\n * @type {Cartographic}\n * @readonly\n */\n start: {\n get: function () {\n return this._start;\n },\n },\n\n /**\n * Gets the final planetodetic point on the path.\n * @memberof EllipsoidGeodesic.prototype\n * @type {Cartographic}\n * @readonly\n */\n end: {\n get: function () {\n return this._end;\n },\n },\n\n /**\n * Gets the heading at the initial point.\n * @memberof EllipsoidGeodesic.prototype\n * @type {Number}\n * @readonly\n */\n startHeading: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n return this._startHeading;\n },\n },\n\n /**\n * Gets the heading at the final point.\n * @memberof EllipsoidGeodesic.prototype\n * @type {Number}\n * @readonly\n */\n endHeading: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n return this._endHeading;\n },\n },\n});\n\n/**\n * Sets the start and end points of the geodesic\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {Cartographic} end The final planetodetic point on the path.\n */\nEllipsoidGeodesic.prototype.setEndPoints = function (start, end) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"start\", start);\n Check.defined(\"end\", end);\n //>>includeEnd('debug');\n\n computeProperties(this, start, end, this._ellipsoid);\n};\n\n/**\n * Provides the location of a point at the indicated portion along the geodesic.\n *\n * @param {Number} fraction The portion of the distance between the initial and final points.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the geodesic.\n */\nEllipsoidGeodesic.prototype.interpolateUsingFraction = function (\n fraction,\n result\n) {\n return this.interpolateUsingSurfaceDistance(\n this._distance * fraction,\n result\n );\n};\n\n/**\n * Provides the location of a point at the indicated distance along the geodesic.\n *\n * @param {Number} distance The distance from the inital point to the point of interest along the geodesic\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the geodesic.\n *\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\n */\nEllipsoidGeodesic.prototype.interpolateUsingSurfaceDistance = function (\n distance,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"distance\", this._distance);\n //>>includeEnd('debug');\n\n var constants = this._constants;\n\n var s = constants.distanceRatio + distance / constants.b;\n\n var cosine2S = Math.cos(2.0 * s);\n var cosine4S = Math.cos(4.0 * s);\n var cosine6S = Math.cos(6.0 * s);\n var sine2S = Math.sin(2.0 * s);\n var sine4S = Math.sin(4.0 * s);\n var sine6S = Math.sin(6.0 * s);\n var sine8S = Math.sin(8.0 * s);\n\n var s2 = s * s;\n var s3 = s * s2;\n\n var u8Over256 = constants.u8Over256;\n var u2Over4 = constants.u2Over4;\n var u6Over64 = constants.u6Over64;\n var u4Over16 = constants.u4Over16;\n var sigma =\n (2.0 * s3 * u8Over256 * cosine2S) / 3.0 +\n s *\n (1.0 -\n u2Over4 +\n (7.0 * u4Over16) / 4.0 -\n (15.0 * u6Over64) / 4.0 +\n (579.0 * u8Over256) / 64.0 -\n (u4Over16 - (15.0 * u6Over64) / 4.0 + (187.0 * u8Over256) / 16.0) *\n cosine2S -\n ((5.0 * u6Over64) / 4.0 - (115.0 * u8Over256) / 16.0) * cosine4S -\n (29.0 * u8Over256 * cosine6S) / 16.0) +\n (u2Over4 / 2.0 -\n u4Over16 +\n (71.0 * u6Over64) / 32.0 -\n (85.0 * u8Over256) / 16.0) *\n sine2S +\n ((5.0 * u4Over16) / 16.0 -\n (5.0 * u6Over64) / 4.0 +\n (383.0 * u8Over256) / 96.0) *\n sine4S -\n s2 *\n ((u6Over64 - (11.0 * u8Over256) / 2.0) * sine2S +\n (5.0 * u8Over256 * sine4S) / 2.0) +\n ((29.0 * u6Over64) / 96.0 - (29.0 * u8Over256) / 16.0) * sine6S +\n (539.0 * u8Over256 * sine8S) / 1536.0;\n\n var theta = Math.asin(Math.sin(sigma) * constants.cosineAlpha);\n var latitude = Math.atan((constants.a / constants.b) * Math.tan(theta));\n\n // Redefine in terms of relative argument of latitude.\n sigma = sigma - constants.sigma;\n\n var cosineTwiceSigmaMidpoint = Math.cos(2.0 * constants.sigma + sigma);\n\n var sineSigma = Math.sin(sigma);\n var cosineSigma = Math.cos(sigma);\n\n var cc = constants.cosineU * cosineSigma;\n var ss = constants.sineU * sineSigma;\n\n var lambda = Math.atan2(\n sineSigma * constants.sineHeading,\n cc - ss * constants.cosineHeading\n );\n\n var l =\n lambda -\n computeDeltaLambda(\n constants.f,\n constants.sineAlpha,\n constants.cosineSquaredAlpha,\n sigma,\n sineSigma,\n cosineSigma,\n cosineTwiceSigmaMidpoint\n );\n\n if (defined(result)) {\n result.longitude = this._start.longitude + l;\n result.latitude = latitude;\n result.height = 0.0;\n return result;\n }\n\n return new Cartographic(this._start.longitude + l, latitude, 0.0);\n};\nexport default EllipsoidGeodesic;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\n\n/**\n * @private\n */\nvar PolylinePipeline = {};\n\nPolylinePipeline.numberOfPoints = function (p0, p1, minDistance) {\n var distance = Cartesian3.distance(p0, p1);\n return Math.ceil(distance / minDistance);\n};\n\nPolylinePipeline.numberOfPointsRhumbLine = function (p0, p1, granularity) {\n var radiansDistanceSquared =\n Math.pow(p0.longitude - p1.longitude, 2) +\n Math.pow(p0.latitude - p1.latitude, 2);\n return Math.ceil(\n Math.sqrt(radiansDistanceSquared / (granularity * granularity))\n );\n};\n\nvar cartoScratch = new Cartographic();\nPolylinePipeline.extractHeights = function (positions, ellipsoid) {\n var length = positions.length;\n var heights = new Array(length);\n for (var i = 0; i < length; i++) {\n var p = positions[i];\n heights[i] = ellipsoid.cartesianToCartographic(p, cartoScratch).height;\n }\n return heights;\n};\n\nvar wrapLongitudeInversMatrix = new Matrix4();\nvar wrapLongitudeOrigin = new Cartesian3();\nvar wrapLongitudeXZNormal = new Cartesian3();\nvar wrapLongitudeXZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nvar wrapLongitudeYZNormal = new Cartesian3();\nvar wrapLongitudeYZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nvar wrapLongitudeIntersection = new Cartesian3();\nvar wrapLongitudeOffset = new Cartesian3();\n\nvar subdivideHeightsScratchArray = [];\n\nfunction subdivideHeights(numPoints, h0, h1) {\n var heights = subdivideHeightsScratchArray;\n heights.length = numPoints;\n\n var i;\n if (h0 === h1) {\n for (i = 0; i < numPoints; i++) {\n heights[i] = h0;\n }\n return heights;\n }\n\n var dHeight = h1 - h0;\n var heightPerVertex = dHeight / numPoints;\n\n for (i = 0; i < numPoints; i++) {\n var h = h0 + i * heightPerVertex;\n heights[i] = h;\n }\n\n return heights;\n}\n\nvar carto1 = new Cartographic();\nvar carto2 = new Cartographic();\nvar cartesian = new Cartesian3();\nvar scaleFirst = new Cartesian3();\nvar scaleLast = new Cartesian3();\nvar ellipsoidGeodesic = new EllipsoidGeodesic();\nvar ellipsoidRhumb = new EllipsoidRhumbLine();\n\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\n//Result includes p1, but not include p2. This function is called for a sequence of line segments,\n//and this prevents duplication of end point.\nfunction generateCartesianArc(\n p0,\n p1,\n minDistance,\n ellipsoid,\n h0,\n h1,\n array,\n offset\n) {\n var first = ellipsoid.scaleToGeodeticSurface(p0, scaleFirst);\n var last = ellipsoid.scaleToGeodeticSurface(p1, scaleLast);\n var numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\n var start = ellipsoid.cartesianToCartographic(first, carto1);\n var end = ellipsoid.cartesianToCartographic(last, carto2);\n var heights = subdivideHeights(numPoints, h0, h1);\n\n ellipsoidGeodesic.setEndPoints(start, end);\n var surfaceDistanceBetweenPoints =\n ellipsoidGeodesic.surfaceDistance / numPoints;\n\n var index = offset;\n start.height = h0;\n var cart = ellipsoid.cartographicToCartesian(start, cartesian);\n Cartesian3.pack(cart, array, index);\n index += 3;\n\n for (var i = 1; i < numPoints; i++) {\n var carto = ellipsoidGeodesic.interpolateUsingSurfaceDistance(\n i * surfaceDistanceBetweenPoints,\n carto2\n );\n carto.height = heights[i];\n cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n Cartesian3.pack(cart, array, index);\n index += 3;\n }\n\n return index;\n}\n\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\n//Result includes p1, but not include p2. This function is called for a sequence of line segments,\n//and this prevents duplication of end point.\nfunction generateCartesianRhumbArc(\n p0,\n p1,\n granularity,\n ellipsoid,\n h0,\n h1,\n array,\n offset\n) {\n var start = ellipsoid.cartesianToCartographic(p0, carto1);\n var end = ellipsoid.cartesianToCartographic(p1, carto2);\n var numPoints = PolylinePipeline.numberOfPointsRhumbLine(\n start,\n end,\n granularity\n );\n start.height = 0.0;\n end.height = 0.0;\n var heights = subdivideHeights(numPoints, h0, h1);\n\n if (!ellipsoidRhumb.ellipsoid.equals(ellipsoid)) {\n ellipsoidRhumb = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n }\n ellipsoidRhumb.setEndPoints(start, end);\n var surfaceDistanceBetweenPoints = ellipsoidRhumb.surfaceDistance / numPoints;\n\n var index = offset;\n start.height = h0;\n var cart = ellipsoid.cartographicToCartesian(start, cartesian);\n Cartesian3.pack(cart, array, index);\n index += 3;\n\n for (var i = 1; i < numPoints; i++) {\n var carto = ellipsoidRhumb.interpolateUsingSurfaceDistance(\n i * surfaceDistanceBetweenPoints,\n carto2\n );\n carto.height = heights[i];\n cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n Cartesian3.pack(cart, array, index);\n index += 3;\n }\n\n return index;\n}\n\n/**\n * Breaks a {@link Polyline} into segments such that it does not cross the ±180 degree meridian of an ellipsoid.\n *\n * @param {Cartesian3[]} positions The polyline's Cartesian positions.\n * @param {Matrix4} [modelMatrix=Matrix4.IDENTITY] The polyline's model matrix. Assumed to be an affine\n * transformation matrix, where the upper left 3x3 elements are a rotation matrix, and\n * the upper three elements in the fourth column are the translation. The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * @returns {Object} An object with a <code>positions</code> property that is an array of positions and a\n * <code>segments</code> property.\n *\n *\n * @example\n * var polylines = new Cesium.PolylineCollection();\n * var polyline = polylines.add(...);\n * var positions = polyline.positions;\n * var modelMatrix = polylines.modelMatrix;\n * var segments = Cesium.PolylinePipeline.wrapLongitude(positions, modelMatrix);\n *\n * @see PolygonPipeline.wrapLongitude\n * @see Polyline\n * @see PolylineCollection\n */\nPolylinePipeline.wrapLongitude = function (positions, modelMatrix) {\n var cartesians = [];\n var segments = [];\n\n if (defined(positions) && positions.length > 0) {\n modelMatrix = defaultValue(modelMatrix, Matrix4.IDENTITY);\n var inverseModelMatrix = Matrix4.inverseTransformation(\n modelMatrix,\n wrapLongitudeInversMatrix\n );\n\n var origin = Matrix4.multiplyByPoint(\n inverseModelMatrix,\n Cartesian3.ZERO,\n wrapLongitudeOrigin\n );\n var xzNormal = Cartesian3.normalize(\n Matrix4.multiplyByPointAsVector(\n inverseModelMatrix,\n Cartesian3.UNIT_Y,\n wrapLongitudeXZNormal\n ),\n wrapLongitudeXZNormal\n );\n var xzPlane = Plane.fromPointNormal(origin, xzNormal, wrapLongitudeXZPlane);\n var yzNormal = Cartesian3.normalize(\n Matrix4.multiplyByPointAsVector(\n inverseModelMatrix,\n Cartesian3.UNIT_X,\n wrapLongitudeYZNormal\n ),\n wrapLongitudeYZNormal\n );\n var yzPlane = Plane.fromPointNormal(origin, yzNormal, wrapLongitudeYZPlane);\n\n var count = 1;\n cartesians.push(Cartesian3.clone(positions[0]));\n var prev = cartesians[0];\n\n var length = positions.length;\n for (var i = 1; i < length; ++i) {\n var cur = positions[i];\n\n // intersects the IDL if either endpoint is on the negative side of the yz-plane\n if (\n Plane.getPointDistance(yzPlane, prev) < 0.0 ||\n Plane.getPointDistance(yzPlane, cur) < 0.0\n ) {\n // and intersects the xz-plane\n var intersection = IntersectionTests.lineSegmentPlane(\n prev,\n cur,\n xzPlane,\n wrapLongitudeIntersection\n );\n if (defined(intersection)) {\n // move point on the xz-plane slightly away from the plane\n var offset = Cartesian3.multiplyByScalar(\n xzNormal,\n 5.0e-9,\n wrapLongitudeOffset\n );\n if (Plane.getPointDistance(xzPlane, prev) < 0.0) {\n Cartesian3.negate(offset, offset);\n }\n\n cartesians.push(\n Cartesian3.add(intersection, offset, new Cartesian3())\n );\n segments.push(count + 1);\n\n Cartesian3.negate(offset, offset);\n cartesians.push(\n Cartesian3.add(intersection, offset, new Cartesian3())\n );\n count = 1;\n }\n }\n\n cartesians.push(Cartesian3.clone(positions[i]));\n count++;\n\n prev = cur;\n }\n\n segments.push(count);\n }\n\n return {\n positions: cartesians,\n lengths: segments,\n };\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height. Returns an array of numbers to represent the positions.\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\n * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 40.0,\n * -100.0, 38.0,\n * -105.0, 35.0,\n * -100.0, 32.0\n * ]);\n * var surfacePositions = Cesium.PolylinePipeline.generateArc({\n * positons: positions\n * });\n */\nPolylinePipeline.generateArc = function (options) {\n if (!defined(options)) {\n options = {};\n }\n var positions = options.positions;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n //>>includeEnd('debug');\n\n var length = positions.length;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var height = defaultValue(options.height, 0);\n var hasHeightArray = Array.isArray(height);\n\n if (length < 1) {\n return [];\n } else if (length === 1) {\n var p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\n height = hasHeightArray ? height[0] : height;\n if (height !== 0) {\n var n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\n Cartesian3.multiplyByScalar(n, height, n);\n Cartesian3.add(p, n, p);\n }\n\n return [p.x, p.y, p.z];\n }\n\n var minDistance = options.minDistance;\n if (!defined(minDistance)) {\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n minDistance = CesiumMath.chordLength(granularity, ellipsoid.maximumRadius);\n }\n\n var numPoints = 0;\n var i;\n\n for (i = 0; i < length - 1; i++) {\n numPoints += PolylinePipeline.numberOfPoints(\n positions[i],\n positions[i + 1],\n minDistance\n );\n }\n\n var arrayLength = (numPoints + 1) * 3;\n var newPositions = new Array(arrayLength);\n var offset = 0;\n\n for (i = 0; i < length - 1; i++) {\n var p0 = positions[i];\n var p1 = positions[i + 1];\n\n var h0 = hasHeightArray ? height[i] : height;\n var h1 = hasHeightArray ? height[i + 1] : height;\n\n offset = generateCartesianArc(\n p0,\n p1,\n minDistance,\n ellipsoid,\n h0,\n h1,\n newPositions,\n offset\n );\n }\n\n subdivideHeightsScratchArray.length = 0;\n\n var lastPoint = positions[length - 1];\n var carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\n carto.height = hasHeightArray ? height[length - 1] : height;\n var cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n Cartesian3.pack(cart, newPositions, arrayLength - 3);\n\n return newPositions;\n};\n\nvar scratchCartographic0 = new Cartographic();\nvar scratchCartographic1 = new Cartographic();\n\n/**\n * Subdivides polyline and raises all points to the specified height using Rhumb lines. Returns an array of numbers to represent the positions.\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\n * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 40.0,\n * -100.0, 38.0,\n * -105.0, 35.0,\n * -100.0, 32.0\n * ]);\n * var surfacePositions = Cesium.PolylinePipeline.generateRhumbArc({\n * positons: positions\n * });\n */\nPolylinePipeline.generateRhumbArc = function (options) {\n if (!defined(options)) {\n options = {};\n }\n var positions = options.positions;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n //>>includeEnd('debug');\n\n var length = positions.length;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var height = defaultValue(options.height, 0);\n var hasHeightArray = Array.isArray(height);\n\n if (length < 1) {\n return [];\n } else if (length === 1) {\n var p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\n height = hasHeightArray ? height[0] : height;\n if (height !== 0) {\n var n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\n Cartesian3.multiplyByScalar(n, height, n);\n Cartesian3.add(p, n, p);\n }\n\n return [p.x, p.y, p.z];\n }\n\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n\n var numPoints = 0;\n var i;\n\n var c0 = ellipsoid.cartesianToCartographic(\n positions[0],\n scratchCartographic0\n );\n var c1;\n for (i = 0; i < length - 1; i++) {\n c1 = ellipsoid.cartesianToCartographic(\n positions[i + 1],\n scratchCartographic1\n );\n numPoints += PolylinePipeline.numberOfPointsRhumbLine(c0, c1, granularity);\n c0 = Cartographic.clone(c1, scratchCartographic0);\n }\n\n var arrayLength = (numPoints + 1) * 3;\n var newPositions = new Array(arrayLength);\n var offset = 0;\n\n for (i = 0; i < length - 1; i++) {\n var p0 = positions[i];\n var p1 = positions[i + 1];\n\n var h0 = hasHeightArray ? height[i] : height;\n var h1 = hasHeightArray ? height[i + 1] : height;\n\n offset = generateCartesianRhumbArc(\n p0,\n p1,\n granularity,\n ellipsoid,\n h0,\n h1,\n newPositions,\n offset\n );\n }\n\n subdivideHeightsScratchArray.length = 0;\n\n var lastPoint = positions[length - 1];\n var carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\n carto.height = hasHeightArray ? height[length - 1] : height;\n var cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n Cartesian3.pack(cart, newPositions, arrayLength - 3);\n\n return newPositions;\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height. Returns an array of new {Cartesian3} positions.\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 40.0,\n * -100.0, 38.0,\n * -105.0, 35.0,\n * -100.0, 32.0\n * ]);\n * var surfacePositions = Cesium.PolylinePipeline.generateCartesianArc({\n * positons: positions\n * });\n */\nPolylinePipeline.generateCartesianArc = function (options) {\n var numberArray = PolylinePipeline.generateArc(options);\n var size = numberArray.length / 3;\n var newPositions = new Array(size);\n for (var i = 0; i < size; i++) {\n newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\n }\n return newPositions;\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height using Rhumb Lines. Returns an array of new {Cartesian3} positions.\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 40.0,\n * -100.0, 38.0,\n * -105.0, 35.0,\n * -100.0, 32.0\n * ]);\n * var surfacePositions = Cesium.PolylinePipeline.generateCartesianRhumbArc({\n * positons: positions\n * });\n */\nPolylinePipeline.generateCartesianRhumbArc = function (options) {\n var numberArray = PolylinePipeline.generateRhumbArc(options);\n var size = numberArray.length / 3;\n var newPositions = new Array(size);\n for (var i = 0; i < size; i++) {\n newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\n }\n return newPositions;\n};\nexport default PolylinePipeline;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport CornerType from \"./CornerType.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Transforms from \"./Transforms.js\";\n\nvar scratch2Array = [new Cartesian3(), new Cartesian3()];\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartesian4 = new Cartesian3();\nvar scratchCartesian5 = new Cartesian3();\nvar scratchCartesian6 = new Cartesian3();\nvar scratchCartesian7 = new Cartesian3();\nvar scratchCartesian8 = new Cartesian3();\nvar scratchCartesian9 = new Cartesian3();\n\nvar scratch1 = new Cartesian3();\nvar scratch2 = new Cartesian3();\n\n/**\n * @private\n */\nvar PolylineVolumeGeometryLibrary = {};\n\nvar cartographic = new Cartographic();\nfunction scaleToSurface(positions, ellipsoid) {\n var heights = new Array(positions.length);\n for (var i = 0; i < positions.length; i++) {\n var pos = positions[i];\n cartographic = ellipsoid.cartesianToCartographic(pos, cartographic);\n heights[i] = cartographic.height;\n positions[i] = ellipsoid.scaleToGeodeticSurface(pos, pos);\n }\n return heights;\n}\n\nfunction subdivideHeights(points, h0, h1, granularity) {\n var p0 = points[0];\n var p1 = points[1];\n var angleBetween = Cartesian3.angleBetween(p0, p1);\n var numPoints = Math.ceil(angleBetween / granularity);\n var heights = new Array(numPoints);\n var i;\n if (h0 === h1) {\n for (i = 0; i < numPoints; i++) {\n heights[i] = h0;\n }\n heights.push(h1);\n return heights;\n }\n\n var dHeight = h1 - h0;\n var heightPerVertex = dHeight / numPoints;\n\n for (i = 1; i < numPoints; i++) {\n var h = h0 + i * heightPerVertex;\n heights[i] = h;\n }\n\n heights[0] = h0;\n heights.push(h1);\n return heights;\n}\n\nvar nextScratch = new Cartesian3();\nvar prevScratch = new Cartesian3();\n\nfunction computeRotationAngle(start, end, position, ellipsoid) {\n var tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\n var next = tangentPlane.projectPointOntoPlane(\n Cartesian3.add(position, start, nextScratch),\n nextScratch\n );\n var prev = tangentPlane.projectPointOntoPlane(\n Cartesian3.add(position, end, prevScratch),\n prevScratch\n );\n var angle = Cartesian2.angleBetween(next, prev);\n\n return prev.x * next.y - prev.y * next.x >= 0.0 ? -angle : angle;\n}\n\nvar negativeX = new Cartesian3(-1, 0, 0);\nvar transform = new Matrix4();\nvar translation = new Matrix4();\nvar rotationZ = new Matrix3();\nvar scaleMatrix = Matrix3.IDENTITY.clone();\nvar westScratch = new Cartesian3();\nvar finalPosScratch = new Cartesian4();\nvar heightCartesian = new Cartesian3();\nfunction addPosition(\n center,\n left,\n shape,\n finalPositions,\n ellipsoid,\n height,\n xScalar,\n repeat\n) {\n var west = westScratch;\n var finalPosition = finalPosScratch;\n transform = Transforms.eastNorthUpToFixedFrame(center, ellipsoid, transform);\n\n west = Matrix4.multiplyByPointAsVector(transform, negativeX, west);\n west = Cartesian3.normalize(west, west);\n var angle = computeRotationAngle(west, left, center, ellipsoid);\n rotationZ = Matrix3.fromRotationZ(angle, rotationZ);\n\n heightCartesian.z = height;\n transform = Matrix4.multiplyTransformation(\n transform,\n Matrix4.fromRotationTranslation(rotationZ, heightCartesian, translation),\n transform\n );\n var scale = scaleMatrix;\n scale[0] = xScalar;\n\n for (var j = 0; j < repeat; j++) {\n for (var i = 0; i < shape.length; i += 3) {\n finalPosition = Cartesian3.fromArray(shape, i, finalPosition);\n finalPosition = Matrix3.multiplyByVector(\n scale,\n finalPosition,\n finalPosition\n );\n finalPosition = Matrix4.multiplyByPoint(\n transform,\n finalPosition,\n finalPosition\n );\n finalPositions.push(finalPosition.x, finalPosition.y, finalPosition.z);\n }\n }\n\n return finalPositions;\n}\n\nvar centerScratch = new Cartesian3();\nfunction addPositions(\n centers,\n left,\n shape,\n finalPositions,\n ellipsoid,\n heights,\n xScalar\n) {\n for (var i = 0; i < centers.length; i += 3) {\n var center = Cartesian3.fromArray(centers, i, centerScratch);\n finalPositions = addPosition(\n center,\n left,\n shape,\n finalPositions,\n ellipsoid,\n heights[i / 3],\n xScalar,\n 1\n );\n }\n return finalPositions;\n}\n\nfunction convertShapeTo3DDuplicate(shape2D, boundingRectangle) {\n //orientate 2D shape to XZ plane center at (0, 0, 0), duplicate points\n var length = shape2D.length;\n var shape = new Array(length * 6);\n var index = 0;\n var xOffset = boundingRectangle.x + boundingRectangle.width / 2;\n var yOffset = boundingRectangle.y + boundingRectangle.height / 2;\n\n var point = shape2D[0];\n shape[index++] = point.x - xOffset;\n shape[index++] = 0.0;\n shape[index++] = point.y - yOffset;\n for (var i = 1; i < length; i++) {\n point = shape2D[i];\n var x = point.x - xOffset;\n var z = point.y - yOffset;\n shape[index++] = x;\n shape[index++] = 0.0;\n shape[index++] = z;\n\n shape[index++] = x;\n shape[index++] = 0.0;\n shape[index++] = z;\n }\n point = shape2D[0];\n shape[index++] = point.x - xOffset;\n shape[index++] = 0.0;\n shape[index++] = point.y - yOffset;\n\n return shape;\n}\n\nfunction convertShapeTo3D(shape2D, boundingRectangle) {\n //orientate 2D shape to XZ plane center at (0, 0, 0)\n var length = shape2D.length;\n var shape = new Array(length * 3);\n var index = 0;\n var xOffset = boundingRectangle.x + boundingRectangle.width / 2;\n var yOffset = boundingRectangle.y + boundingRectangle.height / 2;\n\n for (var i = 0; i < length; i++) {\n shape[index++] = shape2D[i].x - xOffset;\n shape[index++] = 0;\n shape[index++] = shape2D[i].y - yOffset;\n }\n\n return shape;\n}\n\nvar quaterion = new Quaternion();\nvar startPointScratch = new Cartesian3();\nvar rotMatrix = new Matrix3();\nfunction computeRoundCorner(\n pivot,\n startPoint,\n endPoint,\n cornerType,\n leftIsOutside,\n ellipsoid,\n finalPositions,\n shape,\n height,\n duplicatePoints\n) {\n var angle = Cartesian3.angleBetween(\n Cartesian3.subtract(startPoint, pivot, scratch1),\n Cartesian3.subtract(endPoint, pivot, scratch2)\n );\n var granularity =\n cornerType === CornerType.BEVELED\n ? 0\n : Math.ceil(angle / CesiumMath.toRadians(5));\n\n var m;\n if (leftIsOutside) {\n m = Matrix3.fromQuaternion(\n Quaternion.fromAxisAngle(\n Cartesian3.negate(pivot, scratch1),\n angle / (granularity + 1),\n quaterion\n ),\n rotMatrix\n );\n } else {\n m = Matrix3.fromQuaternion(\n Quaternion.fromAxisAngle(pivot, angle / (granularity + 1), quaterion),\n rotMatrix\n );\n }\n\n var left;\n var surfacePoint;\n startPoint = Cartesian3.clone(startPoint, startPointScratch);\n if (granularity > 0) {\n var repeat = duplicatePoints ? 2 : 1;\n for (var i = 0; i < granularity; i++) {\n startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\n left = Cartesian3.subtract(startPoint, pivot, scratch1);\n left = Cartesian3.normalize(left, left);\n if (!leftIsOutside) {\n left = Cartesian3.negate(left, left);\n }\n surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\n finalPositions = addPosition(\n surfacePoint,\n left,\n shape,\n finalPositions,\n ellipsoid,\n height,\n 1,\n repeat\n );\n }\n } else {\n left = Cartesian3.subtract(startPoint, pivot, scratch1);\n left = Cartesian3.normalize(left, left);\n if (!leftIsOutside) {\n left = Cartesian3.negate(left, left);\n }\n surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\n finalPositions = addPosition(\n surfacePoint,\n left,\n shape,\n finalPositions,\n ellipsoid,\n height,\n 1,\n 1\n );\n\n endPoint = Cartesian3.clone(endPoint, startPointScratch);\n left = Cartesian3.subtract(endPoint, pivot, scratch1);\n left = Cartesian3.normalize(left, left);\n if (!leftIsOutside) {\n left = Cartesian3.negate(left, left);\n }\n surfacePoint = ellipsoid.scaleToGeodeticSurface(endPoint, scratch2);\n finalPositions = addPosition(\n surfacePoint,\n left,\n shape,\n finalPositions,\n ellipsoid,\n height,\n 1,\n 1\n );\n }\n\n return finalPositions;\n}\n\nPolylineVolumeGeometryLibrary.removeDuplicatesFromShape = function (\n shapePositions\n) {\n var length = shapePositions.length;\n var cleanedPositions = [];\n for (var i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\n var v0 = shapePositions[i0];\n var v1 = shapePositions[i1];\n\n if (!Cartesian2.equals(v0, v1)) {\n cleanedPositions.push(v1); // Shallow copy!\n }\n }\n\n return cleanedPositions;\n};\n\nPolylineVolumeGeometryLibrary.angleIsGreaterThanPi = function (\n forward,\n backward,\n position,\n ellipsoid\n) {\n var tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\n var next = tangentPlane.projectPointOntoPlane(\n Cartesian3.add(position, forward, nextScratch),\n nextScratch\n );\n var prev = tangentPlane.projectPointOntoPlane(\n Cartesian3.add(position, backward, prevScratch),\n prevScratch\n );\n\n return prev.x * next.y - prev.y * next.x >= 0.0;\n};\n\nvar scratchForwardProjection = new Cartesian3();\nvar scratchBackwardProjection = new Cartesian3();\n\nPolylineVolumeGeometryLibrary.computePositions = function (\n positions,\n shape2D,\n boundingRectangle,\n geometry,\n duplicatePoints\n) {\n var ellipsoid = geometry._ellipsoid;\n var heights = scaleToSurface(positions, ellipsoid);\n var granularity = geometry._granularity;\n var cornerType = geometry._cornerType;\n var shapeForSides = duplicatePoints\n ? convertShapeTo3DDuplicate(shape2D, boundingRectangle)\n : convertShapeTo3D(shape2D, boundingRectangle);\n var shapeForEnds = duplicatePoints\n ? convertShapeTo3D(shape2D, boundingRectangle)\n : undefined;\n var heightOffset = boundingRectangle.height / 2;\n var width = boundingRectangle.width / 2;\n var length = positions.length;\n var finalPositions = [];\n var ends = duplicatePoints ? [] : undefined;\n\n var forward = scratchCartesian1;\n var backward = scratchCartesian2;\n var cornerDirection = scratchCartesian3;\n var surfaceNormal = scratchCartesian4;\n var pivot = scratchCartesian5;\n var start = scratchCartesian6;\n var end = scratchCartesian7;\n var left = scratchCartesian8;\n var previousPosition = scratchCartesian9;\n\n var position = positions[0];\n var nextPosition = positions[1];\n surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\n forward = Cartesian3.subtract(nextPosition, position, forward);\n forward = Cartesian3.normalize(forward, forward);\n left = Cartesian3.cross(surfaceNormal, forward, left);\n left = Cartesian3.normalize(left, left);\n var h0 = heights[0];\n var h1 = heights[1];\n if (duplicatePoints) {\n ends = addPosition(\n position,\n left,\n shapeForEnds,\n ends,\n ellipsoid,\n h0 + heightOffset,\n 1,\n 1\n );\n }\n previousPosition = Cartesian3.clone(position, previousPosition);\n position = nextPosition;\n backward = Cartesian3.negate(forward, backward);\n var subdividedHeights;\n var subdividedPositions;\n for (var i = 1; i < length - 1; i++) {\n var repeat = duplicatePoints ? 2 : 1;\n nextPosition = positions[i + 1];\n forward = Cartesian3.subtract(nextPosition, position, forward);\n forward = Cartesian3.normalize(forward, forward);\n cornerDirection = Cartesian3.add(forward, backward, cornerDirection);\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\n\n var forwardProjection = Cartesian3.multiplyByScalar(\n surfaceNormal,\n Cartesian3.dot(forward, surfaceNormal),\n scratchForwardProjection\n );\n Cartesian3.subtract(forward, forwardProjection, forwardProjection);\n Cartesian3.normalize(forwardProjection, forwardProjection);\n\n var backwardProjection = Cartesian3.multiplyByScalar(\n surfaceNormal,\n Cartesian3.dot(backward, surfaceNormal),\n scratchBackwardProjection\n );\n Cartesian3.subtract(backward, backwardProjection, backwardProjection);\n Cartesian3.normalize(backwardProjection, backwardProjection);\n\n var doCorner = !CesiumMath.equalsEpsilon(\n Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\n 1.0,\n CesiumMath.EPSILON7\n );\n\n if (doCorner) {\n cornerDirection = Cartesian3.cross(\n cornerDirection,\n surfaceNormal,\n cornerDirection\n );\n cornerDirection = Cartesian3.cross(\n surfaceNormal,\n cornerDirection,\n cornerDirection\n );\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n var scalar =\n 1 /\n Math.max(\n 0.25,\n Cartesian3.magnitude(\n Cartesian3.cross(cornerDirection, backward, scratch1)\n )\n );\n var leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\n forward,\n backward,\n position,\n ellipsoid\n );\n if (leftIsOutside) {\n pivot = Cartesian3.add(\n position,\n Cartesian3.multiplyByScalar(\n cornerDirection,\n scalar * width,\n cornerDirection\n ),\n pivot\n );\n start = Cartesian3.add(\n pivot,\n Cartesian3.multiplyByScalar(left, width, start),\n start\n );\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\n subdividedHeights = subdivideHeights(\n scratch2Array,\n h0 + heightOffset,\n h1 + heightOffset,\n granularity\n );\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scratch2Array,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n finalPositions = addPositions(\n subdividedPositions,\n left,\n shapeForSides,\n finalPositions,\n ellipsoid,\n subdividedHeights,\n 1\n );\n left = Cartesian3.cross(surfaceNormal, forward, left);\n left = Cartesian3.normalize(left, left);\n end = Cartesian3.add(\n pivot,\n Cartesian3.multiplyByScalar(left, width, end),\n end\n );\n if (\n cornerType === CornerType.ROUNDED ||\n cornerType === CornerType.BEVELED\n ) {\n computeRoundCorner(\n pivot,\n start,\n end,\n cornerType,\n leftIsOutside,\n ellipsoid,\n finalPositions,\n shapeForSides,\n h1 + heightOffset,\n duplicatePoints\n );\n } else {\n cornerDirection = Cartesian3.negate(cornerDirection, cornerDirection);\n finalPositions = addPosition(\n position,\n cornerDirection,\n shapeForSides,\n finalPositions,\n ellipsoid,\n h1 + heightOffset,\n scalar,\n repeat\n );\n }\n previousPosition = Cartesian3.clone(end, previousPosition);\n } else {\n pivot = Cartesian3.add(\n position,\n Cartesian3.multiplyByScalar(\n cornerDirection,\n scalar * width,\n cornerDirection\n ),\n pivot\n );\n start = Cartesian3.add(\n pivot,\n Cartesian3.multiplyByScalar(left, -width, start),\n start\n );\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\n subdividedHeights = subdivideHeights(\n scratch2Array,\n h0 + heightOffset,\n h1 + heightOffset,\n granularity\n );\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scratch2Array,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n finalPositions = addPositions(\n subdividedPositions,\n left,\n shapeForSides,\n finalPositions,\n ellipsoid,\n subdividedHeights,\n 1\n );\n left = Cartesian3.cross(surfaceNormal, forward, left);\n left = Cartesian3.normalize(left, left);\n end = Cartesian3.add(\n pivot,\n Cartesian3.multiplyByScalar(left, -width, end),\n end\n );\n if (\n cornerType === CornerType.ROUNDED ||\n cornerType === CornerType.BEVELED\n ) {\n computeRoundCorner(\n pivot,\n start,\n end,\n cornerType,\n leftIsOutside,\n ellipsoid,\n finalPositions,\n shapeForSides,\n h1 + heightOffset,\n duplicatePoints\n );\n } else {\n finalPositions = addPosition(\n position,\n cornerDirection,\n shapeForSides,\n finalPositions,\n ellipsoid,\n h1 + heightOffset,\n scalar,\n repeat\n );\n }\n previousPosition = Cartesian3.clone(end, previousPosition);\n }\n backward = Cartesian3.negate(forward, backward);\n } else {\n finalPositions = addPosition(\n previousPosition,\n left,\n shapeForSides,\n finalPositions,\n ellipsoid,\n h0 + heightOffset,\n 1,\n 1\n );\n previousPosition = position;\n }\n h0 = h1;\n h1 = heights[i + 1];\n position = nextPosition;\n }\n\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n scratch2Array[1] = Cartesian3.clone(position, scratch2Array[1]);\n subdividedHeights = subdivideHeights(\n scratch2Array,\n h0 + heightOffset,\n h1 + heightOffset,\n granularity\n );\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scratch2Array,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n finalPositions = addPositions(\n subdividedPositions,\n left,\n shapeForSides,\n finalPositions,\n ellipsoid,\n subdividedHeights,\n 1\n );\n if (duplicatePoints) {\n ends = addPosition(\n position,\n left,\n shapeForEnds,\n ends,\n ellipsoid,\n h1 + heightOffset,\n 1,\n 1\n );\n }\n\n length = finalPositions.length;\n var posLength = duplicatePoints ? length + ends.length : length;\n var combinedPositions = new Float64Array(posLength);\n combinedPositions.set(finalPositions);\n if (duplicatePoints) {\n combinedPositions.set(ends, length);\n }\n\n return combinedPositions;\n};\nexport default PolylineVolumeGeometryLibrary;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport CornerType from \"./CornerType.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport Quaternion from \"./Quaternion.js\";\n\n/**\n * @private\n */\nvar CorridorGeometryLibrary = {};\n\nvar scratch1 = new Cartesian3();\nvar scratch2 = new Cartesian3();\nvar scratch3 = new Cartesian3();\nvar scratch4 = new Cartesian3();\n\nvar scaleArray2 = [new Cartesian3(), new Cartesian3()];\n\nvar cartesian1 = new Cartesian3();\nvar cartesian2 = new Cartesian3();\nvar cartesian3 = new Cartesian3();\nvar cartesian4 = new Cartesian3();\nvar cartesian5 = new Cartesian3();\nvar cartesian6 = new Cartesian3();\nvar cartesian7 = new Cartesian3();\nvar cartesian8 = new Cartesian3();\nvar cartesian9 = new Cartesian3();\nvar cartesian10 = new Cartesian3();\n\nvar quaterion = new Quaternion();\nvar rotMatrix = new Matrix3();\nfunction computeRoundCorner(\n cornerPoint,\n startPoint,\n endPoint,\n cornerType,\n leftIsOutside\n) {\n var angle = Cartesian3.angleBetween(\n Cartesian3.subtract(startPoint, cornerPoint, scratch1),\n Cartesian3.subtract(endPoint, cornerPoint, scratch2)\n );\n var granularity =\n cornerType === CornerType.BEVELED\n ? 1\n : Math.ceil(angle / CesiumMath.toRadians(5)) + 1;\n\n var size = granularity * 3;\n var array = new Array(size);\n\n array[size - 3] = endPoint.x;\n array[size - 2] = endPoint.y;\n array[size - 1] = endPoint.z;\n\n var m;\n if (leftIsOutside) {\n m = Matrix3.fromQuaternion(\n Quaternion.fromAxisAngle(\n Cartesian3.negate(cornerPoint, scratch1),\n angle / granularity,\n quaterion\n ),\n rotMatrix\n );\n } else {\n m = Matrix3.fromQuaternion(\n Quaternion.fromAxisAngle(cornerPoint, angle / granularity, quaterion),\n rotMatrix\n );\n }\n\n var index = 0;\n startPoint = Cartesian3.clone(startPoint, scratch1);\n for (var i = 0; i < granularity; i++) {\n startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\n array[index++] = startPoint.x;\n array[index++] = startPoint.y;\n array[index++] = startPoint.z;\n }\n\n return array;\n}\n\nfunction addEndCaps(calculatedPositions) {\n var cornerPoint = cartesian1;\n var startPoint = cartesian2;\n var endPoint = cartesian3;\n\n var leftEdge = calculatedPositions[1];\n startPoint = Cartesian3.fromArray(\n calculatedPositions[1],\n leftEdge.length - 3,\n startPoint\n );\n endPoint = Cartesian3.fromArray(calculatedPositions[0], 0, endPoint);\n cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\n var firstEndCap = computeRoundCorner(\n cornerPoint,\n startPoint,\n endPoint,\n CornerType.ROUNDED,\n false\n );\n\n var length = calculatedPositions.length - 1;\n var rightEdge = calculatedPositions[length - 1];\n leftEdge = calculatedPositions[length];\n startPoint = Cartesian3.fromArray(\n rightEdge,\n rightEdge.length - 3,\n startPoint\n );\n endPoint = Cartesian3.fromArray(leftEdge, 0, endPoint);\n cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\n var lastEndCap = computeRoundCorner(\n cornerPoint,\n startPoint,\n endPoint,\n CornerType.ROUNDED,\n false\n );\n\n return [firstEndCap, lastEndCap];\n}\n\nfunction computeMiteredCorner(\n position,\n leftCornerDirection,\n lastPoint,\n leftIsOutside\n) {\n var cornerPoint = scratch1;\n if (leftIsOutside) {\n cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\n } else {\n leftCornerDirection = Cartesian3.negate(\n leftCornerDirection,\n leftCornerDirection\n );\n cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\n }\n return [\n cornerPoint.x,\n cornerPoint.y,\n cornerPoint.z,\n lastPoint.x,\n lastPoint.y,\n lastPoint.z,\n ];\n}\n\nfunction addShiftedPositions(positions, left, scalar, calculatedPositions) {\n var rightPositions = new Array(positions.length);\n var leftPositions = new Array(positions.length);\n var scaledLeft = Cartesian3.multiplyByScalar(left, scalar, scratch1);\n var scaledRight = Cartesian3.negate(scaledLeft, scratch2);\n var rightIndex = 0;\n var leftIndex = positions.length - 1;\n\n for (var i = 0; i < positions.length; i += 3) {\n var pos = Cartesian3.fromArray(positions, i, scratch3);\n var rightPos = Cartesian3.add(pos, scaledRight, scratch4);\n rightPositions[rightIndex++] = rightPos.x;\n rightPositions[rightIndex++] = rightPos.y;\n rightPositions[rightIndex++] = rightPos.z;\n\n var leftPos = Cartesian3.add(pos, scaledLeft, scratch4);\n leftPositions[leftIndex--] = leftPos.z;\n leftPositions[leftIndex--] = leftPos.y;\n leftPositions[leftIndex--] = leftPos.x;\n }\n calculatedPositions.push(rightPositions, leftPositions);\n\n return calculatedPositions;\n}\n\n/**\n * @private\n */\nCorridorGeometryLibrary.addAttribute = function (\n attribute,\n value,\n front,\n back\n) {\n var x = value.x;\n var y = value.y;\n var z = value.z;\n if (defined(front)) {\n attribute[front] = x;\n attribute[front + 1] = y;\n attribute[front + 2] = z;\n }\n if (defined(back)) {\n attribute[back] = z;\n attribute[back - 1] = y;\n attribute[back - 2] = x;\n }\n};\n\nvar scratchForwardProjection = new Cartesian3();\nvar scratchBackwardProjection = new Cartesian3();\n\n/**\n * @private\n */\nCorridorGeometryLibrary.computePositions = function (params) {\n var granularity = params.granularity;\n var positions = params.positions;\n var ellipsoid = params.ellipsoid;\n var width = params.width / 2;\n var cornerType = params.cornerType;\n var saveAttributes = params.saveAttributes;\n var normal = cartesian1;\n var forward = cartesian2;\n var backward = cartesian3;\n var left = cartesian4;\n var cornerDirection = cartesian5;\n var startPoint = cartesian6;\n var previousPos = cartesian7;\n var rightPos = cartesian8;\n var leftPos = cartesian9;\n var center = cartesian10;\n var calculatedPositions = [];\n var calculatedLefts = saveAttributes ? [] : undefined;\n var calculatedNormals = saveAttributes ? [] : undefined;\n var position = positions[0]; //add first point\n var nextPosition = positions[1];\n\n forward = Cartesian3.normalize(\n Cartesian3.subtract(nextPosition, position, forward),\n forward\n );\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n left = Cartesian3.normalize(Cartesian3.cross(normal, forward, left), left);\n if (saveAttributes) {\n calculatedLefts.push(left.x, left.y, left.z);\n calculatedNormals.push(normal.x, normal.y, normal.z);\n }\n previousPos = Cartesian3.clone(position, previousPos);\n position = nextPosition;\n backward = Cartesian3.negate(forward, backward);\n\n var subdividedPositions;\n var corners = [];\n var i;\n var length = positions.length;\n for (i = 1; i < length - 1; i++) {\n // add middle points and corners\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n nextPosition = positions[i + 1];\n forward = Cartesian3.normalize(\n Cartesian3.subtract(nextPosition, position, forward),\n forward\n );\n cornerDirection = Cartesian3.normalize(\n Cartesian3.add(forward, backward, cornerDirection),\n cornerDirection\n );\n\n var forwardProjection = Cartesian3.multiplyByScalar(\n normal,\n Cartesian3.dot(forward, normal),\n scratchForwardProjection\n );\n Cartesian3.subtract(forward, forwardProjection, forwardProjection);\n Cartesian3.normalize(forwardProjection, forwardProjection);\n\n var backwardProjection = Cartesian3.multiplyByScalar(\n normal,\n Cartesian3.dot(backward, normal),\n scratchBackwardProjection\n );\n Cartesian3.subtract(backward, backwardProjection, backwardProjection);\n Cartesian3.normalize(backwardProjection, backwardProjection);\n\n var doCorner = !CesiumMath.equalsEpsilon(\n Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\n 1.0,\n CesiumMath.EPSILON7\n );\n\n if (doCorner) {\n cornerDirection = Cartesian3.cross(\n cornerDirection,\n normal,\n cornerDirection\n );\n cornerDirection = Cartesian3.cross(\n normal,\n cornerDirection,\n cornerDirection\n );\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n var scalar =\n width /\n Math.max(\n 0.25,\n Cartesian3.magnitude(\n Cartesian3.cross(cornerDirection, backward, scratch1)\n )\n );\n var leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\n forward,\n backward,\n position,\n ellipsoid\n );\n cornerDirection = Cartesian3.multiplyByScalar(\n cornerDirection,\n scalar,\n cornerDirection\n );\n if (leftIsOutside) {\n rightPos = Cartesian3.add(position, cornerDirection, rightPos);\n center = Cartesian3.add(\n rightPos,\n Cartesian3.multiplyByScalar(left, width, center),\n center\n );\n leftPos = Cartesian3.add(\n rightPos,\n Cartesian3.multiplyByScalar(left, width * 2, leftPos),\n leftPos\n );\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scaleArray2,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n calculatedPositions = addShiftedPositions(\n subdividedPositions,\n left,\n width,\n calculatedPositions\n );\n if (saveAttributes) {\n calculatedLefts.push(left.x, left.y, left.z);\n calculatedNormals.push(normal.x, normal.y, normal.z);\n }\n startPoint = Cartesian3.clone(leftPos, startPoint);\n left = Cartesian3.normalize(\n Cartesian3.cross(normal, forward, left),\n left\n );\n leftPos = Cartesian3.add(\n rightPos,\n Cartesian3.multiplyByScalar(left, width * 2, leftPos),\n leftPos\n );\n previousPos = Cartesian3.add(\n rightPos,\n Cartesian3.multiplyByScalar(left, width, previousPos),\n previousPos\n );\n if (\n cornerType === CornerType.ROUNDED ||\n cornerType === CornerType.BEVELED\n ) {\n corners.push({\n leftPositions: computeRoundCorner(\n rightPos,\n startPoint,\n leftPos,\n cornerType,\n leftIsOutside\n ),\n });\n } else {\n corners.push({\n leftPositions: computeMiteredCorner(\n position,\n Cartesian3.negate(cornerDirection, cornerDirection),\n leftPos,\n leftIsOutside\n ),\n });\n }\n } else {\n leftPos = Cartesian3.add(position, cornerDirection, leftPos);\n center = Cartesian3.add(\n leftPos,\n Cartesian3.negate(\n Cartesian3.multiplyByScalar(left, width, center),\n center\n ),\n center\n );\n rightPos = Cartesian3.add(\n leftPos,\n Cartesian3.negate(\n Cartesian3.multiplyByScalar(left, width * 2, rightPos),\n rightPos\n ),\n rightPos\n );\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scaleArray2,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n calculatedPositions = addShiftedPositions(\n subdividedPositions,\n left,\n width,\n calculatedPositions\n );\n if (saveAttributes) {\n calculatedLefts.push(left.x, left.y, left.z);\n calculatedNormals.push(normal.x, normal.y, normal.z);\n }\n startPoint = Cartesian3.clone(rightPos, startPoint);\n left = Cartesian3.normalize(\n Cartesian3.cross(normal, forward, left),\n left\n );\n rightPos = Cartesian3.add(\n leftPos,\n Cartesian3.negate(\n Cartesian3.multiplyByScalar(left, width * 2, rightPos),\n rightPos\n ),\n rightPos\n );\n previousPos = Cartesian3.add(\n leftPos,\n Cartesian3.negate(\n Cartesian3.multiplyByScalar(left, width, previousPos),\n previousPos\n ),\n previousPos\n );\n if (\n cornerType === CornerType.ROUNDED ||\n cornerType === CornerType.BEVELED\n ) {\n corners.push({\n rightPositions: computeRoundCorner(\n leftPos,\n startPoint,\n rightPos,\n cornerType,\n leftIsOutside\n ),\n });\n } else {\n corners.push({\n rightPositions: computeMiteredCorner(\n position,\n cornerDirection,\n rightPos,\n leftIsOutside\n ),\n });\n }\n }\n backward = Cartesian3.negate(forward, backward);\n }\n position = nextPosition;\n }\n\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n scaleArray2[1] = Cartesian3.clone(position, scaleArray2[1]);\n subdividedPositions = PolylinePipeline.generateArc({\n positions: scaleArray2,\n granularity: granularity,\n ellipsoid: ellipsoid,\n });\n calculatedPositions = addShiftedPositions(\n subdividedPositions,\n left,\n width,\n calculatedPositions\n );\n if (saveAttributes) {\n calculatedLefts.push(left.x, left.y, left.z);\n calculatedNormals.push(normal.x, normal.y, normal.z);\n }\n\n var endPositions;\n if (cornerType === CornerType.ROUNDED) {\n endPositions = addEndCaps(calculatedPositions);\n }\n\n return {\n positions: calculatedPositions,\n corners: corners,\n lefts: calculatedLefts,\n normals: calculatedNormals,\n endPositions: endPositions,\n };\n};\nexport default CorridorGeometryLibrary;\n","import arrayFill from \"./arrayFill.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar cartesian1 = new Cartesian3();\nvar cartesian2 = new Cartesian3();\nvar cartesian3 = new Cartesian3();\nvar cartesian4 = new Cartesian3();\nvar cartesian5 = new Cartesian3();\nvar cartesian6 = new Cartesian3();\n\nvar scratch1 = new Cartesian3();\nvar scratch2 = new Cartesian3();\n\nfunction scaleToSurface(positions, ellipsoid) {\n for (var i = 0; i < positions.length; i++) {\n positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\n }\n return positions;\n}\n\nfunction addNormals(attr, normal, left, front, back, vertexFormat) {\n var normals = attr.normals;\n var tangents = attr.tangents;\n var bitangents = attr.bitangents;\n var forward = Cartesian3.normalize(\n Cartesian3.cross(left, normal, scratch1),\n scratch1\n );\n if (vertexFormat.normal) {\n CorridorGeometryLibrary.addAttribute(normals, normal, front, back);\n }\n if (vertexFormat.tangent) {\n CorridorGeometryLibrary.addAttribute(tangents, forward, front, back);\n }\n if (vertexFormat.bitangent) {\n CorridorGeometryLibrary.addAttribute(bitangents, left, front, back);\n }\n}\n\nfunction combine(computedPositions, vertexFormat, ellipsoid) {\n var positions = computedPositions.positions;\n var corners = computedPositions.corners;\n var endPositions = computedPositions.endPositions;\n var computedLefts = computedPositions.lefts;\n var computedNormals = computedPositions.normals;\n var attributes = new GeometryAttributes();\n var corner;\n var leftCount = 0;\n var rightCount = 0;\n var i;\n var indicesLength = 0;\n var length;\n for (i = 0; i < positions.length; i += 2) {\n length = positions[i].length - 3;\n leftCount += length; //subtracting 3 to account for duplicate points at corners\n indicesLength += length * 2;\n rightCount += positions[i + 1].length - 3;\n }\n leftCount += 3; //add back count for end positions\n rightCount += 3;\n for (i = 0; i < corners.length; i++) {\n corner = corners[i];\n var leftSide = corners[i].leftPositions;\n if (defined(leftSide)) {\n length = leftSide.length;\n leftCount += length;\n indicesLength += length;\n } else {\n length = corners[i].rightPositions.length;\n rightCount += length;\n indicesLength += length;\n }\n }\n\n var addEndPositions = defined(endPositions);\n var endPositionLength;\n if (addEndPositions) {\n endPositionLength = endPositions[0].length - 3;\n leftCount += endPositionLength;\n rightCount += endPositionLength;\n endPositionLength /= 3;\n indicesLength += endPositionLength * 6;\n }\n var size = leftCount + rightCount;\n var finalPositions = new Float64Array(size);\n var normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n var bitangents = vertexFormat.bitangent ? new Float32Array(size) : undefined;\n var attr = {\n normals: normals,\n tangents: tangents,\n bitangents: bitangents,\n };\n var front = 0;\n var back = size - 1;\n var UL, LL, UR, LR;\n var normal = cartesian1;\n var left = cartesian2;\n var rightPos, leftPos;\n var halfLength = endPositionLength / 2;\n\n var indices = IndexDatatype.createTypedArray(size / 3, indicesLength);\n var index = 0;\n if (addEndPositions) {\n // add rounded end\n leftPos = cartesian3;\n rightPos = cartesian4;\n var firstEndPositions = endPositions[0];\n normal = Cartesian3.fromArray(computedNormals, 0, normal);\n left = Cartesian3.fromArray(computedLefts, 0, left);\n for (i = 0; i < halfLength; i++) {\n leftPos = Cartesian3.fromArray(\n firstEndPositions,\n (halfLength - 1 - i) * 3,\n leftPos\n );\n rightPos = Cartesian3.fromArray(\n firstEndPositions,\n (halfLength + i) * 3,\n rightPos\n );\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n leftPos,\n undefined,\n back\n );\n addNormals(attr, normal, left, front, back, vertexFormat);\n\n LL = front / 3;\n LR = LL + 1;\n UL = (back - 2) / 3;\n UR = UL - 1;\n indices[index++] = UL;\n indices[index++] = LL;\n indices[index++] = UR;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n }\n\n var posIndex = 0;\n var compIndex = 0;\n var rightEdge = positions[posIndex++]; //add first two edges\n var leftEdge = positions[posIndex++];\n finalPositions.set(rightEdge, front);\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\n\n left = Cartesian3.fromArray(computedLefts, compIndex, left);\n var rightNormal;\n var leftNormal;\n length = leftEdge.length - 3;\n for (i = 0; i < length; i += 3) {\n rightNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(rightEdge, i, scratch1),\n scratch1\n );\n leftNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(leftEdge, length - i, scratch2),\n scratch2\n );\n normal = Cartesian3.normalize(\n Cartesian3.add(rightNormal, leftNormal, normal),\n normal\n );\n addNormals(attr, normal, left, front, back, vertexFormat);\n\n LL = front / 3;\n LR = LL + 1;\n UL = (back - 2) / 3;\n UR = UL - 1;\n indices[index++] = UL;\n indices[index++] = LL;\n indices[index++] = UR;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n\n rightNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(rightEdge, length, scratch1),\n scratch1\n );\n leftNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(leftEdge, length, scratch2),\n scratch2\n );\n normal = Cartesian3.normalize(\n Cartesian3.add(rightNormal, leftNormal, normal),\n normal\n );\n compIndex += 3;\n for (i = 0; i < corners.length; i++) {\n var j;\n corner = corners[i];\n var l = corner.leftPositions;\n var r = corner.rightPositions;\n var pivot;\n var start;\n var outsidePoint = cartesian6;\n var previousPoint = cartesian3;\n var nextPoint = cartesian4;\n normal = Cartesian3.fromArray(computedNormals, compIndex, normal);\n if (defined(l)) {\n addNormals(attr, normal, left, undefined, back, vertexFormat);\n back -= 3;\n pivot = LR;\n start = UR;\n for (j = 0; j < l.length / 3; j++) {\n outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\n indices[index++] = pivot;\n indices[index++] = start - j - 1;\n indices[index++] = start - j;\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n outsidePoint,\n undefined,\n back\n );\n previousPoint = Cartesian3.fromArray(\n finalPositions,\n (start - j - 1) * 3,\n previousPoint\n );\n nextPoint = Cartesian3.fromArray(finalPositions, pivot * 3, nextPoint);\n left = Cartesian3.normalize(\n Cartesian3.subtract(previousPoint, nextPoint, left),\n left\n );\n addNormals(attr, normal, left, undefined, back, vertexFormat);\n back -= 3;\n }\n outsidePoint = Cartesian3.fromArray(\n finalPositions,\n pivot * 3,\n outsidePoint\n );\n previousPoint = Cartesian3.subtract(\n Cartesian3.fromArray(finalPositions, start * 3, previousPoint),\n outsidePoint,\n previousPoint\n );\n nextPoint = Cartesian3.subtract(\n Cartesian3.fromArray(finalPositions, (start - j) * 3, nextPoint),\n outsidePoint,\n nextPoint\n );\n left = Cartesian3.normalize(\n Cartesian3.add(previousPoint, nextPoint, left),\n left\n );\n addNormals(attr, normal, left, front, undefined, vertexFormat);\n front += 3;\n } else {\n addNormals(attr, normal, left, front, undefined, vertexFormat);\n front += 3;\n pivot = UR;\n start = LR;\n for (j = 0; j < r.length / 3; j++) {\n outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\n indices[index++] = pivot;\n indices[index++] = start + j;\n indices[index++] = start + j + 1;\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n outsidePoint,\n front\n );\n previousPoint = Cartesian3.fromArray(\n finalPositions,\n pivot * 3,\n previousPoint\n );\n nextPoint = Cartesian3.fromArray(\n finalPositions,\n (start + j) * 3,\n nextPoint\n );\n left = Cartesian3.normalize(\n Cartesian3.subtract(previousPoint, nextPoint, left),\n left\n );\n addNormals(attr, normal, left, front, undefined, vertexFormat);\n front += 3;\n }\n outsidePoint = Cartesian3.fromArray(\n finalPositions,\n pivot * 3,\n outsidePoint\n );\n previousPoint = Cartesian3.subtract(\n Cartesian3.fromArray(finalPositions, (start + j) * 3, previousPoint),\n outsidePoint,\n previousPoint\n );\n nextPoint = Cartesian3.subtract(\n Cartesian3.fromArray(finalPositions, start * 3, nextPoint),\n outsidePoint,\n nextPoint\n );\n left = Cartesian3.normalize(\n Cartesian3.negate(Cartesian3.add(nextPoint, previousPoint, left), left),\n left\n );\n addNormals(attr, normal, left, undefined, back, vertexFormat);\n back -= 3;\n }\n rightEdge = positions[posIndex++];\n leftEdge = positions[posIndex++];\n rightEdge.splice(0, 3); //remove duplicate points added by corner\n leftEdge.splice(leftEdge.length - 3, 3);\n finalPositions.set(rightEdge, front);\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\n length = leftEdge.length - 3;\n\n compIndex += 3;\n left = Cartesian3.fromArray(computedLefts, compIndex, left);\n for (j = 0; j < leftEdge.length; j += 3) {\n rightNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(rightEdge, j, scratch1),\n scratch1\n );\n leftNormal = ellipsoid.geodeticSurfaceNormal(\n Cartesian3.fromArray(leftEdge, length - j, scratch2),\n scratch2\n );\n normal = Cartesian3.normalize(\n Cartesian3.add(rightNormal, leftNormal, normal),\n normal\n );\n addNormals(attr, normal, left, front, back, vertexFormat);\n\n LR = front / 3;\n LL = LR - 1;\n UR = (back - 2) / 3;\n UL = UR + 1;\n indices[index++] = UL;\n indices[index++] = LL;\n indices[index++] = UR;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n front -= 3;\n back += 3;\n }\n normal = Cartesian3.fromArray(\n computedNormals,\n computedNormals.length - 3,\n normal\n );\n addNormals(attr, normal, left, front, back, vertexFormat);\n\n if (addEndPositions) {\n // add rounded end\n front += 3;\n back -= 3;\n leftPos = cartesian3;\n rightPos = cartesian4;\n var lastEndPositions = endPositions[1];\n for (i = 0; i < halfLength; i++) {\n leftPos = Cartesian3.fromArray(\n lastEndPositions,\n (endPositionLength - i - 1) * 3,\n leftPos\n );\n rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n leftPos,\n undefined,\n back\n );\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n addNormals(attr, normal, left, front, back, vertexFormat);\n\n LR = front / 3;\n LL = LR - 1;\n UR = (back - 2) / 3;\n UL = UR + 1;\n indices[index++] = UL;\n indices[index++] = LL;\n indices[index++] = UR;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n }\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: finalPositions,\n });\n\n if (vertexFormat.st) {\n var st = new Float32Array((size / 3) * 2);\n var rightSt;\n var leftSt;\n var stIndex = 0;\n if (addEndPositions) {\n leftCount /= 3;\n rightCount /= 3;\n var theta = Math.PI / (endPositionLength + 1);\n leftSt = 1 / (leftCount - endPositionLength + 1);\n rightSt = 1 / (rightCount - endPositionLength + 1);\n var a;\n var halfEndPos = endPositionLength / 2;\n for (i = halfEndPos + 1; i < endPositionLength + 1; i++) {\n // lower left rounded end\n a = CesiumMath.PI_OVER_TWO + theta * i;\n st[stIndex++] = rightSt * (1 + Math.cos(a));\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\n }\n for (i = 1; i < rightCount - endPositionLength + 1; i++) {\n // bottom edge\n st[stIndex++] = i * rightSt;\n st[stIndex++] = 0;\n }\n for (i = endPositionLength; i > halfEndPos; i--) {\n // lower right rounded end\n a = CesiumMath.PI_OVER_TWO - i * theta;\n st[stIndex++] = 1 - rightSt * (1 + Math.cos(a));\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\n }\n for (i = halfEndPos; i > 0; i--) {\n // upper right rounded end\n a = CesiumMath.PI_OVER_TWO - theta * i;\n st[stIndex++] = 1 - leftSt * (1 + Math.cos(a));\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\n }\n for (i = leftCount - endPositionLength; i > 0; i--) {\n // top edge\n st[stIndex++] = i * leftSt;\n st[stIndex++] = 1;\n }\n for (i = 1; i < halfEndPos + 1; i++) {\n // upper left rounded end\n a = CesiumMath.PI_OVER_TWO + theta * i;\n st[stIndex++] = leftSt * (1 + Math.cos(a));\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\n }\n } else {\n leftCount /= 3;\n rightCount /= 3;\n leftSt = 1 / (leftCount - 1);\n rightSt = 1 / (rightCount - 1);\n for (i = 0; i < rightCount; i++) {\n // bottom edge\n st[stIndex++] = i * rightSt;\n st[stIndex++] = 0;\n }\n for (i = leftCount; i > 0; i--) {\n // top edge\n st[stIndex++] = (i - 1) * leftSt;\n st[stIndex++] = 1;\n }\n }\n\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attr.normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attr.tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attr.bitangents,\n });\n }\n\n return {\n attributes: attributes,\n indices: indices,\n };\n}\n\nfunction extrudedAttributes(attributes, vertexFormat) {\n if (\n !vertexFormat.normal &&\n !vertexFormat.tangent &&\n !vertexFormat.bitangent &&\n !vertexFormat.st\n ) {\n return attributes;\n }\n var positions = attributes.position.values;\n var topNormals;\n var topBitangents;\n if (vertexFormat.normal || vertexFormat.bitangent) {\n topNormals = attributes.normal.values;\n topBitangents = attributes.bitangent.values;\n }\n var size = attributes.position.values.length / 18;\n var threeSize = size * 3;\n var twoSize = size * 2;\n var sixSize = threeSize * 2;\n var i;\n if (vertexFormat.normal || vertexFormat.bitangent || vertexFormat.tangent) {\n var normals = vertexFormat.normal\n ? new Float32Array(threeSize * 6)\n : undefined;\n var tangents = vertexFormat.tangent\n ? new Float32Array(threeSize * 6)\n : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(threeSize * 6)\n : undefined;\n var topPosition = cartesian1;\n var bottomPosition = cartesian2;\n var previousPosition = cartesian3;\n var normal = cartesian4;\n var tangent = cartesian5;\n var bitangent = cartesian6;\n var attrIndex = sixSize;\n for (i = 0; i < threeSize; i += 3) {\n var attrIndexOffset = attrIndex + sixSize;\n topPosition = Cartesian3.fromArray(positions, i, topPosition);\n bottomPosition = Cartesian3.fromArray(\n positions,\n i + threeSize,\n bottomPosition\n );\n previousPosition = Cartesian3.fromArray(\n positions,\n (i + 3) % threeSize,\n previousPosition\n );\n bottomPosition = Cartesian3.subtract(\n bottomPosition,\n topPosition,\n bottomPosition\n );\n previousPosition = Cartesian3.subtract(\n previousPosition,\n topPosition,\n previousPosition\n );\n normal = Cartesian3.normalize(\n Cartesian3.cross(bottomPosition, previousPosition, normal),\n normal\n );\n if (vertexFormat.normal) {\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndexOffset);\n CorridorGeometryLibrary.addAttribute(\n normals,\n normal,\n attrIndexOffset + 3\n );\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex);\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex + 3);\n }\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n bitangent = Cartesian3.fromArray(topNormals, i, bitangent);\n if (vertexFormat.bitangent) {\n CorridorGeometryLibrary.addAttribute(\n bitangents,\n bitangent,\n attrIndexOffset\n );\n CorridorGeometryLibrary.addAttribute(\n bitangents,\n bitangent,\n attrIndexOffset + 3\n );\n CorridorGeometryLibrary.addAttribute(\n bitangents,\n bitangent,\n attrIndex\n );\n CorridorGeometryLibrary.addAttribute(\n bitangents,\n bitangent,\n attrIndex + 3\n );\n }\n\n if (vertexFormat.tangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(bitangent, normal, tangent),\n tangent\n );\n CorridorGeometryLibrary.addAttribute(\n tangents,\n tangent,\n attrIndexOffset\n );\n CorridorGeometryLibrary.addAttribute(\n tangents,\n tangent,\n attrIndexOffset + 3\n );\n CorridorGeometryLibrary.addAttribute(tangents, tangent, attrIndex);\n CorridorGeometryLibrary.addAttribute(\n tangents,\n tangent,\n attrIndex + 3\n );\n }\n }\n attrIndex += 6;\n }\n\n if (vertexFormat.normal) {\n normals.set(topNormals); //top\n for (i = 0; i < threeSize; i += 3) {\n //bottom normals\n normals[i + threeSize] = -topNormals[i];\n normals[i + threeSize + 1] = -topNormals[i + 1];\n normals[i + threeSize + 2] = -topNormals[i + 2];\n }\n attributes.normal.values = normals;\n } else {\n attributes.normal = undefined;\n }\n\n if (vertexFormat.bitangent) {\n bitangents.set(topBitangents); //top\n bitangents.set(topBitangents, threeSize); //bottom\n attributes.bitangent.values = bitangents;\n } else {\n attributes.bitangent = undefined;\n }\n\n if (vertexFormat.tangent) {\n var topTangents = attributes.tangent.values;\n tangents.set(topTangents); //top\n tangents.set(topTangents, threeSize); //bottom\n attributes.tangent.values = tangents;\n }\n }\n if (vertexFormat.st) {\n var topSt = attributes.st.values;\n var st = new Float32Array(twoSize * 6);\n st.set(topSt); //top\n st.set(topSt, twoSize); //bottom\n var index = twoSize * 2;\n\n for (var j = 0; j < 2; j++) {\n st[index++] = topSt[0];\n st[index++] = topSt[1];\n for (i = 2; i < twoSize; i += 2) {\n var s = topSt[i];\n var t = topSt[i + 1];\n st[index++] = s;\n st[index++] = t;\n st[index++] = s;\n st[index++] = t;\n }\n st[index++] = topSt[0];\n st[index++] = topSt[1];\n }\n attributes.st.values = st;\n }\n\n return attributes;\n}\n\nfunction addWallPositions(positions, index, wallPositions) {\n wallPositions[index++] = positions[0];\n wallPositions[index++] = positions[1];\n wallPositions[index++] = positions[2];\n for (var i = 3; i < positions.length; i += 3) {\n var x = positions[i];\n var y = positions[i + 1];\n var z = positions[i + 2];\n wallPositions[index++] = x;\n wallPositions[index++] = y;\n wallPositions[index++] = z;\n wallPositions[index++] = x;\n wallPositions[index++] = y;\n wallPositions[index++] = z;\n }\n wallPositions[index++] = positions[0];\n wallPositions[index++] = positions[1];\n wallPositions[index++] = positions[2];\n\n return wallPositions;\n}\n\nfunction computePositionsExtruded(params, vertexFormat) {\n var topVertexFormat = new VertexFormat({\n position: vertexFormat.position,\n normal:\n vertexFormat.normal || vertexFormat.bitangent || params.shadowVolume,\n tangent: vertexFormat.tangent,\n bitangent: vertexFormat.normal || vertexFormat.bitangent,\n st: vertexFormat.st,\n });\n var ellipsoid = params.ellipsoid;\n var computedPositions = CorridorGeometryLibrary.computePositions(params);\n var attr = combine(computedPositions, topVertexFormat, ellipsoid);\n var height = params.height;\n var extrudedHeight = params.extrudedHeight;\n var attributes = attr.attributes;\n var indices = attr.indices;\n var positions = attributes.position.values;\n var length = positions.length;\n var newPositions = new Float64Array(length * 6);\n var extrudedPositions = new Float64Array(length);\n extrudedPositions.set(positions);\n var wallPositions = new Float64Array(length * 4);\n\n positions = PolygonPipeline.scaleToGeodeticHeight(\n positions,\n height,\n ellipsoid\n );\n wallPositions = addWallPositions(positions, 0, wallPositions);\n extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\n extrudedPositions,\n extrudedHeight,\n ellipsoid\n );\n wallPositions = addWallPositions(\n extrudedPositions,\n length * 2,\n wallPositions\n );\n newPositions.set(positions);\n newPositions.set(extrudedPositions, length);\n newPositions.set(wallPositions, length * 2);\n attributes.position.values = newPositions;\n\n attributes = extrudedAttributes(attributes, vertexFormat);\n var i;\n var size = length / 3;\n if (params.shadowVolume) {\n var topNormals = attributes.normal.values;\n length = topNormals.length;\n\n var extrudeNormals = new Float32Array(length * 6);\n for (i = 0; i < length; i++) {\n topNormals[i] = -topNormals[i];\n }\n //only get normals for bottom layer that's going to be pushed down\n extrudeNormals.set(topNormals, length); //bottom face\n extrudeNormals = addWallPositions(topNormals, length * 4, extrudeNormals); //bottom wall\n attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: extrudeNormals,\n });\n if (!vertexFormat.normal) {\n attributes.normal = undefined;\n }\n }\n if (defined(params.offsetAttribute)) {\n var applyOffset = new Uint8Array(size * 6);\n if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\n applyOffset = arrayFill(applyOffset, 1, 0, size); // top face\n applyOffset = arrayFill(applyOffset, 1, size * 2, size * 4); // top wall\n } else {\n var applyOffsetValue =\n params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n applyOffset = arrayFill(applyOffset, applyOffsetValue);\n }\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n var iLength = indices.length;\n var twoSize = size + size;\n var newIndices = IndexDatatype.createTypedArray(\n newPositions.length / 3,\n iLength * 2 + twoSize * 3\n );\n newIndices.set(indices);\n var index = iLength;\n for (i = 0; i < iLength; i += 3) {\n // bottom indices\n var v0 = indices[i];\n var v1 = indices[i + 1];\n var v2 = indices[i + 2];\n newIndices[index++] = v2 + size;\n newIndices[index++] = v1 + size;\n newIndices[index++] = v0 + size;\n }\n\n var UL, LL, UR, LR;\n\n for (i = 0; i < twoSize; i += 2) {\n //wall indices\n UL = i + twoSize;\n LL = UL + twoSize;\n UR = UL + 1;\n LR = LL + 1;\n newIndices[index++] = UL;\n newIndices[index++] = LL;\n newIndices[index++] = UR;\n newIndices[index++] = UR;\n newIndices[index++] = LL;\n newIndices[index++] = LR;\n }\n\n return {\n attributes: attributes,\n indices: newIndices,\n };\n}\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartographic = new Cartographic();\n\nfunction computeOffsetPoints(\n position1,\n position2,\n ellipsoid,\n halfWidth,\n min,\n max\n) {\n // Compute direction of offset the point\n var direction = Cartesian3.subtract(position2, position1, scratchCartesian1);\n Cartesian3.normalize(direction, direction);\n var normal = ellipsoid.geodeticSurfaceNormal(position1, scratchCartesian2);\n var offsetDirection = Cartesian3.cross(direction, normal, scratchCartesian1);\n Cartesian3.multiplyByScalar(offsetDirection, halfWidth, offsetDirection);\n\n var minLat = min.latitude;\n var minLon = min.longitude;\n var maxLat = max.latitude;\n var maxLon = max.longitude;\n\n // Compute 2 offset points\n Cartesian3.add(position1, offsetDirection, scratchCartesian2);\n ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\n\n var lat = scratchCartographic.latitude;\n var lon = scratchCartographic.longitude;\n minLat = Math.min(minLat, lat);\n minLon = Math.min(minLon, lon);\n maxLat = Math.max(maxLat, lat);\n maxLon = Math.max(maxLon, lon);\n\n Cartesian3.subtract(position1, offsetDirection, scratchCartesian2);\n ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\n\n lat = scratchCartographic.latitude;\n lon = scratchCartographic.longitude;\n minLat = Math.min(minLat, lat);\n minLon = Math.min(minLon, lon);\n maxLat = Math.max(maxLat, lat);\n maxLon = Math.max(maxLon, lon);\n\n min.latitude = minLat;\n min.longitude = minLon;\n max.latitude = maxLat;\n max.longitude = maxLon;\n}\n\nvar scratchCartesianOffset = new Cartesian3();\nvar scratchCartesianEnds = new Cartesian3();\nvar scratchCartographicMin = new Cartographic();\nvar scratchCartographicMax = new Cartographic();\n\nfunction computeRectangle(positions, ellipsoid, width, cornerType, result) {\n positions = scaleToSurface(positions, ellipsoid);\n var cleanPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n var length = cleanPositions.length;\n if (length < 2 || width <= 0) {\n return new Rectangle();\n }\n var halfWidth = width * 0.5;\n\n scratchCartographicMin.latitude = Number.POSITIVE_INFINITY;\n scratchCartographicMin.longitude = Number.POSITIVE_INFINITY;\n scratchCartographicMax.latitude = Number.NEGATIVE_INFINITY;\n scratchCartographicMax.longitude = Number.NEGATIVE_INFINITY;\n\n var lat, lon;\n if (cornerType === CornerType.ROUNDED) {\n // Compute start cap\n var first = cleanPositions[0];\n Cartesian3.subtract(first, cleanPositions[1], scratchCartesianOffset);\n Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\n Cartesian3.multiplyByScalar(\n scratchCartesianOffset,\n halfWidth,\n scratchCartesianOffset\n );\n Cartesian3.add(first, scratchCartesianOffset, scratchCartesianEnds);\n\n ellipsoid.cartesianToCartographic(\n scratchCartesianEnds,\n scratchCartographic\n );\n lat = scratchCartographic.latitude;\n lon = scratchCartographic.longitude;\n scratchCartographicMin.latitude = Math.min(\n scratchCartographicMin.latitude,\n lat\n );\n scratchCartographicMin.longitude = Math.min(\n scratchCartographicMin.longitude,\n lon\n );\n scratchCartographicMax.latitude = Math.max(\n scratchCartographicMax.latitude,\n lat\n );\n scratchCartographicMax.longitude = Math.max(\n scratchCartographicMax.longitude,\n lon\n );\n }\n\n // Compute the rest\n for (var i = 0; i < length - 1; ++i) {\n computeOffsetPoints(\n cleanPositions[i],\n cleanPositions[i + 1],\n ellipsoid,\n halfWidth,\n scratchCartographicMin,\n scratchCartographicMax\n );\n }\n\n // Compute ending point\n var last = cleanPositions[length - 1];\n Cartesian3.subtract(last, cleanPositions[length - 2], scratchCartesianOffset);\n Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\n Cartesian3.multiplyByScalar(\n scratchCartesianOffset,\n halfWidth,\n scratchCartesianOffset\n );\n Cartesian3.add(last, scratchCartesianOffset, scratchCartesianEnds);\n computeOffsetPoints(\n last,\n scratchCartesianEnds,\n ellipsoid,\n halfWidth,\n scratchCartographicMin,\n scratchCartographicMax\n );\n\n if (cornerType === CornerType.ROUNDED) {\n // Compute end cap\n ellipsoid.cartesianToCartographic(\n scratchCartesianEnds,\n scratchCartographic\n );\n lat = scratchCartographic.latitude;\n lon = scratchCartographic.longitude;\n scratchCartographicMin.latitude = Math.min(\n scratchCartographicMin.latitude,\n lat\n );\n scratchCartographicMin.longitude = Math.min(\n scratchCartographicMin.longitude,\n lon\n );\n scratchCartographicMax.latitude = Math.max(\n scratchCartographicMax.latitude,\n lat\n );\n scratchCartographicMax.longitude = Math.max(\n scratchCartographicMax.longitude,\n lon\n );\n }\n\n var rectangle = defined(result) ? result : new Rectangle();\n rectangle.north = scratchCartographicMax.latitude;\n rectangle.south = scratchCartographicMin.latitude;\n rectangle.east = scratchCartographicMax.longitude;\n rectangle.west = scratchCartographicMin.longitude;\n\n return rectangle;\n}\n\n/**\n * A description of a corridor. Corridor geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias CorridorGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\n * @param {Number} options.width The distance between the edges of the corridor in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number} [options.height=0] The distance in meters between the ellipsoid surface and the positions.\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipsoid surface and the extruded face.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see CorridorGeometry.createGeometry\n * @see Packable\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Corridor.html|Cesium Sandcastle Corridor Demo}\n *\n * @example\n * var corridor = new Cesium.CorridorGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\n * width : 100000\n * });\n */\nfunction CorridorGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n var width = options.width;\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", positions);\n Check.defined(\"options.width\", width);\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._positions = positions;\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._vertexFormat = VertexFormat.clone(\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\n );\n this._width = width;\n this._height = Math.max(height, extrudedHeight);\n this._extrudedHeight = Math.min(height, extrudedHeight);\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._shadowVolume = defaultValue(options.shadowVolume, false);\n this._workerName = \"createCorridorGeometry\";\n this._offsetAttribute = options.offsetAttribute;\n this._rectangle = undefined;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n 1 +\n positions.length * Cartesian3.packedLength +\n Ellipsoid.packedLength +\n VertexFormat.packedLength +\n 7;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CorridorGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCorridorGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (var i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._width;\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._cornerType;\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n positions: undefined,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n width: undefined,\n height: undefined,\n extrudedHeight: undefined,\n cornerType: undefined,\n granularity: undefined,\n shadowVolume: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CorridorGeometry} [result] The object into which to store the result.\n * @returns {CorridorGeometry} The modified result parameter or a new CorridorGeometry instance if one was not provided.\n */\nCorridorGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (var i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var width = array[startingIndex++];\n var height = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var cornerType = array[startingIndex++];\n var granularity = array[startingIndex++];\n var shadowVolume = array[startingIndex++] === 1.0;\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.positions = positions;\n scratchOptions.width = width;\n scratchOptions.height = height;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.cornerType = cornerType;\n scratchOptions.granularity = granularity;\n scratchOptions.shadowVolume = shadowVolume;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return new CorridorGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._width = width;\n result._height = height;\n result._extrudedHeight = extrudedHeight;\n result._cornerType = cornerType;\n result._granularity = granularity;\n result._shadowVolume = shadowVolume;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the bounding rectangle given the provided options\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\n * @param {Number} options.width The distance between the edges of the corridor in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle.\n */\nCorridorGeometry.computeRectangle = function (options, result) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n var width = options.width;\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", positions);\n Check.defined(\"options.width\", width);\n //>>includeEnd('debug');\n\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\n\n return computeRectangle(positions, ellipsoid, width, cornerType, result);\n};\n\n/**\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\n *\n * @param {CorridorGeometry} corridorGeometry A description of the corridor.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCorridorGeometry.createGeometry = function (corridorGeometry) {\n var positions = corridorGeometry._positions;\n var width = corridorGeometry._width;\n var ellipsoid = corridorGeometry._ellipsoid;\n\n positions = scaleToSurface(positions, ellipsoid);\n var cleanPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n\n if (cleanPositions.length < 2 || width <= 0) {\n return;\n }\n\n var height = corridorGeometry._height;\n var extrudedHeight = corridorGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n height,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n\n var vertexFormat = corridorGeometry._vertexFormat;\n var params = {\n ellipsoid: ellipsoid,\n positions: cleanPositions,\n width: width,\n cornerType: corridorGeometry._cornerType,\n granularity: corridorGeometry._granularity,\n saveAttributes: true,\n };\n var attr;\n if (extrude) {\n params.height = height;\n params.extrudedHeight = extrudedHeight;\n params.shadowVolume = corridorGeometry._shadowVolume;\n params.offsetAttribute = corridorGeometry._offsetAttribute;\n attr = computePositionsExtruded(params, vertexFormat);\n } else {\n var computedPositions = CorridorGeometryLibrary.computePositions(params);\n attr = combine(computedPositions, vertexFormat, ellipsoid);\n attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n attr.attributes.position.values,\n height,\n ellipsoid\n );\n\n if (defined(corridorGeometry._offsetAttribute)) {\n var applyOffsetValue =\n corridorGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n var length = attr.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n arrayFill(applyOffset, applyOffsetValue);\n attr.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n }\n var attributes = attr.attributes;\n var boundingSphere = BoundingSphere.fromVertices(\n attributes.position.values,\n undefined,\n 3\n );\n if (!vertexFormat.position) {\n attr.attributes.position.values = undefined;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: attr.indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: boundingSphere,\n offsetAttribute: corridorGeometry._offsetAttribute,\n });\n};\n\n/**\n * @private\n */\nCorridorGeometry.createShadowVolume = function (\n corridorGeometry,\n minHeightFunc,\n maxHeightFunc\n) {\n var granularity = corridorGeometry._granularity;\n var ellipsoid = corridorGeometry._ellipsoid;\n\n var minHeight = minHeightFunc(granularity, ellipsoid);\n var maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n return new CorridorGeometry({\n positions: corridorGeometry._positions,\n width: corridorGeometry._width,\n cornerType: corridorGeometry._cornerType,\n ellipsoid: ellipsoid,\n granularity: granularity,\n extrudedHeight: minHeight,\n height: maxHeight,\n vertexFormat: VertexFormat.POSITION_ONLY,\n shadowVolume: true,\n });\n};\n\nObject.defineProperties(CorridorGeometry.prototype, {\n /**\n * @private\n */\n rectangle: {\n get: function () {\n if (!defined(this._rectangle)) {\n this._rectangle = computeRectangle(\n this._positions,\n this._ellipsoid,\n this._width,\n this._cornerType\n );\n }\n return this._rectangle;\n },\n },\n /**\n * For remapping texture coordinates when rendering CorridorGeometries as GroundPrimitives.\n *\n * Corridors don't support stRotation,\n * so just return the corners of the original system.\n * @private\n */\n textureCoordinateRotationPoints: {\n get: function () {\n return [0, 0, 0, 1, 1, 0];\n },\n },\n});\nexport default CorridorGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nvar cartesian1 = new Cartesian3();\nvar cartesian2 = new Cartesian3();\nvar cartesian3 = new Cartesian3();\n\nfunction scaleToSurface(positions, ellipsoid) {\n for (var i = 0; i < positions.length; i++) {\n positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\n }\n return positions;\n}\n\nfunction combine(computedPositions, cornerType) {\n var wallIndices = [];\n var positions = computedPositions.positions;\n var corners = computedPositions.corners;\n var endPositions = computedPositions.endPositions;\n var attributes = new GeometryAttributes();\n var corner;\n var leftCount = 0;\n var rightCount = 0;\n var i;\n var indicesLength = 0;\n var length;\n for (i = 0; i < positions.length; i += 2) {\n length = positions[i].length - 3;\n leftCount += length; //subtracting 3 to account for duplicate points at corners\n indicesLength += (length / 3) * 4;\n rightCount += positions[i + 1].length - 3;\n }\n leftCount += 3; //add back count for end positions\n rightCount += 3;\n for (i = 0; i < corners.length; i++) {\n corner = corners[i];\n var leftSide = corners[i].leftPositions;\n if (defined(leftSide)) {\n length = leftSide.length;\n leftCount += length;\n indicesLength += (length / 3) * 2;\n } else {\n length = corners[i].rightPositions.length;\n rightCount += length;\n indicesLength += (length / 3) * 2;\n }\n }\n\n var addEndPositions = defined(endPositions);\n var endPositionLength;\n if (addEndPositions) {\n endPositionLength = endPositions[0].length - 3;\n leftCount += endPositionLength;\n rightCount += endPositionLength;\n endPositionLength /= 3;\n indicesLength += endPositionLength * 4;\n }\n var size = leftCount + rightCount;\n var finalPositions = new Float64Array(size);\n var front = 0;\n var back = size - 1;\n var UL, LL, UR, LR;\n var rightPos, leftPos;\n var halfLength = endPositionLength / 2;\n\n var indices = IndexDatatype.createTypedArray(size / 3, indicesLength + 4);\n var index = 0;\n\n indices[index++] = front / 3;\n indices[index++] = (back - 2) / 3;\n if (addEndPositions) {\n // add rounded end\n wallIndices.push(front / 3);\n leftPos = cartesian1;\n rightPos = cartesian2;\n var firstEndPositions = endPositions[0];\n for (i = 0; i < halfLength; i++) {\n leftPos = Cartesian3.fromArray(\n firstEndPositions,\n (halfLength - 1 - i) * 3,\n leftPos\n );\n rightPos = Cartesian3.fromArray(\n firstEndPositions,\n (halfLength + i) * 3,\n rightPos\n );\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n leftPos,\n undefined,\n back\n );\n\n LL = front / 3;\n LR = LL + 1;\n UL = (back - 2) / 3;\n UR = UL - 1;\n indices[index++] = UL;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n }\n\n var posIndex = 0;\n var rightEdge = positions[posIndex++]; //add first two edges\n var leftEdge = positions[posIndex++];\n finalPositions.set(rightEdge, front);\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\n\n length = leftEdge.length - 3;\n wallIndices.push(front / 3, (back - 2) / 3);\n for (i = 0; i < length; i += 3) {\n LL = front / 3;\n LR = LL + 1;\n UL = (back - 2) / 3;\n UR = UL - 1;\n indices[index++] = UL;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n\n for (i = 0; i < corners.length; i++) {\n var j;\n corner = corners[i];\n var l = corner.leftPositions;\n var r = corner.rightPositions;\n var start;\n var outsidePoint = cartesian3;\n if (defined(l)) {\n back -= 3;\n start = UR;\n wallIndices.push(LR);\n for (j = 0; j < l.length / 3; j++) {\n outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\n indices[index++] = start - j - 1;\n indices[index++] = start - j;\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n outsidePoint,\n undefined,\n back\n );\n back -= 3;\n }\n wallIndices.push(start - Math.floor(l.length / 6));\n if (cornerType === CornerType.BEVELED) {\n wallIndices.push((back - 2) / 3 + 1);\n }\n front += 3;\n } else {\n front += 3;\n start = LR;\n wallIndices.push(UR);\n for (j = 0; j < r.length / 3; j++) {\n outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\n indices[index++] = start + j;\n indices[index++] = start + j + 1;\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n outsidePoint,\n front\n );\n front += 3;\n }\n wallIndices.push(start + Math.floor(r.length / 6));\n if (cornerType === CornerType.BEVELED) {\n wallIndices.push(front / 3 - 1);\n }\n back -= 3;\n }\n rightEdge = positions[posIndex++];\n leftEdge = positions[posIndex++];\n rightEdge.splice(0, 3); //remove duplicate points added by corner\n leftEdge.splice(leftEdge.length - 3, 3);\n finalPositions.set(rightEdge, front);\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\n length = leftEdge.length - 3;\n\n for (j = 0; j < leftEdge.length; j += 3) {\n LR = front / 3;\n LL = LR - 1;\n UR = (back - 2) / 3;\n UL = UR + 1;\n indices[index++] = UL;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n front += 3;\n back -= 3;\n }\n front -= 3;\n back += 3;\n wallIndices.push(front / 3, (back - 2) / 3);\n }\n\n if (addEndPositions) {\n // add rounded end\n front += 3;\n back -= 3;\n leftPos = cartesian1;\n rightPos = cartesian2;\n var lastEndPositions = endPositions[1];\n for (i = 0; i < halfLength; i++) {\n leftPos = Cartesian3.fromArray(\n lastEndPositions,\n (endPositionLength - i - 1) * 3,\n leftPos\n );\n rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\n CorridorGeometryLibrary.addAttribute(\n finalPositions,\n leftPos,\n undefined,\n back\n );\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n\n LR = front / 3;\n LL = LR - 1;\n UR = (back - 2) / 3;\n UL = UR + 1;\n indices[index++] = UL;\n indices[index++] = UR;\n indices[index++] = LL;\n indices[index++] = LR;\n\n front += 3;\n back -= 3;\n }\n\n wallIndices.push(front / 3);\n } else {\n wallIndices.push(front / 3, (back - 2) / 3);\n }\n indices[index++] = front / 3;\n indices[index++] = (back - 2) / 3;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: finalPositions,\n });\n\n return {\n attributes: attributes,\n indices: indices,\n wallIndices: wallIndices,\n };\n}\n\nfunction computePositionsExtruded(params) {\n var ellipsoid = params.ellipsoid;\n var computedPositions = CorridorGeometryLibrary.computePositions(params);\n var attr = combine(computedPositions, params.cornerType);\n var wallIndices = attr.wallIndices;\n var height = params.height;\n var extrudedHeight = params.extrudedHeight;\n var attributes = attr.attributes;\n var indices = attr.indices;\n var positions = attributes.position.values;\n var length = positions.length;\n var extrudedPositions = new Float64Array(length);\n extrudedPositions.set(positions);\n var newPositions = new Float64Array(length * 2);\n\n positions = PolygonPipeline.scaleToGeodeticHeight(\n positions,\n height,\n ellipsoid\n );\n extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\n extrudedPositions,\n extrudedHeight,\n ellipsoid\n );\n newPositions.set(positions);\n newPositions.set(extrudedPositions, length);\n attributes.position.values = newPositions;\n\n length /= 3;\n if (defined(params.offsetAttribute)) {\n var applyOffset = new Uint8Array(length * 2);\n if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\n applyOffset = arrayFill(applyOffset, 1, 0, length);\n } else {\n var applyOffsetValue =\n params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n applyOffset = arrayFill(applyOffset, applyOffsetValue);\n }\n\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n var i;\n var iLength = indices.length;\n var newIndices = IndexDatatype.createTypedArray(\n newPositions.length / 3,\n (iLength + wallIndices.length) * 2\n );\n newIndices.set(indices);\n var index = iLength;\n for (i = 0; i < iLength; i += 2) {\n // bottom indices\n var v0 = indices[i];\n var v1 = indices[i + 1];\n newIndices[index++] = v0 + length;\n newIndices[index++] = v1 + length;\n }\n\n var UL, LL;\n for (i = 0; i < wallIndices.length; i++) {\n //wall indices\n UL = wallIndices[i];\n LL = UL + length;\n newIndices[index++] = UL;\n newIndices[index++] = LL;\n }\n\n return {\n attributes: attributes,\n indices: newIndices,\n };\n}\n\n/**\n * A description of a corridor outline.\n *\n * @alias CorridorOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor outline.\n * @param {Number} options.width The distance between the edges of the corridor outline.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number} [options.height=0] The distance in meters between the positions and the ellipsoid surface.\n * @param {Number} [options.extrudedHeight] The distance in meters between the extruded face and the ellipsoid surface.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see CorridorOutlineGeometry.createGeometry\n *\n * @example\n * var corridor = new Cesium.CorridorOutlineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\n * width : 100000\n * });\n */\nfunction CorridorOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n var width = options.width;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.positions\", positions);\n Check.typeOf.number(\"options.width\", width);\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._positions = positions;\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._width = width;\n this._height = Math.max(height, extrudedHeight);\n this._extrudedHeight = Math.min(height, extrudedHeight);\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createCorridorOutlineGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n 1 + positions.length * Cartesian3.packedLength + Ellipsoid.packedLength + 6;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CorridorOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCorridorOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.typeOf.object(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (var i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._width;\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._cornerType;\n array[startingIndex++] = value._granularity;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchOptions = {\n positions: undefined,\n ellipsoid: scratchEllipsoid,\n width: undefined,\n height: undefined,\n extrudedHeight: undefined,\n cornerType: undefined,\n granularity: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CorridorOutlineGeometry} [result] The object into which to store the result.\n * @returns {CorridorOutlineGeometry} The modified result parameter or a new CorridorOutlineGeometry instance if one was not provided.\n */\nCorridorOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (var i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var width = array[startingIndex++];\n var height = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var cornerType = array[startingIndex++];\n var granularity = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.positions = positions;\n scratchOptions.width = width;\n scratchOptions.height = height;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.cornerType = cornerType;\n scratchOptions.granularity = granularity;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new CorridorOutlineGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._width = width;\n result._height = height;\n result._extrudedHeight = extrudedHeight;\n result._cornerType = cornerType;\n result._granularity = granularity;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\n *\n * @param {CorridorOutlineGeometry} corridorOutlineGeometry A description of the corridor.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCorridorOutlineGeometry.createGeometry = function (corridorOutlineGeometry) {\n var positions = corridorOutlineGeometry._positions;\n var width = corridorOutlineGeometry._width;\n var ellipsoid = corridorOutlineGeometry._ellipsoid;\n\n positions = scaleToSurface(positions, ellipsoid);\n var cleanPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n\n if (cleanPositions.length < 2 || width <= 0) {\n return;\n }\n\n var height = corridorOutlineGeometry._height;\n var extrudedHeight = corridorOutlineGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n height,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n\n var params = {\n ellipsoid: ellipsoid,\n positions: cleanPositions,\n width: width,\n cornerType: corridorOutlineGeometry._cornerType,\n granularity: corridorOutlineGeometry._granularity,\n saveAttributes: false,\n };\n var attr;\n if (extrude) {\n params.height = height;\n params.extrudedHeight = extrudedHeight;\n params.offsetAttribute = corridorOutlineGeometry._offsetAttribute;\n attr = computePositionsExtruded(params);\n } else {\n var computedPositions = CorridorGeometryLibrary.computePositions(params);\n attr = combine(computedPositions, params.cornerType);\n attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n attr.attributes.position.values,\n height,\n ellipsoid\n );\n\n if (defined(corridorOutlineGeometry._offsetAttribute)) {\n var length = attr.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n corridorOutlineGeometry._offsetAttribute ===\n GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n attr.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n }\n var attributes = attr.attributes;\n var boundingSphere = BoundingSphere.fromVertices(\n attributes.position.values,\n undefined,\n 3\n );\n\n return new Geometry({\n attributes: attributes,\n indices: attr.indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: boundingSphere,\n offsetAttribute: corridorOutlineGeometry._offsetAttribute,\n });\n};\nexport default CorridorOutlineGeometry;\n","/**\n * Creates a Globally unique identifier (GUID) string. A GUID is 128 bits long, and can guarantee uniqueness across space and time.\n *\n * @function\n *\n * @returns {String}\n *\n *\n * @example\n * this.guid = Cesium.createGuid();\n *\n * @see {@link http://www.ietf.org/rfc/rfc4122.txt|RFC 4122 A Universally Unique IDentifier (UUID) URN Namespace}\n */\nfunction createGuid() {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0;\n var v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\nexport default createGuid;\n","import Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport Resource from \"./Resource.js\";\n\nvar defaultTokenCredit;\nvar defaultAccessToken =\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4NzdlNDVhMy1mNDAxLTQ5MWMtODhkYS00MTc1MTU4NzFmNzciLCJpZCI6MjU5LCJzY29wZXMiOlsiYXNyIiwiZ2MiXSwiaWF0IjoxNTkzNjI4MDI3fQ.sqnKP2DNn0soCyh1t9taAa2xkbZ6EIn0Z7_VwujTCtQ\";\n/**\n * Default settings for accessing the Cesium ion API.\n *\n * An ion access token is only required if you are using any ion related APIs.\n * A default access token is provided for evaluation purposes only.\n * Sign up for a free ion account and get your own access token at {@link https://cesium.com}\n *\n * @see IonResource\n * @see IonImageryProvider\n * @see IonGeocoderService\n * @see createWorldImagery\n * @see createWorldTerrain\n * @namespace Ion\n */\nvar Ion = {};\n\n/**\n * Gets or sets the default Cesium ion access token.\n *\n * @type {String}\n */\nIon.defaultAccessToken = defaultAccessToken;\n\n/**\n * Gets or sets the default Cesium ion server.\n *\n * @type {String|Resource}\n * @default https://api.cesium.com\n */\nIon.defaultServer = new Resource({ url: \"https://api.cesium.com/\" });\n\nIon.getDefaultTokenCredit = function (providedKey) {\n if (providedKey !== defaultAccessToken) {\n return undefined;\n }\n\n if (!defined(defaultTokenCredit)) {\n var defaultTokenMessage =\n '<b> \\\n This application is using Cesium\\'s default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> \\\n with an access token from your ion account before making any Cesium API calls. \\\n You can sign up for a free ion account at <a href=\"https://cesium.com\">https://cesium.com</a>.</b>';\n\n defaultTokenCredit = new Credit(defaultTokenMessage, true);\n }\n\n return defaultTokenCredit;\n};\nexport default Ion;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ion from \"./Ion.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * A {@link Resource} instance that encapsulates Cesium ion asset access.\n * This object is normally not instantiated directly, use {@link IonResource.fromAssetId}.\n *\n * @alias IonResource\n * @constructor\n * @augments Resource\n *\n * @param {Object} endpoint The result of the Cesium ion asset endpoint service.\n * @param {Resource} endpointResource The resource used to retreive the endpoint.\n *\n * @see Ion\n * @see IonImageryProvider\n * @see createWorldTerrain\n * @see https://cesium.com\n */\nfunction IonResource(endpoint, endpointResource) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"endpoint\", endpoint);\n Check.defined(\"endpointResource\", endpointResource);\n //>>includeEnd('debug');\n\n var options;\n var externalType = endpoint.externalType;\n var isExternal = defined(externalType);\n\n if (!isExternal) {\n options = {\n url: endpoint.url,\n retryAttempts: 1,\n retryCallback: retryCallback,\n };\n } else if (\n externalType === \"3DTILES\" ||\n externalType === \"STK_TERRAIN_SERVER\"\n ) {\n // 3D Tiles and STK Terrain Server external assets can still be represented as an IonResource\n options = { url: endpoint.options.url };\n } else {\n //External imagery assets have additional configuration that can't be represented as a Resource\n throw new RuntimeError(\n \"Ion.createResource does not support external imagery assets; use IonImageryProvider instead.\"\n );\n }\n\n Resource.call(this, options);\n\n // The asset endpoint data returned from ion.\n this._ionEndpoint = endpoint;\n this._ionEndpointDomain = isExternal\n ? undefined\n : new Uri(endpoint.url).authority;\n\n // The endpoint resource to fetch when a new token is needed\n this._ionEndpointResource = endpointResource;\n\n // The primary IonResource from which an instance is derived\n this._ionRoot = undefined;\n\n // Shared promise for endpooint requests amd credits (only ever set on the root request)\n this._pendingPromise = undefined;\n this._credits = undefined;\n this._isExternal = isExternal;\n}\n\nif (defined(Object.create)) {\n IonResource.prototype = Object.create(Resource.prototype);\n IonResource.prototype.constructor = IonResource;\n}\n\n/**\n * Asynchronously creates an instance.\n *\n * @param {Number} assetId The Cesium ion asset id.\n * @param {Object} [options] An object with the following properties:\n * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use.\n * @param {String|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server.\n * @returns {Promise.<IonResource>} A Promise to am instance representing the Cesium ion Asset.\n *\n * @example\n * //Load a Cesium3DTileset with asset ID of 124624234\n * viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(124624234) }));\n *\n * @example\n * //Load a CZML file with asset ID of 10890\n * Cesium.IonResource.fromAssetId(10890)\n * .then(function (resource) {\n * viewer.dataSources.add(Cesium.CzmlDataSource.load(resource));\n * });\n */\nIonResource.fromAssetId = function (assetId, options) {\n var endpointResource = IonResource._createEndpointResource(assetId, options);\n\n return endpointResource.fetchJson().then(function (endpoint) {\n return new IonResource(endpoint, endpointResource);\n });\n};\n\nObject.defineProperties(IonResource.prototype, {\n /**\n * Gets the credits required for attribution of the asset.\n *\n * @memberof IonResource.prototype\n * @type {Credit[]}\n * @readonly\n */\n credits: {\n get: function () {\n // Only we're not the root, return its credits;\n if (defined(this._ionRoot)) {\n return this._ionRoot.credits;\n }\n\n // We are the root\n if (defined(this._credits)) {\n return this._credits;\n }\n\n this._credits = IonResource.getCreditsFromEndpoint(\n this._ionEndpoint,\n this._ionEndpointResource\n );\n\n return this._credits;\n },\n },\n});\n\n/** @private */\nIonResource.getCreditsFromEndpoint = function (endpoint, endpointResource) {\n var credits = endpoint.attributions.map(Credit.getIonCredit);\n var defaultTokenCredit = Ion.getDefaultTokenCredit(\n endpointResource.queryParameters.access_token\n );\n if (defined(defaultTokenCredit)) {\n credits.push(Credit.clone(defaultTokenCredit));\n }\n return credits;\n};\n\n/** @inheritdoc */\nIonResource.prototype.clone = function (result) {\n // We always want to use the root's information because it's the most up-to-date\n var ionRoot = defaultValue(this._ionRoot, this);\n\n if (!defined(result)) {\n result = new IonResource(\n ionRoot._ionEndpoint,\n ionRoot._ionEndpointResource\n );\n }\n\n result = Resource.prototype.clone.call(this, result);\n result._ionRoot = ionRoot;\n result._isExternal = this._isExternal;\n\n return result;\n};\n\nIonResource.prototype.fetchImage = function (options) {\n if (!this._isExternal) {\n var userOptions = options;\n options = {\n preferBlob: true,\n };\n if (defined(userOptions)) {\n options.flipY = userOptions.flipY;\n options.preferImageBitmap = userOptions.preferImageBitmap;\n }\n }\n\n return Resource.prototype.fetchImage.call(this, options);\n};\n\nIonResource.prototype._makeRequest = function (options) {\n // Don't send ion access token to non-ion servers.\n if (\n this._isExternal ||\n new Uri(this.url).authority !== this._ionEndpointDomain\n ) {\n return Resource.prototype._makeRequest.call(this, options);\n }\n\n if (!defined(options.headers)) {\n options.headers = {};\n }\n options.headers.Authorization = \"Bearer \" + this._ionEndpoint.accessToken;\n\n return Resource.prototype._makeRequest.call(this, options);\n};\n\n/**\n * @private\n */\nIonResource._createEndpointResource = function (assetId, options) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"assetId\", assetId);\n //>>includeEnd('debug');\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var server = defaultValue(options.server, Ion.defaultServer);\n var accessToken = defaultValue(options.accessToken, Ion.defaultAccessToken);\n server = Resource.createIfNeeded(server);\n\n var resourceOptions = {\n url: \"v1/assets/\" + assetId + \"/endpoint\",\n };\n\n if (defined(accessToken)) {\n resourceOptions.queryParameters = { access_token: accessToken };\n }\n\n return server.getDerivedResource(resourceOptions);\n};\n\nfunction retryCallback(that, error) {\n var ionRoot = defaultValue(that._ionRoot, that);\n var endpointResource = ionRoot._ionEndpointResource;\n\n // We only want to retry in the case of invalid credentials (401) or image\n // requests(since Image failures can not provide a status code)\n if (\n !defined(error) ||\n (error.statusCode !== 401 && !(error.target instanceof Image))\n ) {\n return when.resolve(false);\n }\n\n // We use a shared pending promise for all derived assets, since they share\n // a common access_token. If we're already requesting a new token for this\n // asset, we wait on the same promise.\n if (!defined(ionRoot._pendingPromise)) {\n ionRoot._pendingPromise = endpointResource\n .fetchJson()\n .then(function (newEndpoint) {\n //Set the token for root resource so new derived resources automatically pick it up\n ionRoot._ionEndpoint = newEndpoint;\n return newEndpoint;\n })\n .always(function (newEndpoint) {\n // Pass or fail, we're done with this promise, the next failure should use a new one.\n ionRoot._pendingPromise = undefined;\n return newEndpoint;\n });\n }\n\n return ionRoot._pendingPromise.then(function (newEndpoint) {\n // Set the new token and endpoint for this resource\n that._ionEndpoint = newEndpoint;\n return true;\n });\n}\nexport default IonResource;\n","import CesiumTerrainProvider from \"./CesiumTerrainProvider.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport IonResource from \"./IonResource.js\";\n\n/**\n * Creates a {@link CesiumTerrainProvider} instance for the {@link https://cesium.com/content/#cesium-world-terrain|Cesium World Terrain}.\n *\n * @function\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.\n * @param {Boolean} [options.requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server if available.\n * @returns {CesiumTerrainProvider}\n *\n * @see Ion\n *\n * @example\n * // Create Cesium World Terrain with default settings\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * terrainProvider : Cesium.createWorldTerrain();\n * });\n *\n * @example\n * // Create Cesium World Terrain with water and normals.\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * terrainProvider : Cesium.createWorldTerrain({\n * requestWaterMask : true,\n * requestVertexNormals : true\n * });\n * });\n *\n */\nfunction createWorldTerrain(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n return new CesiumTerrainProvider({\n url: IonResource.fromAssetId(1),\n requestVertexNormals: defaultValue(options.requestVertexNormals, false),\n requestWaterMask: defaultValue(options.requestWaterMask, false),\n });\n}\nexport default createWorldTerrain;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Intersect from \"./Intersect.js\";\nimport Plane from \"./Plane.js\";\n\n/**\n * The culling volume defined by planes.\n *\n * @alias CullingVolume\n * @constructor\n *\n * @param {Cartesian4[]} [planes] An array of clipping planes.\n */\nfunction CullingVolume(planes) {\n /**\n * Each plane is represented by a Cartesian4 object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin.\n * @type {Cartesian4[]}\n * @default []\n */\n this.planes = defaultValue(planes, []);\n}\n\nvar faces = [new Cartesian3(), new Cartesian3(), new Cartesian3()];\nCartesian3.clone(Cartesian3.UNIT_X, faces[0]);\nCartesian3.clone(Cartesian3.UNIT_Y, faces[1]);\nCartesian3.clone(Cartesian3.UNIT_Z, faces[2]);\n\nvar scratchPlaneCenter = new Cartesian3();\nvar scratchPlaneNormal = new Cartesian3();\nvar scratchPlane = new Plane(new Cartesian3(1.0, 0.0, 0.0), 0.0);\n\n/**\n * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere.\n * The planes are aligned to the x, y, and z axes in world coordinates.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere used to create the culling volume.\n * @param {CullingVolume} [result] The object onto which to store the result.\n * @returns {CullingVolume} The culling volume created from the bounding sphere.\n */\nCullingVolume.fromBoundingSphere = function (boundingSphere, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new CullingVolume();\n }\n\n var length = faces.length;\n var planes = result.planes;\n planes.length = 2 * length;\n\n var center = boundingSphere.center;\n var radius = boundingSphere.radius;\n\n var planeIndex = 0;\n\n for (var i = 0; i < length; ++i) {\n var faceNormal = faces[i];\n\n var plane0 = planes[planeIndex];\n var plane1 = planes[planeIndex + 1];\n\n if (!defined(plane0)) {\n plane0 = planes[planeIndex] = new Cartesian4();\n }\n if (!defined(plane1)) {\n plane1 = planes[planeIndex + 1] = new Cartesian4();\n }\n\n Cartesian3.multiplyByScalar(faceNormal, -radius, scratchPlaneCenter);\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n plane0.x = faceNormal.x;\n plane0.y = faceNormal.y;\n plane0.z = faceNormal.z;\n plane0.w = -Cartesian3.dot(faceNormal, scratchPlaneCenter);\n\n Cartesian3.multiplyByScalar(faceNormal, radius, scratchPlaneCenter);\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n plane1.x = -faceNormal.x;\n plane1.y = -faceNormal.y;\n plane1.z = -faceNormal.z;\n plane1.w = -Cartesian3.dot(\n Cartesian3.negate(faceNormal, scratchPlaneNormal),\n scratchPlaneCenter\n );\n\n planeIndex += 2;\n }\n\n return result;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @returns {Intersect} Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE.\n */\nCullingVolume.prototype.computeVisibility = function (boundingVolume) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingVolume)) {\n throw new DeveloperError(\"boundingVolume is required.\");\n }\n //>>includeEnd('debug');\n\n var planes = this.planes;\n var intersecting = false;\n for (var k = 0, len = planes.length; k < len; ++k) {\n var result = boundingVolume.intersectPlane(\n Plane.fromCartesian4(planes[k], scratchPlane)\n );\n if (result === Intersect.OUTSIDE) {\n return Intersect.OUTSIDE;\n } else if (result === Intersect.INTERSECTING) {\n intersecting = true;\n }\n }\n\n return intersecting ? Intersect.INTERSECTING : Intersect.INSIDE;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @param {Number} parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling\n * volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then\n * the parent (and therefore this) volume is completely inside plane[planeIndex]\n * and that plane check can be skipped.\n * @returns {Number} A plane mask as described above (which can be applied to this boundingVolume's children).\n *\n * @private\n */\nCullingVolume.prototype.computeVisibilityWithPlaneMask = function (\n boundingVolume,\n parentPlaneMask\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingVolume)) {\n throw new DeveloperError(\"boundingVolume is required.\");\n }\n if (!defined(parentPlaneMask)) {\n throw new DeveloperError(\"parentPlaneMask is required.\");\n }\n //>>includeEnd('debug');\n\n if (\n parentPlaneMask === CullingVolume.MASK_OUTSIDE ||\n parentPlaneMask === CullingVolume.MASK_INSIDE\n ) {\n // parent is completely outside or completely inside, so this child is as well.\n return parentPlaneMask;\n }\n\n // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE.\n // (Because if there are fewer than 31 planes, the upper bits wont be changed.)\n var mask = CullingVolume.MASK_INSIDE;\n\n var planes = this.planes;\n for (var k = 0, len = planes.length; k < len; ++k) {\n // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization.\n var flag = k < 31 ? 1 << k : 0;\n if (k < 31 && (parentPlaneMask & flag) === 0) {\n // boundingVolume is known to be INSIDE this plane.\n continue;\n }\n\n var result = boundingVolume.intersectPlane(\n Plane.fromCartesian4(planes[k], scratchPlane)\n );\n if (result === Intersect.OUTSIDE) {\n return CullingVolume.MASK_OUTSIDE;\n } else if (result === Intersect.INTERSECTING) {\n mask |= flag;\n }\n }\n\n return mask;\n};\n\n/**\n * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value\n * represents the case where the object bounding volume is entirely outside the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_OUTSIDE = 0xffffffff;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume is entirely inside the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_INSIDE = 0x00000000;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume (may) intersect all planes of the culling volume.\n *\n * @type {Number}\n * @private\n */\nCullingVolume.MASK_INDETERMINATE = 0x7fffffff;\nexport default CullingVolume;\n","import CesiumMath from \"./Math.js\";\n\n/**\n * @private\n */\nvar CylinderGeometryLibrary = {};\n\n/**\n * @private\n */\nCylinderGeometryLibrary.computePositions = function (\n length,\n topRadius,\n bottomRadius,\n slices,\n fill\n) {\n var topZ = length * 0.5;\n var bottomZ = -topZ;\n\n var twoSlice = slices + slices;\n var size = fill ? 2 * twoSlice : twoSlice;\n var positions = new Float64Array(size * 3);\n var i;\n var index = 0;\n var tbIndex = 0;\n var bottomOffset = fill ? twoSlice * 3 : 0;\n var topOffset = fill ? (twoSlice + slices) * 3 : slices * 3;\n\n for (i = 0; i < slices; i++) {\n var angle = (i / slices) * CesiumMath.TWO_PI;\n var x = Math.cos(angle);\n var y = Math.sin(angle);\n var bottomX = x * bottomRadius;\n var bottomY = y * bottomRadius;\n var topX = x * topRadius;\n var topY = y * topRadius;\n\n positions[tbIndex + bottomOffset] = bottomX;\n positions[tbIndex + bottomOffset + 1] = bottomY;\n positions[tbIndex + bottomOffset + 2] = bottomZ;\n\n positions[tbIndex + topOffset] = topX;\n positions[tbIndex + topOffset + 1] = topY;\n positions[tbIndex + topOffset + 2] = topZ;\n tbIndex += 3;\n if (fill) {\n positions[index++] = bottomX;\n positions[index++] = bottomY;\n positions[index++] = bottomZ;\n positions[index++] = topX;\n positions[index++] = topY;\n positions[index++] = topZ;\n }\n }\n\n return positions;\n};\nexport default CylinderGeometryLibrary;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar radiusScratch = new Cartesian2();\nvar normalScratch = new Cartesian3();\nvar bitangentScratch = new Cartesian3();\nvar tangentScratch = new Cartesian3();\nvar positionScratch = new Cartesian3();\n\n/**\n * A description of a cylinder.\n *\n * @alias CylinderGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number} options.length The length of the cylinder.\n * @param {Number} options.topRadius The radius of the top of the cylinder.\n * @param {Number} options.bottomRadius The radius of the bottom of the cylinder.\n * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\n *\n * @see CylinderGeometry.createGeometry\n *\n * @example\n * // create cylinder geometry\n * var cylinder = new Cesium.CylinderGeometry({\n * length: 200000,\n * topRadius: 80000,\n * bottomRadius: 200000,\n * });\n * var geometry = Cesium.CylinderGeometry.createGeometry(cylinder);\n */\nfunction CylinderGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var length = options.length;\n var topRadius = options.topRadius;\n var bottomRadius = options.bottomRadius;\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n var slices = defaultValue(options.slices, 128);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(length)) {\n throw new DeveloperError(\"options.length must be defined.\");\n }\n if (!defined(topRadius)) {\n throw new DeveloperError(\"options.topRadius must be defined.\");\n }\n if (!defined(bottomRadius)) {\n throw new DeveloperError(\"options.bottomRadius must be defined.\");\n }\n if (slices < 3) {\n throw new DeveloperError(\n \"options.slices must be greater than or equal to 3.\"\n );\n }\n if (\n defined(options.offsetAttribute) &&\n options.offsetAttribute === GeometryOffsetAttribute.TOP\n ) {\n throw new DeveloperError(\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n this._length = length;\n this._topRadius = topRadius;\n this._bottomRadius = bottomRadius;\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._slices = slices;\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createCylinderGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCylinderGeometry.packedLength = VertexFormat.packedLength + 5;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CylinderGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCylinderGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._length;\n array[startingIndex++] = value._topRadius;\n array[startingIndex++] = value._bottomRadius;\n array[startingIndex++] = value._slices;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n vertexFormat: scratchVertexFormat,\n length: undefined,\n topRadius: undefined,\n bottomRadius: undefined,\n slices: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CylinderGeometry} [result] The object into which to store the result.\n * @returns {CylinderGeometry} The modified result parameter or a new CylinderGeometry instance if one was not provided.\n */\nCylinderGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var length = array[startingIndex++];\n var topRadius = array[startingIndex++];\n var bottomRadius = array[startingIndex++];\n var slices = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.length = length;\n scratchOptions.topRadius = topRadius;\n scratchOptions.bottomRadius = bottomRadius;\n scratchOptions.slices = slices;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new CylinderGeometry(scratchOptions);\n }\n\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._length = length;\n result._topRadius = topRadius;\n result._bottomRadius = bottomRadius;\n result._slices = slices;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of a cylinder, including its vertices, indices, and a bounding sphere.\n *\n * @param {CylinderGeometry} cylinderGeometry A description of the cylinder.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCylinderGeometry.createGeometry = function (cylinderGeometry) {\n var length = cylinderGeometry._length;\n var topRadius = cylinderGeometry._topRadius;\n var bottomRadius = cylinderGeometry._bottomRadius;\n var vertexFormat = cylinderGeometry._vertexFormat;\n var slices = cylinderGeometry._slices;\n\n if (\n length <= 0 ||\n topRadius < 0 ||\n bottomRadius < 0 ||\n (topRadius === 0 && bottomRadius === 0)\n ) {\n return;\n }\n\n var twoSlices = slices + slices;\n var threeSlices = slices + twoSlices;\n var numVertices = twoSlices + twoSlices;\n\n var positions = CylinderGeometryLibrary.computePositions(\n length,\n topRadius,\n bottomRadius,\n slices,\n true\n );\n\n var st = vertexFormat.st ? new Float32Array(numVertices * 2) : undefined;\n var normals = vertexFormat.normal\n ? new Float32Array(numVertices * 3)\n : undefined;\n var tangents = vertexFormat.tangent\n ? new Float32Array(numVertices * 3)\n : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(numVertices * 3)\n : undefined;\n\n var i;\n var computeNormal =\n vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent;\n\n if (computeNormal) {\n var computeTangent = vertexFormat.tangent || vertexFormat.bitangent;\n\n var normalIndex = 0;\n var tangentIndex = 0;\n var bitangentIndex = 0;\n\n var theta = Math.atan2(bottomRadius - topRadius, length);\n var normal = normalScratch;\n normal.z = Math.sin(theta);\n var normalScale = Math.cos(theta);\n var tangent = tangentScratch;\n var bitangent = bitangentScratch;\n\n for (i = 0; i < slices; i++) {\n var angle = (i / slices) * CesiumMath.TWO_PI;\n var x = normalScale * Math.cos(angle);\n var y = normalScale * Math.sin(angle);\n if (computeNormal) {\n normal.x = x;\n normal.y = y;\n\n if (computeTangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\n tangent\n );\n }\n\n if (vertexFormat.normal) {\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n }\n\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n }\n }\n }\n\n for (i = 0; i < slices; i++) {\n if (vertexFormat.normal) {\n normals[normalIndex++] = 0;\n normals[normalIndex++] = 0;\n normals[normalIndex++] = -1;\n }\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = 1;\n tangents[tangentIndex++] = 0;\n tangents[tangentIndex++] = 0;\n }\n if (vertexFormat.bitangent) {\n bitangents[bitangentIndex++] = 0;\n bitangents[bitangentIndex++] = -1;\n bitangents[bitangentIndex++] = 0;\n }\n }\n\n for (i = 0; i < slices; i++) {\n if (vertexFormat.normal) {\n normals[normalIndex++] = 0;\n normals[normalIndex++] = 0;\n normals[normalIndex++] = 1;\n }\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = 1;\n tangents[tangentIndex++] = 0;\n tangents[tangentIndex++] = 0;\n }\n if (vertexFormat.bitangent) {\n bitangents[bitangentIndex++] = 0;\n bitangents[bitangentIndex++] = 1;\n bitangents[bitangentIndex++] = 0;\n }\n }\n }\n\n var numIndices = 12 * slices - 12;\n var indices = IndexDatatype.createTypedArray(numVertices, numIndices);\n var index = 0;\n var j = 0;\n for (i = 0; i < slices - 1; i++) {\n indices[index++] = j;\n indices[index++] = j + 2;\n indices[index++] = j + 3;\n\n indices[index++] = j;\n indices[index++] = j + 3;\n indices[index++] = j + 1;\n\n j += 2;\n }\n\n indices[index++] = twoSlices - 2;\n indices[index++] = 0;\n indices[index++] = 1;\n indices[index++] = twoSlices - 2;\n indices[index++] = 1;\n indices[index++] = twoSlices - 1;\n\n for (i = 1; i < slices - 1; i++) {\n indices[index++] = twoSlices + i + 1;\n indices[index++] = twoSlices + i;\n indices[index++] = twoSlices;\n }\n\n for (i = 1; i < slices - 1; i++) {\n indices[index++] = threeSlices;\n indices[index++] = threeSlices + i;\n indices[index++] = threeSlices + i + 1;\n }\n\n var textureCoordIndex = 0;\n if (vertexFormat.st) {\n var rad = Math.max(topRadius, bottomRadius);\n for (i = 0; i < numVertices; i++) {\n var position = Cartesian3.fromArray(positions, i * 3, positionScratch);\n st[textureCoordIndex++] = (position.x + rad) / (2.0 * rad);\n st[textureCoordIndex++] = (position.y + rad) / (2.0 * rad);\n }\n }\n\n var attributes = new GeometryAttributes();\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n\n radiusScratch.x = length * 0.5;\n radiusScratch.y = Math.max(bottomRadius, topRadius);\n\n var boundingSphere = new BoundingSphere(\n Cartesian3.ZERO,\n Cartesian2.magnitude(radiusScratch)\n );\n\n if (defined(cylinderGeometry._offsetAttribute)) {\n length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: boundingSphere,\n offsetAttribute: cylinderGeometry._offsetAttribute,\n });\n};\n\nvar unitCylinderGeometry;\n\n/**\n * Returns the geometric representation of a unit cylinder, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nCylinderGeometry.getUnitCylinder = function () {\n if (!defined(unitCylinderGeometry)) {\n unitCylinderGeometry = CylinderGeometry.createGeometry(\n new CylinderGeometry({\n topRadius: 1.0,\n bottomRadius: 1.0,\n length: 1.0,\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n }\n return unitCylinderGeometry;\n};\nexport default CylinderGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nvar radiusScratch = new Cartesian2();\n\n/**\n * A description of the outline of a cylinder.\n *\n * @alias CylinderOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number} options.length The length of the cylinder.\n * @param {Number} options.topRadius The radius of the top of the cylinder.\n * @param {Number} options.bottomRadius The radius of the bottom of the cylinder.\n * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder.\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surfaces of the cylinder.\n *\n * @exception {DeveloperError} options.length must be greater than 0.\n * @exception {DeveloperError} options.topRadius must be greater than 0.\n * @exception {DeveloperError} options.bottomRadius must be greater than 0.\n * @exception {DeveloperError} bottomRadius and topRadius cannot both equal 0.\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\n *\n * @see CylinderOutlineGeometry.createGeometry\n *\n * @example\n * // create cylinder geometry\n * var cylinder = new Cesium.CylinderOutlineGeometry({\n * length: 200000,\n * topRadius: 80000,\n * bottomRadius: 200000,\n * });\n * var geometry = Cesium.CylinderOutlineGeometry.createGeometry(cylinder);\n */\nfunction CylinderOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var length = options.length;\n var topRadius = options.topRadius;\n var bottomRadius = options.bottomRadius;\n var slices = defaultValue(options.slices, 128);\n var numberOfVerticalLines = Math.max(\n defaultValue(options.numberOfVerticalLines, 16),\n 0\n );\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"options.positions\", length);\n Check.typeOf.number(\"options.topRadius\", topRadius);\n Check.typeOf.number(\"options.bottomRadius\", bottomRadius);\n Check.typeOf.number.greaterThanOrEquals(\"options.slices\", slices, 3);\n if (\n defined(options.offsetAttribute) &&\n options.offsetAttribute === GeometryOffsetAttribute.TOP\n ) {\n throw new DeveloperError(\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n this._length = length;\n this._topRadius = topRadius;\n this._bottomRadius = bottomRadius;\n this._slices = slices;\n this._numberOfVerticalLines = numberOfVerticalLines;\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createCylinderOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nCylinderOutlineGeometry.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CylinderOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nCylinderOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value._length;\n array[startingIndex++] = value._topRadius;\n array[startingIndex++] = value._bottomRadius;\n array[startingIndex++] = value._slices;\n array[startingIndex++] = value._numberOfVerticalLines;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchOptions = {\n length: undefined,\n topRadius: undefined,\n bottomRadius: undefined,\n slices: undefined,\n numberOfVerticalLines: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CylinderOutlineGeometry} [result] The object into which to store the result.\n * @returns {CylinderOutlineGeometry} The modified result parameter or a new CylinderOutlineGeometry instance if one was not provided.\n */\nCylinderOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var length = array[startingIndex++];\n var topRadius = array[startingIndex++];\n var bottomRadius = array[startingIndex++];\n var slices = array[startingIndex++];\n var numberOfVerticalLines = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.length = length;\n scratchOptions.topRadius = topRadius;\n scratchOptions.bottomRadius = bottomRadius;\n scratchOptions.slices = slices;\n scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new CylinderOutlineGeometry(scratchOptions);\n }\n\n result._length = length;\n result._topRadius = topRadius;\n result._bottomRadius = bottomRadius;\n result._slices = slices;\n result._numberOfVerticalLines = numberOfVerticalLines;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a cylinder, including its vertices, indices, and a bounding sphere.\n *\n * @param {CylinderOutlineGeometry} cylinderGeometry A description of the cylinder outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCylinderOutlineGeometry.createGeometry = function (cylinderGeometry) {\n var length = cylinderGeometry._length;\n var topRadius = cylinderGeometry._topRadius;\n var bottomRadius = cylinderGeometry._bottomRadius;\n var slices = cylinderGeometry._slices;\n var numberOfVerticalLines = cylinderGeometry._numberOfVerticalLines;\n\n if (\n length <= 0 ||\n topRadius < 0 ||\n bottomRadius < 0 ||\n (topRadius === 0 && bottomRadius === 0)\n ) {\n return;\n }\n\n var numVertices = slices * 2;\n\n var positions = CylinderGeometryLibrary.computePositions(\n length,\n topRadius,\n bottomRadius,\n slices,\n false\n );\n var numIndices = slices * 2;\n var numSide;\n if (numberOfVerticalLines > 0) {\n var numSideLines = Math.min(numberOfVerticalLines, slices);\n numSide = Math.round(slices / numSideLines);\n numIndices += numSideLines;\n }\n\n var indices = IndexDatatype.createTypedArray(numVertices, numIndices * 2);\n var index = 0;\n var i;\n for (i = 0; i < slices - 1; i++) {\n indices[index++] = i;\n indices[index++] = i + 1;\n indices[index++] = i + slices;\n indices[index++] = i + 1 + slices;\n }\n\n indices[index++] = slices - 1;\n indices[index++] = 0;\n indices[index++] = slices + slices - 1;\n indices[index++] = slices;\n\n if (numberOfVerticalLines > 0) {\n for (i = 0; i < slices; i += numSide) {\n indices[index++] = i;\n indices[index++] = i + slices;\n }\n }\n\n var attributes = new GeometryAttributes();\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n radiusScratch.x = length * 0.5;\n radiusScratch.y = Math.max(bottomRadius, topRadius);\n\n var boundingSphere = new BoundingSphere(\n Cartesian3.ZERO,\n Cartesian2.magnitude(radiusScratch)\n );\n\n if (defined(cylinderGeometry._offsetAttribute)) {\n length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: boundingSphere,\n offsetAttribute: cylinderGeometry._offsetAttribute,\n });\n};\nexport default CylinderOutlineGeometry;\n","import Check from \"./Check.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\nvar compressedMagic = 0x7468dead;\nvar compressedMagicSwap = 0xadde6874;\n\n/**\n * Decodes data that is received from the Google Earth Enterprise server.\n *\n * @param {ArrayBuffer} key The key used during decoding.\n * @param {ArrayBuffer} data The data to be decoded.\n *\n * @private\n */\nfunction decodeGoogleEarthEnterpriseData(key, data) {\n if (decodeGoogleEarthEnterpriseData.passThroughDataForTesting) {\n return data;\n }\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"key\", key);\n Check.typeOf.object(\"data\", data);\n //>>includeEnd('debug');\n\n var keyLength = key.byteLength;\n if (keyLength === 0 || keyLength % 4 !== 0) {\n throw new RuntimeError(\n \"The length of key must be greater than 0 and a multiple of 4.\"\n );\n }\n\n var dataView = new DataView(data);\n var magic = dataView.getUint32(0, true);\n if (magic === compressedMagic || magic === compressedMagicSwap) {\n // Occasionally packets don't come back encoded, so just return\n return data;\n }\n\n var keyView = new DataView(key);\n\n var dp = 0;\n var dpend = data.byteLength;\n var dpend64 = dpend - (dpend % 8);\n var kpend = keyLength;\n var kp;\n var off = 8;\n\n // This algorithm is intentionally asymmetric to make it more difficult to\n // guess. Security through obscurity. :-(\n\n // while we have a full uint64 (8 bytes) left to do\n // assumes buffer is 64bit aligned (or processor doesn't care)\n while (dp < dpend64) {\n // rotate the key each time through by using the offets 16,0,8,16,0,8,...\n off = (off + 8) % 24;\n kp = off;\n\n // run through one key length xor'ing one uint64 at a time\n // then drop out to rotate the key for the next bit\n while (dp < dpend64 && kp < kpend) {\n dataView.setUint32(\n dp,\n dataView.getUint32(dp, true) ^ keyView.getUint32(kp, true),\n true\n );\n dataView.setUint32(\n dp + 4,\n dataView.getUint32(dp + 4, true) ^ keyView.getUint32(kp + 4, true),\n true\n );\n dp += 8;\n kp += 24;\n }\n }\n\n // now the remaining 1 to 7 bytes\n if (dp < dpend) {\n if (kp >= kpend) {\n // rotate the key one last time (if necessary)\n off = (off + 8) % 24;\n kp = off;\n }\n\n while (dp < dpend) {\n dataView.setUint8(dp, dataView.getUint8(dp) ^ keyView.getUint8(kp));\n dp++;\n kp++;\n }\n }\n}\n\ndecodeGoogleEarthEnterpriseData.passThroughDataForTesting = false;\nexport default decodeGoogleEarthEnterpriseData;\n","/**\n * A simple proxy that appends the desired resource as the sole query parameter\n * to the given proxy URL.\n *\n * @alias DefaultProxy\n * @constructor\n * @extends {Proxy}\n *\n * @param {String} proxy The proxy URL that will be used to requests all resources.\n */\nfunction DefaultProxy(proxy) {\n this.proxy = proxy;\n}\n\n/**\n * Get the final URL to use to request a given resource.\n *\n * @param {String} resource The resource to request.\n * @returns {String} proxied resource\n */\nDefaultProxy.prototype.getURL = function (resource) {\n var prefix = this.proxy.indexOf(\"?\") === -1 ? \"?\" : \"\";\n return this.proxy + prefix + encodeURIComponent(resource);\n};\n\nexport default DefaultProxy;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nvar warnings = {};\n\n/**\n * Logs a one time message to the console. Use this function instead of\n * <code>console.log</code> directly since this does not log duplicate messages\n * unless it is called from multiple workers.\n *\n * @function oneTimeWarning\n *\n * @param {String} identifier The unique identifier for this warning.\n * @param {String} [message=identifier] The message to log to the console.\n *\n * @example\n * for(var i=0;i<foo.length;++i) {\n * if (!defined(foo[i].bar)) {\n * // Something that can be recovered from but may happen a lot\n * oneTimeWarning('foo.bar undefined', 'foo.bar is undefined. Setting to 0.');\n * foo[i].bar = 0;\n * // ...\n * }\n * }\n *\n * @private\n */\nfunction oneTimeWarning(identifier, message) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(identifier)) {\n throw new DeveloperError(\"identifier is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(warnings[identifier])) {\n warnings[identifier] = true;\n console.warn(defaultValue(message, identifier));\n }\n}\n\noneTimeWarning.geometryOutlines =\n \"Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.\";\n\noneTimeWarning.geometryZIndex =\n \"Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored\";\n\noneTimeWarning.geometryHeightReference =\n \"Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored\";\noneTimeWarning.geometryExtrudedHeightReference =\n \"Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored\";\nexport default oneTimeWarning;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport oneTimeWarning from \"./oneTimeWarning.js\";\n\n/**\n * Logs a deprecation message to the console. Use this function instead of\n * <code>console.log</code> directly since this does not log duplicate messages\n * unless it is called from multiple workers.\n *\n * @function deprecationWarning\n *\n * @param {String} identifier The unique identifier for this deprecated API.\n * @param {String} message The message to log to the console.\n *\n * @example\n * // Deprecated function or class\n * function Foo() {\n * deprecationWarning('Foo', 'Foo was deprecated in Cesium 1.01. It will be removed in 1.03. Use newFoo instead.');\n * // ...\n * }\n *\n * // Deprecated function\n * Bar.prototype.func = function() {\n * deprecationWarning('Bar.func', 'Bar.func() was deprecated in Cesium 1.01. It will be removed in 1.03. Use Bar.newFunc() instead.');\n * // ...\n * };\n *\n * // Deprecated property\n * Object.defineProperties(Bar.prototype, {\n * prop : {\n * get : function() {\n * deprecationWarning('Bar.prop', 'Bar.prop was deprecated in Cesium 1.01. It will be removed in 1.03. Use Bar.newProp instead.');\n * // ...\n * },\n * set : function(value) {\n * deprecationWarning('Bar.prop', 'Bar.prop was deprecated in Cesium 1.01. It will be removed in 1.03. Use Bar.newProp instead.');\n * // ...\n * }\n * }\n * });\n *\n * @private\n */\nfunction deprecationWarning(identifier, message) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(identifier) || !defined(message)) {\n throw new DeveloperError(\"identifier and message are required.\");\n }\n //>>includeEnd('debug');\n\n oneTimeWarning(identifier, message);\n}\nexport default deprecationWarning;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Determines visibility based on the distance to the camera.\n *\n * @alias DistanceDisplayCondition\n * @constructor\n *\n * @param {Number} [near=0.0] The smallest distance in the interval where the object is visible.\n * @param {Number} [far=Number.MAX_VALUE] The largest distance in the interval where the object is visible.\n *\n * @example\n * // Make a billboard that is only visible when the distance to the camera is between 10 and 20 meters.\n * billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(10.0, 20.0);\n */\nfunction DistanceDisplayCondition(near, far) {\n near = defaultValue(near, 0.0);\n this._near = near;\n\n far = defaultValue(far, Number.MAX_VALUE);\n this._far = far;\n}\n\nObject.defineProperties(DistanceDisplayCondition.prototype, {\n /**\n * The smallest distance in the interval where the object is visible.\n * @memberof DistanceDisplayCondition.prototype\n * @type {Number}\n * @default 0.0\n */\n near: {\n get: function () {\n return this._near;\n },\n set: function (value) {\n this._near = value;\n },\n },\n /**\n * The largest distance in the interval where the object is visible.\n * @memberof DistanceDisplayCondition.prototype\n * @type {Number}\n * @default Number.MAX_VALUE\n */\n far: {\n get: function () {\n return this._far;\n },\n set: function (value) {\n this._far = value;\n },\n },\n});\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nDistanceDisplayCondition.packedLength = 2;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {DistanceDisplayCondition} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nDistanceDisplayCondition.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.near;\n array[startingIndex] = value.far;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {DistanceDisplayCondition} [result] The object into which to store the result.\n * @returns {DistanceDisplayCondition} The modified result parameter or a new DistanceDisplayCondition instance if one was not provided.\n */\nDistanceDisplayCondition.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new DistanceDisplayCondition();\n }\n result.near = array[startingIndex++];\n result.far = array[startingIndex];\n return result;\n};\n\n/**\n * Determines if two distance display conditions are equal.\n *\n * @param {DistanceDisplayCondition} left A distance display condition.\n * @param {DistanceDisplayCondition} right Another distance display condition.\n * @return {Boolean} Whether the two distance display conditions are equal.\n */\nDistanceDisplayCondition.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.near === right.near &&\n left.far === right.far)\n );\n};\n\n/**\n * Duplicates a distance display condition instance.\n *\n * @param {DistanceDisplayCondition} [value] The distance display condition to duplicate.\n * @param {DistanceDisplayCondition} [result] The result onto which to store the result.\n * @return {DistanceDisplayCondition} The duplicated instance.\n */\nDistanceDisplayCondition.clone = function (value, result) {\n if (!defined(value)) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new DistanceDisplayCondition();\n }\n\n result.near = value.near;\n result.far = value.far;\n return result;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {DistanceDisplayCondition} [result] The result onto which to store the result.\n * @return {DistanceDisplayCondition} The duplicated instance.\n */\nDistanceDisplayCondition.prototype.clone = function (result) {\n return DistanceDisplayCondition.clone(this, result);\n};\n\n/**\n * Determines if this distance display condition is equal to another.\n *\n * @param {DistanceDisplayCondition} other Another distance display condition.\n * @return {Boolean} Whether this distance display condition is equal to the other.\n */\nDistanceDisplayCondition.prototype.equals = function (other) {\n return DistanceDisplayCondition.equals(this, other);\n};\nexport default DistanceDisplayCondition;\n","import ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines if the geometry instance has a distance display condition.\n *\n * @alias DistanceDisplayConditionGeometryInstanceAttribute\n * @constructor\n *\n * @param {Number} [near=0.0] The near distance.\n * @param {Number} [far=Number.MAX_VALUE] The far distance.\n *\n * @exception {DeveloperError} far must be greater than near.\n *\n * @example\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.BoxGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0)\n * }),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n * id : 'box',\n * attributes : {\n * distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(100.0, 10000.0)\n * }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction DistanceDisplayConditionGeometryInstanceAttribute(near, far) {\n near = defaultValue(near, 0.0);\n far = defaultValue(far, Number.MAX_VALUE);\n\n //>>includeStart('debug', pragmas.debug);\n if (far <= near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n /**\n * The values for the attributes stored in a typed array.\n *\n * @type Float32Array\n *\n * @default [0.0, 0.0, Number.MAX_VALUE]\n */\n this.value = new Float32Array([near, far]);\n}\n\nObject.defineProperties(\n DistanceDisplayConditionGeometryInstanceAttribute.prototype,\n {\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.\n *\n * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n *\n * @type {ComponentDatatype}\n * @readonly\n *\n * @default {@link ComponentDatatype.FLOAT}\n */\n componentDatatype: {\n get: function () {\n return ComponentDatatype.FLOAT;\n },\n },\n\n /**\n * The number of components in the attributes, i.e., {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.\n *\n * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default 3\n */\n componentsPerAttribute: {\n get: function () {\n return 2;\n },\n },\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n *\n * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n normalize: {\n get: function () {\n return false;\n },\n },\n }\n);\n\n/**\n * Creates a new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.\n *\n * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition.\n * @returns {DistanceDisplayConditionGeometryInstanceAttribute} The new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance.\n *\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @example\n * var distanceDisplayCondition = new Cesium.DistanceDisplayCondition(100.0, 10000.0);\n * var instance = new Cesium.GeometryInstance({\n * geometry : geometry,\n * attributes : {\n * distanceDisplayCondition : Cesium.DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(distanceDisplayCondition)\n * }\n * });\n */\nDistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition = function (\n distanceDisplayCondition\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(distanceDisplayCondition)) {\n throw new DeveloperError(\"distanceDisplayCondition is required.\");\n }\n if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n throw new DeveloperError(\n \"distanceDisplayCondition.far distance must be greater than distanceDisplayCondition.near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n return new DistanceDisplayConditionGeometryInstanceAttribute(\n distanceDisplayCondition.near,\n distanceDisplayCondition.far\n );\n};\n\n/**\n * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.\n *\n * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition value.\n * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(distanceDisplayCondition, attributes.distanceDisplayCondition);\n */\nDistanceDisplayConditionGeometryInstanceAttribute.toValue = function (\n distanceDisplayCondition,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(distanceDisplayCondition)) {\n throw new DeveloperError(\"distanceDisplayCondition is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Float32Array([\n distanceDisplayCondition.near,\n distanceDisplayCondition.far,\n ]);\n }\n result[0] = distanceDisplayCondition.near;\n result[1] = distanceDisplayCondition.far;\n return result;\n};\nexport default DistanceDisplayConditionGeometryInstanceAttribute;\n","import defined from \"./defined.js\";\n\n/**\n * @private\n */\nfunction DoublyLinkedList() {\n this.head = undefined;\n this.tail = undefined;\n this._length = 0;\n}\n\nObject.defineProperties(DoublyLinkedList.prototype, {\n length: {\n get: function () {\n return this._length;\n },\n },\n});\n\n/**\n * @private\n */\nfunction DoublyLinkedListNode(item, previous, next) {\n this.item = item;\n this.previous = previous;\n this.next = next;\n}\n\n/**\n * Adds the item to the end of the list\n * @param {*} [item]\n * @return {DoublyLinkedListNode}\n */\nDoublyLinkedList.prototype.add = function (item) {\n var node = new DoublyLinkedListNode(item, this.tail, undefined);\n\n if (defined(this.tail)) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n ++this._length;\n\n return node;\n};\n\nfunction remove(list, node) {\n if (defined(node.previous) && defined(node.next)) {\n node.previous.next = node.next;\n node.next.previous = node.previous;\n } else if (defined(node.previous)) {\n // Remove last node\n node.previous.next = undefined;\n list.tail = node.previous;\n } else if (defined(node.next)) {\n // Remove first node\n node.next.previous = undefined;\n list.head = node.next;\n } else {\n // Remove last node in the linked list\n list.head = undefined;\n list.tail = undefined;\n }\n\n node.next = undefined;\n node.previous = undefined;\n}\n\n/**\n * Removes the given node from the list\n * @param {DoublyLinkedListNode} node\n */\nDoublyLinkedList.prototype.remove = function (node) {\n if (!defined(node)) {\n return;\n }\n\n remove(this, node);\n\n --this._length;\n};\n\n/**\n * Moves nextNode after node\n * @param {DoublyLinkedListNode} node\n * @param {DoublyLinkedListNode} nextNode\n */\nDoublyLinkedList.prototype.splice = function (node, nextNode) {\n if (node === nextNode) {\n return;\n }\n\n // Remove nextNode, then insert after node\n remove(this, nextNode);\n\n var oldNodeNext = node.next;\n node.next = nextNode;\n\n // nextNode is the new tail\n if (this.tail === node) {\n this.tail = nextNode;\n } else {\n oldNodeNext.previous = nextNode;\n }\n\n nextNode.next = oldNodeNext;\n nextNode.previous = node;\n};\nexport default DoublyLinkedList;\n","/**\n@license\ntween.js - https://github.com/sole/tween.js\n\nCopyright (c) 2010-2012 Tween.js authors.\n\nEasing equations Copyright (c) 2001 Robert Penner http://robertpenner.com/easing/\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\n/**\n * @author sole / http://soledadpenades.com\n * @author mrdoob / http://mrdoob.com\n * @author Robert Eisele / http://www.xarg.org\n * @author Philippe / http://philippe.elsass.me\n * @author Robert Penner / http://www.robertpenner.com/easing_terms_of_use.html\n * @author Paul Lewis / http://www.aerotwist.com/\n * @author lechecacharro\n * @author Josh Faul / http://jocafa.com/\n * @author egraether / http://egraether.com/\n * @author endel / http://endel.me\n * @author Ben Delarre / http://delarre.net\n */\n\n // Date.now shim for (ahem) Internet Explo(d|r)er\n if ( Date.now === undefined ) {\n\n Date.now = function () {\n\n return new Date().valueOf();\n\n };\n\n }\n\n var TWEEN = TWEEN || ( function () {\n\n var _tweens = [];\n\n return {\n\n REVISION: '13',\n\n getAll: function () {\n\n return _tweens;\n\n },\n\n removeAll: function () {\n\n _tweens = [];\n\n },\n\n add: function ( tween ) {\n\n _tweens.push( tween );\n\n },\n\n remove: function ( tween ) {\n\n var i = _tweens.indexOf( tween );\n\n if ( i !== -1 ) {\n\n _tweens.splice( i, 1 );\n\n }\n\n },\n\n update: function ( time ) {\n\n if ( _tweens.length === 0 ) return false;\n\n var i = 0;\n\n time = time !== undefined ? time : ( typeof window !== 'undefined' && window.performance !== undefined && window.performance.now !== undefined ? window.performance.now() : Date.now() );\n\n while ( i < _tweens.length ) {\n\n if ( _tweens[ i ].update( time ) ) {\n\n i++;\n\n } else {\n\n _tweens.splice( i, 1 );\n\n }\n\n }\n\n return true;\n\n }\n };\n\n } )();\n\n TWEEN.Tween = function ( object ) {\n\n var _object = object;\n var _valuesStart = {};\n var _valuesEnd = {};\n var _valuesStartRepeat = {};\n var _duration = 1000;\n var _repeat = 0;\n var _yoyo = false;\n var _isPlaying = false;\n var _reversed = false;\n var _delayTime = 0;\n var _startTime = null;\n var _easingFunction = TWEEN.Easing.Linear.None;\n var _interpolationFunction = TWEEN.Interpolation.Linear;\n var _chainedTweens = [];\n var _onStartCallback = null;\n var _onStartCallbackFired = false;\n var _onUpdateCallback = null;\n var _onCompleteCallback = null;\n var _onStopCallback = null;\n\n // Set all starting values present on the target object\n for ( var field in object ) {\n\n _valuesStart[ field ] = parseFloat(object[field], 10);\n\n }\n\n this.to = function ( properties, duration ) {\n\n if ( duration !== undefined ) {\n\n _duration = duration;\n\n }\n\n _valuesEnd = properties;\n\n return this;\n\n };\n\n this.start = function ( time ) {\n\n TWEEN.add( this );\n\n _isPlaying = true;\n\n _onStartCallbackFired = false;\n\n _startTime = time !== undefined ? time : ( typeof window !== 'undefined' && window.performance !== undefined && window.performance.now !== undefined ? window.performance.now() : Date.now() );\n _startTime += _delayTime;\n\n for ( var property in _valuesEnd ) {\n\n // check if an Array was provided as property value\n if ( _valuesEnd[ property ] instanceof Array ) {\n\n if ( _valuesEnd[ property ].length === 0 ) {\n\n continue;\n\n }\n\n // create a local copy of the Array with the start value at the front\n _valuesEnd[ property ] = [ _object[ property ] ].concat( _valuesEnd[ property ] );\n\n }\n\n _valuesStart[ property ] = _object[ property ];\n\n if( ( _valuesStart[ property ] instanceof Array ) === false ) {\n _valuesStart[ property ] *= 1.0; // Ensures we're using numbers, not strings\n }\n\n _valuesStartRepeat[ property ] = _valuesStart[ property ] || 0;\n\n }\n\n return this;\n\n };\n\n this.stop = function () {\n\n if ( !_isPlaying ) {\n return this;\n }\n\n TWEEN.remove( this );\n _isPlaying = false;\n\n if ( _onStopCallback !== null ) {\n\n _onStopCallback.call( _object );\n\n }\n\n this.stopChainedTweens();\n return this;\n\n };\n\n this.stopChainedTweens = function () {\n\n for ( var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++ ) {\n\n _chainedTweens[ i ].stop();\n\n }\n\n };\n\n this.delay = function ( amount ) {\n\n _delayTime = amount;\n return this;\n\n };\n\n this.repeat = function ( times ) {\n\n _repeat = times;\n return this;\n\n };\n\n this.yoyo = function( yoyo ) {\n\n _yoyo = yoyo;\n return this;\n\n };\n\n\n this.easing = function ( easing ) {\n\n _easingFunction = easing;\n return this;\n\n };\n\n this.interpolation = function ( interpolation ) {\n\n _interpolationFunction = interpolation;\n return this;\n\n };\n\n this.chain = function () {\n\n _chainedTweens = arguments;\n return this;\n\n };\n\n this.onStart = function ( callback ) {\n\n _onStartCallback = callback;\n return this;\n\n };\n\n this.onUpdate = function ( callback ) {\n\n _onUpdateCallback = callback;\n return this;\n\n };\n\n this.onComplete = function ( callback ) {\n\n _onCompleteCallback = callback;\n return this;\n\n };\n\n this.onStop = function ( callback ) {\n\n _onStopCallback = callback;\n return this;\n\n };\n\n this.update = function ( time ) {\n\n var property;\n\n if ( time < _startTime ) {\n\n return true;\n\n }\n\n if ( _onStartCallbackFired === false ) {\n\n if ( _onStartCallback !== null ) {\n\n _onStartCallback.call( _object );\n\n }\n\n _onStartCallbackFired = true;\n\n }\n\n var elapsed = ( time - _startTime ) / _duration;\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n var value = _easingFunction( elapsed );\n\n for ( property in _valuesEnd ) {\n\n var start = _valuesStart[ property ] || 0;\n var end = _valuesEnd[ property ];\n\n if ( end instanceof Array ) {\n\n _object[ property ] = _interpolationFunction( end, value );\n\n } else {\n\n // Parses relative end values with start as base (e.g.: +10, -3)\n if ( typeof(end) === \"string\" ) {\n end = start + parseFloat(end, 10);\n }\n\n // protect against non numeric properties.\n if ( typeof(end) === \"number\" ) {\n _object[ property ] = start + ( end - start ) * value;\n }\n\n }\n\n }\n\n if ( _onUpdateCallback !== null ) {\n\n _onUpdateCallback.call( _object, value );\n\n }\n\n if ( elapsed == 1 ) {\n\n if ( _repeat > 0 ) {\n\n if( isFinite( _repeat ) ) {\n _repeat--;\n }\n\n // reassign starting values, restart by making startTime = now\n for( property in _valuesStartRepeat ) {\n\n if ( typeof( _valuesEnd[ property ] ) === \"string\" ) {\n _valuesStartRepeat[ property ] = _valuesStartRepeat[ property ] + parseFloat(_valuesEnd[ property ], 10);\n }\n\n if (_yoyo) {\n var tmp = _valuesStartRepeat[ property ];\n _valuesStartRepeat[ property ] = _valuesEnd[ property ];\n _valuesEnd[ property ] = tmp;\n }\n\n _valuesStart[ property ] = _valuesStartRepeat[ property ];\n\n }\n\n if (_yoyo) {\n _reversed = !_reversed;\n }\n\n _startTime = time + _delayTime;\n\n return true;\n\n } else {\n\n if ( _onCompleteCallback !== null ) {\n\n _onCompleteCallback.call( _object );\n\n }\n\n for ( var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++ ) {\n\n _chainedTweens[ i ].start( time );\n\n }\n\n return false;\n\n }\n\n }\n\n return true;\n\n };\n\n };\n\n\n TWEEN.Easing = {\n\n Linear: {\n\n None: function ( k ) {\n\n return k;\n\n }\n\n },\n\n Quadratic: {\n\n In: function ( k ) {\n\n return k * k;\n\n },\n\n Out: function ( k ) {\n\n return k * ( 2 - k );\n\n },\n\n InOut: function ( k ) {\n\n if ( ( k *= 2 ) < 1 ) return 0.5 * k * k;\n return - 0.5 * ( --k * ( k - 2 ) - 1 );\n\n }\n\n },\n\n Cubic: {\n\n In: function ( k ) {\n\n return k * k * k;\n\n },\n\n Out: function ( k ) {\n\n return --k * k * k + 1;\n\n },\n\n InOut: function ( k ) {\n\n if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k;\n return 0.5 * ( ( k -= 2 ) * k * k + 2 );\n\n }\n\n },\n\n Quartic: {\n\n In: function ( k ) {\n\n return k * k * k * k;\n\n },\n\n Out: function ( k ) {\n\n return 1 - ( --k * k * k * k );\n\n },\n\n InOut: function ( k ) {\n\n if ( ( k *= 2 ) < 1) return 0.5 * k * k * k * k;\n return - 0.5 * ( ( k -= 2 ) * k * k * k - 2 );\n\n }\n\n },\n\n Quintic: {\n\n In: function ( k ) {\n\n return k * k * k * k * k;\n\n },\n\n Out: function ( k ) {\n\n return --k * k * k * k * k + 1;\n\n },\n\n InOut: function ( k ) {\n\n if ( ( k *= 2 ) < 1 ) return 0.5 * k * k * k * k * k;\n return 0.5 * ( ( k -= 2 ) * k * k * k * k + 2 );\n\n }\n\n },\n\n Sinusoidal: {\n\n In: function ( k ) {\n\n return 1 - Math.cos( k * Math.PI / 2 );\n\n },\n\n Out: function ( k ) {\n\n return Math.sin( k * Math.PI / 2 );\n\n },\n\n InOut: function ( k ) {\n\n return 0.5 * ( 1 - Math.cos( Math.PI * k ) );\n\n }\n\n },\n\n Exponential: {\n\n In: function ( k ) {\n\n return k === 0 ? 0 : Math.pow( 1024, k - 1 );\n\n },\n\n Out: function ( k ) {\n\n return k === 1 ? 1 : 1 - Math.pow( 2, - 10 * k );\n\n },\n\n InOut: function ( k ) {\n\n if ( k === 0 ) return 0;\n if ( k === 1 ) return 1;\n if ( ( k *= 2 ) < 1 ) return 0.5 * Math.pow( 1024, k - 1 );\n return 0.5 * ( - Math.pow( 2, - 10 * ( k - 1 ) ) + 2 );\n\n }\n\n },\n\n Circular: {\n\n In: function ( k ) {\n\n return 1 - Math.sqrt( 1 - k * k );\n\n },\n\n Out: function ( k ) {\n\n return Math.sqrt( 1 - ( --k * k ) );\n\n },\n\n InOut: function ( k ) {\n\n if ( ( k *= 2 ) < 1) return - 0.5 * ( Math.sqrt( 1 - k * k) - 1);\n return 0.5 * ( Math.sqrt( 1 - ( k -= 2) * k) + 1);\n\n }\n\n },\n\n Elastic: {\n\n In: function ( k ) {\n\n var s, a = 0.1, p = 0.4;\n if ( k === 0 ) return 0;\n if ( k === 1 ) return 1;\n if ( !a || a < 1 ) { a = 1; s = p / 4; }\n else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n return - ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );\n\n },\n\n Out: function ( k ) {\n\n var s, a = 0.1, p = 0.4;\n if ( k === 0 ) return 0;\n if ( k === 1 ) return 1;\n if ( !a || a < 1 ) { a = 1; s = p / 4; }\n else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n return ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n },\n\n InOut: function ( k ) {\n\n var s, a = 0.1, p = 0.4;\n if ( k === 0 ) return 0;\n if ( k === 1 ) return 1;\n if ( !a || a < 1 ) { a = 1; s = p / 4; }\n else s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n if ( ( k *= 2 ) < 1 ) return - 0.5 * ( a * Math.pow( 2, 10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) );\n return a * Math.pow( 2, -10 * ( k -= 1 ) ) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) * 0.5 + 1;\n\n }\n\n },\n\n Back: {\n\n In: function ( k ) {\n\n var s = 1.70158;\n return k * k * ( ( s + 1 ) * k - s );\n\n },\n\n Out: function ( k ) {\n\n var s = 1.70158;\n return --k * k * ( ( s + 1 ) * k + s ) + 1;\n\n },\n\n InOut: function ( k ) {\n\n var s = 1.70158 * 1.525;\n if ( ( k *= 2 ) < 1 ) return 0.5 * ( k * k * ( ( s + 1 ) * k - s ) );\n return 0.5 * ( ( k -= 2 ) * k * ( ( s + 1 ) * k + s ) + 2 );\n\n }\n\n },\n\n Bounce: {\n\n In: function ( k ) {\n\n return 1 - TWEEN.Easing.Bounce.Out( 1 - k );\n\n },\n\n Out: function ( k ) {\n\n if ( k < ( 1 / 2.75 ) ) {\n\n return 7.5625 * k * k;\n\n } else if ( k < ( 2 / 2.75 ) ) {\n\n return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75;\n\n } else if ( k < ( 2.5 / 2.75 ) ) {\n\n return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375;\n\n } else {\n\n return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375;\n\n }\n\n },\n\n InOut: function ( k ) {\n\n if ( k < 0.5 ) return TWEEN.Easing.Bounce.In( k * 2 ) * 0.5;\n return TWEEN.Easing.Bounce.Out( k * 2 - 1 ) * 0.5 + 0.5;\n\n }\n\n }\n\n };\n\n TWEEN.Interpolation = {\n\n Linear: function ( v, k ) {\n\n var m = v.length - 1, f = m * k, i = Math.floor( f ), fn = TWEEN.Interpolation.Utils.Linear;\n\n if ( k < 0 ) return fn( v[ 0 ], v[ 1 ], f );\n if ( k > 1 ) return fn( v[ m ], v[ m - 1 ], m - f );\n\n return fn( v[ i ], v[ i + 1 > m ? m : i + 1 ], f - i );\n\n },\n\n Bezier: function ( v, k ) {\n\n var b = 0, n = v.length - 1, pw = Math.pow, bn = TWEEN.Interpolation.Utils.Bernstein, i;\n\n for ( i = 0; i <= n; i++ ) {\n b += pw( 1 - k, n - i ) * pw( k, i ) * v[ i ] * bn( n, i );\n }\n\n return b;\n\n },\n\n CatmullRom: function ( v, k ) {\n\n var m = v.length - 1, f = m * k, i = Math.floor( f ), fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n if ( v[ 0 ] === v[ m ] ) {\n\n if ( k < 0 ) i = Math.floor( f = m * ( 1 + k ) );\n\n return fn( v[ ( i - 1 + m ) % m ], v[ i ], v[ ( i + 1 ) % m ], v[ ( i + 2 ) % m ], f - i );\n\n } else {\n\n if ( k < 0 ) return v[ 0 ] - ( fn( v[ 0 ], v[ 0 ], v[ 1 ], v[ 1 ], -f ) - v[ 0 ] );\n if ( k > 1 ) return v[ m ] - ( fn( v[ m ], v[ m ], v[ m - 1 ], v[ m - 1 ], f - m ) - v[ m ] );\n\n return fn( v[ i ? i - 1 : 0 ], v[ i ], v[ m < i + 1 ? m : i + 1 ], v[ m < i + 2 ? m : i + 2 ], f - i );\n\n }\n\n },\n\n Utils: {\n\n Linear: function ( p0, p1, t ) {\n\n return ( p1 - p0 ) * t + p0;\n\n },\n\n Bernstein: function ( n , i ) {\n\n var fc = TWEEN.Interpolation.Utils.Factorial;\n return fc( n ) / fc( i ) / fc( n - i );\n\n },\n\n Factorial: ( function () {\n\n var a = [ 1 ];\n\n return function ( n ) {\n\n var s = 1, i;\n if ( a[ n ] ) return a[ n ];\n for ( i = n; i > 1; i-- ) s *= i;\n return a[ n ] = s;\n\n };\n\n } )(),\n\n CatmullRom: function ( p0, p1, p2, p3, t ) {\n\n var v0 = ( p2 - p0 ) * 0.5, v1 = ( p3 - p1 ) * 0.5, t2 = t * t, t3 = t * t2;\n return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n }\n\n }\n\n };\n\nexport default TWEEN;\n","import Tween from \"../ThirdParty/Tween.js\";\n\n/**\n * Easing functions for use with TweenCollection. These function are from\n * {@link https://github.com/sole/tween.js/|Tween.js} and Robert Penner. See the\n * {@link http://sole.github.io/tween.js/examples/03_graphs.html|Tween.js graphs for each function}.\n *\n * @namespace\n */\nvar EasingFunction = {\n /**\n * Linear easing.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n LINEAR_NONE: Tween.Easing.Linear.None,\n\n /**\n * Quadratic in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUADRACTIC_IN: Tween.Easing.Quadratic.In,\n /**\n * Quadratic out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUADRACTIC_OUT: Tween.Easing.Quadratic.Out,\n /**\n * Quadratic in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUADRACTIC_IN_OUT: Tween.Easing.Quadratic.InOut,\n\n /**\n * Cubic in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CUBIC_IN: Tween.Easing.Cubic.In,\n /**\n * Cubic out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CUBIC_OUT: Tween.Easing.Cubic.Out,\n /**\n * Cubic in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CUBIC_IN_OUT: Tween.Easing.Cubic.InOut,\n\n /**\n * Quartic in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUARTIC_IN: Tween.Easing.Quartic.In,\n /**\n * Quartic out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUARTIC_OUT: Tween.Easing.Quartic.Out,\n /**\n * Quartic in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUARTIC_IN_OUT: Tween.Easing.Quartic.InOut,\n\n /**\n * Quintic in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUINTIC_IN: Tween.Easing.Quintic.In,\n /**\n * Quintic out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUINTIC_OUT: Tween.Easing.Quintic.Out,\n /**\n * Quintic in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n QUINTIC_IN_OUT: Tween.Easing.Quintic.InOut,\n\n /**\n * Sinusoidal in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n SINUSOIDAL_IN: Tween.Easing.Sinusoidal.In,\n /**\n * Sinusoidal out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n SINUSOIDAL_OUT: Tween.Easing.Sinusoidal.Out,\n /**\n * Sinusoidal in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n SINUSOIDAL_IN_OUT: Tween.Easing.Sinusoidal.InOut,\n\n /**\n * Exponential in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n EXPONENTIAL_IN: Tween.Easing.Exponential.In,\n /**\n * Exponential out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n EXPONENTIAL_OUT: Tween.Easing.Exponential.Out,\n /**\n * Exponential in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n EXPONENTIAL_IN_OUT: Tween.Easing.Exponential.InOut,\n\n /**\n * Circular in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CIRCULAR_IN: Tween.Easing.Circular.In,\n /**\n * Circular out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CIRCULAR_OUT: Tween.Easing.Circular.Out,\n /**\n * Circular in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n CIRCULAR_IN_OUT: Tween.Easing.Circular.InOut,\n\n /**\n * Elastic in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n ELASTIC_IN: Tween.Easing.Elastic.In,\n /**\n * Elastic out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n ELASTIC_OUT: Tween.Easing.Elastic.Out,\n /**\n * Elastic in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n ELASTIC_IN_OUT: Tween.Easing.Elastic.InOut,\n\n /**\n * Back in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BACK_IN: Tween.Easing.Back.In,\n /**\n * Back out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BACK_OUT: Tween.Easing.Back.Out,\n /**\n * Back in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BACK_IN_OUT: Tween.Easing.Back.InOut,\n\n /**\n * Bounce in.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BOUNCE_IN: Tween.Easing.Bounce.In,\n /**\n * Bounce out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BOUNCE_OUT: Tween.Easing.Bounce.Out,\n /**\n * Bounce in then out.\n *\n * @type {EasingFunction.Callback}\n * @constant\n */\n BOUNCE_IN_OUT: Tween.Easing.Bounce.InOut,\n};\n\n/**\n * Function interface for implementing a custom easing function.\n * @callback EasingFunction.Callback\n * @param {Number} time The time in the range <code>[0, 1]</code>.\n * @returns {Number} The value of the function at the given time.\n *\n * @example\n * function quadraticIn(time) {\n * return time * time;\n * }\n *\n * @example\n * function quadraticOut(time) {\n * return time * (2.0 - time);\n * }\n */\nexport default Object.freeze(EasingFunction);\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar scratchPosition = new Cartesian3();\nvar scratchNormal = new Cartesian3();\nvar scratchTangent = new Cartesian3();\nvar scratchBitangent = new Cartesian3();\nvar scratchNormalST = new Cartesian3();\nvar defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\n\nvar cos = Math.cos;\nvar sin = Math.sin;\n\n/**\n * A description of an ellipsoid centered at the origin.\n *\n * @alias EllipsoidGeometry\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\n * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\n * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\n *\n * @see EllipsoidGeometry#createGeometry\n *\n * @example\n * var ellipsoid = new Cesium.EllipsoidGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0)\n * });\n * var geometry = Cesium.EllipsoidGeometry.createGeometry(ellipsoid);\n */\nfunction EllipsoidGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var radii = defaultValue(options.radii, defaultRadii);\n var innerRadii = defaultValue(options.innerRadii, radii);\n var minimumClock = defaultValue(options.minimumClock, 0.0);\n var maximumClock = defaultValue(options.maximumClock, CesiumMath.TWO_PI);\n var minimumCone = defaultValue(options.minimumCone, 0.0);\n var maximumCone = defaultValue(options.maximumCone, CesiumMath.PI);\n var stackPartitions = Math.round(defaultValue(options.stackPartitions, 64));\n var slicePartitions = Math.round(defaultValue(options.slicePartitions, 64));\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n //>>includeStart('debug', pragmas.debug);\n if (slicePartitions < 3) {\n throw new DeveloperError(\n \"options.slicePartitions cannot be less than three.\"\n );\n }\n if (stackPartitions < 3) {\n throw new DeveloperError(\n \"options.stackPartitions cannot be less than three.\"\n );\n }\n //>>includeEnd('debug');\n\n this._radii = Cartesian3.clone(radii);\n this._innerRadii = Cartesian3.clone(innerRadii);\n this._minimumClock = minimumClock;\n this._maximumClock = maximumClock;\n this._minimumCone = minimumCone;\n this._maximumCone = maximumCone;\n this._stackPartitions = stackPartitions;\n this._slicePartitions = slicePartitions;\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createEllipsoidGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nEllipsoidGeometry.packedLength =\n 2 * Cartesian3.packedLength + VertexFormat.packedLength + 7;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipsoidGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nEllipsoidGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._radii, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n Cartesian3.pack(value._innerRadii, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._minimumClock;\n array[startingIndex++] = value._maximumClock;\n array[startingIndex++] = value._minimumCone;\n array[startingIndex++] = value._maximumCone;\n array[startingIndex++] = value._stackPartitions;\n array[startingIndex++] = value._slicePartitions;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchRadii = new Cartesian3();\nvar scratchInnerRadii = new Cartesian3();\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n radii: scratchRadii,\n innerRadii: scratchInnerRadii,\n vertexFormat: scratchVertexFormat,\n minimumClock: undefined,\n maximumClock: undefined,\n minimumCone: undefined,\n maximumCone: undefined,\n stackPartitions: undefined,\n slicePartitions: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipsoidGeometry} [result] The object into which to store the result.\n * @returns {EllipsoidGeometry} The modified result parameter or a new EllipsoidGeometry instance if one was not provided.\n */\nEllipsoidGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\n startingIndex += Cartesian3.packedLength;\n\n var innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\n startingIndex += Cartesian3.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var minimumClock = array[startingIndex++];\n var maximumClock = array[startingIndex++];\n var minimumCone = array[startingIndex++];\n var maximumCone = array[startingIndex++];\n var stackPartitions = array[startingIndex++];\n var slicePartitions = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.minimumClock = minimumClock;\n scratchOptions.maximumClock = maximumClock;\n scratchOptions.minimumCone = minimumCone;\n scratchOptions.maximumCone = maximumCone;\n scratchOptions.stackPartitions = stackPartitions;\n scratchOptions.slicePartitions = slicePartitions;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new EllipsoidGeometry(scratchOptions);\n }\n\n result._radii = Cartesian3.clone(radii, result._radii);\n result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._minimumClock = minimumClock;\n result._maximumClock = maximumClock;\n result._minimumCone = minimumCone;\n result._maximumCone = maximumCone;\n result._stackPartitions = stackPartitions;\n result._slicePartitions = slicePartitions;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipsoidGeometry} ellipsoidGeometry A description of the ellipsoid.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipsoidGeometry.createGeometry = function (ellipsoidGeometry) {\n var radii = ellipsoidGeometry._radii;\n if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\n return;\n }\n\n var innerRadii = ellipsoidGeometry._innerRadii;\n if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\n return;\n }\n\n var minimumClock = ellipsoidGeometry._minimumClock;\n var maximumClock = ellipsoidGeometry._maximumClock;\n var minimumCone = ellipsoidGeometry._minimumCone;\n var maximumCone = ellipsoidGeometry._maximumCone;\n var vertexFormat = ellipsoidGeometry._vertexFormat;\n\n // Add an extra slice and stack so that the number of partitions is the\n // number of surfaces rather than the number of joints\n var slicePartitions = ellipsoidGeometry._slicePartitions + 1;\n var stackPartitions = ellipsoidGeometry._stackPartitions + 1;\n\n slicePartitions = Math.round(\n (slicePartitions * Math.abs(maximumClock - minimumClock)) /\n CesiumMath.TWO_PI\n );\n stackPartitions = Math.round(\n (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI\n );\n\n if (slicePartitions < 2) {\n slicePartitions = 2;\n }\n if (stackPartitions < 2) {\n stackPartitions = 2;\n }\n\n var i;\n var j;\n var index = 0;\n\n // Create arrays for theta and phi. Duplicate first and last angle to\n // allow different normals at the intersections.\n var phis = [minimumCone];\n var thetas = [minimumClock];\n for (i = 0; i < stackPartitions; i++) {\n phis.push(\n minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1)\n );\n }\n phis.push(maximumCone);\n for (j = 0; j < slicePartitions; j++) {\n thetas.push(\n minimumClock + (j * (maximumClock - minimumClock)) / (slicePartitions - 1)\n );\n }\n thetas.push(maximumClock);\n var numPhis = phis.length;\n var numThetas = thetas.length;\n\n // Allow for extra indices if there is an inner surface and if we need\n // to close the sides if the clock range is not a full circle\n var extraIndices = 0;\n var vertexMultiplier = 1.0;\n var hasInnerSurface =\n innerRadii.x !== radii.x ||\n innerRadii.y !== radii.y ||\n innerRadii.z !== radii.z;\n var isTopOpen = false;\n var isBotOpen = false;\n var isClockOpen = false;\n if (hasInnerSurface) {\n vertexMultiplier = 2.0;\n if (minimumCone > 0.0) {\n isTopOpen = true;\n extraIndices += slicePartitions - 1;\n }\n if (maximumCone < Math.PI) {\n isBotOpen = true;\n extraIndices += slicePartitions - 1;\n }\n if ((maximumClock - minimumClock) % CesiumMath.TWO_PI) {\n isClockOpen = true;\n extraIndices += (stackPartitions - 1) * 2 + 1;\n } else {\n extraIndices += 1;\n }\n }\n\n var vertexCount = numThetas * numPhis * vertexMultiplier;\n var positions = new Float64Array(vertexCount * 3);\n var isInner = arrayFill(new Array(vertexCount), false);\n var negateNormal = arrayFill(new Array(vertexCount), false);\n\n // Multiply by 6 because there are two triangles per sector\n var indexCount = slicePartitions * stackPartitions * vertexMultiplier;\n var numIndices =\n 6 *\n (indexCount +\n extraIndices +\n 1 -\n (slicePartitions + stackPartitions) * vertexMultiplier);\n var indices = IndexDatatype.createTypedArray(indexCount, numIndices);\n\n var normals = vertexFormat.normal\n ? new Float32Array(vertexCount * 3)\n : undefined;\n var tangents = vertexFormat.tangent\n ? new Float32Array(vertexCount * 3)\n : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(vertexCount * 3)\n : undefined;\n var st = vertexFormat.st ? new Float32Array(vertexCount * 2) : undefined;\n\n // Calculate sin/cos phi\n var sinPhi = new Array(numPhis);\n var cosPhi = new Array(numPhis);\n for (i = 0; i < numPhis; i++) {\n sinPhi[i] = sin(phis[i]);\n cosPhi[i] = cos(phis[i]);\n }\n\n // Calculate sin/cos theta\n var sinTheta = new Array(numThetas);\n var cosTheta = new Array(numThetas);\n for (j = 0; j < numThetas; j++) {\n cosTheta[j] = cos(thetas[j]);\n sinTheta[j] = sin(thetas[j]);\n }\n\n // Create outer surface\n for (i = 0; i < numPhis; i++) {\n for (j = 0; j < numThetas; j++) {\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = radii.z * cosPhi[i];\n }\n }\n\n // Create inner surface\n var vertexIndex = vertexCount / 2.0;\n if (hasInnerSurface) {\n for (i = 0; i < numPhis; i++) {\n for (j = 0; j < numThetas; j++) {\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = innerRadii.z * cosPhi[i];\n\n // Keep track of which vertices are the inner and which ones\n // need the normal to be negated\n isInner[vertexIndex] = true;\n if (i > 0 && i !== numPhis - 1 && j !== 0 && j !== numThetas - 1) {\n negateNormal[vertexIndex] = true;\n }\n vertexIndex++;\n }\n }\n }\n\n // Create indices for outer surface\n index = 0;\n var topOffset;\n var bottomOffset;\n for (i = 1; i < numPhis - 2; i++) {\n topOffset = i * numThetas;\n bottomOffset = (i + 1) * numThetas;\n\n for (j = 1; j < numThetas - 2; j++) {\n indices[index++] = bottomOffset + j;\n indices[index++] = bottomOffset + j + 1;\n indices[index++] = topOffset + j + 1;\n\n indices[index++] = bottomOffset + j;\n indices[index++] = topOffset + j + 1;\n indices[index++] = topOffset + j;\n }\n }\n\n // Create indices for inner surface\n if (hasInnerSurface) {\n var offset = numPhis * numThetas;\n for (i = 1; i < numPhis - 2; i++) {\n topOffset = offset + i * numThetas;\n bottomOffset = offset + (i + 1) * numThetas;\n\n for (j = 1; j < numThetas - 2; j++) {\n indices[index++] = bottomOffset + j;\n indices[index++] = topOffset + j;\n indices[index++] = topOffset + j + 1;\n\n indices[index++] = bottomOffset + j;\n indices[index++] = topOffset + j + 1;\n indices[index++] = bottomOffset + j + 1;\n }\n }\n }\n\n var outerOffset;\n var innerOffset;\n if (hasInnerSurface) {\n if (isTopOpen) {\n // Connect the top of the inner surface to the top of the outer surface\n innerOffset = numPhis * numThetas;\n for (i = 1; i < numThetas - 2; i++) {\n indices[index++] = i;\n indices[index++] = i + 1;\n indices[index++] = innerOffset + i + 1;\n\n indices[index++] = i;\n indices[index++] = innerOffset + i + 1;\n indices[index++] = innerOffset + i;\n }\n }\n\n if (isBotOpen) {\n // Connect the bottom of the inner surface to the bottom of the outer surface\n outerOffset = numPhis * numThetas - numThetas;\n innerOffset = numPhis * numThetas * vertexMultiplier - numThetas;\n for (i = 1; i < numThetas - 2; i++) {\n indices[index++] = outerOffset + i + 1;\n indices[index++] = outerOffset + i;\n indices[index++] = innerOffset + i;\n\n indices[index++] = outerOffset + i + 1;\n indices[index++] = innerOffset + i;\n indices[index++] = innerOffset + i + 1;\n }\n }\n }\n\n // Connect the edges if clock is not closed\n if (isClockOpen) {\n for (i = 1; i < numPhis - 2; i++) {\n innerOffset = numThetas * numPhis + numThetas * i;\n outerOffset = numThetas * i;\n indices[index++] = innerOffset;\n indices[index++] = outerOffset + numThetas;\n indices[index++] = outerOffset;\n\n indices[index++] = innerOffset;\n indices[index++] = innerOffset + numThetas;\n indices[index++] = outerOffset + numThetas;\n }\n\n for (i = 1; i < numPhis - 2; i++) {\n innerOffset = numThetas * numPhis + numThetas * (i + 1) - 1;\n outerOffset = numThetas * (i + 1) - 1;\n indices[index++] = outerOffset + numThetas;\n indices[index++] = innerOffset;\n indices[index++] = outerOffset;\n\n indices[index++] = outerOffset + numThetas;\n indices[index++] = innerOffset + numThetas;\n indices[index++] = innerOffset;\n }\n }\n\n var attributes = new GeometryAttributes();\n\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n }\n\n var stIndex = 0;\n var normalIndex = 0;\n var tangentIndex = 0;\n var bitangentIndex = 0;\n var vertexCountHalf = vertexCount / 2.0;\n\n var ellipsoid;\n var ellipsoidOuter = Ellipsoid.fromCartesian3(radii);\n var ellipsoidInner = Ellipsoid.fromCartesian3(innerRadii);\n\n if (\n vertexFormat.st ||\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent\n ) {\n for (i = 0; i < vertexCount; i++) {\n ellipsoid = isInner[i] ? ellipsoidInner : ellipsoidOuter;\n var position = Cartesian3.fromArray(positions, i * 3, scratchPosition);\n var normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\n if (negateNormal[i]) {\n Cartesian3.negate(normal, normal);\n }\n\n if (vertexFormat.st) {\n var normalST = Cartesian2.negate(normal, scratchNormalST);\n st[stIndex++] =\n Math.atan2(normalST.y, normalST.x) / CesiumMath.TWO_PI + 0.5;\n st[stIndex++] = Math.asin(normal.z) / Math.PI + 0.5;\n }\n\n if (vertexFormat.normal) {\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n }\n\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n var tangent = scratchTangent;\n\n // Use UNIT_X for the poles\n var tangetOffset = 0;\n var unit;\n if (isInner[i]) {\n tangetOffset = vertexCountHalf;\n }\n if (\n !isTopOpen &&\n i >= tangetOffset &&\n i < tangetOffset + numThetas * 2\n ) {\n unit = Cartesian3.UNIT_X;\n } else {\n unit = Cartesian3.UNIT_Z;\n }\n Cartesian3.cross(unit, normal, tangent);\n Cartesian3.normalize(tangent, tangent);\n\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n var bitangent = Cartesian3.cross(normal, tangent, scratchBitangent);\n Cartesian3.normalize(bitangent, bitangent);\n\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n }\n }\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n }\n\n if (defined(ellipsoidGeometry._offsetAttribute)) {\n var length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: BoundingSphere.fromEllipsoid(ellipsoidOuter),\n offsetAttribute: ellipsoidGeometry._offsetAttribute,\n });\n};\n\nvar unitEllipsoidGeometry;\n\n/**\n * Returns the geometric representation of a unit ellipsoid, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nEllipsoidGeometry.getUnitEllipsoid = function () {\n if (!defined(unitEllipsoidGeometry)) {\n unitEllipsoidGeometry = EllipsoidGeometry.createGeometry(\n new EllipsoidGeometry({\n radii: new Cartesian3(1.0, 1.0, 1.0),\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n }\n return unitEllipsoidGeometry;\n};\nexport default EllipsoidGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nvar defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\nvar cos = Math.cos;\nvar sin = Math.sin;\n\n/**\n * A description of the outline of an ellipsoid centered at the origin.\n *\n * @alias EllipsoidOutlineGeometry\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\n * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {Number} [options.stackPartitions=10] The count of stacks for the ellipsoid (1 greater than the number of parallel lines).\n * @param {Number} [options.slicePartitions=8] The count of slices for the ellipsoid (Equal to the number of radial lines).\n * @param {Number} [options.subdivisions=128] The number of points per line, determining the granularity of the curvature.\n *\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\n *\n * @example\n * var ellipsoid = new Cesium.EllipsoidOutlineGeometry({\n * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0),\n * stackPartitions: 6,\n * slicePartitions: 5\n * });\n * var geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid);\n */\nfunction EllipsoidOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var radii = defaultValue(options.radii, defaultRadii);\n var innerRadii = defaultValue(options.innerRadii, radii);\n var minimumClock = defaultValue(options.minimumClock, 0.0);\n var maximumClock = defaultValue(options.maximumClock, CesiumMath.TWO_PI);\n var minimumCone = defaultValue(options.minimumCone, 0.0);\n var maximumCone = defaultValue(options.maximumCone, CesiumMath.PI);\n var stackPartitions = Math.round(defaultValue(options.stackPartitions, 10));\n var slicePartitions = Math.round(defaultValue(options.slicePartitions, 8));\n var subdivisions = Math.round(defaultValue(options.subdivisions, 128));\n\n //>>includeStart('debug', pragmas.debug);\n if (stackPartitions < 1) {\n throw new DeveloperError(\"options.stackPartitions cannot be less than 1\");\n }\n if (slicePartitions < 0) {\n throw new DeveloperError(\"options.slicePartitions cannot be less than 0\");\n }\n if (subdivisions < 0) {\n throw new DeveloperError(\n \"options.subdivisions must be greater than or equal to zero.\"\n );\n }\n if (\n defined(options.offsetAttribute) &&\n options.offsetAttribute === GeometryOffsetAttribute.TOP\n ) {\n throw new DeveloperError(\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n this._radii = Cartesian3.clone(radii);\n this._innerRadii = Cartesian3.clone(innerRadii);\n this._minimumClock = minimumClock;\n this._maximumClock = maximumClock;\n this._minimumCone = minimumCone;\n this._maximumCone = maximumCone;\n this._stackPartitions = stackPartitions;\n this._slicePartitions = slicePartitions;\n this._subdivisions = subdivisions;\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createEllipsoidOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nEllipsoidOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 8;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipsoidOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nEllipsoidOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Cartesian3.pack(value._radii, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n Cartesian3.pack(value._innerRadii, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n\n array[startingIndex++] = value._minimumClock;\n array[startingIndex++] = value._maximumClock;\n array[startingIndex++] = value._minimumCone;\n array[startingIndex++] = value._maximumCone;\n array[startingIndex++] = value._stackPartitions;\n array[startingIndex++] = value._slicePartitions;\n array[startingIndex++] = value._subdivisions;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchRadii = new Cartesian3();\nvar scratchInnerRadii = new Cartesian3();\nvar scratchOptions = {\n radii: scratchRadii,\n innerRadii: scratchInnerRadii,\n minimumClock: undefined,\n maximumClock: undefined,\n minimumCone: undefined,\n maximumCone: undefined,\n stackPartitions: undefined,\n slicePartitions: undefined,\n subdivisions: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipsoidOutlineGeometry} [result] The object into which to store the result.\n * @returns {EllipsoidOutlineGeometry} The modified result parameter or a new EllipsoidOutlineGeometry instance if one was not provided.\n */\nEllipsoidOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\n startingIndex += Cartesian3.packedLength;\n\n var innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\n startingIndex += Cartesian3.packedLength;\n\n var minimumClock = array[startingIndex++];\n var maximumClock = array[startingIndex++];\n var minimumCone = array[startingIndex++];\n var maximumCone = array[startingIndex++];\n var stackPartitions = array[startingIndex++];\n var slicePartitions = array[startingIndex++];\n var subdivisions = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.minimumClock = minimumClock;\n scratchOptions.maximumClock = maximumClock;\n scratchOptions.minimumCone = minimumCone;\n scratchOptions.maximumCone = maximumCone;\n scratchOptions.stackPartitions = stackPartitions;\n scratchOptions.slicePartitions = slicePartitions;\n scratchOptions.subdivisions = subdivisions;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n return new EllipsoidOutlineGeometry(scratchOptions);\n }\n\n result._radii = Cartesian3.clone(radii, result._radii);\n result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\n result._minimumClock = minimumClock;\n result._maximumClock = maximumClock;\n result._minimumCone = minimumCone;\n result._maximumCone = maximumCone;\n result._stackPartitions = stackPartitions;\n result._slicePartitions = slicePartitions;\n result._subdivisions = subdivisions;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipsoidOutlineGeometry} ellipsoidGeometry A description of the ellipsoid outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipsoidOutlineGeometry.createGeometry = function (ellipsoidGeometry) {\n var radii = ellipsoidGeometry._radii;\n if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\n return;\n }\n\n var innerRadii = ellipsoidGeometry._innerRadii;\n if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\n return;\n }\n\n var minimumClock = ellipsoidGeometry._minimumClock;\n var maximumClock = ellipsoidGeometry._maximumClock;\n var minimumCone = ellipsoidGeometry._minimumCone;\n var maximumCone = ellipsoidGeometry._maximumCone;\n var subdivisions = ellipsoidGeometry._subdivisions;\n var ellipsoid = Ellipsoid.fromCartesian3(radii);\n\n // Add an extra slice and stack to remain consistent with EllipsoidGeometry\n var slicePartitions = ellipsoidGeometry._slicePartitions + 1;\n var stackPartitions = ellipsoidGeometry._stackPartitions + 1;\n\n slicePartitions = Math.round(\n (slicePartitions * Math.abs(maximumClock - minimumClock)) /\n CesiumMath.TWO_PI\n );\n stackPartitions = Math.round(\n (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI\n );\n\n if (slicePartitions < 2) {\n slicePartitions = 2;\n }\n if (stackPartitions < 2) {\n stackPartitions = 2;\n }\n\n var extraIndices = 0;\n var vertexMultiplier = 1.0;\n var hasInnerSurface =\n innerRadii.x !== radii.x ||\n innerRadii.y !== radii.y ||\n innerRadii.z !== radii.z;\n var isTopOpen = false;\n var isBotOpen = false;\n if (hasInnerSurface) {\n vertexMultiplier = 2.0;\n // Add 2x slicePartitions to connect the top/bottom of the outer to\n // the top/bottom of the inner\n if (minimumCone > 0.0) {\n isTopOpen = true;\n extraIndices += slicePartitions;\n }\n if (maximumCone < Math.PI) {\n isBotOpen = true;\n extraIndices += slicePartitions;\n }\n }\n\n var vertexCount =\n subdivisions * vertexMultiplier * (stackPartitions + slicePartitions);\n var positions = new Float64Array(vertexCount * 3);\n\n // Multiply by two because two points define each line segment\n var numIndices =\n 2 *\n (vertexCount +\n extraIndices -\n (slicePartitions + stackPartitions) * vertexMultiplier);\n var indices = IndexDatatype.createTypedArray(vertexCount, numIndices);\n\n var i;\n var j;\n var theta;\n var phi;\n var index = 0;\n\n // Calculate sin/cos phi\n var sinPhi = new Array(stackPartitions);\n var cosPhi = new Array(stackPartitions);\n for (i = 0; i < stackPartitions; i++) {\n phi =\n minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1);\n sinPhi[i] = sin(phi);\n cosPhi[i] = cos(phi);\n }\n\n // Calculate sin/cos theta\n var sinTheta = new Array(subdivisions);\n var cosTheta = new Array(subdivisions);\n for (i = 0; i < subdivisions; i++) {\n theta =\n minimumClock + (i * (maximumClock - minimumClock)) / (subdivisions - 1);\n sinTheta[i] = sin(theta);\n cosTheta[i] = cos(theta);\n }\n\n // Calculate the latitude lines on the outer surface\n for (i = 0; i < stackPartitions; i++) {\n for (j = 0; j < subdivisions; j++) {\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = radii.z * cosPhi[i];\n }\n }\n\n // Calculate the latitude lines on the inner surface\n if (hasInnerSurface) {\n for (i = 0; i < stackPartitions; i++) {\n for (j = 0; j < subdivisions; j++) {\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = innerRadii.z * cosPhi[i];\n }\n }\n }\n\n // Calculate sin/cos phi\n sinPhi.length = subdivisions;\n cosPhi.length = subdivisions;\n for (i = 0; i < subdivisions; i++) {\n phi = minimumCone + (i * (maximumCone - minimumCone)) / (subdivisions - 1);\n sinPhi[i] = sin(phi);\n cosPhi[i] = cos(phi);\n }\n\n // Calculate sin/cos theta for each slice partition\n sinTheta.length = slicePartitions;\n cosTheta.length = slicePartitions;\n for (i = 0; i < slicePartitions; i++) {\n theta =\n minimumClock +\n (i * (maximumClock - minimumClock)) / (slicePartitions - 1);\n sinTheta[i] = sin(theta);\n cosTheta[i] = cos(theta);\n }\n\n // Calculate the longitude lines on the outer surface\n for (i = 0; i < subdivisions; i++) {\n for (j = 0; j < slicePartitions; j++) {\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = radii.z * cosPhi[i];\n }\n }\n\n // Calculate the longitude lines on the inner surface\n if (hasInnerSurface) {\n for (i = 0; i < subdivisions; i++) {\n for (j = 0; j < slicePartitions; j++) {\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n positions[index++] = innerRadii.z * cosPhi[i];\n }\n }\n }\n\n // Create indices for the latitude lines\n index = 0;\n for (i = 0; i < stackPartitions * vertexMultiplier; i++) {\n var topOffset = i * subdivisions;\n for (j = 0; j < subdivisions - 1; j++) {\n indices[index++] = topOffset + j;\n indices[index++] = topOffset + j + 1;\n }\n }\n\n // Create indices for the outer longitude lines\n var offset = stackPartitions * subdivisions * vertexMultiplier;\n for (i = 0; i < slicePartitions; i++) {\n for (j = 0; j < subdivisions - 1; j++) {\n indices[index++] = offset + i + j * slicePartitions;\n indices[index++] = offset + i + (j + 1) * slicePartitions;\n }\n }\n\n // Create indices for the inner longitude lines\n if (hasInnerSurface) {\n offset =\n stackPartitions * subdivisions * vertexMultiplier +\n slicePartitions * subdivisions;\n for (i = 0; i < slicePartitions; i++) {\n for (j = 0; j < subdivisions - 1; j++) {\n indices[index++] = offset + i + j * slicePartitions;\n indices[index++] = offset + i + (j + 1) * slicePartitions;\n }\n }\n }\n\n if (hasInnerSurface) {\n var outerOffset = stackPartitions * subdivisions * vertexMultiplier;\n var innerOffset = outerOffset + subdivisions * slicePartitions;\n if (isTopOpen) {\n // Draw lines from the top of the inner surface to the top of the outer surface\n for (i = 0; i < slicePartitions; i++) {\n indices[index++] = outerOffset + i;\n indices[index++] = innerOffset + i;\n }\n }\n\n if (isBotOpen) {\n // Draw lines from the top of the inner surface to the top of the outer surface\n outerOffset += subdivisions * slicePartitions - slicePartitions;\n innerOffset += subdivisions * slicePartitions - slicePartitions;\n for (i = 0; i < slicePartitions; i++) {\n indices[index++] = outerOffset + i;\n indices[index++] = innerOffset + i;\n }\n }\n }\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n }),\n });\n\n if (defined(ellipsoidGeometry._offsetAttribute)) {\n var length = positions.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: BoundingSphere.fromEllipsoid(ellipsoid),\n offsetAttribute: ellipsoidGeometry._offsetAttribute,\n });\n};\nexport default EllipsoidOutlineGeometry;\n","import when from \"../ThirdParty/when.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * A very simple {@link TerrainProvider} that produces geometry by tessellating an ellipsoidal\n * surface.\n *\n * @alias EllipsoidTerrainProvider\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {TilingScheme} [options.tilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles. If this parameter is not provided, a {@link GeographicTilingScheme}\n * is used.\n * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n *\n * @see TerrainProvider\n */\nfunction EllipsoidTerrainProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._tilingScheme = options.tilingScheme;\n if (!defined(this._tilingScheme)) {\n this._tilingScheme = new GeographicTilingScheme({\n ellipsoid: defaultValue(options.ellipsoid, Ellipsoid.WGS84),\n });\n }\n\n // Note: the 64 below does NOT need to match the actual vertex dimensions, because\n // the ellipsoid is significantly smoother than actual terrain.\n this._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n this._tilingScheme.ellipsoid,\n 64,\n this._tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n\n this._errorEvent = new Event();\n this._readyPromise = when.resolve(true);\n}\n\nObject.defineProperties(EllipsoidTerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should not be called before {@link EllipsoidTerrainProvider#ready} returns true.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link EllipsoidTerrainProvider#ready} returns true.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {GeographicTilingScheme}\n */\n tilingScheme: {\n get: function () {\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: function () {\n return true;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link EllipsoidTerrainProvider#ready} returns true.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Boolean}\n */\n hasWaterMask: {\n get: function () {\n return false;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link EllipsoidTerrainProvider#ready} returns true.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {Boolean}\n */\n hasVertexNormals: {\n get: function () {\n return false;\n },\n },\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof EllipsoidTerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: function () {\n return undefined;\n },\n },\n});\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link TerrainProvider#ready} returns true. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n */\nEllipsoidTerrainProvider.prototype.requestTileGeometry = function (\n x,\n y,\n level,\n request\n) {\n var width = 16;\n var height = 16;\n return when.resolve(\n new HeightmapTerrainData({\n buffer: new Uint8Array(width * height),\n width: width,\n height: height,\n })\n );\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nEllipsoidTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported, otherwise true or false.\n */\nEllipsoidTerrainProvider.prototype.getTileDataAvailable = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nEllipsoidTerrainProvider.prototype.loadTileDataAvailability = function (\n x,\n y,\n level\n) {\n return undefined;\n};\nexport default EllipsoidTerrainProvider;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A convenience object that simplifies the common pattern of attaching event listeners\n * to several events, then removing all those listeners at once later, for example, in\n * a destroy method.\n *\n * @alias EventHelper\n * @constructor\n *\n *\n * @example\n * var helper = new Cesium.EventHelper();\n *\n * helper.add(someObject.event, listener1, this);\n * helper.add(otherObject.event, listener2, this);\n *\n * // later...\n * helper.removeAll();\n *\n * @see Event\n */\nfunction EventHelper() {\n this._removalFunctions = [];\n}\n\n/**\n * Adds a listener to an event, and records the registration to be cleaned up later.\n *\n * @param {Event} event The event to attach to.\n * @param {Function} listener The function to be executed when the event is raised.\n * @param {Object} [scope] An optional object scope to serve as the <code>this</code>\n * pointer in which the listener function will execute.\n * @returns {EventHelper.RemoveCallback} A function that will remove this event listener when invoked.\n *\n * @see Event#addEventListener\n */\nEventHelper.prototype.add = function (event, listener, scope) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(event)) {\n throw new DeveloperError(\"event is required\");\n }\n //>>includeEnd('debug');\n\n var removalFunction = event.addEventListener(listener, scope);\n this._removalFunctions.push(removalFunction);\n\n var that = this;\n return function () {\n removalFunction();\n var removalFunctions = that._removalFunctions;\n removalFunctions.splice(removalFunctions.indexOf(removalFunction), 1);\n };\n};\n\n/**\n * Unregisters all previously added listeners.\n *\n * @see Event#removeEventListener\n */\nEventHelper.prototype.removeAll = function () {\n var removalFunctions = this._removalFunctions;\n for (var i = 0, len = removalFunctions.length; i < len; ++i) {\n removalFunctions[i]();\n }\n removalFunctions.length = 0;\n};\n\n/**\n * A function that removes a listener.\n * @callback EventHelper.RemoveCallback\n */\nexport default EventHelper;\n","/**\n * Constants to determine how an interpolated value is extrapolated\n * when querying outside the bounds of available data.\n *\n * @enum {Number}\n *\n * @see SampledProperty\n */\nvar ExtrapolationType = {\n /**\n * No extrapolation occurs.\n *\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * The first or last value is used when outside the range of sample data.\n *\n * @type {Number}\n * @constant\n */\n HOLD: 1,\n\n /**\n * The value is extrapolated.\n *\n * @type {Number}\n * @constant\n */\n EXTRAPOLATE: 2,\n};\nexport default Object.freeze(ExtrapolationType);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicOffCenterFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.left] The left clipping plane distance.\n * @param {Number} [options.right] The right clipping plane distance.\n * @param {Number} [options.top] The top clipping plane distance.\n * @param {Number} [options.bottom] The bottom clipping plane distance.\n * @param {Number} [options.near=1.0] The near clipping plane distance.\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * var maxRadii = ellipsoid.maximumRadius;\n *\n * var frustum = new Cesium.OrthographicOffCenterFrustum();\n * frustum.right = maxRadii * Cesium.Math.PI;\n * frustum.left = -c.frustum.right;\n * frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth);\n * frustum.bottom = -c.frustum.top;\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicOffCenterFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The left clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.left = options.left;\n this._left = undefined;\n\n /**\n * The right clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.right = options.right;\n this._right = undefined;\n\n /**\n * The top clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.top = options.top;\n this._top = undefined;\n\n /**\n * The bottom clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.bottom = options.bottom;\n this._bottom = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0;\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n this._cullingVolume = new CullingVolume();\n this._orthographicMatrix = new Matrix4();\n}\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.right) ||\n !defined(frustum.left) ||\n !defined(frustum.top) ||\n !defined(frustum.bottom) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"right, left, top, bottom, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n if (\n frustum.top !== frustum._top ||\n frustum.bottom !== frustum._bottom ||\n frustum.left !== frustum._left ||\n frustum.right !== frustum._right ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.left > frustum.right) {\n throw new DeveloperError(\"right must be greater than left.\");\n }\n if (frustum.bottom > frustum.top) {\n throw new DeveloperError(\"top must be greater than bottom.\");\n }\n if (frustum.near <= 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._left = frustum.left;\n frustum._right = frustum.right;\n frustum._top = frustum.top;\n frustum._bottom = frustum.bottom;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n frustum._orthographicMatrix = Matrix4.computeOrthographicOffCenter(\n frustum.left,\n frustum.right,\n frustum.bottom,\n frustum.top,\n frustum.near,\n frustum.far,\n frustum._orthographicMatrix\n );\n }\n}\n\nObject.defineProperties(OrthographicOffCenterFrustum.prototype, {\n /**\n * Gets the orthographic projection matrix computed from the view frustum.\n * @memberof OrthographicOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._orthographicMatrix;\n },\n },\n});\n\nvar getPlanesRight = new Cartesian3();\nvar getPlanesNearCenter = new Cartesian3();\nvar getPlanesPoint = new Cartesian3();\nvar negateScratch = new Cartesian3();\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * var intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicOffCenterFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n if (!defined(up)) {\n throw new DeveloperError(\"up is required.\");\n }\n //>>includeEnd('debug');\n\n var planes = this._cullingVolume.planes;\n var t = this.top;\n var b = this.bottom;\n var r = this.right;\n var l = this.left;\n var n = this.near;\n var f = this.far;\n\n var right = Cartesian3.cross(direction, up, getPlanesRight);\n Cartesian3.normalize(right, right);\n var nearCenter = getPlanesNearCenter;\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\n Cartesian3.add(position, nearCenter, nearCenter);\n\n var point = getPlanesPoint;\n\n // Left plane\n Cartesian3.multiplyByScalar(right, l, point);\n Cartesian3.add(nearCenter, point, point);\n\n var plane = planes[0];\n if (!defined(plane)) {\n plane = planes[0] = new Cartesian4();\n }\n plane.x = right.x;\n plane.y = right.y;\n plane.z = right.z;\n plane.w = -Cartesian3.dot(right, point);\n\n // Right plane\n Cartesian3.multiplyByScalar(right, r, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[1];\n if (!defined(plane)) {\n plane = planes[1] = new Cartesian4();\n }\n plane.x = -right.x;\n plane.y = -right.y;\n plane.z = -right.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(right, negateScratch), point);\n\n // Bottom plane\n Cartesian3.multiplyByScalar(up, b, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[2];\n if (!defined(plane)) {\n plane = planes[2] = new Cartesian4();\n }\n plane.x = up.x;\n plane.y = up.y;\n plane.z = up.z;\n plane.w = -Cartesian3.dot(up, point);\n\n // Top plane\n Cartesian3.multiplyByScalar(up, t, point);\n Cartesian3.add(nearCenter, point, point);\n\n plane = planes[3];\n if (!defined(plane)) {\n plane = planes[3] = new Cartesian4();\n }\n plane.x = -up.x;\n plane.y = -up.y;\n plane.z = -up.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(up, negateScratch), point);\n\n // Near plane\n plane = planes[4];\n if (!defined(plane)) {\n plane = planes[4] = new Cartesian4();\n }\n plane.x = direction.x;\n plane.y = direction.y;\n plane.z = direction.z;\n plane.w = -Cartesian3.dot(direction, nearCenter);\n\n // Far plane\n Cartesian3.multiplyByScalar(direction, f, point);\n Cartesian3.add(position, point, point);\n\n plane = planes[5];\n if (!defined(plane)) {\n plane = planes[5] = new Cartesian4();\n }\n plane.x = -direction.x;\n plane.y = -direction.y;\n plane.z = -direction.z;\n plane.w = -Cartesian3.dot(Cartesian3.negate(direction, negateScratch), point);\n\n return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicOffCenterFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n throw new DeveloperError(\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\n );\n }\n if (drawingBufferWidth <= 0) {\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n }\n if (drawingBufferHeight <= 0) {\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n }\n if (!defined(distance)) {\n throw new DeveloperError(\"distance is required.\");\n }\n if (!defined(pixelRatio)) {\n throw new DeveloperError(\"pixelRatio is required.\");\n }\n if (pixelRatio <= 0) {\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"A result object is required.\");\n }\n //>>includeEnd('debug');\n\n var frustumWidth = this.right - this.left;\n var frustumHeight = this.top - this.bottom;\n var pixelWidth = (pixelRatio * frustumWidth) / drawingBufferWidth;\n var pixelHeight = (pixelRatio * frustumHeight) / drawingBufferHeight;\n\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n};\n\n/**\n * Returns a duplicate of a OrthographicOffCenterFrustum instance.\n *\n * @param {OrthographicOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicOffCenterFrustum} The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided.\n */\nOrthographicOffCenterFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new OrthographicOffCenterFrustum();\n }\n\n result.left = this.left;\n result.right = this.right;\n result.top = this.top;\n result.bottom = this.bottom;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._left = undefined;\n result._right = undefined;\n result._top = undefined;\n result._bottom = undefined;\n result._near = undefined;\n result._far = undefined;\n\n return result;\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} [other] The right hand side OrthographicOffCenterFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equals = function (other) {\n return (\n defined(other) &&\n other instanceof OrthographicOffCenterFrustum &&\n this.right === other.right &&\n this.left === other.left &&\n this.top === other.top &&\n this.bottom === other.bottom &&\n this.near === other.near &&\n this.far === other.far\n );\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} other The right hand side OrthographicOffCenterFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n other === this ||\n (defined(other) &&\n other instanceof OrthographicOffCenterFrustum &&\n CesiumMath.equalsEpsilon(\n this.right,\n other.right,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.left,\n other.left,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.top,\n other.top,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.bottom,\n other.bottom,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.near,\n other.near,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.far,\n other.far,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\nexport default OrthographicOffCenterFrustum;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrthographicOffCenterFrustum from \"./OrthographicOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.width] The width of the frustum in meters.\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {Number} [options.near=1.0] The distance of the near plane.\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\n *\n * @example\n * var maxRadii = ellipsoid.maximumRadius;\n *\n * var frustum = new Cesium.OrthographicFrustum();\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._offCenterFrustum = new OrthographicOffCenterFrustum();\n\n /**\n * The horizontal width of the frustum in meters.\n * @type {Number}\n * @default undefined\n */\n this.width = options.width;\n this._width = undefined;\n\n /**\n * The aspect ratio of the frustum's width to it's height.\n * @type {Number}\n * @default undefined\n */\n this.aspectRatio = options.aspectRatio;\n this._aspectRatio = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0;\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nOrthographicFrustum.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrthographicFrustum} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nOrthographicFrustum.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.width;\n array[startingIndex++] = value.aspectRatio;\n array[startingIndex++] = value.near;\n array[startingIndex] = value.far;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrthographicFrustum} [result] The object into which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new OrthographicFrustum();\n }\n\n result.width = array[startingIndex++];\n result.aspectRatio = array[startingIndex++];\n result.near = array[startingIndex++];\n result.far = array[startingIndex];\n\n return result;\n};\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.width) ||\n !defined(frustum.aspectRatio) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"width, aspectRatio, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n var f = frustum._offCenterFrustum;\n\n if (\n frustum.width !== frustum._width ||\n frustum.aspectRatio !== frustum._aspectRatio ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.aspectRatio < 0) {\n throw new DeveloperError(\"aspectRatio must be positive.\");\n }\n if (frustum.near < 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._aspectRatio = frustum.aspectRatio;\n frustum._width = frustum.width;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n\n var ratio = 1.0 / frustum.aspectRatio;\n f.right = frustum.width * 0.5;\n f.left = -f.right;\n f.top = ratio * f.right;\n f.bottom = -f.top;\n f.near = frustum.near;\n f.far = frustum.far;\n }\n}\n\nObject.defineProperties(OrthographicFrustum.prototype, {\n /**\n * Gets the orthographic projection matrix computed from the view frustum.\n * @memberof OrthographicFrustum.prototype\n * @type {Matrix4}\n * @readonly\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.projectionMatrix;\n },\n },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * var intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n update(this);\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n return this._offCenterFrustum.getPixelDimensions(\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n );\n};\n\n/**\n * Returns a duplicate of a OrthographicFrustum instance.\n *\n * @param {OrthographicFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new OrthographicFrustum();\n }\n\n result.aspectRatio = this.aspectRatio;\n result.width = this.width;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._aspectRatio = undefined;\n result._width = undefined;\n result._near = undefined;\n result._far = undefined;\n\n this._offCenterFrustum.clone(result._offCenterFrustum);\n\n return result;\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} [other] The right hand side OrthographicFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equals = function (other) {\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n this.width === other.width &&\n this.aspectRatio === other.aspectRatio &&\n this._offCenterFrustum.equals(other._offCenterFrustum)\n );\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} other The right hand side OrthographicFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n CesiumMath.equalsEpsilon(\n this.width,\n other.width,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.aspectRatio,\n other.aspectRatio,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n this._offCenterFrustum.equalsEpsilon(\n other._offCenterFrustum,\n relativeEpsilon,\n absoluteEpsilon\n )\n );\n};\nexport default OrthographicFrustum;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveOffCenterFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.left] The left clipping plane distance.\n * @param {Number} [options.right] The right clipping plane distance.\n * @param {Number} [options.top] The top clipping plane distance.\n * @param {Number} [options.bottom] The bottom clipping plane distance.\n * @param {Number} [options.near=1.0] The near clipping plane distance.\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * var frustum = new Cesium.PerspectiveOffCenterFrustum({\n * left : -1.0,\n * right : 1.0,\n * top : 1.0,\n * bottom : -1.0,\n * near : 1.0,\n * far : 100.0\n * });\n *\n * @see PerspectiveFrustum\n */\nfunction PerspectiveOffCenterFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * Defines the left clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.left = options.left;\n this._left = undefined;\n\n /**\n * Defines the right clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.right = options.right;\n this._right = undefined;\n\n /**\n * Defines the top clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.top = options.top;\n this._top = undefined;\n\n /**\n * Defines the bottom clipping plane.\n * @type {Number}\n * @default undefined\n */\n this.bottom = options.bottom;\n this._bottom = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n this._cullingVolume = new CullingVolume();\n this._perspectiveMatrix = new Matrix4();\n this._infinitePerspective = new Matrix4();\n}\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.right) ||\n !defined(frustum.left) ||\n !defined(frustum.top) ||\n !defined(frustum.bottom) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"right, left, top, bottom, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n var t = frustum.top;\n var b = frustum.bottom;\n var r = frustum.right;\n var l = frustum.left;\n var n = frustum.near;\n var f = frustum.far;\n\n if (\n t !== frustum._top ||\n b !== frustum._bottom ||\n l !== frustum._left ||\n r !== frustum._right ||\n n !== frustum._near ||\n f !== frustum._far\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.near <= 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._left = l;\n frustum._right = r;\n frustum._top = t;\n frustum._bottom = b;\n frustum._near = n;\n frustum._far = f;\n frustum._perspectiveMatrix = Matrix4.computePerspectiveOffCenter(\n l,\n r,\n b,\n t,\n n,\n f,\n frustum._perspectiveMatrix\n );\n frustum._infinitePerspective = Matrix4.computeInfinitePerspectiveOffCenter(\n l,\n r,\n b,\n t,\n n,\n frustum._infinitePerspective\n );\n }\n}\n\nObject.defineProperties(PerspectiveOffCenterFrustum.prototype, {\n /**\n * Gets the perspective projection matrix computed from the view frustum.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._perspectiveMatrix;\n },\n },\n\n /**\n * Gets the perspective projection matrix computed from the view frustum with an infinite far plane.\n * @memberof PerspectiveOffCenterFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveOffCenterFrustum#projectionMatrix\n */\n infiniteProjectionMatrix: {\n get: function () {\n update(this);\n return this._infinitePerspective;\n },\n },\n});\n\nvar getPlanesRight = new Cartesian3();\nvar getPlanesNearCenter = new Cartesian3();\nvar getPlanesFarCenter = new Cartesian3();\nvar getPlanesNormal = new Cartesian3();\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * var intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveOffCenterFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n\n if (!defined(up)) {\n throw new DeveloperError(\"up is required.\");\n }\n //>>includeEnd('debug');\n\n var planes = this._cullingVolume.planes;\n\n var t = this.top;\n var b = this.bottom;\n var r = this.right;\n var l = this.left;\n var n = this.near;\n var f = this.far;\n\n var right = Cartesian3.cross(direction, up, getPlanesRight);\n\n var nearCenter = getPlanesNearCenter;\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\n Cartesian3.add(position, nearCenter, nearCenter);\n\n var farCenter = getPlanesFarCenter;\n Cartesian3.multiplyByScalar(direction, f, farCenter);\n Cartesian3.add(position, farCenter, farCenter);\n\n var normal = getPlanesNormal;\n\n //Left plane computation\n Cartesian3.multiplyByScalar(right, l, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.normalize(normal, normal);\n Cartesian3.cross(normal, up, normal);\n Cartesian3.normalize(normal, normal);\n\n var plane = planes[0];\n if (!defined(plane)) {\n plane = planes[0] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Right plane computation\n Cartesian3.multiplyByScalar(right, r, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(up, normal, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[1];\n if (!defined(plane)) {\n plane = planes[1] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Bottom plane computation\n Cartesian3.multiplyByScalar(up, b, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(right, normal, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[2];\n if (!defined(plane)) {\n plane = planes[2] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Top plane computation\n Cartesian3.multiplyByScalar(up, t, normal);\n Cartesian3.add(nearCenter, normal, normal);\n Cartesian3.subtract(normal, position, normal);\n Cartesian3.cross(normal, right, normal);\n Cartesian3.normalize(normal, normal);\n\n plane = planes[3];\n if (!defined(plane)) {\n plane = planes[3] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, position);\n\n //Near plane computation\n plane = planes[4];\n if (!defined(plane)) {\n plane = planes[4] = new Cartesian4();\n }\n plane.x = direction.x;\n plane.y = direction.y;\n plane.z = direction.z;\n plane.w = -Cartesian3.dot(direction, nearCenter);\n\n //Far plane computation\n Cartesian3.negate(direction, normal);\n\n plane = planes[5];\n if (!defined(plane)) {\n plane = planes[5] = new Cartesian4();\n }\n plane.x = normal.x;\n plane.y = normal.y;\n plane.z = normal.z;\n plane.w = -Cartesian3.dot(normal, farCenter);\n\n return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * var position = camera.position;\n * var direction = camera.direction;\n * var toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\n * var toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * var distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveOffCenterFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n throw new DeveloperError(\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\n );\n }\n if (drawingBufferWidth <= 0) {\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n }\n if (drawingBufferHeight <= 0) {\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n }\n if (!defined(distance)) {\n throw new DeveloperError(\"distance is required.\");\n }\n if (!defined(pixelRatio)) {\n throw new DeveloperError(\"pixelRatio is required\");\n }\n if (pixelRatio <= 0) {\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"A result object is required.\");\n }\n //>>includeEnd('debug');\n\n var inverseNear = 1.0 / this.near;\n var tanTheta = this.top * inverseNear;\n var pixelHeight =\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferHeight;\n tanTheta = this.right * inverseNear;\n var pixelWidth =\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferWidth;\n\n result.x = pixelWidth;\n result.y = pixelHeight;\n return result;\n};\n\n/**\n * Returns a duplicate of a PerspectiveOffCenterFrustum instance.\n *\n * @param {PerspectiveOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveOffCenterFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveOffCenterFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new PerspectiveOffCenterFrustum();\n }\n\n result.right = this.right;\n result.left = this.left;\n result.top = this.top;\n result.bottom = this.bottom;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._left = undefined;\n result._right = undefined;\n result._top = undefined;\n result._bottom = undefined;\n result._near = undefined;\n result._far = undefined;\n\n return result;\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equals = function (other) {\n return (\n defined(other) &&\n other instanceof PerspectiveOffCenterFrustum &&\n this.right === other.right &&\n this.left === other.left &&\n this.top === other.top &&\n this.bottom === other.bottom &&\n this.near === other.near &&\n this.far === other.far\n );\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} other The right hand side PerspectiveOffCenterFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n return (\n other === this ||\n (defined(other) &&\n other instanceof PerspectiveOffCenterFrustum &&\n CesiumMath.equalsEpsilon(\n this.right,\n other.right,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.left,\n other.left,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.top,\n other.top,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.bottom,\n other.bottom,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.near,\n other.near,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.far,\n other.far,\n relativeEpsilon,\n absoluteEpsilon\n ))\n );\n};\nexport default PerspectiveOffCenterFrustum;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport PerspectiveOffCenterFrustum from \"./PerspectiveOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveFrustum\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.fov] The angle of the field of view (FOV), in radians.\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {Number} [options.near=1.0] The distance of the near plane.\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\n * @param {Number} [options.xOffset=0.0] The offset in the x direction.\n * @param {Number} [options.yOffset=0.0] The offset in the y direction.\n *\n * @example\n * var frustum = new Cesium.PerspectiveFrustum({\n * fov : Cesium.Math.PI_OVER_THREE,\n * aspectRatio : canvas.clientWidth / canvas.clientHeight\n * near : 1.0,\n * far : 1000.0\n * });\n *\n * @see PerspectiveOffCenterFrustum\n */\nfunction PerspectiveFrustum(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._offCenterFrustum = new PerspectiveOffCenterFrustum();\n\n /**\n * The angle of the field of view (FOV), in radians. This angle will be used\n * as the horizontal FOV if the width is greater than the height, otherwise\n * it will be the vertical FOV.\n * @type {Number}\n * @default undefined\n */\n this.fov = options.fov;\n this._fov = undefined;\n this._fovy = undefined;\n\n this._sseDenominator = undefined;\n\n /**\n * The aspect ratio of the frustum's width to it's height.\n * @type {Number}\n * @default undefined\n */\n this.aspectRatio = options.aspectRatio;\n this._aspectRatio = undefined;\n\n /**\n * The distance of the near plane.\n * @type {Number}\n * @default 1.0\n */\n this.near = defaultValue(options.near, 1.0);\n this._near = this.near;\n\n /**\n * The distance of the far plane.\n * @type {Number}\n * @default 500000000.0\n */\n this.far = defaultValue(options.far, 500000000.0);\n this._far = this.far;\n\n /**\n * Offsets the frustum in the x direction.\n * @type {Number}\n * @default 0.0\n */\n this.xOffset = defaultValue(options.xOffset, 0.0);\n this._xOffset = this.xOffset;\n\n /**\n * Offsets the frustum in the y direction.\n * @type {Number}\n * @default 0.0\n */\n this.yOffset = defaultValue(options.yOffset, 0.0);\n this._yOffset = this.yOffset;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nPerspectiveFrustum.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PerspectiveFrustum} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPerspectiveFrustum.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.fov;\n array[startingIndex++] = value.aspectRatio;\n array[startingIndex++] = value.near;\n array[startingIndex++] = value.far;\n array[startingIndex++] = value.xOffset;\n array[startingIndex] = value.yOffset;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PerspectiveFrustum} [result] The object into which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new PerspectiveFrustum();\n }\n\n result.fov = array[startingIndex++];\n result.aspectRatio = array[startingIndex++];\n result.near = array[startingIndex++];\n result.far = array[startingIndex++];\n result.xOffset = array[startingIndex++];\n result.yOffset = array[startingIndex];\n\n return result;\n};\n\nfunction update(frustum) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(frustum.fov) ||\n !defined(frustum.aspectRatio) ||\n !defined(frustum.near) ||\n !defined(frustum.far)\n ) {\n throw new DeveloperError(\n \"fov, aspectRatio, near, or far parameters are not set.\"\n );\n }\n //>>includeEnd('debug');\n\n var f = frustum._offCenterFrustum;\n\n if (\n frustum.fov !== frustum._fov ||\n frustum.aspectRatio !== frustum._aspectRatio ||\n frustum.near !== frustum._near ||\n frustum.far !== frustum._far ||\n frustum.xOffset !== frustum._xOffset ||\n frustum.yOffset !== frustum._yOffset\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (frustum.fov < 0 || frustum.fov >= Math.PI) {\n throw new DeveloperError(\"fov must be in the range [0, PI).\");\n }\n\n if (frustum.aspectRatio < 0) {\n throw new DeveloperError(\"aspectRatio must be positive.\");\n }\n\n if (frustum.near < 0 || frustum.near > frustum.far) {\n throw new DeveloperError(\n \"near must be greater than zero and less than far.\"\n );\n }\n //>>includeEnd('debug');\n\n frustum._aspectRatio = frustum.aspectRatio;\n frustum._fov = frustum.fov;\n frustum._fovy =\n frustum.aspectRatio <= 1\n ? frustum.fov\n : Math.atan(Math.tan(frustum.fov * 0.5) / frustum.aspectRatio) * 2.0;\n frustum._near = frustum.near;\n frustum._far = frustum.far;\n frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy);\n frustum._xOffset = frustum.xOffset;\n frustum._yOffset = frustum.yOffset;\n\n f.top = frustum.near * Math.tan(0.5 * frustum._fovy);\n f.bottom = -f.top;\n f.right = frustum.aspectRatio * f.top;\n f.left = -f.right;\n f.near = frustum.near;\n f.far = frustum.far;\n\n f.right += frustum.xOffset;\n f.left += frustum.xOffset;\n f.top += frustum.yOffset;\n f.bottom += frustum.yOffset;\n }\n}\n\nObject.defineProperties(PerspectiveFrustum.prototype, {\n /**\n * Gets the perspective projection matrix computed from the view frustum.\n * @memberof PerspectiveFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveFrustum#infiniteProjectionMatrix\n */\n projectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.projectionMatrix;\n },\n },\n\n /**\n * The perspective projection matrix computed from the view frustum with an infinite far plane.\n * @memberof PerspectiveFrustum.prototype\n * @type {Matrix4}\n * @readonly\n *\n * @see PerspectiveFrustum#projectionMatrix\n */\n infiniteProjectionMatrix: {\n get: function () {\n update(this);\n return this._offCenterFrustum.infiniteProjectionMatrix;\n },\n },\n\n /**\n * Gets the angle of the vertical field of view, in radians.\n * @memberof PerspectiveFrustum.prototype\n * @type {Number}\n * @readonly\n * @default undefined\n */\n fovy: {\n get: function () {\n update(this);\n return this._fovy;\n },\n },\n\n /**\n * @readonly\n * @private\n */\n sseDenominator: {\n get: function () {\n update(this);\n return this._sseDenominator;\n },\n },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * var intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveFrustum.prototype.computeCullingVolume = function (\n position,\n direction,\n up\n) {\n update(this);\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\n * @param {Number} distance The distance to the near plane in meters.\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * var position = camera.position;\n * var direction = camera.direction;\n * var toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\n * var toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * var distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * var pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveFrustum.prototype.getPixelDimensions = function (\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n) {\n update(this);\n return this._offCenterFrustum.getPixelDimensions(\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n pixelRatio,\n result\n );\n};\n\n/**\n * Returns a duplicate of a PerspectiveFrustum instance.\n *\n * @param {PerspectiveFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new PerspectiveFrustum();\n }\n\n result.aspectRatio = this.aspectRatio;\n result.fov = this.fov;\n result.near = this.near;\n result.far = this.far;\n\n // force update of clone to compute matrices\n result._aspectRatio = undefined;\n result._fov = undefined;\n result._near = undefined;\n result._far = undefined;\n\n this._offCenterFrustum.clone(result._offCenterFrustum);\n\n return result;\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equals = function (other) {\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n this.fov === other.fov &&\n this.aspectRatio === other.aspectRatio &&\n this._offCenterFrustum.equals(other._offCenterFrustum)\n );\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} other The right hand side PerspectiveFrustum.\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {Boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equalsEpsilon = function (\n other,\n relativeEpsilon,\n absoluteEpsilon\n) {\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n return false;\n }\n\n update(this);\n update(other);\n\n return (\n CesiumMath.equalsEpsilon(\n this.fov,\n other.fov,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n CesiumMath.equalsEpsilon(\n this.aspectRatio,\n other.aspectRatio,\n relativeEpsilon,\n absoluteEpsilon\n ) &&\n this._offCenterFrustum.equalsEpsilon(\n other._offCenterFrustum,\n relativeEpsilon,\n absoluteEpsilon\n )\n );\n};\nexport default PerspectiveFrustum;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar PERSPECTIVE = 0;\nvar ORTHOGRAPHIC = 1;\n\n/**\n * Describes a frustum at the given the origin and orientation.\n *\n * @alias FrustumGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\n * @param {Cartesian3} options.origin The origin of the frustum.\n * @param {Quaternion} options.orientation The orientation of the frustum.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n */\nfunction FrustumGeometry(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.frustum\", options.frustum);\n Check.typeOf.object(\"options.origin\", options.origin);\n Check.typeOf.object(\"options.orientation\", options.orientation);\n //>>includeEnd('debug');\n\n var frustum = options.frustum;\n var orientation = options.orientation;\n var origin = options.origin;\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\n // creating multiple FrustumGeometrys. This way the near plane of one frustum doesn't overlap\n // the far plane of another.\n var drawNearPlane = defaultValue(options._drawNearPlane, true);\n\n var frustumType;\n var frustumPackedLength;\n if (frustum instanceof PerspectiveFrustum) {\n frustumType = PERSPECTIVE;\n frustumPackedLength = PerspectiveFrustum.packedLength;\n } else if (frustum instanceof OrthographicFrustum) {\n frustumType = ORTHOGRAPHIC;\n frustumPackedLength = OrthographicFrustum.packedLength;\n }\n\n this._frustumType = frustumType;\n this._frustum = frustum.clone();\n this._origin = Cartesian3.clone(origin);\n this._orientation = Quaternion.clone(orientation);\n this._drawNearPlane = drawNearPlane;\n this._vertexFormat = vertexFormat;\n this._workerName = \"createFrustumGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n 2 +\n frustumPackedLength +\n Cartesian3.packedLength +\n Quaternion.packedLength +\n VertexFormat.packedLength;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {FrustumGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nFrustumGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var frustumType = value._frustumType;\n var frustum = value._frustum;\n\n array[startingIndex++] = frustumType;\n\n if (frustumType === PERSPECTIVE) {\n PerspectiveFrustum.pack(frustum, array, startingIndex);\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n OrthographicFrustum.pack(frustum, array, startingIndex);\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n Cartesian3.pack(value._origin, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n Quaternion.pack(value._orientation, array, startingIndex);\n startingIndex += Quaternion.packedLength;\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\n\n return array;\n};\n\nvar scratchPackPerspective = new PerspectiveFrustum();\nvar scratchPackOrthographic = new OrthographicFrustum();\nvar scratchPackQuaternion = new Quaternion();\nvar scratchPackorigin = new Cartesian3();\nvar scratchVertexFormat = new VertexFormat();\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {FrustumGeometry} [result] The object into which to store the result.\n */\nFrustumGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var frustumType = array[startingIndex++];\n\n var frustum;\n if (frustumType === PERSPECTIVE) {\n frustum = PerspectiveFrustum.unpack(\n array,\n startingIndex,\n scratchPackPerspective\n );\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n frustum = OrthographicFrustum.unpack(\n array,\n startingIndex,\n scratchPackOrthographic\n );\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n var origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\n startingIndex += Cartesian3.packedLength;\n var orientation = Quaternion.unpack(\n array,\n startingIndex,\n scratchPackQuaternion\n );\n startingIndex += Quaternion.packedLength;\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n var drawNearPlane = array[startingIndex] === 1.0;\n\n if (!defined(result)) {\n return new FrustumGeometry({\n frustum: frustum,\n origin: origin,\n orientation: orientation,\n vertexFormat: vertexFormat,\n _drawNearPlane: drawNearPlane,\n });\n }\n\n var frustumResult =\n frustumType === result._frustumType ? result._frustum : undefined;\n result._frustum = frustum.clone(frustumResult);\n\n result._frustumType = frustumType;\n result._origin = Cartesian3.clone(origin, result._origin);\n result._orientation = Quaternion.clone(orientation, result._orientation);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._drawNearPlane = drawNearPlane;\n\n return result;\n};\n\nfunction getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n normal,\n tangent,\n bitangent\n) {\n var stOffset = (offset / 3) * 2;\n\n for (var i = 0; i < 4; ++i) {\n if (defined(normals)) {\n normals[offset] = normal.x;\n normals[offset + 1] = normal.y;\n normals[offset + 2] = normal.z;\n }\n if (defined(tangents)) {\n tangents[offset] = tangent.x;\n tangents[offset + 1] = tangent.y;\n tangents[offset + 2] = tangent.z;\n }\n if (defined(bitangents)) {\n bitangents[offset] = bitangent.x;\n bitangents[offset + 1] = bitangent.y;\n bitangents[offset + 2] = bitangent.z;\n }\n offset += 3;\n }\n\n st[stOffset] = 0.0;\n st[stOffset + 1] = 0.0;\n st[stOffset + 2] = 1.0;\n st[stOffset + 3] = 0.0;\n st[stOffset + 4] = 1.0;\n st[stOffset + 5] = 1.0;\n st[stOffset + 6] = 0.0;\n st[stOffset + 7] = 1.0;\n}\n\nvar scratchRotationMatrix = new Matrix3();\nvar scratchViewMatrix = new Matrix4();\nvar scratchInverseMatrix = new Matrix4();\n\nvar scratchXDirection = new Cartesian3();\nvar scratchYDirection = new Cartesian3();\nvar scratchZDirection = new Cartesian3();\nvar scratchNegativeX = new Cartesian3();\nvar scratchNegativeY = new Cartesian3();\nvar scratchNegativeZ = new Cartesian3();\n\nvar frustumSplits = new Array(3);\n\nvar frustumCornersNDC = new Array(4);\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\n\nvar scratchFrustumCorners = new Array(4);\nfor (var i = 0; i < 4; ++i) {\n scratchFrustumCorners[i] = new Cartesian4();\n}\n\nFrustumGeometry._computeNearFarPlanes = function (\n origin,\n orientation,\n frustumType,\n frustum,\n positions,\n xDirection,\n yDirection,\n zDirection\n) {\n var rotationMatrix = Matrix3.fromQuaternion(\n orientation,\n scratchRotationMatrix\n );\n var x = defaultValue(xDirection, scratchXDirection);\n var y = defaultValue(yDirection, scratchYDirection);\n var z = defaultValue(zDirection, scratchZDirection);\n\n x = Matrix3.getColumn(rotationMatrix, 0, x);\n y = Matrix3.getColumn(rotationMatrix, 1, y);\n z = Matrix3.getColumn(rotationMatrix, 2, z);\n\n Cartesian3.normalize(x, x);\n Cartesian3.normalize(y, y);\n Cartesian3.normalize(z, z);\n\n Cartesian3.negate(x, x);\n\n var view = Matrix4.computeView(origin, z, y, x, scratchViewMatrix);\n\n var inverseView;\n var inverseViewProjection;\n if (frustumType === PERSPECTIVE) {\n var projection = frustum.projectionMatrix;\n var viewProjection = Matrix4.multiply(\n projection,\n view,\n scratchInverseMatrix\n );\n inverseViewProjection = Matrix4.inverse(\n viewProjection,\n scratchInverseMatrix\n );\n } else {\n inverseView = Matrix4.inverseTransformation(view, scratchInverseMatrix);\n }\n\n if (defined(inverseViewProjection)) {\n frustumSplits[0] = frustum.near;\n frustumSplits[1] = frustum.far;\n } else {\n frustumSplits[0] = 0.0;\n frustumSplits[1] = frustum.near;\n frustumSplits[2] = frustum.far;\n }\n\n for (var i = 0; i < 2; ++i) {\n for (var j = 0; j < 4; ++j) {\n var corner = Cartesian4.clone(\n frustumCornersNDC[j],\n scratchFrustumCorners[j]\n );\n\n if (!defined(inverseViewProjection)) {\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n var near = frustumSplits[i];\n var far = frustumSplits[i + 1];\n\n corner.x =\n (corner.x * (frustum.right - frustum.left) +\n frustum.left +\n frustum.right) *\n 0.5;\n corner.y =\n (corner.y * (frustum.top - frustum.bottom) +\n frustum.bottom +\n frustum.top) *\n 0.5;\n corner.z = (corner.z * (near - far) - near - far) * 0.5;\n corner.w = 1.0;\n\n Matrix4.multiplyByVector(inverseView, corner, corner);\n } else {\n corner = Matrix4.multiplyByVector(\n inverseViewProjection,\n corner,\n corner\n );\n\n // Reverse perspective divide\n var w = 1.0 / corner.w;\n Cartesian3.multiplyByScalar(corner, w, corner);\n\n Cartesian3.subtract(corner, origin, corner);\n Cartesian3.normalize(corner, corner);\n\n var fac = Cartesian3.dot(z, corner);\n Cartesian3.multiplyByScalar(corner, frustumSplits[i] / fac, corner);\n Cartesian3.add(corner, origin, corner);\n }\n\n positions[12 * i + j * 3] = corner.x;\n positions[12 * i + j * 3 + 1] = corner.y;\n positions[12 * i + j * 3 + 2] = corner.z;\n }\n }\n};\n\n/**\n * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere.\n *\n * @param {FrustumGeometry} frustumGeometry A description of the frustum.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nFrustumGeometry.createGeometry = function (frustumGeometry) {\n var frustumType = frustumGeometry._frustumType;\n var frustum = frustumGeometry._frustum;\n var origin = frustumGeometry._origin;\n var orientation = frustumGeometry._orientation;\n var drawNearPlane = frustumGeometry._drawNearPlane;\n var vertexFormat = frustumGeometry._vertexFormat;\n\n var numberOfPlanes = drawNearPlane ? 6 : 5;\n var positions = new Float64Array(3 * 4 * 6);\n FrustumGeometry._computeNearFarPlanes(\n origin,\n orientation,\n frustumType,\n frustum,\n positions\n );\n\n // -x plane\n var offset = 3 * 4 * 2;\n positions[offset] = positions[3 * 4];\n positions[offset + 1] = positions[3 * 4 + 1];\n positions[offset + 2] = positions[3 * 4 + 2];\n positions[offset + 3] = positions[0];\n positions[offset + 4] = positions[1];\n positions[offset + 5] = positions[2];\n positions[offset + 6] = positions[3 * 3];\n positions[offset + 7] = positions[3 * 3 + 1];\n positions[offset + 8] = positions[3 * 3 + 2];\n positions[offset + 9] = positions[3 * 7];\n positions[offset + 10] = positions[3 * 7 + 1];\n positions[offset + 11] = positions[3 * 7 + 2];\n\n // -y plane\n offset += 3 * 4;\n positions[offset] = positions[3 * 5];\n positions[offset + 1] = positions[3 * 5 + 1];\n positions[offset + 2] = positions[3 * 5 + 2];\n positions[offset + 3] = positions[3];\n positions[offset + 4] = positions[3 + 1];\n positions[offset + 5] = positions[3 + 2];\n positions[offset + 6] = positions[0];\n positions[offset + 7] = positions[1];\n positions[offset + 8] = positions[2];\n positions[offset + 9] = positions[3 * 4];\n positions[offset + 10] = positions[3 * 4 + 1];\n positions[offset + 11] = positions[3 * 4 + 2];\n\n // +x plane\n offset += 3 * 4;\n positions[offset] = positions[3];\n positions[offset + 1] = positions[3 + 1];\n positions[offset + 2] = positions[3 + 2];\n positions[offset + 3] = positions[3 * 5];\n positions[offset + 4] = positions[3 * 5 + 1];\n positions[offset + 5] = positions[3 * 5 + 2];\n positions[offset + 6] = positions[3 * 6];\n positions[offset + 7] = positions[3 * 6 + 1];\n positions[offset + 8] = positions[3 * 6 + 2];\n positions[offset + 9] = positions[3 * 2];\n positions[offset + 10] = positions[3 * 2 + 1];\n positions[offset + 11] = positions[3 * 2 + 2];\n\n // +y plane\n offset += 3 * 4;\n positions[offset] = positions[3 * 2];\n positions[offset + 1] = positions[3 * 2 + 1];\n positions[offset + 2] = positions[3 * 2 + 2];\n positions[offset + 3] = positions[3 * 6];\n positions[offset + 4] = positions[3 * 6 + 1];\n positions[offset + 5] = positions[3 * 6 + 2];\n positions[offset + 6] = positions[3 * 7];\n positions[offset + 7] = positions[3 * 7 + 1];\n positions[offset + 8] = positions[3 * 7 + 2];\n positions[offset + 9] = positions[3 * 3];\n positions[offset + 10] = positions[3 * 3 + 1];\n positions[offset + 11] = positions[3 * 3 + 2];\n\n if (!drawNearPlane) {\n positions = positions.subarray(3 * 4);\n }\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n }),\n });\n\n if (\n defined(vertexFormat.normal) ||\n defined(vertexFormat.tangent) ||\n defined(vertexFormat.bitangent) ||\n defined(vertexFormat.st)\n ) {\n var normals = defined(vertexFormat.normal)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n var tangents = defined(vertexFormat.tangent)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n var bitangents = defined(vertexFormat.bitangent)\n ? new Float32Array(3 * 4 * numberOfPlanes)\n : undefined;\n var st = defined(vertexFormat.st)\n ? new Float32Array(2 * 4 * numberOfPlanes)\n : undefined;\n\n var x = scratchXDirection;\n var y = scratchYDirection;\n var z = scratchZDirection;\n\n var negativeX = Cartesian3.negate(x, scratchNegativeX);\n var negativeY = Cartesian3.negate(y, scratchNegativeY);\n var negativeZ = Cartesian3.negate(z, scratchNegativeZ);\n\n offset = 0;\n if (drawNearPlane) {\n getAttributes(offset, normals, tangents, bitangents, st, negativeZ, x, y); // near\n offset += 3 * 4;\n }\n getAttributes(offset, normals, tangents, bitangents, st, z, negativeX, y); // far\n offset += 3 * 4;\n getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n negativeX,\n negativeZ,\n y\n ); // -x\n offset += 3 * 4;\n getAttributes(\n offset,\n normals,\n tangents,\n bitangents,\n st,\n negativeY,\n negativeZ,\n negativeX\n ); // -y\n offset += 3 * 4;\n getAttributes(offset, normals, tangents, bitangents, st, x, z, y); // +x\n offset += 3 * 4;\n getAttributes(offset, normals, tangents, bitangents, st, y, z, negativeX); // +y\n\n if (defined(normals)) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n if (defined(tangents)) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n if (defined(bitangents)) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n if (defined(st)) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n }\n\n var indices = new Uint16Array(6 * numberOfPlanes);\n for (var i = 0; i < numberOfPlanes; ++i) {\n var indexOffset = i * 6;\n var index = i * 4;\n\n indices[indexOffset] = index;\n indices[indexOffset + 1] = index + 1;\n indices[indexOffset + 2] = index + 2;\n indices[indexOffset + 3] = index;\n indices[indexOffset + 4] = index + 2;\n indices[indexOffset + 5] = index + 3;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: BoundingSphere.fromVertices(positions),\n });\n};\nexport default FrustumGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport FrustumGeometry from \"./FrustumGeometry.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nvar PERSPECTIVE = 0;\nvar ORTHOGRAPHIC = 1;\n\n/**\n * A description of the outline of a frustum with the given the origin and orientation.\n *\n * @alias FrustumOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\n * @param {Cartesian3} options.origin The origin of the frustum.\n * @param {Quaternion} options.orientation The orientation of the frustum.\n */\nfunction FrustumOutlineGeometry(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.frustum\", options.frustum);\n Check.typeOf.object(\"options.origin\", options.origin);\n Check.typeOf.object(\"options.orientation\", options.orientation);\n //>>includeEnd('debug');\n\n var frustum = options.frustum;\n var orientation = options.orientation;\n var origin = options.origin;\n\n // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\n // creating multiple FrustumOutlineGeometrys. This way the near plane of one frustum doesn't overlap\n // the far plane of another.\n var drawNearPlane = defaultValue(options._drawNearPlane, true);\n\n var frustumType;\n var frustumPackedLength;\n if (frustum instanceof PerspectiveFrustum) {\n frustumType = PERSPECTIVE;\n frustumPackedLength = PerspectiveFrustum.packedLength;\n } else if (frustum instanceof OrthographicFrustum) {\n frustumType = ORTHOGRAPHIC;\n frustumPackedLength = OrthographicFrustum.packedLength;\n }\n\n this._frustumType = frustumType;\n this._frustum = frustum.clone();\n this._origin = Cartesian3.clone(origin);\n this._orientation = Quaternion.clone(orientation);\n this._drawNearPlane = drawNearPlane;\n this._workerName = \"createFrustumOutlineGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n 2 + frustumPackedLength + Cartesian3.packedLength + Quaternion.packedLength;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {FrustumOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nFrustumOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var frustumType = value._frustumType;\n var frustum = value._frustum;\n\n array[startingIndex++] = frustumType;\n\n if (frustumType === PERSPECTIVE) {\n PerspectiveFrustum.pack(frustum, array, startingIndex);\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n OrthographicFrustum.pack(frustum, array, startingIndex);\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n Cartesian3.pack(value._origin, array, startingIndex);\n startingIndex += Cartesian3.packedLength;\n Quaternion.pack(value._orientation, array, startingIndex);\n startingIndex += Quaternion.packedLength;\n array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\n\n return array;\n};\n\nvar scratchPackPerspective = new PerspectiveFrustum();\nvar scratchPackOrthographic = new OrthographicFrustum();\nvar scratchPackQuaternion = new Quaternion();\nvar scratchPackorigin = new Cartesian3();\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {FrustumOutlineGeometry} [result] The object into which to store the result.\n */\nFrustumOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var frustumType = array[startingIndex++];\n\n var frustum;\n if (frustumType === PERSPECTIVE) {\n frustum = PerspectiveFrustum.unpack(\n array,\n startingIndex,\n scratchPackPerspective\n );\n startingIndex += PerspectiveFrustum.packedLength;\n } else {\n frustum = OrthographicFrustum.unpack(\n array,\n startingIndex,\n scratchPackOrthographic\n );\n startingIndex += OrthographicFrustum.packedLength;\n }\n\n var origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\n startingIndex += Cartesian3.packedLength;\n var orientation = Quaternion.unpack(\n array,\n startingIndex,\n scratchPackQuaternion\n );\n startingIndex += Quaternion.packedLength;\n var drawNearPlane = array[startingIndex] === 1.0;\n\n if (!defined(result)) {\n return new FrustumOutlineGeometry({\n frustum: frustum,\n origin: origin,\n orientation: orientation,\n _drawNearPlane: drawNearPlane,\n });\n }\n\n var frustumResult =\n frustumType === result._frustumType ? result._frustum : undefined;\n result._frustum = frustum.clone(frustumResult);\n\n result._frustumType = frustumType;\n result._origin = Cartesian3.clone(origin, result._origin);\n result._orientation = Quaternion.clone(orientation, result._orientation);\n result._drawNearPlane = drawNearPlane;\n\n return result;\n};\n\n/**\n * Computes the geometric representation of a frustum outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {FrustumOutlineGeometry} frustumGeometry A description of the frustum.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nFrustumOutlineGeometry.createGeometry = function (frustumGeometry) {\n var frustumType = frustumGeometry._frustumType;\n var frustum = frustumGeometry._frustum;\n var origin = frustumGeometry._origin;\n var orientation = frustumGeometry._orientation;\n var drawNearPlane = frustumGeometry._drawNearPlane;\n\n var positions = new Float64Array(3 * 4 * 2);\n FrustumGeometry._computeNearFarPlanes(\n origin,\n orientation,\n frustumType,\n frustum,\n positions\n );\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n }),\n });\n\n var offset;\n var index;\n\n var numberOfPlanes = drawNearPlane ? 2 : 1;\n var indices = new Uint16Array(8 * (numberOfPlanes + 1));\n\n // Build the near/far planes\n var i = drawNearPlane ? 0 : 1;\n for (; i < 2; ++i) {\n offset = drawNearPlane ? i * 8 : 0;\n index = i * 4;\n\n indices[offset] = index;\n indices[offset + 1] = index + 1;\n indices[offset + 2] = index + 1;\n indices[offset + 3] = index + 2;\n indices[offset + 4] = index + 2;\n indices[offset + 5] = index + 3;\n indices[offset + 6] = index + 3;\n indices[offset + 7] = index;\n }\n\n // Build the sides of the frustums\n for (i = 0; i < 2; ++i) {\n offset = (numberOfPlanes + i) * 8;\n index = i * 4;\n\n indices[offset] = index;\n indices[offset + 1] = index + 4;\n indices[offset + 2] = index + 1;\n indices[offset + 3] = index + 5;\n indices[offset + 4] = index + 2;\n indices[offset + 5] = index + 6;\n indices[offset + 6] = index + 3;\n indices[offset + 7] = index + 7;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: BoundingSphere.fromVertices(positions),\n });\n};\nexport default FrustumOutlineGeometry;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * @typedef {Object} GeocoderService.Result\n * @property {String} displayName The display name for a location\n * @property {Rectangle|Cartesian3} destination The bounding box for a location\n */\n\n/**\n * Provides geocoding through an external service. This type describes an interface and\n * is not intended to be used.\n * @alias GeocoderService\n * @constructor\n *\n * @see BingMapsGeocoderService\n * @see PeliasGeocoderService\n * @see OpenCageGeocoderService\n */\nfunction GeocoderService() {}\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nGeocoderService.prototype.geocode = DeveloperError.throwInstantiationError;\nexport default GeocoderService;\n","/**\n * The type of geocoding to be performed by a {@link GeocoderService}.\n * @enum {Number}\n * @see Geocoder\n */\nvar GeocodeType = {\n /**\n * Perform a search where the input is considered complete.\n *\n * @type {Number}\n * @constant\n */\n SEARCH: 0,\n\n /**\n * Perform an auto-complete using partial input, typically\n * reserved for providing possible results as a user is typing.\n *\n * @type {Number}\n * @constant\n */\n AUTOCOMPLETE: 1,\n};\nexport default Object.freeze(GeocodeType);\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Base class for all geometry creation utility classes that can be passed to {@link GeometryInstance}\n * for asynchronous geometry creation.\n *\n * @constructor\n * @class\n * @abstract\n */\nfunction GeometryFactory() {\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Returns a geometry.\n *\n * @param {GeometryFactory} geometryFactory A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nGeometryFactory.createGeometry = function (geometryFactory) {\n DeveloperError.throwInstantiationError();\n};\n\nexport default GeometryFactory;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Values and type information for per-instance geometry attributes.\n *\n * @alias GeometryInstanceAttribute\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {ComponentDatatype} options.componentDatatype The datatype of each component in the attribute, e.g., individual elements in values.\n * @param {Number} options.componentsPerAttribute A number between 1 and 4 that defines the number of components in an attributes.\n * @param {Boolean} [options.normalize=false] When <code>true</code> and <code>componentDatatype</code> is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * @param {Number[]} options.value The value for the attribute.\n *\n * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4.\n *\n *\n * @example\n * var instance = new Cesium.GeometryInstance({\n * geometry : Cesium.BoxGeometry.fromDimensions({\n * dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n * }),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n * id : 'box',\n * attributes : {\n * color : new Cesium.GeometryInstanceAttribute({\n * componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n * componentsPerAttribute : 4,\n * normalize : true,\n * value : [255, 255, 0, 255]\n * })\n * }\n * });\n *\n * @see ColorGeometryInstanceAttribute\n * @see ShowGeometryInstanceAttribute\n * @see DistanceDisplayConditionGeometryInstanceAttribute\n */\nfunction GeometryInstanceAttribute(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.componentDatatype)) {\n throw new DeveloperError(\"options.componentDatatype is required.\");\n }\n if (!defined(options.componentsPerAttribute)) {\n throw new DeveloperError(\"options.componentsPerAttribute is required.\");\n }\n if (\n options.componentsPerAttribute < 1 ||\n options.componentsPerAttribute > 4\n ) {\n throw new DeveloperError(\n \"options.componentsPerAttribute must be between 1 and 4.\"\n );\n }\n if (!defined(options.value)) {\n throw new DeveloperError(\"options.value is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link GeometryInstanceAttribute#value}.\n *\n * @type ComponentDatatype\n *\n * @default undefined\n */\n this.componentDatatype = options.componentDatatype;\n\n /**\n * A number between 1 and 4 that defines the number of components in an attributes.\n * For example, a position attribute with x, y, and z components would have 3 as\n * shown in the code example.\n *\n * @type Number\n *\n * @default undefined\n *\n * @example\n * show : new Cesium.GeometryInstanceAttribute({\n * componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n * componentsPerAttribute : 1,\n * normalize : true,\n * value : [1.0]\n * })\n */\n this.componentsPerAttribute = options.componentsPerAttribute;\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * <p>\n * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n *\n * @example\n * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE;\n * attribute.componentsPerAttribute = 4;\n * attribute.normalize = true;\n * attribute.value = [\n * Cesium.Color.floatToByte(color.red),\n * Cesium.Color.floatToByte(color.green),\n * Cesium.Color.floatToByte(color.blue),\n * Cesium.Color.floatToByte(color.alpha)\n * ];\n */\n this.normalize = defaultValue(options.normalize, false);\n\n /**\n * The values for the attributes stored in a typed array. In the code example,\n * every three elements in <code>values</code> defines one attributes since\n * <code>componentsPerAttribute</code> is 3.\n *\n * @type {Number[]}\n *\n * @default undefined\n *\n * @example\n * show : new Cesium.GeometryInstanceAttribute({\n * componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n * componentsPerAttribute : 1,\n * normalize : true,\n * value : [1.0]\n * })\n */\n this.value = options.value;\n}\nexport default GeometryInstanceAttribute;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the last segment of the URI, removing any path or query information.\n * @function getFilenameFromUri\n *\n * @param {String} uri The Uri.\n * @returns {String} The last segment of the Uri.\n *\n * @example\n * //fileName will be\"simple.czml\";\n * var fileName = Cesium.getFilenameFromUri('/Gallery/simple.czml?value=true&example=false');\n */\nfunction getFilenameFromUri(uri) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(uri)) {\n throw new DeveloperError(\"uri is required.\");\n }\n //>>includeEnd('debug');\n\n var uriObject = new Uri(uri);\n uriObject.normalize();\n var path = uriObject.path;\n var index = path.lastIndexOf(\"/\");\n if (index !== -1) {\n path = path.substr(index + 1);\n }\n return path;\n}\nexport default getFilenameFromUri;\n","import defined from \"./defined.js\";\n\nvar context2DsByWidthAndHeight = {};\n\n/**\n * Extract a pixel array from a loaded image. Draws the image\n * into a canvas so it can read the pixels back.\n *\n * @function getImagePixels\n *\n * @param {HTMLImageElement} image The image to extract pixels from.\n * @param {Number} width The width of the image. If not defined, then image.width is assigned.\n * @param {Number} height The height of the image. If not defined, then image.height is assigned.\n * @returns {ImageData} The pixels of the image.\n */\nfunction getImagePixels(image, width, height) {\n if (!defined(width)) {\n width = image.width;\n }\n if (!defined(height)) {\n height = image.height;\n }\n\n var context2DsByHeight = context2DsByWidthAndHeight[width];\n if (!defined(context2DsByHeight)) {\n context2DsByHeight = {};\n context2DsByWidthAndHeight[width] = context2DsByHeight;\n }\n\n var context2d = context2DsByHeight[height];\n if (!defined(context2d)) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n context2d = canvas.getContext(\"2d\");\n context2d.globalCompositeOperation = \"copy\";\n context2DsByHeight[height] = context2d;\n }\n\n context2d.drawImage(image, 0, 0, width, height);\n return context2d.getImageData(0, 0, width, height).data;\n}\nexport default getImagePixels;\n","import defaultValue from \"./defaultValue.js\";\nimport getStringFromTypedArray from \"./getStringFromTypedArray.js\";\n\n/**\n * @private\n */\nfunction getMagic(uint8Array, byteOffset) {\n byteOffset = defaultValue(byteOffset, 0);\n return getStringFromTypedArray(\n uint8Array,\n byteOffset,\n Math.min(4, uint8Array.length)\n );\n}\nexport default getMagic;\n","/**\n * @private\n */\nfunction isBitSet(bits, mask) {\n return (bits & mask) !== 0;\n}\nexport default isBitSet;\n","import defined from \"./defined.js\";\nimport isBitSet from \"./isBitSet.js\";\n\n// Bitmask for checking tile properties\nvar childrenBitmasks = [0x01, 0x02, 0x04, 0x08];\nvar anyChildBitmask = 0x0f;\nvar cacheFlagBitmask = 0x10; // True if there is a child subtree\nvar imageBitmask = 0x40;\nvar terrainBitmask = 0x80;\n\n/**\n * Contains information about each tile from a Google Earth Enterprise server\n *\n * @param {Number} bits Bitmask that contains the type of data and available children for each tile.\n * @param {Number} cnodeVersion Version of the request for subtree metadata.\n * @param {Number} imageryVersion Version of the request for imagery tile.\n * @param {Number} terrainVersion Version of the request for terrain tile.\n * @param {Number} imageryProvider Id of imagery provider.\n * @param {Number} terrainProvider Id of terrain provider.\n *\n * @private\n */\nfunction GoogleEarthEnterpriseTileInformation(\n bits,\n cnodeVersion,\n imageryVersion,\n terrainVersion,\n imageryProvider,\n terrainProvider\n) {\n this._bits = bits;\n this.cnodeVersion = cnodeVersion;\n this.imageryVersion = imageryVersion;\n this.terrainVersion = terrainVersion;\n this.imageryProvider = imageryProvider;\n this.terrainProvider = terrainProvider;\n this.ancestorHasTerrain = false; // Set it later once we find its parent\n this.terrainState = undefined;\n}\n\n/**\n * Creates GoogleEarthEnterpriseTileInformation from an object\n *\n * @param {Object} info Object to be cloned\n * @param {GoogleEarthEnterpriseTileInformation} [result] The object onto which to store the result.\n * @returns {GoogleEarthEnterpriseTileInformation} The modified result parameter or a new GoogleEarthEnterpriseTileInformation instance if none was provided.\n */\nGoogleEarthEnterpriseTileInformation.clone = function (info, result) {\n if (!defined(result)) {\n result = new GoogleEarthEnterpriseTileInformation(\n info._bits,\n info.cnodeVersion,\n info.imageryVersion,\n info.terrainVersion,\n info.imageryProvider,\n info.terrainProvider\n );\n } else {\n result._bits = info._bits;\n result.cnodeVersion = info.cnodeVersion;\n result.imageryVersion = info.imageryVersion;\n result.terrainVersion = info.terrainVersion;\n result.imageryProvider = info.imageryProvider;\n result.terrainProvider = info.terrainProvider;\n }\n result.ancestorHasTerrain = info.ancestorHasTerrain;\n result.terrainState = info.terrainState;\n\n return result;\n};\n\n/**\n * Sets the parent for the tile\n *\n * @param {GoogleEarthEnterpriseTileInformation} parent Parent tile\n */\nGoogleEarthEnterpriseTileInformation.prototype.setParent = function (parent) {\n this.ancestorHasTerrain = parent.ancestorHasTerrain || this.hasTerrain();\n};\n\n/**\n * Gets whether a subtree is available\n *\n * @returns {Boolean} true if subtree is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasSubtree = function () {\n return isBitSet(this._bits, cacheFlagBitmask);\n};\n\n/**\n * Gets whether imagery is available\n *\n * @returns {Boolean} true if imagery is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasImagery = function () {\n return isBitSet(this._bits, imageBitmask);\n};\n\n/**\n * Gets whether terrain is available\n *\n * @returns {Boolean} true if terrain is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasTerrain = function () {\n return isBitSet(this._bits, terrainBitmask);\n};\n\n/**\n * Gets whether any children are present\n *\n * @returns {Boolean} true if any children are available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasChildren = function () {\n return isBitSet(this._bits, anyChildBitmask);\n};\n\n/**\n * Gets whether a specified child is available\n *\n * @param {Number} index Index of child tile\n *\n * @returns {Boolean} true if child is available, false otherwise\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasChild = function (index) {\n return isBitSet(this._bits, childrenBitmasks[index]);\n};\n\n/**\n * Gets bitmask containing children\n *\n * @returns {Number} Children bitmask\n */\nGoogleEarthEnterpriseTileInformation.prototype.getChildBitmask = function () {\n return this._bits & anyChildBitmask;\n};\nexport default GoogleEarthEnterpriseTileInformation;\n","import protobufMinimal from \"../ThirdParty/protobuf-minimal.js\";\nimport when from \"../ThirdParty/when.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport GoogleEarthEnterpriseTileInformation from \"./GoogleEarthEnterpriseTileInformation.js\";\nimport isBitSet from \"./isBitSet.js\";\nimport loadAndExecuteScript from \"./loadAndExecuteScript.js\";\nimport CesiumMath from \"./Math.js\";\nimport Request from \"./Request.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\n\nfunction stringToBuffer(str) {\n var len = str.length;\n var buffer = new ArrayBuffer(len);\n var ui8 = new Uint8Array(buffer);\n for (var i = 0; i < len; ++i) {\n ui8[i] = str.charCodeAt(i);\n }\n\n return buffer;\n}\n\n// Decodes packet with a key that has been around since the beginning of Google Earth Enterprise\nvar defaultKey = stringToBuffer(\n \"\\x45\\xf4\\xbd\\x0b\\x79\\xe2\\x6a\\x45\\x22\\x05\\x92\\x2c\\x17\\xcd\\x06\\x71\\xf8\\x49\\x10\\x46\\x67\\x51\\x00\\x42\\x25\\xc6\\xe8\\x61\\x2c\\x66\\x29\\x08\\xc6\\x34\\xdc\\x6a\\x62\\x25\\x79\\x0a\\x77\\x1d\\x6d\\x69\\xd6\\xf0\\x9c\\x6b\\x93\\xa1\\xbd\\x4e\\x75\\xe0\\x41\\x04\\x5b\\xdf\\x40\\x56\\x0c\\xd9\\xbb\\x72\\x9b\\x81\\x7c\\x10\\x33\\x53\\xee\\x4f\\x6c\\xd4\\x71\\x05\\xb0\\x7b\\xc0\\x7f\\x45\\x03\\x56\\x5a\\xad\\x77\\x55\\x65\\x0b\\x33\\x92\\x2a\\xac\\x19\\x6c\\x35\\x14\\xc5\\x1d\\x30\\x73\\xf8\\x33\\x3e\\x6d\\x46\\x38\\x4a\\xb4\\xdd\\xf0\\x2e\\xdd\\x17\\x75\\x16\\xda\\x8c\\x44\\x74\\x22\\x06\\xfa\\x61\\x22\\x0c\\x33\\x22\\x53\\x6f\\xaf\\x39\\x44\\x0b\\x8c\\x0e\\x39\\xd9\\x39\\x13\\x4c\\xb9\\xbf\\x7f\\xab\\x5c\\x8c\\x50\\x5f\\x9f\\x22\\x75\\x78\\x1f\\xe9\\x07\\x71\\x91\\x68\\x3b\\xc1\\xc4\\x9b\\x7f\\xf0\\x3c\\x56\\x71\\x48\\x82\\x05\\x27\\x55\\x66\\x59\\x4e\\x65\\x1d\\x98\\x75\\xa3\\x61\\x46\\x7d\\x61\\x3f\\x15\\x41\\x00\\x9f\\x14\\x06\\xd7\\xb4\\x34\\x4d\\xce\\x13\\x87\\x46\\xb0\\x1a\\xd5\\x05\\x1c\\xb8\\x8a\\x27\\x7b\\x8b\\xdc\\x2b\\xbb\\x4d\\x67\\x30\\xc8\\xd1\\xf6\\x5c\\x8f\\x50\\xfa\\x5b\\x2f\\x46\\x9b\\x6e\\x35\\x18\\x2f\\x27\\x43\\x2e\\xeb\\x0a\\x0c\\x5e\\x10\\x05\\x10\\xa5\\x73\\x1b\\x65\\x34\\xe5\\x6c\\x2e\\x6a\\x43\\x27\\x63\\x14\\x23\\x55\\xa9\\x3f\\x71\\x7b\\x67\\x43\\x7d\\x3a\\xaf\\xcd\\xe2\\x54\\x55\\x9c\\xfd\\x4b\\xc6\\xe2\\x9f\\x2f\\x28\\xed\\xcb\\x5c\\xc6\\x2d\\x66\\x07\\x88\\xa7\\x3b\\x2f\\x18\\x2a\\x22\\x4e\\x0e\\xb0\\x6b\\x2e\\xdd\\x0d\\x95\\x7d\\x7d\\x47\\xba\\x43\\xb2\\x11\\xb2\\x2b\\x3e\\x4d\\xaa\\x3e\\x7d\\xe6\\xce\\x49\\x89\\xc6\\xe6\\x78\\x0c\\x61\\x31\\x05\\x2d\\x01\\xa4\\x4f\\xa5\\x7e\\x71\\x20\\x88\\xec\\x0d\\x31\\xe8\\x4e\\x0b\\x00\\x6e\\x50\\x68\\x7d\\x17\\x3d\\x08\\x0d\\x17\\x95\\xa6\\x6e\\xa3\\x68\\x97\\x24\\x5b\\x6b\\xf3\\x17\\x23\\xf3\\xb6\\x73\\xb3\\x0d\\x0b\\x40\\xc0\\x9f\\xd8\\x04\\x51\\x5d\\xfa\\x1a\\x17\\x22\\x2e\\x15\\x6a\\xdf\\x49\\x00\\xb9\\xa0\\x77\\x55\\xc6\\xef\\x10\\x6a\\xbf\\x7b\\x47\\x4c\\x7f\\x83\\x17\\x05\\xee\\xdc\\xdc\\x46\\x85\\xa9\\xad\\x53\\x07\\x2b\\x53\\x34\\x06\\x07\\xff\\x14\\x94\\x59\\x19\\x02\\xe4\\x38\\xe8\\x31\\x83\\x4e\\xb9\\x58\\x46\\x6b\\xcb\\x2d\\x23\\x86\\x92\\x70\\x00\\x35\\x88\\x22\\xcf\\x31\\xb2\\x26\\x2f\\xe7\\xc3\\x75\\x2d\\x36\\x2c\\x72\\x74\\xb0\\x23\\x47\\xb7\\xd3\\xd1\\x26\\x16\\x85\\x37\\x72\\xe2\\x00\\x8c\\x44\\xcf\\x10\\xda\\x33\\x2d\\x1a\\xde\\x60\\x86\\x69\\x23\\x69\\x2a\\x7c\\xcd\\x4b\\x51\\x0d\\x95\\x54\\x39\\x77\\x2e\\x29\\xea\\x1b\\xa6\\x50\\xa2\\x6a\\x8f\\x6f\\x50\\x99\\x5c\\x3e\\x54\\xfb\\xef\\x50\\x5b\\x0b\\x07\\x45\\x17\\x89\\x6d\\x28\\x13\\x77\\x37\\x1d\\xdb\\x8e\\x1e\\x4a\\x05\\x66\\x4a\\x6f\\x99\\x20\\xe5\\x70\\xe2\\xb9\\x71\\x7e\\x0c\\x6d\\x49\\x04\\x2d\\x7a\\xfe\\x72\\xc7\\xf2\\x59\\x30\\x8f\\xbb\\x02\\x5d\\x73\\xe5\\xc9\\x20\\xea\\x78\\xec\\x20\\x90\\xf0\\x8a\\x7f\\x42\\x17\\x7c\\x47\\x19\\x60\\xb0\\x16\\xbd\\x26\\xb7\\x71\\xb6\\xc7\\x9f\\x0e\\xd1\\x33\\x82\\x3d\\xd3\\xab\\xee\\x63\\x99\\xc8\\x2b\\x53\\xa0\\x44\\x5c\\x71\\x01\\xc6\\xcc\\x44\\x1f\\x32\\x4f\\x3c\\xca\\xc0\\x29\\x3d\\x52\\xd3\\x61\\x19\\x58\\xa9\\x7d\\x65\\xb4\\xdc\\xcf\\x0d\\xf4\\x3d\\xf1\\x08\\xa9\\x42\\xda\\x23\\x09\\xd8\\xbf\\x5e\\x50\\x49\\xf8\\x4d\\xc0\\xcb\\x47\\x4c\\x1c\\x4f\\xf7\\x7b\\x2b\\xd8\\x16\\x18\\xc5\\x31\\x92\\x3b\\xb5\\x6f\\xdc\\x6c\\x0d\\x92\\x88\\x16\\xd1\\x9e\\xdb\\x3f\\xe2\\xe9\\xda\\x5f\\xd4\\x84\\xe2\\x46\\x61\\x5a\\xde\\x1c\\x55\\xcf\\xa4\\x00\\xbe\\xfd\\xce\\x67\\xf1\\x4a\\x69\\x1c\\x97\\xe6\\x20\\x48\\xd8\\x5d\\x7f\\x7e\\xae\\x71\\x20\\x0e\\x4e\\xae\\xc0\\x56\\xa9\\x91\\x01\\x3c\\x82\\x1d\\x0f\\x72\\xe7\\x76\\xec\\x29\\x49\\xd6\\x5d\\x2d\\x83\\xe3\\xdb\\x36\\x06\\xa9\\x3b\\x66\\x13\\x97\\x87\\x6a\\xd5\\xb6\\x3d\\x50\\x5e\\x52\\xb9\\x4b\\xc7\\x73\\x57\\x78\\xc9\\xf4\\x2e\\x59\\x07\\x95\\x93\\x6f\\xd0\\x4b\\x17\\x57\\x19\\x3e\\x27\\x27\\xc7\\x60\\xdb\\x3b\\xed\\x9a\\x0e\\x53\\x44\\x16\\x3e\\x3f\\x8d\\x92\\x6d\\x77\\xa2\\x0a\\xeb\\x3f\\x52\\xa8\\xc6\\x55\\x5e\\x31\\x49\\x37\\x85\\xf4\\xc5\\x1f\\x26\\x2d\\xa9\\x1c\\xbf\\x8b\\x27\\x54\\xda\\xc3\\x6a\\x20\\xe5\\x2a\\x78\\x04\\xb0\\xd6\\x90\\x70\\x72\\xaa\\x8b\\x68\\xbd\\x88\\xf7\\x02\\x5f\\x48\\xb1\\x7e\\xc0\\x58\\x4c\\x3f\\x66\\x1a\\xf9\\x3e\\xe1\\x65\\xc0\\x70\\xa7\\xcf\\x38\\x69\\xaf\\xf0\\x56\\x6c\\x64\\x49\\x9c\\x27\\xad\\x78\\x74\\x4f\\xc2\\x87\\xde\\x56\\x39\\x00\\xda\\x77\\x0b\\xcb\\x2d\\x1b\\x89\\xfb\\x35\\x4f\\x02\\xf5\\x08\\x51\\x13\\x60\\xc1\\x0a\\x5a\\x47\\x4d\\x26\\x1c\\x33\\x30\\x78\\xda\\xc0\\x9c\\x46\\x47\\xe2\\x5b\\x79\\x60\\x49\\x6e\\x37\\x67\\x53\\x0a\\x3e\\xe9\\xec\\x46\\x39\\xb2\\xf1\\x34\\x0d\\xc6\\x84\\x53\\x75\\x6e\\xe1\\x0c\\x59\\xd9\\x1e\\xde\\x29\\x85\\x10\\x7b\\x49\\x49\\xa5\\x77\\x79\\xbe\\x49\\x56\\x2e\\x36\\xe7\\x0b\\x3a\\xbb\\x4f\\x03\\x62\\x7b\\xd2\\x4d\\x31\\x95\\x2f\\xbd\\x38\\x7b\\xa8\\x4f\\x21\\xe1\\xec\\x46\\x70\\x76\\x95\\x7d\\x29\\x22\\x78\\x88\\x0a\\x90\\xdd\\x9d\\x5c\\xda\\xde\\x19\\x51\\xcf\\xf0\\xfc\\x59\\x52\\x65\\x7c\\x33\\x13\\xdf\\xf3\\x48\\xda\\xbb\\x2a\\x75\\xdb\\x60\\xb2\\x02\\x15\\xd4\\xfc\\x19\\xed\\x1b\\xec\\x7f\\x35\\xa8\\xff\\x28\\x31\\x07\\x2d\\x12\\xc8\\xdc\\x88\\x46\\x7c\\x8a\\x5b\\x22\"\n);\n\n/**\n * Provides metadata using the Google Earth Enterprise REST API. This is used by the GoogleEarthEnterpriseImageryProvider\n * and GoogleEarthEnterpriseTerrainProvider to share metadata requests.\n *\n * @alias GoogleEarthEnterpriseMetadata\n * @constructor\n *\n * @param {Resource|String} resourceOrUrl The url of the Google Earth Enterprise server hosting the imagery\n *\n * @see GoogleEarthEnterpriseImageryProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n *\n */\nfunction GoogleEarthEnterpriseMetadata(resourceOrUrl) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"resourceOrUrl\", resourceOrUrl);\n //>>includeEnd('debug');\n\n var url = resourceOrUrl;\n\n if (typeof url !== \"string\" && !(url instanceof Resource)) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"resourceOrUrl.url\", resourceOrUrl.url);\n //>>includeEnd('debug');\n\n url = resourceOrUrl.url;\n }\n\n var resource = Resource.createIfNeeded(url);\n resource.appendForwardSlash();\n this._resource = resource;\n\n /**\n * True if imagery is available.\n * @type {Boolean}\n * @default true\n */\n this.imageryPresent = true;\n\n /**\n * True if imagery is sent as a protocol buffer, false if sent as plain images. If undefined we will try both.\n * @type {Boolean}\n * @default undefined\n */\n this.protoImagery = undefined;\n\n /**\n * True if terrain is available.\n * @type {Boolean}\n * @default true\n */\n this.terrainPresent = true;\n\n /**\n * Exponent used to compute constant to calculate negative height values.\n * @type {Number}\n * @default 32\n */\n this.negativeAltitudeExponentBias = 32;\n\n /**\n * Threshold where any numbers smaller are actually negative values. They are multiplied by -2^negativeAltitudeExponentBias.\n * @type {Number}\n * @default EPSILON12\n */\n this.negativeAltitudeThreshold = CesiumMath.EPSILON12;\n\n /**\n * Dictionary of provider id to copyright strings.\n * @type {Object}\n * @default {}\n */\n this.providers = {};\n\n /**\n * Key used to decode packets\n * @type {ArrayBuffer}\n */\n this.key = undefined;\n\n this._quadPacketVersion = 1;\n\n this._tileInfo = {};\n this._subtreePromises = {};\n\n var that = this;\n this._readyPromise = requestDbRoot(this)\n .then(function () {\n return that.getQuadTreePacket(\"\", that._quadPacketVersion);\n })\n .then(function () {\n return true;\n })\n .otherwise(function (e) {\n var message =\n \"An error occurred while accessing \" +\n getMetadataResource(that, \"\", 1).url +\n \".\";\n return when.reject(new RuntimeError(message));\n });\n}\n\nObject.defineProperties(GoogleEarthEnterpriseMetadata.prototype, {\n /**\n * Gets the name of the Google Earth Enterprise server.\n * @memberof GoogleEarthEnterpriseMetadata.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * Gets the proxy used for metadata requests.\n * @memberof GoogleEarthEnterpriseMetadata.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the resource used for metadata requests.\n * @memberof GoogleEarthEnterpriseMetadata.prototype\n * @type {Resource}\n * @readonly\n */\n resource: {\n get: function () {\n return this._resource;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the metadata is ready for use.\n * @memberof GoogleEarthEnterpriseMetadata.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n});\n\n/**\n * Converts a tiles (x, y, level) position into a quadkey used to request an image\n * from a Google Earth Enterprise server.\n *\n * @param {Number} x The tile's x coordinate.\n * @param {Number} y The tile's y coordinate.\n * @param {Number} level The tile's zoom level.\n *\n * @see GoogleEarthEnterpriseMetadata#quadKeyToTileXY\n */\nGoogleEarthEnterpriseMetadata.tileXYToQuadKey = function (x, y, level) {\n var quadkey = \"\";\n for (var i = level; i >= 0; --i) {\n var bitmask = 1 << i;\n var digit = 0;\n\n // Tile Layout\n // ___ ___\n //| | |\n //| 3 | 2 |\n //|-------|\n //| 0 | 1 |\n //|___|___|\n //\n\n if (!isBitSet(y, bitmask)) {\n // Top Row\n digit |= 2;\n if (!isBitSet(x, bitmask)) {\n // Right to left\n digit |= 1;\n }\n } else if (isBitSet(x, bitmask)) {\n // Left to right\n digit |= 1;\n }\n\n quadkey += digit;\n }\n return quadkey;\n};\n\n/**\n * Converts a tile's quadkey used to request an image from a Google Earth Enterprise server into the\n * (x, y, level) position.\n *\n * @param {String} quadkey The tile's quad key\n *\n * @see GoogleEarthEnterpriseMetadata#tileXYToQuadKey\n */\nGoogleEarthEnterpriseMetadata.quadKeyToTileXY = function (quadkey) {\n var x = 0;\n var y = 0;\n var level = quadkey.length - 1;\n for (var i = level; i >= 0; --i) {\n var bitmask = 1 << i;\n var digit = +quadkey[level - i];\n\n if (isBitSet(digit, 2)) {\n // Top Row\n if (!isBitSet(digit, 1)) {\n // // Right to left\n x |= bitmask;\n }\n } else {\n y |= bitmask;\n if (isBitSet(digit, 1)) {\n // Left to right\n x |= bitmask;\n }\n }\n }\n return {\n x: x,\n y: y,\n level: level,\n };\n};\n\nGoogleEarthEnterpriseMetadata.prototype.isValid = function (quadKey) {\n var info = this.getTileInformationFromQuadKey(quadKey);\n if (defined(info)) {\n return info !== null;\n }\n\n var valid = true;\n var q = quadKey;\n var last;\n while (q.length > 1) {\n last = q.substring(q.length - 1);\n q = q.substring(0, q.length - 1);\n info = this.getTileInformationFromQuadKey(q);\n if (defined(info)) {\n if (!info.hasSubtree() && !info.hasChild(parseInt(last))) {\n // We have no subtree or child available at some point in this node's ancestry\n valid = false;\n }\n\n break;\n } else if (info === null) {\n // Some node in the ancestry was loaded and said there wasn't a subtree\n valid = false;\n break;\n }\n }\n\n return valid;\n};\n\nvar taskProcessor = new TaskProcessor(\n \"decodeGoogleEarthEnterprisePacket\",\n Number.POSITIVE_INFINITY\n);\n\n/**\n * Retrieves a Google Earth Enterprise quadtree packet.\n *\n * @param {String} [quadKey=''] The quadkey to retrieve the packet for.\n * @param {Number} [version=1] The cnode version to be used in the request.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket = function (\n quadKey,\n version,\n request\n) {\n version = defaultValue(version, 1);\n quadKey = defaultValue(quadKey, \"\");\n var resource = getMetadataResource(this, quadKey, version, request);\n\n var promise = resource.fetchArrayBuffer();\n\n if (!defined(promise)) {\n return undefined; // Throttled\n }\n\n var tileInfo = this._tileInfo;\n var key = this.key;\n return promise.then(function (metadata) {\n var decodePromise = taskProcessor.scheduleTask(\n {\n buffer: metadata,\n quadKey: quadKey,\n type: \"Metadata\",\n key: key,\n },\n [metadata]\n );\n\n return decodePromise.then(function (result) {\n var root;\n var topLevelKeyLength = -1;\n if (quadKey !== \"\") {\n // Root tile has no data except children bits, so put them into the tile info\n topLevelKeyLength = quadKey.length + 1;\n var top = result[quadKey];\n root = tileInfo[quadKey];\n root._bits |= top._bits;\n\n delete result[quadKey];\n }\n\n // Copy the resulting objects into tileInfo\n // Make sure we start with shorter quadkeys first, so we know the parents have\n // already been processed. Otherwise we can lose ancestorHasTerrain along the way.\n var keys = Object.keys(result);\n keys.sort(function (a, b) {\n return a.length - b.length;\n });\n var keysLength = keys.length;\n for (var i = 0; i < keysLength; ++i) {\n var key = keys[i];\n var r = result[key];\n if (r !== null) {\n var info = GoogleEarthEnterpriseTileInformation.clone(result[key]);\n var keyLength = key.length;\n if (keyLength === topLevelKeyLength) {\n info.setParent(root);\n } else if (keyLength > 1) {\n var parent = tileInfo[key.substring(0, key.length - 1)];\n info.setParent(parent);\n }\n tileInfo[key] = info;\n } else {\n tileInfo[key] = null;\n }\n }\n });\n });\n};\n\n/**\n * Populates the metadata subtree down to the specified tile.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<GoogleEarthEnterpriseTileInformation>} A promise that resolves to the tile info for the requested quad key\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.populateSubtree = function (\n x,\n y,\n level,\n request\n) {\n var quadkey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n return populateSubtree(this, quadkey, request);\n};\n\nfunction populateSubtree(that, quadKey, request) {\n var tileInfo = that._tileInfo;\n var q = quadKey;\n var t = tileInfo[q];\n // If we have tileInfo make sure sure it is not a node with a subtree that's not loaded\n if (defined(t) && (!t.hasSubtree() || t.hasChildren())) {\n return t;\n }\n\n while (t === undefined && q.length > 1) {\n q = q.substring(0, q.length - 1);\n t = tileInfo[q];\n }\n\n var subtreeRequest;\n var subtreePromises = that._subtreePromises;\n var promise = subtreePromises[q];\n if (defined(promise)) {\n return promise.then(function () {\n // Recursively call this in case we need multiple subtree requests\n subtreeRequest = new Request({\n throttle: request.throttle,\n throttleByServer: request.throttleByServer,\n type: request.type,\n priorityFunction: request.priorityFunction,\n });\n return populateSubtree(that, quadKey, subtreeRequest);\n });\n }\n\n // t is either\n // null so one of its parents was a leaf node, so this tile doesn't exist\n // exists but doesn't have a subtree to request\n // undefined so no parent exists - this shouldn't ever happen once the provider is ready\n if (!defined(t) || !t.hasSubtree()) {\n return when.reject(\n new RuntimeError(\"Couldn't load metadata for tile \" + quadKey)\n );\n }\n\n // We need to split up the promise here because when will execute syncronously if getQuadTreePacket\n // is already resolved (like in the tests), so subtreePromises will never get cleared out.\n // Only the initial request will also remove the promise from subtreePromises.\n promise = that.getQuadTreePacket(q, t.cnodeVersion, request);\n if (!defined(promise)) {\n return undefined;\n }\n subtreePromises[q] = promise;\n\n return promise\n .then(function () {\n // Recursively call this in case we need multiple subtree requests\n subtreeRequest = new Request({\n throttle: request.throttle,\n throttleByServer: request.throttleByServer,\n type: request.type,\n priorityFunction: request.priorityFunction,\n });\n return populateSubtree(that, quadKey, subtreeRequest);\n })\n .always(function () {\n delete subtreePromises[q];\n });\n}\n\n/**\n * Gets information about a tile\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @returns {GoogleEarthEnterpriseTileInformation|undefined} Information about the tile or undefined if it isn't loaded.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getTileInformation = function (\n x,\n y,\n level\n) {\n var quadkey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n return this._tileInfo[quadkey];\n};\n\n/**\n * Gets information about a tile from a quadKey\n *\n * @param {String} quadkey The quadkey for the tile\n * @returns {GoogleEarthEnterpriseTileInformation|undefined} Information about the tile or undefined if it isn't loaded.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getTileInformationFromQuadKey = function (\n quadkey\n) {\n return this._tileInfo[quadkey];\n};\n\nfunction getMetadataResource(that, quadKey, version, request) {\n return that._resource.getDerivedResource({\n url: \"flatfile?q2-0\" + quadKey + \"-q.\" + version.toString(),\n request: request,\n });\n}\n\nvar dbrootParser;\nvar dbrootParserPromise;\nfunction requestDbRoot(that) {\n var resource = that._resource.getDerivedResource({\n url: \"dbRoot.v5\",\n queryParameters: {\n output: \"proto\",\n },\n });\n\n if (!defined(dbrootParserPromise)) {\n var url = buildModuleUrl(\"ThirdParty/google-earth-dbroot-parser.js\");\n var oldValue = window.cesiumGoogleEarthDbRootParser;\n dbrootParserPromise = loadAndExecuteScript(url).then(function () {\n dbrootParser = window.cesiumGoogleEarthDbRootParser(protobufMinimal);\n if (defined(oldValue)) {\n window.cesiumGoogleEarthDbRootParser = oldValue;\n } else {\n delete window.cesiumGoogleEarthDbRootParser;\n }\n });\n }\n\n return dbrootParserPromise\n .then(function () {\n return resource.fetchArrayBuffer();\n })\n .then(function (buf) {\n var encryptedDbRootProto = dbrootParser.EncryptedDbRootProto.decode(\n new Uint8Array(buf)\n );\n\n var byteArray = encryptedDbRootProto.encryptionData;\n var offset = byteArray.byteOffset;\n var end = offset + byteArray.byteLength;\n var key = (that.key = byteArray.buffer.slice(offset, end));\n\n byteArray = encryptedDbRootProto.dbrootData;\n offset = byteArray.byteOffset;\n end = offset + byteArray.byteLength;\n var dbRootCompressed = byteArray.buffer.slice(offset, end);\n return taskProcessor.scheduleTask(\n {\n buffer: dbRootCompressed,\n type: \"DbRoot\",\n key: key,\n },\n [dbRootCompressed]\n );\n })\n .then(function (result) {\n var dbRoot = dbrootParser.DbRootProto.decode(\n new Uint8Array(result.buffer)\n );\n that.imageryPresent = defaultValue(\n dbRoot.imageryPresent,\n that.imageryPresent\n );\n that.protoImagery = dbRoot.protoImagery;\n that.terrainPresent = defaultValue(\n dbRoot.terrainPresent,\n that.terrainPresent\n );\n if (defined(dbRoot.endSnippet) && defined(dbRoot.endSnippet.model)) {\n var model = dbRoot.endSnippet.model;\n that.negativeAltitudeExponentBias = defaultValue(\n model.negativeAltitudeExponentBias,\n that.negativeAltitudeExponentBias\n );\n that.negativeAltitudeThreshold = defaultValue(\n model.compressedNegativeAltitudeThreshold,\n that.negativeAltitudeThreshold\n );\n }\n if (defined(dbRoot.databaseVersion)) {\n that._quadPacketVersion = defaultValue(\n dbRoot.databaseVersion.quadtreeVersion,\n that._quadPacketVersion\n );\n }\n var providers = that.providers;\n var providerInfo = defaultValue(dbRoot.providerInfo, []);\n var count = providerInfo.length;\n for (var i = 0; i < count; ++i) {\n var provider = providerInfo[i];\n var copyrightString = provider.copyrightString;\n if (defined(copyrightString)) {\n providers[provider.providerId] = new Credit(copyrightString.value);\n }\n }\n })\n .otherwise(function () {\n // Just eat the error and use the default values.\n console.log(\"Failed to retrieve \" + resource.url + \". Using defaults.\");\n that.key = defaultKey;\n });\n}\nexport default GoogleEarthEnterpriseMetadata;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersections2D from \"./Intersections2D.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport QuantizedMeshTerrainData from \"./QuantizedMeshTerrainData.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\n\n/**\n * Terrain data for a single tile from a Google Earth Enterprise server.\n *\n * @alias GoogleEarthEnterpriseTerrainData\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {ArrayBuffer} options.buffer The buffer containing terrain data.\n * @param {Number} options.negativeAltitudeExponentBias Multiplier for negative terrain heights that are encoded as very small positive values.\n * @param {Number} options.negativeElevationThreshold Threshold for negative values\n * @param {Number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n * If a child's bit is set, geometry will be requested for that tile as well when it\n * is needed. If the bit is cleared, the child tile is not requested and geometry is\n * instead upsampled from the parent. The bit values are as follows:\n * <table>\n * <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n * <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n * <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n * <tr><td>2</td><td>4</td><td>Northeast</td></tr>\n * <tr><td>3</td><td>8</td><td>Northwest</td></tr>\n * </table>\n * @param {Boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n * otherwise, false.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n *\n *\n * @example\n * var buffer = ...\n * var childTileMask = ...\n * var terrainData = new Cesium.GoogleEarthEnterpriseTerrainData({\n * buffer : heightBuffer,\n * childTileMask : childTileMask\n * });\n *\n * @see TerrainData\n * @see HeightmapTerrainData\n * @see QuantizedMeshTerrainData\n */\nfunction GoogleEarthEnterpriseTerrainData(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.buffer\", options.buffer);\n Check.typeOf.number(\n \"options.negativeAltitudeExponentBias\",\n options.negativeAltitudeExponentBias\n );\n Check.typeOf.number(\n \"options.negativeElevationThreshold\",\n options.negativeElevationThreshold\n );\n //>>includeEnd('debug');\n\n this._buffer = options.buffer;\n this._credits = options.credits;\n this._negativeAltitudeExponentBias = options.negativeAltitudeExponentBias;\n this._negativeElevationThreshold = options.negativeElevationThreshold;\n\n // Convert from google layout to layout of other providers\n // 3 2 -> 2 3\n // 0 1 -> 0 1\n var googleChildTileMask = defaultValue(options.childTileMask, 15);\n var childTileMask = googleChildTileMask & 3; // Bottom row is identical\n childTileMask |= googleChildTileMask & 4 ? 8 : 0; // NE\n childTileMask |= googleChildTileMask & 8 ? 4 : 0; // NW\n\n this._childTileMask = childTileMask;\n\n this._createdByUpsampling = defaultValue(options.createdByUpsampling, false);\n\n this._skirtHeight = undefined;\n this._bufferType = this._buffer.constructor;\n this._mesh = undefined;\n this._minimumHeight = undefined;\n this._maximumHeight = undefined;\n}\n\nObject.defineProperties(GoogleEarthEnterpriseTerrainData.prototype, {\n /**\n * An array of credits for this tile\n * @memberof GoogleEarthEnterpriseTerrainData.prototype\n * @type {Credit[]}\n */\n credits: {\n get: function () {\n return this._credits;\n },\n },\n /**\n * The water mask included in this terrain data, if any. A water mask is a rectangular\n * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @memberof GoogleEarthEnterpriseTerrainData.prototype\n * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement}\n */\n waterMask: {\n get: function () {\n return undefined;\n },\n },\n});\n\nvar taskProcessor = new TaskProcessor(\n \"createVerticesFromGoogleEarthEnterpriseBuffer\"\n);\n\nvar nativeRectangleScratch = new Rectangle();\nvar rectangleScratch = new Rectangle();\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme to which this tile belongs.\n * @param {Number} x The X coordinate of the tile for which to create the terrain data.\n * @param {Number} y The Y coordinate of the tile for which to create the terrain data.\n * @param {Number} level The level of the tile for which to create the terrain data.\n * @param {Number} [exaggeration=1.0] The scale used to exaggerate the terrain.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n * asynchronous mesh creations are already in progress and the operation should\n * be retried later.\n */\nGoogleEarthEnterpriseTerrainData.prototype.createMesh = function (\n tilingScheme,\n x,\n y,\n level,\n exaggeration\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"tilingScheme\", tilingScheme);\n Check.typeOf.number(\"x\", x);\n Check.typeOf.number(\"y\", y);\n Check.typeOf.number(\"level\", level);\n //>>includeEnd('debug');\n\n var ellipsoid = tilingScheme.ellipsoid;\n tilingScheme.tileXYToNativeRectangle(x, y, level, nativeRectangleScratch);\n tilingScheme.tileXYToRectangle(x, y, level, rectangleScratch);\n exaggeration = defaultValue(exaggeration, 1.0);\n\n // Compute the center of the tile for RTC rendering.\n var center = ellipsoid.cartographicToCartesian(\n Rectangle.center(rectangleScratch)\n );\n\n var levelZeroMaxError = 40075.16; // From Google's Doc\n var thisLevelMaxError = levelZeroMaxError / (1 << level);\n this._skirtHeight = Math.min(thisLevelMaxError * 8.0, 1000.0);\n\n var verticesPromise = taskProcessor.scheduleTask({\n buffer: this._buffer,\n nativeRectangle: nativeRectangleScratch,\n rectangle: rectangleScratch,\n relativeToCenter: center,\n ellipsoid: ellipsoid,\n skirtHeight: this._skirtHeight,\n exaggeration: exaggeration,\n includeWebMercatorT: true,\n negativeAltitudeExponentBias: this._negativeAltitudeExponentBias,\n negativeElevationThreshold: this._negativeElevationThreshold,\n });\n\n if (!defined(verticesPromise)) {\n // Postponed\n return undefined;\n }\n\n var that = this;\n return verticesPromise.then(function (result) {\n // Clone complex result objects because the transfer from the web worker\n // has stripped them down to JSON-style objects.\n that._mesh = new TerrainMesh(\n center,\n new Float32Array(result.vertices),\n new Uint16Array(result.indices),\n result.indexCountWithoutSkirts,\n result.vertexCountWithoutSkirts,\n result.minimumHeight,\n result.maximumHeight,\n BoundingSphere.clone(result.boundingSphere3D),\n Cartesian3.clone(result.occludeePointInScaledSpace),\n result.numberOfAttributes,\n OrientedBoundingBox.clone(result.orientedBoundingBox),\n TerrainEncoding.clone(result.encoding),\n exaggeration,\n result.westIndicesSouthToNorth,\n result.southIndicesEastToWest,\n result.eastIndicesNorthToSouth,\n result.northIndicesWestToEast\n );\n\n that._minimumHeight = result.minimumHeight;\n that._maximumHeight = result.maximumHeight;\n\n // Free memory received from server after mesh is created.\n that._buffer = undefined;\n return that._mesh;\n });\n};\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {Number} longitude The longitude in radians.\n * @param {Number} latitude The latitude in radians.\n * @returns {Number} The terrain height at the specified position. If the position\n * is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n * incorrect for positions far outside the rectangle.\n */\nGoogleEarthEnterpriseTerrainData.prototype.interpolateHeight = function (\n rectangle,\n longitude,\n latitude\n) {\n var u = CesiumMath.clamp(\n (longitude - rectangle.west) / rectangle.width,\n 0.0,\n 1.0\n );\n var v = CesiumMath.clamp(\n (latitude - rectangle.south) / rectangle.height,\n 0.0,\n 1.0\n );\n\n if (!defined(this._mesh)) {\n return interpolateHeight(this, u, v, rectangle);\n }\n\n return interpolateMeshHeight(this, u, v);\n};\n\nvar upsampleTaskProcessor = new TaskProcessor(\"upsampleQuantizedTerrainMesh\");\n\n/**\n * Upsamples this terrain data for use by a descendant tile. The resulting instance will contain a subset of the\n * height samples in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {Number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {Number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {Number} thisLevel The level of this tile in the tiling scheme.\n * @param {Number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<HeightmapTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n * or undefined if too many asynchronous upsample operations are in progress and the request has been\n * deferred.\n */\nGoogleEarthEnterpriseTerrainData.prototype.upsample = function (\n tilingScheme,\n thisX,\n thisY,\n thisLevel,\n descendantX,\n descendantY,\n descendantLevel\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"tilingScheme\", tilingScheme);\n Check.typeOf.number(\"thisX\", thisX);\n Check.typeOf.number(\"thisY\", thisY);\n Check.typeOf.number(\"thisLevel\", thisLevel);\n Check.typeOf.number(\"descendantX\", descendantX);\n Check.typeOf.number(\"descendantY\", descendantY);\n Check.typeOf.number(\"descendantLevel\", descendantLevel);\n var levelDifference = descendantLevel - thisLevel;\n if (levelDifference > 1) {\n throw new DeveloperError(\n \"Upsampling through more than one level at a time is not currently supported.\"\n );\n }\n //>>includeEnd('debug');\n\n var mesh = this._mesh;\n if (!defined(this._mesh)) {\n return undefined;\n }\n\n var isEastChild = thisX * 2 !== descendantX;\n var isNorthChild = thisY * 2 === descendantY;\n\n var ellipsoid = tilingScheme.ellipsoid;\n var childRectangle = tilingScheme.tileXYToRectangle(\n descendantX,\n descendantY,\n descendantLevel\n );\n\n var upsamplePromise = upsampleTaskProcessor.scheduleTask({\n vertices: mesh.vertices,\n indices: mesh.indices,\n indexCountWithoutSkirts: mesh.indexCountWithoutSkirts,\n vertexCountWithoutSkirts: mesh.vertexCountWithoutSkirts,\n encoding: mesh.encoding,\n minimumHeight: this._minimumHeight,\n maximumHeight: this._maximumHeight,\n isEastChild: isEastChild,\n isNorthChild: isNorthChild,\n childRectangle: childRectangle,\n ellipsoid: ellipsoid,\n exaggeration: mesh.exaggeration,\n });\n\n if (!defined(upsamplePromise)) {\n // Postponed\n return undefined;\n }\n\n var that = this;\n return upsamplePromise.then(function (result) {\n var quantizedVertices = new Uint16Array(result.vertices);\n var indicesTypedArray = IndexDatatype.createTypedArray(\n quantizedVertices.length / 3,\n result.indices\n );\n\n var skirtHeight = that._skirtHeight;\n\n // Use QuantizedMeshTerrainData since we have what we need already parsed\n return new QuantizedMeshTerrainData({\n quantizedVertices: quantizedVertices,\n indices: indicesTypedArray,\n minimumHeight: result.minimumHeight,\n maximumHeight: result.maximumHeight,\n boundingSphere: BoundingSphere.clone(result.boundingSphere),\n orientedBoundingBox: OrientedBoundingBox.clone(\n result.orientedBoundingBox\n ),\n horizonOcclusionPoint: Cartesian3.clone(result.horizonOcclusionPoint),\n westIndices: result.westIndices,\n southIndices: result.southIndices,\n eastIndices: result.eastIndices,\n northIndices: result.northIndices,\n westSkirtHeight: skirtHeight,\n southSkirtHeight: skirtHeight,\n eastSkirtHeight: skirtHeight,\n northSkirtHeight: skirtHeight,\n childTileMask: 0,\n createdByUpsampling: true,\n credits: that._credits,\n });\n });\n};\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link HeightmapTerrainData.childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {Number} thisX The tile X coordinate of this (the parent) tile.\n * @param {Number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {Number} childX The tile X coordinate of the child tile to check for availability.\n * @param {Number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {Boolean} True if the child tile is available; otherwise, false.\n */\nGoogleEarthEnterpriseTerrainData.prototype.isChildAvailable = function (\n thisX,\n thisY,\n childX,\n childY\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"thisX\", thisX);\n Check.typeOf.number(\"thisY\", thisY);\n Check.typeOf.number(\"childX\", childX);\n Check.typeOf.number(\"childY\", childY);\n //>>includeEnd('debug');\n\n var bitNumber = 2; // northwest child\n if (childX !== thisX * 2) {\n ++bitNumber; // east child\n }\n if (childY !== thisY * 2) {\n bitNumber -= 2; // south child\n }\n\n return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {Boolean} True if this instance was created by upsampling; otherwise, false.\n */\nGoogleEarthEnterpriseTerrainData.prototype.wasCreatedByUpsampling = function () {\n return this._createdByUpsampling;\n};\n\nvar texCoordScratch0 = new Cartesian2();\nvar texCoordScratch1 = new Cartesian2();\nvar texCoordScratch2 = new Cartesian2();\nvar barycentricCoordinateScratch = new Cartesian3();\n\nfunction interpolateMeshHeight(terrainData, u, v) {\n var mesh = terrainData._mesh;\n var vertices = mesh.vertices;\n var encoding = mesh.encoding;\n var indices = mesh.indices;\n\n for (var i = 0, len = indices.length; i < len; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var uv0 = encoding.decodeTextureCoordinates(vertices, i0, texCoordScratch0);\n var uv1 = encoding.decodeTextureCoordinates(vertices, i1, texCoordScratch1);\n var uv2 = encoding.decodeTextureCoordinates(vertices, i2, texCoordScratch2);\n\n var barycentric = Intersections2D.computeBarycentricCoordinates(\n u,\n v,\n uv0.x,\n uv0.y,\n uv1.x,\n uv1.y,\n uv2.x,\n uv2.y,\n barycentricCoordinateScratch\n );\n if (\n barycentric.x >= -1e-15 &&\n barycentric.y >= -1e-15 &&\n barycentric.z >= -1e-15\n ) {\n var h0 = encoding.decodeHeight(vertices, i0);\n var h1 = encoding.decodeHeight(vertices, i1);\n var h2 = encoding.decodeHeight(vertices, i2);\n return barycentric.x * h0 + barycentric.y * h1 + barycentric.z * h2;\n }\n }\n\n // Position does not lie in any triangle in this mesh.\n return undefined;\n}\n\nvar sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT;\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\nvar sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT;\nvar sizeOfFloat = Float32Array.BYTES_PER_ELEMENT;\nvar sizeOfDouble = Float64Array.BYTES_PER_ELEMENT;\n\nfunction interpolateHeight(terrainData, u, v, rectangle) {\n var buffer = terrainData._buffer;\n var quad = 0; // SW\n var uStart = 0.0;\n var vStart = 0.0;\n if (v > 0.5) {\n // Upper row\n if (u > 0.5) {\n // NE\n quad = 2;\n uStart = 0.5;\n } else {\n // NW\n quad = 3;\n }\n vStart = 0.5;\n } else if (u > 0.5) {\n // SE\n quad = 1;\n uStart = 0.5;\n }\n\n var dv = new DataView(buffer);\n var offset = 0;\n for (var q = 0; q < quad; ++q) {\n offset += dv.getUint32(offset, true);\n offset += sizeOfUint32;\n }\n offset += sizeOfUint32; // Skip length of quad\n offset += 2 * sizeOfDouble; // Skip origin\n\n // Read sizes\n var xSize = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n offset += sizeOfDouble;\n var ySize = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n offset += sizeOfDouble;\n\n // Samples per quad\n var xScale = rectangle.width / xSize / 2;\n var yScale = rectangle.height / ySize / 2;\n\n // Number of points\n var numPoints = dv.getInt32(offset, true);\n offset += sizeOfInt32;\n\n // Number of faces\n var numIndices = dv.getInt32(offset, true) * 3;\n offset += sizeOfInt32;\n\n offset += sizeOfInt32; // Skip Level\n\n var uBuffer = new Array(numPoints);\n var vBuffer = new Array(numPoints);\n var heights = new Array(numPoints);\n var i;\n for (i = 0; i < numPoints; ++i) {\n uBuffer[i] = uStart + dv.getUint8(offset++) * xScale;\n vBuffer[i] = vStart + dv.getUint8(offset++) * yScale;\n\n // Height is stored in units of (1/EarthRadius) or (1/6371010.0)\n heights[i] = dv.getFloat32(offset, true) * 6371010.0;\n offset += sizeOfFloat;\n }\n\n var indices = new Array(numIndices);\n for (i = 0; i < numIndices; ++i) {\n indices[i] = dv.getUint16(offset, true);\n offset += sizeOfUint16;\n }\n\n for (i = 0; i < numIndices; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var u0 = uBuffer[i0];\n var u1 = uBuffer[i1];\n var u2 = uBuffer[i2];\n\n var v0 = vBuffer[i0];\n var v1 = vBuffer[i1];\n var v2 = vBuffer[i2];\n\n var barycentric = Intersections2D.computeBarycentricCoordinates(\n u,\n v,\n u0,\n v0,\n u1,\n v1,\n u2,\n v2,\n barycentricCoordinateScratch\n );\n if (\n barycentric.x >= -1e-15 &&\n barycentric.y >= -1e-15 &&\n barycentric.z >= -1e-15\n ) {\n return (\n barycentric.x * heights[i0] +\n barycentric.y * heights[i1] +\n barycentric.z * heights[i2]\n );\n }\n }\n\n // Position does not lie in any triangle in this mesh.\n return undefined;\n}\nexport default GoogleEarthEnterpriseTerrainData;\n","import when from \"../ThirdParty/when.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport GoogleEarthEnterpriseMetadata from \"./GoogleEarthEnterpriseMetadata.js\";\nimport GoogleEarthEnterpriseTerrainData from \"./GoogleEarthEnterpriseTerrainData.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Request from \"./Request.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TileProviderError from \"./TileProviderError.js\";\n\nvar TerrainState = {\n UNKNOWN: 0,\n NONE: 1,\n SELF: 2,\n PARENT: 3,\n};\n\nvar julianDateScratch = new JulianDate();\n\nfunction TerrainCache() {\n this._terrainCache = {};\n this._lastTidy = JulianDate.now();\n}\n\nTerrainCache.prototype.add = function (quadKey, buffer) {\n this._terrainCache[quadKey] = {\n buffer: buffer,\n timestamp: JulianDate.now(),\n };\n};\n\nTerrainCache.prototype.get = function (quadKey) {\n var terrainCache = this._terrainCache;\n var result = terrainCache[quadKey];\n if (defined(result)) {\n delete this._terrainCache[quadKey];\n return result.buffer;\n }\n};\n\nTerrainCache.prototype.tidy = function () {\n JulianDate.now(julianDateScratch);\n if (JulianDate.secondsDifference(julianDateScratch, this._lastTidy) > 10) {\n var terrainCache = this._terrainCache;\n var keys = Object.keys(terrainCache);\n var count = keys.length;\n for (var i = 0; i < count; ++i) {\n var k = keys[i];\n var e = terrainCache[k];\n if (JulianDate.secondsDifference(julianDateScratch, e.timestamp) > 10) {\n delete terrainCache[k];\n }\n }\n\n JulianDate.clone(julianDateScratch, this._lastTidy);\n }\n};\n\n/**\n * Provides tiled terrain using the Google Earth Enterprise REST API.\n *\n * @alias GoogleEarthEnterpriseTerrainProvider\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String} options.url The url of the Google Earth Enterprise server hosting the imagery.\n * @param {GoogleEarthEnterpriseMetadata} options.metadata A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseImageryProvider.\n * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @see GoogleEarthEnterpriseImageryProvider\n * @see CesiumTerrainProvider\n *\n * @example\n * var geeMetadata = new GoogleEarthEnterpriseMetadata('http://www.earthenterprise.org/3d');\n * var gee = new Cesium.GoogleEarthEnterpriseTerrainProvider({\n * metadata : geeMetadata\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseTerrainProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!(defined(options.url) || defined(options.metadata))) {\n throw new DeveloperError(\"options.url or options.metadata is required.\");\n }\n //>>includeEnd('debug');\n\n var metadata;\n if (defined(options.metadata)) {\n metadata = options.metadata;\n } else {\n var resource = Resource.createIfNeeded(options.url);\n metadata = new GoogleEarthEnterpriseMetadata(resource);\n }\n\n this._metadata = metadata;\n this._tilingScheme = new GeographicTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 2,\n rectangle: new Rectangle(\n -CesiumMath.PI,\n -CesiumMath.PI,\n CesiumMath.PI,\n CesiumMath.PI\n ),\n ellipsoid: options.ellipsoid,\n });\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n // Pulled from Google's documentation\n this._levelZeroMaximumGeometricError = 40075.16;\n\n this._terrainCache = new TerrainCache();\n this._terrainPromises = {};\n this._terrainRequests = {};\n\n this._errorEvent = new Event();\n\n this._ready = false;\n var that = this;\n var metadataError;\n this._readyPromise = metadata.readyPromise\n .then(function (result) {\n if (!metadata.terrainPresent) {\n var e = new RuntimeError(\n \"The server \" + metadata.url + \" doesn't have terrain\"\n );\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n e.message,\n undefined,\n undefined,\n undefined,\n e\n );\n return when.reject(e);\n }\n\n TileProviderError.handleSuccess(metadataError);\n that._ready = result;\n return result;\n })\n .otherwise(function (e) {\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n e.message,\n undefined,\n undefined,\n undefined,\n e\n );\n return when.reject(e);\n });\n}\n\nObject.defineProperties(GoogleEarthEnterpriseTerrainProvider.prototype, {\n /**\n * Gets the name of the Google Earth Enterprise server url hosting the imagery.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._metadata.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._metadata.proxy;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Boolean}\n */\n hasWaterMask: {\n get: function () {\n return false;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {Boolean}\n */\n hasVertexNormals: {\n get: function () {\n return false;\n },\n },\n\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: function () {\n return undefined;\n },\n },\n});\n\nvar taskProcessor = new TaskProcessor(\n \"decodeGoogleEarthEnterprisePacket\",\n Number.POSITIVE_INFINITY\n);\n\n// If the tile has its own terrain, then you can just use its child bitmask. If it was requested using it's parent\n// then you need to check all of its children to see if they have terrain.\nfunction computeChildMask(quadKey, info, metadata) {\n var childMask = info.getChildBitmask();\n if (info.terrainState === TerrainState.PARENT) {\n childMask = 0;\n for (var i = 0; i < 4; ++i) {\n var child = metadata.getTileInformationFromQuadKey(\n quadKey + i.toString()\n );\n if (defined(child) && child.hasTerrain()) {\n childMask |= 1 << i;\n }\n }\n }\n\n return childMask;\n}\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link GoogleEarthEnterpriseTerrainProvider#ready} returns true. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n *\n * @exception {DeveloperError} This function must not be called before {@link GoogleEarthEnterpriseTerrainProvider#ready}\n * returns true.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.requestTileGeometry = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug)\n if (!this._ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before the terrain provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n var terrainCache = this._terrainCache;\n var metadata = this._metadata;\n var info = metadata.getTileInformationFromQuadKey(quadKey);\n\n // Check if this tile is even possibly available\n if (!defined(info)) {\n return when.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n }\n\n var terrainState = info.terrainState;\n if (!defined(terrainState)) {\n // First time we have tried to load this tile, so set terrain state to UNKNOWN\n terrainState = info.terrainState = TerrainState.UNKNOWN;\n }\n\n // If its in the cache, return it\n var buffer = terrainCache.get(quadKey);\n if (defined(buffer)) {\n var credit = metadata.providers[info.terrainProvider];\n return when.resolve(\n new GoogleEarthEnterpriseTerrainData({\n buffer: buffer,\n childTileMask: computeChildMask(quadKey, info, metadata),\n credits: defined(credit) ? [credit] : undefined,\n negativeAltitudeExponentBias: metadata.negativeAltitudeExponentBias,\n negativeElevationThreshold: metadata.negativeAltitudeThreshold,\n })\n );\n }\n\n // Clean up the cache\n terrainCache.tidy();\n\n // We have a tile, check to see if no ancestors have terrain or that we know for sure it doesn't\n if (!info.ancestorHasTerrain) {\n // We haven't reached a level with terrain, so return the ellipsoid\n return when.resolve(\n new HeightmapTerrainData({\n buffer: new Uint8Array(16 * 16),\n width: 16,\n height: 16,\n })\n );\n } else if (terrainState === TerrainState.NONE) {\n // Already have info and there isn't any terrain here\n return when.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n }\n\n // Figure out where we are getting the terrain and what version\n var parentInfo;\n var q = quadKey;\n var terrainVersion = -1;\n switch (terrainState) {\n case TerrainState.SELF: // We have terrain and have retrieved it before\n terrainVersion = info.terrainVersion;\n break;\n case TerrainState.PARENT: // We have terrain in our parent\n q = q.substring(0, q.length - 1);\n parentInfo = metadata.getTileInformationFromQuadKey(q);\n terrainVersion = parentInfo.terrainVersion;\n break;\n case TerrainState.UNKNOWN: // We haven't tried to retrieve terrain yet\n if (info.hasTerrain()) {\n terrainVersion = info.terrainVersion; // We should have terrain\n } else {\n q = q.substring(0, q.length - 1);\n parentInfo = metadata.getTileInformationFromQuadKey(q);\n if (defined(parentInfo) && parentInfo.hasTerrain()) {\n terrainVersion = parentInfo.terrainVersion; // Try checking in the parent\n }\n }\n break;\n }\n\n // We can't figure out where to get the terrain\n if (terrainVersion < 0) {\n return when.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n }\n\n // Load that terrain\n var terrainPromises = this._terrainPromises;\n var terrainRequests = this._terrainRequests;\n var sharedPromise;\n var sharedRequest;\n if (defined(terrainPromises[q])) {\n // Already being loaded possibly from another child, so return existing promise\n sharedPromise = terrainPromises[q];\n sharedRequest = terrainRequests[q];\n } else {\n // Create new request for terrain\n sharedRequest = request;\n var requestPromise = buildTerrainResource(\n this,\n q,\n terrainVersion,\n sharedRequest\n ).fetchArrayBuffer();\n\n if (!defined(requestPromise)) {\n return undefined; // Throttled\n }\n\n sharedPromise = requestPromise.then(function (terrain) {\n if (defined(terrain)) {\n return taskProcessor\n .scheduleTask(\n {\n buffer: terrain,\n type: \"Terrain\",\n key: metadata.key,\n },\n [terrain]\n )\n .then(function (terrainTiles) {\n // Add requested tile and mark it as SELF\n var requestedInfo = metadata.getTileInformationFromQuadKey(q);\n requestedInfo.terrainState = TerrainState.SELF;\n terrainCache.add(q, terrainTiles[0]);\n var provider = requestedInfo.terrainProvider;\n\n // Add children to cache\n var count = terrainTiles.length - 1;\n for (var j = 0; j < count; ++j) {\n var childKey = q + j.toString();\n var child = metadata.getTileInformationFromQuadKey(childKey);\n if (defined(child)) {\n terrainCache.add(childKey, terrainTiles[j + 1]);\n child.terrainState = TerrainState.PARENT;\n if (child.terrainProvider === 0) {\n child.terrainProvider = provider;\n }\n }\n }\n });\n }\n\n return when.reject(new RuntimeError(\"Failed to load terrain.\"));\n });\n\n terrainPromises[q] = sharedPromise; // Store promise without delete from terrainPromises\n terrainRequests[q] = sharedRequest;\n\n // Set promise so we remove from terrainPromises just one time\n sharedPromise = sharedPromise.always(function () {\n delete terrainPromises[q];\n delete terrainRequests[q];\n });\n }\n\n return sharedPromise\n .then(function () {\n var buffer = terrainCache.get(quadKey);\n if (defined(buffer)) {\n var credit = metadata.providers[info.terrainProvider];\n return new GoogleEarthEnterpriseTerrainData({\n buffer: buffer,\n childTileMask: computeChildMask(quadKey, info, metadata),\n credits: defined(credit) ? [credit] : undefined,\n negativeAltitudeExponentBias: metadata.negativeAltitudeExponentBias,\n negativeElevationThreshold: metadata.negativeAltitudeThreshold,\n });\n }\n\n return when.reject(new RuntimeError(\"Failed to load terrain.\"));\n })\n .otherwise(function (error) {\n if (sharedRequest.state === RequestState.CANCELLED) {\n request.state = sharedRequest.state;\n return when.reject(error);\n }\n info.terrainState = TerrainState.NONE;\n return when.reject(error);\n });\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported, otherwise true or false.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.getTileDataAvailable = function (\n x,\n y,\n level\n) {\n var metadata = this._metadata;\n var quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n\n var info = metadata.getTileInformation(x, y, level);\n if (info === null) {\n return false;\n }\n\n if (defined(info)) {\n if (!info.ancestorHasTerrain) {\n return true; // We'll just return the ellipsoid\n }\n\n var terrainState = info.terrainState;\n if (terrainState === TerrainState.NONE) {\n return false; // Terrain is not available\n }\n\n if (!defined(terrainState) || terrainState === TerrainState.UNKNOWN) {\n info.terrainState = TerrainState.UNKNOWN;\n if (!info.hasTerrain()) {\n quadKey = quadKey.substring(0, quadKey.length - 1);\n var parentInfo = metadata.getTileInformationFromQuadKey(quadKey);\n if (!defined(parentInfo) || !parentInfo.hasTerrain()) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n if (metadata.isValid(quadKey)) {\n // We will need this tile, so request metadata and return false for now\n var request = new Request({\n throttle: true,\n throttleByServer: true,\n type: RequestType.TERRAIN,\n });\n metadata.populateSubtree(x, y, level, request);\n }\n return false;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.loadTileDataAvailability = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n//\n// Functions to handle imagery packets\n//\nfunction buildTerrainResource(terrainProvider, quadKey, version, request) {\n version = defined(version) && version > 0 ? version : 1;\n return terrainProvider._metadata.resource.getDerivedResource({\n url: \"flatfile?f1c-0\" + quadKey + \"-t.\" + version.toString(),\n request: request,\n });\n}\nexport default GoogleEarthEnterpriseTerrainProvider;\n","import ApproximateTerrainHeights from \"./ApproximateTerrainHeights.js\";\nimport ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Plane from \"./Plane.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\nvar PROJECTIONS = [GeographicProjection, WebMercatorProjection];\nvar PROJECTION_COUNT = PROJECTIONS.length;\n\nvar MITER_BREAK_SMALL = Math.cos(CesiumMath.toRadians(30.0));\nvar MITER_BREAK_LARGE = Math.cos(CesiumMath.toRadians(150.0));\n\n// Initial heights for constructing the wall.\n// Keeping WALL_INITIAL_MIN_HEIGHT near the ellipsoid surface helps\n// prevent precision problems with planes in the shader.\n// Putting the start point of a plane at ApproximateTerrainHeights._defaultMinTerrainHeight,\n// which is a highly conservative bound, usually puts the plane origin several thousands\n// of meters away from the actual terrain, causing floating point problems when checking\n// fragments on terrain against the plane.\n// Ellipsoid height is generally much closer.\n// The initial max height is arbitrary.\n// Both heights are corrected using ApproximateTerrainHeights for computing the actual volume geometry.\nvar WALL_INITIAL_MIN_HEIGHT = 0.0;\nvar WALL_INITIAL_MAX_HEIGHT = 1000.0;\n\n/**\n * A description of a polyline on terrain or 3D Tiles. Only to be used with {@link GroundPolylinePrimitive}.\n *\n * @alias GroundPolylineGeometry\n * @constructor\n *\n * @param {Object} options Options with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the polyline's points. Heights above the ellipsoid will be ignored.\n * @param {Number} [options.width=1.0] The screen space width in pixels.\n * @param {Number} [options.granularity=9999.0] The distance interval in meters used for interpolating options.points. Defaults to 9999.0 meters. Zero indicates no interpolation.\n * @param {Boolean} [options.loop=false] Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n *\n * @exception {DeveloperError} At least two positions are required.\n *\n * @see GroundPolylinePrimitive\n *\n * @example\n * var positions = Cesium.Cartesian3.fromDegreesArray([\n * -112.1340164450331, 36.05494287836128,\n * -112.08821010582645, 36.097804071380715,\n * -112.13296079730024, 36.168769146801104\n * ]);\n *\n * var geometry = new Cesium.GroundPolylineGeometry({\n * positions : positions\n * });\n */\nfunction GroundPolylineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions) || positions.length < 2) {\n throw new DeveloperError(\"At least two positions are required.\");\n }\n if (\n defined(options.arcType) &&\n options.arcType !== ArcType.GEODESIC &&\n options.arcType !== ArcType.RHUMB\n ) {\n throw new DeveloperError(\n \"Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB.\"\n );\n }\n //>>includeEnd('debug');\n\n /**\n * The screen space width in pixels.\n * @type {Number}\n */\n this.width = defaultValue(options.width, 1.0); // Doesn't get packed, not necessary for computing geometry.\n\n this._positions = positions;\n\n /**\n * The distance interval used for interpolating options.points. Zero indicates no interpolation.\n * Default of 9999.0 allows centimeter accuracy with 32 bit floating point.\n * @type {Boolean}\n * @default 9999.0\n */\n this.granularity = defaultValue(options.granularity, 9999.0);\n\n /**\n * Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\n * If the geometry has two positions this parameter will be ignored.\n * @type {Boolean}\n * @default false\n */\n this.loop = defaultValue(options.loop, false);\n\n /**\n * The type of path the polyline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @type {ArcType}\n * @default ArcType.GEODESIC\n */\n this.arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n\n this._ellipsoid = Ellipsoid.WGS84;\n\n // MapProjections can't be packed, so store the index to a known MapProjection.\n this._projectionIndex = 0;\n this._workerName = \"createGroundPolylineGeometry\";\n\n // Used by GroundPolylinePrimitive to signal worker that scenemode is 3D only.\n this._scene3DOnly = false;\n}\n\nObject.defineProperties(GroundPolylineGeometry.prototype, {\n /**\n * The number of elements used to pack the object into an array.\n * @memberof GroundPolylineGeometry.prototype\n * @type {Number}\n * @readonly\n * @private\n */\n packedLength: {\n get: function () {\n return (\n 1.0 +\n this._positions.length * 3 +\n 1.0 +\n 1.0 +\n 1.0 +\n Ellipsoid.packedLength +\n 1.0 +\n 1.0\n );\n },\n },\n});\n\n/**\n * Set the GroundPolylineGeometry's projection and ellipsoid.\n * Used by GroundPolylinePrimitive to signal scene information to the geometry for generating 2D attributes.\n *\n * @param {GroundPolylineGeometry} groundPolylineGeometry GroundPolylinGeometry describing a polyline on terrain or 3D Tiles.\n * @param {Projection} mapProjection A MapProjection used for projecting cartographic coordinates to 2D.\n * @private\n */\nGroundPolylineGeometry.setProjectionAndEllipsoid = function (\n groundPolylineGeometry,\n mapProjection\n) {\n var projectionIndex = 0;\n for (var i = 0; i < PROJECTION_COUNT; i++) {\n if (mapProjection instanceof PROJECTIONS[i]) {\n projectionIndex = i;\n break;\n }\n }\n\n groundPolylineGeometry._projectionIndex = projectionIndex;\n groundPolylineGeometry._ellipsoid = mapProjection.ellipsoid;\n};\n\nvar cart3Scratch1 = new Cartesian3();\nvar cart3Scratch2 = new Cartesian3();\nvar cart3Scratch3 = new Cartesian3();\nfunction computeRightNormal(start, end, maxHeight, ellipsoid, result) {\n var startBottom = getPosition(ellipsoid, start, 0.0, cart3Scratch1);\n var startTop = getPosition(ellipsoid, start, maxHeight, cart3Scratch2);\n var endBottom = getPosition(ellipsoid, end, 0.0, cart3Scratch3);\n\n var up = direction(startTop, startBottom, cart3Scratch2);\n var forward = direction(endBottom, startBottom, cart3Scratch3);\n\n Cartesian3.cross(forward, up, result);\n return Cartesian3.normalize(result, result);\n}\n\nvar interpolatedCartographicScratch = new Cartographic();\nvar interpolatedBottomScratch = new Cartesian3();\nvar interpolatedTopScratch = new Cartesian3();\nvar interpolatedNormalScratch = new Cartesian3();\nfunction interpolateSegment(\n start,\n end,\n minHeight,\n maxHeight,\n granularity,\n arcType,\n ellipsoid,\n normalsArray,\n bottomPositionsArray,\n topPositionsArray,\n cartographicsArray\n) {\n if (granularity === 0.0) {\n return;\n }\n\n var ellipsoidLine;\n if (arcType === ArcType.GEODESIC) {\n ellipsoidLine = new EllipsoidGeodesic(start, end, ellipsoid);\n } else if (arcType === ArcType.RHUMB) {\n ellipsoidLine = new EllipsoidRhumbLine(start, end, ellipsoid);\n }\n\n var surfaceDistance = ellipsoidLine.surfaceDistance;\n if (surfaceDistance < granularity) {\n return;\n }\n\n // Compute rightwards normal applicable at all interpolated points\n var interpolatedNormal = computeRightNormal(\n start,\n end,\n maxHeight,\n ellipsoid,\n interpolatedNormalScratch\n );\n\n var segments = Math.ceil(surfaceDistance / granularity);\n var interpointDistance = surfaceDistance / segments;\n var distanceFromStart = interpointDistance;\n var pointsToAdd = segments - 1;\n var packIndex = normalsArray.length;\n for (var i = 0; i < pointsToAdd; i++) {\n var interpolatedCartographic = ellipsoidLine.interpolateUsingSurfaceDistance(\n distanceFromStart,\n interpolatedCartographicScratch\n );\n var interpolatedBottom = getPosition(\n ellipsoid,\n interpolatedCartographic,\n minHeight,\n interpolatedBottomScratch\n );\n var interpolatedTop = getPosition(\n ellipsoid,\n interpolatedCartographic,\n maxHeight,\n interpolatedTopScratch\n );\n\n Cartesian3.pack(interpolatedNormal, normalsArray, packIndex);\n Cartesian3.pack(interpolatedBottom, bottomPositionsArray, packIndex);\n Cartesian3.pack(interpolatedTop, topPositionsArray, packIndex);\n cartographicsArray.push(interpolatedCartographic.latitude);\n cartographicsArray.push(interpolatedCartographic.longitude);\n\n packIndex += 3;\n distanceFromStart += interpointDistance;\n }\n}\n\nvar heightlessCartographicScratch = new Cartographic();\nfunction getPosition(ellipsoid, cartographic, height, result) {\n Cartographic.clone(cartographic, heightlessCartographicScratch);\n heightlessCartographicScratch.height = height;\n return Cartographic.toCartesian(\n heightlessCartographicScratch,\n ellipsoid,\n result\n );\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nGroundPolylineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n var index = defaultValue(startingIndex, 0);\n\n var positions = value._positions;\n var positionsLength = positions.length;\n\n array[index++] = positionsLength;\n\n for (var i = 0; i < positionsLength; ++i) {\n var cartesian = positions[i];\n Cartesian3.pack(cartesian, array, index);\n index += 3;\n }\n\n array[index++] = value.granularity;\n array[index++] = value.loop ? 1.0 : 0.0;\n array[index++] = value.arcType;\n\n Ellipsoid.pack(value._ellipsoid, array, index);\n index += Ellipsoid.packedLength;\n\n array[index++] = value._projectionIndex;\n array[index++] = value._scene3DOnly ? 1.0 : 0.0;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonGeometry} [result] The object into which to store the result.\n */\nGroundPolylineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n var index = defaultValue(startingIndex, 0);\n var positionsLength = array[index++];\n var positions = new Array(positionsLength);\n\n for (var i = 0; i < positionsLength; i++) {\n positions[i] = Cartesian3.unpack(array, index);\n index += 3;\n }\n\n var granularity = array[index++];\n var loop = array[index++] === 1.0;\n var arcType = array[index++];\n\n var ellipsoid = Ellipsoid.unpack(array, index);\n index += Ellipsoid.packedLength;\n\n var projectionIndex = array[index++];\n var scene3DOnly = array[index++] === 1.0;\n\n if (!defined(result)) {\n result = new GroundPolylineGeometry({\n positions: positions,\n });\n }\n\n result._positions = positions;\n result.granularity = granularity;\n result.loop = loop;\n result.arcType = arcType;\n result._ellipsoid = ellipsoid;\n result._projectionIndex = projectionIndex;\n result._scene3DOnly = scene3DOnly;\n\n return result;\n};\n\nfunction direction(target, origin, result) {\n Cartesian3.subtract(target, origin, result);\n Cartesian3.normalize(result, result);\n return result;\n}\n\nfunction tangentDirection(target, origin, up, result) {\n result = direction(target, origin, result);\n\n // orthogonalize\n result = Cartesian3.cross(result, up, result);\n result = Cartesian3.normalize(result, result);\n result = Cartesian3.cross(up, result, result);\n return result;\n}\n\nvar toPreviousScratch = new Cartesian3();\nvar toNextScratch = new Cartesian3();\nvar forwardScratch = new Cartesian3();\nvar vertexUpScratch = new Cartesian3();\nvar cosine90 = 0.0;\nvar cosine180 = -1.0;\nfunction computeVertexMiterNormal(\n previousBottom,\n vertexBottom,\n vertexTop,\n nextBottom,\n result\n) {\n var up = direction(vertexTop, vertexBottom, vertexUpScratch);\n\n // Compute vectors pointing towards neighboring points but tangent to this point on the ellipsoid\n var toPrevious = tangentDirection(\n previousBottom,\n vertexBottom,\n up,\n toPreviousScratch\n );\n var toNext = tangentDirection(nextBottom, vertexBottom, up, toNextScratch);\n\n // Check if tangents are almost opposite - if so, no need to miter.\n if (\n CesiumMath.equalsEpsilon(\n Cartesian3.dot(toPrevious, toNext),\n cosine180,\n CesiumMath.EPSILON5\n )\n ) {\n result = Cartesian3.cross(up, toPrevious, result);\n result = Cartesian3.normalize(result, result);\n return result;\n }\n\n // Average directions to previous and to next in the plane of Up\n result = Cartesian3.add(toNext, toPrevious, result);\n result = Cartesian3.normalize(result, result);\n\n // Flip the normal if it isn't pointing roughly bound right (aka if forward is pointing more \"backwards\")\n var forward = Cartesian3.cross(up, result, forwardScratch);\n if (Cartesian3.dot(toNext, forward) < cosine90) {\n result = Cartesian3.negate(result, result);\n }\n\n return result;\n}\n\nvar XZ_PLANE = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\n\nvar previousBottomScratch = new Cartesian3();\nvar vertexBottomScratch = new Cartesian3();\nvar vertexTopScratch = new Cartesian3();\nvar nextBottomScratch = new Cartesian3();\nvar vertexNormalScratch = new Cartesian3();\nvar intersectionScratch = new Cartesian3();\nvar cartographicScratch0 = new Cartographic();\nvar cartographicScratch1 = new Cartographic();\nvar cartographicIntersectionScratch = new Cartographic();\n/**\n * Computes shadow volumes for the ground polyline, consisting of its vertices, indices, and a bounding sphere.\n * Vertices are \"fat,\" packing all the data needed in each volume to describe a line on terrain or 3D Tiles.\n * Should not be called independent of {@link GroundPolylinePrimitive}.\n *\n * @param {GroundPolylineGeometry} groundPolylineGeometry\n * @private\n */\nGroundPolylineGeometry.createGeometry = function (groundPolylineGeometry) {\n var compute2dAttributes = !groundPolylineGeometry._scene3DOnly;\n var loop = groundPolylineGeometry.loop;\n var ellipsoid = groundPolylineGeometry._ellipsoid;\n var granularity = groundPolylineGeometry.granularity;\n var arcType = groundPolylineGeometry.arcType;\n var projection = new PROJECTIONS[groundPolylineGeometry._projectionIndex](\n ellipsoid\n );\n\n var minHeight = WALL_INITIAL_MIN_HEIGHT;\n var maxHeight = WALL_INITIAL_MAX_HEIGHT;\n\n var index;\n var i;\n\n var positions = groundPolylineGeometry._positions;\n var positionsLength = positions.length;\n\n if (positionsLength === 2) {\n loop = false;\n }\n\n // Split positions across the IDL and the Prime Meridian as well.\n // Split across prime meridian because very large geometries crossing the Prime Meridian but not the IDL\n // may get split by the plane of IDL + Prime Meridian.\n var p0;\n var p1;\n var c0;\n var c1;\n var rhumbLine = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n var intersection;\n var intersectionCartographic;\n var intersectionLongitude;\n var splitPositions = [positions[0]];\n for (i = 0; i < positionsLength - 1; i++) {\n p0 = positions[i];\n p1 = positions[i + 1];\n intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p1,\n XZ_PLANE,\n intersectionScratch\n );\n if (\n defined(intersection) &&\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n ) {\n if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\n splitPositions.push(Cartesian3.clone(intersection));\n } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\n intersectionLongitude = ellipsoid.cartesianToCartographic(\n intersection,\n cartographicScratch0\n ).longitude;\n c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\n c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\n rhumbLine.setEndPoints(c0, c1);\n intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\n intersectionLongitude,\n cartographicIntersectionScratch\n );\n intersection = ellipsoid.cartographicToCartesian(\n intersectionCartographic,\n intersectionScratch\n );\n if (\n defined(intersection) &&\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n ) {\n splitPositions.push(Cartesian3.clone(intersection));\n }\n }\n }\n splitPositions.push(p1);\n }\n\n if (loop) {\n p0 = positions[positionsLength - 1];\n p1 = positions[0];\n intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p1,\n XZ_PLANE,\n intersectionScratch\n );\n if (\n defined(intersection) &&\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n ) {\n if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\n splitPositions.push(Cartesian3.clone(intersection));\n } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\n intersectionLongitude = ellipsoid.cartesianToCartographic(\n intersection,\n cartographicScratch0\n ).longitude;\n c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\n c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\n rhumbLine.setEndPoints(c0, c1);\n intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\n intersectionLongitude,\n cartographicIntersectionScratch\n );\n intersection = ellipsoid.cartographicToCartesian(\n intersectionCartographic,\n intersectionScratch\n );\n if (\n defined(intersection) &&\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n ) {\n splitPositions.push(Cartesian3.clone(intersection));\n }\n }\n }\n }\n var cartographicsLength = splitPositions.length;\n\n var cartographics = new Array(cartographicsLength);\n for (i = 0; i < cartographicsLength; i++) {\n var cartographic = Cartographic.fromCartesian(splitPositions[i], ellipsoid);\n cartographic.height = 0.0;\n cartographics[i] = cartographic;\n }\n\n cartographics = arrayRemoveDuplicates(\n cartographics,\n Cartographic.equalsEpsilon\n );\n cartographicsLength = cartographics.length;\n\n if (cartographicsLength < 2) {\n return undefined;\n }\n\n /**** Build heap-side arrays for positions, interpolated cartographics, and normals from which to compute vertices ****/\n // We build a \"wall\" and then decompose it into separately connected component \"volumes\" because we need a lot\n // of information about the wall. Also, this simplifies interpolation.\n // Convention: \"next\" and \"end\" are locally forward to each segment of the wall,\n // and we are computing normals pointing towards the local right side of the vertices in each segment.\n var cartographicsArray = [];\n var normalsArray = [];\n var bottomPositionsArray = [];\n var topPositionsArray = [];\n\n var previousBottom = previousBottomScratch;\n var vertexBottom = vertexBottomScratch;\n var vertexTop = vertexTopScratch;\n var nextBottom = nextBottomScratch;\n var vertexNormal = vertexNormalScratch;\n\n // First point - either loop or attach a \"perpendicular\" normal\n var startCartographic = cartographics[0];\n var nextCartographic = cartographics[1];\n\n var prestartCartographic = cartographics[cartographicsLength - 1];\n previousBottom = getPosition(\n ellipsoid,\n prestartCartographic,\n minHeight,\n previousBottom\n );\n nextBottom = getPosition(ellipsoid, nextCartographic, minHeight, nextBottom);\n vertexBottom = getPosition(\n ellipsoid,\n startCartographic,\n minHeight,\n vertexBottom\n );\n vertexTop = getPosition(ellipsoid, startCartographic, maxHeight, vertexTop);\n\n if (loop) {\n vertexNormal = computeVertexMiterNormal(\n previousBottom,\n vertexBottom,\n vertexTop,\n nextBottom,\n vertexNormal\n );\n } else {\n vertexNormal = computeRightNormal(\n startCartographic,\n nextCartographic,\n maxHeight,\n ellipsoid,\n vertexNormal\n );\n }\n\n Cartesian3.pack(vertexNormal, normalsArray, 0);\n Cartesian3.pack(vertexBottom, bottomPositionsArray, 0);\n Cartesian3.pack(vertexTop, topPositionsArray, 0);\n cartographicsArray.push(startCartographic.latitude);\n cartographicsArray.push(startCartographic.longitude);\n\n interpolateSegment(\n startCartographic,\n nextCartographic,\n minHeight,\n maxHeight,\n granularity,\n arcType,\n ellipsoid,\n normalsArray,\n bottomPositionsArray,\n topPositionsArray,\n cartographicsArray\n );\n\n // All inbetween points\n for (i = 1; i < cartographicsLength - 1; ++i) {\n previousBottom = Cartesian3.clone(vertexBottom, previousBottom);\n vertexBottom = Cartesian3.clone(nextBottom, vertexBottom);\n var vertexCartographic = cartographics[i];\n getPosition(ellipsoid, vertexCartographic, maxHeight, vertexTop);\n getPosition(ellipsoid, cartographics[i + 1], minHeight, nextBottom);\n\n computeVertexMiterNormal(\n previousBottom,\n vertexBottom,\n vertexTop,\n nextBottom,\n vertexNormal\n );\n\n index = normalsArray.length;\n Cartesian3.pack(vertexNormal, normalsArray, index);\n Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\n Cartesian3.pack(vertexTop, topPositionsArray, index);\n cartographicsArray.push(vertexCartographic.latitude);\n cartographicsArray.push(vertexCartographic.longitude);\n\n interpolateSegment(\n cartographics[i],\n cartographics[i + 1],\n minHeight,\n maxHeight,\n granularity,\n arcType,\n ellipsoid,\n normalsArray,\n bottomPositionsArray,\n topPositionsArray,\n cartographicsArray\n );\n }\n\n // Last point - either loop or attach a normal \"perpendicular\" to the wall.\n var endCartographic = cartographics[cartographicsLength - 1];\n var preEndCartographic = cartographics[cartographicsLength - 2];\n\n vertexBottom = getPosition(\n ellipsoid,\n endCartographic,\n minHeight,\n vertexBottom\n );\n vertexTop = getPosition(ellipsoid, endCartographic, maxHeight, vertexTop);\n\n if (loop) {\n var postEndCartographic = cartographics[0];\n previousBottom = getPosition(\n ellipsoid,\n preEndCartographic,\n minHeight,\n previousBottom\n );\n nextBottom = getPosition(\n ellipsoid,\n postEndCartographic,\n minHeight,\n nextBottom\n );\n\n vertexNormal = computeVertexMiterNormal(\n previousBottom,\n vertexBottom,\n vertexTop,\n nextBottom,\n vertexNormal\n );\n } else {\n vertexNormal = computeRightNormal(\n preEndCartographic,\n endCartographic,\n maxHeight,\n ellipsoid,\n vertexNormal\n );\n }\n\n index = normalsArray.length;\n Cartesian3.pack(vertexNormal, normalsArray, index);\n Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\n Cartesian3.pack(vertexTop, topPositionsArray, index);\n cartographicsArray.push(endCartographic.latitude);\n cartographicsArray.push(endCartographic.longitude);\n\n if (loop) {\n interpolateSegment(\n endCartographic,\n startCartographic,\n minHeight,\n maxHeight,\n granularity,\n arcType,\n ellipsoid,\n normalsArray,\n bottomPositionsArray,\n topPositionsArray,\n cartographicsArray\n );\n index = normalsArray.length;\n for (i = 0; i < 3; ++i) {\n normalsArray[index + i] = normalsArray[i];\n bottomPositionsArray[index + i] = bottomPositionsArray[i];\n topPositionsArray[index + i] = topPositionsArray[i];\n }\n cartographicsArray.push(startCartographic.latitude);\n cartographicsArray.push(startCartographic.longitude);\n }\n\n return generateGeometryAttributes(\n loop,\n projection,\n bottomPositionsArray,\n topPositionsArray,\n normalsArray,\n cartographicsArray,\n compute2dAttributes\n );\n};\n\n// If the end normal angle is too steep compared to the direction of the line segment,\n// \"break\" the miter by rotating the normal 90 degrees around the \"up\" direction at the point\n// For ultra precision we would want to project into a plane, but in practice this is sufficient.\nvar lineDirectionScratch = new Cartesian3();\nvar matrix3Scratch = new Matrix3();\nvar quaternionScratch = new Quaternion();\nfunction breakMiter(endGeometryNormal, startBottom, endBottom, endTop) {\n var lineDirection = direction(endBottom, startBottom, lineDirectionScratch);\n\n var dot = Cartesian3.dot(lineDirection, endGeometryNormal);\n if (dot > MITER_BREAK_SMALL || dot < MITER_BREAK_LARGE) {\n var vertexUp = direction(endTop, endBottom, vertexUpScratch);\n var angle =\n dot < MITER_BREAK_LARGE\n ? CesiumMath.PI_OVER_TWO\n : -CesiumMath.PI_OVER_TWO;\n var quaternion = Quaternion.fromAxisAngle(\n vertexUp,\n angle,\n quaternionScratch\n );\n var rotationMatrix = Matrix3.fromQuaternion(quaternion, matrix3Scratch);\n Matrix3.multiplyByVector(\n rotationMatrix,\n endGeometryNormal,\n endGeometryNormal\n );\n return true;\n }\n return false;\n}\n\nvar endPosCartographicScratch = new Cartographic();\nvar normalStartpointScratch = new Cartesian3();\nvar normalEndpointScratch = new Cartesian3();\nfunction projectNormal(\n projection,\n cartographic,\n normal,\n projectedPosition,\n result\n) {\n var position = Cartographic.toCartesian(\n cartographic,\n projection._ellipsoid,\n normalStartpointScratch\n );\n var normalEndpoint = Cartesian3.add(position, normal, normalEndpointScratch);\n var flipNormal = false;\n\n var ellipsoid = projection._ellipsoid;\n var normalEndpointCartographic = ellipsoid.cartesianToCartographic(\n normalEndpoint,\n endPosCartographicScratch\n );\n // If normal crosses the IDL, go the other way and flip the result.\n // In practice this almost never happens because the cartographic start\n // and end points of each segment are \"nudged\" to be on the same side\n // of the IDL and slightly away from the IDL.\n if (\n Math.abs(cartographic.longitude - normalEndpointCartographic.longitude) >\n CesiumMath.PI_OVER_TWO\n ) {\n flipNormal = true;\n normalEndpoint = Cartesian3.subtract(\n position,\n normal,\n normalEndpointScratch\n );\n normalEndpointCartographic = ellipsoid.cartesianToCartographic(\n normalEndpoint,\n endPosCartographicScratch\n );\n }\n\n normalEndpointCartographic.height = 0.0;\n var normalEndpointProjected = projection.project(\n normalEndpointCartographic,\n result\n );\n result = Cartesian3.subtract(\n normalEndpointProjected,\n projectedPosition,\n result\n );\n result.z = 0.0;\n result = Cartesian3.normalize(result, result);\n if (flipNormal) {\n Cartesian3.negate(result, result);\n }\n return result;\n}\n\nvar adjustHeightNormalScratch = new Cartesian3();\nvar adjustHeightOffsetScratch = new Cartesian3();\nfunction adjustHeights(\n bottom,\n top,\n minHeight,\n maxHeight,\n adjustHeightBottom,\n adjustHeightTop\n) {\n // bottom and top should be at WALL_INITIAL_MIN_HEIGHT and WALL_INITIAL_MAX_HEIGHT, respectively\n var adjustHeightNormal = Cartesian3.subtract(\n top,\n bottom,\n adjustHeightNormalScratch\n );\n Cartesian3.normalize(adjustHeightNormal, adjustHeightNormal);\n\n var distanceForBottom = minHeight - WALL_INITIAL_MIN_HEIGHT;\n var adjustHeightOffset = Cartesian3.multiplyByScalar(\n adjustHeightNormal,\n distanceForBottom,\n adjustHeightOffsetScratch\n );\n Cartesian3.add(bottom, adjustHeightOffset, adjustHeightBottom);\n\n var distanceForTop = maxHeight - WALL_INITIAL_MAX_HEIGHT;\n adjustHeightOffset = Cartesian3.multiplyByScalar(\n adjustHeightNormal,\n distanceForTop,\n adjustHeightOffsetScratch\n );\n Cartesian3.add(top, adjustHeightOffset, adjustHeightTop);\n}\n\nvar nudgeDirectionScratch = new Cartesian3();\nfunction nudgeXZ(start, end) {\n var startToXZdistance = Plane.getPointDistance(XZ_PLANE, start);\n var endToXZdistance = Plane.getPointDistance(XZ_PLANE, end);\n var offset = nudgeDirectionScratch;\n // Larger epsilon than what's used in GeometryPipeline, a centimeter in world space\n if (CesiumMath.equalsEpsilon(startToXZdistance, 0.0, CesiumMath.EPSILON2)) {\n offset = direction(end, start, offset);\n Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\n Cartesian3.add(start, offset, start);\n } else if (\n CesiumMath.equalsEpsilon(endToXZdistance, 0.0, CesiumMath.EPSILON2)\n ) {\n offset = direction(start, end, offset);\n Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\n Cartesian3.add(end, offset, end);\n }\n}\n\n// \"Nudge\" cartographic coordinates so start and end are on the same side of the IDL.\n// Nudge amounts are tiny, basically just an IDL flip.\n// Only used for 2D/CV.\nfunction nudgeCartographic(start, end) {\n var absStartLon = Math.abs(start.longitude);\n var absEndLon = Math.abs(end.longitude);\n if (\n CesiumMath.equalsEpsilon(absStartLon, CesiumMath.PI, CesiumMath.EPSILON11)\n ) {\n var endSign = CesiumMath.sign(end.longitude);\n start.longitude = endSign * (absStartLon - CesiumMath.EPSILON11);\n return 1;\n } else if (\n CesiumMath.equalsEpsilon(absEndLon, CesiumMath.PI, CesiumMath.EPSILON11)\n ) {\n var startSign = CesiumMath.sign(start.longitude);\n end.longitude = startSign * (absEndLon - CesiumMath.EPSILON11);\n return 2;\n }\n return 0;\n}\n\nvar startCartographicScratch = new Cartographic();\nvar endCartographicScratch = new Cartographic();\n\nvar segmentStartTopScratch = new Cartesian3();\nvar segmentEndTopScratch = new Cartesian3();\nvar segmentStartBottomScratch = new Cartesian3();\nvar segmentEndBottomScratch = new Cartesian3();\nvar segmentStartNormalScratch = new Cartesian3();\nvar segmentEndNormalScratch = new Cartesian3();\n\nvar getHeightCartographics = [startCartographicScratch, endCartographicScratch];\nvar getHeightRectangleScratch = new Rectangle();\n\nvar adjustHeightStartTopScratch = new Cartesian3();\nvar adjustHeightEndTopScratch = new Cartesian3();\nvar adjustHeightStartBottomScratch = new Cartesian3();\nvar adjustHeightEndBottomScratch = new Cartesian3();\n\nvar segmentStart2DScratch = new Cartesian3();\nvar segmentEnd2DScratch = new Cartesian3();\nvar segmentStartNormal2DScratch = new Cartesian3();\nvar segmentEndNormal2DScratch = new Cartesian3();\n\nvar offsetScratch = new Cartesian3();\nvar startUpScratch = new Cartesian3();\nvar endUpScratch = new Cartesian3();\nvar rightScratch = new Cartesian3();\nvar startPlaneNormalScratch = new Cartesian3();\nvar endPlaneNormalScratch = new Cartesian3();\nvar encodeScratch = new EncodedCartesian3();\n\nvar encodeScratch2D = new EncodedCartesian3();\nvar forwardOffset2DScratch = new Cartesian3();\nvar right2DScratch = new Cartesian3();\n\nvar normalNudgeScratch = new Cartesian3();\n\nvar scratchBoundingSpheres = [new BoundingSphere(), new BoundingSphere()];\n\n// Winding order is reversed so each segment's volume is inside-out\nvar REFERENCE_INDICES = [\n 0,\n 2,\n 1,\n 0,\n 3,\n 2, // right\n 0,\n 7,\n 3,\n 0,\n 4,\n 7, // start\n 0,\n 5,\n 4,\n 0,\n 1,\n 5, // bottom\n 5,\n 7,\n 4,\n 5,\n 6,\n 7, // left\n 5,\n 2,\n 6,\n 5,\n 1,\n 2, // end\n 3,\n 6,\n 2,\n 3,\n 7,\n 6, // top\n];\nvar REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length;\n\n// Decompose the \"wall\" into a series of shadow volumes.\n// Each shadow volume's vertices encode a description of the line it contains,\n// including mitering planes at the end points, a plane along the line itself,\n// and attributes for computing length-wise texture coordinates.\nfunction generateGeometryAttributes(\n loop,\n projection,\n bottomPositionsArray,\n topPositionsArray,\n normalsArray,\n cartographicsArray,\n compute2dAttributes\n) {\n var i;\n var index;\n var ellipsoid = projection._ellipsoid;\n\n // Each segment will have 8 vertices\n var segmentCount = bottomPositionsArray.length / 3 - 1;\n var vertexCount = segmentCount * 8;\n var arraySizeVec4 = vertexCount * 4;\n var indexCount = segmentCount * 36;\n\n var indices =\n vertexCount > 65535\n ? new Uint32Array(indexCount)\n : new Uint16Array(indexCount);\n var positionsArray = new Float64Array(vertexCount * 3);\n\n var startHiAndForwardOffsetX = new Float32Array(arraySizeVec4);\n var startLoAndForwardOffsetY = new Float32Array(arraySizeVec4);\n var startNormalAndForwardOffsetZ = new Float32Array(arraySizeVec4);\n var endNormalAndTextureCoordinateNormalizationX = new Float32Array(\n arraySizeVec4\n );\n var rightNormalAndTextureCoordinateNormalizationY = new Float32Array(\n arraySizeVec4\n );\n\n var startHiLo2D;\n var offsetAndRight2D;\n var startEndNormals2D;\n var texcoordNormalization2D;\n\n if (compute2dAttributes) {\n startHiLo2D = new Float32Array(arraySizeVec4);\n offsetAndRight2D = new Float32Array(arraySizeVec4);\n startEndNormals2D = new Float32Array(arraySizeVec4);\n texcoordNormalization2D = new Float32Array(vertexCount * 2);\n }\n\n /*** Compute total lengths for texture coordinate normalization ***/\n // 2D\n var cartographicsLength = cartographicsArray.length / 2;\n var length2D = 0.0;\n\n var startCartographic = startCartographicScratch;\n startCartographic.height = 0.0;\n var endCartographic = endCartographicScratch;\n endCartographic.height = 0.0;\n\n var segmentStartCartesian = segmentStartTopScratch;\n var segmentEndCartesian = segmentEndTopScratch;\n\n if (compute2dAttributes) {\n index = 0;\n for (i = 1; i < cartographicsLength; i++) {\n // Don't clone anything from previous segment b/c possible IDL touch\n startCartographic.latitude = cartographicsArray[index];\n startCartographic.longitude = cartographicsArray[index + 1];\n endCartographic.latitude = cartographicsArray[index + 2];\n endCartographic.longitude = cartographicsArray[index + 3];\n\n segmentStartCartesian = projection.project(\n startCartographic,\n segmentStartCartesian\n );\n segmentEndCartesian = projection.project(\n endCartographic,\n segmentEndCartesian\n );\n length2D += Cartesian3.distance(\n segmentStartCartesian,\n segmentEndCartesian\n );\n index += 2;\n }\n }\n\n // 3D\n var positionsLength = topPositionsArray.length / 3;\n segmentEndCartesian = Cartesian3.unpack(\n topPositionsArray,\n 0,\n segmentEndCartesian\n );\n var length3D = 0.0;\n\n index = 3;\n for (i = 1; i < positionsLength; i++) {\n segmentStartCartesian = Cartesian3.clone(\n segmentEndCartesian,\n segmentStartCartesian\n );\n segmentEndCartesian = Cartesian3.unpack(\n topPositionsArray,\n index,\n segmentEndCartesian\n );\n length3D += Cartesian3.distance(segmentStartCartesian, segmentEndCartesian);\n index += 3;\n }\n\n /*** Generate segments ***/\n var j;\n index = 3;\n var cartographicsIndex = 0;\n var vec2sWriteIndex = 0;\n var vec3sWriteIndex = 0;\n var vec4sWriteIndex = 0;\n var miterBroken = false;\n\n var endBottom = Cartesian3.unpack(\n bottomPositionsArray,\n 0,\n segmentEndBottomScratch\n );\n var endTop = Cartesian3.unpack(topPositionsArray, 0, segmentEndTopScratch);\n var endGeometryNormal = Cartesian3.unpack(\n normalsArray,\n 0,\n segmentEndNormalScratch\n );\n\n if (loop) {\n var preEndBottom = Cartesian3.unpack(\n bottomPositionsArray,\n bottomPositionsArray.length - 6,\n segmentStartBottomScratch\n );\n if (breakMiter(endGeometryNormal, preEndBottom, endBottom, endTop)) {\n // Miter broken as if for the last point in the loop, needs to be inverted for first point (clone of endBottom)\n endGeometryNormal = Cartesian3.negate(\n endGeometryNormal,\n endGeometryNormal\n );\n }\n }\n\n var lengthSoFar3D = 0.0;\n var lengthSoFar2D = 0.0;\n\n // For translating bounding volume\n var sumHeights = 0.0;\n\n for (i = 0; i < segmentCount; i++) {\n var startBottom = Cartesian3.clone(endBottom, segmentStartBottomScratch);\n var startTop = Cartesian3.clone(endTop, segmentStartTopScratch);\n var startGeometryNormal = Cartesian3.clone(\n endGeometryNormal,\n segmentStartNormalScratch\n );\n\n if (miterBroken) {\n startGeometryNormal = Cartesian3.negate(\n startGeometryNormal,\n startGeometryNormal\n );\n }\n\n endBottom = Cartesian3.unpack(\n bottomPositionsArray,\n index,\n segmentEndBottomScratch\n );\n endTop = Cartesian3.unpack(topPositionsArray, index, segmentEndTopScratch);\n endGeometryNormal = Cartesian3.unpack(\n normalsArray,\n index,\n segmentEndNormalScratch\n );\n\n miterBroken = breakMiter(endGeometryNormal, startBottom, endBottom, endTop);\n\n // 2D - don't clone anything from previous segment b/c possible IDL touch\n startCartographic.latitude = cartographicsArray[cartographicsIndex];\n startCartographic.longitude = cartographicsArray[cartographicsIndex + 1];\n endCartographic.latitude = cartographicsArray[cartographicsIndex + 2];\n endCartographic.longitude = cartographicsArray[cartographicsIndex + 3];\n var start2D;\n var end2D;\n var startGeometryNormal2D;\n var endGeometryNormal2D;\n\n if (compute2dAttributes) {\n var nudgeResult = nudgeCartographic(startCartographic, endCartographic);\n start2D = projection.project(startCartographic, segmentStart2DScratch);\n end2D = projection.project(endCartographic, segmentEnd2DScratch);\n var direction2D = direction(end2D, start2D, forwardOffset2DScratch);\n direction2D.y = Math.abs(direction2D.y);\n\n startGeometryNormal2D = segmentStartNormal2DScratch;\n endGeometryNormal2D = segmentEndNormal2DScratch;\n if (\n nudgeResult === 0 ||\n Cartesian3.dot(direction2D, Cartesian3.UNIT_Y) > MITER_BREAK_SMALL\n ) {\n // No nudge - project the original normal\n // Or, if the line's angle relative to the IDL is very acute,\n // in which case snapping will produce oddly shaped volumes.\n startGeometryNormal2D = projectNormal(\n projection,\n startCartographic,\n startGeometryNormal,\n start2D,\n segmentStartNormal2DScratch\n );\n endGeometryNormal2D = projectNormal(\n projection,\n endCartographic,\n endGeometryNormal,\n end2D,\n segmentEndNormal2DScratch\n );\n } else if (nudgeResult === 1) {\n // Start is close to IDL - snap start normal to align with IDL\n endGeometryNormal2D = projectNormal(\n projection,\n endCartographic,\n endGeometryNormal,\n end2D,\n segmentEndNormal2DScratch\n );\n startGeometryNormal2D.x = 0.0;\n // If start longitude is negative and end longitude is less negative, relative right is unit -Y\n // If start longitude is positive and end longitude is less positive, relative right is unit +Y\n startGeometryNormal2D.y = CesiumMath.sign(\n startCartographic.longitude - Math.abs(endCartographic.longitude)\n );\n startGeometryNormal2D.z = 0.0;\n } else {\n // End is close to IDL - snap end normal to align with IDL\n startGeometryNormal2D = projectNormal(\n projection,\n startCartographic,\n startGeometryNormal,\n start2D,\n segmentStartNormal2DScratch\n );\n endGeometryNormal2D.x = 0.0;\n // If end longitude is negative and start longitude is less negative, relative right is unit Y\n // If end longitude is positive and start longitude is less positive, relative right is unit -Y\n endGeometryNormal2D.y = CesiumMath.sign(\n startCartographic.longitude - endCartographic.longitude\n );\n endGeometryNormal2D.z = 0.0;\n }\n }\n\n /****************************************\n * Geometry descriptors of a \"line on terrain,\"\n * as opposed to the \"shadow volume used to draw\n * the line on terrain\":\n * - position of start + offset to end\n * - start, end, and right-facing planes\n * - encoded texture coordinate offsets\n ****************************************/\n\n /* 3D */\n var segmentLength3D = Cartesian3.distance(startTop, endTop);\n\n var encodedStart = EncodedCartesian3.fromCartesian(\n startBottom,\n encodeScratch\n );\n var forwardOffset = Cartesian3.subtract(\n endBottom,\n startBottom,\n offsetScratch\n );\n var forward = Cartesian3.normalize(forwardOffset, rightScratch);\n\n var startUp = Cartesian3.subtract(startTop, startBottom, startUpScratch);\n startUp = Cartesian3.normalize(startUp, startUp);\n var rightNormal = Cartesian3.cross(forward, startUp, rightScratch);\n rightNormal = Cartesian3.normalize(rightNormal, rightNormal);\n\n var startPlaneNormal = Cartesian3.cross(\n startUp,\n startGeometryNormal,\n startPlaneNormalScratch\n );\n startPlaneNormal = Cartesian3.normalize(startPlaneNormal, startPlaneNormal);\n\n var endUp = Cartesian3.subtract(endTop, endBottom, endUpScratch);\n endUp = Cartesian3.normalize(endUp, endUp);\n var endPlaneNormal = Cartesian3.cross(\n endGeometryNormal,\n endUp,\n endPlaneNormalScratch\n );\n endPlaneNormal = Cartesian3.normalize(endPlaneNormal, endPlaneNormal);\n\n var texcoordNormalization3DX = segmentLength3D / length3D;\n var texcoordNormalization3DY = lengthSoFar3D / length3D;\n\n /* 2D */\n var segmentLength2D = 0.0;\n var encodedStart2D;\n var forwardOffset2D;\n var right2D;\n var texcoordNormalization2DX = 0.0;\n var texcoordNormalization2DY = 0.0;\n if (compute2dAttributes) {\n segmentLength2D = Cartesian3.distance(start2D, end2D);\n\n encodedStart2D = EncodedCartesian3.fromCartesian(\n start2D,\n encodeScratch2D\n );\n forwardOffset2D = Cartesian3.subtract(\n end2D,\n start2D,\n forwardOffset2DScratch\n );\n\n // Right direction is just forward direction rotated by -90 degrees around Z\n // Similarly with plane normals\n right2D = Cartesian3.normalize(forwardOffset2D, right2DScratch);\n var swap = right2D.x;\n right2D.x = right2D.y;\n right2D.y = -swap;\n\n texcoordNormalization2DX = segmentLength2D / length2D;\n texcoordNormalization2DY = lengthSoFar2D / length2D;\n }\n /** Pack **/\n for (j = 0; j < 8; j++) {\n var vec4Index = vec4sWriteIndex + j * 4;\n var vec2Index = vec2sWriteIndex + j * 2;\n var wIndex = vec4Index + 3;\n\n // Encode sidedness of vertex relative to right plane in texture coordinate normalization X,\n // whether vertex is top or bottom of volume in sign/magnitude of normalization Y.\n var rightPlaneSide = j < 4 ? 1.0 : -1.0;\n var topBottomSide = j === 2 || j === 3 || j === 6 || j === 7 ? 1.0 : -1.0;\n\n // 3D\n Cartesian3.pack(encodedStart.high, startHiAndForwardOffsetX, vec4Index);\n startHiAndForwardOffsetX[wIndex] = forwardOffset.x;\n\n Cartesian3.pack(encodedStart.low, startLoAndForwardOffsetY, vec4Index);\n startLoAndForwardOffsetY[wIndex] = forwardOffset.y;\n\n Cartesian3.pack(\n startPlaneNormal,\n startNormalAndForwardOffsetZ,\n vec4Index\n );\n startNormalAndForwardOffsetZ[wIndex] = forwardOffset.z;\n\n Cartesian3.pack(\n endPlaneNormal,\n endNormalAndTextureCoordinateNormalizationX,\n vec4Index\n );\n endNormalAndTextureCoordinateNormalizationX[wIndex] =\n texcoordNormalization3DX * rightPlaneSide;\n\n Cartesian3.pack(\n rightNormal,\n rightNormalAndTextureCoordinateNormalizationY,\n vec4Index\n );\n\n var texcoordNormalization = texcoordNormalization3DY * topBottomSide;\n if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\n texcoordNormalization = 9.0; // some value greater than 1.0\n }\n rightNormalAndTextureCoordinateNormalizationY[\n wIndex\n ] = texcoordNormalization;\n\n // 2D\n if (compute2dAttributes) {\n startHiLo2D[vec4Index] = encodedStart2D.high.x;\n startHiLo2D[vec4Index + 1] = encodedStart2D.high.y;\n startHiLo2D[vec4Index + 2] = encodedStart2D.low.x;\n startHiLo2D[vec4Index + 3] = encodedStart2D.low.y;\n\n startEndNormals2D[vec4Index] = -startGeometryNormal2D.y;\n startEndNormals2D[vec4Index + 1] = startGeometryNormal2D.x;\n startEndNormals2D[vec4Index + 2] = endGeometryNormal2D.y;\n startEndNormals2D[vec4Index + 3] = -endGeometryNormal2D.x;\n\n offsetAndRight2D[vec4Index] = forwardOffset2D.x;\n offsetAndRight2D[vec4Index + 1] = forwardOffset2D.y;\n offsetAndRight2D[vec4Index + 2] = right2D.x;\n offsetAndRight2D[vec4Index + 3] = right2D.y;\n\n texcoordNormalization2D[vec2Index] =\n texcoordNormalization2DX * rightPlaneSide;\n\n texcoordNormalization = texcoordNormalization2DY * topBottomSide;\n if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\n texcoordNormalization = 9.0; // some value greater than 1.0\n }\n texcoordNormalization2D[vec2Index + 1] = texcoordNormalization;\n }\n }\n\n // Adjust height of volume in 3D\n var adjustHeightStartBottom = adjustHeightStartBottomScratch;\n var adjustHeightEndBottom = adjustHeightEndBottomScratch;\n var adjustHeightStartTop = adjustHeightStartTopScratch;\n var adjustHeightEndTop = adjustHeightEndTopScratch;\n\n var getHeightsRectangle = Rectangle.fromCartographicArray(\n getHeightCartographics,\n getHeightRectangleScratch\n );\n var minMaxHeights = ApproximateTerrainHeights.getMinimumMaximumHeights(\n getHeightsRectangle,\n ellipsoid\n );\n var minHeight = minMaxHeights.minimumTerrainHeight;\n var maxHeight = minMaxHeights.maximumTerrainHeight;\n\n sumHeights += minHeight;\n sumHeights += maxHeight;\n\n adjustHeights(\n startBottom,\n startTop,\n minHeight,\n maxHeight,\n adjustHeightStartBottom,\n adjustHeightStartTop\n );\n adjustHeights(\n endBottom,\n endTop,\n minHeight,\n maxHeight,\n adjustHeightEndBottom,\n adjustHeightEndTop\n );\n\n // Nudge the positions away from the \"polyline\" a little bit to prevent errors in GeometryPipeline\n var normalNudge = Cartesian3.multiplyByScalar(\n rightNormal,\n CesiumMath.EPSILON5,\n normalNudgeScratch\n );\n Cartesian3.add(\n adjustHeightStartBottom,\n normalNudge,\n adjustHeightStartBottom\n );\n Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\n Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\n Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\n\n // If the segment is very close to the XZ plane, nudge the vertices slightly to avoid touching it.\n nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\n nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\n\n Cartesian3.pack(adjustHeightStartBottom, positionsArray, vec3sWriteIndex);\n Cartesian3.pack(adjustHeightEndBottom, positionsArray, vec3sWriteIndex + 3);\n Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 6);\n Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 9);\n\n normalNudge = Cartesian3.multiplyByScalar(\n rightNormal,\n -2.0 * CesiumMath.EPSILON5,\n normalNudgeScratch\n );\n Cartesian3.add(\n adjustHeightStartBottom,\n normalNudge,\n adjustHeightStartBottom\n );\n Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\n Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\n Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\n\n nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\n nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\n\n Cartesian3.pack(\n adjustHeightStartBottom,\n positionsArray,\n vec3sWriteIndex + 12\n );\n Cartesian3.pack(\n adjustHeightEndBottom,\n positionsArray,\n vec3sWriteIndex + 15\n );\n Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 18);\n Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 21);\n\n cartographicsIndex += 2;\n index += 3;\n\n vec2sWriteIndex += 16;\n vec3sWriteIndex += 24;\n vec4sWriteIndex += 32;\n\n lengthSoFar3D += segmentLength3D;\n lengthSoFar2D += segmentLength2D;\n }\n\n index = 0;\n var indexOffset = 0;\n for (i = 0; i < segmentCount; i++) {\n for (j = 0; j < REFERENCE_INDICES_LENGTH; j++) {\n indices[index + j] = REFERENCE_INDICES[j] + indexOffset;\n }\n indexOffset += 8;\n index += REFERENCE_INDICES_LENGTH;\n }\n\n var boundingSpheres = scratchBoundingSpheres;\n BoundingSphere.fromVertices(\n bottomPositionsArray,\n Cartesian3.ZERO,\n 3,\n boundingSpheres[0]\n );\n BoundingSphere.fromVertices(\n topPositionsArray,\n Cartesian3.ZERO,\n 3,\n boundingSpheres[1]\n );\n var boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres);\n\n // Adjust bounding sphere height and radius to cover more of the volume\n boundingSphere.radius += sumHeights / (segmentCount * 2.0);\n\n var attributes = {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n normalize: false,\n values: positionsArray,\n }),\n startHiAndForwardOffsetX: getVec4GeometryAttribute(\n startHiAndForwardOffsetX\n ),\n startLoAndForwardOffsetY: getVec4GeometryAttribute(\n startLoAndForwardOffsetY\n ),\n startNormalAndForwardOffsetZ: getVec4GeometryAttribute(\n startNormalAndForwardOffsetZ\n ),\n endNormalAndTextureCoordinateNormalizationX: getVec4GeometryAttribute(\n endNormalAndTextureCoordinateNormalizationX\n ),\n rightNormalAndTextureCoordinateNormalizationY: getVec4GeometryAttribute(\n rightNormalAndTextureCoordinateNormalizationY\n ),\n };\n\n if (compute2dAttributes) {\n attributes.startHiLo2D = getVec4GeometryAttribute(startHiLo2D);\n attributes.offsetAndRight2D = getVec4GeometryAttribute(offsetAndRight2D);\n attributes.startEndNormals2D = getVec4GeometryAttribute(startEndNormals2D);\n attributes.texcoordNormalization2D = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n normalize: false,\n values: texcoordNormalization2D,\n });\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n boundingSphere: boundingSphere,\n });\n}\n\nfunction getVec4GeometryAttribute(typedArray) {\n return new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n values: typedArray,\n });\n}\n\n/**\n * Approximates an ellipsoid-tangent vector in 2D by projecting the end point into 2D.\n * Exposed for testing.\n *\n * @param {MapProjection} projection Map Projection for projecting coordinates to 2D.\n * @param {Cartographic} cartographic The cartographic origin point of the normal.\n * Used to check if the normal crosses the IDL during projection.\n * @param {Cartesian3} normal The normal in 3D.\n * @param {Cartesian3} projectedPosition The projected origin point of the normal in 2D.\n * @param {Cartesian3} result Result parameter on which to store the projected normal.\n * @private\n */\nGroundPolylineGeometry._projectNormal = projectNormal;\nexport default GroundPolylineGeometry;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Defines a heading angle, pitch angle, and range in a local frame.\n * Heading is the rotation from the local north direction where a positive angle is increasing eastward.\n * Pitch is the rotation from the local xy-plane. Positive pitch angles are above the plane. Negative pitch\n * angles are below the plane. Range is the distance from the center of the frame.\n * @alias HeadingPitchRange\n * @constructor\n *\n * @param {Number} [heading=0.0] The heading angle in radians.\n * @param {Number} [pitch=0.0] The pitch angle in radians.\n * @param {Number} [range=0.0] The distance from the center in meters.\n */\nfunction HeadingPitchRange(heading, pitch, range) {\n /**\n * Heading is the rotation from the local north direction where a positive angle is increasing eastward.\n * @type {Number}\n * @default 0.0\n */\n this.heading = defaultValue(heading, 0.0);\n\n /**\n * Pitch is the rotation from the local xy-plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane.\n * @type {Number}\n * @default 0.0\n */\n this.pitch = defaultValue(pitch, 0.0);\n\n /**\n * Range is the distance from the center of the local frame.\n * @type {Number}\n * @default 0.0\n */\n this.range = defaultValue(range, 0.0);\n}\n\n/**\n * Duplicates a HeadingPitchRange instance.\n *\n * @param {HeadingPitchRange} hpr The HeadingPitchRange to duplicate.\n * @param {HeadingPitchRange} [result] The object onto which to store the result.\n * @returns {HeadingPitchRange} The modified result parameter or a new HeadingPitchRange instance if one was not provided. (Returns undefined if hpr is undefined)\n */\nHeadingPitchRange.clone = function (hpr, result) {\n if (!defined(hpr)) {\n return undefined;\n }\n if (!defined(result)) {\n result = new HeadingPitchRange();\n }\n\n result.heading = hpr.heading;\n result.pitch = hpr.pitch;\n result.range = hpr.range;\n return result;\n};\nexport default HeadingPitchRange;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\nvar factorial = CesiumMath.factorial;\n\nfunction calculateCoefficientTerm(\n x,\n zIndices,\n xTable,\n derivOrder,\n termOrder,\n reservedIndices\n) {\n var result = 0;\n var reserved;\n var i;\n var j;\n\n if (derivOrder > 0) {\n for (i = 0; i < termOrder; i++) {\n reserved = false;\n for (j = 0; j < reservedIndices.length && !reserved; j++) {\n if (i === reservedIndices[j]) {\n reserved = true;\n }\n }\n\n if (!reserved) {\n reservedIndices.push(i);\n result += calculateCoefficientTerm(\n x,\n zIndices,\n xTable,\n derivOrder - 1,\n termOrder,\n reservedIndices\n );\n reservedIndices.splice(reservedIndices.length - 1, 1);\n }\n }\n\n return result;\n }\n\n result = 1;\n for (i = 0; i < termOrder; i++) {\n reserved = false;\n for (j = 0; j < reservedIndices.length && !reserved; j++) {\n if (i === reservedIndices[j]) {\n reserved = true;\n }\n }\n\n if (!reserved) {\n result *= x - xTable[zIndices[i]];\n }\n }\n\n return result;\n}\n\n/**\n * An {@link InterpolationAlgorithm} for performing Hermite interpolation.\n *\n * @namespace HermitePolynomialApproximation\n */\nvar HermitePolynomialApproximation = {\n type: \"Hermite\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n *\n * @param {Number} degree The desired degree of interpolation.\n * @param {Number} [inputOrder=0] The order of the inputs (0 means just the data, 1 means the data and its derivative, etc).\n * @returns {Number} The number of required data points needed for the desired degree of interpolation.\n * @exception {DeveloperError} degree must be 0 or greater.\n * @exception {DeveloperError} inputOrder must be 0 or greater.\n */\nHermitePolynomialApproximation.getRequiredDataPoints = function (\n degree,\n inputOrder\n) {\n inputOrder = defaultValue(inputOrder, 0);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(degree)) {\n throw new DeveloperError(\"degree is required.\");\n }\n if (degree < 0) {\n throw new DeveloperError(\"degree must be 0 or greater.\");\n }\n if (inputOrder < 0) {\n throw new DeveloperError(\"inputOrder must be 0 or greater.\");\n }\n //>>includeEnd('debug');\n\n return Math.max(Math.floor((degree + 1) / (inputOrder + 1)), 2);\n};\n\n/**\n * Interpolates values using Hermite Polynomial Approximation.\n *\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number[]} [result] An existing array into which to store the result.\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nHermitePolynomialApproximation.interpolateOrderZero = function (\n x,\n xTable,\n yTable,\n yStride,\n result\n) {\n if (!defined(result)) {\n result = new Array(yStride);\n }\n\n var i;\n var j;\n var d;\n var s;\n var len;\n var index;\n var length = xTable.length;\n var coefficients = new Array(yStride);\n\n for (i = 0; i < yStride; i++) {\n result[i] = 0;\n\n var l = new Array(length);\n coefficients[i] = l;\n for (j = 0; j < length; j++) {\n l[j] = [];\n }\n }\n\n var zIndicesLength = length,\n zIndices = new Array(zIndicesLength);\n\n for (i = 0; i < zIndicesLength; i++) {\n zIndices[i] = i;\n }\n\n var highestNonZeroCoef = length - 1;\n for (s = 0; s < yStride; s++) {\n for (j = 0; j < zIndicesLength; j++) {\n index = zIndices[j] * yStride + s;\n coefficients[s][0].push(yTable[index]);\n }\n\n for (i = 1; i < zIndicesLength; i++) {\n var nonZeroCoefficients = false;\n for (j = 0; j < zIndicesLength - i; j++) {\n var zj = xTable[zIndices[j]];\n var zn = xTable[zIndices[j + i]];\n\n var numerator;\n if (zn - zj <= 0) {\n index = zIndices[j] * yStride + yStride * i + s;\n numerator = yTable[index];\n coefficients[s][i].push(numerator / factorial(i));\n } else {\n numerator = coefficients[s][i - 1][j + 1] - coefficients[s][i - 1][j];\n coefficients[s][i].push(numerator / (zn - zj));\n }\n nonZeroCoefficients = nonZeroCoefficients || numerator !== 0;\n }\n\n if (!nonZeroCoefficients) {\n highestNonZeroCoef = i - 1;\n }\n }\n }\n\n for (d = 0, len = 0; d <= len; d++) {\n for (i = d; i <= highestNonZeroCoef; i++) {\n var tempTerm = calculateCoefficientTerm(x, zIndices, xTable, d, i, []);\n for (s = 0; s < yStride; s++) {\n var coeff = coefficients[s][i][0];\n result[s + d * yStride] += coeff * tempTerm;\n }\n }\n }\n\n return result;\n};\n\nvar arrayScratch = [];\n\n/**\n * Interpolates values using Hermite Polynomial Approximation.\n *\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number} inputOrder The number of derivatives supplied for input.\n * @param {Number} outputOrder The number of derivatives desired for output.\n * @param {Number[]} [result] An existing array into which to store the result.\n *\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nHermitePolynomialApproximation.interpolate = function (\n x,\n xTable,\n yTable,\n yStride,\n inputOrder,\n outputOrder,\n result\n) {\n var resultLength = yStride * (outputOrder + 1);\n if (!defined(result)) {\n result = new Array(resultLength);\n }\n for (var r = 0; r < resultLength; r++) {\n result[r] = 0;\n }\n\n var length = xTable.length;\n // The zIndices array holds copies of the addresses of the xTable values\n // in the range we're looking at. Even though this just holds information already\n // available in xTable this is a much more convenient format.\n var zIndices = new Array(length * (inputOrder + 1));\n var i;\n for (i = 0; i < length; i++) {\n for (var j = 0; j < inputOrder + 1; j++) {\n zIndices[i * (inputOrder + 1) + j] = i;\n }\n }\n\n var zIndiceslength = zIndices.length;\n var coefficients = arrayScratch;\n var highestNonZeroCoef = fillCoefficientList(\n coefficients,\n zIndices,\n xTable,\n yTable,\n yStride,\n inputOrder\n );\n var reservedIndices = [];\n\n var tmp = (zIndiceslength * (zIndiceslength + 1)) / 2;\n var loopStop = Math.min(highestNonZeroCoef, outputOrder);\n for (var d = 0; d <= loopStop; d++) {\n for (i = d; i <= highestNonZeroCoef; i++) {\n reservedIndices.length = 0;\n var tempTerm = calculateCoefficientTerm(\n x,\n zIndices,\n xTable,\n d,\n i,\n reservedIndices\n );\n var dimTwo = Math.floor((i * (1 - i)) / 2) + zIndiceslength * i;\n\n for (var s = 0; s < yStride; s++) {\n var dimOne = Math.floor(s * tmp);\n var coef = coefficients[dimOne + dimTwo];\n result[s + d * yStride] += coef * tempTerm;\n }\n }\n }\n\n return result;\n};\n\nfunction fillCoefficientList(\n coefficients,\n zIndices,\n xTable,\n yTable,\n yStride,\n inputOrder\n) {\n var j;\n var index;\n var highestNonZero = -1;\n var zIndiceslength = zIndices.length;\n var tmp = (zIndiceslength * (zIndiceslength + 1)) / 2;\n\n for (var s = 0; s < yStride; s++) {\n var dimOne = Math.floor(s * tmp);\n\n for (j = 0; j < zIndiceslength; j++) {\n index = zIndices[j] * yStride * (inputOrder + 1) + s;\n coefficients[dimOne + j] = yTable[index];\n }\n\n for (var i = 1; i < zIndiceslength; i++) {\n var coefIndex = 0;\n var dimTwo = Math.floor((i * (1 - i)) / 2) + zIndiceslength * i;\n var nonZeroCoefficients = false;\n\n for (j = 0; j < zIndiceslength - i; j++) {\n var zj = xTable[zIndices[j]];\n var zn = xTable[zIndices[j + i]];\n\n var numerator;\n var coefficient;\n if (zn - zj <= 0) {\n index = zIndices[j] * yStride * (inputOrder + 1) + yStride * i + s;\n numerator = yTable[index];\n coefficient = numerator / CesiumMath.factorial(i);\n coefficients[dimOne + dimTwo + coefIndex] = coefficient;\n coefIndex++;\n } else {\n var dimTwoMinusOne =\n Math.floor(((i - 1) * (2 - i)) / 2) + zIndiceslength * (i - 1);\n numerator =\n coefficients[dimOne + dimTwoMinusOne + j + 1] -\n coefficients[dimOne + dimTwoMinusOne + j];\n coefficient = numerator / (zn - zj);\n coefficients[dimOne + dimTwo + coefIndex] = coefficient;\n coefIndex++;\n }\n nonZeroCoefficients = nonZeroCoefficients || numerator !== 0.0;\n }\n\n if (nonZeroCoefficients) {\n highestNonZero = Math.max(highestNonZero, i);\n }\n }\n }\n\n return highestNonZero;\n}\nexport default HermitePolynomialApproximation;\n","/**\n * A structure containing the orientation data computed at a particular time. The data\n * represents the direction of the pole of rotation and the rotation about that pole.\n * <p>\n * These parameters correspond to the parameters in the Report from the IAU/IAG Working Group\n * except that they are expressed in radians.\n * </p>\n *\n * @namespace IauOrientationParameters\n *\n * @private\n */\nfunction IauOrientationParameters(\n rightAscension,\n declination,\n rotation,\n rotationRate\n) {\n /**\n * The right ascension of the north pole of the body with respect to\n * the International Celestial Reference Frame, in radians.\n * @type {Number}\n *\n * @private\n */\n this.rightAscension = rightAscension;\n\n /**\n * The declination of the north pole of the body with respect to\n * the International Celestial Reference Frame, in radians.\n * @type {Number}\n *\n * @private\n */\n this.declination = declination;\n\n /**\n * The rotation about the north pole used to align a set of axes with\n * the meridian defined by the IAU report, in radians.\n * @type {Number}\n *\n * @private\n */\n this.rotation = rotation;\n\n /**\n * The instantaneous rotation rate about the north pole, in radians per second.\n * @type {Number}\n *\n * @private\n */\n this.rotationRate = rotationRate;\n}\nexport default IauOrientationParameters;\n","import defined from \"./defined.js\";\nimport IauOrientationParameters from \"./IauOrientationParameters.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport TimeConstants from \"./TimeConstants.js\";\n\n/**\n * This is a collection of the orientation information available for central bodies.\n * The data comes from the Report of the IAU/IAG Working Group on Cartographic\n * Coordinates and Rotational Elements: 2000.\n *\n * @namespace Iau2000Orientation\n *\n * @private\n */\nvar Iau2000Orientation = {};\n\nvar TdtMinusTai = 32.184;\nvar J2000d = 2451545.0;\n\nvar c1 = -0.0529921;\nvar c2 = -0.1059842;\nvar c3 = 13.0120009;\nvar c4 = 13.3407154;\nvar c5 = 0.9856003;\nvar c6 = 26.4057084;\nvar c7 = 13.064993;\nvar c8 = 0.3287146;\nvar c9 = 1.7484877;\nvar c10 = -0.1589763;\nvar c11 = 0.0036096;\nvar c12 = 0.1643573;\nvar c13 = 12.9590088;\nvar dateTT = new JulianDate();\n\n/**\n * Compute the orientation parameters for the Moon.\n *\n * @param {JulianDate} [date=JulianDate.now()] The date to evaluate the parameters.\n * @param {IauOrientationParameters} [result] The object onto which to store the result.\n * @returns {IauOrientationParameters} The modified result parameter or a new instance representing the orientation of the Earth's Moon.\n * @private\n */\nIau2000Orientation.ComputeMoon = function (date, result) {\n if (!defined(date)) {\n date = JulianDate.now();\n }\n\n dateTT = JulianDate.addSeconds(date, TdtMinusTai, dateTT);\n var d = JulianDate.totalDays(dateTT) - J2000d;\n var T = d / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n\n var E1 = (125.045 + c1 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E2 = (250.089 + c2 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E3 = (260.008 + c3 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E4 = (176.625 + c4 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E5 = (357.529 + c5 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E6 = (311.589 + c6 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E7 = (134.963 + c7 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E8 = (276.617 + c8 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E9 = (34.226 + c9 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E10 = (15.134 + c10 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E11 = (119.743 + c11 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E12 = (239.961 + c12 * d) * CesiumMath.RADIANS_PER_DEGREE;\n var E13 = (25.053 + c13 * d) * CesiumMath.RADIANS_PER_DEGREE;\n\n var sinE1 = Math.sin(E1);\n var sinE2 = Math.sin(E2);\n var sinE3 = Math.sin(E3);\n var sinE4 = Math.sin(E4);\n var sinE5 = Math.sin(E5);\n var sinE6 = Math.sin(E6);\n var sinE7 = Math.sin(E7);\n var sinE8 = Math.sin(E8);\n var sinE9 = Math.sin(E9);\n var sinE10 = Math.sin(E10);\n var sinE11 = Math.sin(E11);\n var sinE12 = Math.sin(E12);\n var sinE13 = Math.sin(E13);\n\n var cosE1 = Math.cos(E1);\n var cosE2 = Math.cos(E2);\n var cosE3 = Math.cos(E3);\n var cosE4 = Math.cos(E4);\n var cosE5 = Math.cos(E5);\n var cosE6 = Math.cos(E6);\n var cosE7 = Math.cos(E7);\n var cosE8 = Math.cos(E8);\n var cosE9 = Math.cos(E9);\n var cosE10 = Math.cos(E10);\n var cosE11 = Math.cos(E11);\n var cosE12 = Math.cos(E12);\n var cosE13 = Math.cos(E13);\n\n var rightAscension =\n (269.9949 +\n 0.0031 * T -\n 3.8787 * sinE1 -\n 0.1204 * sinE2 +\n 0.07 * sinE3 -\n 0.0172 * sinE4 +\n 0.0072 * sinE6 -\n 0.0052 * sinE10 +\n 0.0043 * sinE13) *\n CesiumMath.RADIANS_PER_DEGREE;\n var declination =\n (66.5392 +\n 0.013 * T +\n 1.5419 * cosE1 +\n 0.0239 * cosE2 -\n 0.0278 * cosE3 +\n 0.0068 * cosE4 -\n 0.0029 * cosE6 +\n 0.0009 * cosE7 +\n 0.0008 * cosE10 -\n 0.0009 * cosE13) *\n CesiumMath.RADIANS_PER_DEGREE;\n var rotation =\n (38.3213 +\n 13.17635815 * d -\n 1.4e-12 * d * d +\n 3.561 * sinE1 +\n 0.1208 * sinE2 -\n 0.0642 * sinE3 +\n 0.0158 * sinE4 +\n 0.0252 * sinE5 -\n 0.0066 * sinE6 -\n 0.0047 * sinE7 -\n 0.0046 * sinE8 +\n 0.0028 * sinE9 +\n 0.0052 * sinE10 +\n 0.004 * sinE11 +\n 0.0019 * sinE12 -\n 0.0044 * sinE13) *\n CesiumMath.RADIANS_PER_DEGREE;\n\n var rotationRate =\n ((13.17635815 -\n 1.4e-12 * (2.0 * d) +\n 3.561 * cosE1 * c1 +\n 0.1208 * cosE2 * c2 -\n 0.0642 * cosE3 * c3 +\n 0.0158 * cosE4 * c4 +\n 0.0252 * cosE5 * c5 -\n 0.0066 * cosE6 * c6 -\n 0.0047 * cosE7 * c7 -\n 0.0046 * cosE8 * c8 +\n 0.0028 * cosE9 * c9 +\n 0.0052 * cosE10 * c10 +\n 0.004 * cosE11 * c11 +\n 0.0019 * cosE12 * c12 -\n 0.0044 * cosE13 * c13) /\n 86400.0) *\n CesiumMath.RADIANS_PER_DEGREE;\n\n if (!defined(result)) {\n result = new IauOrientationParameters();\n }\n\n result.rightAscension = rightAscension;\n result.declination = declination;\n result.rotation = rotation;\n result.rotationRate = rotationRate;\n\n return result;\n};\nexport default Iau2000Orientation;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport Iau2000Orientation from \"./Iau2000Orientation.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Quaternion from \"./Quaternion.js\";\n\n/**\n * The Axes representing the orientation of a Globe as represented by the data\n * from the IAU/IAG Working Group reports on rotational elements.\n * @alias IauOrientationAxes\n * @constructor\n *\n * @param {IauOrientationAxes.ComputeFunction} [computeFunction] The function that computes the {@link IauOrientationParameters} given a {@link JulianDate}.\n *\n * @see Iau2000Orientation\n *\n * @private\n */\nfunction IauOrientationAxes(computeFunction) {\n if (!defined(computeFunction) || typeof computeFunction !== \"function\") {\n computeFunction = Iau2000Orientation.ComputeMoon;\n }\n\n this._computeFunction = computeFunction;\n}\n\nvar xAxisScratch = new Cartesian3();\nvar yAxisScratch = new Cartesian3();\nvar zAxisScratch = new Cartesian3();\n\nfunction computeRotationMatrix(alpha, delta, result) {\n var xAxis = xAxisScratch;\n xAxis.x = Math.cos(alpha + CesiumMath.PI_OVER_TWO);\n xAxis.y = Math.sin(alpha + CesiumMath.PI_OVER_TWO);\n xAxis.z = 0.0;\n\n var cosDec = Math.cos(delta);\n\n var zAxis = zAxisScratch;\n zAxis.x = cosDec * Math.cos(alpha);\n zAxis.y = cosDec * Math.sin(alpha);\n zAxis.z = Math.sin(delta);\n\n var yAxis = Cartesian3.cross(zAxis, xAxis, yAxisScratch);\n\n if (!defined(result)) {\n result = new Matrix3();\n }\n\n result[0] = xAxis.x;\n result[1] = yAxis.x;\n result[2] = zAxis.x;\n result[3] = xAxis.y;\n result[4] = yAxis.y;\n result[5] = zAxis.y;\n result[6] = xAxis.z;\n result[7] = yAxis.z;\n result[8] = zAxis.z;\n\n return result;\n}\n\nvar rotMtxScratch = new Matrix3();\nvar quatScratch = new Quaternion();\n\n/**\n * Computes a rotation from ICRF to a Globe's Fixed axes.\n *\n * @param {JulianDate} date The date to evaluate the matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new instance of the rotation from ICRF to Fixed.\n */\nIauOrientationAxes.prototype.evaluate = function (date, result) {\n if (!defined(date)) {\n date = JulianDate.now();\n }\n\n var alphaDeltaW = this._computeFunction(date);\n var precMtx = computeRotationMatrix(\n alphaDeltaW.rightAscension,\n alphaDeltaW.declination,\n result\n );\n\n var rot = CesiumMath.zeroToTwoPi(alphaDeltaW.rotation);\n var quat = Quaternion.fromAxisAngle(Cartesian3.UNIT_Z, rot, quatScratch);\n var rotMtx = Matrix3.fromQuaternion(\n Quaternion.conjugate(quat, quat),\n rotMtxScratch\n );\n\n var cbi2cbf = Matrix3.multiply(rotMtx, precMtx, precMtx);\n return cbi2cbf;\n};\n\n/**\n * A function that computes the {@link IauOrientationParameters} for a {@link JulianDate}.\n * @callback IauOrientationAxes.ComputeFunction\n * @param {JulianDate} date The date to evaluate the parameters.\n * @returns {IauOrientationParameters} The orientation parameters.\n * @private\n */\nexport default IauOrientationAxes;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * The interface for interpolation algorithms.\n *\n * @interface InterpolationAlgorithm\n *\n * @see LagrangePolynomialApproximation\n * @see LinearApproximation\n * @see HermitePolynomialApproximation\n */\nvar InterpolationAlgorithm = {};\n\n/**\n * Gets the name of this interpolation algorithm.\n * @type {String}\n */\nInterpolationAlgorithm.type = undefined;\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n * @function\n *\n * @param {Number} degree The desired degree of interpolation.\n * @returns {Number} The number of required data points needed for the desired degree of interpolation.\n */\nInterpolationAlgorithm.getRequiredDataPoints =\n DeveloperError.throwInstantiationError;\n\n/**\n * Performs zero order interpolation.\n * @function\n *\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number[]} [result] An existing array into which to store the result.\n *\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nInterpolationAlgorithm.interpolateOrderZero =\n DeveloperError.throwInstantiationError;\n\n/**\n * Performs higher order interpolation. Not all interpolators need to support high-order interpolation,\n * if this function remains undefined on implementing objects, interpolateOrderZero will be used instead.\n * @function\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number} inputOrder The number of derivatives supplied for input.\n * @param {Number} outputOrder The number of derivatives desired for output.\n * @param {Number[]} [result] An existing array into which to store the result.\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nInterpolationAlgorithm.interpolate = DeveloperError.throwInstantiationError;\nexport default InterpolationAlgorithm;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport GeocodeType from \"./GeocodeType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Provides geocoding via a {@link https://pelias.io/|Pelias} server.\n * @alias PeliasGeocoderService\n * @constructor\n *\n * @param {Resource|String} url The endpoint to the Pelias server.\n *\n * @example\n * // Configure a Viewer to use the Pelias server hosted by https://geocode.earth/\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * geocoder: new Cesium.PeliasGeocoderService(new Cesium.Resource({\n * url: 'https://api.geocode.earth/v1/',\n * queryParameters: {\n * api_key: '<Your geocode.earth API key>'\n * }\n * }))\n * });\n */\nfunction PeliasGeocoderService(url) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"url\", url);\n //>>includeEnd('debug');\n\n this._url = Resource.createIfNeeded(url);\n this._url.appendForwardSlash();\n}\n\nObject.defineProperties(PeliasGeocoderService.prototype, {\n /**\n * The Resource used to access the Pelias endpoint.\n * @type {Resource}\n * @memberof PeliasGeocoderService.prototype\n * @readonly\n */\n url: {\n get: function () {\n return this._url;\n },\n },\n});\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nPeliasGeocoderService.prototype.geocode = function (query, type) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"query\", query);\n //>>includeEnd('debug');\n\n var resource = this._url.getDerivedResource({\n url: type === GeocodeType.AUTOCOMPLETE ? \"autocomplete\" : \"search\",\n queryParameters: {\n text: query,\n },\n });\n\n return resource.fetchJson().then(function (results) {\n return results.features.map(function (resultObject) {\n var destination;\n var bboxDegrees = resultObject.bbox;\n\n if (defined(bboxDegrees)) {\n destination = Rectangle.fromDegrees(\n bboxDegrees[0],\n bboxDegrees[1],\n bboxDegrees[2],\n bboxDegrees[3]\n );\n } else {\n var lon = resultObject.geometry.coordinates[0];\n var lat = resultObject.geometry.coordinates[1];\n destination = Cartesian3.fromDegrees(lon, lat);\n }\n\n return {\n displayName: resultObject.properties.label,\n destination: destination,\n };\n });\n });\n};\nexport default PeliasGeocoderService;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Ion from \"./Ion.js\";\nimport PeliasGeocoderService from \"./PeliasGeocoderService.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Provides geocoding through Cesium ion.\n * @alias IonGeocoderService\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Scene} options.scene The scene\n * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use.\n * @param {String|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server.\n *\n * @see Ion\n */\nfunction IonGeocoderService(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.scene\", options.scene);\n //>>includeEnd('debug');\n\n var accessToken = defaultValue(options.accessToken, Ion.defaultAccessToken);\n var server = Resource.createIfNeeded(\n defaultValue(options.server, Ion.defaultServer)\n );\n server.appendForwardSlash();\n\n var defaultTokenCredit = Ion.getDefaultTokenCredit(accessToken);\n if (defined(defaultTokenCredit)) {\n options.scene.frameState.creditDisplay.addDefaultCredit(\n Credit.clone(defaultTokenCredit)\n );\n }\n\n var searchEndpoint = server.getDerivedResource({\n url: \"v1/geocode\",\n });\n\n if (defined(accessToken)) {\n searchEndpoint.appendQueryParameters({ access_token: accessToken });\n }\n\n this._accessToken = accessToken;\n this._server = server;\n this._pelias = new PeliasGeocoderService(searchEndpoint);\n}\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nIonGeocoderService.prototype.geocode = function (query, geocodeType) {\n return this._pelias.geocode(query, geocodeType);\n};\nexport default IonGeocoderService;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * An interval defined by a start and a stop time; optionally including those times as part of the interval.\n * Arbitrary data can optionally be associated with each instance for used with {@link TimeIntervalCollection}.\n *\n * @alias TimeInterval\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {JulianDate} [options.start=new JulianDate()] The start time of the interval.\n * @param {JulianDate} [options.stop=new JulianDate()] The stop time of the interval.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @param {Object} [options.data] Arbitrary data associated with this interval.\n *\n * @example\n * // Create an instance that spans August 1st, 1980 and is associated\n * // with a Cartesian position.\n * var timeInterval = new Cesium.TimeInterval({\n * start : Cesium.JulianDate.fromIso8601('1980-08-01T00:00:00Z'),\n * stop : Cesium.JulianDate.fromIso8601('1980-08-02T00:00:00Z'),\n * isStartIncluded : true,\n * isStopIncluded : false,\n * data : Cesium.Cartesian3.fromDegrees(39.921037, -75.170082)\n * });\n *\n * @example\n * // Create two instances from ISO 8601 intervals with associated numeric data\n * // then compute their intersection, summing the data they contain.\n * var left = Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2000/2010',\n * data : 2\n * });\n *\n * var right = Cesium.TimeInterval.fromIso8601({\n * iso8601 : '1995/2005',\n * data : 3\n * });\n *\n * //The result of the below intersection will be an interval equivalent to\n * //var intersection = Cesium.TimeInterval.fromIso8601({\n * // iso8601 : '2000/2005',\n * // data : 5\n * //});\n * var intersection = new Cesium.TimeInterval();\n * Cesium.TimeInterval.intersect(left, right, intersection, function(leftData, rightData) {\n * return leftData + rightData;\n * });\n *\n * @example\n * // Check if an interval contains a specific time.\n * var dateToCheck = Cesium.JulianDate.fromIso8601('1982-09-08T11:30:00Z');\n * var containsDate = Cesium.TimeInterval.contains(timeInterval, dateToCheck);\n */\nfunction TimeInterval(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n /**\n * Gets or sets the start time of this interval.\n * @type {JulianDate}\n */\n this.start = defined(options.start)\n ? JulianDate.clone(options.start)\n : new JulianDate();\n\n /**\n * Gets or sets the stop time of this interval.\n * @type {JulianDate}\n */\n this.stop = defined(options.stop)\n ? JulianDate.clone(options.stop)\n : new JulianDate();\n\n /**\n * Gets or sets the data associated with this interval.\n * @type {*}\n */\n this.data = options.data;\n\n /**\n * Gets or sets whether or not the start time is included in this interval.\n * @type {Boolean}\n * @default true\n */\n this.isStartIncluded = defaultValue(options.isStartIncluded, true);\n\n /**\n * Gets or sets whether or not the stop time is included in this interval.\n * @type {Boolean}\n * @default true\n */\n this.isStopIncluded = defaultValue(options.isStopIncluded, true);\n}\n\nObject.defineProperties(TimeInterval.prototype, {\n /**\n * Gets whether or not this interval is empty.\n * @memberof TimeInterval.prototype\n * @type {Boolean}\n * @readonly\n */\n isEmpty: {\n get: function () {\n var stopComparedToStart = JulianDate.compare(this.stop, this.start);\n return (\n stopComparedToStart < 0 ||\n (stopComparedToStart === 0 &&\n (!this.isStartIncluded || !this.isStopIncluded))\n );\n },\n },\n});\n\nvar scratchInterval = {\n start: undefined,\n stop: undefined,\n isStartIncluded: undefined,\n isStopIncluded: undefined,\n data: undefined,\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} interval.\n *\n * @throws DeveloperError if options.iso8601 does not match proper formatting.\n *\n * @param {Object} options Object with the following properties:\n * @param {String} options.iso8601 An ISO 8601 interval.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @param {Object} [options.data] Arbitrary data associated with this interval.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.fromIso8601 = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.string(\"options.iso8601\", options.iso8601);\n //>>includeEnd('debug');\n\n var dates = options.iso8601.split(\"/\");\n if (dates.length !== 2) {\n throw new DeveloperError(\n \"options.iso8601 is an invalid ISO 8601 interval.\"\n );\n }\n var start = JulianDate.fromIso8601(dates[0]);\n var stop = JulianDate.fromIso8601(dates[1]);\n var isStartIncluded = defaultValue(options.isStartIncluded, true);\n var isStopIncluded = defaultValue(options.isStopIncluded, true);\n var data = options.data;\n\n if (!defined(result)) {\n scratchInterval.start = start;\n scratchInterval.stop = stop;\n scratchInterval.isStartIncluded = isStartIncluded;\n scratchInterval.isStopIncluded = isStopIncluded;\n scratchInterval.data = data;\n return new TimeInterval(scratchInterval);\n }\n\n result.start = start;\n result.stop = stop;\n result.isStartIncluded = isStartIncluded;\n result.isStopIncluded = isStopIncluded;\n result.data = data;\n return result;\n};\n\n/**\n * Creates an ISO8601 representation of the provided interval.\n *\n * @param {TimeInterval} timeInterval The interval to be converted.\n * @param {Number} [precision] The number of fractional digits used to represent the seconds component. By default, the most precise representation is used.\n * @returns {String} The ISO8601 representation of the provided interval.\n */\nTimeInterval.toIso8601 = function (timeInterval, precision) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"timeInterval\", timeInterval);\n //>>includeEnd('debug');\n\n return (\n JulianDate.toIso8601(timeInterval.start, precision) +\n \"/\" +\n JulianDate.toIso8601(timeInterval.stop, precision)\n );\n};\n\n/**\n * Duplicates the provided instance.\n *\n * @param {TimeInterval} [timeInterval] The instance to clone.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.clone = function (timeInterval, result) {\n if (!defined(timeInterval)) {\n return undefined;\n }\n if (!defined(result)) {\n return new TimeInterval(timeInterval);\n }\n result.start = timeInterval.start;\n result.stop = timeInterval.stop;\n result.isStartIncluded = timeInterval.isStartIncluded;\n result.isStopIncluded = timeInterval.isStopIncluded;\n result.data = timeInterval.data;\n return result;\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeInterval} [left] The first instance.\n * @param {TimeInterval} [right] The second instance.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @returns {Boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nTimeInterval.equals = function (left, right, dataComparer) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n ((left.isEmpty && right.isEmpty) ||\n (left.isStartIncluded === right.isStartIncluded &&\n left.isStopIncluded === right.isStopIncluded &&\n JulianDate.equals(left.start, right.start) &&\n JulianDate.equals(left.stop, right.stop) &&\n (left.data === right.data ||\n (defined(dataComparer) && dataComparer(left.data, right.data))))))\n );\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other. That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {TimeInterval} [left] The first instance.\n * @param {TimeInterval} [right] The second instance.\n * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @returns {Boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nTimeInterval.equalsEpsilon = function (left, right, epsilon, dataComparer) {\n epsilon = defaultValue(epsilon, 0);\n\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n ((left.isEmpty && right.isEmpty) ||\n (left.isStartIncluded === right.isStartIncluded &&\n left.isStopIncluded === right.isStopIncluded &&\n JulianDate.equalsEpsilon(left.start, right.start, epsilon) &&\n JulianDate.equalsEpsilon(left.stop, right.stop, epsilon) &&\n (left.data === right.data ||\n (defined(dataComparer) && dataComparer(left.data, right.data))))))\n );\n};\n\n/**\n * Computes the intersection of two intervals, optionally merging their data.\n *\n * @param {TimeInterval} left The first interval.\n * @param {TimeInterval} [right] The second interval.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @param {TimeInterval.MergeCallback} [mergeCallback] A function which merges the data of the two intervals. If omitted, the data from the left interval will be used.\n * @returns {TimeInterval} The modified result parameter.\n */\nTimeInterval.intersect = function (left, right, result, mergeCallback) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"left\", left);\n //>>includeEnd('debug');\n\n if (!defined(right)) {\n return TimeInterval.clone(TimeInterval.EMPTY, result);\n }\n\n var leftStart = left.start;\n var leftStop = left.stop;\n\n var rightStart = right.start;\n var rightStop = right.stop;\n\n var intersectsStartRight =\n JulianDate.greaterThanOrEquals(rightStart, leftStart) &&\n JulianDate.greaterThanOrEquals(leftStop, rightStart);\n var intersectsStartLeft =\n !intersectsStartRight &&\n JulianDate.lessThanOrEquals(rightStart, leftStart) &&\n JulianDate.lessThanOrEquals(leftStart, rightStop);\n\n if (!intersectsStartRight && !intersectsStartLeft) {\n return TimeInterval.clone(TimeInterval.EMPTY, result);\n }\n\n var leftIsStartIncluded = left.isStartIncluded;\n var leftIsStopIncluded = left.isStopIncluded;\n var rightIsStartIncluded = right.isStartIncluded;\n var rightIsStopIncluded = right.isStopIncluded;\n var leftLessThanRight = JulianDate.lessThan(leftStop, rightStop);\n\n if (!defined(result)) {\n result = new TimeInterval();\n }\n\n result.start = intersectsStartRight ? rightStart : leftStart;\n result.isStartIncluded =\n (leftIsStartIncluded && rightIsStartIncluded) ||\n (!JulianDate.equals(rightStart, leftStart) &&\n ((intersectsStartRight && rightIsStartIncluded) ||\n (intersectsStartLeft && leftIsStartIncluded)));\n result.stop = leftLessThanRight ? leftStop : rightStop;\n result.isStopIncluded = leftLessThanRight\n ? leftIsStopIncluded\n : (leftIsStopIncluded && rightIsStopIncluded) ||\n (!JulianDate.equals(rightStop, leftStop) && rightIsStopIncluded);\n result.data = defined(mergeCallback)\n ? mergeCallback(left.data, right.data)\n : left.data;\n return result;\n};\n\n/**\n * Checks if the specified date is inside the provided interval.\n *\n * @param {TimeInterval} timeInterval The interval.\n * @param {JulianDate} julianDate The date to check.\n * @returns {Boolean} <code>true</code> if the interval contains the specified date, <code>false</code> otherwise.\n */\nTimeInterval.contains = function (timeInterval, julianDate) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"timeInterval\", timeInterval);\n Check.typeOf.object(\"julianDate\", julianDate);\n //>>includeEnd('debug');\n\n if (timeInterval.isEmpty) {\n return false;\n }\n\n var startComparedToDate = JulianDate.compare(timeInterval.start, julianDate);\n if (startComparedToDate === 0) {\n return timeInterval.isStartIncluded;\n }\n\n var dateComparedToStop = JulianDate.compare(julianDate, timeInterval.stop);\n if (dateComparedToStop === 0) {\n return timeInterval.isStopIncluded;\n }\n\n return startComparedToDate < 0 && dateComparedToStop < 0;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.prototype.clone = function (result) {\n return TimeInterval.clone(this, result);\n};\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeInterval} [right] The right hand side interval.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTimeInterval.prototype.equals = function (right, dataComparer) {\n return TimeInterval.equals(this, right, dataComparer);\n};\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {TimeInterval} [right] The right hand side interval.\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @returns {Boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nTimeInterval.prototype.equalsEpsilon = function (right, epsilon, dataComparer) {\n return TimeInterval.equalsEpsilon(this, right, epsilon, dataComparer);\n};\n\n/**\n * Creates a string representing this TimeInterval in ISO8601 format.\n *\n * @returns {String} A string representing this TimeInterval in ISO8601 format.\n */\nTimeInterval.prototype.toString = function () {\n return TimeInterval.toIso8601(this);\n};\n\n/**\n * An immutable empty interval.\n *\n * @type {TimeInterval}\n * @constant\n */\nTimeInterval.EMPTY = Object.freeze(\n new TimeInterval({\n start: new JulianDate(),\n stop: new JulianDate(),\n isStartIncluded: false,\n isStopIncluded: false,\n })\n);\n\n/**\n * Function interface for merging interval data.\n * @callback TimeInterval.MergeCallback\n *\n * @param {*} leftData The first data instance.\n * @param {*} rightData The second data instance.\n * @returns {*} The result of merging the two data instances.\n */\n\n/**\n * Function interface for comparing interval data.\n * @callback TimeInterval.DataComparer\n * @param {*} leftData The first data instance.\n * @param {*} rightData The second data instance.\n * @returns {Boolean} <code>true</code> if the provided instances are equal, <code>false</code> otherwise.\n */\nexport default TimeInterval;\n","import JulianDate from \"./JulianDate.js\";\nimport TimeInterval from \"./TimeInterval.js\";\n\nvar MINIMUM_VALUE = Object.freeze(\n JulianDate.fromIso8601(\"0000-01-01T00:00:00Z\")\n);\nvar MAXIMUM_VALUE = Object.freeze(\n JulianDate.fromIso8601(\"9999-12-31T24:00:00Z\")\n);\nvar MAXIMUM_INTERVAL = Object.freeze(\n new TimeInterval({\n start: MINIMUM_VALUE,\n stop: MAXIMUM_VALUE,\n })\n);\n\n/**\n * Constants related to ISO8601 support.\n *\n * @namespace\n *\n * @see {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601 on Wikipedia}\n * @see JulianDate\n * @see TimeInterval\n */\nvar Iso8601 = {\n /**\n * A {@link JulianDate} representing the earliest time representable by an ISO8601 date.\n * This is equivalent to the date string '0000-01-01T00:00:00Z'\n *\n * @type {JulianDate}\n * @constant\n */\n MINIMUM_VALUE: MINIMUM_VALUE,\n\n /**\n * A {@link JulianDate} representing the latest time representable by an ISO8601 date.\n * This is equivalent to the date string '9999-12-31T24:00:00Z'\n *\n * @type {JulianDate}\n * @constant\n */\n MAXIMUM_VALUE: MAXIMUM_VALUE,\n\n /**\n * A {@link TimeInterval} representing the largest interval representable by an ISO8601 interval.\n * This is equivalent to the interval string '0000-01-01T00:00:00Z/9999-12-31T24:00:00Z'\n *\n * @type {JulianDate}\n * @constant\n */\n MAXIMUM_INTERVAL: MAXIMUM_INTERVAL,\n};\nexport default Iso8601;\n","/**\n * This enumerated type is for representing keyboard modifiers. These are keys\n * that are held down in addition to other event types.\n *\n * @enum {Number}\n */\nvar KeyboardEventModifier = {\n /**\n * Represents the shift key being held down.\n *\n * @type {Number}\n * @constant\n */\n SHIFT: 0,\n\n /**\n * Represents the control key being held down.\n *\n * @type {Number}\n * @constant\n */\n CTRL: 1,\n\n /**\n * Represents the alt key being held down.\n *\n * @type {Number}\n * @constant\n */\n ALT: 2,\n};\nexport default Object.freeze(KeyboardEventModifier);\n","import defined from \"./defined.js\";\n\n/**\n * An {@link InterpolationAlgorithm} for performing Lagrange interpolation.\n *\n * @namespace LagrangePolynomialApproximation\n */\nvar LagrangePolynomialApproximation = {\n type: \"Lagrange\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n *\n * @param {Number} degree The desired degree of interpolation.\n * @returns {Number} The number of required data points needed for the desired degree of interpolation.\n */\nLagrangePolynomialApproximation.getRequiredDataPoints = function (degree) {\n return Math.max(degree + 1.0, 2);\n};\n\n/**\n * Interpolates values using Lagrange Polynomial Approximation.\n *\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number[]} [result] An existing array into which to store the result.\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nLagrangePolynomialApproximation.interpolateOrderZero = function (\n x,\n xTable,\n yTable,\n yStride,\n result\n) {\n if (!defined(result)) {\n result = new Array(yStride);\n }\n\n var i;\n var j;\n var length = xTable.length;\n\n for (i = 0; i < yStride; i++) {\n result[i] = 0;\n }\n\n for (i = 0; i < length; i++) {\n var coefficient = 1;\n\n for (j = 0; j < length; j++) {\n if (j !== i) {\n var diffX = xTable[i] - xTable[j];\n coefficient *= (x - xTable[j]) / diffX;\n }\n }\n\n for (j = 0; j < yStride; j++) {\n result[j] += coefficient * yTable[i * yStride + j];\n }\n }\n\n return result;\n};\nexport default LagrangePolynomialApproximation;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * An {@link InterpolationAlgorithm} for performing linear interpolation.\n *\n * @namespace LinearApproximation\n */\nvar LinearApproximation = {\n type: \"Linear\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n * Since linear interpolation can only generate a first degree polynomial, this function\n * always returns 2.\n * @param {Number} degree The desired degree of interpolation.\n * @returns {Number} This function always returns 2.\n *\n */\nLinearApproximation.getRequiredDataPoints = function (degree) {\n return 2;\n};\n\n/**\n * Interpolates values using linear approximation.\n *\n * @param {Number} x The independent variable for which the dependent variables will be interpolated.\n * @param {Number[]} xTable The array of independent variables to use to interpolate. The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {Number[]} yTable The array of dependent variables to use to interpolate. For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {Number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {Number[]} [result] An existing array into which to store the result.\n * @returns {Number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nLinearApproximation.interpolateOrderZero = function (\n x,\n xTable,\n yTable,\n yStride,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (xTable.length !== 2) {\n throw new DeveloperError(\n \"The xTable provided to the linear interpolator must have exactly two elements.\"\n );\n } else if (yStride <= 0) {\n throw new DeveloperError(\n \"There must be at least 1 dependent variable for each independent variable.\"\n );\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Array(yStride);\n }\n\n var i;\n var y0;\n var y1;\n var x0 = xTable[0];\n var x1 = xTable[1];\n\n //>>includeStart('debug', pragmas.debug);\n if (x0 === x1) {\n throw new DeveloperError(\n \"Divide by zero error: xTable[0] and xTable[1] are equal\"\n );\n }\n //>>includeEnd('debug');\n\n for (i = 0; i < yStride; i++) {\n y0 = yTable[i];\n y1 = yTable[i + yStride];\n result[i] = ((y1 - y0) * x + x1 * y0 - x0 * y1) / (x1 - x0);\n }\n\n return result;\n};\nexport default LinearApproximation;\n","import when from \"../ThirdParty/when.js\";\nimport CompressedTextureBuffer from \"./CompressedTextureBuffer.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Resource from \"./Resource.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\n\nvar transcodeTaskProcessor = new TaskProcessor(\n \"transcodeCRNToDXT\",\n Number.POSITIVE_INFINITY\n);\n\n/**\n * Asynchronously loads and parses the given URL to a CRN file or parses the raw binary data of a CRN file.\n * Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded,\n * or reject if the URL failed to load or failed to parse the data. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @function loadCRN\n *\n * @param {Resource|String|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer.\n * @returns {Promise.<CompressedTextureBuffer>|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @exception {RuntimeError} Unsupported compressed format.\n *\n * @example\n * // load a single URL asynchronously\n * Cesium.loadCRN('some/url').then(function(textureData) {\n * var width = textureData.width;\n * var height = textureData.height;\n * var format = textureData.internalFormat;\n * var arrayBufferView = textureData.bufferView;\n * // use the data to create a texture\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link https://github.com/BinomialLLC/crunch|crunch DXTc texture compression and transcoding library}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nfunction loadCRN(resourceOrUrlOrBuffer) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(resourceOrUrlOrBuffer)) {\n throw new DeveloperError(\"resourceOrUrlOrBuffer is required.\");\n }\n //>>includeEnd('debug');\n\n var loadPromise;\n if (\n resourceOrUrlOrBuffer instanceof ArrayBuffer ||\n ArrayBuffer.isView(resourceOrUrlOrBuffer)\n ) {\n loadPromise = when.resolve(resourceOrUrlOrBuffer);\n } else {\n var resource = Resource.createIfNeeded(resourceOrUrlOrBuffer);\n loadPromise = resource.fetchArrayBuffer();\n }\n\n if (!defined(loadPromise)) {\n return undefined;\n }\n\n return loadPromise\n .then(function (data) {\n if (!defined(data)) {\n return;\n }\n var transferrableObjects = [];\n if (data instanceof ArrayBuffer) {\n transferrableObjects.push(data);\n } else if (\n data.byteOffset === 0 &&\n data.byteLength === data.buffer.byteLength\n ) {\n transferrableObjects.push(data.buffer);\n } else {\n // data is a view of an array buffer. need to copy so it is transferrable to web worker\n data = data.slice(0, data.length);\n transferrableObjects.push(data.buffer);\n }\n\n return transcodeTaskProcessor.scheduleTask(data, transferrableObjects);\n })\n .then(function (compressedTextureBuffer) {\n return CompressedTextureBuffer.clone(compressedTextureBuffer);\n });\n}\nexport default loadCRN;\n","import when from \"../ThirdParty/when.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * @private\n */\nfunction loadImageFromTypedArray(options) {\n var uint8Array = options.uint8Array;\n var format = options.format;\n var request = options.request;\n var flipY = defaultValue(options.flipY, false);\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"uint8Array\", uint8Array);\n Check.typeOf.string(\"format\", format);\n //>>includeEnd('debug');\n\n var blob = new Blob([uint8Array], {\n type: format,\n });\n\n var blobUrl;\n return Resource.supportsImageBitmapOptions()\n .then(function (result) {\n if (result) {\n return when(\n Resource.createImageBitmapFromBlob(blob, {\n flipY: flipY,\n premultiplyAlpha: false,\n })\n );\n }\n\n blobUrl = window.URL.createObjectURL(blob);\n var resource = new Resource({\n url: blobUrl,\n request: request,\n });\n\n return resource.fetchImage({\n flipY: flipY,\n });\n })\n .then(function (result) {\n if (defined(blobUrl)) {\n window.URL.revokeObjectURL(blobUrl);\n }\n return result;\n })\n .otherwise(function (error) {\n if (defined(blobUrl)) {\n window.URL.revokeObjectURL(blobUrl);\n }\n return when.reject(error);\n });\n}\nexport default loadImageFromTypedArray;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * The data type of a pixel.\n *\n * @enum {Number}\n * @see PostProcessStage\n */\nvar PixelDatatype = {\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n FLOAT: WebGLConstants.FLOAT,\n HALF_FLOAT: WebGLConstants.HALF_FLOAT_OES,\n UNSIGNED_INT_24_8: WebGLConstants.UNSIGNED_INT_24_8,\n UNSIGNED_SHORT_4_4_4_4: WebGLConstants.UNSIGNED_SHORT_4_4_4_4,\n UNSIGNED_SHORT_5_5_5_1: WebGLConstants.UNSIGNED_SHORT_5_5_5_1,\n UNSIGNED_SHORT_5_6_5: WebGLConstants.UNSIGNED_SHORT_5_6_5,\n};\n\n/**\n @private\n*/\nPixelDatatype.toWebGLConstant = function (pixelDatatype, context) {\n switch (pixelDatatype) {\n case PixelDatatype.UNSIGNED_BYTE:\n return WebGLConstants.UNSIGNED_BYTE;\n case PixelDatatype.UNSIGNED_SHORT:\n return WebGLConstants.UNSIGNED_SHORT;\n case PixelDatatype.UNSIGNED_INT:\n return WebGLConstants.UNSIGNED_INT;\n case PixelDatatype.FLOAT:\n return WebGLConstants.FLOAT;\n case PixelDatatype.HALF_FLOAT:\n return context.webgl2\n ? WebGLConstants.HALF_FLOAT\n : WebGLConstants.HALF_FLOAT_OES;\n case PixelDatatype.UNSIGNED_INT_24_8:\n return WebGLConstants.UNSIGNED_INT_24_8;\n case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\n return WebGLConstants.UNSIGNED_SHORT_4_4_4_4;\n case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\n return WebGLConstants.UNSIGNED_SHORT_5_5_5_1;\n case PixelDatatype.UNSIGNED_SHORT_5_6_5:\n return PixelDatatype.UNSIGNED_SHORT_5_6_5;\n }\n};\n\n/**\n @private\n*/\nPixelDatatype.isPacked = function (pixelDatatype) {\n return (\n pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\n );\n};\n\n/**\n @private\n*/\nPixelDatatype.sizeInBytes = function (pixelDatatype) {\n switch (pixelDatatype) {\n case PixelDatatype.UNSIGNED_BYTE:\n return 1;\n case PixelDatatype.UNSIGNED_SHORT:\n case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\n case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\n case PixelDatatype.UNSIGNED_SHORT_5_6_5:\n case PixelDatatype.HALF_FLOAT:\n return 2;\n case PixelDatatype.UNSIGNED_INT:\n case PixelDatatype.FLOAT:\n case PixelDatatype.UNSIGNED_INT_24_8:\n return 4;\n }\n};\n\n/**\n @private\n*/\nPixelDatatype.validate = function (pixelDatatype) {\n return (\n pixelDatatype === PixelDatatype.UNSIGNED_BYTE ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT ||\n pixelDatatype === PixelDatatype.UNSIGNED_INT ||\n pixelDatatype === PixelDatatype.FLOAT ||\n pixelDatatype === PixelDatatype.HALF_FLOAT ||\n pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\n );\n};\n\nexport default Object.freeze(PixelDatatype);\n","import PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * The format of a pixel, i.e., the number of components it has and what they represent.\n *\n * @enum {Number}\n */\nvar PixelFormat = {\n /**\n * A pixel format containing a depth value.\n *\n * @type {Number}\n * @constant\n */\n DEPTH_COMPONENT: WebGLConstants.DEPTH_COMPONENT,\n\n /**\n * A pixel format containing a depth and stencil value, most often used with {@link PixelDatatype.UNSIGNED_INT_24_8}.\n *\n * @type {Number}\n * @constant\n */\n DEPTH_STENCIL: WebGLConstants.DEPTH_STENCIL,\n\n /**\n * A pixel format containing an alpha channel.\n *\n * @type {Number}\n * @constant\n */\n ALPHA: WebGLConstants.ALPHA,\n\n /**\n * A pixel format containing red, green, and blue channels.\n *\n * @type {Number}\n * @constant\n */\n RGB: WebGLConstants.RGB,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels.\n *\n * @type {Number}\n * @constant\n */\n RGBA: WebGLConstants.RGBA,\n\n /**\n * A pixel format containing a luminance (intensity) channel.\n *\n * @type {Number}\n * @constant\n */\n LUMINANCE: WebGLConstants.LUMINANCE,\n\n /**\n * A pixel format containing luminance (intensity) and alpha channels.\n *\n * @type {Number}\n * @constant\n */\n LUMINANCE_ALPHA: WebGLConstants.LUMINANCE_ALPHA,\n\n /**\n * A pixel format containing red, green, and blue channels that is DXT1 compressed.\n *\n * @type {Number}\n * @constant\n */\n RGB_DXT1: WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels that is DXT1 compressed.\n *\n * @type {Number}\n * @constant\n */\n RGBA_DXT1: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels that is DXT3 compressed.\n *\n * @type {Number}\n * @constant\n */\n RGBA_DXT3: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels that is DXT5 compressed.\n *\n * @type {Number}\n * @constant\n */\n RGBA_DXT5: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n\n /**\n * A pixel format containing red, green, and blue channels that is PVR 4bpp compressed.\n *\n * @type {Number}\n * @constant\n */\n RGB_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n\n /**\n * A pixel format containing red, green, and blue channels that is PVR 2bpp compressed.\n *\n * @type {Number}\n * @constant\n */\n RGB_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels that is PVR 4bpp compressed.\n *\n * @type {Number}\n * @constant\n */\n RGBA_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n\n /**\n * A pixel format containing red, green, blue, and alpha channels that is PVR 2bpp compressed.\n *\n * @type {Number}\n * @constant\n */\n RGBA_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n\n /**\n * A pixel format containing red, green, and blue channels that is ETC1 compressed.\n *\n * @type {Number}\n * @constant\n */\n RGB_ETC1: WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL,\n};\n\n/**\n * @private\n */\nPixelFormat.componentsLength = function (pixelFormat) {\n switch (pixelFormat) {\n case PixelFormat.RGB:\n return 3;\n case PixelFormat.RGBA:\n return 4;\n case PixelFormat.LUMINANCE_ALPHA:\n return 2;\n case PixelFormat.ALPHA:\n case PixelFormat.LUMINANCE:\n return 1;\n default:\n return 1;\n }\n};\n\n/**\n * @private\n */\nPixelFormat.validate = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.DEPTH_COMPONENT ||\n pixelFormat === PixelFormat.DEPTH_STENCIL ||\n pixelFormat === PixelFormat.ALPHA ||\n pixelFormat === PixelFormat.RGB ||\n pixelFormat === PixelFormat.RGBA ||\n pixelFormat === PixelFormat.LUMINANCE ||\n pixelFormat === PixelFormat.LUMINANCE_ALPHA ||\n pixelFormat === PixelFormat.RGB_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT3 ||\n pixelFormat === PixelFormat.RGBA_DXT5 ||\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\n pixelFormat === PixelFormat.RGB_ETC1\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isColorFormat = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.ALPHA ||\n pixelFormat === PixelFormat.RGB ||\n pixelFormat === PixelFormat.RGBA ||\n pixelFormat === PixelFormat.LUMINANCE ||\n pixelFormat === PixelFormat.LUMINANCE_ALPHA\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isDepthFormat = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.DEPTH_COMPONENT ||\n pixelFormat === PixelFormat.DEPTH_STENCIL\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isCompressedFormat = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.RGB_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT3 ||\n pixelFormat === PixelFormat.RGBA_DXT5 ||\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\n pixelFormat === PixelFormat.RGB_ETC1\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isDXTFormat = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.RGB_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT1 ||\n pixelFormat === PixelFormat.RGBA_DXT3 ||\n pixelFormat === PixelFormat.RGBA_DXT5\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isPVRTCFormat = function (pixelFormat) {\n return (\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1\n );\n};\n\n/**\n * @private\n */\nPixelFormat.isETC1Format = function (pixelFormat) {\n return pixelFormat === PixelFormat.RGB_ETC1;\n};\n\n/**\n * @private\n */\nPixelFormat.compressedTextureSizeInBytes = function (\n pixelFormat,\n width,\n height\n) {\n switch (pixelFormat) {\n case PixelFormat.RGB_DXT1:\n case PixelFormat.RGBA_DXT1:\n case PixelFormat.RGB_ETC1:\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n\n case PixelFormat.RGBA_DXT3:\n case PixelFormat.RGBA_DXT5:\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n\n case PixelFormat.RGB_PVRTC_4BPPV1:\n case PixelFormat.RGBA_PVRTC_4BPPV1:\n return Math.floor((Math.max(width, 8) * Math.max(height, 8) * 4 + 7) / 8);\n\n case PixelFormat.RGB_PVRTC_2BPPV1:\n case PixelFormat.RGBA_PVRTC_2BPPV1:\n return Math.floor(\n (Math.max(width, 16) * Math.max(height, 8) * 2 + 7) / 8\n );\n\n default:\n return 0;\n }\n};\n\n/**\n * @private\n */\nPixelFormat.textureSizeInBytes = function (\n pixelFormat,\n pixelDatatype,\n width,\n height\n) {\n var componentsLength = PixelFormat.componentsLength(pixelFormat);\n if (PixelDatatype.isPacked(pixelDatatype)) {\n componentsLength = 1;\n }\n return (\n componentsLength * PixelDatatype.sizeInBytes(pixelDatatype) * width * height\n );\n};\n\n/**\n * @private\n */\nPixelFormat.alignmentInBytes = function (pixelFormat, pixelDatatype, width) {\n var mod =\n PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, 1) % 4;\n return mod === 0 ? 4 : mod === 2 ? 2 : 1;\n};\n\n/**\n * @private\n */\nPixelFormat.createTypedArray = function (\n pixelFormat,\n pixelDatatype,\n width,\n height\n) {\n var constructor;\n var sizeInBytes = PixelDatatype.sizeInBytes(pixelDatatype);\n if (sizeInBytes === Uint8Array.BYTES_PER_ELEMENT) {\n constructor = Uint8Array;\n } else if (sizeInBytes === Uint16Array.BYTES_PER_ELEMENT) {\n constructor = Uint16Array;\n } else if (\n sizeInBytes === Float32Array.BYTES_PER_ELEMENT &&\n pixelDatatype === PixelDatatype.FLOAT\n ) {\n constructor = Float32Array;\n } else {\n constructor = Uint32Array;\n }\n\n var size = PixelFormat.componentsLength(pixelFormat) * width * height;\n return new constructor(size);\n};\n\n/**\n * @private\n */\nPixelFormat.flipY = function (\n bufferView,\n pixelFormat,\n pixelDatatype,\n width,\n height\n) {\n if (height === 1) {\n return bufferView;\n }\n var flipped = PixelFormat.createTypedArray(\n pixelFormat,\n pixelDatatype,\n width,\n height\n );\n var numberOfComponents = PixelFormat.componentsLength(pixelFormat);\n var textureWidth = width * numberOfComponents;\n for (var i = 0; i < height; ++i) {\n var row = i * width * numberOfComponents;\n var flippedRow = (height - i - 1) * width * numberOfComponents;\n for (var j = 0; j < textureWidth; ++j) {\n flipped[flippedRow + j] = bufferView[row + j];\n }\n }\n return flipped;\n};\n\n/**\n * @private\n */\nPixelFormat.toInternalFormat = function (pixelFormat, pixelDatatype, context) {\n // WebGL 1 require internalFormat to be the same as PixelFormat\n if (!context.webgl2) {\n return pixelFormat;\n }\n\n // Convert pixelFormat to correct internalFormat for WebGL 2\n if (pixelFormat === PixelFormat.DEPTH_STENCIL) {\n return WebGLConstants.DEPTH24_STENCIL8;\n }\n\n if (pixelFormat === PixelFormat.DEPTH_COMPONENT) {\n if (pixelDatatype === PixelDatatype.UNSIGNED_SHORT) {\n return WebGLConstants.DEPTH_COMPONENT16;\n } else if (pixelDatatype === PixelDatatype.UNSIGNED_INT) {\n return WebGLConstants.DEPTH_COMPONENT24;\n }\n }\n\n if (pixelDatatype === PixelDatatype.FLOAT) {\n switch (pixelFormat) {\n case PixelFormat.RGBA:\n return WebGLConstants.RGBA32F;\n case PixelFormat.RGB:\n return WebGLConstants.RGB32F;\n case PixelFormat.RG:\n return WebGLConstants.RG32F;\n case PixelFormat.R:\n return WebGLConstants.R32F;\n }\n }\n\n if (pixelDatatype === PixelDatatype.HALF_FLOAT) {\n switch (pixelFormat) {\n case PixelFormat.RGBA:\n return WebGLConstants.RGBA16F;\n case PixelFormat.RGB:\n return WebGLConstants.RGB16F;\n case PixelFormat.RG:\n return WebGLConstants.RG16F;\n case PixelFormat.R:\n return WebGLConstants.R16F;\n }\n }\n\n return pixelFormat;\n};\n\nexport default Object.freeze(PixelFormat);\n","import when from \"../ThirdParty/when.js\";\nimport Check from \"./Check.js\";\nimport CompressedTextureBuffer from \"./CompressedTextureBuffer.js\";\nimport defined from \"./defined.js\";\nimport PixelFormat from \"./PixelFormat.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * Asynchronously loads and parses the given URL to a KTX file or parses the raw binary data of a KTX file.\n * Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded,\n * or reject if the URL failed to load or failed to parse the data. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n * <p>\n * The following are part of the KTX format specification but are not supported:\n * <ul>\n * <li>Big-endian files</li>\n * <li>Metadata</li>\n * <li>3D textures</li>\n * <li>Texture Arrays</li>\n * <li>Cubemaps</li>\n * <li>Mipmaps</li>\n * </ul>\n * </p>\n *\n * @function loadKTX\n *\n * @param {Resource|String|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer.\n * @returns {Promise.<CompressedTextureBuffer>|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @exception {RuntimeError} Invalid KTX file.\n * @exception {RuntimeError} File is the wrong endianness.\n * @exception {RuntimeError} glInternalFormat is not a valid format.\n * @exception {RuntimeError} glType must be zero when the texture is compressed.\n * @exception {RuntimeError} The type size for compressed textures must be 1.\n * @exception {RuntimeError} glFormat must be zero when the texture is compressed.\n * @exception {RuntimeError} Generating mipmaps for a compressed texture is unsupported.\n * @exception {RuntimeError} The base internal format must be the same as the format for uncompressed textures.\n * @exception {RuntimeError} 3D textures are not supported.\n * @exception {RuntimeError} Texture arrays are not supported.\n * @exception {RuntimeError} Cubemaps are not supported.\n *\n * @example\n * // load a single URL asynchronously\n * Cesium.loadKTX('some/url').then(function(ktxData) {\n * var width = ktxData.width;\n * var height = ktxData.height;\n * var format = ktxData.internalFormat;\n * var arrayBufferView = ktxData.bufferView;\n * // use the data to create a texture\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/|KTX file format}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nfunction loadKTX(resourceOrUrlOrBuffer) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"resourceOrUrlOrBuffer\", resourceOrUrlOrBuffer);\n //>>includeEnd('debug');\n\n var loadPromise;\n if (\n resourceOrUrlOrBuffer instanceof ArrayBuffer ||\n ArrayBuffer.isView(resourceOrUrlOrBuffer)\n ) {\n loadPromise = when.resolve(resourceOrUrlOrBuffer);\n } else {\n var resource = Resource.createIfNeeded(resourceOrUrlOrBuffer);\n loadPromise = resource.fetchArrayBuffer();\n }\n\n if (!defined(loadPromise)) {\n return undefined;\n }\n\n return loadPromise.then(function (data) {\n if (defined(data)) {\n return parseKTX(data);\n }\n });\n}\n\nvar fileIdentifier = [\n 0xab,\n 0x4b,\n 0x54,\n 0x58,\n 0x20,\n 0x31,\n 0x31,\n 0xbb,\n 0x0d,\n 0x0a,\n 0x1a,\n 0x0a,\n];\nvar endiannessTest = 0x04030201;\nvar faceOrder = [\n \"positiveX\",\n \"negativeX\",\n \"positiveY\",\n \"negativeY\",\n \"positiveZ\",\n \"negativeZ\",\n];\n\nvar sizeOfUint32 = 4;\n\nfunction parseKTX(data) {\n var byteBuffer = new Uint8Array(data);\n\n var isKTX = true;\n var i;\n for (i = 0; i < fileIdentifier.length; ++i) {\n if (fileIdentifier[i] !== byteBuffer[i]) {\n isKTX = false;\n break;\n }\n }\n\n if (!isKTX) {\n throw new RuntimeError(\"Invalid KTX file.\");\n }\n\n var view;\n var byteOffset;\n\n if (defined(data.buffer)) {\n view = new DataView(data.buffer);\n byteOffset = data.byteOffset;\n } else {\n view = new DataView(data);\n byteOffset = 0;\n }\n\n byteOffset += 12; // skip identifier\n\n var endianness = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n if (endianness !== endiannessTest) {\n throw new RuntimeError(\"File is the wrong endianness.\");\n }\n\n var glType = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var glTypeSize = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var glFormat = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var glInternalFormat = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var glBaseInternalFormat = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var pixelWidth = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var pixelHeight = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var pixelDepth = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var numberOfArrayElements = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var numberOfFaces = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var numberOfMipmapLevels = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var bytesOfKeyValueByteSize = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n // skip metadata\n byteOffset += bytesOfKeyValueByteSize;\n\n var imageSize = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var texture;\n if (defined(data.buffer)) {\n texture = new Uint8Array(data.buffer, byteOffset, imageSize);\n } else {\n texture = new Uint8Array(data, byteOffset, imageSize);\n }\n\n // Some tools use a sized internal format.\n // See table 2: https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml\n if (glInternalFormat === WebGLConstants.RGB8) {\n glInternalFormat = PixelFormat.RGB;\n } else if (glInternalFormat === WebGLConstants.RGBA8) {\n glInternalFormat = PixelFormat.RGBA;\n }\n\n if (!PixelFormat.validate(glInternalFormat)) {\n throw new RuntimeError(\"glInternalFormat is not a valid format.\");\n }\n\n if (PixelFormat.isCompressedFormat(glInternalFormat)) {\n if (glType !== 0) {\n throw new RuntimeError(\n \"glType must be zero when the texture is compressed.\"\n );\n }\n if (glTypeSize !== 1) {\n throw new RuntimeError(\n \"The type size for compressed textures must be 1.\"\n );\n }\n if (glFormat !== 0) {\n throw new RuntimeError(\n \"glFormat must be zero when the texture is compressed.\"\n );\n }\n } else if (glType !== WebGLConstants.UNSIGNED_BYTE) {\n throw new RuntimeError(\"Only unsigned byte buffers are supported.\");\n } else if (glBaseInternalFormat !== glFormat) {\n throw new RuntimeError(\n \"The base internal format must be the same as the format for uncompressed textures.\"\n );\n }\n\n if (pixelDepth !== 0) {\n throw new RuntimeError(\"3D textures are unsupported.\");\n }\n\n if (numberOfArrayElements !== 0) {\n throw new RuntimeError(\"Texture arrays are unsupported.\");\n }\n\n var offset = texture.byteOffset;\n var mipmaps = new Array(numberOfMipmapLevels);\n for (i = 0; i < numberOfMipmapLevels; ++i) {\n var level = (mipmaps[i] = {});\n for (var j = 0; j < numberOfFaces; ++j) {\n var width = pixelWidth >> i;\n var height = pixelHeight >> i;\n var levelSize = PixelFormat.isCompressedFormat(glInternalFormat)\n ? PixelFormat.compressedTextureSizeInBytes(\n glInternalFormat,\n width,\n height\n )\n : PixelFormat.textureSizeInBytes(\n glInternalFormat,\n glType,\n width,\n height\n );\n var levelBuffer = new Uint8Array(texture.buffer, offset, levelSize);\n level[faceOrder[j]] = new CompressedTextureBuffer(\n glInternalFormat,\n width,\n height,\n levelBuffer\n );\n offset += levelSize;\n }\n offset += 3 - ((offset + 3) % 4) + 4;\n }\n\n var result = mipmaps;\n if (numberOfFaces === 1) {\n for (i = 0; i < numberOfMipmapLevels; ++i) {\n result[i] = result[i][faceOrder[0]];\n }\n }\n if (numberOfMipmapLevels === 1) {\n result = result[0];\n }\n\n return result;\n}\nexport default loadKTX;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\n\n/**\n * A wrapper around arrays so that the internal length of the array can be manually managed.\n *\n * @alias ManagedArray\n * @constructor\n * @private\n *\n * @param {Number} [length=0] The initial length of the array.\n */\nfunction ManagedArray(length) {\n length = defaultValue(length, 0);\n this._array = new Array(length);\n this._length = length;\n}\n\nObject.defineProperties(ManagedArray.prototype, {\n /**\n * Gets or sets the length of the array.\n * If the set length is greater than the length of the internal array, the internal array is resized.\n *\n * @memberof ManagedArray.prototype\n * @type Number\n */\n length: {\n get: function () {\n return this._length;\n },\n set: function (length) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n //>>includeEnd('debug');\n var array = this._array;\n var originalLength = this._length;\n if (length < originalLength) {\n // Remove trailing references\n for (var i = length; i < originalLength; ++i) {\n array[i] = undefined;\n }\n } else if (length > array.length) {\n array.length = length;\n }\n this._length = length;\n },\n },\n\n /**\n * Gets the internal array.\n *\n * @memberof ManagedArray.prototype\n * @type Array\n * @readonly\n */\n values: {\n get: function () {\n return this._array;\n },\n },\n});\n\n/**\n * Gets the element at an index.\n *\n * @param {Number} index The index to get.\n */\nManagedArray.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThan(\"index\", index, this._array.length);\n //>>includeEnd('debug');\n\n return this._array[index];\n};\n\n/**\n * Sets the element at an index. Resizes the array if index is greater than the length of the array.\n *\n * @param {Number} index The index to set.\n * @param {*} element The element to set at index.\n */\nManagedArray.prototype.set = function (index, element) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"index\", index);\n //>>includeEnd('debug');\n\n if (index >= this._length) {\n this.length = index + 1;\n }\n this._array[index] = element;\n};\n\n/**\n * Returns the last element in the array without modifying the array.\n *\n * @returns {*} The last element in the array.\n */\nManagedArray.prototype.peek = function () {\n return this._array[this._length - 1];\n};\n\n/**\n * Push an element into the array.\n *\n * @param {*} element The element to push.\n */\nManagedArray.prototype.push = function (element) {\n var index = this.length++;\n this._array[index] = element;\n};\n\n/**\n * Pop an element from the array.\n *\n * @returns {*} The last element in the array.\n */\nManagedArray.prototype.pop = function () {\n if (this._length === 0) {\n return undefined;\n }\n var element = this._array[this._length - 1];\n --this.length;\n return element;\n};\n\n/**\n * Resize the internal array if length > _array.length.\n *\n * @param {Number} length The length.\n */\nManagedArray.prototype.reserve = function (length) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n //>>includeEnd('debug');\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n};\n\n/**\n * Resize the array.\n *\n * @param {Number} length The length.\n */\nManagedArray.prototype.resize = function (length) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n //>>includeEnd('debug');\n\n this.length = length;\n};\n\n/**\n * Trim the internal array to the specified length. Defaults to the current length.\n *\n * @param {Number} [length] The length.\n */\nManagedArray.prototype.trim = function (length) {\n length = defaultValue(length, this._length);\n this._array.length = length;\n};\nexport default ManagedArray;\n","import Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\n\n/**\n * @namespace MapboxApi\n */\nvar MapboxApi = {};\n\n/**\n * The default Mapbox API access token to use if one is not provided to the\n * constructor of an object that uses the Mapbox API. If this property is undefined,\n * Cesium's default access token is used, which is only suitable for use early in development.\n * Please supply your own access token as soon as possible and prior to deployment.\n * Visit {@link https://www.mapbox.com/help/create-api-access-token/} for details.\n * When Cesium's default access token is used, a message is printed to the console the first\n * time the Mapbox API is used.\n *\n * @type {String}\n */\nMapboxApi.defaultAccessToken = undefined;\n\nvar printedMapboxWarning = false;\nvar errorCredit;\nvar errorString =\n \"<b>This application is using Cesium's default Mapbox access token. Please create a new access token for the application as soon as possible and prior to deployment by visiting <a href=https://www.mapbox.com/account/apps/>https://www.mapbox.com/account/apps/</a>, and provide your token to Cesium by setting the Cesium.MapboxApi.defaultAccessToken property before constructing the CesiumWidget or any other object that uses the Mapbox API.</b>\";\n\nMapboxApi.getAccessToken = function (providedToken) {\n if (defined(providedToken)) {\n return providedToken;\n }\n\n if (!defined(MapboxApi.defaultAccessToken)) {\n if (!printedMapboxWarning) {\n console.log(errorString);\n printedMapboxWarning = true;\n }\n return \"pk.eyJ1IjoiYW5hbHl0aWNhbGdyYXBoaWNzIiwiYSI6ImNpd204Zm4wejAwNzYyeW5uNjYyZmFwdWEifQ.7i-VIZZWX8pd1bTfxIVj9g\";\n }\n\n return MapboxApi.defaultAccessToken;\n};\n\nMapboxApi.getErrorCredit = function (providedToken) {\n if (defined(providedToken) || defined(MapboxApi.defaultAccessToken)) {\n return undefined;\n }\n\n if (!defined(errorCredit)) {\n errorCredit = new Credit(errorString, true);\n }\n\n return errorCredit;\n};\nexport default MapboxApi;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Defines how geodetic ellipsoid coordinates ({@link Cartographic}) project to a\n * flat map like Cesium's 2D and Columbus View modes.\n *\n * @alias MapProjection\n * @constructor\n *\n * @see GeographicProjection\n * @see WebMercatorProjection\n */\nfunction MapProjection() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(MapProjection.prototype, {\n /**\n * Gets the {@link Ellipsoid}.\n *\n * @memberof MapProjection.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Projects {@link Cartographic} coordinates, in radians, to projection-specific map coordinates, in meters.\n *\n * @memberof MapProjection\n * @function\n *\n * @param {Cartographic} cartographic The coordinates to project.\n * @param {Cartesian3} [result] An instance into which to copy the result. If this parameter is\n * undefined, a new instance is created and returned.\n * @returns {Cartesian3} The projected coordinates. If the result parameter is not undefined, the\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\n * created and returned.\n */\nMapProjection.prototype.project = DeveloperError.throwInstantiationError;\n\n/**\n * Unprojects projection-specific map {@link Cartesian3} coordinates, in meters, to {@link Cartographic}\n * coordinates, in radians.\n *\n * @memberof MapProjection\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters.\n * @param {Cartographic} [result] An instance into which to copy the result. If this parameter is\n * undefined, a new instance is created and returned.\n * @returns {Cartographic} The unprojected coordinates. If the result parameter is not undefined, the\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\n * created and returned.\n */\nMapProjection.prototype.unproject = DeveloperError.throwInstantiationError;\nexport default MapProjection;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nvar leftScratchArray = [];\nvar rightScratchArray = [];\n\nfunction merge(array, compare, userDefinedObject, start, middle, end) {\n var leftLength = middle - start + 1;\n var rightLength = end - middle;\n\n var left = leftScratchArray;\n var right = rightScratchArray;\n\n var i;\n var j;\n\n for (i = 0; i < leftLength; ++i) {\n left[i] = array[start + i];\n }\n\n for (j = 0; j < rightLength; ++j) {\n right[j] = array[middle + j + 1];\n }\n\n i = 0;\n j = 0;\n for (var k = start; k <= end; ++k) {\n var leftElement = left[i];\n var rightElement = right[j];\n if (\n i < leftLength &&\n (j >= rightLength ||\n compare(leftElement, rightElement, userDefinedObject) <= 0)\n ) {\n array[k] = leftElement;\n ++i;\n } else if (j < rightLength) {\n array[k] = rightElement;\n ++j;\n }\n }\n}\n\nfunction sort(array, compare, userDefinedObject, start, end) {\n if (start >= end) {\n return;\n }\n\n var middle = Math.floor((start + end) * 0.5);\n sort(array, compare, userDefinedObject, start, middle);\n sort(array, compare, userDefinedObject, middle + 1, end);\n merge(array, compare, userDefinedObject, start, middle, end);\n}\n\n/**\n * A stable merge sort.\n *\n * @function mergeSort\n * @param {Array} array The array to sort.\n * @param {mergeSortComparator} comparator The function to use to compare elements in the array.\n * @param {*} [userDefinedObject] Any item to pass as the third parameter to <code>comparator</code>.\n *\n * @example\n * // Assume array contains BoundingSpheres in world coordinates.\n * // Sort them in ascending order of distance from the camera.\n * var position = camera.positionWC;\n * Cesium.mergeSort(array, function(a, b, position) {\n * return Cesium.BoundingSphere.distanceSquaredTo(b, position) - Cesium.BoundingSphere.distanceSquaredTo(a, position);\n * }, position);\n */\nfunction mergeSort(array, comparator, userDefinedObject) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required.\");\n }\n if (!defined(comparator)) {\n throw new DeveloperError(\"comparator is required.\");\n }\n //>>includeEnd('debug');\n\n var length = array.length;\n var scratchLength = Math.ceil(length * 0.5);\n\n // preallocate space in scratch arrays\n leftScratchArray.length = scratchLength;\n rightScratchArray.length = scratchLength;\n\n sort(array, comparator, userDefinedObject, 0, length - 1);\n\n // trim scratch arrays\n leftScratchArray.length = 0;\n rightScratchArray.length = 0;\n}\n\n/**\n * A function used to compare two items while performing a merge sort.\n * @callback mergeSortComparator\n *\n * @param {*} a An item in the array.\n * @param {*} b An item in the array.\n * @param {*} [userDefinedObject] An object that was passed to {@link mergeSort}.\n * @returns {Number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n * a positive value if <code>a</code> is greater than <code>b</code>, or\n * 0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b, userDefinedObject) {\n * return a - b;\n * }\n */\nexport default mergeSort;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Represents a scalar value's lower and upper bound at a near distance and far distance in eye space.\n * @alias NearFarScalar\n * @constructor\n *\n * @param {Number} [near=0.0] The lower bound of the camera range.\n * @param {Number} [nearValue=0.0] The value at the lower bound of the camera range.\n * @param {Number} [far=1.0] The upper bound of the camera range.\n * @param {Number} [farValue=0.0] The value at the upper bound of the camera range.\n *\n * @see Packable\n */\nfunction NearFarScalar(near, nearValue, far, farValue) {\n /**\n * The lower bound of the camera range.\n * @type {Number}\n * @default 0.0\n */\n this.near = defaultValue(near, 0.0);\n /**\n * The value at the lower bound of the camera range.\n * @type {Number}\n * @default 0.0\n */\n this.nearValue = defaultValue(nearValue, 0.0);\n /**\n * The upper bound of the camera range.\n * @type {Number}\n * @default 1.0\n */\n this.far = defaultValue(far, 1.0);\n /**\n * The value at the upper bound of the camera range.\n * @type {Number}\n * @default 0.0\n */\n this.farValue = defaultValue(farValue, 0.0);\n}\n\n/**\n * Duplicates a NearFarScalar instance.\n *\n * @param {NearFarScalar} nearFarScalar The NearFarScalar to duplicate.\n * @param {NearFarScalar} [result] The object onto which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided. (Returns undefined if nearFarScalar is undefined)\n */\nNearFarScalar.clone = function (nearFarScalar, result) {\n if (!defined(nearFarScalar)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new NearFarScalar(\n nearFarScalar.near,\n nearFarScalar.nearValue,\n nearFarScalar.far,\n nearFarScalar.farValue\n );\n }\n\n result.near = nearFarScalar.near;\n result.nearValue = nearFarScalar.nearValue;\n result.far = nearFarScalar.far;\n result.farValue = nearFarScalar.farValue;\n return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nNearFarScalar.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {NearFarScalar} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nNearFarScalar.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n array[startingIndex++] = value.near;\n array[startingIndex++] = value.nearValue;\n array[startingIndex++] = value.far;\n array[startingIndex] = value.farValue;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {NearFarScalar} [result] The object into which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided.\n */\nNearFarScalar.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n if (!defined(result)) {\n result = new NearFarScalar();\n }\n result.near = array[startingIndex++];\n result.nearValue = array[startingIndex++];\n result.far = array[startingIndex++];\n result.farValue = array[startingIndex];\n return result;\n};\n\n/**\n * Compares the provided NearFarScalar and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {NearFarScalar} [left] The first NearFarScalar.\n * @param {NearFarScalar} [right] The second NearFarScalar.\n * @returns {Boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nNearFarScalar.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.near === right.near &&\n left.nearValue === right.nearValue &&\n left.far === right.far &&\n left.farValue === right.farValue)\n );\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {NearFarScalar} [result] The object onto which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided.\n */\nNearFarScalar.prototype.clone = function (result) {\n return NearFarScalar.clone(this, result);\n};\n\n/**\n * Compares this instance to the provided NearFarScalar and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {NearFarScalar} [right] The right hand side NearFarScalar.\n * @returns {Boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nNearFarScalar.prototype.equals = function (right) {\n return NearFarScalar.equals(this, right);\n};\nexport default NearFarScalar;\n","/**\n * This enumerated type is used in determining to what extent an object, the occludee,\n * is visible during horizon culling. An occluder may fully block an occludee, in which case\n * it has no visibility, may partially block an occludee from view, or may not block it at all,\n * leading to full visibility.\n *\n * @enum {Number}\n */\nvar Visibility = {\n /**\n * Represents that no part of an object is visible.\n *\n * @type {Number}\n * @constant\n */\n NONE: -1,\n\n /**\n * Represents that part, but not all, of an object is visible\n *\n * @type {Number}\n * @constant\n */\n PARTIAL: 0,\n\n /**\n * Represents that an object is visible in its entirety.\n *\n * @type {Number}\n * @constant\n */\n FULL: 1,\n};\nexport default Object.freeze(Visibility);\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Visibility from \"./Visibility.js\";\n\n/**\n * Creates an Occluder derived from an object's position and radius, as well as the camera position.\n * The occluder can be used to determine whether or not other objects are visible or hidden behind the\n * visible horizon defined by the occluder and camera position.\n *\n * @alias Occluder\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} cameraPosition The coordinate of the viewer/camera.\n *\n * @constructor\n *\n * @example\n * // Construct an occluder one unit away from the origin with a radius of one.\n * var cameraPosition = Cesium.Cartesian3.ZERO;\n * var occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 1);\n * var occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition);\n */\nfunction Occluder(occluderBoundingSphere, cameraPosition) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(occluderBoundingSphere)) {\n throw new DeveloperError(\"occluderBoundingSphere is required.\");\n }\n if (!defined(cameraPosition)) {\n throw new DeveloperError(\"camera position is required.\");\n }\n //>>includeEnd('debug');\n\n this._occluderPosition = Cartesian3.clone(occluderBoundingSphere.center);\n this._occluderRadius = occluderBoundingSphere.radius;\n\n this._horizonDistance = 0.0;\n this._horizonPlaneNormal = undefined;\n this._horizonPlanePosition = undefined;\n this._cameraPosition = undefined;\n\n // cameraPosition fills in the above values\n this.cameraPosition = cameraPosition;\n}\n\nvar scratchCartesian3 = new Cartesian3();\n\nObject.defineProperties(Occluder.prototype, {\n /**\n * The position of the occluder.\n * @memberof Occluder.prototype\n * @type {Cartesian3}\n */\n position: {\n get: function () {\n return this._occluderPosition;\n },\n },\n\n /**\n * The radius of the occluder.\n * @memberof Occluder.prototype\n * @type {Number}\n */\n radius: {\n get: function () {\n return this._occluderRadius;\n },\n },\n\n /**\n * The position of the camera.\n * @memberof Occluder.prototype\n * @type {Cartesian3}\n */\n cameraPosition: {\n set: function (cameraPosition) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cameraPosition)) {\n throw new DeveloperError(\"cameraPosition is required.\");\n }\n //>>includeEnd('debug');\n\n cameraPosition = Cartesian3.clone(cameraPosition, this._cameraPosition);\n\n var cameraToOccluderVec = Cartesian3.subtract(\n this._occluderPosition,\n cameraPosition,\n scratchCartesian3\n );\n var invCameraToOccluderDistance = Cartesian3.magnitudeSquared(\n cameraToOccluderVec\n );\n var occluderRadiusSqrd = this._occluderRadius * this._occluderRadius;\n\n var horizonDistance;\n var horizonPlaneNormal;\n var horizonPlanePosition;\n if (invCameraToOccluderDistance > occluderRadiusSqrd) {\n horizonDistance = Math.sqrt(\n invCameraToOccluderDistance - occluderRadiusSqrd\n );\n invCameraToOccluderDistance =\n 1.0 / Math.sqrt(invCameraToOccluderDistance);\n horizonPlaneNormal = Cartesian3.multiplyByScalar(\n cameraToOccluderVec,\n invCameraToOccluderDistance,\n scratchCartesian3\n );\n var nearPlaneDistance =\n horizonDistance * horizonDistance * invCameraToOccluderDistance;\n horizonPlanePosition = Cartesian3.add(\n cameraPosition,\n Cartesian3.multiplyByScalar(\n horizonPlaneNormal,\n nearPlaneDistance,\n scratchCartesian3\n ),\n scratchCartesian3\n );\n } else {\n horizonDistance = Number.MAX_VALUE;\n }\n\n this._horizonDistance = horizonDistance;\n this._horizonPlaneNormal = horizonPlaneNormal;\n this._horizonPlanePosition = horizonPlanePosition;\n this._cameraPosition = cameraPosition;\n },\n },\n});\n\n/**\n * Creates an occluder from a bounding sphere and the camera position.\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} cameraPosition The coordinate of the viewer/camera.\n * @param {Occluder} [result] The object onto which to store the result.\n * @returns {Occluder} The occluder derived from an object's position and radius, as well as the camera position.\n */\nOccluder.fromBoundingSphere = function (\n occluderBoundingSphere,\n cameraPosition,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(occluderBoundingSphere)) {\n throw new DeveloperError(\"occluderBoundingSphere is required.\");\n }\n\n if (!defined(cameraPosition)) {\n throw new DeveloperError(\"camera position is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Occluder(occluderBoundingSphere, cameraPosition);\n }\n\n Cartesian3.clone(occluderBoundingSphere.center, result._occluderPosition);\n result._occluderRadius = occluderBoundingSphere.radius;\n result.cameraPosition = cameraPosition;\n\n return result;\n};\n\nvar tempVecScratch = new Cartesian3();\n\n/**\n * Determines whether or not a point, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {Cartesian3} occludee The point surrounding the occludee object.\n * @returns {Boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n *\n * @example\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * var littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25);\n * var occluder = new Cesium.Occluder(littleSphere, cameraPosition);\n * var point = new Cesium.Cartesian3(0, 0, -3);\n * occluder.isPointVisible(point); //returns true\n *\n * @see Occluder#computeVisibility\n */\nOccluder.prototype.isPointVisible = function (occludee) {\n if (this._horizonDistance !== Number.MAX_VALUE) {\n var tempVec = Cartesian3.subtract(\n occludee,\n this._occluderPosition,\n tempVecScratch\n );\n var temp = this._occluderRadius;\n temp = Cartesian3.magnitudeSquared(tempVec) - temp * temp;\n if (temp > 0.0) {\n temp = Math.sqrt(temp) + this._horizonDistance;\n tempVec = Cartesian3.subtract(occludee, this._cameraPosition, tempVec);\n return temp * temp > Cartesian3.magnitudeSquared(tempVec);\n }\n }\n return false;\n};\n\nvar occludeePositionScratch = new Cartesian3();\n\n/**\n * Determines whether or not a sphere, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {BoundingSphere} occludee The bounding sphere surrounding the occludee object.\n * @returns {Boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n *\n * @example\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * var littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25);\n * var occluder = new Cesium.Occluder(littleSphere, cameraPosition);\n * var bigSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -3), 1);\n * occluder.isBoundingSphereVisible(bigSphere); //returns true\n *\n * @see Occluder#computeVisibility\n */\nOccluder.prototype.isBoundingSphereVisible = function (occludee) {\n var occludeePosition = Cartesian3.clone(\n occludee.center,\n occludeePositionScratch\n );\n var occludeeRadius = occludee.radius;\n\n if (this._horizonDistance !== Number.MAX_VALUE) {\n var tempVec = Cartesian3.subtract(\n occludeePosition,\n this._occluderPosition,\n tempVecScratch\n );\n var temp = this._occluderRadius - occludeeRadius;\n temp = Cartesian3.magnitudeSquared(tempVec) - temp * temp;\n if (occludeeRadius < this._occluderRadius) {\n if (temp > 0.0) {\n temp = Math.sqrt(temp) + this._horizonDistance;\n tempVec = Cartesian3.subtract(\n occludeePosition,\n this._cameraPosition,\n tempVec\n );\n return (\n temp * temp + occludeeRadius * occludeeRadius >\n Cartesian3.magnitudeSquared(tempVec)\n );\n }\n return false;\n }\n\n // Prevent against the case where the occludee radius is larger than the occluder's; since this is\n // an uncommon case, the following code should rarely execute.\n if (temp > 0.0) {\n tempVec = Cartesian3.subtract(\n occludeePosition,\n this._cameraPosition,\n tempVec\n );\n var tempVecMagnitudeSquared = Cartesian3.magnitudeSquared(tempVec);\n var occluderRadiusSquared = this._occluderRadius * this._occluderRadius;\n var occludeeRadiusSquared = occludeeRadius * occludeeRadius;\n if (\n (this._horizonDistance * this._horizonDistance +\n occluderRadiusSquared) *\n occludeeRadiusSquared >\n tempVecMagnitudeSquared * occluderRadiusSquared\n ) {\n // The occludee is close enough that the occluder cannot possible occlude the occludee\n return true;\n }\n temp = Math.sqrt(temp) + this._horizonDistance;\n return temp * temp + occludeeRadiusSquared > tempVecMagnitudeSquared;\n }\n\n // The occludee completely encompasses the occluder\n return true;\n }\n\n return false;\n};\n\nvar tempScratch = new Cartesian3();\n/**\n * Determine to what extent an occludee is visible (not visible, partially visible, or fully visible).\n *\n * @param {BoundingSphere} occludeeBS The bounding sphere of the occludee.\n * @returns {Number} Visibility.NONE if the occludee is not visible,\n * Visibility.PARTIAL if the occludee is partially visible, or\n * Visibility.FULL if the occludee is fully visible.\n *\n *\n * @example\n * var sphere1 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1.5), 0.5);\n * var sphere2 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -2.5), 0.5);\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * var occluder = new Cesium.Occluder(sphere1, cameraPosition);\n * occluder.computeVisibility(sphere2); //returns Visibility.NONE\n *\n * @see Occluder#isVisible\n */\nOccluder.prototype.computeVisibility = function (occludeeBS) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(occludeeBS)) {\n throw new DeveloperError(\"occludeeBS is required.\");\n }\n //>>includeEnd('debug');\n\n // If the occludee radius is larger than the occluders, this will return that\n // the entire ocludee is visible, even though that may not be the case, though this should\n // not occur too often.\n var occludeePosition = Cartesian3.clone(occludeeBS.center);\n var occludeeRadius = occludeeBS.radius;\n\n if (occludeeRadius > this._occluderRadius) {\n return Visibility.FULL;\n }\n\n if (this._horizonDistance !== Number.MAX_VALUE) {\n // The camera is outside the occluder\n var tempVec = Cartesian3.subtract(\n occludeePosition,\n this._occluderPosition,\n tempScratch\n );\n var temp = this._occluderRadius - occludeeRadius;\n var occluderToOccludeeDistSqrd = Cartesian3.magnitudeSquared(tempVec);\n temp = occluderToOccludeeDistSqrd - temp * temp;\n if (temp > 0.0) {\n // The occludee is not completely inside the occluder\n // Check to see if the occluder completely hides the occludee\n temp = Math.sqrt(temp) + this._horizonDistance;\n tempVec = Cartesian3.subtract(\n occludeePosition,\n this._cameraPosition,\n tempVec\n );\n var cameraToOccludeeDistSqrd = Cartesian3.magnitudeSquared(tempVec);\n if (\n temp * temp + occludeeRadius * occludeeRadius <\n cameraToOccludeeDistSqrd\n ) {\n return Visibility.NONE;\n }\n\n // Check to see whether the occluder is fully or partially visible\n // when the occludee does not intersect the occluder\n temp = this._occluderRadius + occludeeRadius;\n temp = occluderToOccludeeDistSqrd - temp * temp;\n if (temp > 0.0) {\n // The occludee does not intersect the occluder.\n temp = Math.sqrt(temp) + this._horizonDistance;\n return cameraToOccludeeDistSqrd <\n temp * temp + occludeeRadius * occludeeRadius\n ? Visibility.FULL\n : Visibility.PARTIAL;\n }\n\n //Check to see if the occluder is fully or partially visible when the occludee DOES\n //intersect the occluder\n tempVec = Cartesian3.subtract(\n occludeePosition,\n this._horizonPlanePosition,\n tempVec\n );\n return Cartesian3.dot(tempVec, this._horizonPlaneNormal) > -occludeeRadius\n ? Visibility.PARTIAL\n : Visibility.FULL;\n }\n }\n return Visibility.NONE;\n};\n\nvar occludeePointScratch = new Cartesian3();\n/**\n * Computes a point that can be used as the occludee position to the visibility functions.\n * Use a radius of zero for the occludee radius. Typically, a user computes a bounding sphere around\n * an object that is used for visibility; however it is also possible to compute a point that if\n * seen/not seen would also indicate if an object is visible/not visible. This function is better\n * called for objects that do not move relative to the occluder and is large, such as a chunk of\n * terrain. You are better off not calling this and using the object's bounding sphere for objects\n * such as a satellite or ground vehicle.\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} occludeePosition The point where the occludee (bounding sphere of radius 0) is located.\n * @param {Cartesian3[]} positions List of altitude points on the horizon near the surface of the occluder.\n * @returns {Object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>\n * which is a boolean value.\n *\n * @exception {DeveloperError} <code>positions</code> must contain at least one element.\n * @exception {DeveloperError} <code>occludeePosition</code> must have a value other than <code>occluderBoundingSphere.center</code>.\n *\n * @example\n * var cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * var occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -8), 2);\n * var occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition);\n * var positions = [new Cesium.Cartesian3(-0.25, 0, -5.3), new Cesium.Cartesian3(0.25, 0, -5.3)];\n * var tileOccluderSphere = Cesium.BoundingSphere.fromPoints(positions);\n * var occludeePosition = tileOccluderSphere.center;\n * var occludeePt = Cesium.Occluder.computeOccludeePoint(occluderBoundingSphere, occludeePosition, positions);\n */\nOccluder.computeOccludeePoint = function (\n occluderBoundingSphere,\n occludeePosition,\n positions\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(occluderBoundingSphere)) {\n throw new DeveloperError(\"occluderBoundingSphere is required.\");\n }\n if (!defined(positions)) {\n throw new DeveloperError(\"positions is required.\");\n }\n if (positions.length === 0) {\n throw new DeveloperError(\"positions must contain at least one element\");\n }\n //>>includeEnd('debug');\n\n var occludeePos = Cartesian3.clone(occludeePosition);\n var occluderPosition = Cartesian3.clone(occluderBoundingSphere.center);\n var occluderRadius = occluderBoundingSphere.radius;\n var numPositions = positions.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (Cartesian3.equals(occluderPosition, occludeePosition)) {\n throw new DeveloperError(\n \"occludeePosition must be different than occluderBoundingSphere.center\"\n );\n }\n //>>includeEnd('debug');\n\n // Compute a plane with a normal from the occluder to the occludee position.\n var occluderPlaneNormal = Cartesian3.normalize(\n Cartesian3.subtract(occludeePos, occluderPosition, occludeePointScratch),\n occludeePointScratch\n );\n var occluderPlaneD = -Cartesian3.dot(occluderPlaneNormal, occluderPosition);\n\n //For each position, determine the horizon intersection. Choose the position and intersection\n //that results in the greatest angle with the occcluder plane.\n var aRotationVector = Occluder._anyRotationVector(\n occluderPosition,\n occluderPlaneNormal,\n occluderPlaneD\n );\n var dot = Occluder._horizonToPlaneNormalDotProduct(\n occluderBoundingSphere,\n occluderPlaneNormal,\n occluderPlaneD,\n aRotationVector,\n positions[0]\n );\n if (!dot) {\n //The position is inside the mimimum radius, which is invalid\n return undefined;\n }\n var tempDot;\n for (var i = 1; i < numPositions; ++i) {\n tempDot = Occluder._horizonToPlaneNormalDotProduct(\n occluderBoundingSphere,\n occluderPlaneNormal,\n occluderPlaneD,\n aRotationVector,\n positions[i]\n );\n if (!tempDot) {\n //The position is inside the minimum radius, which is invalid\n return undefined;\n }\n if (tempDot < dot) {\n dot = tempDot;\n }\n }\n //Verify that the dot is not near 90 degress\n if (dot < 0.00174532836589830883577820272085) {\n return undefined;\n }\n\n var distance = occluderRadius / dot;\n return Cartesian3.add(\n occluderPosition,\n Cartesian3.multiplyByScalar(\n occluderPlaneNormal,\n distance,\n occludeePointScratch\n ),\n occludeePointScratch\n );\n};\n\nvar computeOccludeePointFromRectangleScratch = [];\n/**\n * Computes a point that can be used as the occludee position to the visibility functions from a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle used to create a bounding sphere.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the rectangle.\n * @returns {Object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>\n * which is a boolean value.\n */\nOccluder.computeOccludeePointFromRectangle = function (rectangle, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(rectangle)) {\n throw new DeveloperError(\"rectangle is required.\");\n }\n //>>includeEnd('debug');\n\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n var positions = Rectangle.subsample(\n rectangle,\n ellipsoid,\n 0.0,\n computeOccludeePointFromRectangleScratch\n );\n var bs = BoundingSphere.fromPoints(positions);\n\n // TODO: get correct ellipsoid center\n var ellipsoidCenter = Cartesian3.ZERO;\n if (!Cartesian3.equals(ellipsoidCenter, bs.center)) {\n return Occluder.computeOccludeePoint(\n new BoundingSphere(ellipsoidCenter, ellipsoid.minimumRadius),\n bs.center,\n positions\n );\n }\n\n return undefined;\n};\n\nvar tempVec0Scratch = new Cartesian3();\nOccluder._anyRotationVector = function (\n occluderPosition,\n occluderPlaneNormal,\n occluderPlaneD\n) {\n var tempVec0 = Cartesian3.abs(occluderPlaneNormal, tempVec0Scratch);\n var majorAxis = tempVec0.x > tempVec0.y ? 0 : 1;\n if (\n (majorAxis === 0 && tempVec0.z > tempVec0.x) ||\n (majorAxis === 1 && tempVec0.z > tempVec0.y)\n ) {\n majorAxis = 2;\n }\n var tempVec = new Cartesian3();\n var tempVec1;\n if (majorAxis === 0) {\n tempVec0.x = occluderPosition.x;\n tempVec0.y = occluderPosition.y + 1.0;\n tempVec0.z = occluderPosition.z + 1.0;\n tempVec1 = Cartesian3.UNIT_X;\n } else if (majorAxis === 1) {\n tempVec0.x = occluderPosition.x + 1.0;\n tempVec0.y = occluderPosition.y;\n tempVec0.z = occluderPosition.z + 1.0;\n tempVec1 = Cartesian3.UNIT_Y;\n } else {\n tempVec0.x = occluderPosition.x + 1.0;\n tempVec0.y = occluderPosition.y + 1.0;\n tempVec0.z = occluderPosition.z;\n tempVec1 = Cartesian3.UNIT_Z;\n }\n var u =\n (Cartesian3.dot(occluderPlaneNormal, tempVec0) + occluderPlaneD) /\n -Cartesian3.dot(occluderPlaneNormal, tempVec1);\n return Cartesian3.normalize(\n Cartesian3.subtract(\n Cartesian3.add(\n tempVec0,\n Cartesian3.multiplyByScalar(tempVec1, u, tempVec),\n tempVec0\n ),\n occluderPosition,\n tempVec0\n ),\n tempVec0\n );\n};\n\nvar posDirectionScratch = new Cartesian3();\nOccluder._rotationVector = function (\n occluderPosition,\n occluderPlaneNormal,\n occluderPlaneD,\n position,\n anyRotationVector\n) {\n //Determine the angle between the occluder plane normal and the position direction\n var positionDirection = Cartesian3.subtract(\n position,\n occluderPosition,\n posDirectionScratch\n );\n positionDirection = Cartesian3.normalize(\n positionDirection,\n positionDirection\n );\n if (\n Cartesian3.dot(occluderPlaneNormal, positionDirection) <\n 0.99999998476912904932780850903444\n ) {\n var crossProduct = Cartesian3.cross(\n occluderPlaneNormal,\n positionDirection,\n positionDirection\n );\n var length = Cartesian3.magnitude(crossProduct);\n if (length > CesiumMath.EPSILON13) {\n return Cartesian3.normalize(crossProduct, new Cartesian3());\n }\n }\n //The occluder plane normal and the position direction are colinear. Use any\n //vector in the occluder plane as the rotation vector\n return anyRotationVector;\n};\n\nvar posScratch1 = new Cartesian3();\nvar occluerPosScratch = new Cartesian3();\nvar posScratch2 = new Cartesian3();\nvar horizonPlanePosScratch = new Cartesian3();\nOccluder._horizonToPlaneNormalDotProduct = function (\n occluderBS,\n occluderPlaneNormal,\n occluderPlaneD,\n anyRotationVector,\n position\n) {\n var pos = Cartesian3.clone(position, posScratch1);\n var occluderPosition = Cartesian3.clone(occluderBS.center, occluerPosScratch);\n var occluderRadius = occluderBS.radius;\n\n //Verify that the position is outside the occluder\n var positionToOccluder = Cartesian3.subtract(\n occluderPosition,\n pos,\n posScratch2\n );\n var occluderToPositionDistanceSquared = Cartesian3.magnitudeSquared(\n positionToOccluder\n );\n var occluderRadiusSquared = occluderRadius * occluderRadius;\n if (occluderToPositionDistanceSquared < occluderRadiusSquared) {\n return false;\n }\n\n //Horizon parameters\n var horizonDistanceSquared =\n occluderToPositionDistanceSquared - occluderRadiusSquared;\n var horizonDistance = Math.sqrt(horizonDistanceSquared);\n var occluderToPositionDistance = Math.sqrt(occluderToPositionDistanceSquared);\n var invOccluderToPositionDistance = 1.0 / occluderToPositionDistance;\n var cosTheta = horizonDistance * invOccluderToPositionDistance;\n var horizonPlaneDistance = cosTheta * horizonDistance;\n positionToOccluder = Cartesian3.normalize(\n positionToOccluder,\n positionToOccluder\n );\n var horizonPlanePosition = Cartesian3.add(\n pos,\n Cartesian3.multiplyByScalar(\n positionToOccluder,\n horizonPlaneDistance,\n horizonPlanePosScratch\n ),\n horizonPlanePosScratch\n );\n var horizonCrossDistance = Math.sqrt(\n horizonDistanceSquared - horizonPlaneDistance * horizonPlaneDistance\n );\n\n //Rotate the position to occluder vector 90 degrees\n var tempVec = this._rotationVector(\n occluderPosition,\n occluderPlaneNormal,\n occluderPlaneD,\n pos,\n anyRotationVector\n );\n var horizonCrossDirection = Cartesian3.fromElements(\n tempVec.x * tempVec.x * positionToOccluder.x +\n (tempVec.x * tempVec.y - tempVec.z) * positionToOccluder.y +\n (tempVec.x * tempVec.z + tempVec.y) * positionToOccluder.z,\n (tempVec.x * tempVec.y + tempVec.z) * positionToOccluder.x +\n tempVec.y * tempVec.y * positionToOccluder.y +\n (tempVec.y * tempVec.z - tempVec.x) * positionToOccluder.z,\n (tempVec.x * tempVec.z - tempVec.y) * positionToOccluder.x +\n (tempVec.y * tempVec.z + tempVec.x) * positionToOccluder.y +\n tempVec.z * tempVec.z * positionToOccluder.z,\n posScratch1\n );\n horizonCrossDirection = Cartesian3.normalize(\n horizonCrossDirection,\n horizonCrossDirection\n );\n\n //Horizon positions\n var offset = Cartesian3.multiplyByScalar(\n horizonCrossDirection,\n horizonCrossDistance,\n posScratch1\n );\n tempVec = Cartesian3.normalize(\n Cartesian3.subtract(\n Cartesian3.add(horizonPlanePosition, offset, posScratch2),\n occluderPosition,\n posScratch2\n ),\n posScratch2\n );\n var dot0 = Cartesian3.dot(occluderPlaneNormal, tempVec);\n tempVec = Cartesian3.normalize(\n Cartesian3.subtract(\n Cartesian3.subtract(horizonPlanePosition, offset, tempVec),\n occluderPosition,\n tempVec\n ),\n tempVec\n );\n var dot1 = Cartesian3.dot(occluderPlaneNormal, tempVec);\n return dot0 < dot1 ? dot0 : dot1;\n};\nexport default Occluder;\n","import Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines the geometry instance offset\n *\n * @alias OffsetGeometryInstanceAttribute\n * @constructor\n *\n * @param {Number} [x=0] The x translation\n * @param {Number} [y=0] The y translation\n * @param {Number} [z=0] The z translation\n *\n * @private\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction OffsetGeometryInstanceAttribute(x, y, z) {\n x = defaultValue(x, 0);\n y = defaultValue(y, 0);\n z = defaultValue(z, 0);\n\n /**\n * The values for the attributes stored in a typed array.\n *\n * @type Float32Array\n */\n this.value = new Float32Array([x, y, z]);\n}\n\nObject.defineProperties(OffsetGeometryInstanceAttribute.prototype, {\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link OffsetGeometryInstanceAttribute#value}.\n *\n * @memberof OffsetGeometryInstanceAttribute.prototype\n *\n * @type {ComponentDatatype}\n * @readonly\n *\n * @default {@link ComponentDatatype.FLOAT}\n */\n componentDatatype: {\n get: function () {\n return ComponentDatatype.FLOAT;\n },\n },\n\n /**\n * The number of components in the attributes, i.e., {@link OffsetGeometryInstanceAttribute#value}.\n *\n * @memberof OffsetGeometryInstanceAttribute.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default 3\n */\n componentsPerAttribute: {\n get: function () {\n return 3;\n },\n },\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n *\n * @memberof OffsetGeometryInstanceAttribute.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n normalize: {\n get: function () {\n return false;\n },\n },\n});\n\n/**\n * Creates a new {@link OffsetGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.\n *\n * @param {Cartesian3} offset The cartesian offset\n * @returns {OffsetGeometryInstanceAttribute} The new {@link OffsetGeometryInstanceAttribute} instance.\n */\nOffsetGeometryInstanceAttribute.fromCartesian3 = function (offset) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"offset\", offset);\n //>>includeEnd('debug');\n\n return new OffsetGeometryInstanceAttribute(offset.x, offset.y, offset.z);\n};\n\n/**\n * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.\n *\n * @param {Cartesian3} offset The cartesian offset\n * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.modelMatrix = Cesium.OffsetGeometryInstanceAttribute.toValue(modelMatrix, attributes.modelMatrix);\n */\nOffsetGeometryInstanceAttribute.toValue = function (offset, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"offset\", offset);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Float32Array([offset.x, offset.y, offset.z]);\n }\n\n result[0] = offset.x;\n result[1] = offset.y;\n result[2] = offset.z;\n return result;\n};\nexport default OffsetGeometryInstanceAttribute;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport combine from \"./combine.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Provides geocoding via a {@link https://opencagedata.com/|OpenCage} server.\n * @alias OpenCageGeocoderService\n * @constructor\n *\n * @param {Resource|String} url The endpoint to the OpenCage server.\n * @param {String} apiKey The OpenCage API Key.\n * @param {Object} [params] An object with the following properties (See https://opencagedata.com/api#forward-opt):\n * @param {Number} [params.abbrv] When set to 1 we attempt to abbreviate and shorten the formatted string we return.\n * @param {Number} [options.add_request] When set to 1 the various request parameters are added to the response for ease of debugging.\n * @param {String} [options.bounds] Provides the geocoder with a hint to the region that the query resides in.\n * @param {String} [options.countrycode] Restricts the results to the specified country or countries (as defined by the ISO 3166-1 Alpha 2 standard).\n * @param {String} [options.jsonp] Wraps the returned JSON with a function name.\n * @param {String} [options.language] An IETF format language code.\n * @param {Number} [options.limit] The maximum number of results we should return.\n * @param {Number} [options.min_confidence] An integer from 1-10. Only results with at least this confidence will be returned.\n * @param {Number} [options.no_annotations] When set to 1 results will not contain annotations.\n * @param {Number} [options.no_dedupe] When set to 1 results will not be deduplicated.\n * @param {Number} [options.no_record] When set to 1 the query contents are not logged.\n * @param {Number} [options.pretty] When set to 1 results are 'pretty' printed for easier reading. Useful for debugging.\n * @param {String} [options.proximity] Provides the geocoder with a hint to bias results in favour of those closer to the specified location (For example: 41.40139,2.12870).\n *\n * @example\n * // Configure a Viewer to use the OpenCage Geocoder\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * geocoder: new Cesium.OpenCageGeocoderService('https://api.opencagedata.com/geocode/v1/', '<API key>')\n * });\n */\nfunction OpenCageGeocoderService(url, apiKey, params) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"url\", url);\n Check.defined(\"apiKey\", apiKey);\n if (defined(params)) {\n Check.typeOf.object(\"params\", params);\n }\n //>>includeEnd('debug');\n\n url = Resource.createIfNeeded(url);\n url.appendForwardSlash();\n url.setQueryParameters({ key: apiKey });\n this._url = url;\n this._params = defaultValue(params, {});\n}\n\nObject.defineProperties(OpenCageGeocoderService.prototype, {\n /**\n * The Resource used to access the OpenCage endpoint.\n * @type {Resource}\n * @memberof OpenCageGeocoderService.prototype\n * @readonly\n */\n url: {\n get: function () {\n return this._url;\n },\n },\n /**\n * Optional params passed to OpenCage in order to customize geocoding\n * @type {Object}\n * @memberof OpenCageGeocoderService.prototype\n * @readonly\n */\n params: {\n get: function () {\n return this._params;\n },\n },\n});\n\n/**\n * @function\n *\n * @param {String} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nOpenCageGeocoderService.prototype.geocode = function (query) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"query\", query);\n //>>includeEnd('debug');\n\n var resource = this._url.getDerivedResource({\n url: \"json\",\n queryParameters: combine(this._params, { q: query }),\n });\n return resource.fetchJson().then(function (response) {\n return response.results.map(function (resultObject) {\n var destination;\n var bounds = resultObject.bounds;\n\n if (defined(bounds)) {\n destination = Rectangle.fromDegrees(\n bounds.southwest.lng,\n bounds.southwest.lat,\n bounds.northeast.lng,\n bounds.northeast.lat\n );\n } else {\n var lon = resultObject.geometry.lat;\n var lat = resultObject.geometry.lng;\n destination = Cartesian3.fromDegrees(lon, lat);\n }\n\n return {\n displayName: resultObject.formatted,\n destination: destination,\n };\n });\n });\n};\nexport default OpenCageGeocoderService;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Static interface for types which can store their values as packed\n * elements in an array. These methods and properties are expected to be\n * defined on a constructor function.\n *\n * @interface Packable\n *\n * @see PackableForInterpolation\n */\nvar Packable = {\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n packedLength: undefined,\n\n /**\n * Stores the provided instance into the provided array.\n * @function\n *\n * @param {*} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n */\n pack: DeveloperError.throwInstantiationError,\n\n /**\n * Retrieves an instance from a packed array.\n * @function\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Object} [result] The object into which to store the result.\n * @returns {Object} The modified result parameter or a new Object instance if one was not provided.\n */\n unpack: DeveloperError.throwInstantiationError,\n};\nexport default Packable;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Static interface for {@link Packable} types which are interpolated in a\n * different representation than their packed value. These methods and\n * properties are expected to be defined on a constructor function.\n *\n * @namespace PackableForInterpolation\n *\n * @see Packable\n */\nvar PackableForInterpolation = {\n /**\n * The number of elements used to store the object into an array in its interpolatable form.\n * @type {Number}\n */\n packedInterpolationLength: undefined,\n\n /**\n * Converts a packed array into a form suitable for interpolation.\n * @function\n *\n * @param {Number[]} packedArray The packed array.\n * @param {Number} [startingIndex=0] The index of the first element to be converted.\n * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted.\n * @param {Number[]} [result] The object into which to store the result.\n */\n convertPackedArrayForInterpolation: DeveloperError.throwInstantiationError,\n\n /**\n * Retrieves an instance from a packed array converted with {@link PackableForInterpolation.convertPackedArrayForInterpolation}.\n * @function\n *\n * @param {Number[]} array The array previously packed for interpolation.\n * @param {Number[]} sourceArray The original packed array.\n * @param {Number} [startingIndex=0] The startingIndex used to convert the array.\n * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n * @param {Object} [result] The object into which to store the result.\n * @returns {Object} The modified result parameter or a new Object instance if one was not provided.\n */\n unpackInterpolationResult: DeveloperError.throwInstantiationError,\n};\nexport default PackableForInterpolation;\n","import measureText from \"../ThirdParty/measureText.js\";\nimport Color from \"./Color.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nvar imageSmoothingEnabledName;\n\n/**\n * Writes the given text into a new canvas. The canvas will be sized to fit the text.\n * If text is blank, returns undefined.\n *\n * @param {String} text The text to write.\n * @param {Object} [options] Object with the following properties:\n * @param {String} [options.font='10px sans-serif'] The CSS font to use.\n * @param {String} [options.textBaseline='bottom'] The baseline of the text.\n * @param {Boolean} [options.fill=true] Whether to fill the text.\n * @param {Boolean} [options.stroke=false] Whether to stroke the text.\n * @param {Color} [options.fillColor=Color.WHITE] The fill color.\n * @param {Color} [options.strokeColor=Color.BLACK] The stroke color.\n * @param {Number} [options.strokeWidth=1] The stroke width.\n * @param {Color} [options.backgroundColor=Color.TRANSPARENT] The background color of the canvas.\n * @param {Number} [options.padding=0] The pixel size of the padding to add around the text.\n * @returns {HTMLCanvasElement} A new canvas with the given text drawn into it. The dimensions object\n * from measureText will also be added to the returned canvas. If text is\n * blank, returns undefined.\n * @function writeTextToCanvas\n */\nfunction writeTextToCanvas(text, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(text)) {\n throw new DeveloperError(\"text is required.\");\n }\n //>>includeEnd('debug');\n if (text === \"\") {\n return undefined;\n }\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var font = defaultValue(options.font, \"10px sans-serif\");\n var stroke = defaultValue(options.stroke, false);\n var fill = defaultValue(options.fill, true);\n var strokeWidth = defaultValue(options.strokeWidth, 1);\n var backgroundColor = defaultValue(\n options.backgroundColor,\n Color.TRANSPARENT\n );\n var padding = defaultValue(options.padding, 0);\n var doublePadding = padding * 2.0;\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n canvas.style.font = font;\n\n var context2D = canvas.getContext(\"2d\");\n\n if (!defined(imageSmoothingEnabledName)) {\n if (defined(context2D.imageSmoothingEnabled)) {\n imageSmoothingEnabledName = \"imageSmoothingEnabled\";\n } else if (defined(context2D.mozImageSmoothingEnabled)) {\n imageSmoothingEnabledName = \"mozImageSmoothingEnabled\";\n } else if (defined(context2D.webkitImageSmoothingEnabled)) {\n imageSmoothingEnabledName = \"webkitImageSmoothingEnabled\";\n } else if (defined(context2D.msImageSmoothingEnabled)) {\n imageSmoothingEnabledName = \"msImageSmoothingEnabled\";\n }\n }\n\n context2D.font = font;\n context2D.lineJoin = \"round\";\n context2D.lineWidth = strokeWidth;\n context2D[imageSmoothingEnabledName] = false;\n\n // textBaseline needs to be set before the measureText call. It won't work otherwise.\n // It's magic.\n context2D.textBaseline = defaultValue(options.textBaseline, \"bottom\");\n\n // in order for measureText to calculate style, the canvas has to be\n // (temporarily) added to the DOM.\n canvas.style.visibility = \"hidden\";\n document.body.appendChild(canvas);\n\n var dimensions = measureText(context2D, text, stroke, fill);\n canvas.dimensions = dimensions;\n\n document.body.removeChild(canvas);\n canvas.style.visibility = \"\";\n\n //Some characters, such as the letter j, have a non-zero starting position.\n //This value is used for kerning later, but we need to take it into account\n //now in order to draw the text completely on the canvas\n var x = -dimensions.bounds.minx;\n\n //Expand the width to include the starting position.\n var width = Math.ceil(dimensions.width) + x + doublePadding;\n\n //While the height of the letter is correct, we need to adjust\n //where we start drawing it so that letters like j and y properly dip\n //below the line.\n\n var height = dimensions.height + doublePadding;\n var baseline = height - dimensions.ascent + padding;\n var y = height - baseline + doublePadding;\n\n canvas.width = width;\n canvas.height = height;\n\n // Properties must be explicitly set again after changing width and height\n context2D.font = font;\n context2D.lineJoin = \"round\";\n context2D.lineWidth = strokeWidth;\n context2D[imageSmoothingEnabledName] = false;\n\n // Draw background\n if (backgroundColor !== Color.TRANSPARENT) {\n context2D.fillStyle = backgroundColor.toCssColorString();\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n if (stroke) {\n var strokeColor = defaultValue(options.strokeColor, Color.BLACK);\n context2D.strokeStyle = strokeColor.toCssColorString();\n context2D.strokeText(text, x + padding, y);\n }\n\n if (fill) {\n var fillColor = defaultValue(options.fillColor, Color.WHITE);\n context2D.fillStyle = fillColor.toCssColorString();\n context2D.fillText(text, x + padding, y);\n }\n\n return canvas;\n}\nexport default writeTextToCanvas;\n","/*\n This library rewrites the Canvas2D \"measureText\" function\n so that it returns a more complete metrics object.\n\n** -----------------------------------------------------------------------------\n\n CHANGELOG:\n\n 2012-01-21 - Whitespace handling added by Joe Turner\n (https://github.com/oampo)\n\n** -----------------------------------------------------------------------------\n*/\n/**\n @license\n fontmetrics.js - https://github.com/Pomax/fontmetrics.js\n\n Copyright (C) 2011 by Mike \"Pomax\" Kamermans\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n**/\n\n/*\n var NAME = \"FontMetrics Library\"\n var VERSION = \"1-2012.0121.1300\";\n\n // if there is no getComputedStyle, this library won't work.\n if(!document.defaultView.getComputedStyle) {\n throw(\"ERROR: 'document.defaultView.getComputedStyle' not found. This library only works in browsers that can report computed CSS values.\");\n }\n\n // store the old text metrics function on the Canvas2D prototype\n CanvasRenderingContext2D.prototype.measureTextWidth = CanvasRenderingContext2D.prototype.measureText;\n*/\n /**\n * shortcut function for getting computed CSS values\n */\n var getCSSValue = function(element, property) {\n return document.defaultView.getComputedStyle(element,null).getPropertyValue(property);\n };\n/*\n // debug function\n var show = function(canvas, ctx, xstart, w, h, metrics)\n {\n document.body.appendChild(canvas);\n ctx.strokeStyle = 'rgba(0, 0, 0, 0.5)';\n\n ctx.beginPath();\n ctx.moveTo(xstart,0);\n ctx.lineTo(xstart,h);\n ctx.closePath();\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(xstart+metrics.bounds.maxx,0);\n ctx.lineTo(xstart+metrics.bounds.maxx,h);\n ctx.closePath();\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(0,h/2-metrics.ascent);\n ctx.lineTo(w,h/2-metrics.ascent);\n ctx.closePath();\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(0,h/2+metrics.descent);\n ctx.lineTo(w,h/2+metrics.descent);\n ctx.closePath();\n ctx.stroke();\n }\n*/\n /**\n * The new text metrics function\n */\n var measureText = function(context2D, textstring, stroke, fill) {\n var metrics = context2D.measureText(textstring),\n fontFamily = getCSSValue(context2D.canvas,\"font-family\"),\n fontSize = getCSSValue(context2D.canvas,\"font-size\").replace(\"px\",\"\"),\n fontStyle = getCSSValue(context2D.canvas,\"font-style\"),\n fontWeight = getCSSValue(context2D.canvas,\"font-weight\"),\n isSpace = !(/\\S/.test(textstring));\n metrics.fontsize = fontSize;\n\n // for text lead values, we meaure a multiline text container.\n var leadDiv = document.createElement(\"div\");\n leadDiv.style.position = \"absolute\";\n leadDiv.style.opacity = 0;\n leadDiv.style.font = fontStyle + \" \" + fontWeight + \" \" + fontSize + \"px \" + fontFamily;\n leadDiv.innerHTML = textstring + \"<br/>\" + textstring;\n document.body.appendChild(leadDiv);\n\n // make some initial guess at the text leading (using the standard TeX ratio)\n metrics.leading = 1.2 * fontSize;\n\n // then we try to get the real value from the browser\n var leadDivHeight = getCSSValue(leadDiv,\"height\");\n leadDivHeight = leadDivHeight.replace(\"px\",\"\");\n if (leadDivHeight >= fontSize * 2) { metrics.leading = (leadDivHeight/2) | 0; }\n document.body.removeChild(leadDiv);\n\n // if we're not dealing with white space, we can compute metrics\n if (!isSpace) {\n // Have characters, so measure the text\n var canvas = document.createElement(\"canvas\");\n var padding = 100;\n canvas.width = metrics.width + padding;\n canvas.height = 3*fontSize;\n canvas.style.opacity = 1;\n canvas.style.fontFamily = fontFamily;\n canvas.style.fontSize = fontSize;\n canvas.style.fontStyle = fontStyle;\n canvas.style.fontWeight = fontWeight;\n var ctx = canvas.getContext(\"2d\");\n ctx.font = fontStyle + \" \" + fontWeight + \" \" + fontSize + \"px \" + fontFamily;\n\n var w = canvas.width,\n h = canvas.height,\n baseline = h/2;\n\n // Set all canvas pixeldata values to 255, with all the content\n // data being 0. This lets us scan for data[i] != 255.\n ctx.fillStyle = \"white\";\n ctx.fillRect(-1, -1, w + 2, h + 2);\n\n if (stroke) {\n ctx.strokeStyle = \"black\";\n ctx.lineWidth = context2D.lineWidth;\n ctx.strokeText(textstring, (padding / 2), baseline);\n }\n\n if (fill) {\n ctx.fillStyle = \"black\";\n ctx.fillText(textstring, padding / 2, baseline);\n }\n\n var pixelData = ctx.getImageData(0, 0, w, h).data;\n\n // canvas pixel data is w*4 by h*4, because R, G, B and A are separate,\n // consecutive values in the array, rather than stored as 32 bit ints.\n var i = 0,\n w4 = w * 4,\n len = pixelData.length;\n\n // Finding the ascent uses a normal, forward scanline\n while (++i < len && pixelData[i] === 255) {}\n var ascent = (i/w4)|0;\n\n // Finding the descent uses a reverse scanline\n i = len - 1;\n while (--i > 0 && pixelData[i] === 255) {}\n var descent = (i/w4)|0;\n\n // find the min-x coordinate\n for(i = 0; i<len && pixelData[i] === 255; ) {\n i += w4;\n if(i>=len) { i = (i-len) + 4; }}\n var minx = ((i%w4)/4) | 0;\n\n // find the max-x coordinate\n var step = 1;\n for(i = len-3; i>=0 && pixelData[i] === 255; ) {\n i -= w4;\n if(i<0) { i = (len - 3) - (step++)*4; }}\n var maxx = ((i%w4)/4) + 1 | 0;\n\n // set font metrics\n metrics.ascent = (baseline - ascent);\n metrics.descent = (descent - baseline);\n metrics.bounds = { minx: minx - (padding/2),\n maxx: maxx - (padding/2),\n miny: 0,\n maxy: descent-ascent };\n metrics.height = 1+(descent - ascent);\n }\n\n // if we ARE dealing with whitespace, most values will just be zero.\n else {\n // Only whitespace, so we can't measure the text\n metrics.ascent = 0;\n metrics.descent = 0;\n metrics.bounds = { minx: 0,\n maxx: metrics.width, // Best guess\n miny: 0,\n maxy: 0 };\n metrics.height = 0;\n }\n return metrics;\n };\n\nexport default measureText;\n","import buildModuleUrl from \"./buildModuleUrl.js\";\nimport Color from \"./Color.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Resource from \"./Resource.js\";\nimport writeTextToCanvas from \"./writeTextToCanvas.js\";\n\n/**\n * A utility class for generating custom map pins as canvas elements.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/PinBuilder.png' width='500'/><br />\n * Example pins generated using both the maki icon set, which ships with Cesium, and single character text.\n * </div>\n *\n * @alias PinBuilder\n * @constructor\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Map%20Pins.html|Cesium Sandcastle PinBuilder Demo}\n */\nfunction PinBuilder() {\n this._cache = {};\n}\n\n/**\n * Creates an empty pin of the specified color and size.\n *\n * @param {Color} color The color of the pin.\n * @param {Number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement} The canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromColor = function (color, size) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(color)) {\n throw new DeveloperError(\"color is required\");\n }\n if (!defined(size)) {\n throw new DeveloperError(\"size is required\");\n }\n //>>includeEnd('debug');\n return createPin(undefined, undefined, color, size, this._cache);\n};\n\n/**\n * Creates a pin with the specified icon, color, and size.\n *\n * @param {Resource|String} url The url of the image to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {Number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement|Promise.<HTMLCanvasElement>} The canvas element or a Promise to the canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromUrl = function (url, color, size) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(url)) {\n throw new DeveloperError(\"url is required\");\n }\n if (!defined(color)) {\n throw new DeveloperError(\"color is required\");\n }\n if (!defined(size)) {\n throw new DeveloperError(\"size is required\");\n }\n //>>includeEnd('debug');\n return createPin(url, undefined, color, size, this._cache);\n};\n\n/**\n * Creates a pin with the specified {@link https://www.mapbox.com/maki/|maki} icon identifier, color, and size.\n *\n * @param {String} id The id of the maki icon to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {Number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement|Promise.<HTMLCanvasElement>} The canvas element or a Promise to the canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromMakiIconId = function (id, color, size) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required\");\n }\n if (!defined(color)) {\n throw new DeveloperError(\"color is required\");\n }\n if (!defined(size)) {\n throw new DeveloperError(\"size is required\");\n }\n //>>includeEnd('debug');\n return createPin(\n buildModuleUrl(\"Assets/Textures/maki/\" + encodeURIComponent(id) + \".png\"),\n undefined,\n color,\n size,\n this._cache\n );\n};\n\n/**\n * Creates a pin with the specified text, color, and size. The text will be sized to be as large as possible\n * while still being contained completely within the pin.\n *\n * @param {String} text The text to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {Number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement} The canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromText = function (text, color, size) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(text)) {\n throw new DeveloperError(\"text is required\");\n }\n if (!defined(color)) {\n throw new DeveloperError(\"color is required\");\n }\n if (!defined(size)) {\n throw new DeveloperError(\"size is required\");\n }\n //>>includeEnd('debug');\n\n return createPin(undefined, text, color, size, this._cache);\n};\n\nvar colorScratch = new Color();\n\n//This function (except for the 3 commented lines) was auto-generated from an online tool,\n//http://www.professorcloud.com/svg-to-canvas/, using Assets/Textures/pin.svg as input.\n//The reason we simply can't load and draw the SVG directly to the canvas is because\n//it taints the canvas in Internet Explorer (and possibly some other browsers); making\n//it impossible to create a WebGL texture from the result.\nfunction drawPin(context2D, color, size) {\n context2D.save();\n context2D.scale(size / 24, size / 24); //Added to auto-generated code to scale up to desired size.\n context2D.fillStyle = color.toCssColorString(); //Modified from auto-generated code.\n context2D.strokeStyle = color.brighten(0.6, colorScratch).toCssColorString(); //Modified from auto-generated code.\n context2D.lineWidth = 0.846;\n context2D.beginPath();\n context2D.moveTo(6.72, 0.422);\n context2D.lineTo(17.28, 0.422);\n context2D.bezierCurveTo(18.553, 0.422, 19.577, 1.758, 19.577, 3.415);\n context2D.lineTo(19.577, 10.973);\n context2D.bezierCurveTo(19.577, 12.63, 18.553, 13.966, 17.282, 13.966);\n context2D.lineTo(14.386, 14.008);\n context2D.lineTo(11.826, 23.578);\n context2D.lineTo(9.614, 14.008);\n context2D.lineTo(6.719, 13.965);\n context2D.bezierCurveTo(5.446, 13.983, 4.422, 12.629, 4.422, 10.972);\n context2D.lineTo(4.422, 3.416);\n context2D.bezierCurveTo(4.423, 1.76, 5.447, 0.423, 6.718, 0.423);\n context2D.closePath();\n context2D.fill();\n context2D.stroke();\n context2D.restore();\n}\n\n//This function takes an image or canvas and uses it as a template\n//to \"stamp\" the pin with a white image outlined in black. The color\n//values of the input image are ignored completely and only the alpha\n//values are used.\nfunction drawIcon(context2D, image, size) {\n //Size is the largest image that looks good inside of pin box.\n var imageSize = size / 2.5;\n var sizeX = imageSize;\n var sizeY = imageSize;\n\n if (image.width > image.height) {\n sizeY = imageSize * (image.height / image.width);\n } else if (image.width < image.height) {\n sizeX = imageSize * (image.width / image.height);\n }\n\n //x and y are the center of the pin box\n var x = Math.round((size - sizeX) / 2);\n var y = Math.round((7 / 24) * size - sizeY / 2);\n\n context2D.globalCompositeOperation = \"destination-out\";\n context2D.drawImage(image, x - 1, y, sizeX, sizeY);\n context2D.drawImage(image, x, y - 1, sizeX, sizeY);\n context2D.drawImage(image, x + 1, y, sizeX, sizeY);\n context2D.drawImage(image, x, y + 1, sizeX, sizeY);\n\n context2D.globalCompositeOperation = \"destination-over\";\n context2D.fillStyle = Color.BLACK.toCssColorString();\n context2D.fillRect(x - 1, y - 1, sizeX + 2, sizeY + 2);\n\n context2D.globalCompositeOperation = \"destination-out\";\n context2D.drawImage(image, x, y, sizeX, sizeY);\n\n context2D.globalCompositeOperation = \"destination-over\";\n context2D.fillStyle = Color.WHITE.toCssColorString();\n context2D.fillRect(x - 1, y - 2, sizeX + 2, sizeY + 2);\n}\n\nvar stringifyScratch = new Array(4);\nfunction createPin(url, label, color, size, cache) {\n //Use the parameters as a unique ID for caching.\n stringifyScratch[0] = url;\n stringifyScratch[1] = label;\n stringifyScratch[2] = color;\n stringifyScratch[3] = size;\n var id = JSON.stringify(stringifyScratch);\n\n var item = cache[id];\n if (defined(item)) {\n return item;\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = size;\n canvas.height = size;\n\n var context2D = canvas.getContext(\"2d\");\n drawPin(context2D, color, size);\n\n if (defined(url)) {\n var resource = Resource.createIfNeeded(url);\n\n //If we have an image url, load it and then stamp the pin.\n var promise = resource.fetchImage().then(function (image) {\n drawIcon(context2D, image, size);\n cache[id] = canvas;\n return canvas;\n });\n cache[id] = promise;\n return promise;\n } else if (defined(label)) {\n //If we have a label, write it to a canvas and then stamp the pin.\n var image = writeTextToCanvas(label, {\n font: \"bold \" + size + \"px sans-serif\",\n });\n drawIcon(context2D, image, size);\n }\n\n cache[id] = canvas;\n return canvas;\n}\nexport default PinBuilder;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * Describes geometry representing a plane centered at the origin, with a unit width and length.\n *\n * @alias PlaneGeometry\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @example\n * var planeGeometry = new Cesium.PlaneGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY\n * });\n */\nfunction PlaneGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n\n this._vertexFormat = vertexFormat;\n this._workerName = \"createPlaneGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nPlaneGeometry.packedLength = VertexFormat.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PlaneGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPlaneGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n\n return array;\n};\n\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n vertexFormat: scratchVertexFormat,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PlaneGeometry} [result] The object into which to store the result.\n * @returns {PlaneGeometry} The modified result parameter or a new PlaneGeometry instance if one was not provided.\n */\nPlaneGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n\n if (!defined(result)) {\n return new PlaneGeometry(scratchOptions);\n }\n\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n\n return result;\n};\n\nvar min = new Cartesian3(-0.5, -0.5, 0.0);\nvar max = new Cartesian3(0.5, 0.5, 0.0);\n\n/**\n * Computes the geometric representation of a plane, including its vertices, indices, and a bounding sphere.\n *\n * @param {PlaneGeometry} planeGeometry A description of the plane.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPlaneGeometry.createGeometry = function (planeGeometry) {\n var vertexFormat = planeGeometry._vertexFormat;\n\n var attributes = new GeometryAttributes();\n var indices;\n var positions;\n\n if (vertexFormat.position) {\n // 4 corner points. Duplicated 3 times each for each incident edge/face.\n positions = new Float64Array(4 * 3);\n\n // +z face\n positions[0] = min.x;\n positions[1] = min.y;\n positions[2] = 0.0;\n positions[3] = max.x;\n positions[4] = min.y;\n positions[5] = 0.0;\n positions[6] = max.x;\n positions[7] = max.y;\n positions[8] = 0.0;\n positions[9] = min.x;\n positions[10] = max.y;\n positions[11] = 0.0;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n if (vertexFormat.normal) {\n var normals = new Float32Array(4 * 3);\n\n // +z face\n normals[0] = 0.0;\n normals[1] = 0.0;\n normals[2] = 1.0;\n normals[3] = 0.0;\n normals[4] = 0.0;\n normals[5] = 1.0;\n normals[6] = 0.0;\n normals[7] = 0.0;\n normals[8] = 1.0;\n normals[9] = 0.0;\n normals[10] = 0.0;\n normals[11] = 1.0;\n\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.st) {\n var texCoords = new Float32Array(4 * 2);\n\n // +z face\n texCoords[0] = 0.0;\n texCoords[1] = 0.0;\n texCoords[2] = 1.0;\n texCoords[3] = 0.0;\n texCoords[4] = 1.0;\n texCoords[5] = 1.0;\n texCoords[6] = 0.0;\n texCoords[7] = 1.0;\n\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: texCoords,\n });\n }\n\n if (vertexFormat.tangent) {\n var tangents = new Float32Array(4 * 3);\n\n // +z face\n tangents[0] = 1.0;\n tangents[1] = 0.0;\n tangents[2] = 0.0;\n tangents[3] = 1.0;\n tangents[4] = 0.0;\n tangents[5] = 0.0;\n tangents[6] = 1.0;\n tangents[7] = 0.0;\n tangents[8] = 0.0;\n tangents[9] = 1.0;\n tangents[10] = 0.0;\n tangents[11] = 0.0;\n\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n var bitangents = new Float32Array(4 * 3);\n\n // +z face\n bitangents[0] = 0.0;\n bitangents[1] = 1.0;\n bitangents[2] = 0.0;\n bitangents[3] = 0.0;\n bitangents[4] = 1.0;\n bitangents[5] = 0.0;\n bitangents[6] = 0.0;\n bitangents[7] = 1.0;\n bitangents[8] = 0.0;\n bitangents[9] = 0.0;\n bitangents[10] = 1.0;\n bitangents[11] = 0.0;\n\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n // 2 triangles\n indices = new Uint16Array(2 * 3);\n\n // +z face\n indices[0] = 0;\n indices[1] = 1;\n indices[2] = 2;\n indices[3] = 0;\n indices[4] = 2;\n indices[5] = 3;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\n });\n};\nexport default PlaneGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\n/**\n * Describes geometry representing the outline of a plane centered at the origin, with a unit width and length.\n *\n * @alias PlaneOutlineGeometry\n * @constructor\n *\n */\nfunction PlaneOutlineGeometry() {\n this._workerName = \"createPlaneOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nPlaneOutlineGeometry.packedLength = 0;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PlaneOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n *\n * @returns {Number[]} The array that was packed into\n */\nPlaneOutlineGeometry.pack = function (value, array) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PlaneOutlineGeometry} [result] The object into which to store the result.\n * @returns {PlaneOutlineGeometry} The modified result parameter or a new PlaneOutlineGeometry instance if one was not provided.\n */\nPlaneOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new PlaneOutlineGeometry();\n }\n\n return result;\n};\n\nvar min = new Cartesian3(-0.5, -0.5, 0.0);\nvar max = new Cartesian3(0.5, 0.5, 0.0);\n\n/**\n * Computes the geometric representation of an outline of a plane, including its vertices, indices, and a bounding sphere.\n *\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPlaneOutlineGeometry.createGeometry = function () {\n var attributes = new GeometryAttributes();\n var indices = new Uint16Array(4 * 2);\n var positions = new Float64Array(4 * 3);\n\n positions[0] = min.x;\n positions[1] = min.y;\n positions[2] = min.z;\n positions[3] = max.x;\n positions[4] = min.y;\n positions[5] = min.z;\n positions[6] = max.x;\n positions[7] = max.y;\n positions[8] = min.z;\n positions[9] = min.x;\n positions[10] = max.y;\n positions[11] = min.z;\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n indices[0] = 0;\n indices[1] = 1;\n indices[2] = 1;\n indices[3] = 2;\n indices[4] = 2;\n indices[5] = 3;\n indices[6] = 3;\n indices[7] = 0;\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\n });\n};\nexport default PlaneOutlineGeometry;\n","import barycentricCoordinates from \"./barycentricCoordinates.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\n\nvar coords = new Cartesian3();\n\n/**\n * Determines if a point is inside a triangle.\n *\n * @function pointInsideTriangle\n *\n * @param {Cartesian2|Cartesian3} point The point to test.\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle.\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle.\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle.\n * @returns {Boolean} <code>true</code> if the point is inside the triangle; otherwise, <code>false</code>.\n *\n * @example\n * // Returns true\n * var p = new Cesium.Cartesian2(0.25, 0.25);\n * var b = Cesium.pointInsideTriangle(p,\n * new Cesium.Cartesian2(0.0, 0.0),\n * new Cesium.Cartesian2(1.0, 0.0),\n * new Cesium.Cartesian2(0.0, 1.0));\n */\nfunction pointInsideTriangle(point, p0, p1, p2) {\n barycentricCoordinates(point, p0, p1, p2, coords);\n return coords.x > 0.0 && coords.y > 0.0 && coords.z > 0;\n}\nexport default pointInsideTriangle;\n","import ArcType from \"./ArcType.js\";\nimport arrayFill from \"./arrayFill.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nvar scratchCarto1 = new Cartographic();\nvar scratchCarto2 = new Cartographic();\nfunction adjustPosHeightsForNormal(position, p1, p2, ellipsoid) {\n var carto1 = ellipsoid.cartesianToCartographic(position, scratchCarto1);\n var height = carto1.height;\n var p1Carto = ellipsoid.cartesianToCartographic(p1, scratchCarto2);\n p1Carto.height = height;\n ellipsoid.cartographicToCartesian(p1Carto, p1);\n\n var p2Carto = ellipsoid.cartesianToCartographic(p2, scratchCarto2);\n p2Carto.height = height - 100;\n ellipsoid.cartographicToCartesian(p2Carto, p2);\n}\n\nvar scratchBoundingRectangle = new BoundingRectangle();\nvar scratchPosition = new Cartesian3();\nvar scratchNormal = new Cartesian3();\nvar scratchTangent = new Cartesian3();\nvar scratchBitangent = new Cartesian3();\nvar p1Scratch = new Cartesian3();\nvar p2Scratch = new Cartesian3();\nvar scratchPerPosNormal = new Cartesian3();\nvar scratchPerPosTangent = new Cartesian3();\nvar scratchPerPosBitangent = new Cartesian3();\n\nvar appendTextureCoordinatesOrigin = new Cartesian2();\nvar appendTextureCoordinatesCartesian2 = new Cartesian2();\nvar appendTextureCoordinatesCartesian3 = new Cartesian3();\nvar appendTextureCoordinatesQuaternion = new Quaternion();\nvar appendTextureCoordinatesMatrix3 = new Matrix3();\nvar tangentMatrixScratch = new Matrix3();\n\nfunction computeAttributes(options) {\n var vertexFormat = options.vertexFormat;\n var geometry = options.geometry;\n var shadowVolume = options.shadowVolume;\n var flatPositions = geometry.attributes.position.values;\n var length = flatPositions.length;\n var wall = options.wall;\n var top = options.top || wall;\n var bottom = options.bottom || wall;\n if (\n vertexFormat.st ||\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent ||\n shadowVolume\n ) {\n // PERFORMANCE_IDEA: Compute before subdivision, then just interpolate during subdivision.\n // PERFORMANCE_IDEA: Compute with createGeometryFromPositions() for fast path when there's no holes.\n var boundingRectangle = options.boundingRectangle;\n var tangentPlane = options.tangentPlane;\n var ellipsoid = options.ellipsoid;\n var stRotation = options.stRotation;\n var perPositionHeight = options.perPositionHeight;\n\n var origin = appendTextureCoordinatesOrigin;\n origin.x = boundingRectangle.x;\n origin.y = boundingRectangle.y;\n\n var textureCoordinates = vertexFormat.st\n ? new Float32Array(2 * (length / 3))\n : undefined;\n var normals;\n if (vertexFormat.normal) {\n if (perPositionHeight && top && !wall) {\n normals = geometry.attributes.normal.values;\n } else {\n normals = new Float32Array(length);\n }\n }\n var tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(length)\n : undefined;\n var extrudeNormals = shadowVolume ? new Float32Array(length) : undefined;\n\n var textureCoordIndex = 0;\n var attrIndex = 0;\n\n var normal = scratchNormal;\n var tangent = scratchTangent;\n var bitangent = scratchBitangent;\n var recomputeNormal = true;\n\n var textureMatrix = appendTextureCoordinatesMatrix3;\n var tangentRotationMatrix = tangentMatrixScratch;\n if (stRotation !== 0.0) {\n var rotation = Quaternion.fromAxisAngle(\n tangentPlane._plane.normal,\n stRotation,\n appendTextureCoordinatesQuaternion\n );\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n rotation = Quaternion.fromAxisAngle(\n tangentPlane._plane.normal,\n -stRotation,\n appendTextureCoordinatesQuaternion\n );\n tangentRotationMatrix = Matrix3.fromQuaternion(\n rotation,\n tangentRotationMatrix\n );\n } else {\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n tangentRotationMatrix = Matrix3.clone(\n Matrix3.IDENTITY,\n tangentRotationMatrix\n );\n }\n\n var bottomOffset = 0;\n var bottomOffset2 = 0;\n\n if (top && bottom) {\n bottomOffset = length / 2;\n bottomOffset2 = length / 3;\n\n length /= 2;\n }\n\n for (var i = 0; i < length; i += 3) {\n var position = Cartesian3.fromArray(\n flatPositions,\n i,\n appendTextureCoordinatesCartesian3\n );\n\n if (vertexFormat.st) {\n var p = Matrix3.multiplyByVector(\n textureMatrix,\n position,\n scratchPosition\n );\n p = ellipsoid.scaleToGeodeticSurface(p, p);\n var st = tangentPlane.projectPointOntoPlane(\n p,\n appendTextureCoordinatesCartesian2\n );\n Cartesian2.subtract(st, origin, st);\n\n var stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\n var sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\n if (bottom) {\n textureCoordinates[textureCoordIndex + bottomOffset2] = stx;\n textureCoordinates[textureCoordIndex + 1 + bottomOffset2] = sty;\n }\n if (top) {\n textureCoordinates[textureCoordIndex] = stx;\n textureCoordinates[textureCoordIndex + 1] = sty;\n }\n\n textureCoordIndex += 2;\n }\n\n if (\n vertexFormat.normal ||\n vertexFormat.tangent ||\n vertexFormat.bitangent ||\n shadowVolume\n ) {\n var attrIndex1 = attrIndex + 1;\n var attrIndex2 = attrIndex + 2;\n\n if (wall) {\n if (i + 3 < length) {\n var p1 = Cartesian3.fromArray(flatPositions, i + 3, p1Scratch);\n\n if (recomputeNormal) {\n var p2 = Cartesian3.fromArray(\n flatPositions,\n i + length,\n p2Scratch\n );\n if (perPositionHeight) {\n adjustPosHeightsForNormal(position, p1, p2, ellipsoid);\n }\n Cartesian3.subtract(p1, position, p1);\n Cartesian3.subtract(p2, position, p2);\n normal = Cartesian3.normalize(\n Cartesian3.cross(p2, p1, normal),\n normal\n );\n recomputeNormal = false;\n }\n\n if (Cartesian3.equalsEpsilon(p1, position, CesiumMath.EPSILON10)) {\n // if we've reached a corner\n recomputeNormal = true;\n }\n }\n\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n bitangent = ellipsoid.geodeticSurfaceNormal(position, bitangent);\n if (vertexFormat.tangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(bitangent, normal, tangent),\n tangent\n );\n }\n }\n } else {\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n if (perPositionHeight) {\n scratchPerPosNormal = Cartesian3.fromArray(\n normals,\n attrIndex,\n scratchPerPosNormal\n );\n scratchPerPosTangent = Cartesian3.cross(\n Cartesian3.UNIT_Z,\n scratchPerPosNormal,\n scratchPerPosTangent\n );\n scratchPerPosTangent = Cartesian3.normalize(\n Matrix3.multiplyByVector(\n tangentRotationMatrix,\n scratchPerPosTangent,\n scratchPerPosTangent\n ),\n scratchPerPosTangent\n );\n if (vertexFormat.bitangent) {\n scratchPerPosBitangent = Cartesian3.normalize(\n Cartesian3.cross(\n scratchPerPosNormal,\n scratchPerPosTangent,\n scratchPerPosBitangent\n ),\n scratchPerPosBitangent\n );\n }\n }\n\n tangent = Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\n tangent = Cartesian3.normalize(\n Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent),\n tangent\n );\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n }\n }\n }\n\n if (vertexFormat.normal) {\n if (options.wall) {\n normals[attrIndex + bottomOffset] = normal.x;\n normals[attrIndex1 + bottomOffset] = normal.y;\n normals[attrIndex2 + bottomOffset] = normal.z;\n } else if (bottom) {\n normals[attrIndex + bottomOffset] = -normal.x;\n normals[attrIndex1 + bottomOffset] = -normal.y;\n normals[attrIndex2 + bottomOffset] = -normal.z;\n }\n\n if ((top && !perPositionHeight) || wall) {\n normals[attrIndex] = normal.x;\n normals[attrIndex1] = normal.y;\n normals[attrIndex2] = normal.z;\n }\n }\n\n if (shadowVolume) {\n if (wall) {\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n }\n extrudeNormals[attrIndex + bottomOffset] = -normal.x;\n extrudeNormals[attrIndex1 + bottomOffset] = -normal.y;\n extrudeNormals[attrIndex2 + bottomOffset] = -normal.z;\n }\n\n if (vertexFormat.tangent) {\n if (options.wall) {\n tangents[attrIndex + bottomOffset] = tangent.x;\n tangents[attrIndex1 + bottomOffset] = tangent.y;\n tangents[attrIndex2 + bottomOffset] = tangent.z;\n } else if (bottom) {\n tangents[attrIndex + bottomOffset] = -tangent.x;\n tangents[attrIndex1 + bottomOffset] = -tangent.y;\n tangents[attrIndex2 + bottomOffset] = -tangent.z;\n }\n\n if (top) {\n if (perPositionHeight) {\n tangents[attrIndex] = scratchPerPosTangent.x;\n tangents[attrIndex1] = scratchPerPosTangent.y;\n tangents[attrIndex2] = scratchPerPosTangent.z;\n } else {\n tangents[attrIndex] = tangent.x;\n tangents[attrIndex1] = tangent.y;\n tangents[attrIndex2] = tangent.z;\n }\n }\n }\n\n if (vertexFormat.bitangent) {\n if (bottom) {\n bitangents[attrIndex + bottomOffset] = bitangent.x;\n bitangents[attrIndex1 + bottomOffset] = bitangent.y;\n bitangents[attrIndex2 + bottomOffset] = bitangent.z;\n }\n if (top) {\n if (perPositionHeight) {\n bitangents[attrIndex] = scratchPerPosBitangent.x;\n bitangents[attrIndex1] = scratchPerPosBitangent.y;\n bitangents[attrIndex2] = scratchPerPosBitangent.z;\n } else {\n bitangents[attrIndex] = bitangent.x;\n bitangents[attrIndex1] = bitangent.y;\n bitangents[attrIndex2] = bitangent.z;\n }\n }\n }\n attrIndex += 3;\n }\n }\n\n if (vertexFormat.st) {\n geometry.attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n if (vertexFormat.normal) {\n geometry.attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n geometry.attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n geometry.attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (shadowVolume) {\n geometry.attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: extrudeNormals,\n });\n }\n }\n\n if (options.extrude && defined(options.offsetAttribute)) {\n var size = flatPositions.length / 3;\n var offsetAttribute = new Uint8Array(size);\n\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n if ((top && bottom) || wall) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else if (top) {\n offsetAttribute = arrayFill(offsetAttribute, 1);\n }\n } else {\n var offsetValue =\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n });\n }\n\n return geometry;\n}\n\nvar startCartographicScratch = new Cartographic();\nvar endCartographicScratch = new Cartographic();\nvar idlCross = {\n westOverIDL: 0.0,\n eastOverIDL: 0.0,\n};\nvar ellipsoidGeodesic = new EllipsoidGeodesic();\nfunction computeRectangle(positions, ellipsoid, arcType, granularity, result) {\n result = defaultValue(result, new Rectangle());\n if (!defined(positions) || positions.length < 3) {\n result.west = 0.0;\n result.north = 0.0;\n result.south = 0.0;\n result.east = 0.0;\n return result;\n }\n\n if (arcType === ArcType.RHUMB) {\n return Rectangle.fromCartesianArray(positions, ellipsoid, result);\n }\n\n if (!ellipsoidGeodesic.ellipsoid.equals(ellipsoid)) {\n ellipsoidGeodesic = new EllipsoidGeodesic(undefined, undefined, ellipsoid);\n }\n\n result.west = Number.POSITIVE_INFINITY;\n result.east = Number.NEGATIVE_INFINITY;\n result.south = Number.POSITIVE_INFINITY;\n result.north = Number.NEGATIVE_INFINITY;\n\n idlCross.westOverIDL = Number.POSITIVE_INFINITY;\n idlCross.eastOverIDL = Number.NEGATIVE_INFINITY;\n\n var inverseChordLength =\n 1.0 / CesiumMath.chordLength(granularity, ellipsoid.maximumRadius);\n var positionsLength = positions.length;\n var endCartographic = ellipsoid.cartesianToCartographic(\n positions[0],\n endCartographicScratch\n );\n var startCartographic = startCartographicScratch;\n var swap;\n\n for (var i = 1; i < positionsLength; i++) {\n swap = startCartographic;\n startCartographic = endCartographic;\n endCartographic = ellipsoid.cartesianToCartographic(positions[i], swap);\n ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic);\n interpolateAndGrowRectangle(\n ellipsoidGeodesic,\n inverseChordLength,\n result,\n idlCross\n );\n }\n\n swap = startCartographic;\n startCartographic = endCartographic;\n endCartographic = ellipsoid.cartesianToCartographic(positions[0], swap);\n ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic);\n interpolateAndGrowRectangle(\n ellipsoidGeodesic,\n inverseChordLength,\n result,\n idlCross\n );\n\n if (result.east - result.west > idlCross.eastOverIDL - idlCross.westOverIDL) {\n result.west = idlCross.westOverIDL;\n result.east = idlCross.eastOverIDL;\n\n if (result.east > CesiumMath.PI) {\n result.east = result.east - CesiumMath.TWO_PI;\n }\n if (result.west > CesiumMath.PI) {\n result.west = result.west - CesiumMath.TWO_PI;\n }\n }\n\n return result;\n}\n\nvar interpolatedCartographicScratch = new Cartographic();\nfunction interpolateAndGrowRectangle(\n ellipsoidGeodesic,\n inverseChordLength,\n result,\n idlCross\n) {\n var segmentLength = ellipsoidGeodesic.surfaceDistance;\n\n var numPoints = Math.ceil(segmentLength * inverseChordLength);\n var subsegmentDistance =\n numPoints > 0 ? segmentLength / (numPoints - 1) : Number.POSITIVE_INFINITY;\n var interpolationDistance = 0.0;\n\n for (var i = 0; i < numPoints; i++) {\n var interpolatedCartographic = ellipsoidGeodesic.interpolateUsingSurfaceDistance(\n interpolationDistance,\n interpolatedCartographicScratch\n );\n interpolationDistance += subsegmentDistance;\n var longitude = interpolatedCartographic.longitude;\n var latitude = interpolatedCartographic.latitude;\n\n result.west = Math.min(result.west, longitude);\n result.east = Math.max(result.east, longitude);\n result.south = Math.min(result.south, latitude);\n result.north = Math.max(result.north, latitude);\n\n var lonAdjusted =\n longitude >= 0 ? longitude : longitude + CesiumMath.TWO_PI;\n idlCross.westOverIDL = Math.min(idlCross.westOverIDL, lonAdjusted);\n idlCross.eastOverIDL = Math.max(idlCross.eastOverIDL, lonAdjusted);\n }\n}\n\nvar createGeometryFromPositionsExtrudedPositions = [];\n\nfunction createGeometryFromPositionsExtruded(\n ellipsoid,\n polygon,\n granularity,\n hierarchy,\n perPositionHeight,\n closeTop,\n closeBottom,\n vertexFormat,\n arcType\n) {\n var geos = {\n walls: [],\n };\n var i;\n\n if (closeTop || closeBottom) {\n var topGeo = PolygonGeometryLibrary.createGeometryFromPositions(\n ellipsoid,\n polygon,\n granularity,\n perPositionHeight,\n vertexFormat,\n arcType\n );\n\n var edgePoints = topGeo.attributes.position.values;\n var indices = topGeo.indices;\n var numPositions;\n var newIndices;\n\n if (closeTop && closeBottom) {\n var topBottomPositions = edgePoints.concat(edgePoints);\n\n numPositions = topBottomPositions.length / 3;\n\n newIndices = IndexDatatype.createTypedArray(\n numPositions,\n indices.length * 2\n );\n newIndices.set(indices);\n var ilength = indices.length;\n\n var length = numPositions / 2;\n\n for (i = 0; i < ilength; i += 3) {\n var i0 = newIndices[i] + length;\n var i1 = newIndices[i + 1] + length;\n var i2 = newIndices[i + 2] + length;\n\n newIndices[i + ilength] = i2;\n newIndices[i + 1 + ilength] = i1;\n newIndices[i + 2 + ilength] = i0;\n }\n\n topGeo.attributes.position.values = topBottomPositions;\n if (perPositionHeight && vertexFormat.normal) {\n var normals = topGeo.attributes.normal.values;\n topGeo.attributes.normal.values = new Float32Array(\n topBottomPositions.length\n );\n topGeo.attributes.normal.values.set(normals);\n }\n topGeo.indices = newIndices;\n } else if (closeBottom) {\n numPositions = edgePoints.length / 3;\n newIndices = IndexDatatype.createTypedArray(numPositions, indices.length);\n\n for (i = 0; i < indices.length; i += 3) {\n newIndices[i] = indices[i + 2];\n newIndices[i + 1] = indices[i + 1];\n newIndices[i + 2] = indices[i];\n }\n\n topGeo.indices = newIndices;\n }\n\n geos.topAndBottom = new GeometryInstance({\n geometry: topGeo,\n });\n }\n\n var outerRing = hierarchy.outerRing;\n var tangentPlane = EllipsoidTangentPlane.fromPoints(outerRing, ellipsoid);\n var positions2D = tangentPlane.projectPointsOntoPlane(\n outerRing,\n createGeometryFromPositionsExtrudedPositions\n );\n\n var windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n if (windingOrder === WindingOrder.CLOCKWISE) {\n outerRing = outerRing.slice().reverse();\n }\n\n var wallGeo = PolygonGeometryLibrary.computeWallGeometry(\n outerRing,\n ellipsoid,\n granularity,\n perPositionHeight,\n arcType\n );\n geos.walls.push(\n new GeometryInstance({\n geometry: wallGeo,\n })\n );\n\n var holes = hierarchy.holes;\n for (i = 0; i < holes.length; i++) {\n var hole = holes[i];\n\n tangentPlane = EllipsoidTangentPlane.fromPoints(hole, ellipsoid);\n positions2D = tangentPlane.projectPointsOntoPlane(\n hole,\n createGeometryFromPositionsExtrudedPositions\n );\n\n windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n if (windingOrder === WindingOrder.COUNTER_CLOCKWISE) {\n hole = hole.slice().reverse();\n }\n\n wallGeo = PolygonGeometryLibrary.computeWallGeometry(\n hole,\n ellipsoid,\n granularity,\n perPositionHeight,\n arcType\n );\n geos.walls.push(\n new GeometryInstance({\n geometry: wallGeo,\n })\n );\n }\n\n return geos;\n}\n\n/**\n * A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias PolygonGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\n * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n *\n * @see PolygonGeometry#createGeometry\n * @see PolygonGeometry#fromPositions\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polygon.html|Cesium Sandcastle Polygon Demo}\n *\n * @example\n * // 1. create a polygon from points\n * var polygon = new Cesium.PolygonGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * )\n * });\n * var geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * // 2. create a nested polygon with holes\n * var polygonWithHole = new Cesium.PolygonGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -109.0, 30.0,\n * -95.0, 30.0,\n * -95.0, 40.0,\n * -109.0, 40.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -107.0, 31.0,\n * -107.0, 39.0,\n * -97.0, 39.0,\n * -97.0, 31.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 33.0,\n * -99.0, 33.0,\n * -99.0, 37.0,\n * -105.0, 37.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -103.0, 34.0,\n * -101.0, 34.0,\n * -101.0, 36.0,\n * -103.0, 36.0\n * ])\n * )]\n * )]\n * )]\n * )\n * });\n * var geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole);\n *\n * // 3. create extruded polygon\n * var extrudedPolygon = new Cesium.PolygonGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * ),\n * extrudedHeight: 300000\n * });\n * var geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon);\n */\nfunction PolygonGeometry(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\n if (\n defined(options.perPositionHeight) &&\n options.perPositionHeight &&\n defined(options.height)\n ) {\n throw new DeveloperError(\n \"Cannot use both options.perPositionHeight and options.height\"\n );\n }\n if (\n defined(options.arcType) &&\n options.arcType !== ArcType.GEODESIC &&\n options.arcType !== ArcType.RHUMB\n ) {\n throw new DeveloperError(\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\n );\n }\n //>>includeEnd('debug');\n\n var polygonHierarchy = options.polygonHierarchy;\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var stRotation = defaultValue(options.stRotation, 0.0);\n var perPositionHeight = defaultValue(options.perPositionHeight, false);\n var perPositionHeightExtrude =\n perPositionHeight && defined(options.extrudedHeight);\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n if (!perPositionHeightExtrude) {\n var h = Math.max(height, extrudedHeight);\n extrudedHeight = Math.min(height, extrudedHeight);\n height = h;\n }\n\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._granularity = granularity;\n this._stRotation = stRotation;\n this._height = height;\n this._extrudedHeight = extrudedHeight;\n this._closeTop = defaultValue(options.closeTop, true);\n this._closeBottom = defaultValue(options.closeBottom, true);\n this._polygonHierarchy = polygonHierarchy;\n this._perPositionHeight = perPositionHeight;\n this._perPositionHeightExtrude = perPositionHeightExtrude;\n this._shadowVolume = defaultValue(options.shadowVolume, false);\n this._workerName = \"createPolygonGeometry\";\n this._offsetAttribute = options.offsetAttribute;\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n\n this._rectangle = undefined;\n this._textureCoordinateRotationPoints = undefined;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n PolygonGeometryLibrary.computeHierarchyPackedLength(polygonHierarchy) +\n Ellipsoid.packedLength +\n VertexFormat.packedLength +\n 12;\n}\n\n/**\n * A description of a polygon from an array of positions. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {Number} [options.height=0.0] The height of the polygon.\n * @param {Number} [options.extrudedHeight] The height of the polygon extrusion.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @returns {PolygonGeometry}\n *\n *\n * @example\n * // create a polygon from points\n * var polygon = Cesium.PolygonGeometry.fromPositions({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * });\n * var geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * @see PolygonGeometry#createGeometry\n */\nPolygonGeometry.fromPositions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", options.positions);\n //>>includeEnd('debug');\n\n var newOptions = {\n polygonHierarchy: {\n positions: options.positions,\n },\n height: options.height,\n extrudedHeight: options.extrudedHeight,\n vertexFormat: options.vertexFormat,\n stRotation: options.stRotation,\n ellipsoid: options.ellipsoid,\n granularity: options.granularity,\n perPositionHeight: options.perPositionHeight,\n closeTop: options.closeTop,\n closeBottom: options.closeBottom,\n offsetAttribute: options.offsetAttribute,\n arcType: options.arcType,\n };\n return new PolygonGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPolygonGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n value._polygonHierarchy,\n array,\n startingIndex\n );\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._stRotation;\n array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\n array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\n array[startingIndex++] = value._closeTop ? 1.0 : 0.0;\n array[startingIndex++] = value._closeBottom ? 1.0 : 0.0;\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n array[startingIndex++] = defaultValue(value._offsetAttribute, -1);\n array[startingIndex++] = value._arcType;\n array[startingIndex] = value.packedLength;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\n\n//Only used to avoid inability to default construct.\nvar dummyOptions = {\n polygonHierarchy: {},\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonGeometry} [result] The object into which to store the result.\n */\nPolygonGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n array,\n startingIndex\n );\n startingIndex = polygonHierarchy.startingIndex;\n delete polygonHierarchy.startingIndex;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var height = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var granularity = array[startingIndex++];\n var stRotation = array[startingIndex++];\n var perPositionHeightExtrude = array[startingIndex++] === 1.0;\n var perPositionHeight = array[startingIndex++] === 1.0;\n var closeTop = array[startingIndex++] === 1.0;\n var closeBottom = array[startingIndex++] === 1.0;\n var shadowVolume = array[startingIndex++] === 1.0;\n var offsetAttribute = array[startingIndex++];\n var arcType = array[startingIndex++];\n var packedLength = array[startingIndex];\n\n if (!defined(result)) {\n result = new PolygonGeometry(dummyOptions);\n }\n\n result._polygonHierarchy = polygonHierarchy;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._height = height;\n result._extrudedHeight = extrudedHeight;\n result._granularity = granularity;\n result._stRotation = stRotation;\n result._perPositionHeightExtrude = perPositionHeightExtrude;\n result._perPositionHeight = perPositionHeight;\n result._closeTop = closeTop;\n result._closeBottom = closeBottom;\n result._shadowVolume = shadowVolume;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n result._arcType = arcType;\n result.packedLength = packedLength;\n return result;\n};\n\n/**\n * Returns the bounding rectangle given the provided options\n *\n * @param {Object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions sampled.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle\n */\nPolygonGeometry.computeRectangle = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\n //>>includeEnd('debug');\n\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n //>>includeStart('debug', pragmas.debug);\n if (arcType !== ArcType.GEODESIC && arcType !== ArcType.RHUMB) {\n throw new DeveloperError(\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\n );\n }\n //>>includeEnd('debug');\n\n var polygonHierarchy = options.polygonHierarchy;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n return computeRectangle(\n polygonHierarchy.positions,\n ellipsoid,\n arcType,\n granularity,\n result\n );\n};\n\n/**\n * Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolygonGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolygonGeometry.createGeometry = function (polygonGeometry) {\n var vertexFormat = polygonGeometry._vertexFormat;\n var ellipsoid = polygonGeometry._ellipsoid;\n var granularity = polygonGeometry._granularity;\n var stRotation = polygonGeometry._stRotation;\n var polygonHierarchy = polygonGeometry._polygonHierarchy;\n var perPositionHeight = polygonGeometry._perPositionHeight;\n var closeTop = polygonGeometry._closeTop;\n var closeBottom = polygonGeometry._closeBottom;\n var arcType = polygonGeometry._arcType;\n\n var outerPositions = polygonHierarchy.positions;\n if (outerPositions.length < 3) {\n return;\n }\n\n var tangentPlane = EllipsoidTangentPlane.fromPoints(\n outerPositions,\n ellipsoid\n );\n\n var results = PolygonGeometryLibrary.polygonsFromHierarchy(\n polygonHierarchy,\n tangentPlane.projectPointsOntoPlane.bind(tangentPlane),\n !perPositionHeight,\n ellipsoid\n );\n\n var hierarchy = results.hierarchy;\n var polygons = results.polygons;\n\n if (hierarchy.length === 0) {\n return;\n }\n\n outerPositions = hierarchy[0].outerRing;\n var boundingRectangle = PolygonGeometryLibrary.computeBoundingRectangle(\n tangentPlane.plane.normal,\n tangentPlane.projectPointOntoPlane.bind(tangentPlane),\n outerPositions,\n stRotation,\n scratchBoundingRectangle\n );\n\n var geometries = [];\n\n var height = polygonGeometry._height;\n var extrudedHeight = polygonGeometry._extrudedHeight;\n var extrude =\n polygonGeometry._perPositionHeightExtrude ||\n !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\n\n var options = {\n perPositionHeight: perPositionHeight,\n vertexFormat: vertexFormat,\n geometry: undefined,\n tangentPlane: tangentPlane,\n boundingRectangle: boundingRectangle,\n ellipsoid: ellipsoid,\n stRotation: stRotation,\n bottom: false,\n top: true,\n wall: false,\n extrude: false,\n arcType: arcType,\n };\n\n var i;\n\n if (extrude) {\n options.extrude = true;\n options.top = closeTop;\n options.bottom = closeBottom;\n options.shadowVolume = polygonGeometry._shadowVolume;\n options.offsetAttribute = polygonGeometry._offsetAttribute;\n for (i = 0; i < polygons.length; i++) {\n var splitGeometry = createGeometryFromPositionsExtruded(\n ellipsoid,\n polygons[i],\n granularity,\n hierarchy[i],\n perPositionHeight,\n closeTop,\n closeBottom,\n vertexFormat,\n arcType\n );\n\n var topAndBottom;\n if (closeTop && closeBottom) {\n topAndBottom = splitGeometry.topAndBottom;\n options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n topAndBottom.geometry,\n height,\n extrudedHeight,\n ellipsoid,\n perPositionHeight\n );\n } else if (closeTop) {\n topAndBottom = splitGeometry.topAndBottom;\n topAndBottom.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n topAndBottom.geometry.attributes.position.values,\n height,\n ellipsoid,\n !perPositionHeight\n );\n options.geometry = topAndBottom.geometry;\n } else if (closeBottom) {\n topAndBottom = splitGeometry.topAndBottom;\n topAndBottom.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n topAndBottom.geometry.attributes.position.values,\n extrudedHeight,\n ellipsoid,\n true\n );\n options.geometry = topAndBottom.geometry;\n }\n if (closeTop || closeBottom) {\n options.wall = false;\n topAndBottom.geometry = computeAttributes(options);\n geometries.push(topAndBottom);\n }\n\n var walls = splitGeometry.walls;\n options.wall = true;\n for (var k = 0; k < walls.length; k++) {\n var wall = walls[k];\n options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n wall.geometry,\n height,\n extrudedHeight,\n ellipsoid,\n perPositionHeight\n );\n wall.geometry = computeAttributes(options);\n geometries.push(wall);\n }\n }\n } else {\n for (i = 0; i < polygons.length; i++) {\n var geometryInstance = new GeometryInstance({\n geometry: PolygonGeometryLibrary.createGeometryFromPositions(\n ellipsoid,\n polygons[i],\n granularity,\n perPositionHeight,\n vertexFormat,\n arcType\n ),\n });\n geometryInstance.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n geometryInstance.geometry.attributes.position.values,\n height,\n ellipsoid,\n !perPositionHeight\n );\n options.geometry = geometryInstance.geometry;\n geometryInstance.geometry = computeAttributes(options);\n\n if (defined(polygonGeometry._offsetAttribute)) {\n var length =\n geometryInstance.geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\n {\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n }\n );\n }\n\n geometries.push(geometryInstance);\n }\n }\n\n var geometry = GeometryPipeline.combineInstances(geometries)[0];\n geometry.attributes.position.values = new Float64Array(\n geometry.attributes.position.values\n );\n geometry.indices = IndexDatatype.createTypedArray(\n geometry.attributes.position.values.length / 3,\n geometry.indices\n );\n\n var attributes = geometry.attributes;\n var boundingSphere = BoundingSphere.fromVertices(attributes.position.values);\n\n if (!vertexFormat.position) {\n delete attributes.position;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: geometry.indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: boundingSphere,\n offsetAttribute: polygonGeometry._offsetAttribute,\n });\n};\n\n/**\n * @private\n */\nPolygonGeometry.createShadowVolume = function (\n polygonGeometry,\n minHeightFunc,\n maxHeightFunc\n) {\n var granularity = polygonGeometry._granularity;\n var ellipsoid = polygonGeometry._ellipsoid;\n\n var minHeight = minHeightFunc(granularity, ellipsoid);\n var maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n return new PolygonGeometry({\n polygonHierarchy: polygonGeometry._polygonHierarchy,\n ellipsoid: ellipsoid,\n stRotation: polygonGeometry._stRotation,\n granularity: granularity,\n perPositionHeight: false,\n extrudedHeight: minHeight,\n height: maxHeight,\n vertexFormat: VertexFormat.POSITION_ONLY,\n shadowVolume: true,\n arcType: polygonGeometry._arcType,\n });\n};\n\nfunction textureCoordinateRotationPoints(polygonGeometry) {\n var stRotation = -polygonGeometry._stRotation;\n if (stRotation === 0.0) {\n return [0, 0, 0, 1, 1, 0];\n }\n var ellipsoid = polygonGeometry._ellipsoid;\n var positions = polygonGeometry._polygonHierarchy.positions;\n var boundingRectangle = polygonGeometry.rectangle;\n return Geometry._textureCoordinateRotationPoints(\n positions,\n stRotation,\n ellipsoid,\n boundingRectangle\n );\n}\n\nObject.defineProperties(PolygonGeometry.prototype, {\n /**\n * @private\n */\n rectangle: {\n get: function () {\n if (!defined(this._rectangle)) {\n var positions = this._polygonHierarchy.positions;\n this._rectangle = computeRectangle(\n positions,\n this._ellipsoid,\n this._arcType,\n this._granularity\n );\n }\n\n return this._rectangle;\n },\n },\n /**\n * For remapping texture coordinates when rendering PolygonGeometries as GroundPrimitives.\n * @private\n */\n textureCoordinateRotationPoints: {\n get: function () {\n if (!defined(this._textureCoordinateRotationPoints)) {\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\n this\n );\n }\n return this._textureCoordinateRotationPoints;\n },\n },\n});\nexport default PolygonGeometry;\n","import defined from \"./defined.js\";\n\n/**\n * An hierarchy of linear rings which define a polygon and its holes.\n * The holes themselves may also have holes which nest inner polygons.\n * @alias PolygonHierarchy\n * @constructor\n *\n * @param {Cartesian3[]} [positions] A linear ring defining the outer boundary of the polygon or hole.\n * @param {PolygonHierarchy[]} [holes] An array of polygon hierarchies defining holes in the polygon.\n */\nfunction PolygonHierarchy(positions, holes) {\n /**\n * A linear ring defining the outer boundary of the polygon or hole.\n * @type {Cartesian3[]}\n */\n this.positions = defined(positions) ? positions : [];\n\n /**\n * An array of polygon hierarchies defining holes in the polygon.\n * @type {PolygonHierarchy[]}\n */\n this.holes = defined(holes) ? holes : [];\n}\nexport default PolygonHierarchy;\n","import ArcType from \"./ArcType.js\";\nimport arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\nvar createGeometryFromPositionsPositions = [];\nvar createGeometryFromPositionsSubdivided = [];\n\nfunction createGeometryFromPositions(\n ellipsoid,\n positions,\n minDistance,\n perPositionHeight,\n arcType\n) {\n var tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n var positions2D = tangentPlane.projectPointsOntoPlane(\n positions,\n createGeometryFromPositionsPositions\n );\n\n var originalWindingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n positions2D.reverse();\n positions = positions.slice().reverse();\n }\n\n var subdividedPositions;\n var i;\n\n var length = positions.length;\n var index = 0;\n\n if (!perPositionHeight) {\n var numVertices = 0;\n if (arcType === ArcType.GEODESIC) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n } else if (arcType === ArcType.RHUMB) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n ellipsoid,\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n }\n subdividedPositions = new Float64Array(numVertices * 3);\n for (i = 0; i < length; i++) {\n var tempPositions;\n if (arcType === ArcType.GEODESIC) {\n tempPositions = PolygonGeometryLibrary.subdivideLine(\n positions[i],\n positions[(i + 1) % length],\n minDistance,\n createGeometryFromPositionsSubdivided\n );\n } else if (arcType === ArcType.RHUMB) {\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n ellipsoid,\n positions[i],\n positions[(i + 1) % length],\n minDistance,\n createGeometryFromPositionsSubdivided\n );\n }\n var tempPositionsLength = tempPositions.length;\n for (var j = 0; j < tempPositionsLength; ++j) {\n subdividedPositions[index++] = tempPositions[j];\n }\n }\n } else {\n subdividedPositions = new Float64Array(length * 2 * 3);\n for (i = 0; i < length; i++) {\n var p0 = positions[i];\n var p1 = positions[(i + 1) % length];\n subdividedPositions[index++] = p0.x;\n subdividedPositions[index++] = p0.y;\n subdividedPositions[index++] = p0.z;\n subdividedPositions[index++] = p1.x;\n subdividedPositions[index++] = p1.y;\n subdividedPositions[index++] = p1.z;\n }\n }\n\n length = subdividedPositions.length / 3;\n var indicesSize = length * 2;\n var indices = IndexDatatype.createTypedArray(length, indicesSize);\n index = 0;\n for (i = 0; i < length - 1; i++) {\n indices[index++] = i;\n indices[index++] = i + 1;\n }\n indices[index++] = length - 1;\n indices[index++] = 0;\n\n return new GeometryInstance({\n geometry: new Geometry({\n attributes: new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: subdividedPositions,\n }),\n }),\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n }),\n });\n}\n\nfunction createGeometryFromPositionsExtruded(\n ellipsoid,\n positions,\n minDistance,\n perPositionHeight,\n arcType\n) {\n var tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n var positions2D = tangentPlane.projectPointsOntoPlane(\n positions,\n createGeometryFromPositionsPositions\n );\n\n var originalWindingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n positions2D.reverse();\n positions = positions.slice().reverse();\n }\n\n var subdividedPositions;\n var i;\n\n var length = positions.length;\n var corners = new Array(length);\n var index = 0;\n\n if (!perPositionHeight) {\n var numVertices = 0;\n if (arcType === ArcType.GEODESIC) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n } else if (arcType === ArcType.RHUMB) {\n for (i = 0; i < length; i++) {\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n ellipsoid,\n positions[i],\n positions[(i + 1) % length],\n minDistance\n );\n }\n }\n\n subdividedPositions = new Float64Array(numVertices * 3 * 2);\n for (i = 0; i < length; ++i) {\n corners[i] = index / 3;\n var tempPositions;\n if (arcType === ArcType.GEODESIC) {\n tempPositions = PolygonGeometryLibrary.subdivideLine(\n positions[i],\n positions[(i + 1) % length],\n minDistance,\n createGeometryFromPositionsSubdivided\n );\n } else if (arcType === ArcType.RHUMB) {\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n ellipsoid,\n positions[i],\n positions[(i + 1) % length],\n minDistance,\n createGeometryFromPositionsSubdivided\n );\n }\n var tempPositionsLength = tempPositions.length;\n for (var j = 0; j < tempPositionsLength; ++j) {\n subdividedPositions[index++] = tempPositions[j];\n }\n }\n } else {\n subdividedPositions = new Float64Array(length * 2 * 3 * 2);\n for (i = 0; i < length; ++i) {\n corners[i] = index / 3;\n var p0 = positions[i];\n var p1 = positions[(i + 1) % length];\n\n subdividedPositions[index++] = p0.x;\n subdividedPositions[index++] = p0.y;\n subdividedPositions[index++] = p0.z;\n subdividedPositions[index++] = p1.x;\n subdividedPositions[index++] = p1.y;\n subdividedPositions[index++] = p1.z;\n }\n }\n\n length = subdividedPositions.length / (3 * 2);\n var cornersLength = corners.length;\n\n var indicesSize = (length * 2 + cornersLength) * 2;\n var indices = IndexDatatype.createTypedArray(\n length + cornersLength,\n indicesSize\n );\n\n index = 0;\n for (i = 0; i < length; ++i) {\n indices[index++] = i;\n indices[index++] = (i + 1) % length;\n indices[index++] = i + length;\n indices[index++] = ((i + 1) % length) + length;\n }\n\n for (i = 0; i < cornersLength; i++) {\n var corner = corners[i];\n indices[index++] = corner;\n indices[index++] = corner + length;\n }\n\n return new GeometryInstance({\n geometry: new Geometry({\n attributes: new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: subdividedPositions,\n }),\n }),\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n }),\n });\n}\n\n/**\n * A description of the outline of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy.\n *\n * @alias PolygonOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\n * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n *\n * @see PolygonOutlineGeometry#createGeometry\n * @see PolygonOutlineGeometry#fromPositions\n *\n * @example\n * // 1. create a polygon outline from points\n * var polygon = new Cesium.PolygonOutlineGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * )\n * });\n * var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\n *\n * // 2. create a nested polygon with holes outline\n * var polygonWithHole = new Cesium.PolygonOutlineGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -109.0, 30.0,\n * -95.0, 30.0,\n * -95.0, 40.0,\n * -109.0, 40.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -107.0, 31.0,\n * -107.0, 39.0,\n * -97.0, 39.0,\n * -97.0, 31.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -105.0, 33.0,\n * -99.0, 33.0,\n * -99.0, 37.0,\n * -105.0, 37.0\n * ]),\n * [new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -103.0, 34.0,\n * -101.0, 34.0,\n * -101.0, 36.0,\n * -103.0, 36.0\n * ])\n * )]\n * )]\n * )]\n * )\n * });\n * var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygonWithHole);\n *\n * // 3. create extruded polygon outline\n * var extrudedPolygon = new Cesium.PolygonOutlineGeometry({\n * polygonHierarchy : new Cesium.PolygonHierarchy(\n * Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * ),\n * extrudedHeight: 300000\n * });\n * var geometry = Cesium.PolygonOutlineGeometry.createGeometry(extrudedPolygon);\n */\nfunction PolygonOutlineGeometry(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\n\n if (options.perPositionHeight && defined(options.height)) {\n throw new DeveloperError(\n \"Cannot use both options.perPositionHeight and options.height\"\n );\n }\n if (\n defined(options.arcType) &&\n options.arcType !== ArcType.GEODESIC &&\n options.arcType !== ArcType.RHUMB\n ) {\n throw new DeveloperError(\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\n );\n }\n //>>includeEnd('debug');\n\n var polygonHierarchy = options.polygonHierarchy;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var perPositionHeight = defaultValue(options.perPositionHeight, false);\n var perPositionHeightExtrude =\n perPositionHeight && defined(options.extrudedHeight);\n var arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n if (!perPositionHeightExtrude) {\n var h = Math.max(height, extrudedHeight);\n extrudedHeight = Math.min(height, extrudedHeight);\n height = h;\n }\n\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._granularity = granularity;\n this._height = height;\n this._extrudedHeight = extrudedHeight;\n this._arcType = arcType;\n this._polygonHierarchy = polygonHierarchy;\n this._perPositionHeight = perPositionHeight;\n this._perPositionHeightExtrude = perPositionHeightExtrude;\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createPolygonOutlineGeometry\";\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n PolygonGeometryLibrary.computeHierarchyPackedLength(polygonHierarchy) +\n Ellipsoid.packedLength +\n 8;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n value._polygonHierarchy,\n array,\n startingIndex\n );\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._height;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\n array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\n array[startingIndex++] = value._arcType;\n array[startingIndex++] = defaultValue(value._offsetAttribute, -1);\n array[startingIndex] = value.packedLength;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar dummyOptions = {\n polygonHierarchy: {},\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonOutlineGeometry} [result] The object into which to store the result.\n * @returns {PolygonOutlineGeometry} The modified result parameter or a new PolygonOutlineGeometry instance if one was not provided.\n */\nPolygonOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n array,\n startingIndex\n );\n startingIndex = polygonHierarchy.startingIndex;\n delete polygonHierarchy.startingIndex;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var height = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var granularity = array[startingIndex++];\n var perPositionHeightExtrude = array[startingIndex++] === 1.0;\n var perPositionHeight = array[startingIndex++] === 1.0;\n var arcType = array[startingIndex++];\n var offsetAttribute = array[startingIndex++];\n var packedLength = array[startingIndex];\n\n if (!defined(result)) {\n result = new PolygonOutlineGeometry(dummyOptions);\n }\n\n result._polygonHierarchy = polygonHierarchy;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._height = height;\n result._extrudedHeight = extrudedHeight;\n result._granularity = granularity;\n result._perPositionHeight = perPositionHeight;\n result._perPositionHeightExtrude = perPositionHeightExtrude;\n result._arcType = arcType;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n result.packedLength = packedLength;\n\n return result;\n};\n\n/**\n * A description of a polygon outline from an array of positions.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {Number} [options.height=0.0] The height of the polygon.\n * @param {Number} [options.extrudedHeight] The height of the polygon extrusion.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link LinkType.GEODESIC} and {@link ArcType.RHUMB}.\n * @returns {PolygonOutlineGeometry}\n *\n *\n * @example\n * // create a polygon from points\n * var polygon = Cesium.PolygonOutlineGeometry.fromPositions({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0,\n * -75.0, 30.0,\n * -70.0, 30.0,\n * -68.0, 40.0\n * ])\n * });\n * var geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\n *\n * @see PolygonOutlineGeometry#createGeometry\n */\nPolygonOutlineGeometry.fromPositions = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.positions\", options.positions);\n //>>includeEnd('debug');\n\n var newOptions = {\n polygonHierarchy: {\n positions: options.positions,\n },\n height: options.height,\n extrudedHeight: options.extrudedHeight,\n ellipsoid: options.ellipsoid,\n granularity: options.granularity,\n perPositionHeight: options.perPositionHeight,\n arcType: options.arcType,\n offsetAttribute: options.offsetAttribute,\n };\n return new PolygonOutlineGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a polygon outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolygonOutlineGeometry} polygonGeometry A description of the polygon outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\n var ellipsoid = polygonGeometry._ellipsoid;\n var granularity = polygonGeometry._granularity;\n var polygonHierarchy = polygonGeometry._polygonHierarchy;\n var perPositionHeight = polygonGeometry._perPositionHeight;\n var arcType = polygonGeometry._arcType;\n\n var polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\n polygonHierarchy,\n !perPositionHeight,\n ellipsoid\n );\n\n if (polygons.length === 0) {\n return undefined;\n }\n\n var geometryInstance;\n var geometries = [];\n var minDistance = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n\n var height = polygonGeometry._height;\n var extrudedHeight = polygonGeometry._extrudedHeight;\n var extrude =\n polygonGeometry._perPositionHeightExtrude ||\n !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\n var offsetValue;\n var i;\n if (extrude) {\n for (i = 0; i < polygons.length; i++) {\n geometryInstance = createGeometryFromPositionsExtruded(\n ellipsoid,\n polygons[i],\n minDistance,\n perPositionHeight,\n arcType\n );\n geometryInstance.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n geometryInstance.geometry,\n height,\n extrudedHeight,\n ellipsoid,\n perPositionHeight\n );\n if (defined(polygonGeometry._offsetAttribute)) {\n var size =\n geometryInstance.geometry.attributes.position.values.length / 3;\n var offsetAttribute = new Uint8Array(size);\n if (polygonGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else {\n offsetValue =\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\n {\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n }\n );\n }\n geometries.push(geometryInstance);\n }\n } else {\n for (i = 0; i < polygons.length; i++) {\n geometryInstance = createGeometryFromPositions(\n ellipsoid,\n polygons[i],\n minDistance,\n perPositionHeight,\n arcType\n );\n geometryInstance.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n geometryInstance.geometry.attributes.position.values,\n height,\n ellipsoid,\n !perPositionHeight\n );\n\n if (defined(polygonGeometry._offsetAttribute)) {\n var length =\n geometryInstance.geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n offsetValue =\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\n {\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n }\n );\n }\n\n geometries.push(geometryInstance);\n }\n }\n\n var geometry = GeometryPipeline.combineInstances(geometries)[0];\n var boundingSphere = BoundingSphere.fromVertices(\n geometry.attributes.position.values\n );\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: boundingSphere,\n offsetAttribute: polygonGeometry._offsetAttribute,\n });\n};\nexport default PolygonOutlineGeometry;\n","import ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar scratchInterpolateColorsArray = [];\n\nfunction interpolateColors(p0, p1, color0, color1, numPoints) {\n var colors = scratchInterpolateColorsArray;\n colors.length = numPoints;\n var i;\n\n var r0 = color0.red;\n var g0 = color0.green;\n var b0 = color0.blue;\n var a0 = color0.alpha;\n\n var r1 = color1.red;\n var g1 = color1.green;\n var b1 = color1.blue;\n var a1 = color1.alpha;\n\n if (Color.equals(color0, color1)) {\n for (i = 0; i < numPoints; i++) {\n colors[i] = Color.clone(color0);\n }\n return colors;\n }\n\n var redPerVertex = (r1 - r0) / numPoints;\n var greenPerVertex = (g1 - g0) / numPoints;\n var bluePerVertex = (b1 - b0) / numPoints;\n var alphaPerVertex = (a1 - a0) / numPoints;\n\n for (i = 0; i < numPoints; i++) {\n colors[i] = new Color(\n r0 + i * redPerVertex,\n g0 + i * greenPerVertex,\n b0 + i * bluePerVertex,\n a0 + i * alphaPerVertex\n );\n }\n\n return colors;\n}\n\n/**\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\n * and each additional position defines a line segment from the previous position. The polyline is capable of\n * displaying with a material.\n *\n * @alias PolylineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\n * @param {Number} [options.width=1.0] The width in pixels.\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\n * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n *\n * @exception {DeveloperError} At least two positions are required.\n * @exception {DeveloperError} width must be greater than or equal to one.\n * @exception {DeveloperError} colors has an invalid length.\n *\n * @see PolylineGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline.html|Cesium Sandcastle Polyline Demo}\n *\n * @example\n * // A polyline with two connected line segments\n * var polyline = new Cesium.PolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 5.0, 0.0,\n * 5.0, 5.0\n * ]),\n * width : 10.0\n * });\n * var geometry = Cesium.PolylineGeometry.createGeometry(polyline);\n */\nfunction PolylineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n var colors = options.colors;\n var width = defaultValue(options.width, 1.0);\n var colorsPerVertex = defaultValue(options.colorsPerVertex, false);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions) || positions.length < 2) {\n throw new DeveloperError(\"At least two positions are required.\");\n }\n if (typeof width !== \"number\") {\n throw new DeveloperError(\"width must be a number\");\n }\n if (\n defined(colors) &&\n ((colorsPerVertex && colors.length < positions.length) ||\n (!colorsPerVertex && colors.length < positions.length - 1))\n ) {\n throw new DeveloperError(\"colors has an invalid length.\");\n }\n //>>includeEnd('debug');\n\n this._positions = positions;\n this._colors = colors;\n this._width = width;\n this._colorsPerVertex = colorsPerVertex;\n this._vertexFormat = VertexFormat.clone(\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\n );\n\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._workerName = \"createPolylineGeometry\";\n\n var numComponents = 1 + positions.length * Cartesian3.packedLength;\n numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 4;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPolylineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var colors = value._colors;\n length = defined(colors) ? colors.length : 0.0;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n Color.pack(colors[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._width;\n array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\n array[startingIndex++] = value._arcType;\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n positions: undefined,\n colors: undefined,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n width: undefined,\n colorsPerVertex: undefined,\n arcType: undefined,\n granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineGeometry} [result] The object into which to store the result.\n * @returns {PolylineGeometry} The modified result parameter or a new PolylineGeometry instance if one was not provided.\n */\nPolylineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var colors = length > 0 ? new Array(length) : undefined;\n\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n colors[i] = Color.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var width = array[startingIndex++];\n var colorsPerVertex = array[startingIndex++] === 1.0;\n var arcType = array[startingIndex++];\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.positions = positions;\n scratchOptions.colors = colors;\n scratchOptions.width = width;\n scratchOptions.colorsPerVertex = colorsPerVertex;\n scratchOptions.arcType = arcType;\n scratchOptions.granularity = granularity;\n return new PolylineGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._colors = colors;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._width = width;\n result._colorsPerVertex = colorsPerVertex;\n result._arcType = arcType;\n result._granularity = granularity;\n\n return result;\n};\n\nvar scratchCartesian3 = new Cartesian3();\nvar scratchPosition = new Cartesian3();\nvar scratchPrevPosition = new Cartesian3();\nvar scratchNextPosition = new Cartesian3();\n\n/**\n * Computes the geometric representation of a polyline, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineGeometry} polylineGeometry A description of the polyline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineGeometry.createGeometry = function (polylineGeometry) {\n var width = polylineGeometry._width;\n var vertexFormat = polylineGeometry._vertexFormat;\n var colors = polylineGeometry._colors;\n var colorsPerVertex = polylineGeometry._colorsPerVertex;\n var arcType = polylineGeometry._arcType;\n var granularity = polylineGeometry._granularity;\n var ellipsoid = polylineGeometry._ellipsoid;\n\n var i;\n var j;\n var k;\n\n var positions = arrayRemoveDuplicates(\n polylineGeometry._positions,\n Cartesian3.equalsEpsilon\n );\n var positionsLength = positions.length;\n\n // A width of a pixel or less is not a valid geometry, but in order to support external data\n // that may have errors we treat this as an empty geometry.\n if (positionsLength < 2 || width <= 0.0) {\n return undefined;\n }\n\n if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\n var subdivisionSize;\n var numberOfPointsFunction;\n if (arcType === ArcType.GEODESIC) {\n subdivisionSize = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n numberOfPointsFunction = PolylinePipeline.numberOfPoints;\n } else {\n subdivisionSize = granularity;\n numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\n }\n\n var heights = PolylinePipeline.extractHeights(positions, ellipsoid);\n\n if (defined(colors)) {\n var colorLength = 1;\n for (i = 0; i < positionsLength - 1; ++i) {\n colorLength += numberOfPointsFunction(\n positions[i],\n positions[i + 1],\n subdivisionSize\n );\n }\n\n var newColors = new Array(colorLength);\n var newColorIndex = 0;\n\n for (i = 0; i < positionsLength - 1; ++i) {\n var p0 = positions[i];\n var p1 = positions[i + 1];\n var c0 = colors[i];\n\n var numColors = numberOfPointsFunction(p0, p1, subdivisionSize);\n if (colorsPerVertex && i < colorLength) {\n var c1 = colors[i + 1];\n var interpolatedColors = interpolateColors(p0, p1, c0, c1, numColors);\n var interpolatedColorsLength = interpolatedColors.length;\n for (j = 0; j < interpolatedColorsLength; ++j) {\n newColors[newColorIndex++] = interpolatedColors[j];\n }\n } else {\n for (j = 0; j < numColors; ++j) {\n newColors[newColorIndex++] = Color.clone(c0);\n }\n }\n }\n\n newColors[newColorIndex] = Color.clone(colors[colors.length - 1]);\n colors = newColors;\n\n scratchInterpolateColorsArray.length = 0;\n }\n\n if (arcType === ArcType.GEODESIC) {\n positions = PolylinePipeline.generateCartesianArc({\n positions: positions,\n minDistance: subdivisionSize,\n ellipsoid: ellipsoid,\n height: heights,\n });\n } else {\n positions = PolylinePipeline.generateCartesianRhumbArc({\n positions: positions,\n granularity: subdivisionSize,\n ellipsoid: ellipsoid,\n height: heights,\n });\n }\n }\n\n positionsLength = positions.length;\n var size = positionsLength * 4.0 - 4.0;\n\n var finalPositions = new Float64Array(size * 3);\n var prevPositions = new Float64Array(size * 3);\n var nextPositions = new Float64Array(size * 3);\n var expandAndWidth = new Float32Array(size * 2);\n var st = vertexFormat.st ? new Float32Array(size * 2) : undefined;\n var finalColors = defined(colors) ? new Uint8Array(size * 4) : undefined;\n\n var positionIndex = 0;\n var expandAndWidthIndex = 0;\n var stIndex = 0;\n var colorIndex = 0;\n var position;\n\n for (j = 0; j < positionsLength; ++j) {\n if (j === 0) {\n position = scratchCartesian3;\n Cartesian3.subtract(positions[0], positions[1], position);\n Cartesian3.add(positions[0], position, position);\n } else {\n position = positions[j - 1];\n }\n\n Cartesian3.clone(position, scratchPrevPosition);\n Cartesian3.clone(positions[j], scratchPosition);\n\n if (j === positionsLength - 1) {\n position = scratchCartesian3;\n Cartesian3.subtract(\n positions[positionsLength - 1],\n positions[positionsLength - 2],\n position\n );\n Cartesian3.add(positions[positionsLength - 1], position, position);\n } else {\n position = positions[j + 1];\n }\n\n Cartesian3.clone(position, scratchNextPosition);\n\n var color0, color1;\n if (defined(finalColors)) {\n if (j !== 0 && !colorsPerVertex) {\n color0 = colors[j - 1];\n } else {\n color0 = colors[j];\n }\n\n if (j !== positionsLength - 1) {\n color1 = colors[j];\n }\n }\n\n var startK = j === 0 ? 2 : 0;\n var endK = j === positionsLength - 1 ? 2 : 4;\n\n for (k = startK; k < endK; ++k) {\n Cartesian3.pack(scratchPosition, finalPositions, positionIndex);\n Cartesian3.pack(scratchPrevPosition, prevPositions, positionIndex);\n Cartesian3.pack(scratchNextPosition, nextPositions, positionIndex);\n positionIndex += 3;\n\n var direction = k - 2 < 0 ? -1.0 : 1.0;\n expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1; // expand direction\n expandAndWidth[expandAndWidthIndex++] = direction * width;\n\n if (vertexFormat.st) {\n st[stIndex++] = j / (positionsLength - 1);\n st[stIndex++] = Math.max(expandAndWidth[expandAndWidthIndex - 2], 0.0);\n }\n\n if (defined(finalColors)) {\n var color = k < 2 ? color0 : color1;\n\n finalColors[colorIndex++] = Color.floatToByte(color.red);\n finalColors[colorIndex++] = Color.floatToByte(color.green);\n finalColors[colorIndex++] = Color.floatToByte(color.blue);\n finalColors[colorIndex++] = Color.floatToByte(color.alpha);\n }\n }\n }\n\n var attributes = new GeometryAttributes();\n\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: finalPositions,\n });\n\n attributes.prevPosition = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: prevPositions,\n });\n\n attributes.nextPosition = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: nextPositions,\n });\n\n attributes.expandAndWidth = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: expandAndWidth,\n });\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: st,\n });\n }\n\n if (defined(finalColors)) {\n attributes.color = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 4,\n values: finalColors,\n normalize: true,\n });\n }\n\n var indices = IndexDatatype.createTypedArray(size, positionsLength * 6 - 6);\n var index = 0;\n var indicesIndex = 0;\n var length = positionsLength - 1.0;\n for (j = 0; j < length; ++j) {\n indices[indicesIndex++] = index;\n indices[indicesIndex++] = index + 2;\n indices[indicesIndex++] = index + 1;\n\n indices[indicesIndex++] = index + 1;\n indices[indicesIndex++] = index + 2;\n indices[indicesIndex++] = index + 3;\n\n index += 4;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: BoundingSphere.fromPoints(positions),\n geometryType: GeometryType.POLYLINES,\n });\n};\nexport default PolylineGeometry;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport oneTimeWarning from \"./oneTimeWarning.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nfunction computeAttributes(\n combinedPositions,\n shape,\n boundingRectangle,\n vertexFormat\n) {\n var attributes = new GeometryAttributes();\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: combinedPositions,\n });\n }\n var shapeLength = shape.length;\n var vertexCount = combinedPositions.length / 3;\n var length = (vertexCount - shapeLength * 2) / (shapeLength * 2);\n var firstEndIndices = PolygonPipeline.triangulate(shape);\n\n var indicesCount =\n (length - 1) * shapeLength * 6 + firstEndIndices.length * 2;\n var indices = IndexDatatype.createTypedArray(vertexCount, indicesCount);\n var i, j;\n var ll, ul, ur, lr;\n var offset = shapeLength * 2;\n var index = 0;\n for (i = 0; i < length - 1; i++) {\n for (j = 0; j < shapeLength - 1; j++) {\n ll = j * 2 + i * shapeLength * 2;\n lr = ll + offset;\n ul = ll + 1;\n ur = ul + offset;\n\n indices[index++] = ul;\n indices[index++] = ll;\n indices[index++] = ur;\n indices[index++] = ur;\n indices[index++] = ll;\n indices[index++] = lr;\n }\n ll = shapeLength * 2 - 2 + i * shapeLength * 2;\n ul = ll + 1;\n ur = ul + offset;\n lr = ll + offset;\n\n indices[index++] = ul;\n indices[index++] = ll;\n indices[index++] = ur;\n indices[index++] = ur;\n indices[index++] = ll;\n indices[index++] = lr;\n }\n\n if (vertexFormat.st || vertexFormat.tangent || vertexFormat.bitangent) {\n // st required for tangent/bitangent calculation\n var st = new Float32Array(vertexCount * 2);\n var lengthSt = 1 / (length - 1);\n var heightSt = 1 / boundingRectangle.height;\n var heightOffset = boundingRectangle.height / 2;\n var s, t;\n var stindex = 0;\n for (i = 0; i < length; i++) {\n s = i * lengthSt;\n t = heightSt * (shape[0].y + heightOffset);\n st[stindex++] = s;\n st[stindex++] = t;\n for (j = 1; j < shapeLength; j++) {\n t = heightSt * (shape[j].y + heightOffset);\n st[stindex++] = s;\n st[stindex++] = t;\n st[stindex++] = s;\n st[stindex++] = t;\n }\n t = heightSt * (shape[0].y + heightOffset);\n st[stindex++] = s;\n st[stindex++] = t;\n }\n for (j = 0; j < shapeLength; j++) {\n s = 0;\n t = heightSt * (shape[j].y + heightOffset);\n st[stindex++] = s;\n st[stindex++] = t;\n }\n for (j = 0; j < shapeLength; j++) {\n s = (length - 1) * lengthSt;\n t = heightSt * (shape[j].y + heightOffset);\n st[stindex++] = s;\n st[stindex++] = t;\n }\n\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: new Float32Array(st),\n });\n }\n\n var endOffset = vertexCount - shapeLength * 2;\n for (i = 0; i < firstEndIndices.length; i += 3) {\n var v0 = firstEndIndices[i] + endOffset;\n var v1 = firstEndIndices[i + 1] + endOffset;\n var v2 = firstEndIndices[i + 2] + endOffset;\n\n indices[index++] = v0;\n indices[index++] = v1;\n indices[index++] = v2;\n indices[index++] = v2 + shapeLength;\n indices[index++] = v1 + shapeLength;\n indices[index++] = v0 + shapeLength;\n }\n\n var geometry = new Geometry({\n attributes: attributes,\n indices: indices,\n boundingSphere: BoundingSphere.fromVertices(combinedPositions),\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n if (vertexFormat.normal) {\n geometry = GeometryPipeline.computeNormal(geometry);\n }\n\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n try {\n geometry = GeometryPipeline.computeTangentAndBitangent(geometry);\n } catch (e) {\n oneTimeWarning(\n \"polyline-volume-tangent-bitangent\",\n \"Unable to compute tangents and bitangents for polyline volume geometry\"\n );\n //TODO https://github.com/CesiumGS/cesium/issues/3609\n }\n\n if (!vertexFormat.tangent) {\n geometry.attributes.tangent = undefined;\n }\n if (!vertexFormat.bitangent) {\n geometry.attributes.bitangent = undefined;\n }\n if (!vertexFormat.st) {\n geometry.attributes.st = undefined;\n }\n }\n\n return geometry;\n}\n\n/**\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\n *\n * @alias PolylineVolumeGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.polylinePositions An array of {@link Cartesain3} positions that define the center of the polyline volume.\n * @param {Cartesian2[]} options.shapePositions An array of {@link Cartesian2} positions that define the shape to be extruded along the polyline\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see PolylineVolumeGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline%20Volume.html|Cesium Sandcastle Polyline Volume Demo}\n *\n * @example\n * function computeCircle(radius) {\n * var positions = [];\n * for (var i = 0; i < 360; i++) {\n * var radians = Cesium.Math.toRadians(i);\n * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\n * }\n * return positions;\n * }\n *\n * var volume = new Cesium.PolylineVolumeGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n * polylinePositions : Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0\n * ]),\n * shapePositions : computeCircle(100000.0)\n * });\n */\nfunction PolylineVolumeGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.polylinePositions;\n var shape = options.shapePositions;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.polylinePositions is required.\");\n }\n if (!defined(shape)) {\n throw new DeveloperError(\"options.shapePositions is required.\");\n }\n //>>includeEnd('debug');\n\n this._positions = positions;\n this._shape = shape;\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\n this._vertexFormat = VertexFormat.clone(\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\n );\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._workerName = \"createPolylineVolumeGeometry\";\n\n var numComponents = 1 + positions.length * Cartesian3.packedLength;\n numComponents += 1 + shape.length * Cartesian2.packedLength;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 2;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineVolumeGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPolylineVolumeGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var shape = value._shape;\n length = shape.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n Cartesian2.pack(shape[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._cornerType;\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n polylinePositions: undefined,\n shapePositions: undefined,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n cornerType: undefined,\n granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineVolumeGeometry} [result] The object into which to store the result.\n * @returns {PolylineVolumeGeometry} The modified result parameter or a new PolylineVolumeGeometry instance if one was not provided.\n */\nPolylineVolumeGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var shape = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n shape[i] = Cartesian2.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var cornerType = array[startingIndex++];\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.polylinePositions = positions;\n scratchOptions.shapePositions = shape;\n scratchOptions.cornerType = cornerType;\n scratchOptions.granularity = granularity;\n return new PolylineVolumeGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._shape = shape;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._cornerType = cornerType;\n result._granularity = granularity;\n\n return result;\n};\n\nvar brScratch = new BoundingRectangle();\n\n/**\n * Computes the geometric representation of a polyline with a volume, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineVolumeGeometry} polylineVolumeGeometry A description of the polyline volume.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineVolumeGeometry.createGeometry = function (polylineVolumeGeometry) {\n var positions = polylineVolumeGeometry._positions;\n var cleanPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n var shape2D = polylineVolumeGeometry._shape;\n shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\n\n if (cleanPositions.length < 2 || shape2D.length < 3) {\n return undefined;\n }\n\n if (\n PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\n ) {\n shape2D.reverse();\n }\n var boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\n\n var computedPositions = PolylineVolumeGeometryLibrary.computePositions(\n cleanPositions,\n shape2D,\n boundingRectangle,\n polylineVolumeGeometry,\n true\n );\n return computeAttributes(\n computedPositions,\n shape2D,\n boundingRectangle,\n polylineVolumeGeometry._vertexFormat\n );\n};\nexport default PolylineVolumeGeometry;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nfunction computeAttributes(positions, shape) {\n var attributes = new GeometryAttributes();\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n\n var shapeLength = shape.length;\n var vertexCount = attributes.position.values.length / 3;\n var positionLength = positions.length / 3;\n var shapeCount = positionLength / shapeLength;\n var indices = IndexDatatype.createTypedArray(\n vertexCount,\n 2 * shapeLength * (shapeCount + 1)\n );\n var i, j;\n var index = 0;\n i = 0;\n var offset = i * shapeLength;\n for (j = 0; j < shapeLength - 1; j++) {\n indices[index++] = j + offset;\n indices[index++] = j + offset + 1;\n }\n indices[index++] = shapeLength - 1 + offset;\n indices[index++] = offset;\n\n i = shapeCount - 1;\n offset = i * shapeLength;\n for (j = 0; j < shapeLength - 1; j++) {\n indices[index++] = j + offset;\n indices[index++] = j + offset + 1;\n }\n indices[index++] = shapeLength - 1 + offset;\n indices[index++] = offset;\n\n for (i = 0; i < shapeCount - 1; i++) {\n var firstOffset = shapeLength * i;\n var secondOffset = firstOffset + shapeLength;\n for (j = 0; j < shapeLength; j++) {\n indices[index++] = j + firstOffset;\n indices[index++] = j + secondOffset;\n }\n }\n\n var geometry = new Geometry({\n attributes: attributes,\n indices: IndexDatatype.createTypedArray(vertexCount, indices),\n boundingSphere: BoundingSphere.fromVertices(positions),\n primitiveType: PrimitiveType.LINES,\n });\n\n return geometry;\n}\n\n/**\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\n *\n * @alias PolylineVolumeOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.polylinePositions An array of positions that define the center of the polyline volume.\n * @param {Cartesian2[]} options.shapePositions An array of positions that define the shape to be extruded along the polyline\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see PolylineVolumeOutlineGeometry#createGeometry\n *\n * @example\n * function computeCircle(radius) {\n * var positions = [];\n * for (var i = 0; i < 360; i++) {\n * var radians = Cesium.Math.toRadians(i);\n * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\n * }\n * return positions;\n * }\n *\n * var volumeOutline = new Cesium.PolylineVolumeOutlineGeometry({\n * polylinePositions : Cesium.Cartesian3.fromDegreesArray([\n * -72.0, 40.0,\n * -70.0, 35.0\n * ]),\n * shapePositions : computeCircle(100000.0)\n * });\n */\nfunction PolylineVolumeOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.polylinePositions;\n var shape = options.shapePositions;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.polylinePositions is required.\");\n }\n if (!defined(shape)) {\n throw new DeveloperError(\"options.shapePositions is required.\");\n }\n //>>includeEnd('debug');\n\n this._positions = positions;\n this._shape = shape;\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._workerName = \"createPolylineVolumeOutlineGeometry\";\n\n var numComponents = 1 + positions.length * Cartesian3.packedLength;\n numComponents += 1 + shape.length * Cartesian2.packedLength;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength = numComponents + Ellipsoid.packedLength + 2;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineVolumeOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nPolylineVolumeOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var shape = value._shape;\n length = shape.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n Cartesian2.pack(shape[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._cornerType;\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchOptions = {\n polylinePositions: undefined,\n shapePositions: undefined,\n ellipsoid: scratchEllipsoid,\n height: undefined,\n cornerType: undefined,\n granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineVolumeOutlineGeometry} [result] The object into which to store the result.\n * @returns {PolylineVolumeOutlineGeometry} The modified result parameter or a new PolylineVolumeOutlineGeometry instance if one was not provided.\n */\nPolylineVolumeOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var shape = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n shape[i] = Cartesian2.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var cornerType = array[startingIndex++];\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.polylinePositions = positions;\n scratchOptions.shapePositions = shape;\n scratchOptions.cornerType = cornerType;\n scratchOptions.granularity = granularity;\n return new PolylineVolumeOutlineGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._shape = shape;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._cornerType = cornerType;\n result._granularity = granularity;\n\n return result;\n};\n\nvar brScratch = new BoundingRectangle();\n\n/**\n * Computes the geometric representation of the outline of a polyline with a volume, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineVolumeOutlineGeometry} polylineVolumeOutlineGeometry A description of the polyline volume outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineVolumeOutlineGeometry.createGeometry = function (\n polylineVolumeOutlineGeometry\n) {\n var positions = polylineVolumeOutlineGeometry._positions;\n var cleanPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n var shape2D = polylineVolumeOutlineGeometry._shape;\n shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\n\n if (cleanPositions.length < 2 || shape2D.length < 3) {\n return undefined;\n }\n\n if (\n PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\n ) {\n shape2D.reverse();\n }\n var boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\n\n var computedPositions = PolylineVolumeGeometryLibrary.computePositions(\n cleanPositions,\n shape2D,\n boundingRectangle,\n polylineVolumeOutlineGeometry,\n false\n );\n return computeAttributes(computedPositions, shape2D);\n};\nexport default PolylineVolumeOutlineGeometry;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Base class for proxying requested made by {@link Resource}.\n *\n * @alias Proxy\n * @constructor\n *\n * @see DefaultProxy\n */\nfunction Proxy() {\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Get the final URL to use to request a given resource.\n *\n * @param {String} resource The resource to request.\n * @returns {String} proxied resource\n * @function\n */\nProxy.prototype.getURL = DeveloperError.throwInstantiationError;\n\nexport default Proxy;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Spline from \"./Spline.js\";\n\nfunction createEvaluateFunction(spline) {\n var points = spline.points;\n var times = spline.times;\n\n // use slerp interpolation\n return function (time, result) {\n if (!defined(result)) {\n result = new Quaternion();\n }\n var i = (spline._lastTimeIndex = spline.findTimeInterval(\n time,\n spline._lastTimeIndex\n ));\n var u = (time - times[i]) / (times[i + 1] - times[i]);\n\n var q0 = points[i];\n var q1 = points[i + 1];\n\n return Quaternion.fastSlerp(q0, q1, u, result);\n };\n}\n\n/**\n * A spline that uses spherical linear (slerp) interpolation to create a quaternion curve.\n * The generated curve is in the class C<sup>1</sup>.\n *\n * @alias QuaternionSpline\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n * The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Quaternion[]} options.points The array of {@link Quaternion} control points.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see LinearSpline\n * @see WeightSpline\n */\nfunction QuaternionSpline(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var points = options.points;\n var times = options.times;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(points) || !defined(times)) {\n throw new DeveloperError(\"points and times are required.\");\n }\n if (points.length < 2) {\n throw new DeveloperError(\n \"points.length must be greater than or equal to 2.\"\n );\n }\n if (times.length !== points.length) {\n throw new DeveloperError(\"times.length must be equal to points.length.\");\n }\n //>>includeEnd('debug');\n\n this._times = times;\n this._points = points;\n\n this._evaluateFunction = createEvaluateFunction(this);\n this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(QuaternionSpline.prototype, {\n /**\n * An array of times for the control points.\n *\n * @memberof QuaternionSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n times: {\n get: function () {\n return this._times;\n },\n },\n\n /**\n * An array of {@link Quaternion} control points.\n *\n * @memberof QuaternionSpline.prototype\n *\n * @type {Quaternion[]}\n * @readonly\n */\n points: {\n get: function () {\n return this._points;\n },\n },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {Number} time The time.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nQuaternionSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around to the updated animation.\n */\nQuaternionSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nQuaternionSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nQuaternionSpline.prototype.evaluate = function (time, result) {\n return this._evaluateFunction(time, result);\n};\nexport default QuaternionSpline;\n","function quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) { swap(arr, left, right); }\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) { i++; }\n while (compare(arr[j], t) > 0) { j--; }\n }\n\n if (compare(arr[left], t) === 0) { swap(arr, left, j); }\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) { left = j + 1; }\n if (k <= j) { right = j - 1; }\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction RBush(maxEntries) {\n if ( maxEntries === void 0 ) maxEntries = 9;\n\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n};\n\nRBush.prototype.all = function all () {\n return this._all(this.data, []);\n};\n\nRBush.prototype.search = function search (bbox) {\n var node = this.data;\n var result = [];\n\n if (!intersects(bbox, node)) { return result; }\n\n var toBBox = this.toBBox;\n var nodesToSearch = [];\n\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) { result.push(child); }\n else if (contains(bbox, childBBox)) { this._all(child, result); }\n else { nodesToSearch.push(child); }\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n};\n\nRBush.prototype.collides = function collides (bbox) {\n var node = this.data;\n\n if (!intersects(bbox, node)) { return false; }\n\n var nodesToSearch = [];\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) { return true; }\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n};\n\nRBush.prototype.load = function load (data) {\n if (!(data && data.length)) { return this; }\n\n if (data.length < this._minEntries) {\n for (var i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n var tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n};\n\nRBush.prototype.insert = function insert (item) {\n if (item) { this._insert(item, this.data.height - 1); }\n return this;\n};\n\nRBush.prototype.clear = function clear () {\n this.data = createNode([]);\n return this;\n};\n\nRBush.prototype.remove = function remove (item, equalsFn) {\n if (!item) { return this; }\n\n var node = this.data;\n var bbox = this.toBBox(item);\n var path = [];\n var indexes = [];\n var i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n var index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else { node = null; } // nothing found\n }\n\n return this;\n};\n\nRBush.prototype.toBBox = function toBBox (item) { return item; };\n\nRBush.prototype.compareMinX = function compareMinX (a, b) { return a.minX - b.minX; };\nRBush.prototype.compareMinY = function compareMinY (a, b) { return a.minY - b.minY; };\n\nRBush.prototype.toJSON = function toJSON () { return this.data; };\n\nRBush.prototype.fromJSON = function fromJSON (data) {\n this.data = data;\n return this;\n};\n\nRBush.prototype._all = function _all (node, result) {\n var nodesToSearch = [];\n while (node) {\n if (node.leaf) { result.push.apply(result, node.children); }\n else { nodesToSearch.push.apply(nodesToSearch, node.children); }\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nRBush.prototype._build = function _build (items, left, right, height) {\n\n var N = right - left + 1;\n var M = this._maxEntries;\n var node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n var N2 = Math.ceil(N / M);\n var N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (var i = left; i <= right; i += N1) {\n\n var right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (var j = i; j <= right2; j += N2) {\n\n var right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n};\n\nRBush.prototype._chooseSubtree = function _chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) { break; }\n\n var minArea = Infinity;\n var minEnlargement = Infinity;\n var targetNode = (void 0);\n\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n var area = bboxArea(child);\n var enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n};\n\nRBush.prototype._insert = function _insert (item, level, isNode) {\n var bbox = isNode ? item : this.toBBox(item);\n var insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else { break; }\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n};\n\n// split overflowed node into two\nRBush.prototype._split = function _split (insertPath, level) {\n var node = insertPath[level];\n var M = node.children.length;\n var m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n var splitIndex = this._chooseSplitIndex(node, m, M);\n\n var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) { insertPath[level - 1].children.push(newNode); }\n else { this._splitRoot(node, newNode); }\n};\n\nRBush.prototype._splitRoot = function _splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n};\n\nRBush.prototype._chooseSplitIndex = function _chooseSplitIndex (node, m, M) {\n var index;\n var minOverlap = Infinity;\n var minArea = Infinity;\n\n for (var i = m; i <= M - m; i++) {\n var bbox1 = distBBox(node, 0, i, this.toBBox);\n var bbox2 = distBBox(node, i, M, this.toBBox);\n\n var overlap = intersectionArea(bbox1, bbox2);\n var area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n};\n\n// sorts node children by the best axis for split\nRBush.prototype._chooseSplitAxis = function _chooseSplitAxis (node, m, M) {\n var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n var compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n var xMargin = this._allDistMargin(node, m, M, compareMinX);\n var yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) { node.children.sort(compareMinX); }\n};\n\n// total margin of all possible split distributions where each node is at least m full\nRBush.prototype._allDistMargin = function _allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n var toBBox = this.toBBox;\n var leftBBox = distBBox(node, 0, m, toBBox);\n var rightBBox = distBBox(node, M - m, M, toBBox);\n var margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (var i = m; i < M - m; i++) {\n var child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (var i$1 = M - m - 1; i$1 >= m; i$1--) {\n var child$1 = node.children[i$1];\n extend(rightBBox, node.leaf ? toBBox(child$1) : child$1);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n};\n\nRBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (var i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n};\n\nRBush.prototype._condense = function _condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (var i = path.length - 1, siblings = (void 0); i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else { this.clear(); }\n\n } else { calcBBox(path[i], this.toBBox); }\n }\n};\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) { return items.indexOf(item); }\n\n for (var i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) { return i; }\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) { destNode = createNode(null); }\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (var i = k; i < p; i++) {\n var child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n var minX = Math.max(a.minX, b.minX);\n var minY = Math.max(a.minY, b.minY);\n var maxX = Math.min(a.maxX, b.maxX);\n var maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children: children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n var stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) { continue; }\n\n var mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n\nexport default RBush;\n","import RBush from \"../ThirdParty/rbush.js\";\nimport Check from \"./Check.js\";\n\n/**\n * Wrapper around rbush for use with Rectangle types.\n * @private\n */\nfunction RectangleCollisionChecker() {\n this._tree = new RBush();\n}\n\nfunction RectangleWithId() {\n this.minX = 0.0;\n this.minY = 0.0;\n this.maxX = 0.0;\n this.maxY = 0.0;\n this.id = \"\";\n}\n\nRectangleWithId.fromRectangleAndId = function (id, rectangle, result) {\n result.minX = rectangle.west;\n result.minY = rectangle.south;\n result.maxX = rectangle.east;\n result.maxY = rectangle.north;\n result.id = id;\n return result;\n};\n\n/**\n * Insert a rectangle into the collision checker.\n *\n * @param {String} id Unique string ID for the rectangle being inserted.\n * @param {Rectangle} rectangle A Rectangle\n * @private\n */\nRectangleCollisionChecker.prototype.insert = function (id, rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"id\", id);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var withId = RectangleWithId.fromRectangleAndId(\n id,\n rectangle,\n new RectangleWithId()\n );\n this._tree.insert(withId);\n};\n\nfunction idCompare(a, b) {\n return a.id === b.id;\n}\n\nvar removalScratch = new RectangleWithId();\n/**\n * Remove a rectangle from the collision checker.\n *\n * @param {String} id Unique string ID for the rectangle being removed.\n * @param {Rectangle} rectangle A Rectangle\n * @private\n */\nRectangleCollisionChecker.prototype.remove = function (id, rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"id\", id);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var withId = RectangleWithId.fromRectangleAndId(\n id,\n rectangle,\n removalScratch\n );\n this._tree.remove(withId, idCompare);\n};\n\nvar collisionScratch = new RectangleWithId();\n/**\n * Checks if a given rectangle collides with any of the rectangles in the collection.\n *\n * @param {Rectangle} rectangle A Rectangle that should be checked against the rectangles in the collision checker.\n * @returns {Boolean} Whether the rectangle collides with any of the rectangles in the collision checker.\n */\nRectangleCollisionChecker.prototype.collides = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n var withId = RectangleWithId.fromRectangleAndId(\n \"\",\n rectangle,\n collisionScratch\n );\n return this._tree.collides(withId);\n};\nexport default RectangleCollisionChecker;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Rectangle from \"./Rectangle.js\";\n\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar sqrt = Math.sqrt;\n\n/**\n * @private\n */\nvar RectangleGeometryLibrary = {};\n\n/**\n * @private\n */\nRectangleGeometryLibrary.computePosition = function (\n computedOptions,\n ellipsoid,\n computeST,\n row,\n col,\n position,\n st\n) {\n var radiiSquared = ellipsoid.radiiSquared;\n var nwCorner = computedOptions.nwCorner;\n var rectangle = computedOptions.boundingRectangle;\n\n var stLatitude =\n nwCorner.latitude -\n computedOptions.granYCos * row +\n col * computedOptions.granXSin;\n var cosLatitude = cos(stLatitude);\n var nZ = sin(stLatitude);\n var kZ = radiiSquared.z * nZ;\n\n var stLongitude =\n nwCorner.longitude +\n row * computedOptions.granYSin +\n col * computedOptions.granXCos;\n var nX = cosLatitude * cos(stLongitude);\n var nY = cosLatitude * sin(stLongitude);\n\n var kX = radiiSquared.x * nX;\n var kY = radiiSquared.y * nY;\n\n var gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\n\n position.x = kX / gamma;\n position.y = kY / gamma;\n position.z = kZ / gamma;\n\n if (computeST) {\n var stNwCorner = computedOptions.stNwCorner;\n if (defined(stNwCorner)) {\n stLatitude =\n stNwCorner.latitude -\n computedOptions.stGranYCos * row +\n col * computedOptions.stGranXSin;\n stLongitude =\n stNwCorner.longitude +\n row * computedOptions.stGranYSin +\n col * computedOptions.stGranXCos;\n\n st.x = (stLongitude - computedOptions.stWest) * computedOptions.lonScalar;\n st.y = (stLatitude - computedOptions.stSouth) * computedOptions.latScalar;\n } else {\n st.x = (stLongitude - rectangle.west) * computedOptions.lonScalar;\n st.y = (stLatitude - rectangle.south) * computedOptions.latScalar;\n }\n }\n};\n\nvar rotationMatrixScratch = new Matrix2();\nvar nwCartesian = new Cartesian3();\nvar centerScratch = new Cartographic();\nvar centerCartesian = new Cartesian3();\nvar proj = new GeographicProjection();\n\nfunction getRotationOptions(\n nwCorner,\n rotation,\n granularityX,\n granularityY,\n center,\n width,\n height\n) {\n var cosRotation = Math.cos(rotation);\n var granYCos = granularityY * cosRotation;\n var granXCos = granularityX * cosRotation;\n\n var sinRotation = Math.sin(rotation);\n var granYSin = granularityY * sinRotation;\n var granXSin = granularityX * sinRotation;\n\n nwCartesian = proj.project(nwCorner, nwCartesian);\n\n nwCartesian = Cartesian3.subtract(nwCartesian, centerCartesian, nwCartesian);\n var rotationMatrix = Matrix2.fromRotation(rotation, rotationMatrixScratch);\n nwCartesian = Matrix2.multiplyByVector(\n rotationMatrix,\n nwCartesian,\n nwCartesian\n );\n nwCartesian = Cartesian3.add(nwCartesian, centerCartesian, nwCartesian);\n nwCorner = proj.unproject(nwCartesian, nwCorner);\n\n width -= 1;\n height -= 1;\n\n var latitude = nwCorner.latitude;\n var latitude0 = latitude + width * granXSin;\n var latitude1 = latitude - granYCos * height;\n var latitude2 = latitude - granYCos * height + width * granXSin;\n\n var north = Math.max(latitude, latitude0, latitude1, latitude2);\n var south = Math.min(latitude, latitude0, latitude1, latitude2);\n\n var longitude = nwCorner.longitude;\n var longitude0 = longitude + width * granXCos;\n var longitude1 = longitude + height * granYSin;\n var longitude2 = longitude + height * granYSin + width * granXCos;\n\n var east = Math.max(longitude, longitude0, longitude1, longitude2);\n var west = Math.min(longitude, longitude0, longitude1, longitude2);\n\n return {\n north: north,\n south: south,\n east: east,\n west: west,\n granYCos: granYCos,\n granYSin: granYSin,\n granXCos: granXCos,\n granXSin: granXSin,\n nwCorner: nwCorner,\n };\n}\n\n/**\n * @private\n */\nRectangleGeometryLibrary.computeOptions = function (\n rectangle,\n granularity,\n rotation,\n stRotation,\n boundingRectangleScratch,\n nwCornerResult,\n stNwCornerResult\n) {\n var east = rectangle.east;\n var west = rectangle.west;\n var north = rectangle.north;\n var south = rectangle.south;\n\n var northCap = false;\n var southCap = false;\n\n if (north === CesiumMath.PI_OVER_TWO) {\n northCap = true;\n }\n if (south === -CesiumMath.PI_OVER_TWO) {\n southCap = true;\n }\n\n var width;\n var height;\n var granularityX;\n var granularityY;\n var dx;\n var dy = north - south;\n if (west > east) {\n dx = CesiumMath.TWO_PI - west + east;\n } else {\n dx = east - west;\n }\n\n width = Math.ceil(dx / granularity) + 1;\n height = Math.ceil(dy / granularity) + 1;\n granularityX = dx / (width - 1);\n granularityY = dy / (height - 1);\n\n var nwCorner = Rectangle.northwest(rectangle, nwCornerResult);\n var center = Rectangle.center(rectangle, centerScratch);\n if (rotation !== 0 || stRotation !== 0) {\n if (center.longitude < nwCorner.longitude) {\n center.longitude += CesiumMath.TWO_PI;\n }\n centerCartesian = proj.project(center, centerCartesian);\n }\n\n var granYCos = granularityY;\n var granXCos = granularityX;\n var granYSin = 0.0;\n var granXSin = 0.0;\n\n var boundingRectangle = Rectangle.clone(rectangle, boundingRectangleScratch);\n\n var computedOptions = {\n granYCos: granYCos,\n granYSin: granYSin,\n granXCos: granXCos,\n granXSin: granXSin,\n nwCorner: nwCorner,\n boundingRectangle: boundingRectangle,\n width: width,\n height: height,\n northCap: northCap,\n southCap: southCap,\n };\n\n if (rotation !== 0) {\n var rotationOptions = getRotationOptions(\n nwCorner,\n rotation,\n granularityX,\n granularityY,\n center,\n width,\n height\n );\n north = rotationOptions.north;\n south = rotationOptions.south;\n east = rotationOptions.east;\n west = rotationOptions.west;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n north < -CesiumMath.PI_OVER_TWO ||\n north > CesiumMath.PI_OVER_TWO ||\n south < -CesiumMath.PI_OVER_TWO ||\n south > CesiumMath.PI_OVER_TWO\n ) {\n throw new DeveloperError(\n \"Rotated rectangle is invalid. It crosses over either the north or south pole.\"\n );\n }\n //>>includeEnd('debug')\n\n computedOptions.granYCos = rotationOptions.granYCos;\n computedOptions.granYSin = rotationOptions.granYSin;\n computedOptions.granXCos = rotationOptions.granXCos;\n computedOptions.granXSin = rotationOptions.granXSin;\n\n boundingRectangle.north = north;\n boundingRectangle.south = south;\n boundingRectangle.east = east;\n boundingRectangle.west = west;\n }\n\n if (stRotation !== 0) {\n rotation = rotation - stRotation;\n var stNwCorner = Rectangle.northwest(boundingRectangle, stNwCornerResult);\n\n var stRotationOptions = getRotationOptions(\n stNwCorner,\n rotation,\n granularityX,\n granularityY,\n center,\n width,\n height\n );\n\n computedOptions.stGranYCos = stRotationOptions.granYCos;\n computedOptions.stGranXCos = stRotationOptions.granXCos;\n computedOptions.stGranYSin = stRotationOptions.granYSin;\n computedOptions.stGranXSin = stRotationOptions.granXSin;\n computedOptions.stNwCorner = stNwCorner;\n computedOptions.stWest = stRotationOptions.west;\n computedOptions.stSouth = stRotationOptions.south;\n }\n\n return computedOptions;\n};\nexport default RectangleGeometryLibrary;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nvar positionScratch = new Cartesian3();\nvar normalScratch = new Cartesian3();\nvar tangentScratch = new Cartesian3();\nvar bitangentScratch = new Cartesian3();\nvar rectangleScratch = new Rectangle();\nvar stScratch = new Cartesian2();\nvar bottomBoundingSphere = new BoundingSphere();\nvar topBoundingSphere = new BoundingSphere();\n\nfunction createAttributes(vertexFormat, attributes) {\n var geo = new Geometry({\n attributes: new GeometryAttributes(),\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n geo.attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: attributes.positions,\n });\n if (vertexFormat.normal) {\n geo.attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attributes.normals,\n });\n }\n if (vertexFormat.tangent) {\n geo.attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attributes.tangents,\n });\n }\n if (vertexFormat.bitangent) {\n geo.attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: attributes.bitangents,\n });\n }\n return geo;\n}\n\nfunction calculateAttributes(\n positions,\n vertexFormat,\n ellipsoid,\n tangentRotationMatrix\n) {\n var length = positions.length;\n\n var normals = vertexFormat.normal ? new Float32Array(length) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(length)\n : undefined;\n\n var attrIndex = 0;\n var bitangent = bitangentScratch;\n var tangent = tangentScratch;\n var normal = normalScratch;\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n for (var i = 0; i < length; i += 3) {\n var p = Cartesian3.fromArray(positions, i, positionScratch);\n var attrIndex1 = attrIndex + 1;\n var attrIndex2 = attrIndex + 2;\n\n normal = ellipsoid.geodeticSurfaceNormal(p, normal);\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\n Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent);\n Cartesian3.normalize(tangent, tangent);\n\n if (vertexFormat.bitangent) {\n Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n }\n }\n\n if (vertexFormat.normal) {\n normals[attrIndex] = normal.x;\n normals[attrIndex1] = normal.y;\n normals[attrIndex2] = normal.z;\n }\n if (vertexFormat.tangent) {\n tangents[attrIndex] = tangent.x;\n tangents[attrIndex1] = tangent.y;\n tangents[attrIndex2] = tangent.z;\n }\n if (vertexFormat.bitangent) {\n bitangents[attrIndex] = bitangent.x;\n bitangents[attrIndex1] = bitangent.y;\n bitangents[attrIndex2] = bitangent.z;\n }\n attrIndex += 3;\n }\n }\n return createAttributes(vertexFormat, {\n positions: positions,\n normals: normals,\n tangents: tangents,\n bitangents: bitangents,\n });\n}\n\nvar v1Scratch = new Cartesian3();\nvar v2Scratch = new Cartesian3();\n\nfunction calculateAttributesWall(positions, vertexFormat, ellipsoid) {\n var length = positions.length;\n\n var normals = vertexFormat.normal ? new Float32Array(length) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(length)\n : undefined;\n\n var normalIndex = 0;\n var tangentIndex = 0;\n var bitangentIndex = 0;\n var recomputeNormal = true;\n\n var bitangent = bitangentScratch;\n var tangent = tangentScratch;\n var normal = normalScratch;\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n for (var i = 0; i < length; i += 6) {\n var p = Cartesian3.fromArray(positions, i, positionScratch);\n var p1 = Cartesian3.fromArray(positions, (i + 6) % length, v1Scratch);\n if (recomputeNormal) {\n var p2 = Cartesian3.fromArray(positions, (i + 3) % length, v2Scratch);\n Cartesian3.subtract(p1, p, p1);\n Cartesian3.subtract(p2, p, p2);\n normal = Cartesian3.normalize(Cartesian3.cross(p2, p1, normal), normal);\n recomputeNormal = false;\n }\n\n if (Cartesian3.equalsEpsilon(p1, p, CesiumMath.EPSILON10)) {\n // if we've reached a corner\n recomputeNormal = true;\n }\n\n if (vertexFormat.tangent || vertexFormat.bitangent) {\n bitangent = ellipsoid.geodeticSurfaceNormal(p, bitangent);\n if (vertexFormat.tangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.cross(bitangent, normal, tangent),\n tangent\n );\n }\n }\n\n if (vertexFormat.normal) {\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n }\n\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n }\n }\n }\n\n return createAttributes(vertexFormat, {\n positions: positions,\n normals: normals,\n tangents: tangents,\n bitangents: bitangents,\n });\n}\n\nfunction constructRectangle(rectangleGeometry, computedOptions) {\n var vertexFormat = rectangleGeometry._vertexFormat;\n var ellipsoid = rectangleGeometry._ellipsoid;\n var height = computedOptions.height;\n var width = computedOptions.width;\n var northCap = computedOptions.northCap;\n var southCap = computedOptions.southCap;\n\n var rowStart = 0;\n var rowEnd = height;\n var rowHeight = height;\n var size = 0;\n if (northCap) {\n rowStart = 1;\n rowHeight -= 1;\n size += 1;\n }\n if (southCap) {\n rowEnd -= 1;\n rowHeight -= 1;\n size += 1;\n }\n size += width * rowHeight;\n\n var positions = vertexFormat.position\n ? new Float64Array(size * 3)\n : undefined;\n var textureCoordinates = vertexFormat.st\n ? new Float32Array(size * 2)\n : undefined;\n\n var posIndex = 0;\n var stIndex = 0;\n\n var position = positionScratch;\n var st = stScratch;\n\n var minX = Number.MAX_VALUE;\n var minY = Number.MAX_VALUE;\n var maxX = -Number.MAX_VALUE;\n var maxY = -Number.MAX_VALUE;\n\n for (var row = rowStart; row < rowEnd; ++row) {\n for (var col = 0; col < width; ++col) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n vertexFormat.st,\n row,\n col,\n position,\n st\n );\n\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n\n if (vertexFormat.st) {\n textureCoordinates[stIndex++] = st.x;\n textureCoordinates[stIndex++] = st.y;\n\n minX = Math.min(minX, st.x);\n minY = Math.min(minY, st.y);\n maxX = Math.max(maxX, st.x);\n maxY = Math.max(maxY, st.y);\n }\n }\n }\n if (northCap) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n vertexFormat.st,\n 0,\n 0,\n position,\n st\n );\n\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n\n if (vertexFormat.st) {\n textureCoordinates[stIndex++] = st.x;\n textureCoordinates[stIndex++] = st.y;\n\n minX = st.x;\n minY = st.y;\n maxX = st.x;\n maxY = st.y;\n }\n }\n if (southCap) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n vertexFormat.st,\n height - 1,\n 0,\n position,\n st\n );\n\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex] = position.z;\n\n if (vertexFormat.st) {\n textureCoordinates[stIndex++] = st.x;\n textureCoordinates[stIndex] = st.y;\n\n minX = Math.min(minX, st.x);\n minY = Math.min(minY, st.y);\n maxX = Math.max(maxX, st.x);\n maxY = Math.max(maxY, st.y);\n }\n }\n\n if (\n vertexFormat.st &&\n (minX < 0.0 || minY < 0.0 || maxX > 1.0 || maxY > 1.0)\n ) {\n for (var k = 0; k < textureCoordinates.length; k += 2) {\n textureCoordinates[k] = (textureCoordinates[k] - minX) / (maxX - minX);\n textureCoordinates[k + 1] =\n (textureCoordinates[k + 1] - minY) / (maxY - minY);\n }\n }\n\n var geo = calculateAttributes(\n positions,\n vertexFormat,\n ellipsoid,\n computedOptions.tangentRotationMatrix\n );\n\n var indicesSize = 6 * (width - 1) * (rowHeight - 1);\n if (northCap) {\n indicesSize += 3 * (width - 1);\n }\n if (southCap) {\n indicesSize += 3 * (width - 1);\n }\n var indices = IndexDatatype.createTypedArray(size, indicesSize);\n var index = 0;\n var indicesIndex = 0;\n var i;\n for (i = 0; i < rowHeight - 1; ++i) {\n for (var j = 0; j < width - 1; ++j) {\n var upperLeft = index;\n var lowerLeft = upperLeft + width;\n var lowerRight = lowerLeft + 1;\n var upperRight = upperLeft + 1;\n indices[indicesIndex++] = upperLeft;\n indices[indicesIndex++] = lowerLeft;\n indices[indicesIndex++] = upperRight;\n indices[indicesIndex++] = upperRight;\n indices[indicesIndex++] = lowerLeft;\n indices[indicesIndex++] = lowerRight;\n ++index;\n }\n ++index;\n }\n if (northCap || southCap) {\n var northIndex = size - 1;\n var southIndex = size - 1;\n if (northCap && southCap) {\n northIndex = size - 2;\n }\n\n var p1;\n var p2;\n index = 0;\n\n if (northCap) {\n for (i = 0; i < width - 1; i++) {\n p1 = index;\n p2 = p1 + 1;\n indices[indicesIndex++] = northIndex;\n indices[indicesIndex++] = p1;\n indices[indicesIndex++] = p2;\n ++index;\n }\n }\n if (southCap) {\n index = (rowHeight - 1) * width;\n for (i = 0; i < width - 1; i++) {\n p1 = index;\n p2 = p1 + 1;\n indices[indicesIndex++] = p1;\n indices[indicesIndex++] = southIndex;\n indices[indicesIndex++] = p2;\n ++index;\n }\n }\n }\n\n geo.indices = indices;\n if (vertexFormat.st) {\n geo.attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n return geo;\n}\n\nfunction addWallPositions(\n wallPositions,\n posIndex,\n i,\n topPositions,\n bottomPositions\n) {\n wallPositions[posIndex++] = topPositions[i];\n wallPositions[posIndex++] = topPositions[i + 1];\n wallPositions[posIndex++] = topPositions[i + 2];\n wallPositions[posIndex++] = bottomPositions[i];\n wallPositions[posIndex++] = bottomPositions[i + 1];\n wallPositions[posIndex] = bottomPositions[i + 2];\n return wallPositions;\n}\n\nfunction addWallTextureCoordinates(wallTextures, stIndex, i, st) {\n wallTextures[stIndex++] = st[i];\n wallTextures[stIndex++] = st[i + 1];\n wallTextures[stIndex++] = st[i];\n wallTextures[stIndex] = st[i + 1];\n return wallTextures;\n}\n\nvar scratchVertexFormat = new VertexFormat();\n\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\n var shadowVolume = rectangleGeometry._shadowVolume;\n var offsetAttributeValue = rectangleGeometry._offsetAttribute;\n var vertexFormat = rectangleGeometry._vertexFormat;\n var minHeight = rectangleGeometry._extrudedHeight;\n var maxHeight = rectangleGeometry._surfaceHeight;\n var ellipsoid = rectangleGeometry._ellipsoid;\n\n var height = computedOptions.height;\n var width = computedOptions.width;\n\n var i;\n\n if (shadowVolume) {\n var newVertexFormat = VertexFormat.clone(vertexFormat, scratchVertexFormat);\n newVertexFormat.normal = true;\n rectangleGeometry._vertexFormat = newVertexFormat;\n }\n\n var topBottomGeo = constructRectangle(rectangleGeometry, computedOptions);\n\n if (shadowVolume) {\n rectangleGeometry._vertexFormat = vertexFormat;\n }\n\n var topPositions = PolygonPipeline.scaleToGeodeticHeight(\n topBottomGeo.attributes.position.values,\n maxHeight,\n ellipsoid,\n false\n );\n topPositions = new Float64Array(topPositions);\n var length = topPositions.length;\n var newLength = length * 2;\n var positions = new Float64Array(newLength);\n positions.set(topPositions);\n var bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\n topBottomGeo.attributes.position.values,\n minHeight,\n ellipsoid\n );\n positions.set(bottomPositions, length);\n topBottomGeo.attributes.position.values = positions;\n\n var normals = vertexFormat.normal ? new Float32Array(newLength) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(newLength) : undefined;\n var bitangents = vertexFormat.bitangent\n ? new Float32Array(newLength)\n : undefined;\n var textures = vertexFormat.st\n ? new Float32Array((newLength / 3) * 2)\n : undefined;\n var topSt;\n var topNormals;\n if (vertexFormat.normal) {\n topNormals = topBottomGeo.attributes.normal.values;\n normals.set(topNormals);\n for (i = 0; i < length; i++) {\n topNormals[i] = -topNormals[i];\n }\n normals.set(topNormals, length);\n topBottomGeo.attributes.normal.values = normals;\n }\n if (shadowVolume) {\n topNormals = topBottomGeo.attributes.normal.values;\n if (!vertexFormat.normal) {\n topBottomGeo.attributes.normal = undefined;\n }\n var extrudeNormals = new Float32Array(newLength);\n for (i = 0; i < length; i++) {\n topNormals[i] = -topNormals[i];\n }\n extrudeNormals.set(topNormals, length); //only get normals for bottom layer that's going to be pushed down\n topBottomGeo.attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: extrudeNormals,\n });\n }\n\n var offsetValue;\n var hasOffsets = defined(offsetAttributeValue);\n if (hasOffsets) {\n var size = (length / 3) * 2;\n var offsetAttribute = new Uint8Array(size);\n if (offsetAttributeValue === GeometryOffsetAttribute.TOP) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else {\n offsetValue =\n offsetAttributeValue === GeometryOffsetAttribute.NONE ? 0 : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n\n topBottomGeo.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n });\n }\n\n if (vertexFormat.tangent) {\n var topTangents = topBottomGeo.attributes.tangent.values;\n tangents.set(topTangents);\n for (i = 0; i < length; i++) {\n topTangents[i] = -topTangents[i];\n }\n tangents.set(topTangents, length);\n topBottomGeo.attributes.tangent.values = tangents;\n }\n if (vertexFormat.bitangent) {\n var topBitangents = topBottomGeo.attributes.bitangent.values;\n bitangents.set(topBitangents);\n bitangents.set(topBitangents, length);\n topBottomGeo.attributes.bitangent.values = bitangents;\n }\n if (vertexFormat.st) {\n topSt = topBottomGeo.attributes.st.values;\n textures.set(topSt);\n textures.set(topSt, (length / 3) * 2);\n topBottomGeo.attributes.st.values = textures;\n }\n\n var indices = topBottomGeo.indices;\n var indicesLength = indices.length;\n var posLength = length / 3;\n var newIndices = IndexDatatype.createTypedArray(\n newLength / 3,\n indicesLength * 2\n );\n newIndices.set(indices);\n for (i = 0; i < indicesLength; i += 3) {\n newIndices[i + indicesLength] = indices[i + 2] + posLength;\n newIndices[i + 1 + indicesLength] = indices[i + 1] + posLength;\n newIndices[i + 2 + indicesLength] = indices[i] + posLength;\n }\n topBottomGeo.indices = newIndices;\n\n var northCap = computedOptions.northCap;\n var southCap = computedOptions.southCap;\n\n var rowHeight = height;\n var widthMultiplier = 2;\n var perimeterPositions = 0;\n var corners = 4;\n var dupliateCorners = 4;\n if (northCap) {\n widthMultiplier -= 1;\n rowHeight -= 1;\n perimeterPositions += 1;\n corners -= 2;\n dupliateCorners -= 1;\n }\n if (southCap) {\n widthMultiplier -= 1;\n rowHeight -= 1;\n perimeterPositions += 1;\n corners -= 2;\n dupliateCorners -= 1;\n }\n perimeterPositions += widthMultiplier * width + 2 * rowHeight - corners;\n\n var wallCount = (perimeterPositions + dupliateCorners) * 2;\n\n var wallPositions = new Float64Array(wallCount * 3);\n var wallExtrudeNormals = shadowVolume\n ? new Float32Array(wallCount * 3)\n : undefined;\n var wallOffsetAttribute = hasOffsets ? new Uint8Array(wallCount) : undefined;\n var wallTextures = vertexFormat.st\n ? new Float32Array(wallCount * 2)\n : undefined;\n\n var computeTopOffsets = offsetAttributeValue === GeometryOffsetAttribute.TOP;\n if (hasOffsets && !computeTopOffsets) {\n offsetValue = offsetAttributeValue === GeometryOffsetAttribute.ALL ? 1 : 0;\n wallOffsetAttribute = arrayFill(wallOffsetAttribute, offsetValue);\n }\n\n var posIndex = 0;\n var stIndex = 0;\n var extrudeNormalIndex = 0;\n var wallOffsetIndex = 0;\n var area = width * rowHeight;\n var threeI;\n for (i = 0; i < area; i += width) {\n threeI = i * 3;\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n i * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n\n if (!southCap) {\n for (i = area - width; i < area; i++) {\n threeI = i * 3;\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n i * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n } else {\n var southIndex = northCap ? area + 1 : area;\n threeI = southIndex * 3;\n\n for (i = 0; i < 2; i++) {\n // duplicate corner points\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n southIndex * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n }\n\n for (i = area - 1; i > 0; i -= width) {\n threeI = i * 3;\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n i * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n\n if (!northCap) {\n for (i = width - 1; i >= 0; i--) {\n threeI = i * 3;\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n i * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n } else {\n var northIndex = area;\n threeI = northIndex * 3;\n\n for (i = 0; i < 2; i++) {\n // duplicate corner points\n wallPositions = addWallPositions(\n wallPositions,\n posIndex,\n threeI,\n topPositions,\n bottomPositions\n );\n posIndex += 6;\n if (vertexFormat.st) {\n wallTextures = addWallTextureCoordinates(\n wallTextures,\n stIndex,\n northIndex * 2,\n topSt\n );\n stIndex += 4;\n }\n if (shadowVolume) {\n extrudeNormalIndex += 3;\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n }\n if (computeTopOffsets) {\n wallOffsetAttribute[wallOffsetIndex++] = 1;\n wallOffsetIndex += 1;\n }\n }\n }\n\n var geo = calculateAttributesWall(wallPositions, vertexFormat, ellipsoid);\n\n if (vertexFormat.st) {\n geo.attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: wallTextures,\n });\n }\n if (shadowVolume) {\n geo.attributes.extrudeDirection = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: wallExtrudeNormals,\n });\n }\n if (hasOffsets) {\n geo.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: wallOffsetAttribute,\n });\n }\n\n var wallIndices = IndexDatatype.createTypedArray(\n wallCount,\n perimeterPositions * 6\n );\n\n var upperLeft;\n var lowerLeft;\n var lowerRight;\n var upperRight;\n length = wallPositions.length / 3;\n var index = 0;\n for (i = 0; i < length - 1; i += 2) {\n upperLeft = i;\n upperRight = (upperLeft + 2) % length;\n var p1 = Cartesian3.fromArray(wallPositions, upperLeft * 3, v1Scratch);\n var p2 = Cartesian3.fromArray(wallPositions, upperRight * 3, v2Scratch);\n if (Cartesian3.equalsEpsilon(p1, p2, CesiumMath.EPSILON10)) {\n continue;\n }\n lowerLeft = (upperLeft + 1) % length;\n lowerRight = (lowerLeft + 2) % length;\n wallIndices[index++] = upperLeft;\n wallIndices[index++] = lowerLeft;\n wallIndices[index++] = upperRight;\n wallIndices[index++] = upperRight;\n wallIndices[index++] = lowerLeft;\n wallIndices[index++] = lowerRight;\n }\n\n geo.indices = wallIndices;\n\n geo = GeometryPipeline.combineInstances([\n new GeometryInstance({\n geometry: topBottomGeo,\n }),\n new GeometryInstance({\n geometry: geo,\n }),\n ]);\n\n return geo[0];\n}\n\nvar scratchRectanglePoints = [\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n];\nvar nwScratch = new Cartographic();\nvar stNwScratch = new Cartographic();\nfunction computeRectangle(rectangle, granularity, rotation, ellipsoid, result) {\n if (rotation === 0.0) {\n return Rectangle.clone(rectangle, result);\n }\n\n var computedOptions = RectangleGeometryLibrary.computeOptions(\n rectangle,\n granularity,\n rotation,\n 0,\n rectangleScratch,\n nwScratch\n );\n\n var height = computedOptions.height;\n var width = computedOptions.width;\n\n var positions = scratchRectanglePoints;\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n 0,\n 0,\n positions[0]\n );\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n 0,\n width - 1,\n positions[1]\n );\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n height - 1,\n 0,\n positions[2]\n );\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n height - 1,\n width - 1,\n positions[3]\n );\n\n return Rectangle.fromCartesianArray(positions, ellipsoid, result);\n}\n\n/**\n * A description of a cartographic rectangle on an ellipsoid centered at the origin. Rectangle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias RectangleGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\n *\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be greater than <code>options.rectangle.south</code>.\n *\n * @see RectangleGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Rectangle.html|Cesium Sandcastle Rectangle Demo}\n *\n * @example\n * // 1. create a rectangle\n * var rectangle = new Cesium.RectangleGeometry({\n * ellipsoid : Cesium.Ellipsoid.WGS84,\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n * height : 10000.0\n * });\n * var geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\n *\n * // 2. create an extruded rectangle without a top\n * var rectangle = new Cesium.RectangleGeometry({\n * ellipsoid : Cesium.Ellipsoid.WGS84,\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n * height : 10000.0,\n * extrudedHeight: 300000\n * });\n * var geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\n */\nfunction RectangleGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var rectangle = options.rectangle;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Rectangle.validate(rectangle);\n if (rectangle.north < rectangle.south) {\n throw new DeveloperError(\n \"options.rectangle.north must be greater than or equal to options.rectangle.south\"\n );\n }\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._rectangle = Rectangle.clone(rectangle);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._ellipsoid = Ellipsoid.clone(\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\n );\n this._surfaceHeight = Math.max(height, extrudedHeight);\n this._rotation = defaultValue(options.rotation, 0.0);\n this._stRotation = defaultValue(options.stRotation, 0.0);\n this._vertexFormat = VertexFormat.clone(\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\n );\n this._extrudedHeight = Math.min(height, extrudedHeight);\n this._shadowVolume = defaultValue(options.shadowVolume, false);\n this._workerName = \"createRectangleGeometry\";\n this._offsetAttribute = options.offsetAttribute;\n this._rotatedRectangle = undefined;\n\n this._textureCoordinateRotationPoints = undefined;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nRectangleGeometry.packedLength =\n Rectangle.packedLength +\n Ellipsoid.packedLength +\n VertexFormat.packedLength +\n 7;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {RectangleGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nRectangleGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Rectangle.pack(value._rectangle, array, startingIndex);\n startingIndex += Rectangle.packedLength;\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._surfaceHeight;\n array[startingIndex++] = value._rotation;\n array[startingIndex++] = value._stRotation;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchRectangle = new Rectangle();\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchOptions = {\n rectangle: scratchRectangle,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n granularity: undefined,\n height: undefined,\n rotation: undefined,\n stRotation: undefined,\n extrudedHeight: undefined,\n shadowVolume: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {RectangleGeometry} [result] The object into which to store the result.\n * @returns {RectangleGeometry} The modified result parameter or a new RectangleGeometry instance if one was not provided.\n */\nRectangleGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"array\", array);\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\n startingIndex += Rectangle.packedLength;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var granularity = array[startingIndex++];\n var surfaceHeight = array[startingIndex++];\n var rotation = array[startingIndex++];\n var stRotation = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var shadowVolume = array[startingIndex++] === 1.0;\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.granularity = granularity;\n scratchOptions.height = surfaceHeight;\n scratchOptions.rotation = rotation;\n scratchOptions.stRotation = stRotation;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.shadowVolume = shadowVolume;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return new RectangleGeometry(scratchOptions);\n }\n\n result._rectangle = Rectangle.clone(rectangle, result._rectangle);\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._granularity = granularity;\n result._surfaceHeight = surfaceHeight;\n result._rotation = rotation;\n result._stRotation = stRotation;\n result._extrudedHeight = extrudedHeight;\n result._shadowVolume = shadowVolume;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\n/**\n * Computes the bounding rectangle based on the provided options\n *\n * @param {Object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle\n */\nRectangleGeometry.computeRectangle = function (options, result) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var rectangle = options.rectangle;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n Rectangle.validate(rectangle);\n if (rectangle.north < rectangle.south) {\n throw new DeveloperError(\n \"options.rectangle.north must be greater than or equal to options.rectangle.south\"\n );\n }\n //>>includeEnd('debug');\n\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var rotation = defaultValue(options.rotation, 0.0);\n\n return computeRectangle(rectangle, granularity, rotation, ellipsoid, result);\n};\n\nvar tangentRotationMatrixScratch = new Matrix3();\nvar quaternionScratch = new Quaternion();\nvar centerScratch = new Cartographic();\n/**\n * Computes the geometric representation of a rectangle, including its vertices, indices, and a bounding sphere.\n *\n * @param {RectangleGeometry} rectangleGeometry A description of the rectangle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n *\n * @exception {DeveloperError} Rotated rectangle is invalid.\n */\nRectangleGeometry.createGeometry = function (rectangleGeometry) {\n if (\n CesiumMath.equalsEpsilon(\n rectangleGeometry._rectangle.north,\n rectangleGeometry._rectangle.south,\n CesiumMath.EPSILON10\n ) ||\n CesiumMath.equalsEpsilon(\n rectangleGeometry._rectangle.east,\n rectangleGeometry._rectangle.west,\n CesiumMath.EPSILON10\n )\n ) {\n return undefined;\n }\n\n var rectangle = rectangleGeometry._rectangle;\n var ellipsoid = rectangleGeometry._ellipsoid;\n var rotation = rectangleGeometry._rotation;\n var stRotation = rectangleGeometry._stRotation;\n var vertexFormat = rectangleGeometry._vertexFormat;\n\n var computedOptions = RectangleGeometryLibrary.computeOptions(\n rectangle,\n rectangleGeometry._granularity,\n rotation,\n stRotation,\n rectangleScratch,\n nwScratch,\n stNwScratch\n );\n\n var tangentRotationMatrix = tangentRotationMatrixScratch;\n if (stRotation !== 0 || rotation !== 0) {\n var center = Rectangle.center(rectangle, centerScratch);\n var axis = ellipsoid.geodeticSurfaceNormalCartographic(center, v1Scratch);\n Quaternion.fromAxisAngle(axis, -stRotation, quaternionScratch);\n Matrix3.fromQuaternion(quaternionScratch, tangentRotationMatrix);\n } else {\n Matrix3.clone(Matrix3.IDENTITY, tangentRotationMatrix);\n }\n\n var surfaceHeight = rectangleGeometry._surfaceHeight;\n var extrudedHeight = rectangleGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n surfaceHeight,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n\n computedOptions.lonScalar = 1.0 / rectangleGeometry._rectangle.width;\n computedOptions.latScalar = 1.0 / rectangleGeometry._rectangle.height;\n computedOptions.tangentRotationMatrix = tangentRotationMatrix;\n\n var geometry;\n var boundingSphere;\n rectangle = rectangleGeometry._rectangle;\n if (extrude) {\n geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\n var topBS = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n surfaceHeight,\n topBoundingSphere\n );\n var bottomBS = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n extrudedHeight,\n bottomBoundingSphere\n );\n boundingSphere = BoundingSphere.union(topBS, bottomBS);\n } else {\n geometry = constructRectangle(rectangleGeometry, computedOptions);\n geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n geometry.attributes.position.values,\n surfaceHeight,\n ellipsoid,\n false\n );\n\n if (defined(rectangleGeometry._offsetAttribute)) {\n var length = geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n var offsetValue =\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n boundingSphere = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n surfaceHeight\n );\n }\n\n if (!vertexFormat.position) {\n delete geometry.attributes.position;\n }\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: boundingSphere,\n offsetAttribute: rectangleGeometry._offsetAttribute,\n });\n};\n\n/**\n * @private\n */\nRectangleGeometry.createShadowVolume = function (\n rectangleGeometry,\n minHeightFunc,\n maxHeightFunc\n) {\n var granularity = rectangleGeometry._granularity;\n var ellipsoid = rectangleGeometry._ellipsoid;\n\n var minHeight = minHeightFunc(granularity, ellipsoid);\n var maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n return new RectangleGeometry({\n rectangle: rectangleGeometry._rectangle,\n rotation: rectangleGeometry._rotation,\n ellipsoid: ellipsoid,\n stRotation: rectangleGeometry._stRotation,\n granularity: granularity,\n extrudedHeight: maxHeight,\n height: minHeight,\n vertexFormat: VertexFormat.POSITION_ONLY,\n shadowVolume: true,\n });\n};\n\nvar unrotatedTextureRectangleScratch = new Rectangle();\nvar points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\nvar rotation2DScratch = new Matrix2();\nvar rectangleCenterScratch = new Cartographic();\n\nfunction textureCoordinateRotationPoints(rectangleGeometry) {\n if (rectangleGeometry._stRotation === 0.0) {\n return [0, 0, 0, 1, 1, 0];\n }\n\n var rectangle = Rectangle.clone(\n rectangleGeometry._rectangle,\n unrotatedTextureRectangleScratch\n );\n var granularity = rectangleGeometry._granularity;\n var ellipsoid = rectangleGeometry._ellipsoid;\n\n // Rotate to align the texture coordinates with ENU\n var rotation = rectangleGeometry._rotation - rectangleGeometry._stRotation;\n\n var unrotatedTextureRectangle = computeRectangle(\n rectangle,\n granularity,\n rotation,\n ellipsoid,\n unrotatedTextureRectangleScratch\n );\n\n // Assume a computed \"east-north\" texture coordinate system based on spherical or planar tricks, bounded by `boundingRectangle`.\n // The \"desired\" texture coordinate system forms an oriented rectangle (un-oriented computed) around the geometry that completely and tightly bounds it.\n // We want to map from the \"east-north\" texture coordinate system into the \"desired\" system using a pair of lines (analagous planes in 2D)\n // Compute 3 corners of the \"desired\" texture coordinate system in \"east-north\" texture space by the following in cartographic space:\n // - rotate 3 of the corners in unrotatedTextureRectangle by stRotation around the center of the bounding rectangle\n // - apply the \"east-north\" system's normalization formula to the rotated cartographics, even though this is likely to produce values outside [0-1].\n // This gives us a set of points in the \"east-north\" texture coordinate system that can be used to map \"east-north\" texture coordinates to \"desired.\"\n\n var points2D = points2DScratch;\n points2D[0].x = unrotatedTextureRectangle.west;\n points2D[0].y = unrotatedTextureRectangle.south;\n\n points2D[1].x = unrotatedTextureRectangle.west;\n points2D[1].y = unrotatedTextureRectangle.north;\n\n points2D[2].x = unrotatedTextureRectangle.east;\n points2D[2].y = unrotatedTextureRectangle.south;\n\n var boundingRectangle = rectangleGeometry.rectangle;\n var toDesiredInComputed = Matrix2.fromRotation(\n rectangleGeometry._stRotation,\n rotation2DScratch\n );\n var boundingRectangleCenter = Rectangle.center(\n boundingRectangle,\n rectangleCenterScratch\n );\n\n for (var i = 0; i < 3; ++i) {\n var point2D = points2D[i];\n point2D.x -= boundingRectangleCenter.longitude;\n point2D.y -= boundingRectangleCenter.latitude;\n Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\n point2D.x += boundingRectangleCenter.longitude;\n point2D.y += boundingRectangleCenter.latitude;\n\n // Convert point into east-north texture coordinate space\n point2D.x = (point2D.x - boundingRectangle.west) / boundingRectangle.width;\n point2D.y =\n (point2D.y - boundingRectangle.south) / boundingRectangle.height;\n }\n\n var minXYCorner = points2D[0];\n var maxYCorner = points2D[1];\n var maxXCorner = points2D[2];\n var result = new Array(6);\n Cartesian2.pack(minXYCorner, result);\n Cartesian2.pack(maxYCorner, result, 2);\n Cartesian2.pack(maxXCorner, result, 4);\n return result;\n}\n\nObject.defineProperties(RectangleGeometry.prototype, {\n /**\n * @private\n */\n rectangle: {\n get: function () {\n if (!defined(this._rotatedRectangle)) {\n this._rotatedRectangle = computeRectangle(\n this._rectangle,\n this._granularity,\n this._rotation,\n this._ellipsoid\n );\n }\n return this._rotatedRectangle;\n },\n },\n /**\n * For remapping texture coordinates when rendering RectangleGeometries as GroundPrimitives.\n * This version permits skew in textures by computing offsets directly in cartographic space and\n * more accurately approximates rendering RectangleGeometries with height as standard Primitives.\n * @see Geometry#_textureCoordinateRotationPoints\n * @private\n */\n textureCoordinateRotationPoints: {\n get: function () {\n if (!defined(this._textureCoordinateRotationPoints)) {\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\n this\n );\n }\n return this._textureCoordinateRotationPoints;\n },\n },\n});\nexport default RectangleGeometry;\n","import arrayFill from \"./arrayFill.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\n\nvar bottomBoundingSphere = new BoundingSphere();\nvar topBoundingSphere = new BoundingSphere();\nvar positionScratch = new Cartesian3();\nvar rectangleScratch = new Rectangle();\n\nfunction constructRectangle(geometry, computedOptions) {\n var ellipsoid = geometry._ellipsoid;\n var height = computedOptions.height;\n var width = computedOptions.width;\n var northCap = computedOptions.northCap;\n var southCap = computedOptions.southCap;\n\n var rowHeight = height;\n var widthMultiplier = 2;\n var size = 0;\n var corners = 4;\n if (northCap) {\n widthMultiplier -= 1;\n rowHeight -= 1;\n size += 1;\n corners -= 2;\n }\n if (southCap) {\n widthMultiplier -= 1;\n rowHeight -= 1;\n size += 1;\n corners -= 2;\n }\n size += widthMultiplier * width + 2 * rowHeight - corners;\n\n var positions = new Float64Array(size * 3);\n\n var posIndex = 0;\n var row = 0;\n var col;\n var position = positionScratch;\n if (northCap) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n row,\n 0,\n position\n );\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n } else {\n for (col = 0; col < width; col++) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n row,\n col,\n position\n );\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n }\n }\n\n col = width - 1;\n for (row = 1; row < height; row++) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n row,\n col,\n position\n );\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n }\n\n row = height - 1;\n if (!southCap) {\n // if southCap is true, we dont need to add any more points because the south pole point was added by the iteration above\n for (col = width - 2; col >= 0; col--) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n row,\n col,\n position\n );\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n }\n }\n\n col = 0;\n for (row = height - 2; row > 0; row--) {\n RectangleGeometryLibrary.computePosition(\n computedOptions,\n ellipsoid,\n false,\n row,\n col,\n position\n );\n positions[posIndex++] = position.x;\n positions[posIndex++] = position.y;\n positions[posIndex++] = position.z;\n }\n\n var indicesSize = (positions.length / 3) * 2;\n var indices = IndexDatatype.createTypedArray(\n positions.length / 3,\n indicesSize\n );\n\n var index = 0;\n for (var i = 0; i < positions.length / 3 - 1; i++) {\n indices[index++] = i;\n indices[index++] = i + 1;\n }\n indices[index++] = positions.length / 3 - 1;\n indices[index++] = 0;\n\n var geo = new Geometry({\n attributes: new GeometryAttributes(),\n primitiveType: PrimitiveType.LINES,\n });\n\n geo.attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n geo.indices = indices;\n\n return geo;\n}\n\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\n var surfaceHeight = rectangleGeometry._surfaceHeight;\n var extrudedHeight = rectangleGeometry._extrudedHeight;\n var ellipsoid = rectangleGeometry._ellipsoid;\n var minHeight = extrudedHeight;\n var maxHeight = surfaceHeight;\n var geo = constructRectangle(rectangleGeometry, computedOptions);\n\n var height = computedOptions.height;\n var width = computedOptions.width;\n\n var topPositions = PolygonPipeline.scaleToGeodeticHeight(\n geo.attributes.position.values,\n maxHeight,\n ellipsoid,\n false\n );\n var length = topPositions.length;\n var positions = new Float64Array(length * 2);\n positions.set(topPositions);\n var bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\n geo.attributes.position.values,\n minHeight,\n ellipsoid\n );\n positions.set(bottomPositions, length);\n geo.attributes.position.values = positions;\n\n var northCap = computedOptions.northCap;\n var southCap = computedOptions.southCap;\n var corners = 4;\n if (northCap) {\n corners -= 1;\n }\n if (southCap) {\n corners -= 1;\n }\n\n var indicesSize = (positions.length / 3 + corners) * 2;\n var indices = IndexDatatype.createTypedArray(\n positions.length / 3,\n indicesSize\n );\n length = positions.length / 6;\n var index = 0;\n for (var i = 0; i < length - 1; i++) {\n indices[index++] = i;\n indices[index++] = i + 1;\n indices[index++] = i + length;\n indices[index++] = i + length + 1;\n }\n indices[index++] = length - 1;\n indices[index++] = 0;\n indices[index++] = length + length - 1;\n indices[index++] = length;\n\n indices[index++] = 0;\n indices[index++] = length;\n\n var bottomCorner;\n if (northCap) {\n bottomCorner = height - 1;\n } else {\n var topRightCorner = width - 1;\n indices[index++] = topRightCorner;\n indices[index++] = topRightCorner + length;\n bottomCorner = width + height - 2;\n }\n\n indices[index++] = bottomCorner;\n indices[index++] = bottomCorner + length;\n\n if (!southCap) {\n var bottomLeftCorner = width + bottomCorner - 1;\n indices[index++] = bottomLeftCorner;\n indices[index] = bottomLeftCorner + length;\n }\n\n geo.indices = indices;\n\n return geo;\n}\n\n/**\n * A description of the outline of a a cartographic rectangle on an ellipsoid centered at the origin.\n *\n * @alias RectangleOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\n *\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be greater than <code>rectangle.south</code>.\n *\n * @see RectangleOutlineGeometry#createGeometry\n *\n * @example\n * var rectangle = new Cesium.RectangleOutlineGeometry({\n * ellipsoid : Cesium.Ellipsoid.WGS84,\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n * height : 10000.0\n * });\n * var geometry = Cesium.RectangleOutlineGeometry.createGeometry(rectangle);\n */\nfunction RectangleOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var rectangle = options.rectangle;\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n var rotation = defaultValue(options.rotation, 0.0);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(rectangle)) {\n throw new DeveloperError(\"rectangle is required.\");\n }\n Rectangle.validate(rectangle);\n if (rectangle.north < rectangle.south) {\n throw new DeveloperError(\n \"options.rectangle.north must be greater than options.rectangle.south\"\n );\n }\n //>>includeEnd('debug');\n\n var height = defaultValue(options.height, 0.0);\n var extrudedHeight = defaultValue(options.extrudedHeight, height);\n\n this._rectangle = Rectangle.clone(rectangle);\n this._granularity = granularity;\n this._ellipsoid = ellipsoid;\n this._surfaceHeight = Math.max(height, extrudedHeight);\n this._rotation = rotation;\n this._extrudedHeight = Math.min(height, extrudedHeight);\n this._offsetAttribute = options.offsetAttribute;\n this._workerName = \"createRectangleOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nRectangleOutlineGeometry.packedLength =\n Rectangle.packedLength + Ellipsoid.packedLength + 5;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {RectangleOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nRectangleOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n Rectangle.pack(value._rectangle, array, startingIndex);\n startingIndex += Rectangle.packedLength;\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._granularity;\n array[startingIndex++] = value._surfaceHeight;\n array[startingIndex++] = value._rotation;\n array[startingIndex++] = value._extrudedHeight;\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\n\n return array;\n};\n\nvar scratchRectangle = new Rectangle();\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchOptions = {\n rectangle: scratchRectangle,\n ellipsoid: scratchEllipsoid,\n granularity: undefined,\n height: undefined,\n rotation: undefined,\n extrudedHeight: undefined,\n offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {RectangleOutlineGeometry} [result] The object into which to store the result.\n * @returns {RectangleOutlineGeometry} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nRectangleOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\n startingIndex += Rectangle.packedLength;\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var granularity = array[startingIndex++];\n var height = array[startingIndex++];\n var rotation = array[startingIndex++];\n var extrudedHeight = array[startingIndex++];\n var offsetAttribute = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.granularity = granularity;\n scratchOptions.height = height;\n scratchOptions.rotation = rotation;\n scratchOptions.extrudedHeight = extrudedHeight;\n scratchOptions.offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return new RectangleOutlineGeometry(scratchOptions);\n }\n\n result._rectangle = Rectangle.clone(rectangle, result._rectangle);\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._surfaceHeight = height;\n result._rotation = rotation;\n result._extrudedHeight = extrudedHeight;\n result._offsetAttribute =\n offsetAttribute === -1 ? undefined : offsetAttribute;\n\n return result;\n};\n\nvar nwScratch = new Cartographic();\n/**\n * Computes the geometric representation of an outline of a rectangle, including its vertices, indices, and a bounding sphere.\n *\n * @param {RectangleOutlineGeometry} rectangleGeometry A description of the rectangle outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n *\n * @exception {DeveloperError} Rotated rectangle is invalid.\n */\nRectangleOutlineGeometry.createGeometry = function (rectangleGeometry) {\n var rectangle = rectangleGeometry._rectangle;\n var ellipsoid = rectangleGeometry._ellipsoid;\n var computedOptions = RectangleGeometryLibrary.computeOptions(\n rectangle,\n rectangleGeometry._granularity,\n rectangleGeometry._rotation,\n 0,\n rectangleScratch,\n nwScratch\n );\n\n var geometry;\n var boundingSphere;\n\n if (\n CesiumMath.equalsEpsilon(\n rectangle.north,\n rectangle.south,\n CesiumMath.EPSILON10\n ) ||\n CesiumMath.equalsEpsilon(\n rectangle.east,\n rectangle.west,\n CesiumMath.EPSILON10\n )\n ) {\n return undefined;\n }\n\n var surfaceHeight = rectangleGeometry._surfaceHeight;\n var extrudedHeight = rectangleGeometry._extrudedHeight;\n var extrude = !CesiumMath.equalsEpsilon(\n surfaceHeight,\n extrudedHeight,\n 0,\n CesiumMath.EPSILON2\n );\n var offsetValue;\n if (extrude) {\n geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\n if (defined(rectangleGeometry._offsetAttribute)) {\n var size = geometry.attributes.position.values.length / 3;\n var offsetAttribute = new Uint8Array(size);\n if (rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\n offsetAttribute = arrayFill(offsetAttribute, 1, 0, size / 2);\n } else {\n offsetValue =\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n offsetAttribute = arrayFill(offsetAttribute, offsetValue);\n }\n\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: offsetAttribute,\n });\n }\n var topBS = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n surfaceHeight,\n topBoundingSphere\n );\n var bottomBS = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n extrudedHeight,\n bottomBoundingSphere\n );\n boundingSphere = BoundingSphere.union(topBS, bottomBS);\n } else {\n geometry = constructRectangle(rectangleGeometry, computedOptions);\n geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n geometry.attributes.position.values,\n surfaceHeight,\n ellipsoid,\n false\n );\n\n if (defined(rectangleGeometry._offsetAttribute)) {\n var length = geometry.attributes.position.values.length;\n var applyOffset = new Uint8Array(length / 3);\n offsetValue =\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n ? 0\n : 1;\n arrayFill(applyOffset, offsetValue);\n geometry.attributes.applyOffset = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1,\n values: applyOffset,\n });\n }\n\n boundingSphere = BoundingSphere.fromRectangle3D(\n rectangle,\n ellipsoid,\n surfaceHeight\n );\n }\n\n return new Geometry({\n attributes: geometry.attributes,\n indices: geometry.indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: boundingSphere,\n offsetAttribute: rectangleGeometry._offsetAttribute,\n });\n};\nexport default RectangleOutlineGeometry;\n","import defined from \"./defined.js\";\nimport getTimestamp from \"./getTimestamp.js\";\n\nvar implementation;\nif (typeof requestAnimationFrame !== \"undefined\") {\n implementation = requestAnimationFrame;\n}\n\n(function () {\n // look for vendor prefixed function\n if (!defined(implementation) && typeof window !== \"undefined\") {\n var vendors = [\"webkit\", \"moz\", \"ms\", \"o\"];\n var i = 0;\n var len = vendors.length;\n while (i < len && !defined(implementation)) {\n implementation = window[vendors[i] + \"RequestAnimationFrame\"];\n ++i;\n }\n }\n\n // build an implementation based on setTimeout\n if (!defined(implementation)) {\n var msPerFrame = 1000.0 / 60.0;\n var lastFrameTime = 0;\n implementation = function (callback) {\n var currentTime = getTimestamp();\n\n // schedule the callback to target 60fps, 16.7ms per frame,\n // accounting for the time taken by the callback\n var delay = Math.max(msPerFrame - (currentTime - lastFrameTime), 0);\n lastFrameTime = currentTime + delay;\n\n return setTimeout(function () {\n callback(lastFrameTime);\n }, delay);\n };\n }\n})();\n\n/**\n * A browser-independent function to request a new animation frame. This is used to create\n * an application's draw loop as shown in the example below.\n *\n * @function requestAnimationFrame\n *\n * @param {requestAnimationFrameCallback} callback The function to call when the next frame should be drawn.\n * @returns {Number} An ID that can be passed to {@link cancelAnimationFrame} to cancel the request.\n *\n *\n * @example\n * // Create a draw loop using requestAnimationFrame. The\n * // tick callback function is called for every animation frame.\n * function tick() {\n * scene.render();\n * Cesium.requestAnimationFrame(tick);\n * }\n * tick();\n *\n * @see {@link https://www.w3.org/TR/html51/webappapis.html#animation-frames|The Web API Animation Frames interface}\n */\nfunction requestAnimationFramePolyFill(callback) {\n // we need this extra wrapper function because the native requestAnimationFrame\n // functions must be invoked on the global scope (window), which is not the case\n // if invoked as Cesium.requestAnimationFrame(callback)\n return implementation(callback);\n}\n\n/**\n * A function that will be called when the next frame should be drawn.\n * @callback requestAnimationFrameCallback\n *\n * @param {Number} timestamp A timestamp for the frame, in milliseconds.\n */\nexport default requestAnimationFramePolyFill;\n","/**\n * Constants for identifying well-known reference frames.\n *\n * @enum {Number}\n */\nvar ReferenceFrame = {\n /**\n * The fixed frame.\n *\n * @type {Number}\n * @constant\n */\n FIXED: 0,\n\n /**\n * The inertial frame.\n *\n * @type {Number}\n * @constant\n */\n INERTIAL: 1,\n};\nexport default Object.freeze(ReferenceFrame);\n","import when from \"../ThirdParty/when.js\";\nimport Check from \"./Check.js\";\n\n/**\n * Initiates a terrain height query for an array of {@link Cartographic} positions by\n * requesting tiles from a terrain provider, sampling, and interpolating. The interpolation\n * matches the triangles used to render the terrain at the specified level. The query\n * happens asynchronously, so this function returns a promise that is resolved when\n * the query completes. Each point height is modified in place. If a height can not be\n * determined because no terrain data is available for the specified level at that location,\n * or another error occurs, the height is set to undefined. As is typical of the\n * {@link Cartographic} type, the supplied height is a height above the reference ellipsoid\n * (such as {@link Ellipsoid.WGS84}) rather than an altitude above mean sea level. In other\n * words, it will not necessarily be 0.0 if sampled in the ocean. This function needs the\n * terrain level of detail as input, if you need to get the altitude of the terrain as precisely\n * as possible (i.e. with maximum level of detail) use {@link sampleTerrainMostDetailed}.\n *\n * @function sampleTerrain\n *\n * @param {TerrainProvider} terrainProvider The terrain provider from which to query heights.\n * @param {Number} level The terrain level-of-detail from which to query terrain heights.\n * @param {Cartographic[]} positions The positions to update with terrain heights.\n * @returns {Promise.<Cartographic[]>} A promise that resolves to the provided list of positions when terrain the query has completed.\n *\n * @see sampleTerrainMostDetailed\n *\n * @example\n * // Query the terrain height of two Cartographic positions\n * var terrainProvider = Cesium.createWorldTerrain();\n * var positions = [\n * Cesium.Cartographic.fromDegrees(86.925145, 27.988257),\n * Cesium.Cartographic.fromDegrees(87.0, 28.0)\n * ];\n * var promise = Cesium.sampleTerrain(terrainProvider, 11, positions);\n * Cesium.when(promise, function(updatedPositions) {\n * // positions[0].height and positions[1].height have been updated.\n * // updatedPositions is just a reference to positions.\n * });\n */\nfunction sampleTerrain(terrainProvider, level, positions) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"terrainProvider\", terrainProvider);\n Check.typeOf.number(\"level\", level);\n Check.defined(\"positions\", positions);\n //>>includeEnd('debug');\n\n return terrainProvider.readyPromise.then(function () {\n return doSampling(terrainProvider, level, positions);\n });\n}\n\nfunction doSampling(terrainProvider, level, positions) {\n var tilingScheme = terrainProvider.tilingScheme;\n\n var i;\n\n // Sort points into a set of tiles\n var tileRequests = []; // Result will be an Array as it's easier to work with\n var tileRequestSet = {}; // A unique set\n for (i = 0; i < positions.length; ++i) {\n var xy = tilingScheme.positionToTileXY(positions[i], level);\n var key = xy.toString();\n\n if (!tileRequestSet.hasOwnProperty(key)) {\n // When tile is requested for the first time\n var value = {\n x: xy.x,\n y: xy.y,\n level: level,\n tilingScheme: tilingScheme,\n terrainProvider: terrainProvider,\n positions: [],\n };\n tileRequestSet[key] = value;\n tileRequests.push(value);\n }\n\n // Now append to array of points for the tile\n tileRequestSet[key].positions.push(positions[i]);\n }\n\n // Send request for each required tile\n var tilePromises = [];\n for (i = 0; i < tileRequests.length; ++i) {\n var tileRequest = tileRequests[i];\n var requestPromise = tileRequest.terrainProvider.requestTileGeometry(\n tileRequest.x,\n tileRequest.y,\n tileRequest.level\n );\n var tilePromise = requestPromise\n .then(createInterpolateFunction(tileRequest))\n .otherwise(createMarkFailedFunction(tileRequest));\n tilePromises.push(tilePromise);\n }\n\n return when.all(tilePromises, function () {\n return positions;\n });\n}\n\nfunction createInterpolateFunction(tileRequest) {\n var tilePositions = tileRequest.positions;\n var rectangle = tileRequest.tilingScheme.tileXYToRectangle(\n tileRequest.x,\n tileRequest.y,\n tileRequest.level\n );\n return function (terrainData) {\n for (var i = 0; i < tilePositions.length; ++i) {\n var position = tilePositions[i];\n position.height = terrainData.interpolateHeight(\n rectangle,\n position.longitude,\n position.latitude\n );\n }\n };\n}\n\nfunction createMarkFailedFunction(tileRequest) {\n var tilePositions = tileRequest.positions;\n return function () {\n for (var i = 0; i < tilePositions.length; ++i) {\n var position = tilePositions[i];\n position.height = undefined;\n }\n };\n}\nexport default sampleTerrain;\n","import when from \"../ThirdParty/when.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport sampleTerrain from \"./sampleTerrain.js\";\n\nvar scratchCartesian2 = new Cartesian2();\n\n/**\n * Initiates a sampleTerrain() request at the maximum available tile level for a terrain dataset.\n *\n * @function sampleTerrainMostDetailed\n *\n * @param {TerrainProvider} terrainProvider The terrain provider from which to query heights.\n * @param {Cartographic[]} positions The positions to update with terrain heights.\n * @returns {Promise.<Cartographic[]>} A promise that resolves to the provided list of positions when terrain the query has completed. This\n * promise will reject if the terrain provider's `availability` property is undefined.\n *\n * @example\n * // Query the terrain height of two Cartographic positions\n * var terrainProvider = Cesium.createWorldTerrain();\n * var positions = [\n * Cesium.Cartographic.fromDegrees(86.925145, 27.988257),\n * Cesium.Cartographic.fromDegrees(87.0, 28.0)\n * ];\n * var promise = Cesium.sampleTerrainMostDetailed(terrainProvider, positions);\n * Cesium.when(promise, function(updatedPositions) {\n * // positions[0].height and positions[1].height have been updated.\n * // updatedPositions is just a reference to positions.\n * });\n */\nfunction sampleTerrainMostDetailed(terrainProvider, positions) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(terrainProvider)) {\n throw new DeveloperError(\"terrainProvider is required.\");\n }\n if (!defined(positions)) {\n throw new DeveloperError(\"positions is required.\");\n }\n //>>includeEnd('debug');\n\n return terrainProvider.readyPromise.then(function () {\n var byLevel = [];\n var maxLevels = [];\n\n var availability = terrainProvider.availability;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(availability)) {\n throw new DeveloperError(\n \"sampleTerrainMostDetailed requires a terrain provider that has tile availability.\"\n );\n }\n //>>includeEnd('debug');\n\n var promises = [];\n for (var i = 0; i < positions.length; ++i) {\n var position = positions[i];\n var maxLevel = availability.computeMaximumLevelAtPosition(position);\n maxLevels[i] = maxLevel;\n if (maxLevel === 0) {\n // This is a special case where we have a parent terrain and we are requesting\n // heights from an area that isn't covered by the top level terrain at all.\n // This will essentially trigger the loading of the parent terrains root tile\n terrainProvider.tilingScheme.positionToTileXY(\n position,\n 1,\n scratchCartesian2\n );\n var promise = terrainProvider.loadTileDataAvailability(\n scratchCartesian2.x,\n scratchCartesian2.y,\n 1\n );\n if (defined(promise)) {\n promises.push(promise);\n }\n }\n\n var atLevel = byLevel[maxLevel];\n if (!defined(atLevel)) {\n byLevel[maxLevel] = atLevel = [];\n }\n atLevel.push(position);\n }\n\n return when\n .all(promises)\n .then(function () {\n return when.all(\n byLevel.map(function (positionsAtLevel, index) {\n if (defined(positionsAtLevel)) {\n return sampleTerrain(terrainProvider, index, positionsAtLevel);\n }\n })\n );\n })\n .then(function () {\n var changedPositions = [];\n for (var i = 0; i < positions.length; ++i) {\n var position = positions[i];\n var maxLevel = availability.computeMaximumLevelAtPosition(position);\n\n if (maxLevel !== maxLevels[i]) {\n // Now that we loaded the max availability, a higher level has become available\n changedPositions.push(position);\n }\n }\n\n if (changedPositions.length > 0) {\n return sampleTerrainMostDetailed(terrainProvider, changedPositions);\n }\n })\n .then(function () {\n return positions;\n });\n });\n}\nexport default sampleTerrainMostDetailed;\n","/**\n * This enumerated type is for classifying mouse events: down, up, click, double click, move and move while a button is held down.\n *\n * @enum {Number}\n */\nvar ScreenSpaceEventType = {\n /**\n * Represents a mouse left button down event.\n *\n * @type {Number}\n * @constant\n */\n LEFT_DOWN: 0,\n\n /**\n * Represents a mouse left button up event.\n *\n * @type {Number}\n * @constant\n */\n LEFT_UP: 1,\n\n /**\n * Represents a mouse left click event.\n *\n * @type {Number}\n * @constant\n */\n LEFT_CLICK: 2,\n\n /**\n * Represents a mouse left double click event.\n *\n * @type {Number}\n * @constant\n */\n LEFT_DOUBLE_CLICK: 3,\n\n /**\n * Represents a mouse left button down event.\n *\n * @type {Number}\n * @constant\n */\n RIGHT_DOWN: 5,\n\n /**\n * Represents a mouse right button up event.\n *\n * @type {Number}\n * @constant\n */\n RIGHT_UP: 6,\n\n /**\n * Represents a mouse right click event.\n *\n * @type {Number}\n * @constant\n */\n RIGHT_CLICK: 7,\n\n /**\n * Represents a mouse middle button down event.\n *\n * @type {Number}\n * @constant\n */\n MIDDLE_DOWN: 10,\n\n /**\n * Represents a mouse middle button up event.\n *\n * @type {Number}\n * @constant\n */\n MIDDLE_UP: 11,\n\n /**\n * Represents a mouse middle click event.\n *\n * @type {Number}\n * @constant\n */\n MIDDLE_CLICK: 12,\n\n /**\n * Represents a mouse move event.\n *\n * @type {Number}\n * @constant\n */\n MOUSE_MOVE: 15,\n\n /**\n * Represents a mouse wheel event.\n *\n * @type {Number}\n * @constant\n */\n WHEEL: 16,\n\n /**\n * Represents the start of a two-finger event on a touch surface.\n *\n * @type {Number}\n * @constant\n */\n PINCH_START: 17,\n\n /**\n * Represents the end of a two-finger event on a touch surface.\n *\n * @type {Number}\n * @constant\n */\n PINCH_END: 18,\n\n /**\n * Represents a change of a two-finger event on a touch surface.\n *\n * @type {Number}\n * @constant\n */\n PINCH_MOVE: 19,\n};\nexport default Object.freeze(ScreenSpaceEventType);\n","import AssociativeArray from \"./AssociativeArray.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport getTimestamp from \"./getTimestamp.js\";\nimport KeyboardEventModifier from \"./KeyboardEventModifier.js\";\nimport ScreenSpaceEventType from \"./ScreenSpaceEventType.js\";\n\nfunction getPosition(screenSpaceEventHandler, event, result) {\n var element = screenSpaceEventHandler._element;\n if (element === document) {\n result.x = event.clientX;\n result.y = event.clientY;\n return result;\n }\n\n var rect = element.getBoundingClientRect();\n result.x = event.clientX - rect.left;\n result.y = event.clientY - rect.top;\n return result;\n}\n\nfunction getInputEventKey(type, modifier) {\n var key = type;\n if (defined(modifier)) {\n key += \"+\" + modifier;\n }\n return key;\n}\n\nfunction getModifier(event) {\n if (event.shiftKey) {\n return KeyboardEventModifier.SHIFT;\n } else if (event.ctrlKey) {\n return KeyboardEventModifier.CTRL;\n } else if (event.altKey) {\n return KeyboardEventModifier.ALT;\n }\n\n return undefined;\n}\n\nvar MouseButton = {\n LEFT: 0,\n MIDDLE: 1,\n RIGHT: 2,\n};\n\nfunction registerListener(screenSpaceEventHandler, domType, element, callback) {\n function listener(e) {\n callback(screenSpaceEventHandler, e);\n }\n\n if (FeatureDetection.isInternetExplorer()) {\n element.addEventListener(domType, listener, false);\n } else {\n element.addEventListener(domType, listener, {\n capture: false,\n passive: false,\n });\n }\n\n screenSpaceEventHandler._removalFunctions.push(function () {\n element.removeEventListener(domType, listener, false);\n });\n}\n\nfunction registerListeners(screenSpaceEventHandler) {\n var element = screenSpaceEventHandler._element;\n\n // some listeners may be registered on the document, so we still get events even after\n // leaving the bounds of element.\n // this is affected by the existence of an undocumented disableRootEvents property on element.\n var alternateElement = !defined(element.disableRootEvents)\n ? document\n : element;\n\n if (FeatureDetection.supportsPointerEvents()) {\n registerListener(\n screenSpaceEventHandler,\n \"pointerdown\",\n element,\n handlePointerDown\n );\n registerListener(\n screenSpaceEventHandler,\n \"pointerup\",\n element,\n handlePointerUp\n );\n registerListener(\n screenSpaceEventHandler,\n \"pointermove\",\n element,\n handlePointerMove\n );\n registerListener(\n screenSpaceEventHandler,\n \"pointercancel\",\n element,\n handlePointerUp\n );\n } else {\n registerListener(\n screenSpaceEventHandler,\n \"mousedown\",\n element,\n handleMouseDown\n );\n registerListener(\n screenSpaceEventHandler,\n \"mouseup\",\n alternateElement,\n handleMouseUp\n );\n registerListener(\n screenSpaceEventHandler,\n \"mousemove\",\n alternateElement,\n handleMouseMove\n );\n registerListener(\n screenSpaceEventHandler,\n \"touchstart\",\n element,\n handleTouchStart\n );\n registerListener(\n screenSpaceEventHandler,\n \"touchend\",\n alternateElement,\n handleTouchEnd\n );\n registerListener(\n screenSpaceEventHandler,\n \"touchmove\",\n alternateElement,\n handleTouchMove\n );\n registerListener(\n screenSpaceEventHandler,\n \"touchcancel\",\n alternateElement,\n handleTouchEnd\n );\n }\n\n registerListener(\n screenSpaceEventHandler,\n \"dblclick\",\n element,\n handleDblClick\n );\n\n // detect available wheel event\n var wheelEvent;\n if (\"onwheel\" in element) {\n // spec event type\n wheelEvent = \"wheel\";\n } else if (document.onmousewheel !== undefined) {\n // legacy event type\n wheelEvent = \"mousewheel\";\n } else {\n // older Firefox\n wheelEvent = \"DOMMouseScroll\";\n }\n\n registerListener(screenSpaceEventHandler, wheelEvent, element, handleWheel);\n}\n\nfunction unregisterListeners(screenSpaceEventHandler) {\n var removalFunctions = screenSpaceEventHandler._removalFunctions;\n for (var i = 0; i < removalFunctions.length; ++i) {\n removalFunctions[i]();\n }\n}\n\nvar mouseDownEvent = {\n position: new Cartesian2(),\n};\n\nfunction gotTouchEvent(screenSpaceEventHandler) {\n screenSpaceEventHandler._lastSeenTouchEvent = getTimestamp();\n}\n\nfunction canProcessMouseEvent(screenSpaceEventHandler) {\n return (\n getTimestamp() - screenSpaceEventHandler._lastSeenTouchEvent >\n ScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds\n );\n}\n\nfunction checkPixelTolerance(startPosition, endPosition, pixelTolerance) {\n var xDiff = startPosition.x - endPosition.x;\n var yDiff = startPosition.y - endPosition.y;\n var totalPixels = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n\n return totalPixels < pixelTolerance;\n}\n\nfunction handleMouseDown(screenSpaceEventHandler, event) {\n if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n return;\n }\n\n var button = event.button;\n screenSpaceEventHandler._buttonDown[button] = true;\n\n var screenSpaceEventType;\n if (button === MouseButton.LEFT) {\n screenSpaceEventType = ScreenSpaceEventType.LEFT_DOWN;\n } else if (button === MouseButton.MIDDLE) {\n screenSpaceEventType = ScreenSpaceEventType.MIDDLE_DOWN;\n } else if (button === MouseButton.RIGHT) {\n screenSpaceEventType = ScreenSpaceEventType.RIGHT_DOWN;\n } else {\n return;\n }\n\n var position = getPosition(\n screenSpaceEventHandler,\n event,\n screenSpaceEventHandler._primaryPosition\n );\n Cartesian2.clone(position, screenSpaceEventHandler._primaryStartPosition);\n Cartesian2.clone(position, screenSpaceEventHandler._primaryPreviousPosition);\n\n var modifier = getModifier(event);\n\n var action = screenSpaceEventHandler.getInputAction(\n screenSpaceEventType,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(position, mouseDownEvent.position);\n\n action(mouseDownEvent);\n\n event.preventDefault();\n }\n}\n\nvar mouseUpEvent = {\n position: new Cartesian2(),\n};\nvar mouseClickEvent = {\n position: new Cartesian2(),\n};\n\nfunction cancelMouseEvent(\n screenSpaceEventHandler,\n screenSpaceEventType,\n clickScreenSpaceEventType,\n event\n) {\n var modifier = getModifier(event);\n\n var action = screenSpaceEventHandler.getInputAction(\n screenSpaceEventType,\n modifier\n );\n var clickAction = screenSpaceEventHandler.getInputAction(\n clickScreenSpaceEventType,\n modifier\n );\n\n if (defined(action) || defined(clickAction)) {\n var position = getPosition(\n screenSpaceEventHandler,\n event,\n screenSpaceEventHandler._primaryPosition\n );\n\n if (defined(action)) {\n Cartesian2.clone(position, mouseUpEvent.position);\n\n action(mouseUpEvent);\n }\n\n if (defined(clickAction)) {\n var startPosition = screenSpaceEventHandler._primaryStartPosition;\n if (\n checkPixelTolerance(\n startPosition,\n position,\n screenSpaceEventHandler._clickPixelTolerance\n )\n ) {\n Cartesian2.clone(position, mouseClickEvent.position);\n\n clickAction(mouseClickEvent);\n }\n }\n }\n}\n\nfunction handleMouseUp(screenSpaceEventHandler, event) {\n if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n return;\n }\n\n var button = event.button;\n\n if (\n button !== MouseButton.LEFT &&\n button !== MouseButton.MIDDLE &&\n button !== MouseButton.RIGHT\n ) {\n return;\n }\n\n if (screenSpaceEventHandler._buttonDown[MouseButton.LEFT]) {\n cancelMouseEvent(\n screenSpaceEventHandler,\n ScreenSpaceEventType.LEFT_UP,\n ScreenSpaceEventType.LEFT_CLICK,\n event\n );\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = false;\n }\n if (screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE]) {\n cancelMouseEvent(\n screenSpaceEventHandler,\n ScreenSpaceEventType.MIDDLE_UP,\n ScreenSpaceEventType.MIDDLE_CLICK,\n event\n );\n screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE] = false;\n }\n if (screenSpaceEventHandler._buttonDown[MouseButton.RIGHT]) {\n cancelMouseEvent(\n screenSpaceEventHandler,\n ScreenSpaceEventType.RIGHT_UP,\n ScreenSpaceEventType.RIGHT_CLICK,\n event\n );\n screenSpaceEventHandler._buttonDown[MouseButton.RIGHT] = false;\n }\n}\n\nvar mouseMoveEvent = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n};\n\nfunction handleMouseMove(screenSpaceEventHandler, event) {\n if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n return;\n }\n\n var modifier = getModifier(event);\n\n var position = getPosition(\n screenSpaceEventHandler,\n event,\n screenSpaceEventHandler._primaryPosition\n );\n var previousPosition = screenSpaceEventHandler._primaryPreviousPosition;\n\n var action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.MOUSE_MOVE,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(previousPosition, mouseMoveEvent.startPosition);\n Cartesian2.clone(position, mouseMoveEvent.endPosition);\n\n action(mouseMoveEvent);\n }\n\n Cartesian2.clone(position, previousPosition);\n\n if (\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT] ||\n screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE] ||\n screenSpaceEventHandler._buttonDown[MouseButton.RIGHT]\n ) {\n event.preventDefault();\n }\n}\n\nvar mouseDblClickEvent = {\n position: new Cartesian2(),\n};\n\nfunction handleDblClick(screenSpaceEventHandler, event) {\n var button = event.button;\n\n var screenSpaceEventType;\n if (button === MouseButton.LEFT) {\n screenSpaceEventType = ScreenSpaceEventType.LEFT_DOUBLE_CLICK;\n } else {\n return;\n }\n\n var modifier = getModifier(event);\n\n var action = screenSpaceEventHandler.getInputAction(\n screenSpaceEventType,\n modifier\n );\n\n if (defined(action)) {\n getPosition(screenSpaceEventHandler, event, mouseDblClickEvent.position);\n\n action(mouseDblClickEvent);\n }\n}\n\nfunction handleWheel(screenSpaceEventHandler, event) {\n // currently this event exposes the delta value in terms of\n // the obsolete mousewheel event type. so, for now, we adapt the other\n // values to that scheme.\n var delta;\n\n // standard wheel event uses deltaY. sign is opposite wheelDelta.\n // deltaMode indicates what unit it is in.\n if (defined(event.deltaY)) {\n var deltaMode = event.deltaMode;\n if (deltaMode === event.DOM_DELTA_PIXEL) {\n delta = -event.deltaY;\n } else if (deltaMode === event.DOM_DELTA_LINE) {\n delta = -event.deltaY * 40;\n } else {\n // DOM_DELTA_PAGE\n delta = -event.deltaY * 120;\n }\n } else if (event.detail > 0) {\n // old Firefox versions use event.detail to count the number of clicks. The sign\n // of the integer is the direction the wheel is scrolled.\n delta = event.detail * -120;\n } else {\n delta = event.wheelDelta;\n }\n\n if (!defined(delta)) {\n return;\n }\n\n var modifier = getModifier(event);\n var action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.WHEEL,\n modifier\n );\n\n if (defined(action)) {\n action(delta);\n\n event.preventDefault();\n }\n}\n\nfunction handleTouchStart(screenSpaceEventHandler, event) {\n gotTouchEvent(screenSpaceEventHandler);\n\n var changedTouches = event.changedTouches;\n\n var i;\n var length = changedTouches.length;\n var touch;\n var identifier;\n var positions = screenSpaceEventHandler._positions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n positions.set(\n identifier,\n getPosition(screenSpaceEventHandler, touch, new Cartesian2())\n );\n }\n\n fireTouchEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n previousPositions.set(\n identifier,\n Cartesian2.clone(positions.get(identifier))\n );\n }\n}\n\nfunction handleTouchEnd(screenSpaceEventHandler, event) {\n gotTouchEvent(screenSpaceEventHandler);\n\n var changedTouches = event.changedTouches;\n\n var i;\n var length = changedTouches.length;\n var touch;\n var identifier;\n var positions = screenSpaceEventHandler._positions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n positions.remove(identifier);\n }\n\n fireTouchEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n previousPositions.remove(identifier);\n }\n}\n\nvar touchStartEvent = {\n position: new Cartesian2(),\n};\nvar touch2StartEvent = {\n position1: new Cartesian2(),\n position2: new Cartesian2(),\n};\nvar touchEndEvent = {\n position: new Cartesian2(),\n};\nvar touchClickEvent = {\n position: new Cartesian2(),\n};\nvar touchHoldEvent = {\n position: new Cartesian2(),\n};\n\nfunction fireTouchEvents(screenSpaceEventHandler, event) {\n var modifier = getModifier(event);\n var positions = screenSpaceEventHandler._positions;\n var numberOfTouches = positions.length;\n var action;\n var clickAction;\n var pinching = screenSpaceEventHandler._isPinching;\n\n if (\n numberOfTouches !== 1 &&\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT]\n ) {\n // transitioning from single touch, trigger UP and might trigger CLICK\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = false;\n\n if (defined(screenSpaceEventHandler._touchHoldTimer)) {\n clearTimeout(screenSpaceEventHandler._touchHoldTimer);\n screenSpaceEventHandler._touchHoldTimer = undefined;\n }\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.LEFT_UP,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(\n screenSpaceEventHandler._primaryPosition,\n touchEndEvent.position\n );\n\n action(touchEndEvent);\n }\n\n if (numberOfTouches === 0 && !screenSpaceEventHandler._isTouchHolding) {\n // releasing single touch, check for CLICK\n clickAction = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.LEFT_CLICK,\n modifier\n );\n\n if (defined(clickAction)) {\n var startPosition = screenSpaceEventHandler._primaryStartPosition;\n var endPosition = screenSpaceEventHandler._previousPositions.values[0];\n if (\n checkPixelTolerance(\n startPosition,\n endPosition,\n screenSpaceEventHandler._clickPixelTolerance\n )\n ) {\n Cartesian2.clone(\n screenSpaceEventHandler._primaryPosition,\n touchClickEvent.position\n );\n\n clickAction(touchClickEvent);\n }\n }\n }\n\n screenSpaceEventHandler._isTouchHolding = false;\n\n // Otherwise don't trigger CLICK, because we are adding more touches.\n }\n\n if (numberOfTouches === 0 && pinching) {\n // transitioning from pinch, trigger PINCH_END\n screenSpaceEventHandler._isPinching = false;\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.PINCH_END,\n modifier\n );\n\n if (defined(action)) {\n action();\n }\n }\n\n if (numberOfTouches === 1 && !pinching) {\n // transitioning to single touch, trigger DOWN\n var position = positions.values[0];\n Cartesian2.clone(position, screenSpaceEventHandler._primaryPosition);\n Cartesian2.clone(position, screenSpaceEventHandler._primaryStartPosition);\n Cartesian2.clone(\n position,\n screenSpaceEventHandler._primaryPreviousPosition\n );\n\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = true;\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.LEFT_DOWN,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(position, touchStartEvent.position);\n\n action(touchStartEvent);\n }\n\n screenSpaceEventHandler._touchHoldTimer = setTimeout(function () {\n if (!screenSpaceEventHandler.isDestroyed()) {\n screenSpaceEventHandler._touchHoldTimer = undefined;\n screenSpaceEventHandler._isTouchHolding = true;\n\n clickAction = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.RIGHT_CLICK,\n modifier\n );\n\n if (defined(clickAction)) {\n var startPosition = screenSpaceEventHandler._primaryStartPosition;\n var endPosition =\n screenSpaceEventHandler._previousPositions.values[0];\n if (\n checkPixelTolerance(\n startPosition,\n endPosition,\n screenSpaceEventHandler._holdPixelTolerance\n )\n ) {\n Cartesian2.clone(\n screenSpaceEventHandler._primaryPosition,\n touchHoldEvent.position\n );\n\n clickAction(touchHoldEvent);\n }\n }\n }\n }, ScreenSpaceEventHandler.touchHoldDelayMilliseconds);\n\n event.preventDefault();\n }\n\n if (numberOfTouches === 2 && !pinching) {\n // transitioning to pinch, trigger PINCH_START\n screenSpaceEventHandler._isPinching = true;\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.PINCH_START,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(positions.values[0], touch2StartEvent.position1);\n Cartesian2.clone(positions.values[1], touch2StartEvent.position2);\n\n action(touch2StartEvent);\n\n // Touch-enabled devices, in particular iOS can have many default behaviours for\n // \"pinch\" events, which can still be executed unless we prevent them here.\n event.preventDefault();\n }\n }\n}\n\nfunction handleTouchMove(screenSpaceEventHandler, event) {\n gotTouchEvent(screenSpaceEventHandler);\n\n var changedTouches = event.changedTouches;\n\n var i;\n var length = changedTouches.length;\n var touch;\n var identifier;\n var positions = screenSpaceEventHandler._positions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n var position = positions.get(identifier);\n if (defined(position)) {\n getPosition(screenSpaceEventHandler, touch, position);\n }\n }\n\n fireTouchMoveEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n\n for (i = 0; i < length; ++i) {\n touch = changedTouches[i];\n identifier = touch.identifier;\n Cartesian2.clone(\n positions.get(identifier),\n previousPositions.get(identifier)\n );\n }\n}\n\nvar touchMoveEvent = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n};\nvar touchPinchMovementEvent = {\n distance: {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n },\n angleAndHeight: {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n },\n};\n\nfunction fireTouchMoveEvents(screenSpaceEventHandler, event) {\n var modifier = getModifier(event);\n var positions = screenSpaceEventHandler._positions;\n var previousPositions = screenSpaceEventHandler._previousPositions;\n var numberOfTouches = positions.length;\n var action;\n\n if (\n numberOfTouches === 1 &&\n screenSpaceEventHandler._buttonDown[MouseButton.LEFT]\n ) {\n // moving single touch\n var position = positions.values[0];\n Cartesian2.clone(position, screenSpaceEventHandler._primaryPosition);\n\n var previousPosition = screenSpaceEventHandler._primaryPreviousPosition;\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.MOUSE_MOVE,\n modifier\n );\n\n if (defined(action)) {\n Cartesian2.clone(previousPosition, touchMoveEvent.startPosition);\n Cartesian2.clone(position, touchMoveEvent.endPosition);\n\n action(touchMoveEvent);\n }\n\n Cartesian2.clone(position, previousPosition);\n\n event.preventDefault();\n } else if (numberOfTouches === 2 && screenSpaceEventHandler._isPinching) {\n // moving pinch\n\n action = screenSpaceEventHandler.getInputAction(\n ScreenSpaceEventType.PINCH_MOVE,\n modifier\n );\n if (defined(action)) {\n var position1 = positions.values[0];\n var position2 = positions.values[1];\n var previousPosition1 = previousPositions.values[0];\n var previousPosition2 = previousPositions.values[1];\n\n var dX = position2.x - position1.x;\n var dY = position2.y - position1.y;\n var dist = Math.sqrt(dX * dX + dY * dY) * 0.25;\n\n var prevDX = previousPosition2.x - previousPosition1.x;\n var prevDY = previousPosition2.y - previousPosition1.y;\n var prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY) * 0.25;\n\n var cY = (position2.y + position1.y) * 0.125;\n var prevCY = (previousPosition2.y + previousPosition1.y) * 0.125;\n var angle = Math.atan2(dY, dX);\n var prevAngle = Math.atan2(prevDY, prevDX);\n\n Cartesian2.fromElements(\n 0.0,\n prevDist,\n touchPinchMovementEvent.distance.startPosition\n );\n Cartesian2.fromElements(\n 0.0,\n dist,\n touchPinchMovementEvent.distance.endPosition\n );\n\n Cartesian2.fromElements(\n prevAngle,\n prevCY,\n touchPinchMovementEvent.angleAndHeight.startPosition\n );\n Cartesian2.fromElements(\n angle,\n cY,\n touchPinchMovementEvent.angleAndHeight.endPosition\n );\n\n action(touchPinchMovementEvent);\n }\n }\n}\n\nfunction handlePointerDown(screenSpaceEventHandler, event) {\n event.target.setPointerCapture(event.pointerId);\n\n if (event.pointerType === \"touch\") {\n var positions = screenSpaceEventHandler._positions;\n\n var identifier = event.pointerId;\n positions.set(\n identifier,\n getPosition(screenSpaceEventHandler, event, new Cartesian2())\n );\n\n fireTouchEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n previousPositions.set(\n identifier,\n Cartesian2.clone(positions.get(identifier))\n );\n } else {\n handleMouseDown(screenSpaceEventHandler, event);\n }\n}\n\nfunction handlePointerUp(screenSpaceEventHandler, event) {\n if (event.pointerType === \"touch\") {\n var positions = screenSpaceEventHandler._positions;\n\n var identifier = event.pointerId;\n positions.remove(identifier);\n\n fireTouchEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n previousPositions.remove(identifier);\n } else {\n handleMouseUp(screenSpaceEventHandler, event);\n }\n}\n\nfunction handlePointerMove(screenSpaceEventHandler, event) {\n if (event.pointerType === \"touch\") {\n var positions = screenSpaceEventHandler._positions;\n\n var identifier = event.pointerId;\n var position = positions.get(identifier);\n if (!defined(position)) {\n return;\n }\n\n getPosition(screenSpaceEventHandler, event, position);\n fireTouchMoveEvents(screenSpaceEventHandler, event);\n\n var previousPositions = screenSpaceEventHandler._previousPositions;\n Cartesian2.clone(\n positions.get(identifier),\n previousPositions.get(identifier)\n );\n } else {\n handleMouseMove(screenSpaceEventHandler, event);\n }\n}\n\n/**\n * Handles user input events. Custom functions can be added to be executed on\n * when the user enters input.\n *\n * @alias ScreenSpaceEventHandler\n *\n * @param {HTMLCanvasElement} [element=document] The element to add events to.\n *\n * @constructor\n */\nfunction ScreenSpaceEventHandler(element) {\n this._inputEvents = {};\n this._buttonDown = {\n LEFT: false,\n MIDDLE: false,\n RIGHT: false,\n };\n this._isPinching = false;\n this._isTouchHolding = false;\n this._lastSeenTouchEvent = -ScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds;\n\n this._primaryStartPosition = new Cartesian2();\n this._primaryPosition = new Cartesian2();\n this._primaryPreviousPosition = new Cartesian2();\n\n this._positions = new AssociativeArray();\n this._previousPositions = new AssociativeArray();\n\n this._removalFunctions = [];\n\n this._touchHoldTimer = undefined;\n\n // TODO: Revisit when doing mobile development. May need to be configurable\n // or determined based on the platform?\n this._clickPixelTolerance = 5;\n this._holdPixelTolerance = 25;\n\n this._element = defaultValue(element, document);\n\n registerListeners(this);\n}\n\n/**\n * Set a function to be executed on an input event.\n *\n * @param {Function} action Function to be executed when the input event occurs.\n * @param {Number} type The ScreenSpaceEventType of input event.\n * @param {Number} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @see ScreenSpaceEventHandler#getInputAction\n * @see ScreenSpaceEventHandler#removeInputAction\n */\nScreenSpaceEventHandler.prototype.setInputAction = function (\n action,\n type,\n modifier\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(action)) {\n throw new DeveloperError(\"action is required.\");\n }\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getInputEventKey(type, modifier);\n this._inputEvents[key] = action;\n};\n\n/**\n * Returns the function to be executed on an input event.\n *\n * @param {Number} type The ScreenSpaceEventType of input event.\n * @param {Number} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @returns {Function} The function to be executed on an input event.\n *\n * @see ScreenSpaceEventHandler#setInputAction\n * @see ScreenSpaceEventHandler#removeInputAction\n */\nScreenSpaceEventHandler.prototype.getInputAction = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getInputEventKey(type, modifier);\n return this._inputEvents[key];\n};\n\n/**\n * Removes the function to be executed on an input event.\n *\n * @param {Number} type The ScreenSpaceEventType of input event.\n * @param {Number} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @see ScreenSpaceEventHandler#getInputAction\n * @see ScreenSpaceEventHandler#setInputAction\n */\nScreenSpaceEventHandler.prototype.removeInputAction = function (\n type,\n modifier\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getInputEventKey(type, modifier);\n delete this._inputEvents[key];\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ScreenSpaceEventHandler#destroy\n */\nScreenSpaceEventHandler.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * handler = handler && handler.destroy();\n *\n * @see ScreenSpaceEventHandler#isDestroyed\n */\nScreenSpaceEventHandler.prototype.destroy = function () {\n unregisterListeners(this);\n\n return destroyObject(this);\n};\n\n/**\n * The amount of time, in milliseconds, that mouse events will be disabled after\n * receiving any touch events, such that any emulated mouse events will be ignored.\n * @type {Number}\n * @default 800\n */\nScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds = 800;\n\n/**\n * The amount of time, in milliseconds, before a touch on the screen becomes a\n * touch and hold.\n * @type {Number}\n * @default 1500\n */\nScreenSpaceEventHandler.touchHoldDelayMilliseconds = 1500;\nexport default ScreenSpaceEventHandler;\n","import ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines if the geometry instance will be shown.\n *\n * @alias ShowGeometryInstanceAttribute\n * @constructor\n *\n * @param {Boolean} [show=true] Determines if the geometry instance will be shown.\n *\n *\n * @example\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.BoxGeometry({\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0)\n * }),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n * id : 'box',\n * attributes : {\n * show : new Cesium.ShowGeometryInstanceAttribute(false)\n * }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction ShowGeometryInstanceAttribute(show) {\n show = defaultValue(show, true);\n\n /**\n * The values for the attributes stored in a typed array.\n *\n * @type Uint8Array\n *\n * @default [1.0]\n */\n this.value = ShowGeometryInstanceAttribute.toValue(show);\n}\n\nObject.defineProperties(ShowGeometryInstanceAttribute.prototype, {\n /**\n * The datatype of each component in the attribute, e.g., individual elements in\n * {@link ColorGeometryInstanceAttribute#value}.\n *\n * @memberof ShowGeometryInstanceAttribute.prototype\n *\n * @type {ComponentDatatype}\n * @readonly\n *\n * @default {@link ComponentDatatype.UNSIGNED_BYTE}\n */\n componentDatatype: {\n get: function () {\n return ComponentDatatype.UNSIGNED_BYTE;\n },\n },\n\n /**\n * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}.\n *\n * @memberof ShowGeometryInstanceAttribute.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default 1\n */\n componentsPerAttribute: {\n get: function () {\n return 1;\n },\n },\n\n /**\n * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n *\n * @memberof ShowGeometryInstanceAttribute.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n normalize: {\n get: function () {\n return false;\n },\n },\n});\n\n/**\n * Converts a boolean show to a typed array that can be used to assign a show attribute.\n *\n * @param {Boolean} show The show value.\n * @param {Uint8Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Uint8Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true, attributes.show);\n */\nShowGeometryInstanceAttribute.toValue = function (show, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(show)) {\n throw new DeveloperError(\"show is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Uint8Array([show]);\n }\n result[0] = show;\n return result;\n};\nexport default ShowGeometryInstanceAttribute;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * Contains functions for finding the Cartesian coordinates of the sun and the moon in the\n * Earth-centered inertial frame.\n *\n * @namespace Simon1994PlanetaryPositions\n */\nvar Simon1994PlanetaryPositions = {};\n\nfunction computeTdbMinusTtSpice(daysSinceJ2000InTerrestrialTime) {\n /* STK Comments ------------------------------------------------------\n * This function uses constants designed to be consistent with\n * the SPICE Toolkit from JPL version N0051 (unitim.c)\n * M0 = 6.239996\n * M0Dot = 1.99096871e-7 rad/s = 0.01720197 rad/d\n * EARTH_ECC = 1.671e-2\n * TDB_AMPL = 1.657e-3 secs\n *--------------------------------------------------------------------*/\n\n //* Values taken as specified in STK Comments except: 0.01720197 rad/day = 1.99096871e-7 rad/sec\n //* Here we use the more precise value taken from the SPICE value 1.99096871e-7 rad/sec converted to rad/day\n //* All other constants are consistent with the SPICE implementation of the TDB conversion\n //* except where we treat the independent time parameter to be in TT instead of TDB.\n //* This is an approximation made to facilitate performance due to the higher prevalance of\n //* the TT2TDB conversion over TDB2TT in order to avoid having to iterate when converting to TDB for the JPL ephemeris.\n //* Days are used instead of seconds to provide a slight improvement in numerical precision.\n\n //* For more information see:\n //* http://www.cv.nrao.edu/~rfisher/Ephemerides/times.html#TDB\n //* ftp://ssd.jpl.nasa.gov/pub/eph/planets/ioms/ExplSupplChap8.pdf\n\n var g = 6.239996 + 0.0172019696544 * daysSinceJ2000InTerrestrialTime;\n return 1.657e-3 * Math.sin(g + 1.671e-2 * Math.sin(g));\n}\n\nvar TdtMinusTai = 32.184;\nvar J2000d = 2451545;\nfunction taiToTdb(date, result) {\n //Converts TAI to TT\n result = JulianDate.addSeconds(date, TdtMinusTai, result);\n\n //Converts TT to TDB\n var days = JulianDate.totalDays(result) - J2000d;\n result = JulianDate.addSeconds(result, computeTdbMinusTtSpice(days), result);\n\n return result;\n}\n\nvar epoch = new JulianDate(2451545, 0, TimeStandard.TAI); //Actually TDB (not TAI)\nvar MetersPerKilometer = 1000.0;\nvar RadiansPerDegree = CesiumMath.RADIANS_PER_DEGREE;\nvar RadiansPerArcSecond = CesiumMath.RADIANS_PER_ARCSECOND;\nvar MetersPerAstronomicalUnit = 1.4959787e11; // IAU 1976 value\n\nvar perifocalToEquatorial = new Matrix3();\nfunction elementsToCartesian(\n semimajorAxis,\n eccentricity,\n inclination,\n longitudeOfPerigee,\n longitudeOfNode,\n meanLongitude,\n result\n) {\n if (inclination < 0.0) {\n inclination = -inclination;\n longitudeOfNode += CesiumMath.PI;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (inclination < 0 || inclination > CesiumMath.PI) {\n throw new DeveloperError(\n \"The inclination is out of range. Inclination must be greater than or equal to zero and less than or equal to Pi radians.\"\n );\n }\n //>>includeEnd('debug')\n\n var radiusOfPeriapsis = semimajorAxis * (1.0 - eccentricity);\n var argumentOfPeriapsis = longitudeOfPerigee - longitudeOfNode;\n var rightAscensionOfAscendingNode = longitudeOfNode;\n var trueAnomaly = meanAnomalyToTrueAnomaly(\n meanLongitude - longitudeOfPerigee,\n eccentricity\n );\n var type = chooseOrbit(eccentricity, 0.0);\n\n //>>includeStart('debug', pragmas.debug);\n if (\n type === \"Hyperbolic\" &&\n Math.abs(CesiumMath.negativePiToPi(trueAnomaly)) >=\n Math.acos(-1.0 / eccentricity)\n ) {\n throw new DeveloperError(\n \"The true anomaly of the hyperbolic orbit lies outside of the bounds of the hyperbola.\"\n );\n }\n //>>includeEnd('debug')\n\n perifocalToCartesianMatrix(\n argumentOfPeriapsis,\n inclination,\n rightAscensionOfAscendingNode,\n perifocalToEquatorial\n );\n var semilatus = radiusOfPeriapsis * (1.0 + eccentricity);\n var costheta = Math.cos(trueAnomaly);\n var sintheta = Math.sin(trueAnomaly);\n\n var denom = 1.0 + eccentricity * costheta;\n\n //>>includeStart('debug', pragmas.debug);\n if (denom <= CesiumMath.Epsilon10) {\n throw new DeveloperError(\"elements cannot be converted to cartesian\");\n }\n //>>includeEnd('debug')\n\n var radius = semilatus / denom;\n if (!defined(result)) {\n result = new Cartesian3(radius * costheta, radius * sintheta, 0.0);\n } else {\n result.x = radius * costheta;\n result.y = radius * sintheta;\n result.z = 0.0;\n }\n\n return Matrix3.multiplyByVector(perifocalToEquatorial, result, result);\n}\n\nfunction chooseOrbit(eccentricity, tolerance) {\n //>>includeStart('debug', pragmas.debug);\n if (eccentricity < 0) {\n throw new DeveloperError(\"eccentricity cannot be negative.\");\n }\n //>>includeEnd('debug')\n\n if (eccentricity <= tolerance) {\n return \"Circular\";\n } else if (eccentricity < 1.0 - tolerance) {\n return \"Elliptical\";\n } else if (eccentricity <= 1.0 + tolerance) {\n return \"Parabolic\";\n }\n return \"Hyperbolic\";\n}\n\n// Calculates the true anomaly given the mean anomaly and the eccentricity.\nfunction meanAnomalyToTrueAnomaly(meanAnomaly, eccentricity) {\n //>>includeStart('debug', pragmas.debug);\n if (eccentricity < 0.0 || eccentricity >= 1.0) {\n throw new DeveloperError(\"eccentricity out of range.\");\n }\n //>>includeEnd('debug')\n\n var eccentricAnomaly = meanAnomalyToEccentricAnomaly(\n meanAnomaly,\n eccentricity\n );\n return eccentricAnomalyToTrueAnomaly(eccentricAnomaly, eccentricity);\n}\n\nvar maxIterationCount = 50;\nvar keplerEqConvergence = CesiumMath.EPSILON8;\n// Calculates the eccentric anomaly given the mean anomaly and the eccentricity.\nfunction meanAnomalyToEccentricAnomaly(meanAnomaly, eccentricity) {\n //>>includeStart('debug', pragmas.debug);\n if (eccentricity < 0.0 || eccentricity >= 1.0) {\n throw new DeveloperError(\"eccentricity out of range.\");\n }\n //>>includeEnd('debug')\n\n var revs = Math.floor(meanAnomaly / CesiumMath.TWO_PI);\n\n // Find angle in current revolution\n meanAnomaly -= revs * CesiumMath.TWO_PI;\n\n // calculate starting value for iteration sequence\n var iterationValue =\n meanAnomaly +\n (eccentricity * Math.sin(meanAnomaly)) /\n (1.0 - Math.sin(meanAnomaly + eccentricity) + Math.sin(meanAnomaly));\n\n // Perform Newton-Raphson iteration on Kepler's equation\n var eccentricAnomaly = Number.MAX_VALUE;\n\n var count;\n for (\n count = 0;\n count < maxIterationCount &&\n Math.abs(eccentricAnomaly - iterationValue) > keplerEqConvergence;\n ++count\n ) {\n eccentricAnomaly = iterationValue;\n var NRfunction =\n eccentricAnomaly -\n eccentricity * Math.sin(eccentricAnomaly) -\n meanAnomaly;\n var dNRfunction = 1 - eccentricity * Math.cos(eccentricAnomaly);\n iterationValue = eccentricAnomaly - NRfunction / dNRfunction;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (count >= maxIterationCount) {\n throw new DeveloperError(\"Kepler equation did not converge\");\n // STK Components uses a numerical method to find the eccentric anomaly in the case that Kepler's\n // equation does not converge. We don't expect that to ever be necessary for the reasonable orbits used here.\n }\n //>>includeEnd('debug')\n\n eccentricAnomaly = iterationValue + revs * CesiumMath.TWO_PI;\n return eccentricAnomaly;\n}\n\n// Calculates the true anomaly given the eccentric anomaly and the eccentricity.\nfunction eccentricAnomalyToTrueAnomaly(eccentricAnomaly, eccentricity) {\n //>>includeStart('debug', pragmas.debug);\n if (eccentricity < 0.0 || eccentricity >= 1.0) {\n throw new DeveloperError(\"eccentricity out of range.\");\n }\n //>>includeEnd('debug')\n\n // Calculate the number of previous revolutions\n var revs = Math.floor(eccentricAnomaly / CesiumMath.TWO_PI);\n\n // Find angle in current revolution\n eccentricAnomaly -= revs * CesiumMath.TWO_PI;\n\n // Calculate true anomaly from eccentric anomaly\n var trueAnomalyX = Math.cos(eccentricAnomaly) - eccentricity;\n var trueAnomalyY =\n Math.sin(eccentricAnomaly) * Math.sqrt(1 - eccentricity * eccentricity);\n\n var trueAnomaly = Math.atan2(trueAnomalyY, trueAnomalyX);\n\n // Ensure the correct quadrant\n trueAnomaly = CesiumMath.zeroToTwoPi(trueAnomaly);\n if (eccentricAnomaly < 0) {\n trueAnomaly -= CesiumMath.TWO_PI;\n }\n\n // Add on previous revolutions\n trueAnomaly += revs * CesiumMath.TWO_PI;\n\n return trueAnomaly;\n}\n\n// Calculates the transformation matrix to convert from the perifocal (PQW) coordinate\n// system to inertial cartesian coordinates.\nfunction perifocalToCartesianMatrix(\n argumentOfPeriapsis,\n inclination,\n rightAscension,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (inclination < 0 || inclination > CesiumMath.PI) {\n throw new DeveloperError(\"inclination out of range\");\n }\n //>>includeEnd('debug')\n\n var cosap = Math.cos(argumentOfPeriapsis);\n var sinap = Math.sin(argumentOfPeriapsis);\n\n var cosi = Math.cos(inclination);\n var sini = Math.sin(inclination);\n\n var cosraan = Math.cos(rightAscension);\n var sinraan = Math.sin(rightAscension);\n if (!defined(result)) {\n result = new Matrix3(\n cosraan * cosap - sinraan * sinap * cosi,\n -cosraan * sinap - sinraan * cosap * cosi,\n sinraan * sini,\n\n sinraan * cosap + cosraan * sinap * cosi,\n -sinraan * sinap + cosraan * cosap * cosi,\n -cosraan * sini,\n\n sinap * sini,\n cosap * sini,\n cosi\n );\n } else {\n result[0] = cosraan * cosap - sinraan * sinap * cosi;\n result[1] = sinraan * cosap + cosraan * sinap * cosi;\n result[2] = sinap * sini;\n result[3] = -cosraan * sinap - sinraan * cosap * cosi;\n result[4] = -sinraan * sinap + cosraan * cosap * cosi;\n result[5] = cosap * sini;\n result[6] = sinraan * sini;\n result[7] = -cosraan * sini;\n result[8] = cosi;\n }\n return result;\n}\n\n// From section 5.8\nvar semiMajorAxis0 = 1.0000010178 * MetersPerAstronomicalUnit;\nvar meanLongitude0 = 100.46645683 * RadiansPerDegree;\nvar meanLongitude1 = 1295977422.83429 * RadiansPerArcSecond;\n\n// From table 6\nvar p1u = 16002;\nvar p2u = 21863;\nvar p3u = 32004;\nvar p4u = 10931;\nvar p5u = 14529;\nvar p6u = 16368;\nvar p7u = 15318;\nvar p8u = 32794;\n\nvar Ca1 = 64 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca2 = -152 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca3 = 62 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca4 = -8 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca5 = 32 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca6 = -41 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca7 = 19 * 1e-7 * MetersPerAstronomicalUnit;\nvar Ca8 = -11 * 1e-7 * MetersPerAstronomicalUnit;\n\nvar Sa1 = -150 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa2 = -46 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa3 = 68 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa4 = 54 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa5 = 14 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa6 = 24 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa7 = -28 * 1e-7 * MetersPerAstronomicalUnit;\nvar Sa8 = 22 * 1e-7 * MetersPerAstronomicalUnit;\n\nvar q1u = 10;\nvar q2u = 16002;\nvar q3u = 21863;\nvar q4u = 10931;\nvar q5u = 1473;\nvar q6u = 32004;\nvar q7u = 4387;\nvar q8u = 73;\n\nvar Cl1 = -325 * 1e-7;\nvar Cl2 = -322 * 1e-7;\nvar Cl3 = -79 * 1e-7;\nvar Cl4 = 232 * 1e-7;\nvar Cl5 = -52 * 1e-7;\nvar Cl6 = 97 * 1e-7;\nvar Cl7 = 55 * 1e-7;\nvar Cl8 = -41 * 1e-7;\n\nvar Sl1 = -105 * 1e-7;\nvar Sl2 = -137 * 1e-7;\nvar Sl3 = 258 * 1e-7;\nvar Sl4 = 35 * 1e-7;\nvar Sl5 = -116 * 1e-7;\nvar Sl6 = -88 * 1e-7;\nvar Sl7 = -112 * 1e-7;\nvar Sl8 = -80 * 1e-7;\n\nvar scratchDate = new JulianDate(0, 0.0, TimeStandard.TAI);\n// Gets a point describing the motion of the Earth-Moon barycenter according to the equations described in section 6.\nfunction computeSimonEarthMoonBarycenter(date, result) {\n // t is thousands of years from J2000 TDB\n taiToTdb(date, scratchDate);\n var x =\n scratchDate.dayNumber -\n epoch.dayNumber +\n (scratchDate.secondsOfDay - epoch.secondsOfDay) /\n TimeConstants.SECONDS_PER_DAY;\n var t = x / (TimeConstants.DAYS_PER_JULIAN_CENTURY * 10.0);\n\n var u = 0.3595362 * t;\n var semimajorAxis =\n semiMajorAxis0 +\n Ca1 * Math.cos(p1u * u) +\n Sa1 * Math.sin(p1u * u) +\n Ca2 * Math.cos(p2u * u) +\n Sa2 * Math.sin(p2u * u) +\n Ca3 * Math.cos(p3u * u) +\n Sa3 * Math.sin(p3u * u) +\n Ca4 * Math.cos(p4u * u) +\n Sa4 * Math.sin(p4u * u) +\n Ca5 * Math.cos(p5u * u) +\n Sa5 * Math.sin(p5u * u) +\n Ca6 * Math.cos(p6u * u) +\n Sa6 * Math.sin(p6u * u) +\n Ca7 * Math.cos(p7u * u) +\n Sa7 * Math.sin(p7u * u) +\n Ca8 * Math.cos(p8u * u) +\n Sa8 * Math.sin(p8u * u);\n var meanLongitude =\n meanLongitude0 +\n meanLongitude1 * t +\n Cl1 * Math.cos(q1u * u) +\n Sl1 * Math.sin(q1u * u) +\n Cl2 * Math.cos(q2u * u) +\n Sl2 * Math.sin(q2u * u) +\n Cl3 * Math.cos(q3u * u) +\n Sl3 * Math.sin(q3u * u) +\n Cl4 * Math.cos(q4u * u) +\n Sl4 * Math.sin(q4u * u) +\n Cl5 * Math.cos(q5u * u) +\n Sl5 * Math.sin(q5u * u) +\n Cl6 * Math.cos(q6u * u) +\n Sl6 * Math.sin(q6u * u) +\n Cl7 * Math.cos(q7u * u) +\n Sl7 * Math.sin(q7u * u) +\n Cl8 * Math.cos(q8u * u) +\n Sl8 * Math.sin(q8u * u);\n\n // All constants in this part are from section 5.8\n var eccentricity = 0.0167086342 - 0.0004203654 * t;\n var longitudeOfPerigee =\n 102.93734808 * RadiansPerDegree + 11612.3529 * RadiansPerArcSecond * t;\n var inclination = 469.97289 * RadiansPerArcSecond * t;\n var longitudeOfNode =\n 174.87317577 * RadiansPerDegree - 8679.27034 * RadiansPerArcSecond * t;\n\n return elementsToCartesian(\n semimajorAxis,\n eccentricity,\n inclination,\n longitudeOfPerigee,\n longitudeOfNode,\n meanLongitude,\n result\n );\n}\n\n// Gets a point describing the position of the moon according to the equations described in section 4.\nfunction computeSimonMoon(date, result) {\n taiToTdb(date, scratchDate);\n var x =\n scratchDate.dayNumber -\n epoch.dayNumber +\n (scratchDate.secondsOfDay - epoch.secondsOfDay) /\n TimeConstants.SECONDS_PER_DAY;\n var t = x / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n var t2 = t * t;\n var t3 = t2 * t;\n var t4 = t3 * t;\n\n // Terms from section 3.4 (b.1)\n var semimajorAxis = 383397.7725 + 0.004 * t;\n var eccentricity = 0.055545526 - 0.000000016 * t;\n var inclinationConstant = 5.15668983 * RadiansPerDegree;\n var inclinationSecPart =\n -0.00008 * t + 0.02966 * t2 - 0.000042 * t3 - 0.00000013 * t4;\n var longitudeOfPerigeeConstant = 83.35324312 * RadiansPerDegree;\n var longitudeOfPerigeeSecPart =\n 14643420.2669 * t - 38.2702 * t2 - 0.045047 * t3 + 0.00021301 * t4;\n var longitudeOfNodeConstant = 125.04455501 * RadiansPerDegree;\n var longitudeOfNodeSecPart =\n -6967919.3631 * t + 6.3602 * t2 + 0.007625 * t3 - 0.00003586 * t4;\n var meanLongitudeConstant = 218.31664563 * RadiansPerDegree;\n var meanLongitudeSecPart =\n 1732559343.4847 * t - 6.391 * t2 + 0.006588 * t3 - 0.00003169 * t4;\n\n // Delaunay arguments from section 3.5 b\n var D =\n 297.85019547 * RadiansPerDegree +\n RadiansPerArcSecond *\n (1602961601.209 * t - 6.3706 * t2 + 0.006593 * t3 - 0.00003169 * t4);\n var F =\n 93.27209062 * RadiansPerDegree +\n RadiansPerArcSecond *\n (1739527262.8478 * t - 12.7512 * t2 - 0.001037 * t3 + 0.00000417 * t4);\n var l =\n 134.96340251 * RadiansPerDegree +\n RadiansPerArcSecond *\n (1717915923.2178 * t + 31.8792 * t2 + 0.051635 * t3 - 0.0002447 * t4);\n var lprime =\n 357.52910918 * RadiansPerDegree +\n RadiansPerArcSecond *\n (129596581.0481 * t - 0.5532 * t2 + 0.000136 * t3 - 0.00001149 * t4);\n var psi =\n 310.17137918 * RadiansPerDegree -\n RadiansPerArcSecond *\n (6967051.436 * t + 6.2068 * t2 + 0.007618 * t3 - 0.00003219 * t4);\n\n // Add terms from Table 4\n var twoD = 2.0 * D;\n var fourD = 4.0 * D;\n var sixD = 6.0 * D;\n var twol = 2.0 * l;\n var threel = 3.0 * l;\n var fourl = 4.0 * l;\n var twoF = 2.0 * F;\n semimajorAxis +=\n 3400.4 * Math.cos(twoD) -\n 635.6 * Math.cos(twoD - l) -\n 235.6 * Math.cos(l) +\n 218.1 * Math.cos(twoD - lprime) +\n 181.0 * Math.cos(twoD + l);\n eccentricity +=\n 0.014216 * Math.cos(twoD - l) +\n 0.008551 * Math.cos(twoD - twol) -\n 0.001383 * Math.cos(l) +\n 0.001356 * Math.cos(twoD + l) -\n 0.001147 * Math.cos(fourD - threel) -\n 0.000914 * Math.cos(fourD - twol) +\n 0.000869 * Math.cos(twoD - lprime - l) -\n 0.000627 * Math.cos(twoD) -\n 0.000394 * Math.cos(fourD - fourl) +\n 0.000282 * Math.cos(twoD - lprime - twol) -\n 0.000279 * Math.cos(D - l) -\n 0.000236 * Math.cos(twol) +\n 0.000231 * Math.cos(fourD) +\n 0.000229 * Math.cos(sixD - fourl) -\n 0.000201 * Math.cos(twol - twoF);\n inclinationSecPart +=\n 486.26 * Math.cos(twoD - twoF) -\n 40.13 * Math.cos(twoD) +\n 37.51 * Math.cos(twoF) +\n 25.73 * Math.cos(twol - twoF) +\n 19.97 * Math.cos(twoD - lprime - twoF);\n longitudeOfPerigeeSecPart +=\n -55609 * Math.sin(twoD - l) -\n 34711 * Math.sin(twoD - twol) -\n 9792 * Math.sin(l) +\n 9385 * Math.sin(fourD - threel) +\n 7505 * Math.sin(fourD - twol) +\n 5318 * Math.sin(twoD + l) +\n 3484 * Math.sin(fourD - fourl) -\n 3417 * Math.sin(twoD - lprime - l) -\n 2530 * Math.sin(sixD - fourl) -\n 2376 * Math.sin(twoD) -\n 2075 * Math.sin(twoD - threel) -\n 1883 * Math.sin(twol) -\n 1736 * Math.sin(sixD - 5.0 * l) +\n 1626 * Math.sin(lprime) -\n 1370 * Math.sin(sixD - threel);\n longitudeOfNodeSecPart +=\n -5392 * Math.sin(twoD - twoF) -\n 540 * Math.sin(lprime) -\n 441 * Math.sin(twoD) +\n 423 * Math.sin(twoF) -\n 288 * Math.sin(twol - twoF);\n meanLongitudeSecPart +=\n -3332.9 * Math.sin(twoD) +\n 1197.4 * Math.sin(twoD - l) -\n 662.5 * Math.sin(lprime) +\n 396.3 * Math.sin(l) -\n 218.0 * Math.sin(twoD - lprime);\n\n // Add terms from Table 5\n var twoPsi = 2.0 * psi;\n var threePsi = 3.0 * psi;\n inclinationSecPart +=\n 46.997 * Math.cos(psi) * t -\n 0.614 * Math.cos(twoD - twoF + psi) * t +\n 0.614 * Math.cos(twoD - twoF - psi) * t -\n 0.0297 * Math.cos(twoPsi) * t2 -\n 0.0335 * Math.cos(psi) * t2 +\n 0.0012 * Math.cos(twoD - twoF + twoPsi) * t2 -\n 0.00016 * Math.cos(psi) * t3 +\n 0.00004 * Math.cos(threePsi) * t3 +\n 0.00004 * Math.cos(twoPsi) * t3;\n var perigeeAndMean =\n 2.116 * Math.sin(psi) * t -\n 0.111 * Math.sin(twoD - twoF - psi) * t -\n 0.0015 * Math.sin(psi) * t2;\n longitudeOfPerigeeSecPart += perigeeAndMean;\n meanLongitudeSecPart += perigeeAndMean;\n longitudeOfNodeSecPart +=\n -520.77 * Math.sin(psi) * t +\n 13.66 * Math.sin(twoD - twoF + psi) * t +\n 1.12 * Math.sin(twoD - psi) * t -\n 1.06 * Math.sin(twoF - psi) * t +\n 0.66 * Math.sin(twoPsi) * t2 +\n 0.371 * Math.sin(psi) * t2 -\n 0.035 * Math.sin(twoD - twoF + twoPsi) * t2 -\n 0.015 * Math.sin(twoD - twoF + psi) * t2 +\n 0.0014 * Math.sin(psi) * t3 -\n 0.0011 * Math.sin(threePsi) * t3 -\n 0.0009 * Math.sin(twoPsi) * t3;\n\n // Add constants and convert units\n semimajorAxis *= MetersPerKilometer;\n var inclination =\n inclinationConstant + inclinationSecPart * RadiansPerArcSecond;\n var longitudeOfPerigee =\n longitudeOfPerigeeConstant +\n longitudeOfPerigeeSecPart * RadiansPerArcSecond;\n var meanLongitude =\n meanLongitudeConstant + meanLongitudeSecPart * RadiansPerArcSecond;\n var longitudeOfNode =\n longitudeOfNodeConstant + longitudeOfNodeSecPart * RadiansPerArcSecond;\n\n return elementsToCartesian(\n semimajorAxis,\n eccentricity,\n inclination,\n longitudeOfPerigee,\n longitudeOfNode,\n meanLongitude,\n result\n );\n}\n\n// Gets a point describing the motion of the Earth. This point uses the Moon point and\n// the 1992 mu value (ratio between Moon and Earth masses) in Table 2 of the paper in order\n// to determine the position of the Earth relative to the Earth-Moon barycenter.\nvar moonEarthMassRatio = 0.012300034; // From 1992 mu value in Table 2\nvar factor = (moonEarthMassRatio / (moonEarthMassRatio + 1.0)) * -1;\nfunction computeSimonEarth(date, result) {\n result = computeSimonMoon(date, result);\n return Cartesian3.multiplyByScalar(result, factor, result);\n}\n\n// Values for the <code>axesTransformation</code> needed for the rotation were found using the STK Components\n// GreographicTransformer on the position of the sun center of mass point and the earth J2000 frame.\n\nvar axesTransformation = new Matrix3(\n 1.0000000000000002,\n 5.619723173785822e-16,\n 4.690511510146299e-19,\n -5.154129427414611e-16,\n 0.9174820620691819,\n -0.39777715593191376,\n -2.23970096136568e-16,\n 0.39777715593191376,\n 0.9174820620691819\n);\nvar translation = new Cartesian3();\n/**\n * Computes the position of the Sun in the Earth-centered inertial frame\n *\n * @param {JulianDate} [julianDate] The time at which to compute the Sun's position, if not provided the current system time is used.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} Calculated sun position\n */\nSimon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame = function (\n julianDate,\n result\n) {\n if (!defined(julianDate)) {\n julianDate = JulianDate.now();\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n //first forward transformation\n translation = computeSimonEarthMoonBarycenter(julianDate, translation);\n result = Cartesian3.negate(translation, result);\n\n //second forward transformation\n computeSimonEarth(julianDate, translation);\n\n Cartesian3.subtract(result, translation, result);\n Matrix3.multiplyByVector(axesTransformation, result, result);\n\n return result;\n};\n\n/**\n * Computes the position of the Moon in the Earth-centered inertial frame\n *\n * @param {JulianDate} [julianDate] The time at which to compute the Sun's position, if not provided the current system time is used.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} Calculated moon position\n */\nSimon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame = function (\n julianDate,\n result\n) {\n if (!defined(julianDate)) {\n julianDate = JulianDate.now();\n }\n\n result = computeSimonMoon(julianDate, result);\n Matrix3.multiplyByVector(axesTransformation, result, result);\n\n return result;\n};\nexport default Simon1994PlanetaryPositions;\n","import ArcType from \"./ArcType.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nfunction interpolateColors(p0, p1, color0, color1, minDistance, array, offset) {\n var numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\n var i;\n\n var r0 = color0.red;\n var g0 = color0.green;\n var b0 = color0.blue;\n var a0 = color0.alpha;\n\n var r1 = color1.red;\n var g1 = color1.green;\n var b1 = color1.blue;\n var a1 = color1.alpha;\n\n if (Color.equals(color0, color1)) {\n for (i = 0; i < numPoints; i++) {\n array[offset++] = Color.floatToByte(r0);\n array[offset++] = Color.floatToByte(g0);\n array[offset++] = Color.floatToByte(b0);\n array[offset++] = Color.floatToByte(a0);\n }\n return offset;\n }\n\n var redPerVertex = (r1 - r0) / numPoints;\n var greenPerVertex = (g1 - g0) / numPoints;\n var bluePerVertex = (b1 - b0) / numPoints;\n var alphaPerVertex = (a1 - a0) / numPoints;\n\n var index = offset;\n for (i = 0; i < numPoints; i++) {\n array[index++] = Color.floatToByte(r0 + i * redPerVertex);\n array[index++] = Color.floatToByte(g0 + i * greenPerVertex);\n array[index++] = Color.floatToByte(b0 + i * bluePerVertex);\n array[index++] = Color.floatToByte(a0 + i * alphaPerVertex);\n }\n\n return index;\n}\n\n/**\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\n * and each additional position defines a line segment from the previous position.\n *\n * @alias SimplePolylineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\n * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\n *\n * @exception {DeveloperError} At least two positions are required.\n * @exception {DeveloperError} colors has an invalid length.\n *\n * @see SimplePolylineGeometry#createGeometry\n *\n * @example\n * // A polyline with two connected line segments\n * var polyline = new Cesium.SimplePolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 5.0, 0.0,\n * 5.0, 5.0\n * ])\n * });\n * var geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline);\n */\nfunction SimplePolylineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n var colors = options.colors;\n var colorsPerVertex = defaultValue(options.colorsPerVertex, false);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions) || positions.length < 2) {\n throw new DeveloperError(\"At least two positions are required.\");\n }\n if (\n defined(colors) &&\n ((colorsPerVertex && colors.length < positions.length) ||\n (!colorsPerVertex && colors.length < positions.length - 1))\n ) {\n throw new DeveloperError(\"colors has an invalid length.\");\n }\n //>>includeEnd('debug');\n\n this._positions = positions;\n this._colors = colors;\n this._colorsPerVertex = colorsPerVertex;\n\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\n this._granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._workerName = \"createSimplePolylineGeometry\";\n\n var numComponents = 1 + positions.length * Cartesian3.packedLength;\n numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength = numComponents + Ellipsoid.packedLength + 3;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SimplePolylineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nSimplePolylineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var colors = value._colors;\n length = defined(colors) ? colors.length : 0.0;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n Color.pack(colors[i], array, startingIndex);\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\n array[startingIndex++] = value._arcType;\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SimplePolylineGeometry} [result] The object into which to store the result.\n * @returns {SimplePolylineGeometry} The modified result parameter or a new SimplePolylineGeometry instance if one was not provided.\n */\nSimplePolylineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var colors = length > 0 ? new Array(length) : undefined;\n\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n colors[i] = Color.unpack(array, startingIndex);\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n var colorsPerVertex = array[startingIndex++] === 1.0;\n var arcType = array[startingIndex++];\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n return new SimplePolylineGeometry({\n positions: positions,\n colors: colors,\n ellipsoid: ellipsoid,\n colorsPerVertex: colorsPerVertex,\n arcType: arcType,\n granularity: granularity,\n });\n }\n\n result._positions = positions;\n result._colors = colors;\n result._ellipsoid = ellipsoid;\n result._colorsPerVertex = colorsPerVertex;\n result._arcType = arcType;\n result._granularity = granularity;\n\n return result;\n};\n\nvar scratchArray1 = new Array(2);\nvar scratchArray2 = new Array(2);\nvar generateArcOptionsScratch = {\n positions: scratchArray1,\n height: scratchArray2,\n ellipsoid: undefined,\n minDistance: undefined,\n granularity: undefined,\n};\n\n/**\n * Computes the geometric representation of a simple polyline, including its vertices, indices, and a bounding sphere.\n *\n * @param {SimplePolylineGeometry} simplePolylineGeometry A description of the polyline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSimplePolylineGeometry.createGeometry = function (simplePolylineGeometry) {\n var positions = simplePolylineGeometry._positions;\n var colors = simplePolylineGeometry._colors;\n var colorsPerVertex = simplePolylineGeometry._colorsPerVertex;\n var arcType = simplePolylineGeometry._arcType;\n var granularity = simplePolylineGeometry._granularity;\n var ellipsoid = simplePolylineGeometry._ellipsoid;\n\n var minDistance = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n var perSegmentColors = defined(colors) && !colorsPerVertex;\n\n var i;\n var length = positions.length;\n\n var positionValues;\n var numberOfPositions;\n var colorValues;\n var color;\n var offset = 0;\n\n if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\n var subdivisionSize;\n var numberOfPointsFunction;\n var generateArcFunction;\n if (arcType === ArcType.GEODESIC) {\n subdivisionSize = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n numberOfPointsFunction = PolylinePipeline.numberOfPoints;\n generateArcFunction = PolylinePipeline.generateArc;\n } else {\n subdivisionSize = granularity;\n numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\n generateArcFunction = PolylinePipeline.generateRhumbArc;\n }\n\n var heights = PolylinePipeline.extractHeights(positions, ellipsoid);\n\n var generateArcOptions = generateArcOptionsScratch;\n if (arcType === ArcType.GEODESIC) {\n generateArcOptions.minDistance = minDistance;\n } else {\n generateArcOptions.granularity = granularity;\n }\n generateArcOptions.ellipsoid = ellipsoid;\n\n if (perSegmentColors) {\n var positionCount = 0;\n for (i = 0; i < length - 1; i++) {\n positionCount +=\n numberOfPointsFunction(\n positions[i],\n positions[i + 1],\n subdivisionSize\n ) + 1;\n }\n\n positionValues = new Float64Array(positionCount * 3);\n colorValues = new Uint8Array(positionCount * 4);\n\n generateArcOptions.positions = scratchArray1;\n generateArcOptions.height = scratchArray2;\n\n var ci = 0;\n for (i = 0; i < length - 1; ++i) {\n scratchArray1[0] = positions[i];\n scratchArray1[1] = positions[i + 1];\n\n scratchArray2[0] = heights[i];\n scratchArray2[1] = heights[i + 1];\n\n var pos = generateArcFunction(generateArcOptions);\n\n if (defined(colors)) {\n var segLen = pos.length / 3;\n color = colors[i];\n for (var k = 0; k < segLen; ++k) {\n colorValues[ci++] = Color.floatToByte(color.red);\n colorValues[ci++] = Color.floatToByte(color.green);\n colorValues[ci++] = Color.floatToByte(color.blue);\n colorValues[ci++] = Color.floatToByte(color.alpha);\n }\n }\n\n positionValues.set(pos, offset);\n offset += pos.length;\n }\n } else {\n generateArcOptions.positions = positions;\n generateArcOptions.height = heights;\n positionValues = new Float64Array(\n generateArcFunction(generateArcOptions)\n );\n\n if (defined(colors)) {\n colorValues = new Uint8Array((positionValues.length / 3) * 4);\n\n for (i = 0; i < length - 1; ++i) {\n var p0 = positions[i];\n var p1 = positions[i + 1];\n var c0 = colors[i];\n var c1 = colors[i + 1];\n offset = interpolateColors(\n p0,\n p1,\n c0,\n c1,\n minDistance,\n colorValues,\n offset\n );\n }\n\n var lastColor = colors[length - 1];\n colorValues[offset++] = Color.floatToByte(lastColor.red);\n colorValues[offset++] = Color.floatToByte(lastColor.green);\n colorValues[offset++] = Color.floatToByte(lastColor.blue);\n colorValues[offset++] = Color.floatToByte(lastColor.alpha);\n }\n }\n } else {\n numberOfPositions = perSegmentColors ? length * 2 - 2 : length;\n positionValues = new Float64Array(numberOfPositions * 3);\n colorValues = defined(colors)\n ? new Uint8Array(numberOfPositions * 4)\n : undefined;\n\n var positionIndex = 0;\n var colorIndex = 0;\n\n for (i = 0; i < length; ++i) {\n var p = positions[i];\n\n if (perSegmentColors && i > 0) {\n Cartesian3.pack(p, positionValues, positionIndex);\n positionIndex += 3;\n\n color = colors[i - 1];\n colorValues[colorIndex++] = Color.floatToByte(color.red);\n colorValues[colorIndex++] = Color.floatToByte(color.green);\n colorValues[colorIndex++] = Color.floatToByte(color.blue);\n colorValues[colorIndex++] = Color.floatToByte(color.alpha);\n }\n\n if (perSegmentColors && i === length - 1) {\n break;\n }\n\n Cartesian3.pack(p, positionValues, positionIndex);\n positionIndex += 3;\n\n if (defined(colors)) {\n color = colors[i];\n colorValues[colorIndex++] = Color.floatToByte(color.red);\n colorValues[colorIndex++] = Color.floatToByte(color.green);\n colorValues[colorIndex++] = Color.floatToByte(color.blue);\n colorValues[colorIndex++] = Color.floatToByte(color.alpha);\n }\n }\n }\n\n var attributes = new GeometryAttributes();\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positionValues,\n });\n\n if (defined(colors)) {\n attributes.color = new GeometryAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 4,\n values: colorValues,\n normalize: true,\n });\n }\n\n numberOfPositions = positionValues.length / 3;\n var numberOfIndices = (numberOfPositions - 1) * 2;\n var indices = IndexDatatype.createTypedArray(\n numberOfPositions,\n numberOfIndices\n );\n\n var index = 0;\n for (i = 0; i < numberOfPositions - 1; ++i) {\n indices[index++] = i;\n indices[index++] = i + 1;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: BoundingSphere.fromPoints(positions),\n });\n};\nexport default SimplePolylineGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport EllipsoidGeometry from \"./EllipsoidGeometry.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * A description of a sphere centered at the origin.\n *\n * @alias SphereGeometry\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.radius=1.0] The radius of the sphere.\n * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\n * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\n *\n * @see SphereGeometry#createGeometry\n *\n * @example\n * var sphere = new Cesium.SphereGeometry({\n * radius : 100.0,\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY\n * });\n * var geometry = Cesium.SphereGeometry.createGeometry(sphere);\n */\nfunction SphereGeometry(options) {\n var radius = defaultValue(options.radius, 1.0);\n var radii = new Cartesian3(radius, radius, radius);\n var ellipsoidOptions = {\n radii: radii,\n stackPartitions: options.stackPartitions,\n slicePartitions: options.slicePartitions,\n vertexFormat: options.vertexFormat,\n };\n\n this._ellipsoidGeometry = new EllipsoidGeometry(ellipsoidOptions);\n this._workerName = \"createSphereGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nSphereGeometry.packedLength = EllipsoidGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SphereGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nSphereGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n //>>includeEnd('debug');\n\n return EllipsoidGeometry.pack(value._ellipsoidGeometry, array, startingIndex);\n};\n\nvar scratchEllipsoidGeometry = new EllipsoidGeometry();\nvar scratchOptions = {\n radius: undefined,\n radii: new Cartesian3(),\n vertexFormat: new VertexFormat(),\n stackPartitions: undefined,\n slicePartitions: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SphereGeometry} [result] The object into which to store the result.\n * @returns {SphereGeometry} The modified result parameter or a new SphereGeometry instance if one was not provided.\n */\nSphereGeometry.unpack = function (array, startingIndex, result) {\n var ellipsoidGeometry = EllipsoidGeometry.unpack(\n array,\n startingIndex,\n scratchEllipsoidGeometry\n );\n scratchOptions.vertexFormat = VertexFormat.clone(\n ellipsoidGeometry._vertexFormat,\n scratchOptions.vertexFormat\n );\n scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\n scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\n\n if (!defined(result)) {\n scratchOptions.radius = ellipsoidGeometry._radii.x;\n return new SphereGeometry(scratchOptions);\n }\n\n Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\n result._ellipsoidGeometry = new EllipsoidGeometry(scratchOptions);\n return result;\n};\n\n/**\n * Computes the geometric representation of a sphere, including its vertices, indices, and a bounding sphere.\n *\n * @param {SphereGeometry} sphereGeometry A description of the sphere.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSphereGeometry.createGeometry = function (sphereGeometry) {\n return EllipsoidGeometry.createGeometry(sphereGeometry._ellipsoidGeometry);\n};\nexport default SphereGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport EllipsoidOutlineGeometry from \"./EllipsoidOutlineGeometry.js\";\n\n/**\n * A description of the outline of a sphere.\n *\n * @alias SphereOutlineGeometry\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.radius=1.0] The radius of the sphere.\n * @param {Number} [options.stackPartitions=10] The count of stacks for the sphere (1 greater than the number of parallel lines).\n * @param {Number} [options.slicePartitions=8] The count of slices for the sphere (Equal to the number of radial lines).\n * @param {Number} [options.subdivisions=200] The number of points per line, determining the granularity of the curvature .\n *\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\n *\n * @example\n * var sphere = new Cesium.SphereOutlineGeometry({\n * radius : 100.0,\n * stackPartitions : 6,\n * slicePartitions: 5\n * });\n * var geometry = Cesium.SphereOutlineGeometry.createGeometry(sphere);\n */\nfunction SphereOutlineGeometry(options) {\n var radius = defaultValue(options.radius, 1.0);\n var radii = new Cartesian3(radius, radius, radius);\n var ellipsoidOptions = {\n radii: radii,\n stackPartitions: options.stackPartitions,\n slicePartitions: options.slicePartitions,\n subdivisions: options.subdivisions,\n };\n\n this._ellipsoidGeometry = new EllipsoidOutlineGeometry(ellipsoidOptions);\n this._workerName = \"createSphereOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\nSphereOutlineGeometry.packedLength = EllipsoidOutlineGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SphereOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nSphereOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n //>>includeEnd('debug');\n\n return EllipsoidOutlineGeometry.pack(\n value._ellipsoidGeometry,\n array,\n startingIndex\n );\n};\n\nvar scratchEllipsoidGeometry = new EllipsoidOutlineGeometry();\nvar scratchOptions = {\n radius: undefined,\n radii: new Cartesian3(),\n stackPartitions: undefined,\n slicePartitions: undefined,\n subdivisions: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SphereOutlineGeometry} [result] The object into which to store the result.\n * @returns {SphereOutlineGeometry} The modified result parameter or a new SphereOutlineGeometry instance if one was not provided.\n */\nSphereOutlineGeometry.unpack = function (array, startingIndex, result) {\n var ellipsoidGeometry = EllipsoidOutlineGeometry.unpack(\n array,\n startingIndex,\n scratchEllipsoidGeometry\n );\n scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\n scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\n scratchOptions.subdivisions = ellipsoidGeometry._subdivisions;\n\n if (!defined(result)) {\n scratchOptions.radius = ellipsoidGeometry._radii.x;\n return new SphereOutlineGeometry(scratchOptions);\n }\n\n Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\n result._ellipsoidGeometry = new EllipsoidOutlineGeometry(scratchOptions);\n return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a sphere, including its vertices, indices, and a bounding sphere.\n *\n * @param {SphereOutlineGeometry} sphereGeometry A description of the sphere outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSphereOutlineGeometry.createGeometry = function (sphereGeometry) {\n return EllipsoidOutlineGeometry.createGeometry(\n sphereGeometry._ellipsoidGeometry\n );\n};\nexport default SphereOutlineGeometry;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A set of curvilinear 3-dimensional coordinates.\n *\n * @alias Spherical\n * @constructor\n *\n * @param {Number} [clock=0.0] The angular coordinate lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {Number} [cone=0.0] The angular coordinate measured from the positive z-axis and toward the negative z-axis.\n * @param {Number} [magnitude=1.0] The linear coordinate measured from the origin.\n */\nfunction Spherical(clock, cone, magnitude) {\n /**\n * The clock component.\n * @type {Number}\n * @default 0.0\n */\n this.clock = defaultValue(clock, 0.0);\n /**\n * The cone component.\n * @type {Number}\n * @default 0.0\n */\n this.cone = defaultValue(cone, 0.0);\n /**\n * The magnitude component.\n * @type {Number}\n * @default 1.0\n */\n this.magnitude = defaultValue(magnitude, 1.0);\n}\n\n/**\n * Converts the provided Cartesian3 into Spherical coordinates.\n *\n * @param {Cartesian3} cartesian3 The Cartesian3 to be converted to Spherical.\n * @param {Spherical} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter, or a new instance if one was not provided.\n */\nSpherical.fromCartesian3 = function (cartesian3, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"cartesian3\", cartesian3);\n //>>includeEnd('debug');\n\n var x = cartesian3.x;\n var y = cartesian3.y;\n var z = cartesian3.z;\n var radialSquared = x * x + y * y;\n\n if (!defined(result)) {\n result = new Spherical();\n }\n\n result.clock = Math.atan2(y, x);\n result.cone = Math.atan2(Math.sqrt(radialSquared), z);\n result.magnitude = Math.sqrt(radialSquared + z * z);\n return result;\n};\n\n/**\n * Creates a duplicate of a Spherical.\n *\n * @param {Spherical} spherical The spherical to clone.\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined. (Returns undefined if spherical is undefined)\n */\nSpherical.clone = function (spherical, result) {\n if (!defined(spherical)) {\n return undefined;\n }\n\n if (!defined(result)) {\n return new Spherical(spherical.clock, spherical.cone, spherical.magnitude);\n }\n\n result.clock = spherical.clock;\n result.cone = spherical.cone;\n result.magnitude = spherical.magnitude;\n return result;\n};\n\n/**\n * Computes the normalized version of the provided spherical.\n *\n * @param {Spherical} spherical The spherical to be normalized.\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined.\n */\nSpherical.normalize = function (spherical, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"spherical\", spherical);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n return new Spherical(spherical.clock, spherical.cone, 1.0);\n }\n\n result.clock = spherical.clock;\n result.cone = spherical.cone;\n result.magnitude = 1.0;\n return result;\n};\n\n/**\n * Returns true if the first spherical is equal to the second spherical, false otherwise.\n *\n * @param {Spherical} left The first Spherical to be compared.\n * @param {Spherical} right The second Spherical to be compared.\n * @returns {Boolean} true if the first spherical is equal to the second spherical, false otherwise.\n */\nSpherical.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left.clock === right.clock &&\n left.cone === right.cone &&\n left.magnitude === right.magnitude)\n );\n};\n\n/**\n * Returns true if the first spherical is within the provided epsilon of the second spherical, false otherwise.\n *\n * @param {Spherical} left The first Spherical to be compared.\n * @param {Spherical} right The second Spherical to be compared.\n * @param {Number} [epsilon=0.0] The epsilon to compare against.\n * @returns {Boolean} true if the first spherical is within the provided epsilon of the second spherical, false otherwise.\n */\nSpherical.equalsEpsilon = function (left, right, epsilon) {\n epsilon = defaultValue(epsilon, 0.0);\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n Math.abs(left.clock - right.clock) <= epsilon &&\n Math.abs(left.cone - right.cone) <= epsilon &&\n Math.abs(left.magnitude - right.magnitude) <= epsilon)\n );\n};\n\n/**\n * Returns true if this spherical is equal to the provided spherical, false otherwise.\n *\n * @param {Spherical} other The Spherical to be compared.\n * @returns {Boolean} true if this spherical is equal to the provided spherical, false otherwise.\n */\nSpherical.prototype.equals = function (other) {\n return Spherical.equals(this, other);\n};\n\n/**\n * Creates a duplicate of this Spherical.\n *\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined.\n */\nSpherical.prototype.clone = function (result) {\n return Spherical.clone(this, result);\n};\n\n/**\n * Returns true if this spherical is within the provided epsilon of the provided spherical, false otherwise.\n *\n * @param {Spherical} other The Spherical to be compared.\n * @param {Number} epsilon The epsilon to compare against.\n * @returns {Boolean} true if this spherical is within the provided epsilon of the provided spherical, false otherwise.\n */\nSpherical.prototype.equalsEpsilon = function (other, epsilon) {\n return Spherical.equalsEpsilon(this, other, epsilon);\n};\n\n/**\n * Returns a string representing this instance in the format (clock, cone, magnitude).\n *\n * @returns {String} A string representing this instance.\n */\nSpherical.prototype.toString = function () {\n return \"(\" + this.clock + \", \" + this.cone + \", \" + this.magnitude + \")\";\n};\nexport default Spherical;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Subdivides an array into a number of smaller, equal sized arrays.\n *\n * @function subdivideArray\n *\n * @param {Array} array The array to divide.\n * @param {Number} numberOfArrays The number of arrays to divide the provided array into.\n *\n * @exception {DeveloperError} numberOfArrays must be greater than 0.\n */\nfunction subdivideArray(array, numberOfArrays) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required.\");\n }\n\n if (!defined(numberOfArrays) || numberOfArrays < 1) {\n throw new DeveloperError(\"numberOfArrays must be greater than 0.\");\n }\n //>>includeEnd('debug');\n\n var result = [];\n var len = array.length;\n var i = 0;\n while (i < len) {\n var size = Math.ceil((len - i) / numberOfArrays--);\n result.push(array.slice(i, i + size));\n i += size;\n }\n return result;\n}\nexport default subdivideArray;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Terrain data for a single tile. This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TerrainData\n * @constructor\n *\n * @see HeightmapTerrainData\n * @see QuantizedMeshTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction TerrainData() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(TerrainData.prototype, {\n /**\n * An array of credits for this tile.\n * @memberof TerrainData.prototype\n * @type {Credit[]}\n */\n credits: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * The water mask included in this terrain data, if any. A water mask is a rectangular\n * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @memberof TerrainData.prototype\n * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement}\n */\n waterMask: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n * @function\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {Number} longitude The longitude in radians.\n * @param {Number} latitude The latitude in radians.\n * @returns {Number} The terrain height at the specified position. If the position\n * is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n * incorrect for positions far outside the rectangle.\n */\nTerrainData.prototype.interpolateHeight =\n DeveloperError.throwInstantiationError;\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link TerrainData#childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n * @function\n *\n * @param {Number} thisX The tile X coordinate of this (the parent) tile.\n * @param {Number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {Number} childX The tile X coordinate of the child tile to check for availability.\n * @param {Number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {Boolean} True if the child tile is available; otherwise, false.\n */\nTerrainData.prototype.isChildAvailable = DeveloperError.throwInstantiationError;\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n * @function\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme to which this tile belongs.\n * @param {Number} x The X coordinate of the tile for which to create the terrain data.\n * @param {Number} y The Y coordinate of the tile for which to create the terrain data.\n * @param {Number} level The level of the tile for which to create the terrain data.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n * asynchronous mesh creations are already in progress and the operation should\n * be retried later.\n */\nTerrainData.prototype.createMesh = DeveloperError.throwInstantiationError;\n\n/**\n * Upsamples this terrain data for use by a descendant tile.\n * @function\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {Number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {Number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {Number} thisLevel The level of this tile in the tiling scheme.\n * @param {Number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {Number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile,\n * or undefined if too many asynchronous upsample operations are in progress and the request has been\n * deferred.\n */\nTerrainData.prototype.upsample = DeveloperError.throwInstantiationError;\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link TerrainData#upsample}.\n * @function\n *\n * @returns {Boolean} True if this instance was created by upsampling; otherwise, false.\n */\nTerrainData.prototype.wasCreatedByUpsampling =\n DeveloperError.throwInstantiationError;\nexport default TerrainData;\n","/**\n * @private\n */\nvar TileEdge = {\n WEST: 0,\n NORTH: 1,\n EAST: 2,\n SOUTH: 3,\n NORTHWEST: 4,\n NORTHEAST: 5,\n SOUTHWEST: 6,\n SOUTHEAST: 7,\n};\nexport default TileEdge;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A tiling scheme for geometry or imagery on the surface of an ellipsoid. At level-of-detail zero,\n * the coarsest, least-detailed level, the number of tiles is configurable.\n * At level of detail one, each of the level zero tiles has four children, two in each direction.\n * At level of detail two, each of the level one tiles has four children, two in each direction.\n * This continues for as many levels as are present in the geometry or imagery source.\n *\n * @alias TilingScheme\n * @constructor\n *\n * @see WebMercatorTilingScheme\n * @see GeographicTilingScheme\n */\nfunction TilingScheme(options) {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n \"This type should not be instantiated directly. Instead, use WebMercatorTilingScheme or GeographicTilingScheme.\"\n );\n //>>includeEnd('debug');\n}\n\nObject.defineProperties(TilingScheme.prototype, {\n /**\n * Gets the ellipsoid that is tiled by the tiling scheme.\n * @memberof TilingScheme.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the rectangle, in radians, covered by this tiling scheme.\n * @memberof TilingScheme.prototype\n * @type {Rectangle}\n */\n rectangle: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the map projection used by the tiling scheme.\n * @memberof TilingScheme.prototype\n * @type {MapProjection}\n */\n projection: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n * @function\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the X direction at the given level.\n */\nTilingScheme.prototype.getNumberOfXTilesAtLevel =\n DeveloperError.throwInstantiationError;\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n * @function\n *\n * @param {Number} level The level-of-detail.\n * @returns {Number} The number of tiles in the Y direction at the given level.\n */\nTilingScheme.prototype.getNumberOfYTilesAtLevel =\n DeveloperError.throwInstantiationError;\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n * @function\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n * is undefined.\n */\nTilingScheme.prototype.rectangleToNativeRectangle =\n DeveloperError.throwInstantiationError;\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n * @function\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nTilingScheme.prototype.tileXYToNativeRectangle =\n DeveloperError.throwInstantiationError;\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n * @function\n *\n * @param {Number} x The integer x coordinate of the tile.\n * @param {Number} y The integer y coordinate of the tile.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n * if 'result' is undefined.\n */\nTilingScheme.prototype.tileXYToRectangle =\n DeveloperError.throwInstantiationError;\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n * @function\n *\n * @param {Cartographic} position The position.\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n * should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n * if 'result' is undefined.\n */\nTilingScheme.prototype.positionToTileXY =\n DeveloperError.throwInstantiationError;\nexport default TilingScheme;\n","import binarySearch from \"./binarySearch.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport GregorianDate from \"./GregorianDate.js\";\nimport isLeapYear from \"./isLeapYear.js\";\nimport Iso8601 from \"./Iso8601.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport TimeInterval from \"./TimeInterval.js\";\n\nfunction compareIntervalStartTimes(left, right) {\n return JulianDate.compare(left.start, right.start);\n}\n\n/**\n * A non-overlapping collection of {@link TimeInterval} instances sorted by start time.\n * @alias TimeIntervalCollection\n * @constructor\n *\n * @param {TimeInterval[]} [intervals] An array of intervals to add to the collection.\n */\nfunction TimeIntervalCollection(intervals) {\n this._intervals = [];\n this._changedEvent = new Event();\n\n if (defined(intervals)) {\n var length = intervals.length;\n for (var i = 0; i < length; i++) {\n this.addInterval(intervals[i]);\n }\n }\n}\n\nObject.defineProperties(TimeIntervalCollection.prototype, {\n /**\n * Gets an event that is raised whenever the collection of intervals change.\n * @memberof TimeIntervalCollection.prototype\n * @type {Event}\n * @readonly\n */\n changedEvent: {\n get: function () {\n return this._changedEvent;\n },\n },\n\n /**\n * Gets the start time of the collection.\n * @memberof TimeIntervalCollection.prototype\n * @type {JulianDate}\n * @readonly\n */\n start: {\n get: function () {\n var intervals = this._intervals;\n return intervals.length === 0 ? undefined : intervals[0].start;\n },\n },\n\n /**\n * Gets whether or not the start time is included in the collection.\n * @memberof TimeIntervalCollection.prototype\n * @type {Boolean}\n * @readonly\n */\n isStartIncluded: {\n get: function () {\n var intervals = this._intervals;\n return intervals.length === 0 ? false : intervals[0].isStartIncluded;\n },\n },\n\n /**\n * Gets the stop time of the collection.\n * @memberof TimeIntervalCollection.prototype\n * @type {JulianDate}\n * @readonly\n */\n stop: {\n get: function () {\n var intervals = this._intervals;\n var length = intervals.length;\n return length === 0 ? undefined : intervals[length - 1].stop;\n },\n },\n\n /**\n * Gets whether or not the stop time is included in the collection.\n * @memberof TimeIntervalCollection.prototype\n * @type {Boolean}\n * @readonly\n */\n isStopIncluded: {\n get: function () {\n var intervals = this._intervals;\n var length = intervals.length;\n return length === 0 ? false : intervals[length - 1].isStopIncluded;\n },\n },\n\n /**\n * Gets the number of intervals in the collection.\n * @memberof TimeIntervalCollection.prototype\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._intervals.length;\n },\n },\n\n /**\n * Gets whether or not the collection is empty.\n * @memberof TimeIntervalCollection.prototype\n * @type {Boolean}\n * @readonly\n */\n isEmpty: {\n get: function () {\n return this._intervals.length === 0;\n },\n },\n});\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeIntervalCollection} [right] The right hand side collection.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollection.prototype.equals = function (right, dataComparer) {\n if (this === right) {\n return true;\n }\n if (!(right instanceof TimeIntervalCollection)) {\n return false;\n }\n var intervals = this._intervals;\n var rightIntervals = right._intervals;\n var length = intervals.length;\n if (length !== rightIntervals.length) {\n return false;\n }\n for (var i = 0; i < length; i++) {\n if (!TimeInterval.equals(intervals[i], rightIntervals[i], dataComparer)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Gets the interval at the specified index.\n *\n * @param {Number} index The index of the interval to retrieve.\n * @returns {TimeInterval|undefined} The interval at the specified index, or <code>undefined</code> if no interval exists as that index.\n */\nTimeIntervalCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._intervals[index];\n};\n\n/**\n * Removes all intervals from the collection.\n */\nTimeIntervalCollection.prototype.removeAll = function () {\n if (this._intervals.length > 0) {\n this._intervals.length = 0;\n this._changedEvent.raiseEvent(this);\n }\n};\n\n/**\n * Finds and returns the interval that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {TimeInterval|undefined} The interval containing the specified date, <code>undefined</code> if no such interval exists.\n */\nTimeIntervalCollection.prototype.findIntervalContainingDate = function (date) {\n var index = this.indexOf(date);\n return index >= 0 ? this._intervals[index] : undefined;\n};\n\n/**\n * Finds and returns the data for the interval that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {Object} The data for the interval containing the specified date, or <code>undefined</code> if no such interval exists.\n */\nTimeIntervalCollection.prototype.findDataForIntervalContainingDate = function (\n date\n) {\n var index = this.indexOf(date);\n return index >= 0 ? this._intervals[index].data : undefined;\n};\n\n/**\n * Checks if the specified date is inside this collection.\n *\n * @param {JulianDate} julianDate The date to check.\n * @returns {Boolean} <code>true</code> if the collection contains the specified date, <code>false</code> otherwise.\n */\nTimeIntervalCollection.prototype.contains = function (julianDate) {\n return this.indexOf(julianDate) >= 0;\n};\n\nvar indexOfScratch = new TimeInterval();\n\n/**\n * Finds and returns the index of the interval in the collection that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {Number} The index of the interval that contains the specified date, if no such interval exists,\n * it returns a negative number which is the bitwise complement of the index of the next interval that\n * starts after the date, or if no interval starts after the specified date, the bitwise complement of\n * the length of the collection.\n */\nTimeIntervalCollection.prototype.indexOf = function (date) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(date)) {\n throw new DeveloperError(\"date is required\");\n }\n //>>includeEnd('debug');\n\n var intervals = this._intervals;\n indexOfScratch.start = date;\n indexOfScratch.stop = date;\n var index = binarySearch(\n intervals,\n indexOfScratch,\n compareIntervalStartTimes\n );\n if (index >= 0) {\n if (intervals[index].isStartIncluded) {\n return index;\n }\n\n if (\n index > 0 &&\n intervals[index - 1].stop.equals(date) &&\n intervals[index - 1].isStopIncluded\n ) {\n return index - 1;\n }\n return ~index;\n }\n\n index = ~index;\n if (\n index > 0 &&\n index - 1 < intervals.length &&\n TimeInterval.contains(intervals[index - 1], date)\n ) {\n return index - 1;\n }\n return ~index;\n};\n\n/**\n * Returns the first interval in the collection that matches the specified parameters.\n * All parameters are optional and <code>undefined</code> parameters are treated as a don't care condition.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {JulianDate} [options.start] The start time of the interval.\n * @param {JulianDate} [options.stop] The stop time of the interval.\n * @param {Boolean} [options.isStartIncluded] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @returns {TimeInterval|undefined} The first interval in the collection that matches the specified parameters.\n */\nTimeIntervalCollection.prototype.findInterval = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var start = options.start;\n var stop = options.stop;\n var isStartIncluded = options.isStartIncluded;\n var isStopIncluded = options.isStopIncluded;\n\n var intervals = this._intervals;\n for (var i = 0, len = intervals.length; i < len; i++) {\n var interval = intervals[i];\n if (\n (!defined(start) || interval.start.equals(start)) &&\n (!defined(stop) || interval.stop.equals(stop)) &&\n (!defined(isStartIncluded) ||\n interval.isStartIncluded === isStartIncluded) &&\n (!defined(isStopIncluded) || interval.isStopIncluded === isStopIncluded)\n ) {\n return intervals[i];\n }\n }\n return undefined;\n};\n\n/**\n * Adds an interval to the collection, merging intervals that contain the same data and\n * splitting intervals of different data as needed in order to maintain a non-overlapping collection.\n * The data in the new interval takes precedence over any existing intervals in the collection.\n *\n * @param {TimeInterval} interval The interval to add.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n */\nTimeIntervalCollection.prototype.addInterval = function (\n interval,\n dataComparer\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(interval)) {\n throw new DeveloperError(\"interval is required\");\n }\n //>>includeEnd('debug');\n\n if (interval.isEmpty) {\n return;\n }\n\n var intervals = this._intervals;\n\n // Handle the common case quickly: we're adding a new interval which is after all existing intervals.\n if (\n intervals.length === 0 ||\n JulianDate.greaterThan(interval.start, intervals[intervals.length - 1].stop)\n ) {\n intervals.push(interval);\n this._changedEvent.raiseEvent(this);\n return;\n }\n\n // Keep the list sorted by the start date\n var index = binarySearch(intervals, interval, compareIntervalStartTimes);\n if (index < 0) {\n index = ~index;\n } else {\n // interval's start date exactly equals the start date of at least one interval in the collection.\n // It could actually equal the start date of two intervals if one of them does not actually\n // include the date. In that case, the binary search could have found either. We need to\n // look at the surrounding intervals and their IsStartIncluded properties in order to make sure\n // we're working with the correct interval.\n\n // eslint-disable-next-line no-lonely-if\n if (\n index > 0 &&\n interval.isStartIncluded &&\n intervals[index - 1].isStartIncluded &&\n intervals[index - 1].start.equals(interval.start)\n ) {\n --index;\n } else if (\n index < intervals.length &&\n !interval.isStartIncluded &&\n intervals[index].isStartIncluded &&\n intervals[index].start.equals(interval.start)\n ) {\n ++index;\n }\n }\n\n var comparison;\n if (index > 0) {\n // Not the first thing in the list, so see if the interval before this one\n // overlaps this one.\n\n comparison = JulianDate.compare(intervals[index - 1].stop, interval.start);\n if (\n comparison > 0 ||\n (comparison === 0 &&\n (intervals[index - 1].isStopIncluded || interval.isStartIncluded))\n ) {\n // There is an overlap\n if (\n defined(dataComparer)\n ? dataComparer(intervals[index - 1].data, interval.data)\n : intervals[index - 1].data === interval.data\n ) {\n // Overlapping intervals have the same data, so combine them\n if (JulianDate.greaterThan(interval.stop, intervals[index - 1].stop)) {\n interval = new TimeInterval({\n start: intervals[index - 1].start,\n stop: interval.stop,\n isStartIncluded: intervals[index - 1].isStartIncluded,\n isStopIncluded: interval.isStopIncluded,\n data: interval.data,\n });\n } else {\n interval = new TimeInterval({\n start: intervals[index - 1].start,\n stop: intervals[index - 1].stop,\n isStartIncluded: intervals[index - 1].isStartIncluded,\n isStopIncluded:\n intervals[index - 1].isStopIncluded ||\n (interval.stop.equals(intervals[index - 1].stop) &&\n interval.isStopIncluded),\n data: interval.data,\n });\n }\n intervals.splice(index - 1, 1);\n --index;\n } else {\n // Overlapping intervals have different data. The new interval\n // being added 'wins' so truncate the previous interval.\n // If the existing interval extends past the end of the new one,\n // split the existing interval into two intervals.\n comparison = JulianDate.compare(\n intervals[index - 1].stop,\n interval.stop\n );\n if (\n comparison > 0 ||\n (comparison === 0 &&\n intervals[index - 1].isStopIncluded &&\n !interval.isStopIncluded)\n ) {\n intervals.splice(\n index,\n 0,\n new TimeInterval({\n start: interval.stop,\n stop: intervals[index - 1].stop,\n isStartIncluded: !interval.isStopIncluded,\n isStopIncluded: intervals[index - 1].isStopIncluded,\n data: intervals[index - 1].data,\n })\n );\n }\n intervals[index - 1] = new TimeInterval({\n start: intervals[index - 1].start,\n stop: interval.start,\n isStartIncluded: intervals[index - 1].isStartIncluded,\n isStopIncluded: !interval.isStartIncluded,\n data: intervals[index - 1].data,\n });\n }\n }\n }\n\n while (index < intervals.length) {\n // Not the last thing in the list, so see if the intervals after this one overlap this one.\n comparison = JulianDate.compare(interval.stop, intervals[index].start);\n if (\n comparison > 0 ||\n (comparison === 0 &&\n (interval.isStopIncluded || intervals[index].isStartIncluded))\n ) {\n // There is an overlap\n if (\n defined(dataComparer)\n ? dataComparer(intervals[index].data, interval.data)\n : intervals[index].data === interval.data\n ) {\n // Overlapping intervals have the same data, so combine them\n interval = new TimeInterval({\n start: interval.start,\n stop: JulianDate.greaterThan(intervals[index].stop, interval.stop)\n ? intervals[index].stop\n : interval.stop,\n isStartIncluded: interval.isStartIncluded,\n isStopIncluded: JulianDate.greaterThan(\n intervals[index].stop,\n interval.stop\n )\n ? intervals[index].isStopIncluded\n : interval.isStopIncluded,\n data: interval.data,\n });\n intervals.splice(index, 1);\n } else {\n // Overlapping intervals have different data. The new interval\n // being added 'wins' so truncate the next interval.\n intervals[index] = new TimeInterval({\n start: interval.stop,\n stop: intervals[index].stop,\n isStartIncluded: !interval.isStopIncluded,\n isStopIncluded: intervals[index].isStopIncluded,\n data: intervals[index].data,\n });\n\n if (intervals[index].isEmpty) {\n intervals.splice(index, 1);\n } else {\n // Found a partial span, so it is not possible for the next\n // interval to be spanned at all. Stop looking.\n break;\n }\n }\n } else {\n // Found the last one we're spanning, so stop looking.\n break;\n }\n }\n\n // Add the new interval\n intervals.splice(index, 0, interval);\n this._changedEvent.raiseEvent(this);\n};\n\n/**\n * Removes the specified interval from this interval collection, creating a hole over the specified interval.\n * The data property of the input interval is ignored.\n *\n * @param {TimeInterval} interval The interval to remove.\n * @returns {Boolean} <code>true</code> if the interval was removed, <code>false</code> if no part of the interval was in the collection.\n */\nTimeIntervalCollection.prototype.removeInterval = function (interval) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(interval)) {\n throw new DeveloperError(\"interval is required\");\n }\n //>>includeEnd('debug');\n\n if (interval.isEmpty) {\n return false;\n }\n\n var intervals = this._intervals;\n\n var index = binarySearch(intervals, interval, compareIntervalStartTimes);\n if (index < 0) {\n index = ~index;\n }\n\n var result = false;\n\n // Check for truncation of the end of the previous interval.\n if (\n index > 0 &&\n (JulianDate.greaterThan(intervals[index - 1].stop, interval.start) ||\n (intervals[index - 1].stop.equals(interval.start) &&\n intervals[index - 1].isStopIncluded &&\n interval.isStartIncluded))\n ) {\n result = true;\n\n if (\n JulianDate.greaterThan(intervals[index - 1].stop, interval.stop) ||\n (intervals[index - 1].isStopIncluded &&\n !interval.isStopIncluded &&\n intervals[index - 1].stop.equals(interval.stop))\n ) {\n // Break the existing interval into two pieces\n intervals.splice(\n index,\n 0,\n new TimeInterval({\n start: interval.stop,\n stop: intervals[index - 1].stop,\n isStartIncluded: !interval.isStopIncluded,\n isStopIncluded: intervals[index - 1].isStopIncluded,\n data: intervals[index - 1].data,\n })\n );\n }\n intervals[index - 1] = new TimeInterval({\n start: intervals[index - 1].start,\n stop: interval.start,\n isStartIncluded: intervals[index - 1].isStartIncluded,\n isStopIncluded: !interval.isStartIncluded,\n data: intervals[index - 1].data,\n });\n }\n\n // Check if the Start of the current interval should remain because interval.start is the same but\n // it is not included.\n if (\n index < intervals.length &&\n !interval.isStartIncluded &&\n intervals[index].isStartIncluded &&\n interval.start.equals(intervals[index].start)\n ) {\n result = true;\n\n intervals.splice(\n index,\n 0,\n new TimeInterval({\n start: intervals[index].start,\n stop: intervals[index].start,\n isStartIncluded: true,\n isStopIncluded: true,\n data: intervals[index].data,\n })\n );\n ++index;\n }\n\n // Remove any intervals that are completely overlapped by the input interval.\n while (\n index < intervals.length &&\n JulianDate.greaterThan(interval.stop, intervals[index].stop)\n ) {\n result = true;\n intervals.splice(index, 1);\n }\n\n // Check for the case where the input interval ends on the same date\n // as an existing interval.\n if (index < intervals.length && interval.stop.equals(intervals[index].stop)) {\n result = true;\n\n if (!interval.isStopIncluded && intervals[index].isStopIncluded) {\n // Last point of interval should remain because the stop date is included in\n // the existing interval but is not included in the input interval.\n if (\n index + 1 < intervals.length &&\n intervals[index + 1].start.equals(interval.stop) &&\n intervals[index].data === intervals[index + 1].data\n ) {\n // Combine single point with the next interval\n intervals.splice(index, 1);\n intervals[index] = new TimeInterval({\n start: intervals[index].start,\n stop: intervals[index].stop,\n isStartIncluded: true,\n isStopIncluded: intervals[index].isStopIncluded,\n data: intervals[index].data,\n });\n } else {\n intervals[index] = new TimeInterval({\n start: interval.stop,\n stop: interval.stop,\n isStartIncluded: true,\n isStopIncluded: true,\n data: intervals[index].data,\n });\n }\n } else {\n // Interval is completely overlapped\n intervals.splice(index, 1);\n }\n }\n\n // Truncate any partially-overlapped intervals.\n if (\n index < intervals.length &&\n (JulianDate.greaterThan(interval.stop, intervals[index].start) ||\n (interval.stop.equals(intervals[index].start) &&\n interval.isStopIncluded &&\n intervals[index].isStartIncluded))\n ) {\n result = true;\n intervals[index] = new TimeInterval({\n start: interval.stop,\n stop: intervals[index].stop,\n isStartIncluded: !interval.isStopIncluded,\n isStopIncluded: intervals[index].isStopIncluded,\n data: intervals[index].data,\n });\n }\n\n if (result) {\n this._changedEvent.raiseEvent(this);\n }\n\n return result;\n};\n\n/**\n * Creates a new instance that is the intersection of this collection and the provided collection.\n *\n * @param {TimeIntervalCollection} other The collection to intersect with.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals. If omitted, reference equality is used.\n * @param {TimeInterval.MergeCallback} [mergeCallback] A function which merges the data of the two intervals. If omitted, the data from the left interval will be used.\n * @returns {TimeIntervalCollection} A new TimeIntervalCollection which is the intersection of this collection and the provided collection.\n */\nTimeIntervalCollection.prototype.intersect = function (\n other,\n dataComparer,\n mergeCallback\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(other)) {\n throw new DeveloperError(\"other is required.\");\n }\n //>>includeEnd('debug');\n\n var result = new TimeIntervalCollection();\n var left = 0;\n var right = 0;\n var intervals = this._intervals;\n var otherIntervals = other._intervals;\n\n while (left < intervals.length && right < otherIntervals.length) {\n var leftInterval = intervals[left];\n var rightInterval = otherIntervals[right];\n if (JulianDate.lessThan(leftInterval.stop, rightInterval.start)) {\n ++left;\n } else if (JulianDate.lessThan(rightInterval.stop, leftInterval.start)) {\n ++right;\n } else {\n // The following will return an intersection whose data is 'merged' if the callback is defined\n if (\n defined(mergeCallback) ||\n (defined(dataComparer) &&\n dataComparer(leftInterval.data, rightInterval.data)) ||\n (!defined(dataComparer) && rightInterval.data === leftInterval.data)\n ) {\n var intersection = TimeInterval.intersect(\n leftInterval,\n rightInterval,\n new TimeInterval(),\n mergeCallback\n );\n if (!intersection.isEmpty) {\n // Since we start with an empty collection for 'result', and there are no overlapping intervals in 'this' (as a rule),\n // the 'intersection' will never overlap with a previous interval in 'result'. So, no need to do any additional 'merging'.\n result.addInterval(intersection, dataComparer);\n }\n }\n\n if (\n JulianDate.lessThan(leftInterval.stop, rightInterval.stop) ||\n (leftInterval.stop.equals(rightInterval.stop) &&\n !leftInterval.isStopIncluded &&\n rightInterval.isStopIncluded)\n ) {\n ++left;\n } else {\n ++right;\n }\n }\n }\n return result;\n};\n\n/**\n * Creates a new instance from a JulianDate array.\n *\n * @param {Object} options Object with the following properties:\n * @param {JulianDate[]} options.julianDates An array of ISO 8601 dates.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, <code>false</code> otherwise.\n * @param {Boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromJulianDateArray = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.julianDates)) {\n throw new DeveloperError(\"options.iso8601Array is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new TimeIntervalCollection();\n }\n\n var julianDates = options.julianDates;\n var length = julianDates.length;\n var dataCallback = options.dataCallback;\n\n var isStartIncluded = defaultValue(options.isStartIncluded, true);\n var isStopIncluded = defaultValue(options.isStopIncluded, true);\n var leadingInterval = defaultValue(options.leadingInterval, false);\n var trailingInterval = defaultValue(options.trailingInterval, false);\n var interval;\n\n // Add a default interval, which will only end up being used up to first interval\n var startIndex = 0;\n if (leadingInterval) {\n ++startIndex;\n interval = new TimeInterval({\n start: Iso8601.MINIMUM_VALUE,\n stop: julianDates[0],\n isStartIncluded: true,\n isStopIncluded: !isStartIncluded,\n });\n interval.data = defined(dataCallback)\n ? dataCallback(interval, result.length)\n : result.length;\n result.addInterval(interval);\n }\n\n for (var i = 0; i < length - 1; ++i) {\n var startDate = julianDates[i];\n var endDate = julianDates[i + 1];\n\n interval = new TimeInterval({\n start: startDate,\n stop: endDate,\n isStartIncluded: result.length === startIndex ? isStartIncluded : true,\n isStopIncluded: i === length - 2 ? isStopIncluded : false,\n });\n interval.data = defined(dataCallback)\n ? dataCallback(interval, result.length)\n : result.length;\n result.addInterval(interval);\n\n startDate = endDate;\n }\n\n if (trailingInterval) {\n interval = new TimeInterval({\n start: julianDates[length - 1],\n stop: Iso8601.MAXIMUM_VALUE,\n isStartIncluded: !isStopIncluded,\n isStopIncluded: true,\n });\n interval.data = defined(dataCallback)\n ? dataCallback(interval, result.length)\n : result.length;\n result.addInterval(interval);\n }\n\n return result;\n};\n\nvar scratchGregorianDate = new GregorianDate();\nvar monthLengths = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n/**\n * Adds duration represented as a GregorianDate to a JulianDate\n *\n * @param {JulianDate} julianDate The date.\n * @param {GregorianDate} duration An duration represented as a GregorianDate.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n *\n * @private\n */\nfunction addToDate(julianDate, duration, result) {\n if (!defined(result)) {\n result = new JulianDate();\n }\n JulianDate.toGregorianDate(julianDate, scratchGregorianDate);\n\n var millisecond = scratchGregorianDate.millisecond + duration.millisecond;\n var second = scratchGregorianDate.second + duration.second;\n var minute = scratchGregorianDate.minute + duration.minute;\n var hour = scratchGregorianDate.hour + duration.hour;\n var day = scratchGregorianDate.day + duration.day;\n var month = scratchGregorianDate.month + duration.month;\n var year = scratchGregorianDate.year + duration.year;\n\n if (millisecond >= 1000) {\n second += Math.floor(millisecond / 1000);\n millisecond = millisecond % 1000;\n }\n\n if (second >= 60) {\n minute += Math.floor(second / 60);\n second = second % 60;\n }\n\n if (minute >= 60) {\n hour += Math.floor(minute / 60);\n minute = minute % 60;\n }\n\n if (hour >= 24) {\n day += Math.floor(hour / 24);\n hour = hour % 24;\n }\n\n // If days is greater than the month's length we need to remove those number of days,\n // readjust month and year and repeat until days is less than the month's length.\n monthLengths[2] = isLeapYear(year) ? 29 : 28;\n while (day > monthLengths[month] || month >= 13) {\n if (day > monthLengths[month]) {\n day -= monthLengths[month];\n ++month;\n }\n\n if (month >= 13) {\n --month;\n year += Math.floor(month / 12);\n month = month % 12;\n ++month;\n }\n\n monthLengths[2] = isLeapYear(year) ? 29 : 28;\n }\n\n scratchGregorianDate.millisecond = millisecond;\n scratchGregorianDate.second = second;\n scratchGregorianDate.minute = minute;\n scratchGregorianDate.hour = hour;\n scratchGregorianDate.day = day;\n scratchGregorianDate.month = month;\n scratchGregorianDate.year = year;\n\n return JulianDate.fromGregorianDate(scratchGregorianDate, result);\n}\n\nvar scratchJulianDate = new JulianDate();\nvar durationRegex = /P(?:([\\d.,]+)Y)?(?:([\\d.,]+)M)?(?:([\\d.,]+)W)?(?:([\\d.,]+)D)?(?:T(?:([\\d.,]+)H)?(?:([\\d.,]+)M)?(?:([\\d.,]+)S)?)?/;\n\n/**\n * Parses ISO8601 duration string\n *\n * @param {String} iso8601 An ISO 8601 duration.\n * @param {GregorianDate} result An existing instance to use for the result.\n * @returns {Boolean} True is parsing succeeded, false otherwise\n *\n * @private\n */\nfunction parseDuration(iso8601, result) {\n if (!defined(iso8601) || iso8601.length === 0) {\n return false;\n }\n\n // Reset object\n result.year = 0;\n result.month = 0;\n result.day = 0;\n result.hour = 0;\n result.minute = 0;\n result.second = 0;\n result.millisecond = 0;\n\n if (iso8601[0] === \"P\") {\n var matches = iso8601.match(durationRegex);\n if (!defined(matches)) {\n return false;\n }\n if (defined(matches[1])) {\n // Years\n result.year = Number(matches[1].replace(\",\", \".\"));\n }\n if (defined(matches[2])) {\n // Months\n result.month = Number(matches[2].replace(\",\", \".\"));\n }\n if (defined(matches[3])) {\n // Weeks\n result.day = Number(matches[3].replace(\",\", \".\")) * 7;\n }\n if (defined(matches[4])) {\n // Days\n result.day += Number(matches[4].replace(\",\", \".\"));\n }\n if (defined(matches[5])) {\n // Hours\n result.hour = Number(matches[5].replace(\",\", \".\"));\n }\n if (defined(matches[6])) {\n // Weeks\n result.minute = Number(matches[6].replace(\",\", \".\"));\n }\n if (defined(matches[7])) {\n // Seconds\n var seconds = Number(matches[7].replace(\",\", \".\"));\n result.second = Math.floor(seconds);\n result.millisecond = (seconds % 1) * 1000;\n }\n } else {\n // They can technically specify the duration as a normal date with some caveats. Try our best to load it.\n if (iso8601[iso8601.length - 1] !== \"Z\") {\n // It's not a date, its a duration, so it always has to be UTC\n iso8601 += \"Z\";\n }\n JulianDate.toGregorianDate(\n JulianDate.fromIso8601(iso8601, scratchJulianDate),\n result\n );\n }\n\n // A duration of 0 will cause an infinite loop, so just make sure something is non-zero\n return (\n result.year ||\n result.month ||\n result.day ||\n result.hour ||\n result.minute ||\n result.second ||\n result.millisecond\n );\n}\n\nvar scratchDuration = new GregorianDate();\n/**\n * Creates a new instance from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} time interval (start/end/duration).\n *\n * @param {Object} options Object with the following properties:\n * @param {String} options.iso8601 An ISO 8601 interval.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, <code>false</code> otherwise.\n * @param {Boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601 = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.iso8601)) {\n throw new DeveloperError(\"options.iso8601 is required.\");\n }\n //>>includeEnd('debug');\n\n var dates = options.iso8601.split(\"/\");\n var start = JulianDate.fromIso8601(dates[0]);\n var stop = JulianDate.fromIso8601(dates[1]);\n var julianDates = [];\n\n if (!parseDuration(dates[2], scratchDuration)) {\n julianDates.push(start, stop);\n } else {\n var date = JulianDate.clone(start);\n julianDates.push(date);\n while (JulianDate.compare(date, stop) < 0) {\n date = addToDate(date, scratchDuration);\n var afterStop = JulianDate.compare(stop, date) <= 0;\n if (afterStop) {\n JulianDate.clone(stop, date);\n }\n\n julianDates.push(date);\n }\n }\n\n return TimeIntervalCollection.fromJulianDateArray(\n {\n julianDates: julianDates,\n isStartIncluded: options.isStartIncluded,\n isStopIncluded: options.isStopIncluded,\n leadingInterval: options.leadingInterval,\n trailingInterval: options.trailingInterval,\n dataCallback: options.dataCallback,\n },\n result\n );\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date array.\n *\n * @param {Object} options Object with the following properties:\n * @param {String[]} options.iso8601Dates An array of ISO 8601 dates.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, <code>false</code> otherwise.\n * @param {Boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601DateArray = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.iso8601Dates)) {\n throw new DeveloperError(\"options.iso8601Dates is required.\");\n }\n //>>includeEnd('debug');\n\n return TimeIntervalCollection.fromJulianDateArray(\n {\n julianDates: options.iso8601Dates.map(function (date) {\n return JulianDate.fromIso8601(date);\n }),\n isStartIncluded: options.isStartIncluded,\n isStopIncluded: options.isStopIncluded,\n leadingInterval: options.leadingInterval,\n trailingInterval: options.trailingInterval,\n dataCallback: options.dataCallback,\n },\n result\n );\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} duration array.\n *\n * @param {Object} options Object with the following properties:\n * @param {JulianDate} options.epoch An date that the durations are relative to.\n * @param {String} options.iso8601Durations An array of ISO 8601 durations.\n * @param {Boolean} [options.relativeToPrevious=false] <code>true</code> if durations are relative to previous date, <code>false</code> if always relative to the epoch.\n * @param {Boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {Boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time, <code>false</code> otherwise.\n * @param {Boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE, <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601DurationArray = function (options, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.epoch)) {\n throw new DeveloperError(\"options.epoch is required.\");\n }\n if (!defined(options.iso8601Durations)) {\n throw new DeveloperError(\"options.iso8601Durations is required.\");\n }\n //>>includeEnd('debug');\n\n var epoch = options.epoch;\n var iso8601Durations = options.iso8601Durations;\n var relativeToPrevious = defaultValue(options.relativeToPrevious, false);\n var julianDates = [];\n var date, previousDate;\n\n var length = iso8601Durations.length;\n for (var i = 0; i < length; ++i) {\n // Allow a duration of 0 on the first iteration, because then it is just the epoch\n if (parseDuration(iso8601Durations[i], scratchDuration) || i === 0) {\n if (relativeToPrevious && defined(previousDate)) {\n date = addToDate(previousDate, scratchDuration);\n } else {\n date = addToDate(epoch, scratchDuration);\n }\n julianDates.push(date);\n previousDate = date;\n }\n }\n\n return TimeIntervalCollection.fromJulianDateArray(\n {\n julianDates: julianDates,\n isStartIncluded: options.isStartIncluded,\n isStopIncluded: options.isStopIncluded,\n leadingInterval: options.leadingInterval,\n trailingInterval: options.trailingInterval,\n dataCallback: options.dataCallback,\n },\n result\n );\n};\nexport default TimeIntervalCollection;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nvar defaultScale = new Cartesian3(1.0, 1.0, 1.0);\nvar defaultTranslation = Cartesian3.ZERO;\nvar defaultRotation = Quaternion.IDENTITY;\n\n/**\n * An affine transformation defined by a translation, rotation, and scale.\n * @alias TranslationRotationScale\n * @constructor\n *\n * @param {Cartesian3} [translation=Cartesian3.ZERO] A {@link Cartesian3} specifying the (x, y, z) translation to apply to the node.\n * @param {Quaternion} [rotation=Quaternion.IDENTITY] A {@link Quaternion} specifying the (x, y, z, w) rotation to apply to the node.\n * @param {Cartesian3} [scale=new Cartesian3(1.0, 1.0, 1.0)] A {@link Cartesian3} specifying the (x, y, z) scaling to apply to the node.\n */\nfunction TranslationRotationScale(translation, rotation, scale) {\n /**\n * Gets or sets the (x, y, z) translation to apply to the node.\n * @type {Cartesian3}\n * @default Cartesian3.ZERO\n */\n this.translation = Cartesian3.clone(\n defaultValue(translation, defaultTranslation)\n );\n\n /**\n * Gets or sets the (x, y, z, w) rotation to apply to the node.\n * @type {Quaternion}\n * @default Quaternion.IDENTITY\n */\n this.rotation = Quaternion.clone(defaultValue(rotation, defaultRotation));\n\n /**\n * Gets or sets the (x, y, z) scaling to apply to the node.\n * @type {Cartesian3}\n * @default new Cartesian3(1.0, 1.0, 1.0)\n */\n this.scale = Cartesian3.clone(defaultValue(scale, defaultScale));\n}\n\n/**\n * Compares this instance against the provided instance and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TranslationRotationScale} [right] The right hand side TranslationRotationScale.\n * @returns {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTranslationRotationScale.prototype.equals = function (right) {\n return (\n this === right ||\n (defined(right) &&\n Cartesian3.equals(this.translation, right.translation) &&\n Quaternion.equals(this.rotation, right.rotation) &&\n Cartesian3.equals(this.scale, right.scale))\n );\n};\nexport default TranslationRotationScale;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport Iso8601 from \"./Iso8601.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * Synchronizes a video element with a simulation clock.\n *\n * @alias VideoSynchronizer\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Clock} [options.clock] The clock instance used to drive the video.\n * @param {HTMLVideoElement} [options.element] The video element to be synchronized.\n * @param {JulianDate} [options.epoch=Iso8601.MINIMUM_VALUE] The simulation time that marks the start of the video.\n * @param {Number} [options.tolerance=1.0] The maximum amount of time, in seconds, that the clock and video can diverge.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Video.html|Video Material Demo}\n */\nfunction VideoSynchronizer(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._clock = undefined;\n this._element = undefined;\n this._clockSubscription = undefined;\n this._seekFunction = undefined;\n this._lastPlaybackRate = undefined;\n\n this.clock = options.clock;\n this.element = options.element;\n\n /**\n * Gets or sets the simulation time that marks the start of the video.\n * @type {JulianDate}\n * @default Iso8601.MINIMUM_VALUE\n */\n this.epoch = defaultValue(options.epoch, Iso8601.MINIMUM_VALUE);\n\n /**\n * Gets or sets the amount of time in seconds the video's currentTime\n * and the clock's currentTime can diverge before a video seek is performed.\n * Lower values make the synchronization more accurate but video\n * performance might suffer. Higher values provide better performance\n * but at the cost of accuracy.\n * @type {Number}\n * @default 1.0\n */\n this.tolerance = defaultValue(options.tolerance, 1.0);\n\n this._seeking = false;\n this._seekFunction = undefined;\n this._firstTickAfterSeek = false;\n}\n\nObject.defineProperties(VideoSynchronizer.prototype, {\n /**\n * Gets or sets the clock used to drive the video element.\n *\n * @memberof VideoSynchronizer.prototype\n * @type {Clock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n set: function (value) {\n var oldValue = this._clock;\n\n if (oldValue === value) {\n return;\n }\n\n if (defined(oldValue)) {\n this._clockSubscription();\n this._clockSubscription = undefined;\n }\n\n if (defined(value)) {\n this._clockSubscription = value.onTick.addEventListener(\n VideoSynchronizer.prototype._onTick,\n this\n );\n }\n\n this._clock = value;\n },\n },\n /**\n * Gets or sets the video element to synchronize.\n *\n * @memberof VideoSynchronizer.prototype\n * @type {HTMLVideoElement}\n */\n element: {\n get: function () {\n return this._element;\n },\n set: function (value) {\n var oldValue = this._element;\n\n if (oldValue === value) {\n return;\n }\n\n if (defined(oldValue)) {\n oldValue.removeEventListener(\"seeked\", this._seekFunction, false);\n }\n\n if (defined(value)) {\n this._seeking = false;\n this._seekFunction = createSeekFunction(this);\n value.addEventListener(\"seeked\", this._seekFunction, false);\n }\n\n this._element = value;\n this._seeking = false;\n this._firstTickAfterSeek = false;\n },\n },\n});\n\n/**\n * Destroys and resources used by the object. Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVideoSynchronizer.prototype.destroy = function () {\n this.element = undefined;\n this.clock = undefined;\n return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nVideoSynchronizer.prototype.isDestroyed = function () {\n return false;\n};\n\nVideoSynchronizer.prototype._trySetPlaybackRate = function (clock) {\n if (this._lastPlaybackRate === clock.multiplier) {\n return;\n }\n\n var element = this._element;\n try {\n element.playbackRate = clock.multiplier;\n } catch (error) {\n // Seek manually for unsupported playbackRates.\n element.playbackRate = 0.0;\n }\n this._lastPlaybackRate = clock.multiplier;\n};\n\nVideoSynchronizer.prototype._onTick = function (clock) {\n var element = this._element;\n if (!defined(element) || element.readyState < 2) {\n return;\n }\n\n var paused = element.paused;\n var shouldAnimate = clock.shouldAnimate;\n if (shouldAnimate === paused) {\n if (shouldAnimate) {\n element.play();\n } else {\n element.pause();\n }\n }\n\n //We need to avoid constant seeking or the video will\n //never contain a complete frame for us to render.\n //So don't do anything if we're seeing or on the first\n //tick after a seek (the latter of which allows the frame\n //to actually be rendered.\n if (this._seeking || this._firstTickAfterSeek) {\n this._firstTickAfterSeek = false;\n return;\n }\n\n this._trySetPlaybackRate(clock);\n\n var clockTime = clock.currentTime;\n var epoch = defaultValue(this.epoch, Iso8601.MINIMUM_VALUE);\n var videoTime = JulianDate.secondsDifference(clockTime, epoch);\n\n var duration = element.duration;\n var desiredTime;\n var currentTime = element.currentTime;\n if (element.loop) {\n videoTime = videoTime % duration;\n if (videoTime < 0.0) {\n videoTime = duration - videoTime;\n }\n desiredTime = videoTime;\n } else if (videoTime > duration) {\n desiredTime = duration;\n } else if (videoTime < 0.0) {\n desiredTime = 0.0;\n } else {\n desiredTime = videoTime;\n }\n\n //If the playing video's time and the scene's clock time\n //ever drift too far apart, we want to set the video to match\n var tolerance = shouldAnimate ? defaultValue(this.tolerance, 1.0) : 0.001;\n if (Math.abs(desiredTime - currentTime) > tolerance) {\n this._seeking = true;\n element.currentTime = desiredTime;\n }\n};\n\nfunction createSeekFunction(that) {\n return function () {\n that._seeking = false;\n that._firstTickAfterSeek = true;\n };\n}\nexport default VideoSynchronizer;\n","import when from \"../ThirdParty/when.js\";\nimport Credit from \"./Credit.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport getImagePixels from \"./getImagePixels.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileProviderError from \"./TileProviderError.js\";\n\nfunction DataRectangle(rectangle, maxLevel) {\n this.rectangle = rectangle;\n this.maxLevel = maxLevel;\n}\n\n/**\n * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}.\n *\n * @alias VRTheWorldTerrainProvider\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String} options.url The URL of the VR-TheWorld TileMap.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid. If this parameter is not\n * specified, the WGS84 ellipsoid is used.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n *\n * @example\n * var terrainProvider = new Cesium.VRTheWorldTerrainProvider({\n * url : 'https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/'\n * });\n * viewer.terrainProvider = terrainProvider;\n *\n * @see TerrainProvider\n */\nfunction VRTheWorldTerrainProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n var resource = Resource.createIfNeeded(options.url);\n\n this._resource = resource;\n\n this._errorEvent = new Event();\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._terrainDataStructure = {\n heightScale: 1.0 / 1000.0,\n heightOffset: -1000.0,\n elementsPerHeight: 3,\n stride: 4,\n elementMultiplier: 256.0,\n isBigEndian: true,\n lowestEncodedHeight: 0,\n highestEncodedHeight: 256 * 256 * 256 - 1,\n };\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n this._tilingScheme = undefined;\n this._rectangles = [];\n\n var that = this;\n var metadataError;\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n function metadataSuccess(xml) {\n var srs = xml.getElementsByTagName(\"SRS\")[0].textContent;\n if (srs === \"EPSG:4326\") {\n that._tilingScheme = new GeographicTilingScheme({ ellipsoid: ellipsoid });\n } else {\n metadataFailure(\"SRS \" + srs + \" is not supported.\");\n return;\n }\n\n var tileFormat = xml.getElementsByTagName(\"TileFormat\")[0];\n that._heightmapWidth = parseInt(tileFormat.getAttribute(\"width\"), 10);\n that._heightmapHeight = parseInt(tileFormat.getAttribute(\"height\"), 10);\n that._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n ellipsoid,\n Math.min(that._heightmapWidth, that._heightmapHeight),\n that._tilingScheme.getNumberOfXTilesAtLevel(0)\n );\n\n var dataRectangles = xml.getElementsByTagName(\"DataExtent\");\n\n for (var i = 0; i < dataRectangles.length; ++i) {\n var dataRectangle = dataRectangles[i];\n\n var west = CesiumMath.toRadians(\n parseFloat(dataRectangle.getAttribute(\"minx\"))\n );\n var south = CesiumMath.toRadians(\n parseFloat(dataRectangle.getAttribute(\"miny\"))\n );\n var east = CesiumMath.toRadians(\n parseFloat(dataRectangle.getAttribute(\"maxx\"))\n );\n var north = CesiumMath.toRadians(\n parseFloat(dataRectangle.getAttribute(\"maxy\"))\n );\n var maxLevel = parseInt(dataRectangle.getAttribute(\"maxlevel\"), 10);\n\n that._rectangles.push(\n new DataRectangle(new Rectangle(west, south, east, north), maxLevel)\n );\n }\n\n that._ready = true;\n that._readyPromise.resolve(true);\n }\n\n function metadataFailure(e) {\n var message = defaultValue(\n e,\n \"An error occurred while accessing \" + that._resource.url + \".\"\n );\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n }\n\n function requestMetadata() {\n when(that._resource.fetchXML(), metadataSuccess, metadataFailure);\n }\n\n requestMetadata();\n}\n\nObject.defineProperties(VRTheWorldTerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link VRTheWorldTerrainProvider#ready} returns true.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {GeographicTilingScheme}\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link VRTheWorldTerrainProvider#ready} returns true.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Boolean}\n */\n hasWaterMask: {\n get: function () {\n return false;\n },\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {Boolean}\n */\n hasVertexNormals: {\n get: function () {\n return false;\n },\n },\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof VRTheWorldTerrainProvider.prototype\n * @type {TileAvailability}\n */\n availability: {\n get: function () {\n return undefined;\n },\n },\n});\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link VRTheWorldTerrainProvider#ready} returns true. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<TerrainData>|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n */\nVRTheWorldTerrainProvider.prototype.requestTileGeometry = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n\n var yTiles = this._tilingScheme.getNumberOfYTilesAtLevel(level);\n var resource = this._resource.getDerivedResource({\n url: level + \"/\" + x + \"/\" + (yTiles - y - 1) + \".tif\",\n queryParameters: {\n cesium: true,\n },\n request: request,\n });\n var promise = resource.fetchImage({\n preferImageBitmap: true,\n });\n if (!defined(promise)) {\n return undefined;\n }\n\n var that = this;\n return when(promise).then(function (image) {\n return new HeightmapTerrainData({\n buffer: getImagePixels(image),\n width: that._heightmapWidth,\n height: that._heightmapHeight,\n childTileMask: getChildMask(that, x, y, level),\n structure: that._terrainDataStructure,\n });\n });\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nVRTheWorldTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"requestTileGeometry must not be called before ready returns true.\"\n );\n }\n //>>includeEnd('debug');\n return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\nvar rectangleScratch = new Rectangle();\n\nfunction getChildMask(provider, x, y, level) {\n var tilingScheme = provider._tilingScheme;\n var rectangles = provider._rectangles;\n var parentRectangle = tilingScheme.tileXYToRectangle(x, y, level);\n\n var childMask = 0;\n\n for (var i = 0; i < rectangles.length && childMask !== 15; ++i) {\n var rectangle = rectangles[i];\n if (rectangle.maxLevel <= level) {\n continue;\n }\n\n var testRectangle = rectangle.rectangle;\n\n var intersection = Rectangle.intersection(\n testRectangle,\n parentRectangle,\n rectangleScratch\n );\n if (defined(intersection)) {\n // Parent tile is inside this rectangle, so at least one child is, too.\n if (\n isTileInRectangle(tilingScheme, testRectangle, x * 2, y * 2, level + 1)\n ) {\n childMask |= 4; // northwest\n }\n if (\n isTileInRectangle(\n tilingScheme,\n testRectangle,\n x * 2 + 1,\n y * 2,\n level + 1\n )\n ) {\n childMask |= 8; // northeast\n }\n if (\n isTileInRectangle(\n tilingScheme,\n testRectangle,\n x * 2,\n y * 2 + 1,\n level + 1\n )\n ) {\n childMask |= 1; // southwest\n }\n if (\n isTileInRectangle(\n tilingScheme,\n testRectangle,\n x * 2 + 1,\n y * 2 + 1,\n level + 1\n )\n ) {\n childMask |= 2; // southeast\n }\n }\n }\n\n return childMask;\n}\n\nfunction isTileInRectangle(tilingScheme, rectangle, x, y, level) {\n var tileRectangle = tilingScheme.tileXYToRectangle(x, y, level);\n return defined(\n Rectangle.intersection(tileRectangle, rectangle, rectangleScratch)\n );\n}\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean} Undefined if not supported, otherwise true or false.\n */\nVRTheWorldTerrainProvider.prototype.getTileDataAvailable = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nVRTheWorldTerrainProvider.prototype.loadTileDataAvailability = function (\n x,\n y,\n level\n) {\n return undefined;\n};\nexport default VRTheWorldTerrainProvider;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\n\n/**\n * @private\n */\nvar WallGeometryLibrary = {};\n\nfunction latLonEquals(c0, c1) {\n return (\n CesiumMath.equalsEpsilon(c0.latitude, c1.latitude, CesiumMath.EPSILON10) &&\n CesiumMath.equalsEpsilon(c0.longitude, c1.longitude, CesiumMath.EPSILON10)\n );\n}\n\nvar scratchCartographic1 = new Cartographic();\nvar scratchCartographic2 = new Cartographic();\nfunction removeDuplicates(ellipsoid, positions, topHeights, bottomHeights) {\n positions = arrayRemoveDuplicates(positions, Cartesian3.equalsEpsilon, true);\n\n var length = positions.length;\n if (length < 2) {\n return;\n }\n\n var hasBottomHeights = defined(bottomHeights);\n var hasTopHeights = defined(topHeights);\n var hasAllZeroHeights = true;\n\n var cleanedPositions = new Array(length);\n var cleanedTopHeights = new Array(length);\n var cleanedBottomHeights = new Array(length);\n\n var v0 = positions[0];\n cleanedPositions[0] = v0;\n\n var c0 = ellipsoid.cartesianToCartographic(v0, scratchCartographic1);\n if (hasTopHeights) {\n c0.height = topHeights[0];\n }\n\n hasAllZeroHeights = hasAllZeroHeights && c0.height <= 0;\n\n cleanedTopHeights[0] = c0.height;\n\n if (hasBottomHeights) {\n cleanedBottomHeights[0] = bottomHeights[0];\n } else {\n cleanedBottomHeights[0] = 0.0;\n }\n\n var index = 1;\n for (var i = 1; i < length; ++i) {\n var v1 = positions[i];\n var c1 = ellipsoid.cartesianToCartographic(v1, scratchCartographic2);\n if (hasTopHeights) {\n c1.height = topHeights[i];\n }\n hasAllZeroHeights = hasAllZeroHeights && c1.height <= 0;\n\n if (!latLonEquals(c0, c1)) {\n cleanedPositions[index] = v1; // Shallow copy!\n cleanedTopHeights[index] = c1.height;\n\n if (hasBottomHeights) {\n cleanedBottomHeights[index] = bottomHeights[i];\n } else {\n cleanedBottomHeights[index] = 0.0;\n }\n\n Cartographic.clone(c1, c0);\n ++index;\n } else if (c0.height < c1.height) {\n cleanedTopHeights[index - 1] = c1.height;\n }\n }\n\n if (hasAllZeroHeights || index < 2) {\n return;\n }\n\n cleanedPositions.length = index;\n cleanedTopHeights.length = index;\n cleanedBottomHeights.length = index;\n\n return {\n positions: cleanedPositions,\n topHeights: cleanedTopHeights,\n bottomHeights: cleanedBottomHeights,\n };\n}\n\nvar positionsArrayScratch = new Array(2);\nvar heightsArrayScratch = new Array(2);\nvar generateArcOptionsScratch = {\n positions: undefined,\n height: undefined,\n granularity: undefined,\n ellipsoid: undefined,\n};\n\n/**\n * @private\n */\nWallGeometryLibrary.computePositions = function (\n ellipsoid,\n wallPositions,\n maximumHeights,\n minimumHeights,\n granularity,\n duplicateCorners\n) {\n var o = removeDuplicates(\n ellipsoid,\n wallPositions,\n maximumHeights,\n minimumHeights\n );\n\n if (!defined(o)) {\n return;\n }\n\n wallPositions = o.positions;\n maximumHeights = o.topHeights;\n minimumHeights = o.bottomHeights;\n\n var length = wallPositions.length;\n var numCorners = length - 2;\n var topPositions;\n var bottomPositions;\n\n var minDistance = CesiumMath.chordLength(\n granularity,\n ellipsoid.maximumRadius\n );\n\n var generateArcOptions = generateArcOptionsScratch;\n generateArcOptions.minDistance = minDistance;\n generateArcOptions.ellipsoid = ellipsoid;\n\n if (duplicateCorners) {\n var count = 0;\n var i;\n\n for (i = 0; i < length - 1; i++) {\n count +=\n PolylinePipeline.numberOfPoints(\n wallPositions[i],\n wallPositions[i + 1],\n minDistance\n ) + 1;\n }\n\n topPositions = new Float64Array(count * 3);\n bottomPositions = new Float64Array(count * 3);\n\n var generateArcPositions = positionsArrayScratch;\n var generateArcHeights = heightsArrayScratch;\n generateArcOptions.positions = generateArcPositions;\n generateArcOptions.height = generateArcHeights;\n\n var offset = 0;\n for (i = 0; i < length - 1; i++) {\n generateArcPositions[0] = wallPositions[i];\n generateArcPositions[1] = wallPositions[i + 1];\n\n generateArcHeights[0] = maximumHeights[i];\n generateArcHeights[1] = maximumHeights[i + 1];\n\n var pos = PolylinePipeline.generateArc(generateArcOptions);\n topPositions.set(pos, offset);\n\n generateArcHeights[0] = minimumHeights[i];\n generateArcHeights[1] = minimumHeights[i + 1];\n\n bottomPositions.set(\n PolylinePipeline.generateArc(generateArcOptions),\n offset\n );\n\n offset += pos.length;\n }\n } else {\n generateArcOptions.positions = wallPositions;\n generateArcOptions.height = maximumHeights;\n topPositions = new Float64Array(\n PolylinePipeline.generateArc(generateArcOptions)\n );\n\n generateArcOptions.height = minimumHeights;\n bottomPositions = new Float64Array(\n PolylinePipeline.generateArc(generateArcOptions)\n );\n }\n\n return {\n bottomPositions: bottomPositions,\n topPositions: topPositions,\n numCorners: numCorners,\n };\n};\nexport default WallGeometryLibrary;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\n\nvar scratchCartesian3Position1 = new Cartesian3();\nvar scratchCartesian3Position2 = new Cartesian3();\nvar scratchCartesian3Position3 = new Cartesian3();\nvar scratchCartesian3Position4 = new Cartesian3();\nvar scratchCartesian3Position5 = new Cartesian3();\nvar scratchBitangent = new Cartesian3();\nvar scratchTangent = new Cartesian3();\nvar scratchNormal = new Cartesian3();\n\n/**\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @alias WallGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number[]} [options.maximumHeights] An array parallel to <code>positions</code> that give the maximum height of the\n * wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {Number[]} [options.minimumHeights] An array parallel to <code>positions</code> that give the minimum height of the\n * wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\n *\n * @see WallGeometry#createGeometry\n * @see WallGeometry#fromConstantHeight\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Wall.html|Cesium Sandcastle Wall Demo}\n *\n * @example\n * // create a wall that spans from ground level to 10000 meters\n * var wall = new Cesium.WallGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n * 19.0, 47.0, 10000.0,\n * 19.0, 48.0, 10000.0,\n * 20.0, 48.0, 10000.0,\n * 20.0, 47.0, 10000.0,\n * 19.0, 47.0, 10000.0\n * ])\n * });\n * var geometry = Cesium.WallGeometry.createGeometry(wall);\n */\nfunction WallGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var wallPositions = options.positions;\n var maximumHeights = options.maximumHeights;\n var minimumHeights = options.minimumHeights;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(wallPositions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n if (\n defined(maximumHeights) &&\n maximumHeights.length !== wallPositions.length\n ) {\n throw new DeveloperError(\n \"options.positions and options.maximumHeights must have the same length.\"\n );\n }\n if (\n defined(minimumHeights) &&\n minimumHeights.length !== wallPositions.length\n ) {\n throw new DeveloperError(\n \"options.positions and options.minimumHeights must have the same length.\"\n );\n }\n //>>includeEnd('debug');\n\n var vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n this._positions = wallPositions;\n this._minimumHeights = minimumHeights;\n this._maximumHeights = maximumHeights;\n this._vertexFormat = VertexFormat.clone(vertexFormat);\n this._granularity = granularity;\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._workerName = \"createWallGeometry\";\n\n var numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\n if (defined(minimumHeights)) {\n numComponents += minimumHeights.length;\n }\n if (defined(maximumHeights)) {\n numComponents += maximumHeights.length;\n }\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength =\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 1;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {WallGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nWallGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var minimumHeights = value._minimumHeights;\n length = defined(minimumHeights) ? minimumHeights.length : 0;\n array[startingIndex++] = length;\n\n if (defined(minimumHeights)) {\n for (i = 0; i < length; ++i) {\n array[startingIndex++] = minimumHeights[i];\n }\n }\n\n var maximumHeights = value._maximumHeights;\n length = defined(maximumHeights) ? maximumHeights.length : 0;\n array[startingIndex++] = length;\n\n if (defined(maximumHeights)) {\n for (i = 0; i < length; ++i) {\n array[startingIndex++] = maximumHeights[i];\n }\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\n startingIndex += VertexFormat.packedLength;\n\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchVertexFormat = new VertexFormat();\nvar scratchOptions = {\n positions: undefined,\n minimumHeights: undefined,\n maximumHeights: undefined,\n ellipsoid: scratchEllipsoid,\n vertexFormat: scratchVertexFormat,\n granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {WallGeometry} [result] The object into which to store the result.\n * @returns {WallGeometry} The modified result parameter or a new WallGeometry instance if one was not provided.\n */\nWallGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var minimumHeights;\n\n if (length > 0) {\n minimumHeights = new Array(length);\n for (i = 0; i < length; ++i) {\n minimumHeights[i] = array[startingIndex++];\n }\n }\n\n length = array[startingIndex++];\n var maximumHeights;\n\n if (length > 0) {\n maximumHeights = new Array(length);\n for (i = 0; i < length; ++i) {\n maximumHeights[i] = array[startingIndex++];\n }\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var vertexFormat = VertexFormat.unpack(\n array,\n startingIndex,\n scratchVertexFormat\n );\n startingIndex += VertexFormat.packedLength;\n\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.positions = positions;\n scratchOptions.minimumHeights = minimumHeights;\n scratchOptions.maximumHeights = maximumHeights;\n scratchOptions.granularity = granularity;\n return new WallGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._minimumHeights = minimumHeights;\n result._maximumHeights = maximumHeights;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n result._granularity = granularity;\n\n return result;\n};\n\n/**\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the\n * wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the\n * wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @returns {WallGeometry}\n *\n *\n * @example\n * // create a wall that spans from 10000 meters to 20000 meters\n * var wall = Cesium.WallGeometry.fromConstantHeights({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 19.0, 47.0,\n * 19.0, 48.0,\n * 20.0, 48.0,\n * 20.0, 47.0,\n * 19.0, 47.0,\n * ]),\n * minimumHeight : 20000.0,\n * maximumHeight : 10000.0\n * });\n * var geometry = Cesium.WallGeometry.createGeometry(wall);\n *\n * @see WallGeometry#createGeometry\n */\nWallGeometry.fromConstantHeights = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n //>>includeEnd('debug');\n\n var minHeights;\n var maxHeights;\n\n var min = options.minimumHeight;\n var max = options.maximumHeight;\n\n var doMin = defined(min);\n var doMax = defined(max);\n if (doMin || doMax) {\n var length = positions.length;\n minHeights = doMin ? new Array(length) : undefined;\n maxHeights = doMax ? new Array(length) : undefined;\n\n for (var i = 0; i < length; ++i) {\n if (doMin) {\n minHeights[i] = min;\n }\n\n if (doMax) {\n maxHeights[i] = max;\n }\n }\n }\n\n var newOptions = {\n positions: positions,\n maximumHeights: maxHeights,\n minimumHeights: minHeights,\n ellipsoid: options.ellipsoid,\n vertexFormat: options.vertexFormat,\n };\n return new WallGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a wall, including its vertices, indices, and a bounding sphere.\n *\n * @param {WallGeometry} wallGeometry A description of the wall.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nWallGeometry.createGeometry = function (wallGeometry) {\n var wallPositions = wallGeometry._positions;\n var minimumHeights = wallGeometry._minimumHeights;\n var maximumHeights = wallGeometry._maximumHeights;\n var vertexFormat = wallGeometry._vertexFormat;\n var granularity = wallGeometry._granularity;\n var ellipsoid = wallGeometry._ellipsoid;\n\n var pos = WallGeometryLibrary.computePositions(\n ellipsoid,\n wallPositions,\n maximumHeights,\n minimumHeights,\n granularity,\n true\n );\n if (!defined(pos)) {\n return;\n }\n\n var bottomPositions = pos.bottomPositions;\n var topPositions = pos.topPositions;\n var numCorners = pos.numCorners;\n\n var length = topPositions.length;\n var size = length * 2;\n\n var positions = vertexFormat.position ? new Float64Array(size) : undefined;\n var normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n var tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n var bitangents = vertexFormat.bitangent ? new Float32Array(size) : undefined;\n var textureCoordinates = vertexFormat.st\n ? new Float32Array((size / 3) * 2)\n : undefined;\n\n var positionIndex = 0;\n var normalIndex = 0;\n var bitangentIndex = 0;\n var tangentIndex = 0;\n var stIndex = 0;\n\n // add lower and upper points one after the other, lower\n // points being even and upper points being odd\n var normal = scratchNormal;\n var tangent = scratchTangent;\n var bitangent = scratchBitangent;\n var recomputeNormal = true;\n length /= 3;\n var i;\n var s = 0;\n var ds = 1 / (length - wallPositions.length + 1);\n for (i = 0; i < length; ++i) {\n var i3 = i * 3;\n var topPosition = Cartesian3.fromArray(\n topPositions,\n i3,\n scratchCartesian3Position1\n );\n var bottomPosition = Cartesian3.fromArray(\n bottomPositions,\n i3,\n scratchCartesian3Position2\n );\n if (vertexFormat.position) {\n // insert the lower point\n positions[positionIndex++] = bottomPosition.x;\n positions[positionIndex++] = bottomPosition.y;\n positions[positionIndex++] = bottomPosition.z;\n\n // insert the upper point\n positions[positionIndex++] = topPosition.x;\n positions[positionIndex++] = topPosition.y;\n positions[positionIndex++] = topPosition.z;\n }\n\n if (vertexFormat.st) {\n textureCoordinates[stIndex++] = s;\n textureCoordinates[stIndex++] = 0.0;\n\n textureCoordinates[stIndex++] = s;\n textureCoordinates[stIndex++] = 1.0;\n }\n\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n var nextPosition;\n var nextTop = Cartesian3.clone(\n Cartesian3.ZERO,\n scratchCartesian3Position5\n );\n var groundPosition = ellipsoid.scaleToGeodeticSurface(\n Cartesian3.fromArray(topPositions, i3, scratchCartesian3Position2),\n scratchCartesian3Position2\n );\n if (i + 1 < length) {\n nextPosition = ellipsoid.scaleToGeodeticSurface(\n Cartesian3.fromArray(\n topPositions,\n i3 + 3,\n scratchCartesian3Position3\n ),\n scratchCartesian3Position3\n );\n nextTop = Cartesian3.fromArray(\n topPositions,\n i3 + 3,\n scratchCartesian3Position5\n );\n }\n\n if (recomputeNormal) {\n var scalednextPosition = Cartesian3.subtract(\n nextTop,\n topPosition,\n scratchCartesian3Position4\n );\n var scaledGroundPosition = Cartesian3.subtract(\n groundPosition,\n topPosition,\n scratchCartesian3Position1\n );\n normal = Cartesian3.normalize(\n Cartesian3.cross(scaledGroundPosition, scalednextPosition, normal),\n normal\n );\n recomputeNormal = false;\n }\n\n if (\n Cartesian3.equalsEpsilon(\n nextPosition,\n groundPosition,\n CesiumMath.EPSILON10\n )\n ) {\n recomputeNormal = true;\n } else {\n s += ds;\n if (vertexFormat.tangent) {\n tangent = Cartesian3.normalize(\n Cartesian3.subtract(nextPosition, groundPosition, tangent),\n tangent\n );\n }\n if (vertexFormat.bitangent) {\n bitangent = Cartesian3.normalize(\n Cartesian3.cross(normal, tangent, bitangent),\n bitangent\n );\n }\n }\n\n if (vertexFormat.normal) {\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n\n normals[normalIndex++] = normal.x;\n normals[normalIndex++] = normal.y;\n normals[normalIndex++] = normal.z;\n }\n\n if (vertexFormat.tangent) {\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n\n tangents[tangentIndex++] = tangent.x;\n tangents[tangentIndex++] = tangent.y;\n tangents[tangentIndex++] = tangent.z;\n }\n\n if (vertexFormat.bitangent) {\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n\n bitangents[bitangentIndex++] = bitangent.x;\n bitangents[bitangentIndex++] = bitangent.y;\n bitangents[bitangentIndex++] = bitangent.z;\n }\n }\n }\n\n var attributes = new GeometryAttributes();\n\n if (vertexFormat.position) {\n attributes.position = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n });\n }\n\n if (vertexFormat.normal) {\n attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normals,\n });\n }\n\n if (vertexFormat.tangent) {\n attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangents,\n });\n }\n\n if (vertexFormat.bitangent) {\n attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangents,\n });\n }\n\n if (vertexFormat.st) {\n attributes.st = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: textureCoordinates,\n });\n }\n\n // prepare the side walls, two triangles for each wall\n //\n // A (i+1) B (i+3) E\n // +--------+-------+\n // | / | /| triangles: A C B\n // | / | / | B C D\n // | / | / |\n // | / | / |\n // | / | / |\n // | / | / |\n // +--------+-------+\n // C (i) D (i+2) F\n //\n\n var numVertices = size / 3;\n size -= 6 * (numCorners + 1);\n var indices = IndexDatatype.createTypedArray(numVertices, size);\n\n var edgeIndex = 0;\n for (i = 0; i < numVertices - 2; i += 2) {\n var LL = i;\n var LR = i + 2;\n var pl = Cartesian3.fromArray(\n positions,\n LL * 3,\n scratchCartesian3Position1\n );\n var pr = Cartesian3.fromArray(\n positions,\n LR * 3,\n scratchCartesian3Position2\n );\n if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\n continue;\n }\n var UL = i + 1;\n var UR = i + 3;\n\n indices[edgeIndex++] = UL;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = UR;\n indices[edgeIndex++] = UR;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = LR;\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n boundingSphere: new BoundingSphere.fromVertices(positions),\n });\n};\nexport default WallGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\n\nvar scratchCartesian3Position1 = new Cartesian3();\nvar scratchCartesian3Position2 = new Cartesian3();\n\n/**\n * A description of a wall outline. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @alias WallOutlineGeometry\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Number[]} [options.maximumHeights] An array parallel to <code>positions</code> that give the maximum height of the\n * wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {Number[]} [options.minimumHeights] An array parallel to <code>positions</code> that give the minimum height of the\n * wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\n *\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\n *\n * @see WallGeometry#createGeometry\n * @see WallGeometry#fromConstantHeight\n *\n * @example\n * // create a wall outline that spans from ground level to 10000 meters\n * var wall = new Cesium.WallOutlineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n * 19.0, 47.0, 10000.0,\n * 19.0, 48.0, 10000.0,\n * 20.0, 48.0, 10000.0,\n * 20.0, 47.0, 10000.0,\n * 19.0, 47.0, 10000.0\n * ])\n * });\n * var geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\n */\nfunction WallOutlineGeometry(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var wallPositions = options.positions;\n var maximumHeights = options.maximumHeights;\n var minimumHeights = options.minimumHeights;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(wallPositions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n if (\n defined(maximumHeights) &&\n maximumHeights.length !== wallPositions.length\n ) {\n throw new DeveloperError(\n \"options.positions and options.maximumHeights must have the same length.\"\n );\n }\n if (\n defined(minimumHeights) &&\n minimumHeights.length !== wallPositions.length\n ) {\n throw new DeveloperError(\n \"options.positions and options.minimumHeights must have the same length.\"\n );\n }\n //>>includeEnd('debug');\n\n var granularity = defaultValue(\n options.granularity,\n CesiumMath.RADIANS_PER_DEGREE\n );\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n this._positions = wallPositions;\n this._minimumHeights = minimumHeights;\n this._maximumHeights = maximumHeights;\n this._granularity = granularity;\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\n this._workerName = \"createWallOutlineGeometry\";\n\n var numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\n if (defined(minimumHeights)) {\n numComponents += minimumHeights.length;\n }\n if (defined(maximumHeights)) {\n numComponents += maximumHeights.length;\n }\n\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n this.packedLength = numComponents + Ellipsoid.packedLength + 1;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {WallOutlineGeometry} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\nWallOutlineGeometry.pack = function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var positions = value._positions;\n var length = positions.length;\n array[startingIndex++] = length;\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n Cartesian3.pack(positions[i], array, startingIndex);\n }\n\n var minimumHeights = value._minimumHeights;\n length = defined(minimumHeights) ? minimumHeights.length : 0;\n array[startingIndex++] = length;\n\n if (defined(minimumHeights)) {\n for (i = 0; i < length; ++i) {\n array[startingIndex++] = minimumHeights[i];\n }\n }\n\n var maximumHeights = value._maximumHeights;\n length = defined(maximumHeights) ? maximumHeights.length : 0;\n array[startingIndex++] = length;\n\n if (defined(maximumHeights)) {\n for (i = 0; i < length; ++i) {\n array[startingIndex++] = maximumHeights[i];\n }\n }\n\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n startingIndex += Ellipsoid.packedLength;\n\n array[startingIndex] = value._granularity;\n\n return array;\n};\n\nvar scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nvar scratchOptions = {\n positions: undefined,\n minimumHeights: undefined,\n maximumHeights: undefined,\n ellipsoid: scratchEllipsoid,\n granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {WallOutlineGeometry} [result] The object into which to store the result.\n * @returns {WallOutlineGeometry} The modified result parameter or a new WallOutlineGeometry instance if one was not provided.\n */\nWallOutlineGeometry.unpack = function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n\n var i;\n\n var length = array[startingIndex++];\n var positions = new Array(length);\n\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n positions[i] = Cartesian3.unpack(array, startingIndex);\n }\n\n length = array[startingIndex++];\n var minimumHeights;\n\n if (length > 0) {\n minimumHeights = new Array(length);\n for (i = 0; i < length; ++i) {\n minimumHeights[i] = array[startingIndex++];\n }\n }\n\n length = array[startingIndex++];\n var maximumHeights;\n\n if (length > 0) {\n maximumHeights = new Array(length);\n for (i = 0; i < length; ++i) {\n maximumHeights[i] = array[startingIndex++];\n }\n }\n\n var ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n startingIndex += Ellipsoid.packedLength;\n\n var granularity = array[startingIndex];\n\n if (!defined(result)) {\n scratchOptions.positions = positions;\n scratchOptions.minimumHeights = minimumHeights;\n scratchOptions.maximumHeights = maximumHeights;\n scratchOptions.granularity = granularity;\n return new WallOutlineGeometry(scratchOptions);\n }\n\n result._positions = positions;\n result._minimumHeights = minimumHeights;\n result._maximumHeights = maximumHeights;\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n result._granularity = granularity;\n\n return result;\n};\n\n/**\n * A description of a walloutline. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the\n * wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the\n * wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\n * @returns {WallOutlineGeometry}\n *\n *\n * @example\n * // create a wall that spans from 10000 meters to 20000 meters\n * var wall = Cesium.WallOutlineGeometry.fromConstantHeights({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 19.0, 47.0,\n * 19.0, 48.0,\n * 20.0, 48.0,\n * 20.0, 47.0,\n * 19.0, 47.0,\n * ]),\n * minimumHeight : 20000.0,\n * maximumHeight : 10000.0\n * });\n * var geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\n *\n * @see WallOutlineGeometry#createGeometry\n */\nWallOutlineGeometry.fromConstantHeights = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var positions = options.positions;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positions)) {\n throw new DeveloperError(\"options.positions is required.\");\n }\n //>>includeEnd('debug');\n\n var minHeights;\n var maxHeights;\n\n var min = options.minimumHeight;\n var max = options.maximumHeight;\n\n var doMin = defined(min);\n var doMax = defined(max);\n if (doMin || doMax) {\n var length = positions.length;\n minHeights = doMin ? new Array(length) : undefined;\n maxHeights = doMax ? new Array(length) : undefined;\n\n for (var i = 0; i < length; ++i) {\n if (doMin) {\n minHeights[i] = min;\n }\n\n if (doMax) {\n maxHeights[i] = max;\n }\n }\n }\n\n var newOptions = {\n positions: positions,\n maximumHeights: maxHeights,\n minimumHeights: minHeights,\n ellipsoid: options.ellipsoid,\n };\n return new WallOutlineGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a wall outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {WallOutlineGeometry} wallGeometry A description of the wall outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nWallOutlineGeometry.createGeometry = function (wallGeometry) {\n var wallPositions = wallGeometry._positions;\n var minimumHeights = wallGeometry._minimumHeights;\n var maximumHeights = wallGeometry._maximumHeights;\n var granularity = wallGeometry._granularity;\n var ellipsoid = wallGeometry._ellipsoid;\n\n var pos = WallGeometryLibrary.computePositions(\n ellipsoid,\n wallPositions,\n maximumHeights,\n minimumHeights,\n granularity,\n false\n );\n if (!defined(pos)) {\n return;\n }\n\n var bottomPositions = pos.bottomPositions;\n var topPositions = pos.topPositions;\n\n var length = topPositions.length;\n var size = length * 2;\n\n var positions = new Float64Array(size);\n var positionIndex = 0;\n\n // add lower and upper points one after the other, lower\n // points being even and upper points being odd\n length /= 3;\n var i;\n for (i = 0; i < length; ++i) {\n var i3 = i * 3;\n var topPosition = Cartesian3.fromArray(\n topPositions,\n i3,\n scratchCartesian3Position1\n );\n var bottomPosition = Cartesian3.fromArray(\n bottomPositions,\n i3,\n scratchCartesian3Position2\n );\n\n // insert the lower point\n positions[positionIndex++] = bottomPosition.x;\n positions[positionIndex++] = bottomPosition.y;\n positions[positionIndex++] = bottomPosition.z;\n\n // insert the upper point\n positions[positionIndex++] = topPosition.x;\n positions[positionIndex++] = topPosition.y;\n positions[positionIndex++] = topPosition.z;\n }\n\n var attributes = new GeometryAttributes({\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: positions,\n }),\n });\n\n var numVertices = size / 3;\n size = 2 * numVertices - 4 + numVertices;\n var indices = IndexDatatype.createTypedArray(numVertices, size);\n\n var edgeIndex = 0;\n for (i = 0; i < numVertices - 2; i += 2) {\n var LL = i;\n var LR = i + 2;\n var pl = Cartesian3.fromArray(\n positions,\n LL * 3,\n scratchCartesian3Position1\n );\n var pr = Cartesian3.fromArray(\n positions,\n LR * 3,\n scratchCartesian3Position2\n );\n if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\n continue;\n }\n var UL = i + 1;\n var UR = i + 3;\n\n indices[edgeIndex++] = UL;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = UL;\n indices[edgeIndex++] = UR;\n indices[edgeIndex++] = LL;\n indices[edgeIndex++] = LR;\n }\n\n indices[edgeIndex++] = numVertices - 2;\n indices[edgeIndex++] = numVertices - 1;\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: PrimitiveType.LINES,\n boundingSphere: new BoundingSphere.fromVertices(positions),\n });\n};\nexport default WallOutlineGeometry;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\nfunction webGLConstantToGlslType(webGLValue) {\n switch (webGLValue) {\n case WebGLConstants.FLOAT:\n return \"float\";\n case WebGLConstants.FLOAT_VEC2:\n return \"vec2\";\n case WebGLConstants.FLOAT_VEC3:\n return \"vec3\";\n case WebGLConstants.FLOAT_VEC4:\n return \"vec4\";\n case WebGLConstants.FLOAT_MAT2:\n return \"mat2\";\n case WebGLConstants.FLOAT_MAT3:\n return \"mat3\";\n case WebGLConstants.FLOAT_MAT4:\n return \"mat4\";\n case WebGLConstants.SAMPLER_2D:\n return \"sampler2D\";\n case WebGLConstants.BOOL:\n return \"bool\";\n }\n}\nexport default webGLConstantToGlslType;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that linearly interpolates over an array of weight values used by morph targets.\n *\n * @alias WeightSpline\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n * The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Number[]} options.weights The array of floating-point control weights given. The weights are ordered such\n * that all weights for the targets are given in chronological order and order in which they appear in\n * the glTF from which the morph targets come. This means for 2 targets, weights = [w(0,0), w(0,1), w(1,0), w(1,1) ...]\n * where i and j in w(i,j) are the time indices and target indices, respectively.\n *\n * @exception {DeveloperError} weights.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be a factor of weights.length.\n *\n *\n * @example\n * var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * var weights = [0.0, 1.0, 0.25, 0.75, 0.5, 0.5, 0.75, 0.25, 1.0, 0.0]; //Two targets\n * var spline = new Cesium.WeightSpline({\n * times : times,\n * weights : weights\n * });\n *\n * var p0 = spline.evaluate(times[0]);\n *\n * @see LinearSpline\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n */\nfunction WeightSpline(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var weights = options.weights;\n var times = options.times;\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"weights\", weights);\n Check.defined(\"times\", times);\n Check.typeOf.number.greaterThanOrEquals(\"weights.length\", weights.length, 3);\n if (weights.length % times.length !== 0) {\n throw new DeveloperError(\n \"times.length must be a factor of weights.length.\"\n );\n }\n //>>includeEnd('debug');\n\n this._times = times;\n this._weights = weights;\n this._count = weights.length / times.length;\n\n this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(WeightSpline.prototype, {\n /**\n * An array of times for the control weights.\n *\n * @memberof WeightSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n times: {\n get: function () {\n return this._times;\n },\n },\n\n /**\n * An array of floating-point array control weights.\n *\n * @memberof WeightSpline.prototype\n *\n * @type {Number[]}\n * @readonly\n */\n weights: {\n get: function () {\n return this._weights;\n },\n },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {Number} time The time.\n * @returns {Number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nWeightSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, wrapped around to the updated animation.\n */\nWeightSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {Number} time The time.\n * @return {Number} The time, clamped to the animation period.\n */\nWeightSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {Number} time The time at which to evaluate the curve.\n * @param {Number[]} [result] The object onto which to store the result.\n * @returns {Number[]} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n * is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n * in the array <code>times</code>.\n */\nWeightSpline.prototype.evaluate = function (time, result) {\n var weights = this.weights;\n var times = this.times;\n\n var i = (this._lastTimeIndex = this.findTimeInterval(\n time,\n this._lastTimeIndex\n ));\n var u = (time - times[i]) / (times[i + 1] - times[i]);\n\n if (!defined(result)) {\n result = new Array(this._count);\n }\n\n for (var j = 0; j < this._count; j++) {\n var index = i * this._count + j;\n result[j] = weights[index] * (1.0 - u) + weights[index + this._count] * u;\n }\n\n return result;\n};\nexport default WeightSpline;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\n\n/**\n * A {@link Property} whose value does not change with respect to simulation time.\n *\n * @alias ConstantProperty\n * @constructor\n *\n * @param {*} [value] The property value.\n *\n * @see ConstantPositionProperty\n */\nfunction ConstantProperty(value) {\n this._value = undefined;\n this._hasClone = false;\n this._hasEquals = false;\n this._definitionChanged = new Event();\n this.setValue(value);\n}\n\nObject.defineProperties(ConstantProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * This property always returns <code>true</code>.\n * @memberof ConstantProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n value: true,\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value.\n * @memberof ConstantProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time] The time for which to retrieve the value. This parameter is unused since the value does not change with respect to time.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantProperty.prototype.getValue = function (time, result) {\n return this._hasClone ? this._value.clone(result) : this._value;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {*} value The property value.\n */\nConstantProperty.prototype.setValue = function (value) {\n var oldValue = this._value;\n if (oldValue !== value) {\n var isDefined = defined(value);\n var hasClone = isDefined && typeof value.clone === \"function\";\n var hasEquals = isDefined && typeof value.equals === \"function\";\n\n var changed = !hasEquals || !value.equals(oldValue);\n if (changed) {\n this._hasClone = hasClone;\n this._hasEquals = hasEquals;\n this._value = !hasClone ? value : value.clone(this._value);\n this._definitionChanged.raiseEvent(this);\n }\n }\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nConstantProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof ConstantProperty && //\n ((!this._hasEquals && this._value === other._value) || //\n (this._hasEquals && this._value.equals(other._value))))\n );\n};\n\n/**\n * Gets this property's value.\n *\n * @returns {*} This property's value.\n */\nConstantProperty.prototype.valueOf = function () {\n return this._value;\n};\n\n/**\n * Creates a string representing this property's value.\n *\n * @returns {String} A string representing the property's value.\n */\nConstantProperty.prototype.toString = function () {\n return String(this._value);\n};\nexport default ConstantProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\n\nfunction createProperty(\n name,\n privateName,\n subscriptionName,\n configurable,\n createPropertyCallback\n) {\n return {\n configurable: configurable,\n get: function () {\n return this[privateName];\n },\n set: function (value) {\n var oldValue = this[privateName];\n var subscription = this[subscriptionName];\n if (defined(subscription)) {\n subscription();\n this[subscriptionName] = undefined;\n }\n\n var hasValue = value !== undefined;\n if (\n hasValue &&\n (!defined(value) || !defined(value.getValue)) &&\n defined(createPropertyCallback)\n ) {\n value = createPropertyCallback(value);\n }\n\n if (oldValue !== value) {\n this[privateName] = value;\n this._definitionChanged.raiseEvent(this, name, value, oldValue);\n }\n\n if (defined(value) && defined(value.definitionChanged)) {\n this[subscriptionName] = value.definitionChanged.addEventListener(\n function () {\n this._definitionChanged.raiseEvent(this, name, value, value);\n },\n this\n );\n }\n },\n };\n}\n\nfunction createConstantProperty(value) {\n return new ConstantProperty(value);\n}\n\n/**\n * Used to consistently define all DataSources graphics objects.\n * This is broken into two functions because the Chrome profiler does a better\n * job of optimizing lookups if it notices that the string is constant throughout the function.\n * @private\n */\nfunction createPropertyDescriptor(name, configurable, createPropertyCallback) {\n //Safari 8.0.3 has a JavaScript bug that causes it to confuse two variables and treat them as the same.\n //The two extra toString calls work around the issue.\n return createProperty(\n name,\n \"_\" + name.toString(),\n \"_\" + name.toString() + \"Subscription\",\n defaultValue(configurable, false),\n defaultValue(createPropertyCallback, createConstantProperty)\n );\n}\nexport default createPropertyDescriptor;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} BillboardGraphics.ConstructorOptions\n *\n * Initialization options for the BillboardGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the billboard.\n * @property {Property | string | HTMLCanvasElement} [image] A Property specifying the Image, URI, or Canvas to use for the billboard.\n * @property {Property | number} [scale=1.0] A numeric Property specifying the scale to apply to the image size.\n * @property {Property | Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} Property specifying the pixel offset.\n * @property {Property | Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the eye offset.\n * @property {Property | HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.CENTER] A Property specifying the {@link HorizontalOrigin}.\n * @property {Property | VerticalOrigin} [verticalOrigin=VerticalOrigin.CENTER] A Property specifying the {@link VerticalOrigin}.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the tint {@link Color} of the image.\n * @property {Property | number} [rotation=0] A numeric Property specifying the rotation about the alignedAxis.\n * @property {Property | Cartesian3} [alignedAxis=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the unit vector axis of rotation.\n * @property {Property | boolean} [sizeInMeters] A boolean Property specifying whether this billboard's size should be measured in meters.\n * @property {Property | number} [width] A numeric Property specifying the width of the billboard in pixels, overriding the native size.\n * @property {Property | number} [height] A numeric Property specifying the height of the billboard in pixels, overriding the native size.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to scale the point based on distance from the camera.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera.\n * @property {Property | BoundingRectangle} [imageSubRegion] A Property specifying a {@link BoundingRectangle} that defines a sub-region of the image to use for the billboard, rather than the entire image, measured in pixels from the bottom-left.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this billboard will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n */\n\n/**\n * Describes a two dimensional icon located at the position of the containing {@link Entity}.\n * <p>\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n * </p>\n *\n * @alias BillboardGraphics\n * @constructor\n *\n * @param {BillboardGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Billboards.html|Cesium Sandcastle Billboard Demo}\n */\nfunction BillboardGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._image = undefined;\n this._imageSubscription = undefined;\n this._scale = undefined;\n this._scaleSubscription = undefined;\n this._pixelOffset = undefined;\n this._pixelOffsetSubscription = undefined;\n this._eyeOffset = undefined;\n this._eyeOffsetSubscription = undefined;\n this._horizontalOrigin = undefined;\n this._horizontalOriginSubscription = undefined;\n this._verticalOrigin = undefined;\n this._verticalOriginSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._color = undefined;\n this._colorSubscription = undefined;\n this._rotation = undefined;\n this._rotationSubscription = undefined;\n this._alignedAxis = undefined;\n this._alignedAxisSubscription = undefined;\n this._sizeInMeters = undefined;\n this._sizeInMetersSubscription = undefined;\n this._width = undefined;\n this._widthSubscription = undefined;\n this._height = undefined;\n this._heightSubscription = undefined;\n this._scaleByDistance = undefined;\n this._scaleByDistanceSubscription = undefined;\n this._translucencyByDistance = undefined;\n this._translucencyByDistanceSubscription = undefined;\n this._pixelOffsetScaleByDistance = undefined;\n this._pixelOffsetScaleByDistanceSubscription = undefined;\n this._imageSubRegion = undefined;\n this._imageSubRegionSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._disableDepthTestDistance = undefined;\n this._disableDepthTestDistanceSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(BillboardGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof BillboardGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the billboard.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the Image, URI, or Canvas to use for the billboard.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n image: createPropertyDescriptor(\"image\"),\n\n /**\n * Gets or sets the numeric Property specifying the uniform scale to apply to the image.\n * A scale greater than <code>1.0</code> enlarges the billboard while a scale less than <code>1.0</code> shrinks it.\n * <p>\n * <div align='center'>\n * <img src='Images/Billboard.setScale.png' width='400' height='300' /><br/>\n * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>, and <code>2.0</code>.\n * </div>\n * </p>\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n scale: createPropertyDescriptor(\"scale\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the billboard's pixel offset in screen space\n * from the origin of this billboard. This is commonly used to align multiple billboards and labels at\n * the same position, e.g., an image and text. The screen space origin is the top, left corner of the\n * canvas; <code>x</code> increases from left to right, and <code>y</code> increases from top to bottom.\n * <p>\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Billboard.setPixelOffset.default.png' width='250' height='188' /></td>\n * <td align='center'><code>b.pixeloffset = new Cartesian2(50, 25);</code><br/><img src='Images/Billboard.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n * </tr></table>\n * The billboard's origin is indicated by the yellow point.\n * </div>\n * </p>\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default Cartesian2.ZERO\n */\n pixelOffset: createPropertyDescriptor(\"pixelOffset\"),\n\n /**\n * Gets or sets the {@link Cartesian3} Property specifying the billboard's offset in eye coordinates.\n * Eye coordinates is a left-handed coordinate system, where <code>x</code> points towards the viewer's\n * right, <code>y</code> points up, and <code>z</code> points into the screen.\n * <p>\n * An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to\n * arrange a billboard above its corresponding 3D model.\n * </p>\n * Below, the billboard is positioned at the center of the Earth but an eye offset makes it always\n * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n * <p>\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n * </tr></table>\n * <code>b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code>\n * </div>\n * </p>\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default Cartesian3.ZERO\n */\n eyeOffset: createPropertyDescriptor(\"eyeOffset\"),\n\n /**\n * Gets or sets the Property specifying the {@link HorizontalOrigin}.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default HorizontalOrigin.CENTER\n */\n horizontalOrigin: createPropertyDescriptor(\"horizontalOrigin\"),\n\n /**\n * Gets or sets the Property specifying the {@link VerticalOrigin}.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default VerticalOrigin.CENTER\n */\n verticalOrigin: createPropertyDescriptor(\"verticalOrigin\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} that is multiplied with the <code>image</code>.\n * This has two common use cases. First, the same white texture may be used by many different billboards,\n * each with a different color, to create colored billboards. Second, the color's alpha component can be\n * used to make the billboard translucent as shown below. An alpha of <code>0.0</code> makes the billboard\n * transparent, and <code>1.0</code> makes the billboard opaque.\n * <p>\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Billboard.setColor.Alpha255.png' width='250' height='188' /></td>\n * <td align='center'><code>alpha : 0.5</code><br/><img src='Images/Billboard.setColor.Alpha127.png' width='250' height='188' /></td>\n * </tr></table>\n * </div>\n * </p>\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the numeric Property specifying the rotation of the image\n * counter clockwise from the <code>alignedAxis</code>.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n rotation: createPropertyDescriptor(\"rotation\"),\n\n /**\n * Gets or sets the {@link Cartesian3} Property specifying the unit vector axis of rotation\n * in the fixed frame. When set to Cartesian3.ZERO the rotation is from the top of the screen.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default Cartesian3.ZERO\n */\n alignedAxis: createPropertyDescriptor(\"alignedAxis\"),\n\n /**\n * Gets or sets the boolean Property specifying if this billboard's size will be measured in meters.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n sizeInMeters: createPropertyDescriptor(\"sizeInMeters\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the billboard in pixels.\n * When undefined, the native width is used.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n width: createPropertyDescriptor(\"width\"),\n\n /**\n * Gets or sets the numeric Property specifying the height of the billboard in pixels.\n * When undefined, the native height is used.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n height: createPropertyDescriptor(\"height\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the scale of the billboard based on the distance from the camera.\n * A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's scale remains clamped to the nearest bound.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the translucency of the billboard based on the distance from the camera.\n * A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's translucency remains clamped to the nearest bound.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the billboard based on the distance from the camera.\n * A billboard's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's pixel offset remains clamped to the nearest bound.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n pixelOffsetScaleByDistance: createPropertyDescriptor(\n \"pixelOffsetScaleByDistance\"\n ),\n\n /**\n * Gets or sets the Property specifying a {@link BoundingRectangle} that defines a\n * sub-region of the <code>image</code> to use for the billboard, rather than the entire image,\n * measured in pixels from the bottom-left.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n imageSubRegion: createPropertyDescriptor(\"imageSubRegion\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this billboard will be displayed.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof BillboardGraphics.prototype\n * @type {Property|undefined}\n */\n disableDepthTestDistance: createPropertyDescriptor(\n \"disableDepthTestDistance\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {BillboardGraphics} [result] The object onto which to store the result.\n * @returns {BillboardGraphics} The modified result parameter or a new instance if one was not provided.\n */\nBillboardGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new BillboardGraphics(this);\n }\n result.show = this._show;\n result.image = this._image;\n result.scale = this._scale;\n result.pixelOffset = this._pixelOffset;\n result.eyeOffset = this._eyeOffset;\n result.horizontalOrigin = this._horizontalOrigin;\n result.verticalOrigin = this._verticalOrigin;\n result.heightReference = this._heightReference;\n result.color = this._color;\n result.rotation = this._rotation;\n result.alignedAxis = this._alignedAxis;\n result.sizeInMeters = this._sizeInMeters;\n result.width = this._width;\n result.height = this._height;\n result.scaleByDistance = this._scaleByDistance;\n result.translucencyByDistance = this._translucencyByDistance;\n result.pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n result.imageSubRegion = this._imageSubRegion;\n result.distanceDisplayCondition = this._distanceDisplayCondition;\n result.disableDepthTestDistance = this._disableDepthTestDistance;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {BillboardGraphics} source The object to be merged into this object.\n */\nBillboardGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this._show, source.show);\n this.image = defaultValue(this._image, source.image);\n this.scale = defaultValue(this._scale, source.scale);\n this.pixelOffset = defaultValue(this._pixelOffset, source.pixelOffset);\n this.eyeOffset = defaultValue(this._eyeOffset, source.eyeOffset);\n this.horizontalOrigin = defaultValue(\n this._horizontalOrigin,\n source.horizontalOrigin\n );\n this.verticalOrigin = defaultValue(\n this._verticalOrigin,\n source.verticalOrigin\n );\n this.heightReference = defaultValue(\n this._heightReference,\n source.heightReference\n );\n this.color = defaultValue(this._color, source.color);\n this.rotation = defaultValue(this._rotation, source.rotation);\n this.alignedAxis = defaultValue(this._alignedAxis, source.alignedAxis);\n this.sizeInMeters = defaultValue(this._sizeInMeters, source.sizeInMeters);\n this.width = defaultValue(this._width, source.width);\n this.height = defaultValue(this._height, source.height);\n this.scaleByDistance = defaultValue(\n this._scaleByDistance,\n source.scaleByDistance\n );\n this.translucencyByDistance = defaultValue(\n this._translucencyByDistance,\n source.translucencyByDistance\n );\n this.pixelOffsetScaleByDistance = defaultValue(\n this._pixelOffsetScaleByDistance,\n source.pixelOffsetScaleByDistance\n );\n this.imageSubRegion = defaultValue(\n this._imageSubRegion,\n source.imageSubRegion\n );\n this.distanceDisplayCondition = defaultValue(\n this._distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.disableDepthTestDistance = defaultValue(\n this._disableDepthTestDistance,\n source.disableDepthTestDistance\n );\n};\nexport default BillboardGraphics;\n","/**\n * Represents the position relative to the terrain.\n *\n * @enum {Number}\n */\nvar HeightReference = {\n /**\n * The position is absolute.\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * The position is clamped to the terrain.\n * @type {Number}\n * @constant\n */\n CLAMP_TO_GROUND: 1,\n\n /**\n * The position height is the height above the terrain.\n * @type {Number}\n * @constant\n */\n RELATIVE_TO_GROUND: 2,\n};\nexport default Object.freeze(HeightReference);\n","/**\n * The horizontal location of an origin relative to an object, e.g., a {@link Billboard}\n * or {@link Label}. For example, setting the horizontal origin to <code>LEFT</code>\n * or <code>RIGHT</code> will display a billboard to the left or right (in screen space)\n * of the anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n * </div>\n *\n * @enum {Number}\n *\n * @see Billboard#horizontalOrigin\n * @see Label#horizontalOrigin\n */\nvar HorizontalOrigin = {\n /**\n * The origin is at the horizontal center of the object.\n *\n * @type {Number}\n * @constant\n */\n CENTER: 0,\n\n /**\n * The origin is on the left side of the object.\n *\n * @type {Number}\n * @constant\n */\n LEFT: 1,\n\n /**\n * The origin is on the right side of the object.\n *\n * @type {Number}\n * @constant\n */\n RIGHT: -1,\n};\nexport default Object.freeze(HorizontalOrigin);\n","/**\n * The vertical location of an origin relative to an object, e.g., a {@link Billboard}\n * or {@link Label}. For example, setting the vertical origin to <code>TOP</code>\n * or <code>BOTTOM</code> will display a billboard above or below (in screen space)\n * the anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n * </div>\n *\n * @enum {Number}\n *\n * @see Billboard#verticalOrigin\n * @see Label#verticalOrigin\n */\nvar VerticalOrigin = {\n /**\n * The origin is at the vertical center between <code>BASELINE</code> and <code>TOP</code>.\n *\n * @type {Number}\n * @constant\n */\n CENTER: 0,\n\n /**\n * The origin is at the bottom of the object.\n *\n * @type {Number}\n * @constant\n */\n BOTTOM: 1,\n\n /**\n * If the object contains text, the origin is at the baseline of the text, else the origin is at the bottom of the object.\n *\n * @type {Number}\n * @constant\n */\n BASELINE: 2,\n\n /**\n * The origin is at the top of the object.\n *\n * @type {Number}\n * @constant\n */\n TOP: -1,\n};\nexport default Object.freeze(VerticalOrigin);\n","/**\n * The state of a BoundingSphere computation being performed by a {@link Visualizer}.\n * @enum {Number}\n * @private\n */\nvar BoundingSphereState = {\n /**\n * The BoundingSphere has been computed.\n * @type BoundingSphereState\n * @constant\n */\n DONE: 0,\n /**\n * The BoundingSphere is still being computed.\n * @type BoundingSphereState\n * @constant\n */\n PENDING: 1,\n /**\n * The BoundingSphere does not exist.\n * @type BoundingSphereState\n * @constant\n */\n FAILED: 2,\n};\nexport default Object.freeze(BoundingSphereState);\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * The interface for all properties, which represent a value that can optionally vary over time.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias Property\n * @constructor\n * @abstract\n *\n * @see CompositeProperty\n * @see ConstantProperty\n * @see SampledProperty\n * @see TimeIntervalCollectionProperty\n * @see MaterialProperty\n * @see PositionProperty\n * @see ReferenceProperty\n */\nfunction Property() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(Property.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof Property.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof Property.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Gets the value of the property at the provided time.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\n/**\n * @private\n */\nProperty.equals = function (left, right) {\n return left === right || (defined(left) && left.equals(right));\n};\n\n/**\n * @private\n */\nProperty.arrayEquals = function (left, right) {\n if (left === right) {\n return true;\n }\n if (!defined(left) || !defined(right) || left.length !== right.length) {\n return false;\n }\n var length = left.length;\n for (var i = 0; i < length; i++) {\n if (!Property.equals(left[i], right[i])) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * @private\n */\nProperty.isConstant = function (property) {\n return !defined(property) || property.isConstant;\n};\n\n/**\n * @private\n */\nProperty.getValueOrUndefined = function (property, time, result) {\n return defined(property) ? property.getValue(time, result) : undefined;\n};\n\n/**\n * @private\n */\nProperty.getValueOrDefault = function (property, time, valueDefault, result) {\n return defined(property)\n ? defaultValue(property.getValue(time, result), valueDefault)\n : valueDefault;\n};\n\n/**\n * @private\n */\nProperty.getValueOrClonedDefault = function (\n property,\n time,\n valueDefault,\n result\n) {\n var value;\n if (defined(property)) {\n value = property.getValue(time, result);\n }\n if (!defined(value)) {\n value = valueDefault.clone(value);\n }\n return value;\n};\nexport default Property;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultEyeOffset = Cartesian3.ZERO;\nvar defaultHeightReference = HeightReference.NONE;\nvar defaultPixelOffset = Cartesian2.ZERO;\nvar defaultScale = 1.0;\nvar defaultRotation = 0.0;\nvar defaultAlignedAxis = Cartesian3.ZERO;\nvar defaultHorizontalOrigin = HorizontalOrigin.CENTER;\nvar defaultVerticalOrigin = VerticalOrigin.CENTER;\nvar defaultSizeInMeters = false;\n\nvar positionScratch = new Cartesian3();\nvar colorScratch = new Color();\nvar eyeOffsetScratch = new Cartesian3();\nvar pixelOffsetScratch = new Cartesian2();\nvar scaleByDistanceScratch = new NearFarScalar();\nvar translucencyByDistanceScratch = new NearFarScalar();\nvar pixelOffsetScaleByDistanceScratch = new NearFarScalar();\nvar boundingRectangleScratch = new BoundingRectangle();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n this.entity = entity;\n this.billboard = undefined;\n this.textureValue = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps {@link Entity#billboard} to a {@link Billboard}.\n * @alias BillboardVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction BillboardVisualizer(entityCluster, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entityCluster)) {\n throw new DeveloperError(\"entityCluster is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n BillboardVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._cluster = entityCluster;\n this._entityCollection = entityCollection;\n this._items = new AssociativeArray();\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nBillboardVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var items = this._items.values;\n var cluster = this._cluster;\n\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n var entity = item.entity;\n var billboardGraphics = entity._billboard;\n var textureValue;\n var billboard = item.billboard;\n var show =\n entity.isShowing &&\n entity.isAvailable(time) &&\n Property.getValueOrDefault(billboardGraphics._show, time, true);\n var position;\n if (show) {\n position = Property.getValueOrUndefined(\n entity._position,\n time,\n positionScratch\n );\n textureValue = Property.getValueOrUndefined(\n billboardGraphics._image,\n time\n );\n show = defined(position) && defined(textureValue);\n }\n\n if (!show) {\n //don't bother creating or updating anything else\n returnPrimitive(item, entity, cluster);\n continue;\n }\n\n if (!Property.isConstant(entity._position)) {\n cluster._clusterDirty = true;\n }\n\n if (!defined(billboard)) {\n billboard = cluster.getBillboard(entity);\n billboard.id = entity;\n billboard.image = undefined;\n item.billboard = billboard;\n }\n\n billboard.show = show;\n if (!defined(billboard.image) || item.textureValue !== textureValue) {\n billboard.image = textureValue;\n item.textureValue = textureValue;\n }\n billboard.position = position;\n billboard.color = Property.getValueOrDefault(\n billboardGraphics._color,\n time,\n defaultColor,\n colorScratch\n );\n billboard.eyeOffset = Property.getValueOrDefault(\n billboardGraphics._eyeOffset,\n time,\n defaultEyeOffset,\n eyeOffsetScratch\n );\n billboard.heightReference = Property.getValueOrDefault(\n billboardGraphics._heightReference,\n time,\n defaultHeightReference\n );\n billboard.pixelOffset = Property.getValueOrDefault(\n billboardGraphics._pixelOffset,\n time,\n defaultPixelOffset,\n pixelOffsetScratch\n );\n billboard.scale = Property.getValueOrDefault(\n billboardGraphics._scale,\n time,\n defaultScale\n );\n billboard.rotation = Property.getValueOrDefault(\n billboardGraphics._rotation,\n time,\n defaultRotation\n );\n billboard.alignedAxis = Property.getValueOrDefault(\n billboardGraphics._alignedAxis,\n time,\n defaultAlignedAxis\n );\n billboard.horizontalOrigin = Property.getValueOrDefault(\n billboardGraphics._horizontalOrigin,\n time,\n defaultHorizontalOrigin\n );\n billboard.verticalOrigin = Property.getValueOrDefault(\n billboardGraphics._verticalOrigin,\n time,\n defaultVerticalOrigin\n );\n billboard.width = Property.getValueOrUndefined(\n billboardGraphics._width,\n time\n );\n billboard.height = Property.getValueOrUndefined(\n billboardGraphics._height,\n time\n );\n billboard.scaleByDistance = Property.getValueOrUndefined(\n billboardGraphics._scaleByDistance,\n time,\n scaleByDistanceScratch\n );\n billboard.translucencyByDistance = Property.getValueOrUndefined(\n billboardGraphics._translucencyByDistance,\n time,\n translucencyByDistanceScratch\n );\n billboard.pixelOffsetScaleByDistance = Property.getValueOrUndefined(\n billboardGraphics._pixelOffsetScaleByDistance,\n time,\n pixelOffsetScaleByDistanceScratch\n );\n billboard.sizeInMeters = Property.getValueOrDefault(\n billboardGraphics._sizeInMeters,\n time,\n defaultSizeInMeters\n );\n billboard.distanceDisplayCondition = Property.getValueOrUndefined(\n billboardGraphics._distanceDisplayCondition,\n time,\n distanceDisplayConditionScratch\n );\n billboard.disableDepthTestDistance = Property.getValueOrUndefined(\n billboardGraphics._disableDepthTestDistance,\n time\n );\n\n var subRegion = Property.getValueOrUndefined(\n billboardGraphics._imageSubRegion,\n time,\n boundingRectangleScratch\n );\n if (defined(subRegion)) {\n billboard.setImageSubRegion(billboard._imageId, subRegion);\n }\n }\n return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nBillboardVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var item = this._items.get(entity.id);\n if (!defined(item) || !defined(item.billboard)) {\n return BoundingSphereState.FAILED;\n }\n\n var billboard = item.billboard;\n if (billboard.heightReference === HeightReference.NONE) {\n result.center = Cartesian3.clone(billboard.position, result.center);\n } else {\n if (!defined(billboard._clampedPosition)) {\n return BoundingSphereState.PENDING;\n }\n result.center = Cartesian3.clone(billboard._clampedPosition, result.center);\n }\n result.radius = 0;\n return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nBillboardVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nBillboardVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n BillboardVisualizer.prototype._onCollectionChanged,\n this\n );\n var entities = this._entityCollection.values;\n for (var i = 0; i < entities.length; i++) {\n this._cluster.removeBillboard(entities[i]);\n }\n return destroyObject(this);\n};\n\nBillboardVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var items = this._items;\n var cluster = this._cluster;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._billboard) && defined(entity._position)) {\n items.set(entity.id, new EntityData(entity));\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._billboard) && defined(entity._position)) {\n if (!items.contains(entity.id)) {\n items.set(entity.id, new EntityData(entity));\n }\n } else {\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n if (defined(item)) {\n item.billboard = undefined;\n cluster.removeBillboard(entity);\n }\n}\nexport default BillboardVisualizer;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines how two pixels' values are combined.\n *\n * @enum {Number}\n */\nvar BlendEquation = {\n /**\n * Pixel values are added componentwise. This is used in additive blending for translucency.\n *\n * @type {Number}\n * @constant\n */\n ADD: WebGLConstants.FUNC_ADD,\n\n /**\n * Pixel values are subtracted componentwise (source - destination). This is used in alpha blending for translucency.\n *\n * @type {Number}\n * @constant\n */\n SUBTRACT: WebGLConstants.FUNC_SUBTRACT,\n\n /**\n * Pixel values are subtracted componentwise (destination - source).\n *\n * @type {Number}\n * @constant\n */\n REVERSE_SUBTRACT: WebGLConstants.FUNC_REVERSE_SUBTRACT,\n\n /**\n * Pixel values are given to the minimum function (min(source, destination)).\n *\n * This equation operates on each pixel color component.\n *\n * @type {Number}\n * @constant\n */\n MIN: WebGLConstants.MIN,\n\n /**\n * Pixel values are given to the maximum function (max(source, destination)).\n *\n * This equation operates on each pixel color component.\n *\n * @type {Number}\n * @constant\n */\n MAX: WebGLConstants.MAX,\n};\nexport default Object.freeze(BlendEquation);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines how blending factors are computed.\n *\n * @enum {Number}\n */\nvar BlendFunction = {\n /**\n * The blend factor is zero.\n *\n * @type {Number}\n * @constant\n */\n ZERO: WebGLConstants.ZERO,\n\n /**\n * The blend factor is one.\n *\n * @type {Number}\n * @constant\n */\n ONE: WebGLConstants.ONE,\n\n /**\n * The blend factor is the source color.\n *\n * @type {Number}\n * @constant\n */\n SOURCE_COLOR: WebGLConstants.SRC_COLOR,\n\n /**\n * The blend factor is one minus the source color.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_SOURCE_COLOR: WebGLConstants.ONE_MINUS_SRC_COLOR,\n\n /**\n * The blend factor is the destination color.\n *\n * @type {Number}\n * @constant\n */\n DESTINATION_COLOR: WebGLConstants.DST_COLOR,\n\n /**\n * The blend factor is one minus the destination color.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_DESTINATION_COLOR: WebGLConstants.ONE_MINUS_DST_COLOR,\n\n /**\n * The blend factor is the source alpha.\n *\n * @type {Number}\n * @constant\n */\n SOURCE_ALPHA: WebGLConstants.SRC_ALPHA,\n\n /**\n * The blend factor is one minus the source alpha.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_SOURCE_ALPHA: WebGLConstants.ONE_MINUS_SRC_ALPHA,\n\n /**\n * The blend factor is the destination alpha.\n *\n * @type {Number}\n * @constant\n */\n DESTINATION_ALPHA: WebGLConstants.DST_ALPHA,\n\n /**\n * The blend factor is one minus the destination alpha.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_DESTINATION_ALPHA: WebGLConstants.ONE_MINUS_DST_ALPHA,\n\n /**\n * The blend factor is the constant color.\n *\n * @type {Number}\n * @constant\n */\n CONSTANT_COLOR: WebGLConstants.CONSTANT_COLOR,\n\n /**\n * The blend factor is one minus the constant color.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_CONSTANT_COLOR: WebGLConstants.ONE_MINUS_CONSTANT_COLOR,\n\n /**\n * The blend factor is the constant alpha.\n *\n * @type {Number}\n * @constant\n */\n CONSTANT_ALPHA: WebGLConstants.CONSTANT_ALPHA,\n\n /**\n * The blend factor is one minus the constant alpha.\n *\n * @type {Number}\n * @constant\n */\n ONE_MINUS_CONSTANT_ALPHA: WebGLConstants.ONE_MINUS_CONSTANT_ALPHA,\n\n /**\n * The blend factor is the saturated source alpha.\n *\n * @type {Number}\n * @constant\n */\n SOURCE_ALPHA_SATURATE: WebGLConstants.SRC_ALPHA_SATURATE,\n};\nexport default Object.freeze(BlendFunction);\n","import BlendEquation from \"./BlendEquation.js\";\nimport BlendFunction from \"./BlendFunction.js\";\n\n/**\n * The blending state combines {@link BlendEquation} and {@link BlendFunction} and the\n * <code>enabled</code> flag to define the full blending state for combining source and\n * destination fragments when rendering.\n * <p>\n * This is a helper when using custom render states with {@link Appearance#renderState}.\n * </p>\n *\n * @namespace\n */\nvar BlendingState = {\n /**\n * Blending is disabled.\n *\n * @type {Object}\n * @constant\n */\n DISABLED: Object.freeze({\n enabled: false,\n }),\n\n /**\n * Blending is enabled using alpha blending, <code>source(source.alpha) + destination(1 - source.alpha)</code>.\n *\n * @type {Object}\n * @constant\n */\n ALPHA_BLEND: Object.freeze({\n enabled: true,\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.SOURCE_ALPHA,\n functionSourceAlpha: BlendFunction.ONE,\n functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n }),\n\n /**\n * Blending is enabled using alpha blending with premultiplied alpha, <code>source + destination(1 - source.alpha)</code>.\n *\n * @type {Object}\n * @constant\n */\n PRE_MULTIPLIED_ALPHA_BLEND: Object.freeze({\n enabled: true,\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.ONE,\n functionSourceAlpha: BlendFunction.ONE,\n functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n }),\n\n /**\n * Blending is enabled using additive blending, <code>source(source.alpha) + destination</code>.\n *\n * @type {Object}\n * @constant\n */\n ADDITIVE_BLEND: Object.freeze({\n enabled: true,\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.SOURCE_ALPHA,\n functionSourceAlpha: BlendFunction.ONE,\n functionDestinationRgb: BlendFunction.ONE,\n functionDestinationAlpha: BlendFunction.ONE,\n }),\n};\nexport default Object.freeze(BlendingState);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines which triangles, if any, are culled.\n *\n * @enum {Number}\n */\nvar CullFace = {\n /**\n * Front-facing triangles are culled.\n *\n * @type {Number}\n * @constant\n */\n FRONT: WebGLConstants.FRONT,\n\n /**\n * Back-facing triangles are culled.\n *\n * @type {Number}\n * @constant\n */\n BACK: WebGLConstants.BACK,\n\n /**\n * Both front-facing and back-facing triangles are culled.\n *\n * @type {Number}\n * @constant\n */\n FRONT_AND_BACK: WebGLConstants.FRONT_AND_BACK,\n};\nexport default Object.freeze(CullFace);\n","import clone from \"../Core/clone.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\n\n/**\n * An appearance defines the full GLSL vertex and fragment shaders and the\n * render state used to draw a {@link Primitive}. All appearances implement\n * this base <code>Appearance</code> interface.\n *\n * @alias Appearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link Appearance#renderState} has alpha blending enabled.\n * @param {Boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link Appearance#renderState} has backface culling enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @see MaterialAppearance\n * @see EllipsoidSurfaceAppearance\n * @see PerInstanceColorAppearance\n * @see DebugAppearance\n * @see PolylineColorAppearance\n * @see PolylineMaterialAppearance\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Geometry%20and%20Appearances.html|Geometry and Appearances Demo}\n */\nfunction Appearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The material used to determine the fragment color. Unlike other {@link Appearance}\n * properties, this is not read-only, so an appearance's material can change on the fly.\n *\n * @type Material\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = options.material;\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = defaultValue(options.translucent, true);\n\n this._vertexShaderSource = options.vertexShaderSource;\n this._fragmentShaderSource = options.fragmentShaderSource;\n this._renderState = options.renderState;\n this._closed = defaultValue(options.closed, false);\n}\n\nObject.defineProperties(Appearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof Appearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader. The full fragment shader\n * source is built procedurally taking into account the {@link Appearance#material}.\n * Use {@link Appearance#getFragmentShaderSource} to get the full source.\n *\n * @memberof Appearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n *\n * @memberof Appearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed.\n *\n * @memberof Appearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n});\n\n/**\n * Procedurally creates the full GLSL fragment shader source for this appearance\n * taking into account {@link Appearance#fragmentShaderSource} and {@link Appearance#material}.\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nAppearance.prototype.getFragmentShaderSource = function () {\n var parts = [];\n if (this.flat) {\n parts.push(\"#define FLAT\");\n }\n if (this.faceForward) {\n parts.push(\"#define FACE_FORWARD\");\n }\n if (defined(this.material)) {\n parts.push(this.material.shaderSource);\n }\n parts.push(this.fragmentShaderSource);\n\n return parts.join(\"\\n\");\n};\n\n/**\n * Determines if the geometry is translucent based on {@link Appearance#translucent} and {@link Material#isTranslucent}.\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nAppearance.prototype.isTranslucent = function () {\n return (\n (defined(this.material) && this.material.isTranslucent()) ||\n (!defined(this.material) && this.translucent)\n );\n};\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @returns {Object} The render state.\n */\nAppearance.prototype.getRenderState = function () {\n var translucent = this.isTranslucent();\n var rs = clone(this.renderState, false);\n if (translucent) {\n rs.depthMask = false;\n rs.blending = BlendingState.ALPHA_BLEND;\n } else {\n rs.depthMask = true;\n }\n return rs;\n};\n\n/**\n * @private\n */\nAppearance.getDefaultRenderState = function (translucent, closed, existing) {\n var rs = {\n depthTest: {\n enabled: true,\n },\n };\n\n if (translucent) {\n rs.depthMask = false;\n rs.blending = BlendingState.ALPHA_BLEND;\n }\n\n if (closed) {\n rs.cull = {\n enabled: true,\n face: CullFace.BACK,\n };\n }\n\n if (defined(existing)) {\n rs = combine(existing, rs, true);\n }\n\n return rs;\n};\nexport default Appearance;\n","/**\n * @private\n */\nvar ContextLimits = {\n _maximumCombinedTextureImageUnits: 0,\n _maximumCubeMapSize: 0,\n _maximumFragmentUniformVectors: 0,\n _maximumTextureImageUnits: 0,\n _maximumRenderbufferSize: 0,\n _maximumTextureSize: 0,\n _maximumVaryingVectors: 0,\n _maximumVertexAttributes: 0,\n _maximumVertexTextureImageUnits: 0,\n _maximumVertexUniformVectors: 0,\n _minimumAliasedLineWidth: 0,\n _maximumAliasedLineWidth: 0,\n _minimumAliasedPointSize: 0,\n _maximumAliasedPointSize: 0,\n _maximumViewportWidth: 0,\n _maximumViewportHeight: 0,\n _maximumTextureFilterAnisotropy: 0,\n _maximumDrawBuffers: 0,\n _maximumColorAttachments: 0,\n _highpFloatSupported: false,\n _highpIntSupported: false,\n};\n\nObject.defineProperties(ContextLimits, {\n /**\n * The maximum number of texture units that can be used from the vertex and fragment\n * shader with this WebGL implementation. The minimum is eight. If both shaders access the\n * same texture unit, this counts as two texture units.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_COMBINED_TEXTURE_IMAGE_UNITS</code>.\n */\n maximumCombinedTextureImageUnits: {\n get: function () {\n return ContextLimits._maximumCombinedTextureImageUnits;\n },\n },\n\n /**\n * The approximate maximum cube mape width and height supported by this WebGL implementation.\n * The minimum is 16, but most desktop and laptop implementations will support much larger sizes like 8,192.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_CUBE_MAP_TEXTURE_SIZE</code>.\n */\n maximumCubeMapSize: {\n get: function () {\n return ContextLimits._maximumCubeMapSize;\n },\n },\n\n /**\n * The maximum number of <code>vec4</code>, <code>ivec4</code>, and <code>bvec4</code>\n * uniforms that can be used by a fragment shader with this WebGL implementation. The minimum is 16.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_FRAGMENT_UNIFORM_VECTORS</code>.\n */\n maximumFragmentUniformVectors: {\n get: function () {\n return ContextLimits._maximumFragmentUniformVectors;\n },\n },\n\n /**\n * The maximum number of texture units that can be used from the fragment shader with this WebGL implementation. The minimum is eight.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_TEXTURE_IMAGE_UNITS</code>.\n */\n maximumTextureImageUnits: {\n get: function () {\n return ContextLimits._maximumTextureImageUnits;\n },\n },\n\n /**\n * The maximum renderbuffer width and height supported by this WebGL implementation.\n * The minimum is 16, but most desktop and laptop implementations will support much larger sizes like 8,192.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_RENDERBUFFER_SIZE</code>.\n */\n maximumRenderbufferSize: {\n get: function () {\n return ContextLimits._maximumRenderbufferSize;\n },\n },\n\n /**\n * The approximate maximum texture width and height supported by this WebGL implementation.\n * The minimum is 64, but most desktop and laptop implementations will support much larger sizes like 8,192.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_TEXTURE_SIZE</code>.\n */\n maximumTextureSize: {\n get: function () {\n return ContextLimits._maximumTextureSize;\n },\n },\n\n /**\n * The maximum number of <code>vec4</code> varying variables supported by this WebGL implementation.\n * The minimum is eight. Matrices and arrays count as multiple <code>vec4</code>s.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VARYING_VECTORS</code>.\n */\n maximumVaryingVectors: {\n get: function () {\n return ContextLimits._maximumVaryingVectors;\n },\n },\n\n /**\n * The maximum number of <code>vec4</code> vertex attributes supported by this WebGL implementation. The minimum is eight.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VERTEX_ATTRIBS</code>.\n */\n maximumVertexAttributes: {\n get: function () {\n return ContextLimits._maximumVertexAttributes;\n },\n },\n\n /**\n * The maximum number of texture units that can be used from the vertex shader with this WebGL implementation.\n * The minimum is zero, which means the GL does not support vertex texture fetch.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VERTEX_TEXTURE_IMAGE_UNITS</code>.\n */\n maximumVertexTextureImageUnits: {\n get: function () {\n return ContextLimits._maximumVertexTextureImageUnits;\n },\n },\n\n /**\n * The maximum number of <code>vec4</code>, <code>ivec4</code>, and <code>bvec4</code>\n * uniforms that can be used by a vertex shader with this WebGL implementation. The minimum is 16.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VERTEX_UNIFORM_VECTORS</code>.\n */\n maximumVertexUniformVectors: {\n get: function () {\n return ContextLimits._maximumVertexUniformVectors;\n },\n },\n\n /**\n * The minimum aliased line width, in pixels, supported by this WebGL implementation. It will be at most one.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n */\n minimumAliasedLineWidth: {\n get: function () {\n return ContextLimits._minimumAliasedLineWidth;\n },\n },\n\n /**\n * The maximum aliased line width, in pixels, supported by this WebGL implementation. It will be at least one.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n */\n maximumAliasedLineWidth: {\n get: function () {\n return ContextLimits._maximumAliasedLineWidth;\n },\n },\n\n /**\n * The minimum aliased point size, in pixels, supported by this WebGL implementation. It will be at most one.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_POINT_SIZE_RANGE</code>.\n */\n minimumAliasedPointSize: {\n get: function () {\n return ContextLimits._minimumAliasedPointSize;\n },\n },\n\n /**\n * The maximum aliased point size, in pixels, supported by this WebGL implementation. It will be at least one.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_POINT_SIZE_RANGE</code>.\n */\n maximumAliasedPointSize: {\n get: function () {\n return ContextLimits._maximumAliasedPointSize;\n },\n },\n\n /**\n * The maximum supported width of the viewport. It will be at least as large as the visible width of the associated canvas.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VIEWPORT_DIMS</code>.\n */\n maximumViewportWidth: {\n get: function () {\n return ContextLimits._maximumViewportWidth;\n },\n },\n\n /**\n * The maximum supported height of the viewport. It will be at least as large as the visible height of the associated canvas.\n * @memberof ContextLimits\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>MAX_VIEWPORT_DIMS</code>.\n */\n maximumViewportHeight: {\n get: function () {\n return ContextLimits._maximumViewportHeight;\n },\n },\n\n /**\n * The maximum degree of anisotropy for texture filtering\n * @memberof ContextLimits\n * @type {Number}\n */\n maximumTextureFilterAnisotropy: {\n get: function () {\n return ContextLimits._maximumTextureFilterAnisotropy;\n },\n },\n\n /**\n * The maximum number of simultaneous outputs that may be written in a fragment shader.\n * @memberof ContextLimits\n * @type {Number}\n */\n maximumDrawBuffers: {\n get: function () {\n return ContextLimits._maximumDrawBuffers;\n },\n },\n\n /**\n * The maximum number of color attachments supported.\n * @memberof ContextLimits\n * @type {Number}\n */\n maximumColorAttachments: {\n get: function () {\n return ContextLimits._maximumColorAttachments;\n },\n },\n\n /**\n * High precision float supported (<code>highp</code>) in fragment shaders.\n * @memberof ContextLimits\n * @type {Boolean}\n */\n highpFloatSupported: {\n get: function () {\n return ContextLimits._highpFloatSupported;\n },\n },\n\n /**\n * High precision int supported (<code>highp</code>) in fragment shaders.\n * @memberof ContextLimits\n * @type {Boolean}\n */\n highpIntSupported: {\n get: function () {\n return ContextLimits._highpIntSupported;\n },\n },\n});\nexport default ContextLimits;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\n\n/**\n * @private\n */\nfunction CubeMapFace(\n context,\n texture,\n textureTarget,\n targetFace,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n) {\n this._context = context;\n this._texture = texture;\n this._textureTarget = textureTarget;\n this._targetFace = targetFace;\n this._pixelDatatype = pixelDatatype;\n this._internalFormat = internalFormat;\n this._pixelFormat = pixelFormat;\n this._size = size;\n this._preMultiplyAlpha = preMultiplyAlpha;\n this._flipY = flipY;\n this._initialized = initialized;\n}\n\nObject.defineProperties(CubeMapFace.prototype, {\n pixelFormat: {\n get: function () {\n return this._pixelFormat;\n },\n },\n pixelDatatype: {\n get: function () {\n return this._pixelDatatype;\n },\n },\n _target: {\n get: function () {\n return this._targetFace;\n },\n },\n});\n\n/**\n * Copies texels from the source to the cubemap's face.\n *\n * @param {Object} source The source ImageData, HTMLImageElement, HTMLCanvasElement, HTMLVideoElement, or an object with a width, height, and typed array as shown in the example.\n * @param {Number} [xOffset=0] An offset in the x direction in the cubemap where copying begins.\n * @param {Number} [yOffset=0] An offset in the y direction in the cubemap where copying begins.\n *\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Create a cubemap with 1x1 faces, and make the +x face red.\n * var cubeMap = new CubeMap({\n * context : context\n * width : 1,\n * height : 1\n * });\n * cubeMap.positiveX.copyFrom({\n * width : 1,\n * height : 1,\n * arrayBufferView : new Uint8Array([255, 0, 0, 255])\n * });\n */\nCubeMapFace.prototype.copyFrom = function (source, xOffset, yOffset) {\n xOffset = defaultValue(xOffset, 0);\n yOffset = defaultValue(yOffset, 0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"source\", source);\n Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n if (xOffset + source.width > this._size) {\n throw new DeveloperError(\n \"xOffset + source.width must be less than or equal to width.\"\n );\n }\n if (yOffset + source.height > this._size) {\n throw new DeveloperError(\n \"yOffset + source.height must be less than or equal to height.\"\n );\n }\n //>>includeEnd('debug');\n\n var gl = this._context._gl;\n var target = this._textureTarget;\n var targetFace = this._targetFace;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n\n var width = source.width;\n var height = source.height;\n var arrayBufferView = source.arrayBufferView;\n\n var size = this._size;\n var pixelFormat = this._pixelFormat;\n var internalFormat = this._internalFormat;\n var pixelDatatype = this._pixelDatatype;\n\n var preMultiplyAlpha = this._preMultiplyAlpha;\n var flipY = this._flipY;\n\n var unpackAlignment = 4;\n if (defined(arrayBufferView)) {\n unpackAlignment = PixelFormat.alignmentInBytes(\n pixelFormat,\n pixelDatatype,\n width\n );\n }\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n var uploaded = false;\n if (!this._initialized) {\n if (xOffset === 0 && yOffset === 0 && width === size && height === size) {\n // initialize the entire texture\n if (defined(arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n size,\n size\n );\n }\n gl.texImage2D(\n targetFace,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n arrayBufferView\n );\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n gl.texImage2D(\n targetFace,\n 0,\n internalFormat,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n source\n );\n }\n uploaded = true;\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n // initialize the entire texture to zero\n var bufferView = PixelFormat.createTypedArray(\n pixelFormat,\n pixelDatatype,\n size,\n size\n );\n gl.texImage2D(\n targetFace,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n bufferView\n );\n }\n this._initialized = true;\n }\n\n if (!uploaded) {\n if (defined(arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n width,\n height\n );\n }\n gl.texSubImage2D(\n targetFace,\n 0,\n xOffset,\n yOffset,\n width,\n height,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n arrayBufferView\n );\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n // Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement\n gl.texSubImage2D(\n targetFace,\n 0,\n xOffset,\n yOffset,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n source\n );\n }\n }\n\n gl.bindTexture(target, null);\n};\n\n/**\n * Copies texels from the framebuffer to the cubemap's face.\n *\n * @param {Number} [xOffset=0] An offset in the x direction in the cubemap where copying begins.\n * @param {Number} [yOffset=0] An offset in the y direction in the cubemap where copying begins.\n * @param {Number} [framebufferXOffset=0] An offset in the x direction in the framebuffer where copying begins from.\n * @param {Number} [framebufferYOffset=0] An offset in the y direction in the framebuffer where copying begins from.\n * @param {Number} [width=CubeMap's width] The width of the subimage to copy.\n * @param {Number} [height=CubeMap's height] The height of the subimage to copy.\n *\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Copy the framebuffer contents to the +x cube map face.\n * cubeMap.positiveX.copyFromFramebuffer();\n */\nCubeMapFace.prototype.copyFromFramebuffer = function (\n xOffset,\n yOffset,\n framebufferXOffset,\n framebufferYOffset,\n width,\n height\n) {\n xOffset = defaultValue(xOffset, 0);\n yOffset = defaultValue(yOffset, 0);\n framebufferXOffset = defaultValue(framebufferXOffset, 0);\n framebufferYOffset = defaultValue(framebufferYOffset, 0);\n width = defaultValue(width, this._size);\n height = defaultValue(height, this._size);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferXOffset\",\n framebufferXOffset,\n 0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferYOffset\",\n framebufferYOffset,\n 0\n );\n if (xOffset + width > this._size) {\n throw new DeveloperError(\n \"xOffset + source.width must be less than or equal to width.\"\n );\n }\n if (yOffset + height > this._size) {\n throw new DeveloperError(\n \"yOffset + source.height must be less than or equal to height.\"\n );\n }\n if (this._pixelDatatype === PixelDatatype.FLOAT) {\n throw new DeveloperError(\n \"Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\"\n );\n }\n if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {\n throw new DeveloperError(\n \"Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\"\n );\n }\n //>>includeEnd('debug');\n\n var gl = this._context._gl;\n var target = this._textureTarget;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.copyTexSubImage2D(\n this._targetFace,\n 0,\n xOffset,\n yOffset,\n framebufferXOffset,\n framebufferYOffset,\n width,\n height\n );\n gl.bindTexture(target, null);\n this._initialized = true;\n};\nexport default CubeMapFace;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nvar MipmapHint = {\n DONT_CARE: WebGLConstants.DONT_CARE,\n FASTEST: WebGLConstants.FASTEST,\n NICEST: WebGLConstants.NICEST,\n\n validate: function (mipmapHint) {\n return (\n mipmapHint === MipmapHint.DONT_CARE ||\n mipmapHint === MipmapHint.FASTEST ||\n mipmapHint === MipmapHint.NICEST\n );\n },\n};\nexport default Object.freeze(MipmapHint);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Enumerates all possible filters used when magnifying WebGL textures.\n *\n * @enum {Number}\n *\n * @see TextureMinificationFilter\n */\nvar TextureMagnificationFilter = {\n /**\n * Samples the texture by returning the closest pixel.\n *\n * @type {Number}\n * @constant\n */\n NEAREST: WebGLConstants.NEAREST,\n /**\n * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than <code>NEAREST</code> filtering.\n *\n * @type {Number}\n * @constant\n */\n LINEAR: WebGLConstants.LINEAR,\n};\n\n/**\n * Validates the given <code>textureMinificationFilter</code> with respect to the possible enum values.\n * @param textureMagnificationFilter\n * @returns {Boolean} <code>true</code> if <code>textureMagnificationFilter</code> is valid.\n *\n * @private\n */\nTextureMagnificationFilter.validate = function (textureMagnificationFilter) {\n return (\n textureMagnificationFilter === TextureMagnificationFilter.NEAREST ||\n textureMagnificationFilter === TextureMagnificationFilter.LINEAR\n );\n};\n\nexport default Object.freeze(TextureMagnificationFilter);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Enumerates all possible filters used when minifying WebGL textures.\n *\n * @enum {Number}\n *\n * @see TextureMagnificationFilter\n */\nvar TextureMinificationFilter = {\n /**\n * Samples the texture by returning the closest pixel.\n *\n * @type {Number}\n * @constant\n */\n NEAREST: WebGLConstants.NEAREST,\n /**\n * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than <code>NEAREST</code> filtering.\n *\n * @type {Number}\n * @constant\n */\n LINEAR: WebGLConstants.LINEAR,\n /**\n * Selects the nearest mip level and applies nearest sampling within that level.\n * <p>\n * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n * </p>\n *\n * @type {Number}\n * @constant\n */\n NEAREST_MIPMAP_NEAREST: WebGLConstants.NEAREST_MIPMAP_NEAREST,\n /**\n * Selects the nearest mip level and applies linear sampling within that level.\n * <p>\n * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n * </p>\n *\n * @type {Number}\n * @constant\n */\n LINEAR_MIPMAP_NEAREST: WebGLConstants.LINEAR_MIPMAP_NEAREST,\n /**\n * Read texture values with nearest sampling from two adjacent mip levels and linearly interpolate the results.\n * <p>\n * This option provides a good balance of visual quality and speed when sampling from a mipmapped texture.\n * </p>\n * <p>\n * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n * </p>\n *\n * @type {Number}\n * @constant\n */\n NEAREST_MIPMAP_LINEAR: WebGLConstants.NEAREST_MIPMAP_LINEAR,\n /**\n * Read texture values with linear sampling from two adjacent mip levels and linearly interpolate the results.\n * <p>\n * This option provides a good balance of visual quality and speed when sampling from a mipmapped texture.\n * </p>\n * <p>\n * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n * </p>\n * @type {Number}\n * @constant\n */\n LINEAR_MIPMAP_LINEAR: WebGLConstants.LINEAR_MIPMAP_LINEAR,\n};\n\n/**\n * Validates the given <code>textureMinificationFilter</code> with respect to the possible enum values.\n *\n * @private\n *\n * @param textureMinificationFilter\n * @returns {Boolean} <code>true</code> if <code>textureMinificationFilter</code> is valid.\n */\nTextureMinificationFilter.validate = function (textureMinificationFilter) {\n return (\n textureMinificationFilter === TextureMinificationFilter.NEAREST ||\n textureMinificationFilter === TextureMinificationFilter.LINEAR ||\n textureMinificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n textureMinificationFilter ===\n TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n textureMinificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n textureMinificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR\n );\n};\n\nexport default Object.freeze(TextureMinificationFilter);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nvar TextureWrap = {\n CLAMP_TO_EDGE: WebGLConstants.CLAMP_TO_EDGE,\n REPEAT: WebGLConstants.REPEAT,\n MIRRORED_REPEAT: WebGLConstants.MIRRORED_REPEAT,\n\n validate: function (textureWrap) {\n return (\n textureWrap === TextureWrap.CLAMP_TO_EDGE ||\n textureWrap === TextureWrap.REPEAT ||\n textureWrap === TextureWrap.MIRRORED_REPEAT\n );\n },\n};\nexport default Object.freeze(TextureWrap);\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\nimport TextureWrap from \"./TextureWrap.js\";\n\n/**\n * @private\n */\nfunction Sampler(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var wrapS = defaultValue(options.wrapS, TextureWrap.CLAMP_TO_EDGE);\n var wrapT = defaultValue(options.wrapT, TextureWrap.CLAMP_TO_EDGE);\n var minificationFilter = defaultValue(\n options.minificationFilter,\n TextureMinificationFilter.LINEAR\n );\n var magnificationFilter = defaultValue(\n options.magnificationFilter,\n TextureMagnificationFilter.LINEAR\n );\n var maximumAnisotropy = defined(options.maximumAnisotropy)\n ? options.maximumAnisotropy\n : 1.0;\n\n //>>includeStart('debug', pragmas.debug);\n if (!TextureWrap.validate(wrapS)) {\n throw new DeveloperError(\"Invalid sampler.wrapS.\");\n }\n\n if (!TextureWrap.validate(wrapT)) {\n throw new DeveloperError(\"Invalid sampler.wrapT.\");\n }\n\n if (!TextureMinificationFilter.validate(minificationFilter)) {\n throw new DeveloperError(\"Invalid sampler.minificationFilter.\");\n }\n\n if (!TextureMagnificationFilter.validate(magnificationFilter)) {\n throw new DeveloperError(\"Invalid sampler.magnificationFilter.\");\n }\n\n Check.typeOf.number.greaterThanOrEquals(\n \"maximumAnisotropy\",\n maximumAnisotropy,\n 1.0\n );\n //>>includeEnd('debug');\n\n this._wrapS = wrapS;\n this._wrapT = wrapT;\n this._minificationFilter = minificationFilter;\n this._magnificationFilter = magnificationFilter;\n this._maximumAnisotropy = maximumAnisotropy;\n}\n\nObject.defineProperties(Sampler.prototype, {\n wrapS: {\n get: function () {\n return this._wrapS;\n },\n },\n wrapT: {\n get: function () {\n return this._wrapT;\n },\n },\n minificationFilter: {\n get: function () {\n return this._minificationFilter;\n },\n },\n magnificationFilter: {\n get: function () {\n return this._magnificationFilter;\n },\n },\n maximumAnisotropy: {\n get: function () {\n return this._maximumAnisotropy;\n },\n },\n});\n\nSampler.equals = function (left, right) {\n return (\n left === right ||\n (defined(left) &&\n defined(right) &&\n left._wrapS === right._wrapS &&\n left._wrapT === right._wrapT &&\n left._minificationFilter === right._minificationFilter &&\n left._magnificationFilter === right._magnificationFilter &&\n left._maximumAnisotropy === right._maximumAnisotropy)\n );\n};\n\nSampler.NEAREST = Object.freeze(\n new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.NEAREST,\n magnificationFilter: TextureMagnificationFilter.NEAREST,\n })\n);\nexport default Sampler;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport CubeMapFace from \"./CubeMapFace.js\";\nimport MipmapHint from \"./MipmapHint.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Sampler from \"./Sampler.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\n\n/**\n * @private\n */\nfunction CubeMap(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n var context = options.context;\n var source = options.source;\n var width;\n var height;\n\n if (defined(source)) {\n var faces = [\n source.positiveX,\n source.negativeX,\n source.positiveY,\n source.negativeY,\n source.positiveZ,\n source.negativeZ,\n ];\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !faces[0] ||\n !faces[1] ||\n !faces[2] ||\n !faces[3] ||\n !faces[4] ||\n !faces[5]\n ) {\n throw new DeveloperError(\n \"options.source requires positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ faces.\"\n );\n }\n //>>includeEnd('debug');\n\n width = faces[0].width;\n height = faces[0].height;\n\n //>>includeStart('debug', pragmas.debug);\n for (var i = 1; i < 6; ++i) {\n if (\n Number(faces[i].width) !== width ||\n Number(faces[i].height) !== height\n ) {\n throw new DeveloperError(\n \"Each face in options.source must have the same width and height.\"\n );\n }\n }\n //>>includeEnd('debug');\n } else {\n width = options.width;\n height = options.height;\n }\n\n var size = width;\n var pixelDatatype = defaultValue(\n options.pixelDatatype,\n PixelDatatype.UNSIGNED_BYTE\n );\n var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);\n var internalFormat = PixelFormat.toInternalFormat(\n pixelFormat,\n pixelDatatype,\n context\n );\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(width) || !defined(height)) {\n throw new DeveloperError(\n \"options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.\"\n );\n }\n\n if (width !== height) {\n throw new DeveloperError(\"Width must equal height.\");\n }\n\n if (size <= 0) {\n throw new DeveloperError(\"Width and height must be greater than zero.\");\n }\n\n if (size > ContextLimits.maximumCubeMapSize) {\n throw new DeveloperError(\n \"Width and height must be less than or equal to the maximum cube map size (\" +\n ContextLimits.maximumCubeMapSize +\n \"). Check maximumCubeMapSize.\"\n );\n }\n\n if (!PixelFormat.validate(pixelFormat)) {\n throw new DeveloperError(\"Invalid options.pixelFormat.\");\n }\n\n if (PixelFormat.isDepthFormat(pixelFormat)) {\n throw new DeveloperError(\n \"options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.\"\n );\n }\n\n if (!PixelDatatype.validate(pixelDatatype)) {\n throw new DeveloperError(\"Invalid options.pixelDatatype.\");\n }\n\n if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {\n throw new DeveloperError(\n \"When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.\"\n );\n }\n\n if (\n pixelDatatype === PixelDatatype.HALF_FLOAT &&\n !context.halfFloatingPointTexture\n ) {\n throw new DeveloperError(\n \"When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension.\"\n );\n }\n //>>includeEnd('debug');\n\n var sizeInBytes =\n PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, size, size) * 6;\n\n // Use premultiplied alpha for opaque textures should perform better on Chrome:\n // http://media.tojicode.com/webglCamp4/#20\n var preMultiplyAlpha =\n options.preMultiplyAlpha ||\n pixelFormat === PixelFormat.RGB ||\n pixelFormat === PixelFormat.LUMINANCE;\n var flipY = defaultValue(options.flipY, true);\n\n var gl = context._gl;\n var textureTarget = gl.TEXTURE_CUBE_MAP;\n var texture = gl.createTexture();\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(textureTarget, texture);\n\n function createFace(target, sourceFace, preMultiplyAlpha, flipY) {\n var arrayBufferView = sourceFace.arrayBufferView;\n if (!defined(arrayBufferView)) {\n arrayBufferView = sourceFace.bufferView;\n }\n\n var unpackAlignment = 4;\n if (defined(arrayBufferView)) {\n unpackAlignment = PixelFormat.alignmentInBytes(\n pixelFormat,\n pixelDatatype,\n width\n );\n }\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n if (defined(arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n size,\n size\n );\n }\n gl.texImage2D(\n target,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n arrayBufferView\n );\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n // Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement\n gl.texImage2D(\n target,\n 0,\n internalFormat,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n sourceFace\n );\n }\n }\n\n if (defined(source)) {\n createFace(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n source.positiveX,\n preMultiplyAlpha,\n flipY\n );\n createFace(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n source.negativeX,\n preMultiplyAlpha,\n flipY\n );\n createFace(\n gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n source.positiveY,\n preMultiplyAlpha,\n flipY\n );\n createFace(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n source.negativeY,\n preMultiplyAlpha,\n flipY\n );\n createFace(\n gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n source.positiveZ,\n preMultiplyAlpha,\n flipY\n );\n createFace(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n source.negativeZ,\n preMultiplyAlpha,\n flipY\n );\n } else {\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n gl.texImage2D(\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n 0,\n internalFormat,\n size,\n size,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n }\n gl.bindTexture(textureTarget, null);\n\n this._context = context;\n this._textureFilterAnisotropic = context._textureFilterAnisotropic;\n this._textureTarget = textureTarget;\n this._texture = texture;\n this._pixelFormat = pixelFormat;\n this._pixelDatatype = pixelDatatype;\n this._size = size;\n this._hasMipmap = false;\n this._sizeInBytes = sizeInBytes;\n this._preMultiplyAlpha = preMultiplyAlpha;\n this._flipY = flipY;\n this._sampler = undefined;\n\n var initialized = defined(source);\n this._positiveX = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_POSITIVE_X,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n this._negativeX = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n this._positiveY = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Y,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n this._negativeY = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n this._positiveZ = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_POSITIVE_Z,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n this._negativeZ = new CubeMapFace(\n context,\n texture,\n textureTarget,\n gl.TEXTURE_CUBE_MAP_NEGATIVE_Z,\n internalFormat,\n pixelFormat,\n pixelDatatype,\n size,\n preMultiplyAlpha,\n flipY,\n initialized\n );\n\n this.sampler = defined(options.sampler) ? options.sampler : new Sampler();\n}\n\nObject.defineProperties(CubeMap.prototype, {\n positiveX: {\n get: function () {\n return this._positiveX;\n },\n },\n negativeX: {\n get: function () {\n return this._negativeX;\n },\n },\n positiveY: {\n get: function () {\n return this._positiveY;\n },\n },\n negativeY: {\n get: function () {\n return this._negativeY;\n },\n },\n positiveZ: {\n get: function () {\n return this._positiveZ;\n },\n },\n negativeZ: {\n get: function () {\n return this._negativeZ;\n },\n },\n sampler: {\n get: function () {\n return this._sampler;\n },\n set: function (sampler) {\n var minificationFilter = sampler.minificationFilter;\n var magnificationFilter = sampler.magnificationFilter;\n\n var mipmap =\n minificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n minificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n minificationFilter ===\n TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n minificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;\n\n var context = this._context;\n var pixelDatatype = this._pixelDatatype;\n\n // float textures only support nearest filtering unless the linear extensions are supported, so override the sampler's settings\n if (\n (pixelDatatype === PixelDatatype.FLOAT &&\n !context.textureFloatLinear) ||\n (pixelDatatype === PixelDatatype.HALF_FLOAT &&\n !context.textureHalfFloatLinear)\n ) {\n minificationFilter = mipmap\n ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST\n : TextureMinificationFilter.NEAREST;\n magnificationFilter = TextureMagnificationFilter.NEAREST;\n }\n\n var gl = context._gl;\n var target = this._textureTarget;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);\n if (defined(this._textureFilterAnisotropic)) {\n gl.texParameteri(\n target,\n this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,\n sampler.maximumAnisotropy\n );\n }\n gl.bindTexture(target, null);\n\n this._sampler = sampler;\n },\n },\n pixelFormat: {\n get: function () {\n return this._pixelFormat;\n },\n },\n pixelDatatype: {\n get: function () {\n return this._pixelDatatype;\n },\n },\n width: {\n get: function () {\n return this._size;\n },\n },\n height: {\n get: function () {\n return this._size;\n },\n },\n sizeInBytes: {\n get: function () {\n if (this._hasMipmap) {\n return Math.floor((this._sizeInBytes * 4) / 3);\n }\n return this._sizeInBytes;\n },\n },\n preMultiplyAlpha: {\n get: function () {\n return this._preMultiplyAlpha;\n },\n },\n flipY: {\n get: function () {\n return this._flipY;\n },\n },\n\n _target: {\n get: function () {\n return this._textureTarget;\n },\n },\n});\n\n/**\n * Generates a complete mipmap chain for each cubemap face.\n *\n * @param {MipmapHint} [hint=MipmapHint.DONT_CARE] A performance vs. quality hint.\n *\n * @exception {DeveloperError} hint is invalid.\n * @exception {DeveloperError} This CubeMap's width must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This CubeMap's height must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Generate mipmaps, and then set the sampler so mipmaps are used for\n * // minification when the cube map is sampled.\n * cubeMap.generateMipmap();\n * cubeMap.sampler = new Sampler({\n * minificationFilter : Cesium.TextureMinificationFilter.NEAREST_MIPMAP_LINEAR\n * });\n */\nCubeMap.prototype.generateMipmap = function (hint) {\n hint = defaultValue(hint, MipmapHint.DONT_CARE);\n\n //>>includeStart('debug', pragmas.debug);\n if (this._size > 1 && !CesiumMath.isPowerOfTwo(this._size)) {\n throw new DeveloperError(\n \"width and height must be a power of two to call generateMipmap().\"\n );\n }\n if (!MipmapHint.validate(hint)) {\n throw new DeveloperError(\"hint is invalid.\");\n }\n //>>includeEnd('debug');\n\n this._hasMipmap = true;\n\n var gl = this._context._gl;\n var target = this._textureTarget;\n gl.hint(gl.GENERATE_MIPMAP_HINT, hint);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.generateMipmap(target);\n gl.bindTexture(target, null);\n};\n\nCubeMap.prototype.isDestroyed = function () {\n return false;\n};\n\nCubeMap.prototype.destroy = function () {\n this._context._gl.deleteTexture(this._texture);\n this._positiveX = destroyObject(this._positiveX);\n this._negativeX = destroyObject(this._negativeX);\n this._positiveY = destroyObject(this._positiveY);\n this._negativeY = destroyObject(this._negativeY);\n this._positiveZ = destroyObject(this._positiveZ);\n this._negativeZ = destroyObject(this._negativeZ);\n return destroyObject(this);\n};\nexport default CubeMap;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport MipmapHint from \"./MipmapHint.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Sampler from \"./Sampler.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\n\n/**\n * @private\n */\nfunction Texture(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n var context = options.context;\n var width = options.width;\n var height = options.height;\n var source = options.source;\n\n if (defined(source)) {\n if (!defined(width)) {\n width = defaultValue(source.videoWidth, source.width);\n }\n if (!defined(height)) {\n height = defaultValue(source.videoHeight, source.height);\n }\n }\n\n var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);\n var pixelDatatype = defaultValue(\n options.pixelDatatype,\n PixelDatatype.UNSIGNED_BYTE\n );\n var internalFormat = PixelFormat.toInternalFormat(\n pixelFormat,\n pixelDatatype,\n context\n );\n\n var isCompressed = PixelFormat.isCompressedFormat(internalFormat);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(width) || !defined(height)) {\n throw new DeveloperError(\n \"options requires a source field to create an initialized texture or width and height fields to create a blank texture.\"\n );\n }\n\n Check.typeOf.number.greaterThan(\"width\", width, 0);\n\n if (width > ContextLimits.maximumTextureSize) {\n throw new DeveloperError(\n \"Width must be less than or equal to the maximum texture size (\" +\n ContextLimits.maximumTextureSize +\n \"). Check maximumTextureSize.\"\n );\n }\n\n Check.typeOf.number.greaterThan(\"height\", height, 0);\n\n if (height > ContextLimits.maximumTextureSize) {\n throw new DeveloperError(\n \"Height must be less than or equal to the maximum texture size (\" +\n ContextLimits.maximumTextureSize +\n \"). Check maximumTextureSize.\"\n );\n }\n\n if (!PixelFormat.validate(pixelFormat)) {\n throw new DeveloperError(\"Invalid options.pixelFormat.\");\n }\n\n if (!isCompressed && !PixelDatatype.validate(pixelDatatype)) {\n throw new DeveloperError(\"Invalid options.pixelDatatype.\");\n }\n\n if (\n pixelFormat === PixelFormat.DEPTH_COMPONENT &&\n pixelDatatype !== PixelDatatype.UNSIGNED_SHORT &&\n pixelDatatype !== PixelDatatype.UNSIGNED_INT\n ) {\n throw new DeveloperError(\n \"When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.\"\n );\n }\n\n if (\n pixelFormat === PixelFormat.DEPTH_STENCIL &&\n pixelDatatype !== PixelDatatype.UNSIGNED_INT_24_8\n ) {\n throw new DeveloperError(\n \"When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.\"\n );\n }\n\n if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {\n throw new DeveloperError(\n \"When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture.\"\n );\n }\n\n if (\n pixelDatatype === PixelDatatype.HALF_FLOAT &&\n !context.halfFloatingPointTexture\n ) {\n throw new DeveloperError(\n \"When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.\"\n );\n }\n\n if (PixelFormat.isDepthFormat(pixelFormat)) {\n if (defined(source)) {\n throw new DeveloperError(\n \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.\"\n );\n }\n\n if (!context.depthTexture) {\n throw new DeveloperError(\n \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check context.depthTexture.\"\n );\n }\n }\n\n if (isCompressed) {\n if (!defined(source) || !defined(source.arrayBufferView)) {\n throw new DeveloperError(\n \"When options.pixelFormat is compressed, options.source.arrayBufferView must be defined.\"\n );\n }\n\n if (PixelFormat.isDXTFormat(internalFormat) && !context.s3tc) {\n throw new DeveloperError(\n \"When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_texture_compression_s3tc extension. Check context.s3tc.\"\n );\n } else if (PixelFormat.isPVRTCFormat(internalFormat) && !context.pvrtc) {\n throw new DeveloperError(\n \"When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_texture_compression_pvrtc extension. Check context.pvrtc.\"\n );\n } else if (PixelFormat.isETC1Format(internalFormat) && !context.etc1) {\n throw new DeveloperError(\n \"When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_texture_compression_etc1 extension. Check context.etc1.\"\n );\n }\n\n if (\n PixelFormat.compressedTextureSizeInBytes(\n internalFormat,\n width,\n height\n ) !== source.arrayBufferView.byteLength\n ) {\n throw new DeveloperError(\n \"The byte length of the array buffer is invalid for the compressed texture with the given width and height.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n // Use premultiplied alpha for opaque textures should perform better on Chrome:\n // http://media.tojicode.com/webglCamp4/#20\n var preMultiplyAlpha =\n options.preMultiplyAlpha ||\n pixelFormat === PixelFormat.RGB ||\n pixelFormat === PixelFormat.LUMINANCE;\n var flipY = defaultValue(options.flipY, true);\n\n var initialized = true;\n\n var gl = context._gl;\n var textureTarget = gl.TEXTURE_2D;\n var texture = gl.createTexture();\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(textureTarget, texture);\n\n var unpackAlignment = 4;\n if (defined(source) && defined(source.arrayBufferView) && !isCompressed) {\n unpackAlignment = PixelFormat.alignmentInBytes(\n pixelFormat,\n pixelDatatype,\n width\n );\n }\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n if (defined(source)) {\n if (defined(source.arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n // Source: typed array\n var arrayBufferView = source.arrayBufferView;\n if (isCompressed) {\n gl.compressedTexImage2D(\n textureTarget,\n 0,\n internalFormat,\n width,\n height,\n 0,\n arrayBufferView\n );\n } else {\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n width,\n height\n );\n }\n gl.texImage2D(\n textureTarget,\n 0,\n internalFormat,\n width,\n height,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n arrayBufferView\n );\n\n if (defined(source.mipLevels)) {\n var mipWidth = width;\n var mipHeight = height;\n for (var i = 0; i < source.mipLevels.length; ++i) {\n mipWidth = Math.floor(mipWidth / 2) | 0;\n if (mipWidth < 1) {\n mipWidth = 1;\n }\n mipHeight = Math.floor(mipHeight / 2) | 0;\n if (mipHeight < 1) {\n mipHeight = 1;\n }\n gl.texImage2D(\n textureTarget,\n i + 1,\n internalFormat,\n mipWidth,\n mipHeight,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n source.mipLevels[i]\n );\n }\n }\n }\n } else if (defined(source.framebuffer)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n // Source: framebuffer\n if (source.framebuffer !== context.defaultFramebuffer) {\n source.framebuffer._bind();\n }\n\n gl.copyTexImage2D(\n textureTarget,\n 0,\n internalFormat,\n source.xOffset,\n source.yOffset,\n width,\n height,\n 0\n );\n\n if (source.framebuffer !== context.defaultFramebuffer) {\n source.framebuffer._unBind();\n }\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n // Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement\n gl.texImage2D(\n textureTarget,\n 0,\n internalFormat,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n source\n );\n }\n } else {\n gl.texImage2D(\n textureTarget,\n 0,\n internalFormat,\n width,\n height,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n null\n );\n initialized = false;\n }\n gl.bindTexture(textureTarget, null);\n\n var sizeInBytes;\n if (isCompressed) {\n sizeInBytes = PixelFormat.compressedTextureSizeInBytes(\n pixelFormat,\n width,\n height\n );\n } else {\n sizeInBytes = PixelFormat.textureSizeInBytes(\n pixelFormat,\n pixelDatatype,\n width,\n height\n );\n }\n\n this._id = createGuid();\n this._context = context;\n this._textureFilterAnisotropic = context._textureFilterAnisotropic;\n this._textureTarget = textureTarget;\n this._texture = texture;\n this._internalFormat = internalFormat;\n this._pixelFormat = pixelFormat;\n this._pixelDatatype = pixelDatatype;\n this._width = width;\n this._height = height;\n this._dimensions = new Cartesian2(width, height);\n this._hasMipmap = false;\n this._sizeInBytes = sizeInBytes;\n this._preMultiplyAlpha = preMultiplyAlpha;\n this._flipY = flipY;\n this._initialized = initialized;\n this._sampler = undefined;\n\n this.sampler = defined(options.sampler) ? options.sampler : new Sampler();\n}\n\n/**\n * This function is identical to using the Texture constructor except that it can be\n * replaced with a mock/spy in tests.\n * @private\n */\nTexture.create = function (options) {\n return new Texture(options);\n};\n\n/**\n * Creates a texture, and copies a subimage of the framebuffer to it. When called without arguments,\n * the texture is the same width and height as the framebuffer and contains its contents.\n *\n * @param {Object} options Object with the following properties:\n * @param {Context} options.context The context in which the Texture gets created.\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGB] The texture's internal pixel format.\n * @param {Number} [options.framebufferXOffset=0] An offset in the x direction in the framebuffer where copying begins from.\n * @param {Number} [options.framebufferYOffset=0] An offset in the y direction in the framebuffer where copying begins from.\n * @param {Number} [options.width=canvas.clientWidth] The width of the texture in texels.\n * @param {Number} [options.height=canvas.clientHeight] The height of the texture in texels.\n * @param {Framebuffer} [options.framebuffer=defaultFramebuffer] The framebuffer from which to create the texture. If this\n * parameter is not specified, the default framebuffer is used.\n * @returns {Texture} A texture with contents from the framebuffer.\n *\n * @exception {DeveloperError} Invalid pixelFormat.\n * @exception {DeveloperError} pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.\n * @exception {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferXOffset + width must be less than or equal to canvas.clientWidth.\n * @exception {DeveloperError} framebufferYOffset + height must be less than or equal to canvas.clientHeight.\n *\n *\n * @example\n * // Create a texture with the contents of the framebuffer.\n * var t = Texture.fromFramebuffer({\n * context : context\n * });\n *\n * @see Sampler\n *\n * @private\n */\nTexture.fromFramebuffer = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n var context = options.context;\n var gl = context._gl;\n\n var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGB);\n var framebufferXOffset = defaultValue(options.framebufferXOffset, 0);\n var framebufferYOffset = defaultValue(options.framebufferYOffset, 0);\n var width = defaultValue(options.width, gl.drawingBufferWidth);\n var height = defaultValue(options.height, gl.drawingBufferHeight);\n var framebuffer = options.framebuffer;\n\n //>>includeStart('debug', pragmas.debug);\n if (!PixelFormat.validate(pixelFormat)) {\n throw new DeveloperError(\"Invalid pixelFormat.\");\n }\n if (\n PixelFormat.isDepthFormat(pixelFormat) ||\n PixelFormat.isCompressedFormat(pixelFormat)\n ) {\n throw new DeveloperError(\n \"pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.\"\n );\n }\n Check.defined(\"options.context\", options.context);\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferXOffset\",\n framebufferXOffset,\n 0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferYOffset\",\n framebufferYOffset,\n 0\n );\n if (framebufferXOffset + width > gl.drawingBufferWidth) {\n throw new DeveloperError(\n \"framebufferXOffset + width must be less than or equal to drawingBufferWidth\"\n );\n }\n if (framebufferYOffset + height > gl.drawingBufferHeight) {\n throw new DeveloperError(\n \"framebufferYOffset + height must be less than or equal to drawingBufferHeight.\"\n );\n }\n //>>includeEnd('debug');\n\n var texture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: pixelFormat,\n source: {\n framebuffer: defined(framebuffer)\n ? framebuffer\n : context.defaultFramebuffer,\n xOffset: framebufferXOffset,\n yOffset: framebufferYOffset,\n width: width,\n height: height,\n },\n });\n\n return texture;\n};\n\nObject.defineProperties(Texture.prototype, {\n /**\n * A unique id for the texture\n * @memberof Texture.prototype\n * @type {String}\n * @readonly\n * @private\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * The sampler to use when sampling this texture.\n * Create a sampler by calling {@link Sampler}. If this\n * parameter is not specified, a default sampler is used. The default sampler clamps texture\n * coordinates in both directions, uses linear filtering for both magnification and minification,\n * and uses a maximum anisotropy of 1.0.\n * @memberof Texture.prototype\n * @type {Object}\n */\n sampler: {\n get: function () {\n return this._sampler;\n },\n set: function (sampler) {\n var minificationFilter = sampler.minificationFilter;\n var magnificationFilter = sampler.magnificationFilter;\n var context = this._context;\n var pixelFormat = this._pixelFormat;\n var pixelDatatype = this._pixelDatatype;\n\n var mipmap =\n minificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n minificationFilter ===\n TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n minificationFilter ===\n TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n minificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;\n\n // float textures only support nearest filtering unless the linear extensions are supported, so override the sampler's settings\n if (\n (pixelDatatype === PixelDatatype.FLOAT &&\n !context.textureFloatLinear) ||\n (pixelDatatype === PixelDatatype.HALF_FLOAT &&\n !context.textureHalfFloatLinear)\n ) {\n minificationFilter = mipmap\n ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST\n : TextureMinificationFilter.NEAREST;\n magnificationFilter = TextureMagnificationFilter.NEAREST;\n }\n\n // WebGL 2 depth texture only support nearest filtering. See section 3.8.13 OpenGL ES 3 spec\n if (context.webgl2) {\n if (PixelFormat.isDepthFormat(pixelFormat)) {\n minificationFilter = TextureMinificationFilter.NEAREST;\n magnificationFilter = TextureMagnificationFilter.NEAREST;\n }\n }\n\n var gl = context._gl;\n var target = this._textureTarget;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);\n gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);\n gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);\n gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);\n if (defined(this._textureFilterAnisotropic)) {\n gl.texParameteri(\n target,\n this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,\n sampler.maximumAnisotropy\n );\n }\n gl.bindTexture(target, null);\n\n this._sampler = sampler;\n },\n },\n pixelFormat: {\n get: function () {\n return this._pixelFormat;\n },\n },\n pixelDatatype: {\n get: function () {\n return this._pixelDatatype;\n },\n },\n dimensions: {\n get: function () {\n return this._dimensions;\n },\n },\n preMultiplyAlpha: {\n get: function () {\n return this._preMultiplyAlpha;\n },\n },\n flipY: {\n get: function () {\n return this._flipY;\n },\n },\n width: {\n get: function () {\n return this._width;\n },\n },\n height: {\n get: function () {\n return this._height;\n },\n },\n sizeInBytes: {\n get: function () {\n if (this._hasMipmap) {\n return Math.floor((this._sizeInBytes * 4) / 3);\n }\n return this._sizeInBytes;\n },\n },\n _target: {\n get: function () {\n return this._textureTarget;\n },\n },\n});\n\n/**\n * Copy new image data into this texture, from a source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, or {@link HTMLVideoElement}.\n * or an object with width, height, and arrayBufferView properties.\n *\n * @param {Object} source The source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, or {@link HTMLVideoElement},\n * or an object with width, height, and arrayBufferView properties.\n * @param {Number} [xOffset=0] The offset in the x direction within the texture to copy into.\n * @param {Number} [yOffset=0] The offset in the y direction within the texture to copy into.\n *\n * @exception {DeveloperError} Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call copyFrom with a compressed texture pixel format.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n *\n * @example\n * texture.copyFrom({\n * width : 1,\n * height : 1,\n * arrayBufferView : new Uint8Array([255, 0, 0, 255])\n * });\n */\nTexture.prototype.copyFrom = function (source, xOffset, yOffset) {\n xOffset = defaultValue(xOffset, 0);\n yOffset = defaultValue(yOffset, 0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"source\", source);\n if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\"\n );\n }\n if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call copyFrom with a compressed texture pixel format.\"\n );\n }\n Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n Check.typeOf.number.lessThanOrEquals(\n \"xOffset + source.width\",\n xOffset + source.width,\n this._width\n );\n Check.typeOf.number.lessThanOrEquals(\n \"yOffset + source.height\",\n yOffset + source.height,\n this._height\n );\n //>>includeEnd('debug');\n\n var context = this._context;\n var gl = context._gl;\n var target = this._textureTarget;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n\n var width = source.width;\n var height = source.height;\n var arrayBufferView = source.arrayBufferView;\n\n var textureWidth = this._width;\n var textureHeight = this._height;\n var internalFormat = this._internalFormat;\n var pixelFormat = this._pixelFormat;\n var pixelDatatype = this._pixelDatatype;\n\n var preMultiplyAlpha = this._preMultiplyAlpha;\n var flipY = this._flipY;\n\n var unpackAlignment = 4;\n if (defined(arrayBufferView)) {\n unpackAlignment = PixelFormat.alignmentInBytes(\n pixelFormat,\n pixelDatatype,\n width\n );\n }\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n var uploaded = false;\n if (!this._initialized) {\n if (\n xOffset === 0 &&\n yOffset === 0 &&\n width === textureWidth &&\n height === textureHeight\n ) {\n // initialize the entire texture\n if (defined(arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n textureWidth,\n textureHeight\n );\n }\n gl.texImage2D(\n target,\n 0,\n internalFormat,\n textureWidth,\n textureHeight,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n arrayBufferView\n );\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n gl.texImage2D(\n target,\n 0,\n internalFormat,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n source\n );\n }\n uploaded = true;\n } else {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n // initialize the entire texture to zero\n var bufferView = PixelFormat.createTypedArray(\n pixelFormat,\n pixelDatatype,\n textureWidth,\n textureHeight\n );\n gl.texImage2D(\n target,\n 0,\n internalFormat,\n textureWidth,\n textureHeight,\n 0,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n bufferView\n );\n }\n this._initialized = true;\n }\n\n if (!uploaded) {\n if (defined(arrayBufferView)) {\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n if (flipY) {\n arrayBufferView = PixelFormat.flipY(\n arrayBufferView,\n pixelFormat,\n pixelDatatype,\n width,\n height\n );\n }\n gl.texSubImage2D(\n target,\n 0,\n xOffset,\n yOffset,\n width,\n height,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n arrayBufferView\n );\n } else {\n // Only valid for DOM-Element uploads\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n gl.texSubImage2D(\n target,\n 0,\n xOffset,\n yOffset,\n pixelFormat,\n PixelDatatype.toWebGLConstant(pixelDatatype, context),\n source\n );\n }\n }\n\n gl.bindTexture(target, null);\n};\n\n/**\n * @param {Number} [xOffset=0] The offset in the x direction within the texture to copy into.\n * @param {Number} [yOffset=0] The offset in the y direction within the texture to copy into.\n * @param {Number} [framebufferXOffset=0] optional\n * @param {Number} [framebufferYOffset=0] optional\n * @param {Number} [width=width] optional\n * @param {Number} [height=height] optional\n *\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\n * @exception {DeveloperError} Cannot call copyFrom with a compressed texture pixel format.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + height must be less than or equal to height.\n */\nTexture.prototype.copyFromFramebuffer = function (\n xOffset,\n yOffset,\n framebufferXOffset,\n framebufferYOffset,\n width,\n height\n) {\n xOffset = defaultValue(xOffset, 0);\n yOffset = defaultValue(yOffset, 0);\n framebufferXOffset = defaultValue(framebufferXOffset, 0);\n framebufferYOffset = defaultValue(framebufferYOffset, 0);\n width = defaultValue(width, this._width);\n height = defaultValue(height, this._height);\n\n //>>includeStart('debug', pragmas.debug);\n if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\"\n );\n }\n if (this._pixelDatatype === PixelDatatype.FLOAT) {\n throw new DeveloperError(\n \"Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\"\n );\n }\n if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {\n throw new DeveloperError(\n \"Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\"\n );\n }\n if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call copyFrom with a compressed texture pixel format.\"\n );\n }\n\n Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferXOffset\",\n framebufferXOffset,\n 0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"framebufferYOffset\",\n framebufferYOffset,\n 0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"xOffset + width\",\n xOffset + width,\n this._width\n );\n Check.typeOf.number.lessThanOrEquals(\n \"yOffset + height\",\n yOffset + height,\n this._height\n );\n //>>includeEnd('debug');\n\n var gl = this._context._gl;\n var target = this._textureTarget;\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.copyTexSubImage2D(\n target,\n 0,\n xOffset,\n yOffset,\n framebufferXOffset,\n framebufferYOffset,\n width,\n height\n );\n gl.bindTexture(target, null);\n this._initialized = true;\n};\n\n/**\n * @param {MipmapHint} [hint=MipmapHint.DONT_CARE] optional.\n *\n * @exception {DeveloperError} Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call generateMipmap when the texture pixel format is a compressed format.\n * @exception {DeveloperError} hint is invalid.\n * @exception {DeveloperError} This texture's width must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This texture's height must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n */\nTexture.prototype.generateMipmap = function (hint) {\n hint = defaultValue(hint, MipmapHint.DONT_CARE);\n\n //>>includeStart('debug', pragmas.debug);\n if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\"\n );\n }\n if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n throw new DeveloperError(\n \"Cannot call generateMipmap with a compressed pixel format.\"\n );\n }\n if (this._width > 1 && !CesiumMath.isPowerOfTwo(this._width)) {\n throw new DeveloperError(\n \"width must be a power of two to call generateMipmap().\"\n );\n }\n if (this._height > 1 && !CesiumMath.isPowerOfTwo(this._height)) {\n throw new DeveloperError(\n \"height must be a power of two to call generateMipmap().\"\n );\n }\n if (!MipmapHint.validate(hint)) {\n throw new DeveloperError(\"hint is invalid.\");\n }\n //>>includeEnd('debug');\n\n this._hasMipmap = true;\n\n var gl = this._context._gl;\n var target = this._textureTarget;\n\n gl.hint(gl.GENERATE_MIPMAP_HINT, hint);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(target, this._texture);\n gl.generateMipmap(target);\n gl.bindTexture(target, null);\n};\n\nTexture.prototype.isDestroyed = function () {\n return false;\n};\n\nTexture.prototype.destroy = function () {\n this._context._gl.deleteTexture(this._texture);\n return destroyObject(this);\n};\nexport default Texture;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport loadCRN from \"../Core/loadCRN.js\";\nimport loadKTX from \"../Core/loadKTX.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport AspectRampMaterial from \"../Shaders/Materials/AspectRampMaterial.js\";\nimport BumpMapMaterial from \"../Shaders/Materials/BumpMapMaterial.js\";\nimport CheckerboardMaterial from \"../Shaders/Materials/CheckerboardMaterial.js\";\nimport DotMaterial from \"../Shaders/Materials/DotMaterial.js\";\nimport ElevationContourMaterial from \"../Shaders/Materials/ElevationContourMaterial.js\";\nimport ElevationRampMaterial from \"../Shaders/Materials/ElevationRampMaterial.js\";\nimport FadeMaterial from \"../Shaders/Materials/FadeMaterial.js\";\nimport GridMaterial from \"../Shaders/Materials/GridMaterial.js\";\nimport NormalMapMaterial from \"../Shaders/Materials/NormalMapMaterial.js\";\nimport PolylineArrowMaterial from \"../Shaders/Materials/PolylineArrowMaterial.js\";\nimport PolylineDashMaterial from \"../Shaders/Materials/PolylineDashMaterial.js\";\nimport PolylineGlowMaterial from \"../Shaders/Materials/PolylineGlowMaterial.js\";\nimport PolylineOutlineMaterial from \"../Shaders/Materials/PolylineOutlineMaterial.js\";\nimport RimLightingMaterial from \"../Shaders/Materials/RimLightingMaterial.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport SlopeRampMaterial from \"../Shaders/Materials/SlopeRampMaterial.js\";\nimport StripeMaterial from \"../Shaders/Materials/StripeMaterial.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport WaterMaterial from \"../Shaders/Materials/Water.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * A Material defines surface appearance through a combination of diffuse, specular,\n * normal, emission, and alpha components. These values are specified using a\n * JSON schema called Fabric which gets parsed and assembled into glsl shader code\n * behind-the-scenes. Check out the {@link https://github.com/CesiumGS/cesium/wiki/Fabric|wiki page}\n * for more details on Fabric.\n * <br /><br />\n * <style type=\"text/css\">\n * #materialDescriptions code {\n * font-weight: normal;\n * font-family: Consolas, 'Lucida Console', Monaco, monospace;\n * color: #A35A00;\n * }\n * #materialDescriptions ul, #materialDescriptions ul ul {\n * list-style-type: none;\n * }\n * #materialDescriptions ul ul {\n * margin-bottom: 10px;\n * }\n * #materialDescriptions ul ul li {\n * font-weight: normal;\n * color: #000000;\n * text-indent: -2em;\n * margin-left: 2em;\n * }\n * #materialDescriptions ul li {\n * font-weight: bold;\n * color: #0053CF;\n * }\n * </style>\n *\n * Base material types and their uniforms:\n * <div id='materialDescriptions'>\n * <ul>\n * <li>Color</li>\n * <ul>\n * <li><code>color</code>: rgba color object.</li>\n * </ul>\n * <li>Image</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * </ul>\n * <li>DiffuseMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channels</code>: Three character string containing any combination of r, g, b, and a for selecting the desired image channels.</li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * </ul>\n * <li>AlphaMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channel</code>: One character string containing r, g, b, or a for selecting the desired image channel. </li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * </ul>\n * <li>SpecularMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channel</code>: One character string containing r, g, b, or a for selecting the desired image channel. </li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * </ul>\n * <li>EmissionMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channels</code>: Three character string containing any combination of r, g, b, and a for selecting the desired image channels. </li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * </ul>\n * <li>BumpMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channel</code>: One character string containing r, g, b, or a for selecting the desired image channel. </li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * <li><code>strength</code>: Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.</li>\n * </ul>\n * <li>NormalMap</li>\n * <ul>\n * <li><code>image</code>: path to image.</li>\n * <li><code>channels</code>: Three character string containing any combination of r, g, b, and a for selecting the desired image channels. </li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n * <li><code>strength</code>: Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.</li>\n * </ul>\n * <li>Grid</li>\n * <ul>\n * <li><code>color</code>: rgba color object for the whole material.</li>\n * <li><code>cellAlpha</code>: Alpha value for the cells between grid lines. This will be combined with color.alpha.</li>\n * <li><code>lineCount</code>: Object with x and y values specifying the number of columns and rows respectively.</li>\n * <li><code>lineThickness</code>: Object with x and y values specifying the thickness of grid lines (in pixels where available).</li>\n * <li><code>lineOffset</code>: Object with x and y values specifying the offset of grid lines (range is 0 to 1).</li>\n * </ul>\n * <li>Stripe</li>\n * <ul>\n * <li><code>horizontal</code>: Boolean that determines if the stripes are horizontal or vertical.</li>\n * <li><code>evenColor</code>: rgba color object for the stripe's first color.</li>\n * <li><code>oddColor</code>: rgba color object for the stripe's second color.</li>\n * <li><code>offset</code>: Number that controls at which point into the pattern to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning of the odd color, 2.0 being the even color again, and any multiple or fractional values being in between.</li>\n * <li><code>repeat</code>: Number that controls the total number of stripes, half light and half dark.</li>\n * </ul>\n * <li>Checkerboard</li>\n * <ul>\n * <li><code>lightColor</code>: rgba color object for the checkerboard's light alternating color.</li>\n * <li><code>darkColor</code>: rgba color object for the checkerboard's dark alternating color.</li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of columns and rows respectively.</li>\n * </ul>\n * <li>Dot</li>\n * <ul>\n * <li><code>lightColor</code>: rgba color object for the dot color.</li>\n * <li><code>darkColor</code>: rgba color object for the background color.</li>\n * <li><code>repeat</code>: Object with x and y values specifying the number of columns and rows of dots respectively.</li>\n * </ul>\n * <li>Water</li>\n * <ul>\n * <li><code>baseWaterColor</code>: rgba color object base color of the water.</li>\n * <li><code>blendColor</code>: rgba color object used when blending from water to non-water areas.</li>\n * <li><code>specularMap</code>: Single channel texture used to indicate areas of water.</li>\n * <li><code>normalMap</code>: Normal map for water normal perturbation.</li>\n * <li><code>frequency</code>: Number that controls the number of waves.</li>\n * <li><code>normalMap</code>: Normal map for water normal perturbation.</li>\n * <li><code>animationSpeed</code>: Number that controls the animations speed of the water.</li>\n * <li><code>amplitude</code>: Number that controls the amplitude of water waves.</li>\n * <li><code>specularIntensity</code>: Number that controls the intensity of specular reflections.</li>\n * </ul>\n * <li>RimLighting</li>\n * <ul>\n * <li><code>color</code>: diffuse color and alpha.</li>\n * <li><code>rimColor</code>: diffuse color and alpha of the rim.</li>\n * <li><code>width</code>: Number that determines the rim's width.</li>\n * </ul>\n * <li>Fade</li>\n * <ul>\n * <li><code>fadeInColor</code>: diffuse color and alpha at <code>time</code></li>\n * <li><code>fadeOutColor</code>: diffuse color and alpha at <code>maximumDistance</code> from <code>time</code></li>\n * <li><code>maximumDistance</code>: Number between 0.0 and 1.0 where the <code>fadeInColor</code> becomes the <code>fadeOutColor</code>. A value of 0.0 gives the entire material a color of <code>fadeOutColor</code> and a value of 1.0 gives the the entire material a color of <code>fadeInColor</code></li>\n * <li><code>repeat</code>: true if the fade should wrap around the texture coodinates.</li>\n * <li><code>fadeDirection</code>: Object with x and y values specifying if the fade should be in the x and y directions.</li>\n * <li><code>time</code>: Object with x and y values between 0.0 and 1.0 of the <code>fadeInColor</code> position</li>\n * </ul>\n * <li>PolylineArrow</li>\n * <ul>\n * <li><code>color</code>: diffuse color and alpha.</li>\n * </ul>\n * <li>PolylineDash</li>\n * <ul>\n * <li><code>color</code>: color for the line.</li>\n * <li><code>gapColor</code>: color for the gaps in the line.</li>\n * <li><code>dashLength</code>: Dash length in pixels.</li>\n * <li><code>dashPattern</code>: The 16 bit stipple pattern for the line..</li>\n * </ul>\n * <li>PolylineGlow</li>\n * <ul>\n * <li><code>color</code>: color and maximum alpha for the glow on the line.</li>\n * <li><code>glowPower</code>: strength of the glow, as a percentage of the total line width (less than 1.0).</li>\n * <li><code>taperPower</code>: strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used.</li>\n * </ul>\n * <li>PolylineOutline</li>\n * <ul>\n * <li><code>color</code>: diffuse color and alpha for the interior of the line.</li>\n * <li><code>outlineColor</code>: diffuse color and alpha for the outline.</li>\n * <li><code>outlineWidth</code>: width of the outline in pixels.</li>\n * </ul>\n * <li>ElevationContour</li>\n * <ul>\n * <li><code>color</code>: color and alpha for the contour line.</li>\n * <li><code>spacing</code>: spacing for contour lines in meters.</li>\n * <li><code>width</code>: Number specifying the width of the grid lines in pixels.</li>\n * </ul>\n * <li>ElevationRamp</li>\n * <ul>\n * <li><code>image</code>: color ramp image to use for coloring the terrain.</li>\n * <li><code>minimumHeight</code>: minimum height for the ramp.</li>\n * <li><code>maximumHeight</code>: maximum height for the ramp.</li>\n * </ul>\n * <li>SlopeRamp</li>\n * <ul>\n * <li><code>image</code>: color ramp image to use for coloring the terrain by slope.</li>\n * </ul>\n * <li>AspectRamp</li>\n * <ul>\n * <li><code>image</code>: color ramp image to use for color the terrain by aspect.</li>\n * </ul>\n * </ul>\n * </ul>\n * </div>\n *\n * @alias Material\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.strict=false] Throws errors for issues that would normally be ignored, including unused uniforms or materials.\n * @param {Boolean|Function} [options.translucent=true] When <code>true</code> or a function that returns <code>true</code>, the geometry\n * with this material is expected to appear translucent.\n * @param {TextureMinificationFilter} [options.minificationFilter=TextureMinificationFilter.LINEAR] The {@link TextureMinificationFilter} to apply to this material's textures.\n * @param {TextureMagnificationFilter} [options.magnificationFilter=TextureMagnificationFilter.LINEAR] The {@link TextureMagnificationFilter} to apply to this material's textures.\n * @param {Object} options.fabric The fabric JSON used to generate the material.\n *\n * @constructor\n *\n * @exception {DeveloperError} fabric: uniform has invalid type.\n * @exception {DeveloperError} fabric: uniforms and materials cannot share the same property.\n * @exception {DeveloperError} fabric: cannot have source and components in the same section.\n * @exception {DeveloperError} fabric: property name is not valid. It should be 'type', 'materials', 'uniforms', 'components', or 'source'.\n * @exception {DeveloperError} fabric: property name is not valid. It should be 'diffuse', 'specular', 'shininess', 'normal', 'emission', or 'alpha'.\n * @exception {DeveloperError} strict: shader source does not use string.\n * @exception {DeveloperError} strict: shader source does not use uniform.\n * @exception {DeveloperError} strict: shader source does not use material.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric wiki page} for a more detailed options of Fabric.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Materials.html|Cesium Sandcastle Materials Demo}\n *\n * @example\n * // Create a color material with fromType:\n * polygon.material = Cesium.Material.fromType('Color');\n * polygon.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n *\n * // Create the default material:\n * polygon.material = new Cesium.Material();\n *\n * // Create a color material with full Fabric notation:\n * polygon.material = new Cesium.Material({\n * fabric : {\n * type : 'Color',\n * uniforms : {\n * color : new Cesium.Color(1.0, 1.0, 0.0, 1.0)\n * }\n * }\n * });\n */\nfunction Material(options) {\n /**\n * The material type. Can be an existing type or a new type. If no type is specified in fabric, type is a GUID.\n * @type {String}\n * @default undefined\n */\n this.type = undefined;\n\n /**\n * The glsl shader source for this material.\n * @type {String}\n * @default undefined\n */\n this.shaderSource = undefined;\n\n /**\n * Maps sub-material names to Material objects.\n * @type {Object}\n * @default undefined\n */\n this.materials = undefined;\n\n /**\n * Maps uniform names to their values.\n * @type {Object}\n * @default undefined\n */\n this.uniforms = undefined;\n this._uniforms = undefined;\n\n /**\n * When <code>true</code> or a function that returns <code>true</code>,\n * the geometry is expected to appear translucent.\n * @type {Boolean|Function}\n * @default undefined\n */\n this.translucent = undefined;\n\n this._minificationFilter = defaultValue(\n options.minificationFilter,\n TextureMinificationFilter.LINEAR\n );\n this._magnificationFilter = defaultValue(\n options.magnificationFilter,\n TextureMagnificationFilter.LINEAR\n );\n\n this._strict = undefined;\n this._template = undefined;\n this._count = undefined;\n\n this._texturePaths = {};\n this._loadedImages = [];\n this._loadedCubeMaps = [];\n\n this._textures = {};\n\n this._updateFunctions = [];\n\n this._defaultTexture = undefined;\n\n initializeMaterial(options, this);\n Object.defineProperties(this, {\n type: {\n value: this.type,\n writable: false,\n },\n });\n\n if (!defined(Material._uniformList[this.type])) {\n Material._uniformList[this.type] = Object.keys(this._uniforms);\n }\n}\n\n// Cached list of combined uniform names indexed by type.\n// Used to get the list of uniforms in the same order.\nMaterial._uniformList = {};\n\n/**\n * Creates a new material using an existing material type.\n * <br /><br />\n * Shorthand for: new Material({fabric : {type : type}});\n *\n * @param {String} type The base material type.\n * @param {Object} [uniforms] Overrides for the default uniforms.\n * @returns {Material} New material object.\n *\n * @exception {DeveloperError} material with that type does not exist.\n *\n * @example\n * var material = Cesium.Material.fromType('Color', {\n * color : new Cesium.Color(1.0, 0.0, 0.0, 1.0)\n * });\n */\nMaterial.fromType = function (type, uniforms) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(Material._materialCache.getMaterial(type))) {\n throw new DeveloperError(\n \"material with type '\" + type + \"' does not exist.\"\n );\n }\n //>>includeEnd('debug');\n\n var material = new Material({\n fabric: {\n type: type,\n },\n });\n\n if (defined(uniforms)) {\n for (var name in uniforms) {\n if (uniforms.hasOwnProperty(name)) {\n material.uniforms[name] = uniforms[name];\n }\n }\n }\n\n return material;\n};\n\n/**\n * Gets whether or not this material is translucent.\n * @returns {Boolean} <code>true</code> if this material is translucent, <code>false</code> otherwise.\n */\nMaterial.prototype.isTranslucent = function () {\n if (defined(this.translucent)) {\n if (typeof this.translucent === \"function\") {\n return this.translucent();\n }\n\n return this.translucent;\n }\n\n var translucent = true;\n var funcs = this._translucentFunctions;\n var length = funcs.length;\n for (var i = 0; i < length; ++i) {\n var func = funcs[i];\n if (typeof func === \"function\") {\n translucent = translucent && func();\n } else {\n translucent = translucent && func;\n }\n\n if (!translucent) {\n break;\n }\n }\n return translucent;\n};\n\n/**\n * @private\n */\nMaterial.prototype.update = function (context) {\n var i;\n var uniformId;\n\n var loadedImages = this._loadedImages;\n var length = loadedImages.length;\n\n for (i = 0; i < length; ++i) {\n var loadedImage = loadedImages[i];\n uniformId = loadedImage.id;\n var image = loadedImage.image;\n\n var sampler = new Sampler({\n minificationFilter: this._minificationFilter,\n magnificationFilter: this._magnificationFilter,\n });\n\n var texture;\n if (defined(image.internalFormat)) {\n texture = new Texture({\n context: context,\n pixelFormat: image.internalFormat,\n width: image.width,\n height: image.height,\n source: {\n arrayBufferView: image.bufferView,\n },\n sampler: sampler,\n });\n } else {\n texture = new Texture({\n context: context,\n source: image,\n sampler: sampler,\n });\n }\n\n this._textures[uniformId] = texture;\n\n var uniformDimensionsName = uniformId + \"Dimensions\";\n if (this.uniforms.hasOwnProperty(uniformDimensionsName)) {\n var uniformDimensions = this.uniforms[uniformDimensionsName];\n uniformDimensions.x = texture._width;\n uniformDimensions.y = texture._height;\n }\n }\n\n loadedImages.length = 0;\n\n var loadedCubeMaps = this._loadedCubeMaps;\n length = loadedCubeMaps.length;\n\n for (i = 0; i < length; ++i) {\n var loadedCubeMap = loadedCubeMaps[i];\n uniformId = loadedCubeMap.id;\n var images = loadedCubeMap.images;\n\n var cubeMap = new CubeMap({\n context: context,\n source: {\n positiveX: images[0],\n negativeX: images[1],\n positiveY: images[2],\n negativeY: images[3],\n positiveZ: images[4],\n negativeZ: images[5],\n },\n sampler: new Sampler({\n minificationFilter: this._minificationFilter,\n magnificationFilter: this._magnificationFilter,\n }),\n });\n\n this._textures[uniformId] = cubeMap;\n }\n\n loadedCubeMaps.length = 0;\n\n var updateFunctions = this._updateFunctions;\n length = updateFunctions.length;\n for (i = 0; i < length; ++i) {\n updateFunctions[i](this, context);\n }\n\n var subMaterials = this.materials;\n for (var name in subMaterials) {\n if (subMaterials.hasOwnProperty(name)) {\n subMaterials[name].update(context);\n }\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see Material#destroy\n */\nMaterial.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * material = material && material.destroy();\n *\n * @see Material#isDestroyed\n */\nMaterial.prototype.destroy = function () {\n var textures = this._textures;\n for (var texture in textures) {\n if (textures.hasOwnProperty(texture)) {\n var instance = textures[texture];\n if (instance !== this._defaultTexture) {\n instance.destroy();\n }\n }\n }\n\n var materials = this.materials;\n for (var material in materials) {\n if (materials.hasOwnProperty(material)) {\n materials[material].destroy();\n }\n }\n return destroyObject(this);\n};\n\nfunction initializeMaterial(options, result) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n result._strict = defaultValue(options.strict, false);\n result._count = defaultValue(options.count, 0);\n result._template = clone(\n defaultValue(options.fabric, defaultValue.EMPTY_OBJECT)\n );\n result._template.uniforms = clone(\n defaultValue(result._template.uniforms, defaultValue.EMPTY_OBJECT)\n );\n result._template.materials = clone(\n defaultValue(result._template.materials, defaultValue.EMPTY_OBJECT)\n );\n\n result.type = defined(result._template.type)\n ? result._template.type\n : createGuid();\n\n result.shaderSource = \"\";\n result.materials = {};\n result.uniforms = {};\n result._uniforms = {};\n result._translucentFunctions = [];\n\n var translucent;\n\n // If the cache contains this material type, build the material template off of the stored template.\n var cachedMaterial = Material._materialCache.getMaterial(result.type);\n if (defined(cachedMaterial)) {\n var template = clone(cachedMaterial.fabric, true);\n result._template = combine(result._template, template, true);\n translucent = cachedMaterial.translucent;\n }\n\n // Make sure the template has no obvious errors. More error checking happens later.\n checkForTemplateErrors(result);\n\n // If the material has a new type, add it to the cache.\n if (!defined(cachedMaterial)) {\n Material._materialCache.addMaterial(result.type, result);\n }\n\n createMethodDefinition(result);\n createUniforms(result);\n createSubMaterials(result);\n\n var defaultTranslucent =\n result._translucentFunctions.length === 0 ? true : undefined;\n translucent = defaultValue(translucent, defaultTranslucent);\n translucent = defaultValue(options.translucent, translucent);\n\n if (defined(translucent)) {\n if (typeof translucent === \"function\") {\n var wrappedTranslucent = function () {\n return translucent(result);\n };\n result._translucentFunctions.push(wrappedTranslucent);\n } else {\n result._translucentFunctions.push(translucent);\n }\n }\n}\n\nfunction checkForValidProperties(object, properties, result, throwNotFound) {\n if (defined(object)) {\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n var hasProperty = properties.indexOf(property) !== -1;\n if (\n (throwNotFound && !hasProperty) ||\n (!throwNotFound && hasProperty)\n ) {\n result(property, properties);\n }\n }\n }\n }\n}\n\nfunction invalidNameError(property, properties) {\n //>>includeStart('debug', pragmas.debug);\n var errorString =\n \"fabric: property name '\" + property + \"' is not valid. It should be \";\n for (var i = 0; i < properties.length; i++) {\n var propertyName = \"'\" + properties[i] + \"'\";\n errorString +=\n i === properties.length - 1\n ? \"or \" + propertyName + \".\"\n : propertyName + \", \";\n }\n throw new DeveloperError(errorString);\n //>>includeEnd('debug');\n}\n\nfunction duplicateNameError(property, properties) {\n //>>includeStart('debug', pragmas.debug);\n var errorString =\n \"fabric: uniforms and materials cannot share the same property '\" +\n property +\n \"'\";\n throw new DeveloperError(errorString);\n //>>includeEnd('debug');\n}\n\nvar templateProperties = [\n \"type\",\n \"materials\",\n \"uniforms\",\n \"components\",\n \"source\",\n];\nvar componentProperties = [\n \"diffuse\",\n \"specular\",\n \"shininess\",\n \"normal\",\n \"emission\",\n \"alpha\",\n];\n\nfunction checkForTemplateErrors(material) {\n var template = material._template;\n var uniforms = template.uniforms;\n var materials = template.materials;\n var components = template.components;\n\n // Make sure source and components do not exist in the same template.\n //>>includeStart('debug', pragmas.debug);\n if (defined(components) && defined(template.source)) {\n throw new DeveloperError(\n \"fabric: cannot have source and components in the same template.\"\n );\n }\n //>>includeEnd('debug');\n\n // Make sure all template and components properties are valid.\n checkForValidProperties(template, templateProperties, invalidNameError, true);\n checkForValidProperties(\n components,\n componentProperties,\n invalidNameError,\n true\n );\n\n // Make sure uniforms and materials do not share any of the same names.\n var materialNames = [];\n for (var property in materials) {\n if (materials.hasOwnProperty(property)) {\n materialNames.push(property);\n }\n }\n checkForValidProperties(uniforms, materialNames, duplicateNameError, false);\n}\n\nfunction isMaterialFused(shaderComponent, material) {\n var materials = material._template.materials;\n for (var subMaterialId in materials) {\n if (materials.hasOwnProperty(subMaterialId)) {\n if (shaderComponent.indexOf(subMaterialId) > -1) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n// Create the czm_getMaterial method body using source or components.\nfunction createMethodDefinition(material) {\n var components = material._template.components;\n var source = material._template.source;\n if (defined(source)) {\n material.shaderSource += source + \"\\n\";\n } else {\n material.shaderSource +=\n \"czm_material czm_getMaterial(czm_materialInput materialInput)\\n{\\n\";\n material.shaderSource +=\n \"czm_material material = czm_getDefaultMaterial(materialInput);\\n\";\n if (defined(components)) {\n var isMultiMaterial =\n Object.keys(material._template.materials).length > 0;\n for (var component in components) {\n if (components.hasOwnProperty(component)) {\n if (component === \"diffuse\" || component === \"emission\") {\n var isFusion =\n isMultiMaterial &&\n isMaterialFused(components[component], material);\n var componentSource = isFusion\n ? components[component]\n : \"czm_gammaCorrect(\" + components[component] + \")\";\n material.shaderSource +=\n \"material.\" + component + \" = \" + componentSource + \"; \\n\";\n } else if (component === \"alpha\") {\n material.shaderSource +=\n \"material.alpha = \" + components.alpha + \"; \\n\";\n } else {\n material.shaderSource +=\n \"material.\" + component + \" = \" + components[component] + \";\\n\";\n }\n }\n }\n }\n material.shaderSource += \"return material;\\n}\\n\";\n }\n}\n\nvar matrixMap = {\n mat2: Matrix2,\n mat3: Matrix3,\n mat4: Matrix4,\n};\n\nvar ktxRegex = /\\.ktx$/i;\nvar crnRegex = /\\.crn$/i;\n\nfunction createTexture2DUpdateFunction(uniformId) {\n var oldUniformValue;\n return function (material, context) {\n var uniforms = material.uniforms;\n var uniformValue = uniforms[uniformId];\n var uniformChanged = oldUniformValue !== uniformValue;\n oldUniformValue = uniformValue;\n var texture = material._textures[uniformId];\n\n var uniformDimensionsName;\n var uniformDimensions;\n\n if (uniformValue instanceof HTMLVideoElement) {\n // HTMLVideoElement.readyState >=2 means we have enough data for the current frame.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState\n if (uniformValue.readyState >= 2) {\n if (uniformChanged && defined(texture)) {\n if (texture !== context.defaultTexture) {\n texture.destroy();\n }\n texture = undefined;\n }\n\n if (!defined(texture) || texture === context.defaultTexture) {\n var sampler = new Sampler({\n minificationFilter: material._minificationFilter,\n magnificationFilter: material._magnificationFilter,\n });\n texture = new Texture({\n context: context,\n source: uniformValue,\n sampler: sampler,\n });\n material._textures[uniformId] = texture;\n return;\n }\n\n texture.copyFrom(uniformValue);\n } else if (!defined(texture)) {\n material._textures[uniformId] = context.defaultTexture;\n }\n return;\n }\n\n if (uniformValue instanceof Texture && uniformValue !== texture) {\n material._texturePaths[uniformId] = undefined;\n var tmp = material._textures[uniformId];\n if (tmp !== material._defaultTexture) {\n tmp.destroy();\n }\n material._textures[uniformId] = uniformValue;\n\n uniformDimensionsName = uniformId + \"Dimensions\";\n if (uniforms.hasOwnProperty(uniformDimensionsName)) {\n uniformDimensions = uniforms[uniformDimensionsName];\n uniformDimensions.x = uniformValue._width;\n uniformDimensions.y = uniformValue._height;\n }\n\n return;\n }\n\n if (!defined(texture)) {\n material._texturePaths[uniformId] = undefined;\n if (!defined(material._defaultTexture)) {\n material._defaultTexture = context.defaultTexture;\n }\n texture = material._textures[uniformId] = material._defaultTexture;\n\n uniformDimensionsName = uniformId + \"Dimensions\";\n if (uniforms.hasOwnProperty(uniformDimensionsName)) {\n uniformDimensions = uniforms[uniformDimensionsName];\n uniformDimensions.x = texture._width;\n uniformDimensions.y = texture._height;\n }\n }\n\n if (uniformValue === Material.DefaultImageId) {\n return;\n }\n\n // When using the entity layer, the Resource objects get recreated on getValue because\n // they are clonable. That's why we check the url property for Resources\n // because the instances aren't the same and we keep trying to load the same\n // image if it fails to load.\n var isResource = uniformValue instanceof Resource;\n if (\n !defined(material._texturePaths[uniformId]) ||\n (isResource &&\n uniformValue.url !== material._texturePaths[uniformId].url) ||\n (!isResource && uniformValue !== material._texturePaths[uniformId])\n ) {\n if (typeof uniformValue === \"string\" || isResource) {\n var resource = isResource\n ? uniformValue\n : Resource.createIfNeeded(uniformValue);\n\n var promise;\n if (ktxRegex.test(resource.url)) {\n promise = loadKTX(resource);\n } else if (crnRegex.test(resource.url)) {\n promise = loadCRN(resource);\n } else {\n promise = resource.fetchImage();\n }\n when(promise, function (image) {\n material._loadedImages.push({\n id: uniformId,\n image: image,\n });\n });\n } else if (\n uniformValue instanceof HTMLCanvasElement ||\n uniformValue instanceof HTMLImageElement\n ) {\n material._loadedImages.push({\n id: uniformId,\n image: uniformValue,\n });\n }\n\n material._texturePaths[uniformId] = uniformValue;\n }\n };\n}\n\nfunction createCubeMapUpdateFunction(uniformId) {\n return function (material, context) {\n var uniformValue = material.uniforms[uniformId];\n\n if (uniformValue instanceof CubeMap) {\n var tmp = material._textures[uniformId];\n if (tmp !== material._defaultTexture) {\n tmp.destroy();\n }\n material._texturePaths[uniformId] = undefined;\n material._textures[uniformId] = uniformValue;\n return;\n }\n\n if (!defined(material._textures[uniformId])) {\n material._texturePaths[uniformId] = undefined;\n material._textures[uniformId] = context.defaultCubeMap;\n }\n\n if (uniformValue === Material.DefaultCubeMapId) {\n return;\n }\n\n var path =\n uniformValue.positiveX +\n uniformValue.negativeX +\n uniformValue.positiveY +\n uniformValue.negativeY +\n uniformValue.positiveZ +\n uniformValue.negativeZ;\n\n if (path !== material._texturePaths[uniformId]) {\n var promises = [\n Resource.createIfNeeded(uniformValue.positiveX).fetchImage(),\n Resource.createIfNeeded(uniformValue.negativeX).fetchImage(),\n Resource.createIfNeeded(uniformValue.positiveY).fetchImage(),\n Resource.createIfNeeded(uniformValue.negativeY).fetchImage(),\n Resource.createIfNeeded(uniformValue.positiveZ).fetchImage(),\n Resource.createIfNeeded(uniformValue.negativeZ).fetchImage(),\n ];\n\n when.all(promises).then(function (images) {\n material._loadedCubeMaps.push({\n id: uniformId,\n images: images,\n });\n });\n\n material._texturePaths[uniformId] = path;\n }\n };\n}\n\nfunction createUniforms(material) {\n var uniforms = material._template.uniforms;\n for (var uniformId in uniforms) {\n if (uniforms.hasOwnProperty(uniformId)) {\n createUniform(material, uniformId);\n }\n }\n}\n\n// Writes uniform declarations to the shader file and connects uniform values with\n// corresponding material properties through the returnUniforms function.\nfunction createUniform(material, uniformId) {\n var strict = material._strict;\n var materialUniforms = material._template.uniforms;\n var uniformValue = materialUniforms[uniformId];\n var uniformType = getUniformType(uniformValue);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(uniformType)) {\n throw new DeveloperError(\n \"fabric: uniform '\" + uniformId + \"' has invalid type.\"\n );\n }\n //>>includeEnd('debug');\n\n var replacedTokenCount;\n if (uniformType === \"channels\") {\n replacedTokenCount = replaceToken(material, uniformId, uniformValue, false);\n //>>includeStart('debug', pragmas.debug);\n if (replacedTokenCount === 0 && strict) {\n throw new DeveloperError(\n \"strict: shader source does not use channels '\" + uniformId + \"'.\"\n );\n }\n //>>includeEnd('debug');\n } else {\n // Since webgl doesn't allow texture dimension queries in glsl, create a uniform to do it.\n // Check if the shader source actually uses texture dimensions before creating the uniform.\n if (uniformType === \"sampler2D\") {\n var imageDimensionsUniformName = uniformId + \"Dimensions\";\n if (getNumberOfTokens(material, imageDimensionsUniformName) > 0) {\n materialUniforms[imageDimensionsUniformName] = {\n type: \"ivec3\",\n x: 1,\n y: 1,\n };\n createUniform(material, imageDimensionsUniformName);\n }\n }\n\n // Add uniform declaration to source code.\n var uniformDeclarationRegex = new RegExp(\n \"uniform\\\\s+\" + uniformType + \"\\\\s+\" + uniformId + \"\\\\s*;\"\n );\n if (!uniformDeclarationRegex.test(material.shaderSource)) {\n var uniformDeclaration = \"uniform \" + uniformType + \" \" + uniformId + \";\";\n material.shaderSource = uniformDeclaration + material.shaderSource;\n }\n\n var newUniformId = uniformId + \"_\" + material._count++;\n replacedTokenCount = replaceToken(material, uniformId, newUniformId);\n //>>includeStart('debug', pragmas.debug);\n if (replacedTokenCount === 1 && strict) {\n throw new DeveloperError(\n \"strict: shader source does not use uniform '\" + uniformId + \"'.\"\n );\n }\n //>>includeEnd('debug');\n\n // Set uniform value\n material.uniforms[uniformId] = uniformValue;\n\n if (uniformType === \"sampler2D\") {\n material._uniforms[newUniformId] = function () {\n return material._textures[uniformId];\n };\n material._updateFunctions.push(createTexture2DUpdateFunction(uniformId));\n } else if (uniformType === \"samplerCube\") {\n material._uniforms[newUniformId] = function () {\n return material._textures[uniformId];\n };\n material._updateFunctions.push(createCubeMapUpdateFunction(uniformId));\n } else if (uniformType.indexOf(\"mat\") !== -1) {\n var scratchMatrix = new matrixMap[uniformType]();\n material._uniforms[newUniformId] = function () {\n return matrixMap[uniformType].fromColumnMajorArray(\n material.uniforms[uniformId],\n scratchMatrix\n );\n };\n } else {\n material._uniforms[newUniformId] = function () {\n return material.uniforms[uniformId];\n };\n }\n }\n}\n\n// Determines the uniform type based on the uniform in the template.\nfunction getUniformType(uniformValue) {\n var uniformType = uniformValue.type;\n if (!defined(uniformType)) {\n var type = typeof uniformValue;\n if (type === \"number\") {\n uniformType = \"float\";\n } else if (type === \"boolean\") {\n uniformType = \"bool\";\n } else if (\n type === \"string\" ||\n uniformValue instanceof Resource ||\n uniformValue instanceof HTMLCanvasElement ||\n uniformValue instanceof HTMLImageElement\n ) {\n if (/^([rgba]){1,4}$/i.test(uniformValue)) {\n uniformType = \"channels\";\n } else if (uniformValue === Material.DefaultCubeMapId) {\n uniformType = \"samplerCube\";\n } else {\n uniformType = \"sampler2D\";\n }\n } else if (type === \"object\") {\n if (Array.isArray(uniformValue)) {\n if (\n uniformValue.length === 4 ||\n uniformValue.length === 9 ||\n uniformValue.length === 16\n ) {\n uniformType = \"mat\" + Math.sqrt(uniformValue.length);\n }\n } else {\n var numAttributes = 0;\n for (var attribute in uniformValue) {\n if (uniformValue.hasOwnProperty(attribute)) {\n numAttributes += 1;\n }\n }\n if (numAttributes >= 2 && numAttributes <= 4) {\n uniformType = \"vec\" + numAttributes;\n } else if (numAttributes === 6) {\n uniformType = \"samplerCube\";\n }\n }\n }\n }\n return uniformType;\n}\n\n// Create all sub-materials by combining source and uniforms together.\nfunction createSubMaterials(material) {\n var strict = material._strict;\n var subMaterialTemplates = material._template.materials;\n for (var subMaterialId in subMaterialTemplates) {\n if (subMaterialTemplates.hasOwnProperty(subMaterialId)) {\n // Construct the sub-material.\n var subMaterial = new Material({\n strict: strict,\n fabric: subMaterialTemplates[subMaterialId],\n count: material._count,\n });\n\n material._count = subMaterial._count;\n material._uniforms = combine(\n material._uniforms,\n subMaterial._uniforms,\n true\n );\n material.materials[subMaterialId] = subMaterial;\n material._translucentFunctions = material._translucentFunctions.concat(\n subMaterial._translucentFunctions\n );\n\n // Make the material's czm_getMaterial unique by appending the sub-material type.\n var originalMethodName = \"czm_getMaterial\";\n var newMethodName = originalMethodName + \"_\" + material._count++;\n replaceToken(subMaterial, originalMethodName, newMethodName);\n material.shaderSource = subMaterial.shaderSource + material.shaderSource;\n\n // Replace each material id with an czm_getMaterial method call.\n var materialMethodCall = newMethodName + \"(materialInput)\";\n var tokensReplacedCount = replaceToken(\n material,\n subMaterialId,\n materialMethodCall\n );\n //>>includeStart('debug', pragmas.debug);\n if (tokensReplacedCount === 0 && strict) {\n throw new DeveloperError(\n \"strict: shader source does not use material '\" + subMaterialId + \"'.\"\n );\n }\n //>>includeEnd('debug');\n }\n }\n}\n\n// Used for searching or replacing a token in a material's shader source with something else.\n// If excludePeriod is true, do not accept tokens that are preceded by periods.\n// http://stackoverflow.com/questions/641407/javascript-negative-lookbehind-equivalent\nfunction replaceToken(material, token, newToken, excludePeriod) {\n excludePeriod = defaultValue(excludePeriod, true);\n var count = 0;\n var suffixChars = \"([\\\\w])?\";\n var prefixChars = \"([\\\\w\" + (excludePeriod ? \".\" : \"\") + \"])?\";\n var regExp = new RegExp(prefixChars + token + suffixChars, \"g\");\n material.shaderSource = material.shaderSource.replace(regExp, function (\n $0,\n $1,\n $2\n ) {\n if ($1 || $2) {\n return $0;\n }\n count += 1;\n return newToken;\n });\n return count;\n}\n\nfunction getNumberOfTokens(material, token, excludePeriod) {\n return replaceToken(material, token, token, excludePeriod);\n}\n\nMaterial._materialCache = {\n _materials: {},\n addMaterial: function (type, materialTemplate) {\n this._materials[type] = materialTemplate;\n },\n getMaterial: function (type) {\n return this._materials[type];\n },\n};\n\n/**\n * Gets or sets the default texture uniform value.\n * @type {String}\n */\nMaterial.DefaultImageId = \"czm_defaultImage\";\n\n/**\n * Gets or sets the default cube map texture uniform value.\n * @type {String}\n */\nMaterial.DefaultCubeMapId = \"czm_defaultCubeMap\";\n\n/**\n * Gets the name of the color material.\n * @type {String}\n * @readonly\n */\nMaterial.ColorType = \"Color\";\nMaterial._materialCache.addMaterial(Material.ColorType, {\n fabric: {\n type: Material.ColorType,\n uniforms: {\n color: new Color(1.0, 0.0, 0.0, 0.5),\n },\n components: {\n diffuse: \"color.rgb\",\n alpha: \"color.a\",\n },\n },\n translucent: function (material) {\n return material.uniforms.color.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the image material.\n * @type {String}\n * @readonly\n */\nMaterial.ImageType = \"Image\";\nMaterial._materialCache.addMaterial(Material.ImageType, {\n fabric: {\n type: Material.ImageType,\n uniforms: {\n image: Material.DefaultImageId,\n repeat: new Cartesian2(1.0, 1.0),\n color: new Color(1.0, 1.0, 1.0, 1.0),\n },\n components: {\n diffuse:\n \"texture2D(image, fract(repeat * materialInput.st)).rgb * color.rgb\",\n alpha: \"texture2D(image, fract(repeat * materialInput.st)).a * color.a\",\n },\n },\n translucent: function (material) {\n return material.uniforms.color.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the diffuce map material.\n * @type {String}\n * @readonly\n */\nMaterial.DiffuseMapType = \"DiffuseMap\";\nMaterial._materialCache.addMaterial(Material.DiffuseMapType, {\n fabric: {\n type: Material.DiffuseMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channels: \"rgb\",\n repeat: new Cartesian2(1.0, 1.0),\n },\n components: {\n diffuse: \"texture2D(image, fract(repeat * materialInput.st)).channels\",\n },\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the alpha map material.\n * @type {String}\n * @readonly\n */\nMaterial.AlphaMapType = \"AlphaMap\";\nMaterial._materialCache.addMaterial(Material.AlphaMapType, {\n fabric: {\n type: Material.AlphaMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channel: \"a\",\n repeat: new Cartesian2(1.0, 1.0),\n },\n components: {\n alpha: \"texture2D(image, fract(repeat * materialInput.st)).channel\",\n },\n },\n translucent: true,\n});\n\n/**\n * Gets the name of the specular map material.\n * @type {String}\n * @readonly\n */\nMaterial.SpecularMapType = \"SpecularMap\";\nMaterial._materialCache.addMaterial(Material.SpecularMapType, {\n fabric: {\n type: Material.SpecularMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channel: \"r\",\n repeat: new Cartesian2(1.0, 1.0),\n },\n components: {\n specular: \"texture2D(image, fract(repeat * materialInput.st)).channel\",\n },\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the emmision map material.\n * @type {String}\n * @readonly\n */\nMaterial.EmissionMapType = \"EmissionMap\";\nMaterial._materialCache.addMaterial(Material.EmissionMapType, {\n fabric: {\n type: Material.EmissionMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channels: \"rgb\",\n repeat: new Cartesian2(1.0, 1.0),\n },\n components: {\n emission: \"texture2D(image, fract(repeat * materialInput.st)).channels\",\n },\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the bump map material.\n * @type {String}\n * @readonly\n */\nMaterial.BumpMapType = \"BumpMap\";\nMaterial._materialCache.addMaterial(Material.BumpMapType, {\n fabric: {\n type: Material.BumpMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channel: \"r\",\n strength: 0.8,\n repeat: new Cartesian2(1.0, 1.0),\n },\n source: BumpMapMaterial,\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the normal map material.\n * @type {String}\n * @readonly\n */\nMaterial.NormalMapType = \"NormalMap\";\nMaterial._materialCache.addMaterial(Material.NormalMapType, {\n fabric: {\n type: Material.NormalMapType,\n uniforms: {\n image: Material.DefaultImageId,\n channels: \"rgb\",\n strength: 0.8,\n repeat: new Cartesian2(1.0, 1.0),\n },\n source: NormalMapMaterial,\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the grid material.\n * @type {String}\n * @readonly\n */\nMaterial.GridType = \"Grid\";\nMaterial._materialCache.addMaterial(Material.GridType, {\n fabric: {\n type: Material.GridType,\n uniforms: {\n color: new Color(0.0, 1.0, 0.0, 1.0),\n cellAlpha: 0.1,\n lineCount: new Cartesian2(8.0, 8.0),\n lineThickness: new Cartesian2(1.0, 1.0),\n lineOffset: new Cartesian2(0.0, 0.0),\n },\n source: GridMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.color.alpha < 1.0 || uniforms.cellAlpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the stripe material.\n * @type {String}\n * @readonly\n */\nMaterial.StripeType = \"Stripe\";\nMaterial._materialCache.addMaterial(Material.StripeType, {\n fabric: {\n type: Material.StripeType,\n uniforms: {\n horizontal: true,\n evenColor: new Color(1.0, 1.0, 1.0, 0.5),\n oddColor: new Color(0.0, 0.0, 1.0, 0.5),\n offset: 0.0,\n repeat: 5.0,\n },\n source: StripeMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.evenColor.alpha < 1.0 || uniforms.oddColor.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the checkerboard material.\n * @type {String}\n * @readonly\n */\nMaterial.CheckerboardType = \"Checkerboard\";\nMaterial._materialCache.addMaterial(Material.CheckerboardType, {\n fabric: {\n type: Material.CheckerboardType,\n uniforms: {\n lightColor: new Color(1.0, 1.0, 1.0, 0.5),\n darkColor: new Color(0.0, 0.0, 0.0, 0.5),\n repeat: new Cartesian2(5.0, 5.0),\n },\n source: CheckerboardMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.lightColor.alpha < 1.0 || uniforms.darkColor.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the dot material.\n * @type {String}\n * @readonly\n */\nMaterial.DotType = \"Dot\";\nMaterial._materialCache.addMaterial(Material.DotType, {\n fabric: {\n type: Material.DotType,\n uniforms: {\n lightColor: new Color(1.0, 1.0, 0.0, 0.75),\n darkColor: new Color(0.0, 1.0, 1.0, 0.75),\n repeat: new Cartesian2(5.0, 5.0),\n },\n source: DotMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.lightColor.alpha < 1.0 || uniforms.darkColor.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the water material.\n * @type {String}\n * @readonly\n */\nMaterial.WaterType = \"Water\";\nMaterial._materialCache.addMaterial(Material.WaterType, {\n fabric: {\n type: Material.WaterType,\n uniforms: {\n baseWaterColor: new Color(0.2, 0.3, 0.6, 1.0),\n blendColor: new Color(0.0, 1.0, 0.699, 1.0),\n specularMap: Material.DefaultImageId,\n normalMap: Material.DefaultImageId,\n frequency: 10.0,\n animationSpeed: 0.01,\n amplitude: 1.0,\n specularIntensity: 0.5,\n fadeFactor: 1.0,\n },\n source: WaterMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return (\n uniforms.baseWaterColor.alpha < 1.0 || uniforms.blendColor.alpha < 1.0\n );\n },\n});\n\n/**\n * Gets the name of the rim lighting material.\n * @type {String}\n * @readonly\n */\nMaterial.RimLightingType = \"RimLighting\";\nMaterial._materialCache.addMaterial(Material.RimLightingType, {\n fabric: {\n type: Material.RimLightingType,\n uniforms: {\n color: new Color(1.0, 0.0, 0.0, 0.7),\n rimColor: new Color(1.0, 1.0, 1.0, 0.4),\n width: 0.3,\n },\n source: RimLightingMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.color.alpha < 1.0 || uniforms.rimColor.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the fade material.\n * @type {String}\n * @readonly\n */\nMaterial.FadeType = \"Fade\";\nMaterial._materialCache.addMaterial(Material.FadeType, {\n fabric: {\n type: Material.FadeType,\n uniforms: {\n fadeInColor: new Color(1.0, 0.0, 0.0, 1.0),\n fadeOutColor: new Color(0.0, 0.0, 0.0, 0.0),\n maximumDistance: 0.5,\n repeat: true,\n fadeDirection: {\n x: true,\n y: true,\n },\n time: new Cartesian2(0.5, 0.5),\n },\n source: FadeMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return (\n uniforms.fadeInColor.alpha < 1.0 || uniforms.fadeOutColor.alpha < 1.0\n );\n },\n});\n\n/**\n * Gets the name of the polyline arrow material.\n * @type {String}\n * @readonly\n */\nMaterial.PolylineArrowType = \"PolylineArrow\";\nMaterial._materialCache.addMaterial(Material.PolylineArrowType, {\n fabric: {\n type: Material.PolylineArrowType,\n uniforms: {\n color: new Color(1.0, 1.0, 1.0, 1.0),\n },\n source: PolylineArrowMaterial,\n },\n translucent: true,\n});\n\n/**\n * Gets the name of the polyline glow material.\n * @type {String}\n * @readonly\n */\nMaterial.PolylineDashType = \"PolylineDash\";\nMaterial._materialCache.addMaterial(Material.PolylineDashType, {\n fabric: {\n type: Material.PolylineDashType,\n uniforms: {\n color: new Color(1.0, 0.0, 1.0, 1.0),\n gapColor: new Color(0.0, 0.0, 0.0, 0.0),\n dashLength: 16.0,\n dashPattern: 255.0,\n },\n source: PolylineDashMaterial,\n },\n translucent: true,\n});\n\n/**\n * Gets the name of the polyline glow material.\n * @type {String}\n * @readonly\n */\nMaterial.PolylineGlowType = \"PolylineGlow\";\nMaterial._materialCache.addMaterial(Material.PolylineGlowType, {\n fabric: {\n type: Material.PolylineGlowType,\n uniforms: {\n color: new Color(0.0, 0.5, 1.0, 1.0),\n glowPower: 0.25,\n taperPower: 1.0,\n },\n source: PolylineGlowMaterial,\n },\n translucent: true,\n});\n\n/**\n * Gets the name of the polyline outline material.\n * @type {String}\n * @readonly\n */\nMaterial.PolylineOutlineType = \"PolylineOutline\";\nMaterial._materialCache.addMaterial(Material.PolylineOutlineType, {\n fabric: {\n type: Material.PolylineOutlineType,\n uniforms: {\n color: new Color(1.0, 1.0, 1.0, 1.0),\n outlineColor: new Color(1.0, 0.0, 0.0, 1.0),\n outlineWidth: 1.0,\n },\n source: PolylineOutlineMaterial,\n },\n translucent: function (material) {\n var uniforms = material.uniforms;\n return uniforms.color.alpha < 1.0 || uniforms.outlineColor.alpha < 1.0;\n },\n});\n\n/**\n * Gets the name of the elevation contour material.\n * @type {String}\n * @readonly\n */\nMaterial.ElevationContourType = \"ElevationContour\";\nMaterial._materialCache.addMaterial(Material.ElevationContourType, {\n fabric: {\n type: Material.ElevationContourType,\n uniforms: {\n spacing: 100.0,\n color: new Color(1.0, 0.0, 0.0, 1.0),\n width: 1.0,\n },\n source: ElevationContourMaterial,\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the elevation contour material.\n * @type {String}\n * @readonly\n */\nMaterial.ElevationRampType = \"ElevationRamp\";\nMaterial._materialCache.addMaterial(Material.ElevationRampType, {\n fabric: {\n type: Material.ElevationRampType,\n uniforms: {\n image: Material.DefaultImageId,\n minimumHeight: 0.0,\n maximumHeight: 10000.0,\n },\n source: ElevationRampMaterial,\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the slope ramp material.\n * @type {String}\n * @readonly\n */\nMaterial.SlopeRampMaterialType = \"SlopeRamp\";\nMaterial._materialCache.addMaterial(Material.SlopeRampMaterialType, {\n fabric: {\n type: Material.SlopeRampMaterialType,\n uniforms: {\n image: Material.DefaultImageId,\n },\n source: SlopeRampMaterial,\n },\n translucent: false,\n});\n\n/**\n * Gets the name of the aspect ramp material.\n * @type {String}\n * @readonly\n */\nMaterial.AspectRampMaterialType = \"AspectRamp\";\nMaterial._materialCache.addMaterial(Material.AspectRampMaterialType, {\n fabric: {\n type: Material.AspectRampMaterialType,\n uniforms: {\n image: Material.DefaultImageId,\n },\n source: AspectRampMaterial,\n },\n translucent: false,\n});\nexport default Material;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float strength;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n\\n\\\n vec2 centerPixel = fract(repeat * st);\\n\\\n float centerBump = texture2D(image, centerPixel).channel;\\n\\\n\\n\\\n float imageWidth = float(imageDimensions.x);\\n\\\n vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0)));\\n\\\n float rightBump = texture2D(image, rightPixel).channel;\\n\\\n\\n\\\n float imageHeight = float(imageDimensions.y);\\n\\\n vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight)));\\n\\\n float topBump = texture2D(image, leftPixel).channel;\\n\\\n\\n\\\n vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0)));\\n\\\n vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\\n\\\n\\n\\\n material.normal = normalEC;\\n\\\n material.diffuse = vec3(0.01);\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float strength;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n \\n\\\n vec4 textureValue = texture2D(image, fract(repeat * materialInput.st));\\n\\\n vec3 normalTangentSpace = textureValue.channels;\\n\\\n normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0;\\n\\\n normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0);\\n\\\n normalTangentSpace = normalize(normalTangentSpace);\\n\\\n vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\\n\\\n \\n\\\n material.normal = normalEC;\\n\\\n \\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_OES_standard_derivatives\\n\\\n #extension GL_OES_standard_derivatives : enable\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 color;\\n\\\nuniform float cellAlpha;\\n\\\nuniform vec2 lineCount;\\n\\\nuniform vec2 lineThickness;\\n\\\nuniform vec2 lineOffset;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n\\n\\\n float scaledWidth = fract(lineCount.s * st.s - lineOffset.s);\\n\\\n scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\\n\\\n float scaledHeight = fract(lineCount.t * st.t - lineOffset.t);\\n\\\n scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\\n\\\n\\n\\\n float value;\\n\\\n#ifdef GL_OES_standard_derivatives\\n\\\n // Fuzz Factor - Controls blurriness of lines\\n\\\n const float fuzz = 1.2;\\n\\\n vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0;\\n\\\n\\n\\\n // From \\\"3D Engine Design for Virtual Globes\\\" by Cozzi and Ring, Listing 4.13.\\n\\\n vec2 dx = abs(dFdx(st));\\n\\\n vec2 dy = abs(dFdy(st));\\n\\\n vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount;\\n\\\n value = min(\\n\\\n smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth),\\n\\\n smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight));\\n\\\n#else\\n\\\n // Fuzz Factor - Controls blurriness of lines\\n\\\n const float fuzz = 0.05;\\n\\\n\\n\\\n vec2 range = 0.5 - (lineThickness * 0.05);\\n\\\n value = min(\\n\\\n 1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth),\\n\\\n 1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight));\\n\\\n#endif\\n\\\n\\n\\\n // Edges taken from RimLightingMaterial.glsl\\n\\\n // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\\n\\\n float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)));\\n\\\n float sRim = smoothstep(0.8, 1.0, dRim);\\n\\\n value *= (1.0 - sRim);\\n\\\n\\n\\\n vec4 halfColor;\\n\\\n halfColor.rgb = color.rgb * 0.5;\\n\\\n halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value));\\n\\\n halfColor = czm_gammaCorrect(halfColor);\\n\\\n material.diffuse = halfColor.rgb;\\n\\\n material.emission = halfColor.rgb;\\n\\\n material.alpha = halfColor.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 evenColor;\\n\\\nuniform vec4 oddColor;\\n\\\nuniform float offset;\\n\\\nuniform float repeat;\\n\\\nuniform bool horizontal;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n // Based on the Stripes Fragment Shader in the Orange Book (11.1.2)\\n\\\n float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal));\\n\\\n float value = fract((coord - offset) * (repeat * 0.5));\\n\\\n float dist = min(value, min(abs(value - 0.5), 1.0 - value));\\n\\\n\\n\\\n vec4 currentColor = mix(evenColor, oddColor, step(0.5, value));\\n\\\n vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist);\\n\\\n color = czm_gammaCorrect(color);\\n\\\n\\n\\\n material.diffuse = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 lightColor;\\n\\\nuniform vec4 darkColor;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n\\n\\\n // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\\n\\\n float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0\\n\\\n\\n\\\n // Find the distance from the closest separator (region between two colors)\\n\\\n float scaledWidth = fract(repeat.s * st.s);\\n\\\n scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\\n\\\n float scaledHeight = fract(repeat.t * st.t);\\n\\\n scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\\n\\\n float value = min(scaledWidth, scaledHeight);\\n\\\n\\n\\\n vec4 currentColor = mix(lightColor, darkColor, b);\\n\\\n vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03);\\n\\\n\\n\\\n color = czm_gammaCorrect(color);\\n\\\n material.diffuse = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 lightColor;\\n\\\nuniform vec4 darkColor;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\\n\\\n float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0\\n\\\n\\n\\\n vec4 color = mix(lightColor, darkColor, b);\\n\\\n color = czm_gammaCorrect(color);\\n\\\n material.diffuse = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// Thanks for the contribution Jonas\\n\\\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\\n\\\n\\n\\\nuniform sampler2D specularMap;\\n\\\nuniform sampler2D normalMap;\\n\\\nuniform vec4 baseWaterColor;\\n\\\nuniform vec4 blendColor;\\n\\\nuniform float frequency;\\n\\\nuniform float animationSpeed;\\n\\\nuniform float amplitude;\\n\\\nuniform float specularIntensity;\\n\\\nuniform float fadeFactor;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n float time = czm_frameNumber * animationSpeed;\\n\\\n\\n\\\n // fade is a function of the distance from the fragment and the frequency of the waves\\n\\\n float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);\\n\\\n\\n\\\n float specularMapValue = texture2D(specularMap, materialInput.st).r;\\n\\\n\\n\\\n // note: not using directional motion at this time, just set the angle to 0.0;\\n\\\n vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);\\n\\\n vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));\\n\\\n\\n\\\n // fade out the normal perturbation as we move further from the water surface\\n\\\n normalTangentSpace.xy /= fade;\\n\\\n\\n\\\n // attempt to fade out the normal perturbation as we approach non water areas (low specular map value)\\n\\\n normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);\\n\\\n\\n\\\n normalTangentSpace = normalize(normalTangentSpace);\\n\\\n\\n\\\n // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane\\n\\\n float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);\\n\\\n\\n\\\n // fade out water effect as specular map value decreases\\n\\\n material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;\\n\\\n\\n\\\n // base color is a blend of the water and non-water color based on the value from the specular map\\n\\\n // may need a uniform blend factor to better control this\\n\\\n material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);\\n\\\n\\n\\\n // diffuse highlights are based on how perturbed the normal is\\n\\\n material.diffuse += (0.1 * tsPerturbationRatio);\\n\\\n\\n\\\n material.diffuse = material.diffuse;\\n\\\n\\n\\\n material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);\\n\\\n\\n\\\n material.specular = specularIntensity;\\n\\\n material.shininess = 10.0;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 rimColor;\\n\\\nuniform float width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\\n\\\n float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC));\\n\\\n float s = smoothstep(1.0 - width, 1.0, d);\\n\\\n\\n\\\n vec4 outColor = czm_gammaCorrect(color);\\n\\\n vec4 outRimColor = czm_gammaCorrect(rimColor);\\n\\\n\\n\\\n material.diffuse = outColor.rgb;\\n\\\n material.emission = outRimColor.rgb * s;\\n\\\n material.alpha = mix(outColor.a, outRimColor.a, s);\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 fadeInColor;\\n\\\nuniform vec4 fadeOutColor;\\n\\\nuniform float maximumDistance;\\n\\\nuniform bool repeat;\\n\\\nuniform vec2 fadeDirection;\\n\\\nuniform vec2 time;\\n\\\n\\n\\\nfloat getTime(float t, float coord)\\n\\\n{\\n\\\n float scalar = 1.0 / maximumDistance;\\n\\\n float q = distance(t, coord) * scalar;\\n\\\n if (repeat)\\n\\\n {\\n\\\n float r = distance(t, coord + 1.0) * scalar;\\n\\\n float s = distance(t, coord - 1.0) * scalar;\\n\\\n q = min(min(r, s), q);\\n\\\n }\\n\\\n return clamp(q, 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n float s = getTime(time.x, st.s) * fadeDirection.s;\\n\\\n float t = getTime(time.y, st.t) * fadeDirection.t;\\n\\\n\\n\\\n float u = length(vec2(s, t));\\n\\\n vec4 color = mix(fadeInColor, fadeOutColor, u);\\n\\\n\\n\\\n color = czm_gammaCorrect(color);\\n\\\n material.emission = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_OES_standard_derivatives\\n\\\n#extension GL_OES_standard_derivatives : enable\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 color;\\n\\\n\\n\\\nfloat getPointOnLine(vec2 p0, vec2 p1, float x)\\n\\\n{\\n\\\n float slope = (p0.y - p1.y) / (p0.x - p1.x);\\n\\\n return slope * (x - p0.x) + p0.y;\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n\\n\\\n#ifdef GL_OES_standard_derivatives\\n\\\n float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio;\\n\\\n#else\\n\\\n float base = 0.975; // 2.5% of the line will be the arrow head\\n\\\n#endif\\n\\\n\\n\\\n vec2 center = vec2(1.0, 0.5);\\n\\\n float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s);\\n\\\n float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s);\\n\\\n\\n\\\n float halfWidth = 0.15;\\n\\\n float s = step(0.5 - halfWidth, st.t);\\n\\\n s *= 1.0 - step(0.5 + halfWidth, st.t);\\n\\\n s *= 1.0 - step(base, st.s);\\n\\\n\\n\\\n float t = step(base, materialInput.st.s);\\n\\\n t *= 1.0 - step(ptOnUpperLine, st.t);\\n\\\n t *= step(ptOnLowerLine, st.t);\\n\\\n\\n\\\n // Find the distance from the closest separator (region between two colors)\\n\\\n float dist;\\n\\\n if (st.s < base)\\n\\\n {\\n\\\n float d1 = abs(st.t - (0.5 - halfWidth));\\n\\\n float d2 = abs(st.t - (0.5 + halfWidth));\\n\\\n dist = min(d1, d2);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n float d1 = czm_infinity;\\n\\\n if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth)\\n\\\n {\\n\\\n d1 = abs(st.s - base);\\n\\\n }\\n\\\n float d2 = abs(st.t - ptOnUpperLine);\\n\\\n float d3 = abs(st.t - ptOnLowerLine);\\n\\\n dist = min(min(d1, d2), d3);\\n\\\n }\\n\\\n\\n\\\n vec4 outsideColor = vec4(0.0);\\n\\\n vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0));\\n\\\n vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist);\\n\\\n\\n\\\n outColor = czm_gammaCorrect(outColor);\\n\\\n material.diffuse = outColor.rgb;\\n\\\n material.alpha = outColor.a;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 gapColor;\\n\\\nuniform float dashLength;\\n\\\nuniform float dashPattern;\\n\\\nvarying float v_polylineAngle;\\n\\\n\\n\\\nconst float maskLength = 16.0;\\n\\\n\\n\\\nmat2 rotate(float rad) {\\n\\\n float c = cos(rad);\\n\\\n float s = sin(rad);\\n\\\n return mat2(\\n\\\n c, s,\\n\\\n -s, c\\n\\\n );\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;\\n\\\n\\n\\\n // Get the relative position within the dash from 0 to 1\\n\\\n float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio));\\n\\\n // Figure out the mask index.\\n\\\n float maskIndex = floor(dashPosition * maskLength);\\n\\\n // Test the bit mask.\\n\\\n float maskTest = floor(dashPattern / pow(2.0, maskIndex));\\n\\\n vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color;\\n\\\n if (fragColor.a < 0.005) { // matches 0/255 and 1/255\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n fragColor = czm_gammaCorrect(fragColor);\\n\\\n material.emission = fragColor.rgb;\\n\\\n material.alpha = fragColor.a;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform float glowPower;\\n\\\nuniform float taperPower;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);\\n\\\n\\n\\\n if (taperPower <= 0.99999) {\\n\\\n glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));\\n\\\n }\\n\\\n\\n\\\n vec4 fragColor;\\n\\\n fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);\\n\\\n fragColor.a = clamp(0.0, 1.0, glow) * color.a;\\n\\\n fragColor = czm_gammaCorrect(fragColor);\\n\\\n\\n\\\n material.emission = fragColor.rgb;\\n\\\n material.alpha = fragColor.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 outlineColor;\\n\\\nuniform float outlineWidth;\\n\\\n\\n\\\nvarying float v_width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n vec2 st = materialInput.st;\\n\\\n float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width;\\n\\\n float b = step(0.5 - halfInteriorWidth, st.t);\\n\\\n b *= 1.0 - step(0.5 + halfInteriorWidth, st.t);\\n\\\n\\n\\\n // Find the distance from the closest separator (region between two colors)\\n\\\n float d1 = abs(st.t - (0.5 - halfInteriorWidth));\\n\\\n float d2 = abs(st.t - (0.5 + halfInteriorWidth));\\n\\\n float dist = min(d1, d2);\\n\\\n\\n\\\n vec4 currentColor = mix(outlineColor, color, b);\\n\\\n vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist);\\n\\\n outColor = czm_gammaCorrect(outColor);\\n\\\n\\n\\\n material.diffuse = outColor.rgb;\\n\\\n material.alpha = outColor.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_OES_standard_derivatives\\n\\\n #extension GL_OES_standard_derivatives : enable\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 color;\\n\\\nuniform float spacing;\\n\\\nuniform float width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n float distanceToContour = mod(materialInput.height, spacing);\\n\\\n\\n\\\n#ifdef GL_OES_standard_derivatives\\n\\\n float dxc = abs(dFdx(materialInput.height));\\n\\\n float dyc = abs(dFdy(materialInput.height));\\n\\\n float dF = max(dxc, dyc) * czm_pixelRatio * width;\\n\\\n float alpha = (distanceToContour < dF) ? 1.0 : 0.0;\\n\\\n#else\\n\\\n float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0;\\n\\\n#endif\\n\\\n\\n\\\n vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a));\\n\\\n material.diffuse = outColor.rgb;\\n\\\n material.alpha = outColor.a;\\n\\\n\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float minimumHeight;\\n\\\nuniform float maximumHeight;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0);\\n\\\n vec4 rampColor = texture2D(image, vec2(scaledHeight, 0.5));\\n\\\n rampColor = czm_gammaCorrect(rampColor);\\n\\\n material.diffuse = rampColor.rgb;\\n\\\n material.alpha = rampColor.a;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n vec4 rampColor = texture2D(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5));\\n\\\n rampColor = czm_gammaCorrect(rampColor);\\n\\\n material.diffuse = rampColor.rgb;\\n\\\n material.alpha = rampColor.a;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n vec4 rampColor = texture2D(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5));\\n\\\n rampColor = czm_gammaCorrect(rampColor);\\n\\\n material.diffuse = rampColor.rgb;\\n\\\n material.alpha = rampColor.a;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport AllMaterialAppearanceFS from \"../Shaders/Appearances/AllMaterialAppearanceFS.js\";\nimport AllMaterialAppearanceVS from \"../Shaders/Appearances/AllMaterialAppearanceVS.js\";\nimport BasicMaterialAppearanceFS from \"../Shaders/Appearances/BasicMaterialAppearanceFS.js\";\nimport BasicMaterialAppearanceVS from \"../Shaders/Appearances/BasicMaterialAppearanceVS.js\";\nimport TexturedMaterialAppearanceFS from \"../Shaders/Appearances/TexturedMaterialAppearanceFS.js\";\nimport TexturedMaterialAppearanceVS from \"../Shaders/Appearances/TexturedMaterialAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\n/**\n * An appearance for arbitrary geometry (as opposed to {@link EllipsoidSurfaceAppearance}, for example)\n * that supports shading with materials.\n *\n * @alias MaterialAppearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n * @param {Boolean} [options.faceForward=!options.closed] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link MaterialAppearance#renderState} has alpha blending enabled.\n * @param {Boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link MaterialAppearance#renderState} has backface culling enabled.\n * @param {MaterialAppearance.MaterialSupportType} [options.materialSupport=MaterialAppearance.MaterialSupport.TEXTURED] The type of materials that will be supported.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Materials.html|Cesium Sandcastle Material Appearance Demo}\n *\n * @example\n * var primitive = new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : new Cesium.WallGeometry({\n materialSupport : Cesium.MaterialAppearance.MaterialSupport.BASIC.vertexFormat,\n * // ...\n * })\n * }),\n * appearance : new Cesium.MaterialAppearance({\n * material : Cesium.Material.fromType('Color'),\n * faceForward : true\n * })\n *\n * });\n */\nfunction MaterialAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var translucent = defaultValue(options.translucent, true);\n var closed = defaultValue(options.closed, false);\n var materialSupport = defaultValue(\n options.materialSupport,\n MaterialAppearance.MaterialSupport.TEXTURED\n );\n\n /**\n * The material used to determine the fragment color. Unlike other {@link MaterialAppearance}\n * properties, this is not read-only, so an appearance's material can change on the fly.\n *\n * @type Material\n *\n * @default {@link Material.ColorType}\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = defined(options.material)\n ? options.material\n : Material.fromType(Material.ColorType);\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = translucent;\n\n this._vertexShaderSource = defaultValue(\n options.vertexShaderSource,\n materialSupport.vertexShaderSource\n );\n this._fragmentShaderSource = defaultValue(\n options.fragmentShaderSource,\n materialSupport.fragmentShaderSource\n );\n this._renderState = Appearance.getDefaultRenderState(\n translucent,\n closed,\n options.renderState\n );\n this._closed = closed;\n\n // Non-derived members\n\n this._materialSupport = materialSupport;\n this._vertexFormat = materialSupport.vertexFormat;\n this._flat = defaultValue(options.flat, false);\n this._faceForward = defaultValue(options.faceForward, !closed);\n}\n\nObject.defineProperties(MaterialAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader. The full fragment shader\n * source is built procedurally taking into account {@link MaterialAppearance#material},\n * {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}.\n * Use {@link MaterialAppearance#getFragmentShaderSource} to get the full source.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n * <p>\n * The render state can be explicitly defined when constructing a {@link MaterialAppearance}\n * instance, or it is set implicitly via {@link MaterialAppearance#translucent}\n * and {@link MaterialAppearance#closed}.\n * </p>\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed so\n * {@link MaterialAppearance#renderState} has backface culling enabled.\n * If the viewer enters the geometry, it will not be visible.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The type of materials supported by this instance. This impacts the required\n * {@link VertexFormat} and the complexity of the vertex and fragment shaders.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {MaterialAppearance.MaterialSupportType}\n * @readonly\n *\n * @default {@link MaterialAppearance.MaterialSupport.TEXTURED}\n */\n materialSupport: {\n get: function () {\n return this._materialSupport;\n },\n },\n\n /**\n * The {@link VertexFormat} that this appearance instance is compatible with.\n * A geometry can have more vertex attributes and still be compatible - at a\n * potential performance cost - but it can't have less.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type VertexFormat\n * @readonly\n *\n * @default {@link MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat}\n */\n vertexFormat: {\n get: function () {\n return this._vertexFormat;\n },\n },\n\n /**\n * When <code>true</code>, flat shading is used in the fragment shader,\n * which means lighting is not taking into account.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n flat: {\n get: function () {\n return this._flat;\n },\n },\n\n /**\n * When <code>true</code>, the fragment shader flips the surface normal\n * as needed to ensure that the normal faces the viewer to avoid\n * dark spots. This is useful when both sides of a geometry should be\n * shaded like {@link WallGeometry}.\n *\n * @memberof MaterialAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n faceForward: {\n get: function () {\n return this._faceForward;\n },\n },\n});\n\n/**\n * Procedurally creates the full GLSL fragment shader source. For {@link MaterialAppearance},\n * this is derived from {@link MaterialAppearance#fragmentShaderSource}, {@link MaterialAppearance#material},\n * {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nMaterialAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link MaterialAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nMaterialAppearance.prototype.isTranslucent = Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nMaterialAppearance.prototype.getRenderState =\n Appearance.prototype.getRenderState;\n\n/**\n * @typedef MaterialAppearance.MaterialSupportType\n * @type {Object}\n * @property {VertexFormat} vertexFormat\n * @property {String} vertexShaderSource\n * @property {String} fragmentShaderSource\n */\n\n/**\n * Determines the type of {@link Material} that is supported by a\n * {@link MaterialAppearance} instance. This is a trade-off between\n * flexibility (a wide array of materials) and memory/performance\n * (required vertex format and GLSL shader complexity.\n * @namespace\n */\nMaterialAppearance.MaterialSupport = {\n /**\n * Only basic materials, which require just <code>position</code> and\n * <code>normal</code> vertex attributes, are supported.\n *\n * @type {MaterialAppearance.MaterialSupportType}\n * @constant\n */\n BASIC: Object.freeze({\n vertexFormat: VertexFormat.POSITION_AND_NORMAL,\n vertexShaderSource: BasicMaterialAppearanceVS,\n fragmentShaderSource: BasicMaterialAppearanceFS,\n }),\n /**\n * Materials with textures, which require <code>position</code>,\n * <code>normal</code>, and <code>st</code> vertex attributes,\n * are supported. The vast majority of materials fall into this category.\n *\n * @type {MaterialAppearance.MaterialSupportType}\n * @constant\n */\n TEXTURED: Object.freeze({\n vertexFormat: VertexFormat.POSITION_NORMAL_AND_ST,\n vertexShaderSource: TexturedMaterialAppearanceVS,\n fragmentShaderSource: TexturedMaterialAppearanceFS,\n }),\n /**\n * All materials, including those that work in tangent space, are supported.\n * This requires <code>position</code>, <code>normal</code>, <code>st</code>,\n * <code>tangent</code>, and <code>bitangent</code> vertex attributes.\n *\n * @type {MaterialAppearance.MaterialSupportType}\n * @constant\n */\n ALL: Object.freeze({\n vertexFormat: VertexFormat.ALL,\n vertexShaderSource: AllMaterialAppearanceVS,\n fragmentShaderSource: AllMaterialAppearanceFS,\n }),\n};\nexport default MaterialAppearance;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec3 normal;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\\n\\\n v_normalEC = czm_normal * normal; // normal in eye coordinates\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec3 normal;\\n\\\nattribute vec2 st;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\\n\\\n v_normalEC = czm_normal * normal; // normal in eye coordinates\\n\\\n v_st = st;\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n materialInput.st = v_st;\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec3 normal;\\n\\\nattribute vec3 tangent;\\n\\\nattribute vec3 bitangent;\\n\\\nattribute vec2 st;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec3 v_tangentEC;\\n\\\nvarying vec3 v_bitangentEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\\n\\\n v_normalEC = czm_normal * normal; // normal in eye coordinates\\n\\\n v_tangentEC = czm_normal * tangent; // tangent in eye coordinates\\n\\\n v_bitangentEC = czm_normal * bitangent; // bitangent in eye coordinates\\n\\\n v_st = st;\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec3 v_tangentEC;\\n\\\nvarying vec3 v_bitangentEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 positionToEyeEC = -v_positionEC;\\n\\\n mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC);\\n\\\n\\n\\\n vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.tangentToEyeMatrix = tangentToEyeMatrix;\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n materialInput.st = v_st;\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PerInstanceColorAppearanceFS from \"../Shaders/Appearances/PerInstanceColorAppearanceFS.js\";\nimport PerInstanceColorAppearanceVS from \"../Shaders/Appearances/PerInstanceColorAppearanceVS.js\";\nimport PerInstanceFlatColorAppearanceFS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js\";\nimport PerInstanceFlatColorAppearanceVS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\n\n/**\n * An appearance for {@link GeometryInstance} instances with color attributes.\n * This allows several geometry instances, each with a different color, to\n * be drawn with the same {@link Primitive} as shown in the second example below.\n *\n * @alias PerInstanceColorAppearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n * @param {Boolean} [options.faceForward=!options.closed] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PerInstanceColorAppearance#renderState} has alpha blending enabled.\n * @param {Boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link PerInstanceColorAppearance#renderState} has backface culling enabled.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @example\n * // A solid white line segment\n * var primitive = new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : new Cesium.SimplePolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 5.0, 0.0\n * ])\n * }),\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0))\n * }\n * }),\n * appearance : new Cesium.PerInstanceColorAppearance({\n * flat : true,\n * translucent : false\n * })\n * });\n *\n * // Two rectangles in a primitive, each with a different color\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.RectangleGeometry({\n * rectangle : Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0)\n * }),\n * attributes : {\n * color : new Cesium.ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 0.5)\n * }\n * });\n *\n * var anotherInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.RectangleGeometry({\n * rectangle : Cesium.Rectangle.fromDegrees(0.0, 40.0, 10.0, 50.0)\n * }),\n * attributes : {\n * color : new Cesium.ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 0.5)\n * }\n * });\n *\n * var rectanglePrimitive = new Cesium.Primitive({\n * geometryInstances : [instance, anotherInstance],\n * appearance : new Cesium.PerInstanceColorAppearance()\n * });\n */\nfunction PerInstanceColorAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var translucent = defaultValue(options.translucent, true);\n var closed = defaultValue(options.closed, false);\n var flat = defaultValue(options.flat, false);\n var vs = flat\n ? PerInstanceFlatColorAppearanceVS\n : PerInstanceColorAppearanceVS;\n var fs = flat\n ? PerInstanceFlatColorAppearanceFS\n : PerInstanceColorAppearanceFS;\n var vertexFormat = flat\n ? PerInstanceColorAppearance.FLAT_VERTEX_FORMAT\n : PerInstanceColorAppearance.VERTEX_FORMAT;\n\n /**\n * This property is part of the {@link Appearance} interface, but is not\n * used by {@link PerInstanceColorAppearance} since a fully custom fragment shader is used.\n *\n * @type Material\n *\n * @default undefined\n */\n this.material = undefined;\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent so\n * {@link PerInstanceColorAppearance#renderState} has alpha blending enabled.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = translucent;\n\n this._vertexShaderSource = defaultValue(options.vertexShaderSource, vs);\n this._fragmentShaderSource = defaultValue(options.fragmentShaderSource, fs);\n this._renderState = Appearance.getDefaultRenderState(\n translucent,\n closed,\n options.renderState\n );\n this._closed = closed;\n\n // Non-derived members\n\n this._vertexFormat = vertexFormat;\n this._flat = flat;\n this._faceForward = defaultValue(options.faceForward, !closed);\n}\n\nObject.defineProperties(PerInstanceColorAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n * <p>\n * The render state can be explicitly defined when constructing a {@link PerInstanceColorAppearance}\n * instance, or it is set implicitly via {@link PerInstanceColorAppearance#translucent}\n * and {@link PerInstanceColorAppearance#closed}.\n * </p>\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed so\n * {@link PerInstanceColorAppearance#renderState} has backface culling enabled.\n * If the viewer enters the geometry, it will not be visible.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The {@link VertexFormat} that this appearance instance is compatible with.\n * A geometry can have more vertex attributes and still be compatible - at a\n * potential performance cost - but it can't have less.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type VertexFormat\n * @readonly\n */\n vertexFormat: {\n get: function () {\n return this._vertexFormat;\n },\n },\n\n /**\n * When <code>true</code>, flat shading is used in the fragment shader,\n * which means lighting is not taking into account.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n flat: {\n get: function () {\n return this._flat;\n },\n },\n\n /**\n * When <code>true</code>, the fragment shader flips the surface normal\n * as needed to ensure that the normal faces the viewer to avoid\n * dark spots. This is useful when both sides of a geometry should be\n * shaded like {@link WallGeometry}.\n *\n * @memberof PerInstanceColorAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n faceForward: {\n get: function () {\n return this._faceForward;\n },\n },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances\n * are compatible with. This requires only <code>position</code> and <code>normal</code>\n * attributes.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPerInstanceColorAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_NORMAL;\n\n/**\n * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances\n * are compatible with when {@link PerInstanceColorAppearance#flat} is <code>true</code>.\n * This requires only a <code>position</code> attribute.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPerInstanceColorAppearance.FLAT_VERTEX_FORMAT = VertexFormat.POSITION_ONLY;\n\n/**\n * Procedurally creates the full GLSL fragment shader source. For {@link PerInstanceColorAppearance},\n * this is derived from {@link PerInstanceColorAppearance#fragmentShaderSource}, {@link PerInstanceColorAppearance#flat},\n * and {@link PerInstanceColorAppearance#faceForward}.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nPerInstanceColorAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PerInstanceColorAppearance#translucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nPerInstanceColorAppearance.prototype.isTranslucent =\n Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nPerInstanceColorAppearance.prototype.getRenderState =\n Appearance.prototype.getRenderState;\nexport default PerInstanceColorAppearance;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec4 color;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_color = color;\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec3 normal;\\n\\\nattribute vec4 color;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\\n\\\n v_normalEC = czm_normal * normal; // normal in eye coordinates\\n\\\n v_color = color;\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_FragColor = czm_gammaCorrect(v_color);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_positionEC;\\n\\\nvarying vec3 v_normalEC;\\n\\\nvarying vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n vec4 color = czm_gammaCorrect(v_color);\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n material.diffuse = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n}\\n\\\n\";\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link MaterialProperty} that maps to solid color {@link Material} uniforms.\n *\n * @param {Property|Color} [color=Color.WHITE] The {@link Color} Property to be used.\n *\n * @alias ColorMaterialProperty\n * @constructor\n */\nfunction ColorMaterialProperty(color) {\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n\n this.color = color;\n}\n\nObject.defineProperties(ColorMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof ColorMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return Property.isConstant(this._color);\n },\n },\n\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof ColorMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the {@link Color} {@link Property}.\n * @memberof ColorMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nColorMaterialProperty.prototype.getType = function (time) {\n return \"Color\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nColorMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n Color.WHITE,\n result.color\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nColorMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof ColorMaterialProperty && //\n Property.equals(this._color, other._color))\n );\n};\nexport default ColorMaterialProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\n\n/**\n * Represents a command to the renderer for drawing.\n *\n * @private\n */\nfunction DrawCommand(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._boundingVolume = options.boundingVolume;\n this._orientedBoundingBox = options.orientedBoundingBox;\n this._cull = defaultValue(options.cull, true);\n this._occlude = defaultValue(options.occlude, true);\n this._modelMatrix = options.modelMatrix;\n this._primitiveType = defaultValue(\n options.primitiveType,\n PrimitiveType.TRIANGLES\n );\n this._vertexArray = options.vertexArray;\n this._count = options.count;\n this._offset = defaultValue(options.offset, 0);\n this._instanceCount = defaultValue(options.instanceCount, 0);\n this._shaderProgram = options.shaderProgram;\n this._uniformMap = options.uniformMap;\n this._renderState = options.renderState;\n this._framebuffer = options.framebuffer;\n this._pass = options.pass;\n this._executeInClosestFrustum = defaultValue(\n options.executeInClosestFrustum,\n false\n );\n this._owner = options.owner;\n this._debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n this._debugOverlappingFrustums = 0;\n this._castShadows = defaultValue(options.castShadows, false);\n this._receiveShadows = defaultValue(options.receiveShadows, false);\n this._pickId = options.pickId;\n this._pickOnly = defaultValue(options.pickOnly, false);\n\n this.dirty = true;\n this.lastDirtyTime = 0;\n\n /**\n * @private\n */\n this.derivedCommands = {};\n}\n\nObject.defineProperties(DrawCommand.prototype, {\n /**\n * The bounding volume of the geometry in world space. This is used for culling and frustum selection.\n * <p>\n * For best rendering performance, use the tightest possible bounding volume. Although\n * <code>undefined</code> is allowed, always try to provide a bounding volume to\n * allow the tightest possible near and far planes to be computed for the scene, and\n * minimize the number of frustums needed.\n * </p>\n *\n * @memberof DrawCommand.prototype\n * @type {Object}\n * @default undefined\n *\n * @see DrawCommand#debugShowBoundingVolume\n */\n boundingVolume: {\n get: function () {\n return this._boundingVolume;\n },\n set: function (value) {\n if (this._boundingVolume !== value) {\n this._boundingVolume = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The oriented bounding box of the geometry in world space. If this is defined, it is used instead of\n * {@link DrawCommand#boundingVolume} for plane intersection testing.\n *\n * @memberof DrawCommand.prototype\n * @type {OrientedBoundingBox}\n * @default undefined\n *\n * @see DrawCommand#debugShowBoundingVolume\n */\n orientedBoundingBox: {\n get: function () {\n return this._orientedBoundingBox;\n },\n set: function (value) {\n if (this._orientedBoundingBox !== value) {\n this._orientedBoundingBox = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * When <code>true</code>, the renderer frustum and horizon culls the command based on its {@link DrawCommand#boundingVolume}.\n * If the command was already culled, set this to <code>false</code> for a performance improvement.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default true\n */\n cull: {\n get: function () {\n return this._cull;\n },\n set: function (value) {\n if (this._cull !== value) {\n this._cull = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * When <code>true</code>, the horizon culls the command based on its {@link DrawCommand#boundingVolume}.\n * {@link DrawCommand#cull} must also be <code>true</code> in order for the command to be culled.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default true\n */\n occlude: {\n get: function () {\n return this._occlude;\n },\n set: function (value) {\n if (this._occlude !== value) {\n this._occlude = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The transformation from the geometry in model space to world space.\n * <p>\n * When <code>undefined</code>, the geometry is assumed to be defined in world space.\n * </p>\n *\n * @memberof DrawCommand.prototype\n * @type {Matrix4}\n * @default undefined\n */\n modelMatrix: {\n get: function () {\n return this._modelMatrix;\n },\n set: function (value) {\n if (this._modelMatrix !== value) {\n this._modelMatrix = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The type of geometry in the vertex array.\n *\n * @memberof DrawCommand.prototype\n * @type {PrimitiveType}\n * @default PrimitiveType.TRIANGLES\n */\n primitiveType: {\n get: function () {\n return this._primitiveType;\n },\n set: function (value) {\n if (this._primitiveType !== value) {\n this._primitiveType = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The vertex array.\n *\n * @memberof DrawCommand.prototype\n * @type {VertexArray}\n * @default undefined\n */\n vertexArray: {\n get: function () {\n return this._vertexArray;\n },\n set: function (value) {\n if (this._vertexArray !== value) {\n this._vertexArray = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The number of vertices to draw in the vertex array.\n *\n * @memberof DrawCommand.prototype\n * @type {Number}\n * @default undefined\n */\n count: {\n get: function () {\n return this._count;\n },\n set: function (value) {\n if (this._count !== value) {\n this._count = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The offset to start drawing in the vertex array.\n *\n * @memberof DrawCommand.prototype\n * @type {Number}\n * @default 0\n */\n offset: {\n get: function () {\n return this._offset;\n },\n set: function (value) {\n if (this._offset !== value) {\n this._offset = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The number of instances to draw.\n *\n * @memberof DrawCommand.prototype\n * @type {Number}\n * @default 0\n */\n instanceCount: {\n get: function () {\n return this._instanceCount;\n },\n set: function (value) {\n if (this._instanceCount !== value) {\n this._instanceCount = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The shader program to apply.\n *\n * @memberof DrawCommand.prototype\n * @type {ShaderProgram}\n * @default undefined\n */\n shaderProgram: {\n get: function () {\n return this._shaderProgram;\n },\n set: function (value) {\n if (this._shaderProgram !== value) {\n this._shaderProgram = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * Whether this command should cast shadows when shadowing is enabled.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default false\n */\n castShadows: {\n get: function () {\n return this._castShadows;\n },\n set: function (value) {\n if (this._castShadows !== value) {\n this._castShadows = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * Whether this command should receive shadows when shadowing is enabled.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default false\n */\n receiveShadows: {\n get: function () {\n return this._receiveShadows;\n },\n set: function (value) {\n if (this._receiveShadows !== value) {\n this._receiveShadows = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * An object with functions whose names match the uniforms in the shader program\n * and return values to set those uniforms.\n *\n * @memberof DrawCommand.prototype\n * @type {Object}\n * @default undefined\n */\n uniformMap: {\n get: function () {\n return this._uniformMap;\n },\n set: function (value) {\n if (this._uniformMap !== value) {\n this._uniformMap = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The render state.\n *\n * @memberof DrawCommand.prototype\n * @type {RenderState}\n * @default undefined\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n set: function (value) {\n if (this._renderState !== value) {\n this._renderState = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The framebuffer to draw to.\n *\n * @memberof DrawCommand.prototype\n * @type {Framebuffer}\n * @default undefined\n */\n framebuffer: {\n get: function () {\n return this._framebuffer;\n },\n set: function (value) {\n if (this._framebuffer !== value) {\n this._framebuffer = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The pass when to render.\n *\n * @memberof DrawCommand.prototype\n * @type {Pass}\n * @default undefined\n */\n pass: {\n get: function () {\n return this._pass;\n },\n set: function (value) {\n if (this._pass !== value) {\n this._pass = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * Specifies if this command is only to be executed in the frustum closest\n * to the eye containing the bounding volume. Defaults to <code>false</code>.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default false\n */\n executeInClosestFrustum: {\n get: function () {\n return this._executeInClosestFrustum;\n },\n set: function (value) {\n if (this._executeInClosestFrustum !== value) {\n this._executeInClosestFrustum = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * The object who created this command. This is useful for debugging command\n * execution; it allows us to see who created a command when we only have a\n * reference to the command, and can be used to selectively execute commands\n * with {@link Scene#debugCommandFilter}.\n *\n * @memberof DrawCommand.prototype\n * @type {Object}\n * @default undefined\n *\n * @see Scene#debugCommandFilter\n */\n owner: {\n get: function () {\n return this._owner;\n },\n set: function (value) {\n if (this._owner !== value) {\n this._owner = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the {@link DrawCommand#boundingVolume} for this command, assuming it is a sphere, when the command executes.\n * </p>\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default false\n *\n * @see DrawCommand#boundingVolume\n */\n debugShowBoundingVolume: {\n get: function () {\n return this._debugShowBoundingVolume;\n },\n set: function (value) {\n if (this._debugShowBoundingVolume !== value) {\n this._debugShowBoundingVolume = value;\n this.dirty = true;\n }\n },\n },\n\n /**\n * Used to implement Scene.debugShowFrustums.\n * @private\n */\n debugOverlappingFrustums: {\n get: function () {\n return this._debugOverlappingFrustums;\n },\n set: function (value) {\n if (this._debugOverlappingFrustums !== value) {\n this._debugOverlappingFrustums = value;\n this.dirty = true;\n }\n },\n },\n /**\n * A GLSL string that will evaluate to a pick id. When <code>undefined</code>, the command will only draw depth\n * during the pick pass.\n *\n * @memberof DrawCommand.prototype\n * @type {String}\n * @default undefined\n */\n pickId: {\n get: function () {\n return this._pickId;\n },\n set: function (value) {\n if (this._pickId !== value) {\n this._pickId = value;\n this.dirty = true;\n }\n },\n },\n /**\n * Whether this command should be executed in the pick pass only.\n *\n * @memberof DrawCommand.prototype\n * @type {Boolean}\n * @default false\n */\n pickOnly: {\n get: function () {\n return this._pickOnly;\n },\n set: function (value) {\n if (this._pickOnly !== value) {\n this._pickOnly = value;\n this.dirty = true;\n }\n },\n },\n});\n\n/**\n * @private\n */\nDrawCommand.shallowClone = function (command, result) {\n if (!defined(command)) {\n return undefined;\n }\n if (!defined(result)) {\n result = new DrawCommand();\n }\n\n result._boundingVolume = command._boundingVolume;\n result._orientedBoundingBox = command._orientedBoundingBox;\n result._cull = command._cull;\n result._occlude = command._occlude;\n result._modelMatrix = command._modelMatrix;\n result._primitiveType = command._primitiveType;\n result._vertexArray = command._vertexArray;\n result._count = command._count;\n result._offset = command._offset;\n result._instanceCount = command._instanceCount;\n result._shaderProgram = command._shaderProgram;\n result._uniformMap = command._uniformMap;\n result._renderState = command._renderState;\n result._framebuffer = command._framebuffer;\n result._pass = command._pass;\n result._executeInClosestFrustum = command._executeInClosestFrustum;\n result._owner = command._owner;\n result._debugShowBoundingVolume = command._debugShowBoundingVolume;\n result._debugOverlappingFrustums = command._debugOverlappingFrustums;\n result._castShadows = command._castShadows;\n result._receiveShadows = command._receiveShadows;\n result._pickId = command._pickId;\n result._pickOnly = command._pickOnly;\n\n result.dirty = true;\n result.lastDirtyTime = 0;\n\n return result;\n};\n\n/**\n * Executes the draw command.\n *\n * @param {Context} context The renderer context in which to draw.\n * @param {PassState} [passState] The state for the current render pass.\n */\nDrawCommand.prototype.execute = function (context, passState) {\n context.draw(this, passState);\n};\nexport default DrawCommand;\n","/**\n * The render pass for a command.\n *\n * @private\n */\nvar Pass = {\n // If you add/modify/remove Pass constants, also change the automatic GLSL constants\n // that start with 'czm_pass'\n //\n // Commands are executed in order by pass up to the translucent pass.\n // Translucent geometry needs special handling (sorting/OIT). The compute pass\n // is executed first and the overlay pass is executed last. Both are not sorted\n // by frustum.\n ENVIRONMENT: 0,\n COMPUTE: 1,\n GLOBE: 2,\n TERRAIN_CLASSIFICATION: 3,\n CESIUM_3D_TILE: 4,\n CESIUM_3D_TILE_CLASSIFICATION: 5,\n CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW: 6,\n OPAQUE: 7,\n TRANSLUCENT: 8,\n OVERLAY: 9,\n NUMBER_OF_PASSES: 10,\n};\nexport default Object.freeze(Pass);\n","/**\n * Returns frozen renderState as well as all of the object literal properties. This function is deep object freeze\n * function ignoring properties named \"_applyFunctions\".\n *\n * @private\n *\n * @param {Object} renderState\n * @returns {Object} Returns frozen renderState.\n *\n */\nfunction freezeRenderState(renderState) {\n if (typeof renderState !== \"object\" || renderState === null) {\n return renderState;\n }\n\n var propName;\n var propNames = Object.keys(renderState);\n\n for (var i = 0; i < propNames.length; i++) {\n propName = propNames[i];\n if (\n renderState.hasOwnProperty(propName) &&\n propName !== \"_applyFunctions\"\n ) {\n renderState[propName] = freezeRenderState(renderState[propName]);\n }\n }\n return Object.freeze(renderState);\n}\nexport default freezeRenderState;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport WindingOrder from \"../Core/WindingOrder.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport freezeRenderState from \"./freezeRenderState.js\";\n\nfunction validateBlendEquation(blendEquation) {\n return (\n blendEquation === WebGLConstants.FUNC_ADD ||\n blendEquation === WebGLConstants.FUNC_SUBTRACT ||\n blendEquation === WebGLConstants.FUNC_REVERSE_SUBTRACT ||\n blendEquation === WebGLConstants.MIN ||\n blendEquation === WebGLConstants.MAX\n );\n}\n\nfunction validateBlendFunction(blendFunction) {\n return (\n blendFunction === WebGLConstants.ZERO ||\n blendFunction === WebGLConstants.ONE ||\n blendFunction === WebGLConstants.SRC_COLOR ||\n blendFunction === WebGLConstants.ONE_MINUS_SRC_COLOR ||\n blendFunction === WebGLConstants.DST_COLOR ||\n blendFunction === WebGLConstants.ONE_MINUS_DST_COLOR ||\n blendFunction === WebGLConstants.SRC_ALPHA ||\n blendFunction === WebGLConstants.ONE_MINUS_SRC_ALPHA ||\n blendFunction === WebGLConstants.DST_ALPHA ||\n blendFunction === WebGLConstants.ONE_MINUS_DST_ALPHA ||\n blendFunction === WebGLConstants.CONSTANT_COLOR ||\n blendFunction === WebGLConstants.ONE_MINUS_CONSTANT_COLOR ||\n blendFunction === WebGLConstants.CONSTANT_ALPHA ||\n blendFunction === WebGLConstants.ONE_MINUS_CONSTANT_ALPHA ||\n blendFunction === WebGLConstants.SRC_ALPHA_SATURATE\n );\n}\n\nfunction validateCullFace(cullFace) {\n return (\n cullFace === WebGLConstants.FRONT ||\n cullFace === WebGLConstants.BACK ||\n cullFace === WebGLConstants.FRONT_AND_BACK\n );\n}\n\nfunction validateDepthFunction(depthFunction) {\n return (\n depthFunction === WebGLConstants.NEVER ||\n depthFunction === WebGLConstants.LESS ||\n depthFunction === WebGLConstants.EQUAL ||\n depthFunction === WebGLConstants.LEQUAL ||\n depthFunction === WebGLConstants.GREATER ||\n depthFunction === WebGLConstants.NOTEQUAL ||\n depthFunction === WebGLConstants.GEQUAL ||\n depthFunction === WebGLConstants.ALWAYS\n );\n}\n\nfunction validateStencilFunction(stencilFunction) {\n return (\n stencilFunction === WebGLConstants.NEVER ||\n stencilFunction === WebGLConstants.LESS ||\n stencilFunction === WebGLConstants.EQUAL ||\n stencilFunction === WebGLConstants.LEQUAL ||\n stencilFunction === WebGLConstants.GREATER ||\n stencilFunction === WebGLConstants.NOTEQUAL ||\n stencilFunction === WebGLConstants.GEQUAL ||\n stencilFunction === WebGLConstants.ALWAYS\n );\n}\n\nfunction validateStencilOperation(stencilOperation) {\n return (\n stencilOperation === WebGLConstants.ZERO ||\n stencilOperation === WebGLConstants.KEEP ||\n stencilOperation === WebGLConstants.REPLACE ||\n stencilOperation === WebGLConstants.INCR ||\n stencilOperation === WebGLConstants.DECR ||\n stencilOperation === WebGLConstants.INVERT ||\n stencilOperation === WebGLConstants.INCR_WRAP ||\n stencilOperation === WebGLConstants.DECR_WRAP\n );\n}\n\n/**\n * @private\n */\nfunction RenderState(renderState) {\n var rs = defaultValue(renderState, defaultValue.EMPTY_OBJECT);\n var cull = defaultValue(rs.cull, defaultValue.EMPTY_OBJECT);\n var polygonOffset = defaultValue(rs.polygonOffset, defaultValue.EMPTY_OBJECT);\n var scissorTest = defaultValue(rs.scissorTest, defaultValue.EMPTY_OBJECT);\n var scissorTestRectangle = defaultValue(\n scissorTest.rectangle,\n defaultValue.EMPTY_OBJECT\n );\n var depthRange = defaultValue(rs.depthRange, defaultValue.EMPTY_OBJECT);\n var depthTest = defaultValue(rs.depthTest, defaultValue.EMPTY_OBJECT);\n var colorMask = defaultValue(rs.colorMask, defaultValue.EMPTY_OBJECT);\n var blending = defaultValue(rs.blending, defaultValue.EMPTY_OBJECT);\n var blendingColor = defaultValue(blending.color, defaultValue.EMPTY_OBJECT);\n var stencilTest = defaultValue(rs.stencilTest, defaultValue.EMPTY_OBJECT);\n var stencilTestFrontOperation = defaultValue(\n stencilTest.frontOperation,\n defaultValue.EMPTY_OBJECT\n );\n var stencilTestBackOperation = defaultValue(\n stencilTest.backOperation,\n defaultValue.EMPTY_OBJECT\n );\n var sampleCoverage = defaultValue(\n rs.sampleCoverage,\n defaultValue.EMPTY_OBJECT\n );\n var viewport = rs.viewport;\n\n this.frontFace = defaultValue(rs.frontFace, WindingOrder.COUNTER_CLOCKWISE);\n this.cull = {\n enabled: defaultValue(cull.enabled, false),\n face: defaultValue(cull.face, WebGLConstants.BACK),\n };\n this.lineWidth = defaultValue(rs.lineWidth, 1.0);\n this.polygonOffset = {\n enabled: defaultValue(polygonOffset.enabled, false),\n factor: defaultValue(polygonOffset.factor, 0),\n units: defaultValue(polygonOffset.units, 0),\n };\n this.scissorTest = {\n enabled: defaultValue(scissorTest.enabled, false),\n rectangle: BoundingRectangle.clone(scissorTestRectangle),\n };\n this.depthRange = {\n near: defaultValue(depthRange.near, 0),\n far: defaultValue(depthRange.far, 1),\n };\n this.depthTest = {\n enabled: defaultValue(depthTest.enabled, false),\n func: defaultValue(depthTest.func, WebGLConstants.LESS), // func, because function is a JavaScript keyword\n };\n this.colorMask = {\n red: defaultValue(colorMask.red, true),\n green: defaultValue(colorMask.green, true),\n blue: defaultValue(colorMask.blue, true),\n alpha: defaultValue(colorMask.alpha, true),\n };\n this.depthMask = defaultValue(rs.depthMask, true);\n this.stencilMask = defaultValue(rs.stencilMask, ~0);\n this.blending = {\n enabled: defaultValue(blending.enabled, false),\n color: new Color(\n defaultValue(blendingColor.red, 0.0),\n defaultValue(blendingColor.green, 0.0),\n defaultValue(blendingColor.blue, 0.0),\n defaultValue(blendingColor.alpha, 0.0)\n ),\n equationRgb: defaultValue(blending.equationRgb, WebGLConstants.FUNC_ADD),\n equationAlpha: defaultValue(\n blending.equationAlpha,\n WebGLConstants.FUNC_ADD\n ),\n functionSourceRgb: defaultValue(\n blending.functionSourceRgb,\n WebGLConstants.ONE\n ),\n functionSourceAlpha: defaultValue(\n blending.functionSourceAlpha,\n WebGLConstants.ONE\n ),\n functionDestinationRgb: defaultValue(\n blending.functionDestinationRgb,\n WebGLConstants.ZERO\n ),\n functionDestinationAlpha: defaultValue(\n blending.functionDestinationAlpha,\n WebGLConstants.ZERO\n ),\n };\n this.stencilTest = {\n enabled: defaultValue(stencilTest.enabled, false),\n frontFunction: defaultValue(\n stencilTest.frontFunction,\n WebGLConstants.ALWAYS\n ),\n backFunction: defaultValue(stencilTest.backFunction, WebGLConstants.ALWAYS),\n reference: defaultValue(stencilTest.reference, 0),\n mask: defaultValue(stencilTest.mask, ~0),\n frontOperation: {\n fail: defaultValue(stencilTestFrontOperation.fail, WebGLConstants.KEEP),\n zFail: defaultValue(stencilTestFrontOperation.zFail, WebGLConstants.KEEP),\n zPass: defaultValue(stencilTestFrontOperation.zPass, WebGLConstants.KEEP),\n },\n backOperation: {\n fail: defaultValue(stencilTestBackOperation.fail, WebGLConstants.KEEP),\n zFail: defaultValue(stencilTestBackOperation.zFail, WebGLConstants.KEEP),\n zPass: defaultValue(stencilTestBackOperation.zPass, WebGLConstants.KEEP),\n },\n };\n this.sampleCoverage = {\n enabled: defaultValue(sampleCoverage.enabled, false),\n value: defaultValue(sampleCoverage.value, 1.0),\n invert: defaultValue(sampleCoverage.invert, false),\n };\n this.viewport = defined(viewport)\n ? new BoundingRectangle(\n viewport.x,\n viewport.y,\n viewport.width,\n viewport.height\n )\n : undefined;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n this.lineWidth < ContextLimits.minimumAliasedLineWidth ||\n this.lineWidth > ContextLimits.maximumAliasedLineWidth\n ) {\n throw new DeveloperError(\n \"renderState.lineWidth is out of range. Check minimumAliasedLineWidth and maximumAliasedLineWidth.\"\n );\n }\n if (!WindingOrder.validate(this.frontFace)) {\n throw new DeveloperError(\"Invalid renderState.frontFace.\");\n }\n if (!validateCullFace(this.cull.face)) {\n throw new DeveloperError(\"Invalid renderState.cull.face.\");\n }\n if (\n this.scissorTest.rectangle.width < 0 ||\n this.scissorTest.rectangle.height < 0\n ) {\n throw new DeveloperError(\n \"renderState.scissorTest.rectangle.width and renderState.scissorTest.rectangle.height must be greater than or equal to zero.\"\n );\n }\n if (this.depthRange.near > this.depthRange.far) {\n // WebGL specific - not an error in GL ES\n throw new DeveloperError(\n \"renderState.depthRange.near can not be greater than renderState.depthRange.far.\"\n );\n }\n if (this.depthRange.near < 0) {\n // Would be clamped by GL\n throw new DeveloperError(\n \"renderState.depthRange.near must be greater than or equal to zero.\"\n );\n }\n if (this.depthRange.far > 1) {\n // Would be clamped by GL\n throw new DeveloperError(\n \"renderState.depthRange.far must be less than or equal to one.\"\n );\n }\n if (!validateDepthFunction(this.depthTest.func)) {\n throw new DeveloperError(\"Invalid renderState.depthTest.func.\");\n }\n if (\n this.blending.color.red < 0.0 ||\n this.blending.color.red > 1.0 ||\n this.blending.color.green < 0.0 ||\n this.blending.color.green > 1.0 ||\n this.blending.color.blue < 0.0 ||\n this.blending.color.blue > 1.0 ||\n this.blending.color.alpha < 0.0 ||\n this.blending.color.alpha > 1.0\n ) {\n // Would be clamped by GL\n throw new DeveloperError(\n \"renderState.blending.color components must be greater than or equal to zero and less than or equal to one.\"\n );\n }\n if (!validateBlendEquation(this.blending.equationRgb)) {\n throw new DeveloperError(\"Invalid renderState.blending.equationRgb.\");\n }\n if (!validateBlendEquation(this.blending.equationAlpha)) {\n throw new DeveloperError(\"Invalid renderState.blending.equationAlpha.\");\n }\n if (!validateBlendFunction(this.blending.functionSourceRgb)) {\n throw new DeveloperError(\"Invalid renderState.blending.functionSourceRgb.\");\n }\n if (!validateBlendFunction(this.blending.functionSourceAlpha)) {\n throw new DeveloperError(\n \"Invalid renderState.blending.functionSourceAlpha.\"\n );\n }\n if (!validateBlendFunction(this.blending.functionDestinationRgb)) {\n throw new DeveloperError(\n \"Invalid renderState.blending.functionDestinationRgb.\"\n );\n }\n if (!validateBlendFunction(this.blending.functionDestinationAlpha)) {\n throw new DeveloperError(\n \"Invalid renderState.blending.functionDestinationAlpha.\"\n );\n }\n if (!validateStencilFunction(this.stencilTest.frontFunction)) {\n throw new DeveloperError(\"Invalid renderState.stencilTest.frontFunction.\");\n }\n if (!validateStencilFunction(this.stencilTest.backFunction)) {\n throw new DeveloperError(\"Invalid renderState.stencilTest.backFunction.\");\n }\n if (!validateStencilOperation(this.stencilTest.frontOperation.fail)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.frontOperation.fail.\"\n );\n }\n if (!validateStencilOperation(this.stencilTest.frontOperation.zFail)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.frontOperation.zFail.\"\n );\n }\n if (!validateStencilOperation(this.stencilTest.frontOperation.zPass)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.frontOperation.zPass.\"\n );\n }\n if (!validateStencilOperation(this.stencilTest.backOperation.fail)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.backOperation.fail.\"\n );\n }\n if (!validateStencilOperation(this.stencilTest.backOperation.zFail)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.backOperation.zFail.\"\n );\n }\n if (!validateStencilOperation(this.stencilTest.backOperation.zPass)) {\n throw new DeveloperError(\n \"Invalid renderState.stencilTest.backOperation.zPass.\"\n );\n }\n\n if (defined(this.viewport)) {\n if (this.viewport.width < 0) {\n throw new DeveloperError(\n \"renderState.viewport.width must be greater than or equal to zero.\"\n );\n }\n if (this.viewport.height < 0) {\n throw new DeveloperError(\n \"renderState.viewport.height must be greater than or equal to zero.\"\n );\n }\n\n if (this.viewport.width > ContextLimits.maximumViewportWidth) {\n throw new DeveloperError(\n \"renderState.viewport.width must be less than or equal to the maximum viewport width (\" +\n ContextLimits.maximumViewportWidth.toString() +\n \"). Check maximumViewportWidth.\"\n );\n }\n if (this.viewport.height > ContextLimits.maximumViewportHeight) {\n throw new DeveloperError(\n \"renderState.viewport.height must be less than or equal to the maximum viewport height (\" +\n ContextLimits.maximumViewportHeight.toString() +\n \"). Check maximumViewportHeight.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n this.id = 0;\n this._applyFunctions = [];\n}\n\nvar nextRenderStateId = 0;\nvar renderStateCache = {};\n\n/**\n * Validates and then finds or creates an immutable render state, which defines the pipeline\n * state for a {@link DrawCommand} or {@link ClearCommand}. All inputs states are optional. Omitted states\n * use the defaults shown in the example below.\n *\n * @param {Object} [renderState] The states defining the render state as shown in the example below.\n *\n * @exception {RuntimeError} renderState.lineWidth is out of range.\n * @exception {DeveloperError} Invalid renderState.frontFace.\n * @exception {DeveloperError} Invalid renderState.cull.face.\n * @exception {DeveloperError} scissorTest.rectangle.width and scissorTest.rectangle.height must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.depthRange.near can't be greater than renderState.depthRange.far.\n * @exception {DeveloperError} renderState.depthRange.near must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.depthRange.far must be less than or equal to zero.\n * @exception {DeveloperError} Invalid renderState.depthTest.func.\n * @exception {DeveloperError} renderState.blending.color components must be greater than or equal to zero and less than or equal to one\n * @exception {DeveloperError} Invalid renderState.blending.equationRgb.\n * @exception {DeveloperError} Invalid renderState.blending.equationAlpha.\n * @exception {DeveloperError} Invalid renderState.blending.functionSourceRgb.\n * @exception {DeveloperError} Invalid renderState.blending.functionSourceAlpha.\n * @exception {DeveloperError} Invalid renderState.blending.functionDestinationRgb.\n * @exception {DeveloperError} Invalid renderState.blending.functionDestinationAlpha.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontFunction.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backFunction.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.fail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.zFail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.zPass.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.fail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.zFail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.zPass.\n * @exception {DeveloperError} renderState.viewport.width must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.viewport.width must be less than or equal to the maximum viewport width.\n * @exception {DeveloperError} renderState.viewport.height must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.viewport.height must be less than or equal to the maximum viewport height.\n *\n *\n * @example\n * var defaults = {\n * frontFace : WindingOrder.COUNTER_CLOCKWISE,\n * cull : {\n * enabled : false,\n * face : CullFace.BACK\n * },\n * lineWidth : 1,\n * polygonOffset : {\n * enabled : false,\n * factor : 0,\n * units : 0\n * },\n * scissorTest : {\n * enabled : false,\n * rectangle : {\n * x : 0,\n * y : 0,\n * width : 0,\n * height : 0\n * }\n * },\n * depthRange : {\n * near : 0,\n * far : 1\n * },\n * depthTest : {\n * enabled : false,\n * func : DepthFunction.LESS\n * },\n * colorMask : {\n * red : true,\n * green : true,\n * blue : true,\n * alpha : true\n * },\n * depthMask : true,\n * stencilMask : ~0,\n * blending : {\n * enabled : false,\n * color : {\n * red : 0.0,\n * green : 0.0,\n * blue : 0.0,\n * alpha : 0.0\n * },\n * equationRgb : BlendEquation.ADD,\n * equationAlpha : BlendEquation.ADD,\n * functionSourceRgb : BlendFunction.ONE,\n * functionSourceAlpha : BlendFunction.ONE,\n * functionDestinationRgb : BlendFunction.ZERO,\n * functionDestinationAlpha : BlendFunction.ZERO\n * },\n * stencilTest : {\n * enabled : false,\n * frontFunction : StencilFunction.ALWAYS,\n * backFunction : StencilFunction.ALWAYS,\n * reference : 0,\n * mask : ~0,\n * frontOperation : {\n * fail : StencilOperation.KEEP,\n * zFail : StencilOperation.KEEP,\n * zPass : StencilOperation.KEEP\n * },\n * backOperation : {\n * fail : StencilOperation.KEEP,\n * zFail : StencilOperation.KEEP,\n * zPass : StencilOperation.KEEP\n * }\n * },\n * sampleCoverage : {\n * enabled : false,\n * value : 1.0,\n * invert : false\n * }\n * };\n *\n * var rs = RenderState.fromCache(defaults);\n *\n * @see DrawCommand\n * @see ClearCommand\n *\n * @private\n */\nRenderState.fromCache = function (renderState) {\n var partialKey = JSON.stringify(renderState);\n var cachedState = renderStateCache[partialKey];\n if (defined(cachedState)) {\n ++cachedState.referenceCount;\n return cachedState.state;\n }\n\n // Cache miss. Fully define render state and try again.\n var states = new RenderState(renderState);\n var fullKey = JSON.stringify(states);\n cachedState = renderStateCache[fullKey];\n if (!defined(cachedState)) {\n states.id = nextRenderStateId++;\n //>>includeStart('debug', pragmas.debug);\n states = freezeRenderState(states);\n //>>includeEnd('debug');\n cachedState = {\n referenceCount: 0,\n state: states,\n };\n\n // Cache full render state. Multiple partially defined render states may map to this.\n renderStateCache[fullKey] = cachedState;\n }\n\n ++cachedState.referenceCount;\n\n // Cache partial render state so we can skip validation on a cache hit for a partially defined render state\n renderStateCache[partialKey] = {\n referenceCount: 1,\n state: cachedState.state,\n };\n\n return cachedState.state;\n};\n\n/**\n * @private\n */\nRenderState.removeFromCache = function (renderState) {\n var states = new RenderState(renderState);\n var fullKey = JSON.stringify(states);\n var fullCachedState = renderStateCache[fullKey];\n\n // decrement partial key reference count\n var partialKey = JSON.stringify(renderState);\n var cachedState = renderStateCache[partialKey];\n if (defined(cachedState)) {\n --cachedState.referenceCount;\n\n if (cachedState.referenceCount === 0) {\n // remove partial key\n delete renderStateCache[partialKey];\n\n // decrement full key reference count\n if (defined(fullCachedState)) {\n --fullCachedState.referenceCount;\n }\n }\n }\n\n // remove full key if reference count is zero\n if (defined(fullCachedState) && fullCachedState.referenceCount === 0) {\n delete renderStateCache[fullKey];\n }\n};\n\n/**\n * This function is for testing purposes only.\n * @private\n */\nRenderState.getCache = function () {\n return renderStateCache;\n};\n\n/**\n * This function is for testing purposes only.\n * @private\n */\nRenderState.clearCache = function () {\n renderStateCache = {};\n};\n\nfunction enableOrDisable(gl, glEnum, enable) {\n if (enable) {\n gl.enable(glEnum);\n } else {\n gl.disable(glEnum);\n }\n}\n\nfunction applyFrontFace(gl, renderState) {\n gl.frontFace(renderState.frontFace);\n}\n\nfunction applyCull(gl, renderState) {\n var cull = renderState.cull;\n var enabled = cull.enabled;\n\n enableOrDisable(gl, gl.CULL_FACE, enabled);\n\n if (enabled) {\n gl.cullFace(cull.face);\n }\n}\n\nfunction applyLineWidth(gl, renderState) {\n gl.lineWidth(renderState.lineWidth);\n}\n\nfunction applyPolygonOffset(gl, renderState) {\n var polygonOffset = renderState.polygonOffset;\n var enabled = polygonOffset.enabled;\n\n enableOrDisable(gl, gl.POLYGON_OFFSET_FILL, enabled);\n\n if (enabled) {\n gl.polygonOffset(polygonOffset.factor, polygonOffset.units);\n }\n}\n\nfunction applyScissorTest(gl, renderState, passState) {\n var scissorTest = renderState.scissorTest;\n var enabled = defined(passState.scissorTest)\n ? passState.scissorTest.enabled\n : scissorTest.enabled;\n\n enableOrDisable(gl, gl.SCISSOR_TEST, enabled);\n\n if (enabled) {\n var rectangle = defined(passState.scissorTest)\n ? passState.scissorTest.rectangle\n : scissorTest.rectangle;\n gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n }\n}\n\nfunction applyDepthRange(gl, renderState) {\n var depthRange = renderState.depthRange;\n gl.depthRange(depthRange.near, depthRange.far);\n}\n\nfunction applyDepthTest(gl, renderState) {\n var depthTest = renderState.depthTest;\n var enabled = depthTest.enabled;\n\n enableOrDisable(gl, gl.DEPTH_TEST, enabled);\n\n if (enabled) {\n gl.depthFunc(depthTest.func);\n }\n}\n\nfunction applyColorMask(gl, renderState) {\n var colorMask = renderState.colorMask;\n gl.colorMask(colorMask.red, colorMask.green, colorMask.blue, colorMask.alpha);\n}\n\nfunction applyDepthMask(gl, renderState) {\n gl.depthMask(renderState.depthMask);\n}\n\nfunction applyStencilMask(gl, renderState) {\n gl.stencilMask(renderState.stencilMask);\n}\n\nfunction applyBlendingColor(gl, color) {\n gl.blendColor(color.red, color.green, color.blue, color.alpha);\n}\n\nfunction applyBlending(gl, renderState, passState) {\n var blending = renderState.blending;\n var enabled = defined(passState.blendingEnabled)\n ? passState.blendingEnabled\n : blending.enabled;\n\n enableOrDisable(gl, gl.BLEND, enabled);\n\n if (enabled) {\n applyBlendingColor(gl, blending.color);\n gl.blendEquationSeparate(blending.equationRgb, blending.equationAlpha);\n gl.blendFuncSeparate(\n blending.functionSourceRgb,\n blending.functionDestinationRgb,\n blending.functionSourceAlpha,\n blending.functionDestinationAlpha\n );\n }\n}\n\nfunction applyStencilTest(gl, renderState) {\n var stencilTest = renderState.stencilTest;\n var enabled = stencilTest.enabled;\n\n enableOrDisable(gl, gl.STENCIL_TEST, enabled);\n\n if (enabled) {\n var frontFunction = stencilTest.frontFunction;\n var backFunction = stencilTest.backFunction;\n var reference = stencilTest.reference;\n var mask = stencilTest.mask;\n\n // Section 6.8 of the WebGL spec requires the reference and masks to be the same for\n // front- and back-face tests. This call prevents invalid operation errors when calling\n // stencilFuncSeparate on Firefox. Perhaps they should delay validation to avoid requiring this.\n gl.stencilFunc(frontFunction, reference, mask);\n gl.stencilFuncSeparate(gl.BACK, backFunction, reference, mask);\n gl.stencilFuncSeparate(gl.FRONT, frontFunction, reference, mask);\n\n var frontOperation = stencilTest.frontOperation;\n var frontOperationFail = frontOperation.fail;\n var frontOperationZFail = frontOperation.zFail;\n var frontOperationZPass = frontOperation.zPass;\n\n gl.stencilOpSeparate(\n gl.FRONT,\n frontOperationFail,\n frontOperationZFail,\n frontOperationZPass\n );\n\n var backOperation = stencilTest.backOperation;\n var backOperationFail = backOperation.fail;\n var backOperationZFail = backOperation.zFail;\n var backOperationZPass = backOperation.zPass;\n\n gl.stencilOpSeparate(\n gl.BACK,\n backOperationFail,\n backOperationZFail,\n backOperationZPass\n );\n }\n}\n\nfunction applySampleCoverage(gl, renderState) {\n var sampleCoverage = renderState.sampleCoverage;\n var enabled = sampleCoverage.enabled;\n\n enableOrDisable(gl, gl.SAMPLE_COVERAGE, enabled);\n\n if (enabled) {\n gl.sampleCoverage(sampleCoverage.value, sampleCoverage.invert);\n }\n}\n\nvar scratchViewport = new BoundingRectangle();\n\nfunction applyViewport(gl, renderState, passState) {\n var viewport = defaultValue(renderState.viewport, passState.viewport);\n if (!defined(viewport)) {\n viewport = scratchViewport;\n viewport.width = passState.context.drawingBufferWidth;\n viewport.height = passState.context.drawingBufferHeight;\n }\n\n passState.context.uniformState.viewport = viewport;\n gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);\n}\n\nRenderState.apply = function (gl, renderState, passState) {\n applyFrontFace(gl, renderState);\n applyCull(gl, renderState);\n applyLineWidth(gl, renderState);\n applyPolygonOffset(gl, renderState);\n applyDepthRange(gl, renderState);\n applyDepthTest(gl, renderState);\n applyColorMask(gl, renderState);\n applyDepthMask(gl, renderState);\n applyStencilMask(gl, renderState);\n applyStencilTest(gl, renderState);\n applySampleCoverage(gl, renderState);\n applyScissorTest(gl, renderState, passState);\n applyBlending(gl, renderState, passState);\n applyViewport(gl, renderState, passState);\n};\n\nfunction createFuncs(previousState, nextState) {\n var funcs = [];\n\n if (previousState.frontFace !== nextState.frontFace) {\n funcs.push(applyFrontFace);\n }\n\n if (\n previousState.cull.enabled !== nextState.cull.enabled ||\n previousState.cull.face !== nextState.cull.face\n ) {\n funcs.push(applyCull);\n }\n\n if (previousState.lineWidth !== nextState.lineWidth) {\n funcs.push(applyLineWidth);\n }\n\n if (\n previousState.polygonOffset.enabled !== nextState.polygonOffset.enabled ||\n previousState.polygonOffset.factor !== nextState.polygonOffset.factor ||\n previousState.polygonOffset.units !== nextState.polygonOffset.units\n ) {\n funcs.push(applyPolygonOffset);\n }\n\n if (\n previousState.depthRange.near !== nextState.depthRange.near ||\n previousState.depthRange.far !== nextState.depthRange.far\n ) {\n funcs.push(applyDepthRange);\n }\n\n if (\n previousState.depthTest.enabled !== nextState.depthTest.enabled ||\n previousState.depthTest.func !== nextState.depthTest.func\n ) {\n funcs.push(applyDepthTest);\n }\n\n if (\n previousState.colorMask.red !== nextState.colorMask.red ||\n previousState.colorMask.green !== nextState.colorMask.green ||\n previousState.colorMask.blue !== nextState.colorMask.blue ||\n previousState.colorMask.alpha !== nextState.colorMask.alpha\n ) {\n funcs.push(applyColorMask);\n }\n\n if (previousState.depthMask !== nextState.depthMask) {\n funcs.push(applyDepthMask);\n }\n\n if (previousState.stencilMask !== nextState.stencilMask) {\n funcs.push(applyStencilMask);\n }\n\n if (\n previousState.stencilTest.enabled !== nextState.stencilTest.enabled ||\n previousState.stencilTest.frontFunction !==\n nextState.stencilTest.frontFunction ||\n previousState.stencilTest.backFunction !==\n nextState.stencilTest.backFunction ||\n previousState.stencilTest.reference !== nextState.stencilTest.reference ||\n previousState.stencilTest.mask !== nextState.stencilTest.mask ||\n previousState.stencilTest.frontOperation.fail !==\n nextState.stencilTest.frontOperation.fail ||\n previousState.stencilTest.frontOperation.zFail !==\n nextState.stencilTest.frontOperation.zFail ||\n previousState.stencilTest.backOperation.fail !==\n nextState.stencilTest.backOperation.fail ||\n previousState.stencilTest.backOperation.zFail !==\n nextState.stencilTest.backOperation.zFail ||\n previousState.stencilTest.backOperation.zPass !==\n nextState.stencilTest.backOperation.zPass\n ) {\n funcs.push(applyStencilTest);\n }\n\n if (\n previousState.sampleCoverage.enabled !== nextState.sampleCoverage.enabled ||\n previousState.sampleCoverage.value !== nextState.sampleCoverage.value ||\n previousState.sampleCoverage.invert !== nextState.sampleCoverage.invert\n ) {\n funcs.push(applySampleCoverage);\n }\n\n return funcs;\n}\n\nRenderState.partialApply = function (\n gl,\n previousRenderState,\n renderState,\n previousPassState,\n passState,\n clear\n) {\n if (previousRenderState !== renderState) {\n // When a new render state is applied, instead of making WebGL calls for all the states or first\n // comparing the states one-by-one with the previous state (basically a linear search), we take\n // advantage of RenderState's immutability, and store a dynamically populated sparse data structure\n // containing functions that make the minimum number of WebGL calls when transitioning from one state\n // to the other. In practice, this works well since state-to-state transitions generally only require a\n // few WebGL calls, especially if commands are stored by state.\n var funcs = renderState._applyFunctions[previousRenderState.id];\n if (!defined(funcs)) {\n funcs = createFuncs(previousRenderState, renderState);\n renderState._applyFunctions[previousRenderState.id] = funcs;\n }\n\n var len = funcs.length;\n for (var i = 0; i < len; ++i) {\n funcs[i](gl, renderState);\n }\n }\n\n var previousScissorTest = defined(previousPassState.scissorTest)\n ? previousPassState.scissorTest\n : previousRenderState.scissorTest;\n var scissorTest = defined(passState.scissorTest)\n ? passState.scissorTest\n : renderState.scissorTest;\n\n // Our scissor rectangle can get out of sync with the GL scissor rectangle on clears.\n // Seems to be a problem only on ANGLE. See https://github.com/CesiumGS/cesium/issues/2994\n if (previousScissorTest !== scissorTest || clear) {\n applyScissorTest(gl, renderState, passState);\n }\n\n var previousBlendingEnabled = defined(previousPassState.blendingEnabled)\n ? previousPassState.blendingEnabled\n : previousRenderState.blending.enabled;\n var blendingEnabled = defined(passState.blendingEnabled)\n ? passState.blendingEnabled\n : renderState.blending.enabled;\n if (\n previousBlendingEnabled !== blendingEnabled ||\n (blendingEnabled && previousRenderState.blending !== renderState.blending)\n ) {\n applyBlending(gl, renderState, passState);\n }\n\n if (\n previousRenderState !== renderState ||\n previousPassState !== passState ||\n previousPassState.context !== passState.context\n ) {\n applyViewport(gl, renderState, passState);\n }\n};\n\nRenderState.getState = function (renderState) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(renderState)) {\n throw new DeveloperError(\"renderState is required.\");\n }\n //>>includeEnd('debug');\n\n return {\n frontFace: renderState.frontFace,\n cull: {\n enabled: renderState.cull.enabled,\n face: renderState.cull.face,\n },\n lineWidth: renderState.lineWidth,\n polygonOffset: {\n enabled: renderState.polygonOffset.enabled,\n factor: renderState.polygonOffset.factor,\n units: renderState.polygonOffset.units,\n },\n scissorTest: {\n enabled: renderState.scissorTest.enabled,\n rectangle: BoundingRectangle.clone(renderState.scissorTest.rectangle),\n },\n depthRange: {\n near: renderState.depthRange.near,\n far: renderState.depthRange.far,\n },\n depthTest: {\n enabled: renderState.depthTest.enabled,\n func: renderState.depthTest.func,\n },\n colorMask: {\n red: renderState.colorMask.red,\n green: renderState.colorMask.green,\n blue: renderState.colorMask.blue,\n alpha: renderState.colorMask.alpha,\n },\n depthMask: renderState.depthMask,\n stencilMask: renderState.stencilMask,\n blending: {\n enabled: renderState.blending.enabled,\n color: Color.clone(renderState.blending.color),\n equationRgb: renderState.blending.equationRgb,\n equationAlpha: renderState.blending.equationAlpha,\n functionSourceRgb: renderState.blending.functionSourceRgb,\n functionSourceAlpha: renderState.blending.functionSourceAlpha,\n functionDestinationRgb: renderState.blending.functionDestinationRgb,\n functionDestinationAlpha: renderState.blending.functionDestinationAlpha,\n },\n stencilTest: {\n enabled: renderState.stencilTest.enabled,\n frontFunction: renderState.stencilTest.frontFunction,\n backFunction: renderState.stencilTest.backFunction,\n reference: renderState.stencilTest.reference,\n mask: renderState.stencilTest.mask,\n frontOperation: {\n fail: renderState.stencilTest.frontOperation.fail,\n zFail: renderState.stencilTest.frontOperation.zFail,\n zPass: renderState.stencilTest.frontOperation.zPass,\n },\n backOperation: {\n fail: renderState.stencilTest.backOperation.fail,\n zFail: renderState.stencilTest.backOperation.zFail,\n zPass: renderState.stencilTest.backOperation.zPass,\n },\n },\n sampleCoverage: {\n enabled: renderState.sampleCoverage.enabled,\n value: renderState.sampleCoverage.value,\n invert: renderState.sampleCoverage.invert,\n },\n viewport: defined(renderState.viewport)\n ? BoundingRectangle.clone(renderState.viewport)\n : undefined,\n };\n};\nexport default RenderState;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\n\nvar viewerPositionWCScratch = new Cartesian3();\n\nfunction AutomaticUniform(options) {\n this._size = options.size;\n this._datatype = options.datatype;\n this.getValue = options.getValue;\n}\n\nvar datatypeToGlsl = {};\ndatatypeToGlsl[WebGLConstants.FLOAT] = \"float\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC2] = \"vec2\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC3] = \"vec3\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC4] = \"vec4\";\ndatatypeToGlsl[WebGLConstants.INT] = \"int\";\ndatatypeToGlsl[WebGLConstants.INT_VEC2] = \"ivec2\";\ndatatypeToGlsl[WebGLConstants.INT_VEC3] = \"ivec3\";\ndatatypeToGlsl[WebGLConstants.INT_VEC4] = \"ivec4\";\ndatatypeToGlsl[WebGLConstants.BOOL] = \"bool\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC2] = \"bvec2\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC3] = \"bvec3\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC4] = \"bvec4\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT2] = \"mat2\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT3] = \"mat3\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT4] = \"mat4\";\ndatatypeToGlsl[WebGLConstants.SAMPLER_2D] = \"sampler2D\";\ndatatypeToGlsl[WebGLConstants.SAMPLER_CUBE] = \"samplerCube\";\n\nAutomaticUniform.prototype.getDeclaration = function (name) {\n var declaration = \"uniform \" + datatypeToGlsl[this._datatype] + \" \" + name;\n\n var size = this._size;\n if (size === 1) {\n declaration += \";\";\n } else {\n declaration += \"[\" + size.toString() + \"];\";\n }\n\n return declaration;\n};\n\n/**\n * @private\n */\nvar AutomaticUniforms = {\n /**\n * An automatic GLSL uniform containing the viewport's <code>x</code>, <code>y</code>, <code>width</code>,\n * and <code>height</code> properties in an <code>vec4</code>'s <code>x</code>, <code>y</code>, <code>z</code>,\n * and <code>w</code> components, respectively.\n *\n * @example\n * // GLSL declaration\n * uniform vec4 czm_viewport;\n *\n * // Scale the window coordinate components to [0, 1] by dividing\n * // by the viewport's width and height.\n * vec2 v = gl_FragCoord.xy / czm_viewport.zw;\n *\n * @see Context#getViewport\n */\n czm_viewport: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC4,\n getValue: function (uniformState) {\n return uniformState.viewportCartesian4;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 orthographic projection matrix that\n * transforms window coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n * <br /><br />\n * This transform is useful when a vertex shader inputs or manipulates window coordinates\n * as done by {@link BillboardCollection}.\n * <br /><br />\n * Do not confuse {@link czm_viewportTransformation} with <code>czm_viewportOrthographic</code>.\n * The former transforms from normalized device coordinates to window coordinates; the later transforms\n * from window coordinates to clip coordinates, and is often used to assign to <code>gl_Position</code>.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_viewportOrthographic;\n *\n * // Example\n * gl_Position = czm_viewportOrthographic * vec4(windowPosition, 0.0, 1.0);\n *\n * @see UniformState#viewportOrthographic\n * @see czm_viewport\n * @see czm_viewportTransformation\n * @see BillboardCollection\n */\n czm_viewportOrthographic: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.viewportOrthographic;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 transformation matrix that\n * transforms normalized device coordinates to window coordinates. The context's\n * full viewport is used, and the depth range is assumed to be <code>near = 0</code>\n * and <code>far = 1</code>.\n * <br /><br />\n * This transform is useful when there is a need to manipulate window coordinates\n * in a vertex shader as done by {@link BillboardCollection}. In many cases,\n * this matrix will not be used directly; instead, {@link czm_modelToWindowCoordinates}\n * will be used to transform directly from model to window coordinates.\n * <br /><br />\n * Do not confuse <code>czm_viewportTransformation</code> with {@link czm_viewportOrthographic}.\n * The former transforms from normalized device coordinates to window coordinates; the later transforms\n * from window coordinates to clip coordinates, and is often used to assign to <code>gl_Position</code>.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_viewportTransformation;\n *\n * // Use czm_viewportTransformation as part of the\n * // transform from model to window coordinates.\n * vec4 q = czm_modelViewProjection * positionMC; // model to clip coordinates\n * q.xyz /= q.w; // clip to normalized device coordinates (ndc)\n * q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // ndc to window coordinates\n *\n * @see UniformState#viewportTransformation\n * @see czm_viewport\n * @see czm_viewportOrthographic\n * @see czm_modelToWindowCoordinates\n * @see BillboardCollection\n */\n czm_viewportTransformation: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.viewportTransformation;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the depth of the scene\n * after the globe pass and then updated after the 3D Tiles pass.\n * The depth is packed into an RGBA texture.\n *\n * @example\n * // GLSL declaration\n * uniform sampler2D czm_globeDepthTexture;\n *\n * // Get the depth at the current fragment\n * vec2 coords = gl_FragCoord.xy / czm_viewport.zw;\n * float depth = czm_unpackDepth(texture2D(czm_globeDepthTexture, coords));\n */\n czm_globeDepthTexture: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.SAMPLER_2D,\n getValue: function (uniformState) {\n return uniformState.globeDepthTexture;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model transformation matrix that\n * transforms model coordinates to world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_model;\n *\n * // Example\n * vec4 worldPosition = czm_model * modelPosition;\n *\n * @see UniformState#model\n * @see czm_inverseModel\n * @see czm_modelView\n * @see czm_modelViewProjection\n */\n czm_model: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.model;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model transformation matrix that\n * transforms world coordinates to model coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseModel;\n *\n * // Example\n * vec4 modelPosition = czm_inverseModel * worldPosition;\n *\n * @see UniformState#inverseModel\n * @see czm_model\n * @see czm_inverseModelView\n */\n czm_inverseModel: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseModel;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 view transformation matrix that\n * transforms world coordinates to eye coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_view;\n *\n * // Example\n * vec4 eyePosition = czm_view * worldPosition;\n *\n * @see UniformState#view\n * @see czm_viewRotation\n * @see czm_modelView\n * @see czm_viewProjection\n * @see czm_modelViewProjection\n * @see czm_inverseView\n */\n czm_view: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.view;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 view transformation matrix that\n * transforms 3D world coordinates to eye coordinates. In 3D mode, this is identical to\n * {@link czm_view}, but in 2D and Columbus View it represents the view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_view3D;\n *\n * // Example\n * vec4 eyePosition3D = czm_view3D * worldPosition3D;\n *\n * @see UniformState#view3D\n * @see czm_view\n */\n czm_view3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.view3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 view rotation matrix that\n * transforms vectors in world coordinates to eye coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_viewRotation;\n *\n * // Example\n * vec3 eyeVector = czm_viewRotation * worldVector;\n *\n * @see UniformState#viewRotation\n * @see czm_view\n * @see czm_inverseView\n * @see czm_inverseViewRotation\n */\n czm_viewRotation: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.viewRotation;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 view rotation matrix that\n * transforms vectors in 3D world coordinates to eye coordinates. In 3D mode, this is identical to\n * {@link czm_viewRotation}, but in 2D and Columbus View it represents the view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_viewRotation3D;\n *\n * // Example\n * vec3 eyeVector = czm_viewRotation3D * worldVector;\n *\n * @see UniformState#viewRotation3D\n * @see czm_viewRotation\n */\n czm_viewRotation3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.viewRotation3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 transformation matrix that\n * transforms from eye coordinates to world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseView;\n *\n * // Example\n * vec4 worldPosition = czm_inverseView * eyePosition;\n *\n * @see UniformState#inverseView\n * @see czm_view\n * @see czm_inverseNormal\n */\n czm_inverseView: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseView;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 transformation matrix that\n * transforms from 3D eye coordinates to world coordinates. In 3D mode, this is identical to\n * {@link czm_inverseView}, but in 2D and Columbus View it represents the inverse view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseView3D;\n *\n * // Example\n * vec4 worldPosition = czm_inverseView3D * eyePosition;\n *\n * @see UniformState#inverseView3D\n * @see czm_inverseView\n */\n czm_inverseView3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseView3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 rotation matrix that\n * transforms vectors from eye coordinates to world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_inverseViewRotation;\n *\n * // Example\n * vec4 worldVector = czm_inverseViewRotation * eyeVector;\n *\n * @see UniformState#inverseView\n * @see czm_view\n * @see czm_viewRotation\n * @see czm_inverseViewRotation\n */\n czm_inverseViewRotation: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.inverseViewRotation;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 rotation matrix that\n * transforms vectors from 3D eye coordinates to world coordinates. In 3D mode, this is identical to\n * {@link czm_inverseViewRotation}, but in 2D and Columbus View it represents the inverse view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_inverseViewRotation3D;\n *\n * // Example\n * vec4 worldVector = czm_inverseViewRotation3D * eyeVector;\n *\n * @see UniformState#inverseView3D\n * @see czm_inverseViewRotation\n */\n czm_inverseViewRotation3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.inverseViewRotation3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 projection transformation matrix that\n * transforms eye coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_projection;\n *\n * // Example\n * gl_Position = czm_projection * eyePosition;\n *\n * @see UniformState#projection\n * @see czm_viewProjection\n * @see czm_modelViewProjection\n * @see czm_infiniteProjection\n */\n czm_projection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.projection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 inverse projection transformation matrix that\n * transforms from clip coordinates to eye coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseProjection;\n *\n * // Example\n * vec4 eyePosition = czm_inverseProjection * clipPosition;\n *\n * @see UniformState#inverseProjection\n * @see czm_projection\n */\n czm_inverseProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 projection transformation matrix with the far plane at infinity,\n * that transforms eye coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output. An infinite far plane is used\n * in algorithms like shadow volumes and GPU ray casting with proxy geometry to ensure that triangles\n * are not clipped by the far plane.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_infiniteProjection;\n *\n * // Example\n * gl_Position = czm_infiniteProjection * eyePosition;\n *\n * @see UniformState#infiniteProjection\n * @see czm_projection\n * @see czm_modelViewInfiniteProjection\n */\n czm_infiniteProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.infiniteProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n * transforms model coordinates to eye coordinates.\n * <br /><br />\n * Positions should be transformed to eye coordinates using <code>czm_modelView</code> and\n * normals should be transformed using {@link czm_normal}.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelView;\n *\n * // Example\n * vec4 eyePosition = czm_modelView * modelPosition;\n *\n * // The above is equivalent to, but more efficient than:\n * vec4 eyePosition = czm_view * czm_model * modelPosition;\n *\n * @see UniformState#modelView\n * @see czm_model\n * @see czm_view\n * @see czm_modelViewProjection\n * @see czm_normal\n */\n czm_modelView: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelView;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n * transforms 3D model coordinates to eye coordinates. In 3D mode, this is identical to\n * {@link czm_modelView}, but in 2D and Columbus View it represents the model-view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n * <br /><br />\n * Positions should be transformed to eye coordinates using <code>czm_modelView3D</code> and\n * normals should be transformed using {@link czm_normal3D}.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelView3D;\n *\n * // Example\n * vec4 eyePosition = czm_modelView3D * modelPosition;\n *\n * // The above is equivalent to, but more efficient than:\n * vec4 eyePosition = czm_view3D * czm_model * modelPosition;\n *\n * @see UniformState#modelView3D\n * @see czm_modelView\n */\n czm_modelView3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelView3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n * transforms model coordinates, relative to the eye, to eye coordinates. This is used\n * in conjunction with {@link czm_translateRelativeToEye}.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelViewRelativeToEye;\n *\n * // Example\n * attribute vec3 positionHigh;\n * attribute vec3 positionLow;\n *\n * void main()\n * {\n * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n * gl_Position = czm_projection * (czm_modelViewRelativeToEye * p);\n * }\n *\n * @see czm_modelViewProjectionRelativeToEye\n * @see czm_translateRelativeToEye\n * @see EncodedCartesian3\n */\n czm_modelViewRelativeToEye: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelViewRelativeToEye;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 transformation matrix that\n * transforms from eye coordinates to model coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseModelView;\n *\n * // Example\n * vec4 modelPosition = czm_inverseModelView * eyePosition;\n *\n * @see UniformState#inverseModelView\n * @see czm_modelView\n */\n czm_inverseModelView: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseModelView;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 transformation matrix that\n * transforms from eye coordinates to 3D model coordinates. In 3D mode, this is identical to\n * {@link czm_inverseModelView}, but in 2D and Columbus View it represents the inverse model-view matrix\n * as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseModelView3D;\n *\n * // Example\n * vec4 modelPosition = czm_inverseModelView3D * eyePosition;\n *\n * @see UniformState#inverseModelView\n * @see czm_inverseModelView\n * @see czm_modelView3D\n */\n czm_inverseModelView3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseModelView3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 view-projection transformation matrix that\n * transforms world coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_viewProjection;\n *\n * // Example\n * vec4 gl_Position = czm_viewProjection * czm_model * modelPosition;\n *\n * // The above is equivalent to, but more efficient than:\n * gl_Position = czm_projection * czm_view * czm_model * modelPosition;\n *\n * @see UniformState#viewProjection\n * @see czm_view\n * @see czm_projection\n * @see czm_modelViewProjection\n * @see czm_inverseViewProjection\n */\n czm_viewProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.viewProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 view-projection transformation matrix that\n * transforms clip coordinates to world coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseViewProjection;\n *\n * // Example\n * vec4 worldPosition = czm_inverseViewProjection * clipPosition;\n *\n * @see UniformState#inverseViewProjection\n * @see czm_viewProjection\n */\n czm_inverseViewProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseViewProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n * transforms model coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelViewProjection;\n *\n * // Example\n * vec4 gl_Position = czm_modelViewProjection * modelPosition;\n *\n * // The above is equivalent to, but more efficient than:\n * gl_Position = czm_projection * czm_view * czm_model * modelPosition;\n *\n * @see UniformState#modelViewProjection\n * @see czm_model\n * @see czm_view\n * @see czm_projection\n * @see czm_modelView\n * @see czm_viewProjection\n * @see czm_modelViewInfiniteProjection\n * @see czm_inverseModelViewProjection\n */\n czm_modelViewProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelViewProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 inverse model-view-projection transformation matrix that\n * transforms clip coordinates to model coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_inverseModelViewProjection;\n *\n * // Example\n * vec4 modelPosition = czm_inverseModelViewProjection * clipPosition;\n *\n * @see UniformState#modelViewProjection\n * @see czm_modelViewProjection\n */\n czm_inverseModelViewProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.inverseModelViewProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n * transforms model coordinates, relative to the eye, to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output. This is used in\n * conjunction with {@link czm_translateRelativeToEye}.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelViewProjectionRelativeToEye;\n *\n * // Example\n * attribute vec3 positionHigh;\n * attribute vec3 positionLow;\n *\n * void main()\n * {\n * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\n * }\n *\n * @see czm_modelViewRelativeToEye\n * @see czm_translateRelativeToEye\n * @see EncodedCartesian3\n */\n czm_modelViewProjectionRelativeToEye: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelViewProjectionRelativeToEye;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n * transforms model coordinates to clip coordinates. Clip coordinates is the\n * coordinate system for a vertex shader's <code>gl_Position</code> output. The projection matrix places\n * the far plane at infinity. This is useful in algorithms like shadow volumes and GPU ray casting with\n * proxy geometry to ensure that triangles are not clipped by the far plane.\n *\n * @example\n * // GLSL declaration\n * uniform mat4 czm_modelViewInfiniteProjection;\n *\n * // Example\n * vec4 gl_Position = czm_modelViewInfiniteProjection * modelPosition;\n *\n * // The above is equivalent to, but more efficient than:\n * gl_Position = czm_infiniteProjection * czm_view * czm_model * modelPosition;\n *\n * @see UniformState#modelViewInfiniteProjection\n * @see czm_model\n * @see czm_view\n * @see czm_infiniteProjection\n * @see czm_modelViewProjection\n */\n czm_modelViewInfiniteProjection: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT4,\n getValue: function (uniformState) {\n return uniformState.modelViewInfiniteProjection;\n },\n }),\n\n /**\n * An automatic GLSL uniform that indicates if the current camera is orthographic in 3D.\n *\n * @see UniformState#orthographicIn3D\n */\n czm_orthographicIn3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.orthographicIn3D ? 1 : 0;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n * transforms normal vectors in model coordinates to eye coordinates.\n * <br /><br />\n * Positions should be transformed to eye coordinates using {@link czm_modelView} and\n * normals should be transformed using <code>czm_normal</code>.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_normal;\n *\n * // Example\n * vec3 eyeNormal = czm_normal * normal;\n *\n * @see UniformState#normal\n * @see czm_inverseNormal\n * @see czm_modelView\n */\n czm_normal: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.normal;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n * transforms normal vectors in 3D model coordinates to eye coordinates.\n * In 3D mode, this is identical to\n * {@link czm_normal}, but in 2D and Columbus View it represents the normal transformation\n * matrix as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n * <br /><br />\n * Positions should be transformed to eye coordinates using {@link czm_modelView3D} and\n * normals should be transformed using <code>czm_normal3D</code>.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_normal3D;\n *\n * // Example\n * vec3 eyeNormal = czm_normal3D * normal;\n *\n * @see UniformState#normal3D\n * @see czm_normal\n */\n czm_normal3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.normal3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n * transforms normal vectors in eye coordinates to model coordinates. This is\n * the opposite of the transform provided by {@link czm_normal}.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_inverseNormal;\n *\n * // Example\n * vec3 normalMC = czm_inverseNormal * normalEC;\n *\n * @see UniformState#inverseNormal\n * @see czm_normal\n * @see czm_modelView\n * @see czm_inverseView\n */\n czm_inverseNormal: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.inverseNormal;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n * transforms normal vectors in eye coordinates to 3D model coordinates. This is\n * the opposite of the transform provided by {@link czm_normal}.\n * In 3D mode, this is identical to\n * {@link czm_inverseNormal}, but in 2D and Columbus View it represents the inverse normal transformation\n * matrix as if the camera were at an equivalent location in 3D mode. This is useful for lighting\n * 2D and Columbus View in the same way that 3D is lit.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_inverseNormal3D;\n *\n * // Example\n * vec3 normalMC = czm_inverseNormal3D * normalEC;\n *\n * @see UniformState#inverseNormal3D\n * @see czm_inverseNormal\n */\n czm_inverseNormal3D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.inverseNormal3D;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the height in meters of the\n * eye (camera) above or below the ellipsoid.\n *\n * @see UniformState#eyeHeight\n */\n czm_eyeHeight: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.eyeHeight;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing height (<code>x</code>) and height squared (<code>y</code>)\n * in meters of the eye (camera) above the 2D world plane. This uniform is only valid\n * when the {@link SceneMode} is <code>SCENE2D</code>.\n *\n * @see UniformState#eyeHeight2D\n */\n czm_eyeHeight2D: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC2,\n getValue: function (uniformState) {\n return uniformState.eyeHeight2D;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the near distance (<code>x</code>) and the far distance (<code>y</code>)\n * of the frustum defined by the camera. This is the largest possible frustum, not an individual\n * frustum used for multi-frustum rendering.\n *\n * @example\n * // GLSL declaration\n * uniform vec2 czm_entireFrustum;\n *\n * // Example\n * float frustumLength = czm_entireFrustum.y - czm_entireFrustum.x;\n *\n * @see UniformState#entireFrustum\n * @see czm_currentFrustum\n */\n czm_entireFrustum: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC2,\n getValue: function (uniformState) {\n return uniformState.entireFrustum;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the near distance (<code>x</code>) and the far distance (<code>y</code>)\n * of the frustum defined by the camera. This is the individual\n * frustum used for multi-frustum rendering.\n *\n * @example\n * // GLSL declaration\n * uniform vec2 czm_currentFrustum;\n *\n * // Example\n * float frustumLength = czm_currentFrustum.y - czm_currentFrustum.x;\n *\n * @see UniformState#currentFrustum\n * @see czm_entireFrustum\n */\n czm_currentFrustum: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC2,\n getValue: function (uniformState) {\n return uniformState.currentFrustum;\n },\n }),\n\n /**\n * The distances to the frustum planes. The top, bottom, left and right distances are\n * the x, y, z, and w components, respectively.\n */\n czm_frustumPlanes: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC4,\n getValue: function (uniformState) {\n return uniformState.frustumPlanes;\n },\n }),\n\n /**\n * Gets the far plane's distance from the near plane, plus 1.0.\n */\n czm_farDepthFromNearPlusOne: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.farDepthFromNearPlusOne;\n },\n }),\n\n /**\n * Gets the log2 of {@link AutomaticUniforms#czm_farDepthFromNearPlusOne}.\n */\n czm_log2FarDepthFromNearPlusOne: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.log2FarDepthFromNearPlusOne;\n },\n }),\n\n /**\n * Gets 1.0 divided by {@link AutomaticUniforms#czm_log2FarDepthFromNearPlusOne}.\n */\n czm_oneOverLog2FarDepthFromNearPlusOne: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.oneOverLog2FarDepthFromNearPlusOne;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the sun position in world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_sunPositionWC;\n *\n * @see UniformState#sunPositionWC\n * @see czm_sunPositionColumbusView\n * @see czm_sunDirectionWC\n */\n czm_sunPositionWC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.sunPositionWC;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the sun position in Columbus view world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_sunPositionColumbusView;\n *\n * @see UniformState#sunPositionColumbusView\n * @see czm_sunPositionWC\n */\n czm_sunPositionColumbusView: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.sunPositionColumbusView;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the normalized direction to the sun in eye coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_sunDirectionEC;\n *\n * // Example\n * float diffuse = max(dot(czm_sunDirectionEC, normalEC), 0.0);\n *\n * @see UniformState#sunDirectionEC\n * @see czm_moonDirectionEC\n * @see czm_sunDirectionWC\n */\n czm_sunDirectionEC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.sunDirectionEC;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the normalized direction to the sun in world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_sunDirectionWC;\n *\n * // Example\n * float diffuse = max(dot(czm_sunDirectionWC, normalWC), 0.0);\n *\n * @see UniformState#sunDirectionWC\n * @see czm_sunPositionWC\n * @see czm_sunDirectionEC\n */\n czm_sunDirectionWC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.sunDirectionWC;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the normalized direction to the moon in eye coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_moonDirectionEC;\n *\n * // Example\n * float diffuse = max(dot(czm_moonDirectionEC, normalEC), 0.0);\n *\n * @see UniformState#moonDirectionEC\n * @see czm_sunDirectionEC\n */\n czm_moonDirectionEC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.moonDirectionEC;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the normalized direction to the scene's light source in eye coordinates.\n * This is commonly used for directional lighting computations.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_lightDirectionEC;\n *\n * // Example\n * float diffuse = max(dot(czm_lightDirectionEC, normalEC), 0.0);\n *\n * @see UniformState#lightDirectionEC\n * @see czm_lightDirectionWC\n */\n czm_lightDirectionEC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.lightDirectionEC;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the normalized direction to the scene's light source in world coordinates.\n * This is commonly used for directional lighting computations.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_lightDirectionWC;\n *\n * // Example\n * float diffuse = max(dot(czm_lightDirectionWC, normalWC), 0.0);\n *\n * @see UniformState#lightDirectionWC\n * @see czm_lightDirectionEC\n */\n czm_lightDirectionWC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.lightDirectionWC;\n },\n }),\n\n /**\n * An automatic GLSL uniform that represents the color of light emitted by the scene's light source. This\n * is equivalent to the light color multiplied by the light intensity limited to a maximum luminance of 1.0\n * suitable for non-HDR lighting.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_lightColor;\n *\n * // Example\n * vec3 diffuseColor = czm_lightColor * max(dot(czm_lightDirectionWC, normalWC), 0.0);\n *\n * @see UniformState#lightColor\n * @see czm_lightColorHdr\n */\n czm_lightColor: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.lightColor;\n },\n }),\n\n /**\n * An automatic GLSL uniform that represents the high dynamic range color of light emitted by the scene's light\n * source. This is equivalent to the light color multiplied by the light intensity suitable for HDR lighting.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_lightColorHdr;\n *\n * // Example\n * vec3 diffuseColor = czm_lightColorHdr * max(dot(czm_lightDirectionWC, normalWC), 0.0);\n *\n * @see UniformState#lightColorHdr\n * @see czm_lightColor\n */\n czm_lightColorHdr: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.lightColorHdr;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the high bits of the camera position in model\n * coordinates. This is used for GPU RTE to eliminate jittering artifacts when rendering\n * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_encodedCameraPositionMCHigh;\n *\n * @see czm_encodedCameraPositionMCLow\n * @see czm_modelViewRelativeToEye\n * @see czm_modelViewProjectionRelativeToEye\n */\n czm_encodedCameraPositionMCHigh: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.encodedCameraPositionMCHigh;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the low bits of the camera position in model\n * coordinates. This is used for GPU RTE to eliminate jittering artifacts when rendering\n * as described in {@linkhttp://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_encodedCameraPositionMCLow;\n *\n * @see czm_encodedCameraPositionMCHigh\n * @see czm_modelViewRelativeToEye\n * @see czm_modelViewProjectionRelativeToEye\n */\n czm_encodedCameraPositionMCLow: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.encodedCameraPositionMCLow;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the position of the viewer (camera) in world coordinates.\n *\n * @example\n * // GLSL declaration\n * uniform vec3 czm_viewerPositionWC;\n */\n czm_viewerPositionWC: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return Matrix4.getTranslation(\n uniformState.inverseView,\n viewerPositionWCScratch\n );\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the frame number. This uniform is automatically incremented\n * every frame.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_frameNumber;\n */\n czm_frameNumber: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.frameState.frameNumber;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the current morph transition time between\n * 2D/Columbus View and 3D, with 0.0 being 2D or Columbus View and 1.0 being 3D.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_morphTime;\n *\n * // Example\n * vec4 p = czm_columbusViewMorph(position2D, position3D, czm_morphTime);\n */\n czm_morphTime: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.frameState.morphTime;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the current {@link SceneMode}, expressed\n * as a float.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_sceneMode;\n *\n * // Example\n * if (czm_sceneMode == czm_sceneMode2D)\n * {\n * eyeHeightSq = czm_eyeHeight2D.y;\n * }\n *\n * @see czm_sceneMode2D\n * @see czm_sceneModeColumbusView\n * @see czm_sceneMode3D\n * @see czm_sceneModeMorphing\n */\n czm_sceneMode: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.frameState.mode;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the current rendering pass.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_pass;\n *\n * // Example\n * if ((czm_pass == czm_passTranslucent) && isOpaque())\n * {\n * gl_Position *= 0.0; // Cull opaque geometry in the translucent pass\n * }\n */\n czm_pass: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.pass;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the current scene background color.\n *\n * @example\n * // GLSL declaration\n * uniform vec4 czm_backgroundColor;\n *\n * // Example: If the given color's RGB matches the background color, invert it.\n * vec4 adjustColorForContrast(vec4 color)\n * {\n * if (czm_backgroundColor.rgb == color.rgb)\n * {\n * color.rgb = vec3(1.0) - color.rgb;\n * }\n *\n * return color;\n * }\n */\n czm_backgroundColor: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC4,\n getValue: function (uniformState) {\n return uniformState.backgroundColor;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the BRDF look up texture used for image-based lighting computations.\n *\n * @example\n * // GLSL declaration\n * uniform sampler2D czm_brdfLut;\n *\n * // Example: For a given roughness and NdotV value, find the material's BRDF information in the red and green channels\n * float roughness = 0.5;\n * float NdotV = dot(normal, view);\n * vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, 1.0 - roughness)).rg;\n */\n czm_brdfLut: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.SAMPLER_2D,\n getValue: function (uniformState) {\n return uniformState.brdfLut;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the environment map used within the scene.\n *\n * @example\n * // GLSL declaration\n * uniform samplerCube czm_environmentMap;\n *\n * // Example: Create a perfect reflection of the environment map on a model\n * float reflected = reflect(view, normal);\n * vec4 reflectedColor = textureCube(czm_environmentMap, reflected);\n */\n czm_environmentMap: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.SAMPLER_CUBE,\n getValue: function (uniformState) {\n return uniformState.environmentMap;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the specular environment map atlas used within the scene.\n *\n * @example\n * // GLSL declaration\n * uniform sampler2D czm_specularEnvironmentMaps;\n */\n czm_specularEnvironmentMaps: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.SAMPLER_2D,\n getValue: function (uniformState) {\n return uniformState.specularEnvironmentMaps;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the size of the specular environment map atlas used within the scene.\n *\n * @example\n * // GLSL declaration\n * uniform vec2 czm_specularEnvironmentMapSize;\n */\n czm_specularEnvironmentMapSize: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC2,\n getValue: function (uniformState) {\n return uniformState.specularEnvironmentMapsDimensions;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the maximum level-of-detail of the specular environment map atlas used within the scene.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_specularEnvironmentMapsMaximumLOD;\n */\n czm_specularEnvironmentMapsMaximumLOD: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.specularEnvironmentMapsMaximumLOD;\n },\n }),\n\n /**\n * An automatic GLSL uniform containing the spherical harmonic coefficients used within the scene.\n *\n * @example\n * // GLSL declaration\n * uniform vec3[9] czm_sphericalHarmonicCoefficients;\n */\n czm_sphericalHarmonicCoefficients: new AutomaticUniform({\n size: 9,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.sphericalHarmonicCoefficients;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing a 3x3 rotation matrix that transforms\n * from True Equator Mean Equinox (TEME) axes to the pseudo-fixed axes at the current scene time.\n *\n * @example\n * // GLSL declaration\n * uniform mat3 czm_temeToPseudoFixed;\n *\n * // Example\n * vec3 pseudoFixed = czm_temeToPseudoFixed * teme;\n *\n * @see UniformState#temeToPseudoFixedMatrix\n * @see Transforms.computeTemeToPseudoFixedMatrix\n */\n czm_temeToPseudoFixed: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_MAT3,\n getValue: function (uniformState) {\n return uniformState.temeToPseudoFixedMatrix;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the ratio of canvas coordinate space to canvas pixel space.\n *\n * @example\n * uniform float czm_pixelRatio;\n */\n czm_pixelRatio: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.pixelRatio;\n },\n }),\n\n /**\n * An automatic GLSL uniform scalar used to mix a color with the fog color based on the distance to the camera.\n *\n * @see czm_fog\n */\n czm_fogDensity: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.fogDensity;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the splitter position to use when rendering imagery layers with a splitter.\n * This will be in pixel coordinates relative to the canvas.\n *\n * @example\n * // GLSL declaration\n * uniform float czm_imagerySplitPosition;\n */\n czm_imagerySplitPosition: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.imagerySplitPosition;\n },\n }),\n\n /**\n * An automatic GLSL uniform scalar representing the geometric tolerance per meter\n */\n czm_geometricToleranceOverMeter: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.geometricToleranceOverMeter;\n },\n }),\n\n /**\n * An automatic GLSL uniform representing the distance from the camera at which to disable the depth test of billboards, labels and points\n * to, for example, prevent clipping against terrain. When set to zero, the depth test should always be applied. When less than zero,\n * the depth test should never be applied.\n */\n czm_minimumDisableDepthTestDistance: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.minimumDisableDepthTestDistance;\n },\n }),\n\n /**\n * An automatic GLSL uniform that will be the highlight color of unclassified 3D Tiles.\n */\n czm_invertClassificationColor: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC4,\n getValue: function (uniformState) {\n return uniformState.invertClassificationColor;\n },\n }),\n\n /**\n * An automatic GLSL uniform that is used for gamma correction.\n */\n czm_gamma: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT,\n getValue: function (uniformState) {\n return uniformState.gamma;\n },\n }),\n\n /**\n * An automatic GLSL uniform that stores the ellipsoid radii.\n */\n czm_ellipsoidRadii: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.ellipsoid.radii;\n },\n }),\n\n /**\n * An automatic GLSL uniform that stores the ellipsoid inverse radii.\n */\n czm_ellipsoidInverseRadii: new AutomaticUniform({\n size: 1,\n datatype: WebGLConstants.FLOAT_VEC3,\n getValue: function (uniformState) {\n return uniformState.ellipsoid.oneOverRadii;\n },\n }),\n};\nexport default AutomaticUniforms;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction createUniform(gl, activeUniform, uniformName, location) {\n switch (activeUniform.type) {\n case gl.FLOAT:\n return new UniformFloat(gl, activeUniform, uniformName, location);\n case gl.FLOAT_VEC2:\n return new UniformFloatVec2(gl, activeUniform, uniformName, location);\n case gl.FLOAT_VEC3:\n return new UniformFloatVec3(gl, activeUniform, uniformName, location);\n case gl.FLOAT_VEC4:\n return new UniformFloatVec4(gl, activeUniform, uniformName, location);\n case gl.SAMPLER_2D:\n case gl.SAMPLER_CUBE:\n return new UniformSampler(gl, activeUniform, uniformName, location);\n case gl.INT:\n case gl.BOOL:\n return new UniformInt(gl, activeUniform, uniformName, location);\n case gl.INT_VEC2:\n case gl.BOOL_VEC2:\n return new UniformIntVec2(gl, activeUniform, uniformName, location);\n case gl.INT_VEC3:\n case gl.BOOL_VEC3:\n return new UniformIntVec3(gl, activeUniform, uniformName, location);\n case gl.INT_VEC4:\n case gl.BOOL_VEC4:\n return new UniformIntVec4(gl, activeUniform, uniformName, location);\n case gl.FLOAT_MAT2:\n return new UniformMat2(gl, activeUniform, uniformName, location);\n case gl.FLOAT_MAT3:\n return new UniformMat3(gl, activeUniform, uniformName, location);\n case gl.FLOAT_MAT4:\n return new UniformMat4(gl, activeUniform, uniformName, location);\n default:\n throw new RuntimeError(\n \"Unrecognized uniform type: \" +\n activeUniform.type +\n ' for uniform \"' +\n uniformName +\n '\".'\n );\n }\n}\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloat(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = 0.0;\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformFloat.prototype.set = function () {\n if (this.value !== this._value) {\n this._value = this.value;\n this._gl.uniform1f(this._location, this.value);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec2(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Cartesian2();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformFloatVec2.prototype.set = function () {\n var v = this.value;\n if (!Cartesian2.equals(v, this._value)) {\n Cartesian2.clone(v, this._value);\n this._gl.uniform2f(this._location, v.x, v.y);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec3(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = undefined;\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformFloatVec3.prototype.set = function () {\n var v = this.value;\n\n if (defined(v.red)) {\n if (!Color.equals(v, this._value)) {\n this._value = Color.clone(v, this._value);\n this._gl.uniform3f(this._location, v.red, v.green, v.blue);\n }\n } else if (defined(v.x)) {\n if (!Cartesian3.equals(v, this._value)) {\n this._value = Cartesian3.clone(v, this._value);\n this._gl.uniform3f(this._location, v.x, v.y, v.z);\n }\n } else {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n 'Invalid vec3 value for uniform \"' + this.name + '\".'\n );\n //>>includeEnd('debug');\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec4(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = undefined;\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformFloatVec4.prototype.set = function () {\n var v = this.value;\n\n if (defined(v.red)) {\n if (!Color.equals(v, this._value)) {\n this._value = Color.clone(v, this._value);\n this._gl.uniform4f(this._location, v.red, v.green, v.blue, v.alpha);\n }\n } else if (defined(v.x)) {\n if (!Cartesian4.equals(v, this._value)) {\n this._value = Cartesian4.clone(v, this._value);\n this._gl.uniform4f(this._location, v.x, v.y, v.z, v.w);\n }\n } else {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n 'Invalid vec4 value for uniform \"' + this.name + '\".'\n );\n //>>includeEnd('debug');\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformSampler(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n\n this._gl = gl;\n this._location = location;\n\n this.textureUnitIndex = undefined;\n}\n\nUniformSampler.prototype.set = function () {\n var gl = this._gl;\n gl.activeTexture(gl.TEXTURE0 + this.textureUnitIndex);\n\n var v = this.value;\n gl.bindTexture(v._target, v._texture);\n};\n\nUniformSampler.prototype._setSampler = function (textureUnitIndex) {\n this.textureUnitIndex = textureUnitIndex;\n this._gl.uniform1i(this._location, textureUnitIndex);\n return textureUnitIndex + 1;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformInt(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = 0.0;\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformInt.prototype.set = function () {\n if (this.value !== this._value) {\n this._value = this.value;\n this._gl.uniform1i(this._location, this.value);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec2(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Cartesian2();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformIntVec2.prototype.set = function () {\n var v = this.value;\n if (!Cartesian2.equals(v, this._value)) {\n Cartesian2.clone(v, this._value);\n this._gl.uniform2i(this._location, v.x, v.y);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec3(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Cartesian3();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformIntVec3.prototype.set = function () {\n var v = this.value;\n if (!Cartesian3.equals(v, this._value)) {\n Cartesian3.clone(v, this._value);\n this._gl.uniform3i(this._location, v.x, v.y, v.z);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec4(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Cartesian4();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformIntVec4.prototype.set = function () {\n var v = this.value;\n if (!Cartesian4.equals(v, this._value)) {\n Cartesian4.clone(v, this._value);\n this._gl.uniform4i(this._location, v.x, v.y, v.z, v.w);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nvar scratchUniformArray = new Float32Array(4);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat2(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Matrix2();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformMat2.prototype.set = function () {\n if (!Matrix2.equalsArray(this.value, this._value, 0)) {\n Matrix2.clone(this.value, this._value);\n\n var array = Matrix2.toArray(this.value, scratchUniformArray);\n this._gl.uniformMatrix2fv(this._location, false, array);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nvar scratchMat3Array = new Float32Array(9);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat3(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Matrix3();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformMat3.prototype.set = function () {\n if (!Matrix3.equalsArray(this.value, this._value, 0)) {\n Matrix3.clone(this.value, this._value);\n\n var array = Matrix3.toArray(this.value, scratchMat3Array);\n this._gl.uniformMatrix3fv(this._location, false, array);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nvar scratchMat4Array = new Float32Array(16);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat4(gl, activeUniform, uniformName, location) {\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = undefined;\n this._value = new Matrix4();\n\n this._gl = gl;\n this._location = location;\n}\n\nUniformMat4.prototype.set = function () {\n if (!Matrix4.equalsArray(this.value, this._value, 0)) {\n Matrix4.clone(this.value, this._value);\n\n var array = Matrix4.toArray(this.value, scratchMat4Array);\n this._gl.uniformMatrix4fv(this._location, false, array);\n }\n};\nexport default createUniform;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction createUniformArray(gl, activeUniform, uniformName, locations) {\n switch (activeUniform.type) {\n case gl.FLOAT:\n return new UniformArrayFloat(gl, activeUniform, uniformName, locations);\n case gl.FLOAT_VEC2:\n return new UniformArrayFloatVec2(\n gl,\n activeUniform,\n uniformName,\n locations\n );\n case gl.FLOAT_VEC3:\n return new UniformArrayFloatVec3(\n gl,\n activeUniform,\n uniformName,\n locations\n );\n case gl.FLOAT_VEC4:\n return new UniformArrayFloatVec4(\n gl,\n activeUniform,\n uniformName,\n locations\n );\n case gl.SAMPLER_2D:\n case gl.SAMPLER_CUBE:\n return new UniformArraySampler(gl, activeUniform, uniformName, locations);\n case gl.INT:\n case gl.BOOL:\n return new UniformArrayInt(gl, activeUniform, uniformName, locations);\n case gl.INT_VEC2:\n case gl.BOOL_VEC2:\n return new UniformArrayIntVec2(gl, activeUniform, uniformName, locations);\n case gl.INT_VEC3:\n case gl.BOOL_VEC3:\n return new UniformArrayIntVec3(gl, activeUniform, uniformName, locations);\n case gl.INT_VEC4:\n case gl.BOOL_VEC4:\n return new UniformArrayIntVec4(gl, activeUniform, uniformName, locations);\n case gl.FLOAT_MAT2:\n return new UniformArrayMat2(gl, activeUniform, uniformName, locations);\n case gl.FLOAT_MAT3:\n return new UniformArrayMat3(gl, activeUniform, uniformName, locations);\n case gl.FLOAT_MAT4:\n return new UniformArrayMat4(gl, activeUniform, uniformName, locations);\n default:\n throw new RuntimeError(\n \"Unrecognized uniform type: \" +\n activeUniform.type +\n ' for uniform \"' +\n uniformName +\n '\".'\n );\n }\n}\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloat(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayFloat.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (v !== arraybuffer[i]) {\n arraybuffer[i] = v;\n changed = true;\n }\n }\n\n if (changed) {\n this._gl.uniform1fv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec2(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 2);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayFloatVec2.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Cartesian2.equalsArray(v, arraybuffer, j)) {\n Cartesian2.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 2;\n }\n\n if (changed) {\n this._gl.uniform2fv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec3(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 3);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayFloatVec3.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (defined(v.red)) {\n if (\n v.red !== arraybuffer[j] ||\n v.green !== arraybuffer[j + 1] ||\n v.blue !== arraybuffer[j + 2]\n ) {\n arraybuffer[j] = v.red;\n arraybuffer[j + 1] = v.green;\n arraybuffer[j + 2] = v.blue;\n changed = true;\n }\n } else if (defined(v.x)) {\n if (!Cartesian3.equalsArray(v, arraybuffer, j)) {\n Cartesian3.pack(v, arraybuffer, j);\n changed = true;\n }\n } else {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\"Invalid vec3 value.\");\n //>>includeEnd('debug');\n }\n\n j += 3;\n }\n\n if (changed) {\n this._gl.uniform3fv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec4(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 4);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayFloatVec4.prototype.set = function () {\n // PERFORMANCE_IDEA: if it is a common case that only a few elements\n // in a uniform array change, we could use heuristics to determine\n // when it is better to call uniform4f for each element that changed\n // vs. call uniform4fv once to set the entire array. This applies\n // to all uniform array types, not just vec4. We might not care\n // once we have uniform buffers since that will be the fast path.\n\n // PERFORMANCE_IDEA: Micro-optimization (I bet it works though):\n // As soon as changed is true, break into a separate loop that\n // does the copy without the equals check.\n\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (defined(v.red)) {\n if (!Color.equalsArray(v, arraybuffer, j)) {\n Color.pack(v, arraybuffer, j);\n changed = true;\n }\n } else if (defined(v.x)) {\n if (!Cartesian4.equalsArray(v, arraybuffer, j)) {\n Cartesian4.pack(v, arraybuffer, j);\n changed = true;\n }\n } else {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\"Invalid vec4 value.\");\n //>>includeEnd('debug');\n }\n\n j += 4;\n }\n\n if (changed) {\n this._gl.uniform4fv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArraySampler(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length);\n\n this._gl = gl;\n this._locations = locations;\n\n this.textureUnitIndex = undefined;\n}\n\nUniformArraySampler.prototype.set = function () {\n var gl = this._gl;\n var textureUnitIndex = gl.TEXTURE0 + this.textureUnitIndex;\n\n var value = this.value;\n var length = value.length;\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n gl.activeTexture(textureUnitIndex + i);\n gl.bindTexture(v._target, v._texture);\n }\n};\n\nUniformArraySampler.prototype._setSampler = function (textureUnitIndex) {\n this.textureUnitIndex = textureUnitIndex;\n\n var locations = this._locations;\n var length = locations.length;\n for (var i = 0; i < length; ++i) {\n var index = textureUnitIndex + i;\n this._gl.uniform1i(locations[i], index);\n }\n\n return textureUnitIndex + length;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayInt(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Int32Array(length);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayInt.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (v !== arraybuffer[i]) {\n arraybuffer[i] = v;\n changed = true;\n }\n }\n\n if (changed) {\n this._gl.uniform1iv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec2(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Int32Array(length * 2);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayIntVec2.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Cartesian2.equalsArray(v, arraybuffer, j)) {\n Cartesian2.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 2;\n }\n\n if (changed) {\n this._gl.uniform2iv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec3(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Int32Array(length * 3);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayIntVec3.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Cartesian3.equalsArray(v, arraybuffer, j)) {\n Cartesian3.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 3;\n }\n\n if (changed) {\n this._gl.uniform3iv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec4(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Int32Array(length * 4);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayIntVec4.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Cartesian4.equalsArray(v, arraybuffer, j)) {\n Cartesian4.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 4;\n }\n\n if (changed) {\n this._gl.uniform4iv(this._location, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat2(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 4);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayMat2.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Matrix2.equalsArray(v, arraybuffer, j)) {\n Matrix2.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 4;\n }\n\n if (changed) {\n this._gl.uniformMatrix2fv(this._location, false, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat3(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 9);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayMat3.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Matrix3.equalsArray(v, arraybuffer, j)) {\n Matrix3.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 9;\n }\n\n if (changed) {\n this._gl.uniformMatrix3fv(this._location, false, arraybuffer);\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat4(gl, activeUniform, uniformName, locations) {\n var length = locations.length;\n\n /**\n * @type {String}\n * @readonly\n */\n this.name = uniformName;\n\n this.value = new Array(length);\n this._value = new Float32Array(length * 16);\n\n this._gl = gl;\n this._location = locations[0];\n}\n\nUniformArrayMat4.prototype.set = function () {\n var value = this.value;\n var length = value.length;\n var arraybuffer = this._value;\n var changed = false;\n var j = 0;\n\n for (var i = 0; i < length; ++i) {\n var v = value[i];\n\n if (!Matrix4.equalsArray(v, arraybuffer, j)) {\n Matrix4.pack(v, arraybuffer, j);\n changed = true;\n }\n j += 16;\n }\n\n if (changed) {\n this._gl.uniformMatrix4fv(this._location, false, arraybuffer);\n }\n};\nexport default createUniformArray;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport AutomaticUniforms from \"./AutomaticUniforms.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport createUniform from \"./createUniform.js\";\nimport createUniformArray from \"./createUniformArray.js\";\n\nvar nextShaderProgramId = 0;\n\n/**\n * @private\n */\nfunction ShaderProgram(options) {\n var vertexShaderText = options.vertexShaderText;\n var fragmentShaderText = options.fragmentShaderText;\n\n if (typeof spector !== \"undefined\") {\n // The #line statements common in Cesium shaders interfere with the ability of the\n // SpectorJS to show errors on the correct line. So remove them when SpectorJS\n // is active.\n vertexShaderText = vertexShaderText.replace(/^#line/gm, \"//#line\");\n fragmentShaderText = fragmentShaderText.replace(/^#line/gm, \"//#line\");\n }\n\n var modifiedFS = handleUniformPrecisionMismatches(\n vertexShaderText,\n fragmentShaderText\n );\n\n this._gl = options.gl;\n this._logShaderCompilation = options.logShaderCompilation;\n this._debugShaders = options.debugShaders;\n this._attributeLocations = options.attributeLocations;\n\n this._program = undefined;\n this._numberOfVertexAttributes = undefined;\n this._vertexAttributes = undefined;\n this._uniformsByName = undefined;\n this._uniforms = undefined;\n this._automaticUniforms = undefined;\n this._manualUniforms = undefined;\n this._duplicateUniformNames = modifiedFS.duplicateUniformNames;\n this._cachedShader = undefined; // Used by ShaderCache\n\n /**\n * @private\n */\n this.maximumTextureUnitIndex = undefined;\n\n this._vertexShaderSource = options.vertexShaderSource;\n this._vertexShaderText = options.vertexShaderText;\n this._fragmentShaderSource = options.fragmentShaderSource;\n this._fragmentShaderText = modifiedFS.fragmentShaderText;\n\n /**\n * @private\n */\n this.id = nextShaderProgramId++;\n}\n\nShaderProgram.fromCache = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n return options.context.shaderCache.getShaderProgram(options);\n};\n\nShaderProgram.replaceCache = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n return options.context.shaderCache.replaceShaderProgram(options);\n};\n\nObject.defineProperties(ShaderProgram.prototype, {\n /**\n * GLSL source for the shader program's vertex shader.\n * @memberof ShaderProgram.prototype\n *\n * @type {ShaderSource}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n /**\n * GLSL source for the shader program's fragment shader.\n * @memberof ShaderProgram.prototype\n *\n * @type {ShaderSource}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n vertexAttributes: {\n get: function () {\n initialize(this);\n return this._vertexAttributes;\n },\n },\n numberOfVertexAttributes: {\n get: function () {\n initialize(this);\n return this._numberOfVertexAttributes;\n },\n },\n allUniforms: {\n get: function () {\n initialize(this);\n return this._uniformsByName;\n },\n },\n});\n\nfunction extractUniforms(shaderText) {\n var uniformNames = [];\n var uniformLines = shaderText.match(/uniform.*?(?![^{]*})(?=[=\\[;])/g);\n if (defined(uniformLines)) {\n var len = uniformLines.length;\n for (var i = 0; i < len; i++) {\n var line = uniformLines[i].trim();\n var name = line.slice(line.lastIndexOf(\" \") + 1);\n uniformNames.push(name);\n }\n }\n return uniformNames;\n}\n\nfunction handleUniformPrecisionMismatches(\n vertexShaderText,\n fragmentShaderText\n) {\n // If a uniform exists in both the vertex and fragment shader but with different precision qualifiers,\n // give the fragment shader uniform a different name. This fixes shader compilation errors on devices\n // that only support mediump in the fragment shader.\n var duplicateUniformNames = {};\n\n if (!ContextLimits.highpFloatSupported || !ContextLimits.highpIntSupported) {\n var i, j;\n var uniformName;\n var duplicateName;\n var vertexShaderUniforms = extractUniforms(vertexShaderText);\n var fragmentShaderUniforms = extractUniforms(fragmentShaderText);\n var vertexUniformsCount = vertexShaderUniforms.length;\n var fragmentUniformsCount = fragmentShaderUniforms.length;\n\n for (i = 0; i < vertexUniformsCount; i++) {\n for (j = 0; j < fragmentUniformsCount; j++) {\n if (vertexShaderUniforms[i] === fragmentShaderUniforms[j]) {\n uniformName = vertexShaderUniforms[i];\n duplicateName = \"czm_mediump_\" + uniformName;\n // Update fragmentShaderText with renamed uniforms\n var re = new RegExp(uniformName + \"\\\\b\", \"g\");\n fragmentShaderText = fragmentShaderText.replace(re, duplicateName);\n duplicateUniformNames[duplicateName] = uniformName;\n }\n }\n }\n }\n\n return {\n fragmentShaderText: fragmentShaderText,\n duplicateUniformNames: duplicateUniformNames,\n };\n}\n\nvar consolePrefix = \"[Cesium WebGL] \";\n\nfunction createAndLinkProgram(gl, shader) {\n var vsSource = shader._vertexShaderText;\n var fsSource = shader._fragmentShaderText;\n\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vsSource);\n gl.compileShader(vertexShader);\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fsSource);\n gl.compileShader(fragmentShader);\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n var attributeLocations = shader._attributeLocations;\n if (defined(attributeLocations)) {\n for (var attribute in attributeLocations) {\n if (attributeLocations.hasOwnProperty(attribute)) {\n gl.bindAttribLocation(\n program,\n attributeLocations[attribute],\n attribute\n );\n }\n }\n }\n\n gl.linkProgram(program);\n\n var log;\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n var debugShaders = shader._debugShaders;\n\n // For performance, only check compile errors if there is a linker error.\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n log = gl.getShaderInfoLog(fragmentShader);\n console.error(consolePrefix + \"Fragment shader compile log: \" + log);\n if (defined(debugShaders)) {\n var fragmentSourceTranslation = debugShaders.getTranslatedShaderSource(\n fragmentShader\n );\n if (fragmentSourceTranslation !== \"\") {\n console.error(\n consolePrefix +\n \"Translated fragment shader source:\\n\" +\n fragmentSourceTranslation\n );\n } else {\n console.error(consolePrefix + \"Fragment shader translation failed.\");\n }\n }\n\n gl.deleteProgram(program);\n throw new RuntimeError(\n \"Fragment shader failed to compile. Compile log: \" + log\n );\n }\n\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n log = gl.getShaderInfoLog(vertexShader);\n console.error(consolePrefix + \"Vertex shader compile log: \" + log);\n if (defined(debugShaders)) {\n var vertexSourceTranslation = debugShaders.getTranslatedShaderSource(\n vertexShader\n );\n if (vertexSourceTranslation !== \"\") {\n console.error(\n consolePrefix +\n \"Translated vertex shader source:\\n\" +\n vertexSourceTranslation\n );\n } else {\n console.error(consolePrefix + \"Vertex shader translation failed.\");\n }\n }\n\n gl.deleteProgram(program);\n throw new RuntimeError(\n \"Vertex shader failed to compile. Compile log: \" + log\n );\n }\n\n log = gl.getProgramInfoLog(program);\n console.error(consolePrefix + \"Shader program link log: \" + log);\n if (defined(debugShaders)) {\n console.error(\n consolePrefix +\n \"Translated vertex shader source:\\n\" +\n debugShaders.getTranslatedShaderSource(vertexShader)\n );\n console.error(\n consolePrefix +\n \"Translated fragment shader source:\\n\" +\n debugShaders.getTranslatedShaderSource(fragmentShader)\n );\n }\n\n gl.deleteProgram(program);\n throw new RuntimeError(\"Program failed to link. Link log: \" + log);\n }\n\n var logShaderCompilation = shader._logShaderCompilation;\n\n if (logShaderCompilation) {\n log = gl.getShaderInfoLog(vertexShader);\n if (defined(log) && log.length > 0) {\n console.log(consolePrefix + \"Vertex shader compile log: \" + log);\n }\n }\n\n if (logShaderCompilation) {\n log = gl.getShaderInfoLog(fragmentShader);\n if (defined(log) && log.length > 0) {\n console.log(consolePrefix + \"Fragment shader compile log: \" + log);\n }\n }\n\n if (logShaderCompilation) {\n log = gl.getProgramInfoLog(program);\n if (defined(log) && log.length > 0) {\n console.log(consolePrefix + \"Shader program link log: \" + log);\n }\n }\n\n return program;\n}\n\nfunction findVertexAttributes(gl, program, numberOfAttributes) {\n var attributes = {};\n for (var i = 0; i < numberOfAttributes; ++i) {\n var attr = gl.getActiveAttrib(program, i);\n var location = gl.getAttribLocation(program, attr.name);\n\n attributes[attr.name] = {\n name: attr.name,\n type: attr.type,\n index: location,\n };\n }\n\n return attributes;\n}\n\nfunction findUniforms(gl, program) {\n var uniformsByName = {};\n var uniforms = [];\n var samplerUniforms = [];\n\n var numberOfUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n for (var i = 0; i < numberOfUniforms; ++i) {\n var activeUniform = gl.getActiveUniform(program, i);\n var suffix = \"[0]\";\n var uniformName =\n activeUniform.name.indexOf(\n suffix,\n activeUniform.name.length - suffix.length\n ) !== -1\n ? activeUniform.name.slice(0, activeUniform.name.length - 3)\n : activeUniform.name;\n\n // Ignore GLSL built-in uniforms returned in Firefox.\n if (uniformName.indexOf(\"gl_\") !== 0) {\n if (activeUniform.name.indexOf(\"[\") < 0) {\n // Single uniform\n var location = gl.getUniformLocation(program, uniformName);\n\n // IE 11.0.9 needs this check since getUniformLocation can return null\n // if the uniform is not active (e.g., it is optimized out). Looks like\n // getActiveUniform() above returns uniforms that are not actually active.\n if (location !== null) {\n var uniform = createUniform(gl, activeUniform, uniformName, location);\n\n uniformsByName[uniformName] = uniform;\n uniforms.push(uniform);\n\n if (uniform._setSampler) {\n samplerUniforms.push(uniform);\n }\n }\n } else {\n // Uniform array\n\n var uniformArray;\n var locations;\n var value;\n var loc;\n\n // On some platforms - Nexus 4 in Firefox for one - an array of sampler2D ends up being represented\n // as separate uniforms, one for each array element. Check for and handle that case.\n var indexOfBracket = uniformName.indexOf(\"[\");\n if (indexOfBracket >= 0) {\n // We're assuming the array elements show up in numerical order - it seems to be true.\n uniformArray = uniformsByName[uniformName.slice(0, indexOfBracket)];\n\n // Nexus 4 with Android 4.3 needs this check, because it reports a uniform\n // with the strange name webgl_3467e0265d05c3c1[1] in our globe surface shader.\n if (!defined(uniformArray)) {\n continue;\n }\n\n locations = uniformArray._locations;\n\n // On the Nexus 4 in Chrome, we get one uniform per sampler, just like in Firefox,\n // but the size is not 1 like it is in Firefox. So if we push locations here,\n // we'll end up adding too many locations.\n if (locations.length <= 1) {\n value = uniformArray.value;\n loc = gl.getUniformLocation(program, uniformName);\n\n // Workaround for IE 11.0.9. See above.\n if (loc !== null) {\n locations.push(loc);\n value.push(gl.getUniform(program, loc));\n }\n }\n } else {\n locations = [];\n for (var j = 0; j < activeUniform.size; ++j) {\n loc = gl.getUniformLocation(program, uniformName + \"[\" + j + \"]\");\n\n // Workaround for IE 11.0.9. See above.\n if (loc !== null) {\n locations.push(loc);\n }\n }\n uniformArray = createUniformArray(\n gl,\n activeUniform,\n uniformName,\n locations\n );\n\n uniformsByName[uniformName] = uniformArray;\n uniforms.push(uniformArray);\n\n if (uniformArray._setSampler) {\n samplerUniforms.push(uniformArray);\n }\n }\n }\n }\n }\n\n return {\n uniformsByName: uniformsByName,\n uniforms: uniforms,\n samplerUniforms: samplerUniforms,\n };\n}\n\nfunction partitionUniforms(shader, uniforms) {\n var automaticUniforms = [];\n var manualUniforms = [];\n\n for (var uniform in uniforms) {\n if (uniforms.hasOwnProperty(uniform)) {\n var uniformObject = uniforms[uniform];\n var uniformName = uniform;\n // if it's a duplicate uniform, use its original name so it is updated correctly\n var duplicateUniform = shader._duplicateUniformNames[uniformName];\n if (defined(duplicateUniform)) {\n uniformObject.name = duplicateUniform;\n uniformName = duplicateUniform;\n }\n var automaticUniform = AutomaticUniforms[uniformName];\n if (defined(automaticUniform)) {\n automaticUniforms.push({\n uniform: uniformObject,\n automaticUniform: automaticUniform,\n });\n } else {\n manualUniforms.push(uniformObject);\n }\n }\n }\n\n return {\n automaticUniforms: automaticUniforms,\n manualUniforms: manualUniforms,\n };\n}\n\nfunction setSamplerUniforms(gl, program, samplerUniforms) {\n gl.useProgram(program);\n\n var textureUnitIndex = 0;\n var length = samplerUniforms.length;\n for (var i = 0; i < length; ++i) {\n textureUnitIndex = samplerUniforms[i]._setSampler(textureUnitIndex);\n }\n\n gl.useProgram(null);\n\n return textureUnitIndex;\n}\n\nfunction initialize(shader) {\n if (defined(shader._program)) {\n return;\n }\n\n reinitialize(shader);\n}\n\nfunction reinitialize(shader) {\n var oldProgram = shader._program;\n\n var gl = shader._gl;\n var program = createAndLinkProgram(gl, shader, shader._debugShaders);\n var numberOfVertexAttributes = gl.getProgramParameter(\n program,\n gl.ACTIVE_ATTRIBUTES\n );\n var uniforms = findUniforms(gl, program);\n var partitionedUniforms = partitionUniforms(shader, uniforms.uniformsByName);\n\n shader._program = program;\n shader._numberOfVertexAttributes = numberOfVertexAttributes;\n shader._vertexAttributes = findVertexAttributes(\n gl,\n program,\n numberOfVertexAttributes\n );\n shader._uniformsByName = uniforms.uniformsByName;\n shader._uniforms = uniforms.uniforms;\n shader._automaticUniforms = partitionedUniforms.automaticUniforms;\n shader._manualUniforms = partitionedUniforms.manualUniforms;\n\n shader.maximumTextureUnitIndex = setSamplerUniforms(\n gl,\n program,\n uniforms.samplerUniforms\n );\n\n if (oldProgram) {\n shader._gl.deleteProgram(oldProgram);\n }\n\n // If SpectorJS is active, add the hook to make the shader editor work.\n // https://github.com/BabylonJS/Spector.js/blob/master/documentation/extension.md#shader-editor\n if (typeof spector !== \"undefined\") {\n shader._program.__SPECTOR_rebuildProgram = function (\n vertexSourceCode, // The new vertex shader source\n fragmentSourceCode, // The new fragment shader source\n onCompiled, // Callback triggered by your engine when the compilation is successful. It needs to send back the new linked program.\n onError // Callback triggered by your engine in case of error. It needs to send the WebGL error to allow the editor to display the error in the gutter.\n ) {\n var originalVS = shader._vertexShaderText;\n var originalFS = shader._fragmentShaderText;\n\n // SpectorJS likes to replace `!=` with `! =` for unknown reasons,\n // and that causes glsl compile failures. So fix that up.\n var regex = / ! = /g;\n shader._vertexShaderText = vertexSourceCode.replace(regex, \" != \");\n shader._fragmentShaderText = fragmentSourceCode.replace(regex, \" != \");\n\n try {\n reinitialize(shader);\n onCompiled(shader._program);\n } catch (e) {\n shader._vertexShaderText = originalVS;\n shader._fragmentShaderText = originalFS;\n\n // Only pass on the WebGL error:\n var errorMatcher = /(?:Compile|Link) error: ([^]*)/;\n var match = errorMatcher.exec(e.message);\n if (match) {\n onError(match[1]);\n } else {\n onError(e.message);\n }\n }\n };\n }\n}\n\nShaderProgram.prototype._bind = function () {\n initialize(this);\n this._gl.useProgram(this._program);\n};\n\nShaderProgram.prototype._setUniforms = function (\n uniformMap,\n uniformState,\n validate\n) {\n var len;\n var i;\n\n if (defined(uniformMap)) {\n var manualUniforms = this._manualUniforms;\n len = manualUniforms.length;\n for (i = 0; i < len; ++i) {\n var mu = manualUniforms[i];\n mu.value = uniformMap[mu.name]();\n }\n }\n\n var automaticUniforms = this._automaticUniforms;\n len = automaticUniforms.length;\n for (i = 0; i < len; ++i) {\n var au = automaticUniforms[i];\n au.uniform.value = au.automaticUniform.getValue(uniformState);\n }\n\n ///////////////////////////////////////////////////////////////////\n\n // It appears that assigning the uniform values above and then setting them here\n // (which makes the GL calls) is faster than removing this loop and making\n // the GL calls above. I suspect this is because each GL call pollutes the\n // L2 cache making our JavaScript and the browser/driver ping-pong cache lines.\n var uniforms = this._uniforms;\n len = uniforms.length;\n for (i = 0; i < len; ++i) {\n uniforms[i].set();\n }\n\n if (validate) {\n var gl = this._gl;\n var program = this._program;\n\n gl.validateProgram(program);\n //>>includeStart('debug', pragmas.debug);\n if (!gl.getProgramParameter(program, gl.VALIDATE_STATUS)) {\n throw new DeveloperError(\n \"Program validation failed. Program info log: \" +\n gl.getProgramInfoLog(program)\n );\n }\n //>>includeEnd('debug');\n }\n};\n\nShaderProgram.prototype.isDestroyed = function () {\n return false;\n};\n\nShaderProgram.prototype.destroy = function () {\n this._cachedShader.cache.releaseShaderProgram(this);\n return undefined;\n};\n\nShaderProgram.prototype.finalDestroy = function () {\n this._gl.deleteProgram(this._program);\n return destroyObject(this);\n};\nexport default ShaderProgram;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A function to port GLSL shaders from GLSL ES 1.00 to GLSL ES 3.00\n *\n * This function is nowhere near comprehensive or complete. It just\n * handles some common cases.\n *\n * Note that this function requires the presence of the\n * \"#define OUTPUT_DECLARATION\" line that is appended\n * by ShaderSource.\n *\n * @private\n */\nfunction modernizeShader(source, isFragmentShader) {\n var outputDeclarationRegex = /#define OUTPUT_DECLARATION/;\n var splitSource = source.split(\"\\n\");\n\n if (/#version 300 es/g.test(source)) {\n return source;\n }\n\n var outputDeclarationLine = -1;\n var i, line;\n for (i = 0; i < splitSource.length; ++i) {\n line = splitSource[i];\n if (outputDeclarationRegex.test(line)) {\n outputDeclarationLine = i;\n break;\n }\n }\n\n if (outputDeclarationLine === -1) {\n throw new DeveloperError(\"Could not find a #define OUTPUT_DECLARATION!\");\n }\n\n var outputVariables = [];\n\n for (i = 0; i < 10; i++) {\n var fragDataString = \"gl_FragData\\\\[\" + i + \"\\\\]\";\n var newOutput = \"czm_out\" + i;\n var regex = new RegExp(fragDataString, \"g\");\n if (regex.test(source)) {\n setAdd(newOutput, outputVariables);\n replaceInSourceString(fragDataString, newOutput, splitSource);\n splitSource.splice(\n outputDeclarationLine,\n 0,\n \"layout(location = \" + i + \") out vec4 \" + newOutput + \";\"\n );\n outputDeclarationLine += 1;\n }\n }\n\n var czmFragColor = \"czm_fragColor\";\n if (findInSource(\"gl_FragColor\", splitSource)) {\n setAdd(czmFragColor, outputVariables);\n replaceInSourceString(\"gl_FragColor\", czmFragColor, splitSource);\n splitSource.splice(\n outputDeclarationLine,\n 0,\n \"layout(location = 0) out vec4 czm_fragColor;\"\n );\n outputDeclarationLine += 1;\n }\n\n var variableMap = getVariablePreprocessorBranch(outputVariables, splitSource);\n var lineAdds = {};\n for (i = 0; i < splitSource.length; i++) {\n line = splitSource[i];\n for (var variable in variableMap) {\n if (variableMap.hasOwnProperty(variable)) {\n var matchVar = new RegExp(\n \"(layout)[^]+(out)[^]+(\" + variable + \")[^]+\",\n \"g\"\n );\n if (matchVar.test(line)) {\n lineAdds[line] = variable;\n }\n }\n }\n }\n\n for (var layoutDeclaration in lineAdds) {\n if (lineAdds.hasOwnProperty(layoutDeclaration)) {\n var variableName = lineAdds[layoutDeclaration];\n var lineNumber = splitSource.indexOf(layoutDeclaration);\n var entry = variableMap[variableName];\n var depth = entry.length;\n var d;\n for (d = 0; d < depth; d++) {\n splitSource.splice(lineNumber, 0, entry[d]);\n }\n lineNumber += depth + 1;\n for (d = depth - 1; d >= 0; d--) {\n splitSource.splice(lineNumber, 0, \"#endif //\" + entry[d]);\n }\n }\n }\n\n var webgl2UniqueID = \"WEBGL_2\";\n var webgl2DefineMacro = \"#define \" + webgl2UniqueID;\n var versionThree = \"#version 300 es\";\n var foundVersion = false;\n for (i = 0; i < splitSource.length; i++) {\n if (/#version/.test(splitSource[i])) {\n splitSource[i] = versionThree;\n foundVersion = true;\n break;\n }\n }\n\n if (!foundVersion) {\n splitSource.splice(0, 0, versionThree);\n }\n\n splitSource.splice(1, 0, webgl2DefineMacro);\n\n removeExtension(\"EXT_draw_buffers\", webgl2UniqueID, splitSource);\n removeExtension(\"EXT_frag_depth\", webgl2UniqueID, splitSource);\n removeExtension(\"OES_standard_derivatives\", webgl2UniqueID, splitSource);\n\n replaceInSourceString(\"texture2D\", \"texture\", splitSource);\n replaceInSourceString(\"texture3D\", \"texture\", splitSource);\n replaceInSourceString(\"textureCube\", \"texture\", splitSource);\n replaceInSourceString(\"gl_FragDepthEXT\", \"gl_FragDepth\", splitSource);\n\n if (isFragmentShader) {\n replaceInSourceString(\"varying\", \"in\", splitSource);\n } else {\n replaceInSourceString(\"attribute\", \"in\", splitSource);\n replaceInSourceString(\"varying\", \"out\", splitSource);\n }\n\n return compileSource(splitSource);\n}\n\n// Note that this fails if your string looks like\n// searchString[singleCharacter]searchString\nfunction replaceInSourceString(str, replacement, splitSource) {\n var regexStr = \"(^|[^\\\\w])(\" + str + \")($|[^\\\\w])\";\n var regex = new RegExp(regexStr, \"g\");\n\n var splitSourceLength = splitSource.length;\n for (var i = 0; i < splitSourceLength; ++i) {\n var line = splitSource[i];\n splitSource[i] = line.replace(regex, \"$1\" + replacement + \"$3\");\n }\n}\n\nfunction replaceInSourceRegex(regex, replacement, splitSource) {\n var splitSourceLength = splitSource.length;\n for (var i = 0; i < splitSourceLength; ++i) {\n var line = splitSource[i];\n splitSource[i] = line.replace(regex, replacement);\n }\n}\n\nfunction findInSource(str, splitSource) {\n var regexStr = \"(^|[^\\\\w])(\" + str + \")($|[^\\\\w])\";\n var regex = new RegExp(regexStr, \"g\");\n\n var splitSourceLength = splitSource.length;\n for (var i = 0; i < splitSourceLength; ++i) {\n var line = splitSource[i];\n if (regex.test(line)) {\n return true;\n }\n }\n return false;\n}\n\nfunction compileSource(splitSource) {\n var wholeSource = \"\";\n\n var splitSourceLength = splitSource.length;\n for (var i = 0; i < splitSourceLength; ++i) {\n wholeSource += splitSource[i] + \"\\n\";\n }\n return wholeSource;\n}\n\nfunction setAdd(variable, set) {\n if (set.indexOf(variable) === -1) {\n set.push(variable);\n }\n}\n\nfunction getVariablePreprocessorBranch(layoutVariables, splitSource) {\n var variableMap = {};\n\n var numLayoutVariables = layoutVariables.length;\n\n var stack = [];\n for (var i = 0; i < splitSource.length; ++i) {\n var line = splitSource[i];\n var hasIF = /(#ifdef|#if)/g.test(line);\n var hasELSE = /#else/g.test(line);\n var hasENDIF = /#endif/g.test(line);\n\n if (hasIF) {\n stack.push(line);\n } else if (hasELSE) {\n var top = stack[stack.length - 1];\n var op = top.replace(\"ifdef\", \"ifndef\");\n if (/if/g.test(op)) {\n op = op.replace(/(#if\\s+)(\\S*)([^]*)/, \"$1!($2)$3\");\n }\n stack.pop();\n stack.push(op);\n } else if (hasENDIF) {\n stack.pop();\n } else if (!/layout/g.test(line)) {\n for (var varIndex = 0; varIndex < numLayoutVariables; ++varIndex) {\n var varName = layoutVariables[varIndex];\n if (line.indexOf(varName) !== -1) {\n if (!defined(variableMap[varName])) {\n variableMap[varName] = stack.slice();\n } else {\n variableMap[varName] = variableMap[varName].filter(function (x) {\n return stack.indexOf(x) >= 0;\n });\n }\n }\n }\n }\n }\n\n return variableMap;\n}\n\nfunction removeExtension(name, webgl2UniqueID, splitSource) {\n var regex = \"#extension\\\\s+GL_\" + name + \"\\\\s+:\\\\s+[a-zA-Z0-9]+\\\\s*$\";\n replaceInSourceRegex(new RegExp(regex, \"g\"), \"\", splitSource);\n\n // replace any possible directive #ifdef (GL_EXT_extension) with WEBGL_2 unique directive\n replaceInSourceString(\"GL_\" + name, webgl2UniqueID, splitSource);\n}\nexport default modernizeShader;\n","//This file is automatically rebuilt by the Cesium build process.\nimport czm_degreesPerRadian from './Constants/degreesPerRadian.js'\nimport czm_depthRange from './Constants/depthRange.js'\nimport czm_epsilon1 from './Constants/epsilon1.js'\nimport czm_epsilon2 from './Constants/epsilon2.js'\nimport czm_epsilon3 from './Constants/epsilon3.js'\nimport czm_epsilon4 from './Constants/epsilon4.js'\nimport czm_epsilon5 from './Constants/epsilon5.js'\nimport czm_epsilon6 from './Constants/epsilon6.js'\nimport czm_epsilon7 from './Constants/epsilon7.js'\nimport czm_infinity from './Constants/infinity.js'\nimport czm_oneOverPi from './Constants/oneOverPi.js'\nimport czm_oneOverTwoPi from './Constants/oneOverTwoPi.js'\nimport czm_passCesium3DTile from './Constants/passCesium3DTile.js'\nimport czm_passCesium3DTileClassification from './Constants/passCesium3DTileClassification.js'\nimport czm_passCesium3DTileClassificationIgnoreShow from './Constants/passCesium3DTileClassificationIgnoreShow.js'\nimport czm_passClassification from './Constants/passClassification.js'\nimport czm_passCompute from './Constants/passCompute.js'\nimport czm_passEnvironment from './Constants/passEnvironment.js'\nimport czm_passGlobe from './Constants/passGlobe.js'\nimport czm_passOpaque from './Constants/passOpaque.js'\nimport czm_passOverlay from './Constants/passOverlay.js'\nimport czm_passTerrainClassification from './Constants/passTerrainClassification.js'\nimport czm_passTranslucent from './Constants/passTranslucent.js'\nimport czm_pi from './Constants/pi.js'\nimport czm_piOverFour from './Constants/piOverFour.js'\nimport czm_piOverSix from './Constants/piOverSix.js'\nimport czm_piOverThree from './Constants/piOverThree.js'\nimport czm_piOverTwo from './Constants/piOverTwo.js'\nimport czm_radiansPerDegree from './Constants/radiansPerDegree.js'\nimport czm_sceneMode2D from './Constants/sceneMode2D.js'\nimport czm_sceneMode3D from './Constants/sceneMode3D.js'\nimport czm_sceneModeColumbusView from './Constants/sceneModeColumbusView.js'\nimport czm_sceneModeMorphing from './Constants/sceneModeMorphing.js'\nimport czm_solarRadius from './Constants/solarRadius.js'\nimport czm_threePiOver2 from './Constants/threePiOver2.js'\nimport czm_twoPi from './Constants/twoPi.js'\nimport czm_webMercatorMaxLatitude from './Constants/webMercatorMaxLatitude.js'\nimport czm_depthRangeStruct from './Structs/depthRangeStruct.js'\nimport czm_material from './Structs/material.js'\nimport czm_materialInput from './Structs/materialInput.js'\nimport czm_ray from './Structs/ray.js'\nimport czm_raySegment from './Structs/raySegment.js'\nimport czm_shadowParameters from './Structs/shadowParameters.js'\nimport czm_acesTonemapping from './Functions/acesTonemapping.js'\nimport czm_alphaWeight from './Functions/alphaWeight.js'\nimport czm_antialias from './Functions/antialias.js'\nimport czm_approximateSphericalCoordinates from './Functions/approximateSphericalCoordinates.js'\nimport czm_backFacing from './Functions/backFacing.js'\nimport czm_branchFreeTernary from './Functions/branchFreeTernary.js'\nimport czm_cascadeColor from './Functions/cascadeColor.js'\nimport czm_cascadeDistance from './Functions/cascadeDistance.js'\nimport czm_cascadeMatrix from './Functions/cascadeMatrix.js'\nimport czm_cascadeWeights from './Functions/cascadeWeights.js'\nimport czm_columbusViewMorph from './Functions/columbusViewMorph.js'\nimport czm_computePosition from './Functions/computePosition.js'\nimport czm_cosineAndSine from './Functions/cosineAndSine.js'\nimport czm_decompressTextureCoordinates from './Functions/decompressTextureCoordinates.js'\nimport czm_depthClamp from './Functions/depthClamp.js'\nimport czm_eastNorthUpToEyeCoordinates from './Functions/eastNorthUpToEyeCoordinates.js'\nimport czm_ellipsoidContainsPoint from './Functions/ellipsoidContainsPoint.js'\nimport czm_ellipsoidWgs84TextureCoordinates from './Functions/ellipsoidWgs84TextureCoordinates.js'\nimport czm_equalsEpsilon from './Functions/equalsEpsilon.js'\nimport czm_eyeOffset from './Functions/eyeOffset.js'\nimport czm_eyeToWindowCoordinates from './Functions/eyeToWindowCoordinates.js'\nimport czm_fastApproximateAtan from './Functions/fastApproximateAtan.js'\nimport czm_fog from './Functions/fog.js'\nimport czm_gammaCorrect from './Functions/gammaCorrect.js'\nimport czm_geodeticSurfaceNormal from './Functions/geodeticSurfaceNormal.js'\nimport czm_getDefaultMaterial from './Functions/getDefaultMaterial.js'\nimport czm_getLambertDiffuse from './Functions/getLambertDiffuse.js'\nimport czm_getSpecular from './Functions/getSpecular.js'\nimport czm_getWaterNoise from './Functions/getWaterNoise.js'\nimport czm_HSBToRGB from './Functions/HSBToRGB.js'\nimport czm_HSLToRGB from './Functions/HSLToRGB.js'\nimport czm_hue from './Functions/hue.js'\nimport czm_inverseGamma from './Functions/inverseGamma.js'\nimport czm_isEmpty from './Functions/isEmpty.js'\nimport czm_isFull from './Functions/isFull.js'\nimport czm_latitudeToWebMercatorFraction from './Functions/latitudeToWebMercatorFraction.js'\nimport czm_lineDistance from './Functions/lineDistance.js'\nimport czm_luminance from './Functions/luminance.js'\nimport czm_metersPerPixel from './Functions/metersPerPixel.js'\nimport czm_modelToWindowCoordinates from './Functions/modelToWindowCoordinates.js'\nimport czm_multiplyWithColorBalance from './Functions/multiplyWithColorBalance.js'\nimport czm_nearFarScalar from './Functions/nearFarScalar.js'\nimport czm_octDecode from './Functions/octDecode.js'\nimport czm_packDepth from './Functions/packDepth.js'\nimport czm_phong from './Functions/phong.js'\nimport czm_planeDistance from './Functions/planeDistance.js'\nimport czm_pointAlongRay from './Functions/pointAlongRay.js'\nimport czm_rayEllipsoidIntersectionInterval from './Functions/rayEllipsoidIntersectionInterval.js'\nimport czm_readDepth from './Functions/readDepth.js'\nimport czm_readNonPerspective from './Functions/readNonPerspective.js'\nimport czm_reverseLogDepth from './Functions/reverseLogDepth.js'\nimport czm_RGBToHSB from './Functions/RGBToHSB.js'\nimport czm_RGBToHSL from './Functions/RGBToHSL.js'\nimport czm_RGBToXYZ from './Functions/RGBToXYZ.js'\nimport czm_sampleOctahedralProjection from './Functions/sampleOctahedralProjection.js'\nimport czm_saturation from './Functions/saturation.js'\nimport czm_shadowDepthCompare from './Functions/shadowDepthCompare.js'\nimport czm_shadowVisibility from './Functions/shadowVisibility.js'\nimport czm_signNotZero from './Functions/signNotZero.js'\nimport czm_sphericalHarmonics from './Functions/sphericalHarmonics.js'\nimport czm_tangentToEyeSpaceMatrix from './Functions/tangentToEyeSpaceMatrix.js'\nimport czm_transformPlane from './Functions/transformPlane.js'\nimport czm_translateRelativeToEye from './Functions/translateRelativeToEye.js'\nimport czm_translucentPhong from './Functions/translucentPhong.js'\nimport czm_transpose from './Functions/transpose.js'\nimport czm_unpackDepth from './Functions/unpackDepth.js'\nimport czm_unpackFloat from './Functions/unpackFloat.js'\nimport czm_vertexLogDepth from './Functions/vertexLogDepth.js'\nimport czm_windowToEyeCoordinates from './Functions/windowToEyeCoordinates.js'\nimport czm_writeDepthClamp from './Functions/writeDepthClamp.js'\nimport czm_writeLogDepth from './Functions/writeLogDepth.js'\nimport czm_writeNonPerspective from './Functions/writeNonPerspective.js'\nimport czm_XYZToRGB from './Functions/XYZToRGB.js'\n\nexport default {\n czm_degreesPerRadian : czm_degreesPerRadian,\n czm_depthRange : czm_depthRange,\n czm_epsilon1 : czm_epsilon1,\n czm_epsilon2 : czm_epsilon2,\n czm_epsilon3 : czm_epsilon3,\n czm_epsilon4 : czm_epsilon4,\n czm_epsilon5 : czm_epsilon5,\n czm_epsilon6 : czm_epsilon6,\n czm_epsilon7 : czm_epsilon7,\n czm_infinity : czm_infinity,\n czm_oneOverPi : czm_oneOverPi,\n czm_oneOverTwoPi : czm_oneOverTwoPi,\n czm_passCesium3DTile : czm_passCesium3DTile,\n czm_passCesium3DTileClassification : czm_passCesium3DTileClassification,\n czm_passCesium3DTileClassificationIgnoreShow : czm_passCesium3DTileClassificationIgnoreShow,\n czm_passClassification : czm_passClassification,\n czm_passCompute : czm_passCompute,\n czm_passEnvironment : czm_passEnvironment,\n czm_passGlobe : czm_passGlobe,\n czm_passOpaque : czm_passOpaque,\n czm_passOverlay : czm_passOverlay,\n czm_passTerrainClassification : czm_passTerrainClassification,\n czm_passTranslucent : czm_passTranslucent,\n czm_pi : czm_pi,\n czm_piOverFour : czm_piOverFour,\n czm_piOverSix : czm_piOverSix,\n czm_piOverThree : czm_piOverThree,\n czm_piOverTwo : czm_piOverTwo,\n czm_radiansPerDegree : czm_radiansPerDegree,\n czm_sceneMode2D : czm_sceneMode2D,\n czm_sceneMode3D : czm_sceneMode3D,\n czm_sceneModeColumbusView : czm_sceneModeColumbusView,\n czm_sceneModeMorphing : czm_sceneModeMorphing,\n czm_solarRadius : czm_solarRadius,\n czm_threePiOver2 : czm_threePiOver2,\n czm_twoPi : czm_twoPi,\n czm_webMercatorMaxLatitude : czm_webMercatorMaxLatitude,\n czm_depthRangeStruct : czm_depthRangeStruct,\n czm_material : czm_material,\n czm_materialInput : czm_materialInput,\n czm_ray : czm_ray,\n czm_raySegment : czm_raySegment,\n czm_shadowParameters : czm_shadowParameters,\n czm_acesTonemapping : czm_acesTonemapping,\n czm_alphaWeight : czm_alphaWeight,\n czm_antialias : czm_antialias,\n czm_approximateSphericalCoordinates : czm_approximateSphericalCoordinates,\n czm_backFacing : czm_backFacing,\n czm_branchFreeTernary : czm_branchFreeTernary,\n czm_cascadeColor : czm_cascadeColor,\n czm_cascadeDistance : czm_cascadeDistance,\n czm_cascadeMatrix : czm_cascadeMatrix,\n czm_cascadeWeights : czm_cascadeWeights,\n czm_columbusViewMorph : czm_columbusViewMorph,\n czm_computePosition : czm_computePosition,\n czm_cosineAndSine : czm_cosineAndSine,\n czm_decompressTextureCoordinates : czm_decompressTextureCoordinates,\n czm_depthClamp : czm_depthClamp,\n czm_eastNorthUpToEyeCoordinates : czm_eastNorthUpToEyeCoordinates,\n czm_ellipsoidContainsPoint : czm_ellipsoidContainsPoint,\n czm_ellipsoidWgs84TextureCoordinates : czm_ellipsoidWgs84TextureCoordinates,\n czm_equalsEpsilon : czm_equalsEpsilon,\n czm_eyeOffset : czm_eyeOffset,\n czm_eyeToWindowCoordinates : czm_eyeToWindowCoordinates,\n czm_fastApproximateAtan : czm_fastApproximateAtan,\n czm_fog : czm_fog,\n czm_gammaCorrect : czm_gammaCorrect,\n czm_geodeticSurfaceNormal : czm_geodeticSurfaceNormal,\n czm_getDefaultMaterial : czm_getDefaultMaterial,\n czm_getLambertDiffuse : czm_getLambertDiffuse,\n czm_getSpecular : czm_getSpecular,\n czm_getWaterNoise : czm_getWaterNoise,\n czm_HSBToRGB : czm_HSBToRGB,\n czm_HSLToRGB : czm_HSLToRGB,\n czm_hue : czm_hue,\n czm_inverseGamma : czm_inverseGamma,\n czm_isEmpty : czm_isEmpty,\n czm_isFull : czm_isFull,\n czm_latitudeToWebMercatorFraction : czm_latitudeToWebMercatorFraction,\n czm_lineDistance : czm_lineDistance,\n czm_luminance : czm_luminance,\n czm_metersPerPixel : czm_metersPerPixel,\n czm_modelToWindowCoordinates : czm_modelToWindowCoordinates,\n czm_multiplyWithColorBalance : czm_multiplyWithColorBalance,\n czm_nearFarScalar : czm_nearFarScalar,\n czm_octDecode : czm_octDecode,\n czm_packDepth : czm_packDepth,\n czm_phong : czm_phong,\n czm_planeDistance : czm_planeDistance,\n czm_pointAlongRay : czm_pointAlongRay,\n czm_rayEllipsoidIntersectionInterval : czm_rayEllipsoidIntersectionInterval,\n czm_readDepth : czm_readDepth,\n czm_readNonPerspective : czm_readNonPerspective,\n czm_reverseLogDepth : czm_reverseLogDepth,\n czm_RGBToHSB : czm_RGBToHSB,\n czm_RGBToHSL : czm_RGBToHSL,\n czm_RGBToXYZ : czm_RGBToXYZ,\n czm_sampleOctahedralProjection : czm_sampleOctahedralProjection,\n czm_saturation : czm_saturation,\n czm_shadowDepthCompare : czm_shadowDepthCompare,\n czm_shadowVisibility : czm_shadowVisibility,\n czm_signNotZero : czm_signNotZero,\n czm_sphericalHarmonics : czm_sphericalHarmonics,\n czm_tangentToEyeSpaceMatrix : czm_tangentToEyeSpaceMatrix,\n czm_transformPlane : czm_transformPlane,\n czm_translateRelativeToEye : czm_translateRelativeToEye,\n czm_translucentPhong : czm_translucentPhong,\n czm_transpose : czm_transpose,\n czm_unpackDepth : czm_unpackDepth,\n czm_unpackFloat : czm_unpackFloat,\n czm_vertexLogDepth : czm_vertexLogDepth,\n czm_windowToEyeCoordinates : czm_windowToEyeCoordinates,\n czm_writeDepthClamp : czm_writeDepthClamp,\n czm_writeLogDepth : czm_writeLogDepth,\n czm_writeNonPerspective : czm_writeNonPerspective,\n czm_XYZToRGB : czm_XYZToRGB\n};\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for converting radians to degrees.\\n\\\n *\\n\\\n * @alias czm_degreesPerRadian\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.DEGREES_PER_RADIAN\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_degreesPerRadian = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float deg = czm_degreesPerRadian * rad;\\n\\\n */\\n\\\nconst float czm_degreesPerRadian = 57.29577951308232;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL vec2 constant for defining the depth range.\\n\\\n * This is a workaround to a bug where IE11 does not implement gl_DepthRange.\\n\\\n *\\n\\\n * @alias czm_depthRange\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * float depthRangeNear = czm_depthRange.near;\\n\\\n * float depthRangeFar = czm_depthRange.far;\\n\\\n *\\n\\\n */\\n\\\nconst czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0);\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.1\\n\\\n *\\n\\\n * @name czm_epsilon1\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon1 = 0.1;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.01\\n\\\n *\\n\\\n * @name czm_epsilon2\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon2 = 0.01;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.001\\n\\\n *\\n\\\n * @name czm_epsilon3\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon3 = 0.001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.0001\\n\\\n *\\n\\\n * @name czm_epsilon4\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon4 = 0.0001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.00001\\n\\\n *\\n\\\n * @name czm_epsilon5\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon5 = 0.00001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.000001\\n\\\n *\\n\\\n * @name czm_epsilon6\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon6 = 0.000001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.0000001\\n\\\n *\\n\\\n * @name czm_epsilon7\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon7 = 0.0000001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_infinity\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp?\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>1/pi</code>.\\n\\\n *\\n\\\n * @alias czm_oneOverPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.ONE_OVER_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_oneOverPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 1.0 / czm_oneOverPi;\\n\\\n */\\n\\\nconst float czm_oneOverPi = 0.3183098861837907;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>1/2pi</code>.\\n\\\n *\\n\\\n * @alias czm_oneOverTwoPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.ONE_OVER_TWO_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_oneOverTwoPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 2.0 * czm_oneOverTwoPi;\\n\\\n */\\n\\\nconst float czm_oneOverTwoPi = 0.15915494309189535;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE}\\n\\\n *\\n\\\n * @name czm_passCesium3DTile\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTile = 4.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passCesium3DTileClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTileClassification = 5.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW}\\n\\\n *\\n\\\n * @name czm_passCesium3DTileClassificationIgnoreShow\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTileClassificationIgnoreShow = 6.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passClassification = 7.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#COMPUTE}\\n\\\n *\\n\\\n * @name czm_passCompute\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCompute = 1.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#ENVIRONMENT}\\n\\\n *\\n\\\n * @name czm_passEnvironment\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passEnvironment = 0.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#GLOBE}\\n\\\n *\\n\\\n * @name czm_passGlobe\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passGlobe = 2.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#OPAQUE}\\n\\\n *\\n\\\n * @name czm_passOpaque\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passOpaque = 7.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#OVERLAY}\\n\\\n *\\n\\\n * @name czm_passOverlay\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passOverlay = 9.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passTerrainClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passTerrainClassification = 3.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#TRANSLUCENT}\\n\\\n *\\n\\\n * @name czm_passTranslucent\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passTranslucent = 8.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>Math.PI</code>.\\n\\\n *\\n\\\n * @alias czm_pi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_pi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float twoPi = 2.0 * czm_pi;\\n\\\n */\\n\\\nconst float czm_pi = 3.141592653589793;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/4</code>.\\n\\\n *\\n\\\n * @alias czm_piOverFour\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_FOUR\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverFour = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 4.0 * czm_piOverFour;\\n\\\n */\\n\\\nconst float czm_piOverFour = 0.7853981633974483;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/6</code>.\\n\\\n *\\n\\\n * @alias czm_piOverSix\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_SIX\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverSix = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 6.0 * czm_piOverSix;\\n\\\n */\\n\\\nconst float czm_piOverSix = 0.5235987755982988;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/3</code>.\\n\\\n *\\n\\\n * @alias czm_piOverThree\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_THREE\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverThree = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 3.0 * czm_piOverThree;\\n\\\n */\\n\\\nconst float czm_piOverThree = 1.0471975511965976;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/2</code>.\\n\\\n *\\n\\\n * @alias czm_piOverTwo\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_TWO\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverTwo = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 2.0 * czm_piOverTwo;\\n\\\n */\\n\\\nconst float czm_piOverTwo = 1.5707963267948966;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for converting degrees to radians.\\n\\\n *\\n\\\n * @alias czm_radiansPerDegree\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.RADIANS_PER_DEGREE\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_radiansPerDegree = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float rad = czm_radiansPerDegree * deg;\\n\\\n */\\n\\\nconst float czm_radiansPerDegree = 0.017453292519943295;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the 2D {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneMode2D\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneMode3D\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneMode2D = 2.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the 3D {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneMode3D\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneMode3D = 3.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the Columbus View {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneModeColumbusView\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneMode3D\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneModeColumbusView = 1.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the Morphing {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneModeMorphing\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneMode3D\\n\\\n */\\n\\\nconst float czm_sceneModeMorphing = 0.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for one solar radius.\\n\\\n *\\n\\\n * @alias czm_solarRadius\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.SOLAR_RADIUS\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_solarRadius = ...;\\n\\\n */\\n\\\nconst float czm_solarRadius = 695500000.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>3pi/2</code>.\\n\\\n *\\n\\\n * @alias czm_threePiOver2\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.THREE_PI_OVER_TWO\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_threePiOver2 = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = (2.0 / 3.0) * czm_threePiOver2;\\n\\\n */\\n\\\nconst float czm_threePiOver2 = 4.71238898038469;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>2pi</code>.\\n\\\n *\\n\\\n * @alias czm_twoPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.TWO_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_twoPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = czm_twoPi / 2.0;\\n\\\n */\\n\\\nconst float czm_twoPi = 6.283185307179586;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The maximum latitude, in radians, both North and South, supported by a Web Mercator\\n\\\n * (EPSG:3857) projection. Technically, the Mercator projection is defined\\n\\\n * for any latitude up to (but not including) 90 degrees, but it makes sense\\n\\\n * to cut it off sooner because it grows exponentially with increasing latitude.\\n\\\n * The logic behind this particular cutoff value, which is the one used by\\n\\\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\\n\\\n * square. That is, the rectangle is equal in the X and Y directions.\\n\\\n *\\n\\\n * The constant value is computed as follows:\\n\\\n * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))\\n\\\n *\\n\\\n * @name czm_webMercatorMaxLatitude\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_webMercatorMaxLatitude = 1.4844222297453324;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @name czm_depthRangeStruct\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_depthRangeStruct\\n\\\n{\\n\\\n float near;\\n\\\n float far;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.\\n\\\n *\\n\\\n * @name czm_material\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @property {vec3} diffuse Incoming light that scatters evenly in all directions.\\n\\\n * @property {float} specular Intensity of incoming light reflecting in a single direction.\\n\\\n * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.\\n\\\n * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.\\n\\\n * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.\\n\\\n * @property {float} alpha Opacity of this material. 0.0 is completely transparent; 1.0 is completely opaque.\\n\\\n */\\n\\\nstruct czm_material\\n\\\n{\\n\\\n vec3 diffuse;\\n\\\n float specular;\\n\\\n float shininess;\\n\\\n vec3 normal;\\n\\\n vec3 emission;\\n\\\n float alpha;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Used as input to every material's czm_getMaterial function.\\n\\\n *\\n\\\n * @name czm_materialInput\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @property {float} s 1D texture coordinates.\\n\\\n * @property {vec2} st 2D texture coordinates.\\n\\\n * @property {vec3} str 3D texture coordinates.\\n\\\n * @property {vec3} normalEC Unperturbed surface normal in eye coordinates.\\n\\\n * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.\\n\\\n * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye.\\n\\\n * @property {float} height The height of the terrain in meters above or below the WGS84 ellipsoid. Only available for globe materials.\\n\\\n * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.\\n\\\n * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.\\n\\\n */\\n\\\nstruct czm_materialInput\\n\\\n{\\n\\\n float s;\\n\\\n vec2 st;\\n\\\n vec3 str;\\n\\\n vec3 normalEC;\\n\\\n mat3 tangentToEyeMatrix;\\n\\\n vec3 positionToEyeEC;\\n\\\n float height;\\n\\\n float slope;\\n\\\n float aspect;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_ray\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_ray\\n\\\n{\\n\\\n vec3 origin;\\n\\\n vec3 direction;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_raySegment\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_raySegment\\n\\\n{\\n\\\n float start;\\n\\\n float stop;\\n\\\n};\\n\\\n\\n\\\n/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_emptyRaySegment\\n\\\n * @glslConstant \\n\\\n */\\n\\\nconst czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);\\n\\\n\\n\\\n/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_fullRaySegment\\n\\\n * @glslConstant \\n\\\n */\\n\\\nconst czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"struct czm_shadowParameters\\n\\\n{\\n\\\n#ifdef USE_CUBE_MAP_SHADOW\\n\\\n vec3 texCoords;\\n\\\n#else\\n\\\n vec2 texCoords;\\n\\\n#endif\\n\\\n\\n\\\n float depthBias;\\n\\\n float depth;\\n\\\n float nDotL;\\n\\\n vec2 texelStepSize;\\n\\\n float normalShadingSmooth;\\n\\\n float darkness;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See:\\n\\\n// https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/\\n\\\n\\n\\\nvec3 czm_acesTonemapping(vec3 color) {\\n\\\n float g = 0.985;\\n\\\n float a = 0.065;\\n\\\n float b = 0.0001;\\n\\\n float c = 0.433;\\n\\\n float d = 0.238;\\n\\\n\\n\\\n color = (color * (color + a) - b) / (color * (g * color + c) + d);\\n\\\n\\n\\\n color = clamp(color, 0.0, 1.0);\\n\\\n\\n\\\n return color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nfloat czm_alphaWeight(float a)\\n\\\n{\\n\\\n float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\\n\\\n\\n\\\n // See Weighted Blended Order-Independent Transparency for examples of different weighting functions:\\n\\\n // http://jcgt.org/published/0002/02/09/\\n\\\n return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0))));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Procedural anti-aliasing by blurring two colors that meet at a sharp edge.\\n\\\n *\\n\\\n * @name czm_antialias\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} color1 The color on one side of the edge.\\n\\\n * @param {vec4} color2 The color on the other side of the edge.\\n\\\n * @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>.\\n\\\n * @param {float} dist The distance to the edge in texture coordinates.\\n\\\n * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors.\\n\\\n * @returns {vec4} The anti-aliased color.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor);\\n\\\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist);\\n\\\n *\\n\\\n * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space\\n\\\n * float dist = abs(textureCoordinates.t - 0.5);\\n\\\n * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t));\\n\\\n * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1);\\n\\\n */\\n\\\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor)\\n\\\n{\\n\\\n float val1 = clamp(dist / fuzzFactor, 0.0, 1.0);\\n\\\n float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0);\\n\\\n val1 = val1 * (1.0 - val2);\\n\\\n val1 = val1 * val1 * (3.0 - (2.0 * val1));\\n\\\n val1 = pow(val1, 0.5); //makes the transition nicer\\n\\\n \\n\\\n vec4 midColor = (color1 + color2) * 0.5;\\n\\\n return mix(midColor, currentColor, val1);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist)\\n\\\n{\\n\\\n return czm_antialias(color1, color2, currentColor, dist, 0.1);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Approximately computes spherical coordinates given a normal.\\n\\\n * Uses approximate inverse trigonometry for speed and consistency,\\n\\\n * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU.\\n\\\n *\\n\\\n * @name czm_approximateSphericalCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normal arbitrary-length normal.\\n\\\n *\\n\\\n * @returns {vec2} Approximate latitude and longitude spherical coordinates.\\n\\\n */\\n\\\nvec2 czm_approximateSphericalCoordinates(vec3 normal) {\\n\\\n // Project into plane with vertical for latitude\\n\\\n float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z);\\n\\\n float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y);\\n\\\n return vec2(latitudeApproximation, longitudeApproximation);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if the fragment is back facing\\n\\\n *\\n\\\n * @name czm_backFacing\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>.\\n\\\n */\\n\\\nbool czm_backFacing()\\n\\\n{\\n\\\n // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494.\\n\\\n return gl_FrontFacing == false;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a float expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {float} a Value to return if the comparison is true.\\n\\\n * @param {float} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {float} equivalent of comparison ? a : b\\n\\\n */\\n\\\nfloat czm_branchFreeTernary(bool comparison, float a, float b) {\\n\\\n float useA = float(comparison);\\n\\\n return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec2 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec2} a Value to return if the comparison is true.\\n\\\n * @param {vec2} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec2} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) {\\n\\\n float useA = float(comparison);\\n\\\n return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec3 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec3} a Value to return if the comparison is true.\\n\\\n * @param {vec3} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec3} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) {\\n\\\n float useA = float(comparison);\\n\\\n return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec4 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec3} a Value to return if the comparison is true.\\n\\\n * @param {vec3} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec3} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) {\\n\\\n float useA = float(comparison);\\n\\\n return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nvec4 czm_cascadeColor(vec4 weights)\\n\\\n{\\n\\\n return vec4(1.0, 0.0, 0.0, 1.0) * weights.x +\\n\\\n vec4(0.0, 1.0, 0.0, 1.0) * weights.y +\\n\\\n vec4(0.0, 0.0, 1.0, 1.0) * weights.z +\\n\\\n vec4(1.0, 0.0, 1.0, 1.0) * weights.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform vec4 shadowMap_cascadeDistances;\\n\\\n\\n\\\nfloat czm_cascadeDistance(vec4 weights)\\n\\\n{\\n\\\n return dot(shadowMap_cascadeDistances, weights);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform mat4 shadowMap_cascadeMatrices[4];\\n\\\n\\n\\\nmat4 czm_cascadeMatrix(vec4 weights)\\n\\\n{\\n\\\n return shadowMap_cascadeMatrices[0] * weights.x +\\n\\\n shadowMap_cascadeMatrices[1] * weights.y +\\n\\\n shadowMap_cascadeMatrices[2] * weights.z +\\n\\\n shadowMap_cascadeMatrices[3] * weights.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform vec4 shadowMap_cascadeSplits[2];\\n\\\n\\n\\\nvec4 czm_cascadeWeights(float depthEye)\\n\\\n{\\n\\\n // One component is set to 1.0 and all others set to 0.0.\\n\\\n vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye));\\n\\\n vec4 far = step(depthEye, shadowMap_cascadeSplits[1]);\\n\\\n return near * far;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_columbusViewMorph\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time)\\n\\\n{\\n\\\n // Just linear for now.\\n\\\n vec3 p = mix(position2D.xyz, position3D.xyz, time);\\n\\\n return vec4(p, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns a position in model coordinates relative to eye taking into\\n\\\n * account the current scene mode: 3D, 2D, or Columbus view.\\n\\\n * <p>\\n\\\n * This uses standard position attributes, <code>position3DHigh</code>, \\n\\\n * <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>, \\n\\\n * and should be used when writing a vertex shader for an {@link Appearance}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_computePosition\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @returns {vec4} The position relative to eye.\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 p = czm_computePosition();\\n\\\n * v_positionEC = (czm_modelViewRelativeToEye * p).xyz;\\n\\\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n *\\n\\\n * @see czm_translateRelativeToEye\\n\\\n */\\n\\\nvec4 czm_computePosition();\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec2 cordic(float angle)\\n\\\n{\\n\\\n// Scale the vector by the appropriate factor for the 24 iterations to follow.\\n\\\n vec2 vector = vec2(6.0725293500888267e-1, 0.0);\\n\\\n// Iteration 1\\n\\\n float sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n // float factor = sense * 1.0; // 2^-0\\n\\\n mat2 rotation = mat2(1.0, sense, -sense, 1.0);\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 7.8539816339744828e-1; // atan(2^-0)\\n\\\n// Iteration 2\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n float factor = sense * 5.0e-1; // 2^-1\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 4.6364760900080609e-1; // atan(2^-1)\\n\\\n// Iteration 3\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 2.5e-1; // 2^-2\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 2.4497866312686414e-1; // atan(2^-2)\\n\\\n// Iteration 4\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.25e-1; // 2^-3\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.2435499454676144e-1; // atan(2^-3)\\n\\\n// Iteration 5\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 6.25e-2; // 2^-4\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 6.2418809995957350e-2; // atan(2^-4)\\n\\\n// Iteration 6\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 3.125e-2; // 2^-5\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 3.1239833430268277e-2; // atan(2^-5)\\n\\\n// Iteration 7\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.5625e-2; // 2^-6\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.5623728620476831e-2; // atan(2^-6)\\n\\\n// Iteration 8\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 7.8125e-3; // 2^-7\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 7.8123410601011111e-3; // atan(2^-7)\\n\\\n// Iteration 9\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 3.90625e-3; // 2^-8\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 3.9062301319669718e-3; // atan(2^-8)\\n\\\n// Iteration 10\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.953125e-3; // 2^-9\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.9531225164788188e-3; // atan(2^-9)\\n\\\n// Iteration 11\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 9.765625e-4; // 2^-10\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 9.7656218955931946e-4; // atan(2^-10)\\n\\\n// Iteration 12\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 4.8828125e-4; // 2^-11\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 4.8828121119489829e-4; // atan(2^-11)\\n\\\n// Iteration 13\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 2.44140625e-4; // 2^-12\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 2.4414062014936177e-4; // atan(2^-12)\\n\\\n// Iteration 14\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.220703125e-4; // 2^-13\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.2207031189367021e-4; // atan(2^-13)\\n\\\n// Iteration 15\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 6.103515625e-5; // 2^-14\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 6.1035156174208773e-5; // atan(2^-14)\\n\\\n// Iteration 16\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 3.0517578125e-5; // 2^-15\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 3.0517578115526096e-5; // atan(2^-15)\\n\\\n// Iteration 17\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.52587890625e-5; // 2^-16\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.5258789061315762e-5; // atan(2^-16)\\n\\\n// Iteration 18\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 7.62939453125e-6; // 2^-17\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 7.6293945311019700e-6; // atan(2^-17)\\n\\\n// Iteration 19\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 3.814697265625e-6; // 2^-18\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 3.8146972656064961e-6; // atan(2^-18)\\n\\\n// Iteration 20\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.9073486328125e-6; // 2^-19\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 1.9073486328101870e-6; // atan(2^-19)\\n\\\n// Iteration 21\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 9.5367431640625e-7; // 2^-20\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 9.5367431640596084e-7; // atan(2^-20)\\n\\\n// Iteration 22\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 4.76837158203125e-7; // 2^-21\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 4.7683715820308884e-7; // atan(2^-21)\\n\\\n// Iteration 23\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 2.384185791015625e-7; // 2^-22\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n angle -= sense * 2.3841857910155797e-7; // atan(2^-22)\\n\\\n// Iteration 24\\n\\\n sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n factor = sense * 1.1920928955078125e-7; // 2^-23\\n\\\n rotation[0][1] = factor;\\n\\\n rotation[1][0] = -factor;\\n\\\n vector = rotation * vector;\\n\\\n// angle -= sense * 1.1920928955078068e-7; // atan(2^-23)\\n\\\n\\n\\\n return vector;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes the cosine and sine of the provided angle using the CORDIC algorithm.\\n\\\n *\\n\\\n * @name czm_cosineAndSine\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} angle The angle in radians.\\n\\\n *\\n\\\n * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).\\n\\\n *\\n\\\n * @example\\n\\\n * vec2 v = czm_cosineAndSine(czm_piOverSix);\\n\\\n * float cosine = v.x;\\n\\\n * float sine = v.y;\\n\\\n */\\n\\\nvec2 czm_cosineAndSine(float angle)\\n\\\n{\\n\\\n if (angle < -czm_piOverTwo || angle > czm_piOverTwo)\\n\\\n {\\n\\\n if (angle < 0.0)\\n\\\n {\\n\\\n return -cordic(angle + czm_pi);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n return -cordic(angle - czm_pi);\\n\\\n }\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n return cordic(angle);\\n\\\n }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Decompresses texture coordinates that were packed into a single float.\\n\\\n *\\n\\\n * @name czm_decompressTextureCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} encoded The compressed texture coordinates.\\n\\\n * @returns {vec2} The decompressed texture coordinates.\\n\\\n */\\n\\\n vec2 czm_decompressTextureCoordinates(float encoded)\\n\\\n {\\n\\\n float temp = encoded / 4096.0;\\n\\\n float xZeroTo4095 = floor(temp);\\n\\\n float stx = xZeroTo4095 / 4095.0;\\n\\\n float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0;\\n\\\n return vec2(stx, sty);\\n\\\n }\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// emulated noperspective\\n\\\n#ifndef LOG_DEPTH\\n\\\nvarying float v_WindowZ;\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Clamps a vertex to the near and far planes.\\n\\\n *\\n\\\n * @name czm_depthClamp\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} coords The vertex in clip coordinates.\\n\\\n * @returns {vec4} The vertex clipped to the near and far planes.\\n\\\n *\\n\\\n * @example\\n\\\n * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0));\\n\\\n *\\n\\\n * @see czm_writeDepthClamp\\n\\\n */\\n\\\nvec4 czm_depthClamp(vec4 coords)\\n\\\n{\\n\\\n#ifndef LOG_DEPTH\\n\\\n v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w;\\n\\\n coords.z = clamp(coords.z, -coords.w, +coords.w);\\n\\\n#endif\\n\\\n return coords;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system \\n\\\n * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the \\n\\\n * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.\\n\\\n * <br /><br />\\n\\\n * The ellipsoid is assumed to be centered at the model coordinate's origin.\\n\\\n *\\n\\\n * @name czm_eastNorthUpToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionMC The position on the ellipsoid in model coordinates.\\n\\\n * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.\\n\\\n *\\n\\\n * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.\\n\\\n *\\n\\\n * @example\\n\\\n * // Transform a vector defined in the east-north-up coordinate \\n\\\n * // system, (0, 0, 1) which is the surface normal, to eye \\n\\\n * // coordinates.\\n\\\n * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\\n\\\n * vec3 normalEC = m * vec3(0.0, 0.0, 1.0);\\n\\\n */\\n\\\nmat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)\\n\\\n{\\n\\\n vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates\\n\\\n vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordiantes\\n\\\n vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates\\n\\\n\\n\\\n return mat3(\\n\\\n tangentEC.x, tangentEC.y, tangentEC.z,\\n\\\n bitangentEC.x, bitangentEC.y, bitangentEC.z,\\n\\\n normalEC.x, normalEC.y, normalEC.z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_ellipsoidContainsPoint\\n\\\n * @glslFunction\\n\\\n *\\n\\\n */\\n\\\nbool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)\\n\\\n{\\n\\\n vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;\\n\\\n return (dot(scaled, scaled) <= 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_ellipsoidWgs84TextureCoordinates\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec2 czm_ellipsoidWgs84TextureCoordinates(vec3 normal)\\n\\\n{\\n\\\n return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>\\n\\\n * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs\\n\\\n * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,\\n\\\n * <code>vec3</code>s, or <code>vec4</code>s.\\n\\\n *\\n\\\n * @name czm_equalsEpsilon\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} left The first vector.\\n\\\n * @param {} right The second vector.\\n\\\n * @param {float} epsilon The epsilon to use for equality testing.\\n\\\n * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * bool czm_equalsEpsilon(float left, float right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);\\n\\\n */\\n\\\nbool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {\\n\\\n return all(lessThanEqual(abs(left - right), vec4(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {\\n\\\n return all(lessThanEqual(abs(left - right), vec3(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {\\n\\\n return all(lessThanEqual(abs(left - right), vec2(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(float left, float right, float epsilon) {\\n\\\n return (abs(left - right) <= epsilon);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_eyeOffset\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} positionEC DOC_TBA.\\n\\\n * @param {vec3} eyeOffset DOC_TBA.\\n\\\n *\\n\\\n * @returns {vec4} DOC_TBA.\\n\\\n */\\n\\\nvec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)\\n\\\n{\\n\\\n // This equation is approximate in x and y.\\n\\\n vec4 p = positionEC;\\n\\\n vec4 zEyeOffset = normalize(p) * eyeOffset.z;\\n\\\n p.xy += eyeOffset.xy + zEyeOffset.xy;\\n\\\n p.z += zEyeOffset.z;\\n\\\n return p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a position from eye to window coordinates. The transformation\\n\\\n * from eye to clip coordinates is done using {@link czm_projection}.\\n\\\n * The transform from normalized device coordinates to window coordinates is\\n\\\n * done using {@link czm_viewportTransformation}, which assumes a depth range\\n\\\n * of <code>near = 0</code> and <code>far = 1</code>.\\n\\\n * <br /><br />\\n\\\n * This transform is useful when there is a need to manipulate window coordinates\\n\\\n * in a vertex shader as done by {@link BillboardCollection}.\\n\\\n *\\n\\\n * @name czm_eyeToWindowCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} position The position in eye coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in window coordinates.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_projection\\n\\\n * @see czm_viewportTransformation\\n\\\n * @see BillboardCollection\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n */\\n\\\nvec4 czm_eyeToWindowCoordinates(vec4 positionEC)\\n\\\n{\\n\\\n vec4 q = czm_projection * positionEC; // clip coordinates\\n\\\n q.xyz /= q.w; // normalized device coordinates\\n\\\n q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\\n\\\n return q;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input.\\n\\\n *\\n\\\n * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on\\n\\\n * \\\"Efficient approximations for the arctangent function,\\\" Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\\n\\\n * Adapted from ShaderFastLibs under MIT License.\\n\\\n *\\n\\\n * Chosen for the following characteristics over range [0, 1]:\\n\\\n * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan)\\n\\\n * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator)\\n\\\n *\\n\\\n * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301);\\n\\\n * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2.\\n\\\n *\\n\\\n * @name czm_fastApproximateAtan\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} x Value between 0 and 1 inclusive.\\n\\\n *\\n\\\n * @returns {float} Approximation of atan(x)\\n\\\n */\\n\\\nfloat czm_fastApproximateAtan(float x) {\\n\\\n return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Approximation of atan2.\\n\\\n *\\n\\\n * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html\\n\\\n * However, we replaced their atan curve with Michael Drobot's (see above).\\n\\\n *\\n\\\n * @name czm_fastApproximateAtan\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} x Value between -1 and 1 inclusive.\\n\\\n * @param {float} y Value between -1 and 1 inclusive.\\n\\\n *\\n\\\n * @returns {float} Approximation of atan2(x, y)\\n\\\n */\\n\\\nfloat czm_fastApproximateAtan(float x, float y) {\\n\\\n // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications.\\n\\\n // So range-reduce using abs and by flipping whether x or y is on top.\\n\\\n float t = abs(x); // t used as swap and atan result.\\n\\\n float opposite = abs(y);\\n\\\n float adjacent = max(t, opposite);\\n\\\n opposite = min(t, opposite);\\n\\\n\\n\\\n t = czm_fastApproximateAtan(opposite / adjacent);\\n\\\n\\n\\\n // Undo range reduction\\n\\\n t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t);\\n\\\n t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t);\\n\\\n t = czm_branchFreeTernary(y < 0.0, -t, t);\\n\\\n return t;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Gets the color with fog at a distance from the camera.\\n\\\n *\\n\\\n * @name czm_fog\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} distanceToCamera The distance to the camera in meters.\\n\\\n * @param {vec3} color The original color.\\n\\\n * @param {vec3} fogColor The color of the fog.\\n\\\n *\\n\\\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\\n\\\n */\\n\\\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor)\\n\\\n{\\n\\\n float scalar = distanceToCamera * czm_fogDensity;\\n\\\n float fog = 1.0 - exp(-(scalar * scalar));\\n\\\n return mix(color, fogColor, fog);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Gets the color with fog at a distance from the camera.\\n\\\n *\\n\\\n * @name czm_fog\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} distanceToCamera The distance to the camera in meters.\\n\\\n * @param {vec3} color The original color.\\n\\\n * @param {vec3} fogColor The color of the fog.\\n\\\n * @param {float} fogModifierConstant A constant to modify the appearance of fog.\\n\\\n *\\n\\\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\\n\\\n */\\n\\\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant)\\n\\\n{\\n\\\n float scalar = distanceToCamera * czm_fogDensity;\\n\\\n float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant))));\\n\\\n return mix(color, fogColor, fog);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a color from RGB space to linear space.\\n\\\n *\\n\\\n * @name czm_gammaCorrect\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} color The color in RGB space.\\n\\\n * @returns {vec3} The color in linear space.\\n\\\n */\\n\\\nvec3 czm_gammaCorrect(vec3 color) {\\n\\\n#ifdef HDR\\n\\\n color = pow(color, vec3(czm_gamma));\\n\\\n#endif\\n\\\n return color;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_gammaCorrect(vec4 color) {\\n\\\n#ifdef HDR\\n\\\n color.rgb = pow(color.rgb, vec3(czm_gamma));\\n\\\n#endif\\n\\\n return color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_geodeticSurfaceNormal\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionOnEllipsoid DOC_TBA\\n\\\n * @param {vec3} ellipsoidCenter DOC_TBA\\n\\\n * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA\\n\\\n * \\n\\\n * @returns {vec3} DOC_TBA.\\n\\\n */\\n\\\nvec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)\\n\\\n{\\n\\\n return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * An czm_material with default values. Every material's czm_getMaterial\\n\\\n * should use this default material as a base for the material it returns.\\n\\\n * The default normal value is given by materialInput.normalEC.\\n\\\n *\\n\\\n * @name czm_getDefaultMaterial\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_materialInput} input The input used to construct the default material.\\n\\\n *\\n\\\n * @returns {czm_material} The default material.\\n\\\n *\\n\\\n * @see czm_materialInput\\n\\\n * @see czm_material\\n\\\n * @see czm_getMaterial\\n\\\n */\\n\\\nczm_material czm_getDefaultMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n czm_material material;\\n\\\n material.diffuse = vec3(0.0);\\n\\\n material.specular = 0.0;\\n\\\n material.shininess = 1.0;\\n\\\n material.normal = materialInput.normalEC;\\n\\\n material.emission = vec3(0.0);\\n\\\n material.alpha = 1.0;\\n\\\n return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Calculates the intensity of diffusely reflected light.\\n\\\n *\\n\\\n * @name czm_getLambertDiffuse\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates.\\n\\\n *\\n\\\n * @returns {float} The intensity of the diffuse reflection.\\n\\\n *\\n\\\n * @see czm_phong\\n\\\n *\\n\\\n * @example\\n\\\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\\n\\\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\\n\\\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\\n\\\n */\\n\\\nfloat czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC)\\n\\\n{\\n\\\n return max(dot(lightDirectionEC, normalEC), 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Calculates the specular intensity of reflected light.\\n\\\n *\\n\\\n * @name czm_getSpecular\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\\n\\\n * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates.\\n\\\n * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.\\n\\\n *\\n\\\n * @returns {float} The intensity of the specular highlight.\\n\\\n *\\n\\\n * @see czm_phong\\n\\\n *\\n\\\n * @example\\n\\\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\\n\\\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\\n\\\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\\n\\\n */\\n\\\nfloat czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)\\n\\\n{\\n\\\n vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);\\n\\\n float specular = max(dot(toReflectedLight, toEyeEC), 0.0);\\n\\\n\\n\\\n // pow has undefined behavior if both parameters <= 0.\\n\\\n // Prevent this by making sure shininess is at least czm_epsilon2.\\n\\\n return pow(specular, max(shininess, czm_epsilon2));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians)\\n\\\n{\\n\\\n float cosAngle = cos(angleInRadians);\\n\\\n float sinAngle = sin(angleInRadians);\\n\\\n\\n\\\n // time dependent sampling directions\\n\\\n vec2 s0 = vec2(1.0/17.0, 0.0);\\n\\\n vec2 s1 = vec2(-1.0/29.0, 0.0);\\n\\\n vec2 s2 = vec2(1.0/101.0, 1.0/59.0);\\n\\\n vec2 s3 = vec2(-1.0/109.0, -1.0/57.0);\\n\\\n\\n\\\n // rotate sampling direction by specified angle\\n\\\n s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y));\\n\\\n s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y));\\n\\\n s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y));\\n\\\n s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y));\\n\\\n\\n\\\n vec2 uv0 = (uv/103.0) + (time * s0);\\n\\\n vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23);\\n\\\n vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51);\\n\\\n vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71);\\n\\\n\\n\\\n uv0 = fract(uv0);\\n\\\n uv1 = fract(uv1);\\n\\\n uv2 = fract(uv2);\\n\\\n uv3 = fract(uv3);\\n\\\n vec4 noise = (texture2D(normalMap, uv0)) +\\n\\\n (texture2D(normalMap, uv1)) +\\n\\\n (texture2D(normalMap, uv2)) +\\n\\\n (texture2D(normalMap, uv3));\\n\\\n\\n\\\n // average and scale to between -1 and 1\\n\\\n return ((noise / 4.0) - 0.5) * 2.0;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an HSB color (hue, saturation, brightness) to RGB\\n\\\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\\n\\\n *\\n\\\n * @name czm_HSBToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} hsb The color in HSB.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n * hsb.z *= 0.1;\\n\\\n * rgb = czm_HSBToRGB(hsb);\\n\\\n */\\n\\\n\\n\\\nconst vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\\n\\\n\\n\\\nvec3 czm_HSBToRGB(vec3 hsb)\\n\\\n{\\n\\\n vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www);\\n\\\n return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an HSL color (hue, saturation, lightness) to RGB\\n\\\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\\n\\\n *\\n\\\n * @name czm_HSLToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in HSL.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsl = czm_RGBToHSL(rgb);\\n\\\n * hsl.z *= 0.1;\\n\\\n * rgb = czm_HSLToRGB(hsl);\\n\\\n */\\n\\\n\\n\\\nvec3 hueToRGB(float hue)\\n\\\n{\\n\\\n float r = abs(hue * 6.0 - 3.0) - 1.0;\\n\\\n float g = 2.0 - abs(hue * 6.0 - 2.0);\\n\\\n float b = 2.0 - abs(hue * 6.0 - 4.0);\\n\\\n return clamp(vec3(r, g, b), 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\nvec3 czm_HSLToRGB(vec3 hsl)\\n\\\n{\\n\\\n vec3 rgb = hueToRGB(hsl.x);\\n\\\n float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;\\n\\\n return (rgb - 0.5) * c + hsl.z;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Adjusts the hue of a color.\\n\\\n * \\n\\\n * @name czm_hue\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color.\\n\\\n * @param {float} adjustment The amount to adjust the hue of the color in radians.\\n\\\n *\\n\\\n * @returns {float} The color with the hue adjusted.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)\\n\\\n */\\n\\\nvec3 czm_hue(vec3 rgb, float adjustment)\\n\\\n{\\n\\\n const mat3 toYIQ = mat3(0.299, 0.587, 0.114,\\n\\\n 0.595716, -0.274453, -0.321263,\\n\\\n 0.211456, -0.522591, 0.311135);\\n\\\n const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,\\n\\\n 1.0, -0.2721, -0.6474,\\n\\\n 1.0, -1.107, 1.7046);\\n\\\n \\n\\\n vec3 yiq = toYIQ * rgb;\\n\\\n float hue = atan(yiq.z, yiq.y) + adjustment;\\n\\\n float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);\\n\\\n \\n\\\n vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));\\n\\\n return toRGB * color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a color in linear space to RGB space.\\n\\\n *\\n\\\n * @name czm_inverseGamma\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} color The color in linear space.\\n\\\n * @returns {vec3} The color in RGB space.\\n\\\n */\\n\\\nvec3 czm_inverseGamma(vec3 color) {\\n\\\n return pow(color, vec3(1.0 / czm_gamma));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if a time interval is empty.\\n\\\n *\\n\\\n * @name czm_isEmpty\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @param {czm_raySegment} interval The interval to test.\\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\\n\\\n *\\n\\\n * @example\\n\\\n * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true\\n\\\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\\n\\\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\\n\\\n */\\n\\\nbool czm_isEmpty(czm_raySegment interval)\\n\\\n{\\n\\\n return (interval.stop < 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if a time interval is empty.\\n\\\n *\\n\\\n * @name czm_isFull\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @param {czm_raySegment} interval The interval to test.\\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\\n\\\n *\\n\\\n * @example\\n\\\n * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true\\n\\\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\\n\\\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\\n\\\n */\\n\\\nbool czm_isFull(czm_raySegment interval)\\n\\\n{\\n\\\n return (interval.start == 0.0 && interval.stop == czm_infinity);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located.\\n\\\n *\\n\\\n * @name czm_latitudeToWebMercatorFraction\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} latitude The geodetic latitude, in radians.\\n\\\n * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle.\\n\\\n * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates.\\n\\\n *\\n\\\n * @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern\\n\\\n * boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return\\n\\\n * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection.\\n\\\n */ \\n\\\nfloat czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight)\\n\\\n{\\n\\\n float sinLatitude = sin(latitude);\\n\\\n float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));\\n\\\n \\n\\\n return (mercatorY - southMercatorY) * oneOverMercatorHeight;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes distance from an point in 2D to a line in 2D.\\n\\\n *\\n\\\n * @name czm_lineDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec2} point1 A point along the line.\\n\\\n * param {vec2} point2 A point along the line.\\n\\\n * param {vec2} point A point that may or may not be on the line.\\n\\\n * returns {float} The distance from the point to the line.\\n\\\n */\\n\\\nfloat czm_lineDistance(vec2 point1, vec2 point2, vec2 point) {\\n\\\n return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the luminance of a color. \\n\\\n *\\n\\\n * @name czm_luminance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} rgb The color.\\n\\\n * \\n\\\n * @returns {float} The luminance.\\n\\\n *\\n\\\n * @example\\n\\\n * float light = czm_luminance(vec3(0.0)); // 0.0\\n\\\n * float dark = czm_luminance(vec3(1.0)); // ~1.0 \\n\\\n */\\n\\\nfloat czm_luminance(vec3 rgb)\\n\\\n{\\n\\\n // Algorithm from Chapter 10 of Graphics Shaders.\\n\\\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n return dot(rgb, W);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the size of a pixel in meters at a distance from the eye.\\n\\\n * <p>\\n\\\n * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.\\n\\\n * </p>\\n\\\n * @name czm_metersPerPixel\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\\n\\\n * @param {float} pixelRatio The scaling factor from pixel space to coordinate space\\n\\\n *\\n\\\n * @returns {float} The meters per pixel at positionEC.\\n\\\n */\\n\\\nfloat czm_metersPerPixel(vec4 positionEC, float pixelRatio)\\n\\\n{\\n\\\n float width = czm_viewport.z;\\n\\\n float height = czm_viewport.w;\\n\\\n float pixelWidth;\\n\\\n float pixelHeight;\\n\\\n\\n\\\n float top = czm_frustumPlanes.x;\\n\\\n float bottom = czm_frustumPlanes.y;\\n\\\n float left = czm_frustumPlanes.z;\\n\\\n float right = czm_frustumPlanes.w;\\n\\\n\\n\\\n if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)\\n\\\n {\\n\\\n float frustumWidth = right - left;\\n\\\n float frustumHeight = top - bottom;\\n\\\n pixelWidth = frustumWidth / width;\\n\\\n pixelHeight = frustumHeight / height;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n float distanceToPixel = -positionEC.z;\\n\\\n float inverseNear = 1.0 / czm_currentFrustum.x;\\n\\\n float tanTheta = top * inverseNear;\\n\\\n pixelHeight = 2.0 * distanceToPixel * tanTheta / height;\\n\\\n tanTheta = right * inverseNear;\\n\\\n pixelWidth = 2.0 * distanceToPixel * tanTheta / width;\\n\\\n }\\n\\\n\\n\\\n return max(pixelWidth, pixelHeight) * pixelRatio;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes the size of a pixel in meters at a distance from the eye.\\n\\\n * <p>\\n\\\n * Use this version when scaling by pixel ratio.\\n\\\n * </p>\\n\\\n * @name czm_metersPerPixel\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\\n\\\n *\\n\\\n * @returns {float} The meters per pixel at positionEC.\\n\\\n */\\n\\\nfloat czm_metersPerPixel(vec4 positionEC)\\n\\\n{\\n\\\n return czm_metersPerPixel(positionEC, czm_pixelRatio);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a position from model to window coordinates. The transformation\\n\\\n * from model to clip coordinates is done using {@link czm_modelViewProjection}.\\n\\\n * The transform from normalized device coordinates to window coordinates is\\n\\\n * done using {@link czm_viewportTransformation}, which assumes a depth range\\n\\\n * of <code>near = 0</code> and <code>far = 1</code>.\\n\\\n * <br /><br />\\n\\\n * This transform is useful when there is a need to manipulate window coordinates\\n\\\n * in a vertex shader as done by {@link BillboardCollection}.\\n\\\n * <br /><br />\\n\\\n * This function should not be confused with {@link czm_viewportOrthographic},\\n\\\n * which is an orthographic projection matrix that transforms from window \\n\\\n * coordinates to clip coordinates.\\n\\\n *\\n\\\n * @name czm_modelToWindowCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} position The position in model coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in window coordinates.\\n\\\n *\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_modelViewProjection\\n\\\n * @see czm_viewportTransformation\\n\\\n * @see czm_viewportOrthographic\\n\\\n * @see BillboardCollection\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionWC = czm_modelToWindowCoordinates(positionMC);\\n\\\n */\\n\\\nvec4 czm_modelToWindowCoordinates(vec4 position)\\n\\\n{\\n\\\n vec4 q = czm_modelViewProjection * position; // clip coordinates\\n\\\n q.xyz /= q.w; // normalized device coordinates\\n\\\n q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\\n\\\n return q;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_multiplyWithColorBalance\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)\\n\\\n{\\n\\\n // Algorithm from Chapter 10 of Graphics Shaders.\\n\\\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n \\n\\\n vec3 target = left * right;\\n\\\n float leftLuminance = dot(left, W);\\n\\\n float rightLuminance = dot(right, W);\\n\\\n float targetLuminance = dot(target, W);\\n\\\n \\n\\\n return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a value that scales with distance. The scaling is clamped at the near and\\n\\\n * far distances, and does not extrapolate. This function works with the\\n\\\n * {@link NearFarScalar} JavaScript class.\\n\\\n *\\n\\\n * @name czm_nearFarScalar\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w).\\n\\\n * @param {float} cameraDistSq The square of the current distance from the camera.\\n\\\n *\\n\\\n * @returns {float} The value at this distance.\\n\\\n */\\n\\\nfloat czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq)\\n\\\n{\\n\\\n float valueAtMin = nearFarScalar.y;\\n\\\n float valueAtMax = nearFarScalar.w;\\n\\\n float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;\\n\\\n float farDistanceSq = nearFarScalar.z * nearFarScalar.z;\\n\\\n\\n\\\n float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);\\n\\\n\\n\\\n t = pow(clamp(t, 0.0, 1.0), 0.2);\\n\\\n\\n\\\n return mix(valueAtMin, valueAtMax, t);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \" /**\\n\\\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {vec2} encoded The oct-encoded, unit-length vector\\n\\\n * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\\n\\\n * @returns {vec3} The decoded and normalized vector\\n\\\n */\\n\\\n vec3 czm_octDecode(vec2 encoded, float range)\\n\\\n {\\n\\\n if (encoded.x == 0.0 && encoded.y == 0.0) {\\n\\\n return vec3(0.0, 0.0, 0.0);\\n\\\n }\\n\\\n\\n\\\n encoded = encoded / range * 2.0 - 1.0;\\n\\\n vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));\\n\\\n if (v.z < 0.0)\\n\\\n {\\n\\\n v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy);\\n\\\n }\\n\\\n\\n\\\n return normalize(v);\\n\\\n }\\n\\\n\\n\\\n/**\\n\\\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {vec2} encoded The oct-encoded, unit-length vector\\n\\\n * @returns {vec3} The decoded and normalized vector\\n\\\n */\\n\\\n vec3 czm_octDecode(vec2 encoded)\\n\\\n {\\n\\\n return czm_octDecode(encoded, 255.0);\\n\\\n }\\n\\\n\\n\\\n /**\\n\\\n * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {float} encoded The oct-encoded, unit-length vector\\n\\\n * @returns {vec3} The decoded and normalized vector\\n\\\n */\\n\\\n vec3 czm_octDecode(float encoded)\\n\\\n {\\n\\\n float temp = encoded / 256.0;\\n\\\n float x = floor(temp);\\n\\\n float y = (temp - x) * 256.0;\\n\\\n return czm_octDecode(vec2(x, y));\\n\\\n }\\n\\\n\\n\\\n/**\\n\\\n * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {vec2} encoded The packed oct-encoded, unit-length vectors.\\n\\\n * @param {vec3} vector1 One decoded and normalized vector.\\n\\\n * @param {vec3} vector2 One decoded and normalized vector.\\n\\\n * @param {vec3} vector3 One decoded and normalized vector.\\n\\\n */\\n\\\n void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3)\\n\\\n {\\n\\\n float temp = encoded.x / 65536.0;\\n\\\n float x = floor(temp);\\n\\\n float encodedFloat1 = (temp - x) * 65536.0;\\n\\\n\\n\\\n temp = encoded.y / 65536.0;\\n\\\n float y = floor(temp);\\n\\\n float encodedFloat2 = (temp - y) * 65536.0;\\n\\\n\\n\\\n vector1 = czm_octDecode(encodedFloat1);\\n\\\n vector2 = czm_octDecode(encodedFloat2);\\n\\\n vector3 = czm_octDecode(vec2(x, y));\\n\\\n }\\n\\\n\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Packs a depth value into a vec3 that can be represented by unsigned bytes.\\n\\\n *\\n\\\n * @name czm_packDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} depth The floating-point depth.\\n\\\n * @returns {vec3} The packed depth.\\n\\\n */\\n\\\nvec4 czm_packDepth(float depth)\\n\\\n{\\n\\\n // See Aras Pranckevičius' post Encoding Floats to RGBA\\n\\\n // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\\n\\\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\\n\\\n enc = fract(enc);\\n\\\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\\n\\\n return enc;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material)\\n\\\n{\\n\\\n return czm_getLambertDiffuse(lightDirectionEC, material.normal);\\n\\\n}\\n\\\n\\n\\\nfloat czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material)\\n\\\n{\\n\\\n return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes a color using the Phong lighting model.\\n\\\n *\\n\\\n * @name czm_phong\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.\\n\\\n * @param {czm_material} material The fragment's material.\\n\\\n *\\n\\\n * @returns {vec4} The computed color.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 positionToEyeEC = // ...\\n\\\n * czm_material material = // ...\\n\\\n * vec3 lightDirectionEC = // ...\\n\\\n * gl_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC);\\n\\\n *\\n\\\n * @see czm_getMaterial\\n\\\n */\\n\\\nvec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n // Diffuse from directional light sources at eye (for top-down)\\n\\\n float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material);\\n\\\n if (czm_sceneMode == czm_sceneMode3D) {\\n\\\n // (and horizon views in 3D)\\n\\\n diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material);\\n\\\n }\\n\\\n\\n\\\n float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\\n\\\n\\n\\\n // Temporary workaround for adding ambient.\\n\\\n vec3 materialDiffuse = material.diffuse * 0.5;\\n\\\n\\n\\\n vec3 ambient = materialDiffuse;\\n\\\n vec3 color = ambient + material.emission;\\n\\\n color += materialDiffuse * diffuse * czm_lightColor;\\n\\\n color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n return vec4(color, material.alpha);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material);\\n\\\n float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\\n\\\n\\n\\\n vec3 ambient = vec3(0.0);\\n\\\n vec3 color = ambient + material.emission;\\n\\\n color += material.diffuse * diffuse * czm_lightColor;\\n\\\n color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n return vec4(color, material.alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes distance from a point to a plane.\\n\\\n *\\n\\\n * @name czm_planeDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js\\n\\\n * param {vec3} point A point in the same space as the plane.\\n\\\n * returns {float} The distance from the point to the plane.\\n\\\n */\\n\\\nfloat czm_planeDistance(vec4 plane, vec3 point) {\\n\\\n return (dot(plane.xyz, point) + plane.w);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes distance from a point to a plane.\\n\\\n *\\n\\\n * @name czm_planeDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js\\n\\\n * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js\\n\\\n * param {vec3} point A point in the same space as the plane.\\n\\\n * returns {float} The distance from the point to the plane.\\n\\\n */\\n\\\nfloat czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {\\n\\\n return (dot(planeNormal, point) + planeDistance);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero.\\n\\\n *\\n\\\n * @name czm_pointAlongRay\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_ray} ray The ray to compute the point along.\\n\\\n * @param {float} time The time along the ray.\\n\\\n * \\n\\\n * @returns {vec3} The point along the ray at the given time.\\n\\\n * \\n\\\n * @example\\n\\\n * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction\\n\\\n * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)\\n\\\n */\\n\\\nvec3 czm_pointAlongRay(czm_ray ray, float time)\\n\\\n{\\n\\\n return ray.origin + (time * ray.direction);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_rayEllipsoidIntersectionInterval\\n\\\n * @glslFunction\\n\\\n */\\n\\\nczm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii)\\n\\\n{\\n\\\n // ray and ellipsoid center in eye coordinates. radii in model coordinates.\\n\\\n vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;\\n\\\n vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;\\n\\\n\\n\\\n q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz;\\n\\\n\\n\\\n float q2 = dot(q, q);\\n\\\n float qw = dot(q, w);\\n\\\n\\n\\\n if (q2 > 1.0) // Outside ellipsoid.\\n\\\n {\\n\\\n if (qw >= 0.0) // Looking outward or tangent (0 intersections).\\n\\\n {\\n\\\n return czm_emptyRaySegment;\\n\\\n }\\n\\\n else // qw < 0.0.\\n\\\n {\\n\\\n float qw2 = qw * qw;\\n\\\n float difference = q2 - 1.0; // Positively valued.\\n\\\n float w2 = dot(w, w);\\n\\\n float product = w2 * difference;\\n\\\n\\n\\\n if (qw2 < product) // Imaginary roots (0 intersections).\\n\\\n {\\n\\\n return czm_emptyRaySegment;\\n\\\n }\\n\\\n else if (qw2 > product) // Distinct roots (2 intersections).\\n\\\n {\\n\\\n float discriminant = qw * qw - product;\\n\\\n float temp = -qw + sqrt(discriminant); // Avoid cancellation.\\n\\\n float root0 = temp / w2;\\n\\\n float root1 = difference / temp;\\n\\\n if (root0 < root1)\\n\\\n {\\n\\\n czm_raySegment i = czm_raySegment(root0, root1);\\n\\\n return i;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n czm_raySegment i = czm_raySegment(root1, root0);\\n\\\n return i;\\n\\\n }\\n\\\n }\\n\\\n else // qw2 == product. Repeated roots (2 intersections).\\n\\\n {\\n\\\n float root = sqrt(difference / w2);\\n\\\n czm_raySegment i = czm_raySegment(root, root);\\n\\\n return i;\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n else if (q2 < 1.0) // Inside ellipsoid (2 intersections).\\n\\\n {\\n\\\n float difference = q2 - 1.0; // Negatively valued.\\n\\\n float w2 = dot(w, w);\\n\\\n float product = w2 * difference; // Negatively valued.\\n\\\n float discriminant = qw * qw - product;\\n\\\n float temp = -qw + sqrt(discriminant); // Positively valued.\\n\\\n czm_raySegment i = czm_raySegment(0.0, temp / w2);\\n\\\n return i;\\n\\\n }\\n\\\n else // q2 == 1.0. On ellipsoid.\\n\\\n {\\n\\\n if (qw < 0.0) // Looking inward.\\n\\\n {\\n\\\n float w2 = dot(w, w);\\n\\\n czm_raySegment i = czm_raySegment(0.0, -qw / w2);\\n\\\n return i;\\n\\\n }\\n\\\n else // qw >= 0.0. Looking outward or tangent.\\n\\\n {\\n\\\n return czm_emptyRaySegment;\\n\\\n }\\n\\\n }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_readDepth(sampler2D depthTexture, vec2 texCoords)\\n\\\n{\\n\\\n return czm_reverseLogDepth(texture2D(depthTexture, texCoords).r);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Reads a value previously transformed with {@link czm_writeNonPerspective}\\n\\\n * by dividing it by `w`, the value used in the perspective divide.\\n\\\n * This function is intended to be called in a fragment shader to access a\\n\\\n * `varying` that should not be subject to perspective interpolation.\\n\\\n * For example, screen-space texture coordinates. The value should have been\\n\\\n * previously written in the vertex shader with a call to\\n\\\n * {@link czm_writeNonPerspective}.\\n\\\n *\\n\\\n * @name czm_readNonPerspective\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} value The non-perspective value to be read.\\n\\\n * @param {float} oneOverW One over the perspective divide value, `w`. Usually this is simply `gl_FragCoord.w`.\\n\\\n * @returns {float|vec2|vec3|vec4} The usable value.\\n\\\n */\\n\\\nfloat czm_readNonPerspective(float value, float oneOverW) {\\n\\\n return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_readNonPerspective(vec2 value, float oneOverW) {\\n\\\n return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec3 czm_readNonPerspective(vec3 value, float oneOverW) {\\n\\\n return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_readNonPerspective(vec4 value, float oneOverW) {\\n\\\n return value * oneOverW;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_reverseLogDepth(float logZ)\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n float near = czm_currentFrustum.x;\\n\\\n float far = czm_currentFrustum.y;\\n\\\n float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne;\\n\\\n float depthFromNear = pow(2.0, log2Depth) - 1.0;\\n\\\n return far * (1.0 - near / (depthFromNear + near)) / (far - near);\\n\\\n#endif\\n\\\n return logZ;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to HSB (hue, saturation, brightness)\\n\\\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\\n\\\n *\\n\\\n * @name czm_RGBToHSB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in HSB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n * hsb.z *= 0.1;\\n\\\n * rgb = czm_HSBToRGB(hsb);\\n\\\n */\\n\\\n\\n\\\nconst vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\\n\\\n\\n\\\nvec3 czm_RGBToHSB(vec3 rgb)\\n\\\n{\\n\\\n vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));\\n\\\n vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\\n\\\n\\n\\\n float d = q.x - min(q.w, q.y);\\n\\\n return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to HSL (hue, saturation, lightness)\\n\\\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\\n\\\n *\\n\\\n * @name czm_RGBToHSL\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in HSL.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsl = czm_RGBToHSL(rgb);\\n\\\n * hsl.z *= 0.1;\\n\\\n * rgb = czm_HSLToRGB(hsl);\\n\\\n */\\n\\\n \\n\\\nvec3 RGBtoHCV(vec3 rgb)\\n\\\n{\\n\\\n // Based on work by Sam Hocevar and Emil Persson\\n\\\n vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);\\n\\\n vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);\\n\\\n float c = q.x - min(q.w, q.y);\\n\\\n float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z);\\n\\\n return vec3(h, c, q.x);\\n\\\n}\\n\\\n\\n\\\nvec3 czm_RGBToHSL(vec3 rgb)\\n\\\n{\\n\\\n vec3 hcv = RGBtoHCV(rgb);\\n\\\n float l = hcv.z - hcv.y * 0.5;\\n\\\n float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7);\\n\\\n return vec3(hcv.x, s, l);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to CIE Yxy.\\n\\\n * <p>The conversion is described in\\n\\\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\\n\\\n * </p>\\n\\\n * \\n\\\n * @name czm_RGBToXYZ\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in CIE Yxy.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 xyz = czm_RGBToXYZ(rgb);\\n\\\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\\n\\\n * rgb = czm_XYZToRGB(xyz);\\n\\\n */\\n\\\nvec3 czm_RGBToXYZ(vec3 rgb)\\n\\\n{\\n\\\n const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193,\\n\\\n 0.3576, 0.7152, 0.1192,\\n\\\n 0.1805, 0.0722, 0.9505);\\n\\\n vec3 xyz = RGB2XYZ * rgb;\\n\\\n vec3 Yxy;\\n\\\n Yxy.r = xyz.g;\\n\\\n float temp = dot(vec3(1.0), xyz);\\n\\\n Yxy.gb = xyz.rg / temp;\\n\\\n return Yxy;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Samples the 4 neighboring pixels and return the weighted average.\\n\\\n *\\n\\\n * @private\\n\\\n */\\n\\\nvec3 czm_sampleOctahedralProjectionWithFiltering(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod)\\n\\\n{\\n\\\n direction /= dot(vec3(1.0), abs(direction));\\n\\\n vec2 rev = abs(direction.zx) - vec2(1.0);\\n\\\n vec2 neg = vec2(direction.x < 0.0 ? rev.x : -rev.x,\\n\\\n direction.z < 0.0 ? rev.y : -rev.y);\\n\\\n vec2 uv = direction.y < 0.0 ? neg : direction.xz;\\n\\\n vec2 coord = 0.5 * uv + vec2(0.5);\\n\\\n vec2 pixel = 1.0 / textureSize;\\n\\\n\\n\\\n if (lod > 0.0)\\n\\\n {\\n\\\n // Each subseqeuent mip level is half the size\\n\\\n float scale = 1.0 / pow(2.0, lod);\\n\\\n float offset = ((textureSize.y + 1.0) / textureSize.x);\\n\\\n\\n\\\n coord.x *= offset;\\n\\\n coord *= scale;\\n\\\n\\n\\\n coord.x += offset + pixel.x;\\n\\\n coord.y += (1.0 - (1.0 / pow(2.0, lod - 1.0))) + pixel.y * (lod - 1.0) * 2.0;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n coord.x *= (textureSize.y / textureSize.x);\\n\\\n }\\n\\\n\\n\\\n // Do bilinear filtering\\n\\\n #ifndef OES_texture_float_linear\\n\\\n vec3 color1 = texture2D(projectedMap, coord + vec2(0.0, pixel.y)).rgb;\\n\\\n vec3 color2 = texture2D(projectedMap, coord + vec2(pixel.x, 0.0)).rgb;\\n\\\n vec3 color3 = texture2D(projectedMap, coord + pixel).rgb;\\n\\\n vec3 color4 = texture2D(projectedMap, coord).rgb;\\n\\\n\\n\\\n vec2 texturePosition = coord * textureSize;\\n\\\n\\n\\\n float fu = fract(texturePosition.x);\\n\\\n float fv = fract(texturePosition.y);\\n\\\n\\n\\\n vec3 average1 = mix(color4, color2, fu);\\n\\\n vec3 average2 = mix(color1, color3, fu);\\n\\\n\\n\\\n vec3 color = mix(average1, average2, fv);\\n\\\n #else\\n\\\n vec3 color = texture2D(projectedMap, coord).rgb;\\n\\\n #endif\\n\\\n\\n\\\n return color;\\n\\\n}\\n\\\n\\n\\\n\\n\\\n/**\\n\\\n * Samples from a cube map that has been projected using an octahedral projection from the given direction.\\n\\\n *\\n\\\n * @name czm_sampleOctahedralProjection\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {sampler2D} projectedMap The texture with the octahedral projected cube map.\\n\\\n * @param {vec2} textureSize The width and height dimensions in pixels of the projected map.\\n\\\n * @param {vec3} direction The normalized direction used to sample the cube map.\\n\\\n * @param {float} lod The level of detail to sample.\\n\\\n * @param {float} maxLod The maximum level of detail.\\n\\\n * @returns {vec3} The color of the cube map at the direction.\\n\\\n */\\n\\\nvec3 czm_sampleOctahedralProjection(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod, float maxLod) {\\n\\\n float currentLod = floor(lod + 0.5);\\n\\\n float nextLod = min(currentLod + 1.0, maxLod);\\n\\\n\\n\\\n vec3 colorCurrentLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, currentLod);\\n\\\n vec3 colorNextLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, nextLod);\\n\\\n\\n\\\n return mix(colorNextLod, colorCurrentLod, nextLod - lod);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Adjusts the saturation of a color.\\n\\\n * \\n\\\n * @name czm_saturation\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color.\\n\\\n * @param {float} adjustment The amount to adjust the saturation of the color.\\n\\\n *\\n\\\n * @returns {float} The color with the saturation adjusted.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 greyScale = czm_saturation(color, 0.0);\\n\\\n * vec3 doubleSaturation = czm_saturation(color, 2.0);\\n\\\n */\\n\\\nvec3 czm_saturation(vec3 rgb, float adjustment)\\n\\\n{\\n\\\n // Algorithm from Chapter 16 of OpenGL Shading Language\\n\\\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n vec3 intensity = vec3(dot(rgb, W));\\n\\\n return mix(intensity, rgb, adjustment);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nfloat czm_sampleShadowMap(samplerCube shadowMap, vec3 d)\\n\\\n{\\n\\\n return czm_unpackDepth(textureCube(shadowMap, d));\\n\\\n}\\n\\\n\\n\\\nfloat czm_sampleShadowMap(sampler2D shadowMap, vec2 uv)\\n\\\n{\\n\\\n#ifdef USE_SHADOW_DEPTH_TEXTURE\\n\\\n return texture2D(shadowMap, uv).r;\\n\\\n#else\\n\\\n return czm_unpackDepth(texture2D(shadowMap, uv));\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\nfloat czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth)\\n\\\n{\\n\\\n return step(depth, czm_sampleShadowMap(shadowMap, uv));\\n\\\n}\\n\\\n\\n\\\nfloat czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth)\\n\\\n{\\n\\\n return step(depth, czm_sampleShadowMap(shadowMap, uv));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nfloat czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness)\\n\\\n{\\n\\\n#ifdef USE_NORMAL_SHADING\\n\\\n#ifdef USE_NORMAL_SHADING_SMOOTH\\n\\\n float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0);\\n\\\n#else\\n\\\n float strength = step(0.0, nDotL);\\n\\\n#endif\\n\\\n visibility *= strength;\\n\\\n#endif\\n\\\n\\n\\\n visibility = max(visibility, darkness);\\n\\\n return visibility;\\n\\\n}\\n\\\n\\n\\\n#ifdef USE_CUBE_MAP_SHADOW\\n\\\nfloat czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters)\\n\\\n{\\n\\\n float depthBias = shadowParameters.depthBias;\\n\\\n float depth = shadowParameters.depth;\\n\\\n float nDotL = shadowParameters.nDotL;\\n\\\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n\\\n float darkness = shadowParameters.darkness;\\n\\\n vec3 uvw = shadowParameters.texCoords;\\n\\\n\\n\\\n depth -= depthBias;\\n\\\n float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);\\n\\\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n\\\n}\\n\\\n#else\\n\\\nfloat czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters)\\n\\\n{\\n\\\n float depthBias = shadowParameters.depthBias;\\n\\\n float depth = shadowParameters.depth;\\n\\\n float nDotL = shadowParameters.nDotL;\\n\\\n float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n\\\n float darkness = shadowParameters.darkness;\\n\\\n vec2 uv = shadowParameters.texCoords;\\n\\\n\\n\\\n depth -= depthBias;\\n\\\n#ifdef USE_SOFT_SHADOWS\\n\\\n vec2 texelStepSize = shadowParameters.texelStepSize;\\n\\\n float radius = 1.0;\\n\\\n float dx0 = -texelStepSize.x * radius;\\n\\\n float dy0 = -texelStepSize.y * radius;\\n\\\n float dx1 = texelStepSize.x * radius;\\n\\\n float dy1 = texelStepSize.y * radius;\\n\\\n float visibility = (\\n\\\n czm_shadowDepthCompare(shadowMap, uv, depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) +\\n\\\n czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth)\\n\\\n ) * (1.0 / 9.0);\\n\\\n#else\\n\\\n float visibility = czm_shadowDepthCompare(shadowMap, uv, depth);\\n\\\n#endif\\n\\\n\\n\\\n return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL\\n\\\n * built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0.\\n\\\n * \\n\\\n * @name czm_signNotZero\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} value The value for which to determine the sign.\\n\\\n * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative.\\n\\\n */\\n\\\nfloat czm_signNotZero(float value)\\n\\\n{\\n\\\n return value >= 0.0 ? 1.0 : -1.0;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_signNotZero(vec2 value)\\n\\\n{\\n\\\n return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y));\\n\\\n}\\n\\\n\\n\\\nvec3 czm_signNotZero(vec3 value)\\n\\\n{\\n\\\n return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z));\\n\\\n}\\n\\\n\\n\\\nvec4 czm_signNotZero(vec4 value)\\n\\\n{\\n\\\n return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector.\\n\\\n * <p>\\n\\\n * The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22].\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_sphericalHarmonics\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normal The normalized direction.\\n\\\n * @param {vec3[9]} coefficients The third order spherical harmonic coefficients.\\n\\\n * @returns {vec3} The color at the direction.\\n\\\n *\\n\\\n * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf\\n\\\n */\\n\\\nvec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9])\\n\\\n{\\n\\\n const float c1 = 0.429043;\\n\\\n const float c2 = 0.511664;\\n\\\n const float c3 = 0.743125;\\n\\\n const float c4 = 0.886227;\\n\\\n const float c5 = 0.247708;\\n\\\n\\n\\\n vec3 L00 = coefficients[0];\\n\\\n vec3 L1_1 = coefficients[1];\\n\\\n vec3 L10 = coefficients[2];\\n\\\n vec3 L11 = coefficients[3];\\n\\\n vec3 L2_2 = coefficients[4];\\n\\\n vec3 L2_1 = coefficients[5];\\n\\\n vec3 L20 = coefficients[6];\\n\\\n vec3 L21 = coefficients[7];\\n\\\n vec3 L22 = coefficients[8];\\n\\\n\\n\\\n float x = normal.x;\\n\\\n float y = normal.y;\\n\\\n float z = normal.z;\\n\\\n\\n\\\n return c1 * L22 * (x * x - y * y) + c3 * L20 * z * z + c4 * L00 - c5 * L20 +\\n\\\n 2.0 * c1 * (L2_2 * x * y + L21 * x * z + L2_1 * y * z) +\\n\\\n 2.0 * c2 * (L11 * x + L1_1 * y + L10 * z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Creates a matrix that transforms vectors from tangent space to eye space.\\n\\\n *\\n\\\n * @name czm_tangentToEyeSpaceMatrix\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normalEC The normal vector in eye coordinates.\\n\\\n * @param {vec3} tangentEC The tangent vector in eye coordinates.\\n\\\n * @param {vec3} bitangentEC The bitangent vector in eye coordinates.\\n\\\n *\\n\\\n * @returns {mat3} The matrix that transforms from tangent space to eye space.\\n\\\n *\\n\\\n * @example\\n\\\n * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC);\\n\\\n * vec3 normal = tangentToEye * texture2D(normalMap, st).xyz;\\n\\\n */\\n\\\nmat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC)\\n\\\n{\\n\\\n vec3 normal = normalize(normalEC);\\n\\\n vec3 tangent = normalize(tangentEC);\\n\\\n vec3 bitangent = normalize(bitangentEC);\\n\\\n return mat3(tangent.x , tangent.y , tangent.z,\\n\\\n bitangent.x, bitangent.y, bitangent.z,\\n\\\n normal.x , normal.y , normal.z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec4 czm_transformPlane(vec4 clippingPlane, mat4 transform) {\\n\\\n vec3 transformedDirection = normalize((transform * vec4(clippingPlane.xyz, 0.0)).xyz);\\n\\\n vec3 transformedPosition = (transform * vec4(clippingPlane.xyz * -clippingPlane.w, 1.0)).xyz;\\n\\\n vec4 transformedPlane;\\n\\\n transformedPlane.xyz = transformedDirection;\\n\\\n transformedPlane.w = -dot(transformedDirection, transformedPosition);\\n\\\n return transformedPlane;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},\\n\\\n * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to\\n\\\n * be relative to the eye. As shown in the example, the position can then be transformed in eye\\n\\\n * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},\\n\\\n * respectively.\\n\\\n * <p>\\n\\\n * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as\\n\\\n * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_translateRelativeToEye\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} high The position's high bits.\\n\\\n * @param {vec3} low The position's low bits.\\n\\\n * @returns {vec3} The position translated to be relative to the camera's position.\\n\\\n *\\n\\\n * @example\\n\\\n * attribute vec3 positionHigh;\\n\\\n * attribute vec3 positionLow;\\n\\\n *\\n\\\n * void main()\\n\\\n * {\\n\\\n * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n * }\\n\\\n *\\n\\\n * @see czm_modelViewRelativeToEye\\n\\\n * @see czm_modelViewProjectionRelativeToEye\\n\\\n * @see czm_computePosition\\n\\\n * @see EncodedCartesian3\\n\\\n */\\n\\\nvec4 czm_translateRelativeToEye(vec3 high, vec3 low)\\n\\\n{\\n\\\n vec3 highDifference = high - czm_encodedCameraPositionMCHigh;\\n\\\n vec3 lowDifference = low - czm_encodedCameraPositionMCLow;\\n\\\n\\n\\\n return vec4(highDifference + lowDifference, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n // Diffuse from directional light sources at eye (for top-down and horizon views)\\n\\\n float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal);\\n\\\n\\n\\\n if (czm_sceneMode == czm_sceneMode3D) {\\n\\\n // (and horizon views in 3D)\\n\\\n diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal);\\n\\\n }\\n\\\n\\n\\\n diffuse = clamp(diffuse, 0.0, 1.0);\\n\\\n\\n\\\n float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess);\\n\\\n\\n\\\n // Temporary workaround for adding ambient.\\n\\\n vec3 materialDiffuse = material.diffuse * 0.5;\\n\\\n\\n\\\n vec3 ambient = materialDiffuse;\\n\\\n vec3 color = ambient + material.emission;\\n\\\n color += materialDiffuse * diffuse * czm_lightColor;\\n\\\n color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n return vec4(color, material.alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns the transpose of the matrix. The input <code>matrix</code> can be\\n\\\n * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.\\n\\\n *\\n\\\n * @name czm_transpose\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} matrix The matrix to transpose.\\n\\\n *\\n\\\n * @returns {} The transposed matrix.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * mat2 czm_transpose(mat2 matrix);\\n\\\n * mat3 czm_transpose(mat3 matrix);\\n\\\n * mat4 czm_transpose(mat4 matrix);\\n\\\n *\\n\\\n * // Transpose a 3x3 rotation matrix to find its inverse.\\n\\\n * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(\\n\\\n * positionMC, normalEC);\\n\\\n * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);\\n\\\n */\\n\\\nmat2 czm_transpose(mat2 matrix)\\n\\\n{\\n\\\n return mat2(\\n\\\n matrix[0][0], matrix[1][0],\\n\\\n matrix[0][1], matrix[1][1]);\\n\\\n}\\n\\\n\\n\\\nmat3 czm_transpose(mat3 matrix)\\n\\\n{\\n\\\n return mat3(\\n\\\n matrix[0][0], matrix[1][0], matrix[2][0],\\n\\\n matrix[0][1], matrix[1][1], matrix[2][1],\\n\\\n matrix[0][2], matrix[1][2], matrix[2][2]);\\n\\\n}\\n\\\n\\n\\\nmat4 czm_transpose(mat4 matrix)\\n\\\n{\\n\\\n return mat4(\\n\\\n matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],\\n\\\n matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],\\n\\\n matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],\\n\\\n matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Unpacks a vec4 depth value to a float in [0, 1) range.\\n\\\n *\\n\\\n * @name czm_unpackDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} packedDepth The packed depth.\\n\\\n *\\n\\\n * @returns {float} The floating-point depth in [0, 1) range.\\n\\\n */\\n\\\n float czm_unpackDepth(vec4 packedDepth)\\n\\\n {\\n\\\n // See Aras Pranckevičius' post Encoding Floats to RGBA\\n\\\n // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\\n\\\n return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0));\\n\\\n }\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#define SHIFT_RIGHT_8 0.00390625 //1.0 / 256.0\\n\\\n#define SHIFT_RIGHT_16 0.00001525878 //1.0 / 65536.0\\n\\\n#define SHIFT_RIGHT_24 5.960464477539063e-8//1.0 / 16777216.0\\n\\\n\\n\\\n#define BIAS 38.0\\n\\\n\\n\\\n/**\\n\\\n * Unpacks a vec4 value containing values expressable as uint8 to an arbitrary float.\\n\\\n *\\n\\\n * @name czm_unpackFloat\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} packedFloat The packed float.\\n\\\n *\\n\\\n * @returns {float} The floating-point depth in arbitrary range.\\n\\\n */\\n\\\n float czm_unpackFloat(vec4 packedFloat)\\n\\\n{\\n\\\n packedFloat *= 255.0;\\n\\\n float temp = packedFloat.w / 2.0;\\n\\\n float exponent = floor(temp);\\n\\\n float sign = (temp - exponent) * 2.0;\\n\\\n exponent = exponent - float(BIAS);\\n\\\n sign = sign * 2.0 - 1.0;\\n\\\n sign = -sign;\\n\\\n float unpacked = sign * packedFloat.x * float(SHIFT_RIGHT_8);\\n\\\n unpacked += sign * packedFloat.y * float(SHIFT_RIGHT_16);\\n\\\n unpacked += sign * packedFloat.z * float(SHIFT_RIGHT_24);\\n\\\n return unpacked * pow(10.0, exponent);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef LOG_DEPTH\\n\\\n// 1.0 at the near plane, increasing linearly from there.\\n\\\nvarying float v_depthFromNearPlusOne;\\n\\\n#ifdef SHADOW_MAP\\n\\\nvarying vec3 v_logPositionEC;\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\nvec4 czm_updatePositionDepth(vec4 coords) {\\n\\\n#if defined(LOG_DEPTH)\\n\\\n\\n\\\n#ifdef SHADOW_MAP\\n\\\n vec3 logPositionEC = (czm_inverseProjection * coords).xyz;\\n\\\n v_logPositionEC = logPositionEC;\\n\\\n#endif\\n\\\n\\n\\\n // With the very high far/near ratios used with the logarithmic depth\\n\\\n // buffer, floating point rounding errors can cause linear depth values\\n\\\n // to end up on the wrong side of the far plane, even for vertices that\\n\\\n // are really nowhere near it. Since we always write a correct logarithmic\\n\\\n // depth value in the fragment shader anyway, we just need to make sure\\n\\\n // such errors don't cause the primitive to be clipped entirely before\\n\\\n // we even get to the fragment shader.\\n\\\n coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;\\n\\\n#endif\\n\\\n\\n\\\n return coords;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the logarithmic depth to gl_Position using the already computed gl_Position.\\n\\\n *\\n\\\n * @name czm_vertexLogDepth\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvoid czm_vertexLogDepth()\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;\\n\\\n gl_Position = czm_updatePositionDepth(gl_Position);\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the logarithmic depth to gl_Position using the provided clip coordinates.\\n\\\n * <p>\\n\\\n * An example use case for this function would be moving the vertex in window coordinates\\n\\\n * before converting back to clip coordinates. Use the original vertex clip coordinates.\\n\\\n * </p>\\n\\\n * @name czm_vertexLogDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} clipCoords The vertex in clip coordinates.\\n\\\n *\\n\\\n * @example\\n\\\n * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));\\n\\\n */\\n\\\nvoid czm_vertexLogDepth(vec4 clipCoords)\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;\\n\\\n czm_updatePositionDepth(clipCoords);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a position from window to eye coordinates.\\n\\\n * The transform from window to normalized device coordinates is done using components\\n\\\n * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating\\n\\\n * the inverse of <code>czm_viewportTransformation</code>. The transformation from\\n\\\n * normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>,\\n\\\n * which is expected to be the scalar used in the perspective divide. The transformation\\n\\\n * from clip to eye coordinates is done using {@link czm_inverseProjection}.\\n\\\n *\\n\\\n * @name czm_windowToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} fragmentCoordinate The position in window coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in eye coordinates.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_inverseProjection\\n\\\n * @see czm_viewport\\n\\\n * @see czm_viewportTransformation\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);\\n\\\n */\\n\\\nvec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)\\n\\\n{\\n\\\n // Reconstruct NDC coordinates\\n\\\n float x = 2.0 * (fragmentCoordinate.x - czm_viewport.x) / czm_viewport.z - 1.0;\\n\\\n float y = 2.0 * (fragmentCoordinate.y - czm_viewport.y) / czm_viewport.w - 1.0;\\n\\\n float z = (fragmentCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\\n\\\n vec4 q = vec4(x, y, z, 1.0);\\n\\\n\\n\\\n // Reverse the perspective division to obtain clip coordinates.\\n\\\n q /= fragmentCoordinate.w;\\n\\\n\\n\\\n // Reverse the projection transformation to obtain eye coordinates.\\n\\\n if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s\\n\\\n {\\n\\\n q = czm_inverseProjection * q;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n float top = czm_frustumPlanes.x;\\n\\\n float bottom = czm_frustumPlanes.y;\\n\\\n float left = czm_frustumPlanes.z;\\n\\\n float right = czm_frustumPlanes.w;\\n\\\n\\n\\\n float near = czm_currentFrustum.x;\\n\\\n float far = czm_currentFrustum.y;\\n\\\n\\n\\\n q.x = (q.x * (right - left) + left + right) * 0.5;\\n\\\n q.y = (q.y * (top - bottom) + bottom + top) * 0.5;\\n\\\n q.z = (q.z * (near - far) - near - far) * 0.5;\\n\\\n q.w = 1.0;\\n\\\n }\\n\\\n\\n\\\n return q;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates.\\n\\\n * This function produces more accurate results for window positions with log depth than\\n\\\n * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version\\n\\\n * of czm_windowToEyeCoordinates.\\n\\\n *\\n\\\n * @name czm_windowToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform.\\n\\\n * @param {float} depthOrLogDepth A depth or log depth for the fragment.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_inverseProjection\\n\\\n * @see czm_viewport\\n\\\n * @see czm_viewportTransformation\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in eye coordinates.\\n\\\n */\\n\\\nvec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth)\\n\\\n{\\n\\\n // See reverseLogDepth.glsl. This is separate to re-use the pow.\\n\\\n#ifdef LOG_DEPTH\\n\\\n float near = czm_currentFrustum.x;\\n\\\n float far = czm_currentFrustum.y;\\n\\\n float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne;\\n\\\n float depthFromNear = pow(2.0, log2Depth) - 1.0;\\n\\\n float depthFromCamera = depthFromNear + near;\\n\\\n vec4 windowCoord = vec4(fragmentCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0);\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(windowCoord);\\n\\\n eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision\\n\\\n return eyeCoordinate;\\n\\\n#else\\n\\\n vec4 windowCoord = vec4(fragmentCoordinateXY, depthOrLogDepth, 1.0);\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(windowCoord);\\n\\\n#endif\\n\\\n return eyeCoordinate;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// emulated noperspective\\n\\\n#ifndef LOG_DEPTH\\n\\\nvarying float v_WindowZ;\\n\\\n#endif\\n\\\n/**\\n\\\n * Clamps a vertex to the far plane by writing the fragments depth.\\n\\\n * <p>\\n\\\n * The shader must enable the GL_EXT_frag_depth extension.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_writeDepthClamp\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @example\\n\\\n * gl_FragColor = color;\\n\\\n * czm_writeDepthClamp();\\n\\\n *\\n\\\n * @see czm_depthClamp\\n\\\n */\\n\\\nvoid czm_writeDepthClamp()\\n\\\n{\\n\\\n#if defined(GL_EXT_frag_depth) && !defined(LOG_DEPTH)\\n\\\n gl_FragDepthEXT = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef LOG_DEPTH\\n\\\nvarying float v_depthFromNearPlusOne;\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\nuniform vec2 u_polygonOffset;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Writes the fragment depth to the logarithmic depth buffer.\\n\\\n * <p>\\n\\\n * Use this when the vertex shader does not call {@link czm_vertexlogDepth}, for example, when\\n\\\n * ray-casting geometry using a full screen quad.\\n\\\n * </p>\\n\\\n * @name czm_writeLogDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} depth The depth coordinate, where 1.0 is on the near plane and\\n\\\n * depth increases in eye-space units from there\\n\\\n *\\n\\\n * @example\\n\\\n * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);\\n\\\n */\\n\\\nvoid czm_writeLogDepth(float depth)\\n\\\n{\\n\\\n#if defined(GL_EXT_frag_depth) && defined(LOG_DEPTH)\\n\\\n // Discard the vertex if it's not between the near and far planes.\\n\\\n // We allow a bit of epsilon on the near plane comparison because a 1.0\\n\\\n // from the vertex shader (indicating the vertex should be _on_ the near\\n\\\n // plane) will not necessarily come here as exactly 1.0.\\n\\\n if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\n // Polygon offset: m * factor + r * units\\n\\\n float factor = u_polygonOffset[0];\\n\\\n float units = u_polygonOffset[1];\\n\\\n\\n\\\n // If we can't compute derivatives, just leave out the factor I guess?\\n\\\n#ifdef GL_OES_standard_derivatives\\n\\\n // m = sqrt(dZdX^2 + dZdY^2);\\n\\\n float x = dFdx(depth);\\n\\\n float y = dFdy(depth);\\n\\\n float m = sqrt(x * x + y * y);\\n\\\n\\n\\\n // Apply the factor before computing the log depth.\\n\\\n depth += m * factor;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n gl_FragDepthEXT = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\n // Apply the units after the log depth.\\n\\\n gl_FragDepthEXT += czm_epsilon7 * units;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the fragment depth to the logarithmic depth buffer.\\n\\\n * <p>\\n\\\n * Use this when the vertex shader calls {@link czm_vertexlogDepth}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_writeLogDepth\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvoid czm_writeLogDepth() {\\n\\\n#ifdef LOG_DEPTH\\n\\\n czm_writeLogDepth(v_depthFromNearPlusOne);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a value for non-perspective interpolation by multiplying\\n\\\n * it by w, the value used in the perspective divide. This function is\\n\\\n * intended to be called in a vertex shader to compute the value of a\\n\\\n * `varying` that should not be subject to perspective interpolation.\\n\\\n * For example, screen-space texture coordinates. The fragment shader\\n\\\n * must call {@link czm_readNonPerspective} to retrieve the final\\n\\\n * non-perspective value.\\n\\\n *\\n\\\n * @name czm_writeNonPerspective\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective.\\n\\\n * @param {float} w The perspective divide value. Usually this is the computed `gl_Position.w`.\\n\\\n * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a `varying` and read in the\\n\\\n * fragment shader with {@link czm_readNonPerspective}.\\n\\\n */\\n\\\nfloat czm_writeNonPerspective(float value, float w) {\\n\\\n return value * w;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_writeNonPerspective(vec2 value, float w) {\\n\\\n return value * w;\\n\\\n}\\n\\\n\\n\\\nvec3 czm_writeNonPerspective(vec3 value, float w) {\\n\\\n return value * w;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_writeNonPerspective(vec4 value, float w) {\\n\\\n return value * w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a CIE Yxy color to RGB.\\n\\\n * <p>The conversion is described in\\n\\\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\\n\\\n * </p>\\n\\\n * \\n\\\n * @name czm_XYZToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} Yxy The color in CIE Yxy.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 xyz = czm_RGBToXYZ(rgb);\\n\\\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\\n\\\n * rgb = czm_XYZToRGB(xyz);\\n\\\n */\\n\\\nvec3 czm_XYZToRGB(vec3 Yxy)\\n\\\n{\\n\\\n const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556,\\n\\\n -1.5371, 1.8760, -0.2040,\\n\\\n -0.4985, 0.0416, 1.0572);\\n\\\n vec3 xyz;\\n\\\n xyz.r = Yxy.r * Yxy.g / Yxy.b;\\n\\\n xyz.g = Yxy.r;\\n\\\n xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b;\\n\\\n \\n\\\n return XYZ2RGB * xyz;\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport modernizeShader from \"../Renderer/modernizeShader.js\";\nimport CzmBuiltins from \"../Shaders/Builtin/CzmBuiltins.js\";\nimport AutomaticUniforms from \"./AutomaticUniforms.js\";\n\nfunction removeComments(source) {\n // remove inline comments\n source = source.replace(/\\/\\/.*/g, \"\");\n // remove multiline comment block\n return source.replace(/\\/\\*\\*[\\s\\S]*?\\*\\//gm, function (match) {\n // preserve the number of lines in the comment block so the line numbers will be correct when debugging shaders\n var numberOfLines = match.match(/\\n/gm).length;\n var replacement = \"\";\n for (var lineNumber = 0; lineNumber < numberOfLines; ++lineNumber) {\n replacement += \"\\n\";\n }\n return replacement;\n });\n}\n\nfunction getDependencyNode(name, glslSource, nodes) {\n var dependencyNode;\n\n // check if already loaded\n for (var i = 0; i < nodes.length; ++i) {\n if (nodes[i].name === name) {\n dependencyNode = nodes[i];\n }\n }\n\n if (!defined(dependencyNode)) {\n // strip doc comments so we don't accidentally try to determine a dependency for something found\n // in a comment\n glslSource = removeComments(glslSource);\n\n // create new node\n dependencyNode = {\n name: name,\n glslSource: glslSource,\n dependsOn: [],\n requiredBy: [],\n evaluated: false,\n };\n nodes.push(dependencyNode);\n }\n\n return dependencyNode;\n}\n\nfunction generateDependencies(currentNode, dependencyNodes) {\n if (currentNode.evaluated) {\n return;\n }\n\n currentNode.evaluated = true;\n\n // identify all dependencies that are referenced from this glsl source code\n var czmMatches = currentNode.glslSource.match(/\\bczm_[a-zA-Z0-9_]*/g);\n if (defined(czmMatches) && czmMatches !== null) {\n // remove duplicates\n czmMatches = czmMatches.filter(function (elem, pos) {\n return czmMatches.indexOf(elem) === pos;\n });\n\n czmMatches.forEach(function (element) {\n if (\n element !== currentNode.name &&\n ShaderSource._czmBuiltinsAndUniforms.hasOwnProperty(element)\n ) {\n var referencedNode = getDependencyNode(\n element,\n ShaderSource._czmBuiltinsAndUniforms[element],\n dependencyNodes\n );\n currentNode.dependsOn.push(referencedNode);\n referencedNode.requiredBy.push(currentNode);\n\n // recursive call to find any dependencies of the new node\n generateDependencies(referencedNode, dependencyNodes);\n }\n });\n }\n}\n\nfunction sortDependencies(dependencyNodes) {\n var nodesWithoutIncomingEdges = [];\n var allNodes = [];\n\n while (dependencyNodes.length > 0) {\n var node = dependencyNodes.pop();\n allNodes.push(node);\n\n if (node.requiredBy.length === 0) {\n nodesWithoutIncomingEdges.push(node);\n }\n }\n\n while (nodesWithoutIncomingEdges.length > 0) {\n var currentNode = nodesWithoutIncomingEdges.shift();\n\n dependencyNodes.push(currentNode);\n\n for (var i = 0; i < currentNode.dependsOn.length; ++i) {\n // remove the edge from the graph\n var referencedNode = currentNode.dependsOn[i];\n var index = referencedNode.requiredBy.indexOf(currentNode);\n referencedNode.requiredBy.splice(index, 1);\n\n // if referenced node has no more incoming edges, add to list\n if (referencedNode.requiredBy.length === 0) {\n nodesWithoutIncomingEdges.push(referencedNode);\n }\n }\n }\n\n // if there are any nodes left with incoming edges, then there was a circular dependency somewhere in the graph\n var badNodes = [];\n for (var j = 0; j < allNodes.length; ++j) {\n if (allNodes[j].requiredBy.length !== 0) {\n badNodes.push(allNodes[j]);\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (badNodes.length !== 0) {\n var message =\n \"A circular dependency was found in the following built-in functions/structs/constants: \\n\";\n for (var k = 0; k < badNodes.length; ++k) {\n message = message + badNodes[k].name + \"\\n\";\n }\n throw new DeveloperError(message);\n }\n //>>includeEnd('debug');\n}\n\nfunction getBuiltinsAndAutomaticUniforms(shaderSource) {\n // generate a dependency graph for builtin functions\n var dependencyNodes = [];\n var root = getDependencyNode(\"main\", shaderSource, dependencyNodes);\n generateDependencies(root, dependencyNodes);\n sortDependencies(dependencyNodes);\n\n // Concatenate the source code for the function dependencies.\n // Iterate in reverse so that dependent items are declared before they are used.\n var builtinsSource = \"\";\n for (var i = dependencyNodes.length - 1; i >= 0; --i) {\n builtinsSource = builtinsSource + dependencyNodes[i].glslSource + \"\\n\";\n }\n\n return builtinsSource.replace(root.glslSource, \"\");\n}\n\nfunction combineShader(shaderSource, isFragmentShader, context) {\n var i;\n var length;\n\n // Combine shader sources, generally for pseudo-polymorphism, e.g., czm_getMaterial.\n var combinedSources = \"\";\n var sources = shaderSource.sources;\n if (defined(sources)) {\n for (i = 0, length = sources.length; i < length; ++i) {\n // #line needs to be on its own line.\n combinedSources += \"\\n#line 0\\n\" + sources[i];\n }\n }\n\n combinedSources = removeComments(combinedSources);\n\n // Extract existing shader version from sources\n var version;\n combinedSources = combinedSources.replace(/#version\\s+(.*?)\\n/gm, function (\n match,\n group1\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(version) && version !== group1) {\n throw new DeveloperError(\n \"inconsistent versions found: \" + version + \" and \" + group1\n );\n }\n //>>includeEnd('debug');\n\n // Extract #version to put at the top\n version = group1;\n\n // Replace original #version directive with a new line so the line numbers\n // are not off by one. There can be only one #version directive\n // and it must appear at the top of the source, only preceded by\n // whitespace and comments.\n return \"\\n\";\n });\n\n // Extract shader extensions from sources\n var extensions = [];\n combinedSources = combinedSources.replace(/#extension.*\\n/gm, function (\n match\n ) {\n // Extract extension to put at the top\n extensions.push(match);\n\n // Replace original #extension directive with a new line so the line numbers\n // are not off by one.\n return \"\\n\";\n });\n\n // Remove precision qualifier\n combinedSources = combinedSources.replace(\n /precision\\s(lowp|mediump|highp)\\s(float|int);/,\n \"\"\n );\n\n // Replace main() for picked if desired.\n var pickColorQualifier = shaderSource.pickColorQualifier;\n if (defined(pickColorQualifier)) {\n combinedSources = ShaderSource.createPickFragmentShaderSource(\n combinedSources,\n pickColorQualifier\n );\n }\n\n // combine into single string\n var result = \"\";\n\n // #version must be first\n // defaults to #version 100 if not specified\n if (defined(version)) {\n result = \"#version \" + version + \"\\n\";\n }\n\n var extensionsLength = extensions.length;\n for (i = 0; i < extensionsLength; i++) {\n result += extensions[i];\n }\n\n if (isFragmentShader) {\n result +=\n \"\\\n#ifdef GL_FRAGMENT_PRECISION_HIGH\\n\\\n precision highp float;\\n\\\n#else\\n\\\n precision mediump float;\\n\\\n#endif\\n\\n\";\n }\n\n // Prepend #defines for uber-shaders\n var defines = shaderSource.defines;\n if (defined(defines)) {\n for (i = 0, length = defines.length; i < length; ++i) {\n var define = defines[i];\n if (define.length !== 0) {\n result += \"#define \" + define + \"\\n\";\n }\n }\n }\n\n // GLSLModernizer inserts its own layout qualifiers\n // at this position in the source\n if (context.webgl2) {\n result += \"#define OUTPUT_DECLARATION\\n\\n\";\n }\n\n // Define a constant for the OES_texture_float_linear extension since WebGL does not.\n if (context.textureFloatLinear) {\n result += \"#define OES_texture_float_linear\\n\\n\";\n }\n\n // append built-ins\n if (shaderSource.includeBuiltIns) {\n result += getBuiltinsAndAutomaticUniforms(combinedSources);\n }\n\n // reset line number\n result += \"\\n#line 0\\n\";\n\n // append actual source\n result += combinedSources;\n\n // modernize the source\n if (context.webgl2) {\n result = modernizeShader(result, isFragmentShader, true);\n }\n\n return result;\n}\n\n/**\n * An object containing various inputs that will be combined to form a final GLSL shader string.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {String[]} [options.sources] An array of strings to combine containing GLSL code for the shader.\n * @param {String[]} [options.defines] An array of strings containing GLSL identifiers to <code>#define</code>.\n * @param {String} [options.pickColorQualifier] The GLSL qualifier, <code>uniform</code> or <code>varying</code>, for the input <code>czm_pickColor</code>. When defined, a pick fragment shader is generated.\n * @param {Boolean} [options.includeBuiltIns=true] If true, referenced built-in functions will be included with the combined shader. Set to false if this shader will become a source in another shader, to avoid duplicating functions.\n *\n * @exception {DeveloperError} options.pickColorQualifier must be 'uniform' or 'varying'.\n *\n * @example\n * // 1. Prepend #defines to a shader\n * var source = new Cesium.ShaderSource({\n * defines : ['WHITE'],\n * sources : ['void main() { \\n#ifdef WHITE\\n gl_FragColor = vec4(1.0); \\n#else\\n gl_FragColor = vec4(0.0); \\n#endif\\n }']\n * });\n *\n * // 2. Modify a fragment shader for picking\n * var source = new Cesium.ShaderSource({\n * sources : ['void main() { gl_FragColor = vec4(1.0); }'],\n * pickColorQualifier : 'uniform'\n * });\n *\n * @private\n */\nfunction ShaderSource(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var pickColorQualifier = options.pickColorQualifier;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n defined(pickColorQualifier) &&\n pickColorQualifier !== \"uniform\" &&\n pickColorQualifier !== \"varying\"\n ) {\n throw new DeveloperError(\n \"options.pickColorQualifier must be 'uniform' or 'varying'.\"\n );\n }\n //>>includeEnd('debug');\n\n this.defines = defined(options.defines) ? options.defines.slice(0) : [];\n this.sources = defined(options.sources) ? options.sources.slice(0) : [];\n this.pickColorQualifier = pickColorQualifier;\n this.includeBuiltIns = defaultValue(options.includeBuiltIns, true);\n}\n\nShaderSource.prototype.clone = function () {\n return new ShaderSource({\n sources: this.sources,\n defines: this.defines,\n pickColorQualifier: this.pickColorQualifier,\n includeBuiltIns: this.includeBuiltIns,\n });\n};\n\nShaderSource.replaceMain = function (source, renamedMain) {\n renamedMain = \"void \" + renamedMain + \"()\";\n return source.replace(/void\\s+main\\s*\\(\\s*(?:void)?\\s*\\)/g, renamedMain);\n};\n\n/**\n * Create a single string containing the full, combined vertex shader with all dependencies and defines.\n *\n * @param {Context} context The current rendering context\n *\n * @returns {String} The combined shader string.\n */\nShaderSource.prototype.createCombinedVertexShader = function (context) {\n return combineShader(this, false, context);\n};\n\n/**\n * Create a single string containing the full, combined fragment shader with all dependencies and defines.\n *\n * @param {Context} context The current rendering context\n *\n * @returns {String} The combined shader string.\n */\nShaderSource.prototype.createCombinedFragmentShader = function (context) {\n return combineShader(this, true, context);\n};\n\n/**\n * For ShaderProgram testing\n * @private\n */\nShaderSource._czmBuiltinsAndUniforms = {};\n\n// combine automatic uniforms and Cesium built-ins\nfor (var builtinName in CzmBuiltins) {\n if (CzmBuiltins.hasOwnProperty(builtinName)) {\n ShaderSource._czmBuiltinsAndUniforms[builtinName] =\n CzmBuiltins[builtinName];\n }\n}\nfor (var uniformName in AutomaticUniforms) {\n if (AutomaticUniforms.hasOwnProperty(uniformName)) {\n var uniform = AutomaticUniforms[uniformName];\n if (typeof uniform.getDeclaration === \"function\") {\n ShaderSource._czmBuiltinsAndUniforms[\n uniformName\n ] = uniform.getDeclaration(uniformName);\n }\n }\n}\n\nShaderSource.createPickVertexShaderSource = function (vertexShaderSource) {\n var renamedVS = ShaderSource.replaceMain(vertexShaderSource, \"czm_old_main\");\n var pickMain =\n \"attribute vec4 pickColor; \\n\" +\n \"varying vec4 czm_pickColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_old_main(); \\n\" +\n \" czm_pickColor = pickColor; \\n\" +\n \"}\";\n\n return renamedVS + \"\\n\" + pickMain;\n};\n\nShaderSource.createPickFragmentShaderSource = function (\n fragmentShaderSource,\n pickColorQualifier\n) {\n var renamedFS = ShaderSource.replaceMain(\n fragmentShaderSource,\n \"czm_old_main\"\n );\n var pickMain =\n pickColorQualifier +\n \" vec4 czm_pickColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_old_main(); \\n\" +\n \" if (gl_FragColor.a == 0.0) { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" gl_FragColor = czm_pickColor; \\n\" +\n \"}\";\n\n return renamedFS + \"\\n\" + pickMain;\n};\n\nShaderSource.findVarying = function (shaderSource, names) {\n var sources = shaderSource.sources;\n\n var namesLength = names.length;\n for (var i = 0; i < namesLength; ++i) {\n var name = names[i];\n\n var sourcesLength = sources.length;\n for (var j = 0; j < sourcesLength; ++j) {\n if (sources[j].indexOf(name) !== -1) {\n return name;\n }\n }\n }\n\n return undefined;\n};\n\nvar normalVaryingNames = [\"v_normalEC\", \"v_normal\"];\n\nShaderSource.findNormalVarying = function (shaderSource) {\n return ShaderSource.findVarying(shaderSource, normalVaryingNames);\n};\n\nvar positionVaryingNames = [\"v_positionEC\"];\n\nShaderSource.findPositionVarying = function (shaderSource) {\n return ShaderSource.findVarying(shaderSource, positionVaryingNames);\n};\nexport default ShaderSource;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_EXT_frag_depth\\n\\\n#extension GL_EXT_frag_depth : enable\\n\\\n#endif\\n\\\n\\n\\\n#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n#ifdef VECTOR_TILE\\n\\\n gl_FragColor = czm_gammaCorrect(u_highlightColor);\\n\\\n#else\\n\\\n gl_FragColor = vec4(1.0);\\n\\\n#endif\\n\\\n czm_writeDepthClamp();\\n\\\n}\\n\\\n\";\n","/**\n * Whether a classification affects terrain, 3D Tiles or both.\n *\n * @enum {Number}\n */\nvar ClassificationType = {\n /**\n * Only terrain will be classified.\n *\n * @type {Number}\n * @constant\n */\n TERRAIN: 0,\n /**\n * Only 3D Tiles will be classified.\n *\n * @type {Number}\n * @constant\n */\n CESIUM_3D_TILE: 1,\n /**\n * Both terrain and 3D Tiles will be classified.\n *\n * @type {Number}\n * @constant\n */\n BOTH: 2,\n};\n\n/**\n * @private\n */\nClassificationType.NUMBER_OF_CLASSIFICATION_TYPES = 3;\n\nexport default Object.freeze(ClassificationType);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the function used to compare two depths for the depth test.\n *\n * @enum {Number}\n */\nvar DepthFunction = {\n /**\n * The depth test never passes.\n *\n * @type {Number}\n * @constant\n */\n NEVER: WebGLConstants.NEVER,\n\n /**\n * The depth test passes if the incoming depth is less than the stored depth.\n *\n * @type {Number}\n * @constant\n */\n LESS: WebGLConstants.LESS,\n\n /**\n * The depth test passes if the incoming depth is equal to the stored depth.\n *\n * @type {Number}\n * @constant\n */\n EQUAL: WebGLConstants.EQUAL,\n\n /**\n * The depth test passes if the incoming depth is less than or equal to the stored depth.\n *\n * @type {Number}\n * @constant\n */\n LESS_OR_EQUAL: WebGLConstants.LEQUAL,\n\n /**\n * The depth test passes if the incoming depth is greater than the stored depth.\n *\n * @type {Number}\n * @constant\n */\n GREATER: WebGLConstants.GREATER,\n\n /**\n * The depth test passes if the incoming depth is not equal to the stored depth.\n *\n * @type {Number}\n * @constant\n */\n NOT_EQUAL: WebGLConstants.NOTEQUAL,\n\n /**\n * The depth test passes if the incoming depth is greater than or equal to the stored depth.\n *\n * @type {Number}\n * @constant\n */\n GREATER_OR_EQUAL: WebGLConstants.GEQUAL,\n\n /**\n * The depth test always passes.\n *\n * @type {Number}\n * @constant\n */\n ALWAYS: WebGLConstants.ALWAYS,\n};\nexport default Object.freeze(DepthFunction);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nvar BufferUsage = {\n STREAM_DRAW: WebGLConstants.STREAM_DRAW,\n STATIC_DRAW: WebGLConstants.STATIC_DRAW,\n DYNAMIC_DRAW: WebGLConstants.DYNAMIC_DRAW,\n\n validate: function (bufferUsage) {\n return (\n bufferUsage === BufferUsage.STREAM_DRAW ||\n bufferUsage === BufferUsage.STATIC_DRAW ||\n bufferUsage === BufferUsage.DYNAMIC_DRAW\n );\n },\n};\nexport default Object.freeze(BufferUsage);\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport BufferUsage from \"./BufferUsage.js\";\n\n/**\n * @private\n */\nfunction Buffer(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n\n if (!defined(options.typedArray) && !defined(options.sizeInBytes)) {\n throw new DeveloperError(\n \"Either options.sizeInBytes or options.typedArray is required.\"\n );\n }\n\n if (defined(options.typedArray) && defined(options.sizeInBytes)) {\n throw new DeveloperError(\n \"Cannot pass in both options.sizeInBytes and options.typedArray.\"\n );\n }\n\n if (defined(options.typedArray)) {\n Check.typeOf.object(\"options.typedArray\", options.typedArray);\n Check.typeOf.number(\n \"options.typedArray.byteLength\",\n options.typedArray.byteLength\n );\n }\n\n if (!BufferUsage.validate(options.usage)) {\n throw new DeveloperError(\"usage is invalid.\");\n }\n //>>includeEnd('debug');\n\n var gl = options.context._gl;\n var bufferTarget = options.bufferTarget;\n var typedArray = options.typedArray;\n var sizeInBytes = options.sizeInBytes;\n var usage = options.usage;\n var hasArray = defined(typedArray);\n\n if (hasArray) {\n sizeInBytes = typedArray.byteLength;\n }\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"sizeInBytes\", sizeInBytes, 0);\n //>>includeEnd('debug');\n\n var buffer = gl.createBuffer();\n gl.bindBuffer(bufferTarget, buffer);\n gl.bufferData(bufferTarget, hasArray ? typedArray : sizeInBytes, usage);\n gl.bindBuffer(bufferTarget, null);\n\n this._gl = gl;\n this._webgl2 = options.context._webgl2;\n this._bufferTarget = bufferTarget;\n this._sizeInBytes = sizeInBytes;\n this._usage = usage;\n this._buffer = buffer;\n this.vertexArrayDestroyable = true;\n}\n\n/**\n * Creates a vertex buffer, which contains untyped vertex data in GPU-controlled memory.\n * <br /><br />\n * A vertex array defines the actual makeup of a vertex, e.g., positions, normals, texture coordinates,\n * etc., by interpreting the raw data in one or more vertex buffers.\n *\n * @param {Object} options An object containing the following properties:\n * @param {Context} options.context The context in which to create the buffer\n * @param {ArrayBufferView} [options.typedArray] A typed array containing the data to copy to the buffer.\n * @param {Number} [options.sizeInBytes] A <code>Number</code> defining the size of the buffer in bytes. Required if options.typedArray is not given.\n * @param {BufferUsage} options.usage Specifies the expected usage pattern of the buffer. On some GL implementations, this can significantly affect performance. See {@link BufferUsage}.\n * @returns {VertexBuffer} The vertex buffer, ready to be attached to a vertex array.\n *\n * @exception {DeveloperError} Must specify either <options.typedArray> or <options.sizeInBytes>, but not both.\n * @exception {DeveloperError} The buffer size must be greater than zero.\n * @exception {DeveloperError} Invalid <code>usage</code>.\n *\n *\n * @example\n * // Example 1. Create a dynamic vertex buffer 16 bytes in size.\n * var buffer = Buffer.createVertexBuffer({\n * context : context,\n * sizeInBytes : 16,\n * usage : BufferUsage.DYNAMIC_DRAW\n * });\n *\n * @example\n * // Example 2. Create a dynamic vertex buffer from three floating-point values.\n * // The data copied to the vertex buffer is considered raw bytes until it is\n * // interpreted as vertices using a vertex array.\n * var positionBuffer = buffer.createVertexBuffer({\n * context : context,\n * typedArray : new Float32Array([0, 0, 0]),\n * usage : BufferUsage.STATIC_DRAW\n * });\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffer.xml|glGenBuffer}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindBuffer.xml|glBindBuffer} with <code>ARRAY_BUFFER</code>\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml|glBufferData} with <code>ARRAY_BUFFER</code>\n */\nBuffer.createVertexBuffer = function (options) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n return new Buffer({\n context: options.context,\n bufferTarget: WebGLConstants.ARRAY_BUFFER,\n typedArray: options.typedArray,\n sizeInBytes: options.sizeInBytes,\n usage: options.usage,\n });\n};\n\n/**\n * Creates an index buffer, which contains typed indices in GPU-controlled memory.\n * <br /><br />\n * An index buffer can be attached to a vertex array to select vertices for rendering.\n * <code>Context.draw</code> can render using the entire index buffer or a subset\n * of the index buffer defined by an offset and count.\n *\n * @param {Object} options An object containing the following properties:\n * @param {Context} options.context The context in which to create the buffer\n * @param {ArrayBufferView} [options.typedArray] A typed array containing the data to copy to the buffer.\n * @param {Number} [options.sizeInBytes] A <code>Number</code> defining the size of the buffer in bytes. Required if options.typedArray is not given.\n * @param {BufferUsage} options.usage Specifies the expected usage pattern of the buffer. On some GL implementations, this can significantly affect performance. See {@link BufferUsage}.\n * @param {IndexDatatype} options.indexDatatype The datatype of indices in the buffer.\n * @returns {IndexBuffer} The index buffer, ready to be attached to a vertex array.\n *\n * @exception {DeveloperError} Must specify either <options.typedArray> or <options.sizeInBytes>, but not both.\n * @exception {DeveloperError} IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system. Check context.elementIndexUint.\n * @exception {DeveloperError} The size in bytes must be greater than zero.\n * @exception {DeveloperError} Invalid <code>usage</code>.\n * @exception {DeveloperError} Invalid <code>indexDatatype</code>.\n *\n *\n * @example\n * // Example 1. Create a stream index buffer of unsigned shorts that is\n * // 16 bytes in size.\n * var buffer = Buffer.createIndexBuffer({\n * context : context,\n * sizeInBytes : 16,\n * usage : BufferUsage.STREAM_DRAW,\n * indexDatatype : IndexDatatype.UNSIGNED_SHORT\n * });\n *\n * @example\n * // Example 2. Create a static index buffer containing three unsigned shorts.\n * var buffer = Buffer.createIndexBuffer({\n * context : context,\n * typedArray : new Uint16Array([0, 1, 2]),\n * usage : BufferUsage.STATIC_DRAW,\n * indexDatatype : IndexDatatype.UNSIGNED_SHORT\n * });\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffer.xml|glGenBuffer}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindBuffer.xml|glBindBuffer} with <code>ELEMENT_ARRAY_BUFFER</code>\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml|glBufferData} with <code>ELEMENT_ARRAY_BUFFER</code>\n */\nBuffer.createIndexBuffer = function (options) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n\n if (!IndexDatatype.validate(options.indexDatatype)) {\n throw new DeveloperError(\"Invalid indexDatatype.\");\n }\n\n if (\n options.indexDatatype === IndexDatatype.UNSIGNED_INT &&\n !options.context.elementIndexUint\n ) {\n throw new DeveloperError(\n \"IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system. Check context.elementIndexUint.\"\n );\n }\n //>>includeEnd('debug');\n\n var context = options.context;\n var indexDatatype = options.indexDatatype;\n\n var bytesPerIndex = IndexDatatype.getSizeInBytes(indexDatatype);\n var buffer = new Buffer({\n context: context,\n bufferTarget: WebGLConstants.ELEMENT_ARRAY_BUFFER,\n typedArray: options.typedArray,\n sizeInBytes: options.sizeInBytes,\n usage: options.usage,\n });\n\n var numberOfIndices = buffer.sizeInBytes / bytesPerIndex;\n\n Object.defineProperties(buffer, {\n indexDatatype: {\n get: function () {\n return indexDatatype;\n },\n },\n bytesPerIndex: {\n get: function () {\n return bytesPerIndex;\n },\n },\n numberOfIndices: {\n get: function () {\n return numberOfIndices;\n },\n },\n });\n\n return buffer;\n};\n\nObject.defineProperties(Buffer.prototype, {\n sizeInBytes: {\n get: function () {\n return this._sizeInBytes;\n },\n },\n\n usage: {\n get: function () {\n return this._usage;\n },\n },\n});\n\nBuffer.prototype._getBuffer = function () {\n return this._buffer;\n};\n\nBuffer.prototype.copyFromArrayView = function (arrayView, offsetInBytes) {\n offsetInBytes = defaultValue(offsetInBytes, 0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"arrayView\", arrayView);\n Check.typeOf.number.lessThanOrEquals(\n \"offsetInBytes + arrayView.byteLength\",\n offsetInBytes + arrayView.byteLength,\n this._sizeInBytes\n );\n //>>includeEnd('debug');\n\n var gl = this._gl;\n var target = this._bufferTarget;\n gl.bindBuffer(target, this._buffer);\n gl.bufferSubData(target, offsetInBytes, arrayView);\n gl.bindBuffer(target, null);\n};\n\nBuffer.prototype.copyFromBuffer = function (\n readBuffer,\n readOffset,\n writeOffset,\n sizeInBytes\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._webgl2) {\n throw new DeveloperError(\"A WebGL 2 context is required.\");\n }\n if (!defined(readBuffer)) {\n throw new DeveloperError(\"readBuffer must be defined.\");\n }\n if (!defined(sizeInBytes) || sizeInBytes <= 0) {\n throw new DeveloperError(\n \"sizeInBytes must be defined and be greater than zero.\"\n );\n }\n if (\n !defined(readOffset) ||\n readOffset < 0 ||\n readOffset + sizeInBytes > readBuffer._sizeInBytes\n ) {\n throw new DeveloperError(\n \"readOffset must be greater than or equal to zero and readOffset + sizeInBytes must be less than of equal to readBuffer.sizeInBytes.\"\n );\n }\n if (\n !defined(writeOffset) ||\n writeOffset < 0 ||\n writeOffset + sizeInBytes > this._sizeInBytes\n ) {\n throw new DeveloperError(\n \"writeOffset must be greater than or equal to zero and writeOffset + sizeInBytes must be less than of equal to this.sizeInBytes.\"\n );\n }\n if (\n this._buffer === readBuffer._buffer &&\n ((writeOffset >= readOffset && writeOffset < readOffset + sizeInBytes) ||\n (readOffset > writeOffset && readOffset < writeOffset + sizeInBytes))\n ) {\n throw new DeveloperError(\n \"When readBuffer is equal to this, the ranges [readOffset + sizeInBytes) and [writeOffset, writeOffset + sizeInBytes) must not overlap.\"\n );\n }\n if (\n (this._bufferTarget === WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n readBuffer._bufferTarget !== WebGLConstants.ELEMENT_ARRAY_BUFFER) ||\n (this._bufferTarget !== WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n readBuffer._bufferTarget === WebGLConstants.ELEMENT_ARRAY_BUFFER)\n ) {\n throw new DeveloperError(\n \"Can not copy an index buffer into another buffer type.\"\n );\n }\n //>>includeEnd('debug');\n\n var readTarget = WebGLConstants.COPY_READ_BUFFER;\n var writeTarget = WebGLConstants.COPY_WRITE_BUFFER;\n\n var gl = this._gl;\n gl.bindBuffer(writeTarget, this._buffer);\n gl.bindBuffer(readTarget, readBuffer._buffer);\n gl.copyBufferSubData(\n readTarget,\n writeTarget,\n readOffset,\n writeOffset,\n sizeInBytes\n );\n gl.bindBuffer(writeTarget, null);\n gl.bindBuffer(readTarget, null);\n};\n\nBuffer.prototype.getBufferData = function (\n arrayView,\n sourceOffset,\n destinationOffset,\n length\n) {\n sourceOffset = defaultValue(sourceOffset, 0);\n destinationOffset = defaultValue(destinationOffset, 0);\n\n //>>includeStart('debug', pragmas.debug);\n if (!this._webgl2) {\n throw new DeveloperError(\"A WebGL 2 context is required.\");\n }\n if (!defined(arrayView)) {\n throw new DeveloperError(\"arrayView is required.\");\n }\n\n var copyLength;\n var elementSize;\n var arrayLength = arrayView.byteLength;\n if (!defined(length)) {\n if (defined(arrayLength)) {\n copyLength = arrayLength - destinationOffset;\n elementSize = 1;\n } else {\n arrayLength = arrayView.length;\n copyLength = arrayLength - destinationOffset;\n elementSize = arrayView.BYTES_PER_ELEMENT;\n }\n } else {\n copyLength = length;\n if (defined(arrayLength)) {\n elementSize = 1;\n } else {\n arrayLength = arrayView.length;\n elementSize = arrayView.BYTES_PER_ELEMENT;\n }\n }\n\n if (destinationOffset < 0 || destinationOffset > arrayLength) {\n throw new DeveloperError(\n \"destinationOffset must be greater than zero and less than the arrayView length.\"\n );\n }\n if (destinationOffset + copyLength > arrayLength) {\n throw new DeveloperError(\n \"destinationOffset + length must be less than or equal to the arrayViewLength.\"\n );\n }\n if (sourceOffset < 0 || sourceOffset > this._sizeInBytes) {\n throw new DeveloperError(\n \"sourceOffset must be greater than zero and less than the buffers size.\"\n );\n }\n if (sourceOffset + copyLength * elementSize > this._sizeInBytes) {\n throw new DeveloperError(\n \"sourceOffset + length must be less than the buffers size.\"\n );\n }\n //>>includeEnd('debug');\n\n var gl = this._gl;\n var target = WebGLConstants.COPY_READ_BUFFER;\n gl.bindBuffer(target, this._buffer);\n gl.getBufferSubData(\n target,\n sourceOffset,\n arrayView,\n destinationOffset,\n length\n );\n gl.bindBuffer(target, null);\n};\n\nBuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nBuffer.prototype.destroy = function () {\n this._gl.deleteBuffer(this._buffer);\n return destroyObject(this);\n};\nexport default Buffer;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Buffer from \"./Buffer.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport ContextLimits from \"./ContextLimits.js\";\n\nfunction addAttribute(attributes, attribute, index, context) {\n var hasVertexBuffer = defined(attribute.vertexBuffer);\n var hasValue = defined(attribute.value);\n var componentsPerAttribute = attribute.value\n ? attribute.value.length\n : attribute.componentsPerAttribute;\n\n //>>includeStart('debug', pragmas.debug);\n if (!hasVertexBuffer && !hasValue) {\n throw new DeveloperError(\"attribute must have a vertexBuffer or a value.\");\n }\n if (hasVertexBuffer && hasValue) {\n throw new DeveloperError(\n \"attribute cannot have both a vertexBuffer and a value. It must have either a vertexBuffer property defining per-vertex data or a value property defining data for all vertices.\"\n );\n }\n if (\n componentsPerAttribute !== 1 &&\n componentsPerAttribute !== 2 &&\n componentsPerAttribute !== 3 &&\n componentsPerAttribute !== 4\n ) {\n if (hasValue) {\n throw new DeveloperError(\n \"attribute.value.length must be in the range [1, 4].\"\n );\n }\n\n throw new DeveloperError(\n \"attribute.componentsPerAttribute must be in the range [1, 4].\"\n );\n }\n if (\n defined(attribute.componentDatatype) &&\n !ComponentDatatype.validate(attribute.componentDatatype)\n ) {\n throw new DeveloperError(\n \"attribute must have a valid componentDatatype or not specify it.\"\n );\n }\n if (defined(attribute.strideInBytes) && attribute.strideInBytes > 255) {\n // WebGL limit. Not in GL ES.\n throw new DeveloperError(\n \"attribute must have a strideInBytes less than or equal to 255 or not specify it.\"\n );\n }\n if (\n defined(attribute.instanceDivisor) &&\n attribute.instanceDivisor > 0 &&\n !context.instancedArrays\n ) {\n throw new DeveloperError(\"instanced arrays is not supported\");\n }\n if (defined(attribute.instanceDivisor) && attribute.instanceDivisor < 0) {\n throw new DeveloperError(\n \"attribute must have an instanceDivisor greater than or equal to zero\"\n );\n }\n if (defined(attribute.instanceDivisor) && hasValue) {\n throw new DeveloperError(\n \"attribute cannot have have an instanceDivisor if it is not backed by a buffer\"\n );\n }\n if (\n defined(attribute.instanceDivisor) &&\n attribute.instanceDivisor > 0 &&\n attribute.index === 0\n ) {\n throw new DeveloperError(\n \"attribute zero cannot have an instanceDivisor greater than 0\"\n );\n }\n //>>includeEnd('debug');\n\n // Shallow copy the attribute; we do not want to copy the vertex buffer.\n var attr = {\n index: defaultValue(attribute.index, index),\n enabled: defaultValue(attribute.enabled, true),\n vertexBuffer: attribute.vertexBuffer,\n value: hasValue ? attribute.value.slice(0) : undefined,\n componentsPerAttribute: componentsPerAttribute,\n componentDatatype: defaultValue(\n attribute.componentDatatype,\n ComponentDatatype.FLOAT\n ),\n normalize: defaultValue(attribute.normalize, false),\n offsetInBytes: defaultValue(attribute.offsetInBytes, 0),\n strideInBytes: defaultValue(attribute.strideInBytes, 0),\n instanceDivisor: defaultValue(attribute.instanceDivisor, 0),\n };\n\n if (hasVertexBuffer) {\n // Common case: vertex buffer for per-vertex data\n attr.vertexAttrib = function (gl) {\n var index = this.index;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer._getBuffer());\n gl.vertexAttribPointer(\n index,\n this.componentsPerAttribute,\n this.componentDatatype,\n this.normalize,\n this.strideInBytes,\n this.offsetInBytes\n );\n gl.enableVertexAttribArray(index);\n if (this.instanceDivisor > 0) {\n context.glVertexAttribDivisor(index, this.instanceDivisor);\n context._vertexAttribDivisors[index] = this.instanceDivisor;\n context._previousDrawInstanced = true;\n }\n };\n\n attr.disableVertexAttribArray = function (gl) {\n gl.disableVertexAttribArray(this.index);\n if (this.instanceDivisor > 0) {\n context.glVertexAttribDivisor(index, 0);\n }\n };\n } else {\n // Less common case: value array for the same data for each vertex\n switch (attr.componentsPerAttribute) {\n case 1:\n attr.vertexAttrib = function (gl) {\n gl.vertexAttrib1fv(this.index, this.value);\n };\n break;\n case 2:\n attr.vertexAttrib = function (gl) {\n gl.vertexAttrib2fv(this.index, this.value);\n };\n break;\n case 3:\n attr.vertexAttrib = function (gl) {\n gl.vertexAttrib3fv(this.index, this.value);\n };\n break;\n case 4:\n attr.vertexAttrib = function (gl) {\n gl.vertexAttrib4fv(this.index, this.value);\n };\n break;\n }\n\n attr.disableVertexAttribArray = function (gl) {};\n }\n\n attributes.push(attr);\n}\n\nfunction bind(gl, attributes, indexBuffer) {\n for (var i = 0; i < attributes.length; ++i) {\n var attribute = attributes[i];\n if (attribute.enabled) {\n attribute.vertexAttrib(gl);\n }\n }\n\n if (defined(indexBuffer)) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer._getBuffer());\n }\n}\n\n/**\n * Creates a vertex array, which defines the attributes making up a vertex, and contains an optional index buffer\n * to select vertices for rendering. Attributes are defined using object literals as shown in Example 1 below.\n *\n * @param {Object} options Object with the following properties:\n * @param {Context} options.context The context in which the VertexArray gets created.\n * @param {Object[]} options.attributes An array of attributes.\n * @param {IndexBuffer} [options.indexBuffer] An optional index buffer.\n *\n * @returns {VertexArray} The vertex array, ready for use with drawing.\n *\n * @exception {DeveloperError} Attribute must have a <code>vertexBuffer</code>.\n * @exception {DeveloperError} Attribute must have a <code>componentsPerAttribute</code>.\n * @exception {DeveloperError} Attribute must have a valid <code>componentDatatype</code> or not specify it.\n * @exception {DeveloperError} Attribute must have a <code>strideInBytes</code> less than or equal to 255 or not specify it.\n * @exception {DeveloperError} Index n is used by more than one attribute.\n *\n *\n * @example\n * // Example 1. Create a vertex array with vertices made up of three floating point\n * // values, e.g., a position, from a single vertex buffer. No index buffer is used.\n * var positionBuffer = Buffer.createVertexBuffer({\n * context : context,\n * sizeInBytes : 12,\n * usage : BufferUsage.STATIC_DRAW\n * });\n * var attributes = [\n * {\n * index : 0,\n * enabled : true,\n * vertexBuffer : positionBuffer,\n * componentsPerAttribute : 3,\n * componentDatatype : ComponentDatatype.FLOAT,\n * normalize : false,\n * offsetInBytes : 0,\n * strideInBytes : 0 // tightly packed\n * instanceDivisor : 0 // not instanced\n * }\n * ];\n * var va = new VertexArray({\n * context : context,\n * attributes : attributes\n * });\n *\n * @example\n * // Example 2. Create a vertex array with vertices from two different vertex buffers.\n * // Each vertex has a three-component position and three-component normal.\n * var positionBuffer = Buffer.createVertexBuffer({\n * context : context,\n * sizeInBytes : 12,\n * usage : BufferUsage.STATIC_DRAW\n * });\n * var normalBuffer = Buffer.createVertexBuffer({\n * context : context,\n * sizeInBytes : 12,\n * usage : BufferUsage.STATIC_DRAW\n * });\n * var attributes = [\n * {\n * index : 0,\n * vertexBuffer : positionBuffer,\n * componentsPerAttribute : 3,\n * componentDatatype : ComponentDatatype.FLOAT\n * },\n * {\n * index : 1,\n * vertexBuffer : normalBuffer,\n * componentsPerAttribute : 3,\n * componentDatatype : ComponentDatatype.FLOAT\n * }\n * ];\n * var va = new VertexArray({\n * context : context,\n * attributes : attributes\n * });\n *\n * @example\n * // Example 3. Creates the same vertex layout as Example 2 using a single\n * // vertex buffer, instead of two.\n * var buffer = Buffer.createVertexBuffer({\n * context : context,\n * sizeInBytes : 24,\n * usage : BufferUsage.STATIC_DRAW\n * });\n * var attributes = [\n * {\n * vertexBuffer : buffer,\n * componentsPerAttribute : 3,\n * componentDatatype : ComponentDatatype.FLOAT,\n * offsetInBytes : 0,\n * strideInBytes : 24\n * },\n * {\n * vertexBuffer : buffer,\n * componentsPerAttribute : 3,\n * componentDatatype : ComponentDatatype.FLOAT,\n * normalize : true,\n * offsetInBytes : 12,\n * strideInBytes : 24\n * }\n * ];\n * var va = new VertexArray({\n * context : context,\n * attributes : attributes\n * });\n *\n * @see Buffer#createVertexBuffer\n * @see Buffer#createIndexBuffer\n * @see Context#draw\n *\n * @private\n */\nfunction VertexArray(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n Check.defined(\"options.attributes\", options.attributes);\n //>>includeEnd('debug');\n\n var context = options.context;\n var gl = context._gl;\n var attributes = options.attributes;\n var indexBuffer = options.indexBuffer;\n\n var i;\n var vaAttributes = [];\n var numberOfVertices = 1; // if every attribute is backed by a single value\n var hasInstancedAttributes = false;\n var hasConstantAttributes = false;\n\n var length = attributes.length;\n for (i = 0; i < length; ++i) {\n addAttribute(vaAttributes, attributes[i], i, context);\n }\n\n length = vaAttributes.length;\n for (i = 0; i < length; ++i) {\n var attribute = vaAttributes[i];\n\n if (defined(attribute.vertexBuffer) && attribute.instanceDivisor === 0) {\n // This assumes that each vertex buffer in the vertex array has the same number of vertices.\n var bytes =\n attribute.strideInBytes ||\n attribute.componentsPerAttribute *\n ComponentDatatype.getSizeInBytes(attribute.componentDatatype);\n numberOfVertices = attribute.vertexBuffer.sizeInBytes / bytes;\n break;\n }\n }\n\n for (i = 0; i < length; ++i) {\n if (vaAttributes[i].instanceDivisor > 0) {\n hasInstancedAttributes = true;\n }\n if (defined(vaAttributes[i].value)) {\n hasConstantAttributes = true;\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n // Verify all attribute names are unique\n var uniqueIndices = {};\n for (i = 0; i < length; ++i) {\n var index = vaAttributes[i].index;\n if (uniqueIndices[index]) {\n throw new DeveloperError(\n \"Index \" + index + \" is used by more than one attribute.\"\n );\n }\n uniqueIndices[index] = true;\n }\n //>>includeEnd('debug');\n\n var vao;\n\n // Setup VAO if supported\n if (context.vertexArrayObject) {\n vao = context.glCreateVertexArray();\n context.glBindVertexArray(vao);\n bind(gl, vaAttributes, indexBuffer);\n context.glBindVertexArray(null);\n }\n\n this._numberOfVertices = numberOfVertices;\n this._hasInstancedAttributes = hasInstancedAttributes;\n this._hasConstantAttributes = hasConstantAttributes;\n this._context = context;\n this._gl = gl;\n this._vao = vao;\n this._attributes = vaAttributes;\n this._indexBuffer = indexBuffer;\n}\n\nfunction computeNumberOfVertices(attribute) {\n return attribute.values.length / attribute.componentsPerAttribute;\n}\n\nfunction computeAttributeSizeInBytes(attribute) {\n return (\n ComponentDatatype.getSizeInBytes(attribute.componentDatatype) *\n attribute.componentsPerAttribute\n );\n}\n\nfunction interleaveAttributes(attributes) {\n var j;\n var name;\n var attribute;\n\n // Extract attribute names.\n var names = [];\n for (name in attributes) {\n // Attribute needs to have per-vertex values; not a constant value for all vertices.\n if (\n attributes.hasOwnProperty(name) &&\n defined(attributes[name]) &&\n defined(attributes[name].values)\n ) {\n names.push(name);\n\n if (attributes[name].componentDatatype === ComponentDatatype.DOUBLE) {\n attributes[name].componentDatatype = ComponentDatatype.FLOAT;\n attributes[name].values = ComponentDatatype.createTypedArray(\n ComponentDatatype.FLOAT,\n attributes[name].values\n );\n }\n }\n }\n\n // Validation. Compute number of vertices.\n var numberOfVertices;\n var namesLength = names.length;\n\n if (namesLength > 0) {\n numberOfVertices = computeNumberOfVertices(attributes[names[0]]);\n\n for (j = 1; j < namesLength; ++j) {\n var currentNumberOfVertices = computeNumberOfVertices(\n attributes[names[j]]\n );\n\n if (currentNumberOfVertices !== numberOfVertices) {\n throw new RuntimeError(\n \"Each attribute list must have the same number of vertices. \" +\n \"Attribute \" +\n names[j] +\n \" has a different number of vertices \" +\n \"(\" +\n currentNumberOfVertices.toString() +\n \")\" +\n \" than attribute \" +\n names[0] +\n \" (\" +\n numberOfVertices.toString() +\n \").\"\n );\n }\n }\n }\n\n // Sort attributes by the size of their components. From left to right, a vertex stores floats, shorts, and then bytes.\n names.sort(function (left, right) {\n return (\n ComponentDatatype.getSizeInBytes(attributes[right].componentDatatype) -\n ComponentDatatype.getSizeInBytes(attributes[left].componentDatatype)\n );\n });\n\n // Compute sizes and strides.\n var vertexSizeInBytes = 0;\n var offsetsInBytes = {};\n\n for (j = 0; j < namesLength; ++j) {\n name = names[j];\n attribute = attributes[name];\n\n offsetsInBytes[name] = vertexSizeInBytes;\n vertexSizeInBytes += computeAttributeSizeInBytes(attribute);\n }\n\n if (vertexSizeInBytes > 0) {\n // Pad each vertex to be a multiple of the largest component datatype so each\n // attribute can be addressed using typed arrays.\n var maxComponentSizeInBytes = ComponentDatatype.getSizeInBytes(\n attributes[names[0]].componentDatatype\n ); // Sorted large to small\n var remainder = vertexSizeInBytes % maxComponentSizeInBytes;\n if (remainder !== 0) {\n vertexSizeInBytes += maxComponentSizeInBytes - remainder;\n }\n\n // Total vertex buffer size in bytes, including per-vertex padding.\n var vertexBufferSizeInBytes = numberOfVertices * vertexSizeInBytes;\n\n // Create array for interleaved vertices. Each attribute has a different view (pointer) into the array.\n var buffer = new ArrayBuffer(vertexBufferSizeInBytes);\n var views = {};\n\n for (j = 0; j < namesLength; ++j) {\n name = names[j];\n var sizeInBytes = ComponentDatatype.getSizeInBytes(\n attributes[name].componentDatatype\n );\n\n views[name] = {\n pointer: ComponentDatatype.createTypedArray(\n attributes[name].componentDatatype,\n buffer\n ),\n index: offsetsInBytes[name] / sizeInBytes, // Offset in ComponentType\n strideInComponentType: vertexSizeInBytes / sizeInBytes,\n };\n }\n\n // Copy attributes into one interleaved array.\n // PERFORMANCE_IDEA: Can we optimize these loops?\n for (j = 0; j < numberOfVertices; ++j) {\n for (var n = 0; n < namesLength; ++n) {\n name = names[n];\n attribute = attributes[name];\n var values = attribute.values;\n var view = views[name];\n var pointer = view.pointer;\n\n var numberOfComponents = attribute.componentsPerAttribute;\n for (var k = 0; k < numberOfComponents; ++k) {\n pointer[view.index + k] = values[j * numberOfComponents + k];\n }\n\n view.index += view.strideInComponentType;\n }\n }\n\n return {\n buffer: buffer,\n offsetsInBytes: offsetsInBytes,\n vertexSizeInBytes: vertexSizeInBytes,\n };\n }\n\n // No attributes to interleave.\n return undefined;\n}\n\n/**\n * Creates a vertex array from a geometry. A geometry contains vertex attributes and optional index data\n * in system memory, whereas a vertex array contains vertex buffers and an optional index buffer in WebGL\n * memory for use with rendering.\n * <br /><br />\n * The <code>geometry</code> argument should use the standard layout like the geometry returned by {@link BoxGeometry}.\n * <br /><br />\n * <code>options</code> can have four properties:\n * <ul>\n * <li><code>geometry</code>: The source geometry containing data used to create the vertex array.</li>\n * <li><code>attributeLocations</code>: An object that maps geometry attribute names to vertex shader attribute locations.</li>\n * <li><code>bufferUsage</code>: The expected usage pattern of the vertex array's buffers. On some WebGL implementations, this can significantly affect performance. See {@link BufferUsage}. Default: <code>BufferUsage.DYNAMIC_DRAW</code>.</li>\n * <li><code>interleave</code>: Determines if all attributes are interleaved in a single vertex buffer or if each attribute is stored in a separate vertex buffer. Default: <code>false</code>.</li>\n * </ul>\n * <br />\n * If <code>options</code> is not specified or the <code>geometry</code> contains no data, the returned vertex array is empty.\n *\n * @param {Object} options An object defining the geometry, attribute indices, buffer usage, and vertex layout used to create the vertex array.\n *\n * @exception {RuntimeError} Each attribute list must have the same number of vertices.\n * @exception {DeveloperError} The geometry must have zero or one index lists.\n * @exception {DeveloperError} Index n is used by more than one attribute.\n *\n *\n * @example\n * // Example 1. Creates a vertex array for rendering a box. The default dynamic draw\n * // usage is used for the created vertex and index buffer. The attributes are not\n * // interleaved by default.\n * var geometry = new BoxGeometry();\n * var va = VertexArray.fromGeometry({\n * context : context,\n * geometry : geometry,\n * attributeLocations : GeometryPipeline.createAttributeLocations(geometry),\n * });\n *\n * @example\n * // Example 2. Creates a vertex array with interleaved attributes in a\n * // single vertex buffer. The vertex and index buffer have static draw usage.\n * var va = VertexArray.fromGeometry({\n * context : context,\n * geometry : geometry,\n * attributeLocations : GeometryPipeline.createAttributeLocations(geometry),\n * bufferUsage : BufferUsage.STATIC_DRAW,\n * interleave : true\n * });\n *\n * @example\n * // Example 3. When the caller destroys the vertex array, it also destroys the\n * // attached vertex buffer(s) and index buffer.\n * va = va.destroy();\n *\n * @see Buffer#createVertexBuffer\n * @see Buffer#createIndexBuffer\n * @see GeometryPipeline.createAttributeLocations\n * @see ShaderProgram\n */\nVertexArray.fromGeometry = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n var context = options.context;\n var geometry = defaultValue(options.geometry, defaultValue.EMPTY_OBJECT);\n\n var bufferUsage = defaultValue(options.bufferUsage, BufferUsage.DYNAMIC_DRAW);\n\n var attributeLocations = defaultValue(\n options.attributeLocations,\n defaultValue.EMPTY_OBJECT\n );\n var interleave = defaultValue(options.interleave, false);\n var createdVAAttributes = options.vertexArrayAttributes;\n\n var name;\n var attribute;\n var vertexBuffer;\n var vaAttributes = defined(createdVAAttributes) ? createdVAAttributes : [];\n var attributes = geometry.attributes;\n\n if (interleave) {\n // Use a single vertex buffer with interleaved vertices.\n var interleavedAttributes = interleaveAttributes(attributes);\n if (defined(interleavedAttributes)) {\n vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: interleavedAttributes.buffer,\n usage: bufferUsage,\n });\n var offsetsInBytes = interleavedAttributes.offsetsInBytes;\n var strideInBytes = interleavedAttributes.vertexSizeInBytes;\n\n for (name in attributes) {\n if (attributes.hasOwnProperty(name) && defined(attributes[name])) {\n attribute = attributes[name];\n\n if (defined(attribute.values)) {\n // Common case: per-vertex attributes\n vaAttributes.push({\n index: attributeLocations[name],\n vertexBuffer: vertexBuffer,\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n offsetInBytes: offsetsInBytes[name],\n strideInBytes: strideInBytes,\n });\n } else {\n // Constant attribute for all vertices\n vaAttributes.push({\n index: attributeLocations[name],\n value: attribute.value,\n componentDatatype: attribute.componentDatatype,\n normalize: attribute.normalize,\n });\n }\n }\n }\n }\n } else {\n // One vertex buffer per attribute.\n for (name in attributes) {\n if (attributes.hasOwnProperty(name) && defined(attributes[name])) {\n attribute = attributes[name];\n\n var componentDatatype = attribute.componentDatatype;\n if (componentDatatype === ComponentDatatype.DOUBLE) {\n componentDatatype = ComponentDatatype.FLOAT;\n }\n\n vertexBuffer = undefined;\n if (defined(attribute.values)) {\n vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: ComponentDatatype.createTypedArray(\n componentDatatype,\n attribute.values\n ),\n usage: bufferUsage,\n });\n }\n\n vaAttributes.push({\n index: attributeLocations[name],\n vertexBuffer: vertexBuffer,\n value: attribute.value,\n componentDatatype: componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n });\n }\n }\n }\n\n var indexBuffer;\n var indices = geometry.indices;\n if (defined(indices)) {\n if (\n Geometry.computeNumberOfVertices(geometry) >=\n CesiumMath.SIXTY_FOUR_KILOBYTES &&\n context.elementIndexUint\n ) {\n indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: new Uint32Array(indices),\n usage: bufferUsage,\n indexDatatype: IndexDatatype.UNSIGNED_INT,\n });\n } else {\n indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: new Uint16Array(indices),\n usage: bufferUsage,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n }\n }\n\n return new VertexArray({\n context: context,\n attributes: vaAttributes,\n indexBuffer: indexBuffer,\n });\n};\n\nObject.defineProperties(VertexArray.prototype, {\n numberOfAttributes: {\n get: function () {\n return this._attributes.length;\n },\n },\n numberOfVertices: {\n get: function () {\n return this._numberOfVertices;\n },\n },\n indexBuffer: {\n get: function () {\n return this._indexBuffer;\n },\n },\n});\n\n/**\n * index is the location in the array of attributes, not the index property of an attribute.\n */\nVertexArray.prototype.getAttribute = function (index) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"index\", index);\n //>>includeEnd('debug');\n\n return this._attributes[index];\n};\n\n// Workaround for ANGLE, where the attribute divisor seems to be part of the global state instead\n// of the VAO state. This function is called when the vao is bound, and should be removed\n// once the ANGLE issue is resolved. Setting the divisor should normally happen in vertexAttrib and\n// disableVertexAttribArray.\nfunction setVertexAttribDivisor(vertexArray) {\n var context = vertexArray._context;\n var hasInstancedAttributes = vertexArray._hasInstancedAttributes;\n if (!hasInstancedAttributes && !context._previousDrawInstanced) {\n return;\n }\n context._previousDrawInstanced = hasInstancedAttributes;\n\n var divisors = context._vertexAttribDivisors;\n var attributes = vertexArray._attributes;\n var maxAttributes = ContextLimits.maximumVertexAttributes;\n var i;\n\n if (hasInstancedAttributes) {\n var length = attributes.length;\n for (i = 0; i < length; ++i) {\n var attribute = attributes[i];\n if (attribute.enabled) {\n var divisor = attribute.instanceDivisor;\n var index = attribute.index;\n if (divisor !== divisors[index]) {\n context.glVertexAttribDivisor(index, divisor);\n divisors[index] = divisor;\n }\n }\n }\n } else {\n for (i = 0; i < maxAttributes; ++i) {\n if (divisors[i] > 0) {\n context.glVertexAttribDivisor(i, 0);\n divisors[i] = 0;\n }\n }\n }\n}\n\n// Vertex attributes backed by a constant value go through vertexAttrib[1234]f[v]\n// which is part of context state rather than VAO state.\nfunction setConstantAttributes(vertexArray, gl) {\n var attributes = vertexArray._attributes;\n var length = attributes.length;\n for (var i = 0; i < length; ++i) {\n var attribute = attributes[i];\n if (attribute.enabled && defined(attribute.value)) {\n attribute.vertexAttrib(gl);\n }\n }\n}\n\nVertexArray.prototype._bind = function () {\n if (defined(this._vao)) {\n this._context.glBindVertexArray(this._vao);\n if (this._context.instancedArrays) {\n setVertexAttribDivisor(this);\n }\n if (this._hasConstantAttributes) {\n setConstantAttributes(this, this._gl);\n }\n } else {\n bind(this._gl, this._attributes, this._indexBuffer);\n }\n};\n\nVertexArray.prototype._unBind = function () {\n if (defined(this._vao)) {\n this._context.glBindVertexArray(null);\n } else {\n var attributes = this._attributes;\n var gl = this._gl;\n\n for (var i = 0; i < attributes.length; ++i) {\n var attribute = attributes[i];\n if (attribute.enabled) {\n attribute.disableVertexAttribArray(gl);\n }\n }\n if (this._indexBuffer) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n }\n }\n};\n\nVertexArray.prototype.isDestroyed = function () {\n return false;\n};\n\nVertexArray.prototype.destroy = function () {\n var attributes = this._attributes;\n for (var i = 0; i < attributes.length; ++i) {\n var vertexBuffer = attributes[i].vertexBuffer;\n if (\n defined(vertexBuffer) &&\n !vertexBuffer.isDestroyed() &&\n vertexBuffer.vertexArrayDestroyable\n ) {\n vertexBuffer.destroy();\n }\n }\n\n var indexBuffer = this._indexBuffer;\n if (\n defined(indexBuffer) &&\n !indexBuffer.isDestroyed() &&\n indexBuffer.vertexArrayDestroyable\n ) {\n indexBuffer.destroy();\n }\n\n if (defined(this._vao)) {\n this._context.glDeleteVertexArray(this._vao);\n }\n\n return destroyObject(this);\n};\nexport default VertexArray;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * Creates a texture to look up per instance attributes for batched primitives. For example, store each primitive's pick color in the texture.\n *\n * @alias BatchTable\n * @constructor\n * @private\n *\n * @param {Context} context The context in which the batch table is created.\n * @param {Object[]} attributes An array of objects describing a per instance attribute. Each object contains a datatype, components per attributes, whether it is normalized and a function name\n * to retrieve the value in the vertex shader.\n * @param {Number} numberOfInstances The number of instances in a batch table.\n *\n * @example\n * // create the batch table\n * var attributes = [{\n * functionName : 'getShow',\n * componentDatatype : ComponentDatatype.UNSIGNED_BYTE,\n * componentsPerAttribute : 1\n * }, {\n * functionName : 'getPickColor',\n * componentDatatype : ComponentDatatype.UNSIGNED_BYTE,\n * componentsPerAttribute : 4,\n * normalize : true\n * }];\n * var batchTable = new BatchTable(context, attributes, 5);\n *\n * // when creating the draw commands, update the uniform map and the vertex shader\n * vertexShaderSource = batchTable.getVertexShaderCallback()(vertexShaderSource);\n * var shaderProgram = ShaderProgram.fromCache({\n * // ...\n * vertexShaderSource : vertexShaderSource,\n * });\n *\n * drawCommand.shaderProgram = shaderProgram;\n * drawCommand.uniformMap = batchTable.getUniformMapCallback()(uniformMap);\n *\n * // use the attribute function names in the shader to retrieve the instance values\n * // ...\n * attribute float batchId;\n *\n * void main() {\n * // ...\n * float show = getShow(batchId);\n * vec3 pickColor = getPickColor(batchId);\n * // ...\n * }\n */\nfunction BatchTable(context, attributes, numberOfInstances) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(context)) {\n throw new DeveloperError(\"context is required\");\n }\n if (!defined(attributes)) {\n throw new DeveloperError(\"attributes is required\");\n }\n if (!defined(numberOfInstances)) {\n throw new DeveloperError(\"numberOfInstances is required\");\n }\n //>>includeEnd('debug');\n\n this._attributes = attributes;\n this._numberOfInstances = numberOfInstances;\n\n if (attributes.length === 0) {\n return;\n }\n\n // PERFORMANCE_IDEA: We may be able to arrange the attributes so they can be packing into fewer texels.\n // Right now, an attribute with one component uses an entire texel when 4 single component attributes can\n // be packed into a texel.\n //\n // Packing floats into unsigned byte textures makes the problem worse. A single component float attribute\n // will be packed into a single texel leaving 3 texels unused. 4 texels are reserved for each float attribute\n // regardless of how many components it has.\n var pixelDatatype = getDatatype(attributes);\n var textureFloatSupported = context.floatingPointTexture;\n var packFloats =\n pixelDatatype === PixelDatatype.FLOAT && !textureFloatSupported;\n var offsets = createOffsets(attributes, packFloats);\n\n var stride = getStride(offsets, attributes, packFloats);\n var maxNumberOfInstancesPerRow = Math.floor(\n ContextLimits.maximumTextureSize / stride\n );\n\n var instancesPerWidth = Math.min(\n numberOfInstances,\n maxNumberOfInstancesPerRow\n );\n var width = stride * instancesPerWidth;\n var height = Math.ceil(numberOfInstances / instancesPerWidth);\n\n var stepX = 1.0 / width;\n var centerX = stepX * 0.5;\n var stepY = 1.0 / height;\n var centerY = stepY * 0.5;\n\n this._textureDimensions = new Cartesian2(width, height);\n this._textureStep = new Cartesian4(stepX, centerX, stepY, centerY);\n this._pixelDatatype = !packFloats\n ? pixelDatatype\n : PixelDatatype.UNSIGNED_BYTE;\n this._packFloats = packFloats;\n this._offsets = offsets;\n this._stride = stride;\n this._texture = undefined;\n\n var batchLength = 4 * width * height;\n this._batchValues =\n pixelDatatype === PixelDatatype.FLOAT && !packFloats\n ? new Float32Array(batchLength)\n : new Uint8Array(batchLength);\n this._batchValuesDirty = false;\n}\n\nObject.defineProperties(BatchTable.prototype, {\n /**\n * The attribute descriptions.\n * @memberOf BatchTable.prototype\n * @type {Object[]}\n * @readonly\n */\n attributes: {\n get: function () {\n return this._attributes;\n },\n },\n /**\n * The number of instances.\n * @memberOf BatchTable.prototype\n * @type {Number}\n * @readonly\n */\n numberOfInstances: {\n get: function () {\n return this._numberOfInstances;\n },\n },\n});\n\nfunction getDatatype(attributes) {\n var foundFloatDatatype = false;\n var length = attributes.length;\n for (var i = 0; i < length; ++i) {\n if (attributes[i].componentDatatype !== ComponentDatatype.UNSIGNED_BYTE) {\n foundFloatDatatype = true;\n break;\n }\n }\n return foundFloatDatatype ? PixelDatatype.FLOAT : PixelDatatype.UNSIGNED_BYTE;\n}\n\nfunction getAttributeType(attributes, attributeIndex) {\n var componentsPerAttribute =\n attributes[attributeIndex].componentsPerAttribute;\n if (componentsPerAttribute === 2) {\n return Cartesian2;\n } else if (componentsPerAttribute === 3) {\n return Cartesian3;\n } else if (componentsPerAttribute === 4) {\n return Cartesian4;\n }\n return Number;\n}\n\nfunction createOffsets(attributes, packFloats) {\n var offsets = new Array(attributes.length);\n\n var currentOffset = 0;\n var attributesLength = attributes.length;\n for (var i = 0; i < attributesLength; ++i) {\n var attribute = attributes[i];\n var componentDatatype = attribute.componentDatatype;\n\n offsets[i] = currentOffset;\n\n if (componentDatatype !== ComponentDatatype.UNSIGNED_BYTE && packFloats) {\n currentOffset += 4;\n } else {\n ++currentOffset;\n }\n }\n\n return offsets;\n}\n\nfunction getStride(offsets, attributes, packFloats) {\n var length = offsets.length;\n var lastOffset = offsets[length - 1];\n var lastAttribute = attributes[length - 1];\n var componentDatatype = lastAttribute.componentDatatype;\n\n if (componentDatatype !== ComponentDatatype.UNSIGNED_BYTE && packFloats) {\n return lastOffset + 4;\n }\n return lastOffset + 1;\n}\n\nvar scratchPackedFloatCartesian4 = new Cartesian4();\n\nfunction getPackedFloat(array, index, result) {\n var packed = Cartesian4.unpack(array, index, scratchPackedFloatCartesian4);\n var x = Cartesian4.unpackFloat(packed);\n\n packed = Cartesian4.unpack(array, index + 4, scratchPackedFloatCartesian4);\n var y = Cartesian4.unpackFloat(packed);\n\n packed = Cartesian4.unpack(array, index + 8, scratchPackedFloatCartesian4);\n var z = Cartesian4.unpackFloat(packed);\n\n packed = Cartesian4.unpack(array, index + 12, scratchPackedFloatCartesian4);\n var w = Cartesian4.unpackFloat(packed);\n\n return Cartesian4.fromElements(x, y, z, w, result);\n}\n\nfunction setPackedAttribute(value, array, index) {\n var packed = Cartesian4.packFloat(value.x, scratchPackedFloatCartesian4);\n Cartesian4.pack(packed, array, index);\n\n packed = Cartesian4.packFloat(value.y, packed);\n Cartesian4.pack(packed, array, index + 4);\n\n packed = Cartesian4.packFloat(value.z, packed);\n Cartesian4.pack(packed, array, index + 8);\n\n packed = Cartesian4.packFloat(value.w, packed);\n Cartesian4.pack(packed, array, index + 12);\n}\n\nvar scratchGetAttributeCartesian4 = new Cartesian4();\n\n/**\n * Gets the value of an attribute in the table.\n *\n * @param {Number} instanceIndex The index of the instance.\n * @param {Number} attributeIndex The index of the attribute.\n * @param {undefined|Cartesian2|Cartesian3|Cartesian4} [result] The object onto which to store the result. The type is dependent on the attribute's number of components.\n * @returns {Number|Cartesian2|Cartesian3|Cartesian4} The attribute value stored for the instance.\n *\n * @exception {DeveloperError} instanceIndex is out of range.\n * @exception {DeveloperError} attributeIndex is out of range.\n */\nBatchTable.prototype.getBatchedAttribute = function (\n instanceIndex,\n attributeIndex,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (instanceIndex < 0 || instanceIndex >= this._numberOfInstances) {\n throw new DeveloperError(\"instanceIndex is out of range.\");\n }\n if (attributeIndex < 0 || attributeIndex >= this._attributes.length) {\n throw new DeveloperError(\"attributeIndex is out of range\");\n }\n //>>includeEnd('debug');\n\n var attributes = this._attributes;\n var offset = this._offsets[attributeIndex];\n var stride = this._stride;\n\n var index = 4 * stride * instanceIndex + 4 * offset;\n var value;\n\n if (\n this._packFloats &&\n attributes[attributeIndex].componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n ) {\n value = getPackedFloat(\n this._batchValues,\n index,\n scratchGetAttributeCartesian4\n );\n } else {\n value = Cartesian4.unpack(\n this._batchValues,\n index,\n scratchGetAttributeCartesian4\n );\n }\n\n var attributeType = getAttributeType(attributes, attributeIndex);\n if (defined(attributeType.fromCartesian4)) {\n return attributeType.fromCartesian4(value, result);\n } else if (defined(attributeType.clone)) {\n return attributeType.clone(value, result);\n }\n\n return value.x;\n};\n\nvar setAttributeScratchValues = [\n undefined,\n undefined,\n new Cartesian2(),\n new Cartesian3(),\n new Cartesian4(),\n];\nvar setAttributeScratchCartesian4 = new Cartesian4();\n\n/**\n * Sets the value of an attribute in the table.\n *\n * @param {Number} instanceIndex The index of the instance.\n * @param {Number} attributeIndex The index of the attribute.\n * @param {Number|Cartesian2|Cartesian3|Cartesian4} value The value to be stored in the table. The type of value will depend on the number of components of the attribute.\n *\n * @exception {DeveloperError} instanceIndex is out of range.\n * @exception {DeveloperError} attributeIndex is out of range.\n */\nBatchTable.prototype.setBatchedAttribute = function (\n instanceIndex,\n attributeIndex,\n value\n) {\n //>>includeStart('debug', pragmas.debug);\n if (instanceIndex < 0 || instanceIndex >= this._numberOfInstances) {\n throw new DeveloperError(\"instanceIndex is out of range.\");\n }\n if (attributeIndex < 0 || attributeIndex >= this._attributes.length) {\n throw new DeveloperError(\"attributeIndex is out of range\");\n }\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var attributes = this._attributes;\n var result =\n setAttributeScratchValues[\n attributes[attributeIndex].componentsPerAttribute\n ];\n var currentAttribute = this.getBatchedAttribute(\n instanceIndex,\n attributeIndex,\n result\n );\n var attributeType = getAttributeType(this._attributes, attributeIndex);\n var entriesEqual = defined(attributeType.equals)\n ? attributeType.equals(currentAttribute, value)\n : currentAttribute === value;\n if (entriesEqual) {\n return;\n }\n\n var attributeValue = setAttributeScratchCartesian4;\n attributeValue.x = defined(value.x) ? value.x : value;\n attributeValue.y = defined(value.y) ? value.y : 0.0;\n attributeValue.z = defined(value.z) ? value.z : 0.0;\n attributeValue.w = defined(value.w) ? value.w : 0.0;\n\n var offset = this._offsets[attributeIndex];\n var stride = this._stride;\n var index = 4 * stride * instanceIndex + 4 * offset;\n\n if (\n this._packFloats &&\n attributes[attributeIndex].componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n ) {\n setPackedAttribute(attributeValue, this._batchValues, index);\n } else {\n Cartesian4.pack(attributeValue, this._batchValues, index);\n }\n\n this._batchValuesDirty = true;\n};\n\nfunction createTexture(batchTable, context) {\n var dimensions = batchTable._textureDimensions;\n batchTable._texture = new Texture({\n context: context,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: batchTable._pixelDatatype,\n width: dimensions.x,\n height: dimensions.y,\n sampler: Sampler.NEAREST,\n flipY: false,\n });\n}\n\nfunction updateTexture(batchTable) {\n var dimensions = batchTable._textureDimensions;\n batchTable._texture.copyFrom({\n width: dimensions.x,\n height: dimensions.y,\n arrayBufferView: batchTable._batchValues,\n });\n}\n\n/**\n * Creates/updates the batch table texture.\n * @param {FrameState} frameState The frame state.\n *\n * @exception {RuntimeError} The floating point texture extension is required but not supported.\n */\nBatchTable.prototype.update = function (frameState) {\n if (\n (defined(this._texture) && !this._batchValuesDirty) ||\n this._attributes.length === 0\n ) {\n return;\n }\n\n this._batchValuesDirty = false;\n\n if (!defined(this._texture)) {\n createTexture(this, frameState.context);\n }\n updateTexture(this);\n};\n\n/**\n * Gets a function that will update a uniform map to contain values for looking up values in the batch table.\n *\n * @returns {BatchTable.updateUniformMapCallback} A callback for updating uniform maps.\n */\nBatchTable.prototype.getUniformMapCallback = function () {\n var that = this;\n return function (uniformMap) {\n if (that._attributes.length === 0) {\n return uniformMap;\n }\n\n var batchUniformMap = {\n batchTexture: function () {\n return that._texture;\n },\n batchTextureDimensions: function () {\n return that._textureDimensions;\n },\n batchTextureStep: function () {\n return that._textureStep;\n },\n };\n return combine(uniformMap, batchUniformMap);\n };\n};\n\nfunction getGlslComputeSt(batchTable) {\n var stride = batchTable._stride;\n\n // GLSL batchId is zero-based: [0, numberOfInstances - 1]\n if (batchTable._textureDimensions.y === 1) {\n return (\n \"uniform vec4 batchTextureStep; \\n\" +\n \"vec2 computeSt(float batchId) \\n\" +\n \"{ \\n\" +\n \" float stepX = batchTextureStep.x; \\n\" +\n \" float centerX = batchTextureStep.y; \\n\" +\n \" float numberOfAttributes = float(\" +\n stride +\n \"); \\n\" +\n \" return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5); \\n\" +\n \"} \\n\"\n );\n }\n\n return (\n \"uniform vec4 batchTextureStep; \\n\" +\n \"uniform vec2 batchTextureDimensions; \\n\" +\n \"vec2 computeSt(float batchId) \\n\" +\n \"{ \\n\" +\n \" float stepX = batchTextureStep.x; \\n\" +\n \" float centerX = batchTextureStep.y; \\n\" +\n \" float stepY = batchTextureStep.z; \\n\" +\n \" float centerY = batchTextureStep.w; \\n\" +\n \" float numberOfAttributes = float(\" +\n stride +\n \"); \\n\" +\n \" float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x); \\n\" +\n \" float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x); \\n\" +\n \" return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \\n\" +\n \"} \\n\"\n );\n}\n\nfunction getComponentType(componentsPerAttribute) {\n if (componentsPerAttribute === 1) {\n return \"float\";\n }\n return \"vec\" + componentsPerAttribute;\n}\n\nfunction getComponentSwizzle(componentsPerAttribute) {\n if (componentsPerAttribute === 1) {\n return \".x\";\n } else if (componentsPerAttribute === 2) {\n return \".xy\";\n } else if (componentsPerAttribute === 3) {\n return \".xyz\";\n }\n return \"\";\n}\n\nfunction getGlslAttributeFunction(batchTable, attributeIndex) {\n var attributes = batchTable._attributes;\n var attribute = attributes[attributeIndex];\n var componentsPerAttribute = attribute.componentsPerAttribute;\n var functionName = attribute.functionName;\n var functionReturnType = getComponentType(componentsPerAttribute);\n var functionReturnValue = getComponentSwizzle(componentsPerAttribute);\n\n var offset = batchTable._offsets[attributeIndex];\n\n var glslFunction =\n functionReturnType +\n \" \" +\n functionName +\n \"(float batchId) \\n\" +\n \"{ \\n\" +\n \" vec2 st = computeSt(batchId); \\n\" +\n \" st.x += batchTextureStep.x * float(\" +\n offset +\n \"); \\n\";\n\n if (\n batchTable._packFloats &&\n attribute.componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n ) {\n glslFunction +=\n \"vec4 textureValue; \\n\" +\n \"textureValue.x = czm_unpackFloat(texture2D(batchTexture, st)); \\n\" +\n \"textureValue.y = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x, 0.0))); \\n\" +\n \"textureValue.z = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0))); \\n\" +\n \"textureValue.w = czm_unpackFloat(texture2D(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0))); \\n\";\n } else {\n glslFunction += \" vec4 textureValue = texture2D(batchTexture, st); \\n\";\n }\n\n glslFunction +=\n \" \" +\n functionReturnType +\n \" value = textureValue\" +\n functionReturnValue +\n \"; \\n\";\n\n if (\n batchTable._pixelDatatype === PixelDatatype.UNSIGNED_BYTE &&\n attribute.componentDatatype === ComponentDatatype.UNSIGNED_BYTE &&\n !attribute.normalize\n ) {\n glslFunction += \"value *= 255.0; \\n\";\n } else if (\n batchTable._pixelDatatype === PixelDatatype.FLOAT &&\n attribute.componentDatatype === ComponentDatatype.UNSIGNED_BYTE &&\n attribute.normalize\n ) {\n glslFunction += \"value /= 255.0; \\n\";\n }\n\n glslFunction += \" return value; \\n\" + \"} \\n\";\n return glslFunction;\n}\n\n/**\n * Gets a function that will update a vertex shader to contain functions for looking up values in the batch table.\n *\n * @returns {BatchTable.updateVertexShaderSourceCallback} A callback for updating a vertex shader source.\n */\nBatchTable.prototype.getVertexShaderCallback = function () {\n var attributes = this._attributes;\n if (attributes.length === 0) {\n return function (source) {\n return source;\n };\n }\n\n var batchTableShader = \"uniform highp sampler2D batchTexture; \\n\";\n batchTableShader += getGlslComputeSt(this) + \"\\n\";\n\n var length = attributes.length;\n for (var i = 0; i < length; ++i) {\n batchTableShader += getGlslAttributeFunction(this, i);\n }\n\n return function (source) {\n var mainIndex = source.indexOf(\"void main\");\n var beforeMain = source.substring(0, mainIndex);\n var afterMain = source.substring(mainIndex);\n return beforeMain + \"\\n\" + batchTableShader + \"\\n\" + afterMain;\n };\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see BatchTable#destroy\n */\nBatchTable.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see BatchTable#isDestroyed\n */\nBatchTable.prototype.destroy = function () {\n this._texture = this._texture && this._texture.destroy();\n return destroyObject(this);\n};\n\n/**\n * A callback for updating uniform maps.\n * @callback BatchTable.updateUniformMapCallback\n *\n * @param {Object} uniformMap The uniform map.\n * @returns {Object} The new uniform map with properties for retrieving values from the batch table.\n */\n\n/**\n * A callback for updating a vertex shader source.\n * @callback BatchTable.updateVertexShaderSourceCallback\n *\n * @param {String} vertexShaderSource The vertex shader source.\n * @returns {String} The new vertex shader source with the functions for retrieving batch table values injected.\n */\nexport default BatchTable;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport GeometryAttributes from \"../Core/GeometryAttributes.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\n\nfunction transformToWorldCoordinates(\n instances,\n primitiveModelMatrix,\n scene3DOnly\n) {\n var toWorld = !scene3DOnly;\n var length = instances.length;\n var i;\n\n if (!toWorld && length > 1) {\n var modelMatrix = instances[0].modelMatrix;\n\n for (i = 1; i < length; ++i) {\n if (!Matrix4.equals(modelMatrix, instances[i].modelMatrix)) {\n toWorld = true;\n break;\n }\n }\n }\n\n if (toWorld) {\n for (i = 0; i < length; ++i) {\n if (defined(instances[i].geometry)) {\n GeometryPipeline.transformToWorldCoordinates(instances[i]);\n }\n }\n } else {\n // Leave geometry in local coordinate system; auto update model-matrix.\n Matrix4.multiplyTransformation(\n primitiveModelMatrix,\n instances[0].modelMatrix,\n primitiveModelMatrix\n );\n }\n}\n\nfunction addGeometryBatchId(geometry, batchId) {\n var attributes = geometry.attributes;\n var positionAttr = attributes.position;\n var numberOfComponents =\n positionAttr.values.length / positionAttr.componentsPerAttribute;\n\n attributes.batchId = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 1,\n values: new Float32Array(numberOfComponents),\n });\n\n var values = attributes.batchId.values;\n for (var j = 0; j < numberOfComponents; ++j) {\n values[j] = batchId;\n }\n}\n\nfunction addBatchIds(instances) {\n var length = instances.length;\n\n for (var i = 0; i < length; ++i) {\n var instance = instances[i];\n if (defined(instance.geometry)) {\n addGeometryBatchId(instance.geometry, i);\n } else if (\n defined(instance.westHemisphereGeometry) &&\n defined(instance.eastHemisphereGeometry)\n ) {\n addGeometryBatchId(instance.westHemisphereGeometry, i);\n addGeometryBatchId(instance.eastHemisphereGeometry, i);\n }\n }\n}\n\nfunction geometryPipeline(parameters) {\n var instances = parameters.instances;\n var projection = parameters.projection;\n var uintIndexSupport = parameters.elementIndexUintSupported;\n var scene3DOnly = parameters.scene3DOnly;\n var vertexCacheOptimize = parameters.vertexCacheOptimize;\n var compressVertices = parameters.compressVertices;\n var modelMatrix = parameters.modelMatrix;\n\n var i;\n var geometry;\n var primitiveType;\n var length = instances.length;\n\n for (i = 0; i < length; ++i) {\n if (defined(instances[i].geometry)) {\n primitiveType = instances[i].geometry.primitiveType;\n break;\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n for (i = 1; i < length; ++i) {\n if (\n defined(instances[i].geometry) &&\n instances[i].geometry.primitiveType !== primitiveType\n ) {\n throw new DeveloperError(\n \"All instance geometries must have the same primitiveType.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n // Unify to world coordinates before combining.\n transformToWorldCoordinates(instances, modelMatrix, scene3DOnly);\n\n // Clip to IDL\n if (!scene3DOnly) {\n for (i = 0; i < length; ++i) {\n if (defined(instances[i].geometry)) {\n GeometryPipeline.splitLongitude(instances[i]);\n }\n }\n }\n\n addBatchIds(instances);\n\n // Optimize for vertex shader caches\n if (vertexCacheOptimize) {\n for (i = 0; i < length; ++i) {\n var instance = instances[i];\n if (defined(instance.geometry)) {\n GeometryPipeline.reorderForPostVertexCache(instance.geometry);\n GeometryPipeline.reorderForPreVertexCache(instance.geometry);\n } else if (\n defined(instance.westHemisphereGeometry) &&\n defined(instance.eastHemisphereGeometry)\n ) {\n GeometryPipeline.reorderForPostVertexCache(\n instance.westHemisphereGeometry\n );\n GeometryPipeline.reorderForPreVertexCache(\n instance.westHemisphereGeometry\n );\n\n GeometryPipeline.reorderForPostVertexCache(\n instance.eastHemisphereGeometry\n );\n GeometryPipeline.reorderForPreVertexCache(\n instance.eastHemisphereGeometry\n );\n }\n }\n }\n\n // Combine into single geometry for better rendering performance.\n var geometries = GeometryPipeline.combineInstances(instances);\n\n length = geometries.length;\n for (i = 0; i < length; ++i) {\n geometry = geometries[i];\n\n // Split positions for GPU RTE\n var attributes = geometry.attributes;\n var name;\n if (!scene3DOnly) {\n for (name in attributes) {\n if (\n attributes.hasOwnProperty(name) &&\n attributes[name].componentDatatype === ComponentDatatype.DOUBLE\n ) {\n var name3D = name + \"3D\";\n var name2D = name + \"2D\";\n\n // Compute 2D positions\n GeometryPipeline.projectTo2D(\n geometry,\n name,\n name3D,\n name2D,\n projection\n );\n if (defined(geometry.boundingSphere) && name === \"position\") {\n geometry.boundingSphereCV = BoundingSphere.fromVertices(\n geometry.attributes.position2D.values\n );\n }\n\n GeometryPipeline.encodeAttribute(\n geometry,\n name3D,\n name3D + \"High\",\n name3D + \"Low\"\n );\n GeometryPipeline.encodeAttribute(\n geometry,\n name2D,\n name2D + \"High\",\n name2D + \"Low\"\n );\n }\n }\n } else {\n for (name in attributes) {\n if (\n attributes.hasOwnProperty(name) &&\n attributes[name].componentDatatype === ComponentDatatype.DOUBLE\n ) {\n GeometryPipeline.encodeAttribute(\n geometry,\n name,\n name + \"3DHigh\",\n name + \"3DLow\"\n );\n }\n }\n }\n\n // oct encode and pack normals, compress texture coordinates\n if (compressVertices) {\n GeometryPipeline.compressVertices(geometry);\n }\n }\n\n if (!uintIndexSupport) {\n // Break into multiple geometries to fit within unsigned short indices if needed\n var splitGeometries = [];\n length = geometries.length;\n for (i = 0; i < length; ++i) {\n geometry = geometries[i];\n splitGeometries = splitGeometries.concat(\n GeometryPipeline.fitToUnsignedShortIndices(geometry)\n );\n }\n\n geometries = splitGeometries;\n }\n\n return geometries;\n}\n\nfunction createPickOffsets(instances, geometryName, geometries, pickOffsets) {\n var offset;\n var indexCount;\n var geometryIndex;\n\n var offsetIndex = pickOffsets.length - 1;\n if (offsetIndex >= 0) {\n var pickOffset = pickOffsets[offsetIndex];\n offset = pickOffset.offset + pickOffset.count;\n geometryIndex = pickOffset.index;\n indexCount = geometries[geometryIndex].indices.length;\n } else {\n offset = 0;\n geometryIndex = 0;\n indexCount = geometries[geometryIndex].indices.length;\n }\n\n var length = instances.length;\n for (var i = 0; i < length; ++i) {\n var instance = instances[i];\n var geometry = instance[geometryName];\n if (!defined(geometry)) {\n continue;\n }\n\n var count = geometry.indices.length;\n\n if (offset + count > indexCount) {\n offset = 0;\n indexCount = geometries[++geometryIndex].indices.length;\n }\n\n pickOffsets.push({\n index: geometryIndex,\n offset: offset,\n count: count,\n });\n offset += count;\n }\n}\n\nfunction createInstancePickOffsets(instances, geometries) {\n var pickOffsets = [];\n createPickOffsets(instances, \"geometry\", geometries, pickOffsets);\n createPickOffsets(\n instances,\n \"westHemisphereGeometry\",\n geometries,\n pickOffsets\n );\n createPickOffsets(\n instances,\n \"eastHemisphereGeometry\",\n geometries,\n pickOffsets\n );\n return pickOffsets;\n}\n\n/**\n * @private\n */\nvar PrimitivePipeline = {};\n\n/**\n * @private\n */\nPrimitivePipeline.combineGeometry = function (parameters) {\n var geometries;\n var attributeLocations;\n var instances = parameters.instances;\n var length = instances.length;\n var pickOffsets;\n\n var offsetInstanceExtend;\n var hasOffset = false;\n if (length > 0) {\n geometries = geometryPipeline(parameters);\n if (geometries.length > 0) {\n attributeLocations = GeometryPipeline.createAttributeLocations(\n geometries[0]\n );\n if (parameters.createPickOffsets) {\n pickOffsets = createInstancePickOffsets(instances, geometries);\n }\n }\n if (\n defined(instances[0].attributes) &&\n defined(instances[0].attributes.offset)\n ) {\n offsetInstanceExtend = new Array(length);\n hasOffset = true;\n }\n }\n\n var boundingSpheres = new Array(length);\n var boundingSpheresCV = new Array(length);\n for (var i = 0; i < length; ++i) {\n var instance = instances[i];\n var geometry = instance.geometry;\n if (defined(geometry)) {\n boundingSpheres[i] = geometry.boundingSphere;\n boundingSpheresCV[i] = geometry.boundingSphereCV;\n if (hasOffset) {\n offsetInstanceExtend[i] = instance.geometry.offsetAttribute;\n }\n }\n\n var eastHemisphereGeometry = instance.eastHemisphereGeometry;\n var westHemisphereGeometry = instance.westHemisphereGeometry;\n if (defined(eastHemisphereGeometry) && defined(westHemisphereGeometry)) {\n if (\n defined(eastHemisphereGeometry.boundingSphere) &&\n defined(westHemisphereGeometry.boundingSphere)\n ) {\n boundingSpheres[i] = BoundingSphere.union(\n eastHemisphereGeometry.boundingSphere,\n westHemisphereGeometry.boundingSphere\n );\n }\n if (\n defined(eastHemisphereGeometry.boundingSphereCV) &&\n defined(westHemisphereGeometry.boundingSphereCV)\n ) {\n boundingSpheresCV[i] = BoundingSphere.union(\n eastHemisphereGeometry.boundingSphereCV,\n westHemisphereGeometry.boundingSphereCV\n );\n }\n }\n }\n\n return {\n geometries: geometries,\n modelMatrix: parameters.modelMatrix,\n attributeLocations: attributeLocations,\n pickOffsets: pickOffsets,\n offsetInstanceExtend: offsetInstanceExtend,\n boundingSpheres: boundingSpheres,\n boundingSpheresCV: boundingSpheresCV,\n };\n};\n\nfunction transferGeometry(geometry, transferableObjects) {\n var attributes = geometry.attributes;\n for (var name in attributes) {\n if (attributes.hasOwnProperty(name)) {\n var attribute = attributes[name];\n\n if (defined(attribute) && defined(attribute.values)) {\n transferableObjects.push(attribute.values.buffer);\n }\n }\n }\n\n if (defined(geometry.indices)) {\n transferableObjects.push(geometry.indices.buffer);\n }\n}\n\nfunction transferGeometries(geometries, transferableObjects) {\n var length = geometries.length;\n for (var i = 0; i < length; ++i) {\n transferGeometry(geometries[i], transferableObjects);\n }\n}\n\n// This function was created by simplifying packCreateGeometryResults into a count-only operation.\nfunction countCreateGeometryResults(items) {\n var count = 1;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var geometry = items[i];\n ++count;\n\n if (!defined(geometry)) {\n continue;\n }\n\n var attributes = geometry.attributes;\n\n count +=\n 7 +\n 2 * BoundingSphere.packedLength +\n (defined(geometry.indices) ? geometry.indices.length : 0);\n\n for (var property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property])\n ) {\n var attribute = attributes[property];\n count += 5 + attribute.values.length;\n }\n }\n }\n\n return count;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCreateGeometryResults = function (\n items,\n transferableObjects\n) {\n var packedData = new Float64Array(countCreateGeometryResults(items));\n var stringTable = [];\n var stringHash = {};\n\n var length = items.length;\n var count = 0;\n packedData[count++] = length;\n for (var i = 0; i < length; i++) {\n var geometry = items[i];\n\n var validGeometry = defined(geometry);\n packedData[count++] = validGeometry ? 1.0 : 0.0;\n\n if (!validGeometry) {\n continue;\n }\n\n packedData[count++] = geometry.primitiveType;\n packedData[count++] = geometry.geometryType;\n packedData[count++] = defaultValue(geometry.offsetAttribute, -1);\n\n var validBoundingSphere = defined(geometry.boundingSphere) ? 1.0 : 0.0;\n packedData[count++] = validBoundingSphere;\n if (validBoundingSphere) {\n BoundingSphere.pack(geometry.boundingSphere, packedData, count);\n }\n\n count += BoundingSphere.packedLength;\n\n var validBoundingSphereCV = defined(geometry.boundingSphereCV) ? 1.0 : 0.0;\n packedData[count++] = validBoundingSphereCV;\n if (validBoundingSphereCV) {\n BoundingSphere.pack(geometry.boundingSphereCV, packedData, count);\n }\n\n count += BoundingSphere.packedLength;\n\n var attributes = geometry.attributes;\n var attributesToWrite = [];\n for (var property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property])\n ) {\n attributesToWrite.push(property);\n if (!defined(stringHash[property])) {\n stringHash[property] = stringTable.length;\n stringTable.push(property);\n }\n }\n }\n\n packedData[count++] = attributesToWrite.length;\n for (var q = 0; q < attributesToWrite.length; q++) {\n var name = attributesToWrite[q];\n var attribute = attributes[name];\n packedData[count++] = stringHash[name];\n packedData[count++] = attribute.componentDatatype;\n packedData[count++] = attribute.componentsPerAttribute;\n packedData[count++] = attribute.normalize ? 1 : 0;\n packedData[count++] = attribute.values.length;\n packedData.set(attribute.values, count);\n count += attribute.values.length;\n }\n\n var indicesLength = defined(geometry.indices) ? geometry.indices.length : 0;\n packedData[count++] = indicesLength;\n\n if (indicesLength > 0) {\n packedData.set(geometry.indices, count);\n count += indicesLength;\n }\n }\n\n transferableObjects.push(packedData.buffer);\n\n return {\n stringTable: stringTable,\n packedData: packedData,\n };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCreateGeometryResults = function (\n createGeometryResult\n) {\n var stringTable = createGeometryResult.stringTable;\n var packedGeometry = createGeometryResult.packedData;\n\n var i;\n var result = new Array(packedGeometry[0]);\n var resultIndex = 0;\n\n var packedGeometryIndex = 1;\n while (packedGeometryIndex < packedGeometry.length) {\n var valid = packedGeometry[packedGeometryIndex++] === 1.0;\n if (!valid) {\n result[resultIndex++] = undefined;\n continue;\n }\n\n var primitiveType = packedGeometry[packedGeometryIndex++];\n var geometryType = packedGeometry[packedGeometryIndex++];\n var offsetAttribute = packedGeometry[packedGeometryIndex++];\n if (offsetAttribute === -1) {\n offsetAttribute = undefined;\n }\n\n var boundingSphere;\n var boundingSphereCV;\n\n var validBoundingSphere = packedGeometry[packedGeometryIndex++] === 1.0;\n if (validBoundingSphere) {\n boundingSphere = BoundingSphere.unpack(\n packedGeometry,\n packedGeometryIndex\n );\n }\n\n packedGeometryIndex += BoundingSphere.packedLength;\n\n var validBoundingSphereCV = packedGeometry[packedGeometryIndex++] === 1.0;\n if (validBoundingSphereCV) {\n boundingSphereCV = BoundingSphere.unpack(\n packedGeometry,\n packedGeometryIndex\n );\n }\n\n packedGeometryIndex += BoundingSphere.packedLength;\n\n var length;\n var values;\n var componentsPerAttribute;\n var attributes = new GeometryAttributes();\n var numAttributes = packedGeometry[packedGeometryIndex++];\n for (i = 0; i < numAttributes; i++) {\n var name = stringTable[packedGeometry[packedGeometryIndex++]];\n var componentDatatype = packedGeometry[packedGeometryIndex++];\n componentsPerAttribute = packedGeometry[packedGeometryIndex++];\n var normalize = packedGeometry[packedGeometryIndex++] !== 0;\n\n length = packedGeometry[packedGeometryIndex++];\n values = ComponentDatatype.createTypedArray(componentDatatype, length);\n for (var valuesIndex = 0; valuesIndex < length; valuesIndex++) {\n values[valuesIndex] = packedGeometry[packedGeometryIndex++];\n }\n\n attributes[name] = new GeometryAttribute({\n componentDatatype: componentDatatype,\n componentsPerAttribute: componentsPerAttribute,\n normalize: normalize,\n values: values,\n });\n }\n\n var indices;\n length = packedGeometry[packedGeometryIndex++];\n\n if (length > 0) {\n var numberOfVertices = values.length / componentsPerAttribute;\n indices = IndexDatatype.createTypedArray(numberOfVertices, length);\n for (i = 0; i < length; i++) {\n indices[i] = packedGeometry[packedGeometryIndex++];\n }\n }\n\n result[resultIndex++] = new Geometry({\n primitiveType: primitiveType,\n geometryType: geometryType,\n boundingSphere: boundingSphere,\n boundingSphereCV: boundingSphereCV,\n indices: indices,\n attributes: attributes,\n offsetAttribute: offsetAttribute,\n });\n }\n\n return result;\n};\n\nfunction packInstancesForCombine(instances, transferableObjects) {\n var length = instances.length;\n var packedData = new Float64Array(1 + length * 19);\n var count = 0;\n packedData[count++] = length;\n for (var i = 0; i < length; i++) {\n var instance = instances[i];\n Matrix4.pack(instance.modelMatrix, packedData, count);\n count += Matrix4.packedLength;\n if (defined(instance.attributes) && defined(instance.attributes.offset)) {\n var values = instance.attributes.offset.value;\n packedData[count] = values[0];\n packedData[count + 1] = values[1];\n packedData[count + 2] = values[2];\n }\n count += 3;\n }\n transferableObjects.push(packedData.buffer);\n\n return packedData;\n}\n\nfunction unpackInstancesForCombine(data) {\n var packedInstances = data;\n var result = new Array(packedInstances[0]);\n var count = 0;\n\n var i = 1;\n while (i < packedInstances.length) {\n var modelMatrix = Matrix4.unpack(packedInstances, i);\n var attributes;\n i += Matrix4.packedLength;\n if (defined(packedInstances[i])) {\n attributes = {\n offset: new OffsetGeometryInstanceAttribute(\n packedInstances[i],\n packedInstances[i + 1],\n packedInstances[i + 2]\n ),\n };\n }\n i += 3;\n\n result[count++] = {\n modelMatrix: modelMatrix,\n attributes: attributes,\n };\n }\n\n return result;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCombineGeometryParameters = function (\n parameters,\n transferableObjects\n) {\n var createGeometryResults = parameters.createGeometryResults;\n var length = createGeometryResults.length;\n\n for (var i = 0; i < length; i++) {\n transferableObjects.push(createGeometryResults[i].packedData.buffer);\n }\n\n return {\n createGeometryResults: parameters.createGeometryResults,\n packedInstances: packInstancesForCombine(\n parameters.instances,\n transferableObjects\n ),\n ellipsoid: parameters.ellipsoid,\n isGeographic: parameters.projection instanceof GeographicProjection,\n elementIndexUintSupported: parameters.elementIndexUintSupported,\n scene3DOnly: parameters.scene3DOnly,\n vertexCacheOptimize: parameters.vertexCacheOptimize,\n compressVertices: parameters.compressVertices,\n modelMatrix: parameters.modelMatrix,\n createPickOffsets: parameters.createPickOffsets,\n };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCombineGeometryParameters = function (\n packedParameters\n) {\n var instances = unpackInstancesForCombine(packedParameters.packedInstances);\n var createGeometryResults = packedParameters.createGeometryResults;\n var length = createGeometryResults.length;\n var instanceIndex = 0;\n\n for (var resultIndex = 0; resultIndex < length; resultIndex++) {\n var geometries = PrimitivePipeline.unpackCreateGeometryResults(\n createGeometryResults[resultIndex]\n );\n var geometriesLength = geometries.length;\n for (\n var geometryIndex = 0;\n geometryIndex < geometriesLength;\n geometryIndex++\n ) {\n var geometry = geometries[geometryIndex];\n var instance = instances[instanceIndex];\n instance.geometry = geometry;\n ++instanceIndex;\n }\n }\n\n var ellipsoid = Ellipsoid.clone(packedParameters.ellipsoid);\n var projection = packedParameters.isGeographic\n ? new GeographicProjection(ellipsoid)\n : new WebMercatorProjection(ellipsoid);\n\n return {\n instances: instances,\n ellipsoid: ellipsoid,\n projection: projection,\n elementIndexUintSupported: packedParameters.elementIndexUintSupported,\n scene3DOnly: packedParameters.scene3DOnly,\n vertexCacheOptimize: packedParameters.vertexCacheOptimize,\n compressVertices: packedParameters.compressVertices,\n modelMatrix: Matrix4.clone(packedParameters.modelMatrix),\n createPickOffsets: packedParameters.createPickOffsets,\n };\n};\n\nfunction packBoundingSpheres(boundingSpheres) {\n var length = boundingSpheres.length;\n var bufferLength = 1 + (BoundingSphere.packedLength + 1) * length;\n var buffer = new Float32Array(bufferLength);\n\n var bufferIndex = 0;\n buffer[bufferIndex++] = length;\n\n for (var i = 0; i < length; ++i) {\n var bs = boundingSpheres[i];\n if (!defined(bs)) {\n buffer[bufferIndex++] = 0.0;\n } else {\n buffer[bufferIndex++] = 1.0;\n BoundingSphere.pack(boundingSpheres[i], buffer, bufferIndex);\n }\n bufferIndex += BoundingSphere.packedLength;\n }\n\n return buffer;\n}\n\nfunction unpackBoundingSpheres(buffer) {\n var result = new Array(buffer[0]);\n var count = 0;\n\n var i = 1;\n while (i < buffer.length) {\n if (buffer[i++] === 1.0) {\n result[count] = BoundingSphere.unpack(buffer, i);\n }\n ++count;\n i += BoundingSphere.packedLength;\n }\n\n return result;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCombineGeometryResults = function (\n results,\n transferableObjects\n) {\n if (defined(results.geometries)) {\n transferGeometries(results.geometries, transferableObjects);\n }\n\n var packedBoundingSpheres = packBoundingSpheres(results.boundingSpheres);\n var packedBoundingSpheresCV = packBoundingSpheres(results.boundingSpheresCV);\n transferableObjects.push(\n packedBoundingSpheres.buffer,\n packedBoundingSpheresCV.buffer\n );\n\n return {\n geometries: results.geometries,\n attributeLocations: results.attributeLocations,\n modelMatrix: results.modelMatrix,\n pickOffsets: results.pickOffsets,\n offsetInstanceExtend: results.offsetInstanceExtend,\n boundingSpheres: packedBoundingSpheres,\n boundingSpheresCV: packedBoundingSpheresCV,\n };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCombineGeometryResults = function (packedResult) {\n return {\n geometries: packedResult.geometries,\n attributeLocations: packedResult.attributeLocations,\n modelMatrix: packedResult.modelMatrix,\n pickOffsets: packedResult.pickOffsets,\n offsetInstanceExtend: packedResult.offsetInstanceExtend,\n boundingSpheres: unpackBoundingSpheres(packedResult.boundingSpheres),\n boundingSpheresCV: unpackBoundingSpheres(packedResult.boundingSpheresCV),\n };\n};\nexport default PrimitivePipeline;\n","/**\n * @private\n */\nvar PrimitiveState = {\n READY: 0,\n CREATING: 1,\n CREATED: 2,\n COMBINING: 3,\n COMBINED: 4,\n COMPLETE: 5,\n FAILED: 6,\n};\nexport default Object.freeze(PrimitiveState);\n","/**\n * Indicates if the scene is viewed in 3D, 2D, or 2.5D Columbus view.\n *\n * @enum {Number}\n * @see Scene#mode\n */\nvar SceneMode = {\n /**\n * Morphing between mode, e.g., 3D to 2D.\n *\n * @type {Number}\n * @constant\n */\n MORPHING: 0,\n\n /**\n * Columbus View mode. A 2.5D perspective view where the map is laid out\n * flat and objects with non-zero height are drawn above it.\n *\n * @type {Number}\n * @constant\n */\n COLUMBUS_VIEW: 1,\n\n /**\n * 2D mode. The map is viewed top-down with an orthographic projection.\n *\n * @type {Number}\n * @constant\n */\n SCENE2D: 2,\n\n /**\n * 3D mode. A traditional 3D perspective view of the globe.\n *\n * @type {Number}\n * @constant\n */\n SCENE3D: 3,\n};\n\n/**\n * Returns the morph time for the given scene mode.\n *\n * @param {SceneMode} value The scene mode\n * @returns {Number} The morph time\n */\nSceneMode.getMorphTime = function (value) {\n if (value === SceneMode.SCENE3D) {\n return 1.0;\n } else if (value === SceneMode.MORPHING) {\n return undefined;\n }\n return 0.0;\n};\nexport default Object.freeze(SceneMode);\n","/**\n * Specifies whether the object casts or receives shadows from light sources when\n * shadows are enabled.\n *\n * @enum {Number}\n */\nvar ShadowMode = {\n /**\n * The object does not cast or receive shadows.\n *\n * @type {Number}\n * @constant\n */\n DISABLED: 0,\n\n /**\n * The object casts and receives shadows.\n *\n * @type {Number}\n * @constant\n */\n ENABLED: 1,\n\n /**\n * The object casts shadows only.\n *\n * @type {Number}\n * @constant\n */\n CAST_ONLY: 2,\n\n /**\n * The object receives shadows only.\n *\n * @type {Number}\n * @constant\n */\n RECEIVE_ONLY: 3,\n};\n\n/**\n * @private\n */\nShadowMode.NUMBER_OF_SHADOW_MODES = 4;\n\n/**\n * @private\n */\nShadowMode.castShadows = function (shadowMode) {\n return (\n shadowMode === ShadowMode.ENABLED || shadowMode === ShadowMode.CAST_ONLY\n );\n};\n\n/**\n * @private\n */\nShadowMode.receiveShadows = function (shadowMode) {\n return (\n shadowMode === ShadowMode.ENABLED || shadowMode === ShadowMode.RECEIVE_ONLY\n );\n};\n\n/**\n * @private\n */\nShadowMode.fromCastReceive = function (castShadows, receiveShadows) {\n if (castShadows && receiveShadows) {\n return ShadowMode.ENABLED;\n } else if (castShadows) {\n return ShadowMode.CAST_ONLY;\n } else if (receiveShadows) {\n return ShadowMode.RECEIVE_ONLY;\n }\n return ShadowMode.DISABLED;\n};\n\nexport default Object.freeze(ShadowMode);\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport GeometryAttributes from \"../Core/GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Plane from \"../Core/Plane.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport subdivideArray from \"../Core/subdivideArray.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BatchTable from \"./BatchTable.js\";\nimport CullFace from \"./CullFace.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport PrimitivePipeline from \"./PrimitivePipeline.js\";\nimport PrimitiveState from \"./PrimitiveState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\n/**\n * A primitive represents geometry in the {@link Scene}. The geometry can be from a single {@link GeometryInstance}\n * as shown in example 1 below, or from an array of instances, even if the geometry is from different\n * geometry types, e.g., an {@link RectangleGeometry} and an {@link EllipsoidGeometry} as shown in Code Example 2.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * </p>\n * <p>\n * Combining multiple instances into one primitive is called batching, and significantly improves performance for static data.\n * Instances can be individually picked; {@link Scene#pick} returns their {@link GeometryInstance#id}. Using\n * per-instance appearances like {@link PerInstanceColorAppearance}, each instance can also have a unique color.\n * </p>\n * <p>\n * {@link Geometry} can either be created and batched on a web worker or the main thread. The first two examples\n * show geometry that will be created on a web worker by using the descriptions of the geometry. The third example\n * shows how to create the geometry on the main thread by explicitly calling the <code>createGeometry</code> method.\n * </p>\n *\n * @alias Primitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {GeometryInstance[]|GeometryInstance} [options.geometryInstances] The geometry instances - or a single geometry instance - to render.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive.\n * @param {Appearance} [options.depthFailAppearance] The appearance used to shade this primitive when it fails the depth test.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates.\n * @param {Boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {Boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {Boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {Boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n * @param {Boolean} [options.cull=true] When <code>true</code>, the renderer frustum culls and horizon culls the primitive's commands based on their bounding volume. Set this to <code>false</code> for a small performance gain if you are manually culling the primitive.\n * @param {Boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {ShadowMode} [options.shadows=ShadowMode.DISABLED] Determines whether this primitive casts or receives shadows from light sources.\n *\n * @example\n * // 1. Draw a translucent ellipse on the surface with a checkerboard pattern\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.EllipseGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-100.0, 20.0),\n * semiMinorAxis : 500000.0,\n * semiMajorAxis : 1000000.0,\n * rotation : Cesium.Math.PI_OVER_FOUR,\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_ST\n * }),\n * id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n * scene.primitives.add(new Cesium.Primitive({\n * geometryInstances : instance,\n * appearance : new Cesium.EllipsoidSurfaceAppearance({\n * material : Cesium.Material.fromType('Checkerboard')\n * })\n * }));\n *\n * @example\n * // 2. Draw different instances each with a unique color\n * var rectangleInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.RectangleGeometry({\n * rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0),\n * vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT\n * }),\n * id : 'rectangle',\n * attributes : {\n * color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)\n * }\n * });\n * var ellipsoidInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.EllipsoidGeometry({\n * radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0),\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL\n * }),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()),\n * id : 'ellipsoid',\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n * }\n * });\n * scene.primitives.add(new Cesium.Primitive({\n * geometryInstances : [rectangleInstance, ellipsoidInstance],\n * appearance : new Cesium.PerInstanceColorAppearance()\n * }));\n *\n * @example\n * // 3. Create the geometry on the main thread.\n * scene.primitives.add(new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : Cesium.EllipsoidGeometry.createGeometry(new Cesium.EllipsoidGeometry({\n * radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0),\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL\n * })),\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n * Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()),\n * id : 'ellipsoid',\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n * }\n * }),\n * appearance : new Cesium.PerInstanceColorAppearance()\n * }));\n *\n * @see GeometryInstance\n * @see Appearance\n * @see ClassificationPrimitive\n * @see GroundPrimitive\n */\nfunction Primitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The geometry instances rendered with this primitive. This may\n * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n * is <code>true</code> when the primitive is constructed.\n * <p>\n * Changing this property after the primitive is rendered has no effect.\n * </p>\n *\n * @readonly\n * @type GeometryInstance[]|GeometryInstance\n *\n * @default undefined\n */\n this.geometryInstances = options.geometryInstances;\n\n /**\n * The {@link Appearance} used to shade this primitive. Each geometry\n * instance is shaded with the same appearance. Some appearances, like\n * {@link PerInstanceColorAppearance} allow giving each instance unique\n * properties.\n *\n * @type Appearance\n *\n * @default undefined\n */\n this.appearance = options.appearance;\n this._appearance = undefined;\n this._material = undefined;\n\n /**\n * The {@link Appearance} used to shade this primitive when it fails the depth test. Each geometry\n * instance is shaded with the same appearance. Some appearances, like\n * {@link PerInstanceColorAppearance} allow giving each instance unique\n * properties.\n *\n * <p>\n * When using an appearance that requires a color attribute, like PerInstanceColorAppearance,\n * add a depthFailColor per-instance attribute instead.\n * </p>\n *\n * <p>\n * Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported,\n * there may be artifacts.\n * </p>\n * @type Appearance\n *\n * @default undefined\n */\n this.depthFailAppearance = options.depthFailAppearance;\n this._depthFailAppearance = undefined;\n this._depthFailMaterial = undefined;\n\n /**\n * The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates.\n * When this is the identity matrix, the primitive is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * <p>\n * This property is only supported in 3D mode.\n * </p>\n *\n * @type Matrix4\n *\n * @default Matrix4.IDENTITY\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n * p.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = new Matrix4();\n\n /**\n * Determines if the primitive will be shown. This affects all geometry\n * instances in the primitive.\n *\n * @type Boolean\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n this._vertexCacheOptimize = defaultValue(options.vertexCacheOptimize, false);\n this._interleave = defaultValue(options.interleave, false);\n this._releaseGeometryInstances = defaultValue(\n options.releaseGeometryInstances,\n true\n );\n this._allowPicking = defaultValue(options.allowPicking, true);\n this._asynchronous = defaultValue(options.asynchronous, true);\n this._compressVertices = defaultValue(options.compressVertices, true);\n\n /**\n * When <code>true</code>, the renderer frustum culls and horizon culls the primitive's commands\n * based on their bounding volume. Set this to <code>false</code> for a small performance gain\n * if you are manually culling the primitive.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.cull = defaultValue(options.cull, true);\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * @private\n */\n this.rtcCenter = options.rtcCenter;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n defined(this.rtcCenter) &&\n (!defined(this.geometryInstances) ||\n (Array.isArray(this.geometryInstances) &&\n this.geometryInstances.length !== 1))\n ) {\n throw new DeveloperError(\n \"Relative-to-center rendering only supports one geometry instance.\"\n );\n }\n //>>includeEnd('debug');\n\n /**\n * Determines whether this primitive casts or receives shadows from light sources.\n *\n * @type {ShadowMode}\n *\n * @default ShadowMode.DISABLED\n */\n this.shadows = defaultValue(options.shadows, ShadowMode.DISABLED);\n\n this._translucent = undefined;\n\n this._state = PrimitiveState.READY;\n this._geometries = [];\n this._error = undefined;\n this._numberOfInstances = 0;\n\n this._boundingSpheres = [];\n this._boundingSphereWC = [];\n this._boundingSphereCV = [];\n this._boundingSphere2D = [];\n this._boundingSphereMorph = [];\n this._perInstanceAttributeCache = [];\n this._instanceIds = [];\n this._lastPerInstanceAttributeIndex = 0;\n\n this._va = [];\n this._attributeLocations = undefined;\n this._primitiveType = undefined;\n\n this._frontFaceRS = undefined;\n this._backFaceRS = undefined;\n this._sp = undefined;\n\n this._depthFailAppearance = undefined;\n this._spDepthFail = undefined;\n this._frontFaceDepthFailRS = undefined;\n this._backFaceDepthFailRS = undefined;\n\n this._pickIds = [];\n\n this._colorCommands = [];\n this._pickCommands = [];\n\n this._createBoundingVolumeFunction = options._createBoundingVolumeFunction;\n this._createRenderStatesFunction = options._createRenderStatesFunction;\n this._createShaderProgramFunction = options._createShaderProgramFunction;\n this._createCommandsFunction = options._createCommandsFunction;\n this._updateAndQueueCommandsFunction =\n options._updateAndQueueCommandsFunction;\n\n this._createPickOffsets = options._createPickOffsets;\n this._pickOffsets = undefined;\n\n this._createGeometryResults = undefined;\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._batchTable = undefined;\n this._batchTableAttributeIndices = undefined;\n this._offsetInstanceExtend = undefined;\n this._batchTableOffsetAttribute2DIndex = undefined;\n this._batchTableOffsetsUpdated = false;\n this._instanceBoundingSpheres = undefined;\n this._instanceBoundingSpheresCV = undefined;\n this._tempBoundingSpheres = undefined;\n this._recomputeBoundingSpheres = false;\n this._batchTableBoundingSpheresUpdated = false;\n this._batchTableBoundingSphereAttributeIndices = undefined;\n}\n\nObject.defineProperties(Primitive.prototype, {\n /**\n * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n vertexCacheOptimize: {\n get: function () {\n return this._vertexCacheOptimize;\n },\n },\n\n /**\n * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n interleave: {\n get: function () {\n return this._interleave;\n },\n },\n\n /**\n * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n releaseGeometryInstances: {\n get: function () {\n return this._releaseGeometryInstances;\n },\n },\n\n /**\n * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved. *\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n allowPicking: {\n get: function () {\n return this._allowPicking;\n },\n },\n\n /**\n * Determines if the geometry instances will be created and batched on a web worker.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n asynchronous: {\n get: function () {\n return this._asynchronous;\n },\n },\n\n /**\n * When <code>true</code>, geometry vertices are compressed, which will save memory.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n compressVertices: {\n get: function () {\n return this._compressVertices;\n },\n },\n\n /**\n * Determines if the primitive is complete and ready to render. If this property is\n * true, the primitive will be rendered the next time that {@link Primitive#update}\n * is called.\n *\n * @memberof Primitive.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof Primitive.prototype\n * @type {Promise.<Primitive>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nfunction getCommonPerInstanceAttributeNames(instances) {\n var length = instances.length;\n\n var attributesInAllInstances = [];\n var attributes0 = instances[0].attributes;\n var name;\n\n for (name in attributes0) {\n if (attributes0.hasOwnProperty(name) && defined(attributes0[name])) {\n var attribute = attributes0[name];\n var inAllInstances = true;\n\n // Does this same attribute exist in all instances?\n for (var i = 1; i < length; ++i) {\n var otherAttribute = instances[i].attributes[name];\n\n if (\n !defined(otherAttribute) ||\n attribute.componentDatatype !== otherAttribute.componentDatatype ||\n attribute.componentsPerAttribute !==\n otherAttribute.componentsPerAttribute ||\n attribute.normalize !== otherAttribute.normalize\n ) {\n inAllInstances = false;\n break;\n }\n }\n\n if (inAllInstances) {\n attributesInAllInstances.push(name);\n }\n }\n }\n\n return attributesInAllInstances;\n}\n\nvar scratchGetAttributeCartesian2 = new Cartesian2();\nvar scratchGetAttributeCartesian3 = new Cartesian3();\nvar scratchGetAttributeCartesian4 = new Cartesian4();\n\nfunction getAttributeValue(value) {\n var componentsPerAttribute = value.length;\n if (componentsPerAttribute === 1) {\n return value[0];\n } else if (componentsPerAttribute === 2) {\n return Cartesian2.unpack(value, 0, scratchGetAttributeCartesian2);\n } else if (componentsPerAttribute === 3) {\n return Cartesian3.unpack(value, 0, scratchGetAttributeCartesian3);\n } else if (componentsPerAttribute === 4) {\n return Cartesian4.unpack(value, 0, scratchGetAttributeCartesian4);\n }\n}\n\nfunction createBatchTable(primitive, context) {\n var geometryInstances = primitive.geometryInstances;\n var instances = Array.isArray(geometryInstances)\n ? geometryInstances\n : [geometryInstances];\n var numberOfInstances = instances.length;\n if (numberOfInstances === 0) {\n return;\n }\n\n var names = getCommonPerInstanceAttributeNames(instances);\n var length = names.length;\n\n var attributes = [];\n var attributeIndices = {};\n var boundingSphereAttributeIndices = {};\n var offset2DIndex;\n\n var firstInstance = instances[0];\n var instanceAttributes = firstInstance.attributes;\n\n var i;\n var name;\n var attribute;\n\n for (i = 0; i < length; ++i) {\n name = names[i];\n attribute = instanceAttributes[name];\n\n attributeIndices[name] = i;\n attributes.push({\n functionName: \"czm_batchTable_\" + name,\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n });\n }\n\n if (names.indexOf(\"distanceDisplayCondition\") !== -1) {\n attributes.push(\n {\n functionName: \"czm_batchTable_boundingSphereCenter3DHigh\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n functionName: \"czm_batchTable_boundingSphereCenter3DLow\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n functionName: \"czm_batchTable_boundingSphereCenter2DHigh\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n functionName: \"czm_batchTable_boundingSphereCenter2DLow\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n functionName: \"czm_batchTable_boundingSphereRadius\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 1,\n }\n );\n boundingSphereAttributeIndices.center3DHigh = attributes.length - 5;\n boundingSphereAttributeIndices.center3DLow = attributes.length - 4;\n boundingSphereAttributeIndices.center2DHigh = attributes.length - 3;\n boundingSphereAttributeIndices.center2DLow = attributes.length - 2;\n boundingSphereAttributeIndices.radius = attributes.length - 1;\n }\n\n if (names.indexOf(\"offset\") !== -1) {\n attributes.push({\n functionName: \"czm_batchTable_offset2D\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n });\n offset2DIndex = attributes.length - 1;\n }\n\n attributes.push({\n functionName: \"czm_batchTable_pickColor\",\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 4,\n normalize: true,\n });\n\n var attributesLength = attributes.length;\n var batchTable = new BatchTable(context, attributes, numberOfInstances);\n\n for (i = 0; i < numberOfInstances; ++i) {\n var instance = instances[i];\n instanceAttributes = instance.attributes;\n\n for (var j = 0; j < length; ++j) {\n name = names[j];\n attribute = instanceAttributes[name];\n var value = getAttributeValue(attribute.value);\n var attributeIndex = attributeIndices[name];\n batchTable.setBatchedAttribute(i, attributeIndex, value);\n }\n\n var pickObject = {\n primitive: defaultValue(instance.pickPrimitive, primitive),\n };\n\n if (defined(instance.id)) {\n pickObject.id = instance.id;\n }\n\n var pickId = context.createPickId(pickObject);\n primitive._pickIds.push(pickId);\n\n var pickColor = pickId.color;\n var color = scratchGetAttributeCartesian4;\n color.x = Color.floatToByte(pickColor.red);\n color.y = Color.floatToByte(pickColor.green);\n color.z = Color.floatToByte(pickColor.blue);\n color.w = Color.floatToByte(pickColor.alpha);\n\n batchTable.setBatchedAttribute(i, attributesLength - 1, color);\n }\n\n primitive._batchTable = batchTable;\n primitive._batchTableAttributeIndices = attributeIndices;\n primitive._batchTableBoundingSphereAttributeIndices = boundingSphereAttributeIndices;\n primitive._batchTableOffsetAttribute2DIndex = offset2DIndex;\n}\n\nfunction cloneAttribute(attribute) {\n var clonedValues;\n if (Array.isArray(attribute.values)) {\n clonedValues = attribute.values.slice(0);\n } else {\n clonedValues = new attribute.values.constructor(attribute.values);\n }\n return new GeometryAttribute({\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n values: clonedValues,\n });\n}\n\nfunction cloneGeometry(geometry) {\n var attributes = geometry.attributes;\n var newAttributes = new GeometryAttributes();\n for (var property in attributes) {\n if (attributes.hasOwnProperty(property) && defined(attributes[property])) {\n newAttributes[property] = cloneAttribute(attributes[property]);\n }\n }\n\n var indices;\n if (defined(geometry.indices)) {\n var sourceValues = geometry.indices;\n if (Array.isArray(sourceValues)) {\n indices = sourceValues.slice(0);\n } else {\n indices = new sourceValues.constructor(sourceValues);\n }\n }\n\n return new Geometry({\n attributes: newAttributes,\n indices: indices,\n primitiveType: geometry.primitiveType,\n boundingSphere: BoundingSphere.clone(geometry.boundingSphere),\n });\n}\n\nfunction cloneInstance(instance, geometry) {\n return {\n geometry: geometry,\n attributes: instance.attributes,\n modelMatrix: Matrix4.clone(instance.modelMatrix),\n pickPrimitive: instance.pickPrimitive,\n id: instance.id,\n };\n}\n\nvar positionRegex = /attribute\\s+vec(?:3|4)\\s+(.*)3DHigh;/g;\n\nPrimitive._modifyShaderPosition = function (\n primitive,\n vertexShaderSource,\n scene3DOnly\n) {\n var match;\n\n var forwardDecl = \"\";\n var attributes = \"\";\n var computeFunctions = \"\";\n\n while ((match = positionRegex.exec(vertexShaderSource)) !== null) {\n var name = match[1];\n\n var functionName =\n \"vec4 czm_compute\" + name[0].toUpperCase() + name.substr(1) + \"()\";\n\n // Don't forward-declare czm_computePosition because computePosition.glsl already does.\n if (functionName !== \"vec4 czm_computePosition()\") {\n forwardDecl += functionName + \";\\n\";\n }\n\n if (!defined(primitive.rtcCenter)) {\n // Use GPU RTE\n if (!scene3DOnly) {\n attributes +=\n \"attribute vec3 \" +\n name +\n \"2DHigh;\\n\" +\n \"attribute vec3 \" +\n name +\n \"2DLow;\\n\";\n\n computeFunctions +=\n functionName +\n \"\\n\" +\n \"{\\n\" +\n \" vec4 p;\\n\" +\n \" if (czm_morphTime == 1.0)\\n\" +\n \" {\\n\" +\n \" p = czm_translateRelativeToEye(\" +\n name +\n \"3DHigh, \" +\n name +\n \"3DLow);\\n\" +\n \" }\\n\" +\n \" else if (czm_morphTime == 0.0)\\n\" +\n \" {\\n\" +\n \" p = czm_translateRelativeToEye(\" +\n name +\n \"2DHigh.zxy, \" +\n name +\n \"2DLow.zxy);\\n\" +\n \" }\\n\" +\n \" else\\n\" +\n \" {\\n\" +\n \" p = czm_columbusViewMorph(\\n\" +\n \" czm_translateRelativeToEye(\" +\n name +\n \"2DHigh.zxy, \" +\n name +\n \"2DLow.zxy),\\n\" +\n \" czm_translateRelativeToEye(\" +\n name +\n \"3DHigh, \" +\n name +\n \"3DLow),\\n\" +\n \" czm_morphTime);\\n\" +\n \" }\\n\" +\n \" return p;\\n\" +\n \"}\\n\\n\";\n } else {\n computeFunctions +=\n functionName +\n \"\\n\" +\n \"{\\n\" +\n \" return czm_translateRelativeToEye(\" +\n name +\n \"3DHigh, \" +\n name +\n \"3DLow);\\n\" +\n \"}\\n\\n\";\n }\n } else {\n // Use RTC\n vertexShaderSource = vertexShaderSource.replace(\n /attribute\\s+vec(?:3|4)\\s+position3DHigh;/g,\n \"\"\n );\n vertexShaderSource = vertexShaderSource.replace(\n /attribute\\s+vec(?:3|4)\\s+position3DLow;/g,\n \"\"\n );\n\n forwardDecl += \"uniform mat4 u_modifiedModelView;\\n\";\n attributes += \"attribute vec4 position;\\n\";\n\n computeFunctions +=\n functionName +\n \"\\n\" +\n \"{\\n\" +\n \" return u_modifiedModelView * position;\\n\" +\n \"}\\n\\n\";\n\n vertexShaderSource = vertexShaderSource.replace(\n /czm_modelViewRelativeToEye\\s+\\*\\s+/g,\n \"\"\n );\n vertexShaderSource = vertexShaderSource.replace(\n /czm_modelViewProjectionRelativeToEye/g,\n \"czm_projection\"\n );\n }\n }\n\n return [forwardDecl, attributes, vertexShaderSource, computeFunctions].join(\n \"\\n\"\n );\n};\n\nPrimitive._appendShowToShader = function (primitive, vertexShaderSource) {\n if (!defined(primitive._batchTableAttributeIndices.show)) {\n return vertexShaderSource;\n }\n\n var renamedVS = ShaderSource.replaceMain(\n vertexShaderSource,\n \"czm_non_show_main\"\n );\n var showMain =\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_show_main(); \\n\" +\n \" gl_Position *= czm_batchTable_show(batchId); \\n\" +\n \"}\";\n\n return renamedVS + \"\\n\" + showMain;\n};\n\nPrimitive._updateColorAttribute = function (\n primitive,\n vertexShaderSource,\n isDepthFail\n) {\n // some appearances have a color attribute for per vertex color.\n // only remove if color is a per instance attribute.\n if (\n !defined(primitive._batchTableAttributeIndices.color) &&\n !defined(primitive._batchTableAttributeIndices.depthFailColor)\n ) {\n return vertexShaderSource;\n }\n\n if (vertexShaderSource.search(/attribute\\s+vec4\\s+color;/g) === -1) {\n return vertexShaderSource;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (\n isDepthFail &&\n !defined(primitive._batchTableAttributeIndices.depthFailColor)\n ) {\n throw new DeveloperError(\n \"A depthFailColor per-instance attribute is required when using a depth fail appearance that uses a color attribute.\"\n );\n }\n //>>includeEnd('debug');\n\n var modifiedVS = vertexShaderSource;\n modifiedVS = modifiedVS.replace(/attribute\\s+vec4\\s+color;/g, \"\");\n if (!isDepthFail) {\n modifiedVS = modifiedVS.replace(\n /(\\b)color(\\b)/g,\n \"$1czm_batchTable_color(batchId)$2\"\n );\n } else {\n modifiedVS = modifiedVS.replace(\n /(\\b)color(\\b)/g,\n \"$1czm_batchTable_depthFailColor(batchId)$2\"\n );\n }\n return modifiedVS;\n};\n\nfunction appendPickToVertexShader(source) {\n var renamedVS = ShaderSource.replaceMain(source, \"czm_non_pick_main\");\n var pickMain =\n \"varying vec4 v_pickColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_pick_main(); \\n\" +\n \" v_pickColor = czm_batchTable_pickColor(batchId); \\n\" +\n \"}\";\n\n return renamedVS + \"\\n\" + pickMain;\n}\n\nfunction appendPickToFragmentShader(source) {\n return \"varying vec4 v_pickColor;\\n\" + source;\n}\n\nPrimitive._updatePickColorAttribute = function (source) {\n var vsPick = source.replace(/attribute\\s+vec4\\s+pickColor;/g, \"\");\n vsPick = vsPick.replace(\n /(\\b)pickColor(\\b)/g,\n \"$1czm_batchTable_pickColor(batchId)$2\"\n );\n return vsPick;\n};\n\nPrimitive._appendOffsetToShader = function (primitive, vertexShaderSource) {\n if (!defined(primitive._batchTableAttributeIndices.offset)) {\n return vertexShaderSource;\n }\n\n var attr = \"attribute float batchId;\\n\";\n attr += \"attribute float applyOffset;\";\n var modifiedShader = vertexShaderSource.replace(\n /attribute\\s+float\\s+batchId;/g,\n attr\n );\n\n var str = \"vec4 $1 = czm_computePosition();\\n\";\n str += \" if (czm_sceneMode == czm_sceneMode3D)\\n\";\n str += \" {\\n\";\n str +=\n \" $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);\";\n str += \" }\\n\";\n str += \" else\\n\";\n str += \" {\\n\";\n str +=\n \" $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);\";\n str += \" }\\n\";\n modifiedShader = modifiedShader.replace(\n /vec4\\s+([A-Za-z0-9_]+)\\s+=\\s+czm_computePosition\\(\\);/g,\n str\n );\n return modifiedShader;\n};\n\nPrimitive._appendDistanceDisplayConditionToShader = function (\n primitive,\n vertexShaderSource,\n scene3DOnly\n) {\n if (\n !defined(primitive._batchTableAttributeIndices.distanceDisplayCondition)\n ) {\n return vertexShaderSource;\n }\n\n var renamedVS = ShaderSource.replaceMain(\n vertexShaderSource,\n \"czm_non_distanceDisplayCondition_main\"\n );\n var distanceDisplayConditionMain =\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_distanceDisplayCondition_main(); \\n\" +\n \" vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId);\\n\" +\n \" vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId);\\n\" +\n \" vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId);\\n\" +\n \" float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId);\\n\";\n\n if (!scene3DOnly) {\n distanceDisplayConditionMain +=\n \" vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId);\\n\" +\n \" vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId);\\n\" +\n \" vec4 centerRTE;\\n\" +\n \" if (czm_morphTime == 1.0)\\n\" +\n \" {\\n\" +\n \" centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\\n\" +\n \" }\\n\" +\n \" else if (czm_morphTime == 0.0)\\n\" +\n \" {\\n\" +\n \" centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy);\\n\" +\n \" }\\n\" +\n \" else\\n\" +\n \" {\\n\" +\n \" centerRTE = czm_columbusViewMorph(\\n\" +\n \" czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy),\\n\" +\n \" czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow),\\n\" +\n \" czm_morphTime);\\n\" +\n \" }\\n\";\n } else {\n distanceDisplayConditionMain +=\n \" vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\\n\";\n }\n\n distanceDisplayConditionMain +=\n \" float radiusSq = boundingSphereRadius * boundingSphereRadius; \\n\" +\n \" float distanceSq; \\n\" +\n \" if (czm_sceneMode == czm_sceneMode2D) \\n\" +\n \" { \\n\" +\n \" distanceSq = czm_eyeHeight2D.y - radiusSq; \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq; \\n\" +\n \" } \\n\" +\n \" distanceSq = max(distanceSq, 0.0); \\n\" +\n \" float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; \\n\" +\n \" float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; \\n\" +\n \" float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; \\n\" +\n \" gl_Position *= show; \\n\" +\n \"}\";\n return renamedVS + \"\\n\" + distanceDisplayConditionMain;\n};\n\nfunction modifyForEncodedNormals(primitive, vertexShaderSource) {\n if (!primitive.compressVertices) {\n return vertexShaderSource;\n }\n\n var containsNormal =\n vertexShaderSource.search(/attribute\\s+vec3\\s+normal;/g) !== -1;\n var containsSt = vertexShaderSource.search(/attribute\\s+vec2\\s+st;/g) !== -1;\n if (!containsNormal && !containsSt) {\n return vertexShaderSource;\n }\n\n var containsTangent =\n vertexShaderSource.search(/attribute\\s+vec3\\s+tangent;/g) !== -1;\n var containsBitangent =\n vertexShaderSource.search(/attribute\\s+vec3\\s+bitangent;/g) !== -1;\n\n var numComponents = containsSt && containsNormal ? 2.0 : 1.0;\n numComponents += containsTangent || containsBitangent ? 1 : 0;\n\n var type = numComponents > 1 ? \"vec\" + numComponents : \"float\";\n\n var attributeName = \"compressedAttributes\";\n var attributeDecl = \"attribute \" + type + \" \" + attributeName + \";\";\n\n var globalDecl = \"\";\n var decode = \"\";\n\n if (containsSt) {\n globalDecl += \"vec2 st;\\n\";\n var stComponent = numComponents > 1 ? attributeName + \".x\" : attributeName;\n decode +=\n \" st = czm_decompressTextureCoordinates(\" + stComponent + \");\\n\";\n }\n\n if (containsNormal && containsTangent && containsBitangent) {\n globalDecl += \"vec3 normal;\\n\" + \"vec3 tangent;\\n\" + \"vec3 bitangent;\\n\";\n decode +=\n \" czm_octDecode(\" +\n attributeName +\n \".\" +\n (containsSt ? \"yz\" : \"xy\") +\n \", normal, tangent, bitangent);\\n\";\n } else {\n if (containsNormal) {\n globalDecl += \"vec3 normal;\\n\";\n decode +=\n \" normal = czm_octDecode(\" +\n attributeName +\n (numComponents > 1 ? \".\" + (containsSt ? \"y\" : \"x\") : \"\") +\n \");\\n\";\n }\n\n if (containsTangent) {\n globalDecl += \"vec3 tangent;\\n\";\n decode +=\n \" tangent = czm_octDecode(\" +\n attributeName +\n \".\" +\n (containsSt && containsNormal ? \"z\" : \"y\") +\n \");\\n\";\n }\n\n if (containsBitangent) {\n globalDecl += \"vec3 bitangent;\\n\";\n decode +=\n \" bitangent = czm_octDecode(\" +\n attributeName +\n \".\" +\n (containsSt && containsNormal ? \"z\" : \"y\") +\n \");\\n\";\n }\n }\n\n var modifiedVS = vertexShaderSource;\n modifiedVS = modifiedVS.replace(/attribute\\s+vec3\\s+normal;/g, \"\");\n modifiedVS = modifiedVS.replace(/attribute\\s+vec2\\s+st;/g, \"\");\n modifiedVS = modifiedVS.replace(/attribute\\s+vec3\\s+tangent;/g, \"\");\n modifiedVS = modifiedVS.replace(/attribute\\s+vec3\\s+bitangent;/g, \"\");\n modifiedVS = ShaderSource.replaceMain(modifiedVS, \"czm_non_compressed_main\");\n var compressedMain =\n \"void main() \\n\" +\n \"{ \\n\" +\n decode +\n \" czm_non_compressed_main(); \\n\" +\n \"}\";\n\n return [attributeDecl, globalDecl, modifiedVS, compressedMain].join(\"\\n\");\n}\n\nfunction depthClampVS(vertexShaderSource) {\n var modifiedVS = ShaderSource.replaceMain(\n vertexShaderSource,\n \"czm_non_depth_clamp_main\"\n );\n modifiedVS +=\n \"void main() {\\n\" +\n \" czm_non_depth_clamp_main();\\n\" +\n \" gl_Position = czm_depthClamp(gl_Position);\" +\n \"}\\n\";\n return modifiedVS;\n}\n\nfunction depthClampFS(fragmentShaderSource) {\n var modifiedFS = ShaderSource.replaceMain(\n fragmentShaderSource,\n \"czm_non_depth_clamp_main\"\n );\n modifiedFS +=\n \"void main() {\\n\" +\n \" czm_non_depth_clamp_main();\\n\" +\n \"#if defined(GL_EXT_frag_depth)\\n\" +\n \" #if defined(LOG_DEPTH)\\n\" +\n \" czm_writeLogDepth();\\n\" +\n \" #else\\n\" +\n \" czm_writeDepthClamp();\\n\" +\n \" #endif\\n\" +\n \"#endif\\n\" +\n \"}\\n\";\n modifiedFS =\n \"#ifdef GL_EXT_frag_depth\\n\" +\n \"#extension GL_EXT_frag_depth : enable\\n\" +\n \"#endif\\n\" +\n modifiedFS;\n return modifiedFS;\n}\n\nfunction validateShaderMatching(shaderProgram, attributeLocations) {\n // For a VAO and shader program to be compatible, the VAO must have\n // all active attribute in the shader program. The VAO may have\n // extra attributes with the only concern being a potential\n // performance hit due to extra memory bandwidth and cache pollution.\n // The shader source could have extra attributes that are not used,\n // but there is no guarantee they will be optimized out.\n //\n // Here, we validate that the VAO has all attributes required\n // to match the shader program.\n var shaderAttributes = shaderProgram.vertexAttributes;\n\n //>>includeStart('debug', pragmas.debug);\n for (var name in shaderAttributes) {\n if (shaderAttributes.hasOwnProperty(name)) {\n if (!defined(attributeLocations[name])) {\n throw new DeveloperError(\n \"Appearance/Geometry mismatch. The appearance requires vertex shader attribute input '\" +\n name +\n \"', which was not computed as part of the Geometry. Use the appearance's vertexFormat property when constructing the geometry.\"\n );\n }\n }\n }\n //>>includeEnd('debug');\n}\n\nfunction getUniformFunction(uniforms, name) {\n return function () {\n return uniforms[name];\n };\n}\n\nvar numberOfCreationWorkers = Math.max(\n FeatureDetection.hardwareConcurrency - 1,\n 1\n);\nvar createGeometryTaskProcessors;\nvar combineGeometryTaskProcessor = new TaskProcessor(\n \"combineGeometry\",\n Number.POSITIVE_INFINITY\n);\n\nfunction loadAsynchronous(primitive, frameState) {\n var instances;\n var geometry;\n var i;\n var j;\n\n var instanceIds = primitive._instanceIds;\n\n if (primitive._state === PrimitiveState.READY) {\n instances = Array.isArray(primitive.geometryInstances)\n ? primitive.geometryInstances\n : [primitive.geometryInstances];\n var length = (primitive._numberOfInstances = instances.length);\n\n var promises = [];\n var subTasks = [];\n for (i = 0; i < length; ++i) {\n geometry = instances[i].geometry;\n instanceIds.push(instances[i].id);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry._workerName)) {\n throw new DeveloperError(\n \"_workerName must be defined for asynchronous geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n subTasks.push({\n moduleName: geometry._workerName,\n geometry: geometry,\n });\n }\n\n if (!defined(createGeometryTaskProcessors)) {\n createGeometryTaskProcessors = new Array(numberOfCreationWorkers);\n for (i = 0; i < numberOfCreationWorkers; i++) {\n createGeometryTaskProcessors[i] = new TaskProcessor(\n \"createGeometry\",\n Number.POSITIVE_INFINITY\n );\n }\n }\n\n var subTask;\n subTasks = subdivideArray(subTasks, numberOfCreationWorkers);\n\n for (i = 0; i < subTasks.length; i++) {\n var packedLength = 0;\n var workerSubTasks = subTasks[i];\n var workerSubTasksLength = workerSubTasks.length;\n for (j = 0; j < workerSubTasksLength; ++j) {\n subTask = workerSubTasks[j];\n geometry = subTask.geometry;\n if (defined(geometry.constructor.pack)) {\n subTask.offset = packedLength;\n packedLength += defaultValue(\n geometry.constructor.packedLength,\n geometry.packedLength\n );\n }\n }\n\n var subTaskTransferableObjects;\n\n if (packedLength > 0) {\n var array = new Float64Array(packedLength);\n subTaskTransferableObjects = [array.buffer];\n\n for (j = 0; j < workerSubTasksLength; ++j) {\n subTask = workerSubTasks[j];\n geometry = subTask.geometry;\n if (defined(geometry.constructor.pack)) {\n geometry.constructor.pack(geometry, array, subTask.offset);\n subTask.geometry = array;\n }\n }\n }\n\n promises.push(\n createGeometryTaskProcessors[i].scheduleTask(\n {\n subTasks: subTasks[i],\n },\n subTaskTransferableObjects\n )\n );\n }\n\n primitive._state = PrimitiveState.CREATING;\n\n when\n .all(promises, function (results) {\n primitive._createGeometryResults = results;\n primitive._state = PrimitiveState.CREATED;\n })\n .otherwise(function (error) {\n setReady(primitive, frameState, PrimitiveState.FAILED, error);\n });\n } else if (primitive._state === PrimitiveState.CREATED) {\n var transferableObjects = [];\n instances = Array.isArray(primitive.geometryInstances)\n ? primitive.geometryInstances\n : [primitive.geometryInstances];\n\n var scene3DOnly = frameState.scene3DOnly;\n var projection = frameState.mapProjection;\n\n var promise = combineGeometryTaskProcessor.scheduleTask(\n PrimitivePipeline.packCombineGeometryParameters(\n {\n createGeometryResults: primitive._createGeometryResults,\n instances: instances,\n ellipsoid: projection.ellipsoid,\n projection: projection,\n elementIndexUintSupported: frameState.context.elementIndexUint,\n scene3DOnly: scene3DOnly,\n vertexCacheOptimize: primitive.vertexCacheOptimize,\n compressVertices: primitive.compressVertices,\n modelMatrix: primitive.modelMatrix,\n createPickOffsets: primitive._createPickOffsets,\n },\n transferableObjects\n ),\n transferableObjects\n );\n\n primitive._createGeometryResults = undefined;\n primitive._state = PrimitiveState.COMBINING;\n\n when(promise, function (packedResult) {\n var result = PrimitivePipeline.unpackCombineGeometryResults(packedResult);\n primitive._geometries = result.geometries;\n primitive._attributeLocations = result.attributeLocations;\n primitive.modelMatrix = Matrix4.clone(\n result.modelMatrix,\n primitive.modelMatrix\n );\n primitive._pickOffsets = result.pickOffsets;\n primitive._offsetInstanceExtend = result.offsetInstanceExtend;\n primitive._instanceBoundingSpheres = result.boundingSpheres;\n primitive._instanceBoundingSpheresCV = result.boundingSpheresCV;\n\n if (defined(primitive._geometries) && primitive._geometries.length > 0) {\n primitive._recomputeBoundingSpheres = true;\n primitive._state = PrimitiveState.COMBINED;\n } else {\n setReady(primitive, frameState, PrimitiveState.FAILED, undefined);\n }\n }).otherwise(function (error) {\n setReady(primitive, frameState, PrimitiveState.FAILED, error);\n });\n }\n}\n\nfunction loadSynchronous(primitive, frameState) {\n var instances = Array.isArray(primitive.geometryInstances)\n ? primitive.geometryInstances\n : [primitive.geometryInstances];\n var length = (primitive._numberOfInstances = instances.length);\n var clonedInstances = new Array(length);\n var instanceIds = primitive._instanceIds;\n\n var instance;\n var i;\n\n var geometryIndex = 0;\n for (i = 0; i < length; i++) {\n instance = instances[i];\n var geometry = instance.geometry;\n\n var createdGeometry;\n if (defined(geometry.attributes) && defined(geometry.primitiveType)) {\n createdGeometry = cloneGeometry(geometry);\n } else {\n createdGeometry = geometry.constructor.createGeometry(geometry);\n }\n\n clonedInstances[geometryIndex++] = cloneInstance(instance, createdGeometry);\n instanceIds.push(instance.id);\n }\n\n clonedInstances.length = geometryIndex;\n\n var scene3DOnly = frameState.scene3DOnly;\n var projection = frameState.mapProjection;\n\n var result = PrimitivePipeline.combineGeometry({\n instances: clonedInstances,\n ellipsoid: projection.ellipsoid,\n projection: projection,\n elementIndexUintSupported: frameState.context.elementIndexUint,\n scene3DOnly: scene3DOnly,\n vertexCacheOptimize: primitive.vertexCacheOptimize,\n compressVertices: primitive.compressVertices,\n modelMatrix: primitive.modelMatrix,\n createPickOffsets: primitive._createPickOffsets,\n });\n\n primitive._geometries = result.geometries;\n primitive._attributeLocations = result.attributeLocations;\n primitive.modelMatrix = Matrix4.clone(\n result.modelMatrix,\n primitive.modelMatrix\n );\n primitive._pickOffsets = result.pickOffsets;\n primitive._offsetInstanceExtend = result.offsetInstanceExtend;\n primitive._instanceBoundingSpheres = result.boundingSpheres;\n primitive._instanceBoundingSpheresCV = result.boundingSpheresCV;\n\n if (defined(primitive._geometries) && primitive._geometries.length > 0) {\n primitive._recomputeBoundingSpheres = true;\n primitive._state = PrimitiveState.COMBINED;\n } else {\n setReady(primitive, frameState, PrimitiveState.FAILED, undefined);\n }\n}\n\nfunction recomputeBoundingSpheres(primitive, frameState) {\n var offsetIndex = primitive._batchTableAttributeIndices.offset;\n if (!primitive._recomputeBoundingSpheres || !defined(offsetIndex)) {\n primitive._recomputeBoundingSpheres = false;\n return;\n }\n\n var i;\n var offsetInstanceExtend = primitive._offsetInstanceExtend;\n var boundingSpheres = primitive._instanceBoundingSpheres;\n var length = boundingSpheres.length;\n var newBoundingSpheres = primitive._tempBoundingSpheres;\n if (!defined(newBoundingSpheres)) {\n newBoundingSpheres = new Array(length);\n for (i = 0; i < length; i++) {\n newBoundingSpheres[i] = new BoundingSphere();\n }\n primitive._tempBoundingSpheres = newBoundingSpheres;\n }\n for (i = 0; i < length; ++i) {\n var newBS = newBoundingSpheres[i];\n var offset = primitive._batchTable.getBatchedAttribute(\n i,\n offsetIndex,\n new Cartesian3()\n );\n newBS = boundingSpheres[i].clone(newBS);\n transformBoundingSphere(newBS, offset, offsetInstanceExtend[i]);\n }\n var combinedBS = [];\n var combinedWestBS = [];\n var combinedEastBS = [];\n\n for (i = 0; i < length; ++i) {\n var bs = newBoundingSpheres[i];\n\n var minX = bs.center.x - bs.radius;\n if (\n minX > 0 ||\n BoundingSphere.intersectPlane(bs, Plane.ORIGIN_ZX_PLANE) !==\n Intersect.INTERSECTING\n ) {\n combinedBS.push(bs);\n } else {\n combinedWestBS.push(bs);\n combinedEastBS.push(bs);\n }\n }\n\n var resultBS1 = combinedBS[0];\n var resultBS2 = combinedEastBS[0];\n var resultBS3 = combinedWestBS[0];\n\n for (i = 1; i < combinedBS.length; i++) {\n resultBS1 = BoundingSphere.union(resultBS1, combinedBS[i]);\n }\n for (i = 1; i < combinedEastBS.length; i++) {\n resultBS2 = BoundingSphere.union(resultBS2, combinedEastBS[i]);\n }\n for (i = 1; i < combinedWestBS.length; i++) {\n resultBS3 = BoundingSphere.union(resultBS3, combinedWestBS[i]);\n }\n var result = [];\n if (defined(resultBS1)) {\n result.push(resultBS1);\n }\n if (defined(resultBS2)) {\n result.push(resultBS2);\n }\n if (defined(resultBS3)) {\n result.push(resultBS3);\n }\n\n for (i = 0; i < result.length; i++) {\n var boundingSphere = result[i].clone(primitive._boundingSpheres[i]);\n primitive._boundingSpheres[i] = boundingSphere;\n primitive._boundingSphereCV[i] = BoundingSphere.projectTo2D(\n boundingSphere,\n frameState.mapProjection,\n primitive._boundingSphereCV[i]\n );\n }\n\n Primitive._updateBoundingVolumes(\n primitive,\n frameState,\n primitive.modelMatrix,\n true\n );\n primitive._recomputeBoundingSpheres = false;\n}\n\nvar scratchBoundingSphereCenterEncoded = new EncodedCartesian3();\nvar scratchBoundingSphereCartographic = new Cartographic();\nvar scratchBoundingSphereCenter2D = new Cartesian3();\nvar scratchBoundingSphere = new BoundingSphere();\n\nfunction updateBatchTableBoundingSpheres(primitive, frameState) {\n var hasDistanceDisplayCondition = defined(\n primitive._batchTableAttributeIndices.distanceDisplayCondition\n );\n if (\n !hasDistanceDisplayCondition ||\n primitive._batchTableBoundingSpheresUpdated\n ) {\n return;\n }\n\n var indices = primitive._batchTableBoundingSphereAttributeIndices;\n var center3DHighIndex = indices.center3DHigh;\n var center3DLowIndex = indices.center3DLow;\n var center2DHighIndex = indices.center2DHigh;\n var center2DLowIndex = indices.center2DLow;\n var radiusIndex = indices.radius;\n\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n\n var batchTable = primitive._batchTable;\n var boundingSpheres = primitive._instanceBoundingSpheres;\n var length = boundingSpheres.length;\n\n for (var i = 0; i < length; ++i) {\n var boundingSphere = boundingSpheres[i];\n if (!defined(boundingSphere)) {\n continue;\n }\n\n var modelMatrix = primitive.modelMatrix;\n if (defined(modelMatrix)) {\n boundingSphere = BoundingSphere.transform(\n boundingSphere,\n modelMatrix,\n scratchBoundingSphere\n );\n }\n\n var center = boundingSphere.center;\n var radius = boundingSphere.radius;\n\n var encodedCenter = EncodedCartesian3.fromCartesian(\n center,\n scratchBoundingSphereCenterEncoded\n );\n batchTable.setBatchedAttribute(i, center3DHighIndex, encodedCenter.high);\n batchTable.setBatchedAttribute(i, center3DLowIndex, encodedCenter.low);\n\n if (!frameState.scene3DOnly) {\n var cartographic = ellipsoid.cartesianToCartographic(\n center,\n scratchBoundingSphereCartographic\n );\n var center2D = projection.project(\n cartographic,\n scratchBoundingSphereCenter2D\n );\n encodedCenter = EncodedCartesian3.fromCartesian(\n center2D,\n scratchBoundingSphereCenterEncoded\n );\n batchTable.setBatchedAttribute(i, center2DHighIndex, encodedCenter.high);\n batchTable.setBatchedAttribute(i, center2DLowIndex, encodedCenter.low);\n }\n\n batchTable.setBatchedAttribute(i, radiusIndex, radius);\n }\n\n primitive._batchTableBoundingSpheresUpdated = true;\n}\n\nvar offsetScratchCartesian = new Cartesian3();\nvar offsetCenterScratch = new Cartesian3();\nfunction updateBatchTableOffsets(primitive, frameState) {\n var hasOffset = defined(primitive._batchTableAttributeIndices.offset);\n if (\n !hasOffset ||\n primitive._batchTableOffsetsUpdated ||\n frameState.scene3DOnly\n ) {\n return;\n }\n\n var index2D = primitive._batchTableOffsetAttribute2DIndex;\n\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n\n var batchTable = primitive._batchTable;\n var boundingSpheres = primitive._instanceBoundingSpheres;\n var length = boundingSpheres.length;\n\n for (var i = 0; i < length; ++i) {\n var boundingSphere = boundingSpheres[i];\n if (!defined(boundingSphere)) {\n continue;\n }\n var offset = batchTable.getBatchedAttribute(\n i,\n primitive._batchTableAttributeIndices.offset\n );\n if (Cartesian3.equals(offset, Cartesian3.ZERO)) {\n batchTable.setBatchedAttribute(i, index2D, Cartesian3.ZERO);\n continue;\n }\n\n var modelMatrix = primitive.modelMatrix;\n if (defined(modelMatrix)) {\n boundingSphere = BoundingSphere.transform(\n boundingSphere,\n modelMatrix,\n scratchBoundingSphere\n );\n }\n\n var center = boundingSphere.center;\n center = ellipsoid.scaleToGeodeticSurface(center, offsetCenterScratch);\n var cartographic = ellipsoid.cartesianToCartographic(\n center,\n scratchBoundingSphereCartographic\n );\n var center2D = projection.project(\n cartographic,\n scratchBoundingSphereCenter2D\n );\n\n var newPoint = Cartesian3.add(offset, center, offsetScratchCartesian);\n cartographic = ellipsoid.cartesianToCartographic(newPoint, cartographic);\n\n var newPointProjected = projection.project(\n cartographic,\n offsetScratchCartesian\n );\n\n var newVector = Cartesian3.subtract(\n newPointProjected,\n center2D,\n offsetScratchCartesian\n );\n\n var x = newVector.x;\n newVector.x = newVector.z;\n newVector.z = newVector.y;\n newVector.y = x;\n\n batchTable.setBatchedAttribute(i, index2D, newVector);\n }\n\n primitive._batchTableOffsetsUpdated = true;\n}\n\nfunction createVertexArray(primitive, frameState) {\n var attributeLocations = primitive._attributeLocations;\n var geometries = primitive._geometries;\n var scene3DOnly = frameState.scene3DOnly;\n var context = frameState.context;\n\n var va = [];\n var length = geometries.length;\n for (var i = 0; i < length; ++i) {\n var geometry = geometries[i];\n\n va.push(\n VertexArray.fromGeometry({\n context: context,\n geometry: geometry,\n attributeLocations: attributeLocations,\n bufferUsage: BufferUsage.STATIC_DRAW,\n interleave: primitive._interleave,\n })\n );\n\n if (defined(primitive._createBoundingVolumeFunction)) {\n primitive._createBoundingVolumeFunction(frameState, geometry);\n } else {\n primitive._boundingSpheres.push(\n BoundingSphere.clone(geometry.boundingSphere)\n );\n primitive._boundingSphereWC.push(new BoundingSphere());\n\n if (!scene3DOnly) {\n var center = geometry.boundingSphereCV.center;\n var x = center.x;\n var y = center.y;\n var z = center.z;\n center.x = z;\n center.y = x;\n center.z = y;\n\n primitive._boundingSphereCV.push(\n BoundingSphere.clone(geometry.boundingSphereCV)\n );\n primitive._boundingSphere2D.push(new BoundingSphere());\n primitive._boundingSphereMorph.push(new BoundingSphere());\n }\n }\n }\n\n primitive._va = va;\n primitive._primitiveType = geometries[0].primitiveType;\n\n if (primitive.releaseGeometryInstances) {\n primitive.geometryInstances = undefined;\n }\n\n primitive._geometries = undefined;\n setReady(primitive, frameState, PrimitiveState.COMPLETE, undefined);\n}\n\nfunction createRenderStates(primitive, context, appearance, twoPasses) {\n var renderState = appearance.getRenderState();\n var rs;\n\n if (twoPasses) {\n rs = clone(renderState, false);\n rs.cull = {\n enabled: true,\n face: CullFace.BACK,\n };\n primitive._frontFaceRS = RenderState.fromCache(rs);\n\n rs.cull.face = CullFace.FRONT;\n primitive._backFaceRS = RenderState.fromCache(rs);\n } else {\n primitive._frontFaceRS = RenderState.fromCache(renderState);\n primitive._backFaceRS = primitive._frontFaceRS;\n }\n\n rs = clone(renderState, false);\n if (defined(primitive._depthFailAppearance)) {\n rs.depthTest.enabled = false;\n }\n\n if (defined(primitive._depthFailAppearance)) {\n renderState = primitive._depthFailAppearance.getRenderState();\n rs = clone(renderState, false);\n rs.depthTest.func = DepthFunction.GREATER;\n if (twoPasses) {\n rs.cull = {\n enabled: true,\n face: CullFace.BACK,\n };\n primitive._frontFaceDepthFailRS = RenderState.fromCache(rs);\n\n rs.cull.face = CullFace.FRONT;\n primitive._backFaceDepthFailRS = RenderState.fromCache(rs);\n } else {\n primitive._frontFaceDepthFailRS = RenderState.fromCache(rs);\n primitive._backFaceDepthFailRS = primitive._frontFaceRS;\n }\n }\n}\n\nfunction createShaderProgram(primitive, frameState, appearance) {\n var context = frameState.context;\n\n var attributeLocations = primitive._attributeLocations;\n\n var vs = primitive._batchTable.getVertexShaderCallback()(\n appearance.vertexShaderSource\n );\n vs = Primitive._appendOffsetToShader(primitive, vs);\n vs = Primitive._appendShowToShader(primitive, vs);\n vs = Primitive._appendDistanceDisplayConditionToShader(\n primitive,\n vs,\n frameState.scene3DOnly\n );\n vs = appendPickToVertexShader(vs);\n vs = Primitive._updateColorAttribute(primitive, vs, false);\n vs = modifyForEncodedNormals(primitive, vs);\n vs = Primitive._modifyShaderPosition(primitive, vs, frameState.scene3DOnly);\n var fs = appearance.getFragmentShaderSource();\n fs = appendPickToFragmentShader(fs);\n\n primitive._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: primitive._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n validateShaderMatching(primitive._sp, attributeLocations);\n\n if (defined(primitive._depthFailAppearance)) {\n vs = primitive._batchTable.getVertexShaderCallback()(\n primitive._depthFailAppearance.vertexShaderSource\n );\n vs = Primitive._appendShowToShader(primitive, vs);\n vs = Primitive._appendDistanceDisplayConditionToShader(\n primitive,\n vs,\n frameState.scene3DOnly\n );\n vs = appendPickToVertexShader(vs);\n vs = Primitive._updateColorAttribute(primitive, vs, true);\n vs = modifyForEncodedNormals(primitive, vs);\n vs = Primitive._modifyShaderPosition(primitive, vs, frameState.scene3DOnly);\n vs = depthClampVS(vs);\n\n fs = primitive._depthFailAppearance.getFragmentShaderSource();\n fs = appendPickToFragmentShader(fs);\n fs = depthClampFS(fs);\n\n primitive._spDepthFail = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: primitive._spDepthFail,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n validateShaderMatching(primitive._spDepthFail, attributeLocations);\n }\n}\n\nvar modifiedModelViewScratch = new Matrix4();\nvar rtcScratch = new Cartesian3();\n\nfunction getUniforms(primitive, appearance, material, frameState) {\n // Create uniform map by combining uniforms from the appearance and material if either have uniforms.\n var materialUniformMap = defined(material) ? material._uniforms : undefined;\n var appearanceUniformMap = {};\n var appearanceUniforms = appearance.uniforms;\n if (defined(appearanceUniforms)) {\n // Convert to uniform map of functions for the renderer\n for (var name in appearanceUniforms) {\n if (appearanceUniforms.hasOwnProperty(name)) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(materialUniformMap) && defined(materialUniformMap[name])) {\n // Later, we could rename uniforms behind-the-scenes if needed.\n throw new DeveloperError(\n \"Appearance and material have a uniform with the same name: \" + name\n );\n }\n //>>includeEnd('debug');\n\n appearanceUniformMap[name] = getUniformFunction(\n appearanceUniforms,\n name\n );\n }\n }\n }\n var uniforms = combine(appearanceUniformMap, materialUniformMap);\n uniforms = primitive._batchTable.getUniformMapCallback()(uniforms);\n\n if (defined(primitive.rtcCenter)) {\n uniforms.u_modifiedModelView = function () {\n var viewMatrix = frameState.context.uniformState.view;\n Matrix4.multiply(\n viewMatrix,\n primitive._modelMatrix,\n modifiedModelViewScratch\n );\n Matrix4.multiplyByPoint(\n modifiedModelViewScratch,\n primitive.rtcCenter,\n rtcScratch\n );\n Matrix4.setTranslation(\n modifiedModelViewScratch,\n rtcScratch,\n modifiedModelViewScratch\n );\n return modifiedModelViewScratch;\n };\n }\n\n return uniforms;\n}\n\nfunction createCommands(\n primitive,\n appearance,\n material,\n translucent,\n twoPasses,\n colorCommands,\n pickCommands,\n frameState\n) {\n var uniforms = getUniforms(primitive, appearance, material, frameState);\n\n var depthFailUniforms;\n if (defined(primitive._depthFailAppearance)) {\n depthFailUniforms = getUniforms(\n primitive,\n primitive._depthFailAppearance,\n primitive._depthFailAppearance.material,\n frameState\n );\n }\n\n var pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n var multiplier = twoPasses ? 2 : 1;\n multiplier *= defined(primitive._depthFailAppearance) ? 2 : 1;\n colorCommands.length = primitive._va.length * multiplier;\n\n var length = colorCommands.length;\n var vaIndex = 0;\n for (var i = 0; i < length; ++i) {\n var colorCommand;\n\n if (twoPasses) {\n colorCommand = colorCommands[i];\n if (!defined(colorCommand)) {\n colorCommand = colorCommands[i] = new DrawCommand({\n owner: primitive,\n primitiveType: primitive._primitiveType,\n });\n }\n colorCommand.vertexArray = primitive._va[vaIndex];\n colorCommand.renderState = primitive._backFaceRS;\n colorCommand.shaderProgram = primitive._sp;\n colorCommand.uniformMap = uniforms;\n colorCommand.pass = pass;\n\n ++i;\n }\n\n colorCommand = colorCommands[i];\n if (!defined(colorCommand)) {\n colorCommand = colorCommands[i] = new DrawCommand({\n owner: primitive,\n primitiveType: primitive._primitiveType,\n });\n }\n colorCommand.vertexArray = primitive._va[vaIndex];\n colorCommand.renderState = primitive._frontFaceRS;\n colorCommand.shaderProgram = primitive._sp;\n colorCommand.uniformMap = uniforms;\n colorCommand.pass = pass;\n\n if (defined(primitive._depthFailAppearance)) {\n if (twoPasses) {\n ++i;\n\n colorCommand = colorCommands[i];\n if (!defined(colorCommand)) {\n colorCommand = colorCommands[i] = new DrawCommand({\n owner: primitive,\n primitiveType: primitive._primitiveType,\n });\n }\n colorCommand.vertexArray = primitive._va[vaIndex];\n colorCommand.renderState = primitive._backFaceDepthFailRS;\n colorCommand.shaderProgram = primitive._spDepthFail;\n colorCommand.uniformMap = depthFailUniforms;\n colorCommand.pass = pass;\n }\n\n ++i;\n\n colorCommand = colorCommands[i];\n if (!defined(colorCommand)) {\n colorCommand = colorCommands[i] = new DrawCommand({\n owner: primitive,\n primitiveType: primitive._primitiveType,\n });\n }\n colorCommand.vertexArray = primitive._va[vaIndex];\n colorCommand.renderState = primitive._frontFaceDepthFailRS;\n colorCommand.shaderProgram = primitive._spDepthFail;\n colorCommand.uniformMap = depthFailUniforms;\n colorCommand.pass = pass;\n }\n\n ++vaIndex;\n }\n}\n\nPrimitive._updateBoundingVolumes = function (\n primitive,\n frameState,\n modelMatrix,\n forceUpdate\n) {\n var i;\n var length;\n var boundingSphere;\n\n if (forceUpdate || !Matrix4.equals(modelMatrix, primitive._modelMatrix)) {\n Matrix4.clone(modelMatrix, primitive._modelMatrix);\n length = primitive._boundingSpheres.length;\n for (i = 0; i < length; ++i) {\n boundingSphere = primitive._boundingSpheres[i];\n if (defined(boundingSphere)) {\n primitive._boundingSphereWC[i] = BoundingSphere.transform(\n boundingSphere,\n modelMatrix,\n primitive._boundingSphereWC[i]\n );\n if (!frameState.scene3DOnly) {\n primitive._boundingSphere2D[i] = BoundingSphere.clone(\n primitive._boundingSphereCV[i],\n primitive._boundingSphere2D[i]\n );\n primitive._boundingSphere2D[i].center.x = 0.0;\n primitive._boundingSphereMorph[i] = BoundingSphere.union(\n primitive._boundingSphereWC[i],\n primitive._boundingSphereCV[i]\n );\n }\n }\n }\n }\n\n // Update bounding volumes for primitives that are sized in pixels.\n // The pixel size in meters varies based on the distance from the camera.\n var pixelSize = primitive.appearance.pixelSize;\n if (defined(pixelSize)) {\n length = primitive._boundingSpheres.length;\n for (i = 0; i < length; ++i) {\n boundingSphere = primitive._boundingSpheres[i];\n var boundingSphereWC = primitive._boundingSphereWC[i];\n var pixelSizeInMeters = frameState.camera.getPixelSize(\n boundingSphere,\n frameState.context.drawingBufferWidth,\n frameState.context.drawingBufferHeight\n );\n var sizeInMeters = pixelSizeInMeters * pixelSize;\n boundingSphereWC.radius = boundingSphere.radius + sizeInMeters;\n }\n }\n};\n\nfunction updateAndQueueCommands(\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n) {\n //>>includeStart('debug', pragmas.debug);\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n !Matrix4.equals(modelMatrix, Matrix4.IDENTITY)\n ) {\n throw new DeveloperError(\n \"Primitive.modelMatrix is only supported in 3D mode.\"\n );\n }\n //>>includeEnd('debug');\n\n Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix);\n\n var boundingSpheres;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingSpheres = primitive._boundingSphereWC;\n } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n boundingSpheres = primitive._boundingSphereCV;\n } else if (\n frameState.mode === SceneMode.SCENE2D &&\n defined(primitive._boundingSphere2D)\n ) {\n boundingSpheres = primitive._boundingSphere2D;\n } else if (defined(primitive._boundingSphereMorph)) {\n boundingSpheres = primitive._boundingSphereMorph;\n }\n\n var commandList = frameState.commandList;\n var passes = frameState.passes;\n if (passes.render || passes.pick) {\n var allowPicking = primitive.allowPicking;\n var castShadows = ShadowMode.castShadows(primitive.shadows);\n var receiveShadows = ShadowMode.receiveShadows(primitive.shadows);\n var colorLength = colorCommands.length;\n\n var factor = twoPasses ? 2 : 1;\n factor *= defined(primitive._depthFailAppearance) ? 2 : 1;\n\n for (var j = 0; j < colorLength; ++j) {\n var sphereIndex = Math.floor(j / factor);\n var colorCommand = colorCommands[j];\n colorCommand.modelMatrix = modelMatrix;\n colorCommand.boundingVolume = boundingSpheres[sphereIndex];\n colorCommand.cull = cull;\n colorCommand.debugShowBoundingVolume = debugShowBoundingVolume;\n colorCommand.castShadows = castShadows;\n colorCommand.receiveShadows = receiveShadows;\n\n if (allowPicking) {\n colorCommand.pickId = \"v_pickColor\";\n } else {\n colorCommand.pickId = undefined;\n }\n\n commandList.push(colorCommand);\n }\n }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n * @exception {DeveloperError} Primitive.modelMatrix is only supported in 3D mode.\n * @exception {RuntimeError} Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\n */\nPrimitive.prototype.update = function (frameState) {\n if (\n (!defined(this.geometryInstances) && this._va.length === 0) ||\n (defined(this.geometryInstances) &&\n Array.isArray(this.geometryInstances) &&\n this.geometryInstances.length === 0) ||\n !defined(this.appearance) ||\n (frameState.mode !== SceneMode.SCENE3D && frameState.scene3DOnly) ||\n (!frameState.passes.render && !frameState.passes.pick)\n ) {\n return;\n }\n\n if (defined(this._error)) {\n throw this._error;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (defined(this.rtcCenter) && !frameState.scene3DOnly) {\n throw new DeveloperError(\n \"RTC rendering is only available for 3D only scenes.\"\n );\n }\n //>>includeEnd('debug');\n\n if (this._state === PrimitiveState.FAILED) {\n return;\n }\n\n var context = frameState.context;\n if (!defined(this._batchTable)) {\n createBatchTable(this, context);\n }\n if (this._batchTable.attributes.length > 0) {\n if (ContextLimits.maximumVertexTextureImageUnits === 0) {\n throw new RuntimeError(\n \"Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\"\n );\n }\n this._batchTable.update(frameState);\n }\n\n if (\n this._state !== PrimitiveState.COMPLETE &&\n this._state !== PrimitiveState.COMBINED\n ) {\n if (this.asynchronous) {\n loadAsynchronous(this, frameState);\n } else {\n loadSynchronous(this, frameState);\n }\n }\n\n if (this._state === PrimitiveState.COMBINED) {\n updateBatchTableBoundingSpheres(this, frameState);\n updateBatchTableOffsets(this, frameState);\n createVertexArray(this, frameState);\n }\n\n if (!this.show || this._state !== PrimitiveState.COMPLETE) {\n return;\n }\n\n if (!this._batchTableOffsetsUpdated) {\n updateBatchTableOffsets(this, frameState);\n }\n if (this._recomputeBoundingSpheres) {\n recomputeBoundingSpheres(this, frameState);\n }\n\n // Create or recreate render state and shader program if appearance/material changed\n var appearance = this.appearance;\n var material = appearance.material;\n var createRS = false;\n var createSP = false;\n\n if (this._appearance !== appearance) {\n this._appearance = appearance;\n this._material = material;\n createRS = true;\n createSP = true;\n } else if (this._material !== material) {\n this._material = material;\n createSP = true;\n }\n\n var depthFailAppearance = this.depthFailAppearance;\n var depthFailMaterial = defined(depthFailAppearance)\n ? depthFailAppearance.material\n : undefined;\n\n if (this._depthFailAppearance !== depthFailAppearance) {\n this._depthFailAppearance = depthFailAppearance;\n this._depthFailMaterial = depthFailMaterial;\n createRS = true;\n createSP = true;\n } else if (this._depthFailMaterial !== depthFailMaterial) {\n this._depthFailMaterial = depthFailMaterial;\n createSP = true;\n }\n\n var translucent = this._appearance.isTranslucent();\n if (this._translucent !== translucent) {\n this._translucent = translucent;\n createRS = true;\n }\n\n if (defined(this._material)) {\n this._material.update(context);\n }\n\n var twoPasses = appearance.closed && translucent;\n\n if (createRS) {\n var rsFunc = defaultValue(\n this._createRenderStatesFunction,\n createRenderStates\n );\n rsFunc(this, context, appearance, twoPasses);\n }\n\n if (createSP) {\n var spFunc = defaultValue(\n this._createShaderProgramFunction,\n createShaderProgram\n );\n spFunc(this, frameState, appearance);\n }\n\n if (createRS || createSP) {\n var commandFunc = defaultValue(\n this._createCommandsFunction,\n createCommands\n );\n commandFunc(\n this,\n appearance,\n material,\n translucent,\n twoPasses,\n this._colorCommands,\n this._pickCommands,\n frameState\n );\n }\n\n var updateAndQueueCommandsFunc = defaultValue(\n this._updateAndQueueCommandsFunction,\n updateAndQueueCommands\n );\n updateAndQueueCommandsFunc(\n this,\n frameState,\n this._colorCommands,\n this._pickCommands,\n this.modelMatrix,\n this.cull,\n this.debugShowBoundingVolume,\n twoPasses\n );\n};\n\nvar offsetBoundingSphereScratch1 = new BoundingSphere();\nvar offsetBoundingSphereScratch2 = new BoundingSphere();\nfunction transformBoundingSphere(boundingSphere, offset, offsetAttribute) {\n if (offsetAttribute === GeometryOffsetAttribute.TOP) {\n var origBS = BoundingSphere.clone(\n boundingSphere,\n offsetBoundingSphereScratch1\n );\n var offsetBS = BoundingSphere.clone(\n boundingSphere,\n offsetBoundingSphereScratch2\n );\n offsetBS.center = Cartesian3.add(offsetBS.center, offset, offsetBS.center);\n boundingSphere = BoundingSphere.union(origBS, offsetBS, boundingSphere);\n } else if (offsetAttribute === GeometryOffsetAttribute.ALL) {\n boundingSphere.center = Cartesian3.add(\n boundingSphere.center,\n offset,\n boundingSphere.center\n );\n }\n\n return boundingSphere;\n}\n\nfunction createGetFunction(batchTable, instanceIndex, attributeIndex) {\n return function () {\n var attributeValue = batchTable.getBatchedAttribute(\n instanceIndex,\n attributeIndex\n );\n var attribute = batchTable.attributes[attributeIndex];\n var componentsPerAttribute = attribute.componentsPerAttribute;\n var value = ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n componentsPerAttribute\n );\n if (defined(attributeValue.constructor.pack)) {\n attributeValue.constructor.pack(attributeValue, value, 0);\n } else {\n value[0] = attributeValue;\n }\n return value;\n };\n}\n\nfunction createSetFunction(\n batchTable,\n instanceIndex,\n attributeIndex,\n primitive,\n name\n) {\n return function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(value) ||\n !defined(value.length) ||\n value.length < 1 ||\n value.length > 4\n ) {\n throw new DeveloperError(\n \"value must be and array with length between 1 and 4.\"\n );\n }\n //>>includeEnd('debug');\n var attributeValue = getAttributeValue(value);\n batchTable.setBatchedAttribute(\n instanceIndex,\n attributeIndex,\n attributeValue\n );\n if (name === \"offset\") {\n primitive._recomputeBoundingSpheres = true;\n primitive._batchTableOffsetsUpdated = false;\n }\n };\n}\n\nvar offsetScratch = new Cartesian3();\n\nfunction createBoundingSphereProperties(primitive, properties, index) {\n properties.boundingSphere = {\n get: function () {\n var boundingSphere = primitive._instanceBoundingSpheres[index];\n if (defined(boundingSphere)) {\n boundingSphere = boundingSphere.clone();\n var modelMatrix = primitive.modelMatrix;\n var offset = properties.offset;\n if (defined(offset)) {\n transformBoundingSphere(\n boundingSphere,\n Cartesian3.fromArray(offset.get(), 0, offsetScratch),\n primitive._offsetInstanceExtend[index]\n );\n }\n if (defined(modelMatrix)) {\n boundingSphere = BoundingSphere.transform(\n boundingSphere,\n modelMatrix\n );\n }\n }\n\n return boundingSphere;\n },\n };\n properties.boundingSphereCV = {\n get: function () {\n return primitive._instanceBoundingSpheresCV[index];\n },\n };\n}\n\nfunction createPickIdProperty(primitive, properties, index) {\n properties.pickId = {\n get: function () {\n return primitive._pickIds[index];\n },\n };\n}\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {Object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n * attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(100.0, 10000.0);\n * attributes.offset = Cesium.OffsetGeometryInstanceAttribute.toValue(Cartesian3.IDENTITY);\n */\nPrimitive.prototype.getGeometryInstanceAttributes = function (id) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required\");\n }\n if (!defined(this._batchTable)) {\n throw new DeveloperError(\n \"must call update before calling getGeometryInstanceAttributes\"\n );\n }\n //>>includeEnd('debug');\n\n var index = -1;\n var lastIndex = this._lastPerInstanceAttributeIndex;\n var ids = this._instanceIds;\n var length = ids.length;\n for (var i = 0; i < length; ++i) {\n var curIndex = (lastIndex + i) % length;\n if (id === ids[curIndex]) {\n index = curIndex;\n break;\n }\n }\n\n if (index === -1) {\n return undefined;\n }\n\n var attributes = this._perInstanceAttributeCache[index];\n if (defined(attributes)) {\n return attributes;\n }\n\n var batchTable = this._batchTable;\n var perInstanceAttributeIndices = this._batchTableAttributeIndices;\n attributes = {};\n var properties = {};\n\n for (var name in perInstanceAttributeIndices) {\n if (perInstanceAttributeIndices.hasOwnProperty(name)) {\n var attributeIndex = perInstanceAttributeIndices[name];\n properties[name] = {\n get: createGetFunction(batchTable, index, attributeIndex),\n set: createSetFunction(batchTable, index, attributeIndex, this, name),\n };\n }\n }\n\n createBoundingSphereProperties(this, properties, index);\n createPickIdProperty(this, properties, index);\n Object.defineProperties(attributes, properties);\n\n this._lastPerInstanceAttributeIndex = index;\n this._perInstanceAttributeCache[index] = attributes;\n return attributes;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Primitive#destroy\n */\nPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * e = e && e.destroy();\n *\n * @see Primitive#isDestroyed\n */\nPrimitive.prototype.destroy = function () {\n var length;\n var i;\n\n this._sp = this._sp && this._sp.destroy();\n this._spDepthFail = this._spDepthFail && this._spDepthFail.destroy();\n\n var va = this._va;\n length = va.length;\n for (i = 0; i < length; ++i) {\n va[i].destroy();\n }\n this._va = undefined;\n\n var pickIds = this._pickIds;\n length = pickIds.length;\n for (i = 0; i < length; ++i) {\n pickIds[i].destroy();\n }\n this._pickIds = undefined;\n\n this._batchTable = this._batchTable && this._batchTable.destroy();\n\n //These objects may be fairly large and reference other large objects (like Entities)\n //We explicitly set them to undefined here so that the memory can be freed\n //even if a reference to the destroyed Primitive has been kept around.\n this._instanceIds = undefined;\n this._perInstanceAttributeCache = undefined;\n this._attributeLocations = undefined;\n\n return destroyObject(this);\n};\n\nfunction setReady(primitive, frameState, state, error) {\n primitive._error = error;\n primitive._state = state;\n frameState.afterRender.push(function () {\n primitive._ready =\n primitive._state === PrimitiveState.COMPLETE ||\n primitive._state === PrimitiveState.FAILED;\n if (!defined(error)) {\n primitive._readyPromise.resolve(primitive);\n } else {\n primitive._readyPromise.reject(error);\n }\n });\n}\nexport default Primitive;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_EXT_frag_depth\\n\\\n#extension GL_EXT_frag_depth : enable\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\nvarying vec4 v_sphericalExtents;\\n\\\n#else // SPHERICAL\\n\\\nvarying vec2 v_inversePlaneExtents;\\n\\\nvarying vec4 v_westPlane;\\n\\\nvarying vec4 v_southPlane;\\n\\\n#endif // SPHERICAL\\n\\\nvarying vec3 v_uvMinAndSphericalLongitudeRotation;\\n\\\nvarying vec3 v_uMaxAndInverseDistance;\\n\\\nvarying vec3 v_vMaxAndInverseDistance;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef NORMAL_EC\\n\\\nvec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) {\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth);\\n\\\n return eyeCoordinate.xyz / eyeCoordinate.w;\\n\\\n}\\n\\\n\\n\\\nvec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) {\\n\\\n vec2 glFragCoordXY = gl_FragCoord.xy;\\n\\\n // Sample depths at both offset and negative offset\\n\\\n float upOrRightLogDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw));\\n\\\n float downOrLeftLogDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw));\\n\\\n // Explicitly evaluate both paths\\n\\\n // Necessary for multifrustum and for edges of the screen\\n\\\n bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw);\\n\\\n float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y);\\n\\\n float useDownOrLeft = float(useUpOrRight == 0.0);\\n\\\n vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth);\\n\\\n vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth);\\n\\\n return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft;\\n\\\n}\\n\\\n#endif // NORMAL_EC\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n#ifdef REQUIRES_EC\\n\\\n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw));\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef REQUIRES_WC\\n\\\n vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate;\\n\\\n vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n vec2 uv;\\n\\\n#ifdef SPHERICAL\\n\\\n // Treat world coords as a sphere normal for spherical coordinates\\n\\\n vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate);\\n\\\n sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z;\\n\\\n sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);\\n\\\n uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w;\\n\\\n uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z;\\n\\\n#else // SPHERICAL\\n\\\n // Unpack planes and transform to eye space\\n\\\n uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x;\\n\\\n uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y;\\n\\\n#endif // SPHERICAL\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef PICK\\n\\\n#ifdef CULL_FRAGMENTS\\n\\\n if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0) {\\n\\\n gl_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource\\n\\\n czm_writeDepthClamp();\\n\\\n }\\n\\\n#else // CULL_FRAGMENTS\\n\\\n gl_FragColor.a = 1.0;\\n\\\n#endif // CULL_FRAGMENTS\\n\\\n#else // PICK\\n\\\n\\n\\\n#ifdef CULL_FRAGMENTS\\n\\\n if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y) {\\n\\\n discard;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef NORMAL_EC\\n\\\n // Compute normal by sampling adjacent pixels in 2x2 block in screen space\\n\\\n vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));\\n\\\n vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0));\\n\\\n vec3 normalEC = normalize(cross(leftRight, downUp));\\n\\\n#endif\\n\\\n\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n\\n\\\n vec4 color = czm_gammaCorrect(v_color);\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = color;\\n\\\n#else // FLAT\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.positionToEyeEC = -eyeCoordinate.xyz;\\n\\\n czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n material.diffuse = color.rgb;\\n\\\n material.alpha = color.a;\\n\\\n\\n\\\n gl_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\\n\\\n#endif // FLAT\\n\\\n\\n\\\n // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n gl_FragColor.rgb *= gl_FragColor.a;\\n\\\n\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n\\n\\\n // Material support.\\n\\\n // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or\\n\\\n // dependencies for culling but might not actually be used by the material.\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n\\n\\\n#ifdef USES_NORMAL_EC\\n\\\n materialInput.normalEC = normalEC;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_POSITION_TO_EYE_EC\\n\\\n materialInput.positionToEyeEC = -eyeCoordinate.xyz;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_TANGENT_TO_EYE\\n\\\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_ST\\n\\\n // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired\\n\\\n // texture coordinate system, which typically forms a tight oriented bounding box around the geometry.\\n\\\n // Shader is provided a set of reference points for remapping.\\n\\\n materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z;\\n\\\n materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z;\\n\\\n#endif\\n\\\n\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else // FLAT\\n\\\n gl_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\\n\\\n#endif // FLAT\\n\\\n\\n\\\n // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n gl_FragColor.rgb *= gl_FragColor.a;\\n\\\n\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n czm_writeDepthClamp();\\n\\\n#endif // PICK\\n\\\n}\\n\\\n\";\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport GeometryInstanceAttribute from \"../Core/GeometryInstanceAttribute.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ShadowVolumeAppearanceFS from \"../Shaders/ShadowVolumeAppearanceFS.js\";\n\n/**\n * Creates shaders for a ClassificationPrimitive to use a given Appearance, as well as for picking.\n *\n * @param {Boolean} extentsCulling Discard fragments outside the instance's texture coordinate extents.\n * @param {Boolean} planarExtents If true, texture coordinates will be computed using planes instead of spherical coordinates.\n * @param {Appearance} appearance An Appearance to be used with a ClassificationPrimitive via GroundPrimitive.\n * @private\n */\nfunction ShadowVolumeAppearance(extentsCulling, planarExtents, appearance) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"extentsCulling\", extentsCulling);\n Check.typeOf.bool(\"planarExtents\", planarExtents);\n Check.typeOf.object(\"appearance\", appearance);\n //>>includeEnd('debug');\n\n this._projectionExtentDefines = {\n eastMostYhighDefine: \"\",\n eastMostYlowDefine: \"\",\n westMostYhighDefine: \"\",\n westMostYlowDefine: \"\",\n };\n\n // Compute shader dependencies\n var colorShaderDependencies = new ShaderDependencies();\n colorShaderDependencies.requiresTextureCoordinates = extentsCulling;\n colorShaderDependencies.requiresEC = !appearance.flat;\n\n var pickShaderDependencies = new ShaderDependencies();\n pickShaderDependencies.requiresTextureCoordinates = extentsCulling;\n\n if (appearance instanceof PerInstanceColorAppearance) {\n // PerInstanceColorAppearance doesn't have material.shaderSource, instead it has its own vertex and fragment shaders\n colorShaderDependencies.requiresNormalEC = !appearance.flat;\n } else {\n // Scan material source for what hookups are needed. Assume czm_materialInput materialInput.\n var materialShaderSource =\n appearance.material.shaderSource + \"\\n\" + appearance.fragmentShaderSource;\n\n colorShaderDependencies.normalEC =\n materialShaderSource.indexOf(\"materialInput.normalEC\") !== -1 ||\n materialShaderSource.indexOf(\"czm_getDefaultMaterial\") !== -1;\n colorShaderDependencies.positionToEyeEC =\n materialShaderSource.indexOf(\"materialInput.positionToEyeEC\") !== -1;\n colorShaderDependencies.tangentToEyeMatrix =\n materialShaderSource.indexOf(\"materialInput.tangentToEyeMatrix\") !== -1;\n colorShaderDependencies.st =\n materialShaderSource.indexOf(\"materialInput.st\") !== -1;\n }\n\n this._colorShaderDependencies = colorShaderDependencies;\n this._pickShaderDependencies = pickShaderDependencies;\n this._appearance = appearance;\n this._extentsCulling = extentsCulling;\n this._planarExtents = planarExtents;\n}\n\n/**\n * Create the fragment shader for a ClassificationPrimitive's color pass when rendering for color.\n *\n * @param {Boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @returns {ShaderSource} Shader source for the fragment shader.\n */\nShadowVolumeAppearance.prototype.createFragmentShader = function (\n columbusView2D\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n //>>includeEnd('debug');\n\n var appearance = this._appearance;\n var dependencies = this._colorShaderDependencies;\n\n var defines = [];\n if (!columbusView2D && !this._planarExtents) {\n defines.push(\"SPHERICAL\");\n }\n if (dependencies.requiresEC) {\n defines.push(\"REQUIRES_EC\");\n }\n if (dependencies.requiresWC) {\n defines.push(\"REQUIRES_WC\");\n }\n if (dependencies.requiresTextureCoordinates) {\n defines.push(\"TEXTURE_COORDINATES\");\n }\n if (this._extentsCulling) {\n defines.push(\"CULL_FRAGMENTS\");\n }\n if (dependencies.requiresNormalEC) {\n defines.push(\"NORMAL_EC\");\n }\n if (appearance instanceof PerInstanceColorAppearance) {\n defines.push(\"PER_INSTANCE_COLOR\");\n }\n\n // Material inputs. Use of parameters in the material is different\n // from requirement of the parameters in the overall shader, for example,\n // texture coordinates may be used for fragment culling but not for the material itself.\n if (dependencies.normalEC) {\n defines.push(\"USES_NORMAL_EC\");\n }\n if (dependencies.positionToEyeEC) {\n defines.push(\"USES_POSITION_TO_EYE_EC\");\n }\n if (dependencies.tangentToEyeMatrix) {\n defines.push(\"USES_TANGENT_TO_EYE\");\n }\n if (dependencies.st) {\n defines.push(\"USES_ST\");\n }\n\n if (appearance.flat) {\n defines.push(\"FLAT\");\n }\n\n var materialSource = \"\";\n if (!(appearance instanceof PerInstanceColorAppearance)) {\n materialSource = appearance.material.shaderSource;\n }\n\n return new ShaderSource({\n defines: defines,\n sources: [materialSource, ShadowVolumeAppearanceFS],\n });\n};\n\nShadowVolumeAppearance.prototype.createPickFragmentShader = function (\n columbusView2D\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n //>>includeEnd('debug');\n\n var dependencies = this._pickShaderDependencies;\n\n var defines = [\"PICK\"];\n if (!columbusView2D && !this._planarExtents) {\n defines.push(\"SPHERICAL\");\n }\n if (dependencies.requiresEC) {\n defines.push(\"REQUIRES_EC\");\n }\n if (dependencies.requiresWC) {\n defines.push(\"REQUIRES_WC\");\n }\n if (dependencies.requiresTextureCoordinates) {\n defines.push(\"TEXTURE_COORDINATES\");\n }\n if (this._extentsCulling) {\n defines.push(\"CULL_FRAGMENTS\");\n }\n return new ShaderSource({\n defines: defines,\n sources: [ShadowVolumeAppearanceFS],\n pickColorQualifier: \"varying\",\n });\n};\n\n/**\n * Create the vertex shader for a ClassificationPrimitive's color pass on the final of 3 shadow volume passes\n *\n * @param {String[]} defines External defines to pass to the vertex shader.\n * @param {String} vertexShaderSource ShadowVolumeAppearanceVS with any required modifications for computing position.\n * @param {Boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @param {MapProjection} mapProjection Current scene's map projection.\n * @returns {String} Shader source for the vertex shader.\n */\nShadowVolumeAppearance.prototype.createVertexShader = function (\n defines,\n vertexShaderSource,\n columbusView2D,\n mapProjection\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"defines\", defines);\n Check.typeOf.string(\"vertexShaderSource\", vertexShaderSource);\n Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n Check.defined(\"mapProjection\", mapProjection);\n //>>includeEnd('debug');\n return createShadowVolumeAppearanceVS(\n this._colorShaderDependencies,\n this._planarExtents,\n columbusView2D,\n defines,\n vertexShaderSource,\n this._appearance,\n mapProjection,\n this._projectionExtentDefines\n );\n};\n\n/**\n * Create the vertex shader for a ClassificationPrimitive's pick pass on the final of 3 shadow volume passes\n *\n * @param {String[]} defines External defines to pass to the vertex shader.\n * @param {String} vertexShaderSource ShadowVolumeAppearanceVS with any required modifications for computing position and picking.\n * @param {Boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @param {MapProjection} mapProjection Current scene's map projection.\n * @returns {String} Shader source for the vertex shader.\n */\nShadowVolumeAppearance.prototype.createPickVertexShader = function (\n defines,\n vertexShaderSource,\n columbusView2D,\n mapProjection\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"defines\", defines);\n Check.typeOf.string(\"vertexShaderSource\", vertexShaderSource);\n Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n Check.defined(\"mapProjection\", mapProjection);\n //>>includeEnd('debug');\n return createShadowVolumeAppearanceVS(\n this._pickShaderDependencies,\n this._planarExtents,\n columbusView2D,\n defines,\n vertexShaderSource,\n undefined,\n mapProjection,\n this._projectionExtentDefines\n );\n};\n\nvar longitudeExtentsCartesianScratch = new Cartesian3();\nvar longitudeExtentsCartographicScratch = new Cartographic();\nvar longitudeExtentsEncodeScratch = {\n high: 0.0,\n low: 0.0,\n};\nfunction createShadowVolumeAppearanceVS(\n shaderDependencies,\n planarExtents,\n columbusView2D,\n defines,\n vertexShaderSource,\n appearance,\n mapProjection,\n projectionExtentDefines\n) {\n var allDefines = defines.slice();\n\n if (projectionExtentDefines.eastMostYhighDefine === \"\") {\n var eastMostCartographic = longitudeExtentsCartographicScratch;\n eastMostCartographic.longitude = CesiumMath.PI;\n eastMostCartographic.latitude = 0.0;\n eastMostCartographic.height = 0.0;\n var eastMostCartesian = mapProjection.project(\n eastMostCartographic,\n longitudeExtentsCartesianScratch\n );\n var encoded = EncodedCartesian3.encode(\n eastMostCartesian.x,\n longitudeExtentsEncodeScratch\n );\n projectionExtentDefines.eastMostYhighDefine =\n \"EAST_MOST_X_HIGH \" +\n encoded.high.toFixed((encoded.high + \"\").length + 1);\n projectionExtentDefines.eastMostYlowDefine =\n \"EAST_MOST_X_LOW \" + encoded.low.toFixed((encoded.low + \"\").length + 1);\n\n var westMostCartographic = longitudeExtentsCartographicScratch;\n westMostCartographic.longitude = -CesiumMath.PI;\n westMostCartographic.latitude = 0.0;\n westMostCartographic.height = 0.0;\n var westMostCartesian = mapProjection.project(\n westMostCartographic,\n longitudeExtentsCartesianScratch\n );\n encoded = EncodedCartesian3.encode(\n westMostCartesian.x,\n longitudeExtentsEncodeScratch\n );\n projectionExtentDefines.westMostYhighDefine =\n \"WEST_MOST_X_HIGH \" +\n encoded.high.toFixed((encoded.high + \"\").length + 1);\n projectionExtentDefines.westMostYlowDefine =\n \"WEST_MOST_X_LOW \" + encoded.low.toFixed((encoded.low + \"\").length + 1);\n }\n\n if (columbusView2D) {\n allDefines.push(projectionExtentDefines.eastMostYhighDefine);\n allDefines.push(projectionExtentDefines.eastMostYlowDefine);\n allDefines.push(projectionExtentDefines.westMostYhighDefine);\n allDefines.push(projectionExtentDefines.westMostYlowDefine);\n }\n\n if (defined(appearance) && appearance instanceof PerInstanceColorAppearance) {\n allDefines.push(\"PER_INSTANCE_COLOR\");\n }\n if (shaderDependencies.requiresTextureCoordinates) {\n allDefines.push(\"TEXTURE_COORDINATES\");\n if (!(planarExtents || columbusView2D)) {\n allDefines.push(\"SPHERICAL\");\n }\n if (columbusView2D) {\n allDefines.push(\"COLUMBUS_VIEW_2D\");\n }\n }\n\n return new ShaderSource({\n defines: allDefines,\n sources: [vertexShaderSource],\n });\n}\n\n/**\n * Tracks shader dependencies.\n * @private\n */\nfunction ShaderDependencies() {\n this._requiresEC = false;\n this._requiresWC = false; // depends on eye coordinates, needed for material and for phong\n this._requiresNormalEC = false; // depends on eye coordinates, needed for material\n this._requiresTextureCoordinates = false; // depends on world coordinates, needed for material and for culling\n\n this._usesNormalEC = false;\n this._usesPositionToEyeEC = false;\n this._usesTangentToEyeMat = false;\n this._usesSt = false;\n}\n\nObject.defineProperties(ShaderDependencies.prototype, {\n // Set when assessing final shading (flat vs. phong) and culling using computed texture coordinates\n requiresEC: {\n get: function () {\n return this._requiresEC;\n },\n set: function (value) {\n this._requiresEC = value || this._requiresEC;\n },\n },\n requiresWC: {\n get: function () {\n return this._requiresWC;\n },\n set: function (value) {\n this._requiresWC = value || this._requiresWC;\n this.requiresEC = this._requiresWC;\n },\n },\n requiresNormalEC: {\n get: function () {\n return this._requiresNormalEC;\n },\n set: function (value) {\n this._requiresNormalEC = value || this._requiresNormalEC;\n this.requiresEC = this._requiresNormalEC;\n },\n },\n requiresTextureCoordinates: {\n get: function () {\n return this._requiresTextureCoordinates;\n },\n set: function (value) {\n this._requiresTextureCoordinates =\n value || this._requiresTextureCoordinates;\n this.requiresWC = this._requiresTextureCoordinates;\n },\n },\n // Get/Set when assessing material hookups\n normalEC: {\n set: function (value) {\n this.requiresNormalEC = value;\n this._usesNormalEC = value;\n },\n get: function () {\n return this._usesNormalEC;\n },\n },\n tangentToEyeMatrix: {\n set: function (value) {\n this.requiresWC = value;\n this.requiresNormalEC = value;\n this._usesTangentToEyeMat = value;\n },\n get: function () {\n return this._usesTangentToEyeMat;\n },\n },\n positionToEyeEC: {\n set: function (value) {\n this.requiresEC = value;\n this._usesPositionToEyeEC = value;\n },\n get: function () {\n return this._usesPositionToEyeEC;\n },\n },\n st: {\n set: function (value) {\n this.requiresTextureCoordinates = value;\n this._usesSt = value;\n },\n get: function () {\n return this._usesSt;\n },\n },\n});\n\nfunction pointLineDistance(point1, point2, point) {\n return (\n Math.abs(\n (point2.y - point1.y) * point.x -\n (point2.x - point1.x) * point.y +\n point2.x * point1.y -\n point2.y * point1.x\n ) / Cartesian2.distance(point2, point1)\n );\n}\n\nvar points2DScratch = [\n new Cartesian2(),\n new Cartesian2(),\n new Cartesian2(),\n new Cartesian2(),\n];\n\n// textureCoordinateRotationPoints form 2 lines in the computed UV space that remap to desired texture coordinates.\n// This allows simulation of baked texture coordinates for EllipseGeometry, RectangleGeometry, and PolygonGeometry.\nfunction addTextureCoordinateRotationAttributes(\n attributes,\n textureCoordinateRotationPoints\n) {\n var points2D = points2DScratch;\n\n var minXYCorner = Cartesian2.unpack(\n textureCoordinateRotationPoints,\n 0,\n points2D[0]\n );\n var maxYCorner = Cartesian2.unpack(\n textureCoordinateRotationPoints,\n 2,\n points2D[1]\n );\n var maxXCorner = Cartesian2.unpack(\n textureCoordinateRotationPoints,\n 4,\n points2D[2]\n );\n\n attributes.uMaxVmax = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n value: [maxYCorner.x, maxYCorner.y, maxXCorner.x, maxXCorner.y],\n });\n\n var inverseExtentX =\n 1.0 / pointLineDistance(minXYCorner, maxYCorner, maxXCorner);\n var inverseExtentY =\n 1.0 / pointLineDistance(minXYCorner, maxXCorner, maxYCorner);\n\n attributes.uvMinAndExtents = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n value: [minXYCorner.x, minXYCorner.y, inverseExtentX, inverseExtentY],\n });\n}\n\nvar cartographicScratch = new Cartographic();\nvar cornerScratch = new Cartesian3();\nvar northWestScratch = new Cartesian3();\nvar southEastScratch = new Cartesian3();\nvar highLowScratch = { high: 0.0, low: 0.0 };\nfunction add2DTextureCoordinateAttributes(rectangle, projection, attributes) {\n // Compute corner positions in double precision\n var carto = cartographicScratch;\n carto.height = 0.0;\n\n carto.longitude = rectangle.west;\n carto.latitude = rectangle.south;\n\n var southWestCorner = projection.project(carto, cornerScratch);\n\n carto.latitude = rectangle.north;\n var northWest = projection.project(carto, northWestScratch);\n\n carto.longitude = rectangle.east;\n carto.latitude = rectangle.south;\n var southEast = projection.project(carto, southEastScratch);\n\n // Since these positions are all in the 2D plane, there's a lot of zeros\n // and a lot of repetition. So we only need to encode 4 values.\n // Encode:\n // x: x value for southWestCorner\n // y: y value for southWestCorner\n // z: y value for northWest\n // w: x value for southEast\n\n var valuesHigh = [0, 0, 0, 0];\n var valuesLow = [0, 0, 0, 0];\n var encoded = EncodedCartesian3.encode(southWestCorner.x, highLowScratch);\n valuesHigh[0] = encoded.high;\n valuesLow[0] = encoded.low;\n\n encoded = EncodedCartesian3.encode(southWestCorner.y, highLowScratch);\n valuesHigh[1] = encoded.high;\n valuesLow[1] = encoded.low;\n\n encoded = EncodedCartesian3.encode(northWest.y, highLowScratch);\n valuesHigh[2] = encoded.high;\n valuesLow[2] = encoded.low;\n\n encoded = EncodedCartesian3.encode(southEast.x, highLowScratch);\n valuesHigh[3] = encoded.high;\n valuesLow[3] = encoded.low;\n\n attributes.planes2D_HIGH = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n value: valuesHigh,\n });\n\n attributes.planes2D_LOW = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n value: valuesLow,\n });\n}\n\nvar enuMatrixScratch = new Matrix4();\nvar inverseEnuScratch = new Matrix4();\nvar rectanglePointCartesianScratch = new Cartesian3();\nvar rectangleCenterScratch = new Cartographic();\nvar pointsCartographicScratch = [\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n];\n/**\n * When computing planes to bound the rectangle,\n * need to factor in \"bulge\" and other distortion.\n * Flatten the ellipsoid-centered corners and edge-centers of the rectangle\n * into the plane of the local ENU system, compute bounds in 2D, and\n * project back to ellipsoid-centered.\n *\n * @private\n */\nfunction computeRectangleBounds(\n rectangle,\n ellipsoid,\n height,\n southWestCornerResult,\n eastVectorResult,\n northVectorResult\n) {\n // Compute center of rectangle\n var centerCartographic = Rectangle.center(rectangle, rectangleCenterScratch);\n centerCartographic.height = height;\n var centerCartesian = Cartographic.toCartesian(\n centerCartographic,\n ellipsoid,\n rectanglePointCartesianScratch\n );\n var enuMatrix = Transforms.eastNorthUpToFixedFrame(\n centerCartesian,\n ellipsoid,\n enuMatrixScratch\n );\n var inverseEnu = Matrix4.inverse(enuMatrix, inverseEnuScratch);\n\n var west = rectangle.west;\n var east = rectangle.east;\n var north = rectangle.north;\n var south = rectangle.south;\n\n var cartographics = pointsCartographicScratch;\n cartographics[0].latitude = south;\n cartographics[0].longitude = west;\n cartographics[1].latitude = north;\n cartographics[1].longitude = west;\n cartographics[2].latitude = north;\n cartographics[2].longitude = east;\n cartographics[3].latitude = south;\n cartographics[3].longitude = east;\n\n var longitudeCenter = (west + east) * 0.5;\n var latitudeCenter = (north + south) * 0.5;\n\n cartographics[4].latitude = south;\n cartographics[4].longitude = longitudeCenter;\n cartographics[5].latitude = north;\n cartographics[5].longitude = longitudeCenter;\n cartographics[6].latitude = latitudeCenter;\n cartographics[6].longitude = west;\n cartographics[7].latitude = latitudeCenter;\n cartographics[7].longitude = east;\n\n var minX = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n for (var i = 0; i < 8; i++) {\n cartographics[i].height = height;\n var pointCartesian = Cartographic.toCartesian(\n cartographics[i],\n ellipsoid,\n rectanglePointCartesianScratch\n );\n Matrix4.multiplyByPoint(inverseEnu, pointCartesian, pointCartesian);\n pointCartesian.z = 0.0; // flatten into XY plane of ENU coordinate system\n minX = Math.min(minX, pointCartesian.x);\n maxX = Math.max(maxX, pointCartesian.x);\n minY = Math.min(minY, pointCartesian.y);\n maxY = Math.max(maxY, pointCartesian.y);\n }\n\n var southWestCorner = southWestCornerResult;\n southWestCorner.x = minX;\n southWestCorner.y = minY;\n southWestCorner.z = 0.0;\n Matrix4.multiplyByPoint(enuMatrix, southWestCorner, southWestCorner);\n\n var southEastCorner = eastVectorResult;\n southEastCorner.x = maxX;\n southEastCorner.y = minY;\n southEastCorner.z = 0.0;\n Matrix4.multiplyByPoint(enuMatrix, southEastCorner, southEastCorner);\n // make eastward vector\n Cartesian3.subtract(southEastCorner, southWestCorner, eastVectorResult);\n\n var northWestCorner = northVectorResult;\n northWestCorner.x = minX;\n northWestCorner.y = maxY;\n northWestCorner.z = 0.0;\n Matrix4.multiplyByPoint(enuMatrix, northWestCorner, northWestCorner);\n // make eastward vector\n Cartesian3.subtract(northWestCorner, southWestCorner, northVectorResult);\n}\n\nvar eastwardScratch = new Cartesian3();\nvar northwardScratch = new Cartesian3();\nvar encodeScratch = new EncodedCartesian3();\n/**\n * Gets an attributes object containing:\n * - 3 high-precision points as 6 GeometryInstanceAttributes. These points are used to compute eye-space planes.\n * - 1 texture coordinate rotation GeometryInstanceAttributes\n * - 2 GeometryInstanceAttributes used to compute high-precision points in 2D and Columbus View.\n * These points are used to compute eye-space planes like above.\n *\n * Used to compute texture coordinates for small-area ClassificationPrimitives with materials or multiple non-overlapping instances.\n *\n * @see ShadowVolumeAppearance\n * @private\n *\n * @param {Rectangle} boundingRectangle Rectangle object that the points will approximately bound\n * @param {Number[]} textureCoordinateRotationPoints Points in the computed texture coordinate system for remapping texture coordinates\n * @param {Ellipsoid} ellipsoid Ellipsoid for converting Rectangle points to world coordinates\n * @param {MapProjection} projection The MapProjection used for 2D and Columbus View.\n * @param {Number} [height=0] The maximum height for the shadow volume.\n * @returns {Object} An attributes dictionary containing planar texture coordinate attributes.\n */\nShadowVolumeAppearance.getPlanarTextureCoordinateAttributes = function (\n boundingRectangle,\n textureCoordinateRotationPoints,\n ellipsoid,\n projection,\n height\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"boundingRectangle\", boundingRectangle);\n Check.defined(\n \"textureCoordinateRotationPoints\",\n textureCoordinateRotationPoints\n );\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n Check.typeOf.object(\"projection\", projection);\n //>>includeEnd('debug');\n\n var corner = cornerScratch;\n var eastward = eastwardScratch;\n var northward = northwardScratch;\n computeRectangleBounds(\n boundingRectangle,\n ellipsoid,\n defaultValue(height, 0.0),\n corner,\n eastward,\n northward\n );\n\n var attributes = {};\n addTextureCoordinateRotationAttributes(\n attributes,\n textureCoordinateRotationPoints\n );\n\n var encoded = EncodedCartesian3.fromCartesian(corner, encodeScratch);\n\n attributes.southWest_HIGH = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false,\n value: Cartesian3.pack(encoded.high, [0, 0, 0]),\n });\n attributes.southWest_LOW = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false,\n value: Cartesian3.pack(encoded.low, [0, 0, 0]),\n });\n attributes.eastward = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false,\n value: Cartesian3.pack(eastward, [0, 0, 0]),\n });\n attributes.northward = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n normalize: false,\n value: Cartesian3.pack(northward, [0, 0, 0]),\n });\n\n add2DTextureCoordinateAttributes(boundingRectangle, projection, attributes);\n return attributes;\n};\n\nvar spherePointScratch = new Cartesian3();\nfunction latLongToSpherical(latitude, longitude, ellipsoid, result) {\n var cartographic = cartographicScratch;\n cartographic.latitude = latitude;\n cartographic.longitude = longitude;\n cartographic.height = 0.0;\n\n var spherePoint = Cartographic.toCartesian(\n cartographic,\n ellipsoid,\n spherePointScratch\n );\n\n // Project into plane with vertical for latitude\n var magXY = Math.sqrt(\n spherePoint.x * spherePoint.x + spherePoint.y * spherePoint.y\n );\n\n // Use fastApproximateAtan2 for alignment with shader\n var sphereLatitude = CesiumMath.fastApproximateAtan2(magXY, spherePoint.z);\n var sphereLongitude = CesiumMath.fastApproximateAtan2(\n spherePoint.x,\n spherePoint.y\n );\n\n result.x = sphereLatitude;\n result.y = sphereLongitude;\n\n return result;\n}\n\nvar sphericalScratch = new Cartesian2();\n/**\n * Gets an attributes object containing:\n * - the southwest corner of a rectangular area in spherical coordinates, as well as the inverse of the latitude/longitude range.\n * These are computed using the same atan2 approximation used in the shader.\n * - 1 texture coordinate rotation GeometryInstanceAttributes\n * - 2 GeometryInstanceAttributes used to compute high-precision points in 2D and Columbus View.\n * These points are used to compute eye-space planes like above.\n *\n * Used when computing texture coordinates for large-area ClassificationPrimitives with materials or\n * multiple non-overlapping instances.\n * @see ShadowVolumeAppearance\n * @private\n *\n * @param {Rectangle} boundingRectangle Rectangle object that the spherical extents will approximately bound\n * @param {Number[]} textureCoordinateRotationPoints Points in the computed texture coordinate system for remapping texture coordinates\n * @param {Ellipsoid} ellipsoid Ellipsoid for converting Rectangle points to world coordinates\n * @param {MapProjection} projection The MapProjection used for 2D and Columbus View.\n * @returns {Object} An attributes dictionary containing spherical texture coordinate attributes.\n */\nShadowVolumeAppearance.getSphericalExtentGeometryInstanceAttributes = function (\n boundingRectangle,\n textureCoordinateRotationPoints,\n ellipsoid,\n projection\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"boundingRectangle\", boundingRectangle);\n Check.defined(\n \"textureCoordinateRotationPoints\",\n textureCoordinateRotationPoints\n );\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\n Check.typeOf.object(\"projection\", projection);\n //>>includeEnd('debug');\n\n // rectangle cartographic coords !== spherical because it's on an ellipsoid\n var southWestExtents = latLongToSpherical(\n boundingRectangle.south,\n boundingRectangle.west,\n ellipsoid,\n sphericalScratch\n );\n\n var south = southWestExtents.x;\n var west = southWestExtents.y;\n\n var northEastExtents = latLongToSpherical(\n boundingRectangle.north,\n boundingRectangle.east,\n ellipsoid,\n sphericalScratch\n );\n var north = northEastExtents.x;\n var east = northEastExtents.y;\n\n // If the bounding rectangle crosses the IDL, rotate the spherical extents so the cross no longer happens.\n // This rotation must happen in the shader too.\n var rotationRadians = 0.0;\n if (west > east) {\n rotationRadians = CesiumMath.PI - west;\n west = -CesiumMath.PI;\n east += rotationRadians;\n }\n\n // Slightly pad extents to avoid floating point error when fragment culling at edges.\n south -= CesiumMath.EPSILON5;\n west -= CesiumMath.EPSILON5;\n north += CesiumMath.EPSILON5;\n east += CesiumMath.EPSILON5;\n\n var longitudeRangeInverse = 1.0 / (east - west);\n var latitudeRangeInverse = 1.0 / (north - south);\n\n var attributes = {\n sphericalExtents: new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n normalize: false,\n value: [south, west, latitudeRangeInverse, longitudeRangeInverse],\n }),\n longitudeRotation: new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 1,\n normalize: false,\n value: [rotationRadians],\n }),\n };\n\n addTextureCoordinateRotationAttributes(\n attributes,\n textureCoordinateRotationPoints\n );\n add2DTextureCoordinateAttributes(boundingRectangle, projection, attributes);\n return attributes;\n};\n\nShadowVolumeAppearance.hasAttributesForTextureCoordinatePlanes = function (\n attributes\n) {\n return (\n defined(attributes.southWest_HIGH) &&\n defined(attributes.southWest_LOW) &&\n defined(attributes.northward) &&\n defined(attributes.eastward) &&\n defined(attributes.planes2D_HIGH) &&\n defined(attributes.planes2D_LOW) &&\n defined(attributes.uMaxVmax) &&\n defined(attributes.uvMinAndExtents)\n );\n};\n\nShadowVolumeAppearance.hasAttributesForSphericalExtents = function (\n attributes\n) {\n return (\n defined(attributes.sphericalExtents) &&\n defined(attributes.longitudeRotation) &&\n defined(attributes.planes2D_HIGH) &&\n defined(attributes.planes2D_LOW) &&\n defined(attributes.uMaxVmax) &&\n defined(attributes.uvMinAndExtents)\n );\n};\n\nfunction shouldUseSpherical(rectangle) {\n return (\n Math.max(rectangle.width, rectangle.height) >\n ShadowVolumeAppearance.MAX_WIDTH_FOR_PLANAR_EXTENTS\n );\n}\n\n/**\n * Computes whether the given rectangle is wide enough that texture coordinates\n * over its area should be computed using spherical extents instead of distance to planes.\n *\n * @param {Rectangle} rectangle A rectangle\n * @private\n */\nShadowVolumeAppearance.shouldUseSphericalCoordinates = function (rectangle) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"rectangle\", rectangle);\n //>>includeEnd('debug');\n\n return shouldUseSpherical(rectangle);\n};\n\n/**\n * Texture coordinates for ground primitives are computed either using spherical coordinates for large areas or\n * using distance from planes for small areas.\n *\n * @type {Number}\n * @constant\n * @private\n */\nShadowVolumeAppearance.MAX_WIDTH_FOR_PLANAR_EXTENTS = CesiumMath.toRadians(1.0);\nexport default ShadowVolumeAppearance;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the function used to compare stencil values for the stencil test.\n *\n * @enum {Number}\n */\nvar StencilFunction = {\n /**\n * The stencil test never passes.\n *\n * @type {Number}\n * @constant\n */\n NEVER: WebGLConstants.NEVER,\n\n /**\n * The stencil test passes when the masked reference value is less than the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n LESS: WebGLConstants.LESS,\n\n /**\n * The stencil test passes when the masked reference value is equal to the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n EQUAL: WebGLConstants.EQUAL,\n\n /**\n * The stencil test passes when the masked reference value is less than or equal to the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n LESS_OR_EQUAL: WebGLConstants.LEQUAL,\n\n /**\n * The stencil test passes when the masked reference value is greater than the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n GREATER: WebGLConstants.GREATER,\n\n /**\n * The stencil test passes when the masked reference value is not equal to the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n NOT_EQUAL: WebGLConstants.NOTEQUAL,\n\n /**\n * The stencil test passes when the masked reference value is greater than or equal to the masked stencil value.\n *\n * @type {Number}\n * @constant\n */\n GREATER_OR_EQUAL: WebGLConstants.GEQUAL,\n\n /**\n * The stencil test always passes.\n *\n * @type {Number}\n * @constant\n */\n ALWAYS: WebGLConstants.ALWAYS,\n};\nexport default Object.freeze(StencilFunction);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the action taken based on the result of the stencil test.\n *\n * @enum {Number}\n */\nvar StencilOperation = {\n /**\n * Sets the stencil buffer value to zero.\n *\n * @type {Number}\n * @constant\n */\n ZERO: WebGLConstants.ZERO,\n\n /**\n * Does not change the stencil buffer.\n *\n * @type {Number}\n * @constant\n */\n KEEP: WebGLConstants.KEEP,\n\n /**\n * Replaces the stencil buffer value with the reference value.\n *\n * @type {Number}\n * @constant\n */\n REPLACE: WebGLConstants.REPLACE,\n\n /**\n * Increments the stencil buffer value, clamping to unsigned byte.\n *\n * @type {Number}\n * @constant\n */\n INCREMENT: WebGLConstants.INCR,\n\n /**\n * Decrements the stencil buffer value, clamping to zero.\n *\n * @type {Number}\n * @constant\n */\n DECREMENT: WebGLConstants.DECR,\n\n /**\n * Bitwise inverts the existing stencil buffer value.\n *\n * @type {Number}\n * @constant\n */\n INVERT: WebGLConstants.INVERT,\n\n /**\n * Increments the stencil buffer value, wrapping to zero when exceeding the unsigned byte range.\n *\n * @type {Number}\n * @constant\n */\n INCREMENT_WRAP: WebGLConstants.INCR_WRAP,\n\n /**\n * Decrements the stencil buffer value, wrapping to the maximum unsigned byte instead of going below zero.\n *\n * @type {Number}\n * @constant\n */\n DECREMENT_WRAP: WebGLConstants.DECR_WRAP,\n};\nexport default Object.freeze(StencilOperation);\n","import StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * The most significant bit is used to identify whether the pixel is 3D Tiles.\n * The next three bits store selection depth for the skip LODs optimization.\n * The last four bits are for increment/decrement shadow volume operations for classification.\n *\n * @private\n */\nvar StencilConstants = {\n CESIUM_3D_TILE_MASK: 0x80,\n SKIP_LOD_MASK: 0x70,\n SKIP_LOD_BIT_SHIFT: 4,\n CLASSIFICATION_MASK: 0x0f,\n};\n\nStencilConstants.setCesium3DTileBit = function () {\n return {\n enabled: true,\n frontFunction: StencilFunction.ALWAYS,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.REPLACE,\n },\n backFunction: StencilFunction.ALWAYS,\n backOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.REPLACE,\n },\n reference: StencilConstants.CESIUM_3D_TILE_MASK,\n mask: StencilConstants.CESIUM_3D_TILE_MASK,\n };\n};\nexport default Object.freeze(StencilConstants);\n","import ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ShadowVolumeAppearanceVS from \"../Shaders/ShadowVolumeAppearanceVS.js\";\nimport ShadowVolumeFS from \"../Shaders/ShadowVolumeFS.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowVolumeAppearance from \"./ShadowVolumeAppearance.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * A classification primitive represents a volume enclosing geometry in the {@link Scene} to be highlighted.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * Only {@link PerInstanceColorAppearance} with the same color across all instances is supported at this time when using\n * ClassificationPrimitive directly.\n * For full {@link Appearance} support when classifying terrain or 3D Tiles use {@link GroundPrimitive} instead.\n * </p>\n * <p>\n * For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there\n * will be rendering artifacts for some viewing angles.\n * </p>\n * <p>\n * Valid geometries are {@link BoxGeometry}, {@link CylinderGeometry}, {@link EllipsoidGeometry}, {@link PolylineVolumeGeometry}, and {@link SphereGeometry}.\n * </p>\n * <p>\n * Geometries that follow the surface of the ellipsoid, such as {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry},\n * are also valid if they are extruded volumes; otherwise, they will not be rendered.\n * </p>\n *\n * @alias ClassificationPrimitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] The geometry instances to render. This can either be a single instance or an array of length one.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive. Defaults to PerInstanceColorAppearance when GeometryInstances have a color attribute.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {Boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {Boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {Boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n * @param {Boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on\n * creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be <code>false</code>.\n *\n * @see Primitive\n * @see GroundPrimitive\n * @see GeometryInstance\n * @see Appearance\n */\nfunction ClassificationPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var geometryInstances = options.geometryInstances;\n\n /**\n * The geometry instance rendered with this primitive. This may\n * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n * is <code>true</code> when the primitive is constructed.\n * <p>\n * Changing this property after the primitive is rendered has no effect.\n * </p>\n * <p>\n * Because of the rendering technique used, all geometry instances must be the same color.\n * If there is an instance with a differing color, a <code>DeveloperError</code> will be thrown\n * on the first attempt to render.\n * </p>\n *\n * @readonly\n * @type {Array|GeometryInstance}\n *\n * @default undefined\n */\n this.geometryInstances = geometryInstances;\n /**\n * Determines if the primitive will be shown. This affects all geometry\n * instances in the primitive.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n /**\n * Determines whether terrain, 3D Tiles or both will be classified.\n *\n * @type {ClassificationType}\n *\n * @default ClassificationType.BOTH\n */\n this.classificationType = defaultValue(\n options.classificationType,\n ClassificationType.BOTH\n );\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the shadow volume for each geometry in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowShadowVolume = defaultValue(\n options.debugShowShadowVolume,\n false\n );\n this._debugShowShadowVolume = false;\n\n // These are used by GroundPrimitive to augment the shader and uniform map.\n this._extruded = defaultValue(options._extruded, false);\n this._uniformMap = options._uniformMap;\n\n this._sp = undefined;\n this._spStencil = undefined;\n this._spPick = undefined;\n this._spColor = undefined;\n\n this._spPick2D = undefined; // only derived if necessary\n this._spColor2D = undefined; // only derived if necessary\n\n this._rsStencilDepthPass = undefined;\n this._rsStencilDepthPass3DTiles = undefined;\n this._rsColorPass = undefined;\n this._rsPickPass = undefined;\n\n this._commandsIgnoreShow = [];\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._primitive = undefined;\n this._pickPrimitive = options._pickPrimitive;\n\n // Set in update\n this._hasSphericalExtentsAttribute = false;\n this._hasPlanarExtentsAttributes = false;\n this._hasPerColorAttribute = false;\n\n this.appearance = options.appearance;\n\n this._createBoundingVolumeFunction = options._createBoundingVolumeFunction;\n this._updateAndQueueCommandsFunction =\n options._updateAndQueueCommandsFunction;\n\n this._usePickOffsets = false;\n\n this._primitiveOptions = {\n geometryInstances: undefined,\n appearance: undefined,\n vertexCacheOptimize: defaultValue(options.vertexCacheOptimize, false),\n interleave: defaultValue(options.interleave, false),\n releaseGeometryInstances: defaultValue(\n options.releaseGeometryInstances,\n true\n ),\n allowPicking: defaultValue(options.allowPicking, true),\n asynchronous: defaultValue(options.asynchronous, true),\n compressVertices: defaultValue(options.compressVertices, true),\n _createBoundingVolumeFunction: undefined,\n _createRenderStatesFunction: undefined,\n _createShaderProgramFunction: undefined,\n _createCommandsFunction: undefined,\n _updateAndQueueCommandsFunction: undefined,\n _createPickOffsets: true,\n };\n}\n\nObject.defineProperties(ClassificationPrimitive.prototype, {\n /**\n * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n vertexCacheOptimize: {\n get: function () {\n return this._primitiveOptions.vertexCacheOptimize;\n },\n },\n\n /**\n * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n interleave: {\n get: function () {\n return this._primitiveOptions.interleave;\n },\n },\n\n /**\n * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n releaseGeometryInstances: {\n get: function () {\n return this._primitiveOptions.releaseGeometryInstances;\n },\n },\n\n /**\n * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n allowPicking: {\n get: function () {\n return this._primitiveOptions.allowPicking;\n },\n },\n\n /**\n * Determines if the geometry instances will be created and batched on a web worker.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n asynchronous: {\n get: function () {\n return this._primitiveOptions.asynchronous;\n },\n },\n\n /**\n * When <code>true</code>, geometry vertices are compressed, which will save memory.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n compressVertices: {\n get: function () {\n return this._primitiveOptions.compressVertices;\n },\n },\n\n /**\n * Determines if the primitive is complete and ready to render. If this property is\n * true, the primitive will be rendered the next time that {@link ClassificationPrimitive#update}\n * is called.\n *\n * @memberof ClassificationPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof ClassificationPrimitive.prototype\n * @type {Promise.<ClassificationPrimitive>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Returns true if the ClassificationPrimitive needs a separate shader and commands for 2D.\n * This is because texture coordinates on ClassificationPrimitives are computed differently,\n * and are used for culling when multiple GeometryInstances are batched in one ClassificationPrimitive.\n * @memberof ClassificationPrimitive.prototype\n * @type {Boolean}\n * @readonly\n * @private\n */\n _needs2DShader: {\n get: function () {\n return (\n this._hasPlanarExtentsAttributes || this._hasSphericalExtentsAttribute\n );\n },\n },\n});\n\n/**\n * Determines if ClassificationPrimitive rendering is supported.\n *\n * @param {Scene} scene The scene.\n * @returns {Boolean} <code>true</code> if ClassificationPrimitives are supported; otherwise, returns <code>false</code>\n */\nClassificationPrimitive.isSupported = function (scene) {\n return scene.context.stencilBuffer;\n};\n\nfunction getStencilDepthRenderState(enableStencil, mask3DTiles) {\n var stencilFunction = mask3DTiles\n ? StencilFunction.EQUAL\n : StencilFunction.ALWAYS;\n return {\n colorMask: {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n },\n stencilTest: {\n enabled: enableStencil,\n frontFunction: stencilFunction,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.DECREMENT_WRAP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: stencilFunction,\n backOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.INCREMENT_WRAP,\n zPass: StencilOperation.KEEP,\n },\n reference: StencilConstants.CESIUM_3D_TILE_MASK,\n mask: StencilConstants.CESIUM_3D_TILE_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: true,\n func: DepthFunction.LESS_OR_EQUAL,\n },\n depthMask: false,\n };\n}\n\nfunction getColorRenderState(enableStencil) {\n return {\n stencilTest: {\n enabled: enableStencil,\n frontFunction: StencilFunction.NOT_EQUAL,\n frontOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n backFunction: StencilFunction.NOT_EQUAL,\n backOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: false,\n },\n depthMask: false,\n blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n };\n}\n\nvar pickRenderState = {\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.NOT_EQUAL,\n frontOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n backFunction: StencilFunction.NOT_EQUAL,\n backOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: false,\n },\n depthMask: false,\n};\n\nfunction createRenderStates(\n classificationPrimitive,\n context,\n appearance,\n twoPasses\n) {\n if (defined(classificationPrimitive._rsStencilDepthPass)) {\n return;\n }\n var stencilEnabled = !classificationPrimitive.debugShowShadowVolume;\n\n classificationPrimitive._rsStencilDepthPass = RenderState.fromCache(\n getStencilDepthRenderState(stencilEnabled, false)\n );\n classificationPrimitive._rsStencilDepthPass3DTiles = RenderState.fromCache(\n getStencilDepthRenderState(stencilEnabled, true)\n );\n classificationPrimitive._rsColorPass = RenderState.fromCache(\n getColorRenderState(stencilEnabled, false)\n );\n classificationPrimitive._rsPickPass = RenderState.fromCache(pickRenderState);\n}\n\nfunction modifyForEncodedNormals(primitive, vertexShaderSource) {\n if (!primitive.compressVertices) {\n return vertexShaderSource;\n }\n\n if (\n vertexShaderSource.search(/attribute\\s+vec3\\s+extrudeDirection;/g) !== -1\n ) {\n var attributeName = \"compressedAttributes\";\n\n //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\n var attributeDecl = \"attribute vec2 \" + attributeName + \";\";\n\n var globalDecl = \"vec3 extrudeDirection;\\n\";\n var decode =\n \" extrudeDirection = czm_octDecode(\" + attributeName + \", 65535.0);\\n\";\n\n var modifiedVS = vertexShaderSource;\n modifiedVS = modifiedVS.replace(\n /attribute\\s+vec3\\s+extrudeDirection;/g,\n \"\"\n );\n modifiedVS = ShaderSource.replaceMain(\n modifiedVS,\n \"czm_non_compressed_main\"\n );\n var compressedMain =\n \"void main() \\n\" +\n \"{ \\n\" +\n decode +\n \" czm_non_compressed_main(); \\n\" +\n \"}\";\n\n return [attributeDecl, globalDecl, modifiedVS, compressedMain].join(\"\\n\");\n }\n}\n\nfunction createShaderProgram(classificationPrimitive, frameState) {\n var context = frameState.context;\n var primitive = classificationPrimitive._primitive;\n var vs = ShadowVolumeAppearanceVS;\n vs = classificationPrimitive._primitive._batchTable.getVertexShaderCallback()(\n vs\n );\n vs = Primitive._appendDistanceDisplayConditionToShader(primitive, vs);\n vs = Primitive._modifyShaderPosition(\n classificationPrimitive,\n vs,\n frameState.scene3DOnly\n );\n vs = Primitive._updateColorAttribute(primitive, vs);\n\n var planarExtents = classificationPrimitive._hasPlanarExtentsAttributes;\n var cullFragmentsUsingExtents =\n planarExtents || classificationPrimitive._hasSphericalExtentsAttribute;\n\n if (classificationPrimitive._extruded) {\n vs = modifyForEncodedNormals(primitive, vs);\n }\n\n var extrudedDefine = classificationPrimitive._extruded\n ? \"EXTRUDED_GEOMETRY\"\n : \"\";\n\n var vsSource = new ShaderSource({\n defines: [extrudedDefine],\n sources: [vs],\n });\n var fsSource = new ShaderSource({\n sources: [ShadowVolumeFS],\n });\n var attributeLocations =\n classificationPrimitive._primitive._attributeLocations;\n\n var shadowVolumeAppearance = new ShadowVolumeAppearance(\n cullFragmentsUsingExtents,\n planarExtents,\n classificationPrimitive.appearance\n );\n\n classificationPrimitive._spStencil = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: classificationPrimitive._spStencil,\n vertexShaderSource: vsSource,\n fragmentShaderSource: fsSource,\n attributeLocations: attributeLocations,\n });\n\n if (classificationPrimitive._primitive.allowPicking) {\n var vsPick = ShaderSource.createPickVertexShaderSource(vs);\n vsPick = Primitive._appendShowToShader(primitive, vsPick);\n vsPick = Primitive._updatePickColorAttribute(vsPick);\n\n var pickFS3D = shadowVolumeAppearance.createPickFragmentShader(false);\n var pickVS3D = shadowVolumeAppearance.createPickVertexShader(\n [extrudedDefine],\n vsPick,\n false,\n frameState.mapProjection\n );\n\n classificationPrimitive._spPick = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: classificationPrimitive._spPick,\n vertexShaderSource: pickVS3D,\n fragmentShaderSource: pickFS3D,\n attributeLocations: attributeLocations,\n });\n\n // Derive a 2D pick shader if the primitive uses texture coordinate-based fragment culling,\n // since texture coordinates are computed differently in 2D.\n if (cullFragmentsUsingExtents) {\n var pickProgram2D = context.shaderCache.getDerivedShaderProgram(\n classificationPrimitive._spPick,\n \"2dPick\"\n );\n if (!defined(pickProgram2D)) {\n var pickFS2D = shadowVolumeAppearance.createPickFragmentShader(true);\n var pickVS2D = shadowVolumeAppearance.createPickVertexShader(\n [extrudedDefine],\n vsPick,\n true,\n frameState.mapProjection\n );\n\n pickProgram2D = context.shaderCache.createDerivedShaderProgram(\n classificationPrimitive._spPick,\n \"2dPick\",\n {\n vertexShaderSource: pickVS2D,\n fragmentShaderSource: pickFS2D,\n attributeLocations: attributeLocations,\n }\n );\n }\n classificationPrimitive._spPick2D = pickProgram2D;\n }\n } else {\n classificationPrimitive._spPick = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vsSource,\n fragmentShaderSource: fsSource,\n attributeLocations: attributeLocations,\n });\n }\n\n vs = Primitive._appendShowToShader(primitive, vs);\n vsSource = new ShaderSource({\n defines: [extrudedDefine],\n sources: [vs],\n });\n\n classificationPrimitive._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: classificationPrimitive._sp,\n vertexShaderSource: vsSource,\n fragmentShaderSource: fsSource,\n attributeLocations: attributeLocations,\n });\n\n // Create a fragment shader that computes only required material hookups using screen space techniques\n var fsColorSource = shadowVolumeAppearance.createFragmentShader(false);\n var vsColorSource = shadowVolumeAppearance.createVertexShader(\n [extrudedDefine],\n vs,\n false,\n frameState.mapProjection\n );\n\n classificationPrimitive._spColor = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: classificationPrimitive._spColor,\n vertexShaderSource: vsColorSource,\n fragmentShaderSource: fsColorSource,\n attributeLocations: attributeLocations,\n });\n\n // Derive a 2D shader if the primitive uses texture coordinate-based fragment culling,\n // since texture coordinates are computed differently in 2D.\n // Any material that uses texture coordinates will also equip texture coordinate-based fragment culling.\n if (cullFragmentsUsingExtents) {\n var colorProgram2D = context.shaderCache.getDerivedShaderProgram(\n classificationPrimitive._spColor,\n \"2dColor\"\n );\n if (!defined(colorProgram2D)) {\n var fsColorSource2D = shadowVolumeAppearance.createFragmentShader(true);\n var vsColorSource2D = shadowVolumeAppearance.createVertexShader(\n [extrudedDefine],\n vs,\n true,\n frameState.mapProjection\n );\n\n colorProgram2D = context.shaderCache.createDerivedShaderProgram(\n classificationPrimitive._spColor,\n \"2dColor\",\n {\n vertexShaderSource: vsColorSource2D,\n fragmentShaderSource: fsColorSource2D,\n attributeLocations: attributeLocations,\n }\n );\n }\n classificationPrimitive._spColor2D = colorProgram2D;\n }\n}\n\nfunction createColorCommands(classificationPrimitive, colorCommands) {\n var primitive = classificationPrimitive._primitive;\n var length = primitive._va.length * 2; // each geometry (pack of vertex attributes) needs 2 commands: front/back stencils and fill\n colorCommands.length = length;\n\n var i;\n var command;\n var derivedCommand;\n var vaIndex = 0;\n var uniformMap = primitive._batchTable.getUniformMapCallback()(\n classificationPrimitive._uniformMap\n );\n\n var needs2DShader = classificationPrimitive._needs2DShader;\n\n for (i = 0; i < length; i += 2) {\n var vertexArray = primitive._va[vaIndex++];\n\n // Stencil depth command\n command = colorCommands[i];\n if (!defined(command)) {\n command = colorCommands[i] = new DrawCommand({\n owner: classificationPrimitive,\n primitiveType: primitive._primitiveType,\n });\n }\n\n command.vertexArray = vertexArray;\n command.renderState = classificationPrimitive._rsStencilDepthPass;\n command.shaderProgram = classificationPrimitive._sp;\n command.uniformMap = uniformMap;\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n\n derivedCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.tileset\n );\n derivedCommand.renderState =\n classificationPrimitive._rsStencilDepthPass3DTiles;\n derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n command.derivedCommands.tileset = derivedCommand;\n\n // Color command\n command = colorCommands[i + 1];\n if (!defined(command)) {\n command = colorCommands[i + 1] = new DrawCommand({\n owner: classificationPrimitive,\n primitiveType: primitive._primitiveType,\n });\n }\n\n command.vertexArray = vertexArray;\n command.renderState = classificationPrimitive._rsColorPass;\n command.shaderProgram = classificationPrimitive._spColor;\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n\n var appearance = classificationPrimitive.appearance;\n var material = appearance.material;\n if (defined(material)) {\n uniformMap = combine(uniformMap, material._uniforms);\n }\n\n command.uniformMap = uniformMap;\n\n derivedCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.tileset\n );\n derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n command.derivedCommands.tileset = derivedCommand;\n\n // Derive for 2D if texture coordinates are ever computed\n if (needs2DShader) {\n // First derive from the terrain command\n var derived2DCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.appearance2D\n );\n derived2DCommand.shaderProgram = classificationPrimitive._spColor2D;\n command.derivedCommands.appearance2D = derived2DCommand;\n\n // Then derive from the 3D Tiles command\n derived2DCommand = DrawCommand.shallowClone(\n derivedCommand,\n derivedCommand.derivedCommands.appearance2D\n );\n derived2DCommand.shaderProgram = classificationPrimitive._spColor2D;\n derivedCommand.derivedCommands.appearance2D = derived2DCommand;\n }\n }\n\n var commandsIgnoreShow = classificationPrimitive._commandsIgnoreShow;\n var spStencil = classificationPrimitive._spStencil;\n\n var commandIndex = 0;\n length = commandsIgnoreShow.length = length / 2;\n\n for (var j = 0; j < length; ++j) {\n var commandIgnoreShow = (commandsIgnoreShow[j] = DrawCommand.shallowClone(\n colorCommands[commandIndex],\n commandsIgnoreShow[j]\n ));\n commandIgnoreShow.shaderProgram = spStencil;\n commandIgnoreShow.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW;\n\n commandIndex += 2;\n }\n}\n\nfunction createPickCommands(classificationPrimitive, pickCommands) {\n var usePickOffsets = classificationPrimitive._usePickOffsets;\n\n var primitive = classificationPrimitive._primitive;\n var length = primitive._va.length * 2; // each geometry (pack of vertex attributes) needs 2 commands: front/back stencils and fill\n\n // Fallback for batching same-color geometry instances\n var pickOffsets;\n var pickIndex = 0;\n var pickOffset;\n if (usePickOffsets) {\n pickOffsets = primitive._pickOffsets;\n length = pickOffsets.length * 2;\n }\n\n pickCommands.length = length;\n\n var j;\n var command;\n var derivedCommand;\n var vaIndex = 0;\n var uniformMap = primitive._batchTable.getUniformMapCallback()(\n classificationPrimitive._uniformMap\n );\n\n var needs2DShader = classificationPrimitive._needs2DShader;\n\n for (j = 0; j < length; j += 2) {\n var vertexArray = primitive._va[vaIndex++];\n if (usePickOffsets) {\n pickOffset = pickOffsets[pickIndex++];\n vertexArray = primitive._va[pickOffset.index];\n }\n\n // Stencil depth command\n command = pickCommands[j];\n if (!defined(command)) {\n command = pickCommands[j] = new DrawCommand({\n owner: classificationPrimitive,\n primitiveType: primitive._primitiveType,\n pickOnly: true,\n });\n }\n\n command.vertexArray = vertexArray;\n command.renderState = classificationPrimitive._rsStencilDepthPass;\n command.shaderProgram = classificationPrimitive._sp;\n command.uniformMap = uniformMap;\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n if (usePickOffsets) {\n command.offset = pickOffset.offset;\n command.count = pickOffset.count;\n }\n\n // Derive for 3D Tiles classification\n derivedCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.tileset\n );\n derivedCommand.renderState =\n classificationPrimitive._rsStencilDepthPass3DTiles;\n derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n command.derivedCommands.tileset = derivedCommand;\n\n // Pick color command\n command = pickCommands[j + 1];\n if (!defined(command)) {\n command = pickCommands[j + 1] = new DrawCommand({\n owner: classificationPrimitive,\n primitiveType: primitive._primitiveType,\n pickOnly: true,\n });\n }\n\n command.vertexArray = vertexArray;\n command.renderState = classificationPrimitive._rsPickPass;\n command.shaderProgram = classificationPrimitive._spPick;\n command.uniformMap = uniformMap;\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n if (usePickOffsets) {\n command.offset = pickOffset.offset;\n command.count = pickOffset.count;\n }\n\n derivedCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.tileset\n );\n derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n command.derivedCommands.tileset = derivedCommand;\n\n // Derive for 2D if texture coordinates are ever computed\n if (needs2DShader) {\n // First derive from the terrain command\n var derived2DCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.pick2D\n );\n derived2DCommand.shaderProgram = classificationPrimitive._spPick2D;\n command.derivedCommands.pick2D = derived2DCommand;\n\n // Then derive from the 3D Tiles command\n derived2DCommand = DrawCommand.shallowClone(\n derivedCommand,\n derivedCommand.derivedCommands.pick2D\n );\n derived2DCommand.shaderProgram = classificationPrimitive._spPick2D;\n derivedCommand.derivedCommands.pick2D = derived2DCommand;\n }\n }\n}\n\nfunction createCommands(\n classificationPrimitive,\n appearance,\n material,\n translucent,\n twoPasses,\n colorCommands,\n pickCommands\n) {\n createColorCommands(classificationPrimitive, colorCommands);\n createPickCommands(classificationPrimitive, pickCommands);\n}\n\nfunction boundingVolumeIndex(commandIndex, length) {\n return Math.floor((commandIndex % length) / 2);\n}\n\nfunction updateAndQueueRenderCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n) {\n command.modelMatrix = modelMatrix;\n command.boundingVolume = boundingVolume;\n command.cull = cull;\n command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n frameState.commandList.push(command);\n}\n\nfunction updateAndQueuePickCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n) {\n command.modelMatrix = modelMatrix;\n command.boundingVolume = boundingVolume;\n command.cull = cull;\n\n frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n classificationPrimitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n) {\n var primitive = classificationPrimitive._primitive;\n Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix);\n\n var boundingVolumes;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingVolumes = primitive._boundingSphereWC;\n } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n boundingVolumes = primitive._boundingSphereCV;\n } else if (\n frameState.mode === SceneMode.SCENE2D &&\n defined(primitive._boundingSphere2D)\n ) {\n boundingVolumes = primitive._boundingSphere2D;\n } else if (defined(primitive._boundingSphereMorph)) {\n boundingVolumes = primitive._boundingSphereMorph;\n }\n\n var classificationType = classificationPrimitive.classificationType;\n var queueTerrainCommands =\n classificationType !== ClassificationType.CESIUM_3D_TILE;\n var queue3DTilesCommands = classificationType !== ClassificationType.TERRAIN;\n\n var passes = frameState.passes;\n\n var i;\n var boundingVolume;\n var command;\n\n if (passes.render) {\n var colorLength = colorCommands.length;\n for (i = 0; i < colorLength; ++i) {\n boundingVolume = boundingVolumes[boundingVolumeIndex(i, colorLength)];\n if (queueTerrainCommands) {\n command = colorCommands[i];\n updateAndQueueRenderCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n if (queue3DTilesCommands) {\n command = colorCommands[i].derivedCommands.tileset;\n updateAndQueueRenderCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n }\n\n if (frameState.invertClassification) {\n var ignoreShowCommands = classificationPrimitive._commandsIgnoreShow;\n var ignoreShowCommandsLength = ignoreShowCommands.length;\n for (i = 0; i < ignoreShowCommandsLength; ++i) {\n boundingVolume = boundingVolumes[i];\n command = ignoreShowCommands[i];\n updateAndQueueRenderCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n }\n }\n\n if (passes.pick) {\n var pickLength = pickCommands.length;\n var pickOffsets = primitive._pickOffsets;\n for (i = 0; i < pickLength; ++i) {\n var pickOffset = pickOffsets[boundingVolumeIndex(i, pickLength)];\n boundingVolume = boundingVolumes[pickOffset.index];\n if (queueTerrainCommands) {\n command = pickCommands[i];\n updateAndQueuePickCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n );\n }\n if (queue3DTilesCommands) {\n command = pickCommands[i].derivedCommands.tileset;\n updateAndQueuePickCommand(\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n );\n }\n }\n }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n * @exception {DeveloperError} Not all of the geometry instances have the same color attribute.\n */\nClassificationPrimitive.prototype.update = function (frameState) {\n if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n return;\n }\n\n var appearance = this.appearance;\n if (defined(appearance) && defined(appearance.material)) {\n appearance.material.update(frameState.context);\n }\n\n var that = this;\n var primitiveOptions = this._primitiveOptions;\n\n if (!defined(this._primitive)) {\n var instances = Array.isArray(this.geometryInstances)\n ? this.geometryInstances\n : [this.geometryInstances];\n var length = instances.length;\n\n var i;\n var instance;\n var attributes;\n\n var hasPerColorAttribute = false;\n var allColorsSame = true;\n var firstColor;\n var hasSphericalExtentsAttribute = false;\n var hasPlanarExtentsAttributes = false;\n\n if (length > 0) {\n attributes = instances[0].attributes;\n // Not expecting these to be set by users, should only be set via GroundPrimitive.\n // So don't check for mismatch.\n hasSphericalExtentsAttribute = ShadowVolumeAppearance.hasAttributesForSphericalExtents(\n attributes\n );\n hasPlanarExtentsAttributes = ShadowVolumeAppearance.hasAttributesForTextureCoordinatePlanes(\n attributes\n );\n firstColor = attributes.color;\n }\n\n for (i = 0; i < length; i++) {\n instance = instances[i];\n var color = instance.attributes.color;\n if (defined(color)) {\n hasPerColorAttribute = true;\n }\n //>>includeStart('debug', pragmas.debug);\n else if (hasPerColorAttribute) {\n throw new DeveloperError(\n \"All GeometryInstances must have color attributes to use per-instance color.\"\n );\n }\n //>>includeEnd('debug');\n\n allColorsSame =\n allColorsSame &&\n defined(color) &&\n ColorGeometryInstanceAttribute.equals(firstColor, color);\n }\n\n // If no attributes exist for computing spherical extents or fragment culling,\n // throw if the colors aren't all the same.\n if (\n !allColorsSame &&\n !hasSphericalExtentsAttribute &&\n !hasPlanarExtentsAttributes\n ) {\n throw new DeveloperError(\n \"All GeometryInstances must have the same color attribute except via GroundPrimitives\"\n );\n }\n\n // default to a color appearance\n if (hasPerColorAttribute && !defined(appearance)) {\n appearance = new PerInstanceColorAppearance({\n flat: true,\n });\n this.appearance = appearance;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !hasPerColorAttribute &&\n appearance instanceof PerInstanceColorAppearance\n ) {\n throw new DeveloperError(\n \"PerInstanceColorAppearance requires color GeometryInstanceAttributes on all GeometryInstances\"\n );\n }\n if (\n defined(appearance.material) &&\n !hasSphericalExtentsAttribute &&\n !hasPlanarExtentsAttributes\n ) {\n throw new DeveloperError(\n \"Materials on ClassificationPrimitives are not supported except via GroundPrimitives\"\n );\n }\n //>>includeEnd('debug');\n\n this._usePickOffsets =\n !hasSphericalExtentsAttribute && !hasPlanarExtentsAttributes;\n this._hasSphericalExtentsAttribute = hasSphericalExtentsAttribute;\n this._hasPlanarExtentsAttributes = hasPlanarExtentsAttributes;\n this._hasPerColorAttribute = hasPerColorAttribute;\n\n var geometryInstances = new Array(length);\n for (i = 0; i < length; ++i) {\n instance = instances[i];\n geometryInstances[i] = new GeometryInstance({\n geometry: instance.geometry,\n attributes: instance.attributes,\n modelMatrix: instance.modelMatrix,\n id: instance.id,\n pickPrimitive: defaultValue(this._pickPrimitive, that),\n });\n }\n\n primitiveOptions.appearance = appearance;\n primitiveOptions.geometryInstances = geometryInstances;\n\n if (defined(this._createBoundingVolumeFunction)) {\n primitiveOptions._createBoundingVolumeFunction = function (\n frameState,\n geometry\n ) {\n that._createBoundingVolumeFunction(frameState, geometry);\n };\n }\n\n primitiveOptions._createRenderStatesFunction = function (\n primitive,\n context,\n appearance,\n twoPasses\n ) {\n createRenderStates(that, context);\n };\n primitiveOptions._createShaderProgramFunction = function (\n primitive,\n frameState,\n appearance\n ) {\n createShaderProgram(that, frameState);\n };\n primitiveOptions._createCommandsFunction = function (\n primitive,\n appearance,\n material,\n translucent,\n twoPasses,\n colorCommands,\n pickCommands\n ) {\n createCommands(\n that,\n undefined,\n undefined,\n true,\n false,\n colorCommands,\n pickCommands\n );\n };\n\n if (defined(this._updateAndQueueCommandsFunction)) {\n primitiveOptions._updateAndQueueCommandsFunction = function (\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n ) {\n that._updateAndQueueCommandsFunction(\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n );\n };\n } else {\n primitiveOptions._updateAndQueueCommandsFunction = function (\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n ) {\n updateAndQueueCommands(\n that,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n );\n };\n }\n\n this._primitive = new Primitive(primitiveOptions);\n this._primitive.readyPromise.then(function (primitive) {\n that._ready = true;\n\n if (that.releaseGeometryInstances) {\n that.geometryInstances = undefined;\n }\n\n var error = primitive._error;\n if (!defined(error)) {\n that._readyPromise.resolve(that);\n } else {\n that._readyPromise.reject(error);\n }\n });\n }\n\n if (\n this.debugShowShadowVolume &&\n !this._debugShowShadowVolume &&\n this._ready\n ) {\n this._debugShowShadowVolume = true;\n this._rsStencilDepthPass = RenderState.fromCache(\n getStencilDepthRenderState(false, false)\n );\n this._rsStencilDepthPass3DTiles = RenderState.fromCache(\n getStencilDepthRenderState(false, true)\n );\n this._rsColorPass = RenderState.fromCache(getColorRenderState(false));\n } else if (!this.debugShowShadowVolume && this._debugShowShadowVolume) {\n this._debugShowShadowVolume = false;\n this._rsStencilDepthPass = RenderState.fromCache(\n getStencilDepthRenderState(true, false)\n );\n this._rsStencilDepthPass3DTiles = RenderState.fromCache(\n getStencilDepthRenderState(true, true)\n );\n this._rsColorPass = RenderState.fromCache(getColorRenderState(true));\n }\n // Update primitive appearance\n if (this._primitive.appearance !== appearance) {\n //>>includeStart('debug', pragmas.debug);\n // Check if the appearance is supported by the geometry attributes\n if (\n !this._hasSphericalExtentsAttribute &&\n !this._hasPlanarExtentsAttributes &&\n defined(appearance.material)\n ) {\n throw new DeveloperError(\n \"Materials on ClassificationPrimitives are not supported except via GroundPrimitive\"\n );\n }\n if (\n !this._hasPerColorAttribute &&\n appearance instanceof PerInstanceColorAppearance\n ) {\n throw new DeveloperError(\n \"PerInstanceColorAppearance requires color GeometryInstanceAttribute\"\n );\n }\n //>>includeEnd('debug');\n this._primitive.appearance = appearance;\n }\n\n this._primitive.show = this.show;\n this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n this._primitive.update(frameState);\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {Object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nClassificationPrimitive.prototype.getGeometryInstanceAttributes = function (\n id\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this._primitive)) {\n throw new DeveloperError(\n \"must call update before calling getGeometryInstanceAttributes\"\n );\n }\n //>>includeEnd('debug');\n return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ClassificationPrimitive#destroy\n */\nClassificationPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see ClassificationPrimitive#isDestroyed\n */\nClassificationPrimitive.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n this._sp = this._sp && this._sp.destroy();\n this._spPick = this._spPick && this._spPick.destroy();\n this._spColor = this._spColor && this._spColor.destroy();\n\n // Derived programs, destroyed above if they existed.\n this._spPick2D = undefined;\n this._spColor2D = undefined;\n return destroyObject(this);\n};\nexport default ClassificationPrimitive;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute float batchId;\\n\\\n\\n\\\n#ifdef EXTRUDED_GEOMETRY\\n\\\nattribute vec3 extrudeDirection;\\n\\\n\\n\\\nuniform float u_globeMinimumAltitude;\\n\\\n#endif // EXTRUDED_GEOMETRY\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\nvarying vec4 v_sphericalExtents;\\n\\\n#else // SPHERICAL\\n\\\nvarying vec2 v_inversePlaneExtents;\\n\\\nvarying vec4 v_westPlane;\\n\\\nvarying vec4 v_southPlane;\\n\\\n#endif // SPHERICAL\\n\\\nvarying vec3 v_uvMinAndSphericalLongitudeRotation;\\n\\\nvarying vec3 v_uMaxAndInverseDistance;\\n\\\nvarying vec3 v_vMaxAndInverseDistance;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 position = czm_computePosition();\\n\\\n\\n\\\n#ifdef EXTRUDED_GEOMETRY\\n\\\n float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));\\n\\\n delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;\\n\\\n\\n\\\n //extrudeDirection is zero for the top layer\\n\\\n position = position + vec4(extrudeDirection * delta, 0.0);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\n v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);\\n\\\n v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);\\n\\\n#else // SPHERICAL\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);\\n\\\n vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);\\n\\\n\\n\\\n // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w):\\n\\\n // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts)\\n\\\n // - existing \\\"east\\\" is on the wrong side of the world, far away (planes2D_high/low.w)\\n\\\n // - so set \\\"east\\\" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow)\\n\\\n vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));\\n\\\n bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;\\n\\\n planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);\\n\\\n planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);\\n\\\n\\n\\\n // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0)\\n\\\n // - existing \\\"west\\\" is on the wrong side of the world, far away (planes2D_high/low.x)\\n\\\n // - so set \\\"west\\\" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow)\\n\\\n idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;\\n\\\n idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));\\n\\\n planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);\\n\\\n planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);\\n\\\n\\n\\\n vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;\\n\\\n vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;\\n\\\n vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;\\n\\\n#else // COLUMBUS_VIEW_2D\\n\\\n // 3D case has smaller \\\"plane extents,\\\" so planes encoded as a 64 bit position and 2 vec3s for distances/direction\\n\\\n vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;\\n\\\n vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;\\n\\\n vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;\\n\\\n#endif // COLUMBUS_VIEW_2D\\n\\\n\\n\\\n vec3 eastWard = southEastCorner - southWestCorner;\\n\\\n float eastExtent = length(eastWard);\\n\\\n eastWard /= eastExtent;\\n\\\n\\n\\\n vec3 northWard = northWestCorner - southWestCorner;\\n\\\n float northExtent = length(northWard);\\n\\\n northWard /= northExtent;\\n\\\n\\n\\\n v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));\\n\\\n v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));\\n\\\n v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);\\n\\\n#endif // SPHERICAL\\n\\\n vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);\\n\\\n vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);\\n\\\n\\n\\\n v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);\\n\\\n v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);\\n\\\n v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n v_color = czm_batchTable_color(batchId);\\n\\\n#endif\\n\\\n\\n\\\n gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position);\\n\\\n}\\n\\\n\";\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ClassificationPrimitive from \"./ClassificationPrimitive.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowVolumeAppearance from \"./ShadowVolumeAppearance.js\";\n\nvar GroundPrimitiveUniformMap = {\n u_globeMinimumAltitude: function () {\n return 55000.0;\n },\n};\n\n/**\n * A ground primitive represents geometry draped over terrain or 3D Tiles in the {@link Scene}.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}. Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics. Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * </p>\n * <p>\n * Support for the WEBGL_depth_texture extension is required to use GeometryInstances with different PerInstanceColors\n * or materials besides PerInstanceColorAppearance.\n * </p>\n * <p>\n * Textured GroundPrimitives were designed for notional patterns and are not meant for precisely mapping\n * textures to terrain - for that use case, use {@link SingleTileImageryProvider}.\n * </p>\n * <p>\n * For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there\n * will be rendering artifacts for some viewing angles.\n * </p>\n * <p>\n * Valid geometries are {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry}.\n * </p>\n *\n * @alias GroundPrimitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] The geometry instances to render.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive. Defaults to a flat PerInstanceColorAppearance when GeometryInstances have a color attribute.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {Boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {Boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {Boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n * @param {Boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on\n * creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be <code>false</code>.\n *\n * @example\n * // Example 1: Create primitive with a single instance\n * var rectangleInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.RectangleGeometry({\n * rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)\n * }),\n * id : 'rectangle',\n * attributes : {\n * color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)\n * }\n * });\n * scene.primitives.add(new Cesium.GroundPrimitive({\n * geometryInstances : rectangleInstance\n * }));\n *\n * // Example 2: Batch instances\n * var color = new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5); // Both instances must have the same color.\n * var rectangleInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.RectangleGeometry({\n * rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)\n * }),\n * id : 'rectangle',\n * attributes : {\n * color : color\n * }\n * });\n * var ellipseInstance = new Cesium.GeometryInstance({\n * geometry : new Cesium.EllipseGeometry({\n * center : Cesium.Cartesian3.fromDegrees(-105.0, 40.0),\n * semiMinorAxis : 300000.0,\n * semiMajorAxis : 400000.0\n * }),\n * id : 'ellipse',\n * attributes : {\n * color : color\n * }\n * });\n * scene.primitives.add(new Cesium.GroundPrimitive({\n * geometryInstances : [rectangleInstance, ellipseInstance]\n * }));\n *\n * @see Primitive\n * @see ClassificationPrimitive\n * @see GeometryInstance\n * @see Appearance\n */\nfunction GroundPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var appearance = options.appearance;\n var geometryInstances = options.geometryInstances;\n if (!defined(appearance) && defined(geometryInstances)) {\n var geometryInstancesArray = Array.isArray(geometryInstances)\n ? geometryInstances\n : [geometryInstances];\n var geometryInstanceCount = geometryInstancesArray.length;\n for (var i = 0; i < geometryInstanceCount; i++) {\n var attributes = geometryInstancesArray[i].attributes;\n if (defined(attributes) && defined(attributes.color)) {\n appearance = new PerInstanceColorAppearance({\n flat: true,\n });\n break;\n }\n }\n }\n /**\n * The {@link Appearance} used to shade this primitive. Each geometry\n * instance is shaded with the same appearance. Some appearances, like\n * {@link PerInstanceColorAppearance} allow giving each instance unique\n * properties.\n *\n * @type Appearance\n *\n * @default undefined\n */\n this.appearance = appearance;\n\n /**\n * The geometry instances rendered with this primitive. This may\n * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n * is <code>true</code> when the primitive is constructed.\n * <p>\n * Changing this property after the primitive is rendered has no effect.\n * </p>\n *\n * @readonly\n * @type {Array|GeometryInstance}\n *\n * @default undefined\n */\n this.geometryInstances = options.geometryInstances;\n /**\n * Determines if the primitive will be shown. This affects all geometry\n * instances in the primitive.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n /**\n * Determines whether terrain, 3D Tiles or both will be classified.\n *\n * @type {ClassificationType}\n *\n * @default ClassificationType.BOTH\n */\n this.classificationType = defaultValue(\n options.classificationType,\n ClassificationType.BOTH\n );\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the shadow volume for each geometry in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowShadowVolume = defaultValue(\n options.debugShowShadowVolume,\n false\n );\n\n this._boundingVolumes = [];\n this._boundingVolumes2D = [];\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._primitive = undefined;\n\n this._maxHeight = undefined;\n this._minHeight = undefined;\n\n this._maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n this._minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n\n this._boundingSpheresKeys = [];\n this._boundingSpheres = [];\n\n this._useFragmentCulling = false;\n // Used when inserting in an OrderedPrimitiveCollection\n this._zIndex = undefined;\n\n var that = this;\n this._classificationPrimitiveOptions = {\n geometryInstances: undefined,\n appearance: undefined,\n vertexCacheOptimize: defaultValue(options.vertexCacheOptimize, false),\n interleave: defaultValue(options.interleave, false),\n releaseGeometryInstances: defaultValue(\n options.releaseGeometryInstances,\n true\n ),\n allowPicking: defaultValue(options.allowPicking, true),\n asynchronous: defaultValue(options.asynchronous, true),\n compressVertices: defaultValue(options.compressVertices, true),\n _createBoundingVolumeFunction: undefined,\n _updateAndQueueCommandsFunction: undefined,\n _pickPrimitive: that,\n _extruded: true,\n _uniformMap: GroundPrimitiveUniformMap,\n };\n}\n\nObject.defineProperties(GroundPrimitive.prototype, {\n /**\n * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n vertexCacheOptimize: {\n get: function () {\n return this._classificationPrimitiveOptions.vertexCacheOptimize;\n },\n },\n\n /**\n * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n interleave: {\n get: function () {\n return this._classificationPrimitiveOptions.interleave;\n },\n },\n\n /**\n * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n releaseGeometryInstances: {\n get: function () {\n return this._classificationPrimitiveOptions.releaseGeometryInstances;\n },\n },\n\n /**\n * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n allowPicking: {\n get: function () {\n return this._classificationPrimitiveOptions.allowPicking;\n },\n },\n\n /**\n * Determines if the geometry instances will be created and batched on a web worker.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n asynchronous: {\n get: function () {\n return this._classificationPrimitiveOptions.asynchronous;\n },\n },\n\n /**\n * When <code>true</code>, geometry vertices are compressed, which will save memory.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n compressVertices: {\n get: function () {\n return this._classificationPrimitiveOptions.compressVertices;\n },\n },\n\n /**\n * Determines if the primitive is complete and ready to render. If this property is\n * true, the primitive will be rendered the next time that {@link GroundPrimitive#update}\n * is called.\n *\n * @memberof GroundPrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof GroundPrimitive.prototype\n * @type {Promise.<GroundPrimitive>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\n/**\n * Determines if GroundPrimitive rendering is supported.\n *\n * @function\n * @param {Scene} scene The scene.\n * @returns {Boolean} <code>true</code> if GroundPrimitives are supported; otherwise, returns <code>false</code>\n */\nGroundPrimitive.isSupported = ClassificationPrimitive.isSupported;\n\nfunction getComputeMaximumHeightFunction(primitive) {\n return function (granularity, ellipsoid) {\n var r = ellipsoid.maximumRadius;\n var delta = r / Math.cos(granularity * 0.5) - r;\n return primitive._maxHeight + delta;\n };\n}\n\nfunction getComputeMinimumHeightFunction(primitive) {\n return function (granularity, ellipsoid) {\n return primitive._minHeight;\n };\n}\n\nvar scratchBVCartesianHigh = new Cartesian3();\nvar scratchBVCartesianLow = new Cartesian3();\nvar scratchBVCartesian = new Cartesian3();\nvar scratchBVCartographic = new Cartographic();\nvar scratchBVRectangle = new Rectangle();\n\nfunction getRectangle(frameState, geometry) {\n var ellipsoid = frameState.mapProjection.ellipsoid;\n\n if (\n !defined(geometry.attributes) ||\n !defined(geometry.attributes.position3DHigh)\n ) {\n if (defined(geometry.rectangle)) {\n return geometry.rectangle;\n }\n\n return undefined;\n }\n\n var highPositions = geometry.attributes.position3DHigh.values;\n var lowPositions = geometry.attributes.position3DLow.values;\n var length = highPositions.length;\n\n var minLat = Number.POSITIVE_INFINITY;\n var minLon = Number.POSITIVE_INFINITY;\n var maxLat = Number.NEGATIVE_INFINITY;\n var maxLon = Number.NEGATIVE_INFINITY;\n\n for (var i = 0; i < length; i += 3) {\n var highPosition = Cartesian3.unpack(\n highPositions,\n i,\n scratchBVCartesianHigh\n );\n var lowPosition = Cartesian3.unpack(lowPositions, i, scratchBVCartesianLow);\n\n var position = Cartesian3.add(\n highPosition,\n lowPosition,\n scratchBVCartesian\n );\n var cartographic = ellipsoid.cartesianToCartographic(\n position,\n scratchBVCartographic\n );\n\n var latitude = cartographic.latitude;\n var longitude = cartographic.longitude;\n\n minLat = Math.min(minLat, latitude);\n minLon = Math.min(minLon, longitude);\n maxLat = Math.max(maxLat, latitude);\n maxLon = Math.max(maxLon, longitude);\n }\n\n var rectangle = scratchBVRectangle;\n rectangle.north = maxLat;\n rectangle.south = minLat;\n rectangle.east = maxLon;\n rectangle.west = minLon;\n\n return rectangle;\n}\n\nfunction setMinMaxTerrainHeights(primitive, rectangle, ellipsoid) {\n var result = ApproximateTerrainHeights.getMinimumMaximumHeights(\n rectangle,\n ellipsoid\n );\n\n primitive._minTerrainHeight = result.minimumTerrainHeight;\n primitive._maxTerrainHeight = result.maximumTerrainHeight;\n}\n\nfunction createBoundingVolume(groundPrimitive, frameState, geometry) {\n var ellipsoid = frameState.mapProjection.ellipsoid;\n var rectangle = getRectangle(frameState, geometry);\n\n var obb = OrientedBoundingBox.fromRectangle(\n rectangle,\n groundPrimitive._minHeight,\n groundPrimitive._maxHeight,\n ellipsoid\n );\n groundPrimitive._boundingVolumes.push(obb);\n\n if (!frameState.scene3DOnly) {\n var projection = frameState.mapProjection;\n var boundingVolume = BoundingSphere.fromRectangleWithHeights2D(\n rectangle,\n projection,\n groundPrimitive._maxHeight,\n groundPrimitive._minHeight\n );\n Cartesian3.fromElements(\n boundingVolume.center.z,\n boundingVolume.center.x,\n boundingVolume.center.y,\n boundingVolume.center\n );\n\n groundPrimitive._boundingVolumes2D.push(boundingVolume);\n }\n}\n\nfunction boundingVolumeIndex(commandIndex, length) {\n return Math.floor((commandIndex % length) / 2);\n}\n\nfunction updateAndQueueRenderCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n) {\n // Use derived appearance command for 2D if needed\n var classificationPrimitive = groundPrimitive._primitive;\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n command.shaderProgram === classificationPrimitive._spColor &&\n classificationPrimitive._needs2DShader\n ) {\n command = command.derivedCommands.appearance2D;\n }\n\n command.owner = groundPrimitive;\n command.modelMatrix = modelMatrix;\n command.boundingVolume = boundingVolume;\n command.cull = cull;\n command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n frameState.commandList.push(command);\n}\n\nfunction updateAndQueuePickCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n) {\n // Use derived pick command for 2D if needed\n var classificationPrimitive = groundPrimitive._primitive;\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n command.shaderProgram === classificationPrimitive._spPick &&\n classificationPrimitive._needs2DShader\n ) {\n command = command.derivedCommands.pick2D;\n }\n\n command.owner = groundPrimitive;\n command.modelMatrix = modelMatrix;\n command.boundingVolume = boundingVolume;\n command.cull = cull;\n\n frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n groundPrimitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n) {\n var boundingVolumes;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingVolumes = groundPrimitive._boundingVolumes;\n } else {\n boundingVolumes = groundPrimitive._boundingVolumes2D;\n }\n\n var classificationType = groundPrimitive.classificationType;\n var queueTerrainCommands =\n classificationType !== ClassificationType.CESIUM_3D_TILE;\n var queue3DTilesCommands = classificationType !== ClassificationType.TERRAIN;\n\n var passes = frameState.passes;\n var classificationPrimitive = groundPrimitive._primitive;\n\n var i;\n var boundingVolume;\n var command;\n\n if (passes.render) {\n var colorLength = colorCommands.length;\n\n for (i = 0; i < colorLength; ++i) {\n boundingVolume = boundingVolumes[boundingVolumeIndex(i, colorLength)];\n if (queueTerrainCommands) {\n command = colorCommands[i];\n updateAndQueueRenderCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n if (queue3DTilesCommands) {\n command = colorCommands[i].derivedCommands.tileset;\n updateAndQueueRenderCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n }\n\n if (frameState.invertClassification) {\n var ignoreShowCommands = classificationPrimitive._commandsIgnoreShow;\n var ignoreShowCommandsLength = ignoreShowCommands.length;\n for (i = 0; i < ignoreShowCommandsLength; ++i) {\n boundingVolume = boundingVolumes[i];\n command = ignoreShowCommands[i];\n updateAndQueueRenderCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n }\n }\n\n if (passes.pick) {\n var pickLength = pickCommands.length;\n\n var pickOffsets;\n if (!groundPrimitive._useFragmentCulling) {\n // Must be using pick offsets\n pickOffsets = classificationPrimitive._primitive._pickOffsets;\n }\n for (i = 0; i < pickLength; ++i) {\n boundingVolume = boundingVolumes[boundingVolumeIndex(i, pickLength)];\n if (!groundPrimitive._useFragmentCulling) {\n var pickOffset = pickOffsets[boundingVolumeIndex(i, pickLength)];\n boundingVolume = boundingVolumes[pickOffset.index];\n }\n if (queueTerrainCommands) {\n command = pickCommands[i];\n updateAndQueuePickCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n );\n }\n if (queue3DTilesCommands) {\n command = pickCommands[i].derivedCommands.tileset;\n updateAndQueuePickCommand(\n groundPrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume\n );\n }\n }\n }\n}\n\n/**\n * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the\n * GroundPrimitive synchronously.\n *\n * @returns {Promise<void>} A promise that will resolve once the terrain heights have been loaded.\n *\n */\nGroundPrimitive.initializeTerrainHeights = function () {\n return ApproximateTerrainHeights.initialize();\n};\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} For synchronous GroundPrimitive, you must call GroundPrimitive.initializeTerrainHeights() and wait for the returned promise to resolve.\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n */\nGroundPrimitive.prototype.update = function (frameState) {\n if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n return;\n }\n\n if (!ApproximateTerrainHeights.initialized) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.asynchronous) {\n throw new DeveloperError(\n \"For synchronous GroundPrimitives, you must call GroundPrimitive.initializeTerrainHeights() and wait for the returned promise to resolve.\"\n );\n }\n //>>includeEnd('debug');\n\n GroundPrimitive.initializeTerrainHeights();\n return;\n }\n\n var that = this;\n var primitiveOptions = this._classificationPrimitiveOptions;\n\n if (!defined(this._primitive)) {\n var ellipsoid = frameState.mapProjection.ellipsoid;\n\n var instance;\n var geometry;\n var instanceType;\n\n var instances = Array.isArray(this.geometryInstances)\n ? this.geometryInstances\n : [this.geometryInstances];\n var length = instances.length;\n var groundInstances = new Array(length);\n\n var i;\n var rectangle;\n for (i = 0; i < length; ++i) {\n instance = instances[i];\n geometry = instance.geometry;\n var instanceRectangle = getRectangle(frameState, geometry);\n if (!defined(rectangle)) {\n rectangle = Rectangle.clone(instanceRectangle);\n } else if (defined(instanceRectangle)) {\n Rectangle.union(rectangle, instanceRectangle, rectangle);\n }\n\n var id = instance.id;\n if (defined(id) && defined(instanceRectangle)) {\n var boundingSphere = ApproximateTerrainHeights.getBoundingSphere(\n instanceRectangle,\n ellipsoid\n );\n this._boundingSpheresKeys.push(id);\n this._boundingSpheres.push(boundingSphere);\n }\n\n instanceType = geometry.constructor;\n if (!defined(instanceType) || !defined(instanceType.createShadowVolume)) {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n \"Not all of the geometry instances have GroundPrimitive support.\"\n );\n //>>includeEnd('debug');\n }\n }\n\n // Now compute the min/max heights for the primitive\n setMinMaxTerrainHeights(this, rectangle, ellipsoid);\n var exaggeration = frameState.terrainExaggeration;\n this._minHeight = this._minTerrainHeight * exaggeration;\n this._maxHeight = this._maxTerrainHeight * exaggeration;\n\n var useFragmentCulling = GroundPrimitive._supportsMaterials(\n frameState.context\n );\n this._useFragmentCulling = useFragmentCulling;\n\n if (useFragmentCulling) {\n // Determine whether to add spherical or planar extent attributes for computing texture coordinates.\n // This depends on the size of the GeometryInstances.\n var attributes;\n var usePlanarExtents = true;\n for (i = 0; i < length; ++i) {\n instance = instances[i];\n geometry = instance.geometry;\n rectangle = getRectangle(frameState, geometry);\n if (ShadowVolumeAppearance.shouldUseSphericalCoordinates(rectangle)) {\n usePlanarExtents = false;\n break;\n }\n }\n\n for (i = 0; i < length; ++i) {\n instance = instances[i];\n geometry = instance.geometry;\n instanceType = geometry.constructor;\n\n var boundingRectangle = getRectangle(frameState, geometry);\n var textureCoordinateRotationPoints =\n geometry.textureCoordinateRotationPoints;\n\n if (usePlanarExtents) {\n attributes = ShadowVolumeAppearance.getPlanarTextureCoordinateAttributes(\n boundingRectangle,\n textureCoordinateRotationPoints,\n ellipsoid,\n frameState.mapProjection,\n this._maxHeight\n );\n } else {\n attributes = ShadowVolumeAppearance.getSphericalExtentGeometryInstanceAttributes(\n boundingRectangle,\n textureCoordinateRotationPoints,\n ellipsoid,\n frameState.mapProjection\n );\n }\n\n var instanceAttributes = instance.attributes;\n for (var attributeKey in instanceAttributes) {\n if (instanceAttributes.hasOwnProperty(attributeKey)) {\n attributes[attributeKey] = instanceAttributes[attributeKey];\n }\n }\n\n groundInstances[i] = new GeometryInstance({\n geometry: instanceType.createShadowVolume(\n geometry,\n getComputeMinimumHeightFunction(this),\n getComputeMaximumHeightFunction(this)\n ),\n attributes: attributes,\n id: instance.id,\n });\n }\n } else {\n // ClassificationPrimitive will check if the colors are all the same if it detects lack of fragment culling attributes\n for (i = 0; i < length; ++i) {\n instance = instances[i];\n geometry = instance.geometry;\n instanceType = geometry.constructor;\n groundInstances[i] = new GeometryInstance({\n geometry: instanceType.createShadowVolume(\n geometry,\n getComputeMinimumHeightFunction(this),\n getComputeMaximumHeightFunction(this)\n ),\n attributes: instance.attributes,\n id: instance.id,\n });\n }\n }\n\n primitiveOptions.geometryInstances = groundInstances;\n primitiveOptions.appearance = this.appearance;\n\n primitiveOptions._createBoundingVolumeFunction = function (\n frameState,\n geometry\n ) {\n createBoundingVolume(that, frameState, geometry);\n };\n primitiveOptions._updateAndQueueCommandsFunction = function (\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n ) {\n updateAndQueueCommands(\n that,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n );\n };\n\n this._primitive = new ClassificationPrimitive(primitiveOptions);\n this._primitive.readyPromise.then(function (primitive) {\n that._ready = true;\n\n if (that.releaseGeometryInstances) {\n that.geometryInstances = undefined;\n }\n\n var error = primitive._error;\n if (!defined(error)) {\n that._readyPromise.resolve(that);\n } else {\n that._readyPromise.reject(error);\n }\n });\n }\n\n this._primitive.appearance = this.appearance;\n this._primitive.show = this.show;\n this._primitive.debugShowShadowVolume = this.debugShowShadowVolume;\n this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n this._primitive.update(frameState);\n};\n\n/**\n * @private\n */\nGroundPrimitive.prototype.getBoundingSphere = function (id) {\n var index = this._boundingSpheresKeys.indexOf(id);\n if (index !== -1) {\n return this._boundingSpheres[index];\n }\n\n return undefined;\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {Object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nGroundPrimitive.prototype.getGeometryInstanceAttributes = function (id) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this._primitive)) {\n throw new DeveloperError(\n \"must call update before calling getGeometryInstanceAttributes\"\n );\n }\n //>>includeEnd('debug');\n return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see GroundPrimitive#destroy\n */\nGroundPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see GroundPrimitive#isDestroyed\n */\nGroundPrimitive.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n return destroyObject(this);\n};\n\n/**\n * Exposed for testing.\n *\n * @param {Context} context Rendering context\n * @returns {Boolean} Whether or not the current context supports materials on GroundPrimitives.\n * @private\n */\nGroundPrimitive._supportsMaterials = function (context) {\n return context.depthTexture;\n};\n\n/**\n * Checks if the given Scene supports materials on GroundPrimitives.\n * Materials on GroundPrimitives require support for the WEBGL_depth_texture extension.\n *\n * @param {Scene} scene The current scene.\n * @returns {Boolean} Whether or not the current scene supports materials on GroundPrimitives.\n */\nGroundPrimitive.supportsMaterials = function (scene) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scene\", scene);\n //>>includeEnd('debug');\n\n return GroundPrimitive._supportsMaterials(scene.frameState.context);\n};\nexport default GroundPrimitive;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Material from \"../Scene/Material.js\";\n\n/**\n * The interface for all {@link Property} objects that represent {@link Material} uniforms.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias MaterialProperty\n * @constructor\n * @abstract\n *\n * @see ColorMaterialProperty\n * @see CompositeMaterialProperty\n * @see GridMaterialProperty\n * @see ImageMaterialProperty\n * @see PolylineGlowMaterialProperty\n * @see PolylineOutlineMaterialProperty\n * @see StripeMaterialProperty\n */\nfunction MaterialProperty() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(MaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof MaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof MaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nMaterialProperty.prototype.getType = DeveloperError.throwInstantiationError;\n\n/**\n * Gets the value of the property at the provided time.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nMaterialProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMaterialProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\n/**\n * @private\n */\nMaterialProperty.getValue = function (time, materialProperty, material) {\n var type;\n\n if (defined(materialProperty)) {\n type = materialProperty.getType(time);\n if (defined(type)) {\n if (!defined(material) || material.type !== type) {\n material = Material.fromType(type);\n }\n materialProperty.getValue(time, material.uniforms);\n return material;\n }\n }\n\n if (!defined(material) || material.type !== Material.ColorType) {\n material = Material.fromType(Material.ColorType);\n }\n Color.clone(Color.WHITE, material.uniforms.color);\n\n return material;\n};\nexport default MaterialProperty;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * Defines the interface for a dynamic geometry updater. A DynamicGeometryUpdater\n * is responsible for handling visualization of a specific type of geometry\n * that needs to be recomputed based on simulation time.\n * This object is never used directly by client code, but is instead created by\n * {@link GeometryUpdater} implementations which contain dynamic geometry.\n *\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias DynamicGeometryUpdater\n * @constructor\n * @private\n * @abstract\n */\nfunction DynamicGeometryUpdater(\n geometryUpdater,\n primitives,\n orderedGroundPrimitives\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"geometryUpdater\", geometryUpdater);\n Check.defined(\"primitives\", primitives);\n Check.defined(\"orderedGroundPrimitives\", orderedGroundPrimitives);\n //>>includeEnd('debug');\n\n this._primitives = primitives;\n this._orderedGroundPrimitives = orderedGroundPrimitives;\n this._primitive = undefined;\n this._outlinePrimitive = undefined;\n this._geometryUpdater = geometryUpdater;\n this._options = geometryUpdater._options;\n this._entity = geometryUpdater._entity;\n this._material = undefined;\n}\n\nDynamicGeometryUpdater.prototype._isHidden = function (entity, geometry, time) {\n return (\n !entity.isShowing ||\n !entity.isAvailable(time) ||\n !Property.getValueOrDefault(geometry.show, time, true)\n );\n};\n\nDynamicGeometryUpdater.prototype._setOptions =\n DeveloperError.throwInstantiationError;\n\n/**\n * Updates the geometry to the specified time.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @param {JulianDate} time The current time.\n */\nDynamicGeometryUpdater.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var geometryUpdater = this._geometryUpdater;\n var onTerrain = geometryUpdater._onTerrain;\n\n var primitives = this._primitives;\n var orderedGroundPrimitives = this._orderedGroundPrimitives;\n if (onTerrain) {\n orderedGroundPrimitives.remove(this._primitive);\n } else {\n primitives.removeAndDestroy(this._primitive);\n primitives.removeAndDestroy(this._outlinePrimitive);\n this._outlinePrimitive = undefined;\n }\n this._primitive = undefined;\n\n var entity = this._entity;\n var geometry = entity[this._geometryUpdater._geometryPropertyName];\n this._setOptions(entity, geometry, time);\n if (this._isHidden(entity, geometry, time)) {\n return;\n }\n\n var shadows = this._geometryUpdater.shadowsProperty.getValue(time);\n var options = this._options;\n if (!defined(geometry.fill) || geometry.fill.getValue(time)) {\n var fillMaterialProperty = geometryUpdater.fillMaterialProperty;\n var isColorAppearance =\n fillMaterialProperty instanceof ColorMaterialProperty;\n var appearance;\n var closed = geometryUpdater._getIsClosed(options);\n if (isColorAppearance) {\n appearance = new PerInstanceColorAppearance({\n closed: closed,\n flat:\n onTerrain && !geometryUpdater._supportsMaterialsforEntitiesOnTerrain,\n });\n } else {\n var material = MaterialProperty.getValue(\n time,\n fillMaterialProperty,\n this._material\n );\n this._material = material;\n appearance = new MaterialAppearance({\n material: material,\n translucent: material.isTranslucent(),\n closed: closed,\n });\n }\n\n if (onTerrain) {\n options.vertexFormat = PerInstanceColorAppearance.VERTEX_FORMAT;\n this._primitive = orderedGroundPrimitives.add(\n new GroundPrimitive({\n geometryInstances: this._geometryUpdater.createFillGeometryInstance(\n time\n ),\n appearance: appearance,\n asynchronous: false,\n shadows: shadows,\n classificationType: this._geometryUpdater.classificationTypeProperty.getValue(\n time\n ),\n }),\n Property.getValueOrUndefined(this._geometryUpdater.zIndex, time)\n );\n } else {\n options.vertexFormat = appearance.vertexFormat;\n\n var fillInstance = this._geometryUpdater.createFillGeometryInstance(time);\n\n if (isColorAppearance) {\n appearance.translucent = fillInstance.attributes.color.value[3] !== 255;\n }\n\n this._primitive = primitives.add(\n new Primitive({\n geometryInstances: fillInstance,\n appearance: appearance,\n asynchronous: false,\n shadows: shadows,\n })\n );\n }\n }\n\n if (\n !onTerrain &&\n defined(geometry.outline) &&\n geometry.outline.getValue(time)\n ) {\n var outlineInstance = this._geometryUpdater.createOutlineGeometryInstance(\n time\n );\n var outlineWidth = Property.getValueOrDefault(\n geometry.outlineWidth,\n time,\n 1.0\n );\n\n this._outlinePrimitive = primitives.add(\n new Primitive({\n geometryInstances: outlineInstance,\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: outlineInstance.attributes.color.value[3] !== 255,\n renderState: {\n lineWidth: geometryUpdater._scene.clampLineWidth(outlineWidth),\n },\n }),\n asynchronous: false,\n shadows: shadows,\n })\n );\n }\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n * @function\n *\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nDynamicGeometryUpdater.prototype.getBoundingSphere = function (result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n var entity = this._entity;\n var primitive = this._primitive;\n var outlinePrimitive = this._outlinePrimitive;\n\n var attributes;\n\n //Outline and Fill geometries have the same bounding sphere, so just use whichever one is defined and ready\n if (defined(primitive) && primitive.show && primitive.ready) {\n attributes = primitive.getGeometryInstanceAttributes(entity);\n if (defined(attributes) && defined(attributes.boundingSphere)) {\n BoundingSphere.clone(attributes.boundingSphere, result);\n return BoundingSphereState.DONE;\n }\n }\n\n if (\n defined(outlinePrimitive) &&\n outlinePrimitive.show &&\n outlinePrimitive.ready\n ) {\n attributes = outlinePrimitive.getGeometryInstanceAttributes(entity);\n if (defined(attributes) && defined(attributes.boundingSphere)) {\n BoundingSphere.clone(attributes.boundingSphere, result);\n return BoundingSphereState.DONE;\n }\n }\n\n if (\n (defined(primitive) && !primitive.ready) ||\n (defined(outlinePrimitive) && !outlinePrimitive.ready)\n ) {\n return BoundingSphereState.PENDING;\n }\n\n return BoundingSphereState.FAILED;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nDynamicGeometryUpdater.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys and resources used by the object. Once an object is destroyed, it should not be used.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDynamicGeometryUpdater.prototype.destroy = function () {\n var primitives = this._primitives;\n var orderedGroundPrimitives = this._orderedGroundPrimitives;\n if (this._geometryUpdater._onTerrain) {\n orderedGroundPrimitives.remove(this._primitive);\n } else {\n primitives.removeAndDestroy(this._primitive);\n }\n primitives.removeAndDestroy(this._outlinePrimitive);\n destroyObject(this);\n};\nexport default DynamicGeometryUpdater;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void clipLineSegmentToNearPlane(\\n\\\n vec3 p0,\\n\\\n vec3 p1,\\n\\\n out vec4 positionWC,\\n\\\n out bool clipped,\\n\\\n out bool culledByNearPlane,\\n\\\n out vec4 clippedPositionEC)\\n\\\n{\\n\\\n culledByNearPlane = false;\\n\\\n clipped = false;\\n\\\n\\n\\\n vec3 p0ToP1 = p1 - p0;\\n\\\n float magnitude = length(p0ToP1);\\n\\\n vec3 direction = normalize(p0ToP1);\\n\\\n\\n\\\n // Distance that p0 is behind the near plane. Negative means p0 is\\n\\\n // in front of the near plane.\\n\\\n float endPoint0Distance = czm_currentFrustum.x + p0.z;\\n\\\n\\n\\\n // Camera looks down -Z.\\n\\\n // When moving a point along +Z: LESS VISIBLE\\n\\\n // * Points in front of the camera move closer to the camera.\\n\\\n // * Points behind the camrea move farther away from the camera.\\n\\\n // When moving a point along -Z: MORE VISIBLE\\n\\\n // * Points in front of the camera move farther away from the camera.\\n\\\n // * Points behind the camera move closer to the camera.\\n\\\n\\n\\\n // Positive denominator: -Z, becoming more visible\\n\\\n // Negative denominator: +Z, becoming less visible\\n\\\n // Nearly zero: parallel to near plane\\n\\\n float denominator = -direction.z;\\n\\\n\\n\\\n if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)\\n\\\n {\\n\\\n // p0 is behind the near plane and the line to p1 is nearly parallel to\\n\\\n // the near plane, so cull the segment completely.\\n\\\n culledByNearPlane = true;\\n\\\n }\\n\\\n else if (endPoint0Distance > 0.0)\\n\\\n {\\n\\\n // p0 is behind the near plane, and the line to p1 is moving distinctly\\n\\\n // toward or away from it.\\n\\\n\\n\\\n // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction)\\n\\\n float t = endPoint0Distance / denominator;\\n\\\n if (t < 0.0 || t > magnitude)\\n\\\n {\\n\\\n // Near plane intersection is not between the two points.\\n\\\n // We already confirmed p0 is behind the naer plane, so now\\n\\\n // we know the entire segment is behind it.\\n\\\n culledByNearPlane = true;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n // Segment crosses the near plane, update p0 to lie exactly on it.\\n\\\n p0 = p0 + t * direction;\\n\\\n\\n\\\n // Numerical noise might put us a bit on the wrong side of the near plane.\\n\\\n // Don't let that happen.\\n\\\n p0.z = min(p0.z, -czm_currentFrustum.x);\\n\\\n\\n\\\n clipped = true;\\n\\\n }\\n\\\n }\\n\\\n\\n\\\n clippedPositionEC = vec4(p0, 1.0);\\n\\\n positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);\\n\\\n}\\n\\\n\\n\\\nvec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)\\n\\\n{\\n\\\n // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC.\\n\\\n\\n\\\n#ifdef POLYLINE_DASH\\n\\\n // Compute the window coordinates of the points.\\n\\\n vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);\\n\\\n vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);\\n\\\n vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);\\n\\\n\\n\\\n // Determine the relative screen space direction of the line.\\n\\\n vec2 lineDir;\\n\\\n if (usePrevious) {\\n\\\n lineDir = normalize(positionWindow.xy - previousWindow.xy);\\n\\\n }\\n\\\n else {\\n\\\n lineDir = normalize(nextWindow.xy - positionWindow.xy);\\n\\\n }\\n\\\n angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0)\\n\\\n\\n\\\n // Quantize the angle so it doesn't change rapidly between segments.\\n\\\n angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;\\n\\\n#endif\\n\\\n\\n\\\n vec4 clippedPrevWC, clippedPrevEC;\\n\\\n bool prevSegmentClipped, prevSegmentCulled;\\n\\\n clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);\\n\\\n\\n\\\n vec4 clippedNextWC, clippedNextEC;\\n\\\n bool nextSegmentClipped, nextSegmentCulled;\\n\\\n clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);\\n\\\n\\n\\\n bool segmentClipped, segmentCulled;\\n\\\n vec4 clippedPositionWC, clippedPositionEC;\\n\\\n clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);\\n\\\n\\n\\\n if (segmentCulled)\\n\\\n {\\n\\\n return vec4(0.0, 0.0, 0.0, 1.0);\\n\\\n }\\n\\\n\\n\\\n vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);\\n\\\n vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);\\n\\\n\\n\\\n // If a segment was culled, we can't use the corresponding direction\\n\\\n // computed above. We should never see both of these be true without\\n\\\n // `segmentCulled` above also being true.\\n\\\n if (prevSegmentCulled)\\n\\\n {\\n\\\n directionToPrevWC = -directionToNextWC;\\n\\\n }\\n\\\n else if (nextSegmentCulled)\\n\\\n {\\n\\\n directionToNextWC = -directionToPrevWC;\\n\\\n }\\n\\\n\\n\\\n vec2 thisSegmentForwardWC, otherSegmentForwardWC;\\n\\\n if (usePrevious)\\n\\\n {\\n\\\n thisSegmentForwardWC = -directionToPrevWC;\\n\\\n otherSegmentForwardWC = directionToNextWC;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n thisSegmentForwardWC = directionToNextWC;\\n\\\n otherSegmentForwardWC = -directionToPrevWC;\\n\\\n }\\n\\\n\\n\\\n vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);\\n\\\n\\n\\\n vec2 leftWC = thisSegmentLeftWC;\\n\\\n float expandWidth = width * 0.5;\\n\\\n\\n\\\n // When lines are split at the anti-meridian, the position may be at the\\n\\\n // same location as the next or previous position, and we need to handle\\n\\\n // that to avoid producing NaNs.\\n\\\n if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))\\n\\\n {\\n\\\n vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);\\n\\\n\\n\\\n vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;\\n\\\n float leftSumLength = length(leftSumWC);\\n\\\n leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);\\n\\\n\\n\\\n // The sine of the angle between the two vectors is given by the formula\\n\\\n // |a x b| = |a||b|sin(theta)\\n\\\n // which is\\n\\\n // float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0)));\\n\\\n // Because the z components of both vectors are zero, the x and y coordinate will be zero.\\n\\\n // Therefore, the sine of the angle is just the z component of the cross product.\\n\\\n vec2 u = -thisSegmentForwardWC;\\n\\\n vec2 v = leftWC;\\n\\\n float sinAngle = abs(u.x * v.y - u.y * v.x);\\n\\\n expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);\\n\\\n }\\n\\\n\\n\\\n vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;\\n\\\n return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;\\n\\\n}\\n\\\n\\n\\\nvec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)\\n\\\n{\\n\\\n vec4 positionEC = czm_modelViewRelativeToEye * position;\\n\\\n vec4 prevEC = czm_modelViewRelativeToEye * previous;\\n\\\n vec4 nextEC = czm_modelViewRelativeToEye * next;\\n\\\n return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PerInstanceFlatColorAppearanceFS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js\";\nimport PolylineColorAppearanceVS from \"../Shaders/Appearances/PolylineColorAppearanceVS.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport Appearance from \"./Appearance.js\";\n\nvar defaultVertexShaderSource =\n PolylineCommon + \"\\n\" + PolylineColorAppearanceVS;\nvar defaultFragmentShaderSource = PerInstanceFlatColorAppearanceFS;\n\nif (!FeatureDetection.isInternetExplorer()) {\n defaultVertexShaderSource =\n \"#define CLIP_POLYLINE \\n\" + defaultVertexShaderSource;\n}\n\n/**\n * An appearance for {@link GeometryInstance} instances with color attributes and\n * {@link PolylineGeometry} or {@link GroundPolylineGeometry}.\n * This allows several geometry instances, each with a different color, to\n * be drawn with the same {@link Primitive}.\n *\n * @alias PolylineColorAppearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PolylineColorAppearance#renderState} has alpha blending enabled.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @example\n * // A solid white line segment\n * var primitive = new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : new Cesium.PolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 5.0, 0.0\n * ]),\n * width : 10.0,\n * vertexFormat : Cesium.PolylineColorAppearance.VERTEX_FORMAT\n * }),\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0))\n * }\n * }),\n * appearance : new Cesium.PolylineColorAppearance({\n * translucent : false\n * })\n * });\n */\nfunction PolylineColorAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var translucent = defaultValue(options.translucent, true);\n var closed = false;\n var vertexFormat = PolylineColorAppearance.VERTEX_FORMAT;\n\n /**\n * This property is part of the {@link Appearance} interface, but is not\n * used by {@link PolylineColorAppearance} since a fully custom fragment shader is used.\n *\n * @type Material\n *\n * @default undefined\n */\n this.material = undefined;\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent so\n * {@link PolylineColorAppearance#renderState} has alpha blending enabled.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = translucent;\n\n this._vertexShaderSource = defaultValue(\n options.vertexShaderSource,\n defaultVertexShaderSource\n );\n this._fragmentShaderSource = defaultValue(\n options.fragmentShaderSource,\n defaultFragmentShaderSource\n );\n this._renderState = Appearance.getDefaultRenderState(\n translucent,\n closed,\n options.renderState\n );\n this._closed = closed;\n\n // Non-derived members\n\n this._vertexFormat = vertexFormat;\n}\n\nObject.defineProperties(PolylineColorAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof PolylineColorAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader.\n *\n * @memberof PolylineColorAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n * <p>\n * The render state can be explicitly defined when constructing a {@link PolylineColorAppearance}\n * instance, or it is set implicitly via {@link PolylineColorAppearance#translucent}.\n * </p>\n *\n * @memberof PolylineColorAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed so\n * {@link PolylineColorAppearance#renderState} has backface culling enabled.\n * This is always <code>false</code> for <code>PolylineColorAppearance</code>.\n *\n * @memberof PolylineColorAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The {@link VertexFormat} that this appearance instance is compatible with.\n * A geometry can have more vertex attributes and still be compatible - at a\n * potential performance cost - but it can't have less.\n *\n * @memberof PolylineColorAppearance.prototype\n *\n * @type VertexFormat\n * @readonly\n *\n * @default {@link PolylineColorAppearance.VERTEX_FORMAT}\n */\n vertexFormat: {\n get: function () {\n return this._vertexFormat;\n },\n },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PolylineColorAppearance} instances\n * are compatible with. This requires only a <code>position</code> attribute.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPolylineColorAppearance.VERTEX_FORMAT = VertexFormat.POSITION_ONLY;\n\n/**\n * Procedurally creates the full GLSL fragment shader source.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nPolylineColorAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PolylineColorAppearance#translucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nPolylineColorAppearance.prototype.isTranslucent =\n Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nPolylineColorAppearance.prototype.getRenderState =\n Appearance.prototype.getRenderState;\nexport default PolylineColorAppearance;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n czm_materialInput materialInput;\\n\\\n\\n\\\n vec2 st = v_st;\\n\\\n st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);\\n\\\n\\n\\\n materialInput.s = st.s;\\n\\\n materialInput.st = st;\\n\\\n materialInput.str = vec3(st, 0.0);\\n\\\n\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#ifdef VECTOR_TILE\\n\\\n gl_FragColor *= u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\n czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PolylineMaterialAppearanceVS from \"../Shaders/Appearances/PolylineMaterialAppearanceVS.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport PolylineFS from \"../Shaders/PolylineFS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\nvar defaultVertexShaderSource =\n PolylineCommon + \"\\n\" + PolylineMaterialAppearanceVS;\nvar defaultFragmentShaderSource = PolylineFS;\n\nif (!FeatureDetection.isInternetExplorer()) {\n defaultVertexShaderSource =\n \"#define CLIP_POLYLINE \\n\" + defaultVertexShaderSource;\n}\n\n/**\n * An appearance for {@link PolylineGeometry} that supports shading with materials.\n *\n * @alias PolylineMaterialAppearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PolylineMaterialAppearance#renderState} has alpha blending enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n *\n * @example\n * var primitive = new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : new Cesium.PolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 5.0, 0.0\n * ]),\n * width : 10.0,\n * vertexFormat : Cesium.PolylineMaterialAppearance.VERTEX_FORMAT\n * })\n * }),\n * appearance : new Cesium.PolylineMaterialAppearance({\n * material : Cesium.Material.fromType('Color')\n * })\n * });\n */\nfunction PolylineMaterialAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var translucent = defaultValue(options.translucent, true);\n var closed = false;\n var vertexFormat = PolylineMaterialAppearance.VERTEX_FORMAT;\n\n /**\n * The material used to determine the fragment color. Unlike other {@link PolylineMaterialAppearance}\n * properties, this is not read-only, so an appearance's material can change on the fly.\n *\n * @type Material\n *\n * @default {@link Material.ColorType}\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = defined(options.material)\n ? options.material\n : Material.fromType(Material.ColorType);\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent so\n * {@link PolylineMaterialAppearance#renderState} has alpha blending enabled.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = translucent;\n\n this._vertexShaderSource = defaultValue(\n options.vertexShaderSource,\n defaultVertexShaderSource\n );\n this._fragmentShaderSource = defaultValue(\n options.fragmentShaderSource,\n defaultFragmentShaderSource\n );\n this._renderState = Appearance.getDefaultRenderState(\n translucent,\n closed,\n options.renderState\n );\n this._closed = closed;\n\n // Non-derived members\n\n this._vertexFormat = vertexFormat;\n}\n\nObject.defineProperties(PolylineMaterialAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof PolylineMaterialAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n var vs = this._vertexShaderSource;\n if (\n this.material.shaderSource.search(\n /varying\\s+float\\s+v_polylineAngle;/g\n ) !== -1\n ) {\n vs = \"#define POLYLINE_DASH\\n\" + vs;\n }\n return vs;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader.\n *\n * @memberof PolylineMaterialAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n * <p>\n * The render state can be explicitly defined when constructing a {@link PolylineMaterialAppearance}\n * instance, or it is set implicitly via {@link PolylineMaterialAppearance#translucent}\n * and {@link PolylineMaterialAppearance#closed}.\n * </p>\n *\n * @memberof PolylineMaterialAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed so\n * {@link PolylineMaterialAppearance#renderState} has backface culling enabled.\n * This is always <code>false</code> for <code>PolylineMaterialAppearance</code>.\n *\n * @memberof PolylineMaterialAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The {@link VertexFormat} that this appearance instance is compatible with.\n * A geometry can have more vertex attributes and still be compatible - at a\n * potential performance cost - but it can't have less.\n *\n * @memberof PolylineMaterialAppearance.prototype\n *\n * @type VertexFormat\n * @readonly\n *\n * @default {@link PolylineMaterialAppearance.VERTEX_FORMAT}\n */\n vertexFormat: {\n get: function () {\n return this._vertexFormat;\n },\n },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PolylineMaterialAppearance} instances\n * are compatible with. This requires <code>position</code> and <code>st</code> attributes.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPolylineMaterialAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_ST;\n\n/**\n * Procedurally creates the full GLSL fragment shader source. For {@link PolylineMaterialAppearance},\n * this is derived from {@link PolylineMaterialAppearance#fragmentShaderSource} and {@link PolylineMaterialAppearance#material}.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nPolylineMaterialAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PolylineMaterialAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nPolylineMaterialAppearance.prototype.isTranslucent =\n Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nPolylineMaterialAppearance.prototype.getRenderState =\n Appearance.prototype.getRenderState;\nexport default PolylineMaterialAppearance;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryInstanceAttribute from \"../Core/GeometryInstanceAttribute.js\";\nimport GroundPolylineGeometry from \"../Core/GroundPolylineGeometry.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport PolylineShadowVolumeFS from \"../Shaders/PolylineShadowVolumeFS.js\";\nimport PolylineShadowVolumeMorphFS from \"../Shaders/PolylineShadowVolumeMorphFS.js\";\nimport PolylineShadowVolumeMorphVS from \"../Shaders/PolylineShadowVolumeMorphVS.js\";\nimport PolylineShadowVolumeVS from \"../Shaders/PolylineShadowVolumeVS.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport CullFace from \"./CullFace.js\";\nimport PolylineColorAppearance from \"./PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"./PolylineMaterialAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * A GroundPolylinePrimitive represents a polyline draped over the terrain or 3D Tiles in the {@link Scene}.\n * <p>\n * Only to be used with GeometryInstances containing {@link GroundPolylineGeometry}.\n * </p>\n *\n * @alias GroundPolylinePrimitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] GeometryInstances containing GroundPolylineGeometry\n * @param {Appearance} [options.appearance] The Appearance used to render the polyline. Defaults to a white color {@link Material} on a {@link PolylineMaterialAppearance}.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {Boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n * @param {Boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on creation to have effect.\n *\n * @example\n * // 1. Draw a polyline on terrain with a basic color material\n *\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.GroundPolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -112.1340164450331, 36.05494287836128,\n * -112.08821010582645, 36.097804071380715\n * ]),\n * width : 4.0\n * }),\n * id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n *\n * scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({\n * geometryInstances : instance,\n * appearance : new Cesium.PolylineMaterialAppearance()\n * }));\n *\n * // 2. Draw a looped polyline on terrain with per-instance color and a distance display condition.\n * // Distance display conditions for polylines on terrain are based on an approximate terrain height\n * // instead of true terrain height.\n *\n * var instance = new Cesium.GeometryInstance({\n * geometry : new Cesium.GroundPolylineGeometry({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -112.1340164450331, 36.05494287836128,\n * -112.08821010582645, 36.097804071380715,\n * -112.13296079730024, 36.168769146801104\n * ]),\n * loop : true,\n * width : 4.0\n * }),\n * attributes : {\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('green').withAlpha(0.7)),\n * distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(1000, 30000)\n * },\n * id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n *\n * scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({\n * geometryInstances : instance,\n * appearance : new Cesium.PolylineColorAppearance()\n * }));\n */\nfunction GroundPolylinePrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The geometry instances rendered with this primitive. This may\n * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n * is <code>true</code> when the primitive is constructed.\n * <p>\n * Changing this property after the primitive is rendered has no effect.\n * </p>\n *\n * @readonly\n * @type {Array|GeometryInstance}\n *\n * @default undefined\n */\n this.geometryInstances = options.geometryInstances;\n this._hasPerInstanceColors = true;\n\n var appearance = options.appearance;\n if (!defined(appearance)) {\n appearance = new PolylineMaterialAppearance();\n }\n /**\n * The {@link Appearance} used to shade this primitive. Each geometry\n * instance is shaded with the same appearance. Some appearances, like\n * {@link PolylineColorAppearance} allow giving each instance unique\n * properties.\n *\n * @type Appearance\n *\n * @default undefined\n */\n this.appearance = appearance;\n\n /**\n * Determines if the primitive will be shown. This affects all geometry\n * instances in the primitive.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * Determines whether terrain, 3D Tiles or both will be classified.\n *\n * @type {ClassificationType}\n *\n * @default ClassificationType.BOTH\n */\n this.classificationType = defaultValue(\n options.classificationType,\n ClassificationType.BOTH\n );\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n // Shadow volume is shown by removing a discard in the shader, so this isn't toggleable.\n this._debugShowShadowVolume = defaultValue(\n options.debugShowShadowVolume,\n false\n );\n\n this._primitiveOptions = {\n geometryInstances: undefined,\n appearance: undefined,\n vertexCacheOptimize: false,\n interleave: defaultValue(options.interleave, false),\n releaseGeometryInstances: defaultValue(\n options.releaseGeometryInstances,\n true\n ),\n allowPicking: defaultValue(options.allowPicking, true),\n asynchronous: defaultValue(options.asynchronous, true),\n compressVertices: false,\n _createShaderProgramFunction: undefined,\n _createCommandsFunction: undefined,\n _updateAndQueueCommandsFunction: undefined,\n };\n\n // Used when inserting in an OrderedPrimitiveCollection\n this._zIndex = undefined;\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._primitive = undefined;\n\n this._sp = undefined;\n this._sp2D = undefined;\n this._spMorph = undefined;\n\n this._renderState = getRenderState(false);\n this._renderState3DTiles = getRenderState(true);\n\n this._renderStateMorph = RenderState.fromCache({\n cull: {\n enabled: true,\n face: CullFace.FRONT, // Geometry is \"inverted,\" so cull front when materials on volume instead of on terrain (morph)\n },\n depthTest: {\n enabled: true,\n },\n blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n depthMask: false,\n });\n}\n\nObject.defineProperties(GroundPolylinePrimitive.prototype, {\n /**\n * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n interleave: {\n get: function () {\n return this._primitiveOptions.interleave;\n },\n },\n\n /**\n * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n releaseGeometryInstances: {\n get: function () {\n return this._primitiveOptions.releaseGeometryInstances;\n },\n },\n\n /**\n * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n allowPicking: {\n get: function () {\n return this._primitiveOptions.allowPicking;\n },\n },\n\n /**\n * Determines if the geometry instances will be created and batched on a web worker.\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n asynchronous: {\n get: function () {\n return this._primitiveOptions.asynchronous;\n },\n },\n\n /**\n * Determines if the primitive is complete and ready to render. If this property is\n * true, the primitive will be rendered the next time that {@link GroundPolylinePrimitive#update}\n * is called.\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof GroundPolylinePrimitive.prototype\n * @type {Promise.<GroundPolylinePrimitive>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * If true, draws the shadow volume for each geometry in the primitive.\n * </p>\n *\n * @memberof GroundPolylinePrimitive.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n debugShowShadowVolume: {\n get: function () {\n return this._debugShowShadowVolume;\n },\n },\n});\n\n/**\n * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the\n * GroundPolylinePrimitive synchronously.\n *\n * @returns {Promise<void>} A promise that will resolve once the terrain heights have been loaded.\n */\nGroundPolylinePrimitive.initializeTerrainHeights = function () {\n return ApproximateTerrainHeights.initialize();\n};\n\nfunction createShaderProgram(groundPolylinePrimitive, frameState, appearance) {\n var context = frameState.context;\n var primitive = groundPolylinePrimitive._primitive;\n var attributeLocations = primitive._attributeLocations;\n\n var vs = primitive._batchTable.getVertexShaderCallback()(\n PolylineShadowVolumeVS\n );\n vs = Primitive._appendShowToShader(primitive, vs);\n vs = Primitive._appendDistanceDisplayConditionToShader(primitive, vs);\n vs = Primitive._modifyShaderPosition(\n groundPolylinePrimitive,\n vs,\n frameState.scene3DOnly\n );\n\n var vsMorph = primitive._batchTable.getVertexShaderCallback()(\n PolylineShadowVolumeMorphVS\n );\n vsMorph = Primitive._appendShowToShader(primitive, vsMorph);\n vsMorph = Primitive._appendDistanceDisplayConditionToShader(\n primitive,\n vsMorph\n );\n vsMorph = Primitive._modifyShaderPosition(\n groundPolylinePrimitive,\n vsMorph,\n frameState.scene3DOnly\n );\n\n // Access pick color from fragment shader.\n // Helps with varying budget.\n var fs = primitive._batchTable.getVertexShaderCallback()(\n PolylineShadowVolumeFS\n );\n\n var vsDefines = [\n \"GLOBE_MINIMUM_ALTITUDE \" +\n frameState.mapProjection.ellipsoid.minimumRadius.toFixed(1),\n ];\n var colorDefine = \"\";\n var materialShaderSource = \"\";\n if (defined(appearance.material)) {\n materialShaderSource = defined(appearance.material)\n ? appearance.material.shaderSource\n : \"\";\n\n // Check for use of v_width and v_polylineAngle in material shader\n // to determine whether these varyings should be active in the vertex shader.\n if (\n materialShaderSource.search(/varying\\s+float\\s+v_polylineAngle;/g) !== -1\n ) {\n vsDefines.push(\"ANGLE_VARYING\");\n }\n if (materialShaderSource.search(/varying\\s+float\\s+v_width;/g) !== -1) {\n vsDefines.push(\"WIDTH_VARYING\");\n }\n } else {\n colorDefine = \"PER_INSTANCE_COLOR\";\n }\n\n vsDefines.push(colorDefine);\n var fsDefines = groundPolylinePrimitive.debugShowShadowVolume\n ? [\"DEBUG_SHOW_VOLUME\", colorDefine]\n : [colorDefine];\n\n var vsColor3D = new ShaderSource({\n defines: vsDefines,\n sources: [vs],\n });\n var fsColor3D = new ShaderSource({\n defines: fsDefines,\n sources: [materialShaderSource, fs],\n });\n groundPolylinePrimitive._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: primitive._sp,\n vertexShaderSource: vsColor3D,\n fragmentShaderSource: fsColor3D,\n attributeLocations: attributeLocations,\n });\n\n // Derive 2D/CV\n var colorProgram2D = context.shaderCache.getDerivedShaderProgram(\n groundPolylinePrimitive._sp,\n \"2dColor\"\n );\n if (!defined(colorProgram2D)) {\n var vsColor2D = new ShaderSource({\n defines: vsDefines.concat([\"COLUMBUS_VIEW_2D\"]),\n sources: [vs],\n });\n colorProgram2D = context.shaderCache.createDerivedShaderProgram(\n groundPolylinePrimitive._sp,\n \"2dColor\",\n {\n context: context,\n shaderProgram: groundPolylinePrimitive._sp2D,\n vertexShaderSource: vsColor2D,\n fragmentShaderSource: fsColor3D,\n attributeLocations: attributeLocations,\n }\n );\n }\n groundPolylinePrimitive._sp2D = colorProgram2D;\n\n // Derive Morph\n var colorProgramMorph = context.shaderCache.getDerivedShaderProgram(\n groundPolylinePrimitive._sp,\n \"MorphColor\"\n );\n if (!defined(colorProgramMorph)) {\n var vsColorMorph = new ShaderSource({\n defines: vsDefines.concat([\n \"MAX_TERRAIN_HEIGHT \" +\n ApproximateTerrainHeights._defaultMaxTerrainHeight.toFixed(1),\n ]),\n sources: [vsMorph],\n });\n\n fs = primitive._batchTable.getVertexShaderCallback()(\n PolylineShadowVolumeMorphFS\n );\n var fsColorMorph = new ShaderSource({\n defines: fsDefines,\n sources: [materialShaderSource, fs],\n });\n colorProgramMorph = context.shaderCache.createDerivedShaderProgram(\n groundPolylinePrimitive._sp,\n \"MorphColor\",\n {\n context: context,\n shaderProgram: groundPolylinePrimitive._spMorph,\n vertexShaderSource: vsColorMorph,\n fragmentShaderSource: fsColorMorph,\n attributeLocations: attributeLocations,\n }\n );\n }\n groundPolylinePrimitive._spMorph = colorProgramMorph;\n}\n\nfunction getRenderState(mask3DTiles) {\n return RenderState.fromCache({\n cull: {\n enabled: true, // prevent double-draw. Geometry is \"inverted\" (reversed winding order) so we're drawing backfaces.\n },\n blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n depthMask: false,\n stencilTest: {\n enabled: mask3DTiles,\n frontFunction: StencilFunction.EQUAL,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: StencilFunction.EQUAL,\n backOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.KEEP,\n },\n reference: StencilConstants.CESIUM_3D_TILE_MASK,\n mask: StencilConstants.CESIUM_3D_TILE_MASK,\n },\n });\n}\n\nfunction createCommands(\n groundPolylinePrimitive,\n appearance,\n material,\n translucent,\n colorCommands,\n pickCommands\n) {\n var primitive = groundPolylinePrimitive._primitive;\n var length = primitive._va.length;\n colorCommands.length = length;\n pickCommands.length = length;\n\n var isPolylineColorAppearance = appearance instanceof PolylineColorAppearance;\n\n var materialUniforms = isPolylineColorAppearance ? {} : material._uniforms;\n var uniformMap = primitive._batchTable.getUniformMapCallback()(\n materialUniforms\n );\n\n for (var i = 0; i < length; i++) {\n var vertexArray = primitive._va[i];\n\n var command = colorCommands[i];\n if (!defined(command)) {\n command = colorCommands[i] = new DrawCommand({\n owner: groundPolylinePrimitive,\n primitiveType: primitive._primitiveType,\n });\n }\n\n command.vertexArray = vertexArray;\n command.renderState = groundPolylinePrimitive._renderState;\n command.shaderProgram = groundPolylinePrimitive._sp;\n command.uniformMap = uniformMap;\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n command.pickId = \"czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)\";\n\n var derivedTilesetCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.tileset\n );\n derivedTilesetCommand.renderState =\n groundPolylinePrimitive._renderState3DTiles;\n derivedTilesetCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n command.derivedCommands.tileset = derivedTilesetCommand;\n\n // derive for 2D\n var derived2DCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.color2D\n );\n derived2DCommand.shaderProgram = groundPolylinePrimitive._sp2D;\n command.derivedCommands.color2D = derived2DCommand;\n\n var derived2DTilesetCommand = DrawCommand.shallowClone(\n derivedTilesetCommand,\n derivedTilesetCommand.derivedCommands.color2D\n );\n derived2DTilesetCommand.shaderProgram = groundPolylinePrimitive._sp2D;\n derivedTilesetCommand.derivedCommands.color2D = derived2DTilesetCommand;\n\n // derive for Morph\n var derivedMorphCommand = DrawCommand.shallowClone(\n command,\n command.derivedCommands.colorMorph\n );\n derivedMorphCommand.renderState = groundPolylinePrimitive._renderStateMorph;\n derivedMorphCommand.shaderProgram = groundPolylinePrimitive._spMorph;\n derivedMorphCommand.pickId = \"czm_batchTable_pickColor(v_batchId)\";\n command.derivedCommands.colorMorph = derivedMorphCommand;\n }\n}\n\nfunction updateAndQueueCommand(\n groundPolylinePrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n) {\n // Use derived appearance command for morph and 2D\n if (frameState.mode === SceneMode.MORPHING) {\n command = command.derivedCommands.colorMorph;\n } else if (frameState.mode !== SceneMode.SCENE3D) {\n command = command.derivedCommands.color2D;\n }\n command.modelMatrix = modelMatrix;\n command.boundingVolume = boundingVolume;\n command.cull = cull;\n command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n groundPolylinePrimitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume\n) {\n var primitive = groundPolylinePrimitive._primitive;\n\n Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix); // Expected to be identity - GroundPrimitives don't support other model matrices\n\n var boundingSpheres;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingSpheres = primitive._boundingSphereWC;\n } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n boundingSpheres = primitive._boundingSphereCV;\n } else if (\n frameState.mode === SceneMode.SCENE2D &&\n defined(primitive._boundingSphere2D)\n ) {\n boundingSpheres = primitive._boundingSphere2D;\n } else if (defined(primitive._boundingSphereMorph)) {\n boundingSpheres = primitive._boundingSphereMorph;\n }\n\n var morphing = frameState.mode === SceneMode.MORPHING;\n var classificationType = groundPolylinePrimitive.classificationType;\n var queueTerrainCommands =\n classificationType !== ClassificationType.CESIUM_3D_TILE;\n var queue3DTilesCommands =\n classificationType !== ClassificationType.TERRAIN && !morphing;\n\n var command;\n var passes = frameState.passes;\n if (passes.render || (passes.pick && primitive.allowPicking)) {\n var colorLength = colorCommands.length;\n for (var j = 0; j < colorLength; ++j) {\n var boundingVolume = boundingSpheres[j];\n if (queueTerrainCommands) {\n command = colorCommands[j];\n updateAndQueueCommand(\n groundPolylinePrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n if (queue3DTilesCommands) {\n command = colorCommands[j].derivedCommands.tileset;\n updateAndQueueCommand(\n groundPolylinePrimitive,\n command,\n frameState,\n modelMatrix,\n cull,\n boundingVolume,\n debugShowBoundingVolume\n );\n }\n }\n }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} For synchronous GroundPolylinePrimitives, you must call GroundPolylinePrimitives.initializeTerrainHeights() and wait for the returned promise to resolve.\n * @exception {DeveloperError} All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.\n */\nGroundPolylinePrimitive.prototype.update = function (frameState) {\n if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n return;\n }\n\n if (!ApproximateTerrainHeights.initialized) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.asynchronous) {\n throw new DeveloperError(\n \"For synchronous GroundPolylinePrimitives, you must call GroundPolylinePrimitives.initializeTerrainHeights() and wait for the returned promise to resolve.\"\n );\n }\n //>>includeEnd('debug');\n\n GroundPolylinePrimitive.initializeTerrainHeights();\n return;\n }\n\n var i;\n\n var that = this;\n var primitiveOptions = this._primitiveOptions;\n if (!defined(this._primitive)) {\n var geometryInstances = Array.isArray(this.geometryInstances)\n ? this.geometryInstances\n : [this.geometryInstances];\n var geometryInstancesLength = geometryInstances.length;\n var groundInstances = new Array(geometryInstancesLength);\n\n var attributes;\n\n // Check if each instance has a color attribute.\n for (i = 0; i < geometryInstancesLength; ++i) {\n attributes = geometryInstances[i].attributes;\n if (!defined(attributes) || !defined(attributes.color)) {\n this._hasPerInstanceColors = false;\n break;\n }\n }\n\n for (i = 0; i < geometryInstancesLength; ++i) {\n var geometryInstance = geometryInstances[i];\n attributes = {};\n var instanceAttributes = geometryInstance.attributes;\n for (var attributeKey in instanceAttributes) {\n if (instanceAttributes.hasOwnProperty(attributeKey)) {\n attributes[attributeKey] = instanceAttributes[attributeKey];\n }\n }\n\n // Automatically create line width attribute if not already given\n if (!defined(attributes.width)) {\n attributes.width = new GeometryInstanceAttribute({\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 1.0,\n value: [geometryInstance.geometry.width],\n });\n }\n\n // Update each geometry for framestate.scene3DOnly = true and projection\n geometryInstance.geometry._scene3DOnly = frameState.scene3DOnly;\n GroundPolylineGeometry.setProjectionAndEllipsoid(\n geometryInstance.geometry,\n frameState.mapProjection\n );\n\n groundInstances[i] = new GeometryInstance({\n geometry: geometryInstance.geometry,\n attributes: attributes,\n id: geometryInstance.id,\n pickPrimitive: that,\n });\n }\n\n primitiveOptions.geometryInstances = groundInstances;\n primitiveOptions.appearance = this.appearance;\n\n primitiveOptions._createShaderProgramFunction = function (\n primitive,\n frameState,\n appearance\n ) {\n createShaderProgram(that, frameState, appearance);\n };\n primitiveOptions._createCommandsFunction = function (\n primitive,\n appearance,\n material,\n translucent,\n twoPasses,\n colorCommands,\n pickCommands\n ) {\n createCommands(\n that,\n appearance,\n material,\n translucent,\n colorCommands,\n pickCommands\n );\n };\n primitiveOptions._updateAndQueueCommandsFunction = function (\n primitive,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume,\n twoPasses\n ) {\n updateAndQueueCommands(\n that,\n frameState,\n colorCommands,\n pickCommands,\n modelMatrix,\n cull,\n debugShowBoundingVolume\n );\n };\n\n this._primitive = new Primitive(primitiveOptions);\n this._primitive.readyPromise.then(function (primitive) {\n that._ready = true;\n\n if (that.releaseGeometryInstances) {\n that.geometryInstances = undefined;\n }\n\n var error = primitive._error;\n if (!defined(error)) {\n that._readyPromise.resolve(that);\n } else {\n that._readyPromise.reject(error);\n }\n });\n }\n\n if (\n this.appearance instanceof PolylineColorAppearance &&\n !this._hasPerInstanceColors\n ) {\n throw new DeveloperError(\n \"All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.\"\n );\n }\n\n this._primitive.appearance = this.appearance;\n this._primitive.show = this.show;\n this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n this._primitive.update(frameState);\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {Object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * var attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nGroundPolylinePrimitive.prototype.getGeometryInstanceAttributes = function (\n id\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this._primitive)) {\n throw new DeveloperError(\n \"must call update before calling getGeometryInstanceAttributes\"\n );\n }\n //>>includeEnd('debug');\n return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Checks if the given Scene supports GroundPolylinePrimitives.\n * GroundPolylinePrimitives require support for the WEBGL_depth_texture extension.\n *\n * @param {Scene} scene The current scene.\n * @returns {Boolean} Whether or not the current scene supports GroundPolylinePrimitives.\n */\nGroundPolylinePrimitive.isSupported = function (scene) {\n return scene.frameState.context.depthTexture;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see GroundPolylinePrimitive#destroy\n */\nGroundPolylinePrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see GroundPolylinePrimitive#isDestroyed\n */\nGroundPolylinePrimitive.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n this._sp = this._sp && this._sp.destroy();\n\n // Derived programs, destroyed above if they existed.\n this._sp2D = undefined;\n this._spMorph = undefined;\n\n return destroyObject(this);\n};\nexport default GroundPolylinePrimitive;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\n\\n\\\n// In 2D and in 3D, texture coordinate normalization component signs encodes:\\n\\\n// * X sign - sidedness relative to right plane\\n\\\n// * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume\\n\\\n#ifndef COLUMBUS_VIEW_2D\\n\\\nattribute vec4 startHiAndForwardOffsetX;\\n\\\nattribute vec4 startLoAndForwardOffsetY;\\n\\\nattribute vec4 startNormalAndForwardOffsetZ;\\n\\\nattribute vec4 endNormalAndTextureCoordinateNormalizationX;\\n\\\nattribute vec4 rightNormalAndTextureCoordinateNormalizationY;\\n\\\n#else\\n\\\nattribute vec4 startHiLo2D;\\n\\\nattribute vec4 offsetAndRight2D;\\n\\\nattribute vec4 startEndNormals2D;\\n\\\nattribute vec2 texcoordNormalization2D;\\n\\\n#endif\\n\\\n\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec4 v_startPlaneNormalEcAndHalfWidth;\\n\\\nvarying vec4 v_endPlaneNormalEcAndBatchId;\\n\\\nvarying vec4 v_rightPlaneEC;\\n\\\nvarying vec4 v_endEcAndStartEcX;\\n\\\nvarying vec4 v_texcoordNormalizationAndStartEcYZ;\\n\\\n\\n\\\n// For materials\\n\\\n#ifdef WIDTH_VARYING\\n\\\nvarying float v_width;\\n\\\n#endif\\n\\\n#ifdef ANGLE_VARYING\\n\\\nvarying float v_polylineAngle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz;\\n\\\n\\n\\\n vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy);\\n\\\n vec3 ecEnd = forwardDirectionEC + ecStart;\\n\\\n forwardDirectionEC = normalize(forwardDirectionEC);\\n\\\n\\n\\\n // Right plane\\n\\\n v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\\n\\\n v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n // start plane\\n\\\n vec4 startPlaneEC;\\n\\\n startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);\\n\\\n startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n // end plane\\n\\\n vec4 endPlaneEC;\\n\\\n endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);\\n\\\n endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\\n\\\n\\n\\\n v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x);\\n\\\n v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y;\\n\\\n\\n\\\n#else // COLUMBUS_VIEW_2D\\n\\\n vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz;\\n\\\n vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w);\\n\\\n vec3 ecEnd = ecStart + offset;\\n\\\n\\n\\\n vec3 forwardDirectionEC = normalize(offset);\\n\\\n\\n\\\n // start plane\\n\\\n vec4 startPlaneEC;\\n\\\n startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\\n\\\n startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n // end plane\\n\\\n vec4 endPlaneEC;\\n\\\n endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\\n\\\n endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\\n\\\n\\n\\\n // Right plane\\n\\\n v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\\n\\\n v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w;\\n\\\n\\n\\\n#endif // COLUMBUS_VIEW_2D\\n\\\n\\n\\\n v_endEcAndStartEcX.xyz = ecEnd;\\n\\\n v_endEcAndStartEcX.w = ecStart.x;\\n\\\n v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n v_color = czm_batchTable_color(batchId);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n // Compute a normal along which to \\\"push\\\" the position out, extending the miter depending on view distance.\\n\\\n // Position has already been \\\"pushed\\\" by unit length along miter normal, and miter normals are encoded in the planes.\\n\\\n // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\\n\\\n vec4 positionRelativeToEye = czm_computePosition();\\n\\\n\\n\\\n // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition\\n\\\n float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz));\\n\\\n float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz));\\n\\\n vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);\\n\\\n vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\\n\\\n\\n\\\n // Extrude bottom vertices downward for far view distances, like for GroundPrimitives\\n\\\n upOrDown = cross(forwardDirectionEC, normalEC);\\n\\\n upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown;\\n\\\n upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;\\n\\\n upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown;\\n\\\n positionEC.xyz += upOrDown;\\n\\\n\\n\\\n v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));\\n\\\n\\n\\\n // Determine distance along normalEC to push for a volume of appropriate width.\\n\\\n // Make volumes about double pixel width for a conservative fit - in practice the\\n\\\n // extra cost here is minimal compared to the loose volume heights.\\n\\\n //\\n\\\n // N = normalEC (guaranteed \\\"right-facing\\\")\\n\\\n // R = rightEC\\n\\\n // p = angle between N and R\\n\\\n // w = distance to push along R if R == N\\n\\\n // d = distance to push along N\\n\\\n //\\n\\\n // N R\\n\\\n // { \\ p| } * cos(p) = dot(N, R) = w / d\\n\\\n // d\\ \\ | |w * d = w / dot(N, R)\\n\\\n // { \\| }\\n\\\n // o---------- polyline segment ---->\\n\\\n //\\n\\\n float width = czm_batchTable_width(batchId);\\n\\\n#ifdef WIDTH_VARYING\\n\\\n v_width = width;\\n\\\n#endif\\n\\\n\\n\\\n v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;\\n\\\n v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;\\n\\\n\\n\\\n v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz;\\n\\\n v_endPlaneNormalEcAndBatchId.w = batchId;\\n\\\n\\n\\\n width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R\\n\\\n width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N\\n\\\n\\n\\\n // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n normalEC *= sign(texcoordNormalization2D.x);\\n\\\n#else\\n\\\n normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n#endif\\n\\\n\\n\\\n positionEC.xyz += width * normalEC;\\n\\\n gl_Position = czm_depthClamp(czm_projection * positionEC);\\n\\\n\\n\\\n#ifdef ANGLE_VARYING\\n\\\n // Approximate relative screen space direction of the line.\\n\\\n vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));\\n\\\n approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\\n\\\n v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\n\\n\\\nattribute vec4 startHiAndForwardOffsetX;\\n\\\nattribute vec4 startLoAndForwardOffsetY;\\n\\\nattribute vec4 startNormalAndForwardOffsetZ;\\n\\\nattribute vec4 endNormalAndTextureCoordinateNormalizationX;\\n\\\nattribute vec4 rightNormalAndTextureCoordinateNormalizationY;\\n\\\nattribute vec4 startHiLo2D;\\n\\\nattribute vec4 offsetAndRight2D;\\n\\\nattribute vec4 startEndNormals2D;\\n\\\nattribute vec2 texcoordNormalization2D;\\n\\\n\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_forwardDirectionEC;\\n\\\nvarying vec3 v_texcoordNormalizationAndHalfWidth;\\n\\\nvarying float v_batchId;\\n\\\n\\n\\\n// For materials\\n\\\n#ifdef WIDTH_VARYING\\n\\\nvarying float v_width;\\n\\\n#endif\\n\\\n#ifdef ANGLE_VARYING\\n\\\nvarying float v_polylineAngle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#else\\n\\\nvarying vec2 v_alignedPlaneDistances;\\n\\\nvarying float v_texcoordT;\\n\\\n#endif\\n\\\n\\n\\\n// Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume.\\n\\\n// Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient.\\n\\\nvoid main()\\n\\\n{\\n\\\n v_batchId = batchId;\\n\\\n\\n\\\n // Start position\\n\\\n vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw));\\n\\\n vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz);\\n\\\n vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\\n\\\n vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\\n\\\n vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\\n\\\n vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\\n\\\n\\n\\\n // Start plane\\n\\\n vec4 startPlane2D;\\n\\\n vec4 startPlane3D;\\n\\\n startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);\\n\\\n startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\\n\\\n startPlane2D.w = -dot(startPlane2D.xyz, posEc2D);\\n\\\n startPlane3D.w = -dot(startPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n // Right plane\\n\\\n vec4 rightPlane2D;\\n\\\n vec4 rightPlane3D;\\n\\\n rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\\n\\\n rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\\n\\\n rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D);\\n\\\n rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n // End position\\n\\\n posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0);\\n\\\n posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0);\\n\\\n posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\\n\\\n posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\\n\\\n posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\\n\\\n vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\\n\\\n vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w));\\n\\\n vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy));\\n\\\n\\n\\\n // End plane\\n\\\n vec4 endPlane2D;\\n\\\n vec4 endPlane3D;\\n\\\n endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);\\n\\\n endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\\n\\\n endPlane2D.w = -dot(endPlane2D.xyz, posEc2D);\\n\\\n endPlane3D.w = -dot(endPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n // Forward direction\\n\\\n v_forwardDirectionEC = normalize(endEC - startEC);\\n\\\n\\n\\\n vec2 cleanTexcoordNormalization2D;\\n\\\n cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x);\\n\\\n cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y));\\n\\\n vec2 cleanTexcoordNormalization3D;\\n\\\n cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w;\\n\\\n cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y));\\n\\\n\\n\\\n v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime);\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n v_color = czm_batchTable_color(batchId);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n // For computing texture coordinates\\n\\\n\\n\\\n v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC);\\n\\\n v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n#ifdef WIDTH_VARYING\\n\\\n float width = czm_batchTable_width(batchId);\\n\\\n float halfWidth = width * 0.5;\\n\\\n v_width = width;\\n\\\n v_texcoordNormalizationAndHalfWidth.z = halfWidth;\\n\\\n#else\\n\\\n float halfWidth = 0.5 * czm_batchTable_width(batchId);\\n\\\n v_texcoordNormalizationAndHalfWidth.z = halfWidth;\\n\\\n#endif\\n\\\n\\n\\\n // Compute a normal along which to \\\"push\\\" the position out, extending the miter depending on view distance.\\n\\\n // Position has already been \\\"pushed\\\" by unit length along miter normal, and miter normals are encoded in the planes.\\n\\\n // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\\n\\\n // Since this is morphing, compute both 3D and 2D positions and then blend.\\n\\\n\\n\\\n // ****** 3D ******\\n\\\n // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition\\n\\\n float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz));\\n\\\n float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz));\\n\\\n vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz);\\n\\\n vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\\n\\\n\\n\\\n // Nudge the top vertex upwards to prevent flickering\\n\\\n vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D));\\n\\\n geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0);\\n\\\n geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\\n\\\n positionEc3D.xyz += geodeticSurfaceNormal;\\n\\\n\\n\\\n // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n\\n\\\n // A \\\"perfect\\\" implementation would push along normals according to the angle against forward.\\n\\\n // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\\n\\\n positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\\n\\\n\\n\\\n // ****** 2D ******\\n\\\n // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition\\n\\\n absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz));\\n\\\n absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz));\\n\\\n planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz);\\n\\\n upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.\\n\\\n\\n\\\n // Nudge the top vertex upwards to prevent flickering\\n\\\n geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D));\\n\\\n geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0);\\n\\\n geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\\n\\\n positionEc2D.xyz += geodeticSurfaceNormal;\\n\\\n\\n\\\n // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n normalEC *= sign(texcoordNormalization2D.x);\\n\\\n#ifndef PER_INSTANCE_COLOR\\n\\\n // Use vertex's sidedness to compute its texture coordinate.\\n\\\n v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0);\\n\\\n#endif\\n\\\n\\n\\\n // A \\\"perfect\\\" implementation would push along normals according to the angle against forward.\\n\\\n // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\\n\\\n positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\\n\\\n\\n\\\n // Blend for actual position\\n\\\n gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime);\\n\\\n\\n\\\n#ifdef ANGLE_VARYING\\n\\\n // Approximate relative screen space direction of the line.\\n\\\n vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y));\\n\\\n approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\\n\\\n v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_EXT_frag_depth\\n\\\n#extension GL_EXT_frag_depth : enable\\n\\\n#endif\\n\\\n\\n\\\nvarying vec4 v_startPlaneNormalEcAndHalfWidth;\\n\\\nvarying vec4 v_endPlaneNormalEcAndBatchId;\\n\\\nvarying vec4 v_rightPlaneEC; // Technically can compute distance for this here\\n\\\nvarying vec4 v_endEcAndStartEcX;\\n\\\nvarying vec4 v_texcoordNormalizationAndStartEcYZ;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture2D(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));\\n\\\n vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);\\n\\\n\\n\\\n // Discard for sky\\n\\\n if (logDepthOrDepth == 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\\n\\\n return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n }\\n\\\n\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate);\\n\\\n // Check distance of the eye coordinate against the right-facing plane\\n\\\n float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);\\n\\\n\\n\\\n // Check eye coordinate against the mitering planes\\n\\\n float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz);\\n\\\n float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz);\\n\\\n\\n\\\n if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\\n\\\n return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n }\\n\\\n\\n\\\n // Check distance of the eye coordinate against start and end planes with normals in the right plane.\\n\\\n // For computing unskewed lengthwise texture coordinate.\\n\\\n // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking.\\n\\\n\\n\\\n // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more \\\"forward\\\"\\n\\\n vec3 alignedPlaneNormal;\\n\\\n\\n\\\n // start aligned plane\\n\\\n alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz);\\n\\\n alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\\n\\\n distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz);\\n\\\n\\n\\\n // end aligned plane\\n\\\n alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz);\\n\\\n alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\\n\\\n distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz);\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n gl_FragColor = czm_gammaCorrect(v_color);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n // Clamp - distance to aligned planes may be negative due to mitering,\\n\\\n // so fragment texture coordinate might be out-of-bounds.\\n\\\n float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0);\\n\\\n s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y;\\n\\\n float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth);\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n\\n\\\n materialInput.s = s;\\n\\\n materialInput.st = vec2(s, t);\\n\\\n materialInput.str = vec3(s, t, 0.0);\\n\\\n\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n gl_FragColor.rgb *= gl_FragColor.a;\\n\\\n\\n\\\n czm_writeDepthClamp();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_forwardDirectionEC;\\n\\\nvarying vec3 v_texcoordNormalizationAndHalfWidth;\\n\\\nvarying float v_batchId;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nvarying vec4 v_color;\\n\\\n#else\\n\\\nvarying vec2 v_alignedPlaneDistances;\\n\\\nvarying float v_texcoordT;\\n\\\n#endif\\n\\\n\\n\\\nfloat rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {\\n\\\n // We don't expect the ray to ever be parallel to the plane\\n\\\n return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec4 eyeCoordinate = gl_FragCoord;\\n\\\n eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n gl_FragColor = czm_gammaCorrect(v_color);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n // Use distances for planes aligned with segment to prevent skew in dashing\\n\\\n float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);\\n\\\n float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);\\n\\\n\\n\\\n // Clamp - distance to aligned planes may be negative due to mitering\\n\\\n distanceFromStart = max(0.0, distanceFromStart);\\n\\\n distanceFromEnd = max(0.0, distanceFromEnd);\\n\\\n\\n\\\n float s = distanceFromStart / (distanceFromStart + distanceFromEnd);\\n\\\n s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n\\n\\\n materialInput.s = s;\\n\\\n materialInput.st = vec2(s, v_texcoordT);\\n\\\n materialInput.str = vec3(s, v_texcoordT, 0.0);\\n\\\n\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n}\\n\\\n\";\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultRepeat = new Cartesian2(1, 1);\nvar defaultTransparent = false;\nvar defaultColor = Color.WHITE;\n\n/**\n * A {@link MaterialProperty} that maps to image {@link Material} uniforms.\n * @alias ImageMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|String|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} [options.image] A Property specifying the Image, URL, Canvas, or Video.\n * @param {Property|Cartesian2} [options.repeat=new Cartesian2(1.0, 1.0)] A {@link Cartesian2} Property specifying the number of times the image repeats in each direction.\n * @param {Property|Color} [options.color=Color.WHITE] The color applied to the image\n * @param {Property|Boolean} [options.transparent=false] Set to true when the image has transparency (for example, when a png has transparent sections)\n */\nfunction ImageMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._image = undefined;\n this._imageSubscription = undefined;\n this._repeat = undefined;\n this._repeatSubscription = undefined;\n this._color = undefined;\n this._colorSubscription = undefined;\n this._transparent = undefined;\n this._transparentSubscription = undefined;\n\n this.image = options.image;\n this.repeat = options.repeat;\n this.color = options.color;\n this.transparent = options.transparent;\n}\n\nObject.defineProperties(ImageMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof ImageMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._image) && Property.isConstant(this._repeat)\n );\n },\n },\n\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof ImageMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the Property specifying Image, URL, Canvas, or Video to use.\n * @memberof ImageMaterialProperty.prototype\n * @type {Property|undefined}\n */\n image: createPropertyDescriptor(\"image\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the number of times the image repeats in each direction.\n * @memberof ImageMaterialProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(1, 1)\n */\n repeat: createPropertyDescriptor(\"repeat\"),\n\n /**\n * Gets or sets the Color Property specifying the desired color applied to the image.\n * @memberof ImageMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the Boolean Property specifying whether the image has transparency\n * @memberof ImageMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n transparent: createPropertyDescriptor(\"transparent\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nImageMaterialProperty.prototype.getType = function (time) {\n return \"Image\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nImageMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n\n result.image = Property.getValueOrUndefined(this._image, time);\n result.repeat = Property.getValueOrClonedDefault(\n this._repeat,\n time,\n defaultRepeat,\n result.repeat\n );\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n defaultColor,\n result.color\n );\n if (Property.getValueOrDefault(this._transparent, time, defaultTransparent)) {\n result.color.alpha = Math.min(0.99, result.color.alpha);\n }\n\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nImageMaterialProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof ImageMaterialProperty &&\n Property.equals(this._image, other._image) &&\n Property.equals(this._repeat, other._repeat) &&\n Property.equals(this._color, other._color) &&\n Property.equals(this._transparent, other._transparent))\n );\n};\nexport default ImageMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport ImageMaterialProperty from \"./ImageMaterialProperty.js\";\n\nfunction createMaterialProperty(value) {\n if (value instanceof Color) {\n return new ColorMaterialProperty(value);\n }\n\n if (\n typeof value === \"string\" ||\n value instanceof Resource ||\n value instanceof HTMLCanvasElement ||\n value instanceof HTMLVideoElement\n ) {\n var result = new ImageMaterialProperty();\n result.image = value;\n return result;\n }\n\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\"Unable to infer material type: \" + value);\n //>>includeEnd('debug');\n}\n\n/**\n * @private\n */\nfunction createMaterialPropertyDescriptor(name, configurable) {\n return createPropertyDescriptor(name, configurable, createMaterialProperty);\n}\nexport default createMaterialPropertyDescriptor;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} BoxGraphics.ConstructorOptions\n *\n * Initialization options for the BoxGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the box.\n * @property {Property | Cartesian3} [dimensions] A {@link Cartesian3} Property specifying the length, width, and height of the box.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the box is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the box.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the box is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the box casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this box will be displayed.\n *\n */\n\n/**\n * Describes a box. The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias BoxGraphics\n * @constructor\n *\n * @param {BoxGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Box.html|Cesium Sandcastle Box Demo}\n */\nfunction BoxGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._dimensions = undefined;\n this._dimensionsSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(BoxGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof BoxGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the box.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets {@link Cartesian3} Property property specifying the length, width, and height of the box.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n */\n dimensions: createPropertyDescriptor(\"dimensions\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the box is filled with the provided material.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the material used to fill the box.\n * @memberof BoxGraphics.prototype\n * @type {MaterialProperty|undefined}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the box is outlined.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the box\n * casts or receives shadows from light sources.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this box will be displayed.\n * @memberof BoxGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {BoxGraphics} [result] The object onto which to store the result.\n * @returns {BoxGraphics} The modified result parameter or a new instance if one was not provided.\n */\nBoxGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new BoxGraphics(this);\n }\n result.show = this.show;\n result.dimensions = this.dimensions;\n result.heightReference = this.heightReference;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {BoxGraphics} source The object to be merged into this object.\n */\nBoxGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.dimensions = defaultValue(this.dimensions, source.dimensions);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default BoxGraphics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Transforms from \"../Core/Transforms.js\";\n\n/**\n * The interface for all {@link Property} objects that define a world\n * location as a {@link Cartesian3} with an associated {@link ReferenceFrame}.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias PositionProperty\n * @constructor\n * @abstract\n *\n * @see CompositePositionProperty\n * @see ConstantPositionProperty\n * @see SampledPositionProperty\n * @see TimeIntervalCollectionPositionProperty\n */\nfunction PositionProperty() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(PositionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof PositionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof PositionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the reference frame that the position is defined in.\n * @memberof PositionProperty.prototype\n * @type {ReferenceFrame}\n */\n referenceFrame: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionProperty.prototype.getValueInReferenceFrame =\n DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPositionProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\nvar scratchMatrix3 = new Matrix3();\n\n/**\n * @private\n */\nPositionProperty.convertToReferenceFrame = function (\n time,\n value,\n inputFrame,\n outputFrame,\n result\n) {\n if (!defined(value)) {\n return value;\n }\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n if (inputFrame === outputFrame) {\n return Cartesian3.clone(value, result);\n }\n\n var icrfToFixed = Transforms.computeIcrfToFixedMatrix(time, scratchMatrix3);\n if (!defined(icrfToFixed)) {\n icrfToFixed = Transforms.computeTemeToPseudoFixedMatrix(\n time,\n scratchMatrix3\n );\n }\n if (inputFrame === ReferenceFrame.INERTIAL) {\n return Matrix3.multiplyByVector(icrfToFixed, value, result);\n }\n if (inputFrame === ReferenceFrame.FIXED) {\n return Matrix3.multiplyByVector(\n Matrix3.transpose(icrfToFixed, scratchMatrix3),\n value,\n result\n );\n }\n};\nexport default PositionProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport PositionProperty from \"./PositionProperty.js\";\n\n/**\n * A {@link PositionProperty} whose value does not change in respect to the\n * {@link ReferenceFrame} in which is it defined.\n *\n * @alias ConstantPositionProperty\n * @constructor\n *\n * @param {Cartesian3} [value] The property value.\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction ConstantPositionProperty(value, referenceFrame) {\n this._definitionChanged = new Event();\n this._value = Cartesian3.clone(value);\n this._referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n}\n\nObject.defineProperties(ConstantPositionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof ConstantPositionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n !defined(this._value) || this._referenceFrame === ReferenceFrame.FIXED\n );\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof ConstantPositionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the reference frame in which the position is defined.\n * @memberof ConstantPositionProperty.prototype\n * @type {ReferenceFrame}\n * @default ReferenceFrame.FIXED;\n */\n referenceFrame: {\n get: function () {\n return this._referenceFrame;\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantPositionProperty.prototype.getValue = function (time, result) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Cartesian3} value The property value.\n * @param {ReferenceFrame} [referenceFrame=this.referenceFrame] The reference frame in which the position is defined.\n */\nConstantPositionProperty.prototype.setValue = function (value, referenceFrame) {\n var definitionChanged = false;\n if (!Cartesian3.equals(this._value, value)) {\n definitionChanged = true;\n this._value = Cartesian3.clone(value);\n }\n if (defined(referenceFrame) && this._referenceFrame !== referenceFrame) {\n definitionChanged = true;\n this._referenceFrame = referenceFrame;\n }\n if (definitionChanged) {\n this._definitionChanged.raiseEvent(this);\n }\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantPositionProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (!defined(referenceFrame)) {\n throw new DeveloperError(\"referenceFrame is required.\");\n }\n //>>includeEnd('debug');\n\n return PositionProperty.convertToReferenceFrame(\n time,\n this._value,\n this._referenceFrame,\n referenceFrame,\n result\n );\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nConstantPositionProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof ConstantPositionProperty &&\n Cartesian3.equals(this._value, other._value) &&\n this._referenceFrame === other._referenceFrame)\n );\n};\nexport default ConstantPositionProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} CorridorGraphics.ConstructorOptions\n *\n * Initialization options for the CorridorGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the corridor.\n * @property {Property | Cartesian3} [positions] A Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor.\n * @property {Property | number} [width] A numeric Property specifying the distance between the edges of the corridor.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the corridor relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the corridor's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | CornerType} [cornerType=CornerType.ROUNDED] A {@link CornerType} Property specifying the style of the corners.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the distance between each latitude and longitude.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the corridor is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the corridor.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the corridor is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the corridor casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this corridor will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex] A Property specifying the zIndex of the corridor, used for ordering. Only has an effect if height and extrudedHeight are undefined, and if the corridor is static.\n */\n\n/**\n * Describes a corridor, which is a shape defined by a centerline and width that\n * conforms to the curvature of the globe. It can be placed on the surface or at altitude\n * and can optionally be extruded into a volume.\n *\n * @alias CorridorGraphics\n * @constructor\n *\n * @param {CorridorGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Corridor.html|Cesium Sandcastle Corridor Demo}\n */\nfunction CorridorGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._positions = undefined;\n this._positionsSubscription = undefined;\n this._width = undefined;\n this._widthSubscription = undefined;\n this._height = undefined;\n this._heightSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._extrudedHeight = undefined;\n this._extrudedHeightSubscription = undefined;\n this._extrudedHeightReference = undefined;\n this._extrudedHeightReferenceSubscription = undefined;\n this._cornerType = undefined;\n this._cornerTypeSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._classificationType = undefined;\n this._classificationTypeSubscription = undefined;\n this._zIndex = undefined;\n this._zIndexSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(CorridorGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof CorridorGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the corridor.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets a Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n */\n positions: createPropertyDescriptor(\"positions\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the corridor.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n */\n width: createPropertyDescriptor(\"width\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the corridor.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n height: createPropertyDescriptor(\"height\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the corridor extrusion.\n * Setting this property creates a corridor shaped volume starting at height and ending\n * at this altitude.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n */\n extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n /**\n * Gets or sets the Property specifying the extruded {@link HeightReference}.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n /**\n * Gets or sets the {@link CornerType} Property specifying how corners are styled.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default CornerType.ROUNDED\n */\n cornerType: createPropertyDescriptor(\"cornerType\"),\n\n /**\n * Gets or sets the numeric Property specifying the sampling distance between each latitude and longitude point.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the corridor is filled with the provided material.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the corridor.\n * @memberof CorridorGraphics.prototype\n * @type {MaterialProperty|undefined}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the corridor is outlined.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the corridor\n * casts or receives shadows from light sources.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this corridor will be displayed.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the {@link ClassificationType} Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof CorridorGraphics.prototype\n * @type {Property|undefined}\n * @default ClassificationType.BOTH\n */\n classificationType: createPropertyDescriptor(\"classificationType\"),\n\n /**\n * Gets or sets the zIndex Property specifying the ordering of the corridor. Only has an effect if the coridor is static and neither height or exturdedHeight are specified.\n * @memberof CorridorGraphics.prototype\n * @type {ConstantProperty|undefined}\n * @default 0\n */\n zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {CorridorGraphics} [result] The object onto which to store the result.\n * @returns {CorridorGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCorridorGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new CorridorGraphics(this);\n }\n result.show = this.show;\n result.positions = this.positions;\n result.width = this.width;\n result.height = this.height;\n result.heightReference = this.heightReference;\n result.extrudedHeight = this.extrudedHeight;\n result.extrudedHeightReference = this.extrudedHeightReference;\n result.cornerType = this.cornerType;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.classificationType = this.classificationType;\n result.zIndex = this.zIndex;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {CorridorGraphics} source The object to be merged into this object.\n */\nCorridorGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.positions = defaultValue(this.positions, source.positions);\n this.width = defaultValue(this.width, source.width);\n this.height = defaultValue(this.height, source.height);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.extrudedHeight = defaultValue(\n this.extrudedHeight,\n source.extrudedHeight\n );\n this.extrudedHeightReference = defaultValue(\n this.extrudedHeightReference,\n source.extrudedHeightReference\n );\n this.cornerType = defaultValue(this.cornerType, source.cornerType);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.classificationType = defaultValue(\n this.classificationType,\n source.classificationType\n );\n this.zIndex = defaultValue(this.zIndex, source.zIndex);\n};\nexport default CorridorGraphics;\n","import createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\nfunction createRawProperty(value) {\n return value;\n}\n\n/**\n * @private\n */\nfunction createRawPropertyDescriptor(name, configurable) {\n return createPropertyDescriptor(name, configurable, createRawProperty);\n}\nexport default createRawPropertyDescriptor;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} CylinderGraphics.ConstructorOptions\n *\n * Initialization options for the CylinderGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the cylinder.\n * @property {Property | number} [length] A numeric Property specifying the length of the cylinder.\n * @property {Property | number} [topRadius] A numeric Property specifying the radius of the top of the cylinder.\n * @property {Property | number} [bottomRadius] A numeric Property specifying the radius of the bottom of the cylinder.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the cylinder is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the cylinder.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the cylinder is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [numberOfVerticalLines=16] A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @property {Property | number} [slices=128] The number of edges around the perimeter of the cylinder.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the cylinder casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this cylinder will be displayed.\n */\n\n/**\n * Describes a cylinder, truncated cone, or cone defined by a length, top radius, and bottom radius.\n * The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias CylinderGraphics\n * @constructor\n *\n * @param {CylinderGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction CylinderGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._length = undefined;\n this._lengthSubscription = undefined;\n this._topRadius = undefined;\n this._topRadiusSubscription = undefined;\n this._bottomRadius = undefined;\n this._bottomRadiusSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._numberOfVerticalLines = undefined;\n this._numberOfVerticalLinesSubscription = undefined;\n this._slices = undefined;\n this._slicesSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(CylinderGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof CylinderGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the numeric Property specifying the length of the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n */\n length: createPropertyDescriptor(\"length\"),\n\n /**\n * Gets or sets the numeric Property specifying the radius of the top of the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n */\n topRadius: createPropertyDescriptor(\"topRadius\"),\n\n /**\n * Gets or sets the numeric Property specifying the radius of the bottom of the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n */\n bottomRadius: createPropertyDescriptor(\"bottomRadius\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the cylinder is filled with the provided material.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {MaterialProperty|undefined}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the cylinder is outlined.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets the Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default 16\n */\n numberOfVerticalLines: createPropertyDescriptor(\"numberOfVerticalLines\"),\n\n /**\n * Gets or sets the Property specifying the number of edges around the perimeter of the cylinder.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default 128\n */\n slices: createPropertyDescriptor(\"slices\"),\n\n /**\n * Get or sets the enum Property specifying whether the cylinder\n * casts or receives shadows from light sources.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this cylinder will be displayed.\n * @memberof CylinderGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {CylinderGraphics} [result] The object onto which to store the result.\n * @returns {CylinderGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCylinderGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new CylinderGraphics(this);\n }\n result.show = this.show;\n result.length = this.length;\n result.topRadius = this.topRadius;\n result.bottomRadius = this.bottomRadius;\n result.heightReference = this.heightReference;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.numberOfVerticalLines = this.numberOfVerticalLines;\n result.slices = this.slices;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {CylinderGraphics} source The object to be merged into this object.\n */\nCylinderGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.length = defaultValue(this.length, source.length);\n this.topRadius = defaultValue(this.topRadius, source.topRadius);\n this.bottomRadius = defaultValue(this.bottomRadius, source.bottomRadius);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.numberOfVerticalLines = defaultValue(\n this.numberOfVerticalLines,\n source.numberOfVerticalLines\n );\n this.slices = defaultValue(this.slices, source.slices);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default CylinderGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} EllipseGraphics.ConstructorOptions\n *\n * Initialization options for the EllipseGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the ellipse.\n * @property {Property | number} [semiMajorAxis] The numeric Property specifying the semi-major axis.\n * @property {Property | number} [semiMinorAxis] The numeric Property specifying the semi-minor axis.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the ellipse relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the ellipse's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [rotation=0.0] A numeric property specifying the rotation of the ellipse counter-clockwise from north.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the ellipse texture counter-clockwise from north.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between points on the ellipse.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the ellipse is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the ellipse.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the ellipse is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [numberOfVerticalLines=16] A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the ellipse casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this ellipse will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex=0] A property specifying the zIndex of the Ellipse. Used for ordering ground geometry. Only has an effect if the ellipse is constant and neither height or exturdedHeight are specified.\n */\n\n/**\n * Describes an ellipse defined by a center point and semi-major and semi-minor axes.\n * The ellipse conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n * The center point is determined by the containing {@link Entity}.\n *\n * @alias EllipseGraphics\n * @constructor\n *\n * @param {EllipseGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Circles and Ellipses.html|Cesium Sandcastle Circles and Ellipses Demo}\n */\nfunction EllipseGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._semiMajorAxis = undefined;\n this._semiMajorAxisSubscription = undefined;\n this._semiMinorAxis = undefined;\n this._semiMinorAxisSubscription = undefined;\n this._height = undefined;\n this._heightSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._extrudedHeight = undefined;\n this._extrudedHeightSubscription = undefined;\n this._extrudedHeightReference = undefined;\n this._extrudedHeightReferenceSubscription = undefined;\n this._rotation = undefined;\n this._rotationSubscription = undefined;\n this._stRotation = undefined;\n this._stRotationSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._numberOfVerticalLines = undefined;\n this._numberOfVerticalLinesSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._classificationType = undefined;\n this._classificationTypeSubscription = undefined;\n this._zIndex = undefined;\n this._zIndexSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(EllipseGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof EllipseGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the ellipse.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the numeric Property specifying the semi-major axis.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n */\n semiMajorAxis: createPropertyDescriptor(\"semiMajorAxis\"),\n\n /**\n * Gets or sets the numeric Property specifying the semi-minor axis.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n */\n semiMinorAxis: createPropertyDescriptor(\"semiMinorAxis\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the ellipse.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n height: createPropertyDescriptor(\"height\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the ellipse extrusion.\n * Setting this property creates volume starting at height and ending at this altitude.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n */\n extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n /**\n * Gets or sets the Property specifying the extruded {@link HeightReference}.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n /**\n * Gets or sets the numeric property specifying the rotation of the ellipse clockwise from north.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n rotation: createPropertyDescriptor(\"rotation\"),\n\n /**\n * Gets or sets the numeric property specifying the rotation of the ellipse texture counter-clockwise from north.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n stRotation: createPropertyDescriptor(\"stRotation\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between points on the ellipse.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the ellipse is filled with the provided material.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the ellipse.\n * @memberof EllipseGraphics.prototype\n * @type {MaterialProperty|undefined}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the ellipse is outlined.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets the numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default 16\n */\n numberOfVerticalLines: createPropertyDescriptor(\"numberOfVerticalLines\"),\n\n /**\n * Get or sets the enum Property specifying whether the ellipse\n * casts or receives shadows from light sources.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipse will be displayed.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the {@link ClassificationType} Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof EllipseGraphics.prototype\n * @type {Property|undefined}\n * @default ClassificationType.BOTH\n */\n classificationType: createPropertyDescriptor(\"classificationType\"),\n\n /**\n * Gets or sets the zIndex Property specifying the ellipse ordering. Only has an effect if the ellipse is constant and neither height or extrudedHeight are specified\n * @memberof EllipseGraphics.prototype\n * @type {ConstantProperty|undefined}\n * @default 0\n */\n zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {EllipseGraphics} [result] The object onto which to store the result.\n * @returns {EllipseGraphics} The modified result parameter or a new instance if one was not provided.\n */\nEllipseGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new EllipseGraphics(this);\n }\n result.show = this.show;\n result.semiMajorAxis = this.semiMajorAxis;\n result.semiMinorAxis = this.semiMinorAxis;\n result.height = this.height;\n result.heightReference = this.heightReference;\n result.extrudedHeight = this.extrudedHeight;\n result.extrudedHeightReference = this.extrudedHeightReference;\n result.rotation = this.rotation;\n result.stRotation = this.stRotation;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.numberOfVerticalLines = this.numberOfVerticalLines;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.classificationType = this.classificationType;\n result.zIndex = this.zIndex;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {EllipseGraphics} source The object to be merged into this object.\n */\nEllipseGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.semiMajorAxis = defaultValue(this.semiMajorAxis, source.semiMajorAxis);\n this.semiMinorAxis = defaultValue(this.semiMinorAxis, source.semiMinorAxis);\n this.height = defaultValue(this.height, source.height);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.extrudedHeight = defaultValue(\n this.extrudedHeight,\n source.extrudedHeight\n );\n this.extrudedHeightReference = defaultValue(\n this.extrudedHeightReference,\n source.extrudedHeightReference\n );\n this.rotation = defaultValue(this.rotation, source.rotation);\n this.stRotation = defaultValue(this.stRotation, source.stRotation);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.numberOfVerticalLines = defaultValue(\n this.numberOfVerticalLines,\n source.numberOfVerticalLines\n );\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.classificationType = defaultValue(\n this.classificationType,\n source.classificationType\n );\n this.zIndex = defaultValue(this.zIndex, source.zIndex);\n};\nexport default EllipseGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} EllipsoidGraphics.ConstructorOptions\n *\n * Initialization options for the EllipsoidGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the ellipsoid.\n * @property {Property | Cartesian3} [radii] A {@link Cartesian3} Property specifying the radii of the ellipsoid.\n * @property {Property | Cartesian3} [innerRadii] A {@link Cartesian3} Property specifying the inner radii of the ellipsoid.\n * @property {Property | number} [minimumClock=0.0] A Property specifying the minimum clock angle of the ellipsoid.\n * @property {Property | number} [maximumClock=2*PI] A Property specifying the maximum clock angle of the ellipsoid.\n * @property {Property | number} [minimumCone=0.0] A Property specifying the minimum cone angle of the ellipsoid.\n * @property {Property | number} [maximumCone=PI] A Property specifying the maximum cone angle of the ellipsoid.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the ellipsoid is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the ellipsoid.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the ellipsoid is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [stackPartitions=64] A Property specifying the number of stacks.\n * @property {Property | number} [slicePartitions=64] A Property specifying the number of radial slices.\n * @property {Property | number} [subdivisions=128] A Property specifying the number of samples per outline ring, determining the granularity of the curvature.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the ellipsoid casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this ellipsoid will be displayed.\n */\n\n/**\n * Describe an ellipsoid or sphere. The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias EllipsoidGraphics\n * @constructor\n *\n * @param {EllipsoidGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Spheres%20and%20Ellipsoids.html|Cesium Sandcastle Spheres and Ellipsoids Demo}\n */\nfunction EllipsoidGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._radii = undefined;\n this._radiiSubscription = undefined;\n this._innerRadii = undefined;\n this._innerRadiiSubscription = undefined;\n this._minimumClock = undefined;\n this._minimumClockSubscription = undefined;\n this._maximumClock = undefined;\n this._maximumClockSubscription = undefined;\n this._minimumCone = undefined;\n this._minimumConeSubscription = undefined;\n this._maximumCone = undefined;\n this._maximumConeSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._stackPartitions = undefined;\n this._stackPartitionsSubscription = undefined;\n this._slicePartitions = undefined;\n this._slicePartitionsSubscription = undefined;\n this._subdivisions = undefined;\n this._subdivisionsSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(EllipsoidGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof EllipsoidGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the {@link Cartesian3} {@link Property} specifying the radii of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n */\n radii: createPropertyDescriptor(\"radii\"),\n\n /**\n * Gets or sets the {@link Cartesian3} {@link Property} specifying the inner radii of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default radii\n */\n innerRadii: createPropertyDescriptor(\"innerRadii\"),\n\n /**\n * Gets or sets the Property specifying the minimum clock angle of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n minimumClock: createPropertyDescriptor(\"minimumClock\"),\n\n /**\n * Gets or sets the Property specifying the maximum clock angle of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 2*PI\n */\n maximumClock: createPropertyDescriptor(\"maximumClock\"),\n\n /**\n * Gets or sets the Property specifying the minimum cone angle of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n minimumCone: createPropertyDescriptor(\"minimumCone\"),\n\n /**\n * Gets or sets the Property specifying the maximum cone angle of the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default PI\n */\n maximumCone: createPropertyDescriptor(\"maximumCone\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the ellipsoid is filled with the provided material.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the ellipsoid.\n * @memberof EllipsoidGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the ellipsoid is outlined.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets the Property specifying the number of stacks.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 64\n */\n stackPartitions: createPropertyDescriptor(\"stackPartitions\"),\n\n /**\n * Gets or sets the Property specifying the number of radial slices per 360 degrees.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 64\n */\n slicePartitions: createPropertyDescriptor(\"slicePartitions\"),\n\n /**\n * Gets or sets the Property specifying the number of samples per outline ring, determining the granularity of the curvature.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default 128\n */\n subdivisions: createPropertyDescriptor(\"subdivisions\"),\n\n /**\n * Get or sets the enum Property specifying whether the ellipsoid\n * casts or receives shadows from light sources.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipsoid will be displayed.\n * @memberof EllipsoidGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {EllipsoidGraphics} [result] The object onto which to store the result.\n * @returns {EllipsoidGraphics} The modified result parameter or a new instance if one was not provided.\n */\nEllipsoidGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new EllipsoidGraphics(this);\n }\n result.show = this.show;\n result.radii = this.radii;\n result.innerRadii = this.innerRadii;\n result.minimumClock = this.minimumClock;\n result.maximumClock = this.maximumClock;\n result.minimumCone = this.minimumCone;\n result.maximumCone = this.maximumCone;\n result.heightReference = this.heightReference;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.stackPartitions = this.stackPartitions;\n result.slicePartitions = this.slicePartitions;\n result.subdivisions = this.subdivisions;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {EllipsoidGraphics} source The object to be merged into this object.\n */\nEllipsoidGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.radii = defaultValue(this.radii, source.radii);\n this.innerRadii = defaultValue(this.innerRadii, source.innerRadii);\n this.minimumClock = defaultValue(this.minimumClock, source.minimumClock);\n this.maximumClock = defaultValue(this.maximumClock, source.maximumClock);\n this.minimumCone = defaultValue(this.minimumCone, source.minimumCone);\n this.maximumCone = defaultValue(this.maximumCone, source.maximumCone);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.stackPartitions = defaultValue(\n this.stackPartitions,\n source.stackPartitions\n );\n this.slicePartitions = defaultValue(\n this.slicePartitions,\n source.slicePartitions\n );\n this.subdivisions = defaultValue(this.subdivisions, source.subdivisions);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default EllipsoidGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} LabelGraphics.ConstructorOptions\n *\n * Initialization options for the LabelGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the label.\n * @property {Property | string} [text] A Property specifying the text. Explicit newlines '\\n' are supported.\n * @property {Property | string} [font='30px sans-serif'] A Property specifying the CSS font.\n * @property {Property | LabelStyle} [style=LabelStyle.FILL] A Property specifying the {@link LabelStyle}.\n * @property {Property | number} [scale=1.0] A numeric Property specifying the scale to apply to the text.\n * @property {Property | boolean} [showBackground=false] A boolean Property specifying the visibility of the background behind the label.\n * @property {Property | Color} [backgroundColor=new Color(0.165, 0.165, 0.165, 0.8)] A Property specifying the background {@link Color}.\n * @property {Property | Cartesian2} [backgroundPadding=new Cartesian2(7, 5)] A {@link Cartesian2} Property specifying the horizontal and vertical background padding in pixels.\n * @property {Property | Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} Property specifying the pixel offset.\n * @property {Property | Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the eye offset.\n * @property {Property | HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.CENTER] A Property specifying the {@link HorizontalOrigin}.\n * @property {Property | VerticalOrigin} [verticalOrigin=VerticalOrigin.CENTER] A Property specifying the {@link VerticalOrigin}.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [fillColor=Color.WHITE] A Property specifying the fill {@link Color}.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the outline {@link Color}.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the outline width.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to set scale based on distance from the camera.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this label will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n */\n\n/**\n * Describes a two dimensional label located at the position of the containing {@link Entity}.\n * <p>\n * <div align='center'>\n * <img src='Images/Label.png' width='400' height='300' /><br />\n * Example labels\n * </div>\n * </p>\n *\n * @alias LabelGraphics\n * @constructor\n *\n * @param {LabelGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Labels.html|Cesium Sandcastle Labels Demo}\n */\nfunction LabelGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._text = undefined;\n this._textSubscription = undefined;\n this._font = undefined;\n this._fontSubscription = undefined;\n this._style = undefined;\n this._styleSubscription = undefined;\n this._scale = undefined;\n this._scaleSubscription = undefined;\n this._showBackground = undefined;\n this._showBackgroundSubscription = undefined;\n this._backgroundColor = undefined;\n this._backgroundColorSubscription = undefined;\n this._backgroundPadding = undefined;\n this._backgroundPaddingSubscription = undefined;\n this._pixelOffset = undefined;\n this._pixelOffsetSubscription = undefined;\n this._eyeOffset = undefined;\n this._eyeOffsetSubscription = undefined;\n this._horizontalOrigin = undefined;\n this._horizontalOriginSubscription = undefined;\n this._verticalOrigin = undefined;\n this._verticalOriginSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._fillColor = undefined;\n this._fillColorSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._translucencyByDistance = undefined;\n this._translucencyByDistanceSubscription = undefined;\n this._pixelOffsetScaleByDistance = undefined;\n this._pixelOffsetScaleByDistanceSubscription = undefined;\n this._scaleByDistance = undefined;\n this._scaleByDistanceSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._disableDepthTestDistance = undefined;\n this._disableDepthTestDistanceSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(LabelGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof LabelGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the label.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the string Property specifying the text of the label.\n * Explicit newlines '\\n' are supported.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n text: createPropertyDescriptor(\"text\"),\n\n /**\n * Gets or sets the string Property specifying the font in CSS syntax.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font|CSS font on MDN}\n */\n font: createPropertyDescriptor(\"font\"),\n\n /**\n * Gets or sets the Property specifying the {@link LabelStyle}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n style: createPropertyDescriptor(\"style\"),\n\n /**\n * Gets or sets the numeric Property specifying the uniform scale to apply to the image.\n * A scale greater than <code>1.0</code> enlarges the label while a scale less than <code>1.0</code> shrinks it.\n * <p>\n * <div align='center'>\n * <img src='Images/Label.setScale.png' width='400' height='300' /><br/>\n * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n * and <code>2.0</code>.\n * </div>\n * </p>\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n scale: createPropertyDescriptor(\"scale\"),\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the background behind the label.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n showBackground: createPropertyDescriptor(\"showBackground\"),\n\n /**\n * Gets or sets the Property specifying the background {@link Color}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default new Color(0.165, 0.165, 0.165, 0.8)\n */\n backgroundColor: createPropertyDescriptor(\"backgroundColor\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the label's horizontal and vertical\n * background padding in pixels.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(7, 5)\n */\n backgroundPadding: createPropertyDescriptor(\"backgroundPadding\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the label's pixel offset in screen space\n * from the origin of this label. This is commonly used to align multiple labels and labels at\n * the same position, e.g., an image and text. The screen space origin is the top, left corner of the\n * canvas; <code>x</code> increases from left to right, and <code>y</code> increases from top to bottom.\n * <p>\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Label.setPixelOffset.default.png' width='250' height='188' /></td>\n * <td align='center'><code>l.pixeloffset = new Cartesian2(25, 75);</code><br/><img src='Images/Label.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n * </tr></table>\n * The label's origin is indicated by the yellow point.\n * </div>\n * </p>\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default Cartesian2.ZERO\n */\n pixelOffset: createPropertyDescriptor(\"pixelOffset\"),\n\n /**\n * Gets or sets the {@link Cartesian3} Property specifying the label's offset in eye coordinates.\n * Eye coordinates is a left-handed coordinate system, where <code>x</code> points towards the viewer's\n * right, <code>y</code> points up, and <code>z</code> points into the screen.\n * <p>\n * An eye offset is commonly used to arrange multiple labels or objects at the same position, e.g., to\n * arrange a label above its corresponding 3D model.\n * </p>\n * Below, the label is positioned at the center of the Earth but an eye offset makes it always\n * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n * <p>\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n * </tr></table>\n * <code>l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n * </div>\n * </p>\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default Cartesian3.ZERO\n */\n eyeOffset: createPropertyDescriptor(\"eyeOffset\"),\n\n /**\n * Gets or sets the Property specifying the {@link HorizontalOrigin}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n horizontalOrigin: createPropertyDescriptor(\"horizontalOrigin\"),\n\n /**\n * Gets or sets the Property specifying the {@link VerticalOrigin}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n verticalOrigin: createPropertyDescriptor(\"verticalOrigin\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the Property specifying the fill {@link Color}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n fillColor: createPropertyDescriptor(\"fillColor\"),\n\n /**\n * Gets or sets the Property specifying the outline {@link Color}.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the outline width.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the translucency of the label based on the distance from the camera.\n * A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's translucency remains clamped to the nearest bound.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the label based on the distance from the camera.\n * A label's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's pixel offset remains clamped to the nearest bound.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n pixelOffsetScaleByDistance: createPropertyDescriptor(\n \"pixelOffsetScaleByDistance\"\n ),\n\n /**\n * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera.\n * A label's scale will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's scale remains clamped to the nearest bound. If undefined,\n * scaleByDistance will be disabled.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this label will be displayed.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof LabelGraphics.prototype\n * @type {Property|undefined}\n */\n disableDepthTestDistance: createPropertyDescriptor(\n \"disableDepthTestDistance\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {LabelGraphics} [result] The object onto which to store the result.\n * @returns {LabelGraphics} The modified result parameter or a new instance if one was not provided.\n */\nLabelGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new LabelGraphics(this);\n }\n result.show = this.show;\n result.text = this.text;\n result.font = this.font;\n result.style = this.style;\n result.scale = this.scale;\n result.showBackground = this.showBackground;\n result.backgroundColor = this.backgroundColor;\n result.backgroundPadding = this.backgroundPadding;\n result.pixelOffset = this.pixelOffset;\n result.eyeOffset = this.eyeOffset;\n result.horizontalOrigin = this.horizontalOrigin;\n result.verticalOrigin = this.verticalOrigin;\n result.heightReference = this.heightReference;\n result.fillColor = this.fillColor;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.translucencyByDistance = this.translucencyByDistance;\n result.pixelOffsetScaleByDistance = this.pixelOffsetScaleByDistance;\n result.scaleByDistance = this.scaleByDistance;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.disableDepthTestDistance = this.disableDepthTestDistance;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {LabelGraphics} source The object to be merged into this object.\n */\nLabelGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.text = defaultValue(this.text, source.text);\n this.font = defaultValue(this.font, source.font);\n this.style = defaultValue(this.style, source.style);\n this.scale = defaultValue(this.scale, source.scale);\n this.showBackground = defaultValue(\n this.showBackground,\n source.showBackground\n );\n this.backgroundColor = defaultValue(\n this.backgroundColor,\n source.backgroundColor\n );\n this.backgroundPadding = defaultValue(\n this.backgroundPadding,\n source.backgroundPadding\n );\n this.pixelOffset = defaultValue(this.pixelOffset, source.pixelOffset);\n this.eyeOffset = defaultValue(this.eyeOffset, source.eyeOffset);\n this.horizontalOrigin = defaultValue(\n this.horizontalOrigin,\n source.horizontalOrigin\n );\n this.verticalOrigin = defaultValue(\n this.verticalOrigin,\n source.verticalOrigin\n );\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.fillColor = defaultValue(this.fillColor, source.fillColor);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.translucencyByDistance = defaultValue(\n this.translucencyByDistance,\n source.translucencyByDistance\n );\n this.pixelOffsetScaleByDistance = defaultValue(\n this.pixelOffsetScaleByDistance,\n source.pixelOffsetScaleByDistance\n );\n this.scaleByDistance = defaultValue(\n this.scaleByDistance,\n source.scaleByDistance\n );\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.disableDepthTestDistance = defaultValue(\n this.disableDepthTestDistance,\n source.disableDepthTestDistance\n );\n};\nexport default LabelGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport TranslationRotationScale from \"../Core/TranslationRotationScale.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultNodeTransformation = new TranslationRotationScale();\n\n/**\n * A {@link Property} that produces {@link TranslationRotationScale} data.\n * @alias NodeTransformationProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Cartesian3} [options.translation=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node.\n * @param {Property|Quaternion} [options.rotation=Quaternion.IDENTITY] A {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node.\n * @param {Property|Cartesian3} [options.scale=new Cartesian3(1.0, 1.0, 1.0)] A {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node.\n */\nfunction NodeTransformationProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._translation = undefined;\n this._translationSubscription = undefined;\n this._rotation = undefined;\n this._rotationSubscription = undefined;\n this._scale = undefined;\n this._scaleSubscription = undefined;\n\n this.translation = options.translation;\n this.rotation = options.rotation;\n this.scale = options.scale;\n}\n\nObject.defineProperties(NodeTransformationProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof NodeTransformationProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._translation) &&\n Property.isConstant(this._rotation) &&\n Property.isConstant(this._scale)\n );\n },\n },\n\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof NodeTransformationProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node.\n * @memberof NodeTransformationProperty.prototype\n * @type {Property|undefined}\n * @default Cartesian3.ZERO\n */\n translation: createPropertyDescriptor(\"translation\"),\n\n /**\n * Gets or sets the {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node.\n * @memberof NodeTransformationProperty.prototype\n * @type {Property|undefined}\n * @default Quaternion.IDENTITY\n */\n rotation: createPropertyDescriptor(\"rotation\"),\n\n /**\n * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node.\n * @memberof NodeTransformationProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian3(1.0, 1.0, 1.0)\n */\n scale: createPropertyDescriptor(\"scale\"),\n});\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {TranslationRotationScale} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {TranslationRotationScale} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nNodeTransformationProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = new TranslationRotationScale();\n }\n\n result.translation = Property.getValueOrClonedDefault(\n this._translation,\n time,\n defaultNodeTransformation.translation,\n result.translation\n );\n result.rotation = Property.getValueOrClonedDefault(\n this._rotation,\n time,\n defaultNodeTransformation.rotation,\n result.rotation\n );\n result.scale = Property.getValueOrClonedDefault(\n this._scale,\n time,\n defaultNodeTransformation.scale,\n result.scale\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nNodeTransformationProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof NodeTransformationProperty &&\n Property.equals(this._translation, other._translation) &&\n Property.equals(this._rotation, other._rotation) &&\n Property.equals(this._scale, other._scale))\n );\n};\nexport default NodeTransformationProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is a key-value mapping of property names to the computed value of other properties.\n *\n * @alias PropertyBag\n * @constructor\n * @implements {DictionaryLike}\n *\n * @param {Object} [value] An object, containing key-value mapping of property names to properties.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of any of the properties in value are not a Property.\n */\nfunction PropertyBag(value, createPropertyCallback) {\n this._propertyNames = [];\n this._definitionChanged = new Event();\n\n if (defined(value)) {\n this.merge(value, createPropertyCallback);\n }\n}\n\nObject.defineProperties(PropertyBag.prototype, {\n /**\n * Gets the names of all properties registered on this instance.\n * @memberof PropertyBag.prototype\n * @type {Array}\n */\n propertyNames: {\n get: function () {\n return this._propertyNames;\n },\n },\n /**\n * Gets a value indicating if this property is constant. This property\n * is considered constant if all property items in this object are constant.\n * @memberof PropertyBag.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n var propertyNames = this._propertyNames;\n for (var i = 0, len = propertyNames.length; i < len; i++) {\n if (!Property.isConstant(this[propertyNames[i]])) {\n return false;\n }\n }\n return true;\n },\n },\n /**\n * Gets the event that is raised whenever the set of properties contained in this\n * object changes, or one of the properties itself changes.\n *\n * @memberof PropertyBag.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\n/**\n * Determines if this object has defined a property with the given name.\n *\n * @param {String} propertyName The name of the property to check for.\n *\n * @returns {Boolean} True if this object has defined a property with the given name, false otherwise.\n */\nPropertyBag.prototype.hasProperty = function (propertyName) {\n return this._propertyNames.indexOf(propertyName) !== -1;\n};\n\nfunction createConstantProperty(value) {\n return new ConstantProperty(value);\n}\n\n/**\n * Adds a property to this object.\n *\n * @param {String} propertyName The name of the property to add.\n * @param {*} [value] The value of the new property, if provided.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of this new property is set to a value that is not a Property.\n *\n * @exception {DeveloperError} \"propertyName\" is already a registered property.\n */\nPropertyBag.prototype.addProperty = function (\n propertyName,\n value,\n createPropertyCallback\n) {\n var propertyNames = this._propertyNames;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(propertyName)) {\n throw new DeveloperError(\"propertyName is required.\");\n }\n if (propertyNames.indexOf(propertyName) !== -1) {\n throw new DeveloperError(\n propertyName + \" is already a registered property.\"\n );\n }\n //>>includeEnd('debug');\n\n propertyNames.push(propertyName);\n Object.defineProperty(\n this,\n propertyName,\n createPropertyDescriptor(\n propertyName,\n true,\n defaultValue(createPropertyCallback, createConstantProperty)\n )\n );\n\n if (defined(value)) {\n this[propertyName] = value;\n }\n\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Removed a property previously added with addProperty.\n *\n * @param {String} propertyName The name of the property to remove.\n *\n * @exception {DeveloperError} \"propertyName\" is not a registered property.\n */\nPropertyBag.prototype.removeProperty = function (propertyName) {\n var propertyNames = this._propertyNames;\n var index = propertyNames.indexOf(propertyName);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(propertyName)) {\n throw new DeveloperError(\"propertyName is required.\");\n }\n if (index === -1) {\n throw new DeveloperError(propertyName + \" is not a registered property.\");\n }\n //>>includeEnd('debug');\n\n this._propertyNames.splice(index, 1);\n delete this[propertyName];\n\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Gets the value of this property. Each contained property will be evaluated at the given time, and the overall\n * result will be an object, mapping property names to those values.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * Note that any properties in result which are not part of this PropertyBag will be left as-is.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPropertyBag.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = {};\n }\n\n var propertyNames = this._propertyNames;\n for (var i = 0, len = propertyNames.length; i < len; i++) {\n var propertyName = propertyNames[i];\n result[propertyName] = Property.getValueOrUndefined(\n this[propertyName],\n time,\n result[propertyName]\n );\n }\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {Object} source The object to be merged into this object.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of any of the properties in value are not a Property.\n */\nPropertyBag.prototype.merge = function (source, createPropertyCallback) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n var propertyNames = this._propertyNames;\n var sourcePropertyNames = defined(source._propertyNames)\n ? source._propertyNames\n : Object.keys(source);\n for (var i = 0, len = sourcePropertyNames.length; i < len; i++) {\n var name = sourcePropertyNames[i];\n\n var targetProperty = this[name];\n var sourceProperty = source[name];\n\n //Custom properties that are registered on the source must also be added to this.\n if (targetProperty === undefined && propertyNames.indexOf(name) === -1) {\n this.addProperty(name, undefined, createPropertyCallback);\n }\n\n if (sourceProperty !== undefined) {\n if (targetProperty !== undefined) {\n if (defined(targetProperty) && defined(targetProperty.merge)) {\n targetProperty.merge(sourceProperty);\n }\n } else if (\n defined(sourceProperty) &&\n defined(sourceProperty.merge) &&\n defined(sourceProperty.clone)\n ) {\n this[name] = sourceProperty.clone();\n } else {\n this[name] = sourceProperty;\n }\n }\n }\n};\n\nfunction propertiesEqual(a, b) {\n var aPropertyNames = a._propertyNames;\n var bPropertyNames = b._propertyNames;\n\n var len = aPropertyNames.length;\n if (len !== bPropertyNames.length) {\n return false;\n }\n\n for (var aIndex = 0; aIndex < len; ++aIndex) {\n var name = aPropertyNames[aIndex];\n var bIndex = bPropertyNames.indexOf(name);\n if (bIndex === -1) {\n return false;\n }\n if (!Property.equals(a[name], b[name])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPropertyBag.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PropertyBag && //\n propertiesEqual(this, other))\n );\n};\nexport default PropertyBag;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport NodeTransformationProperty from \"./NodeTransformationProperty.js\";\nimport PropertyBag from \"./PropertyBag.js\";\n\nfunction createNodeTransformationProperty(value) {\n return new NodeTransformationProperty(value);\n}\n\nfunction createNodeTransformationPropertyBag(value) {\n return new PropertyBag(value, createNodeTransformationProperty);\n}\n\nfunction createArticulationStagePropertyBag(value) {\n return new PropertyBag(value);\n}\n\n/**\n * @typedef {Object} ModelGraphics.ConstructorOptions\n *\n * Initialization options for the ModelGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the model.\n * @property {Property | string | Resource} [uri] A string or Resource Property specifying the URI of the glTF asset.\n * @property {Property | number} [scale=1.0] A numeric Property specifying a uniform linear scale.\n * @property {Property | number} [minimumPixelSize=0.0] A numeric Property specifying the approximate minimum pixel size of the model regardless of zoom.\n * @property {Property | number} [maximumScale] The maximum scale size of a model. An upper limit for minimumPixelSize.\n * @property {Property | boolean} [incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @property {Property | boolean} [runAnimations=true] A boolean Property specifying if glTF animations specified in the model should be started.\n * @property {Property | boolean} [clampAnimations=true] A boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes.\n * @property {Property | ShadowMode} [shadows=ShadowMode.ENABLED] An enum Property specifying whether the model casts or receives shadows from light sources.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [silhouetteColor=Color.RED] A Property specifying the {@link Color} of the silhouette.\n * @property {Property | number} [silhouetteSize=0.0] A numeric Property specifying the size of the silhouette in pixels.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the {@link Color} that blends with the model's rendered color.\n * @property {Property | ColorBlendMode} [colorBlendMode=ColorBlendMode.HIGHLIGHT] An enum Property specifying how the color blends with the model.\n * @property {Property | number} [colorBlendAmount=0.5] A numeric Property specifying the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @property {Property | Cartesian2} [imageBasedLightingFactor=new Cartesian2(1.0, 1.0)] A property specifying the contribution from diffuse and specular image-based lighting.\n * @property {Property | Color} [lightColor] A property specifying the light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this model will be displayed.\n * @property {PropertyBag | Object.<string, TranslationRotationScale>} [nodeTransformations] An object, where keys are names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node. The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation.\n * @property {PropertyBag | Object.<string, number>} [articulations] An object, where keys are composed of an articulation name, a single space, and a stage name, and the values are numeric properties.\n * @property {Property | ClippingPlaneCollection} [clippingPlanes] A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n */\n\n/**\n * A 3D model based on {@link https://github.com/KhronosGroup/glTF|glTF}, the runtime asset format for WebGL, OpenGL ES, and OpenGL.\n * The position and orientation of the model is determined by the containing {@link Entity}.\n * <p>\n * Cesium includes support for glTF geometry, materials, animations, and skinning.\n * Cameras and lights are not currently supported.\n * </p>\n *\n * @alias ModelGraphics\n * @constructor\n *\n * @param {ModelGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see {@link https://cesium.com/docs/tutorials/3d-models/|3D Models Tutorial}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=3D%20Models.html|Cesium Sandcastle 3D Models Demo}\n */\nfunction ModelGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._uri = undefined;\n this._uriSubscription = undefined;\n this._scale = undefined;\n this._scaleSubscription = undefined;\n this._minimumPixelSize = undefined;\n this._minimumPixelSizeSubscription = undefined;\n this._maximumScale = undefined;\n this._maximumScaleSubscription = undefined;\n this._incrementallyLoadTextures = undefined;\n this._incrementallyLoadTexturesSubscription = undefined;\n this._runAnimations = undefined;\n this._runAnimationsSubscription = undefined;\n this._clampAnimations = undefined;\n this._clampAnimationsSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._silhouetteColor = undefined;\n this._silhouetteColorSubscription = undefined;\n this._silhouetteSize = undefined;\n this._silhouetteSizeSubscription = undefined;\n this._color = undefined;\n this._colorSubscription = undefined;\n this._colorBlendMode = undefined;\n this._colorBlendModeSubscription = undefined;\n this._colorBlendAmount = undefined;\n this._colorBlendAmountSubscription = undefined;\n this._imageBasedLightingFactor = undefined;\n this._imageBasedLightingFactorSubscription = undefined;\n this._lightColor = undefined;\n this._lightColorSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._nodeTransformations = undefined;\n this._nodeTransformationsSubscription = undefined;\n this._articulations = undefined;\n this._articulationsSubscription = undefined;\n this._clippingPlanes = undefined;\n this._clippingPlanesSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(ModelGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof ModelGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the model.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the string Property specifying the URI of the glTF asset.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n uri: createPropertyDescriptor(\"uri\"),\n\n /**\n * Gets or sets the numeric Property specifying a uniform linear scale\n * for this model. Values greater than 1.0 increase the size of the model while\n * values less than 1.0 decrease it.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n scale: createPropertyDescriptor(\"scale\"),\n\n /**\n * Gets or sets the numeric Property specifying the approximate minimum\n * pixel size of the model regardless of zoom. This can be used to ensure that\n * a model is visible even when the viewer zooms out. When <code>0.0</code>,\n * no minimum size is enforced.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n minimumPixelSize: createPropertyDescriptor(\"minimumPixelSize\"),\n\n /**\n * Gets or sets the numeric Property specifying the maximum scale\n * size of a model. This property is used as an upper limit for\n * {@link ModelGraphics#minimumPixelSize}.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n maximumScale: createPropertyDescriptor(\"maximumScale\"),\n\n /**\n * Get or sets the boolean Property specifying whether textures\n * may continue to stream in after the model is loaded.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n incrementallyLoadTextures: createPropertyDescriptor(\n \"incrementallyLoadTextures\"\n ),\n\n /**\n * Gets or sets the boolean Property specifying if glTF animations should be run.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n runAnimations: createPropertyDescriptor(\"runAnimations\"),\n\n /**\n * Gets or sets the boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n clampAnimations: createPropertyDescriptor(\"clampAnimations\"),\n\n /**\n * Get or sets the enum Property specifying whether the model\n * casts or receives shadows from light sources.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.ENABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the silhouette.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default Color.RED\n */\n silhouetteColor: createPropertyDescriptor(\"silhouetteColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the size of the silhouette in pixels.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n silhouetteSize: createPropertyDescriptor(\"silhouetteSize\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} that blends with the model's rendered color.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the enum Property specifying how the color blends with the model.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default ColorBlendMode.HIGHLIGHT\n */\n colorBlendMode: createPropertyDescriptor(\"colorBlendMode\"),\n\n /**\n * A numeric Property specifying the color strength when the <code>colorBlendMode</code> is MIX.\n * A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with\n * any value in-between resulting in a mix of the two.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n * @default 0.5\n */\n colorBlendAmount: createPropertyDescriptor(\"colorBlendAmount\"),\n\n /**\n * A property specifying the {@link Cartesian2} used to scale the diffuse and specular image-based lighting contribution to the final color.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n imageBasedLightingFactor: createPropertyDescriptor(\n \"imageBasedLightingFactor\"\n ),\n\n /**\n * A property specifying the {@link Cartesian3} light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @memberOf ModelGraphics.prototype\n * @type {Property|undefined}\n */\n lightColor: createPropertyDescriptor(\"lightColor\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this model will be displayed.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the set of node transformations to apply to this model. This is represented as an {@link PropertyBag}, where keys are\n * names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node.\n * The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation.\n * @memberof ModelGraphics.prototype\n * @type {PropertyBag}\n */\n nodeTransformations: createPropertyDescriptor(\n \"nodeTransformations\",\n undefined,\n createNodeTransformationPropertyBag\n ),\n\n /**\n * Gets or sets the set of articulation values to apply to this model. This is represented as an {@link PropertyBag}, where keys are\n * composed as the name of the articulation, a single space, and the name of the stage.\n * @memberof ModelGraphics.prototype\n * @type {PropertyBag}\n */\n articulations: createPropertyDescriptor(\n \"articulations\",\n undefined,\n createArticulationStagePropertyBag\n ),\n\n /**\n * A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @memberof ModelGraphics.prototype\n * @type {Property|undefined}\n */\n clippingPlanes: createPropertyDescriptor(\"clippingPlanes\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {ModelGraphics} [result] The object onto which to store the result.\n * @returns {ModelGraphics} The modified result parameter or a new instance if one was not provided.\n */\nModelGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new ModelGraphics(this);\n }\n result.show = this.show;\n result.uri = this.uri;\n result.scale = this.scale;\n result.minimumPixelSize = this.minimumPixelSize;\n result.maximumScale = this.maximumScale;\n result.incrementallyLoadTextures = this.incrementallyLoadTextures;\n result.runAnimations = this.runAnimations;\n result.clampAnimations = this.clampAnimations;\n result.heightReference = this._heightReference;\n result.silhouetteColor = this.silhouetteColor;\n result.silhouetteSize = this.silhouetteSize;\n result.color = this.color;\n result.colorBlendMode = this.colorBlendMode;\n result.colorBlendAmount = this.colorBlendAmount;\n result.imageBasedLightingFactor = this.imageBasedLightingFactor;\n result.lightColor = this.lightColor;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.nodeTransformations = this.nodeTransformations;\n result.articulations = this.articulations;\n result.clippingPlanes = this.clippingPlanes;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {ModelGraphics} source The object to be merged into this object.\n */\nModelGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.uri = defaultValue(this.uri, source.uri);\n this.scale = defaultValue(this.scale, source.scale);\n this.minimumPixelSize = defaultValue(\n this.minimumPixelSize,\n source.minimumPixelSize\n );\n this.maximumScale = defaultValue(this.maximumScale, source.maximumScale);\n this.incrementallyLoadTextures = defaultValue(\n this.incrementallyLoadTextures,\n source.incrementallyLoadTextures\n );\n this.runAnimations = defaultValue(this.runAnimations, source.runAnimations);\n this.clampAnimations = defaultValue(\n this.clampAnimations,\n source.clampAnimations\n );\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.silhouetteColor = defaultValue(\n this.silhouetteColor,\n source.silhouetteColor\n );\n this.silhouetteSize = defaultValue(\n this.silhouetteSize,\n source.silhouetteSize\n );\n this.color = defaultValue(this.color, source.color);\n this.colorBlendMode = defaultValue(\n this.colorBlendMode,\n source.colorBlendMode\n );\n this.colorBlendAmount = defaultValue(\n this.colorBlendAmount,\n source.colorBlendAmount\n );\n this.imageBasedLightingFactor = defaultValue(\n this.imageBasedLightingFactor,\n source.imageBasedLightingFactor\n );\n this.lightColor = defaultValue(this.lightColor, source.lightColor);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.clippingPlanes = defaultValue(\n this.clippingPlanes,\n source.clippingPlanes\n );\n\n var sourceNodeTransformations = source.nodeTransformations;\n if (defined(sourceNodeTransformations)) {\n var targetNodeTransformations = this.nodeTransformations;\n if (defined(targetNodeTransformations)) {\n targetNodeTransformations.merge(sourceNodeTransformations);\n } else {\n this.nodeTransformations = new PropertyBag(\n sourceNodeTransformations,\n createNodeTransformationProperty\n );\n }\n }\n\n var sourceArticulations = source.articulations;\n if (defined(sourceArticulations)) {\n var targetArticulations = this.articulations;\n if (defined(targetArticulations)) {\n targetArticulations.merge(sourceArticulations);\n } else {\n this.articulations = new PropertyBag(sourceArticulations);\n }\n }\n};\nexport default ModelGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} Cesium3DTilesetGraphics.ConstructorOptions\n *\n * Initialization options for the Cesium3DTilesetGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the tileset.\n * @property {Property | string | Resource} [uri] A string or Resource Property specifying the URI of the tileset.\n * @property {Property | number} [maximumScreenSpaceError] A number or Property specifying the maximum screen space error used to drive level of detail refinement.\n */\n\n/**\n * A 3D Tiles tileset represented by an {@link Entity}.\n * The tileset modelMatrix is determined by the containing Entity position and orientation\n * or is left unset if position is undefined.\n *\n * @alias Cesium3DTilesetGraphics\n * @constructor\n *\n * @param {Cesium3DTilesetGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction Cesium3DTilesetGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._uri = undefined;\n this._uriSubscription = undefined;\n this._maximumScreenSpaceError = undefined;\n this._maximumScreenSpaceErrorSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(Cesium3DTilesetGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof Cesium3DTilesetGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the model.\n * @memberof Cesium3DTilesetGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the string Property specifying the URI of the glTF asset.\n * @memberof Cesium3DTilesetGraphics.prototype\n * @type {Property|undefined}\n */\n uri: createPropertyDescriptor(\"uri\"),\n\n /**\n * Gets or sets the maximum screen space error used to drive level of detail refinement.\n * @memberof Cesium3DTilesetGraphics.prototype\n * @type {Property|undefined}\n */\n maximumScreenSpaceError: createPropertyDescriptor(\"maximumScreenSpaceError\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {Cesium3DTilesetGraphics} [result] The object onto which to store the result.\n * @returns {Cesium3DTilesetGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCesium3DTilesetGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new Cesium3DTilesetGraphics(this);\n }\n result.show = this.show;\n result.uri = this.uri;\n result.maximumScreenSpaceError = this.maximumScreenSpaceError;\n\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {Cesium3DTilesetGraphics} source The object to be merged into this object.\n */\nCesium3DTilesetGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.uri = defaultValue(this.uri, source.uri);\n this.maximumScreenSpaceError = defaultValue(\n this.maximumScreenSpaceError,\n source.maximumScreenSpaceError\n );\n};\n\nexport default Cesium3DTilesetGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} PathGraphics.ConstructorOptions\n *\n * Initialization options for the PathGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the path.\n * @property {Property | number} [leadTime] A Property specifying the number of seconds in front the object to show.\n * @property {Property | number} [trailTime] A Property specifying the number of seconds behind of the object to show.\n * @property {Property | number} [width=1.0] A numeric Property specifying the width in pixels.\n * @property {Property | number} [resolution=60] A numeric Property specifying the maximum number of seconds to step when sampling the position.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to draw the path.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this path will be displayed.\n */\n\n/**\n * Describes a polyline defined as the path made by an {@link Entity} as it moves over time.\n *\n * @alias PathGraphics\n * @constructor\n *\n * @param {PathGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction PathGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._leadTime = undefined;\n this._leadTimeSubscription = undefined;\n this._trailTime = undefined;\n this._trailTimeSubscription = undefined;\n this._width = undefined;\n this._widthSubscription = undefined;\n this._resolution = undefined;\n this._resolutionSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PathGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PathGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the path.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the number of seconds in front of the object to show.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n */\n leadTime: createPropertyDescriptor(\"leadTime\"),\n\n /**\n * Gets or sets the Property specifying the number of seconds behind the object to show.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n */\n trailTime: createPropertyDescriptor(\"trailTime\"),\n\n /**\n * Gets or sets the numeric Property specifying the width in pixels.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n width: createPropertyDescriptor(\"width\"),\n\n /**\n * Gets or sets the Property specifying the maximum number of seconds to step when sampling the position.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n * @default 60\n */\n resolution: createPropertyDescriptor(\"resolution\"),\n\n /**\n * Gets or sets the Property specifying the material used to draw the path.\n * @memberof PathGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this path will be displayed.\n * @memberof PathGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PathGraphics} [result] The object onto which to store the result.\n * @returns {PathGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPathGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PathGraphics(this);\n }\n result.show = this.show;\n result.leadTime = this.leadTime;\n result.trailTime = this.trailTime;\n result.width = this.width;\n result.resolution = this.resolution;\n result.material = this.material;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PathGraphics} source The object to be merged into this object.\n */\nPathGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.leadTime = defaultValue(this.leadTime, source.leadTime);\n this.trailTime = defaultValue(this.trailTime, source.trailTime);\n this.width = defaultValue(this.width, source.width);\n this.resolution = defaultValue(this.resolution, source.resolution);\n this.material = defaultValue(this.material, source.material);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default PathGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} PlaneGraphics.ConstructorOptions\n *\n * Initialization options for the PlaneGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the plane.\n * @property {Property | Plane} [plane] A {@link Plane} Property specifying the normal and distance for the plane.\n * @property {Property | Cartesian2} [dimensions] A {@link Cartesian2} Property specifying the width and height of the plane.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the plane is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the plane.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the plane is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the plane casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this plane will be displayed.\n */\n\n/**\n * Describes a plane. The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias PlaneGraphics\n * @constructor\n *\n * @param {PlaneGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Plane.html|Cesium Sandcastle Plane Demo}\n */\nfunction PlaneGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._plane = undefined;\n this._planeSubscription = undefined;\n this._dimensions = undefined;\n this._dimensionsSubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PlaneGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PlaneGraphics.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the plane.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the {@link Plane} Property specifying the normal and distance of the plane.\n *\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n */\n plane: createPropertyDescriptor(\"plane\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the width and height of the plane.\n *\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n */\n dimensions: createPropertyDescriptor(\"dimensions\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the plane is filled with the provided material.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the material used to fill the plane.\n * @memberof PlaneGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the plane is outlined.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the plane\n * casts or receives shadows from light sources.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this plane will be displayed.\n * @memberof PlaneGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PlaneGraphics} [result] The object onto which to store the result.\n * @returns {PlaneGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPlaneGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PlaneGraphics(this);\n }\n result.show = this.show;\n result.plane = this.plane;\n result.dimensions = this.dimensions;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PlaneGraphics} source The object to be merged into this object.\n */\nPlaneGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.plane = defaultValue(this.plane, source.plane);\n this.dimensions = defaultValue(this.dimensions, source.dimensions);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default PlaneGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} PointGraphics.ConstructorOptions\n *\n * Initialization options for the PointGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the point.\n * @property {Property | number} [pixelSize=1] A numeric Property specifying the size in pixels.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the {@link Color} of the point.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=0] A numeric Property specifying the the outline width in pixels.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to scale the point based on distance.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this point will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n */\n\n/**\n * Describes a graphical point located at the position of the containing {@link Entity}.\n *\n * @alias PointGraphics\n * @constructor\n *\n * @param {PointGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction PointGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._pixelSize = undefined;\n this._pixelSizeSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._color = undefined;\n this._colorSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._scaleByDistance = undefined;\n this._scaleByDistanceSubscription = undefined;\n this._translucencyByDistance = undefined;\n this._translucencyByDistanceSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._disableDepthTestDistance = undefined;\n this._disableDepthTestDistanceSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PointGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PointGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the point.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the numeric Property specifying the size in pixels.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default 1\n */\n pixelSize: createPropertyDescriptor(\"pixelSize\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the point.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the the outline width in pixels.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets the {@link NearFarScalar} Property used to scale the point based on distance.\n * If undefined, a constant size is used.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n */\n scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n /**\n * Gets or sets {@link NearFarScalar} Property specifying the translucency of the point based on the distance from the camera.\n * A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the points's translucency remains clamped to the nearest bound.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n */\n translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this point will be displayed.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof PointGraphics.prototype\n * @type {Property|undefined}\n */\n disableDepthTestDistance: createPropertyDescriptor(\n \"disableDepthTestDistance\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PointGraphics} [result] The object onto which to store the result.\n * @returns {PointGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPointGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PointGraphics(this);\n }\n result.show = this.show;\n result.pixelSize = this.pixelSize;\n result.heightReference = this.heightReference;\n result.color = this.color;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.scaleByDistance = this.scaleByDistance;\n result.translucencyByDistance = this._translucencyByDistance;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.disableDepthTestDistance = this.disableDepthTestDistance;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PointGraphics} source The object to be merged into this object.\n */\nPointGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.pixelSize = defaultValue(this.pixelSize, source.pixelSize);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.color = defaultValue(this.color, source.color);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.scaleByDistance = defaultValue(\n this.scaleByDistance,\n source.scaleByDistance\n );\n this.translucencyByDistance = defaultValue(\n this._translucencyByDistance,\n source.translucencyByDistance\n );\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.disableDepthTestDistance = defaultValue(\n this.disableDepthTestDistance,\n source.disableDepthTestDistance\n );\n};\nexport default PointGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\nfunction createPolygonHierarchyProperty(value) {\n if (Array.isArray(value)) {\n // convert array of positions to PolygonHierarchy object\n value = new PolygonHierarchy(value);\n }\n return new ConstantProperty(value);\n}\n\n/**\n * @typedef {Object} PolygonGraphics.ConstructorOptions\n *\n * Initialization options for the PolygonGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the polygon.\n * @property {Property | PolygonHierarchy} [hierarchy] A Property specifying the {@link PolygonHierarchy}.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the polygon relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the polygon's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the polygon texture counter-clockwise from north.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the polygon is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the polygon.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the polygon is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | boolean} [perPositionHeight=false] A boolean specifying whether or not the height of each position is used.\n * @property {Boolean | boolean} [closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @property {Boolean | boolean} [closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @property {Property | ArcType} [arcType=ArcType.GEODESIC] The type of line the polygon edges must follow.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the polygon casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this polygon will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex=0] A property specifying the zIndex used for ordering ground geometry. Only has an effect if the polygon is constant and neither height or extrudedHeight are specified.\n */\n\n/**\n * Describes a polygon defined by an hierarchy of linear rings which make up the outer shape and any nested holes.\n * The polygon conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n *\n * @alias PolygonGraphics\n * @constructor\n *\n * @param {PolygonGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polygon.html|Cesium Sandcastle Polygon Demo}\n */\nfunction PolygonGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._hierarchy = undefined;\n this._hierarchySubscription = undefined;\n this._height = undefined;\n this._heightSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._extrudedHeight = undefined;\n this._extrudedHeightSubscription = undefined;\n this._extrudedHeightReference = undefined;\n this._extrudedHeightReferenceSubscription = undefined;\n this._stRotation = undefined;\n this._stRotationSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._perPositionHeight = undefined;\n this._perPositionHeightSubscription = undefined;\n this._closeTop = undefined;\n this._closeTopSubscription = undefined;\n this._closeBottom = undefined;\n this._closeBottomSubscription = undefined;\n this._arcType = undefined;\n this._arcTypeSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._classificationType = undefined;\n this._classificationTypeSubscription = undefined;\n this._zIndex = undefined;\n this._zIndexSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PolygonGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PolygonGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the polygon.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the {@link PolygonHierarchy}.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n hierarchy: createPropertyDescriptor(\n \"hierarchy\",\n undefined,\n createPolygonHierarchyProperty\n ),\n\n /**\n * Gets or sets the numeric Property specifying the constant altitude of the polygon.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n height: createPropertyDescriptor(\"height\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the polygon extrusion.\n * If {@link PolygonGraphics#perPositionHeight} is false, the volume starts at {@link PolygonGraphics#height} and ends at this altitude.\n * If {@link PolygonGraphics#perPositionHeight} is true, the volume starts at the height of each {@link PolygonGraphics#hierarchy} position and ends at this altitude.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n /**\n * Gets or sets the Property specifying the extruded {@link HeightReference}.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n /**\n * Gets or sets the numeric property specifying the rotation of the polygon texture counter-clockwise from north.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n stRotation: createPropertyDescriptor(\"stRotation\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between points on the polygon.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the polygon is filled with the provided material.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the polygon.\n * @memberof PolygonGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the polygon is outlined.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Gets or sets the boolean specifying whether or not the the height of each position is used.\n * If true, the shape will have non-uniform altitude defined by the height of each {@link PolygonGraphics#hierarchy} position.\n * If false, the shape will have a constant altitude as specified by {@link PolygonGraphics#height}.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n perPositionHeight: createPropertyDescriptor(\"perPositionHeight\"),\n\n /**\n * Gets or sets a boolean specifying whether or not the top of an extruded polygon is included.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n closeTop: createPropertyDescriptor(\"closeTop\"),\n\n /**\n * Gets or sets a boolean specifying whether or not the bottom of an extruded polygon is included.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n closeBottom: createPropertyDescriptor(\"closeBottom\"),\n\n /**\n * Gets or sets the {@link ArcType} Property specifying the type of lines the polygon edges use.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default ArcType.GEODESIC\n */\n arcType: createPropertyDescriptor(\"arcType\"),\n\n /**\n * Get or sets the enum Property specifying whether the polygon\n * casts or receives shadows from light sources.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polygon will be displayed.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the {@link ClassificationType} Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof PolygonGraphics.prototype\n * @type {Property|undefined}\n * @default ClassificationType.BOTH\n */\n classificationType: createPropertyDescriptor(\"classificationType\"),\n\n /**\n * Gets or sets the zIndex Prperty specifying the ordering of ground geometry. Only has an effect if the polygon is constant and neither height or extrudedHeight are specified.\n * @memberof PolygonGraphics.prototype\n * @type {ConstantProperty|undefined}\n * @default 0\n */\n zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolygonGraphics} [result] The object onto which to store the result.\n * @returns {PolygonGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolygonGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PolygonGraphics(this);\n }\n result.show = this.show;\n result.hierarchy = this.hierarchy;\n result.height = this.height;\n result.heightReference = this.heightReference;\n result.extrudedHeight = this.extrudedHeight;\n result.extrudedHeightReference = this.extrudedHeightReference;\n result.stRotation = this.stRotation;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.perPositionHeight = this.perPositionHeight;\n result.closeTop = this.closeTop;\n result.closeBottom = this.closeBottom;\n result.arcType = this.arcType;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.classificationType = this.classificationType;\n result.zIndex = this.zIndex;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolygonGraphics} source The object to be merged into this object.\n */\nPolygonGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.hierarchy = defaultValue(this.hierarchy, source.hierarchy);\n this.height = defaultValue(this.height, source.height);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.extrudedHeight = defaultValue(\n this.extrudedHeight,\n source.extrudedHeight\n );\n this.extrudedHeightReference = defaultValue(\n this.extrudedHeightReference,\n source.extrudedHeightReference\n );\n this.stRotation = defaultValue(this.stRotation, source.stRotation);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.perPositionHeight = defaultValue(\n this.perPositionHeight,\n source.perPositionHeight\n );\n this.closeTop = defaultValue(this.closeTop, source.closeTop);\n this.closeBottom = defaultValue(this.closeBottom, source.closeBottom);\n this.arcType = defaultValue(this.arcType, source.arcType);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.classificationType = defaultValue(\n this.classificationType,\n source.classificationType\n );\n this.zIndex = defaultValue(this.zIndex, source.zIndex);\n};\nexport default PolygonGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} PolylineGraphics.ConstructorOptions\n *\n * Initialization options for the PolylineGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the polyline.\n * @property {Property | Array<Cartesian3>} [positions] A Property specifying the array of {@link Cartesian3} positions that define the line strip.\n * @property {Property | number} [width=1.0] A numeric Property specifying the width in pixels.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to draw the polyline.\n * @property {MaterialProperty | Color} [depthFailMaterial] A property specifying the material used to draw the polyline when it is below the terrain.\n * @property {Property | ArcType} [arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @property {Property | boolean} [clampToGround=false] A boolean Property specifying whether the Polyline should be clamped to the ground.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the polyline casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this polyline will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground.\n * @property {Property | number} [zIndex=0] A Property specifying the zIndex used for ordering ground geometry. Only has an effect if `clampToGround` is true and polylines on terrain is supported.\n */\n\n/**\n * Describes a polyline. The first two positions define a line segment,\n * and each additional position defines a line segment from the previous position. The segments\n * can be linear connected points, great arcs, or clamped to terrain.\n *\n * @alias PolylineGraphics\n * @constructor\n *\n * @param {PolylineGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline.html|Cesium Sandcastle Polyline Demo}\n */\nfunction PolylineGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._positions = undefined;\n this._positionsSubscription = undefined;\n this._width = undefined;\n this._widthSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._depthFailMaterial = undefined;\n this._depthFailMaterialSubscription = undefined;\n this._arcType = undefined;\n this._arcTypeSubscription = undefined;\n this._clampToGround = undefined;\n this._clampToGroundSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n this._classificationType = undefined;\n this._classificationTypeSubscription = undefined;\n this._zIndex = undefined;\n this._zIndexSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PolylineGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PolylineGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the polyline.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the array of {@link Cartesian3}\n * positions that define the line strip.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n */\n positions: createPropertyDescriptor(\"positions\"),\n\n /**\n * Gets or sets the numeric Property specifying the width in pixels.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n width: createPropertyDescriptor(\"width\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE and clampToGround is false.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default Cesium.Math.RADIANS_PER_DEGREE\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the Property specifying the material used to draw the polyline.\n * @memberof PolylineGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying the material used to draw the polyline when it fails the depth test.\n * <p>\n * Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported,\n * there may be artifacts.\n * </p>\n * @memberof PolylineGraphics.prototype\n * @type {MaterialProperty}\n * @default undefined\n */\n depthFailMaterial: createMaterialPropertyDescriptor(\"depthFailMaterial\"),\n\n /**\n * Gets or sets the {@link ArcType} Property specifying whether the line segments should be great arcs, rhumb lines or linearly connected.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default ArcType.GEODESIC\n */\n arcType: createPropertyDescriptor(\"arcType\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the polyline\n * should be clamped to the ground.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n clampToGround: createPropertyDescriptor(\"clampToGround\"),\n\n /**\n * Get or sets the enum Property specifying whether the polyline\n * casts or receives shadows from light sources.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polyline will be displayed.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the {@link ClassificationType} Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof PolylineGraphics.prototype\n * @type {Property|undefined}\n * @default ClassificationType.BOTH\n */\n classificationType: createPropertyDescriptor(\"classificationType\"),\n\n /**\n * Gets or sets the zIndex Property specifying the ordering of the polyline. Only has an effect if `clampToGround` is true and polylines on terrain is supported.\n * @memberof PolylineGraphics.prototype\n * @type {ConstantProperty|undefined}\n * @default 0\n */\n zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolylineGraphics} [result] The object onto which to store the result.\n * @returns {PolylineGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolylineGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PolylineGraphics(this);\n }\n result.show = this.show;\n result.positions = this.positions;\n result.width = this.width;\n result.granularity = this.granularity;\n result.material = this.material;\n result.depthFailMaterial = this.depthFailMaterial;\n result.arcType = this.arcType;\n result.clampToGround = this.clampToGround;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.classificationType = this.classificationType;\n result.zIndex = this.zIndex;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolylineGraphics} source The object to be merged into this object.\n */\nPolylineGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.positions = defaultValue(this.positions, source.positions);\n this.width = defaultValue(this.width, source.width);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.material = defaultValue(this.material, source.material);\n this.depthFailMaterial = defaultValue(\n this.depthFailMaterial,\n source.depthFailMaterial\n );\n this.arcType = defaultValue(this.arcType, source.arcType);\n this.clampToGround = defaultValue(this.clampToGround, source.clampToGround);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.classificationType = defaultValue(\n this.classificationType,\n source.classificationType\n );\n this.zIndex = defaultValue(this.zIndex, source.zIndex);\n};\nexport default PolylineGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} PolylineVolumeGraphics.ConstructorOptions\n *\n * Initialization options for the PolylineVolumeGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the volume.\n * @property {Property | Array<Cartesian3>} [positions] A Property specifying the array of {@link Cartesian3} positions which define the line strip.\n * @property {Property | Array<Cartesian2>} [shape] A Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded.\n * @property {Property | CornerType} [cornerType=CornerType.ROUNDED] A {@link CornerType} Property specifying the style of the corners.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the volume is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the volume.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the volume is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the volume casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this volume will be displayed.\n */\n\n/**\n * Describes a polyline volume defined as a line strip and corresponding two dimensional shape which is extruded along it.\n * The resulting volume conforms to the curvature of the globe.\n *\n * @alias PolylineVolumeGraphics\n * @constructor\n *\n * @param {PolylineVolumeGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline%20Volume.html|Cesium Sandcastle Polyline Volume Demo}\n */\nfunction PolylineVolumeGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._positions = undefined;\n this._positionsSubscription = undefined;\n this._shape = undefined;\n this._shapeSubscription = undefined;\n this._cornerType = undefined;\n this._cornerTypeSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubsription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(PolylineVolumeGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof PolylineVolumeGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the volume.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the line strip.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n */\n positions: createPropertyDescriptor(\"positions\"),\n\n /**\n * Gets or sets the Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n */\n shape: createPropertyDescriptor(\"shape\"),\n\n /**\n * Gets or sets the {@link CornerType} Property specifying the style of the corners.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default CornerType.ROUNDED\n */\n cornerType: createPropertyDescriptor(\"cornerType\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between points on the volume.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the volume is filled with the provided material.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the volume.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the volume is outlined.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the volume\n * casts or receives shadows from light sources.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this volume will be displayed.\n * @memberof PolylineVolumeGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolylineVolumeGraphics} [result] The object onto which to store the result.\n * @returns {PolylineVolumeGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolylineVolumeGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new PolylineVolumeGraphics(this);\n }\n result.show = this.show;\n result.positions = this.positions;\n result.shape = this.shape;\n result.cornerType = this.cornerType;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolylineVolumeGraphics} source The object to be merged into this object.\n */\nPolylineVolumeGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.positions = defaultValue(this.positions, source.positions);\n this.shape = defaultValue(this.shape, source.shape);\n this.cornerType = defaultValue(this.cornerType, source.cornerType);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default PolylineVolumeGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} RectangleGraphics.ConstructorOptions\n *\n * Initialization options for the RectangleGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the rectangle.\n * @property {Property | Rectangle} [coordinates] The Property specifying the {@link Rectangle}.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the rectangle relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the rectangle's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [rotation=0.0] A numeric property specifying the rotation of the rectangle clockwise from north.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the rectangle texture counter-clockwise from north.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between points on the rectangle.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the rectangle is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the rectangle.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the rectangle is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the rectangle casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this rectangle will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground.\n * @property {Property | number} [zIndex=0] A Property specifying the zIndex used for ordering ground geometry. Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified.\n */\n\n/**\n * Describes graphics for a {@link Rectangle}.\n * The rectangle conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n *\n * @alias RectangleGraphics\n * @constructor\n *\n * @param {RectangleGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Rectangle.html|Cesium Sandcastle Rectangle Demo}\n */\nfunction RectangleGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._coordinates = undefined;\n this._coordinatesSubscription = undefined;\n this._height = undefined;\n this._heightSubscription = undefined;\n this._heightReference = undefined;\n this._heightReferenceSubscription = undefined;\n this._extrudedHeight = undefined;\n this._extrudedHeightSubscription = undefined;\n this._extrudedHeightReference = undefined;\n this._extrudedHeightReferenceSubscription = undefined;\n this._rotation = undefined;\n this._rotationSubscription = undefined;\n this._stRotation = undefined;\n this._stRotationSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distancedisplayConditionSubscription = undefined;\n this._classificationType = undefined;\n this._classificationTypeSubscription = undefined;\n this._zIndex = undefined;\n this._zIndexSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(RectangleGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof RectangleGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the rectangle.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the {@link Rectangle}.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n */\n coordinates: createPropertyDescriptor(\"coordinates\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the rectangle.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n height: createPropertyDescriptor(\"height\"),\n\n /**\n * Gets or sets the Property specifying the {@link HeightReference}.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n heightReference: createPropertyDescriptor(\"heightReference\"),\n\n /**\n * Gets or sets the numeric Property specifying the altitude of the rectangle extrusion.\n * Setting this property creates volume starting at height and ending at this altitude.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n */\n extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n /**\n * Gets or sets the Property specifying the extruded {@link HeightReference}.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default HeightReference.NONE\n */\n extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n /**\n * Gets or sets the numeric property specifying the rotation of the rectangle clockwise from north.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n rotation: createPropertyDescriptor(\"rotation\"),\n\n /**\n * Gets or sets the numeric property specifying the rotation of the rectangle texture counter-clockwise from north.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default 0\n */\n stRotation: createPropertyDescriptor(\"stRotation\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between points on the rectangle.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the rectangle is filled with the provided material.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the rectangle.\n * @memberof RectangleGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the rectangle is outlined.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the rectangle\n * casts or receives shadows from light sources.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this rectangle will be displayed.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n\n /**\n * Gets or sets the {@link ClassificationType} Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof RectangleGraphics.prototype\n * @type {Property|undefined}\n * @default ClassificationType.BOTH\n */\n classificationType: createPropertyDescriptor(\"classificationType\"),\n\n /**\n * Gets or sets the zIndex Property specifying the ordering of the rectangle. Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified.\n * @memberof RectangleGraphics.prototype\n * @type {ConstantProperty|undefined}\n * @default 0\n */\n zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {RectangleGraphics} [result] The object onto which to store the result.\n * @returns {RectangleGraphics} The modified result parameter or a new instance if one was not provided.\n */\nRectangleGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new RectangleGraphics(this);\n }\n result.show = this.show;\n result.coordinates = this.coordinates;\n result.height = this.height;\n result.heightReference = this.heightReference;\n result.extrudedHeight = this.extrudedHeight;\n result.extrudedHeightReference = this.extrudedHeightReference;\n result.rotation = this.rotation;\n result.stRotation = this.stRotation;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n result.classificationType = this.classificationType;\n result.zIndex = this.zIndex;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {RectangleGraphics} source The object to be merged into this object.\n */\nRectangleGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.coordinates = defaultValue(this.coordinates, source.coordinates);\n this.height = defaultValue(this.height, source.height);\n this.heightReference = defaultValue(\n this.heightReference,\n source.heightReference\n );\n this.extrudedHeight = defaultValue(\n this.extrudedHeight,\n source.extrudedHeight\n );\n this.extrudedHeightReference = defaultValue(\n this.extrudedHeightReference,\n source.extrudedHeightReference\n );\n this.rotation = defaultValue(this.rotation, source.rotation);\n this.stRotation = defaultValue(this.stRotation, source.stRotation);\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n this.classificationType = defaultValue(\n this.classificationType,\n source.classificationType\n );\n this.zIndex = defaultValue(this.zIndex, source.zIndex);\n};\nexport default RectangleGraphics;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {Object} WallGraphics.ConstructorOptions\n *\n * Initialization options for the WallGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the wall.\n * @property {Property | Array<Cartesian3>} [positions] A Property specifying the array of {@link Cartesian3} positions which define the top of the wall.\n * @property {Property | Array<number>} [minimumHeights] A Property specifying an array of heights to be used for the bottom of the wall instead of the globe surface.\n * @property {Property | Array<number>} [maximumHeights] A Property specifying an array of heights to be used for the top of the wall instead of the height of each position.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the wall is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the wall.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the wall is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the wall casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this wall will be displayed.\n */\n\n/**\n * Describes a two dimensional wall defined as a line strip and optional maximum and minimum heights.\n * The wall conforms to the curvature of the globe and can be placed along the surface or at altitude.\n *\n * @alias WallGraphics\n * @constructor\n *\n * @param {WallGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Wall.html|Cesium Sandcastle Wall Demo}\n */\nfunction WallGraphics(options) {\n this._definitionChanged = new Event();\n this._show = undefined;\n this._showSubscription = undefined;\n this._positions = undefined;\n this._positionsSubscription = undefined;\n this._minimumHeights = undefined;\n this._minimumHeightsSubscription = undefined;\n this._maximumHeights = undefined;\n this._maximumHeightsSubscription = undefined;\n this._granularity = undefined;\n this._granularitySubscription = undefined;\n this._fill = undefined;\n this._fillSubscription = undefined;\n this._material = undefined;\n this._materialSubscription = undefined;\n this._outline = undefined;\n this._outlineSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n this._shadows = undefined;\n this._shadowsSubscription = undefined;\n this._distanceDisplayCondition = undefined;\n this._distanceDisplayConditionSubscription = undefined;\n\n this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT));\n}\n\nObject.defineProperties(WallGraphics.prototype, {\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof WallGraphics.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the boolean Property specifying the visibility of the wall.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n show: createPropertyDescriptor(\"show\"),\n\n /**\n * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the top of the wall.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n */\n positions: createPropertyDescriptor(\"positions\"),\n\n /**\n * Gets or sets the Property specifying an array of heights to be used for the bottom of the wall instead of the surface of the globe.\n * If defined, the array must be the same length as {@link Wall#positions}.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n */\n minimumHeights: createPropertyDescriptor(\"minimumHeights\"),\n\n /**\n * Gets or sets the Property specifying an array of heights to be used for the top of the wall instead of the height of each position.\n * If defined, the array must be the same length as {@link Wall#positions}.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n */\n maximumHeights: createPropertyDescriptor(\"maximumHeights\"),\n\n /**\n * Gets or sets the numeric Property specifying the angular distance between points on the wall.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default {CesiumMath.RADIANS_PER_DEGREE}\n */\n granularity: createPropertyDescriptor(\"granularity\"),\n\n /**\n * Gets or sets the boolean Property specifying whether the wall is filled with the provided material.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default true\n */\n fill: createPropertyDescriptor(\"fill\"),\n\n /**\n * Gets or sets the Property specifying the material used to fill the wall.\n * @memberof WallGraphics.prototype\n * @type {MaterialProperty}\n * @default Color.WHITE\n */\n material: createMaterialPropertyDescriptor(\"material\"),\n\n /**\n * Gets or sets the Property specifying whether the wall is outlined.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default false\n */\n outline: createPropertyDescriptor(\"outline\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n /**\n * Get or sets the enum Property specifying whether the wall\n * casts or receives shadows from light sources.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n * @default ShadowMode.DISABLED\n */\n shadows: createPropertyDescriptor(\"shadows\"),\n\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this wall will be displayed.\n * @memberof WallGraphics.prototype\n * @type {Property|undefined}\n */\n distanceDisplayCondition: createPropertyDescriptor(\n \"distanceDisplayCondition\"\n ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {WallGraphics} [result] The object onto which to store the result.\n * @returns {WallGraphics} The modified result parameter or a new instance if one was not provided.\n */\nWallGraphics.prototype.clone = function (result) {\n if (!defined(result)) {\n return new WallGraphics(this);\n }\n result.show = this.show;\n result.positions = this.positions;\n result.minimumHeights = this.minimumHeights;\n result.maximumHeights = this.maximumHeights;\n result.granularity = this.granularity;\n result.fill = this.fill;\n result.material = this.material;\n result.outline = this.outline;\n result.outlineColor = this.outlineColor;\n result.outlineWidth = this.outlineWidth;\n result.shadows = this.shadows;\n result.distanceDisplayCondition = this.distanceDisplayCondition;\n return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {WallGraphics} source The object to be merged into this object.\n */\nWallGraphics.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(this.show, source.show);\n this.positions = defaultValue(this.positions, source.positions);\n this.minimumHeights = defaultValue(\n this.minimumHeights,\n source.minimumHeights\n );\n this.maximumHeights = defaultValue(\n this.maximumHeights,\n source.maximumHeights\n );\n this.granularity = defaultValue(this.granularity, source.granularity);\n this.fill = defaultValue(this.fill, source.fill);\n this.material = defaultValue(this.material, source.material);\n this.outline = defaultValue(this.outline, source.outline);\n this.outlineColor = defaultValue(this.outlineColor, source.outlineColor);\n this.outlineWidth = defaultValue(this.outlineWidth, source.outlineWidth);\n this.shadows = defaultValue(this.shadows, source.shadows);\n this.distanceDisplayCondition = defaultValue(\n this.distanceDisplayCondition,\n source.distanceDisplayCondition\n );\n};\nexport default WallGraphics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport BoxGraphics from \"./BoxGraphics.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport CorridorGraphics from \"./CorridorGraphics.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport createRawPropertyDescriptor from \"./createRawPropertyDescriptor.js\";\nimport CylinderGraphics from \"./CylinderGraphics.js\";\nimport EllipseGraphics from \"./EllipseGraphics.js\";\nimport EllipsoidGraphics from \"./EllipsoidGraphics.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport Cesium3DTilesetGraphics from \"./Cesium3DTilesetGraphics.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PlaneGraphics from \"./PlaneGraphics.js\";\nimport PointGraphics from \"./PointGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PolylineVolumeGraphics from \"./PolylineVolumeGraphics.js\";\nimport Property from \"./Property.js\";\nimport PropertyBag from \"./PropertyBag.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport WallGraphics from \"./WallGraphics.js\";\n\nvar cartoScratch = new Cartographic();\n\nfunction createConstantPositionProperty(value) {\n return new ConstantPositionProperty(value);\n}\n\nfunction createPositionPropertyDescriptor(name) {\n return createPropertyDescriptor(\n name,\n undefined,\n createConstantPositionProperty\n );\n}\n\nfunction createPropertyTypeDescriptor(name, Type) {\n return createPropertyDescriptor(name, undefined, function (value) {\n if (value instanceof Type) {\n return value;\n }\n return new Type(value);\n });\n}\n\n/**\n * @typedef {Object} Entity.ConstructorOptions\n *\n * Initialization options for the Entity constructor\n *\n * @property {String} [id] A unique identifier for this object. If none is provided, a GUID is generated.\n * @property {String} [name] A human readable name to display to users. It does not have to be unique.\n * @property {TimeIntervalCollection} [availability] The availability, if any, associated with this object.\n * @property {Boolean} [show] A boolean value indicating if the entity and its children are displayed.\n * @property {Property | string} [description] A string Property specifying an HTML description for this entity.\n * @property {PositionProperty | Cartesian3} [position] A Property specifying the entity position.\n * @property {Property} [orientation] A Property specifying the entity orientation.\n * @property {Property} [viewFrom] A suggested initial offset for viewing this object.\n * @property {Entity} [parent] A parent entity to associate with this entity.\n * @property {BillboardGraphics | BillboardGraphics.ConstructorOptions} [billboard] A billboard to associate with this entity.\n * @property {BoxGraphics | BoxGraphics.ConstructorOptions} [box] A box to associate with this entity.\n * @property {CorridorGraphics | CorridorGraphics.ConstructorOptions} [corridor] A corridor to associate with this entity.\n * @property {CylinderGraphics | CylinderGraphics.ConstructorOptions} [cylinder] A cylinder to associate with this entity.\n * @property {EllipseGraphics | EllipseGraphics.ConstructorOptions} [ellipse] A ellipse to associate with this entity.\n * @property {EllipsoidGraphics | EllipsoidGraphics.ConstructorOptions} [ellipsoid] A ellipsoid to associate with this entity.\n * @property {LabelGraphics | LabelGraphics.ConstructorOptions} [label] A options.label to associate with this entity.\n * @property {ModelGraphics | ModelGraphics.ConstructorOptions} [model] A model to associate with this entity.\n * @property {Cesium3DTilesetGraphics | Cesium3DTilesetGraphics.ConstructorOptions} [tileset] A 3D Tiles tileset to associate with this entity.\n * @property {PathGraphics | PathGraphics.ConstructorOptions} [path] A path to associate with this entity.\n * @property {PlaneGraphics | PlaneGraphics.ConstructorOptions} [plane] A plane to associate with this entity.\n * @property {PointGraphics | PointGraphics.ConstructorOptions} [point] A point to associate with this entity.\n * @property {PolygonGraphics | PolygonGraphics.ConstructorOptions} [polygon] A polygon to associate with this entity.\n * @property {PolylineGraphics | PolylineGraphics.ConstructorOptions} [polyline] A polyline to associate with this entity.\n * @property {PropertyBag | Object.<string,*>} [properties] Arbitrary properties to associate with this entity.\n * @property {PolylineVolumeGraphics | PolylineVolumeGraphics.ConstructorOptions} [polylineVolume] A polylineVolume to associate with this entity.\n * @property {RectangleGraphics | RectangleGraphics.ConstructorOptions} [rectangle] A rectangle to associate with this entity.\n * @property {WallGraphics | WallGraphics.ConstructorOptions} [wall] A wall to associate with this entity.\n */\n\n/**\n * Entity instances aggregate multiple forms of visualization into a single high-level object.\n * They can be created manually and added to {@link Viewer#entities} or be produced by\n * data sources, such as {@link CzmlDataSource} and {@link GeoJsonDataSource}.\n * @alias Entity\n * @constructor\n *\n * @param {Entity.ConstructorOptions} [options] Object describing initialization options\n *\n * @see {@link https://cesium.com/docs/tutorials/creating-entities/|Creating Entities}\n */\nfunction Entity(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var id = options.id;\n if (!defined(id)) {\n id = createGuid();\n }\n\n this._availability = undefined;\n this._id = id;\n this._definitionChanged = new Event();\n this._name = options.name;\n this._show = defaultValue(options.show, true);\n this._parent = undefined;\n this._propertyNames = [\n \"billboard\",\n \"box\",\n \"corridor\",\n \"cylinder\",\n \"description\",\n \"ellipse\", //\n \"ellipsoid\",\n \"label\",\n \"model\",\n \"tileset\",\n \"orientation\",\n \"path\",\n \"plane\",\n \"point\",\n \"polygon\", //\n \"polyline\",\n \"polylineVolume\",\n \"position\",\n \"properties\",\n \"rectangle\",\n \"viewFrom\",\n \"wall\",\n ];\n\n this._billboard = undefined;\n this._billboardSubscription = undefined;\n this._box = undefined;\n this._boxSubscription = undefined;\n this._corridor = undefined;\n this._corridorSubscription = undefined;\n this._cylinder = undefined;\n this._cylinderSubscription = undefined;\n this._description = undefined;\n this._descriptionSubscription = undefined;\n this._ellipse = undefined;\n this._ellipseSubscription = undefined;\n this._ellipsoid = undefined;\n this._ellipsoidSubscription = undefined;\n this._label = undefined;\n this._labelSubscription = undefined;\n this._model = undefined;\n this._modelSubscription = undefined;\n this._tileset = undefined;\n this._tilesetSubscription = undefined;\n this._orientation = undefined;\n this._orientationSubscription = undefined;\n this._path = undefined;\n this._pathSubscription = undefined;\n this._plane = undefined;\n this._planeSubscription = undefined;\n this._point = undefined;\n this._pointSubscription = undefined;\n this._polygon = undefined;\n this._polygonSubscription = undefined;\n this._polyline = undefined;\n this._polylineSubscription = undefined;\n this._polylineVolume = undefined;\n this._polylineVolumeSubscription = undefined;\n this._position = undefined;\n this._positionSubscription = undefined;\n this._properties = undefined;\n this._propertiesSubscription = undefined;\n this._rectangle = undefined;\n this._rectangleSubscription = undefined;\n this._viewFrom = undefined;\n this._viewFromSubscription = undefined;\n this._wall = undefined;\n this._wallSubscription = undefined;\n this._children = [];\n\n /**\n * Gets or sets the entity collection that this entity belongs to.\n * @type {EntityCollection}\n */\n this.entityCollection = undefined;\n\n this.parent = options.parent;\n this.merge(options);\n}\n\nfunction updateShow(entity, children, isShowing) {\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n var childShow = child._show;\n var oldValue = !isShowing && childShow;\n var newValue = isShowing && childShow;\n if (oldValue !== newValue) {\n updateShow(child, child._children, isShowing);\n }\n }\n entity._definitionChanged.raiseEvent(\n entity,\n \"isShowing\",\n isShowing,\n !isShowing\n );\n}\n\nObject.defineProperties(Entity.prototype, {\n /**\n * The availability, if any, associated with this object.\n * If availability is undefined, it is assumed that this object's\n * other properties will return valid data for any provided time.\n * If availability exists, the objects other properties will only\n * provide valid data if queried within the given interval.\n * @memberof Entity.prototype\n * @type {TimeIntervalCollection|undefined}\n */\n availability: createRawPropertyDescriptor(\"availability\"),\n /**\n * Gets the unique ID associated with this object.\n * @memberof Entity.prototype\n * @type {String}\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * Gets the event that is raised whenever a property or sub-property is changed or modified.\n * @memberof Entity.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the name of the object. The name is intended for end-user\n * consumption and does not need to be unique.\n * @memberof Entity.prototype\n * @type {String|undefined}\n */\n name: createRawPropertyDescriptor(\"name\"),\n /**\n * Gets or sets whether this entity should be displayed. When set to true,\n * the entity is only displayed if the parent entity's show property is also true.\n * @memberof Entity.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (value === this._show) {\n return;\n }\n\n var wasShowing = this.isShowing;\n this._show = value;\n var isShowing = this.isShowing;\n\n if (wasShowing !== isShowing) {\n updateShow(this, this._children, isShowing);\n }\n\n this._definitionChanged.raiseEvent(this, \"show\", value, !value);\n },\n },\n /**\n * Gets whether this entity is being displayed, taking into account\n * the visibility of any ancestor entities.\n * @memberof Entity.prototype\n * @type {Boolean}\n */\n isShowing: {\n get: function () {\n return (\n this._show &&\n (!defined(this.entityCollection) || this.entityCollection.show) &&\n (!defined(this._parent) || this._parent.isShowing)\n );\n },\n },\n /**\n * Gets or sets the parent object.\n * @memberof Entity.prototype\n * @type {Entity|undefined}\n */\n parent: {\n get: function () {\n return this._parent;\n },\n set: function (value) {\n var oldValue = this._parent;\n\n if (oldValue === value) {\n return;\n }\n\n var wasShowing = this.isShowing;\n if (defined(oldValue)) {\n var index = oldValue._children.indexOf(this);\n oldValue._children.splice(index, 1);\n }\n\n this._parent = value;\n if (defined(value)) {\n value._children.push(this);\n }\n\n var isShowing = this.isShowing;\n\n if (wasShowing !== isShowing) {\n updateShow(this, this._children, isShowing);\n }\n\n this._definitionChanged.raiseEvent(this, \"parent\", value, oldValue);\n },\n },\n /**\n * Gets the names of all properties registered on this instance.\n * @memberof Entity.prototype\n * @type {string[]}\n */\n propertyNames: {\n get: function () {\n return this._propertyNames;\n },\n },\n /**\n * Gets or sets the billboard.\n * @memberof Entity.prototype\n * @type {BillboardGraphics|undefined}\n */\n billboard: createPropertyTypeDescriptor(\"billboard\", BillboardGraphics),\n /**\n * Gets or sets the box.\n * @memberof Entity.prototype\n * @type {BoxGraphics|undefined}\n */\n box: createPropertyTypeDescriptor(\"box\", BoxGraphics),\n /**\n * Gets or sets the corridor.\n * @memberof Entity.prototype\n * @type {CorridorGraphics|undefined}\n */\n corridor: createPropertyTypeDescriptor(\"corridor\", CorridorGraphics),\n /**\n * Gets or sets the cylinder.\n * @memberof Entity.prototype\n * @type {CylinderGraphics|undefined}\n */\n cylinder: createPropertyTypeDescriptor(\"cylinder\", CylinderGraphics),\n /**\n * Gets or sets the description.\n * @memberof Entity.prototype\n * @type {Property|undefined}\n */\n description: createPropertyDescriptor(\"description\"),\n /**\n * Gets or sets the ellipse.\n * @memberof Entity.prototype\n * @type {EllipseGraphics|undefined}\n */\n ellipse: createPropertyTypeDescriptor(\"ellipse\", EllipseGraphics),\n /**\n * Gets or sets the ellipsoid.\n * @memberof Entity.prototype\n * @type {EllipsoidGraphics|undefined}\n */\n ellipsoid: createPropertyTypeDescriptor(\"ellipsoid\", EllipsoidGraphics),\n /**\n * Gets or sets the label.\n * @memberof Entity.prototype\n * @type {LabelGraphics|undefined}\n */\n label: createPropertyTypeDescriptor(\"label\", LabelGraphics),\n /**\n * Gets or sets the model.\n * @memberof Entity.prototype\n * @type {ModelGraphics|undefined}\n */\n model: createPropertyTypeDescriptor(\"model\", ModelGraphics),\n /**\n * Gets or sets the tileset.\n * @memberof Entity.prototype\n * @type {Cesium3DTilesetGraphics|undefined}\n */\n tileset: createPropertyTypeDescriptor(\"tileset\", Cesium3DTilesetGraphics),\n /**\n * Gets or sets the orientation.\n * @memberof Entity.prototype\n * @type {Property|undefined}\n */\n orientation: createPropertyDescriptor(\"orientation\"),\n /**\n * Gets or sets the path.\n * @memberof Entity.prototype\n * @type {PathGraphics|undefined}\n */\n path: createPropertyTypeDescriptor(\"path\", PathGraphics),\n /**\n * Gets or sets the plane.\n * @memberof Entity.prototype\n * @type {PlaneGraphics|undefined}\n */\n plane: createPropertyTypeDescriptor(\"plane\", PlaneGraphics),\n /**\n * Gets or sets the point graphic.\n * @memberof Entity.prototype\n * @type {PointGraphics|undefined}\n */\n point: createPropertyTypeDescriptor(\"point\", PointGraphics),\n /**\n * Gets or sets the polygon.\n * @memberof Entity.prototype\n * @type {PolygonGraphics|undefined}\n */\n polygon: createPropertyTypeDescriptor(\"polygon\", PolygonGraphics),\n /**\n * Gets or sets the polyline.\n * @memberof Entity.prototype\n * @type {PolylineGraphics|undefined}\n */\n polyline: createPropertyTypeDescriptor(\"polyline\", PolylineGraphics),\n /**\n * Gets or sets the polyline volume.\n * @memberof Entity.prototype\n * @type {PolylineVolumeGraphics|undefined}\n */\n polylineVolume: createPropertyTypeDescriptor(\n \"polylineVolume\",\n PolylineVolumeGraphics\n ),\n /**\n * Gets or sets the bag of arbitrary properties associated with this entity.\n * @memberof Entity.prototype\n * @type {PropertyBag|undefined}\n */\n properties: createPropertyTypeDescriptor(\"properties\", PropertyBag),\n /**\n * Gets or sets the position.\n * @memberof Entity.prototype\n * @type {PositionProperty|undefined}\n */\n position: createPositionPropertyDescriptor(\"position\"),\n /**\n * Gets or sets the rectangle.\n * @memberof Entity.prototype\n * @type {RectangleGraphics|undefined}\n */\n rectangle: createPropertyTypeDescriptor(\"rectangle\", RectangleGraphics),\n /**\n * Gets or sets the suggested initial offset when tracking this object.\n * The offset is typically defined in the east-north-up reference frame,\n * but may be another frame depending on the object's velocity.\n * @memberof Entity.prototype\n * @type {Property|undefined}\n */\n viewFrom: createPropertyDescriptor(\"viewFrom\"),\n /**\n * Gets or sets the wall.\n * @memberof Entity.prototype\n * @type {WallGraphics|undefined}\n */\n wall: createPropertyTypeDescriptor(\"wall\", WallGraphics),\n});\n\n/**\n * Given a time, returns true if this object should have data during that time.\n *\n * @param {JulianDate} time The time to check availability for.\n * @returns {Boolean} true if the object should have data during the provided time, false otherwise.\n */\nEntity.prototype.isAvailable = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var availability = this._availability;\n return !defined(availability) || availability.contains(time);\n};\n\n/**\n * Adds a property to this object. Once a property is added, it can be\n * observed with {@link Entity#definitionChanged} and composited\n * with {@link CompositeEntityCollection}\n *\n * @param {String} propertyName The name of the property to add.\n *\n * @exception {DeveloperError} \"propertyName\" is a reserved property name.\n * @exception {DeveloperError} \"propertyName\" is already a registered property.\n */\nEntity.prototype.addProperty = function (propertyName) {\n var propertyNames = this._propertyNames;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(propertyName)) {\n throw new DeveloperError(\"propertyName is required.\");\n }\n if (propertyNames.indexOf(propertyName) !== -1) {\n throw new DeveloperError(\n propertyName + \" is already a registered property.\"\n );\n }\n if (propertyName in this) {\n throw new DeveloperError(propertyName + \" is a reserved property name.\");\n }\n //>>includeEnd('debug');\n\n propertyNames.push(propertyName);\n Object.defineProperty(\n this,\n propertyName,\n createRawPropertyDescriptor(propertyName, true)\n );\n};\n\n/**\n * Removed a property previously added with addProperty.\n *\n * @param {String} propertyName The name of the property to remove.\n *\n * @exception {DeveloperError} \"propertyName\" is a reserved property name.\n * @exception {DeveloperError} \"propertyName\" is not a registered property.\n */\nEntity.prototype.removeProperty = function (propertyName) {\n var propertyNames = this._propertyNames;\n var index = propertyNames.indexOf(propertyName);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(propertyName)) {\n throw new DeveloperError(\"propertyName is required.\");\n }\n if (index === -1) {\n throw new DeveloperError(propertyName + \" is not a registered property.\");\n }\n //>>includeEnd('debug');\n\n this._propertyNames.splice(index, 1);\n delete this[propertyName];\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {Entity} source The object to be merged into this object.\n */\nEntity.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n //Name, show, and availability are not Property objects and are currently handled differently.\n //source.show is intentionally ignored because this.show always has a value.\n this.name = defaultValue(this.name, source.name);\n this.availability = defaultValue(this.availability, source.availability);\n\n var propertyNames = this._propertyNames;\n var sourcePropertyNames = defined(source._propertyNames)\n ? source._propertyNames\n : Object.keys(source);\n var propertyNamesLength = sourcePropertyNames.length;\n for (var i = 0; i < propertyNamesLength; i++) {\n var name = sourcePropertyNames[i];\n\n //While source is required by the API to be an Entity, we internally call this method from the\n //constructor with an options object to configure initial custom properties.\n //So we need to ignore reserved-non-property.\n if (name === \"parent\" || name === \"name\" || name === \"availability\") {\n continue;\n }\n\n var targetProperty = this[name];\n var sourceProperty = source[name];\n\n //Custom properties that are registered on the source entity must also\n //get registered on this entity.\n if (!defined(targetProperty) && propertyNames.indexOf(name) === -1) {\n this.addProperty(name);\n }\n\n if (defined(sourceProperty)) {\n if (defined(targetProperty)) {\n if (defined(targetProperty.merge)) {\n targetProperty.merge(sourceProperty);\n }\n } else if (\n defined(sourceProperty.merge) &&\n defined(sourceProperty.clone)\n ) {\n this[name] = sourceProperty.clone();\n } else {\n this[name] = sourceProperty;\n }\n }\n }\n};\n\nvar matrix3Scratch = new Matrix3();\nvar positionScratch = new Cartesian3();\nvar orientationScratch = new Quaternion();\n\n/**\n * Computes the model matrix for the entity's transform at specified time. Returns undefined if orientation or position\n * are undefined.\n *\n * @param {JulianDate} time The time to retrieve model matrix for.\n * @param {Matrix4} [result] The object onto which to store the result.\n *\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. Result is undefined if position or orientation are undefined.\n */\nEntity.prototype.computeModelMatrix = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"time\", time);\n //>>includeEnd('debug');\n var position = Property.getValueOrUndefined(\n this._position,\n time,\n positionScratch\n );\n if (!defined(position)) {\n return undefined;\n }\n\n var orientation = Property.getValueOrUndefined(\n this._orientation,\n time,\n orientationScratch\n );\n if (!defined(orientation)) {\n result = Transforms.eastNorthUpToFixedFrame(position, undefined, result);\n } else {\n result = Matrix4.fromRotationTranslation(\n Matrix3.fromQuaternion(orientation, matrix3Scratch),\n position,\n result\n );\n }\n return result;\n};\n\n/**\n * @private\n */\nEntity.prototype.computeModelMatrixForHeightReference = function (\n time,\n heightReferenceProperty,\n heightOffset,\n ellipsoid,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"time\", time);\n //>>includeEnd('debug');\n var heightReference = Property.getValueOrDefault(\n heightReferenceProperty,\n time,\n HeightReference.NONE\n );\n var position = Property.getValueOrUndefined(\n this._position,\n time,\n positionScratch\n );\n if (\n heightReference === HeightReference.NONE ||\n !defined(position) ||\n Cartesian3.equalsEpsilon(position, Cartesian3.ZERO, CesiumMath.EPSILON8)\n ) {\n return this.computeModelMatrix(time, result);\n }\n\n var carto = ellipsoid.cartesianToCartographic(position, cartoScratch);\n if (heightReference === HeightReference.CLAMP_TO_GROUND) {\n carto.height = heightOffset;\n } else {\n carto.height += heightOffset;\n }\n position = ellipsoid.cartographicToCartesian(carto, position);\n\n var orientation = Property.getValueOrUndefined(\n this._orientation,\n time,\n orientationScratch\n );\n if (!defined(orientation)) {\n result = Transforms.eastNorthUpToFixedFrame(position, undefined, result);\n } else {\n result = Matrix4.fromRotationTranslation(\n Matrix3.fromQuaternion(orientation, matrix3Scratch),\n position,\n result\n );\n }\n return result;\n};\n\n/**\n * Checks if the given Scene supports materials besides Color on Entities draped on terrain or 3D Tiles.\n * If this feature is not supported, Entities with non-color materials but no `height` will\n * instead be rendered as if height is 0.\n *\n * @param {Scene} scene The current scene.\n * @returns {Boolean} Whether or not the current scene supports materials for entities on terrain.\n */\nEntity.supportsMaterialsforEntitiesOnTerrain = function (scene) {\n return GroundPrimitive.supportsMaterials(scene);\n};\n\n/**\n * Checks if the given Scene supports polylines clamped to terrain or 3D Tiles.\n * If this feature is not supported, Entities with PolylineGraphics will be rendered with vertices at\n * the provided heights and using the `arcType` parameter instead of clamped to the ground.\n *\n * @param {Scene} scene The current scene.\n * @returns {Boolean} Whether or not the current scene supports polylines on terrain or 3D TIles.\n */\nEntity.supportsPolylinesOnTerrain = function (scene) {\n return GroundPolylinePrimitive.isSupported(scene);\n};\nexport default Entity;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport Entity from \"./Entity.js\";\nimport Property from \"./Property.js\";\n\nvar defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nvar defaultShow = new ConstantProperty(true);\nvar defaultFill = new ConstantProperty(true);\nvar defaultOutline = new ConstantProperty(false);\nvar defaultOutlineColor = new ConstantProperty(Color.BLACK);\nvar defaultShadows = new ConstantProperty(ShadowMode.DISABLED);\nvar defaultDistanceDisplayCondition = new ConstantProperty(\n new DistanceDisplayCondition()\n);\nvar defaultClassificationType = new ConstantProperty(ClassificationType.BOTH);\n\n/**\n * An abstract class for updating geometry entities.\n * @alias GeometryUpdater\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {Entity} options.entity The entity containing the geometry to be visualized.\n * @param {Scene} options.scene The scene where visualization is taking place.\n * @param {Object} options.geometryOptions Options for the geometry\n * @param {String} options.geometryPropertyName The geometry property name\n * @param {String[]} options.observedPropertyNames The entity properties this geometry cares about\n */\nfunction GeometryUpdater(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.entity\", options.entity);\n Check.defined(\"options.scene\", options.scene);\n Check.defined(\"options.geometryOptions\", options.geometryOptions);\n Check.defined(\"options.geometryPropertyName\", options.geometryPropertyName);\n Check.defined(\"options.observedPropertyNames\", options.observedPropertyNames);\n //>>includeEnd('debug');\n\n var entity = options.entity;\n var geometryPropertyName = options.geometryPropertyName;\n\n this._entity = entity;\n this._scene = options.scene;\n this._fillEnabled = false;\n this._isClosed = false;\n this._onTerrain = false;\n this._dynamic = false;\n this._outlineEnabled = false;\n this._geometryChanged = new Event();\n this._showProperty = undefined;\n this._materialProperty = undefined;\n this._showOutlineProperty = undefined;\n this._outlineColorProperty = undefined;\n this._outlineWidth = 1.0;\n this._shadowsProperty = undefined;\n this._distanceDisplayConditionProperty = undefined;\n this._classificationTypeProperty = undefined;\n this._options = options.geometryOptions;\n this._geometryPropertyName = geometryPropertyName;\n this._id = geometryPropertyName + \"-\" + entity.id;\n this._observedPropertyNames = options.observedPropertyNames;\n this._supportsMaterialsforEntitiesOnTerrain = Entity.supportsMaterialsforEntitiesOnTerrain(\n options.scene\n );\n}\n\nObject.defineProperties(GeometryUpdater.prototype, {\n /**\n * Gets the unique ID associated with this updater\n * @memberof GeometryUpdater.prototype\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * Gets the entity associated with this geometry.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Entity}\n * @readonly\n */\n entity: {\n get: function () {\n return this._entity;\n },\n },\n /**\n * Gets a value indicating if the geometry has a fill component.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n fillEnabled: {\n get: function () {\n return this._fillEnabled;\n },\n },\n /**\n * Gets a value indicating if fill visibility varies with simulation time.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n hasConstantFill: {\n get: function () {\n return (\n !this._fillEnabled ||\n (!defined(this._entity.availability) &&\n Property.isConstant(this._showProperty) &&\n Property.isConstant(this._fillProperty))\n );\n },\n },\n /**\n * Gets the material property used to fill the geometry.\n * @memberof GeometryUpdater.prototype\n *\n * @type {MaterialProperty}\n * @readonly\n */\n fillMaterialProperty: {\n get: function () {\n return this._materialProperty;\n },\n },\n /**\n * Gets a value indicating if the geometry has an outline component.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n outlineEnabled: {\n get: function () {\n return this._outlineEnabled;\n },\n },\n /**\n * Gets a value indicating if the geometry has an outline component.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n hasConstantOutline: {\n get: function () {\n return (\n !this._outlineEnabled ||\n (!defined(this._entity.availability) &&\n Property.isConstant(this._showProperty) &&\n Property.isConstant(this._showOutlineProperty))\n );\n },\n },\n /**\n * Gets the {@link Color} property for the geometry outline.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n outlineColorProperty: {\n get: function () {\n return this._outlineColorProperty;\n },\n },\n /**\n * Gets the constant with of the geometry outline, in pixels.\n * This value is only valid if isDynamic is false.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Number}\n * @readonly\n */\n outlineWidth: {\n get: function () {\n return this._outlineWidth;\n },\n },\n /**\n * Gets the property specifying whether the geometry\n * casts or receives shadows from light sources.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n shadowsProperty: {\n get: function () {\n return this._shadowsProperty;\n },\n },\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n distanceDisplayConditionProperty: {\n get: function () {\n return this._distanceDisplayConditionProperty;\n },\n },\n /**\n * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n classificationTypeProperty: {\n get: function () {\n return this._classificationTypeProperty;\n },\n },\n /**\n * Gets a value indicating if the geometry is time-varying.\n * If true, all visualization is delegated to a DynamicGeometryUpdater\n * returned by GeometryUpdater#createDynamicUpdater.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isDynamic: {\n get: function () {\n return this._dynamic;\n },\n },\n /**\n * Gets a value indicating if the geometry is closed.\n * This property is only valid for static geometry.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isClosed: {\n get: function () {\n return this._isClosed;\n },\n },\n /**\n * Gets a value indicating if the geometry should be drawn on terrain.\n * @memberof EllipseGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n onTerrain: {\n get: function () {\n return this._onTerrain;\n },\n },\n /**\n * Gets an event that is raised whenever the public properties\n * of this updater change.\n * @memberof GeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n geometryChanged: {\n get: function () {\n return this._geometryChanged;\n },\n },\n});\n\n/**\n * Checks if the geometry is outlined at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {Boolean} true if geometry is outlined at the provided time, false otherwise.\n */\nGeometryUpdater.prototype.isOutlineVisible = function (time) {\n var entity = this._entity;\n var visible =\n this._outlineEnabled &&\n entity.isAvailable(time) &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time);\n return defaultValue(visible, false);\n};\n\n/**\n * Checks if the geometry is filled at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {Boolean} true if geometry is filled at the provided time, false otherwise.\n */\nGeometryUpdater.prototype.isFilled = function (time) {\n var entity = this._entity;\n var visible =\n this._fillEnabled &&\n entity.isAvailable(time) &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time);\n return defaultValue(visible, false);\n};\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @function\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nGeometryUpdater.prototype.createFillGeometryInstance =\n DeveloperError.throwInstantiationError;\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @function\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nGeometryUpdater.prototype.createOutlineGeometryInstance =\n DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nGeometryUpdater.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys and resources used by the object. Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nGeometryUpdater.prototype.destroy = function () {\n destroyObject(this);\n};\n/**\n * @param {Entity} entity\n * @param {Object} geometry\n * @private\n */\nGeometryUpdater.prototype._isHidden = function (entity, geometry) {\n var show = geometry.show;\n return (\n defined(show) && show.isConstant && !show.getValue(Iso8601.MINIMUM_VALUE)\n );\n};\n\n/**\n * @param {Entity} entity\n * @param {Object} geometry\n * @private\n */\nGeometryUpdater.prototype._isOnTerrain = function (entity, geometry) {\n return false;\n};\n\n/**\n * @param {GeometryOptions} options\n * @private\n */\nGeometryUpdater.prototype._getIsClosed = function (options) {\n return true;\n};\n\n/**\n * @param {Entity} entity\n * @param {Object} geometry\n * @private\n */\nGeometryUpdater.prototype._isDynamic = DeveloperError.throwInstantiationError;\n\n/**\n * @param {Entity} entity\n * @param {Object} geometry\n * @private\n */\nGeometryUpdater.prototype._setStaticOptions =\n DeveloperError.throwInstantiationError;\n\n/**\n * @param {Entity} entity\n * @param {String} propertyName\n * @param {*} newValue\n * @param {*} oldValue\n * @private\n */\nGeometryUpdater.prototype._onEntityPropertyChanged = function (\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n return;\n }\n\n var geometry = this._entity[this._geometryPropertyName];\n\n if (!defined(geometry)) {\n if (this._fillEnabled || this._outlineEnabled) {\n this._fillEnabled = false;\n this._outlineEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n var fillProperty = geometry.fill;\n var fillEnabled =\n defined(fillProperty) && fillProperty.isConstant\n ? fillProperty.getValue(Iso8601.MINIMUM_VALUE)\n : true;\n\n var outlineProperty = geometry.outline;\n var outlineEnabled = defined(outlineProperty);\n if (outlineEnabled && outlineProperty.isConstant) {\n outlineEnabled = outlineProperty.getValue(Iso8601.MINIMUM_VALUE);\n }\n\n if (!fillEnabled && !outlineEnabled) {\n if (this._fillEnabled || this._outlineEnabled) {\n this._fillEnabled = false;\n this._outlineEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n var show = geometry.show;\n if (this._isHidden(entity, geometry)) {\n if (this._fillEnabled || this._outlineEnabled) {\n this._fillEnabled = false;\n this._outlineEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n this._materialProperty = defaultValue(geometry.material, defaultMaterial);\n this._fillProperty = defaultValue(fillProperty, defaultFill);\n this._showProperty = defaultValue(show, defaultShow);\n this._showOutlineProperty = defaultValue(geometry.outline, defaultOutline);\n this._outlineColorProperty = outlineEnabled\n ? defaultValue(geometry.outlineColor, defaultOutlineColor)\n : undefined;\n this._shadowsProperty = defaultValue(geometry.shadows, defaultShadows);\n this._distanceDisplayConditionProperty = defaultValue(\n geometry.distanceDisplayCondition,\n defaultDistanceDisplayCondition\n );\n this._classificationTypeProperty = defaultValue(\n geometry.classificationType,\n defaultClassificationType\n );\n\n this._fillEnabled = fillEnabled;\n\n var onTerrain =\n this._isOnTerrain(entity, geometry) &&\n (this._supportsMaterialsforEntitiesOnTerrain ||\n this._materialProperty instanceof ColorMaterialProperty);\n\n if (outlineEnabled && onTerrain) {\n oneTimeWarning(oneTimeWarning.geometryOutlines);\n outlineEnabled = false;\n }\n\n this._onTerrain = onTerrain;\n this._outlineEnabled = outlineEnabled;\n\n if (this._isDynamic(entity, geometry)) {\n if (!this._dynamic) {\n this._dynamic = true;\n this._geometryChanged.raiseEvent(this);\n }\n } else {\n this._setStaticOptions(entity, geometry);\n this._isClosed = this._getIsClosed(this._options);\n var outlineWidth = geometry.outlineWidth;\n this._outlineWidth = defined(outlineWidth)\n ? outlineWidth.getValue(Iso8601.MINIMUM_VALUE)\n : 1.0;\n this._dynamic = false;\n this._geometryChanged.raiseEvent(this);\n }\n};\n\n/**\n * Creates the dynamic updater to be used when GeometryUpdater#isDynamic is true.\n *\n * @param {PrimitiveCollection} primitives The primitive collection to use.\n * @param {PrimitiveCollection} [groundPrimitives] The primitive collection to use for ground primitives.\n *\n * @returns {DynamicGeometryUpdater} The dynamic updater used to update the geometry each frame.\n *\n * @exception {DeveloperError} This instance does not represent dynamic geometry.\n * @private\n */\nGeometryUpdater.prototype.createDynamicUpdater = function (\n primitives,\n groundPrimitives\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"primitives\", primitives);\n Check.defined(\"groundPrimitives\", groundPrimitives);\n\n if (!this._dynamic) {\n throw new DeveloperError(\n \"This instance does not represent dynamic geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n return new this.constructor.DynamicGeometryUpdater(\n this,\n primitives,\n groundPrimitives\n );\n};\nexport default GeometryUpdater;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\n\n/**\n * A {@link Property} whose value is lazily evaluated by a callback function.\n *\n * @alias CallbackProperty\n * @constructor\n *\n * @param {CallbackProperty.Callback} callback The function to be called when the property is evaluated.\n * @param {Boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n */\nfunction CallbackProperty(callback, isConstant) {\n this._callback = undefined;\n this._isConstant = undefined;\n this._definitionChanged = new Event();\n this.setCallback(callback, isConstant);\n}\n\nObject.defineProperties(CallbackProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * @memberof CallbackProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._isConstant;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setCallback is called.\n * @memberof CallbackProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time] The time for which to retrieve the value. This parameter is unused since the value does not change with respect to time.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied or is unsupported.\n */\nCallbackProperty.prototype.getValue = function (time, result) {\n return this._callback(time, result);\n};\n\n/**\n * Sets the callback to be used.\n *\n * @param {CallbackProperty.Callback} callback The function to be called when the property is evaluated.\n * @param {Boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n */\nCallbackProperty.prototype.setCallback = function (callback, isConstant) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(callback)) {\n throw new DeveloperError(\"callback is required.\");\n }\n if (!defined(isConstant)) {\n throw new DeveloperError(\"isConstant is required.\");\n }\n //>>includeEnd('debug');\n\n var changed = this._callback !== callback || this._isConstant !== isConstant;\n\n this._callback = callback;\n this._isConstant = isConstant;\n\n if (changed) {\n this._definitionChanged.raiseEvent(this);\n }\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCallbackProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof CallbackProperty &&\n this._callback === other._callback &&\n this._isConstant === other._isConstant)\n );\n};\n\n/**\n * A function that returns the value of the property.\n * @callback CallbackProperty.Callback\n *\n * @param {JulianDate} [time] The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied or is unsupported.\n */\nexport default CallbackProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport Property from \"./Property.js\";\n\nvar scratchPosition = new Cartesian3();\nvar scratchCarto = new Cartographic();\n\n/**\n * @private\n */\nfunction TerrainOffsetProperty(\n scene,\n positionProperty,\n heightReferenceProperty,\n extrudedHeightReferenceProperty\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"scene\", scene);\n Check.defined(\"positionProperty\", positionProperty);\n //>>includeEnd('debug');\n\n this._scene = scene;\n this._heightReference = heightReferenceProperty;\n this._extrudedHeightReference = extrudedHeightReferenceProperty;\n this._positionProperty = positionProperty;\n\n this._position = new Cartesian3();\n this._cartographicPosition = new Cartographic();\n this._normal = new Cartesian3();\n\n this._definitionChanged = new Event();\n this._terrainHeight = 0;\n this._removeCallbackFunc = undefined;\n this._removeEventListener = undefined;\n this._removeModeListener = undefined;\n\n var that = this;\n if (defined(scene.globe)) {\n this._removeEventListener = scene.terrainProviderChanged.addEventListener(\n function () {\n that._updateClamping();\n }\n );\n this._removeModeListener = scene.morphComplete.addEventListener(\n function () {\n that._updateClamping();\n }\n );\n }\n\n if (positionProperty.isConstant) {\n var position = positionProperty.getValue(\n Iso8601.MINIMUM_VALUE,\n scratchPosition\n );\n if (\n !defined(position) ||\n Cartesian3.equals(position, Cartesian3.ZERO) ||\n !defined(scene.globe)\n ) {\n return;\n }\n this._position = Cartesian3.clone(position, this._position);\n\n this._updateClamping();\n\n this._normal = scene.globe.ellipsoid.geodeticSurfaceNormal(\n position,\n this._normal\n );\n }\n}\n\nObject.defineProperties(TerrainOffsetProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * @memberof TerrainOffsetProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return false;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * @memberof TerrainOffsetProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\n/**\n * @private\n */\nTerrainOffsetProperty.prototype._updateClamping = function () {\n if (defined(this._removeCallbackFunc)) {\n this._removeCallbackFunc();\n }\n\n var scene = this._scene;\n var globe = scene.globe;\n var position = this._position;\n\n if (!defined(globe) || Cartesian3.equals(position, Cartesian3.ZERO)) {\n this._terrainHeight = 0;\n return;\n }\n var ellipsoid = globe.ellipsoid;\n var surface = globe._surface;\n\n var that = this;\n var cartographicPosition = ellipsoid.cartesianToCartographic(\n position,\n this._cartographicPosition\n );\n var height = globe.getHeight(cartographicPosition);\n if (defined(height)) {\n this._terrainHeight = height;\n } else {\n this._terrainHeight = 0;\n }\n\n function updateFunction(clampedPosition) {\n if (scene.mode === SceneMode.SCENE3D) {\n var carto = ellipsoid.cartesianToCartographic(\n clampedPosition,\n scratchCarto\n );\n that._terrainHeight = carto.height;\n } else {\n that._terrainHeight = clampedPosition.x;\n }\n that.definitionChanged.raiseEvent();\n }\n this._removeCallbackFunc = surface.updateHeight(\n cartographicPosition,\n updateFunction\n );\n};\n\n/**\n * Gets the height relative to the terrain based on the positions.\n *\n * @returns {Cartesian3} The offset\n */\nTerrainOffsetProperty.prototype.getValue = function (time, result) {\n var heightReference = Property.getValueOrDefault(\n this._heightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightReference = Property.getValueOrDefault(\n this._extrudedHeightReference,\n time,\n HeightReference.NONE\n );\n\n if (\n heightReference === HeightReference.NONE &&\n extrudedHeightReference !== HeightReference.RELATIVE_TO_GROUND\n ) {\n this._position = Cartesian3.clone(Cartesian3.ZERO, this._position);\n return Cartesian3.clone(Cartesian3.ZERO, result);\n }\n\n if (this._positionProperty.isConstant) {\n return Cartesian3.multiplyByScalar(\n this._normal,\n this._terrainHeight,\n result\n );\n }\n\n var scene = this._scene;\n var position = this._positionProperty.getValue(time, scratchPosition);\n if (\n !defined(position) ||\n Cartesian3.equals(position, Cartesian3.ZERO) ||\n !defined(scene.globe)\n ) {\n return Cartesian3.clone(Cartesian3.ZERO, result);\n }\n\n if (\n Cartesian3.equalsEpsilon(this._position, position, CesiumMath.EPSILON10)\n ) {\n return Cartesian3.multiplyByScalar(\n this._normal,\n this._terrainHeight,\n result\n );\n }\n\n this._position = Cartesian3.clone(position, this._position);\n\n this._updateClamping();\n\n var normal = scene.globe.ellipsoid.geodeticSurfaceNormal(\n position,\n this._normal\n );\n return Cartesian3.multiplyByScalar(normal, this._terrainHeight, result);\n};\n\nTerrainOffsetProperty.prototype.isDestroyed = function () {\n return false;\n};\n\nTerrainOffsetProperty.prototype.destroy = function () {\n if (defined(this._removeEventListener)) {\n this._removeEventListener();\n }\n if (defined(this._removeModeListener)) {\n this._removeModeListener();\n }\n if (defined(this._removeCallbackFunc)) {\n this._removeCallbackFunc();\n }\n return destroyObject(this);\n};\n\n/**\n * A function which creates one or more providers.\n * @callback TerrainOffsetProperty.PositionFunction\n * @param {JulianDate} time The clock time at which to retrieve the position\n * @param {Cartesian3} result The result position\n * @returns {Cartesian3} The position at which to do the terrain height check\n */\nexport default TerrainOffsetProperty;\n","import defined from \"../Core/defined.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport TerrainOffsetProperty from \"./TerrainOffsetProperty.js\";\n\nfunction heightReferenceOnEntityPropertyChanged(\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n GeometryUpdater.prototype._onEntityPropertyChanged.call(\n this,\n entity,\n propertyName,\n newValue,\n oldValue\n );\n if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n return;\n }\n\n var geometry = this._entity[this._geometryPropertyName];\n if (!defined(geometry)) {\n return;\n }\n\n if (defined(this._terrainOffsetProperty)) {\n this._terrainOffsetProperty.destroy();\n this._terrainOffsetProperty = undefined;\n }\n\n var heightReferenceProperty = geometry.heightReference;\n\n if (defined(heightReferenceProperty)) {\n var centerPosition = new CallbackProperty(\n this._computeCenter.bind(this),\n !this._dynamic\n );\n this._terrainOffsetProperty = new TerrainOffsetProperty(\n this._scene,\n centerPosition,\n heightReferenceProperty\n );\n }\n}\nexport default heightReferenceOnEntityPropertyChanged;\n","import BoxGeometry from \"../Core/BoxGeometry.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport Property from \"./Property.js\";\n\nvar defaultOffset = Cartesian3.ZERO;\n\nvar offsetScratch = new Cartesian3();\nvar positionScratch = new Cartesian3();\nvar scratchColor = new Color();\n\nfunction BoxGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.dimensions = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for boxes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias BoxGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction BoxGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new BoxGeometryOptions(entity),\n geometryPropertyName: \"box\",\n observedPropertyNames: [\"availability\", \"position\", \"orientation\", \"box\"],\n });\n\n this._onEntityPropertyChanged(entity, \"box\", entity.box, undefined);\n}\n\nif (defined(Object.create)) {\n BoxGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n BoxGeometryUpdater.prototype.constructor = BoxGeometryUpdater;\n}\n\nObject.defineProperties(BoxGeometryUpdater.prototype, {\n /**\n * Gets the terrain offset property\n * @type {TerrainOffsetProperty}\n * @memberof BoxGeometryUpdater.prototype\n * @readonly\n * @private\n */\n terrainOffsetProperty: {\n get: function () {\n return this._terrainOffsetProperty;\n },\n },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nBoxGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n\n var attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: undefined,\n offset: undefined,\n };\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: BoxGeometry.fromDimensions(this._options),\n modelMatrix: entity.computeModelMatrixForHeightReference(\n time,\n entity.box.heightReference,\n this._options.dimensions.z * 0.5,\n this._scene.mapProjection.ellipsoid\n ),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nBoxGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: BoxOutlineGeometry.fromDimensions(this._options),\n modelMatrix: entity.computeModelMatrixForHeightReference(\n time,\n entity.box.heightReference,\n this._options.dimensions.z * 0.5,\n this._scene.mapProjection.ellipsoid\n ),\n attributes: attributes,\n });\n};\n\nBoxGeometryUpdater.prototype._computeCenter = function (time, result) {\n return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nBoxGeometryUpdater.prototype._isHidden = function (entity, box) {\n return (\n !defined(box.dimensions) ||\n !defined(entity.position) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, box)\n );\n};\n\nBoxGeometryUpdater.prototype._isDynamic = function (entity, box) {\n return (\n !entity.position.isConstant ||\n !Property.isConstant(entity.orientation) ||\n !box.dimensions.isConstant ||\n !Property.isConstant(box.outlineWidth)\n );\n};\n\nBoxGeometryUpdater.prototype._setStaticOptions = function (entity, box) {\n var heightReference = Property.getValueOrDefault(\n box.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n\n var options = this._options;\n options.vertexFormat =\n this._materialProperty instanceof ColorMaterialProperty\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.dimensions = box.dimensions.getValue(\n Iso8601.MINIMUM_VALUE,\n options.dimensions\n );\n options.offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n};\n\nBoxGeometryUpdater.prototype._onEntityPropertyChanged = heightReferenceOnEntityPropertyChanged;\n\nBoxGeometryUpdater.DynamicGeometryUpdater = DynamicBoxGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicBoxGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicBoxGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicBoxGeometryUpdater.prototype.constructor = DynamicBoxGeometryUpdater;\n}\n\nDynamicBoxGeometryUpdater.prototype._isHidden = function (entity, box, time) {\n var position = Property.getValueOrUndefined(\n entity.position,\n time,\n positionScratch\n );\n var dimensions = this._options.dimensions;\n return (\n !defined(position) ||\n !defined(dimensions) ||\n DynamicGeometryUpdater.prototype._isHidden.call(this, entity, box, time)\n );\n};\n\nDynamicBoxGeometryUpdater.prototype._setOptions = function (entity, box, time) {\n var heightReference = Property.getValueOrDefault(\n box.heightReference,\n time,\n HeightReference.NONE\n );\n var options = this._options;\n options.dimensions = Property.getValueOrUndefined(\n box.dimensions,\n time,\n options.dimensions\n );\n options.offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n};\nexport default BoxGeometryUpdater;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\n\n/**\n * Represents a command to the renderer for clearing a framebuffer.\n *\n * @private\n * @constructor\n */\nfunction ClearCommand(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The value to clear the color buffer to. When <code>undefined</code>, the color buffer is not cleared.\n *\n * @type {Color}\n *\n * @default undefined\n */\n this.color = options.color;\n\n /**\n * The value to clear the depth buffer to. When <code>undefined</code>, the depth buffer is not cleared.\n *\n * @type {Number}\n *\n * @default undefined\n */\n this.depth = options.depth;\n\n /**\n * The value to clear the stencil buffer to. When <code>undefined</code>, the stencil buffer is not cleared.\n *\n * @type {Number}\n *\n * @default undefined\n */\n this.stencil = options.stencil;\n\n /**\n * The render state to apply when executing the clear command. The following states affect clearing:\n * scissor test, color mask, depth mask, and stencil mask. When the render state is\n * <code>undefined</code>, the default render state is used.\n *\n * @type {RenderState}\n *\n * @default undefined\n */\n this.renderState = options.renderState;\n\n /**\n * The framebuffer to clear.\n *\n * @type {Framebuffer}\n *\n * @default undefined\n */\n this.framebuffer = options.framebuffer;\n\n /**\n * The object who created this command. This is useful for debugging command\n * execution; it allows you to see who created a command when you only have a\n * reference to the command, and can be used to selectively execute commands\n * with {@link Scene#debugCommandFilter}.\n *\n * @type {Object}\n *\n * @default undefined\n *\n * @see Scene#debugCommandFilter\n */\n this.owner = options.owner;\n\n /**\n * The pass in which to run this command.\n *\n * @type {Pass}\n *\n * @default undefined\n */\n this.pass = options.pass;\n}\n\n/**\n * Clears color to (0.0, 0.0, 0.0, 0.0); depth to 1.0; and stencil to 0.\n *\n * @type {ClearCommand}\n *\n * @constant\n */\nClearCommand.ALL = Object.freeze(\n new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n depth: 1.0,\n stencil: 0.0,\n })\n);\n\nClearCommand.prototype.execute = function (context, passState) {\n context.clear(this, passState);\n};\nexport default ClearCommand;\n","import Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * An enum describing the x, y, and z axes and helper conversion functions.\n *\n * @enum {Number}\n */\nvar Axis = {\n /**\n * Denotes the x-axis.\n *\n * @type {Number}\n * @constant\n */\n X: 0,\n\n /**\n * Denotes the y-axis.\n *\n * @type {Number}\n * @constant\n */\n Y: 1,\n\n /**\n * Denotes the z-axis.\n *\n * @type {Number}\n * @constant\n */\n Z: 2,\n};\n\n/**\n * Matrix used to convert from y-up to z-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Y_UP_TO_Z_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationX(CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Matrix used to convert from z-up to y-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Z_UP_TO_Y_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationX(-CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Matrix used to convert from x-up to z-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.X_UP_TO_Z_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationY(-CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Matrix used to convert from z-up to x-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Z_UP_TO_X_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationY(CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Matrix used to convert from x-up to y-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.X_UP_TO_Y_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationZ(CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Matrix used to convert from y-up to x-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Y_UP_TO_X_UP = Matrix4.fromRotationTranslation(\n Matrix3.fromRotationZ(-CesiumMath.PI_OVER_TWO)\n);\n\n/**\n * Gets the axis by name\n *\n * @param {String} name The name of the axis.\n * @returns {Number} The axis enum.\n */\nAxis.fromName = function (name) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"name\", name);\n //>>includeEnd('debug');\n\n return Axis[name];\n};\n\nexport default Object.freeze(Axis);\n","/**\n * An enum describing the attribute type for glTF and 3D Tiles.\n *\n * @enum {String}\n *\n * @private\n */\nvar AttributeType = {\n /**\n * The attribute is a single component.\n *\n * @type {String}\n * @constant\n */\n SCALAR: \"SCALAR\",\n\n /**\n * The attribute is a two-component vector.\n *\n * @type {String}\n * @constant\n */\n VEC2: \"VEC2\",\n\n /**\n * The attribute is a three-component vector.\n *\n * @type {String}\n * @constant\n */\n VEC3: \"VEC3\",\n\n /**\n * The attribute is a four-component vector.\n *\n * @type {String}\n * @constant\n */\n VEC4: \"VEC4\",\n\n /**\n * The attribute is a 2x2 matrix.\n *\n * @type {String}\n * @constant\n */\n MAT2: \"MAT2\",\n\n /**\n * The attribute is a 3x3 matrix.\n *\n * @type {String}\n * @constant\n */\n MAT3: \"MAT3\",\n\n /**\n * The attribute is a 4x4 matrix.\n *\n * @type {String}\n * @constant\n */\n MAT4: \"MAT4\",\n};\nexport default Object.freeze(AttributeType);\n","/**\n * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from\n * the original feature, e.g. glTF material or per-point color in the tile.\n * <p>\n * When <code>REPLACE</code> or <code>MIX</code> are used and the source color is a glTF material, the technique must assign the\n * <code>_3DTILESDIFFUSE</code> semantic to the diffuse color parameter. Otherwise only <code>HIGHLIGHT</code> is supported.\n * </p>\n * <p>\n * A feature whose color evaluates to white (1.0, 1.0, 1.0) is always rendered without color blending, regardless of the\n * tileset's color blend mode.\n * </p>\n * <pre><code>\n * \"techniques\": {\n * \"technique0\": {\n * \"parameters\": {\n * \"diffuse\": {\n * \"semantic\": \"_3DTILESDIFFUSE\",\n * \"type\": 35666\n * }\n * }\n * }\n * }\n * </code></pre>\n *\n * @enum {Number}\n */\nvar Cesium3DTileColorBlendMode = {\n /**\n * Multiplies the source color by the feature color.\n *\n * @type {Number}\n * @constant\n */\n HIGHLIGHT: 0,\n\n /**\n * Replaces the source color with the feature color.\n *\n * @type {Number}\n * @constant\n */\n REPLACE: 1,\n\n /**\n * Blends the source color and feature color together.\n *\n * @type {Number}\n * @constant\n */\n MIX: 2,\n};\nexport default Object.freeze(Cesium3DTileColorBlendMode);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\nvar ComponentsPerAttribute = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16,\n};\n\nvar ClassPerType = {\n SCALAR: undefined,\n VEC2: Cartesian2,\n VEC3: Cartesian3,\n VEC4: Cartesian4,\n MAT2: Matrix2,\n MAT3: Matrix3,\n MAT4: Matrix4,\n};\n\n/**\n * @private\n */\nfunction getBinaryAccessor(accessor) {\n var componentType = accessor.componentType;\n var componentDatatype;\n if (typeof componentType === \"string\") {\n componentDatatype = ComponentDatatype.fromName(componentType);\n } else {\n componentDatatype = componentType;\n }\n\n var componentsPerAttribute = ComponentsPerAttribute[accessor.type];\n var classType = ClassPerType[accessor.type];\n return {\n componentsPerAttribute: componentsPerAttribute,\n classType: classType,\n createArrayBufferView: function (buffer, byteOffset, length) {\n return ComponentDatatype.createArrayBufferView(\n componentDatatype,\n buffer,\n byteOffset,\n componentsPerAttribute * length\n );\n },\n };\n}\nexport default getBinaryAccessor;\n","import arrayFill from \"../Core/arrayFill.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileColorBlendMode from \"./Cesium3DTileColorBlendMode.js\";\nimport CullFace from \"./CullFace.js\";\nimport getBinaryAccessor from \"./getBinaryAccessor.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\nvar DEFAULT_COLOR_VALUE = Color.WHITE;\nvar DEFAULT_SHOW_VALUE = true;\n\n/**\n * @private\n * @constructor\n */\nfunction Cesium3DTileBatchTable(\n content,\n featuresLength,\n batchTableJson,\n batchTableBinary,\n colorChangedCallback\n) {\n /**\n * @readonly\n */\n this.featuresLength = featuresLength;\n\n this._translucentFeaturesLength = 0; // Number of features in the tile that are translucent\n\n var extensions;\n if (defined(batchTableJson)) {\n extensions = batchTableJson.extensions;\n }\n this._extensions = defaultValue(extensions, {});\n\n var properties = initializeProperties(batchTableJson);\n this._properties = properties;\n\n this._batchTableHierarchy = initializeHierarchy(\n this,\n batchTableJson,\n batchTableBinary\n );\n this._batchTableBinaryProperties = getBinaryProperties(\n featuresLength,\n properties,\n batchTableBinary\n );\n\n // PERFORMANCE_IDEA: These parallel arrays probably generate cache misses in get/set color/show\n // and use A LOT of memory. How can we use less memory?\n this._showAlphaProperties = undefined; // [Show (0 or 255), Alpha (0 to 255)] property for each feature\n this._batchValues = undefined; // Per-feature RGBA (A is based on the color's alpha and feature's show property)\n\n this._batchValuesDirty = false;\n this._batchTexture = undefined;\n this._defaultTexture = undefined;\n\n this._pickTexture = undefined;\n this._pickIds = [];\n\n this._content = content;\n\n this._colorChangedCallback = colorChangedCallback;\n\n // Dimensions for batch and pick textures\n var textureDimensions;\n var textureStep;\n\n if (featuresLength > 0) {\n // PERFORMANCE_IDEA: this can waste memory in the last row in the uncommon case\n // when more than one row is needed (e.g., > 16K features in one tile)\n var width = Math.min(featuresLength, ContextLimits.maximumTextureSize);\n var height = Math.ceil(featuresLength / ContextLimits.maximumTextureSize);\n var stepX = 1.0 / width;\n var centerX = stepX * 0.5;\n var stepY = 1.0 / height;\n var centerY = stepY * 0.5;\n\n textureDimensions = new Cartesian2(width, height);\n textureStep = new Cartesian4(stepX, centerX, stepY, centerY);\n }\n\n this._textureDimensions = textureDimensions;\n this._textureStep = textureStep;\n}\n\n// This can be overridden for testing purposes\nCesium3DTileBatchTable._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Cesium3DTileBatchTable.prototype, {\n memorySizeInBytes: {\n get: function () {\n var memory = 0;\n if (defined(this._pickTexture)) {\n memory += this._pickTexture.sizeInBytes;\n }\n if (defined(this._batchTexture)) {\n memory += this._batchTexture.sizeInBytes;\n }\n return memory;\n },\n },\n});\n\nfunction initializeProperties(jsonHeader) {\n var properties = {};\n\n if (!defined(jsonHeader)) {\n return properties;\n }\n\n for (var propertyName in jsonHeader) {\n if (\n jsonHeader.hasOwnProperty(propertyName) &&\n propertyName !== \"HIERARCHY\" && // Deprecated HIERARCHY property\n propertyName !== \"extensions\" &&\n propertyName !== \"extras\"\n ) {\n properties[propertyName] = clone(jsonHeader[propertyName], true);\n }\n }\n\n return properties;\n}\n\nfunction initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n if (!defined(jsonHeader)) {\n return;\n }\n\n var hierarchy = batchTable._extensions[\"3DTILES_batch_table_hierarchy\"];\n\n var legacyHierarchy = jsonHeader.HIERARCHY;\n if (defined(legacyHierarchy)) {\n Cesium3DTileBatchTable._deprecationWarning(\n \"batchTableHierarchyExtension\",\n \"The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead.\"\n );\n batchTable._extensions[\"3DTILES_batch_table_hierarchy\"] = legacyHierarchy;\n hierarchy = legacyHierarchy;\n }\n\n if (!defined(hierarchy)) {\n return;\n }\n\n return initializeHierarchyValues(hierarchy, binaryBody);\n}\n\nfunction initializeHierarchyValues(hierarchyJson, binaryBody) {\n var i;\n var classId;\n var binaryAccessor;\n\n var instancesLength = hierarchyJson.instancesLength;\n var classes = hierarchyJson.classes;\n var classIds = hierarchyJson.classIds;\n var parentCounts = hierarchyJson.parentCounts;\n var parentIds = hierarchyJson.parentIds;\n var parentIdsLength = instancesLength;\n\n if (defined(classIds.byteOffset)) {\n classIds.componentType = defaultValue(\n classIds.componentType,\n ComponentDatatype.UNSIGNED_SHORT\n );\n classIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(classIds);\n classIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + classIds.byteOffset,\n instancesLength\n );\n }\n\n var parentIndexes;\n if (defined(parentCounts)) {\n if (defined(parentCounts.byteOffset)) {\n parentCounts.componentType = defaultValue(\n parentCounts.componentType,\n ComponentDatatype.UNSIGNED_SHORT\n );\n parentCounts.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentCounts);\n parentCounts = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentCounts.byteOffset,\n instancesLength\n );\n }\n parentIndexes = new Uint16Array(instancesLength);\n parentIdsLength = 0;\n for (i = 0; i < instancesLength; ++i) {\n parentIndexes[i] = parentIdsLength;\n parentIdsLength += parentCounts[i];\n }\n }\n\n if (defined(parentIds) && defined(parentIds.byteOffset)) {\n parentIds.componentType = defaultValue(\n parentIds.componentType,\n ComponentDatatype.UNSIGNED_SHORT\n );\n parentIds.type = AttributeType.SCALAR;\n binaryAccessor = getBinaryAccessor(parentIds);\n parentIds = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + parentIds.byteOffset,\n parentIdsLength\n );\n }\n\n var classesLength = classes.length;\n for (i = 0; i < classesLength; ++i) {\n var classInstancesLength = classes[i].length;\n var properties = classes[i].instances;\n var binaryProperties = getBinaryProperties(\n classInstancesLength,\n properties,\n binaryBody\n );\n classes[i].instances = combine(binaryProperties, properties);\n }\n\n var classCounts = arrayFill(new Array(classesLength), 0);\n var classIndexes = new Uint16Array(instancesLength);\n for (i = 0; i < instancesLength; ++i) {\n classId = classIds[i];\n classIndexes[i] = classCounts[classId];\n ++classCounts[classId];\n }\n\n var hierarchy = {\n classes: classes,\n classIds: classIds,\n classIndexes: classIndexes,\n parentCounts: parentCounts,\n parentIndexes: parentIndexes,\n parentIds: parentIds,\n };\n\n //>>includeStart('debug', pragmas.debug);\n validateHierarchy(hierarchy);\n //>>includeEnd('debug');\n\n return hierarchy;\n}\n\n//>>includeStart('debug', pragmas.debug);\nvar scratchValidateStack = [];\nfunction validateHierarchy(hierarchy) {\n var stack = scratchValidateStack;\n stack.length = 0;\n\n var classIds = hierarchy.classIds;\n var instancesLength = classIds.length;\n\n for (var i = 0; i < instancesLength; ++i) {\n validateInstance(hierarchy, i, stack);\n }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n var parentCounts = hierarchy.parentCounts;\n var parentIds = hierarchy.parentIds;\n var parentIndexes = hierarchy.parentIndexes;\n var classIds = hierarchy.classIds;\n var instancesLength = classIds.length;\n\n if (!defined(parentIds)) {\n // No need to validate if there are no parents\n return;\n }\n\n if (instanceIndex >= instancesLength) {\n throw new DeveloperError(\n \"Parent index \" +\n instanceIndex +\n \" exceeds the total number of instances: \" +\n instancesLength\n );\n }\n if (stack.indexOf(instanceIndex) > -1) {\n throw new DeveloperError(\n \"Circular dependency detected in the batch table hierarchy.\"\n );\n }\n\n stack.push(instanceIndex);\n var parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n var parentIndex = defined(parentCounts)\n ? parentIndexes[instanceIndex]\n : instanceIndex;\n for (var i = 0; i < parentCount; ++i) {\n var parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself), else continue the traversal.\n if (parentId !== instanceIndex) {\n validateInstance(hierarchy, parentId, stack);\n }\n }\n stack.pop(instanceIndex);\n}\n//>>includeEnd('debug');\n\nfunction getBinaryProperties(featuresLength, properties, binaryBody) {\n var binaryProperties;\n for (var name in properties) {\n if (properties.hasOwnProperty(name)) {\n var property = properties[name];\n var byteOffset = property.byteOffset;\n if (defined(byteOffset)) {\n // This is a binary property\n var componentType = property.componentType;\n var type = property.type;\n if (!defined(componentType)) {\n throw new RuntimeError(\"componentType is required.\");\n }\n if (!defined(type)) {\n throw new RuntimeError(\"type is required.\");\n }\n if (!defined(binaryBody)) {\n throw new RuntimeError(\n \"Property \" + name + \" requires a batch table binary.\"\n );\n }\n\n var binaryAccessor = getBinaryAccessor(property);\n var componentCount = binaryAccessor.componentsPerAttribute;\n var classType = binaryAccessor.classType;\n var typedArray = binaryAccessor.createArrayBufferView(\n binaryBody.buffer,\n binaryBody.byteOffset + byteOffset,\n featuresLength\n );\n\n if (!defined(binaryProperties)) {\n binaryProperties = {};\n }\n\n // Store any information needed to access the binary data, including the typed array,\n // componentCount (e.g. a VEC4 would be 4), and the type used to pack and unpack (e.g. Cartesian4).\n binaryProperties[name] = {\n typedArray: typedArray,\n componentCount: componentCount,\n type: classType,\n };\n }\n }\n }\n return binaryProperties;\n}\n\nCesium3DTileBatchTable.getBinaryProperties = function (\n featuresLength,\n batchTableJson,\n batchTableBinary\n) {\n return getBinaryProperties(featuresLength, batchTableJson, batchTableBinary);\n};\n\nfunction getByteLength(batchTable) {\n var dimensions = batchTable._textureDimensions;\n return dimensions.x * dimensions.y * 4;\n}\n\nfunction getBatchValues(batchTable) {\n if (!defined(batchTable._batchValues)) {\n // Default batch texture to RGBA = 255: white highlight (RGB) and show/alpha = true/255 (A).\n var byteLength = getByteLength(batchTable);\n var bytes = new Uint8Array(byteLength);\n arrayFill(bytes, 255);\n batchTable._batchValues = bytes;\n }\n\n return batchTable._batchValues;\n}\n\nfunction getShowAlphaProperties(batchTable) {\n if (!defined(batchTable._showAlphaProperties)) {\n var byteLength = 2 * batchTable.featuresLength;\n var bytes = new Uint8Array(byteLength);\n // [Show = true, Alpha = 255]\n arrayFill(bytes, 255);\n batchTable._showAlphaProperties = bytes;\n }\n return batchTable._showAlphaProperties;\n}\n\nfunction checkBatchId(batchId, featuresLength) {\n if (!defined(batchId) || batchId < 0 || batchId > featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n featuresLength -\n +\").\"\n );\n }\n}\n\nCesium3DTileBatchTable.prototype.setShow = function (batchId, show) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.bool(\"show\", show);\n //>>includeEnd('debug');\n\n if (show && !defined(this._showAlphaProperties)) {\n // Avoid allocating since the default is show = true\n return;\n }\n\n var showAlphaProperties = getShowAlphaProperties(this);\n var propertyOffset = batchId * 2;\n\n var newShow = show ? 255 : 0;\n if (showAlphaProperties[propertyOffset] !== newShow) {\n showAlphaProperties[propertyOffset] = newShow;\n\n var batchValues = getBatchValues(this);\n\n // Compute alpha used in the shader based on show and color.alpha properties\n var offset = batchId * 4 + 3;\n batchValues[offset] = show ? showAlphaProperties[propertyOffset + 1] : 0;\n\n this._batchValuesDirty = true;\n }\n};\n\nCesium3DTileBatchTable.prototype.setAllShow = function (show) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"show\", show);\n //>>includeEnd('debug');\n\n var featuresLength = this.featuresLength;\n for (var i = 0; i < featuresLength; ++i) {\n this.setShow(i, show);\n }\n};\n\nCesium3DTileBatchTable.prototype.getShow = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n //>>includeEnd('debug');\n\n if (!defined(this._showAlphaProperties)) {\n // Avoid allocating since the default is show = true\n return true;\n }\n\n var offset = batchId * 2;\n return this._showAlphaProperties[offset] === 255;\n};\n\nvar scratchColorBytes = new Array(4);\n\nCesium3DTileBatchTable.prototype.setColor = function (batchId, color) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.object(\"color\", color);\n //>>includeEnd('debug');\n\n if (Color.equals(color, DEFAULT_COLOR_VALUE) && !defined(this._batchValues)) {\n // Avoid allocating since the default is white\n return;\n }\n\n var newColor = color.toBytes(scratchColorBytes);\n var newAlpha = newColor[3];\n\n var batchValues = getBatchValues(this);\n var offset = batchId * 4;\n\n var showAlphaProperties = getShowAlphaProperties(this);\n var propertyOffset = batchId * 2;\n\n if (\n batchValues[offset] !== newColor[0] ||\n batchValues[offset + 1] !== newColor[1] ||\n batchValues[offset + 2] !== newColor[2] ||\n showAlphaProperties[propertyOffset + 1] !== newAlpha\n ) {\n batchValues[offset] = newColor[0];\n batchValues[offset + 1] = newColor[1];\n batchValues[offset + 2] = newColor[2];\n\n var wasTranslucent = showAlphaProperties[propertyOffset + 1] !== 255;\n\n // Compute alpha used in the shader based on show and color.alpha properties\n var show = showAlphaProperties[propertyOffset] !== 0;\n batchValues[offset + 3] = show ? newAlpha : 0;\n showAlphaProperties[propertyOffset + 1] = newAlpha;\n\n // Track number of translucent features so we know if this tile needs\n // opaque commands, translucent commands, or both for rendering.\n var isTranslucent = newAlpha !== 255;\n if (isTranslucent && !wasTranslucent) {\n ++this._translucentFeaturesLength;\n } else if (!isTranslucent && wasTranslucent) {\n --this._translucentFeaturesLength;\n }\n\n this._batchValuesDirty = true;\n\n if (defined(this._colorChangedCallback)) {\n this._colorChangedCallback(batchId, color);\n }\n }\n};\n\nCesium3DTileBatchTable.prototype.setAllColor = function (color) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"color\", color);\n //>>includeEnd('debug');\n\n var featuresLength = this.featuresLength;\n for (var i = 0; i < featuresLength; ++i) {\n this.setColor(i, color);\n }\n};\n\nCesium3DTileBatchTable.prototype.getColor = function (batchId, result) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n if (!defined(this._batchValues)) {\n return Color.clone(DEFAULT_COLOR_VALUE, result);\n }\n\n var batchValues = this._batchValues;\n var offset = batchId * 4;\n\n var showAlphaProperties = this._showAlphaProperties;\n var propertyOffset = batchId * 2;\n\n return Color.fromBytes(\n batchValues[offset],\n batchValues[offset + 1],\n batchValues[offset + 2],\n showAlphaProperties[propertyOffset + 1],\n result\n );\n};\n\nCesium3DTileBatchTable.prototype.getPickColor = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n //>>includeEnd('debug');\n return this._pickIds[batchId];\n};\n\nvar scratchColor = new Color();\n\nCesium3DTileBatchTable.prototype.applyStyle = function (style) {\n if (!defined(style)) {\n this.setAllColor(DEFAULT_COLOR_VALUE);\n this.setAllShow(DEFAULT_SHOW_VALUE);\n return;\n }\n\n var content = this._content;\n var length = this.featuresLength;\n for (var i = 0; i < length; ++i) {\n var feature = content.getFeature(i);\n var color = defined(style.color)\n ? style.color.evaluateColor(feature, scratchColor)\n : DEFAULT_COLOR_VALUE;\n var show = defined(style.show)\n ? style.show.evaluate(feature)\n : DEFAULT_SHOW_VALUE;\n this.setColor(i, color);\n this.setShow(i, show);\n }\n};\n\nfunction getBinaryProperty(binaryProperty, index) {\n var typedArray = binaryProperty.typedArray;\n var componentCount = binaryProperty.componentCount;\n if (componentCount === 1) {\n return typedArray[index];\n }\n return binaryProperty.type.unpack(typedArray, index * componentCount);\n}\n\nfunction setBinaryProperty(binaryProperty, index, value) {\n var typedArray = binaryProperty.typedArray;\n var componentCount = binaryProperty.componentCount;\n if (componentCount === 1) {\n typedArray[index] = value;\n } else {\n binaryProperty.type.pack(value, typedArray, index * componentCount);\n }\n}\n\n// The size of this array equals the maximum instance count among all loaded tiles, which has the potential to be large.\nvar scratchVisited = [];\nvar scratchStack = [];\nvar marker = 0;\nfunction traverseHierarchyMultipleParents(\n hierarchy,\n instanceIndex,\n endConditionCallback\n) {\n var classIds = hierarchy.classIds;\n var parentCounts = hierarchy.parentCounts;\n var parentIds = hierarchy.parentIds;\n var parentIndexes = hierarchy.parentIndexes;\n var instancesLength = classIds.length;\n\n // Ignore instances that have already been visited. This occurs in diamond inheritance situations.\n // Use a marker value to indicate that an instance has been visited, which increments with each run.\n // This is more efficient than clearing the visited array every time.\n var visited = scratchVisited;\n visited.length = Math.max(visited.length, instancesLength);\n var visitedMarker = ++marker;\n\n var stack = scratchStack;\n stack.length = 0;\n stack.push(instanceIndex);\n\n while (stack.length > 0) {\n instanceIndex = stack.pop();\n if (visited[instanceIndex] === visitedMarker) {\n // This instance has already been visited, stop traversal\n continue;\n }\n visited[instanceIndex] = visitedMarker;\n var result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n var parentCount = parentCounts[instanceIndex];\n var parentIndex = parentIndexes[instanceIndex];\n for (var i = 0; i < parentCount; ++i) {\n var parentId = parentIds[parentIndex + i];\n // Stop the traversal when the instance has no parent (its parentId equals itself)\n // else add the parent to the stack to continue the traversal.\n if (parentId !== instanceIndex) {\n stack.push(parentId);\n }\n }\n }\n}\n\nfunction traverseHierarchySingleParent(\n hierarchy,\n instanceIndex,\n endConditionCallback\n) {\n var hasParent = true;\n while (hasParent) {\n var result = endConditionCallback(hierarchy, instanceIndex);\n if (defined(result)) {\n // The end condition was met, stop the traversal and return the result\n return result;\n }\n var parentId = hierarchy.parentIds[instanceIndex];\n hasParent = parentId !== instanceIndex;\n instanceIndex = parentId;\n }\n}\n\nfunction traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n // Traverse over the hierarchy and process each instance with the endConditionCallback.\n // When the endConditionCallback returns a value, the traversal stops and that value is returned.\n var parentCounts = hierarchy.parentCounts;\n var parentIds = hierarchy.parentIds;\n if (!defined(parentIds)) {\n return endConditionCallback(hierarchy, instanceIndex);\n } else if (defined(parentCounts)) {\n return traverseHierarchyMultipleParents(\n hierarchy,\n instanceIndex,\n endConditionCallback\n );\n }\n return traverseHierarchySingleParent(\n hierarchy,\n instanceIndex,\n endConditionCallback\n );\n}\n\nfunction hasPropertyInHierarchy(batchTable, batchId, name) {\n var hierarchy = batchTable._batchTableHierarchy;\n var result = traverseHierarchy(hierarchy, batchId, function (\n hierarchy,\n instanceIndex\n ) {\n var classId = hierarchy.classIds[instanceIndex];\n var instances = hierarchy.classes[classId].instances;\n if (defined(instances[name])) {\n return true;\n }\n });\n return defined(result);\n}\n\nfunction getPropertyNamesInHierarchy(batchTable, batchId, results) {\n var hierarchy = batchTable._batchTableHierarchy;\n traverseHierarchy(hierarchy, batchId, function (hierarchy, instanceIndex) {\n var classId = hierarchy.classIds[instanceIndex];\n var instances = hierarchy.classes[classId].instances;\n for (var name in instances) {\n if (instances.hasOwnProperty(name)) {\n if (results.indexOf(name) === -1) {\n results.push(name);\n }\n }\n }\n });\n}\n\nfunction getHierarchyProperty(batchTable, batchId, name) {\n var hierarchy = batchTable._batchTableHierarchy;\n return traverseHierarchy(hierarchy, batchId, function (\n hierarchy,\n instanceIndex\n ) {\n var classId = hierarchy.classIds[instanceIndex];\n var instanceClass = hierarchy.classes[classId];\n var indexInClass = hierarchy.classIndexes[instanceIndex];\n var propertyValues = instanceClass.instances[name];\n if (defined(propertyValues)) {\n if (defined(propertyValues.typedArray)) {\n return getBinaryProperty(propertyValues, indexInClass);\n }\n return clone(propertyValues[indexInClass], true);\n }\n });\n}\n\nfunction setHierarchyProperty(batchTable, batchId, name, value) {\n var hierarchy = batchTable._batchTableHierarchy;\n var result = traverseHierarchy(hierarchy, batchId, function (\n hierarchy,\n instanceIndex\n ) {\n var classId = hierarchy.classIds[instanceIndex];\n var instanceClass = hierarchy.classes[classId];\n var indexInClass = hierarchy.classIndexes[instanceIndex];\n var propertyValues = instanceClass.instances[name];\n if (defined(propertyValues)) {\n //>>includeStart('debug', pragmas.debug);\n if (instanceIndex !== batchId) {\n throw new DeveloperError(\n 'Inherited property \"' + name + '\" is read-only.'\n );\n }\n //>>includeEnd('debug');\n if (defined(propertyValues.typedArray)) {\n setBinaryProperty(propertyValues, indexInClass, value);\n } else {\n propertyValues[indexInClass] = clone(value, true);\n }\n return true;\n }\n });\n return defined(result);\n}\n\nCesium3DTileBatchTable.prototype.isClass = function (batchId, className) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.string(\"className\", className);\n //>>includeEnd('debug');\n\n // PERFORMANCE_IDEA : cache results in the ancestor classes to speed up this check if this area becomes a hotspot\n var hierarchy = this._batchTableHierarchy;\n if (!defined(hierarchy)) {\n return false;\n }\n\n // PERFORMANCE_IDEA : treat class names as integers for faster comparisons\n var result = traverseHierarchy(hierarchy, batchId, function (\n hierarchy,\n instanceIndex\n ) {\n var classId = hierarchy.classIds[instanceIndex];\n var instanceClass = hierarchy.classes[classId];\n if (instanceClass.name === className) {\n return true;\n }\n });\n return defined(result);\n};\n\nCesium3DTileBatchTable.prototype.isExactClass = function (batchId, className) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"className\", className);\n //>>includeEnd('debug');\n\n return this.getExactClassName(batchId) === className;\n};\n\nCesium3DTileBatchTable.prototype.getExactClassName = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n //>>includeEnd('debug');\n\n var hierarchy = this._batchTableHierarchy;\n if (!defined(hierarchy)) {\n return undefined;\n }\n var classId = hierarchy.classIds[batchId];\n var instanceClass = hierarchy.classes[classId];\n return instanceClass.name;\n};\n\nCesium3DTileBatchTable.prototype.hasProperty = function (batchId, name) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.string(\"name\", name);\n //>>includeEnd('debug');\n\n return (\n defined(this._properties[name]) ||\n (defined(this._batchTableHierarchy) &&\n hasPropertyInHierarchy(this, batchId, name))\n );\n};\n\nCesium3DTileBatchTable.prototype.getPropertyNames = function (\n batchId,\n results\n) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n //>>includeEnd('debug');\n\n results = defined(results) ? results : [];\n results.length = 0;\n\n var propertyNames = Object.keys(this._properties);\n results.push.apply(results, propertyNames);\n\n if (defined(this._batchTableHierarchy)) {\n getPropertyNamesInHierarchy(this, batchId, results);\n }\n\n return results;\n};\n\nCesium3DTileBatchTable.prototype.getProperty = function (batchId, name) {\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, this.featuresLength);\n Check.typeOf.string(\"name\", name);\n //>>includeEnd('debug');\n\n if (defined(this._batchTableBinaryProperties)) {\n var binaryProperty = this._batchTableBinaryProperties[name];\n if (defined(binaryProperty)) {\n return getBinaryProperty(binaryProperty, batchId);\n }\n }\n\n var propertyValues = this._properties[name];\n if (defined(propertyValues)) {\n return clone(propertyValues[batchId], true);\n }\n\n if (defined(this._batchTableHierarchy)) {\n var hierarchyProperty = getHierarchyProperty(this, batchId, name);\n if (defined(hierarchyProperty)) {\n return hierarchyProperty;\n }\n }\n\n return undefined;\n};\n\nCesium3DTileBatchTable.prototype.setProperty = function (batchId, name, value) {\n var featuresLength = this.featuresLength;\n //>>includeStart('debug', pragmas.debug);\n checkBatchId(batchId, featuresLength);\n Check.typeOf.string(\"name\", name);\n //>>includeEnd('debug');\n\n if (defined(this._batchTableBinaryProperties)) {\n var binaryProperty = this._batchTableBinaryProperties[name];\n if (defined(binaryProperty)) {\n setBinaryProperty(binaryProperty, batchId, value);\n return;\n }\n }\n\n if (defined(this._batchTableHierarchy)) {\n if (setHierarchyProperty(this, batchId, name, value)) {\n return;\n }\n }\n\n var propertyValues = this._properties[name];\n if (!defined(propertyValues)) {\n // Property does not exist. Create it.\n this._properties[name] = new Array(featuresLength);\n propertyValues = this._properties[name];\n }\n\n propertyValues[batchId] = clone(value, true);\n};\n\nfunction getGlslComputeSt(batchTable) {\n // GLSL batchId is zero-based: [0, featuresLength - 1]\n if (batchTable._textureDimensions.y === 1) {\n return (\n \"uniform vec4 tile_textureStep; \\n\" +\n \"vec2 computeSt(float batchId) \\n\" +\n \"{ \\n\" +\n \" float stepX = tile_textureStep.x; \\n\" +\n \" float centerX = tile_textureStep.y; \\n\" +\n \" return vec2(centerX + (batchId * stepX), 0.5); \\n\" +\n \"} \\n\"\n );\n }\n\n return (\n \"uniform vec4 tile_textureStep; \\n\" +\n \"uniform vec2 tile_textureDimensions; \\n\" +\n \"vec2 computeSt(float batchId) \\n\" +\n \"{ \\n\" +\n \" float stepX = tile_textureStep.x; \\n\" +\n \" float centerX = tile_textureStep.y; \\n\" +\n \" float stepY = tile_textureStep.z; \\n\" +\n \" float centerY = tile_textureStep.w; \\n\" +\n \" float xId = mod(batchId, tile_textureDimensions.x); \\n\" +\n \" float yId = floor(batchId / tile_textureDimensions.x); \\n\" +\n \" return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \\n\" +\n \"} \\n\"\n );\n}\n\nCesium3DTileBatchTable.prototype.getVertexShaderCallback = function (\n handleTranslucent,\n batchIdAttributeName,\n diffuseAttributeOrUniformName\n) {\n if (this.featuresLength === 0) {\n return;\n }\n\n var that = this;\n return function (source) {\n // If the color blend mode is HIGHLIGHT, the highlight color will always be applied in the fragment shader.\n // No need to apply the highlight color in the vertex shader as well.\n var renamedSource = modifyDiffuse(\n source,\n diffuseAttributeOrUniformName,\n false\n );\n var newMain;\n\n if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n // When VTF is supported, perform per-feature show/hide in the vertex shader\n newMain = \"\";\n if (handleTranslucent) {\n newMain += \"uniform bool tile_translucentCommand; \\n\";\n }\n newMain +=\n \"uniform sampler2D tile_batchTexture; \\n\" +\n \"varying vec4 tile_featureColor; \\n\" +\n \"varying vec2 tile_featureSt; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" vec2 st = computeSt(\" +\n batchIdAttributeName +\n \"); \\n\" +\n \" vec4 featureProperties = texture2D(tile_batchTexture, st); \\n\" +\n \" tile_color(featureProperties); \\n\" +\n \" float show = ceil(featureProperties.a); \\n\" + // 0 - false, non-zeo - true\n \" gl_Position *= show; \\n\"; // Per-feature show/hide\n if (handleTranslucent) {\n newMain +=\n \" bool isStyleTranslucent = (featureProperties.a != 1.0); \\n\" +\n \" if (czm_pass == czm_passTranslucent) \\n\" +\n \" { \\n\" +\n \" if (!isStyleTranslucent && !tile_translucentCommand) \\n\" + // Do not render opaque features in the translucent pass\n \" { \\n\" +\n \" gl_Position *= 0.0; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" if (isStyleTranslucent) \\n\" + // Do not render translucent features in the opaque pass\n \" { \\n\" +\n \" gl_Position *= 0.0; \\n\" +\n \" } \\n\" +\n \" } \\n\";\n }\n newMain +=\n \" tile_featureColor = featureProperties; \\n\" +\n \" tile_featureSt = st; \\n\" +\n \"}\";\n } else {\n // When VTF is not supported, color blend mode MIX will look incorrect due to the feature's color not being available in the vertex shader\n newMain =\n \"varying vec2 tile_featureSt; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" tile_color(vec4(1.0)); \\n\" +\n \" tile_featureSt = computeSt(\" +\n batchIdAttributeName +\n \"); \\n\" +\n \"}\";\n }\n\n return renamedSource + \"\\n\" + getGlslComputeSt(that) + newMain;\n };\n};\n\nfunction getDefaultShader(source, applyHighlight) {\n source = ShaderSource.replaceMain(source, \"tile_main\");\n\n if (!applyHighlight) {\n return (\n source +\n \"void tile_color(vec4 tile_featureColor) \\n\" +\n \"{ \\n\" +\n \" tile_main(); \\n\" +\n \"} \\n\"\n );\n }\n\n // The color blend mode is intended for the RGB channels so alpha is always just multiplied.\n // gl_FragColor is multiplied by the tile color only when tile_colorBlend is 0.0 (highlight)\n return (\n source +\n \"uniform float tile_colorBlend; \\n\" +\n \"void tile_color(vec4 tile_featureColor) \\n\" +\n \"{ \\n\" +\n \" tile_main(); \\n\" +\n \" tile_featureColor = czm_gammaCorrect(tile_featureColor); \\n\" +\n \" gl_FragColor.a *= tile_featureColor.a; \\n\" +\n \" float highlight = ceil(tile_colorBlend); \\n\" +\n \" gl_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \\n\" +\n \"} \\n\"\n );\n}\n\nfunction replaceDiffuseTextureCalls(source, diffuseAttributeOrUniformName) {\n var functionCall = \"texture2D(\" + diffuseAttributeOrUniformName;\n\n var fromIndex = 0;\n var startIndex = source.indexOf(functionCall, fromIndex);\n var endIndex;\n\n while (startIndex > -1) {\n var nestedLevel = 0;\n for (var i = startIndex; i < source.length; ++i) {\n var character = source.charAt(i);\n if (character === \"(\") {\n ++nestedLevel;\n } else if (character === \")\") {\n --nestedLevel;\n if (nestedLevel === 0) {\n endIndex = i + 1;\n break;\n }\n }\n }\n var extractedFunction = source.slice(startIndex, endIndex);\n var replacedFunction =\n \"tile_diffuse_final(\" + extractedFunction + \", tile_diffuse)\";\n\n source =\n source.slice(0, startIndex) + replacedFunction + source.slice(endIndex);\n fromIndex = startIndex + replacedFunction.length;\n startIndex = source.indexOf(functionCall, fromIndex);\n }\n\n return source;\n}\n\nfunction modifyDiffuse(source, diffuseAttributeOrUniformName, applyHighlight) {\n // If the glTF does not specify the _3DTILESDIFFUSE semantic, return the default shader.\n // Otherwise if _3DTILESDIFFUSE is defined prefer the shader below that can switch the color mode at runtime.\n if (!defined(diffuseAttributeOrUniformName)) {\n return getDefaultShader(source, applyHighlight);\n }\n\n // Find the diffuse uniform. Examples matches:\n // uniform vec3 u_diffuseColor;\n // uniform sampler2D diffuseTexture;\n var regex = new RegExp(\n \"(uniform|attribute|in)\\\\s+(vec[34]|sampler2D)\\\\s+\" +\n diffuseAttributeOrUniformName +\n \";\"\n );\n var uniformMatch = source.match(regex);\n\n if (!defined(uniformMatch)) {\n // Could not find uniform declaration of type vec3, vec4, or sampler2D\n return getDefaultShader(source, applyHighlight);\n }\n\n var declaration = uniformMatch[0];\n var type = uniformMatch[2];\n\n source = ShaderSource.replaceMain(source, \"tile_main\");\n source = source.replace(declaration, \"\"); // Remove uniform declaration for now so the replace below doesn't affect it\n\n // If the tile color is white, use the source color. This implies the feature has not been styled.\n // Highlight: tile_colorBlend is 0.0 and the source color is used\n // Replace: tile_colorBlend is 1.0 and the tile color is used\n // Mix: tile_colorBlend is between 0.0 and 1.0, causing the source color and tile color to mix\n var finalDiffuseFunction =\n \"bool isWhite(vec3 color) \\n\" +\n \"{ \\n\" +\n \" return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); \\n\" +\n \"} \\n\" +\n \"vec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse) \\n\" +\n \"{ \\n\" +\n \" vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend); \\n\" +\n \" vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse; \\n\" +\n \" return vec4(diffuse.rgb, sourceDiffuse.a); \\n\" +\n \"} \\n\";\n\n // The color blend mode is intended for the RGB channels so alpha is always just multiplied.\n // gl_FragColor is multiplied by the tile color only when tile_colorBlend is 0.0 (highlight)\n var highlight =\n \" tile_featureColor = czm_gammaCorrect(tile_featureColor); \\n\" +\n \" gl_FragColor.a *= tile_featureColor.a; \\n\" +\n \" float highlight = ceil(tile_colorBlend); \\n\" +\n \" gl_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \\n\";\n\n var setColor;\n if (type === \"vec3\" || type === \"vec4\") {\n var sourceDiffuse =\n type === \"vec3\"\n ? \"vec4(\" + diffuseAttributeOrUniformName + \", 1.0)\"\n : diffuseAttributeOrUniformName;\n var replaceDiffuse = type === \"vec3\" ? \"tile_diffuse.xyz\" : \"tile_diffuse\";\n regex = new RegExp(diffuseAttributeOrUniformName, \"g\");\n source = source.replace(regex, replaceDiffuse);\n setColor =\n \" vec4 source = \" +\n sourceDiffuse +\n \"; \\n\" +\n \" tile_diffuse = tile_diffuse_final(source, tile_featureColor); \\n\" +\n \" tile_main(); \\n\";\n } else if (type === \"sampler2D\") {\n // Handles any number of nested parentheses\n // E.g. texture2D(u_diffuse, uv)\n // E.g. texture2D(u_diffuse, computeUV(index))\n source = replaceDiffuseTextureCalls(source, diffuseAttributeOrUniformName);\n setColor =\n \" tile_diffuse = tile_featureColor; \\n\" + \" tile_main(); \\n\";\n }\n\n source =\n \"uniform float tile_colorBlend; \\n\" +\n \"vec4 tile_diffuse = vec4(1.0); \\n\" +\n finalDiffuseFunction +\n declaration +\n \"\\n\" +\n source +\n \"\\n\" +\n \"void tile_color(vec4 tile_featureColor) \\n\" +\n \"{ \\n\" +\n setColor;\n\n if (applyHighlight) {\n source += highlight;\n }\n\n source += \"} \\n\";\n return source;\n}\n\nCesium3DTileBatchTable.prototype.getFragmentShaderCallback = function (\n handleTranslucent,\n diffuseAttributeOrUniformName\n) {\n if (this.featuresLength === 0) {\n return;\n }\n return function (source) {\n source = modifyDiffuse(source, diffuseAttributeOrUniformName, true);\n if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n // When VTF is supported, per-feature show/hide already happened in the fragment shader\n source +=\n \"uniform sampler2D tile_pickTexture; \\n\" +\n \"varying vec2 tile_featureSt; \\n\" +\n \"varying vec4 tile_featureColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" tile_color(tile_featureColor); \\n\" +\n \"}\";\n } else {\n if (handleTranslucent) {\n source += \"uniform bool tile_translucentCommand; \\n\";\n }\n source +=\n \"uniform sampler2D tile_pickTexture; \\n\" +\n \"uniform sampler2D tile_batchTexture; \\n\" +\n \"varying vec2 tile_featureSt; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" vec4 featureProperties = texture2D(tile_batchTexture, tile_featureSt); \\n\" +\n \" if (featureProperties.a == 0.0) { \\n\" + // show: alpha == 0 - false, non-zeo - true\n \" discard; \\n\" +\n \" } \\n\";\n\n if (handleTranslucent) {\n source +=\n \" bool isStyleTranslucent = (featureProperties.a != 1.0); \\n\" +\n \" if (czm_pass == czm_passTranslucent) \\n\" +\n \" { \\n\" +\n \" if (!isStyleTranslucent && !tile_translucentCommand) \\n\" + // Do not render opaque features in the translucent pass\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" if (isStyleTranslucent) \\n\" + // Do not render translucent features in the opaque pass\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" } \\n\";\n }\n\n source += \" tile_color(featureProperties); \\n\" + \"} \\n\";\n }\n return source;\n };\n};\n\nCesium3DTileBatchTable.prototype.getClassificationFragmentShaderCallback = function () {\n if (this.featuresLength === 0) {\n return;\n }\n return function (source) {\n source = ShaderSource.replaceMain(source, \"tile_main\");\n if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n // When VTF is supported, per-feature show/hide already happened in the fragment shader\n source +=\n \"uniform sampler2D tile_pickTexture;\\n\" +\n \"varying vec2 tile_featureSt; \\n\" +\n \"varying vec4 tile_featureColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" tile_main(); \\n\" +\n \" gl_FragColor = tile_featureColor; \\n\" +\n \"}\";\n } else {\n source +=\n \"uniform sampler2D tile_batchTexture; \\n\" +\n \"uniform sampler2D tile_pickTexture;\\n\" +\n \"varying vec2 tile_featureSt; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" tile_main(); \\n\" +\n \" vec4 featureProperties = texture2D(tile_batchTexture, tile_featureSt); \\n\" +\n \" if (featureProperties.a == 0.0) { \\n\" + // show: alpha == 0 - false, non-zeo - true\n \" discard; \\n\" +\n \" } \\n\" +\n \" gl_FragColor = featureProperties; \\n\" +\n \"} \\n\";\n }\n return source;\n };\n};\n\nfunction getColorBlend(batchTable) {\n var tileset = batchTable._content.tileset;\n var colorBlendMode = tileset.colorBlendMode;\n var colorBlendAmount = tileset.colorBlendAmount;\n if (colorBlendMode === Cesium3DTileColorBlendMode.HIGHLIGHT) {\n return 0.0;\n }\n if (colorBlendMode === Cesium3DTileColorBlendMode.REPLACE) {\n return 1.0;\n }\n if (colorBlendMode === Cesium3DTileColorBlendMode.MIX) {\n // The value 0.0 is reserved for highlight, so clamp to just above 0.0.\n return CesiumMath.clamp(colorBlendAmount, CesiumMath.EPSILON4, 1.0);\n }\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n 'Invalid color blend mode \"' + colorBlendMode + '\".'\n );\n //>>includeEnd('debug');\n}\n\nCesium3DTileBatchTable.prototype.getUniformMapCallback = function () {\n if (this.featuresLength === 0) {\n return;\n }\n\n var that = this;\n return function (uniformMap) {\n var batchUniformMap = {\n tile_batchTexture: function () {\n // PERFORMANCE_IDEA: we could also use a custom shader that avoids the texture read.\n return defaultValue(that._batchTexture, that._defaultTexture);\n },\n tile_textureDimensions: function () {\n return that._textureDimensions;\n },\n tile_textureStep: function () {\n return that._textureStep;\n },\n tile_colorBlend: function () {\n return getColorBlend(that);\n },\n tile_pickTexture: function () {\n return that._pickTexture;\n },\n };\n\n return combine(uniformMap, batchUniformMap);\n };\n};\n\nCesium3DTileBatchTable.prototype.getPickId = function () {\n return \"texture2D(tile_pickTexture, tile_featureSt)\";\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nvar StyleCommandsNeeded = {\n ALL_OPAQUE: 0,\n ALL_TRANSLUCENT: 1,\n OPAQUE_AND_TRANSLUCENT: 2,\n};\n\nCesium3DTileBatchTable.prototype.addDerivedCommands = function (\n frameState,\n commandStart\n) {\n var commandList = frameState.commandList;\n var commandEnd = commandList.length;\n var tile = this._content._tile;\n var finalResolution = tile._finalResolution;\n var tileset = tile.tileset;\n var bivariateVisibilityTest =\n tileset._skipLevelOfDetail &&\n tileset._hasMixedContent &&\n frameState.context.stencilBuffer;\n var styleCommandsNeeded = getStyleCommandsNeeded(this);\n\n for (var i = commandStart; i < commandEnd; ++i) {\n var command = commandList[i];\n var derivedCommands = command.derivedCommands.tileset;\n if (!defined(derivedCommands) || command.dirty) {\n derivedCommands = {};\n command.derivedCommands.tileset = derivedCommands;\n derivedCommands.originalCommand = deriveCommand(command);\n command.dirty = false;\n }\n var originalCommand = derivedCommands.originalCommand;\n\n if (\n styleCommandsNeeded !== StyleCommandsNeeded.ALL_OPAQUE &&\n command.pass !== Pass.TRANSLUCENT\n ) {\n if (!defined(derivedCommands.translucent)) {\n derivedCommands.translucent = deriveTranslucentCommand(originalCommand);\n }\n }\n\n if (\n styleCommandsNeeded !== StyleCommandsNeeded.ALL_TRANSLUCENT &&\n command.pass !== Pass.TRANSLUCENT\n ) {\n if (!defined(derivedCommands.opaque)) {\n derivedCommands.opaque = deriveOpaqueCommand(originalCommand);\n }\n\n if (bivariateVisibilityTest) {\n if (!finalResolution) {\n if (!defined(derivedCommands.zback)) {\n derivedCommands.zback = deriveZBackfaceCommand(\n frameState.context,\n originalCommand\n );\n }\n tileset._backfaceCommands.push(derivedCommands.zback);\n }\n if (\n !defined(derivedCommands.stencil) ||\n tile._selectionDepth !==\n getLastSelectionDepth(derivedCommands.stencil)\n ) {\n if (command.renderState.depthMask) {\n derivedCommands.stencil = deriveStencilCommand(\n originalCommand,\n tile._selectionDepth\n );\n } else {\n // Ignore if tile does not write depth\n derivedCommands.stencil = derivedCommands.opaque;\n }\n }\n }\n }\n\n var opaqueCommand = bivariateVisibilityTest\n ? derivedCommands.stencil\n : derivedCommands.opaque;\n var translucentCommand = derivedCommands.translucent;\n\n // If the command was originally opaque:\n // * If the styling applied to the tile is all opaque, use the opaque command\n // (with one additional uniform needed for the shader).\n // * If the styling is all translucent, use new (cached) derived commands (front\n // and back faces) with a translucent render state.\n // * If the styling causes both opaque and translucent features in this tile,\n // then use both sets of commands.\n if (command.pass !== Pass.TRANSLUCENT) {\n if (styleCommandsNeeded === StyleCommandsNeeded.ALL_OPAQUE) {\n commandList[i] = opaqueCommand;\n }\n if (styleCommandsNeeded === StyleCommandsNeeded.ALL_TRANSLUCENT) {\n commandList[i] = translucentCommand;\n }\n if (styleCommandsNeeded === StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT) {\n // PERFORMANCE_IDEA: if the tile has multiple commands, we do not know what features are in what\n // commands so this case may be overkill.\n commandList[i] = opaqueCommand;\n commandList.push(translucentCommand);\n }\n } else {\n // Command was originally translucent so no need to derive new commands;\n // as of now, a style can't change an originally translucent feature to\n // opaque since the style's alpha is modulated, not a replacement. When\n // this changes, we need to derive new opaque commands here.\n commandList[i] = originalCommand;\n }\n }\n};\n\nfunction getStyleCommandsNeeded(batchTable) {\n var translucentFeaturesLength = batchTable._translucentFeaturesLength;\n\n if (translucentFeaturesLength === 0) {\n return StyleCommandsNeeded.ALL_OPAQUE;\n } else if (translucentFeaturesLength === batchTable.featuresLength) {\n return StyleCommandsNeeded.ALL_TRANSLUCENT;\n }\n\n return StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT;\n}\n\nfunction deriveCommand(command) {\n var derivedCommand = DrawCommand.shallowClone(command);\n\n // Add a uniform to indicate if the original command was translucent so\n // the shader knows not to cull vertices that were originally transparent\n // even though their style is opaque.\n var translucentCommand = derivedCommand.pass === Pass.TRANSLUCENT;\n\n derivedCommand.uniformMap = defined(derivedCommand.uniformMap)\n ? derivedCommand.uniformMap\n : {};\n derivedCommand.uniformMap.tile_translucentCommand = function () {\n return translucentCommand;\n };\n\n return derivedCommand;\n}\n\nfunction deriveTranslucentCommand(command) {\n var derivedCommand = DrawCommand.shallowClone(command);\n derivedCommand.pass = Pass.TRANSLUCENT;\n derivedCommand.renderState = getTranslucentRenderState(command.renderState);\n return derivedCommand;\n}\n\nfunction deriveOpaqueCommand(command) {\n var derivedCommand = DrawCommand.shallowClone(command);\n derivedCommand.renderState = getOpaqueRenderState(command.renderState);\n return derivedCommand;\n}\n\nfunction getLogDepthPolygonOffsetFragmentShaderProgram(context, shaderProgram) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n \"zBackfaceLogDepth\"\n );\n if (!defined(shader)) {\n var fs = shaderProgram.fragmentShaderSource.clone();\n fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n fs.defines.push(\"POLYGON_OFFSET\");\n\n fs.sources.unshift(\n \"#ifdef GL_OES_standard_derivatives\\n#extension GL_OES_standard_derivatives : enable\\n#endif\\n\"\n );\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"zBackfaceLogDepth\",\n {\n vertexShaderSource: shaderProgram.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: shaderProgram._attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nfunction deriveZBackfaceCommand(context, command) {\n // Write just backface depth of unresolved tiles so resolved stenciled tiles do not appear in front\n var derivedCommand = DrawCommand.shallowClone(command);\n var rs = clone(derivedCommand.renderState, true);\n rs.cull.enabled = true;\n rs.cull.face = CullFace.FRONT;\n // Back faces do not need to write color.\n rs.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n // Push back face depth away from the camera so it is less likely that back faces and front faces of the same tile\n // intersect and overlap. This helps avoid flickering for very thin double-sided walls.\n rs.polygonOffset = {\n enabled: true,\n factor: 5.0,\n units: 5.0,\n };\n // Set the 3D Tiles bit\n rs.stencilTest = StencilConstants.setCesium3DTileBit();\n rs.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n\n derivedCommand.renderState = RenderState.fromCache(rs);\n derivedCommand.castShadows = false;\n derivedCommand.receiveShadows = false;\n derivedCommand.uniformMap = clone(command.uniformMap);\n\n var polygonOffset = new Cartesian2(5.0, 5.0);\n derivedCommand.uniformMap.u_polygonOffset = function () {\n return polygonOffset;\n };\n\n // Make the log depth depth fragment write account for the polygon offset, too.\n // Otherwise, the back face commands will cause the higher resolution\n // tiles to disappear.\n derivedCommand.shaderProgram = getLogDepthPolygonOffsetFragmentShaderProgram(\n context,\n command.shaderProgram\n );\n return derivedCommand;\n}\n\nfunction deriveStencilCommand(command, reference) {\n // Tiles only draw if their selection depth is >= the tile drawn already. They write their\n // selection depth to the stencil buffer to prevent ancestor tiles from drawing on top\n var derivedCommand = DrawCommand.shallowClone(command);\n var rs = clone(derivedCommand.renderState, true);\n // Stencil test is masked to the most significant 3 bits so the reference is shifted. Writes 0 for the terrain bit\n rs.stencilTest.enabled = true;\n rs.stencilTest.mask = StencilConstants.SKIP_LOD_MASK;\n rs.stencilTest.reference =\n StencilConstants.CESIUM_3D_TILE_MASK |\n (reference << StencilConstants.SKIP_LOD_BIT_SHIFT);\n rs.stencilTest.frontFunction = StencilFunction.GREATER_OR_EQUAL;\n rs.stencilTest.frontOperation.zPass = StencilOperation.REPLACE;\n rs.stencilTest.backFunction = StencilFunction.GREATER_OR_EQUAL;\n rs.stencilTest.backOperation.zPass = StencilOperation.REPLACE;\n rs.stencilMask =\n StencilConstants.CESIUM_3D_TILE_MASK | StencilConstants.SKIP_LOD_MASK;\n derivedCommand.renderState = RenderState.fromCache(rs);\n return derivedCommand;\n}\n\nfunction getLastSelectionDepth(stencilCommand) {\n // Isolate the selection depth from the stencil reference.\n var reference = stencilCommand.renderState.stencilTest.reference;\n return (\n (reference & StencilConstants.SKIP_LOD_MASK) >>>\n StencilConstants.SKIP_LOD_BIT_SHIFT\n );\n}\n\nfunction getTranslucentRenderState(renderState) {\n var rs = clone(renderState, true);\n rs.cull.enabled = false;\n rs.depthTest.enabled = true;\n rs.depthMask = false;\n rs.blending = BlendingState.ALPHA_BLEND;\n\n return RenderState.fromCache(rs);\n}\n\nfunction getOpaqueRenderState(renderState) {\n var rs = clone(renderState, true);\n rs.stencilTest = StencilConstants.setCesium3DTileBit();\n rs.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n\n return RenderState.fromCache(rs);\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction createTexture(batchTable, context, bytes) {\n var dimensions = batchTable._textureDimensions;\n return new Texture({\n context: context,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n width: dimensions.x,\n height: dimensions.y,\n arrayBufferView: bytes,\n },\n flipY: false,\n sampler: Sampler.NEAREST,\n });\n}\n\nfunction createPickTexture(batchTable, context) {\n var featuresLength = batchTable.featuresLength;\n if (!defined(batchTable._pickTexture) && featuresLength > 0) {\n var pickIds = batchTable._pickIds;\n var byteLength = getByteLength(batchTable);\n var bytes = new Uint8Array(byteLength);\n var content = batchTable._content;\n\n // PERFORMANCE_IDEA: we could skip the pick texture completely by allocating\n // a continuous range of pickIds and then converting the base pickId + batchId\n // to RGBA in the shader. The only consider is precision issues, which might\n // not be an issue in WebGL 2.\n for (var i = 0; i < featuresLength; ++i) {\n var pickId = context.createPickId(content.getFeature(i));\n pickIds.push(pickId);\n\n var pickColor = pickId.color;\n var offset = i * 4;\n bytes[offset] = Color.floatToByte(pickColor.red);\n bytes[offset + 1] = Color.floatToByte(pickColor.green);\n bytes[offset + 2] = Color.floatToByte(pickColor.blue);\n bytes[offset + 3] = Color.floatToByte(pickColor.alpha);\n }\n\n batchTable._pickTexture = createTexture(batchTable, context, bytes);\n content.tileset._statistics.batchTableByteLength +=\n batchTable._pickTexture.sizeInBytes;\n }\n}\n\nfunction updateBatchTexture(batchTable) {\n var dimensions = batchTable._textureDimensions;\n // PERFORMANCE_IDEA: Instead of rewriting the entire texture, use fine-grained\n // texture updates when less than, for example, 10%, of the values changed. Or\n // even just optimize the common case when one feature show/color changed.\n batchTable._batchTexture.copyFrom({\n width: dimensions.x,\n height: dimensions.y,\n arrayBufferView: batchTable._batchValues,\n });\n}\n\nCesium3DTileBatchTable.prototype.update = function (tileset, frameState) {\n var context = frameState.context;\n this._defaultTexture = context.defaultTexture;\n\n var passes = frameState.passes;\n if (passes.pick || passes.postProcess) {\n createPickTexture(this, context);\n }\n\n if (this._batchValuesDirty) {\n this._batchValuesDirty = false;\n\n // Create batch texture on-demand\n if (!defined(this._batchTexture)) {\n this._batchTexture = createTexture(this, context, this._batchValues);\n tileset._statistics.batchTableByteLength += this._batchTexture.sizeInBytes;\n }\n\n updateBatchTexture(this); // Apply per-feature show/color updates\n }\n};\n\nCesium3DTileBatchTable.prototype.isDestroyed = function () {\n return false;\n};\n\nCesium3DTileBatchTable.prototype.destroy = function () {\n this._batchTexture = this._batchTexture && this._batchTexture.destroy();\n this._pickTexture = this._pickTexture && this._pickTexture.destroy();\n\n var pickIds = this._pickIds;\n var length = pickIds.length;\n for (var i = 0; i < length; ++i) {\n pickIds[i].destroy();\n }\n\n return destroyObject(this);\n};\nexport default Cesium3DTileBatchTable;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A feature of a {@link Cesium3DTileset}.\n * <p>\n * Provides access to a feature's properties stored in the tile's batch table, as well\n * as the ability to show/hide a feature and change its highlight color via\n * {@link Cesium3DTileFeature#show} and {@link Cesium3DTileFeature#color}, respectively.\n * </p>\n * <p>\n * Modifications to a <code>Cesium3DTileFeature</code> object have the lifetime of the tile's\n * content. If the tile's content is unloaded, e.g., due to it going out of view and needing\n * to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any\n * modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications.\n * </p>\n * <p>\n * Do not construct this directly. Access it through {@link Cesium3DTileContent#getFeature}\n * or picking using {@link Scene#pick} and {@link Scene#pickPosition}.\n * </p>\n *\n * @alias Cesium3DTileFeature\n * @constructor\n *\n * @example\n * // On mouse over, display all the properties for a feature in the console log.\n * handler.setInputAction(function(movement) {\n * var feature = scene.pick(movement.endPosition);\n * if (feature instanceof Cesium.Cesium3DTileFeature) {\n * var propertyNames = feature.getPropertyNames();\n * var length = propertyNames.length;\n * for (var i = 0; i < length; ++i) {\n * var propertyName = propertyNames[i];\n * console.log(propertyName + ': ' + feature.getProperty(propertyName));\n * }\n * }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nfunction Cesium3DTileFeature(content, batchId) {\n this._content = content;\n this._batchId = batchId;\n this._color = undefined; // for calling getColor\n}\n\nObject.defineProperties(Cesium3DTileFeature.prototype, {\n /**\n * Gets or sets if the feature will be shown. This is set for all features\n * when a style's show is evaluated.\n *\n * @memberof Cesium3DTileFeature.prototype\n *\n * @type {Boolean}\n *\n * @default true\n */\n show: {\n get: function () {\n return this._content.batchTable.getShow(this._batchId);\n },\n set: function (value) {\n this._content.batchTable.setShow(this._batchId, value);\n },\n },\n\n /**\n * Gets or sets the highlight color multiplied with the feature's color. When\n * this is white, the feature's color is not changed. This is set for all features\n * when a style's color is evaluated.\n *\n * @memberof Cesium3DTileFeature.prototype\n *\n * @type {Color}\n *\n * @default {@link Color.WHITE}\n */\n color: {\n get: function () {\n if (!defined(this._color)) {\n this._color = new Color();\n }\n return this._content.batchTable.getColor(this._batchId, this._color);\n },\n set: function (value) {\n this._content.batchTable.setColor(this._batchId, value);\n },\n },\n\n /**\n * Gets the content of the tile containing the feature.\n *\n * @memberof Cesium3DTileFeature.prototype\n *\n * @type {Cesium3DTileContent}\n *\n * @readonly\n * @private\n */\n content: {\n get: function () {\n return this._content;\n },\n },\n\n /**\n * Gets the tileset containing the feature.\n *\n * @memberof Cesium3DTileFeature.prototype\n *\n * @type {Cesium3DTileset}\n *\n * @readonly\n */\n tileset: {\n get: function () {\n return this._content.tileset;\n },\n },\n\n /**\n * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n * the tileset containing the feature.\n *\n * @memberof Cesium3DTileFeature.prototype\n *\n * @type {Cesium3DTileset}\n *\n * @readonly\n */\n primitive: {\n get: function () {\n return this._content.tileset;\n },\n },\n\n /**\n * @private\n */\n pickId: {\n get: function () {\n return this._content.batchTable.getPickColor(this._batchId);\n },\n },\n});\n\n/**\n * Returns whether the feature contains this property. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String} name The case-sensitive name of the property.\n * @returns {Boolean} Whether the feature contains this property.\n */\nCesium3DTileFeature.prototype.hasProperty = function (name) {\n return this._content.batchTable.hasProperty(this._batchId, name);\n};\n\n/**\n * Returns an array of property names for the feature. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String[]} [results] An array into which to store the results.\n * @returns {String[]} The names of the feature's properties.\n */\nCesium3DTileFeature.prototype.getPropertyNames = function (results) {\n return this._content.batchTable.getPropertyNames(this._batchId, results);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the property does not exist.\n *\n * @example\n * // Display all the properties for a feature in the console log.\n * var propertyNames = feature.getPropertyNames();\n * var length = propertyNames.length;\n * for (var i = 0; i < length; ++i) {\n * var propertyName = propertyNames[i];\n * console.log(propertyName + ': ' + feature.getProperty(propertyName));\n * }\n */\nCesium3DTileFeature.prototype.getProperty = function (name) {\n return this._content.batchTable.getProperty(this._batchId, name);\n};\n\n/**\n * Sets the value of the feature's property with the given name.\n * <p>\n * If a property with the given name doesn't exist, it is created.\n * </p>\n *\n * @param {String} name The case-sensitive name of the property.\n * @param {*} value The value of the property that will be copied.\n *\n * @exception {DeveloperError} Inherited batch table hierarchy property is read only.\n *\n * @example\n * var height = feature.getProperty('Height'); // e.g., the height of a building\n *\n * @example\n * var name = 'clicked';\n * if (feature.getProperty(name)) {\n * console.log('already clicked');\n * } else {\n * feature.setProperty(name, true);\n * console.log('first click');\n * }\n */\nCesium3DTileFeature.prototype.setProperty = function (name, value) {\n this._content.batchTable.setProperty(this._batchId, name, value);\n\n // PERFORMANCE_IDEA: Probably overkill, but maybe only mark the tile dirty if the\n // property is in one of the style's expressions or - if it can be done quickly -\n // if the new property value changed the result of an expression.\n this._content.featurePropertiesDirty = true;\n};\n\n/**\n * Returns whether the feature's class name equals <code>className</code>. Unlike {@link Cesium3DTileFeature#isClass}\n * this function only checks the feature's exact class and not inherited classes.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {String} className The name to check against.\n * @returns {Boolean} Whether the feature's class name equals <code>className</code>\n *\n * @private\n */\nCesium3DTileFeature.prototype.isExactClass = function (className) {\n return this._content.batchTable.isExactClass(this._batchId, className);\n};\n\n/**\n * Returns whether the feature's class or any inherited classes are named <code>className</code>.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {String} className The name to check against.\n * @returns {Boolean} Whether the feature's class or inherited classes are named <code>className</code>\n *\n * @private\n */\nCesium3DTileFeature.prototype.isClass = function (className) {\n return this._content.batchTable.isClass(this._batchId, className);\n};\n\n/**\n * Returns the feature's class name.\n * <p>\n * This function returns <code>undefined</code> if no batch table hierarchy is present.\n * </p>\n *\n * @returns {String} The feature's class name.\n *\n * @private\n */\nCesium3DTileFeature.prototype.getExactClassName = function () {\n return this._content.batchTable.getExactClassName(this._batchId);\n};\nexport default Cesium3DTileFeature;\n","import ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTileFeatureTable(featureTableJson, featureTableBinary) {\n this.json = featureTableJson;\n this.buffer = featureTableBinary;\n this._cachedTypedArrays = {};\n this.featuresLength = 0;\n}\n\nfunction getTypedArrayFromBinary(\n featureTable,\n semantic,\n componentType,\n componentLength,\n count,\n byteOffset\n) {\n var cachedTypedArrays = featureTable._cachedTypedArrays;\n var typedArray = cachedTypedArrays[semantic];\n if (!defined(typedArray)) {\n typedArray = ComponentDatatype.createArrayBufferView(\n componentType,\n featureTable.buffer.buffer,\n featureTable.buffer.byteOffset + byteOffset,\n count * componentLength\n );\n cachedTypedArrays[semantic] = typedArray;\n }\n return typedArray;\n}\n\nfunction getTypedArrayFromArray(featureTable, semantic, componentType, array) {\n var cachedTypedArrays = featureTable._cachedTypedArrays;\n var typedArray = cachedTypedArrays[semantic];\n if (!defined(typedArray)) {\n typedArray = ComponentDatatype.createTypedArray(componentType, array);\n cachedTypedArrays[semantic] = typedArray;\n }\n return typedArray;\n}\n\nCesium3DTileFeatureTable.prototype.getGlobalProperty = function (\n semantic,\n componentType,\n componentLength\n) {\n var jsonValue = this.json[semantic];\n if (!defined(jsonValue)) {\n return undefined;\n }\n\n if (defined(jsonValue.byteOffset)) {\n componentType = defaultValue(componentType, ComponentDatatype.UNSIGNED_INT);\n componentLength = defaultValue(componentLength, 1);\n return getTypedArrayFromBinary(\n this,\n semantic,\n componentType,\n componentLength,\n 1,\n jsonValue.byteOffset\n );\n }\n\n return jsonValue;\n};\n\nCesium3DTileFeatureTable.prototype.getPropertyArray = function (\n semantic,\n componentType,\n componentLength\n) {\n var jsonValue = this.json[semantic];\n if (!defined(jsonValue)) {\n return undefined;\n }\n\n if (defined(jsonValue.byteOffset)) {\n if (defined(jsonValue.componentType)) {\n componentType = ComponentDatatype.fromName(jsonValue.componentType);\n }\n return getTypedArrayFromBinary(\n this,\n semantic,\n componentType,\n componentLength,\n this.featuresLength,\n jsonValue.byteOffset\n );\n }\n\n return getTypedArrayFromArray(this, semantic, componentType, jsonValue);\n};\n\nCesium3DTileFeatureTable.prototype.getProperty = function (\n semantic,\n componentType,\n componentLength,\n featureId,\n result\n) {\n var jsonValue = this.json[semantic];\n if (!defined(jsonValue)) {\n return undefined;\n }\n\n var typedArray = this.getPropertyArray(\n semantic,\n componentType,\n componentLength\n );\n\n if (componentLength === 1) {\n return typedArray[featureId];\n }\n\n for (var i = 0; i < componentLength; ++i) {\n result[i] = typedArray[componentLength * featureId + i];\n }\n\n return result;\n};\nexport default Cesium3DTileFeatureTable;\n","import defaultValue from '../../Core/defaultValue.js'\n\n /**\n * Adds an element to an array and returns the element's index.\n *\n * @param {Array} array The array to add to.\n * @param {Object} element The element to add.\n * @param {Boolean} [checkDuplicates=false] When <code>true</code>, if a duplicate element is found its index is returned and <code>element</code> is not added to the array.\n *\n * @private\n */\n function addToArray(array, element, checkDuplicates) {\n checkDuplicates = defaultValue(checkDuplicates, false);\n if (checkDuplicates) {\n var index = array.indexOf(element);\n if (index > -1) {\n return index;\n }\n }\n\n array.push(element);\n return array.length - 1;\n }\n\n export default addToArray;\n","import defined from '../../Core/defined.js'\n\n /**\n * Checks whether the glTF has the given extension.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String} extension The name of the extension.\n * @returns {Boolean} Whether the glTF has the given extension.\n *\n * @private\n */\n function hasExtension(gltf, extension) {\n return defined(gltf.extensionsUsed) && (gltf.extensionsUsed.indexOf(extension) >= 0);\n }\n\n export default hasExtension;\n","import hasExtension from './hasExtension.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Contains traversal functions for processing elements of the glTF hierarchy.\n * @constructor\n *\n * @private\n */\n function ForEach() {\n }\n\n /**\n * Fallback for glTF 1.0\n * @private\n */\n ForEach.objectLegacy = function(objects, handler) {\n if (defined(objects)) {\n for (var objectId in objects) {\n if (Object.prototype.hasOwnProperty.call(objects, objectId)) {\n var object = objects[objectId];\n var value = handler(object, objectId);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n }\n };\n\n /**\n * @private\n */\n ForEach.object = function(arrayOfObjects, handler) {\n if (defined(arrayOfObjects)) {\n var length = arrayOfObjects.length;\n for (var i = 0; i < length; i++) {\n var object = arrayOfObjects[i];\n var value = handler(object, i);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n /**\n * Supports glTF 1.0 and 2.0\n * @private\n */\n ForEach.topLevel = function(gltf, name, handler) {\n var gltfProperty = gltf[name];\n if (defined(gltfProperty) && !Array.isArray(gltfProperty)) {\n return ForEach.objectLegacy(gltfProperty, handler);\n }\n\n return ForEach.object(gltfProperty, handler);\n };\n\n ForEach.accessor = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'accessors', handler);\n };\n\n ForEach.accessorWithSemantic = function(gltf, semantic, handler) {\n var visited = {};\n return ForEach.mesh(gltf, function(mesh) {\n return ForEach.meshPrimitive(mesh, function(primitive) {\n var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId, attributeSemantic) {\n if (attributeSemantic.indexOf(semantic) === 0 && !defined(visited[accessorId])) {\n visited[accessorId] = true;\n var value = handler(accessorId);\n\n if (defined(value)) {\n return value;\n }\n }\n });\n\n if (defined(valueForEach)) {\n return valueForEach;\n }\n\n return ForEach.meshPrimitiveTarget(primitive, function(target) {\n return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId, attributeSemantic) {\n if (attributeSemantic.indexOf(semantic) === 0 && !defined(visited[accessorId])) {\n visited[accessorId] = true;\n var value = handler(accessorId);\n\n if (defined(value)) {\n return value;\n }\n }\n });\n });\n });\n });\n };\n\n ForEach.accessorContainingVertexAttributeData = function(gltf, handler) {\n var visited = {};\n return ForEach.mesh(gltf, function(mesh) {\n return ForEach.meshPrimitive(mesh, function(primitive) {\n var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId) {\n if (!defined(visited[accessorId])) {\n visited[accessorId] = true;\n var value = handler(accessorId);\n\n if (defined(value)) {\n return value;\n }\n }\n });\n\n if (defined(valueForEach)) {\n return valueForEach;\n }\n\n return ForEach.meshPrimitiveTarget(primitive, function(target) {\n return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) {\n if (!defined(visited[accessorId])) {\n visited[accessorId] = true;\n var value = handler(accessorId);\n\n if (defined(value)) {\n return value;\n }\n }\n });\n });\n });\n });\n };\n\n ForEach.accessorContainingIndexData = function(gltf, handler) {\n var visited = {};\n return ForEach.mesh(gltf, function(mesh) {\n return ForEach.meshPrimitive(mesh, function(primitive) {\n var indices = primitive.indices;\n if (defined(indices) && !defined(visited[indices])) {\n visited[indices] = true;\n var value = handler(indices);\n\n if (defined(value)) {\n return value;\n }\n }\n });\n });\n };\n\n ForEach.animation = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'animations', handler);\n };\n\n ForEach.animationChannel = function(animation, handler) {\n var channels = animation.channels;\n return ForEach.object(channels, handler);\n };\n\n ForEach.animationSampler = function(animation, handler) {\n var samplers = animation.samplers;\n return ForEach.object(samplers, handler);\n };\n\n ForEach.buffer = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'buffers', handler);\n };\n\n ForEach.bufferView = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'bufferViews', handler);\n };\n\n ForEach.camera = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'cameras', handler);\n };\n\n ForEach.image = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'images', handler);\n };\n\n ForEach.compressedImage = function(image, handler) {\n if (defined(image.extras)) {\n var compressedImages = image.extras.compressedImage3DTiles;\n for (var type in compressedImages) {\n if (Object.prototype.hasOwnProperty.call(compressedImages, type)) {\n var compressedImage = compressedImages[type];\n var value = handler(compressedImage, type);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n }\n };\n\n ForEach.material = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'materials', handler);\n };\n\n ForEach.materialValue = function(material, handler) {\n var values = material.values;\n if (defined(material.extensions) && defined(material.extensions.KHR_techniques_webgl)) {\n values = material.extensions.KHR_techniques_webgl.values;\n }\n\n for (var name in values) {\n if (Object.prototype.hasOwnProperty.call(values, name)) {\n var value = handler(values[name], name);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.mesh = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'meshes', handler);\n };\n\n ForEach.meshPrimitive = function(mesh, handler) {\n var primitives = mesh.primitives;\n if (defined(primitives)) {\n var primitivesLength = primitives.length;\n for (var i = 0; i < primitivesLength; i++) {\n var primitive = primitives[i];\n var value = handler(primitive, i);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.meshPrimitiveAttribute = function(primitive, handler) {\n var attributes = primitive.attributes;\n for (var semantic in attributes) {\n if (Object.prototype.hasOwnProperty.call(attributes, semantic)) {\n var value = handler(attributes[semantic], semantic);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.meshPrimitiveTarget = function(primitive, handler) {\n var targets = primitive.targets;\n if (defined(targets)) {\n var length = targets.length;\n for (var i = 0; i < length; ++i) {\n var value = handler(targets[i], i);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.meshPrimitiveTargetAttribute = function(target, handler) {\n for (var semantic in target) {\n if (Object.prototype.hasOwnProperty.call(target, semantic)) {\n var accessorId = target[semantic];\n var value = handler(accessorId, semantic);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.node = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'nodes', handler);\n };\n\n ForEach.nodeInTree = function(gltf, nodeIds, handler) {\n var nodes = gltf.nodes;\n if (defined(nodes)) {\n var length = nodeIds.length;\n for (var i = 0; i < length; i++) {\n var nodeId = nodeIds[i];\n var node = nodes[nodeId];\n if (defined(node)) {\n var value = handler(node, nodeId);\n\n if (defined(value)) {\n return value;\n }\n\n var children = node.children;\n if (defined(children)) {\n value = ForEach.nodeInTree(gltf, children, handler);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n }\n }\n };\n\n ForEach.nodeInScene = function(gltf, scene, handler) {\n var sceneNodeIds = scene.nodes;\n if (defined(sceneNodeIds)) {\n return ForEach.nodeInTree(gltf, sceneNodeIds, handler);\n }\n };\n\n ForEach.program = function(gltf, handler) {\n if (hasExtension(gltf, 'KHR_techniques_webgl')) {\n return ForEach.object(gltf.extensions.KHR_techniques_webgl.programs, handler);\n }\n\n return ForEach.topLevel(gltf, 'programs', handler);\n };\n\n ForEach.sampler = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'samplers', handler);\n };\n\n ForEach.scene = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'scenes', handler);\n };\n\n ForEach.shader = function(gltf, handler) {\n if (hasExtension(gltf, 'KHR_techniques_webgl')) {\n return ForEach.object(gltf.extensions.KHR_techniques_webgl.shaders, handler);\n }\n\n return ForEach.topLevel(gltf, 'shaders', handler);\n };\n\n ForEach.skin = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'skins', handler);\n };\n\n ForEach.skinJoint = function(skin, handler) {\n var joints = skin.joints;\n if (defined(joints)) {\n var jointsLength = joints.length;\n for (var i = 0; i < jointsLength; i++) {\n var joint = joints[i];\n var value = handler(joint);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.techniqueAttribute = function(technique, handler) {\n var attributes = technique.attributes;\n for (var attributeName in attributes) {\n if (Object.prototype.hasOwnProperty.call(attributes, attributeName)) {\n var value = handler(attributes[attributeName], attributeName);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.techniqueUniform = function(technique, handler) {\n var uniforms = technique.uniforms;\n for (var uniformName in uniforms) {\n if (Object.prototype.hasOwnProperty.call(uniforms, uniformName)) {\n var value = handler(uniforms[uniformName], uniformName);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.techniqueParameter = function(technique, handler) {\n var parameters = technique.parameters;\n for (var parameterName in parameters) {\n if (Object.prototype.hasOwnProperty.call(parameters, parameterName)) {\n var value = handler(parameters[parameterName], parameterName);\n\n if (defined(value)) {\n return value;\n }\n }\n }\n };\n\n ForEach.technique = function(gltf, handler) {\n if (hasExtension(gltf, 'KHR_techniques_webgl')) {\n return ForEach.object(gltf.extensions.KHR_techniques_webgl.techniques, handler);\n }\n\n return ForEach.topLevel(gltf, 'techniques', handler);\n };\n\n ForEach.texture = function(gltf, handler) {\n return ForEach.topLevel(gltf, 'textures', handler);\n };\n\n export default ForEach;\n","\n\n /**\n * Utility function for retrieving the number of components in a given type.\n *\n * @param {String} type glTF type\n * @returns {Number} The number of components in that type.\n *\n * @private\n */\n function numberOfComponentsForType(type) {\n switch (type) {\n case 'SCALAR':\n return 1;\n case 'VEC2':\n return 2;\n case 'VEC3':\n return 3;\n case 'VEC4':\n case 'MAT2':\n return 4;\n case 'MAT3':\n return 9;\n case 'MAT4':\n return 16;\n }\n }\n\n export default numberOfComponentsForType;\n","import numberOfComponentsForType from './numberOfComponentsForType.js'\nimport ComponentDatatype from '../../Core/ComponentDatatype.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Returns the byte stride of the provided accessor.\n * If the byteStride is 0, it is calculated based on type and componentType\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {Object} accessor The accessor.\n * @returns {Number} The byte stride of the accessor.\n *\n * @private\n */\n function getAccessorByteStride(gltf, accessor) {\n var bufferViewId = accessor.bufferView;\n if (defined(bufferViewId)) {\n var bufferView = gltf.bufferViews[bufferViewId];\n if (defined(bufferView.byteStride) && bufferView.byteStride > 0) {\n return bufferView.byteStride;\n }\n }\n return ComponentDatatype.getSizeInBytes(accessor.componentType) * numberOfComponentsForType(accessor.type);\n }\n\n export default getAccessorByteStride;\n","import addToArray from './addToArray.js'\nimport ForEach from './ForEach.js'\nimport getAccessorByteStride from './getAccessorByteStride.js'\nimport defaultValue from '../../Core/defaultValue.js'\nimport defined from '../../Core/defined.js'\nimport WebGLConstants from '../../Core/WebGLConstants.js'\n\n /**\n * Adds default glTF values if they don't exist.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The modified glTF.\n *\n * @private\n */\n function addDefaults(gltf) {\n ForEach.accessor(gltf, function(accessor) {\n if (defined(accessor.bufferView)) {\n accessor.byteOffset = defaultValue(accessor.byteOffset, 0);\n }\n });\n\n ForEach.bufferView(gltf, function(bufferView) {\n if (defined(bufferView.buffer)) {\n bufferView.byteOffset = defaultValue(bufferView.byteOffset, 0);\n }\n });\n\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n primitive.mode = defaultValue(primitive.mode, WebGLConstants.TRIANGLES);\n if (!defined(primitive.material)) {\n if (!defined(gltf.materials)) {\n gltf.materials = [];\n }\n var defaultMaterial = {\n name: 'default'\n };\n primitive.material = addToArray(gltf.materials, defaultMaterial);\n }\n });\n });\n\n ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n var bufferViewId = accessor.bufferView;\n accessor.normalized = defaultValue(accessor.normalized, false);\n if (defined(bufferViewId)) {\n var bufferView = gltf.bufferViews[bufferViewId];\n bufferView.byteStride = getAccessorByteStride(gltf, accessor);\n bufferView.target = WebGLConstants.ARRAY_BUFFER;\n }\n });\n\n ForEach.accessorContainingIndexData(gltf, function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n var bufferViewId = accessor.bufferView;\n if (defined(bufferViewId)) {\n var bufferView = gltf.bufferViews[bufferViewId];\n bufferView.target = WebGLConstants.ELEMENT_ARRAY_BUFFER;\n }\n });\n\n ForEach.material(gltf, function(material) {\n var extensions = defaultValue(material.extensions, defaultValue.EMPTY_OBJECT);\n var materialsCommon = extensions.KHR_materials_common;\n if (defined(materialsCommon)) {\n var technique = materialsCommon.technique;\n var values = defined(materialsCommon.values) ? materialsCommon.values : {};\n materialsCommon.values = values;\n\n values.ambient = defined(values.ambient) ? values.ambient : [0.0, 0.0, 0.0, 1.0];\n values.emission = defined(values.emission) ? values.emission : [0.0, 0.0, 0.0, 1.0];\n\n values.transparency = defaultValue(values.transparency, 1.0);\n values.transparent = defaultValue(values.transparent, false);\n values.doubleSided = defaultValue(values.doubleSided, false);\n\n if (technique !== 'CONSTANT') {\n values.diffuse = defined(values.diffuse) ? values.diffuse : [0.0, 0.0, 0.0, 1.0];\n if (technique !== 'LAMBERT') {\n values.specular = defined(values.specular) ? values.specular : [0.0, 0.0, 0.0, 1.0];\n values.shininess = defaultValue(values.shininess, 0.0);\n }\n }\n return;\n }\n\n material.emissiveFactor = defaultValue(material.emissiveFactor, [0.0, 0.0, 0.0]);\n material.alphaMode = defaultValue(material.alphaMode, 'OPAQUE');\n material.doubleSided = defaultValue(material.doubleSided, false);\n\n if (material.alphaMode === 'MASK') {\n material.alphaCutoff = defaultValue(material.alphaCutoff, 0.5);\n }\n\n var techniquesExtension = extensions.KHR_techniques_webgl;\n if (defined(techniquesExtension)) {\n ForEach.materialValue(material, function (materialValue) {\n // Check if material value is a TextureInfo object\n if (defined(materialValue.index)) {\n addTextureDefaults(materialValue);\n }\n });\n }\n\n addTextureDefaults(material.emissiveTexture);\n addTextureDefaults(material.normalTexture);\n addTextureDefaults(material.occlusionTexture);\n\n var pbrMetallicRoughness = material.pbrMetallicRoughness;\n if (defined(pbrMetallicRoughness)) {\n pbrMetallicRoughness.baseColorFactor = defaultValue(pbrMetallicRoughness.baseColorFactor, [1.0, 1.0, 1.0, 1.0]);\n pbrMetallicRoughness.metallicFactor = defaultValue(pbrMetallicRoughness.metallicFactor, 1.0);\n pbrMetallicRoughness.roughnessFactor = defaultValue(pbrMetallicRoughness.roughnessFactor, 1.0);\n addTextureDefaults(pbrMetallicRoughness.baseColorTexture);\n addTextureDefaults(pbrMetallicRoughness.metallicRoughnessTexture);\n }\n\n var pbrSpecularGlossiness = extensions.pbrSpecularGlossiness;\n if (defined(pbrSpecularGlossiness)) {\n pbrSpecularGlossiness.diffuseFactor = defaultValue(pbrSpecularGlossiness.diffuseFactor, [1.0, 1.0, 1.0, 1.0]);\n pbrSpecularGlossiness.specularFactor = defaultValue(pbrSpecularGlossiness.specularFactor, [1.0, 1.0, 1.0]);\n pbrSpecularGlossiness.glossinessFactor = defaultValue(pbrSpecularGlossiness.glossinessFactor, 1.0);\n addTextureDefaults(pbrSpecularGlossiness.specularGlossinessTexture);\n }\n });\n\n ForEach.animation(gltf, function(animation) {\n ForEach.animationSampler(animation, function(sampler) {\n sampler.interpolation = defaultValue(sampler.interpolation, 'LINEAR');\n });\n });\n\n var animatedNodes = getAnimatedNodes(gltf);\n ForEach.node(gltf, function(node, id) {\n var animated = defined(animatedNodes[id]);\n if (animated || defined(node.translation) || defined(node.rotation) || defined(node.scale)) {\n node.translation = defaultValue(node.translation, [0.0, 0.0, 0.0]);\n node.rotation = defaultValue(node.rotation, [0.0, 0.0, 0.0, 1.0]);\n node.scale = defaultValue(node.scale, [1.0, 1.0, 1.0]);\n } else {\n node.matrix = defaultValue(node.matrix, [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]);\n }\n });\n\n ForEach.sampler(gltf, function(sampler) {\n sampler.wrapS = defaultValue(sampler.wrapS, WebGLConstants.REPEAT);\n sampler.wrapT = defaultValue(sampler.wrapT, WebGLConstants.REPEAT);\n });\n\n if (defined(gltf.scenes) && !defined(gltf.scene)) {\n gltf.scene = 0;\n }\n\n return gltf;\n }\n\n function getAnimatedNodes(gltf) {\n var nodes = {};\n ForEach.animation(gltf, function(animation) {\n ForEach.animationChannel(animation, function(channel) {\n var target = channel.target;\n var nodeId = target.node;\n var path = target.path;\n // Ignore animations that target 'weights'\n if (path === 'translation' || path === 'rotation' || path === 'scale') {\n nodes[nodeId] = true;\n }\n });\n });\n return nodes;\n }\n\n function addTextureDefaults(texture) {\n if (defined(texture)) {\n texture.texCoord = defaultValue(texture.texCoord, 0);\n }\n }\n\n export default addDefaults;\n","import ForEach from './ForEach.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Adds extras._pipeline to each object that can have extras in the glTF asset.\n * This stage runs before updateVersion and handles both glTF 1.0 and glTF 2.0 assets.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The glTF asset with the added pipeline extras.\n *\n * @private\n */\n function addPipelineExtras(gltf) {\n ForEach.shader(gltf, function(shader) {\n addExtras(shader);\n });\n ForEach.buffer(gltf, function(buffer) {\n addExtras(buffer);\n });\n ForEach.image(gltf, function (image) {\n addExtras(image);\n ForEach.compressedImage(image, function(compressedImage) {\n addExtras(compressedImage);\n });\n });\n\n addExtras(gltf);\n\n return gltf;\n }\n\n function addExtras(object) {\n object.extras = defined(object.extras) ? object.extras : {};\n object.extras._pipeline = defined(object.extras._pipeline) ? object.extras._pipeline : {};\n }\n\n export default addPipelineExtras;\n","import defined from '../../Core/defined.js'\n\n /**\n * Removes an extension from gltf.extensionsRequired if it is present.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String} extension The extension to remove.\n *\n * @private\n */\n function removeExtensionsRequired(gltf, extension) {\n var extensionsRequired = gltf.extensionsRequired;\n if (defined(extensionsRequired)) {\n var index = extensionsRequired.indexOf(extension);\n if (index >= 0) {\n extensionsRequired.splice(index, 1);\n }\n if (extensionsRequired.length === 0) {\n delete gltf.extensionsRequired;\n }\n }\n }\n\n export default removeExtensionsRequired;\n","import removeExtensionsRequired from './removeExtensionsRequired.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Removes an extension from gltf.extensionsUsed and gltf.extensionsRequired if it is present.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String} extension The extension to remove.\n *\n * @private\n */\n function removeExtensionsUsed(gltf, extension) {\n var extensionsUsed = gltf.extensionsUsed;\n if (defined(extensionsUsed)) {\n var index = extensionsUsed.indexOf(extension);\n if (index >= 0) {\n extensionsUsed.splice(index, 1);\n }\n removeExtensionsRequired(gltf, extension);\n if (extensionsUsed.length === 0) {\n delete gltf.extensionsUsed;\n }\n }\n }\n\n export default removeExtensionsUsed;\n","import addPipelineExtras from './addPipelineExtras.js'\nimport removeExtensionsUsed from './removeExtensionsUsed.js'\nimport defaultValue from '../../Core/defaultValue.js'\nimport defined from '../../Core/defined.js'\nimport getMagic from '../../Core/getMagic.js'\nimport getStringFromTypedArray from '../../Core/getStringFromTypedArray.js'\nimport RuntimeError from '../../Core/RuntimeError.js'\n\n var sizeOfUint32 = 4;\n\n /**\n * Convert a binary glTF to glTF.\n *\n * The returned glTF has pipeline extras included. The embedded binary data is stored in gltf.buffers[0].extras._pipeline.source.\n *\n * @param {Buffer} glb The glb data to parse.\n * @returns {Object} A javascript object containing a glTF asset with pipeline extras included.\n *\n * @private\n */\n function parseGlb(glb) {\n // Check that the magic string is present\n var magic = getMagic(glb);\n if (magic !== 'glTF') {\n throw new RuntimeError('File is not valid binary glTF');\n }\n\n var header = readHeader(glb, 0, 5);\n var version = header[1];\n if (version !== 1 && version !== 2) {\n throw new RuntimeError('Binary glTF version is not 1 or 2');\n }\n\n if (version === 1) {\n return parseGlbVersion1(glb, header);\n }\n\n return parseGlbVersion2(glb, header);\n }\n\n function readHeader(glb, byteOffset, count) {\n var dataView = new DataView(glb.buffer);\n var header = new Array(count);\n for (var i = 0; i < count; ++i) {\n header[i] = dataView.getUint32(glb.byteOffset + byteOffset + i * sizeOfUint32, true);\n }\n return header;\n }\n\n function parseGlbVersion1(glb, header) {\n var length = header[2];\n var contentLength = header[3];\n var contentFormat = header[4];\n\n // Check that the content format is 0, indicating that it is JSON\n if (contentFormat !== 0) {\n throw new RuntimeError('Binary glTF scene format is not JSON');\n }\n\n var jsonStart = 20;\n var binaryStart = jsonStart + contentLength;\n\n var contentString = getStringFromTypedArray(glb, jsonStart, contentLength);\n var gltf = JSON.parse(contentString);\n addPipelineExtras(gltf);\n\n var binaryBuffer = glb.subarray(binaryStart, length);\n\n var buffers = gltf.buffers;\n if (defined(buffers) && Object.keys(buffers).length > 0) {\n // In some older models, the binary glTF buffer is named KHR_binary_glTF\n var binaryGltfBuffer = defaultValue(buffers.binary_glTF, buffers.KHR_binary_glTF);\n if (defined(binaryGltfBuffer)) {\n binaryGltfBuffer.extras._pipeline.source = binaryBuffer;\n }\n }\n // Remove the KHR_binary_glTF extension\n removeExtensionsUsed(gltf, 'KHR_binary_glTF');\n return gltf;\n }\n\n function parseGlbVersion2(glb, header) {\n var length = header[2];\n var byteOffset = 12;\n var gltf;\n var binaryBuffer;\n while (byteOffset < length) {\n var chunkHeader = readHeader(glb, byteOffset, 2);\n var chunkLength = chunkHeader[0];\n var chunkType = chunkHeader[1];\n byteOffset += 8;\n var chunkBuffer = glb.subarray(byteOffset, byteOffset + chunkLength);\n byteOffset += chunkLength;\n // Load JSON chunk\n if (chunkType === 0x4E4F534A) {\n var jsonString = getStringFromTypedArray(chunkBuffer);\n gltf = JSON.parse(jsonString);\n addPipelineExtras(gltf);\n }\n // Load Binary chunk\n else if (chunkType === 0x004E4942) {\n binaryBuffer = chunkBuffer;\n }\n }\n if (defined(gltf) && defined(binaryBuffer)) {\n var buffers = gltf.buffers;\n if (defined(buffers) && buffers.length > 0) {\n var buffer = buffers[0];\n buffer.extras._pipeline.source = binaryBuffer;\n }\n }\n return gltf;\n }\n\n export default parseGlb;\n","import addToArray from './addToArray.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Adds an extension to gltf.extensionsUsed if it does not already exist.\n * Initializes extensionsUsed if it is not defined.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String} extension The extension to add.\n *\n * @private\n */\n function addExtensionsUsed(gltf, extension) {\n var extensionsUsed = gltf.extensionsUsed;\n if (!defined(extensionsUsed)) {\n extensionsUsed = [];\n gltf.extensionsUsed = extensionsUsed;\n }\n addToArray(extensionsUsed, extension, true);\n }\n\n export default addExtensionsUsed;\n","import ComponentDatatype from '../../Core/ComponentDatatype.js'\n\n /**\n * Returns a function to read and convert data from a DataView into an array.\n *\n * @param {Number} componentType Type to convert the data to.\n * @returns {ComponentReader} Function that reads and converts data.\n *\n * @private\n */\n function getComponentReader(componentType) {\n switch (componentType) {\n case ComponentDatatype.BYTE:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getInt8(byteOffset + i * componentTypeByteLength);\n }\n };\n case ComponentDatatype.UNSIGNED_BYTE:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getUint8(byteOffset + i * componentTypeByteLength);\n }\n };\n case ComponentDatatype.SHORT:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getInt16(byteOffset + i * componentTypeByteLength, true);\n }\n };\n case ComponentDatatype.UNSIGNED_SHORT:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getUint16(byteOffset + i * componentTypeByteLength, true);\n }\n };\n case ComponentDatatype.INT:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getInt32(byteOffset + i * componentTypeByteLength, true);\n }\n };\n case ComponentDatatype.UNSIGNED_INT:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getUint32(byteOffset + i * componentTypeByteLength, true);\n }\n };\n case ComponentDatatype.FLOAT:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getFloat32(byteOffset + i * componentTypeByteLength, true);\n }\n };\n case ComponentDatatype.DOUBLE:\n return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) {\n for (var i = 0; i < numberOfComponents; ++i) {\n result[i] = dataView.getFloat64(byteOffset + i * componentTypeByteLength, true);\n }\n };\n }\n }\n\n /**\n * A callback function that logs messages.\n * @callback ComponentReader\n *\n * @param {DataView} dataView The data view to read from.\n * @param {Number} byteOffset The byte offset applied when reading from the data view.\n * @param {Number} numberOfComponents The number of components to read.\n * @param {Number} componentTypeByteLength The byte length of each component.\n * @param {Number} result An array storing the components that are read.\n */\n\n export default getComponentReader;\n","import getAccessorByteStride from './getAccessorByteStride.js'\nimport getComponentReader from './getComponentReader.js'\nimport numberOfComponentsForType from './numberOfComponentsForType.js'\nimport arrayFill from '../../Core/arrayFill.js'\nimport ComponentDatatype from '../../Core/ComponentDatatype.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Finds the min and max values of the accessor.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {Object} accessor The accessor object from the glTF asset to read.\n * @returns {{min: Array, max: Array}} min holding the array of minimum values and max holding the array of maximum values.\n *\n * @private\n */\n function findAccessorMinMax(gltf, accessor) {\n var bufferViews = gltf.bufferViews;\n var buffers = gltf.buffers;\n var bufferViewId = accessor.bufferView;\n var numberOfComponents = numberOfComponentsForType(accessor.type);\n\n // According to the spec, when bufferView is not defined, accessor must be initialized with zeros\n if (!defined(accessor.bufferView)) {\n return {\n min: arrayFill(new Array(numberOfComponents), 0.0),\n max: arrayFill(new Array(numberOfComponents), 0.0)\n };\n }\n\n var min = arrayFill(new Array(numberOfComponents), Number.POSITIVE_INFINITY);\n var max = arrayFill(new Array(numberOfComponents), Number.NEGATIVE_INFINITY);\n\n var bufferView = bufferViews[bufferViewId];\n var bufferId = bufferView.buffer;\n var buffer = buffers[bufferId];\n var source = buffer.extras._pipeline.source;\n\n var count = accessor.count;\n var byteStride = getAccessorByteStride(gltf, accessor);\n var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset;\n var componentType = accessor.componentType;\n var componentTypeByteLength = ComponentDatatype.getSizeInBytes(componentType);\n var dataView = new DataView(source.buffer);\n var components = new Array(numberOfComponents);\n var componentReader = getComponentReader(componentType);\n\n for (var i = 0; i < count; i++) {\n componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components);\n for (var j = 0; j < numberOfComponents; j++) {\n var value = components[j];\n min[j] = Math.min(min[j], value);\n max[j] = Math.max(max[j], value);\n }\n byteOffset += byteStride;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n export default findAccessorMinMax;\n","import addExtensionsUsed from './addExtensionsUsed.js'\nimport ForEach from './ForEach.js'\nimport defaultValue from '../../Core/defaultValue.js'\nimport defined from '../../Core/defined.js'\nimport WebGLConstants from '../../Core/WebGLConstants.js'\n\n var defaultBlendEquation = [\n WebGLConstants.FUNC_ADD,\n WebGLConstants.FUNC_ADD\n ];\n\n var defaultBlendFactors = [\n WebGLConstants.ONE,\n WebGLConstants.ZERO,\n WebGLConstants.ONE,\n WebGLConstants.ZERO\n ];\n\n function isStateEnabled(renderStates, state) {\n var enabled = renderStates.enable;\n if (!defined(enabled)) {\n return false;\n }\n\n return (enabled.indexOf(state) > -1);\n }\n\n var supportedBlendFactors = [\n WebGLConstants.ZERO,\n WebGLConstants.ONE,\n WebGLConstants.SRC_COLOR,\n WebGLConstants.ONE_MINUS_SRC_COLOR,\n WebGLConstants.SRC_ALPHA,\n WebGLConstants.ONE_MINUS_SRC_ALPHA,\n WebGLConstants.DST_ALPHA,\n WebGLConstants.ONE_MINUS_DST_ALPHA,\n WebGLConstants.DST_COLOR,\n WebGLConstants.ONE_MINUS_DST_COLOR\n ];\n\n // If any of the blend factors are not supported, return the default\n function getSupportedBlendFactors(value, defaultValue) {\n if (!defined(value)) {\n return defaultValue;\n }\n\n for (var i = 0; i < 4; i++) {\n if (supportedBlendFactors.indexOf(value[i]) === -1) {\n return defaultValue;\n }\n }\n\n return value;\n }\n\n /**\n * Move glTF 1.0 technique render states to glTF 2.0 materials properties and KHR_blend extension.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The updated glTF asset.\n *\n * @private\n */\n function moveTechniqueRenderStates(gltf) {\n var blendingForTechnique = {};\n var materialPropertiesForTechnique = {};\n var techniquesLegacy = gltf.techniques;\n if (!defined(techniquesLegacy)) {\n return gltf;\n }\n\n ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) {\n var renderStates = techniqueLegacy.states;\n if (defined(renderStates)) {\n var materialProperties = materialPropertiesForTechnique[techniqueIndex] = {};\n\n // If BLEND is enabled, the material should have alpha mode BLEND\n if (isStateEnabled(renderStates, WebGLConstants.BLEND)) {\n materialProperties.alphaMode = 'BLEND';\n\n var blendFunctions = renderStates.functions;\n if (defined(blendFunctions) && (defined(blendFunctions.blendEquationSeparate)\n || defined(blendFunctions.blendFuncSeparate))) {\n blendingForTechnique[techniqueIndex] = {\n blendEquation: defaultValue(blendFunctions.blendEquationSeparate, defaultBlendEquation),\n blendFactors: getSupportedBlendFactors(blendFunctions.blendFuncSeparate, defaultBlendFactors)\n };\n }\n }\n\n // If CULL_FACE is not enabled, the material should be doubleSided\n if (!isStateEnabled(renderStates, WebGLConstants.CULL_FACE)) {\n materialProperties.doubleSided = true;\n }\n\n delete techniqueLegacy.states;\n }\n });\n\n if (Object.keys(blendingForTechnique).length > 0) {\n if (!defined(gltf.extensions)) {\n gltf.extensions = {};\n }\n\n addExtensionsUsed(gltf, 'KHR_blend');\n }\n\n ForEach.material(gltf, function (material) {\n if (defined(material.technique)) {\n var materialProperties = materialPropertiesForTechnique[material.technique];\n ForEach.objectLegacy(materialProperties, function (value, property) {\n material[property] = value;\n });\n\n var blending = blendingForTechnique[material.technique];\n if (defined(blending)) {\n if (!defined(material.extensions)) {\n material.extensions = {};\n }\n\n material.extensions.KHR_blend = blending;\n }\n }\n });\n\n return gltf;\n }\n\n export default moveTechniqueRenderStates;\n","import addExtensionsUsed from './addExtensionsUsed.js'\nimport addToArray from './addToArray.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Adds an extension to gltf.extensionsRequired if it does not already exist.\n * Initializes extensionsRequired if it is not defined.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String} extension The extension to add.\n *\n * @private\n */\n function addExtensionsRequired(gltf, extension) {\n var extensionsRequired = gltf.extensionsRequired;\n if (!defined(extensionsRequired)) {\n extensionsRequired = [];\n gltf.extensionsRequired = extensionsRequired;\n }\n addToArray(extensionsRequired, extension, true);\n addExtensionsUsed(gltf, extension);\n }\n\n export default addExtensionsRequired;\n","import addExtensionsUsed from './addExtensionsUsed.js'\nimport addExtensionsRequired from './addExtensionsRequired.js'\nimport addToArray from './addToArray.js'\nimport ForEach from './ForEach.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Move glTF 1.0 material techniques to glTF 2.0 KHR_techniques_webgl extension.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The updated glTF asset.\n *\n * @private\n */\n function moveTechniquesToExtension(gltf) {\n var techniquesLegacy = gltf.techniques;\n var mappedUniforms = {};\n var updatedTechniqueIndices = {};\n if (defined(techniquesLegacy)) {\n var extension = {\n programs: [],\n shaders: [],\n techniques: []\n };\n\n // Some 1.1 models have a glExtensionsUsed property that can be transferred to program.glExtensions\n var glExtensions = gltf.glExtensionsUsed;\n delete gltf.glExtensionsUsed;\n\n ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) {\n var technique = {\n name: techniqueLegacy.name,\n program: undefined,\n attributes: {},\n uniforms: {}\n };\n\n var parameterLegacy;\n ForEach.techniqueAttribute(techniqueLegacy, function (parameterName, attributeName) {\n parameterLegacy = techniqueLegacy.parameters[parameterName];\n technique.attributes[attributeName] = {\n semantic: parameterLegacy.semantic\n };\n });\n\n ForEach.techniqueUniform(techniqueLegacy, function (parameterName, uniformName) {\n parameterLegacy = techniqueLegacy.parameters[parameterName];\n technique.uniforms[uniformName] = {\n count: parameterLegacy.count,\n node: parameterLegacy.node,\n type: parameterLegacy.type,\n semantic: parameterLegacy.semantic,\n value: parameterLegacy.value\n };\n\n // Store the name of the uniform to update material values.\n mappedUniforms[parameterName] = uniformName;\n });\n\n var programLegacy = gltf.programs[techniqueLegacy.program];\n var program = {\n name: programLegacy.name,\n fragmentShader: undefined,\n vertexShader: undefined,\n glExtensions: glExtensions\n };\n\n var fs = gltf.shaders[programLegacy.fragmentShader];\n program.fragmentShader = addToArray(extension.shaders, fs, true);\n\n var vs = gltf.shaders[programLegacy.vertexShader];\n program.vertexShader = addToArray(extension.shaders, vs, true);\n\n technique.program = addToArray(extension.programs, program);\n\n // Store the index of the new technique to reference instead.\n updatedTechniqueIndices[techniqueIndex] = addToArray(extension.techniques, technique);\n });\n\n if (extension.techniques.length > 0) {\n if (!defined(gltf.extensions)) {\n gltf.extensions = {};\n }\n\n gltf.extensions.KHR_techniques_webgl = extension;\n addExtensionsUsed(gltf, 'KHR_techniques_webgl');\n addExtensionsRequired(gltf, 'KHR_techniques_webgl');\n }\n }\n\n ForEach.material(gltf, function (material) {\n if (defined(material.technique)) {\n var materialExtension = {\n technique: updatedTechniqueIndices[material.technique]\n };\n\n ForEach.objectLegacy(material.values, function (value, parameterName) {\n if (!defined(materialExtension.values)) {\n materialExtension.values = {};\n }\n\n var uniformName = mappedUniforms[parameterName];\n materialExtension.values[uniformName] = value;\n });\n\n if (!defined(material.extensions)) {\n material.extensions = {};\n }\n\n material.extensions.KHR_techniques_webgl = materialExtension;\n }\n\n delete material.technique;\n delete material.values;\n });\n\n delete gltf.techniques;\n delete gltf.programs;\n delete gltf.shaders;\n\n return gltf;\n }\n\n export default moveTechniquesToExtension;\n","import ForEach from './ForEach.js'\nimport hasExtension from './hasExtension.js'\nimport defaultValue from '../../Core/defaultValue.js'\nimport defined from '../../Core/defined.js'\n\n var allElementTypes = ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer'];\n\n /**\n * Removes unused elements from gltf.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {String[]} [elementTypes=['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer']] Element types to be removed. Needs to be a subset of ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer'], other items will be ignored.\n *\n * @private\n */\n function removeUnusedElements(gltf, elementTypes) {\n elementTypes = defaultValue(elementTypes, allElementTypes);\n allElementTypes.forEach(function(type) {\n if (elementTypes.indexOf(type) > -1) {\n removeUnusedElementsByType(gltf, type);\n }\n });\n return gltf;\n }\n\n var TypeToGltfElementName = {\n accessor: 'accessors',\n buffer: 'buffers',\n bufferView: 'bufferViews',\n node: 'nodes',\n material: 'materials',\n mesh: 'meshes'\n };\n\n function removeUnusedElementsByType(gltf, type) {\n var name = TypeToGltfElementName[type];\n var arrayOfObjects = gltf[name];\n\n if (defined(arrayOfObjects)) {\n var removed = 0;\n var usedIds = getListOfElementsIdsInUse[type](gltf);\n var length = arrayOfObjects.length;\n\n for (var i = 0; i < length; ++i) {\n if (!usedIds[i]) {\n Remove[type](gltf, i - removed);\n removed++;\n }\n }\n }\n }\n\n /**\n * Contains functions for removing elements from a glTF hierarchy.\n * Since top-level glTF elements are arrays, when something is removed, referring\n * indices need to be updated.\n * @constructor\n *\n * @private\n */\n function Remove() {}\n\n Remove.accessor = function(gltf, accessorId) {\n var accessors = gltf.accessors;\n\n accessors.splice(accessorId, 1);\n\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n // Update accessor ids for the primitives.\n ForEach.meshPrimitiveAttribute(primitive, function(attributeAccessorId, semantic) {\n if (attributeAccessorId > accessorId) {\n primitive.attributes[semantic]--;\n }\n });\n\n // Update accessor ids for the targets.\n ForEach.meshPrimitiveTarget(primitive, function(target) {\n ForEach.meshPrimitiveTargetAttribute(target, function(attributeAccessorId, semantic) {\n if (attributeAccessorId > accessorId) {\n target[semantic]--;\n }\n });\n });\n var indices = primitive.indices;\n if (defined(indices) && indices > accessorId) {\n primitive.indices--;\n }\n });\n });\n\n ForEach.skin(gltf, function(skin) {\n if (defined(skin.inverseBindMatrices) && skin.inverseBindMatrices > accessorId) {\n skin.inverseBindMatrices--;\n }\n });\n\n ForEach.animation(gltf, function(animation) {\n ForEach.animationSampler(animation, function(sampler) {\n if (defined(sampler.input) && sampler.input > accessorId) {\n sampler.input--;\n }\n if (defined(sampler.output) && sampler.output > accessorId) {\n sampler.output--;\n }\n });\n });\n };\n\n Remove.buffer = function(gltf, bufferId) {\n var buffers = gltf.buffers;\n\n buffers.splice(bufferId, 1);\n\n ForEach.bufferView(gltf, function(bufferView) {\n if (defined(bufferView.buffer) && bufferView.buffer > bufferId) {\n bufferView.buffer--;\n }\n });\n };\n\n Remove.bufferView = function(gltf, bufferViewId) {\n var bufferViews = gltf.bufferViews;\n\n bufferViews.splice(bufferViewId, 1);\n\n ForEach.accessor(gltf, function(accessor) {\n if (defined(accessor.bufferView) && accessor.bufferView > bufferViewId) {\n accessor.bufferView--;\n }\n });\n\n ForEach.shader(gltf, function(shader) {\n if (defined(shader.bufferView) && shader.bufferView > bufferViewId) {\n shader.bufferView--;\n }\n });\n\n ForEach.image(gltf, function(image) {\n if (defined(image.bufferView) && image.bufferView > bufferViewId) {\n image.bufferView--;\n }\n ForEach.compressedImage(image, function(compressedImage) {\n var compressedImageBufferView = compressedImage.bufferView;\n if (defined(compressedImageBufferView) && compressedImageBufferView > bufferViewId) {\n compressedImage.bufferView--;\n }\n });\n });\n\n if (hasExtension(gltf, 'KHR_draco_mesh_compression')) {\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n if (defined(primitive.extensions) &&\n defined(primitive.extensions.KHR_draco_mesh_compression)) {\n if (primitive.extensions.KHR_draco_mesh_compression.bufferView > bufferViewId) {\n primitive.extensions.KHR_draco_mesh_compression.bufferView--;\n }\n }\n });\n });\n }\n };\n\n Remove.mesh = function(gltf, meshId) {\n var meshes = gltf.meshes;\n meshes.splice(meshId, 1);\n\n ForEach.node(gltf, function(node) {\n if (defined(node.mesh)) {\n if (node.mesh > meshId) {\n node.mesh--;\n } else if (node.mesh === meshId) {\n // Remove reference to deleted mesh\n delete node.mesh;\n }\n }\n });\n };\n\n Remove.node = function(gltf, nodeId) {\n var nodes = gltf.nodes;\n nodes.splice(nodeId, 1);\n\n // Shift all node references\n ForEach.skin(gltf, function(skin) {\n if (defined(skin.skeleton) && skin.skeleton > nodeId) {\n skin.skeleton--;\n }\n\n skin.joints = skin.joints.map(function(x) {\n return x > nodeId ? x - 1 : x;\n });\n });\n ForEach.animation(gltf, function(animation) {\n ForEach.animationChannel(animation, function(channel) {\n if (defined(channel.target) && defined(channel.target.node) && (channel.target.node > nodeId)) {\n channel.target.node--;\n }\n });\n });\n ForEach.technique(gltf, function(technique) {\n ForEach.techniqueUniform(technique, function(uniform) {\n if (defined(uniform.node) && uniform.node > nodeId) {\n uniform.node--;\n }\n });\n });\n ForEach.node(gltf, function(node) {\n if (!defined(node.children)) {\n return;\n }\n\n node.children = node.children\n .filter(function(x) {\n return x !== nodeId; // Remove\n })\n .map(function(x) {\n return x > nodeId ? x - 1 : x; // Shift indices\n });\n });\n ForEach.scene(gltf, function(scene) {\n scene.nodes = scene.nodes\n .filter(function(x) {\n return x !== nodeId; // Remove\n })\n .map(function(x) {\n return x > nodeId ? x - 1 : x; // Shift indices\n });\n });\n };\n\n Remove.material = function(gltf, materialId) {\n var materials = gltf.materials;\n materials.splice(materialId, 1);\n\n // Shift other material ids\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n if (defined(primitive.material) && primitive.material > materialId) {\n primitive.material--;\n }\n });\n });\n };\n\n /**\n * Contains functions for getting a list of element ids in use by the glTF asset.\n * @constructor\n *\n * @private\n */\n function getListOfElementsIdsInUse() {}\n\n getListOfElementsIdsInUse.accessor = function(gltf) {\n // Calculate accessor's that are currently in use.\n var usedAccessorIds = {};\n\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n ForEach.meshPrimitiveAttribute(primitive, function(accessorId) {\n usedAccessorIds[accessorId] = true;\n });\n ForEach.meshPrimitiveTarget(primitive, function(target) {\n ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) {\n usedAccessorIds[accessorId] = true;\n });\n });\n var indices = primitive.indices;\n if (defined(indices)) {\n usedAccessorIds[indices] = true;\n }\n });\n });\n\n ForEach.skin(gltf, function(skin) {\n if (defined(skin.inverseBindMatrices)) {\n usedAccessorIds[skin.inverseBindMatrices] = true;\n }\n });\n\n ForEach.animation(gltf, function(animation) {\n ForEach.animationSampler(animation, function(sampler) {\n if (defined(sampler.input)) {\n usedAccessorIds[sampler.input] = true;\n }\n if (defined(sampler.output)) {\n usedAccessorIds[sampler.output] = true;\n }\n });\n });\n\n return usedAccessorIds;\n };\n\n getListOfElementsIdsInUse.buffer = function(gltf) {\n // Calculate buffer's that are currently in use.\n var usedBufferIds = {};\n\n ForEach.bufferView(gltf, function(bufferView) {\n if (defined(bufferView.buffer)) {\n usedBufferIds[bufferView.buffer] = true;\n }\n });\n\n return usedBufferIds;\n };\n\n getListOfElementsIdsInUse.bufferView = function(gltf) {\n // Calculate bufferView's that are currently in use.\n var usedBufferViewIds = {};\n\n ForEach.accessor(gltf, function(accessor) {\n if (defined(accessor.bufferView)) {\n usedBufferViewIds[accessor.bufferView] = true;\n }\n });\n\n ForEach.shader(gltf, function(shader) {\n if (defined(shader.bufferView)) {\n usedBufferViewIds[shader.bufferView] = true;\n }\n });\n\n ForEach.image(gltf, function(image) {\n if (defined(image.bufferView)) {\n usedBufferViewIds[image.bufferView] = true;\n }\n ForEach.compressedImage(image, function(compressedImage) {\n if (defined(compressedImage.bufferView)) {\n usedBufferViewIds[compressedImage.bufferView] = true;\n }\n });\n });\n\n if (hasExtension(gltf, 'KHR_draco_mesh_compression')) {\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n if (defined(primitive.extensions) &&\n defined(primitive.extensions.KHR_draco_mesh_compression)) {\n usedBufferViewIds[primitive.extensions.KHR_draco_mesh_compression.bufferView] = true;\n }\n });\n });\n }\n\n return usedBufferViewIds;\n };\n\n getListOfElementsIdsInUse.mesh = function(gltf) {\n var usedMeshIds = {};\n ForEach.node(gltf, function(node) {\n if (defined(node.mesh && defined(gltf.meshes))) {\n var mesh = gltf.meshes[node.mesh];\n if (defined(mesh) && defined(mesh.primitives) && (mesh.primitives.length > 0)) {\n usedMeshIds[node.mesh] = true;\n }\n }\n });\n\n return usedMeshIds;\n };\n\n // Check if node is empty. It is considered empty if neither referencing\n // mesh, camera, extensions and has no children\n function nodeIsEmpty(gltf, node) {\n if (defined(node.mesh) || defined(node.camera) || defined(node.skin)\n || defined(node.weights) || defined(node.extras)\n || (defined(node.extensions) && node.extensions.length !== 0)) {\n return false;\n }\n\n // Empty if no children or children are all empty nodes\n return !defined(node.children)\n || node.children.filter(function(n) {\n return !nodeIsEmpty(gltf, gltf.nodes[n]);\n }).length === 0;\n }\n\n getListOfElementsIdsInUse.node = function(gltf) {\n var usedNodeIds = {};\n ForEach.node(gltf, function(node, nodeId) {\n if (!nodeIsEmpty(gltf, node)) {\n usedNodeIds[nodeId] = true;\n }\n });\n ForEach.skin(gltf, function(skin) {\n if (defined(skin.skeleton)) {\n usedNodeIds[skin.skeleton] = true;\n }\n\n ForEach.skinJoint(skin, function(joint) {\n usedNodeIds[joint] = true;\n });\n });\n ForEach.animation(gltf, function(animation) {\n ForEach.animationChannel(animation, function(channel) {\n if (defined(channel.target) && defined(channel.target.node)) {\n usedNodeIds[channel.target.node] = true;\n }\n });\n });\n ForEach.technique(gltf, function(technique) {\n ForEach.techniqueUniform(technique, function(uniform) {\n if (defined(uniform.node)) {\n usedNodeIds[uniform.node] = true;\n }\n });\n });\n\n return usedNodeIds;\n };\n\n getListOfElementsIdsInUse.material = function(gltf) {\n var usedMaterialIds = {};\n\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n if (defined(primitive.material)) {\n usedMaterialIds[primitive.material] = true;\n }\n });\n });\n\n return usedMaterialIds;\n };\n\n export default removeUnusedElements;\n","import addToArray from './addToArray.js'\n\n /**\n * Adds buffer to gltf.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {Buffer} buffer A Buffer object which will be added to gltf.buffers.\n * @returns {Number} The bufferView id of the newly added bufferView.\n *\n * @private\n */\n function addBuffer(gltf, buffer) {\n var newBuffer = {\n byteLength: buffer.length,\n extras: {\n _pipeline: {\n source: buffer\n }\n }\n };\n var bufferId = addToArray(gltf.buffers, newBuffer);\n var bufferView = {\n buffer: bufferId,\n byteOffset: 0,\n byteLength: buffer.length\n };\n return addToArray(gltf.bufferViews, bufferView);\n }\n\n export default addBuffer;\n","import getAccessorByteStride from './getAccessorByteStride.js'\nimport getComponentReader from './getComponentReader.js'\nimport numberOfComponentsForType from './numberOfComponentsForType.js'\nimport arrayFill from '../../Core/arrayFill.js'\nimport ComponentDatatype from '../../Core/ComponentDatatype.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Returns the accessor data in a contiguous array.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {Object} accessor The accessor.\n * @returns {Array} The accessor values in a contiguous array.\n *\n * @private\n */\n function readAccessorPacked(gltf, accessor) {\n var byteStride = getAccessorByteStride(gltf, accessor);\n var componentTypeByteLength = ComponentDatatype.getSizeInBytes(accessor.componentType);\n var numberOfComponents = numberOfComponentsForType(accessor.type);\n var count = accessor.count;\n var values = new Array(numberOfComponents * count);\n\n if (!defined(accessor.bufferView)) {\n arrayFill(values, 0);\n return values;\n }\n\n var bufferView = gltf.bufferViews[accessor.bufferView];\n var source = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset;\n\n var dataView = new DataView(source.buffer);\n var components = new Array(numberOfComponents);\n var componentReader = getComponentReader(accessor.componentType);\n\n for (var i = 0; i < count; ++i) {\n componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components);\n for (var j = 0; j < numberOfComponents; ++j) {\n values[i * numberOfComponents + j] = components[j];\n }\n byteOffset += byteStride;\n }\n return values;\n }\n\n export default readAccessorPacked;\n","import addBuffer from './addBuffer.js'\nimport ForEach from './ForEach.js'\nimport readAccessorPacked from './readAccessorPacked.js'\nimport ComponentDatatype from '../../Core/ComponentDatatype.js'\nimport WebGLConstants from '../../Core/WebGLConstants.js'\n\n /**\n * Update accessors referenced by JOINTS_0 and WEIGHTS_0 attributes to use correct component types.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The glTF asset with compressed meshes.\n *\n * @private\n */\n function updateAccessorComponentTypes(gltf) {\n var componentType;\n ForEach.accessorWithSemantic(gltf, 'JOINTS_0', function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n componentType = accessor.componentType;\n if (componentType === WebGLConstants.BYTE) {\n convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE);\n } else if (componentType !== WebGLConstants.UNSIGNED_BYTE\n && componentType !== WebGLConstants.UNSIGNED_SHORT) {\n convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT);\n }\n });\n ForEach.accessorWithSemantic(gltf, 'WEIGHTS_0', function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n componentType = accessor.componentType;\n if (componentType === WebGLConstants.BYTE) {\n convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE);\n } else if (componentType === WebGLConstants.SHORT) {\n convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT);\n }\n });\n\n return gltf;\n }\n\n function convertType(gltf, accessor, updatedComponentType) {\n var typedArray = ComponentDatatype.createTypedArray(updatedComponentType, readAccessorPacked(gltf, accessor));\n var newBuffer = new Uint8Array(typedArray.buffer);\n accessor.bufferView = addBuffer(gltf, newBuffer);\n accessor.componentType = updatedComponentType;\n accessor.byteOffset = 0;\n }\n\n export default updateAccessorComponentTypes;\n","import addExtensionsUsed from './addExtensionsUsed.js'\nimport addToArray from './addToArray.js'\nimport findAccessorMinMax from './findAccessorMinMax.js'\nimport ForEach from './ForEach.js'\nimport getAccessorByteStride from './getAccessorByteStride.js'\nimport numberOfComponentsForType from './numberOfComponentsForType.js'\nimport moveTechniqueRenderStates from './moveTechniqueRenderStates.js'\nimport moveTechniquesToExtension from './moveTechniquesToExtension.js'\nimport removeUnusedElements from './removeUnusedElements.js'\nimport updateAccessorComponentTypes from './updateAccessorComponentTypes.js'\nimport Cartesian3 from '../../Core/Cartesian3.js'\nimport Cartesian4 from '../../Core/Cartesian4.js'\nimport clone from '../../Core/clone.js'\nimport ComponentDatatype from '../../Core/ComponentDatatype.js'\nimport defaultValue from '../../Core/defaultValue.js'\nimport defined from '../../Core/defined.js'\nimport Matrix4 from '../../Core/Matrix4.js'\nimport Quaternion from '../../Core/Quaternion.js'\nimport WebGLConstants from '../../Core/WebGLConstants.js'\n\n var updateFunctions = {\n '0.8': glTF08to10,\n '1.0': glTF10to20,\n '2.0': undefined\n };\n\n /**\n * Update the glTF version to the latest version (2.0), or targetVersion if specified.\n * Applies changes made to the glTF spec between revisions so that the core library\n * only has to handle the latest version.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @param {Object} [options] Options for updating the glTF.\n * @param {String} [options.targetVersion] The glTF will be upgraded until it hits the specified version.\n * @returns {Object} The updated glTF asset.\n *\n * @private\n */\n function updateVersion(gltf, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var targetVersion = options.targetVersion;\n var version = gltf.version;\n\n gltf.asset = defaultValue(gltf.asset, {\n version: '1.0'\n });\n\n gltf.asset.version = defaultValue(gltf.asset.version, '1.0');\n version = defaultValue(version, gltf.asset.version).toString();\n\n // Invalid version\n if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) {\n // Try truncating trailing version numbers, could be a number as well if it is 0.8\n if (defined(version)) {\n version = version.substring(0, 3);\n }\n // Default to 1.0 if it cannot be determined\n if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) {\n version = '1.0';\n }\n }\n\n var updateFunction = updateFunctions[version];\n\n while (defined(updateFunction)) {\n if (version === targetVersion) {\n break;\n }\n updateFunction(gltf, options);\n version = gltf.asset.version;\n updateFunction = updateFunctions[version];\n }\n return gltf;\n }\n\n function updateInstanceTechniques(gltf) {\n var materials = gltf.materials;\n for (var materialId in materials) {\n if (Object.prototype.hasOwnProperty.call(materials, materialId)) {\n var material = materials[materialId];\n var instanceTechnique = material.instanceTechnique;\n if (defined(instanceTechnique)) {\n material.technique = instanceTechnique.technique;\n material.values = instanceTechnique.values;\n delete material.instanceTechnique;\n }\n }\n }\n }\n\n function setPrimitiveModes(gltf) {\n var meshes = gltf.meshes;\n for (var meshId in meshes) {\n if (Object.prototype.hasOwnProperty.call(meshes, meshId)) {\n var mesh = meshes[meshId];\n var primitives = mesh.primitives;\n if (defined(primitives)) {\n var primitivesLength = primitives.length;\n for (var i = 0; i < primitivesLength; ++i) {\n var primitive = primitives[i];\n var defaultMode = defaultValue(primitive.primitive, WebGLConstants.TRIANGLES);\n primitive.mode = defaultValue(primitive.mode, defaultMode);\n delete primitive.primitive;\n }\n }\n }\n }\n }\n\n function updateNodes(gltf) {\n var nodes = gltf.nodes;\n var axis = new Cartesian3();\n var quat = new Quaternion();\n for (var nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n var node = nodes[nodeId];\n if (defined(node.rotation)) {\n var rotation = node.rotation;\n Cartesian3.fromArray(rotation, 0, axis);\n Quaternion.fromAxisAngle(axis, rotation[3], quat);\n node.rotation = [quat.x, quat.y, quat.z, quat.w];\n }\n var instanceSkin = node.instanceSkin;\n if (defined(instanceSkin)) {\n node.skeletons = instanceSkin.skeletons;\n node.skin = instanceSkin.skin;\n node.meshes = instanceSkin.meshes;\n delete node.instanceSkin;\n }\n }\n }\n }\n\n function updateAnimations(gltf) {\n var animations = gltf.animations;\n var accessors = gltf.accessors;\n var bufferViews = gltf.bufferViews;\n var buffers = gltf.buffers;\n var updatedAccessors = {};\n var axis = new Cartesian3();\n var quat = new Quaternion();\n for (var animationId in animations) {\n if (Object.prototype.hasOwnProperty.call(animations, animationId)) {\n var animation = animations[animationId];\n var channels = animation.channels;\n var parameters = animation.parameters;\n var samplers = animation.samplers;\n if (defined(channels)) {\n var channelsLength = channels.length;\n for (var i = 0; i < channelsLength; ++i) {\n var channel = channels[i];\n if (channel.target.path === 'rotation') {\n var accessorId = parameters[samplers[channel.sampler].output];\n if (defined(updatedAccessors[accessorId])) {\n continue;\n }\n updatedAccessors[accessorId] = true;\n var accessor = accessors[accessorId];\n var bufferView = bufferViews[accessor.bufferView];\n var buffer = buffers[bufferView.buffer];\n var source = buffer.extras._pipeline.source;\n var byteOffset = source.byteOffset + bufferView.byteOffset + accessor.byteOffset;\n var componentType = accessor.componentType;\n var count = accessor.count;\n var componentsLength = numberOfComponentsForType(accessor.type);\n var length = accessor.count * componentsLength;\n var typedArray = ComponentDatatype.createArrayBufferView(componentType, source.buffer, byteOffset, length);\n\n for (var j = 0; j < count; j++) {\n var offset = j * componentsLength;\n Cartesian3.unpack(typedArray, offset, axis);\n var angle = typedArray[offset + 3];\n Quaternion.fromAxisAngle(axis, angle, quat);\n Quaternion.pack(quat, typedArray, offset);\n }\n }\n }\n }\n }\n }\n }\n\n function removeTechniquePasses(gltf) {\n var techniques = gltf.techniques;\n for (var techniqueId in techniques) {\n if (Object.prototype.hasOwnProperty.call(techniques, techniqueId)) {\n var technique = techniques[techniqueId];\n var passes = technique.passes;\n if (defined(passes)) {\n var passName = defaultValue(technique.pass, 'defaultPass');\n if (Object.prototype.hasOwnProperty.call(passes, passName)) {\n var pass = passes[passName];\n var instanceProgram = pass.instanceProgram;\n technique.attributes = defaultValue(technique.attributes, instanceProgram.attributes);\n technique.program = defaultValue(technique.program, instanceProgram.program);\n technique.uniforms = defaultValue(technique.uniforms, instanceProgram.uniforms);\n technique.states = defaultValue(technique.states, pass.states);\n }\n delete technique.passes;\n delete technique.pass;\n }\n }\n }\n }\n\n function glTF08to10(gltf) {\n if (!defined(gltf.asset)) {\n gltf.asset = {};\n }\n var asset = gltf.asset;\n asset.version = '1.0';\n // Profile should be an object, not a string\n if (typeof asset.profile === 'string') {\n var split = asset.profile.split(' ');\n asset.profile = {\n api: split[0],\n version: split[1]\n };\n } else {\n asset.profile = {};\n }\n\n // Version property should be in asset, not on the root element\n if (defined(gltf.version)) {\n delete gltf.version;\n }\n // material.instanceTechnique properties should be directly on the material\n updateInstanceTechniques(gltf);\n // primitive.primitive should be primitive.mode\n setPrimitiveModes(gltf);\n // Node rotation should be quaternion, not axis-angle\n // node.instanceSkin is deprecated\n updateNodes(gltf);\n // Animations that target rotations should be quaternion, not axis-angle\n updateAnimations(gltf);\n // technique.pass and techniques.passes are deprecated\n removeTechniquePasses(gltf);\n // gltf.allExtensions -> extensionsUsed\n if (defined(gltf.allExtensions)) {\n gltf.extensionsUsed = gltf.allExtensions;\n delete gltf.allExtensions;\n }\n // gltf.lights -> khrMaterialsCommon.lights\n if (defined(gltf.lights)) {\n var extensions = defaultValue(gltf.extensions, {});\n gltf.extensions = extensions;\n var materialsCommon = defaultValue(extensions.KHR_materials_common, {});\n extensions.KHR_materials_common = materialsCommon;\n materialsCommon.lights = gltf.lights;\n delete gltf.lights;\n addExtensionsUsed(gltf, 'KHR_materials_common');\n }\n }\n\n function removeAnimationSamplersIndirection(gltf) {\n var animations = gltf.animations;\n for (var animationId in animations) {\n if (Object.prototype.hasOwnProperty.call(animations, animationId)) {\n var animation = animations[animationId];\n var parameters = animation.parameters;\n if (defined(parameters)) {\n var samplers = animation.samplers;\n for (var samplerId in samplers) {\n if (Object.prototype.hasOwnProperty.call(samplers, samplerId)) {\n var sampler = samplers[samplerId];\n sampler.input = parameters[sampler.input];\n sampler.output = parameters[sampler.output];\n }\n }\n delete animation.parameters;\n }\n }\n }\n }\n\n function objectToArray(object, mapping) {\n var array = [];\n for (var id in object) {\n if (Object.prototype.hasOwnProperty.call(object, id)) {\n var value = object[id];\n mapping[id] = array.length;\n array.push(value);\n if (!defined(value.name)) {\n value.name = id;\n }\n }\n }\n return array;\n }\n\n function objectsToArrays(gltf) {\n var i;\n var globalMapping = {\n accessors: {},\n animations: {},\n buffers: {},\n bufferViews: {},\n cameras: {},\n images: {},\n materials: {},\n meshes: {},\n nodes: {},\n programs: {},\n samplers: {},\n scenes: {},\n shaders: {},\n skins: {},\n textures: {},\n techniques: {}\n };\n\n // Map joint names to id names\n var jointName;\n var jointNameToId = {};\n var nodes = gltf.nodes;\n for (var id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n jointName = nodes[id].jointName;\n if (defined(jointName)) {\n jointNameToId[jointName] = id;\n }\n }\n }\n\n // Convert top level objects to arrays\n for (var topLevelId in gltf) {\n if (Object.prototype.hasOwnProperty.call(gltf, topLevelId) && defined(globalMapping[topLevelId])) {\n var objectMapping = {};\n var object = gltf[topLevelId];\n gltf[topLevelId] = objectToArray(object, objectMapping);\n globalMapping[topLevelId] = objectMapping;\n }\n }\n\n // Remap joint names to array indexes\n for (jointName in jointNameToId) {\n if (Object.prototype.hasOwnProperty.call(jointNameToId, jointName)) {\n jointNameToId[jointName] = globalMapping.nodes[jointNameToId[jointName]];\n }\n }\n\n // Fix references\n if (defined(gltf.scene)) {\n gltf.scene = globalMapping.scenes[gltf.scene];\n }\n ForEach.bufferView(gltf, function(bufferView) {\n if (defined(bufferView.buffer)) {\n bufferView.buffer = globalMapping.buffers[bufferView.buffer];\n }\n });\n ForEach.accessor(gltf, function(accessor) {\n if (defined(accessor.bufferView)) {\n accessor.bufferView = globalMapping.bufferViews[accessor.bufferView];\n }\n });\n ForEach.shader(gltf, function(shader) {\n var extensions = shader.extensions;\n if (defined(extensions)) {\n var binaryGltf = extensions.KHR_binary_glTF;\n if (defined(binaryGltf)) {\n shader.bufferView = globalMapping.bufferViews[binaryGltf.bufferView];\n delete extensions.KHR_binary_glTF;\n }\n if (Object.keys(extensions).length === 0) {\n delete shader.extensions;\n }\n }\n });\n ForEach.program(gltf, function(program) {\n if (defined(program.vertexShader)) {\n program.vertexShader = globalMapping.shaders[program.vertexShader];\n }\n if (defined(program.fragmentShader)) {\n program.fragmentShader = globalMapping.shaders[program.fragmentShader];\n }\n });\n ForEach.technique(gltf, function(technique) {\n if (defined(technique.program)) {\n technique.program = globalMapping.programs[technique.program];\n }\n ForEach.techniqueParameter(technique, function(parameter) {\n if (defined(parameter.node)) {\n parameter.node = globalMapping.nodes[parameter.node];\n }\n var value = parameter.value;\n if (typeof value === 'string') {\n parameter.value = {\n index: globalMapping.textures[value]\n };\n }\n });\n });\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n if (defined(primitive.indices)) {\n primitive.indices = globalMapping.accessors[primitive.indices];\n }\n ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) {\n primitive.attributes[semantic] = globalMapping.accessors[accessorId];\n });\n if (defined(primitive.material)) {\n primitive.material = globalMapping.materials[primitive.material];\n }\n });\n });\n ForEach.node(gltf, function(node) {\n var children = node.children;\n if (defined(children)) {\n var childrenLength = children.length;\n for (i = 0; i < childrenLength; ++i) {\n children[i] = globalMapping.nodes[children[i]];\n }\n }\n if (defined(node.meshes)) {\n // Split out meshes on nodes\n var meshes = node.meshes;\n var meshesLength = meshes.length;\n if (meshesLength > 0) {\n node.mesh = globalMapping.meshes[meshes[0]];\n for (i = 1; i < meshesLength; ++i) {\n var meshNode = {\n mesh: globalMapping.meshes[meshes[i]]\n };\n var meshNodeId = addToArray(gltf.nodes, meshNode);\n if (!defined(children)) {\n children = [];\n node.children = children;\n }\n children.push(meshNodeId);\n }\n }\n delete node.meshes;\n }\n if (defined(node.camera)) {\n node.camera = globalMapping.cameras[node.camera];\n }\n if (defined(node.skin)) {\n node.skin = globalMapping.skins[node.skin];\n }\n if (defined(node.skeletons)) {\n // Assign skeletons to skins\n var skeletons = node.skeletons;\n var skeletonsLength = skeletons.length;\n if ((skeletonsLength > 0) && defined(node.skin)) {\n var skin = gltf.skins[node.skin];\n skin.skeleton = globalMapping.nodes[skeletons[0]];\n }\n delete node.skeletons;\n }\n if (defined(node.jointName)) {\n delete node.jointName;\n }\n });\n ForEach.skin(gltf, function(skin) {\n if (defined(skin.inverseBindMatrices)) {\n skin.inverseBindMatrices = globalMapping.accessors[skin.inverseBindMatrices];\n }\n var jointNames = skin.jointNames;\n if (defined(jointNames)) {\n var joints = [];\n var jointNamesLength = jointNames.length;\n for (i = 0; i < jointNamesLength; ++i) {\n joints[i] = jointNameToId[jointNames[i]];\n }\n skin.joints = joints;\n delete skin.jointNames;\n }\n });\n ForEach.scene(gltf, function(scene) {\n var sceneNodes = scene.nodes;\n if (defined(sceneNodes)) {\n var sceneNodesLength = sceneNodes.length;\n for (i = 0; i < sceneNodesLength; ++i) {\n sceneNodes[i] = globalMapping.nodes[sceneNodes[i]];\n }\n }\n });\n ForEach.animation(gltf, function(animation) {\n var samplerMapping = {};\n animation.samplers = objectToArray(animation.samplers, samplerMapping);\n ForEach.animationSampler(animation, function(sampler) {\n sampler.input = globalMapping.accessors[sampler.input];\n sampler.output = globalMapping.accessors[sampler.output];\n });\n ForEach.animationChannel(animation, function(channel) {\n channel.sampler = samplerMapping[channel.sampler];\n var target = channel.target;\n if (defined(target)) {\n target.node = globalMapping.nodes[target.id];\n delete target.id;\n }\n });\n });\n ForEach.material(gltf, function(material) {\n if (defined(material.technique)) {\n material.technique = globalMapping.techniques[material.technique];\n }\n ForEach.materialValue(material, function(value, name) {\n if (typeof value === 'string') {\n material.values[name] = {\n index: globalMapping.textures[value]\n };\n }\n });\n var extensions = material.extensions;\n if (defined(extensions)) {\n var materialsCommon = extensions.KHR_materials_common;\n if (defined(materialsCommon)) {\n ForEach.materialValue(materialsCommon, function(value, name) {\n if (typeof value === 'string') {\n materialsCommon.values[name] = {\n index: globalMapping.textures[value]\n };\n }\n });\n }\n }\n });\n ForEach.image(gltf, function(image) {\n var extensions = image.extensions;\n if (defined(extensions)) {\n var binaryGltf = extensions.KHR_binary_glTF;\n if (defined(binaryGltf)) {\n image.bufferView = globalMapping.bufferViews[binaryGltf.bufferView];\n image.mimeType = binaryGltf.mimeType;\n delete extensions.KHR_binary_glTF;\n }\n if (Object.keys(extensions).length === 0) {\n delete image.extensions;\n }\n }\n ForEach.compressedImage(image, function(compressedImage) {\n var compressedExtensions = compressedImage.extensions;\n if (defined(compressedExtensions)) {\n var compressedBinaryGltf = compressedExtensions.KHR_binary_glTF;\n if (defined(compressedBinaryGltf)) {\n compressedImage.bufferView = globalMapping.bufferViews[compressedBinaryGltf.bufferView];\n compressedImage.mimeType = compressedBinaryGltf.mimeType;\n delete compressedExtensions.KHR_binary_glTF;\n }\n if (Object.keys(extensions).length === 0) {\n delete compressedImage.extensions;\n }\n }\n });\n });\n ForEach.texture(gltf, function(texture) {\n if (defined(texture.sampler)) {\n texture.sampler = globalMapping.samplers[texture.sampler];\n }\n if (defined(texture.source)) {\n texture.source = globalMapping.images[texture.source];\n }\n });\n }\n\n function removeAnimationSamplerNames(gltf) {\n ForEach.animation(gltf, function(animation) {\n ForEach.animationSampler(animation, function(sampler) {\n delete sampler.name;\n });\n });\n }\n\n function removeEmptyArrays(gltf) {\n for (var topLevelId in gltf) {\n if (Object.prototype.hasOwnProperty.call(gltf, topLevelId)) {\n var array = gltf[topLevelId];\n if (Array.isArray(array) && array.length === 0) {\n delete gltf[topLevelId];\n }\n }\n }\n ForEach.node(gltf, function(node) {\n if (defined(node.children) && node.children.length === 0) {\n delete node.children;\n }\n });\n }\n\n function stripAsset(gltf) {\n var asset = gltf.asset;\n delete asset.profile;\n delete asset.premultipliedAlpha;\n }\n\n var knownExtensions = {\n CESIUM_RTC: true,\n KHR_materials_common: true,\n WEB3D_quantized_attributes: true\n };\n function requireKnownExtensions(gltf) {\n var extensionsUsed = gltf.extensionsUsed;\n gltf.extensionsRequired = defaultValue(gltf.extensionsRequired, []);\n if (defined(extensionsUsed)) {\n var extensionsUsedLength = extensionsUsed.length;\n for (var i = 0; i < extensionsUsedLength; ++i) {\n var extension = extensionsUsed[i];\n if (defined(knownExtensions[extension])) {\n gltf.extensionsRequired.push(extension);\n }\n }\n }\n }\n\n function removeBufferType(gltf) {\n ForEach.buffer(gltf, function(buffer) {\n delete buffer.type;\n });\n }\n\n function removeTextureProperties(gltf) {\n ForEach.texture(gltf, function(texture) {\n delete texture.format;\n delete texture.internalFormat;\n delete texture.target;\n delete texture.type;\n });\n }\n\n function requireAttributeSetIndex(gltf) {\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) {\n if (semantic === 'TEXCOORD') {\n primitive.attributes.TEXCOORD_0 = accessorId;\n } else if (semantic === 'COLOR') {\n primitive.attributes.COLOR_0 = accessorId;\n }\n });\n delete primitive.attributes.TEXCOORD;\n delete primitive.attributes.COLOR;\n });\n });\n ForEach.technique(gltf, function(technique) {\n ForEach.techniqueParameter(technique, function(parameter) {\n var semantic = parameter.semantic;\n if (defined(semantic)) {\n if (semantic === 'TEXCOORD') {\n parameter.semantic = 'TEXCOORD_0';\n } else if (semantic === 'COLOR') {\n parameter.semantic = 'COLOR_0';\n }\n }\n });\n });\n }\n\n var knownSemantics = {\n POSITION: true,\n NORMAL: true,\n TANGENT: true\n };\n var indexedSemantics = {\n COLOR: 'COLOR',\n JOINT : 'JOINTS',\n JOINTS: 'JOINTS',\n TEXCOORD: 'TEXCOORD',\n WEIGHT: 'WEIGHTS',\n WEIGHTS: 'WEIGHTS'\n };\n function underscoreApplicationSpecificSemantics(gltf) {\n var mappedSemantics = {};\n ForEach.mesh(gltf, function(mesh) {\n ForEach.meshPrimitive(mesh, function(primitive) {\n /*eslint-disable no-unused-vars*/\n ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) {\n if (semantic.charAt(0) !== '_') {\n var setIndex = semantic.search(/_[0-9]+/g);\n var strippedSemantic = semantic;\n var suffix = '_0';\n if (setIndex >= 0) {\n strippedSemantic = semantic.substring(0, setIndex);\n suffix = semantic.substring(setIndex);\n }\n var newSemantic;\n var indexedSemantic = indexedSemantics[strippedSemantic];\n if (defined(indexedSemantic)) {\n newSemantic = indexedSemantic + suffix;\n mappedSemantics[semantic] = newSemantic;\n } else if (!defined(knownSemantics[strippedSemantic])) {\n newSemantic = '_' + semantic;\n mappedSemantics[semantic] = newSemantic;\n }\n }\n });\n for (var semantic in mappedSemantics) {\n if (Object.prototype.hasOwnProperty.call(mappedSemantics, semantic)) {\n var mappedSemantic = mappedSemantics[semantic];\n var accessorId = primitive.attributes[semantic];\n if (defined(accessorId)) {\n delete primitive.attributes[semantic];\n primitive.attributes[mappedSemantic] = accessorId;\n }\n }\n }\n });\n });\n ForEach.technique(gltf, function(technique) {\n ForEach.techniqueParameter(technique, function(parameter) {\n var mappedSemantic = mappedSemantics[parameter.semantic];\n if (defined(mappedSemantic)) {\n parameter.semantic = mappedSemantic;\n }\n });\n });\n }\n\n function clampCameraParameters(gltf) {\n ForEach.camera(gltf, function(camera) {\n var perspective = camera.perspective;\n if (defined(perspective)) {\n var aspectRatio = perspective.aspectRatio;\n if (defined(aspectRatio) && aspectRatio === 0.0) {\n delete perspective.aspectRatio;\n }\n var yfov = perspective.yfov;\n if (defined(yfov) && yfov === 0.0) {\n perspective.yfov = 1.0;\n }\n }\n });\n }\n\n function computeAccessorByteStride(gltf, accessor) {\n return (defined(accessor.byteStride) && accessor.byteStride !== 0) ? accessor.byteStride : getAccessorByteStride(gltf, accessor);\n }\n\n function requireByteLength(gltf) {\n ForEach.buffer(gltf, function(buffer) {\n if (!defined(buffer.byteLength)) {\n buffer.byteLength = buffer.extras._pipeline.source.length;\n }\n });\n ForEach.accessor(gltf, function(accessor) {\n var bufferViewId = accessor.bufferView;\n if (defined(bufferViewId)) {\n var bufferView = gltf.bufferViews[bufferViewId];\n var accessorByteStride = computeAccessorByteStride(gltf, accessor);\n var accessorByteEnd = accessor.byteOffset + accessor.count * accessorByteStride;\n bufferView.byteLength = Math.max(defaultValue(bufferView.byteLength, 0), accessorByteEnd);\n }\n });\n }\n\n function moveByteStrideToBufferView(gltf) {\n var i;\n var j;\n var bufferView;\n var bufferViews = gltf.bufferViews;\n\n var bufferViewHasVertexAttributes = {};\n ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n if (defined(accessor.bufferView)) {\n bufferViewHasVertexAttributes[accessor.bufferView] = true;\n }\n });\n\n // Map buffer views to a list of accessors\n var bufferViewMap = {};\n ForEach.accessor(gltf, function(accessor) {\n if (defined(accessor.bufferView)) {\n bufferViewMap[accessor.bufferView] = defaultValue(bufferViewMap[accessor.bufferView], []);\n bufferViewMap[accessor.bufferView].push(accessor);\n }\n });\n\n // Split accessors with different byte strides\n for (var bufferViewId in bufferViewMap) {\n if (Object.prototype.hasOwnProperty.call(bufferViewMap, bufferViewId)) {\n bufferView = bufferViews[bufferViewId];\n var accessors = bufferViewMap[bufferViewId];\n accessors.sort(function(a, b) {\n return a.byteOffset - b.byteOffset;\n });\n var currentByteOffset = 0;\n var currentIndex = 0;\n var accessorsLength = accessors.length;\n for (i = 0; i < accessorsLength; ++i) {\n var accessor = accessors[i];\n var accessorByteStride = computeAccessorByteStride(gltf, accessor);\n var accessorByteOffset = accessor.byteOffset;\n var accessorByteLength = accessor.count * accessorByteStride;\n delete accessor.byteStride;\n\n var hasNextAccessor = (i < accessorsLength - 1);\n var nextAccessorByteStride = hasNextAccessor ? computeAccessorByteStride(gltf, accessors[i + 1]) : undefined;\n if (accessorByteStride !== nextAccessorByteStride) {\n var newBufferView = clone(bufferView, true);\n if (bufferViewHasVertexAttributes[bufferViewId]) {\n newBufferView.byteStride = accessorByteStride;\n }\n newBufferView.byteOffset += currentByteOffset;\n newBufferView.byteLength = accessorByteOffset + accessorByteLength - currentByteOffset;\n var newBufferViewId = addToArray(bufferViews, newBufferView);\n for (j = currentIndex; j <= i; ++j) {\n accessor = accessors[j];\n accessor.bufferView = newBufferViewId;\n accessor.byteOffset = accessor.byteOffset - currentByteOffset;\n }\n // Set current byte offset to next accessor's byte offset\n currentByteOffset = hasNextAccessor ? accessors[i + 1].byteOffset : undefined;\n currentIndex = i + 1;\n }\n }\n }\n }\n\n // Remove unused buffer views\n removeUnusedElements(gltf, ['accessor', 'bufferView', 'buffer']);\n }\n\n function requirePositionAccessorMinMax(gltf) {\n ForEach.accessorWithSemantic(gltf, 'POSITION', function(accessorId) {\n var accessor = gltf.accessors[accessorId];\n if (!defined(accessor.min) || !defined(accessor.max)) {\n var minMax = findAccessorMinMax(gltf, accessor);\n accessor.min = minMax.min;\n accessor.max = minMax.max;\n }\n });\n }\n\n function isNodeEmpty(node) {\n return (!defined(node.children) || node.children.length === 0) &&\n (!defined(node.meshes) || node.meshes.length === 0) &&\n !defined(node.camera) && !defined(node.skin) && !defined(node.skeletons) && !defined(node.jointName) &&\n (!defined(node.translation) || Cartesian3.fromArray(node.translation).equals(Cartesian3.ZERO)) &&\n (!defined(node.scale) || Cartesian3.fromArray(node.scale).equals(new Cartesian3(1.0, 1.0, 1.0))) &&\n (!defined(node.rotation) || Cartesian4.fromArray(node.rotation).equals(new Cartesian4(0.0, 0.0, 0.0, 1.0))) &&\n (!defined(node.matrix) || Matrix4.fromColumnMajorArray(node.matrix).equals(Matrix4.IDENTITY)) &&\n !defined(node.extensions) && !defined(node.extras);\n }\n\n function deleteNode(gltf, nodeId) {\n // Remove from list of nodes in scene\n ForEach.scene(gltf, function(scene) {\n var sceneNodes = scene.nodes;\n if (defined(sceneNodes)) {\n var sceneNodesLength = sceneNodes.length;\n for (var i = sceneNodesLength; i >= 0; --i) {\n if (sceneNodes[i] === nodeId) {\n sceneNodes.splice(i, 1);\n return;\n }\n }\n }\n });\n\n // Remove parent node's reference to this node, and delete the parent if also empty\n ForEach.node(gltf, function(parentNode, parentNodeId) {\n if (defined(parentNode.children)) {\n var index = parentNode.children.indexOf(nodeId);\n if (index > -1) {\n parentNode.children.splice(index, 1);\n\n if (isNodeEmpty(parentNode)) {\n deleteNode(gltf, parentNodeId);\n }\n }\n }\n });\n\n delete gltf.nodes[nodeId];\n }\n\n function removeEmptyNodes(gltf) {\n ForEach.node(gltf, function(node, nodeId) {\n if (isNodeEmpty(node)) {\n deleteNode(gltf, nodeId);\n }\n });\n\n return gltf;\n }\n\n function requireAnimationAccessorMinMax(gltf) {\n ForEach.animation(gltf, function(animation) {\n ForEach.animationSampler(animation, function(sampler) {\n var accessor = gltf.accessors[sampler.input];\n if (!defined(accessor.min) || !defined(accessor.max)) {\n var minMax = findAccessorMinMax(gltf, accessor);\n accessor.min = minMax.min;\n accessor.max = minMax.max;\n }\n });\n });\n }\n\n function glTF10to20(gltf) {\n gltf.asset = defaultValue(gltf.asset, {});\n gltf.asset.version = '2.0';\n // material.instanceTechnique properties should be directly on the material. instanceTechnique is a gltf 0.8 property but is seen in some 1.0 models.\n updateInstanceTechniques(gltf);\n // animation.samplers now refers directly to accessors and animation.parameters should be removed\n removeAnimationSamplersIndirection(gltf);\n // Remove empty nodes and re-assign referencing indices\n removeEmptyNodes(gltf);\n // Top-level objects are now arrays referenced by index instead of id\n objectsToArrays(gltf);\n // Animation.sampler objects cannot have names\n removeAnimationSamplerNames(gltf);\n // asset.profile no longer exists\n stripAsset(gltf);\n // Move known extensions from extensionsUsed to extensionsRequired\n requireKnownExtensions(gltf);\n // bufferView.byteLength and buffer.byteLength are required\n requireByteLength(gltf);\n // byteStride moved from accessor to bufferView\n moveByteStrideToBufferView(gltf);\n // accessor.min and accessor.max must be defined for accessors containing POSITION attributes\n requirePositionAccessorMinMax(gltf);\n // An animation sampler's input accessor must have min and max properties defined\n requireAnimationAccessorMinMax(gltf);\n // buffer.type is unnecessary and should be removed\n removeBufferType(gltf);\n // Remove format, internalFormat, target, and type\n removeTextureProperties(gltf);\n // TEXCOORD and COLOR attributes must be written with a set index (TEXCOORD_#)\n requireAttributeSetIndex(gltf);\n // Add underscores to application-specific parameters\n underscoreApplicationSpecificSemantics(gltf);\n // Accessors referenced by JOINTS_0 and WEIGHTS_0 attributes must have correct component types\n updateAccessorComponentTypes(gltf);\n // Clamp camera parameters\n clampCameraParameters(gltf);\n // Move legacy technique render states to material properties and add KHR_blend extension blending functions\n moveTechniqueRenderStates(gltf);\n // Add material techniques to KHR_techniques_webgl extension, removing shaders, programs, and techniques\n moveTechniquesToExtension(gltf);\n // Remove empty arrays\n removeEmptyArrays(gltf);\n }\n\n export default updateVersion;\n","import Queue from \"../Core/Queue.js\";\n\n/**\n * @private\n */\nfunction ModelLoadResources() {\n this.initialized = false;\n this.resourcesParsed = false;\n\n this.vertexBuffersToCreate = new Queue();\n this.indexBuffersToCreate = new Queue();\n this.buffers = {};\n this.pendingBufferLoads = 0;\n\n this.programsToCreate = new Queue();\n this.shaders = {};\n this.pendingShaderLoads = 0;\n\n this.texturesToCreate = new Queue();\n this.pendingTextureLoads = 0;\n\n this.texturesToCreateFromBufferView = new Queue();\n this.pendingBufferViewToImage = 0;\n\n this.createSamplers = true;\n this.createSkins = true;\n this.createRuntimeAnimations = true;\n this.createVertexArrays = true;\n this.createRenderStates = true;\n this.createUniformMaps = true;\n this.createRuntimeNodes = true;\n\n this.createdBufferViews = {};\n this.primitivesToDecode = new Queue();\n this.activeDecodingTasks = 0;\n this.pendingDecodingCache = false;\n\n this.skinnedNodesIds = [];\n}\n\n/**\n * This function differs from the normal subarray function\n * because it takes offset and length, rather than begin and end.\n * @private\n */\nfunction getSubarray(array, offset, length) {\n return array.subarray(offset, offset + length);\n}\n\nModelLoadResources.prototype.getBuffer = function (bufferView) {\n return getSubarray(\n this.buffers[bufferView.buffer],\n bufferView.byteOffset,\n bufferView.byteLength\n );\n};\n\nModelLoadResources.prototype.finishedPendingBufferLoads = function () {\n return this.pendingBufferLoads === 0;\n};\n\nModelLoadResources.prototype.finishedBuffersCreation = function () {\n return (\n this.pendingBufferLoads === 0 &&\n this.vertexBuffersToCreate.length === 0 &&\n this.indexBuffersToCreate.length === 0\n );\n};\n\nModelLoadResources.prototype.finishedProgramCreation = function () {\n return this.pendingShaderLoads === 0 && this.programsToCreate.length === 0;\n};\n\nModelLoadResources.prototype.finishedTextureCreation = function () {\n var finishedPendingLoads = this.pendingTextureLoads === 0;\n var finishedResourceCreation =\n this.texturesToCreate.length === 0 &&\n this.texturesToCreateFromBufferView.length === 0;\n\n return finishedPendingLoads && finishedResourceCreation;\n};\n\nModelLoadResources.prototype.finishedEverythingButTextureCreation = function () {\n var finishedPendingLoads =\n this.pendingBufferLoads === 0 && this.pendingShaderLoads === 0;\n var finishedResourceCreation =\n this.vertexBuffersToCreate.length === 0 &&\n this.indexBuffersToCreate.length === 0 &&\n this.programsToCreate.length === 0 &&\n this.pendingBufferViewToImage === 0;\n\n return (\n this.finishedDecoding() && finishedPendingLoads && finishedResourceCreation\n );\n};\n\nModelLoadResources.prototype.finishedDecoding = function () {\n return (\n this.primitivesToDecode.length === 0 &&\n this.activeDecodingTasks === 0 &&\n !this.pendingDecodingCache\n );\n};\n\nModelLoadResources.prototype.finished = function () {\n return (\n this.finishedDecoding() &&\n this.finishedTextureCreation() &&\n this.finishedEverythingButTextureCreation()\n );\n};\nexport default ModelLoadResources;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport addToArray from \"../ThirdParty/GltfPipeline/addToArray.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport hasExtension from \"../ThirdParty/GltfPipeline/hasExtension.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport Axis from \"./Axis.js\";\n\n/**\n * @private\n */\nvar ModelUtility = {};\n\n/**\n * Updates the model's forward axis if the model is not a 2.0 model.\n *\n * @param {Object} model The model to update.\n */\nModelUtility.updateForwardAxis = function (model) {\n var cachedSourceVersion = model.gltf.extras.sourceVersion;\n\n if (\n (defined(cachedSourceVersion) && cachedSourceVersion !== \"2.0\") ||\n ModelUtility.getAssetVersion(model.gltf) !== \"2.0\"\n ) {\n model._gltfForwardAxis = Axis.X;\n }\n};\n\n/**\n * Gets the string representing the glTF asset version.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {String} The glTF asset version string.\n */\nModelUtility.getAssetVersion = function (gltf) {\n // In glTF 1.0 it was valid to omit the version number.\n if (!defined(gltf.asset) || !defined(gltf.asset.version)) {\n return \"1.0\";\n }\n\n return gltf.asset.version;\n};\n\n/**\n * Splits primitive materials with values incompatible for generating techniques.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The glTF asset with modified materials.\n */\nModelUtility.splitIncompatibleMaterials = function (gltf) {\n var accessors = gltf.accessors;\n var materials = gltf.materials;\n var primitiveInfoByMaterial = {};\n ForEach.mesh(gltf, function (mesh) {\n ForEach.meshPrimitive(mesh, function (primitive) {\n var materialIndex = primitive.material;\n var material = materials[materialIndex];\n\n var jointAccessorId = primitive.attributes.JOINTS_0;\n var componentType;\n var accessorType;\n if (defined(jointAccessorId)) {\n var jointAccessor = accessors[jointAccessorId];\n componentType = jointAccessor.componentType;\n accessorType = jointAccessor.type;\n }\n var isSkinned = defined(jointAccessorId) && accessorType === \"VEC4\";\n var hasVertexColors = defined(primitive.attributes.COLOR_0);\n var hasMorphTargets = defined(primitive.targets);\n var hasNormals = defined(primitive.attributes.NORMAL);\n var hasTangents = defined(primitive.attributes.TANGENT);\n var hasTexCoords = defined(primitive.attributes.TEXCOORD_0);\n var hasOutline =\n defined(primitive.extensions) &&\n defined(primitive.extensions.CESIUM_primitive_outline);\n\n var primitiveInfo = primitiveInfoByMaterial[materialIndex];\n if (!defined(primitiveInfo)) {\n primitiveInfoByMaterial[materialIndex] = {\n skinning: {\n skinned: isSkinned,\n componentType: componentType,\n },\n hasVertexColors: hasVertexColors,\n hasMorphTargets: hasMorphTargets,\n hasNormals: hasNormals,\n hasTangents: hasTangents,\n hasTexCoords: hasTexCoords,\n hasOutline: hasOutline,\n };\n } else if (\n primitiveInfo.skinning.skinned !== isSkinned ||\n primitiveInfo.hasVertexColors !== hasVertexColors ||\n primitiveInfo.hasMorphTargets !== hasMorphTargets ||\n primitiveInfo.hasNormals !== hasNormals ||\n primitiveInfo.hasTangents !== hasTangents ||\n primitiveInfo.hasTexCoords !== hasTexCoords ||\n primitiveInfo.hasOutline !== hasOutline\n ) {\n // This primitive uses the same material as another one that either:\n // * Isn't skinned\n // * Uses a different type to store joints and weights\n // * Doesn't have vertex colors, morph targets, normals, tangents, or texCoords\n // * Doesn't have a CESIUM_primitive_outline extension.\n var clonedMaterial = clone(material, true);\n // Split this off as a separate material\n materialIndex = addToArray(materials, clonedMaterial);\n primitive.material = materialIndex;\n primitiveInfoByMaterial[materialIndex] = {\n skinning: {\n skinned: isSkinned,\n componentType: componentType,\n },\n hasVertexColors: hasVertexColors,\n hasMorphTargets: hasMorphTargets,\n hasNormals: hasNormals,\n hasTangents: hasTangents,\n hasTexCoords: hasTexCoords,\n hasOutline: hasOutline,\n };\n }\n });\n });\n\n return primitiveInfoByMaterial;\n};\n\nModelUtility.getShaderVariable = function (type) {\n if (type === \"SCALAR\") {\n return \"float\";\n }\n return type.toLowerCase();\n};\n\nModelUtility.ModelState = {\n NEEDS_LOAD: 0,\n LOADING: 1,\n LOADED: 2, // Renderable, but textures can still be pending when incrementallyLoadTextures is true.\n FAILED: 3,\n};\n\nModelUtility.getFailedLoadFunction = function (model, type, path) {\n return function (error) {\n model._state = ModelUtility.ModelState.FAILED;\n var message = \"Failed to load \" + type + \": \" + path;\n if (defined(error)) {\n message += \"\\n\" + error.message;\n }\n model._readyPromise.reject(new RuntimeError(message));\n };\n};\n\nModelUtility.parseBuffers = function (model, bufferLoad) {\n var loadResources = model._loadResources;\n ForEach.buffer(model.gltf, function (buffer, bufferViewId) {\n if (defined(buffer.extras._pipeline.source)) {\n loadResources.buffers[bufferViewId] = buffer.extras._pipeline.source;\n } else if (defined(bufferLoad)) {\n var bufferResource = model._resource.getDerivedResource({\n url: buffer.uri,\n });\n ++loadResources.pendingBufferLoads;\n bufferResource\n .fetchArrayBuffer()\n .then(bufferLoad(model, bufferViewId))\n .otherwise(\n ModelUtility.getFailedLoadFunction(\n model,\n \"buffer\",\n bufferResource.url\n )\n );\n }\n });\n};\n\nvar aMinScratch = new Cartesian3();\nvar aMaxScratch = new Cartesian3();\n\nModelUtility.computeBoundingSphere = function (model) {\n var gltf = model.gltf;\n var gltfNodes = gltf.nodes;\n var gltfMeshes = gltf.meshes;\n var rootNodes = gltf.scenes[gltf.scene].nodes;\n var rootNodesLength = rootNodes.length;\n\n var nodeStack = [];\n\n var min = new Cartesian3(\n Number.MAX_VALUE,\n Number.MAX_VALUE,\n Number.MAX_VALUE\n );\n var max = new Cartesian3(\n -Number.MAX_VALUE,\n -Number.MAX_VALUE,\n -Number.MAX_VALUE\n );\n\n for (var i = 0; i < rootNodesLength; ++i) {\n var n = gltfNodes[rootNodes[i]];\n n._transformToRoot = ModelUtility.getTransform(n);\n nodeStack.push(n);\n\n while (nodeStack.length > 0) {\n n = nodeStack.pop();\n var transformToRoot = n._transformToRoot;\n\n var meshId = n.mesh;\n if (defined(meshId)) {\n var mesh = gltfMeshes[meshId];\n var primitives = mesh.primitives;\n var primitivesLength = primitives.length;\n for (var m = 0; m < primitivesLength; ++m) {\n var positionAccessor = primitives[m].attributes.POSITION;\n if (defined(positionAccessor)) {\n var minMax = ModelUtility.getAccessorMinMax(gltf, positionAccessor);\n if (defined(minMax.min) && defined(minMax.max)) {\n var aMin = Cartesian3.fromArray(minMax.min, 0, aMinScratch);\n var aMax = Cartesian3.fromArray(minMax.max, 0, aMaxScratch);\n\n Matrix4.multiplyByPoint(transformToRoot, aMin, aMin);\n Matrix4.multiplyByPoint(transformToRoot, aMax, aMax);\n Cartesian3.minimumByComponent(min, aMin, min);\n Cartesian3.maximumByComponent(max, aMax, max);\n }\n }\n }\n }\n\n var children = n.children;\n if (defined(children)) {\n var childrenLength = children.length;\n for (var k = 0; k < childrenLength; ++k) {\n var child = gltfNodes[children[k]];\n child._transformToRoot = ModelUtility.getTransform(child);\n Matrix4.multiplyTransformation(\n transformToRoot,\n child._transformToRoot,\n child._transformToRoot\n );\n nodeStack.push(child);\n }\n }\n delete n._transformToRoot;\n }\n }\n\n var boundingSphere = BoundingSphere.fromCornerPoints(min, max);\n if (model._forwardAxis === Axis.Z) {\n // glTF 2.0 has a Z-forward convention that must be adapted here to X-forward.\n BoundingSphere.transformWithoutScale(\n boundingSphere,\n Axis.Z_UP_TO_X_UP,\n boundingSphere\n );\n }\n if (model._upAxis === Axis.Y) {\n BoundingSphere.transformWithoutScale(\n boundingSphere,\n Axis.Y_UP_TO_Z_UP,\n boundingSphere\n );\n } else if (model._upAxis === Axis.X) {\n BoundingSphere.transformWithoutScale(\n boundingSphere,\n Axis.X_UP_TO_Z_UP,\n boundingSphere\n );\n }\n return boundingSphere;\n};\n\nfunction techniqueAttributeForSemantic(technique, semantic) {\n return ForEach.techniqueAttribute(technique, function (\n attribute,\n attributeName\n ) {\n if (attribute.semantic === semantic) {\n return attributeName;\n }\n });\n}\n\nfunction ensureSemanticExistenceForPrimitive(gltf, primitive) {\n var accessors = gltf.accessors;\n var materials = gltf.materials;\n var techniquesWebgl = gltf.extensions.KHR_techniques_webgl;\n\n var techniques = techniquesWebgl.techniques;\n var programs = techniquesWebgl.programs;\n var shaders = techniquesWebgl.shaders;\n var targets = primitive.targets;\n\n var attributes = primitive.attributes;\n for (var target in targets) {\n if (targets.hasOwnProperty(target)) {\n var targetAttributes = targets[target];\n for (var attribute in targetAttributes) {\n if (attribute !== \"extras\") {\n attributes[attribute + \"_\" + target] = targetAttributes[attribute];\n }\n }\n }\n }\n\n var material = materials[primitive.material];\n var technique =\n techniques[material.extensions.KHR_techniques_webgl.technique];\n var program = programs[technique.program];\n var vertexShader = shaders[program.vertexShader];\n\n for (var semantic in attributes) {\n if (attributes.hasOwnProperty(semantic)) {\n if (!defined(techniqueAttributeForSemantic(technique, semantic))) {\n var accessorId = attributes[semantic];\n var accessor = accessors[accessorId];\n var lowerCase = semantic.toLowerCase();\n if (lowerCase.charAt(0) === \"_\") {\n lowerCase = lowerCase.slice(1);\n }\n var attributeName = \"a_\" + lowerCase;\n technique.attributes[attributeName] = {\n semantic: semantic,\n type: accessor.componentType,\n };\n var pipelineExtras = vertexShader.extras._pipeline;\n var shaderText = pipelineExtras.source;\n shaderText =\n \"attribute \" +\n ModelUtility.getShaderVariable(accessor.type) +\n \" \" +\n attributeName +\n \";\\n\" +\n shaderText;\n pipelineExtras.source = shaderText;\n }\n }\n }\n}\n\n/**\n * Ensures all attributes present on the primitive are present in the technique and\n * vertex shader.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} The glTF asset, including any additional attributes.\n */\nModelUtility.ensureSemanticExistence = function (gltf) {\n ForEach.mesh(gltf, function (mesh) {\n ForEach.meshPrimitive(mesh, function (primitive) {\n ensureSemanticExistenceForPrimitive(gltf, primitive);\n });\n });\n\n return gltf;\n};\n\n/**\n * Creates attribute location for all attributes required by a technique.\n *\n * @param {Object} technique A glTF KHR_techniques_webgl technique object.\n * @param {Object} precreatedAttributes A dictionary object of pre-created attributes for which to also create locations.\n * @returns {Object} A dictionary object containing attribute names and their locations.\n */\nModelUtility.createAttributeLocations = function (\n technique,\n precreatedAttributes\n) {\n var attributeLocations = {};\n var hasIndex0 = false;\n var i = 1;\n\n ForEach.techniqueAttribute(technique, function (attribute, attributeName) {\n // Set the position attribute to the 0th index. In some WebGL implementations the shader\n // will not work correctly if the 0th attribute is not active. For example, some glTF models\n // list the normal attribute first but derived shaders like the cast-shadows shader do not use\n // the normal attribute.\n if (/pos/i.test(attributeName) && !hasIndex0) {\n attributeLocations[attributeName] = 0;\n hasIndex0 = true;\n } else {\n attributeLocations[attributeName] = i++;\n }\n });\n\n if (defined(precreatedAttributes)) {\n for (var attributeName in precreatedAttributes) {\n if (precreatedAttributes.hasOwnProperty(attributeName)) {\n attributeLocations[attributeName] = i++;\n }\n }\n }\n\n return attributeLocations;\n};\n\nModelUtility.getAccessorMinMax = function (gltf, accessorId) {\n var accessor = gltf.accessors[accessorId];\n var extensions = accessor.extensions;\n var accessorMin = accessor.min;\n var accessorMax = accessor.max;\n // If this accessor is quantized, we should use the decoded min and max\n if (defined(extensions)) {\n var quantizedAttributes = extensions.WEB3D_quantized_attributes;\n if (defined(quantizedAttributes)) {\n accessorMin = quantizedAttributes.decodedMin;\n accessorMax = quantizedAttributes.decodedMax;\n }\n }\n return {\n min: accessorMin,\n max: accessorMax,\n };\n};\n\nfunction getTechniqueAttributeOrUniformFunction(\n gltf,\n technique,\n semantic,\n ignoreNodes\n) {\n if (hasExtension(gltf, \"KHR_techniques_webgl\")) {\n return function (attributeOrUniform, attributeOrUniformName) {\n if (\n attributeOrUniform.semantic === semantic &&\n (!ignoreNodes || !defined(attributeOrUniform.node))\n ) {\n return attributeOrUniformName;\n }\n };\n }\n\n return function (parameterName, attributeOrUniformName) {\n var attributeOrUniform = technique.parameters[parameterName];\n if (\n attributeOrUniform.semantic === semantic &&\n (!ignoreNodes || !defined(attributeOrUniform.node))\n ) {\n return attributeOrUniformName;\n }\n };\n}\n\nModelUtility.getAttributeOrUniformBySemantic = function (\n gltf,\n semantic,\n programId,\n ignoreNodes\n) {\n return ForEach.technique(gltf, function (technique) {\n if (defined(programId) && technique.program !== programId) {\n return;\n }\n\n var value = ForEach.techniqueAttribute(\n technique,\n getTechniqueAttributeOrUniformFunction(\n gltf,\n technique,\n semantic,\n ignoreNodes\n )\n );\n\n if (defined(value)) {\n return value;\n }\n\n return ForEach.techniqueUniform(\n technique,\n getTechniqueAttributeOrUniformFunction(\n gltf,\n technique,\n semantic,\n ignoreNodes\n )\n );\n });\n};\n\nModelUtility.getDiffuseAttributeOrUniform = function (gltf, programId) {\n var diffuseUniformName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"COLOR_0\",\n programId\n );\n if (!defined(diffuseUniformName)) {\n diffuseUniformName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"_3DTILESDIFFUSE\",\n programId\n );\n }\n return diffuseUniformName;\n};\n\nvar nodeTranslationScratch = new Cartesian3();\nvar nodeQuaternionScratch = new Quaternion();\nvar nodeScaleScratch = new Cartesian3();\n\nModelUtility.getTransform = function (node, result) {\n if (defined(node.matrix)) {\n return Matrix4.fromColumnMajorArray(node.matrix, result);\n }\n\n return Matrix4.fromTranslationQuaternionRotationScale(\n Cartesian3.fromArray(node.translation, 0, nodeTranslationScratch),\n Quaternion.unpack(node.rotation, 0, nodeQuaternionScratch),\n Cartesian3.fromArray(node.scale, 0, nodeScaleScratch),\n result\n );\n};\n\nModelUtility.getUsedExtensions = function (gltf) {\n var extensionsUsed = gltf.extensionsUsed;\n var cachedExtensionsUsed = {};\n\n if (defined(extensionsUsed)) {\n var extensionsUsedLength = extensionsUsed.length;\n for (var i = 0; i < extensionsUsedLength; i++) {\n var extension = extensionsUsed[i];\n cachedExtensionsUsed[extension] = true;\n }\n }\n return cachedExtensionsUsed;\n};\n\nModelUtility.getRequiredExtensions = function (gltf) {\n var extensionsRequired = gltf.extensionsRequired;\n var cachedExtensionsRequired = {};\n\n if (defined(extensionsRequired)) {\n var extensionsRequiredLength = extensionsRequired.length;\n for (var i = 0; i < extensionsRequiredLength; i++) {\n var extension = extensionsRequired[i];\n cachedExtensionsRequired[extension] = true;\n }\n }\n\n return cachedExtensionsRequired;\n};\n\nModelUtility.supportedExtensions = {\n AGI_articulations: true,\n CESIUM_RTC: true,\n EXT_texture_webp: true,\n KHR_blend: true,\n KHR_binary_glTF: true,\n KHR_draco_mesh_compression: true,\n KHR_materials_common: true,\n KHR_techniques_webgl: true,\n KHR_materials_unlit: true,\n KHR_materials_pbrSpecularGlossiness: true,\n KHR_texture_transform: true,\n WEB3D_quantized_attributes: true,\n};\n\nModelUtility.checkSupportedExtensions = function (\n extensionsRequired,\n browserSupportsWebp\n) {\n for (var extension in extensionsRequired) {\n if (extensionsRequired.hasOwnProperty(extension)) {\n if (!ModelUtility.supportedExtensions[extension]) {\n throw new RuntimeError(\"Unsupported glTF Extension: \" + extension);\n }\n\n if (extension === \"EXT_texture_webp\" && browserSupportsWebp === false) {\n throw new RuntimeError(\n \"Loaded model requires WebP but browser does not support it.\"\n );\n }\n }\n }\n};\n\nModelUtility.checkSupportedGlExtensions = function (extensionsUsed, context) {\n if (defined(extensionsUsed)) {\n var glExtensionsUsedLength = extensionsUsed.length;\n for (var i = 0; i < glExtensionsUsedLength; i++) {\n var extension = extensionsUsed[i];\n if (extension !== \"OES_element_index_uint\") {\n throw new RuntimeError(\"Unsupported WebGL Extension: \" + extension);\n } else if (!context.elementIndexUint) {\n throw new RuntimeError(\n \"OES_element_index_uint WebGL extension is not enabled.\"\n );\n }\n }\n }\n};\n\nfunction replaceAllButFirstInString(string, find, replace) {\n // Limit search to strings that are not a subset of other tokens.\n find += \"(?!\\\\w)\";\n find = new RegExp(find, \"g\");\n\n var index = string.search(find);\n return string.replace(find, function (match, offset) {\n return index === offset ? match : replace;\n });\n}\n\nfunction getQuantizedAttributes(gltf, accessorId) {\n var accessor = gltf.accessors[accessorId];\n var extensions = accessor.extensions;\n if (defined(extensions)) {\n return extensions.WEB3D_quantized_attributes;\n }\n return undefined;\n}\n\nfunction getAttributeVariableName(gltf, primitive, attributeSemantic) {\n var materialId = primitive.material;\n var material = gltf.materials[materialId];\n\n if (\n !hasExtension(gltf, \"KHR_techniques_webgl\") ||\n !defined(material.extensions) ||\n !defined(material.extensions.KHR_techniques_webgl)\n ) {\n return;\n }\n\n var techniqueId = material.extensions.KHR_techniques_webgl.technique;\n var techniquesWebgl = gltf.extensions.KHR_techniques_webgl;\n var technique = techniquesWebgl.techniques[techniqueId];\n return ForEach.techniqueAttribute(technique, function (\n attribute,\n attributeName\n ) {\n var semantic = attribute.semantic;\n if (semantic === attributeSemantic) {\n return attributeName;\n }\n });\n}\n\nModelUtility.modifyShaderForDracoQuantizedAttributes = function (\n gltf,\n primitive,\n shader,\n decodedAttributes\n) {\n var quantizedUniforms = {};\n for (var attributeSemantic in decodedAttributes) {\n if (decodedAttributes.hasOwnProperty(attributeSemantic)) {\n var attribute = decodedAttributes[attributeSemantic];\n var quantization = attribute.quantization;\n if (!defined(quantization)) {\n continue;\n }\n\n var attributeVarName = getAttributeVariableName(\n gltf,\n primitive,\n attributeSemantic\n );\n\n if (attributeSemantic.charAt(0) === \"_\") {\n attributeSemantic = attributeSemantic.substring(1);\n }\n var decodeUniformVarName =\n \"gltf_u_dec_\" + attributeSemantic.toLowerCase();\n\n if (!defined(quantizedUniforms[decodeUniformVarName])) {\n var newMain = \"gltf_decoded_\" + attributeSemantic;\n var decodedAttributeVarName = attributeVarName.replace(\n \"a_\",\n \"gltf_a_dec_\"\n );\n var size = attribute.componentsPerAttribute;\n\n // replace usages of the original attribute with the decoded version, but not the declaration\n shader = replaceAllButFirstInString(\n shader,\n attributeVarName,\n decodedAttributeVarName\n );\n\n // declare decoded attribute\n var variableType;\n if (quantization.octEncoded) {\n variableType = \"vec3\";\n } else if (size > 1) {\n variableType = \"vec\" + size;\n } else {\n variableType = \"float\";\n }\n shader = variableType + \" \" + decodedAttributeVarName + \";\\n\" + shader;\n\n // The gltf 2.0 COLOR_0 vertex attribute can be VEC4 or VEC3\n var vec3Color = size === 3 && attributeSemantic === \"COLOR_0\";\n if (vec3Color) {\n shader = replaceAllButFirstInString(\n shader,\n decodedAttributeVarName,\n \"vec4(\" + decodedAttributeVarName + \", 1.0)\"\n );\n }\n\n // splice decode function into the shader\n var decode = \"\";\n if (quantization.octEncoded) {\n var decodeUniformVarNameRangeConstant =\n decodeUniformVarName + \"_rangeConstant\";\n shader =\n \"uniform float \" +\n decodeUniformVarNameRangeConstant +\n \";\\n\" +\n shader;\n decode =\n \"\\n\" +\n \"void main() {\\n\" +\n // Draco oct-encoding decodes to zxy order\n \" \" +\n decodedAttributeVarName +\n \" = czm_octDecode(\" +\n attributeVarName +\n \".xy, \" +\n decodeUniformVarNameRangeConstant +\n \").zxy;\\n\" +\n \" \" +\n newMain +\n \"();\\n\" +\n \"}\\n\";\n } else {\n var decodeUniformVarNameNormConstant =\n decodeUniformVarName + \"_normConstant\";\n var decodeUniformVarNameMin = decodeUniformVarName + \"_min\";\n shader =\n \"uniform float \" +\n decodeUniformVarNameNormConstant +\n \";\\n\" +\n \"uniform \" +\n variableType +\n \" \" +\n decodeUniformVarNameMin +\n \";\\n\" +\n shader;\n var attributeVarAccess = vec3Color ? \".xyz\" : \"\";\n decode =\n \"\\n\" +\n \"void main() {\\n\" +\n \" \" +\n decodedAttributeVarName +\n \" = \" +\n decodeUniformVarNameMin +\n \" + \" +\n attributeVarName +\n attributeVarAccess +\n \" * \" +\n decodeUniformVarNameNormConstant +\n \";\\n\" +\n \" \" +\n newMain +\n \"();\\n\" +\n \"}\\n\";\n }\n\n shader = ShaderSource.replaceMain(shader, newMain);\n shader += decode;\n }\n }\n }\n return {\n shader: shader,\n };\n};\n\nModelUtility.modifyShaderForQuantizedAttributes = function (\n gltf,\n primitive,\n shader\n) {\n var quantizedUniforms = {};\n var attributes = primitive.attributes;\n for (var attributeSemantic in attributes) {\n if (attributes.hasOwnProperty(attributeSemantic)) {\n var attributeVarName = getAttributeVariableName(\n gltf,\n primitive,\n attributeSemantic\n );\n var accessorId = primitive.attributes[attributeSemantic];\n\n if (attributeSemantic.charAt(0) === \"_\") {\n attributeSemantic = attributeSemantic.substring(1);\n }\n var decodeUniformVarName =\n \"gltf_u_dec_\" + attributeSemantic.toLowerCase();\n\n var decodeUniformVarNameScale = decodeUniformVarName + \"_scale\";\n var decodeUniformVarNameTranslate = decodeUniformVarName + \"_translate\";\n if (\n !defined(quantizedUniforms[decodeUniformVarName]) &&\n !defined(quantizedUniforms[decodeUniformVarNameScale])\n ) {\n var quantizedAttributes = getQuantizedAttributes(gltf, accessorId);\n if (defined(quantizedAttributes)) {\n var decodeMatrix = quantizedAttributes.decodeMatrix;\n var newMain = \"gltf_decoded_\" + attributeSemantic;\n var decodedAttributeVarName = attributeVarName.replace(\n \"a_\",\n \"gltf_a_dec_\"\n );\n var size = Math.floor(Math.sqrt(decodeMatrix.length));\n\n // replace usages of the original attribute with the decoded version, but not the declaration\n shader = replaceAllButFirstInString(\n shader,\n attributeVarName,\n decodedAttributeVarName\n );\n // declare decoded attribute\n var variableType;\n if (size > 2) {\n variableType = \"vec\" + (size - 1);\n } else {\n variableType = \"float\";\n }\n shader =\n variableType + \" \" + decodedAttributeVarName + \";\\n\" + shader;\n // splice decode function into the shader - attributes are pre-multiplied with the decode matrix\n // uniform in the shader (32-bit floating point)\n var decode = \"\";\n if (size === 5) {\n // separate scale and translate since glsl doesn't have mat5\n shader =\n \"uniform mat4 \" + decodeUniformVarNameScale + \";\\n\" + shader;\n shader =\n \"uniform vec4 \" + decodeUniformVarNameTranslate + \";\\n\" + shader;\n decode =\n \"\\n\" +\n \"void main() {\\n\" +\n \" \" +\n decodedAttributeVarName +\n \" = \" +\n decodeUniformVarNameScale +\n \" * \" +\n attributeVarName +\n \" + \" +\n decodeUniformVarNameTranslate +\n \";\\n\" +\n \" \" +\n newMain +\n \"();\\n\" +\n \"}\\n\";\n\n quantizedUniforms[decodeUniformVarNameScale] = { mat: 4 };\n quantizedUniforms[decodeUniformVarNameTranslate] = { vec: 4 };\n } else {\n shader =\n \"uniform mat\" +\n size +\n \" \" +\n decodeUniformVarName +\n \";\\n\" +\n shader;\n decode =\n \"\\n\" +\n \"void main() {\\n\" +\n \" \" +\n decodedAttributeVarName +\n \" = \" +\n variableType +\n \"(\" +\n decodeUniformVarName +\n \" * vec\" +\n size +\n \"(\" +\n attributeVarName +\n \",1.0));\\n\" +\n \" \" +\n newMain +\n \"();\\n\" +\n \"}\\n\";\n\n quantizedUniforms[decodeUniformVarName] = { mat: size };\n }\n shader = ShaderSource.replaceMain(shader, newMain);\n shader += decode;\n }\n }\n }\n }\n return {\n shader: shader,\n uniforms: quantizedUniforms,\n };\n};\n\nfunction getScalarUniformFunction(value) {\n var that = {\n value: value,\n clone: function (source, result) {\n return source;\n },\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getVec2UniformFunction(value) {\n var that = {\n value: Cartesian2.fromArray(value),\n clone: Cartesian2.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getVec3UniformFunction(value) {\n var that = {\n value: Cartesian3.fromArray(value),\n clone: Cartesian3.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getVec4UniformFunction(value) {\n var that = {\n value: Cartesian4.fromArray(value),\n clone: Cartesian4.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getMat2UniformFunction(value) {\n var that = {\n value: Matrix2.fromColumnMajorArray(value),\n clone: Matrix2.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getMat3UniformFunction(value) {\n var that = {\n value: Matrix3.fromColumnMajorArray(value),\n clone: Matrix3.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\nfunction getMat4UniformFunction(value) {\n var that = {\n value: Matrix4.fromColumnMajorArray(value),\n clone: Matrix4.clone,\n func: function () {\n return that.value;\n },\n };\n return that;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction DelayLoadedTextureUniform(value, textures, defaultTexture) {\n this._value = undefined;\n this._textureId = value.index;\n this._textures = textures;\n this._defaultTexture = defaultTexture;\n}\n\nObject.defineProperties(DelayLoadedTextureUniform.prototype, {\n value: {\n get: function () {\n // Use the default texture (1x1 white) until the model's texture is loaded\n if (!defined(this._value)) {\n var texture = this._textures[this._textureId];\n if (defined(texture)) {\n this._value = texture;\n } else {\n return this._defaultTexture;\n }\n }\n\n return this._value;\n },\n set: function (value) {\n this._value = value;\n },\n },\n});\n\nDelayLoadedTextureUniform.prototype.clone = function (source) {\n return source;\n};\n\nDelayLoadedTextureUniform.prototype.func = undefined;\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction getTextureUniformFunction(value, textures, defaultTexture) {\n var uniform = new DelayLoadedTextureUniform(value, textures, defaultTexture);\n // Define function here to access closure since 'this' can't be\n // used when the Renderer sets uniforms.\n uniform.func = function () {\n return uniform.value;\n };\n return uniform;\n}\n\nvar gltfUniformFunctions = {};\ngltfUniformFunctions[WebGLConstants.FLOAT] = getScalarUniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_VEC2] = getVec2UniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_VEC3] = getVec3UniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_VEC4] = getVec4UniformFunction;\ngltfUniformFunctions[WebGLConstants.INT] = getScalarUniformFunction;\ngltfUniformFunctions[WebGLConstants.INT_VEC2] = getVec2UniformFunction;\ngltfUniformFunctions[WebGLConstants.INT_VEC3] = getVec3UniformFunction;\ngltfUniformFunctions[WebGLConstants.INT_VEC4] = getVec4UniformFunction;\ngltfUniformFunctions[WebGLConstants.BOOL] = getScalarUniformFunction;\ngltfUniformFunctions[WebGLConstants.BOOL_VEC2] = getVec2UniformFunction;\ngltfUniformFunctions[WebGLConstants.BOOL_VEC3] = getVec3UniformFunction;\ngltfUniformFunctions[WebGLConstants.BOOL_VEC4] = getVec4UniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_MAT2] = getMat2UniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_MAT3] = getMat3UniformFunction;\ngltfUniformFunctions[WebGLConstants.FLOAT_MAT4] = getMat4UniformFunction;\ngltfUniformFunctions[WebGLConstants.SAMPLER_2D] = getTextureUniformFunction;\n// GLTF_SPEC: Support SAMPLER_CUBE. https://github.com/KhronosGroup/glTF/issues/40\n\nModelUtility.createUniformFunction = function (\n type,\n value,\n textures,\n defaultTexture\n) {\n return gltfUniformFunctions[type](value, textures, defaultTexture);\n};\n\nfunction scaleFromMatrix5Array(matrix) {\n return [\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[5],\n matrix[6],\n matrix[7],\n matrix[8],\n matrix[10],\n matrix[11],\n matrix[12],\n matrix[13],\n matrix[15],\n matrix[16],\n matrix[17],\n matrix[18],\n ];\n}\n\nfunction translateFromMatrix5Array(matrix) {\n return [matrix[20], matrix[21], matrix[22], matrix[23]];\n}\n\nModelUtility.createUniformsForDracoQuantizedAttributes = function (\n decodedAttributes\n) {\n var uniformMap = {};\n for (var attribute in decodedAttributes) {\n if (decodedAttributes.hasOwnProperty(attribute)) {\n var decodedData = decodedAttributes[attribute];\n var quantization = decodedData.quantization;\n\n if (!defined(quantization)) {\n continue;\n }\n\n if (attribute.charAt(0) === \"_\") {\n attribute = attribute.substring(1);\n }\n\n var uniformVarName = \"gltf_u_dec_\" + attribute.toLowerCase();\n\n if (quantization.octEncoded) {\n var uniformVarNameRangeConstant = uniformVarName + \"_rangeConstant\";\n var rangeConstant = (1 << quantization.quantizationBits) - 1.0;\n uniformMap[uniformVarNameRangeConstant] = getScalarUniformFunction(\n rangeConstant\n ).func;\n continue;\n }\n\n var uniformVarNameNormConstant = uniformVarName + \"_normConstant\";\n var normConstant =\n quantization.range / (1 << quantization.quantizationBits);\n uniformMap[uniformVarNameNormConstant] = getScalarUniformFunction(\n normConstant\n ).func;\n\n var uniformVarNameMin = uniformVarName + \"_min\";\n switch (decodedData.componentsPerAttribute) {\n case 1:\n uniformMap[uniformVarNameMin] = getScalarUniformFunction(\n quantization.minValues\n ).func;\n break;\n case 2:\n uniformMap[uniformVarNameMin] = getVec2UniformFunction(\n quantization.minValues\n ).func;\n break;\n case 3:\n uniformMap[uniformVarNameMin] = getVec3UniformFunction(\n quantization.minValues\n ).func;\n break;\n case 4:\n uniformMap[uniformVarNameMin] = getVec4UniformFunction(\n quantization.minValues\n ).func;\n break;\n }\n }\n }\n\n return uniformMap;\n};\n\nModelUtility.createUniformsForQuantizedAttributes = function (\n gltf,\n primitive,\n quantizedUniforms\n) {\n var accessors = gltf.accessors;\n var setUniforms = {};\n var uniformMap = {};\n\n var attributes = primitive.attributes;\n for (var attribute in attributes) {\n if (attributes.hasOwnProperty(attribute)) {\n var accessorId = attributes[attribute];\n var a = accessors[accessorId];\n var extensions = a.extensions;\n\n if (attribute.charAt(0) === \"_\") {\n attribute = attribute.substring(1);\n }\n\n if (defined(extensions)) {\n var quantizedAttributes = extensions.WEB3D_quantized_attributes;\n if (defined(quantizedAttributes)) {\n var decodeMatrix = quantizedAttributes.decodeMatrix;\n var uniformVariable = \"gltf_u_dec_\" + attribute.toLowerCase();\n\n switch (a.type) {\n case AttributeType.SCALAR:\n uniformMap[uniformVariable] = getMat2UniformFunction(\n decodeMatrix\n ).func;\n setUniforms[uniformVariable] = true;\n break;\n case AttributeType.VEC2:\n uniformMap[uniformVariable] = getMat3UniformFunction(\n decodeMatrix\n ).func;\n setUniforms[uniformVariable] = true;\n break;\n case AttributeType.VEC3:\n uniformMap[uniformVariable] = getMat4UniformFunction(\n decodeMatrix\n ).func;\n setUniforms[uniformVariable] = true;\n break;\n case AttributeType.VEC4:\n // VEC4 attributes are split into scale and translate because there is no mat5 in GLSL\n var uniformVariableScale = uniformVariable + \"_scale\";\n var uniformVariableTranslate = uniformVariable + \"_translate\";\n uniformMap[uniformVariableScale] = getMat4UniformFunction(\n scaleFromMatrix5Array(decodeMatrix)\n ).func;\n uniformMap[uniformVariableTranslate] = getVec4UniformFunction(\n translateFromMatrix5Array(decodeMatrix)\n ).func;\n setUniforms[uniformVariableScale] = true;\n setUniforms[uniformVariableTranslate] = true;\n break;\n }\n }\n }\n }\n }\n\n // If there are any unset quantized uniforms in this program, they should be set to the identity\n for (var quantizedUniform in quantizedUniforms) {\n if (quantizedUniforms.hasOwnProperty(quantizedUniform)) {\n if (!setUniforms[quantizedUniform]) {\n var properties = quantizedUniforms[quantizedUniform];\n if (defined(properties.mat)) {\n if (properties.mat === 2) {\n uniformMap[quantizedUniform] = getMat2UniformFunction(\n Matrix2.IDENTITY\n ).func;\n } else if (properties.mat === 3) {\n uniformMap[quantizedUniform] = getMat3UniformFunction(\n Matrix3.IDENTITY\n ).func;\n } else if (properties.mat === 4) {\n uniformMap[quantizedUniform] = getMat4UniformFunction(\n Matrix4.IDENTITY\n ).func;\n }\n }\n if (defined(properties.vec)) {\n if (properties.vec === 4) {\n uniformMap[quantizedUniform] = getVec4UniformFunction([\n 0,\n 0,\n 0,\n 0,\n ]).func;\n }\n }\n }\n }\n }\n return uniformMap;\n};\n\n// This doesn't support LOCAL, which we could add if it is ever used.\nvar scratchTranslationRtc = new Cartesian3();\nvar gltfSemanticUniforms = {\n MODEL: function (uniformState, model) {\n return function () {\n return uniformState.model;\n };\n },\n VIEW: function (uniformState, model) {\n return function () {\n return uniformState.view;\n };\n },\n PROJECTION: function (uniformState, model) {\n return function () {\n return uniformState.projection;\n };\n },\n MODELVIEW: function (uniformState, model) {\n return function () {\n return uniformState.modelView;\n };\n },\n CESIUM_RTC_MODELVIEW: function (uniformState, model) {\n // CESIUM_RTC extension\n var mvRtc = new Matrix4();\n return function () {\n if (defined(model._rtcCenter)) {\n Matrix4.getTranslation(uniformState.model, scratchTranslationRtc);\n Cartesian3.add(\n scratchTranslationRtc,\n model._rtcCenter,\n scratchTranslationRtc\n );\n Matrix4.multiplyByPoint(\n uniformState.view,\n scratchTranslationRtc,\n scratchTranslationRtc\n );\n return Matrix4.setTranslation(\n uniformState.modelView,\n scratchTranslationRtc,\n mvRtc\n );\n }\n return uniformState.modelView;\n };\n },\n MODELVIEWPROJECTION: function (uniformState, model) {\n return function () {\n return uniformState.modelViewProjection;\n };\n },\n MODELINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseModel;\n };\n },\n VIEWINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseView;\n };\n },\n PROJECTIONINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseProjection;\n };\n },\n MODELVIEWINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseModelView;\n };\n },\n MODELVIEWPROJECTIONINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseModelViewProjection;\n };\n },\n MODELINVERSETRANSPOSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseTransposeModel;\n };\n },\n MODELVIEWINVERSETRANSPOSE: function (uniformState, model) {\n return function () {\n return uniformState.normal;\n };\n },\n VIEWPORT: function (uniformState, model) {\n return function () {\n return uniformState.viewportCartesian4;\n };\n },\n // JOINTMATRIX created in createCommand()\n};\n\nModelUtility.getGltfSemanticUniforms = function () {\n return gltfSemanticUniforms;\n};\nexport default ModelUtility;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport webGLConstantToGlslType from \"../Core/webGLConstantToGlslType.js\";\nimport addToArray from \"../ThirdParty/GltfPipeline/addToArray.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport hasExtension from \"../ThirdParty/GltfPipeline/hasExtension.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * @private\n */\nfunction processModelMaterialsCommon(gltf, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n if (!defined(gltf)) {\n return;\n }\n\n if (!hasExtension(gltf, \"KHR_materials_common\")) {\n return;\n }\n\n if (!hasExtension(gltf, \"KHR_techniques_webgl\")) {\n if (!defined(gltf.extensions)) {\n gltf.extensions = {};\n }\n\n gltf.extensions.KHR_techniques_webgl = {\n programs: [],\n shaders: [],\n techniques: [],\n };\n gltf.extensionsUsed.push(\"KHR_techniques_webgl\");\n gltf.extensionsRequired.push(\"KHR_techniques_webgl\");\n }\n\n var techniquesWebgl = gltf.extensions.KHR_techniques_webgl;\n\n lightDefaults(gltf);\n\n var lightParameters = generateLightParameters(gltf);\n\n var primitiveByMaterial = ModelUtility.splitIncompatibleMaterials(gltf);\n\n var techniques = {};\n var generatedTechniques = false;\n ForEach.material(gltf, function (material, materialIndex) {\n if (\n defined(material.extensions) &&\n defined(material.extensions.KHR_materials_common)\n ) {\n var khrMaterialsCommon = material.extensions.KHR_materials_common;\n var primitiveInfo = primitiveByMaterial[materialIndex];\n\n var techniqueKey = getTechniqueKey(khrMaterialsCommon, primitiveInfo);\n var technique = techniques[techniqueKey];\n\n if (!defined(technique)) {\n technique = generateTechnique(\n gltf,\n techniquesWebgl,\n primitiveInfo,\n khrMaterialsCommon,\n lightParameters,\n options.addBatchIdToGeneratedShaders\n );\n techniques[techniqueKey] = technique;\n generatedTechniques = true;\n }\n\n var materialValues = {};\n var values = khrMaterialsCommon.values;\n var uniformName;\n for (var valueName in values) {\n if (\n values.hasOwnProperty(valueName) &&\n valueName !== \"transparent\" &&\n valueName !== \"doubleSided\"\n ) {\n uniformName = \"u_\" + valueName.toLowerCase();\n materialValues[uniformName] = values[valueName];\n }\n }\n\n material.extensions.KHR_techniques_webgl = {\n technique: technique,\n values: materialValues,\n };\n\n material.alphaMode = \"OPAQUE\";\n if (khrMaterialsCommon.transparent) {\n material.alphaMode = \"BLEND\";\n }\n\n if (khrMaterialsCommon.doubleSided) {\n material.doubleSided = true;\n }\n }\n });\n\n if (!generatedTechniques) {\n return gltf;\n }\n\n // If any primitives have semantics that aren't declared in the generated\n // shaders, we want to preserve them.\n ModelUtility.ensureSemanticExistence(gltf);\n\n return gltf;\n}\n\nfunction generateLightParameters(gltf) {\n var result = {};\n\n var lights;\n if (\n defined(gltf.extensions) &&\n defined(gltf.extensions.KHR_materials_common)\n ) {\n lights = gltf.extensions.KHR_materials_common.lights;\n }\n\n if (defined(lights)) {\n // Figure out which node references the light\n var nodes = gltf.nodes;\n for (var nodeName in nodes) {\n if (nodes.hasOwnProperty(nodeName)) {\n var node = nodes[nodeName];\n if (\n defined(node.extensions) &&\n defined(node.extensions.KHR_materials_common)\n ) {\n var nodeLightId = node.extensions.KHR_materials_common.light;\n if (defined(nodeLightId) && defined(lights[nodeLightId])) {\n lights[nodeLightId].node = nodeName;\n }\n delete node.extensions.KHR_materials_common;\n }\n }\n }\n\n // Add light parameters to result\n var lightCount = 0;\n for (var lightName in lights) {\n if (lights.hasOwnProperty(lightName)) {\n var light = lights[lightName];\n var lightType = light.type;\n if (lightType !== \"ambient\" && !defined(light.node)) {\n delete lights[lightName];\n continue;\n }\n var lightBaseName = \"light\" + lightCount.toString();\n light.baseName = lightBaseName;\n switch (lightType) {\n case \"ambient\":\n var ambient = light.ambient;\n result[lightBaseName + \"Color\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: ambient.color,\n };\n break;\n case \"directional\":\n var directional = light.directional;\n result[lightBaseName + \"Color\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: directional.color,\n };\n if (defined(light.node)) {\n result[lightBaseName + \"Transform\"] = {\n node: light.node,\n semantic: \"MODELVIEW\",\n type: WebGLConstants.FLOAT_MAT4,\n };\n }\n break;\n case \"point\":\n var point = light.point;\n result[lightBaseName + \"Color\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: point.color,\n };\n if (defined(light.node)) {\n result[lightBaseName + \"Transform\"] = {\n node: light.node,\n semantic: \"MODELVIEW\",\n type: WebGLConstants.FLOAT_MAT4,\n };\n }\n result[lightBaseName + \"Attenuation\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: [\n point.constantAttenuation,\n point.linearAttenuation,\n point.quadraticAttenuation,\n ],\n };\n break;\n case \"spot\":\n var spot = light.spot;\n result[lightBaseName + \"Color\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: spot.color,\n };\n if (defined(light.node)) {\n result[lightBaseName + \"Transform\"] = {\n node: light.node,\n semantic: \"MODELVIEW\",\n type: WebGLConstants.FLOAT_MAT4,\n };\n result[lightBaseName + \"InverseTransform\"] = {\n node: light.node,\n semantic: \"MODELVIEWINVERSE\",\n type: WebGLConstants.FLOAT_MAT4,\n useInFragment: true,\n };\n }\n result[lightBaseName + \"Attenuation\"] = {\n type: WebGLConstants.FLOAT_VEC3,\n value: [\n spot.constantAttenuation,\n spot.linearAttenuation,\n spot.quadraticAttenuation,\n ],\n };\n\n result[lightBaseName + \"FallOff\"] = {\n type: WebGLConstants.FLOAT_VEC2,\n value: [spot.fallOffAngle, spot.fallOffExponent],\n };\n break;\n }\n ++lightCount;\n }\n }\n }\n\n return result;\n}\n\nfunction generateTechnique(\n gltf,\n techniquesWebgl,\n primitiveInfo,\n khrMaterialsCommon,\n lightParameters,\n addBatchIdToGeneratedShaders\n) {\n if (!defined(khrMaterialsCommon)) {\n khrMaterialsCommon = {};\n }\n\n addBatchIdToGeneratedShaders = defaultValue(\n addBatchIdToGeneratedShaders,\n false\n );\n\n var techniques = techniquesWebgl.techniques;\n var shaders = techniquesWebgl.shaders;\n var programs = techniquesWebgl.programs;\n var lightingModel = khrMaterialsCommon.technique.toUpperCase();\n var lights;\n if (\n defined(gltf.extensions) &&\n defined(gltf.extensions.KHR_materials_common)\n ) {\n lights = gltf.extensions.KHR_materials_common.lights;\n }\n\n var parameterValues = khrMaterialsCommon.values;\n var jointCount = defaultValue(khrMaterialsCommon.jointCount, 0);\n\n var skinningInfo;\n var hasSkinning = false;\n var hasVertexColors = false;\n\n if (defined(primitiveInfo)) {\n skinningInfo = primitiveInfo.skinning;\n hasSkinning = skinningInfo.skinned;\n hasVertexColors = primitiveInfo.hasVertexColors;\n }\n\n var vertexShader = \"precision highp float;\\n\";\n var fragmentShader = \"precision highp float;\\n\";\n\n var hasNormals = lightingModel !== \"CONSTANT\";\n\n // Add techniques\n var techniqueUniforms = {\n u_modelViewMatrix: {\n semantic: hasExtension(gltf, \"CESIUM_RTC\")\n ? \"CESIUM_RTC_MODELVIEW\"\n : \"MODELVIEW\",\n type: WebGLConstants.FLOAT_MAT4,\n },\n u_projectionMatrix: {\n semantic: \"PROJECTION\",\n type: WebGLConstants.FLOAT_MAT4,\n },\n };\n\n if (hasNormals) {\n techniqueUniforms.u_normalMatrix = {\n semantic: \"MODELVIEWINVERSETRANSPOSE\",\n type: WebGLConstants.FLOAT_MAT3,\n };\n }\n\n if (hasSkinning) {\n techniqueUniforms.u_jointMatrix = {\n count: jointCount,\n semantic: \"JOINTMATRIX\",\n type: WebGLConstants.FLOAT_MAT4,\n };\n }\n\n // Add material values\n var uniformName;\n var hasTexCoords = false;\n for (var name in parameterValues) {\n //generate shader parameters for KHR_materials_common attributes\n //(including a check, because some boolean flags should not be used as shader parameters)\n if (\n parameterValues.hasOwnProperty(name) &&\n name !== \"transparent\" &&\n name !== \"doubleSided\"\n ) {\n var uniformType = getKHRMaterialsCommonValueType(\n name,\n parameterValues[name]\n );\n uniformName = \"u_\" + name.toLowerCase();\n if (!hasTexCoords && uniformType === WebGLConstants.SAMPLER_2D) {\n hasTexCoords = true;\n }\n\n techniqueUniforms[uniformName] = {\n type: uniformType,\n };\n }\n }\n\n // Give the diffuse uniform a semantic to support color replacement in 3D Tiles\n if (defined(techniqueUniforms.u_diffuse)) {\n techniqueUniforms.u_diffuse.semantic = \"_3DTILESDIFFUSE\";\n }\n\n // Copy light parameters into technique parameters\n if (defined(lightParameters)) {\n for (var lightParamName in lightParameters) {\n if (lightParameters.hasOwnProperty(lightParamName)) {\n uniformName = \"u_\" + lightParamName;\n techniqueUniforms[uniformName] = lightParameters[lightParamName];\n }\n }\n }\n\n // Add uniforms to shaders\n for (uniformName in techniqueUniforms) {\n if (techniqueUniforms.hasOwnProperty(uniformName)) {\n var uniform = techniqueUniforms[uniformName];\n var arraySize = defined(uniform.count) ? \"[\" + uniform.count + \"]\" : \"\";\n if (\n (uniform.type !== WebGLConstants.FLOAT_MAT3 &&\n uniform.type !== WebGLConstants.FLOAT_MAT4) ||\n uniform.useInFragment\n ) {\n fragmentShader +=\n \"uniform \" +\n webGLConstantToGlslType(uniform.type) +\n \" \" +\n uniformName +\n arraySize +\n \";\\n\";\n delete uniform.useInFragment;\n } else {\n vertexShader +=\n \"uniform \" +\n webGLConstantToGlslType(uniform.type) +\n \" \" +\n uniformName +\n arraySize +\n \";\\n\";\n }\n }\n }\n\n // Add attributes with semantics\n var vertexShaderMain = \"\";\n if (hasSkinning) {\n vertexShaderMain +=\n \" mat4 skinMatrix =\\n\" +\n \" a_weight.x * u_jointMatrix[int(a_joint.x)] +\\n\" +\n \" a_weight.y * u_jointMatrix[int(a_joint.y)] +\\n\" +\n \" a_weight.z * u_jointMatrix[int(a_joint.z)] +\\n\" +\n \" a_weight.w * u_jointMatrix[int(a_joint.w)];\\n\";\n }\n\n // Add position always\n var techniqueAttributes = {\n a_position: {\n semantic: \"POSITION\",\n },\n };\n vertexShader += \"attribute vec3 a_position;\\n\";\n vertexShader += \"varying vec3 v_positionEC;\\n\";\n if (hasSkinning) {\n vertexShaderMain +=\n \" vec4 pos = u_modelViewMatrix * skinMatrix * vec4(a_position,1.0);\\n\";\n } else {\n vertexShaderMain +=\n \" vec4 pos = u_modelViewMatrix * vec4(a_position,1.0);\\n\";\n }\n vertexShaderMain += \" v_positionEC = pos.xyz;\\n\";\n vertexShaderMain += \" gl_Position = u_projectionMatrix * pos;\\n\";\n fragmentShader += \"varying vec3 v_positionEC;\\n\";\n\n // Add normal if we don't have constant lighting\n if (hasNormals) {\n techniqueAttributes.a_normal = {\n semantic: \"NORMAL\",\n };\n vertexShader += \"attribute vec3 a_normal;\\n\";\n vertexShader += \"varying vec3 v_normal;\\n\";\n if (hasSkinning) {\n vertexShaderMain +=\n \" v_normal = u_normalMatrix * mat3(skinMatrix) * a_normal;\\n\";\n } else {\n vertexShaderMain += \" v_normal = u_normalMatrix * a_normal;\\n\";\n }\n\n fragmentShader += \"varying vec3 v_normal;\\n\";\n }\n\n // Add texture coordinates if the material uses them\n var v_texcoord;\n if (hasTexCoords) {\n techniqueAttributes.a_texcoord_0 = {\n semantic: \"TEXCOORD_0\",\n };\n\n v_texcoord = \"v_texcoord_0\";\n vertexShader += \"attribute vec2 a_texcoord_0;\\n\";\n vertexShader += \"varying vec2 \" + v_texcoord + \";\\n\";\n vertexShaderMain += \" \" + v_texcoord + \" = a_texcoord_0;\\n\";\n\n fragmentShader += \"varying vec2 \" + v_texcoord + \";\\n\";\n }\n\n if (hasSkinning) {\n techniqueAttributes.a_joint = {\n semantic: \"JOINTS_0\",\n };\n techniqueAttributes.a_weight = {\n semantic: \"WEIGHTS_0\",\n };\n\n vertexShader += \"attribute vec4 a_joint;\\n\";\n vertexShader += \"attribute vec4 a_weight;\\n\";\n }\n\n if (hasVertexColors) {\n techniqueAttributes.a_vertexColor = {\n semantic: \"COLOR_0\",\n };\n vertexShader += \"attribute vec4 a_vertexColor;\\n\";\n vertexShader += \"varying vec4 v_vertexColor;\\n\";\n vertexShaderMain += \" v_vertexColor = a_vertexColor;\\n\";\n fragmentShader += \"varying vec4 v_vertexColor;\\n\";\n }\n\n if (addBatchIdToGeneratedShaders) {\n techniqueAttributes.a_batchId = {\n semantic: \"_BATCHID\",\n };\n vertexShader += \"attribute float a_batchId;\\n\";\n }\n\n var hasSpecular =\n hasNormals &&\n (lightingModel === \"BLINN\" || lightingModel === \"PHONG\") &&\n defined(techniqueUniforms.u_specular) &&\n defined(techniqueUniforms.u_shininess) &&\n techniqueUniforms.u_shininess > 0.0;\n\n // Generate lighting code blocks\n var hasNonAmbientLights = false;\n var hasAmbientLights = false;\n var fragmentLightingBlock = \"\";\n for (var lightName in lights) {\n if (lights.hasOwnProperty(lightName)) {\n var light = lights[lightName];\n var lightType = light.type.toLowerCase();\n var lightBaseName = light.baseName;\n fragmentLightingBlock += \" {\\n\";\n var lightColorName = \"u_\" + lightBaseName + \"Color\";\n var varyingDirectionName;\n var varyingPositionName;\n if (lightType === \"ambient\") {\n hasAmbientLights = true;\n fragmentLightingBlock +=\n \" ambientLight += \" + lightColorName + \";\\n\";\n } else if (hasNormals) {\n hasNonAmbientLights = true;\n varyingDirectionName = \"v_\" + lightBaseName + \"Direction\";\n varyingPositionName = \"v_\" + lightBaseName + \"Position\";\n\n if (lightType !== \"point\") {\n vertexShader += \"varying vec3 \" + varyingDirectionName + \";\\n\";\n fragmentShader += \"varying vec3 \" + varyingDirectionName + \";\\n\";\n\n vertexShaderMain +=\n \" \" +\n varyingDirectionName +\n \" = mat3(u_\" +\n lightBaseName +\n \"Transform) * vec3(0.,0.,1.);\\n\";\n if (lightType === \"directional\") {\n fragmentLightingBlock +=\n \" vec3 l = normalize(\" + varyingDirectionName + \");\\n\";\n }\n }\n\n if (lightType !== \"directional\") {\n vertexShader += \"varying vec3 \" + varyingPositionName + \";\\n\";\n fragmentShader += \"varying vec3 \" + varyingPositionName + \";\\n\";\n\n vertexShaderMain +=\n \" \" +\n varyingPositionName +\n \" = u_\" +\n lightBaseName +\n \"Transform[3].xyz;\\n\";\n fragmentLightingBlock +=\n \" vec3 VP = \" + varyingPositionName + \" - v_positionEC;\\n\";\n fragmentLightingBlock += \" vec3 l = normalize(VP);\\n\";\n fragmentLightingBlock += \" float range = length(VP);\\n\";\n fragmentLightingBlock +=\n \" float attenuation = 1.0 / (u_\" +\n lightBaseName +\n \"Attenuation.x + \";\n fragmentLightingBlock +=\n \"(u_\" + lightBaseName + \"Attenuation.y * range) + \";\n fragmentLightingBlock +=\n \"(u_\" + lightBaseName + \"Attenuation.z * range * range));\\n\";\n } else {\n fragmentLightingBlock += \" float attenuation = 1.0;\\n\";\n }\n\n if (lightType === \"spot\") {\n fragmentLightingBlock +=\n \" float spotDot = dot(l, normalize(\" +\n varyingDirectionName +\n \"));\\n\";\n fragmentLightingBlock +=\n \" if (spotDot < cos(u_\" + lightBaseName + \"FallOff.x * 0.5))\\n\";\n fragmentLightingBlock += \" {\\n\";\n fragmentLightingBlock += \" attenuation = 0.0;\\n\";\n fragmentLightingBlock += \" }\\n\";\n fragmentLightingBlock += \" else\\n\";\n fragmentLightingBlock += \" {\\n\";\n fragmentLightingBlock +=\n \" attenuation *= max(0.0, pow(spotDot, u_\" +\n lightBaseName +\n \"FallOff.y));\\n\";\n fragmentLightingBlock += \" }\\n\";\n }\n\n fragmentLightingBlock +=\n \" diffuseLight += \" +\n lightColorName +\n \"* max(dot(normal,l), 0.) * attenuation;\\n\";\n\n if (hasSpecular) {\n if (lightingModel === \"BLINN\") {\n fragmentLightingBlock += \" vec3 h = normalize(l + viewDir);\\n\";\n fragmentLightingBlock +=\n \" float specularIntensity = max(0., pow(max(dot(normal, h), 0.), u_shininess)) * attenuation;\\n\";\n } else {\n // PHONG\n fragmentLightingBlock +=\n \" vec3 reflectDir = reflect(-l, normal);\\n\";\n fragmentLightingBlock +=\n \" float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess)) * attenuation;\\n\";\n }\n fragmentLightingBlock +=\n \" specularLight += \" +\n lightColorName +\n \" * specularIntensity;\\n\";\n }\n }\n fragmentLightingBlock += \" }\\n\";\n }\n }\n\n if (!hasAmbientLights) {\n // Add an ambient light if we don't have one\n fragmentLightingBlock += \" ambientLight += vec3(0.2, 0.2, 0.2);\\n\";\n }\n\n if (!hasNonAmbientLights && lightingModel !== \"CONSTANT\") {\n fragmentShader += \"#ifdef USE_CUSTOM_LIGHT_COLOR \\n\";\n fragmentShader += \"uniform vec3 gltf_lightColor; \\n\";\n fragmentShader += \"#endif \\n\";\n\n fragmentLightingBlock += \"#ifndef USE_CUSTOM_LIGHT_COLOR \\n\";\n fragmentLightingBlock += \" vec3 lightColor = czm_lightColor;\\n\";\n fragmentLightingBlock += \"#else \\n\";\n fragmentLightingBlock += \" vec3 lightColor = gltf_lightColor;\\n\";\n fragmentLightingBlock += \"#endif \\n\";\n\n fragmentLightingBlock += \" vec3 l = normalize(czm_lightDirectionEC);\\n\";\n var minimumLighting = \"0.2\"; // Use strings instead of values as 0.0 -> 0 when stringified\n fragmentLightingBlock +=\n \" diffuseLight += lightColor * max(dot(normal,l), \" +\n minimumLighting +\n \");\\n\";\n\n if (hasSpecular) {\n if (lightingModel === \"BLINN\") {\n fragmentLightingBlock += \" vec3 h = normalize(l + viewDir);\\n\";\n fragmentLightingBlock +=\n \" float specularIntensity = max(0., pow(max(dot(normal, h), 0.), u_shininess));\\n\";\n } else {\n // PHONG\n fragmentLightingBlock += \" vec3 reflectDir = reflect(-l, normal);\\n\";\n fragmentLightingBlock +=\n \" float specularIntensity = max(0., pow(max(dot(reflectDir, viewDir), 0.), u_shininess));\\n\";\n }\n\n fragmentLightingBlock +=\n \" specularLight += lightColor * specularIntensity;\\n\";\n }\n }\n\n vertexShader += \"void main(void) {\\n\";\n vertexShader += vertexShaderMain;\n vertexShader += \"}\\n\";\n\n fragmentShader += \"void main(void) {\\n\";\n var colorCreationBlock = \" vec3 color = vec3(0.0, 0.0, 0.0);\\n\";\n if (hasNormals) {\n fragmentShader += \" vec3 normal = normalize(v_normal);\\n\";\n if (khrMaterialsCommon.doubleSided) {\n fragmentShader += \" if (czm_backFacing())\\n\";\n fragmentShader += \" {\\n\";\n fragmentShader += \" normal = -normal;\\n\";\n fragmentShader += \" }\\n\";\n }\n }\n\n var finalColorComputation;\n if (lightingModel !== \"CONSTANT\") {\n if (defined(techniqueUniforms.u_diffuse)) {\n if (techniqueUniforms.u_diffuse.type === WebGLConstants.SAMPLER_2D) {\n fragmentShader +=\n \" vec4 diffuse = texture2D(u_diffuse, \" + v_texcoord + \");\\n\";\n } else {\n fragmentShader += \" vec4 diffuse = u_diffuse;\\n\";\n }\n fragmentShader += \" vec3 diffuseLight = vec3(0.0, 0.0, 0.0);\\n\";\n colorCreationBlock += \" color += diffuse.rgb * diffuseLight;\\n\";\n }\n\n if (hasSpecular) {\n if (techniqueUniforms.u_specular.type === WebGLConstants.SAMPLER_2D) {\n fragmentShader +=\n \" vec3 specular = texture2D(u_specular, \" + v_texcoord + \").rgb;\\n\";\n } else {\n fragmentShader += \" vec3 specular = u_specular.rgb;\\n\";\n }\n fragmentShader += \" vec3 specularLight = vec3(0.0, 0.0, 0.0);\\n\";\n colorCreationBlock += \" color += specular * specularLight;\\n\";\n }\n\n if (defined(techniqueUniforms.u_transparency)) {\n finalColorComputation =\n \" gl_FragColor = vec4(color * diffuse.a * u_transparency, diffuse.a * u_transparency);\\n\";\n } else {\n finalColorComputation =\n \" gl_FragColor = vec4(color * diffuse.a, diffuse.a);\\n\";\n }\n } else if (defined(techniqueUniforms.u_transparency)) {\n finalColorComputation =\n \" gl_FragColor = vec4(color * u_transparency, u_transparency);\\n\";\n } else {\n finalColorComputation = \" gl_FragColor = vec4(color, 1.0);\\n\";\n }\n\n if (hasVertexColors) {\n colorCreationBlock += \" color *= v_vertexColor.rgb;\\n\";\n }\n\n if (defined(techniqueUniforms.u_emission)) {\n if (techniqueUniforms.u_emission.type === WebGLConstants.SAMPLER_2D) {\n fragmentShader +=\n \" vec3 emission = texture2D(u_emission, \" + v_texcoord + \").rgb;\\n\";\n } else {\n fragmentShader += \" vec3 emission = u_emission.rgb;\\n\";\n }\n colorCreationBlock += \" color += emission;\\n\";\n }\n\n if (defined(techniqueUniforms.u_ambient) || lightingModel !== \"CONSTANT\") {\n if (defined(techniqueUniforms.u_ambient)) {\n if (techniqueUniforms.u_ambient.type === WebGLConstants.SAMPLER_2D) {\n fragmentShader +=\n \" vec3 ambient = texture2D(u_ambient, \" + v_texcoord + \").rgb;\\n\";\n } else {\n fragmentShader += \" vec3 ambient = u_ambient.rgb;\\n\";\n }\n } else {\n fragmentShader += \" vec3 ambient = diffuse.rgb;\\n\";\n }\n colorCreationBlock += \" color += ambient * ambientLight;\\n\";\n }\n fragmentShader += \" vec3 viewDir = -normalize(v_positionEC);\\n\";\n fragmentShader += \" vec3 ambientLight = vec3(0.0, 0.0, 0.0);\\n\";\n\n // Add in light computations\n fragmentShader += fragmentLightingBlock;\n\n fragmentShader += colorCreationBlock;\n fragmentShader += finalColorComputation;\n fragmentShader += \"}\\n\";\n\n // Add shaders\n var vertexShaderId = addToArray(shaders, {\n type: WebGLConstants.VERTEX_SHADER,\n extras: {\n _pipeline: {\n source: vertexShader,\n extension: \".glsl\",\n },\n },\n });\n\n var fragmentShaderId = addToArray(shaders, {\n type: WebGLConstants.FRAGMENT_SHADER,\n extras: {\n _pipeline: {\n source: fragmentShader,\n extension: \".glsl\",\n },\n },\n });\n\n // Add program\n var programId = addToArray(programs, {\n fragmentShader: fragmentShaderId,\n vertexShader: vertexShaderId,\n });\n\n var techniqueId = addToArray(techniques, {\n attributes: techniqueAttributes,\n program: programId,\n uniforms: techniqueUniforms,\n });\n\n return techniqueId;\n}\n\nfunction getKHRMaterialsCommonValueType(paramName, paramValue) {\n var value;\n\n // Backwards compatibility for COLLADA2GLTF v1.0-draft when it encoding\n // materials using KHR_materials_common with explicit type/value members\n if (defined(paramValue.value)) {\n value = paramValue.value;\n } else if (defined(paramValue.index)) {\n value = [paramValue.index];\n } else {\n value = paramValue;\n }\n\n switch (paramName) {\n case \"ambient\":\n return value.length === 1\n ? WebGLConstants.SAMPLER_2D\n : WebGLConstants.FLOAT_VEC4;\n case \"diffuse\":\n return value.length === 1\n ? WebGLConstants.SAMPLER_2D\n : WebGLConstants.FLOAT_VEC4;\n case \"emission\":\n return value.length === 1\n ? WebGLConstants.SAMPLER_2D\n : WebGLConstants.FLOAT_VEC4;\n case \"specular\":\n return value.length === 1\n ? WebGLConstants.SAMPLER_2D\n : WebGLConstants.FLOAT_VEC4;\n case \"shininess\":\n return WebGLConstants.FLOAT;\n case \"transparency\":\n return WebGLConstants.FLOAT;\n\n // these two are usually not used directly within shaders,\n // they are just added here for completeness\n case \"transparent\":\n return WebGLConstants.BOOL;\n case \"doubleSided\":\n return WebGLConstants.BOOL;\n }\n}\n\nfunction getTechniqueKey(khrMaterialsCommon, primitiveInfo) {\n var techniqueKey = \"\";\n techniqueKey += \"technique:\" + khrMaterialsCommon.technique + \";\";\n\n var values = khrMaterialsCommon.values;\n var keys = Object.keys(values).sort();\n var keysCount = keys.length;\n for (var i = 0; i < keysCount; ++i) {\n var name = keys[i];\n if (values.hasOwnProperty(name)) {\n techniqueKey +=\n name + \":\" + getKHRMaterialsCommonValueType(name, values[name]);\n techniqueKey += \";\";\n }\n }\n\n var jointCount = defaultValue(khrMaterialsCommon.jointCount, 0);\n techniqueKey += jointCount.toString() + \";\";\n if (defined(primitiveInfo)) {\n var skinningInfo = primitiveInfo.skinning;\n if (jointCount > 0) {\n techniqueKey += skinningInfo.type + \";\";\n }\n techniqueKey += primitiveInfo.hasVertexColors;\n }\n\n return techniqueKey;\n}\n\nfunction lightDefaults(gltf) {\n var khrMaterialsCommon = gltf.extensions.KHR_materials_common;\n if (!defined(khrMaterialsCommon) || !defined(khrMaterialsCommon.lights)) {\n return;\n }\n\n var lights = khrMaterialsCommon.lights;\n\n var lightsLength = lights.length;\n for (var lightId = 0; lightId < lightsLength; lightId++) {\n var light = lights[lightId];\n if (light.type === \"ambient\") {\n if (!defined(light.ambient)) {\n light.ambient = {};\n }\n var ambientLight = light.ambient;\n\n if (!defined(ambientLight.color)) {\n ambientLight.color = [1.0, 1.0, 1.0];\n }\n } else if (light.type === \"directional\") {\n if (!defined(light.directional)) {\n light.directional = {};\n }\n var directionalLight = light.directional;\n\n if (!defined(directionalLight.color)) {\n directionalLight.color = [1.0, 1.0, 1.0];\n }\n } else if (light.type === \"point\") {\n if (!defined(light.point)) {\n light.point = {};\n }\n var pointLight = light.point;\n\n if (!defined(pointLight.color)) {\n pointLight.color = [1.0, 1.0, 1.0];\n }\n\n pointLight.constantAttenuation = defaultValue(\n pointLight.constantAttenuation,\n 1.0\n );\n pointLight.linearAttenuation = defaultValue(\n pointLight.linearAttenuation,\n 0.0\n );\n pointLight.quadraticAttenuation = defaultValue(\n pointLight.quadraticAttenuation,\n 0.0\n );\n } else if (light.type === \"spot\") {\n if (!defined(light.spot)) {\n light.spot = {};\n }\n var spotLight = light.spot;\n\n if (!defined(spotLight.color)) {\n spotLight.color = [1.0, 1.0, 1.0];\n }\n\n spotLight.constantAttenuation = defaultValue(\n spotLight.constantAttenuation,\n 1.0\n );\n spotLight.fallOffAngle = defaultValue(spotLight.fallOffAngle, 3.14159265);\n spotLight.fallOffExponent = defaultValue(spotLight.fallOffExponent, 0.0);\n spotLight.linearAttenuation = defaultValue(\n spotLight.linearAttenuation,\n 0.0\n );\n spotLight.quadraticAttenuation = defaultValue(\n spotLight.quadraticAttenuation,\n 0.0\n );\n }\n }\n}\nexport default processModelMaterialsCommon;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport webGLConstantToGlslType from \"../Core/webGLConstantToGlslType.js\";\nimport addToArray from \"../ThirdParty/GltfPipeline/addToArray.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport hasExtension from \"../ThirdParty/GltfPipeline/hasExtension.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * @private\n */\nfunction processPbrMaterials(gltf, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n // No need to create new techniques if they already exist,\n // the shader should handle these values\n if (hasExtension(gltf, \"KHR_techniques_webgl\")) {\n return gltf;\n }\n\n // All materials in glTF are PBR by default,\n // so we should apply PBR unless no materials are found.\n if (!defined(gltf.materials) || gltf.materials.length === 0) {\n return gltf;\n }\n\n if (!defined(gltf.extensions)) {\n gltf.extensions = {};\n }\n\n if (!defined(gltf.extensionsUsed)) {\n gltf.extensionsUsed = [];\n }\n\n if (!defined(gltf.extensionsRequired)) {\n gltf.extensionsRequired = [];\n }\n\n gltf.extensions.KHR_techniques_webgl = {\n programs: [],\n shaders: [],\n techniques: [],\n };\n\n gltf.extensionsUsed.push(\"KHR_techniques_webgl\");\n gltf.extensionsRequired.push(\"KHR_techniques_webgl\");\n\n var primitiveByMaterial = ModelUtility.splitIncompatibleMaterials(gltf);\n\n ForEach.material(gltf, function (material, materialIndex) {\n var generatedMaterialValues = {};\n var technique = generateTechnique(\n gltf,\n material,\n materialIndex,\n generatedMaterialValues,\n primitiveByMaterial,\n options\n );\n\n if (!defined(material.extensions)) {\n material.extensions = {};\n }\n\n material.extensions.KHR_techniques_webgl = {\n values: generatedMaterialValues,\n technique: technique,\n };\n });\n\n // If any primitives have semantics that aren't declared in the generated\n // shaders, we want to preserve them.\n ModelUtility.ensureSemanticExistence(gltf);\n\n return gltf;\n}\n\nfunction isSpecularGlossinessMaterial(material) {\n return (\n defined(material.extensions) &&\n defined(material.extensions.KHR_materials_pbrSpecularGlossiness)\n );\n}\n\nfunction addTextureCoordinates(\n gltf,\n textureName,\n generatedMaterialValues,\n defaultTexCoord,\n result\n) {\n var texCoord;\n if (defined(generatedMaterialValues[textureName + \"Offset\"])) {\n texCoord = textureName + \"Coord\";\n result.fragmentShaderMain +=\n \" vec2 \" +\n texCoord +\n \" = computeTexCoord(\" +\n defaultTexCoord +\n \", \" +\n textureName +\n \"Offset, \" +\n textureName +\n \"Rotation, \" +\n textureName +\n \"Scale);\\n\";\n } else {\n texCoord = defaultTexCoord;\n }\n return texCoord;\n}\n\nvar DEFAULT_TEXTURE_OFFSET = [0.0, 0.0];\nvar DEFAULT_TEXTURE_ROTATION = [0.0];\nvar DEFAULT_TEXTURE_SCALE = [1.0, 1.0];\n\nfunction handleKHRTextureTransform(\n parameterName,\n value,\n generatedMaterialValues\n) {\n if (\n parameterName.indexOf(\"Texture\") === -1 ||\n !defined(value.extensions) ||\n !defined(value.extensions.KHR_texture_transform)\n ) {\n return;\n }\n\n var uniformName = \"u_\" + parameterName;\n var extension = value.extensions.KHR_texture_transform;\n generatedMaterialValues[uniformName + \"Offset\"] = defaultValue(\n extension.offset,\n DEFAULT_TEXTURE_OFFSET\n );\n generatedMaterialValues[uniformName + \"Rotation\"] = defaultValue(\n extension.rotation,\n DEFAULT_TEXTURE_ROTATION\n );\n generatedMaterialValues[uniformName + \"Scale\"] = defaultValue(\n extension.scale,\n DEFAULT_TEXTURE_SCALE\n );\n\n if (defined(value.texCoord) && defined(extension.texCoord)) {\n generatedMaterialValues[uniformName].texCoord = extension.texCoord;\n }\n}\n\nfunction generateTechnique(\n gltf,\n material,\n materialIndex,\n generatedMaterialValues,\n primitiveByMaterial,\n options\n) {\n var addBatchIdToGeneratedShaders = defaultValue(\n options.addBatchIdToGeneratedShaders,\n false\n );\n\n var techniquesWebgl = gltf.extensions.KHR_techniques_webgl;\n var techniques = techniquesWebgl.techniques;\n var shaders = techniquesWebgl.shaders;\n var programs = techniquesWebgl.programs;\n\n var useSpecGloss = isSpecularGlossinessMaterial(material);\n\n var uniformName;\n var parameterName;\n var value;\n var pbrMetallicRoughness = material.pbrMetallicRoughness;\n if (defined(pbrMetallicRoughness) && !useSpecGloss) {\n for (parameterName in pbrMetallicRoughness) {\n if (pbrMetallicRoughness.hasOwnProperty(parameterName)) {\n value = pbrMetallicRoughness[parameterName];\n uniformName = \"u_\" + parameterName;\n generatedMaterialValues[uniformName] = value;\n handleKHRTextureTransform(\n parameterName,\n value,\n generatedMaterialValues\n );\n }\n }\n }\n\n if (useSpecGloss) {\n var pbrSpecularGlossiness =\n material.extensions.KHR_materials_pbrSpecularGlossiness;\n for (parameterName in pbrSpecularGlossiness) {\n if (pbrSpecularGlossiness.hasOwnProperty(parameterName)) {\n value = pbrSpecularGlossiness[parameterName];\n uniformName = \"u_\" + parameterName;\n generatedMaterialValues[uniformName] = value;\n handleKHRTextureTransform(\n parameterName,\n value,\n generatedMaterialValues\n );\n }\n }\n }\n\n for (var additional in material) {\n if (\n material.hasOwnProperty(additional) &&\n (additional.indexOf(\"Texture\") >= 0 || additional.indexOf(\"Factor\") >= 0)\n ) {\n value = material[additional];\n uniformName = \"u_\" + additional;\n generatedMaterialValues[uniformName] = value;\n handleKHRTextureTransform(additional, value, generatedMaterialValues);\n }\n }\n\n var vertexShader = \"precision highp float;\\n\";\n var fragmentShader = \"precision highp float;\\n\";\n\n var skin;\n if (defined(gltf.skins)) {\n skin = gltf.skins[0];\n }\n var joints = defined(skin) ? skin.joints : [];\n var jointCount = joints.length;\n\n var primitiveInfo = primitiveByMaterial[materialIndex];\n\n var skinningInfo;\n var hasSkinning = false;\n var hasVertexColors = false;\n var hasMorphTargets = false;\n var hasNormals = false;\n var hasTangents = false;\n var hasTexCoords = false;\n var hasOutline = false;\n var isUnlit = false;\n\n if (defined(primitiveInfo)) {\n skinningInfo = primitiveInfo.skinning;\n hasSkinning = skinningInfo.skinned && joints.length > 0;\n hasVertexColors = primitiveInfo.hasVertexColors;\n hasMorphTargets = primitiveInfo.hasMorphTargets;\n hasNormals = primitiveInfo.hasNormals;\n hasTangents = primitiveInfo.hasTangents;\n hasTexCoords = primitiveInfo.hasTexCoords;\n hasOutline = primitiveInfo.hasOutline;\n }\n\n var morphTargets;\n if (hasMorphTargets) {\n ForEach.mesh(gltf, function (mesh) {\n ForEach.meshPrimitive(mesh, function (primitive) {\n if (primitive.material === materialIndex) {\n var targets = primitive.targets;\n if (defined(targets)) {\n morphTargets = targets;\n }\n }\n });\n });\n }\n\n // Add techniques\n var techniqueUniforms = {\n // Add matrices\n u_modelViewMatrix: {\n semantic: hasExtension(gltf, \"CESIUM_RTC\")\n ? \"CESIUM_RTC_MODELVIEW\"\n : \"MODELVIEW\",\n type: WebGLConstants.FLOAT_MAT4,\n },\n u_projectionMatrix: {\n semantic: \"PROJECTION\",\n type: WebGLConstants.FLOAT_MAT4,\n },\n };\n\n if (\n defined(material.extensions) &&\n defined(material.extensions.KHR_materials_unlit)\n ) {\n isUnlit = true;\n hasNormals = false;\n hasTangents = false;\n }\n\n if (hasNormals) {\n techniqueUniforms.u_normalMatrix = {\n semantic: \"MODELVIEWINVERSETRANSPOSE\",\n type: WebGLConstants.FLOAT_MAT3,\n };\n }\n\n if (hasSkinning) {\n techniqueUniforms.u_jointMatrix = {\n count: jointCount,\n semantic: \"JOINTMATRIX\",\n type: WebGLConstants.FLOAT_MAT4,\n };\n }\n\n if (hasMorphTargets) {\n techniqueUniforms.u_morphWeights = {\n count: morphTargets.length,\n semantic: \"MORPHWEIGHTS\",\n type: WebGLConstants.FLOAT,\n };\n }\n\n var alphaMode = material.alphaMode;\n if (defined(alphaMode) && alphaMode === \"MASK\") {\n techniqueUniforms.u_alphaCutoff = {\n semantic: \"ALPHACUTOFF\",\n type: WebGLConstants.FLOAT,\n };\n }\n\n // Add material values\n for (uniformName in generatedMaterialValues) {\n if (generatedMaterialValues.hasOwnProperty(uniformName)) {\n techniqueUniforms[uniformName] = {\n type: getPBRValueType(uniformName),\n };\n }\n }\n\n var baseColorUniform = defaultValue(\n techniqueUniforms.u_baseColorTexture,\n techniqueUniforms.u_baseColorFactor\n );\n if (defined(baseColorUniform)) {\n baseColorUniform.semantic = \"_3DTILESDIFFUSE\";\n }\n\n // Add uniforms to shaders\n for (uniformName in techniqueUniforms) {\n if (techniqueUniforms.hasOwnProperty(uniformName)) {\n var uniform = techniqueUniforms[uniformName];\n var arraySize = defined(uniform.count) ? \"[\" + uniform.count + \"]\" : \"\";\n if (\n (uniform.type !== WebGLConstants.FLOAT_MAT3 &&\n uniform.type !== WebGLConstants.FLOAT_MAT4 &&\n uniformName !== \"u_morphWeights\") ||\n uniform.useInFragment\n ) {\n fragmentShader +=\n \"uniform \" +\n webGLConstantToGlslType(uniform.type) +\n \" \" +\n uniformName +\n arraySize +\n \";\\n\";\n delete uniform.useInFragment;\n } else {\n vertexShader +=\n \"uniform \" +\n webGLConstantToGlslType(uniform.type) +\n \" \" +\n uniformName +\n arraySize +\n \";\\n\";\n }\n }\n }\n\n if (hasOutline) {\n fragmentShader += \"uniform sampler2D u_outlineTexture;\\n\";\n }\n\n // Add attributes with semantics\n var vertexShaderMain = \"\";\n if (hasSkinning) {\n vertexShaderMain +=\n \" mat4 skinMatrix =\\n\" +\n \" a_weight.x * u_jointMatrix[int(a_joint.x)] +\\n\" +\n \" a_weight.y * u_jointMatrix[int(a_joint.y)] +\\n\" +\n \" a_weight.z * u_jointMatrix[int(a_joint.z)] +\\n\" +\n \" a_weight.w * u_jointMatrix[int(a_joint.w)];\\n\";\n }\n\n // Add position always\n var techniqueAttributes = {\n a_position: {\n semantic: \"POSITION\",\n },\n };\n\n if (hasOutline) {\n techniqueAttributes.a_outlineCoordinates = {\n semantic: \"_OUTLINE_COORDINATES\",\n };\n }\n\n vertexShader += \"attribute vec3 a_position;\\n\";\n if (hasNormals) {\n vertexShader += \"varying vec3 v_positionEC;\\n\";\n }\n if (hasOutline) {\n vertexShader += \"attribute vec3 a_outlineCoordinates;\\n\";\n vertexShader += \"varying vec3 v_outlineCoordinates;\\n\";\n }\n\n // Morph Target Weighting\n vertexShaderMain += \" vec3 weightedPosition = a_position;\\n\";\n if (hasNormals) {\n vertexShaderMain += \" vec3 weightedNormal = a_normal;\\n\";\n }\n if (hasTangents) {\n vertexShaderMain += \" vec4 weightedTangent = a_tangent;\\n\";\n }\n if (hasMorphTargets) {\n for (var k = 0; k < morphTargets.length; k++) {\n var targetAttributes = morphTargets[k];\n for (var targetAttribute in targetAttributes) {\n if (\n targetAttributes.hasOwnProperty(targetAttribute) &&\n targetAttribute !== \"extras\"\n ) {\n var attributeName = \"a_\" + targetAttribute + \"_\" + k;\n techniqueAttributes[attributeName] = {\n semantic: targetAttribute + \"_\" + k,\n };\n vertexShader += \"attribute vec3 \" + attributeName + \";\\n\";\n if (targetAttribute === \"POSITION\") {\n vertexShaderMain +=\n \" weightedPosition += u_morphWeights[\" +\n k +\n \"] * \" +\n attributeName +\n \";\\n\";\n } else if (targetAttribute === \"NORMAL\") {\n vertexShaderMain +=\n \" weightedNormal += u_morphWeights[\" +\n k +\n \"] * \" +\n attributeName +\n \";\\n\";\n } else if (hasTangents && targetAttribute === \"TANGENT\") {\n vertexShaderMain +=\n \" weightedTangent.xyz += u_morphWeights[\" +\n k +\n \"] * \" +\n attributeName +\n \";\\n\";\n }\n }\n }\n }\n }\n\n // Final position computation\n if (hasSkinning) {\n vertexShaderMain +=\n \" vec4 position = skinMatrix * vec4(weightedPosition, 1.0);\\n\";\n } else {\n vertexShaderMain += \" vec4 position = vec4(weightedPosition, 1.0);\\n\";\n }\n vertexShaderMain += \" position = u_modelViewMatrix * position;\\n\";\n if (hasNormals) {\n vertexShaderMain += \" v_positionEC = position.xyz;\\n\";\n }\n vertexShaderMain += \" gl_Position = u_projectionMatrix * position;\\n\";\n\n if (hasOutline) {\n vertexShaderMain += \" v_outlineCoordinates = a_outlineCoordinates;\\n\";\n }\n\n // Final normal computation\n if (hasNormals) {\n techniqueAttributes.a_normal = {\n semantic: \"NORMAL\",\n };\n vertexShader += \"attribute vec3 a_normal;\\n\";\n vertexShader += \"varying vec3 v_normal;\\n\";\n if (hasSkinning) {\n vertexShaderMain +=\n \" v_normal = u_normalMatrix * mat3(skinMatrix) * weightedNormal;\\n\";\n } else {\n vertexShaderMain += \" v_normal = u_normalMatrix * weightedNormal;\\n\";\n }\n\n fragmentShader += \"varying vec3 v_normal;\\n\";\n fragmentShader += \"varying vec3 v_positionEC;\\n\";\n }\n\n // Read tangents if available\n if (hasTangents) {\n techniqueAttributes.a_tangent = {\n semantic: \"TANGENT\",\n };\n vertexShader += \"attribute vec4 a_tangent;\\n\";\n vertexShader += \"varying vec4 v_tangent;\\n\";\n vertexShaderMain +=\n \" v_tangent.xyz = u_normalMatrix * weightedTangent.xyz;\\n\";\n vertexShaderMain += \" v_tangent.w = weightedTangent.w;\\n\";\n\n fragmentShader += \"varying vec4 v_tangent;\\n\";\n }\n\n if (hasOutline) {\n fragmentShader += \"varying vec3 v_outlineCoordinates;\\n\";\n }\n\n var fragmentShaderMain = \"\";\n\n // Add texture coordinates if the material uses them\n var v_texCoord;\n var normalTexCoord;\n var baseColorTexCoord;\n var specularGlossinessTexCoord;\n var diffuseTexCoord;\n var metallicRoughnessTexCoord;\n var occlusionTexCoord;\n var emissiveTexCoord;\n\n if (hasTexCoords) {\n techniqueAttributes.a_texcoord_0 = {\n semantic: \"TEXCOORD_0\",\n };\n\n v_texCoord = \"v_texcoord_0\";\n vertexShader += \"attribute vec2 a_texcoord_0;\\n\";\n vertexShader += \"varying vec2 \" + v_texCoord + \";\\n\";\n vertexShaderMain += \" \" + v_texCoord + \" = a_texcoord_0;\\n\";\n\n fragmentShader += \"varying vec2 \" + v_texCoord + \";\\n\";\n\n var result = {\n fragmentShaderMain: fragmentShaderMain,\n };\n normalTexCoord = addTextureCoordinates(\n gltf,\n \"u_normalTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n baseColorTexCoord = addTextureCoordinates(\n gltf,\n \"u_baseColorTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n specularGlossinessTexCoord = addTextureCoordinates(\n gltf,\n \"u_specularGlossinessTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n diffuseTexCoord = addTextureCoordinates(\n gltf,\n \"u_diffuseTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n metallicRoughnessTexCoord = addTextureCoordinates(\n gltf,\n \"u_metallicRoughnessTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n occlusionTexCoord = addTextureCoordinates(\n gltf,\n \"u_occlusionTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n emissiveTexCoord = addTextureCoordinates(\n gltf,\n \"u_emmissiveTexture\",\n generatedMaterialValues,\n v_texCoord,\n result\n );\n\n fragmentShaderMain = result.fragmentShaderMain;\n }\n\n // Add skinning information if available\n if (hasSkinning) {\n techniqueAttributes.a_joint = {\n semantic: \"JOINTS_0\",\n };\n techniqueAttributes.a_weight = {\n semantic: \"WEIGHTS_0\",\n };\n\n vertexShader += \"attribute vec4 a_joint;\\n\";\n vertexShader += \"attribute vec4 a_weight;\\n\";\n }\n\n if (hasVertexColors) {\n techniqueAttributes.a_vertexColor = {\n semantic: \"COLOR_0\",\n };\n vertexShader += \"attribute vec4 a_vertexColor;\\n\";\n vertexShader += \"varying vec4 v_vertexColor;\\n\";\n vertexShaderMain += \" v_vertexColor = a_vertexColor;\\n\";\n fragmentShader += \"varying vec4 v_vertexColor;\\n\";\n }\n\n if (addBatchIdToGeneratedShaders) {\n techniqueAttributes.a_batchId = {\n semantic: \"_BATCHID\",\n };\n vertexShader += \"attribute float a_batchId;\\n\";\n }\n\n vertexShader += \"void main(void) \\n{\\n\";\n vertexShader += vertexShaderMain;\n vertexShader += \"}\\n\";\n\n // Fragment shader lighting\n if (hasNormals) {\n fragmentShader += \"const float M_PI = 3.141592653589793;\\n\";\n\n fragmentShader +=\n \"vec3 lambertianDiffuse(vec3 diffuseColor) \\n\" +\n \"{\\n\" +\n \" return diffuseColor / M_PI;\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH) \\n\" +\n \"{\\n\" +\n \" return f0 + (f90 - f0) * pow(clamp(1.0 - VdotH, 0.0, 1.0), 5.0);\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec3 fresnelSchlick(float metalness, float VdotH) \\n\" +\n \"{\\n\" +\n \" return metalness + (vec3(1.0) - metalness) * pow(1.0 - VdotH, 5.0);\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"float smithVisibilityG1(float NdotV, float roughness) \\n\" +\n \"{\\n\" +\n \" float k = (roughness + 1.0) * (roughness + 1.0) / 8.0;\\n\" +\n \" return NdotV / (NdotV * (1.0 - k) + k);\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"float smithVisibilityGGX(float roughness, float NdotL, float NdotV) \\n\" +\n \"{\\n\" +\n \" return smithVisibilityG1(NdotL, roughness) * smithVisibilityG1(NdotV, roughness);\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"float GGX(float roughness, float NdotH) \\n\" +\n \"{\\n\" +\n \" float roughnessSquared = roughness * roughness;\\n\" +\n \" float f = (NdotH * roughnessSquared - NdotH) * NdotH + 1.0;\\n\" +\n \" return roughnessSquared / (M_PI * f * f);\\n\" +\n \"}\\n\\n\";\n }\n\n fragmentShader +=\n \"vec3 SRGBtoLINEAR3(vec3 srgbIn) \\n\" +\n \"{\\n\" +\n \" return pow(srgbIn, vec3(2.2));\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec4 SRGBtoLINEAR4(vec4 srgbIn) \\n\" +\n \"{\\n\" +\n \" vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));\\n\" +\n \" return vec4(linearOut, srgbIn.a);\\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec3 applyTonemapping(vec3 linearIn) \\n\" +\n \"{\\n\" +\n \"#ifndef HDR \\n\" +\n \" return czm_acesTonemapping(linearIn);\\n\" +\n \"#else \\n\" +\n \" return linearIn;\\n\" +\n \"#endif \\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec3 LINEARtoSRGB(vec3 linearIn) \\n\" +\n \"{\\n\" +\n \"#ifndef HDR \\n\" +\n \" return pow(linearIn, vec3(1.0/2.2));\\n\" +\n \"#else \\n\" +\n \" return linearIn;\\n\" +\n \"#endif \\n\" +\n \"}\\n\\n\";\n\n fragmentShader +=\n \"vec2 computeTexCoord(vec2 texCoords, vec2 offset, float rotation, vec2 scale) \\n\" +\n \"{\\n\" +\n \" rotation = -rotation; \\n\" +\n \" mat3 transform = mat3(\\n\" +\n \" cos(rotation) * scale.x, sin(rotation) * scale.x, 0.0, \\n\" +\n \" -sin(rotation) * scale.y, cos(rotation) * scale.y, 0.0, \\n\" +\n \" offset.x, offset.y, 1.0); \\n\" +\n \" vec2 transformedTexCoords = (transform * vec3(fract(texCoords), 1.0)).xy; \\n\" +\n \" return transformedTexCoords; \\n\" +\n \"}\\n\\n\";\n\n fragmentShader += \"#ifdef USE_IBL_LIGHTING \\n\";\n fragmentShader += \"uniform vec2 gltf_iblFactor; \\n\";\n fragmentShader += \"#endif \\n\";\n fragmentShader += \"#ifdef USE_CUSTOM_LIGHT_COLOR \\n\";\n fragmentShader += \"uniform vec3 gltf_lightColor; \\n\";\n fragmentShader += \"#endif \\n\";\n\n fragmentShader += \"void main(void) \\n{\\n\";\n fragmentShader += fragmentShaderMain;\n\n // Add normal mapping to fragment shader\n if (hasNormals) {\n fragmentShader += \" vec3 ng = normalize(v_normal);\\n\";\n fragmentShader +=\n \" vec3 positionWC = vec3(czm_inverseView * vec4(v_positionEC, 1.0));\\n\";\n if (defined(generatedMaterialValues.u_normalTexture)) {\n if (hasTangents) {\n // Read tangents from varying\n fragmentShader += \" vec3 t = normalize(v_tangent.xyz);\\n\";\n fragmentShader +=\n \" vec3 b = normalize(cross(ng, t) * v_tangent.w);\\n\";\n fragmentShader += \" mat3 tbn = mat3(t, b, ng);\\n\";\n fragmentShader +=\n \" vec3 n = texture2D(u_normalTexture, \" +\n normalTexCoord +\n \").rgb;\\n\";\n fragmentShader += \" n = normalize(tbn * (2.0 * n - 1.0));\\n\";\n } else {\n // Add standard derivatives extension\n fragmentShader =\n \"#ifdef GL_OES_standard_derivatives\\n\" +\n \"#extension GL_OES_standard_derivatives : enable\\n\" +\n \"#endif\\n\" +\n fragmentShader;\n // Compute tangents\n fragmentShader += \"#ifdef GL_OES_standard_derivatives\\n\";\n fragmentShader += \" vec3 pos_dx = dFdx(v_positionEC);\\n\";\n fragmentShader += \" vec3 pos_dy = dFdy(v_positionEC);\\n\";\n fragmentShader +=\n \" vec3 tex_dx = dFdx(vec3(\" + normalTexCoord + \",0.0));\\n\";\n fragmentShader +=\n \" vec3 tex_dy = dFdy(vec3(\" + normalTexCoord + \",0.0));\\n\";\n fragmentShader +=\n \" vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\\n\";\n fragmentShader += \" t = normalize(t - ng * dot(ng, t));\\n\";\n fragmentShader += \" vec3 b = normalize(cross(ng, t));\\n\";\n fragmentShader += \" mat3 tbn = mat3(t, b, ng);\\n\";\n fragmentShader +=\n \" vec3 n = texture2D(u_normalTexture, \" +\n normalTexCoord +\n \").rgb;\\n\";\n fragmentShader += \" n = normalize(tbn * (2.0 * n - 1.0));\\n\";\n fragmentShader += \"#else\\n\";\n fragmentShader += \" vec3 n = ng;\\n\";\n fragmentShader += \"#endif\\n\";\n }\n } else {\n fragmentShader += \" vec3 n = ng;\\n\";\n }\n if (material.doubleSided) {\n fragmentShader += \" if (czm_backFacing())\\n\";\n fragmentShader += \" {\\n\";\n fragmentShader += \" n = -n;\\n\";\n fragmentShader += \" }\\n\";\n }\n }\n\n // Add base color to fragment shader\n if (defined(generatedMaterialValues.u_baseColorTexture)) {\n fragmentShader +=\n \" vec4 baseColorWithAlpha = SRGBtoLINEAR4(texture2D(u_baseColorTexture, \" +\n baseColorTexCoord +\n \"));\\n\";\n if (defined(generatedMaterialValues.u_baseColorFactor)) {\n fragmentShader += \" baseColorWithAlpha *= u_baseColorFactor;\\n\";\n }\n } else if (defined(generatedMaterialValues.u_baseColorFactor)) {\n fragmentShader += \" vec4 baseColorWithAlpha = u_baseColorFactor;\\n\";\n } else {\n fragmentShader += \" vec4 baseColorWithAlpha = vec4(1.0);\\n\";\n }\n\n if (hasVertexColors) {\n fragmentShader += \" baseColorWithAlpha *= v_vertexColor;\\n\";\n }\n\n fragmentShader += \" vec3 baseColor = baseColorWithAlpha.rgb;\\n\";\n\n if (hasNormals) {\n if (useSpecGloss) {\n if (defined(generatedMaterialValues.u_specularGlossinessTexture)) {\n fragmentShader +=\n \" vec4 specularGlossiness = SRGBtoLINEAR4(texture2D(u_specularGlossinessTexture, \" +\n specularGlossinessTexCoord +\n \"));\\n\";\n fragmentShader += \" vec3 specular = specularGlossiness.rgb;\\n\";\n fragmentShader += \" float glossiness = specularGlossiness.a;\\n\";\n if (defined(generatedMaterialValues.u_specularFactor)) {\n fragmentShader += \" specular *= u_specularFactor;\\n\";\n }\n if (defined(generatedMaterialValues.u_glossinessFactor)) {\n fragmentShader += \" glossiness *= u_glossinessFactor;\\n\";\n }\n } else {\n if (defined(generatedMaterialValues.u_specularFactor)) {\n fragmentShader +=\n \" vec3 specular = clamp(u_specularFactor, vec3(0.0), vec3(1.0));\\n\";\n } else {\n fragmentShader += \" vec3 specular = vec3(1.0);\\n\";\n }\n if (defined(generatedMaterialValues.u_glossinessFactor)) {\n fragmentShader +=\n \" float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);\\n\";\n } else {\n fragmentShader += \" float glossiness = 1.0;\\n\";\n }\n }\n if (defined(generatedMaterialValues.u_diffuseTexture)) {\n fragmentShader +=\n \" vec4 diffuse = SRGBtoLINEAR4(texture2D(u_diffuseTexture, \" +\n diffuseTexCoord +\n \"));\\n\";\n if (defined(generatedMaterialValues.u_diffuseFactor)) {\n fragmentShader += \" diffuse *= u_diffuseFactor;\\n\";\n }\n } else if (defined(generatedMaterialValues.u_diffuseFactor)) {\n fragmentShader +=\n \" vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));\\n\";\n } else {\n fragmentShader += \" vec4 diffuse = vec4(1.0);\\n\";\n }\n } else if (defined(generatedMaterialValues.u_metallicRoughnessTexture)) {\n fragmentShader +=\n \" vec3 metallicRoughness = texture2D(u_metallicRoughnessTexture, \" +\n metallicRoughnessTexCoord +\n \").rgb;\\n\";\n fragmentShader +=\n \" float metalness = clamp(metallicRoughness.b, 0.0, 1.0);\\n\";\n fragmentShader +=\n \" float roughness = clamp(metallicRoughness.g, 0.04, 1.0);\\n\";\n if (defined(generatedMaterialValues.u_metallicFactor)) {\n fragmentShader += \" metalness *= u_metallicFactor;\\n\";\n }\n if (defined(generatedMaterialValues.u_roughnessFactor)) {\n fragmentShader += \" roughness *= u_roughnessFactor;\\n\";\n }\n } else {\n if (defined(generatedMaterialValues.u_metallicFactor)) {\n fragmentShader +=\n \" float metalness = clamp(u_metallicFactor, 0.0, 1.0);\\n\";\n } else {\n fragmentShader += \" float metalness = 1.0;\\n\";\n }\n if (defined(generatedMaterialValues.u_roughnessFactor)) {\n fragmentShader +=\n \" float roughness = clamp(u_roughnessFactor, 0.04, 1.0);\\n\";\n } else {\n fragmentShader += \" float roughness = 1.0;\\n\";\n }\n }\n\n fragmentShader += \" vec3 v = -normalize(v_positionEC);\\n\";\n\n // Generate fragment shader's lighting block\n fragmentShader += \"#ifndef USE_CUSTOM_LIGHT_COLOR \\n\";\n fragmentShader += \" vec3 lightColorHdr = czm_lightColorHdr;\\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader += \" vec3 lightColorHdr = gltf_lightColor;\\n\";\n fragmentShader += \"#endif \\n\";\n fragmentShader += \" vec3 l = normalize(czm_lightDirectionEC);\\n\";\n fragmentShader += \" vec3 h = normalize(v + l);\\n\";\n fragmentShader += \" float NdotL = clamp(dot(n, l), 0.001, 1.0);\\n\";\n fragmentShader += \" float NdotV = abs(dot(n, v)) + 0.001;\\n\";\n fragmentShader += \" float NdotH = clamp(dot(n, h), 0.0, 1.0);\\n\";\n fragmentShader += \" float LdotH = clamp(dot(l, h), 0.0, 1.0);\\n\";\n fragmentShader += \" float VdotH = clamp(dot(v, h), 0.0, 1.0);\\n\";\n fragmentShader += \" vec3 f0 = vec3(0.04);\\n\";\n // Whether the material uses metallic-roughness or specular-glossiness changes how the BRDF inputs are computed.\n // It does not change the implementation of the BRDF itself.\n if (useSpecGloss) {\n fragmentShader += \" float roughness = 1.0 - glossiness;\\n\";\n fragmentShader +=\n \" vec3 diffuseColor = diffuse.rgb * (1.0 - max(max(specular.r, specular.g), specular.b));\\n\";\n fragmentShader += \" vec3 specularColor = specular;\\n\";\n } else {\n fragmentShader +=\n \" vec3 diffuseColor = baseColor * (1.0 - metalness) * (1.0 - f0);\\n\";\n fragmentShader +=\n \" vec3 specularColor = mix(f0, baseColor, metalness);\\n\";\n }\n\n fragmentShader += \" float alpha = roughness * roughness;\\n\";\n fragmentShader +=\n \" float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\\n\";\n fragmentShader +=\n \" vec3 r90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));\\n\";\n fragmentShader += \" vec3 r0 = specularColor.rgb;\\n\";\n\n fragmentShader += \" vec3 F = fresnelSchlick2(r0, r90, VdotH);\\n\";\n fragmentShader +=\n \" float G = smithVisibilityGGX(alpha, NdotL, NdotV);\\n\";\n fragmentShader += \" float D = GGX(alpha, NdotH);\\n\";\n\n fragmentShader +=\n \" vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor);\\n\";\n fragmentShader +=\n \" vec3 specularContribution = F * G * D / (4.0 * NdotL * NdotV);\\n\";\n fragmentShader +=\n \" vec3 color = NdotL * lightColorHdr * (diffuseContribution + specularContribution);\\n\";\n\n // Use the procedural IBL if there are no environment maps\n fragmentShader +=\n \"#if defined(USE_IBL_LIGHTING) && !defined(DIFFUSE_IBL) && !defined(SPECULAR_IBL) \\n\";\n\n fragmentShader +=\n \" vec3 r = normalize(czm_inverseViewRotation * normalize(reflect(v, n)));\\n\";\n // Figure out if the reflection vector hits the ellipsoid\n fragmentShader += \" float vertexRadius = length(positionWC);\\n\";\n fragmentShader +=\n \" float horizonDotNadir = 1.0 - min(1.0, czm_ellipsoidRadii.x / vertexRadius);\\n\";\n fragmentShader +=\n \" float reflectionDotNadir = dot(r, normalize(positionWC));\\n\";\n // Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z.\n fragmentShader += \" r.x = -r.x;\\n\";\n fragmentShader += \" r = -normalize(czm_temeToPseudoFixed * r);\\n\";\n fragmentShader += \" r.x = -r.x;\\n\";\n\n fragmentShader += \" float inverseRoughness = 1.04 - roughness;\\n\";\n fragmentShader += \" inverseRoughness *= inverseRoughness;\\n\";\n fragmentShader +=\n \" vec3 sceneSkyBox = textureCube(czm_environmentMap, r).rgb * inverseRoughness;\\n\";\n\n fragmentShader += \" float atmosphereHeight = 0.05;\\n\";\n fragmentShader +=\n \" float blendRegionSize = 0.1 * ((1.0 - inverseRoughness) * 8.0 + 1.1 - horizonDotNadir);\\n\";\n fragmentShader += \" float blendRegionOffset = roughness * -1.0;\\n\";\n fragmentShader +=\n \" float farAboveHorizon = clamp(horizonDotNadir - blendRegionSize * 0.5 + blendRegionOffset, 1.0e-10 - blendRegionSize, 0.99999);\\n\";\n fragmentShader +=\n \" float aroundHorizon = clamp(horizonDotNadir + blendRegionSize * 0.5, 1.0e-10 - blendRegionSize, 0.99999);\\n\";\n fragmentShader +=\n \" float farBelowHorizon = clamp(horizonDotNadir + blendRegionSize * 1.5, 1.0e-10 - blendRegionSize, 0.99999);\\n\";\n fragmentShader +=\n \" float smoothstepHeight = smoothstep(0.0, atmosphereHeight, horizonDotNadir);\\n\";\n\n fragmentShader +=\n \" vec3 belowHorizonColor = mix(vec3(0.1, 0.15, 0.25), vec3(0.4, 0.7, 0.9), smoothstepHeight);\\n\";\n fragmentShader += \" vec3 nadirColor = belowHorizonColor * 0.5;\\n\";\n fragmentShader +=\n \" vec3 aboveHorizonColor = mix(vec3(0.9, 1.0, 1.2), belowHorizonColor, roughness * 0.5);\\n\";\n fragmentShader +=\n \" vec3 blueSkyColor = mix(vec3(0.18, 0.26, 0.48), aboveHorizonColor, reflectionDotNadir * inverseRoughness * 0.5 + 0.75);\\n\";\n fragmentShader +=\n \" vec3 zenithColor = mix(blueSkyColor, sceneSkyBox, smoothstepHeight);\\n\";\n\n fragmentShader += \" vec3 blueSkyDiffuseColor = vec3(0.7, 0.85, 0.9);\\n\";\n fragmentShader +=\n \" float diffuseIrradianceFromEarth = (1.0 - horizonDotNadir) * (reflectionDotNadir * 0.25 + 0.75) * smoothstepHeight;\\n\";\n fragmentShader +=\n \" float diffuseIrradianceFromSky = (1.0 - smoothstepHeight) * (1.0 - (reflectionDotNadir * 0.25 + 0.25));\\n\";\n fragmentShader +=\n \" vec3 diffuseIrradiance = blueSkyDiffuseColor * clamp(diffuseIrradianceFromEarth + diffuseIrradianceFromSky, 0.0, 1.0);\\n\";\n\n fragmentShader +=\n \" float notDistantRough = (1.0 - horizonDotNadir * roughness * 0.8);\\n\";\n fragmentShader +=\n \" vec3 specularIrradiance = mix(zenithColor, aboveHorizonColor, smoothstep(farAboveHorizon, aroundHorizon, reflectionDotNadir) * notDistantRough);\\n\";\n fragmentShader +=\n \" specularIrradiance = mix(specularIrradiance, belowHorizonColor, smoothstep(aroundHorizon, farBelowHorizon, reflectionDotNadir) * inverseRoughness);\\n\";\n fragmentShader +=\n \" specularIrradiance = mix(specularIrradiance, nadirColor, smoothstep(farBelowHorizon, 1.0, reflectionDotNadir) * inverseRoughness);\\n\";\n\n // Luminance model from page 40 of http://silviojemma.com/public/papers/lighting/spherical-harmonic-lighting.pdf\n fragmentShader += \"#ifdef USE_SUN_LUMINANCE \\n\";\n // Angle between sun and zenith\n fragmentShader +=\n \" float LdotZenith = clamp(dot(normalize(czm_inverseViewRotation * l), normalize(positionWC * -1.0)), 0.001, 1.0);\\n\";\n fragmentShader += \" float S = acos(LdotZenith);\\n\";\n // Angle between zenith and current pixel\n fragmentShader +=\n \" float NdotZenith = clamp(dot(normalize(czm_inverseViewRotation * n), normalize(positionWC * -1.0)), 0.001, 1.0);\\n\";\n // Angle between sun and current pixel\n fragmentShader += \" float gamma = acos(NdotL);\\n\";\n fragmentShader +=\n \" float numerator = ((0.91 + 10.0 * exp(-3.0 * gamma) + 0.45 * pow(NdotL, 2.0)) * (1.0 - exp(-0.32 / NdotZenith)));\\n\";\n fragmentShader +=\n \" float denominator = (0.91 + 10.0 * exp(-3.0 * S) + 0.45 * pow(LdotZenith,2.0)) * (1.0 - exp(-0.32));\\n\";\n fragmentShader +=\n \" float luminance = gltf_luminanceAtZenith * (numerator / denominator);\\n\";\n fragmentShader += \"#endif \\n\";\n\n fragmentShader +=\n \" vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, roughness)).rg;\\n\";\n fragmentShader +=\n \" vec3 IBLColor = (diffuseIrradiance * diffuseColor * gltf_iblFactor.x) + (specularIrradiance * SRGBtoLINEAR3(specularColor * brdfLut.x + brdfLut.y) * gltf_iblFactor.y);\\n\";\n\n fragmentShader +=\n \" float maximumComponent = max(max(lightColorHdr.x, lightColorHdr.y), lightColorHdr.z);\\n\";\n fragmentShader +=\n \" vec3 lightColor = lightColorHdr / max(maximumComponent, 1.0);\\n\";\n fragmentShader += \" IBLColor *= lightColor;\\n\";\n\n fragmentShader += \"#ifdef USE_SUN_LUMINANCE \\n\";\n fragmentShader += \" color += IBLColor * luminance;\\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader += \" color += IBLColor; \\n\";\n fragmentShader += \"#endif \\n\";\n\n // Environment maps were provided, use them for IBL\n fragmentShader += \"#elif defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) \\n\";\n\n fragmentShader +=\n \" mat3 fixedToENU = mat3(gltf_clippingPlanesMatrix[0][0], gltf_clippingPlanesMatrix[1][0], gltf_clippingPlanesMatrix[2][0], \\n\";\n fragmentShader +=\n \" gltf_clippingPlanesMatrix[0][1], gltf_clippingPlanesMatrix[1][1], gltf_clippingPlanesMatrix[2][1], \\n\";\n fragmentShader +=\n \" gltf_clippingPlanesMatrix[0][2], gltf_clippingPlanesMatrix[1][2], gltf_clippingPlanesMatrix[2][2]); \\n\";\n fragmentShader +=\n \" const mat3 yUpToZUp = mat3(-1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0); \\n\";\n fragmentShader +=\n \" vec3 cubeDir = normalize(yUpToZUp * fixedToENU * normalize(reflect(-v, n))); \\n\";\n\n fragmentShader += \"#ifdef DIFFUSE_IBL \\n\";\n fragmentShader += \"#ifdef CUSTOM_SPHERICAL_HARMONICS \\n\";\n fragmentShader +=\n \" vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, gltf_sphericalHarmonicCoefficients); \\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader +=\n \" vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients); \\n\";\n fragmentShader += \"#endif \\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader += \" vec3 diffuseIrradiance = vec3(0.0); \\n\";\n fragmentShader += \"#endif \\n\";\n\n fragmentShader += \"#ifdef SPECULAR_IBL \\n\";\n fragmentShader +=\n \" vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, roughness)).rg;\\n\";\n fragmentShader += \"#ifdef CUSTOM_SPECULAR_IBL \\n\";\n fragmentShader +=\n \" vec3 specularIBL = czm_sampleOctahedralProjection(gltf_specularMap, gltf_specularMapSize, cubeDir, roughness * gltf_maxSpecularLOD, gltf_maxSpecularLOD);\\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader +=\n \" vec3 specularIBL = czm_sampleOctahedralProjection(czm_specularEnvironmentMaps, czm_specularEnvironmentMapSize, cubeDir, roughness * czm_specularEnvironmentMapsMaximumLOD, czm_specularEnvironmentMapsMaximumLOD);\\n\";\n fragmentShader += \"#endif \\n\";\n fragmentShader += \" specularIBL *= F * brdfLut.x + brdfLut.y;\\n\";\n fragmentShader += \"#else \\n\";\n fragmentShader += \" vec3 specularIBL = vec3(0.0); \\n\";\n fragmentShader += \"#endif \\n\";\n\n fragmentShader +=\n \" color += diffuseIrradiance * diffuseColor + specularColor * specularIBL;\\n\";\n\n fragmentShader += \"#endif \\n\";\n } else {\n fragmentShader += \" vec3 color = baseColor;\\n\";\n }\n\n // Ignore occlusion and emissive when unlit\n if (!isUnlit) {\n if (defined(generatedMaterialValues.u_occlusionTexture)) {\n fragmentShader +=\n \" color *= texture2D(u_occlusionTexture, \" +\n occlusionTexCoord +\n \").r;\\n\";\n }\n if (defined(generatedMaterialValues.u_emissiveTexture)) {\n fragmentShader +=\n \" vec3 emissive = SRGBtoLINEAR3(texture2D(u_emissiveTexture, \" +\n emissiveTexCoord +\n \").rgb);\\n\";\n if (defined(generatedMaterialValues.u_emissiveFactor)) {\n fragmentShader += \" emissive *= u_emissiveFactor;\\n\";\n }\n fragmentShader += \" color += emissive;\\n\";\n } else if (defined(generatedMaterialValues.u_emissiveFactor)) {\n fragmentShader += \" color += u_emissiveFactor;\\n\";\n }\n }\n\n if (!isUnlit) {\n fragmentShader += \" color = applyTonemapping(color);\\n\";\n }\n\n fragmentShader += \" color = LINEARtoSRGB(color);\\n\";\n\n if (hasOutline) {\n fragmentShader += \" float outlineness = max(\\n\";\n fragmentShader +=\n \" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r,\\n\";\n fragmentShader += \" max(\\n\";\n fragmentShader +=\n \" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r,\\n\";\n fragmentShader +=\n \" texture2D(u_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r));\\n\";\n fragmentShader +=\n \" color = mix(color, vec3(0.0, 0.0, 0.0), outlineness);\\n\";\n }\n\n if (defined(alphaMode)) {\n if (alphaMode === \"MASK\") {\n fragmentShader += \" if (baseColorWithAlpha.a < u_alphaCutoff) {\\n\";\n fragmentShader += \" discard;\\n\";\n fragmentShader += \" }\\n\";\n fragmentShader += \" gl_FragColor = vec4(color, 1.0);\\n\";\n } else if (alphaMode === \"BLEND\") {\n fragmentShader +=\n \" gl_FragColor = vec4(color, baseColorWithAlpha.a);\\n\";\n } else {\n fragmentShader += \" gl_FragColor = vec4(color, 1.0);\\n\";\n }\n } else {\n fragmentShader += \" gl_FragColor = vec4(color, 1.0);\\n\";\n }\n\n fragmentShader += \"}\\n\";\n\n // Add shaders\n var vertexShaderId = addToArray(shaders, {\n type: WebGLConstants.VERTEX_SHADER,\n extras: {\n _pipeline: {\n source: vertexShader,\n extension: \".glsl\",\n },\n },\n });\n\n var fragmentShaderId = addToArray(shaders, {\n type: WebGLConstants.FRAGMENT_SHADER,\n extras: {\n _pipeline: {\n source: fragmentShader,\n extension: \".glsl\",\n },\n },\n });\n\n // Add program\n var programId = addToArray(programs, {\n fragmentShader: fragmentShaderId,\n vertexShader: vertexShaderId,\n });\n\n var techniqueId = addToArray(techniques, {\n attributes: techniqueAttributes,\n program: programId,\n uniforms: techniqueUniforms,\n });\n\n return techniqueId;\n}\n\nfunction getPBRValueType(paramName) {\n if (paramName.indexOf(\"Offset\") !== -1) {\n return WebGLConstants.FLOAT_VEC2;\n } else if (paramName.indexOf(\"Rotation\") !== -1) {\n return WebGLConstants.FLOAT;\n } else if (paramName.indexOf(\"Scale\") !== -1) {\n return WebGLConstants.FLOAT_VEC2;\n } else if (paramName.indexOf(\"Texture\") !== -1) {\n return WebGLConstants.SAMPLER_2D;\n }\n\n switch (paramName) {\n case \"u_baseColorFactor\":\n return WebGLConstants.FLOAT_VEC4;\n case \"u_metallicFactor\":\n return WebGLConstants.FLOAT;\n case \"u_roughnessFactor\":\n return WebGLConstants.FLOAT;\n case \"u_emissiveFactor\":\n return WebGLConstants.FLOAT_VEC3;\n // Specular Glossiness Types\n case \"u_diffuseFactor\":\n return WebGLConstants.FLOAT_VEC4;\n case \"u_specularFactor\":\n return WebGLConstants.FLOAT_VEC3;\n case \"u_glossinessFactor\":\n return WebGLConstants.FLOAT;\n }\n}\nexport default processPbrMaterials;\n","/**\n * Describes a renderable batch of geometry.\n *\n * @alias Vector3DTileBatch\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {Number} options.offset The offset of the batch into the indices buffer.\n * @param {Number} options.count The number of indices in the batch.\n * @param {Color} options.color The color of the geometry in the batch.\n * @param {Number[]} options.batchIds An array where each element is the batch id of the geometry in the batch.\n *\n * @private\n */\nfunction Vector3DTileBatch(options) {\n /**\n * The offset of the batch into the indices buffer.\n * @type {Number}\n */\n this.offset = options.offset;\n /**\n * The number of indices in the batch.\n * @type {Number}\n */\n this.count = options.count;\n /**\n * The color of the geometry in the batch.\n * @type {Color}\n */\n this.color = options.color;\n /**\n * An array where each element is the batch id of the geometry in the batch.\n * @type {Number[]}\n */\n this.batchIds = options.batchIds;\n}\nexport default Vector3DTileBatch;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position;\\n\\\nattribute float a_batchId;\\n\\\n\\n\\\nuniform mat4 u_modifiedModelViewProjection;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0));\\n\\\n}\\n\\\n\";\n","// JavaScript Expression Parser (JSEP) 0.3.1\n// JSEP may be freely distributed under the MIT License\n// http://jsep.from.so/\n\nvar tmp = {};\n\n/*global module: true, exports: true, console: true */\n(function (root) {\n\t'use strict';\n\t// Node Types\n\t// ----------\n\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tvar COMPOUND = 'Compound',\n\t\tIDENTIFIER = 'Identifier',\n\t\tMEMBER_EXP = 'MemberExpression',\n\t\tLITERAL = 'Literal',\n\t\tTHIS_EXP = 'ThisExpression',\n\t\tCALL_EXP = 'CallExpression',\n\t\tUNARY_EXP = 'UnaryExpression',\n\t\tBINARY_EXP = 'BinaryExpression',\n\t\tLOGICAL_EXP = 'LogicalExpression',\n\t\tCONDITIONAL_EXP = 'ConditionalExpression',\n\t\tARRAY_EXP = 'ArrayExpression',\n\n\t\tPERIOD_CODE = 46, // '.'\n\t\tCOMMA_CODE = 44, // ','\n\t\tSQUOTE_CODE = 39, // single quote\n\t\tDQUOTE_CODE = 34, // double quotes\n\t\tOPAREN_CODE = 40, // (\n\t\tCPAREN_CODE = 41, // )\n\t\tOBRACK_CODE = 91, // [\n\t\tCBRACK_CODE = 93, // ]\n\t\tQUMARK_CODE = 63, // ?\n\t\tSEMCOL_CODE = 59, // ;\n\t\tCOLON_CODE = 58, // :\n\n\t\tthrowError = function(message, index) {\n\t\t\tvar error = new Error(message + ' at character ' + index);\n\t\t\terror.index = index;\n\t\t\terror.description = message;\n\t\t\tthrow error;\n\t\t},\n\n\t// Operations\n\t// ----------\n\n\t// Set `t` to `true` to save space (when minified, not gzipped)\n\t\tt = true,\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `true` (it really doesn't matter)\n\t\tunary_ops = {'-': t, '!': t, '~': t, '+': t},\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference:\n\t// see [Order of operations](http://en.wikipedia.org/wiki/Order_of_operations#Programming_language)\n\t\tbinary_ops = {\n\t\t\t'||': 1, '&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t\t'<<':8, '>>': 8, '>>>': 8,\n\t\t\t'+': 9, '-': 9,\n\t\t\t'*': 10, '/': 10, '%': 10\n\t\t},\n\t// Get return the longest key length of any object\n\t\tgetMaxKeyLen = function(obj) {\n\t\t\tvar max_len = 0, len;\n\t\t\tfor(var key in obj) {\n\t\t\t\tif((len = key.length) > max_len && obj.hasOwnProperty(key)) {\n\t\t\t\t\tmax_len = len;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn max_len;\n\t\t},\n\t\tmax_unop_len = getMaxKeyLen(unary_ops),\n\t\tmax_binop_len = getMaxKeyLen(binary_ops),\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\t\tliterals = {\n\t\t\t'true': true,\n\t\t\t'false': false,\n\t\t\t'null': null\n\t\t},\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\t\tthis_str = 'this',\n\t// Returns the precedence of a binary operator or `0` if it isn't a binary operator\n\t\tbinaryPrecedence = function(op_val) {\n\t\t\treturn binary_ops[op_val] || 0;\n\t\t},\n\t// Utility function (gets called from multiple places)\n\t// Also note that `a && b` and `a || b` are *logical* expressions, not binary expressions\n\t\tcreateBinaryExpression = function (operator, left, right) {\n\t\t\tvar type = (operator === '||' || operator === '&&') ? LOGICAL_EXP : BINARY_EXP;\n\t\t\treturn {\n\t\t\t\ttype: type,\n\t\t\t\toperator: operator,\n\t\t\t\tleft: left,\n\t\t\t\tright: right\n\t\t\t};\n\t\t},\n\t\t// `ch` is a character code in the next three functions\n\t\tisDecimalDigit = function(ch) {\n\t\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t\t},\n\t\tisIdentifierStart = function(ch) {\n\t\t\treturn (ch === 36) || (ch === 95) || // `$` and `_`\n\t\t\t\t\t(ch >= 65 && ch <= 90) || // A...Z\n\t\t\t\t\t(ch >= 97 && ch <= 122) || // a...z\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator\n\t\t},\n\t\tisIdentifierPart = function(ch) {\n\t\t\treturn (ch === 36) || (ch === 95) || // `$` and `_`\n\t\t\t\t\t(ch >= 65 && ch <= 90) || // A...Z\n\t\t\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t\t\t(ch >= 48 && ch <= 57) || // 0...9\n (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator\n\t\t},\n\n\t\t// Parsing\n\t\t// -------\n\t\t// `expr` is a string with the passed in expression\n\t\tjsep = function(expr) {\n\t\t\t// `index` stores the character number we are currently at while `length` is a constant\n\t\t\t// All of the gobbles below will modify `index` as we move along\n\t\t\tvar index = 0,\n\t\t\t\tcharAtFunc = expr.charAt,\n\t\t\t\tcharCodeAtFunc = expr.charCodeAt,\n\t\t\t\texprI = function(i) { return charAtFunc.call(expr, i); },\n\t\t\t\texprICode = function(i) { return charCodeAtFunc.call(expr, i); },\n\t\t\t\tlength = expr.length,\n\n\t\t\t\t// Push `index` up to the next non-space character\n\t\t\t\tgobbleSpaces = function() {\n\t\t\t\t\tvar ch = exprICode(index);\n\t\t\t\t\t// space or tab\n\t\t\t\t\twhile(ch === 32 || ch === 9) {\n\t\t\t\t\t\tch = exprICode(++index);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// The main parsing function. Much of this code is dedicated to ternary expressions\n\t\t\t\tgobbleExpression = function() {\n\t\t\t\t\tvar test = gobbleBinaryExpression(),\n\t\t\t\t\t\tconsequent, alternate;\n\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\tif(exprICode(index) === QUMARK_CODE) {\n\t\t\t\t\t\t// Ternary expression: test ? consequent : alternate\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tconsequent = gobbleExpression();\n\t\t\t\t\t\tif(!consequent) {\n\t\t\t\t\t\t\tthrowError('Expected expression', index);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\t\tif(exprICode(index) === COLON_CODE) {\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\talternate = gobbleExpression();\n\t\t\t\t\t\t\tif(!alternate) {\n\t\t\t\t\t\t\t\tthrowError('Expected expression', index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\t\t\ttest: test,\n\t\t\t\t\t\t\t\tconsequent: consequent,\n\t\t\t\t\t\t\t\talternate: alternate\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrowError('Expected :', index);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn test;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Search for the operation portion of the string (e.g. `+`, `===`)\n\t\t\t\t// Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t\t\t\t// and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t\t\t\t// then, return that binary operation\n\t\t\t\tgobbleBinaryOp = function() {\n\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\tvar biop, to_check = expr.substr(index, max_binop_len), tc_len = to_check.length;\n\t\t\t\t\twhile(tc_len > 0) {\n\t\t\t\t\t\tif(binary_ops.hasOwnProperty(to_check)) {\n\t\t\t\t\t\t\tindex += tc_len;\n\t\t\t\t\t\t\treturn to_check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\n\t\t\t\t// This function is responsible for gobbling an individual expression,\n\t\t\t\t// e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t\t\t\tgobbleBinaryExpression = function() {\n\t\t\t\t\tvar ch_i, node, biop, prec, stack, biop_info, left, right, i;\n\n\t\t\t\t\t// First, try to get the leftmost thing\n\t\t\t\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t\t\t\tleft = gobbleToken();\n\t\t\t\t\tbiop = gobbleBinaryOp();\n\n\t\t\t\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\t\t\t\tif(!biop) {\n\t\t\t\t\t\treturn left;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t\t\t\t// precedence structure\n\t\t\t\t\tbiop_info = { value: biop, prec: binaryPrecedence(biop)};\n\n\t\t\t\t\tright = gobbleToken();\n\t\t\t\t\tif(!right) {\n\t\t\t\t\t\tthrowError(\"Expected expression after \" + biop, index);\n\t\t\t\t\t}\n\t\t\t\t\tstack = [left, biop_info, right];\n\n\t\t\t\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\t\t\t\twhile((biop = gobbleBinaryOp())) {\n\t\t\t\t\t\tprec = binaryPrecedence(biop);\n\n\t\t\t\t\t\tif(prec === 0) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbiop_info = { value: biop, prec: prec };\n\n\t\t\t\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\t\t\t\twhile ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n\t\t\t\t\t\t\tright = stack.pop();\n\t\t\t\t\t\t\tbiop = stack.pop().value;\n\t\t\t\t\t\t\tleft = stack.pop();\n\t\t\t\t\t\t\tnode = createBinaryExpression(biop, left, right);\n\t\t\t\t\t\t\tstack.push(node);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnode = gobbleToken();\n\t\t\t\t\t\tif(!node) {\n\t\t\t\t\t\t\tthrowError(\"Expected expression after \" + biop, index);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(biop_info, node);\n\t\t\t\t\t}\n\n\t\t\t\t\ti = stack.length - 1;\n\t\t\t\t\tnode = stack[i];\n\t\t\t\t\twhile(i > 1) {\n\t\t\t\t\t\tnode = createBinaryExpression(stack[i - 1].value, stack[i - 2], node);\n\t\t\t\t\t\ti -= 2;\n\t\t\t\t\t}\n\t\t\t\t\treturn node;\n\t\t\t\t},\n\n\t\t\t\t// An individual part of a binary expression:\n\t\t\t\t// e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t\t\t\tgobbleToken = function() {\n\t\t\t\t\tvar ch, to_check, tc_len;\n\n\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\tch = exprICode(index);\n\n\t\t\t\t\tif(isDecimalDigit(ch) || ch === PERIOD_CODE) {\n\t\t\t\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\t\t\t\treturn gobbleNumericLiteral();\n\t\t\t\t\t} else if(ch === SQUOTE_CODE || ch === DQUOTE_CODE) {\n\t\t\t\t\t\t// Single or double quotes\n\t\t\t\t\t\treturn gobbleStringLiteral();\n\t\t\t\t\t} else if(isIdentifierStart(ch) || ch === OPAREN_CODE) { // open parenthesis\n\t\t\t\t\t\t// `foo`, `bar.baz`\n\t\t\t\t\t\treturn gobbleVariable();\n\t\t\t\t\t} else if (ch === OBRACK_CODE) {\n\t\t\t\t\t\treturn gobbleArray();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tto_check = expr.substr(index, max_unop_len);\n\t\t\t\t\t\ttc_len = to_check.length;\n\t\t\t\t\t\twhile(tc_len > 0) {\n\t\t\t\t\t\t\tif(unary_ops.hasOwnProperty(to_check)) {\n\t\t\t\t\t\t\t\tindex += tc_len;\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: UNARY_EXP,\n\t\t\t\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\t\t\t\targument: gobbleToken(),\n\t\t\t\t\t\t\t\t\tprefix: true\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t\t\t\t// keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t\t\t\tgobbleNumericLiteral = function() {\n\t\t\t\t\tvar number = '', ch, chCode;\n\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) {\n\t\t\t\t\t\tnumber += exprI(index++);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(exprICode(index) === PERIOD_CODE) { // can start with a decimal marker\n\t\t\t\t\t\tnumber += exprI(index++);\n\n\t\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) {\n\t\t\t\t\t\t\tnumber += exprI(index++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tch = exprI(index);\n\t\t\t\t\tif(ch === 'e' || ch === 'E') { // exponent marker\n\t\t\t\t\t\tnumber += exprI(index++);\n\t\t\t\t\t\tch = exprI(index);\n\t\t\t\t\t\tif(ch === '+' || ch === '-') { // exponent sign\n\t\t\t\t\t\t\tnumber += exprI(index++);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile(isDecimalDigit(exprICode(index))) { //exponent itself\n\t\t\t\t\t\t\tnumber += exprI(index++);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!isDecimalDigit(exprICode(index-1)) ) {\n\t\t\t\t\t\t\tthrowError('Expected exponent (' + number + exprI(index) + ')', index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\n\t\t\t\t\tchCode = exprICode(index);\n\t\t\t\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\t\t\t\tif(isIdentifierStart(chCode)) {\n\t\t\t\t\t\tthrowError('Variable names cannot start with a number (' +\n\t\t\t\t\t\t\t\t\tnumber + exprI(index) + ')', index);\n\t\t\t\t\t} else if(chCode === PERIOD_CODE) {\n\t\t\t\t\t\tthrowError('Unexpected period', index);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: LITERAL,\n\t\t\t\t\t\tvalue: parseFloat(number),\n\t\t\t\t\t\traw: number\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t// Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t\t\t\t// e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t\t\t\tgobbleStringLiteral = function() {\n\t\t\t\t\tvar str = '', quote = exprI(index++), closed = false, ch;\n\n\t\t\t\t\twhile(index < length) {\n\t\t\t\t\t\tch = exprI(index++);\n\t\t\t\t\t\tif(ch === quote) {\n\t\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if(ch === '\\\\') {\n\t\t\t\t\t\t\t// Check for all of the common escape codes\n\t\t\t\t\t\t\tch = exprI(index++);\n\t\t\t\t\t\t\tswitch(ch) {\n\t\t\t\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\t\t\t\tdefault : str += '\\\\' + ch;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr += ch;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!closed) {\n\t\t\t\t\t\tthrowError('Unclosed quote after \"'+str+'\"', index);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: LITERAL,\n\t\t\t\t\t\tvalue: str,\n\t\t\t\t\t\traw: quote + str + quote\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\t// Gobbles only identifiers\n\t\t\t\t// e.g.: `foo`, `_value`, `$x1`\n\t\t\t\t// Also, this function checks if that identifier is a literal:\n\t\t\t\t// (e.g. `true`, `false`, `null`) or `this`\n\t\t\t\tgobbleIdentifier = function() {\n\t\t\t\t\tvar ch = exprICode(index), start = index, identifier;\n\n\t\t\t\t\tif(isIdentifierStart(ch)) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrowError('Unexpected ' + exprI(index), index);\n\t\t\t\t\t}\n\n\t\t\t\t\twhile(index < length) {\n\t\t\t\t\t\tch = exprICode(index);\n\t\t\t\t\t\tif(isIdentifierPart(ch)) {\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tidentifier = expr.slice(start, index);\n\n\t\t\t\t\tif(literals.hasOwnProperty(identifier)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: LITERAL,\n\t\t\t\t\t\t\tvalue: literals[identifier],\n\t\t\t\t\t\t\traw: identifier\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if(identifier === this_str) {\n\t\t\t\t\t\treturn { type: THIS_EXP };\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: IDENTIFIER,\n\t\t\t\t\t\t\tname: identifier\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Gobbles a list of arguments within the context of a function call\n\t\t\t\t// or array literal. This function also assumes that the opening character\n\t\t\t\t// `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t\t\t\t// until the terminator character `)` or `]` is encountered.\n\t\t\t\t// e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t\t\t\tgobbleArguments = function(termination) {\n\t\t\t\t\tvar ch_i, args = [], node, closed = false;\n\t\t\t\t\twhile(index < length) {\n\t\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\t\tch_i = exprICode(index);\n\t\t\t\t\t\tif(ch_i === termination) { // done parsing\n\t\t\t\t\t\t\tclosed = true;\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (ch_i === COMMA_CODE) { // between expressions\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode = gobbleExpression();\n\t\t\t\t\t\t\tif(!node || node.type === COMPOUND) {\n\t\t\t\t\t\t\t\tthrowError('Expected comma', index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\targs.push(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!closed) {\n\t\t\t\t\t\tthrowError('Expected ' + String.fromCharCode(termination), index);\n\t\t\t\t\t}\n\t\t\t\t\treturn args;\n\t\t\t\t},\n\n\t\t\t\t// Gobble a non-literal variable name. This variable name may include properties\n\t\t\t\t// e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t\t\t\t// It also gobbles function calls:\n\t\t\t\t// e.g. `Math.acos(obj.angle)`\n\t\t\t\tgobbleVariable = function() {\n\t\t\t\t\tvar ch_i, node;\n\t\t\t\t\tch_i = exprICode(index);\n\n\t\t\t\t\tif(ch_i === OPAREN_CODE) {\n\t\t\t\t\t\tnode = gobbleGroup();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode = gobbleIdentifier();\n\t\t\t\t\t}\n\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\tch_i = exprICode(index);\n\t\t\t\t\twhile(ch_i === PERIOD_CODE || ch_i === OBRACK_CODE || ch_i === OPAREN_CODE) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tif(ch_i === PERIOD_CODE) {\n\t\t\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\t\t\tnode = {\n\t\t\t\t\t\t\t\ttype: MEMBER_EXP,\n\t\t\t\t\t\t\t\tcomputed: false,\n\t\t\t\t\t\t\t\tobject: node,\n\t\t\t\t\t\t\t\tproperty: gobbleIdentifier()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else if(ch_i === OBRACK_CODE) {\n\t\t\t\t\t\t\tnode = {\n\t\t\t\t\t\t\t\ttype: MEMBER_EXP,\n\t\t\t\t\t\t\t\tcomputed: true,\n\t\t\t\t\t\t\t\tobject: node,\n\t\t\t\t\t\t\t\tproperty: gobbleExpression()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\t\t\tch_i = exprICode(index);\n\t\t\t\t\t\t\tif(ch_i !== CBRACK_CODE) {\n\t\t\t\t\t\t\t\tthrowError('Unclosed [', index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else if(ch_i === OPAREN_CODE) {\n\t\t\t\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\t\t\t\tnode = {\n\t\t\t\t\t\t\t\ttype: CALL_EXP,\n\t\t\t\t\t\t\t\t'arguments': gobbleArguments(CPAREN_CODE),\n\t\t\t\t\t\t\t\tcallee: node\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\t\tch_i = exprICode(index);\n\t\t\t\t\t}\n\t\t\t\t\treturn node;\n\t\t\t\t},\n\n\t\t\t\t// Responsible for parsing a group of things within parentheses `()`\n\t\t\t\t// This function assumes that it needs to gobble the opening parenthesis\n\t\t\t\t// and then tries to gobble everything within that parenthesis, assuming\n\t\t\t\t// that the next thing it should see is the close parenthesis. If not,\n\t\t\t\t// then the expression probably doesn't have a `)`\n\t\t\t\tgobbleGroup = function() {\n\t\t\t\t\tindex++;\n\t\t\t\t\tvar node = gobbleExpression();\n\t\t\t\t\tgobbleSpaces();\n\t\t\t\t\tif(exprICode(index) === CPAREN_CODE) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrowError('Unclosed (', index);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// Responsible for parsing Array literals `[1, 2, 3]`\n\t\t\t\t// This function assumes that it needs to gobble the opening bracket\n\t\t\t\t// and then tries to gobble the expressions as arguments.\n\t\t\t\tgobbleArray = function() {\n\t\t\t\t\tindex++;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: ARRAY_EXP,\n\t\t\t\t\t\telements: gobbleArguments(CBRACK_CODE)\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tnodes = [], ch_i, node;\n\n\t\t\twhile(index < length) {\n\t\t\t\tch_i = exprICode(index);\n\n\t\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t\t// separators\n\t\t\t\tif(ch_i === SEMCOL_CODE || ch_i === COMMA_CODE) {\n\t\t\t\t\tindex++; // ignore separators\n\t\t\t\t} else {\n\t\t\t\t\t// Try to gobble each expression individually\n\t\t\t\t\tif((node = gobbleExpression())) {\n\t\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t\t} else if(index < length) {\n\t\t\t\t\t\tthrowError('Unexpected \"' + exprI(index) + '\"', index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If there's only one expression just try returning the expression\n\t\t\tif(nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: COMPOUND,\n\t\t\t\t\tbody: nodes\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t// To be filled in by the template\n\tjsep.version = '0.3.1';\n\tjsep.toString = function() { return 'JavaScript Expression Parser (JSEP) v' + jsep.version; };\n\n\t/**\n\t * @method jsep.addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @return jsep\n\t */\n\tjsep.addUnaryOp = function(op_name) {\n\t\tmax_unop_len = Math.max(op_name.length, max_unop_len);\n\t\tunary_ops[op_name] = t; return this;\n\t};\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float)\n\t * @return jsep\n\t */\n\tjsep.addBinaryOp = function(op_name, precedence) {\n\t\tmax_binop_len = Math.max(op_name.length, max_binop_len);\n\t\tbinary_ops[op_name] = precedence;\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @return jsep\n\t */\n\tjsep.addLiteral = function(literal_name, literal_value) {\n\t\tliterals[literal_name] = literal_value;\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @return jsep\n\t */\n\tjsep.removeUnaryOp = function(op_name) {\n\t\tdelete unary_ops[op_name];\n\t\tif(op_name.length === max_unop_len) {\n\t\t\tmax_unop_len = getMaxKeyLen(unary_ops);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeAllUnaryOps\n\t * @return jsep\n\t */\n\tjsep.removeAllUnaryOps = function() {\n\t\tunary_ops = {};\n\t\tmax_unop_len = 0;\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @return jsep\n\t */\n\tjsep.removeBinaryOp = function(op_name) {\n\t\tdelete binary_ops[op_name];\n\t\tif(op_name.length === max_binop_len) {\n\t\t\tmax_binop_len = getMaxKeyLen(binary_ops);\n\t\t}\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeAllBinaryOps\n\t * @return jsep\n\t */\n\tjsep.removeAllBinaryOps = function() {\n\t\tbinary_ops = {};\n\t\tmax_binop_len = 0;\n\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @return jsep\n\t */\n\tjsep.removeLiteral = function(literal_name) {\n\t\tdelete literals[literal_name];\n\t\treturn this;\n\t};\n\n\t/**\n\t * @method jsep.removeAllLiterals\n\t * @return jsep\n\t */\n\tjsep.removeAllLiterals = function() {\n\t\tliterals = {};\n\n\t\treturn this;\n\t};\n\n root.jsep = jsep;\n}(tmp));\n\nexport default tmp.jsep;\n","/**\n * @private\n */\nvar ExpressionNodeType = {\n VARIABLE: 0,\n UNARY: 1,\n BINARY: 2,\n TERNARY: 3,\n CONDITIONAL: 4,\n MEMBER: 5,\n FUNCTION_CALL: 6,\n ARRAY: 7,\n REGEX: 8,\n VARIABLE_IN_STRING: 9,\n LITERAL_NULL: 10,\n LITERAL_BOOLEAN: 11,\n LITERAL_NUMBER: 12,\n LITERAL_STRING: 13,\n LITERAL_COLOR: 14,\n LITERAL_VECTOR: 15,\n LITERAL_REGEX: 16,\n LITERAL_UNDEFINED: 17,\n BUILTIN_VARIABLE: 18,\n};\nexport default Object.freeze(ExpressionNodeType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport jsep from \"../ThirdParty/jsep.js\";\nimport ExpressionNodeType from \"./ExpressionNodeType.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates an expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * Implements the {@link StyleExpression} interface.\n * </p>\n *\n * @alias Expression\n * @constructor\n *\n * @param {String} [expression] The expression defined using the 3D Tiles Styling language.\n * @param {Object} [defines] Defines in the style.\n *\n * @example\n * var expression = new Cesium.Expression('(regExp(\"^Chest\").test(${County})) && (${YearBuilt} >= 1970)');\n * expression.evaluate(feature); // returns true or false depending on the feature's properties\n *\n * @example\n * var expression = new Cesium.Expression('(${Temperature} > 90) ? color(\"red\") : color(\"white\")');\n * expression.evaluateColor(feature, result); // returns a Cesium.Color object\n */\nfunction Expression(expression, defines) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"expression\", expression);\n //>>includeEnd('debug');\n\n this._expression = expression;\n expression = replaceDefines(expression, defines);\n expression = replaceVariables(removeBackslashes(expression));\n\n // customize jsep operators\n jsep.addBinaryOp(\"=~\", 0);\n jsep.addBinaryOp(\"!~\", 0);\n\n var ast;\n try {\n ast = jsep(expression);\n } catch (e) {\n throw new RuntimeError(e);\n }\n\n this._runtimeAst = createRuntimeAst(this, ast);\n}\n\nObject.defineProperties(Expression.prototype, {\n /**\n * Gets the expression defined in the 3D Tiles Styling language.\n *\n * @memberof Expression.prototype\n *\n * @type {String}\n * @readonly\n *\n * @default undefined\n */\n expression: {\n get: function () {\n return this._expression;\n },\n },\n});\n\n// Scratch storage manager while evaluating deep expressions.\n// For example, an expression like dot(vec4(${red}), vec4(${green}) * vec4(${blue}) requires 3 scratch Cartesian4's\nvar scratchStorage = {\n arrayIndex: 0,\n arrayArray: [[]],\n cartesian2Index: 0,\n cartesian3Index: 0,\n cartesian4Index: 0,\n cartesian2Array: [new Cartesian2()],\n cartesian3Array: [new Cartesian3()],\n cartesian4Array: [new Cartesian4()],\n reset: function () {\n this.arrayIndex = 0;\n this.cartesian2Index = 0;\n this.cartesian3Index = 0;\n this.cartesian4Index = 0;\n },\n getArray: function () {\n if (this.arrayIndex >= this.arrayArray.length) {\n this.arrayArray.push([]);\n }\n var array = this.arrayArray[this.arrayIndex++];\n array.length = 0;\n return array;\n },\n getCartesian2: function () {\n if (this.cartesian2Index >= this.cartesian2Array.length) {\n this.cartesian2Array.push(new Cartesian2());\n }\n return this.cartesian2Array[this.cartesian2Index++];\n },\n getCartesian3: function () {\n if (this.cartesian3Index >= this.cartesian3Array.length) {\n this.cartesian3Array.push(new Cartesian3());\n }\n return this.cartesian3Array[this.cartesian3Index++];\n },\n getCartesian4: function () {\n if (this.cartesian4Index >= this.cartesian4Array.length) {\n this.cartesian4Array.push(new Cartesian4());\n }\n return this.cartesian4Array[this.cartesian4Index++];\n },\n};\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Object} [result] The object onto which to store the result.\n * @returns {Boolean|Number|String|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nExpression.prototype.evaluate = function (feature, result) {\n scratchStorage.reset();\n var value = this._runtimeAst.evaluate(feature);\n if (result instanceof Color && value instanceof Cartesian4) {\n return Color.fromCartesian4(value, result);\n }\n if (\n value instanceof Cartesian2 ||\n value instanceof Cartesian3 ||\n value instanceof Cartesian4\n ) {\n return value.clone(result);\n }\n return value;\n};\n\n/**\n * Evaluates the result of a Color expression, optionally using the provided feature's properties.\n * <p>\n * This is equivalent to {@link Expression#evaluate} but always returns a {@link Color} object.\n * </p>\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nExpression.prototype.evaluateColor = function (feature, result) {\n scratchStorage.reset();\n var color = this._runtimeAst.evaluate(feature);\n return Color.fromCartesian4(color, result);\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {String} returnType The return type of the generated function.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nExpression.prototype.getShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState,\n returnType\n) {\n var shaderExpression = this.getShaderExpression(propertyNameMap, shaderState);\n\n shaderExpression =\n returnType +\n \" \" +\n functionName +\n \"() \\n\" +\n \"{ \\n\" +\n \" return \" +\n shaderExpression +\n \"; \\n\" +\n \"} \\n\";\n\n return shaderExpression;\n};\n\n/**\n * Gets the shader expression for this expression.\n * Returns undefined if the shader expression can't be generated from this expression.\n *\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {String} The shader expression.\n *\n * @private\n */\nExpression.prototype.getShaderExpression = function (\n propertyNameMap,\n shaderState\n) {\n return this._runtimeAst.getShaderExpression(propertyNameMap, shaderState);\n};\n\nvar unaryOperators = [\"!\", \"-\", \"+\"];\nvar binaryOperators = [\n \"+\",\n \"-\",\n \"*\",\n \"/\",\n \"%\",\n \"===\",\n \"!==\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"&&\",\n \"||\",\n \"!~\",\n \"=~\",\n];\n\nvar variableRegex = /\\${(.*?)}/g; // Matches ${variable_name}\nvar backslashRegex = /\\\\/g;\nvar backslashReplacement = \"@#%\";\nvar replacementRegex = /@#%/g;\n\nvar scratchColor = new Color();\n\nvar unaryFunctions = {\n abs: getEvaluateUnaryComponentwise(Math.abs),\n sqrt: getEvaluateUnaryComponentwise(Math.sqrt),\n cos: getEvaluateUnaryComponentwise(Math.cos),\n sin: getEvaluateUnaryComponentwise(Math.sin),\n tan: getEvaluateUnaryComponentwise(Math.tan),\n acos: getEvaluateUnaryComponentwise(Math.acos),\n asin: getEvaluateUnaryComponentwise(Math.asin),\n atan: getEvaluateUnaryComponentwise(Math.atan),\n radians: getEvaluateUnaryComponentwise(CesiumMath.toRadians),\n degrees: getEvaluateUnaryComponentwise(CesiumMath.toDegrees),\n sign: getEvaluateUnaryComponentwise(CesiumMath.sign),\n floor: getEvaluateUnaryComponentwise(Math.floor),\n ceil: getEvaluateUnaryComponentwise(Math.ceil),\n round: getEvaluateUnaryComponentwise(Math.round),\n exp: getEvaluateUnaryComponentwise(Math.exp),\n exp2: getEvaluateUnaryComponentwise(exp2),\n log: getEvaluateUnaryComponentwise(Math.log),\n log2: getEvaluateUnaryComponentwise(log2),\n fract: getEvaluateUnaryComponentwise(fract),\n length: length,\n normalize: normalize,\n};\n\nvar binaryFunctions = {\n atan2: getEvaluateBinaryComponentwise(Math.atan2, false),\n pow: getEvaluateBinaryComponentwise(Math.pow, false),\n min: getEvaluateBinaryComponentwise(Math.min, true),\n max: getEvaluateBinaryComponentwise(Math.max, true),\n distance: distance,\n dot: dot,\n cross: cross,\n};\n\nvar ternaryFunctions = {\n clamp: getEvaluateTernaryComponentwise(CesiumMath.clamp, true),\n mix: getEvaluateTernaryComponentwise(CesiumMath.lerp, true),\n};\n\nfunction fract(number) {\n return number - Math.floor(number);\n}\n\nfunction exp2(exponent) {\n return Math.pow(2.0, exponent);\n}\n\nfunction log2(number) {\n return CesiumMath.log2(number);\n}\n\nfunction getEvaluateUnaryComponentwise(operation) {\n return function (call, left) {\n if (typeof left === \"number\") {\n return operation(left);\n } else if (left instanceof Cartesian2) {\n return Cartesian2.fromElements(\n operation(left.x),\n operation(left.y),\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian3) {\n return Cartesian3.fromElements(\n operation(left.x),\n operation(left.y),\n operation(left.z),\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian4) {\n return Cartesian4.fromElements(\n operation(left.x),\n operation(left.y),\n operation(left.z),\n operation(left.w),\n scratchStorage.getCartesian4()\n );\n }\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires a vector or number argument. Argument is ' +\n left +\n \".\"\n );\n };\n}\n\nfunction getEvaluateBinaryComponentwise(operation, allowScalar) {\n return function (call, left, right) {\n if (allowScalar && typeof right === \"number\") {\n if (typeof left === \"number\") {\n return operation(left, right);\n } else if (left instanceof Cartesian2) {\n return Cartesian2.fromElements(\n operation(left.x, right),\n operation(left.y, right),\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian3) {\n return Cartesian3.fromElements(\n operation(left.x, right),\n operation(left.y, right),\n operation(left.z, right),\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian4) {\n return Cartesian4.fromElements(\n operation(left.x, right),\n operation(left.y, right),\n operation(left.z, right),\n operation(left.w, right),\n scratchStorage.getCartesian4()\n );\n }\n }\n\n if (typeof left === \"number\" && typeof right === \"number\") {\n return operation(left, right);\n } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n return Cartesian2.fromElements(\n operation(left.x, right.x),\n operation(left.y, right.y),\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n return Cartesian3.fromElements(\n operation(left.x, right.x),\n operation(left.y, right.y),\n operation(left.z, right.z),\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n return Cartesian4.fromElements(\n operation(left.x, right.x),\n operation(left.y, right.y),\n operation(left.z, right.z),\n operation(left.w, right.w),\n scratchStorage.getCartesian4()\n );\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n };\n}\n\nfunction getEvaluateTernaryComponentwise(operation, allowScalar) {\n return function (call, left, right, test) {\n if (allowScalar && typeof test === \"number\") {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return operation(left, right, test);\n } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n return Cartesian2.fromElements(\n operation(left.x, right.x, test),\n operation(left.y, right.y, test),\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n return Cartesian3.fromElements(\n operation(left.x, right.x, test),\n operation(left.y, right.y, test),\n operation(left.z, right.z, test),\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n return Cartesian4.fromElements(\n operation(left.x, right.x, test),\n operation(left.y, right.y, test),\n operation(left.z, right.z, test),\n operation(left.w, right.w, test),\n scratchStorage.getCartesian4()\n );\n }\n }\n\n if (\n typeof left === \"number\" &&\n typeof right === \"number\" &&\n typeof test === \"number\"\n ) {\n return operation(left, right, test);\n } else if (\n left instanceof Cartesian2 &&\n right instanceof Cartesian2 &&\n test instanceof Cartesian2\n ) {\n return Cartesian2.fromElements(\n operation(left.x, right.x, test.x),\n operation(left.y, right.y, test.y),\n scratchStorage.getCartesian2()\n );\n } else if (\n left instanceof Cartesian3 &&\n right instanceof Cartesian3 &&\n test instanceof Cartesian3\n ) {\n return Cartesian3.fromElements(\n operation(left.x, right.x, test.x),\n operation(left.y, right.y, test.y),\n operation(left.z, right.z, test.z),\n scratchStorage.getCartesian3()\n );\n } else if (\n left instanceof Cartesian4 &&\n right instanceof Cartesian4 &&\n test instanceof Cartesian4\n ) {\n return Cartesian4.fromElements(\n operation(left.x, right.x, test.x),\n operation(left.y, right.y, test.y),\n operation(left.z, right.z, test.z),\n operation(left.w, right.w, test.w),\n scratchStorage.getCartesian4()\n );\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \", \" +\n right +\n \", and \" +\n test +\n \".\"\n );\n };\n}\n\nfunction length(call, left) {\n if (typeof left === \"number\") {\n return Math.abs(left);\n } else if (left instanceof Cartesian2) {\n return Cartesian2.magnitude(left);\n } else if (left instanceof Cartesian3) {\n return Cartesian3.magnitude(left);\n } else if (left instanceof Cartesian4) {\n return Cartesian4.magnitude(left);\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires a vector or number argument. Argument is ' +\n left +\n \".\"\n );\n}\n\nfunction normalize(call, left) {\n if (typeof left === \"number\") {\n return 1.0;\n } else if (left instanceof Cartesian2) {\n return Cartesian2.normalize(left, scratchStorage.getCartesian2());\n } else if (left instanceof Cartesian3) {\n return Cartesian3.normalize(left, scratchStorage.getCartesian3());\n } else if (left instanceof Cartesian4) {\n return Cartesian4.normalize(left, scratchStorage.getCartesian4());\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires a vector or number argument. Argument is ' +\n left +\n \".\"\n );\n}\n\nfunction distance(call, left, right) {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return Math.abs(left - right);\n } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n return Cartesian2.distance(left, right);\n } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n return Cartesian3.distance(left, right);\n } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n return Cartesian4.distance(left, right);\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n}\n\nfunction dot(call, left, right) {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left * right;\n } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n return Cartesian2.dot(left, right);\n } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n return Cartesian3.dot(left, right);\n } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n return Cartesian4.dot(left, right);\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n}\n\nfunction cross(call, left, right) {\n if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n return Cartesian3.cross(left, right, scratchStorage.getCartesian3());\n }\n\n throw new RuntimeError(\n 'Function \"' +\n call +\n '\" requires vec3 arguments. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n}\n\nfunction Node(type, value, left, right, test) {\n this._type = type;\n this._value = value;\n this._left = left;\n this._right = right;\n this._test = test;\n this.evaluate = undefined;\n\n setEvaluateFunction(this);\n}\n\nfunction replaceDefines(expression, defines) {\n if (!defined(defines)) {\n return expression;\n }\n for (var key in defines) {\n if (defines.hasOwnProperty(key)) {\n var definePlaceholder = new RegExp(\"\\\\$\\\\{\" + key + \"\\\\}\", \"g\");\n var defineReplace = \"(\" + defines[key] + \")\";\n if (defined(defineReplace)) {\n expression = expression.replace(definePlaceholder, defineReplace);\n }\n }\n }\n return expression;\n}\n\nfunction removeBackslashes(expression) {\n return expression.replace(backslashRegex, backslashReplacement);\n}\n\nfunction replaceBackslashes(expression) {\n return expression.replace(replacementRegex, \"\\\\\");\n}\n\nfunction replaceVariables(expression) {\n var exp = expression;\n var result = \"\";\n var i = exp.indexOf(\"${\");\n while (i >= 0) {\n // Check if string is inside quotes\n var openSingleQuote = exp.indexOf(\"'\");\n var openDoubleQuote = exp.indexOf('\"');\n var closeQuote;\n if (openSingleQuote >= 0 && openSingleQuote < i) {\n closeQuote = exp.indexOf(\"'\", openSingleQuote + 1);\n result += exp.substr(0, closeQuote + 1);\n exp = exp.substr(closeQuote + 1);\n i = exp.indexOf(\"${\");\n } else if (openDoubleQuote >= 0 && openDoubleQuote < i) {\n closeQuote = exp.indexOf('\"', openDoubleQuote + 1);\n result += exp.substr(0, closeQuote + 1);\n exp = exp.substr(closeQuote + 1);\n i = exp.indexOf(\"${\");\n } else {\n result += exp.substr(0, i);\n var j = exp.indexOf(\"}\");\n if (j < 0) {\n throw new RuntimeError(\"Unmatched {.\");\n }\n result += \"czm_\" + exp.substr(i + 2, j - (i + 2));\n exp = exp.substr(j + 1);\n i = exp.indexOf(\"${\");\n }\n }\n result += exp;\n return result;\n}\n\nfunction parseLiteral(ast) {\n var type = typeof ast.value;\n if (ast.value === null) {\n return new Node(ExpressionNodeType.LITERAL_NULL, null);\n } else if (type === \"boolean\") {\n return new Node(ExpressionNodeType.LITERAL_BOOLEAN, ast.value);\n } else if (type === \"number\") {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, ast.value);\n } else if (type === \"string\") {\n if (ast.value.indexOf(\"${\") >= 0) {\n return new Node(ExpressionNodeType.VARIABLE_IN_STRING, ast.value);\n }\n return new Node(\n ExpressionNodeType.LITERAL_STRING,\n replaceBackslashes(ast.value)\n );\n }\n}\n\nfunction parseCall(expression, ast) {\n var args = ast.arguments;\n var argsLength = args.length;\n var call;\n var val, left, right;\n\n // Member function calls\n if (ast.callee.type === \"MemberExpression\") {\n call = ast.callee.property.name;\n var object = ast.callee.object;\n if (call === \"test\" || call === \"exec\") {\n // Make sure this is called on a valid type\n if (object.callee.name !== \"regExp\") {\n throw new RuntimeError(call + \" is not a function.\");\n }\n if (argsLength === 0) {\n if (call === \"test\") {\n return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n }\n return new Node(ExpressionNodeType.LITERAL_NULL, null);\n }\n left = createRuntimeAst(expression, object);\n right = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.FUNCTION_CALL, call, left, right);\n } else if (call === \"toString\") {\n val = createRuntimeAst(expression, object);\n return new Node(ExpressionNodeType.FUNCTION_CALL, call, val);\n }\n\n throw new RuntimeError('Unexpected function call \"' + call + '\".');\n }\n\n // Non-member function calls\n call = ast.callee.name;\n if (call === \"color\") {\n if (argsLength === 0) {\n return new Node(ExpressionNodeType.LITERAL_COLOR, call);\n }\n val = createRuntimeAst(expression, args[0]);\n if (defined(args[1])) {\n var alpha = createRuntimeAst(expression, args[1]);\n return new Node(ExpressionNodeType.LITERAL_COLOR, call, [val, alpha]);\n }\n return new Node(ExpressionNodeType.LITERAL_COLOR, call, [val]);\n } else if (call === \"rgb\" || call === \"hsl\") {\n if (argsLength < 3) {\n throw new RuntimeError(call + \" requires three arguments.\");\n }\n val = [\n createRuntimeAst(expression, args[0]),\n createRuntimeAst(expression, args[1]),\n createRuntimeAst(expression, args[2]),\n ];\n return new Node(ExpressionNodeType.LITERAL_COLOR, call, val);\n } else if (call === \"rgba\" || call === \"hsla\") {\n if (argsLength < 4) {\n throw new RuntimeError(call + \" requires four arguments.\");\n }\n val = [\n createRuntimeAst(expression, args[0]),\n createRuntimeAst(expression, args[1]),\n createRuntimeAst(expression, args[2]),\n createRuntimeAst(expression, args[3]),\n ];\n return new Node(ExpressionNodeType.LITERAL_COLOR, call, val);\n } else if (call === \"vec2\" || call === \"vec3\" || call === \"vec4\") {\n // Check for invalid constructors at evaluation time\n val = new Array(argsLength);\n for (var i = 0; i < argsLength; ++i) {\n val[i] = createRuntimeAst(expression, args[i]);\n }\n return new Node(ExpressionNodeType.LITERAL_VECTOR, call, val);\n } else if (call === \"isNaN\" || call === \"isFinite\") {\n if (argsLength === 0) {\n if (call === \"isNaN\") {\n return new Node(ExpressionNodeType.LITERAL_BOOLEAN, true);\n }\n return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (call === \"isExactClass\" || call === \"isClass\") {\n if (argsLength < 1 || argsLength > 1) {\n throw new RuntimeError(call + \" requires exactly one argument.\");\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (call === \"getExactClassName\") {\n if (argsLength > 0) {\n throw new RuntimeError(call + \" does not take any argument.\");\n }\n return new Node(ExpressionNodeType.UNARY, call);\n } else if (defined(unaryFunctions[call])) {\n if (argsLength !== 1) {\n throw new RuntimeError(call + \" requires exactly one argument.\");\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (defined(binaryFunctions[call])) {\n if (argsLength !== 2) {\n throw new RuntimeError(call + \" requires exactly two arguments.\");\n }\n left = createRuntimeAst(expression, args[0]);\n right = createRuntimeAst(expression, args[1]);\n return new Node(ExpressionNodeType.BINARY, call, left, right);\n } else if (defined(ternaryFunctions[call])) {\n if (argsLength !== 3) {\n throw new RuntimeError(call + \" requires exactly three arguments.\");\n }\n left = createRuntimeAst(expression, args[0]);\n right = createRuntimeAst(expression, args[1]);\n var test = createRuntimeAst(expression, args[2]);\n return new Node(ExpressionNodeType.TERNARY, call, left, right, test);\n } else if (call === \"Boolean\") {\n if (argsLength === 0) {\n return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (call === \"Number\") {\n if (argsLength === 0) {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, 0);\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (call === \"String\") {\n if (argsLength === 0) {\n return new Node(ExpressionNodeType.LITERAL_STRING, \"\");\n }\n val = createRuntimeAst(expression, args[0]);\n return new Node(ExpressionNodeType.UNARY, call, val);\n } else if (call === \"regExp\") {\n return parseRegex(expression, ast);\n }\n\n throw new RuntimeError('Unexpected function call \"' + call + '\".');\n}\n\nfunction parseRegex(expression, ast) {\n var args = ast.arguments;\n // no arguments, return default regex\n if (args.length === 0) {\n return new Node(ExpressionNodeType.LITERAL_REGEX, new RegExp());\n }\n\n var pattern = createRuntimeAst(expression, args[0]);\n var exp;\n\n // optional flag argument supplied\n if (args.length > 1) {\n var flags = createRuntimeAst(expression, args[1]);\n if (isLiteralType(pattern) && isLiteralType(flags)) {\n try {\n exp = new RegExp(\n replaceBackslashes(String(pattern._value)),\n flags._value\n );\n } catch (e) {\n throw new RuntimeError(e);\n }\n return new Node(ExpressionNodeType.LITERAL_REGEX, exp);\n }\n return new Node(ExpressionNodeType.REGEX, pattern, flags);\n }\n\n // only pattern argument supplied\n if (isLiteralType(pattern)) {\n try {\n exp = new RegExp(replaceBackslashes(String(pattern._value)));\n } catch (e) {\n throw new RuntimeError(e);\n }\n return new Node(ExpressionNodeType.LITERAL_REGEX, exp);\n }\n return new Node(ExpressionNodeType.REGEX, pattern);\n}\n\nfunction parseKeywordsAndVariables(ast) {\n if (isVariable(ast.name)) {\n var name = getPropertyName(ast.name);\n if (name.substr(0, 8) === \"tiles3d_\") {\n return new Node(ExpressionNodeType.BUILTIN_VARIABLE, name);\n }\n return new Node(ExpressionNodeType.VARIABLE, name);\n } else if (ast.name === \"NaN\") {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, NaN);\n } else if (ast.name === \"Infinity\") {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, Infinity);\n } else if (ast.name === \"undefined\") {\n return new Node(ExpressionNodeType.LITERAL_UNDEFINED, undefined);\n }\n\n throw new RuntimeError(ast.name + \" is not defined.\");\n}\n\nfunction parseMathConstant(ast) {\n var name = ast.property.name;\n if (name === \"PI\") {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, Math.PI);\n } else if (name === \"E\") {\n return new Node(ExpressionNodeType.LITERAL_NUMBER, Math.E);\n }\n}\n\nfunction parseNumberConstant(ast) {\n var name = ast.property.name;\n if (name === \"POSITIVE_INFINITY\") {\n return new Node(\n ExpressionNodeType.LITERAL_NUMBER,\n Number.POSITIVE_INFINITY\n );\n }\n}\n\nfunction parseMemberExpression(expression, ast) {\n if (ast.object.name === \"Math\") {\n return parseMathConstant(ast);\n } else if (ast.object.name === \"Number\") {\n return parseNumberConstant(ast);\n }\n\n var val;\n var obj = createRuntimeAst(expression, ast.object);\n if (ast.computed) {\n val = createRuntimeAst(expression, ast.property);\n return new Node(ExpressionNodeType.MEMBER, \"brackets\", obj, val);\n }\n\n val = new Node(ExpressionNodeType.LITERAL_STRING, ast.property.name);\n return new Node(ExpressionNodeType.MEMBER, \"dot\", obj, val);\n}\n\nfunction isLiteralType(node) {\n return node._type >= ExpressionNodeType.LITERAL_NULL;\n}\n\nfunction isVariable(name) {\n return name.substr(0, 4) === \"czm_\";\n}\n\nfunction getPropertyName(variable) {\n return variable.substr(4);\n}\n\nfunction createRuntimeAst(expression, ast) {\n var node;\n var op;\n var left;\n var right;\n\n if (ast.type === \"Literal\") {\n node = parseLiteral(ast);\n } else if (ast.type === \"CallExpression\") {\n node = parseCall(expression, ast);\n } else if (ast.type === \"Identifier\") {\n node = parseKeywordsAndVariables(ast);\n } else if (ast.type === \"UnaryExpression\") {\n op = ast.operator;\n var child = createRuntimeAst(expression, ast.argument);\n if (unaryOperators.indexOf(op) > -1) {\n node = new Node(ExpressionNodeType.UNARY, op, child);\n } else {\n throw new RuntimeError('Unexpected operator \"' + op + '\".');\n }\n } else if (ast.type === \"BinaryExpression\") {\n op = ast.operator;\n left = createRuntimeAst(expression, ast.left);\n right = createRuntimeAst(expression, ast.right);\n if (binaryOperators.indexOf(op) > -1) {\n node = new Node(ExpressionNodeType.BINARY, op, left, right);\n } else {\n throw new RuntimeError('Unexpected operator \"' + op + '\".');\n }\n } else if (ast.type === \"LogicalExpression\") {\n op = ast.operator;\n left = createRuntimeAst(expression, ast.left);\n right = createRuntimeAst(expression, ast.right);\n if (binaryOperators.indexOf(op) > -1) {\n node = new Node(ExpressionNodeType.BINARY, op, left, right);\n }\n } else if (ast.type === \"ConditionalExpression\") {\n var test = createRuntimeAst(expression, ast.test);\n left = createRuntimeAst(expression, ast.consequent);\n right = createRuntimeAst(expression, ast.alternate);\n node = new Node(ExpressionNodeType.CONDITIONAL, \"?\", left, right, test);\n } else if (ast.type === \"MemberExpression\") {\n node = parseMemberExpression(expression, ast);\n } else if (ast.type === \"ArrayExpression\") {\n var val = [];\n for (var i = 0; i < ast.elements.length; i++) {\n val[i] = createRuntimeAst(expression, ast.elements[i]);\n }\n node = new Node(ExpressionNodeType.ARRAY, val);\n } else if (ast.type === \"Compound\") {\n // empty expression or multiple expressions\n throw new RuntimeError(\"Provide exactly one expression.\");\n } else {\n throw new RuntimeError(\"Cannot parse expression.\");\n }\n\n return node;\n}\n\nfunction setEvaluateFunction(node) {\n if (node._type === ExpressionNodeType.CONDITIONAL) {\n node.evaluate = node._evaluateConditional;\n } else if (node._type === ExpressionNodeType.FUNCTION_CALL) {\n if (node._value === \"test\") {\n node.evaluate = node._evaluateRegExpTest;\n } else if (node._value === \"exec\") {\n node.evaluate = node._evaluateRegExpExec;\n } else if (node._value === \"toString\") {\n node.evaluate = node._evaluateToString;\n }\n } else if (node._type === ExpressionNodeType.UNARY) {\n if (node._value === \"!\") {\n node.evaluate = node._evaluateNot;\n } else if (node._value === \"-\") {\n node.evaluate = node._evaluateNegative;\n } else if (node._value === \"+\") {\n node.evaluate = node._evaluatePositive;\n } else if (node._value === \"isNaN\") {\n node.evaluate = node._evaluateNaN;\n } else if (node._value === \"isFinite\") {\n node.evaluate = node._evaluateIsFinite;\n } else if (node._value === \"isExactClass\") {\n node.evaluate = node._evaluateIsExactClass;\n } else if (node._value === \"isClass\") {\n node.evaluate = node._evaluateIsClass;\n } else if (node._value === \"getExactClassName\") {\n node.evaluate = node._evaluateGetExactClassName;\n } else if (node._value === \"Boolean\") {\n node.evaluate = node._evaluateBooleanConversion;\n } else if (node._value === \"Number\") {\n node.evaluate = node._evaluateNumberConversion;\n } else if (node._value === \"String\") {\n node.evaluate = node._evaluateStringConversion;\n } else if (defined(unaryFunctions[node._value])) {\n node.evaluate = getEvaluateUnaryFunction(node._value);\n }\n } else if (node._type === ExpressionNodeType.BINARY) {\n if (node._value === \"+\") {\n node.evaluate = node._evaluatePlus;\n } else if (node._value === \"-\") {\n node.evaluate = node._evaluateMinus;\n } else if (node._value === \"*\") {\n node.evaluate = node._evaluateTimes;\n } else if (node._value === \"/\") {\n node.evaluate = node._evaluateDivide;\n } else if (node._value === \"%\") {\n node.evaluate = node._evaluateMod;\n } else if (node._value === \"===\") {\n node.evaluate = node._evaluateEqualsStrict;\n } else if (node._value === \"!==\") {\n node.evaluate = node._evaluateNotEqualsStrict;\n } else if (node._value === \"<\") {\n node.evaluate = node._evaluateLessThan;\n } else if (node._value === \"<=\") {\n node.evaluate = node._evaluateLessThanOrEquals;\n } else if (node._value === \">\") {\n node.evaluate = node._evaluateGreaterThan;\n } else if (node._value === \">=\") {\n node.evaluate = node._evaluateGreaterThanOrEquals;\n } else if (node._value === \"&&\") {\n node.evaluate = node._evaluateAnd;\n } else if (node._value === \"||\") {\n node.evaluate = node._evaluateOr;\n } else if (node._value === \"=~\") {\n node.evaluate = node._evaluateRegExpMatch;\n } else if (node._value === \"!~\") {\n node.evaluate = node._evaluateRegExpNotMatch;\n } else if (defined(binaryFunctions[node._value])) {\n node.evaluate = getEvaluateBinaryFunction(node._value);\n }\n } else if (node._type === ExpressionNodeType.TERNARY) {\n node.evaluate = getEvaluateTernaryFunction(node._value);\n } else if (node._type === ExpressionNodeType.MEMBER) {\n if (node._value === \"brackets\") {\n node.evaluate = node._evaluateMemberBrackets;\n } else {\n node.evaluate = node._evaluateMemberDot;\n }\n } else if (node._type === ExpressionNodeType.ARRAY) {\n node.evaluate = node._evaluateArray;\n } else if (node._type === ExpressionNodeType.VARIABLE) {\n node.evaluate = node._evaluateVariable;\n } else if (node._type === ExpressionNodeType.VARIABLE_IN_STRING) {\n node.evaluate = node._evaluateVariableString;\n } else if (node._type === ExpressionNodeType.LITERAL_COLOR) {\n node.evaluate = node._evaluateLiteralColor;\n } else if (node._type === ExpressionNodeType.LITERAL_VECTOR) {\n node.evaluate = node._evaluateLiteralVector;\n } else if (node._type === ExpressionNodeType.LITERAL_STRING) {\n node.evaluate = node._evaluateLiteralString;\n } else if (node._type === ExpressionNodeType.REGEX) {\n node.evaluate = node._evaluateRegExp;\n } else if (node._type === ExpressionNodeType.BUILTIN_VARIABLE) {\n if (node._value === \"tiles3d_tileset_time\") {\n node.evaluate = evaluateTilesetTime;\n }\n } else {\n node.evaluate = node._evaluateLiteral;\n }\n}\n\nfunction evaluateTilesetTime(feature) {\n if (!defined(feature)) {\n return 0.0;\n }\n return feature.content.tileset.timeSinceLoad;\n}\n\nfunction getEvaluateUnaryFunction(call) {\n var evaluate = unaryFunctions[call];\n return function (feature) {\n var left = this._left.evaluate(feature);\n return evaluate(call, left);\n };\n}\n\nfunction getEvaluateBinaryFunction(call) {\n var evaluate = binaryFunctions[call];\n return function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n return evaluate(call, left, right);\n };\n}\n\nfunction getEvaluateTernaryFunction(call) {\n var evaluate = ternaryFunctions[call];\n return function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n var test = this._test.evaluate(feature);\n return evaluate(call, left, right, test);\n };\n}\n\nfunction getFeatureProperty(feature, name) {\n // Returns undefined if the feature is not defined or the property name is not defined for that feature\n if (defined(feature)) {\n return feature.getProperty(name);\n }\n}\n\nNode.prototype._evaluateLiteral = function () {\n return this._value;\n};\n\nNode.prototype._evaluateLiteralColor = function (feature) {\n var color = scratchColor;\n var args = this._left;\n if (this._value === \"color\") {\n if (!defined(args)) {\n Color.fromBytes(255, 255, 255, 255, color);\n } else if (args.length > 1) {\n Color.fromCssColorString(args[0].evaluate(feature), color);\n color.alpha = args[1].evaluate(feature);\n } else {\n Color.fromCssColorString(args[0].evaluate(feature), color);\n }\n } else if (this._value === \"rgb\") {\n Color.fromBytes(\n args[0].evaluate(feature),\n args[1].evaluate(feature),\n args[2].evaluate(feature),\n 255,\n color\n );\n } else if (this._value === \"rgba\") {\n // convert between css alpha (0 to 1) and cesium alpha (0 to 255)\n var a = args[3].evaluate(feature) * 255;\n Color.fromBytes(\n args[0].evaluate(feature),\n args[1].evaluate(feature),\n args[2].evaluate(feature),\n a,\n color\n );\n } else if (this._value === \"hsl\") {\n Color.fromHsl(\n args[0].evaluate(feature),\n args[1].evaluate(feature),\n args[2].evaluate(feature),\n 1.0,\n color\n );\n } else if (this._value === \"hsla\") {\n Color.fromHsl(\n args[0].evaluate(feature),\n args[1].evaluate(feature),\n args[2].evaluate(feature),\n args[3].evaluate(feature),\n color\n );\n }\n return Cartesian4.fromColor(color, scratchStorage.getCartesian4());\n};\n\nNode.prototype._evaluateLiteralVector = function (feature) {\n // Gather the components that make up the vector, which includes components from interior vectors.\n // For example vec3(1, 2, 3) or vec3(vec2(1, 2), 3) are both valid.\n //\n // If the number of components does not equal the vector's size, then a RuntimeError is thrown - with two exceptions:\n // 1. A vector may be constructed from a larger vector and drop the extra components.\n // 2. A vector may be constructed from a single component - vec3(1) will become vec3(1, 1, 1).\n //\n // Examples of invalid constructors include:\n // vec4(1, 2) // not enough components\n // vec3(vec2(1, 2)) // not enough components\n // vec3(1, 2, 3, 4) // too many components\n // vec2(vec4(1), 1) // too many components\n\n var components = scratchStorage.getArray();\n var call = this._value;\n var args = this._left;\n var argsLength = args.length;\n for (var i = 0; i < argsLength; ++i) {\n var value = args[i].evaluate(feature);\n if (typeof value === \"number\") {\n components.push(value);\n } else if (value instanceof Cartesian2) {\n components.push(value.x, value.y);\n } else if (value instanceof Cartesian3) {\n components.push(value.x, value.y, value.z);\n } else if (value instanceof Cartesian4) {\n components.push(value.x, value.y, value.z, value.w);\n } else {\n throw new RuntimeError(\n call +\n \" argument must be a vector or number. Argument is \" +\n value +\n \".\"\n );\n }\n }\n\n var componentsLength = components.length;\n var vectorLength = parseInt(call.charAt(3));\n\n if (componentsLength === 0) {\n throw new RuntimeError(\n \"Invalid \" + call + \" constructor. No valid arguments.\"\n );\n } else if (componentsLength < vectorLength && componentsLength > 1) {\n throw new RuntimeError(\n \"Invalid \" + call + \" constructor. Not enough arguments.\"\n );\n } else if (componentsLength > vectorLength && argsLength > 1) {\n throw new RuntimeError(\n \"Invalid \" + call + \" constructor. Too many arguments.\"\n );\n }\n\n if (componentsLength === 1) {\n // Add the same component 3 more times\n var component = components[0];\n components.push(component, component, component);\n }\n\n if (call === \"vec2\") {\n return Cartesian2.fromArray(components, 0, scratchStorage.getCartesian2());\n } else if (call === \"vec3\") {\n return Cartesian3.fromArray(components, 0, scratchStorage.getCartesian3());\n } else if (call === \"vec4\") {\n return Cartesian4.fromArray(components, 0, scratchStorage.getCartesian4());\n }\n};\n\nNode.prototype._evaluateLiteralString = function () {\n return this._value;\n};\n\nNode.prototype._evaluateVariableString = function (feature) {\n var result = this._value;\n var match = variableRegex.exec(result);\n while (match !== null) {\n var placeholder = match[0];\n var variableName = match[1];\n var property = getFeatureProperty(feature, variableName);\n if (!defined(property)) {\n property = \"\";\n }\n result = result.replace(placeholder, property);\n match = variableRegex.exec(result);\n }\n return result;\n};\n\nNode.prototype._evaluateVariable = function (feature) {\n // evaluates to undefined if the property name is not defined for that feature\n return getFeatureProperty(feature, this._value);\n};\n\nfunction checkFeature(ast) {\n return ast._value === \"feature\";\n}\n\n// PERFORMANCE_IDEA: Determine if parent property needs to be computed before runtime\nNode.prototype._evaluateMemberDot = function (feature) {\n if (checkFeature(this._left)) {\n return getFeatureProperty(feature, this._right.evaluate(feature));\n }\n var property = this._left.evaluate(feature);\n if (!defined(property)) {\n return undefined;\n }\n\n var member = this._right.evaluate(feature);\n if (\n property instanceof Cartesian2 ||\n property instanceof Cartesian3 ||\n property instanceof Cartesian4\n ) {\n // Vector components may be accessed with .r, .g, .b, .a and implicitly with .x, .y, .z, .w\n if (member === \"r\") {\n return property.x;\n } else if (member === \"g\") {\n return property.y;\n } else if (member === \"b\") {\n return property.z;\n } else if (member === \"a\") {\n return property.w;\n }\n }\n return property[member];\n};\n\nNode.prototype._evaluateMemberBrackets = function (feature) {\n if (checkFeature(this._left)) {\n return getFeatureProperty(feature, this._right.evaluate(feature));\n }\n var property = this._left.evaluate(feature);\n if (!defined(property)) {\n return undefined;\n }\n\n var member = this._right.evaluate(feature);\n if (\n property instanceof Cartesian2 ||\n property instanceof Cartesian3 ||\n property instanceof Cartesian4\n ) {\n // Vector components may be accessed with [0][1][2][3], ['r']['g']['b']['a'] and implicitly with ['x']['y']['z']['w']\n // For Cartesian2 and Cartesian3 out-of-range components will just return undefined\n if (member === 0 || member === \"r\") {\n return property.x;\n } else if (member === 1 || member === \"g\") {\n return property.y;\n } else if (member === 2 || member === \"b\") {\n return property.z;\n } else if (member === 3 || member === \"a\") {\n return property.w;\n }\n }\n return property[member];\n};\n\nNode.prototype._evaluateArray = function (feature) {\n var array = [];\n for (var i = 0; i < this._value.length; i++) {\n array[i] = this._value[i].evaluate(feature);\n }\n return array;\n};\n\n// PERFORMANCE_IDEA: Have \"fast path\" functions that deal only with specific types\n// that we can assign if we know the types before runtime\n\nNode.prototype._evaluateNot = function (feature) {\n var left = this._left.evaluate(feature);\n if (typeof left !== \"boolean\") {\n throw new RuntimeError(\n 'Operator \"!\" requires a boolean argument. Argument is ' + left + \".\"\n );\n }\n return !left;\n};\n\nNode.prototype._evaluateNegative = function (feature) {\n var left = this._left.evaluate(feature);\n if (left instanceof Cartesian2) {\n return Cartesian2.negate(left, scratchStorage.getCartesian2());\n } else if (left instanceof Cartesian3) {\n return Cartesian3.negate(left, scratchStorage.getCartesian3());\n } else if (left instanceof Cartesian4) {\n return Cartesian4.negate(left, scratchStorage.getCartesian4());\n } else if (typeof left === \"number\") {\n return -left;\n }\n\n throw new RuntimeError(\n 'Operator \"-\" requires a vector or number argument. Argument is ' +\n left +\n \".\"\n );\n};\n\nNode.prototype._evaluatePositive = function (feature) {\n var left = this._left.evaluate(feature);\n\n if (\n !(\n left instanceof Cartesian2 ||\n left instanceof Cartesian3 ||\n left instanceof Cartesian4 ||\n typeof left === \"number\"\n )\n ) {\n throw new RuntimeError(\n 'Operator \"+\" requires a vector or number argument. Argument is ' +\n left +\n \".\"\n );\n }\n\n return left;\n};\n\nNode.prototype._evaluateLessThan = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (typeof left !== \"number\" || typeof right !== \"number\") {\n throw new RuntimeError(\n 'Operator \"<\" requires number arguments. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n return left < right;\n};\n\nNode.prototype._evaluateLessThanOrEquals = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (typeof left !== \"number\" || typeof right !== \"number\") {\n throw new RuntimeError(\n 'Operator \"<=\" requires number arguments. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n return left <= right;\n};\n\nNode.prototype._evaluateGreaterThan = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (typeof left !== \"number\" || typeof right !== \"number\") {\n throw new RuntimeError(\n 'Operator \">\" requires number arguments. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n return left > right;\n};\n\nNode.prototype._evaluateGreaterThanOrEquals = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (typeof left !== \"number\" || typeof right !== \"number\") {\n throw new RuntimeError(\n 'Operator \">=\" requires number arguments. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n return left >= right;\n};\n\nNode.prototype._evaluateOr = function (feature) {\n var left = this._left.evaluate(feature);\n if (typeof left !== \"boolean\") {\n throw new RuntimeError(\n 'Operator \"||\" requires boolean arguments. First argument is ' +\n left +\n \".\"\n );\n }\n\n // short circuit the expression\n if (left) {\n return true;\n }\n\n var right = this._right.evaluate(feature);\n if (typeof right !== \"boolean\") {\n throw new RuntimeError(\n 'Operator \"||\" requires boolean arguments. Second argument is ' +\n right +\n \".\"\n );\n }\n\n return left || right;\n};\n\nNode.prototype._evaluateAnd = function (feature) {\n var left = this._left.evaluate(feature);\n if (typeof left !== \"boolean\") {\n throw new RuntimeError(\n 'Operator \"&&\" requires boolean arguments. First argument is ' +\n left +\n \".\"\n );\n }\n\n // short circuit the expression\n if (!left) {\n return false;\n }\n\n var right = this._right.evaluate(feature);\n if (typeof right !== \"boolean\") {\n throw new RuntimeError(\n 'Operator \"&&\" requires boolean arguments. Second argument is ' +\n right +\n \".\"\n );\n }\n\n return left && right;\n};\n\nNode.prototype._evaluatePlus = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n return Cartesian2.add(left, right, scratchStorage.getCartesian2());\n } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n return Cartesian3.add(left, right, scratchStorage.getCartesian3());\n } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n return Cartesian4.add(left, right, scratchStorage.getCartesian4());\n } else if (typeof left === \"string\" || typeof right === \"string\") {\n // If only one argument is a string the other argument calls its toString function.\n return left + right;\n } else if (typeof left === \"number\" && typeof right === \"number\") {\n return left + right;\n }\n\n throw new RuntimeError(\n 'Operator \"+\" requires vector or number arguments of matching types, or at least one string argument. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateMinus = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n return Cartesian2.subtract(left, right, scratchStorage.getCartesian2());\n } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n return Cartesian3.subtract(left, right, scratchStorage.getCartesian3());\n } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n return Cartesian4.subtract(left, right, scratchStorage.getCartesian4());\n } else if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n\n throw new RuntimeError(\n 'Operator \"-\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateTimes = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n return Cartesian2.multiplyComponents(\n left,\n right,\n scratchStorage.getCartesian2()\n );\n } else if (right instanceof Cartesian2 && typeof left === \"number\") {\n return Cartesian2.multiplyByScalar(\n right,\n left,\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian2 && typeof right === \"number\") {\n return Cartesian2.multiplyByScalar(\n left,\n right,\n scratchStorage.getCartesian2()\n );\n } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n return Cartesian3.multiplyComponents(\n left,\n right,\n scratchStorage.getCartesian3()\n );\n } else if (right instanceof Cartesian3 && typeof left === \"number\") {\n return Cartesian3.multiplyByScalar(\n right,\n left,\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian3 && typeof right === \"number\") {\n return Cartesian3.multiplyByScalar(\n left,\n right,\n scratchStorage.getCartesian3()\n );\n } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n return Cartesian4.multiplyComponents(\n left,\n right,\n scratchStorage.getCartesian4()\n );\n } else if (right instanceof Cartesian4 && typeof left === \"number\") {\n return Cartesian4.multiplyByScalar(\n right,\n left,\n scratchStorage.getCartesian4()\n );\n } else if (left instanceof Cartesian4 && typeof right === \"number\") {\n return Cartesian4.multiplyByScalar(\n left,\n right,\n scratchStorage.getCartesian4()\n );\n } else if (typeof left === \"number\" && typeof right === \"number\") {\n return left * right;\n }\n\n throw new RuntimeError(\n 'Operator \"*\" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateDivide = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n return Cartesian2.divideComponents(\n left,\n right,\n scratchStorage.getCartesian2()\n );\n } else if (left instanceof Cartesian2 && typeof right === \"number\") {\n return Cartesian2.divideByScalar(\n left,\n right,\n scratchStorage.getCartesian2()\n );\n } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n return Cartesian3.divideComponents(\n left,\n right,\n scratchStorage.getCartesian3()\n );\n } else if (left instanceof Cartesian3 && typeof right === \"number\") {\n return Cartesian3.divideByScalar(\n left,\n right,\n scratchStorage.getCartesian3()\n );\n } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n return Cartesian4.divideComponents(\n left,\n right,\n scratchStorage.getCartesian4()\n );\n } else if (left instanceof Cartesian4 && typeof right === \"number\") {\n return Cartesian4.divideByScalar(\n left,\n right,\n scratchStorage.getCartesian4()\n );\n } else if (typeof left === \"number\" && typeof right === \"number\") {\n return left / right;\n }\n\n throw new RuntimeError(\n 'Operator \"/\" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateMod = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n return Cartesian2.fromElements(\n left.x % right.x,\n left.y % right.y,\n scratchStorage.getCartesian2()\n );\n } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n return Cartesian3.fromElements(\n left.x % right.x,\n left.y % right.y,\n left.z % right.z,\n scratchStorage.getCartesian3()\n );\n } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n return Cartesian4.fromElements(\n left.x % right.x,\n left.y % right.y,\n left.z % right.z,\n left.w % right.w,\n scratchStorage.getCartesian4()\n );\n } else if (typeof left === \"number\" && typeof right === \"number\") {\n return left % right;\n }\n\n throw new RuntimeError(\n 'Operator \"%\" requires vector or number arguments of matching types. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateEqualsStrict = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (\n (right instanceof Cartesian2 && left instanceof Cartesian2) ||\n (right instanceof Cartesian3 && left instanceof Cartesian3) ||\n (right instanceof Cartesian4 && left instanceof Cartesian4)\n ) {\n return left.equals(right);\n }\n return left === right;\n};\n\nNode.prototype._evaluateNotEqualsStrict = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n if (\n (right instanceof Cartesian2 && left instanceof Cartesian2) ||\n (right instanceof Cartesian3 && left instanceof Cartesian3) ||\n (right instanceof Cartesian4 && left instanceof Cartesian4)\n ) {\n return !left.equals(right);\n }\n return left !== right;\n};\n\nNode.prototype._evaluateConditional = function (feature) {\n var test = this._test.evaluate(feature);\n\n if (typeof test !== \"boolean\") {\n throw new RuntimeError(\n \"Conditional argument of conditional expression must be a boolean. Argument is \" +\n test +\n \".\"\n );\n }\n\n if (test) {\n return this._left.evaluate(feature);\n }\n return this._right.evaluate(feature);\n};\n\nNode.prototype._evaluateNaN = function (feature) {\n return isNaN(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateIsFinite = function (feature) {\n return isFinite(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateIsExactClass = function (feature) {\n if (defined(feature)) {\n return feature.isExactClass(this._left.evaluate(feature));\n }\n return false;\n};\n\nNode.prototype._evaluateIsClass = function (feature) {\n if (defined(feature)) {\n return feature.isClass(this._left.evaluate(feature));\n }\n return false;\n};\n\nNode.prototype._evaluateGetExactClassName = function (feature) {\n if (defined(feature)) {\n return feature.getExactClassName();\n }\n};\n\nNode.prototype._evaluateBooleanConversion = function (feature) {\n return Boolean(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateNumberConversion = function (feature) {\n return Number(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateStringConversion = function (feature) {\n return String(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateRegExp = function (feature) {\n var pattern = this._value.evaluate(feature);\n var flags = \"\";\n\n if (defined(this._left)) {\n flags = this._left.evaluate(feature);\n }\n\n var exp;\n try {\n exp = new RegExp(pattern, flags);\n } catch (e) {\n throw new RuntimeError(e);\n }\n return exp;\n};\n\nNode.prototype._evaluateRegExpTest = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (!(left instanceof RegExp && typeof right === \"string\")) {\n throw new RuntimeError(\n \"RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are \" +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n return left.test(right);\n};\n\nNode.prototype._evaluateRegExpMatch = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (left instanceof RegExp && typeof right === \"string\") {\n return left.test(right);\n } else if (right instanceof RegExp && typeof left === \"string\") {\n return right.test(left);\n }\n\n throw new RuntimeError(\n 'Operator \"=~\" requires one RegExp argument and one string argument. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateRegExpNotMatch = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (left instanceof RegExp && typeof right === \"string\") {\n return !left.test(right);\n } else if (right instanceof RegExp && typeof left === \"string\") {\n return !right.test(left);\n }\n\n throw new RuntimeError(\n 'Operator \"!~\" requires one RegExp argument and one string argument. Arguments are ' +\n left +\n \" and \" +\n right +\n \".\"\n );\n};\n\nNode.prototype._evaluateRegExpExec = function (feature) {\n var left = this._left.evaluate(feature);\n var right = this._right.evaluate(feature);\n\n if (!(left instanceof RegExp && typeof right === \"string\")) {\n throw new RuntimeError(\n \"RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are \" +\n left +\n \" and \" +\n right +\n \".\"\n );\n }\n\n var exec = left.exec(right);\n if (!defined(exec)) {\n return null;\n }\n return exec[1];\n};\n\nNode.prototype._evaluateToString = function (feature) {\n var left = this._left.evaluate(feature);\n if (\n left instanceof RegExp ||\n left instanceof Cartesian2 ||\n left instanceof Cartesian3 ||\n left instanceof Cartesian4\n ) {\n return String(left);\n }\n\n throw new RuntimeError('Unexpected function call \"' + this._value + '\".');\n};\n\nfunction convertHSLToRGB(ast) {\n // Check if the color contains any nested expressions to see if the color can be converted here.\n // E.g. \"hsl(0.9, 0.6, 0.7)\" is able to convert directly to rgb, \"hsl(0.9, 0.6, ${Height})\" is not.\n var channels = ast._left;\n var length = channels.length;\n for (var i = 0; i < length; ++i) {\n if (channels[i]._type !== ExpressionNodeType.LITERAL_NUMBER) {\n return undefined;\n }\n }\n var h = channels[0]._value;\n var s = channels[1]._value;\n var l = channels[2]._value;\n var a = length === 4 ? channels[3]._value : 1.0;\n return Color.fromHsl(h, s, l, a, scratchColor);\n}\n\nfunction convertRGBToColor(ast) {\n // Check if the color contains any nested expressions to see if the color can be converted here.\n // E.g. \"rgb(255, 255, 255)\" is able to convert directly to Color, \"rgb(255, 255, ${Height})\" is not.\n var channels = ast._left;\n var length = channels.length;\n for (var i = 0; i < length; ++i) {\n if (channels[i]._type !== ExpressionNodeType.LITERAL_NUMBER) {\n return undefined;\n }\n }\n var color = scratchColor;\n color.red = channels[0]._value / 255.0;\n color.green = channels[1]._value / 255.0;\n color.blue = channels[2]._value / 255.0;\n color.alpha = length === 4 ? channels[3]._value : 1.0;\n return color;\n}\n\nfunction numberToString(number) {\n if (number % 1 === 0) {\n // Add a .0 to whole numbers\n return number.toFixed(1);\n }\n\n return number.toString();\n}\n\nfunction colorToVec3(color) {\n var r = numberToString(color.red);\n var g = numberToString(color.green);\n var b = numberToString(color.blue);\n return \"vec3(\" + r + \", \" + g + \", \" + b + \")\";\n}\n\nfunction colorToVec4(color) {\n var r = numberToString(color.red);\n var g = numberToString(color.green);\n var b = numberToString(color.blue);\n var a = numberToString(color.alpha);\n return \"vec4(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\n\nfunction getExpressionArray(array, propertyNameMap, shaderState, parent) {\n var length = array.length;\n var expressions = new Array(length);\n for (var i = 0; i < length; ++i) {\n expressions[i] = array[i].getShaderExpression(\n propertyNameMap,\n shaderState,\n parent\n );\n }\n return expressions;\n}\n\nfunction getVariableName(variableName, propertyNameMap) {\n if (!defined(propertyNameMap[variableName])) {\n throw new RuntimeError(\n 'Style references a property \"' +\n variableName +\n '\" that does not exist or is not styleable.'\n );\n }\n\n return propertyNameMap[variableName];\n}\n\nvar nullSentinel = \"czm_infinity\"; // null just needs to be some sentinel value that will cause \"[expression] === null\" to be false in nearly all cases. GLSL doesn't have a NaN constant so use czm_infinity.\n\nNode.prototype.getShaderExpression = function (\n propertyNameMap,\n shaderState,\n parent\n) {\n var color;\n var left;\n var right;\n var test;\n\n var type = this._type;\n var value = this._value;\n\n if (defined(this._left)) {\n if (Array.isArray(this._left)) {\n // Left can be an array if the type is LITERAL_COLOR or LITERAL_VECTOR\n left = getExpressionArray(this._left, propertyNameMap, shaderState, this);\n } else {\n left = this._left.getShaderExpression(propertyNameMap, shaderState, this);\n }\n }\n\n if (defined(this._right)) {\n right = this._right.getShaderExpression(propertyNameMap, shaderState, this);\n }\n\n if (defined(this._test)) {\n test = this._test.getShaderExpression(propertyNameMap, shaderState, this);\n }\n\n if (Array.isArray(this._value)) {\n // For ARRAY type\n value = getExpressionArray(this._value, propertyNameMap, shaderState, this);\n }\n\n switch (type) {\n case ExpressionNodeType.VARIABLE:\n if (checkFeature(this)) {\n return undefined;\n }\n return getVariableName(value, propertyNameMap);\n case ExpressionNodeType.UNARY:\n // Supported types: +, -, !, Boolean, Number\n if (value === \"Boolean\") {\n return \"bool(\" + left + \")\";\n } else if (value === \"Number\") {\n return \"float(\" + left + \")\";\n } else if (value === \"round\") {\n return \"floor(\" + left + \" + 0.5)\";\n } else if (defined(unaryFunctions[value])) {\n return value + \"(\" + left + \")\";\n } else if (value === \"isNaN\") {\n // In GLSL 2.0 use isnan instead\n return \"(\" + left + \" != \" + left + \")\";\n } else if (value === \"isFinite\") {\n // In GLSL 2.0 use isinf instead. GLSL doesn't have an infinity constant so use czm_infinity which is an arbitrarily big enough number.\n return \"(abs(\" + left + \") < czm_infinity)\";\n } else if (\n value === \"String\" ||\n value === \"isExactClass\" ||\n value === \"isClass\" ||\n value === \"getExactClassName\"\n ) {\n throw new RuntimeError(\n 'Error generating style shader: \"' + value + '\" is not supported.'\n );\n } else if (defined(unaryFunctions[value])) {\n return value + \"(\" + left + \")\";\n }\n return value + left;\n case ExpressionNodeType.BINARY:\n // Supported types: ||, &&, ===, !==, <, >, <=, >=, +, -, *, /, %\n if (value === \"%\") {\n return \"mod(\" + left + \", \" + right + \")\";\n } else if (value === \"===\") {\n return \"(\" + left + \" == \" + right + \")\";\n } else if (value === \"!==\") {\n return \"(\" + left + \" != \" + right + \")\";\n } else if (value === \"atan2\") {\n return \"atan(\" + left + \", \" + right + \")\";\n } else if (defined(binaryFunctions[value])) {\n return value + \"(\" + left + \", \" + right + \")\";\n }\n return \"(\" + left + \" \" + value + \" \" + right + \")\";\n case ExpressionNodeType.TERNARY:\n if (defined(ternaryFunctions[value])) {\n return value + \"(\" + left + \", \" + right + \", \" + test + \")\";\n }\n break;\n case ExpressionNodeType.CONDITIONAL:\n return \"(\" + test + \" ? \" + left + \" : \" + right + \")\";\n case ExpressionNodeType.MEMBER:\n if (checkFeature(this._left)) {\n return getVariableName(right, propertyNameMap);\n }\n // This is intended for accessing the components of vector properties. String members aren't supported.\n // Check for 0.0 rather than 0 because all numbers are previously converted to decimals.\n if (right === \"r\" || right === \"x\" || right === \"0.0\") {\n return left + \"[0]\";\n } else if (right === \"g\" || right === \"y\" || right === \"1.0\") {\n return left + \"[1]\";\n } else if (right === \"b\" || right === \"z\" || right === \"2.0\") {\n return left + \"[2]\";\n } else if (right === \"a\" || right === \"w\" || right === \"3.0\") {\n return left + \"[3]\";\n }\n return left + \"[int(\" + right + \")]\";\n case ExpressionNodeType.FUNCTION_CALL:\n throw new RuntimeError(\n 'Error generating style shader: \"' + value + '\" is not supported.'\n );\n case ExpressionNodeType.ARRAY:\n if (value.length === 4) {\n return (\n \"vec4(\" +\n value[0] +\n \", \" +\n value[1] +\n \", \" +\n value[2] +\n \", \" +\n value[3] +\n \")\"\n );\n } else if (value.length === 3) {\n return \"vec3(\" + value[0] + \", \" + value[1] + \", \" + value[2] + \")\";\n } else if (value.length === 2) {\n return \"vec2(\" + value[0] + \", \" + value[1] + \")\";\n }\n throw new RuntimeError(\n \"Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.\"\n );\n case ExpressionNodeType.REGEX:\n throw new RuntimeError(\n \"Error generating style shader: Regular expressions are not supported.\"\n );\n case ExpressionNodeType.VARIABLE_IN_STRING:\n throw new RuntimeError(\n \"Error generating style shader: Converting a variable to a string is not supported.\"\n );\n case ExpressionNodeType.LITERAL_NULL:\n return nullSentinel;\n case ExpressionNodeType.LITERAL_BOOLEAN:\n return value ? \"true\" : \"false\";\n case ExpressionNodeType.LITERAL_NUMBER:\n return numberToString(value);\n case ExpressionNodeType.LITERAL_STRING:\n if (defined(parent) && parent._type === ExpressionNodeType.MEMBER) {\n if (\n value === \"r\" ||\n value === \"g\" ||\n value === \"b\" ||\n value === \"a\" ||\n value === \"x\" ||\n value === \"y\" ||\n value === \"z\" ||\n value === \"w\" ||\n checkFeature(parent._left)\n ) {\n return value;\n }\n }\n // Check for css color strings\n color = Color.fromCssColorString(value, scratchColor);\n if (defined(color)) {\n return colorToVec3(color);\n }\n throw new RuntimeError(\n \"Error generating style shader: String literals are not supported.\"\n );\n case ExpressionNodeType.LITERAL_COLOR:\n var args = left;\n if (value === \"color\") {\n if (!defined(args)) {\n return \"vec4(1.0)\";\n } else if (args.length > 1) {\n var rgb = args[0];\n var alpha = args[1];\n if (alpha !== \"1.0\") {\n shaderState.translucent = true;\n }\n return \"vec4(\" + rgb + \", \" + alpha + \")\";\n }\n return \"vec4(\" + args[0] + \", 1.0)\";\n } else if (value === \"rgb\") {\n color = convertRGBToColor(this);\n if (defined(color)) {\n return colorToVec4(color);\n }\n return (\n \"vec4(\" +\n args[0] +\n \" / 255.0, \" +\n args[1] +\n \" / 255.0, \" +\n args[2] +\n \" / 255.0, 1.0)\"\n );\n } else if (value === \"rgba\") {\n if (args[3] !== \"1.0\") {\n shaderState.translucent = true;\n }\n color = convertRGBToColor(this);\n if (defined(color)) {\n return colorToVec4(color);\n }\n return (\n \"vec4(\" +\n args[0] +\n \" / 255.0, \" +\n args[1] +\n \" / 255.0, \" +\n args[2] +\n \" / 255.0, \" +\n args[3] +\n \")\"\n );\n } else if (value === \"hsl\") {\n color = convertHSLToRGB(this);\n if (defined(color)) {\n return colorToVec4(color);\n }\n return (\n \"vec4(czm_HSLToRGB(vec3(\" +\n args[0] +\n \", \" +\n args[1] +\n \", \" +\n args[2] +\n \")), 1.0)\"\n );\n } else if (value === \"hsla\") {\n color = convertHSLToRGB(this);\n if (defined(color)) {\n if (color.alpha !== 1.0) {\n shaderState.translucent = true;\n }\n return colorToVec4(color);\n }\n if (args[3] !== \"1.0\") {\n shaderState.translucent = true;\n }\n return (\n \"vec4(czm_HSLToRGB(vec3(\" +\n args[0] +\n \", \" +\n args[1] +\n \", \" +\n args[2] +\n \")), \" +\n args[3] +\n \")\"\n );\n }\n break;\n case ExpressionNodeType.LITERAL_VECTOR:\n //>>includeStart('debug', pragmas.debug);\n if (!defined(left)) {\n throw new DeveloperError(\n \"left should always be defined for type ExpressionNodeType.LITERAL_VECTOR\"\n );\n }\n //>>includeEnd('debug');\n var length = left.length;\n var vectorExpression = value + \"(\";\n for (var i = 0; i < length; ++i) {\n vectorExpression += left[i];\n if (i < length - 1) {\n vectorExpression += \", \";\n }\n }\n vectorExpression += \")\";\n return vectorExpression;\n case ExpressionNodeType.LITERAL_REGEX:\n throw new RuntimeError(\n \"Error generating style shader: Regular expressions are not supported.\"\n );\n case ExpressionNodeType.LITERAL_UNDEFINED:\n return nullSentinel;\n case ExpressionNodeType.BUILTIN_VARIABLE:\n if (value === \"tiles3d_tileset_time\") {\n return \"u_time\";\n }\n }\n};\nexport default Expression;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport ShadowVolumeFS from \"../Shaders/ShadowVolumeFS.js\";\nimport VectorTileVS from \"../Shaders/VectorTileVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport Expression from \"./Expression.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\n\n/**\n * Creates a batch of classification meshes.\n *\n * @alias Vector3DTilePrimitive\n * @constructor\n *\n * @param {Object} options An object with following properties:\n * @param {Float32Array} options.positions The positions of the meshes.\n * @param {Uint16Array|Uint32Array} options.indices The indices of the triangulated meshes. The indices must be contiguous so that\n * the indices for mesh n are in [i, i + indexCounts[n]] where i = sum{indexCounts[0], indexCounts[n - 1]}.\n * @param {Uint32Array} options.indexCounts The number of indices for each mesh.\n * @param {Uint32Array} options.indexOffsets The offset into the index buffer for each mesh.\n * @param {Vector3DTileBatch[]} options.batchedIndices The index offset and count for each batch with the same color.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched meshes.\n * @param {Uint16Array} options.batchIds The batch ids for each mesh.\n * @param {Uint16Array} options.vertexBatchIds The batch id for each vertex.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of meshes.\n * @param {BoundingSphere[]} options.boundingVolumes The bounding volume for each mesh.\n * @param {ClassificationType} [options.classificationType] What this tile will classify.\n *\n * @private\n */\nfunction Vector3DTilePrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._batchTable = options.batchTable;\n this._batchIds = options.batchIds;\n\n // These arrays are released after VAO creation.\n this._positions = options.positions;\n this._vertexBatchIds = options.vertexBatchIds;\n\n // These arrays are kept for re-batching indices based on colors.\n // If WebGL 2 is supported, indices will be released and re-batching uses buffer-to-buffer copies.\n this._indices = options.indices;\n this._indexCounts = options.indexCounts;\n this._indexOffsets = options.indexOffsets;\n this._batchedIndices = options.batchedIndices;\n\n this._boundingVolume = options.boundingVolume;\n this._boundingVolumes = options.boundingVolumes;\n\n this._center = defaultValue(options.center, Cartesian3.ZERO);\n\n this._va = undefined;\n this._sp = undefined;\n this._spStencil = undefined;\n this._spPick = undefined;\n this._uniformMap = undefined;\n\n // Only used with WebGL 2 to ping-pong ibos after copy.\n this._vaSwap = undefined;\n\n this._rsStencilDepthPass = undefined;\n this._rsStencilDepthPass3DTiles = undefined;\n this._rsColorPass = undefined;\n this._rsPickPass = undefined;\n this._rsWireframe = undefined;\n\n this._commands = [];\n this._commandsIgnoreShow = [];\n this._pickCommands = [];\n\n this._constantColor = Color.clone(Color.WHITE);\n this._highlightColor = this._constantColor;\n\n this._batchDirty = true;\n this._pickCommandsDirty = true;\n this._framesSinceLastRebatch = 0;\n\n this._updatingAllCommands = false;\n\n this._trianglesLength = this._indices.length / 3;\n this._geometryByteLength =\n this._indices.byteLength +\n this._positions.byteLength +\n this._vertexBatchIds.byteLength;\n\n /**\n * Draw the wireframe of the classification meshes.\n * @type {Boolean}\n * @default false\n */\n this.debugWireframe = false;\n this._debugWireframe = this.debugWireframe;\n this._wireframeDirty = false;\n\n /**\n * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n * @type {Boolean}\n * @default false\n */\n this.forceRebatch = false;\n\n /**\n * What this tile will classify.\n * @type {ClassificationType}\n * @default ClassificationType.BOTH\n */\n this.classificationType = defaultValue(\n options.classificationType,\n ClassificationType.BOTH\n );\n\n // Hidden options\n this._vertexShaderSource = options._vertexShaderSource;\n this._fragmentShaderSource = options._fragmentShaderSource;\n this._attributeLocations = options._attributeLocations;\n this._uniformMap = options._uniformMap;\n this._pickId = options._pickId;\n this._modelMatrix = options._modelMatrix;\n this._boundingSphere = options._boundingSphere;\n\n this._batchIdLookUp = {};\n\n var length = this._batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = this._batchIds[i];\n this._batchIdLookUp[batchId] = i;\n }\n}\n\nObject.defineProperties(Vector3DTilePrimitive.prototype, {\n /**\n * Gets the number of triangles.\n *\n * @memberof Vector3DTilePrimitive.prototype\n *\n * @type {Number}\n * @readonly\n */\n trianglesLength: {\n get: function () {\n return this._trianglesLength;\n },\n },\n\n /**\n * Gets the geometry memory in bytes.\n *\n * @memberof Vector3DTilePrimitive.prototype\n *\n * @type {Number}\n * @readonly\n */\n geometryByteLength: {\n get: function () {\n return this._geometryByteLength;\n },\n },\n});\n\nvar defaultAttributeLocations = {\n position: 0,\n a_batchId: 1,\n};\n\nfunction createVertexArray(primitive, context) {\n if (defined(primitive._va)) {\n return;\n }\n\n var positionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: primitive._positions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var idBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: primitive._vertexBatchIds,\n usage: BufferUsage.STATIC_DRAW,\n });\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: primitive._indices,\n usage: BufferUsage.DYNAMIC_DRAW,\n indexDatatype:\n primitive._indices.BYTES_PER_ELEMENT === 2\n ? IndexDatatype.UNSIGNED_SHORT\n : IndexDatatype.UNSIGNED_INT,\n });\n\n var vertexAttributes = [\n {\n index: 0,\n vertexBuffer: positionBuffer,\n componentDatatype: ComponentDatatype.fromTypedArray(primitive._positions),\n componentsPerAttribute: 3,\n },\n {\n index: 1,\n vertexBuffer: idBuffer,\n componentDatatype: ComponentDatatype.fromTypedArray(\n primitive._vertexBatchIds\n ),\n componentsPerAttribute: 1,\n },\n ];\n\n primitive._va = new VertexArray({\n context: context,\n attributes: vertexAttributes,\n indexBuffer: indexBuffer,\n });\n\n if (context.webgl2) {\n primitive._vaSwap = new VertexArray({\n context: context,\n attributes: vertexAttributes,\n indexBuffer: Buffer.createIndexBuffer({\n context: context,\n sizeInBytes: indexBuffer.sizeInBytes,\n usage: BufferUsage.DYNAMIC_DRAW,\n indexDatatype: indexBuffer.indexDatatype,\n }),\n });\n }\n\n primitive._batchedPositions = undefined;\n primitive._transferrableBatchIds = undefined;\n primitive._vertexBatchIds = undefined;\n primitive._verticesPromise = undefined;\n}\n\nfunction createShaders(primitive, context) {\n if (defined(primitive._sp)) {\n return;\n }\n\n var batchTable = primitive._batchTable;\n var attributeLocations = defaultValue(\n primitive._attributeLocations,\n defaultAttributeLocations\n );\n\n var pickId = primitive._pickId;\n var vertexShaderSource = primitive._vertexShaderSource;\n var fragmentShaderSource = primitive._fragmentShaderSource;\n if (defined(vertexShaderSource)) {\n primitive._sp = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vertexShaderSource,\n fragmentShaderSource: fragmentShaderSource,\n attributeLocations: attributeLocations,\n });\n primitive._spStencil = primitive._sp;\n\n fragmentShaderSource = ShaderSource.replaceMain(\n fragmentShaderSource,\n \"czm_non_pick_main\"\n );\n fragmentShaderSource =\n fragmentShaderSource +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_pick_main(); \\n\" +\n \" gl_FragColor = \" +\n pickId +\n \"; \\n\" +\n \"} \\n\";\n primitive._spPick = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vertexShaderSource,\n fragmentShaderSource: fragmentShaderSource,\n attributeLocations: attributeLocations,\n });\n return;\n }\n\n var vsSource = batchTable.getVertexShaderCallback(\n false,\n \"a_batchId\",\n undefined\n )(VectorTileVS);\n var fsSource = batchTable.getFragmentShaderCallback()(\n ShadowVolumeFS,\n false,\n undefined\n );\n\n pickId = batchTable.getPickId();\n\n var vs = new ShaderSource({\n sources: [vsSource],\n });\n var fs = new ShaderSource({\n defines: [\"VECTOR_TILE\"],\n sources: [fsSource],\n });\n\n primitive._sp = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n vs = new ShaderSource({\n sources: [VectorTileVS],\n });\n fs = new ShaderSource({\n defines: [\"VECTOR_TILE\"],\n sources: [ShadowVolumeFS],\n });\n\n primitive._spStencil = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n fsSource = ShaderSource.replaceMain(fsSource, \"czm_non_pick_main\");\n fsSource =\n fsSource +\n \"\\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_pick_main(); \\n\" +\n \" gl_FragColor = \" +\n pickId +\n \"; \\n\" +\n \"} \\n\";\n\n var pickVS = new ShaderSource({\n sources: [vsSource],\n });\n var pickFS = new ShaderSource({\n defines: [\"VECTOR_TILE\"],\n sources: [fsSource],\n });\n primitive._spPick = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: pickVS,\n fragmentShaderSource: pickFS,\n attributeLocations: attributeLocations,\n });\n}\n\nfunction getStencilDepthRenderState(mask3DTiles) {\n var stencilFunction = mask3DTiles\n ? StencilFunction.EQUAL\n : StencilFunction.ALWAYS;\n return {\n colorMask: {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n },\n stencilTest: {\n enabled: true,\n frontFunction: stencilFunction,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.DECREMENT_WRAP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: stencilFunction,\n backOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.INCREMENT_WRAP,\n zPass: StencilOperation.KEEP,\n },\n reference: StencilConstants.CESIUM_3D_TILE_MASK,\n mask: StencilConstants.CESIUM_3D_TILE_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: true,\n func: DepthFunction.LESS_OR_EQUAL,\n },\n depthMask: false,\n };\n}\n\nvar colorRenderState = {\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.NOT_EQUAL,\n frontOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n backFunction: StencilFunction.NOT_EQUAL,\n backOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: false,\n },\n depthMask: false,\n blending: BlendingState.ALPHA_BLEND,\n};\n\nvar pickRenderState = {\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.NOT_EQUAL,\n frontOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n backFunction: StencilFunction.NOT_EQUAL,\n backOperation: {\n fail: StencilOperation.ZERO,\n zFail: StencilOperation.ZERO,\n zPass: StencilOperation.ZERO,\n },\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n depthTest: {\n enabled: false,\n },\n depthMask: false,\n};\n\nfunction createRenderStates(primitive) {\n if (defined(primitive._rsStencilDepthPass)) {\n return;\n }\n\n primitive._rsStencilDepthPass = RenderState.fromCache(\n getStencilDepthRenderState(false)\n );\n primitive._rsStencilDepthPass3DTiles = RenderState.fromCache(\n getStencilDepthRenderState(true)\n );\n primitive._rsColorPass = RenderState.fromCache(colorRenderState);\n primitive._rsPickPass = RenderState.fromCache(pickRenderState);\n}\n\nvar modifiedModelViewScratch = new Matrix4();\nvar rtcScratch = new Cartesian3();\n\nfunction createUniformMap(primitive, context) {\n if (defined(primitive._uniformMap)) {\n return;\n }\n\n var uniformMap = {\n u_modifiedModelViewProjection: function () {\n var viewMatrix = context.uniformState.view;\n var projectionMatrix = context.uniformState.projection;\n Matrix4.clone(viewMatrix, modifiedModelViewScratch);\n Matrix4.multiplyByPoint(\n modifiedModelViewScratch,\n primitive._center,\n rtcScratch\n );\n Matrix4.setTranslation(\n modifiedModelViewScratch,\n rtcScratch,\n modifiedModelViewScratch\n );\n Matrix4.multiply(\n projectionMatrix,\n modifiedModelViewScratch,\n modifiedModelViewScratch\n );\n return modifiedModelViewScratch;\n },\n u_highlightColor: function () {\n return primitive._highlightColor;\n },\n };\n\n primitive._uniformMap = primitive._batchTable.getUniformMapCallback()(\n uniformMap\n );\n}\n\nfunction copyIndicesCPU(\n indices,\n newIndices,\n currentOffset,\n offsets,\n counts,\n batchIds,\n batchIdLookUp\n) {\n var sizeInBytes = indices.constructor.BYTES_PER_ELEMENT;\n\n var batchedIdsLength = batchIds.length;\n for (var j = 0; j < batchedIdsLength; ++j) {\n var batchedId = batchIds[j];\n var index = batchIdLookUp[batchedId];\n var offset = offsets[index];\n var count = counts[index];\n\n var subarray = new indices.constructor(\n indices.buffer,\n sizeInBytes * offset,\n count\n );\n newIndices.set(subarray, currentOffset);\n\n offsets[index] = currentOffset;\n currentOffset += count;\n }\n\n return currentOffset;\n}\n\nfunction rebatchCPU(primitive, batchedIndices) {\n var indices = primitive._indices;\n var indexOffsets = primitive._indexOffsets;\n var indexCounts = primitive._indexCounts;\n var batchIdLookUp = primitive._batchIdLookUp;\n\n var newIndices = new indices.constructor(indices.length);\n\n var current = batchedIndices.pop();\n var newBatchedIndices = [current];\n\n var currentOffset = copyIndicesCPU(\n indices,\n newIndices,\n 0,\n indexOffsets,\n indexCounts,\n current.batchIds,\n batchIdLookUp\n );\n\n current.offset = 0;\n current.count = currentOffset;\n\n while (batchedIndices.length > 0) {\n var next = batchedIndices.pop();\n if (Color.equals(next.color, current.color)) {\n currentOffset = copyIndicesCPU(\n indices,\n newIndices,\n currentOffset,\n indexOffsets,\n indexCounts,\n next.batchIds,\n batchIdLookUp\n );\n current.batchIds = current.batchIds.concat(next.batchIds);\n current.count = currentOffset - current.offset;\n } else {\n var offset = currentOffset;\n currentOffset = copyIndicesCPU(\n indices,\n newIndices,\n currentOffset,\n indexOffsets,\n indexCounts,\n next.batchIds,\n batchIdLookUp\n );\n\n next.offset = offset;\n next.count = currentOffset - offset;\n newBatchedIndices.push(next);\n current = next;\n }\n }\n\n primitive._va.indexBuffer.copyFromArrayView(newIndices);\n\n primitive._indices = newIndices;\n primitive._batchedIndices = newBatchedIndices;\n}\n\nfunction copyIndicesGPU(\n readBuffer,\n writeBuffer,\n currentOffset,\n offsets,\n counts,\n batchIds,\n batchIdLookUp\n) {\n var sizeInBytes = readBuffer.bytesPerIndex;\n\n var batchedIdsLength = batchIds.length;\n for (var j = 0; j < batchedIdsLength; ++j) {\n var batchedId = batchIds[j];\n var index = batchIdLookUp[batchedId];\n var offset = offsets[index];\n var count = counts[index];\n\n writeBuffer.copyFromBuffer(\n readBuffer,\n offset * sizeInBytes,\n currentOffset * sizeInBytes,\n count * sizeInBytes\n );\n\n offsets[index] = currentOffset;\n currentOffset += count;\n }\n\n return currentOffset;\n}\n\nfunction rebatchGPU(primitive, batchedIndices) {\n var indexOffsets = primitive._indexOffsets;\n var indexCounts = primitive._indexCounts;\n var batchIdLookUp = primitive._batchIdLookUp;\n\n var current = batchedIndices.pop();\n var newBatchedIndices = [current];\n\n var readBuffer = primitive._va.indexBuffer;\n var writeBuffer = primitive._vaSwap.indexBuffer;\n\n var currentOffset = copyIndicesGPU(\n readBuffer,\n writeBuffer,\n 0,\n indexOffsets,\n indexCounts,\n current.batchIds,\n batchIdLookUp\n );\n\n current.offset = 0;\n current.count = currentOffset;\n\n while (batchedIndices.length > 0) {\n var next = batchedIndices.pop();\n if (Color.equals(next.color, current.color)) {\n currentOffset = copyIndicesGPU(\n readBuffer,\n writeBuffer,\n currentOffset,\n indexOffsets,\n indexCounts,\n next.batchIds,\n batchIdLookUp\n );\n current.batchIds = current.batchIds.concat(next.batchIds);\n current.count = currentOffset - current.offset;\n } else {\n var offset = currentOffset;\n currentOffset = copyIndicesGPU(\n readBuffer,\n writeBuffer,\n currentOffset,\n indexOffsets,\n indexCounts,\n next.batchIds,\n batchIdLookUp\n );\n next.offset = offset;\n next.count = currentOffset - offset;\n newBatchedIndices.push(next);\n current = next;\n }\n }\n\n var temp = primitive._va;\n primitive._va = primitive._vaSwap;\n primitive._vaSwap = temp;\n\n primitive._batchedIndices = newBatchedIndices;\n}\n\nfunction compareColors(a, b) {\n return b.color.toRgba() - a.color.toRgba();\n}\n\n// PERFORMANCE_IDEA: For WebGL 2, we can use copyBufferSubData for buffer-to-buffer copies.\n// PERFORMANCE_IDEA: Not supported, but we could use glMultiDrawElements here.\nfunction rebatchCommands(primitive, context) {\n if (!primitive._batchDirty) {\n return false;\n }\n\n var batchedIndices = primitive._batchedIndices;\n var length = batchedIndices.length;\n\n var needToRebatch = false;\n var colorCounts = {};\n\n for (var i = 0; i < length; ++i) {\n var color = batchedIndices[i].color;\n var rgba = color.toRgba();\n if (defined(colorCounts[rgba])) {\n needToRebatch = true;\n break;\n } else {\n colorCounts[rgba] = true;\n }\n }\n\n if (!needToRebatch) {\n primitive._batchDirty = false;\n return false;\n }\n\n if (\n needToRebatch &&\n !primitive.forceRebatch &&\n primitive._framesSinceLastRebatch < 120\n ) {\n ++primitive._framesSinceLastRebatch;\n return;\n }\n\n batchedIndices.sort(compareColors);\n\n if (context.webgl2) {\n rebatchGPU(primitive, batchedIndices);\n } else {\n rebatchCPU(primitive, batchedIndices);\n }\n\n primitive._framesSinceLastRebatch = 0;\n primitive._batchDirty = false;\n primitive._pickCommandsDirty = true;\n primitive._wireframeDirty = true;\n return true;\n}\n\nfunction createColorCommands(primitive, context) {\n var needsRebatch = rebatchCommands(primitive, context);\n\n var commands = primitive._commands;\n var batchedIndices = primitive._batchedIndices;\n var length = batchedIndices.length;\n var commandsLength = length * 2;\n\n if (\n defined(commands) &&\n !needsRebatch &&\n commands.length === commandsLength\n ) {\n return;\n }\n\n commands.length = commandsLength;\n\n var vertexArray = primitive._va;\n var sp = primitive._sp;\n var modelMatrix = defaultValue(primitive._modelMatrix, Matrix4.IDENTITY);\n var uniformMap = primitive._uniformMap;\n var bv = primitive._boundingVolume;\n\n for (var j = 0; j < length; ++j) {\n var offset = batchedIndices[j].offset;\n var count = batchedIndices[j].count;\n\n var stencilDepthCommand = commands[j * 2];\n if (!defined(stencilDepthCommand)) {\n stencilDepthCommand = commands[j * 2] = new DrawCommand({\n owner: primitive,\n });\n }\n\n stencilDepthCommand.vertexArray = vertexArray;\n stencilDepthCommand.modelMatrix = modelMatrix;\n stencilDepthCommand.offset = offset;\n stencilDepthCommand.count = count;\n stencilDepthCommand.renderState = primitive._rsStencilDepthPass;\n stencilDepthCommand.shaderProgram = sp;\n stencilDepthCommand.uniformMap = uniformMap;\n stencilDepthCommand.boundingVolume = bv;\n stencilDepthCommand.cull = false;\n stencilDepthCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n var stencilDepthDerivedCommand = DrawCommand.shallowClone(\n stencilDepthCommand,\n stencilDepthCommand.derivedCommands.tileset\n );\n stencilDepthDerivedCommand.renderState =\n primitive._rsStencilDepthPass3DTiles;\n stencilDepthDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n stencilDepthCommand.derivedCommands.tileset = stencilDepthDerivedCommand;\n\n var colorCommand = commands[j * 2 + 1];\n if (!defined(colorCommand)) {\n colorCommand = commands[j * 2 + 1] = new DrawCommand({\n owner: primitive,\n });\n }\n\n colorCommand.vertexArray = vertexArray;\n colorCommand.modelMatrix = modelMatrix;\n colorCommand.offset = offset;\n colorCommand.count = count;\n colorCommand.renderState = primitive._rsColorPass;\n colorCommand.shaderProgram = sp;\n colorCommand.uniformMap = uniformMap;\n colorCommand.boundingVolume = bv;\n colorCommand.cull = false;\n colorCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n var colorDerivedCommand = DrawCommand.shallowClone(\n colorCommand,\n colorCommand.derivedCommands.tileset\n );\n colorDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n colorCommand.derivedCommands.tileset = colorDerivedCommand;\n }\n\n primitive._commandsDirty = true;\n}\n\nfunction createColorCommandsIgnoreShow(primitive, frameState) {\n if (\n primitive.classificationType === ClassificationType.TERRAIN ||\n !frameState.invertClassification ||\n (defined(primitive._commandsIgnoreShow) && !primitive._commandsDirty)\n ) {\n return;\n }\n\n var commands = primitive._commands;\n var commandsIgnoreShow = primitive._commandsIgnoreShow;\n var spStencil = primitive._spStencil;\n\n var commandsLength = commands.length;\n var length = (commandsIgnoreShow.length = commandsLength / 2);\n\n var commandIndex = 0;\n for (var j = 0; j < length; ++j) {\n var commandIgnoreShow = (commandsIgnoreShow[j] = DrawCommand.shallowClone(\n commands[commandIndex],\n commandsIgnoreShow[j]\n ));\n commandIgnoreShow.shaderProgram = spStencil;\n commandIgnoreShow.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW;\n\n commandIndex += 2;\n }\n\n primitive._commandsDirty = false;\n}\n\nfunction createPickCommands(primitive) {\n if (!primitive._pickCommandsDirty) {\n return;\n }\n\n var length = primitive._indexOffsets.length;\n var pickCommands = primitive._pickCommands;\n pickCommands.length = length * 2;\n\n var vertexArray = primitive._va;\n var spStencil = primitive._spStencil;\n var spPick = primitive._spPick;\n var modelMatrix = defaultValue(primitive._modelMatrix, Matrix4.IDENTITY);\n var uniformMap = primitive._uniformMap;\n\n for (var j = 0; j < length; ++j) {\n var offset = primitive._indexOffsets[j];\n var count = primitive._indexCounts[j];\n var bv = defined(primitive._boundingVolumes)\n ? primitive._boundingVolumes[j]\n : primitive.boundingVolume;\n\n var stencilDepthCommand = pickCommands[j * 2];\n if (!defined(stencilDepthCommand)) {\n stencilDepthCommand = pickCommands[j * 2] = new DrawCommand({\n owner: primitive,\n pickOnly: true,\n });\n }\n\n stencilDepthCommand.vertexArray = vertexArray;\n stencilDepthCommand.modelMatrix = modelMatrix;\n stencilDepthCommand.offset = offset;\n stencilDepthCommand.count = count;\n stencilDepthCommand.renderState = primitive._rsStencilDepthPass;\n stencilDepthCommand.shaderProgram = spStencil;\n stencilDepthCommand.uniformMap = uniformMap;\n stencilDepthCommand.boundingVolume = bv;\n stencilDepthCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n var stencilDepthDerivedCommand = DrawCommand.shallowClone(\n stencilDepthCommand,\n stencilDepthCommand.derivedCommands.tileset\n );\n stencilDepthDerivedCommand.renderState =\n primitive._rsStencilDepthPass3DTiles;\n stencilDepthDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n stencilDepthCommand.derivedCommands.tileset = stencilDepthDerivedCommand;\n\n var colorCommand = pickCommands[j * 2 + 1];\n if (!defined(colorCommand)) {\n colorCommand = pickCommands[j * 2 + 1] = new DrawCommand({\n owner: primitive,\n pickOnly: true,\n });\n }\n\n colorCommand.vertexArray = vertexArray;\n colorCommand.modelMatrix = modelMatrix;\n colorCommand.offset = offset;\n colorCommand.count = count;\n colorCommand.renderState = primitive._rsPickPass;\n colorCommand.shaderProgram = spPick;\n colorCommand.uniformMap = uniformMap;\n colorCommand.boundingVolume = bv;\n colorCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n var colorDerivedCommand = DrawCommand.shallowClone(\n colorCommand,\n colorCommand.derivedCommands.tileset\n );\n colorDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n colorCommand.derivedCommands.tileset = colorDerivedCommand;\n }\n\n primitive._pickCommandsDirty = false;\n}\n\n/**\n * Creates features for each mesh and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePrimitive.prototype.createFeatures = function (content, features) {\n var batchIds = this._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n features[batchId] = new Cesium3DTileFeature(content, batchId);\n }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (mesh batch table color * color).\n *\n * @param {Boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePrimitive.prototype.applyDebugSettings = function (enabled, color) {\n this._highlightColor = enabled ? color : this._constantColor;\n};\n\nfunction clearStyle(polygons, features) {\n polygons._updatingAllCommands = true;\n\n var batchIds = polygons._batchIds;\n var length = batchIds.length;\n var i;\n\n for (i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n feature.show = true;\n feature.color = Color.WHITE;\n }\n\n var batchedIndices = polygons._batchedIndices;\n length = batchedIndices.length;\n\n for (i = 0; i < length; ++i) {\n batchedIndices[i].color = Color.clone(Color.WHITE);\n }\n\n polygons._updatingAllCommands = false;\n polygons._batchDirty = true;\n}\n\nvar scratchColor = new Color();\n\nvar DEFAULT_COLOR_VALUE = Color.WHITE;\nvar DEFAULT_SHOW_VALUE = true;\n\nvar complexExpressionReg = /\\$/;\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePrimitive.prototype.applyStyle = function (style, features) {\n if (!defined(style)) {\n clearStyle(this, features);\n return;\n }\n\n var colorExpression = style.color;\n var isSimpleStyle =\n colorExpression instanceof Expression &&\n !complexExpressionReg.test(colorExpression.expression);\n this._updatingAllCommands = isSimpleStyle;\n\n var batchIds = this._batchIds;\n var length = batchIds.length;\n var i;\n\n for (i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n feature.color = defined(style.color)\n ? style.color.evaluateColor(feature, scratchColor)\n : DEFAULT_COLOR_VALUE;\n feature.show = defined(style.show)\n ? style.show.evaluate(feature)\n : DEFAULT_SHOW_VALUE;\n }\n\n if (isSimpleStyle) {\n var batchedIndices = this._batchedIndices;\n length = batchedIndices.length;\n\n for (i = 0; i < length; ++i) {\n batchedIndices[i].color = Color.clone(Color.WHITE);\n }\n\n this._updatingAllCommands = false;\n this._batchDirty = true;\n }\n};\n\n/**\n * Call when updating the color of a mesh with batchId changes color. The meshes will need to be re-batched\n * on the next update.\n *\n * @param {Number} batchId The batch id of the meshes whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTilePrimitive.prototype.updateCommands = function (batchId, color) {\n if (this._updatingAllCommands) {\n return;\n }\n\n var batchIdLookUp = this._batchIdLookUp;\n var index = batchIdLookUp[batchId];\n if (!defined(index)) {\n return;\n }\n\n var indexOffsets = this._indexOffsets;\n var indexCounts = this._indexCounts;\n\n var offset = indexOffsets[index];\n var count = indexCounts[index];\n\n var batchedIndices = this._batchedIndices;\n var length = batchedIndices.length;\n\n var i;\n for (i = 0; i < length; ++i) {\n var batchedOffset = batchedIndices[i].offset;\n var batchedCount = batchedIndices[i].count;\n\n if (offset >= batchedOffset && offset < batchedOffset + batchedCount) {\n break;\n }\n }\n\n batchedIndices.push(\n new Vector3DTileBatch({\n color: Color.clone(color),\n offset: offset,\n count: count,\n batchIds: [batchId],\n })\n );\n\n var startIds = [];\n var endIds = [];\n\n var batchIds = batchedIndices[i].batchIds;\n var batchIdsLength = batchIds.length;\n\n for (var j = 0; j < batchIdsLength; ++j) {\n var id = batchIds[j];\n if (id === batchId) {\n continue;\n }\n\n var offsetIndex = batchIdLookUp[id];\n if (indexOffsets[offsetIndex] < offset) {\n startIds.push(id);\n } else {\n endIds.push(id);\n }\n }\n\n if (endIds.length !== 0) {\n batchedIndices.push(\n new Vector3DTileBatch({\n color: Color.clone(batchedIndices[i].color),\n offset: offset + count,\n count:\n batchedIndices[i].offset + batchedIndices[i].count - (offset + count),\n batchIds: endIds,\n })\n );\n }\n\n if (startIds.length !== 0) {\n batchedIndices[i].count = offset - batchedIndices[i].offset;\n batchedIndices[i].batchIds = startIds;\n } else {\n batchedIndices.splice(i, 1);\n }\n\n this._batchDirty = true;\n};\n\nfunction queueCommands(primitive, frameState, commands, commandsIgnoreShow) {\n var classificationType = primitive.classificationType;\n var queueTerrainCommands =\n classificationType !== ClassificationType.CESIUM_3D_TILE;\n var queue3DTilesCommands = classificationType !== ClassificationType.TERRAIN;\n\n var commandList = frameState.commandList;\n var commandLength = commands.length;\n var command;\n var i;\n for (i = 0; i < commandLength; ++i) {\n if (queueTerrainCommands) {\n command = commands[i];\n command.pass = Pass.TERRAIN_CLASSIFICATION;\n commandList.push(command);\n }\n if (queue3DTilesCommands) {\n command = commands[i].derivedCommands.tileset;\n command.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n commandList.push(command);\n }\n }\n\n if (!frameState.invertClassification || !defined(commandsIgnoreShow)) {\n return;\n }\n\n commandLength = commandsIgnoreShow.length;\n for (i = 0; i < commandLength; ++i) {\n commandList.push(commandsIgnoreShow[i]);\n }\n}\n\nfunction queueWireframeCommands(frameState, commands) {\n var commandList = frameState.commandList;\n var commandLength = commands.length;\n for (var i = 0; i < commandLength; i += 2) {\n var command = commands[i + 1];\n command.pass = Pass.OPAQUE;\n commandList.push(command);\n }\n}\n\nfunction updateWireframe(primitive) {\n var earlyExit = primitive.debugWireframe === primitive._debugWireframe;\n earlyExit =\n earlyExit && !(primitive.debugWireframe && primitive._wireframeDirty);\n if (earlyExit) {\n return;\n }\n\n if (!defined(primitive._rsWireframe)) {\n primitive._rsWireframe = RenderState.fromCache({});\n }\n\n var rs;\n var type;\n\n if (primitive.debugWireframe) {\n rs = primitive._rsWireframe;\n type = PrimitiveType.LINES;\n } else {\n rs = primitive._rsColorPass;\n type = PrimitiveType.TRIANGLES;\n }\n\n var commands = primitive._commands;\n var commandLength = commands.length;\n for (var i = 0; i < commandLength; i += 2) {\n var command = commands[i + 1];\n command.renderState = rs;\n command.primitiveType = type;\n }\n\n primitive._debugWireframe = primitive.debugWireframe;\n primitive._wireframeDirty = false;\n}\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePrimitive.prototype.update = function (frameState) {\n var context = frameState.context;\n\n createVertexArray(this, context);\n createShaders(this, context);\n createRenderStates(this);\n createUniformMap(this, context);\n\n var passes = frameState.passes;\n if (passes.render) {\n createColorCommands(this, context);\n createColorCommandsIgnoreShow(this, frameState);\n updateWireframe(this);\n\n if (this._debugWireframe) {\n queueWireframeCommands(frameState, this._commands);\n } else {\n queueCommands(this, frameState, this._commands, this._commandsIgnoreShow);\n }\n }\n\n if (passes.pick) {\n createPickCommands(this);\n queueCommands(this, frameState, this._pickCommands);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePrimitive.prototype.destroy = function () {\n this._va = this._va && this._va.destroy();\n this._sp = this._sp && this._sp.destroy();\n this._spPick = this._spPick && this._spPick.destroy();\n this._vaSwap = this._vaSwap && this._vaSwap.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTilePrimitive;\n","import arraySlice from \"../Core/arraySlice.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport addDefaults from \"../ThirdParty/GltfPipeline/addDefaults.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport getAccessorByteStride from \"../ThirdParty/GltfPipeline/getAccessorByteStride.js\";\nimport numberOfComponentsForType from \"../ThirdParty/GltfPipeline/numberOfComponentsForType.js\";\nimport parseGlb from \"../ThirdParty/GltfPipeline/parseGlb.js\";\nimport updateVersion from \"../ThirdParty/GltfPipeline/updateVersion.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Axis from \"./Axis.js\";\nimport ModelLoadResources from \"./ModelLoadResources.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport processModelMaterialsCommon from \"./processModelMaterialsCommon.js\";\nimport processPbrMaterials from \"./processPbrMaterials.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\nimport Vector3DTilePrimitive from \"./Vector3DTilePrimitive.js\";\n\nvar boundingSphereCartesian3Scratch = new Cartesian3();\n\nvar ModelState = ModelUtility.ModelState;\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * A 3D model for classifying other 3D assets based on glTF, the runtime 3D asset format.\n * This is a special case when a model of a 3D tileset becomes a classifier when setting {@link Cesium3DTileset#classificationType}.\n *\n * @alias ClassificationModel\n * @constructor\n *\n * @private\n *\n * @param {Object} options Object with the following properties:\n * @param {ArrayBuffer|Uint8Array} options.gltf A binary glTF buffer.\n * @param {Boolean} [options.show=true] Determines if the model primitive will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for each draw command in the model.\n * @param {Boolean} [options.debugWireframe=false] For debugging only. Draws the model in wireframe.\n * @param {ClassificationType} [options.classificationType] What this model will classify.\n *\n * @exception {RuntimeError} Only binary glTF is supported.\n * @exception {RuntimeError} Buffer data must be embedded in the binary glTF.\n * @exception {RuntimeError} Only one node is supported for classification and it must have a mesh.\n * @exception {RuntimeError} Only one mesh is supported when using b3dm for classification.\n * @exception {RuntimeError} Only one primitive per mesh is supported when using b3dm for classification.\n * @exception {RuntimeError} The mesh must have a position attribute.\n * @exception {RuntimeError} The mesh must have a batch id attribute.\n */\nfunction ClassificationModel(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var gltf = options.gltf;\n if (gltf instanceof ArrayBuffer) {\n gltf = new Uint8Array(gltf);\n }\n\n if (gltf instanceof Uint8Array) {\n // Parse and update binary glTF\n gltf = parseGlb(gltf);\n updateVersion(gltf);\n addDefaults(gltf);\n processModelMaterialsCommon(gltf);\n processPbrMaterials(gltf);\n } else {\n throw new RuntimeError(\"Only binary glTF is supported as a classifier.\");\n }\n\n ForEach.buffer(gltf, function (buffer) {\n if (!defined(buffer.extras._pipeline.source)) {\n throw new RuntimeError(\n \"Buffer data must be embedded in the binary gltf.\"\n );\n }\n });\n\n var gltfNodes = gltf.nodes;\n var gltfMeshes = gltf.meshes;\n\n var gltfNode = gltfNodes[0];\n var meshId = gltfNode.mesh;\n if (gltfNodes.length !== 1 || !defined(meshId)) {\n throw new RuntimeError(\n \"Only one node is supported for classification and it must have a mesh.\"\n );\n }\n\n if (gltfMeshes.length !== 1) {\n throw new RuntimeError(\n \"Only one mesh is supported when using b3dm for classification.\"\n );\n }\n\n var gltfPrimitives = gltfMeshes[0].primitives;\n if (gltfPrimitives.length !== 1) {\n throw new RuntimeError(\n \"Only one primitive per mesh is supported when using b3dm for classification.\"\n );\n }\n\n var gltfPositionAttribute = gltfPrimitives[0].attributes.POSITION;\n if (!defined(gltfPositionAttribute)) {\n throw new RuntimeError(\"The mesh must have a position attribute.\");\n }\n\n var gltfBatchIdAttribute = gltfPrimitives[0].attributes._BATCHID;\n if (!defined(gltfBatchIdAttribute)) {\n throw new RuntimeError(\"The mesh must have a batch id attribute.\");\n }\n\n this._gltf = gltf;\n\n /**\n * Determines if the model primitive will be shown.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * When this is the identity matrix, the model is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n *\n * @default {@link Matrix4.IDENTITY}\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n * m.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = Matrix4.clone(this.modelMatrix);\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the model. A glTF primitive corresponds\n * to one draw command. A glTF mesh has an array of primitives, often of length one.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n this._debugShowBoundingVolume = false;\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the model in wireframe.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugWireframe = defaultValue(options.debugWireframe, false);\n this._debugWireframe = false;\n\n this._classificationType = options.classificationType;\n\n // Undocumented options\n this._vertexShaderLoaded = options.vertexShaderLoaded;\n this._classificationShaderLoaded = options.classificationShaderLoaded;\n this._uniformMapLoaded = options.uniformMapLoaded;\n this._pickIdLoaded = options.pickIdLoaded;\n this._ignoreCommands = defaultValue(options.ignoreCommands, false);\n this._upAxis = defaultValue(options.upAxis, Axis.Y);\n this._batchTable = options.batchTable;\n\n this._computedModelMatrix = new Matrix4(); // Derived from modelMatrix and axis\n this._initialRadius = undefined; // Radius without model's scale property, model-matrix scale, animations, or skins\n this._boundingSphere = undefined;\n this._scaledBoundingSphere = new BoundingSphere();\n this._state = ModelState.NEEDS_LOAD;\n this._loadResources = undefined;\n\n this._mode = undefined;\n this._dirty = false; // true when the model was transformed this frame\n\n this._nodeMatrix = new Matrix4();\n this._primitive = undefined;\n\n this._extensionsUsed = undefined; // Cached used glTF extensions\n this._extensionsRequired = undefined; // Cached required glTF extensions\n this._quantizedUniforms = undefined; // Quantized uniforms for WEB3D_quantized_attributes\n\n this._buffers = {};\n this._vertexArray = undefined;\n this._shaderProgram = undefined;\n this._uniformMap = undefined;\n\n this._geometryByteLength = 0;\n this._trianglesLength = 0;\n\n // CESIUM_RTC extension\n this._rtcCenter = undefined; // reference to either 3D or 2D\n this._rtcCenterEye = undefined; // in eye coordinates\n this._rtcCenter3D = undefined; // in world coordinates\n this._rtcCenter2D = undefined; // in projected world coordinates\n}\n\nObject.defineProperties(ClassificationModel.prototype, {\n /**\n * The object for the glTF JSON, including properties with default values omitted\n * from the JSON provided to this model.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @default undefined\n */\n gltf: {\n get: function () {\n return this._gltf;\n },\n },\n\n /**\n * The model's bounding sphere in its local coordinate system.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n *\n * @default undefined\n *\n * @exception {DeveloperError} The model is not loaded. Use ClassificationModel.readyPromise or wait for ClassificationModel.ready to be true.\n *\n * @example\n * // Center in WGS84 coordinates\n * var center = Cesium.Matrix4.multiplyByPoint(model.modelMatrix, model.boundingSphere.center, new Cesium.Cartesian3());\n */\n boundingSphere: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (this._state !== ModelState.LOADED) {\n throw new DeveloperError(\n \"The model is not loaded. Use ClassificationModel.readyPromise or wait for ClassificationModel.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n var modelMatrix = this.modelMatrix;\n var nonUniformScale = Matrix4.getScale(\n modelMatrix,\n boundingSphereCartesian3Scratch\n );\n\n var scaledBoundingSphere = this._scaledBoundingSphere;\n scaledBoundingSphere.center = Cartesian3.multiplyComponents(\n this._boundingSphere.center,\n nonUniformScale,\n scaledBoundingSphere.center\n );\n scaledBoundingSphere.radius =\n Cartesian3.maximumComponent(nonUniformScale) * this._initialRadius;\n\n if (defined(this._rtcCenter)) {\n Cartesian3.add(\n this._rtcCenter,\n scaledBoundingSphere.center,\n scaledBoundingSphere.center\n );\n }\n\n return scaledBoundingSphere;\n },\n },\n\n /**\n * When <code>true</code>, this model is ready to render, i.e., the external binary, image,\n * and shader files were downloaded and the WebGL resources were created. This is set to\n * <code>true</code> right before {@link ClassificationModel#readyPromise} is resolved.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets the promise that will be resolved when this model is ready to render, i.e., when the external binary, image,\n * and shader files were downloaded and the WebGL resources were created.\n * <p>\n * This promise is resolved at the end of the frame before the first frame the model is rendered in.\n * </p>\n *\n * @memberof ClassificationModel.prototype\n * @type {Promise.<ClassificationModel>}\n * @readonly\n *\n * @see ClassificationModel#ready\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Returns true if the model was transformed this frame\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n dirty: {\n get: function () {\n return this._dirty;\n },\n },\n\n /**\n * Returns an object with all of the glTF extensions used.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Object}\n * @readonly\n */\n extensionsUsed: {\n get: function () {\n if (!defined(this._extensionsUsed)) {\n this._extensionsUsed = ModelUtility.getUsedExtensions(this.gltf);\n }\n return this._extensionsUsed;\n },\n },\n\n /**\n * Returns an object with all of the glTF extensions required.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Object}\n * @readonly\n */\n extensionsRequired: {\n get: function () {\n if (!defined(this._extensionsRequired)) {\n this._extensionsRequired = ModelUtility.getRequiredExtensions(\n this.gltf\n );\n }\n return this._extensionsRequired;\n },\n },\n\n /**\n * Gets the model's up-axis.\n * By default models are y-up according to the glTF spec, however geo-referenced models will typically be z-up.\n *\n * @memberof ClassificationModel.prototype\n *\n * @type {Number}\n * @default Axis.Y\n * @readonly\n *\n * @private\n */\n upAxis: {\n get: function () {\n return this._upAxis;\n },\n },\n\n /**\n * Gets the model's triangle count.\n *\n * @private\n */\n trianglesLength: {\n get: function () {\n return this._trianglesLength;\n },\n },\n\n /**\n * Gets the model's geometry memory in bytes. This includes all vertex and index buffers.\n *\n * @private\n */\n geometryByteLength: {\n get: function () {\n return this._geometryByteLength;\n },\n },\n\n /**\n * Gets the model's texture memory in bytes.\n *\n * @private\n */\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Gets the model's classification type.\n * @memberof ClassificationModel.prototype\n * @type {ClassificationType}\n */\n classificationType: {\n get: function () {\n return this._classificationType;\n },\n },\n});\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction addBuffersToLoadResources(model) {\n var gltf = model.gltf;\n var loadResources = model._loadResources;\n ForEach.buffer(gltf, function (buffer, id) {\n loadResources.buffers[id] = buffer.extras._pipeline.source;\n });\n}\n\nfunction parseBufferViews(model) {\n var bufferViews = model.gltf.bufferViews;\n\n var vertexBuffersToCreate = model._loadResources.vertexBuffersToCreate;\n\n // Only ARRAY_BUFFER here. ELEMENT_ARRAY_BUFFER created below.\n ForEach.bufferView(model.gltf, function (bufferView, id) {\n if (bufferView.target === WebGLConstants.ARRAY_BUFFER) {\n vertexBuffersToCreate.enqueue(id);\n }\n });\n\n var indexBuffersToCreate = model._loadResources.indexBuffersToCreate;\n var indexBufferIds = {};\n\n // The Cesium Renderer requires knowing the datatype for an index buffer\n // at creation type, which is not part of the glTF bufferview so loop\n // through glTF accessors to create the bufferview's index buffer.\n ForEach.accessor(model.gltf, function (accessor) {\n var bufferViewId = accessor.bufferView;\n var bufferView = bufferViews[bufferViewId];\n\n if (\n bufferView.target === WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n !defined(indexBufferIds[bufferViewId])\n ) {\n indexBufferIds[bufferViewId] = true;\n indexBuffersToCreate.enqueue({\n id: bufferViewId,\n componentType: accessor.componentType,\n });\n }\n });\n}\n\nfunction createVertexBuffer(bufferViewId, model) {\n var loadResources = model._loadResources;\n var bufferViews = model.gltf.bufferViews;\n var bufferView = bufferViews[bufferViewId];\n var vertexBuffer = loadResources.getBuffer(bufferView);\n model._buffers[bufferViewId] = vertexBuffer;\n model._geometryByteLength += vertexBuffer.byteLength;\n}\n\nfunction createIndexBuffer(bufferViewId, componentType, model) {\n var loadResources = model._loadResources;\n var bufferViews = model.gltf.bufferViews;\n var bufferView = bufferViews[bufferViewId];\n var indexBuffer = {\n typedArray: loadResources.getBuffer(bufferView),\n indexDatatype: componentType,\n };\n model._buffers[bufferViewId] = indexBuffer;\n model._geometryByteLength += indexBuffer.typedArray.byteLength;\n}\n\nfunction createBuffers(model) {\n var loadResources = model._loadResources;\n\n if (loadResources.pendingBufferLoads !== 0) {\n return;\n }\n\n var vertexBuffersToCreate = loadResources.vertexBuffersToCreate;\n var indexBuffersToCreate = loadResources.indexBuffersToCreate;\n\n while (vertexBuffersToCreate.length > 0) {\n createVertexBuffer(vertexBuffersToCreate.dequeue(), model);\n }\n\n while (indexBuffersToCreate.length > 0) {\n var i = indexBuffersToCreate.dequeue();\n createIndexBuffer(i.id, i.componentType, model);\n }\n}\n\nfunction modifyShaderForQuantizedAttributes(shader, model) {\n var primitive = model.gltf.meshes[0].primitives[0];\n var result = ModelUtility.modifyShaderForQuantizedAttributes(\n model.gltf,\n primitive,\n shader\n );\n model._quantizedUniforms = result.uniforms;\n return result.shader;\n}\n\nfunction modifyShader(shader, callback) {\n if (defined(callback)) {\n shader = callback(shader);\n }\n return shader;\n}\n\nfunction createProgram(model) {\n var gltf = model.gltf;\n\n var positionName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"POSITION\"\n );\n var batchIdName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"_BATCHID\"\n );\n\n var attributeLocations = {};\n attributeLocations[positionName] = 0;\n attributeLocations[batchIdName] = 1;\n\n var modelViewProjectionName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"MODELVIEWPROJECTION\"\n );\n\n var uniformDecl;\n var toClip;\n\n if (!defined(modelViewProjectionName)) {\n var projectionName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"PROJECTION\"\n );\n var modelViewName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"MODELVIEW\"\n );\n if (!defined(modelViewName)) {\n modelViewName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"CESIUM_RTC_MODELVIEW\"\n );\n }\n\n uniformDecl =\n \"uniform mat4 \" +\n modelViewName +\n \";\\n\" +\n \"uniform mat4 \" +\n projectionName +\n \";\\n\";\n toClip =\n projectionName +\n \" * \" +\n modelViewName +\n \" * vec4(\" +\n positionName +\n \", 1.0)\";\n } else {\n uniformDecl = \"uniform mat4 \" + modelViewProjectionName + \";\\n\";\n toClip = modelViewProjectionName + \" * vec4(\" + positionName + \", 1.0)\";\n }\n\n var computePosition = \" vec4 positionInClipCoords = \" + toClip + \";\\n\";\n\n var vs =\n \"attribute vec3 \" +\n positionName +\n \";\\n\" +\n \"attribute float \" +\n batchIdName +\n \";\\n\" +\n uniformDecl +\n \"void main() {\\n\" +\n computePosition +\n \" gl_Position = czm_depthClamp(positionInClipCoords);\\n\" +\n \"}\\n\";\n var fs =\n \"#ifdef GL_EXT_frag_depth\\n\" +\n \"#extension GL_EXT_frag_depth : enable\\n\" +\n \"#endif\\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gl_FragColor = vec4(1.0); \\n\" +\n \" czm_writeDepthClamp();\\n\" +\n \"}\\n\";\n\n if (model.extensionsUsed.WEB3D_quantized_attributes) {\n vs = modifyShaderForQuantizedAttributes(vs, model);\n }\n\n var drawVS = modifyShader(vs, model._vertexShaderLoaded);\n var drawFS = modifyShader(fs, model._classificationShaderLoaded);\n\n model._shaderProgram = {\n vertexShaderSource: drawVS,\n fragmentShaderSource: drawFS,\n attributeLocations: attributeLocations,\n };\n}\n\nfunction getAttributeLocations() {\n return {\n POSITION: 0,\n _BATCHID: 1,\n };\n}\n\nfunction createVertexArray(model) {\n var loadResources = model._loadResources;\n if (!loadResources.finishedBuffersCreation() || defined(model._vertexArray)) {\n return;\n }\n\n var rendererBuffers = model._buffers;\n var gltf = model.gltf;\n var accessors = gltf.accessors;\n var meshes = gltf.meshes;\n var primitives = meshes[0].primitives;\n\n var primitive = primitives[0];\n var attributeLocations = getAttributeLocations();\n var attributes = {};\n ForEach.meshPrimitiveAttribute(primitive, function (\n accessorId,\n attributeName\n ) {\n // Skip if the attribute is not used by the material, e.g., because the asset\n // was exported with an attribute that wasn't used and the asset wasn't optimized.\n var attributeLocation = attributeLocations[attributeName];\n if (defined(attributeLocation)) {\n var a = accessors[accessorId];\n attributes[attributeName] = {\n index: attributeLocation,\n vertexBuffer: rendererBuffers[a.bufferView],\n componentsPerAttribute: numberOfComponentsForType(a.type),\n componentDatatype: a.componentType,\n offsetInBytes: a.byteOffset,\n strideInBytes: getAccessorByteStride(gltf, a),\n };\n }\n });\n\n var indexBuffer;\n if (defined(primitive.indices)) {\n var accessor = accessors[primitive.indices];\n indexBuffer = rendererBuffers[accessor.bufferView];\n }\n model._vertexArray = {\n attributes: attributes,\n indexBuffer: indexBuffer,\n };\n}\n\nvar gltfSemanticUniforms = {\n PROJECTION: function (uniformState, model) {\n return ModelUtility.getGltfSemanticUniforms().PROJECTION(\n uniformState,\n model\n );\n },\n MODELVIEW: function (uniformState, model) {\n return ModelUtility.getGltfSemanticUniforms().MODELVIEW(\n uniformState,\n model\n );\n },\n CESIUM_RTC_MODELVIEW: function (uniformState, model) {\n return ModelUtility.getGltfSemanticUniforms().CESIUM_RTC_MODELVIEW(\n uniformState,\n model\n );\n },\n MODELVIEWPROJECTION: function (uniformState, model) {\n return ModelUtility.getGltfSemanticUniforms().MODELVIEWPROJECTION(\n uniformState,\n model\n );\n },\n};\n\nfunction createUniformMap(model, context) {\n if (defined(model._uniformMap)) {\n return;\n }\n\n var uniformMap = {};\n ForEach.technique(model.gltf, function (technique) {\n ForEach.techniqueUniform(technique, function (uniform, uniformName) {\n if (\n !defined(uniform.semantic) ||\n !defined(gltfSemanticUniforms[uniform.semantic])\n ) {\n return;\n }\n\n uniformMap[uniformName] = gltfSemanticUniforms[uniform.semantic](\n context.uniformState,\n model\n );\n });\n });\n\n model._uniformMap = uniformMap;\n}\n\nfunction createUniformsForQuantizedAttributes(model, primitive) {\n return ModelUtility.createUniformsForQuantizedAttributes(\n model.gltf,\n primitive,\n model._quantizedUniforms\n );\n}\n\nfunction triangleCountFromPrimitiveIndices(primitive, indicesCount) {\n switch (primitive.mode) {\n case PrimitiveType.TRIANGLES:\n return indicesCount / 3;\n case PrimitiveType.TRIANGLE_STRIP:\n case PrimitiveType.TRIANGLE_FAN:\n return Math.max(indicesCount - 2, 0);\n default:\n return 0;\n }\n}\n\nfunction createPrimitive(model) {\n var batchTable = model._batchTable;\n\n var uniformMap = model._uniformMap;\n var vertexArray = model._vertexArray;\n\n var gltf = model.gltf;\n var accessors = gltf.accessors;\n var gltfMeshes = gltf.meshes;\n var primitive = gltfMeshes[0].primitives[0];\n var ix = accessors[primitive.indices];\n\n var positionAccessor = primitive.attributes.POSITION;\n var minMax = ModelUtility.getAccessorMinMax(gltf, positionAccessor);\n var boundingSphere = BoundingSphere.fromCornerPoints(\n Cartesian3.fromArray(minMax.min),\n Cartesian3.fromArray(minMax.max)\n );\n\n var offset;\n var count;\n if (defined(ix)) {\n count = ix.count;\n offset = ix.byteOffset / IndexDatatype.getSizeInBytes(ix.componentType); // glTF has offset in bytes. Cesium has offsets in indices\n } else {\n var positions = accessors[primitive.attributes.POSITION];\n count = positions.count;\n offset = 0;\n }\n\n // Update model triangle count using number of indices\n model._trianglesLength += triangleCountFromPrimitiveIndices(primitive, count);\n\n // Allow callback to modify the uniformMap\n if (defined(model._uniformMapLoaded)) {\n uniformMap = model._uniformMapLoaded(uniformMap);\n }\n\n // Add uniforms for decoding quantized attributes if used\n if (model.extensionsUsed.WEB3D_quantized_attributes) {\n var quantizedUniformMap = createUniformsForQuantizedAttributes(\n model,\n primitive\n );\n uniformMap = combine(uniformMap, quantizedUniformMap);\n }\n\n var attribute = vertexArray.attributes.POSITION;\n var componentDatatype = attribute.componentDatatype;\n var typedArray = attribute.vertexBuffer;\n var byteOffset = typedArray.byteOffset;\n var bufferLength =\n typedArray.byteLength / ComponentDatatype.getSizeInBytes(componentDatatype);\n var positionsBuffer = ComponentDatatype.createArrayBufferView(\n componentDatatype,\n typedArray.buffer,\n byteOffset,\n bufferLength\n );\n\n attribute = vertexArray.attributes._BATCHID;\n componentDatatype = attribute.componentDatatype;\n typedArray = attribute.vertexBuffer;\n byteOffset = typedArray.byteOffset;\n bufferLength =\n typedArray.byteLength / ComponentDatatype.getSizeInBytes(componentDatatype);\n var vertexBatchIds = ComponentDatatype.createArrayBufferView(\n componentDatatype,\n typedArray.buffer,\n byteOffset,\n bufferLength\n );\n\n var buffer = vertexArray.indexBuffer.typedArray;\n var indices;\n if (vertexArray.indexBuffer.indexDatatype === IndexDatatype.UNSIGNED_SHORT) {\n indices = new Uint16Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint16Array.BYTES_PER_ELEMENT\n );\n } else {\n indices = new Uint32Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint32Array.BYTES_PER_ELEMENT\n );\n }\n\n positionsBuffer = arraySlice(positionsBuffer);\n vertexBatchIds = arraySlice(vertexBatchIds);\n indices = arraySlice(indices, offset, offset + count);\n\n var batchIds = [];\n var indexCounts = [];\n var indexOffsets = [];\n var batchedIndices = [];\n\n var currentId = vertexBatchIds[indices[0]];\n batchIds.push(currentId);\n indexOffsets.push(0);\n\n var batchId;\n var indexOffset;\n var indexCount;\n var indicesLength = indices.length;\n for (var j = 1; j < indicesLength; ++j) {\n batchId = vertexBatchIds[indices[j]];\n if (batchId !== currentId) {\n indexOffset = indexOffsets[indexOffsets.length - 1];\n indexCount = j - indexOffset;\n\n batchIds.push(batchId);\n indexCounts.push(indexCount);\n indexOffsets.push(j);\n\n batchedIndices.push(\n new Vector3DTileBatch({\n offset: indexOffset,\n count: indexCount,\n batchIds: [currentId],\n color: Color.WHITE,\n })\n );\n\n currentId = batchId;\n }\n }\n\n indexOffset = indexOffsets[indexOffsets.length - 1];\n indexCount = indicesLength - indexOffset;\n\n indexCounts.push(indexCount);\n batchedIndices.push(\n new Vector3DTileBatch({\n offset: indexOffset,\n count: indexCount,\n batchIds: [currentId],\n color: Color.WHITE,\n })\n );\n\n var shader = model._shaderProgram;\n var vertexShaderSource = shader.vertexShaderSource;\n var fragmentShaderSource = shader.fragmentShaderSource;\n var attributeLocations = shader.attributeLocations;\n var pickId = defined(model._pickIdLoaded) ? model._pickIdLoaded() : undefined;\n\n model._primitive = new Vector3DTilePrimitive({\n classificationType: model._classificationType,\n positions: positionsBuffer,\n indices: indices,\n indexOffsets: indexOffsets,\n indexCounts: indexCounts,\n batchIds: batchIds,\n vertexBatchIds: vertexBatchIds,\n batchedIndices: batchedIndices,\n batchTable: batchTable,\n boundingVolume: new BoundingSphere(), // updated in update()\n _vertexShaderSource: vertexShaderSource,\n _fragmentShaderSource: fragmentShaderSource,\n _attributeLocations: attributeLocations,\n _uniformMap: uniformMap,\n _pickId: pickId,\n _modelMatrix: new Matrix4(), // updated in update()\n _boundingSphere: boundingSphere, // used to update boundingVolume\n });\n\n // Release CPU resources\n model._buffers = undefined;\n model._vertexArray = undefined;\n model._shaderProgram = undefined;\n model._uniformMap = undefined;\n}\n\nfunction createRuntimeNodes(model) {\n var loadResources = model._loadResources;\n if (!loadResources.finished()) {\n return;\n }\n\n if (defined(model._primitive)) {\n return;\n }\n\n var gltf = model.gltf;\n var nodes = gltf.nodes;\n var gltfNode = nodes[0];\n model._nodeMatrix = ModelUtility.getTransform(gltfNode, model._nodeMatrix);\n\n createPrimitive(model);\n}\n\nfunction createResources(model, frameState) {\n var context = frameState.context;\n\n ModelUtility.checkSupportedGlExtensions(model.gltf.glExtensionsUsed, context);\n createBuffers(model); // using glTF bufferViews\n createProgram(model);\n createVertexArray(model); // using glTF meshes\n createUniformMap(model, context); // using glTF materials/techniques\n createRuntimeNodes(model); // using glTF scene\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar scratchComputedTranslation = new Cartesian4();\nvar scratchComputedMatrixIn2D = new Matrix4();\n\nfunction updateNodeModelMatrix(\n model,\n modelTransformChanged,\n justLoaded,\n projection\n) {\n var computedModelMatrix = model._computedModelMatrix;\n\n if (model._mode !== SceneMode.SCENE3D && !model._ignoreCommands) {\n var translation = Matrix4.getColumn(\n computedModelMatrix,\n 3,\n scratchComputedTranslation\n );\n if (!Cartesian4.equals(translation, Cartesian4.UNIT_W)) {\n computedModelMatrix = Transforms.basisTo2D(\n projection,\n computedModelMatrix,\n scratchComputedMatrixIn2D\n );\n model._rtcCenter = model._rtcCenter3D;\n } else {\n var center = model.boundingSphere.center;\n var to2D = Transforms.wgs84To2DModelMatrix(\n projection,\n center,\n scratchComputedMatrixIn2D\n );\n computedModelMatrix = Matrix4.multiply(\n to2D,\n computedModelMatrix,\n scratchComputedMatrixIn2D\n );\n\n if (defined(model._rtcCenter)) {\n Matrix4.setTranslation(\n computedModelMatrix,\n Cartesian4.UNIT_W,\n computedModelMatrix\n );\n model._rtcCenter = model._rtcCenter2D;\n }\n }\n }\n\n var primitive = model._primitive;\n\n if (modelTransformChanged || justLoaded) {\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n model._nodeMatrix,\n primitive._modelMatrix\n );\n BoundingSphere.transform(\n primitive._boundingSphere,\n primitive._modelMatrix,\n primitive._boundingVolume\n );\n\n if (defined(model._rtcCenter)) {\n Cartesian3.add(\n model._rtcCenter,\n primitive._boundingVolume.center,\n primitive._boundingVolume.center\n );\n }\n }\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nClassificationModel.prototype.updateCommands = function (batchId, color) {\n this._primitive.updateCommands(batchId, color);\n};\n\nClassificationModel.prototype.update = function (frameState) {\n if (frameState.mode === SceneMode.MORPHING) {\n return;\n }\n\n if (!FeatureDetection.supportsWebP.initialized) {\n FeatureDetection.supportsWebP.initialize();\n return;\n }\n var supportsWebP = FeatureDetection.supportsWebP();\n\n if (this._state === ModelState.NEEDS_LOAD && defined(this.gltf)) {\n this._state = ModelState.LOADING;\n if (this._state !== ModelState.FAILED) {\n var extensions = this.gltf.extensions;\n if (defined(extensions) && defined(extensions.CESIUM_RTC)) {\n var center = Cartesian3.fromArray(extensions.CESIUM_RTC.center);\n if (!Cartesian3.equals(center, Cartesian3.ZERO)) {\n this._rtcCenter3D = center;\n\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var cartographic = ellipsoid.cartesianToCartographic(\n this._rtcCenter3D\n );\n var projectedCart = projection.project(cartographic);\n Cartesian3.fromElements(\n projectedCart.z,\n projectedCart.x,\n projectedCart.y,\n projectedCart\n );\n this._rtcCenter2D = projectedCart;\n\n this._rtcCenterEye = new Cartesian3();\n this._rtcCenter = this._rtcCenter3D;\n }\n }\n\n this._loadResources = new ModelLoadResources();\n ModelUtility.parseBuffers(this);\n }\n }\n\n var loadResources = this._loadResources;\n var justLoaded = false;\n\n if (this._state === ModelState.LOADING) {\n // Transition from LOADING -> LOADED once resources are downloaded and created.\n // Textures may continue to stream in while in the LOADED state.\n if (loadResources.pendingBufferLoads === 0) {\n ModelUtility.checkSupportedExtensions(\n this.extensionsRequired,\n supportsWebP\n );\n\n addBuffersToLoadResources(this);\n parseBufferViews(this);\n\n this._boundingSphere = ModelUtility.computeBoundingSphere(this);\n this._initialRadius = this._boundingSphere.radius;\n createResources(this, frameState);\n }\n if (loadResources.finished()) {\n this._state = ModelState.LOADED;\n justLoaded = true;\n }\n }\n\n if (defined(loadResources) && this._state === ModelState.LOADED) {\n if (!justLoaded) {\n createResources(this, frameState);\n }\n\n if (loadResources.finished()) {\n this._loadResources = undefined; // Clear CPU memory since WebGL resources were created.\n }\n }\n\n var show = this.show;\n\n if ((show && this._state === ModelState.LOADED) || justLoaded) {\n this._dirty = false;\n var modelMatrix = this.modelMatrix;\n\n var modeChanged = frameState.mode !== this._mode;\n this._mode = frameState.mode;\n\n // ClassificationModel's model matrix needs to be updated\n var modelTransformChanged =\n !Matrix4.equals(this._modelMatrix, modelMatrix) || modeChanged;\n\n if (modelTransformChanged || justLoaded) {\n Matrix4.clone(modelMatrix, this._modelMatrix);\n\n var computedModelMatrix = this._computedModelMatrix;\n Matrix4.clone(modelMatrix, computedModelMatrix);\n if (this._upAxis === Axis.Y) {\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n Axis.Y_UP_TO_Z_UP,\n computedModelMatrix\n );\n } else if (this._upAxis === Axis.X) {\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n Axis.X_UP_TO_Z_UP,\n computedModelMatrix\n );\n }\n }\n\n // Update modelMatrix throughout the graph as needed\n if (modelTransformChanged || justLoaded) {\n updateNodeModelMatrix(\n this,\n modelTransformChanged,\n justLoaded,\n frameState.mapProjection\n );\n this._dirty = true;\n }\n }\n\n if (justLoaded) {\n // Called after modelMatrix update.\n var model = this;\n frameState.afterRender.push(function () {\n model._ready = true;\n model._readyPromise.resolve(model);\n });\n return;\n }\n\n if (show && !this._ignoreCommands) {\n this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n this._primitive.debugWireframe = this.debugWireframe;\n this._primitive.update(frameState);\n }\n};\n\nClassificationModel.prototype.isDestroyed = function () {\n return false;\n};\n\nClassificationModel.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n return destroyObject(this);\n};\nexport default ClassificationModel;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A Plane in Hessian Normal form to be used with {@link ClippingPlaneCollection}.\n * Compatible with mathematics functions in {@link Plane}\n *\n * @alias ClippingPlane\n * @constructor\n *\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {Number} distance The shortest distance from the origin to the plane. The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on. If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n */\nfunction ClippingPlane(normal, distance) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"normal\", normal);\n Check.typeOf.number(\"distance\", distance);\n //>>includeEnd('debug');\n\n this._distance = distance;\n this._normal = new UpdateChangedCartesian3(normal, this);\n this.onChangeCallback = undefined;\n this.index = -1; // to be set by ClippingPlaneCollection\n}\n\nObject.defineProperties(ClippingPlane.prototype, {\n /**\n * The shortest distance from the origin to the plane. The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on. If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n *\n * @type {Number}\n * @memberof ClippingPlane.prototype\n */\n distance: {\n get: function () {\n return this._distance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n if (defined(this.onChangeCallback) && value !== this._distance) {\n this.onChangeCallback(this.index);\n }\n this._distance = value;\n },\n },\n /**\n * The plane's normal.\n *\n * @type {Cartesian3}\n * @memberof ClippingPlane.prototype\n */\n normal: {\n get: function () {\n return this._normal;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n //>>includeEnd('debug');\n if (\n defined(this.onChangeCallback) &&\n !Cartesian3.equals(this._normal._cartesian3, value)\n ) {\n this.onChangeCallback(this.index);\n }\n // Set without firing callback again\n Cartesian3.clone(value, this._normal._cartesian3);\n },\n },\n});\n\n/**\n * Create a ClippingPlane from a Plane object.\n *\n * @param {Plane} plane The plane containing parameters to copy\n * @param {ClippingPlane} [result] The object on which to store the result\n * @returns {ClippingPlane} The ClippingPlane generated from the plane's parameters.\n */\nClippingPlane.fromPlane = function (plane, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"plane\", plane);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new ClippingPlane(plane.normal, plane.distance);\n } else {\n result.normal = plane.normal;\n result.distance = plane.distance;\n }\n return result;\n};\n\n/**\n * Clones the ClippingPlane without setting its ownership.\n * @param {ClippingPlane} clippingPlane The ClippingPlane to be cloned\n * @param {ClippingPlane} [result] The object on which to store the cloned parameters.\n * @returns {ClippingPlane} a clone of the input ClippingPlane\n */\nClippingPlane.clone = function (clippingPlane, result) {\n if (!defined(result)) {\n return new ClippingPlane(clippingPlane.normal, clippingPlane.distance);\n }\n result.normal = clippingPlane.normal;\n result.distance = clippingPlane.distance;\n return result;\n};\n\n/**\n * Wrapper on Cartesian3 that allows detection of Plane changes from \"members of members,\" for example:\n *\n * var clippingPlane = new ClippingPlane(...);\n * clippingPlane.normal.z = -1.0;\n *\n * @private\n */\nfunction UpdateChangedCartesian3(normal, clippingPlane) {\n this._clippingPlane = clippingPlane;\n this._cartesian3 = Cartesian3.clone(normal);\n}\n\nObject.defineProperties(UpdateChangedCartesian3.prototype, {\n x: {\n get: function () {\n return this._cartesian3.x;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n if (\n defined(this._clippingPlane.onChangeCallback) &&\n value !== this._cartesian3.x\n ) {\n this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n }\n this._cartesian3.x = value;\n },\n },\n y: {\n get: function () {\n return this._cartesian3.y;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n if (\n defined(this._clippingPlane.onChangeCallback) &&\n value !== this._cartesian3.y\n ) {\n this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n }\n this._cartesian3.y = value;\n },\n },\n z: {\n get: function () {\n return this._cartesian3.z;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n if (\n defined(this._clippingPlane.onChangeCallback) &&\n value !== this._cartesian3.z\n ) {\n this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n }\n this._cartesian3.z = value;\n },\n },\n});\nexport default ClippingPlane;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Plane from \"../Core/Plane.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport ClippingPlane from \"./ClippingPlane.js\";\n\n/**\n * Specifies a set of clipping planes. Clipping planes selectively disable rendering in a region on the\n * outside of the specified list of {@link ClippingPlane} objects for a single gltf model, 3D Tileset, or the globe.\n * <p>\n * In general the clipping planes' coordinates are relative to the object they're attached to, so a plane with distance set to 0 will clip\n * through the center of the object.\n * </p>\n * <p>\n * For 3D Tiles, the root tile's transform is used to position the clipping planes. If a transform is not defined, the root tile's {@link Cesium3DTile#boundingSphere} is used instead.\n * </p>\n *\n * @alias ClippingPlaneCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {ClippingPlane[]} [options.planes=[]] An array of {@link ClippingPlane} objects used to selectively disable rendering on the outside of each plane.\n * @param {Boolean} [options.enabled=true] Determines whether the clipping planes are active.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix specifying an additional transform relative to the clipping planes original coordinate system.\n * @param {Boolean} [options.unionClippingRegions=false] If true, a region will be clipped if it is on the outside of any plane in the collection. Otherwise, a region will only be clipped if it is on the outside of every plane.\n * @param {Color} [options.edgeColor=Color.WHITE] The color applied to highlight the edge along which an object is clipped.\n * @param {Number} [options.edgeWidth=0.0] The width, in pixels, of the highlight applied to the edge along which an object is clipped.\n *\n * @demo {@link https://sandcastle.cesium.com/?src=3D%20Tiles%20Clipping%20Planes.html|Clipping 3D Tiles and glTF models.}\n * @demo {@link https://sandcastle.cesium.com/?src=Terrain%20Clipping%20Planes.html|Clipping the Globe.}\n *\n * @example\n * // This clipping plane's distance is positive, which means its normal\n * // is facing the origin. This will clip everything that is behind\n * // the plane, which is anything with y coordinate < -5.\n * var clippingPlanes = new Cesium.ClippingPlaneCollection({\n * planes : [\n * new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), 5.0)\n * ],\n * });\n * // Create an entity and attach the ClippingPlaneCollection to the model.\n * var entity = viewer.entities.add({\n * position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 10000),\n * model : {\n * uri : 'model.gltf',\n * minimumPixelSize : 128,\n * maximumScale : 20000,\n * clippingPlanes : clippingPlanes\n * }\n * });\n * viewer.zoomTo(entity);\n */\nfunction ClippingPlaneCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._planes = [];\n\n // Do partial texture updates if just one plane is dirty.\n // If many planes are dirty, refresh the entire texture.\n this._dirtyIndex = -1;\n this._multipleDirtyPlanes = false;\n\n this._enabled = defaultValue(options.enabled, true);\n\n /**\n * The 4x4 transformation matrix specifying an additional transform relative to the clipping planes\n * original coordinate system.\n *\n * @type {Matrix4}\n * @default Matrix4.IDENTITY\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n\n /**\n * The color applied to highlight the edge along which an object is clipped.\n *\n * @type {Color}\n * @default Color.WHITE\n */\n this.edgeColor = Color.clone(defaultValue(options.edgeColor, Color.WHITE));\n\n /**\n * The width, in pixels, of the highlight applied to the edge along which an object is clipped.\n *\n * @type {Number}\n * @default 0.0\n */\n this.edgeWidth = defaultValue(options.edgeWidth, 0.0);\n\n /**\n * An event triggered when a new clipping plane is added to the collection. Event handlers\n * are passed the new plane and the index at which it was added.\n * @type {Event}\n * @default Event()\n */\n this.planeAdded = new Event();\n\n /**\n * An event triggered when a new clipping plane is removed from the collection. Event handlers\n * are passed the new plane and the index from which it was removed.\n * @type {Event}\n * @default Event()\n */\n this.planeRemoved = new Event();\n\n // If this ClippingPlaneCollection has an owner, only its owner should update or destroy it.\n // This is because in a Cesium3DTileset multiple models may reference the tileset's ClippingPlaneCollection.\n this._owner = undefined;\n\n var unionClippingRegions = defaultValue(options.unionClippingRegions, false);\n this._unionClippingRegions = unionClippingRegions;\n this._testIntersection = unionClippingRegions\n ? unionIntersectFunction\n : defaultIntersectFunction;\n\n this._uint8View = undefined;\n this._float32View = undefined;\n\n this._clippingPlanesTexture = undefined;\n\n // Add each ClippingPlane object.\n var planes = options.planes;\n if (defined(planes)) {\n var planesLength = planes.length;\n for (var i = 0; i < planesLength; ++i) {\n this.add(planes[i]);\n }\n }\n}\n\nfunction unionIntersectFunction(value) {\n return value === Intersect.OUTSIDE;\n}\n\nfunction defaultIntersectFunction(value) {\n return value === Intersect.INSIDE;\n}\n\nObject.defineProperties(ClippingPlaneCollection.prototype, {\n /**\n * Returns the number of planes in this collection. This is commonly used with\n * {@link ClippingPlaneCollection#get} to iterate over all the planes\n * in the collection.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._planes.length;\n },\n },\n\n /**\n * If true, a region will be clipped if it is on the outside of any plane in the\n * collection. Otherwise, a region will only be clipped if it is on the\n * outside of every plane.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @type {Boolean}\n * @default false\n */\n unionClippingRegions: {\n get: function () {\n return this._unionClippingRegions;\n },\n set: function (value) {\n if (this._unionClippingRegions === value) {\n return;\n }\n this._unionClippingRegions = value;\n this._testIntersection = value\n ? unionIntersectFunction\n : defaultIntersectFunction;\n },\n },\n\n /**\n * If true, clipping will be enabled.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @type {Boolean}\n * @default true\n */\n enabled: {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n if (this._enabled === value) {\n return;\n }\n this._enabled = value;\n },\n },\n\n /**\n * Returns a texture containing packed, untransformed clipping planes.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @type {Texture}\n * @readonly\n * @private\n */\n texture: {\n get: function () {\n return this._clippingPlanesTexture;\n },\n },\n\n /**\n * A reference to the ClippingPlaneCollection's owner, if any.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @readonly\n * @private\n */\n owner: {\n get: function () {\n return this._owner;\n },\n },\n\n /**\n * Returns a Number encapsulating the state for this ClippingPlaneCollection.\n *\n * Clipping mode is encoded in the sign of the number, which is just the plane count.\n * Used for checking if shader regeneration is necessary.\n *\n * @memberof ClippingPlaneCollection.prototype\n * @returns {Number} A Number that describes the ClippingPlaneCollection's state.\n * @readonly\n * @private\n */\n clippingPlanesState: {\n get: function () {\n return this._unionClippingRegions\n ? this._planes.length\n : -this._planes.length;\n },\n },\n});\n\nfunction setIndexDirty(collection, index) {\n // If there's already a different _dirtyIndex set, more than one plane has changed since update.\n // Entire texture must be reloaded\n collection._multipleDirtyPlanes =\n collection._multipleDirtyPlanes ||\n (collection._dirtyIndex !== -1 && collection._dirtyIndex !== index);\n collection._dirtyIndex = index;\n}\n\n/**\n * Adds the specified {@link ClippingPlane} to the collection to be used to selectively disable rendering\n * on the outside of each plane. Use {@link ClippingPlaneCollection#unionClippingRegions} to modify\n * how modify the clipping behavior of multiple planes.\n *\n * @param {ClippingPlane} plane The ClippingPlane to add to the collection.\n *\n * @see ClippingPlaneCollection#unionClippingRegions\n * @see ClippingPlaneCollection#remove\n * @see ClippingPlaneCollection#removeAll\n */\nClippingPlaneCollection.prototype.add = function (plane) {\n var newPlaneIndex = this._planes.length;\n\n var that = this;\n plane.onChangeCallback = function (index) {\n setIndexDirty(that, index);\n };\n plane.index = newPlaneIndex;\n\n setIndexDirty(this, newPlaneIndex);\n this._planes.push(plane);\n this.planeAdded.raiseEvent(plane, newPlaneIndex);\n};\n\n/**\n * Returns the plane in the collection at the specified index. Indices are zero-based\n * and increase as planes are added. Removing a plane shifts all planes after\n * it to the left, changing their indices. This function is commonly used with\n * {@link ClippingPlaneCollection#length} to iterate over all the planes\n * in the collection.\n *\n * @param {Number} index The zero-based index of the plane.\n * @returns {ClippingPlane} The ClippingPlane at the specified index.\n *\n * @see ClippingPlaneCollection#length\n */\nClippingPlaneCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"index\", index);\n //>>includeEnd('debug');\n\n return this._planes[index];\n};\n\nfunction indexOf(planes, plane) {\n var length = planes.length;\n for (var i = 0; i < length; ++i) {\n if (Plane.equals(planes[i], plane)) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Checks whether this collection contains a ClippingPlane equal to the given ClippingPlane.\n *\n * @param {ClippingPlane} [clippingPlane] The ClippingPlane to check for.\n * @returns {Boolean} true if this collection contains the ClippingPlane, false otherwise.\n *\n * @see ClippingPlaneCollection#get\n */\nClippingPlaneCollection.prototype.contains = function (clippingPlane) {\n return indexOf(this._planes, clippingPlane) !== -1;\n};\n\n/**\n * Removes the first occurrence of the given ClippingPlane from the collection.\n *\n * @param {ClippingPlane} clippingPlane\n * @returns {Boolean} <code>true</code> if the plane was removed; <code>false</code> if the plane was not found in the collection.\n *\n * @see ClippingPlaneCollection#add\n * @see ClippingPlaneCollection#contains\n * @see ClippingPlaneCollection#removeAll\n */\nClippingPlaneCollection.prototype.remove = function (clippingPlane) {\n var planes = this._planes;\n var index = indexOf(planes, clippingPlane);\n\n if (index === -1) {\n return false;\n }\n\n // Unlink this ClippingPlaneCollection from the ClippingPlane\n if (clippingPlane instanceof ClippingPlane) {\n clippingPlane.onChangeCallback = undefined;\n clippingPlane.index = -1;\n }\n\n // Shift and update indices\n var length = planes.length - 1;\n for (var i = index; i < length; ++i) {\n var planeToKeep = planes[i + 1];\n planes[i] = planeToKeep;\n if (planeToKeep instanceof ClippingPlane) {\n planeToKeep.index = i;\n }\n }\n\n // Indicate planes texture is dirty\n this._multipleDirtyPlanes = true;\n planes.length = length;\n\n this.planeRemoved.raiseEvent(clippingPlane, index);\n\n return true;\n};\n\n/**\n * Removes all planes from the collection.\n *\n * @see ClippingPlaneCollection#add\n * @see ClippingPlaneCollection#remove\n */\nClippingPlaneCollection.prototype.removeAll = function () {\n // Dereference this ClippingPlaneCollection from all ClippingPlanes\n var planes = this._planes;\n var planesCount = planes.length;\n for (var i = 0; i < planesCount; ++i) {\n var plane = planes[i];\n if (plane instanceof ClippingPlane) {\n plane.onChangeCallback = undefined;\n plane.index = -1;\n }\n this.planeRemoved.raiseEvent(plane, i);\n }\n this._multipleDirtyPlanes = true;\n this._planes = [];\n};\n\nvar distanceEncodeScratch = new Cartesian4();\nvar oct32EncodeScratch = new Cartesian4();\nfunction packPlanesAsUint8(clippingPlaneCollection, startIndex, endIndex) {\n var uint8View = clippingPlaneCollection._uint8View;\n var planes = clippingPlaneCollection._planes;\n var byteIndex = 0;\n for (var i = startIndex; i < endIndex; ++i) {\n var plane = planes[i];\n\n var oct32Normal = AttributeCompression.octEncodeToCartesian4(\n plane.normal,\n oct32EncodeScratch\n );\n uint8View[byteIndex] = oct32Normal.x;\n uint8View[byteIndex + 1] = oct32Normal.y;\n uint8View[byteIndex + 2] = oct32Normal.z;\n uint8View[byteIndex + 3] = oct32Normal.w;\n\n var encodedDistance = Cartesian4.packFloat(\n plane.distance,\n distanceEncodeScratch\n );\n uint8View[byteIndex + 4] = encodedDistance.x;\n uint8View[byteIndex + 5] = encodedDistance.y;\n uint8View[byteIndex + 6] = encodedDistance.z;\n uint8View[byteIndex + 7] = encodedDistance.w;\n\n byteIndex += 8;\n }\n}\n\n// Pack starting at the beginning of the buffer to allow partial update\nfunction packPlanesAsFloats(clippingPlaneCollection, startIndex, endIndex) {\n var float32View = clippingPlaneCollection._float32View;\n var planes = clippingPlaneCollection._planes;\n\n var floatIndex = 0;\n for (var i = startIndex; i < endIndex; ++i) {\n var plane = planes[i];\n var normal = plane.normal;\n\n float32View[floatIndex] = normal.x;\n float32View[floatIndex + 1] = normal.y;\n float32View[floatIndex + 2] = normal.z;\n float32View[floatIndex + 3] = plane.distance;\n\n floatIndex += 4; // each plane is 4 floats\n }\n}\n\nfunction computeTextureResolution(pixelsNeeded, result) {\n var maxSize = ContextLimits.maximumTextureSize;\n result.x = Math.min(pixelsNeeded, maxSize);\n result.y = Math.ceil(pixelsNeeded / result.x);\n return result;\n}\n\nvar textureResolutionScratch = new Cartesian2();\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for clipping planes.\n * <p>\n * Do not call this function directly.\n * </p>\n */\nClippingPlaneCollection.prototype.update = function (frameState) {\n var clippingPlanesTexture = this._clippingPlanesTexture;\n var context = frameState.context;\n var useFloatTexture = ClippingPlaneCollection.useFloatTexture(context);\n\n // Compute texture requirements for current planes\n // In RGBA FLOAT, A plane is 4 floats packed to a RGBA.\n // In RGBA UNSIGNED_BYTE, A plane is a float in [0, 1) packed to RGBA and an Oct32 quantized normal,\n // so 8 bits or 2 pixels in RGBA.\n var pixelsNeeded = useFloatTexture ? this.length : this.length * 2;\n\n if (defined(clippingPlanesTexture)) {\n var currentPixelCount =\n clippingPlanesTexture.width * clippingPlanesTexture.height;\n // Recreate the texture to double current requirement if it isn't big enough or is 4 times larger than it needs to be.\n // Optimization note: this isn't exactly the classic resizeable array algorithm\n // * not necessarily checking for resize after each add/remove operation\n // * random-access deletes instead of just pops\n // * alloc ops likely more expensive than demonstrable via big-O analysis\n if (\n currentPixelCount < pixelsNeeded ||\n pixelsNeeded < 0.25 * currentPixelCount\n ) {\n clippingPlanesTexture.destroy();\n clippingPlanesTexture = undefined;\n this._clippingPlanesTexture = undefined;\n }\n }\n\n // If there are no clipping planes, there's nothing to update.\n if (this.length === 0) {\n return;\n }\n\n if (!defined(clippingPlanesTexture)) {\n var requiredResolution = computeTextureResolution(\n pixelsNeeded,\n textureResolutionScratch\n );\n // Allocate twice as much space as needed to avoid frequent texture reallocation.\n // Allocate in the Y direction, since texture may be as wide as context texture support.\n requiredResolution.y *= 2;\n\n if (useFloatTexture) {\n clippingPlanesTexture = new Texture({\n context: context,\n width: requiredResolution.x,\n height: requiredResolution.y,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.FLOAT,\n sampler: Sampler.NEAREST,\n flipY: false,\n });\n this._float32View = new Float32Array(\n requiredResolution.x * requiredResolution.y * 4\n );\n } else {\n clippingPlanesTexture = new Texture({\n context: context,\n width: requiredResolution.x,\n height: requiredResolution.y,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n flipY: false,\n });\n this._uint8View = new Uint8Array(\n requiredResolution.x * requiredResolution.y * 4\n );\n }\n\n this._clippingPlanesTexture = clippingPlanesTexture;\n this._multipleDirtyPlanes = true;\n }\n\n var dirtyIndex = this._dirtyIndex;\n if (!this._multipleDirtyPlanes && dirtyIndex === -1) {\n return;\n }\n if (!this._multipleDirtyPlanes) {\n // partial updates possible\n var offsetX = 0;\n var offsetY = 0;\n if (useFloatTexture) {\n offsetY = Math.floor(dirtyIndex / clippingPlanesTexture.width);\n offsetX = Math.floor(dirtyIndex - offsetY * clippingPlanesTexture.width);\n\n packPlanesAsFloats(this, dirtyIndex, dirtyIndex + 1);\n clippingPlanesTexture.copyFrom(\n {\n width: 1,\n height: 1,\n arrayBufferView: this._float32View,\n },\n offsetX,\n offsetY\n );\n } else {\n offsetY = Math.floor((dirtyIndex * 2) / clippingPlanesTexture.width);\n offsetX = Math.floor(\n dirtyIndex * 2 - offsetY * clippingPlanesTexture.width\n );\n packPlanesAsUint8(this, dirtyIndex, dirtyIndex + 1);\n clippingPlanesTexture.copyFrom(\n {\n width: 2,\n height: 1,\n arrayBufferView: this._uint8View,\n },\n offsetX,\n offsetY\n );\n }\n } else if (useFloatTexture) {\n packPlanesAsFloats(this, 0, this._planes.length);\n clippingPlanesTexture.copyFrom({\n width: clippingPlanesTexture.width,\n height: clippingPlanesTexture.height,\n arrayBufferView: this._float32View,\n });\n } else {\n packPlanesAsUint8(this, 0, this._planes.length);\n clippingPlanesTexture.copyFrom({\n width: clippingPlanesTexture.width,\n height: clippingPlanesTexture.height,\n arrayBufferView: this._uint8View,\n });\n }\n\n this._multipleDirtyPlanes = false;\n this._dirtyIndex = -1;\n};\n\nvar scratchMatrix = new Matrix4();\nvar scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\n/**\n * Determines the type intersection with the planes of this ClippingPlaneCollection instance and the specified {@link TileBoundingVolume}.\n * @private\n *\n * @param {Object} tileBoundingVolume The volume to determine the intersection with the planes.\n * @param {Matrix4} [transform] An optional, additional matrix to transform the plane to world coordinates.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire volume is on the side of the planes\n * the normal is pointing and should be entirely rendered, {@link Intersect.OUTSIDE}\n * if the entire volume is on the opposite side and should be clipped, and\n * {@link Intersect.INTERSECTING} if the volume intersects the planes.\n */\nClippingPlaneCollection.prototype.computeIntersectionWithBoundingVolume = function (\n tileBoundingVolume,\n transform\n) {\n var planes = this._planes;\n var length = planes.length;\n\n var modelMatrix = this.modelMatrix;\n if (defined(transform)) {\n modelMatrix = Matrix4.multiply(transform, modelMatrix, scratchMatrix);\n }\n\n // If the collection is not set to union the clipping regions, the volume must be outside of all planes to be\n // considered completely clipped. If the collection is set to union the clipping regions, if the volume can be\n // outside any the planes, it is considered completely clipped.\n // Lastly, if not completely clipped, if any plane is intersecting, more calculations must be performed.\n var intersection = Intersect.INSIDE;\n if (!this.unionClippingRegions && length > 0) {\n intersection = Intersect.OUTSIDE;\n }\n\n for (var i = 0; i < length; ++i) {\n var plane = planes[i];\n\n Plane.transform(plane, modelMatrix, scratchPlane); // ClippingPlane can be used for Plane math\n\n var value = tileBoundingVolume.intersectPlane(scratchPlane);\n if (value === Intersect.INTERSECTING) {\n intersection = value;\n } else if (this._testIntersection(value)) {\n return value;\n }\n }\n\n return intersection;\n};\n\n/**\n * Sets the owner for the input ClippingPlaneCollection if there wasn't another owner.\n * Destroys the owner's previous ClippingPlaneCollection if setting is successful.\n *\n * @param {ClippingPlaneCollection} [clippingPlaneCollection] A ClippingPlaneCollection (or undefined) being attached to an object\n * @param {Object} owner An Object that should receive the new ClippingPlaneCollection\n * @param {String} key The Key for the Object to reference the ClippingPlaneCollection\n * @private\n */\nClippingPlaneCollection.setOwner = function (\n clippingPlaneCollection,\n owner,\n key\n) {\n // Don't destroy the ClippingPlaneCollection if it is already owned by newOwner\n if (clippingPlaneCollection === owner[key]) {\n return;\n }\n // Destroy the existing ClippingPlaneCollection, if any\n owner[key] = owner[key] && owner[key].destroy();\n if (defined(clippingPlaneCollection)) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(clippingPlaneCollection._owner)) {\n throw new DeveloperError(\n \"ClippingPlaneCollection should only be assigned to one object\"\n );\n }\n //>>includeEnd('debug');\n clippingPlaneCollection._owner = owner;\n owner[key] = clippingPlaneCollection;\n }\n};\n\n/**\n * Function for checking if the context will allow clipping planes with floating point textures.\n *\n * @param {Context} context The Context that will contain clipped objects and clipping textures.\n * @returns {Boolean} <code>true</code> if floating point textures can be used for clipping planes.\n * @private\n */\nClippingPlaneCollection.useFloatTexture = function (context) {\n return context.floatingPointTexture;\n};\n\n/**\n * Function for getting the clipping plane collection's texture resolution.\n * If the ClippingPlaneCollection hasn't been updated, returns the resolution that will be\n * allocated based on the current plane count.\n *\n * @param {ClippingPlaneCollection} clippingPlaneCollection The clipping plane collection\n * @param {Context} context The rendering context\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nClippingPlaneCollection.getTextureResolution = function (\n clippingPlaneCollection,\n context,\n result\n) {\n var texture = clippingPlaneCollection.texture;\n if (defined(texture)) {\n result.x = texture.width;\n result.y = texture.height;\n return result;\n }\n\n var pixelsNeeded = ClippingPlaneCollection.useFloatTexture(context)\n ? clippingPlaneCollection.length\n : clippingPlaneCollection.length * 2;\n var requiredResolution = computeTextureResolution(pixelsNeeded, result);\n\n // Allocate twice as much space as needed to avoid frequent texture reallocation.\n requiredResolution.y *= 2;\n return requiredResolution;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ClippingPlaneCollection#destroy\n */\nClippingPlaneCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * clippingPlanes = clippingPlanes && clippingPlanes .destroy();\n *\n * @see ClippingPlaneCollection#isDestroyed\n */\nClippingPlaneCollection.prototype.destroy = function () {\n this._clippingPlanesTexture =\n this._clippingPlanesTexture && this._clippingPlanesTexture.destroy();\n return destroyObject(this);\n};\nexport default ClippingPlaneCollection;\n","import CesiumMath from \"../Core/Math.js\";\n\n/**\n * Defines different modes for blending between a target color and a primitive's source color.\n *\n * HIGHLIGHT multiplies the source color by the target color\n * REPLACE replaces the source color with the target color\n * MIX blends the source color and target color together\n *\n * @enum {Number}\n *\n * @see Model.colorBlendMode\n */\nvar ColorBlendMode = {\n HIGHLIGHT: 0,\n REPLACE: 1,\n MIX: 2,\n};\n\n/**\n * @private\n */\nColorBlendMode.getColorBlend = function (colorBlendMode, colorBlendAmount) {\n if (colorBlendMode === ColorBlendMode.HIGHLIGHT) {\n return 0.0;\n } else if (colorBlendMode === ColorBlendMode.REPLACE) {\n return 1.0;\n } else if (colorBlendMode === ColorBlendMode.MIX) {\n // The value 0.0 is reserved for highlight, so clamp to just above 0.0.\n return CesiumMath.clamp(colorBlendAmount, CesiumMath.EPSILON4, 1.0);\n }\n};\nexport default Object.freeze(ColorBlendMode);\n","import arraySlice from \"../Core/arraySlice.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * @private\n */\nfunction DracoLoader() {}\n\n// Maximum concurrency to use when decoding draco models\nDracoLoader._maxDecodingConcurrency = Math.max(\n FeatureDetection.hardwareConcurrency - 1,\n 1\n);\n\n// Exposed for testing purposes\nDracoLoader._decoderTaskProcessor = undefined;\nDracoLoader._taskProcessorReady = false;\nDracoLoader._getDecoderTaskProcessor = function () {\n if (!defined(DracoLoader._decoderTaskProcessor)) {\n var processor = new TaskProcessor(\n \"decodeDraco\",\n DracoLoader._maxDecodingConcurrency\n );\n processor\n .initWebAssemblyModule({\n modulePath: \"ThirdParty/Workers/draco_wasm_wrapper.js\",\n wasmBinaryFile: \"ThirdParty/draco_decoder.wasm\",\n fallbackModulePath: \"ThirdParty/Workers/draco_decoder.js\",\n })\n .then(function () {\n DracoLoader._taskProcessorReady = true;\n });\n DracoLoader._decoderTaskProcessor = processor;\n }\n\n return DracoLoader._decoderTaskProcessor;\n};\n\n/**\n * Returns true if the model uses or requires KHR_draco_mesh_compression.\n *\n * @private\n */\nDracoLoader.hasExtension = function (model) {\n return (\n defined(model.extensionsRequired.KHR_draco_mesh_compression) ||\n defined(model.extensionsUsed.KHR_draco_mesh_compression)\n );\n};\n\nfunction addBufferToLoadResources(loadResources, typedArray) {\n // Create a new id to differentiate from original glTF bufferViews\n var bufferViewId =\n \"runtime.\" + Object.keys(loadResources.createdBufferViews).length;\n\n var loadResourceBuffers = loadResources.buffers;\n var id = Object.keys(loadResourceBuffers).length;\n loadResourceBuffers[id] = typedArray;\n loadResources.createdBufferViews[bufferViewId] = {\n buffer: id,\n byteOffset: 0,\n byteLength: typedArray.byteLength,\n };\n\n return bufferViewId;\n}\n\nfunction addNewVertexBuffer(typedArray, model, context) {\n var loadResources = model._loadResources;\n var id = addBufferToLoadResources(loadResources, typedArray);\n loadResources.vertexBuffersToCreate.enqueue(id);\n return id;\n}\n\nfunction addNewIndexBuffer(indexArray, model, context) {\n var typedArray = indexArray.typedArray;\n var loadResources = model._loadResources;\n var id = addBufferToLoadResources(loadResources, typedArray);\n loadResources.indexBuffersToCreate.enqueue({\n id: id,\n componentType: ComponentDatatype.fromTypedArray(typedArray),\n });\n\n return {\n bufferViewId: id,\n numberOfIndices: indexArray.numberOfIndices,\n };\n}\n\nfunction scheduleDecodingTask(\n decoderTaskProcessor,\n model,\n loadResources,\n context\n) {\n if (!DracoLoader._taskProcessorReady) {\n // The task processor is not ready to schedule tasks\n return;\n }\n\n var taskData = loadResources.primitivesToDecode.peek();\n if (!defined(taskData)) {\n // All primitives are processing\n return;\n }\n\n var promise = decoderTaskProcessor.scheduleTask(taskData, [\n taskData.array.buffer,\n ]);\n if (!defined(promise)) {\n // Cannot schedule another task this frame\n return;\n }\n\n loadResources.activeDecodingTasks++;\n loadResources.primitivesToDecode.dequeue();\n return promise.then(function (result) {\n loadResources.activeDecodingTasks--;\n\n var decodedIndexBuffer = addNewIndexBuffer(\n result.indexArray,\n model,\n context\n );\n\n var attributes = {};\n var decodedAttributeData = result.attributeData;\n for (var attributeName in decodedAttributeData) {\n if (decodedAttributeData.hasOwnProperty(attributeName)) {\n var attribute = decodedAttributeData[attributeName];\n var vertexArray = attribute.array;\n var vertexBufferView = addNewVertexBuffer(vertexArray, model, context);\n\n var data = attribute.data;\n data.bufferView = vertexBufferView;\n\n attributes[attributeName] = data;\n }\n }\n\n model._decodedData[taskData.mesh + \".primitive.\" + taskData.primitive] = {\n bufferView: decodedIndexBuffer.bufferViewId,\n numberOfIndices: decodedIndexBuffer.numberOfIndices,\n attributes: attributes,\n };\n });\n}\n\nDracoLoader._decodedModelResourceCache = undefined;\n\n/**\n * Parses draco extension on model primitives and\n * adds the decoding data to the model's load resources.\n *\n * @private\n */\nDracoLoader.parse = function (model, context) {\n if (!DracoLoader.hasExtension(model)) {\n return;\n }\n\n var loadResources = model._loadResources;\n var cacheKey = model.cacheKey;\n if (defined(cacheKey)) {\n if (!defined(DracoLoader._decodedModelResourceCache)) {\n if (!defined(context.cache.modelDecodingCache)) {\n context.cache.modelDecodingCache = {};\n }\n\n DracoLoader._decodedModelResourceCache = context.cache.modelDecodingCache;\n }\n\n // Decoded data for model will be loaded from cache\n var cachedData = DracoLoader._decodedModelResourceCache[cacheKey];\n if (defined(cachedData)) {\n cachedData.count++;\n loadResources.pendingDecodingCache = true;\n return;\n }\n }\n\n var dequantizeInShader = model._dequantizeInShader;\n var gltf = model.gltf;\n ForEach.mesh(gltf, function (mesh, meshId) {\n ForEach.meshPrimitive(mesh, function (primitive, primitiveId) {\n if (!defined(primitive.extensions)) {\n return;\n }\n\n var compressionData = primitive.extensions.KHR_draco_mesh_compression;\n if (!defined(compressionData)) {\n return;\n }\n\n var bufferView = gltf.bufferViews[compressionData.bufferView];\n var typedArray = arraySlice(\n gltf.buffers[bufferView.buffer].extras._pipeline.source,\n bufferView.byteOffset,\n bufferView.byteOffset + bufferView.byteLength\n );\n loadResources.primitivesToDecode.enqueue({\n mesh: meshId,\n primitive: primitiveId,\n array: typedArray,\n bufferView: bufferView,\n compressedAttributes: compressionData.attributes,\n dequantizeInShader: dequantizeInShader,\n });\n });\n });\n};\n\n/**\n * Schedules decoding tasks available this frame.\n * @private\n */\nDracoLoader.decodeModel = function (model, context) {\n if (!DracoLoader.hasExtension(model)) {\n return when.resolve();\n }\n\n var loadResources = model._loadResources;\n var cacheKey = model.cacheKey;\n if (defined(cacheKey) && defined(DracoLoader._decodedModelResourceCache)) {\n var cachedData = DracoLoader._decodedModelResourceCache[cacheKey];\n // Load decoded data for model when cache is ready\n if (defined(cachedData) && loadResources.pendingDecodingCache) {\n return when(cachedData.ready, function () {\n model._decodedData = cachedData.data;\n loadResources.pendingDecodingCache = false;\n });\n }\n\n // Decoded data for model should be cached when ready\n DracoLoader._decodedModelResourceCache[cacheKey] = {\n ready: false,\n count: 1,\n data: undefined,\n };\n }\n\n if (loadResources.primitivesToDecode.length === 0) {\n // No more tasks to schedule\n return when.resolve();\n }\n\n var decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();\n var decodingPromises = [];\n\n var promise = scheduleDecodingTask(\n decoderTaskProcessor,\n model,\n loadResources,\n context\n );\n while (defined(promise)) {\n decodingPromises.push(promise);\n promise = scheduleDecodingTask(\n decoderTaskProcessor,\n model,\n loadResources,\n context\n );\n }\n\n return when.all(decodingPromises);\n};\n\n/**\n * Decodes a compressed point cloud. Returns undefined if the task cannot be scheduled.\n * @private\n */\nDracoLoader.decodePointCloud = function (parameters) {\n var decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();\n if (!DracoLoader._taskProcessorReady) {\n // The task processor is not ready to schedule tasks\n return;\n }\n return decoderTaskProcessor.scheduleTask(parameters, [\n parameters.buffer.buffer,\n ]);\n};\n\n/**\n * Caches a models decoded data so it doesn't need to decode more than once.\n * @private\n */\nDracoLoader.cacheDataForModel = function (model) {\n var cacheKey = model.cacheKey;\n if (defined(cacheKey) && defined(DracoLoader._decodedModelResourceCache)) {\n var cachedData = DracoLoader._decodedModelResourceCache[cacheKey];\n if (defined(cachedData)) {\n cachedData.ready = true;\n cachedData.data = model._decodedData;\n }\n }\n};\n\n/**\n * Destroys the cached data that this model references if it is no longer in use.\n * @private\n */\nDracoLoader.destroyCachedDataForModel = function (model) {\n var cacheKey = model.cacheKey;\n if (defined(cacheKey) && defined(DracoLoader._decodedModelResourceCache)) {\n var cachedData = DracoLoader._decodedModelResourceCache[cacheKey];\n if (defined(cachedData) && --cachedData.count === 0) {\n delete DracoLoader._decodedModelResourceCache[cacheKey];\n }\n }\n};\nexport default DracoLoader;\n","import Check from \"../Core/Check.js\";\n\n/**\n * Gets a GLSL snippet that clips a fragment using the `clip` function from {@link getClippingFunction} and styles it.\n *\n * @param {String} samplerUniformName Name of the uniform for the clipping planes texture sampler.\n * @param {String} matrixUniformName Name of the uniform for the clipping planes matrix.\n * @param {String} styleUniformName Name of the uniform for the clipping planes style, a vec4.\n * @returns {String} A string containing GLSL that clips and styles the current fragment.\n * @private\n */\nfunction getClipAndStyleCode(\n samplerUniformName,\n matrixUniformName,\n styleUniformName\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"samplerUniformName\", samplerUniformName);\n Check.typeOf.string(\"matrixUniformName\", matrixUniformName);\n Check.typeOf.string(\"styleUniformName\", styleUniformName);\n //>>includeEnd('debug');\n\n var shaderCode =\n \" float clipDistance = clip(gl_FragCoord, \" +\n samplerUniformName +\n \", \" +\n matrixUniformName +\n \"); \\n\" +\n \" vec4 clippingPlanesEdgeColor = vec4(1.0); \\n\" +\n \" clippingPlanesEdgeColor.rgb = \" +\n styleUniformName +\n \".rgb; \\n\" +\n \" float clippingPlanesEdgeWidth = \" +\n styleUniformName +\n \".a; \\n\" +\n \" if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) \\n\" +\n \" { \\n\" +\n \" gl_FragColor = clippingPlanesEdgeColor;\\n\" +\n \" } \\n\";\n return shaderCode;\n}\nexport default getClipAndStyleCode;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\n\nvar textureResolutionScratch = new Cartesian2();\n/**\n * Gets the GLSL functions needed to retrieve clipping planes from a ClippingPlaneCollection's texture.\n *\n * @param {ClippingPlaneCollection} clippingPlaneCollection ClippingPlaneCollection with a defined texture.\n * @param {Context} context The current rendering context.\n * @returns {String} A string containing GLSL functions for retrieving clipping planes.\n * @private\n */\nfunction getClippingFunction(clippingPlaneCollection, context) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"clippingPlaneCollection\", clippingPlaneCollection);\n Check.typeOf.object(\"context\", context);\n //>>includeEnd('debug');\n var unionClippingRegions = clippingPlaneCollection.unionClippingRegions;\n var clippingPlanesLength = clippingPlaneCollection.length;\n var usingFloatTexture = ClippingPlaneCollection.useFloatTexture(context);\n var textureResolution = ClippingPlaneCollection.getTextureResolution(\n clippingPlaneCollection,\n context,\n textureResolutionScratch\n );\n var width = textureResolution.x;\n var height = textureResolution.y;\n\n var functions = usingFloatTexture\n ? getClippingPlaneFloat(width, height)\n : getClippingPlaneUint8(width, height);\n functions += \"\\n\";\n functions += unionClippingRegions\n ? clippingFunctionUnion(clippingPlanesLength)\n : clippingFunctionIntersect(clippingPlanesLength);\n return functions;\n}\n\nfunction clippingFunctionUnion(clippingPlanesLength) {\n var functionString =\n \"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\\n\" +\n \"{\\n\" +\n \" vec4 position = czm_windowToEyeCoordinates(fragCoord);\\n\" +\n \" vec3 clipNormal = vec3(0.0);\\n\" +\n \" vec3 clipPosition = vec3(0.0);\\n\" +\n \" float clipAmount;\\n\" + // For union planes, we want to get the min distance. So we set the initial value to the first plane distance in the loop below.\n \" float pixelWidth = czm_metersPerPixel(position);\\n\" +\n \" bool breakAndDiscard = false;\\n\" +\n \" for (int i = 0; i < \" +\n clippingPlanesLength +\n \"; ++i)\\n\" +\n \" {\\n\" +\n \" vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\\n\" +\n \" clipNormal = clippingPlane.xyz;\\n\" +\n \" clipPosition = -clippingPlane.w * clipNormal;\\n\" +\n \" float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\\n\" +\n \" clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));\\n\" +\n \" if (amount <= 0.0)\\n\" +\n \" {\\n\" +\n \" breakAndDiscard = true;\\n\" +\n \" break;\\n\" + // HLSL compiler bug if we discard here: https://bugs.chromium.org/p/angleproject/issues/detail?id=1945#c6\n \" }\\n\" +\n \" }\\n\" +\n \" if (breakAndDiscard) {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \" return clipAmount;\\n\" +\n \"}\\n\";\n return functionString;\n}\n\nfunction clippingFunctionIntersect(clippingPlanesLength) {\n var functionString =\n \"float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\\n\" +\n \"{\\n\" +\n \" bool clipped = true;\\n\" +\n \" vec4 position = czm_windowToEyeCoordinates(fragCoord);\\n\" +\n \" vec3 clipNormal = vec3(0.0);\\n\" +\n \" vec3 clipPosition = vec3(0.0);\\n\" +\n \" float clipAmount = 0.0;\\n\" +\n \" float pixelWidth = czm_metersPerPixel(position);\\n\" +\n \" for (int i = 0; i < \" +\n clippingPlanesLength +\n \"; ++i)\\n\" +\n \" {\\n\" +\n \" vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\\n\" +\n \" clipNormal = clippingPlane.xyz;\\n\" +\n \" clipPosition = -clippingPlane.w * clipNormal;\\n\" +\n \" float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\\n\" +\n \" clipAmount = max(amount, clipAmount);\\n\" +\n \" clipped = clipped && (amount <= 0.0);\\n\" +\n \" }\\n\" +\n \" if (clipped)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \" return clipAmount;\\n\" +\n \"}\\n\";\n return functionString;\n}\n\nfunction getClippingPlaneFloat(width, height) {\n var pixelWidth = 1.0 / width;\n var pixelHeight = 1.0 / height;\n\n var pixelWidthString = pixelWidth + \"\";\n if (pixelWidthString.indexOf(\".\") === -1) {\n pixelWidthString += \".0\";\n }\n var pixelHeightString = pixelHeight + \"\";\n if (pixelHeightString.indexOf(\".\") === -1) {\n pixelHeightString += \".0\";\n }\n\n var functionString =\n \"vec4 getClippingPlane(sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\\n\" +\n \"{\\n\" +\n \" int pixY = clippingPlaneNumber / \" +\n width +\n \";\\n\" +\n \" int pixX = clippingPlaneNumber - (pixY * \" +\n width +\n \");\\n\" +\n \" float u = (float(pixX) + 0.5) * \" +\n pixelWidthString +\n \";\\n\" + // sample from center of pixel\n \" float v = (float(pixY) + 0.5) * \" +\n pixelHeightString +\n \";\\n\" +\n \" vec4 plane = texture2D(packedClippingPlanes, vec2(u, v));\\n\" +\n \" return czm_transformPlane(plane, transform);\\n\" +\n \"}\\n\";\n return functionString;\n}\n\nfunction getClippingPlaneUint8(width, height) {\n var pixelWidth = 1.0 / width;\n var pixelHeight = 1.0 / height;\n\n var pixelWidthString = pixelWidth + \"\";\n if (pixelWidthString.indexOf(\".\") === -1) {\n pixelWidthString += \".0\";\n }\n var pixelHeightString = pixelHeight + \"\";\n if (pixelHeightString.indexOf(\".\") === -1) {\n pixelHeightString += \".0\";\n }\n\n var functionString =\n \"vec4 getClippingPlane(sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\\n\" +\n \"{\\n\" +\n \" int clippingPlaneStartIndex = clippingPlaneNumber * 2;\\n\" + // clipping planes are two pixels each\n \" int pixY = clippingPlaneStartIndex / \" +\n width +\n \";\\n\" +\n \" int pixX = clippingPlaneStartIndex - (pixY * \" +\n width +\n \");\\n\" +\n \" float u = (float(pixX) + 0.5) * \" +\n pixelWidthString +\n \";\\n\" + // sample from center of pixel\n \" float v = (float(pixY) + 0.5) * \" +\n pixelHeightString +\n \";\\n\" +\n \" vec4 oct32 = texture2D(packedClippingPlanes, vec2(u, v)) * 255.0;\\n\" +\n \" vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);\\n\" +\n \" vec4 plane;\\n\" +\n \" plane.xyz = czm_octDecode(oct, 65535.0);\\n\" +\n \" plane.w = czm_unpackFloat(texture2D(packedClippingPlanes, vec2(u + \" +\n pixelWidthString +\n \", v)));\\n\" +\n \" return czm_transformPlane(plane, transform);\\n\" +\n \"}\\n\";\n return functionString;\n}\nexport default getClippingFunction;\n","/**\n * @private\n */\nvar JobType = {\n TEXTURE: 0,\n PROGRAM: 1,\n BUFFER: 2,\n NUMBER_OF_JOB_TYPES: 3,\n};\nexport default Object.freeze(JobType);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport LinearSpline from \"../Core/LinearSpline.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport QuaternionSpline from \"../Core/QuaternionSpline.js\";\nimport Spline from \"../Core/Spline.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport WeightSpline from \"../Core/WeightSpline.js\";\nimport getAccessorByteStride from \"../ThirdParty/GltfPipeline/getAccessorByteStride.js\";\nimport numberOfComponentsForType from \"../ThirdParty/GltfPipeline/numberOfComponentsForType.js\";\nimport AttributeType from \"./AttributeType.js\";\n\n/**\n * @private\n */\nfunction ModelAnimationCache() {}\n\nvar dataUriRegex = /^data\\:/i;\n\nfunction getAccessorKey(model, accessor) {\n var gltf = model.gltf;\n var buffers = gltf.buffers;\n var bufferViews = gltf.bufferViews;\n\n var bufferView = bufferViews[accessor.bufferView];\n var buffer = buffers[bufferView.buffer];\n\n var byteOffset = bufferView.byteOffset + accessor.byteOffset;\n var byteLength = accessor.count * numberOfComponentsForType(accessor.type);\n\n var uriKey = dataUriRegex.test(buffer.uri) ? \"\" : buffer.uri;\n return model.cacheKey + \"//\" + uriKey + \"/\" + byteOffset + \"/\" + byteLength;\n}\n\nvar cachedAnimationParameters = {};\n\nModelAnimationCache.getAnimationParameterValues = function (model, accessor) {\n var key = getAccessorKey(model, accessor);\n var values = cachedAnimationParameters[key];\n\n if (!defined(values)) {\n // Cache miss\n var gltf = model.gltf;\n\n var buffers = gltf.buffers;\n var bufferViews = gltf.bufferViews;\n\n var bufferView = bufferViews[accessor.bufferView];\n var bufferId = bufferView.buffer;\n var buffer = buffers[bufferId];\n var source = buffer.extras._pipeline.source;\n\n var componentType = accessor.componentType;\n var type = accessor.type;\n var numberOfComponents = numberOfComponentsForType(type);\n var count = accessor.count;\n var byteStride = getAccessorByteStride(gltf, accessor);\n\n values = new Array(count);\n var accessorByteOffset = defaultValue(accessor.byteOffset, 0);\n var byteOffset = bufferView.byteOffset + accessorByteOffset;\n for (var i = 0; i < count; i++) {\n var typedArrayView = ComponentDatatype.createArrayBufferView(\n componentType,\n source.buffer,\n source.byteOffset + byteOffset,\n numberOfComponents\n );\n if (type === \"SCALAR\") {\n values[i] = typedArrayView[0];\n } else if (type === \"VEC3\") {\n values[i] = Cartesian3.fromArray(typedArrayView);\n } else if (type === \"VEC4\") {\n values[i] = Quaternion.unpack(typedArrayView);\n }\n byteOffset += byteStride;\n }\n // GLTF_SPEC: Support more parameter types when glTF supports targeting materials. https://github.com/KhronosGroup/glTF/issues/142\n\n if (defined(model.cacheKey)) {\n // Only cache when we can create a unique id\n cachedAnimationParameters[key] = values;\n }\n }\n\n return values;\n};\n\nvar cachedAnimationSplines = {};\n\nfunction getAnimationSplineKey(model, animationName, samplerName) {\n return model.cacheKey + \"//\" + animationName + \"/\" + samplerName;\n}\n\nfunction ConstantSpline(value) {\n this._value = value;\n}\nConstantSpline.prototype.evaluate = function (time, result) {\n return this._value;\n};\nConstantSpline.prototype.wrapTime = function (time) {\n return 0.0;\n};\nConstantSpline.prototype.clampTime = function (time) {\n return 0.0;\n};\n\nfunction SteppedSpline(backingSpline) {\n this._spline = backingSpline;\n this._lastTimeIndex = 0;\n}\nSteppedSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\nSteppedSpline.prototype.evaluate = function (time, result) {\n var i = (this._lastTimeIndex = this.findTimeInterval(\n time,\n this._lastTimeIndex\n ));\n var times = this._spline.times;\n var steppedTime = time >= times[i + 1] ? times[i + 1] : times[i];\n return this._spline.evaluate(steppedTime, result);\n};\nObject.defineProperties(SteppedSpline.prototype, {\n times: {\n get: function () {\n return this._spline.times;\n },\n },\n});\nSteppedSpline.prototype.wrapTime = function (time) {\n return this._spline.wrapTime(time);\n};\nSteppedSpline.prototype.clampTime = function (time) {\n return this._spline.clampTime(time);\n};\n\nModelAnimationCache.getAnimationSpline = function (\n model,\n animationName,\n animation,\n samplerName,\n sampler,\n input,\n path,\n output\n) {\n var key = getAnimationSplineKey(model, animationName, samplerName);\n var spline = cachedAnimationSplines[key];\n\n if (!defined(spline)) {\n var times = input;\n var controlPoints = output;\n\n if (times.length === 1 && controlPoints.length === 1) {\n spline = new ConstantSpline(controlPoints[0]);\n } else if (\n sampler.interpolation === \"LINEAR\" ||\n sampler.interpolation === \"STEP\"\n ) {\n if (path === \"translation\" || path === \"scale\") {\n spline = new LinearSpline({\n times: times,\n points: controlPoints,\n });\n } else if (path === \"rotation\") {\n spline = new QuaternionSpline({\n times: times,\n points: controlPoints,\n });\n } else if (path === \"weights\") {\n spline = new WeightSpline({\n times: times,\n weights: controlPoints,\n });\n }\n\n if (defined(spline) && sampler.interpolation === \"STEP\") {\n spline = new SteppedSpline(spline);\n }\n }\n\n if (defined(model.cacheKey)) {\n // Only cache when we can create a unique id\n cachedAnimationSplines[key] = spline;\n }\n }\n\n return spline;\n};\n\nvar cachedSkinInverseBindMatrices = {};\n\nModelAnimationCache.getSkinInverseBindMatrices = function (model, accessor) {\n var key = getAccessorKey(model, accessor);\n var matrices = cachedSkinInverseBindMatrices[key];\n\n if (!defined(matrices)) {\n // Cache miss\n var gltf = model.gltf;\n var buffers = gltf.buffers;\n var bufferViews = gltf.bufferViews;\n\n var bufferViewId = accessor.bufferView;\n var bufferView = bufferViews[bufferViewId];\n var bufferId = bufferView.buffer;\n var buffer = buffers[bufferId];\n var source = buffer.extras._pipeline.source;\n\n var componentType = accessor.componentType;\n var type = accessor.type;\n var count = accessor.count;\n var byteStride = getAccessorByteStride(gltf, accessor);\n var byteOffset = bufferView.byteOffset + accessor.byteOffset;\n var numberOfComponents = numberOfComponentsForType(type);\n\n matrices = new Array(count);\n\n if (componentType === WebGLConstants.FLOAT && type === AttributeType.MAT4) {\n for (var i = 0; i < count; ++i) {\n var typedArrayView = ComponentDatatype.createArrayBufferView(\n componentType,\n source.buffer,\n source.byteOffset + byteOffset,\n numberOfComponents\n );\n matrices[i] = Matrix4.fromArray(typedArrayView);\n byteOffset += byteStride;\n }\n }\n\n cachedSkinInverseBindMatrices[key] = matrices;\n }\n\n return matrices;\n};\nexport default ModelAnimationCache;\n","/**\n * Determines if and how a glTF animation is looped.\n *\n * @enum {Number}\n *\n * @see ModelAnimationCollection#add\n */\nvar ModelAnimationLoop = {\n /**\n * Play the animation once; do not loop it.\n *\n * @type {Number}\n * @constant\n */\n NONE: 0,\n\n /**\n * Loop the animation playing it from the start immediately after it stops.\n *\n * @type {Number}\n * @constant\n */\n REPEAT: 1,\n\n /**\n * Loop the animation. First, playing it forward, then in reverse, then forward, and so on.\n *\n * @type {Number}\n * @constant\n */\n MIRRORED_REPEAT: 2,\n};\nexport default Object.freeze(ModelAnimationLoop);\n","/**\n * @private\n */\nexport default Object.freeze({\n STOPPED: 0,\n ANIMATING: 1,\n});\n","import defaultValue from \"../Core/defaultValue.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ModelAnimationLoop from \"./ModelAnimationLoop.js\";\nimport ModelAnimationState from \"./ModelAnimationState.js\";\n\n/**\n * An active glTF animation. A glTF asset can contain animations. An active animation\n * is an animation that is currently playing or scheduled to be played because it was\n * added to a model's {@link ModelAnimationCollection}. An active animation is an\n * instance of an animation; for example, there can be multiple active animations\n * for the same glTF animation, each with a different start time.\n * <p>\n * Create this by calling {@link ModelAnimationCollection#add}.\n * </p>\n *\n * @alias ModelAnimation\n * @internalConstructor\n * @class\n *\n * @see ModelAnimationCollection#add\n */\nfunction ModelAnimation(options, model, runtimeAnimation) {\n this._name = runtimeAnimation.name;\n this._startTime = JulianDate.clone(options.startTime);\n this._delay = defaultValue(options.delay, 0.0); // in seconds\n this._stopTime = options.stopTime;\n\n /**\n * When <code>true</code>, the animation is removed after it stops playing.\n * This is slightly more efficient that not removing it, but if, for example,\n * time is reversed, the animation is not played again.\n *\n * @type {Boolean}\n * @default false\n */\n this.removeOnStop = defaultValue(options.removeOnStop, false);\n this._multiplier = defaultValue(options.multiplier, 1.0);\n this._reverse = defaultValue(options.reverse, false);\n this._loop = defaultValue(options.loop, ModelAnimationLoop.NONE);\n\n /**\n * The event fired when this animation is started. This can be used, for\n * example, to play a sound or start a particle system, when the animation starts.\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * animation.start.addEventListener(function(model, animation) {\n * console.log('Animation started: ' + animation.name);\n * });\n */\n this.start = new Event();\n\n /**\n * The event fired when on each frame when this animation is updated. The\n * current time of the animation, relative to the glTF animation time span, is\n * passed to the event, which allows, for example, starting new animations at a\n * specific time relative to a playing animation.\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * animation.update.addEventListener(function(model, animation, time) {\n * console.log('Animation updated: ' + animation.name + '. glTF animation time: ' + time);\n * });\n */\n this.update = new Event();\n\n /**\n * The event fired when this animation is stopped. This can be used, for\n * example, to play a sound or start a particle system, when the animation stops.\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * animation.stop.addEventListener(function(model, animation) {\n * console.log('Animation stopped: ' + animation.name);\n * });\n */\n this.stop = new Event();\n\n this._state = ModelAnimationState.STOPPED;\n this._runtimeAnimation = runtimeAnimation;\n\n // Set during animation update\n this._computedStartTime = undefined;\n this._duration = undefined;\n\n // To avoid allocations in ModelAnimationCollection.update\n var that = this;\n this._raiseStartEvent = function () {\n that.start.raiseEvent(model, that);\n };\n this._updateEventTime = 0.0;\n this._raiseUpdateEvent = function () {\n that.update.raiseEvent(model, that, that._updateEventTime);\n };\n this._raiseStopEvent = function () {\n that.stop.raiseEvent(model, that);\n };\n}\n\nObject.defineProperties(ModelAnimation.prototype, {\n /**\n * The glTF animation name that identifies this animation.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n\n /**\n * The scene time to start playing this animation. When this is <code>undefined</code>,\n * the animation starts at the next frame.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {JulianDate}\n * @readonly\n *\n * @default undefined\n */\n startTime: {\n get: function () {\n return this._startTime;\n },\n },\n\n /**\n * The delay, in seconds, from {@link ModelAnimation#startTime} to start playing.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default undefined\n */\n delay: {\n get: function () {\n return this._delay;\n },\n },\n\n /**\n * The scene time to stop playing this animation. When this is <code>undefined</code>,\n * the animation is played for its full duration and perhaps repeated depending on\n * {@link ModelAnimation#loop}.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {JulianDate}\n * @readonly\n *\n * @default undefined\n */\n stopTime: {\n get: function () {\n return this._stopTime;\n },\n },\n /**\n * Values greater than <code>1.0</code> increase the speed that the animation is played relative\n * to the scene clock speed; values less than <code>1.0</code> decrease the speed. A value of\n * <code>1.0</code> plays the animation at the speed in the glTF animation mapped to the scene\n * clock speed. For example, if the scene is played at 2x real-time, a two-second glTF animation\n * will play in one second even if <code>multiplier</code> is <code>1.0</code>.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @default 1.0\n */\n multiplier: {\n get: function () {\n return this._multiplier;\n },\n },\n\n /**\n * When <code>true</code>, the animation is played in reverse.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n reverse: {\n get: function () {\n return this._reverse;\n },\n },\n\n /**\n * Determines if and how the animation is looped.\n *\n * @memberof ModelAnimation.prototype\n *\n * @type {ModelAnimationLoop}\n * @readonly\n *\n * @default {@link ModelAnimationLoop.NONE}\n */\n loop: {\n get: function () {\n return this._loop;\n },\n },\n});\nexport default ModelAnimation;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport ModelAnimation from \"./ModelAnimation.js\";\nimport ModelAnimationLoop from \"./ModelAnimationLoop.js\";\nimport ModelAnimationState from \"./ModelAnimationState.js\";\n\n/**\n * A collection of active model animations. Access this using {@link Model#activeAnimations}.\n *\n * @alias ModelAnimationCollection\n * @internalConstructor\n * @class\n *\n * @see Model#activeAnimations\n */\nfunction ModelAnimationCollection(model) {\n /**\n * The event fired when an animation is added to the collection. This can be used, for\n * example, to keep a UI in sync.\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * model.activeAnimations.animationAdded.addEventListener(function(model, animation) {\n * console.log('Animation added: ' + animation.name);\n * });\n */\n this.animationAdded = new Event();\n\n /**\n * The event fired when an animation is removed from the collection. This can be used, for\n * example, to keep a UI in sync.\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * model.activeAnimations.animationRemoved.addEventListener(function(model, animation) {\n * console.log('Animation removed: ' + animation.name);\n * });\n */\n this.animationRemoved = new Event();\n\n this._model = model;\n this._scheduledAnimations = [];\n this._previousTime = undefined;\n}\n\nObject.defineProperties(ModelAnimationCollection.prototype, {\n /**\n * The number of animations in the collection.\n *\n * @memberof ModelAnimationCollection.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._scheduledAnimations.length;\n },\n },\n});\n\nfunction add(collection, index, options) {\n var model = collection._model;\n var animations = model._runtime.animations;\n var animation = animations[index];\n var scheduledAnimation = new ModelAnimation(options, model, animation);\n collection._scheduledAnimations.push(scheduledAnimation);\n collection.animationAdded.raiseEvent(model, scheduledAnimation);\n return scheduledAnimation;\n}\n\n/**\n * Creates and adds an animation with the specified initial properties to the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationAdded} event so, for example, a UI can stay in sync.\n * </p>\n *\n * @param {Object} options Object with the following properties:\n * @param {String} [options.name] The glTF animation name that identifies the animation. Must be defined if <code>options.index</code> is <code>undefined</code>.\n * @param {Number} [options.index] The glTF animation index that identifies the animation. Must be defined if <code>options.name</code> is <code>undefined</code>.\n * @param {JulianDate} [options.startTime] The scene time to start playing the animation. When this is <code>undefined</code>, the animation starts at the next frame.\n * @param {Number} [options.delay=0.0] The delay, in seconds, from <code>startTime</code> to start playing.\n * @param {JulianDate} [options.stopTime] The scene time to stop playing the animation. When this is <code>undefined</code>, the animation is played for its full duration.\n * @param {Boolean} [options.removeOnStop=false] When <code>true</code>, the animation is removed after it stops playing.\n * @param {Number} [options.multiplier=1.0] Values greater than <code>1.0</code> increase the speed that the animation is played relative to the scene clock speed; values less than <code>1.0</code> decrease the speed.\n * @param {Boolean} [options.reverse=false] When <code>true</code>, the animation is played in reverse.\n * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animation is looped.\n * @returns {ModelAnimation} The animation that was added to the collection.\n *\n * @exception {DeveloperError} Animations are not loaded. Wait for the {@link Model#readyPromise} to resolve.\n * @exception {DeveloperError} options.name must be a valid animation name.\n * @exception {DeveloperError} options.index must be a valid animation index.\n * @exception {DeveloperError} Either options.name or options.index must be defined.\n * @exception {DeveloperError} options.multiplier must be greater than zero.\n *\n * @example\n * // Example 1. Add an animation by name\n * model.activeAnimations.add({\n * name : 'animation name'\n * });\n *\n * // Example 2. Add an animation by index\n * model.activeAnimations.add({\n * index : 0\n * });\n *\n * @example\n * // Example 3. Add an animation and provide all properties and events\n * var startTime = Cesium.JulianDate.now();\n *\n * var animation = model.activeAnimations.add({\n * name : 'another animation name',\n * startTime : startTime,\n * delay : 0.0, // Play at startTime (default)\n * stopTime : Cesium.JulianDate.addSeconds(startTime, 4.0, new Cesium.JulianDate()),\n * removeOnStop : false, // Do not remove when animation stops (default)\n * multiplier : 2.0, // Play at double speed\n * reverse : true, // Play in reverse\n * loop : Cesium.ModelAnimationLoop.REPEAT // Loop the animation\n * });\n *\n * animation.start.addEventListener(function(model, animation) {\n * console.log('Animation started: ' + animation.name);\n * });\n * animation.update.addEventListener(function(model, animation, time) {\n * console.log('Animation updated: ' + animation.name + '. glTF animation time: ' + time);\n * });\n * animation.stop.addEventListener(function(model, animation) {\n * console.log('Animation stopped: ' + animation.name);\n * });\n */\nModelAnimationCollection.prototype.add = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var model = this._model;\n var animations = model._runtime.animations;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(animations)) {\n throw new DeveloperError(\n \"Animations are not loaded. Wait for Model.readyPromise to resolve.\"\n );\n }\n if (!defined(options.name) && !defined(options.index)) {\n throw new DeveloperError(\n \"Either options.name or options.index must be defined.\"\n );\n }\n\n if (defined(options.multiplier) && options.multiplier <= 0.0) {\n throw new DeveloperError(\"options.multiplier must be greater than zero.\");\n }\n if (\n defined(options.index) &&\n (options.index >= animations.length || options.index < 0)\n ) {\n throw new DeveloperError(\"options.index must be a valid animation index.\");\n }\n //>>includeEnd('debug');\n\n if (defined(options.index)) {\n return add(this, options.index, options);\n }\n\n // Find the index of the animation with the given name\n var index;\n var length = animations.length;\n for (var i = 0; i < length; ++i) {\n if (animations[i].name === options.name) {\n index = i;\n break;\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"options.name must be a valid animation name.\");\n }\n //>>includeEnd('debug');\n\n return add(this, index, options);\n};\n\n/**\n * Creates and adds an animation with the specified initial properties to the collection\n * for each animation in the model.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationAdded} event for each model so, for example, a UI can stay in sync.\n * </p>\n *\n * @param {Object} [options] Object with the following properties:\n * @param {JulianDate} [options.startTime] The scene time to start playing the animations. When this is <code>undefined</code>, the animations starts at the next frame.\n * @param {Number} [options.delay=0.0] The delay, in seconds, from <code>startTime</code> to start playing.\n * @param {JulianDate} [options.stopTime] The scene time to stop playing the animations. When this is <code>undefined</code>, the animations are played for its full duration.\n * @param {Boolean} [options.removeOnStop=false] When <code>true</code>, the animations are removed after they stop playing.\n * @param {Number} [options.multiplier=1.0] Values greater than <code>1.0</code> increase the speed that the animations play relative to the scene clock speed; values less than <code>1.0</code> decrease the speed.\n * @param {Boolean} [options.reverse=false] When <code>true</code>, the animations are played in reverse.\n * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animations are looped.\n * @returns {ModelAnimation[]} An array of {@link ModelAnimation} objects, one for each animation added to the collection. If there are no glTF animations, the array is empty.\n *\n * @exception {DeveloperError} Animations are not loaded. Wait for the {@link Model#readyPromise} to resolve.\n * @exception {DeveloperError} options.multiplier must be greater than zero.\n *\n * @example\n * model.activeAnimations.addAll({\n * multiplier : 0.5, // Play at half-speed\n * loop : Cesium.ModelAnimationLoop.REPEAT // Loop the animations\n * });\n */\nModelAnimationCollection.prototype.addAll = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this._model._runtime.animations)) {\n throw new DeveloperError(\n \"Animations are not loaded. Wait for Model.readyPromise to resolve.\"\n );\n }\n\n if (defined(options.multiplier) && options.multiplier <= 0.0) {\n throw new DeveloperError(\"options.multiplier must be greater than zero.\");\n }\n //>>includeEnd('debug');\n\n var scheduledAnimations = [];\n var model = this._model;\n var animations = model._runtime.animations;\n var length = animations.length;\n for (var i = 0; i < length; ++i) {\n scheduledAnimations.push(add(this, i, options));\n }\n return scheduledAnimations;\n};\n\n/**\n * Removes an animation from the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationRemoved} event so, for example, a UI can stay in sync.\n * </p>\n * <p>\n * An animation can also be implicitly removed from the collection by setting {@link ModelAnimation#removeOnStop} to\n * <code>true</code>. The {@link ModelAnimationCollection#animationRemoved} event is still fired when the animation is removed.\n * </p>\n *\n * @param {ModelAnimation} animation The animation to remove.\n * @returns {Boolean} <code>true</code> if the animation was removed; <code>false</code> if the animation was not found in the collection.\n *\n * @example\n * var a = model.activeAnimations.add({\n * name : 'animation name'\n * });\n * model.activeAnimations.remove(a); // Returns true\n */\nModelAnimationCollection.prototype.remove = function (animation) {\n if (defined(animation)) {\n var animations = this._scheduledAnimations;\n var i = animations.indexOf(animation);\n if (i !== -1) {\n animations.splice(i, 1);\n this.animationRemoved.raiseEvent(this._model, animation);\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * Removes all animations from the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationRemoved} event for each\n * animation so, for example, a UI can stay in sync.\n * </p>\n */\nModelAnimationCollection.prototype.removeAll = function () {\n var model = this._model;\n var animations = this._scheduledAnimations;\n var length = animations.length;\n\n this._scheduledAnimations = [];\n\n for (var i = 0; i < length; ++i) {\n this.animationRemoved.raiseEvent(model, animations[i]);\n }\n};\n\n/**\n * Determines whether this collection contains a given animation.\n *\n * @param {ModelAnimation} animation The animation to check for.\n * @returns {Boolean} <code>true</code> if this collection contains the animation, <code>false</code> otherwise.\n */\nModelAnimationCollection.prototype.contains = function (animation) {\n if (defined(animation)) {\n return this._scheduledAnimations.indexOf(animation) !== -1;\n }\n\n return false;\n};\n\n/**\n * Returns the animation in the collection at the specified index. Indices are zero-based\n * and increase as animations are added. Removing an animation shifts all animations after\n * it to the left, changing their indices. This function is commonly used to iterate over\n * all the animations in the collection.\n *\n * @param {Number} index The zero-based index of the animation.\n * @returns {ModelAnimation} The animation at the specified index.\n *\n * @example\n * // Output the names of all the animations in the collection.\n * var animations = model.activeAnimations;\n * var length = animations.length;\n * for (var i = 0; i < length; ++i) {\n * console.log(animations.get(i).name);\n * }\n */\nModelAnimationCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._scheduledAnimations[index];\n};\n\nfunction animateChannels(runtimeAnimation, localAnimationTime) {\n var channelEvaluators = runtimeAnimation.channelEvaluators;\n var length = channelEvaluators.length;\n for (var i = 0; i < length; ++i) {\n channelEvaluators[i](localAnimationTime);\n }\n}\n\nvar animationsToRemove = [];\n\nfunction createAnimationRemovedFunction(\n modelAnimationCollection,\n model,\n animation\n) {\n return function () {\n modelAnimationCollection.animationRemoved.raiseEvent(model, animation);\n };\n}\n\n/**\n * @private\n */\nModelAnimationCollection.prototype.update = function (frameState) {\n var scheduledAnimations = this._scheduledAnimations;\n var length = scheduledAnimations.length;\n\n if (length === 0) {\n // No animations - quick return for performance\n this._previousTime = undefined;\n return false;\n }\n\n if (JulianDate.equals(frameState.time, this._previousTime)) {\n // Animations are currently only time-dependent so do not animate when paused or picking\n return false;\n }\n this._previousTime = JulianDate.clone(frameState.time, this._previousTime);\n\n var animationOccured = false;\n var sceneTime = frameState.time;\n var model = this._model;\n\n for (var i = 0; i < length; ++i) {\n var scheduledAnimation = scheduledAnimations[i];\n var runtimeAnimation = scheduledAnimation._runtimeAnimation;\n\n if (!defined(scheduledAnimation._computedStartTime)) {\n scheduledAnimation._computedStartTime = JulianDate.addSeconds(\n defaultValue(scheduledAnimation.startTime, sceneTime),\n scheduledAnimation.delay,\n new JulianDate()\n );\n }\n\n if (!defined(scheduledAnimation._duration)) {\n scheduledAnimation._duration =\n runtimeAnimation.stopTime * (1.0 / scheduledAnimation.multiplier);\n }\n\n var startTime = scheduledAnimation._computedStartTime;\n var duration = scheduledAnimation._duration;\n var stopTime = scheduledAnimation.stopTime;\n\n // [0.0, 1.0] normalized local animation time\n var delta =\n duration !== 0.0\n ? JulianDate.secondsDifference(sceneTime, startTime) / duration\n : 0.0;\n\n // Clamp delta to stop time, if defined.\n if (\n duration !== 0.0 &&\n defined(stopTime) &&\n JulianDate.greaterThan(sceneTime, stopTime)\n ) {\n delta = JulianDate.secondsDifference(stopTime, startTime) / duration;\n }\n\n var pastStartTime = delta >= 0.0;\n\n // Play animation if\n // * we are after the start time or the animation is being repeated, and\n // * before the end of the animation's duration or the animation is being repeated, and\n // * we did not reach a user-provided stop time.\n\n var repeat =\n scheduledAnimation.loop === ModelAnimationLoop.REPEAT ||\n scheduledAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT;\n\n var play =\n (pastStartTime || (repeat && !defined(scheduledAnimation.startTime))) &&\n (delta <= 1.0 || repeat) &&\n (!defined(stopTime) || JulianDate.lessThanOrEquals(sceneTime, stopTime));\n\n // If it IS, or WAS, animating...\n if (play || scheduledAnimation._state === ModelAnimationState.ANIMATING) {\n // STOPPED -> ANIMATING state transition?\n if (play && scheduledAnimation._state === ModelAnimationState.STOPPED) {\n scheduledAnimation._state = ModelAnimationState.ANIMATING;\n if (scheduledAnimation.start.numberOfListeners > 0) {\n frameState.afterRender.push(scheduledAnimation._raiseStartEvent);\n }\n }\n\n // Truncate to [0.0, 1.0] for repeating animations\n if (scheduledAnimation.loop === ModelAnimationLoop.REPEAT) {\n delta = delta - Math.floor(delta);\n } else if (\n scheduledAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT\n ) {\n var floor = Math.floor(delta);\n var fract = delta - floor;\n // When even use (1.0 - fract) to mirror repeat\n delta = floor % 2 === 1.0 ? 1.0 - fract : fract;\n }\n\n if (scheduledAnimation.reverse) {\n delta = 1.0 - delta;\n }\n\n var localAnimationTime = delta * duration * scheduledAnimation.multiplier;\n // Clamp in case floating-point roundoff goes outside the animation's first or last keyframe\n localAnimationTime = CesiumMath.clamp(\n localAnimationTime,\n runtimeAnimation.startTime,\n runtimeAnimation.stopTime\n );\n\n animateChannels(runtimeAnimation, localAnimationTime);\n\n if (scheduledAnimation.update.numberOfListeners > 0) {\n scheduledAnimation._updateEventTime = localAnimationTime;\n frameState.afterRender.push(scheduledAnimation._raiseUpdateEvent);\n }\n animationOccured = true;\n\n if (!play) {\n // ANIMATING -> STOPPED state transition?\n scheduledAnimation._state = ModelAnimationState.STOPPED;\n if (scheduledAnimation.stop.numberOfListeners > 0) {\n frameState.afterRender.push(scheduledAnimation._raiseStopEvent);\n }\n\n if (scheduledAnimation.removeOnStop) {\n animationsToRemove.push(scheduledAnimation);\n }\n }\n }\n }\n\n // Remove animations that stopped\n length = animationsToRemove.length;\n for (var j = 0; j < length; ++j) {\n var animationToRemove = animationsToRemove[j];\n scheduledAnimations.splice(\n scheduledAnimations.indexOf(animationToRemove),\n 1\n );\n frameState.afterRender.push(\n createAnimationRemovedFunction(this, model, animationToRemove)\n );\n }\n animationsToRemove.length = 0;\n\n return animationOccured;\n};\nexport default ModelAnimationCollection;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A model's material with modifiable parameters. A glTF material\n * contains parameters defined by the material's technique with values\n * defined by the technique and potentially overridden by the material.\n * This class allows changing these values at runtime.\n * <p>\n * Use {@link Model#getMaterial} to create an instance.\n * </p>\n *\n * @alias ModelMaterial\n * @internalConstructor\n * @class\n *\n * @see Model#getMaterial\n */\nfunction ModelMaterial(model, material, id) {\n this._name = material.name;\n this._id = id;\n this._uniformMap = model._uniformMaps[id];\n\n this._technique = undefined;\n this._program = undefined;\n this._values = undefined;\n}\n\nObject.defineProperties(ModelMaterial.prototype, {\n /**\n * The value of the <code>name</code> property of this material.\n *\n * @memberof ModelMaterial.prototype\n *\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n\n /**\n * The index of the material.\n *\n * @memberof ModelMaterial.prototype\n *\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n});\n\n/**\n * Assigns a value to a material parameter. The type for <code>value</code>\n * depends on the glTF type of the parameter. It will be a floating-point\n * number, Cartesian, or matrix.\n *\n * @param {String} name The name of the parameter.\n * @param {*} [value] The value to assign to the parameter.\n *\n * @exception {DeveloperError} name must match a parameter name in the material's technique that is targetable and not optimized out.\n *\n * @example\n * material.setValue('diffuse', new Cesium.Cartesian4(1.0, 0.0, 0.0, 1.0)); // vec4\n * material.setValue('shininess', 256.0); // scalar\n */\nModelMaterial.prototype.setValue = function (name, value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(name)) {\n throw new DeveloperError(\"name is required.\");\n }\n //>>includeEnd('debug');\n\n var uniformName = \"u_\" + name;\n var v = this._uniformMap.values[uniformName];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(v)) {\n throw new DeveloperError(\n \"name must match a parameter name in the material's technique that is targetable and not optimized out.\"\n );\n }\n //>>includeEnd('debug');\n\n v.value = v.clone(value, v.value);\n};\n\n/**\n * Returns the value of the parameter with the given <code>name</code>. The type of the\n * returned object depends on the glTF type of the parameter. It will be a floating-point\n * number, Cartesian, or matrix.\n *\n * @param {String} name The name of the parameter.\n * @returns {*} The value of the parameter or <code>undefined</code> if the parameter does not exist.\n */\nModelMaterial.prototype.getValue = function (name) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(name)) {\n throw new DeveloperError(\"name is required.\");\n }\n //>>includeEnd('debug');\n\n var uniformName = \"u_\" + name;\n var v = this._uniformMap.values[uniformName];\n\n if (!defined(v)) {\n return undefined;\n }\n\n return v.value;\n};\nexport default ModelMaterial;\n","/**\n * A model's mesh and its materials.\n * <p>\n * Use {@link Model#getMesh} to create an instance.\n * </p>\n *\n * @alias ModelMesh\n * @internalConstructor\n * @class\n *\n * @see Model#getMesh\n */\nfunction ModelMesh(mesh, runtimeMaterialsById, id) {\n var materials = [];\n var primitives = mesh.primitives;\n var length = primitives.length;\n for (var i = 0; i < length; ++i) {\n var p = primitives[i];\n materials[i] = runtimeMaterialsById[p.material];\n }\n\n this._name = mesh.name;\n this._materials = materials;\n this._id = id;\n}\n\nObject.defineProperties(ModelMesh.prototype, {\n /**\n * The value of the <code>name</code> property of this mesh.\n *\n * @memberof ModelMesh.prototype\n *\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n\n /**\n * The index of the mesh.\n *\n * @memberof ModelMesh.prototype\n *\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n\n /**\n * An array of {@link ModelMaterial} instances indexed by the mesh's\n * primitive indices.\n *\n * @memberof ModelMesh.prototype\n *\n * @type {ModelMaterial[]}\n * @readonly\n */\n materials: {\n get: function () {\n return this._materials;\n },\n },\n});\nexport default ModelMesh;\n","import Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * A model node with a transform for user-defined animations. A glTF asset can\n * contain animations that target a node's transform. This class allows\n * changing a node's transform externally so animation can be driven by another\n * source, not just an animation in the glTF asset.\n * <p>\n * Use {@link Model#getNode} to create an instance.\n * </p>\n *\n * @alias ModelNode\n * @internalConstructor\n * @class\n *\n * @example\n * var node = model.getNode('LOD3sp');\n * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);\n *\n * @see Model#getNode\n */\nfunction ModelNode(model, node, runtimeNode, id, matrix) {\n this._model = model;\n this._runtimeNode = runtimeNode;\n this._name = node.name;\n this._id = id;\n\n /**\n * @private\n */\n this.useMatrix = false;\n\n this._show = true;\n this._matrix = Matrix4.clone(matrix);\n this._originalMatrix = Matrix4.clone(matrix);\n}\n\nObject.defineProperties(ModelNode.prototype, {\n /**\n * The value of the <code>name</code> property of this node.\n *\n * @memberof ModelNode.prototype\n *\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n\n /**\n * The index of the node.\n *\n * @memberof ModelNode.prototype\n *\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n\n /**\n * Determines if this node and its children will be shown.\n *\n * @memberof ModelNode.prototype\n * @type {Boolean}\n *\n * @default true\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n if (this._show !== value) {\n this._show = value;\n this._model._perNodeShowDirty = true;\n }\n },\n },\n\n /**\n * The node's 4x4 matrix transform from its local coordinates to\n * its parent's.\n * <p>\n * For changes to take effect, this property must be assigned to;\n * setting individual elements of the matrix will not work.\n * </p>\n *\n * @memberof ModelNode.prototype\n * @type {Matrix4}\n */\n matrix: {\n get: function () {\n return this._matrix;\n },\n set: function (value) {\n this._matrix = Matrix4.clone(value, this._matrix);\n this.useMatrix = true;\n\n var model = this._model;\n model._cesiumAnimationsDirty = true;\n this._runtimeNode.dirtyNumber = model._maxDirtyNumber;\n },\n },\n\n /**\n * Gets the node's original 4x4 matrix transform from its local coordinates to\n * its parent's, without any node transformations or articulations applied.\n *\n * @memberof ModelNode.prototype\n * @type {Matrix4}\n */\n originalMatrix: {\n get: function () {\n return this._originalMatrix;\n },\n },\n});\n\n/**\n * @private\n */\nModelNode.prototype.setMatrix = function (matrix) {\n // Update matrix but do not set the dirty flag since this is used internally\n // to keep the matrix in-sync during a glTF animation.\n Matrix4.clone(matrix, this._matrix);\n};\nexport default ModelNode;\n","import defined from \"../Core/defined.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\n\n// glTF does not allow an index value of 65535 because this is the primitive\n// restart value in some APIs.\nvar MAX_GLTF_UINT16_INDEX = 65534;\n\n/**\n * Creates face outlines for glTF primitives with the `CESIUM_primitive_outline` extension.\n * @private\n */\nfunction ModelOutlineLoader() {}\n\n/**\n * Returns true if the model uses or requires CESIUM_primitive_outline.\n * @private\n */\nModelOutlineLoader.hasExtension = function (model) {\n return (\n defined(model.extensionsRequired.CESIUM_primitive_outline) ||\n defined(model.extensionsUsed.CESIUM_primitive_outline)\n );\n};\n\n/**\n * Arranges to outline any primitives with the CESIUM_primitive_outline extension.\n * It is expected that all buffer data is loaded and available in\n * `extras._pipeline.source` before this function is called, and that vertex\n * and index WebGL buffers are not yet created.\n * @private\n */\nModelOutlineLoader.outlinePrimitives = function (model) {\n if (!ModelOutlineLoader.hasExtension(model)) {\n return;\n }\n\n var gltf = model.gltf;\n\n // Assumption: A single bufferView contains a single zero-indexed range of vertices.\n // No trickery with using large accessor byteOffsets to store multiple zero-based\n // ranges of vertices in a single bufferView. Use separate bufferViews for that,\n // you monster.\n // Note that interleaved vertex attributes (e.g. position0, normal0, uv0,\n // position1, normal1, uv1, ...) _are_ supported and should not be confused with\n // the above.\n\n var vertexNumberingScopes = [];\n\n ForEach.mesh(gltf, function (mesh, meshId) {\n ForEach.meshPrimitive(mesh, function (primitive, primitiveId) {\n if (!defined(primitive.extensions)) {\n return;\n }\n\n var outlineData = primitive.extensions.CESIUM_primitive_outline;\n if (!defined(outlineData)) {\n return;\n }\n\n var vertexNumberingScope = getVertexNumberingScope(model, primitive);\n if (vertexNumberingScope === undefined) {\n return;\n }\n\n if (vertexNumberingScopes.indexOf(vertexNumberingScope) < 0) {\n vertexNumberingScopes.push(vertexNumberingScope);\n }\n\n // Add the outline to this primitive\n addOutline(\n model,\n meshId,\n primitiveId,\n outlineData.indices,\n vertexNumberingScope\n );\n });\n });\n\n // Update all relevant bufferViews to include the duplicate vertices that are\n // needed for outlining.\n for (var i = 0; i < vertexNumberingScopes.length; ++i) {\n updateBufferViewsWithNewVertices(\n model,\n vertexNumberingScopes[i].bufferViews\n );\n }\n\n // Remove data not referenced by any bufferViews anymore.\n compactBuffers(model);\n};\n\nModelOutlineLoader.createTexture = function (model, context) {\n var cache = context.cache.modelOutliningCache;\n if (!defined(cache)) {\n cache = context.cache.modelOutliningCache = {};\n }\n\n if (defined(cache.outlineTexture)) {\n return cache.outlineTexture;\n }\n\n var maxSize = Math.min(4096, ContextLimits.maximumTextureSize);\n\n var size = maxSize;\n var levelZero = createTexture(size);\n\n var mipLevels = [];\n\n while (size > 1) {\n size >>= 1;\n mipLevels.push(createTexture(size));\n }\n\n var texture = new Texture({\n context: context,\n source: {\n arrayBufferView: levelZero,\n mipLevels: mipLevels,\n },\n width: maxSize,\n height: 1,\n pixelFormat: PixelFormat.LUMINANCE,\n sampler: new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR,\n }),\n });\n\n cache.outlineTexture = texture;\n\n return texture;\n};\n\nfunction addOutline(\n model,\n meshId,\n primitiveId,\n edgeIndicesAccessorId,\n vertexNumberingScope\n) {\n var vertexCopies = vertexNumberingScope.vertexCopies;\n var extraVertices = vertexNumberingScope.extraVertices;\n var outlineCoordinates = vertexNumberingScope.outlineCoordinates;\n\n var gltf = model.gltf;\n var mesh = gltf.meshes[meshId];\n var primitive = mesh.primitives[primitiveId];\n var accessors = gltf.accessors;\n var bufferViews = gltf.bufferViews;\n\n // Find the number of vertices in this primitive by looking at\n // the first attribute. Others are required to be the same.\n var numVertices;\n for (var semantic in primitive.attributes) {\n if (primitive.attributes.hasOwnProperty(semantic)) {\n var attributeId = primitive.attributes[semantic];\n var accessor = accessors[attributeId];\n if (defined(accessor)) {\n numVertices = accessor.count;\n break;\n }\n }\n }\n\n if (!defined(numVertices)) {\n return undefined;\n }\n\n var triangleIndexAccessorGltf = accessors[primitive.indices];\n var triangleIndexBufferViewGltf =\n bufferViews[triangleIndexAccessorGltf.bufferView];\n var edgeIndexAccessorGltf = accessors[edgeIndicesAccessorId];\n var edgeIndexBufferViewGltf = bufferViews[edgeIndexAccessorGltf.bufferView];\n\n var loadResources = model._loadResources;\n var triangleIndexBufferView = loadResources.getBuffer(\n triangleIndexBufferViewGltf\n );\n var edgeIndexBufferView = loadResources.getBuffer(edgeIndexBufferViewGltf);\n\n var triangleIndices =\n triangleIndexAccessorGltf.componentType === 5123\n ? new Uint16Array(\n triangleIndexBufferView.buffer,\n triangleIndexBufferView.byteOffset +\n triangleIndexAccessorGltf.byteOffset,\n triangleIndexAccessorGltf.count\n )\n : new Uint32Array(\n triangleIndexBufferView.buffer,\n triangleIndexBufferView.byteOffset +\n triangleIndexAccessorGltf.byteOffset,\n triangleIndexAccessorGltf.count\n );\n var edgeIndices =\n edgeIndexAccessorGltf.componentType === 5123\n ? new Uint16Array(\n edgeIndexBufferView.buffer,\n edgeIndexBufferView.byteOffset + edgeIndexAccessorGltf.byteOffset,\n edgeIndexAccessorGltf.count\n )\n : new Uint32Array(\n edgeIndexBufferView.buffer,\n edgeIndexBufferView.byteOffset + edgeIndexAccessorGltf.byteOffset,\n edgeIndexAccessorGltf.count\n );\n\n // Make a hash table for quick lookups of whether an edge exists between two\n // vertices. The hash is a sparse array indexed by\n // `smallerVertexIndex * totalNumberOfVertices + biggerVertexIndex`\n // A value of 1 indicates an edge exists between the two vertex indices; any\n // other value indicates that it does not. We store the\n // `edgeSmallMultipler` - that is, the number of vertices in the equation\n // above - at index 0 for easy access to it later.\n\n var edgeSmallMultiplier = numVertices;\n\n var edges = [edgeSmallMultiplier];\n var i;\n for (i = 0; i < edgeIndices.length; i += 2) {\n var a = edgeIndices[i];\n var b = edgeIndices[i + 1];\n var small = Math.min(a, b);\n var big = Math.max(a, b);\n edges[small * edgeSmallMultiplier + big] = 1;\n }\n\n // For each triangle, adjust vertex data so that the correct edges are outlined.\n for (i = 0; i < triangleIndices.length; i += 3) {\n var i0 = triangleIndices[i];\n var i1 = triangleIndices[i + 1];\n var i2 = triangleIndices[i + 2];\n\n var all = false; // set this to true to draw a full wireframe.\n var has01 = all || isHighlighted(edges, i0, i1);\n var has12 = all || isHighlighted(edges, i1, i2);\n var has20 = all || isHighlighted(edges, i2, i0);\n\n var unmatchableVertexIndex = matchAndStoreCoordinates(\n outlineCoordinates,\n i0,\n i1,\n i2,\n has01,\n has12,\n has20\n );\n while (unmatchableVertexIndex >= 0) {\n // Copy the unmatchable index and try again.\n var copy;\n if (unmatchableVertexIndex === i0) {\n copy = vertexCopies[i0];\n } else if (unmatchableVertexIndex === i1) {\n copy = vertexCopies[i1];\n } else {\n copy = vertexCopies[i2];\n }\n\n if (copy === undefined) {\n copy = numVertices + extraVertices.length;\n\n var original = unmatchableVertexIndex;\n while (original >= numVertices) {\n original = extraVertices[original - numVertices];\n }\n extraVertices.push(original);\n vertexCopies[unmatchableVertexIndex] = copy;\n }\n\n if (\n copy > MAX_GLTF_UINT16_INDEX &&\n triangleIndices instanceof Uint16Array\n ) {\n // We outgrew a 16-bit index buffer, switch to 32-bit.\n triangleIndices = new Uint32Array(triangleIndices);\n triangleIndexAccessorGltf.componentType = 5125; // UNSIGNED_INT\n triangleIndexBufferViewGltf.buffer =\n gltf.buffers.push({\n byteLength: triangleIndices.byteLength,\n extras: {\n _pipeline: {\n source: triangleIndices.buffer,\n },\n },\n }) - 1;\n triangleIndexBufferViewGltf.byteLength = triangleIndices.byteLength;\n triangleIndexBufferViewGltf.byteOffset = 0;\n model._loadResources.buffers[\n triangleIndexBufferViewGltf.buffer\n ] = new Uint8Array(\n triangleIndices.buffer,\n 0,\n triangleIndices.byteLength\n );\n\n // The index componentType is also squirreled away in ModelLoadResources.\n // Hackily update it, or else we'll end up creating the wrong type\n // of index buffer later.\n loadResources.indexBuffersToCreate._array.forEach(function (toCreate) {\n if (toCreate.id === triangleIndexAccessorGltf.bufferView) {\n toCreate.componentType = triangleIndexAccessorGltf.componentType;\n }\n });\n }\n\n if (unmatchableVertexIndex === i0) {\n i0 = copy;\n triangleIndices[i] = copy;\n } else if (unmatchableVertexIndex === i1) {\n i1 = copy;\n triangleIndices[i + 1] = copy;\n } else {\n i2 = copy;\n triangleIndices[i + 2] = copy;\n }\n\n if (defined(triangleIndexAccessorGltf.max)) {\n triangleIndexAccessorGltf.max[0] = Math.max(\n triangleIndexAccessorGltf.max[0],\n copy\n );\n }\n\n unmatchableVertexIndex = matchAndStoreCoordinates(\n outlineCoordinates,\n i0,\n i1,\n i2,\n has01,\n has12,\n has20\n );\n }\n }\n}\n\n// Each vertex has three coordinates, a, b, and c.\n// a is the coordinate that applies to edge 2-0 for the vertex.\n// b is the coordinate that applies to edge 0-1 for the vertex.\n// c is the coordinate that applies to edge 1-2 for the vertex.\n\n// A single triangle with all edges highlighted:\n//\n// | a | b | c |\n// | 1 | 1 | 0 |\n// 0\n// / \\\n// / \\\n// edge 0-1 / \\ edge 2-0\n// / \\\n// / \\\n// | a | b | c | 1-----------2 | a | b | c |\n// | 0 | 1 | 1 | edge 1-2 | 1 | 0 | 1 |\n//\n// There are 6 possible orderings of coordinates a, b, and c:\n// 0 - abc\n// 1 - acb\n// 2 - bac\n// 3 - bca\n// 4 - cab\n// 5 - cba\n\n// All vertices must use the _same ordering_ for the edges to be rendered\n// correctly. So we compute a bitmask for each vertex, where the bit at\n// each position indicates whether that ordering works (i.e. doesn't\n// conflict with already-assigned coordinates) for that vertex.\n\n// Then we can find an ordering that works for all three vertices with a\n// bitwise AND.\n\nfunction computeOrderMask(outlineCoordinates, vertexIndex, a, b, c) {\n var startIndex = vertexIndex * 3;\n var first = outlineCoordinates[startIndex];\n var second = outlineCoordinates[startIndex + 1];\n var third = outlineCoordinates[startIndex + 2];\n\n if (first === undefined) {\n // If one coordinate is undefined, they all are, and all orderings are fine.\n return 63; // 0b111111;\n }\n\n return (\n ((first === a && second === b && third === c) << 0) +\n ((first === a && second === c && third === b) << 1) +\n ((first === b && second === a && third === c) << 2) +\n ((first === b && second === c && third === a) << 3) +\n ((first === c && second === a && third === b) << 4) +\n ((first === c && second === b && third === a) << 5)\n );\n}\n\n// popcount for integers 0-63, inclusive.\n// i.e. how many 1s are in the binary representation of the integer.\nfunction popcount0to63(value) {\n return (\n (value & 1) +\n ((value >> 1) & 1) +\n ((value >> 2) & 1) +\n ((value >> 3) & 1) +\n ((value >> 4) & 1) +\n ((value >> 5) & 1)\n );\n}\n\nfunction matchAndStoreCoordinates(\n outlineCoordinates,\n i0,\n i1,\n i2,\n has01,\n has12,\n has20\n) {\n var a0 = has20 ? 1.0 : 0.0;\n var b0 = has01 ? 1.0 : 0.0;\n var c0 = 0.0;\n\n var i0Mask = computeOrderMask(outlineCoordinates, i0, a0, b0, c0);\n if (i0Mask === 0) {\n return i0;\n }\n\n var a1 = 0.0;\n var b1 = has01 ? 1.0 : 0.0;\n var c1 = has12 ? 1.0 : 0.0;\n\n var i1Mask = computeOrderMask(outlineCoordinates, i1, a1, b1, c1);\n if (i1Mask === 0) {\n return i1;\n }\n\n var a2 = has20 ? 1.0 : 0.0;\n var b2 = 0.0;\n var c2 = has12 ? 1.0 : 0.0;\n\n var i2Mask = computeOrderMask(outlineCoordinates, i2, a2, b2, c2);\n if (i2Mask === 0) {\n return i2;\n }\n\n var workingOrders = i0Mask & i1Mask & i2Mask;\n\n var a, b, c;\n\n if (workingOrders & (1 << 0)) {\n // 0 - abc\n a = 0;\n b = 1;\n c = 2;\n } else if (workingOrders & (1 << 1)) {\n // 1 - acb\n a = 0;\n c = 1;\n b = 2;\n } else if (workingOrders & (1 << 2)) {\n // 2 - bac\n b = 0;\n a = 1;\n c = 2;\n } else if (workingOrders & (1 << 3)) {\n // 3 - bca\n b = 0;\n c = 1;\n a = 2;\n } else if (workingOrders & (1 << 4)) {\n // 4 - cab\n c = 0;\n a = 1;\n b = 2;\n } else if (workingOrders & (1 << 5)) {\n // 5 - cba\n c = 0;\n b = 1;\n a = 2;\n } else {\n // No ordering works.\n // Report the most constrained vertex as unmatched so we copy that one.\n var i0Popcount = popcount0to63(i0Mask);\n var i1Popcount = popcount0to63(i1Mask);\n var i2Popcount = popcount0to63(i2Mask);\n if (i0Popcount < i1Popcount && i0Popcount < i2Popcount) {\n return i0;\n } else if (i1Popcount < i2Popcount) {\n return i1;\n }\n return i2;\n }\n\n var i0Start = i0 * 3;\n outlineCoordinates[i0Start + a] = a0;\n outlineCoordinates[i0Start + b] = b0;\n outlineCoordinates[i0Start + c] = c0;\n\n var i1Start = i1 * 3;\n outlineCoordinates[i1Start + a] = a1;\n outlineCoordinates[i1Start + b] = b1;\n outlineCoordinates[i1Start + c] = c1;\n\n var i2Start = i2 * 3;\n outlineCoordinates[i2Start + a] = a2;\n outlineCoordinates[i2Start + b] = b2;\n outlineCoordinates[i2Start + c] = c2;\n\n return -1;\n}\n\nfunction isHighlighted(edges, i0, i1) {\n var edgeSmallMultiplier = edges[0];\n var index = Math.min(i0, i1) * edgeSmallMultiplier + Math.max(i0, i1);\n\n // If i0 and i1 are both 0, then our index will be 0 and we'll end up\n // accessing the edgeSmallMultiplier that we've sneakily squirreled away\n // in index 0. But it makes no sense to have an edge between vertex 0 and\n // itself, so for any edgeSmallMultiplier other than 1 we'll return the\n // correct answer: false. If edgeSmallMultiplier is 1, that means there is\n // only a single vertex, so no danger of forming a meaningful triangle\n // with that.\n return edges[index] === 1;\n}\n\nfunction createTexture(size) {\n var texture = new Uint8Array(size);\n texture[size - 1] = 192;\n if (size === 8) {\n texture[size - 1] = 96;\n } else if (size === 4) {\n texture[size - 1] = 48;\n } else if (size === 2) {\n texture[size - 1] = 24;\n } else if (size === 1) {\n texture[size - 1] = 12;\n }\n return texture;\n}\n\nfunction updateBufferViewsWithNewVertices(model, bufferViews) {\n var gltf = model.gltf;\n var loadResources = model._loadResources;\n\n var i, j;\n for (i = 0; i < bufferViews.length; ++i) {\n var bufferView = bufferViews[i];\n var vertexNumberingScope = bufferView.extras._pipeline.vertexNumberingScope;\n\n // Let the temporary data be garbage collected.\n bufferView.extras._pipeline.vertexNumberingScope = undefined;\n\n var newVertices = vertexNumberingScope.extraVertices;\n\n var sourceData = loadResources.getBuffer(bufferView);\n var byteStride = bufferView.byteStride || 4;\n var newVerticesLength = newVertices.length;\n var destData = new Uint8Array(\n sourceData.byteLength + newVerticesLength * byteStride\n );\n\n // Copy the original vertices\n destData.set(sourceData);\n\n // Copy the vertices added for outlining\n for (j = 0; j < newVerticesLength; ++j) {\n var sourceIndex = newVertices[j] * byteStride;\n var destIndex = sourceData.length + j * byteStride;\n for (var k = 0; k < byteStride; ++k) {\n destData[destIndex + k] = destData[sourceIndex + k];\n }\n }\n\n // This bufferView is an independent buffer now. Update the model accordingly.\n bufferView.byteOffset = 0;\n bufferView.byteLength = destData.byteLength;\n\n var bufferId =\n gltf.buffers.push({\n byteLength: destData.byteLength,\n extras: {\n _pipeline: {\n source: destData.buffer,\n },\n },\n }) - 1;\n\n bufferView.buffer = bufferId;\n loadResources.buffers[bufferId] = destData;\n\n // Update the accessors to reflect the added vertices.\n var accessors = vertexNumberingScope.accessors;\n for (j = 0; j < accessors.length; ++j) {\n var accessorId = accessors[j];\n gltf.accessors[accessorId].count += newVerticesLength;\n }\n\n if (!vertexNumberingScope.createdOutlines) {\n // Create the buffers, views, and accessors for the outline texture coordinates.\n var outlineCoordinates = vertexNumberingScope.outlineCoordinates;\n var outlineCoordinateBuffer = new Float32Array(outlineCoordinates);\n var bufferIndex =\n model.gltf.buffers.push({\n byteLength: outlineCoordinateBuffer.byteLength,\n extras: {\n _pipeline: {\n source: outlineCoordinateBuffer.buffer,\n },\n },\n }) - 1;\n loadResources.buffers[bufferIndex] = new Uint8Array(\n outlineCoordinateBuffer.buffer,\n 0,\n outlineCoordinateBuffer.byteLength\n );\n\n var bufferViewIndex =\n model.gltf.bufferViews.push({\n buffer: bufferIndex,\n byteLength: outlineCoordinateBuffer.byteLength,\n byteOffset: 0,\n byteStride: 3 * Float32Array.BYTES_PER_ELEMENT,\n target: 34962,\n }) - 1;\n\n var accessorIndex =\n model.gltf.accessors.push({\n bufferView: bufferViewIndex,\n byteOffset: 0,\n componentType: 5126,\n count: outlineCoordinateBuffer.length / 3,\n type: \"VEC3\",\n min: [0.0, 0.0, 0.0],\n max: [1.0, 1.0, 1.0],\n }) - 1;\n\n var primitives = vertexNumberingScope.primitives;\n for (j = 0; j < primitives.length; ++j) {\n primitives[j].attributes._OUTLINE_COORDINATES = accessorIndex;\n }\n\n loadResources.vertexBuffersToCreate.enqueue(bufferViewIndex);\n\n vertexNumberingScope.createdOutlines = true;\n }\n }\n}\n\nfunction compactBuffers(model) {\n var gltf = model.gltf;\n var loadResources = model._loadResources;\n\n var i;\n for (i = 0; i < gltf.buffers.length; ++i) {\n var buffer = gltf.buffers[i];\n var bufferViewsUsingThisBuffer = gltf.bufferViews.filter(\n usesBuffer.bind(undefined, i)\n );\n var newLength = bufferViewsUsingThisBuffer.reduce(function (\n previous,\n current\n ) {\n return previous + current.byteLength;\n },\n 0);\n if (newLength === buffer.byteLength) {\n continue;\n }\n\n var newBuffer = new Uint8Array(newLength);\n var offset = 0;\n for (var j = 0; j < bufferViewsUsingThisBuffer.length; ++j) {\n var bufferView = bufferViewsUsingThisBuffer[j];\n var sourceData = loadResources.getBuffer(bufferView);\n newBuffer.set(sourceData, offset);\n\n bufferView.byteOffset = offset;\n offset += sourceData.byteLength;\n }\n\n loadResources.buffers[i] = newBuffer;\n buffer.extras._pipeline.source = newBuffer.buffer;\n buffer.byteLength = newLength;\n }\n}\n\nfunction usesBuffer(bufferId, bufferView) {\n return bufferView.buffer === bufferId;\n}\n\nfunction getVertexNumberingScope(model, primitive) {\n var attributes = primitive.attributes;\n if (attributes === undefined) {\n return undefined;\n }\n\n var gltf = model.gltf;\n\n var vertexNumberingScope;\n\n // Initialize common details for all bufferViews used by this primitive's vertices.\n // All bufferViews used by this primitive must use a common vertex numbering scheme.\n for (var semantic in attributes) {\n if (!attributes.hasOwnProperty(semantic)) {\n continue;\n }\n\n var accessorId = attributes[semantic];\n var accessor = gltf.accessors[accessorId];\n var bufferViewId = accessor.bufferView;\n var bufferView = gltf.bufferViews[bufferViewId];\n\n if (!defined(bufferView.extras)) {\n bufferView.extras = {};\n }\n if (!defined(bufferView.extras._pipeline)) {\n bufferView.extras._pipeline = {};\n }\n\n if (!defined(bufferView.extras._pipeline.vertexNumberingScope)) {\n bufferView.extras._pipeline.vertexNumberingScope = vertexNumberingScope || {\n // Each element in this array is:\n // a) undefined, if the vertex at this index has no copies\n // b) the index of the copy.\n vertexCopies: [],\n\n // Extra vertices appended after the ones originally included in the model.\n // Each element is the index of the vertex that this one is a copy of.\n extraVertices: [],\n\n // The texture coordinates used for outlining, three floats per vertex.\n outlineCoordinates: [],\n\n // The IDs of accessors that use this vertex numbering.\n accessors: [],\n\n // The IDs of bufferViews that use this vertex numbering.\n bufferViews: [],\n\n // The primitives that use this vertex numbering.\n primitives: [],\n\n // True if the buffer for the outlines has already been created.\n createdOutlines: false,\n };\n } else if (\n vertexNumberingScope !== undefined &&\n bufferView.extras._pipeline.vertexNumberingScope !== vertexNumberingScope\n ) {\n // Conflicting vertex numbering, let's give up.\n return undefined;\n }\n\n vertexNumberingScope = bufferView.extras._pipeline.vertexNumberingScope;\n\n if (vertexNumberingScope.bufferViews.indexOf(bufferView) < 0) {\n vertexNumberingScope.bufferViews.push(bufferView);\n }\n\n if (vertexNumberingScope.accessors.indexOf(accessorId) < 0) {\n vertexNumberingScope.accessors.push(accessorId);\n }\n }\n\n vertexNumberingScope.primitives.push(primitive);\n\n return vertexNumberingScope;\n}\n\nexport default ModelOutlineLoader;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport Pass from \"./Pass.js\";\n\n/**\n * Represents a command to the renderer for GPU Compute (using old-school GPGPU).\n *\n * @private\n * @constructor\n */\nfunction ComputeCommand(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The vertex array. If none is provided, a viewport quad will be used.\n *\n * @type {VertexArray}\n * @default undefined\n */\n this.vertexArray = options.vertexArray;\n\n /**\n * The fragment shader source. The default vertex shader is ViewportQuadVS.\n *\n * @type {ShaderSource}\n * @default undefined\n */\n this.fragmentShaderSource = options.fragmentShaderSource;\n\n /**\n * The shader program to apply.\n *\n * @type {ShaderProgram}\n * @default undefined\n */\n this.shaderProgram = options.shaderProgram;\n\n /**\n * An object with functions whose names match the uniforms in the shader program\n * and return values to set those uniforms.\n *\n * @type {Object}\n * @default undefined\n */\n this.uniformMap = options.uniformMap;\n\n /**\n * Texture to use for offscreen rendering.\n *\n * @type {Texture}\n * @default undefined\n */\n this.outputTexture = options.outputTexture;\n\n /**\n * Function that is called immediately before the ComputeCommand is executed. Used to\n * update any renderer resources. Takes the ComputeCommand as its single argument.\n *\n * @type {Function}\n * @default undefined\n */\n this.preExecute = options.preExecute;\n\n /**\n * Function that is called after the ComputeCommand is executed. Takes the output\n * texture as its single argument.\n *\n * @type {Function}\n * @default undefined\n */\n this.postExecute = options.postExecute;\n\n /**\n * Whether the renderer resources will persist beyond this call. If not, they\n * will be destroyed after completion.\n *\n * @type {Boolean}\n * @default false\n */\n this.persists = defaultValue(options.persists, false);\n\n /**\n * The pass when to render. Always compute pass.\n *\n * @type {Pass}\n * @default Pass.COMPUTE;\n */\n this.pass = Pass.COMPUTE;\n\n /**\n * The object who created this command. This is useful for debugging command\n * execution; it allows us to see who created a command when we only have a\n * reference to the command, and can be used to selectively execute commands\n * with {@link Scene#debugCommandFilter}.\n *\n * @type {Object}\n * @default undefined\n *\n * @see Scene#debugCommandFilter\n */\n this.owner = options.owner;\n}\n\n/**\n * Executes the compute command.\n *\n * @param {ComputeEngine} computeEngine The context that processes the compute command.\n */\nComputeCommand.prototype.execute = function (computeEngine) {\n computeEngine.execute(this);\n};\nexport default ComputeCommand;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport loadKTX from \"../Core/loadKTX.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport OctahedralProjectionAtlasFS from \"../Shaders/OctahedralProjectionAtlasFS.js\";\nimport OctahedralProjectionFS from \"../Shaders/OctahedralProjectionFS.js\";\nimport OctahedralProjectionVS from \"../Shaders/OctahedralProjectionVS.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * Packs all mip levels of a cube map into a 2D texture atlas.\n *\n * Octahedral projection is a way of putting the cube maps onto a 2D texture\n * with minimal distortion and easy look up.\n * See Chapter 16 of WebGL Insights \"HDR Image-Based Lighting on the Web\" by Jeff Russell\n * and \"Octahedron Environment Maps\" for reference.\n *\n * @private\n */\nfunction OctahedralProjectedCubeMap(url) {\n this._url = url;\n\n this._cubeMapBuffers = undefined;\n this._cubeMaps = undefined;\n this._texture = undefined;\n this._mipTextures = undefined;\n this._va = undefined;\n this._sp = undefined;\n\n this._maximumMipmapLevel = undefined;\n\n this._loading = false;\n this._ready = false;\n this._readyPromise = when.defer();\n}\n\nObject.defineProperties(OctahedralProjectedCubeMap.prototype, {\n /**\n * The url to the KTX file containing the specular environment map and convoluted mipmaps.\n * @memberof OctahedralProjectedCubeMap.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._url;\n },\n },\n /**\n * A texture containing all the packed convolutions.\n * @memberof OctahedralProjectedCubeMap.prototype\n * @type {Texture}\n * @readonly\n */\n texture: {\n get: function () {\n return this._texture;\n },\n },\n /**\n * The maximum number of mip levels.\n * @memberOf OctahedralProjectedCubeMap.prototype\n * @type {Number}\n * @readonly\n */\n maximumMipmapLevel: {\n get: function () {\n return this._maximumMipmapLevel;\n },\n },\n /**\n * Determines if the texture atlas is complete and ready to use.\n * @memberof OctahedralProjectedCubeMap.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n /**\n * Gets a promise that resolves when the texture atlas is ready to use.\n * @memberof OctahedralProjectedCubeMap.prototype\n * @type {Promise<void>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nOctahedralProjectedCubeMap.isSupported = function (context) {\n return (\n (context.colorBufferHalfFloat && context.halfFloatingPointTexture) ||\n (context.floatingPointTexture && context.colorBufferFloat)\n );\n};\n\n// These vertices are based on figure 1 from \"Octahedron Environment Maps\".\nvar v1 = new Cartesian3(1.0, 0.0, 0.0);\nvar v2 = new Cartesian3(0.0, 0.0, 1.0);\nvar v3 = new Cartesian3(-1.0, 0.0, 0.0);\nvar v4 = new Cartesian3(0.0, 0.0, -1.0);\nvar v5 = new Cartesian3(0.0, 1.0, 0.0);\nvar v6 = new Cartesian3(0.0, -1.0, 0.0);\n\n// top left, left, top, center, right, top right, bottom, bottom left, bottom right\nvar cubeMapCoordinates = [v5, v3, v2, v6, v1, v5, v4, v5, v5];\nvar length = cubeMapCoordinates.length;\nvar flatCubeMapCoordinates = new Float32Array(length * 3);\n\nvar offset = 0;\nfor (var i = 0; i < length; ++i, offset += 3) {\n Cartesian3.pack(cubeMapCoordinates[i], flatCubeMapCoordinates, offset);\n}\n\nvar flatPositions = new Float32Array([\n -1.0,\n 1.0, // top left\n -1.0,\n 0.0, // left\n 0.0,\n 1.0, // top\n 0.0,\n 0.0, // center\n 1.0,\n 0.0, // right\n 1.0,\n 1.0, // top right\n 0.0,\n -1.0, // bottom\n -1.0,\n -1.0, // bottom left\n 1.0,\n -1.0, // bottom right\n]);\nvar indices = new Uint16Array([\n 0,\n 1,\n 2, // top left, left, top,\n 2,\n 3,\n 1, // top, center, left,\n 7,\n 6,\n 1, // bottom left, bottom, left,\n 3,\n 6,\n 1, // center, bottom, left,\n 2,\n 5,\n 4, // top, top right, right,\n 3,\n 4,\n 2, // center, right, top,\n 4,\n 8,\n 6, // right, bottom right, bottom,\n 3,\n 4,\n 6, //center, right, bottom\n]);\n\nfunction createVertexArray(context) {\n var positionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: flatPositions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var cubeMapCoordinatesBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: flatCubeMapCoordinates,\n usage: BufferUsage.STATIC_DRAW,\n });\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n\n var attributes = [\n {\n index: 0,\n vertexBuffer: positionBuffer,\n componentsPerAttribute: 2,\n componentDatatype: ComponentDatatype.FLOAT,\n },\n {\n index: 1,\n vertexBuffer: cubeMapCoordinatesBuffer,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n },\n ];\n return new VertexArray({\n context: context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n });\n}\n\nfunction createUniformTexture(texture) {\n return function () {\n return texture;\n };\n}\n\nfunction cleanupResources(map) {\n map._va = map._va && map._va.destroy();\n map._sp = map._sp && map._sp.destroy();\n\n var i;\n var length;\n\n var cubeMaps = map._cubeMaps;\n if (defined(cubeMaps)) {\n length = cubeMaps.length;\n for (i = 0; i < length; ++i) {\n cubeMaps[i].destroy();\n }\n }\n var mipTextures = map._mipTextures;\n if (defined(mipTextures)) {\n length = mipTextures.length;\n for (i = 0; i < length; ++i) {\n mipTextures[i].destroy();\n }\n }\n\n map._va = undefined;\n map._sp = undefined;\n map._cubeMaps = undefined;\n map._cubeMapBuffers = undefined;\n map._mipTextures = undefined;\n}\n\n/**\n * Creates compute commands to generate octahedral projections of each cube map\n * and then renders them to an atlas.\n * <p>\n * Only needs to be called twice. The first call queues the compute commands to generate the atlas.\n * The second call cleans up unused resources. Every call afterwards is a no-op.\n * </p>\n *\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nOctahedralProjectedCubeMap.prototype.update = function (frameState) {\n var context = frameState.context;\n\n if (!OctahedralProjectedCubeMap.isSupported(context)) {\n return;\n }\n\n if (defined(this._texture) && defined(this._va)) {\n cleanupResources(this);\n }\n if (defined(this._texture)) {\n return;\n }\n\n if (!defined(this._texture) && !this._loading) {\n var cachedTexture = context.textureCache.getTexture(this._url);\n if (defined(cachedTexture)) {\n cleanupResources(this);\n this._texture = cachedTexture;\n this._maximumMipmapLevel = this._texture.maximumMipmapLevel;\n this._ready = true;\n this._readyPromise.resolve();\n return;\n }\n }\n\n var cubeMapBuffers = this._cubeMapBuffers;\n if (!defined(cubeMapBuffers) && !this._loading) {\n var that = this;\n loadKTX(this._url)\n .then(function (buffers) {\n that._cubeMapBuffers = buffers;\n that._loading = false;\n })\n .otherwise(this._readyPromise.reject);\n this._loading = true;\n }\n if (!defined(this._cubeMapBuffers)) {\n return;\n }\n\n this._va = createVertexArray(context);\n this._sp = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: OctahedralProjectionVS,\n fragmentShaderSource: OctahedralProjectionFS,\n attributeLocations: {\n position: 0,\n cubeMapCoordinates: 1,\n },\n });\n\n // We only need up to 6 mip levels to avoid artifacts.\n var length = Math.min(cubeMapBuffers.length, 6);\n this._maximumMipmapLevel = length - 1;\n var cubeMaps = (this._cubeMaps = new Array(length));\n var mipTextures = (this._mipTextures = new Array(length));\n var originalSize = cubeMapBuffers[0].positiveX.width * 2.0;\n var uniformMap = {\n originalSize: function () {\n return originalSize;\n },\n };\n\n var pixelDatatype = context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT;\n var pixelFormat = PixelFormat.RGBA;\n\n // First we project each cubemap onto a flat octahedron, and write that to a texture.\n for (var i = 0; i < length; ++i) {\n // Swap +Y/-Y faces since the octahedral projection expects this order.\n var positiveY = cubeMapBuffers[i].positiveY;\n cubeMapBuffers[i].positiveY = cubeMapBuffers[i].negativeY;\n cubeMapBuffers[i].negativeY = positiveY;\n\n var cubeMap = (cubeMaps[i] = new CubeMap({\n context: context,\n source: cubeMapBuffers[i],\n }));\n var size = cubeMaps[i].width * 2;\n\n var mipTexture = (mipTextures[i] = new Texture({\n context: context,\n width: size,\n height: size,\n pixelDatatype: pixelDatatype,\n pixelFormat: pixelFormat,\n }));\n\n var command = new ComputeCommand({\n vertexArray: this._va,\n shaderProgram: this._sp,\n uniformMap: {\n cubeMap: createUniformTexture(cubeMap),\n },\n outputTexture: mipTexture,\n persists: true,\n owner: this,\n });\n frameState.commandList.push(command);\n\n uniformMap[\"texture\" + i] = createUniformTexture(mipTexture);\n }\n\n this._texture = new Texture({\n context: context,\n width: originalSize * 1.5 + 2.0, // We add a 1 pixel border to avoid linear sampling artifacts.\n height: originalSize,\n pixelDatatype: pixelDatatype,\n pixelFormat: pixelFormat,\n });\n\n this._texture.maximumMipmapLevel = this._maximumMipmapLevel;\n context.textureCache.addTexture(this._url, this._texture);\n\n var atlasCommand = new ComputeCommand({\n fragmentShaderSource: OctahedralProjectionAtlasFS,\n uniformMap: uniformMap,\n outputTexture: this._texture,\n persists: false,\n owner: this,\n });\n frameState.commandList.push(atlasCommand);\n\n this._ready = true;\n this._readyPromise.resolve();\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see OctahedralProjectedCubeMap#destroy\n */\nOctahedralProjectedCubeMap.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see OctahedralProjectedCubeMap#isDestroyed\n */\nOctahedralProjectedCubeMap.prototype.destroy = function () {\n cleanupResources(this);\n this._texture = this._texture && this._texture.destroy();\n return destroyObject(this);\n};\nexport default OctahedralProjectedCubeMap;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 position;\\n\\\nattribute vec3 cubeMapCoordinates;\\n\\\n\\n\\\nvarying vec3 v_cubeMapCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_Position = position;\\n\\\n v_cubeMapCoordinates = cubeMapCoordinates;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_cubeMapCoordinates;\\n\\\nuniform samplerCube cubeMap;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 rgbm = textureCube(cubeMap, v_cubeMapCoordinates);\\n\\\n float m = rgbm.a * 16.0;\\n\\\n vec3 r = rgbm.rgb * m;\\n\\\n gl_FragColor = vec4(r * r, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec2 v_textureCoordinates;\\n\\\n\\n\\\nuniform float originalSize;\\n\\\nuniform sampler2D texture0;\\n\\\nuniform sampler2D texture1;\\n\\\nuniform sampler2D texture2;\\n\\\nuniform sampler2D texture3;\\n\\\nuniform sampler2D texture4;\\n\\\nuniform sampler2D texture5;\\n\\\n\\n\\\nconst float yMipLevel1 = 1.0 - (1.0 / pow(2.0, 1.0));\\n\\\nconst float yMipLevel2 = 1.0 - (1.0 / pow(2.0, 2.0));\\n\\\nconst float yMipLevel3 = 1.0 - (1.0 / pow(2.0, 3.0));\\n\\\nconst float yMipLevel4 = 1.0 - (1.0 / pow(2.0, 4.0));\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec2 uv = v_textureCoordinates;\\n\\\n vec2 textureSize = vec2(originalSize * 1.5 + 2.0, originalSize);\\n\\\n vec2 pixel = 1.0 / textureSize;\\n\\\n\\n\\\n float mipLevel = 0.0;\\n\\\n\\n\\\n if (uv.x - pixel.x > (textureSize.y / textureSize.x))\\n\\\n {\\n\\\n mipLevel = 1.0;\\n\\\n if (uv.y - pixel.y > yMipLevel1)\\n\\\n {\\n\\\n mipLevel = 2.0;\\n\\\n if (uv.y - pixel.y * 3.0 > yMipLevel2)\\n\\\n {\\n\\\n mipLevel = 3.0;\\n\\\n if (uv.y - pixel.y * 5.0 > yMipLevel3)\\n\\\n {\\n\\\n mipLevel = 4.0;\\n\\\n if (uv.y - pixel.y * 7.0 > yMipLevel4)\\n\\\n {\\n\\\n mipLevel = 5.0;\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n\\n\\\n if (mipLevel > 0.0)\\n\\\n {\\n\\\n float scale = pow(2.0, mipLevel);\\n\\\n\\n\\\n uv.y -= (pixel.y * (mipLevel - 1.0) * 2.0);\\n\\\n uv.x *= ((textureSize.x - 2.0) / textureSize.y);\\n\\\n\\n\\\n uv.x -= 1.0 + pixel.x;\\n\\\n uv.y -= (1.0 - (1.0 / pow(2.0, mipLevel - 1.0)));\\n\\\n uv *= scale;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n uv.x *= (textureSize.x / textureSize.y);\\n\\\n }\\n\\\n\\n\\\n if(mipLevel == 0.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture0, uv);\\n\\\n }\\n\\\n else if(mipLevel == 1.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture1, uv);\\n\\\n }\\n\\\n else if(mipLevel == 2.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture2, uv);\\n\\\n }\\n\\\n else if(mipLevel == 3.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture3, uv);\\n\\\n }\\n\\\n else if(mipLevel == 4.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture4, uv);\\n\\\n }\\n\\\n else if(mipLevel == 5.0)\\n\\\n {\\n\\\n gl_FragColor = texture2D(texture5, uv);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n gl_FragColor = vec4(0.0);\\n\\\n }\\n\\\n}\\n\\\n\";\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport getAbsoluteUri from \"../Core/getAbsoluteUri.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport loadCRN from \"../Core/loadCRN.js\";\nimport loadImageFromTypedArray from \"../Core/loadImageFromTypedArray.js\";\nimport loadKTX from \"../Core/loadKTX.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Resource from \"../Core/Resource.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport addDefaults from \"../ThirdParty/GltfPipeline/addDefaults.js\";\nimport addPipelineExtras from \"../ThirdParty/GltfPipeline/addPipelineExtras.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport getAccessorByteStride from \"../ThirdParty/GltfPipeline/getAccessorByteStride.js\";\nimport hasExtension from \"../ThirdParty/GltfPipeline/hasExtension.js\";\nimport numberOfComponentsForType from \"../ThirdParty/GltfPipeline/numberOfComponentsForType.js\";\nimport parseGlb from \"../ThirdParty/GltfPipeline/parseGlb.js\";\nimport updateVersion from \"../ThirdParty/GltfPipeline/updateVersion.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Axis from \"./Axis.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport ColorBlendMode from \"./ColorBlendMode.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport DracoLoader from \"./DracoLoader.js\";\nimport getClipAndStyleCode from \"./getClipAndStyleCode.js\";\nimport getClippingFunction from \"./getClippingFunction.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport JobType from \"./JobType.js\";\nimport ModelAnimationCache from \"./ModelAnimationCache.js\";\nimport ModelAnimationCollection from \"./ModelAnimationCollection.js\";\nimport ModelLoadResources from \"./ModelLoadResources.js\";\nimport ModelMaterial from \"./ModelMaterial.js\";\nimport ModelMesh from \"./ModelMesh.js\";\nimport ModelNode from \"./ModelNode.js\";\nimport ModelOutlineLoader from \"./ModelOutlineLoader.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport OctahedralProjectedCubeMap from \"./OctahedralProjectedCubeMap.js\";\nimport processModelMaterialsCommon from \"./processModelMaterialsCommon.js\";\nimport processPbrMaterials from \"./processPbrMaterials.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\nvar boundingSphereCartesian3Scratch = new Cartesian3();\n\nvar ModelState = ModelUtility.ModelState;\n\n// glTF MIME types discussed in https://github.com/KhronosGroup/glTF/issues/412 and https://github.com/KhronosGroup/glTF/issues/943\nvar defaultModelAccept =\n \"model/gltf-binary,model/gltf+json;q=0.8,application/json;q=0.2,*/*;q=0.01\";\n\nvar articulationEpsilon = CesiumMath.EPSILON16;\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction setCachedGltf(model, cachedGltf) {\n model._cachedGltf = cachedGltf;\n}\n\n// glTF JSON can be big given embedded geometry, textures, and animations, so we\n// cache it across all models using the same url/cache-key. This also reduces the\n// slight overhead in assigning defaults to missing values.\n//\n// Note that this is a global cache, compared to renderer resources, which\n// are cached per context.\nfunction CachedGltf(options) {\n this._gltf = options.gltf;\n this.ready = options.ready;\n this.modelsToLoad = [];\n this.count = 0;\n}\n\nObject.defineProperties(CachedGltf.prototype, {\n gltf: {\n set: function (value) {\n this._gltf = value;\n },\n\n get: function () {\n return this._gltf;\n },\n },\n});\n\nCachedGltf.prototype.makeReady = function (gltfJson) {\n this.gltf = gltfJson;\n\n var models = this.modelsToLoad;\n var length = models.length;\n for (var i = 0; i < length; ++i) {\n var m = models[i];\n if (!m.isDestroyed()) {\n setCachedGltf(m, this);\n }\n }\n this.modelsToLoad = undefined;\n this.ready = true;\n};\n\nvar gltfCache = {};\nvar uriToGuid = {};\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * A 3D model based on glTF, the runtime asset format for WebGL, OpenGL ES, and OpenGL.\n * <p>\n * Cesium includes support for geometry and materials, glTF animations, and glTF skinning.\n * In addition, individual glTF nodes are pickable with {@link Scene#pick} and animatable\n * with {@link Model#getNode}. glTF cameras and lights are not currently supported.\n * </p>\n * <p>\n * An external glTF asset is created with {@link Model.fromGltf}. glTF JSON can also be\n * created at runtime and passed to this constructor function. In either case, the\n * {@link Model#readyPromise} is resolved when the model is ready to render, i.e.,\n * when the external binary, image, and shader files are downloaded and the WebGL\n * resources are created.\n * </p>\n * <p>\n * Cesium supports glTF assets with the following extensions:\n * <ul>\n * <li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/README.md|KHR_binary_glTF (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_materials_common/README.md|KHR_materials_common (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/WEB3D_quantized_attributes/README.md|WEB3D_quantized_attributes (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/AGI_articulations/README.md|AGI_articulations}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/pull/1302|KHR_blend (draft)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md|KHR_draco_mesh_compression}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/README.md|KHR_materials_pbrSpecularGlossiness}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit/README.md|KHR_materials_unlit}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_techniques_webgl/README.md|KHR_techniques_webgl}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform}\n * </li>\n * </ul>\n * </p>\n * <p>\n * For high-precision rendering, Cesium supports the {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/CESIUM_RTC/README.md|CESIUM_RTC} extension, which introduces the\n * CESIUM_RTC_MODELVIEW parameter semantic that says the node is in WGS84 coordinates translated\n * relative to a local origin.\n * </p>\n *\n * @alias Model\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Object|ArrayBuffer|Uint8Array} [options.gltf] A glTF JSON object, or a binary glTF buffer.\n * @param {Resource|String} [options.basePath=''] The base path that paths in the glTF JSON are relative to.\n * @param {Boolean} [options.show=true] Determines if the model primitive will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * @param {Number} [options.scale=1.0] A uniform scale applied to this model.\n * @param {Number} [options.minimumPixelSize=0.0] The approximate minimum pixel size of the model regardless of zoom.\n * @param {Number} [options.maximumScale] The maximum scale size of a model. An upper limit for minimumPixelSize.\n * @param {Object} [options.id] A user-defined object to return when the model is picked with {@link Scene#pick}.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each glTF mesh and primitive is pickable with {@link Scene#pick}.\n * @param {Boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @param {Boolean} [options.asynchronous=true] Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded.\n * @param {Boolean} [options.clampAnimations=true] Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the model casts or receives shadows from light sources.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for each draw command in the model.\n * @param {Boolean} [options.debugWireframe=false] For debugging only. Draws the model in wireframe.\n * @param {HeightReference} [options.heightReference=HeightReference.NONE] Determines how the model is drawn relative to terrain.\n * @param {Scene} [options.scene] Must be passed in for models that use the height reference property.\n * @param {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this model will be displayed.\n * @param {Color} [options.color=Color.WHITE] A color that blends with the model's rendered color.\n * @param {ColorBlendMode} [options.colorBlendMode=ColorBlendMode.HIGHLIGHT] Defines how the color blends with the model.\n * @param {Number} [options.colorBlendAmount=0.5] Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @param {Color} [options.silhouetteColor=Color.RED] The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts.\n * @param {Number} [options.silhouetteSize=0.0] The size of the silhouette in pixels.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @param {Boolean} [options.dequantizeInShader=true] Determines if a {@link https://github.com/google/draco|Draco} encoded model is dequantized on the GPU. This decreases total memory usage for encoded models.\n * @param {Cartesian2} [options.imageBasedLightingFactor=Cartesian2(1.0, 1.0)] Scales diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox.\n * @param {Cartesian3} [options.lightColor] The light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @param {Number} [options.luminanceAtZenith=0.2] The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map.\n * @param {Cartesian3[]} [options.sphericalHarmonicCoefficients] The third order spherical harmonic coefficients used for the diffuse color of image-based lighting.\n * @param {String} [options.specularEnvironmentMaps] A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n * @param {Boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if {@link Model#color} is translucent or {@link Model#silhouetteSize} is greater than 0.0.\n *\n * @see Model.fromGltf\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=3D%20Models.html|Cesium Sandcastle Models Demo}\n */\nfunction Model(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var cacheKey = options.cacheKey;\n this._cacheKey = cacheKey;\n this._cachedGltf = undefined;\n this._releaseGltfJson = defaultValue(options.releaseGltfJson, false);\n\n var cachedGltf;\n if (\n defined(cacheKey) &&\n defined(gltfCache[cacheKey]) &&\n gltfCache[cacheKey].ready\n ) {\n // glTF JSON is in cache and ready\n cachedGltf = gltfCache[cacheKey];\n ++cachedGltf.count;\n } else {\n // glTF was explicitly provided, e.g., when a user uses the Model constructor directly\n var gltf = options.gltf;\n\n if (defined(gltf)) {\n if (gltf instanceof ArrayBuffer) {\n gltf = new Uint8Array(gltf);\n }\n\n if (gltf instanceof Uint8Array) {\n // Binary glTF\n var parsedGltf = parseGlb(gltf);\n\n cachedGltf = new CachedGltf({\n gltf: parsedGltf,\n ready: true,\n });\n } else {\n // Normal glTF (JSON)\n cachedGltf = new CachedGltf({\n gltf: options.gltf,\n ready: true,\n });\n }\n\n cachedGltf.count = 1;\n\n if (defined(cacheKey)) {\n gltfCache[cacheKey] = cachedGltf;\n }\n }\n }\n setCachedGltf(this, cachedGltf);\n\n var basePath = defaultValue(options.basePath, \"\");\n this._resource = Resource.createIfNeeded(basePath);\n\n // User specified credit\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n // Create a list of Credit's so they can be added from the Resource later\n this._resourceCredits = [];\n\n /**\n * Determines if the model primitive will be shown.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * The silhouette color.\n *\n * @type {Color}\n *\n * @default Color.RED\n */\n this.silhouetteColor = defaultValue(options.silhouetteColor, Color.RED);\n this._silhouetteColor = new Color();\n this._silhouetteColorPreviousAlpha = 1.0;\n this._normalAttributeName = undefined;\n\n /**\n * The size of the silhouette in pixels.\n *\n * @type {Number}\n *\n * @default 0.0\n */\n this.silhouetteSize = defaultValue(options.silhouetteSize, 0.0);\n\n /**\n * The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * When this is the identity matrix, the model is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n *\n * @default {@link Matrix4.IDENTITY}\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n * m.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = Matrix4.clone(this.modelMatrix);\n this._clampedModelMatrix = undefined;\n\n /**\n * A uniform scale applied to this model before the {@link Model#modelMatrix}.\n * Values greater than <code>1.0</code> increase the size of the model; values\n * less than <code>1.0</code> decrease.\n *\n * @type {Number}\n *\n * @default 1.0\n */\n this.scale = defaultValue(options.scale, 1.0);\n this._scale = this.scale;\n\n /**\n * The approximate minimum pixel size of the model regardless of zoom.\n * This can be used to ensure that a model is visible even when the viewer\n * zooms out. When <code>0.0</code>, no minimum size is enforced.\n *\n * @type {Number}\n *\n * @default 0.0\n */\n this.minimumPixelSize = defaultValue(options.minimumPixelSize, 0.0);\n this._minimumPixelSize = this.minimumPixelSize;\n\n /**\n * The maximum scale size for a model. This can be used to give\n * an upper limit to the {@link Model#minimumPixelSize}, ensuring that the model\n * is never an unreasonable scale.\n *\n * @type {Number}\n */\n this.maximumScale = options.maximumScale;\n this._maximumScale = this.maximumScale;\n\n /**\n * User-defined object returned when the model is picked.\n *\n * @type Object\n *\n * @default undefined\n *\n * @see Scene#pick\n */\n this.id = options.id;\n this._id = options.id;\n\n /**\n * Returns the height reference of the model\n *\n * @type {HeightReference}\n *\n * @default HeightReference.NONE\n */\n this.heightReference = defaultValue(\n options.heightReference,\n HeightReference.NONE\n );\n this._heightReference = this.heightReference;\n this._heightChanged = false;\n this._removeUpdateHeightCallback = undefined;\n var scene = options.scene;\n this._scene = scene;\n if (defined(scene) && defined(scene.terrainProviderChanged)) {\n this._terrainProviderChangedCallback = scene.terrainProviderChanged.addEventListener(\n function () {\n this._heightChanged = true;\n },\n this\n );\n }\n\n /**\n * Used for picking primitives that wrap a model.\n *\n * @private\n */\n this._pickObject = options.pickObject;\n this._allowPicking = defaultValue(options.allowPicking, true);\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n /**\n * The currently playing glTF animations.\n *\n * @type {ModelAnimationCollection}\n */\n this.activeAnimations = new ModelAnimationCollection(this);\n\n /**\n * Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n *\n * @type {Boolean}\n */\n this.clampAnimations = defaultValue(options.clampAnimations, true);\n\n this._defaultTexture = undefined;\n this._incrementallyLoadTextures = defaultValue(\n options.incrementallyLoadTextures,\n true\n );\n this._asynchronous = defaultValue(options.asynchronous, true);\n\n /**\n * Determines whether the model casts or receives shadows from light sources.\n *\n * @type {ShadowMode}\n *\n * @default ShadowMode.ENABLED\n */\n this.shadows = defaultValue(options.shadows, ShadowMode.ENABLED);\n this._shadows = this.shadows;\n\n /**\n * A color that blends with the model's rendered color.\n *\n * @type {Color}\n *\n * @default Color.WHITE\n */\n this.color = Color.clone(defaultValue(options.color, Color.WHITE));\n this._colorPreviousAlpha = 1.0;\n\n /**\n * Defines how the color blends with the model.\n *\n * @type {ColorBlendMode}\n *\n * @default ColorBlendMode.HIGHLIGHT\n */\n this.colorBlendMode = defaultValue(\n options.colorBlendMode,\n ColorBlendMode.HIGHLIGHT\n );\n\n /**\n * Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>.\n * A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with\n * any value in-between resulting in a mix of the two.\n *\n * @type {Number}\n *\n * @default 0.5\n */\n this.colorBlendAmount = defaultValue(options.colorBlendAmount, 0.5);\n\n this._colorShadingEnabled = false;\n\n this._clippingPlanes = undefined;\n this.clippingPlanes = options.clippingPlanes;\n // Used for checking if shaders need to be regenerated due to clipping plane changes.\n this._clippingPlanesState = 0;\n // If defined, use this matrix to position the clipping planes instead of the modelMatrix.\n // This is so that when models are part of a tileset they all get clipped relative\n // to the root tile.\n this.clippingPlanesOriginMatrix = undefined;\n\n /**\n * Whether to cull back-facing geometry. When true, back face culling is\n * determined by the material's doubleSided property; when false, back face\n * culling is disabled. Back faces are not culled if {@link Model#color} is\n * translucent or {@link Model#silhouetteSize} is greater than 0.0.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.backFaceCulling = defaultValue(options.backFaceCulling, true);\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the model. A glTF primitive corresponds\n * to one draw command. A glTF mesh has an array of primitives, often of length one.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n this._debugShowBoundingVolume = false;\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the model in wireframe.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugWireframe = defaultValue(options.debugWireframe, false);\n this._debugWireframe = false;\n\n this._distanceDisplayCondition = options.distanceDisplayCondition;\n\n // Undocumented options\n this._addBatchIdToGeneratedShaders = options.addBatchIdToGeneratedShaders;\n this._precreatedAttributes = options.precreatedAttributes;\n this._vertexShaderLoaded = options.vertexShaderLoaded;\n this._fragmentShaderLoaded = options.fragmentShaderLoaded;\n this._uniformMapLoaded = options.uniformMapLoaded;\n this._pickIdLoaded = options.pickIdLoaded;\n this._ignoreCommands = defaultValue(options.ignoreCommands, false);\n this._requestType = options.requestType;\n this._upAxis = defaultValue(options.upAxis, Axis.Y);\n this._gltfForwardAxis = Axis.Z;\n this._forwardAxis = options.forwardAxis;\n\n /**\n * @private\n * @readonly\n */\n this.cull = defaultValue(options.cull, true);\n\n /**\n * @private\n * @readonly\n */\n this.opaquePass = defaultValue(options.opaquePass, Pass.OPAQUE);\n\n this._computedModelMatrix = new Matrix4(); // Derived from modelMatrix and scale\n this._clippingPlaneModelViewMatrix = Matrix4.clone(Matrix4.IDENTITY); // Derived from modelMatrix, scale, and the current view matrix\n this._initialRadius = undefined; // Radius without model's scale property, model-matrix scale, animations, or skins\n this._boundingSphere = undefined;\n this._scaledBoundingSphere = new BoundingSphere();\n this._state = ModelState.NEEDS_LOAD;\n this._loadResources = undefined;\n\n this._mode = undefined;\n\n this._perNodeShowDirty = false; // true when the Cesium API was used to change a node's show property\n this._cesiumAnimationsDirty = false; // true when the Cesium API, not a glTF animation, changed a node transform\n this._dirty = false; // true when the model was transformed this frame\n this._maxDirtyNumber = 0; // Used in place of a dirty boolean flag to avoid an extra graph traversal\n\n this._runtime = {\n animations: undefined,\n articulationsByName: undefined,\n articulationsByStageKey: undefined,\n stagesByKey: undefined,\n rootNodes: undefined,\n nodes: undefined, // Indexed with the node's index\n nodesByName: undefined, // Indexed with name property in the node\n skinnedNodes: undefined,\n meshesByName: undefined, // Indexed with the name property in the mesh\n materialsByName: undefined, // Indexed with the name property in the material\n materialsById: undefined, // Indexed with the material's index\n };\n\n this._uniformMaps = {}; // Not cached since it can be targeted by glTF animation\n this._extensionsUsed = undefined; // Cached used glTF extensions\n this._extensionsRequired = undefined; // Cached required glTF extensions\n this._quantizedUniforms = {}; // Quantized uniforms for each program for WEB3D_quantized_attributes\n this._programPrimitives = {};\n this._rendererResources = {\n // Cached between models with the same url/cache-key\n buffers: {},\n vertexArrays: {},\n programs: {},\n sourceShaders: {},\n silhouettePrograms: {},\n textures: {},\n samplers: {},\n renderStates: {},\n };\n this._cachedRendererResources = undefined;\n this._loadRendererResourcesFromCache = false;\n\n this._dequantizeInShader = defaultValue(options.dequantizeInShader, true);\n this._decodedData = {};\n\n this._cachedGeometryByteLength = 0;\n this._cachedTexturesByteLength = 0;\n this._geometryByteLength = 0;\n this._texturesByteLength = 0;\n this._trianglesLength = 0;\n\n // Hold references for shader reconstruction.\n // Hold these separately because _cachedGltf may get released (this.releaseGltfJson)\n this._sourceTechniques = {};\n this._sourcePrograms = {};\n this._quantizedVertexShaders = {};\n\n this._nodeCommands = [];\n this._pickIds = [];\n\n // CESIUM_RTC extension\n this._rtcCenter = undefined; // reference to either 3D or 2D\n this._rtcCenterEye = undefined; // in eye coordinates\n this._rtcCenter3D = undefined; // in world coordinates\n this._rtcCenter2D = undefined; // in projected world coordinates\n\n this._sourceVersion = undefined;\n this._sourceKHRTechniquesWebGL = undefined;\n\n this._imageBasedLightingFactor = new Cartesian2(1.0, 1.0);\n Cartesian2.clone(\n options.imageBasedLightingFactor,\n this._imageBasedLightingFactor\n );\n this._lightColor = Cartesian3.clone(options.lightColor);\n\n this._luminanceAtZenith = undefined;\n this.luminanceAtZenith = defaultValue(options.luminanceAtZenith, 0.2);\n\n this._sphericalHarmonicCoefficients = options.sphericalHarmonicCoefficients;\n this._specularEnvironmentMaps = options.specularEnvironmentMaps;\n this._shouldUpdateSpecularMapAtlas = true;\n this._specularEnvironmentMapAtlas = undefined;\n\n this._useDefaultSphericalHarmonics = false;\n this._useDefaultSpecularMaps = false;\n\n this._shouldRegenerateShaders = false;\n}\n\nObject.defineProperties(Model.prototype, {\n /**\n * The object for the glTF JSON, including properties with default values omitted\n * from the JSON provided to this model.\n *\n * @memberof Model.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @default undefined\n */\n gltf: {\n get: function () {\n return defined(this._cachedGltf) ? this._cachedGltf.gltf : undefined;\n },\n },\n\n /**\n * When <code>true</code>, the glTF JSON is not stored with the model once the model is\n * loaded (when {@link Model#ready} is <code>true</code>). This saves memory when\n * geometry, textures, and animations are embedded in the .gltf file.\n * This is especially useful for cases like 3D buildings, where each .gltf model is unique\n * and caching the glTF JSON is not effective.\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n *\n * @private\n */\n releaseGltfJson: {\n get: function () {\n return this._releaseGltfJson;\n },\n },\n\n /**\n * The key identifying this model in the model cache for glTF JSON, renderer resources, and animations.\n * Caching saves memory and improves loading speed when several models with the same url are created.\n * <p>\n * This key is automatically generated when the model is created with {@link Model.fromGltf}. If the model\n * is created directly from glTF JSON using the {@link Model} constructor, this key can be manually\n * provided; otherwise, the model will not be changed.\n * </p>\n *\n * @memberof Model.prototype\n *\n * @type {String}\n * @readonly\n *\n * @private\n */\n cacheKey: {\n get: function () {\n return this._cacheKey;\n },\n },\n\n /**\n * The base path that paths in the glTF JSON are relative to. The base\n * path is the same path as the path containing the .gltf file\n * minus the .gltf file, when binary, image, and shader files are\n * in the same directory as the .gltf. When this is <code>''</code>,\n * the app's base path is used.\n *\n * @memberof Model.prototype\n *\n * @type {String}\n * @readonly\n *\n * @default ''\n */\n basePath: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * The model's bounding sphere in its local coordinate system. This does not take into\n * account glTF animations and skins nor does it take into account {@link Model#minimumPixelSize}.\n *\n * @memberof Model.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n *\n * @default undefined\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n *\n * @example\n * // Center in WGS84 coordinates\n * var center = Cesium.Matrix4.multiplyByPoint(model.modelMatrix, model.boundingSphere.center, new Cesium.Cartesian3());\n */\n boundingSphere: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (this._state !== ModelState.LOADED) {\n throw new DeveloperError(\n \"The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n var modelMatrix = this.modelMatrix;\n if (\n this.heightReference !== HeightReference.NONE &&\n this._clampedModelMatrix\n ) {\n modelMatrix = this._clampedModelMatrix;\n }\n\n var nonUniformScale = Matrix4.getScale(\n modelMatrix,\n boundingSphereCartesian3Scratch\n );\n var scale = defined(this.maximumScale)\n ? Math.min(this.maximumScale, this.scale)\n : this.scale;\n Cartesian3.multiplyByScalar(nonUniformScale, scale, nonUniformScale);\n\n var scaledBoundingSphere = this._scaledBoundingSphere;\n scaledBoundingSphere.center = Cartesian3.multiplyComponents(\n this._boundingSphere.center,\n nonUniformScale,\n scaledBoundingSphere.center\n );\n scaledBoundingSphere.radius =\n Cartesian3.maximumComponent(nonUniformScale) * this._initialRadius;\n\n if (defined(this._rtcCenter)) {\n Cartesian3.add(\n this._rtcCenter,\n scaledBoundingSphere.center,\n scaledBoundingSphere.center\n );\n }\n\n return scaledBoundingSphere;\n },\n },\n\n /**\n * When <code>true</code>, this model is ready to render, i.e., the external binary, image,\n * and shader files were downloaded and the WebGL resources were created. This is set to\n * <code>true</code> right before {@link Model#readyPromise} is resolved.\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets the promise that will be resolved when this model is ready to render, i.e., when the external binary, image,\n * and shader files were downloaded and the WebGL resources were created.\n * <p>\n * This promise is resolved at the end of the frame before the first frame the model is rendered in.\n * </p>\n *\n * @memberof Model.prototype\n * @type {Promise.<Model>}\n * @readonly\n *\n * @example\n * // Play all animations at half-speed when the model is ready to render\n * Cesium.when(model.readyPromise).then(function(model) {\n * model.activeAnimations.addAll({\n * multiplier : 0.5\n * });\n * }).otherwise(function(error){\n * window.alert(error);\n * });\n *\n * @see Model#ready\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Determines if model WebGL resource creation will be spread out over several frames or\n * block until completion once all glTF files are loaded.\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n asynchronous: {\n get: function () {\n return this._asynchronous;\n },\n },\n\n /**\n * When <code>true</code>, each glTF mesh and primitive is pickable with {@link Scene#pick}. When <code>false</code>, GPU memory is saved.\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n allowPicking: {\n get: function () {\n return this._allowPicking;\n },\n },\n\n /**\n * Determine if textures may continue to stream in after the model is loaded.\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n incrementallyLoadTextures: {\n get: function () {\n return this._incrementallyLoadTextures;\n },\n },\n\n /**\n * Return the number of pending texture loads.\n *\n * @memberof Model.prototype\n *\n * @type {Number}\n * @readonly\n */\n pendingTextureLoads: {\n get: function () {\n return defined(this._loadResources)\n ? this._loadResources.pendingTextureLoads\n : 0;\n },\n },\n\n /**\n * Returns true if the model was transformed this frame\n *\n * @memberof Model.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n dirty: {\n get: function () {\n return this._dirty;\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this model will be displayed.\n * @memberof Model.prototype\n * @type {DistanceDisplayCondition}\n * @default undefined\n */\n distanceDisplayCondition: {\n get: function () {\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\"far must be greater than near\");\n }\n //>>includeEnd('debug');\n this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n value,\n this._distanceDisplayCondition\n );\n },\n },\n\n extensionsUsed: {\n get: function () {\n if (!defined(this._extensionsUsed)) {\n this._extensionsUsed = ModelUtility.getUsedExtensions(this.gltf);\n }\n return this._extensionsUsed;\n },\n },\n\n extensionsRequired: {\n get: function () {\n if (!defined(this._extensionsRequired)) {\n this._extensionsRequired = ModelUtility.getRequiredExtensions(\n this.gltf\n );\n }\n return this._extensionsRequired;\n },\n },\n\n /**\n * Gets the model's up-axis.\n * By default models are y-up according to the glTF spec, however geo-referenced models will typically be z-up.\n *\n * @memberof Model.prototype\n *\n * @type {Number}\n * @default Axis.Y\n * @readonly\n *\n * @private\n */\n upAxis: {\n get: function () {\n return this._upAxis;\n },\n },\n\n /**\n * Gets the model's forward axis.\n * By default, glTF 2.0 models are z-forward according to the glTF spec, however older\n * glTF (1.0, 0.8) models used x-forward. Note that only Axis.X and Axis.Z are supported.\n *\n * @memberof Model.prototype\n *\n * @type {Number}\n * @default Axis.Z\n * @readonly\n *\n * @private\n */\n forwardAxis: {\n get: function () {\n if (defined(this._forwardAxis)) {\n return this._forwardAxis;\n }\n return this._gltfForwardAxis;\n },\n },\n\n /**\n * Gets the model's triangle count.\n *\n * @private\n */\n trianglesLength: {\n get: function () {\n return this._trianglesLength;\n },\n },\n\n /**\n * Gets the model's geometry memory in bytes. This includes all vertex and index buffers.\n *\n * @private\n */\n geometryByteLength: {\n get: function () {\n return this._geometryByteLength;\n },\n },\n\n /**\n * Gets the model's texture memory in bytes.\n *\n * @private\n */\n texturesByteLength: {\n get: function () {\n return this._texturesByteLength;\n },\n },\n\n /**\n * Gets the model's cached geometry memory in bytes. This includes all vertex and index buffers.\n *\n * @private\n */\n cachedGeometryByteLength: {\n get: function () {\n return this._cachedGeometryByteLength;\n },\n },\n\n /**\n * Gets the model's cached texture memory in bytes.\n *\n * @private\n */\n cachedTexturesByteLength: {\n get: function () {\n return this._cachedTexturesByteLength;\n },\n },\n\n /**\n * The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n *\n * @memberof Model.prototype\n *\n * @type {ClippingPlaneCollection}\n */\n clippingPlanes: {\n get: function () {\n return this._clippingPlanes;\n },\n set: function (value) {\n if (value === this._clippingPlanes) {\n return;\n }\n // Handle destroying, checking of unknown, checking for existing ownership\n ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n },\n },\n\n /**\n * @private\n */\n pickIds: {\n get: function () {\n return this._pickIds;\n },\n },\n\n /**\n * Cesium adds lighting from the earth, sky, atmosphere, and star skybox. This cartesian is used to scale the final\n * diffuse and specular lighting contribution from those sources to the final color. A value of 0.0 will disable those light sources.\n *\n * @memberof Model.prototype\n *\n * @type {Cartesian2}\n * @default Cartesian2(1.0, 1.0)\n */\n imageBasedLightingFactor: {\n get: function () {\n return this._imageBasedLightingFactor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"imageBasedLightingFactor\", value);\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 1.0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 1.0\n );\n //>>includeEnd('debug');\n var imageBasedLightingFactor = this._imageBasedLightingFactor;\n if (\n value === imageBasedLightingFactor ||\n Cartesian2.equals(value, imageBasedLightingFactor)\n ) {\n return;\n }\n this._shouldRegenerateShaders =\n this._shouldRegenerateShaders ||\n (this._imageBasedLightingFactor.x > 0.0 && value.x === 0.0) ||\n (this._imageBasedLightingFactor.x === 0.0 && value.x > 0.0);\n this._shouldRegenerateShaders =\n this._shouldRegenerateShaders ||\n (this._imageBasedLightingFactor.y > 0.0 && value.y === 0.0) ||\n (this._imageBasedLightingFactor.y === 0.0 && value.y > 0.0);\n Cartesian2.clone(value, this._imageBasedLightingFactor);\n },\n },\n\n /**\n * The light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * <p>\n * For example, disabling additional light sources by setting <code>model.imageBasedLightingFactor = new Cesium.Cartesian2(0.0, 0.0)</code> will make the\n * model much darker. Here, increasing the intensity of the light source will make the model brighter.\n * </p>\n *\n * @memberof Model.prototype\n *\n * @type {Cartesian3}\n * @default undefined\n */\n lightColor: {\n get: function () {\n return this._lightColor;\n },\n set: function (value) {\n var lightColor = this._lightColor;\n if (value === lightColor || Cartesian3.equals(value, lightColor)) {\n return;\n }\n this._shouldRegenerateShaders =\n this._shouldRegenerateShaders ||\n (defined(lightColor) && !defined(value)) ||\n (defined(value) && !defined(lightColor));\n this._lightColor = Cartesian3.clone(value, lightColor);\n },\n },\n\n /**\n * The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map.\n * This is used when {@link Model#specularEnvironmentMaps} and {@link Model#sphericalHarmonicCoefficients} are not defined.\n *\n * @memberof Model.prototype\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Image-Based Lighting.html|Sandcastle Image Based Lighting Demo}\n * @type {Number}\n * @default 0.2\n */\n luminanceAtZenith: {\n get: function () {\n return this._luminanceAtZenith;\n },\n set: function (value) {\n var lum = this._luminanceAtZenith;\n if (value === lum) {\n return;\n }\n this._shouldRegenerateShaders =\n this._shouldRegenerateShaders ||\n (defined(lum) && !defined(value)) ||\n (defined(value) && !defined(lum));\n this._luminanceAtZenith = value;\n },\n },\n\n /**\n * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. When <code>undefined</code>, a diffuse irradiance\n * computed from the atmosphere color is used.\n * <p>\n * There are nine <code>Cartesian3</code> coefficients.\n * The order of the coefficients is: L<sub>00</sub>, L<sub>1-1</sub>, L<sub>10</sub>, L<sub>11</sub>, L<sub>2-2</sub>, L<sub>2-1</sub>, L<sub>20</sub>, L<sub>21</sub>, L<sub>22</sub>\n * </p>\n *\n * These values can be obtained by preprocessing the environment map using the <code>cmgen</code> tool of\n * {@link https://github.com/google/filament/releases|Google's Filament project}. This will also generate a KTX file that can be\n * supplied to {@link Model#specularEnvironmentMaps}.\n *\n * @memberof Model.prototype\n *\n * @type {Cartesian3[]}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Image-Based Lighting.html|Sandcastle Image Based Lighting Demo}\n * @see {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf|An Efficient Representation for Irradiance Environment Maps}\n */\n sphericalHarmonicCoefficients: {\n get: function () {\n return this._sphericalHarmonicCoefficients;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && (!Array.isArray(value) || value.length !== 9)) {\n throw new DeveloperError(\n \"sphericalHarmonicCoefficients must be an array of 9 Cartesian3 values.\"\n );\n }\n //>>includeEnd('debug');\n if (value === this._sphericalHarmonicCoefficients) {\n return;\n }\n this._sphericalHarmonicCoefficients = value;\n this._shouldRegenerateShaders = true;\n },\n },\n\n /**\n * A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n *\n * @memberof Model.prototype\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Image-Based Lighting.html|Sandcastle Image Based Lighting Demo}\n * @type {String}\n * @see Model#sphericalHarmonicCoefficients\n */\n specularEnvironmentMaps: {\n get: function () {\n return this._specularEnvironmentMaps;\n },\n set: function (value) {\n this._shouldUpdateSpecularMapAtlas =\n this._shouldUpdateSpecularMapAtlas ||\n value !== this._specularEnvironmentMaps;\n this._specularEnvironmentMaps = value;\n },\n },\n /**\n * Gets the credit that will be displayed for the model\n * @memberof Model.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n});\n\nfunction silhouetteSupported(context) {\n return context.stencilBuffer;\n}\n\nfunction isColorShadingEnabled(model) {\n return (\n !Color.equals(model.color, Color.WHITE) ||\n model.colorBlendMode !== ColorBlendMode.HIGHLIGHT\n );\n}\n\nfunction isClippingEnabled(model) {\n var clippingPlanes = model._clippingPlanes;\n return (\n defined(clippingPlanes) &&\n clippingPlanes.enabled &&\n clippingPlanes.length !== 0\n );\n}\n\n/**\n * Determines if silhouettes are supported.\n *\n * @param {Scene} scene The scene.\n * @returns {Boolean} <code>true</code> if silhouettes are supported; otherwise, returns <code>false</code>\n */\nModel.silhouetteSupported = function (scene) {\n return silhouetteSupported(scene.context);\n};\n\nfunction containsGltfMagic(uint8Array) {\n var magic = getMagic(uint8Array);\n return magic === \"glTF\";\n}\n\n/**\n * <p>\n * Creates a model from a glTF asset. When the model is ready to render, i.e., when the external binary, image,\n * and shader files are downloaded and the WebGL resources are created, the {@link Model#readyPromise} is resolved.\n * </p>\n * <p>\n * The model can be a traditional glTF asset with a .gltf extension or a Binary glTF using the .glb extension.\n * </p>\n * <p>\n * Cesium supports glTF assets with the following extensions:\n * <ul>\n * <li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/README.md|KHR_binary_glTF (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_materials_common/README.md|KHR_materials_common (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/WEB3D_quantized_attributes/README.md|WEB3D_quantized_attributes (glTF 1.0)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/AGI_articulations/README.md|AGI_articulations}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/pull/1302|KHR_blend (draft)}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md|KHR_draco_mesh_compression}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/README.md|KHR_materials_pbrSpecularGlossiness}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit/README.md|KHR_materials_unlit}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_techniques_webgl/README.md|KHR_techniques_webgl}\n * </li><li>\n * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform}\n * </li>\n * </ul>\n * </p>\n * <p>\n * For high-precision rendering, Cesium supports the {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/CESIUM_RTC/README.md|CESIUM_RTC} extension, which introduces the\n * CESIUM_RTC_MODELVIEW parameter semantic that says the node is in WGS84 coordinates translated\n * relative to a local origin.\n * </p>\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String} options.url The url to the .gltf file.\n * @param {Resource|String} [options.basePath] The base path that paths in the glTF JSON are relative to.\n * @param {Boolean} [options.show=true] Determines if the model primitive will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * @param {Number} [options.scale=1.0] A uniform scale applied to this model.\n * @param {Number} [options.minimumPixelSize=0.0] The approximate minimum pixel size of the model regardless of zoom.\n * @param {Number} [options.maximumScale] The maximum scale for the model.\n * @param {Object} [options.id] A user-defined object to return when the model is picked with {@link Scene#pick}.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each glTF mesh and primitive is pickable with {@link Scene#pick}.\n * @param {Boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @param {Boolean} [options.asynchronous=true] Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded.\n * @param {Boolean} [options.clampAnimations=true] Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the model casts or receives shadows from light sources.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for each draw command in the model.\n * @param {Boolean} [options.debugWireframe=false] For debugging only. Draws the model in wireframe.\n * @param {HeightReference} [options.heightReference=HeightReference.NONE] Determines how the model is drawn relative to terrain.\n * @param {Scene} [options.scene] Must be passed in for models that use the height reference property.\n * @param {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this model will be displayed.\n * @param {Color} [options.color=Color.WHITE] A color that blends with the model's rendered color.\n * @param {ColorBlendMode} [options.colorBlendMode=ColorBlendMode.HIGHLIGHT] Defines how the color blends with the model.\n * @param {Number} [options.colorBlendAmount=0.5] Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @param {Color} [options.silhouetteColor=Color.RED] The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts.\n * @param {Number} [options.silhouetteSize=0.0] The size of the silhouette in pixels.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @param {Boolean} [options.dequantizeInShader=true] Determines if a {@link https://github.com/google/draco|Draco} encoded model is dequantized on the GPU. This decreases total memory usage for encoded models.\n * @param {Credit|String} [options.credit] A credit for the model, which is displayed on the canvas.\n * @param {Boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if {@link Model#color} is translucent or {@link Model#silhouetteSize} is greater than 0.0.\n *\n * @returns {Model} The newly created model.\n *\n * @example\n * // Example 1. Create a model from a glTF asset\n * var model = scene.primitives.add(Cesium.Model.fromGltf({\n * url : './duck/duck.gltf'\n * }));\n *\n * @example\n * // Example 2. Create model and provide all properties and events\n * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n * var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n *\n * var model = scene.primitives.add(Cesium.Model.fromGltf({\n * url : './duck/duck.gltf',\n * show : true, // default\n * modelMatrix : modelMatrix,\n * scale : 2.0, // double size\n * minimumPixelSize : 128, // never smaller than 128 pixels\n * maximumScale: 20000, // never larger than 20000 * model size (overrides minimumPixelSize)\n * allowPicking : false, // not pickable\n * debugShowBoundingVolume : false, // default\n * debugWireframe : false\n * }));\n *\n * model.readyPromise.then(function(model) {\n * // Play all animations when the model is ready to render\n * model.activeAnimations.addAll();\n * });\n */\nModel.fromGltf = function (options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.url)) {\n throw new DeveloperError(\"options.url is required\");\n }\n //>>includeEnd('debug');\n\n var url = options.url;\n options = clone(options);\n\n // Create resource for the model file\n var modelResource = Resource.createIfNeeded(url);\n\n // Setup basePath to get dependent files\n var basePath = defaultValue(options.basePath, modelResource.clone());\n var resource = Resource.createIfNeeded(basePath);\n\n // If no cache key is provided, use a GUID.\n // Check using a URI to GUID dictionary that we have not already added this model.\n var cacheKey = defaultValue(\n options.cacheKey,\n uriToGuid[getAbsoluteUri(modelResource.url)]\n );\n if (!defined(cacheKey)) {\n cacheKey = createGuid();\n uriToGuid[getAbsoluteUri(modelResource.url)] = cacheKey;\n }\n\n if (defined(options.basePath) && !defined(options.cacheKey)) {\n cacheKey += resource.url;\n }\n options.cacheKey = cacheKey;\n options.basePath = resource;\n\n var model = new Model(options);\n\n var cachedGltf = gltfCache[cacheKey];\n if (!defined(cachedGltf)) {\n cachedGltf = new CachedGltf({\n ready: false,\n });\n cachedGltf.count = 1;\n cachedGltf.modelsToLoad.push(model);\n setCachedGltf(model, cachedGltf);\n gltfCache[cacheKey] = cachedGltf;\n\n // Add Accept header if we need it\n if (!defined(modelResource.headers.Accept)) {\n modelResource.headers.Accept = defaultModelAccept;\n }\n\n modelResource\n .fetchArrayBuffer()\n .then(function (arrayBuffer) {\n var array = new Uint8Array(arrayBuffer);\n if (containsGltfMagic(array)) {\n // Load binary glTF\n var parsedGltf = parseGlb(array);\n cachedGltf.makeReady(parsedGltf);\n } else {\n // Load text (JSON) glTF\n var json = getStringFromTypedArray(array);\n cachedGltf.makeReady(JSON.parse(json));\n }\n\n var resourceCredits = model._resourceCredits;\n var credits = modelResource.credits;\n if (defined(credits)) {\n var length = credits.length;\n for (var i = 0; i < length; i++) {\n resourceCredits.push(credits[i]);\n }\n }\n })\n .otherwise(\n ModelUtility.getFailedLoadFunction(model, \"model\", modelResource.url)\n );\n } else if (!cachedGltf.ready) {\n // Cache hit but the fetchArrayBuffer() or fetchText() request is still pending\n ++cachedGltf.count;\n cachedGltf.modelsToLoad.push(model);\n }\n // else if the cached glTF is defined and ready, the\n // model constructor will pick it up using the cache key.\n\n return model;\n};\n\n/**\n * For the unit tests to verify model caching.\n *\n * @private\n */\nModel._gltfCache = gltfCache;\n\nfunction getRuntime(model, runtimeName, name) {\n //>>includeStart('debug', pragmas.debug);\n if (model._state !== ModelState.LOADED) {\n throw new DeveloperError(\n \"The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\"\n );\n }\n\n if (!defined(name)) {\n throw new DeveloperError(\"name is required.\");\n }\n //>>includeEnd('debug');\n\n return model._runtime[runtimeName][name];\n}\n\n/**\n * Returns the glTF node with the given <code>name</code> property. This is used to\n * modify a node's transform for animation outside of glTF animations.\n *\n * @param {String} name The glTF name of the node.\n * @returns {ModelNode} The node or <code>undefined</code> if no node with <code>name</code> exists.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n *\n * @example\n * // Apply non-uniform scale to node LOD3sp\n * var node = model.getNode('LOD3sp');\n * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);\n */\nModel.prototype.getNode = function (name) {\n var node = getRuntime(this, \"nodesByName\", name);\n return defined(node) ? node.publicNode : undefined;\n};\n\n/**\n * Returns the glTF mesh with the given <code>name</code> property.\n *\n * @param {String} name The glTF name of the mesh.\n *\n * @returns {ModelMesh} The mesh or <code>undefined</code> if no mesh with <code>name</code> exists.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n */\nModel.prototype.getMesh = function (name) {\n return getRuntime(this, \"meshesByName\", name);\n};\n\n/**\n * Returns the glTF material with the given <code>name</code> property.\n *\n * @param {String} name The glTF name of the material.\n * @returns {ModelMaterial} The material or <code>undefined</code> if no material with <code>name</code> exists.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n */\nModel.prototype.getMaterial = function (name) {\n return getRuntime(this, \"materialsByName\", name);\n};\n\n/**\n * Sets the current value of an articulation stage. After setting one or multiple stage values, call\n * Model.applyArticulations() to cause the node matrices to be recalculated.\n *\n * @param {String} articulationStageKey The name of the articulation, a space, and the name of the stage.\n * @param {Number} value The numeric value of this stage of the articulation.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n *\n * @see Model#applyArticulations\n */\nModel.prototype.setArticulationStage = function (articulationStageKey, value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n\n var stage = getRuntime(this, \"stagesByKey\", articulationStageKey);\n var articulation = getRuntime(\n this,\n \"articulationsByStageKey\",\n articulationStageKey\n );\n if (defined(stage) && defined(articulation)) {\n value = CesiumMath.clamp(value, stage.minimumValue, stage.maximumValue);\n if (\n !CesiumMath.equalsEpsilon(stage.currentValue, value, articulationEpsilon)\n ) {\n stage.currentValue = value;\n articulation.isDirty = true;\n }\n }\n};\n\nvar scratchArticulationCartesian = new Cartesian3();\nvar scratchArticulationRotation = new Matrix3();\n\n/**\n * Modifies a Matrix4 by applying a transformation for a given value of a stage. Note this is different usage\n * from the typical <code>result</code> parameter, in that the incoming value of <code>result</code> is\n * meaningful. Various stages of an articulation can be multiplied together, so their\n * transformations are all merged into a composite Matrix4 representing them all.\n *\n * @param {object} stage The stage of an articulation that is being evaluated.\n * @param {Matrix4} result The matrix to be modified.\n * @returns {Matrix4} A matrix transformed as requested by the articulation stage.\n *\n * @private\n */\nfunction applyArticulationStageMatrix(stage, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"stage\", stage);\n Check.typeOf.object(\"result\", result);\n //>>includeEnd('debug');\n\n var value = stage.currentValue;\n var cartesian = scratchArticulationCartesian;\n var rotation;\n switch (stage.type) {\n case \"xRotate\":\n rotation = Matrix3.fromRotationX(\n CesiumMath.toRadians(value),\n scratchArticulationRotation\n );\n Matrix4.multiplyByMatrix3(result, rotation, result);\n break;\n case \"yRotate\":\n rotation = Matrix3.fromRotationY(\n CesiumMath.toRadians(value),\n scratchArticulationRotation\n );\n Matrix4.multiplyByMatrix3(result, rotation, result);\n break;\n case \"zRotate\":\n rotation = Matrix3.fromRotationZ(\n CesiumMath.toRadians(value),\n scratchArticulationRotation\n );\n Matrix4.multiplyByMatrix3(result, rotation, result);\n break;\n case \"xTranslate\":\n cartesian.x = value;\n cartesian.y = 0.0;\n cartesian.z = 0.0;\n Matrix4.multiplyByTranslation(result, cartesian, result);\n break;\n case \"yTranslate\":\n cartesian.x = 0.0;\n cartesian.y = value;\n cartesian.z = 0.0;\n Matrix4.multiplyByTranslation(result, cartesian, result);\n break;\n case \"zTranslate\":\n cartesian.x = 0.0;\n cartesian.y = 0.0;\n cartesian.z = value;\n Matrix4.multiplyByTranslation(result, cartesian, result);\n break;\n case \"xScale\":\n cartesian.x = value;\n cartesian.y = 1.0;\n cartesian.z = 1.0;\n Matrix4.multiplyByScale(result, cartesian, result);\n break;\n case \"yScale\":\n cartesian.x = 1.0;\n cartesian.y = value;\n cartesian.z = 1.0;\n Matrix4.multiplyByScale(result, cartesian, result);\n break;\n case \"zScale\":\n cartesian.x = 1.0;\n cartesian.y = 1.0;\n cartesian.z = value;\n Matrix4.multiplyByScale(result, cartesian, result);\n break;\n case \"uniformScale\":\n Matrix4.multiplyByUniformScale(result, value, result);\n break;\n default:\n break;\n }\n return result;\n}\n\nvar scratchApplyArticulationTransform = new Matrix4();\n\n/**\n * Applies any modified articulation stages to the matrix of each node that participates\n * in any articulation. Note that this will overwrite any nodeTransformations on participating nodes.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyPromise or wait for Model.ready to be true.\n */\nModel.prototype.applyArticulations = function () {\n var articulationsByName = this._runtime.articulationsByName;\n for (var articulationName in articulationsByName) {\n if (articulationsByName.hasOwnProperty(articulationName)) {\n var articulation = articulationsByName[articulationName];\n if (articulation.isDirty) {\n articulation.isDirty = false;\n var numNodes = articulation.nodes.length;\n for (var n = 0; n < numNodes; ++n) {\n var node = articulation.nodes[n];\n var transform = Matrix4.clone(\n node.originalMatrix,\n scratchApplyArticulationTransform\n );\n\n var numStages = articulation.stages.length;\n for (var s = 0; s < numStages; ++s) {\n var stage = articulation.stages[s];\n transform = applyArticulationStageMatrix(stage, transform);\n }\n node.matrix = transform;\n }\n }\n }\n }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction addBuffersToLoadResources(model) {\n var gltf = model.gltf;\n var loadResources = model._loadResources;\n ForEach.buffer(gltf, function (buffer, id) {\n loadResources.buffers[id] = buffer.extras._pipeline.source;\n });\n}\n\nfunction bufferLoad(model, id) {\n return function (arrayBuffer) {\n var loadResources = model._loadResources;\n var buffer = new Uint8Array(arrayBuffer);\n --loadResources.pendingBufferLoads;\n model.gltf.buffers[id].extras._pipeline.source = buffer;\n };\n}\n\nfunction parseBufferViews(model) {\n var bufferViews = model.gltf.bufferViews;\n var vertexBuffersToCreate = model._loadResources.vertexBuffersToCreate;\n\n // Only ARRAY_BUFFER here. ELEMENT_ARRAY_BUFFER created below.\n ForEach.bufferView(model.gltf, function (bufferView, id) {\n if (bufferView.target === WebGLConstants.ARRAY_BUFFER) {\n vertexBuffersToCreate.enqueue(id);\n }\n });\n\n var indexBuffersToCreate = model._loadResources.indexBuffersToCreate;\n var indexBufferIds = {};\n\n // The Cesium Renderer requires knowing the datatype for an index buffer\n // at creation type, which is not part of the glTF bufferview so loop\n // through glTF accessors to create the bufferview's index buffer.\n ForEach.accessor(model.gltf, function (accessor) {\n var bufferViewId = accessor.bufferView;\n if (!defined(bufferViewId)) {\n return;\n }\n\n var bufferView = bufferViews[bufferViewId];\n if (\n bufferView.target === WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n !defined(indexBufferIds[bufferViewId])\n ) {\n indexBufferIds[bufferViewId] = true;\n indexBuffersToCreate.enqueue({\n id: bufferViewId,\n componentType: accessor.componentType,\n });\n }\n });\n}\n\nfunction parseTechniques(model) {\n // retain references to gltf techniques\n var gltf = model.gltf;\n if (!hasExtension(gltf, \"KHR_techniques_webgl\")) {\n return;\n }\n\n var sourcePrograms = model._sourcePrograms;\n var sourceTechniques = model._sourceTechniques;\n var programs = gltf.extensions.KHR_techniques_webgl.programs;\n\n ForEach.technique(gltf, function (technique, techniqueId) {\n sourceTechniques[techniqueId] = clone(technique);\n\n var programId = technique.program;\n if (!defined(sourcePrograms[programId])) {\n sourcePrograms[programId] = clone(programs[programId]);\n }\n });\n}\n\nfunction shaderLoad(model, type, id) {\n return function (source) {\n var loadResources = model._loadResources;\n loadResources.shaders[id] = {\n source: source,\n type: type,\n bufferView: undefined,\n };\n --loadResources.pendingShaderLoads;\n model._rendererResources.sourceShaders[id] = source;\n };\n}\n\nfunction parseShaders(model) {\n var gltf = model.gltf;\n var buffers = gltf.buffers;\n var bufferViews = gltf.bufferViews;\n var sourceShaders = model._rendererResources.sourceShaders;\n ForEach.shader(gltf, function (shader, id) {\n // Shader references either uri (external or base64-encoded) or bufferView\n if (defined(shader.bufferView)) {\n var bufferViewId = shader.bufferView;\n var bufferView = bufferViews[bufferViewId];\n var bufferId = bufferView.buffer;\n var buffer = buffers[bufferId];\n var source = getStringFromTypedArray(\n buffer.extras._pipeline.source,\n bufferView.byteOffset,\n bufferView.byteLength\n );\n sourceShaders[id] = source;\n } else if (defined(shader.extras._pipeline.source)) {\n sourceShaders[id] = shader.extras._pipeline.source;\n } else {\n ++model._loadResources.pendingShaderLoads;\n\n var shaderResource = model._resource.getDerivedResource({\n url: shader.uri,\n });\n\n shaderResource\n .fetchText()\n .then(shaderLoad(model, shader.type, id))\n .otherwise(\n ModelUtility.getFailedLoadFunction(\n model,\n \"shader\",\n shaderResource.url\n )\n );\n }\n });\n}\n\nfunction parsePrograms(model) {\n var sourceTechniques = model._sourceTechniques;\n for (var techniqueId in sourceTechniques) {\n if (sourceTechniques.hasOwnProperty(techniqueId)) {\n var technique = sourceTechniques[techniqueId];\n model._loadResources.programsToCreate.enqueue({\n programId: technique.program,\n techniqueId: techniqueId,\n });\n }\n }\n}\n\nfunction parseArticulations(model) {\n var articulationsByName = {};\n var articulationsByStageKey = {};\n var runtimeStagesByKey = {};\n\n model._runtime.articulationsByName = articulationsByName;\n model._runtime.articulationsByStageKey = articulationsByStageKey;\n model._runtime.stagesByKey = runtimeStagesByKey;\n\n var gltf = model.gltf;\n if (\n !hasExtension(gltf, \"AGI_articulations\") ||\n !defined(gltf.extensions) ||\n !defined(gltf.extensions.AGI_articulations)\n ) {\n return;\n }\n\n var gltfArticulations = gltf.extensions.AGI_articulations.articulations;\n if (!defined(gltfArticulations)) {\n return;\n }\n\n var numArticulations = gltfArticulations.length;\n for (var i = 0; i < numArticulations; ++i) {\n var articulation = clone(gltfArticulations[i]);\n articulation.nodes = [];\n articulation.isDirty = true;\n articulationsByName[articulation.name] = articulation;\n\n var numStages = articulation.stages.length;\n for (var s = 0; s < numStages; ++s) {\n var stage = articulation.stages[s];\n stage.currentValue = stage.initialValue;\n\n var stageKey = articulation.name + \" \" + stage.name;\n articulationsByStageKey[stageKey] = articulation;\n runtimeStagesByKey[stageKey] = stage;\n }\n }\n}\n\nfunction imageLoad(model, textureId) {\n return function (image) {\n var loadResources = model._loadResources;\n --loadResources.pendingTextureLoads;\n loadResources.texturesToCreate.enqueue({\n id: textureId,\n image: image,\n bufferView: image.bufferView,\n width: image.width,\n height: image.height,\n internalFormat: image.internalFormat,\n });\n };\n}\n\nvar ktxRegex = /(^data:image\\/ktx)|(\\.ktx$)/i;\nvar crnRegex = /(^data:image\\/crn)|(\\.crn$)/i;\n\nfunction parseTextures(model, context, supportsWebP) {\n var gltf = model.gltf;\n var images = gltf.images;\n var uri;\n ForEach.texture(gltf, function (texture, id) {\n var imageId = texture.source;\n\n if (\n defined(texture.extensions) &&\n defined(texture.extensions.EXT_texture_webp) &&\n supportsWebP\n ) {\n imageId = texture.extensions.EXT_texture_webp.source;\n }\n\n var gltfImage = images[imageId];\n var extras = gltfImage.extras;\n\n var bufferViewId = gltfImage.bufferView;\n var mimeType = gltfImage.mimeType;\n uri = gltfImage.uri;\n\n // First check for a compressed texture\n if (defined(extras) && defined(extras.compressedImage3DTiles)) {\n var crunch = extras.compressedImage3DTiles.crunch;\n var s3tc = extras.compressedImage3DTiles.s3tc;\n var pvrtc = extras.compressedImage3DTiles.pvrtc1;\n var etc1 = extras.compressedImage3DTiles.etc1;\n\n if (context.s3tc && defined(crunch)) {\n mimeType = crunch.mimeType;\n if (defined(crunch.bufferView)) {\n bufferViewId = crunch.bufferView;\n } else {\n uri = crunch.uri;\n }\n } else if (context.s3tc && defined(s3tc)) {\n mimeType = s3tc.mimeType;\n if (defined(s3tc.bufferView)) {\n bufferViewId = s3tc.bufferView;\n } else {\n uri = s3tc.uri;\n }\n } else if (context.pvrtc && defined(pvrtc)) {\n mimeType = pvrtc.mimeType;\n if (defined(pvrtc.bufferView)) {\n bufferViewId = pvrtc.bufferView;\n } else {\n uri = pvrtc.uri;\n }\n } else if (context.etc1 && defined(etc1)) {\n mimeType = etc1.mimeType;\n if (defined(etc1.bufferView)) {\n bufferViewId = etc1.bufferView;\n } else {\n uri = etc1.uri;\n }\n }\n }\n\n // Image references either uri (external or base64-encoded) or bufferView\n if (defined(bufferViewId)) {\n model._loadResources.texturesToCreateFromBufferView.enqueue({\n id: id,\n image: undefined,\n bufferView: bufferViewId,\n mimeType: mimeType,\n });\n } else {\n ++model._loadResources.pendingTextureLoads;\n\n var imageResource = model._resource.getDerivedResource({\n url: uri,\n });\n\n var promise;\n if (ktxRegex.test(uri)) {\n promise = loadKTX(imageResource);\n } else if (crnRegex.test(uri)) {\n promise = loadCRN(imageResource);\n } else {\n promise = imageResource.fetchImage();\n }\n promise\n .then(imageLoad(model, id, imageId))\n .otherwise(\n ModelUtility.getFailedLoadFunction(model, \"image\", imageResource.url)\n );\n }\n });\n}\n\nvar scratchArticulationStageInitialTransform = new Matrix4();\n\nfunction parseNodes(model) {\n var runtimeNodes = {};\n var runtimeNodesByName = {};\n var skinnedNodes = [];\n\n var skinnedNodesIds = model._loadResources.skinnedNodesIds;\n var articulationsByName = model._runtime.articulationsByName;\n\n ForEach.node(model.gltf, function (node, id) {\n var runtimeNode = {\n // Animation targets\n matrix: undefined,\n translation: undefined,\n rotation: undefined,\n scale: undefined,\n\n // Per-node show inherited from parent\n computedShow: true,\n\n // Computed transforms\n transformToRoot: new Matrix4(),\n computedMatrix: new Matrix4(),\n dirtyNumber: 0, // The frame this node was made dirty by an animation; for graph traversal\n\n // Rendering\n commands: [], // empty for transform, light, and camera nodes\n\n // Skinned node\n inverseBindMatrices: undefined, // undefined when node is not skinned\n bindShapeMatrix: undefined, // undefined when node is not skinned or identity\n joints: [], // empty when node is not skinned\n computedJointMatrices: [], // empty when node is not skinned\n\n // Joint node\n jointName: node.jointName, // undefined when node is not a joint\n\n weights: [],\n\n // Graph pointers\n children: [], // empty for leaf nodes\n parents: [], // empty for root nodes\n\n // Publicly-accessible ModelNode instance to modify animation targets\n publicNode: undefined,\n };\n runtimeNode.publicNode = new ModelNode(\n model,\n node,\n runtimeNode,\n id,\n ModelUtility.getTransform(node)\n );\n\n runtimeNodes[id] = runtimeNode;\n runtimeNodesByName[node.name] = runtimeNode;\n\n if (defined(node.skin)) {\n skinnedNodesIds.push(id);\n skinnedNodes.push(runtimeNode);\n }\n\n if (\n defined(node.extensions) &&\n defined(node.extensions.AGI_articulations)\n ) {\n var articulationName = node.extensions.AGI_articulations.articulationName;\n if (defined(articulationName)) {\n var transform = Matrix4.clone(\n runtimeNode.publicNode.originalMatrix,\n scratchArticulationStageInitialTransform\n );\n var articulation = articulationsByName[articulationName];\n articulation.nodes.push(runtimeNode.publicNode);\n\n var numStages = articulation.stages.length;\n for (var s = 0; s < numStages; ++s) {\n var stage = articulation.stages[s];\n transform = applyArticulationStageMatrix(stage, transform);\n }\n runtimeNode.publicNode.matrix = transform;\n }\n }\n });\n\n model._runtime.nodes = runtimeNodes;\n model._runtime.nodesByName = runtimeNodesByName;\n model._runtime.skinnedNodes = skinnedNodes;\n}\n\nfunction parseMaterials(model) {\n var gltf = model.gltf;\n var techniques = model._sourceTechniques;\n\n var runtimeMaterialsByName = {};\n var runtimeMaterialsById = {};\n var uniformMaps = model._uniformMaps;\n\n ForEach.material(gltf, function (material, materialId) {\n // Allocated now so ModelMaterial can keep a reference to it.\n uniformMaps[materialId] = {\n uniformMap: undefined,\n values: undefined,\n jointMatrixUniformName: undefined,\n morphWeightsUniformName: undefined,\n };\n\n var modelMaterial = new ModelMaterial(model, material, materialId);\n\n if (\n defined(material.extensions) &&\n defined(material.extensions.KHR_techniques_webgl)\n ) {\n var techniqueId = material.extensions.KHR_techniques_webgl.technique;\n modelMaterial._technique = techniqueId;\n modelMaterial._program = techniques[techniqueId].program;\n\n ForEach.materialValue(material, function (value, uniformName) {\n if (!defined(modelMaterial._values)) {\n modelMaterial._values = {};\n }\n\n modelMaterial._values[uniformName] = clone(value);\n });\n }\n\n runtimeMaterialsByName[material.name] = modelMaterial;\n runtimeMaterialsById[materialId] = modelMaterial;\n });\n\n model._runtime.materialsByName = runtimeMaterialsByName;\n model._runtime.materialsById = runtimeMaterialsById;\n}\n\nfunction parseMeshes(model) {\n var runtimeMeshesByName = {};\n var runtimeMaterialsById = model._runtime.materialsById;\n\n ForEach.mesh(model.gltf, function (mesh, meshId) {\n runtimeMeshesByName[mesh.name] = new ModelMesh(\n mesh,\n runtimeMaterialsById,\n meshId\n );\n if (\n defined(model.extensionsUsed.WEB3D_quantized_attributes) ||\n model._dequantizeInShader\n ) {\n // Cache primitives according to their program\n ForEach.meshPrimitive(mesh, function (primitive, primitiveId) {\n var programId = getProgramForPrimitive(model, primitive);\n var programPrimitives = model._programPrimitives[programId];\n if (!defined(programPrimitives)) {\n programPrimitives = {};\n model._programPrimitives[programId] = programPrimitives;\n }\n programPrimitives[meshId + \".primitive.\" + primitiveId] = primitive;\n });\n }\n });\n\n model._runtime.meshesByName = runtimeMeshesByName;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar CreateVertexBufferJob = function () {\n this.id = undefined;\n this.model = undefined;\n this.context = undefined;\n};\n\nCreateVertexBufferJob.prototype.set = function (id, model, context) {\n this.id = id;\n this.model = model;\n this.context = context;\n};\n\nCreateVertexBufferJob.prototype.execute = function () {\n createVertexBuffer(this.id, this.model, this.context);\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction createVertexBuffer(bufferViewId, model, context) {\n var loadResources = model._loadResources;\n var bufferViews = model.gltf.bufferViews;\n var bufferView = bufferViews[bufferViewId];\n\n // Use bufferView created at runtime\n if (!defined(bufferView)) {\n bufferView = loadResources.createdBufferViews[bufferViewId];\n }\n\n var vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: loadResources.getBuffer(bufferView),\n usage: BufferUsage.STATIC_DRAW,\n });\n vertexBuffer.vertexArrayDestroyable = false;\n model._rendererResources.buffers[bufferViewId] = vertexBuffer;\n model._geometryByteLength += vertexBuffer.sizeInBytes;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar CreateIndexBufferJob = function () {\n this.id = undefined;\n this.componentType = undefined;\n this.model = undefined;\n this.context = undefined;\n};\n\nCreateIndexBufferJob.prototype.set = function (\n id,\n componentType,\n model,\n context\n) {\n this.id = id;\n this.componentType = componentType;\n this.model = model;\n this.context = context;\n};\n\nCreateIndexBufferJob.prototype.execute = function () {\n createIndexBuffer(this.id, this.componentType, this.model, this.context);\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction createIndexBuffer(bufferViewId, componentType, model, context) {\n var loadResources = model._loadResources;\n var bufferViews = model.gltf.bufferViews;\n var bufferView = bufferViews[bufferViewId];\n\n // Use bufferView created at runtime\n if (!defined(bufferView)) {\n bufferView = loadResources.createdBufferViews[bufferViewId];\n }\n\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: loadResources.getBuffer(bufferView),\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: componentType,\n });\n indexBuffer.vertexArrayDestroyable = false;\n model._rendererResources.buffers[bufferViewId] = indexBuffer;\n model._geometryByteLength += indexBuffer.sizeInBytes;\n}\n\nvar scratchVertexBufferJob = new CreateVertexBufferJob();\nvar scratchIndexBufferJob = new CreateIndexBufferJob();\n\nfunction createBuffers(model, frameState) {\n var loadResources = model._loadResources;\n\n if (loadResources.pendingBufferLoads !== 0) {\n return;\n }\n\n var context = frameState.context;\n var vertexBuffersToCreate = loadResources.vertexBuffersToCreate;\n var indexBuffersToCreate = loadResources.indexBuffersToCreate;\n var i;\n\n if (model.asynchronous) {\n while (vertexBuffersToCreate.length > 0) {\n scratchVertexBufferJob.set(vertexBuffersToCreate.peek(), model, context);\n if (\n !frameState.jobScheduler.execute(scratchVertexBufferJob, JobType.BUFFER)\n ) {\n break;\n }\n vertexBuffersToCreate.dequeue();\n }\n\n while (indexBuffersToCreate.length > 0) {\n i = indexBuffersToCreate.peek();\n scratchIndexBufferJob.set(i.id, i.componentType, model, context);\n if (\n !frameState.jobScheduler.execute(scratchIndexBufferJob, JobType.BUFFER)\n ) {\n break;\n }\n indexBuffersToCreate.dequeue();\n }\n } else {\n while (vertexBuffersToCreate.length > 0) {\n createVertexBuffer(vertexBuffersToCreate.dequeue(), model, context);\n }\n\n while (indexBuffersToCreate.length > 0) {\n i = indexBuffersToCreate.dequeue();\n createIndexBuffer(i.id, i.componentType, model, context);\n }\n }\n}\n\nfunction getProgramForPrimitive(model, primitive) {\n var material = model._runtime.materialsById[primitive.material];\n if (!defined(material)) {\n return;\n }\n\n return material._program;\n}\n\nfunction modifyShaderForQuantizedAttributes(shader, programName, model) {\n var primitive;\n var primitives = model._programPrimitives[programName];\n\n // If no primitives were cached for this program, there's no need to modify the shader\n if (!defined(primitives)) {\n return shader;\n }\n\n var primitiveId;\n for (primitiveId in primitives) {\n if (primitives.hasOwnProperty(primitiveId)) {\n primitive = primitives[primitiveId];\n if (getProgramForPrimitive(model, primitive) === programName) {\n break;\n }\n }\n }\n\n // This is not needed after the program is processed, free the memory\n model._programPrimitives[programName] = undefined;\n\n var result;\n if (model.extensionsUsed.WEB3D_quantized_attributes) {\n result = ModelUtility.modifyShaderForQuantizedAttributes(\n model.gltf,\n primitive,\n shader\n );\n model._quantizedUniforms[programName] = result.uniforms;\n } else {\n var decodedData = model._decodedData[primitiveId];\n if (defined(decodedData)) {\n result = ModelUtility.modifyShaderForDracoQuantizedAttributes(\n model.gltf,\n primitive,\n shader,\n decodedData.attributes\n );\n } else {\n return shader;\n }\n }\n\n return result.shader;\n}\n\nfunction modifyShaderForColor(shader) {\n shader = ShaderSource.replaceMain(shader, \"gltf_blend_main\");\n shader +=\n \"uniform vec4 gltf_color; \\n\" +\n \"uniform float gltf_colorBlend; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gltf_blend_main(); \\n\" +\n \" gl_FragColor.rgb = mix(gl_FragColor.rgb, gltf_color.rgb, gltf_colorBlend); \\n\" +\n \" float highlight = ceil(gltf_colorBlend); \\n\" +\n \" gl_FragColor.rgb *= mix(gltf_color.rgb, vec3(1.0), highlight); \\n\" +\n \" gl_FragColor.a *= gltf_color.a; \\n\" +\n \"} \\n\";\n\n return shader;\n}\n\nfunction modifyShader(shader, programName, callback) {\n if (defined(callback)) {\n shader = callback(shader, programName);\n }\n return shader;\n}\n\nvar CreateProgramJob = function () {\n this.programToCreate = undefined;\n this.model = undefined;\n this.context = undefined;\n};\n\nCreateProgramJob.prototype.set = function (programToCreate, model, context) {\n this.programToCreate = programToCreate;\n this.model = model;\n this.context = context;\n};\n\nCreateProgramJob.prototype.execute = function () {\n createProgram(this.programToCreate, this.model, this.context);\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n// When building programs for the first time, do not include modifiers for clipping planes and color\n// since this is the version of the program that will be cached for use with other Models.\nfunction createProgram(programToCreate, model, context) {\n var programId = programToCreate.programId;\n var techniqueId = programToCreate.techniqueId;\n var program = model._sourcePrograms[programId];\n var shaders = model._rendererResources.sourceShaders;\n\n var vs = shaders[program.vertexShader];\n var fs = shaders[program.fragmentShader];\n\n var quantizedVertexShaders = model._quantizedVertexShaders;\n\n if (\n model.extensionsUsed.WEB3D_quantized_attributes ||\n model._dequantizeInShader\n ) {\n var quantizedVS = quantizedVertexShaders[programId];\n if (!defined(quantizedVS)) {\n quantizedVS = modifyShaderForQuantizedAttributes(vs, programId, model);\n quantizedVertexShaders[programId] = quantizedVS;\n }\n vs = quantizedVS;\n }\n\n var drawVS = modifyShader(vs, programId, model._vertexShaderLoaded);\n var drawFS = modifyShader(fs, programId, model._fragmentShaderLoaded);\n\n if (!defined(model._uniformMapLoaded)) {\n drawFS = \"uniform vec4 czm_pickColor;\\n\" + drawFS;\n }\n\n var useIBL =\n model._imageBasedLightingFactor.x > 0.0 ||\n model._imageBasedLightingFactor.y > 0.0;\n if (useIBL) {\n drawFS = \"#define USE_IBL_LIGHTING \\n\\n\" + drawFS;\n }\n\n if (defined(model._lightColor)) {\n drawFS = \"#define USE_CUSTOM_LIGHT_COLOR \\n\\n\" + drawFS;\n }\n\n if (model._sourceVersion !== \"2.0\" || model._sourceKHRTechniquesWebGL) {\n drawFS = ShaderSource.replaceMain(drawFS, \"non_gamma_corrected_main\");\n drawFS =\n drawFS +\n \"\\n\" +\n \"void main() { \\n\" +\n \" non_gamma_corrected_main(); \\n\" +\n \" gl_FragColor = czm_gammaCorrect(gl_FragColor); \\n\" +\n \"} \\n\";\n }\n\n if (OctahedralProjectedCubeMap.isSupported(context)) {\n var usesSH =\n defined(model._sphericalHarmonicCoefficients) ||\n model._useDefaultSphericalHarmonics;\n var usesSM =\n (defined(model._specularEnvironmentMapAtlas) &&\n model._specularEnvironmentMapAtlas.ready) ||\n model._useDefaultSpecularMaps;\n var addMatrix = usesSH || usesSM || useIBL;\n if (addMatrix) {\n drawFS = \"uniform mat4 gltf_clippingPlanesMatrix; \\n\" + drawFS;\n }\n\n if (defined(model._sphericalHarmonicCoefficients)) {\n drawFS =\n \"#define DIFFUSE_IBL \\n\" +\n \"#define CUSTOM_SPHERICAL_HARMONICS \\n\" +\n \"uniform vec3 gltf_sphericalHarmonicCoefficients[9]; \\n\" +\n drawFS;\n } else if (model._useDefaultSphericalHarmonics) {\n drawFS = \"#define DIFFUSE_IBL \\n\" + drawFS;\n }\n\n if (\n defined(model._specularEnvironmentMapAtlas) &&\n model._specularEnvironmentMapAtlas.ready\n ) {\n drawFS =\n \"#define SPECULAR_IBL \\n\" +\n \"#define CUSTOM_SPECULAR_IBL \\n\" +\n \"uniform sampler2D gltf_specularMap; \\n\" +\n \"uniform vec2 gltf_specularMapSize; \\n\" +\n \"uniform float gltf_maxSpecularLOD; \\n\" +\n drawFS;\n } else if (model._useDefaultSpecularMaps) {\n drawFS = \"#define SPECULAR_IBL \\n\" + drawFS;\n }\n }\n\n if (defined(model._luminanceAtZenith)) {\n drawFS =\n \"#define USE_SUN_LUMINANCE \\n\" +\n \"uniform float gltf_luminanceAtZenith;\\n\" +\n drawFS;\n }\n\n createAttributesAndProgram(\n programId,\n techniqueId,\n drawFS,\n drawVS,\n model,\n context\n );\n}\n\nfunction recreateProgram(programToCreate, model, context) {\n var programId = programToCreate.programId;\n var techniqueId = programToCreate.techniqueId;\n var program = model._sourcePrograms[programId];\n var shaders = model._rendererResources.sourceShaders;\n\n var quantizedVertexShaders = model._quantizedVertexShaders;\n\n var clippingPlaneCollection = model.clippingPlanes;\n var addClippingPlaneCode = isClippingEnabled(model);\n\n var vs = shaders[program.vertexShader];\n var fs = shaders[program.fragmentShader];\n\n if (\n model.extensionsUsed.WEB3D_quantized_attributes ||\n model._dequantizeInShader\n ) {\n vs = quantizedVertexShaders[programId];\n }\n\n var finalFS = fs;\n if (isColorShadingEnabled(model)) {\n finalFS = Model._modifyShaderForColor(finalFS);\n }\n if (addClippingPlaneCode) {\n finalFS = modifyShaderForClippingPlanes(\n finalFS,\n clippingPlaneCollection,\n context\n );\n }\n\n var drawVS = modifyShader(vs, programId, model._vertexShaderLoaded);\n var drawFS = modifyShader(finalFS, programId, model._fragmentShaderLoaded);\n\n if (!defined(model._uniformMapLoaded)) {\n drawFS = \"uniform vec4 czm_pickColor;\\n\" + drawFS;\n }\n\n var useIBL =\n model._imageBasedLightingFactor.x > 0.0 ||\n model._imageBasedLightingFactor.y > 0.0;\n if (useIBL) {\n drawFS = \"#define USE_IBL_LIGHTING \\n\\n\" + drawFS;\n }\n\n if (defined(model._lightColor)) {\n drawFS = \"#define USE_CUSTOM_LIGHT_COLOR \\n\\n\" + drawFS;\n }\n\n if (model._sourceVersion !== \"2.0\" || model._sourceKHRTechniquesWebGL) {\n drawFS = ShaderSource.replaceMain(drawFS, \"non_gamma_corrected_main\");\n drawFS =\n drawFS +\n \"\\n\" +\n \"void main() { \\n\" +\n \" non_gamma_corrected_main(); \\n\" +\n \" gl_FragColor = czm_gammaCorrect(gl_FragColor); \\n\" +\n \"} \\n\";\n }\n\n if (OctahedralProjectedCubeMap.isSupported(context)) {\n var usesSH =\n defined(model._sphericalHarmonicCoefficients) ||\n model._useDefaultSphericalHarmonics;\n var usesSM =\n (defined(model._specularEnvironmentMapAtlas) &&\n model._specularEnvironmentMapAtlas.ready) ||\n model._useDefaultSpecularMaps;\n var addMatrix = !addClippingPlaneCode && (usesSH || usesSM || useIBL);\n if (addMatrix) {\n drawFS = \"uniform mat4 gltf_clippingPlanesMatrix; \\n\" + drawFS;\n }\n\n if (defined(model._sphericalHarmonicCoefficients)) {\n drawFS =\n \"#define DIFFUSE_IBL \\n\" +\n \"#define CUSTOM_SPHERICAL_HARMONICS \\n\" +\n \"uniform vec3 gltf_sphericalHarmonicCoefficients[9]; \\n\" +\n drawFS;\n } else if (model._useDefaultSphericalHarmonics) {\n drawFS = \"#define DIFFUSE_IBL \\n\" + drawFS;\n }\n\n if (\n defined(model._specularEnvironmentMapAtlas) &&\n model._specularEnvironmentMapAtlas.ready\n ) {\n drawFS =\n \"#define SPECULAR_IBL \\n\" +\n \"#define CUSTOM_SPECULAR_IBL \\n\" +\n \"uniform sampler2D gltf_specularMap; \\n\" +\n \"uniform vec2 gltf_specularMapSize; \\n\" +\n \"uniform float gltf_maxSpecularLOD; \\n\" +\n drawFS;\n } else if (model._useDefaultSpecularMaps) {\n drawFS = \"#define SPECULAR_IBL \\n\" + drawFS;\n }\n }\n\n if (defined(model._luminanceAtZenith)) {\n drawFS =\n \"#define USE_SUN_LUMINANCE \\n\" +\n \"uniform float gltf_luminanceAtZenith;\\n\" +\n drawFS;\n }\n\n createAttributesAndProgram(\n programId,\n techniqueId,\n drawFS,\n drawVS,\n model,\n context\n );\n}\n\nfunction createAttributesAndProgram(\n programId,\n techniqueId,\n drawFS,\n drawVS,\n model,\n context\n) {\n var technique = model._sourceTechniques[techniqueId];\n var attributeLocations = ModelUtility.createAttributeLocations(\n technique,\n model._precreatedAttributes\n );\n\n model._rendererResources.programs[programId] = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: drawVS,\n fragmentShaderSource: drawFS,\n attributeLocations: attributeLocations,\n });\n}\n\nvar scratchCreateProgramJob = new CreateProgramJob();\n\nfunction createPrograms(model, frameState) {\n var loadResources = model._loadResources;\n var programsToCreate = loadResources.programsToCreate;\n\n if (loadResources.pendingShaderLoads !== 0) {\n return;\n }\n\n // PERFORMANCE_IDEA: this could be more fine-grained by looking\n // at the shader's bufferView's to determine the buffer dependencies.\n if (loadResources.pendingBufferLoads !== 0) {\n return;\n }\n\n var context = frameState.context;\n\n if (model.asynchronous) {\n while (programsToCreate.length > 0) {\n scratchCreateProgramJob.set(programsToCreate.peek(), model, context);\n if (\n !frameState.jobScheduler.execute(\n scratchCreateProgramJob,\n JobType.PROGRAM\n )\n ) {\n break;\n }\n programsToCreate.dequeue();\n }\n } else {\n // Create all loaded programs this frame\n while (programsToCreate.length > 0) {\n createProgram(programsToCreate.dequeue(), model, context);\n }\n }\n}\n\nfunction getOnImageCreatedFromTypedArray(loadResources, gltfTexture) {\n return function (image) {\n loadResources.texturesToCreate.enqueue({\n id: gltfTexture.id,\n image: image,\n bufferView: undefined,\n });\n\n --loadResources.pendingBufferViewToImage;\n };\n}\n\nfunction loadTexturesFromBufferViews(model) {\n var loadResources = model._loadResources;\n\n if (loadResources.pendingBufferLoads !== 0) {\n return;\n }\n\n while (loadResources.texturesToCreateFromBufferView.length > 0) {\n var gltfTexture = loadResources.texturesToCreateFromBufferView.dequeue();\n\n var gltf = model.gltf;\n var bufferView = gltf.bufferViews[gltfTexture.bufferView];\n var imageId = gltf.textures[gltfTexture.id].source;\n\n var onerror = ModelUtility.getFailedLoadFunction(\n model,\n \"image\",\n \"id: \" + gltfTexture.id + \", bufferView: \" + gltfTexture.bufferView\n );\n\n if (gltfTexture.mimeType === \"image/ktx\") {\n loadKTX(loadResources.getBuffer(bufferView))\n .then(imageLoad(model, gltfTexture.id, imageId))\n .otherwise(onerror);\n ++model._loadResources.pendingTextureLoads;\n } else if (gltfTexture.mimeType === \"image/crn\") {\n loadCRN(loadResources.getBuffer(bufferView))\n .then(imageLoad(model, gltfTexture.id, imageId))\n .otherwise(onerror);\n ++model._loadResources.pendingTextureLoads;\n } else {\n var onload = getOnImageCreatedFromTypedArray(loadResources, gltfTexture);\n loadImageFromTypedArray({\n uint8Array: loadResources.getBuffer(bufferView),\n format: gltfTexture.mimeType,\n flipY: false,\n })\n .then(onload)\n .otherwise(onerror);\n ++loadResources.pendingBufferViewToImage;\n }\n }\n}\n\nfunction createSamplers(model) {\n var loadResources = model._loadResources;\n if (loadResources.createSamplers) {\n loadResources.createSamplers = false;\n\n var rendererSamplers = model._rendererResources.samplers;\n ForEach.sampler(model.gltf, function (sampler, samplerId) {\n rendererSamplers[samplerId] = new Sampler({\n wrapS: sampler.wrapS,\n wrapT: sampler.wrapT,\n minificationFilter: sampler.minFilter,\n magnificationFilter: sampler.magFilter,\n });\n });\n }\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar CreateTextureJob = function () {\n this.gltfTexture = undefined;\n this.model = undefined;\n this.context = undefined;\n};\n\nCreateTextureJob.prototype.set = function (gltfTexture, model, context) {\n this.gltfTexture = gltfTexture;\n this.model = model;\n this.context = context;\n};\n\nCreateTextureJob.prototype.execute = function () {\n createTexture(this.gltfTexture, this.model, this.context);\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction createTexture(gltfTexture, model, context) {\n var textures = model.gltf.textures;\n var texture = textures[gltfTexture.id];\n\n var rendererSamplers = model._rendererResources.samplers;\n var sampler = rendererSamplers[texture.sampler];\n if (!defined(sampler)) {\n sampler = new Sampler({\n wrapS: TextureWrap.REPEAT,\n wrapT: TextureWrap.REPEAT,\n });\n }\n\n var usesTextureTransform = false;\n var materials = model.gltf.materials;\n var materialsLength = materials.length;\n for (var i = 0; i < materialsLength; ++i) {\n var material = materials[i];\n if (\n defined(material.extensions) &&\n defined(material.extensions.KHR_techniques_webgl)\n ) {\n var values = material.extensions.KHR_techniques_webgl.values;\n for (var valueName in values) {\n if (\n values.hasOwnProperty(valueName) &&\n valueName.indexOf(\"Texture\") !== -1\n ) {\n var value = values[valueName];\n if (\n value.index === gltfTexture.id &&\n defined(value.extensions) &&\n defined(value.extensions.KHR_texture_transform)\n ) {\n usesTextureTransform = true;\n break;\n }\n }\n }\n }\n if (usesTextureTransform) {\n break;\n }\n }\n\n var wrapS = sampler.wrapS;\n var wrapT = sampler.wrapT;\n var minFilter = sampler.minificationFilter;\n\n if (\n usesTextureTransform &&\n minFilter !== TextureMinificationFilter.LINEAR &&\n minFilter !== TextureMinificationFilter.NEAREST\n ) {\n if (\n minFilter === TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n minFilter === TextureMinificationFilter.NEAREST_MIPMAP_LINEAR\n ) {\n minFilter = TextureMinificationFilter.NEAREST;\n } else {\n minFilter = TextureMinificationFilter.LINEAR;\n }\n\n sampler = new Sampler({\n wrapS: sampler.wrapS,\n wrapT: sampler.wrapT,\n textureMinificationFilter: minFilter,\n textureMagnificationFilter: sampler.magnificationFilter,\n });\n }\n\n var internalFormat = gltfTexture.internalFormat;\n\n var mipmap =\n !(\n defined(internalFormat) && PixelFormat.isCompressedFormat(internalFormat)\n ) &&\n (minFilter === TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n minFilter === TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n minFilter === TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n minFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR);\n var requiresNpot =\n mipmap ||\n wrapS === TextureWrap.REPEAT ||\n wrapS === TextureWrap.MIRRORED_REPEAT ||\n wrapT === TextureWrap.REPEAT ||\n wrapT === TextureWrap.MIRRORED_REPEAT;\n\n var tx;\n var source = gltfTexture.image;\n\n if (defined(internalFormat)) {\n tx = new Texture({\n context: context,\n source: {\n arrayBufferView: gltfTexture.bufferView,\n },\n width: gltfTexture.width,\n height: gltfTexture.height,\n pixelFormat: internalFormat,\n sampler: sampler,\n });\n } else if (defined(source)) {\n var npot =\n !CesiumMath.isPowerOfTwo(source.width) ||\n !CesiumMath.isPowerOfTwo(source.height);\n\n if (requiresNpot && npot) {\n // WebGL requires power-of-two texture dimensions for mipmapping and REPEAT/MIRRORED_REPEAT wrap modes.\n var canvas = document.createElement(\"canvas\");\n canvas.width = CesiumMath.nextPowerOfTwo(source.width);\n canvas.height = CesiumMath.nextPowerOfTwo(source.height);\n var canvasContext = canvas.getContext(\"2d\");\n canvasContext.drawImage(\n source,\n 0,\n 0,\n source.width,\n source.height,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n source = canvas;\n }\n\n tx = new Texture({\n context: context,\n source: source,\n pixelFormat: texture.internalFormat,\n pixelDatatype: texture.type,\n sampler: sampler,\n flipY: false,\n });\n // GLTF_SPEC: Support TEXTURE_CUBE_MAP. https://github.com/KhronosGroup/glTF/issues/40\n if (mipmap) {\n tx.generateMipmap();\n }\n }\n if (defined(tx)) {\n model._rendererResources.textures[gltfTexture.id] = tx;\n model._texturesByteLength += tx.sizeInBytes;\n }\n}\n\nvar scratchCreateTextureJob = new CreateTextureJob();\n\nfunction createTextures(model, frameState) {\n var context = frameState.context;\n var texturesToCreate = model._loadResources.texturesToCreate;\n\n if (model.asynchronous) {\n while (texturesToCreate.length > 0) {\n scratchCreateTextureJob.set(texturesToCreate.peek(), model, context);\n if (\n !frameState.jobScheduler.execute(\n scratchCreateTextureJob,\n JobType.TEXTURE\n )\n ) {\n break;\n }\n texturesToCreate.dequeue();\n }\n } else {\n // Create all loaded textures this frame\n while (texturesToCreate.length > 0) {\n createTexture(texturesToCreate.dequeue(), model, context);\n }\n }\n}\n\nfunction getAttributeLocations(model, primitive) {\n var techniques = model._sourceTechniques;\n\n // Retrieve the compiled shader program to assign index values to attributes\n var attributeLocations = {};\n\n var location;\n var index;\n var material = model._runtime.materialsById[primitive.material];\n if (!defined(material)) {\n return attributeLocations;\n }\n\n var technique = techniques[material._technique];\n if (!defined(technique)) {\n return attributeLocations;\n }\n\n var attributes = technique.attributes;\n var program = model._rendererResources.programs[technique.program];\n var programVertexAttributes = program.vertexAttributes;\n var programAttributeLocations = program._attributeLocations;\n\n // Note: WebGL shader compiler may have optimized and removed some attributes from programVertexAttributes\n for (location in programVertexAttributes) {\n if (programVertexAttributes.hasOwnProperty(location)) {\n var attribute = attributes[location];\n if (defined(attribute)) {\n index = programAttributeLocations[location];\n attributeLocations[attribute.semantic] = index;\n }\n }\n }\n\n // Always add pre-created attributes.\n // Some pre-created attributes, like per-instance pickIds, may be compiled out of the draw program\n // but should be included in the list of attribute locations for the pick program.\n // This is safe to do since programVertexAttributes and programAttributeLocations are equivalent except\n // that programVertexAttributes optimizes out unused attributes.\n var precreatedAttributes = model._precreatedAttributes;\n if (defined(precreatedAttributes)) {\n for (location in precreatedAttributes) {\n if (precreatedAttributes.hasOwnProperty(location)) {\n index = programAttributeLocations[location];\n attributeLocations[location] = index;\n }\n }\n }\n\n return attributeLocations;\n}\n\nfunction createJoints(model, runtimeSkins) {\n var gltf = model.gltf;\n var skins = gltf.skins;\n var nodes = gltf.nodes;\n var runtimeNodes = model._runtime.nodes;\n\n var skinnedNodesIds = model._loadResources.skinnedNodesIds;\n var length = skinnedNodesIds.length;\n for (var j = 0; j < length; ++j) {\n var id = skinnedNodesIds[j];\n var skinnedNode = runtimeNodes[id];\n var node = nodes[id];\n\n var runtimeSkin = runtimeSkins[node.skin];\n skinnedNode.inverseBindMatrices = runtimeSkin.inverseBindMatrices;\n skinnedNode.bindShapeMatrix = runtimeSkin.bindShapeMatrix;\n\n var gltfJoints = skins[node.skin].joints;\n var jointsLength = gltfJoints.length;\n for (var i = 0; i < jointsLength; ++i) {\n var nodeId = gltfJoints[i];\n var jointNode = runtimeNodes[nodeId];\n skinnedNode.joints.push(jointNode);\n }\n }\n}\n\nfunction createSkins(model) {\n var loadResources = model._loadResources;\n\n if (loadResources.pendingBufferLoads !== 0) {\n return;\n }\n\n if (!loadResources.createSkins) {\n return;\n }\n loadResources.createSkins = false;\n\n var gltf = model.gltf;\n var accessors = gltf.accessors;\n var runtimeSkins = {};\n\n ForEach.skin(gltf, function (skin, id) {\n var accessor = accessors[skin.inverseBindMatrices];\n\n var bindShapeMatrix;\n if (!Matrix4.equals(skin.bindShapeMatrix, Matrix4.IDENTITY)) {\n bindShapeMatrix = Matrix4.clone(skin.bindShapeMatrix);\n }\n\n runtimeSkins[id] = {\n inverseBindMatrices: ModelAnimationCache.getSkinInverseBindMatrices(\n model,\n accessor\n ),\n bindShapeMatrix: bindShapeMatrix, // not used when undefined\n };\n });\n\n createJoints(model, runtimeSkins);\n}\n\nfunction getChannelEvaluator(model, runtimeNode, targetPath, spline) {\n return function (localAnimationTime) {\n if (defined(spline)) {\n localAnimationTime = model.clampAnimations\n ? spline.clampTime(localAnimationTime)\n : spline.wrapTime(localAnimationTime);\n runtimeNode[targetPath] = spline.evaluate(\n localAnimationTime,\n runtimeNode[targetPath]\n );\n runtimeNode.dirtyNumber = model._maxDirtyNumber;\n }\n };\n}\n\nfunction createRuntimeAnimations(model) {\n var loadResources = model._loadResources;\n\n if (!loadResources.finishedPendingBufferLoads()) {\n return;\n }\n\n if (!loadResources.createRuntimeAnimations) {\n return;\n }\n loadResources.createRuntimeAnimations = false;\n\n model._runtime.animations = [];\n\n var runtimeNodes = model._runtime.nodes;\n var accessors = model.gltf.accessors;\n\n ForEach.animation(model.gltf, function (animation, i) {\n var channels = animation.channels;\n var samplers = animation.samplers;\n\n // Find start and stop time for the entire animation\n var startTime = Number.MAX_VALUE;\n var stopTime = -Number.MAX_VALUE;\n\n var channelsLength = channels.length;\n var channelEvaluators = new Array(channelsLength);\n\n for (var j = 0; j < channelsLength; ++j) {\n var channel = channels[j];\n var target = channel.target;\n var path = target.path;\n var sampler = samplers[channel.sampler];\n var input = ModelAnimationCache.getAnimationParameterValues(\n model,\n accessors[sampler.input]\n );\n var output = ModelAnimationCache.getAnimationParameterValues(\n model,\n accessors[sampler.output]\n );\n\n startTime = Math.min(startTime, input[0]);\n stopTime = Math.max(stopTime, input[input.length - 1]);\n\n var spline = ModelAnimationCache.getAnimationSpline(\n model,\n i,\n animation,\n channel.sampler,\n sampler,\n input,\n path,\n output\n );\n\n channelEvaluators[j] = getChannelEvaluator(\n model,\n runtimeNodes[target.node],\n target.path,\n spline\n );\n }\n\n model._runtime.animations[i] = {\n name: animation.name,\n startTime: startTime,\n stopTime: stopTime,\n channelEvaluators: channelEvaluators,\n };\n });\n}\n\nfunction createVertexArrays(model, context) {\n var loadResources = model._loadResources;\n if (\n !loadResources.finishedBuffersCreation() ||\n !loadResources.finishedProgramCreation() ||\n !loadResources.createVertexArrays\n ) {\n return;\n }\n loadResources.createVertexArrays = false;\n\n var rendererBuffers = model._rendererResources.buffers;\n var rendererVertexArrays = model._rendererResources.vertexArrays;\n var gltf = model.gltf;\n var accessors = gltf.accessors;\n ForEach.mesh(gltf, function (mesh, meshId) {\n ForEach.meshPrimitive(mesh, function (primitive, primitiveId) {\n var attributes = [];\n var attributeLocation;\n var attributeLocations = getAttributeLocations(model, primitive);\n var decodedData =\n model._decodedData[meshId + \".primitive.\" + primitiveId];\n ForEach.meshPrimitiveAttribute(primitive, function (\n accessorId,\n attributeName\n ) {\n // Skip if the attribute is not used by the material, e.g., because the asset\n // was exported with an attribute that wasn't used and the asset wasn't optimized.\n attributeLocation = attributeLocations[attributeName];\n if (defined(attributeLocation)) {\n // Use attributes of previously decoded draco geometry\n if (defined(decodedData)) {\n var decodedAttributes = decodedData.attributes;\n if (decodedAttributes.hasOwnProperty(attributeName)) {\n var decodedAttribute = decodedAttributes[attributeName];\n attributes.push({\n index: attributeLocation,\n vertexBuffer: rendererBuffers[decodedAttribute.bufferView],\n componentsPerAttribute: decodedAttribute.componentsPerAttribute,\n componentDatatype: decodedAttribute.componentDatatype,\n normalize: decodedAttribute.normalized,\n offsetInBytes: decodedAttribute.byteOffset,\n strideInBytes: decodedAttribute.byteStride,\n });\n\n return;\n }\n }\n\n var a = accessors[accessorId];\n var normalize = defined(a.normalized) && a.normalized;\n attributes.push({\n index: attributeLocation,\n vertexBuffer: rendererBuffers[a.bufferView],\n componentsPerAttribute: numberOfComponentsForType(a.type),\n componentDatatype: a.componentType,\n normalize: normalize,\n offsetInBytes: a.byteOffset,\n strideInBytes: getAccessorByteStride(gltf, a),\n });\n }\n });\n\n // Add pre-created attributes\n var attribute;\n var attributeName;\n var precreatedAttributes = model._precreatedAttributes;\n if (defined(precreatedAttributes)) {\n for (attributeName in precreatedAttributes) {\n if (precreatedAttributes.hasOwnProperty(attributeName)) {\n attributeLocation = attributeLocations[attributeName];\n if (defined(attributeLocation)) {\n attribute = precreatedAttributes[attributeName];\n attribute.index = attributeLocation;\n attributes.push(attribute);\n }\n }\n }\n }\n\n var indexBuffer;\n if (defined(primitive.indices)) {\n var accessor = accessors[primitive.indices];\n var bufferView = accessor.bufferView;\n\n // Use buffer of previously decoded draco geometry\n if (defined(decodedData)) {\n bufferView = decodedData.bufferView;\n }\n\n indexBuffer = rendererBuffers[bufferView];\n }\n rendererVertexArrays[\n meshId + \".primitive.\" + primitiveId\n ] = new VertexArray({\n context: context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n });\n });\n });\n}\n\nfunction createRenderStates(model) {\n var loadResources = model._loadResources;\n if (loadResources.createRenderStates) {\n loadResources.createRenderStates = false;\n\n ForEach.material(model.gltf, function (material, materialId) {\n createRenderStateForMaterial(model, material, materialId);\n });\n }\n}\n\nfunction createRenderStateForMaterial(model, material, materialId) {\n var rendererRenderStates = model._rendererResources.renderStates;\n\n var blendEquationSeparate = [\n WebGLConstants.FUNC_ADD,\n WebGLConstants.FUNC_ADD,\n ];\n var blendFuncSeparate = [\n WebGLConstants.ONE,\n WebGLConstants.ONE_MINUS_SRC_ALPHA,\n WebGLConstants.ONE,\n WebGLConstants.ONE_MINUS_SRC_ALPHA,\n ];\n\n if (defined(material.extensions) && defined(material.extensions.KHR_blend)) {\n blendEquationSeparate = material.extensions.KHR_blend.blendEquation;\n blendFuncSeparate = material.extensions.KHR_blend.blendFactors;\n }\n\n var enableCulling = !material.doubleSided;\n var blendingEnabled = material.alphaMode === \"BLEND\";\n rendererRenderStates[materialId] = RenderState.fromCache({\n cull: {\n enabled: enableCulling,\n },\n depthTest: {\n enabled: true,\n func: DepthFunction.LESS_OR_EQUAL,\n },\n depthMask: !blendingEnabled,\n blending: {\n enabled: blendingEnabled,\n equationRgb: blendEquationSeparate[0],\n equationAlpha: blendEquationSeparate[1],\n functionSourceRgb: blendFuncSeparate[0],\n functionDestinationRgb: blendFuncSeparate[1],\n functionSourceAlpha: blendFuncSeparate[2],\n functionDestinationAlpha: blendFuncSeparate[3],\n },\n });\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar gltfUniformsFromNode = {\n MODEL: function (uniformState, model, runtimeNode) {\n return function () {\n return runtimeNode.computedMatrix;\n };\n },\n VIEW: function (uniformState, model, runtimeNode) {\n return function () {\n return uniformState.view;\n };\n },\n PROJECTION: function (uniformState, model, runtimeNode) {\n return function () {\n return uniformState.projection;\n };\n },\n MODELVIEW: function (uniformState, model, runtimeNode) {\n var mv = new Matrix4();\n return function () {\n return Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mv\n );\n };\n },\n CESIUM_RTC_MODELVIEW: function (uniformState, model, runtimeNode) {\n // CESIUM_RTC extension\n var mvRtc = new Matrix4();\n return function () {\n Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mvRtc\n );\n return Matrix4.setTranslation(mvRtc, model._rtcCenterEye, mvRtc);\n };\n },\n MODELVIEWPROJECTION: function (uniformState, model, runtimeNode) {\n var mvp = new Matrix4();\n return function () {\n Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mvp\n );\n return Matrix4.multiply(uniformState._projection, mvp, mvp);\n };\n },\n MODELINVERSE: function (uniformState, model, runtimeNode) {\n var mInverse = new Matrix4();\n return function () {\n return Matrix4.inverse(runtimeNode.computedMatrix, mInverse);\n };\n },\n VIEWINVERSE: function (uniformState, model) {\n return function () {\n return uniformState.inverseView;\n };\n },\n PROJECTIONINVERSE: function (uniformState, model, runtimeNode) {\n return function () {\n return uniformState.inverseProjection;\n };\n },\n MODELVIEWINVERSE: function (uniformState, model, runtimeNode) {\n var mv = new Matrix4();\n var mvInverse = new Matrix4();\n return function () {\n Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mv\n );\n return Matrix4.inverse(mv, mvInverse);\n };\n },\n MODELVIEWPROJECTIONINVERSE: function (uniformState, model, runtimeNode) {\n var mvp = new Matrix4();\n var mvpInverse = new Matrix4();\n return function () {\n Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mvp\n );\n Matrix4.multiply(uniformState._projection, mvp, mvp);\n return Matrix4.inverse(mvp, mvpInverse);\n };\n },\n MODELINVERSETRANSPOSE: function (uniformState, model, runtimeNode) {\n var mInverse = new Matrix4();\n var mInverseTranspose = new Matrix3();\n return function () {\n Matrix4.inverse(runtimeNode.computedMatrix, mInverse);\n Matrix4.getMatrix3(mInverse, mInverseTranspose);\n return Matrix3.transpose(mInverseTranspose, mInverseTranspose);\n };\n },\n MODELVIEWINVERSETRANSPOSE: function (uniformState, model, runtimeNode) {\n var mv = new Matrix4();\n var mvInverse = new Matrix4();\n var mvInverseTranspose = new Matrix3();\n return function () {\n Matrix4.multiplyTransformation(\n uniformState.view,\n runtimeNode.computedMatrix,\n mv\n );\n Matrix4.inverse(mv, mvInverse);\n Matrix4.getMatrix3(mvInverse, mvInverseTranspose);\n return Matrix3.transpose(mvInverseTranspose, mvInverseTranspose);\n };\n },\n VIEWPORT: function (uniformState, model, runtimeNode) {\n return function () {\n return uniformState.viewportCartesian4;\n };\n },\n};\n\nfunction getUniformFunctionFromSource(source, model, semantic, uniformState) {\n var runtimeNode = model._runtime.nodes[source];\n return gltfUniformsFromNode[semantic](uniformState, model, runtimeNode);\n}\n\nfunction createUniformsForMaterial(\n model,\n material,\n technique,\n instanceValues,\n context,\n textures,\n defaultTexture\n) {\n var uniformMap = {};\n var uniformValues = {};\n var jointMatrixUniformName;\n var morphWeightsUniformName;\n\n ForEach.techniqueUniform(technique, function (uniform, uniformName) {\n // GLTF_SPEC: This does not take into account uniform arrays,\n // indicated by uniforms with a count property.\n //\n // https://github.com/KhronosGroup/glTF/issues/258\n\n // GLTF_SPEC: In this implementation, material parameters with a\n // semantic or targeted via a source (for animation) are not\n // targetable for material animations. Is this too strict?\n //\n // https://github.com/KhronosGroup/glTF/issues/142\n\n var uv;\n if (defined(instanceValues) && defined(instanceValues[uniformName])) {\n // Parameter overrides by the instance technique\n uv = ModelUtility.createUniformFunction(\n uniform.type,\n instanceValues[uniformName],\n textures,\n defaultTexture\n );\n uniformMap[uniformName] = uv.func;\n uniformValues[uniformName] = uv;\n } else if (defined(uniform.node)) {\n uniformMap[uniformName] = getUniformFunctionFromSource(\n uniform.node,\n model,\n uniform.semantic,\n context.uniformState\n );\n } else if (defined(uniform.semantic)) {\n if (uniform.semantic === \"JOINTMATRIX\") {\n jointMatrixUniformName = uniformName;\n } else if (uniform.semantic === \"MORPHWEIGHTS\") {\n morphWeightsUniformName = uniformName;\n } else if (uniform.semantic === \"ALPHACUTOFF\") {\n // The material's alphaCutoff value uses a uniform with semantic ALPHACUTOFF.\n // A uniform with this semantic will ignore the instance or default values.\n var alphaMode = material.alphaMode;\n if (defined(alphaMode) && alphaMode === \"MASK\") {\n var alphaCutoffValue = defaultValue(material.alphaCutoff, 0.5);\n uv = ModelUtility.createUniformFunction(\n uniform.type,\n alphaCutoffValue,\n textures,\n defaultTexture\n );\n uniformMap[uniformName] = uv.func;\n uniformValues[uniformName] = uv;\n }\n } else {\n // Map glTF semantic to Cesium automatic uniform\n uniformMap[uniformName] = ModelUtility.getGltfSemanticUniforms()[\n uniform.semantic\n ](context.uniformState, model);\n }\n } else if (defined(uniform.value)) {\n // Technique value that isn't overridden by a material\n var uv2 = ModelUtility.createUniformFunction(\n uniform.type,\n uniform.value,\n textures,\n defaultTexture\n );\n uniformMap[uniformName] = uv2.func;\n uniformValues[uniformName] = uv2;\n }\n });\n\n return {\n map: uniformMap,\n values: uniformValues,\n jointMatrixUniformName: jointMatrixUniformName,\n morphWeightsUniformName: morphWeightsUniformName,\n };\n}\n\nfunction createUniformMaps(model, context) {\n var loadResources = model._loadResources;\n\n if (!loadResources.finishedProgramCreation()) {\n return;\n }\n\n if (!loadResources.createUniformMaps) {\n return;\n }\n loadResources.createUniformMaps = false;\n\n var gltf = model.gltf;\n var techniques = model._sourceTechniques;\n var uniformMaps = model._uniformMaps;\n\n var textures = model._rendererResources.textures;\n var defaultTexture = model._defaultTexture;\n\n ForEach.material(gltf, function (material, materialId) {\n var modelMaterial = model._runtime.materialsById[materialId];\n var technique = techniques[modelMaterial._technique];\n var instanceValues = modelMaterial._values;\n\n var uniforms = createUniformsForMaterial(\n model,\n material,\n technique,\n instanceValues,\n context,\n textures,\n defaultTexture\n );\n\n var u = uniformMaps[materialId];\n u.uniformMap = uniforms.map; // uniform name -> function for the renderer\n u.values = uniforms.values; // material parameter name -> ModelMaterial for modifying the parameter at runtime\n u.jointMatrixUniformName = uniforms.jointMatrixUniformName;\n u.morphWeightsUniformName = uniforms.morphWeightsUniformName;\n\n if (defined(technique.attributes.a_outlineCoordinates)) {\n var outlineTexture = ModelOutlineLoader.createTexture(model, context);\n u.uniformMap.u_outlineTexture = function () {\n return outlineTexture;\n };\n }\n });\n}\n\nfunction createUniformsForDracoQuantizedAttributes(decodedData) {\n return ModelUtility.createUniformsForDracoQuantizedAttributes(\n decodedData.attributes\n );\n}\n\nfunction createUniformsForQuantizedAttributes(model, primitive) {\n var programId = getProgramForPrimitive(model, primitive);\n var quantizedUniforms = model._quantizedUniforms[programId];\n return ModelUtility.createUniformsForQuantizedAttributes(\n model.gltf,\n primitive,\n quantizedUniforms\n );\n}\n\nfunction createPickColorFunction(color) {\n return function () {\n return color;\n };\n}\n\nfunction createJointMatricesFunction(runtimeNode) {\n return function () {\n return runtimeNode.computedJointMatrices;\n };\n}\n\nfunction createMorphWeightsFunction(runtimeNode) {\n return function () {\n return runtimeNode.weights;\n };\n}\n\nfunction createSilhouetteColorFunction(model) {\n return function () {\n return model.silhouetteColor;\n };\n}\n\nfunction createSilhouetteSizeFunction(model) {\n return function () {\n return model.silhouetteSize;\n };\n}\n\nfunction createColorFunction(model) {\n return function () {\n return model.color;\n };\n}\n\nvar scratchClippingPlaneMatrix = new Matrix4();\nfunction createClippingPlanesMatrixFunction(model) {\n return function () {\n var clippingPlanes = model.clippingPlanes;\n if (\n !defined(clippingPlanes) &&\n !defined(model._sphericalHarmonicCoefficients) &&\n !defined(model._specularEnvironmentMaps)\n ) {\n return Matrix4.IDENTITY;\n }\n var modelMatrix = defined(clippingPlanes)\n ? clippingPlanes.modelMatrix\n : Matrix4.IDENTITY;\n return Matrix4.multiply(\n model._clippingPlaneModelViewMatrix,\n modelMatrix,\n scratchClippingPlaneMatrix\n );\n };\n}\n\nfunction createClippingPlanesFunction(model) {\n return function () {\n var clippingPlanes = model.clippingPlanes;\n return !defined(clippingPlanes) || !clippingPlanes.enabled\n ? model._defaultTexture\n : clippingPlanes.texture;\n };\n}\n\nfunction createClippingPlanesEdgeStyleFunction(model) {\n return function () {\n var clippingPlanes = model.clippingPlanes;\n if (!defined(clippingPlanes)) {\n return Color.WHITE.withAlpha(0.0);\n }\n\n var style = Color.clone(clippingPlanes.edgeColor);\n style.alpha = clippingPlanes.edgeWidth;\n return style;\n };\n}\n\nfunction createColorBlendFunction(model) {\n return function () {\n return ColorBlendMode.getColorBlend(\n model.colorBlendMode,\n model.colorBlendAmount\n );\n };\n}\n\nfunction createIBLFactorFunction(model) {\n return function () {\n return model._imageBasedLightingFactor;\n };\n}\n\nfunction createLightColorFunction(model) {\n return function () {\n return model._lightColor;\n };\n}\n\nfunction createLuminanceAtZenithFunction(model) {\n return function () {\n return model.luminanceAtZenith;\n };\n}\n\nfunction createSphericalHarmonicCoefficientsFunction(model) {\n return function () {\n return model._sphericalHarmonicCoefficients;\n };\n}\n\nfunction createSpecularEnvironmentMapFunction(model) {\n return function () {\n return model._specularEnvironmentMapAtlas.texture;\n };\n}\n\nfunction createSpecularEnvironmentMapSizeFunction(model) {\n return function () {\n return model._specularEnvironmentMapAtlas.texture.dimensions;\n };\n}\n\nfunction createSpecularEnvironmentMapLOD(model) {\n return function () {\n return model._specularEnvironmentMapAtlas.maximumMipmapLevel;\n };\n}\n\nfunction triangleCountFromPrimitiveIndices(primitive, indicesCount) {\n switch (primitive.mode) {\n case PrimitiveType.TRIANGLES:\n return indicesCount / 3;\n case PrimitiveType.TRIANGLE_STRIP:\n case PrimitiveType.TRIANGLE_FAN:\n return Math.max(indicesCount - 2, 0);\n default:\n return 0;\n }\n}\n\nfunction createCommand(model, gltfNode, runtimeNode, context, scene3DOnly) {\n var nodeCommands = model._nodeCommands;\n var pickIds = model._pickIds;\n var allowPicking = model.allowPicking;\n var runtimeMeshesByName = model._runtime.meshesByName;\n\n var resources = model._rendererResources;\n var rendererVertexArrays = resources.vertexArrays;\n var rendererPrograms = resources.programs;\n var rendererRenderStates = resources.renderStates;\n var uniformMaps = model._uniformMaps;\n\n var gltf = model.gltf;\n var accessors = gltf.accessors;\n var gltfMeshes = gltf.meshes;\n\n var id = gltfNode.mesh;\n var mesh = gltfMeshes[id];\n\n var primitives = mesh.primitives;\n var length = primitives.length;\n\n // The glTF node hierarchy is a DAG so a node can have more than one\n // parent, so a node may already have commands. If so, append more\n // since they will have a different model matrix.\n\n for (var i = 0; i < length; ++i) {\n var primitive = primitives[i];\n var ix = accessors[primitive.indices];\n var material = model._runtime.materialsById[primitive.material];\n var programId = material._program;\n var decodedData = model._decodedData[id + \".primitive.\" + i];\n\n var boundingSphere;\n var positionAccessor = primitive.attributes.POSITION;\n if (defined(positionAccessor)) {\n var minMax = ModelUtility.getAccessorMinMax(gltf, positionAccessor);\n boundingSphere = BoundingSphere.fromCornerPoints(\n Cartesian3.fromArray(minMax.min),\n Cartesian3.fromArray(minMax.max)\n );\n }\n\n var vertexArray = rendererVertexArrays[id + \".primitive.\" + i];\n var offset;\n var count;\n\n // Use indices of the previously decoded Draco geometry.\n if (defined(decodedData)) {\n count = decodedData.numberOfIndices;\n offset = 0;\n } else if (defined(ix)) {\n count = ix.count;\n offset = ix.byteOffset / IndexDatatype.getSizeInBytes(ix.componentType); // glTF has offset in bytes. Cesium has offsets in indices\n } else {\n var positions = accessors[primitive.attributes.POSITION];\n count = positions.count;\n offset = 0;\n }\n\n // Update model triangle count using number of indices\n model._trianglesLength += triangleCountFromPrimitiveIndices(\n primitive,\n count\n );\n\n var um = uniformMaps[primitive.material];\n var uniformMap = um.uniformMap;\n if (defined(um.jointMatrixUniformName)) {\n var jointUniformMap = {};\n jointUniformMap[um.jointMatrixUniformName] = createJointMatricesFunction(\n runtimeNode\n );\n\n uniformMap = combine(uniformMap, jointUniformMap);\n }\n if (defined(um.morphWeightsUniformName)) {\n var morphWeightsUniformMap = {};\n morphWeightsUniformMap[\n um.morphWeightsUniformName\n ] = createMorphWeightsFunction(runtimeNode);\n\n uniformMap = combine(uniformMap, morphWeightsUniformMap);\n }\n\n uniformMap = combine(uniformMap, {\n gltf_color: createColorFunction(model),\n gltf_colorBlend: createColorBlendFunction(model),\n gltf_clippingPlanes: createClippingPlanesFunction(model),\n gltf_clippingPlanesEdgeStyle: createClippingPlanesEdgeStyleFunction(\n model\n ),\n gltf_clippingPlanesMatrix: createClippingPlanesMatrixFunction(model),\n gltf_iblFactor: createIBLFactorFunction(model),\n gltf_lightColor: createLightColorFunction(model),\n gltf_sphericalHarmonicCoefficients: createSphericalHarmonicCoefficientsFunction(\n model\n ),\n gltf_specularMap: createSpecularEnvironmentMapFunction(model),\n gltf_specularMapSize: createSpecularEnvironmentMapSizeFunction(model),\n gltf_maxSpecularLOD: createSpecularEnvironmentMapLOD(model),\n gltf_luminanceAtZenith: createLuminanceAtZenithFunction(model),\n });\n\n // Allow callback to modify the uniformMap\n if (defined(model._uniformMapLoaded)) {\n uniformMap = model._uniformMapLoaded(uniformMap, programId, runtimeNode);\n }\n\n // Add uniforms for decoding quantized attributes if used\n var quantizedUniformMap = {};\n if (model.extensionsUsed.WEB3D_quantized_attributes) {\n quantizedUniformMap = createUniformsForQuantizedAttributes(\n model,\n primitive\n );\n } else if (model._dequantizeInShader && defined(decodedData)) {\n quantizedUniformMap = createUniformsForDracoQuantizedAttributes(\n decodedData\n );\n }\n uniformMap = combine(uniformMap, quantizedUniformMap);\n\n var rs = rendererRenderStates[primitive.material];\n var isTranslucent = rs.blending.enabled;\n\n var owner = model._pickObject;\n if (!defined(owner)) {\n owner = {\n primitive: model,\n id: model.id,\n node: runtimeNode.publicNode,\n mesh: runtimeMeshesByName[mesh.name],\n };\n }\n\n var castShadows = ShadowMode.castShadows(model._shadows);\n var receiveShadows = ShadowMode.receiveShadows(model._shadows);\n\n var pickId;\n if (allowPicking && !defined(model._uniformMapLoaded)) {\n pickId = context.createPickId(owner);\n pickIds.push(pickId);\n var pickUniforms = {\n czm_pickColor: createPickColorFunction(pickId.color),\n };\n uniformMap = combine(uniformMap, pickUniforms);\n }\n\n if (allowPicking) {\n if (defined(model._pickIdLoaded) && defined(model._uniformMapLoaded)) {\n pickId = model._pickIdLoaded();\n } else {\n pickId = \"czm_pickColor\";\n }\n }\n\n var command = new DrawCommand({\n boundingVolume: new BoundingSphere(), // updated in update()\n cull: model.cull,\n modelMatrix: new Matrix4(), // computed in update()\n primitiveType: primitive.mode,\n vertexArray: vertexArray,\n count: count,\n offset: offset,\n shaderProgram: rendererPrograms[programId],\n castShadows: castShadows,\n receiveShadows: receiveShadows,\n uniformMap: uniformMap,\n renderState: rs,\n owner: owner,\n pass: isTranslucent ? Pass.TRANSLUCENT : model.opaquePass,\n pickId: pickId,\n });\n\n var command2D;\n if (!scene3DOnly) {\n command2D = DrawCommand.shallowClone(command);\n command2D.boundingVolume = new BoundingSphere(); // updated in update()\n command2D.modelMatrix = new Matrix4(); // updated in update()\n }\n\n var nodeCommand = {\n show: true,\n boundingSphere: boundingSphere,\n command: command,\n command2D: command2D,\n // Generated on demand when silhouette size is greater than 0.0 and silhouette alpha is greater than 0.0\n silhouetteModelCommand: undefined,\n silhouetteModelCommand2D: undefined,\n silhouetteColorCommand: undefined,\n silhouetteColorCommand2D: undefined,\n // Generated on demand when color alpha is less than 1.0\n translucentCommand: undefined,\n translucentCommand2D: undefined,\n // Generated on demand when back face culling is false\n disableCullingCommand: undefined,\n disableCullingCommand2D: undefined,\n // For updating node commands on shader reconstruction\n programId: programId,\n };\n runtimeNode.commands.push(nodeCommand);\n nodeCommands.push(nodeCommand);\n }\n}\n\nfunction createRuntimeNodes(model, context, scene3DOnly) {\n var loadResources = model._loadResources;\n\n if (!loadResources.finishedEverythingButTextureCreation()) {\n return;\n }\n\n if (!loadResources.createRuntimeNodes) {\n return;\n }\n loadResources.createRuntimeNodes = false;\n\n var rootNodes = [];\n var runtimeNodes = model._runtime.nodes;\n\n var gltf = model.gltf;\n var nodes = gltf.nodes;\n\n var scene = gltf.scenes[gltf.scene];\n var sceneNodes = scene.nodes;\n var length = sceneNodes.length;\n\n var stack = [];\n var seen = {};\n\n for (var i = 0; i < length; ++i) {\n stack.push({\n parentRuntimeNode: undefined,\n gltfNode: nodes[sceneNodes[i]],\n id: sceneNodes[i],\n });\n\n while (stack.length > 0) {\n var n = stack.pop();\n seen[n.id] = true;\n var parentRuntimeNode = n.parentRuntimeNode;\n var gltfNode = n.gltfNode;\n\n // Node hierarchy is a DAG so a node can have more than one parent so it may already exist\n var runtimeNode = runtimeNodes[n.id];\n if (runtimeNode.parents.length === 0) {\n if (defined(gltfNode.matrix)) {\n runtimeNode.matrix = Matrix4.fromColumnMajorArray(gltfNode.matrix);\n } else {\n // TRS converted to Cesium types\n var rotation = gltfNode.rotation;\n runtimeNode.translation = Cartesian3.fromArray(gltfNode.translation);\n runtimeNode.rotation = Quaternion.unpack(rotation);\n runtimeNode.scale = Cartesian3.fromArray(gltfNode.scale);\n }\n }\n\n if (defined(parentRuntimeNode)) {\n parentRuntimeNode.children.push(runtimeNode);\n runtimeNode.parents.push(parentRuntimeNode);\n } else {\n rootNodes.push(runtimeNode);\n }\n\n if (defined(gltfNode.mesh)) {\n createCommand(model, gltfNode, runtimeNode, context, scene3DOnly);\n }\n\n var children = gltfNode.children;\n if (defined(children)) {\n var childrenLength = children.length;\n for (var j = 0; j < childrenLength; j++) {\n var childId = children[j];\n if (!seen[childId]) {\n stack.push({\n parentRuntimeNode: runtimeNode,\n gltfNode: nodes[childId],\n id: children[j],\n });\n }\n }\n }\n }\n }\n\n model._runtime.rootNodes = rootNodes;\n model._runtime.nodes = runtimeNodes;\n}\n\nfunction getGeometryByteLength(buffers) {\n var memory = 0;\n for (var id in buffers) {\n if (buffers.hasOwnProperty(id)) {\n memory += buffers[id].sizeInBytes;\n }\n }\n return memory;\n}\n\nfunction getTexturesByteLength(textures) {\n var memory = 0;\n for (var id in textures) {\n if (textures.hasOwnProperty(id)) {\n memory += textures[id].sizeInBytes;\n }\n }\n return memory;\n}\n\nfunction createResources(model, frameState) {\n var context = frameState.context;\n var scene3DOnly = frameState.scene3DOnly;\n var quantizedVertexShaders = model._quantizedVertexShaders;\n var techniques = model._sourceTechniques;\n var programs = model._sourcePrograms;\n\n var resources = model._rendererResources;\n var shaders = resources.sourceShaders;\n if (model._loadRendererResourcesFromCache) {\n shaders = resources.sourceShaders =\n model._cachedRendererResources.sourceShaders;\n }\n\n for (var techniqueId in techniques) {\n if (techniques.hasOwnProperty(techniqueId)) {\n var programId = techniques[techniqueId].program;\n var program = programs[programId];\n var shader = shaders[program.vertexShader];\n\n ModelUtility.checkSupportedGlExtensions(program.glExtensions, context);\n\n if (\n model.extensionsUsed.WEB3D_quantized_attributes ||\n model._dequantizeInShader\n ) {\n var quantizedVS = quantizedVertexShaders[programId];\n if (!defined(quantizedVS)) {\n quantizedVS = modifyShaderForQuantizedAttributes(\n shader,\n programId,\n model\n );\n quantizedVertexShaders[programId] = quantizedVS;\n }\n shader = quantizedVS;\n }\n\n shader = modifyShader(shader, programId, model._vertexShaderLoaded);\n }\n }\n\n if (model._loadRendererResourcesFromCache) {\n var cachedResources = model._cachedRendererResources;\n\n resources.buffers = cachedResources.buffers;\n resources.vertexArrays = cachedResources.vertexArrays;\n resources.programs = cachedResources.programs;\n resources.silhouettePrograms = cachedResources.silhouettePrograms;\n resources.textures = cachedResources.textures;\n resources.samplers = cachedResources.samplers;\n resources.renderStates = cachedResources.renderStates;\n\n // Vertex arrays are unique to this model, create instead of using the cache.\n if (defined(model._precreatedAttributes)) {\n createVertexArrays(model, context);\n }\n\n model._cachedGeometryByteLength += getGeometryByteLength(\n cachedResources.buffers\n );\n model._cachedTexturesByteLength += getTexturesByteLength(\n cachedResources.textures\n );\n } else {\n createBuffers(model, frameState); // using glTF bufferViews\n createPrograms(model, frameState);\n createSamplers(model, context);\n loadTexturesFromBufferViews(model);\n createTextures(model, frameState);\n }\n\n createSkins(model);\n createRuntimeAnimations(model);\n\n if (!model._loadRendererResourcesFromCache) {\n createVertexArrays(model, context); // using glTF meshes\n createRenderStates(model); // using glTF materials/techniques/states\n // Long-term, we might not cache render states if they could change\n // due to an animation, e.g., a uniform going from opaque to transparent.\n // Could use copy-on-write if it is worth it. Probably overkill.\n }\n\n createUniformMaps(model, context); // using glTF materials/techniques\n createRuntimeNodes(model, context, scene3DOnly); // using glTF scene\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction getNodeMatrix(node, result) {\n var publicNode = node.publicNode;\n var publicMatrix = publicNode.matrix;\n\n if (publicNode.useMatrix && defined(publicMatrix)) {\n // Public matrix overrides original glTF matrix and glTF animations\n Matrix4.clone(publicMatrix, result);\n } else if (defined(node.matrix)) {\n Matrix4.clone(node.matrix, result);\n } else {\n Matrix4.fromTranslationQuaternionRotationScale(\n node.translation,\n node.rotation,\n node.scale,\n result\n );\n // Keep matrix returned by the node in-sync if the node is targeted by an animation. Only TRS nodes can be targeted.\n publicNode.setMatrix(result);\n }\n}\n\nvar scratchNodeStack = [];\nvar scratchComputedTranslation = new Cartesian4();\nvar scratchComputedMatrixIn2D = new Matrix4();\n\nfunction updateNodeHierarchyModelMatrix(\n model,\n modelTransformChanged,\n justLoaded,\n projection\n) {\n var maxDirtyNumber = model._maxDirtyNumber;\n\n var rootNodes = model._runtime.rootNodes;\n var length = rootNodes.length;\n\n var nodeStack = scratchNodeStack;\n var computedModelMatrix = model._computedModelMatrix;\n\n if (model._mode !== SceneMode.SCENE3D && !model._ignoreCommands) {\n var translation = Matrix4.getColumn(\n computedModelMatrix,\n 3,\n scratchComputedTranslation\n );\n if (!Cartesian4.equals(translation, Cartesian4.UNIT_W)) {\n computedModelMatrix = Transforms.basisTo2D(\n projection,\n computedModelMatrix,\n scratchComputedMatrixIn2D\n );\n model._rtcCenter = model._rtcCenter3D;\n } else {\n var center = model.boundingSphere.center;\n var to2D = Transforms.wgs84To2DModelMatrix(\n projection,\n center,\n scratchComputedMatrixIn2D\n );\n computedModelMatrix = Matrix4.multiply(\n to2D,\n computedModelMatrix,\n scratchComputedMatrixIn2D\n );\n\n if (defined(model._rtcCenter)) {\n Matrix4.setTranslation(\n computedModelMatrix,\n Cartesian4.UNIT_W,\n computedModelMatrix\n );\n model._rtcCenter = model._rtcCenter2D;\n }\n }\n }\n\n for (var i = 0; i < length; ++i) {\n var n = rootNodes[i];\n\n getNodeMatrix(n, n.transformToRoot);\n nodeStack.push(n);\n\n while (nodeStack.length > 0) {\n n = nodeStack.pop();\n var transformToRoot = n.transformToRoot;\n var commands = n.commands;\n\n if (\n n.dirtyNumber === maxDirtyNumber ||\n modelTransformChanged ||\n justLoaded\n ) {\n var nodeMatrix = Matrix4.multiplyTransformation(\n computedModelMatrix,\n transformToRoot,\n n.computedMatrix\n );\n var commandsLength = commands.length;\n if (commandsLength > 0) {\n // Node has meshes, which has primitives. Update their commands.\n for (var j = 0; j < commandsLength; ++j) {\n var primitiveCommand = commands[j];\n var command = primitiveCommand.command;\n Matrix4.clone(nodeMatrix, command.modelMatrix);\n\n // PERFORMANCE_IDEA: Can use transformWithoutScale if no node up to the root has scale (including animation)\n BoundingSphere.transform(\n primitiveCommand.boundingSphere,\n command.modelMatrix,\n command.boundingVolume\n );\n\n if (defined(model._rtcCenter)) {\n Cartesian3.add(\n model._rtcCenter,\n command.boundingVolume.center,\n command.boundingVolume.center\n );\n }\n\n // If the model crosses the IDL in 2D, it will be drawn in one viewport, but part of it\n // will be clipped by the viewport. We create a second command that translates the model\n // model matrix to the opposite side of the map so the part that was clipped in one viewport\n // is drawn in the other.\n command = primitiveCommand.command2D;\n if (defined(command) && model._mode === SceneMode.SCENE2D) {\n Matrix4.clone(nodeMatrix, command.modelMatrix);\n command.modelMatrix[13] -=\n CesiumMath.sign(command.modelMatrix[13]) *\n 2.0 *\n CesiumMath.PI *\n projection.ellipsoid.maximumRadius;\n BoundingSphere.transform(\n primitiveCommand.boundingSphere,\n command.modelMatrix,\n command.boundingVolume\n );\n }\n }\n }\n }\n\n var children = n.children;\n if (defined(children)) {\n var childrenLength = children.length;\n for (var k = 0; k < childrenLength; ++k) {\n var child = children[k];\n\n // A node's transform needs to be updated if\n // - It was targeted for animation this frame, or\n // - Any of its ancestors were targeted for animation this frame\n\n // PERFORMANCE_IDEA: if a child has multiple parents and only one of the parents\n // is dirty, all the subtrees for each child instance will be dirty; we probably\n // won't see this in the wild often.\n child.dirtyNumber = Math.max(child.dirtyNumber, n.dirtyNumber);\n\n if (child.dirtyNumber === maxDirtyNumber || justLoaded) {\n // Don't check for modelTransformChanged since if only the model's model matrix changed,\n // we do not need to rebuild the local transform-to-root, only the final\n // [model's-model-matrix][transform-to-root] above.\n getNodeMatrix(child, child.transformToRoot);\n Matrix4.multiplyTransformation(\n transformToRoot,\n child.transformToRoot,\n child.transformToRoot\n );\n }\n\n nodeStack.push(child);\n }\n }\n }\n }\n\n ++model._maxDirtyNumber;\n}\n\nvar scratchObjectSpace = new Matrix4();\n\nfunction applySkins(model) {\n var skinnedNodes = model._runtime.skinnedNodes;\n var length = skinnedNodes.length;\n\n for (var i = 0; i < length; ++i) {\n var node = skinnedNodes[i];\n\n scratchObjectSpace = Matrix4.inverseTransformation(\n node.transformToRoot,\n scratchObjectSpace\n );\n\n var computedJointMatrices = node.computedJointMatrices;\n var joints = node.joints;\n var bindShapeMatrix = node.bindShapeMatrix;\n var inverseBindMatrices = node.inverseBindMatrices;\n var inverseBindMatricesLength = inverseBindMatrices.length;\n\n for (var m = 0; m < inverseBindMatricesLength; ++m) {\n // [joint-matrix] = [node-to-root^-1][joint-to-root][inverse-bind][bind-shape]\n if (!defined(computedJointMatrices[m])) {\n computedJointMatrices[m] = new Matrix4();\n }\n computedJointMatrices[m] = Matrix4.multiplyTransformation(\n scratchObjectSpace,\n joints[m].transformToRoot,\n computedJointMatrices[m]\n );\n computedJointMatrices[m] = Matrix4.multiplyTransformation(\n computedJointMatrices[m],\n inverseBindMatrices[m],\n computedJointMatrices[m]\n );\n if (defined(bindShapeMatrix)) {\n // NOTE: bindShapeMatrix is glTF 1.0 only, removed in glTF 2.0.\n computedJointMatrices[m] = Matrix4.multiplyTransformation(\n computedJointMatrices[m],\n bindShapeMatrix,\n computedJointMatrices[m]\n );\n }\n }\n }\n}\n\nfunction updatePerNodeShow(model) {\n // Totally not worth it, but we could optimize this:\n // http://help.agi.com/AGIComponents/html/BlogDeletionInBoundingVolumeHierarchies.htm\n\n var rootNodes = model._runtime.rootNodes;\n var length = rootNodes.length;\n\n var nodeStack = scratchNodeStack;\n\n for (var i = 0; i < length; ++i) {\n var n = rootNodes[i];\n n.computedShow = n.publicNode.show;\n nodeStack.push(n);\n\n while (nodeStack.length > 0) {\n n = nodeStack.pop();\n var show = n.computedShow;\n\n var nodeCommands = n.commands;\n var nodeCommandsLength = nodeCommands.length;\n for (var j = 0; j < nodeCommandsLength; ++j) {\n nodeCommands[j].show = show;\n }\n // if commandsLength is zero, the node has a light or camera\n\n var children = n.children;\n if (defined(children)) {\n var childrenLength = children.length;\n for (var k = 0; k < childrenLength; ++k) {\n var child = children[k];\n // Parent needs to be shown for child to be shown.\n child.computedShow = show && child.publicNode.show;\n nodeStack.push(child);\n }\n }\n }\n }\n}\n\nfunction updatePickIds(model, context) {\n var id = model.id;\n if (model._id !== id) {\n model._id = id;\n\n var pickIds = model._pickIds;\n var length = pickIds.length;\n for (var i = 0; i < length; ++i) {\n pickIds[i].object.id = id;\n }\n }\n}\n\nfunction updateWireframe(model) {\n if (model._debugWireframe !== model.debugWireframe) {\n model._debugWireframe = model.debugWireframe;\n\n // This assumes the original primitive was TRIANGLES and that the triangles\n // are connected for the wireframe to look perfect.\n var primitiveType = model.debugWireframe\n ? PrimitiveType.LINES\n : PrimitiveType.TRIANGLES;\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n\n for (var i = 0; i < length; ++i) {\n nodeCommands[i].command.primitiveType = primitiveType;\n }\n }\n}\n\nfunction updateShowBoundingVolume(model) {\n if (model.debugShowBoundingVolume !== model._debugShowBoundingVolume) {\n model._debugShowBoundingVolume = model.debugShowBoundingVolume;\n\n var debugShowBoundingVolume = model.debugShowBoundingVolume;\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n\n for (var i = 0; i < length; ++i) {\n nodeCommands[i].command.debugShowBoundingVolume = debugShowBoundingVolume;\n }\n }\n}\n\nfunction updateShadows(model) {\n if (model.shadows !== model._shadows) {\n model._shadows = model.shadows;\n\n var castShadows = ShadowMode.castShadows(model.shadows);\n var receiveShadows = ShadowMode.receiveShadows(model.shadows);\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n\n for (var i = 0; i < length; i++) {\n var nodeCommand = nodeCommands[i];\n nodeCommand.command.castShadows = castShadows;\n nodeCommand.command.receiveShadows = receiveShadows;\n }\n }\n}\n\nfunction getTranslucentRenderState(renderState) {\n var rs = clone(renderState, true);\n rs.cull.enabled = false;\n rs.depthTest.enabled = true;\n rs.depthMask = false;\n rs.blending = BlendingState.ALPHA_BLEND;\n\n return RenderState.fromCache(rs);\n}\n\nfunction deriveTranslucentCommand(command) {\n var translucentCommand = DrawCommand.shallowClone(command);\n translucentCommand.pass = Pass.TRANSLUCENT;\n translucentCommand.renderState = getTranslucentRenderState(\n command.renderState\n );\n return translucentCommand;\n}\n\nfunction updateColor(model, frameState, forceDerive) {\n // Generate translucent commands when the blend color has an alpha in the range (0.0, 1.0) exclusive\n var scene3DOnly = frameState.scene3DOnly;\n var alpha = model.color.alpha;\n if (alpha > 0.0 && alpha < 1.0) {\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n if (!defined(nodeCommands[0].translucentCommand) || forceDerive) {\n for (var i = 0; i < length; ++i) {\n var nodeCommand = nodeCommands[i];\n var command = nodeCommand.command;\n nodeCommand.translucentCommand = deriveTranslucentCommand(command);\n if (!scene3DOnly) {\n var command2D = nodeCommand.command2D;\n nodeCommand.translucentCommand2D = deriveTranslucentCommand(\n command2D\n );\n }\n }\n }\n }\n}\n\nfunction getDisableCullingRenderState(renderState) {\n var rs = clone(renderState, true);\n rs.cull.enabled = false;\n return RenderState.fromCache(rs);\n}\n\nfunction deriveDisableCullingCommand(command) {\n var disableCullingCommand = DrawCommand.shallowClone(command);\n disableCullingCommand.renderState = getDisableCullingRenderState(\n command.renderState\n );\n return disableCullingCommand;\n}\n\nfunction updateBackFaceCulling(model, frameState, forceDerive) {\n var scene3DOnly = frameState.scene3DOnly;\n var backFaceCulling = model.backFaceCulling;\n if (!backFaceCulling) {\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n if (!defined(nodeCommands[0].disableCullingCommand) || forceDerive) {\n for (var i = 0; i < length; ++i) {\n var nodeCommand = nodeCommands[i];\n var command = nodeCommand.command;\n nodeCommand.disableCullingCommand = deriveDisableCullingCommand(\n command\n );\n if (!scene3DOnly) {\n var command2D = nodeCommand.command2D;\n nodeCommand.disableCullingCommand2D = deriveDisableCullingCommand(\n command2D\n );\n }\n }\n }\n }\n}\n\nfunction getProgramId(model, program) {\n var programs = model._rendererResources.programs;\n for (var id in programs) {\n if (programs.hasOwnProperty(id)) {\n if (programs[id] === program) {\n return id;\n }\n }\n }\n}\n\nfunction createSilhouetteProgram(model, program, frameState) {\n var vs = program.vertexShaderSource.sources[0];\n var attributeLocations = program._attributeLocations;\n var normalAttributeName = model._normalAttributeName;\n\n // Modified from http://forum.unity3d.com/threads/toon-outline-but-with-diffuse-surface.24668/\n vs = ShaderSource.replaceMain(vs, \"gltf_silhouette_main\");\n vs +=\n \"uniform float gltf_silhouetteSize; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gltf_silhouette_main(); \\n\" +\n \" vec3 n = normalize(czm_normal3D * \" +\n normalAttributeName +\n \"); \\n\" +\n \" n.x *= czm_projection[0][0]; \\n\" +\n \" n.y *= czm_projection[1][1]; \\n\" +\n \" vec4 clip = gl_Position; \\n\" +\n \" clip.xy += n.xy * clip.w * gltf_silhouetteSize * czm_pixelRatio / czm_viewport.z; \\n\" +\n \" gl_Position = clip; \\n\" +\n \"}\";\n\n var fs =\n \"uniform vec4 gltf_silhouetteColor; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gl_FragColor = czm_gammaCorrect(gltf_silhouetteColor); \\n\" +\n \"}\";\n\n return ShaderProgram.fromCache({\n context: frameState.context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n}\n\nfunction hasSilhouette(model, frameState) {\n return (\n silhouetteSupported(frameState.context) &&\n model.silhouetteSize > 0.0 &&\n model.silhouetteColor.alpha > 0.0 &&\n defined(model._normalAttributeName)\n );\n}\n\nfunction hasTranslucentCommands(model) {\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n for (var i = 0; i < length; ++i) {\n var nodeCommand = nodeCommands[i];\n var command = nodeCommand.command;\n if (command.pass === Pass.TRANSLUCENT) {\n return true;\n }\n }\n return false;\n}\n\nfunction isTranslucent(model) {\n return model.color.alpha > 0.0 && model.color.alpha < 1.0;\n}\n\nfunction isInvisible(model) {\n return model.color.alpha === 0.0;\n}\n\nfunction alphaDirty(currAlpha, prevAlpha) {\n // Returns whether the alpha state has changed between invisible, translucent, or opaque\n return (\n Math.floor(currAlpha) !== Math.floor(prevAlpha) ||\n Math.ceil(currAlpha) !== Math.ceil(prevAlpha)\n );\n}\n\nvar silhouettesLength = 0;\n\nfunction createSilhouetteCommands(model, frameState) {\n // Wrap around after exceeding the 8-bit stencil limit.\n // The reference is unique to each model until this point.\n var stencilReference = ++silhouettesLength % 255;\n\n // If the model is translucent the silhouette needs to be in the translucent pass.\n // Otherwise the silhouette would be rendered before the model.\n var silhouetteTranslucent =\n hasTranslucentCommands(model) ||\n isTranslucent(model) ||\n model.silhouetteColor.alpha < 1.0;\n var silhouettePrograms = model._rendererResources.silhouettePrograms;\n var scene3DOnly = frameState.scene3DOnly;\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n for (var i = 0; i < length; ++i) {\n var nodeCommand = nodeCommands[i];\n var command = nodeCommand.command;\n\n // Create model command\n var modelCommand = isTranslucent(model)\n ? nodeCommand.translucentCommand\n : command;\n var silhouetteModelCommand = DrawCommand.shallowClone(modelCommand);\n var renderState = clone(modelCommand.renderState);\n\n // Write the reference value into the stencil buffer.\n renderState.stencilTest = {\n enabled: true,\n frontFunction: WebGLConstants.ALWAYS,\n backFunction: WebGLConstants.ALWAYS,\n reference: stencilReference,\n mask: ~0,\n frontOperation: {\n fail: WebGLConstants.KEEP,\n zFail: WebGLConstants.KEEP,\n zPass: WebGLConstants.REPLACE,\n },\n backOperation: {\n fail: WebGLConstants.KEEP,\n zFail: WebGLConstants.KEEP,\n zPass: WebGLConstants.REPLACE,\n },\n };\n\n if (isInvisible(model)) {\n // When the model is invisible disable color and depth writes but still write into the stencil buffer\n renderState.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n renderState.depthMask = false;\n }\n renderState = RenderState.fromCache(renderState);\n silhouetteModelCommand.renderState = renderState;\n nodeCommand.silhouetteModelCommand = silhouetteModelCommand;\n\n // Create color command\n var silhouetteColorCommand = DrawCommand.shallowClone(command);\n renderState = clone(command.renderState, true);\n renderState.depthTest.enabled = true;\n renderState.cull.enabled = false;\n if (silhouetteTranslucent) {\n silhouetteColorCommand.pass = Pass.TRANSLUCENT;\n renderState.depthMask = false;\n renderState.blending = BlendingState.ALPHA_BLEND;\n }\n\n // Only render silhouette if the value in the stencil buffer equals the reference\n renderState.stencilTest = {\n enabled: true,\n frontFunction: WebGLConstants.NOTEQUAL,\n backFunction: WebGLConstants.NOTEQUAL,\n reference: stencilReference,\n mask: ~0,\n frontOperation: {\n fail: WebGLConstants.KEEP,\n zFail: WebGLConstants.KEEP,\n zPass: WebGLConstants.KEEP,\n },\n backOperation: {\n fail: WebGLConstants.KEEP,\n zFail: WebGLConstants.KEEP,\n zPass: WebGLConstants.KEEP,\n },\n };\n renderState = RenderState.fromCache(renderState);\n\n // If the silhouette program has already been cached use it\n var program = command.shaderProgram;\n var id = getProgramId(model, program);\n var silhouetteProgram = silhouettePrograms[id];\n if (!defined(silhouetteProgram)) {\n silhouetteProgram = createSilhouetteProgram(model, program, frameState);\n silhouettePrograms[id] = silhouetteProgram;\n }\n\n var silhouetteUniformMap = combine(command.uniformMap, {\n gltf_silhouetteColor: createSilhouetteColorFunction(model),\n gltf_silhouetteSize: createSilhouetteSizeFunction(model),\n });\n\n silhouetteColorCommand.renderState = renderState;\n silhouetteColorCommand.shaderProgram = silhouetteProgram;\n silhouetteColorCommand.uniformMap = silhouetteUniformMap;\n silhouetteColorCommand.castShadows = false;\n silhouetteColorCommand.receiveShadows = false;\n nodeCommand.silhouetteColorCommand = silhouetteColorCommand;\n\n if (!scene3DOnly) {\n var command2D = nodeCommand.command2D;\n var silhouetteModelCommand2D = DrawCommand.shallowClone(\n silhouetteModelCommand\n );\n silhouetteModelCommand2D.boundingVolume = command2D.boundingVolume;\n silhouetteModelCommand2D.modelMatrix = command2D.modelMatrix;\n nodeCommand.silhouetteModelCommand2D = silhouetteModelCommand2D;\n\n var silhouetteColorCommand2D = DrawCommand.shallowClone(\n silhouetteColorCommand\n );\n silhouetteModelCommand2D.boundingVolume = command2D.boundingVolume;\n silhouetteModelCommand2D.modelMatrix = command2D.modelMatrix;\n nodeCommand.silhouetteColorCommand2D = silhouetteColorCommand2D;\n }\n }\n}\n\nfunction modifyShaderForClippingPlanes(\n shader,\n clippingPlaneCollection,\n context\n) {\n shader = ShaderSource.replaceMain(shader, \"gltf_clip_main\");\n shader += Model._getClippingFunction(clippingPlaneCollection, context) + \"\\n\";\n shader +=\n \"uniform sampler2D gltf_clippingPlanes; \\n\" +\n \"uniform mat4 gltf_clippingPlanesMatrix; \\n\" +\n \"uniform vec4 gltf_clippingPlanesEdgeStyle; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gltf_clip_main(); \\n\" +\n getClipAndStyleCode(\n \"gltf_clippingPlanes\",\n \"gltf_clippingPlanesMatrix\",\n \"gltf_clippingPlanesEdgeStyle\"\n ) +\n \"} \\n\";\n return shader;\n}\n\nfunction updateSilhouette(model, frameState, force) {\n // Generate silhouette commands when the silhouette size is greater than 0.0 and the alpha is greater than 0.0\n // There are two silhouette commands:\n // 1. silhouetteModelCommand : render model normally while enabling stencil mask\n // 2. silhouetteColorCommand : render enlarged model with a solid color while enabling stencil tests\n if (!hasSilhouette(model, frameState)) {\n return;\n }\n\n var nodeCommands = model._nodeCommands;\n var dirty =\n alphaDirty(model.color.alpha, model._colorPreviousAlpha) ||\n alphaDirty(\n model.silhouetteColor.alpha,\n model._silhouetteColorPreviousAlpha\n ) ||\n !defined(nodeCommands[0].silhouetteModelCommand);\n\n model._colorPreviousAlpha = model.color.alpha;\n model._silhouetteColorPreviousAlpha = model.silhouetteColor.alpha;\n\n if (dirty || force) {\n createSilhouetteCommands(model, frameState);\n }\n}\n\nfunction updateClippingPlanes(model, frameState) {\n var clippingPlanes = model._clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.owner === model) {\n if (clippingPlanes.enabled) {\n clippingPlanes.update(frameState);\n }\n }\n}\n\nvar scratchBoundingSphere = new BoundingSphere();\n\nfunction scaleInPixels(positionWC, radius, frameState) {\n scratchBoundingSphere.center = positionWC;\n scratchBoundingSphere.radius = radius;\n return frameState.camera.getPixelSize(\n scratchBoundingSphere,\n frameState.context.drawingBufferWidth,\n frameState.context.drawingBufferHeight\n );\n}\n\nvar scratchPosition = new Cartesian3();\nvar scratchCartographic = new Cartographic();\n\nfunction getScale(model, frameState) {\n var scale = model.scale;\n\n if (model.minimumPixelSize !== 0.0) {\n // Compute size of bounding sphere in pixels\n var context = frameState.context;\n var maxPixelSize = Math.max(\n context.drawingBufferWidth,\n context.drawingBufferHeight\n );\n var m = defined(model._clampedModelMatrix)\n ? model._clampedModelMatrix\n : model.modelMatrix;\n scratchPosition.x = m[12];\n scratchPosition.y = m[13];\n scratchPosition.z = m[14];\n\n if (defined(model._rtcCenter)) {\n Cartesian3.add(model._rtcCenter, scratchPosition, scratchPosition);\n }\n\n if (model._mode !== SceneMode.SCENE3D) {\n var projection = frameState.mapProjection;\n var cartographic = projection.ellipsoid.cartesianToCartographic(\n scratchPosition,\n scratchCartographic\n );\n projection.project(cartographic, scratchPosition);\n Cartesian3.fromElements(\n scratchPosition.z,\n scratchPosition.x,\n scratchPosition.y,\n scratchPosition\n );\n }\n\n var radius = model.boundingSphere.radius;\n var metersPerPixel = scaleInPixels(scratchPosition, radius, frameState);\n\n // metersPerPixel is always > 0.0\n var pixelsPerMeter = 1.0 / metersPerPixel;\n var diameterInPixels = Math.min(\n pixelsPerMeter * (2.0 * radius),\n maxPixelSize\n );\n\n // Maintain model's minimum pixel size\n if (diameterInPixels < model.minimumPixelSize) {\n scale =\n (model.minimumPixelSize * metersPerPixel) /\n (2.0 * model._initialRadius);\n }\n }\n\n return defined(model.maximumScale)\n ? Math.min(model.maximumScale, scale)\n : scale;\n}\n\nfunction releaseCachedGltf(model) {\n if (\n defined(model._cacheKey) &&\n defined(model._cachedGltf) &&\n --model._cachedGltf.count === 0\n ) {\n delete gltfCache[model._cacheKey];\n }\n model._cachedGltf = undefined;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction CachedRendererResources(context, cacheKey) {\n this.buffers = undefined;\n this.vertexArrays = undefined;\n this.programs = undefined;\n this.sourceShaders = undefined;\n this.silhouettePrograms = undefined;\n this.textures = undefined;\n this.samplers = undefined;\n this.renderStates = undefined;\n this.ready = false;\n\n this.context = context;\n this.cacheKey = cacheKey;\n this.count = 0;\n}\n\nfunction destroy(property) {\n for (var name in property) {\n if (property.hasOwnProperty(name)) {\n property[name].destroy();\n }\n }\n}\n\nfunction destroyCachedRendererResources(resources) {\n destroy(resources.buffers);\n destroy(resources.vertexArrays);\n destroy(resources.programs);\n destroy(resources.silhouettePrograms);\n destroy(resources.textures);\n}\n\nCachedRendererResources.prototype.release = function () {\n if (--this.count === 0) {\n if (defined(this.cacheKey)) {\n // Remove if this was cached\n delete this.context.cache.modelRendererResourceCache[this.cacheKey];\n }\n destroyCachedRendererResources(this);\n return destroyObject(this);\n }\n\n return undefined;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction getUpdateHeightCallback(model, ellipsoid, cartoPosition) {\n return function (clampedPosition) {\n if (model.heightReference === HeightReference.RELATIVE_TO_GROUND) {\n var clampedCart = ellipsoid.cartesianToCartographic(\n clampedPosition,\n scratchCartographic\n );\n clampedCart.height += cartoPosition.height;\n ellipsoid.cartographicToCartesian(clampedCart, clampedPosition);\n }\n\n var clampedModelMatrix = model._clampedModelMatrix;\n\n // Modify clamped model matrix to use new height\n Matrix4.clone(model.modelMatrix, clampedModelMatrix);\n clampedModelMatrix[12] = clampedPosition.x;\n clampedModelMatrix[13] = clampedPosition.y;\n clampedModelMatrix[14] = clampedPosition.z;\n\n model._heightChanged = true;\n };\n}\n\nfunction updateClamping(model) {\n if (defined(model._removeUpdateHeightCallback)) {\n model._removeUpdateHeightCallback();\n model._removeUpdateHeightCallback = undefined;\n }\n\n var scene = model._scene;\n if (\n !defined(scene) ||\n !defined(scene.globe) ||\n model.heightReference === HeightReference.NONE\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (model.heightReference !== HeightReference.NONE) {\n throw new DeveloperError(\n \"Height reference is not supported without a scene and globe.\"\n );\n }\n //>>includeEnd('debug');\n model._clampedModelMatrix = undefined;\n return;\n }\n\n var globe = scene.globe;\n var ellipsoid = globe.ellipsoid;\n\n // Compute cartographic position so we don't recompute every update\n var modelMatrix = model.modelMatrix;\n scratchPosition.x = modelMatrix[12];\n scratchPosition.y = modelMatrix[13];\n scratchPosition.z = modelMatrix[14];\n var cartoPosition = ellipsoid.cartesianToCartographic(scratchPosition);\n\n if (!defined(model._clampedModelMatrix)) {\n model._clampedModelMatrix = Matrix4.clone(modelMatrix, new Matrix4());\n }\n\n // Install callback to handle updating of terrain tiles\n var surface = globe._surface;\n model._removeUpdateHeightCallback = surface.updateHeight(\n cartoPosition,\n getUpdateHeightCallback(model, ellipsoid, cartoPosition)\n );\n\n // Set the correct height now\n var height = globe.getHeight(cartoPosition);\n if (defined(height)) {\n // Get callback with cartoPosition being the non-clamped position\n var cb = getUpdateHeightCallback(model, ellipsoid, cartoPosition);\n\n // Compute the clamped cartesian and call updateHeight callback\n Cartographic.clone(cartoPosition, scratchCartographic);\n scratchCartographic.height = height;\n ellipsoid.cartographicToCartesian(scratchCartographic, scratchPosition);\n cb(scratchPosition);\n }\n}\n\nvar scratchDisplayConditionCartesian = new Cartesian3();\nvar scratchDistanceDisplayConditionCartographic = new Cartographic();\n\nfunction distanceDisplayConditionVisible(model, frameState) {\n var distance2;\n var ddc = model.distanceDisplayCondition;\n var nearSquared = ddc.near * ddc.near;\n var farSquared = ddc.far * ddc.far;\n\n if (frameState.mode === SceneMode.SCENE2D) {\n var frustum2DWidth =\n frameState.camera.frustum.right - frameState.camera.frustum.left;\n distance2 = frustum2DWidth * 0.5;\n distance2 = distance2 * distance2;\n } else {\n // Distance to center of primitive's reference frame\n var position = Matrix4.getTranslation(\n model.modelMatrix,\n scratchDisplayConditionCartesian\n );\n if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var cartographic = ellipsoid.cartesianToCartographic(\n position,\n scratchDistanceDisplayConditionCartographic\n );\n position = projection.project(cartographic, position);\n Cartesian3.fromElements(position.z, position.x, position.y, position);\n }\n distance2 = Cartesian3.distanceSquared(\n position,\n frameState.camera.positionWC\n );\n }\n\n return distance2 >= nearSquared && distance2 <= farSquared;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} Failed to load external reference.\n */\nModel.prototype.update = function (frameState) {\n if (frameState.mode === SceneMode.MORPHING) {\n return;\n }\n\n if (!FeatureDetection.supportsWebP.initialized) {\n FeatureDetection.supportsWebP.initialize();\n return;\n }\n var supportsWebP = FeatureDetection.supportsWebP();\n\n var context = frameState.context;\n this._defaultTexture = context.defaultTexture;\n\n if (this._state === ModelState.NEEDS_LOAD && defined(this.gltf)) {\n // Use renderer resources from cache instead of loading/creating them?\n var cachedRendererResources;\n var cacheKey = this.cacheKey;\n if (defined(cacheKey)) {\n // cache key given? this model will pull from or contribute to context level cache\n context.cache.modelRendererResourceCache = defaultValue(\n context.cache.modelRendererResourceCache,\n {}\n );\n var modelCaches = context.cache.modelRendererResourceCache;\n\n cachedRendererResources = modelCaches[this.cacheKey];\n if (defined(cachedRendererResources)) {\n if (!cachedRendererResources.ready) {\n // Cached resources for the model are not loaded yet. We'll\n // try again every frame until they are.\n return;\n }\n\n ++cachedRendererResources.count;\n this._loadRendererResourcesFromCache = true;\n } else {\n cachedRendererResources = new CachedRendererResources(\n context,\n cacheKey\n );\n cachedRendererResources.count = 1;\n modelCaches[this.cacheKey] = cachedRendererResources;\n }\n this._cachedRendererResources = cachedRendererResources;\n } else {\n // cache key not given? this model doesn't care about context level cache at all. Cache is here to simplify freeing on destroy.\n cachedRendererResources = new CachedRendererResources(context);\n cachedRendererResources.count = 1;\n this._cachedRendererResources = cachedRendererResources;\n }\n\n this._state = ModelState.LOADING;\n if (this._state !== ModelState.FAILED) {\n var extensions = this.gltf.extensions;\n if (defined(extensions) && defined(extensions.CESIUM_RTC)) {\n var center = Cartesian3.fromArray(extensions.CESIUM_RTC.center);\n if (!Cartesian3.equals(center, Cartesian3.ZERO)) {\n this._rtcCenter3D = center;\n\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var cartographic = ellipsoid.cartesianToCartographic(\n this._rtcCenter3D\n );\n var projectedCart = projection.project(cartographic);\n Cartesian3.fromElements(\n projectedCart.z,\n projectedCart.x,\n projectedCart.y,\n projectedCart\n );\n this._rtcCenter2D = projectedCart;\n\n this._rtcCenterEye = new Cartesian3();\n this._rtcCenter = this._rtcCenter3D;\n }\n }\n\n addPipelineExtras(this.gltf);\n\n this._loadResources = new ModelLoadResources();\n if (!this._loadRendererResourcesFromCache) {\n // Buffers are required to updateVersion\n ModelUtility.parseBuffers(this, bufferLoad);\n }\n }\n }\n\n var loadResources = this._loadResources;\n var incrementallyLoadTextures = this._incrementallyLoadTextures;\n var justLoaded = false;\n\n if (this._state === ModelState.LOADING) {\n // Transition from LOADING -> LOADED once resources are downloaded and created.\n // Textures may continue to stream in while in the LOADED state.\n if (loadResources.pendingBufferLoads === 0) {\n if (!loadResources.initialized) {\n frameState.brdfLutGenerator.update(frameState);\n\n ModelUtility.checkSupportedExtensions(\n this.extensionsRequired,\n supportsWebP\n );\n ModelUtility.updateForwardAxis(this);\n\n // glTF pipeline updates, not needed if loading from cache\n if (!defined(this.gltf.extras.sourceVersion)) {\n var gltf = this.gltf;\n // Add the original version so it remains cached\n gltf.extras.sourceVersion = ModelUtility.getAssetVersion(gltf);\n gltf.extras.sourceKHRTechniquesWebGL = defined(\n ModelUtility.getUsedExtensions(gltf).KHR_techniques_webgl\n );\n\n this._sourceVersion = gltf.extras.sourceVersion;\n this._sourceKHRTechniquesWebGL = gltf.extras.sourceKHRTechniquesWebGL;\n\n updateVersion(gltf);\n addDefaults(gltf);\n\n var options = {\n addBatchIdToGeneratedShaders: this._addBatchIdToGeneratedShaders,\n };\n\n processModelMaterialsCommon(gltf, options);\n processPbrMaterials(gltf, options);\n }\n\n this._sourceVersion = this.gltf.extras.sourceVersion;\n this._sourceKHRTechniquesWebGL = this.gltf.extras.sourceKHRTechniquesWebGL;\n\n // Skip dequantizing in the shader if not encoded\n this._dequantizeInShader =\n this._dequantizeInShader && DracoLoader.hasExtension(this);\n\n // We do this after to make sure that the ids don't change\n addBuffersToLoadResources(this);\n parseArticulations(this);\n parseTechniques(this);\n if (!this._loadRendererResourcesFromCache) {\n parseBufferViews(this);\n parseShaders(this);\n parsePrograms(this);\n parseTextures(this, context, supportsWebP);\n }\n parseMaterials(this);\n parseMeshes(this);\n parseNodes(this);\n\n // Start draco decoding\n DracoLoader.parse(this, context);\n\n loadResources.initialized = true;\n }\n\n if (!loadResources.finishedDecoding()) {\n DracoLoader.decodeModel(this, context).otherwise(\n ModelUtility.getFailedLoadFunction(this, \"model\", this.basePath)\n );\n }\n\n if (loadResources.finishedDecoding() && !loadResources.resourcesParsed) {\n this._boundingSphere = ModelUtility.computeBoundingSphere(this);\n this._initialRadius = this._boundingSphere.radius;\n\n DracoLoader.cacheDataForModel(this);\n\n loadResources.resourcesParsed = true;\n }\n\n if (\n loadResources.resourcesParsed &&\n loadResources.pendingShaderLoads === 0\n ) {\n ModelOutlineLoader.outlinePrimitives(this);\n createResources(this, frameState);\n }\n }\n\n if (\n loadResources.finished() ||\n (incrementallyLoadTextures &&\n loadResources.finishedEverythingButTextureCreation())\n ) {\n this._state = ModelState.LOADED;\n justLoaded = true;\n }\n }\n\n // Incrementally stream textures.\n if (defined(loadResources) && this._state === ModelState.LOADED) {\n if (incrementallyLoadTextures && !justLoaded) {\n createResources(this, frameState);\n }\n\n if (loadResources.finished()) {\n this._loadResources = undefined; // Clear CPU memory since WebGL resources were created.\n\n var resources = this._rendererResources;\n var cachedResources = this._cachedRendererResources;\n\n cachedResources.buffers = resources.buffers;\n cachedResources.vertexArrays = resources.vertexArrays;\n cachedResources.programs = resources.programs;\n cachedResources.sourceShaders = resources.sourceShaders;\n cachedResources.silhouettePrograms = resources.silhouettePrograms;\n cachedResources.textures = resources.textures;\n cachedResources.samplers = resources.samplers;\n cachedResources.renderStates = resources.renderStates;\n cachedResources.ready = true;\n\n // The normal attribute name is required for silhouettes, so get it before the gltf JSON is released\n this._normalAttributeName = ModelUtility.getAttributeOrUniformBySemantic(\n this.gltf,\n \"NORMAL\"\n );\n\n // Vertex arrays are unique to this model, do not store in cache.\n if (defined(this._precreatedAttributes)) {\n cachedResources.vertexArrays = {};\n }\n\n if (this.releaseGltfJson) {\n releaseCachedGltf(this);\n }\n }\n }\n\n var iblSupported = OctahedralProjectedCubeMap.isSupported(context);\n if (this._shouldUpdateSpecularMapAtlas && iblSupported) {\n this._shouldUpdateSpecularMapAtlas = false;\n this._specularEnvironmentMapAtlas =\n this._specularEnvironmentMapAtlas &&\n this._specularEnvironmentMapAtlas.destroy();\n this._specularEnvironmentMapAtlas = undefined;\n if (defined(this._specularEnvironmentMaps)) {\n this._specularEnvironmentMapAtlas = new OctahedralProjectedCubeMap(\n this._specularEnvironmentMaps\n );\n var that = this;\n this._specularEnvironmentMapAtlas.readyPromise\n .then(function () {\n that._shouldRegenerateShaders = true;\n })\n .otherwise(function (error) {\n console.error(\"Error loading specularEnvironmentMaps: \" + error);\n });\n }\n\n // Regenerate shaders to not use an environment map. Will be set to true again if there was a new environment map and it is ready.\n this._shouldRegenerateShaders = true;\n }\n\n if (defined(this._specularEnvironmentMapAtlas)) {\n this._specularEnvironmentMapAtlas.update(frameState);\n }\n\n var recompileWithDefaultAtlas =\n !defined(this._specularEnvironmentMapAtlas) &&\n defined(frameState.specularEnvironmentMaps) &&\n !this._useDefaultSpecularMaps;\n var recompileWithoutDefaultAtlas =\n !defined(frameState.specularEnvironmentMaps) &&\n this._useDefaultSpecularMaps;\n\n var recompileWithDefaultSHCoeffs =\n !defined(this._sphericalHarmonicCoefficients) &&\n defined(frameState.sphericalHarmonicCoefficients) &&\n !this._useDefaultSphericalHarmonics;\n var recompileWithoutDefaultSHCoeffs =\n !defined(frameState.sphericalHarmonicCoefficients) &&\n this._useDefaultSphericalHarmonics;\n\n this._shouldRegenerateShaders =\n this._shouldRegenerateShaders ||\n recompileWithDefaultAtlas ||\n recompileWithoutDefaultAtlas ||\n recompileWithDefaultSHCoeffs ||\n recompileWithoutDefaultSHCoeffs;\n\n this._useDefaultSpecularMaps =\n !defined(this._specularEnvironmentMapAtlas) &&\n defined(frameState.specularEnvironmentMaps);\n this._useDefaultSphericalHarmonics =\n !defined(this._sphericalHarmonicCoefficients) &&\n defined(frameState.sphericalHarmonicCoefficients);\n\n var silhouette = hasSilhouette(this, frameState);\n var translucent = isTranslucent(this);\n var invisible = isInvisible(this);\n var backFaceCulling = this.backFaceCulling;\n var displayConditionPassed = defined(this.distanceDisplayCondition)\n ? distanceDisplayConditionVisible(this, frameState)\n : true;\n var show =\n this.show &&\n displayConditionPassed &&\n this.scale !== 0.0 &&\n (!invisible || silhouette);\n\n if ((show && this._state === ModelState.LOADED) || justLoaded) {\n var animated =\n this.activeAnimations.update(frameState) || this._cesiumAnimationsDirty;\n this._cesiumAnimationsDirty = false;\n this._dirty = false;\n var modelMatrix = this.modelMatrix;\n\n var modeChanged = frameState.mode !== this._mode;\n this._mode = frameState.mode;\n\n // Model's model matrix needs to be updated\n var modelTransformChanged =\n !Matrix4.equals(this._modelMatrix, modelMatrix) ||\n this._scale !== this.scale ||\n this._minimumPixelSize !== this.minimumPixelSize ||\n this.minimumPixelSize !== 0.0 || // Minimum pixel size changed or is enabled\n this._maximumScale !== this.maximumScale ||\n this._heightReference !== this.heightReference ||\n this._heightChanged ||\n modeChanged;\n\n if (modelTransformChanged || justLoaded) {\n Matrix4.clone(modelMatrix, this._modelMatrix);\n\n updateClamping(this);\n\n if (defined(this._clampedModelMatrix)) {\n modelMatrix = this._clampedModelMatrix;\n }\n\n this._scale = this.scale;\n this._minimumPixelSize = this.minimumPixelSize;\n this._maximumScale = this.maximumScale;\n this._heightReference = this.heightReference;\n this._heightChanged = false;\n\n var scale = getScale(this, frameState);\n var computedModelMatrix = this._computedModelMatrix;\n Matrix4.multiplyByUniformScale(modelMatrix, scale, computedModelMatrix);\n if (this._upAxis === Axis.Y) {\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n Axis.Y_UP_TO_Z_UP,\n computedModelMatrix\n );\n } else if (this._upAxis === Axis.X) {\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n Axis.X_UP_TO_Z_UP,\n computedModelMatrix\n );\n }\n if (this.forwardAxis === Axis.Z) {\n // glTF 2.0 has a Z-forward convention that must be adapted here to X-forward.\n Matrix4.multiplyTransformation(\n computedModelMatrix,\n Axis.Z_UP_TO_X_UP,\n computedModelMatrix\n );\n }\n }\n\n // Update modelMatrix throughout the graph as needed\n if (animated || modelTransformChanged || justLoaded) {\n updateNodeHierarchyModelMatrix(\n this,\n modelTransformChanged,\n justLoaded,\n frameState.mapProjection\n );\n this._dirty = true;\n\n if (animated || justLoaded) {\n // Apply skins if animation changed any node transforms\n applySkins(this);\n }\n }\n\n if (this._perNodeShowDirty) {\n this._perNodeShowDirty = false;\n updatePerNodeShow(this);\n }\n updatePickIds(this, context);\n updateWireframe(this);\n updateShowBoundingVolume(this);\n updateShadows(this);\n updateClippingPlanes(this, frameState);\n\n // Regenerate shaders if ClippingPlaneCollection state changed or it was removed\n var clippingPlanes = this._clippingPlanes;\n var currentClippingPlanesState = 0;\n var useClippingPlanes =\n defined(clippingPlanes) &&\n clippingPlanes.enabled &&\n clippingPlanes.length > 0;\n var usesSH =\n defined(this._sphericalHarmonicCoefficients) ||\n this._useDefaultSphericalHarmonics;\n var usesSM =\n (defined(this._specularEnvironmentMapAtlas) &&\n this._specularEnvironmentMapAtlas.ready) ||\n this._useDefaultSpecularMaps;\n if (useClippingPlanes || usesSH || usesSM) {\n var clippingPlanesOriginMatrix = defaultValue(\n this.clippingPlanesOriginMatrix,\n modelMatrix\n );\n Matrix4.multiply(\n context.uniformState.view3D,\n clippingPlanesOriginMatrix,\n this._clippingPlaneModelViewMatrix\n );\n }\n\n if (useClippingPlanes) {\n currentClippingPlanesState = clippingPlanes.clippingPlanesState;\n }\n\n var shouldRegenerateShaders = this._shouldRegenerateShaders;\n shouldRegenerateShaders =\n shouldRegenerateShaders ||\n this._clippingPlanesState !== currentClippingPlanesState;\n this._clippingPlanesState = currentClippingPlanesState;\n\n // Regenerate shaders if color shading changed from last update\n var currentlyColorShadingEnabled = isColorShadingEnabled(this);\n if (currentlyColorShadingEnabled !== this._colorShadingEnabled) {\n this._colorShadingEnabled = currentlyColorShadingEnabled;\n shouldRegenerateShaders = true;\n }\n\n if (shouldRegenerateShaders) {\n regenerateShaders(this, frameState);\n } else {\n updateColor(this, frameState, false);\n updateBackFaceCulling(this, frameState, false);\n updateSilhouette(this, frameState, false);\n }\n }\n\n if (justLoaded) {\n // Called after modelMatrix update.\n var model = this;\n frameState.afterRender.push(function () {\n model._ready = true;\n model._readyPromise.resolve(model);\n });\n return;\n }\n\n // We don't check show at the top of the function since we\n // want to be able to progressively load models when they are not shown,\n // and then have them visible immediately when show is set to true.\n if (show && !this._ignoreCommands) {\n // PERFORMANCE_IDEA: This is terrible\n var commandList = frameState.commandList;\n var passes = frameState.passes;\n var nodeCommands = this._nodeCommands;\n var length = nodeCommands.length;\n var i;\n var nc;\n\n var idl2D =\n frameState.mapProjection.ellipsoid.maximumRadius * CesiumMath.PI;\n var boundingVolume;\n\n if (passes.render || (passes.pick && this.allowPicking)) {\n for (i = 0; i < length; ++i) {\n nc = nodeCommands[i];\n if (nc.show) {\n var command = nc.command;\n if (silhouette) {\n command = nc.silhouetteModelCommand;\n } else if (translucent) {\n command = nc.translucentCommand;\n } else if (!backFaceCulling) {\n command = nc.disableCullingCommand;\n }\n commandList.push(command);\n boundingVolume = nc.command.boundingVolume;\n if (\n frameState.mode === SceneMode.SCENE2D &&\n (boundingVolume.center.y + boundingVolume.radius > idl2D ||\n boundingVolume.center.y - boundingVolume.radius < idl2D)\n ) {\n var command2D = nc.command2D;\n if (silhouette) {\n command2D = nc.silhouetteModelCommand2D;\n } else if (translucent) {\n command2D = nc.translucentCommand2D;\n } else if (!backFaceCulling) {\n command2D = nc.disableCullingCommand2D;\n }\n commandList.push(command2D);\n }\n }\n }\n\n if (silhouette && !passes.pick) {\n // Render second silhouette pass\n for (i = 0; i < length; ++i) {\n nc = nodeCommands[i];\n if (nc.show) {\n commandList.push(nc.silhouetteColorCommand);\n boundingVolume = nc.command.boundingVolume;\n if (\n frameState.mode === SceneMode.SCENE2D &&\n (boundingVolume.center.y + boundingVolume.radius > idl2D ||\n boundingVolume.center.y - boundingVolume.radius < idl2D)\n ) {\n commandList.push(nc.silhouetteColorCommand2D);\n }\n }\n }\n }\n }\n }\n\n var credit = this._credit;\n if (defined(credit)) {\n frameState.creditDisplay.addCredit(credit);\n }\n\n var resourceCredits = this._resourceCredits;\n var creditCount = resourceCredits.length;\n for (var c = 0; c < creditCount; c++) {\n frameState.creditDisplay.addCredit(resourceCredits[c]);\n }\n};\n\nfunction destroyIfNotCached(rendererResources, cachedRendererResources) {\n if (rendererResources.programs !== cachedRendererResources.programs) {\n destroy(rendererResources.programs);\n }\n if (\n rendererResources.silhouettePrograms !==\n cachedRendererResources.silhouettePrograms\n ) {\n destroy(rendererResources.silhouettePrograms);\n }\n}\n\n// Run from update iff:\n// - everything is loaded\n// - clipping planes state change OR color state set\n// Run this from destructor after removing color state and clipping plane state\nfunction regenerateShaders(model, frameState) {\n // In regards to _cachedRendererResources:\n // Fair to assume that this is data that should just never get modified due to clipping planes or model color.\n // So if clipping planes or model color active:\n // - delink _rendererResources.*programs and create new dictionaries.\n // - do NOT destroy any programs - might be used by copies of the model or by might be needed in the future if clipping planes/model color is deactivated\n\n // If clipping planes and model color inactive:\n // - destroy _rendererResources.*programs\n // - relink _rendererResources.*programs to _cachedRendererResources\n\n // In both cases, need to mark commands as dirty, re-run derived commands (elsewhere)\n\n var rendererResources = model._rendererResources;\n var cachedRendererResources = model._cachedRendererResources;\n destroyIfNotCached(rendererResources, cachedRendererResources);\n\n var programId;\n if (\n isClippingEnabled(model) ||\n isColorShadingEnabled(model) ||\n model._shouldRegenerateShaders\n ) {\n model._shouldRegenerateShaders = false;\n\n rendererResources.programs = {};\n rendererResources.silhouettePrograms = {};\n\n var visitedPrograms = {};\n var techniques = model._sourceTechniques;\n var technique;\n\n for (var techniqueId in techniques) {\n if (techniques.hasOwnProperty(techniqueId)) {\n technique = techniques[techniqueId];\n programId = technique.program;\n if (!visitedPrograms[programId]) {\n visitedPrograms[programId] = true;\n recreateProgram(\n {\n programId: programId,\n techniqueId: techniqueId,\n },\n model,\n frameState.context\n );\n }\n }\n }\n } else {\n rendererResources.programs = cachedRendererResources.programs;\n rendererResources.silhouettePrograms =\n cachedRendererResources.silhouettePrograms;\n }\n\n // Fix all the commands, marking them as dirty so everything that derives will re-derive\n var rendererPrograms = rendererResources.programs;\n\n var nodeCommands = model._nodeCommands;\n var commandCount = nodeCommands.length;\n for (var i = 0; i < commandCount; ++i) {\n var nodeCommand = nodeCommands[i];\n programId = nodeCommand.programId;\n\n var renderProgram = rendererPrograms[programId];\n nodeCommand.command.shaderProgram = renderProgram;\n if (defined(nodeCommand.command2D)) {\n nodeCommand.command2D.shaderProgram = renderProgram;\n }\n }\n\n // Force update silhouette commands/shaders\n updateColor(model, frameState, true);\n updateBackFaceCulling(model, frameState, true);\n updateSilhouette(model, frameState, true);\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Model#destroy\n */\nModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * model = model && model.destroy();\n *\n * @see Model#isDestroyed\n */\nModel.prototype.destroy = function () {\n // Vertex arrays are unique to this model, destroy here.\n if (defined(this._precreatedAttributes)) {\n destroy(this._rendererResources.vertexArrays);\n }\n\n if (defined(this._removeUpdateHeightCallback)) {\n this._removeUpdateHeightCallback();\n this._removeUpdateHeightCallback = undefined;\n }\n\n if (defined(this._terrainProviderChangedCallback)) {\n this._terrainProviderChangedCallback();\n this._terrainProviderChangedCallback = undefined;\n }\n\n // Shaders modified for clipping and for color don't get cached, so destroy these manually\n if (defined(this._cachedRendererResources)) {\n destroyIfNotCached(this._rendererResources, this._cachedRendererResources);\n }\n\n this._rendererResources = undefined;\n this._cachedRendererResources =\n this._cachedRendererResources && this._cachedRendererResources.release();\n DracoLoader.destroyCachedDataForModel(this);\n\n var pickIds = this._pickIds;\n var length = pickIds.length;\n for (var i = 0; i < length; ++i) {\n pickIds[i].destroy();\n }\n\n releaseCachedGltf(this);\n this._quantizedVertexShaders = undefined;\n\n // Only destroy the ClippingPlaneCollection if this is the owner - if this model is part of a Cesium3DTileset,\n // _clippingPlanes references a ClippingPlaneCollection that this model does not own.\n var clippingPlaneCollection = this._clippingPlanes;\n if (\n defined(clippingPlaneCollection) &&\n !clippingPlaneCollection.isDestroyed() &&\n clippingPlaneCollection.owner === this\n ) {\n clippingPlaneCollection.destroy();\n }\n this._clippingPlanes = undefined;\n\n this._specularEnvironmentMapAtlas =\n this._specularEnvironmentMapAtlas &&\n this._specularEnvironmentMapAtlas.destroy();\n\n return destroyObject(this);\n};\n\n// exposed for testing\nModel._getClippingFunction = getClippingFunction;\nModel._modifyShaderForColor = modifyShaderForColor;\nexport default Model;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport Axis from \"./Axis.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport ClassificationModel from \"./ClassificationModel.js\";\nimport Model from \"./Model.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport ModelAnimationLoop from \"./ModelAnimationLoop.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel|Batched 3D Model}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Batched3DModel3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Batched3DModel3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._model = undefined;\n this._batchTable = undefined;\n this._features = undefined;\n\n // Populate from gltf when available\n this._batchIdAttributeName = undefined;\n this._diffuseAttributeOrUniformName = {};\n\n this._rtcCenterTransform = undefined;\n this._contentModelMatrix = undefined;\n\n this.featurePropertiesDirty = false;\n\n initialize(this, arrayBuffer, byteOffset);\n}\n\n// This can be overridden for testing purposes\nBatched3DModel3DTileContent._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Batched3DModel3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return this._batchTable.featuresLength;\n },\n },\n\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n return this._model.trianglesLength;\n },\n },\n\n geometryByteLength: {\n get: function () {\n return this._model.geometryByteLength;\n },\n },\n\n texturesByteLength: {\n get: function () {\n return this._model.texturesByteLength;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return this._batchTable.memorySizeInBytes;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._model.readyPromise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return this._batchTable;\n },\n },\n});\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction getBatchIdAttributeName(gltf) {\n var batchIdAttributeName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"_BATCHID\"\n );\n if (!defined(batchIdAttributeName)) {\n batchIdAttributeName = ModelUtility.getAttributeOrUniformBySemantic(\n gltf,\n \"BATCHID\"\n );\n if (defined(batchIdAttributeName)) {\n Batched3DModel3DTileContent._deprecationWarning(\n \"b3dm-legacy-batchid\",\n \"The glTF in this b3dm uses the semantic `BATCHID`. Application-specific semantics should be prefixed with an underscore: `_BATCHID`.\"\n );\n }\n }\n return batchIdAttributeName;\n}\n\nfunction getVertexShaderCallback(content) {\n return function (vs, programId) {\n var batchTable = content._batchTable;\n var handleTranslucent = !defined(content._tileset.classificationType);\n\n var gltf = content._model.gltf;\n if (defined(gltf)) {\n content._batchIdAttributeName = getBatchIdAttributeName(gltf);\n content._diffuseAttributeOrUniformName[\n programId\n ] = ModelUtility.getDiffuseAttributeOrUniform(gltf, programId);\n }\n\n var callback = batchTable.getVertexShaderCallback(\n handleTranslucent,\n content._batchIdAttributeName,\n content._diffuseAttributeOrUniformName[programId]\n );\n return defined(callback) ? callback(vs) : vs;\n };\n}\n\nfunction getFragmentShaderCallback(content) {\n return function (fs, programId) {\n var batchTable = content._batchTable;\n var handleTranslucent = !defined(content._tileset.classificationType);\n\n var gltf = content._model.gltf;\n if (defined(gltf)) {\n content._diffuseAttributeOrUniformName[\n programId\n ] = ModelUtility.getDiffuseAttributeOrUniform(gltf, programId);\n }\n var callback = batchTable.getFragmentShaderCallback(\n handleTranslucent,\n content._diffuseAttributeOrUniformName[programId]\n );\n return defined(callback) ? callback(fs) : fs;\n };\n}\n\nfunction getPickIdCallback(content) {\n return function () {\n return content._batchTable.getPickId();\n };\n}\n\nfunction getClassificationFragmentShaderCallback(content) {\n return function (fs) {\n var batchTable = content._batchTable;\n var callback = batchTable.getClassificationFragmentShaderCallback();\n return defined(callback) ? callback(fs) : fs;\n };\n}\n\nfunction createColorChangedCallback(content) {\n return function (batchId, color) {\n content._model.updateCommands(batchId, color);\n };\n}\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n var tileset = content._tileset;\n var tile = content._tile;\n var resource = content._resource;\n\n var byteStart = defaultValue(byteOffset, 0);\n byteOffset = byteStart;\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Batched 3D Model version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var byteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchLength;\n\n // Legacy header #1: [batchLength] [batchTableByteLength]\n // Legacy header #2: [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]\n // Current header: [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength]\n // If the header is in the first legacy format 'batchTableJsonByteLength' will be the start of the JSON string (a quotation mark) or the glTF magic.\n // Accordingly its first byte will be either 0x22 or 0x67, and so the minimum uint32 expected is 0x22000000 = 570425344 = 570MB. It is unlikely that the feature table JSON will exceed this length.\n // The check for the second legacy format is similar, except it checks 'batchTableBinaryByteLength' instead\n if (batchTableJsonByteLength >= 570425344) {\n // First legacy check\n byteOffset -= sizeOfUint32 * 2;\n batchLength = featureTableJsonByteLength;\n batchTableJsonByteLength = featureTableBinaryByteLength;\n batchTableBinaryByteLength = 0;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n Batched3DModel3DTileContent._deprecationWarning(\n \"b3dm-legacy-header\",\n \"This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.\"\n );\n } else if (batchTableBinaryByteLength >= 570425344) {\n // Second legacy check\n byteOffset -= sizeOfUint32;\n batchLength = batchTableJsonByteLength;\n batchTableJsonByteLength = featureTableJsonByteLength;\n batchTableBinaryByteLength = featureTableBinaryByteLength;\n featureTableJsonByteLength = 0;\n featureTableBinaryByteLength = 0;\n Batched3DModel3DTileContent._deprecationWarning(\n \"b3dm-legacy-header\",\n \"This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel.\"\n );\n }\n\n var featureTableJson;\n if (featureTableJsonByteLength === 0) {\n featureTableJson = {\n BATCH_LENGTH: defaultValue(batchLength, 0),\n };\n } else {\n var featureTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n featureTableJsonByteLength\n );\n featureTableJson = JSON.parse(featureTableString);\n byteOffset += featureTableJsonByteLength;\n }\n\n var featureTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n featureTableBinaryByteLength\n );\n byteOffset += featureTableBinaryByteLength;\n\n var featureTable = new Cesium3DTileFeatureTable(\n featureTableJson,\n featureTableBinary\n );\n\n batchLength = featureTable.getGlobalProperty(\"BATCH_LENGTH\");\n featureTable.featuresLength = batchLength;\n\n var batchTableJson;\n var batchTableBinary;\n if (batchTableJsonByteLength > 0) {\n // PERFORMANCE_IDEA: is it possible to allocate this on-demand? Perhaps keep the\n // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n //\n // We could also make another request for it, but that would make the property set/get\n // API async, and would double the number of numbers in some cases.\n var batchTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n batchTableJsonByteLength\n );\n batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJsonByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n batchTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n batchTableBinaryByteLength\n );\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n var colorChangedCallback;\n if (defined(tileset.classificationType)) {\n colorChangedCallback = createColorChangedCallback(content);\n }\n\n var batchTable = new Cesium3DTileBatchTable(\n content,\n batchLength,\n batchTableJson,\n batchTableBinary,\n colorChangedCallback\n );\n content._batchTable = batchTable;\n\n var gltfByteLength = byteStart + byteLength - byteOffset;\n if (gltfByteLength === 0) {\n throw new RuntimeError(\"glTF byte length must be greater than 0.\");\n }\n\n var gltfView;\n if (byteOffset % 4 === 0) {\n gltfView = new Uint8Array(arrayBuffer, byteOffset, gltfByteLength);\n } else {\n // Create a copy of the glb so that it is 4-byte aligned\n Batched3DModel3DTileContent._deprecationWarning(\n \"b3dm-glb-unaligned\",\n \"The embedded glb is not aligned to a 4-byte boundary.\"\n );\n gltfView = new Uint8Array(\n uint8Array.subarray(byteOffset, byteOffset + gltfByteLength)\n );\n }\n\n var pickObject = {\n content: content,\n primitive: tileset,\n };\n\n content._rtcCenterTransform = Matrix4.IDENTITY;\n var rtcCenter = featureTable.getGlobalProperty(\n \"RTC_CENTER\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (defined(rtcCenter)) {\n content._rtcCenterTransform = Matrix4.fromTranslation(\n Cartesian3.fromArray(rtcCenter)\n );\n }\n\n content._contentModelMatrix = Matrix4.multiply(\n tile.computedTransform,\n content._rtcCenterTransform,\n new Matrix4()\n );\n\n if (!defined(tileset.classificationType)) {\n // PERFORMANCE_IDEA: patch the shader on demand, e.g., the first time show/color changes.\n // The pick shader still needs to be patched.\n content._model = new Model({\n gltf: gltfView,\n cull: false, // The model is already culled by 3D Tiles\n releaseGltfJson: true, // Models are unique and will not benefit from caching so save memory\n opaquePass: Pass.CESIUM_3D_TILE, // Draw opaque portions of the model during the 3D Tiles pass\n basePath: resource,\n requestType: RequestType.TILES3D,\n modelMatrix: content._contentModelMatrix,\n upAxis: tileset._gltfUpAxis,\n forwardAxis: Axis.X,\n shadows: tileset.shadows,\n debugWireframe: tileset.debugWireframe,\n incrementallyLoadTextures: false,\n vertexShaderLoaded: getVertexShaderCallback(content),\n fragmentShaderLoaded: getFragmentShaderCallback(content),\n uniformMapLoaded: batchTable.getUniformMapCallback(),\n pickIdLoaded: getPickIdCallback(content),\n addBatchIdToGeneratedShaders: batchLength > 0, // If the batch table has values in it, generated shaders will need a batchId attribute\n pickObject: pickObject,\n imageBasedLightingFactor: tileset.imageBasedLightingFactor,\n lightColor: tileset.lightColor,\n luminanceAtZenith: tileset.luminanceAtZenith,\n sphericalHarmonicCoefficients: tileset.sphericalHarmonicCoefficients,\n specularEnvironmentMaps: tileset.specularEnvironmentMaps,\n backFaceCulling: tileset.backFaceCulling,\n });\n content._model.readyPromise.then(function (model) {\n model.activeAnimations.addAll({\n loop: ModelAnimationLoop.REPEAT,\n });\n });\n } else {\n // This transcodes glTF to an internal representation for geometry so we can take advantage of the re-batching of vector data.\n // For a list of limitations on the input glTF, see the documentation for classificationType of Cesium3DTileset.\n content._model = new ClassificationModel({\n gltf: gltfView,\n cull: false, // The model is already culled by 3D Tiles\n basePath: resource,\n requestType: RequestType.TILES3D,\n modelMatrix: content._contentModelMatrix,\n upAxis: tileset._gltfUpAxis,\n forwardAxis: Axis.X,\n debugWireframe: tileset.debugWireframe,\n vertexShaderLoaded: getVertexShaderCallback(content),\n classificationShaderLoaded: getClassificationFragmentShaderCallback(\n content\n ),\n uniformMapLoaded: batchTable.getUniformMapCallback(),\n pickIdLoaded: getPickIdCallback(content),\n classificationType: tileset._classificationType,\n batchTable: batchTable,\n });\n }\n}\n\nfunction createFeatures(content) {\n var featuresLength = content.featuresLength;\n if (!defined(content._features) && featuresLength > 0) {\n var features = new Array(featuresLength);\n for (var i = 0; i < featuresLength; ++i) {\n features[i] = new Cesium3DTileFeature(content, i);\n }\n content._features = features;\n }\n}\n\nBatched3DModel3DTileContent.prototype.hasProperty = function (batchId, name) {\n return this._batchTable.hasProperty(batchId, name);\n};\n\nBatched3DModel3DTileContent.prototype.getFeature = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n var featuresLength = this.featuresLength;\n if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n (featuresLength - 1) +\n \").\"\n );\n }\n //>>includeEnd('debug');\n\n createFeatures(this);\n return this._features[batchId];\n};\n\nBatched3DModel3DTileContent.prototype.applyDebugSettings = function (\n enabled,\n color\n) {\n color = enabled ? color : Color.WHITE;\n if (this.featuresLength === 0) {\n this._model.color = color;\n } else {\n this._batchTable.setAllColor(color);\n }\n};\n\nBatched3DModel3DTileContent.prototype.applyStyle = function (style) {\n if (this.featuresLength === 0) {\n var hasColorStyle = defined(style) && defined(style.color);\n var hasShowStyle = defined(style) && defined(style.show);\n this._model.color = hasColorStyle\n ? style.color.evaluateColor(undefined, this._model.color)\n : Color.clone(Color.WHITE, this._model.color);\n this._model.show = hasShowStyle ? style.show.evaluate(undefined) : true;\n } else {\n this._batchTable.applyStyle(style);\n }\n};\n\nBatched3DModel3DTileContent.prototype.update = function (tileset, frameState) {\n var commandStart = frameState.commandList.length;\n\n // In the PROCESSING state we may be calling update() to move forward\n // the content's resource loading. In the READY state, it will\n // actually generate commands.\n this._batchTable.update(tileset, frameState);\n\n this._contentModelMatrix = Matrix4.multiply(\n this._tile.computedTransform,\n this._rtcCenterTransform,\n this._contentModelMatrix\n );\n this._model.modelMatrix = this._contentModelMatrix;\n\n this._model.shadows = this._tileset.shadows;\n this._model.imageBasedLightingFactor = this._tileset.imageBasedLightingFactor;\n this._model.lightColor = this._tileset.lightColor;\n this._model.luminanceAtZenith = this._tileset.luminanceAtZenith;\n this._model.sphericalHarmonicCoefficients = this._tileset.sphericalHarmonicCoefficients;\n this._model.specularEnvironmentMaps = this._tileset.specularEnvironmentMaps;\n this._model.backFaceCulling = this._tileset.backFaceCulling;\n this._model.debugWireframe = this._tileset.debugWireframe;\n\n // Update clipping planes\n var tilesetClippingPlanes = this._tileset.clippingPlanes;\n this._model.clippingPlanesOriginMatrix = this._tileset.clippingPlanesOriginMatrix;\n if (defined(tilesetClippingPlanes) && this._tile.clippingPlanesDirty) {\n // Dereference the clipping planes from the model if they are irrelevant.\n // Link/Dereference directly to avoid ownership checks.\n // This will also trigger synchronous shader regeneration to remove or add the clipping plane and color blending code.\n this._model._clippingPlanes =\n tilesetClippingPlanes.enabled && this._tile._isClipped\n ? tilesetClippingPlanes\n : undefined;\n }\n\n // If the model references a different ClippingPlaneCollection due to the tileset's collection being replaced with a\n // ClippingPlaneCollection that gives this tile the same clipping status, update the model to use the new ClippingPlaneCollection.\n if (\n defined(tilesetClippingPlanes) &&\n defined(this._model._clippingPlanes) &&\n this._model._clippingPlanes !== tilesetClippingPlanes\n ) {\n this._model._clippingPlanes = tilesetClippingPlanes;\n }\n\n this._model.update(frameState);\n\n // If any commands were pushed, add derived commands\n var commandEnd = frameState.commandList.length;\n if (\n commandStart < commandEnd &&\n (frameState.passes.render || frameState.passes.pick) &&\n !defined(tileset.classificationType)\n ) {\n this._batchTable.addDerivedCommands(frameState, commandStart);\n }\n};\n\nBatched3DModel3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nBatched3DModel3DTileContent.prototype.destroy = function () {\n this._model = this._model && this._model.destroy();\n this._batchTable = this._batchTable && this._batchTable.destroy();\n return destroyObject(this);\n};\nexport default Batched3DModel3DTileContent;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Composite|Composite}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Composite3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Composite3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset,\n factory\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._contents = [];\n this._readyPromise = when.defer();\n\n initialize(this, arrayBuffer, byteOffset, factory);\n}\n\nObject.defineProperties(Composite3DTileContent.prototype, {\n featurePropertiesDirty: {\n get: function () {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n if (contents[i].featurePropertiesDirty) {\n return true;\n }\n }\n\n return false;\n },\n set: function (value) {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n contents[i].featurePropertiesDirty = value;\n }\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>featuresLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n featuresLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>pointsLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>trianglesLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n trianglesLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>geometryByteLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n geometryByteLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>texturesByteLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>0</code>. Instead call <code>batchTableByteLength</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n batchTableByteLength: {\n get: function () {\n return 0;\n },\n },\n\n innerContents: {\n get: function () {\n return this._contents;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n /**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>undefined</code>. Instead call <code>batchTable</code> for a tile in the composite.\n * @memberof Composite3DTileContent.prototype\n */\n batchTable: {\n get: function () {\n return undefined;\n },\n },\n});\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction initialize(content, arrayBuffer, byteOffset, factory) {\n byteOffset = defaultValue(byteOffset, 0);\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Composite Tile version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n // Skip byteLength\n byteOffset += sizeOfUint32;\n\n var tilesLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var contentPromises = [];\n\n for (var i = 0; i < tilesLength; ++i) {\n var tileType = getMagic(uint8Array, byteOffset);\n\n // Tile byte length is stored after magic and version\n var tileByteLength = view.getUint32(byteOffset + sizeOfUint32 * 2, true);\n\n var contentFactory = factory[tileType];\n\n if (defined(contentFactory)) {\n var innerContent = contentFactory(\n content._tileset,\n content._tile,\n content._resource,\n arrayBuffer,\n byteOffset\n );\n content._contents.push(innerContent);\n contentPromises.push(innerContent.readyPromise);\n } else {\n throw new RuntimeError(\n \"Unknown tile content type, \" + tileType + \", inside Composite tile\"\n );\n }\n\n byteOffset += tileByteLength;\n }\n\n when\n .all(contentPromises)\n .then(function () {\n content._readyPromise.resolve(content);\n })\n .otherwise(function (error) {\n content._readyPromise.reject(error);\n });\n}\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>false</code>. Instead call <code>hasProperty</code> for a tile in the composite.\n */\nComposite3DTileContent.prototype.hasProperty = function (batchId, name) {\n return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n * always returns <code>undefined</code>. Instead call <code>getFeature</code> for a tile in the composite.\n */\nComposite3DTileContent.prototype.getFeature = function (batchId) {\n return undefined;\n};\n\nComposite3DTileContent.prototype.applyDebugSettings = function (\n enabled,\n color\n) {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n contents[i].applyDebugSettings(enabled, color);\n }\n};\n\nComposite3DTileContent.prototype.applyStyle = function (style) {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n contents[i].applyStyle(style);\n }\n};\n\nComposite3DTileContent.prototype.update = function (tileset, frameState) {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n contents[i].update(tileset, frameState);\n }\n};\n\nComposite3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nComposite3DTileContent.prototype.destroy = function () {\n var contents = this._contents;\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n contents[i].destroy();\n }\n return destroyObject(this);\n};\nexport default Composite3DTileContent;\n","import arraySlice from \"../Core/arraySlice.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\nimport Vector3DTilePrimitive from \"./Vector3DTilePrimitive.js\";\n\n/**\n * Creates a batch of box, cylinder, ellipsoid and/or sphere geometries intersecting terrain or 3D Tiles.\n *\n * @alias Vector3DTileGeometry\n * @constructor\n *\n * @param {Object} options An object with following properties:\n * @param {Float32Array} [options.boxes] The boxes in the tile.\n * @param {Uint16Array} [options.boxBatchIds] The batch ids for each box.\n * @param {Float32Array} [options.cylinders] The cylinders in the tile.\n * @param {Uint16Array} [options.cylinderBatchIds] The batch ids for each cylinder.\n * @param {Float32Array} [options.ellipsoids] The ellipsoids in the tile.\n * @param {Uint16Array} [options.ellipsoidBatchIds] The batch ids for each ellipsoid.\n * @param {Float32Array} [options.spheres] The spheres in the tile.\n * @param {Uint16Array} [options.sphereBatchIds] The batch ids for each sphere.\n * @param {Cartesian3} options.center The RTC center of all geometries.\n * @param {Matrix4} options.modelMatrix The model matrix of all geometries. Applied after the individual geometry model matrices.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table.\n * @param {BoundingSphere} options.boundingVolume The bounding volume containing all of the geometry in the tile.\n *\n * @private\n */\nfunction Vector3DTileGeometry(options) {\n // these will all be released after the primitive is created\n this._boxes = options.boxes;\n this._boxBatchIds = options.boxBatchIds;\n this._cylinders = options.cylinders;\n this._cylinderBatchIds = options.cylinderBatchIds;\n this._ellipsoids = options.ellipsoids;\n this._ellipsoidBatchIds = options.ellipsoidBatchIds;\n this._spheres = options.spheres;\n this._sphereBatchIds = options.sphereBatchIds;\n this._modelMatrix = options.modelMatrix;\n this._batchTable = options.batchTable;\n this._boundingVolume = options.boundingVolume;\n\n this._center = options.center;\n if (!defined(this._center)) {\n if (defined(this._boundingVolume)) {\n this._center = Cartesian3.clone(this._boundingVolume.center);\n } else {\n this._center = Cartesian3.clone(Cartesian3.ZERO);\n }\n }\n\n this._boundingVolumes = undefined;\n this._batchedIndices = undefined;\n\n this._indices = undefined;\n this._indexOffsets = undefined;\n this._indexCounts = undefined;\n\n this._positions = undefined;\n this._vertexBatchIds = undefined;\n\n this._batchIds = undefined;\n\n this._batchTableColors = undefined;\n this._packedBuffer = undefined;\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._verticesPromise = undefined;\n\n this._primitive = undefined;\n\n /**\n * Draws the wireframe of the classification geometries.\n * @type {Boolean}\n * @default false\n */\n this.debugWireframe = false;\n\n /**\n * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n * @type {Boolean}\n * @default false\n */\n this.forceRebatch = false;\n\n /**\n * What this tile will classify.\n * @type {ClassificationType}\n * @default ClassificationType.BOTH\n */\n this.classificationType = ClassificationType.BOTH;\n}\n\nObject.defineProperties(Vector3DTileGeometry.prototype, {\n /**\n * Gets the number of triangles.\n *\n * @memberof Vector3DTileGeometry.prototype\n *\n * @type {Number}\n * @readonly\n */\n trianglesLength: {\n get: function () {\n if (defined(this._primitive)) {\n return this._primitive.trianglesLength;\n }\n return 0;\n },\n },\n\n /**\n * Gets the geometry memory in bytes.\n *\n * @memberof Vector3DTileGeometry.prototype\n *\n * @type {Number}\n * @readonly\n */\n geometryByteLength: {\n get: function () {\n if (defined(this._primitive)) {\n return this._primitive.geometryByteLength;\n }\n return 0;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof Vector3DTileGeometry.prototype\n * @type {Promise<void>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nVector3DTileGeometry.packedBoxLength =\n Matrix4.packedLength + Cartesian3.packedLength;\nVector3DTileGeometry.packedCylinderLength = Matrix4.packedLength + 2;\nVector3DTileGeometry.packedEllipsoidLength =\n Matrix4.packedLength + Cartesian3.packedLength;\nVector3DTileGeometry.packedSphereLength = Cartesian3.packedLength + 1;\n\nfunction packBuffer(geometries) {\n var packedBuffer = new Float64Array(\n Matrix4.packedLength + Cartesian3.packedLength\n );\n\n var offset = 0;\n Cartesian3.pack(geometries._center, packedBuffer, offset);\n offset += Cartesian3.packedLength;\n Matrix4.pack(geometries._modelMatrix, packedBuffer, offset);\n\n return packedBuffer;\n}\n\nfunction unpackBuffer(geometries, packedBuffer) {\n var offset = 0;\n\n var indicesBytesPerElement = packedBuffer[offset++];\n var numBVS = packedBuffer[offset++];\n var bvs = (geometries._boundingVolumes = new Array(numBVS));\n\n for (var i = 0; i < numBVS; ++i) {\n bvs[i] = BoundingSphere.unpack(packedBuffer, offset);\n offset += BoundingSphere.packedLength;\n }\n\n var numBatchedIndices = packedBuffer[offset++];\n var bis = (geometries._batchedIndices = new Array(numBatchedIndices));\n\n for (var j = 0; j < numBatchedIndices; ++j) {\n var color = Color.unpack(packedBuffer, offset);\n offset += Color.packedLength;\n\n var indexOffset = packedBuffer[offset++];\n var count = packedBuffer[offset++];\n\n var length = packedBuffer[offset++];\n var batchIds = new Array(length);\n\n for (var k = 0; k < length; ++k) {\n batchIds[k] = packedBuffer[offset++];\n }\n\n bis[j] = new Vector3DTileBatch({\n color: color,\n offset: indexOffset,\n count: count,\n batchIds: batchIds,\n });\n }\n\n return indicesBytesPerElement;\n}\n\nvar createVerticesTaskProcessor = new TaskProcessor(\n \"createVectorTileGeometries\"\n);\nvar scratchColor = new Color();\n\nfunction createPrimitive(geometries) {\n if (defined(geometries._primitive)) {\n return;\n }\n\n if (!defined(geometries._verticesPromise)) {\n var boxes = geometries._boxes;\n var boxBatchIds = geometries._boxBatchIds;\n var cylinders = geometries._cylinders;\n var cylinderBatchIds = geometries._cylinderBatchIds;\n var ellipsoids = geometries._ellipsoids;\n var ellipsoidBatchIds = geometries._ellipsoidBatchIds;\n var spheres = geometries._spheres;\n var sphereBatchIds = geometries._sphereBatchIds;\n\n var batchTableColors = geometries._batchTableColors;\n var packedBuffer = geometries._packedBuffer;\n\n if (!defined(batchTableColors)) {\n // Copy because they may be the views on the same buffer.\n var length = 0;\n if (defined(geometries._boxes)) {\n boxes = geometries._boxes = arraySlice(boxes);\n boxBatchIds = geometries._boxBatchIds = arraySlice(boxBatchIds);\n length += boxBatchIds.length;\n }\n if (defined(geometries._cylinders)) {\n cylinders = geometries._cylinders = arraySlice(cylinders);\n cylinderBatchIds = geometries._cylinderBatchIds = arraySlice(\n cylinderBatchIds\n );\n length += cylinderBatchIds.length;\n }\n if (defined(geometries._ellipsoids)) {\n ellipsoids = geometries._ellipsoids = arraySlice(ellipsoids);\n ellipsoidBatchIds = geometries._ellipsoidBatchIds = arraySlice(\n ellipsoidBatchIds\n );\n length += ellipsoidBatchIds.length;\n }\n if (defined(geometries._spheres)) {\n spheres = geometries._sphere = arraySlice(spheres);\n sphereBatchIds = geometries._sphereBatchIds = arraySlice(\n sphereBatchIds\n );\n length += sphereBatchIds.length;\n }\n\n batchTableColors = geometries._batchTableColors = new Uint32Array(length);\n var batchTable = geometries._batchTable;\n\n for (var i = 0; i < length; ++i) {\n var color = batchTable.getColor(i, scratchColor);\n batchTableColors[i] = color.toRgba();\n }\n\n packedBuffer = geometries._packedBuffer = packBuffer(geometries);\n }\n\n var transferrableObjects = [];\n if (defined(boxes)) {\n transferrableObjects.push(boxes.buffer, boxBatchIds.buffer);\n }\n if (defined(cylinders)) {\n transferrableObjects.push(cylinders.buffer, cylinderBatchIds.buffer);\n }\n if (defined(ellipsoids)) {\n transferrableObjects.push(ellipsoids.buffer, ellipsoidBatchIds.buffer);\n }\n if (defined(spheres)) {\n transferrableObjects.push(spheres.buffer, sphereBatchIds.buffer);\n }\n transferrableObjects.push(batchTableColors.buffer, packedBuffer.buffer);\n\n var parameters = {\n boxes: defined(boxes) ? boxes.buffer : undefined,\n boxBatchIds: defined(boxes) ? boxBatchIds.buffer : undefined,\n cylinders: defined(cylinders) ? cylinders.buffer : undefined,\n cylinderBatchIds: defined(cylinders)\n ? cylinderBatchIds.buffer\n : undefined,\n ellipsoids: defined(ellipsoids) ? ellipsoids.buffer : undefined,\n ellipsoidBatchIds: defined(ellipsoids)\n ? ellipsoidBatchIds.buffer\n : undefined,\n spheres: defined(spheres) ? spheres.buffer : undefined,\n sphereBatchIds: defined(spheres) ? sphereBatchIds.buffer : undefined,\n batchTableColors: batchTableColors.buffer,\n packedBuffer: packedBuffer.buffer,\n };\n\n var verticesPromise = (geometries._verticesPromise = createVerticesTaskProcessor.scheduleTask(\n parameters,\n transferrableObjects\n ));\n if (!defined(verticesPromise)) {\n // Postponed\n return;\n }\n\n verticesPromise.then(function (result) {\n var packedBuffer = new Float64Array(result.packedBuffer);\n var indicesBytesPerElement = unpackBuffer(geometries, packedBuffer);\n\n if (indicesBytesPerElement === 2) {\n geometries._indices = new Uint16Array(result.indices);\n } else {\n geometries._indices = new Uint32Array(result.indices);\n }\n\n geometries._indexOffsets = new Uint32Array(result.indexOffsets);\n geometries._indexCounts = new Uint32Array(result.indexCounts);\n\n geometries._positions = new Float32Array(result.positions);\n geometries._vertexBatchIds = new Uint16Array(result.vertexBatchIds);\n\n geometries._batchIds = new Uint16Array(result.batchIds);\n\n geometries._ready = true;\n });\n }\n\n if (geometries._ready && !defined(geometries._primitive)) {\n geometries._primitive = new Vector3DTilePrimitive({\n batchTable: geometries._batchTable,\n positions: geometries._positions,\n batchIds: geometries._batchIds,\n vertexBatchIds: geometries._vertexBatchIds,\n indices: geometries._indices,\n indexOffsets: geometries._indexOffsets,\n indexCounts: geometries._indexCounts,\n batchedIndices: geometries._batchedIndices,\n boundingVolume: geometries._boundingVolume,\n boundingVolumes: geometries._boundingVolumes,\n center: geometries._center,\n pickObject: defaultValue(geometries._pickObject, geometries),\n });\n\n geometries._boxes = undefined;\n geometries._boxBatchIds = undefined;\n geometries._cylinders = undefined;\n geometries._cylinderBatchIds = undefined;\n geometries._ellipsoids = undefined;\n geometries._ellipsoidBatchIds = undefined;\n geometries._spheres = undefined;\n geometries._sphereBatchIds = undefined;\n geometries._center = undefined;\n geometries._modelMatrix = undefined;\n geometries._batchTable = undefined;\n geometries._boundingVolume = undefined;\n\n geometries._boundingVolumes = undefined;\n geometries._batchedIndices = undefined;\n\n geometries._indices = undefined;\n geometries._indexOffsets = undefined;\n geometries._indexCounts = undefined;\n\n geometries._positions = undefined;\n geometries._vertexBatchIds = undefined;\n\n geometries._batchIds = undefined;\n\n geometries._batchTableColors = undefined;\n geometries._packedBuffer = undefined;\n\n geometries._verticesPromise = undefined;\n\n geometries._readyPromise.resolve();\n }\n}\n\n/**\n * Creates features for each geometry and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTileGeometry.prototype.createFeatures = function (content, features) {\n this._primitive.createFeatures(content, features);\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (geometry batch table color * color).\n *\n * @param {Boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTileGeometry.prototype.applyDebugSettings = function (enabled, color) {\n this._primitive.applyDebugSettings(enabled, color);\n};\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTileGeometry.prototype.applyStyle = function (style, features) {\n this._primitive.applyStyle(style, features);\n};\n\n/**\n * Call when updating the color of a geometry with batchId changes color. The geometries will need to be re-batched\n * on the next update.\n *\n * @param {Number} batchId The batch id of the geometries whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTileGeometry.prototype.updateCommands = function (batchId, color) {\n this._primitive.updateCommands(batchId, color);\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTileGeometry.prototype.update = function (frameState) {\n createPrimitive(this);\n\n if (!this._ready) {\n return;\n }\n\n this._primitive.debugWireframe = this.debugWireframe;\n this._primitive.forceRebatch = this.forceRebatch;\n this._primitive.classificationType = this.classificationType;\n this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTileGeometry.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTileGeometry.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTileGeometry;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Vector3DTileGeometry from \"./Vector3DTileGeometry.js\";\n\n/**\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Geometry3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Geometry3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._geometries = undefined;\n\n this._contentReadyPromise = undefined;\n this._readyPromise = when.defer();\n\n this._batchTable = undefined;\n this._features = undefined;\n\n /**\n * Part of the {@link Cesium3DTileContent} interface.\n */\n this.featurePropertiesDirty = false;\n\n initialize(this, arrayBuffer, byteOffset);\n}\n\nObject.defineProperties(Geometry3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return defined(this._batchTable) ? this._batchTable.featuresLength : 0;\n },\n },\n\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n if (defined(this._geometries)) {\n return this._geometries.trianglesLength;\n }\n return 0;\n },\n },\n\n geometryByteLength: {\n get: function () {\n if (defined(this._geometries)) {\n return this._geometries.geometryByteLength;\n }\n return 0;\n },\n },\n\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return defined(this._batchTable) ? this._batchTable.memorySizeInBytes : 0;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return this._batchTable;\n },\n },\n});\n\nfunction createColorChangedCallback(content) {\n return function (batchId, color) {\n if (defined(content._geometries)) {\n content._geometries.updateCommands(batchId, color);\n }\n };\n}\n\nfunction getBatchIds(featureTableJson, featureTableBinary) {\n var boxBatchIds;\n var cylinderBatchIds;\n var ellipsoidBatchIds;\n var sphereBatchIds;\n var i;\n\n var numberOfBoxes = defaultValue(featureTableJson.BOXES_LENGTH, 0);\n var numberOfCylinders = defaultValue(featureTableJson.CYLINDERS_LENGTH, 0);\n var numberOfEllipsoids = defaultValue(featureTableJson.ELLIPSOIDS_LENGTH, 0);\n var numberOfSpheres = defaultValue(featureTableJson.SPHERES_LENGTH, 0);\n\n if (numberOfBoxes > 0 && defined(featureTableJson.BOX_BATCH_IDS)) {\n var boxBatchIdsByteOffset =\n featureTableBinary.byteOffset + featureTableJson.BOX_BATCH_IDS.byteOffset;\n boxBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n boxBatchIdsByteOffset,\n numberOfBoxes\n );\n }\n\n if (numberOfCylinders > 0 && defined(featureTableJson.CYLINDER_BATCH_IDS)) {\n var cylinderBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.CYLINDER_BATCH_IDS.byteOffset;\n cylinderBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n cylinderBatchIdsByteOffset,\n numberOfCylinders\n );\n }\n\n if (numberOfEllipsoids > 0 && defined(featureTableJson.ELLIPSOID_BATCH_IDS)) {\n var ellipsoidBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.ELLIPSOID_BATCH_IDS.byteOffset;\n ellipsoidBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n ellipsoidBatchIdsByteOffset,\n numberOfEllipsoids\n );\n }\n\n if (numberOfSpheres > 0 && defined(featureTableJson.SPHERE_BATCH_IDS)) {\n var sphereBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.SPHERE_BATCH_IDS.byteOffset;\n sphereBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n sphereBatchIdsByteOffset,\n numberOfSpheres\n );\n }\n\n var atLeastOneDefined =\n defined(boxBatchIds) ||\n defined(cylinderBatchIds) ||\n defined(ellipsoidBatchIds) ||\n defined(sphereBatchIds);\n var atLeastOneUndefined =\n (numberOfBoxes > 0 && !defined(boxBatchIds)) ||\n (numberOfCylinders > 0 && !defined(cylinderBatchIds)) ||\n (numberOfEllipsoids > 0 && !defined(ellipsoidBatchIds)) ||\n (numberOfSpheres > 0 && !defined(sphereBatchIds));\n\n if (atLeastOneDefined && atLeastOneUndefined) {\n throw new RuntimeError(\n \"If one group of batch ids is defined, then all batch ids must be defined.\"\n );\n }\n\n var allUndefinedBatchIds =\n !defined(boxBatchIds) &&\n !defined(cylinderBatchIds) &&\n !defined(ellipsoidBatchIds) &&\n !defined(sphereBatchIds);\n if (allUndefinedBatchIds) {\n var id = 0;\n if (!defined(boxBatchIds) && numberOfBoxes > 0) {\n boxBatchIds = new Uint16Array(numberOfBoxes);\n for (i = 0; i < numberOfBoxes; ++i) {\n boxBatchIds[i] = id++;\n }\n }\n if (!defined(cylinderBatchIds) && numberOfCylinders > 0) {\n cylinderBatchIds = new Uint16Array(numberOfCylinders);\n for (i = 0; i < numberOfCylinders; ++i) {\n cylinderBatchIds[i] = id++;\n }\n }\n if (!defined(ellipsoidBatchIds) && numberOfEllipsoids > 0) {\n ellipsoidBatchIds = new Uint16Array(numberOfEllipsoids);\n for (i = 0; i < numberOfEllipsoids; ++i) {\n ellipsoidBatchIds[i] = id++;\n }\n }\n if (!defined(sphereBatchIds) && numberOfSpheres > 0) {\n sphereBatchIds = new Uint16Array(numberOfSpheres);\n for (i = 0; i < numberOfSpheres; ++i) {\n sphereBatchIds[i] = id++;\n }\n }\n }\n\n return {\n boxes: boxBatchIds,\n cylinders: cylinderBatchIds,\n ellipsoids: ellipsoidBatchIds,\n spheres: sphereBatchIds,\n };\n}\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n byteOffset = defaultValue(byteOffset, 0);\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic number\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Geometry tile version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var byteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n if (byteLength === 0) {\n content._readyPromise.resolve(content);\n return;\n }\n\n var featureTableJSONByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n if (featureTableJSONByteLength === 0) {\n throw new RuntimeError(\n \"Feature table must have a byte length greater than zero\"\n );\n }\n\n var featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var batchTableJSONByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n featureTableJSONByteLength\n );\n var featureTableJson = JSON.parse(featureTableString);\n byteOffset += featureTableJSONByteLength;\n\n var featureTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n featureTableBinaryByteLength\n );\n byteOffset += featureTableBinaryByteLength;\n\n var batchTableJson;\n var batchTableBinary;\n if (batchTableJSONByteLength > 0) {\n // PERFORMANCE_IDEA: is it possible to allocate this on-demand? Perhaps keep the\n // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n //\n // We could also make another request for it, but that would make the property set/get\n // API async, and would double the number of numbers in some cases.\n var batchTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n batchTableJSONByteLength\n );\n batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJSONByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n batchTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n batchTableBinaryByteLength\n );\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n }\n }\n\n var numberOfBoxes = defaultValue(featureTableJson.BOXES_LENGTH, 0);\n var numberOfCylinders = defaultValue(featureTableJson.CYLINDERS_LENGTH, 0);\n var numberOfEllipsoids = defaultValue(featureTableJson.ELLIPSOIDS_LENGTH, 0);\n var numberOfSpheres = defaultValue(featureTableJson.SPHERES_LENGTH, 0);\n\n var totalPrimitives =\n numberOfBoxes + numberOfCylinders + numberOfEllipsoids + numberOfSpheres;\n\n var batchTable = new Cesium3DTileBatchTable(\n content,\n totalPrimitives,\n batchTableJson,\n batchTableBinary,\n createColorChangedCallback(content)\n );\n content._batchTable = batchTable;\n\n if (totalPrimitives === 0) {\n return;\n }\n\n var modelMatrix = content.tile.computedTransform;\n\n var center;\n if (defined(featureTableJson.RTC_CENTER)) {\n center = Cartesian3.unpack(featureTableJson.RTC_CENTER);\n Matrix4.multiplyByPoint(modelMatrix, center, center);\n }\n\n var batchIds = getBatchIds(featureTableJson, featureTableBinary);\n\n if (\n numberOfBoxes > 0 ||\n numberOfCylinders > 0 ||\n numberOfEllipsoids > 0 ||\n numberOfSpheres > 0\n ) {\n var boxes;\n var cylinders;\n var ellipsoids;\n var spheres;\n\n if (numberOfBoxes > 0) {\n var boxesByteOffset =\n featureTableBinary.byteOffset + featureTableJson.BOXES.byteOffset;\n boxes = new Float32Array(\n featureTableBinary.buffer,\n boxesByteOffset,\n Vector3DTileGeometry.packedBoxLength * numberOfBoxes\n );\n }\n\n if (numberOfCylinders > 0) {\n var cylindersByteOffset =\n featureTableBinary.byteOffset + featureTableJson.CYLINDERS.byteOffset;\n cylinders = new Float32Array(\n featureTableBinary.buffer,\n cylindersByteOffset,\n Vector3DTileGeometry.packedCylinderLength * numberOfCylinders\n );\n }\n\n if (numberOfEllipsoids > 0) {\n var ellipsoidsByteOffset =\n featureTableBinary.byteOffset + featureTableJson.ELLIPSOIDS.byteOffset;\n ellipsoids = new Float32Array(\n featureTableBinary.buffer,\n ellipsoidsByteOffset,\n Vector3DTileGeometry.packedEllipsoidLength * numberOfEllipsoids\n );\n }\n\n if (numberOfSpheres > 0) {\n var spheresByteOffset =\n featureTableBinary.byteOffset + featureTableJson.SPHERES.byteOffset;\n spheres = new Float32Array(\n featureTableBinary.buffer,\n spheresByteOffset,\n Vector3DTileGeometry.packedSphereLength * numberOfSpheres\n );\n }\n\n content._geometries = new Vector3DTileGeometry({\n boxes: boxes,\n boxBatchIds: batchIds.boxes,\n cylinders: cylinders,\n cylinderBatchIds: batchIds.cylinders,\n ellipsoids: ellipsoids,\n ellipsoidBatchIds: batchIds.ellipsoids,\n spheres: spheres,\n sphereBatchIds: batchIds.spheres,\n center: center,\n modelMatrix: modelMatrix,\n batchTable: batchTable,\n boundingVolume: content.tile.boundingVolume.boundingVolume,\n });\n }\n}\n\nfunction createFeatures(content) {\n var featuresLength = content.featuresLength;\n if (!defined(content._features) && featuresLength > 0) {\n var features = new Array(featuresLength);\n if (defined(content._geometries)) {\n content._geometries.createFeatures(content, features);\n }\n content._features = features;\n }\n}\n\nGeometry3DTileContent.prototype.hasProperty = function (batchId, name) {\n return this._batchTable.hasProperty(batchId, name);\n};\n\nGeometry3DTileContent.prototype.getFeature = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n var featuresLength = this.featuresLength;\n if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n (featuresLength - 1) +\n \").\"\n );\n }\n //>>includeEnd('debug');\n\n createFeatures(this);\n return this._features[batchId];\n};\n\nGeometry3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n if (defined(this._geometries)) {\n this._geometries.applyDebugSettings(enabled, color);\n }\n};\n\nGeometry3DTileContent.prototype.applyStyle = function (style) {\n createFeatures(this);\n if (defined(this._geometries)) {\n this._geometries.applyStyle(style, this._features);\n }\n};\n\nGeometry3DTileContent.prototype.update = function (tileset, frameState) {\n if (defined(this._geometries)) {\n this._geometries.classificationType = this._tileset.classificationType;\n this._geometries.debugWireframe = this._tileset.debugWireframe;\n this._geometries.update(frameState);\n }\n if (defined(this._batchTable) && this._geometries._ready) {\n this._batchTable.update(tileset, frameState);\n }\n\n if (!defined(this._contentReadyPromise)) {\n var that = this;\n this._contentReadyPromise = this._geometries.readyPromise.then(function () {\n that._readyPromise.resolve(that);\n });\n }\n};\n\nGeometry3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nGeometry3DTileContent.prototype.destroy = function () {\n this._geometries = this._geometries && this._geometries.destroy();\n this._batchTable = this._batchTable && this._batchTable.destroy();\n return destroyObject(this);\n};\nexport default Geometry3DTileContent;\n","import Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * @private\n */\nfunction ModelInstance(collection, modelMatrix, instanceId) {\n this.primitive = collection;\n this._modelMatrix = Matrix4.clone(modelMatrix);\n this._instanceId = instanceId;\n}\n\nObject.defineProperties(ModelInstance.prototype, {\n instanceId: {\n get: function () {\n return this._instanceId;\n },\n },\n model: {\n get: function () {\n return this.primitive._model;\n },\n },\n modelMatrix: {\n get: function () {\n return Matrix4.clone(this._modelMatrix);\n },\n set: function (value) {\n Matrix4.clone(value, this._modelMatrix);\n this.primitive.expandBoundingSphere(this._modelMatrix);\n this.primitive._dirty = true;\n },\n },\n});\nexport default ModelInstance;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ForEach from \"../ThirdParty/GltfPipeline/ForEach.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Model from \"./Model.js\";\nimport ModelInstance from \"./ModelInstance.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\nvar LoadState = {\n NEEDS_LOAD: 0,\n LOADING: 1,\n LOADED: 2,\n FAILED: 3,\n};\n\n/**\n * A 3D model instance collection. All instances reference the same underlying model, but have unique\n * per-instance properties like model matrix, pick id, etc.\n *\n * Instances are rendered relative-to-center and for best results instances should be positioned close to one another.\n * Otherwise there may be precision issues if, for example, instances are placed on opposite sides of the globe.\n *\n * @alias ModelInstanceCollection\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Object[]} [options.instances] An array of instances, where each instance contains a modelMatrix and optional batchId when options.batchTable is defined.\n * @param {Cesium3DTileBatchTable} [options.batchTable] The batch table of the instanced 3D Tile.\n * @param {Resource|String} [options.url] The url to the .gltf file.\n * @param {Object} [options.requestType] The request type, used for request prioritization\n * @param {Object|ArrayBuffer|Uint8Array} [options.gltf] A glTF JSON object, or a binary glTF buffer.\n * @param {Resource|String} [options.basePath=''] The base path that paths in the glTF JSON are relative to.\n * @param {Boolean} [options.dynamic=false] Hint if instance model matrices will be updated frequently.\n * @param {Boolean} [options.show=true] Determines if the collection will be shown.\n * @param {Boolean} [options.allowPicking=true] When <code>true</code>, each instance is pickable with {@link Scene#pick}.\n * @param {Boolean} [options.asynchronous=true] Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded.\n * @param {Boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the collection casts or receives shadows from light sources.\n * @param {Cartesian2} [options.imageBasedLightingFactor=new Cartesian2(1.0, 1.0)] Scales the diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox.\n * @param {Cartesian3} [options.lightColor] The light color when shading models. When <code>undefined</code> the scene's light color is used instead.\n * @param {Number} [options.luminanceAtZenith=0.2] The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map.\n * @param {Cartesian3[]} [options.sphericalHarmonicCoefficients] The third order spherical harmonic coefficients used for the diffuse color of image-based lighting.\n * @param {String} [options.specularEnvironmentMaps] A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n * @param {Boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the glTF material's doubleSided property; when false, back face culling is disabled.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for the collection.\n * @param {Boolean} [options.debugWireframe=false] For debugging only. Draws the instances in wireframe.\n *\n * @exception {DeveloperError} Must specify either <options.gltf> or <options.url>, but not both.\n * @exception {DeveloperError} Shader program cannot be optimized for instancing. Parameters cannot have any of the following semantics: MODEL, MODELINVERSE, MODELVIEWINVERSE, MODELVIEWPROJECTIONINVERSE, MODELINVERSETRANSPOSE.\n *\n * @private\n */\nfunction ModelInstanceCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.gltf) && !defined(options.url)) {\n throw new DeveloperError(\"Either options.gltf or options.url is required.\");\n }\n\n if (defined(options.gltf) && defined(options.url)) {\n throw new DeveloperError(\n \"Cannot pass in both options.gltf and options.url.\"\n );\n }\n //>>includeEnd('debug');\n\n this.show = defaultValue(options.show, true);\n\n this._instancingSupported = false;\n this._dynamic = defaultValue(options.dynamic, false);\n this._allowPicking = defaultValue(options.allowPicking, true);\n this._ready = false;\n this._readyPromise = when.defer();\n this._state = LoadState.NEEDS_LOAD;\n this._dirty = false;\n\n // Undocumented options\n this._cull = defaultValue(options.cull, true);\n this._opaquePass = defaultValue(options.opaquePass, Pass.OPAQUE);\n\n this._instances = createInstances(this, options.instances);\n\n // When the model instance collection is backed by an i3dm tile,\n // use its batch table resources to modify the shaders, attributes, and uniform maps.\n this._batchTable = options.batchTable;\n\n this._model = undefined;\n this._vertexBufferTypedArray = undefined; // Hold onto the vertex buffer contents when dynamic is true\n this._vertexBuffer = undefined;\n this._batchIdBuffer = undefined;\n this._instancedUniformsByProgram = undefined;\n\n this._drawCommands = [];\n this._modelCommands = undefined;\n\n this._renderStates = undefined;\n this._disableCullingRenderStates = undefined;\n\n this._boundingSphere = createBoundingSphere(this);\n this._center = Cartesian3.clone(this._boundingSphere.center);\n this._rtcTransform = new Matrix4();\n this._rtcModelView = new Matrix4(); // Holds onto uniform\n\n this._mode = undefined;\n\n this.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n this._modelMatrix = Matrix4.clone(this.modelMatrix);\n\n // Passed on to Model\n this._url = Resource.createIfNeeded(options.url);\n this._requestType = options.requestType;\n this._gltf = options.gltf;\n this._basePath = Resource.createIfNeeded(options.basePath);\n this._asynchronous = options.asynchronous;\n this._incrementallyLoadTextures = options.incrementallyLoadTextures;\n this._upAxis = options.upAxis; // Undocumented option\n this._forwardAxis = options.forwardAxis; // Undocumented option\n\n this.shadows = defaultValue(options.shadows, ShadowMode.ENABLED);\n this._shadows = this.shadows;\n\n this._pickIdLoaded = options.pickIdLoaded;\n\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n this._debugShowBoundingVolume = false;\n\n this.debugWireframe = defaultValue(options.debugWireframe, false);\n this._debugWireframe = false;\n\n this._imageBasedLightingFactor = new Cartesian2(1.0, 1.0);\n Cartesian2.clone(\n options.imageBasedLightingFactor,\n this._imageBasedLightingFactor\n );\n this.lightColor = options.lightColor;\n this.luminanceAtZenith = options.luminanceAtZenith;\n this.sphericalHarmonicCoefficients = options.sphericalHarmonicCoefficients;\n this.specularEnvironmentMaps = options.specularEnvironmentMaps;\n this.backFaceCulling = defaultValue(options.backFaceCulling, true);\n this._backFaceCulling = this.backFaceCulling;\n}\n\nObject.defineProperties(ModelInstanceCollection.prototype, {\n allowPicking: {\n get: function () {\n return this._allowPicking;\n },\n },\n length: {\n get: function () {\n return this._instances.length;\n },\n },\n activeAnimations: {\n get: function () {\n return this._model.activeAnimations;\n },\n },\n ready: {\n get: function () {\n return this._ready;\n },\n },\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n imageBasedLightingFactor: {\n get: function () {\n return this._imageBasedLightingFactor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"imageBasedLightingFactor\", value);\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 1.0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 1.0\n );\n //>>includeEnd('debug');\n Cartesian2.clone(value, this._imageBasedLightingFactor);\n },\n },\n});\n\nfunction createInstances(collection, instancesOptions) {\n instancesOptions = defaultValue(instancesOptions, []);\n var length = instancesOptions.length;\n var instances = new Array(length);\n for (var i = 0; i < length; ++i) {\n var instanceOptions = instancesOptions[i];\n var modelMatrix = instanceOptions.modelMatrix;\n var instanceId = defaultValue(instanceOptions.batchId, i);\n instances[i] = new ModelInstance(collection, modelMatrix, instanceId);\n }\n return instances;\n}\n\nfunction createBoundingSphere(collection) {\n var instancesLength = collection.length;\n var points = new Array(instancesLength);\n for (var i = 0; i < instancesLength; ++i) {\n points[i] = Matrix4.getTranslation(\n collection._instances[i]._modelMatrix,\n new Cartesian3()\n );\n }\n\n return BoundingSphere.fromPoints(points);\n}\n\nvar scratchCartesian = new Cartesian3();\nvar scratchMatrix = new Matrix4();\n\nModelInstanceCollection.prototype.expandBoundingSphere = function (\n instanceModelMatrix\n) {\n var translation = Matrix4.getTranslation(\n instanceModelMatrix,\n scratchCartesian\n );\n BoundingSphere.expand(\n this._boundingSphere,\n translation,\n this._boundingSphere\n );\n};\n\nfunction getCheckUniformSemanticFunction(\n modelSemantics,\n supportedSemantics,\n programId,\n uniformMap\n) {\n return function (uniform, uniformName) {\n var semantic = uniform.semantic;\n if (defined(semantic) && modelSemantics.indexOf(semantic) > -1) {\n if (supportedSemantics.indexOf(semantic) > -1) {\n uniformMap[uniformName] = semantic;\n } else {\n throw new RuntimeError(\n \"Shader program cannot be optimized for instancing. \" +\n 'Uniform \"' +\n uniformName +\n '\" in program \"' +\n programId +\n '\" uses unsupported semantic \"' +\n semantic +\n '\"'\n );\n }\n }\n };\n}\n\nfunction getInstancedUniforms(collection, programId) {\n if (defined(collection._instancedUniformsByProgram)) {\n return collection._instancedUniformsByProgram[programId];\n }\n\n var instancedUniformsByProgram = {};\n collection._instancedUniformsByProgram = instancedUniformsByProgram;\n\n // When using CESIUM_RTC_MODELVIEW the CESIUM_RTC center is ignored. Instances are always rendered relative-to-center.\n var modelSemantics = [\n \"MODEL\",\n \"MODELVIEW\",\n \"CESIUM_RTC_MODELVIEW\",\n \"MODELVIEWPROJECTION\",\n \"MODELINVERSE\",\n \"MODELVIEWINVERSE\",\n \"MODELVIEWPROJECTIONINVERSE\",\n \"MODELINVERSETRANSPOSE\",\n \"MODELVIEWINVERSETRANSPOSE\",\n ];\n var supportedSemantics = [\n \"MODELVIEW\",\n \"CESIUM_RTC_MODELVIEW\",\n \"MODELVIEWPROJECTION\",\n \"MODELVIEWINVERSETRANSPOSE\",\n ];\n\n var techniques = collection._model._sourceTechniques;\n for (var techniqueId in techniques) {\n if (techniques.hasOwnProperty(techniqueId)) {\n var technique = techniques[techniqueId];\n var program = technique.program;\n\n // Different techniques may share the same program, skip if already processed.\n // This assumes techniques that share a program do not declare different semantics for the same uniforms.\n if (!defined(instancedUniformsByProgram[program])) {\n var uniformMap = {};\n instancedUniformsByProgram[program] = uniformMap;\n ForEach.techniqueUniform(\n technique,\n getCheckUniformSemanticFunction(\n modelSemantics,\n supportedSemantics,\n programId,\n uniformMap\n )\n );\n }\n }\n }\n\n return instancedUniformsByProgram[programId];\n}\n\nfunction getVertexShaderCallback(collection) {\n return function (vs, programId) {\n var instancedUniforms = getInstancedUniforms(collection, programId);\n var usesBatchTable = defined(collection._batchTable);\n\n var renamedSource = ShaderSource.replaceMain(vs, \"czm_instancing_main\");\n\n var globalVarsHeader = \"\";\n var globalVarsMain = \"\";\n for (var uniform in instancedUniforms) {\n if (instancedUniforms.hasOwnProperty(uniform)) {\n var semantic = instancedUniforms[uniform];\n var varName;\n if (semantic === \"MODELVIEW\" || semantic === \"CESIUM_RTC_MODELVIEW\") {\n varName = \"czm_instanced_modelView\";\n } else if (semantic === \"MODELVIEWPROJECTION\") {\n varName = \"czm_instanced_modelViewProjection\";\n globalVarsHeader += \"mat4 czm_instanced_modelViewProjection;\\n\";\n globalVarsMain +=\n \"czm_instanced_modelViewProjection = czm_projection * czm_instanced_modelView;\\n\";\n } else if (semantic === \"MODELVIEWINVERSETRANSPOSE\") {\n varName = \"czm_instanced_modelViewInverseTranspose\";\n globalVarsHeader += \"mat3 czm_instanced_modelViewInverseTranspose;\\n\";\n globalVarsMain +=\n \"czm_instanced_modelViewInverseTranspose = mat3(czm_instanced_modelView);\\n\";\n }\n\n // Remove the uniform declaration\n var regex = new RegExp(\"uniform.*\" + uniform + \".*\");\n renamedSource = renamedSource.replace(regex, \"\");\n\n // Replace all occurrences of the uniform with the global variable\n regex = new RegExp(uniform + \"\\\\b\", \"g\");\n renamedSource = renamedSource.replace(regex, varName);\n }\n }\n\n // czm_instanced_model is the model matrix of the instance relative to center\n // czm_instanced_modifiedModelView is the transform from the center to view\n // czm_instanced_nodeTransform is the local offset of the node within the model\n var uniforms =\n \"uniform mat4 czm_instanced_modifiedModelView;\\n\" +\n \"uniform mat4 czm_instanced_nodeTransform;\\n\";\n\n var batchIdAttribute;\n var pickAttribute;\n var pickVarying;\n\n if (usesBatchTable) {\n batchIdAttribute = \"attribute float a_batchId;\\n\";\n pickAttribute = \"\";\n pickVarying = \"\";\n } else {\n batchIdAttribute = \"\";\n pickAttribute =\n \"attribute vec4 pickColor;\\n\" + \"varying vec4 v_pickColor;\\n\";\n pickVarying = \" v_pickColor = pickColor;\\n\";\n }\n\n var instancedSource =\n uniforms +\n globalVarsHeader +\n \"mat4 czm_instanced_modelView;\\n\" +\n \"attribute vec4 czm_modelMatrixRow0;\\n\" +\n \"attribute vec4 czm_modelMatrixRow1;\\n\" +\n \"attribute vec4 czm_modelMatrixRow2;\\n\" +\n batchIdAttribute +\n pickAttribute +\n renamedSource +\n \"void main()\\n\" +\n \"{\\n\" +\n \" mat4 czm_instanced_model = mat4(czm_modelMatrixRow0.x, czm_modelMatrixRow1.x, czm_modelMatrixRow2.x, 0.0, czm_modelMatrixRow0.y, czm_modelMatrixRow1.y, czm_modelMatrixRow2.y, 0.0, czm_modelMatrixRow0.z, czm_modelMatrixRow1.z, czm_modelMatrixRow2.z, 0.0, czm_modelMatrixRow0.w, czm_modelMatrixRow1.w, czm_modelMatrixRow2.w, 1.0);\\n\" +\n \" czm_instanced_modelView = czm_instanced_modifiedModelView * czm_instanced_model * czm_instanced_nodeTransform;\\n\" +\n globalVarsMain +\n \" czm_instancing_main();\\n\" +\n pickVarying +\n \"}\\n\";\n\n if (usesBatchTable) {\n var gltf = collection._model.gltf;\n var diffuseAttributeOrUniformName = ModelUtility.getDiffuseAttributeOrUniform(\n gltf,\n programId\n );\n instancedSource = collection._batchTable.getVertexShaderCallback(\n true,\n \"a_batchId\",\n diffuseAttributeOrUniformName\n )(instancedSource);\n }\n\n return instancedSource;\n };\n}\n\nfunction getFragmentShaderCallback(collection) {\n return function (fs, programId) {\n var batchTable = collection._batchTable;\n if (defined(batchTable)) {\n var gltf = collection._model.gltf;\n var diffuseAttributeOrUniformName = ModelUtility.getDiffuseAttributeOrUniform(\n gltf,\n programId\n );\n fs = batchTable.getFragmentShaderCallback(\n true,\n diffuseAttributeOrUniformName\n )(fs);\n } else {\n fs = \"varying vec4 v_pickColor;\\n\" + fs;\n }\n return fs;\n };\n}\n\nfunction createModifiedModelView(collection, context) {\n return function () {\n return Matrix4.multiply(\n context.uniformState.view,\n collection._rtcTransform,\n collection._rtcModelView\n );\n };\n}\n\nfunction createNodeTransformFunction(node) {\n return function () {\n return node.computedMatrix;\n };\n}\n\nfunction getUniformMapCallback(collection, context) {\n return function (uniformMap, programId, node) {\n uniformMap = clone(uniformMap);\n uniformMap.czm_instanced_modifiedModelView = createModifiedModelView(\n collection,\n context\n );\n uniformMap.czm_instanced_nodeTransform = createNodeTransformFunction(node);\n\n // Remove instanced uniforms from the uniform map\n var instancedUniforms = getInstancedUniforms(collection, programId);\n for (var uniform in instancedUniforms) {\n if (instancedUniforms.hasOwnProperty(uniform)) {\n delete uniformMap[uniform];\n }\n }\n\n if (defined(collection._batchTable)) {\n uniformMap = collection._batchTable.getUniformMapCallback()(uniformMap);\n }\n\n return uniformMap;\n };\n}\n\nfunction getVertexShaderNonInstancedCallback(collection) {\n return function (vs, programId) {\n if (defined(collection._batchTable)) {\n var gltf = collection._model.gltf;\n var diffuseAttributeOrUniformName = ModelUtility.getDiffuseAttributeOrUniform(\n gltf,\n programId\n );\n vs = collection._batchTable.getVertexShaderCallback(\n true,\n \"a_batchId\",\n diffuseAttributeOrUniformName\n )(vs);\n // Treat a_batchId as a uniform rather than a vertex attribute\n vs = \"uniform float a_batchId\\n;\" + vs;\n }\n return vs;\n };\n}\n\nfunction getFragmentShaderNonInstancedCallback(collection) {\n return function (fs, programId) {\n var batchTable = collection._batchTable;\n if (defined(batchTable)) {\n var gltf = collection._model.gltf;\n var diffuseAttributeOrUniformName = ModelUtility.getDiffuseAttributeOrUniform(\n gltf,\n programId\n );\n fs = batchTable.getFragmentShaderCallback(\n true,\n diffuseAttributeOrUniformName\n )(fs);\n } else {\n fs = \"uniform vec4 czm_pickColor;\\n\" + fs;\n }\n return fs;\n };\n}\n\nfunction getUniformMapNonInstancedCallback(collection) {\n return function (uniformMap) {\n if (defined(collection._batchTable)) {\n uniformMap = collection._batchTable.getUniformMapCallback()(uniformMap);\n }\n\n return uniformMap;\n };\n}\n\nfunction getVertexBufferTypedArray(collection) {\n var instances = collection._instances;\n var instancesLength = collection.length;\n var collectionCenter = collection._center;\n var vertexSizeInFloats = 12;\n\n var bufferData = collection._vertexBufferTypedArray;\n if (!defined(bufferData)) {\n bufferData = new Float32Array(instancesLength * vertexSizeInFloats);\n }\n if (collection._dynamic) {\n // Hold onto the buffer data so we don't have to allocate new memory every frame.\n collection._vertexBufferTypedArray = bufferData;\n }\n\n for (var i = 0; i < instancesLength; ++i) {\n var modelMatrix = instances[i]._modelMatrix;\n\n // Instance matrix is relative to center\n var instanceMatrix = Matrix4.clone(modelMatrix, scratchMatrix);\n instanceMatrix[12] -= collectionCenter.x;\n instanceMatrix[13] -= collectionCenter.y;\n instanceMatrix[14] -= collectionCenter.z;\n\n var offset = i * vertexSizeInFloats;\n\n // First three rows of the model matrix\n bufferData[offset + 0] = instanceMatrix[0];\n bufferData[offset + 1] = instanceMatrix[4];\n bufferData[offset + 2] = instanceMatrix[8];\n bufferData[offset + 3] = instanceMatrix[12];\n bufferData[offset + 4] = instanceMatrix[1];\n bufferData[offset + 5] = instanceMatrix[5];\n bufferData[offset + 6] = instanceMatrix[9];\n bufferData[offset + 7] = instanceMatrix[13];\n bufferData[offset + 8] = instanceMatrix[2];\n bufferData[offset + 9] = instanceMatrix[6];\n bufferData[offset + 10] = instanceMatrix[10];\n bufferData[offset + 11] = instanceMatrix[14];\n }\n\n return bufferData;\n}\n\nfunction createVertexBuffer(collection, context) {\n var i;\n var instances = collection._instances;\n var instancesLength = collection.length;\n var dynamic = collection._dynamic;\n var usesBatchTable = defined(collection._batchTable);\n\n if (usesBatchTable) {\n var batchIdBufferData = new Uint16Array(instancesLength);\n for (i = 0; i < instancesLength; ++i) {\n batchIdBufferData[i] = instances[i]._instanceId;\n }\n collection._batchIdBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: batchIdBufferData,\n usage: BufferUsage.STATIC_DRAW,\n });\n }\n\n if (!usesBatchTable) {\n var pickIdBuffer = new Uint8Array(instancesLength * 4);\n for (i = 0; i < instancesLength; ++i) {\n var pickId = collection._pickIds[i];\n var pickColor = pickId.color;\n var offset = i * 4;\n pickIdBuffer[offset] = Color.floatToByte(pickColor.red);\n pickIdBuffer[offset + 1] = Color.floatToByte(pickColor.green);\n pickIdBuffer[offset + 2] = Color.floatToByte(pickColor.blue);\n pickIdBuffer[offset + 3] = Color.floatToByte(pickColor.alpha);\n }\n collection._pickIdBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: pickIdBuffer,\n usage: BufferUsage.STATIC_DRAW,\n });\n }\n\n var vertexBufferTypedArray = getVertexBufferTypedArray(collection);\n collection._vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: vertexBufferTypedArray,\n usage: dynamic ? BufferUsage.STREAM_DRAW : BufferUsage.STATIC_DRAW,\n });\n}\n\nfunction updateVertexBuffer(collection) {\n var vertexBufferTypedArray = getVertexBufferTypedArray(collection);\n collection._vertexBuffer.copyFromArrayView(vertexBufferTypedArray);\n}\n\nfunction createPickIds(collection, context) {\n // PERFORMANCE_IDEA: we could skip the pick buffer completely by allocating\n // a continuous range of pickIds and then converting the base pickId + batchId\n // to RGBA in the shader. The only consider is precision issues, which might\n // not be an issue in WebGL 2.\n var instances = collection._instances;\n var instancesLength = instances.length;\n var pickIds = new Array(instancesLength);\n for (var i = 0; i < instancesLength; ++i) {\n pickIds[i] = context.createPickId(instances[i]);\n }\n return pickIds;\n}\n\nfunction createModel(collection, context) {\n var instancingSupported = collection._instancingSupported;\n var usesBatchTable = defined(collection._batchTable);\n var allowPicking = collection._allowPicking;\n\n var modelOptions = {\n url: collection._url,\n requestType: collection._requestType,\n gltf: collection._gltf,\n basePath: collection._basePath,\n shadows: collection._shadows,\n cacheKey: undefined,\n asynchronous: collection._asynchronous,\n allowPicking: allowPicking,\n incrementallyLoadTextures: collection._incrementallyLoadTextures,\n upAxis: collection._upAxis,\n forwardAxis: collection._forwardAxis,\n precreatedAttributes: undefined,\n vertexShaderLoaded: undefined,\n fragmentShaderLoaded: undefined,\n uniformMapLoaded: undefined,\n pickIdLoaded: collection._pickIdLoaded,\n ignoreCommands: true,\n opaquePass: collection._opaquePass,\n imageBasedLightingFactor: collection.imageBasedLightingFactor,\n lightColor: collection.lightColor,\n luminanceAtZenith: collection.luminanceAtZenith,\n sphericalHarmonicCoefficients: collection.sphericalHarmonicCoefficients,\n specularEnvironmentMaps: collection.specularEnvironmentMaps,\n };\n\n if (!usesBatchTable) {\n collection._pickIds = createPickIds(collection, context);\n }\n\n if (instancingSupported) {\n createVertexBuffer(collection, context);\n\n var vertexSizeInFloats = 12;\n var componentSizeInBytes = ComponentDatatype.getSizeInBytes(\n ComponentDatatype.FLOAT\n );\n\n var instancedAttributes = {\n czm_modelMatrixRow0: {\n index: 0, // updated in Model\n vertexBuffer: collection._vertexBuffer,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: componentSizeInBytes * vertexSizeInFloats,\n instanceDivisor: 1,\n },\n czm_modelMatrixRow1: {\n index: 0, // updated in Model\n vertexBuffer: collection._vertexBuffer,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n normalize: false,\n offsetInBytes: componentSizeInBytes * 4,\n strideInBytes: componentSizeInBytes * vertexSizeInFloats,\n instanceDivisor: 1,\n },\n czm_modelMatrixRow2: {\n index: 0, // updated in Model\n vertexBuffer: collection._vertexBuffer,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n normalize: false,\n offsetInBytes: componentSizeInBytes * 8,\n strideInBytes: componentSizeInBytes * vertexSizeInFloats,\n instanceDivisor: 1,\n },\n };\n\n // When using a batch table, add a batch id attribute\n if (usesBatchTable) {\n instancedAttributes.a_batchId = {\n index: 0, // updated in Model\n vertexBuffer: collection._batchIdBuffer,\n componentsPerAttribute: 1,\n componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n instanceDivisor: 1,\n };\n }\n\n if (!usesBatchTable) {\n instancedAttributes.pickColor = {\n index: 0, // updated in Model\n vertexBuffer: collection._pickIdBuffer,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n normalize: true,\n offsetInBytes: 0,\n strideInBytes: 0,\n instanceDivisor: 1,\n };\n }\n\n modelOptions.precreatedAttributes = instancedAttributes;\n modelOptions.vertexShaderLoaded = getVertexShaderCallback(collection);\n modelOptions.fragmentShaderLoaded = getFragmentShaderCallback(collection);\n modelOptions.uniformMapLoaded = getUniformMapCallback(collection, context);\n\n if (defined(collection._url)) {\n modelOptions.cacheKey = collection._url.getUrlComponent() + \"#instanced\";\n }\n } else {\n modelOptions.vertexShaderLoaded = getVertexShaderNonInstancedCallback(\n collection\n );\n modelOptions.fragmentShaderLoaded = getFragmentShaderNonInstancedCallback(\n collection\n );\n modelOptions.uniformMapLoaded = getUniformMapNonInstancedCallback(\n collection,\n context\n );\n }\n\n if (defined(collection._url)) {\n collection._model = Model.fromGltf(modelOptions);\n } else {\n collection._model = new Model(modelOptions);\n }\n}\n\nfunction updateWireframe(collection, force) {\n if (collection._debugWireframe !== collection.debugWireframe || force) {\n collection._debugWireframe = collection.debugWireframe;\n\n // This assumes the original primitive was TRIANGLES and that the triangles\n // are connected for the wireframe to look perfect.\n var primitiveType = collection.debugWireframe\n ? PrimitiveType.LINES\n : PrimitiveType.TRIANGLES;\n var commands = collection._drawCommands;\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n commands[i].primitiveType = primitiveType;\n }\n }\n}\n\nfunction getDisableCullingRenderState(renderState) {\n var rs = clone(renderState, true);\n rs.cull.enabled = false;\n return RenderState.fromCache(rs);\n}\n\nfunction updateBackFaceCulling(collection, force) {\n if (collection._backFaceCulling !== collection.backFaceCulling || force) {\n collection._backFaceCulling = collection.backFaceCulling;\n\n var commands = collection._drawCommands;\n var length = commands.length;\n var i;\n\n if (!defined(collection._disableCullingRenderStates)) {\n collection._disableCullingRenderStates = new Array(length);\n collection._renderStates = new Array(length);\n for (i = 0; i < length; ++i) {\n var renderState = commands[i].renderState;\n var derivedRenderState = getDisableCullingRenderState(renderState);\n collection._disableCullingRenderStates[i] = derivedRenderState;\n collection._renderStates[i] = renderState;\n }\n }\n\n for (i = 0; i < length; ++i) {\n commands[i].renderState = collection._backFaceCulling\n ? collection._renderStates[i]\n : collection._disableCullingRenderStates[i];\n }\n }\n}\n\nfunction updateShowBoundingVolume(collection, force) {\n if (\n collection.debugShowBoundingVolume !==\n collection._debugShowBoundingVolume ||\n force\n ) {\n collection._debugShowBoundingVolume = collection.debugShowBoundingVolume;\n\n var commands = collection._drawCommands;\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n commands[i].debugShowBoundingVolume = collection.debugShowBoundingVolume;\n }\n }\n}\n\nfunction createCommands(collection, drawCommands) {\n var commandsLength = drawCommands.length;\n var instancesLength = collection.length;\n var boundingSphere = collection._boundingSphere;\n var cull = collection._cull;\n\n for (var i = 0; i < commandsLength; ++i) {\n var drawCommand = DrawCommand.shallowClone(drawCommands[i]);\n drawCommand.instanceCount = instancesLength;\n drawCommand.boundingVolume = boundingSphere;\n drawCommand.cull = cull;\n if (defined(collection._batchTable)) {\n drawCommand.pickId = collection._batchTable.getPickId();\n } else {\n drawCommand.pickId = \"v_pickColor\";\n }\n collection._drawCommands.push(drawCommand);\n }\n}\n\nfunction createBatchIdFunction(batchId) {\n return function () {\n return batchId;\n };\n}\n\nfunction createPickColorFunction(color) {\n return function () {\n return color;\n };\n}\n\nfunction createCommandsNonInstanced(collection, drawCommands) {\n // When instancing is disabled, create commands for every instance.\n var instances = collection._instances;\n var commandsLength = drawCommands.length;\n var instancesLength = collection.length;\n var batchTable = collection._batchTable;\n var usesBatchTable = defined(batchTable);\n var cull = collection._cull;\n\n for (var i = 0; i < commandsLength; ++i) {\n for (var j = 0; j < instancesLength; ++j) {\n var drawCommand = DrawCommand.shallowClone(drawCommands[i]);\n drawCommand.modelMatrix = new Matrix4(); // Updated in updateCommandsNonInstanced\n drawCommand.boundingVolume = new BoundingSphere(); // Updated in updateCommandsNonInstanced\n drawCommand.cull = cull;\n drawCommand.uniformMap = clone(drawCommand.uniformMap);\n if (usesBatchTable) {\n drawCommand.uniformMap.a_batchId = createBatchIdFunction(\n instances[j]._instanceId\n );\n } else {\n var pickId = collection._pickIds[j];\n drawCommand.uniformMap.czm_pickColor = createPickColorFunction(\n pickId.color\n );\n }\n collection._drawCommands.push(drawCommand);\n }\n }\n}\n\nfunction updateCommandsNonInstanced(collection) {\n var modelCommands = collection._modelCommands;\n var commandsLength = modelCommands.length;\n var instancesLength = collection.length;\n var collectionTransform = collection._rtcTransform;\n var collectionCenter = collection._center;\n\n for (var i = 0; i < commandsLength; ++i) {\n var modelCommand = modelCommands[i];\n for (var j = 0; j < instancesLength; ++j) {\n var commandIndex = i * instancesLength + j;\n var drawCommand = collection._drawCommands[commandIndex];\n var instanceMatrix = Matrix4.clone(\n collection._instances[j]._modelMatrix,\n scratchMatrix\n );\n instanceMatrix[12] -= collectionCenter.x;\n instanceMatrix[13] -= collectionCenter.y;\n instanceMatrix[14] -= collectionCenter.z;\n instanceMatrix = Matrix4.multiply(\n collectionTransform,\n instanceMatrix,\n scratchMatrix\n );\n var nodeMatrix = modelCommand.modelMatrix;\n var modelMatrix = drawCommand.modelMatrix;\n Matrix4.multiply(instanceMatrix, nodeMatrix, modelMatrix);\n\n var nodeBoundingSphere = modelCommand.boundingVolume;\n var boundingSphere = drawCommand.boundingVolume;\n BoundingSphere.transform(\n nodeBoundingSphere,\n instanceMatrix,\n boundingSphere\n );\n }\n }\n}\n\nfunction getModelCommands(model) {\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n\n var drawCommands = [];\n\n for (var i = 0; i < length; ++i) {\n var nc = nodeCommands[i];\n if (nc.show) {\n drawCommands.push(nc.command);\n }\n }\n\n return drawCommands;\n}\n\nfunction commandsDirty(model) {\n var nodeCommands = model._nodeCommands;\n var length = nodeCommands.length;\n\n var commandsDirty = false;\n\n for (var i = 0; i < length; i++) {\n var nc = nodeCommands[i];\n if (nc.command.dirty) {\n nc.command.dirty = false;\n commandsDirty = true;\n }\n }\n return commandsDirty;\n}\n\nfunction generateModelCommands(modelInstanceCollection, instancingSupported) {\n modelInstanceCollection._drawCommands = [];\n\n var modelCommands = getModelCommands(modelInstanceCollection._model);\n if (instancingSupported) {\n createCommands(modelInstanceCollection, modelCommands);\n } else {\n createCommandsNonInstanced(modelInstanceCollection, modelCommands);\n updateCommandsNonInstanced(modelInstanceCollection);\n }\n}\n\nfunction updateShadows(collection, force) {\n if (collection.shadows !== collection._shadows || force) {\n collection._shadows = collection.shadows;\n\n var castShadows = ShadowMode.castShadows(collection.shadows);\n var receiveShadows = ShadowMode.receiveShadows(collection.shadows);\n\n var drawCommands = collection._drawCommands;\n var length = drawCommands.length;\n for (var i = 0; i < length; ++i) {\n var drawCommand = drawCommands[i];\n drawCommand.castShadows = castShadows;\n drawCommand.receiveShadows = receiveShadows;\n }\n }\n}\n\nModelInstanceCollection.prototype.update = function (frameState) {\n if (frameState.mode === SceneMode.MORPHING) {\n return;\n }\n\n if (!this.show) {\n return;\n }\n\n if (this.length === 0) {\n return;\n }\n\n var context = frameState.context;\n\n if (this._state === LoadState.NEEDS_LOAD) {\n this._state = LoadState.LOADING;\n this._instancingSupported = context.instancedArrays;\n createModel(this, context);\n var that = this;\n this._model.readyPromise.otherwise(function (error) {\n that._state = LoadState.FAILED;\n that._readyPromise.reject(error);\n });\n }\n\n var instancingSupported = this._instancingSupported;\n var model = this._model;\n\n model.imageBasedLightingFactor = this.imageBasedLightingFactor;\n model.lightColor = this.lightColor;\n model.luminanceAtZenith = this.luminanceAtZenith;\n model.sphericalHarmonicCoefficients = this.sphericalHarmonicCoefficients;\n model.specularEnvironmentMaps = this.specularEnvironmentMaps;\n\n model.update(frameState);\n\n if (model.ready && this._state === LoadState.LOADING) {\n this._state = LoadState.LOADED;\n this._ready = true;\n\n // Expand bounding volume to fit the radius of the loaded model including the model's offset from the center\n var modelRadius =\n model.boundingSphere.radius +\n Cartesian3.magnitude(model.boundingSphere.center);\n this._boundingSphere.radius += modelRadius;\n this._modelCommands = getModelCommands(model);\n\n generateModelCommands(this, instancingSupported);\n\n this._readyPromise.resolve(this);\n return;\n }\n\n if (this._state !== LoadState.LOADED) {\n return;\n }\n\n var modeChanged = frameState.mode !== this._mode;\n var modelMatrix = this.modelMatrix;\n var modelMatrixChanged = !Matrix4.equals(this._modelMatrix, modelMatrix);\n\n if (modeChanged || modelMatrixChanged) {\n this._mode = frameState.mode;\n Matrix4.clone(modelMatrix, this._modelMatrix);\n var rtcTransform = Matrix4.multiplyByTranslation(\n this._modelMatrix,\n this._center,\n this._rtcTransform\n );\n if (this._mode !== SceneMode.SCENE3D) {\n rtcTransform = Transforms.basisTo2D(\n frameState.mapProjection,\n rtcTransform,\n rtcTransform\n );\n }\n Matrix4.getTranslation(rtcTransform, this._boundingSphere.center);\n }\n\n if (instancingSupported && this._dirty) {\n // If at least one instance has moved assume the collection is now dynamic\n this._dynamic = true;\n this._dirty = false;\n\n // PERFORMANCE_IDEA: only update dirty sub-sections instead of the whole collection\n updateVertexBuffer(this);\n }\n\n // If the model was set to rebuild shaders during update, rebuild instanced commands.\n var modelCommandsDirty = commandsDirty(model);\n if (modelCommandsDirty) {\n generateModelCommands(this, instancingSupported);\n }\n\n // If any node changes due to an animation, update the commands. This could be inefficient if the model is\n // composed of many nodes and only one changes, however it is probably fine in the general use case.\n // Only applies when instancing is disabled. The instanced shader automatically handles node transformations.\n if (\n !instancingSupported &&\n (model.dirty || this._dirty || modeChanged || modelMatrixChanged)\n ) {\n updateCommandsNonInstanced(this);\n }\n\n updateShadows(this, modelCommandsDirty);\n updateWireframe(this, modelCommandsDirty);\n updateBackFaceCulling(this, modelCommandsDirty);\n updateShowBoundingVolume(this, modelCommandsDirty);\n\n var passes = frameState.passes;\n if (!passes.render && !passes.pick) {\n return;\n }\n\n var commandList = frameState.commandList;\n var commands = this._drawCommands;\n var commandsLength = commands.length;\n\n for (var i = 0; i < commandsLength; ++i) {\n commandList.push(commands[i]);\n }\n};\n\nModelInstanceCollection.prototype.isDestroyed = function () {\n return false;\n};\n\nModelInstanceCollection.prototype.destroy = function () {\n this._model = this._model && this._model.destroy();\n\n var pickIds = this._pickIds;\n if (defined(pickIds)) {\n var length = pickIds.length;\n for (var i = 0; i < length; ++i) {\n pickIds[i].destroy();\n }\n }\n\n return destroyObject(this);\n};\nexport default ModelInstanceCollection;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport TranslationRotationScale from \"../Core/TranslationRotationScale.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport Axis from \"./Axis.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport ModelInstanceCollection from \"./ModelInstanceCollection.js\";\nimport ModelAnimationLoop from \"./ModelAnimationLoop.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Instanced3DModel|Instanced 3D Model}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Instanced3DModel3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Instanced3DModel3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._modelInstanceCollection = undefined;\n this._batchTable = undefined;\n this._features = undefined;\n\n this.featurePropertiesDirty = false;\n\n initialize(this, arrayBuffer, byteOffset);\n}\n\n// This can be overridden for testing purposes\nInstanced3DModel3DTileContent._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Instanced3DModel3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return this._batchTable.featuresLength;\n },\n },\n\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n var model = this._modelInstanceCollection._model;\n if (defined(model)) {\n return model.trianglesLength;\n }\n return 0;\n },\n },\n\n geometryByteLength: {\n get: function () {\n var model = this._modelInstanceCollection._model;\n if (defined(model)) {\n return model.geometryByteLength;\n }\n return 0;\n },\n },\n\n texturesByteLength: {\n get: function () {\n var model = this._modelInstanceCollection._model;\n if (defined(model)) {\n return model.texturesByteLength;\n }\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return this._batchTable.memorySizeInBytes;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._modelInstanceCollection.readyPromise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return this._batchTable;\n },\n },\n});\n\nfunction getPickIdCallback(content) {\n return function () {\n return content._batchTable.getPickId();\n };\n}\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\nvar propertyScratch1 = new Array(4);\nvar propertyScratch2 = new Array(4);\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n var byteStart = defaultValue(byteOffset, 0);\n byteOffset = byteStart;\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Instanced 3D Model version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var byteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableJsonByteLength = view.getUint32(byteOffset, true);\n if (featureTableJsonByteLength === 0) {\n throw new RuntimeError(\n \"featureTableJsonByteLength is zero, the feature table must be defined.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var gltfFormat = view.getUint32(byteOffset, true);\n if (gltfFormat !== 1 && gltfFormat !== 0) {\n throw new RuntimeError(\n \"Only glTF format 0 (uri) or 1 (embedded) are supported. Format \" +\n gltfFormat +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var featureTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n featureTableJsonByteLength\n );\n var featureTableJson = JSON.parse(featureTableString);\n byteOffset += featureTableJsonByteLength;\n\n var featureTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n featureTableBinaryByteLength\n );\n byteOffset += featureTableBinaryByteLength;\n\n var featureTable = new Cesium3DTileFeatureTable(\n featureTableJson,\n featureTableBinary\n );\n var instancesLength = featureTable.getGlobalProperty(\"INSTANCES_LENGTH\");\n featureTable.featuresLength = instancesLength;\n\n if (!defined(instancesLength)) {\n throw new RuntimeError(\n \"Feature table global property: INSTANCES_LENGTH must be defined\"\n );\n }\n\n var batchTableJson;\n var batchTableBinary;\n if (batchTableJsonByteLength > 0) {\n var batchTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n batchTableJsonByteLength\n );\n batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJsonByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n batchTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n batchTableBinaryByteLength\n );\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n content._batchTable = new Cesium3DTileBatchTable(\n content,\n instancesLength,\n batchTableJson,\n batchTableBinary\n );\n\n var gltfByteLength = byteStart + byteLength - byteOffset;\n if (gltfByteLength === 0) {\n throw new RuntimeError(\n \"glTF byte length is zero, i3dm must have a glTF to instance.\"\n );\n }\n\n var gltfView;\n if (byteOffset % 4 === 0) {\n gltfView = new Uint8Array(arrayBuffer, byteOffset, gltfByteLength);\n } else {\n // Create a copy of the glb so that it is 4-byte aligned\n Instanced3DModel3DTileContent._deprecationWarning(\n \"i3dm-glb-unaligned\",\n \"The embedded glb is not aligned to a 4-byte boundary.\"\n );\n gltfView = new Uint8Array(\n uint8Array.subarray(byteOffset, byteOffset + gltfByteLength)\n );\n }\n\n var tileset = content._tileset;\n\n // Create model instance collection\n var collectionOptions = {\n instances: new Array(instancesLength),\n batchTable: content._batchTable,\n cull: false, // Already culled by 3D Tiles\n url: undefined,\n requestType: RequestType.TILES3D,\n gltf: undefined,\n basePath: undefined,\n incrementallyLoadTextures: false,\n upAxis: tileset._gltfUpAxis,\n forwardAxis: Axis.X,\n opaquePass: Pass.CESIUM_3D_TILE, // Draw opaque portions during the 3D Tiles pass\n pickIdLoaded: getPickIdCallback(content),\n imageBasedLightingFactor: tileset.imageBasedLightingFactor,\n lightColor: tileset.lightColor,\n luminanceAtZenith: tileset.luminanceAtZenith,\n sphericalHarmonicCoefficients: tileset.sphericalHarmonicCoefficients,\n specularEnvironmentMaps: tileset.specularEnvironmentMaps,\n backFaceCulling: tileset.backFaceCulling,\n };\n\n if (gltfFormat === 0) {\n var gltfUrl = getStringFromTypedArray(gltfView);\n\n // We need to remove padding from the end of the model URL in case this tile was part of a composite tile.\n // This removes all white space and null characters from the end of the string.\n gltfUrl = gltfUrl.replace(/[\\s\\0]+$/, \"\");\n collectionOptions.url = content._resource.getDerivedResource({\n url: gltfUrl,\n });\n } else {\n collectionOptions.gltf = gltfView;\n collectionOptions.basePath = content._resource.clone();\n }\n\n var eastNorthUp = featureTable.getGlobalProperty(\"EAST_NORTH_UP\");\n\n var rtcCenter;\n var rtcCenterArray = featureTable.getGlobalProperty(\n \"RTC_CENTER\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (defined(rtcCenterArray)) {\n rtcCenter = Cartesian3.unpack(rtcCenterArray);\n }\n\n var instances = collectionOptions.instances;\n var instancePosition = new Cartesian3();\n var instancePositionArray = new Array(3);\n var instanceNormalRight = new Cartesian3();\n var instanceNormalUp = new Cartesian3();\n var instanceNormalForward = new Cartesian3();\n var instanceRotation = new Matrix3();\n var instanceQuaternion = new Quaternion();\n var instanceScale = new Cartesian3();\n var instanceTranslationRotationScale = new TranslationRotationScale();\n var instanceTransform = new Matrix4();\n for (var i = 0; i < instancesLength; i++) {\n // Get the instance position\n var position = featureTable.getProperty(\n \"POSITION\",\n ComponentDatatype.FLOAT,\n 3,\n i,\n propertyScratch1\n );\n if (!defined(position)) {\n position = instancePositionArray;\n var positionQuantized = featureTable.getProperty(\n \"POSITION_QUANTIZED\",\n ComponentDatatype.UNSIGNED_SHORT,\n 3,\n i,\n propertyScratch1\n );\n if (!defined(positionQuantized)) {\n throw new RuntimeError(\n \"Either POSITION or POSITION_QUANTIZED must be defined for each instance.\"\n );\n }\n var quantizedVolumeOffset = featureTable.getGlobalProperty(\n \"QUANTIZED_VOLUME_OFFSET\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (!defined(quantizedVolumeOffset)) {\n throw new RuntimeError(\n \"Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.\"\n );\n }\n var quantizedVolumeScale = featureTable.getGlobalProperty(\n \"QUANTIZED_VOLUME_SCALE\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (!defined(quantizedVolumeScale)) {\n throw new RuntimeError(\n \"Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.\"\n );\n }\n for (var j = 0; j < 3; j++) {\n position[j] =\n (positionQuantized[j] / 65535.0) * quantizedVolumeScale[j] +\n quantizedVolumeOffset[j];\n }\n }\n Cartesian3.unpack(position, 0, instancePosition);\n if (defined(rtcCenter)) {\n Cartesian3.add(instancePosition, rtcCenter, instancePosition);\n }\n instanceTranslationRotationScale.translation = instancePosition;\n\n // Get the instance rotation\n var normalUp = featureTable.getProperty(\n \"NORMAL_UP\",\n ComponentDatatype.FLOAT,\n 3,\n i,\n propertyScratch1\n );\n var normalRight = featureTable.getProperty(\n \"NORMAL_RIGHT\",\n ComponentDatatype.FLOAT,\n 3,\n i,\n propertyScratch2\n );\n var hasCustomOrientation = false;\n if (defined(normalUp)) {\n if (!defined(normalRight)) {\n throw new RuntimeError(\n \"To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.\"\n );\n }\n Cartesian3.unpack(normalUp, 0, instanceNormalUp);\n Cartesian3.unpack(normalRight, 0, instanceNormalRight);\n hasCustomOrientation = true;\n } else {\n var octNormalUp = featureTable.getProperty(\n \"NORMAL_UP_OCT32P\",\n ComponentDatatype.UNSIGNED_SHORT,\n 2,\n i,\n propertyScratch1\n );\n var octNormalRight = featureTable.getProperty(\n \"NORMAL_RIGHT_OCT32P\",\n ComponentDatatype.UNSIGNED_SHORT,\n 2,\n i,\n propertyScratch2\n );\n if (defined(octNormalUp)) {\n if (!defined(octNormalRight)) {\n throw new RuntimeError(\n \"To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.\"\n );\n }\n AttributeCompression.octDecodeInRange(\n octNormalUp[0],\n octNormalUp[1],\n 65535,\n instanceNormalUp\n );\n AttributeCompression.octDecodeInRange(\n octNormalRight[0],\n octNormalRight[1],\n 65535,\n instanceNormalRight\n );\n hasCustomOrientation = true;\n } else if (eastNorthUp) {\n Transforms.eastNorthUpToFixedFrame(\n instancePosition,\n Ellipsoid.WGS84,\n instanceTransform\n );\n Matrix4.getMatrix3(instanceTransform, instanceRotation);\n } else {\n Matrix3.clone(Matrix3.IDENTITY, instanceRotation);\n }\n }\n if (hasCustomOrientation) {\n Cartesian3.cross(\n instanceNormalRight,\n instanceNormalUp,\n instanceNormalForward\n );\n Cartesian3.normalize(instanceNormalForward, instanceNormalForward);\n Matrix3.setColumn(\n instanceRotation,\n 0,\n instanceNormalRight,\n instanceRotation\n );\n Matrix3.setColumn(\n instanceRotation,\n 1,\n instanceNormalUp,\n instanceRotation\n );\n Matrix3.setColumn(\n instanceRotation,\n 2,\n instanceNormalForward,\n instanceRotation\n );\n }\n Quaternion.fromRotationMatrix(instanceRotation, instanceQuaternion);\n instanceTranslationRotationScale.rotation = instanceQuaternion;\n\n // Get the instance scale\n instanceScale = Cartesian3.fromElements(1.0, 1.0, 1.0, instanceScale);\n var scale = featureTable.getProperty(\n \"SCALE\",\n ComponentDatatype.FLOAT,\n 1,\n i\n );\n if (defined(scale)) {\n Cartesian3.multiplyByScalar(instanceScale, scale, instanceScale);\n }\n var nonUniformScale = featureTable.getProperty(\n \"SCALE_NON_UNIFORM\",\n ComponentDatatype.FLOAT,\n 3,\n i,\n propertyScratch1\n );\n if (defined(nonUniformScale)) {\n instanceScale.x *= nonUniformScale[0];\n instanceScale.y *= nonUniformScale[1];\n instanceScale.z *= nonUniformScale[2];\n }\n instanceTranslationRotationScale.scale = instanceScale;\n\n // Get the batchId\n var batchId = featureTable.getProperty(\n \"BATCH_ID\",\n ComponentDatatype.UNSIGNED_SHORT,\n 1,\n i\n );\n if (!defined(batchId)) {\n // If BATCH_ID semantic is undefined, batchId is just the instance number\n batchId = i;\n }\n\n // Create the model matrix and the instance\n Matrix4.fromTranslationRotationScale(\n instanceTranslationRotationScale,\n instanceTransform\n );\n var modelMatrix = instanceTransform.clone();\n instances[i] = {\n modelMatrix: modelMatrix,\n batchId: batchId,\n };\n }\n\n content._modelInstanceCollection = new ModelInstanceCollection(\n collectionOptions\n );\n content._modelInstanceCollection.readyPromise.then(function (collection) {\n collection.activeAnimations.addAll({\n loop: ModelAnimationLoop.REPEAT,\n });\n });\n}\n\nfunction createFeatures(content) {\n var featuresLength = content.featuresLength;\n if (!defined(content._features) && featuresLength > 0) {\n var features = new Array(featuresLength);\n for (var i = 0; i < featuresLength; ++i) {\n features[i] = new Cesium3DTileFeature(content, i);\n }\n content._features = features;\n }\n}\n\nInstanced3DModel3DTileContent.prototype.hasProperty = function (batchId, name) {\n return this._batchTable.hasProperty(batchId, name);\n};\n\nInstanced3DModel3DTileContent.prototype.getFeature = function (batchId) {\n var featuresLength = this.featuresLength;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n (featuresLength - 1) +\n \").\"\n );\n }\n //>>includeEnd('debug');\n\n createFeatures(this);\n return this._features[batchId];\n};\n\nInstanced3DModel3DTileContent.prototype.applyDebugSettings = function (\n enabled,\n color\n) {\n color = enabled ? color : Color.WHITE;\n this._batchTable.setAllColor(color);\n};\n\nInstanced3DModel3DTileContent.prototype.applyStyle = function (style) {\n this._batchTable.applyStyle(style);\n};\n\nInstanced3DModel3DTileContent.prototype.update = function (\n tileset,\n frameState\n) {\n var commandStart = frameState.commandList.length;\n\n // In the PROCESSING state we may be calling update() to move forward\n // the content's resource loading. In the READY state, it will\n // actually generate commands.\n this._batchTable.update(tileset, frameState);\n this._modelInstanceCollection.modelMatrix = this._tile.computedTransform;\n this._modelInstanceCollection.shadows = this._tileset.shadows;\n this._modelInstanceCollection.lightColor = this._tileset.lightColor;\n this._modelInstanceCollection.luminanceAtZenith = this._tileset.luminanceAtZenith;\n this._modelInstanceCollection.sphericalHarmonicCoefficients = this._tileset.sphericalHarmonicCoefficients;\n this._modelInstanceCollection.specularEnvironmentMaps = this._tileset.specularEnvironmentMaps;\n this._modelInstanceCollection.backFaceCulling = this._tileset.backFaceCulling;\n this._modelInstanceCollection.debugWireframe = this._tileset.debugWireframe;\n\n var model = this._modelInstanceCollection._model;\n\n if (defined(model)) {\n // Update for clipping planes\n var tilesetClippingPlanes = this._tileset.clippingPlanes;\n model.clippingPlanesOriginMatrix = this._tileset.clippingPlanesOriginMatrix;\n if (defined(tilesetClippingPlanes) && this._tile.clippingPlanesDirty) {\n // Dereference the clipping planes from the model if they are irrelevant - saves on shading\n // Link/Dereference directly to avoid ownership checks.\n model._clippingPlanes =\n tilesetClippingPlanes.enabled && this._tile._isClipped\n ? tilesetClippingPlanes\n : undefined;\n }\n\n // If the model references a different ClippingPlaneCollection due to the tileset's collection being replaced with a\n // ClippingPlaneCollection that gives this tile the same clipping status, update the model to use the new ClippingPlaneCollection.\n if (\n defined(tilesetClippingPlanes) &&\n defined(model._clippingPlanes) &&\n model._clippingPlanes !== tilesetClippingPlanes\n ) {\n model._clippingPlanes = tilesetClippingPlanes;\n }\n }\n\n this._modelInstanceCollection.update(frameState);\n\n // If any commands were pushed, add derived commands\n var commandEnd = frameState.commandList.length;\n if (\n commandStart < commandEnd &&\n (frameState.passes.render || frameState.passes.pick)\n ) {\n this._batchTable.addDerivedCommands(frameState, commandStart, false);\n }\n};\n\nInstanced3DModel3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nInstanced3DModel3DTileContent.prototype.destroy = function () {\n this._modelInstanceCollection =\n this._modelInstanceCollection && this._modelInstanceCollection.destroy();\n this._batchTable = this._batchTable && this._batchTable.destroy();\n\n return destroyObject(this);\n};\nexport default Instanced3DModel3DTileContent;\n","/**\n * The refinement approach for a tile.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#refinement|Refinement}\n * in the 3D Tiles spec.\n * </p>\n *\n * @enum {Number}\n *\n * @private\n */\nvar Cesium3DTileRefine = {\n /**\n * Render this tile and, if it doesn't meet the screen space error, also refine to its children.\n *\n * @type {Number}\n * @constant\n */\n ADD: 0,\n\n /**\n * Render this tile or, if it doesn't meet the screen space error, refine to its descendants instead.\n *\n * @type {Number}\n * @constant\n */\n REPLACE: 1,\n};\nexport default Object.freeze(Cesium3DTileRefine);\n","import arraySlice from \"../Core/arraySlice.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport DracoLoader from \"./DracoLoader.js\";\nimport getClipAndStyleCode from \"./getClipAndStyleCode.js\";\nimport getClippingFunction from \"./getClippingFunction.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport StencilConstants from \"./StencilConstants.js\";\n\nvar DecodingState = {\n NEEDS_DECODE: 0,\n DECODING: 1,\n READY: 2,\n FAILED: 3,\n};\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/PointCloud|Point Cloud}\n * tile. Used internally by {@link PointCloud3DTileContent} and {@link TimeDynamicPointCloud}.\n *\n * @alias PointCloud\n * @constructor\n *\n * @see PointCloud3DTileContent\n * @see TimeDynamicPointCloud\n *\n * @private\n */\nfunction PointCloud(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.arrayBuffer\", options.arrayBuffer);\n //>>includeEnd('debug');\n\n // Hold onto the payload until the render resources are created\n this._parsedContent = undefined;\n\n this._drawCommand = undefined;\n this._isTranslucent = false;\n this._styleTranslucent = false;\n this._constantColor = Color.clone(Color.DARKGRAY);\n this._highlightColor = Color.clone(Color.WHITE);\n this._pointSize = 1.0;\n\n this._rtcCenter = undefined;\n this._quantizedVolumeScale = undefined;\n this._quantizedVolumeOffset = undefined;\n\n // These values are used to regenerate the shader when the style changes\n this._styleableShaderAttributes = undefined;\n this._isQuantized = false;\n this._isOctEncoded16P = false;\n this._isRGB565 = false;\n this._hasColors = false;\n this._hasNormals = false;\n this._hasBatchIds = false;\n\n // Draco\n this._decodingState = DecodingState.READY;\n this._dequantizeInShader = true;\n this._isQuantizedDraco = false;\n this._isOctEncodedDraco = false;\n this._quantizedRange = 0.0;\n this._octEncodedRange = 0.0;\n\n // Use per-point normals to hide back-facing points.\n this.backFaceCulling = false;\n this._backFaceCulling = false;\n\n // Whether to enable normal shading\n this.normalShading = true;\n this._normalShading = true;\n\n this._opaqueRenderState = undefined;\n this._translucentRenderState = undefined;\n\n this._mode = undefined;\n\n this._ready = false;\n this._readyPromise = when.defer();\n this._pointsLength = 0;\n this._geometryByteLength = 0;\n\n this._vertexShaderLoaded = options.vertexShaderLoaded;\n this._fragmentShaderLoaded = options.fragmentShaderLoaded;\n this._uniformMapLoaded = options.uniformMapLoaded;\n this._batchTableLoaded = options.batchTableLoaded;\n this._pickIdLoaded = options.pickIdLoaded;\n this._opaquePass = defaultValue(options.opaquePass, Pass.OPAQUE);\n this._cull = defaultValue(options.cull, true);\n\n this.style = undefined;\n this._style = undefined;\n this.styleDirty = false;\n\n this.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n this.time = 0.0; // For styling\n this.shadows = ShadowMode.ENABLED;\n this._boundingSphere = undefined;\n\n this.clippingPlanes = undefined;\n this.isClipped = false;\n this.clippingPlanesDirty = false;\n // If defined, use this matrix to position the clipping planes instead of the modelMatrix.\n // This is so that when point clouds are part of a tileset they all get clipped relative\n // to the root tile.\n this.clippingPlanesOriginMatrix = undefined;\n\n this.attenuation = false;\n this._attenuation = false;\n\n // Options for geometric error based attenuation\n this.geometricError = 0.0;\n this.geometricErrorScale = 1.0;\n this.maximumAttenuation = this._pointSize;\n\n initialize(this, options);\n}\n\nObject.defineProperties(PointCloud.prototype, {\n pointsLength: {\n get: function () {\n return this._pointsLength;\n },\n },\n\n geometryByteLength: {\n get: function () {\n return this._geometryByteLength;\n },\n },\n\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n color: {\n get: function () {\n return Color.clone(this._highlightColor);\n },\n set: function (value) {\n this._highlightColor = Color.clone(value, this._highlightColor);\n },\n },\n\n boundingSphere: {\n get: function () {\n if (defined(this._drawCommand)) {\n return this._drawCommand.boundingVolume;\n }\n return undefined;\n },\n set: function (value) {\n this._boundingSphere = BoundingSphere.clone(value, this._boundingSphere);\n },\n },\n});\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction initialize(pointCloud, options) {\n var arrayBuffer = options.arrayBuffer;\n var byteOffset = defaultValue(options.byteOffset, 0);\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Point Cloud tile version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n // Skip byteLength\n byteOffset += sizeOfUint32;\n\n var featureTableJsonByteLength = view.getUint32(byteOffset, true);\n if (featureTableJsonByteLength === 0) {\n throw new RuntimeError(\n \"Feature table must have a byte length greater than zero\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var batchTableJsonByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n featureTableJsonByteLength\n );\n var featureTableJson = JSON.parse(featureTableString);\n byteOffset += featureTableJsonByteLength;\n\n var featureTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n featureTableBinaryByteLength\n );\n byteOffset += featureTableBinaryByteLength;\n\n // Get the batch table JSON and binary\n var batchTableJson;\n var batchTableBinary;\n if (batchTableJsonByteLength > 0) {\n // Has a batch table JSON\n var batchTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n batchTableJsonByteLength\n );\n batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJsonByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n batchTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n batchTableBinaryByteLength\n );\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n var featureTable = new Cesium3DTileFeatureTable(\n featureTableJson,\n featureTableBinary\n );\n\n var pointsLength = featureTable.getGlobalProperty(\"POINTS_LENGTH\");\n featureTable.featuresLength = pointsLength;\n\n if (!defined(pointsLength)) {\n throw new RuntimeError(\n \"Feature table global property: POINTS_LENGTH must be defined\"\n );\n }\n\n var rtcCenter = featureTable.getGlobalProperty(\n \"RTC_CENTER\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (defined(rtcCenter)) {\n pointCloud._rtcCenter = Cartesian3.unpack(rtcCenter);\n }\n\n var positions;\n var colors;\n var normals;\n var batchIds;\n\n var hasPositions = false;\n var hasColors = false;\n var hasNormals = false;\n var hasBatchIds = false;\n\n var isQuantized = false;\n var isTranslucent = false;\n var isRGB565 = false;\n var isOctEncoded16P = false;\n\n var dracoBuffer;\n var dracoFeatureTableProperties;\n var dracoBatchTableProperties;\n\n var featureTableDraco = defined(featureTableJson.extensions)\n ? featureTableJson.extensions[\"3DTILES_draco_point_compression\"]\n : undefined;\n var batchTableDraco =\n defined(batchTableJson) && defined(batchTableJson.extensions)\n ? batchTableJson.extensions[\"3DTILES_draco_point_compression\"]\n : undefined;\n\n if (defined(batchTableDraco)) {\n dracoBatchTableProperties = batchTableDraco.properties;\n }\n\n if (defined(featureTableDraco)) {\n dracoFeatureTableProperties = featureTableDraco.properties;\n var dracoByteOffset = featureTableDraco.byteOffset;\n var dracoByteLength = featureTableDraco.byteLength;\n if (\n !defined(dracoFeatureTableProperties) ||\n !defined(dracoByteOffset) ||\n !defined(dracoByteLength)\n ) {\n throw new RuntimeError(\n \"Draco properties, byteOffset, and byteLength must be defined\"\n );\n }\n dracoBuffer = arraySlice(\n featureTableBinary,\n dracoByteOffset,\n dracoByteOffset + dracoByteLength\n );\n hasPositions = defined(dracoFeatureTableProperties.POSITION);\n hasColors =\n defined(dracoFeatureTableProperties.RGB) ||\n defined(dracoFeatureTableProperties.RGBA);\n hasNormals = defined(dracoFeatureTableProperties.NORMAL);\n hasBatchIds = defined(dracoFeatureTableProperties.BATCH_ID);\n isTranslucent = defined(dracoFeatureTableProperties.RGBA);\n pointCloud._decodingState = DecodingState.NEEDS_DECODE;\n }\n\n var draco;\n if (defined(dracoBuffer)) {\n draco = {\n buffer: dracoBuffer,\n featureTableProperties: dracoFeatureTableProperties,\n batchTableProperties: dracoBatchTableProperties,\n properties: combine(\n dracoFeatureTableProperties,\n dracoBatchTableProperties\n ),\n dequantizeInShader: pointCloud._dequantizeInShader,\n };\n }\n\n if (!hasPositions) {\n if (defined(featureTableJson.POSITION)) {\n positions = featureTable.getPropertyArray(\n \"POSITION\",\n ComponentDatatype.FLOAT,\n 3\n );\n hasPositions = true;\n } else if (defined(featureTableJson.POSITION_QUANTIZED)) {\n positions = featureTable.getPropertyArray(\n \"POSITION_QUANTIZED\",\n ComponentDatatype.UNSIGNED_SHORT,\n 3\n );\n isQuantized = true;\n hasPositions = true;\n\n var quantizedVolumeScale = featureTable.getGlobalProperty(\n \"QUANTIZED_VOLUME_SCALE\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (!defined(quantizedVolumeScale)) {\n throw new RuntimeError(\n \"Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.\"\n );\n }\n pointCloud._quantizedVolumeScale = Cartesian3.unpack(\n quantizedVolumeScale\n );\n pointCloud._quantizedRange = (1 << 16) - 1;\n\n var quantizedVolumeOffset = featureTable.getGlobalProperty(\n \"QUANTIZED_VOLUME_OFFSET\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (!defined(quantizedVolumeOffset)) {\n throw new RuntimeError(\n \"Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.\"\n );\n }\n pointCloud._quantizedVolumeOffset = Cartesian3.unpack(\n quantizedVolumeOffset\n );\n }\n }\n\n if (!hasColors) {\n if (defined(featureTableJson.RGBA)) {\n colors = featureTable.getPropertyArray(\n \"RGBA\",\n ComponentDatatype.UNSIGNED_BYTE,\n 4\n );\n isTranslucent = true;\n hasColors = true;\n } else if (defined(featureTableJson.RGB)) {\n colors = featureTable.getPropertyArray(\n \"RGB\",\n ComponentDatatype.UNSIGNED_BYTE,\n 3\n );\n hasColors = true;\n } else if (defined(featureTableJson.RGB565)) {\n colors = featureTable.getPropertyArray(\n \"RGB565\",\n ComponentDatatype.UNSIGNED_SHORT,\n 1\n );\n isRGB565 = true;\n hasColors = true;\n }\n }\n\n if (!hasNormals) {\n if (defined(featureTableJson.NORMAL)) {\n normals = featureTable.getPropertyArray(\n \"NORMAL\",\n ComponentDatatype.FLOAT,\n 3\n );\n hasNormals = true;\n } else if (defined(featureTableJson.NORMAL_OCT16P)) {\n normals = featureTable.getPropertyArray(\n \"NORMAL_OCT16P\",\n ComponentDatatype.UNSIGNED_BYTE,\n 2\n );\n isOctEncoded16P = true;\n hasNormals = true;\n }\n }\n\n if (!hasBatchIds) {\n if (defined(featureTableJson.BATCH_ID)) {\n batchIds = featureTable.getPropertyArray(\n \"BATCH_ID\",\n ComponentDatatype.UNSIGNED_SHORT,\n 1\n );\n hasBatchIds = true;\n }\n }\n\n if (!hasPositions) {\n throw new RuntimeError(\n \"Either POSITION or POSITION_QUANTIZED must be defined.\"\n );\n }\n\n if (defined(featureTableJson.CONSTANT_RGBA)) {\n var constantRGBA = featureTable.getGlobalProperty(\n \"CONSTANT_RGBA\",\n ComponentDatatype.UNSIGNED_BYTE,\n 4\n );\n pointCloud._constantColor = Color.fromBytes(\n constantRGBA[0],\n constantRGBA[1],\n constantRGBA[2],\n constantRGBA[3],\n pointCloud._constantColor\n );\n }\n\n if (hasBatchIds) {\n var batchLength = featureTable.getGlobalProperty(\"BATCH_LENGTH\");\n if (!defined(batchLength)) {\n throw new RuntimeError(\n \"Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.\"\n );\n }\n\n if (defined(batchTableBinary)) {\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n }\n\n if (defined(pointCloud._batchTableLoaded)) {\n pointCloud._batchTableLoaded(\n batchLength,\n batchTableJson,\n batchTableBinary\n );\n }\n }\n\n // If points are not batched and there are per-point properties, use these properties for styling purposes\n var styleableProperties;\n if (!hasBatchIds && defined(batchTableBinary)) {\n styleableProperties = Cesium3DTileBatchTable.getBinaryProperties(\n pointsLength,\n batchTableJson,\n batchTableBinary\n );\n }\n\n pointCloud._parsedContent = {\n positions: positions,\n colors: colors,\n normals: normals,\n batchIds: batchIds,\n styleableProperties: styleableProperties,\n draco: draco,\n };\n pointCloud._pointsLength = pointsLength;\n pointCloud._isQuantized = isQuantized;\n pointCloud._isOctEncoded16P = isOctEncoded16P;\n pointCloud._isRGB565 = isRGB565;\n pointCloud._isTranslucent = isTranslucent;\n pointCloud._hasColors = hasColors;\n pointCloud._hasNormals = hasNormals;\n pointCloud._hasBatchIds = hasBatchIds;\n}\n\nvar scratchMin = new Cartesian3();\nvar scratchMax = new Cartesian3();\nvar scratchPosition = new Cartesian3();\nvar randomValues;\n\nfunction getRandomValues(samplesLength) {\n // Use same random values across all runs\n if (!defined(randomValues)) {\n CesiumMath.setRandomNumberSeed(0);\n randomValues = new Array(samplesLength);\n for (var i = 0; i < samplesLength; ++i) {\n randomValues[i] = CesiumMath.nextRandomNumber();\n }\n }\n return randomValues;\n}\n\nfunction computeApproximateBoundingSphereFromPositions(positions) {\n var maximumSamplesLength = 20;\n var pointsLength = positions.length / 3;\n var samplesLength = Math.min(pointsLength, maximumSamplesLength);\n var randomValues = getRandomValues(maximumSamplesLength);\n var maxValue = Number.MAX_VALUE;\n var minValue = -Number.MAX_VALUE;\n var min = Cartesian3.fromElements(maxValue, maxValue, maxValue, scratchMin);\n var max = Cartesian3.fromElements(minValue, minValue, minValue, scratchMax);\n for (var i = 0; i < samplesLength; ++i) {\n var index = Math.floor(randomValues[i] * pointsLength);\n var position = Cartesian3.unpack(positions, index * 3, scratchPosition);\n Cartesian3.minimumByComponent(min, position, min);\n Cartesian3.maximumByComponent(max, position, max);\n }\n\n var boundingSphere = BoundingSphere.fromCornerPoints(min, max);\n boundingSphere.radius += CesiumMath.EPSILON2; // To avoid radius of zero\n return boundingSphere;\n}\n\nfunction prepareVertexAttribute(typedArray, name) {\n // WebGL does not support UNSIGNED_INT, INT, or DOUBLE vertex attributes. Convert these to FLOAT.\n var componentDatatype = ComponentDatatype.fromTypedArray(typedArray);\n if (\n componentDatatype === ComponentDatatype.INT ||\n componentDatatype === ComponentDatatype.UNSIGNED_INT ||\n componentDatatype === ComponentDatatype.DOUBLE\n ) {\n oneTimeWarning(\n \"Cast pnts property to floats\",\n 'Point cloud property \"' +\n name +\n '\" will be casted to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.'\n );\n return new Float32Array(typedArray);\n }\n return typedArray;\n}\n\nvar scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier = new Cartesian4();\nvar scratchQuantizedVolumeScaleAndOctEncodedRange = new Cartesian4();\nvar scratchColor = new Color();\n\nvar positionLocation = 0;\nvar colorLocation = 1;\nvar normalLocation = 2;\nvar batchIdLocation = 3;\nvar numberOfAttributes = 4;\n\nvar scratchClippingPlaneMatrix = new Matrix4();\n\nfunction createResources(pointCloud, frameState) {\n var context = frameState.context;\n var parsedContent = pointCloud._parsedContent;\n var pointsLength = pointCloud._pointsLength;\n var positions = parsedContent.positions;\n var colors = parsedContent.colors;\n var normals = parsedContent.normals;\n var batchIds = parsedContent.batchIds;\n var styleableProperties = parsedContent.styleableProperties;\n var hasStyleableProperties = defined(styleableProperties);\n var isQuantized = pointCloud._isQuantized;\n var isQuantizedDraco = pointCloud._isQuantizedDraco;\n var isOctEncoded16P = pointCloud._isOctEncoded16P;\n var isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n var quantizedRange = pointCloud._quantizedRange;\n var octEncodedRange = pointCloud._octEncodedRange;\n var isRGB565 = pointCloud._isRGB565;\n var isTranslucent = pointCloud._isTranslucent;\n var hasColors = pointCloud._hasColors;\n var hasNormals = pointCloud._hasNormals;\n var hasBatchIds = pointCloud._hasBatchIds;\n\n var componentsPerAttribute;\n var componentDatatype;\n\n var styleableVertexAttributes = [];\n var styleableShaderAttributes = {};\n pointCloud._styleableShaderAttributes = styleableShaderAttributes;\n\n if (hasStyleableProperties) {\n var attributeLocation = numberOfAttributes;\n\n for (var name in styleableProperties) {\n if (styleableProperties.hasOwnProperty(name)) {\n var property = styleableProperties[name];\n var typedArray = prepareVertexAttribute(property.typedArray, name);\n componentsPerAttribute = property.componentCount;\n componentDatatype = ComponentDatatype.fromTypedArray(typedArray);\n\n var vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: typedArray,\n usage: BufferUsage.STATIC_DRAW,\n });\n\n pointCloud._geometryByteLength += vertexBuffer.sizeInBytes;\n\n var vertexAttribute = {\n index: attributeLocation,\n vertexBuffer: vertexBuffer,\n componentsPerAttribute: componentsPerAttribute,\n componentDatatype: componentDatatype,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n };\n\n styleableVertexAttributes.push(vertexAttribute);\n styleableShaderAttributes[name] = {\n location: attributeLocation,\n componentCount: componentsPerAttribute,\n };\n ++attributeLocation;\n }\n }\n }\n\n var positionsVertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: positions,\n usage: BufferUsage.STATIC_DRAW,\n });\n pointCloud._geometryByteLength += positionsVertexBuffer.sizeInBytes;\n\n var colorsVertexBuffer;\n if (hasColors) {\n colorsVertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: colors,\n usage: BufferUsage.STATIC_DRAW,\n });\n pointCloud._geometryByteLength += colorsVertexBuffer.sizeInBytes;\n }\n\n var normalsVertexBuffer;\n if (hasNormals) {\n normalsVertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: normals,\n usage: BufferUsage.STATIC_DRAW,\n });\n pointCloud._geometryByteLength += normalsVertexBuffer.sizeInBytes;\n }\n\n var batchIdsVertexBuffer;\n if (hasBatchIds) {\n batchIds = prepareVertexAttribute(batchIds, \"batchIds\");\n batchIdsVertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: batchIds,\n usage: BufferUsage.STATIC_DRAW,\n });\n pointCloud._geometryByteLength += batchIdsVertexBuffer.sizeInBytes;\n }\n\n var attributes = [];\n\n if (isQuantized) {\n componentDatatype = ComponentDatatype.UNSIGNED_SHORT;\n } else if (isQuantizedDraco) {\n componentDatatype =\n quantizedRange <= 255\n ? ComponentDatatype.UNSIGNED_BYTE\n : ComponentDatatype.UNSIGNED_SHORT;\n } else {\n componentDatatype = ComponentDatatype.FLOAT;\n }\n\n attributes.push({\n index: positionLocation,\n vertexBuffer: positionsVertexBuffer,\n componentsPerAttribute: 3,\n componentDatatype: componentDatatype,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n });\n\n if (pointCloud._cull) {\n if (isQuantized || isQuantizedDraco) {\n pointCloud._boundingSphere = BoundingSphere.fromCornerPoints(\n Cartesian3.ZERO,\n pointCloud._quantizedVolumeScale\n );\n } else {\n pointCloud._boundingSphere = computeApproximateBoundingSphereFromPositions(\n positions\n );\n }\n }\n\n if (hasColors) {\n if (isRGB565) {\n attributes.push({\n index: colorLocation,\n vertexBuffer: colorsVertexBuffer,\n componentsPerAttribute: 1,\n componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n });\n } else {\n var colorComponentsPerAttribute = isTranslucent ? 4 : 3;\n attributes.push({\n index: colorLocation,\n vertexBuffer: colorsVertexBuffer,\n componentsPerAttribute: colorComponentsPerAttribute,\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n normalize: true,\n offsetInBytes: 0,\n strideInBytes: 0,\n });\n }\n }\n\n if (hasNormals) {\n if (isOctEncoded16P) {\n componentsPerAttribute = 2;\n componentDatatype = ComponentDatatype.UNSIGNED_BYTE;\n } else if (isOctEncodedDraco) {\n componentsPerAttribute = 2;\n componentDatatype =\n octEncodedRange <= 255\n ? ComponentDatatype.UNSIGNED_BYTE\n : ComponentDatatype.UNSIGNED_SHORT;\n } else {\n componentsPerAttribute = 3;\n componentDatatype = ComponentDatatype.FLOAT;\n }\n attributes.push({\n index: normalLocation,\n vertexBuffer: normalsVertexBuffer,\n componentsPerAttribute: componentsPerAttribute,\n componentDatatype: componentDatatype,\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n });\n }\n\n if (hasBatchIds) {\n attributes.push({\n index: batchIdLocation,\n vertexBuffer: batchIdsVertexBuffer,\n componentsPerAttribute: 1,\n componentDatatype: ComponentDatatype.fromTypedArray(batchIds),\n normalize: false,\n offsetInBytes: 0,\n strideInBytes: 0,\n });\n }\n\n if (hasStyleableProperties) {\n attributes = attributes.concat(styleableVertexAttributes);\n }\n\n var vertexArray = new VertexArray({\n context: context,\n attributes: attributes,\n });\n\n var opaqueRenderState = {\n depthTest: {\n enabled: true,\n },\n };\n\n if (pointCloud._opaquePass === Pass.CESIUM_3D_TILE) {\n opaqueRenderState.stencilTest = StencilConstants.setCesium3DTileBit();\n opaqueRenderState.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n }\n\n pointCloud._opaqueRenderState = RenderState.fromCache(opaqueRenderState);\n\n pointCloud._translucentRenderState = RenderState.fromCache({\n depthTest: {\n enabled: true,\n },\n depthMask: false,\n blending: BlendingState.ALPHA_BLEND,\n });\n\n pointCloud._drawCommand = new DrawCommand({\n boundingVolume: new BoundingSphere(),\n cull: pointCloud._cull,\n modelMatrix: new Matrix4(),\n primitiveType: PrimitiveType.POINTS,\n vertexArray: vertexArray,\n count: pointsLength,\n shaderProgram: undefined, // Updated in createShaders\n uniformMap: undefined, // Updated in createShaders\n renderState: isTranslucent\n ? pointCloud._translucentRenderState\n : pointCloud._opaqueRenderState,\n pass: isTranslucent ? Pass.TRANSLUCENT : pointCloud._opaquePass,\n owner: pointCloud,\n castShadows: false,\n receiveShadows: false,\n pickId: pointCloud._pickIdLoaded(),\n });\n}\n\nfunction createUniformMap(pointCloud, frameState) {\n var context = frameState.context;\n var isQuantized = pointCloud._isQuantized;\n var isQuantizedDraco = pointCloud._isQuantizedDraco;\n var isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n\n var uniformMap = {\n u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier: function () {\n var scratch = scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier;\n scratch.x = pointCloud._attenuation\n ? pointCloud.maximumAttenuation\n : pointCloud._pointSize;\n scratch.x *= frameState.pixelRatio;\n\n scratch.y = pointCloud.time;\n\n if (pointCloud._attenuation) {\n var frustum = frameState.camera.frustum;\n var depthMultiplier;\n // Attenuation is maximumAttenuation in 2D/ortho\n if (\n frameState.mode === SceneMode.SCENE2D ||\n frustum instanceof OrthographicFrustum\n ) {\n depthMultiplier = Number.POSITIVE_INFINITY;\n } else {\n depthMultiplier =\n context.drawingBufferHeight /\n frameState.camera.frustum.sseDenominator;\n }\n\n scratch.z = pointCloud.geometricError * pointCloud.geometricErrorScale;\n scratch.w = depthMultiplier;\n }\n\n return scratch;\n },\n u_highlightColor: function () {\n return pointCloud._highlightColor;\n },\n u_constantColor: function () {\n return pointCloud._constantColor;\n },\n u_clippingPlanes: function () {\n var clippingPlanes = pointCloud.clippingPlanes;\n var isClipped = pointCloud.isClipped;\n return isClipped ? clippingPlanes.texture : context.defaultTexture;\n },\n u_clippingPlanesEdgeStyle: function () {\n var clippingPlanes = pointCloud.clippingPlanes;\n if (!defined(clippingPlanes)) {\n return Color.TRANSPARENT;\n }\n\n var style = Color.clone(clippingPlanes.edgeColor, scratchColor);\n style.alpha = clippingPlanes.edgeWidth;\n return style;\n },\n u_clippingPlanesMatrix: function () {\n var clippingPlanes = pointCloud.clippingPlanes;\n if (!defined(clippingPlanes)) {\n return Matrix4.IDENTITY;\n }\n\n var clippingPlanesOriginMatrix = defaultValue(\n pointCloud.clippingPlanesOriginMatrix,\n pointCloud._modelMatrix\n );\n Matrix4.multiply(\n context.uniformState.view3D,\n clippingPlanesOriginMatrix,\n scratchClippingPlaneMatrix\n );\n return Matrix4.multiply(\n scratchClippingPlaneMatrix,\n clippingPlanes.modelMatrix,\n scratchClippingPlaneMatrix\n );\n },\n };\n\n if (isQuantized || isQuantizedDraco || isOctEncodedDraco) {\n uniformMap = combine(uniformMap, {\n u_quantizedVolumeScaleAndOctEncodedRange: function () {\n var scratch = scratchQuantizedVolumeScaleAndOctEncodedRange;\n if (defined(pointCloud._quantizedVolumeScale)) {\n var scale = Cartesian3.clone(\n pointCloud._quantizedVolumeScale,\n scratch\n );\n Cartesian3.divideByScalar(scale, pointCloud._quantizedRange, scratch);\n }\n scratch.w = pointCloud._octEncodedRange;\n return scratch;\n },\n });\n }\n\n if (defined(pointCloud._uniformMapLoaded)) {\n uniformMap = pointCloud._uniformMapLoaded(uniformMap);\n }\n\n pointCloud._drawCommand.uniformMap = uniformMap;\n}\n\nfunction getStyleablePropertyIds(source, propertyIds) {\n // Get all the property IDs used by this style\n var regex = /czm_3dtiles_property_(\\d+)/g;\n var matches = regex.exec(source);\n while (matches !== null) {\n var id = parseInt(matches[1]);\n if (propertyIds.indexOf(id) === -1) {\n propertyIds.push(id);\n }\n matches = regex.exec(source);\n }\n}\n\nfunction getBuiltinPropertyNames(source, propertyNames) {\n // Get all the builtin property names used by this style\n var regex = /czm_3dtiles_builtin_property_(\\w+)/g;\n var matches = regex.exec(source);\n while (matches !== null) {\n var name = matches[1];\n if (propertyNames.indexOf(name) === -1) {\n propertyNames.push(name);\n }\n matches = regex.exec(source);\n }\n}\n\nfunction getVertexAttribute(vertexArray, index) {\n var numberOfAttributes = vertexArray.numberOfAttributes;\n for (var i = 0; i < numberOfAttributes; ++i) {\n var attribute = vertexArray.getAttribute(i);\n if (attribute.index === index) {\n return attribute;\n }\n }\n}\n\nvar builtinPropertyNameMap = {\n POSITION: \"czm_3dtiles_builtin_property_POSITION\",\n POSITION_ABSOLUTE: \"czm_3dtiles_builtin_property_POSITION_ABSOLUTE\",\n COLOR: \"czm_3dtiles_builtin_property_COLOR\",\n NORMAL: \"czm_3dtiles_builtin_property_NORMAL\",\n};\n\nfunction modifyStyleFunction(source) {\n // Edit the function header to accept the point position, color, and normal\n var functionHeader =\n \"(\" +\n \"vec3 czm_3dtiles_builtin_property_POSITION, \" +\n \"vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, \" +\n \"vec4 czm_3dtiles_builtin_property_COLOR, \" +\n \"vec3 czm_3dtiles_builtin_property_NORMAL\" +\n \")\";\n\n return source.replace(\"()\", functionHeader);\n}\n\nfunction createShaders(pointCloud, frameState, style) {\n var i;\n var name;\n var attribute;\n\n var context = frameState.context;\n var hasStyle = defined(style);\n var isQuantized = pointCloud._isQuantized;\n var isQuantizedDraco = pointCloud._isQuantizedDraco;\n var isOctEncoded16P = pointCloud._isOctEncoded16P;\n var isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n var isRGB565 = pointCloud._isRGB565;\n var isTranslucent = pointCloud._isTranslucent;\n var hasColors = pointCloud._hasColors;\n var hasNormals = pointCloud._hasNormals;\n var hasBatchIds = pointCloud._hasBatchIds;\n var backFaceCulling = pointCloud._backFaceCulling;\n var normalShading = pointCloud._normalShading;\n var vertexArray = pointCloud._drawCommand.vertexArray;\n var clippingPlanes = pointCloud.clippingPlanes;\n var attenuation = pointCloud._attenuation;\n\n var colorStyleFunction;\n var showStyleFunction;\n var pointSizeStyleFunction;\n var styleTranslucent = isTranslucent;\n\n var propertyNameMap = clone(builtinPropertyNameMap);\n var propertyIdToAttributeMap = {};\n var styleableShaderAttributes = pointCloud._styleableShaderAttributes;\n for (name in styleableShaderAttributes) {\n if (styleableShaderAttributes.hasOwnProperty(name)) {\n attribute = styleableShaderAttributes[name];\n propertyNameMap[name] = \"czm_3dtiles_property_\" + attribute.location;\n propertyIdToAttributeMap[attribute.location] = attribute;\n }\n }\n\n if (hasStyle) {\n var shaderState = {\n translucent: false,\n };\n colorStyleFunction = style.getColorShaderFunction(\n \"getColorFromStyle\",\n propertyNameMap,\n shaderState\n );\n showStyleFunction = style.getShowShaderFunction(\n \"getShowFromStyle\",\n propertyNameMap,\n shaderState\n );\n pointSizeStyleFunction = style.getPointSizeShaderFunction(\n \"getPointSizeFromStyle\",\n propertyNameMap,\n shaderState\n );\n if (defined(colorStyleFunction) && shaderState.translucent) {\n styleTranslucent = true;\n }\n }\n\n pointCloud._styleTranslucent = styleTranslucent;\n\n var hasColorStyle = defined(colorStyleFunction);\n var hasShowStyle = defined(showStyleFunction);\n var hasPointSizeStyle = defined(pointSizeStyleFunction);\n var hasClippedContent = pointCloud.isClipped;\n\n // Get the properties in use by the style\n var styleablePropertyIds = [];\n var builtinPropertyNames = [];\n\n if (hasColorStyle) {\n getStyleablePropertyIds(colorStyleFunction, styleablePropertyIds);\n getBuiltinPropertyNames(colorStyleFunction, builtinPropertyNames);\n colorStyleFunction = modifyStyleFunction(colorStyleFunction);\n }\n if (hasShowStyle) {\n getStyleablePropertyIds(showStyleFunction, styleablePropertyIds);\n getBuiltinPropertyNames(showStyleFunction, builtinPropertyNames);\n showStyleFunction = modifyStyleFunction(showStyleFunction);\n }\n if (hasPointSizeStyle) {\n getStyleablePropertyIds(pointSizeStyleFunction, styleablePropertyIds);\n getBuiltinPropertyNames(pointSizeStyleFunction, builtinPropertyNames);\n pointSizeStyleFunction = modifyStyleFunction(pointSizeStyleFunction);\n }\n\n var usesColorSemantic = builtinPropertyNames.indexOf(\"COLOR\") >= 0;\n var usesNormalSemantic = builtinPropertyNames.indexOf(\"NORMAL\") >= 0;\n\n if (usesNormalSemantic && !hasNormals) {\n throw new RuntimeError(\n \"Style references the NORMAL semantic but the point cloud does not have normals\"\n );\n }\n\n // Disable vertex attributes that aren't used in the style, enable attributes that are\n for (name in styleableShaderAttributes) {\n if (styleableShaderAttributes.hasOwnProperty(name)) {\n attribute = styleableShaderAttributes[name];\n var enabled = styleablePropertyIds.indexOf(attribute.location) >= 0;\n var vertexAttribute = getVertexAttribute(vertexArray, attribute.location);\n vertexAttribute.enabled = enabled;\n }\n }\n\n var usesColors = hasColors && (!hasColorStyle || usesColorSemantic);\n if (hasColors) {\n // Disable the color vertex attribute if the color style does not reference the color semantic\n var colorVertexAttribute = getVertexAttribute(vertexArray, colorLocation);\n colorVertexAttribute.enabled = usesColors;\n }\n\n var usesNormals =\n hasNormals && (normalShading || backFaceCulling || usesNormalSemantic);\n if (hasNormals) {\n // Disable the normal vertex attribute if normals are not used\n var normalVertexAttribute = getVertexAttribute(vertexArray, normalLocation);\n normalVertexAttribute.enabled = usesNormals;\n }\n\n var attributeLocations = {\n a_position: positionLocation,\n };\n if (usesColors) {\n attributeLocations.a_color = colorLocation;\n }\n if (usesNormals) {\n attributeLocations.a_normal = normalLocation;\n }\n if (hasBatchIds) {\n attributeLocations.a_batchId = batchIdLocation;\n }\n\n var attributeDeclarations = \"\";\n\n var length = styleablePropertyIds.length;\n for (i = 0; i < length; ++i) {\n var propertyId = styleablePropertyIds[i];\n attribute = propertyIdToAttributeMap[propertyId];\n var componentCount = attribute.componentCount;\n var attributeName = \"czm_3dtiles_property_\" + propertyId;\n var attributeType;\n if (componentCount === 1) {\n attributeType = \"float\";\n } else {\n attributeType = \"vec\" + componentCount;\n }\n\n attributeDeclarations +=\n \"attribute \" + attributeType + \" \" + attributeName + \"; \\n\";\n attributeLocations[attributeName] = attribute.location;\n }\n\n createUniformMap(pointCloud, frameState);\n\n var vs =\n \"attribute vec3 a_position; \\n\" +\n \"varying vec4 v_color; \\n\" +\n \"uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; \\n\" +\n \"uniform vec4 u_constantColor; \\n\" +\n \"uniform vec4 u_highlightColor; \\n\";\n vs += \"float u_pointSize; \\n\" + \"float u_time; \\n\";\n\n if (attenuation) {\n vs += \"float u_geometricError; \\n\" + \"float u_depthMultiplier; \\n\";\n }\n\n vs += attributeDeclarations;\n\n if (usesColors) {\n if (isTranslucent) {\n vs += \"attribute vec4 a_color; \\n\";\n } else if (isRGB565) {\n vs +=\n \"attribute float a_color; \\n\" +\n \"const float SHIFT_RIGHT_11 = 1.0 / 2048.0; \\n\" +\n \"const float SHIFT_RIGHT_5 = 1.0 / 32.0; \\n\" +\n \"const float SHIFT_LEFT_11 = 2048.0; \\n\" +\n \"const float SHIFT_LEFT_5 = 32.0; \\n\" +\n \"const float NORMALIZE_6 = 1.0 / 64.0; \\n\" +\n \"const float NORMALIZE_5 = 1.0 / 32.0; \\n\";\n } else {\n vs += \"attribute vec3 a_color; \\n\";\n }\n }\n if (usesNormals) {\n if (isOctEncoded16P || isOctEncodedDraco) {\n vs += \"attribute vec2 a_normal; \\n\";\n } else {\n vs += \"attribute vec3 a_normal; \\n\";\n }\n }\n\n if (hasBatchIds) {\n vs += \"attribute float a_batchId; \\n\";\n }\n\n if (isQuantized || isQuantizedDraco || isOctEncodedDraco) {\n vs += \"uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; \\n\";\n }\n\n if (hasColorStyle) {\n vs += colorStyleFunction;\n }\n\n if (hasShowStyle) {\n vs += showStyleFunction;\n }\n\n if (hasPointSizeStyle) {\n vs += pointSizeStyleFunction;\n }\n\n vs +=\n \"void main() \\n\" +\n \"{ \\n\" +\n \" u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; \\n\" +\n \" u_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; \\n\";\n\n if (attenuation) {\n vs +=\n \" u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; \\n\" +\n \" u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; \\n\";\n }\n\n if (usesColors) {\n if (isTranslucent) {\n vs += \" vec4 color = a_color; \\n\";\n } else if (isRGB565) {\n vs +=\n \" float compressed = a_color; \\n\" +\n \" float r = floor(compressed * SHIFT_RIGHT_11); \\n\" +\n \" compressed -= r * SHIFT_LEFT_11; \\n\" +\n \" float g = floor(compressed * SHIFT_RIGHT_5); \\n\" +\n \" compressed -= g * SHIFT_LEFT_5; \\n\" +\n \" float b = compressed; \\n\" +\n \" vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5); \\n\" +\n \" vec4 color = vec4(rgb, 1.0); \\n\";\n } else {\n vs += \" vec4 color = vec4(a_color, 1.0); \\n\";\n }\n } else {\n vs += \" vec4 color = u_constantColor; \\n\";\n }\n\n if (isQuantized || isQuantizedDraco) {\n vs +=\n \" vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; \\n\";\n } else {\n vs += \" vec3 position = a_position; \\n\";\n }\n vs +=\n \" vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); \\n\";\n\n if (usesNormals) {\n if (isOctEncoded16P) {\n vs += \" vec3 normal = czm_octDecode(a_normal); \\n\";\n } else if (isOctEncodedDraco) {\n // Draco oct-encoding decodes to zxy order\n vs +=\n \" vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; \\n\";\n } else {\n vs += \" vec3 normal = a_normal; \\n\";\n }\n vs += \" vec3 normalEC = czm_normal * normal; \\n\";\n } else {\n vs += \" vec3 normal = vec3(1.0); \\n\";\n }\n\n if (hasColorStyle) {\n vs +=\n \" color = getColorFromStyle(position, position_absolute, color, normal); \\n\";\n }\n\n if (hasShowStyle) {\n vs +=\n \" float show = float(getShowFromStyle(position, position_absolute, color, normal)); \\n\";\n }\n\n if (hasPointSizeStyle) {\n vs +=\n \" gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; \\n\";\n } else if (attenuation) {\n vs +=\n \" vec4 positionEC = czm_modelView * vec4(position, 1.0); \\n\" +\n \" float depth = -positionEC.z; \\n\" +\n // compute SSE for this point\n \" gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); \\n\";\n } else {\n vs += \" gl_PointSize = u_pointSize; \\n\";\n }\n\n vs += \" color = color * u_highlightColor; \\n\";\n\n if (usesNormals && normalShading) {\n vs +=\n \" float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); \\n\" +\n \" diffuseStrength = max(diffuseStrength, 0.4); \\n\" + // Apply some ambient lighting\n \" color.xyz *= diffuseStrength * czm_lightColor; \\n\";\n }\n\n vs +=\n \" v_color = color; \\n\" +\n \" gl_Position = czm_modelViewProjection * vec4(position, 1.0); \\n\";\n\n if (usesNormals && backFaceCulling) {\n vs +=\n \" float visible = step(-normalEC.z, 0.0); \\n\" +\n \" gl_Position *= visible; \\n\" +\n \" gl_PointSize *= visible; \\n\";\n }\n\n if (hasShowStyle) {\n vs +=\n \" gl_Position.w *= float(show); \\n\" +\n \" gl_PointSize *= float(show); \\n\";\n }\n\n vs += \"} \\n\";\n\n var fs = \"varying vec4 v_color; \\n\";\n\n if (hasClippedContent) {\n fs +=\n \"uniform sampler2D u_clippingPlanes; \\n\" +\n \"uniform mat4 u_clippingPlanesMatrix; \\n\" +\n \"uniform vec4 u_clippingPlanesEdgeStyle; \\n\";\n fs += \"\\n\";\n fs += getClippingFunction(clippingPlanes, context);\n fs += \"\\n\";\n }\n\n fs +=\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gl_FragColor = czm_gammaCorrect(v_color); \\n\";\n\n if (hasClippedContent) {\n fs += getClipAndStyleCode(\n \"u_clippingPlanes\",\n \"u_clippingPlanesMatrix\",\n \"u_clippingPlanesEdgeStyle\"\n );\n }\n\n fs += \"} \\n\";\n\n if (defined(pointCloud._vertexShaderLoaded)) {\n vs = pointCloud._vertexShaderLoaded(vs);\n }\n\n if (defined(pointCloud._fragmentShaderLoaded)) {\n fs = pointCloud._fragmentShaderLoaded(fs);\n }\n\n var drawCommand = pointCloud._drawCommand;\n if (defined(drawCommand.shaderProgram)) {\n // Destroy the old shader\n drawCommand.shaderProgram.destroy();\n }\n drawCommand.shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n try {\n // Check if the shader compiles correctly. If not there is likely a syntax error with the style.\n drawCommand.shaderProgram._bind();\n } catch (error) {\n // Rephrase the error.\n throw new RuntimeError(\n \"Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.\"\n );\n }\n}\n\nfunction decodeDraco(pointCloud, context) {\n if (pointCloud._decodingState === DecodingState.READY) {\n return false;\n }\n if (pointCloud._decodingState === DecodingState.NEEDS_DECODE) {\n var parsedContent = pointCloud._parsedContent;\n var draco = parsedContent.draco;\n var decodePromise = DracoLoader.decodePointCloud(draco, context);\n if (defined(decodePromise)) {\n pointCloud._decodingState = DecodingState.DECODING;\n decodePromise\n .then(function (result) {\n pointCloud._decodingState = DecodingState.READY;\n var decodedPositions = defined(result.POSITION)\n ? result.POSITION.array\n : undefined;\n var decodedRgb = defined(result.RGB) ? result.RGB.array : undefined;\n var decodedRgba = defined(result.RGBA)\n ? result.RGBA.array\n : undefined;\n var decodedNormals = defined(result.NORMAL)\n ? result.NORMAL.array\n : undefined;\n var decodedBatchIds = defined(result.BATCH_ID)\n ? result.BATCH_ID.array\n : undefined;\n var isQuantizedDraco =\n defined(decodedPositions) &&\n defined(result.POSITION.data.quantization);\n var isOctEncodedDraco =\n defined(decodedNormals) && defined(result.NORMAL.data.quantization);\n if (isQuantizedDraco) {\n // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n var quantization = result.POSITION.data.quantization;\n var range = quantization.range;\n pointCloud._quantizedVolumeScale = Cartesian3.fromElements(\n range,\n range,\n range\n );\n pointCloud._quantizedVolumeOffset = Cartesian3.unpack(\n quantization.minValues\n );\n pointCloud._quantizedRange =\n (1 << quantization.quantizationBits) - 1.0;\n pointCloud._isQuantizedDraco = true;\n }\n if (isOctEncodedDraco) {\n pointCloud._octEncodedRange =\n (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n pointCloud._isOctEncodedDraco = true;\n }\n var styleableProperties = parsedContent.styleableProperties;\n var batchTableProperties = draco.batchTableProperties;\n for (var name in batchTableProperties) {\n if (batchTableProperties.hasOwnProperty(name)) {\n var property = result[name];\n if (!defined(styleableProperties)) {\n styleableProperties = {};\n }\n styleableProperties[name] = {\n typedArray: property.array,\n componentCount: property.data.componentsPerAttribute,\n };\n }\n }\n parsedContent.positions = defaultValue(\n decodedPositions,\n parsedContent.positions\n );\n parsedContent.colors = defaultValue(\n defaultValue(decodedRgba, decodedRgb),\n parsedContent.colors\n );\n parsedContent.normals = defaultValue(\n decodedNormals,\n parsedContent.normals\n );\n parsedContent.batchIds = defaultValue(\n decodedBatchIds,\n parsedContent.batchIds\n );\n parsedContent.styleableProperties = styleableProperties;\n })\n .otherwise(function (error) {\n pointCloud._decodingState = DecodingState.FAILED;\n pointCloud._readyPromise.reject(error);\n });\n }\n }\n return true;\n}\n\nvar scratchComputedTranslation = new Cartesian4();\nvar scratchScale = new Cartesian3();\n\nPointCloud.prototype.update = function (frameState) {\n var context = frameState.context;\n var decoding = decodeDraco(this, context);\n if (decoding) {\n return;\n }\n\n var shadersDirty = false;\n var modelMatrixDirty = !Matrix4.equals(this._modelMatrix, this.modelMatrix);\n\n if (this._mode !== frameState.mode) {\n this._mode = frameState.mode;\n modelMatrixDirty = true;\n }\n\n if (!defined(this._drawCommand)) {\n createResources(this, frameState);\n modelMatrixDirty = true;\n shadersDirty = true;\n this._ready = true;\n this._readyPromise.resolve(this);\n this._parsedContent = undefined; // Unload\n }\n\n if (modelMatrixDirty) {\n Matrix4.clone(this.modelMatrix, this._modelMatrix);\n var modelMatrix = this._drawCommand.modelMatrix;\n Matrix4.clone(this._modelMatrix, modelMatrix);\n\n if (defined(this._rtcCenter)) {\n Matrix4.multiplyByTranslation(modelMatrix, this._rtcCenter, modelMatrix);\n }\n if (defined(this._quantizedVolumeOffset)) {\n Matrix4.multiplyByTranslation(\n modelMatrix,\n this._quantizedVolumeOffset,\n modelMatrix\n );\n }\n\n if (frameState.mode !== SceneMode.SCENE3D) {\n var projection = frameState.mapProjection;\n var translation = Matrix4.getColumn(\n modelMatrix,\n 3,\n scratchComputedTranslation\n );\n if (!Cartesian4.equals(translation, Cartesian4.UNIT_W)) {\n Transforms.basisTo2D(projection, modelMatrix, modelMatrix);\n }\n }\n\n var boundingSphere = this._drawCommand.boundingVolume;\n BoundingSphere.clone(this._boundingSphere, boundingSphere);\n\n if (this._cull) {\n var center = boundingSphere.center;\n Matrix4.multiplyByPoint(modelMatrix, center, center);\n var scale = Matrix4.getScale(modelMatrix, scratchScale);\n boundingSphere.radius *= Cartesian3.maximumComponent(scale);\n }\n }\n\n if (this.clippingPlanesDirty) {\n this.clippingPlanesDirty = false;\n shadersDirty = true;\n }\n\n if (this._attenuation !== this.attenuation) {\n this._attenuation = this.attenuation;\n shadersDirty = true;\n }\n\n if (this.backFaceCulling !== this._backFaceCulling) {\n this._backFaceCulling = this.backFaceCulling;\n shadersDirty = true;\n }\n\n if (this.normalShading !== this._normalShading) {\n this._normalShading = this.normalShading;\n shadersDirty = true;\n }\n\n if (this._style !== this.style || this.styleDirty) {\n this._style = this.style;\n this.styleDirty = false;\n shadersDirty = true;\n }\n\n if (shadersDirty) {\n createShaders(this, frameState, this._style);\n }\n\n this._drawCommand.castShadows = ShadowMode.castShadows(this.shadows);\n this._drawCommand.receiveShadows = ShadowMode.receiveShadows(this.shadows);\n\n // Update the render state\n var isTranslucent =\n this._highlightColor.alpha < 1.0 ||\n this._constantColor.alpha < 1.0 ||\n this._styleTranslucent;\n this._drawCommand.renderState = isTranslucent\n ? this._translucentRenderState\n : this._opaqueRenderState;\n this._drawCommand.pass = isTranslucent ? Pass.TRANSLUCENT : this._opaquePass;\n\n var commandList = frameState.commandList;\n\n var passes = frameState.passes;\n if (passes.render || passes.pick) {\n commandList.push(this._drawCommand);\n }\n};\n\nPointCloud.prototype.isDestroyed = function () {\n return false;\n};\n\nPointCloud.prototype.destroy = function () {\n var command = this._drawCommand;\n if (defined(command)) {\n command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n command.shaderProgram =\n command.shaderProgram && command.shaderProgram.destroy();\n }\n return destroyObject(this);\n};\nexport default PointCloud;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\n\nfunction attachTexture(framebuffer, attachment, texture) {\n var gl = framebuffer._gl;\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n attachment,\n texture._target,\n texture._texture,\n 0\n );\n}\n\nfunction attachRenderbuffer(framebuffer, attachment, renderbuffer) {\n var gl = framebuffer._gl;\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n attachment,\n gl.RENDERBUFFER,\n renderbuffer._getRenderbuffer()\n );\n}\n\n/**\n * Creates a framebuffer with optional initial color, depth, and stencil attachments.\n * Framebuffers are used for render-to-texture effects; they allow us to render to\n * textures in one pass, and read from it in a later pass.\n *\n * @param {Object} options The initial framebuffer attachments as shown in the example below. <code>context</code> is required. The possible properties are <code>colorTextures</code>, <code>colorRenderbuffers</code>, <code>depthTexture</code>, <code>depthRenderbuffer</code>, <code>stencilRenderbuffer</code>, <code>depthStencilTexture</code>, and <code>depthStencilRenderbuffer</code>.\n *\n * @exception {DeveloperError} Cannot have both color texture and color renderbuffer attachments.\n * @exception {DeveloperError} Cannot have both a depth texture and depth renderbuffer attachment.\n * @exception {DeveloperError} Cannot have both a depth-stencil texture and depth-stencil renderbuffer attachment.\n * @exception {DeveloperError} Cannot have both a depth and depth-stencil renderbuffer.\n * @exception {DeveloperError} Cannot have both a stencil and depth-stencil renderbuffer.\n * @exception {DeveloperError} Cannot have both a depth and stencil renderbuffer.\n * @exception {DeveloperError} The color-texture pixel-format must be a color format.\n * @exception {DeveloperError} The depth-texture pixel-format must be DEPTH_COMPONENT.\n * @exception {DeveloperError} The depth-stencil-texture pixel-format must be DEPTH_STENCIL.\n * @exception {DeveloperError} The number of color attachments exceeds the number supported.\n * @exception {DeveloperError} The color-texture pixel datatype is HALF_FLOAT and the WebGL implementation does not support the EXT_color_buffer_half_float extension.\n * @exception {DeveloperError} The color-texture pixel datatype is FLOAT and the WebGL implementation does not support the EXT_color_buffer_float or WEBGL_color_buffer_float extensions.\n *\n * @example\n * // Create a framebuffer with color and depth texture attachments.\n * var width = context.canvas.clientWidth;\n * var height = context.canvas.clientHeight;\n * var framebuffer = new Framebuffer({\n * context : context,\n * colorTextures : [new Texture({\n * context : context,\n * width : width,\n * height : height,\n * pixelFormat : PixelFormat.RGBA\n * })],\n * depthTexture : new Texture({\n * context : context,\n * width : width,\n * height : height,\n * pixelFormat : PixelFormat.DEPTH_COMPONENT,\n * pixelDatatype : PixelDatatype.UNSIGNED_SHORT\n * })\n * });\n *\n * @private\n * @constructor\n */\nfunction Framebuffer(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var context = options.context;\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", context);\n //>>includeEnd('debug');\n\n var gl = context._gl;\n var maximumColorAttachments = ContextLimits.maximumColorAttachments;\n\n this._gl = gl;\n this._framebuffer = gl.createFramebuffer();\n\n this._colorTextures = [];\n this._colorRenderbuffers = [];\n this._activeColorAttachments = [];\n\n this._depthTexture = undefined;\n this._depthRenderbuffer = undefined;\n this._stencilRenderbuffer = undefined;\n this._depthStencilTexture = undefined;\n this._depthStencilRenderbuffer = undefined;\n\n /**\n * When true, the framebuffer owns its attachments so they will be destroyed when\n * {@link Framebuffer#destroy} is called or when a new attachment is assigned\n * to an attachment point.\n *\n * @type {Boolean}\n * @default true\n *\n * @see Framebuffer#destroy\n */\n this.destroyAttachments = defaultValue(options.destroyAttachments, true);\n\n // Throw if a texture and renderbuffer are attached to the same point. This won't\n // cause a WebGL error (because only one will be attached), but is likely a developer error.\n\n //>>includeStart('debug', pragmas.debug);\n if (defined(options.colorTextures) && defined(options.colorRenderbuffers)) {\n throw new DeveloperError(\n \"Cannot have both color texture and color renderbuffer attachments.\"\n );\n }\n if (defined(options.depthTexture) && defined(options.depthRenderbuffer)) {\n throw new DeveloperError(\n \"Cannot have both a depth texture and depth renderbuffer attachment.\"\n );\n }\n if (\n defined(options.depthStencilTexture) &&\n defined(options.depthStencilRenderbuffer)\n ) {\n throw new DeveloperError(\n \"Cannot have both a depth-stencil texture and depth-stencil renderbuffer attachment.\"\n );\n }\n //>>includeEnd('debug');\n\n // Avoid errors defined in Section 6.5 of the WebGL spec\n var depthAttachment =\n defined(options.depthTexture) || defined(options.depthRenderbuffer);\n var depthStencilAttachment =\n defined(options.depthStencilTexture) ||\n defined(options.depthStencilRenderbuffer);\n\n //>>includeStart('debug', pragmas.debug);\n if (depthAttachment && depthStencilAttachment) {\n throw new DeveloperError(\n \"Cannot have both a depth and depth-stencil attachment.\"\n );\n }\n if (defined(options.stencilRenderbuffer) && depthStencilAttachment) {\n throw new DeveloperError(\n \"Cannot have both a stencil and depth-stencil attachment.\"\n );\n }\n if (depthAttachment && defined(options.stencilRenderbuffer)) {\n throw new DeveloperError(\n \"Cannot have both a depth and stencil attachment.\"\n );\n }\n //>>includeEnd('debug');\n\n ///////////////////////////////////////////////////////////////////\n\n this._bind();\n\n var texture;\n var renderbuffer;\n var i;\n var length;\n var attachmentEnum;\n\n if (defined(options.colorTextures)) {\n var textures = options.colorTextures;\n length = this._colorTextures.length = this._activeColorAttachments.length =\n textures.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (length > maximumColorAttachments) {\n throw new DeveloperError(\n \"The number of color attachments exceeds the number supported.\"\n );\n }\n //>>includeEnd('debug');\n\n for (i = 0; i < length; ++i) {\n texture = textures[i];\n\n //>>includeStart('debug', pragmas.debug);\n if (!PixelFormat.isColorFormat(texture.pixelFormat)) {\n throw new DeveloperError(\n \"The color-texture pixel-format must be a color format.\"\n );\n }\n if (\n texture.pixelDatatype === PixelDatatype.FLOAT &&\n !context.colorBufferFloat\n ) {\n throw new DeveloperError(\n \"The color texture pixel datatype is FLOAT and the WebGL implementation does not support the EXT_color_buffer_float or WEBGL_color_buffer_float extensions. See Context.colorBufferFloat.\"\n );\n }\n if (\n texture.pixelDatatype === PixelDatatype.HALF_FLOAT &&\n !context.colorBufferHalfFloat\n ) {\n throw new DeveloperError(\n \"The color texture pixel datatype is HALF_FLOAT and the WebGL implementation does not support the EXT_color_buffer_half_float extension. See Context.colorBufferHalfFloat.\"\n );\n }\n //>>includeEnd('debug');\n\n attachmentEnum = this._gl.COLOR_ATTACHMENT0 + i;\n attachTexture(this, attachmentEnum, texture);\n this._activeColorAttachments[i] = attachmentEnum;\n this._colorTextures[i] = texture;\n }\n }\n\n if (defined(options.colorRenderbuffers)) {\n var renderbuffers = options.colorRenderbuffers;\n length = this._colorRenderbuffers.length = this._activeColorAttachments.length =\n renderbuffers.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (length > maximumColorAttachments) {\n throw new DeveloperError(\n \"The number of color attachments exceeds the number supported.\"\n );\n }\n //>>includeEnd('debug');\n\n for (i = 0; i < length; ++i) {\n renderbuffer = renderbuffers[i];\n attachmentEnum = this._gl.COLOR_ATTACHMENT0 + i;\n attachRenderbuffer(this, attachmentEnum, renderbuffer);\n this._activeColorAttachments[i] = attachmentEnum;\n this._colorRenderbuffers[i] = renderbuffer;\n }\n }\n\n if (defined(options.depthTexture)) {\n texture = options.depthTexture;\n\n //>>includeStart('debug', pragmas.debug);\n if (texture.pixelFormat !== PixelFormat.DEPTH_COMPONENT) {\n throw new DeveloperError(\n \"The depth-texture pixel-format must be DEPTH_COMPONENT.\"\n );\n }\n //>>includeEnd('debug');\n\n attachTexture(this, this._gl.DEPTH_ATTACHMENT, texture);\n this._depthTexture = texture;\n }\n\n if (defined(options.depthRenderbuffer)) {\n renderbuffer = options.depthRenderbuffer;\n attachRenderbuffer(this, this._gl.DEPTH_ATTACHMENT, renderbuffer);\n this._depthRenderbuffer = renderbuffer;\n }\n\n if (defined(options.stencilRenderbuffer)) {\n renderbuffer = options.stencilRenderbuffer;\n attachRenderbuffer(this, this._gl.STENCIL_ATTACHMENT, renderbuffer);\n this._stencilRenderbuffer = renderbuffer;\n }\n\n if (defined(options.depthStencilTexture)) {\n texture = options.depthStencilTexture;\n\n //>>includeStart('debug', pragmas.debug);\n if (texture.pixelFormat !== PixelFormat.DEPTH_STENCIL) {\n throw new DeveloperError(\n \"The depth-stencil pixel-format must be DEPTH_STENCIL.\"\n );\n }\n //>>includeEnd('debug');\n\n attachTexture(this, this._gl.DEPTH_STENCIL_ATTACHMENT, texture);\n this._depthStencilTexture = texture;\n }\n\n if (defined(options.depthStencilRenderbuffer)) {\n renderbuffer = options.depthStencilRenderbuffer;\n attachRenderbuffer(this, this._gl.DEPTH_STENCIL_ATTACHMENT, renderbuffer);\n this._depthStencilRenderbuffer = renderbuffer;\n }\n\n this._unBind();\n}\n\nObject.defineProperties(Framebuffer.prototype, {\n /**\n * The status of the framebuffer. If the status is not WebGLConstants.FRAMEBUFFER_COMPLETE,\n * a {@link DeveloperError} will be thrown when attempting to render to the framebuffer.\n * @memberof Framebuffer.prototype\n * @type {Number}\n */\n status: {\n get: function () {\n this._bind();\n var status = this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);\n this._unBind();\n return status;\n },\n },\n numberOfColorAttachments: {\n get: function () {\n return this._activeColorAttachments.length;\n },\n },\n depthTexture: {\n get: function () {\n return this._depthTexture;\n },\n },\n depthRenderbuffer: {\n get: function () {\n return this._depthRenderbuffer;\n },\n },\n stencilRenderbuffer: {\n get: function () {\n return this._stencilRenderbuffer;\n },\n },\n depthStencilTexture: {\n get: function () {\n return this._depthStencilTexture;\n },\n },\n depthStencilRenderbuffer: {\n get: function () {\n return this._depthStencilRenderbuffer;\n },\n },\n\n /**\n * True if the framebuffer has a depth attachment. Depth attachments include\n * depth and depth-stencil textures, and depth and depth-stencil renderbuffers. When\n * rendering to a framebuffer, a depth attachment is required for the depth test to have effect.\n * @memberof Framebuffer.prototype\n * @type {Boolean}\n */\n hasDepthAttachment: {\n get: function () {\n return !!(\n this.depthTexture ||\n this.depthRenderbuffer ||\n this.depthStencilTexture ||\n this.depthStencilRenderbuffer\n );\n },\n },\n});\n\nFramebuffer.prototype._bind = function () {\n var gl = this._gl;\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer);\n};\n\nFramebuffer.prototype._unBind = function () {\n var gl = this._gl;\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n};\n\nFramebuffer.prototype._getActiveColorAttachments = function () {\n return this._activeColorAttachments;\n};\n\nFramebuffer.prototype.getColorTexture = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index) || index < 0 || index >= this._colorTextures.length) {\n throw new DeveloperError(\n \"index is required, must be greater than or equal to zero and must be less than the number of color attachments.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._colorTextures[index];\n};\n\nFramebuffer.prototype.getColorRenderbuffer = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(index) ||\n index < 0 ||\n index >= this._colorRenderbuffers.length\n ) {\n throw new DeveloperError(\n \"index is required, must be greater than or equal to zero and must be less than the number of color attachments.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._colorRenderbuffers[index];\n};\n\nFramebuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nFramebuffer.prototype.destroy = function () {\n if (this.destroyAttachments) {\n // If the color texture is a cube map face, it is owned by the cube map, and will not be destroyed.\n var i = 0;\n var textures = this._colorTextures;\n var length = textures.length;\n for (; i < length; ++i) {\n var texture = textures[i];\n if (defined(texture)) {\n texture.destroy();\n }\n }\n\n var renderbuffers = this._colorRenderbuffers;\n length = renderbuffers.length;\n for (i = 0; i < length; ++i) {\n var renderbuffer = renderbuffers[i];\n if (defined(renderbuffer)) {\n renderbuffer.destroy();\n }\n }\n\n this._depthTexture = this._depthTexture && this._depthTexture.destroy();\n this._depthRenderbuffer =\n this._depthRenderbuffer && this._depthRenderbuffer.destroy();\n this._stencilRenderbuffer =\n this._stencilRenderbuffer && this._stencilRenderbuffer.destroy();\n this._depthStencilTexture =\n this._depthStencilTexture && this._depthStencilTexture.destroy();\n this._depthStencilRenderbuffer =\n this._depthStencilRenderbuffer &&\n this._depthStencilRenderbuffer.destroy();\n }\n\n this._gl.deleteFramebuffer(this._framebuffer);\n return destroyObject(this);\n};\nexport default Framebuffer;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport BlendingState from \"../Scene/BlendingState.js\";\nimport StencilConstants from \"../Scene/StencilConstants.js\";\nimport PointCloudEyeDomeLightingShader from \"../Shaders/PostProcessStages/PointCloudEyeDomeLighting.js\";\n\n/**\n * Eye dome lighting. Does not support points with per-point translucency, but does allow translucent styling against the globe.\n * Requires support for EXT_frag_depth and WEBGL_draw_buffers extensions in WebGL 1.0.\n *\n * @private\n */\nfunction PointCloudEyeDomeLighting() {\n this._framebuffer = undefined;\n this._colorGBuffer = undefined; // color gbuffer\n this._depthGBuffer = undefined; // depth gbuffer\n this._depthTexture = undefined; // needed to write depth so camera based on depth works\n this._drawCommand = undefined;\n this._clearCommand = undefined;\n\n this._strength = 1.0;\n this._radius = 1.0;\n}\n\nfunction destroyFramebuffer(processor) {\n var framebuffer = processor._framebuffer;\n if (!defined(framebuffer)) {\n return;\n }\n\n processor._colorGBuffer.destroy();\n processor._depthGBuffer.destroy();\n processor._depthTexture.destroy();\n framebuffer.destroy();\n\n processor._framebuffer = undefined;\n processor._colorGBuffer = undefined;\n processor._depthGBuffer = undefined;\n processor._depthTexture = undefined;\n processor._drawCommand = undefined;\n processor._clearCommand = undefined;\n}\n\nfunction createFramebuffer(processor, context) {\n var screenWidth = context.drawingBufferWidth;\n var screenHeight = context.drawingBufferHeight;\n\n var colorGBuffer = new Texture({\n context: context,\n width: screenWidth,\n height: screenHeight,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n var depthGBuffer = new Texture({\n context: context,\n width: screenWidth,\n height: screenHeight,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n var depthTexture = new Texture({\n context: context,\n width: screenWidth,\n height: screenHeight,\n pixelFormat: PixelFormat.DEPTH_COMPONENT,\n pixelDatatype: PixelDatatype.UNSIGNED_INT,\n sampler: Sampler.NEAREST,\n });\n\n processor._framebuffer = new Framebuffer({\n context: context,\n colorTextures: [colorGBuffer, depthGBuffer],\n depthTexture: depthTexture,\n destroyAttachments: false,\n });\n processor._colorGBuffer = colorGBuffer;\n processor._depthGBuffer = depthGBuffer;\n processor._depthTexture = depthTexture;\n}\n\nvar distanceAndEdlStrengthScratch = new Cartesian2();\n\nfunction createCommands(processor, context) {\n var blendFS = new ShaderSource({\n defines: [\"LOG_DEPTH_WRITE\"],\n sources: [PointCloudEyeDomeLightingShader],\n });\n\n var blendUniformMap = {\n u_pointCloud_colorGBuffer: function () {\n return processor._colorGBuffer;\n },\n u_pointCloud_depthGBuffer: function () {\n return processor._depthGBuffer;\n },\n u_distanceAndEdlStrength: function () {\n distanceAndEdlStrengthScratch.x = processor._radius;\n distanceAndEdlStrengthScratch.y = processor._strength;\n return distanceAndEdlStrengthScratch;\n },\n };\n\n var blendRenderState = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n depthMask: true,\n depthTest: {\n enabled: true,\n },\n stencilTest: StencilConstants.setCesium3DTileBit(),\n stencilMask: StencilConstants.CESIUM_3D_TILE_MASK,\n });\n\n processor._drawCommand = context.createViewportQuadCommand(blendFS, {\n uniformMap: blendUniformMap,\n renderState: blendRenderState,\n pass: Pass.CESIUM_3D_TILE,\n owner: processor,\n });\n\n processor._clearCommand = new ClearCommand({\n framebuffer: processor._framebuffer,\n color: new Color(0.0, 0.0, 0.0, 0.0),\n depth: 1.0,\n renderState: RenderState.fromCache(),\n pass: Pass.CESIUM_3D_TILE,\n owner: processor,\n });\n}\n\nfunction createResources(processor, context) {\n var screenWidth = context.drawingBufferWidth;\n var screenHeight = context.drawingBufferHeight;\n var colorGBuffer = processor._colorGBuffer;\n var nowDirty = false;\n var resized =\n defined(colorGBuffer) &&\n (colorGBuffer.width !== screenWidth ||\n colorGBuffer.height !== screenHeight);\n\n if (!defined(colorGBuffer) || resized) {\n destroyFramebuffer(processor);\n createFramebuffer(processor, context);\n createCommands(processor, context);\n nowDirty = true;\n }\n return nowDirty;\n}\n\nfunction isSupported(context) {\n return context.drawBuffers && context.fragmentDepth;\n}\n\nPointCloudEyeDomeLighting.isSupported = isSupported;\n\nfunction getECShaderProgram(context, shaderProgram) {\n var shader = context.shaderCache.getDerivedShaderProgram(shaderProgram, \"EC\");\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n\n var fs = shaderProgram.fragmentShaderSource.clone();\n\n fs.sources = fs.sources.map(function (source) {\n source = ShaderSource.replaceMain(\n source,\n \"czm_point_cloud_post_process_main\"\n );\n source = source.replace(/gl_FragColor/g, \"gl_FragData[0]\");\n return source;\n });\n\n fs.sources.unshift(\"#extension GL_EXT_draw_buffers : enable \\n\");\n fs.sources.push(\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_point_cloud_post_process_main(); \\n\" +\n \"#ifdef LOG_DEPTH\\n\" +\n \" czm_writeLogDepth();\\n\" +\n \" gl_FragData[1] = czm_packDepth(gl_FragDepthEXT); \\n\" +\n \"#else\\n\" +\n \" gl_FragData[1] = czm_packDepth(gl_FragCoord.z);\\n\" +\n \"#endif\\n\" +\n \"}\"\n );\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"EC\",\n {\n vertexShaderSource: shaderProgram.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nPointCloudEyeDomeLighting.prototype.update = function (\n frameState,\n commandStart,\n pointCloudShading,\n boundingVolume\n) {\n if (!isSupported(frameState.context)) {\n return;\n }\n\n this._strength = pointCloudShading.eyeDomeLightingStrength;\n this._radius =\n pointCloudShading.eyeDomeLightingRadius * frameState.pixelRatio;\n\n var dirty = createResources(this, frameState.context);\n\n // Hijack existing point commands to render into an offscreen FBO.\n var i;\n var commandList = frameState.commandList;\n var commandEnd = commandList.length;\n\n for (i = commandStart; i < commandEnd; ++i) {\n var command = commandList[i];\n if (\n command.primitiveType !== PrimitiveType.POINTS ||\n command.pass === Pass.TRANSLUCENT\n ) {\n continue;\n }\n var derivedCommand = command.derivedCommands.pointCloudProcessor;\n if (\n !defined(derivedCommand) ||\n command.dirty ||\n dirty ||\n derivedCommand.framebuffer !== this._framebuffer\n ) {\n // Prevent crash when tiles out-of-view come in-view during context size change\n derivedCommand = DrawCommand.shallowClone(command);\n command.derivedCommands.pointCloudProcessor = derivedCommand;\n\n derivedCommand.framebuffer = this._framebuffer;\n derivedCommand.shaderProgram = getECShaderProgram(\n frameState.context,\n command.shaderProgram\n );\n derivedCommand.castShadows = false;\n derivedCommand.receiveShadows = false;\n }\n\n commandList[i] = derivedCommand;\n }\n\n var clearCommand = this._clearCommand;\n var blendCommand = this._drawCommand;\n\n blendCommand.boundingVolume = boundingVolume;\n\n // Blend EDL into the main FBO\n commandList.push(blendCommand);\n commandList.push(clearCommand);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PointCloudEyeDomeLighting#destroy\n */\nPointCloudEyeDomeLighting.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * processor = processor && processor.destroy();\n *\n * @see PointCloudEyeDomeLighting#isDestroyed\n */\nPointCloudEyeDomeLighting.prototype.destroy = function () {\n destroyFramebuffer(this);\n return destroyObject(this);\n};\nexport default PointCloudEyeDomeLighting;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#extension GL_EXT_frag_depth : enable\\n\\\n\\n\\\nuniform sampler2D u_pointCloud_colorGBuffer;\\n\\\nuniform sampler2D u_pointCloud_depthGBuffer;\\n\\\nuniform vec2 u_distanceAndEdlStrength;\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec2 neighborContribution(float log2Depth, vec2 offset)\\n\\\n{\\n\\\n float dist = u_distanceAndEdlStrength.x;\\n\\\n vec2 texCoordOrig = v_textureCoordinates + offset * dist;\\n\\\n vec2 texCoord0 = v_textureCoordinates + offset * floor(dist);\\n\\\n vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist);\\n\\\n\\n\\\n float depthOrLogDepth0 = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, texCoord0));\\n\\\n float depthOrLogDepth1 = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, texCoord1));\\n\\\n\\n\\\n // ignore depth values that are the clear depth\\n\\\n if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) {\\n\\\n return vec2(0.0);\\n\\\n }\\n\\\n\\n\\\n // interpolate the two adjacent depth values\\n\\\n float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist));\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix);\\n\\\n return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n float depthOrLogDepth = czm_unpackDepth(texture2D(u_pointCloud_depthGBuffer, v_textureCoordinates));\\n\\\n\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth);\\n\\\n eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n float log2Depth = log2(-eyeCoordinate.z);\\n\\\n\\n\\\n if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n vec4 color = texture2D(u_pointCloud_colorGBuffer, v_textureCoordinates);\\n\\\n\\n\\\n // sample from neighbors left, right, down, up\\n\\\n vec2 texelSize = 1.0 / czm_viewport.zw;\\n\\\n\\n\\\n vec2 responseAndCount = vec2(0.0);\\n\\\n\\n\\\n responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0));\\n\\\n responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0));\\n\\\n responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y));\\n\\\n responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y));\\n\\\n\\n\\\n float response = responseAndCount.x / responseAndCount.y;\\n\\\n float strength = u_distanceAndEdlStrength.y;\\n\\\n float shade = exp(-response * 300.0 * strength);\\n\\\n color.rgb *= shade;\\n\\\n gl_FragColor = vec4(color);\\n\\\n\\n\\\n // Input and output depth are the same.\\n\\\n gl_FragDepthEXT = depthOrLogDepth;\\n\\\n}\\n\\\n\";\n","import defaultValue from \"../Core/defaultValue.js\";\nimport PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\n\n/**\n * Options for performing point attenuation based on geometric error when rendering\n * point clouds using 3D Tiles.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.attenuation=false] Perform point attenuation based on geometric error.\n * @param {Number} [options.geometricErrorScale=1.0] Scale to be applied to each tile's geometric error.\n * @param {Number} [options.maximumAttenuation] Maximum attenuation in pixels. Defaults to the Cesium3DTileset's maximumScreenSpaceError.\n * @param {Number} [options.baseResolution] Average base resolution for the dataset in meters. Substitute for Geometric Error when not available.\n * @param {Boolean} [options.eyeDomeLighting=true] When true, use eye dome lighting when drawing with point attenuation.\n * @param {Number} [options.eyeDomeLightingStrength=1.0] Increasing this value increases contrast on slopes and edges.\n * @param {Number} [options.eyeDomeLightingRadius=1.0] Increase the thickness of contours from eye dome lighting.\n * @param {Boolean} [options.backFaceCulling=false] Determines whether back-facing points are hidden. This option works only if data has normals included.\n * @param {Boolean} [options.normalShading=true] Determines whether a point cloud that contains normals is shaded by the scene's light source.\n *\n * @alias PointCloudShading\n * @constructor\n */\nfunction PointCloudShading(options) {\n var pointCloudShading = defaultValue(options, {});\n\n /**\n * Perform point attenuation based on geometric error.\n * @type {Boolean}\n * @default false\n */\n this.attenuation = defaultValue(pointCloudShading.attenuation, false);\n\n /**\n * Scale to be applied to the geometric error before computing attenuation.\n * @type {Number}\n * @default 1.0\n */\n this.geometricErrorScale = defaultValue(\n pointCloudShading.geometricErrorScale,\n 1.0\n );\n\n /**\n * Maximum point attenuation in pixels. If undefined, the Cesium3DTileset's maximumScreenSpaceError will be used.\n * @type {Number}\n */\n this.maximumAttenuation = pointCloudShading.maximumAttenuation;\n\n /**\n * Average base resolution for the dataset in meters.\n * Used in place of geometric error when geometric error is 0.\n * If undefined, an approximation will be computed for each tile that has geometric error of 0.\n * @type {Number}\n */\n this.baseResolution = pointCloudShading.baseResolution;\n\n /**\n * Use eye dome lighting when drawing with point attenuation\n * Requires support for EXT_frag_depth, OES_texture_float, and WEBGL_draw_buffers extensions in WebGL 1.0,\n * otherwise eye dome lighting is ignored.\n *\n * @type {Boolean}\n * @default true\n */\n this.eyeDomeLighting = defaultValue(pointCloudShading.eyeDomeLighting, true);\n\n /**\n * Eye dome lighting strength (apparent contrast)\n * @type {Number}\n * @default 1.0\n */\n this.eyeDomeLightingStrength = defaultValue(\n pointCloudShading.eyeDomeLightingStrength,\n 1.0\n );\n\n /**\n * Thickness of contours from eye dome lighting\n * @type {Number}\n * @default 1.0\n */\n this.eyeDomeLightingRadius = defaultValue(\n pointCloudShading.eyeDomeLightingRadius,\n 1.0\n );\n\n /**\n * Determines whether back-facing points are hidden.\n * This option works only if data has normals included.\n *\n * @type {Boolean}\n * @default false\n */\n this.backFaceCulling = defaultValue(pointCloudShading.backFaceCulling, false);\n\n /**\n * Determines whether a point cloud that contains normals is shaded by the scene's light source.\n *\n * @type {Boolean}\n * @default true\n */\n this.normalShading = defaultValue(pointCloudShading.normalShading, true);\n}\n\n/**\n * Determines if point cloud shading is supported.\n *\n * @param {Scene} scene The scene.\n * @returns {Boolean} <code>true</code> if point cloud shading is supported; otherwise, returns <code>false</code>\n */\nPointCloudShading.isSupported = function (scene) {\n return PointCloudEyeDomeLighting.isSupported(scene.context);\n};\nexport default PointCloudShading;\n","import Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport PointCloud from \"./PointCloud.js\";\nimport PointCloudShading from \"./PointCloudShading.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/PointCloud|Point Cloud}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias PointCloud3DTileContent\n * @constructor\n *\n * @private\n */\nfunction PointCloud3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._pickId = undefined; // Only defined when batchTable is undefined\n this._batchTable = undefined; // Used when feature table contains BATCH_ID semantic\n this._styleDirty = false;\n this._features = undefined;\n this.featurePropertiesDirty = false;\n\n this._pointCloud = new PointCloud({\n arrayBuffer: arrayBuffer,\n byteOffset: byteOffset,\n cull: false,\n opaquePass: Pass.CESIUM_3D_TILE,\n vertexShaderLoaded: getVertexShaderLoaded(this),\n fragmentShaderLoaded: getFragmentShaderLoaded(this),\n uniformMapLoaded: getUniformMapLoaded(this),\n batchTableLoaded: getBatchTableLoaded(this),\n pickIdLoaded: getPickIdLoaded(this),\n });\n}\n\nObject.defineProperties(PointCloud3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n if (defined(this._batchTable)) {\n return this._batchTable.featuresLength;\n }\n return 0;\n },\n },\n\n pointsLength: {\n get: function () {\n return this._pointCloud.pointsLength;\n },\n },\n\n trianglesLength: {\n get: function () {\n return 0;\n },\n },\n\n geometryByteLength: {\n get: function () {\n return this._pointCloud.geometryByteLength;\n },\n },\n\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n if (defined(this._batchTable)) {\n return this._batchTable.memorySizeInBytes;\n }\n return 0;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._pointCloud.readyPromise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return this._batchTable;\n },\n },\n});\n\nfunction getVertexShaderLoaded(content) {\n return function (vs) {\n if (defined(content._batchTable)) {\n return content._batchTable.getVertexShaderCallback(\n false,\n \"a_batchId\",\n undefined\n )(vs);\n }\n return vs;\n };\n}\n\nfunction getFragmentShaderLoaded(content) {\n return function (fs) {\n if (defined(content._batchTable)) {\n return content._batchTable.getFragmentShaderCallback(\n false,\n undefined\n )(fs);\n }\n return \"uniform vec4 czm_pickColor;\\n\" + fs;\n };\n}\n\nfunction getUniformMapLoaded(content) {\n return function (uniformMap) {\n if (defined(content._batchTable)) {\n return content._batchTable.getUniformMapCallback()(uniformMap);\n }\n return combine(uniformMap, {\n czm_pickColor: function () {\n return content._pickId.color;\n },\n });\n };\n}\n\nfunction getBatchTableLoaded(content) {\n return function (batchLength, batchTableJson, batchTableBinary) {\n content._batchTable = new Cesium3DTileBatchTable(\n content,\n batchLength,\n batchTableJson,\n batchTableBinary\n );\n };\n}\n\nfunction getPickIdLoaded(content) {\n return function () {\n return defined(content._batchTable)\n ? content._batchTable.getPickId()\n : \"czm_pickColor\";\n };\n}\n\nfunction getGeometricError(content) {\n var pointCloudShading = content._tileset.pointCloudShading;\n var sphereVolume = content._tile.contentBoundingVolume.boundingSphere.volume();\n var baseResolutionApproximation = CesiumMath.cbrt(\n sphereVolume / content.pointsLength\n );\n\n var geometricError = content._tile.geometricError;\n if (geometricError === 0) {\n if (\n defined(pointCloudShading) &&\n defined(pointCloudShading.baseResolution)\n ) {\n geometricError = pointCloudShading.baseResolution;\n } else {\n geometricError = baseResolutionApproximation;\n }\n }\n return geometricError;\n}\n\nfunction createFeatures(content) {\n var featuresLength = content.featuresLength;\n if (!defined(content._features) && featuresLength > 0) {\n var features = new Array(featuresLength);\n for (var i = 0; i < featuresLength; ++i) {\n features[i] = new Cesium3DTileFeature(content, i);\n }\n content._features = features;\n }\n}\n\nPointCloud3DTileContent.prototype.hasProperty = function (batchId, name) {\n if (defined(this._batchTable)) {\n return this._batchTable.hasProperty(batchId, name);\n }\n return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.\n *\n * In this context a feature refers to a group of points that share the same BATCH_ID.\n * For example all the points that represent a door in a house point cloud would be a feature.\n *\n * Features are backed by a batch table and can be colored, shown/hidden, picked, etc like features\n * in b3dm and i3dm.\n *\n * When the BATCH_ID semantic is omitted and the point cloud stores per-point properties, they\n * are not accessible by getFeature. They are only used for dynamic styling.\n */\nPointCloud3DTileContent.prototype.getFeature = function (batchId) {\n if (!defined(this._batchTable)) {\n return undefined;\n }\n var featuresLength = this.featuresLength;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n (featuresLength - 1) +\n \").\"\n );\n }\n //>>includeEnd('debug');\n createFeatures(this);\n return this._features[batchId];\n};\n\nPointCloud3DTileContent.prototype.applyDebugSettings = function (\n enabled,\n color\n) {\n this._pointCloud.color = enabled ? color : Color.WHITE;\n};\n\nPointCloud3DTileContent.prototype.applyStyle = function (style) {\n if (defined(this._batchTable)) {\n this._batchTable.applyStyle(style);\n } else {\n this._styleDirty = true;\n }\n};\n\nvar defaultShading = new PointCloudShading();\n\nPointCloud3DTileContent.prototype.update = function (tileset, frameState) {\n var pointCloud = this._pointCloud;\n var pointCloudShading = defaultValue(\n tileset.pointCloudShading,\n defaultShading\n );\n var tile = this._tile;\n var batchTable = this._batchTable;\n var mode = frameState.mode;\n var clippingPlanes = tileset.clippingPlanes;\n\n if (!defined(this._pickId) && !defined(batchTable)) {\n this._pickId = frameState.context.createPickId({\n primitive: tileset,\n content: this,\n });\n }\n\n if (defined(batchTable)) {\n batchTable.update(tileset, frameState);\n }\n\n var boundingSphere;\n if (defined(tile._contentBoundingVolume)) {\n boundingSphere =\n mode === SceneMode.SCENE3D\n ? tile._contentBoundingVolume.boundingSphere\n : tile._contentBoundingVolume2D.boundingSphere;\n } else {\n boundingSphere =\n mode === SceneMode.SCENE3D\n ? tile._boundingVolume.boundingSphere\n : tile._boundingVolume2D.boundingSphere;\n }\n\n var styleDirty = this._styleDirty;\n this._styleDirty = false;\n\n pointCloud.clippingPlanesOriginMatrix = tileset.clippingPlanesOriginMatrix;\n pointCloud.style = defined(batchTable) ? undefined : tileset.style;\n pointCloud.styleDirty = styleDirty;\n pointCloud.modelMatrix = tile.computedTransform;\n pointCloud.time = tileset.timeSinceLoad;\n pointCloud.shadows = tileset.shadows;\n pointCloud.boundingSphere = boundingSphere;\n pointCloud.clippingPlanes = clippingPlanes;\n pointCloud.isClipped =\n defined(clippingPlanes) && clippingPlanes.enabled && tile._isClipped;\n pointCloud.clippingPlanesDirty = tile.clippingPlanesDirty;\n pointCloud.attenuation = pointCloudShading.attenuation;\n pointCloud.backFaceCulling = pointCloudShading.backFaceCulling;\n pointCloud.normalShading = pointCloudShading.normalShading;\n pointCloud.geometricError = getGeometricError(this);\n pointCloud.geometricErrorScale = pointCloudShading.geometricErrorScale;\n if (\n defined(pointCloudShading) &&\n defined(pointCloudShading.maximumAttenuation)\n ) {\n pointCloud.maximumAttenuation = pointCloudShading.maximumAttenuation;\n } else if (tile.refine === Cesium3DTileRefine.ADD) {\n pointCloud.maximumAttenuation = 5.0;\n } else {\n pointCloud.maximumAttenuation = tileset.maximumScreenSpaceError;\n }\n\n pointCloud.update(frameState);\n};\n\nPointCloud3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nPointCloud3DTileContent.prototype.destroy = function () {\n this._pickId = this._pickId && this._pickId.destroy();\n this._pointCloud = this._pointCloud && this._pointCloud.destroy();\n this._batchTable = this._batchTable && this._batchTable.destroy();\n return destroyObject(this);\n};\nexport default PointCloud3DTileContent;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * Represents content for a tile in a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset whose\n * content points to another 3D Tiles tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Tileset3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Tileset3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n this._readyPromise = when.defer();\n\n this.featurePropertiesDirty = false;\n\n initialize(this, arrayBuffer, byteOffset);\n}\n\nObject.defineProperties(Tileset3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return 0;\n },\n },\n\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n return 0;\n },\n },\n\n geometryByteLength: {\n get: function () {\n return 0;\n },\n },\n\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return 0;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return undefined;\n },\n },\n});\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n byteOffset = defaultValue(byteOffset, 0);\n var uint8Array = new Uint8Array(arrayBuffer);\n var jsonString = getStringFromTypedArray(uint8Array, byteOffset);\n var tilesetJson;\n\n try {\n tilesetJson = JSON.parse(jsonString);\n } catch (error) {\n content._readyPromise.reject(new RuntimeError(\"Invalid tile content.\"));\n return;\n }\n\n content._tileset.loadTileset(content._resource, tilesetJson, content._tile);\n content._readyPromise.resolve(content);\n}\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Tileset3DTileContent</code>\n * always returns <code>false</code> since a tile of this type does not have any features.\n */\nTileset3DTileContent.prototype.hasProperty = function (batchId, name) {\n return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Tileset3DTileContent</code>\n * always returns <code>undefined</code> since a tile of this type does not have any features.\n */\nTileset3DTileContent.prototype.getFeature = function (batchId) {\n return undefined;\n};\n\nTileset3DTileContent.prototype.applyDebugSettings = function (\n enabled,\n color\n) {};\n\nTileset3DTileContent.prototype.applyStyle = function (style) {};\n\nTileset3DTileContent.prototype.update = function (tileset, frameState) {};\n\nTileset3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nTileset3DTileContent.prototype.destroy = function () {\n return destroyObject(this);\n};\nexport default Tileset3DTileContent;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Buffer from \"./Buffer.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport VertexArray from \"./VertexArray.js\";\n\n/**\n * @private\n */\nfunction VertexArrayFacade(context, attributes, sizeInVertices, instanced) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"context\", context);\n if (!attributes || attributes.length === 0) {\n throw new DeveloperError(\"At least one attribute is required.\");\n }\n //>>includeEnd('debug');\n\n var attrs = VertexArrayFacade._verifyAttributes(attributes);\n sizeInVertices = defaultValue(sizeInVertices, 0);\n var precreatedAttributes = [];\n var attributesByUsage = {};\n var attributesForUsage;\n var usage;\n\n // Bucket the attributes by usage.\n var length = attrs.length;\n for (var i = 0; i < length; ++i) {\n var attribute = attrs[i];\n\n // If the attribute already has a vertex buffer, we do not need\n // to manage a vertex buffer or typed array for it.\n if (attribute.vertexBuffer) {\n precreatedAttributes.push(attribute);\n continue;\n }\n\n usage = attribute.usage;\n attributesForUsage = attributesByUsage[usage];\n if (!defined(attributesForUsage)) {\n attributesForUsage = attributesByUsage[usage] = [];\n }\n\n attributesForUsage.push(attribute);\n }\n\n // A function to sort attributes by the size of their components. From left to right, a vertex\n // stores floats, shorts, and then bytes.\n function compare(left, right) {\n return (\n ComponentDatatype.getSizeInBytes(right.componentDatatype) -\n ComponentDatatype.getSizeInBytes(left.componentDatatype)\n );\n }\n\n this._allBuffers = [];\n\n for (usage in attributesByUsage) {\n if (attributesByUsage.hasOwnProperty(usage)) {\n attributesForUsage = attributesByUsage[usage];\n\n attributesForUsage.sort(compare);\n var vertexSizeInBytes = VertexArrayFacade._vertexSizeInBytes(\n attributesForUsage\n );\n\n var bufferUsage = attributesForUsage[0].usage;\n\n var buffer = {\n vertexSizeInBytes: vertexSizeInBytes,\n vertexBuffer: undefined,\n usage: bufferUsage,\n needsCommit: false,\n arrayBuffer: undefined,\n arrayViews: VertexArrayFacade._createArrayViews(\n attributesForUsage,\n vertexSizeInBytes\n ),\n };\n\n this._allBuffers.push(buffer);\n }\n }\n\n this._size = 0;\n this._instanced = defaultValue(instanced, false);\n\n this._precreated = precreatedAttributes;\n this._context = context;\n\n this.writers = undefined;\n this.va = undefined;\n\n this.resize(sizeInVertices);\n}\nVertexArrayFacade._verifyAttributes = function (attributes) {\n var attrs = [];\n\n for (var i = 0; i < attributes.length; ++i) {\n var attribute = attributes[i];\n\n var attr = {\n index: defaultValue(attribute.index, i),\n enabled: defaultValue(attribute.enabled, true),\n componentsPerAttribute: attribute.componentsPerAttribute,\n componentDatatype: defaultValue(\n attribute.componentDatatype,\n ComponentDatatype.FLOAT\n ),\n normalize: defaultValue(attribute.normalize, false),\n\n // There will be either a vertexBuffer or an [optional] usage.\n vertexBuffer: attribute.vertexBuffer,\n usage: defaultValue(attribute.usage, BufferUsage.STATIC_DRAW),\n };\n attrs.push(attr);\n\n //>>includeStart('debug', pragmas.debug);\n if (\n attr.componentsPerAttribute !== 1 &&\n attr.componentsPerAttribute !== 2 &&\n attr.componentsPerAttribute !== 3 &&\n attr.componentsPerAttribute !== 4\n ) {\n throw new DeveloperError(\n \"attribute.componentsPerAttribute must be in the range [1, 4].\"\n );\n }\n\n var datatype = attr.componentDatatype;\n if (!ComponentDatatype.validate(datatype)) {\n throw new DeveloperError(\n \"Attribute must have a valid componentDatatype or not specify it.\"\n );\n }\n\n if (!BufferUsage.validate(attr.usage)) {\n throw new DeveloperError(\n \"Attribute must have a valid usage or not specify it.\"\n );\n }\n //>>includeEnd('debug');\n }\n\n // Verify all attribute names are unique.\n var uniqueIndices = new Array(attrs.length);\n for (var j = 0; j < attrs.length; ++j) {\n var currentAttr = attrs[j];\n var index = currentAttr.index;\n //>>includeStart('debug', pragmas.debug);\n if (uniqueIndices[index]) {\n throw new DeveloperError(\n \"Index \" + index + \" is used by more than one attribute.\"\n );\n }\n //>>includeEnd('debug');\n uniqueIndices[index] = true;\n }\n\n return attrs;\n};\n\nVertexArrayFacade._vertexSizeInBytes = function (attributes) {\n var sizeInBytes = 0;\n\n var length = attributes.length;\n for (var i = 0; i < length; ++i) {\n var attribute = attributes[i];\n sizeInBytes +=\n attribute.componentsPerAttribute *\n ComponentDatatype.getSizeInBytes(attribute.componentDatatype);\n }\n\n var maxComponentSizeInBytes =\n length > 0\n ? ComponentDatatype.getSizeInBytes(attributes[0].componentDatatype)\n : 0; // Sorted by size\n var remainder =\n maxComponentSizeInBytes > 0 ? sizeInBytes % maxComponentSizeInBytes : 0;\n var padding = remainder === 0 ? 0 : maxComponentSizeInBytes - remainder;\n sizeInBytes += padding;\n\n return sizeInBytes;\n};\n\nVertexArrayFacade._createArrayViews = function (attributes, vertexSizeInBytes) {\n var views = [];\n var offsetInBytes = 0;\n\n var length = attributes.length;\n for (var i = 0; i < length; ++i) {\n var attribute = attributes[i];\n var componentDatatype = attribute.componentDatatype;\n\n views.push({\n index: attribute.index,\n enabled: attribute.enabled,\n componentsPerAttribute: attribute.componentsPerAttribute,\n componentDatatype: componentDatatype,\n normalize: attribute.normalize,\n\n offsetInBytes: offsetInBytes,\n vertexSizeInComponentType:\n vertexSizeInBytes / ComponentDatatype.getSizeInBytes(componentDatatype),\n\n view: undefined,\n });\n\n offsetInBytes +=\n attribute.componentsPerAttribute *\n ComponentDatatype.getSizeInBytes(componentDatatype);\n }\n\n return views;\n};\n\n/**\n * Invalidates writers. Can't render again until commit is called.\n */\nVertexArrayFacade.prototype.resize = function (sizeInVertices) {\n this._size = sizeInVertices;\n\n var allBuffers = this._allBuffers;\n this.writers = [];\n\n for (var i = 0, len = allBuffers.length; i < len; ++i) {\n var buffer = allBuffers[i];\n\n VertexArrayFacade._resize(buffer, this._size);\n\n // Reserving invalidates the writers, so if client's cache them, they need to invalidate their cache.\n VertexArrayFacade._appendWriters(this.writers, buffer);\n }\n\n // VAs are recreated next time commit is called.\n destroyVA(this);\n};\n\nVertexArrayFacade._resize = function (buffer, size) {\n if (buffer.vertexSizeInBytes > 0) {\n // Create larger array buffer\n var arrayBuffer = new ArrayBuffer(size * buffer.vertexSizeInBytes);\n\n // Copy contents from previous array buffer\n if (defined(buffer.arrayBuffer)) {\n var destView = new Uint8Array(arrayBuffer);\n var sourceView = new Uint8Array(buffer.arrayBuffer);\n var sourceLength = sourceView.length;\n for (var j = 0; j < sourceLength; ++j) {\n destView[j] = sourceView[j];\n }\n }\n\n // Create typed views into the new array buffer\n var views = buffer.arrayViews;\n var length = views.length;\n for (var i = 0; i < length; ++i) {\n var view = views[i];\n view.view = ComponentDatatype.createArrayBufferView(\n view.componentDatatype,\n arrayBuffer,\n view.offsetInBytes\n );\n }\n\n buffer.arrayBuffer = arrayBuffer;\n }\n};\n\nvar createWriters = [\n // 1 component per attribute\n function (buffer, view, vertexSizeInComponentType) {\n return function (index, attribute) {\n view[index * vertexSizeInComponentType] = attribute;\n buffer.needsCommit = true;\n };\n },\n\n // 2 component per attribute\n function (buffer, view, vertexSizeInComponentType) {\n return function (index, component0, component1) {\n var i = index * vertexSizeInComponentType;\n view[i] = component0;\n view[i + 1] = component1;\n buffer.needsCommit = true;\n };\n },\n\n // 3 component per attribute\n function (buffer, view, vertexSizeInComponentType) {\n return function (index, component0, component1, component2) {\n var i = index * vertexSizeInComponentType;\n view[i] = component0;\n view[i + 1] = component1;\n view[i + 2] = component2;\n buffer.needsCommit = true;\n };\n },\n\n // 4 component per attribute\n function (buffer, view, vertexSizeInComponentType) {\n return function (index, component0, component1, component2, component3) {\n var i = index * vertexSizeInComponentType;\n view[i] = component0;\n view[i + 1] = component1;\n view[i + 2] = component2;\n view[i + 3] = component3;\n buffer.needsCommit = true;\n };\n },\n];\n\nVertexArrayFacade._appendWriters = function (writers, buffer) {\n var arrayViews = buffer.arrayViews;\n var length = arrayViews.length;\n for (var i = 0; i < length; ++i) {\n var arrayView = arrayViews[i];\n writers[arrayView.index] = createWriters[\n arrayView.componentsPerAttribute - 1\n ](buffer, arrayView.view, arrayView.vertexSizeInComponentType);\n }\n};\n\nVertexArrayFacade.prototype.commit = function (indexBuffer) {\n var recreateVA = false;\n\n var allBuffers = this._allBuffers;\n var buffer;\n var i;\n var length;\n\n for (i = 0, length = allBuffers.length; i < length; ++i) {\n buffer = allBuffers[i];\n recreateVA = commit(this, buffer) || recreateVA;\n }\n\n ///////////////////////////////////////////////////////////////////////\n\n if (recreateVA || !defined(this.va)) {\n destroyVA(this);\n var va = (this.va = []);\n\n var chunkSize = CesiumMath.SIXTY_FOUR_KILOBYTES - 4; // The 65535 index is reserved for primitive restart. Reserve the last 4 indices so that billboard quads are not broken up.\n var numberOfVertexArrays =\n defined(indexBuffer) && !this._instanced\n ? Math.ceil(this._size / chunkSize)\n : 1;\n for (var k = 0; k < numberOfVertexArrays; ++k) {\n var attributes = [];\n for (i = 0, length = allBuffers.length; i < length; ++i) {\n buffer = allBuffers[i];\n var offset = k * (buffer.vertexSizeInBytes * chunkSize);\n VertexArrayFacade._appendAttributes(\n attributes,\n buffer,\n offset,\n this._instanced\n );\n }\n\n attributes = attributes.concat(this._precreated);\n\n va.push({\n va: new VertexArray({\n context: this._context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n }),\n indicesCount:\n 1.5 *\n (k !== numberOfVertexArrays - 1 ? chunkSize : this._size % chunkSize),\n // TODO: not hardcode 1.5, this assumes 6 indices per 4 vertices (as for Billboard quads).\n });\n }\n }\n};\n\nfunction commit(vertexArrayFacade, buffer) {\n if (buffer.needsCommit && buffer.vertexSizeInBytes > 0) {\n buffer.needsCommit = false;\n\n var vertexBuffer = buffer.vertexBuffer;\n var vertexBufferSizeInBytes =\n vertexArrayFacade._size * buffer.vertexSizeInBytes;\n var vertexBufferDefined = defined(vertexBuffer);\n if (\n !vertexBufferDefined ||\n vertexBuffer.sizeInBytes < vertexBufferSizeInBytes\n ) {\n if (vertexBufferDefined) {\n vertexBuffer.destroy();\n }\n buffer.vertexBuffer = Buffer.createVertexBuffer({\n context: vertexArrayFacade._context,\n typedArray: buffer.arrayBuffer,\n usage: buffer.usage,\n });\n buffer.vertexBuffer.vertexArrayDestroyable = false;\n\n return true; // Created new vertex buffer\n }\n\n buffer.vertexBuffer.copyFromArrayView(buffer.arrayBuffer);\n }\n\n return false; // Did not create new vertex buffer\n}\n\nVertexArrayFacade._appendAttributes = function (\n attributes,\n buffer,\n vertexBufferOffset,\n instanced\n) {\n var arrayViews = buffer.arrayViews;\n var length = arrayViews.length;\n for (var i = 0; i < length; ++i) {\n var view = arrayViews[i];\n\n attributes.push({\n index: view.index,\n enabled: view.enabled,\n componentsPerAttribute: view.componentsPerAttribute,\n componentDatatype: view.componentDatatype,\n normalize: view.normalize,\n vertexBuffer: buffer.vertexBuffer,\n offsetInBytes: vertexBufferOffset + view.offsetInBytes,\n strideInBytes: buffer.vertexSizeInBytes,\n instanceDivisor: instanced ? 1 : 0,\n });\n }\n};\n\nVertexArrayFacade.prototype.subCommit = function (\n offsetInVertices,\n lengthInVertices\n) {\n //>>includeStart('debug', pragmas.debug);\n if (offsetInVertices < 0 || offsetInVertices >= this._size) {\n throw new DeveloperError(\n \"offsetInVertices must be greater than or equal to zero and less than the vertex array size.\"\n );\n }\n if (offsetInVertices + lengthInVertices > this._size) {\n throw new DeveloperError(\n \"offsetInVertices + lengthInVertices cannot exceed the vertex array size.\"\n );\n }\n //>>includeEnd('debug');\n\n var allBuffers = this._allBuffers;\n for (var i = 0, len = allBuffers.length; i < len; ++i) {\n subCommit(allBuffers[i], offsetInVertices, lengthInVertices);\n }\n};\n\nfunction subCommit(buffer, offsetInVertices, lengthInVertices) {\n if (buffer.needsCommit && buffer.vertexSizeInBytes > 0) {\n var byteOffset = buffer.vertexSizeInBytes * offsetInVertices;\n var byteLength = buffer.vertexSizeInBytes * lengthInVertices;\n\n // PERFORMANCE_IDEA: If we want to get really crazy, we could consider updating\n // individual attributes instead of the entire (sub-)vertex.\n //\n // PERFORMANCE_IDEA: Does creating the typed view add too much GC overhead?\n buffer.vertexBuffer.copyFromArrayView(\n new Uint8Array(buffer.arrayBuffer, byteOffset, byteLength),\n byteOffset\n );\n }\n}\n\nVertexArrayFacade.prototype.endSubCommits = function () {\n var allBuffers = this._allBuffers;\n\n for (var i = 0, len = allBuffers.length; i < len; ++i) {\n allBuffers[i].needsCommit = false;\n }\n};\n\nfunction destroyVA(vertexArrayFacade) {\n var va = vertexArrayFacade.va;\n if (!defined(va)) {\n return;\n }\n\n var length = va.length;\n for (var i = 0; i < length; ++i) {\n va[i].va.destroy();\n }\n\n vertexArrayFacade.va = undefined;\n}\n\nVertexArrayFacade.prototype.isDestroyed = function () {\n return false;\n};\n\nVertexArrayFacade.prototype.destroy = function () {\n var allBuffers = this._allBuffers;\n for (var i = 0, len = allBuffers.length; i < len; ++i) {\n var buffer = allBuffers[i];\n buffer.vertexBuffer = buffer.vertexBuffer && buffer.vertexBuffer.destroy();\n }\n\n destroyVA(this);\n\n return destroyObject(this);\n};\nexport default VertexArrayFacade;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Functions that do scene-dependent transforms between rendering-related coordinate systems.\n *\n * @namespace SceneTransforms\n */\nvar SceneTransforms = {};\n\nvar actualPositionScratch = new Cartesian4(0, 0, 0, 1);\nvar positionCC = new Cartesian4();\nvar scratchViewport = new BoundingRectangle();\n\nvar scratchWindowCoord0 = new Cartesian2();\nvar scratchWindowCoord1 = new Cartesian2();\n\n/**\n * Transforms a position in WGS84 coordinates to window coordinates. This is commonly used to place an\n * HTML element at the same screen position as an object in the scene.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian3} position The position in WGS84 (world) coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to window coordinates.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the window position of longitude/latitude (0, 0) every time the mouse moves.\n * var scene = widget.scene;\n * var ellipsoid = scene.globe.ellipsoid;\n * var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n * console.log(Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nSceneTransforms.wgs84ToWindowCoordinates = function (scene, position, result) {\n return SceneTransforms.wgs84WithEyeOffsetToWindowCoordinates(\n scene,\n position,\n Cartesian3.ZERO,\n result\n );\n};\n\nvar scratchCartesian4 = new Cartesian4();\nvar scratchEyeOffset = new Cartesian3();\n\nfunction worldToClip(position, eyeOffset, camera, result) {\n var viewMatrix = camera.viewMatrix;\n\n var positionEC = Matrix4.multiplyByVector(\n viewMatrix,\n Cartesian4.fromElements(\n position.x,\n position.y,\n position.z,\n 1,\n scratchCartesian4\n ),\n scratchCartesian4\n );\n\n var zEyeOffset = Cartesian3.multiplyComponents(\n eyeOffset,\n Cartesian3.normalize(positionEC, scratchEyeOffset),\n scratchEyeOffset\n );\n positionEC.x += eyeOffset.x + zEyeOffset.x;\n positionEC.y += eyeOffset.y + zEyeOffset.y;\n positionEC.z += zEyeOffset.z;\n\n return Matrix4.multiplyByVector(\n camera.frustum.projectionMatrix,\n positionEC,\n result\n );\n}\n\nvar scratchMaxCartographic = new Cartographic(Math.PI, CesiumMath.PI_OVER_TWO);\nvar scratchProjectedCartesian = new Cartesian3();\nvar scratchCameraPosition = new Cartesian3();\n\n/**\n * @private\n */\nSceneTransforms.wgs84WithEyeOffsetToWindowCoordinates = function (\n scene,\n position,\n eyeOffset,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n if (!defined(position)) {\n throw new DeveloperError(\"position is required.\");\n }\n //>>includeEnd('debug');\n\n // Transform for 3D, 2D, or Columbus view\n var frameState = scene.frameState;\n var actualPosition = SceneTransforms.computeActualWgs84Position(\n frameState,\n position,\n actualPositionScratch\n );\n\n if (!defined(actualPosition)) {\n return undefined;\n }\n\n // Assuming viewport takes up the entire canvas...\n var canvas = scene.canvas;\n var viewport = scratchViewport;\n viewport.x = 0;\n viewport.y = 0;\n viewport.width = canvas.clientWidth;\n viewport.height = canvas.clientHeight;\n\n var camera = scene.camera;\n var cameraCentered = false;\n\n if (frameState.mode === SceneMode.SCENE2D) {\n var projection = scene.mapProjection;\n var maxCartographic = scratchMaxCartographic;\n var maxCoord = projection.project(\n maxCartographic,\n scratchProjectedCartesian\n );\n\n var cameraPosition = Cartesian3.clone(\n camera.position,\n scratchCameraPosition\n );\n var frustum = camera.frustum.clone();\n\n var viewportTransformation = Matrix4.computeViewportTransformation(\n viewport,\n 0.0,\n 1.0,\n new Matrix4()\n );\n var projectionMatrix = camera.frustum.projectionMatrix;\n\n var x = camera.positionWC.y;\n var eyePoint = Cartesian3.fromElements(\n CesiumMath.sign(x) * maxCoord.x - x,\n 0.0,\n -camera.positionWC.x\n );\n var windowCoordinates = Transforms.pointToGLWindowCoordinates(\n projectionMatrix,\n viewportTransformation,\n eyePoint\n );\n\n if (\n x === 0.0 ||\n windowCoordinates.x <= 0.0 ||\n windowCoordinates.x >= canvas.clientWidth\n ) {\n cameraCentered = true;\n } else {\n if (windowCoordinates.x > canvas.clientWidth * 0.5) {\n viewport.width = windowCoordinates.x;\n\n camera.frustum.right = maxCoord.x - x;\n\n positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n SceneTransforms.clipToGLWindowCoordinates(\n viewport,\n positionCC,\n scratchWindowCoord0\n );\n\n viewport.x += windowCoordinates.x;\n\n camera.position.x = -camera.position.x;\n\n var right = camera.frustum.right;\n camera.frustum.right = -camera.frustum.left;\n camera.frustum.left = -right;\n\n positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n SceneTransforms.clipToGLWindowCoordinates(\n viewport,\n positionCC,\n scratchWindowCoord1\n );\n } else {\n viewport.x += windowCoordinates.x;\n viewport.width -= windowCoordinates.x;\n\n camera.frustum.left = -maxCoord.x - x;\n\n positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n SceneTransforms.clipToGLWindowCoordinates(\n viewport,\n positionCC,\n scratchWindowCoord0\n );\n\n viewport.x = viewport.x - viewport.width;\n\n camera.position.x = -camera.position.x;\n\n var left = camera.frustum.left;\n camera.frustum.left = -camera.frustum.right;\n camera.frustum.right = -left;\n\n positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n SceneTransforms.clipToGLWindowCoordinates(\n viewport,\n positionCC,\n scratchWindowCoord1\n );\n }\n\n Cartesian3.clone(cameraPosition, camera.position);\n camera.frustum = frustum.clone();\n\n result = Cartesian2.clone(scratchWindowCoord0, result);\n if (result.x < 0.0 || result.x > canvas.clientWidth) {\n result.x = scratchWindowCoord1.x;\n }\n }\n }\n\n if (frameState.mode !== SceneMode.SCENE2D || cameraCentered) {\n // View-projection matrix to transform from world coordinates to clip coordinates\n positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n if (\n positionCC.z < 0 &&\n !(camera.frustum instanceof OrthographicFrustum) &&\n !(camera.frustum instanceof OrthographicOffCenterFrustum)\n ) {\n return undefined;\n }\n\n result = SceneTransforms.clipToGLWindowCoordinates(\n viewport,\n positionCC,\n result\n );\n }\n\n result.y = canvas.clientHeight - result.y;\n return result;\n};\n\n/**\n * Transforms a position in WGS84 coordinates to drawing buffer coordinates. This may produce different\n * results from SceneTransforms.wgs84ToWindowCoordinates when the browser zoom is not 100%, or on high-DPI displays.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian3} position The position in WGS84 (world) coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to window coordinates.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the window position of longitude/latitude (0, 0) every time the mouse moves.\n * var scene = widget.scene;\n * var ellipsoid = scene.globe.ellipsoid;\n * var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n * console.log(Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nSceneTransforms.wgs84ToDrawingBufferCoordinates = function (\n scene,\n position,\n result\n) {\n result = SceneTransforms.wgs84ToWindowCoordinates(scene, position, result);\n if (!defined(result)) {\n return undefined;\n }\n\n return SceneTransforms.transformWindowToDrawingBuffer(scene, result, result);\n};\n\nvar projectedPosition = new Cartesian3();\nvar positionInCartographic = new Cartographic();\n\n/**\n * @private\n */\nSceneTransforms.computeActualWgs84Position = function (\n frameState,\n position,\n result\n) {\n var mode = frameState.mode;\n\n if (mode === SceneMode.SCENE3D) {\n return Cartesian3.clone(position, result);\n }\n\n var projection = frameState.mapProjection;\n var cartographic = projection.ellipsoid.cartesianToCartographic(\n position,\n positionInCartographic\n );\n if (!defined(cartographic)) {\n return undefined;\n }\n\n projection.project(cartographic, projectedPosition);\n\n if (mode === SceneMode.COLUMBUS_VIEW) {\n return Cartesian3.fromElements(\n projectedPosition.z,\n projectedPosition.x,\n projectedPosition.y,\n result\n );\n }\n\n if (mode === SceneMode.SCENE2D) {\n return Cartesian3.fromElements(\n 0.0,\n projectedPosition.x,\n projectedPosition.y,\n result\n );\n }\n\n // mode === SceneMode.MORPHING\n var morphTime = frameState.morphTime;\n return Cartesian3.fromElements(\n CesiumMath.lerp(projectedPosition.z, position.x, morphTime),\n CesiumMath.lerp(projectedPosition.x, position.y, morphTime),\n CesiumMath.lerp(projectedPosition.y, position.z, morphTime),\n result\n );\n};\n\nvar positionNDC = new Cartesian3();\nvar positionWC = new Cartesian3();\nvar viewportTransform = new Matrix4();\n\n/**\n * @private\n */\nSceneTransforms.clipToGLWindowCoordinates = function (\n viewport,\n position,\n result\n) {\n // Perspective divide to transform from clip coordinates to normalized device coordinates\n Cartesian3.divideByScalar(position, position.w, positionNDC);\n\n // Viewport transform to transform from clip coordinates to window coordinates\n Matrix4.computeViewportTransformation(viewport, 0.0, 1.0, viewportTransform);\n Matrix4.multiplyByPoint(viewportTransform, positionNDC, positionWC);\n\n return Cartesian2.fromCartesian3(positionWC, result);\n};\n\n/**\n * @private\n */\nSceneTransforms.transformWindowToDrawingBuffer = function (\n scene,\n windowPosition,\n result\n) {\n var canvas = scene.canvas;\n var xScale = scene.drawingBufferWidth / canvas.clientWidth;\n var yScale = scene.drawingBufferHeight / canvas.clientHeight;\n return Cartesian2.fromElements(\n windowPosition.x * xScale,\n windowPosition.y * yScale,\n result\n );\n};\n\nvar scratchNDC = new Cartesian4();\nvar scratchWorldCoords = new Cartesian4();\n\n/**\n * @private\n */\nSceneTransforms.drawingBufferToWgs84Coordinates = function (\n scene,\n drawingBufferPosition,\n depth,\n result\n) {\n var context = scene.context;\n var uniformState = context.uniformState;\n\n var currentFrustum = uniformState.currentFrustum;\n var near = currentFrustum.x;\n var far = currentFrustum.y;\n\n if (scene.frameState.useLogDepth) {\n // transforming logarithmic depth of form\n // log2(z + 1) / log2( far + 1);\n // to perspective form\n // (far - far * near / z) / (far - near)\n var log2Depth = depth * uniformState.log2FarDepthFromNearPlusOne;\n var depthFromNear = Math.pow(2.0, log2Depth) - 1.0;\n depth = (far * (1.0 - near / (depthFromNear + near))) / (far - near);\n }\n\n var viewport = scene.view.passState.viewport;\n var ndc = Cartesian4.clone(Cartesian4.UNIT_W, scratchNDC);\n ndc.x = ((drawingBufferPosition.x - viewport.x) / viewport.width) * 2.0 - 1.0;\n ndc.y =\n ((drawingBufferPosition.y - viewport.y) / viewport.height) * 2.0 - 1.0;\n ndc.z = depth * 2.0 - 1.0;\n ndc.w = 1.0;\n\n var worldCoords;\n var frustum = scene.camera.frustum;\n if (!defined(frustum.fovy)) {\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n worldCoords = scratchWorldCoords;\n worldCoords.x =\n (ndc.x * (frustum.right - frustum.left) + frustum.left + frustum.right) *\n 0.5;\n worldCoords.y =\n (ndc.y * (frustum.top - frustum.bottom) + frustum.bottom + frustum.top) *\n 0.5;\n worldCoords.z = (ndc.z * (near - far) - near - far) * 0.5;\n worldCoords.w = 1.0;\n\n worldCoords = Matrix4.multiplyByVector(\n uniformState.inverseView,\n worldCoords,\n worldCoords\n );\n } else {\n worldCoords = Matrix4.multiplyByVector(\n uniformState.inverseViewProjection,\n ndc,\n scratchWorldCoords\n );\n\n // Reverse perspective divide\n var w = 1.0 / worldCoords.w;\n Cartesian3.multiplyByScalar(worldCoords, w, worldCoords);\n }\n return Cartesian3.fromCartesian4(worldCoords, result);\n};\nexport default SceneTransforms;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Resource from \"../Core/Resource.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\n\n/**\n * A viewport-aligned image positioned in the 3D scene, that is created\n * and rendered using a {@link BillboardCollection}. A billboard is created and its initial\n * properties are set by calling {@link BillboardCollection#add}.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n *\n * @alias Billboard\n *\n * @performance Reading a property, e.g., {@link Billboard#show}, is constant time.\n * Assigning to a property is constant time but results in\n * CPU to GPU traffic when {@link BillboardCollection#update} is called. The per-billboard traffic is\n * the same regardless of how many properties were updated. If most billboards in a collection need to be\n * updated, it may be more efficient to clear the collection with {@link BillboardCollection#removeAll}\n * and add new billboards instead of modifying each one.\n *\n * @exception {DeveloperError} scaleByDistance.far must be greater than scaleByDistance.near\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see BillboardCollection\n * @see BillboardCollection#add\n * @see Label\n *\n * @internalConstructor\n * @class\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Billboards.html|Cesium Sandcastle Billboard Demo}\n */\nfunction Billboard(options, billboardCollection) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (\n defined(options.disableDepthTestDistance) &&\n options.disableDepthTestDistance < 0.0\n ) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than or equal to 0.0.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = options.translucencyByDistance;\n var pixelOffsetScaleByDistance = options.pixelOffsetScaleByDistance;\n var scaleByDistance = options.scaleByDistance;\n var distanceDisplayCondition = options.distanceDisplayCondition;\n if (defined(translucencyByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (translucencyByDistance.far <= translucencyByDistance.near) {\n throw new DeveloperError(\n \"translucencyByDistance.far must be greater than translucencyByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n }\n if (defined(pixelOffsetScaleByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (pixelOffsetScaleByDistance.far <= pixelOffsetScaleByDistance.near) {\n throw new DeveloperError(\n \"pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n pixelOffsetScaleByDistance = NearFarScalar.clone(\n pixelOffsetScaleByDistance\n );\n }\n if (defined(scaleByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (scaleByDistance.far <= scaleByDistance.near) {\n throw new DeveloperError(\n \"scaleByDistance.far must be greater than scaleByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n scaleByDistance = NearFarScalar.clone(scaleByDistance);\n }\n if (defined(distanceDisplayCondition)) {\n //>>includeStart('debug', pragmas.debug);\n if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n throw new DeveloperError(\n \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\"\n );\n }\n //>>includeEnd('debug');\n distanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition\n );\n }\n\n this._show = defaultValue(options.show, true);\n this._position = Cartesian3.clone(\n defaultValue(options.position, Cartesian3.ZERO)\n );\n this._actualPosition = Cartesian3.clone(this._position); // For columbus view and 2D\n this._pixelOffset = Cartesian2.clone(\n defaultValue(options.pixelOffset, Cartesian2.ZERO)\n );\n this._translate = new Cartesian2(0.0, 0.0); // used by labels for glyph vertex translation\n this._eyeOffset = Cartesian3.clone(\n defaultValue(options.eyeOffset, Cartesian3.ZERO)\n );\n this._heightReference = defaultValue(\n options.heightReference,\n HeightReference.NONE\n );\n this._verticalOrigin = defaultValue(\n options.verticalOrigin,\n VerticalOrigin.CENTER\n );\n this._horizontalOrigin = defaultValue(\n options.horizontalOrigin,\n HorizontalOrigin.CENTER\n );\n this._scale = defaultValue(options.scale, 1.0);\n this._color = Color.clone(defaultValue(options.color, Color.WHITE));\n this._rotation = defaultValue(options.rotation, 0.0);\n this._alignedAxis = Cartesian3.clone(\n defaultValue(options.alignedAxis, Cartesian3.ZERO)\n );\n this._width = options.width;\n this._height = options.height;\n this._scaleByDistance = scaleByDistance;\n this._translucencyByDistance = translucencyByDistance;\n this._pixelOffsetScaleByDistance = pixelOffsetScaleByDistance;\n this._sizeInMeters = defaultValue(options.sizeInMeters, false);\n this._distanceDisplayCondition = distanceDisplayCondition;\n this._disableDepthTestDistance = options.disableDepthTestDistance;\n this._id = options.id;\n this._collection = defaultValue(options.collection, billboardCollection);\n\n this._pickId = undefined;\n this._pickPrimitive = defaultValue(options._pickPrimitive, this);\n this._billboardCollection = billboardCollection;\n this._dirty = false;\n this._index = -1; //Used only by BillboardCollection\n this._batchIndex = undefined; // Used only by Vector3DTilePoints and BillboardCollection\n\n this._imageIndex = -1;\n this._imageIndexPromise = undefined;\n this._imageId = undefined;\n this._image = undefined;\n this._imageSubRegion = undefined;\n this._imageWidth = undefined;\n this._imageHeight = undefined;\n\n this._labelDimensions = undefined;\n this._labelHorizontalOrigin = undefined;\n this._labelTranslate = undefined;\n\n var image = options.image;\n var imageId = options.imageId;\n if (defined(image)) {\n if (!defined(imageId)) {\n if (typeof image === \"string\") {\n imageId = image;\n } else if (defined(image.src)) {\n imageId = image.src;\n } else {\n imageId = createGuid();\n }\n }\n\n this._imageId = imageId;\n this._image = image;\n }\n\n if (defined(options.imageSubRegion)) {\n this._imageId = imageId;\n this._imageSubRegion = options.imageSubRegion;\n }\n\n if (defined(this._billboardCollection._textureAtlas)) {\n this._loadImage();\n }\n\n this._actualClampedPosition = undefined;\n this._removeCallbackFunc = undefined;\n this._mode = SceneMode.SCENE3D;\n\n this._clusterShow = true;\n this._outlineColor = Color.clone(\n defaultValue(options.outlineColor, Color.BLACK)\n );\n this._outlineWidth = defaultValue(options.outlineWidth, 0.0);\n\n this._updateClamping();\n}\n\nvar SHOW_INDEX = (Billboard.SHOW_INDEX = 0);\nvar POSITION_INDEX = (Billboard.POSITION_INDEX = 1);\nvar PIXEL_OFFSET_INDEX = (Billboard.PIXEL_OFFSET_INDEX = 2);\nvar EYE_OFFSET_INDEX = (Billboard.EYE_OFFSET_INDEX = 3);\nvar HORIZONTAL_ORIGIN_INDEX = (Billboard.HORIZONTAL_ORIGIN_INDEX = 4);\nvar VERTICAL_ORIGIN_INDEX = (Billboard.VERTICAL_ORIGIN_INDEX = 5);\nvar SCALE_INDEX = (Billboard.SCALE_INDEX = 6);\nvar IMAGE_INDEX_INDEX = (Billboard.IMAGE_INDEX_INDEX = 7);\nvar COLOR_INDEX = (Billboard.COLOR_INDEX = 8);\nvar ROTATION_INDEX = (Billboard.ROTATION_INDEX = 9);\nvar ALIGNED_AXIS_INDEX = (Billboard.ALIGNED_AXIS_INDEX = 10);\nvar SCALE_BY_DISTANCE_INDEX = (Billboard.SCALE_BY_DISTANCE_INDEX = 11);\nvar TRANSLUCENCY_BY_DISTANCE_INDEX = (Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX = 12);\nvar PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX = (Billboard.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX = 13);\nvar DISTANCE_DISPLAY_CONDITION = (Billboard.DISTANCE_DISPLAY_CONDITION = 14);\nvar DISABLE_DEPTH_DISTANCE = (Billboard.DISABLE_DEPTH_DISTANCE = 15);\nBillboard.TEXTURE_COORDINATE_BOUNDS = 16;\nvar SDF_INDEX = (Billboard.SDF_INDEX = 17);\nBillboard.NUMBER_OF_PROPERTIES = 18;\n\nfunction makeDirty(billboard, propertyChanged) {\n var billboardCollection = billboard._billboardCollection;\n if (defined(billboardCollection)) {\n billboardCollection._updateBillboard(billboard, propertyChanged);\n billboard._dirty = true;\n }\n}\n\nObject.defineProperties(Billboard.prototype, {\n /**\n * Determines if this billboard will be shown. Use this to hide or show a billboard, instead\n * of removing it and re-adding it to the collection.\n * @memberof Billboard.prototype\n * @type {Boolean}\n * @default true\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._show !== value) {\n this._show = value;\n makeDirty(this, SHOW_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the Cartesian position of this billboard.\n * @memberof Billboard.prototype\n * @type {Cartesian3}\n */\n position: {\n get: function () {\n return this._position;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var position = this._position;\n if (!Cartesian3.equals(position, value)) {\n Cartesian3.clone(value, position);\n Cartesian3.clone(value, this._actualPosition);\n this._updateClamping();\n makeDirty(this, POSITION_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the height reference of this billboard.\n * @memberof Billboard.prototype\n * @type {HeightReference}\n * @default HeightReference.NONE\n */\n heightReference: {\n get: function () {\n return this._heightReference;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var heightReference = this._heightReference;\n if (value !== heightReference) {\n this._heightReference = value;\n this._updateClamping();\n makeDirty(this, POSITION_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the pixel offset in screen space from the origin of this billboard. This is commonly used\n * to align multiple billboards and labels at the same position, e.g., an image and text. The\n * screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n * <br /><br />\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Billboard.setPixelOffset.default.png' width='250' height='188' /></td>\n * <td align='center'><code>b.pixeloffset = new Cartesian2(50, 25);</code><br/><img src='Images/Billboard.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n * </tr></table>\n * The billboard's origin is indicated by the yellow point.\n * </div>\n * @memberof Billboard.prototype\n * @type {Cartesian2}\n */\n pixelOffset: {\n get: function () {\n return this._pixelOffset;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var pixelOffset = this._pixelOffset;\n if (!Cartesian2.equals(pixelOffset, value)) {\n Cartesian2.clone(value, pixelOffset);\n makeDirty(this, PIXEL_OFFSET_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets near and far scaling properties of a Billboard based on the billboard's distance from the camera.\n * A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's scale remains clamped to the nearest bound. If undefined,\n * scaleByDistance will be disabled.\n * @memberof Billboard.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a billboard's scaleByDistance to scale by 1.5 when the\n * // camera is 1500 meters from the billboard and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * b.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable scaling by distance\n * b.scaleByDistance = undefined;\n */\n scaleByDistance: {\n get: function () {\n return this._scaleByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var scaleByDistance = this._scaleByDistance;\n if (!NearFarScalar.equals(scaleByDistance, value)) {\n this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n makeDirty(this, SCALE_BY_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets near and far translucency properties of a Billboard based on the billboard's distance from the camera.\n * A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's translucency remains clamped to the nearest bound. If undefined,\n * translucencyByDistance will be disabled.\n * @memberof Billboard.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a billboard's translucency to 1.0 when the\n * // camera is 1500 meters from the billboard and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * b.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable translucency by distance\n * b.translucencyByDistance = undefined;\n */\n translucencyByDistance: {\n get: function () {\n return this._translucencyByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = this._translucencyByDistance;\n if (!NearFarScalar.equals(translucencyByDistance, value)) {\n this._translucencyByDistance = NearFarScalar.clone(\n value,\n translucencyByDistance\n );\n makeDirty(this, TRANSLUCENCY_BY_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets near and far pixel offset scaling properties of a Billboard based on the billboard's distance from the camera.\n * A billboard's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the billboard's pixel offset scale remains clamped to the nearest bound. If undefined,\n * pixelOffsetScaleByDistance will be disabled.\n * @memberof Billboard.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a billboard's pixel offset scale to 0.0 when the\n * // camera is 1500 meters from the billboard and scale pixel offset to 10.0 pixels\n * // in the y direction the camera distance approaches 8.0e6 meters.\n * b.pixelOffset = new Cesium.Cartesian2(0.0, 1.0);\n * b.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0);\n *\n * @example\n * // Example 2.\n * // disable pixel offset by distance\n * b.pixelOffsetScaleByDistance = undefined;\n */\n pixelOffsetScaleByDistance: {\n get: function () {\n return this._pixelOffsetScaleByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n if (!NearFarScalar.equals(pixelOffsetScaleByDistance, value)) {\n this._pixelOffsetScaleByDistance = NearFarScalar.clone(\n value,\n pixelOffsetScaleByDistance\n );\n makeDirty(this, PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the 3D Cartesian offset applied to this billboard in eye coordinates. Eye coordinates is a left-handed\n * coordinate system, where <code>x</code> points towards the viewer's right, <code>y</code> points up, and\n * <code>z</code> points into the screen. Eye coordinates use the same scale as world and model coordinates,\n * which is typically meters.\n * <br /><br />\n * An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to\n * arrange a billboard above its corresponding 3D model.\n * <br /><br />\n * Below, the billboard is positioned at the center of the Earth but an eye offset makes it always\n * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n * <br /><br />\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n * </tr></table>\n * <code>b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n * </div>\n * @memberof Billboard.prototype\n * @type {Cartesian3}\n */\n eyeOffset: {\n get: function () {\n return this._eyeOffset;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var eyeOffset = this._eyeOffset;\n if (!Cartesian3.equals(eyeOffset, value)) {\n Cartesian3.clone(value, eyeOffset);\n makeDirty(this, EYE_OFFSET_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the horizontal origin of this billboard, which determines if the billboard is\n * to the left, center, or right of its anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n * </div>\n * @memberof Billboard.prototype\n * @type {HorizontalOrigin}\n * @example\n * // Use a bottom, left origin\n * b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;\n * b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n */\n horizontalOrigin: {\n get: function () {\n return this._horizontalOrigin;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._horizontalOrigin !== value) {\n this._horizontalOrigin = value;\n makeDirty(this, HORIZONTAL_ORIGIN_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the vertical origin of this billboard, which determines if the billboard is\n * to the above, below, or at the center of its anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n * </div>\n * @memberof Billboard.prototype\n * @type {VerticalOrigin}\n * @example\n * // Use a bottom, left origin\n * b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;\n * b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n */\n verticalOrigin: {\n get: function () {\n return this._verticalOrigin;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._verticalOrigin !== value) {\n this._verticalOrigin = value;\n makeDirty(this, VERTICAL_ORIGIN_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the uniform scale that is multiplied with the billboard's image size in pixels.\n * A scale of <code>1.0</code> does not change the size of the billboard; a scale greater than\n * <code>1.0</code> enlarges the billboard; a positive scale less than <code>1.0</code> shrinks\n * the billboard.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setScale.png' width='400' height='300' /><br/>\n * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n * and <code>2.0</code>.\n * </div>\n * @memberof Billboard.prototype\n * @type {Number}\n */\n scale: {\n get: function () {\n return this._scale;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._scale !== value) {\n this._scale = value;\n makeDirty(this, SCALE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the color that is multiplied with the billboard's texture. This has two common use cases. First,\n * the same white texture may be used by many different billboards, each with a different color, to create\n * colored billboards. Second, the color's alpha component can be used to make the billboard translucent as shown below.\n * An alpha of <code>0.0</code> makes the billboard transparent, and <code>1.0</code> makes the billboard opaque.\n * <br /><br />\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Billboard.setColor.Alpha255.png' width='250' height='188' /></td>\n * <td align='center'><code>alpha : 0.5</code><br/><img src='Images/Billboard.setColor.Alpha127.png' width='250' height='188' /></td>\n * </tr></table>\n * </div>\n * <br />\n * The red, green, blue, and alpha values are indicated by <code>value</code>'s <code>red</code>, <code>green</code>,\n * <code>blue</code>, and <code>alpha</code> properties as shown in Example 1. These components range from <code>0.0</code>\n * (no intensity) to <code>1.0</code> (full intensity).\n * @memberof Billboard.prototype\n * @type {Color}\n *\n * @example\n * // Example 1. Assign yellow.\n * b.color = Cesium.Color.YELLOW;\n *\n * @example\n * // Example 2. Make a billboard 50% translucent.\n * b.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5);\n */\n color: {\n get: function () {\n return this._color;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var color = this._color;\n if (!Color.equals(color, value)) {\n Color.clone(value, color);\n makeDirty(this, COLOR_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the rotation angle in radians.\n * @memberof Billboard.prototype\n * @type {Number}\n */\n rotation: {\n get: function () {\n return this._rotation;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._rotation !== value) {\n this._rotation = value;\n makeDirty(this, ROTATION_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the aligned axis in world space. The aligned axis is the unit vector that the billboard up vector points towards.\n * The default is the zero vector, which means the billboard is aligned to the screen up vector.\n * @memberof Billboard.prototype\n * @type {Cartesian3}\n * @example\n * // Example 1.\n * // Have the billboard up vector point north\n * billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z;\n *\n * @example\n * // Example 2.\n * // Have the billboard point east.\n * billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z;\n * billboard.rotation = -Cesium.Math.PI_OVER_TWO;\n *\n * @example\n * // Example 3.\n * // Reset the aligned axis\n * billboard.alignedAxis = Cesium.Cartesian3.ZERO;\n */\n alignedAxis: {\n get: function () {\n return this._alignedAxis;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var alignedAxis = this._alignedAxis;\n if (!Cartesian3.equals(alignedAxis, value)) {\n Cartesian3.clone(value, alignedAxis);\n makeDirty(this, ALIGNED_AXIS_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets a width for the billboard. If undefined, the image width will be used.\n * @memberof Billboard.prototype\n * @type {Number}\n */\n width: {\n get: function () {\n return defaultValue(this._width, this._imageWidth);\n },\n set: function (value) {\n if (this._width !== value) {\n this._width = value;\n makeDirty(this, IMAGE_INDEX_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets a height for the billboard. If undefined, the image height will be used.\n * @memberof Billboard.prototype\n * @type {Number}\n */\n height: {\n get: function () {\n return defaultValue(this._height, this._imageHeight);\n },\n set: function (value) {\n if (this._height !== value) {\n this._height = value;\n makeDirty(this, IMAGE_INDEX_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets if the billboard size is in meters or pixels. <code>true</code> to size the billboard in meters;\n * otherwise, the size is in pixels.\n * @memberof Billboard.prototype\n * @type {Boolean}\n * @default false\n */\n sizeInMeters: {\n get: function () {\n return this._sizeInMeters;\n },\n set: function (value) {\n if (this._sizeInMeters !== value) {\n this._sizeInMeters = value;\n makeDirty(this, COLOR_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this billboard will be displayed.\n * @memberof Billboard.prototype\n * @type {DistanceDisplayCondition}\n * @default undefined\n */\n distanceDisplayCondition: {\n get: function () {\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n if (\n !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n value,\n this._distanceDisplayCondition\n );\n makeDirty(this, DISTANCE_DISPLAY_CONDITION);\n }\n },\n },\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof Billboard.prototype\n * @type {Number}\n */\n disableDepthTestDistance: {\n get: function () {\n return this._disableDepthTestDistance;\n },\n set: function (value) {\n if (this._disableDepthTestDistance !== value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value < 0.0) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than or equal to 0.0.\"\n );\n }\n //>>includeEnd('debug');\n this._disableDepthTestDistance = value;\n makeDirty(this, DISABLE_DEPTH_DISTANCE);\n }\n },\n },\n\n /**\n * Gets or sets the user-defined object returned when the billboard is picked.\n * @memberof Billboard.prototype\n * @type {Object}\n */\n id: {\n get: function () {\n return this._id;\n },\n set: function (value) {\n this._id = value;\n if (defined(this._pickId)) {\n this._pickId.object.id = value;\n }\n },\n },\n\n /**\n * The primitive to return when picking this billboard.\n * @memberof Billboard.prototype\n * @private\n */\n pickPrimitive: {\n get: function () {\n return this._pickPrimitive;\n },\n set: function (value) {\n this._pickPrimitive = value;\n if (defined(this._pickId)) {\n this._pickId.object.primitive = value;\n }\n },\n },\n\n /**\n * @private\n */\n pickId: {\n get: function () {\n return this._pickId;\n },\n },\n\n /**\n * <p>\n * Gets or sets the image to be used for this billboard. If a texture has already been created for the\n * given image, the existing texture is used.\n * </p>\n * <p>\n * This property can be set to a loaded Image, a URL which will be loaded as an Image automatically,\n * a canvas, or another billboard's image property (from the same billboard collection).\n * </p>\n *\n * @memberof Billboard.prototype\n * @type {String}\n * @example\n * // load an image from a URL\n * b.image = 'some/image/url.png';\n *\n * // assuming b1 and b2 are billboards in the same billboard collection,\n * // use the same image for both billboards.\n * b2.image = b1.image;\n */\n image: {\n get: function () {\n return this._imageId;\n },\n set: function (value) {\n if (!defined(value)) {\n this._imageIndex = -1;\n this._imageSubRegion = undefined;\n this._imageId = undefined;\n this._image = undefined;\n this._imageIndexPromise = undefined;\n makeDirty(this, IMAGE_INDEX_INDEX);\n } else if (typeof value === \"string\") {\n this.setImage(value, value);\n } else if (value instanceof Resource) {\n this.setImage(value.url, value);\n } else if (defined(value.src)) {\n this.setImage(value.src, value);\n } else {\n this.setImage(createGuid(), value);\n }\n },\n },\n\n /**\n * When <code>true</code>, this billboard is ready to render, i.e., the image\n * has been downloaded and the WebGL resources are created.\n *\n * @memberof Billboard.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n ready: {\n get: function () {\n return this._imageIndex !== -1;\n },\n },\n\n /**\n * Keeps track of the position of the billboard based on the height reference.\n * @memberof Billboard.prototype\n * @type {Cartesian3}\n * @private\n */\n _clampedPosition: {\n get: function () {\n return this._actualClampedPosition;\n },\n set: function (value) {\n this._actualClampedPosition = Cartesian3.clone(\n value,\n this._actualClampedPosition\n );\n makeDirty(this, POSITION_INDEX);\n },\n },\n\n /**\n * Determines whether or not this billboard will be shown or hidden because it was clustered.\n * @memberof Billboard.prototype\n * @type {Boolean}\n * @private\n */\n clusterShow: {\n get: function () {\n return this._clusterShow;\n },\n set: function (value) {\n if (this._clusterShow !== value) {\n this._clusterShow = value;\n makeDirty(this, SHOW_INDEX);\n }\n },\n },\n\n /**\n * The outline color of this Billboard. Effective only for SDF billboards like Label glyphs.\n * @memberof Billboard.prototype\n * @type {Color}\n * @private\n */\n outlineColor: {\n get: function () {\n return this._outlineColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var outlineColor = this._outlineColor;\n if (!Color.equals(outlineColor, value)) {\n Color.clone(value, outlineColor);\n makeDirty(this, SDF_INDEX);\n }\n },\n },\n\n /**\n * The outline width of this Billboard in pixels. Effective only for SDF billboards like Label glyphs.\n * @memberof Billboard.prototype\n * @type {Number}\n * @private\n */\n outlineWidth: {\n get: function () {\n return this._outlineWidth;\n },\n set: function (value) {\n if (this._outlineWidth !== value) {\n this._outlineWidth = value;\n makeDirty(this, SDF_INDEX);\n }\n },\n },\n});\n\nBillboard.prototype.getPickId = function (context) {\n if (!defined(this._pickId)) {\n this._pickId = context.createPickId({\n primitive: this._pickPrimitive,\n collection: this._collection,\n id: this._id,\n });\n }\n\n return this._pickId;\n};\n\nBillboard.prototype._updateClamping = function () {\n Billboard._updateClamping(this._billboardCollection, this);\n};\n\nvar scratchCartographic = new Cartographic();\nvar scratchPosition = new Cartesian3();\n\nBillboard._updateClamping = function (collection, owner) {\n var scene = collection._scene;\n if (!defined(scene) || !defined(scene.globe)) {\n //>>includeStart('debug', pragmas.debug);\n if (owner._heightReference !== HeightReference.NONE) {\n throw new DeveloperError(\n \"Height reference is not supported without a scene and globe.\"\n );\n }\n //>>includeEnd('debug');\n return;\n }\n\n var globe = scene.globe;\n var ellipsoid = globe.ellipsoid;\n var surface = globe._surface;\n\n var mode = scene.frameState.mode;\n\n var modeChanged = mode !== owner._mode;\n owner._mode = mode;\n\n if (\n (owner._heightReference === HeightReference.NONE || modeChanged) &&\n defined(owner._removeCallbackFunc)\n ) {\n owner._removeCallbackFunc();\n owner._removeCallbackFunc = undefined;\n owner._clampedPosition = undefined;\n }\n\n if (\n owner._heightReference === HeightReference.NONE ||\n !defined(owner._position)\n ) {\n return;\n }\n\n var position = ellipsoid.cartesianToCartographic(owner._position);\n if (!defined(position)) {\n owner._actualClampedPosition = undefined;\n return;\n }\n\n if (defined(owner._removeCallbackFunc)) {\n owner._removeCallbackFunc();\n }\n\n function updateFunction(clampedPosition) {\n if (owner._heightReference === HeightReference.RELATIVE_TO_GROUND) {\n if (owner._mode === SceneMode.SCENE3D) {\n var clampedCart = ellipsoid.cartesianToCartographic(\n clampedPosition,\n scratchCartographic\n );\n clampedCart.height += position.height;\n ellipsoid.cartographicToCartesian(clampedCart, clampedPosition);\n } else {\n clampedPosition.x += position.height;\n }\n }\n owner._clampedPosition = Cartesian3.clone(\n clampedPosition,\n owner._clampedPosition\n );\n }\n owner._removeCallbackFunc = surface.updateHeight(position, updateFunction);\n\n Cartographic.clone(position, scratchCartographic);\n var height = globe.getHeight(position);\n if (defined(height)) {\n scratchCartographic.height = height;\n }\n\n ellipsoid.cartographicToCartesian(scratchCartographic, scratchPosition);\n\n updateFunction(scratchPosition);\n};\n\nBillboard.prototype._loadImage = function () {\n var atlas = this._billboardCollection._textureAtlas;\n\n var imageId = this._imageId;\n var image = this._image;\n var imageSubRegion = this._imageSubRegion;\n var imageIndexPromise;\n\n if (defined(image)) {\n imageIndexPromise = atlas.addImage(imageId, image);\n }\n if (defined(imageSubRegion)) {\n imageIndexPromise = atlas.addSubRegion(imageId, imageSubRegion);\n }\n\n this._imageIndexPromise = imageIndexPromise;\n\n if (!defined(imageIndexPromise)) {\n return;\n }\n\n var that = this;\n imageIndexPromise\n .then(function (index) {\n if (\n that._imageId !== imageId ||\n that._image !== image ||\n !BoundingRectangle.equals(that._imageSubRegion, imageSubRegion)\n ) {\n // another load occurred before this one finished, ignore the index\n return;\n }\n\n // fill in imageWidth and imageHeight\n var textureCoordinates = atlas.textureCoordinates[index];\n that._imageWidth = atlas.texture.width * textureCoordinates.width;\n that._imageHeight = atlas.texture.height * textureCoordinates.height;\n\n that._imageIndex = index;\n that._ready = true;\n that._image = undefined;\n that._imageIndexPromise = undefined;\n makeDirty(that, IMAGE_INDEX_INDEX);\n })\n .otherwise(function (error) {\n console.error(\"Error loading image for billboard: \" + error);\n that._imageIndexPromise = undefined;\n });\n};\n\n/**\n * <p>\n * Sets the image to be used for this billboard. If a texture has already been created for the\n * given id, the existing texture is used.\n * </p>\n * <p>\n * This function is useful for dynamically creating textures that are shared across many billboards.\n * Only the first billboard will actually call the function and create the texture, while subsequent\n * billboards created with the same id will simply re-use the existing texture.\n * </p>\n * <p>\n * To load an image from a URL, setting the {@link Billboard#image} property is more convenient.\n * </p>\n *\n * @param {String} id The id of the image. This can be any string that uniquely identifies the image.\n * @param {HTMLImageElement|HTMLCanvasElement|String|Resource|Billboard.CreateImageCallback} image The image to load. This parameter\n * can either be a loaded Image or Canvas, a URL which will be loaded as an Image automatically,\n * or a function which will be called to create the image if it hasn't been loaded already.\n * @example\n * // create a billboard image dynamically\n * function drawImage(id) {\n * // create and draw an image using a canvas\n * var canvas = document.createElement('canvas');\n * var context2D = canvas.getContext('2d');\n * // ... draw image\n * return canvas;\n * }\n * // drawImage will be called to create the texture\n * b.setImage('myImage', drawImage);\n *\n * // subsequent billboards created in the same collection using the same id will use the existing\n * // texture, without the need to create the canvas or draw the image\n * b2.setImage('myImage', drawImage);\n */\nBillboard.prototype.setImage = function (id, image) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n if (!defined(image)) {\n throw new DeveloperError(\"image is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._imageId === id) {\n return;\n }\n\n this._imageIndex = -1;\n this._imageSubRegion = undefined;\n this._imageId = id;\n this._image = image;\n\n if (defined(this._billboardCollection._textureAtlas)) {\n this._loadImage();\n }\n};\n\n/**\n * Uses a sub-region of the image with the given id as the image for this billboard,\n * measured in pixels from the bottom-left.\n *\n * @param {String} id The id of the image to use.\n * @param {BoundingRectangle} subRegion The sub-region of the image.\n *\n * @exception {RuntimeError} image with id must be in the atlas\n */\nBillboard.prototype.setImageSubRegion = function (id, subRegion) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n if (!defined(subRegion)) {\n throw new DeveloperError(\"subRegion is required.\");\n }\n //>>includeEnd('debug');\n\n if (\n this._imageId === id &&\n BoundingRectangle.equals(this._imageSubRegion, subRegion)\n ) {\n return;\n }\n\n this._imageIndex = -1;\n this._imageId = id;\n this._imageSubRegion = BoundingRectangle.clone(subRegion);\n\n if (defined(this._billboardCollection._textureAtlas)) {\n this._loadImage();\n }\n};\n\nBillboard.prototype._setTranslate = function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var translate = this._translate;\n if (!Cartesian2.equals(translate, value)) {\n Cartesian2.clone(value, translate);\n makeDirty(this, PIXEL_OFFSET_INDEX);\n }\n};\n\nBillboard.prototype._getActualPosition = function () {\n return defined(this._clampedPosition)\n ? this._clampedPosition\n : this._actualPosition;\n};\n\nBillboard.prototype._setActualPosition = function (value) {\n if (!defined(this._clampedPosition)) {\n Cartesian3.clone(value, this._actualPosition);\n }\n makeDirty(this, POSITION_INDEX);\n};\n\nvar tempCartesian3 = new Cartesian4();\nBillboard._computeActualPosition = function (\n billboard,\n position,\n frameState,\n modelMatrix\n) {\n if (defined(billboard._clampedPosition)) {\n if (frameState.mode !== billboard._mode) {\n billboard._updateClamping();\n }\n return billboard._clampedPosition;\n } else if (frameState.mode === SceneMode.SCENE3D) {\n return position;\n }\n\n Matrix4.multiplyByPoint(modelMatrix, position, tempCartesian3);\n return SceneTransforms.computeActualWgs84Position(frameState, tempCartesian3);\n};\n\nvar scratchCartesian3 = new Cartesian3();\n\n// This function is basically a stripped-down JavaScript version of BillboardCollectionVS.glsl\nBillboard._computeScreenSpacePosition = function (\n modelMatrix,\n position,\n eyeOffset,\n pixelOffset,\n scene,\n result\n) {\n // Model to world coordinates\n var positionWorld = Matrix4.multiplyByPoint(\n modelMatrix,\n position,\n scratchCartesian3\n );\n\n // World to window coordinates\n var positionWC = SceneTransforms.wgs84WithEyeOffsetToWindowCoordinates(\n scene,\n positionWorld,\n eyeOffset,\n result\n );\n if (!defined(positionWC)) {\n return undefined;\n }\n\n // Apply pixel offset\n Cartesian2.add(positionWC, pixelOffset, positionWC);\n\n return positionWC;\n};\n\nvar scratchPixelOffset = new Cartesian2(0.0, 0.0);\n\n/**\n * Computes the screen-space position of the billboard's origin, taking into account eye and pixel offsets.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the billboard.\n *\n * @exception {DeveloperError} Billboard must be in a collection.\n *\n * @example\n * console.log(b.computeScreenSpacePosition(scene).toString());\n *\n * @see Billboard#eyeOffset\n * @see Billboard#pixelOffset\n */\nBillboard.prototype.computeScreenSpacePosition = function (scene, result) {\n var billboardCollection = this._billboardCollection;\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(billboardCollection)) {\n throw new DeveloperError(\n \"Billboard must be in a collection. Was it removed?\"\n );\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n // pixel offset for screen space computation is the pixelOffset + screen space translate\n Cartesian2.clone(this._pixelOffset, scratchPixelOffset);\n Cartesian2.add(scratchPixelOffset, this._translate, scratchPixelOffset);\n\n var modelMatrix = billboardCollection.modelMatrix;\n var position = this._position;\n if (defined(this._clampedPosition)) {\n position = this._clampedPosition;\n if (scene.mode !== SceneMode.SCENE3D) {\n // position needs to be in world coordinates\n var projection = scene.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var cart = projection.unproject(position, scratchCartographic);\n position = ellipsoid.cartographicToCartesian(cart, scratchCartesian3);\n modelMatrix = Matrix4.IDENTITY;\n }\n }\n\n var windowCoordinates = Billboard._computeScreenSpacePosition(\n modelMatrix,\n position,\n this._eyeOffset,\n scratchPixelOffset,\n scene,\n result\n );\n return windowCoordinates;\n};\n\n/**\n * Gets a billboard's screen space bounding box centered around screenSpacePosition.\n * @param {Billboard} billboard The billboard to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nBillboard.getScreenSpaceBoundingBox = function (\n billboard,\n screenSpacePosition,\n result\n) {\n var width = billboard.width;\n var height = billboard.height;\n\n var scale = billboard.scale;\n width *= scale;\n height *= scale;\n\n var x = screenSpacePosition.x;\n if (billboard.horizontalOrigin === HorizontalOrigin.RIGHT) {\n x -= width;\n } else if (billboard.horizontalOrigin === HorizontalOrigin.CENTER) {\n x -= width * 0.5;\n }\n\n var y = screenSpacePosition.y;\n if (\n billboard.verticalOrigin === VerticalOrigin.BOTTOM ||\n billboard.verticalOrigin === VerticalOrigin.BASELINE\n ) {\n y -= height;\n } else if (billboard.verticalOrigin === VerticalOrigin.CENTER) {\n y -= height * 0.5;\n }\n\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n result.x = x;\n result.y = y;\n result.width = width;\n result.height = height;\n\n return result;\n};\n\n/**\n * Determines if this billboard equals another billboard. Billboards are equal if all their properties\n * are equal. Billboards in different collections can be equal.\n *\n * @param {Billboard} other The billboard to compare for equality.\n * @returns {Boolean} <code>true</code> if the billboards are equal; otherwise, <code>false</code>.\n */\nBillboard.prototype.equals = function (other) {\n return (\n this === other ||\n (defined(other) &&\n this._id === other._id &&\n Cartesian3.equals(this._position, other._position) &&\n this._imageId === other._imageId &&\n this._show === other._show &&\n this._scale === other._scale &&\n this._verticalOrigin === other._verticalOrigin &&\n this._horizontalOrigin === other._horizontalOrigin &&\n this._heightReference === other._heightReference &&\n BoundingRectangle.equals(this._imageSubRegion, other._imageSubRegion) &&\n Color.equals(this._color, other._color) &&\n Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&\n Cartesian2.equals(this._translate, other._translate) &&\n Cartesian3.equals(this._eyeOffset, other._eyeOffset) &&\n NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n NearFarScalar.equals(\n this._translucencyByDistance,\n other._translucencyByDistance\n ) &&\n NearFarScalar.equals(\n this._pixelOffsetScaleByDistance,\n other._pixelOffsetScaleByDistance\n ) &&\n DistanceDisplayCondition.equals(\n this._distanceDisplayCondition,\n other._distanceDisplayCondition\n ) &&\n this._disableDepthTestDistance === other._disableDepthTestDistance)\n );\n};\n\nBillboard.prototype._destroy = function () {\n if (defined(this._customData)) {\n this._billboardCollection._scene.globe._surface.removeTileCustomData(\n this._customData\n );\n this._customData = undefined;\n }\n\n if (defined(this._removeCallbackFunc)) {\n this._removeCallbackFunc();\n this._removeCallbackFunc = undefined;\n }\n\n this.image = undefined;\n this._pickId = this._pickId && this._pickId.destroy();\n this._billboardCollection = undefined;\n};\n\n/**\n * A function that creates an image.\n * @callback Billboard.CreateImageCallback\n * @param {String} id The identifier of the image to load.\n * @returns {HTMLImageElement|HTMLCanvasElement|Promise<HTMLImageElement|HTMLCanvasElement>} The image, or a promise that will resolve to an image.\n */\nexport default Billboard;\n","/**\n * Determines how opaque and translucent parts of billboards, points, and labels are blended with the scene.\n *\n * @enum {Number}\n */\nvar BlendOption = {\n /**\n * The billboards, points, or labels in the collection are completely opaque.\n * @type {Number}\n * @constant\n */\n OPAQUE: 0,\n\n /**\n * The billboards, points, or labels in the collection are completely translucent.\n * @type {Number}\n * @constant\n */\n TRANSLUCENT: 1,\n\n /**\n * The billboards, points, or labels in the collection are both opaque and translucent.\n * @type {Number}\n * @constant\n */\n OPAQUE_AND_TRANSLUCENT: 2,\n};\nexport default Object.freeze(BlendOption);\n","/**\n * Settings for the generation of signed distance field glyphs\n *\n * @private\n */\nvar SDFSettings = {\n /**\n * The font size in pixels\n *\n * @type {Number}\n * @constant\n */\n FONT_SIZE: 48.0,\n\n /**\n * Whitespace padding around glyphs.\n *\n * @type {Number}\n * @constant\n */\n PADDING: 10.0,\n\n /**\n * How many pixels around the glyph shape to use for encoding distance\n *\n * @type {Number}\n * @constant\n */\n RADIUS: 8.0,\n\n /**\n * How much of the radius (relative) is used for the inside part the glyph.\n *\n * @type {Number}\n * @constant\n */\n CUTOFF: 0.25,\n};\nexport default Object.freeze(SDFSettings);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport when from \"../ThirdParty/when.js\";\n\n// The atlas is made up of regions of space called nodes that contain images or child nodes.\nfunction TextureAtlasNode(\n bottomLeft,\n topRight,\n childNode1,\n childNode2,\n imageIndex\n) {\n this.bottomLeft = defaultValue(bottomLeft, Cartesian2.ZERO);\n this.topRight = defaultValue(topRight, Cartesian2.ZERO);\n this.childNode1 = childNode1;\n this.childNode2 = childNode2;\n this.imageIndex = imageIndex;\n}\n\nvar defaultInitialSize = new Cartesian2(16.0, 16.0);\n\n/**\n * A TextureAtlas stores multiple images in one square texture and keeps\n * track of the texture coordinates for each image. TextureAtlas is dynamic,\n * meaning new images can be added at any point in time.\n * Texture coordinates are subject to change if the texture atlas resizes, so it is\n * important to check {@link TextureAtlas#getGUID} before using old values.\n *\n * @alias TextureAtlas\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Scene} options.context The context in which the texture gets created.\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGBA] The pixel format of the texture.\n * @param {Number} [options.borderWidthInPixels=1] The amount of spacing between adjacent images in pixels.\n * @param {Cartesian2} [options.initialSize=new Cartesian2(16.0, 16.0)] The initial side lengths of the texture.\n *\n * @exception {DeveloperError} borderWidthInPixels must be greater than or equal to zero.\n * @exception {DeveloperError} initialSize must be greater than zero.\n *\n * @private\n */\nfunction TextureAtlas(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var borderWidthInPixels = defaultValue(options.borderWidthInPixels, 1.0);\n var initialSize = defaultValue(options.initialSize, defaultInitialSize);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.context)) {\n throw new DeveloperError(\"context is required.\");\n }\n if (borderWidthInPixels < 0) {\n throw new DeveloperError(\n \"borderWidthInPixels must be greater than or equal to zero.\"\n );\n }\n if (initialSize.x < 1 || initialSize.y < 1) {\n throw new DeveloperError(\"initialSize must be greater than zero.\");\n }\n //>>includeEnd('debug');\n\n this._context = options.context;\n this._pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);\n this._borderWidthInPixels = borderWidthInPixels;\n this._textureCoordinates = [];\n this._guid = createGuid();\n this._idHash = {};\n this._initialSize = initialSize;\n\n this._root = undefined;\n}\n\nObject.defineProperties(TextureAtlas.prototype, {\n /**\n * The amount of spacing between adjacent images in pixels.\n * @memberof TextureAtlas.prototype\n * @type {Number}\n */\n borderWidthInPixels: {\n get: function () {\n return this._borderWidthInPixels;\n },\n },\n\n /**\n * An array of {@link BoundingRectangle} texture coordinate regions for all the images in the texture atlas.\n * The x and y values of the rectangle correspond to the bottom-left corner of the texture coordinate.\n * The coordinates are in the order that the corresponding images were added to the atlas.\n * @memberof TextureAtlas.prototype\n * @type {BoundingRectangle[]}\n */\n textureCoordinates: {\n get: function () {\n return this._textureCoordinates;\n },\n },\n\n /**\n * The texture that all of the images are being written to.\n * @memberof TextureAtlas.prototype\n * @type {Texture}\n */\n texture: {\n get: function () {\n if (!defined(this._texture)) {\n this._texture = new Texture({\n context: this._context,\n width: this._initialSize.x,\n height: this._initialSize.y,\n pixelFormat: this._pixelFormat,\n });\n }\n return this._texture;\n },\n },\n\n /**\n * The number of images in the texture atlas. This value increases\n * every time addImage or addImages is called.\n * Texture coordinates are subject to change if the texture atlas resizes, so it is\n * important to check {@link TextureAtlas#getGUID} before using old values.\n * @memberof TextureAtlas.prototype\n * @type {Number}\n */\n numberOfImages: {\n get: function () {\n return this._textureCoordinates.length;\n },\n },\n\n /**\n * The atlas' globally unique identifier (GUID).\n * The GUID changes whenever the texture atlas is modified.\n * Classes that use a texture atlas should check if the GUID\n * has changed before processing the atlas data.\n * @memberof TextureAtlas.prototype\n * @type {String}\n */\n guid: {\n get: function () {\n return this._guid;\n },\n },\n});\n\n// Builds a larger texture and copies the old texture into the new one.\nfunction resizeAtlas(textureAtlas, image) {\n var context = textureAtlas._context;\n var numImages = textureAtlas.numberOfImages;\n var scalingFactor = 2.0;\n var borderWidthInPixels = textureAtlas._borderWidthInPixels;\n if (numImages > 0) {\n var oldAtlasWidth = textureAtlas._texture.width;\n var oldAtlasHeight = textureAtlas._texture.height;\n var atlasWidth =\n scalingFactor * (oldAtlasWidth + image.width + borderWidthInPixels);\n var atlasHeight =\n scalingFactor * (oldAtlasHeight + image.height + borderWidthInPixels);\n var widthRatio = oldAtlasWidth / atlasWidth;\n var heightRatio = oldAtlasHeight / atlasHeight;\n\n // Create new node structure, putting the old root node in the bottom left.\n var nodeBottomRight = new TextureAtlasNode(\n new Cartesian2(oldAtlasWidth + borderWidthInPixels, borderWidthInPixels),\n new Cartesian2(atlasWidth, oldAtlasHeight)\n );\n var nodeBottomHalf = new TextureAtlasNode(\n new Cartesian2(),\n new Cartesian2(atlasWidth, oldAtlasHeight),\n textureAtlas._root,\n nodeBottomRight\n );\n var nodeTopHalf = new TextureAtlasNode(\n new Cartesian2(borderWidthInPixels, oldAtlasHeight + borderWidthInPixels),\n new Cartesian2(atlasWidth, atlasHeight)\n );\n var nodeMain = new TextureAtlasNode(\n new Cartesian2(),\n new Cartesian2(atlasWidth, atlasHeight),\n nodeBottomHalf,\n nodeTopHalf\n );\n\n // Resize texture coordinates.\n for (var i = 0; i < textureAtlas._textureCoordinates.length; i++) {\n var texCoord = textureAtlas._textureCoordinates[i];\n if (defined(texCoord)) {\n texCoord.x *= widthRatio;\n texCoord.y *= heightRatio;\n texCoord.width *= widthRatio;\n texCoord.height *= heightRatio;\n }\n }\n\n // Copy larger texture.\n var newTexture = new Texture({\n context: textureAtlas._context,\n width: atlasWidth,\n height: atlasHeight,\n pixelFormat: textureAtlas._pixelFormat,\n });\n\n var framebuffer = new Framebuffer({\n context: context,\n colorTextures: [textureAtlas._texture],\n destroyAttachments: false,\n });\n\n framebuffer._bind();\n newTexture.copyFromFramebuffer(0, 0, 0, 0, atlasWidth, atlasHeight);\n framebuffer._unBind();\n framebuffer.destroy();\n textureAtlas._texture =\n textureAtlas._texture && textureAtlas._texture.destroy();\n textureAtlas._texture = newTexture;\n textureAtlas._root = nodeMain;\n } else {\n // First image exceeds initialSize\n var initialWidth = scalingFactor * (image.width + 2 * borderWidthInPixels);\n var initialHeight =\n scalingFactor * (image.height + 2 * borderWidthInPixels);\n if (initialWidth < textureAtlas._initialSize.x) {\n initialWidth = textureAtlas._initialSize.x;\n }\n if (initialHeight < textureAtlas._initialSize.y) {\n initialHeight = textureAtlas._initialSize.y;\n }\n textureAtlas._texture =\n textureAtlas._texture && textureAtlas._texture.destroy();\n textureAtlas._texture = new Texture({\n context: textureAtlas._context,\n width: initialWidth,\n height: initialHeight,\n pixelFormat: textureAtlas._pixelFormat,\n });\n textureAtlas._root = new TextureAtlasNode(\n new Cartesian2(borderWidthInPixels, borderWidthInPixels),\n new Cartesian2(initialWidth, initialHeight)\n );\n }\n}\n\n// A recursive function that finds the best place to insert\n// a new image based on existing image 'nodes'.\n// Inspired by: http://blackpawn.com/texts/lightmaps/default.html\nfunction findNode(textureAtlas, node, image) {\n if (!defined(node)) {\n return undefined;\n }\n\n // If a leaf node\n if (!defined(node.childNode1) && !defined(node.childNode2)) {\n // Node already contains an image, don't add to it.\n if (defined(node.imageIndex)) {\n return undefined;\n }\n\n var nodeWidth = node.topRight.x - node.bottomLeft.x;\n var nodeHeight = node.topRight.y - node.bottomLeft.y;\n var widthDifference = nodeWidth - image.width;\n var heightDifference = nodeHeight - image.height;\n\n // Node is smaller than the image.\n if (widthDifference < 0 || heightDifference < 0) {\n return undefined;\n }\n\n // If the node is the same size as the image, return the node\n if (widthDifference === 0 && heightDifference === 0) {\n return node;\n }\n\n // Vertical split (childNode1 = left half, childNode2 = right half).\n if (widthDifference > heightDifference) {\n node.childNode1 = new TextureAtlasNode(\n new Cartesian2(node.bottomLeft.x, node.bottomLeft.y),\n new Cartesian2(node.bottomLeft.x + image.width, node.topRight.y)\n );\n // Only make a second child if the border gives enough space.\n var childNode2BottomLeftX =\n node.bottomLeft.x + image.width + textureAtlas._borderWidthInPixels;\n if (childNode2BottomLeftX < node.topRight.x) {\n node.childNode2 = new TextureAtlasNode(\n new Cartesian2(childNode2BottomLeftX, node.bottomLeft.y),\n new Cartesian2(node.topRight.x, node.topRight.y)\n );\n }\n }\n // Horizontal split (childNode1 = bottom half, childNode2 = top half).\n else {\n node.childNode1 = new TextureAtlasNode(\n new Cartesian2(node.bottomLeft.x, node.bottomLeft.y),\n new Cartesian2(node.topRight.x, node.bottomLeft.y + image.height)\n );\n // Only make a second child if the border gives enough space.\n var childNode2BottomLeftY =\n node.bottomLeft.y + image.height + textureAtlas._borderWidthInPixels;\n if (childNode2BottomLeftY < node.topRight.y) {\n node.childNode2 = new TextureAtlasNode(\n new Cartesian2(node.bottomLeft.x, childNode2BottomLeftY),\n new Cartesian2(node.topRight.x, node.topRight.y)\n );\n }\n }\n return findNode(textureAtlas, node.childNode1, image);\n }\n\n // If not a leaf node\n return (\n findNode(textureAtlas, node.childNode1, image) ||\n findNode(textureAtlas, node.childNode2, image)\n );\n}\n\n// Adds image of given index to the texture atlas. Called from addImage and addImages.\nfunction addImage(textureAtlas, image, index) {\n var node = findNode(textureAtlas, textureAtlas._root, image);\n if (defined(node)) {\n // Found a node that can hold the image.\n node.imageIndex = index;\n\n // Add texture coordinate and write to texture\n var atlasWidth = textureAtlas._texture.width;\n var atlasHeight = textureAtlas._texture.height;\n var nodeWidth = node.topRight.x - node.bottomLeft.x;\n var nodeHeight = node.topRight.y - node.bottomLeft.y;\n var x = node.bottomLeft.x / atlasWidth;\n var y = node.bottomLeft.y / atlasHeight;\n var w = nodeWidth / atlasWidth;\n var h = nodeHeight / atlasHeight;\n textureAtlas._textureCoordinates[index] = new BoundingRectangle(x, y, w, h);\n textureAtlas._texture.copyFrom(image, node.bottomLeft.x, node.bottomLeft.y);\n } else {\n // No node found, must resize the texture atlas.\n resizeAtlas(textureAtlas, image);\n addImage(textureAtlas, image, index);\n }\n\n textureAtlas._guid = createGuid();\n}\n\n/**\n * Adds an image to the atlas. If the image is already in the atlas, the atlas is unchanged and\n * the existing index is used.\n *\n * @param {String} id An identifier to detect whether the image already exists in the atlas.\n * @param {HTMLImageElement|HTMLCanvasElement|String|Resource|Promise|TextureAtlas.CreateImageCallback} image An image or canvas to add to the texture atlas,\n * or a URL to an Image, or a Promise for an image, or a function that creates an image.\n * @returns {Promise.<Number>} A Promise for the image index.\n */\nTextureAtlas.prototype.addImage = function (id, image) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n if (!defined(image)) {\n throw new DeveloperError(\"image is required.\");\n }\n //>>includeEnd('debug');\n\n var indexPromise = this._idHash[id];\n if (defined(indexPromise)) {\n // we're already aware of this source\n return indexPromise;\n }\n\n // not in atlas, create the promise for the index\n\n if (typeof image === \"function\") {\n // if image is a function, call it\n image = image(id);\n //>>includeStart('debug', pragmas.debug);\n if (!defined(image)) {\n throw new DeveloperError(\"image is required.\");\n }\n //>>includeEnd('debug');\n } else if (typeof image === \"string\" || image instanceof Resource) {\n // Get a resource\n var resource = Resource.createIfNeeded(image);\n image = resource.fetchImage();\n }\n\n var that = this;\n\n indexPromise = when(image, function (image) {\n if (that.isDestroyed()) {\n return -1;\n }\n\n var index = that.numberOfImages;\n\n addImage(that, image, index);\n\n return index;\n });\n\n // store the promise\n this._idHash[id] = indexPromise;\n\n return indexPromise;\n};\n\n/**\n * Add a sub-region of an existing atlas image as additional image indices.\n *\n * @param {String} id The identifier of the existing image.\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} sub-region measured in pixels from the bottom-left.\n *\n * @returns {Promise.<Number>} A Promise for the image index.\n */\nTextureAtlas.prototype.addSubRegion = function (id, subRegion) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n if (!defined(subRegion)) {\n throw new DeveloperError(\"subRegion is required.\");\n }\n //>>includeEnd('debug');\n\n var indexPromise = this._idHash[id];\n if (!defined(indexPromise)) {\n throw new RuntimeError(\n 'image with id \"' + id + '\" not found in the atlas.'\n );\n }\n\n var that = this;\n return when(indexPromise, function (index) {\n if (index === -1) {\n // the atlas is destroyed\n return -1;\n }\n var atlasWidth = that._texture.width;\n var atlasHeight = that._texture.height;\n var numImages = that.numberOfImages;\n\n var baseRegion = that._textureCoordinates[index];\n var x = baseRegion.x + subRegion.x / atlasWidth;\n var y = baseRegion.y + subRegion.y / atlasHeight;\n var w = subRegion.width / atlasWidth;\n var h = subRegion.height / atlasHeight;\n that._textureCoordinates.push(new BoundingRectangle(x, y, w, h));\n that._guid = createGuid();\n\n return numImages;\n });\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see TextureAtlas#destroy\n */\nTextureAtlas.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * atlas = atlas && atlas.destroy();\n *\n * @see TextureAtlas#isDestroyed\n */\nTextureAtlas.prototype.destroy = function () {\n this._texture = this._texture && this._texture.destroy();\n return destroyObject(this);\n};\n\n/**\n * A function that creates an image.\n * @callback TextureAtlas.CreateImageCallback\n * @param {String} id The identifier of the image to load.\n * @returns {HTMLImageElement|Promise<HTMLImageElement>} The image, or a promise that will resolve to an image.\n */\nexport default TextureAtlas;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArrayFacade from \"../Renderer/VertexArrayFacade.js\";\nimport BillboardCollectionFS from \"../Shaders/BillboardCollectionFS.js\";\nimport BillboardCollectionVS from \"../Shaders/BillboardCollectionVS.js\";\nimport Billboard from \"./Billboard.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport TextureAtlas from \"./TextureAtlas.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\n\nvar SHOW_INDEX = Billboard.SHOW_INDEX;\nvar POSITION_INDEX = Billboard.POSITION_INDEX;\nvar PIXEL_OFFSET_INDEX = Billboard.PIXEL_OFFSET_INDEX;\nvar EYE_OFFSET_INDEX = Billboard.EYE_OFFSET_INDEX;\nvar HORIZONTAL_ORIGIN_INDEX = Billboard.HORIZONTAL_ORIGIN_INDEX;\nvar VERTICAL_ORIGIN_INDEX = Billboard.VERTICAL_ORIGIN_INDEX;\nvar SCALE_INDEX = Billboard.SCALE_INDEX;\nvar IMAGE_INDEX_INDEX = Billboard.IMAGE_INDEX_INDEX;\nvar COLOR_INDEX = Billboard.COLOR_INDEX;\nvar ROTATION_INDEX = Billboard.ROTATION_INDEX;\nvar ALIGNED_AXIS_INDEX = Billboard.ALIGNED_AXIS_INDEX;\nvar SCALE_BY_DISTANCE_INDEX = Billboard.SCALE_BY_DISTANCE_INDEX;\nvar TRANSLUCENCY_BY_DISTANCE_INDEX = Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX;\nvar PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX =\n Billboard.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX;\nvar DISTANCE_DISPLAY_CONDITION_INDEX = Billboard.DISTANCE_DISPLAY_CONDITION;\nvar DISABLE_DEPTH_DISTANCE = Billboard.DISABLE_DEPTH_DISTANCE;\nvar TEXTURE_COORDINATE_BOUNDS = Billboard.TEXTURE_COORDINATE_BOUNDS;\nvar SDF_INDEX = Billboard.SDF_INDEX;\nvar NUMBER_OF_PROPERTIES = Billboard.NUMBER_OF_PROPERTIES;\n\nvar attributeLocations;\n\nvar attributeLocationsBatched = {\n positionHighAndScale: 0,\n positionLowAndRotation: 1,\n compressedAttribute0: 2, // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates\n compressedAttribute1: 3, // aligned axis, translucency by distance, image width\n compressedAttribute2: 4, // image height, color, pick color, size in meters, valid aligned axis, 13 bits free\n eyeOffset: 5, // 4 bytes free\n scaleByDistance: 6,\n pixelOffsetScaleByDistance: 7,\n compressedAttribute3: 8,\n textureCoordinateBoundsOrLabelTranslate: 9,\n a_batchId: 10,\n sdf: 11,\n};\n\nvar attributeLocationsInstanced = {\n direction: 0,\n positionHighAndScale: 1,\n positionLowAndRotation: 2, // texture offset in w\n compressedAttribute0: 3,\n compressedAttribute1: 4,\n compressedAttribute2: 5,\n eyeOffset: 6, // texture range in w\n scaleByDistance: 7,\n pixelOffsetScaleByDistance: 8,\n compressedAttribute3: 9,\n textureCoordinateBoundsOrLabelTranslate: 10,\n a_batchId: 11,\n sdf: 12,\n};\n\n/**\n * A renderable collection of billboards. Billboards are viewport-aligned\n * images positioned in the 3D scene.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n * <br /><br />\n * Billboards are added and removed from the collection using {@link BillboardCollection#add}\n * and {@link BillboardCollection#remove}. Billboards in a collection automatically share textures\n * for images with the same identifier.\n *\n * @alias BillboardCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each billboard from model to world coordinates.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Scene} [options.scene] Must be passed in for billboards that use the height reference property or will be depth tested against the globe.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The billboard blending option. The default\n * is used for rendering both opaque and translucent billboards. However, if either all of the billboards are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n *\n * @performance For best performance, prefer a few collections, each with many billboards, to\n * many collections with only a few billboards each. Organize collections so that billboards\n * with the same update frequency are in the same collection, i.e., billboards that do not\n * change should be in one collection; billboards that change every frame should be in another\n * collection; and so on.\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#remove\n * @see Billboard\n * @see LabelCollection\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Billboards.html|Cesium Sandcastle Billboard Demo}\n *\n * @example\n * // Create a billboard collection with two billboards\n * var billboards = scene.primitives.add(new Cesium.BillboardCollection());\n * billboards.add({\n * position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n * image : 'url/to/image'\n * });\n * billboards.add({\n * position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n * image : 'url/to/another/image'\n * });\n */\nfunction BillboardCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._scene = options.scene;\n this._batchTable = options.batchTable;\n\n this._textureAtlas = undefined;\n this._textureAtlasGUID = undefined;\n this._destroyTextureAtlas = true;\n this._sp = undefined;\n this._spTranslucent = undefined;\n this._rsOpaque = undefined;\n this._rsTranslucent = undefined;\n this._vaf = undefined;\n\n this._billboards = [];\n this._billboardsToUpdate = [];\n this._billboardsToUpdateIndex = 0;\n this._billboardsRemoved = false;\n this._createVertexArray = false;\n\n this._shaderRotation = false;\n this._compiledShaderRotation = false;\n\n this._shaderAlignedAxis = false;\n this._compiledShaderAlignedAxis = false;\n\n this._shaderScaleByDistance = false;\n this._compiledShaderScaleByDistance = false;\n\n this._shaderTranslucencyByDistance = false;\n this._compiledShaderTranslucencyByDistance = false;\n\n this._shaderPixelOffsetScaleByDistance = false;\n this._compiledShaderPixelOffsetScaleByDistance = false;\n\n this._shaderDistanceDisplayCondition = false;\n this._compiledShaderDistanceDisplayCondition = false;\n\n this._shaderDisableDepthDistance = false;\n this._compiledShaderDisableDepthDistance = false;\n\n this._shaderClampToGround = false;\n this._compiledShaderClampToGround = false;\n\n this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n\n this._maxSize = 0.0;\n this._maxEyeOffset = 0.0;\n this._maxScale = 1.0;\n this._maxPixelOffset = 0.0;\n this._allHorizontalCenter = true;\n this._allVerticalCenter = true;\n this._allSizedInMeters = true;\n\n this._baseVolume = new BoundingSphere();\n this._baseVolumeWC = new BoundingSphere();\n this._baseVolume2D = new BoundingSphere();\n this._boundingVolume = new BoundingSphere();\n this._boundingVolumeDirty = false;\n\n this._colorCommands = [];\n\n /**\n * The 4x4 transformation matrix that transforms each billboard in this collection from model to world coordinates.\n * When this is the identity matrix, the billboards are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n * @default {@link Matrix4.IDENTITY}\n *\n *\n * @example\n * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * billboards.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n * billboards.add({\n * image : 'url/to/image',\n * position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center\n * });\n * billboards.add({\n * image : 'url/to/image',\n * position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east\n * });\n * billboards.add({\n * image : 'url/to/image',\n * position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north\n * });\n * billboards.add({\n * image : 'url/to/image',\n * position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up\n * });\n *\n * @see Transforms.eastNorthUpToFixedFrame\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the texture atlas for this BillboardCollection as a fullscreen quad.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowTextureAtlas = defaultValue(\n options.debugShowTextureAtlas,\n false\n );\n\n /**\n * The billboard blending option. The default is used for rendering both opaque and translucent billboards.\n * However, if either all of the billboards are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n * performance by up to 2x.\n * @type {BlendOption}\n * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n */\n this.blendOption = defaultValue(\n options.blendOption,\n BlendOption.OPAQUE_AND_TRANSLUCENT\n );\n this._blendOption = undefined;\n\n this._mode = SceneMode.SCENE3D;\n\n // The buffer usage for each attribute is determined based on the usage of the attribute over time.\n this._buffersUsage = [\n BufferUsage.STATIC_DRAW, // SHOW_INDEX\n BufferUsage.STATIC_DRAW, // POSITION_INDEX\n BufferUsage.STATIC_DRAW, // PIXEL_OFFSET_INDEX\n BufferUsage.STATIC_DRAW, // EYE_OFFSET_INDEX\n BufferUsage.STATIC_DRAW, // HORIZONTAL_ORIGIN_INDEX\n BufferUsage.STATIC_DRAW, // VERTICAL_ORIGIN_INDEX\n BufferUsage.STATIC_DRAW, // SCALE_INDEX\n BufferUsage.STATIC_DRAW, // IMAGE_INDEX_INDEX\n BufferUsage.STATIC_DRAW, // COLOR_INDEX\n BufferUsage.STATIC_DRAW, // ROTATION_INDEX\n BufferUsage.STATIC_DRAW, // ALIGNED_AXIS_INDEX\n BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX\n BufferUsage.STATIC_DRAW, // TRANSLUCENCY_BY_DISTANCE_INDEX\n BufferUsage.STATIC_DRAW, // PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX\n BufferUsage.STATIC_DRAW, // DISTANCE_DISPLAY_CONDITION_INDEX\n BufferUsage.STATIC_DRAW, // TEXTURE_COORDINATE_BOUNDS\n ];\n\n this._highlightColor = Color.clone(Color.WHITE); // Only used by Vector3DTilePoints\n\n var that = this;\n this._uniforms = {\n u_atlas: function () {\n return that._textureAtlas.texture;\n },\n u_highlightColor: function () {\n return that._highlightColor;\n },\n };\n\n var scene = this._scene;\n if (defined(scene) && defined(scene.terrainProviderChanged)) {\n this._removeCallbackFunc = scene.terrainProviderChanged.addEventListener(\n function () {\n var billboards = this._billboards;\n var length = billboards.length;\n for (var i = 0; i < length; ++i) {\n if (defined(billboards[i])) {\n billboards[i]._updateClamping();\n }\n }\n },\n this\n );\n }\n}\n\nObject.defineProperties(BillboardCollection.prototype, {\n /**\n * Returns the number of billboards in this collection. This is commonly used with\n * {@link BillboardCollection#get} to iterate over all the billboards\n * in the collection.\n * @memberof BillboardCollection.prototype\n * @type {Number}\n */\n length: {\n get: function () {\n removeBillboards(this);\n return this._billboards.length;\n },\n },\n\n /**\n * Gets or sets the textureAtlas.\n * @memberof BillboardCollection.prototype\n * @type {TextureAtlas}\n * @private\n */\n textureAtlas: {\n get: function () {\n return this._textureAtlas;\n },\n set: function (value) {\n if (this._textureAtlas !== value) {\n this._textureAtlas =\n this._destroyTextureAtlas &&\n this._textureAtlas &&\n this._textureAtlas.destroy();\n this._textureAtlas = value;\n this._createVertexArray = true; // New per-billboard texture coordinates\n }\n },\n },\n\n /**\n * Gets or sets a value which determines if the texture atlas is\n * destroyed when the collection is destroyed.\n *\n * If the texture atlas is used by more than one collection, set this to <code>false</code>,\n * and explicitly destroy the atlas to avoid attempting to destroy it multiple times.\n *\n * @memberof BillboardCollection.prototype\n * @type {Boolean}\n * @private\n *\n * @example\n * // Set destroyTextureAtlas\n * // Destroy a billboard collection but not its texture atlas.\n *\n * var atlas = new TextureAtlas({\n * scene : scene,\n * images : images\n * });\n * billboards.textureAtlas = atlas;\n * billboards.destroyTextureAtlas = false;\n * billboards = billboards.destroy();\n * console.log(atlas.isDestroyed()); // False\n */\n destroyTextureAtlas: {\n get: function () {\n return this._destroyTextureAtlas;\n },\n set: function (value) {\n this._destroyTextureAtlas = value;\n },\n },\n});\n\nfunction destroyBillboards(billboards) {\n var length = billboards.length;\n for (var i = 0; i < length; ++i) {\n if (billboards[i]) {\n billboards[i]._destroy();\n }\n }\n}\n\n/**\n * Creates and adds a billboard with the specified initial properties to the collection.\n * The added billboard is returned so it can be modified or removed from the collection later.\n *\n * @param {Object}[options] A template describing the billboard's properties as shown in Example 1.\n * @returns {Billboard} The billboard that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead. For\n * best performance, add as many billboards as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1: Add a billboard, specifying all the default values.\n * var b = billboards.add({\n * show : true,\n * position : Cesium.Cartesian3.ZERO,\n * pixelOffset : Cesium.Cartesian2.ZERO,\n * eyeOffset : Cesium.Cartesian3.ZERO,\n * heightReference : Cesium.HeightReference.NONE,\n * horizontalOrigin : Cesium.HorizontalOrigin.CENTER,\n * verticalOrigin : Cesium.VerticalOrigin.CENTER,\n * scale : 1.0,\n * image : 'url/to/image',\n * imageSubRegion : undefined,\n * color : Cesium.Color.WHITE,\n * id : undefined,\n * rotation : 0.0,\n * alignedAxis : Cesium.Cartesian3.ZERO,\n * width : undefined,\n * height : undefined,\n * scaleByDistance : undefined,\n * translucencyByDistance : undefined,\n * pixelOffsetScaleByDistance : undefined,\n * sizeInMeters : false,\n * distanceDisplayCondition : undefined\n * });\n *\n * @example\n * // Example 2: Specify only the billboard's cartographic position.\n * var b = billboards.add({\n * position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)\n * });\n *\n * @see BillboardCollection#remove\n * @see BillboardCollection#removeAll\n */\nBillboardCollection.prototype.add = function (options) {\n var b = new Billboard(options, this);\n b._index = this._billboards.length;\n\n this._billboards.push(b);\n this._createVertexArray = true;\n\n return b;\n};\n\n/**\n * Removes a billboard from the collection.\n *\n * @param {Billboard} billboard The billboard to remove.\n * @returns {Boolean} <code>true</code> if the billboard was removed; <code>false</code> if the billboard was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead. For\n * best performance, remove as many billboards as possible before calling <code>update</code>.\n * If you intend to temporarily hide a billboard, it is usually more efficient to call\n * {@link Billboard#show} instead of removing and re-adding the billboard.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * var b = billboards.add(...);\n * billboards.remove(b); // Returns true\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#removeAll\n * @see Billboard#show\n */\nBillboardCollection.prototype.remove = function (billboard) {\n if (this.contains(billboard)) {\n this._billboards[billboard._index] = null; // Removed later\n this._billboardsRemoved = true;\n this._createVertexArray = true;\n billboard._destroy();\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all billboards from the collection.\n *\n * @performance <code>O(n)</code>. It is more efficient to remove all the billboards\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * billboards.add(...);\n * billboards.add(...);\n * billboards.removeAll();\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#remove\n */\nBillboardCollection.prototype.removeAll = function () {\n destroyBillboards(this._billboards);\n this._billboards = [];\n this._billboardsToUpdate = [];\n this._billboardsToUpdateIndex = 0;\n this._billboardsRemoved = false;\n\n this._createVertexArray = true;\n};\n\nfunction removeBillboards(billboardCollection) {\n if (billboardCollection._billboardsRemoved) {\n billboardCollection._billboardsRemoved = false;\n\n var newBillboards = [];\n var billboards = billboardCollection._billboards;\n var length = billboards.length;\n for (var i = 0, j = 0; i < length; ++i) {\n var billboard = billboards[i];\n if (billboard) {\n billboard._index = j++;\n newBillboards.push(billboard);\n }\n }\n\n billboardCollection._billboards = newBillboards;\n }\n}\n\nBillboardCollection.prototype._updateBillboard = function (\n billboard,\n propertyChanged\n) {\n if (!billboard._dirty) {\n this._billboardsToUpdate[this._billboardsToUpdateIndex++] = billboard;\n }\n\n ++this._propertiesChanged[propertyChanged];\n};\n\n/**\n * Check whether this collection contains a given billboard.\n *\n * @param {Billboard} [billboard] The billboard to check for.\n * @returns {Boolean} true if this collection contains the billboard, false otherwise.\n *\n * @see BillboardCollection#get\n */\nBillboardCollection.prototype.contains = function (billboard) {\n return defined(billboard) && billboard._billboardCollection === this;\n};\n\n/**\n * Returns the billboard in the collection at the specified index. Indices are zero-based\n * and increase as billboards are added. Removing a billboard shifts all billboards after\n * it to the left, changing their indices. This function is commonly used with\n * {@link BillboardCollection#length} to iterate over all the billboards\n * in the collection.\n *\n * @param {Number} index The zero-based index of the billboard.\n * @returns {Billboard} The billboard at the specified index.\n *\n * @performance Expected constant time. If billboards were removed from the collection and\n * {@link BillboardCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every billboard in the collection\n * var len = billboards.length;\n * for (var i = 0; i < len; ++i) {\n * var b = billboards.get(i);\n * b.show = !b.show;\n * }\n *\n * @see BillboardCollection#length\n */\nBillboardCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n removeBillboards(this);\n return this._billboards[index];\n};\n\nvar getIndexBuffer;\n\nfunction getIndexBufferBatched(context) {\n var sixteenK = 16 * 1024;\n\n var indexBuffer = context.cache.billboardCollection_indexBufferBatched;\n if (defined(indexBuffer)) {\n return indexBuffer;\n }\n\n // Subtract 6 because the last index is reserverd for primitive restart.\n // https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.18\n var length = sixteenK * 6 - 6;\n var indices = new Uint16Array(length);\n for (var i = 0, j = 0; i < length; i += 6, j += 4) {\n indices[i] = j;\n indices[i + 1] = j + 1;\n indices[i + 2] = j + 2;\n\n indices[i + 3] = j + 0;\n indices[i + 4] = j + 2;\n indices[i + 5] = j + 3;\n }\n\n // PERFORMANCE_IDEA: Should we reference count billboard collections, and eventually delete this?\n // Is this too much memory to allocate up front? Should we dynamically grow it?\n indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n indexBuffer.vertexArrayDestroyable = false;\n context.cache.billboardCollection_indexBufferBatched = indexBuffer;\n return indexBuffer;\n}\n\nfunction getIndexBufferInstanced(context) {\n var indexBuffer = context.cache.billboardCollection_indexBufferInstanced;\n if (defined(indexBuffer)) {\n return indexBuffer;\n }\n\n indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: new Uint16Array([0, 1, 2, 0, 2, 3]),\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n\n indexBuffer.vertexArrayDestroyable = false;\n context.cache.billboardCollection_indexBufferInstanced = indexBuffer;\n return indexBuffer;\n}\n\nfunction getVertexBufferInstanced(context) {\n var vertexBuffer = context.cache.billboardCollection_vertexBufferInstanced;\n if (defined(vertexBuffer)) {\n return vertexBuffer;\n }\n\n vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: new Float32Array([0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0]),\n usage: BufferUsage.STATIC_DRAW,\n });\n\n vertexBuffer.vertexArrayDestroyable = false;\n context.cache.billboardCollection_vertexBufferInstanced = vertexBuffer;\n return vertexBuffer;\n}\n\nBillboardCollection.prototype.computeNewBuffersUsage = function () {\n var buffersUsage = this._buffersUsage;\n var usageChanged = false;\n\n var properties = this._propertiesChanged;\n for (var k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n var newUsage =\n properties[k] === 0 ? BufferUsage.STATIC_DRAW : BufferUsage.STREAM_DRAW;\n usageChanged = usageChanged || buffersUsage[k] !== newUsage;\n buffersUsage[k] = newUsage;\n }\n\n return usageChanged;\n};\n\nfunction createVAF(\n context,\n numberOfBillboards,\n buffersUsage,\n instanced,\n batchTable,\n sdf\n) {\n var attributes = [\n {\n index: attributeLocations.positionHighAndScale,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[POSITION_INDEX],\n },\n {\n index: attributeLocations.positionLowAndRotation,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[POSITION_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute0,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[PIXEL_OFFSET_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute1,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[TRANSLUCENCY_BY_DISTANCE_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute2,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[COLOR_INDEX],\n },\n {\n index: attributeLocations.eyeOffset,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[EYE_OFFSET_INDEX],\n },\n {\n index: attributeLocations.scaleByDistance,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[SCALE_BY_DISTANCE_INDEX],\n },\n {\n index: attributeLocations.pixelOffsetScaleByDistance,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute3,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[DISTANCE_DISPLAY_CONDITION_INDEX],\n },\n {\n index: attributeLocations.textureCoordinateBoundsOrLabelTranslate,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[TEXTURE_COORDINATE_BOUNDS],\n },\n ];\n\n // Instancing requires one non-instanced attribute.\n if (instanced) {\n attributes.push({\n index: attributeLocations.direction,\n componentsPerAttribute: 2,\n componentDatatype: ComponentDatatype.FLOAT,\n vertexBuffer: getVertexBufferInstanced(context),\n });\n }\n\n if (defined(batchTable)) {\n attributes.push({\n index: attributeLocations.a_batchId,\n componentsPerAttribute: 1,\n componentDatatype: ComponentDatatype.FLOAT,\n bufferUsage: BufferUsage.STATIC_DRAW,\n });\n }\n\n if (sdf) {\n attributes.push({\n index: attributeLocations.sdf,\n componentsPerAttribute: 2,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[SDF_INDEX],\n });\n }\n\n // When instancing is enabled, only one vertex is needed for each billboard.\n var sizeInVertices = instanced ? numberOfBillboards : 4 * numberOfBillboards;\n return new VertexArrayFacade(context, attributes, sizeInVertices, instanced);\n}\n\n///////////////////////////////////////////////////////////////////////////\n\n// Four vertices per billboard. Each has the same position, etc., but a different screen-space direction vector.\n\n// PERFORMANCE_IDEA: Save memory if a property is the same for all billboards, use a latched attribute state,\n// instead of storing it in a vertex buffer.\n\nvar writePositionScratch = new EncodedCartesian3();\n\nfunction writePositionScaleAndRotation(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var positionHighWriter = vafWriters[attributeLocations.positionHighAndScale];\n var positionLowWriter = vafWriters[attributeLocations.positionLowAndRotation];\n var position = billboard._getActualPosition();\n\n if (billboardCollection._mode === SceneMode.SCENE3D) {\n BoundingSphere.expand(\n billboardCollection._baseVolume,\n position,\n billboardCollection._baseVolume\n );\n billboardCollection._boundingVolumeDirty = true;\n }\n\n EncodedCartesian3.fromCartesian(position, writePositionScratch);\n var scale = billboard.scale;\n var rotation = billboard.rotation;\n\n if (rotation !== 0.0) {\n billboardCollection._shaderRotation = true;\n }\n\n billboardCollection._maxScale = Math.max(\n billboardCollection._maxScale,\n scale\n );\n\n var high = writePositionScratch.high;\n var low = writePositionScratch.low;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n positionHighWriter(i, high.x, high.y, high.z, scale);\n positionLowWriter(i, low.x, low.y, low.z, rotation);\n } else {\n i = billboard._index * 4;\n positionHighWriter(i + 0, high.x, high.y, high.z, scale);\n positionHighWriter(i + 1, high.x, high.y, high.z, scale);\n positionHighWriter(i + 2, high.x, high.y, high.z, scale);\n positionHighWriter(i + 3, high.x, high.y, high.z, scale);\n\n positionLowWriter(i + 0, low.x, low.y, low.z, rotation);\n positionLowWriter(i + 1, low.x, low.y, low.z, rotation);\n positionLowWriter(i + 2, low.x, low.y, low.z, rotation);\n positionLowWriter(i + 3, low.x, low.y, low.z, rotation);\n }\n}\n\nvar scratchCartesian2 = new Cartesian2();\n\nvar UPPER_BOUND = 32768.0; // 2^15\n\nvar LEFT_SHIFT16 = 65536.0; // 2^16\nvar LEFT_SHIFT12 = 4096.0; // 2^12\nvar LEFT_SHIFT8 = 256.0; // 2^8\nvar LEFT_SHIFT7 = 128.0;\nvar LEFT_SHIFT5 = 32.0;\nvar LEFT_SHIFT3 = 8.0;\nvar LEFT_SHIFT2 = 4.0;\n\nvar RIGHT_SHIFT8 = 1.0 / 256.0;\n\nvar LOWER_LEFT = 0.0;\nvar LOWER_RIGHT = 2.0;\nvar UPPER_RIGHT = 3.0;\nvar UPPER_LEFT = 1.0;\n\nfunction writeCompressedAttrib0(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.compressedAttribute0];\n var pixelOffset = billboard.pixelOffset;\n var pixelOffsetX = pixelOffset.x;\n var pixelOffsetY = pixelOffset.y;\n\n var translate = billboard._translate;\n var translateX = translate.x;\n var translateY = translate.y;\n\n billboardCollection._maxPixelOffset = Math.max(\n billboardCollection._maxPixelOffset,\n Math.abs(pixelOffsetX + translateX),\n Math.abs(-pixelOffsetY + translateY)\n );\n\n var horizontalOrigin = billboard.horizontalOrigin;\n var verticalOrigin = billboard._verticalOrigin;\n var show = billboard.show && billboard.clusterShow;\n\n // If the color alpha is zero, do not show this billboard. This lets us avoid providing\n // color during the pick pass and also eliminates a discard in the fragment shader.\n if (billboard.color.alpha === 0.0) {\n show = false;\n }\n\n // Raw billboards don't distinguish between BASELINE and BOTTOM, only LabelCollection does that.\n if (verticalOrigin === VerticalOrigin.BASELINE) {\n verticalOrigin = VerticalOrigin.BOTTOM;\n }\n\n billboardCollection._allHorizontalCenter =\n billboardCollection._allHorizontalCenter &&\n horizontalOrigin === HorizontalOrigin.CENTER;\n billboardCollection._allVerticalCenter =\n billboardCollection._allVerticalCenter &&\n verticalOrigin === VerticalOrigin.CENTER;\n\n var bottomLeftX = 0;\n var bottomLeftY = 0;\n var width = 0;\n var height = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n bottomLeftX = imageRectangle.x;\n bottomLeftY = imageRectangle.y;\n width = imageRectangle.width;\n height = imageRectangle.height;\n }\n var topRightX = bottomLeftX + width;\n var topRightY = bottomLeftY + height;\n\n var compressed0 =\n Math.floor(\n CesiumMath.clamp(pixelOffsetX, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND\n ) * LEFT_SHIFT7;\n compressed0 += (horizontalOrigin + 1.0) * LEFT_SHIFT5;\n compressed0 += (verticalOrigin + 1.0) * LEFT_SHIFT3;\n compressed0 += (show ? 1.0 : 0.0) * LEFT_SHIFT2;\n\n var compressed1 =\n Math.floor(\n CesiumMath.clamp(pixelOffsetY, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND\n ) * LEFT_SHIFT8;\n var compressed2 =\n Math.floor(\n CesiumMath.clamp(translateX, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND\n ) * LEFT_SHIFT8;\n\n var tempTanslateY =\n (CesiumMath.clamp(translateY, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND) *\n RIGHT_SHIFT8;\n var upperTranslateY = Math.floor(tempTanslateY);\n var lowerTranslateY = Math.floor(\n (tempTanslateY - upperTranslateY) * LEFT_SHIFT8\n );\n\n compressed1 += upperTranslateY;\n compressed2 += lowerTranslateY;\n\n scratchCartesian2.x = bottomLeftX;\n scratchCartesian2.y = bottomLeftY;\n var compressedTexCoordsLL = AttributeCompression.compressTextureCoordinates(\n scratchCartesian2\n );\n scratchCartesian2.x = topRightX;\n var compressedTexCoordsLR = AttributeCompression.compressTextureCoordinates(\n scratchCartesian2\n );\n scratchCartesian2.y = topRightY;\n var compressedTexCoordsUR = AttributeCompression.compressTextureCoordinates(\n scratchCartesian2\n );\n scratchCartesian2.x = bottomLeftX;\n var compressedTexCoordsUL = AttributeCompression.compressTextureCoordinates(\n scratchCartesian2\n );\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, compressed0, compressed1, compressed2, compressedTexCoordsLL);\n } else {\n i = billboard._index * 4;\n writer(\n i + 0,\n compressed0 + LOWER_LEFT,\n compressed1,\n compressed2,\n compressedTexCoordsLL\n );\n writer(\n i + 1,\n compressed0 + LOWER_RIGHT,\n compressed1,\n compressed2,\n compressedTexCoordsLR\n );\n writer(\n i + 2,\n compressed0 + UPPER_RIGHT,\n compressed1,\n compressed2,\n compressedTexCoordsUR\n );\n writer(\n i + 3,\n compressed0 + UPPER_LEFT,\n compressed1,\n compressed2,\n compressedTexCoordsUL\n );\n }\n}\n\nfunction writeCompressedAttrib1(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.compressedAttribute1];\n var alignedAxis = billboard.alignedAxis;\n if (!Cartesian3.equals(alignedAxis, Cartesian3.ZERO)) {\n billboardCollection._shaderAlignedAxis = true;\n }\n\n var near = 0.0;\n var nearValue = 1.0;\n var far = 1.0;\n var farValue = 1.0;\n\n var translucency = billboard.translucencyByDistance;\n if (defined(translucency)) {\n near = translucency.near;\n nearValue = translucency.nearValue;\n far = translucency.far;\n farValue = translucency.farValue;\n\n if (nearValue !== 1.0 || farValue !== 1.0) {\n // translucency by distance calculation in shader need not be enabled\n // until a billboard with near and far !== 1.0 is found\n billboardCollection._shaderTranslucencyByDistance = true;\n }\n }\n\n var width = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n width = imageRectangle.width;\n }\n\n var textureWidth = billboardCollection._textureAtlas.texture.width;\n var imageWidth = Math.round(\n defaultValue(billboard.width, textureWidth * width)\n );\n billboardCollection._maxSize = Math.max(\n billboardCollection._maxSize,\n imageWidth\n );\n\n var compressed0 = CesiumMath.clamp(imageWidth, 0.0, LEFT_SHIFT16);\n var compressed1 = 0.0;\n\n if (\n Math.abs(Cartesian3.magnitudeSquared(alignedAxis) - 1.0) <\n CesiumMath.EPSILON6\n ) {\n compressed1 = AttributeCompression.octEncodeFloat(alignedAxis);\n }\n\n nearValue = CesiumMath.clamp(nearValue, 0.0, 1.0);\n nearValue = nearValue === 1.0 ? 255.0 : (nearValue * 255.0) | 0;\n compressed0 = compressed0 * LEFT_SHIFT8 + nearValue;\n\n farValue = CesiumMath.clamp(farValue, 0.0, 1.0);\n farValue = farValue === 1.0 ? 255.0 : (farValue * 255.0) | 0;\n compressed1 = compressed1 * LEFT_SHIFT8 + farValue;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, compressed0, compressed1, near, far);\n } else {\n i = billboard._index * 4;\n writer(i + 0, compressed0, compressed1, near, far);\n writer(i + 1, compressed0, compressed1, near, far);\n writer(i + 2, compressed0, compressed1, near, far);\n writer(i + 3, compressed0, compressed1, near, far);\n }\n}\n\nfunction writeCompressedAttrib2(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.compressedAttribute2];\n var color = billboard.color;\n var pickColor = !defined(billboardCollection._batchTable)\n ? billboard.getPickId(frameState.context).color\n : Color.WHITE;\n var sizeInMeters = billboard.sizeInMeters ? 1.0 : 0.0;\n var validAlignedAxis =\n Math.abs(Cartesian3.magnitudeSquared(billboard.alignedAxis) - 1.0) <\n CesiumMath.EPSILON6\n ? 1.0\n : 0.0;\n\n billboardCollection._allSizedInMeters =\n billboardCollection._allSizedInMeters && sizeInMeters === 1.0;\n\n var height = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n height = imageRectangle.height;\n }\n\n var dimensions = billboardCollection._textureAtlas.texture.dimensions;\n var imageHeight = Math.round(\n defaultValue(billboard.height, dimensions.y * height)\n );\n billboardCollection._maxSize = Math.max(\n billboardCollection._maxSize,\n imageHeight\n );\n var labelHorizontalOrigin = defaultValue(\n billboard._labelHorizontalOrigin,\n -2\n );\n labelHorizontalOrigin += 2;\n var compressed3 = imageHeight * LEFT_SHIFT2 + labelHorizontalOrigin;\n\n var red = Color.floatToByte(color.red);\n var green = Color.floatToByte(color.green);\n var blue = Color.floatToByte(color.blue);\n var compressed0 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n red = Color.floatToByte(pickColor.red);\n green = Color.floatToByte(pickColor.green);\n blue = Color.floatToByte(pickColor.blue);\n var compressed1 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n var compressed2 =\n Color.floatToByte(color.alpha) * LEFT_SHIFT16 +\n Color.floatToByte(pickColor.alpha) * LEFT_SHIFT8;\n compressed2 += sizeInMeters * 2.0 + validAlignedAxis;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, compressed0, compressed1, compressed2, compressed3);\n } else {\n i = billboard._index * 4;\n writer(i + 0, compressed0, compressed1, compressed2, compressed3);\n writer(i + 1, compressed0, compressed1, compressed2, compressed3);\n writer(i + 2, compressed0, compressed1, compressed2, compressed3);\n writer(i + 3, compressed0, compressed1, compressed2, compressed3);\n }\n}\n\nfunction writeEyeOffset(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.eyeOffset];\n var eyeOffset = billboard.eyeOffset;\n\n // For billboards that are clamped to ground, move it slightly closer to the camera\n var eyeOffsetZ = eyeOffset.z;\n if (billboard._heightReference !== HeightReference.NONE) {\n eyeOffsetZ *= 1.005;\n }\n billboardCollection._maxEyeOffset = Math.max(\n billboardCollection._maxEyeOffset,\n Math.abs(eyeOffset.x),\n Math.abs(eyeOffset.y),\n Math.abs(eyeOffsetZ)\n );\n\n if (billboardCollection._instanced) {\n var width = 0;\n var height = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n width = imageRectangle.width;\n height = imageRectangle.height;\n }\n\n scratchCartesian2.x = width;\n scratchCartesian2.y = height;\n var compressedTexCoordsRange = AttributeCompression.compressTextureCoordinates(\n scratchCartesian2\n );\n\n i = billboard._index;\n writer(i, eyeOffset.x, eyeOffset.y, eyeOffsetZ, compressedTexCoordsRange);\n } else {\n i = billboard._index * 4;\n writer(i + 0, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n writer(i + 1, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n writer(i + 2, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n writer(i + 3, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n }\n}\n\nfunction writeScaleByDistance(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.scaleByDistance];\n var near = 0.0;\n var nearValue = 1.0;\n var far = 1.0;\n var farValue = 1.0;\n\n var scale = billboard.scaleByDistance;\n if (defined(scale)) {\n near = scale.near;\n nearValue = scale.nearValue;\n far = scale.far;\n farValue = scale.farValue;\n\n if (nearValue !== 1.0 || farValue !== 1.0) {\n // scale by distance calculation in shader need not be enabled\n // until a billboard with near and far !== 1.0 is found\n billboardCollection._shaderScaleByDistance = true;\n }\n }\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, near, nearValue, far, farValue);\n } else {\n i = billboard._index * 4;\n writer(i + 0, near, nearValue, far, farValue);\n writer(i + 1, near, nearValue, far, farValue);\n writer(i + 2, near, nearValue, far, farValue);\n writer(i + 3, near, nearValue, far, farValue);\n }\n}\n\nfunction writePixelOffsetScaleByDistance(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.pixelOffsetScaleByDistance];\n var near = 0.0;\n var nearValue = 1.0;\n var far = 1.0;\n var farValue = 1.0;\n\n var pixelOffsetScale = billboard.pixelOffsetScaleByDistance;\n if (defined(pixelOffsetScale)) {\n near = pixelOffsetScale.near;\n nearValue = pixelOffsetScale.nearValue;\n far = pixelOffsetScale.far;\n farValue = pixelOffsetScale.farValue;\n\n if (nearValue !== 1.0 || farValue !== 1.0) {\n // pixelOffsetScale by distance calculation in shader need not be enabled\n // until a billboard with near and far !== 1.0 is found\n billboardCollection._shaderPixelOffsetScaleByDistance = true;\n }\n }\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, near, nearValue, far, farValue);\n } else {\n i = billboard._index * 4;\n writer(i + 0, near, nearValue, far, farValue);\n writer(i + 1, near, nearValue, far, farValue);\n writer(i + 2, near, nearValue, far, farValue);\n writer(i + 3, near, nearValue, far, farValue);\n }\n}\n\nfunction writeCompressedAttribute3(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n var i;\n var writer = vafWriters[attributeLocations.compressedAttribute3];\n var near = 0.0;\n var far = Number.MAX_VALUE;\n\n var distanceDisplayCondition = billboard.distanceDisplayCondition;\n if (defined(distanceDisplayCondition)) {\n near = distanceDisplayCondition.near;\n far = distanceDisplayCondition.far;\n\n near *= near;\n far *= far;\n\n billboardCollection._shaderDistanceDisplayCondition = true;\n }\n\n var disableDepthTestDistance = billboard.disableDepthTestDistance;\n var clampToGround =\n billboard.heightReference === HeightReference.CLAMP_TO_GROUND &&\n frameState.context.depthTexture;\n if (!defined(disableDepthTestDistance)) {\n disableDepthTestDistance = clampToGround ? 5000.0 : 0.0;\n }\n\n disableDepthTestDistance *= disableDepthTestDistance;\n if (clampToGround || disableDepthTestDistance > 0.0) {\n billboardCollection._shaderDisableDepthDistance = true;\n if (disableDepthTestDistance === Number.POSITIVE_INFINITY) {\n disableDepthTestDistance = -1.0;\n }\n }\n\n var imageHeight;\n var imageWidth;\n\n if (!defined(billboard._labelDimensions)) {\n var height = 0;\n var width = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n height = imageRectangle.height;\n width = imageRectangle.width;\n }\n\n imageHeight = Math.round(\n defaultValue(\n billboard.height,\n billboardCollection._textureAtlas.texture.dimensions.y * height\n )\n );\n\n var textureWidth = billboardCollection._textureAtlas.texture.width;\n imageWidth = Math.round(\n defaultValue(billboard.width, textureWidth * width)\n );\n } else {\n imageWidth = billboard._labelDimensions.x;\n imageHeight = billboard._labelDimensions.y;\n }\n\n var w = Math.floor(CesiumMath.clamp(imageWidth, 0.0, LEFT_SHIFT12));\n var h = Math.floor(CesiumMath.clamp(imageHeight, 0.0, LEFT_SHIFT12));\n var dimensions = w * LEFT_SHIFT12 + h;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, near, far, disableDepthTestDistance, dimensions);\n } else {\n i = billboard._index * 4;\n writer(i + 0, near, far, disableDepthTestDistance, dimensions);\n writer(i + 1, near, far, disableDepthTestDistance, dimensions);\n writer(i + 2, near, far, disableDepthTestDistance, dimensions);\n writer(i + 3, near, far, disableDepthTestDistance, dimensions);\n }\n}\n\nfunction writeTextureCoordinateBoundsOrLabelTranslate(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n if (billboard.heightReference === HeightReference.CLAMP_TO_GROUND) {\n var scene = billboardCollection._scene;\n var context = frameState.context;\n var globeTranslucent = frameState.globeTranslucencyState.translucent;\n var depthTestAgainstTerrain =\n defined(scene.globe) && scene.globe.depthTestAgainstTerrain;\n\n // Only do manual depth test if the globe is opaque and writes depth\n billboardCollection._shaderClampToGround =\n context.depthTexture && !globeTranslucent && depthTestAgainstTerrain;\n }\n var i;\n var writer =\n vafWriters[attributeLocations.textureCoordinateBoundsOrLabelTranslate];\n\n if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n //write _labelTranslate, used by depth testing in the vertex shader\n var translateX = 0;\n var translateY = 0;\n if (defined(billboard._labelTranslate)) {\n translateX = billboard._labelTranslate.x;\n translateY = billboard._labelTranslate.y;\n }\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, translateX, translateY, 0.0, 0.0);\n } else {\n i = billboard._index * 4;\n writer(i + 0, translateX, translateY, 0.0, 0.0);\n writer(i + 1, translateX, translateY, 0.0, 0.0);\n writer(i + 2, translateX, translateY, 0.0, 0.0);\n writer(i + 3, translateX, translateY, 0.0, 0.0);\n }\n return;\n }\n\n //write texture coordinate bounds, used by depth testing in fragment shader\n var minX = 0;\n var minY = 0;\n var width = 0;\n var height = 0;\n var index = billboard._imageIndex;\n if (index !== -1) {\n var imageRectangle = textureAtlasCoordinates[index];\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageRectangle)) {\n throw new DeveloperError(\"Invalid billboard image index: \" + index);\n }\n //>>includeEnd('debug');\n\n minX = imageRectangle.x;\n minY = imageRectangle.y;\n width = imageRectangle.width;\n height = imageRectangle.height;\n }\n var maxX = minX + width;\n var maxY = minY + height;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, minX, minY, maxX, maxY);\n } else {\n i = billboard._index * 4;\n writer(i + 0, minX, minY, maxX, maxY);\n writer(i + 1, minX, minY, maxX, maxY);\n writer(i + 2, minX, minY, maxX, maxY);\n writer(i + 3, minX, minY, maxX, maxY);\n }\n}\n\nfunction writeBatchId(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n if (!defined(billboardCollection._batchTable)) {\n return;\n }\n\n var writer = vafWriters[attributeLocations.a_batchId];\n var id = billboard._batchIndex;\n\n var i;\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, id);\n } else {\n i = billboard._index * 4;\n writer(i + 0, id);\n writer(i + 1, id);\n writer(i + 2, id);\n writer(i + 3, id);\n }\n}\n\nfunction writeSDF(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n if (!billboardCollection._sdf) {\n return;\n }\n\n var i;\n var writer = vafWriters[attributeLocations.sdf];\n\n var outlineColor = billboard.outlineColor;\n var outlineWidth = billboard.outlineWidth;\n\n var red = Color.floatToByte(outlineColor.red);\n var green = Color.floatToByte(outlineColor.green);\n var blue = Color.floatToByte(outlineColor.blue);\n var compressed0 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n // Compute the relative outline distance\n var outlineDistance = outlineWidth / SDFSettings.RADIUS;\n var compressed1 =\n Color.floatToByte(outlineColor.alpha) * LEFT_SHIFT16 +\n Color.floatToByte(outlineDistance) * LEFT_SHIFT8;\n\n if (billboardCollection._instanced) {\n i = billboard._index;\n writer(i, compressed0, compressed1);\n } else {\n i = billboard._index * 4;\n writer(i + 0, compressed0 + LOWER_LEFT, compressed1);\n writer(i + 1, compressed0 + LOWER_RIGHT, compressed1);\n writer(i + 2, compressed0 + UPPER_RIGHT, compressed1);\n writer(i + 3, compressed0 + UPPER_LEFT, compressed1);\n }\n}\n\nfunction writeBillboard(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n) {\n writePositionScaleAndRotation(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeCompressedAttrib0(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeCompressedAttrib1(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeCompressedAttrib2(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeEyeOffset(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeScaleByDistance(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writePixelOffsetScaleByDistance(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeCompressedAttribute3(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeTextureCoordinateBoundsOrLabelTranslate(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeBatchId(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n writeSDF(\n billboardCollection,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n}\n\nfunction recomputeActualPositions(\n billboardCollection,\n billboards,\n length,\n frameState,\n modelMatrix,\n recomputeBoundingVolume\n) {\n var boundingVolume;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingVolume = billboardCollection._baseVolume;\n billboardCollection._boundingVolumeDirty = true;\n } else {\n boundingVolume = billboardCollection._baseVolume2D;\n }\n\n var positions = [];\n for (var i = 0; i < length; ++i) {\n var billboard = billboards[i];\n var position = billboard.position;\n var actualPosition = Billboard._computeActualPosition(\n billboard,\n position,\n frameState,\n modelMatrix\n );\n if (defined(actualPosition)) {\n billboard._setActualPosition(actualPosition);\n\n if (recomputeBoundingVolume) {\n positions.push(actualPosition);\n } else {\n BoundingSphere.expand(boundingVolume, actualPosition, boundingVolume);\n }\n }\n }\n\n if (recomputeBoundingVolume) {\n BoundingSphere.fromPoints(positions, boundingVolume);\n }\n}\n\nfunction updateMode(billboardCollection, frameState) {\n var mode = frameState.mode;\n\n var billboards = billboardCollection._billboards;\n var billboardsToUpdate = billboardCollection._billboardsToUpdate;\n var modelMatrix = billboardCollection._modelMatrix;\n\n if (\n billboardCollection._createVertexArray ||\n billboardCollection._mode !== mode ||\n (mode !== SceneMode.SCENE3D &&\n !Matrix4.equals(modelMatrix, billboardCollection.modelMatrix))\n ) {\n billboardCollection._mode = mode;\n Matrix4.clone(billboardCollection.modelMatrix, modelMatrix);\n billboardCollection._createVertexArray = true;\n\n if (\n mode === SceneMode.SCENE3D ||\n mode === SceneMode.SCENE2D ||\n mode === SceneMode.COLUMBUS_VIEW\n ) {\n recomputeActualPositions(\n billboardCollection,\n billboards,\n billboards.length,\n frameState,\n modelMatrix,\n true\n );\n }\n } else if (mode === SceneMode.MORPHING) {\n recomputeActualPositions(\n billboardCollection,\n billboards,\n billboards.length,\n frameState,\n modelMatrix,\n true\n );\n } else if (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {\n recomputeActualPositions(\n billboardCollection,\n billboardsToUpdate,\n billboardCollection._billboardsToUpdateIndex,\n frameState,\n modelMatrix,\n false\n );\n }\n}\n\nfunction updateBoundingVolume(collection, frameState, boundingVolume) {\n var pixelScale = 1.0;\n if (!collection._allSizedInMeters || collection._maxPixelOffset !== 0.0) {\n pixelScale = frameState.camera.getPixelSize(\n boundingVolume,\n frameState.context.drawingBufferWidth,\n frameState.context.drawingBufferHeight\n );\n }\n\n var size = pixelScale * collection._maxScale * collection._maxSize * 2.0;\n if (collection._allHorizontalCenter && collection._allVerticalCenter) {\n size *= 0.5;\n }\n\n var offset =\n pixelScale * collection._maxPixelOffset + collection._maxEyeOffset;\n boundingVolume.radius += size + offset;\n}\n\nfunction createDebugCommand(billboardCollection, context) {\n var fs;\n fs =\n \"uniform sampler2D billboard_texture; \\n\" +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gl_FragColor = texture2D(billboard_texture, v_textureCoordinates); \\n\" +\n \"} \\n\";\n\n var drawCommand = context.createViewportQuadCommand(fs, {\n uniformMap: {\n billboard_texture: function () {\n return billboardCollection._textureAtlas.texture;\n },\n },\n });\n drawCommand.pass = Pass.OVERLAY;\n return drawCommand;\n}\n\nvar scratchWriterArray = [];\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} image with id must be in the atlas.\n */\nBillboardCollection.prototype.update = function (frameState) {\n removeBillboards(this);\n var billboards = this._billboards;\n var billboardsLength = billboards.length;\n\n var context = frameState.context;\n this._instanced = context.instancedArrays;\n attributeLocations = this._instanced\n ? attributeLocationsInstanced\n : attributeLocationsBatched;\n getIndexBuffer = this._instanced\n ? getIndexBufferInstanced\n : getIndexBufferBatched;\n\n var textureAtlas = this._textureAtlas;\n if (!defined(textureAtlas)) {\n textureAtlas = this._textureAtlas = new TextureAtlas({\n context: context,\n });\n\n for (var ii = 0; ii < billboardsLength; ++ii) {\n billboards[ii]._loadImage();\n }\n }\n\n var textureAtlasCoordinates = textureAtlas.textureCoordinates;\n if (textureAtlasCoordinates.length === 0) {\n // Can't write billboard vertices until we have texture coordinates\n // provided by a texture atlas\n return;\n }\n\n updateMode(this, frameState);\n\n billboards = this._billboards;\n billboardsLength = billboards.length;\n var billboardsToUpdate = this._billboardsToUpdate;\n var billboardsToUpdateLength = this._billboardsToUpdateIndex;\n\n var properties = this._propertiesChanged;\n\n var textureAtlasGUID = textureAtlas.guid;\n var createVertexArray =\n this._createVertexArray || this._textureAtlasGUID !== textureAtlasGUID;\n this._textureAtlasGUID = textureAtlasGUID;\n\n var vafWriters;\n var pass = frameState.passes;\n var picking = pass.pick;\n\n // PERFORMANCE_IDEA: Round robin multiple buffers.\n if (createVertexArray || (!picking && this.computeNewBuffersUsage())) {\n this._createVertexArray = false;\n\n for (var k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n properties[k] = 0;\n }\n\n this._vaf = this._vaf && this._vaf.destroy();\n\n if (billboardsLength > 0) {\n // PERFORMANCE_IDEA: Instead of creating a new one, resize like std::vector.\n this._vaf = createVAF(\n context,\n billboardsLength,\n this._buffersUsage,\n this._instanced,\n this._batchTable,\n this._sdf\n );\n vafWriters = this._vaf.writers;\n\n // Rewrite entire buffer if billboards were added or removed.\n for (var i = 0; i < billboardsLength; ++i) {\n var billboard = this._billboards[i];\n billboard._dirty = false; // In case it needed an update.\n writeBillboard(\n this,\n frameState,\n textureAtlasCoordinates,\n vafWriters,\n billboard\n );\n }\n\n // Different billboard collections share the same index buffer.\n this._vaf.commit(getIndexBuffer(context));\n }\n\n this._billboardsToUpdateIndex = 0;\n } else if (billboardsToUpdateLength > 0) {\n // Billboards were modified, but none were added or removed.\n var writers = scratchWriterArray;\n writers.length = 0;\n\n if (\n properties[POSITION_INDEX] ||\n properties[ROTATION_INDEX] ||\n properties[SCALE_INDEX]\n ) {\n writers.push(writePositionScaleAndRotation);\n }\n\n if (\n properties[IMAGE_INDEX_INDEX] ||\n properties[PIXEL_OFFSET_INDEX] ||\n properties[HORIZONTAL_ORIGIN_INDEX] ||\n properties[VERTICAL_ORIGIN_INDEX] ||\n properties[SHOW_INDEX]\n ) {\n writers.push(writeCompressedAttrib0);\n if (this._instanced) {\n writers.push(writeEyeOffset);\n }\n }\n\n if (\n properties[IMAGE_INDEX_INDEX] ||\n properties[ALIGNED_AXIS_INDEX] ||\n properties[TRANSLUCENCY_BY_DISTANCE_INDEX]\n ) {\n writers.push(writeCompressedAttrib1);\n writers.push(writeCompressedAttrib2);\n }\n\n if (properties[IMAGE_INDEX_INDEX] || properties[COLOR_INDEX]) {\n writers.push(writeCompressedAttrib2);\n }\n\n if (properties[EYE_OFFSET_INDEX]) {\n writers.push(writeEyeOffset);\n }\n\n if (properties[SCALE_BY_DISTANCE_INDEX]) {\n writers.push(writeScaleByDistance);\n }\n\n if (properties[PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX]) {\n writers.push(writePixelOffsetScaleByDistance);\n }\n\n if (\n properties[DISTANCE_DISPLAY_CONDITION_INDEX] ||\n properties[DISABLE_DEPTH_DISTANCE] ||\n properties[IMAGE_INDEX_INDEX] ||\n properties[POSITION_INDEX]\n ) {\n writers.push(writeCompressedAttribute3);\n }\n\n if (properties[IMAGE_INDEX_INDEX] || properties[POSITION_INDEX]) {\n writers.push(writeTextureCoordinateBoundsOrLabelTranslate);\n }\n\n if (properties[SDF_INDEX]) {\n writers.push(writeSDF);\n }\n\n var numWriters = writers.length;\n vafWriters = this._vaf.writers;\n\n if (billboardsToUpdateLength / billboardsLength > 0.1) {\n // If more than 10% of billboard change, rewrite the entire buffer.\n\n // PERFORMANCE_IDEA: I totally made up 10% :).\n\n for (var m = 0; m < billboardsToUpdateLength; ++m) {\n var b = billboardsToUpdate[m];\n b._dirty = false;\n\n for (var n = 0; n < numWriters; ++n) {\n writers[n](this, frameState, textureAtlasCoordinates, vafWriters, b);\n }\n }\n this._vaf.commit(getIndexBuffer(context));\n } else {\n for (var h = 0; h < billboardsToUpdateLength; ++h) {\n var bb = billboardsToUpdate[h];\n bb._dirty = false;\n\n for (var o = 0; o < numWriters; ++o) {\n writers[o](this, frameState, textureAtlasCoordinates, vafWriters, bb);\n }\n\n if (this._instanced) {\n this._vaf.subCommit(bb._index, 1);\n } else {\n this._vaf.subCommit(bb._index * 4, 4);\n }\n }\n this._vaf.endSubCommits();\n }\n\n this._billboardsToUpdateIndex = 0;\n }\n\n // If the number of total billboards ever shrinks considerably\n // Truncate billboardsToUpdate so that we free memory that we're\n // not going to be using.\n if (billboardsToUpdateLength > billboardsLength * 1.5) {\n billboardsToUpdate.length = billboardsLength;\n }\n\n if (!defined(this._vaf) || !defined(this._vaf.va)) {\n return;\n }\n\n if (this._boundingVolumeDirty) {\n this._boundingVolumeDirty = false;\n BoundingSphere.transform(\n this._baseVolume,\n this.modelMatrix,\n this._baseVolumeWC\n );\n }\n\n var boundingVolume;\n var modelMatrix = Matrix4.IDENTITY;\n if (frameState.mode === SceneMode.SCENE3D) {\n modelMatrix = this.modelMatrix;\n boundingVolume = BoundingSphere.clone(\n this._baseVolumeWC,\n this._boundingVolume\n );\n } else {\n boundingVolume = BoundingSphere.clone(\n this._baseVolume2D,\n this._boundingVolume\n );\n }\n updateBoundingVolume(this, frameState, boundingVolume);\n\n var blendOptionChanged = this._blendOption !== this.blendOption;\n this._blendOption = this.blendOption;\n\n if (blendOptionChanged) {\n if (\n this._blendOption === BlendOption.OPAQUE ||\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n ) {\n this._rsOpaque = RenderState.fromCache({\n depthTest: {\n enabled: true,\n func: WebGLConstants.LESS,\n },\n depthMask: true,\n });\n } else {\n this._rsOpaque = undefined;\n }\n\n // If OPAQUE_AND_TRANSLUCENT is in use, only the opaque pass gets the benefit of the depth buffer,\n // not the translucent pass. Otherwise, if the TRANSLUCENT pass is on its own, it turns on\n // a depthMask in lieu of full depth sorting (because it has opaque-ish fragments that look bad in OIT).\n // When the TRANSLUCENT depth mask is in use, label backgrounds require the depth func to be LEQUAL.\n var useTranslucentDepthMask = this._blendOption === BlendOption.TRANSLUCENT;\n\n if (\n this._blendOption === BlendOption.TRANSLUCENT ||\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n ) {\n this._rsTranslucent = RenderState.fromCache({\n depthTest: {\n enabled: true,\n func: useTranslucentDepthMask\n ? WebGLConstants.LEQUAL\n : WebGLConstants.LESS,\n },\n depthMask: useTranslucentDepthMask,\n blending: BlendingState.ALPHA_BLEND,\n });\n } else {\n this._rsTranslucent = undefined;\n }\n }\n\n this._shaderDisableDepthDistance =\n this._shaderDisableDepthDistance ||\n frameState.minimumDisableDepthTestDistance !== 0.0;\n\n var vsSource;\n var fsSource;\n var vs;\n var fs;\n var vertDefines;\n\n var supportVSTextureReads = ContextLimits.maximumVertexTextureImageUnits > 0;\n\n if (\n blendOptionChanged ||\n this._shaderRotation !== this._compiledShaderRotation ||\n this._shaderAlignedAxis !== this._compiledShaderAlignedAxis ||\n this._shaderScaleByDistance !== this._compiledShaderScaleByDistance ||\n this._shaderTranslucencyByDistance !==\n this._compiledShaderTranslucencyByDistance ||\n this._shaderPixelOffsetScaleByDistance !==\n this._compiledShaderPixelOffsetScaleByDistance ||\n this._shaderDistanceDisplayCondition !==\n this._compiledShaderDistanceDisplayCondition ||\n this._shaderDisableDepthDistance !==\n this._compiledShaderDisableDepthDistance ||\n this._shaderClampToGround !== this._compiledShaderClampToGround ||\n this._sdf !== this._compiledSDF\n ) {\n vsSource = BillboardCollectionVS;\n fsSource = BillboardCollectionFS;\n\n vertDefines = [];\n if (defined(this._batchTable)) {\n vertDefines.push(\"VECTOR_TILE\");\n vsSource = this._batchTable.getVertexShaderCallback(\n false,\n \"a_batchId\",\n undefined\n )(vsSource);\n fsSource = this._batchTable.getFragmentShaderCallback(\n false,\n undefined\n )(fsSource);\n }\n\n vs = new ShaderSource({\n defines: vertDefines,\n sources: [vsSource],\n });\n if (this._instanced) {\n vs.defines.push(\"INSTANCED\");\n }\n if (this._shaderRotation) {\n vs.defines.push(\"ROTATION\");\n }\n if (this._shaderAlignedAxis) {\n vs.defines.push(\"ALIGNED_AXIS\");\n }\n if (this._shaderScaleByDistance) {\n vs.defines.push(\"EYE_DISTANCE_SCALING\");\n }\n if (this._shaderTranslucencyByDistance) {\n vs.defines.push(\"EYE_DISTANCE_TRANSLUCENCY\");\n }\n if (this._shaderPixelOffsetScaleByDistance) {\n vs.defines.push(\"EYE_DISTANCE_PIXEL_OFFSET\");\n }\n if (this._shaderDistanceDisplayCondition) {\n vs.defines.push(\"DISTANCE_DISPLAY_CONDITION\");\n }\n if (this._shaderDisableDepthDistance) {\n vs.defines.push(\"DISABLE_DEPTH_DISTANCE\");\n }\n if (this._shaderClampToGround) {\n if (supportVSTextureReads) {\n vs.defines.push(\"VERTEX_DEPTH_CHECK\");\n } else {\n vs.defines.push(\"FRAGMENT_DEPTH_CHECK\");\n }\n }\n\n var sdfEdge = 1.0 - SDFSettings.CUTOFF;\n\n if (this._sdf) {\n vs.defines.push(\"SDF\");\n }\n\n var vectorFragDefine = defined(this._batchTable) ? \"VECTOR_TILE\" : \"\";\n\n if (this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT) {\n fs = new ShaderSource({\n defines: [\"OPAQUE\", vectorFragDefine],\n sources: [fsSource],\n });\n if (this._shaderClampToGround) {\n if (supportVSTextureReads) {\n fs.defines.push(\"VERTEX_DEPTH_CHECK\");\n } else {\n fs.defines.push(\"FRAGMENT_DEPTH_CHECK\");\n }\n }\n\n if (this._sdf) {\n fs.defines.push(\"SDF\");\n fs.defines.push(\"SDF_EDGE \" + sdfEdge);\n }\n\n this._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n fs = new ShaderSource({\n defines: [\"TRANSLUCENT\", vectorFragDefine],\n sources: [fsSource],\n });\n if (this._shaderClampToGround) {\n if (supportVSTextureReads) {\n fs.defines.push(\"VERTEX_DEPTH_CHECK\");\n } else {\n fs.defines.push(\"FRAGMENT_DEPTH_CHECK\");\n }\n }\n if (this._sdf) {\n fs.defines.push(\"SDF\");\n fs.defines.push(\"SDF_EDGE \" + sdfEdge);\n }\n this._spTranslucent = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._spTranslucent,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n if (this._blendOption === BlendOption.OPAQUE) {\n fs = new ShaderSource({\n defines: [vectorFragDefine],\n sources: [fsSource],\n });\n if (this._shaderClampToGround) {\n if (supportVSTextureReads) {\n fs.defines.push(\"VERTEX_DEPTH_CHECK\");\n } else {\n fs.defines.push(\"FRAGMENT_DEPTH_CHECK\");\n }\n }\n if (this._sdf) {\n fs.defines.push(\"SDF\");\n fs.defines.push(\"SDF_EDGE \" + sdfEdge);\n }\n this._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n if (this._blendOption === BlendOption.TRANSLUCENT) {\n fs = new ShaderSource({\n defines: [vectorFragDefine],\n sources: [fsSource],\n });\n if (this._shaderClampToGround) {\n if (supportVSTextureReads) {\n fs.defines.push(\"VERTEX_DEPTH_CHECK\");\n } else {\n fs.defines.push(\"FRAGMENT_DEPTH_CHECK\");\n }\n }\n if (this._sdf) {\n fs.defines.push(\"SDF\");\n fs.defines.push(\"SDF_EDGE \" + sdfEdge);\n }\n this._spTranslucent = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._spTranslucent,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n this._compiledShaderRotation = this._shaderRotation;\n this._compiledShaderAlignedAxis = this._shaderAlignedAxis;\n this._compiledShaderScaleByDistance = this._shaderScaleByDistance;\n this._compiledShaderTranslucencyByDistance = this._shaderTranslucencyByDistance;\n this._compiledShaderPixelOffsetScaleByDistance = this._shaderPixelOffsetScaleByDistance;\n this._compiledShaderDistanceDisplayCondition = this._shaderDistanceDisplayCondition;\n this._compiledShaderDisableDepthDistance = this._shaderDisableDepthDistance;\n this._compiledShaderClampToGround = this._shaderClampToGround;\n this._compiledSDF = this._sdf;\n }\n\n var commandList = frameState.commandList;\n\n if (pass.render || pass.pick) {\n var colorList = this._colorCommands;\n\n var opaque = this._blendOption === BlendOption.OPAQUE;\n var opaqueAndTranslucent =\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT;\n\n var va = this._vaf.va;\n var vaLength = va.length;\n\n var uniforms = this._uniforms;\n var pickId;\n if (defined(this._batchTable)) {\n uniforms = this._batchTable.getUniformMapCallback()(uniforms);\n pickId = this._batchTable.getPickId();\n } else {\n pickId = \"v_pickColor\";\n }\n\n colorList.length = vaLength;\n var totalLength = opaqueAndTranslucent ? vaLength * 2 : vaLength;\n for (var j = 0; j < totalLength; ++j) {\n var command = colorList[j];\n if (!defined(command)) {\n command = colorList[j] = new DrawCommand();\n }\n\n var opaqueCommand = opaque || (opaqueAndTranslucent && j % 2 === 0);\n\n command.pass =\n opaqueCommand || !opaqueAndTranslucent ? Pass.OPAQUE : Pass.TRANSLUCENT;\n command.owner = this;\n\n var index = opaqueAndTranslucent ? Math.floor(j / 2.0) : j;\n command.boundingVolume = boundingVolume;\n command.modelMatrix = modelMatrix;\n command.count = va[index].indicesCount;\n command.shaderProgram = opaqueCommand ? this._sp : this._spTranslucent;\n command.uniformMap = uniforms;\n command.vertexArray = va[index].va;\n command.renderState = opaqueCommand\n ? this._rsOpaque\n : this._rsTranslucent;\n command.debugShowBoundingVolume = this.debugShowBoundingVolume;\n command.pickId = pickId;\n\n if (this._instanced) {\n command.count = 6;\n command.instanceCount = billboardsLength;\n }\n\n commandList.push(command);\n }\n\n if (this.debugShowTextureAtlas) {\n if (!defined(this.debugCommand)) {\n this.debugCommand = createDebugCommand(this, frameState.context);\n }\n\n commandList.push(this.debugCommand);\n }\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see BillboardCollection#destroy\n */\nBillboardCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * billboards = billboards && billboards.destroy();\n *\n * @see BillboardCollection#isDestroyed\n */\nBillboardCollection.prototype.destroy = function () {\n if (defined(this._removeCallbackFunc)) {\n this._removeCallbackFunc();\n this._removeCallbackFunc = undefined;\n }\n\n this._textureAtlas =\n this._destroyTextureAtlas &&\n this._textureAtlas &&\n this._textureAtlas.destroy();\n this._sp = this._sp && this._sp.destroy();\n this._spTranslucent = this._spTranslucent && this._spTranslucent.destroy();\n this._vaf = this._vaf && this._vaf.destroy();\n destroyBillboards(this._billboards);\n\n return destroyObject(this);\n};\nexport default BillboardCollection;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef INSTANCED\\n\\\nattribute vec2 direction;\\n\\\n#endif\\n\\\nattribute vec4 positionHighAndScale;\\n\\\nattribute vec4 positionLowAndRotation;\\n\\\nattribute vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset)\\n\\\nattribute vec4 compressedAttribute1; // aligned axis, translucency by distance, image width\\n\\\nattribute vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free\\n\\\nattribute vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range)\\n\\\nattribute vec4 scaleByDistance; // near, nearScale, far, farScale\\n\\\nattribute vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale\\n\\\nattribute vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistance, dimensions\\n\\\nattribute vec2 sdf; // sdf outline color (rgb) and width (w)\\n\\\n#if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)\\n\\\nattribute vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates\\n\\\n#endif\\n\\\n#ifdef VECTOR_TILE\\n\\\nattribute float a_batchId;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\nvarying vec4 v_textureCoordinateBounds;\\n\\\nvarying vec4 v_originTextureCoordinateAndTranslate;\\n\\\nvarying vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\\n\\\nvarying mat2 v_rotationMatrix;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec4 v_pickColor;\\n\\\nvarying vec4 v_color;\\n\\\n#ifdef SDF\\n\\\nvarying vec4 v_outlineColor;\\n\\\nvarying float v_outlineWidth;\\n\\\n#endif\\n\\\n\\n\\\nconst float UPPER_BOUND = 32768.0;\\n\\\n\\n\\\nconst float SHIFT_LEFT16 = 65536.0;\\n\\\nconst float SHIFT_LEFT12 = 4096.0;\\n\\\nconst float SHIFT_LEFT8 = 256.0;\\n\\\nconst float SHIFT_LEFT7 = 128.0;\\n\\\nconst float SHIFT_LEFT5 = 32.0;\\n\\\nconst float SHIFT_LEFT3 = 8.0;\\n\\\nconst float SHIFT_LEFT2 = 4.0;\\n\\\nconst float SHIFT_LEFT1 = 2.0;\\n\\\n\\n\\\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\\n\\\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\\n\\\nconst float SHIFT_RIGHT7 = 1.0 / 128.0;\\n\\\nconst float SHIFT_RIGHT5 = 1.0 / 32.0;\\n\\\nconst float SHIFT_RIGHT3 = 1.0 / 8.0;\\n\\\nconst float SHIFT_RIGHT2 = 1.0 / 4.0;\\n\\\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\\n\\\n\\n\\\nvec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp)\\n\\\n{\\n\\\n // Note the halfSize cannot be computed in JavaScript because it is sent via\\n\\\n // compressed vertex attributes that coerce it to an integer.\\n\\\n vec2 halfSize = imageSize * scale * 0.5;\\n\\\n halfSize *= ((direction * 2.0) - 1.0);\\n\\\n\\n\\\n vec2 originTranslate = origin * abs(halfSize);\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n if (validAlignedAxis || rotation != 0.0)\\n\\\n {\\n\\\n float angle = rotation;\\n\\\n if (validAlignedAxis)\\n\\\n {\\n\\\n vec4 projectedAlignedAxis = czm_modelViewProjection * vec4(alignedAxis, 0.0);\\n\\\n angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) /\\n\\\n (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y));\\n\\\n }\\n\\\n\\n\\\n float cosTheta = cos(angle);\\n\\\n float sinTheta = sin(angle);\\n\\\n rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);\\n\\\n halfSize = rotationMatrix * halfSize;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n mpp = czm_metersPerPixel(positionEC);\\n\\\n positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp);\\n\\\n positionEC.xy += (translate + pixelOffset) * mpp;\\n\\\n\\n\\\n return positionEC;\\n\\\n}\\n\\\n\\n\\\n#ifdef VERTEX_DEPTH_CHECK\\n\\\nfloat getGlobeDepth(vec4 positionEC)\\n\\\n{\\n\\\n vec4 posWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n\\n\\\n float globeDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, posWC.xy / czm_viewport.zw));\\n\\\n\\n\\\n if (globeDepth == 0.0)\\n\\\n {\\n\\\n return 0.0; // not on the globe\\n\\\n }\\n\\\n\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth);\\n\\\n return eyeCoordinate.z / eyeCoordinate.w;\\n\\\n}\\n\\\n#endif\\n\\\nvoid main()\\n\\\n{\\n\\\n // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition\\n\\\n\\n\\\n // unpack attributes\\n\\\n vec3 positionHigh = positionHighAndScale.xyz;\\n\\\n vec3 positionLow = positionLowAndRotation.xyz;\\n\\\n float scale = positionHighAndScale.w;\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n float rotation = positionLowAndRotation.w;\\n\\\n#else\\n\\\n float rotation = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n float compressed = compressedAttribute0.x;\\n\\\n\\n\\\n vec2 pixelOffset;\\n\\\n pixelOffset.x = floor(compressed * SHIFT_RIGHT7);\\n\\\n compressed -= pixelOffset.x * SHIFT_LEFT7;\\n\\\n pixelOffset.x -= UPPER_BOUND;\\n\\\n\\n\\\n vec2 origin;\\n\\\n origin.x = floor(compressed * SHIFT_RIGHT5);\\n\\\n compressed -= origin.x * SHIFT_LEFT5;\\n\\\n\\n\\\n origin.y = floor(compressed * SHIFT_RIGHT3);\\n\\\n compressed -= origin.y * SHIFT_LEFT3;\\n\\\n\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\n vec2 depthOrigin = origin.xy;\\n\\\n#endif\\n\\\n origin -= vec2(1.0);\\n\\\n\\n\\\n float show = floor(compressed * SHIFT_RIGHT2);\\n\\\n compressed -= show * SHIFT_LEFT2;\\n\\\n\\n\\\n#ifdef INSTANCED\\n\\\n vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w);\\n\\\n vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w);\\n\\\n vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange;\\n\\\n#else\\n\\\n vec2 direction;\\n\\\n direction.x = floor(compressed * SHIFT_RIGHT1);\\n\\\n direction.y = compressed - direction.x * SHIFT_LEFT1;\\n\\\n\\n\\\n vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w);\\n\\\n#endif\\n\\\n\\n\\\n float temp = compressedAttribute0.y * SHIFT_RIGHT8;\\n\\\n pixelOffset.y = -(floor(temp) - UPPER_BOUND);\\n\\\n\\n\\\n vec2 translate;\\n\\\n translate.y = (temp - floor(temp)) * SHIFT_LEFT16;\\n\\\n\\n\\\n temp = compressedAttribute0.z * SHIFT_RIGHT8;\\n\\\n translate.x = floor(temp) - UPPER_BOUND;\\n\\\n\\n\\\n translate.y += (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n translate.y -= UPPER_BOUND;\\n\\\n\\n\\\n temp = compressedAttribute1.x * SHIFT_RIGHT8;\\n\\\n float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2);\\n\\\n\\n\\\n vec2 imageSize = vec2(floor(temp), temp2);\\n\\\n\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\n float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));\\n\\\n float applyTranslate = 0.0;\\n\\\n if (labelHorizontalOrigin != 0.0) // is a billboard, so set apply translate to false\\n\\\n {\\n\\\n applyTranslate = 1.0;\\n\\\n labelHorizontalOrigin -= 2.0;\\n\\\n depthOrigin.x = labelHorizontalOrigin + 1.0;\\n\\\n }\\n\\\n\\n\\\n depthOrigin = vec2(1.0) - (depthOrigin * 0.5);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n vec4 translucencyByDistance;\\n\\\n translucencyByDistance.x = compressedAttribute1.z;\\n\\\n translucencyByDistance.z = compressedAttribute1.w;\\n\\\n\\n\\\n translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n\\n\\\n temp = compressedAttribute1.y * SHIFT_RIGHT8;\\n\\\n translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)\\n\\\n temp = compressedAttribute3.w;\\n\\\n temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n vec2 dimensions;\\n\\\n dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n dimensions.x = floor(temp);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ALIGNED_AXIS\\n\\\n vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8));\\n\\\n temp = compressedAttribute2.z * SHIFT_RIGHT5;\\n\\\n bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0;\\n\\\n#else\\n\\\n vec3 alignedAxis = vec3(0.0);\\n\\\n bool validAlignedAxis = false;\\n\\\n#endif\\n\\\n\\n\\\n vec4 pickColor;\\n\\\n vec4 color;\\n\\\n\\n\\\n temp = compressedAttribute2.y;\\n\\\n temp = temp * SHIFT_RIGHT8;\\n\\\n pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n pickColor.r = floor(temp);\\n\\\n\\n\\\n temp = compressedAttribute2.x;\\n\\\n temp = temp * SHIFT_RIGHT8;\\n\\\n color.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n color.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n color.r = floor(temp);\\n\\\n\\n\\\n temp = compressedAttribute2.z * SHIFT_RIGHT8;\\n\\\n bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n\\n\\\n pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n pickColor /= 255.0;\\n\\\n\\n\\\n color.a = floor(temp);\\n\\\n color /= 255.0;\\n\\\n\\n\\\n ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n vec4 positionEC = czm_modelViewRelativeToEye * p;\\n\\\n\\n\\\n#if defined(FRAGMENT_DEPTH_CHECK) || defined(VERTEX_DEPTH_CHECK)\\n\\\n float eyeDepth = positionEC.z;\\n\\\n#endif\\n\\\n\\n\\\n positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz);\\n\\\n positionEC.xyz *= show;\\n\\\n\\n\\\n ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\\n\\\n float lengthSq;\\n\\\n if (czm_sceneMode == czm_sceneMode2D)\\n\\\n {\\n\\\n // 2D camera distance is a special case\\n\\\n // treat all billboards as flattened to the z=0.0 plane\\n\\\n lengthSq = czm_eyeHeight2D.y;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n lengthSq = dot(positionEC.xyz, positionEC.xyz);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_SCALING\\n\\\n float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq);\\n\\\n scale *= distanceScale;\\n\\\n translate *= distanceScale;\\n\\\n // push vertex behind near plane for clipping\\n\\\n if (scale == 0.0)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n float translucency = 1.0;\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\\n\\\n // push vertex behind near plane for clipping\\n\\\n if (translucency == 0.0)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_PIXEL_OFFSET\\n\\\n float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq);\\n\\\n pixelOffset *= pixelOffsetScale;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n float nearSq = compressedAttribute3.x;\\n\\\n float farSq = compressedAttribute3.y;\\n\\\n if (lengthSq < nearSq || lengthSq > farSq)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n mat2 rotationMatrix;\\n\\\n float mpp;\\n\\\n\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n float disableDepthTestDistance = compressedAttribute3.z;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef VERTEX_DEPTH_CHECK\\n\\\nif (lengthSq < disableDepthTestDistance) {\\n\\\n float depthsilon = 10.0;\\n\\\n\\n\\\n vec2 labelTranslate = textureCoordinateBoundsOrLabelTranslate.xy;\\n\\\n vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n float globeDepth1 = getGlobeDepth(pEC1);\\n\\\n\\n\\\n if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1)\\n\\\n {\\n\\\n vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n float globeDepth2 = getGlobeDepth(pEC2);\\n\\\n\\n\\\n if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2)\\n\\\n {\\n\\\n vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n float globeDepth3 = getGlobeDepth(pEC3);\\n\\\n if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n gl_Position = czm_projection * positionEC;\\n\\\n v_textureCoordinates = textureCoordinates;\\n\\\n\\n\\\n#ifdef LOG_DEPTH\\n\\\n czm_vertexLogDepth();\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\\n\\\n {\\n\\\n disableDepthTestDistance = czm_minimumDisableDepthTestDistance;\\n\\\n }\\n\\\n\\n\\\n if (disableDepthTestDistance != 0.0)\\n\\\n {\\n\\\n // Don't try to \\\"multiply both sides\\\" by w. Greater/less-than comparisons won't work for negative values of w.\\n\\\n float zclip = gl_Position.z / gl_Position.w;\\n\\\n bool clipped = (zclip < -1.0 || zclip > 1.0);\\n\\\n if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))\\n\\\n {\\n\\\n // Position z on the near plane.\\n\\\n gl_Position.z = -gl_Position.w;\\n\\\n#ifdef LOG_DEPTH\\n\\\n v_depthFromNearPlusOne = 1.0;\\n\\\n#endif\\n\\\n }\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\n if (sizeInMeters) {\\n\\\n translate /= mpp;\\n\\\n dimensions /= mpp;\\n\\\n imageSize /= mpp;\\n\\\n }\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n v_rotationMatrix = rotationMatrix;\\n\\\n#else\\n\\\n v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\\n\\\n#endif\\n\\\n\\n\\\n float enableDepthCheck = 0.0;\\n\\\n if (lengthSq < disableDepthTestDistance)\\n\\\n {\\n\\\n enableDepthCheck = 1.0;\\n\\\n }\\n\\\n\\n\\\n float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12));\\n\\\n float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12));\\n\\\n\\n\\\n float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12));\\n\\\n float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12));\\n\\\n\\n\\\n v_compressed.x = eyeDepth;\\n\\\n v_compressed.y = applyTranslate * SHIFT_LEFT1 + enableDepthCheck;\\n\\\n v_compressed.z = dw * SHIFT_LEFT12 + dh;\\n\\\n v_compressed.w = iw * SHIFT_LEFT12 + ih;\\n\\\n v_originTextureCoordinateAndTranslate.xy = depthOrigin;\\n\\\n v_originTextureCoordinateAndTranslate.zw = translate;\\n\\\n v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate;\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SDF\\n\\\n vec4 outlineColor;\\n\\\n float outlineWidth;\\n\\\n\\n\\\n temp = sdf.x;\\n\\\n temp = temp * SHIFT_RIGHT8;\\n\\\n outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n outlineColor.r = floor(temp);\\n\\\n\\n\\\n temp = sdf.y;\\n\\\n temp = temp * SHIFT_RIGHT8;\\n\\\n float temp3 = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n outlineColor.a = floor(temp);\\n\\\n outlineColor /= 255.0;\\n\\\n\\n\\\n v_outlineWidth = outlineWidth / 255.0;\\n\\\n v_outlineColor = outlineColor;\\n\\\n#endif\\n\\\n\\n\\\n v_pickColor = pickColor;\\n\\\n\\n\\\n v_color = color;\\n\\\n v_color.a *= translucency;\\n\\\n\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef GL_OES_standard_derivatives\\n\\\n#extension GL_OES_standard_derivatives : enable\\n\\\n#endif\\n\\\n\\n\\\nuniform sampler2D u_atlas;\\n\\\n\\n\\\n#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\nvarying vec4 v_pickColor;\\n\\\nvarying vec4 v_color;\\n\\\n\\n\\\n#ifdef SDF\\n\\\nvarying vec4 v_outlineColor;\\n\\\nvarying float v_outlineWidth;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\nvarying vec4 v_textureCoordinateBounds; // the min and max x and y values for the texture coordinates\\n\\\nvarying vec4 v_originTextureCoordinateAndTranslate; // texture coordinate at the origin, billboard translate (used for label glyphs)\\n\\\nvarying vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\\n\\\nvarying mat2 v_rotationMatrix;\\n\\\n\\n\\\nconst float SHIFT_LEFT12 = 4096.0;\\n\\\nconst float SHIFT_LEFT1 = 2.0;\\n\\\n\\n\\\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\\n\\\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\\n\\\n\\n\\\nfloat getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize)\\n\\\n{\\n\\\n vec2 lookupVector = imageSize * (depthLookupST - adjustedST);\\n\\\n lookupVector = v_rotationMatrix * lookupVector;\\n\\\n vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle. Will be zero for billboards because dimensions and imageSize will be equal\\n\\\n\\n\\\n vec2 translation = v_originTextureCoordinateAndTranslate.zw;\\n\\\n\\n\\\n if (applyTranslate)\\n\\\n {\\n\\\n // this is only needed for labels where the horizontal origin is not LEFT\\n\\\n // it moves the label back to where the \\\"origin\\\" should be since all label glyphs are set to HorizontalOrigin.LEFT\\n\\\n translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0));\\n\\\n }\\n\\\n\\n\\\n vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw;\\n\\\n float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, st));\\n\\\n\\n\\\n if (logDepthOrDepth == 0.0)\\n\\\n {\\n\\\n return 0.0; // not on the globe\\n\\\n }\\n\\\n\\n\\\n vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n return eyeCoordinate.z / eyeCoordinate.w;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n\\n\\\n#ifdef SDF\\n\\\n\\n\\\n// Get the distance from the edge of a glyph at a given position sampling an SDF texture.\\n\\\nfloat getDistance(vec2 position)\\n\\\n{\\n\\\n return texture2D(u_atlas, position).r;\\n\\\n}\\n\\\n\\n\\\n// Samples the sdf texture at the given position and produces a color based on the fill color and the outline.\\n\\\nvec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing)\\n\\\n{\\n\\\n float distance = getDistance(position);\\n\\\n\\n\\\n if (outlineWidth > 0.0)\\n\\\n {\\n\\\n // Don't get the outline edge exceed the SDF_EDGE\\n\\\n float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE);\\n\\\n float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\\n\\\n vec4 sdfColor = mix(outlineColor, v_color, outlineFactor);\\n\\\n float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance);\\n\\\n return vec4(sdfColor.rgb, sdfColor.a * alpha);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\\n\\\n return vec4(v_color.rgb, v_color.a * alpha);\\n\\\n }\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 color = texture2D(u_atlas, v_textureCoordinates);\\n\\\n\\n\\\n#ifdef SDF\\n\\\n float outlineWidth = v_outlineWidth;\\n\\\n vec4 outlineColor = v_outlineColor;\\n\\\n\\n\\\n // Get the current distance\\n\\\n float distance = getDistance(v_textureCoordinates);\\n\\\n\\n\\\n#ifdef GL_OES_standard_derivatives\\n\\\n float smoothing = fwidth(distance);\\n\\\n // Get an offset that is approximately half the distance to the neighbor pixels\\n\\\n // 0.354 is approximately half of 1/sqrt(2)\\n\\\n vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates));\\n\\\n\\n\\\n // Sample the center point\\n\\\n vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\\n\\\n\\n\\\n // Sample the 4 neighbors\\n\\\n vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n\\n\\\n // Equally weight the center sample and the 4 neighboring samples\\n\\\n color = (center + color1 + color2 + color3 + color4)/5.0;\\n\\\n#else\\n\\\n // Just do a single sample\\n\\\n float smoothing = 1.0/32.0;\\n\\\n color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\\n\\\n#endif\\n\\\n\\n\\\n color = czm_gammaCorrect(color);\\n\\\n#else\\n\\\n color = czm_gammaCorrect(color);\\n\\\n color *= czm_gammaCorrect(v_color);\\n\\\n#endif\\n\\\n\\n\\\n// Fully transparent parts of the billboard are not pickable.\\n\\\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\\n\\\n if (color.a < 0.005) // matches 0/255 and 1/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#else\\n\\\n// The billboard is rendered twice. The opaque pass discards translucent fragments\\n\\\n// and the translucent pass discards opaque fragments.\\n\\\n#ifdef OPAQUE\\n\\\n if (color.a < 0.995) // matches < 254/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#else\\n\\\n if (color.a >= 0.995) // matches 254/255 and 255/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n#ifdef VECTOR_TILE\\n\\\n color *= u_highlightColor;\\n\\\n#endif\\n\\\n gl_FragColor = color;\\n\\\n\\n\\\n#ifdef LOG_DEPTH\\n\\\n czm_writeLogDepth();\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FRAGMENT_DEPTH_CHECK\\n\\\n float temp = v_compressed.y;\\n\\\n\\n\\\n temp = temp * SHIFT_RIGHT1;\\n\\\n\\n\\\n float temp2 = (temp - floor(temp)) * SHIFT_LEFT1;\\n\\\n bool enableDepthTest = temp2 != 0.0;\\n\\\n bool applyTranslate = floor(temp) != 0.0;\\n\\\n\\n\\\n if (enableDepthTest) {\\n\\\n temp = v_compressed.z;\\n\\\n temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n vec2 dimensions;\\n\\\n dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n dimensions.x = floor(temp);\\n\\\n\\n\\\n temp = v_compressed.w;\\n\\\n temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n vec2 imageSize;\\n\\\n imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n imageSize.x = floor(temp);\\n\\\n\\n\\\n vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy;\\n\\\n adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y);\\n\\\n\\n\\\n float epsilonEyeDepth = v_compressed.x + czm_epsilon1;\\n\\\n float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize);\\n\\\n\\n\\\n // negative values go into the screen\\n\\\n if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth)\\n\\\n {\\n\\\n float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner\\n\\\n if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth)\\n\\\n {\\n\\\n float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner\\n\\\n if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth)\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n}\\n\\\n\";\n","/**\n * Creates a {@link createBillboardPointCallback.CanvasFunction} that will create a canvas with a point.\n *\n * @param {Number} centerAlpha The alpha of the center of the point. The value must be in the range [0.0, 1.0].\n * @param {String} cssColor The CSS color string.\n * @param {String} cssOutlineColor The CSS color of the point outline.\n * @param {Number} cssOutlineWidth The width of the outline in pixels.\n * @param {Number} pixelSize The size of the point in pixels.\n * @return {createBillboardPointCallback.CanvasFunction} The function that will return a canvas with the point drawn on it.\n *\n * @private\n */\nfunction createBillboardPointCallback(\n centerAlpha,\n cssColor,\n cssOutlineColor,\n cssOutlineWidth,\n pixelSize\n) {\n return function () {\n var canvas = document.createElement(\"canvas\");\n\n var length = pixelSize + 2 * cssOutlineWidth;\n canvas.height = canvas.width = length;\n\n var context2D = canvas.getContext(\"2d\");\n context2D.clearRect(0, 0, length, length);\n\n if (cssOutlineWidth !== 0) {\n context2D.beginPath();\n context2D.arc(length / 2, length / 2, length / 2, 0, 2 * Math.PI, true);\n context2D.closePath();\n context2D.fillStyle = cssOutlineColor;\n context2D.fill();\n // Punch a hole in the center if needed.\n if (centerAlpha < 1.0) {\n context2D.save();\n context2D.globalCompositeOperation = \"destination-out\";\n context2D.beginPath();\n context2D.arc(\n length / 2,\n length / 2,\n pixelSize / 2,\n 0,\n 2 * Math.PI,\n true\n );\n context2D.closePath();\n context2D.fillStyle = \"black\";\n context2D.fill();\n context2D.restore();\n }\n }\n\n context2D.beginPath();\n context2D.arc(length / 2, length / 2, pixelSize / 2, 0, 2 * Math.PI, true);\n context2D.closePath();\n context2D.fillStyle = cssColor;\n context2D.fill();\n\n return canvas;\n };\n}\n\n/**\n * A function that returns a canvas containing an image of a point.\n * @callback createBillboardPointCallback.CanvasFunction\n * @returns {HTMLCanvasElement} The result of the calculation.\n */\nexport default createBillboardPointCallback;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport createBillboardPointCallback from \"./createBillboardPointCallback.js\";\n\n/**\n * A point feature of a {@link Cesium3DTileset}.\n * <p>\n * Provides access to a feature's properties stored in the tile's batch table, as well\n * as the ability to show/hide a feature and change its point properties\n * </p>\n * <p>\n * Modifications to a <code>Cesium3DTilePointFeature</code> object have the lifetime of the tile's\n * content. If the tile's content is unloaded, e.g., due to it going out of view and needing\n * to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any\n * modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications.\n * </p>\n * <p>\n * Do not construct this directly. Access it through {@link Cesium3DTileContent#getFeature}\n * or picking using {@link Scene#pick} and {@link Scene#pickPosition}.\n * </p>\n *\n * @alias Cesium3DTilePointFeature\n * @constructor\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * // On mouse over, display all the properties for a feature in the console log.\n * handler.setInputAction(function(movement) {\n * var feature = scene.pick(movement.endPosition);\n * if (feature instanceof Cesium.Cesium3DTilePointFeature) {\n * var propertyNames = feature.getPropertyNames();\n * var length = propertyNames.length;\n * for (var i = 0; i < length; ++i) {\n * var propertyName = propertyNames[i];\n * console.log(propertyName + ': ' + feature.getProperty(propertyName));\n * }\n * }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nfunction Cesium3DTilePointFeature(\n content,\n batchId,\n billboard,\n label,\n polyline\n) {\n this._content = content;\n this._billboard = billboard;\n this._label = label;\n this._polyline = polyline;\n\n this._batchId = batchId;\n this._billboardImage = undefined;\n this._billboardColor = undefined;\n this._billboardOutlineColor = undefined;\n this._billboardOutlineWidth = undefined;\n this._billboardSize = undefined;\n this._pointSize = undefined;\n this._color = undefined;\n this._pointSize = undefined;\n this._pointOutlineColor = undefined;\n this._pointOutlineWidth = undefined;\n this._heightOffset = undefined;\n\n this._pickIds = new Array(3);\n\n setBillboardImage(this);\n}\n\nvar scratchCartographic = new Cartographic();\n\nObject.defineProperties(Cesium3DTilePointFeature.prototype, {\n /**\n * Gets or sets if the feature will be shown. This is set for all features\n * when a style's show is evaluated.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Boolean}\n *\n * @default true\n */\n show: {\n get: function () {\n return this._label.show;\n },\n set: function (value) {\n this._label.show = value;\n this._billboard.show = value;\n this._polyline.show = value;\n },\n },\n\n /**\n * Gets or sets the color of the point of this feature.\n * <p>\n * Only applied when <code>image</code> is <code>undefined</code>.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n color: {\n get: function () {\n return this._color;\n },\n set: function (value) {\n this._color = Color.clone(value, this._color);\n setBillboardImage(this);\n },\n },\n\n /**\n * Gets or sets the point size of this feature.\n * <p>\n * Only applied when <code>image</code> is <code>undefined</code>.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Number}\n */\n pointSize: {\n get: function () {\n return this._pointSize;\n },\n set: function (value) {\n this._pointSize = value;\n setBillboardImage(this);\n },\n },\n\n /**\n * Gets or sets the point outline color of this feature.\n * <p>\n * Only applied when <code>image</code> is <code>undefined</code>.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n pointOutlineColor: {\n get: function () {\n return this._pointOutlineColor;\n },\n set: function (value) {\n this._pointOutlineColor = Color.clone(value, this._pointOutlineColor);\n setBillboardImage(this);\n },\n },\n\n /**\n * Gets or sets the point outline width in pixels of this feature.\n * <p>\n * Only applied when <code>image</code> is <code>undefined</code>.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Number}\n */\n pointOutlineWidth: {\n get: function () {\n return this._pointOutlineWidth;\n },\n set: function (value) {\n this._pointOutlineWidth = value;\n setBillboardImage(this);\n },\n },\n\n /**\n * Gets or sets the label color of this feature.\n * <p>\n * The color will be applied to the label if <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n labelColor: {\n get: function () {\n return this._label.fillColor;\n },\n set: function (value) {\n this._label.fillColor = value;\n this._polyline.show = this._label.show && value.alpha > 0.0;\n },\n },\n\n /**\n * Gets or sets the label outline color of this feature.\n * <p>\n * The outline color will be applied to the label if <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n labelOutlineColor: {\n get: function () {\n return this._label.outlineColor;\n },\n set: function (value) {\n this._label.outlineColor = value;\n },\n },\n\n /**\n * Gets or sets the outline width in pixels of this feature.\n * <p>\n * The outline width will be applied to the point if <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Number}\n */\n labelOutlineWidth: {\n get: function () {\n return this._label.outlineWidth;\n },\n set: function (value) {\n this._label.outlineWidth = value;\n },\n },\n\n /**\n * Gets or sets the font of this feature.\n * <p>\n * Only applied when the <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {String}\n */\n font: {\n get: function () {\n return this._label.font;\n },\n set: function (value) {\n this._label.font = value;\n },\n },\n\n /**\n * Gets or sets the fill and outline style of this feature.\n * <p>\n * Only applied when <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {LabelStyle}\n */\n labelStyle: {\n get: function () {\n return this._label.style;\n },\n set: function (value) {\n this._label.style = value;\n },\n },\n\n /**\n * Gets or sets the text for this feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {String}\n */\n labelText: {\n get: function () {\n return this._label.text;\n },\n set: function (value) {\n if (!defined(value)) {\n value = \"\";\n }\n this._label.text = value;\n },\n },\n\n /**\n * Gets or sets the background color of the text for this feature.\n * <p>\n * Only applied when <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n backgroundColor: {\n get: function () {\n return this._label.backgroundColor;\n },\n set: function (value) {\n this._label.backgroundColor = value;\n },\n },\n\n /**\n * Gets or sets the background padding of the text for this feature.\n * <p>\n * Only applied when <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Cartesian2}\n */\n backgroundPadding: {\n get: function () {\n return this._label.backgroundPadding;\n },\n set: function (value) {\n this._label.backgroundPadding = value;\n },\n },\n\n /**\n * Gets or sets whether to display the background of the text for this feature.\n * <p>\n * Only applied when <code>labelText</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Boolean}\n */\n backgroundEnabled: {\n get: function () {\n return this._label.showBackground;\n },\n set: function (value) {\n this._label.showBackground = value;\n },\n },\n\n /**\n * Gets or sets the near and far scaling properties for this feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {NearFarScalar}\n */\n scaleByDistance: {\n get: function () {\n return this._label.scaleByDistance;\n },\n set: function (value) {\n this._label.scaleByDistance = value;\n this._billboard.scaleByDistance = value;\n },\n },\n\n /**\n * Gets or sets the near and far translucency properties for this feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {NearFarScalar}\n */\n translucencyByDistance: {\n get: function () {\n return this._label.translucencyByDistance;\n },\n set: function (value) {\n this._label.translucencyByDistance = value;\n this._billboard.translucencyByDistance = value;\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this feature will be displayed.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {DistanceDisplayCondition}\n */\n distanceDisplayCondition: {\n get: function () {\n return this._label.distanceDisplayCondition;\n },\n set: function (value) {\n this._label.distanceDisplayCondition = value;\n this._polyline.distanceDisplayCondition = value;\n this._billboard.distanceDisplayCondition = value;\n },\n },\n\n /**\n * Gets or sets the height offset in meters of this feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Number}\n */\n heightOffset: {\n get: function () {\n return this._heightOffset;\n },\n set: function (value) {\n var offset = defaultValue(this._heightOffset, 0.0);\n\n var ellipsoid = this._content.tileset.ellipsoid;\n var cart = ellipsoid.cartesianToCartographic(\n this._billboard.position,\n scratchCartographic\n );\n cart.height = cart.height - offset + value;\n var newPosition = ellipsoid.cartographicToCartesian(cart);\n\n this._billboard.position = newPosition;\n this._label.position = this._billboard.position;\n this._polyline.positions = [this._polyline.positions[0], newPosition];\n\n this._heightOffset = value;\n },\n },\n\n /**\n * Gets or sets whether the anchor line is displayed.\n * <p>\n * Only applied when <code>heightOffset</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Boolean}\n */\n anchorLineEnabled: {\n get: function () {\n return this._polyline.show;\n },\n set: function (value) {\n this._polyline.show = value;\n },\n },\n\n /**\n * Gets or sets the color for the anchor line.\n * <p>\n * Only applied when <code>heightOffset</code> is defined.\n * </p>\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Color}\n */\n anchorLineColor: {\n get: function () {\n return this._polyline.material.uniforms.color;\n },\n set: function (value) {\n this._polyline.material.uniforms.color = Color.clone(\n value,\n this._polyline.material.uniforms.color\n );\n },\n },\n\n /**\n * Gets or sets the image of this feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {String}\n */\n image: {\n get: function () {\n return this._billboardImage;\n },\n set: function (value) {\n var imageChanged = this._billboardImage !== value;\n this._billboardImage = value;\n if (imageChanged) {\n setBillboardImage(this);\n }\n },\n },\n\n /**\n * Gets or sets the distance where depth testing will be disabled.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Number}\n */\n disableDepthTestDistance: {\n get: function () {\n return this._label.disableDepthTestDistance;\n },\n set: function (value) {\n this._label.disableDepthTestDistance = value;\n this._billboard.disableDepthTestDistance = value;\n },\n },\n\n /**\n * Gets or sets the horizontal origin of this point, which determines if the point is\n * to the left, center, or right of its anchor position.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {HorizontalOrigin}\n */\n horizontalOrigin: {\n get: function () {\n return this._billboard.horizontalOrigin;\n },\n set: function (value) {\n this._billboard.horizontalOrigin = value;\n },\n },\n\n /**\n * Gets or sets the vertical origin of this point, which determines if the point is\n * to the bottom, center, or top of its anchor position.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {VerticalOrigin}\n */\n verticalOrigin: {\n get: function () {\n return this._billboard.verticalOrigin;\n },\n set: function (value) {\n this._billboard.verticalOrigin = value;\n },\n },\n\n /**\n * Gets or sets the horizontal origin of this point's text, which determines if the point's text is\n * to the left, center, or right of its anchor position.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {HorizontalOrigin}\n */\n labelHorizontalOrigin: {\n get: function () {\n return this._label.horizontalOrigin;\n },\n set: function (value) {\n this._label.horizontalOrigin = value;\n },\n },\n\n /**\n * Get or sets the vertical origin of this point's text, which determines if the point's text is\n * to the bottom, center, top, or baseline of it's anchor point.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {VerticalOrigin}\n */\n labelVerticalOrigin: {\n get: function () {\n return this._label.verticalOrigin;\n },\n set: function (value) {\n this._label.verticalOrigin = value;\n },\n },\n\n /**\n * Gets the content of the tile containing the feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Cesium3DTileContent}\n *\n * @readonly\n * @private\n */\n content: {\n get: function () {\n return this._content;\n },\n },\n\n /**\n * Gets the tileset containing the feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Cesium3DTileset}\n *\n * @readonly\n */\n tileset: {\n get: function () {\n return this._content.tileset;\n },\n },\n\n /**\n * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n * the tileset containing the feature.\n *\n * @memberof Cesium3DTilePointFeature.prototype\n *\n * @type {Cesium3DTileset}\n *\n * @readonly\n */\n primitive: {\n get: function () {\n return this._content.tileset;\n },\n },\n\n /**\n * @private\n */\n pickIds: {\n get: function () {\n var ids = this._pickIds;\n ids[0] = this._billboard.pickId;\n ids[1] = this._label.pickId;\n ids[2] = this._polyline.pickId;\n return ids;\n },\n },\n});\n\nCesium3DTilePointFeature.defaultColor = Color.WHITE;\nCesium3DTilePointFeature.defaultPointOutlineColor = Color.BLACK;\nCesium3DTilePointFeature.defaultPointOutlineWidth = 0.0;\nCesium3DTilePointFeature.defaultPointSize = 8.0;\n\nfunction setBillboardImage(feature) {\n var b = feature._billboard;\n if (defined(feature._billboardImage) && feature._billboardImage !== b.image) {\n b.image = feature._billboardImage;\n return;\n }\n\n if (defined(feature._billboardImage)) {\n return;\n }\n\n var newColor = defaultValue(\n feature._color,\n Cesium3DTilePointFeature.defaultColor\n );\n var newOutlineColor = defaultValue(\n feature._pointOutlineColor,\n Cesium3DTilePointFeature.defaultPointOutlineColor\n );\n var newOutlineWidth = defaultValue(\n feature._pointOutlineWidth,\n Cesium3DTilePointFeature.defaultPointOutlineWidth\n );\n var newPointSize = defaultValue(\n feature._pointSize,\n Cesium3DTilePointFeature.defaultPointSize\n );\n\n var currentColor = feature._billboardColor;\n var currentOutlineColor = feature._billboardOutlineColor;\n var currentOutlineWidth = feature._billboardOutlineWidth;\n var currentPointSize = feature._billboardSize;\n\n if (\n Color.equals(newColor, currentColor) &&\n Color.equals(newOutlineColor, currentOutlineColor) &&\n newOutlineWidth === currentOutlineWidth &&\n newPointSize === currentPointSize\n ) {\n return;\n }\n\n feature._billboardColor = Color.clone(newColor, feature._billboardColor);\n feature._billboardOutlineColor = Color.clone(\n newOutlineColor,\n feature._billboardOutlineColor\n );\n feature._billboardOutlineWidth = newOutlineWidth;\n feature._billboardSize = newPointSize;\n\n var centerAlpha = newColor.alpha;\n var cssColor = newColor.toCssColorString();\n var cssOutlineColor = newOutlineColor.toCssColorString();\n var textureId = JSON.stringify([\n cssColor,\n newPointSize,\n cssOutlineColor,\n newOutlineWidth,\n ]);\n\n b.setImage(\n textureId,\n createBillboardPointCallback(\n centerAlpha,\n cssColor,\n cssOutlineColor,\n newOutlineWidth,\n newPointSize\n )\n );\n}\n\n/**\n * Returns whether the feature contains this property. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String} name The case-sensitive name of the property.\n * @returns {Boolean} Whether the feature contains this property.\n */\nCesium3DTilePointFeature.prototype.hasProperty = function (name) {\n return this._content.batchTable.hasProperty(this._batchId, name);\n};\n\n/**\n * Returns an array of property names for the feature. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String[]} [results] An array into which to store the results.\n * @returns {String[]} The names of the feature's properties.\n */\nCesium3DTilePointFeature.prototype.getPropertyNames = function (results) {\n return this._content.batchTable.getPropertyNames(this._batchId, results);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {String} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the property does not exist.\n *\n * @example\n * // Display all the properties for a feature in the console log.\n * var propertyNames = feature.getPropertyNames();\n * var length = propertyNames.length;\n * for (var i = 0; i < length; ++i) {\n * var propertyName = propertyNames[i];\n * console.log(propertyName + ': ' + feature.getProperty(propertyName));\n * }\n */\nCesium3DTilePointFeature.prototype.getProperty = function (name) {\n return this._content.batchTable.getProperty(this._batchId, name);\n};\n\n/**\n * Sets the value of the feature's property with the given name.\n * <p>\n * If a property with the given name doesn't exist, it is created.\n * </p>\n *\n * @param {String} name The case-sensitive name of the property.\n * @param {*} value The value of the property that will be copied.\n *\n * @exception {DeveloperError} Inherited batch table hierarchy property is read only.\n *\n * @example\n * var height = feature.getProperty('Height'); // e.g., the height of a building\n *\n * @example\n * var name = 'clicked';\n * if (feature.getProperty(name)) {\n * console.log('already clicked');\n * } else {\n * feature.setProperty(name, true);\n * console.log('first click');\n * }\n */\nCesium3DTilePointFeature.prototype.setProperty = function (name, value) {\n this._content.batchTable.setProperty(this._batchId, name, value);\n\n // PERFORMANCE_IDEA: Probably overkill, but maybe only mark the tile dirty if the\n // property is in one of the style's expressions or - if it can be done quickly -\n // if the new property value changed the result of an expression.\n this._content.featurePropertiesDirty = true;\n};\n\n/**\n * Returns whether the feature's class name equals <code>className</code>. Unlike {@link Cesium3DTileFeature#isClass}\n * this function only checks the feature's exact class and not inherited classes.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {String} className The name to check against.\n * @returns {Boolean} Whether the feature's class name equals <code>className</code>\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.isExactClass = function (className) {\n return this._content.batchTable.isExactClass(this._batchId, className);\n};\n\n/**\n * Returns whether the feature's class or any inherited classes are named <code>className</code>.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {String} className The name to check against.\n * @returns {Boolean} Whether the feature's class or inherited classes are named <code>className</code>\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.isClass = function (className) {\n return this._content.batchTable.isClass(this._batchId, className);\n};\n\n/**\n * Returns the feature's class name.\n * <p>\n * This function returns <code>undefined</code> if no batch table hierarchy is present.\n * </p>\n *\n * @returns {String} The feature's class name.\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.getExactClassName = function () {\n return this._content.batchTable.getExactClassName(this._batchId);\n};\nexport default Cesium3DTilePointFeature;\n","/*\n* https://github.com/dy/bitmap-sdf\n* Calculate SDF for image/bitmap/bw data\n* This project is a fork of MapBox's TinySDF that works directly on an input Canvas instead of generating the glyphs themselves.\n*/\n\n var INF = 1e20;\n\n function clamp(value, min, max) {\n return min < max\n ? (value < min ? min : value > max ? max : value)\n : (value < max ? max : value > min ? min : value)\n }\n\n function calcSDF(src, options) {\n if (!options) options = {}\n\n var cutoff = options.cutoff == null ? 0.25 : options.cutoff\n var radius = options.radius == null ? 8 : options.radius\n var channel = options.channel || 0\n var w, h, size, data, intData, stride, ctx, canvas, imgData, i, l\n\n // handle image container\n if (ArrayBuffer.isView(src) || Array.isArray(src)) {\n if (!options.width || !options.height) throw Error('For raw data width and height should be provided by options')\n w = options.width, h = options.height\n data = src\n\n if (!options.stride) stride = Math.floor(src.length / w / h)\n else stride = options.stride\n }\n else {\n if (window.HTMLCanvasElement && src instanceof window.HTMLCanvasElement) {\n canvas = src\n ctx = canvas.getContext('2d')\n w = canvas.width, h = canvas.height\n imgData = ctx.getImageData(0, 0, w, h)\n data = imgData.data\n stride = 4\n }\n else if (window.CanvasRenderingContext2D && src instanceof window.CanvasRenderingContext2D) {\n canvas = src.canvas\n ctx = src\n w = canvas.width, h = canvas.height\n imgData = ctx.getImageData(0, 0, w, h)\n data = imgData.data\n stride = 4\n }\n else if (window.ImageData && src instanceof window.ImageData) {\n imgData = src\n w = src.width, h = src.height\n data = imgData.data\n stride = 4\n }\n }\n\n size = Math.max(w, h)\n\n //convert int data to floats\n if ((window.Uint8ClampedArray && data instanceof window.Uint8ClampedArray) || (window.Uint8Array && data instanceof window.Uint8Array)) {\n intData = data\n data = Array(w * h)\n\n for (i = 0, l = intData.length; i < l; i++) {\n data[i] = intData[i * stride + channel] / 255\n }\n }\n else {\n if (stride !== 1) throw Error('Raw data can have only 1 value per pixel')\n }\n\n // temporary arrays for the distance transform\n var gridOuter = Array(w * h)\n var gridInner = Array(w * h)\n var f = Array(size)\n var d = Array(size)\n var z = Array(size + 1)\n var v = Array(size)\n\n for (i = 0, l = w * h; i < l; i++) {\n var a = data[i]\n gridOuter[i] = a === 1 ? 0 : a === 0 ? INF : Math.pow(Math.max(0, 0.5 - a), 2)\n gridInner[i] = a === 1 ? INF : a === 0 ? 0 : Math.pow(Math.max(0, a - 0.5), 2)\n }\n\n edt(gridOuter, w, h, f, d, v, z)\n edt(gridInner, w, h, f, d, v, z)\n\n var dist = window.Float32Array ? new Float32Array(w * h) : new Array(w * h)\n\n for (i = 0, l = w * h; i < l; i++) {\n dist[i] = clamp(1 - ((gridOuter[i] - gridInner[i]) / radius + cutoff), 0, 1)\n }\n\n return dist\n }\n\n // 2D Euclidean distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/dt/\n function edt(data, width, height, f, d, v, z) {\n for (var x = 0; x < width; x++) {\n for (var y = 0; y < height; y++) {\n f[y] = data[y * width + x]\n }\n edt1d(f, d, v, z, height)\n for (y = 0; y < height; y++) {\n data[y * width + x] = d[y]\n }\n }\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n f[x] = data[y * width + x]\n }\n edt1d(f, d, v, z, width)\n for (x = 0; x < width; x++) {\n data[y * width + x] = Math.sqrt(d[x])\n }\n }\n }\n\n // 1D squared distance transform\n function edt1d(f, d, v, z, n) {\n v[0] = 0;\n z[0] = -INF\n z[1] = +INF\n\n for (var q = 1, k = 0; q < n; q++) {\n var s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k])\n while (s <= z[k]) {\n k--\n s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k])\n }\n k++\n v[k] = q\n z[k] = s\n z[k + 1] = +INF\n }\n\n for (q = 0, k = 0; q < n; q++) {\n while (z[k + 1] < q) k++\n d[q] = (q - v[k]) * (q - v[k]) + f[v[k]]\n }\n }\n\n export default calcSDF;\n","/**\n * Describes how to draw a label.\n *\n * @enum {Number}\n *\n * @see Label#style\n */\nvar LabelStyle = {\n /**\n * Fill the text of the label, but do not outline.\n *\n * @type {Number}\n * @constant\n */\n FILL: 0,\n\n /**\n * Outline the text of the label, but do not fill.\n *\n * @type {Number}\n * @constant\n */\n OUTLINE: 1,\n\n /**\n * Fill and outline the text of the label.\n *\n * @type {Number}\n * @constant\n */\n FILL_AND_OUTLINE: 2,\n};\nexport default Object.freeze(LabelStyle);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Billboard from \"./Billboard.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\n\nvar fontInfoCache = {};\nvar fontInfoCacheLength = 0;\nvar fontInfoCacheMaxSize = 256;\nvar defaultBackgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\nvar defaultBackgroundPadding = new Cartesian2(7, 5);\n\nvar textTypes = Object.freeze({\n LTR: 0,\n RTL: 1,\n WEAK: 2,\n BRACKETS: 3,\n});\n\nfunction rebindAllGlyphs(label) {\n if (!label._rebindAllGlyphs && !label._repositionAllGlyphs) {\n // only push label if it's not already been marked dirty\n label._labelCollection._labelsToUpdate.push(label);\n }\n label._rebindAllGlyphs = true;\n}\n\nfunction repositionAllGlyphs(label) {\n if (!label._rebindAllGlyphs && !label._repositionAllGlyphs) {\n // only push label if it's not already been marked dirty\n label._labelCollection._labelsToUpdate.push(label);\n }\n label._repositionAllGlyphs = true;\n}\n\nfunction getCSSValue(element, property) {\n return document.defaultView\n .getComputedStyle(element, null)\n .getPropertyValue(property);\n}\n\nfunction parseFont(label) {\n var fontInfo = fontInfoCache[label._font];\n if (!defined(fontInfo)) {\n var div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n div.style.opacity = 0;\n div.style.font = label._font;\n document.body.appendChild(div);\n\n fontInfo = {\n family: getCSSValue(div, \"font-family\"),\n size: getCSSValue(div, \"font-size\").replace(\"px\", \"\"),\n style: getCSSValue(div, \"font-style\"),\n weight: getCSSValue(div, \"font-weight\"),\n };\n\n document.body.removeChild(div);\n if (fontInfoCacheLength < fontInfoCacheMaxSize) {\n fontInfoCache[label._font] = fontInfo;\n fontInfoCacheLength++;\n }\n }\n label._fontFamily = fontInfo.family;\n label._fontSize = fontInfo.size;\n label._fontStyle = fontInfo.style;\n label._fontWeight = fontInfo.weight;\n}\n\n/**\n * A Label draws viewport-aligned text positioned in the 3D scene. This constructor\n * should not be used directly, instead create labels by calling {@link LabelCollection#add}.\n *\n * @alias Label\n * @internalConstructor\n * @class\n *\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see LabelCollection\n * @see LabelCollection#add\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Labels.html|Cesium Sandcastle Labels Demo}\n */\nfunction Label(options, labelCollection) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (\n defined(options.disableDepthTestDistance) &&\n options.disableDepthTestDistance < 0.0\n ) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than 0.0.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = options.translucencyByDistance;\n var pixelOffsetScaleByDistance = options.pixelOffsetScaleByDistance;\n var scaleByDistance = options.scaleByDistance;\n var distanceDisplayCondition = options.distanceDisplayCondition;\n if (defined(translucencyByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (translucencyByDistance.far <= translucencyByDistance.near) {\n throw new DeveloperError(\n \"translucencyByDistance.far must be greater than translucencyByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n }\n if (defined(pixelOffsetScaleByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (pixelOffsetScaleByDistance.far <= pixelOffsetScaleByDistance.near) {\n throw new DeveloperError(\n \"pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n pixelOffsetScaleByDistance = NearFarScalar.clone(\n pixelOffsetScaleByDistance\n );\n }\n if (defined(scaleByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (scaleByDistance.far <= scaleByDistance.near) {\n throw new DeveloperError(\n \"scaleByDistance.far must be greater than scaleByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n scaleByDistance = NearFarScalar.clone(scaleByDistance);\n }\n if (defined(distanceDisplayCondition)) {\n //>>includeStart('debug', pragmas.debug);\n if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n throw new DeveloperError(\n \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\"\n );\n }\n //>>includeEnd('debug');\n distanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition\n );\n }\n\n this._renderedText = undefined;\n this._text = undefined;\n this._show = defaultValue(options.show, true);\n this._font = defaultValue(options.font, \"30px sans-serif\");\n this._fillColor = Color.clone(defaultValue(options.fillColor, Color.WHITE));\n this._outlineColor = Color.clone(\n defaultValue(options.outlineColor, Color.BLACK)\n );\n this._outlineWidth = defaultValue(options.outlineWidth, 1.0);\n this._showBackground = defaultValue(options.showBackground, false);\n this._backgroundColor = Color.clone(\n defaultValue(options.backgroundColor, defaultBackgroundColor)\n );\n this._backgroundPadding = Cartesian2.clone(\n defaultValue(options.backgroundPadding, defaultBackgroundPadding)\n );\n this._style = defaultValue(options.style, LabelStyle.FILL);\n this._verticalOrigin = defaultValue(\n options.verticalOrigin,\n VerticalOrigin.BASELINE\n );\n this._horizontalOrigin = defaultValue(\n options.horizontalOrigin,\n HorizontalOrigin.LEFT\n );\n this._pixelOffset = Cartesian2.clone(\n defaultValue(options.pixelOffset, Cartesian2.ZERO)\n );\n this._eyeOffset = Cartesian3.clone(\n defaultValue(options.eyeOffset, Cartesian3.ZERO)\n );\n this._position = Cartesian3.clone(\n defaultValue(options.position, Cartesian3.ZERO)\n );\n this._scale = defaultValue(options.scale, 1.0);\n this._id = options.id;\n this._translucencyByDistance = translucencyByDistance;\n this._pixelOffsetScaleByDistance = pixelOffsetScaleByDistance;\n this._scaleByDistance = scaleByDistance;\n this._heightReference = defaultValue(\n options.heightReference,\n HeightReference.NONE\n );\n this._distanceDisplayCondition = distanceDisplayCondition;\n this._disableDepthTestDistance = options.disableDepthTestDistance;\n\n this._labelCollection = labelCollection;\n this._glyphs = [];\n this._backgroundBillboard = undefined;\n this._batchIndex = undefined; // Used only by Vector3DTilePoints and BillboardCollection\n\n this._rebindAllGlyphs = true;\n this._repositionAllGlyphs = true;\n\n this._actualClampedPosition = undefined;\n this._removeCallbackFunc = undefined;\n this._mode = undefined;\n\n this._clusterShow = true;\n\n this.text = defaultValue(options.text, \"\");\n\n this._relativeSize = 1.0;\n\n parseFont(this);\n\n this._updateClamping();\n}\n\nObject.defineProperties(Label.prototype, {\n /**\n * Determines if this label will be shown. Use this to hide or show a label, instead\n * of removing it and re-adding it to the collection.\n * @memberof Label.prototype\n * @type {Boolean}\n * @default true\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._show !== value) {\n this._show = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var billboard = glyphs[i].billboard;\n if (defined(billboard)) {\n billboard.show = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.show = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets the Cartesian position of this label.\n * @memberof Label.prototype\n * @type {Cartesian3}\n */\n position: {\n get: function () {\n return this._position;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var position = this._position;\n if (!Cartesian3.equals(position, value)) {\n Cartesian3.clone(value, position);\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var billboard = glyphs[i].billboard;\n if (defined(billboard)) {\n billboard.position = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.position = value;\n }\n\n this._updateClamping();\n }\n },\n },\n\n /**\n * Gets or sets the height reference of this billboard.\n * @memberof Label.prototype\n * @type {HeightReference}\n * @default HeightReference.NONE\n */\n heightReference: {\n get: function () {\n return this._heightReference;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (value !== this._heightReference) {\n this._heightReference = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var billboard = glyphs[i].billboard;\n if (defined(billboard)) {\n billboard.heightReference = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.heightReference = value;\n }\n\n repositionAllGlyphs(this);\n\n this._updateClamping();\n }\n },\n },\n\n /**\n * Gets or sets the text of this label.\n * @memberof Label.prototype\n * @type {String}\n */\n text: {\n get: function () {\n return this._text;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._text !== value) {\n this._text = value;\n this._renderedText = Label.enableRightToLeftDetection\n ? reverseRtl(value)\n : value;\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the font used to draw this label. Fonts are specified using the same syntax as the CSS 'font' property.\n * @memberof Label.prototype\n * @type {String}\n * @default '30px sans-serif'\n * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#text-styles|HTML canvas 2D context text styles}\n */\n font: {\n get: function () {\n return this._font;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._font !== value) {\n this._font = value;\n rebindAllGlyphs(this);\n parseFont(this);\n }\n },\n },\n\n /**\n * Gets or sets the fill color of this label.\n * @memberof Label.prototype\n * @type {Color}\n * @default Color.WHITE\n * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n */\n fillColor: {\n get: function () {\n return this._fillColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var fillColor = this._fillColor;\n if (!Color.equals(fillColor, value)) {\n Color.clone(value, fillColor);\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the outline color of this label.\n * @memberof Label.prototype\n * @type {Color}\n * @default Color.BLACK\n * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n */\n outlineColor: {\n get: function () {\n return this._outlineColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var outlineColor = this._outlineColor;\n if (!Color.equals(outlineColor, value)) {\n Color.clone(value, outlineColor);\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the outline width of this label.\n * @memberof Label.prototype\n * @type {Number}\n * @default 1.0\n * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n */\n outlineWidth: {\n get: function () {\n return this._outlineWidth;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._outlineWidth !== value) {\n this._outlineWidth = value;\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Determines if a background behind this label will be shown.\n * @memberof Label.prototype\n * @default false\n * @type {Boolean}\n */\n showBackground: {\n get: function () {\n return this._showBackground;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._showBackground !== value) {\n this._showBackground = value;\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the background color of this label.\n * @memberof Label.prototype\n * @type {Color}\n * @default new Color(0.165, 0.165, 0.165, 0.8)\n */\n backgroundColor: {\n get: function () {\n return this._backgroundColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var backgroundColor = this._backgroundColor;\n if (!Color.equals(backgroundColor, value)) {\n Color.clone(value, backgroundColor);\n\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.color = backgroundColor;\n }\n }\n },\n },\n\n /**\n * Gets or sets the background padding, in pixels, of this label. The <code>x</code> value\n * controls horizontal padding, and the <code>y</code> value controls vertical padding.\n * @memberof Label.prototype\n * @type {Cartesian2}\n * @default new Cartesian2(7, 5)\n */\n backgroundPadding: {\n get: function () {\n return this._backgroundPadding;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var backgroundPadding = this._backgroundPadding;\n if (!Cartesian2.equals(backgroundPadding, value)) {\n Cartesian2.clone(value, backgroundPadding);\n repositionAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the style of this label.\n * @memberof Label.prototype\n * @type {LabelStyle}\n * @default LabelStyle.FILL\n */\n style: {\n get: function () {\n return this._style;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._style !== value) {\n this._style = value;\n rebindAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the pixel offset in screen space from the origin of this label. This is commonly used\n * to align multiple labels and billboards at the same position, e.g., an image and text. The\n * screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n * <br /><br />\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><code>default</code><br/><img src='Images/Label.setPixelOffset.default.png' width='250' height='188' /></td>\n * <td align='center'><code>l.pixeloffset = new Cartesian2(25, 75);</code><br/><img src='Images/Label.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n * </tr></table>\n * The label's origin is indicated by the yellow point.\n * </div>\n * @memberof Label.prototype\n * @type {Cartesian2}\n * @default Cartesian2.ZERO\n */\n pixelOffset: {\n get: function () {\n return this._pixelOffset;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var pixelOffset = this._pixelOffset;\n if (!Cartesian2.equals(pixelOffset, value)) {\n Cartesian2.clone(value, pixelOffset);\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.pixelOffset = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.pixelOffset = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets near and far translucency properties of a Label based on the Label's distance from the camera.\n * A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's translucency remains clamped to the nearest bound. If undefined,\n * translucencyByDistance will be disabled.\n * @memberof Label.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a label's translucencyByDistance to 1.0 when the\n * // camera is 1500 meters from the label and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * text.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable translucency by distance\n * text.translucencyByDistance = undefined;\n */\n translucencyByDistance: {\n get: function () {\n return this._translucencyByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = this._translucencyByDistance;\n if (!NearFarScalar.equals(translucencyByDistance, value)) {\n this._translucencyByDistance = NearFarScalar.clone(\n value,\n translucencyByDistance\n );\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.translucencyByDistance = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.translucencyByDistance = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets near and far pixel offset scaling properties of a Label based on the Label's distance from the camera.\n * A label's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's pixel offset scaling remains clamped to the nearest bound. If undefined,\n * pixelOffsetScaleByDistance will be disabled.\n * @memberof Label.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a label's pixel offset scale to 0.0 when the\n * // camera is 1500 meters from the label and scale pixel offset to 10.0 pixels\n * // in the y direction the camera distance approaches 8.0e6 meters.\n * text.pixelOffset = new Cesium.Cartesian2(0.0, 1.0);\n * text.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0);\n *\n * @example\n * // Example 2.\n * // disable pixel offset by distance\n * text.pixelOffsetScaleByDistance = undefined;\n */\n pixelOffsetScaleByDistance: {\n get: function () {\n return this._pixelOffsetScaleByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n if (!NearFarScalar.equals(pixelOffsetScaleByDistance, value)) {\n this._pixelOffsetScaleByDistance = NearFarScalar.clone(\n value,\n pixelOffsetScaleByDistance\n );\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.pixelOffsetScaleByDistance = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.pixelOffsetScaleByDistance = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera.\n * A label's scale will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the label's scale remains clamped to the nearest bound. If undefined,\n * scaleByDistance will be disabled.\n * @memberof Label.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a label's scaleByDistance to scale by 1.5 when the\n * // camera is 1500 meters from the label and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * label.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable scaling by distance\n * label.scaleByDistance = undefined;\n */\n scaleByDistance: {\n get: function () {\n return this._scaleByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var scaleByDistance = this._scaleByDistance;\n if (!NearFarScalar.equals(scaleByDistance, value)) {\n this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.scaleByDistance = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.scaleByDistance = value;\n }\n }\n },\n },\n\n /**\n * Gets and sets the 3D Cartesian offset applied to this label in eye coordinates. Eye coordinates is a left-handed\n * coordinate system, where <code>x</code> points towards the viewer's right, <code>y</code> points up, and\n * <code>z</code> points into the screen. Eye coordinates use the same scale as world and model coordinates,\n * which is typically meters.\n * <br /><br />\n * An eye offset is commonly used to arrange multiple label or objects at the same position, e.g., to\n * arrange a label above its corresponding 3D model.\n * <br /><br />\n * Below, the label is positioned at the center of the Earth but an eye offset makes it always\n * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n * <br /><br />\n * <div align='center'>\n * <table border='0' cellpadding='5'><tr>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n * </tr></table>\n * <code>l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n * </div>\n * @memberof Label.prototype\n * @type {Cartesian3}\n * @default Cartesian3.ZERO\n */\n eyeOffset: {\n get: function () {\n return this._eyeOffset;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var eyeOffset = this._eyeOffset;\n if (!Cartesian3.equals(eyeOffset, value)) {\n Cartesian3.clone(value, eyeOffset);\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.eyeOffset = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.eyeOffset = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets the horizontal origin of this label, which determines if the label is drawn\n * to the left, center, or right of its anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n * </div>\n * @memberof Label.prototype\n * @type {HorizontalOrigin}\n * @default HorizontalOrigin.LEFT\n * @example\n * // Use a top, right origin\n * l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;\n * l.verticalOrigin = Cesium.VerticalOrigin.TOP;\n */\n horizontalOrigin: {\n get: function () {\n return this._horizontalOrigin;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._horizontalOrigin !== value) {\n this._horizontalOrigin = value;\n repositionAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the vertical origin of this label, which determines if the label is\n * to the above, below, or at the center of its anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n * </div>\n * @memberof Label.prototype\n * @type {VerticalOrigin}\n * @default VerticalOrigin.BASELINE\n * @example\n * // Use a top, right origin\n * l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;\n * l.verticalOrigin = Cesium.VerticalOrigin.TOP;\n */\n verticalOrigin: {\n get: function () {\n return this._verticalOrigin;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._verticalOrigin !== value) {\n this._verticalOrigin = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.verticalOrigin = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.verticalOrigin = value;\n }\n\n repositionAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets or sets the uniform scale that is multiplied with the label's size in pixels.\n * A scale of <code>1.0</code> does not change the size of the label; a scale greater than\n * <code>1.0</code> enlarges the label; a positive scale less than <code>1.0</code> shrinks\n * the label.\n * <br /><br />\n * Applying a large scale value may pixelate the label. To make text larger without pixelation,\n * use a larger font size when calling {@link Label#font} instead.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Label.setScale.png' width='400' height='300' /><br/>\n * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n * and <code>2.0</code>.\n * </div>\n * @memberof Label.prototype\n * @type {Number}\n * @default 1.0\n */\n scale: {\n get: function () {\n return this._scale;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._scale !== value) {\n this._scale = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.scale = value * this._relativeSize;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.scale = value * this._relativeSize;\n }\n\n repositionAllGlyphs(this);\n }\n },\n },\n\n /**\n * Gets the total scale of the label, which is the label's scale multiplied by the computed relative size\n * of the desired font compared to the generated glyph size.\n * @memberof Label.prototype\n * @type {Number}\n * @default 1.0\n */\n totalScale: {\n get: function () {\n return this._scale * this._relativeSize;\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this label will be displayed.\n * @memberof Label.prototype\n * @type {DistanceDisplayCondition}\n * @default undefined\n */\n distanceDisplayCondition: {\n get: function () {\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\"far must be greater than near\");\n }\n //>>includeEnd('debug');\n if (\n !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n ) {\n this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n value,\n this._distanceDisplayCondition\n );\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.distanceDisplayCondition = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.distanceDisplayCondition = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof Label.prototype\n * @type {Number}\n */\n disableDepthTestDistance: {\n get: function () {\n return this._disableDepthTestDistance;\n },\n set: function (value) {\n if (this._disableDepthTestDistance !== value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value < 0.0) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than 0.0.\"\n );\n }\n //>>includeEnd('debug');\n this._disableDepthTestDistance = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.disableDepthTestDistance = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.disableDepthTestDistance = value;\n }\n }\n },\n },\n\n /**\n * Gets or sets the user-defined value returned when the label is picked.\n * @memberof Label.prototype\n * @type {*}\n */\n id: {\n get: function () {\n return this._id;\n },\n set: function (value) {\n if (this._id !== value) {\n this._id = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.id = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.id = value;\n }\n }\n },\n },\n\n /**\n * @private\n */\n pickId: {\n get: function () {\n if (this._glyphs.length === 0 || !defined(this._glyphs[0].billboard)) {\n return undefined;\n }\n return this._glyphs[0].billboard.pickId;\n },\n },\n\n /**\n * Keeps track of the position of the label based on the height reference.\n * @memberof Label.prototype\n * @type {Cartesian3}\n * @private\n */\n _clampedPosition: {\n get: function () {\n return this._actualClampedPosition;\n },\n set: function (value) {\n this._actualClampedPosition = Cartesian3.clone(\n value,\n this._actualClampedPosition\n );\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n // Set all the private values here, because we already clamped to ground\n // so we don't want to do it again for every glyph\n glyph.billboard._clampedPosition = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard._clampedPosition = value;\n }\n },\n },\n\n /**\n * Determines whether or not this label will be shown or hidden because it was clustered.\n * @memberof Label.prototype\n * @type {Boolean}\n * @default true\n * @private\n */\n clusterShow: {\n get: function () {\n return this._clusterShow;\n },\n set: function (value) {\n if (this._clusterShow !== value) {\n this._clusterShow = value;\n\n var glyphs = this._glyphs;\n for (var i = 0, len = glyphs.length; i < len; i++) {\n var glyph = glyphs[i];\n if (defined(glyph.billboard)) {\n glyph.billboard.clusterShow = value;\n }\n }\n var backgroundBillboard = this._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n backgroundBillboard.clusterShow = value;\n }\n }\n },\n },\n});\n\nLabel.prototype._updateClamping = function () {\n Billboard._updateClamping(this._labelCollection, this);\n};\n\n/**\n * Computes the screen-space position of the label's origin, taking into account eye and pixel offsets.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene the label is in.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the label.\n *\n *\n * @example\n * console.log(l.computeScreenSpacePosition(scene).toString());\n *\n * @see Label#eyeOffset\n * @see Label#pixelOffset\n */\nLabel.prototype.computeScreenSpacePosition = function (scene, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n var labelCollection = this._labelCollection;\n var modelMatrix = labelCollection.modelMatrix;\n var actualPosition = defined(this._actualClampedPosition)\n ? this._actualClampedPosition\n : this._position;\n\n var windowCoordinates = Billboard._computeScreenSpacePosition(\n modelMatrix,\n actualPosition,\n this._eyeOffset,\n this._pixelOffset,\n scene,\n result\n );\n return windowCoordinates;\n};\n\n/**\n * Gets a label's screen space bounding box centered around screenSpacePosition.\n * @param {Label} label The label to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nLabel.getScreenSpaceBoundingBox = function (\n label,\n screenSpacePosition,\n result\n) {\n var x = 0;\n var y = 0;\n var width = 0;\n var height = 0;\n var scale = label.totalScale;\n\n var backgroundBillboard = label._backgroundBillboard;\n if (defined(backgroundBillboard)) {\n x = screenSpacePosition.x + backgroundBillboard._translate.x;\n y = screenSpacePosition.y - backgroundBillboard._translate.y;\n width = backgroundBillboard.width * scale;\n height = backgroundBillboard.height * scale;\n\n if (\n label.verticalOrigin === VerticalOrigin.BOTTOM ||\n label.verticalOrigin === VerticalOrigin.BASELINE\n ) {\n y -= height;\n } else if (label.verticalOrigin === VerticalOrigin.CENTER) {\n y -= height * 0.5;\n }\n } else {\n x = Number.POSITIVE_INFINITY;\n y = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var maxY = 0;\n var glyphs = label._glyphs;\n var length = glyphs.length;\n for (var i = 0; i < length; ++i) {\n var glyph = glyphs[i];\n var billboard = glyph.billboard;\n if (!defined(billboard)) {\n continue;\n }\n\n var glyphX = screenSpacePosition.x + billboard._translate.x;\n var glyphY = screenSpacePosition.y - billboard._translate.y;\n var glyphWidth = glyph.dimensions.width * scale;\n var glyphHeight = glyph.dimensions.height * scale;\n\n if (\n label.verticalOrigin === VerticalOrigin.BOTTOM ||\n label.verticalOrigin === VerticalOrigin.BASELINE\n ) {\n glyphY -= glyphHeight;\n } else if (label.verticalOrigin === VerticalOrigin.CENTER) {\n glyphY -= glyphHeight * 0.5;\n }\n\n if (label._verticalOrigin === VerticalOrigin.TOP) {\n glyphY += SDFSettings.PADDING * scale;\n } else if (\n label._verticalOrigin === VerticalOrigin.BOTTOM ||\n label._verticalOrigin === VerticalOrigin.BASELINE\n ) {\n glyphY -= SDFSettings.PADDING * scale;\n }\n\n x = Math.min(x, glyphX);\n y = Math.min(y, glyphY);\n maxX = Math.max(maxX, glyphX + glyphWidth);\n maxY = Math.max(maxY, glyphY + glyphHeight);\n }\n\n width = maxX - x;\n height = maxY - y;\n }\n\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n result.x = x;\n result.y = y;\n result.width = width;\n result.height = height;\n\n return result;\n};\n\n/**\n * Determines if this label equals another label. Labels are equal if all their properties\n * are equal. Labels in different collections can be equal.\n *\n * @param {Label} other The label to compare for equality.\n * @returns {Boolean} <code>true</code> if the labels are equal; otherwise, <code>false</code>.\n */\nLabel.prototype.equals = function (other) {\n return (\n this === other ||\n (defined(other) &&\n this._show === other._show &&\n this._scale === other._scale &&\n this._outlineWidth === other._outlineWidth &&\n this._showBackground === other._showBackground &&\n this._style === other._style &&\n this._verticalOrigin === other._verticalOrigin &&\n this._horizontalOrigin === other._horizontalOrigin &&\n this._heightReference === other._heightReference &&\n this._renderedText === other._renderedText &&\n this._font === other._font &&\n Cartesian3.equals(this._position, other._position) &&\n Color.equals(this._fillColor, other._fillColor) &&\n Color.equals(this._outlineColor, other._outlineColor) &&\n Color.equals(this._backgroundColor, other._backgroundColor) &&\n Cartesian2.equals(this._backgroundPadding, other._backgroundPadding) &&\n Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&\n Cartesian3.equals(this._eyeOffset, other._eyeOffset) &&\n NearFarScalar.equals(\n this._translucencyByDistance,\n other._translucencyByDistance\n ) &&\n NearFarScalar.equals(\n this._pixelOffsetScaleByDistance,\n other._pixelOffsetScaleByDistance\n ) &&\n NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n DistanceDisplayCondition.equals(\n this._distanceDisplayCondition,\n other._distanceDisplayCondition\n ) &&\n this._disableDepthTestDistance === other._disableDepthTestDistance &&\n this._id === other._id)\n );\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nLabel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Determines whether or not run the algorithm, that match the text of the label to right-to-left languages\n * @memberof Label\n * @type {Boolean}\n * @default false\n *\n * @example\n * // Example 1.\n * // Set a label's rightToLeft before init\n * Cesium.Label.enableRightToLeftDetection = true;\n * var myLabelEntity = viewer.entities.add({\n * label: {\n * id: 'my label',\n * text: 'זה טקסט בעברית \\n ועכשיו יורדים שורה',\n * }\n * });\n *\n * @example\n * // Example 2.\n * var myLabelEntity = viewer.entities.add({\n * label: {\n * id: 'my label',\n * text: 'English text'\n * }\n * });\n * // Set a label's rightToLeft after init\n * Cesium.Label.enableRightToLeftDetection = true;\n * myLabelEntity.text = 'טקסט חדש';\n */\nLabel.enableRightToLeftDetection = false;\n\nfunction convertTextToTypes(text, rtlChars) {\n var ltrChars = /[a-zA-Z0-9]/;\n var bracketsChars = /[()[\\]{}<>]/;\n var parsedText = [];\n var word = \"\";\n var lastType = textTypes.LTR;\n var currentType = \"\";\n var textLength = text.length;\n for (var textIndex = 0; textIndex < textLength; ++textIndex) {\n var character = text.charAt(textIndex);\n if (rtlChars.test(character)) {\n currentType = textTypes.RTL;\n } else if (ltrChars.test(character)) {\n currentType = textTypes.LTR;\n } else if (bracketsChars.test(character)) {\n currentType = textTypes.BRACKETS;\n } else {\n currentType = textTypes.WEAK;\n }\n\n if (textIndex === 0) {\n lastType = currentType;\n }\n\n if (lastType === currentType && currentType !== textTypes.BRACKETS) {\n word += character;\n } else {\n if (word !== \"\") {\n parsedText.push({ Type: lastType, Word: word });\n }\n lastType = currentType;\n word = character;\n }\n }\n parsedText.push({ Type: currentType, Word: word });\n return parsedText;\n}\n\nfunction reverseWord(word) {\n return word.split(\"\").reverse().join(\"\");\n}\n\nfunction spliceWord(result, pointer, word) {\n return result.slice(0, pointer) + word + result.slice(pointer);\n}\n\nfunction reverseBrackets(bracket) {\n switch (bracket) {\n case \"(\":\n return \")\";\n case \")\":\n return \"(\";\n case \"[\":\n return \"]\";\n case \"]\":\n return \"[\";\n case \"{\":\n return \"}\";\n case \"}\":\n return \"{\";\n case \"<\":\n return \">\";\n case \">\":\n return \"<\";\n }\n}\n\n//To add another language, simply add its Unicode block range(s) to the below regex.\nvar hebrew = \"\\u05D0-\\u05EA\";\nvar arabic = \"\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\";\nvar rtlChars = new RegExp(\"[\" + hebrew + arabic + \"]\");\n\n/**\n *\n * @param {String} value the text to parse and reorder\n * @returns {String} the text as rightToLeft direction\n * @private\n */\nfunction reverseRtl(value) {\n var texts = value.split(\"\\n\");\n var result = \"\";\n for (var i = 0; i < texts.length; i++) {\n var text = texts[i];\n // first character of the line is a RTL character, so need to manage different cases\n var rtlDir = rtlChars.test(text.charAt(0));\n var parsedText = convertTextToTypes(text, rtlChars);\n\n var splicePointer = 0;\n var line = \"\";\n for (var wordIndex = 0; wordIndex < parsedText.length; ++wordIndex) {\n var subText = parsedText[wordIndex];\n var reverse =\n subText.Type === textTypes.BRACKETS\n ? reverseBrackets(subText.Word)\n : reverseWord(subText.Word);\n if (rtlDir) {\n if (subText.Type === textTypes.RTL) {\n line = reverse + line;\n splicePointer = 0;\n } else if (subText.Type === textTypes.LTR) {\n line = spliceWord(line, splicePointer, subText.Word);\n splicePointer += subText.Word.length;\n } else if (\n subText.Type === textTypes.WEAK ||\n subText.Type === textTypes.BRACKETS\n ) {\n // current word is weak, last one was bracket\n if (\n subText.Type === textTypes.WEAK &&\n parsedText[wordIndex - 1].Type === textTypes.BRACKETS\n ) {\n line = reverse + line;\n }\n // current word is weak or bracket, last one was rtl\n else if (parsedText[wordIndex - 1].Type === textTypes.RTL) {\n line = reverse + line;\n splicePointer = 0;\n }\n // current word is weak or bracket, there is at least one more word\n else if (parsedText.length > wordIndex + 1) {\n // next word is rtl\n if (parsedText[wordIndex + 1].Type === textTypes.RTL) {\n line = reverse + line;\n splicePointer = 0;\n } else {\n line = spliceWord(line, splicePointer, subText.Word);\n splicePointer += subText.Word.length;\n }\n }\n // current word is weak or bracket, and it the last in this line\n else {\n line = spliceWord(line, 0, reverse);\n }\n }\n }\n // ltr line, rtl word\n else if (subText.Type === textTypes.RTL) {\n line = spliceWord(line, splicePointer, reverse);\n }\n // ltr line, ltr word\n else if (subText.Type === textTypes.LTR) {\n line += subText.Word;\n splicePointer = line.length;\n }\n // ltr line, weak or bracket word\n else if (\n subText.Type === textTypes.WEAK ||\n subText.Type === textTypes.BRACKETS\n ) {\n // not first word in line\n if (wordIndex > 0) {\n // last word was rtl\n if (parsedText[wordIndex - 1].Type === textTypes.RTL) {\n // there is at least one more word\n if (parsedText.length > wordIndex + 1) {\n // next word is rtl\n if (parsedText[wordIndex + 1].Type === textTypes.RTL) {\n line = spliceWord(line, splicePointer, reverse);\n } else {\n line += subText.Word;\n splicePointer = line.length;\n }\n } else {\n line += subText.Word;\n }\n } else {\n line += subText.Word;\n splicePointer = line.length;\n }\n } else {\n line += subText.Word;\n splicePointer = line.length;\n }\n }\n }\n\n result += line;\n if (i < texts.length - 1) {\n result += \"\\n\";\n }\n }\n return result;\n}\nexport default Label;\n","/*\nBreaks a Javascript string into individual user-perceived \"characters\"\ncalled extended grapheme clusters by implementing the Unicode UAX-29 standard, version 10.0.0\nUsage:\nvar splitter = new GraphemeSplitter();\n//returns an array of strings, one string for each grapheme cluster\nvar graphemes = splitter.splitGraphemes(string);\n*/\nfunction GraphemeSplitter(){\n\tvar CR = 0,\n\t\tLF = 1,\n\t\tControl = 2,\n\t\tExtend = 3,\n\t\tRegional_Indicator = 4,\n\t\tSpacingMark = 5,\n\t\tL = 6,\n\t\tV = 7,\n\t\tT = 8,\n\t\tLV = 9,\n\t\tLVT = 10,\n\t\tOther = 11,\n\t\tPrepend = 12,\n\t\tE_Base = 13,\n\t\tE_Modifier = 14,\n\t\tZWJ = 15,\n\t\tGlue_After_Zwj = 16,\n\t\tE_Base_GAZ = 17;\n\n\t// BreakTypes\n\tvar NotBreak = 0,\n\t\tBreakStart = 1,\n\t\tBreak = 2,\n\t\tBreakLastRegional = 3,\n\t\tBreakPenultimateRegional = 4;\n\n\tfunction isSurrogate(str, pos) {\n\t\treturn 0xd800 <= str.charCodeAt(pos) && str.charCodeAt(pos) <= 0xdbff &&\n\t\t\t\t0xdc00 <= str.charCodeAt(pos + 1) && str.charCodeAt(pos + 1) <= 0xdfff;\n\t}\n\n\t// Private function, gets a Unicode code point from a JavaScript UTF-16 string\n\t// handling surrogate pairs appropriately\n\tfunction codePointAt(str, idx){\n\t\tif(idx === undefined){\n\t\t\tidx = 0;\n\t\t}\n\t\tvar code = str.charCodeAt(idx);\n\n\t\t// if a high surrogate\n\t\tif (0xD800 <= code && code <= 0xDBFF &&\n\t\t\tidx < str.length - 1){\n\t\t\tvar hi = code;\n\t\t\tvar low = str.charCodeAt(idx + 1);\n\t\t\tif (0xDC00 <= low && low <= 0xDFFF){\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n\t\t\t}\n\t\t\treturn hi;\n\t\t}\n\n\t\t// if a low surrogate\n\t\tif (0xDC00 <= code && code <= 0xDFFF &&\n\t\t\tidx >= 1){\n\t\t\tvar hi = str.charCodeAt(idx - 1);\n\t\t\tvar low = code;\n\t\t\tif (0xD800 <= hi && hi <= 0xDBFF){\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n\t\t\t}\n\t\t\treturn low;\n\t\t}\n\n\t\t//just return the char if an unmatched surrogate half or a\n\t\t//single-char codepoint\n\t\treturn code;\n\t}\n\n\t// Private function, returns whether a break is allowed between the\n\t// two given grapheme breaking classes\n\tfunction shouldBreak(start, mid, end){\n\t\tvar all = [start].concat(mid).concat([end]);\n\t\tvar previous = all[all.length - 2]\n\t\tvar next = end\n\n\t\t// Lookahead termintor for:\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\n\t\tvar eModifierIndex = all.lastIndexOf(E_Modifier)\n\t\tif(eModifierIndex > 1 &&\n\t\t\tall.slice(1, eModifierIndex).every(function(c){return c == Extend}) &&\n\t\t\t[Extend, E_Base, E_Base_GAZ].indexOf(start) == -1){\n\t\t\treturn Break\n\t\t}\n\n\t\t// Lookahead termintor for:\n\t\t// GB12. ^ (RI RI)* RI\t?\tRI\n\t\t// GB13. [^RI] (RI RI)* RI\t?\tRI\n\t\tvar rIIndex = all.lastIndexOf(Regional_Indicator)\n\t\tif(rIIndex > 0 &&\n\t\t\tall.slice(1, rIIndex).every(function(c){return c == Regional_Indicator}) &&\n\t\t\t[Prepend, Regional_Indicator].indexOf(previous) == -1) {\n\t\t\tif(all.filter(function(c){return c == Regional_Indicator}).length % 2 == 1) {\n\t\t\t\treturn BreakLastRegional\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn BreakPenultimateRegional\n\t\t\t}\n\t\t}\n\n\t\t// GB3. CR X LF\n\t\tif(previous == CR && next == LF){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB4. (Control|CR|LF) ÷\n\t\telse if(previous == Control || previous == CR || previous == LF){\n\t\t\tif(next == E_Modifier && mid.every(function(c){return c == Extend})){\n\t\t\t\treturn Break\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn BreakStart\n\t\t\t}\n\t\t}\n\t\t// GB5. ÷ (Control|CR|LF)\n\t\telse if(next == Control || next == CR || next == LF){\n\t\t\treturn BreakStart;\n\t\t}\n\t\t// GB6. L X (L|V|LV|LVT)\n\t\telse if(previous == L &&\n\t\t\t(next == L || next == V || next == LV || next == LVT)){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB7. (LV|V) X (V|T)\n\t\telse if((previous == LV || previous == V) &&\n\t\t\t(next == V || next == T)){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB8. (LVT|T) X (T)\n\t\telse if((previous == LVT || previous == T) &&\n\t\t\tnext == T){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB9. X (Extend|ZWJ)\n\t\telse if (next == Extend || next == ZWJ){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB9a. X SpacingMark\n\t\telse if(next == SpacingMark){\n\t\t\treturn NotBreak;\n\t\t}\n\t\t// GB9b. Prepend X\n\t\telse if (previous == Prepend){\n\t\t\treturn NotBreak;\n\t\t}\n\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\n\t\tvar previousNonExtendIndex = all.indexOf(Extend) != -1 ? all.lastIndexOf(Extend) - 1 : all.length - 2;\n\t\tif([E_Base, E_Base_GAZ].indexOf(all[previousNonExtendIndex]) != -1 &&\n\t\t\tall.slice(previousNonExtendIndex + 1, -1).every(function(c){return c == Extend}) &&\n\t\t\tnext == E_Modifier){\n\t\t\treturn NotBreak;\n\t\t}\n\n\t\t// GB11. ZWJ ? (Glue_After_Zwj | EBG)\n\t\tif(previous == ZWJ && [Glue_After_Zwj, E_Base_GAZ].indexOf(next) != -1) {\n\t\t\treturn NotBreak;\n\t\t}\n\n\t\t// GB12. ^ (RI RI)* RI ? RI\n\t\t// GB13. [^RI] (RI RI)* RI ? RI\n\t\tif(mid.indexOf(Regional_Indicator) != -1) {\n\t\t\treturn Break;\n\t\t}\n\t\tif(previous == Regional_Indicator && next == Regional_Indicator) {\n\t\t\treturn NotBreak;\n\t\t}\n\n\t\t// GB999. Any ? Any\n\t\treturn BreakStart;\n\t}\n\n\t// Returns the next grapheme break in the string after the given index\n\tthis.nextBreak = function(string, index){\n\t\tif(index === undefined){\n\t\t\tindex = 0;\n\t\t}\n\t\tif(index < 0){\n\t\t\treturn 0;\n\t\t}\n\t\tif(index >= string.length - 1){\n\t\t\treturn string.length;\n\t\t}\n\t\tvar prev = getGraphemeBreakProperty(codePointAt(string, index));\n\t\tvar mid = []\n\t\tfor (var i = index + 1; i < string.length; i++) {\n\t\t\t// check for already processed low surrogates\n\t\t\tif(isSurrogate(string, i - 1)){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar next = getGraphemeBreakProperty(codePointAt(string, i));\n\t\t\tif(shouldBreak(prev, mid, next)){\n\t\t\t\treturn i;\n\t\t\t}\n\n\t\t\tmid.push(next);\n\t\t}\n\t\treturn string.length;\n\t};\n\n\t// Breaks the given string into an array of grapheme cluster strings\n\tthis.splitGraphemes = function(str){\n\t\tvar res = [];\n\t\tvar index = 0;\n\t\tvar brk;\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\n\t\t\tres.push(str.slice(index, brk));\n\t\t\tindex = brk;\n\t\t}\n\t\tif(index < str.length){\n\t\t\tres.push(str.slice(index));\n\t\t}\n\t\treturn res;\n\t};\n\n\t// Returns the iterator of grapheme clusters there are in the given string\n\tthis.iterateGraphemes = function(str) {\n\t\tvar index = 0;\n\t\tvar res = {\n\t\t\tnext: (function() {\n\t\t\t\tvar value;\n\t\t\t\tvar brk;\n\t\t\t\tif ((brk = this.nextBreak(str, index)) < str.length) {\n\t\t\t\t\tvalue = str.slice(index, brk);\n\t\t\t\t\tindex = brk;\n\t\t\t\t\treturn { value: value, done: false };\n\t\t\t\t}\n\t\t\t\tif (index < str.length) {\n\t\t\t\t\tvalue = str.slice(index);\n\t\t\t\t\tindex = str.length;\n\t\t\t\t\treturn { value: value, done: false };\n\t\t\t\t}\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t}).bind(this)\n\t\t};\n\t\t// ES2015 @@iterator method (iterable) for spread syntax and for...of statement\n\t\tif (typeof Symbol !== 'undefined' && Symbol.iterator) {\n\t\t\tres[Symbol.iterator] = function() {return res};\n\t\t}\n\t\treturn res;\n\t};\n\n\t// Returns the number of grapheme clusters there are in the given string\n\tthis.countGraphemes = function(str){\n\t\tvar count = 0;\n\t\tvar index = 0;\n\t\tvar brk;\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\n\t\t\tindex = brk;\n\t\t\tcount++;\n\t\t}\n\t\tif(index < str.length){\n\t\t\tcount++;\n\t\t}\n\t\treturn count;\n\t};\n\n\t//given a Unicode code point, determines this symbol's grapheme break property\n\tfunction getGraphemeBreakProperty(code){\n\n\t\t//grapheme break property for Unicode 10.0.0,\n\t\t//taken from http://www.unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakProperty.txt\n\t\t//and adapted to JavaScript rules\n\n\t\tif(\n\t\t(0x0600 <= code && code <= 0x0605) || // Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n\t\t0x06DD == code || // Cf ARABIC END OF AYAH\n\t\t0x070F == code || // Cf SYRIAC ABBREVIATION MARK\n\t\t0x08E2 == code || // Cf ARABIC DISPUTED END OF AYAH\n\t\t0x0D4E == code || // Lo MALAYALAM LETTER DOT REPH\n\t\t0x110BD == code || // Cf KAITHI NUMBER SIGN\n\t\t(0x111C2 <= code && code <= 0x111C3) || // Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA\n\t\t0x11A3A == code || // Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n\t\t(0x11A86 <= code && code <= 0x11A89) || // Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA\n\t\t0x11D46 == code // Lo MASARAM GONDI REPHA\n\t\t){\n\t\t\treturn Prepend;\n\t\t}\n\t\tif(\n\t\t0x000D == code // Cc <control-000D>\n\t\t){\n\t\t\treturn CR;\n\t\t}\n\n\t\tif(\n\t\t0x000A == code // Cc <control-000A>\n\t\t){\n\t\t\treturn LF;\n\t\t}\n\n\n\t\tif(\n\t\t(0x0000 <= code && code <= 0x0009) || // Cc [10] <control-0000>..<control-0009>\n\t\t(0x000B <= code && code <= 0x000C) || // Cc [2] <control-000B>..<control-000C>\n\t\t(0x000E <= code && code <= 0x001F) || // Cc [18] <control-000E>..<control-001F>\n\t\t(0x007F <= code && code <= 0x009F) || // Cc [33] <control-007F>..<control-009F>\n\t\t0x00AD == code || // Cf SOFT HYPHEN\n\t\t0x061C == code || // Cf ARABIC LETTER MARK\n\n\t\t0x180E == code || // Cf MONGOLIAN VOWEL SEPARATOR\n\t\t0x200B == code || // Cf ZERO WIDTH SPACE\n\t\t(0x200E <= code && code <= 0x200F) || // Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n\t\t0x2028 == code || // Zl LINE SEPARATOR\n\t\t0x2029 == code || // Zp PARAGRAPH SEPARATOR\n\t\t(0x202A <= code && code <= 0x202E) || // Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n\t\t(0x2060 <= code && code <= 0x2064) || // Cf [5] WORD JOINER..INVISIBLE PLUS\n\t\t0x2065 == code || // Cn <reserved-2065>\n\t\t(0x2066 <= code && code <= 0x206F) || // Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\n\t\t(0xD800 <= code && code <= 0xDFFF) || // Cs [2048] <surrogate-D800>..<surrogate-DFFF>\n\t\t0xFEFF == code || // Cf ZERO WIDTH NO-BREAK SPACE\n\t\t(0xFFF0 <= code && code <= 0xFFF8) || // Cn [9] <reserved-FFF0>..<reserved-FFF8>\n\t\t(0xFFF9 <= code && code <= 0xFFFB) || // Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\n\t\t(0x1BCA0 <= code && code <= 0x1BCA3) || // Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n\t\t(0x1D173 <= code && code <= 0x1D17A) || // Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\n\t\t0xE0000 == code || // Cn <reserved-E0000>\n\t\t0xE0001 == code || // Cf LANGUAGE TAG\n\t\t(0xE0002 <= code && code <= 0xE001F) || // Cn [30] <reserved-E0002>..<reserved-E001F>\n\t\t(0xE0080 <= code && code <= 0xE00FF) || // Cn [128] <reserved-E0080>..<reserved-E00FF>\n\t\t(0xE01F0 <= code && code <= 0xE0FFF) // Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\n\t\t){\n\t\t\treturn Control;\n\t\t}\n\n\n\t\tif(\n\t\t(0x0300 <= code && code <= 0x036F) || // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n\t\t(0x0483 <= code && code <= 0x0487) || // Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n\t\t(0x0488 <= code && code <= 0x0489) || // Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n\t\t(0x0591 <= code && code <= 0x05BD) || // Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n\t\t0x05BF == code || // Mn HEBREW POINT RAFE\n\t\t(0x05C1 <= code && code <= 0x05C2) || // Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n\t\t(0x05C4 <= code && code <= 0x05C5) || // Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n\t\t0x05C7 == code || // Mn HEBREW POINT QAMATS QATAN\n\t\t(0x0610 <= code && code <= 0x061A) || // Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n\t\t(0x064B <= code && code <= 0x065F) || // Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n\t\t0x0670 == code || // Mn ARABIC LETTER SUPERSCRIPT ALEF\n\t\t(0x06D6 <= code && code <= 0x06DC) || // Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n\t\t(0x06DF <= code && code <= 0x06E4) || // Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n\t\t(0x06E7 <= code && code <= 0x06E8) || // Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n\t\t(0x06EA <= code && code <= 0x06ED) || // Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n\t\t0x0711 == code || // Mn SYRIAC LETTER SUPERSCRIPT ALAPH\n\t\t(0x0730 <= code && code <= 0x074A) || // Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n\t\t(0x07A6 <= code && code <= 0x07B0) || // Mn [11] THAANA ABAFILI..THAANA SUKUN\n\t\t(0x07EB <= code && code <= 0x07F3) || // Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n\t\t(0x0816 <= code && code <= 0x0819) || // Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n\t\t(0x081B <= code && code <= 0x0823) || // Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n\t\t(0x0825 <= code && code <= 0x0827) || // Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n\t\t(0x0829 <= code && code <= 0x082D) || // Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n\t\t(0x0859 <= code && code <= 0x085B) || // Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n\t\t(0x08D4 <= code && code <= 0x08E1) || // Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA\n\t\t(0x08E3 <= code && code <= 0x0902) || // Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n\t\t0x093A == code || // Mn DEVANAGARI VOWEL SIGN OE\n\t\t0x093C == code || // Mn DEVANAGARI SIGN NUKTA\n\t\t(0x0941 <= code && code <= 0x0948) || // Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n\t\t0x094D == code || // Mn DEVANAGARI SIGN VIRAMA\n\t\t(0x0951 <= code && code <= 0x0957) || // Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n\t\t(0x0962 <= code && code <= 0x0963) || // Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n\t\t0x0981 == code || // Mn BENGALI SIGN CANDRABINDU\n\t\t0x09BC == code || // Mn BENGALI SIGN NUKTA\n\t\t0x09BE == code || // Mc BENGALI VOWEL SIGN AA\n\t\t(0x09C1 <= code && code <= 0x09C4) || // Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n\t\t0x09CD == code || // Mn BENGALI SIGN VIRAMA\n\t\t0x09D7 == code || // Mc BENGALI AU LENGTH MARK\n\t\t(0x09E2 <= code && code <= 0x09E3) || // Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n\t\t(0x0A01 <= code && code <= 0x0A02) || // Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n\t\t0x0A3C == code || // Mn GURMUKHI SIGN NUKTA\n\t\t(0x0A41 <= code && code <= 0x0A42) || // Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n\t\t(0x0A47 <= code && code <= 0x0A48) || // Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n\t\t(0x0A4B <= code && code <= 0x0A4D) || // Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n\t\t0x0A51 == code || // Mn GURMUKHI SIGN UDAAT\n\t\t(0x0A70 <= code && code <= 0x0A71) || // Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n\t\t0x0A75 == code || // Mn GURMUKHI SIGN YAKASH\n\t\t(0x0A81 <= code && code <= 0x0A82) || // Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n\t\t0x0ABC == code || // Mn GUJARATI SIGN NUKTA\n\t\t(0x0AC1 <= code && code <= 0x0AC5) || // Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n\t\t(0x0AC7 <= code && code <= 0x0AC8) || // Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n\t\t0x0ACD == code || // Mn GUJARATI SIGN VIRAMA\n\t\t(0x0AE2 <= code && code <= 0x0AE3) || // Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n\t\t(0x0AFA <= code && code <= 0x0AFF) || // Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n\t\t0x0B01 == code || // Mn ORIYA SIGN CANDRABINDU\n\t\t0x0B3C == code || // Mn ORIYA SIGN NUKTA\n\t\t0x0B3E == code || // Mc ORIYA VOWEL SIGN AA\n\t\t0x0B3F == code || // Mn ORIYA VOWEL SIGN I\n\t\t(0x0B41 <= code && code <= 0x0B44) || // Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n\t\t0x0B4D == code || // Mn ORIYA SIGN VIRAMA\n\t\t0x0B56 == code || // Mn ORIYA AI LENGTH MARK\n\t\t0x0B57 == code || // Mc ORIYA AU LENGTH MARK\n\t\t(0x0B62 <= code && code <= 0x0B63) || // Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n\t\t0x0B82 == code || // Mn TAMIL SIGN ANUSVARA\n\t\t0x0BBE == code || // Mc TAMIL VOWEL SIGN AA\n\t\t0x0BC0 == code || // Mn TAMIL VOWEL SIGN II\n\t\t0x0BCD == code || // Mn TAMIL SIGN VIRAMA\n\t\t0x0BD7 == code || // Mc TAMIL AU LENGTH MARK\n\t\t0x0C00 == code || // Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE\n\t\t(0x0C3E <= code && code <= 0x0C40) || // Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n\t\t(0x0C46 <= code && code <= 0x0C48) || // Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n\t\t(0x0C4A <= code && code <= 0x0C4D) || // Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n\t\t(0x0C55 <= code && code <= 0x0C56) || // Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n\t\t(0x0C62 <= code && code <= 0x0C63) || // Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n\t\t0x0C81 == code || // Mn KANNADA SIGN CANDRABINDU\n\t\t0x0CBC == code || // Mn KANNADA SIGN NUKTA\n\t\t0x0CBF == code || // Mn KANNADA VOWEL SIGN I\n\t\t0x0CC2 == code || // Mc KANNADA VOWEL SIGN UU\n\t\t0x0CC6 == code || // Mn KANNADA VOWEL SIGN E\n\t\t(0x0CCC <= code && code <= 0x0CCD) || // Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n\t\t(0x0CD5 <= code && code <= 0x0CD6) || // Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n\t\t(0x0CE2 <= code && code <= 0x0CE3) || // Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n\t\t(0x0D00 <= code && code <= 0x0D01) || // Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n\t\t(0x0D3B <= code && code <= 0x0D3C) || // Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n\t\t0x0D3E == code || // Mc MALAYALAM VOWEL SIGN AA\n\t\t(0x0D41 <= code && code <= 0x0D44) || // Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n\t\t0x0D4D == code || // Mn MALAYALAM SIGN VIRAMA\n\t\t0x0D57 == code || // Mc MALAYALAM AU LENGTH MARK\n\t\t(0x0D62 <= code && code <= 0x0D63) || // Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n\t\t0x0DCA == code || // Mn SINHALA SIGN AL-LAKUNA\n\t\t0x0DCF == code || // Mc SINHALA VOWEL SIGN AELA-PILLA\n\t\t(0x0DD2 <= code && code <= 0x0DD4) || // Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n\t\t0x0DD6 == code || // Mn SINHALA VOWEL SIGN DIGA PAA-PILLA\n\t\t0x0DDF == code || // Mc SINHALA VOWEL SIGN GAYANUKITTA\n\t\t0x0E31 == code || // Mn THAI CHARACTER MAI HAN-AKAT\n\t\t(0x0E34 <= code && code <= 0x0E3A) || // Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n\t\t(0x0E47 <= code && code <= 0x0E4E) || // Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n\t\t0x0EB1 == code || // Mn LAO VOWEL SIGN MAI KAN\n\t\t(0x0EB4 <= code && code <= 0x0EB9) || // Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU\n\t\t(0x0EBB <= code && code <= 0x0EBC) || // Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO\n\t\t(0x0EC8 <= code && code <= 0x0ECD) || // Mn [6] LAO TONE MAI EK..LAO NIGGAHITA\n\t\t(0x0F18 <= code && code <= 0x0F19) || // Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n\t\t0x0F35 == code || // Mn TIBETAN MARK NGAS BZUNG NYI ZLA\n\t\t0x0F37 == code || // Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS\n\t\t0x0F39 == code || // Mn TIBETAN MARK TSA -PHRU\n\t\t(0x0F71 <= code && code <= 0x0F7E) || // Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n\t\t(0x0F80 <= code && code <= 0x0F84) || // Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n\t\t(0x0F86 <= code && code <= 0x0F87) || // Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n\t\t(0x0F8D <= code && code <= 0x0F97) || // Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n\t\t(0x0F99 <= code && code <= 0x0FBC) || // Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n\t\t0x0FC6 == code || // Mn TIBETAN SYMBOL PADMA GDAN\n\t\t(0x102D <= code && code <= 0x1030) || // Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n\t\t(0x1032 <= code && code <= 0x1037) || // Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n\t\t(0x1039 <= code && code <= 0x103A) || // Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n\t\t(0x103D <= code && code <= 0x103E) || // Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n\t\t(0x1058 <= code && code <= 0x1059) || // Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n\t\t(0x105E <= code && code <= 0x1060) || // Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n\t\t(0x1071 <= code && code <= 0x1074) || // Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n\t\t0x1082 == code || // Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n\t\t(0x1085 <= code && code <= 0x1086) || // Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n\t\t0x108D == code || // Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n\t\t0x109D == code || // Mn MYANMAR VOWEL SIGN AITON AI\n\t\t(0x135D <= code && code <= 0x135F) || // Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n\t\t(0x1712 <= code && code <= 0x1714) || // Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n\t\t(0x1732 <= code && code <= 0x1734) || // Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD\n\t\t(0x1752 <= code && code <= 0x1753) || // Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n\t\t(0x1772 <= code && code <= 0x1773) || // Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n\t\t(0x17B4 <= code && code <= 0x17B5) || // Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n\t\t(0x17B7 <= code && code <= 0x17BD) || // Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n\t\t0x17C6 == code || // Mn KHMER SIGN NIKAHIT\n\t\t(0x17C9 <= code && code <= 0x17D3) || // Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n\t\t0x17DD == code || // Mn KHMER SIGN ATTHACAN\n\t\t(0x180B <= code && code <= 0x180D) || // Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n\t\t(0x1885 <= code && code <= 0x1886) || // Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n\t\t0x18A9 == code || // Mn MONGOLIAN LETTER ALI GALI DAGALGA\n\t\t(0x1920 <= code && code <= 0x1922) || // Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n\t\t(0x1927 <= code && code <= 0x1928) || // Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n\t\t0x1932 == code || // Mn LIMBU SMALL LETTER ANUSVARA\n\t\t(0x1939 <= code && code <= 0x193B) || // Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n\t\t(0x1A17 <= code && code <= 0x1A18) || // Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n\t\t0x1A1B == code || // Mn BUGINESE VOWEL SIGN AE\n\t\t0x1A56 == code || // Mn TAI THAM CONSONANT SIGN MEDIAL LA\n\t\t(0x1A58 <= code && code <= 0x1A5E) || // Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n\t\t0x1A60 == code || // Mn TAI THAM SIGN SAKOT\n\t\t0x1A62 == code || // Mn TAI THAM VOWEL SIGN MAI SAT\n\t\t(0x1A65 <= code && code <= 0x1A6C) || // Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n\t\t(0x1A73 <= code && code <= 0x1A7C) || // Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n\t\t0x1A7F == code || // Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT\n\t\t(0x1AB0 <= code && code <= 0x1ABD) || // Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n\t\t0x1ABE == code || // Me COMBINING PARENTHESES OVERLAY\n\t\t(0x1B00 <= code && code <= 0x1B03) || // Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n\t\t0x1B34 == code || // Mn BALINESE SIGN REREKAN\n\t\t(0x1B36 <= code && code <= 0x1B3A) || // Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n\t\t0x1B3C == code || // Mn BALINESE VOWEL SIGN LA LENGA\n\t\t0x1B42 == code || // Mn BALINESE VOWEL SIGN PEPET\n\t\t(0x1B6B <= code && code <= 0x1B73) || // Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n\t\t(0x1B80 <= code && code <= 0x1B81) || // Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n\t\t(0x1BA2 <= code && code <= 0x1BA5) || // Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n\t\t(0x1BA8 <= code && code <= 0x1BA9) || // Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n\t\t(0x1BAB <= code && code <= 0x1BAD) || // Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n\t\t0x1BE6 == code || // Mn BATAK SIGN TOMPI\n\t\t(0x1BE8 <= code && code <= 0x1BE9) || // Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n\t\t0x1BED == code || // Mn BATAK VOWEL SIGN KARO O\n\t\t(0x1BEF <= code && code <= 0x1BF1) || // Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n\t\t(0x1C2C <= code && code <= 0x1C33) || // Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n\t\t(0x1C36 <= code && code <= 0x1C37) || // Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n\t\t(0x1CD0 <= code && code <= 0x1CD2) || // Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n\t\t(0x1CD4 <= code && code <= 0x1CE0) || // Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n\t\t(0x1CE2 <= code && code <= 0x1CE8) || // Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n\t\t0x1CED == code || // Mn VEDIC SIGN TIRYAK\n\t\t0x1CF4 == code || // Mn VEDIC TONE CANDRA ABOVE\n\t\t(0x1CF8 <= code && code <= 0x1CF9) || // Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n\t\t(0x1DC0 <= code && code <= 0x1DF9) || // Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW\n\t\t(0x1DFB <= code && code <= 0x1DFF) || // Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n\t\t0x200C == code || // Cf ZERO WIDTH NON-JOINER\n\t\t(0x20D0 <= code && code <= 0x20DC) || // Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n\t\t(0x20DD <= code && code <= 0x20E0) || // Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n\t\t0x20E1 == code || // Mn COMBINING LEFT RIGHT ARROW ABOVE\n\t\t(0x20E2 <= code && code <= 0x20E4) || // Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n\t\t(0x20E5 <= code && code <= 0x20F0) || // Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n\t\t(0x2CEF <= code && code <= 0x2CF1) || // Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n\t\t0x2D7F == code || // Mn TIFINAGH CONSONANT JOINER\n\t\t(0x2DE0 <= code && code <= 0x2DFF) || // Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n\t\t(0x302A <= code && code <= 0x302D) || // Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n\t\t(0x302E <= code && code <= 0x302F) || // Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n\t\t(0x3099 <= code && code <= 0x309A) || // Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n\t\t0xA66F == code || // Mn COMBINING CYRILLIC VZMET\n\t\t(0xA670 <= code && code <= 0xA672) || // Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\n\t\t(0xA674 <= code && code <= 0xA67D) || // Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\n\t\t(0xA69E <= code && code <= 0xA69F) || // Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\n\t\t(0xA6F0 <= code && code <= 0xA6F1) || // Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\n\t\t0xA802 == code || // Mn SYLOTI NAGRI SIGN DVISVARA\n\t\t0xA806 == code || // Mn SYLOTI NAGRI SIGN HASANTA\n\t\t0xA80B == code || // Mn SYLOTI NAGRI SIGN ANUSVARA\n\t\t(0xA825 <= code && code <= 0xA826) || // Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\n\t\t(0xA8C4 <= code && code <= 0xA8C5) || // Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\n\t\t(0xA8E0 <= code && code <= 0xA8F1) || // Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\n\t\t(0xA926 <= code && code <= 0xA92D) || // Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\n\t\t(0xA947 <= code && code <= 0xA951) || // Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\n\t\t(0xA980 <= code && code <= 0xA982) || // Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\n\t\t0xA9B3 == code || // Mn JAVANESE SIGN CECAK TELU\n\t\t(0xA9B6 <= code && code <= 0xA9B9) || // Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\n\t\t0xA9BC == code || // Mn JAVANESE VOWEL SIGN PEPET\n\t\t0xA9E5 == code || // Mn MYANMAR SIGN SHAN SAW\n\t\t(0xAA29 <= code && code <= 0xAA2E) || // Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\n\t\t(0xAA31 <= code && code <= 0xAA32) || // Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\n\t\t(0xAA35 <= code && code <= 0xAA36) || // Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\n\t\t0xAA43 == code || // Mn CHAM CONSONANT SIGN FINAL NG\n\t\t0xAA4C == code || // Mn CHAM CONSONANT SIGN FINAL M\n\t\t0xAA7C == code || // Mn MYANMAR SIGN TAI LAING TONE-2\n\t\t0xAAB0 == code || // Mn TAI VIET MAI KANG\n\t\t(0xAAB2 <= code && code <= 0xAAB4) || // Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U\n\t\t(0xAAB7 <= code && code <= 0xAAB8) || // Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\n\t\t(0xAABE <= code && code <= 0xAABF) || // Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\n\t\t0xAAC1 == code || // Mn TAI VIET TONE MAI THO\n\t\t(0xAAEC <= code && code <= 0xAAED) || // Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\n\t\t0xAAF6 == code || // Mn MEETEI MAYEK VIRAMA\n\t\t0xABE5 == code || // Mn MEETEI MAYEK VOWEL SIGN ANAP\n\t\t0xABE8 == code || // Mn MEETEI MAYEK VOWEL SIGN UNAP\n\t\t0xABED == code || // Mn MEETEI MAYEK APUN IYEK\n\t\t0xFB1E == code || // Mn HEBREW POINT JUDEO-SPANISH VARIKA\n\t\t(0xFE00 <= code && code <= 0xFE0F) || // Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\n\t\t(0xFE20 <= code && code <= 0xFE2F) || // Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\n\t\t(0xFF9E <= code && code <= 0xFF9F) || // Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n\t\t0x101FD == code || // Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n\t\t0x102E0 == code || // Mn COPTIC EPACT THOUSANDS MARK\n\t\t(0x10376 <= code && code <= 0x1037A) || // Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n\t\t(0x10A01 <= code && code <= 0x10A03) || // Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n\t\t(0x10A05 <= code && code <= 0x10A06) || // Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n\t\t(0x10A0C <= code && code <= 0x10A0F) || // Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n\t\t(0x10A38 <= code && code <= 0x10A3A) || // Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n\t\t0x10A3F == code || // Mn KHAROSHTHI VIRAMA\n\t\t(0x10AE5 <= code && code <= 0x10AE6) || // Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n\t\t0x11001 == code || // Mn BRAHMI SIGN ANUSVARA\n\t\t(0x11038 <= code && code <= 0x11046) || // Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n\t\t(0x1107F <= code && code <= 0x11081) || // Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n\t\t(0x110B3 <= code && code <= 0x110B6) || // Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n\t\t(0x110B9 <= code && code <= 0x110BA) || // Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n\t\t(0x11100 <= code && code <= 0x11102) || // Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n\t\t(0x11127 <= code && code <= 0x1112B) || // Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n\t\t(0x1112D <= code && code <= 0x11134) || // Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n\t\t0x11173 == code || // Mn MAHAJANI SIGN NUKTA\n\t\t(0x11180 <= code && code <= 0x11181) || // Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n\t\t(0x111B6 <= code && code <= 0x111BE) || // Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n\t\t(0x111CA <= code && code <= 0x111CC) || // Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK\n\t\t(0x1122F <= code && code <= 0x11231) || // Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n\t\t0x11234 == code || // Mn KHOJKI SIGN ANUSVARA\n\t\t(0x11236 <= code && code <= 0x11237) || // Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n\t\t0x1123E == code || // Mn KHOJKI SIGN SUKUN\n\t\t0x112DF == code || // Mn KHUDAWADI SIGN ANUSVARA\n\t\t(0x112E3 <= code && code <= 0x112EA) || // Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n\t\t(0x11300 <= code && code <= 0x11301) || // Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n\t\t0x1133C == code || // Mn GRANTHA SIGN NUKTA\n\t\t0x1133E == code || // Mc GRANTHA VOWEL SIGN AA\n\t\t0x11340 == code || // Mn GRANTHA VOWEL SIGN II\n\t\t0x11357 == code || // Mc GRANTHA AU LENGTH MARK\n\t\t(0x11366 <= code && code <= 0x1136C) || // Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n\t\t(0x11370 <= code && code <= 0x11374) || // Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n\t\t(0x11438 <= code && code <= 0x1143F) || // Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n\t\t(0x11442 <= code && code <= 0x11444) || // Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n\t\t0x11446 == code || // Mn NEWA SIGN NUKTA\n\t\t0x114B0 == code || // Mc TIRHUTA VOWEL SIGN AA\n\t\t(0x114B3 <= code && code <= 0x114B8) || // Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n\t\t0x114BA == code || // Mn TIRHUTA VOWEL SIGN SHORT E\n\t\t0x114BD == code || // Mc TIRHUTA VOWEL SIGN SHORT O\n\t\t(0x114BF <= code && code <= 0x114C0) || // Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n\t\t(0x114C2 <= code && code <= 0x114C3) || // Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n\t\t0x115AF == code || // Mc SIDDHAM VOWEL SIGN AA\n\t\t(0x115B2 <= code && code <= 0x115B5) || // Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n\t\t(0x115BC <= code && code <= 0x115BD) || // Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n\t\t(0x115BF <= code && code <= 0x115C0) || // Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n\t\t(0x115DC <= code && code <= 0x115DD) || // Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n\t\t(0x11633 <= code && code <= 0x1163A) || // Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n\t\t0x1163D == code || // Mn MODI SIGN ANUSVARA\n\t\t(0x1163F <= code && code <= 0x11640) || // Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n\t\t0x116AB == code || // Mn TAKRI SIGN ANUSVARA\n\t\t0x116AD == code || // Mn TAKRI VOWEL SIGN AA\n\t\t(0x116B0 <= code && code <= 0x116B5) || // Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n\t\t0x116B7 == code || // Mn TAKRI SIGN NUKTA\n\t\t(0x1171D <= code && code <= 0x1171F) || // Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA\n\t\t(0x11722 <= code && code <= 0x11725) || // Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n\t\t(0x11727 <= code && code <= 0x1172B) || // Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n\t\t(0x11A01 <= code && code <= 0x11A06) || // Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O\n\t\t(0x11A09 <= code && code <= 0x11A0A) || // Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n\t\t(0x11A33 <= code && code <= 0x11A38) || // Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n\t\t(0x11A3B <= code && code <= 0x11A3E) || // Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n\t\t0x11A47 == code || // Mn ZANABAZAR SQUARE SUBJOINER\n\t\t(0x11A51 <= code && code <= 0x11A56) || // Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n\t\t(0x11A59 <= code && code <= 0x11A5B) || // Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n\t\t(0x11A8A <= code && code <= 0x11A96) || // Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n\t\t(0x11A98 <= code && code <= 0x11A99) || // Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n\t\t(0x11C30 <= code && code <= 0x11C36) || // Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n\t\t(0x11C38 <= code && code <= 0x11C3D) || // Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n\t\t0x11C3F == code || // Mn BHAIKSUKI SIGN VIRAMA\n\t\t(0x11C92 <= code && code <= 0x11CA7) || // Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n\t\t(0x11CAA <= code && code <= 0x11CB0) || // Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n\t\t(0x11CB2 <= code && code <= 0x11CB3) || // Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n\t\t(0x11CB5 <= code && code <= 0x11CB6) || // Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n\t\t(0x11D31 <= code && code <= 0x11D36) || // Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n\t\t0x11D3A == code || // Mn MASARAM GONDI VOWEL SIGN E\n\t\t(0x11D3C <= code && code <= 0x11D3D) || // Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n\t\t(0x11D3F <= code && code <= 0x11D45) || // Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n\t\t0x11D47 == code || // Mn MASARAM GONDI RA-KARA\n\t\t(0x16AF0 <= code && code <= 0x16AF4) || // Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n\t\t(0x16B30 <= code && code <= 0x16B36) || // Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n\t\t(0x16F8F <= code && code <= 0x16F92) || // Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW\n\t\t(0x1BC9D <= code && code <= 0x1BC9E) || // Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n\t\t0x1D165 == code || // Mc MUSICAL SYMBOL COMBINING STEM\n\t\t(0x1D167 <= code && code <= 0x1D169) || // Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n\t\t(0x1D16E <= code && code <= 0x1D172) || // Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5\n\t\t(0x1D17B <= code && code <= 0x1D182) || // Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n\t\t(0x1D185 <= code && code <= 0x1D18B) || // Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n\t\t(0x1D1AA <= code && code <= 0x1D1AD) || // Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n\t\t(0x1D242 <= code && code <= 0x1D244) || // Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n\t\t(0x1DA00 <= code && code <= 0x1DA36) || // Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n\t\t(0x1DA3B <= code && code <= 0x1DA6C) || // Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n\t\t0x1DA75 == code || // Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n\t\t0x1DA84 == code || // Mn SIGNWRITING LOCATION HEAD NECK\n\t\t(0x1DA9B <= code && code <= 0x1DA9F) || // Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n\t\t(0x1DAA1 <= code && code <= 0x1DAAF) || // Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n\t\t(0x1E000 <= code && code <= 0x1E006) || // Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n\t\t(0x1E008 <= code && code <= 0x1E018) || // Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n\t\t(0x1E01B <= code && code <= 0x1E021) || // Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n\t\t(0x1E023 <= code && code <= 0x1E024) || // Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n\t\t(0x1E026 <= code && code <= 0x1E02A) || // Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n\t\t(0x1E8D0 <= code && code <= 0x1E8D6) || // Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n\t\t(0x1E944 <= code && code <= 0x1E94A) || // Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n\t\t(0xE0020 <= code && code <= 0xE007F) || // Cf [96] TAG SPACE..CANCEL TAG\n\t\t(0xE0100 <= code && code <= 0xE01EF) // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\t\t){\n\t\t\treturn Extend;\n\t\t}\n\n\n\t\tif(\n\t\t(0x1F1E6 <= code && code <= 0x1F1FF) // So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\n\t\t){\n\t\t\treturn Regional_Indicator;\n\t\t}\n\n\t\tif(\n\t\t0x0903 == code || // Mc DEVANAGARI SIGN VISARGA\n\t\t0x093B == code || // Mc DEVANAGARI VOWEL SIGN OOE\n\t\t(0x093E <= code && code <= 0x0940) || // Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n\t\t(0x0949 <= code && code <= 0x094C) || // Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n\t\t(0x094E <= code && code <= 0x094F) || // Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n\t\t(0x0982 <= code && code <= 0x0983) || // Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n\t\t(0x09BF <= code && code <= 0x09C0) || // Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\n\t\t(0x09C7 <= code && code <= 0x09C8) || // Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n\t\t(0x09CB <= code && code <= 0x09CC) || // Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n\t\t0x0A03 == code || // Mc GURMUKHI SIGN VISARGA\n\t\t(0x0A3E <= code && code <= 0x0A40) || // Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n\t\t0x0A83 == code || // Mc GUJARATI SIGN VISARGA\n\t\t(0x0ABE <= code && code <= 0x0AC0) || // Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n\t\t0x0AC9 == code || // Mc GUJARATI VOWEL SIGN CANDRA O\n\t\t(0x0ACB <= code && code <= 0x0ACC) || // Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n\t\t(0x0B02 <= code && code <= 0x0B03) || // Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n\t\t0x0B40 == code || // Mc ORIYA VOWEL SIGN II\n\t\t(0x0B47 <= code && code <= 0x0B48) || // Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n\t\t(0x0B4B <= code && code <= 0x0B4C) || // Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n\t\t0x0BBF == code || // Mc TAMIL VOWEL SIGN I\n\t\t(0x0BC1 <= code && code <= 0x0BC2) || // Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n\t\t(0x0BC6 <= code && code <= 0x0BC8) || // Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n\t\t(0x0BCA <= code && code <= 0x0BCC) || // Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n\t\t(0x0C01 <= code && code <= 0x0C03) || // Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n\t\t(0x0C41 <= code && code <= 0x0C44) || // Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n\t\t(0x0C82 <= code && code <= 0x0C83) || // Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n\t\t0x0CBE == code || // Mc KANNADA VOWEL SIGN AA\n\t\t(0x0CC0 <= code && code <= 0x0CC1) || // Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U\n\t\t(0x0CC3 <= code && code <= 0x0CC4) || // Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\n\t\t(0x0CC7 <= code && code <= 0x0CC8) || // Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n\t\t(0x0CCA <= code && code <= 0x0CCB) || // Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n\t\t(0x0D02 <= code && code <= 0x0D03) || // Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n\t\t(0x0D3F <= code && code <= 0x0D40) || // Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\n\t\t(0x0D46 <= code && code <= 0x0D48) || // Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n\t\t(0x0D4A <= code && code <= 0x0D4C) || // Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n\t\t(0x0D82 <= code && code <= 0x0D83) || // Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n\t\t(0x0DD0 <= code && code <= 0x0DD1) || // Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n\t\t(0x0DD8 <= code && code <= 0x0DDE) || // Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\n\t\t(0x0DF2 <= code && code <= 0x0DF3) || // Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n\t\t0x0E33 == code || // Lo THAI CHARACTER SARA AM\n\t\t0x0EB3 == code || // Lo LAO VOWEL SIGN AM\n\t\t(0x0F3E <= code && code <= 0x0F3F) || // Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n\t\t0x0F7F == code || // Mc TIBETAN SIGN RNAM BCAD\n\t\t0x1031 == code || // Mc MYANMAR VOWEL SIGN E\n\t\t(0x103B <= code && code <= 0x103C) || // Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n\t\t(0x1056 <= code && code <= 0x1057) || // Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n\t\t0x1084 == code || // Mc MYANMAR VOWEL SIGN SHAN E\n\t\t0x17B6 == code || // Mc KHMER VOWEL SIGN AA\n\t\t(0x17BE <= code && code <= 0x17C5) || // Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n\t\t(0x17C7 <= code && code <= 0x17C8) || // Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n\t\t(0x1923 <= code && code <= 0x1926) || // Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n\t\t(0x1929 <= code && code <= 0x192B) || // Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n\t\t(0x1930 <= code && code <= 0x1931) || // Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n\t\t(0x1933 <= code && code <= 0x1938) || // Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n\t\t(0x1A19 <= code && code <= 0x1A1A) || // Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n\t\t0x1A55 == code || // Mc TAI THAM CONSONANT SIGN MEDIAL RA\n\t\t0x1A57 == code || // Mc TAI THAM CONSONANT SIGN LA TANG LAI\n\t\t(0x1A6D <= code && code <= 0x1A72) || // Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n\t\t0x1B04 == code || // Mc BALINESE SIGN BISAH\n\t\t0x1B35 == code || // Mc BALINESE VOWEL SIGN TEDUNG\n\t\t0x1B3B == code || // Mc BALINESE VOWEL SIGN RA REPA TEDUNG\n\t\t(0x1B3D <= code && code <= 0x1B41) || // Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n\t\t(0x1B43 <= code && code <= 0x1B44) || // Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n\t\t0x1B82 == code || // Mc SUNDANESE SIGN PANGWISAD\n\t\t0x1BA1 == code || // Mc SUNDANESE CONSONANT SIGN PAMINGKAL\n\t\t(0x1BA6 <= code && code <= 0x1BA7) || // Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n\t\t0x1BAA == code || // Mc SUNDANESE SIGN PAMAAEH\n\t\t0x1BE7 == code || // Mc BATAK VOWEL SIGN E\n\t\t(0x1BEA <= code && code <= 0x1BEC) || // Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n\t\t0x1BEE == code || // Mc BATAK VOWEL SIGN U\n\t\t(0x1BF2 <= code && code <= 0x1BF3) || // Mc [2] BATAK PANGOLAT..BATAK PANONGONAN\n\t\t(0x1C24 <= code && code <= 0x1C2B) || // Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n\t\t(0x1C34 <= code && code <= 0x1C35) || // Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n\t\t0x1CE1 == code || // Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n\t\t(0x1CF2 <= code && code <= 0x1CF3) || // Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA\n\t\t0x1CF7 == code || // Mc VEDIC SIGN ATIKRAMA\n\t\t(0xA823 <= code && code <= 0xA824) || // Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\n\t\t0xA827 == code || // Mc SYLOTI NAGRI VOWEL SIGN OO\n\t\t(0xA880 <= code && code <= 0xA881) || // Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\n\t\t(0xA8B4 <= code && code <= 0xA8C3) || // Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\n\t\t(0xA952 <= code && code <= 0xA953) || // Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\n\t\t0xA983 == code || // Mc JAVANESE SIGN WIGNYAN\n\t\t(0xA9B4 <= code && code <= 0xA9B5) || // Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\n\t\t(0xA9BA <= code && code <= 0xA9BB) || // Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\n\t\t(0xA9BD <= code && code <= 0xA9C0) || // Mc [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON\n\t\t(0xAA2F <= code && code <= 0xAA30) || // Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\n\t\t(0xAA33 <= code && code <= 0xAA34) || // Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\n\t\t0xAA4D == code || // Mc CHAM CONSONANT SIGN FINAL H\n\t\t0xAAEB == code || // Mc MEETEI MAYEK VOWEL SIGN II\n\t\t(0xAAEE <= code && code <= 0xAAEF) || // Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\n\t\t0xAAF5 == code || // Mc MEETEI MAYEK VOWEL SIGN VISARGA\n\t\t(0xABE3 <= code && code <= 0xABE4) || // Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\n\t\t(0xABE6 <= code && code <= 0xABE7) || // Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\n\t\t(0xABE9 <= code && code <= 0xABEA) || // Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\n\t\t0xABEC == code || // Mc MEETEI MAYEK LUM IYEK\n\t\t0x11000 == code || // Mc BRAHMI SIGN CANDRABINDU\n\t\t0x11002 == code || // Mc BRAHMI SIGN VISARGA\n\t\t0x11082 == code || // Mc KAITHI SIGN VISARGA\n\t\t(0x110B0 <= code && code <= 0x110B2) || // Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n\t\t(0x110B7 <= code && code <= 0x110B8) || // Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n\t\t0x1112C == code || // Mc CHAKMA VOWEL SIGN E\n\t\t0x11182 == code || // Mc SHARADA SIGN VISARGA\n\t\t(0x111B3 <= code && code <= 0x111B5) || // Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n\t\t(0x111BF <= code && code <= 0x111C0) || // Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n\t\t(0x1122C <= code && code <= 0x1122E) || // Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n\t\t(0x11232 <= code && code <= 0x11233) || // Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n\t\t0x11235 == code || // Mc KHOJKI SIGN VIRAMA\n\t\t(0x112E0 <= code && code <= 0x112E2) || // Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n\t\t(0x11302 <= code && code <= 0x11303) || // Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n\t\t0x1133F == code || // Mc GRANTHA VOWEL SIGN I\n\t\t(0x11341 <= code && code <= 0x11344) || // Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n\t\t(0x11347 <= code && code <= 0x11348) || // Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n\t\t(0x1134B <= code && code <= 0x1134D) || // Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n\t\t(0x11362 <= code && code <= 0x11363) || // Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n\t\t(0x11435 <= code && code <= 0x11437) || // Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n\t\t(0x11440 <= code && code <= 0x11441) || // Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n\t\t0x11445 == code || // Mc NEWA SIGN VISARGA\n\t\t(0x114B1 <= code && code <= 0x114B2) || // Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\n\t\t0x114B9 == code || // Mc TIRHUTA VOWEL SIGN E\n\t\t(0x114BB <= code && code <= 0x114BC) || // Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\n\t\t0x114BE == code || // Mc TIRHUTA VOWEL SIGN AU\n\t\t0x114C1 == code || // Mc TIRHUTA SIGN VISARGA\n\t\t(0x115B0 <= code && code <= 0x115B1) || // Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\n\t\t(0x115B8 <= code && code <= 0x115BB) || // Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n\t\t0x115BE == code || // Mc SIDDHAM SIGN VISARGA\n\t\t(0x11630 <= code && code <= 0x11632) || // Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n\t\t(0x1163B <= code && code <= 0x1163C) || // Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n\t\t0x1163E == code || // Mc MODI SIGN VISARGA\n\t\t0x116AC == code || // Mc TAKRI SIGN VISARGA\n\t\t(0x116AE <= code && code <= 0x116AF) || // Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n\t\t0x116B6 == code || // Mc TAKRI SIGN VIRAMA\n\t\t(0x11720 <= code && code <= 0x11721) || // Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n\t\t0x11726 == code || // Mc AHOM VOWEL SIGN E\n\t\t(0x11A07 <= code && code <= 0x11A08) || // Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU\n\t\t0x11A39 == code || // Mc ZANABAZAR SQUARE SIGN VISARGA\n\t\t(0x11A57 <= code && code <= 0x11A58) || // Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n\t\t0x11A97 == code || // Mc SOYOMBO SIGN VISARGA\n\t\t0x11C2F == code || // Mc BHAIKSUKI VOWEL SIGN AA\n\t\t0x11C3E == code || // Mc BHAIKSUKI SIGN VISARGA\n\t\t0x11CA9 == code || // Mc MARCHEN SUBJOINED LETTER YA\n\t\t0x11CB1 == code || // Mc MARCHEN VOWEL SIGN I\n\t\t0x11CB4 == code || // Mc MARCHEN VOWEL SIGN O\n\t\t(0x16F51 <= code && code <= 0x16F7E) || // Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG\n\t\t0x1D166 == code || // Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n\t\t0x1D16D == code // Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT\n\t\t){\n\t\t\treturn SpacingMark;\n\t\t}\n\n\n\t\tif(\n\t\t(0x1100 <= code && code <= 0x115F) || // Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER\n\t\t(0xA960 <= code && code <= 0xA97C) // Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\n\t\t){\n\t\t\treturn L;\n\t\t}\n\n\t\tif(\n\t\t(0x1160 <= code && code <= 0x11A7) || // Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE\n\t\t(0xD7B0 <= code && code <= 0xD7C6) // Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\n\t\t){\n\t\t\treturn V;\n\t\t}\n\n\n\t\tif(\n\t\t(0x11A8 <= code && code <= 0x11FF) || // Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\n\t\t(0xD7CB <= code && code <= 0xD7FB) // Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\n\t\t){\n\t\t\treturn T;\n\t\t}\n\n\t\tif(\n\t\t0xAC00 == code || // Lo HANGUL SYLLABLE GA\n\t\t0xAC1C == code || // Lo HANGUL SYLLABLE GAE\n\t\t0xAC38 == code || // Lo HANGUL SYLLABLE GYA\n\t\t0xAC54 == code || // Lo HANGUL SYLLABLE GYAE\n\t\t0xAC70 == code || // Lo HANGUL SYLLABLE GEO\n\t\t0xAC8C == code || // Lo HANGUL SYLLABLE GE\n\t\t0xACA8 == code || // Lo HANGUL SYLLABLE GYEO\n\t\t0xACC4 == code || // Lo HANGUL SYLLABLE GYE\n\t\t0xACE0 == code || // Lo HANGUL SYLLABLE GO\n\t\t0xACFC == code || // Lo HANGUL SYLLABLE GWA\n\t\t0xAD18 == code || // Lo HANGUL SYLLABLE GWAE\n\t\t0xAD34 == code || // Lo HANGUL SYLLABLE GOE\n\t\t0xAD50 == code || // Lo HANGUL SYLLABLE GYO\n\t\t0xAD6C == code || // Lo HANGUL SYLLABLE GU\n\t\t0xAD88 == code || // Lo HANGUL SYLLABLE GWEO\n\t\t0xADA4 == code || // Lo HANGUL SYLLABLE GWE\n\t\t0xADC0 == code || // Lo HANGUL SYLLABLE GWI\n\t\t0xADDC == code || // Lo HANGUL SYLLABLE GYU\n\t\t0xADF8 == code || // Lo HANGUL SYLLABLE GEU\n\t\t0xAE14 == code || // Lo HANGUL SYLLABLE GYI\n\t\t0xAE30 == code || // Lo HANGUL SYLLABLE GI\n\t\t0xAE4C == code || // Lo HANGUL SYLLABLE GGA\n\t\t0xAE68 == code || // Lo HANGUL SYLLABLE GGAE\n\t\t0xAE84 == code || // Lo HANGUL SYLLABLE GGYA\n\t\t0xAEA0 == code || // Lo HANGUL SYLLABLE GGYAE\n\t\t0xAEBC == code || // Lo HANGUL SYLLABLE GGEO\n\t\t0xAED8 == code || // Lo HANGUL SYLLABLE GGE\n\t\t0xAEF4 == code || // Lo HANGUL SYLLABLE GGYEO\n\t\t0xAF10 == code || // Lo HANGUL SYLLABLE GGYE\n\t\t0xAF2C == code || // Lo HANGUL SYLLABLE GGO\n\t\t0xAF48 == code || // Lo HANGUL SYLLABLE GGWA\n\t\t0xAF64 == code || // Lo HANGUL SYLLABLE GGWAE\n\t\t0xAF80 == code || // Lo HANGUL SYLLABLE GGOE\n\t\t0xAF9C == code || // Lo HANGUL SYLLABLE GGYO\n\t\t0xAFB8 == code || // Lo HANGUL SYLLABLE GGU\n\t\t0xAFD4 == code || // Lo HANGUL SYLLABLE GGWEO\n\t\t0xAFF0 == code || // Lo HANGUL SYLLABLE GGWE\n\t\t0xB00C == code || // Lo HANGUL SYLLABLE GGWI\n\t\t0xB028 == code || // Lo HANGUL SYLLABLE GGYU\n\t\t0xB044 == code || // Lo HANGUL SYLLABLE GGEU\n\t\t0xB060 == code || // Lo HANGUL SYLLABLE GGYI\n\t\t0xB07C == code || // Lo HANGUL SYLLABLE GGI\n\t\t0xB098 == code || // Lo HANGUL SYLLABLE NA\n\t\t0xB0B4 == code || // Lo HANGUL SYLLABLE NAE\n\t\t0xB0D0 == code || // Lo HANGUL SYLLABLE NYA\n\t\t0xB0EC == code || // Lo HANGUL SYLLABLE NYAE\n\t\t0xB108 == code || // Lo HANGUL SYLLABLE NEO\n\t\t0xB124 == code || // Lo HANGUL SYLLABLE NE\n\t\t0xB140 == code || // Lo HANGUL SYLLABLE NYEO\n\t\t0xB15C == code || // Lo HANGUL SYLLABLE NYE\n\t\t0xB178 == code || // Lo HANGUL SYLLABLE NO\n\t\t0xB194 == code || // Lo HANGUL SYLLABLE NWA\n\t\t0xB1B0 == code || // Lo HANGUL SYLLABLE NWAE\n\t\t0xB1CC == code || // Lo HANGUL SYLLABLE NOE\n\t\t0xB1E8 == code || // Lo HANGUL SYLLABLE NYO\n\t\t0xB204 == code || // Lo HANGUL SYLLABLE NU\n\t\t0xB220 == code || // Lo HANGUL SYLLABLE NWEO\n\t\t0xB23C == code || // Lo HANGUL SYLLABLE NWE\n\t\t0xB258 == code || // Lo HANGUL SYLLABLE NWI\n\t\t0xB274 == code || // Lo HANGUL SYLLABLE NYU\n\t\t0xB290 == code || // Lo HANGUL SYLLABLE NEU\n\t\t0xB2AC == code || // Lo HANGUL SYLLABLE NYI\n\t\t0xB2C8 == code || // Lo HANGUL SYLLABLE NI\n\t\t0xB2E4 == code || // Lo HANGUL SYLLABLE DA\n\t\t0xB300 == code || // Lo HANGUL SYLLABLE DAE\n\t\t0xB31C == code || // Lo HANGUL SYLLABLE DYA\n\t\t0xB338 == code || // Lo HANGUL SYLLABLE DYAE\n\t\t0xB354 == code || // Lo HANGUL SYLLABLE DEO\n\t\t0xB370 == code || // Lo HANGUL SYLLABLE DE\n\t\t0xB38C == code || // Lo HANGUL SYLLABLE DYEO\n\t\t0xB3A8 == code || // Lo HANGUL SYLLABLE DYE\n\t\t0xB3C4 == code || // Lo HANGUL SYLLABLE DO\n\t\t0xB3E0 == code || // Lo HANGUL SYLLABLE DWA\n\t\t0xB3FC == code || // Lo HANGUL SYLLABLE DWAE\n\t\t0xB418 == code || // Lo HANGUL SYLLABLE DOE\n\t\t0xB434 == code || // Lo HANGUL SYLLABLE DYO\n\t\t0xB450 == code || // Lo HANGUL SYLLABLE DU\n\t\t0xB46C == code || // Lo HANGUL SYLLABLE DWEO\n\t\t0xB488 == code || // Lo HANGUL SYLLABLE DWE\n\t\t0xB4A4 == code || // Lo HANGUL SYLLABLE DWI\n\t\t0xB4C0 == code || // Lo HANGUL SYLLABLE DYU\n\t\t0xB4DC == code || // Lo HANGUL SYLLABLE DEU\n\t\t0xB4F8 == code || // Lo HANGUL SYLLABLE DYI\n\t\t0xB514 == code || // Lo HANGUL SYLLABLE DI\n\t\t0xB530 == code || // Lo HANGUL SYLLABLE DDA\n\t\t0xB54C == code || // Lo HANGUL SYLLABLE DDAE\n\t\t0xB568 == code || // Lo HANGUL SYLLABLE DDYA\n\t\t0xB584 == code || // Lo HANGUL SYLLABLE DDYAE\n\t\t0xB5A0 == code || // Lo HANGUL SYLLABLE DDEO\n\t\t0xB5BC == code || // Lo HANGUL SYLLABLE DDE\n\t\t0xB5D8 == code || // Lo HANGUL SYLLABLE DDYEO\n\t\t0xB5F4 == code || // Lo HANGUL SYLLABLE DDYE\n\t\t0xB610 == code || // Lo HANGUL SYLLABLE DDO\n\t\t0xB62C == code || // Lo HANGUL SYLLABLE DDWA\n\t\t0xB648 == code || // Lo HANGUL SYLLABLE DDWAE\n\t\t0xB664 == code || // Lo HANGUL SYLLABLE DDOE\n\t\t0xB680 == code || // Lo HANGUL SYLLABLE DDYO\n\t\t0xB69C == code || // Lo HANGUL SYLLABLE DDU\n\t\t0xB6B8 == code || // Lo HANGUL SYLLABLE DDWEO\n\t\t0xB6D4 == code || // Lo HANGUL SYLLABLE DDWE\n\t\t0xB6F0 == code || // Lo HANGUL SYLLABLE DDWI\n\t\t0xB70C == code || // Lo HANGUL SYLLABLE DDYU\n\t\t0xB728 == code || // Lo HANGUL SYLLABLE DDEU\n\t\t0xB744 == code || // Lo HANGUL SYLLABLE DDYI\n\t\t0xB760 == code || // Lo HANGUL SYLLABLE DDI\n\t\t0xB77C == code || // Lo HANGUL SYLLABLE RA\n\t\t0xB798 == code || // Lo HANGUL SYLLABLE RAE\n\t\t0xB7B4 == code || // Lo HANGUL SYLLABLE RYA\n\t\t0xB7D0 == code || // Lo HANGUL SYLLABLE RYAE\n\t\t0xB7EC == code || // Lo HANGUL SYLLABLE REO\n\t\t0xB808 == code || // Lo HANGUL SYLLABLE RE\n\t\t0xB824 == code || // Lo HANGUL SYLLABLE RYEO\n\t\t0xB840 == code || // Lo HANGUL SYLLABLE RYE\n\t\t0xB85C == code || // Lo HANGUL SYLLABLE RO\n\t\t0xB878 == code || // Lo HANGUL SYLLABLE RWA\n\t\t0xB894 == code || // Lo HANGUL SYLLABLE RWAE\n\t\t0xB8B0 == code || // Lo HANGUL SYLLABLE ROE\n\t\t0xB8CC == code || // Lo HANGUL SYLLABLE RYO\n\t\t0xB8E8 == code || // Lo HANGUL SYLLABLE RU\n\t\t0xB904 == code || // Lo HANGUL SYLLABLE RWEO\n\t\t0xB920 == code || // Lo HANGUL SYLLABLE RWE\n\t\t0xB93C == code || // Lo HANGUL SYLLABLE RWI\n\t\t0xB958 == code || // Lo HANGUL SYLLABLE RYU\n\t\t0xB974 == code || // Lo HANGUL SYLLABLE REU\n\t\t0xB990 == code || // Lo HANGUL SYLLABLE RYI\n\t\t0xB9AC == code || // Lo HANGUL SYLLABLE RI\n\t\t0xB9C8 == code || // Lo HANGUL SYLLABLE MA\n\t\t0xB9E4 == code || // Lo HANGUL SYLLABLE MAE\n\t\t0xBA00 == code || // Lo HANGUL SYLLABLE MYA\n\t\t0xBA1C == code || // Lo HANGUL SYLLABLE MYAE\n\t\t0xBA38 == code || // Lo HANGUL SYLLABLE MEO\n\t\t0xBA54 == code || // Lo HANGUL SYLLABLE ME\n\t\t0xBA70 == code || // Lo HANGUL SYLLABLE MYEO\n\t\t0xBA8C == code || // Lo HANGUL SYLLABLE MYE\n\t\t0xBAA8 == code || // Lo HANGUL SYLLABLE MO\n\t\t0xBAC4 == code || // Lo HANGUL SYLLABLE MWA\n\t\t0xBAE0 == code || // Lo HANGUL SYLLABLE MWAE\n\t\t0xBAFC == code || // Lo HANGUL SYLLABLE MOE\n\t\t0xBB18 == code || // Lo HANGUL SYLLABLE MYO\n\t\t0xBB34 == code || // Lo HANGUL SYLLABLE MU\n\t\t0xBB50 == code || // Lo HANGUL SYLLABLE MWEO\n\t\t0xBB6C == code || // Lo HANGUL SYLLABLE MWE\n\t\t0xBB88 == code || // Lo HANGUL SYLLABLE MWI\n\t\t0xBBA4 == code || // Lo HANGUL SYLLABLE MYU\n\t\t0xBBC0 == code || // Lo HANGUL SYLLABLE MEU\n\t\t0xBBDC == code || // Lo HANGUL SYLLABLE MYI\n\t\t0xBBF8 == code || // Lo HANGUL SYLLABLE MI\n\t\t0xBC14 == code || // Lo HANGUL SYLLABLE BA\n\t\t0xBC30 == code || // Lo HANGUL SYLLABLE BAE\n\t\t0xBC4C == code || // Lo HANGUL SYLLABLE BYA\n\t\t0xBC68 == code || // Lo HANGUL SYLLABLE BYAE\n\t\t0xBC84 == code || // Lo HANGUL SYLLABLE BEO\n\t\t0xBCA0 == code || // Lo HANGUL SYLLABLE BE\n\t\t0xBCBC == code || // Lo HANGUL SYLLABLE BYEO\n\t\t0xBCD8 == code || // Lo HANGUL SYLLABLE BYE\n\t\t0xBCF4 == code || // Lo HANGUL SYLLABLE BO\n\t\t0xBD10 == code || // Lo HANGUL SYLLABLE BWA\n\t\t0xBD2C == code || // Lo HANGUL SYLLABLE BWAE\n\t\t0xBD48 == code || // Lo HANGUL SYLLABLE BOE\n\t\t0xBD64 == code || // Lo HANGUL SYLLABLE BYO\n\t\t0xBD80 == code || // Lo HANGUL SYLLABLE BU\n\t\t0xBD9C == code || // Lo HANGUL SYLLABLE BWEO\n\t\t0xBDB8 == code || // Lo HANGUL SYLLABLE BWE\n\t\t0xBDD4 == code || // Lo HANGUL SYLLABLE BWI\n\t\t0xBDF0 == code || // Lo HANGUL SYLLABLE BYU\n\t\t0xBE0C == code || // Lo HANGUL SYLLABLE BEU\n\t\t0xBE28 == code || // Lo HANGUL SYLLABLE BYI\n\t\t0xBE44 == code || // Lo HANGUL SYLLABLE BI\n\t\t0xBE60 == code || // Lo HANGUL SYLLABLE BBA\n\t\t0xBE7C == code || // Lo HANGUL SYLLABLE BBAE\n\t\t0xBE98 == code || // Lo HANGUL SYLLABLE BBYA\n\t\t0xBEB4 == code || // Lo HANGUL SYLLABLE BBYAE\n\t\t0xBED0 == code || // Lo HANGUL SYLLABLE BBEO\n\t\t0xBEEC == code || // Lo HANGUL SYLLABLE BBE\n\t\t0xBF08 == code || // Lo HANGUL SYLLABLE BBYEO\n\t\t0xBF24 == code || // Lo HANGUL SYLLABLE BBYE\n\t\t0xBF40 == code || // Lo HANGUL SYLLABLE BBO\n\t\t0xBF5C == code || // Lo HANGUL SYLLABLE BBWA\n\t\t0xBF78 == code || // Lo HANGUL SYLLABLE BBWAE\n\t\t0xBF94 == code || // Lo HANGUL SYLLABLE BBOE\n\t\t0xBFB0 == code || // Lo HANGUL SYLLABLE BBYO\n\t\t0xBFCC == code || // Lo HANGUL SYLLABLE BBU\n\t\t0xBFE8 == code || // Lo HANGUL SYLLABLE BBWEO\n\t\t0xC004 == code || // Lo HANGUL SYLLABLE BBWE\n\t\t0xC020 == code || // Lo HANGUL SYLLABLE BBWI\n\t\t0xC03C == code || // Lo HANGUL SYLLABLE BBYU\n\t\t0xC058 == code || // Lo HANGUL SYLLABLE BBEU\n\t\t0xC074 == code || // Lo HANGUL SYLLABLE BBYI\n\t\t0xC090 == code || // Lo HANGUL SYLLABLE BBI\n\t\t0xC0AC == code || // Lo HANGUL SYLLABLE SA\n\t\t0xC0C8 == code || // Lo HANGUL SYLLABLE SAE\n\t\t0xC0E4 == code || // Lo HANGUL SYLLABLE SYA\n\t\t0xC100 == code || // Lo HANGUL SYLLABLE SYAE\n\t\t0xC11C == code || // Lo HANGUL SYLLABLE SEO\n\t\t0xC138 == code || // Lo HANGUL SYLLABLE SE\n\t\t0xC154 == code || // Lo HANGUL SYLLABLE SYEO\n\t\t0xC170 == code || // Lo HANGUL SYLLABLE SYE\n\t\t0xC18C == code || // Lo HANGUL SYLLABLE SO\n\t\t0xC1A8 == code || // Lo HANGUL SYLLABLE SWA\n\t\t0xC1C4 == code || // Lo HANGUL SYLLABLE SWAE\n\t\t0xC1E0 == code || // Lo HANGUL SYLLABLE SOE\n\t\t0xC1FC == code || // Lo HANGUL SYLLABLE SYO\n\t\t0xC218 == code || // Lo HANGUL SYLLABLE SU\n\t\t0xC234 == code || // Lo HANGUL SYLLABLE SWEO\n\t\t0xC250 == code || // Lo HANGUL SYLLABLE SWE\n\t\t0xC26C == code || // Lo HANGUL SYLLABLE SWI\n\t\t0xC288 == code || // Lo HANGUL SYLLABLE SYU\n\t\t0xC2A4 == code || // Lo HANGUL SYLLABLE SEU\n\t\t0xC2C0 == code || // Lo HANGUL SYLLABLE SYI\n\t\t0xC2DC == code || // Lo HANGUL SYLLABLE SI\n\t\t0xC2F8 == code || // Lo HANGUL SYLLABLE SSA\n\t\t0xC314 == code || // Lo HANGUL SYLLABLE SSAE\n\t\t0xC330 == code || // Lo HANGUL SYLLABLE SSYA\n\t\t0xC34C == code || // Lo HANGUL SYLLABLE SSYAE\n\t\t0xC368 == code || // Lo HANGUL SYLLABLE SSEO\n\t\t0xC384 == code || // Lo HANGUL SYLLABLE SSE\n\t\t0xC3A0 == code || // Lo HANGUL SYLLABLE SSYEO\n\t\t0xC3BC == code || // Lo HANGUL SYLLABLE SSYE\n\t\t0xC3D8 == code || // Lo HANGUL SYLLABLE SSO\n\t\t0xC3F4 == code || // Lo HANGUL SYLLABLE SSWA\n\t\t0xC410 == code || // Lo HANGUL SYLLABLE SSWAE\n\t\t0xC42C == code || // Lo HANGUL SYLLABLE SSOE\n\t\t0xC448 == code || // Lo HANGUL SYLLABLE SSYO\n\t\t0xC464 == code || // Lo HANGUL SYLLABLE SSU\n\t\t0xC480 == code || // Lo HANGUL SYLLABLE SSWEO\n\t\t0xC49C == code || // Lo HANGUL SYLLABLE SSWE\n\t\t0xC4B8 == code || // Lo HANGUL SYLLABLE SSWI\n\t\t0xC4D4 == code || // Lo HANGUL SYLLABLE SSYU\n\t\t0xC4F0 == code || // Lo HANGUL SYLLABLE SSEU\n\t\t0xC50C == code || // Lo HANGUL SYLLABLE SSYI\n\t\t0xC528 == code || // Lo HANGUL SYLLABLE SSI\n\t\t0xC544 == code || // Lo HANGUL SYLLABLE A\n\t\t0xC560 == code || // Lo HANGUL SYLLABLE AE\n\t\t0xC57C == code || // Lo HANGUL SYLLABLE YA\n\t\t0xC598 == code || // Lo HANGUL SYLLABLE YAE\n\t\t0xC5B4 == code || // Lo HANGUL SYLLABLE EO\n\t\t0xC5D0 == code || // Lo HANGUL SYLLABLE E\n\t\t0xC5EC == code || // Lo HANGUL SYLLABLE YEO\n\t\t0xC608 == code || // Lo HANGUL SYLLABLE YE\n\t\t0xC624 == code || // Lo HANGUL SYLLABLE O\n\t\t0xC640 == code || // Lo HANGUL SYLLABLE WA\n\t\t0xC65C == code || // Lo HANGUL SYLLABLE WAE\n\t\t0xC678 == code || // Lo HANGUL SYLLABLE OE\n\t\t0xC694 == code || // Lo HANGUL SYLLABLE YO\n\t\t0xC6B0 == code || // Lo HANGUL SYLLABLE U\n\t\t0xC6CC == code || // Lo HANGUL SYLLABLE WEO\n\t\t0xC6E8 == code || // Lo HANGUL SYLLABLE WE\n\t\t0xC704 == code || // Lo HANGUL SYLLABLE WI\n\t\t0xC720 == code || // Lo HANGUL SYLLABLE YU\n\t\t0xC73C == code || // Lo HANGUL SYLLABLE EU\n\t\t0xC758 == code || // Lo HANGUL SYLLABLE YI\n\t\t0xC774 == code || // Lo HANGUL SYLLABLE I\n\t\t0xC790 == code || // Lo HANGUL SYLLABLE JA\n\t\t0xC7AC == code || // Lo HANGUL SYLLABLE JAE\n\t\t0xC7C8 == code || // Lo HANGUL SYLLABLE JYA\n\t\t0xC7E4 == code || // Lo HANGUL SYLLABLE JYAE\n\t\t0xC800 == code || // Lo HANGUL SYLLABLE JEO\n\t\t0xC81C == code || // Lo HANGUL SYLLABLE JE\n\t\t0xC838 == code || // Lo HANGUL SYLLABLE JYEO\n\t\t0xC854 == code || // Lo HANGUL SYLLABLE JYE\n\t\t0xC870 == code || // Lo HANGUL SYLLABLE JO\n\t\t0xC88C == code || // Lo HANGUL SYLLABLE JWA\n\t\t0xC8A8 == code || // Lo HANGUL SYLLABLE JWAE\n\t\t0xC8C4 == code || // Lo HANGUL SYLLABLE JOE\n\t\t0xC8E0 == code || // Lo HANGUL SYLLABLE JYO\n\t\t0xC8FC == code || // Lo HANGUL SYLLABLE JU\n\t\t0xC918 == code || // Lo HANGUL SYLLABLE JWEO\n\t\t0xC934 == code || // Lo HANGUL SYLLABLE JWE\n\t\t0xC950 == code || // Lo HANGUL SYLLABLE JWI\n\t\t0xC96C == code || // Lo HANGUL SYLLABLE JYU\n\t\t0xC988 == code || // Lo HANGUL SYLLABLE JEU\n\t\t0xC9A4 == code || // Lo HANGUL SYLLABLE JYI\n\t\t0xC9C0 == code || // Lo HANGUL SYLLABLE JI\n\t\t0xC9DC == code || // Lo HANGUL SYLLABLE JJA\n\t\t0xC9F8 == code || // Lo HANGUL SYLLABLE JJAE\n\t\t0xCA14 == code || // Lo HANGUL SYLLABLE JJYA\n\t\t0xCA30 == code || // Lo HANGUL SYLLABLE JJYAE\n\t\t0xCA4C == code || // Lo HANGUL SYLLABLE JJEO\n\t\t0xCA68 == code || // Lo HANGUL SYLLABLE JJE\n\t\t0xCA84 == code || // Lo HANGUL SYLLABLE JJYEO\n\t\t0xCAA0 == code || // Lo HANGUL SYLLABLE JJYE\n\t\t0xCABC == code || // Lo HANGUL SYLLABLE JJO\n\t\t0xCAD8 == code || // Lo HANGUL SYLLABLE JJWA\n\t\t0xCAF4 == code || // Lo HANGUL SYLLABLE JJWAE\n\t\t0xCB10 == code || // Lo HANGUL SYLLABLE JJOE\n\t\t0xCB2C == code || // Lo HANGUL SYLLABLE JJYO\n\t\t0xCB48 == code || // Lo HANGUL SYLLABLE JJU\n\t\t0xCB64 == code || // Lo HANGUL SYLLABLE JJWEO\n\t\t0xCB80 == code || // Lo HANGUL SYLLABLE JJWE\n\t\t0xCB9C == code || // Lo HANGUL SYLLABLE JJWI\n\t\t0xCBB8 == code || // Lo HANGUL SYLLABLE JJYU\n\t\t0xCBD4 == code || // Lo HANGUL SYLLABLE JJEU\n\t\t0xCBF0 == code || // Lo HANGUL SYLLABLE JJYI\n\t\t0xCC0C == code || // Lo HANGUL SYLLABLE JJI\n\t\t0xCC28 == code || // Lo HANGUL SYLLABLE CA\n\t\t0xCC44 == code || // Lo HANGUL SYLLABLE CAE\n\t\t0xCC60 == code || // Lo HANGUL SYLLABLE CYA\n\t\t0xCC7C == code || // Lo HANGUL SYLLABLE CYAE\n\t\t0xCC98 == code || // Lo HANGUL SYLLABLE CEO\n\t\t0xCCB4 == code || // Lo HANGUL SYLLABLE CE\n\t\t0xCCD0 == code || // Lo HANGUL SYLLABLE CYEO\n\t\t0xCCEC == code || // Lo HANGUL SYLLABLE CYE\n\t\t0xCD08 == code || // Lo HANGUL SYLLABLE CO\n\t\t0xCD24 == code || // Lo HANGUL SYLLABLE CWA\n\t\t0xCD40 == code || // Lo HANGUL SYLLABLE CWAE\n\t\t0xCD5C == code || // Lo HANGUL SYLLABLE COE\n\t\t0xCD78 == code || // Lo HANGUL SYLLABLE CYO\n\t\t0xCD94 == code || // Lo HANGUL SYLLABLE CU\n\t\t0xCDB0 == code || // Lo HANGUL SYLLABLE CWEO\n\t\t0xCDCC == code || // Lo HANGUL SYLLABLE CWE\n\t\t0xCDE8 == code || // Lo HANGUL SYLLABLE CWI\n\t\t0xCE04 == code || // Lo HANGUL SYLLABLE CYU\n\t\t0xCE20 == code || // Lo HANGUL SYLLABLE CEU\n\t\t0xCE3C == code || // Lo HANGUL SYLLABLE CYI\n\t\t0xCE58 == code || // Lo HANGUL SYLLABLE CI\n\t\t0xCE74 == code || // Lo HANGUL SYLLABLE KA\n\t\t0xCE90 == code || // Lo HANGUL SYLLABLE KAE\n\t\t0xCEAC == code || // Lo HANGUL SYLLABLE KYA\n\t\t0xCEC8 == code || // Lo HANGUL SYLLABLE KYAE\n\t\t0xCEE4 == code || // Lo HANGUL SYLLABLE KEO\n\t\t0xCF00 == code || // Lo HANGUL SYLLABLE KE\n\t\t0xCF1C == code || // Lo HANGUL SYLLABLE KYEO\n\t\t0xCF38 == code || // Lo HANGUL SYLLABLE KYE\n\t\t0xCF54 == code || // Lo HANGUL SYLLABLE KO\n\t\t0xCF70 == code || // Lo HANGUL SYLLABLE KWA\n\t\t0xCF8C == code || // Lo HANGUL SYLLABLE KWAE\n\t\t0xCFA8 == code || // Lo HANGUL SYLLABLE KOE\n\t\t0xCFC4 == code || // Lo HANGUL SYLLABLE KYO\n\t\t0xCFE0 == code || // Lo HANGUL SYLLABLE KU\n\t\t0xCFFC == code || // Lo HANGUL SYLLABLE KWEO\n\t\t0xD018 == code || // Lo HANGUL SYLLABLE KWE\n\t\t0xD034 == code || // Lo HANGUL SYLLABLE KWI\n\t\t0xD050 == code || // Lo HANGUL SYLLABLE KYU\n\t\t0xD06C == code || // Lo HANGUL SYLLABLE KEU\n\t\t0xD088 == code || // Lo HANGUL SYLLABLE KYI\n\t\t0xD0A4 == code || // Lo HANGUL SYLLABLE KI\n\t\t0xD0C0 == code || // Lo HANGUL SYLLABLE TA\n\t\t0xD0DC == code || // Lo HANGUL SYLLABLE TAE\n\t\t0xD0F8 == code || // Lo HANGUL SYLLABLE TYA\n\t\t0xD114 == code || // Lo HANGUL SYLLABLE TYAE\n\t\t0xD130 == code || // Lo HANGUL SYLLABLE TEO\n\t\t0xD14C == code || // Lo HANGUL SYLLABLE TE\n\t\t0xD168 == code || // Lo HANGUL SYLLABLE TYEO\n\t\t0xD184 == code || // Lo HANGUL SYLLABLE TYE\n\t\t0xD1A0 == code || // Lo HANGUL SYLLABLE TO\n\t\t0xD1BC == code || // Lo HANGUL SYLLABLE TWA\n\t\t0xD1D8 == code || // Lo HANGUL SYLLABLE TWAE\n\t\t0xD1F4 == code || // Lo HANGUL SYLLABLE TOE\n\t\t0xD210 == code || // Lo HANGUL SYLLABLE TYO\n\t\t0xD22C == code || // Lo HANGUL SYLLABLE TU\n\t\t0xD248 == code || // Lo HANGUL SYLLABLE TWEO\n\t\t0xD264 == code || // Lo HANGUL SYLLABLE TWE\n\t\t0xD280 == code || // Lo HANGUL SYLLABLE TWI\n\t\t0xD29C == code || // Lo HANGUL SYLLABLE TYU\n\t\t0xD2B8 == code || // Lo HANGUL SYLLABLE TEU\n\t\t0xD2D4 == code || // Lo HANGUL SYLLABLE TYI\n\t\t0xD2F0 == code || // Lo HANGUL SYLLABLE TI\n\t\t0xD30C == code || // Lo HANGUL SYLLABLE PA\n\t\t0xD328 == code || // Lo HANGUL SYLLABLE PAE\n\t\t0xD344 == code || // Lo HANGUL SYLLABLE PYA\n\t\t0xD360 == code || // Lo HANGUL SYLLABLE PYAE\n\t\t0xD37C == code || // Lo HANGUL SYLLABLE PEO\n\t\t0xD398 == code || // Lo HANGUL SYLLABLE PE\n\t\t0xD3B4 == code || // Lo HANGUL SYLLABLE PYEO\n\t\t0xD3D0 == code || // Lo HANGUL SYLLABLE PYE\n\t\t0xD3EC == code || // Lo HANGUL SYLLABLE PO\n\t\t0xD408 == code || // Lo HANGUL SYLLABLE PWA\n\t\t0xD424 == code || // Lo HANGUL SYLLABLE PWAE\n\t\t0xD440 == code || // Lo HANGUL SYLLABLE POE\n\t\t0xD45C == code || // Lo HANGUL SYLLABLE PYO\n\t\t0xD478 == code || // Lo HANGUL SYLLABLE PU\n\t\t0xD494 == code || // Lo HANGUL SYLLABLE PWEO\n\t\t0xD4B0 == code || // Lo HANGUL SYLLABLE PWE\n\t\t0xD4CC == code || // Lo HANGUL SYLLABLE PWI\n\t\t0xD4E8 == code || // Lo HANGUL SYLLABLE PYU\n\t\t0xD504 == code || // Lo HANGUL SYLLABLE PEU\n\t\t0xD520 == code || // Lo HANGUL SYLLABLE PYI\n\t\t0xD53C == code || // Lo HANGUL SYLLABLE PI\n\t\t0xD558 == code || // Lo HANGUL SYLLABLE HA\n\t\t0xD574 == code || // Lo HANGUL SYLLABLE HAE\n\t\t0xD590 == code || // Lo HANGUL SYLLABLE HYA\n\t\t0xD5AC == code || // Lo HANGUL SYLLABLE HYAE\n\t\t0xD5C8 == code || // Lo HANGUL SYLLABLE HEO\n\t\t0xD5E4 == code || // Lo HANGUL SYLLABLE HE\n\t\t0xD600 == code || // Lo HANGUL SYLLABLE HYEO\n\t\t0xD61C == code || // Lo HANGUL SYLLABLE HYE\n\t\t0xD638 == code || // Lo HANGUL SYLLABLE HO\n\t\t0xD654 == code || // Lo HANGUL SYLLABLE HWA\n\t\t0xD670 == code || // Lo HANGUL SYLLABLE HWAE\n\t\t0xD68C == code || // Lo HANGUL SYLLABLE HOE\n\t\t0xD6A8 == code || // Lo HANGUL SYLLABLE HYO\n\t\t0xD6C4 == code || // Lo HANGUL SYLLABLE HU\n\t\t0xD6E0 == code || // Lo HANGUL SYLLABLE HWEO\n\t\t0xD6FC == code || // Lo HANGUL SYLLABLE HWE\n\t\t0xD718 == code || // Lo HANGUL SYLLABLE HWI\n\t\t0xD734 == code || // Lo HANGUL SYLLABLE HYU\n\t\t0xD750 == code || // Lo HANGUL SYLLABLE HEU\n\t\t0xD76C == code || // Lo HANGUL SYLLABLE HYI\n\t\t0xD788 == code // Lo HANGUL SYLLABLE HI\n\t\t){\n\t\t\treturn LV;\n\t\t}\n\n\t\tif(\n\t\t(0xAC01 <= code && code <= 0xAC1B) || // Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH\n\t\t(0xAC1D <= code && code <= 0xAC37) || // Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH\n\t\t(0xAC39 <= code && code <= 0xAC53) || // Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH\n\t\t(0xAC55 <= code && code <= 0xAC6F) || // Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH\n\t\t(0xAC71 <= code && code <= 0xAC8B) || // Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH\n\t\t(0xAC8D <= code && code <= 0xACA7) || // Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH\n\t\t(0xACA9 <= code && code <= 0xACC3) || // Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH\n\t\t(0xACC5 <= code && code <= 0xACDF) || // Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH\n\t\t(0xACE1 <= code && code <= 0xACFB) || // Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH\n\t\t(0xACFD <= code && code <= 0xAD17) || // Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH\n\t\t(0xAD19 <= code && code <= 0xAD33) || // Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH\n\t\t(0xAD35 <= code && code <= 0xAD4F) || // Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH\n\t\t(0xAD51 <= code && code <= 0xAD6B) || // Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH\n\t\t(0xAD6D <= code && code <= 0xAD87) || // Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH\n\t\t(0xAD89 <= code && code <= 0xADA3) || // Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH\n\t\t(0xADA5 <= code && code <= 0xADBF) || // Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH\n\t\t(0xADC1 <= code && code <= 0xADDB) || // Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH\n\t\t(0xADDD <= code && code <= 0xADF7) || // Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH\n\t\t(0xADF9 <= code && code <= 0xAE13) || // Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH\n\t\t(0xAE15 <= code && code <= 0xAE2F) || // Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH\n\t\t(0xAE31 <= code && code <= 0xAE4B) || // Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH\n\t\t(0xAE4D <= code && code <= 0xAE67) || // Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH\n\t\t(0xAE69 <= code && code <= 0xAE83) || // Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH\n\t\t(0xAE85 <= code && code <= 0xAE9F) || // Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH\n\t\t(0xAEA1 <= code && code <= 0xAEBB) || // Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH\n\t\t(0xAEBD <= code && code <= 0xAED7) || // Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH\n\t\t(0xAED9 <= code && code <= 0xAEF3) || // Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH\n\t\t(0xAEF5 <= code && code <= 0xAF0F) || // Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH\n\t\t(0xAF11 <= code && code <= 0xAF2B) || // Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH\n\t\t(0xAF2D <= code && code <= 0xAF47) || // Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH\n\t\t(0xAF49 <= code && code <= 0xAF63) || // Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH\n\t\t(0xAF65 <= code && code <= 0xAF7F) || // Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH\n\t\t(0xAF81 <= code && code <= 0xAF9B) || // Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH\n\t\t(0xAF9D <= code && code <= 0xAFB7) || // Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH\n\t\t(0xAFB9 <= code && code <= 0xAFD3) || // Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH\n\t\t(0xAFD5 <= code && code <= 0xAFEF) || // Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH\n\t\t(0xAFF1 <= code && code <= 0xB00B) || // Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH\n\t\t(0xB00D <= code && code <= 0xB027) || // Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH\n\t\t(0xB029 <= code && code <= 0xB043) || // Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH\n\t\t(0xB045 <= code && code <= 0xB05F) || // Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH\n\t\t(0xB061 <= code && code <= 0xB07B) || // Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH\n\t\t(0xB07D <= code && code <= 0xB097) || // Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH\n\t\t(0xB099 <= code && code <= 0xB0B3) || // Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH\n\t\t(0xB0B5 <= code && code <= 0xB0CF) || // Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH\n\t\t(0xB0D1 <= code && code <= 0xB0EB) || // Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH\n\t\t(0xB0ED <= code && code <= 0xB107) || // Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH\n\t\t(0xB109 <= code && code <= 0xB123) || // Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH\n\t\t(0xB125 <= code && code <= 0xB13F) || // Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH\n\t\t(0xB141 <= code && code <= 0xB15B) || // Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH\n\t\t(0xB15D <= code && code <= 0xB177) || // Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH\n\t\t(0xB179 <= code && code <= 0xB193) || // Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH\n\t\t(0xB195 <= code && code <= 0xB1AF) || // Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH\n\t\t(0xB1B1 <= code && code <= 0xB1CB) || // Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH\n\t\t(0xB1CD <= code && code <= 0xB1E7) || // Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH\n\t\t(0xB1E9 <= code && code <= 0xB203) || // Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH\n\t\t(0xB205 <= code && code <= 0xB21F) || // Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH\n\t\t(0xB221 <= code && code <= 0xB23B) || // Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH\n\t\t(0xB23D <= code && code <= 0xB257) || // Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH\n\t\t(0xB259 <= code && code <= 0xB273) || // Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH\n\t\t(0xB275 <= code && code <= 0xB28F) || // Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH\n\t\t(0xB291 <= code && code <= 0xB2AB) || // Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH\n\t\t(0xB2AD <= code && code <= 0xB2C7) || // Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH\n\t\t(0xB2C9 <= code && code <= 0xB2E3) || // Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH\n\t\t(0xB2E5 <= code && code <= 0xB2FF) || // Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH\n\t\t(0xB301 <= code && code <= 0xB31B) || // Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH\n\t\t(0xB31D <= code && code <= 0xB337) || // Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH\n\t\t(0xB339 <= code && code <= 0xB353) || // Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH\n\t\t(0xB355 <= code && code <= 0xB36F) || // Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH\n\t\t(0xB371 <= code && code <= 0xB38B) || // Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH\n\t\t(0xB38D <= code && code <= 0xB3A7) || // Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH\n\t\t(0xB3A9 <= code && code <= 0xB3C3) || // Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH\n\t\t(0xB3C5 <= code && code <= 0xB3DF) || // Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH\n\t\t(0xB3E1 <= code && code <= 0xB3FB) || // Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH\n\t\t(0xB3FD <= code && code <= 0xB417) || // Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH\n\t\t(0xB419 <= code && code <= 0xB433) || // Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH\n\t\t(0xB435 <= code && code <= 0xB44F) || // Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH\n\t\t(0xB451 <= code && code <= 0xB46B) || // Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH\n\t\t(0xB46D <= code && code <= 0xB487) || // Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH\n\t\t(0xB489 <= code && code <= 0xB4A3) || // Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH\n\t\t(0xB4A5 <= code && code <= 0xB4BF) || // Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH\n\t\t(0xB4C1 <= code && code <= 0xB4DB) || // Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH\n\t\t(0xB4DD <= code && code <= 0xB4F7) || // Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH\n\t\t(0xB4F9 <= code && code <= 0xB513) || // Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH\n\t\t(0xB515 <= code && code <= 0xB52F) || // Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH\n\t\t(0xB531 <= code && code <= 0xB54B) || // Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH\n\t\t(0xB54D <= code && code <= 0xB567) || // Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH\n\t\t(0xB569 <= code && code <= 0xB583) || // Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH\n\t\t(0xB585 <= code && code <= 0xB59F) || // Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH\n\t\t(0xB5A1 <= code && code <= 0xB5BB) || // Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH\n\t\t(0xB5BD <= code && code <= 0xB5D7) || // Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH\n\t\t(0xB5D9 <= code && code <= 0xB5F3) || // Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH\n\t\t(0xB5F5 <= code && code <= 0xB60F) || // Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH\n\t\t(0xB611 <= code && code <= 0xB62B) || // Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH\n\t\t(0xB62D <= code && code <= 0xB647) || // Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH\n\t\t(0xB649 <= code && code <= 0xB663) || // Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH\n\t\t(0xB665 <= code && code <= 0xB67F) || // Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH\n\t\t(0xB681 <= code && code <= 0xB69B) || // Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH\n\t\t(0xB69D <= code && code <= 0xB6B7) || // Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH\n\t\t(0xB6B9 <= code && code <= 0xB6D3) || // Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH\n\t\t(0xB6D5 <= code && code <= 0xB6EF) || // Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH\n\t\t(0xB6F1 <= code && code <= 0xB70B) || // Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH\n\t\t(0xB70D <= code && code <= 0xB727) || // Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH\n\t\t(0xB729 <= code && code <= 0xB743) || // Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH\n\t\t(0xB745 <= code && code <= 0xB75F) || // Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH\n\t\t(0xB761 <= code && code <= 0xB77B) || // Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH\n\t\t(0xB77D <= code && code <= 0xB797) || // Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH\n\t\t(0xB799 <= code && code <= 0xB7B3) || // Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH\n\t\t(0xB7B5 <= code && code <= 0xB7CF) || // Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH\n\t\t(0xB7D1 <= code && code <= 0xB7EB) || // Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH\n\t\t(0xB7ED <= code && code <= 0xB807) || // Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH\n\t\t(0xB809 <= code && code <= 0xB823) || // Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH\n\t\t(0xB825 <= code && code <= 0xB83F) || // Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH\n\t\t(0xB841 <= code && code <= 0xB85B) || // Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH\n\t\t(0xB85D <= code && code <= 0xB877) || // Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH\n\t\t(0xB879 <= code && code <= 0xB893) || // Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH\n\t\t(0xB895 <= code && code <= 0xB8AF) || // Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH\n\t\t(0xB8B1 <= code && code <= 0xB8CB) || // Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH\n\t\t(0xB8CD <= code && code <= 0xB8E7) || // Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH\n\t\t(0xB8E9 <= code && code <= 0xB903) || // Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH\n\t\t(0xB905 <= code && code <= 0xB91F) || // Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH\n\t\t(0xB921 <= code && code <= 0xB93B) || // Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH\n\t\t(0xB93D <= code && code <= 0xB957) || // Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH\n\t\t(0xB959 <= code && code <= 0xB973) || // Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH\n\t\t(0xB975 <= code && code <= 0xB98F) || // Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH\n\t\t(0xB991 <= code && code <= 0xB9AB) || // Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH\n\t\t(0xB9AD <= code && code <= 0xB9C7) || // Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH\n\t\t(0xB9C9 <= code && code <= 0xB9E3) || // Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH\n\t\t(0xB9E5 <= code && code <= 0xB9FF) || // Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH\n\t\t(0xBA01 <= code && code <= 0xBA1B) || // Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH\n\t\t(0xBA1D <= code && code <= 0xBA37) || // Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH\n\t\t(0xBA39 <= code && code <= 0xBA53) || // Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH\n\t\t(0xBA55 <= code && code <= 0xBA6F) || // Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH\n\t\t(0xBA71 <= code && code <= 0xBA8B) || // Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH\n\t\t(0xBA8D <= code && code <= 0xBAA7) || // Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH\n\t\t(0xBAA9 <= code && code <= 0xBAC3) || // Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH\n\t\t(0xBAC5 <= code && code <= 0xBADF) || // Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH\n\t\t(0xBAE1 <= code && code <= 0xBAFB) || // Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH\n\t\t(0xBAFD <= code && code <= 0xBB17) || // Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH\n\t\t(0xBB19 <= code && code <= 0xBB33) || // Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH\n\t\t(0xBB35 <= code && code <= 0xBB4F) || // Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH\n\t\t(0xBB51 <= code && code <= 0xBB6B) || // Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH\n\t\t(0xBB6D <= code && code <= 0xBB87) || // Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH\n\t\t(0xBB89 <= code && code <= 0xBBA3) || // Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH\n\t\t(0xBBA5 <= code && code <= 0xBBBF) || // Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH\n\t\t(0xBBC1 <= code && code <= 0xBBDB) || // Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH\n\t\t(0xBBDD <= code && code <= 0xBBF7) || // Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH\n\t\t(0xBBF9 <= code && code <= 0xBC13) || // Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH\n\t\t(0xBC15 <= code && code <= 0xBC2F) || // Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH\n\t\t(0xBC31 <= code && code <= 0xBC4B) || // Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH\n\t\t(0xBC4D <= code && code <= 0xBC67) || // Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH\n\t\t(0xBC69 <= code && code <= 0xBC83) || // Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH\n\t\t(0xBC85 <= code && code <= 0xBC9F) || // Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH\n\t\t(0xBCA1 <= code && code <= 0xBCBB) || // Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH\n\t\t(0xBCBD <= code && code <= 0xBCD7) || // Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH\n\t\t(0xBCD9 <= code && code <= 0xBCF3) || // Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH\n\t\t(0xBCF5 <= code && code <= 0xBD0F) || // Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH\n\t\t(0xBD11 <= code && code <= 0xBD2B) || // Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH\n\t\t(0xBD2D <= code && code <= 0xBD47) || // Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH\n\t\t(0xBD49 <= code && code <= 0xBD63) || // Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH\n\t\t(0xBD65 <= code && code <= 0xBD7F) || // Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH\n\t\t(0xBD81 <= code && code <= 0xBD9B) || // Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH\n\t\t(0xBD9D <= code && code <= 0xBDB7) || // Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH\n\t\t(0xBDB9 <= code && code <= 0xBDD3) || // Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH\n\t\t(0xBDD5 <= code && code <= 0xBDEF) || // Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH\n\t\t(0xBDF1 <= code && code <= 0xBE0B) || // Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH\n\t\t(0xBE0D <= code && code <= 0xBE27) || // Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH\n\t\t(0xBE29 <= code && code <= 0xBE43) || // Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH\n\t\t(0xBE45 <= code && code <= 0xBE5F) || // Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH\n\t\t(0xBE61 <= code && code <= 0xBE7B) || // Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH\n\t\t(0xBE7D <= code && code <= 0xBE97) || // Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH\n\t\t(0xBE99 <= code && code <= 0xBEB3) || // Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH\n\t\t(0xBEB5 <= code && code <= 0xBECF) || // Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH\n\t\t(0xBED1 <= code && code <= 0xBEEB) || // Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH\n\t\t(0xBEED <= code && code <= 0xBF07) || // Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH\n\t\t(0xBF09 <= code && code <= 0xBF23) || // Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH\n\t\t(0xBF25 <= code && code <= 0xBF3F) || // Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH\n\t\t(0xBF41 <= code && code <= 0xBF5B) || // Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH\n\t\t(0xBF5D <= code && code <= 0xBF77) || // Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH\n\t\t(0xBF79 <= code && code <= 0xBF93) || // Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH\n\t\t(0xBF95 <= code && code <= 0xBFAF) || // Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH\n\t\t(0xBFB1 <= code && code <= 0xBFCB) || // Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH\n\t\t(0xBFCD <= code && code <= 0xBFE7) || // Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH\n\t\t(0xBFE9 <= code && code <= 0xC003) || // Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH\n\t\t(0xC005 <= code && code <= 0xC01F) || // Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH\n\t\t(0xC021 <= code && code <= 0xC03B) || // Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH\n\t\t(0xC03D <= code && code <= 0xC057) || // Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH\n\t\t(0xC059 <= code && code <= 0xC073) || // Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH\n\t\t(0xC075 <= code && code <= 0xC08F) || // Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH\n\t\t(0xC091 <= code && code <= 0xC0AB) || // Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH\n\t\t(0xC0AD <= code && code <= 0xC0C7) || // Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH\n\t\t(0xC0C9 <= code && code <= 0xC0E3) || // Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH\n\t\t(0xC0E5 <= code && code <= 0xC0FF) || // Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH\n\t\t(0xC101 <= code && code <= 0xC11B) || // Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH\n\t\t(0xC11D <= code && code <= 0xC137) || // Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH\n\t\t(0xC139 <= code && code <= 0xC153) || // Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH\n\t\t(0xC155 <= code && code <= 0xC16F) || // Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH\n\t\t(0xC171 <= code && code <= 0xC18B) || // Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH\n\t\t(0xC18D <= code && code <= 0xC1A7) || // Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH\n\t\t(0xC1A9 <= code && code <= 0xC1C3) || // Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH\n\t\t(0xC1C5 <= code && code <= 0xC1DF) || // Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH\n\t\t(0xC1E1 <= code && code <= 0xC1FB) || // Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH\n\t\t(0xC1FD <= code && code <= 0xC217) || // Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH\n\t\t(0xC219 <= code && code <= 0xC233) || // Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH\n\t\t(0xC235 <= code && code <= 0xC24F) || // Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH\n\t\t(0xC251 <= code && code <= 0xC26B) || // Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH\n\t\t(0xC26D <= code && code <= 0xC287) || // Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH\n\t\t(0xC289 <= code && code <= 0xC2A3) || // Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH\n\t\t(0xC2A5 <= code && code <= 0xC2BF) || // Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH\n\t\t(0xC2C1 <= code && code <= 0xC2DB) || // Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH\n\t\t(0xC2DD <= code && code <= 0xC2F7) || // Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH\n\t\t(0xC2F9 <= code && code <= 0xC313) || // Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH\n\t\t(0xC315 <= code && code <= 0xC32F) || // Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH\n\t\t(0xC331 <= code && code <= 0xC34B) || // Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH\n\t\t(0xC34D <= code && code <= 0xC367) || // Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH\n\t\t(0xC369 <= code && code <= 0xC383) || // Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH\n\t\t(0xC385 <= code && code <= 0xC39F) || // Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH\n\t\t(0xC3A1 <= code && code <= 0xC3BB) || // Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH\n\t\t(0xC3BD <= code && code <= 0xC3D7) || // Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH\n\t\t(0xC3D9 <= code && code <= 0xC3F3) || // Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH\n\t\t(0xC3F5 <= code && code <= 0xC40F) || // Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH\n\t\t(0xC411 <= code && code <= 0xC42B) || // Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH\n\t\t(0xC42D <= code && code <= 0xC447) || // Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH\n\t\t(0xC449 <= code && code <= 0xC463) || // Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH\n\t\t(0xC465 <= code && code <= 0xC47F) || // Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH\n\t\t(0xC481 <= code && code <= 0xC49B) || // Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH\n\t\t(0xC49D <= code && code <= 0xC4B7) || // Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH\n\t\t(0xC4B9 <= code && code <= 0xC4D3) || // Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH\n\t\t(0xC4D5 <= code && code <= 0xC4EF) || // Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH\n\t\t(0xC4F1 <= code && code <= 0xC50B) || // Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH\n\t\t(0xC50D <= code && code <= 0xC527) || // Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH\n\t\t(0xC529 <= code && code <= 0xC543) || // Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH\n\t\t(0xC545 <= code && code <= 0xC55F) || // Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH\n\t\t(0xC561 <= code && code <= 0xC57B) || // Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH\n\t\t(0xC57D <= code && code <= 0xC597) || // Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH\n\t\t(0xC599 <= code && code <= 0xC5B3) || // Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH\n\t\t(0xC5B5 <= code && code <= 0xC5CF) || // Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH\n\t\t(0xC5D1 <= code && code <= 0xC5EB) || // Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH\n\t\t(0xC5ED <= code && code <= 0xC607) || // Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH\n\t\t(0xC609 <= code && code <= 0xC623) || // Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH\n\t\t(0xC625 <= code && code <= 0xC63F) || // Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH\n\t\t(0xC641 <= code && code <= 0xC65B) || // Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH\n\t\t(0xC65D <= code && code <= 0xC677) || // Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH\n\t\t(0xC679 <= code && code <= 0xC693) || // Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH\n\t\t(0xC695 <= code && code <= 0xC6AF) || // Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH\n\t\t(0xC6B1 <= code && code <= 0xC6CB) || // Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH\n\t\t(0xC6CD <= code && code <= 0xC6E7) || // Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH\n\t\t(0xC6E9 <= code && code <= 0xC703) || // Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH\n\t\t(0xC705 <= code && code <= 0xC71F) || // Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH\n\t\t(0xC721 <= code && code <= 0xC73B) || // Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH\n\t\t(0xC73D <= code && code <= 0xC757) || // Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH\n\t\t(0xC759 <= code && code <= 0xC773) || // Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH\n\t\t(0xC775 <= code && code <= 0xC78F) || // Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH\n\t\t(0xC791 <= code && code <= 0xC7AB) || // Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH\n\t\t(0xC7AD <= code && code <= 0xC7C7) || // Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH\n\t\t(0xC7C9 <= code && code <= 0xC7E3) || // Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH\n\t\t(0xC7E5 <= code && code <= 0xC7FF) || // Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH\n\t\t(0xC801 <= code && code <= 0xC81B) || // Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH\n\t\t(0xC81D <= code && code <= 0xC837) || // Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH\n\t\t(0xC839 <= code && code <= 0xC853) || // Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH\n\t\t(0xC855 <= code && code <= 0xC86F) || // Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH\n\t\t(0xC871 <= code && code <= 0xC88B) || // Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH\n\t\t(0xC88D <= code && code <= 0xC8A7) || // Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH\n\t\t(0xC8A9 <= code && code <= 0xC8C3) || // Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH\n\t\t(0xC8C5 <= code && code <= 0xC8DF) || // Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH\n\t\t(0xC8E1 <= code && code <= 0xC8FB) || // Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH\n\t\t(0xC8FD <= code && code <= 0xC917) || // Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH\n\t\t(0xC919 <= code && code <= 0xC933) || // Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH\n\t\t(0xC935 <= code && code <= 0xC94F) || // Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH\n\t\t(0xC951 <= code && code <= 0xC96B) || // Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH\n\t\t(0xC96D <= code && code <= 0xC987) || // Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH\n\t\t(0xC989 <= code && code <= 0xC9A3) || // Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH\n\t\t(0xC9A5 <= code && code <= 0xC9BF) || // Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH\n\t\t(0xC9C1 <= code && code <= 0xC9DB) || // Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH\n\t\t(0xC9DD <= code && code <= 0xC9F7) || // Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH\n\t\t(0xC9F9 <= code && code <= 0xCA13) || // Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH\n\t\t(0xCA15 <= code && code <= 0xCA2F) || // Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH\n\t\t(0xCA31 <= code && code <= 0xCA4B) || // Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH\n\t\t(0xCA4D <= code && code <= 0xCA67) || // Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH\n\t\t(0xCA69 <= code && code <= 0xCA83) || // Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH\n\t\t(0xCA85 <= code && code <= 0xCA9F) || // Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH\n\t\t(0xCAA1 <= code && code <= 0xCABB) || // Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH\n\t\t(0xCABD <= code && code <= 0xCAD7) || // Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH\n\t\t(0xCAD9 <= code && code <= 0xCAF3) || // Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH\n\t\t(0xCAF5 <= code && code <= 0xCB0F) || // Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH\n\t\t(0xCB11 <= code && code <= 0xCB2B) || // Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH\n\t\t(0xCB2D <= code && code <= 0xCB47) || // Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH\n\t\t(0xCB49 <= code && code <= 0xCB63) || // Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH\n\t\t(0xCB65 <= code && code <= 0xCB7F) || // Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH\n\t\t(0xCB81 <= code && code <= 0xCB9B) || // Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH\n\t\t(0xCB9D <= code && code <= 0xCBB7) || // Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH\n\t\t(0xCBB9 <= code && code <= 0xCBD3) || // Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH\n\t\t(0xCBD5 <= code && code <= 0xCBEF) || // Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH\n\t\t(0xCBF1 <= code && code <= 0xCC0B) || // Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH\n\t\t(0xCC0D <= code && code <= 0xCC27) || // Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH\n\t\t(0xCC29 <= code && code <= 0xCC43) || // Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH\n\t\t(0xCC45 <= code && code <= 0xCC5F) || // Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH\n\t\t(0xCC61 <= code && code <= 0xCC7B) || // Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH\n\t\t(0xCC7D <= code && code <= 0xCC97) || // Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH\n\t\t(0xCC99 <= code && code <= 0xCCB3) || // Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH\n\t\t(0xCCB5 <= code && code <= 0xCCCF) || // Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH\n\t\t(0xCCD1 <= code && code <= 0xCCEB) || // Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH\n\t\t(0xCCED <= code && code <= 0xCD07) || // Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH\n\t\t(0xCD09 <= code && code <= 0xCD23) || // Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH\n\t\t(0xCD25 <= code && code <= 0xCD3F) || // Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH\n\t\t(0xCD41 <= code && code <= 0xCD5B) || // Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH\n\t\t(0xCD5D <= code && code <= 0xCD77) || // Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH\n\t\t(0xCD79 <= code && code <= 0xCD93) || // Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH\n\t\t(0xCD95 <= code && code <= 0xCDAF) || // Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH\n\t\t(0xCDB1 <= code && code <= 0xCDCB) || // Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH\n\t\t(0xCDCD <= code && code <= 0xCDE7) || // Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH\n\t\t(0xCDE9 <= code && code <= 0xCE03) || // Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH\n\t\t(0xCE05 <= code && code <= 0xCE1F) || // Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH\n\t\t(0xCE21 <= code && code <= 0xCE3B) || // Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH\n\t\t(0xCE3D <= code && code <= 0xCE57) || // Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH\n\t\t(0xCE59 <= code && code <= 0xCE73) || // Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH\n\t\t(0xCE75 <= code && code <= 0xCE8F) || // Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH\n\t\t(0xCE91 <= code && code <= 0xCEAB) || // Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH\n\t\t(0xCEAD <= code && code <= 0xCEC7) || // Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH\n\t\t(0xCEC9 <= code && code <= 0xCEE3) || // Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH\n\t\t(0xCEE5 <= code && code <= 0xCEFF) || // Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH\n\t\t(0xCF01 <= code && code <= 0xCF1B) || // Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH\n\t\t(0xCF1D <= code && code <= 0xCF37) || // Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH\n\t\t(0xCF39 <= code && code <= 0xCF53) || // Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH\n\t\t(0xCF55 <= code && code <= 0xCF6F) || // Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH\n\t\t(0xCF71 <= code && code <= 0xCF8B) || // Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH\n\t\t(0xCF8D <= code && code <= 0xCFA7) || // Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH\n\t\t(0xCFA9 <= code && code <= 0xCFC3) || // Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH\n\t\t(0xCFC5 <= code && code <= 0xCFDF) || // Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH\n\t\t(0xCFE1 <= code && code <= 0xCFFB) || // Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH\n\t\t(0xCFFD <= code && code <= 0xD017) || // Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH\n\t\t(0xD019 <= code && code <= 0xD033) || // Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH\n\t\t(0xD035 <= code && code <= 0xD04F) || // Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH\n\t\t(0xD051 <= code && code <= 0xD06B) || // Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH\n\t\t(0xD06D <= code && code <= 0xD087) || // Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH\n\t\t(0xD089 <= code && code <= 0xD0A3) || // Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH\n\t\t(0xD0A5 <= code && code <= 0xD0BF) || // Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH\n\t\t(0xD0C1 <= code && code <= 0xD0DB) || // Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH\n\t\t(0xD0DD <= code && code <= 0xD0F7) || // Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH\n\t\t(0xD0F9 <= code && code <= 0xD113) || // Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH\n\t\t(0xD115 <= code && code <= 0xD12F) || // Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH\n\t\t(0xD131 <= code && code <= 0xD14B) || // Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH\n\t\t(0xD14D <= code && code <= 0xD167) || // Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH\n\t\t(0xD169 <= code && code <= 0xD183) || // Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH\n\t\t(0xD185 <= code && code <= 0xD19F) || // Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH\n\t\t(0xD1A1 <= code && code <= 0xD1BB) || // Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH\n\t\t(0xD1BD <= code && code <= 0xD1D7) || // Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH\n\t\t(0xD1D9 <= code && code <= 0xD1F3) || // Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH\n\t\t(0xD1F5 <= code && code <= 0xD20F) || // Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH\n\t\t(0xD211 <= code && code <= 0xD22B) || // Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH\n\t\t(0xD22D <= code && code <= 0xD247) || // Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH\n\t\t(0xD249 <= code && code <= 0xD263) || // Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH\n\t\t(0xD265 <= code && code <= 0xD27F) || // Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH\n\t\t(0xD281 <= code && code <= 0xD29B) || // Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH\n\t\t(0xD29D <= code && code <= 0xD2B7) || // Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH\n\t\t(0xD2B9 <= code && code <= 0xD2D3) || // Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH\n\t\t(0xD2D5 <= code && code <= 0xD2EF) || // Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH\n\t\t(0xD2F1 <= code && code <= 0xD30B) || // Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH\n\t\t(0xD30D <= code && code <= 0xD327) || // Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH\n\t\t(0xD329 <= code && code <= 0xD343) || // Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH\n\t\t(0xD345 <= code && code <= 0xD35F) || // Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH\n\t\t(0xD361 <= code && code <= 0xD37B) || // Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH\n\t\t(0xD37D <= code && code <= 0xD397) || // Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH\n\t\t(0xD399 <= code && code <= 0xD3B3) || // Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH\n\t\t(0xD3B5 <= code && code <= 0xD3CF) || // Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH\n\t\t(0xD3D1 <= code && code <= 0xD3EB) || // Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH\n\t\t(0xD3ED <= code && code <= 0xD407) || // Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH\n\t\t(0xD409 <= code && code <= 0xD423) || // Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH\n\t\t(0xD425 <= code && code <= 0xD43F) || // Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH\n\t\t(0xD441 <= code && code <= 0xD45B) || // Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH\n\t\t(0xD45D <= code && code <= 0xD477) || // Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH\n\t\t(0xD479 <= code && code <= 0xD493) || // Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH\n\t\t(0xD495 <= code && code <= 0xD4AF) || // Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH\n\t\t(0xD4B1 <= code && code <= 0xD4CB) || // Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH\n\t\t(0xD4CD <= code && code <= 0xD4E7) || // Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH\n\t\t(0xD4E9 <= code && code <= 0xD503) || // Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH\n\t\t(0xD505 <= code && code <= 0xD51F) || // Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH\n\t\t(0xD521 <= code && code <= 0xD53B) || // Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH\n\t\t(0xD53D <= code && code <= 0xD557) || // Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH\n\t\t(0xD559 <= code && code <= 0xD573) || // Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH\n\t\t(0xD575 <= code && code <= 0xD58F) || // Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH\n\t\t(0xD591 <= code && code <= 0xD5AB) || // Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH\n\t\t(0xD5AD <= code && code <= 0xD5C7) || // Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH\n\t\t(0xD5C9 <= code && code <= 0xD5E3) || // Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH\n\t\t(0xD5E5 <= code && code <= 0xD5FF) || // Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH\n\t\t(0xD601 <= code && code <= 0xD61B) || // Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH\n\t\t(0xD61D <= code && code <= 0xD637) || // Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH\n\t\t(0xD639 <= code && code <= 0xD653) || // Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH\n\t\t(0xD655 <= code && code <= 0xD66F) || // Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH\n\t\t(0xD671 <= code && code <= 0xD68B) || // Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH\n\t\t(0xD68D <= code && code <= 0xD6A7) || // Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH\n\t\t(0xD6A9 <= code && code <= 0xD6C3) || // Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH\n\t\t(0xD6C5 <= code && code <= 0xD6DF) || // Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH\n\t\t(0xD6E1 <= code && code <= 0xD6FB) || // Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH\n\t\t(0xD6FD <= code && code <= 0xD717) || // Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH\n\t\t(0xD719 <= code && code <= 0xD733) || // Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH\n\t\t(0xD735 <= code && code <= 0xD74F) || // Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH\n\t\t(0xD751 <= code && code <= 0xD76B) || // Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH\n\t\t(0xD76D <= code && code <= 0xD787) || // Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH\n\t\t(0xD789 <= code && code <= 0xD7A3) // Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH\n\t\t){\n\t\t\treturn LVT;\n\t\t}\n\n\t\tif(\n\t\t0x261D == code || // So WHITE UP POINTING INDEX\n\t\t0x26F9 == code || // So PERSON WITH BALL\n\t\t(0x270A <= code && code <= 0x270D) || // So [4] RAISED FIST..WRITING HAND\n\t\t0x1F385 == code || // So FATHER CHRISTMAS\n\t\t(0x1F3C2 <= code && code <= 0x1F3C4) || // So [3] SNOWBOARDER..SURFER\n\t\t0x1F3C7 == code || // So HORSE RACING\n\t\t(0x1F3CA <= code && code <= 0x1F3CC) || // So [3] SWIMMER..GOLFER\n\t\t(0x1F442 <= code && code <= 0x1F443) || // So [2] EAR..NOSE\n\t\t(0x1F446 <= code && code <= 0x1F450) || // So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN\n\t\t0x1F46E == code || // So POLICE OFFICER\n\t\t(0x1F470 <= code && code <= 0x1F478) || // So [9] BRIDE WITH VEIL..PRINCESS\n\t\t0x1F47C == code || // So BABY ANGEL\n\t\t(0x1F481 <= code && code <= 0x1F483) || // So [3] INFORMATION DESK PERSON..DANCER\n\t\t(0x1F485 <= code && code <= 0x1F487) || // So [3] NAIL POLISH..HAIRCUT\n\t\t0x1F4AA == code || // So FLEXED BICEPS\n\t\t(0x1F574 <= code && code <= 0x1F575) || // So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY\n\t\t0x1F57A == code || // So MAN DANCING\n\t\t0x1F590 == code || // So RAISED HAND WITH FINGERS SPLAYED\n\t\t(0x1F595 <= code && code <= 0x1F596) || // So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS\n\t\t(0x1F645 <= code && code <= 0x1F647) || // So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY\n\t\t(0x1F64B <= code && code <= 0x1F64F) || // So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS\n\t\t0x1F6A3 == code || // So ROWBOAT\n\t\t(0x1F6B4 <= code && code <= 0x1F6B6) || // So [3] BICYCLIST..PEDESTRIAN\n\t\t0x1F6C0 == code || // So BATH\n\t\t0x1F6CC == code || // So SLEEPING ACCOMMODATION\n\t\t(0x1F918 <= code && code <= 0x1F91C) || // So [5] SIGN OF THE HORNS..RIGHT-FACING FIST\n\t\t(0x1F91E <= code && code <= 0x1F91F) || // So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN\n\t\t0x1F926 == code || // So FACE PALM\n\t\t(0x1F930 <= code && code <= 0x1F939) || // So [10] PREGNANT WOMAN..JUGGLING\n\t\t(0x1F93D <= code && code <= 0x1F93E) || // So [2] WATER POLO..HANDBALL\n\t\t(0x1F9D1 <= code && code <= 0x1F9DD) // So [13] ADULT..ELF\n\t\t){\n\t\t\treturn E_Base;\n\t\t}\n\n\t\tif(\n\t\t(0x1F3FB <= code && code <= 0x1F3FF) // Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n\t\t){\n\t\t\treturn E_Modifier;\n\t\t}\n\n\t\tif(\n\t\t0x200D == code // Cf ZERO WIDTH JOINER\n\t\t){\n\t\t\treturn ZWJ;\n\t\t}\n\n\t\tif(\n\t\t0x2640 == code || // So FEMALE SIGN\n\t\t0x2642 == code || // So MALE SIGN\n\t\t(0x2695 <= code && code <= 0x2696) || // So [2] STAFF OF AESCULAPIUS..SCALES\n\t\t0x2708 == code || // So AIRPLANE\n\t\t0x2764 == code || // So HEAVY BLACK HEART\n\t\t0x1F308 == code || // So RAINBOW\n\t\t0x1F33E == code || // So EAR OF RICE\n\t\t0x1F373 == code || // So COOKING\n\t\t0x1F393 == code || // So GRADUATION CAP\n\t\t0x1F3A4 == code || // So MICROPHONE\n\t\t0x1F3A8 == code || // So ARTIST PALETTE\n\t\t0x1F3EB == code || // So SCHOOL\n\t\t0x1F3ED == code || // So FACTORY\n\t\t0x1F48B == code || // So KISS MARK\n\t\t(0x1F4BB <= code && code <= 0x1F4BC) || // So [2] PERSONAL COMPUTER..BRIEFCASE\n\t\t0x1F527 == code || // So WRENCH\n\t\t0x1F52C == code || // So MICROSCOPE\n\t\t0x1F5E8 == code || // So LEFT SPEECH BUBBLE\n\t\t0x1F680 == code || // So ROCKET\n\t\t0x1F692 == code // So FIRE ENGINE\n\t\t){\n\t\t\treturn Glue_After_Zwj;\n\t\t}\n\n\t\tif(\n\t\t(0x1F466 <= code && code <= 0x1F469) // So [4] BOY..WOMAN\n\t\t){\n\t\t\treturn E_Base_GAZ;\n\t\t}\n\n\n\t\t//all unlisted characters have a grapheme break property of \"Other\"\n\t\treturn Other;\n\t}\n\treturn this;\n}\n\nexport default GraphemeSplitter;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport writeTextToCanvas from \"../Core/writeTextToCanvas.js\";\nimport bitmapSDF from \"../ThirdParty/bitmap-sdf.js\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport Label from \"./Label.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport TextureAtlas from \"./TextureAtlas.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\nimport GraphemeSplitter from \"../ThirdParty/graphemesplitter.js\";\n\n// A glyph represents a single character in a particular label. It may or may\n// not have a billboard, depending on whether the texture info has an index into\n// the the label collection's texture atlas. Invisible characters have no texture, and\n// no billboard. However, it always has a valid dimensions object.\nfunction Glyph() {\n this.textureInfo = undefined;\n this.dimensions = undefined;\n this.billboard = undefined;\n}\n\n// GlyphTextureInfo represents a single character, drawn in a particular style,\n// shared and reference counted across all labels. It may or may not have an\n// index into the label collection's texture atlas, depending on whether the character\n// has both width and height, but it always has a valid dimensions object.\nfunction GlyphTextureInfo(labelCollection, index, dimensions) {\n this.labelCollection = labelCollection;\n this.index = index;\n this.dimensions = dimensions;\n}\n\n// Traditionally, leading is %20 of the font size.\nvar defaultLineSpacingPercent = 1.2;\n\nvar whitePixelCanvasId = \"ID_WHITE_PIXEL\";\nvar whitePixelSize = new Cartesian2(4, 4);\nvar whitePixelBoundingRegion = new BoundingRectangle(1, 1, 1, 1);\n\nfunction addWhitePixelCanvas(textureAtlas, labelCollection) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = whitePixelSize.x;\n canvas.height = whitePixelSize.y;\n\n var context2D = canvas.getContext(\"2d\");\n context2D.fillStyle = \"#fff\";\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n\n textureAtlas.addImage(whitePixelCanvasId, canvas).then(function (index) {\n labelCollection._whitePixelIndex = index;\n });\n}\n\n// reusable object for calling writeTextToCanvas\nvar writeTextToCanvasParameters = {};\nfunction createGlyphCanvas(\n character,\n font,\n fillColor,\n outlineColor,\n outlineWidth,\n style,\n verticalOrigin\n) {\n writeTextToCanvasParameters.font = font;\n writeTextToCanvasParameters.fillColor = fillColor;\n writeTextToCanvasParameters.strokeColor = outlineColor;\n writeTextToCanvasParameters.strokeWidth = outlineWidth;\n // Setting the padding to something bigger is necessary to get enough space for the outlining.\n writeTextToCanvasParameters.padding = SDFSettings.PADDING;\n\n if (verticalOrigin === VerticalOrigin.CENTER) {\n writeTextToCanvasParameters.textBaseline = \"middle\";\n } else if (verticalOrigin === VerticalOrigin.TOP) {\n writeTextToCanvasParameters.textBaseline = \"top\";\n } else {\n // VerticalOrigin.BOTTOM and VerticalOrigin.BASELINE\n writeTextToCanvasParameters.textBaseline = \"bottom\";\n }\n\n writeTextToCanvasParameters.fill =\n style === LabelStyle.FILL || style === LabelStyle.FILL_AND_OUTLINE;\n writeTextToCanvasParameters.stroke =\n style === LabelStyle.OUTLINE || style === LabelStyle.FILL_AND_OUTLINE;\n writeTextToCanvasParameters.backgroundColor = Color.BLACK;\n\n return writeTextToCanvas(character, writeTextToCanvasParameters);\n}\n\nfunction unbindGlyph(labelCollection, glyph) {\n glyph.textureInfo = undefined;\n glyph.dimensions = undefined;\n\n var billboard = glyph.billboard;\n if (defined(billboard)) {\n billboard.show = false;\n billboard.image = undefined;\n if (defined(billboard._removeCallbackFunc)) {\n billboard._removeCallbackFunc();\n billboard._removeCallbackFunc = undefined;\n }\n labelCollection._spareBillboards.push(billboard);\n glyph.billboard = undefined;\n }\n}\n\nfunction addGlyphToTextureAtlas(textureAtlas, id, canvas, glyphTextureInfo) {\n textureAtlas.addImage(id, canvas).then(function (index) {\n glyphTextureInfo.index = index;\n });\n}\n\nvar splitter = new GraphemeSplitter();\n\nfunction rebindAllGlyphs(labelCollection, label) {\n var text = label._renderedText;\n var graphemes = splitter.splitGraphemes(text);\n var textLength = graphemes.length;\n var glyphs = label._glyphs;\n var glyphsLength = glyphs.length;\n\n var glyph;\n var glyphIndex;\n var textIndex;\n\n // Compute a font size scale relative to the sdf font generated size.\n label._relativeSize = label._fontSize / SDFSettings.FONT_SIZE;\n\n // if we have more glyphs than needed, unbind the extras.\n if (textLength < glyphsLength) {\n for (glyphIndex = textLength; glyphIndex < glyphsLength; ++glyphIndex) {\n unbindGlyph(labelCollection, glyphs[glyphIndex]);\n }\n }\n\n // presize glyphs to match the new text length\n glyphs.length = textLength;\n\n var showBackground =\n label._showBackground && text.split(\"\\n\").join(\"\").length > 0;\n var backgroundBillboard = label._backgroundBillboard;\n var backgroundBillboardCollection =\n labelCollection._backgroundBillboardCollection;\n if (!showBackground) {\n if (defined(backgroundBillboard)) {\n backgroundBillboardCollection.remove(backgroundBillboard);\n label._backgroundBillboard = backgroundBillboard = undefined;\n }\n } else {\n if (!defined(backgroundBillboard)) {\n backgroundBillboard = backgroundBillboardCollection.add({\n collection: labelCollection,\n image: whitePixelCanvasId,\n imageSubRegion: whitePixelBoundingRegion,\n });\n label._backgroundBillboard = backgroundBillboard;\n }\n\n backgroundBillboard.color = label._backgroundColor;\n backgroundBillboard.show = label._show;\n backgroundBillboard.position = label._position;\n backgroundBillboard.eyeOffset = label._eyeOffset;\n backgroundBillboard.pixelOffset = label._pixelOffset;\n backgroundBillboard.horizontalOrigin = HorizontalOrigin.LEFT;\n backgroundBillboard.verticalOrigin = label._verticalOrigin;\n backgroundBillboard.heightReference = label._heightReference;\n backgroundBillboard.scale = label.totalScale;\n backgroundBillboard.pickPrimitive = label;\n backgroundBillboard.id = label._id;\n backgroundBillboard.translucencyByDistance = label._translucencyByDistance;\n backgroundBillboard.pixelOffsetScaleByDistance =\n label._pixelOffsetScaleByDistance;\n backgroundBillboard.scaleByDistance = label._scaleByDistance;\n backgroundBillboard.distanceDisplayCondition =\n label._distanceDisplayCondition;\n backgroundBillboard.disableDepthTestDistance =\n label._disableDepthTestDistance;\n }\n\n var glyphTextureCache = labelCollection._glyphTextureCache;\n\n // walk the text looking for new characters (creating new glyphs for each)\n // or changed characters (rebinding existing glyphs)\n for (textIndex = 0; textIndex < textLength; ++textIndex) {\n var character = graphemes[textIndex];\n var verticalOrigin = label._verticalOrigin;\n\n var id = JSON.stringify([\n character,\n label._fontFamily,\n label._fontStyle,\n label._fontWeight,\n +verticalOrigin,\n ]);\n\n var glyphTextureInfo = glyphTextureCache[id];\n if (!defined(glyphTextureInfo)) {\n var glyphFont =\n label._fontStyle +\n \" \" +\n label._fontWeight +\n \" \" +\n SDFSettings.FONT_SIZE +\n \"px \" +\n label._fontFamily;\n\n var canvas = createGlyphCanvas(\n character,\n glyphFont,\n Color.WHITE,\n Color.WHITE,\n 0.0,\n LabelStyle.FILL,\n verticalOrigin\n );\n\n glyphTextureInfo = new GlyphTextureInfo(\n labelCollection,\n -1,\n canvas.dimensions\n );\n glyphTextureCache[id] = glyphTextureInfo;\n\n if (canvas.width > 0 && canvas.height > 0) {\n var sdfValues = bitmapSDF(canvas, {\n cutoff: SDFSettings.CUTOFF,\n radius: SDFSettings.RADIUS,\n });\n\n var ctx = canvas.getContext(\"2d\");\n var canvasWidth = canvas.width;\n var canvasHeight = canvas.height;\n var imgData = ctx.getImageData(0, 0, canvasWidth, canvasHeight);\n for (var i = 0; i < canvasWidth; i++) {\n for (var j = 0; j < canvasHeight; j++) {\n var baseIndex = j * canvasWidth + i;\n var alpha = sdfValues[baseIndex] * 255;\n var imageIndex = baseIndex * 4;\n imgData.data[imageIndex + 0] = alpha;\n imgData.data[imageIndex + 1] = alpha;\n imgData.data[imageIndex + 2] = alpha;\n imgData.data[imageIndex + 3] = alpha;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n if (character !== \" \") {\n addGlyphToTextureAtlas(\n labelCollection._textureAtlas,\n id,\n canvas,\n glyphTextureInfo\n );\n }\n }\n }\n\n glyph = glyphs[textIndex];\n\n if (defined(glyph)) {\n // clean up leftover information from the previous glyph\n if (glyphTextureInfo.index === -1) {\n // no texture, and therefore no billboard, for this glyph.\n // so, completely unbind glyph.\n unbindGlyph(labelCollection, glyph);\n } else if (defined(glyph.textureInfo)) {\n // we have a texture and billboard. If we had one before, release\n // our reference to that texture info, but reuse the billboard.\n glyph.textureInfo = undefined;\n }\n } else {\n // create a glyph object\n glyph = new Glyph();\n glyphs[textIndex] = glyph;\n }\n\n glyph.textureInfo = glyphTextureInfo;\n glyph.dimensions = glyphTextureInfo.dimensions;\n\n // if we have a texture, configure the existing billboard, or obtain one\n if (glyphTextureInfo.index !== -1) {\n var billboard = glyph.billboard;\n var spareBillboards = labelCollection._spareBillboards;\n if (!defined(billboard)) {\n if (spareBillboards.length > 0) {\n billboard = spareBillboards.pop();\n } else {\n billboard = labelCollection._billboardCollection.add({\n collection: labelCollection,\n });\n billboard._labelDimensions = new Cartesian2();\n billboard._labelTranslate = new Cartesian2();\n }\n glyph.billboard = billboard;\n }\n\n billboard.show = label._show;\n billboard.position = label._position;\n billboard.eyeOffset = label._eyeOffset;\n billboard.pixelOffset = label._pixelOffset;\n billboard.horizontalOrigin = HorizontalOrigin.LEFT;\n billboard.verticalOrigin = label._verticalOrigin;\n billboard.heightReference = label._heightReference;\n billboard.scale = label.totalScale;\n billboard.pickPrimitive = label;\n billboard.id = label._id;\n billboard.image = id;\n billboard.translucencyByDistance = label._translucencyByDistance;\n billboard.pixelOffsetScaleByDistance = label._pixelOffsetScaleByDistance;\n billboard.scaleByDistance = label._scaleByDistance;\n billboard.distanceDisplayCondition = label._distanceDisplayCondition;\n billboard.disableDepthTestDistance = label._disableDepthTestDistance;\n billboard._batchIndex = label._batchIndex;\n billboard.outlineColor = label.outlineColor;\n if (label.style === LabelStyle.FILL_AND_OUTLINE) {\n billboard.color = label._fillColor;\n billboard.outlineWidth = label.outlineWidth;\n } else if (label.style === LabelStyle.FILL) {\n billboard.color = label._fillColor;\n billboard.outlineWidth = 0.0;\n } else if (label.style === LabelStyle.OUTLINE) {\n billboard.color = Color.TRANSPARENT;\n billboard.outlineWidth = label.outlineWidth;\n }\n }\n }\n\n // changing glyphs will cause the position of the\n // glyphs to change, since different characters have different widths\n label._repositionAllGlyphs = true;\n}\n\nfunction calculateWidthOffset(lineWidth, horizontalOrigin, backgroundPadding) {\n if (horizontalOrigin === HorizontalOrigin.CENTER) {\n return -lineWidth / 2;\n } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n return -(lineWidth + backgroundPadding.x);\n }\n return backgroundPadding.x;\n}\n\n// reusable Cartesian2 instances\nvar glyphPixelOffset = new Cartesian2();\nvar scratchBackgroundPadding = new Cartesian2();\n\nfunction repositionAllGlyphs(label) {\n var glyphs = label._glyphs;\n var text = label._renderedText;\n var glyph;\n var dimensions;\n var lastLineWidth = 0;\n var maxLineWidth = 0;\n var lineWidths = [];\n var maxGlyphDescent = Number.NEGATIVE_INFINITY;\n var maxGlyphY = 0;\n var numberOfLines = 1;\n var glyphIndex;\n var glyphLength = glyphs.length;\n\n var backgroundBillboard = label._backgroundBillboard;\n var backgroundPadding = Cartesian2.clone(\n defined(backgroundBillboard) ? label._backgroundPadding : Cartesian2.ZERO,\n scratchBackgroundPadding\n );\n\n // We need to scale the background padding, which is specified in pixels by the inverse of the relative size so it is scaled properly.\n backgroundPadding.x /= label._relativeSize;\n backgroundPadding.y /= label._relativeSize;\n\n for (glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n if (text.charAt(glyphIndex) === \"\\n\") {\n lineWidths.push(lastLineWidth);\n ++numberOfLines;\n lastLineWidth = 0;\n } else {\n glyph = glyphs[glyphIndex];\n dimensions = glyph.dimensions;\n maxGlyphY = Math.max(maxGlyphY, dimensions.height - dimensions.descent);\n maxGlyphDescent = Math.max(maxGlyphDescent, dimensions.descent);\n\n //Computing the line width must also account for the kerning that occurs between letters.\n lastLineWidth += dimensions.width - dimensions.bounds.minx;\n if (glyphIndex < glyphLength - 1) {\n lastLineWidth += glyphs[glyphIndex + 1].dimensions.bounds.minx;\n }\n maxLineWidth = Math.max(maxLineWidth, lastLineWidth);\n }\n }\n lineWidths.push(lastLineWidth);\n var maxLineHeight = maxGlyphY + maxGlyphDescent;\n\n var scale = label.totalScale;\n var horizontalOrigin = label._horizontalOrigin;\n var verticalOrigin = label._verticalOrigin;\n var lineIndex = 0;\n var lineWidth = lineWidths[lineIndex];\n var widthOffset = calculateWidthOffset(\n lineWidth,\n horizontalOrigin,\n backgroundPadding\n );\n var lineSpacing = defaultLineSpacingPercent * maxLineHeight;\n var otherLinesHeight = lineSpacing * (numberOfLines - 1);\n var totalLineWidth = maxLineWidth;\n var totalLineHeight = maxLineHeight + otherLinesHeight;\n\n if (defined(backgroundBillboard)) {\n totalLineWidth += backgroundPadding.x * 2;\n totalLineHeight += backgroundPadding.y * 2;\n backgroundBillboard._labelHorizontalOrigin = horizontalOrigin;\n }\n\n glyphPixelOffset.x = widthOffset * scale;\n glyphPixelOffset.y = 0;\n\n var firstCharOfLine = true;\n\n var lineOffsetY = 0;\n for (glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n if (text.charAt(glyphIndex) === \"\\n\") {\n ++lineIndex;\n lineOffsetY += lineSpacing;\n lineWidth = lineWidths[lineIndex];\n widthOffset = calculateWidthOffset(\n lineWidth,\n horizontalOrigin,\n backgroundPadding\n );\n glyphPixelOffset.x = widthOffset * scale;\n firstCharOfLine = true;\n } else {\n glyph = glyphs[glyphIndex];\n dimensions = glyph.dimensions;\n\n if (verticalOrigin === VerticalOrigin.TOP) {\n glyphPixelOffset.y =\n dimensions.height - maxGlyphY - backgroundPadding.y;\n glyphPixelOffset.y += SDFSettings.PADDING;\n } else if (verticalOrigin === VerticalOrigin.CENTER) {\n glyphPixelOffset.y =\n (otherLinesHeight + dimensions.height - maxGlyphY) / 2;\n } else if (verticalOrigin === VerticalOrigin.BASELINE) {\n glyphPixelOffset.y = otherLinesHeight;\n glyphPixelOffset.y -= SDFSettings.PADDING;\n } else {\n // VerticalOrigin.BOTTOM\n glyphPixelOffset.y =\n otherLinesHeight + maxGlyphDescent + backgroundPadding.y;\n glyphPixelOffset.y -= SDFSettings.PADDING;\n }\n glyphPixelOffset.y =\n (glyphPixelOffset.y - dimensions.descent - lineOffsetY) * scale;\n\n // Handle any offsets for the first character of the line since the bounds might not be right on the bottom left pixel.\n if (firstCharOfLine) {\n glyphPixelOffset.x -= SDFSettings.PADDING * scale;\n firstCharOfLine = false;\n }\n\n if (defined(glyph.billboard)) {\n glyph.billboard._setTranslate(glyphPixelOffset);\n glyph.billboard._labelDimensions.x = totalLineWidth;\n glyph.billboard._labelDimensions.y = totalLineHeight;\n glyph.billboard._labelHorizontalOrigin = horizontalOrigin;\n }\n\n //Compute the next x offset taking into account the kerning performed\n //on both the current letter as well as the next letter to be drawn\n //as well as any applied scale.\n if (glyphIndex < glyphLength - 1) {\n var nextGlyph = glyphs[glyphIndex + 1];\n glyphPixelOffset.x +=\n (dimensions.width -\n dimensions.bounds.minx +\n nextGlyph.dimensions.bounds.minx) *\n scale;\n }\n }\n }\n\n if (defined(backgroundBillboard) && text.split(\"\\n\").join(\"\").length > 0) {\n if (horizontalOrigin === HorizontalOrigin.CENTER) {\n widthOffset = -maxLineWidth / 2 - backgroundPadding.x;\n } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n widthOffset = -(maxLineWidth + backgroundPadding.x * 2);\n } else {\n widthOffset = 0;\n }\n glyphPixelOffset.x = widthOffset * scale;\n\n if (verticalOrigin === VerticalOrigin.TOP) {\n glyphPixelOffset.y = maxLineHeight - maxGlyphY - maxGlyphDescent;\n } else if (verticalOrigin === VerticalOrigin.CENTER) {\n glyphPixelOffset.y = (maxLineHeight - maxGlyphY) / 2 - maxGlyphDescent;\n } else if (verticalOrigin === VerticalOrigin.BASELINE) {\n glyphPixelOffset.y = -backgroundPadding.y - maxGlyphDescent;\n } else {\n // VerticalOrigin.BOTTOM\n glyphPixelOffset.y = 0;\n }\n glyphPixelOffset.y = glyphPixelOffset.y * scale;\n\n backgroundBillboard.width = totalLineWidth;\n backgroundBillboard.height = totalLineHeight;\n backgroundBillboard._setTranslate(glyphPixelOffset);\n backgroundBillboard._labelTranslate = Cartesian2.clone(\n glyphPixelOffset,\n backgroundBillboard._labelTranslate\n );\n }\n\n if (label.heightReference === HeightReference.CLAMP_TO_GROUND) {\n for (glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n glyph = glyphs[glyphIndex];\n var billboard = glyph.billboard;\n if (defined(billboard)) {\n billboard._labelTranslate = Cartesian2.clone(\n glyphPixelOffset,\n billboard._labelTranslate\n );\n }\n }\n }\n}\n\nfunction destroyLabel(labelCollection, label) {\n var glyphs = label._glyphs;\n for (var i = 0, len = glyphs.length; i < len; ++i) {\n unbindGlyph(labelCollection, glyphs[i]);\n }\n if (defined(label._backgroundBillboard)) {\n labelCollection._backgroundBillboardCollection.remove(\n label._backgroundBillboard\n );\n label._backgroundBillboard = undefined;\n }\n label._labelCollection = undefined;\n\n if (defined(label._removeCallbackFunc)) {\n label._removeCallbackFunc();\n }\n\n destroyObject(label);\n}\n\n/**\n * A renderable collection of labels. Labels are viewport-aligned text positioned in the 3D scene.\n * Each label can have a different font, color, scale, etc.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Label.png' width='400' height='300' /><br />\n * Example labels\n * </div>\n * <br /><br />\n * Labels are added and removed from the collection using {@link LabelCollection#add}\n * and {@link LabelCollection#remove}.\n *\n * @alias LabelCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each label from model to world coordinates.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Scene} [options.scene] Must be passed in for labels that use the height reference property or will be depth tested against the globe.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The label blending option. The default\n * is used for rendering both opaque and translucent labels. However, if either all of the labels are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n *\n * @performance For best performance, prefer a few collections, each with many labels, to\n * many collections with only a few labels each. Avoid having collections where some\n * labels change every frame and others do not; instead, create one or more collections\n * for static labels, and one or more collections for dynamic labels.\n *\n * @see LabelCollection#add\n * @see LabelCollection#remove\n * @see Label\n * @see BillboardCollection\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Labels.html|Cesium Sandcastle Labels Demo}\n *\n * @example\n * // Create a label collection with two labels\n * var labels = scene.primitives.add(new Cesium.LabelCollection());\n * labels.add({\n * position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n * text : 'A label'\n * });\n * labels.add({\n * position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n * text : 'Another label'\n * });\n */\nfunction LabelCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._scene = options.scene;\n this._batchTable = options.batchTable;\n\n this._textureAtlas = undefined;\n this._backgroundTextureAtlas = undefined;\n this._whitePixelIndex = undefined;\n\n this._backgroundBillboardCollection = new BillboardCollection({\n scene: this._scene,\n });\n this._backgroundBillboardCollection.destroyTextureAtlas = false;\n\n this._billboardCollection = new BillboardCollection({\n scene: this._scene,\n batchTable: this._batchTable,\n });\n this._billboardCollection.destroyTextureAtlas = false;\n this._billboardCollection._sdf = true;\n\n this._spareBillboards = [];\n this._glyphTextureCache = {};\n this._labels = [];\n this._labelsToUpdate = [];\n this._totalGlyphCount = 0;\n\n this._highlightColor = Color.clone(Color.WHITE); // Only used by Vector3DTilePoints\n\n /**\n * The 4x4 transformation matrix that transforms each label in this collection from model to world coordinates.\n * When this is the identity matrix, the labels are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type Matrix4\n * @default {@link Matrix4.IDENTITY}\n *\n * @example\n * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * labels.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n * labels.add({\n * position : new Cesium.Cartesian3(0.0, 0.0, 0.0),\n * text : 'Center'\n * });\n * labels.add({\n * position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0),\n * text : 'East'\n * });\n * labels.add({\n * position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0),\n * text : 'North'\n * });\n * labels.add({\n * position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0),\n * text : 'Up'\n * });\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * The label blending option. The default is used for rendering both opaque and translucent labels.\n * However, if either all of the labels are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n * performance by up to 2x.\n * @type {BlendOption}\n * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n */\n this.blendOption = defaultValue(\n options.blendOption,\n BlendOption.OPAQUE_AND_TRANSLUCENT\n );\n}\n\nObject.defineProperties(LabelCollection.prototype, {\n /**\n * Returns the number of labels in this collection. This is commonly used with\n * {@link LabelCollection#get} to iterate over all the labels\n * in the collection.\n * @memberof LabelCollection.prototype\n * @type {Number}\n */\n length: {\n get: function () {\n return this._labels.length;\n },\n },\n});\n\n/**\n * Creates and adds a label with the specified initial properties to the collection.\n * The added label is returned so it can be modified or removed from the collection later.\n *\n * @param {Object} [options] A template describing the label's properties as shown in Example 1.\n * @returns {Label} The label that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten; this operations is <code>O(n)</code> and also incurs\n * CPU to GPU overhead. For best performance, add as many billboards as possible before\n * calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1: Add a label, specifying all the default values.\n * var l = labels.add({\n * show : true,\n * position : Cesium.Cartesian3.ZERO,\n * text : '',\n * font : '30px sans-serif',\n * fillColor : Cesium.Color.WHITE,\n * outlineColor : Cesium.Color.BLACK,\n * outlineWidth : 1.0,\n * showBackground : false,\n * backgroundColor : new Cesium.Color(0.165, 0.165, 0.165, 0.8),\n * backgroundPadding : new Cesium.Cartesian2(7, 5),\n * style : Cesium.LabelStyle.FILL,\n * pixelOffset : Cesium.Cartesian2.ZERO,\n * eyeOffset : Cesium.Cartesian3.ZERO,\n * horizontalOrigin : Cesium.HorizontalOrigin.LEFT,\n * verticalOrigin : Cesium.VerticalOrigin.BASELINE,\n * scale : 1.0,\n * translucencyByDistance : undefined,\n * pixelOffsetScaleByDistance : undefined,\n * heightReference : HeightReference.NONE,\n * distanceDisplayCondition : undefined\n * });\n *\n * @example\n * // Example 2: Specify only the label's cartographic position,\n * // text, and font.\n * var l = labels.add({\n * position : Cesium.Cartesian3.fromRadians(longitude, latitude, height),\n * text : 'Hello World',\n * font : '24px Helvetica',\n * });\n *\n * @see LabelCollection#remove\n * @see LabelCollection#removeAll\n */\nLabelCollection.prototype.add = function (options) {\n var label = new Label(options, this);\n\n this._labels.push(label);\n this._labelsToUpdate.push(label);\n\n return label;\n};\n\n/**\n * Removes a label from the collection. Once removed, a label is no longer usable.\n *\n * @param {Label} label The label to remove.\n * @returns {Boolean} <code>true</code> if the label was removed; <code>false</code> if the label was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead. For\n * best performance, remove as many labels as possible before calling <code>update</code>.\n * If you intend to temporarily hide a label, it is usually more efficient to call\n * {@link Label#show} instead of removing and re-adding the label.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * var l = labels.add(...);\n * labels.remove(l); // Returns true\n *\n * @see LabelCollection#add\n * @see LabelCollection#removeAll\n * @see Label#show\n */\nLabelCollection.prototype.remove = function (label) {\n if (defined(label) && label._labelCollection === this) {\n var index = this._labels.indexOf(label);\n if (index !== -1) {\n this._labels.splice(index, 1);\n destroyLabel(this, label);\n return true;\n }\n }\n return false;\n};\n\n/**\n * Removes all labels from the collection.\n *\n * @performance <code>O(n)</code>. It is more efficient to remove all the labels\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * labels.add(...);\n * labels.add(...);\n * labels.removeAll();\n *\n * @see LabelCollection#add\n * @see LabelCollection#remove\n */\nLabelCollection.prototype.removeAll = function () {\n var labels = this._labels;\n\n for (var i = 0, len = labels.length; i < len; ++i) {\n destroyLabel(this, labels[i]);\n }\n\n labels.length = 0;\n};\n\n/**\n * Check whether this collection contains a given label.\n *\n * @param {Label} label The label to check for.\n * @returns {Boolean} true if this collection contains the label, false otherwise.\n *\n * @see LabelCollection#get\n *\n */\nLabelCollection.prototype.contains = function (label) {\n return defined(label) && label._labelCollection === this;\n};\n\n/**\n * Returns the label in the collection at the specified index. Indices are zero-based\n * and increase as labels are added. Removing a label shifts all labels after\n * it to the left, changing their indices. This function is commonly used with\n * {@link LabelCollection#length} to iterate over all the labels\n * in the collection.\n *\n * @param {Number} index The zero-based index of the billboard.\n *\n * @returns {Label} The label at the specified index.\n *\n * @performance Expected constant time. If labels were removed from the collection and\n * {@link Scene#render} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every label in the collection\n * var len = labels.length;\n * for (var i = 0; i < len; ++i) {\n * var l = billboards.get(i);\n * l.show = !l.show;\n * }\n *\n * @see LabelCollection#length\n */\nLabelCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._labels[index];\n};\n\n/**\n * @private\n *\n */\nLabelCollection.prototype.update = function (frameState) {\n var billboardCollection = this._billboardCollection;\n var backgroundBillboardCollection = this._backgroundBillboardCollection;\n\n billboardCollection.modelMatrix = this.modelMatrix;\n billboardCollection.debugShowBoundingVolume = this.debugShowBoundingVolume;\n backgroundBillboardCollection.modelMatrix = this.modelMatrix;\n backgroundBillboardCollection.debugShowBoundingVolume = this.debugShowBoundingVolume;\n\n var context = frameState.context;\n\n if (!defined(this._textureAtlas)) {\n this._textureAtlas = new TextureAtlas({\n context: context,\n });\n billboardCollection.textureAtlas = this._textureAtlas;\n }\n\n if (!defined(this._backgroundTextureAtlas)) {\n this._backgroundTextureAtlas = new TextureAtlas({\n context: context,\n initialSize: whitePixelSize,\n });\n backgroundBillboardCollection.textureAtlas = this._backgroundTextureAtlas;\n addWhitePixelCanvas(this._backgroundTextureAtlas, this);\n }\n\n var len = this._labelsToUpdate.length;\n for (var i = 0; i < len; ++i) {\n var label = this._labelsToUpdate[i];\n if (label.isDestroyed()) {\n continue;\n }\n\n var preUpdateGlyphCount = label._glyphs.length;\n\n if (label._rebindAllGlyphs) {\n rebindAllGlyphs(this, label);\n label._rebindAllGlyphs = false;\n }\n\n if (label._repositionAllGlyphs) {\n repositionAllGlyphs(label);\n label._repositionAllGlyphs = false;\n }\n\n var glyphCountDifference = label._glyphs.length - preUpdateGlyphCount;\n this._totalGlyphCount += glyphCountDifference;\n }\n\n var blendOption =\n backgroundBillboardCollection.length > 0\n ? BlendOption.TRANSLUCENT\n : this.blendOption;\n billboardCollection.blendOption = blendOption;\n backgroundBillboardCollection.blendOption = blendOption;\n\n billboardCollection._highlightColor = this._highlightColor;\n backgroundBillboardCollection._highlightColor = this._highlightColor;\n\n this._labelsToUpdate.length = 0;\n backgroundBillboardCollection.update(frameState);\n billboardCollection.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see LabelCollection#destroy\n */\nLabelCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * labels = labels && labels.destroy();\n *\n * @see LabelCollection#isDestroyed\n */\nLabelCollection.prototype.destroy = function () {\n this.removeAll();\n this._billboardCollection = this._billboardCollection.destroy();\n this._textureAtlas = this._textureAtlas && this._textureAtlas.destroy();\n this._backgroundBillboardCollection = this._backgroundBillboardCollection.destroy();\n this._backgroundTextureAtlas =\n this._backgroundTextureAtlas && this._backgroundTextureAtlas.destroy();\n\n return destroyObject(this);\n};\nexport default LabelCollection;\n","import arrayRemoveDuplicates from \"../Core/arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PolylinePipeline from \"../Core/PolylinePipeline.js\";\nimport Material from \"./Material.js\";\n\n/**\n * A renderable polyline. Create this by calling {@link PolylineCollection#add}\n *\n * @alias Polyline\n * @internalConstructor\n * @class\n *\n * @param {Object} options Object with the following properties:\n * @param {Boolean} [options.show=true] <code>true</code> if this polyline will be shown; otherwise, <code>false</code>.\n * @param {Number} [options.width=1.0] The width of the polyline in pixels.\n * @param {Boolean} [options.loop=false] Whether a line segment will be added between the last and first line positions to make this line a loop.\n * @param {Material} [options.material=Material.ColorType] The material.\n * @param {Cartesian3[]} [options.positions] The positions.\n * @param {Object} [options.id] The user-defined object to be returned when this polyline is picked.\n * @param {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this polyline will be displayed.\n * @param {PolylineCollection} polylineCollection The renderable polyline collection.\n *\n * @see PolylineCollection\n *\n */\nfunction Polyline(options, polylineCollection) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._show = defaultValue(options.show, true);\n this._width = defaultValue(options.width, 1.0);\n this._loop = defaultValue(options.loop, false);\n this._distanceDisplayCondition = options.distanceDisplayCondition;\n\n this._material = options.material;\n if (!defined(this._material)) {\n this._material = Material.fromType(Material.ColorType, {\n color: new Color(1.0, 1.0, 1.0, 1.0),\n });\n }\n\n var positions = options.positions;\n if (!defined(positions)) {\n positions = [];\n }\n\n this._positions = positions;\n this._actualPositions = arrayRemoveDuplicates(\n positions,\n Cartesian3.equalsEpsilon\n );\n\n if (this._loop && this._actualPositions.length > 2) {\n if (this._actualPositions === this._positions) {\n this._actualPositions = positions.slice();\n }\n this._actualPositions.push(Cartesian3.clone(this._actualPositions[0]));\n }\n\n this._length = this._actualPositions.length;\n this._id = options.id;\n\n var modelMatrix;\n if (defined(polylineCollection)) {\n modelMatrix = Matrix4.clone(polylineCollection.modelMatrix);\n }\n\n this._modelMatrix = modelMatrix;\n this._segments = PolylinePipeline.wrapLongitude(\n this._actualPositions,\n modelMatrix\n );\n\n this._actualLength = undefined;\n\n // eslint-disable-next-line no-use-before-define\n this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n this._polylineCollection = polylineCollection;\n this._dirty = false;\n this._pickId = undefined;\n this._boundingVolume = BoundingSphere.fromPoints(this._actualPositions);\n this._boundingVolumeWC = BoundingSphere.transform(\n this._boundingVolume,\n this._modelMatrix\n );\n this._boundingVolume2D = new BoundingSphere(); // modified in PolylineCollection\n}\n\nvar POSITION_INDEX = (Polyline.POSITION_INDEX = 0);\nvar SHOW_INDEX = (Polyline.SHOW_INDEX = 1);\nvar WIDTH_INDEX = (Polyline.WIDTH_INDEX = 2);\nvar MATERIAL_INDEX = (Polyline.MATERIAL_INDEX = 3);\nvar POSITION_SIZE_INDEX = (Polyline.POSITION_SIZE_INDEX = 4);\nvar DISTANCE_DISPLAY_CONDITION = (Polyline.DISTANCE_DISPLAY_CONDITION = 5);\nvar NUMBER_OF_PROPERTIES = (Polyline.NUMBER_OF_PROPERTIES = 6);\n\nfunction makeDirty(polyline, propertyChanged) {\n ++polyline._propertiesChanged[propertyChanged];\n var polylineCollection = polyline._polylineCollection;\n if (defined(polylineCollection)) {\n polylineCollection._updatePolyline(polyline, propertyChanged);\n polyline._dirty = true;\n }\n}\n\nObject.defineProperties(Polyline.prototype, {\n /**\n * Determines if this polyline will be shown. Use this to hide or show a polyline, instead\n * of removing it and re-adding it to the collection.\n * @memberof Polyline.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (value !== this._show) {\n this._show = value;\n makeDirty(this, SHOW_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the positions of the polyline.\n * @memberof Polyline.prototype\n * @type {Cartesian3[]}\n * @example\n * polyline.positions = Cesium.Cartesian3.fromDegreesArray([\n * 0.0, 0.0,\n * 10.0, 0.0,\n * 0.0, 20.0\n * ]);\n */\n positions: {\n get: function () {\n return this._positions;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var positions = arrayRemoveDuplicates(value, Cartesian3.equalsEpsilon);\n\n if (this._loop && positions.length > 2) {\n if (positions === value) {\n positions = value.slice();\n }\n positions.push(Cartesian3.clone(positions[0]));\n }\n\n if (\n this._actualPositions.length !== positions.length ||\n this._actualPositions.length !== this._length\n ) {\n makeDirty(this, POSITION_SIZE_INDEX);\n }\n\n this._positions = value;\n this._actualPositions = positions;\n this._length = positions.length;\n this._boundingVolume = BoundingSphere.fromPoints(\n this._actualPositions,\n this._boundingVolume\n );\n this._boundingVolumeWC = BoundingSphere.transform(\n this._boundingVolume,\n this._modelMatrix,\n this._boundingVolumeWC\n );\n makeDirty(this, POSITION_INDEX);\n\n this.update();\n },\n },\n\n /**\n * Gets or sets the surface appearance of the polyline. This can be one of several built-in {@link Material} objects or a custom material, scripted with\n * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n * @memberof Polyline.prototype\n * @type {Material}\n */\n material: {\n get: function () {\n return this._material;\n },\n set: function (material) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(material)) {\n throw new DeveloperError(\"material is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._material !== material) {\n this._material = material;\n makeDirty(this, MATERIAL_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the width of the polyline.\n * @memberof Polyline.prototype\n * @type {Number}\n */\n width: {\n get: function () {\n return this._width;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var width = this._width;\n if (value !== width) {\n this._width = value;\n makeDirty(this, WIDTH_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets whether a line segment will be added between the first and last polyline positions.\n * @memberof Polyline.prototype\n * @type {Boolean}\n */\n loop: {\n get: function () {\n return this._loop;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (value !== this._loop) {\n var positions = this._actualPositions;\n if (value) {\n if (\n positions.length > 2 &&\n !Cartesian3.equals(positions[0], positions[positions.length - 1])\n ) {\n if (positions.length === this._positions.length) {\n this._actualPositions = positions = this._positions.slice();\n }\n positions.push(Cartesian3.clone(positions[0]));\n }\n } else if (\n positions.length > 2 &&\n Cartesian3.equals(positions[0], positions[positions.length - 1])\n ) {\n if (positions.length - 1 === this._positions.length) {\n this._actualPositions = this._positions;\n } else {\n positions.pop();\n }\n }\n\n this._loop = value;\n makeDirty(this, POSITION_SIZE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the user-defined value returned when the polyline is picked.\n * @memberof Polyline.prototype\n * @type {*}\n */\n id: {\n get: function () {\n return this._id;\n },\n set: function (value) {\n this._id = value;\n if (defined(this._pickId)) {\n this._pickId.object.id = value;\n }\n },\n },\n\n /**\n * @private\n */\n pickId: {\n get: function () {\n return this._pickId;\n },\n },\n\n /**\n * Gets the destruction status of this polyline\n * @memberof Polyline.prototype\n * @type {Boolean}\n * @default false\n * @private\n */\n isDestroyed: {\n get: function () {\n return !defined(this._polylineCollection);\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this polyline will be displayed.\n * @memberof Polyline.prototype\n * @type {DistanceDisplayCondition}\n * @default undefined\n */\n distanceDisplayCondition: {\n get: function () {\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n if (\n !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n ) {\n this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n value,\n this._distanceDisplayCondition\n );\n makeDirty(this, DISTANCE_DISPLAY_CONDITION);\n }\n },\n },\n});\n\n/**\n * @private\n */\nPolyline.prototype.update = function () {\n var modelMatrix = Matrix4.IDENTITY;\n if (defined(this._polylineCollection)) {\n modelMatrix = this._polylineCollection.modelMatrix;\n }\n\n var segmentPositionsLength = this._segments.positions.length;\n var segmentLengths = this._segments.lengths;\n\n var positionsChanged =\n this._propertiesChanged[POSITION_INDEX] > 0 ||\n this._propertiesChanged[POSITION_SIZE_INDEX] > 0;\n if (!Matrix4.equals(modelMatrix, this._modelMatrix) || positionsChanged) {\n this._segments = PolylinePipeline.wrapLongitude(\n this._actualPositions,\n modelMatrix\n );\n this._boundingVolumeWC = BoundingSphere.transform(\n this._boundingVolume,\n modelMatrix,\n this._boundingVolumeWC\n );\n }\n\n this._modelMatrix = Matrix4.clone(modelMatrix, this._modelMatrix);\n\n if (this._segments.positions.length !== segmentPositionsLength) {\n // number of positions changed\n makeDirty(this, POSITION_SIZE_INDEX);\n } else {\n var length = segmentLengths.length;\n for (var i = 0; i < length; ++i) {\n if (segmentLengths[i] !== this._segments.lengths[i]) {\n // indices changed\n makeDirty(this, POSITION_SIZE_INDEX);\n break;\n }\n }\n }\n};\n\n/**\n * @private\n */\nPolyline.prototype.getPickId = function (context) {\n if (!defined(this._pickId)) {\n this._pickId = context.createPickId({\n primitive: this,\n collection: this._polylineCollection,\n id: this._id,\n });\n }\n return this._pickId;\n};\n\nPolyline.prototype._clean = function () {\n this._dirty = false;\n var properties = this._propertiesChanged;\n for (var k = 0; k < NUMBER_OF_PROPERTIES - 1; ++k) {\n properties[k] = 0;\n }\n};\n\nPolyline.prototype._destroy = function () {\n this._pickId = this._pickId && this._pickId.destroy();\n this._material = this._material && this._material.destroy();\n this._polylineCollection = undefined;\n};\nexport default Polyline;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Plane from \"../Core/Plane.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport PolylineFS from \"../Shaders/PolylineFS.js\";\nimport PolylineVS from \"../Shaders/PolylineVS.js\";\nimport BatchTable from \"./BatchTable.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Material from \"./Material.js\";\nimport Polyline from \"./Polyline.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nvar SHOW_INDEX = Polyline.SHOW_INDEX;\nvar WIDTH_INDEX = Polyline.WIDTH_INDEX;\nvar POSITION_INDEX = Polyline.POSITION_INDEX;\nvar MATERIAL_INDEX = Polyline.MATERIAL_INDEX;\n//POSITION_SIZE_INDEX is needed for when the polyline's position array changes size.\n//When it does, we need to recreate the indicesBuffer.\nvar POSITION_SIZE_INDEX = Polyline.POSITION_SIZE_INDEX;\nvar DISTANCE_DISPLAY_CONDITION = Polyline.DISTANCE_DISPLAY_CONDITION;\nvar NUMBER_OF_PROPERTIES = Polyline.NUMBER_OF_PROPERTIES;\n\nvar attributeLocations = {\n texCoordExpandAndBatchIndex: 0,\n position3DHigh: 1,\n position3DLow: 2,\n position2DHigh: 3,\n position2DLow: 4,\n prevPosition3DHigh: 5,\n prevPosition3DLow: 6,\n prevPosition2DHigh: 7,\n prevPosition2DLow: 8,\n nextPosition3DHigh: 9,\n nextPosition3DLow: 10,\n nextPosition2DHigh: 11,\n nextPosition2DLow: 12,\n};\n\n/**\n * A renderable collection of polylines.\n * <br /><br />\n * <div align=\"center\">\n * <img src=\"Images/Polyline.png\" width=\"400\" height=\"300\" /><br />\n * Example polylines\n * </div>\n * <br /><br />\n * Polylines are added and removed from the collection using {@link PolylineCollection#add}\n * and {@link PolylineCollection#remove}.\n *\n * @alias PolylineCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each polyline from model to world coordinates.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n *\n * @performance For best performance, prefer a few collections, each with many polylines, to\n * many collections with only a few polylines each. Organize collections so that polylines\n * with the same update frequency are in the same collection, i.e., polylines that do not\n * change should be in one collection; polylines that change every frame should be in another\n * collection; and so on.\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#remove\n * @see Polyline\n * @see LabelCollection\n *\n * @example\n * // Create a polyline collection with two polylines\n * var polylines = new Cesium.PolylineCollection();\n * polylines.add({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -75.10, 39.57,\n * -77.02, 38.53,\n * -80.50, 35.14,\n * -80.12, 25.46]),\n * width : 2\n * });\n *\n * polylines.add({\n * positions : Cesium.Cartesian3.fromDegreesArray([\n * -73.10, 37.57,\n * -75.02, 36.53,\n * -78.50, 33.14,\n * -78.12, 23.46]),\n * width : 4\n * });\n */\nfunction PolylineCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The 4x4 transformation matrix that transforms each polyline in this collection from model to world coordinates.\n * When this is the identity matrix, the polylines are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n * @default {@link Matrix4.IDENTITY}\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n this._opaqueRS = undefined;\n this._translucentRS = undefined;\n\n this._colorCommands = [];\n\n this._polylinesUpdated = false;\n this._polylinesRemoved = false;\n this._createVertexArray = false;\n this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n this._polylines = [];\n this._polylineBuckets = {};\n\n // The buffer usage is determined based on the usage of the attribute over time.\n this._positionBufferUsage = {\n bufferUsage: BufferUsage.STATIC_DRAW,\n frameCount: 0,\n };\n\n this._mode = undefined;\n\n this._polylinesToUpdate = [];\n this._vertexArrays = [];\n this._positionBuffer = undefined;\n this._texCoordExpandAndBatchIndexBuffer = undefined;\n\n this._batchTable = undefined;\n this._createBatchTable = false;\n\n // Only used by Vector3DTilePoints\n this._useHighlightColor = false;\n this._highlightColor = Color.clone(Color.WHITE);\n\n var that = this;\n this._uniformMap = {\n u_highlightColor: function () {\n return that._highlightColor;\n },\n };\n}\n\nObject.defineProperties(PolylineCollection.prototype, {\n /**\n * Returns the number of polylines in this collection. This is commonly used with\n * {@link PolylineCollection#get} to iterate over all the polylines\n * in the collection.\n * @memberof PolylineCollection.prototype\n * @type {Number}\n */\n length: {\n get: function () {\n removePolylines(this);\n return this._polylines.length;\n },\n },\n});\n\n/**\n * Creates and adds a polyline with the specified initial properties to the collection.\n * The added polyline is returned so it can be modified or removed from the collection later.\n *\n * @param {Object}[options] A template describing the polyline's properties as shown in Example 1.\n * @returns {Polyline} The polyline that was added to the collection.\n *\n * @performance After calling <code>add</code>, {@link PolylineCollection#update} is called and\n * the collection's vertex buffer is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.\n * For best performance, add as many polylines as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1: Add a polyline, specifying all the default values.\n * var p = polylines.add({\n * show : true,\n * positions : ellipsoid.cartographicArrayToCartesianArray([\n Cesium.Cartographic.fromDegrees(-75.10, 39.57),\n Cesium.Cartographic.fromDegrees(-77.02, 38.53)]),\n * width : 1\n * });\n *\n * @see PolylineCollection#remove\n * @see PolylineCollection#removeAll\n * @see PolylineCollection#update\n */\nPolylineCollection.prototype.add = function (options) {\n var p = new Polyline(options, this);\n p._index = this._polylines.length;\n this._polylines.push(p);\n this._createVertexArray = true;\n this._createBatchTable = true;\n return p;\n};\n\n/**\n * Removes a polyline from the collection.\n *\n * @param {Polyline} polyline The polyline to remove.\n * @returns {Boolean} <code>true</code> if the polyline was removed; <code>false</code> if the polyline was not found in the collection.\n *\n * @performance After calling <code>remove</code>, {@link PolylineCollection#update} is called and\n * the collection's vertex buffer is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.\n * For best performance, remove as many polylines as possible before calling <code>update</code>.\n * If you intend to temporarily hide a polyline, it is usually more efficient to call\n * {@link Polyline#show} instead of removing and re-adding the polyline.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * var p = polylines.add(...);\n * polylines.remove(p); // Returns true\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#removeAll\n * @see PolylineCollection#update\n * @see Polyline#show\n */\nPolylineCollection.prototype.remove = function (polyline) {\n if (this.contains(polyline)) {\n this._polylinesRemoved = true;\n this._createVertexArray = true;\n this._createBatchTable = true;\n if (defined(polyline._bucket)) {\n var bucket = polyline._bucket;\n bucket.shaderProgram =\n bucket.shaderProgram && bucket.shaderProgram.destroy();\n }\n polyline._destroy();\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all polylines from the collection.\n *\n * @performance <code>O(n)</code>. It is more efficient to remove all the polylines\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * polylines.add(...);\n * polylines.add(...);\n * polylines.removeAll();\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#remove\n * @see PolylineCollection#update\n */\nPolylineCollection.prototype.removeAll = function () {\n releaseShaders(this);\n destroyPolylines(this);\n this._polylineBuckets = {};\n this._polylinesRemoved = false;\n this._polylines.length = 0;\n this._polylinesToUpdate.length = 0;\n this._createVertexArray = true;\n};\n\n/**\n * Determines if this collection contains the specified polyline.\n *\n * @param {Polyline} polyline The polyline to check for.\n * @returns {Boolean} true if this collection contains the polyline, false otherwise.\n *\n * @see PolylineCollection#get\n */\nPolylineCollection.prototype.contains = function (polyline) {\n return defined(polyline) && polyline._polylineCollection === this;\n};\n\n/**\n * Returns the polyline in the collection at the specified index. Indices are zero-based\n * and increase as polylines are added. Removing a polyline shifts all polylines after\n * it to the left, changing their indices. This function is commonly used with\n * {@link PolylineCollection#length} to iterate over all the polylines\n * in the collection.\n *\n * @param {Number} index The zero-based index of the polyline.\n * @returns {Polyline} The polyline at the specified index.\n *\n * @performance If polylines were removed from the collection and\n * {@link PolylineCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Toggle the show property of every polyline in the collection\n * var len = polylines.length;\n * for (var i = 0; i < len; ++i) {\n * var p = polylines.get(i);\n * p.show = !p.show;\n * }\n *\n * @see PolylineCollection#length\n */\nPolylineCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n removePolylines(this);\n return this._polylines[index];\n};\n\nfunction createBatchTable(collection, context) {\n if (defined(collection._batchTable)) {\n collection._batchTable.destroy();\n }\n\n var attributes = [\n {\n functionName: \"batchTable_getWidthAndShow\",\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 2,\n },\n {\n functionName: \"batchTable_getPickColor\",\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n componentsPerAttribute: 4,\n normalize: true,\n },\n {\n functionName: \"batchTable_getCenterHigh\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n functionName: \"batchTable_getCenterLowAndRadius\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 4,\n },\n {\n functionName: \"batchTable_getDistanceDisplayCondition\",\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n },\n ];\n\n collection._batchTable = new BatchTable(\n context,\n attributes,\n collection._polylines.length\n );\n}\n\nvar scratchUpdatePolylineEncodedCartesian = new EncodedCartesian3();\nvar scratchUpdatePolylineCartesian4 = new Cartesian4();\nvar scratchNearFarCartesian2 = new Cartesian2();\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\n */\nPolylineCollection.prototype.update = function (frameState) {\n removePolylines(this);\n\n if (this._polylines.length === 0) {\n return;\n }\n\n updateMode(this, frameState);\n\n var context = frameState.context;\n var projection = frameState.mapProjection;\n var polyline;\n var properties = this._propertiesChanged;\n\n if (this._createBatchTable) {\n if (ContextLimits.maximumVertexTextureImageUnits === 0) {\n throw new RuntimeError(\n \"Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.\"\n );\n }\n createBatchTable(this, context);\n this._createBatchTable = false;\n }\n\n if (this._createVertexArray || computeNewBuffersUsage(this)) {\n createVertexArrays(this, context, projection);\n } else if (this._polylinesUpdated) {\n // Polylines were modified, but no polylines were added or removed.\n var polylinesToUpdate = this._polylinesToUpdate;\n if (this._mode !== SceneMode.SCENE3D) {\n var updateLength = polylinesToUpdate.length;\n for (var i = 0; i < updateLength; ++i) {\n polyline = polylinesToUpdate[i];\n polyline.update();\n }\n }\n\n // if a polyline's positions size changes, we need to recreate the vertex arrays and vertex buffers because the indices will be different.\n // if a polyline's material changes, we need to recreate the VAOs and VBOs because they will be batched differently.\n if (properties[POSITION_SIZE_INDEX] || properties[MATERIAL_INDEX]) {\n createVertexArrays(this, context, projection);\n } else {\n var length = polylinesToUpdate.length;\n var polylineBuckets = this._polylineBuckets;\n for (var ii = 0; ii < length; ++ii) {\n polyline = polylinesToUpdate[ii];\n properties = polyline._propertiesChanged;\n var bucket = polyline._bucket;\n var index = 0;\n for (var x in polylineBuckets) {\n if (polylineBuckets.hasOwnProperty(x)) {\n if (polylineBuckets[x] === bucket) {\n if (properties[POSITION_INDEX]) {\n bucket.writeUpdate(\n index,\n polyline,\n this._positionBuffer,\n projection\n );\n }\n break;\n }\n index += polylineBuckets[x].lengthOfPositions;\n }\n }\n\n if (properties[SHOW_INDEX] || properties[WIDTH_INDEX]) {\n this._batchTable.setBatchedAttribute(\n polyline._index,\n 0,\n new Cartesian2(polyline._width, polyline._show)\n );\n }\n\n if (this._batchTable.attributes.length > 2) {\n if (properties[POSITION_INDEX] || properties[POSITION_SIZE_INDEX]) {\n var boundingSphere =\n frameState.mode === SceneMode.SCENE2D\n ? polyline._boundingVolume2D\n : polyline._boundingVolumeWC;\n var encodedCenter = EncodedCartesian3.fromCartesian(\n boundingSphere.center,\n scratchUpdatePolylineEncodedCartesian\n );\n var low = Cartesian4.fromElements(\n encodedCenter.low.x,\n encodedCenter.low.y,\n encodedCenter.low.z,\n boundingSphere.radius,\n scratchUpdatePolylineCartesian4\n );\n this._batchTable.setBatchedAttribute(\n polyline._index,\n 2,\n encodedCenter.high\n );\n this._batchTable.setBatchedAttribute(polyline._index, 3, low);\n }\n\n if (properties[DISTANCE_DISPLAY_CONDITION]) {\n var nearFarCartesian = scratchNearFarCartesian2;\n nearFarCartesian.x = 0.0;\n nearFarCartesian.y = Number.MAX_VALUE;\n\n var distanceDisplayCondition = polyline.distanceDisplayCondition;\n if (defined(distanceDisplayCondition)) {\n nearFarCartesian.x = distanceDisplayCondition.near;\n nearFarCartesian.y = distanceDisplayCondition.far;\n }\n\n this._batchTable.setBatchedAttribute(\n polyline._index,\n 4,\n nearFarCartesian\n );\n }\n }\n\n polyline._clean();\n }\n }\n polylinesToUpdate.length = 0;\n this._polylinesUpdated = false;\n }\n\n properties = this._propertiesChanged;\n for (var k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n properties[k] = 0;\n }\n\n var modelMatrix = Matrix4.IDENTITY;\n if (frameState.mode === SceneMode.SCENE3D) {\n modelMatrix = this.modelMatrix;\n }\n\n var pass = frameState.passes;\n var useDepthTest = frameState.morphTime !== 0.0;\n\n if (\n !defined(this._opaqueRS) ||\n this._opaqueRS.depthTest.enabled !== useDepthTest\n ) {\n this._opaqueRS = RenderState.fromCache({\n depthMask: useDepthTest,\n depthTest: {\n enabled: useDepthTest,\n },\n });\n }\n\n if (\n !defined(this._translucentRS) ||\n this._translucentRS.depthTest.enabled !== useDepthTest\n ) {\n this._translucentRS = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n depthMask: !useDepthTest,\n depthTest: {\n enabled: useDepthTest,\n },\n });\n }\n\n this._batchTable.update(frameState);\n\n if (pass.render || pass.pick) {\n var colorList = this._colorCommands;\n createCommandLists(this, frameState, colorList, modelMatrix);\n }\n};\n\nvar boundingSphereScratch = new BoundingSphere();\nvar boundingSphereScratch2 = new BoundingSphere();\n\nfunction createCommandLists(\n polylineCollection,\n frameState,\n commands,\n modelMatrix\n) {\n var context = frameState.context;\n var commandList = frameState.commandList;\n\n var commandsLength = commands.length;\n var commandIndex = 0;\n var cloneBoundingSphere = true;\n\n var vertexArrays = polylineCollection._vertexArrays;\n var debugShowBoundingVolume = polylineCollection.debugShowBoundingVolume;\n\n var batchTable = polylineCollection._batchTable;\n var uniformCallback = batchTable.getUniformMapCallback();\n\n var length = vertexArrays.length;\n for (var m = 0; m < length; ++m) {\n var va = vertexArrays[m];\n var buckets = va.buckets;\n var bucketLength = buckets.length;\n\n for (var n = 0; n < bucketLength; ++n) {\n var bucketLocator = buckets[n];\n\n var offset = bucketLocator.offset;\n var sp = bucketLocator.bucket.shaderProgram;\n\n var polylines = bucketLocator.bucket.polylines;\n var polylineLength = polylines.length;\n var currentId;\n var currentMaterial;\n var count = 0;\n var command;\n var uniformMap;\n\n for (var s = 0; s < polylineLength; ++s) {\n var polyline = polylines[s];\n var mId = createMaterialId(polyline._material);\n if (mId !== currentId) {\n if (defined(currentId) && count > 0) {\n var translucent = currentMaterial.isTranslucent();\n\n if (commandIndex >= commandsLength) {\n command = new DrawCommand({\n owner: polylineCollection,\n });\n commands.push(command);\n } else {\n command = commands[commandIndex];\n }\n\n ++commandIndex;\n\n uniformMap = combine(\n uniformCallback(currentMaterial._uniforms),\n polylineCollection._uniformMap\n );\n\n command.boundingVolume = BoundingSphere.clone(\n boundingSphereScratch,\n command.boundingVolume\n );\n command.modelMatrix = modelMatrix;\n command.shaderProgram = sp;\n command.vertexArray = va.va;\n command.renderState = translucent\n ? polylineCollection._translucentRS\n : polylineCollection._opaqueRS;\n command.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n command.debugShowBoundingVolume = debugShowBoundingVolume;\n command.pickId = \"v_pickColor\";\n\n command.uniformMap = uniformMap;\n command.count = count;\n command.offset = offset;\n\n offset += count;\n count = 0;\n cloneBoundingSphere = true;\n\n commandList.push(command);\n }\n\n currentMaterial = polyline._material;\n currentMaterial.update(context);\n currentId = mId;\n }\n\n var locators = polyline._locatorBuckets;\n var locatorLength = locators.length;\n for (var t = 0; t < locatorLength; ++t) {\n var locator = locators[t];\n if (locator.locator === bucketLocator) {\n count += locator.count;\n }\n }\n\n var boundingVolume;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingVolume = polyline._boundingVolumeWC;\n } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n boundingVolume = polyline._boundingVolume2D;\n } else if (frameState.mode === SceneMode.SCENE2D) {\n if (defined(polyline._boundingVolume2D)) {\n boundingVolume = BoundingSphere.clone(\n polyline._boundingVolume2D,\n boundingSphereScratch2\n );\n boundingVolume.center.x = 0.0;\n }\n } else if (\n defined(polyline._boundingVolumeWC) &&\n defined(polyline._boundingVolume2D)\n ) {\n boundingVolume = BoundingSphere.union(\n polyline._boundingVolumeWC,\n polyline._boundingVolume2D,\n boundingSphereScratch2\n );\n }\n\n if (cloneBoundingSphere) {\n cloneBoundingSphere = false;\n BoundingSphere.clone(boundingVolume, boundingSphereScratch);\n } else {\n BoundingSphere.union(\n boundingVolume,\n boundingSphereScratch,\n boundingSphereScratch\n );\n }\n }\n\n if (defined(currentId) && count > 0) {\n if (commandIndex >= commandsLength) {\n command = new DrawCommand({\n owner: polylineCollection,\n });\n commands.push(command);\n } else {\n command = commands[commandIndex];\n }\n\n ++commandIndex;\n\n uniformMap = combine(\n uniformCallback(currentMaterial._uniforms),\n polylineCollection._uniformMap\n );\n\n command.boundingVolume = BoundingSphere.clone(\n boundingSphereScratch,\n command.boundingVolume\n );\n command.modelMatrix = modelMatrix;\n command.shaderProgram = sp;\n command.vertexArray = va.va;\n command.renderState = currentMaterial.isTranslucent()\n ? polylineCollection._translucentRS\n : polylineCollection._opaqueRS;\n command.pass = currentMaterial.isTranslucent()\n ? Pass.TRANSLUCENT\n : Pass.OPAQUE;\n command.debugShowBoundingVolume = debugShowBoundingVolume;\n command.pickId = \"v_pickColor\";\n\n command.uniformMap = uniformMap;\n command.count = count;\n command.offset = offset;\n\n cloneBoundingSphere = true;\n\n commandList.push(command);\n }\n\n currentId = undefined;\n }\n }\n\n commands.length = commandIndex;\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PolylineCollection#destroy\n */\nPolylineCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * polylines = polylines && polylines.destroy();\n *\n * @see PolylineCollection#isDestroyed\n */\nPolylineCollection.prototype.destroy = function () {\n destroyVertexArrays(this);\n releaseShaders(this);\n destroyPolylines(this);\n this._batchTable = this._batchTable && this._batchTable.destroy();\n return destroyObject(this);\n};\n\nfunction computeNewBuffersUsage(collection) {\n var usageChanged = false;\n var properties = collection._propertiesChanged;\n var bufferUsage = collection._positionBufferUsage;\n if (properties[POSITION_INDEX]) {\n if (bufferUsage.bufferUsage !== BufferUsage.STREAM_DRAW) {\n usageChanged = true;\n bufferUsage.bufferUsage = BufferUsage.STREAM_DRAW;\n bufferUsage.frameCount = 100;\n } else {\n bufferUsage.frameCount = 100;\n }\n } else if (bufferUsage.bufferUsage !== BufferUsage.STATIC_DRAW) {\n if (bufferUsage.frameCount === 0) {\n usageChanged = true;\n bufferUsage.bufferUsage = BufferUsage.STATIC_DRAW;\n } else {\n bufferUsage.frameCount--;\n }\n }\n\n return usageChanged;\n}\n\nvar emptyVertexBuffer = [0.0, 0.0, 0.0];\n\nfunction createVertexArrays(collection, context, projection) {\n collection._createVertexArray = false;\n releaseShaders(collection);\n destroyVertexArrays(collection);\n sortPolylinesIntoBuckets(collection);\n\n //stores all of the individual indices arrays.\n var totalIndices = [[]];\n var indices = totalIndices[0];\n\n var batchTable = collection._batchTable;\n var useHighlightColor = collection._useHighlightColor;\n\n //used to determine the vertexBuffer offset if the indicesArray goes over 64k.\n //if it's the same polyline while it goes over 64k, the offset needs to backtrack componentsPerAttribute * componentDatatype bytes\n //so that the polyline looks contiguous.\n //if the polyline ends at the 64k mark, then the offset is just 64k * componentsPerAttribute * componentDatatype\n var vertexBufferOffset = [0];\n var offset = 0;\n var vertexArrayBuckets = [[]];\n var totalLength = 0;\n var polylineBuckets = collection._polylineBuckets;\n var x;\n var bucket;\n for (x in polylineBuckets) {\n if (polylineBuckets.hasOwnProperty(x)) {\n bucket = polylineBuckets[x];\n bucket.updateShader(context, batchTable, useHighlightColor);\n totalLength += bucket.lengthOfPositions;\n }\n }\n\n if (totalLength > 0) {\n var mode = collection._mode;\n\n var positionArray = new Float32Array(6 * totalLength * 3);\n var texCoordExpandAndBatchIndexArray = new Float32Array(totalLength * 4);\n var position3DArray;\n\n var positionIndex = 0;\n var colorIndex = 0;\n var texCoordExpandAndBatchIndexIndex = 0;\n for (x in polylineBuckets) {\n if (polylineBuckets.hasOwnProperty(x)) {\n bucket = polylineBuckets[x];\n bucket.write(\n positionArray,\n texCoordExpandAndBatchIndexArray,\n positionIndex,\n colorIndex,\n texCoordExpandAndBatchIndexIndex,\n batchTable,\n context,\n projection\n );\n\n if (mode === SceneMode.MORPHING) {\n if (!defined(position3DArray)) {\n position3DArray = new Float32Array(6 * totalLength * 3);\n }\n bucket.writeForMorph(position3DArray, positionIndex);\n }\n\n var bucketLength = bucket.lengthOfPositions;\n positionIndex += 6 * bucketLength * 3;\n colorIndex += bucketLength * 4;\n texCoordExpandAndBatchIndexIndex += bucketLength * 4;\n offset = bucket.updateIndices(\n totalIndices,\n vertexBufferOffset,\n vertexArrayBuckets,\n offset\n );\n }\n }\n\n var positionBufferUsage = collection._positionBufferUsage.bufferUsage;\n var texCoordExpandAndBatchIndexBufferUsage = BufferUsage.STATIC_DRAW;\n\n collection._positionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: positionArray,\n usage: positionBufferUsage,\n });\n var position3DBuffer;\n if (defined(position3DArray)) {\n position3DBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: position3DArray,\n usage: positionBufferUsage,\n });\n }\n collection._texCoordExpandAndBatchIndexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: texCoordExpandAndBatchIndexArray,\n usage: texCoordExpandAndBatchIndexBufferUsage,\n });\n\n var positionSizeInBytes = 3 * Float32Array.BYTES_PER_ELEMENT;\n var texCoordExpandAndBatchIndexSizeInBytes =\n 4 * Float32Array.BYTES_PER_ELEMENT;\n\n var vbo = 0;\n var numberOfIndicesArrays = totalIndices.length;\n for (var k = 0; k < numberOfIndicesArrays; ++k) {\n indices = totalIndices[k];\n\n if (indices.length > 0) {\n var indicesArray = new Uint16Array(indices);\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indicesArray,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n\n vbo += vertexBufferOffset[k];\n\n var positionHighOffset =\n 6 *\n (k * (positionSizeInBytes * CesiumMath.SIXTY_FOUR_KILOBYTES) -\n vbo * positionSizeInBytes); //componentsPerAttribute(3) * componentDatatype(4)\n var positionLowOffset = positionSizeInBytes + positionHighOffset;\n var prevPositionHighOffset = positionSizeInBytes + positionLowOffset;\n var prevPositionLowOffset =\n positionSizeInBytes + prevPositionHighOffset;\n var nextPositionHighOffset =\n positionSizeInBytes + prevPositionLowOffset;\n var nextPositionLowOffset =\n positionSizeInBytes + nextPositionHighOffset;\n var vertexTexCoordExpandAndBatchIndexBufferOffset =\n k *\n (texCoordExpandAndBatchIndexSizeInBytes *\n CesiumMath.SIXTY_FOUR_KILOBYTES) -\n vbo * texCoordExpandAndBatchIndexSizeInBytes;\n\n var attributes = [\n {\n index: attributeLocations.position3DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: positionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.position3DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: positionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.position2DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: positionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.position2DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: positionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.prevPosition3DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: prevPositionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.prevPosition3DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: prevPositionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.prevPosition2DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: prevPositionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.prevPosition2DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: prevPositionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.nextPosition3DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: nextPositionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.nextPosition3DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: nextPositionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.nextPosition2DHigh,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: nextPositionHighOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.nextPosition2DLow,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n offsetInBytes: nextPositionLowOffset,\n strideInBytes: 6 * positionSizeInBytes,\n },\n {\n index: attributeLocations.texCoordExpandAndBatchIndex,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n vertexBuffer: collection._texCoordExpandAndBatchIndexBuffer,\n offsetInBytes: vertexTexCoordExpandAndBatchIndexBufferOffset,\n },\n ];\n\n var buffer3D;\n var bufferProperty3D;\n var buffer2D;\n var bufferProperty2D;\n\n if (mode === SceneMode.SCENE3D) {\n buffer3D = collection._positionBuffer;\n bufferProperty3D = \"vertexBuffer\";\n buffer2D = emptyVertexBuffer;\n bufferProperty2D = \"value\";\n } else if (\n mode === SceneMode.SCENE2D ||\n mode === SceneMode.COLUMBUS_VIEW\n ) {\n buffer3D = emptyVertexBuffer;\n bufferProperty3D = \"value\";\n buffer2D = collection._positionBuffer;\n bufferProperty2D = \"vertexBuffer\";\n } else {\n buffer3D = position3DBuffer;\n bufferProperty3D = \"vertexBuffer\";\n buffer2D = collection._positionBuffer;\n bufferProperty2D = \"vertexBuffer\";\n }\n\n attributes[0][bufferProperty3D] = buffer3D;\n attributes[1][bufferProperty3D] = buffer3D;\n attributes[2][bufferProperty2D] = buffer2D;\n attributes[3][bufferProperty2D] = buffer2D;\n attributes[4][bufferProperty3D] = buffer3D;\n attributes[5][bufferProperty3D] = buffer3D;\n attributes[6][bufferProperty2D] = buffer2D;\n attributes[7][bufferProperty2D] = buffer2D;\n attributes[8][bufferProperty3D] = buffer3D;\n attributes[9][bufferProperty3D] = buffer3D;\n attributes[10][bufferProperty2D] = buffer2D;\n attributes[11][bufferProperty2D] = buffer2D;\n\n var va = new VertexArray({\n context: context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n });\n collection._vertexArrays.push({\n va: va,\n buckets: vertexArrayBuckets[k],\n });\n }\n }\n }\n}\n\nfunction replacer(key, value) {\n if (value instanceof Texture) {\n return value.id;\n }\n\n return value;\n}\n\nvar scratchUniformArray = [];\nfunction createMaterialId(material) {\n var uniforms = Material._uniformList[material.type];\n var length = uniforms.length;\n scratchUniformArray.length = 2.0 * length;\n\n var index = 0;\n for (var i = 0; i < length; ++i) {\n var uniform = uniforms[i];\n scratchUniformArray[index] = uniform;\n scratchUniformArray[index + 1] = material._uniforms[uniform]();\n index += 2;\n }\n\n return material.type + \":\" + JSON.stringify(scratchUniformArray, replacer);\n}\n\nfunction sortPolylinesIntoBuckets(collection) {\n var mode = collection._mode;\n var modelMatrix = collection._modelMatrix;\n\n var polylineBuckets = (collection._polylineBuckets = {});\n var polylines = collection._polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n var p = polylines[i];\n if (p._actualPositions.length > 1) {\n p.update();\n var material = p.material;\n var value = polylineBuckets[material.type];\n if (!defined(value)) {\n value = polylineBuckets[material.type] = new PolylineBucket(\n material,\n mode,\n modelMatrix\n );\n }\n value.addPolyline(p);\n }\n }\n}\n\nfunction updateMode(collection, frameState) {\n var mode = frameState.mode;\n\n if (\n collection._mode !== mode ||\n !Matrix4.equals(collection._modelMatrix, collection.modelMatrix)\n ) {\n collection._mode = mode;\n collection._modelMatrix = Matrix4.clone(collection.modelMatrix);\n collection._createVertexArray = true;\n }\n}\n\nfunction removePolylines(collection) {\n if (collection._polylinesRemoved) {\n collection._polylinesRemoved = false;\n var definedPolylines = [];\n var definedPolylinesToUpdate = [];\n var polyIndex = 0;\n var polyline;\n\n var length = collection._polylines.length;\n for (var i = 0; i < length; ++i) {\n polyline = collection._polylines[i];\n if (!polyline.isDestroyed) {\n polyline._index = polyIndex++;\n definedPolylinesToUpdate.push(polyline);\n definedPolylines.push(polyline);\n }\n }\n\n collection._polylines = definedPolylines;\n collection._polylinesToUpdate = definedPolylinesToUpdate;\n }\n}\n\nfunction releaseShaders(collection) {\n var polylines = collection._polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n if (!polylines[i].isDestroyed) {\n var bucket = polylines[i]._bucket;\n if (defined(bucket)) {\n bucket.shaderProgram =\n bucket.shaderProgram && bucket.shaderProgram.destroy();\n }\n }\n }\n}\n\nfunction destroyVertexArrays(collection) {\n var length = collection._vertexArrays.length;\n for (var t = 0; t < length; ++t) {\n collection._vertexArrays[t].va.destroy();\n }\n collection._vertexArrays.length = 0;\n}\n\nPolylineCollection.prototype._updatePolyline = function (\n polyline,\n propertyChanged\n) {\n this._polylinesUpdated = true;\n if (!polyline._dirty) {\n this._polylinesToUpdate.push(polyline);\n }\n ++this._propertiesChanged[propertyChanged];\n};\n\nfunction destroyPolylines(collection) {\n var polylines = collection._polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n if (!polylines[i].isDestroyed) {\n polylines[i]._destroy();\n }\n }\n}\n\nfunction VertexArrayBucketLocator(count, offset, bucket) {\n this.count = count;\n this.offset = offset;\n this.bucket = bucket;\n}\n\nfunction PolylineBucket(material, mode, modelMatrix) {\n this.polylines = [];\n this.lengthOfPositions = 0;\n this.material = material;\n this.shaderProgram = undefined;\n this.mode = mode;\n this.modelMatrix = modelMatrix;\n}\n\nPolylineBucket.prototype.addPolyline = function (p) {\n var polylines = this.polylines;\n polylines.push(p);\n p._actualLength = this.getPolylinePositionsLength(p);\n this.lengthOfPositions += p._actualLength;\n p._bucket = this;\n};\n\nPolylineBucket.prototype.updateShader = function (\n context,\n batchTable,\n useHighlightColor\n) {\n if (defined(this.shaderProgram)) {\n return;\n }\n\n var defines = [\"DISTANCE_DISPLAY_CONDITION\"];\n if (useHighlightColor) {\n defines.push(\"VECTOR_TILE\");\n }\n\n // Check for use of v_polylineAngle in material shader\n if (\n this.material.shaderSource.search(/varying\\s+float\\s+v_polylineAngle;/g) !==\n -1\n ) {\n defines.push(\"POLYLINE_DASH\");\n }\n\n if (!FeatureDetection.isInternetExplorer()) {\n defines.push(\"CLIP_POLYLINE\");\n }\n\n var fs = new ShaderSource({\n defines: defines,\n sources: [\n \"varying vec4 v_pickColor;\\n\",\n this.material.shaderSource,\n PolylineFS,\n ],\n });\n\n var vsSource = batchTable.getVertexShaderCallback()(PolylineVS);\n var vs = new ShaderSource({\n defines: defines,\n sources: [PolylineCommon, vsSource],\n });\n\n this.shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n};\n\nfunction intersectsIDL(polyline) {\n return (\n Cartesian3.dot(Cartesian3.UNIT_X, polyline._boundingVolume.center) < 0 ||\n polyline._boundingVolume.intersectPlane(Plane.ORIGIN_ZX_PLANE) ===\n Intersect.INTERSECTING\n );\n}\n\nPolylineBucket.prototype.getPolylinePositionsLength = function (polyline) {\n var length;\n if (this.mode === SceneMode.SCENE3D || !intersectsIDL(polyline)) {\n length = polyline._actualPositions.length;\n return length * 4.0 - 4.0;\n }\n\n var count = 0;\n var segmentLengths = polyline._segments.lengths;\n length = segmentLengths.length;\n for (var i = 0; i < length; ++i) {\n count += segmentLengths[i] * 4.0 - 4.0;\n }\n\n return count;\n};\n\nvar scratchWritePosition = new Cartesian3();\nvar scratchWritePrevPosition = new Cartesian3();\nvar scratchWriteNextPosition = new Cartesian3();\nvar scratchWriteVector = new Cartesian3();\nvar scratchPickColorCartesian = new Cartesian4();\nvar scratchWidthShowCartesian = new Cartesian2();\n\nPolylineBucket.prototype.write = function (\n positionArray,\n texCoordExpandAndBatchIndexArray,\n positionIndex,\n colorIndex,\n texCoordExpandAndBatchIndexIndex,\n batchTable,\n context,\n projection\n) {\n var mode = this.mode;\n var maxLon = projection.ellipsoid.maximumRadius * CesiumMath.PI;\n\n var polylines = this.polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n var polyline = polylines[i];\n var width = polyline.width;\n var show = polyline.show && width > 0.0;\n var polylineBatchIndex = polyline._index;\n var segments = this.getSegments(polyline, projection);\n var positions = segments.positions;\n var lengths = segments.lengths;\n var positionsLength = positions.length;\n\n var pickColor = polyline.getPickId(context).color;\n\n var segmentIndex = 0;\n var count = 0;\n var position;\n\n for (var j = 0; j < positionsLength; ++j) {\n if (j === 0) {\n if (polyline._loop) {\n position = positions[positionsLength - 2];\n } else {\n position = scratchWriteVector;\n Cartesian3.subtract(positions[0], positions[1], position);\n Cartesian3.add(positions[0], position, position);\n }\n } else {\n position = positions[j - 1];\n }\n\n Cartesian3.clone(position, scratchWritePrevPosition);\n Cartesian3.clone(positions[j], scratchWritePosition);\n\n if (j === positionsLength - 1) {\n if (polyline._loop) {\n position = positions[1];\n } else {\n position = scratchWriteVector;\n Cartesian3.subtract(\n positions[positionsLength - 1],\n positions[positionsLength - 2],\n position\n );\n Cartesian3.add(positions[positionsLength - 1], position, position);\n }\n } else {\n position = positions[j + 1];\n }\n\n Cartesian3.clone(position, scratchWriteNextPosition);\n\n var segmentLength = lengths[segmentIndex];\n if (j === count + segmentLength) {\n count += segmentLength;\n ++segmentIndex;\n }\n\n var segmentStart = j - count === 0;\n var segmentEnd = j === count + lengths[segmentIndex] - 1;\n\n if (mode === SceneMode.SCENE2D) {\n scratchWritePrevPosition.z = 0.0;\n scratchWritePosition.z = 0.0;\n scratchWriteNextPosition.z = 0.0;\n }\n\n if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n if (\n (segmentStart || segmentEnd) &&\n maxLon - Math.abs(scratchWritePosition.x) < 1.0\n ) {\n if (\n (scratchWritePosition.x < 0.0 &&\n scratchWritePrevPosition.x > 0.0) ||\n (scratchWritePosition.x > 0.0 && scratchWritePrevPosition.x < 0.0)\n ) {\n Cartesian3.clone(scratchWritePosition, scratchWritePrevPosition);\n }\n\n if (\n (scratchWritePosition.x < 0.0 &&\n scratchWriteNextPosition.x > 0.0) ||\n (scratchWritePosition.x > 0.0 && scratchWriteNextPosition.x < 0.0)\n ) {\n Cartesian3.clone(scratchWritePosition, scratchWriteNextPosition);\n }\n }\n }\n\n var startK = segmentStart ? 2 : 0;\n var endK = segmentEnd ? 2 : 4;\n\n for (var k = startK; k < endK; ++k) {\n EncodedCartesian3.writeElements(\n scratchWritePosition,\n positionArray,\n positionIndex\n );\n EncodedCartesian3.writeElements(\n scratchWritePrevPosition,\n positionArray,\n positionIndex + 6\n );\n EncodedCartesian3.writeElements(\n scratchWriteNextPosition,\n positionArray,\n positionIndex + 12\n );\n\n var direction = k - 2 < 0 ? -1.0 : 1.0;\n texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex] =\n j / (positionsLength - 1); // s tex coord\n texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex + 1] =\n 2 * (k % 2) - 1; // expand direction\n texCoordExpandAndBatchIndexArray[\n texCoordExpandAndBatchIndexIndex + 2\n ] = direction;\n texCoordExpandAndBatchIndexArray[\n texCoordExpandAndBatchIndexIndex + 3\n ] = polylineBatchIndex;\n\n positionIndex += 6 * 3;\n texCoordExpandAndBatchIndexIndex += 4;\n }\n }\n\n var colorCartesian = scratchPickColorCartesian;\n colorCartesian.x = Color.floatToByte(pickColor.red);\n colorCartesian.y = Color.floatToByte(pickColor.green);\n colorCartesian.z = Color.floatToByte(pickColor.blue);\n colorCartesian.w = Color.floatToByte(pickColor.alpha);\n\n var widthShowCartesian = scratchWidthShowCartesian;\n widthShowCartesian.x = width;\n widthShowCartesian.y = show ? 1.0 : 0.0;\n\n var boundingSphere =\n mode === SceneMode.SCENE2D\n ? polyline._boundingVolume2D\n : polyline._boundingVolumeWC;\n var encodedCenter = EncodedCartesian3.fromCartesian(\n boundingSphere.center,\n scratchUpdatePolylineEncodedCartesian\n );\n var high = encodedCenter.high;\n var low = Cartesian4.fromElements(\n encodedCenter.low.x,\n encodedCenter.low.y,\n encodedCenter.low.z,\n boundingSphere.radius,\n scratchUpdatePolylineCartesian4\n );\n\n var nearFarCartesian = scratchNearFarCartesian2;\n nearFarCartesian.x = 0.0;\n nearFarCartesian.y = Number.MAX_VALUE;\n\n var distanceDisplayCondition = polyline.distanceDisplayCondition;\n if (defined(distanceDisplayCondition)) {\n nearFarCartesian.x = distanceDisplayCondition.near;\n nearFarCartesian.y = distanceDisplayCondition.far;\n }\n\n batchTable.setBatchedAttribute(polylineBatchIndex, 0, widthShowCartesian);\n batchTable.setBatchedAttribute(polylineBatchIndex, 1, colorCartesian);\n\n if (batchTable.attributes.length > 2) {\n batchTable.setBatchedAttribute(polylineBatchIndex, 2, high);\n batchTable.setBatchedAttribute(polylineBatchIndex, 3, low);\n batchTable.setBatchedAttribute(polylineBatchIndex, 4, nearFarCartesian);\n }\n }\n};\n\nvar morphPositionScratch = new Cartesian3();\nvar morphPrevPositionScratch = new Cartesian3();\nvar morphNextPositionScratch = new Cartesian3();\nvar morphVectorScratch = new Cartesian3();\n\nPolylineBucket.prototype.writeForMorph = function (\n positionArray,\n positionIndex\n) {\n var modelMatrix = this.modelMatrix;\n var polylines = this.polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n var polyline = polylines[i];\n var positions = polyline._segments.positions;\n var lengths = polyline._segments.lengths;\n var positionsLength = positions.length;\n\n var segmentIndex = 0;\n var count = 0;\n\n for (var j = 0; j < positionsLength; ++j) {\n var prevPosition;\n if (j === 0) {\n if (polyline._loop) {\n prevPosition = positions[positionsLength - 2];\n } else {\n prevPosition = morphVectorScratch;\n Cartesian3.subtract(positions[0], positions[1], prevPosition);\n Cartesian3.add(positions[0], prevPosition, prevPosition);\n }\n } else {\n prevPosition = positions[j - 1];\n }\n\n prevPosition = Matrix4.multiplyByPoint(\n modelMatrix,\n prevPosition,\n morphPrevPositionScratch\n );\n\n var position = Matrix4.multiplyByPoint(\n modelMatrix,\n positions[j],\n morphPositionScratch\n );\n\n var nextPosition;\n if (j === positionsLength - 1) {\n if (polyline._loop) {\n nextPosition = positions[1];\n } else {\n nextPosition = morphVectorScratch;\n Cartesian3.subtract(\n positions[positionsLength - 1],\n positions[positionsLength - 2],\n nextPosition\n );\n Cartesian3.add(\n positions[positionsLength - 1],\n nextPosition,\n nextPosition\n );\n }\n } else {\n nextPosition = positions[j + 1];\n }\n\n nextPosition = Matrix4.multiplyByPoint(\n modelMatrix,\n nextPosition,\n morphNextPositionScratch\n );\n\n var segmentLength = lengths[segmentIndex];\n if (j === count + segmentLength) {\n count += segmentLength;\n ++segmentIndex;\n }\n\n var segmentStart = j - count === 0;\n var segmentEnd = j === count + lengths[segmentIndex] - 1;\n\n var startK = segmentStart ? 2 : 0;\n var endK = segmentEnd ? 2 : 4;\n\n for (var k = startK; k < endK; ++k) {\n EncodedCartesian3.writeElements(position, positionArray, positionIndex);\n EncodedCartesian3.writeElements(\n prevPosition,\n positionArray,\n positionIndex + 6\n );\n EncodedCartesian3.writeElements(\n nextPosition,\n positionArray,\n positionIndex + 12\n );\n\n positionIndex += 6 * 3;\n }\n }\n }\n};\n\nvar scratchSegmentLengths = new Array(1);\n\nPolylineBucket.prototype.updateIndices = function (\n totalIndices,\n vertexBufferOffset,\n vertexArrayBuckets,\n offset\n) {\n var vaCount = vertexArrayBuckets.length - 1;\n var bucketLocator = new VertexArrayBucketLocator(0, offset, this);\n vertexArrayBuckets[vaCount].push(bucketLocator);\n var count = 0;\n var indices = totalIndices[totalIndices.length - 1];\n var indicesCount = 0;\n if (indices.length > 0) {\n indicesCount = indices[indices.length - 1] + 1;\n }\n var polylines = this.polylines;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n var polyline = polylines[i];\n polyline._locatorBuckets = [];\n\n var segments;\n if (this.mode === SceneMode.SCENE3D) {\n segments = scratchSegmentLengths;\n var positionsLength = polyline._actualPositions.length;\n if (positionsLength > 0) {\n segments[0] = positionsLength;\n } else {\n continue;\n }\n } else {\n segments = polyline._segments.lengths;\n }\n\n var numberOfSegments = segments.length;\n if (numberOfSegments > 0) {\n var segmentIndexCount = 0;\n for (var j = 0; j < numberOfSegments; ++j) {\n var segmentLength = segments[j] - 1.0;\n for (var k = 0; k < segmentLength; ++k) {\n if (indicesCount + 4 > CesiumMath.SIXTY_FOUR_KILOBYTES) {\n polyline._locatorBuckets.push({\n locator: bucketLocator,\n count: segmentIndexCount,\n });\n segmentIndexCount = 0;\n vertexBufferOffset.push(4);\n indices = [];\n totalIndices.push(indices);\n indicesCount = 0;\n bucketLocator.count = count;\n count = 0;\n offset = 0;\n bucketLocator = new VertexArrayBucketLocator(0, 0, this);\n vertexArrayBuckets[++vaCount] = [bucketLocator];\n }\n\n indices.push(indicesCount, indicesCount + 2, indicesCount + 1);\n indices.push(indicesCount + 1, indicesCount + 2, indicesCount + 3);\n\n segmentIndexCount += 6;\n count += 6;\n offset += 6;\n indicesCount += 4;\n }\n }\n\n polyline._locatorBuckets.push({\n locator: bucketLocator,\n count: segmentIndexCount,\n });\n\n if (indicesCount + 4 > CesiumMath.SIXTY_FOUR_KILOBYTES) {\n vertexBufferOffset.push(0);\n indices = [];\n totalIndices.push(indices);\n indicesCount = 0;\n bucketLocator.count = count;\n offset = 0;\n count = 0;\n bucketLocator = new VertexArrayBucketLocator(0, 0, this);\n vertexArrayBuckets[++vaCount] = [bucketLocator];\n }\n }\n polyline._clean();\n }\n bucketLocator.count = count;\n return offset;\n};\n\nPolylineBucket.prototype.getPolylineStartIndex = function (polyline) {\n var polylines = this.polylines;\n var positionIndex = 0;\n var length = polylines.length;\n for (var i = 0; i < length; ++i) {\n var p = polylines[i];\n if (p === polyline) {\n break;\n }\n positionIndex += p._actualLength;\n }\n return positionIndex;\n};\n\nvar scratchSegments = {\n positions: undefined,\n lengths: undefined,\n};\nvar scratchLengths = new Array(1);\nvar pscratch = new Cartesian3();\nvar scratchCartographic = new Cartographic();\n\nPolylineBucket.prototype.getSegments = function (polyline, projection) {\n var positions = polyline._actualPositions;\n\n if (this.mode === SceneMode.SCENE3D) {\n scratchLengths[0] = positions.length;\n scratchSegments.positions = positions;\n scratchSegments.lengths = scratchLengths;\n return scratchSegments;\n }\n\n if (intersectsIDL(polyline)) {\n positions = polyline._segments.positions;\n }\n\n var ellipsoid = projection.ellipsoid;\n var newPositions = [];\n var modelMatrix = this.modelMatrix;\n var length = positions.length;\n var position;\n var p = pscratch;\n\n for (var n = 0; n < length; ++n) {\n position = positions[n];\n p = Matrix4.multiplyByPoint(modelMatrix, position, p);\n newPositions.push(\n projection.project(\n ellipsoid.cartesianToCartographic(p, scratchCartographic)\n )\n );\n }\n\n if (newPositions.length > 0) {\n polyline._boundingVolume2D = BoundingSphere.fromPoints(\n newPositions,\n polyline._boundingVolume2D\n );\n var center2D = polyline._boundingVolume2D.center;\n polyline._boundingVolume2D.center = new Cartesian3(\n center2D.z,\n center2D.x,\n center2D.y\n );\n }\n\n scratchSegments.positions = newPositions;\n scratchSegments.lengths = polyline._segments.lengths;\n return scratchSegments;\n};\n\nvar scratchPositionsArray;\n\nPolylineBucket.prototype.writeUpdate = function (\n index,\n polyline,\n positionBuffer,\n projection\n) {\n var mode = this.mode;\n var maxLon = projection.ellipsoid.maximumRadius * CesiumMath.PI;\n\n var positionsLength = polyline._actualLength;\n if (positionsLength) {\n index += this.getPolylineStartIndex(polyline);\n\n var positionArray = scratchPositionsArray;\n var positionsArrayLength = 6 * positionsLength * 3;\n\n if (\n !defined(positionArray) ||\n positionArray.length < positionsArrayLength\n ) {\n positionArray = scratchPositionsArray = new Float32Array(\n positionsArrayLength\n );\n } else if (positionArray.length > positionsArrayLength) {\n positionArray = new Float32Array(\n positionArray.buffer,\n 0,\n positionsArrayLength\n );\n }\n\n var segments = this.getSegments(polyline, projection);\n var positions = segments.positions;\n var lengths = segments.lengths;\n\n var positionIndex = 0;\n var segmentIndex = 0;\n var count = 0;\n var position;\n\n positionsLength = positions.length;\n for (var i = 0; i < positionsLength; ++i) {\n if (i === 0) {\n if (polyline._loop) {\n position = positions[positionsLength - 2];\n } else {\n position = scratchWriteVector;\n Cartesian3.subtract(positions[0], positions[1], position);\n Cartesian3.add(positions[0], position, position);\n }\n } else {\n position = positions[i - 1];\n }\n\n Cartesian3.clone(position, scratchWritePrevPosition);\n Cartesian3.clone(positions[i], scratchWritePosition);\n\n if (i === positionsLength - 1) {\n if (polyline._loop) {\n position = positions[1];\n } else {\n position = scratchWriteVector;\n Cartesian3.subtract(\n positions[positionsLength - 1],\n positions[positionsLength - 2],\n position\n );\n Cartesian3.add(positions[positionsLength - 1], position, position);\n }\n } else {\n position = positions[i + 1];\n }\n\n Cartesian3.clone(position, scratchWriteNextPosition);\n\n var segmentLength = lengths[segmentIndex];\n if (i === count + segmentLength) {\n count += segmentLength;\n ++segmentIndex;\n }\n\n var segmentStart = i - count === 0;\n var segmentEnd = i === count + lengths[segmentIndex] - 1;\n\n if (mode === SceneMode.SCENE2D) {\n scratchWritePrevPosition.z = 0.0;\n scratchWritePosition.z = 0.0;\n scratchWriteNextPosition.z = 0.0;\n }\n\n if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n if (\n (segmentStart || segmentEnd) &&\n maxLon - Math.abs(scratchWritePosition.x) < 1.0\n ) {\n if (\n (scratchWritePosition.x < 0.0 &&\n scratchWritePrevPosition.x > 0.0) ||\n (scratchWritePosition.x > 0.0 && scratchWritePrevPosition.x < 0.0)\n ) {\n Cartesian3.clone(scratchWritePosition, scratchWritePrevPosition);\n }\n\n if (\n (scratchWritePosition.x < 0.0 &&\n scratchWriteNextPosition.x > 0.0) ||\n (scratchWritePosition.x > 0.0 && scratchWriteNextPosition.x < 0.0)\n ) {\n Cartesian3.clone(scratchWritePosition, scratchWriteNextPosition);\n }\n }\n }\n\n var startJ = segmentStart ? 2 : 0;\n var endJ = segmentEnd ? 2 : 4;\n\n for (var j = startJ; j < endJ; ++j) {\n EncodedCartesian3.writeElements(\n scratchWritePosition,\n positionArray,\n positionIndex\n );\n EncodedCartesian3.writeElements(\n scratchWritePrevPosition,\n positionArray,\n positionIndex + 6\n );\n EncodedCartesian3.writeElements(\n scratchWriteNextPosition,\n positionArray,\n positionIndex + 12\n );\n positionIndex += 6 * 3;\n }\n }\n\n positionBuffer.copyFromArrayView(\n positionArray,\n 6 * 3 * Float32Array.BYTES_PER_ELEMENT * index\n );\n }\n};\nexport default PolylineCollection;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec3 position2DHigh;\\n\\\nattribute vec3 position2DLow;\\n\\\nattribute vec3 prevPosition3DHigh;\\n\\\nattribute vec3 prevPosition3DLow;\\n\\\nattribute vec3 prevPosition2DHigh;\\n\\\nattribute vec3 prevPosition2DLow;\\n\\\nattribute vec3 nextPosition3DHigh;\\n\\\nattribute vec3 nextPosition3DLow;\\n\\\nattribute vec3 nextPosition2DHigh;\\n\\\nattribute vec3 nextPosition2DLow;\\n\\\nattribute vec4 texCoordExpandAndBatchIndex;\\n\\\n\\n\\\nvarying vec2 v_st;\\n\\\nvarying float v_width;\\n\\\nvarying vec4 v_pickColor;\\n\\\nvarying float v_polylineAngle;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n float texCoord = texCoordExpandAndBatchIndex.x;\\n\\\n float expandDir = texCoordExpandAndBatchIndex.y;\\n\\\n bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;\\n\\\n float batchTableIndex = texCoordExpandAndBatchIndex.w;\\n\\\n\\n\\\n vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);\\n\\\n float width = widthAndShow.x + 0.5;\\n\\\n float show = widthAndShow.y;\\n\\\n\\n\\\n if (width < 1.0)\\n\\\n {\\n\\\n show = 0.0;\\n\\\n }\\n\\\n\\n\\\n vec4 pickColor = batchTable_getPickColor(batchTableIndex);\\n\\\n\\n\\\n vec4 p, prev, next;\\n\\\n if (czm_morphTime == 1.0)\\n\\\n {\\n\\\n p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);\\n\\\n prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);\\n\\\n next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);\\n\\\n }\\n\\\n else if (czm_morphTime == 0.0)\\n\\\n {\\n\\\n p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);\\n\\\n prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);\\n\\\n next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n p = czm_columbusViewMorph(\\n\\\n czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),\\n\\\n czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),\\n\\\n czm_morphTime);\\n\\\n prev = czm_columbusViewMorph(\\n\\\n czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),\\n\\\n czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),\\n\\\n czm_morphTime);\\n\\\n next = czm_columbusViewMorph(\\n\\\n czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),\\n\\\n czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),\\n\\\n czm_morphTime);\\n\\\n }\\n\\\n\\n\\\n #ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);\\n\\\n vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);\\n\\\n vec3 centerLow = centerLowAndRadius.xyz;\\n\\\n float radius = centerLowAndRadius.w;\\n\\\n vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);\\n\\\n\\n\\\n float lengthSq;\\n\\\n if (czm_sceneMode == czm_sceneMode2D)\\n\\\n {\\n\\\n lengthSq = czm_eyeHeight2D.y;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);\\n\\\n lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);\\n\\\n }\\n\\\n\\n\\\n float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;\\n\\\n float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;\\n\\\n if (lengthSq < nearSq || lengthSq > farSq)\\n\\\n {\\n\\\n show = 0.0;\\n\\\n }\\n\\\n #endif\\n\\\n\\n\\\n float polylineAngle;\\n\\\n vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);\\n\\\n gl_Position = czm_viewportOrthographic * positionWC * show;\\n\\\n\\n\\\n v_st.s = texCoord;\\n\\\n v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);\\n\\\n\\n\\\n v_width = width;\\n\\\n v_pickColor = pickColor;\\n\\\n v_polylineAngle = polylineAngle;\\n\\\n}\\n\\\n\";\n","import arraySlice from \"../Core/arraySlice.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport Cesium3DTilePointFeature from \"./Cesium3DTilePointFeature.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport LabelCollection from \"./LabelCollection.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport PolylineCollection from \"./PolylineCollection.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\n\n/**\n * Creates a batch of points or billboards and labels.\n *\n * @alias Vector3DTilePoints\n * @constructor\n *\n * @param {Object} options An object with following properties:\n * @param {Uint16Array} options.positions The positions of the polygons.\n * @param {Number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {Number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polygons.\n * @param {Uint16Array} options.batchIds The batch ids for each polygon.\n *\n * @private\n */\nfunction Vector3DTilePoints(options) {\n // released after the first update\n this._positions = options.positions;\n\n this._batchTable = options.batchTable;\n this._batchIds = options.batchIds;\n\n this._rectangle = options.rectangle;\n this._minHeight = options.minimumHeight;\n this._maxHeight = options.maximumHeight;\n\n this._billboardCollection = undefined;\n this._labelCollection = undefined;\n this._polylineCollection = undefined;\n\n this._verticesPromise = undefined;\n this._packedBuffer = undefined;\n\n this._ready = false;\n this._readyPromise = when.defer();\n this._resolvedPromise = false;\n}\n\nObject.defineProperties(Vector3DTilePoints.prototype, {\n /**\n * Gets the number of points.\n *\n * @memberof Vector3DTilePoints.prototype\n *\n * @type {Number}\n * @readonly\n */\n pointsLength: {\n get: function () {\n return this._billboardCollection.length;\n },\n },\n\n /**\n * Gets the texture atlas memory in bytes.\n *\n * @memberof Vector3DTilePoints.prototype\n *\n * @type {Number}\n * @readonly\n */\n texturesByteLength: {\n get: function () {\n var billboardSize = this._billboardCollection.textureAtlas.texture\n .sizeInBytes;\n var labelSize = this._labelCollection._textureAtlas.texture.sizeInBytes;\n return billboardSize + labelSize;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof Vector3DTilePoints.prototype\n * @type {Promise<void>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nfunction packBuffer(points, ellipsoid) {\n var rectangle = points._rectangle;\n var minimumHeight = points._minHeight;\n var maximumHeight = points._maxHeight;\n\n var packedLength = 2 + Rectangle.packedLength + Ellipsoid.packedLength;\n var packedBuffer = new Float64Array(packedLength);\n\n var offset = 0;\n packedBuffer[offset++] = minimumHeight;\n packedBuffer[offset++] = maximumHeight;\n\n Rectangle.pack(rectangle, packedBuffer, offset);\n offset += Rectangle.packedLength;\n\n Ellipsoid.pack(ellipsoid, packedBuffer, offset);\n\n return packedBuffer;\n}\n\nvar createVerticesTaskProcessor = new TaskProcessor(\"createVectorTilePoints\");\nvar scratchPosition = new Cartesian3();\n\nfunction createPoints(points, ellipsoid) {\n if (defined(points._billboardCollection)) {\n return;\n }\n\n var positions;\n if (!defined(points._verticesPromise)) {\n positions = points._positions;\n var packedBuffer = points._packedBuffer;\n\n if (!defined(packedBuffer)) {\n // Copy because they may be the views on the same buffer.\n positions = points._positions = arraySlice(positions);\n points._batchIds = arraySlice(points._batchIds);\n\n packedBuffer = points._packedBuffer = packBuffer(points, ellipsoid);\n }\n\n var transferrableObjects = [positions.buffer, packedBuffer.buffer];\n var parameters = {\n positions: positions.buffer,\n packedBuffer: packedBuffer.buffer,\n };\n\n var verticesPromise = (points._verticesPromise = createVerticesTaskProcessor.scheduleTask(\n parameters,\n transferrableObjects\n ));\n if (!defined(verticesPromise)) {\n // Postponed\n return;\n }\n\n verticesPromise.then(function (result) {\n points._positions = new Float64Array(result.positions);\n points._ready = true;\n });\n }\n\n if (points._ready && !defined(points._billboardCollection)) {\n positions = points._positions;\n var batchTable = points._batchTable;\n var batchIds = points._batchIds;\n\n var billboardCollection = (points._billboardCollection = new BillboardCollection(\n { batchTable: batchTable }\n ));\n var labelCollection = (points._labelCollection = new LabelCollection({\n batchTable: batchTable,\n }));\n var polylineCollection = (points._polylineCollection = new PolylineCollection());\n polylineCollection._useHighlightColor = true;\n\n var numberOfPoints = positions.length / 3;\n for (var i = 0; i < numberOfPoints; ++i) {\n var id = batchIds[i];\n\n var position = Cartesian3.unpack(positions, i * 3, scratchPosition);\n\n var b = billboardCollection.add();\n b.position = position;\n b._batchIndex = id;\n\n var l = labelCollection.add();\n l.text = \" \";\n l.position = position;\n l._batchIndex = id;\n\n var p = polylineCollection.add();\n p.positions = [Cartesian3.clone(position), Cartesian3.clone(position)];\n }\n\n points._positions = undefined;\n points._packedBuffer = undefined;\n }\n}\n\n/**\n * Creates features for each point and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the point features will be placed.\n */\nVector3DTilePoints.prototype.createFeatures = function (content, features) {\n var billboardCollection = this._billboardCollection;\n var labelCollection = this._labelCollection;\n var polylineCollection = this._polylineCollection;\n\n var batchIds = this._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n\n var billboard = billboardCollection.get(i);\n var label = labelCollection.get(i);\n var polyline = polylineCollection.get(i);\n\n features[batchId] = new Cesium3DTilePointFeature(\n content,\n batchId,\n billboard,\n label,\n polyline\n );\n }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (batch table color * color).\n *\n * @param {Boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePoints.prototype.applyDebugSettings = function (enabled, color) {\n if (enabled) {\n Color.clone(color, this._billboardCollection._highlightColor);\n Color.clone(color, this._labelCollection._highlightColor);\n Color.clone(color, this._polylineCollection._highlightColor);\n } else {\n Color.clone(Color.WHITE, this._billboardCollection._highlightColor);\n Color.clone(Color.WHITE, this._labelCollection._highlightColor);\n Color.clone(Color.WHITE, this._polylineCollection._highlightColor);\n }\n};\n\nfunction clearStyle(polygons, features) {\n var batchIds = polygons._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n feature.show = true;\n feature.pointSize = Cesium3DTilePointFeature.defaultPointSize;\n feature.color = Cesium3DTilePointFeature.defaultColor;\n feature.pointOutlineColor =\n Cesium3DTilePointFeature.defaultPointOutlineColor;\n feature.pointOutlineWidth =\n Cesium3DTilePointFeature.defaultPointOutlineWidth;\n feature.labelColor = Color.WHITE;\n feature.labelOutlineColor = Color.WHITE;\n feature.labelOutlineWidth = 1.0;\n feature.font = \"30px sans-serif\";\n feature.labelStyle = LabelStyle.FILL;\n feature.labelText = undefined;\n feature.backgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\n feature.backgroundPadding = new Cartesian2(7, 5);\n feature.backgroundEnabled = false;\n feature.scaleByDistance = undefined;\n feature.translucencyByDistance = undefined;\n feature.distanceDisplayCondition = undefined;\n feature.heightOffset = 0.0;\n feature.anchorLineEnabled = false;\n feature.anchorLineColor = Color.WHITE;\n feature.image = undefined;\n feature.disableDepthTestDistance = 0.0;\n feature.horizontalOrigin = HorizontalOrigin.CENTER;\n feature.verticalOrigin = VerticalOrigin.CENTER;\n feature.labelHorizontalOrigin = HorizontalOrigin.RIGHT;\n feature.labelVerticalOrigin = VerticalOrigin.BASELINE;\n }\n}\n\nvar scratchColor = new Color();\nvar scratchColor2 = new Color();\nvar scratchColor3 = new Color();\nvar scratchColor4 = new Color();\nvar scratchColor5 = new Color();\nvar scratchColor6 = new Color();\nvar scratchScaleByDistance = new NearFarScalar();\nvar scratchTranslucencyByDistance = new NearFarScalar();\nvar scratchDistanceDisplayCondition = new DistanceDisplayCondition();\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePoints.prototype.applyStyle = function (style, features) {\n if (!defined(style)) {\n clearStyle(this, features);\n return;\n }\n\n var batchIds = this._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n if (defined(style.show)) {\n feature.show = style.show.evaluate(feature);\n }\n\n if (defined(style.pointSize)) {\n feature.pointSize = style.pointSize.evaluate(feature);\n }\n\n if (defined(style.color)) {\n feature.color = style.color.evaluateColor(feature, scratchColor);\n }\n\n if (defined(style.pointOutlineColor)) {\n feature.pointOutlineColor = style.pointOutlineColor.evaluateColor(\n feature,\n scratchColor2\n );\n }\n\n if (defined(style.pointOutlineWidth)) {\n feature.pointOutlineWidth = style.pointOutlineWidth.evaluate(feature);\n }\n\n if (defined(style.labelColor)) {\n feature.labelColor = style.labelColor.evaluateColor(\n feature,\n scratchColor3\n );\n }\n\n if (defined(style.labelOutlineColor)) {\n feature.labelOutlineColor = style.labelOutlineColor.evaluateColor(\n feature,\n scratchColor4\n );\n }\n\n if (defined(style.labelOutlineWidth)) {\n feature.labelOutlineWidth = style.labelOutlineWidth.evaluate(feature);\n }\n\n if (defined(style.font)) {\n feature.font = style.font.evaluate(feature);\n }\n\n if (defined(style.labelStyle)) {\n feature.labelStyle = style.labelStyle.evaluate(feature);\n }\n\n if (defined(style.labelText)) {\n feature.labelText = style.labelText.evaluate(feature);\n } else {\n feature.labelText = undefined;\n }\n\n if (defined(style.backgroundColor)) {\n feature.backgroundColor = style.backgroundColor.evaluateColor(\n feature,\n scratchColor5\n );\n }\n\n if (defined(style.backgroundPadding)) {\n feature.backgroundPadding = style.backgroundPadding.evaluate(feature);\n }\n\n if (defined(style.backgroundEnabled)) {\n feature.backgroundEnabled = style.backgroundEnabled.evaluate(feature);\n }\n\n if (defined(style.scaleByDistance)) {\n var scaleByDistanceCart4 = style.scaleByDistance.evaluate(feature);\n scratchScaleByDistance.near = scaleByDistanceCart4.x;\n scratchScaleByDistance.nearValue = scaleByDistanceCart4.y;\n scratchScaleByDistance.far = scaleByDistanceCart4.z;\n scratchScaleByDistance.farValue = scaleByDistanceCart4.w;\n feature.scaleByDistance = scratchScaleByDistance;\n } else {\n feature.scaleByDistance = undefined;\n }\n\n if (defined(style.translucencyByDistance)) {\n var translucencyByDistanceCart4 = style.translucencyByDistance.evaluate(\n feature\n );\n scratchTranslucencyByDistance.near = translucencyByDistanceCart4.x;\n scratchTranslucencyByDistance.nearValue = translucencyByDistanceCart4.y;\n scratchTranslucencyByDistance.far = translucencyByDistanceCart4.z;\n scratchTranslucencyByDistance.farValue = translucencyByDistanceCart4.w;\n feature.translucencyByDistance = scratchTranslucencyByDistance;\n } else {\n feature.translucencyByDistance = undefined;\n }\n\n if (defined(style.distanceDisplayCondition)) {\n var distanceDisplayConditionCart2 = style.distanceDisplayCondition.evaluate(\n feature\n );\n scratchDistanceDisplayCondition.near = distanceDisplayConditionCart2.x;\n scratchDistanceDisplayCondition.far = distanceDisplayConditionCart2.y;\n feature.distanceDisplayCondition = scratchDistanceDisplayCondition;\n } else {\n feature.distanceDisplayCondition = undefined;\n }\n\n if (defined(style.heightOffset)) {\n feature.heightOffset = style.heightOffset.evaluate(feature);\n }\n\n if (defined(style.anchorLineEnabled)) {\n feature.anchorLineEnabled = style.anchorLineEnabled.evaluate(feature);\n }\n\n if (defined(style.anchorLineColor)) {\n feature.anchorLineColor = style.anchorLineColor.evaluateColor(\n feature,\n scratchColor6\n );\n }\n\n if (defined(style.image)) {\n feature.image = style.image.evaluate(feature);\n } else {\n feature.image = undefined;\n }\n\n if (defined(style.disableDepthTestDistance)) {\n feature.disableDepthTestDistance = style.disableDepthTestDistance.evaluate(\n feature\n );\n }\n\n if (defined(style.horizontalOrigin)) {\n feature.horizontalOrigin = style.horizontalOrigin.evaluate(feature);\n }\n\n if (defined(style.verticalOrigin)) {\n feature.verticalOrigin = style.verticalOrigin.evaluate(feature);\n }\n\n if (defined(style.labelHorizontalOrigin)) {\n feature.labelHorizontalOrigin = style.labelHorizontalOrigin.evaluate(\n feature\n );\n }\n\n if (defined(style.labelVerticalOrigin)) {\n feature.labelVerticalOrigin = style.labelVerticalOrigin.evaluate(feature);\n }\n }\n};\n\n/**\n * @private\n */\nVector3DTilePoints.prototype.update = function (frameState) {\n createPoints(this, frameState.mapProjection.ellipsoid);\n\n if (!this._ready) {\n return;\n }\n\n this._polylineCollection.update(frameState);\n this._billboardCollection.update(frameState);\n this._labelCollection.update(frameState);\n\n if (!this._resolvedPromise) {\n this._readyPromise.resolve();\n this._resolvedPromise = true;\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePoints.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePoints.prototype.destroy = function () {\n this._billboardCollection =\n this._billboardCollection && this._billboardCollection.destroy();\n this._labelCollection =\n this._labelCollection && this._labelCollection.destroy();\n this._polylineCollection =\n this._polylineCollection && this._polylineCollection.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTilePoints;\n","import arraySlice from \"../Core/arraySlice.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\nimport Vector3DTilePrimitive from \"./Vector3DTilePrimitive.js\";\n\n/**\n * Creates a batch of pre-triangulated polygons draped on terrain and/or 3D Tiles.\n *\n * @alias Vector3DTilePolygons\n * @constructor\n *\n * @param {Object} options An object with following properties:\n * @param {Float32Array|Uint16Array} options.positions The positions of the polygons. The positions must be contiguous\n * so that the positions for polygon n are in [c, c + counts[n]] where c = sum{counts[0], counts[n - 1]} and they are the outer ring of\n * the polygon in counter-clockwise order.\n * @param {Uint32Array} options.counts The number of positions in the each polygon.\n * @param {Uint32Array} options.indices The indices of the triangulated polygons. The indices must be contiguous so that\n * the indices for polygon n are in [i, i + indexCounts[n]] where i = sum{indexCounts[0], indexCounts[n - 1]}.\n * @param {Uint32Array} options.indexCounts The number of indices for each polygon.\n * @param {Number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {Number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Float32Array} [options.polygonMinimumHeights] An array containing the minimum heights for each polygon.\n * @param {Float32Array} [options.polygonMaximumHeights] An array containing the maximum heights for each polygon.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polygons.\n * @param {Uint16Array} options.batchIds The batch ids for each polygon.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of polygons.\n *\n * @private\n */\nfunction Vector3DTilePolygons(options) {\n // All of the private properties will be released except _readyPromise\n // and _primitive after the Vector3DTilePrimitive is created.\n this._batchTable = options.batchTable;\n\n this._batchIds = options.batchIds;\n this._positions = options.positions;\n this._counts = options.counts;\n\n this._indices = options.indices;\n this._indexCounts = options.indexCounts;\n this._indexOffsets = undefined;\n\n this._batchTableColors = undefined;\n this._packedBuffer = undefined;\n\n this._batchedPositions = undefined;\n this._transferrableBatchIds = undefined;\n this._vertexBatchIds = undefined;\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._minimumHeight = options.minimumHeight;\n this._maximumHeight = options.maximumHeight;\n this._polygonMinimumHeights = options.polygonMinimumHeights;\n this._polygonMaximumHeights = options.polygonMaximumHeights;\n this._center = defaultValue(options.center, Cartesian3.ZERO);\n this._rectangle = options.rectangle;\n\n this._center = undefined;\n\n this._boundingVolume = options.boundingVolume;\n this._boundingVolumes = undefined;\n\n this._batchedIndices = undefined;\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._verticesPromise = undefined;\n\n this._primitive = undefined;\n\n /**\n * Draws the wireframe of the classification meshes.\n * @type {Boolean}\n * @default false\n */\n this.debugWireframe = false;\n\n /**\n * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n * @type {Boolean}\n * @default false\n */\n this.forceRebatch = false;\n\n /**\n * What this tile will classify.\n * @type {ClassificationType}\n * @default ClassificationType.BOTH\n */\n this.classificationType = ClassificationType.BOTH;\n}\n\nObject.defineProperties(Vector3DTilePolygons.prototype, {\n /**\n * Gets the number of triangles.\n *\n * @memberof Vector3DTilePolygons.prototype\n *\n * @type {Number}\n * @readonly\n */\n trianglesLength: {\n get: function () {\n if (defined(this._primitive)) {\n return this._primitive.trianglesLength;\n }\n return 0;\n },\n },\n\n /**\n * Gets the geometry memory in bytes.\n *\n * @memberof Vector3DTilePolygons.prototype\n *\n * @type {Number}\n * @readonly\n */\n geometryByteLength: {\n get: function () {\n if (defined(this._primitive)) {\n return this._primitive.geometryByteLength;\n }\n return 0;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof Vector3DTilePolygons.prototype\n * @type {Promise<void>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nfunction packBuffer(polygons) {\n var packedBuffer = new Float64Array(\n 3 +\n Cartesian3.packedLength +\n Ellipsoid.packedLength +\n Rectangle.packedLength\n );\n\n var offset = 0;\n packedBuffer[offset++] = polygons._indices.BYTES_PER_ELEMENT;\n\n packedBuffer[offset++] = polygons._minimumHeight;\n packedBuffer[offset++] = polygons._maximumHeight;\n\n Cartesian3.pack(polygons._center, packedBuffer, offset);\n offset += Cartesian3.packedLength;\n\n Ellipsoid.pack(polygons._ellipsoid, packedBuffer, offset);\n offset += Ellipsoid.packedLength;\n\n Rectangle.pack(polygons._rectangle, packedBuffer, offset);\n\n return packedBuffer;\n}\n\nfunction unpackBuffer(polygons, packedBuffer) {\n var offset = 1;\n\n var numBVS = packedBuffer[offset++];\n var bvs = (polygons._boundingVolumes = new Array(numBVS));\n\n for (var i = 0; i < numBVS; ++i) {\n bvs[i] = OrientedBoundingBox.unpack(packedBuffer, offset);\n offset += OrientedBoundingBox.packedLength;\n }\n\n var numBatchedIndices = packedBuffer[offset++];\n var bis = (polygons._batchedIndices = new Array(numBatchedIndices));\n\n for (var j = 0; j < numBatchedIndices; ++j) {\n var color = Color.unpack(packedBuffer, offset);\n offset += Color.packedLength;\n\n var indexOffset = packedBuffer[offset++];\n var count = packedBuffer[offset++];\n\n var length = packedBuffer[offset++];\n var batchIds = new Array(length);\n\n for (var k = 0; k < length; ++k) {\n batchIds[k] = packedBuffer[offset++];\n }\n\n bis[j] = new Vector3DTileBatch({\n color: color,\n offset: indexOffset,\n count: count,\n batchIds: batchIds,\n });\n }\n}\n\nvar createVerticesTaskProcessor = new TaskProcessor(\"createVectorTilePolygons\");\nvar scratchColor = new Color();\n\nfunction createPrimitive(polygons) {\n if (defined(polygons._primitive)) {\n return;\n }\n\n if (!defined(polygons._verticesPromise)) {\n var positions = polygons._positions;\n var counts = polygons._counts;\n var indexCounts = polygons._indexCounts;\n var indices = polygons._indices;\n\n var batchIds = polygons._transferrableBatchIds;\n var batchTableColors = polygons._batchTableColors;\n\n var packedBuffer = polygons._packedBuffer;\n\n if (!defined(batchTableColors)) {\n // Copy because they may be the views on the same buffer.\n positions = polygons._positions = arraySlice(polygons._positions);\n counts = polygons._counts = arraySlice(polygons._counts);\n indexCounts = polygons._indexCounts = arraySlice(polygons._indexCounts);\n indices = polygons._indices = arraySlice(polygons._indices);\n\n polygons._center = polygons._ellipsoid.cartographicToCartesian(\n Rectangle.center(polygons._rectangle)\n );\n\n batchIds = polygons._transferrableBatchIds = new Uint32Array(\n polygons._batchIds\n );\n batchTableColors = polygons._batchTableColors = new Uint32Array(\n batchIds.length\n );\n var batchTable = polygons._batchTable;\n\n var length = batchTableColors.length;\n for (var i = 0; i < length; ++i) {\n var color = batchTable.getColor(i, scratchColor);\n batchTableColors[i] = color.toRgba();\n }\n\n packedBuffer = polygons._packedBuffer = packBuffer(polygons);\n }\n\n var transferrableObjects = [\n positions.buffer,\n counts.buffer,\n indexCounts.buffer,\n indices.buffer,\n batchIds.buffer,\n batchTableColors.buffer,\n packedBuffer.buffer,\n ];\n var parameters = {\n packedBuffer: packedBuffer.buffer,\n positions: positions.buffer,\n counts: counts.buffer,\n indexCounts: indexCounts.buffer,\n indices: indices.buffer,\n batchIds: batchIds.buffer,\n batchTableColors: batchTableColors.buffer,\n };\n\n var minimumHeights = polygons._polygonMinimumHeights;\n var maximumHeights = polygons._polygonMaximumHeights;\n if (defined(minimumHeights) && defined(maximumHeights)) {\n minimumHeights = arraySlice(minimumHeights);\n maximumHeights = arraySlice(maximumHeights);\n\n transferrableObjects.push(minimumHeights.buffer, maximumHeights.buffer);\n parameters.minimumHeights = minimumHeights;\n parameters.maximumHeights = maximumHeights;\n }\n\n var verticesPromise = (polygons._verticesPromise = createVerticesTaskProcessor.scheduleTask(\n parameters,\n transferrableObjects\n ));\n if (!defined(verticesPromise)) {\n // Postponed\n return;\n }\n\n when(verticesPromise, function (result) {\n polygons._positions = undefined;\n polygons._counts = undefined;\n polygons._polygonMinimumHeights = undefined;\n polygons._polygonMaximumHeights = undefined;\n\n var packedBuffer = new Float64Array(result.packedBuffer);\n var indexDatatype = packedBuffer[0];\n unpackBuffer(polygons, packedBuffer);\n\n polygons._indices =\n IndexDatatype.getSizeInBytes(indexDatatype) === 2\n ? new Uint16Array(result.indices)\n : new Uint32Array(result.indices);\n polygons._indexOffsets = new Uint32Array(result.indexOffsets);\n polygons._indexCounts = new Uint32Array(result.indexCounts);\n\n // will be released\n polygons._batchedPositions = new Float32Array(result.positions);\n polygons._vertexBatchIds = new Uint16Array(result.batchIds);\n\n polygons._ready = true;\n });\n }\n\n if (polygons._ready && !defined(polygons._primitive)) {\n polygons._primitive = new Vector3DTilePrimitive({\n batchTable: polygons._batchTable,\n positions: polygons._batchedPositions,\n batchIds: polygons._batchIds,\n vertexBatchIds: polygons._vertexBatchIds,\n indices: polygons._indices,\n indexOffsets: polygons._indexOffsets,\n indexCounts: polygons._indexCounts,\n batchedIndices: polygons._batchedIndices,\n boundingVolume: polygons._boundingVolume,\n boundingVolumes: polygons._boundingVolumes,\n center: polygons._center,\n });\n\n polygons._batchTable = undefined;\n polygons._batchIds = undefined;\n polygons._positions = undefined;\n polygons._counts = undefined;\n polygons._indices = undefined;\n polygons._indexCounts = undefined;\n polygons._indexOffsets = undefined;\n polygons._batchTableColors = undefined;\n polygons._packedBuffer = undefined;\n polygons._batchedPositions = undefined;\n polygons._transferrableBatchIds = undefined;\n polygons._vertexBatchIds = undefined;\n polygons._ellipsoid = undefined;\n polygons._minimumHeight = undefined;\n polygons._maximumHeight = undefined;\n polygons._polygonMinimumHeights = undefined;\n polygons._polygonMaximumHeights = undefined;\n polygons._center = undefined;\n polygons._rectangle = undefined;\n polygons._boundingVolume = undefined;\n polygons._boundingVolumes = undefined;\n polygons._batchedIndices = undefined;\n polygons._verticesPromise = undefined;\n\n polygons._readyPromise.resolve();\n }\n}\n\n/**\n * Creates features for each polygon and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePolygons.prototype.createFeatures = function (content, features) {\n this._primitive.createFeatures(content, features);\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (polygon batch table color * color).\n *\n * @param {Boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePolygons.prototype.applyDebugSettings = function (enabled, color) {\n this._primitive.applyDebugSettings(enabled, color);\n};\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePolygons.prototype.applyStyle = function (style, features) {\n this._primitive.applyStyle(style, features);\n};\n\n/**\n * Call when updating the color of a polygon with batchId changes color. The polygons will need to be re-batched\n * on the next update.\n *\n * @param {Number} batchId The batch id of the polygon whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTilePolygons.prototype.updateCommands = function (batchId, color) {\n this._primitive.updateCommands(batchId, color);\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePolygons.prototype.update = function (frameState) {\n createPrimitive(this);\n\n if (!this._ready) {\n return;\n }\n\n this._primitive.debugWireframe = this.debugWireframe;\n this._primitive.forceRebatch = this.forceRebatch;\n this._primitive.classificationType = this.classificationType;\n this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePolygons.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePolygons.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTilePolygons;\n","import arraySlice from \"../Core/arraySlice.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport Vector3DTilePolylinesVS from \"../Shaders/Vector3DTilePolylinesVS.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\n\n/**\n * Creates a batch of polylines that have been subdivided to be draped on terrain.\n *\n * @alias Vector3DTilePolylines\n * @constructor\n *\n * @param {Object} options An object with following properties:\n * @param {Uint16Array} options.positions The positions of the polylines\n * @param {Uint32Array} options.counts The number or positions in the each polyline.\n * @param {Uint16Array} options.widths The width of each polyline.\n * @param {Number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {Number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polylines.\n * @param {Uint16Array} options.batchIds The batch ids for each polyline.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of polylines.\n *\n * @private\n */\nfunction Vector3DTilePolylines(options) {\n // these arrays are all released after the first update.\n this._positions = options.positions;\n this._widths = options.widths;\n this._counts = options.counts;\n this._batchIds = options.batchIds;\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n this._minimumHeight = options.minimumHeight;\n this._maximumHeight = options.maximumHeight;\n this._center = options.center;\n this._rectangle = options.rectangle;\n\n this._boundingVolume = options.boundingVolume;\n this._batchTable = options.batchTable;\n\n this._va = undefined;\n this._sp = undefined;\n this._rs = undefined;\n this._uniformMap = undefined;\n this._command = undefined;\n\n this._transferrableBatchIds = undefined;\n this._packedBuffer = undefined;\n\n this._currentPositions = undefined;\n this._previousPositions = undefined;\n this._nextPositions = undefined;\n this._expandAndWidth = undefined;\n this._vertexBatchIds = undefined;\n this._indices = undefined;\n\n this._constantColor = Color.clone(Color.WHITE);\n this._highlightColor = this._constantColor;\n\n this._trianglesLength = 0;\n this._geometryByteLength = 0;\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n this._verticesPromise = undefined;\n}\n\nObject.defineProperties(Vector3DTilePolylines.prototype, {\n /**\n * Gets the number of triangles.\n *\n * @memberof Vector3DTilePolylines.prototype\n *\n * @type {Number}\n * @readonly\n */\n trianglesLength: {\n get: function () {\n return this._trianglesLength;\n },\n },\n\n /**\n * Gets the geometry memory in bytes.\n *\n * @memberof Vector3DTilePolylines.prototype\n *\n * @type {Number}\n * @readonly\n */\n geometryByteLength: {\n get: function () {\n return this._geometryByteLength;\n },\n },\n\n /**\n * Gets a promise that resolves when the primitive is ready to render.\n * @memberof Vector3DTilePolylines.prototype\n * @type {Promise<void>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nfunction packBuffer(polylines) {\n var rectangle = polylines._rectangle;\n var minimumHeight = polylines._minimumHeight;\n var maximumHeight = polylines._maximumHeight;\n var ellipsoid = polylines._ellipsoid;\n var center = polylines._center;\n\n var packedLength =\n 2 +\n Rectangle.packedLength +\n Ellipsoid.packedLength +\n Cartesian3.packedLength;\n var packedBuffer = new Float64Array(packedLength);\n\n var offset = 0;\n packedBuffer[offset++] = minimumHeight;\n packedBuffer[offset++] = maximumHeight;\n\n Rectangle.pack(rectangle, packedBuffer, offset);\n offset += Rectangle.packedLength;\n\n Ellipsoid.pack(ellipsoid, packedBuffer, offset);\n offset += Ellipsoid.packedLength;\n\n Cartesian3.pack(center, packedBuffer, offset);\n\n return packedBuffer;\n}\n\nvar createVerticesTaskProcessor = new TaskProcessor(\n \"createVectorTilePolylines\"\n);\nvar attributeLocations = {\n previousPosition: 0,\n currentPosition: 1,\n nextPosition: 2,\n expandAndWidth: 3,\n a_batchId: 4,\n};\n\nfunction createVertexArray(polylines, context) {\n if (defined(polylines._va)) {\n return;\n }\n\n if (!defined(polylines._verticesPromise)) {\n var positions = polylines._positions;\n var widths = polylines._widths;\n var counts = polylines._counts;\n var batchIds = polylines._transferrableBatchIds;\n\n var packedBuffer = polylines._packedBuffer;\n\n if (!defined(packedBuffer)) {\n // Copy because they may be the views on the same buffer.\n positions = polylines._positions = arraySlice(positions);\n widths = polylines._widths = arraySlice(widths);\n counts = polylines._counts = arraySlice(counts);\n\n batchIds = polylines._transferrableBatchIds = arraySlice(\n polylines._batchIds\n );\n\n packedBuffer = polylines._packedBuffer = packBuffer(polylines);\n }\n\n var transferrableObjects = [\n positions.buffer,\n widths.buffer,\n counts.buffer,\n batchIds.buffer,\n packedBuffer.buffer,\n ];\n var parameters = {\n positions: positions.buffer,\n widths: widths.buffer,\n counts: counts.buffer,\n batchIds: batchIds.buffer,\n packedBuffer: packedBuffer.buffer,\n };\n\n var verticesPromise = (polylines._verticesPromise = createVerticesTaskProcessor.scheduleTask(\n parameters,\n transferrableObjects\n ));\n if (!defined(verticesPromise)) {\n // Postponed\n return;\n }\n\n when(verticesPromise, function (result) {\n polylines._currentPositions = new Float32Array(result.currentPositions);\n polylines._previousPositions = new Float32Array(result.previousPositions);\n polylines._nextPositions = new Float32Array(result.nextPositions);\n polylines._expandAndWidth = new Float32Array(result.expandAndWidth);\n polylines._vertexBatchIds = new Uint16Array(result.batchIds);\n\n var indexDatatype = result.indexDatatype;\n polylines._indices =\n indexDatatype === IndexDatatype.UNSIGNED_SHORT\n ? new Uint16Array(result.indices)\n : new Uint32Array(result.indices);\n\n polylines._ready = true;\n });\n }\n\n if (polylines._ready && !defined(polylines._va)) {\n var curPositions = polylines._currentPositions;\n var prevPositions = polylines._previousPositions;\n var nextPositions = polylines._nextPositions;\n var expandAndWidth = polylines._expandAndWidth;\n var vertexBatchIds = polylines._vertexBatchIds;\n var indices = polylines._indices;\n\n var byteLength =\n prevPositions.byteLength +\n curPositions.byteLength +\n nextPositions.byteLength;\n byteLength +=\n expandAndWidth.byteLength +\n vertexBatchIds.byteLength +\n indices.byteLength;\n polylines._trianglesLength = indices.length / 3;\n polylines._geometryByteLength = byteLength;\n\n var prevPositionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: prevPositions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var curPositionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: curPositions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var nextPositionBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: nextPositions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var expandAndWidthBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: expandAndWidth,\n usage: BufferUsage.STATIC_DRAW,\n });\n var idBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: vertexBatchIds,\n usage: BufferUsage.STATIC_DRAW,\n });\n\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype:\n indices.BYTES_PER_ELEMENT === 2\n ? IndexDatatype.UNSIGNED_SHORT\n : IndexDatatype.UNSIGNED_INT,\n });\n\n var vertexAttributes = [\n {\n index: attributeLocations.previousPosition,\n vertexBuffer: prevPositionBuffer,\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n index: attributeLocations.currentPosition,\n vertexBuffer: curPositionBuffer,\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n index: attributeLocations.nextPosition,\n vertexBuffer: nextPositionBuffer,\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n },\n {\n index: attributeLocations.expandAndWidth,\n vertexBuffer: expandAndWidthBuffer,\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n },\n {\n index: attributeLocations.a_batchId,\n vertexBuffer: idBuffer,\n componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n componentsPerAttribute: 1,\n },\n ];\n\n polylines._va = new VertexArray({\n context: context,\n attributes: vertexAttributes,\n indexBuffer: indexBuffer,\n });\n\n polylines._positions = undefined;\n polylines._widths = undefined;\n polylines._counts = undefined;\n\n polylines._ellipsoid = undefined;\n polylines._minimumHeight = undefined;\n polylines._maximumHeight = undefined;\n polylines._rectangle = undefined;\n\n polylines._transferrableBatchIds = undefined;\n polylines._packedBuffer = undefined;\n\n polylines._currentPositions = undefined;\n polylines._previousPositions = undefined;\n polylines._nextPositions = undefined;\n polylines._expandAndWidth = undefined;\n polylines._vertexBatchIds = undefined;\n polylines._indices = undefined;\n\n polylines._readyPromise.resolve();\n }\n}\n\nvar modifiedModelViewScratch = new Matrix4();\nvar rtcScratch = new Cartesian3();\n\nfunction createUniformMap(primitive, context) {\n if (defined(primitive._uniformMap)) {\n return;\n }\n\n primitive._uniformMap = {\n u_modifiedModelView: function () {\n var viewMatrix = context.uniformState.view;\n Matrix4.clone(viewMatrix, modifiedModelViewScratch);\n Matrix4.multiplyByPoint(\n modifiedModelViewScratch,\n primitive._center,\n rtcScratch\n );\n Matrix4.setTranslation(\n modifiedModelViewScratch,\n rtcScratch,\n modifiedModelViewScratch\n );\n return modifiedModelViewScratch;\n },\n u_highlightColor: function () {\n return primitive._highlightColor;\n },\n };\n}\n\nfunction createRenderStates(primitive) {\n if (defined(primitive._rs)) {\n return;\n }\n\n var polygonOffset = {\n enabled: true,\n factor: -5.0,\n units: -5.0,\n };\n\n primitive._rs = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n depthMask: false,\n depthTest: {\n enabled: true,\n },\n polygonOffset: polygonOffset,\n });\n}\n\nvar PolylineFS =\n \"uniform vec4 u_highlightColor; \\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" gl_FragColor = u_highlightColor;\\n\" +\n \"}\\n\";\n\nfunction createShaders(primitive, context) {\n if (defined(primitive._sp)) {\n return;\n }\n\n var batchTable = primitive._batchTable;\n\n var vsSource = batchTable.getVertexShaderCallback(\n false,\n \"a_batchId\",\n undefined\n )(Vector3DTilePolylinesVS);\n var fsSource = batchTable.getFragmentShaderCallback()(\n PolylineFS,\n false,\n undefined\n );\n\n var vs = new ShaderSource({\n defines: [\n \"VECTOR_TILE\",\n !FeatureDetection.isInternetExplorer() ? \"CLIP_POLYLINE\" : \"\",\n ],\n sources: [PolylineCommon, vsSource],\n });\n var fs = new ShaderSource({\n defines: [\"VECTOR_TILE\"],\n sources: [fsSource],\n });\n\n primitive._sp = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n}\n\nfunction queueCommands(primitive, frameState) {\n if (!defined(primitive._command)) {\n var uniformMap = primitive._batchTable.getUniformMapCallback()(\n primitive._uniformMap\n );\n primitive._command = new DrawCommand({\n owner: primitive,\n vertexArray: primitive._va,\n renderState: primitive._rs,\n shaderProgram: primitive._sp,\n uniformMap: uniformMap,\n boundingVolume: primitive._boundingVolume,\n pass: Pass.TRANSLUCENT,\n pickId: primitive._batchTable.getPickId(),\n });\n }\n\n frameState.commandList.push(primitive._command);\n}\n\n/**\n * Creates features for each polyline and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePolylines.prototype.createFeatures = function (content, features) {\n var batchIds = this._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n features[batchId] = new Cesium3DTileFeature(content, batchId);\n }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (polyline batch table color * color).\n *\n * @param {Boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePolylines.prototype.applyDebugSettings = function (enabled, color) {\n this._highlightColor = enabled ? color : this._constantColor;\n};\n\nfunction clearStyle(polygons, features) {\n var batchIds = polygons._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n feature.show = true;\n feature.color = Color.WHITE;\n }\n}\n\nvar scratchColor = new Color();\n\nvar DEFAULT_COLOR_VALUE = Color.WHITE;\nvar DEFAULT_SHOW_VALUE = true;\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePolylines.prototype.applyStyle = function (style, features) {\n if (!defined(style)) {\n clearStyle(this, features);\n return;\n }\n\n var batchIds = this._batchIds;\n var length = batchIds.length;\n for (var i = 0; i < length; ++i) {\n var batchId = batchIds[i];\n var feature = features[batchId];\n\n feature.color = defined(style.color)\n ? style.color.evaluateColor(feature, scratchColor)\n : DEFAULT_COLOR_VALUE;\n feature.show = defined(style.show)\n ? style.show.evaluate(feature)\n : DEFAULT_SHOW_VALUE;\n }\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePolylines.prototype.update = function (frameState) {\n var context = frameState.context;\n\n createVertexArray(this, context);\n createUniformMap(this, context);\n createShaders(this, context);\n createRenderStates(this);\n\n if (!this._ready) {\n return;\n }\n\n var passes = frameState.passes;\n if (passes.render || passes.pick) {\n queueCommands(this, frameState);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePolylines.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePolylines.prototype.destroy = function () {\n this._va = this._va && this._va.destroy();\n this._sp = this._sp && this._sp.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTilePolylines;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 currentPosition;\\n\\\nattribute vec4 previousPosition;\\n\\\nattribute vec4 nextPosition;\\n\\\nattribute vec2 expandAndWidth;\\n\\\nattribute float a_batchId;\\n\\\n\\n\\\nuniform mat4 u_modifiedModelView;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n float expandDir = expandAndWidth.x;\\n\\\n float width = abs(expandAndWidth.y) + 0.5;\\n\\\n bool usePrev = expandAndWidth.y < 0.0;\\n\\\n\\n\\\n vec4 p = u_modifiedModelView * currentPosition;\\n\\\n vec4 prev = u_modifiedModelView * previousPosition;\\n\\\n vec4 next = u_modifiedModelView * nextPosition;\\n\\\n\\n\\\n float angle;\\n\\\n vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle);\\n\\\n gl_Position = czm_viewportOrthographic * positionWC;\\n\\\n}\\n\\\n\";\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport Vector3DTilePoints from \"./Vector3DTilePoints.js\";\nimport Vector3DTilePolygons from \"./Vector3DTilePolygons.js\";\nimport Vector3DTilePolylines from \"./Vector3DTilePolylines.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/3d-tiles-next/TileFormats/VectorData|Vector}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Vector3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Vector3DTileContent(tileset, tile, resource, arrayBuffer, byteOffset) {\n this._tileset = tileset;\n this._tile = tile;\n this._resource = resource;\n\n this._polygons = undefined;\n this._polylines = undefined;\n this._points = undefined;\n\n this._contentReadyPromise = undefined;\n this._readyPromise = when.defer();\n\n this._batchTable = undefined;\n this._features = undefined;\n\n /**\n * Part of the {@link Cesium3DTileContent} interface.\n */\n this.featurePropertiesDirty = false;\n\n initialize(this, arrayBuffer, byteOffset);\n}\n\nObject.defineProperties(Vector3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return defined(this._batchTable) ? this._batchTable.featuresLength : 0;\n },\n },\n\n pointsLength: {\n get: function () {\n if (defined(this._points)) {\n return this._points.pointsLength;\n }\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n var trianglesLength = 0;\n if (defined(this._polygons)) {\n trianglesLength += this._polygons.trianglesLength;\n }\n if (defined(this._polylines)) {\n trianglesLength += this._polylines.trianglesLength;\n }\n return trianglesLength;\n },\n },\n\n geometryByteLength: {\n get: function () {\n var geometryByteLength = 0;\n if (defined(this._polygons)) {\n geometryByteLength += this._polygons.geometryByteLength;\n }\n if (defined(this._polylines)) {\n geometryByteLength += this._polylines.geometryByteLength;\n }\n return geometryByteLength;\n },\n },\n\n texturesByteLength: {\n get: function () {\n if (defined(this._points)) {\n return this._points.texturesByteLength;\n }\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return defined(this._batchTable) ? this._batchTable.memorySizeInBytes : 0;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return this._resource.getUrlComponent(true);\n },\n },\n\n batchTable: {\n get: function () {\n return this._batchTable;\n },\n },\n});\n\nfunction createColorChangedCallback(content) {\n return function (batchId, color) {\n if (defined(content._polygons)) {\n content._polygons.updateCommands(batchId, color);\n }\n };\n}\n\nfunction getBatchIds(featureTableJson, featureTableBinary) {\n var polygonBatchIds;\n var polylineBatchIds;\n var pointBatchIds;\n var i;\n\n var numberOfPolygons = defaultValue(featureTableJson.POLYGONS_LENGTH, 0);\n var numberOfPolylines = defaultValue(featureTableJson.POLYLINES_LENGTH, 0);\n var numberOfPoints = defaultValue(featureTableJson.POINTS_LENGTH, 0);\n\n if (numberOfPolygons > 0 && defined(featureTableJson.POLYGON_BATCH_IDS)) {\n var polygonBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.POLYGON_BATCH_IDS.byteOffset;\n polygonBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n polygonBatchIdsByteOffset,\n numberOfPolygons\n );\n }\n\n if (numberOfPolylines > 0 && defined(featureTableJson.POLYLINE_BATCH_IDS)) {\n var polylineBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.POLYLINE_BATCH_IDS.byteOffset;\n polylineBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n polylineBatchIdsByteOffset,\n numberOfPolylines\n );\n }\n\n if (numberOfPoints > 0 && defined(featureTableJson.POINT_BATCH_IDS)) {\n var pointBatchIdsByteOffset =\n featureTableBinary.byteOffset +\n featureTableJson.POINT_BATCH_IDS.byteOffset;\n pointBatchIds = new Uint16Array(\n featureTableBinary.buffer,\n pointBatchIdsByteOffset,\n numberOfPoints\n );\n }\n\n var atLeastOneDefined =\n defined(polygonBatchIds) ||\n defined(polylineBatchIds) ||\n defined(pointBatchIds);\n var atLeastOneUndefined =\n (numberOfPolygons > 0 && !defined(polygonBatchIds)) ||\n (numberOfPolylines > 0 && !defined(polylineBatchIds)) ||\n (numberOfPoints > 0 && !defined(pointBatchIds));\n\n if (atLeastOneDefined && atLeastOneUndefined) {\n throw new RuntimeError(\n \"If one group of batch ids is defined, then all batch ids must be defined.\"\n );\n }\n\n var allUndefinedBatchIds =\n !defined(polygonBatchIds) &&\n !defined(polylineBatchIds) &&\n !defined(pointBatchIds);\n if (allUndefinedBatchIds) {\n var id = 0;\n if (!defined(polygonBatchIds) && numberOfPolygons > 0) {\n polygonBatchIds = new Uint16Array(numberOfPolygons);\n for (i = 0; i < numberOfPolygons; ++i) {\n polygonBatchIds[i] = id++;\n }\n }\n if (!defined(polylineBatchIds) && numberOfPolylines > 0) {\n polylineBatchIds = new Uint16Array(numberOfPolylines);\n for (i = 0; i < numberOfPolylines; ++i) {\n polylineBatchIds[i] = id++;\n }\n }\n if (!defined(pointBatchIds) && numberOfPoints > 0) {\n pointBatchIds = new Uint16Array(numberOfPoints);\n for (i = 0; i < numberOfPoints; ++i) {\n pointBatchIds[i] = id++;\n }\n }\n }\n\n return {\n polygons: polygonBatchIds,\n polylines: polylineBatchIds,\n points: pointBatchIds,\n };\n}\n\nvar sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n byteOffset = defaultValue(byteOffset, 0);\n\n var uint8Array = new Uint8Array(arrayBuffer);\n var view = new DataView(arrayBuffer);\n byteOffset += sizeOfUint32; // Skip magic number\n\n var version = view.getUint32(byteOffset, true);\n if (version !== 1) {\n throw new RuntimeError(\n \"Only Vector tile version 1 is supported. Version \" +\n version +\n \" is not.\"\n );\n }\n byteOffset += sizeOfUint32;\n\n var byteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n if (byteLength === 0) {\n content._readyPromise.resolve(content);\n return;\n }\n\n var featureTableJSONByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n if (featureTableJSONByteLength === 0) {\n throw new RuntimeError(\n \"Feature table must have a byte length greater than zero\"\n );\n }\n\n var featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var batchTableJSONByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var indicesByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var positionByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var polylinePositionByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n var pointsPositionByteLength = view.getUint32(byteOffset, true);\n byteOffset += sizeOfUint32;\n\n var featureTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n featureTableJSONByteLength\n );\n var featureTableJson = JSON.parse(featureTableString);\n byteOffset += featureTableJSONByteLength;\n\n var featureTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n featureTableBinaryByteLength\n );\n byteOffset += featureTableBinaryByteLength;\n\n var batchTableJson;\n var batchTableBinary;\n if (batchTableJSONByteLength > 0) {\n // PERFORMANCE_IDEA: is it possible to allocate this on-demand? Perhaps keep the\n // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n //\n // We could also make another request for it, but that would make the property set/get\n // API async, and would double the number of numbers in some cases.\n var batchTableString = getStringFromTypedArray(\n uint8Array,\n byteOffset,\n batchTableJSONByteLength\n );\n batchTableJson = JSON.parse(batchTableString);\n byteOffset += batchTableJSONByteLength;\n\n if (batchTableBinaryByteLength > 0) {\n // Has a batch table binary\n batchTableBinary = new Uint8Array(\n arrayBuffer,\n byteOffset,\n batchTableBinaryByteLength\n );\n // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n batchTableBinary = new Uint8Array(batchTableBinary);\n byteOffset += batchTableBinaryByteLength;\n }\n }\n\n var numberOfPolygons = defaultValue(featureTableJson.POLYGONS_LENGTH, 0);\n var numberOfPolylines = defaultValue(featureTableJson.POLYLINES_LENGTH, 0);\n var numberOfPoints = defaultValue(featureTableJson.POINTS_LENGTH, 0);\n var totalPrimitives = numberOfPolygons + numberOfPolylines + numberOfPoints;\n\n var batchTable = new Cesium3DTileBatchTable(\n content,\n totalPrimitives,\n batchTableJson,\n batchTableBinary,\n createColorChangedCallback(content)\n );\n content._batchTable = batchTable;\n\n if (totalPrimitives === 0) {\n return;\n }\n\n var featureTable = new Cesium3DTileFeatureTable(\n featureTableJson,\n featureTableBinary\n );\n var region = featureTable.getGlobalProperty(\"REGION\");\n if (!defined(region)) {\n throw new RuntimeError(\n \"Feature table global property: REGION must be defined\"\n );\n }\n var rectangle = Rectangle.unpack(region);\n var minHeight = region[4];\n var maxHeight = region[5];\n\n var modelMatrix = content._tile.computedTransform;\n\n var center = featureTable.getGlobalProperty(\n \"RTC_CENTER\",\n ComponentDatatype.FLOAT,\n 3\n );\n if (defined(center)) {\n center = Cartesian3.unpack(center);\n Matrix4.multiplyByPoint(modelMatrix, center, center);\n } else {\n center = Rectangle.center(rectangle);\n center.height = CesiumMath.lerp(minHeight, maxHeight, 0.5);\n center = Ellipsoid.WGS84.cartographicToCartesian(center);\n }\n\n var batchIds = getBatchIds(featureTableJson, featureTableBinary);\n byteOffset += byteOffset % 4;\n\n if (numberOfPolygons > 0) {\n featureTable.featuresLength = numberOfPolygons;\n\n var polygonCounts = defaultValue(\n featureTable.getPropertyArray(\n \"POLYGON_COUNTS\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ),\n featureTable.getPropertyArray(\n \"POLYGON_COUNT\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ) // Workaround for old vector tilesets using the non-plural name\n );\n\n if (!defined(polygonCounts)) {\n throw new RuntimeError(\n \"Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0\"\n );\n }\n\n var polygonIndexCounts = defaultValue(\n featureTable.getPropertyArray(\n \"POLYGON_INDEX_COUNTS\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ),\n featureTable.getPropertyArray(\n \"POLYGON_INDEX_COUNT\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ) // Workaround for old vector tilesets using the non-plural name\n );\n\n if (!defined(polygonIndexCounts)) {\n throw new RuntimeError(\n \"Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0\"\n );\n }\n\n // Use the counts array to determine how many position values we want. If we used the byte length then\n // zero padding values would be included and cause the delta zig-zag decoding to fail\n var numPolygonPositions = polygonCounts.reduce(function (total, count) {\n return total + count * 2;\n }, 0);\n\n var numPolygonIndices = polygonIndexCounts.reduce(function (total, count) {\n return total + count;\n }, 0);\n\n var indices = new Uint32Array(arrayBuffer, byteOffset, numPolygonIndices);\n byteOffset += indicesByteLength;\n\n var polygonPositions = new Uint16Array(\n arrayBuffer,\n byteOffset,\n numPolygonPositions\n );\n byteOffset += positionByteLength;\n\n var polygonMinimumHeights;\n var polygonMaximumHeights;\n if (\n defined(featureTableJson.POLYGON_MINIMUM_HEIGHTS) &&\n defined(featureTableJson.POLYGON_MAXIMUM_HEIGHTS)\n ) {\n polygonMinimumHeights = featureTable.getPropertyArray(\n \"POLYGON_MINIMUM_HEIGHTS\",\n ComponentDatatype.FLOAT,\n 1\n );\n polygonMaximumHeights = featureTable.getPropertyArray(\n \"POLYGON_MAXIMUM_HEIGHTS\",\n ComponentDatatype.FLOAT,\n 1\n );\n }\n\n content._polygons = new Vector3DTilePolygons({\n positions: polygonPositions,\n counts: polygonCounts,\n indexCounts: polygonIndexCounts,\n indices: indices,\n minimumHeight: minHeight,\n maximumHeight: maxHeight,\n polygonMinimumHeights: polygonMinimumHeights,\n polygonMaximumHeights: polygonMaximumHeights,\n center: center,\n rectangle: rectangle,\n boundingVolume: content.tile.boundingVolume.boundingVolume,\n batchTable: batchTable,\n batchIds: batchIds.polygons,\n modelMatrix: modelMatrix,\n });\n }\n\n if (numberOfPolylines > 0) {\n featureTable.featuresLength = numberOfPolylines;\n\n var polylineCounts = defaultValue(\n featureTable.getPropertyArray(\n \"POLYLINE_COUNTS\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ),\n featureTable.getPropertyArray(\n \"POLYLINE_COUNT\",\n ComponentDatatype.UNSIGNED_INT,\n 1\n ) // Workaround for old vector tilesets using the non-plural name\n );\n\n if (!defined(polylineCounts)) {\n throw new RuntimeError(\n \"Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0\"\n );\n }\n\n var widths = featureTable.getPropertyArray(\n \"POLYLINE_WIDTHS\",\n ComponentDatatype.UNSIGNED_SHORT,\n 1\n );\n if (!defined(widths)) {\n widths = new Uint16Array(numberOfPolylines);\n for (var i = 0; i < numberOfPolylines; ++i) {\n widths[i] = 2.0;\n }\n }\n\n // Use the counts array to determine how many position values we want. If we used the byte length then\n // zero padding values would be included and cause the delta zig-zag decoding to fail\n var numPolylinePositions = polylineCounts.reduce(function (total, count) {\n return total + count * 3;\n }, 0);\n var polylinePositions = new Uint16Array(\n arrayBuffer,\n byteOffset,\n numPolylinePositions\n );\n byteOffset += polylinePositionByteLength;\n\n content._polylines = new Vector3DTilePolylines({\n positions: polylinePositions,\n widths: widths,\n counts: polylineCounts,\n batchIds: batchIds.polylines,\n minimumHeight: minHeight,\n maximumHeight: maxHeight,\n center: center,\n rectangle: rectangle,\n boundingVolume: content.tile.boundingVolume.boundingVolume,\n batchTable: batchTable,\n });\n }\n\n if (numberOfPoints > 0) {\n var pointPositions = new Uint16Array(\n arrayBuffer,\n byteOffset,\n numberOfPoints * 3\n );\n byteOffset += pointsPositionByteLength;\n content._points = new Vector3DTilePoints({\n positions: pointPositions,\n batchIds: batchIds.points,\n minimumHeight: minHeight,\n maximumHeight: maxHeight,\n rectangle: rectangle,\n batchTable: batchTable,\n });\n }\n}\n\nfunction createFeatures(content) {\n var featuresLength = content.featuresLength;\n if (!defined(content._features) && featuresLength > 0) {\n var features = new Array(featuresLength);\n\n if (defined(content._polygons)) {\n content._polygons.createFeatures(content, features);\n }\n if (defined(content._polylines)) {\n content._polylines.createFeatures(content, features);\n }\n if (defined(content._points)) {\n content._points.createFeatures(content, features);\n }\n content._features = features;\n }\n}\n\nVector3DTileContent.prototype.hasProperty = function (batchId, name) {\n return this._batchTable.hasProperty(batchId, name);\n};\n\nVector3DTileContent.prototype.getFeature = function (batchId) {\n //>>includeStart('debug', pragmas.debug);\n var featuresLength = this.featuresLength;\n if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n throw new DeveloperError(\n \"batchId is required and between zero and featuresLength - 1 (\" +\n (featuresLength - 1) +\n \").\"\n );\n }\n //>>includeEnd('debug');\n\n createFeatures(this);\n return this._features[batchId];\n};\n\nVector3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n if (defined(this._polygons)) {\n this._polygons.applyDebugSettings(enabled, color);\n }\n if (defined(this._polylines)) {\n this._polylines.applyDebugSettings(enabled, color);\n }\n if (defined(this._points)) {\n this._points.applyDebugSettings(enabled, color);\n }\n};\n\nVector3DTileContent.prototype.applyStyle = function (style) {\n createFeatures(this);\n if (defined(this._polygons)) {\n this._polygons.applyStyle(style, this._features);\n }\n if (defined(this._polylines)) {\n this._polylines.applyStyle(style, this._features);\n }\n if (defined(this._points)) {\n this._points.applyStyle(style, this._features);\n }\n};\n\nVector3DTileContent.prototype.update = function (tileset, frameState) {\n var ready = true;\n if (defined(this._polygons)) {\n this._polygons.classificationType = this._tileset.classificationType;\n this._polygons.debugWireframe = this._tileset.debugWireframe;\n this._polygons.update(frameState);\n ready = ready && this._polygons._ready;\n }\n if (defined(this._polylines)) {\n this._polylines.update(frameState);\n ready = ready && this._polylines._ready;\n }\n if (defined(this._points)) {\n this._points.update(frameState);\n ready = ready && this._points._ready;\n }\n if (defined(this._batchTable) && ready) {\n this._batchTable.update(tileset, frameState);\n }\n\n if (!defined(this._contentReadyPromise)) {\n var pointsPromise = defined(this._points)\n ? this._points.readyPromise\n : undefined;\n var polygonPromise = defined(this._polygons)\n ? this._polygons.readyPromise\n : undefined;\n var polylinePromise = defined(this._polylines)\n ? this._polylines.readyPromise\n : undefined;\n\n var that = this;\n this._contentReadyPromise = when\n .all([pointsPromise, polygonPromise, polylinePromise])\n .then(function () {\n that._readyPromise.resolve(that);\n });\n }\n};\n\nVector3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nVector3DTileContent.prototype.destroy = function () {\n this._polygons = this._polygons && this._polygons.destroy();\n this._polylines = this._polylines && this._polylines.destroy();\n this._points = this._points && this._points.destroy();\n this._batchTable = this._batchTable && this._batchTable.destroy();\n return destroyObject(this);\n};\nexport default Vector3DTileContent;\n","import Batched3DModel3DTileContent from \"./Batched3DModel3DTileContent.js\";\nimport Composite3DTileContent from \"./Composite3DTileContent.js\";\nimport Geometry3DTileContent from \"./Geometry3DTileContent.js\";\nimport Instanced3DModel3DTileContent from \"./Instanced3DModel3DTileContent.js\";\nimport PointCloud3DTileContent from \"./PointCloud3DTileContent.js\";\nimport Tileset3DTileContent from \"./Tileset3DTileContent.js\";\nimport Vector3DTileContent from \"./Vector3DTileContent.js\";\n\n/**\n * Maps a tile's magic field in its header to a new content object for the tile's payload.\n *\n * @private\n */\nvar Cesium3DTileContentFactory = {\n b3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new Batched3DModel3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n pnts: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new PointCloud3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n i3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new Instanced3DModel3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n cmpt: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n // Send in the factory in order to avoid a cyclical dependency\n return new Composite3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset,\n Cesium3DTileContentFactory\n );\n },\n json: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new Tileset3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n geom: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new Geometry3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n vctr: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n return new Vector3DTileContent(\n tileset,\n tile,\n resource,\n arrayBuffer,\n byteOffset\n );\n },\n};\nexport default Cesium3DTileContentFactory;\n","/**\n * @private\n */\nvar Cesium3DTileContentState = {\n UNLOADED: 0, // Has never been requested\n LOADING: 1, // Is waiting on a pending request\n PROCESSING: 2, // Request received. Contents are being processed for rendering. Depending on the content, it might make its own requests for external data.\n READY: 3, // Ready to render.\n EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n FAILED: 5, // Request failed.\n};\nexport default Object.freeze(Cesium3DTileContentState);\n","/**\n * Hint defining optimization support for a 3D tile\n *\n * @enum {Number}\n *\n * @private\n */\nvar Cesium3DTileOptimizationHint = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0,\n};\nexport default Object.freeze(Cesium3DTileOptimizationHint);\n","import Intersect from \"../Core/Intersect.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\n\n/**\n * Traversal that loads all leaves that intersect the camera frustum.\n * Used to determine ray-tileset intersections during a pickFromRayMostDetailed call.\n *\n * @private\n */\nfunction Cesium3DTilesetMostDetailedTraversal() {}\n\nvar traversal = {\n stack: new ManagedArray(),\n stackMaximumLength: 0,\n};\n\nCesium3DTilesetMostDetailedTraversal.selectTiles = function (\n tileset,\n frameState\n) {\n tileset._selectedTiles.length = 0;\n tileset._requestedTiles.length = 0;\n tileset._hasMixedContent = false;\n\n var ready = true;\n\n var root = tileset.root;\n root.updateVisibility(frameState);\n\n if (!isVisible(root)) {\n return ready;\n }\n\n var stack = traversal.stack;\n stack.push(tileset.root);\n\n while (stack.length > 0) {\n traversal.stackMaximumLength = Math.max(\n traversal.stackMaximumLength,\n stack.length\n );\n\n var tile = stack.pop();\n var add = tile.refine === Cesium3DTileRefine.ADD;\n var replace = tile.refine === Cesium3DTileRefine.REPLACE;\n var traverse = canTraverse(tileset, tile);\n\n if (traverse) {\n updateAndPushChildren(tileset, tile, stack, frameState);\n }\n\n if (add || (replace && !traverse)) {\n loadTile(tileset, tile);\n touchTile(tileset, tile, frameState);\n selectDesiredTile(tileset, tile, frameState);\n\n if (!hasEmptyContent(tile) && !tile.contentAvailable) {\n ready = false;\n }\n }\n\n visitTile(tileset);\n }\n\n traversal.stack.trim(traversal.stackMaximumLength);\n\n return ready;\n};\n\nfunction isVisible(tile) {\n return tile._visible && tile._inRequestVolume;\n}\n\nfunction hasEmptyContent(tile) {\n return tile.hasEmptyContent || tile.hasTilesetContent;\n}\n\nfunction hasUnloadedContent(tile) {\n return !hasEmptyContent(tile) && tile.contentUnloaded;\n}\n\nfunction canTraverse(tileset, tile) {\n if (tile.children.length === 0) {\n return false;\n }\n\n if (tile.hasTilesetContent) {\n // Traverse external tileset to visit its root tile\n // Don't traverse if the subtree is expired because it will be destroyed\n return !tile.contentExpired;\n }\n\n if (tile.hasEmptyContent) {\n return true;\n }\n\n return true; // Keep traversing until a leave is hit\n}\n\nfunction updateAndPushChildren(tileset, tile, stack, frameState) {\n var children = tile.children;\n var length = children.length;\n\n for (var i = 0; i < length; ++i) {\n var child = children[i];\n child.updateVisibility(frameState);\n if (isVisible(child)) {\n stack.push(child);\n }\n }\n}\n\nfunction loadTile(tileset, tile) {\n if (hasUnloadedContent(tile) || tile.contentExpired) {\n tile._priority = 0.0; // Highest priority\n tileset._requestedTiles.push(tile);\n }\n}\n\nfunction touchTile(tileset, tile, frameState) {\n if (tile._touchedFrame === frameState.frameNumber) {\n // Prevents another pass from touching the frame again\n return;\n }\n tileset._cache.touch(tile);\n tile._touchedFrame = frameState.frameNumber;\n}\n\nfunction visitTile(tileset) {\n ++tileset.statistics.visited;\n}\n\nfunction selectDesiredTile(tileset, tile, frameState) {\n if (\n tile.contentAvailable &&\n tile.contentVisibility(frameState) !== Intersect.OUTSIDE\n ) {\n tileset._selectedTiles.push(tile);\n }\n}\nexport default Cesium3DTilesetMostDetailedTraversal;\n","import defined from \"../Core/defined.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTilesetTraversal() {}\n\nfunction isVisible(tile) {\n return tile._visible && tile._inRequestVolume;\n}\n\nvar traversal = {\n stack: new ManagedArray(),\n stackMaximumLength: 0,\n};\n\nvar emptyTraversal = {\n stack: new ManagedArray(),\n stackMaximumLength: 0,\n};\n\nvar descendantTraversal = {\n stack: new ManagedArray(),\n stackMaximumLength: 0,\n};\n\nvar selectionTraversal = {\n stack: new ManagedArray(),\n stackMaximumLength: 0,\n ancestorStack: new ManagedArray(),\n ancestorStackMaximumLength: 0,\n};\n\nvar descendantSelectionDepth = 2;\n\nCesium3DTilesetTraversal.selectTiles = function (tileset, frameState) {\n tileset._requestedTiles.length = 0;\n\n if (tileset.debugFreezeFrame) {\n return;\n }\n\n tileset._selectedTiles.length = 0;\n tileset._selectedTilesToStyle.length = 0;\n tileset._emptyTiles.length = 0;\n tileset._hasMixedContent = false;\n\n var root = tileset.root;\n updateTile(tileset, root, frameState);\n\n // The root tile is not visible\n if (!isVisible(root)) {\n return;\n }\n\n // The tileset doesn't meet the SSE requirement, therefore the tree does not need to be rendered\n if (\n root.getScreenSpaceError(frameState, true) <=\n tileset._maximumScreenSpaceError\n ) {\n return;\n }\n\n if (!skipLevelOfDetail(tileset)) {\n executeBaseTraversal(tileset, root, frameState);\n } else if (tileset.immediatelyLoadDesiredLevelOfDetail) {\n executeSkipTraversal(tileset, root, frameState);\n } else {\n executeBaseAndSkipTraversal(tileset, root, frameState);\n }\n\n traversal.stack.trim(traversal.stackMaximumLength);\n emptyTraversal.stack.trim(emptyTraversal.stackMaximumLength);\n descendantTraversal.stack.trim(descendantTraversal.stackMaximumLength);\n selectionTraversal.stack.trim(selectionTraversal.stackMaximumLength);\n selectionTraversal.ancestorStack.trim(\n selectionTraversal.ancestorStackMaximumLength\n );\n\n // Update the priority for any requests found during traversal\n // Update after traversal so that min and max values can be used to normalize priority values\n var requestedTiles = tileset._requestedTiles;\n var length = requestedTiles.length;\n for (var i = 0; i < length; ++i) {\n requestedTiles[i].updatePriority();\n }\n};\n\nfunction executeBaseTraversal(tileset, root, frameState) {\n var baseScreenSpaceError = tileset._maximumScreenSpaceError;\n var maximumScreenSpaceError = tileset._maximumScreenSpaceError;\n executeTraversal(\n tileset,\n root,\n baseScreenSpaceError,\n maximumScreenSpaceError,\n frameState\n );\n}\n\nfunction executeSkipTraversal(tileset, root, frameState) {\n var baseScreenSpaceError = Number.MAX_VALUE;\n var maximumScreenSpaceError = tileset._maximumScreenSpaceError;\n executeTraversal(\n tileset,\n root,\n baseScreenSpaceError,\n maximumScreenSpaceError,\n frameState\n );\n traverseAndSelect(tileset, root, frameState);\n}\n\nfunction executeBaseAndSkipTraversal(tileset, root, frameState) {\n var baseScreenSpaceError = Math.max(\n tileset.baseScreenSpaceError,\n tileset.maximumScreenSpaceError\n );\n var maximumScreenSpaceError = tileset.maximumScreenSpaceError;\n executeTraversal(\n tileset,\n root,\n baseScreenSpaceError,\n maximumScreenSpaceError,\n frameState\n );\n traverseAndSelect(tileset, root, frameState);\n}\n\nfunction skipLevelOfDetail(tileset) {\n return tileset._skipLevelOfDetail;\n}\n\nfunction addEmptyTile(tileset, tile) {\n tileset._emptyTiles.push(tile);\n}\n\nfunction selectTile(tileset, tile, frameState) {\n if (tile.contentVisibility(frameState) !== Intersect.OUTSIDE) {\n var tileContent = tile.content;\n if (tileContent.featurePropertiesDirty) {\n // A feature's property in this tile changed, the tile needs to be re-styled.\n tileContent.featurePropertiesDirty = false;\n tile.lastStyleTime = 0; // Force applying the style to this tile\n tileset._selectedTilesToStyle.push(tile);\n } else if (tile._selectedFrame < frameState.frameNumber - 1) {\n // Tile is newly selected; it is selected this frame, but was not selected last frame.\n tileset._selectedTilesToStyle.push(tile);\n }\n tile._selectedFrame = frameState.frameNumber;\n tileset._selectedTiles.push(tile);\n }\n}\n\nfunction selectDescendants(tileset, root, frameState) {\n var stack = descendantTraversal.stack;\n stack.push(root);\n while (stack.length > 0) {\n descendantTraversal.stackMaximumLength = Math.max(\n descendantTraversal.stackMaximumLength,\n stack.length\n );\n var tile = stack.pop();\n var children = tile.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n var child = children[i];\n if (isVisible(child)) {\n if (child.contentAvailable) {\n updateTile(tileset, child, frameState);\n touchTile(tileset, child, frameState);\n selectTile(tileset, child, frameState);\n } else if (child._depth - root._depth < descendantSelectionDepth) {\n // Continue traversing, but not too far\n stack.push(child);\n }\n }\n }\n }\n}\n\nfunction selectDesiredTile(tileset, tile, frameState) {\n if (!skipLevelOfDetail(tileset)) {\n if (tile.contentAvailable) {\n // The tile can be selected right away and does not require traverseAndSelect\n selectTile(tileset, tile, frameState);\n }\n return;\n }\n\n // If this tile is not loaded attempt to select its ancestor instead\n var loadedTile = tile.contentAvailable\n ? tile\n : tile._ancestorWithContentAvailable;\n if (defined(loadedTile)) {\n // Tiles will actually be selected in traverseAndSelect\n loadedTile._shouldSelect = true;\n } else {\n // If no ancestors are ready traverse down and select tiles to minimize empty regions.\n // This happens often for immediatelyLoadDesiredLevelOfDetail where parent tiles are not necessarily loaded before zooming out.\n selectDescendants(tileset, tile, frameState);\n }\n}\n\nfunction visitTile(tileset, tile, frameState) {\n ++tileset._statistics.visited;\n tile._visitedFrame = frameState.frameNumber;\n}\n\nfunction touchTile(tileset, tile, frameState) {\n if (tile._touchedFrame === frameState.frameNumber) {\n // Prevents another pass from touching the frame again\n return;\n }\n tileset._cache.touch(tile);\n tile._touchedFrame = frameState.frameNumber;\n}\n\nfunction updateMinimumMaximumPriority(tileset, tile) {\n tileset._maximumPriority.distance = Math.max(\n tile._priorityHolder._distanceToCamera,\n tileset._maximumPriority.distance\n );\n tileset._minimumPriority.distance = Math.min(\n tile._priorityHolder._distanceToCamera,\n tileset._minimumPriority.distance\n );\n tileset._maximumPriority.depth = Math.max(\n tile._depth,\n tileset._maximumPriority.depth\n );\n tileset._minimumPriority.depth = Math.min(\n tile._depth,\n tileset._minimumPriority.depth\n );\n tileset._maximumPriority.foveatedFactor = Math.max(\n tile._priorityHolder._foveatedFactor,\n tileset._maximumPriority.foveatedFactor\n );\n tileset._minimumPriority.foveatedFactor = Math.min(\n tile._priorityHolder._foveatedFactor,\n tileset._minimumPriority.foveatedFactor\n );\n tileset._maximumPriority.reverseScreenSpaceError = Math.max(\n tile._priorityReverseScreenSpaceError,\n tileset._maximumPriority.reverseScreenSpaceError\n );\n tileset._minimumPriority.reverseScreenSpaceError = Math.min(\n tile._priorityReverseScreenSpaceError,\n tileset._minimumPriority.reverseScreenSpaceError\n );\n}\n\nfunction isOnScreenLongEnough(tileset, tile, frameState) {\n // Prevent unnecessary loads while camera is moving by getting the ratio of travel distance to tile size.\n if (!tileset._cullRequestsWhileMoving) {\n return true;\n }\n\n var sphere = tile.boundingSphere;\n var diameter = Math.max(sphere.radius * 2.0, 1.0);\n\n var camera = frameState.camera;\n var deltaMagnitude =\n camera.positionWCDeltaMagnitude !== 0.0\n ? camera.positionWCDeltaMagnitude\n : camera.positionWCDeltaMagnitudeLastFrame;\n var movementRatio =\n (tileset.cullRequestsWhileMovingMultiplier * deltaMagnitude) / diameter; // How do n frames of this movement compare to the tile's physical size.\n return movementRatio < 1.0;\n}\n\nfunction loadTile(tileset, tile, frameState) {\n if (\n tile._requestedFrame === frameState.frameNumber ||\n (!hasUnloadedContent(tile) && !tile.contentExpired)\n ) {\n return;\n }\n\n if (!isOnScreenLongEnough(tileset, tile, frameState)) {\n return;\n }\n\n var cameraHasNotStoppedMovingLongEnough =\n frameState.camera.timeSinceMoved < tileset.foveatedTimeDelay;\n if (tile.priorityDeferred && cameraHasNotStoppedMovingLongEnough) {\n return;\n }\n\n tile._requestedFrame = frameState.frameNumber;\n tileset._requestedTiles.push(tile);\n}\n\nfunction updateVisibility(tileset, tile, frameState) {\n if (tile._updatedVisibilityFrame === tileset._updatedVisibilityFrame) {\n // Return early if visibility has already been checked during the traversal.\n // The visibility may have already been checked if the cullWithChildrenBounds optimization is used.\n return;\n }\n\n tile.updateVisibility(frameState);\n tile._updatedVisibilityFrame = tileset._updatedVisibilityFrame;\n}\n\nfunction anyChildrenVisible(tileset, tile, frameState) {\n var anyVisible = false;\n var children = tile.children;\n var length = children.length;\n for (var i = 0; i < length; ++i) {\n var child = children[i];\n updateVisibility(tileset, child, frameState);\n anyVisible = anyVisible || isVisible(child);\n }\n return anyVisible;\n}\n\nfunction meetsScreenSpaceErrorEarly(tileset, tile, frameState) {\n var parent = tile.parent;\n if (\n !defined(parent) ||\n parent.hasTilesetContent ||\n parent.refine !== Cesium3DTileRefine.ADD\n ) {\n return false;\n }\n\n // Use parent's geometric error with child's box to see if the tile already meet the SSE\n return (\n tile.getScreenSpaceError(frameState, true) <=\n tileset._maximumScreenSpaceError\n );\n}\n\nfunction updateTileVisibility(tileset, tile, frameState) {\n updateVisibility(tileset, tile, frameState);\n\n if (!isVisible(tile)) {\n return;\n }\n\n var hasChildren = tile.children.length > 0;\n if (tile.hasTilesetContent && hasChildren) {\n // Use the root tile's visibility instead of this tile's visibility.\n // The root tile may be culled by the children bounds optimization in which\n // case this tile should also be culled.\n var child = tile.children[0];\n updateTileVisibility(tileset, child, frameState);\n tile._visible = child._visible;\n return;\n }\n\n if (meetsScreenSpaceErrorEarly(tileset, tile, frameState)) {\n tile._visible = false;\n return;\n }\n\n // Optimization - if none of the tile's children are visible then this tile isn't visible\n var replace = tile.refine === Cesium3DTileRefine.REPLACE;\n var useOptimization =\n tile._optimChildrenWithinParent ===\n Cesium3DTileOptimizationHint.USE_OPTIMIZATION;\n if (replace && useOptimization && hasChildren) {\n if (!anyChildrenVisible(tileset, tile, frameState)) {\n ++tileset._statistics.numberOfTilesCulledWithChildrenUnion;\n tile._visible = false;\n return;\n }\n }\n}\n\nfunction updateTile(tileset, tile, frameState) {\n // Reset some of the tile's flags and re-evaluate visibility\n updateTileVisibility(tileset, tile, frameState);\n tile.updateExpiration();\n\n // Request priority\n tile._wasMinPriorityChild = false;\n tile._priorityHolder = tile;\n updateMinimumMaximumPriority(tileset, tile);\n\n // SkipLOD\n tile._shouldSelect = false;\n tile._finalResolution = true;\n}\n\nfunction updateTileAncestorContentLinks(tile, frameState) {\n tile._ancestorWithContent = undefined;\n tile._ancestorWithContentAvailable = undefined;\n\n var parent = tile.parent;\n if (defined(parent)) {\n // ancestorWithContent is an ancestor that has content or has the potential to have\n // content. Used in conjunction with tileset.skipLevels to know when to skip a tile.\n // ancestorWithContentAvailable is an ancestor that is rendered if a desired tile is not loaded.\n var hasContent =\n !hasUnloadedContent(parent) ||\n parent._requestedFrame === frameState.frameNumber;\n tile._ancestorWithContent = hasContent\n ? parent\n : parent._ancestorWithContent;\n tile._ancestorWithContentAvailable = parent.contentAvailable\n ? parent\n : parent._ancestorWithContentAvailable; // Links a descendant up to its contentAvailable ancestor as the traversal progresses.\n }\n}\n\nfunction hasEmptyContent(tile) {\n return tile.hasEmptyContent || tile.hasTilesetContent;\n}\n\nfunction hasUnloadedContent(tile) {\n return !hasEmptyContent(tile) && tile.contentUnloaded;\n}\n\nfunction reachedSkippingThreshold(tileset, tile) {\n var ancestor = tile._ancestorWithContent;\n return (\n !tileset.immediatelyLoadDesiredLevelOfDetail &&\n (tile._priorityProgressiveResolutionScreenSpaceErrorLeaf ||\n (defined(ancestor) &&\n tile._screenSpaceError <\n ancestor._screenSpaceError / tileset.skipScreenSpaceErrorFactor &&\n tile._depth > ancestor._depth + tileset.skipLevels))\n );\n}\n\nfunction sortChildrenByDistanceToCamera(a, b) {\n // Sort by farthest child first since this is going on a stack\n if (b._distanceToCamera === 0 && a._distanceToCamera === 0) {\n return b._centerZDepth - a._centerZDepth;\n }\n\n return b._distanceToCamera - a._distanceToCamera;\n}\n\nfunction updateAndPushChildren(tileset, tile, stack, frameState) {\n var i;\n var replace = tile.refine === Cesium3DTileRefine.REPLACE;\n var children = tile.children;\n var length = children.length;\n\n for (i = 0; i < length; ++i) {\n updateTile(tileset, children[i], frameState);\n }\n\n // Sort by distance to take advantage of early Z and reduce artifacts for skipLevelOfDetail\n children.sort(sortChildrenByDistanceToCamera);\n\n // For traditional replacement refinement only refine if all children are loaded.\n // Empty tiles are exempt since it looks better if children stream in as they are loaded to fill the empty space.\n var checkRefines =\n !skipLevelOfDetail(tileset) && replace && !hasEmptyContent(tile);\n var refines = true;\n\n var anyChildrenVisible = false;\n\n // Determining min child\n var minIndex = -1;\n var minimumPriority = Number.MAX_VALUE;\n\n var child;\n for (i = 0; i < length; ++i) {\n child = children[i];\n if (isVisible(child)) {\n stack.push(child);\n if (child._foveatedFactor < minimumPriority) {\n minIndex = i;\n minimumPriority = child._foveatedFactor;\n }\n anyChildrenVisible = true;\n } else if (checkRefines || tileset.loadSiblings) {\n // Keep non-visible children loaded since they are still needed before the parent can refine.\n // Or loadSiblings is true so always load tiles regardless of visibility.\n if (child._foveatedFactor < minimumPriority) {\n minIndex = i;\n minimumPriority = child._foveatedFactor;\n }\n loadTile(tileset, child, frameState);\n touchTile(tileset, child, frameState);\n }\n if (checkRefines) {\n var childRefines;\n if (!child._inRequestVolume) {\n childRefines = false;\n } else if (hasEmptyContent(child)) {\n childRefines = executeEmptyTraversal(tileset, child, frameState);\n } else {\n childRefines = child.contentAvailable;\n }\n refines = refines && childRefines;\n }\n }\n\n if (!anyChildrenVisible) {\n refines = false;\n }\n\n if (minIndex !== -1 && !skipLevelOfDetail(tileset) && replace) {\n // An ancestor will hold the _foveatedFactor and _distanceToCamera for descendants between itself and its highest priority descendant. Siblings of a min children along the way use this ancestor as their priority holder as well.\n // Priority of all tiles that refer to the _foveatedFactor and _distanceToCamera stored in the common ancestor will be differentiated based on their _depth.\n var minPriorityChild = children[minIndex];\n minPriorityChild._wasMinPriorityChild = true;\n var priorityHolder =\n (tile._wasMinPriorityChild || tile === tileset.root) &&\n minimumPriority <= tile._priorityHolder._foveatedFactor\n ? tile._priorityHolder\n : tile; // This is where priority dependency chains are wired up or started anew.\n priorityHolder._foveatedFactor = Math.min(\n minPriorityChild._foveatedFactor,\n priorityHolder._foveatedFactor\n );\n priorityHolder._distanceToCamera = Math.min(\n minPriorityChild._distanceToCamera,\n priorityHolder._distanceToCamera\n );\n\n for (i = 0; i < length; ++i) {\n child = children[i];\n child._priorityHolder = priorityHolder;\n }\n }\n\n return refines;\n}\n\nfunction inBaseTraversal(tileset, tile, baseScreenSpaceError) {\n if (!skipLevelOfDetail(tileset)) {\n return true;\n }\n if (tileset.immediatelyLoadDesiredLevelOfDetail) {\n return false;\n }\n if (!defined(tile._ancestorWithContent)) {\n // Include root or near-root tiles in the base traversal so there is something to select up to\n return true;\n }\n if (tile._screenSpaceError === 0.0) {\n // If a leaf, use parent's SSE\n return tile.parent._screenSpaceError > baseScreenSpaceError;\n }\n return tile._screenSpaceError > baseScreenSpaceError;\n}\n\nfunction canTraverse(tileset, tile) {\n if (tile.children.length === 0) {\n return false;\n }\n if (tile.hasTilesetContent) {\n // Traverse external tileset to visit its root tile\n // Don't traverse if the subtree is expired because it will be destroyed\n return !tile.contentExpired;\n }\n return tile._screenSpaceError > tileset._maximumScreenSpaceError;\n}\n\nfunction executeTraversal(\n tileset,\n root,\n baseScreenSpaceError,\n maximumScreenSpaceError,\n frameState\n) {\n // Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n // If skipLevelOfDetail is off then a tile does not refine until all children are loaded.\n // This is the traditional replacement refinement approach and is called the base traversal.\n // Tiles that have a greater screen space error than the base screen space error are part of the base traversal,\n // all other tiles are part of the skip traversal. The skip traversal allows for skipping levels of the tree\n // and rendering children and parent tiles simultaneously.\n var stack = traversal.stack;\n stack.push(root);\n\n while (stack.length > 0) {\n traversal.stackMaximumLength = Math.max(\n traversal.stackMaximumLength,\n stack.length\n );\n\n var tile = stack.pop();\n\n updateTileAncestorContentLinks(tile, frameState);\n var baseTraversal = inBaseTraversal(tileset, tile, baseScreenSpaceError);\n var add = tile.refine === Cesium3DTileRefine.ADD;\n var replace = tile.refine === Cesium3DTileRefine.REPLACE;\n var parent = tile.parent;\n var parentRefines = !defined(parent) || parent._refines;\n var refines = false;\n\n if (canTraverse(tileset, tile)) {\n refines =\n updateAndPushChildren(tileset, tile, stack, frameState) &&\n parentRefines;\n }\n\n var stoppedRefining = !refines && parentRefines;\n\n if (hasEmptyContent(tile)) {\n // Add empty tile just to show its debug bounding volume\n // If the tile has tileset content load the external tileset\n // If the tile cannot refine further select its nearest loaded ancestor\n addEmptyTile(tileset, tile, frameState);\n loadTile(tileset, tile, frameState);\n if (stoppedRefining) {\n selectDesiredTile(tileset, tile, frameState);\n }\n } else if (add) {\n // Additive tiles are always loaded and selected\n selectDesiredTile(tileset, tile, frameState);\n loadTile(tileset, tile, frameState);\n } else if (replace) {\n if (baseTraversal) {\n // Always load tiles in the base traversal\n // Select tiles that can't refine further\n loadTile(tileset, tile, frameState);\n if (stoppedRefining) {\n selectDesiredTile(tileset, tile, frameState);\n }\n } else if (stoppedRefining) {\n // In skip traversal, load and select tiles that can't refine further\n selectDesiredTile(tileset, tile, frameState);\n loadTile(tileset, tile, frameState);\n } else if (reachedSkippingThreshold(tileset, tile)) {\n // In skip traversal, load tiles that aren't skipped. In practice roughly half the tiles stay unloaded.\n loadTile(tileset, tile, frameState);\n }\n }\n\n visitTile(tileset, tile, frameState);\n touchTile(tileset, tile, frameState);\n tile._refines = refines;\n }\n}\n\nfunction executeEmptyTraversal(tileset, root, frameState) {\n // Depth-first traversal that checks if all nearest descendants with content are loaded. Ignores visibility.\n var allDescendantsLoaded = true;\n var stack = emptyTraversal.stack;\n stack.push(root);\n\n while (stack.length > 0) {\n emptyTraversal.stackMaximumLength = Math.max(\n emptyTraversal.stackMaximumLength,\n stack.length\n );\n\n var tile = stack.pop();\n var children = tile.children;\n var childrenLength = children.length;\n\n // Only traverse if the tile is empty - traversal stop at descendants with content\n var traverse = hasEmptyContent(tile) && canTraverse(tileset, tile);\n\n // Traversal stops but the tile does not have content yet.\n // There will be holes if the parent tries to refine to its children, so don't refine.\n if (!traverse && !tile.contentAvailable) {\n allDescendantsLoaded = false;\n }\n\n updateTile(tileset, tile, frameState);\n if (!isVisible(tile)) {\n // Load tiles that aren't visible since they are still needed for the parent to refine\n loadTile(tileset, tile, frameState);\n touchTile(tileset, tile, frameState);\n }\n\n if (traverse) {\n for (var i = 0; i < childrenLength; ++i) {\n var child = children[i];\n stack.push(child);\n }\n }\n }\n\n return allDescendantsLoaded;\n}\n\n/**\n * Traverse the tree and check if their selected frame is the current frame. If so, add it to a selection queue.\n * This is a preorder traversal so children tiles are selected before ancestor tiles.\n *\n * The reason for the preorder traversal is so that tiles can easily be marked with their\n * selection depth. A tile's _selectionDepth is its depth in the tree where all non-selected tiles are removed.\n * This property is important for use in the stencil test because we want to render deeper tiles on top of their\n * ancestors. If a tileset is very deep, the depth is unlikely to fit into the stencil buffer.\n *\n * We want to select children before their ancestors because there is no guarantee on the relationship between\n * the children's z-depth and the ancestor's z-depth. We cannot rely on Z because we want the child to appear on top\n * of ancestor regardless of true depth. The stencil tests used require children to be drawn first.\n *\n * NOTE: 3D Tiles uses 3 bits from the stencil buffer meaning this will not work when there is a chain of\n * selected tiles that is deeper than 7. This is not very likely.\n * @private\n */\nfunction traverseAndSelect(tileset, root, frameState) {\n var stack = selectionTraversal.stack;\n var ancestorStack = selectionTraversal.ancestorStack;\n var lastAncestor;\n\n stack.push(root);\n\n while (stack.length > 0 || ancestorStack.length > 0) {\n selectionTraversal.stackMaximumLength = Math.max(\n selectionTraversal.stackMaximumLength,\n stack.length\n );\n selectionTraversal.ancestorStackMaximumLength = Math.max(\n selectionTraversal.ancestorStackMaximumLength,\n ancestorStack.length\n );\n\n if (ancestorStack.length > 0) {\n var waitingTile = ancestorStack.peek();\n if (waitingTile._stackLength === stack.length) {\n ancestorStack.pop();\n if (waitingTile !== lastAncestor) {\n waitingTile._finalResolution = false;\n }\n selectTile(tileset, waitingTile, frameState);\n continue;\n }\n }\n\n var tile = stack.pop();\n if (!defined(tile)) {\n // stack is empty but ancestorStack isn't\n continue;\n }\n\n var add = tile.refine === Cesium3DTileRefine.ADD;\n var shouldSelect = tile._shouldSelect;\n var children = tile.children;\n var childrenLength = children.length;\n var traverse = canTraverse(tileset, tile);\n\n if (shouldSelect) {\n if (add) {\n selectTile(tileset, tile, frameState);\n } else {\n tile._selectionDepth = ancestorStack.length;\n if (tile._selectionDepth > 0) {\n tileset._hasMixedContent = true;\n }\n lastAncestor = tile;\n if (!traverse) {\n selectTile(tileset, tile, frameState);\n continue;\n }\n ancestorStack.push(tile);\n tile._stackLength = stack.length;\n }\n }\n\n if (traverse) {\n for (var i = 0; i < childrenLength; ++i) {\n var child = children[i];\n if (isVisible(child)) {\n stack.push(child);\n }\n }\n }\n }\n}\nexport default Cesium3DTilesetTraversal;\n","import Cesium3DTilesetMostDetailedTraversal from \"./Cesium3DTilesetMostDetailedTraversal.js\";\nimport Cesium3DTilesetTraversal from \"./Cesium3DTilesetTraversal.js\";\n\n/**\n * The pass in which a 3D Tileset is updated.\n *\n * @private\n */\nvar Cesium3DTilePass = {\n RENDER: 0,\n PICK: 1,\n SHADOW: 2,\n PRELOAD: 3,\n PRELOAD_FLIGHT: 4,\n REQUEST_RENDER_MODE_DEFER_CHECK: 5,\n MOST_DETAILED_PRELOAD: 6,\n MOST_DETAILED_PICK: 7,\n NUMBER_OF_PASSES: 8,\n};\n\nvar passOptions = new Array(Cesium3DTilePass.NUMBER_OF_PASSES);\n\npassOptions[Cesium3DTilePass.RENDER] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: true,\n requestTiles: true,\n ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.PICK] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: false,\n requestTiles: false,\n ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.SHADOW] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: false,\n requestTiles: true,\n ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.PRELOAD] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: false,\n requestTiles: true,\n ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.PRELOAD_FLIGHT] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: false,\n requestTiles: true,\n ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK] = Object.freeze({\n traversal: Cesium3DTilesetTraversal,\n isRender: false,\n requestTiles: true,\n ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.MOST_DETAILED_PRELOAD] = Object.freeze({\n traversal: Cesium3DTilesetMostDetailedTraversal,\n isRender: false,\n requestTiles: true,\n ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.MOST_DETAILED_PICK] = Object.freeze({\n traversal: Cesium3DTilesetMostDetailedTraversal,\n isRender: false,\n requestTiles: false,\n ignoreCommands: false,\n});\n\nCesium3DTilePass.getPassOptions = function (pass) {\n return passOptions[pass];\n};\nexport default Object.freeze(Cesium3DTilePass);\n","import destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * Represents empty content for tiles in a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles} tileset that\n * do not have content, e.g., because they are used to optimize hierarchical culling.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Empty3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Empty3DTileContent(tileset, tile) {\n this._tileset = tileset;\n this._tile = tile;\n\n this.featurePropertiesDirty = false;\n}\n\nObject.defineProperties(Empty3DTileContent.prototype, {\n featuresLength: {\n get: function () {\n return 0;\n },\n },\n\n pointsLength: {\n get: function () {\n return 0;\n },\n },\n\n trianglesLength: {\n get: function () {\n return 0;\n },\n },\n\n geometryByteLength: {\n get: function () {\n return 0;\n },\n },\n\n texturesByteLength: {\n get: function () {\n return 0;\n },\n },\n\n batchTableByteLength: {\n get: function () {\n return 0;\n },\n },\n\n innerContents: {\n get: function () {\n return undefined;\n },\n },\n\n readyPromise: {\n get: function () {\n return undefined;\n },\n },\n\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n tile: {\n get: function () {\n return this._tile;\n },\n },\n\n url: {\n get: function () {\n return undefined;\n },\n },\n\n batchTable: {\n get: function () {\n return undefined;\n },\n },\n});\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Empty3DTileContent</code>\n * always returns <code>false</code> since a tile of this type does not have any features.\n */\nEmpty3DTileContent.prototype.hasProperty = function (batchId, name) {\n return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface. <code>Empty3DTileContent</code>\n * always returns <code>undefined</code> since a tile of this type does not have any features.\n */\nEmpty3DTileContent.prototype.getFeature = function (batchId) {\n return undefined;\n};\n\nEmpty3DTileContent.prototype.applyDebugSettings = function (enabled, color) {};\n\nEmpty3DTileContent.prototype.applyStyle = function (style) {};\n\nEmpty3DTileContent.prototype.update = function (tileset, frameState) {};\n\nEmpty3DTileContent.prototype.isDestroyed = function () {\n return false;\n};\n\nEmpty3DTileContent.prototype.destroy = function () {\n return destroyObject(this);\n};\nexport default Empty3DTileContent;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Plane from \"../Core/Plane.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RectangleOutlineGeometry from \"../Core/RectangleOutlineGeometry.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * A tile bounding volume specified as a longitude/latitude/height region.\n * @alias TileBoundingRegion\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Rectangle} options.rectangle The rectangle specifying the longitude and latitude range of the region.\n * @param {Number} [options.minimumHeight=0.0] The minimum height of the region.\n * @param {Number} [options.maximumHeight=0.0] The maximum height of the region.\n * @param {Ellipsoid} [options.ellipsoid=Cesium.Ellipsoid.WGS84] The ellipsoid.\n * @param {Boolean} [options.computeBoundingVolumes=true] True to compute the {@link TileBoundingRegion#boundingVolume} and\n * {@link TileBoundingVolume#boundingSphere}. If false, these properties will be undefined.\n *\n * @private\n */\nfunction TileBoundingRegion(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.rectangle\", options.rectangle);\n //>>includeEnd('debug');\n\n this.rectangle = Rectangle.clone(options.rectangle);\n this.minimumHeight = defaultValue(options.minimumHeight, 0.0);\n this.maximumHeight = defaultValue(options.maximumHeight, 0.0);\n\n /**\n * The world coordinates of the southwest corner of the tile's rectangle.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.southwestCornerCartesian = new Cartesian3();\n\n /**\n * The world coordinates of the northeast corner of the tile's rectangle.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.northeastCornerCartesian = new Cartesian3();\n\n /**\n * A normal that, along with southwestCornerCartesian, defines a plane at the western edge of\n * the tile. Any position above (in the direction of the normal) this plane is outside the tile.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.westNormal = new Cartesian3();\n\n /**\n * A normal that, along with southwestCornerCartesian, defines a plane at the southern edge of\n * the tile. Any position above (in the direction of the normal) this plane is outside the tile.\n * Because points of constant latitude do not necessary lie in a plane, positions below this\n * plane are not necessarily inside the tile, but they are close.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.southNormal = new Cartesian3();\n\n /**\n * A normal that, along with northeastCornerCartesian, defines a plane at the eastern edge of\n * the tile. Any position above (in the direction of the normal) this plane is outside the tile.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.eastNormal = new Cartesian3();\n\n /**\n * A normal that, along with northeastCornerCartesian, defines a plane at the eastern edge of\n * the tile. Any position above (in the direction of the normal) this plane is outside the tile.\n * Because points of constant latitude do not necessary lie in a plane, positions below this\n * plane are not necessarily inside the tile, but they are close.\n *\n * @type {Cartesian3}\n * @default Cartesian3()\n */\n this.northNormal = new Cartesian3();\n\n var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n computeBox(this, options.rectangle, ellipsoid);\n\n if (defaultValue(options.computeBoundingVolumes, true)) {\n // An oriented bounding box that encloses this tile's region. This is used to calculate tile visibility.\n this._orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n this.rectangle,\n this.minimumHeight,\n this.maximumHeight,\n ellipsoid\n );\n\n this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n this._orientedBoundingBox\n );\n }\n}\n\nObject.defineProperties(TileBoundingRegion.prototype, {\n /**\n * The underlying bounding volume\n *\n * @memberof TileBoundingRegion.prototype\n *\n * @type {Object}\n * @readonly\n */\n boundingVolume: {\n get: function () {\n return this._orientedBoundingBox;\n },\n },\n /**\n * The underlying bounding sphere\n *\n * @memberof TileBoundingRegion.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n */\n boundingSphere: {\n get: function () {\n return this._boundingSphere;\n },\n },\n});\n\nvar cartesian3Scratch = new Cartesian3();\nvar cartesian3Scratch2 = new Cartesian3();\nvar cartesian3Scratch3 = new Cartesian3();\nvar eastWestNormalScratch = new Cartesian3();\nvar westernMidpointScratch = new Cartesian3();\nvar easternMidpointScratch = new Cartesian3();\nvar cartographicScratch = new Cartographic();\nvar planeScratch = new Plane(Cartesian3.UNIT_X, 0.0);\nvar rayScratch = new Ray();\n\nfunction computeBox(tileBB, rectangle, ellipsoid) {\n ellipsoid.cartographicToCartesian(\n Rectangle.southwest(rectangle),\n tileBB.southwestCornerCartesian\n );\n ellipsoid.cartographicToCartesian(\n Rectangle.northeast(rectangle),\n tileBB.northeastCornerCartesian\n );\n\n // The middle latitude on the western edge.\n cartographicScratch.longitude = rectangle.west;\n cartographicScratch.latitude = (rectangle.south + rectangle.north) * 0.5;\n cartographicScratch.height = 0.0;\n var westernMidpointCartesian = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n westernMidpointScratch\n );\n\n // Compute the normal of the plane on the western edge of the tile.\n var westNormal = Cartesian3.cross(\n westernMidpointCartesian,\n Cartesian3.UNIT_Z,\n cartesian3Scratch\n );\n Cartesian3.normalize(westNormal, tileBB.westNormal);\n\n // The middle latitude on the eastern edge.\n cartographicScratch.longitude = rectangle.east;\n var easternMidpointCartesian = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n easternMidpointScratch\n );\n\n // Compute the normal of the plane on the eastern edge of the tile.\n var eastNormal = Cartesian3.cross(\n Cartesian3.UNIT_Z,\n easternMidpointCartesian,\n cartesian3Scratch\n );\n Cartesian3.normalize(eastNormal, tileBB.eastNormal);\n\n // Compute the normal of the plane bounding the southern edge of the tile.\n var westVector = Cartesian3.subtract(\n westernMidpointCartesian,\n easternMidpointCartesian,\n cartesian3Scratch\n );\n var eastWestNormal = Cartesian3.normalize(westVector, eastWestNormalScratch);\n\n var south = rectangle.south;\n var southSurfaceNormal;\n\n if (south > 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch.longitude = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch.latitude = south;\n var southCenterCartesian = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n rayScratch.origin\n );\n Cartesian3.clone(eastWestNormal, rayScratch.direction);\n var westPlane = Plane.fromPointNormal(\n tileBB.southwestCornerCartesian,\n tileBB.westNormal,\n planeScratch\n );\n // Find a point that is on the west and the south planes\n IntersectionTests.rayPlane(\n rayScratch,\n westPlane,\n tileBB.southwestCornerCartesian\n );\n southSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n southCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n southSurfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n Rectangle.southeast(rectangle),\n cartesian3Scratch2\n );\n }\n var southNormal = Cartesian3.cross(\n southSurfaceNormal,\n westVector,\n cartesian3Scratch3\n );\n Cartesian3.normalize(southNormal, tileBB.southNormal);\n\n // Compute the normal of the plane bounding the northern edge of the tile.\n var north = rectangle.north;\n var northSurfaceNormal;\n if (north < 0.0) {\n // Compute a plane that doesn't cut through the tile.\n cartographicScratch.longitude = (rectangle.west + rectangle.east) * 0.5;\n cartographicScratch.latitude = north;\n var northCenterCartesian = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n rayScratch.origin\n );\n Cartesian3.negate(eastWestNormal, rayScratch.direction);\n var eastPlane = Plane.fromPointNormal(\n tileBB.northeastCornerCartesian,\n tileBB.eastNormal,\n planeScratch\n );\n // Find a point that is on the east and the north planes\n IntersectionTests.rayPlane(\n rayScratch,\n eastPlane,\n tileBB.northeastCornerCartesian\n );\n northSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n northCenterCartesian,\n cartesian3Scratch2\n );\n } else {\n northSurfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n Rectangle.northwest(rectangle),\n cartesian3Scratch2\n );\n }\n var northNormal = Cartesian3.cross(\n westVector,\n northSurfaceNormal,\n cartesian3Scratch3\n );\n Cartesian3.normalize(northNormal, tileBB.northNormal);\n}\n\nvar southwestCornerScratch = new Cartesian3();\nvar northeastCornerScratch = new Cartesian3();\nvar negativeUnitY = new Cartesian3(0.0, -1.0, 0.0);\nvar negativeUnitZ = new Cartesian3(0.0, 0.0, -1.0);\nvar vectorScratch = new Cartesian3();\n\n/**\n * Gets the distance from the camera to the closest point on the tile. This is used for level of detail selection.\n *\n * @param {FrameState} frameState The state information of the current rendering frame.\n * @returns {Number} The distance from the camera to the closest point on the tile, in meters.\n */\nTileBoundingRegion.prototype.distanceToCamera = function (frameState) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"frameState\", frameState);\n //>>includeEnd('debug');\n var camera = frameState.camera;\n var cameraCartesianPosition = camera.positionWC;\n var cameraCartographicPosition = camera.positionCartographic;\n\n var result = 0.0;\n if (!Rectangle.contains(this.rectangle, cameraCartographicPosition)) {\n var southwestCornerCartesian = this.southwestCornerCartesian;\n var northeastCornerCartesian = this.northeastCornerCartesian;\n var westNormal = this.westNormal;\n var southNormal = this.southNormal;\n var eastNormal = this.eastNormal;\n var northNormal = this.northNormal;\n\n if (frameState.mode !== SceneMode.SCENE3D) {\n southwestCornerCartesian = frameState.mapProjection.project(\n Rectangle.southwest(this.rectangle),\n southwestCornerScratch\n );\n southwestCornerCartesian.z = southwestCornerCartesian.y;\n southwestCornerCartesian.y = southwestCornerCartesian.x;\n southwestCornerCartesian.x = 0.0;\n northeastCornerCartesian = frameState.mapProjection.project(\n Rectangle.northeast(this.rectangle),\n northeastCornerScratch\n );\n northeastCornerCartesian.z = northeastCornerCartesian.y;\n northeastCornerCartesian.y = northeastCornerCartesian.x;\n northeastCornerCartesian.x = 0.0;\n westNormal = negativeUnitY;\n eastNormal = Cartesian3.UNIT_Y;\n southNormal = negativeUnitZ;\n northNormal = Cartesian3.UNIT_Z;\n }\n\n var vectorFromSouthwestCorner = Cartesian3.subtract(\n cameraCartesianPosition,\n southwestCornerCartesian,\n vectorScratch\n );\n var distanceToWestPlane = Cartesian3.dot(\n vectorFromSouthwestCorner,\n westNormal\n );\n var distanceToSouthPlane = Cartesian3.dot(\n vectorFromSouthwestCorner,\n southNormal\n );\n\n var vectorFromNortheastCorner = Cartesian3.subtract(\n cameraCartesianPosition,\n northeastCornerCartesian,\n vectorScratch\n );\n var distanceToEastPlane = Cartesian3.dot(\n vectorFromNortheastCorner,\n eastNormal\n );\n var distanceToNorthPlane = Cartesian3.dot(\n vectorFromNortheastCorner,\n northNormal\n );\n\n if (distanceToWestPlane > 0.0) {\n result += distanceToWestPlane * distanceToWestPlane;\n } else if (distanceToEastPlane > 0.0) {\n result += distanceToEastPlane * distanceToEastPlane;\n }\n\n if (distanceToSouthPlane > 0.0) {\n result += distanceToSouthPlane * distanceToSouthPlane;\n } else if (distanceToNorthPlane > 0.0) {\n result += distanceToNorthPlane * distanceToNorthPlane;\n }\n }\n\n var cameraHeight;\n var minimumHeight;\n var maximumHeight;\n if (frameState.mode === SceneMode.SCENE3D) {\n cameraHeight = cameraCartographicPosition.height;\n minimumHeight = this.minimumHeight;\n maximumHeight = this.maximumHeight;\n } else {\n cameraHeight = cameraCartesianPosition.x;\n minimumHeight = 0.0;\n maximumHeight = 0.0;\n }\n\n if (cameraHeight > maximumHeight) {\n var distanceAboveTop = cameraHeight - maximumHeight;\n result += distanceAboveTop * distanceAboveTop;\n } else if (cameraHeight < minimumHeight) {\n var distanceBelowBottom = minimumHeight - cameraHeight;\n result += distanceBelowBottom * distanceBelowBottom;\n }\n\n return Math.sqrt(result);\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nTileBoundingRegion.prototype.intersectPlane = function (plane) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"plane\", plane);\n //>>includeEnd('debug');\n return this._orientedBoundingBox.intersectPlane(plane);\n};\n\n/**\n * Creates a debug primitive that shows the outline of the tile bounding region.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n *\n * @private\n */\nTileBoundingRegion.prototype.createDebugVolume = function (color) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"color\", color);\n //>>includeEnd('debug');\n\n var modelMatrix = new Matrix4.clone(Matrix4.IDENTITY);\n var geometry = new RectangleOutlineGeometry({\n rectangle: this.rectangle,\n height: this.minimumHeight,\n extrudedHeight: this.maximumHeight,\n });\n var instance = new GeometryInstance({\n geometry: geometry,\n id: \"outline\",\n modelMatrix: modelMatrix,\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(color),\n },\n });\n\n return new Primitive({\n geometryInstances: instance,\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n });\n};\nexport default TileBoundingRegion;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * A tile bounding volume specified as a sphere.\n * @alias TileBoundingSphere\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.\n * @param {Number} [radius=0.0] The radius of the bounding sphere.\n *\n * @private\n */\nfunction TileBoundingSphere(center, radius) {\n if (radius === 0) {\n radius = CesiumMath.EPSILON7;\n }\n this._boundingSphere = new BoundingSphere(center, radius);\n}\n\nObject.defineProperties(TileBoundingSphere.prototype, {\n /**\n * The center of the bounding sphere\n *\n * @memberof TileBoundingSphere.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n center: {\n get: function () {\n return this._boundingSphere.center;\n },\n },\n\n /**\n * The radius of the bounding sphere\n *\n * @memberof TileBoundingSphere.prototype\n *\n * @type {Number}\n * @readonly\n */\n radius: {\n get: function () {\n return this._boundingSphere.radius;\n },\n },\n\n /**\n * The underlying bounding volume\n *\n * @memberof TileBoundingSphere.prototype\n *\n * @type {Object}\n * @readonly\n */\n boundingVolume: {\n get: function () {\n return this._boundingSphere;\n },\n },\n /**\n * The underlying bounding sphere\n *\n * @memberof TileBoundingSphere.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n */\n boundingSphere: {\n get: function () {\n return this._boundingSphere;\n },\n },\n});\n\n/**\n * Computes the distance between this bounding sphere and the camera attached to frameState.\n *\n * @param {FrameState} frameState The frameState to which the camera is attached.\n * @returns {Number} The distance between the camera and the bounding sphere in meters. Returns 0 if the camera is inside the bounding volume.\n *\n */\nTileBoundingSphere.prototype.distanceToCamera = function (frameState) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"frameState\", frameState);\n //>>includeEnd('debug');\n var boundingSphere = this._boundingSphere;\n return Math.max(\n 0.0,\n Cartesian3.distance(boundingSphere.center, frameState.camera.positionWC) -\n boundingSphere.radius\n );\n};\n\n/**\n * Determines which side of a plane this sphere is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n * intersects the plane.\n */\nTileBoundingSphere.prototype.intersectPlane = function (plane) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"plane\", plane);\n //>>includeEnd('debug');\n return BoundingSphere.intersectPlane(this._boundingSphere, plane);\n};\n\n/**\n * Update the bounding sphere after the tile is transformed.\n *\n * @param {Cartesian3} center The center of the bounding sphere.\n * @param {Number} radius The radius of the bounding sphere.\n */\nTileBoundingSphere.prototype.update = function (center, radius) {\n Cartesian3.clone(center, this._boundingSphere.center);\n this._boundingSphere.radius = radius;\n};\n\n/**\n * Creates a debug primitive that shows the outline of the sphere.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileBoundingSphere.prototype.createDebugVolume = function (color) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"color\", color);\n //>>includeEnd('debug');\n var geometry = new SphereOutlineGeometry({\n radius: this.radius,\n });\n var modelMatrix = Matrix4.fromTranslation(\n this.center,\n new Matrix4.clone(Matrix4.IDENTITY)\n );\n var instance = new GeometryInstance({\n geometry: geometry,\n id: \"outline\",\n modelMatrix: modelMatrix,\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(color),\n },\n });\n\n return new Primitive({\n geometryInstances: instance,\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n });\n};\nexport default TileBoundingSphere;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\nvar scratchU = new Cartesian3();\nvar scratchV = new Cartesian3();\nvar scratchW = new Cartesian3();\nvar scratchCartesian = new Cartesian3();\n\nfunction computeMissingVector(a, b, result) {\n result = Cartesian3.cross(a, b, result);\n var magnitude = Cartesian3.magnitude(result);\n return Cartesian3.multiplyByScalar(\n result,\n CesiumMath.EPSILON7 / magnitude,\n result\n );\n}\n\nfunction findOrthogonalVector(a, result) {\n var temp = Cartesian3.normalize(a, scratchCartesian);\n var b = Cartesian3.equalsEpsilon(temp, Cartesian3.UNIT_X, CesiumMath.EPSILON6)\n ? Cartesian3.UNIT_Y\n : Cartesian3.UNIT_X;\n return computeMissingVector(a, b, result);\n}\n\nfunction checkHalfAxes(halfAxes) {\n var u = Matrix3.getColumn(halfAxes, 0, scratchU);\n var v = Matrix3.getColumn(halfAxes, 1, scratchV);\n var w = Matrix3.getColumn(halfAxes, 2, scratchW);\n\n var uZero = Cartesian3.equals(u, Cartesian3.ZERO);\n var vZero = Cartesian3.equals(v, Cartesian3.ZERO);\n var wZero = Cartesian3.equals(w, Cartesian3.ZERO);\n\n if (!uZero && !vZero && !wZero) {\n return halfAxes;\n }\n if (uZero && vZero && wZero) {\n halfAxes[0] = CesiumMath.EPSILON7;\n halfAxes[4] = CesiumMath.EPSILON7;\n halfAxes[8] = CesiumMath.EPSILON7;\n return halfAxes;\n }\n if (uZero && !vZero && !wZero) {\n u = computeMissingVector(v, w, u);\n } else if (!uZero && vZero && !wZero) {\n v = computeMissingVector(u, w, v);\n } else if (!uZero && !vZero && wZero) {\n w = computeMissingVector(v, u, w);\n } else if (!uZero) {\n v = findOrthogonalVector(u, v);\n w = computeMissingVector(v, u, w);\n } else if (!vZero) {\n u = findOrthogonalVector(v, u);\n w = computeMissingVector(v, u, w);\n } else if (!wZero) {\n u = findOrthogonalVector(w, u);\n v = computeMissingVector(w, u, v);\n }\n\n Matrix3.setColumn(halfAxes, 0, u, halfAxes);\n Matrix3.setColumn(halfAxes, 1, v, halfAxes);\n Matrix3.setColumn(halfAxes, 2, w, halfAxes);\n\n return halfAxes;\n}\n\n/**\n * A tile bounding volume specified as an oriented bounding box.\n * @alias TileOrientedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\n * Equivalently, the transformation matrix, to rotate and scale a 2x2x2\n * cube centered at the origin.\n *\n * @private\n */\nfunction TileOrientedBoundingBox(center, halfAxes) {\n halfAxes = checkHalfAxes(halfAxes);\n this._orientedBoundingBox = new OrientedBoundingBox(center, halfAxes);\n this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n this._orientedBoundingBox\n );\n}\n\nObject.defineProperties(TileOrientedBoundingBox.prototype, {\n /**\n * The underlying bounding volume.\n *\n * @memberof TileOrientedBoundingBox.prototype\n *\n * @type {Object}\n * @readonly\n */\n boundingVolume: {\n get: function () {\n return this._orientedBoundingBox;\n },\n },\n /**\n * The underlying bounding sphere.\n *\n * @memberof TileOrientedBoundingBox.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n */\n boundingSphere: {\n get: function () {\n return this._boundingSphere;\n },\n },\n});\n\n/**\n * Computes the distance between this bounding box and the camera attached to frameState.\n *\n * @param {FrameState} frameState The frameState to which the camera is attached.\n * @returns {Number} The distance between the camera and the bounding box in meters. Returns 0 if the camera is inside the bounding volume.\n */\nTileOrientedBoundingBox.prototype.distanceToCamera = function (frameState) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"frameState\", frameState);\n //>>includeEnd('debug');\n return Math.sqrt(\n this._orientedBoundingBox.distanceSquaredTo(frameState.camera.positionWC)\n );\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\n * intersects the plane.\n */\nTileOrientedBoundingBox.prototype.intersectPlane = function (plane) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"plane\", plane);\n //>>includeEnd('debug');\n return this._orientedBoundingBox.intersectPlane(plane);\n};\n\n/**\n * Update the bounding box after the tile is transformed.\n *\n * @param {Cartesian3} center The center of the box.\n * @param {Matrix3} halfAxes The three orthogonal half-axes of the bounding box.\n * Equivalently, the transformation matrix, to rotate and scale a 2x2x2\n * cube centered at the origin.\n */\nTileOrientedBoundingBox.prototype.update = function (center, halfAxes) {\n Cartesian3.clone(center, this._orientedBoundingBox.center);\n halfAxes = checkHalfAxes(halfAxes);\n Matrix3.clone(halfAxes, this._orientedBoundingBox.halfAxes);\n BoundingSphere.fromOrientedBoundingBox(\n this._orientedBoundingBox,\n this._boundingSphere\n );\n};\n\n/**\n * Creates a debug primitive that shows the outline of the box.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileOrientedBoundingBox.prototype.createDebugVolume = function (color) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"color\", color);\n //>>includeEnd('debug');\n\n var geometry = new BoxOutlineGeometry({\n // Make a 2x2x2 cube\n minimum: new Cartesian3(-1.0, -1.0, -1.0),\n maximum: new Cartesian3(1.0, 1.0, 1.0),\n });\n var modelMatrix = Matrix4.fromRotationTranslation(\n this.boundingVolume.halfAxes,\n this.boundingVolume.center\n );\n var instance = new GeometryInstance({\n geometry: geometry,\n id: \"outline\",\n modelMatrix: modelMatrix,\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(color),\n },\n });\n\n return new Primitive({\n geometryInstances: instance,\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n });\n};\nexport default TileOrientedBoundingBox;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestScheduler from \"../Core/RequestScheduler.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Cesium3DTileContentFactory from \"./Cesium3DTileContentFactory.js\";\nimport Cesium3DTileContentState from \"./Cesium3DTileContentState.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Empty3DTileContent from \"./Empty3DTileContent.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileBoundingSphere from \"./TileBoundingSphere.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\n\n/**\n * A tile in a {@link Cesium3DTileset}. When a tile is first created, its content is not loaded;\n * the content is loaded on-demand when needed based on the view.\n * <p>\n * Do not construct this directly, instead access tiles through {@link Cesium3DTileset#tileVisible}.\n * </p>\n *\n * @alias Cesium3DTile\n * @constructor\n */\nfunction Cesium3DTile(tileset, baseResource, header, parent) {\n this._tileset = tileset;\n this._header = header;\n var contentHeader = header.content;\n\n /**\n * The local transform of this tile.\n * @type {Matrix4}\n */\n this.transform = defined(header.transform)\n ? Matrix4.unpack(header.transform)\n : Matrix4.clone(Matrix4.IDENTITY);\n\n var parentTransform = defined(parent)\n ? parent.computedTransform\n : tileset.modelMatrix;\n var computedTransform = Matrix4.multiply(\n parentTransform,\n this.transform,\n new Matrix4()\n );\n\n var parentInitialTransform = defined(parent)\n ? parent._initialTransform\n : Matrix4.IDENTITY;\n this._initialTransform = Matrix4.multiply(\n parentInitialTransform,\n this.transform,\n new Matrix4()\n );\n\n /**\n * The final computed transform of this tile.\n * @type {Matrix4}\n * @readonly\n */\n this.computedTransform = computedTransform;\n\n this._boundingVolume = this.createBoundingVolume(\n header.boundingVolume,\n computedTransform\n );\n this._boundingVolume2D = undefined;\n\n var contentBoundingVolume;\n\n if (defined(contentHeader) && defined(contentHeader.boundingVolume)) {\n // Non-leaf tiles may have a content bounding-volume, which is a tight-fit bounding volume\n // around only the features in the tile. This box is useful for culling for rendering,\n // but not for culling for traversing the tree since it does not guarantee spatial coherence, i.e.,\n // since it only bounds features in the tile, not the entire tile, children may be\n // outside of this box.\n contentBoundingVolume = this.createBoundingVolume(\n contentHeader.boundingVolume,\n computedTransform\n );\n }\n this._contentBoundingVolume = contentBoundingVolume;\n this._contentBoundingVolume2D = undefined;\n\n var viewerRequestVolume;\n if (defined(header.viewerRequestVolume)) {\n viewerRequestVolume = this.createBoundingVolume(\n header.viewerRequestVolume,\n computedTransform\n );\n }\n this._viewerRequestVolume = viewerRequestVolume;\n\n /**\n * The error, in meters, introduced if this tile is rendered and its children are not.\n * This is used to compute screen space error, i.e., the error measured in pixels.\n *\n * @type {Number}\n * @readonly\n */\n this.geometricError = header.geometricError;\n this._geometricError = header.geometricError;\n\n if (!defined(this._geometricError)) {\n this._geometricError = defined(parent)\n ? parent.geometricError\n : tileset._geometricError;\n Cesium3DTile._deprecationWarning(\n \"geometricErrorUndefined\",\n \"Required property geometricError is undefined for this tile. Using parent's geometric error instead.\"\n );\n }\n\n this.updateGeometricErrorScale();\n\n var refine;\n if (defined(header.refine)) {\n if (header.refine === \"replace\" || header.refine === \"add\") {\n Cesium3DTile._deprecationWarning(\n \"lowercase-refine\",\n 'This tile uses a lowercase refine \"' +\n header.refine +\n '\". Instead use \"' +\n header.refine.toUpperCase() +\n '\".'\n );\n }\n refine =\n header.refine.toUpperCase() === \"REPLACE\"\n ? Cesium3DTileRefine.REPLACE\n : Cesium3DTileRefine.ADD;\n } else if (defined(parent)) {\n // Inherit from parent tile if omitted.\n refine = parent.refine;\n } else {\n refine = Cesium3DTileRefine.REPLACE;\n }\n\n /**\n * Specifies the type of refinement that is used when traversing this tile for rendering.\n *\n * @type {Cesium3DTileRefine}\n * @readonly\n * @private\n */\n this.refine = refine;\n\n /**\n * Gets the tile's children.\n *\n * @type {Cesium3DTile[]}\n * @readonly\n */\n this.children = [];\n\n /**\n * This tile's parent or <code>undefined</code> if this tile is the root.\n * <p>\n * When a tile's content points to an external tileset JSON file, the external tileset's\n * root tile's parent is not <code>undefined</code>; instead, the parent references\n * the tile (with its content pointing to an external tileset JSON file) as if the two tilesets were merged.\n * </p>\n *\n * @type {Cesium3DTile}\n * @readonly\n */\n this.parent = parent;\n\n var content;\n var hasEmptyContent;\n var contentState;\n var contentResource;\n var serverKey;\n\n baseResource = Resource.createIfNeeded(baseResource);\n\n if (defined(contentHeader)) {\n var contentHeaderUri = contentHeader.uri;\n if (defined(contentHeader.url)) {\n Cesium3DTile._deprecationWarning(\n \"contentUrl\",\n 'This tileset JSON uses the \"content.url\" property which has been deprecated. Use \"content.uri\" instead.'\n );\n contentHeaderUri = contentHeader.url;\n }\n hasEmptyContent = false;\n contentState = Cesium3DTileContentState.UNLOADED;\n contentResource = baseResource.getDerivedResource({\n url: contentHeaderUri,\n });\n serverKey = RequestScheduler.getServerKey(\n contentResource.getUrlComponent()\n );\n } else {\n content = new Empty3DTileContent(tileset, this);\n hasEmptyContent = true;\n contentState = Cesium3DTileContentState.READY;\n }\n\n this._content = content;\n this._contentResource = contentResource;\n this._contentState = contentState;\n this._contentReadyToProcessPromise = undefined;\n this._contentReadyPromise = undefined;\n this._expiredContent = undefined;\n\n this._serverKey = serverKey;\n\n /**\n * When <code>true</code>, the tile has no content.\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n this.hasEmptyContent = hasEmptyContent;\n\n /**\n * When <code>true</code>, the tile's content points to an external tileset.\n * <p>\n * This is <code>false</code> until the tile's content is loaded.\n * </p>\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n this.hasTilesetContent = false;\n\n /**\n * The node in the tileset's LRU cache, used to determine when to unload a tile's content.\n *\n * See {@link Cesium3DTilesetCache}\n *\n * @type {DoublyLinkedListNode}\n * @readonly\n *\n * @private\n */\n this.cacheNode = undefined;\n\n var expire = header.expire;\n var expireDuration;\n var expireDate;\n if (defined(expire)) {\n expireDuration = expire.duration;\n if (defined(expire.date)) {\n expireDate = JulianDate.fromIso8601(expire.date);\n }\n }\n\n /**\n * The time in seconds after the tile's content is ready when the content expires and new content is requested.\n *\n * @type {Number}\n */\n this.expireDuration = expireDuration;\n\n /**\n * The date when the content expires and new content is requested.\n *\n * @type {JulianDate}\n */\n this.expireDate = expireDate;\n\n /**\n * The time when a style was last applied to this tile.\n *\n * @type {Number}\n *\n * @private\n */\n this.lastStyleTime = 0.0;\n\n /**\n * Marks whether the tile's children bounds are fully contained within the tile's bounds\n *\n * @type {Cesium3DTileOptimizationHint}\n *\n * @private\n */\n this._optimChildrenWithinParent = Cesium3DTileOptimizationHint.NOT_COMPUTED;\n\n /**\n * Tracks if the tile's relationship with a ClippingPlaneCollection has changed with regards\n * to the ClippingPlaneCollection's state.\n *\n * @type {Boolean}\n *\n * @private\n */\n this.clippingPlanesDirty = false;\n\n /**\n * Tracks if the tile's request should be deferred until all non-deferred\n * tiles load.\n *\n * @type {Boolean}\n *\n * @private\n */\n this.priorityDeferred = false;\n\n // Members that are updated every frame for tree traversal and rendering optimizations:\n this._distanceToCamera = 0.0;\n this._centerZDepth = 0.0;\n this._screenSpaceError = 0.0;\n this._screenSpaceErrorProgressiveResolution = 0.0; // The screen space error at a given screen height of tileset.progressiveResolutionHeightFraction * screenHeight\n this._visibilityPlaneMask = 0;\n this._visible = false;\n this._inRequestVolume = false;\n\n this._finalResolution = true;\n this._depth = 0;\n this._stackLength = 0;\n this._selectionDepth = 0;\n\n this._updatedVisibilityFrame = 0;\n this._touchedFrame = 0;\n this._visitedFrame = 0;\n this._selectedFrame = 0;\n this._requestedFrame = 0;\n this._ancestorWithContent = undefined;\n this._ancestorWithContentAvailable = undefined;\n this._refines = false;\n this._shouldSelect = false;\n this._isClipped = true;\n this._clippingPlanesState = 0; // encapsulates (_isClipped, clippingPlanes.enabled) and number/function\n this._debugBoundingVolume = undefined;\n this._debugContentBoundingVolume = undefined;\n this._debugViewerRequestVolume = undefined;\n this._debugColor = Color.fromRandom({ alpha: 1.0 });\n this._debugColorizeTiles = false;\n\n this._priority = 0.0; // The priority used for request sorting\n this._priorityHolder = this; // Reference to the ancestor up the tree that holds the _foveatedFactor and _distanceToCamera for all tiles in the refinement chain.\n this._priorityProgressiveResolution = false;\n this._priorityProgressiveResolutionScreenSpaceErrorLeaf = false;\n this._priorityReverseScreenSpaceError = 0.0;\n this._foveatedFactor = 0.0;\n this._wasMinPriorityChild = false; // Needed for knowing when to continue a refinement chain. Gets reset in updateTile in traversal and gets set in updateAndPushChildren in traversal.\n\n this._loadTimestamp = new JulianDate();\n\n this._commandsLength = 0;\n\n this._color = undefined;\n this._colorDirty = false;\n\n this._request = undefined;\n}\n\n// This can be overridden for testing purposes\nCesium3DTile._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Cesium3DTile.prototype, {\n /**\n * The tileset containing this tile.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Cesium3DTileset}\n * @readonly\n */\n tileset: {\n get: function () {\n return this._tileset;\n },\n },\n\n /**\n * The tile's content. This represents the actual tile's payload,\n * not the content's metadata in the tileset JSON file.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Cesium3DTileContent}\n * @readonly\n */\n content: {\n get: function () {\n return this._content;\n },\n },\n\n /**\n * Get the tile's bounding volume.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {TileBoundingVolume}\n * @readonly\n * @private\n */\n boundingVolume: {\n get: function () {\n return this._boundingVolume;\n },\n },\n\n /**\n * Get the bounding volume of the tile's contents. This defaults to the\n * tile's bounding volume when the content's bounding volume is\n * <code>undefined</code>.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {TileBoundingVolume}\n * @readonly\n * @private\n */\n contentBoundingVolume: {\n get: function () {\n return defaultValue(this._contentBoundingVolume, this._boundingVolume);\n },\n },\n\n /**\n * Get the bounding sphere derived from the tile's bounding volume.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n */\n boundingSphere: {\n get: function () {\n return this._boundingVolume.boundingSphere;\n },\n },\n\n /**\n * Returns the <code>extras</code> property in the tileset JSON for this tile, which contains application specific metadata.\n * Returns <code>undefined</code> if <code>extras</code> does not exist.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {*}\n * @readonly\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#specifying-extensions-and-application-specific-extras|Extras in the 3D Tiles specification.}\n */\n extras: {\n get: function () {\n return this._header.extras;\n },\n },\n\n /**\n * Gets or sets the tile's highlight color.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Color}\n *\n * @default {@link Color.WHITE}\n *\n * @private\n */\n color: {\n get: function () {\n if (!defined(this._color)) {\n this._color = new Color();\n }\n return Color.clone(this._color);\n },\n set: function (value) {\n this._color = Color.clone(value, this._color);\n this._colorDirty = true;\n },\n },\n\n /**\n * Determines if the tile has available content to render. <code>true</code> if the tile's\n * content is ready or if it has expired content that renders while new content loads; otherwise,\n * <code>false</code>.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n contentAvailable: {\n get: function () {\n return (\n (this.contentReady &&\n !this.hasEmptyContent &&\n !this.hasTilesetContent) ||\n (defined(this._expiredContent) && !this.contentFailed)\n );\n },\n },\n\n /**\n * Determines if the tile's content is ready. This is automatically <code>true</code> for\n * tile's with empty content.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n contentReady: {\n get: function () {\n return this._contentState === Cesium3DTileContentState.READY;\n },\n },\n\n /**\n * Determines if the tile's content has not be requested. <code>true</code> if tile's\n * content has not be requested; otherwise, <code>false</code>.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n contentUnloaded: {\n get: function () {\n return this._contentState === Cesium3DTileContentState.UNLOADED;\n },\n },\n\n /**\n * Determines if the tile's content is expired. <code>true</code> if tile's\n * content is expired; otherwise, <code>false</code>.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n contentExpired: {\n get: function () {\n return this._contentState === Cesium3DTileContentState.EXPIRED;\n },\n },\n\n /**\n * Determines if the tile's content failed to load. <code>true</code> if the tile's\n * content failed to load; otherwise, <code>false</code>.\n *\n * @memberof Cesium3DTile.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @private\n */\n contentFailed: {\n get: function () {\n return this._contentState === Cesium3DTileContentState.FAILED;\n },\n },\n\n /**\n * Gets the promise that will be resolved when the tile's content is ready to process.\n * This happens after the content is downloaded but before the content is ready\n * to render.\n * <p>\n * The promise remains <code>undefined</code> until the tile's content is requested.\n * </p>\n *\n * @type {Promise.<Cesium3DTileContent>}\n * @readonly\n *\n * @private\n */\n contentReadyToProcessPromise: {\n get: function () {\n if (defined(this._contentReadyToProcessPromise)) {\n return this._contentReadyToProcessPromise.promise;\n }\n return undefined;\n },\n },\n\n /**\n * Gets the promise that will be resolved when the tile's content is ready to render.\n * <p>\n * The promise remains <code>undefined</code> until the tile's content is requested.\n * </p>\n *\n * @type {Promise.<Cesium3DTileContent>}\n * @readonly\n *\n * @private\n */\n contentReadyPromise: {\n get: function () {\n if (defined(this._contentReadyPromise)) {\n return this._contentReadyPromise.promise;\n }\n return undefined;\n },\n },\n\n /**\n * Returns the number of draw commands used by this tile.\n *\n * @readonly\n *\n * @private\n */\n commandsLength: {\n get: function () {\n return this._commandsLength;\n },\n },\n});\n\nvar scratchCartesian = new Cartesian3();\nfunction isPriorityDeferred(tile, frameState) {\n var tileset = tile._tileset;\n\n // If closest point on line is inside the sphere then set foveatedFactor to 0. Otherwise, the dot product is with the line from camera to the point on the sphere that is closest to the line.\n var camera = frameState.camera;\n var boundingSphere = tile.boundingSphere;\n var radius = boundingSphere.radius;\n var scaledCameraDirection = Cartesian3.multiplyByScalar(\n camera.directionWC,\n tile._centerZDepth,\n scratchCartesian\n );\n var closestPointOnLine = Cartesian3.add(\n camera.positionWC,\n scaledCameraDirection,\n scratchCartesian\n );\n // The distance from the camera's view direction to the tile.\n var toLine = Cartesian3.subtract(\n closestPointOnLine,\n boundingSphere.center,\n scratchCartesian\n );\n var distanceToCenterLine = Cartesian3.magnitude(toLine);\n var notTouchingSphere = distanceToCenterLine > radius;\n\n // If camera's direction vector is inside the bounding sphere then consider\n // this tile right along the line of sight and set _foveatedFactor to 0.\n // Otherwise,_foveatedFactor is one minus the dot product of the camera's direction\n // and the vector between the camera and the point on the bounding sphere closest to the view line.\n if (notTouchingSphere) {\n var toLineNormalized = Cartesian3.normalize(toLine, scratchCartesian);\n var scaledToLine = Cartesian3.multiplyByScalar(\n toLineNormalized,\n radius,\n scratchCartesian\n );\n var closestOnSphere = Cartesian3.add(\n boundingSphere.center,\n scaledToLine,\n scratchCartesian\n );\n var toClosestOnSphere = Cartesian3.subtract(\n closestOnSphere,\n camera.positionWC,\n scratchCartesian\n );\n var toClosestOnSphereNormalize = Cartesian3.normalize(\n toClosestOnSphere,\n scratchCartesian\n );\n tile._foveatedFactor =\n 1.0 -\n Math.abs(Cartesian3.dot(camera.directionWC, toClosestOnSphereNormalize));\n } else {\n tile._foveatedFactor = 0.0;\n }\n\n // Skip this feature if: non-skipLevelOfDetail and replace refine, if the foveated settings are turned off, if tile is progressive resolution and replace refine and skipLevelOfDetail (will help get rid of ancestor artifacts faster)\n // Or if the tile is a preload of any kind\n var replace = tile.refine === Cesium3DTileRefine.REPLACE;\n var skipLevelOfDetail = tileset._skipLevelOfDetail;\n if (\n (replace && !skipLevelOfDetail) ||\n !tileset.foveatedScreenSpaceError ||\n tileset.foveatedConeSize === 1.0 ||\n (tile._priorityProgressiveResolution && replace && skipLevelOfDetail) ||\n tileset._pass === Cesium3DTilePass.PRELOAD_FLIGHT ||\n tileset._pass === Cesium3DTilePass.PRELOAD\n ) {\n return false;\n }\n\n var maximumFovatedFactor = 1.0 - Math.cos(camera.frustum.fov * 0.5); // 0.14 for fov = 60. NOTE very hard to defer vertically foveated tiles since max is based on fovy (which is fov). Lowering the 0.5 to a smaller fraction of the screen height will start to defer vertically foveated tiles.\n var foveatedConeFactor = tileset.foveatedConeSize * maximumFovatedFactor;\n\n // If it's inside the user-defined view cone, then it should not be deferred.\n if (tile._foveatedFactor <= foveatedConeFactor) {\n return false;\n }\n\n // Relax SSE based on how big the angle is between the tile and the edge of the foveated cone.\n var range = maximumFovatedFactor - foveatedConeFactor;\n var normalizedFoveatedFactor = CesiumMath.clamp(\n (tile._foveatedFactor - foveatedConeFactor) / range,\n 0.0,\n 1.0\n );\n var sseRelaxation = tileset.foveatedInterpolationCallback(\n tileset.foveatedMinimumScreenSpaceErrorRelaxation,\n tileset.maximumScreenSpaceError,\n normalizedFoveatedFactor\n );\n var sse =\n tile._screenSpaceError === 0.0 && defined(tile.parent)\n ? tile.parent._screenSpaceError * 0.5\n : tile._screenSpaceError;\n\n return tileset.maximumScreenSpaceError - sseRelaxation <= sse;\n}\n\nvar scratchJulianDate = new JulianDate();\n\n/**\n * Get the tile's screen space error.\n *\n * @private\n */\nCesium3DTile.prototype.getScreenSpaceError = function (\n frameState,\n useParentGeometricError,\n progressiveResolutionHeightFraction\n) {\n var tileset = this._tileset;\n var heightFraction = defaultValue(progressiveResolutionHeightFraction, 1.0);\n var parentGeometricError = defined(this.parent)\n ? this.parent.geometricError\n : tileset._geometricError;\n var geometricError = useParentGeometricError\n ? parentGeometricError\n : this.geometricError;\n if (geometricError === 0.0) {\n // Leaf tiles do not have any error so save the computation\n return 0.0;\n }\n var camera = frameState.camera;\n var frustum = camera.frustum;\n var context = frameState.context;\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight * heightFraction;\n var error;\n if (\n frameState.mode === SceneMode.SCENE2D ||\n frustum instanceof OrthographicFrustum\n ) {\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n var pixelSize =\n Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) /\n Math.max(width, height);\n error = geometricError / pixelSize;\n } else {\n // Avoid divide by zero when viewer is inside the tile\n var distance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);\n var sseDenominator = camera.frustum.sseDenominator;\n error = (geometricError * height) / (distance * sseDenominator);\n if (tileset.dynamicScreenSpaceError) {\n var density = tileset._dynamicScreenSpaceErrorComputedDensity;\n var factor = tileset.dynamicScreenSpaceErrorFactor;\n var dynamicError = CesiumMath.fog(distance, density) * factor;\n error -= dynamicError;\n }\n }\n\n error /= frameState.pixelRatio;\n\n return error;\n};\n\nfunction isPriorityProgressiveResolution(tileset, tile) {\n if (\n tileset.progressiveResolutionHeightFraction <= 0.0 ||\n tileset.progressiveResolutionHeightFraction > 0.5\n ) {\n return false;\n }\n\n var isProgressiveResolutionTile =\n tile._screenSpaceErrorProgressiveResolution >\n tileset._maximumScreenSpaceError; // Mark non-SSE leaves\n tile._priorityProgressiveResolutionScreenSpaceErrorLeaf = false; // Needed for skipLOD\n var parent = tile.parent;\n var maximumScreenSpaceError = tileset._maximumScreenSpaceError;\n var tilePasses =\n tile._screenSpaceErrorProgressiveResolution <= maximumScreenSpaceError;\n var parentFails =\n defined(parent) &&\n parent._screenSpaceErrorProgressiveResolution > maximumScreenSpaceError;\n if (tilePasses && parentFails) {\n // A progressive resolution SSE leaf, promote its priority as well\n tile._priorityProgressiveResolutionScreenSpaceErrorLeaf = true;\n isProgressiveResolutionTile = true;\n }\n return isProgressiveResolutionTile;\n}\n\nfunction getPriorityReverseScreenSpaceError(tileset, tile) {\n var parent = tile.parent;\n var useParentScreenSpaceError =\n defined(parent) &&\n (!tileset._skipLevelOfDetail ||\n tile._screenSpaceError === 0.0 ||\n parent.hasTilesetContent);\n var screenSpaceError = useParentScreenSpaceError\n ? parent._screenSpaceError\n : tile._screenSpaceError;\n return tileset.root._screenSpaceError - screenSpaceError;\n}\n\n/**\n * Update the tile's visibility.\n *\n * @private\n */\nCesium3DTile.prototype.updateVisibility = function (frameState) {\n var parent = this.parent;\n var tileset = this._tileset;\n var parentTransform = defined(parent)\n ? parent.computedTransform\n : tileset.modelMatrix;\n var parentVisibilityPlaneMask = defined(parent)\n ? parent._visibilityPlaneMask\n : CullingVolume.MASK_INDETERMINATE;\n this.updateTransform(parentTransform);\n this._distanceToCamera = this.distanceToTile(frameState);\n this._centerZDepth = this.distanceToTileCenter(frameState);\n this._screenSpaceError = this.getScreenSpaceError(frameState, false);\n this._screenSpaceErrorProgressiveResolution = this.getScreenSpaceError(\n frameState,\n false,\n tileset.progressiveResolutionHeightFraction\n );\n this._visibilityPlaneMask = this.visibility(\n frameState,\n parentVisibilityPlaneMask\n ); // Use parent's plane mask to speed up visibility test\n this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;\n this._inRequestVolume = this.insideViewerRequestVolume(frameState);\n this._priorityReverseScreenSpaceError = getPriorityReverseScreenSpaceError(\n tileset,\n this\n );\n this._priorityProgressiveResolution = isPriorityProgressiveResolution(\n tileset,\n this\n );\n this.priorityDeferred = isPriorityDeferred(this, frameState);\n};\n\n/**\n * Update whether the tile has expired.\n *\n * @private\n */\nCesium3DTile.prototype.updateExpiration = function () {\n if (defined(this.expireDate) && this.contentReady && !this.hasEmptyContent) {\n var now = JulianDate.now(scratchJulianDate);\n if (JulianDate.lessThan(this.expireDate, now)) {\n this._contentState = Cesium3DTileContentState.EXPIRED;\n this._expiredContent = this._content;\n }\n }\n};\n\nfunction updateExpireDate(tile) {\n if (defined(tile.expireDuration)) {\n var expireDurationDate = JulianDate.now(scratchJulianDate);\n JulianDate.addSeconds(\n expireDurationDate,\n tile.expireDuration,\n expireDurationDate\n );\n\n if (defined(tile.expireDate)) {\n if (JulianDate.lessThan(tile.expireDate, expireDurationDate)) {\n JulianDate.clone(expireDurationDate, tile.expireDate);\n }\n } else {\n tile.expireDate = JulianDate.clone(expireDurationDate);\n }\n }\n}\n\nfunction getContentFailedFunction(tile, tileset) {\n return function (error) {\n if (tile._contentState === Cesium3DTileContentState.PROCESSING) {\n --tileset.statistics.numberOfTilesProcessing;\n } else {\n --tileset.statistics.numberOfPendingRequests;\n }\n tile._contentState = Cesium3DTileContentState.FAILED;\n tile._contentReadyPromise.reject(error);\n tile._contentReadyToProcessPromise.reject(error);\n };\n}\n\nfunction createPriorityFunction(tile) {\n return function () {\n return tile._priority;\n };\n}\n\n/**\n * Requests the tile's content.\n * <p>\n * The request may not be made if the Cesium Request Scheduler can't prioritize it.\n * </p>\n *\n * @private\n */\nCesium3DTile.prototype.requestContent = function () {\n var that = this;\n var tileset = this._tileset;\n\n if (this.hasEmptyContent) {\n return false;\n }\n\n var resource = this._contentResource.clone();\n var expired = this.contentExpired;\n if (expired) {\n // Append a query parameter of the tile expiration date to prevent caching\n resource.setQueryParameters({\n expired: this.expireDate.toString(),\n });\n }\n\n var request = new Request({\n throttle: true,\n throttleByServer: true,\n type: RequestType.TILES3D,\n priorityFunction: createPriorityFunction(this),\n serverKey: this._serverKey,\n });\n\n this._request = request;\n resource.request = request;\n\n var promise = resource.fetchArrayBuffer();\n\n if (!defined(promise)) {\n return false;\n }\n\n var contentState = this._contentState;\n this._contentState = Cesium3DTileContentState.LOADING;\n this._contentReadyToProcessPromise = when.defer();\n this._contentReadyPromise = when.defer();\n\n var contentFailedFunction = getContentFailedFunction(this, tileset);\n promise\n .then(function (arrayBuffer) {\n if (that.isDestroyed()) {\n // Tile is unloaded before the content finishes loading\n contentFailedFunction();\n return;\n }\n var uint8Array = new Uint8Array(arrayBuffer);\n var magic = getMagic(uint8Array);\n var contentFactory = Cesium3DTileContentFactory[magic];\n var content;\n\n // Vector and Geometry tile rendering do not support the skip LOD optimization.\n tileset._disableSkipLevelOfDetail =\n tileset._disableSkipLevelOfDetail ||\n magic === \"vctr\" ||\n magic === \"geom\";\n\n if (defined(contentFactory)) {\n content = contentFactory(\n tileset,\n that,\n that._contentResource,\n arrayBuffer,\n 0\n );\n } else {\n // The content may be json instead\n content = Cesium3DTileContentFactory.json(\n tileset,\n that,\n that._contentResource,\n arrayBuffer,\n 0\n );\n that.hasTilesetContent = true;\n }\n\n if (expired) {\n that.expireDate = undefined;\n }\n\n that._content = content;\n that._contentState = Cesium3DTileContentState.PROCESSING;\n that._contentReadyToProcessPromise.resolve(content);\n\n return content.readyPromise.then(function (content) {\n if (that.isDestroyed()) {\n // Tile is unloaded before the content finishes processing\n contentFailedFunction();\n return;\n }\n updateExpireDate(that);\n\n // Refresh style for expired content\n that._selectedFrame = 0;\n that.lastStyleTime = 0.0;\n\n JulianDate.now(that._loadTimestamp);\n that._contentState = Cesium3DTileContentState.READY;\n that._contentReadyPromise.resolve(content);\n });\n })\n .otherwise(function (error) {\n if (request.state === RequestState.CANCELLED) {\n // Cancelled due to low priority - try again later.\n that._contentState = contentState;\n --tileset.statistics.numberOfPendingRequests;\n ++tileset.statistics.numberOfAttemptedRequests;\n return;\n }\n contentFailedFunction(error);\n });\n\n return true;\n};\n\n/**\n * Unloads the tile's content.\n *\n * @private\n */\nCesium3DTile.prototype.unloadContent = function () {\n if (this.hasEmptyContent || this.hasTilesetContent) {\n return;\n }\n\n this._content = this._content && this._content.destroy();\n this._contentState = Cesium3DTileContentState.UNLOADED;\n this._contentReadyToProcessPromise = undefined;\n this._contentReadyPromise = undefined;\n\n this.lastStyleTime = 0.0;\n this.clippingPlanesDirty = this._clippingPlanesState === 0;\n this._clippingPlanesState = 0;\n\n this._debugColorizeTiles = false;\n\n this._debugBoundingVolume =\n this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n this._debugContentBoundingVolume =\n this._debugContentBoundingVolume &&\n this._debugContentBoundingVolume.destroy();\n this._debugViewerRequestVolume =\n this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n};\n\nvar scratchProjectedBoundingSphere = new BoundingSphere();\n\nfunction getBoundingVolume(tile, frameState) {\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n !defined(tile._boundingVolume2D)\n ) {\n var boundingSphere = tile._boundingVolume.boundingSphere;\n var sphere = BoundingSphere.projectTo2D(\n boundingSphere,\n frameState.mapProjection,\n scratchProjectedBoundingSphere\n );\n tile._boundingVolume2D = new TileBoundingSphere(\n sphere.center,\n sphere.radius\n );\n }\n\n return frameState.mode !== SceneMode.SCENE3D\n ? tile._boundingVolume2D\n : tile._boundingVolume;\n}\n\nfunction getContentBoundingVolume(tile, frameState) {\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n !defined(tile._contentBoundingVolume2D)\n ) {\n var boundingSphere = tile._contentBoundingVolume.boundingSphere;\n var sphere = BoundingSphere.projectTo2D(\n boundingSphere,\n frameState.mapProjection,\n scratchProjectedBoundingSphere\n );\n tile._contentBoundingVolume2D = new TileBoundingSphere(\n sphere.center,\n sphere.radius\n );\n }\n return frameState.mode !== SceneMode.SCENE3D\n ? tile._contentBoundingVolume2D\n : tile._contentBoundingVolume;\n}\n\n/**\n * Determines whether the tile's bounding volume intersects the culling volume.\n *\n * @param {FrameState} frameState The frame state.\n * @param {Number} parentVisibilityPlaneMask The parent's plane mask to speed up the visibility check.\n * @returns {Number} A plane mask as described above in {@link CullingVolume#computeVisibilityWithPlaneMask}.\n *\n * @private\n */\nCesium3DTile.prototype.visibility = function (\n frameState,\n parentVisibilityPlaneMask\n) {\n var cullingVolume = frameState.cullingVolume;\n var boundingVolume = getBoundingVolume(this, frameState);\n\n var tileset = this._tileset;\n var clippingPlanes = tileset.clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n var intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n boundingVolume,\n tileset.clippingPlanesOriginMatrix\n );\n this._isClipped = intersection !== Intersect.INSIDE;\n if (intersection === Intersect.OUTSIDE) {\n return CullingVolume.MASK_OUTSIDE;\n }\n }\n\n return cullingVolume.computeVisibilityWithPlaneMask(\n boundingVolume,\n parentVisibilityPlaneMask\n );\n};\n\n/**\n * Assuming the tile's bounding volume intersects the culling volume, determines\n * whether the tile's content's bounding volume intersects the culling volume.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {Intersect} The result of the intersection: the tile's content is completely outside, completely inside, or intersecting the culling volume.\n *\n * @private\n */\nCesium3DTile.prototype.contentVisibility = function (frameState) {\n // Assumes the tile's bounding volume intersects the culling volume already, so\n // just return Intersect.INSIDE if there is no content bounding volume.\n if (!defined(this._contentBoundingVolume)) {\n return Intersect.INSIDE;\n }\n\n if (this._visibilityPlaneMask === CullingVolume.MASK_INSIDE) {\n // The tile's bounding volume is completely inside the culling volume so\n // the content bounding volume must also be inside.\n return Intersect.INSIDE;\n }\n\n // PERFORMANCE_IDEA: is it possible to burn less CPU on this test since we know the\n // tile's (not the content's) bounding volume intersects the culling volume?\n var cullingVolume = frameState.cullingVolume;\n var boundingVolume = getContentBoundingVolume(this, frameState);\n\n var tileset = this._tileset;\n var clippingPlanes = tileset.clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n var intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n boundingVolume,\n tileset.clippingPlanesOriginMatrix\n );\n this._isClipped = intersection !== Intersect.INSIDE;\n if (intersection === Intersect.OUTSIDE) {\n return Intersect.OUTSIDE;\n }\n }\n\n return cullingVolume.computeVisibility(boundingVolume);\n};\n\n/**\n * Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {Number} The distance, in meters, or zero if the camera is inside the bounding volume.\n *\n * @private\n */\nCesium3DTile.prototype.distanceToTile = function (frameState) {\n var boundingVolume = getBoundingVolume(this, frameState);\n return boundingVolume.distanceToCamera(frameState);\n};\n\nvar scratchToTileCenter = new Cartesian3();\n\n/**\n * Computes the distance from the center of the tile's bounding volume to the camera's plane defined by its position and view direction.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {Number} The distance, in meters.\n *\n * @private\n */\nCesium3DTile.prototype.distanceToTileCenter = function (frameState) {\n var tileBoundingVolume = getBoundingVolume(this, frameState);\n var boundingVolume = tileBoundingVolume.boundingVolume; // Gets the underlying OrientedBoundingBox or BoundingSphere\n var toCenter = Cartesian3.subtract(\n boundingVolume.center,\n frameState.camera.positionWC,\n scratchToTileCenter\n );\n return Cartesian3.dot(frameState.camera.directionWC, toCenter);\n};\n\n/**\n * Checks if the camera is inside the viewer request volume.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {Boolean} Whether the camera is inside the volume.\n *\n * @private\n */\nCesium3DTile.prototype.insideViewerRequestVolume = function (frameState) {\n var viewerRequestVolume = this._viewerRequestVolume;\n return (\n !defined(viewerRequestVolume) ||\n viewerRequestVolume.distanceToCamera(frameState) === 0.0\n );\n};\n\nvar scratchMatrix = new Matrix3();\nvar scratchScale = new Cartesian3();\nvar scratchHalfAxes = new Matrix3();\nvar scratchCenter = new Cartesian3();\nvar scratchRectangle = new Rectangle();\nvar scratchOrientedBoundingBox = new OrientedBoundingBox();\nvar scratchTransform = new Matrix4();\n\nfunction createBox(box, transform, result) {\n var center = Cartesian3.fromElements(box[0], box[1], box[2], scratchCenter);\n var halfAxes = Matrix3.fromArray(box, 3, scratchHalfAxes);\n\n // Find the transformed center and halfAxes\n center = Matrix4.multiplyByPoint(transform, center, center);\n var rotationScale = Matrix4.getMatrix3(transform, scratchMatrix);\n halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n if (defined(result)) {\n result.update(center, halfAxes);\n return result;\n }\n return new TileOrientedBoundingBox(center, halfAxes);\n}\n\nfunction createBoxFromTransformedRegion(\n region,\n transform,\n initialTransform,\n result\n) {\n var rectangle = Rectangle.unpack(region, 0, scratchRectangle);\n var minimumHeight = region[4];\n var maximumHeight = region[5];\n\n var orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n Ellipsoid.WGS84,\n scratchOrientedBoundingBox\n );\n var center = orientedBoundingBox.center;\n var halfAxes = orientedBoundingBox.halfAxes;\n\n // A region bounding volume is not transformed by the transform in the tileset JSON,\n // but may be transformed by additional transforms applied in Cesium.\n // This is why the transform is calculated as the difference between the initial transform and the current transform.\n transform = Matrix4.multiplyTransformation(\n transform,\n Matrix4.inverseTransformation(initialTransform, scratchTransform),\n scratchTransform\n );\n center = Matrix4.multiplyByPoint(transform, center, center);\n var rotationScale = Matrix4.getMatrix3(transform, scratchMatrix);\n halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n if (defined(result) && result instanceof TileOrientedBoundingBox) {\n result.update(center, halfAxes);\n return result;\n }\n\n return new TileOrientedBoundingBox(center, halfAxes);\n}\n\nfunction createRegion(region, transform, initialTransform, result) {\n if (\n !Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)\n ) {\n return createBoxFromTransformedRegion(\n region,\n transform,\n initialTransform,\n result\n );\n }\n\n if (defined(result)) {\n return result;\n }\n\n var rectangleRegion = Rectangle.unpack(region, 0, scratchRectangle);\n\n return new TileBoundingRegion({\n rectangle: rectangleRegion,\n minimumHeight: region[4],\n maximumHeight: region[5],\n });\n}\n\nfunction createSphere(sphere, transform, result) {\n var center = Cartesian3.fromElements(\n sphere[0],\n sphere[1],\n sphere[2],\n scratchCenter\n );\n var radius = sphere[3];\n\n // Find the transformed center and radius\n center = Matrix4.multiplyByPoint(transform, center, center);\n var scale = Matrix4.getScale(transform, scratchScale);\n var uniformScale = Cartesian3.maximumComponent(scale);\n radius *= uniformScale;\n\n if (defined(result)) {\n result.update(center, radius);\n return result;\n }\n return new TileBoundingSphere(center, radius);\n}\n\n/**\n * Create a bounding volume from the tile's bounding volume header.\n *\n * @param {Object} boundingVolumeHeader The tile's bounding volume header.\n * @param {Matrix4} transform The transform to apply to the bounding volume.\n * @param {TileBoundingVolume} [result] The object onto which to store the result.\n *\n * @returns {TileBoundingVolume} The modified result parameter or a new TileBoundingVolume instance if none was provided.\n *\n * @private\n */\nCesium3DTile.prototype.createBoundingVolume = function (\n boundingVolumeHeader,\n transform,\n result\n) {\n if (!defined(boundingVolumeHeader)) {\n throw new RuntimeError(\"boundingVolume must be defined\");\n }\n if (defined(boundingVolumeHeader.box)) {\n return createBox(boundingVolumeHeader.box, transform, result);\n }\n if (defined(boundingVolumeHeader.region)) {\n return createRegion(\n boundingVolumeHeader.region,\n transform,\n this._initialTransform,\n result\n );\n }\n if (defined(boundingVolumeHeader.sphere)) {\n return createSphere(boundingVolumeHeader.sphere, transform, result);\n }\n throw new RuntimeError(\n \"boundingVolume must contain a sphere, region, or box\"\n );\n};\n\n/**\n * Update the tile's transform. The transform is applied to the tile's bounding volumes.\n *\n * @private\n */\nCesium3DTile.prototype.updateTransform = function (parentTransform) {\n parentTransform = defaultValue(parentTransform, Matrix4.IDENTITY);\n var computedTransform = Matrix4.multiply(\n parentTransform,\n this.transform,\n scratchTransform\n );\n var transformChanged = !Matrix4.equals(\n computedTransform,\n this.computedTransform\n );\n\n if (!transformChanged) {\n return;\n }\n\n Matrix4.clone(computedTransform, this.computedTransform);\n\n // Update the bounding volumes\n var header = this._header;\n var content = this._header.content;\n this._boundingVolume = this.createBoundingVolume(\n header.boundingVolume,\n this.computedTransform,\n this._boundingVolume\n );\n if (defined(this._contentBoundingVolume)) {\n this._contentBoundingVolume = this.createBoundingVolume(\n content.boundingVolume,\n this.computedTransform,\n this._contentBoundingVolume\n );\n }\n if (defined(this._viewerRequestVolume)) {\n this._viewerRequestVolume = this.createBoundingVolume(\n header.viewerRequestVolume,\n this.computedTransform,\n this._viewerRequestVolume\n );\n }\n\n this.updateGeometricErrorScale();\n\n // Destroy the debug bounding volumes. They will be generated fresh.\n this._debugBoundingVolume =\n this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n this._debugContentBoundingVolume =\n this._debugContentBoundingVolume &&\n this._debugContentBoundingVolume.destroy();\n this._debugViewerRequestVolume =\n this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n};\n\nCesium3DTile.prototype.updateGeometricErrorScale = function () {\n var scale = Matrix4.getScale(this.computedTransform, scratchScale);\n var uniformScale = Cartesian3.maximumComponent(scale);\n this.geometricError = this._geometricError * uniformScale;\n};\n\nfunction applyDebugSettings(tile, tileset, frameState, passOptions) {\n if (!passOptions.isRender) {\n return;\n }\n\n var hasContentBoundingVolume =\n defined(tile._header.content) &&\n defined(tile._header.content.boundingVolume);\n var empty = tile.hasEmptyContent || tile.hasTilesetContent;\n\n var showVolume =\n tileset.debugShowBoundingVolume ||\n (tileset.debugShowContentBoundingVolume && !hasContentBoundingVolume);\n if (showVolume) {\n var color;\n if (!tile._finalResolution) {\n color = Color.YELLOW;\n } else if (empty) {\n color = Color.DARKGRAY;\n } else {\n color = Color.WHITE;\n }\n if (!defined(tile._debugBoundingVolume)) {\n tile._debugBoundingVolume = tile._boundingVolume.createDebugVolume(color);\n }\n tile._debugBoundingVolume.update(frameState);\n var attributes = tile._debugBoundingVolume.getGeometryInstanceAttributes(\n \"outline\"\n );\n attributes.color = ColorGeometryInstanceAttribute.toValue(\n color,\n attributes.color\n );\n } else if (!showVolume && defined(tile._debugBoundingVolume)) {\n tile._debugBoundingVolume = tile._debugBoundingVolume.destroy();\n }\n\n if (tileset.debugShowContentBoundingVolume && hasContentBoundingVolume) {\n if (!defined(tile._debugContentBoundingVolume)) {\n tile._debugContentBoundingVolume = tile._contentBoundingVolume.createDebugVolume(\n Color.BLUE\n );\n }\n tile._debugContentBoundingVolume.update(frameState);\n } else if (\n !tileset.debugShowContentBoundingVolume &&\n defined(tile._debugContentBoundingVolume)\n ) {\n tile._debugContentBoundingVolume = tile._debugContentBoundingVolume.destroy();\n }\n\n if (\n tileset.debugShowViewerRequestVolume &&\n defined(tile._viewerRequestVolume)\n ) {\n if (!defined(tile._debugViewerRequestVolume)) {\n tile._debugViewerRequestVolume = tile._viewerRequestVolume.createDebugVolume(\n Color.YELLOW\n );\n }\n tile._debugViewerRequestVolume.update(frameState);\n } else if (\n !tileset.debugShowViewerRequestVolume &&\n defined(tile._debugViewerRequestVolume)\n ) {\n tile._debugViewerRequestVolume = tile._debugViewerRequestVolume.destroy();\n }\n\n var debugColorizeTilesOn =\n (tileset.debugColorizeTiles && !tile._debugColorizeTiles) ||\n defined(tileset._heatmap.tilePropertyName);\n var debugColorizeTilesOff =\n !tileset.debugColorizeTiles && tile._debugColorizeTiles;\n\n if (debugColorizeTilesOn) {\n tileset._heatmap.colorize(tile, frameState); // Skipped if tileset._heatmap.tilePropertyName is undefined\n tile._debugColorizeTiles = true;\n tile.color = tile._debugColor;\n } else if (debugColorizeTilesOff) {\n tile._debugColorizeTiles = false;\n tile.color = Color.WHITE;\n }\n\n if (tile._colorDirty) {\n tile._colorDirty = false;\n tile._content.applyDebugSettings(true, tile._color);\n }\n\n if (debugColorizeTilesOff) {\n tileset.makeStyleDirty(); // Re-apply style now that colorize is switched off\n }\n}\n\nfunction updateContent(tile, tileset, frameState) {\n var content = tile._content;\n var expiredContent = tile._expiredContent;\n\n if (defined(expiredContent)) {\n if (!tile.contentReady) {\n // Render the expired content while the content loads\n expiredContent.update(tileset, frameState);\n return;\n }\n\n // New content is ready, destroy expired content\n tile._expiredContent.destroy();\n tile._expiredContent = undefined;\n }\n\n content.update(tileset, frameState);\n}\n\nfunction updateClippingPlanes(tile, tileset) {\n // Compute and compare ClippingPlanes state:\n // - enabled-ness - are clipping planes enabled? is this tile clipped?\n // - clipping plane count\n // - clipping function (union v. intersection)\n var clippingPlanes = tileset.clippingPlanes;\n var currentClippingPlanesState = 0;\n if (defined(clippingPlanes) && tile._isClipped && clippingPlanes.enabled) {\n currentClippingPlanesState = clippingPlanes.clippingPlanesState;\n }\n // If clippingPlaneState for tile changed, mark clippingPlanesDirty so content can update\n if (currentClippingPlanesState !== tile._clippingPlanesState) {\n tile._clippingPlanesState = currentClippingPlanesState;\n tile.clippingPlanesDirty = true;\n }\n}\n\n/**\n * Get the draw commands needed to render this tile.\n *\n * @private\n */\nCesium3DTile.prototype.update = function (tileset, frameState, passOptions) {\n var initCommandLength = frameState.commandList.length;\n updateClippingPlanes(this, tileset);\n applyDebugSettings(this, tileset, frameState, passOptions);\n updateContent(this, tileset, frameState);\n this._commandsLength = frameState.commandList.length - initCommandLength;\n\n this.clippingPlanesDirty = false; // reset after content update\n};\n\nvar scratchCommandList = [];\n\n/**\n * Processes the tile's content, e.g., create WebGL resources, to move from the PROCESSING to READY state.\n *\n * @param {Cesium3DTileset} tileset The tileset containing this tile.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nCesium3DTile.prototype.process = function (tileset, frameState) {\n var savedCommandList = frameState.commandList;\n frameState.commandList = scratchCommandList;\n\n this._content.update(tileset, frameState);\n\n scratchCommandList.length = 0;\n frameState.commandList = savedCommandList;\n};\n\nfunction isolateDigits(normalizedValue, numberOfDigits, leftShift) {\n var scaled = normalizedValue * Math.pow(10, numberOfDigits);\n var integer = parseInt(scaled);\n return integer * Math.pow(10, leftShift);\n}\n\nfunction priorityNormalizeAndClamp(value, minimum, maximum) {\n return Math.max(\n CesiumMath.normalize(value, minimum, maximum) - CesiumMath.EPSILON7,\n 0.0\n ); // Subtract epsilon since we only want decimal digits present in the output.\n}\n\n/**\n * Sets the priority of the tile based on distance and depth\n * @private\n */\nCesium3DTile.prototype.updatePriority = function () {\n var tileset = this.tileset;\n var preferLeaves = tileset.preferLeaves;\n var minimumPriority = tileset._minimumPriority;\n var maximumPriority = tileset._maximumPriority;\n\n // Combine priority systems together by mapping them into a base 10 number where each priority controls a specific set of digits in the number.\n // For number priorities, map them to a 0.xxxxx number then left shift it up into a set number of digits before the decimal point. Chop of the fractional part then left shift again into the position it needs to go.\n // For blending number priorities, normalize them to 0-1 and interpolate to get a combined 0-1 number, then proceed as normal.\n // Booleans can just be 0 or 10^leftshift.\n // Think of digits as penalties since smaller numbers are higher priority. If a tile has some large quantity or has a flag raised it's (usually) penalized for it, expressed as a higher number for the digit.\n // Priority number format: preloadFlightDigits(1) | foveatedDeferDigits(1) | foveatedDigits(4) | preloadProgressiveResolutionDigits(1) | preferredSortingDigits(4) . depthDigits(the decimal digits)\n // Certain flags like preferLeaves will flip / turn off certain digits to get desired load order.\n\n // Setup leftShifts, digit counts, and scales (for booleans)\n var digitsForANumber = 4;\n var digitsForABoolean = 1;\n\n var preferredSortingLeftShift = 0;\n var preferredSortingDigitsCount = digitsForANumber;\n\n var foveatedLeftShift =\n preferredSortingLeftShift + preferredSortingDigitsCount;\n var foveatedDigitsCount = digitsForANumber;\n\n var preloadProgressiveResolutionLeftShift =\n foveatedLeftShift + foveatedDigitsCount;\n var preloadProgressiveResolutionDigitsCount = digitsForABoolean;\n var preloadProgressiveResolutionScale = Math.pow(\n 10,\n preloadProgressiveResolutionLeftShift\n );\n\n var foveatedDeferLeftShift =\n preloadProgressiveResolutionLeftShift +\n preloadProgressiveResolutionDigitsCount;\n var foveatedDeferDigitsCount = digitsForABoolean;\n var foveatedDeferScale = Math.pow(10, foveatedDeferLeftShift);\n\n var preloadFlightLeftShift =\n foveatedDeferLeftShift + foveatedDeferDigitsCount;\n var preloadFlightScale = Math.pow(10, preloadFlightLeftShift);\n\n // Compute the digits for each priority\n var depthDigits = priorityNormalizeAndClamp(\n this._depth,\n minimumPriority.depth,\n maximumPriority.depth\n );\n depthDigits = preferLeaves ? 1.0 - depthDigits : depthDigits;\n\n // Map 0-1 then convert to digit. Include a distance sort when doing non-skipLOD and replacement refinement, helps things like non-skipLOD photogrammetry\n var useDistance =\n !tileset._skipLevelOfDetail && this.refine === Cesium3DTileRefine.REPLACE;\n var normalizedPreferredSorting = useDistance\n ? priorityNormalizeAndClamp(\n this._priorityHolder._distanceToCamera,\n minimumPriority.distance,\n maximumPriority.distance\n )\n : priorityNormalizeAndClamp(\n this._priorityReverseScreenSpaceError,\n minimumPriority.reverseScreenSpaceError,\n maximumPriority.reverseScreenSpaceError\n );\n var preferredSortingDigits = isolateDigits(\n normalizedPreferredSorting,\n preferredSortingDigitsCount,\n preferredSortingLeftShift\n );\n\n var preloadProgressiveResolutionDigits = this._priorityProgressiveResolution\n ? 0\n : preloadProgressiveResolutionScale;\n\n var normalizedFoveatedFactor = priorityNormalizeAndClamp(\n this._priorityHolder._foveatedFactor,\n minimumPriority.foveatedFactor,\n maximumPriority.foveatedFactor\n );\n var foveatedDigits = isolateDigits(\n normalizedFoveatedFactor,\n foveatedDigitsCount,\n foveatedLeftShift\n );\n\n var foveatedDeferDigits = this.priorityDeferred ? foveatedDeferScale : 0;\n\n var preloadFlightDigits =\n tileset._pass === Cesium3DTilePass.PRELOAD_FLIGHT ? 0 : preloadFlightScale;\n\n // Get the final base 10 number\n this._priority =\n depthDigits +\n preferredSortingDigits +\n preloadProgressiveResolutionDigits +\n foveatedDigits +\n foveatedDeferDigits +\n preloadFlightDigits;\n};\n\n/**\n * @private\n */\nCesium3DTile.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * @private\n */\nCesium3DTile.prototype.destroy = function () {\n // For the interval between new content being requested and downloaded, expiredContent === content, so don't destroy twice\n this._content = this._content && this._content.destroy();\n this._expiredContent =\n this._expiredContent &&\n !this._expiredContent.isDestroyed() &&\n this._expiredContent.destroy();\n this._debugBoundingVolume =\n this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n this._debugContentBoundingVolume =\n this._debugContentBoundingVolume &&\n this._debugContentBoundingVolume.destroy();\n this._debugViewerRequestVolume =\n this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n return destroyObject(this);\n};\nexport default Cesium3DTile;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\n\n/**\n * Utility functions for computing optimization hints for a {@link Cesium3DTileset}.\n *\n * @namespace Cesium3DTileOptimizations\n *\n * @private\n */\nvar Cesium3DTileOptimizations = {};\n\nvar scratchAxis = new Cartesian3();\n\n/**\n * Evaluates support for the childrenWithinParent optimization. This is used to more tightly cull tilesets if\n * children bounds are fully contained within the parent. Currently, support for the optimization only works for\n * oriented bounding boxes, so both the child and parent tile must be either a {@link TileOrientedBoundingBox} or\n * {@link TileBoundingRegion}. The purpose of this check is to prevent use of a culling optimization when the child\n * bounds exceed those of the parent. If the child bounds are greater, it is more likely that the optimization will\n * waste CPU cycles. Bounding spheres are not supported for the reason that the child bounds can very often be\n * partially outside of the parent bounds.\n *\n * @param {Cesium3DTile} tile The tile to check.\n * @returns {Boolean} Whether the childrenWithinParent optimization is supported.\n */\nCesium3DTileOptimizations.checkChildrenWithinParent = function (tile) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"tile\", tile);\n //>>includeEnd('debug');\n\n var children = tile.children;\n var length = children.length;\n\n // Check if the parent has an oriented bounding box.\n var boundingVolume = tile.boundingVolume;\n if (\n boundingVolume instanceof TileOrientedBoundingBox ||\n boundingVolume instanceof TileBoundingRegion\n ) {\n var orientedBoundingBox = boundingVolume._orientedBoundingBox;\n tile._optimChildrenWithinParent =\n Cesium3DTileOptimizationHint.USE_OPTIMIZATION;\n for (var i = 0; i < length; ++i) {\n var child = children[i];\n\n // Check if the child has an oriented bounding box.\n var childBoundingVolume = child.boundingVolume;\n if (\n !(\n childBoundingVolume instanceof TileOrientedBoundingBox ||\n childBoundingVolume instanceof TileBoundingRegion\n )\n ) {\n // Do not support if the parent and child both do not have oriented bounding boxes.\n tile._optimChildrenWithinParent =\n Cesium3DTileOptimizationHint.SKIP_OPTIMIZATION;\n break;\n }\n\n var childOrientedBoundingBox = childBoundingVolume._orientedBoundingBox;\n\n // Compute the axis from the parent to the child.\n var axis = Cartesian3.subtract(\n childOrientedBoundingBox.center,\n orientedBoundingBox.center,\n scratchAxis\n );\n var axisLength = Cartesian3.magnitude(axis);\n Cartesian3.divideByScalar(axis, axisLength, axis);\n\n // Project the bounding box of the parent onto the axis. Because the axis is a ray from the parent\n // to the child, the projection parameterized along the ray will be (+/- proj1).\n var proj1 =\n Math.abs(orientedBoundingBox.halfAxes[0] * axis.x) +\n Math.abs(orientedBoundingBox.halfAxes[1] * axis.y) +\n Math.abs(orientedBoundingBox.halfAxes[2] * axis.z) +\n Math.abs(orientedBoundingBox.halfAxes[3] * axis.x) +\n Math.abs(orientedBoundingBox.halfAxes[4] * axis.y) +\n Math.abs(orientedBoundingBox.halfAxes[5] * axis.z) +\n Math.abs(orientedBoundingBox.halfAxes[6] * axis.x) +\n Math.abs(orientedBoundingBox.halfAxes[7] * axis.y) +\n Math.abs(orientedBoundingBox.halfAxes[8] * axis.z);\n\n // Project the bounding box of the child onto the axis. Because the axis is a ray from the parent\n // to the child, the projection parameterized along the ray will be (+/- proj2) + axis.length.\n var proj2 =\n Math.abs(childOrientedBoundingBox.halfAxes[0] * axis.x) +\n Math.abs(childOrientedBoundingBox.halfAxes[1] * axis.y) +\n Math.abs(childOrientedBoundingBox.halfAxes[2] * axis.z) +\n Math.abs(childOrientedBoundingBox.halfAxes[3] * axis.x) +\n Math.abs(childOrientedBoundingBox.halfAxes[4] * axis.y) +\n Math.abs(childOrientedBoundingBox.halfAxes[5] * axis.z) +\n Math.abs(childOrientedBoundingBox.halfAxes[6] * axis.x) +\n Math.abs(childOrientedBoundingBox.halfAxes[7] * axis.y) +\n Math.abs(childOrientedBoundingBox.halfAxes[8] * axis.z);\n\n // If the child extends the parent's bounds, the optimization is not valid and we skip it.\n if (proj1 <= proj2 + axisLength) {\n tile._optimChildrenWithinParent =\n Cesium3DTileOptimizationHint.SKIP_OPTIMIZATION;\n break;\n }\n }\n }\n\n return (\n tile._optimChildrenWithinParent ===\n Cesium3DTileOptimizationHint.USE_OPTIMIZATION\n );\n};\nexport default Cesium3DTileOptimizations;\n","import defined from \"../Core/defined.js\";\nimport DoublyLinkedList from \"../Core/DoublyLinkedList.js\";\n\n/**\n * Stores tiles with content loaded.\n *\n * @private\n */\nfunction Cesium3DTilesetCache() {\n // [head, sentinel) -> tiles that weren't selected this frame and may be removed from the cache\n // (sentinel, tail] -> tiles that were selected this frame\n this._list = new DoublyLinkedList();\n this._sentinel = this._list.add();\n this._trimTiles = false;\n}\n\nCesium3DTilesetCache.prototype.reset = function () {\n // Move sentinel node to the tail so, at the start of the frame, all tiles\n // may be potentially replaced. Tiles are moved to the right of the sentinel\n // when they are selected so they will not be replaced.\n this._list.splice(this._list.tail, this._sentinel);\n};\n\nCesium3DTilesetCache.prototype.touch = function (tile) {\n var node = tile.cacheNode;\n if (defined(node)) {\n this._list.splice(this._sentinel, node);\n }\n};\n\nCesium3DTilesetCache.prototype.add = function (tile) {\n if (!defined(tile.cacheNode)) {\n tile.cacheNode = this._list.add(tile);\n }\n};\n\nCesium3DTilesetCache.prototype.unloadTile = function (\n tileset,\n tile,\n unloadCallback\n) {\n var node = tile.cacheNode;\n if (!defined(node)) {\n return;\n }\n\n this._list.remove(node);\n tile.cacheNode = undefined;\n unloadCallback(tileset, tile);\n};\n\nCesium3DTilesetCache.prototype.unloadTiles = function (\n tileset,\n unloadCallback\n) {\n var trimTiles = this._trimTiles;\n this._trimTiles = false;\n\n var list = this._list;\n\n var maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;\n\n // Traverse the list only to the sentinel since tiles/nodes to the\n // right of the sentinel were used this frame.\n //\n // The sub-list to the left of the sentinel is ordered from LRU to MRU.\n var sentinel = this._sentinel;\n var node = list.head;\n while (\n node !== sentinel &&\n (tileset.totalMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)\n ) {\n var tile = node.item;\n node = node.next;\n this.unloadTile(tileset, tile, unloadCallback);\n }\n};\n\nCesium3DTilesetCache.prototype.trim = function () {\n this._trimTiles = true;\n};\nexport default Cesium3DTilesetCache;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A heatmap colorizer in a {@link Cesium3DTileset}. A tileset can colorize its visible tiles in a heatmap style.\n *\n * @alias Cesium3DTilesetHeatmap\n * @constructor\n * @private\n */\nfunction Cesium3DTilesetHeatmap(tilePropertyName) {\n /**\n * The tile variable to track for heatmap colorization.\n * Tile's will be colorized relative to the other visible tile's values for this variable.\n *\n * @type {String}\n */\n this.tilePropertyName = tilePropertyName;\n\n // Members that are updated every time a tile is colorized\n this._minimum = Number.MAX_VALUE;\n this._maximum = -Number.MAX_VALUE;\n\n // Members that are updated once every frame\n this._previousMinimum = Number.MAX_VALUE;\n this._previousMaximum = -Number.MAX_VALUE;\n\n // If defined uses a reference minimum maximum to colorize by instead of using last frames minimum maximum of rendered tiles.\n // For example, the _loadTimestamp can get a better colorization using setReferenceMinimumMaximum in order to take accurate colored timing diffs of various scenes.\n this._referenceMinimum = {};\n this._referenceMaximum = {};\n}\n\n/**\n * Convert to a usable heatmap value (i.e. a number). Ensures that tile values that aren't stored as numbers can be used for colorization.\n * @private\n */\nfunction getHeatmapValue(tileValue, tilePropertyName) {\n var value;\n if (tilePropertyName === \"_loadTimestamp\") {\n value = JulianDate.toDate(tileValue).getTime();\n } else {\n value = tileValue;\n }\n return value;\n}\n\n/**\n * Sets the reference minimum and maximum for the variable name. Converted to numbers before they are stored.\n *\n * @param {Object} minimum The minimum reference value.\n * @param {Object} maximum The maximum reference value.\n * @param {String} tilePropertyName The tile variable that will use these reference values when it is colorized.\n */\nCesium3DTilesetHeatmap.prototype.setReferenceMinimumMaximum = function (\n minimum,\n maximum,\n tilePropertyName\n) {\n this._referenceMinimum[tilePropertyName] = getHeatmapValue(\n minimum,\n tilePropertyName\n );\n this._referenceMaximum[tilePropertyName] = getHeatmapValue(\n maximum,\n tilePropertyName\n );\n};\n\nfunction getHeatmapValueAndUpdateMinimumMaximum(heatmap, tile) {\n var tilePropertyName = heatmap.tilePropertyName;\n if (defined(tilePropertyName)) {\n var heatmapValue = getHeatmapValue(\n tile[tilePropertyName],\n tilePropertyName\n );\n if (!defined(heatmapValue)) {\n heatmap.tilePropertyName = undefined;\n return heatmapValue;\n }\n heatmap._maximum = Math.max(heatmapValue, heatmap._maximum);\n heatmap._minimum = Math.min(heatmapValue, heatmap._minimum);\n return heatmapValue;\n }\n}\n\nvar heatmapColors = [\n new Color(0.1, 0.1, 0.1, 1), // Dark Gray\n new Color(0.153, 0.278, 0.878, 1), // Blue\n new Color(0.827, 0.231, 0.49, 1), // Pink\n new Color(0.827, 0.188, 0.22, 1), // Red\n new Color(1.0, 0.592, 0.259, 1), // Orange\n new Color(1.0, 0.843, 0.0, 1),\n]; // Yellow\n/**\n * Colorize the tile in heat map style based on where it lies within the minimum maximum window.\n * Heatmap colors are black, blue, pink, red, orange, yellow. 'Cold' or low numbers will be black and blue, 'Hot' or high numbers will be orange and yellow,\n * @param {Cesium3DTile} tile The tile to colorize relative to last frame's minimum and maximum values of all visible tiles.\n * @param {FrameState} frameState The frame state.\n */\nCesium3DTilesetHeatmap.prototype.colorize = function (tile, frameState) {\n var tilePropertyName = this.tilePropertyName;\n if (\n !defined(tilePropertyName) ||\n !tile.contentAvailable ||\n tile._selectedFrame !== frameState.frameNumber\n ) {\n return;\n }\n\n var heatmapValue = getHeatmapValueAndUpdateMinimumMaximum(this, tile);\n var minimum = this._previousMinimum;\n var maximum = this._previousMaximum;\n\n if (minimum === Number.MAX_VALUE || maximum === -Number.MAX_VALUE) {\n return;\n }\n\n // Shift the minimum maximum window down to 0\n var shiftedMax = maximum - minimum + CesiumMath.EPSILON7; // Prevent divide by 0\n var shiftedValue = CesiumMath.clamp(heatmapValue - minimum, 0.0, shiftedMax);\n\n // Get position between minimum and maximum and convert that to a position in the color array\n var zeroToOne = shiftedValue / shiftedMax;\n var lastIndex = heatmapColors.length - 1.0;\n var colorPosition = zeroToOne * lastIndex;\n\n // Take floor and ceil of the value to get the two colors to lerp between, lerp using the fractional portion\n var colorPositionFloor = Math.floor(colorPosition);\n var colorPositionCeil = Math.ceil(colorPosition);\n var t = colorPosition - colorPositionFloor;\n var colorZero = heatmapColors[colorPositionFloor];\n var colorOne = heatmapColors[colorPositionCeil];\n\n // Perform the lerp\n var finalColor = Color.clone(Color.WHITE);\n finalColor.red = CesiumMath.lerp(colorZero.red, colorOne.red, t);\n finalColor.green = CesiumMath.lerp(colorZero.green, colorOne.green, t);\n finalColor.blue = CesiumMath.lerp(colorZero.blue, colorOne.blue, t);\n tile._debugColor = finalColor;\n};\n\n/**\n * Resets the tracked minimum maximum values for heatmap colorization. Happens right before tileset traversal.\n */\nCesium3DTilesetHeatmap.prototype.resetMinimumMaximum = function () {\n // For heat map colorization\n var tilePropertyName = this.tilePropertyName;\n if (defined(tilePropertyName)) {\n var referenceMinimum = this._referenceMinimum[tilePropertyName];\n var referenceMaximum = this._referenceMaximum[tilePropertyName];\n var useReference = defined(referenceMinimum) && defined(referenceMaximum);\n this._previousMinimum = useReference ? referenceMinimum : this._minimum;\n this._previousMaximum = useReference ? referenceMaximum : this._maximum;\n this._minimum = Number.MAX_VALUE;\n this._maximum = -Number.MAX_VALUE;\n }\n};\nexport default Cesium3DTilesetHeatmap;\n","import defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTilesetStatistics() {\n // Rendering statistics\n this.selected = 0;\n this.visited = 0;\n // Loading statistics\n this.numberOfCommands = 0;\n this.numberOfAttemptedRequests = 0;\n this.numberOfPendingRequests = 0;\n this.numberOfTilesProcessing = 0;\n this.numberOfTilesWithContentReady = 0; // Number of tiles with content loaded, does not include empty tiles\n this.numberOfTilesTotal = 0; // Number of tiles in tileset JSON (and other tileset JSON files as they are loaded)\n this.numberOfLoadedTilesTotal = 0; // Running total of loaded tiles for the lifetime of the session\n // Features statistics\n this.numberOfFeaturesSelected = 0; // Number of features rendered\n this.numberOfFeaturesLoaded = 0; // Number of features in memory\n this.numberOfPointsSelected = 0;\n this.numberOfPointsLoaded = 0;\n this.numberOfTrianglesSelected = 0;\n // Styling statistics\n this.numberOfTilesStyled = 0;\n this.numberOfFeaturesStyled = 0;\n // Optimization statistics\n this.numberOfTilesCulledWithChildrenUnion = 0;\n // Memory statistics\n this.geometryByteLength = 0;\n this.texturesByteLength = 0;\n this.batchTableByteLength = 0;\n}\n\nCesium3DTilesetStatistics.prototype.clear = function () {\n this.selected = 0;\n this.visited = 0;\n this.numberOfCommands = 0;\n this.numberOfAttemptedRequests = 0;\n this.numberOfFeaturesSelected = 0;\n this.numberOfPointsSelected = 0;\n this.numberOfTrianglesSelected = 0;\n this.numberOfTilesStyled = 0;\n this.numberOfFeaturesStyled = 0;\n this.numberOfTilesCulledWithChildrenUnion = 0;\n};\n\nfunction updatePointAndFeatureCounts(statistics, content, decrement, load) {\n var contents = content.innerContents;\n var pointsLength = content.pointsLength;\n var trianglesLength = content.trianglesLength;\n var featuresLength = content.featuresLength;\n var geometryByteLength = content.geometryByteLength;\n var texturesByteLength = content.texturesByteLength;\n var batchTableByteLength = content.batchTableByteLength;\n\n if (load) {\n statistics.numberOfFeaturesLoaded += decrement\n ? -featuresLength\n : featuresLength;\n statistics.numberOfPointsLoaded += decrement ? -pointsLength : pointsLength;\n statistics.geometryByteLength += decrement\n ? -geometryByteLength\n : geometryByteLength;\n statistics.texturesByteLength += decrement\n ? -texturesByteLength\n : texturesByteLength;\n statistics.batchTableByteLength += decrement\n ? -batchTableByteLength\n : batchTableByteLength;\n } else {\n statistics.numberOfFeaturesSelected += decrement\n ? -featuresLength\n : featuresLength;\n statistics.numberOfPointsSelected += decrement\n ? -pointsLength\n : pointsLength;\n statistics.numberOfTrianglesSelected += decrement\n ? -trianglesLength\n : trianglesLength;\n }\n\n if (defined(contents)) {\n var length = contents.length;\n for (var i = 0; i < length; ++i) {\n updatePointAndFeatureCounts(statistics, contents[i], decrement, load);\n }\n }\n}\n\nCesium3DTilesetStatistics.prototype.incrementSelectionCounts = function (\n content\n) {\n updatePointAndFeatureCounts(this, content, false, false);\n};\n\nCesium3DTilesetStatistics.prototype.incrementLoadCounts = function (content) {\n updatePointAndFeatureCounts(this, content, false, true);\n};\n\nCesium3DTilesetStatistics.prototype.decrementLoadCounts = function (content) {\n updatePointAndFeatureCounts(this, content, true, true);\n};\n\nCesium3DTilesetStatistics.clone = function (statistics, result) {\n result.selected = statistics.selected;\n result.visited = statistics.visited;\n result.numberOfCommands = statistics.numberOfCommands;\n result.selected = statistics.selected;\n result.numberOfAttemptedRequests = statistics.numberOfAttemptedRequests;\n result.numberOfPendingRequests = statistics.numberOfPendingRequests;\n result.numberOfTilesProcessing = statistics.numberOfTilesProcessing;\n result.numberOfTilesWithContentReady =\n statistics.numberOfTilesWithContentReady;\n result.numberOfTilesTotal = statistics.numberOfTilesTotal;\n result.numberOfFeaturesSelected = statistics.numberOfFeaturesSelected;\n result.numberOfFeaturesLoaded = statistics.numberOfFeaturesLoaded;\n result.numberOfPointsSelected = statistics.numberOfPointsSelected;\n result.numberOfPointsLoaded = statistics.numberOfPointsLoaded;\n result.numberOfTrianglesSelected = statistics.numberOfTrianglesSelected;\n result.numberOfTilesStyled = statistics.numberOfTilesStyled;\n result.numberOfFeaturesStyled = statistics.numberOfFeaturesStyled;\n result.numberOfTilesCulledWithChildrenUnion =\n statistics.numberOfTilesCulledWithChildrenUnion;\n result.geometryByteLength = statistics.geometryByteLength;\n result.texturesByteLength = statistics.texturesByteLength;\n result.batchTableByteLength = statistics.batchTableByteLength;\n};\nexport default Cesium3DTilesetStatistics;\n","import defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTileStyleEngine() {\n this._style = undefined; // The style provided by the user\n this._styleDirty = false; // true when the style is reassigned\n this._lastStyleTime = 0; // The \"time\" when the last style was assigned\n}\n\nObject.defineProperties(Cesium3DTileStyleEngine.prototype, {\n style: {\n get: function () {\n return this._style;\n },\n set: function (value) {\n this._style = value;\n this._styleDirty = true;\n },\n },\n});\n\nCesium3DTileStyleEngine.prototype.makeDirty = function () {\n this._styleDirty = true;\n};\n\nCesium3DTileStyleEngine.prototype.applyStyle = function (tileset, passOptions) {\n if (!tileset.ready) {\n return;\n }\n\n if (defined(this._style) && !this._style.ready) {\n return;\n }\n\n var styleDirty = this._styleDirty;\n\n if (passOptions.isRender) {\n // Don't reset until the render pass\n this._styleDirty = false;\n }\n\n if (styleDirty) {\n // Increase \"time\", so the style is applied to all visible tiles\n ++this._lastStyleTime;\n }\n\n var lastStyleTime = this._lastStyleTime;\n var statistics = tileset._statistics;\n\n // If a new style was assigned, loop through all the visible tiles; otherwise, loop through\n // only the tiles that are newly visible, i.e., they are visible this frame, but were not\n // visible last frame. In many cases, the newly selected tiles list will be short or empty.\n var tiles = styleDirty\n ? tileset._selectedTiles\n : tileset._selectedTilesToStyle;\n // PERFORMANCE_IDEA: does mouse-over picking basically trash this? We need to style on\n // pick, for example, because a feature's show may be false.\n\n var length = tiles.length;\n for (var i = 0; i < length; ++i) {\n var tile = tiles[i];\n if (tile.lastStyleTime !== lastStyleTime) {\n // Apply the style to this tile if it wasn't already applied because:\n // 1) the user assigned a new style to the tileset\n // 2) this tile is now visible, but it wasn't visible when the style was first assigned\n var content = tile.content;\n tile.lastStyleTime = lastStyleTime;\n content.applyStyle(this._style);\n statistics.numberOfFeaturesStyled += content.featuresLength;\n ++statistics.numberOfTilesStyled;\n }\n }\n};\nexport default Cesium3DTileStyleEngine;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Axis from \"./Axis.js\";\nimport Cesium3DTile from \"./Cesium3DTile.js\";\nimport Cesium3DTileColorBlendMode from \"./Cesium3DTileColorBlendMode.js\";\nimport Cesium3DTileContentState from \"./Cesium3DTileContentState.js\";\nimport Cesium3DTileOptimizations from \"./Cesium3DTileOptimizations.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Cesium3DTilesetCache from \"./Cesium3DTilesetCache.js\";\nimport Cesium3DTilesetHeatmap from \"./Cesium3DTilesetHeatmap.js\";\nimport Cesium3DTilesetStatistics from \"./Cesium3DTilesetStatistics.js\";\nimport Cesium3DTileStyleEngine from \"./Cesium3DTileStyleEngine.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport LabelCollection from \"./LabelCollection.js\";\nimport PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\nimport PointCloudShading from \"./PointCloudShading.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileBoundingSphere from \"./TileBoundingSphere.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\n\n/**\n * A {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles tileset},\n * used for streaming massive heterogeneous 3D geospatial datasets.\n *\n * @alias Cesium3DTileset\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String|Promise<Resource>|Promise<String>} options.url The url to a tileset JSON file.\n * @param {Boolean} [options.show=true] Determines if the tileset will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] A 4x4 transformation matrix that transforms the tileset's root tile.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the tileset casts or receives shadows from light sources.\n * @param {Number} [options.maximumScreenSpaceError=16] The maximum screen space error used to drive level of detail refinement.\n * @param {Number} [options.maximumMemoryUsage=512] The maximum amount of memory in MB that can be used by the tileset.\n * @param {Boolean} [options.cullWithChildrenBounds=true] Optimization option. Whether to cull tiles using the union of their children bounding volumes.\n * @param {Boolean} [options.cullRequestsWhileMoving=true] Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets.\n * @param {Number} [options.cullRequestsWhileMovingMultiplier=60.0] Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling.\n * @param {Boolean} [options.preloadWhenHidden=false] Preload tiles when <code>tileset.show</code> is <code>false</code>. Loads tiles as if the tileset is visible but does not render them.\n * @param {Boolean} [options.preloadFlightDestinations=true] Optimization option. Preload tiles at the camera's flight destination while the camera is in flight.\n * @param {Boolean} [options.preferLeaves=false] Optimization option. Prefer loading of leaves first.\n * @param {Boolean} [options.dynamicScreenSpaceError=false] Optimization option. Reduce the screen space error for tiles that are further away from the camera.\n * @param {Number} [options.dynamicScreenSpaceErrorDensity=0.00278] Density used to adjust the dynamic screen space error, similar to fog density.\n * @param {Number} [options.dynamicScreenSpaceErrorFactor=4.0] A factor used to increase the computed dynamic screen space error.\n * @param {Number} [options.dynamicScreenSpaceErrorHeightFalloff=0.25] A ratio of the tileset's height at which the density starts to falloff.\n * @param {Number} [options.progressiveResolutionHeightFraction=0.3] Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of <code>progressiveResolutionHeightFraction*screenHeight</code> will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load.\n * @param {Boolean} [options.foveatedScreenSpaceError=true] Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the screen space error for tiles around the edge of the screen. Screen space error returns to normal once all the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded.\n * @param {Number} [options.foveatedConeSize=0.1] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred. Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and their screen space error. This is controlled by {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}. Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, disabling the effect.\n * @param {Number} [options.foveatedMinimumScreenSpaceErrorRelaxation=0.0] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone. The screen space error will be raised starting with tileset value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}.\n * @param {Cesium3DTileset.foveatedInterpolationCallback} [options.foveatedInterpolationCallback=Math.lerp] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone, interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}\n * @param {Number} [options.foveatedTimeDelay=0.2] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how long in seconds to wait after the camera stops moving before deferred tiles start loading in. This time delay prevents requesting tiles around the edges of the screen when the camera is moving. Setting this to 0.0 will immediately request all tiles in any given view.\n * @param {Boolean} [options.skipLevelOfDetail=false] Optimization option. Determines if level of detail skipping should be applied during the traversal.\n * @param {Number} [options.baseScreenSpaceError=1024] When <code>skipLevelOfDetail</code> is <code>true</code>, the screen space error that must be reached before skipping levels of detail.\n * @param {Number} [options.skipScreenSpaceErrorFactor=16] When <code>skipLevelOfDetail</code> is <code>true</code>, a multiplier defining the minimum screen space error to skip. Used in conjunction with <code>skipLevels</code> to determine which tiles to load.\n * @param {Number} [options.skipLevels=1] When <code>skipLevelOfDetail</code> is <code>true</code>, a constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped. Used in conjunction with <code>skipScreenSpaceErrorFactor</code> to determine which tiles to load.\n * @param {Boolean} [options.immediatelyLoadDesiredLevelOfDetail=false] When <code>skipLevelOfDetail</code> is <code>true</code>, only tiles that meet the maximum screen space error will ever be downloaded. Skipping factors are ignored and just the desired tiles are loaded.\n * @param {Boolean} [options.loadSiblings=false] When <code>skipLevelOfDetail</code> is <code>true</code>, determines whether siblings of visible tiles are always downloaded during traversal.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset.\n * @param {ClassificationType} [options.classificationType] Determines whether terrain, 3D Tiles or both will be classified by this tileset. See {@link Cesium3DTileset#classificationType} for details about restrictions and limitations.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid determining the size and shape of the globe.\n * @param {Object} [options.pointCloudShading] Options for constructing a {@link PointCloudShading} object to control point attenuation based on geometric error and lighting.\n * @param {Cartesian2} [options.imageBasedLightingFactor=new Cartesian2(1.0, 1.0)] Scales the diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox.\n * @param {Cartesian3} [options.lightColor] The light color when shading models. When <code>undefined</code> the scene's light color is used instead.\n * @param {Number} [options.luminanceAtZenith=0.2] The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map.\n * @param {Cartesian3[]} [options.sphericalHarmonicCoefficients] The third order spherical harmonic coefficients used for the diffuse color of image-based lighting.\n * @param {String} [options.specularEnvironmentMaps] A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n * @param {Boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the glTF material's doubleSided property; when false, back face culling is disabled.\n * @param {String} [options.debugHeatmapTilePropertyName] The tile variable to colorize as a heatmap. All rendered tiles will be colorized relative to each other's specified variable value.\n * @param {Boolean} [options.debugFreezeFrame=false] For debugging only. Determines if only the tiles from last frame should be used for rendering.\n * @param {Boolean} [options.debugColorizeTiles=false] For debugging only. When true, assigns a random color to each tile.\n * @param {Boolean} [options.debugWireframe=false] For debugging only. When true, render's each tile's content as a wireframe.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile.\n * @param {Boolean} [options.debugShowContentBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile's content.\n * @param {Boolean} [options.debugShowViewerRequestVolume=false] For debugging only. When true, renders the viewer request volume for each tile.\n * @param {Boolean} [options.debugShowGeometricError=false] For debugging only. When true, draws labels to indicate the geometric error of each tile.\n * @param {Boolean} [options.debugShowRenderingStatistics=false] For debugging only. When true, draws labels to indicate the number of commands, points, triangles and features for each tile.\n * @param {Boolean} [options.debugShowMemoryUsage=false] For debugging only. When true, draws labels to indicate the texture and geometry memory in megabytes used by each tile.\n * @param {Boolean} [options.debugShowUrl=false] For debugging only. When true, draws labels to indicate the url of each tile.\n *\n * @exception {DeveloperError} The tileset must be 3D Tiles version 0.0 or 1.0.\n *\n * @example\n * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({\n * url : 'http://localhost:8002/tilesets/Seattle/tileset.json'\n * }));\n *\n * @example\n * // Common setting for the skipLevelOfDetail optimization\n * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({\n * url : 'http://localhost:8002/tilesets/Seattle/tileset.json',\n * skipLevelOfDetail : true,\n * baseScreenSpaceError : 1024,\n * skipScreenSpaceErrorFactor : 16,\n * skipLevels : 1,\n * immediatelyLoadDesiredLevelOfDetail : false,\n * loadSiblings : false,\n * cullWithChildrenBounds : true\n * }));\n *\n * @example\n * // Common settings for the dynamicScreenSpaceError optimization\n * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({\n * url : 'http://localhost:8002/tilesets/Seattle/tileset.json',\n * dynamicScreenSpaceError : true,\n * dynamicScreenSpaceErrorDensity : 0.00278,\n * dynamicScreenSpaceErrorFactor : 4.0,\n * dynamicScreenSpaceErrorHeightFalloff : 0.25\n * }));\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification|3D Tiles specification}\n */\nfunction Cesium3DTileset(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.url\", options.url);\n //>>includeEnd('debug');\n\n this._url = undefined;\n this._basePath = undefined;\n this._root = undefined;\n this._asset = undefined; // Metadata for the entire tileset\n this._properties = undefined; // Metadata for per-model/point/etc properties\n this._geometricError = undefined; // Geometric error when the tree is not rendered at all\n this._extensionsUsed = undefined;\n this._extensions = undefined;\n this._gltfUpAxis = undefined;\n this._cache = new Cesium3DTilesetCache();\n this._processingQueue = [];\n this._selectedTiles = [];\n this._emptyTiles = [];\n this._requestedTiles = [];\n this._selectedTilesToStyle = [];\n this._loadTimestamp = undefined;\n this._timeSinceLoad = 0.0;\n this._updatedVisibilityFrame = 0;\n this._updatedModelMatrixFrame = 0;\n this._modelMatrixChanged = false;\n this._previousModelMatrix = undefined;\n this._extras = undefined;\n this._credits = undefined;\n\n this._cullWithChildrenBounds = defaultValue(\n options.cullWithChildrenBounds,\n true\n );\n this._allTilesAdditive = true;\n\n this._hasMixedContent = false;\n\n this._stencilClearCommand = undefined;\n this._backfaceCommands = new ManagedArray();\n\n this._maximumScreenSpaceError = defaultValue(\n options.maximumScreenSpaceError,\n 16\n );\n this._maximumMemoryUsage = defaultValue(options.maximumMemoryUsage, 512);\n\n this._styleEngine = new Cesium3DTileStyleEngine();\n\n this._modelMatrix = defined(options.modelMatrix)\n ? Matrix4.clone(options.modelMatrix)\n : Matrix4.clone(Matrix4.IDENTITY);\n\n this._statistics = new Cesium3DTilesetStatistics();\n this._statisticsLast = new Cesium3DTilesetStatistics();\n this._statisticsPerPass = new Array(Cesium3DTilePass.NUMBER_OF_PASSES);\n\n for (var i = 0; i < Cesium3DTilePass.NUMBER_OF_PASSES; ++i) {\n this._statisticsPerPass[i] = new Cesium3DTilesetStatistics();\n }\n\n this._requestedTilesInFlight = [];\n\n this._maximumPriority = {\n foveatedFactor: -Number.MAX_VALUE,\n depth: -Number.MAX_VALUE,\n distance: -Number.MAX_VALUE,\n reverseScreenSpaceError: -Number.MAX_VALUE,\n };\n this._minimumPriority = {\n foveatedFactor: Number.MAX_VALUE,\n depth: Number.MAX_VALUE,\n distance: Number.MAX_VALUE,\n reverseScreenSpaceError: Number.MAX_VALUE,\n };\n this._heatmap = new Cesium3DTilesetHeatmap(\n options.debugHeatmapTilePropertyName\n );\n\n /**\n * Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets.\n *\n * @type {Boolean}\n * @default true\n */\n this.cullRequestsWhileMoving = defaultValue(\n options.cullRequestsWhileMoving,\n true\n );\n this._cullRequestsWhileMoving = false;\n\n /**\n * Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling.\n *\n * @type {Number}\n * @default 60.0\n */\n this.cullRequestsWhileMovingMultiplier = defaultValue(\n options.cullRequestsWhileMovingMultiplier,\n 60.0\n );\n\n /**\n * Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of <code>progressiveResolutionHeightFraction*screenHeight</code> will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load.\n *\n * @type {Number}\n * @default 0.3\n */\n this.progressiveResolutionHeightFraction = CesiumMath.clamp(\n defaultValue(options.progressiveResolutionHeightFraction, 0.3),\n 0.0,\n 0.5\n );\n\n /**\n * Optimization option. Prefer loading of leaves first.\n *\n * @type {Boolean}\n * @default false\n */\n this.preferLeaves = defaultValue(options.preferLeaves, false);\n\n this._tilesLoaded = false;\n this._initialTilesLoaded = false;\n\n this._tileDebugLabels = undefined;\n\n this._readyPromise = when.defer();\n\n this._classificationType = options.classificationType;\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n this._initialClippingPlanesOriginMatrix = Matrix4.IDENTITY; // Computed from the tileset JSON.\n this._clippingPlanesOriginMatrix = undefined; // Combines the above with any run-time transforms.\n this._clippingPlanesOriginMatrixDirty = true;\n\n /**\n * Preload tiles when <code>tileset.show</code> is <code>false</code>. Loads tiles as if the tileset is visible but does not render them.\n *\n * @type {Boolean}\n * @default false\n */\n this.preloadWhenHidden = defaultValue(options.preloadWhenHidden, false);\n\n /**\n * Optimization option. Fetch tiles at the camera's flight destination while the camera is in flight.\n *\n * @type {Boolean}\n * @default true\n */\n this.preloadFlightDestinations = defaultValue(\n options.preloadFlightDestinations,\n true\n );\n this._pass = undefined; // Cesium3DTilePass\n\n /**\n * Optimization option. Whether the tileset should refine based on a dynamic screen space error. Tiles that are further\n * away will be rendered with lower detail than closer tiles. This improves performance by rendering fewer\n * tiles and making less requests, but may result in a slight drop in visual quality for tiles in the distance.\n * The algorithm is biased towards \"street views\" where the camera is close to the ground plane of the tileset and looking\n * at the horizon. In addition results are more accurate for tightly fitting bounding volumes like box and region.\n *\n * @type {Boolean}\n * @default false\n */\n this.dynamicScreenSpaceError = defaultValue(\n options.dynamicScreenSpaceError,\n false\n );\n\n /**\n * Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the\n * screen space error for tiles around the edge of the screen. Screen space error returns to normal once all\n * the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded.\n *\n * @type {Boolean}\n * @default true\n */\n this.foveatedScreenSpaceError = defaultValue(\n options.foveatedScreenSpaceError,\n true\n );\n this._foveatedConeSize = defaultValue(options.foveatedConeSize, 0.1);\n this._foveatedMinimumScreenSpaceErrorRelaxation = defaultValue(\n options.foveatedMinimumScreenSpaceErrorRelaxation,\n 0.0\n );\n\n /**\n * Gets or sets a callback to control how much to raise the screen space error for tiles outside the foveated cone,\n * interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}.\n *\n * @type {Cesium3DTileset.foveatedInterpolationCallback}\n */\n this.foveatedInterpolationCallback = defaultValue(\n options.foveatedInterpolationCallback,\n CesiumMath.lerp\n );\n\n /**\n * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control\n * how long in seconds to wait after the camera stops moving before deferred tiles start loading in.\n * This time delay prevents requesting tiles around the edges of the screen when the camera is moving.\n * Setting this to 0.0 will immediately request all tiles in any given view.\n *\n * @type {Number}\n * @default 0.2\n */\n this.foveatedTimeDelay = defaultValue(options.foveatedTimeDelay, 0.2);\n\n /**\n * A scalar that determines the density used to adjust the dynamic screen space error, similar to {@link Fog}. Increasing this\n * value has the effect of increasing the maximum screen space error for all tiles, but in a non-linear fashion.\n * The error starts at 0.0 and increases exponentially until a midpoint is reached, and then approaches 1.0 asymptotically.\n * This has the effect of keeping high detail in the closer tiles and lower detail in the further tiles, with all tiles\n * beyond a certain distance all roughly having an error of 1.0.\n * <p>\n * The dynamic error is in the range [0.0, 1.0) and is multiplied by <code>dynamicScreenSpaceErrorFactor</code> to produce the\n * final dynamic error. This dynamic error is then subtracted from the tile's actual screen space error.\n * </p>\n * <p>\n * Increasing <code>dynamicScreenSpaceErrorDensity</code> has the effect of moving the error midpoint closer to the camera.\n * It is analogous to moving fog closer to the camera.\n * </p>\n *\n * @type {Number}\n * @default 0.00278\n */\n this.dynamicScreenSpaceErrorDensity = 0.00278;\n\n /**\n * A factor used to increase the screen space error of tiles for dynamic screen space error. As this value increases less tiles\n * are requested for rendering and tiles in the distance will have lower detail. If set to zero, the feature will be disabled.\n *\n * @type {Number}\n * @default 4.0\n */\n this.dynamicScreenSpaceErrorFactor = 4.0;\n\n /**\n * A ratio of the tileset's height at which the density starts to falloff. If the camera is below this height the\n * full computed density is applied, otherwise the density falls off. This has the effect of higher density at\n * street level views.\n * <p>\n * Valid values are between 0.0 and 1.0.\n * </p>\n *\n * @type {Number}\n * @default 0.25\n */\n this.dynamicScreenSpaceErrorHeightFalloff = 0.25;\n\n this._dynamicScreenSpaceErrorComputedDensity = 0.0; // Updated based on the camera position and direction\n\n /**\n * Determines whether the tileset casts or receives shadows from light sources.\n * <p>\n * Enabling shadows has a performance impact. A tileset that casts shadows must be rendered twice, once from the camera and again from the light's point of view.\n * </p>\n * <p>\n * Shadows are rendered only when {@link Viewer#shadows} is <code>true</code>.\n * </p>\n *\n * @type {ShadowMode}\n * @default ShadowMode.ENABLED\n */\n this.shadows = defaultValue(options.shadows, ShadowMode.ENABLED);\n\n /**\n * Determines if the tileset will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from\n * the original feature, e.g. glTF material or per-point color in the tile.\n *\n * @type {Cesium3DTileColorBlendMode}\n * @default Cesium3DTileColorBlendMode.HIGHLIGHT\n */\n this.colorBlendMode = Cesium3DTileColorBlendMode.HIGHLIGHT;\n\n /**\n * Defines the value used to linearly interpolate between the source color and feature color when the {@link Cesium3DTileset#colorBlendMode} is <code>MIX</code>.\n * A value of 0.0 results in the source color while a value of 1.0 results in the feature color, with any value in-between\n * resulting in a mix of the source color and feature color.\n *\n * @type {Number}\n * @default 0.5\n */\n this.colorBlendAmount = 0.5;\n\n /**\n * Options for controlling point size based on geometric error and eye dome lighting.\n * @type {PointCloudShading}\n */\n this.pointCloudShading = new PointCloudShading(options.pointCloudShading);\n\n this._pointCloudEyeDomeLighting = new PointCloudEyeDomeLighting();\n\n /**\n * The event fired to indicate progress of loading new tiles. This event is fired when a new tile\n * is requested, when a requested tile is finished downloading, and when a downloaded tile has been\n * processed and is ready to render.\n * <p>\n * The number of pending tile requests, <code>numberOfPendingRequests</code>, and number of tiles\n * processing, <code>numberOfTilesProcessing</code> are passed to the event listener.\n * </p>\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.loadProgress.addEventListener(function(numberOfPendingRequests, numberOfTilesProcessing) {\n * if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) {\n * console.log('Stopped loading');\n * return;\n * }\n *\n * console.log('Loading: requests: ' + numberOfPendingRequests + ', processing: ' + numberOfTilesProcessing);\n * });\n */\n this.loadProgress = new Event();\n\n /**\n * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. The tileset\n * is completely loaded for this view.\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.allTilesLoaded.addEventListener(function() {\n * console.log('All tiles are loaded');\n * });\n *\n * @see Cesium3DTileset#tilesLoaded\n */\n this.allTilesLoaded = new Event();\n\n /**\n * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. This event\n * is fired once when all tiles in the initial view are loaded.\n * <p>\n * This event is fired at the end of the frame after the scene is rendered.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.initialTilesLoaded.addEventListener(function() {\n * console.log('Initial tiles are loaded');\n * });\n *\n * @see Cesium3DTileset#allTilesLoaded\n */\n this.initialTilesLoaded = new Event();\n\n /**\n * The event fired to indicate that a tile's content was loaded.\n * <p>\n * The loaded {@link Cesium3DTile} is passed to the event listener.\n * </p>\n * <p>\n * This event is fired during the tileset traversal while the frame is being rendered\n * so that updates to the tile take effect in the same frame. Do not create or modify\n * Cesium entities or primitives during the event listener.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.tileLoad.addEventListener(function(tile) {\n * console.log('A tile was loaded.');\n * });\n */\n this.tileLoad = new Event();\n\n /**\n * The event fired to indicate that a tile's content was unloaded.\n * <p>\n * The unloaded {@link Cesium3DTile} is passed to the event listener.\n * </p>\n * <p>\n * This event is fired immediately before the tile's content is unloaded while the frame is being\n * rendered so that the event listener has access to the tile's content. Do not create\n * or modify Cesium entities or primitives during the event listener.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.tileUnload.addEventListener(function(tile) {\n * console.log('A tile was unloaded from the cache.');\n * });\n *\n * @see Cesium3DTileset#maximumMemoryUsage\n * @see Cesium3DTileset#trimLoadedTiles\n */\n this.tileUnload = new Event();\n\n /**\n * The event fired to indicate that a tile's content failed to load.\n * <p>\n * If there are no event listeners, error messages will be logged to the console.\n * </p>\n * <p>\n * The error object passed to the listener contains two properties:\n * <ul>\n * <li><code>url</code>: the url of the failed tile.</li>\n * <li><code>message</code>: the error message.</li>\n * </ul>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.tileFailed.addEventListener(function(error) {\n * console.log('An error occurred loading tile: ' + error.url);\n * console.log('Error: ' + error.message);\n * });\n */\n this.tileFailed = new Event();\n\n /**\n * This event fires once for each visible tile in a frame. This can be used to manually\n * style a tileset.\n * <p>\n * The visible {@link Cesium3DTile} is passed to the event listener.\n * </p>\n * <p>\n * This event is fired during the tileset traversal while the frame is being rendered\n * so that updates to the tile take effect in the same frame. Do not create or modify\n * Cesium entities or primitives during the event listener.\n * </p>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * tileset.tileVisible.addEventListener(function(tile) {\n * if (tile.content instanceof Cesium.Batched3DModel3DTileContent) {\n * console.log('A Batched 3D Model tile is visible.');\n * }\n * });\n *\n * @example\n * // Apply a red style and then manually set random colors for every other feature when the tile becomes visible.\n * tileset.style = new Cesium.Cesium3DTileStyle({\n * color : 'color(\"red\")'\n * });\n * tileset.tileVisible.addEventListener(function(tile) {\n * var content = tile.content;\n * var featuresLength = content.featuresLength;\n * for (var i = 0; i < featuresLength; i+=2) {\n * content.getFeature(i).color = Cesium.Color.fromRandom();\n * }\n * });\n */\n this.tileVisible = new Event();\n\n /**\n * Optimization option. Determines if level of detail skipping should be applied during the traversal.\n * <p>\n * The common strategy for replacement-refinement traversal is to store all levels of the tree in memory and require\n * all children to be loaded before the parent can refine. With this optimization levels of the tree can be skipped\n * entirely and children can be rendered alongside their parents. The tileset requires significantly less memory when\n * using this optimization.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.skipLevelOfDetail = defaultValue(options.skipLevelOfDetail, false);\n this._skipLevelOfDetail = this.skipLevelOfDetail;\n this._disableSkipLevelOfDetail = false;\n\n /**\n * The screen space error that must be reached before skipping levels of detail.\n * <p>\n * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n * </p>\n *\n * @type {Number}\n * @default 1024\n */\n this.baseScreenSpaceError = defaultValue(options.baseScreenSpaceError, 1024);\n\n /**\n * Multiplier defining the minimum screen space error to skip.\n * For example, if a tile has screen space error of 100, no tiles will be loaded unless they\n * are leaves or have a screen space error <code><= 100 / skipScreenSpaceErrorFactor</code>.\n * <p>\n * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n * </p>\n *\n * @type {Number}\n * @default 16\n */\n this.skipScreenSpaceErrorFactor = defaultValue(\n options.skipScreenSpaceErrorFactor,\n 16\n );\n\n /**\n * Constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped.\n * For example, if a tile is level 1, no tiles will be loaded unless they are at level greater than 2.\n * <p>\n * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n * </p>\n *\n * @type {Number}\n * @default 1\n */\n this.skipLevels = defaultValue(options.skipLevels, 1);\n\n /**\n * When true, only tiles that meet the maximum screen space error will ever be downloaded.\n * Skipping factors are ignored and just the desired tiles are loaded.\n * <p>\n * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.immediatelyLoadDesiredLevelOfDetail = defaultValue(\n options.immediatelyLoadDesiredLevelOfDetail,\n false\n );\n\n /**\n * Determines whether siblings of visible tiles are always downloaded during traversal.\n * This may be useful for ensuring that tiles are already available when the viewer turns left/right.\n * <p>\n * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.loadSiblings = defaultValue(options.loadSiblings, false);\n\n this._clippingPlanes = undefined;\n this.clippingPlanes = options.clippingPlanes;\n\n this._imageBasedLightingFactor = new Cartesian2(1.0, 1.0);\n Cartesian2.clone(\n options.imageBasedLightingFactor,\n this._imageBasedLightingFactor\n );\n\n /**\n * The light color when shading models. When <code>undefined</code> the scene's light color is used instead.\n * <p>\n * For example, disabling additional light sources by setting <code>model.imageBasedLightingFactor = new Cartesian2(0.0, 0.0)</code> will make the\n * model much darker. Here, increasing the intensity of the light source will make the model brighter.\n * </p>\n *\n * @type {Cartesian3}\n * @default undefined\n */\n this.lightColor = options.lightColor;\n\n /**\n * The sun's luminance at the zenith in kilo candela per meter squared to use for this model's procedural environment map.\n * This is used when {@link Cesium3DTileset#specularEnvironmentMaps} and {@link Cesium3DTileset#sphericalHarmonicCoefficients} are not defined.\n *\n * @type Number\n *\n * @default 0.2\n *\n */\n this.luminanceAtZenith = defaultValue(options.luminanceAtZenith, 0.2);\n\n /**\n * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. When <code>undefined</code>, a diffuse irradiance\n * computed from the atmosphere color is used.\n * <p>\n * There are nine <code>Cartesian3</code> coefficients.\n * The order of the coefficients is: L<sub>00</sub>, L<sub>1-1</sub>, L<sub>10</sub>, L<sub>11</sub>, L<sub>2-2</sub>, L<sub>2-1</sub>, L<sub>20</sub>, L<sub>21</sub>, L<sub>22</sub>\n * </p>\n *\n * These values can be obtained by preprocessing the environment map using the <code>cmgen</code> tool of\n * {@link https://github.com/google/filament/releases|Google's Filament project}. This will also generate a KTX file that can be\n * supplied to {@link Cesium3DTileset#specularEnvironmentMaps}.\n *\n * @type {Cartesian3[]}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Image-Based Lighting.html|Sandcastle Image Based Lighting Demo}\n * @see {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf|An Efficient Representation for Irradiance Environment Maps}\n */\n this.sphericalHarmonicCoefficients = options.sphericalHarmonicCoefficients;\n\n /**\n * A URL to a KTX file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Image-Based Lighting.html|Sandcastle Image Based Lighting Demo}\n * @type {String}\n * @see Cesium3DTileset#sphericalHarmonicCoefficients\n */\n this.specularEnvironmentMaps = options.specularEnvironmentMaps;\n\n /**\n * Whether to cull back-facing geometry. When true, back face culling is determined\n * by the glTF material's doubleSided property; when false, back face culling is disabled.\n *\n * @type {Boolean}\n * @default true\n */\n this.backFaceCulling = defaultValue(options.backFaceCulling, true);\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * Determines if only the tiles from last frame should be used for rendering. This\n * effectively \"freezes\" the tileset to the previous frame so it is possible to zoom\n * out and see what was rendered.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugFreezeFrame = defaultValue(options.debugFreezeFrame, false);\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, assigns a random color to each tile. This is useful for visualizing\n * what features belong to what tiles, especially with additive refinement where features\n * from parent tiles may be interleaved with features from child tiles.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugColorizeTiles = defaultValue(options.debugColorizeTiles, false);\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, renders each tile's content as a wireframe.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugWireframe = defaultValue(options.debugWireframe, false);\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, renders the bounding volume for each visible tile. The bounding volume is\n * white if the tile has a content bounding volume or is empty; otherwise, it is red. Tiles that don't meet the\n * screen space error and are still refining to their descendants are yellow.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, renders the bounding volume for each visible tile's content. The bounding volume is\n * blue if the tile has a content bounding volume; otherwise it is red.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowContentBoundingVolume = defaultValue(\n options.debugShowContentBoundingVolume,\n false\n );\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, renders the viewer request volume for each tile.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowViewerRequestVolume = defaultValue(\n options.debugShowViewerRequestVolume,\n false\n );\n\n this._tileDebugLabels = undefined;\n this.debugPickedTileLabelOnly = false;\n this.debugPickedTile = undefined;\n this.debugPickPosition = undefined;\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, draws labels to indicate the geometric error of each tile.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowGeometricError = defaultValue(\n options.debugShowGeometricError,\n false\n );\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, draws labels to indicate the number of commands, points, triangles and features of each tile.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowRenderingStatistics = defaultValue(\n options.debugShowRenderingStatistics,\n false\n );\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, draws labels to indicate the geometry and texture memory usage of each tile.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowMemoryUsage = defaultValue(options.debugShowMemoryUsage, false);\n\n /**\n * This property is for debugging only; it is not optimized for production use.\n * <p>\n * When true, draws labels to indicate the url of each tile.\n * </p>\n *\n * @type {Boolean}\n * @default false\n */\n this.debugShowUrl = defaultValue(options.debugShowUrl, false);\n\n var that = this;\n var resource;\n when(options.url)\n .then(function (url) {\n var basePath;\n resource = Resource.createIfNeeded(url);\n\n // ion resources have a credits property we can use for additional attribution.\n that._credits = resource.credits;\n\n if (resource.extension === \"json\") {\n basePath = resource.getBaseUri(true);\n } else if (resource.isDataUri) {\n basePath = \"\";\n }\n\n that._url = resource.url;\n that._basePath = basePath;\n\n return Cesium3DTileset.loadJson(resource);\n })\n .then(function (tilesetJson) {\n that._root = that.loadTileset(resource, tilesetJson);\n var gltfUpAxis = defined(tilesetJson.asset.gltfUpAxis)\n ? Axis.fromName(tilesetJson.asset.gltfUpAxis)\n : Axis.Y;\n var asset = tilesetJson.asset;\n that._asset = asset;\n that._properties = tilesetJson.properties;\n that._geometricError = tilesetJson.geometricError;\n that._extensionsUsed = tilesetJson.extensionsUsed;\n that._extensions = tilesetJson.extensions;\n that._gltfUpAxis = gltfUpAxis;\n that._extras = tilesetJson.extras;\n\n var extras = asset.extras;\n if (\n defined(extras) &&\n defined(extras.cesium) &&\n defined(extras.cesium.credits)\n ) {\n var extraCredits = extras.cesium.credits;\n var credits = that._credits;\n if (!defined(credits)) {\n credits = [];\n that._credits = credits;\n }\n for (var i = 0; i < extraCredits.length; ++i) {\n var credit = extraCredits[i];\n credits.push(new Credit(credit.html, credit.showOnScreen));\n }\n }\n\n // Save the original, untransformed bounding volume position so we can apply\n // the tile transform and model matrix at run time\n var boundingVolume = that._root.createBoundingVolume(\n tilesetJson.root.boundingVolume,\n Matrix4.IDENTITY\n );\n var clippingPlanesOrigin = boundingVolume.boundingSphere.center;\n // If this origin is above the surface of the earth\n // we want to apply an ENU orientation as our best guess of orientation.\n // Otherwise, we assume it gets its position/orientation completely from the\n // root tile transform and the tileset's model matrix\n var originCartographic = that._ellipsoid.cartesianToCartographic(\n clippingPlanesOrigin\n );\n if (\n defined(originCartographic) &&\n originCartographic.height >\n ApproximateTerrainHeights._defaultMinTerrainHeight\n ) {\n that._initialClippingPlanesOriginMatrix = Transforms.eastNorthUpToFixedFrame(\n clippingPlanesOrigin\n );\n }\n that._clippingPlanesOriginMatrix = Matrix4.clone(\n that._initialClippingPlanesOriginMatrix\n );\n that._readyPromise.resolve(that);\n })\n .otherwise(function (error) {\n that._readyPromise.reject(error);\n });\n}\n\nObject.defineProperties(Cesium3DTileset.prototype, {\n /**\n * NOTE: This getter exists so that `Picking.js` can differentiate between\n * PrimitiveCollection and Cesium3DTileset objects without inflating\n * the size of the module via `instanceof Cesium3DTileset`\n * @private\n */\n isCesium3DTileset: {\n get: function () {\n return true;\n },\n },\n\n /**\n * Gets the tileset's asset object property, which contains metadata about the tileset.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#reference-asset|asset schema reference}\n * in the 3D Tiles spec for the full set of properties.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n */\n asset: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._asset;\n },\n },\n\n /**\n * Gets the tileset's extensions object property.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n */\n extensions: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._extensions;\n },\n },\n\n /**\n * The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {ClippingPlaneCollection}\n */\n clippingPlanes: {\n get: function () {\n return this._clippingPlanes;\n },\n set: function (value) {\n ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n },\n },\n\n /**\n * Gets the tileset's properties dictionary object, which contains metadata about per-feature properties.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#reference-properties|properties schema reference}\n * in the 3D Tiles spec for the full set of properties.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n *\n * @example\n * console.log('Maximum building height: ' + tileset.properties.height.maximum);\n * console.log('Minimum building height: ' + tileset.properties.height.minimum);\n *\n * @see Cesium3DTileFeature#getProperty\n * @see Cesium3DTileFeature#setProperty\n */\n properties: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._properties;\n },\n },\n\n /**\n * When <code>true</code>, the tileset's root tile is loaded and the tileset is ready to render.\n * This is set to <code>true</code> right before {@link Cesium3DTileset#readyPromise} is resolved.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n ready: {\n get: function () {\n return defined(this._root);\n },\n },\n\n /**\n * Gets the promise that will be resolved when the tileset's root tile is loaded and the tileset is ready to render.\n * <p>\n * This promise is resolved at the end of the frame before the first frame the tileset is rendered in.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Promise.<Cesium3DTileset>}\n * @readonly\n *\n * @example\n * tileset.readyPromise.then(function(tileset) {\n * // tile.properties is not defined until readyPromise resolves.\n * var properties = tileset.properties;\n * if (Cesium.defined(properties)) {\n * for (var name in properties) {\n * console.log(properties[name]);\n * }\n * }\n * });\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * When <code>true</code>, all tiles that meet the screen space error this frame are loaded. The tileset is\n * completely loaded for this view.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n *\n * @see Cesium3DTileset#allTilesLoaded\n */\n tilesLoaded: {\n get: function () {\n return this._tilesLoaded;\n },\n },\n\n /**\n * The url to a tileset JSON file.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._url;\n },\n },\n\n /**\n * The base path that non-absolute paths in tileset JSON file are relative to.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {String}\n * @readonly\n * @deprecated\n */\n basePath: {\n get: function () {\n deprecationWarning(\n \"Cesium3DTileset.basePath\",\n \"Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead.\"\n );\n return this._basePath;\n },\n },\n\n /**\n * The style, defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language},\n * applied to each feature in the tileset.\n * <p>\n * Assign <code>undefined</code> to remove the style, which will restore the visual\n * appearance of the tileset to its default when no style was applied.\n * </p>\n * <p>\n * The style is applied to a tile before the {@link Cesium3DTileset#tileVisible}\n * event is raised, so code in <code>tileVisible</code> can manually set a feature's\n * properties (e.g. color and show) after the style is applied. When\n * a new style is assigned any manually set properties are overwritten.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Cesium3DTileStyle|undefined}\n *\n * @default undefined\n *\n * @example\n * tileset.style = new Cesium.Cesium3DTileStyle({\n * color : {\n * conditions : [\n * ['${Height} >= 100', 'color(\"purple\", 0.5)'],\n * ['${Height} >= 50', 'color(\"red\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * },\n * show : '${Height} > 0',\n * meta : {\n * description : '\"Building id ${id} has height ${Height}.\"'\n * }\n * });\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n */\n style: {\n get: function () {\n return this._styleEngine.style;\n },\n set: function (value) {\n this._styleEngine.style = value;\n },\n },\n\n /**\n * The maximum screen space error used to drive level of detail refinement. This value helps determine when a tile\n * refines to its descendants, and therefore plays a major role in balancing performance with visual quality.\n * <p>\n * A tile's screen space error is roughly equivalent to the number of pixels wide that would be drawn if a sphere with a\n * radius equal to the tile's <b>geometric error</b> were rendered at the tile's position. If this value exceeds\n * <code>maximumScreenSpaceError</code> the tile refines to its descendants.\n * </p>\n * <p>\n * Depending on the tileset, <code>maximumScreenSpaceError</code> may need to be tweaked to achieve the right balance.\n * Higher values provide better performance but lower visual quality.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @default 16\n *\n * @exception {DeveloperError} <code>maximumScreenSpaceError</code> must be greater than or equal to zero.\n */\n maximumScreenSpaceError: {\n get: function () {\n return this._maximumScreenSpaceError;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\n \"maximumScreenSpaceError\",\n value,\n 0\n );\n //>>includeEnd('debug');\n\n this._maximumScreenSpaceError = value;\n },\n },\n\n /**\n * The maximum amount of GPU memory (in MB) that may be used to cache tiles. This value is estimated from\n * geometry, textures, and batch table textures of loaded tiles. For point clouds, this value also\n * includes per-point metadata.\n * <p>\n * Tiles not in view are unloaded to enforce this.\n * </p>\n * <p>\n * If decreasing this value results in unloading tiles, the tiles are unloaded the next frame.\n * </p>\n * <p>\n * If tiles sized more than <code>maximumMemoryUsage</code> are needed\n * to meet the desired screen space error, determined by {@link Cesium3DTileset#maximumScreenSpaceError},\n * for the current view, then the memory usage of the tiles loaded will exceed\n * <code>maximumMemoryUsage</code>. For example, if the maximum is 256 MB, but\n * 300 MB of tiles are needed to meet the screen space error, then 300 MB of tiles may be loaded. When\n * these tiles go out of view, they will be unloaded.\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @default 512\n *\n * @exception {DeveloperError} <code>maximumMemoryUsage</code> must be greater than or equal to zero.\n * @see Cesium3DTileset#totalMemoryUsageInBytes\n */\n maximumMemoryUsage: {\n get: function () {\n return this._maximumMemoryUsage;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0);\n //>>includeEnd('debug');\n\n this._maximumMemoryUsage = value;\n },\n },\n\n /**\n * The root tile.\n *\n * @memberOf Cesium3DTileset.prototype\n *\n * @type {Cesium3DTile}\n * @readonly\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n */\n root: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._root;\n },\n },\n\n /**\n * The tileset's bounding sphere.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n *\n * @example\n * var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({\n * url : 'http://localhost:8002/tilesets/Seattle/tileset.json'\n * }));\n *\n * tileset.readyPromise.then(function(tileset) {\n * // Set the camera to view the newly added tileset\n * viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));\n * });\n */\n boundingSphere: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n this._root.updateTransform(this._modelMatrix);\n return this._root.boundingSphere;\n },\n },\n\n /**\n * A 4x4 transformation matrix that transforms the entire tileset.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Matrix4}\n * @default Matrix4.IDENTITY\n *\n * @example\n * // Adjust a tileset's height from the globe's surface.\n * var heightOffset = 20.0;\n * var boundingSphere = tileset.boundingSphere;\n * var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);\n * var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);\n * var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);\n * var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());\n * tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);\n */\n modelMatrix: {\n get: function () {\n return this._modelMatrix;\n },\n set: function (value) {\n this._modelMatrix = Matrix4.clone(value, this._modelMatrix);\n },\n },\n\n /**\n * Returns the time, in milliseconds, since the tileset was loaded and first updated.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @readonly\n */\n timeSinceLoad: {\n get: function () {\n return this._timeSinceLoad;\n },\n },\n\n /**\n * The total amount of GPU memory in bytes used by the tileset. This value is estimated from\n * geometry, texture, and batch table textures of loaded tiles. For point clouds, this value also\n * includes per-point metadata.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see Cesium3DTileset#maximumMemoryUsage\n */\n totalMemoryUsageInBytes: {\n get: function () {\n var statistics = this._statistics;\n return (\n statistics.texturesByteLength +\n statistics.geometryByteLength +\n statistics.batchTableByteLength\n );\n },\n },\n\n /**\n * @private\n */\n clippingPlanesOriginMatrix: {\n get: function () {\n if (!defined(this._clippingPlanesOriginMatrix)) {\n return Matrix4.IDENTITY;\n }\n\n if (this._clippingPlanesOriginMatrixDirty) {\n Matrix4.multiply(\n this.root.computedTransform,\n this._initialClippingPlanesOriginMatrix,\n this._clippingPlanesOriginMatrix\n );\n this._clippingPlanesOriginMatrixDirty = false;\n }\n\n return this._clippingPlanesOriginMatrix;\n },\n },\n\n /**\n * @private\n */\n styleEngine: {\n get: function () {\n return this._styleEngine;\n },\n },\n\n /**\n * @private\n */\n statistics: {\n get: function () {\n return this._statistics;\n },\n },\n\n /**\n * Determines whether terrain, 3D Tiles or both will be classified by this tileset.\n * <p>\n * This option is only applied to tilesets containing batched 3D models, geometry data, or vector data. Even when undefined, vector data and geometry data\n * must render as classifications and will default to rendering on both terrain and other 3D Tiles tilesets.\n * </p>\n * <p>\n * When enabled for batched 3D model tilesets, there are a few requirements/limitations on the glTF:\n * <ul>\n * <li>POSITION and _BATCHID semantics are required.</li>\n * <li>All indices with the same batch id must occupy contiguous sections of the index buffer.</li>\n * <li>All shaders and techniques are ignored. The generated shader simply multiplies the position by the model-view-projection matrix.</li>\n * <li>The only supported extensions are CESIUM_RTC and WEB3D_quantized_attributes.</li>\n * <li>Only one node is supported.</li>\n * <li>Only one mesh per node is supported.</li>\n * <li>Only one primitive per mesh is supported.</li>\n * </ul>\n * </p>\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {ClassificationType}\n * @default undefined\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n * @readonly\n */\n classificationType: {\n get: function () {\n return this._classificationType;\n },\n },\n\n /**\n * Gets an ellipsoid describing the shape of the globe.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n\n /**\n * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred.\n * Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}.\n * Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, essentially disabling the effect.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @default 0.3\n */\n foveatedConeSize: {\n get: function () {\n return this._foveatedConeSize;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"foveatedConeSize\", value, 0.0);\n Check.typeOf.number.lessThanOrEquals(\"foveatedConeSize\", value, 1.0);\n //>>includeEnd('debug');\n\n this._foveatedConeSize = value;\n },\n },\n\n /**\n * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone.\n * The screen space error will be raised starting with this value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Number}\n * @default 0.0\n */\n foveatedMinimumScreenSpaceErrorRelaxation: {\n get: function () {\n return this._foveatedMinimumScreenSpaceErrorRelaxation;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\n \"foveatedMinimumScreenSpaceErrorRelaxation\",\n value,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"foveatedMinimumScreenSpaceErrorRelaxation\",\n value,\n this.maximumScreenSpaceError\n );\n //>>includeEnd('debug');\n\n this._foveatedMinimumScreenSpaceErrorRelaxation = value;\n },\n },\n\n /**\n * Returns the <code>extras</code> property at the top-level of the tileset JSON, which contains application specific metadata.\n * Returns <code>undefined</code> if <code>extras</code> does not exist.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @exception {DeveloperError} The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\n *\n * @type {*}\n * @readonly\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification#specifying-extensions-and-application-specific-extras|Extras in the 3D Tiles specification.}\n */\n extras: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"The tileset is not loaded. Use Cesium3DTileset.readyPromise or wait for Cesium3DTileset.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._extras;\n },\n },\n\n /**\n * Cesium adds lighting from the earth, sky, atmosphere, and star skybox. This cartesian is used to scale the final\n * diffuse and specular lighting contribution from those sources to the final color. A value of 0.0 will disable those light sources.\n *\n * @memberof Cesium3DTileset.prototype\n *\n * @type {Cartesian2}\n * @default Cartesian2(1.0, 1.0)\n */\n imageBasedLightingFactor: {\n get: function () {\n return this._imageBasedLightingFactor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"imageBasedLightingFactor\", value);\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.x\",\n value.x,\n 1.0\n );\n Check.typeOf.number.greaterThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 0.0\n );\n Check.typeOf.number.lessThanOrEquals(\n \"imageBasedLightingFactor.y\",\n value.y,\n 1.0\n );\n //>>includeEnd('debug');\n Cartesian2.clone(value, this._imageBasedLightingFactor);\n },\n },\n});\n\n/**\n * Provides a hook to override the method used to request the tileset json\n * useful when fetching tilesets from remote servers\n * @param {Resource|String} tilesetUrl The url of the json file to be fetched\n * @returns {Promise.<Object>} A promise that resolves with the fetched json data\n */\nCesium3DTileset.loadJson = function (tilesetUrl) {\n var resource = Resource.createIfNeeded(tilesetUrl);\n return resource.fetchJson();\n};\n\n/**\n * Marks the tileset's {@link Cesium3DTileset#style} as dirty, which forces all\n * features to re-evaluate the style in the next frame each is visible.\n */\nCesium3DTileset.prototype.makeStyleDirty = function () {\n this._styleEngine.makeDirty();\n};\n\n/**\n * Loads the main tileset JSON file or a tileset JSON file referenced from a tile.\n *\n * @private\n */\nCesium3DTileset.prototype.loadTileset = function (\n resource,\n tilesetJson,\n parentTile\n) {\n var asset = tilesetJson.asset;\n if (!defined(asset)) {\n throw new RuntimeError(\"Tileset must have an asset property.\");\n }\n if (asset.version !== \"0.0\" && asset.version !== \"1.0\") {\n throw new RuntimeError(\"The tileset must be 3D Tiles version 0.0 or 1.0.\");\n }\n\n var statistics = this._statistics;\n\n var tilesetVersion = asset.tilesetVersion;\n if (defined(tilesetVersion)) {\n // Append the tileset version to the resource\n this._basePath += \"?v=\" + tilesetVersion;\n resource.setQueryParameters({ v: tilesetVersion });\n }\n\n // A tileset JSON file referenced from a tile may exist in a different directory than the root tileset.\n // Get the basePath relative to the external tileset.\n var rootTile = new Cesium3DTile(this, resource, tilesetJson.root, parentTile);\n\n // If there is a parentTile, add the root of the currently loading tileset\n // to parentTile's children, and update its _depth.\n if (defined(parentTile)) {\n parentTile.children.push(rootTile);\n rootTile._depth = parentTile._depth + 1;\n }\n\n var stack = [];\n stack.push(rootTile);\n\n while (stack.length > 0) {\n var tile = stack.pop();\n ++statistics.numberOfTilesTotal;\n this._allTilesAdditive =\n this._allTilesAdditive && tile.refine === Cesium3DTileRefine.ADD;\n var children = tile._header.children;\n if (defined(children)) {\n var length = children.length;\n for (var i = 0; i < length; ++i) {\n var childHeader = children[i];\n var childTile = new Cesium3DTile(this, resource, childHeader, tile);\n tile.children.push(childTile);\n childTile._depth = tile._depth + 1;\n stack.push(childTile);\n }\n }\n\n if (this._cullWithChildrenBounds) {\n Cesium3DTileOptimizations.checkChildrenWithinParent(tile);\n }\n }\n\n return rootTile;\n};\n\nvar scratchPositionNormal = new Cartesian3();\nvar scratchCartographic = new Cartographic();\nvar scratchMatrix = new Matrix4();\nvar scratchCenter = new Cartesian3();\nvar scratchPosition = new Cartesian3();\nvar scratchDirection = new Cartesian3();\n\nfunction updateDynamicScreenSpaceError(tileset, frameState) {\n var up;\n var direction;\n var height;\n var minimumHeight;\n var maximumHeight;\n\n var camera = frameState.camera;\n var root = tileset._root;\n var tileBoundingVolume = root.contentBoundingVolume;\n\n if (tileBoundingVolume instanceof TileBoundingRegion) {\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = tileBoundingVolume.minimumHeight;\n maximumHeight = tileBoundingVolume.maximumHeight;\n } else {\n // Transform camera position and direction into the local coordinate system of the tileset\n var transformLocal = Matrix4.inverseTransformation(\n root.computedTransform,\n scratchMatrix\n );\n var ellipsoid = frameState.mapProjection.ellipsoid;\n var boundingVolume = tileBoundingVolume.boundingVolume;\n var centerLocal = Matrix4.multiplyByPoint(\n transformLocal,\n boundingVolume.center,\n scratchCenter\n );\n if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {\n // The tileset is defined in WGS84. Approximate the minimum and maximum height.\n var centerCartographic = Cartographic.fromCartesian(\n centerLocal,\n ellipsoid,\n scratchCartographic\n );\n up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n direction = camera.directionWC;\n height = camera.positionCartographic.height;\n minimumHeight = 0.0;\n maximumHeight = centerCartographic.height * 2.0;\n } else {\n // The tileset is defined in local coordinates (z-up)\n var positionLocal = Matrix4.multiplyByPoint(\n transformLocal,\n camera.positionWC,\n scratchPosition\n );\n up = Cartesian3.UNIT_Z;\n direction = Matrix4.multiplyByPointAsVector(\n transformLocal,\n camera.directionWC,\n scratchDirection\n );\n direction = Cartesian3.normalize(direction, direction);\n height = positionLocal.z;\n if (tileBoundingVolume instanceof TileOrientedBoundingBox) {\n // Assuming z-up, the last component stores the half-height of the box\n var boxHeight = root._header.boundingVolume.box[11];\n minimumHeight = centerLocal.z - boxHeight;\n maximumHeight = centerLocal.z + boxHeight;\n } else if (tileBoundingVolume instanceof TileBoundingSphere) {\n var radius = boundingVolume.radius;\n minimumHeight = centerLocal.z - radius;\n maximumHeight = centerLocal.z + radius;\n }\n }\n }\n\n // The range where the density starts to lessen. Start at the quarter height of the tileset.\n var heightFalloff = tileset.dynamicScreenSpaceErrorHeightFalloff;\n var heightClose =\n minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;\n var heightFar = maximumHeight;\n\n var t = CesiumMath.clamp(\n (height - heightClose) / (heightFar - heightClose),\n 0.0,\n 1.0\n );\n\n // Increase density as the camera tilts towards the horizon\n var dot = Math.abs(Cartesian3.dot(direction, up));\n var horizonFactor = 1.0 - dot;\n\n // Weaken the horizon factor as the camera height increases, implying the camera is further away from the tileset.\n // The goal is to increase density for the \"street view\", not when viewing the tileset from a distance.\n horizonFactor = horizonFactor * (1.0 - t);\n\n var density = tileset.dynamicScreenSpaceErrorDensity;\n density *= horizonFactor;\n\n tileset._dynamicScreenSpaceErrorComputedDensity = density;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction requestContent(tileset, tile) {\n if (tile.hasEmptyContent) {\n return;\n }\n\n var statistics = tileset._statistics;\n var expired = tile.contentExpired;\n var requested = tile.requestContent();\n\n if (!requested) {\n ++statistics.numberOfAttemptedRequests;\n return;\n }\n\n if (expired) {\n if (tile.hasTilesetContent) {\n destroySubtree(tileset, tile);\n } else {\n statistics.decrementLoadCounts(tile.content);\n --statistics.numberOfTilesWithContentReady;\n }\n }\n\n ++statistics.numberOfPendingRequests;\n tileset._requestedTilesInFlight.push(tile);\n\n tile.contentReadyToProcessPromise.then(addToProcessingQueue(tileset, tile));\n tile.contentReadyPromise\n .then(handleTileSuccess(tileset, tile))\n .otherwise(handleTileFailure(tileset, tile));\n}\n\nfunction sortRequestByPriority(a, b) {\n return a._priority - b._priority;\n}\n\n/**\n * Perform any pass invariant tasks here. Called after the render pass.\n * @private\n */\nCesium3DTileset.prototype.postPassesUpdate = function (frameState) {\n if (!this.ready) {\n return;\n }\n\n cancelOutOfViewRequests(this, frameState);\n raiseLoadProgressEvent(this, frameState);\n this._cache.unloadTiles(this, unloadTile);\n};\n\n/**\n * Perform any pass invariant tasks here. Called before any passes are executed.\n * @private\n */\nCesium3DTileset.prototype.prePassesUpdate = function (frameState) {\n if (!this.ready) {\n return;\n }\n\n processTiles(this, frameState);\n\n // Update clipping planes\n var clippingPlanes = this._clippingPlanes;\n this._clippingPlanesOriginMatrixDirty = true;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n clippingPlanes.update(frameState);\n }\n\n if (!defined(this._loadTimestamp)) {\n this._loadTimestamp = JulianDate.clone(frameState.time);\n }\n this._timeSinceLoad = Math.max(\n JulianDate.secondsDifference(frameState.time, this._loadTimestamp) * 1000,\n 0.0\n );\n\n this._skipLevelOfDetail =\n this.skipLevelOfDetail &&\n !defined(this._classificationType) &&\n !this._disableSkipLevelOfDetail &&\n !this._allTilesAdditive;\n\n if (this.dynamicScreenSpaceError) {\n updateDynamicScreenSpaceError(this, frameState);\n }\n\n if (frameState.newFrame) {\n this._cache.reset();\n }\n};\n\nfunction cancelOutOfViewRequests(tileset, frameState) {\n var requestedTilesInFlight = tileset._requestedTilesInFlight;\n var removeCount = 0;\n var length = requestedTilesInFlight.length;\n for (var i = 0; i < length; ++i) {\n var tile = requestedTilesInFlight[i];\n\n // NOTE: This is framerate dependant so make sure the threshold check is small\n var outOfView = frameState.frameNumber - tile._touchedFrame >= 1;\n if (tile._contentState !== Cesium3DTileContentState.LOADING) {\n // No longer fetching from host, don't need to track it anymore. Gets marked as LOADING in Cesium3DTile::requestContent().\n ++removeCount;\n continue;\n } else if (outOfView) {\n // RequestScheduler will take care of cancelling it\n tile._request.cancel();\n ++removeCount;\n continue;\n }\n\n if (removeCount > 0) {\n requestedTilesInFlight[i - removeCount] = tile;\n }\n }\n\n requestedTilesInFlight.length -= removeCount;\n}\n\nfunction requestTiles(tileset, isAsync) {\n // Sort requests by priority before making any requests.\n // This makes it less likely that requests will be cancelled after being issued.\n var requestedTiles = tileset._requestedTiles;\n var length = requestedTiles.length;\n requestedTiles.sort(sortRequestByPriority);\n for (var i = 0; i < length; ++i) {\n requestContent(tileset, requestedTiles[i]);\n }\n}\n\nfunction addToProcessingQueue(tileset, tile) {\n return function () {\n tileset._processingQueue.push(tile);\n\n --tileset._statistics.numberOfPendingRequests;\n ++tileset._statistics.numberOfTilesProcessing;\n };\n}\n\nfunction handleTileFailure(tileset, tile) {\n return function (error) {\n var url = tile._contentResource.url;\n var message = defined(error.message) ? error.message : error.toString();\n if (tileset.tileFailed.numberOfListeners > 0) {\n tileset.tileFailed.raiseEvent({\n url: url,\n message: message,\n });\n } else {\n console.log(\"A 3D tile failed to load: \" + url);\n console.log(\"Error: \" + message);\n }\n };\n}\n\nfunction handleTileSuccess(tileset, tile) {\n return function () {\n --tileset._statistics.numberOfTilesProcessing;\n\n if (!tile.hasTilesetContent) {\n // RESEARCH_IDEA: ability to unload tiles (without content) for an\n // external tileset when all the tiles are unloaded.\n tileset._statistics.incrementLoadCounts(tile.content);\n ++tileset._statistics.numberOfTilesWithContentReady;\n ++tileset._statistics.numberOfLoadedTilesTotal;\n\n // Add to the tile cache. Previously expired tiles are already in the cache and won't get re-added.\n tileset._cache.add(tile);\n }\n\n tileset.tileLoad.raiseEvent(tile);\n };\n}\n\nfunction filterProcessingQueue(tileset) {\n var tiles = tileset._processingQueue;\n var length = tiles.length;\n\n var removeCount = 0;\n for (var i = 0; i < length; ++i) {\n var tile = tiles[i];\n if (tile._contentState !== Cesium3DTileContentState.PROCESSING) {\n ++removeCount;\n continue;\n }\n if (removeCount > 0) {\n tiles[i - removeCount] = tile;\n }\n }\n tiles.length -= removeCount;\n}\n\nfunction processTiles(tileset, frameState) {\n filterProcessingQueue(tileset);\n var tiles = tileset._processingQueue;\n var length = tiles.length;\n // Process tiles in the PROCESSING state so they will eventually move to the READY state.\n for (var i = 0; i < length; ++i) {\n tiles[i].process(tileset, frameState);\n }\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nvar scratchCartesian = new Cartesian3();\n\nvar stringOptions = {\n maximumFractionDigits: 3,\n};\n\nfunction formatMemoryString(memorySizeInBytes) {\n var memoryInMegabytes = memorySizeInBytes / 1048576;\n if (memoryInMegabytes < 1.0) {\n return memoryInMegabytes.toLocaleString(undefined, stringOptions);\n }\n return Math.round(memoryInMegabytes).toLocaleString();\n}\n\nfunction computeTileLabelPosition(tile) {\n var boundingVolume = tile.boundingVolume.boundingVolume;\n var halfAxes = boundingVolume.halfAxes;\n var radius = boundingVolume.radius;\n\n var position = Cartesian3.clone(boundingVolume.center, scratchCartesian);\n if (defined(halfAxes)) {\n position.x += 0.75 * (halfAxes[0] + halfAxes[3] + halfAxes[6]);\n position.y += 0.75 * (halfAxes[1] + halfAxes[4] + halfAxes[7]);\n position.z += 0.75 * (halfAxes[2] + halfAxes[5] + halfAxes[8]);\n } else if (defined(radius)) {\n var normal = Cartesian3.normalize(boundingVolume.center, scratchCartesian);\n normal = Cartesian3.multiplyByScalar(\n normal,\n 0.75 * radius,\n scratchCartesian\n );\n position = Cartesian3.add(normal, boundingVolume.center, scratchCartesian);\n }\n return position;\n}\n\nfunction addTileDebugLabel(tile, tileset, position) {\n var labelString = \"\";\n var attributes = 0;\n\n if (tileset.debugShowGeometricError) {\n labelString += \"\\nGeometric error: \" + tile.geometricError;\n attributes++;\n }\n\n if (tileset.debugShowRenderingStatistics) {\n labelString += \"\\nCommands: \" + tile.commandsLength;\n attributes++;\n\n // Don't display number of points or triangles if 0.\n var numberOfPoints = tile.content.pointsLength;\n if (numberOfPoints > 0) {\n labelString += \"\\nPoints: \" + tile.content.pointsLength;\n attributes++;\n }\n\n var numberOfTriangles = tile.content.trianglesLength;\n if (numberOfTriangles > 0) {\n labelString += \"\\nTriangles: \" + tile.content.trianglesLength;\n attributes++;\n }\n\n labelString += \"\\nFeatures: \" + tile.content.featuresLength;\n attributes++;\n }\n\n if (tileset.debugShowMemoryUsage) {\n labelString +=\n \"\\nTexture Memory: \" +\n formatMemoryString(tile.content.texturesByteLength);\n labelString +=\n \"\\nGeometry Memory: \" +\n formatMemoryString(tile.content.geometryByteLength);\n attributes += 2;\n }\n\n if (tileset.debugShowUrl) {\n labelString += \"\\nUrl: \" + tile._header.content.uri;\n attributes++;\n }\n\n var newLabel = {\n text: labelString.substring(1),\n position: position,\n font: 19 - attributes + \"px sans-serif\",\n showBackground: true,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n };\n\n return tileset._tileDebugLabels.add(newLabel);\n}\n\nfunction updateTileDebugLabels(tileset, frameState) {\n var i;\n var tile;\n var selectedTiles = tileset._selectedTiles;\n var selectedLength = selectedTiles.length;\n var emptyTiles = tileset._emptyTiles;\n var emptyLength = emptyTiles.length;\n tileset._tileDebugLabels.removeAll();\n\n if (tileset.debugPickedTileLabelOnly) {\n if (defined(tileset.debugPickedTile)) {\n var position = defined(tileset.debugPickPosition)\n ? tileset.debugPickPosition\n : computeTileLabelPosition(tileset.debugPickedTile);\n var label = addTileDebugLabel(tileset.debugPickedTile, tileset, position);\n label.pixelOffset = new Cartesian2(15, -15); // Offset to avoid picking the label.\n }\n } else {\n for (i = 0; i < selectedLength; ++i) {\n tile = selectedTiles[i];\n addTileDebugLabel(tile, tileset, computeTileLabelPosition(tile));\n }\n for (i = 0; i < emptyLength; ++i) {\n tile = emptyTiles[i];\n if (tile.hasTilesetContent) {\n addTileDebugLabel(tile, tileset, computeTileLabelPosition(tile));\n }\n }\n }\n tileset._tileDebugLabels.update(frameState);\n}\n\nfunction updateTiles(tileset, frameState, passOptions) {\n tileset._styleEngine.applyStyle(tileset, passOptions);\n\n var isRender = passOptions.isRender;\n var statistics = tileset._statistics;\n var commandList = frameState.commandList;\n var numberOfInitialCommands = commandList.length;\n var selectedTiles = tileset._selectedTiles;\n var selectedLength = selectedTiles.length;\n var emptyTiles = tileset._emptyTiles;\n var emptyLength = emptyTiles.length;\n var tileVisible = tileset.tileVisible;\n var i;\n var tile;\n\n var bivariateVisibilityTest =\n tileset._skipLevelOfDetail &&\n tileset._hasMixedContent &&\n frameState.context.stencilBuffer &&\n selectedLength > 0;\n\n tileset._backfaceCommands.length = 0;\n\n if (bivariateVisibilityTest) {\n if (!defined(tileset._stencilClearCommand)) {\n tileset._stencilClearCommand = new ClearCommand({\n stencil: 0,\n pass: Pass.CESIUM_3D_TILE,\n renderState: RenderState.fromCache({\n stencilMask: StencilConstants.SKIP_LOD_MASK,\n }),\n });\n }\n commandList.push(tileset._stencilClearCommand);\n }\n\n var lengthBeforeUpdate = commandList.length;\n for (i = 0; i < selectedLength; ++i) {\n tile = selectedTiles[i];\n // Raise the tileVisible event before update in case the tileVisible event\n // handler makes changes that update needs to apply to WebGL resources\n if (isRender) {\n tileVisible.raiseEvent(tile);\n }\n tile.update(tileset, frameState, passOptions);\n statistics.incrementSelectionCounts(tile.content);\n ++statistics.selected;\n }\n for (i = 0; i < emptyLength; ++i) {\n tile = emptyTiles[i];\n tile.update(tileset, frameState, passOptions);\n }\n\n var addedCommandsLength = commandList.length - lengthBeforeUpdate;\n\n tileset._backfaceCommands.trim();\n\n if (bivariateVisibilityTest) {\n /*\n * Consider 'effective leaf' tiles as selected tiles that have no selected descendants. They may have children,\n * but they are currently our effective leaves because they do not have selected descendants. These tiles\n * are those where with tile._finalResolution === true.\n * Let 'unresolved' tiles be those with tile._finalResolution === false.\n *\n * 1. Render just the backfaces of unresolved tiles in order to lay down z\n * 2. Render all frontfaces wherever tile._selectionDepth > stencilBuffer.\n * Replace stencilBuffer with tile._selectionDepth, when passing the z test.\n * Because children are always drawn before ancestors {@link Cesium3DTilesetTraversal#traverseAndSelect},\n * this effectively draws children first and does not draw ancestors if a descendant has already\n * been drawn at that pixel.\n * Step 1 prevents child tiles from appearing on top when they are truly behind ancestor content.\n * If they are behind the backfaces of the ancestor, then they will not be drawn.\n *\n * NOTE: Step 2 sometimes causes visual artifacts when backfacing child content has some faces that\n * partially face the camera and are inside of the ancestor content. Because they are inside, they will\n * not be culled by the depth writes in Step 1, and because they partially face the camera, the stencil tests\n * will draw them on top of the ancestor content.\n *\n * NOTE: Because we always render backfaces of unresolved tiles, if the camera is looking at the backfaces\n * of an object, they will always be drawn while loading, even if backface culling is enabled.\n */\n\n var backfaceCommands = tileset._backfaceCommands.values;\n var backfaceCommandsLength = backfaceCommands.length;\n\n commandList.length += backfaceCommandsLength;\n\n // copy commands to the back of the commandList\n for (i = addedCommandsLength - 1; i >= 0; --i) {\n commandList[lengthBeforeUpdate + backfaceCommandsLength + i] =\n commandList[lengthBeforeUpdate + i];\n }\n\n // move backface commands to the front of the commandList\n for (i = 0; i < backfaceCommandsLength; ++i) {\n commandList[lengthBeforeUpdate + i] = backfaceCommands[i];\n }\n }\n\n // Number of commands added by each update above\n addedCommandsLength = commandList.length - numberOfInitialCommands;\n statistics.numberOfCommands = addedCommandsLength;\n\n // Only run EDL if simple attenuation is on\n if (\n isRender &&\n tileset.pointCloudShading.attenuation &&\n tileset.pointCloudShading.eyeDomeLighting &&\n addedCommandsLength > 0\n ) {\n tileset._pointCloudEyeDomeLighting.update(\n frameState,\n numberOfInitialCommands,\n tileset.pointCloudShading,\n tileset.boundingSphere\n );\n }\n\n if (isRender) {\n if (\n tileset.debugShowGeometricError ||\n tileset.debugShowRenderingStatistics ||\n tileset.debugShowMemoryUsage ||\n tileset.debugShowUrl\n ) {\n if (!defined(tileset._tileDebugLabels)) {\n tileset._tileDebugLabels = new LabelCollection();\n }\n updateTileDebugLabels(tileset, frameState);\n } else {\n tileset._tileDebugLabels =\n tileset._tileDebugLabels && tileset._tileDebugLabels.destroy();\n }\n }\n}\n\nvar scratchStack = [];\n\nfunction destroySubtree(tileset, tile) {\n var root = tile;\n var stack = scratchStack;\n stack.push(tile);\n while (stack.length > 0) {\n tile = stack.pop();\n var children = tile.children;\n var length = children.length;\n for (var i = 0; i < length; ++i) {\n stack.push(children[i]);\n }\n if (tile !== root) {\n destroyTile(tileset, tile);\n --tileset._statistics.numberOfTilesTotal;\n }\n }\n root.children = [];\n}\n\nfunction unloadTile(tileset, tile) {\n tileset.tileUnload.raiseEvent(tile);\n tileset._statistics.decrementLoadCounts(tile.content);\n --tileset._statistics.numberOfTilesWithContentReady;\n tile.unloadContent();\n}\n\nfunction destroyTile(tileset, tile) {\n tileset._cache.unloadTile(tileset, tile, unloadTile);\n tile.destroy();\n}\n\n/**\n * Unloads all tiles that weren't selected the previous frame. This can be used to\n * explicitly manage the tile cache and reduce the total number of tiles loaded below\n * {@link Cesium3DTileset#maximumMemoryUsage}.\n * <p>\n * Tile unloads occur at the next frame to keep all the WebGL delete calls\n * within the render loop.\n * </p>\n */\nCesium3DTileset.prototype.trimLoadedTiles = function () {\n this._cache.trim();\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction raiseLoadProgressEvent(tileset, frameState) {\n var statistics = tileset._statistics;\n var statisticsLast = tileset._statisticsLast;\n\n var numberOfPendingRequests = statistics.numberOfPendingRequests;\n var numberOfTilesProcessing = statistics.numberOfTilesProcessing;\n var lastNumberOfPendingRequest = statisticsLast.numberOfPendingRequests;\n var lastNumberOfTilesProcessing = statisticsLast.numberOfTilesProcessing;\n\n Cesium3DTilesetStatistics.clone(statistics, statisticsLast);\n\n var progressChanged =\n numberOfPendingRequests !== lastNumberOfPendingRequest ||\n numberOfTilesProcessing !== lastNumberOfTilesProcessing;\n\n if (progressChanged) {\n frameState.afterRender.push(function () {\n tileset.loadProgress.raiseEvent(\n numberOfPendingRequests,\n numberOfTilesProcessing\n );\n });\n }\n\n tileset._tilesLoaded =\n statistics.numberOfPendingRequests === 0 &&\n statistics.numberOfTilesProcessing === 0 &&\n statistics.numberOfAttemptedRequests === 0;\n\n // Events are raised (added to the afterRender queue) here since promises\n // may resolve outside of the update loop that then raise events, e.g.,\n // model's readyPromise.\n if (progressChanged && tileset._tilesLoaded) {\n frameState.afterRender.push(function () {\n tileset.allTilesLoaded.raiseEvent();\n });\n if (!tileset._initialTilesLoaded) {\n tileset._initialTilesLoaded = true;\n frameState.afterRender.push(function () {\n tileset.initialTilesLoaded.raiseEvent();\n });\n }\n }\n}\n\nfunction resetMinimumMaximum(tileset) {\n tileset._heatmap.resetMinimumMaximum();\n tileset._minimumPriority.depth = Number.MAX_VALUE;\n tileset._maximumPriority.depth = -Number.MAX_VALUE;\n tileset._minimumPriority.foveatedFactor = Number.MAX_VALUE;\n tileset._maximumPriority.foveatedFactor = -Number.MAX_VALUE;\n tileset._minimumPriority.distance = Number.MAX_VALUE;\n tileset._maximumPriority.distance = -Number.MAX_VALUE;\n tileset._minimumPriority.reverseScreenSpaceError = Number.MAX_VALUE;\n tileset._maximumPriority.reverseScreenSpaceError = -Number.MAX_VALUE;\n}\n\nfunction detectModelMatrixChanged(tileset, frameState) {\n if (\n frameState.frameNumber !== tileset._updatedModelMatrixFrame ||\n !defined(tileset._previousModelMatrix)\n ) {\n tileset._updatedModelMatrixFrame = frameState.frameNumber;\n tileset._modelMatrixChanged = !Matrix4.equals(\n tileset.modelMatrix,\n tileset._previousModelMatrix\n );\n tileset._previousModelMatrix = Matrix4.clone(\n tileset.modelMatrix,\n tileset._previousModelMatrix\n );\n }\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction update(tileset, frameState, passStatistics, passOptions) {\n if (frameState.mode === SceneMode.MORPHING) {\n return false;\n }\n\n if (!tileset.ready) {\n return false;\n }\n\n var statistics = tileset._statistics;\n statistics.clear();\n\n var isRender = passOptions.isRender;\n\n // Resets the visibility check for each pass\n ++tileset._updatedVisibilityFrame;\n\n // Update any tracked min max values\n resetMinimumMaximum(tileset);\n\n detectModelMatrixChanged(tileset, frameState);\n tileset._cullRequestsWhileMoving =\n tileset.cullRequestsWhileMoving && !tileset._modelMatrixChanged;\n\n var ready = passOptions.traversal.selectTiles(tileset, frameState);\n\n if (passOptions.requestTiles) {\n requestTiles(tileset);\n }\n\n updateTiles(tileset, frameState, passOptions);\n\n // Update pass statistics\n Cesium3DTilesetStatistics.clone(statistics, passStatistics);\n\n if (isRender) {\n var credits = tileset._credits;\n if (defined(credits) && statistics.selected !== 0) {\n var length = credits.length;\n for (var i = 0; i < length; ++i) {\n frameState.creditDisplay.addCredit(credits[i]);\n }\n }\n }\n\n return ready;\n}\n\n/**\n * @private\n */\nCesium3DTileset.prototype.update = function (frameState) {\n this.updateForPass(frameState, frameState.tilesetPassState);\n};\n\n/**\n * @private\n */\nCesium3DTileset.prototype.updateForPass = function (\n frameState,\n tilesetPassState\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"frameState\", frameState);\n Check.typeOf.object(\"tilesetPassState\", tilesetPassState);\n //>>includeEnd('debug');\n\n var pass = tilesetPassState.pass;\n if (\n (pass === Cesium3DTilePass.PRELOAD &&\n (!this.preloadWhenHidden || this.show)) ||\n (pass === Cesium3DTilePass.PRELOAD_FLIGHT &&\n (!this.preloadFlightDestinations ||\n (!this.show && !this.preloadWhenHidden))) ||\n (pass === Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK &&\n ((!this._cullRequestsWhileMoving && this.foveatedTimeDelay <= 0) ||\n !this.show))\n ) {\n return;\n }\n\n var originalCommandList = frameState.commandList;\n var originalCamera = frameState.camera;\n var originalCullingVolume = frameState.cullingVolume;\n\n tilesetPassState.ready = false;\n\n var passOptions = Cesium3DTilePass.getPassOptions(pass);\n var ignoreCommands = passOptions.ignoreCommands;\n\n var commandList = defaultValue(\n tilesetPassState.commandList,\n originalCommandList\n );\n var commandStart = commandList.length;\n\n frameState.commandList = commandList;\n frameState.camera = defaultValue(tilesetPassState.camera, originalCamera);\n frameState.cullingVolume = defaultValue(\n tilesetPassState.cullingVolume,\n originalCullingVolume\n );\n\n var passStatistics = this._statisticsPerPass[pass];\n\n if (this.show || ignoreCommands) {\n this._pass = pass;\n tilesetPassState.ready = update(\n this,\n frameState,\n passStatistics,\n passOptions\n );\n }\n\n if (ignoreCommands) {\n commandList.length = commandStart;\n }\n\n frameState.commandList = originalCommandList;\n frameState.camera = originalCamera;\n frameState.cullingVolume = originalCullingVolume;\n};\n\n/**\n * <code>true</code> if the tileset JSON file lists the extension in extensionsUsed; otherwise, <code>false</code>.\n * @param {String} extensionName The name of the extension to check.\n *\n * @returns {Boolean} <code>true</code> if the tileset JSON file lists the extension in extensionsUsed; otherwise, <code>false</code>.\n */\nCesium3DTileset.prototype.hasExtension = function (extensionName) {\n if (!defined(this._extensionsUsed)) {\n return false;\n }\n\n return this._extensionsUsed.indexOf(extensionName) > -1;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Cesium3DTileset#destroy\n */\nCesium3DTileset.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * tileset = tileset && tileset.destroy();\n *\n * @see Cesium3DTileset#isDestroyed\n */\nCesium3DTileset.prototype.destroy = function () {\n this._tileDebugLabels =\n this._tileDebugLabels && this._tileDebugLabels.destroy();\n this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n\n // Traverse the tree and destroy all tiles\n if (defined(this._root)) {\n var stack = scratchStack;\n stack.push(this._root);\n\n while (stack.length > 0) {\n var tile = stack.pop();\n tile.destroy();\n\n var children = tile.children;\n var length = children.length;\n for (var i = 0; i < length; ++i) {\n stack.push(children[i]);\n }\n }\n }\n\n this._root = undefined;\n return destroyObject(this);\n};\n\n/**\n * Optimization option. Used as a callback when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone,\n * interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}.\n *\n * @callback Cesium3DTileset.foveatedInterpolationCallback\n * @default Math.lerp\n *\n * @param {Number} p The start value to interpolate.\n * @param {Number} q The end value to interpolate.\n * @param {Number} time The time of interpolation generally in the range <code>[0.0, 1.0]</code>.\n * @returns {Number} The interpolated value.\n */\nexport default Cesium3DTileset;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport Cesium3DTileset from \"../Scene/Cesium3DTileset.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar modelMatrixScratch = new Matrix4();\n\n/**\n * A {@link Visualizer} which maps {@link Entity#tileset} to a {@link Cesium3DTileset}.\n * @alias Cesium3DTilesetVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction Cesium3DTilesetVisualizer(scene, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n Cesium3DTilesetVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._scene = scene;\n this._primitives = scene.primitives;\n this._entityCollection = entityCollection;\n this._tilesetHash = {};\n this._entitiesToVisualize = new AssociativeArray();\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates models created this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nCesium3DTilesetVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var entities = this._entitiesToVisualize.values;\n var tilesetHash = this._tilesetHash;\n var primitives = this._primitives;\n\n for (var i = 0, len = entities.length; i < len; i++) {\n var entity = entities[i];\n var tilesetGraphics = entity._tileset;\n\n var resource;\n var tilesetData = tilesetHash[entity.id];\n var show =\n entity.isShowing &&\n entity.isAvailable(time) &&\n Property.getValueOrDefault(tilesetGraphics._show, time, true);\n\n var modelMatrix;\n if (show) {\n modelMatrix = entity.computeModelMatrix(time, modelMatrixScratch);\n resource = Resource.createIfNeeded(\n Property.getValueOrUndefined(tilesetGraphics._uri, time)\n );\n }\n\n if (!show) {\n if (defined(tilesetData)) {\n tilesetData.tilesetPrimitive.show = false;\n }\n continue;\n }\n\n var tileset = defined(tilesetData)\n ? tilesetData.tilesetPrimitive\n : undefined;\n if (!defined(tileset) || resource.url !== tilesetData.url) {\n if (defined(tileset)) {\n primitives.removeAndDestroy(tileset);\n delete tilesetHash[entity.id];\n }\n tileset = new Cesium3DTileset({\n url: resource,\n });\n tileset.id = entity;\n primitives.add(tileset);\n\n tilesetData = {\n tilesetPrimitive: tileset,\n url: resource.url,\n loadFail: false,\n };\n tilesetHash[entity.id] = tilesetData;\n\n checkLoad(tileset, entity, tilesetHash);\n }\n\n tileset.show = true;\n if (defined(modelMatrix)) {\n tileset.modelMatrix = modelMatrix;\n }\n tileset.maximumScreenSpaceError = Property.getValueOrDefault(\n tilesetGraphics.maximumScreenSpaceError,\n time,\n tileset.maximumScreenSpaceError\n );\n }\n\n return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nCesium3DTilesetVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nCesium3DTilesetVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n Cesium3DTilesetVisualizer.prototype._onCollectionChanged,\n this\n );\n var entities = this._entitiesToVisualize.values;\n var tilesetHash = this._tilesetHash;\n var primitives = this._primitives;\n for (var i = entities.length - 1; i > -1; i--) {\n removeTileset(this, entities[i], tilesetHash, primitives);\n }\n return destroyObject(this);\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nCesium3DTilesetVisualizer.prototype.getBoundingSphere = function (\n entity,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var tilesetData = this._tilesetHash[entity.id];\n if (!defined(tilesetData) || tilesetData.loadFail) {\n return BoundingSphereState.FAILED;\n }\n\n var primitive = tilesetData.tilesetPrimitive;\n if (!defined(primitive) || !primitive.show) {\n return BoundingSphereState.FAILED;\n }\n\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n\n BoundingSphere.clone(primitive.boundingSphere, result);\n\n return BoundingSphereState.DONE;\n};\n\n/**\n * @private\n */\nCesium3DTilesetVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var entities = this._entitiesToVisualize;\n var tilesetHash = this._tilesetHash;\n var primitives = this._primitives;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._tileset)) {\n entities.set(entity.id, entity);\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._tileset)) {\n entities.set(entity.id, entity);\n } else {\n removeTileset(this, entity, tilesetHash, primitives);\n entities.remove(entity.id);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n removeTileset(this, entity, tilesetHash, primitives);\n entities.remove(entity.id);\n }\n};\n\nfunction removeTileset(visualizer, entity, tilesetHash, primitives) {\n var tilesetData = tilesetHash[entity.id];\n if (defined(tilesetData)) {\n primitives.removeAndDestroy(tilesetData.tilesetPrimitive);\n delete tilesetHash[entity.id];\n }\n}\n\nfunction checkLoad(primitive, entity, tilesetHash) {\n primitive.readyPromise.otherwise(function (error) {\n console.error(error);\n tilesetHash[entity.id].loadFail = true;\n });\n}\nexport default Cesium3DTilesetVisualizer;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultEvenColor = Color.WHITE;\nvar defaultOddColor = Color.BLACK;\nvar defaultRepeat = new Cartesian2(2.0, 2.0);\n\n/**\n * A {@link MaterialProperty} that maps to checkerboard {@link Material} uniforms.\n * @alias CheckerboardMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Color} [options.evenColor=Color.WHITE] A Property specifying the first {@link Color}.\n * @param {Property|Color} [options.oddColor=Color.BLACK] A Property specifying the second {@link Color}.\n * @param {Property|Cartesian2} [options.repeat=new Cartesian2(2.0, 2.0)] A {@link Cartesian2} Property specifying how many times the tiles repeat in each direction.\n */\nfunction CheckerboardMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._evenColor = undefined;\n this._evenColorSubscription = undefined;\n this._oddColor = undefined;\n this._oddColorSubscription = undefined;\n this._repeat = undefined;\n this._repeatSubscription = undefined;\n\n this.evenColor = options.evenColor;\n this.oddColor = options.oddColor;\n this.repeat = options.repeat;\n}\n\nObject.defineProperties(CheckerboardMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof CheckerboardMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._evenColor) && //\n Property.isConstant(this._oddColor) && //\n Property.isConstant(this._repeat)\n );\n },\n },\n\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof CheckerboardMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the Property specifying the first {@link Color}.\n * @memberof CheckerboardMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n evenColor: createPropertyDescriptor(\"evenColor\"),\n\n /**\n * Gets or sets the Property specifying the second {@link Color}.\n * @memberof CheckerboardMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n oddColor: createPropertyDescriptor(\"oddColor\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying how many times the tiles repeat in each direction.\n * @memberof CheckerboardMaterialProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(2.0, 2.0)\n */\n repeat: createPropertyDescriptor(\"repeat\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nCheckerboardMaterialProperty.prototype.getType = function (time) {\n return \"Checkerboard\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCheckerboardMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.lightColor = Property.getValueOrClonedDefault(\n this._evenColor,\n time,\n defaultEvenColor,\n result.lightColor\n );\n result.darkColor = Property.getValueOrClonedDefault(\n this._oddColor,\n time,\n defaultOddColor,\n result.darkColor\n );\n result.repeat = Property.getValueOrDefault(this._repeat, time, defaultRepeat);\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCheckerboardMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof CheckerboardMaterialProperty && //\n Property.equals(this._evenColor, other._evenColor) && //\n Property.equals(this._oddColor, other._oddColor) && //\n Property.equals(this._repeat, other._repeat))\n );\n};\nexport default CheckerboardMaterialProperty;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport Entity from \"./Entity.js\";\n\nvar entityOptionsScratch = {\n id: undefined,\n};\n\nfunction fireChangedEvent(collection) {\n if (collection._firing) {\n collection._refire = true;\n return;\n }\n\n if (collection._suspendCount === 0) {\n var added = collection._addedEntities;\n var removed = collection._removedEntities;\n var changed = collection._changedEntities;\n if (changed.length !== 0 || added.length !== 0 || removed.length !== 0) {\n collection._firing = true;\n do {\n collection._refire = false;\n var addedArray = added.values.slice(0);\n var removedArray = removed.values.slice(0);\n var changedArray = changed.values.slice(0);\n\n added.removeAll();\n removed.removeAll();\n changed.removeAll();\n collection._collectionChanged.raiseEvent(\n collection,\n addedArray,\n removedArray,\n changedArray\n );\n } while (collection._refire);\n collection._firing = false;\n }\n }\n}\n\n/**\n * An observable collection of {@link Entity} instances where each entity has a unique id.\n * @alias EntityCollection\n * @constructor\n *\n * @param {DataSource|CompositeEntityCollection} [owner] The data source (or composite entity collection) which created this collection.\n */\nfunction EntityCollection(owner) {\n this._owner = owner;\n this._entities = new AssociativeArray();\n this._addedEntities = new AssociativeArray();\n this._removedEntities = new AssociativeArray();\n this._changedEntities = new AssociativeArray();\n this._suspendCount = 0;\n this._collectionChanged = new Event();\n this._id = createGuid();\n this._show = true;\n this._firing = false;\n this._refire = false;\n}\n\n/**\n * Prevents {@link EntityCollection#collectionChanged} events from being raised\n * until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which\n * point a single event will be raised that covers all suspended operations.\n * This allows for many items to be added and removed efficiently.\n * This function can be safely called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n */\nEntityCollection.prototype.suspendEvents = function () {\n this._suspendCount++;\n};\n\n/**\n * Resumes raising {@link EntityCollection#collectionChanged} events immediately\n * when an item is added or removed. Any modifications made while while events were suspended\n * will be triggered as a single event when this function is called.\n * This function is reference counted and can safely be called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n *\n * @exception {DeveloperError} resumeEvents can not be called before suspendEvents.\n */\nEntityCollection.prototype.resumeEvents = function () {\n //>>includeStart('debug', pragmas.debug);\n if (this._suspendCount === 0) {\n throw new DeveloperError(\n \"resumeEvents can not be called before suspendEvents.\"\n );\n }\n //>>includeEnd('debug');\n\n this._suspendCount--;\n fireChangedEvent(this);\n};\n\n/**\n * The signature of the event generated by {@link EntityCollection#collectionChanged}.\n * @function\n *\n * @param {EntityCollection} collection The collection that triggered the event.\n * @param {Entity[]} added The array of {@link Entity} instances that have been added to the collection.\n * @param {Entity[]} removed The array of {@link Entity} instances that have been removed from the collection.\n * @param {Entity[]} changed The array of {@link Entity} instances that have been modified.\n */\nEntityCollection.collectionChangedEventCallback = undefined;\n\nObject.defineProperties(EntityCollection.prototype, {\n /**\n * Gets the event that is fired when entities are added or removed from the collection.\n * The generated event is a {@link EntityCollection.collectionChangedEventCallback}.\n * @memberof EntityCollection.prototype\n * @readonly\n * @type {Event}\n */\n collectionChanged: {\n get: function () {\n return this._collectionChanged;\n },\n },\n /**\n * Gets a globally unique identifier for this collection.\n * @memberof EntityCollection.prototype\n * @readonly\n * @type {String}\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * Gets the array of Entity instances in the collection.\n * This array should not be modified directly.\n * @memberof EntityCollection.prototype\n * @readonly\n * @type {Entity[]}\n */\n values: {\n get: function () {\n return this._entities.values;\n },\n },\n /**\n * Gets whether or not this entity collection should be\n * displayed. When true, each entity is only displayed if\n * its own show property is also true.\n * @memberof EntityCollection.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (value === this._show) {\n return;\n }\n\n //Since entity.isShowing includes the EntityCollection.show state\n //in its calculation, we need to loop over the entities array\n //twice, once to get the old showing value and a second time\n //to raise the changed event.\n this.suspendEvents();\n\n var i;\n var oldShows = [];\n var entities = this._entities.values;\n var entitiesLength = entities.length;\n\n for (i = 0; i < entitiesLength; i++) {\n oldShows.push(entities[i].isShowing);\n }\n\n this._show = value;\n\n for (i = 0; i < entitiesLength; i++) {\n var oldShow = oldShows[i];\n var entity = entities[i];\n if (oldShow !== entity.isShowing) {\n entity.definitionChanged.raiseEvent(\n entity,\n \"isShowing\",\n entity.isShowing,\n oldShow\n );\n }\n }\n\n this.resumeEvents();\n },\n },\n /**\n * Gets the owner of this entity collection, ie. the data source or composite entity collection which created it.\n * @memberof EntityCollection.prototype\n * @readonly\n * @type {DataSource|CompositeEntityCollection}\n */\n owner: {\n get: function () {\n return this._owner;\n },\n },\n});\n\n/**\n * Computes the maximum availability of the entities in the collection.\n * If the collection contains a mix of infinitely available data and non-infinite data,\n * it will return the interval pertaining to the non-infinite data only. If all\n * data is infinite, an infinite interval will be returned.\n *\n * @returns {TimeInterval} The availability of entities in the collection.\n */\nEntityCollection.prototype.computeAvailability = function () {\n var startTime = Iso8601.MAXIMUM_VALUE;\n var stopTime = Iso8601.MINIMUM_VALUE;\n var entities = this._entities.values;\n for (var i = 0, len = entities.length; i < len; i++) {\n var entity = entities[i];\n var availability = entity.availability;\n if (defined(availability)) {\n var start = availability.start;\n var stop = availability.stop;\n if (\n JulianDate.lessThan(start, startTime) &&\n !start.equals(Iso8601.MINIMUM_VALUE)\n ) {\n startTime = start;\n }\n if (\n JulianDate.greaterThan(stop, stopTime) &&\n !stop.equals(Iso8601.MAXIMUM_VALUE)\n ) {\n stopTime = stop;\n }\n }\n }\n\n if (Iso8601.MAXIMUM_VALUE.equals(startTime)) {\n startTime = Iso8601.MINIMUM_VALUE;\n }\n if (Iso8601.MINIMUM_VALUE.equals(stopTime)) {\n stopTime = Iso8601.MAXIMUM_VALUE;\n }\n return new TimeInterval({\n start: startTime,\n stop: stopTime,\n });\n};\n\n/**\n * Add an entity to the collection.\n *\n * @param {Entity | Entity.ConstructorOptions} entity The entity to be added.\n * @returns {Entity} The entity that was added.\n * @exception {DeveloperError} An entity with <entity.id> already exists in this collection.\n */\nEntityCollection.prototype.add = function (entity) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n //>>includeEnd('debug');\n\n if (!(entity instanceof Entity)) {\n entity = new Entity(entity);\n }\n\n var id = entity.id;\n var entities = this._entities;\n if (entities.contains(id)) {\n throw new RuntimeError(\n \"An entity with id \" + id + \" already exists in this collection.\"\n );\n }\n\n entity.entityCollection = this;\n entities.set(id, entity);\n\n if (!this._removedEntities.remove(id)) {\n this._addedEntities.set(id, entity);\n }\n entity.definitionChanged.addEventListener(\n EntityCollection.prototype._onEntityDefinitionChanged,\n this\n );\n\n fireChangedEvent(this);\n return entity;\n};\n\n/**\n * Removes an entity from the collection.\n *\n * @param {Entity} entity The entity to be removed.\n * @returns {Boolean} true if the item was removed, false if it did not exist in the collection.\n */\nEntityCollection.prototype.remove = function (entity) {\n if (!defined(entity)) {\n return false;\n }\n return this.removeById(entity.id);\n};\n\n/**\n * Returns true if the provided entity is in this collection, false otherwise.\n *\n * @param {Entity} entity The entity.\n * @returns {Boolean} true if the provided entity is in this collection, false otherwise.\n */\nEntityCollection.prototype.contains = function (entity) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required\");\n }\n //>>includeEnd('debug');\n return this._entities.get(entity.id) === entity;\n};\n\n/**\n * Removes an entity with the provided id from the collection.\n *\n * @param {String} id The id of the entity to remove.\n * @returns {Boolean} true if the item was removed, false if no item with the provided id existed in the collection.\n */\nEntityCollection.prototype.removeById = function (id) {\n if (!defined(id)) {\n return false;\n }\n\n var entities = this._entities;\n var entity = entities.get(id);\n if (!this._entities.remove(id)) {\n return false;\n }\n\n if (!this._addedEntities.remove(id)) {\n this._removedEntities.set(id, entity);\n this._changedEntities.remove(id);\n }\n this._entities.remove(id);\n entity.definitionChanged.removeEventListener(\n EntityCollection.prototype._onEntityDefinitionChanged,\n this\n );\n fireChangedEvent(this);\n\n return true;\n};\n\n/**\n * Removes all Entities from the collection.\n */\nEntityCollection.prototype.removeAll = function () {\n //The event should only contain items added before events were suspended\n //and the contents of the collection.\n var entities = this._entities;\n var entitiesLength = entities.length;\n var array = entities.values;\n\n var addedEntities = this._addedEntities;\n var removed = this._removedEntities;\n\n for (var i = 0; i < entitiesLength; i++) {\n var existingItem = array[i];\n var existingItemId = existingItem.id;\n var addedItem = addedEntities.get(existingItemId);\n if (!defined(addedItem)) {\n existingItem.definitionChanged.removeEventListener(\n EntityCollection.prototype._onEntityDefinitionChanged,\n this\n );\n removed.set(existingItemId, existingItem);\n }\n }\n\n entities.removeAll();\n addedEntities.removeAll();\n this._changedEntities.removeAll();\n fireChangedEvent(this);\n};\n\n/**\n * Gets an entity with the specified id.\n *\n * @param {String} id The id of the entity to retrieve.\n * @returns {Entity|undefined} The entity with the provided id or undefined if the id did not exist in the collection.\n */\nEntityCollection.prototype.getById = function (id) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n //>>includeEnd('debug');\n\n return this._entities.get(id);\n};\n\n/**\n * Gets an entity with the specified id or creates it and adds it to the collection if it does not exist.\n *\n * @param {String} id The id of the entity to retrieve or create.\n * @returns {Entity} The new or existing object.\n */\nEntityCollection.prototype.getOrCreateEntity = function (id) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(id)) {\n throw new DeveloperError(\"id is required.\");\n }\n //>>includeEnd('debug');\n\n var entity = this._entities.get(id);\n if (!defined(entity)) {\n entityOptionsScratch.id = id;\n entity = new Entity(entityOptionsScratch);\n this.add(entity);\n }\n return entity;\n};\n\nEntityCollection.prototype._onEntityDefinitionChanged = function (entity) {\n var id = entity.id;\n if (!this._addedEntities.contains(id)) {\n this._changedEntities.set(id, entity);\n }\n fireChangedEvent(this);\n};\nexport default EntityCollection;\n","import createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Entity from \"./Entity.js\";\nimport EntityCollection from \"./EntityCollection.js\";\n\nvar entityOptionsScratch = {\n id: undefined,\n};\nvar entityIdScratch = new Array(2);\n\nfunction clean(entity) {\n var propertyNames = entity.propertyNames;\n var propertyNamesLength = propertyNames.length;\n for (var i = 0; i < propertyNamesLength; i++) {\n entity[propertyNames[i]] = undefined;\n }\n entity._name = undefined;\n entity._availability = undefined;\n}\n\nfunction subscribeToEntity(that, eventHash, collectionId, entity) {\n entityIdScratch[0] = collectionId;\n entityIdScratch[1] = entity.id;\n eventHash[\n JSON.stringify(entityIdScratch)\n ] = entity.definitionChanged.addEventListener(\n CompositeEntityCollection.prototype._onDefinitionChanged,\n that\n );\n}\n\nfunction unsubscribeFromEntity(that, eventHash, collectionId, entity) {\n entityIdScratch[0] = collectionId;\n entityIdScratch[1] = entity.id;\n var id = JSON.stringify(entityIdScratch);\n eventHash[id]();\n eventHash[id] = undefined;\n}\n\nfunction recomposite(that) {\n that._shouldRecomposite = true;\n if (that._suspendCount !== 0) {\n return;\n }\n\n var collections = that._collections;\n var collectionsLength = collections.length;\n\n var collectionsCopy = that._collectionsCopy;\n var collectionsCopyLength = collectionsCopy.length;\n\n var i;\n var entity;\n var entities;\n var iEntities;\n var collection;\n var composite = that._composite;\n var newEntities = new EntityCollection(that);\n var eventHash = that._eventHash;\n var collectionId;\n\n for (i = 0; i < collectionsCopyLength; i++) {\n collection = collectionsCopy[i];\n collection.collectionChanged.removeEventListener(\n CompositeEntityCollection.prototype._onCollectionChanged,\n that\n );\n entities = collection.values;\n collectionId = collection.id;\n for (iEntities = entities.length - 1; iEntities > -1; iEntities--) {\n entity = entities[iEntities];\n unsubscribeFromEntity(that, eventHash, collectionId, entity);\n }\n }\n\n for (i = collectionsLength - 1; i >= 0; i--) {\n collection = collections[i];\n collection.collectionChanged.addEventListener(\n CompositeEntityCollection.prototype._onCollectionChanged,\n that\n );\n\n //Merge all of the existing entities.\n entities = collection.values;\n collectionId = collection.id;\n for (iEntities = entities.length - 1; iEntities > -1; iEntities--) {\n entity = entities[iEntities];\n subscribeToEntity(that, eventHash, collectionId, entity);\n\n var compositeEntity = newEntities.getById(entity.id);\n if (!defined(compositeEntity)) {\n compositeEntity = composite.getById(entity.id);\n if (!defined(compositeEntity)) {\n entityOptionsScratch.id = entity.id;\n compositeEntity = new Entity(entityOptionsScratch);\n } else {\n clean(compositeEntity);\n }\n newEntities.add(compositeEntity);\n }\n compositeEntity.merge(entity);\n }\n }\n that._collectionsCopy = collections.slice(0);\n\n composite.suspendEvents();\n composite.removeAll();\n var newEntitiesArray = newEntities.values;\n for (i = 0; i < newEntitiesArray.length; i++) {\n composite.add(newEntitiesArray[i]);\n }\n composite.resumeEvents();\n}\n\n/**\n * Non-destructively composites multiple {@link EntityCollection} instances into a single collection.\n * If a Entity with the same ID exists in multiple collections, it is non-destructively\n * merged into a single new entity instance. If an entity has the same property in multiple\n * collections, the property of the Entity in the last collection of the list it\n * belongs to is used. CompositeEntityCollection can be used almost anywhere that a\n * EntityCollection is used.\n *\n * @alias CompositeEntityCollection\n * @constructor\n *\n * @param {EntityCollection[]} [collections] The initial list of EntityCollection instances to merge.\n * @param {DataSource|CompositeEntityCollection} [owner] The data source (or composite entity collection) which created this collection.\n */\nfunction CompositeEntityCollection(collections, owner) {\n this._owner = owner;\n this._composite = new EntityCollection(this);\n this._suspendCount = 0;\n this._collections = defined(collections) ? collections.slice() : [];\n this._collectionsCopy = [];\n this._id = createGuid();\n this._eventHash = {};\n recomposite(this);\n this._shouldRecomposite = false;\n}\n\nObject.defineProperties(CompositeEntityCollection.prototype, {\n /**\n * Gets the event that is fired when entities are added or removed from the collection.\n * The generated event is a {@link EntityCollection.collectionChangedEventCallback}.\n * @memberof CompositeEntityCollection.prototype\n * @readonly\n * @type {Event}\n */\n collectionChanged: {\n get: function () {\n return this._composite._collectionChanged;\n },\n },\n /**\n * Gets a globally unique identifier for this collection.\n * @memberof CompositeEntityCollection.prototype\n * @readonly\n * @type {String}\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * Gets the array of Entity instances in the collection.\n * This array should not be modified directly.\n * @memberof CompositeEntityCollection.prototype\n * @readonly\n * @type {Entity[]}\n */\n values: {\n get: function () {\n return this._composite.values;\n },\n },\n /**\n * Gets the owner of this composite entity collection, ie. the data source or composite entity collection which created it.\n * @memberof CompositeEntityCollection.prototype\n * @readonly\n * @type {DataSource|CompositeEntityCollection}\n */\n owner: {\n get: function () {\n return this._owner;\n },\n },\n});\n\n/**\n * Adds a collection to the composite.\n *\n * @param {EntityCollection} collection the collection to add.\n * @param {Number} [index] the index to add the collection at. If omitted, the collection will\n * added on top of all existing collections.\n *\n * @exception {DeveloperError} index, if supplied, must be greater than or equal to zero and less than or equal to the number of collections.\n */\nCompositeEntityCollection.prototype.addCollection = function (\n collection,\n index\n) {\n var hasIndex = defined(index);\n //>>includeStart('debug', pragmas.debug);\n if (!defined(collection)) {\n throw new DeveloperError(\"collection is required.\");\n }\n if (hasIndex) {\n if (index < 0) {\n throw new DeveloperError(\"index must be greater than or equal to zero.\");\n } else if (index > this._collections.length) {\n throw new DeveloperError(\n \"index must be less than or equal to the number of collections.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n if (!hasIndex) {\n index = this._collections.length;\n this._collections.push(collection);\n } else {\n this._collections.splice(index, 0, collection);\n }\n\n recomposite(this);\n};\n\n/**\n * Removes a collection from this composite, if present.\n *\n * @param {EntityCollection} collection The collection to remove.\n * @returns {Boolean} true if the collection was in the composite and was removed,\n * false if the collection was not in the composite.\n */\nCompositeEntityCollection.prototype.removeCollection = function (collection) {\n var index = this._collections.indexOf(collection);\n if (index !== -1) {\n this._collections.splice(index, 1);\n recomposite(this);\n return true;\n }\n return false;\n};\n\n/**\n * Removes all collections from this composite.\n */\nCompositeEntityCollection.prototype.removeAllCollections = function () {\n this._collections.length = 0;\n recomposite(this);\n};\n\n/**\n * Checks to see if the composite contains a given collection.\n *\n * @param {EntityCollection} collection the collection to check for.\n * @returns {Boolean} true if the composite contains the collection, false otherwise.\n */\nCompositeEntityCollection.prototype.containsCollection = function (collection) {\n return this._collections.indexOf(collection) !== -1;\n};\n\n/**\n * Returns true if the provided entity is in this collection, false otherwise.\n *\n * @param {Entity} entity The entity.\n * @returns {Boolean} true if the provided entity is in this collection, false otherwise.\n */\nCompositeEntityCollection.prototype.contains = function (entity) {\n return this._composite.contains(entity);\n};\n\n/**\n * Determines the index of a given collection in the composite.\n *\n * @param {EntityCollection} collection The collection to find the index of.\n * @returns {Number} The index of the collection in the composite, or -1 if the collection does not exist in the composite.\n */\nCompositeEntityCollection.prototype.indexOfCollection = function (collection) {\n return this._collections.indexOf(collection);\n};\n\n/**\n * Gets a collection by index from the composite.\n *\n * @param {Number} index the index to retrieve.\n */\nCompositeEntityCollection.prototype.getCollection = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\", \"index\");\n }\n //>>includeEnd('debug');\n\n return this._collections[index];\n};\n\n/**\n * Gets the number of collections in this composite.\n */\nCompositeEntityCollection.prototype.getCollectionsLength = function () {\n return this._collections.length;\n};\n\nfunction getCollectionIndex(collections, collection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(collection)) {\n throw new DeveloperError(\"collection is required.\");\n }\n //>>includeEnd('debug');\n\n var index = collections.indexOf(collection);\n\n //>>includeStart('debug', pragmas.debug);\n if (index === -1) {\n throw new DeveloperError(\"collection is not in this composite.\");\n }\n //>>includeEnd('debug');\n\n return index;\n}\n\nfunction swapCollections(composite, i, j) {\n var arr = composite._collections;\n i = CesiumMath.clamp(i, 0, arr.length - 1);\n j = CesiumMath.clamp(j, 0, arr.length - 1);\n\n if (i === j) {\n return;\n }\n\n var temp = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n\n recomposite(composite);\n}\n\n/**\n * Raises a collection up one position in the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.raiseCollection = function (collection) {\n var index = getCollectionIndex(this._collections, collection);\n swapCollections(this, index, index + 1);\n};\n\n/**\n * Lowers a collection down one position in the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.lowerCollection = function (collection) {\n var index = getCollectionIndex(this._collections, collection);\n swapCollections(this, index, index - 1);\n};\n\n/**\n * Raises a collection to the top of the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.raiseCollectionToTop = function (\n collection\n) {\n var index = getCollectionIndex(this._collections, collection);\n if (index === this._collections.length - 1) {\n return;\n }\n this._collections.splice(index, 1);\n this._collections.push(collection);\n\n recomposite(this);\n};\n\n/**\n * Lowers a collection to the bottom of the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.lowerCollectionToBottom = function (\n collection\n) {\n var index = getCollectionIndex(this._collections, collection);\n if (index === 0) {\n return;\n }\n this._collections.splice(index, 1);\n this._collections.splice(0, 0, collection);\n\n recomposite(this);\n};\n\n/**\n * Prevents {@link EntityCollection#collectionChanged} events from being raised\n * until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which\n * point a single event will be raised that covers all suspended operations.\n * This allows for many items to be added and removed efficiently.\n * While events are suspended, recompositing of the collections will\n * also be suspended, as this can be a costly operation.\n * This function can be safely called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n */\nCompositeEntityCollection.prototype.suspendEvents = function () {\n this._suspendCount++;\n this._composite.suspendEvents();\n};\n\n/**\n * Resumes raising {@link EntityCollection#collectionChanged} events immediately\n * when an item is added or removed. Any modifications made while while events were suspended\n * will be triggered as a single event when this function is called. This function also ensures\n * the collection is recomposited if events are also resumed.\n * This function is reference counted and can safely be called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n *\n * @exception {DeveloperError} resumeEvents can not be called before suspendEvents.\n */\nCompositeEntityCollection.prototype.resumeEvents = function () {\n //>>includeStart('debug', pragmas.debug);\n if (this._suspendCount === 0) {\n throw new DeveloperError(\n \"resumeEvents can not be called before suspendEvents.\"\n );\n }\n //>>includeEnd('debug');\n\n this._suspendCount--;\n // recomposite before triggering events (but only if required for performance) that might depend on a composited collection\n if (this._shouldRecomposite && this._suspendCount === 0) {\n recomposite(this);\n this._shouldRecomposite = false;\n }\n\n this._composite.resumeEvents();\n};\n\n/**\n * Computes the maximum availability of the entities in the collection.\n * If the collection contains a mix of infinitely available data and non-infinite data,\n * It will return the interval pertaining to the non-infinite data only. If all\n * data is infinite, an infinite interval will be returned.\n *\n * @returns {TimeInterval} The availability of entities in the collection.\n */\nCompositeEntityCollection.prototype.computeAvailability = function () {\n return this._composite.computeAvailability();\n};\n\n/**\n * Gets an entity with the specified id.\n *\n * @param {String} id The id of the entity to retrieve.\n * @returns {Entity|undefined} The entity with the provided id or undefined if the id did not exist in the collection.\n */\nCompositeEntityCollection.prototype.getById = function (id) {\n return this._composite.getById(id);\n};\n\nCompositeEntityCollection.prototype._onCollectionChanged = function (\n collection,\n added,\n removed\n) {\n var collections = this._collectionsCopy;\n var collectionsLength = collections.length;\n var composite = this._composite;\n composite.suspendEvents();\n\n var i;\n var q;\n var entity;\n var compositeEntity;\n var removedLength = removed.length;\n var eventHash = this._eventHash;\n var collectionId = collection.id;\n for (i = 0; i < removedLength; i++) {\n var removedEntity = removed[i];\n unsubscribeFromEntity(this, eventHash, collectionId, removedEntity);\n\n var removedId = removedEntity.id;\n //Check if the removed entity exists in any of the remaining collections\n //If so, we clean and remerge it.\n for (q = collectionsLength - 1; q >= 0; q--) {\n entity = collections[q].getById(removedId);\n if (defined(entity)) {\n if (!defined(compositeEntity)) {\n compositeEntity = composite.getById(removedId);\n clean(compositeEntity);\n }\n compositeEntity.merge(entity);\n }\n }\n //We never retrieved the compositeEntity, which means it no longer\n //exists in any of the collections, remove it from the composite.\n if (!defined(compositeEntity)) {\n composite.removeById(removedId);\n }\n compositeEntity = undefined;\n }\n\n var addedLength = added.length;\n for (i = 0; i < addedLength; i++) {\n var addedEntity = added[i];\n subscribeToEntity(this, eventHash, collectionId, addedEntity);\n\n var addedId = addedEntity.id;\n //We know the added entity exists in at least one collection,\n //but we need to check all collections and re-merge in order\n //to maintain the priority of properties.\n for (q = collectionsLength - 1; q >= 0; q--) {\n entity = collections[q].getById(addedId);\n if (defined(entity)) {\n if (!defined(compositeEntity)) {\n compositeEntity = composite.getById(addedId);\n if (!defined(compositeEntity)) {\n entityOptionsScratch.id = addedId;\n compositeEntity = new Entity(entityOptionsScratch);\n composite.add(compositeEntity);\n } else {\n clean(compositeEntity);\n }\n }\n compositeEntity.merge(entity);\n }\n }\n compositeEntity = undefined;\n }\n\n composite.resumeEvents();\n};\n\nCompositeEntityCollection.prototype._onDefinitionChanged = function (\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n var collections = this._collections;\n var composite = this._composite;\n\n var collectionsLength = collections.length;\n var id = entity.id;\n var compositeEntity = composite.getById(id);\n var compositeProperty = compositeEntity[propertyName];\n var newProperty = !defined(compositeProperty);\n\n var firstTime = true;\n for (var q = collectionsLength - 1; q >= 0; q--) {\n var innerEntity = collections[q].getById(entity.id);\n if (defined(innerEntity)) {\n var property = innerEntity[propertyName];\n if (defined(property)) {\n if (firstTime) {\n firstTime = false;\n //We only want to clone if the property is also mergeable.\n //This ensures that leaf properties are referenced and not copied,\n //which is the entire point of compositing.\n if (defined(property.merge) && defined(property.clone)) {\n compositeProperty = property.clone(compositeProperty);\n } else {\n compositeProperty = property;\n break;\n }\n }\n compositeProperty.merge(property);\n }\n }\n }\n\n if (\n newProperty &&\n compositeEntity.propertyNames.indexOf(propertyName) === -1\n ) {\n compositeEntity.addProperty(propertyName);\n }\n\n compositeEntity[propertyName] = compositeProperty;\n};\nexport default CompositeEntityCollection;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport Property from \"./Property.js\";\n\nfunction subscribeAll(property, eventHelper, definitionChanged, intervals) {\n function callback() {\n definitionChanged.raiseEvent(property);\n }\n var items = [];\n eventHelper.removeAll();\n var length = intervals.length;\n for (var i = 0; i < length; i++) {\n var interval = intervals.get(i);\n if (defined(interval.data) && items.indexOf(interval.data) === -1) {\n eventHelper.add(interval.data.definitionChanged, callback);\n }\n }\n}\n\n/**\n * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the\n * data property of each {@link TimeInterval} is another Property instance which is\n * evaluated at the provided time.\n *\n * @alias CompositeProperty\n * @constructor\n *\n *\n * @example\n * var constantProperty = ...;\n * var sampledProperty = ...;\n *\n * //Create a composite property from two previously defined properties\n * //where the property is valid on August 1st, 2012 and uses a constant\n * //property for the first half of the day and a sampled property for the\n * //remaining half.\n * var composite = new Cesium.CompositeProperty();\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T12:00:00.00Z',\n * data : constantProperty\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T12:00:00.00Z/2012-08-02T00:00:00.00Z',\n * isStartIncluded : false,\n * isStopIncluded : false,\n * data : sampledProperty\n * }));\n *\n * @see CompositeMaterialProperty\n * @see CompositePositionProperty\n */\nfunction CompositeProperty() {\n this._eventHelper = new EventHelper();\n this._definitionChanged = new Event();\n this._intervals = new TimeIntervalCollection();\n this._intervals.changedEvent.addEventListener(\n CompositeProperty.prototype._intervalsChanged,\n this\n );\n}\n\nObject.defineProperties(CompositeProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof CompositeProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._intervals.isEmpty;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value.\n * @memberof CompositeProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the interval collection.\n * @memberof CompositeProperty.prototype\n *\n * @type {TimeIntervalCollection}\n */\n intervals: {\n get: function () {\n return this._intervals;\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositeProperty.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required\");\n }\n //>>includeEnd('debug');\n\n var innerProperty = this._intervals.findDataForIntervalContainingDate(time);\n if (defined(innerProperty)) {\n return innerProperty.getValue(time, result);\n }\n return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositeProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof CompositeProperty && //\n this._intervals.equals(other._intervals, Property.equals))\n );\n};\n\n/**\n * @private\n */\nCompositeProperty.prototype._intervalsChanged = function () {\n subscribeAll(\n this,\n this._eventHelper,\n this._definitionChanged,\n this._intervals\n );\n this._definitionChanged.raiseEvent(this);\n};\nexport default CompositeProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link CompositeProperty} which is also a {@link MaterialProperty}.\n *\n * @alias CompositeMaterialProperty\n * @constructor\n */\nfunction CompositeMaterialProperty() {\n this._definitionChanged = new Event();\n this._composite = new CompositeProperty();\n this._composite.definitionChanged.addEventListener(\n CompositeMaterialProperty.prototype._raiseDefinitionChanged,\n this\n );\n}\n\nObject.defineProperties(CompositeMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof CompositeMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._composite.isConstant;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value.\n * @memberof CompositeMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the interval collection.\n * @memberof CompositeMaterialProperty.prototype\n *\n * @type {TimeIntervalCollection}\n */\n intervals: {\n get: function () {\n return this._composite._intervals;\n },\n },\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nCompositeMaterialProperty.prototype.getType = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required\");\n }\n //>>includeEnd('debug');\n\n var innerProperty = this._composite._intervals.findDataForIntervalContainingDate(\n time\n );\n if (defined(innerProperty)) {\n return innerProperty.getType(time);\n }\n return undefined;\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositeMaterialProperty.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required\");\n }\n //>>includeEnd('debug');\n\n var innerProperty = this._composite._intervals.findDataForIntervalContainingDate(\n time\n );\n if (defined(innerProperty)) {\n return innerProperty.getValue(time, result);\n }\n return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositeMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof CompositeMaterialProperty && //\n this._composite.equals(other._composite, Property.equals))\n );\n};\n\n/**\n * @private\n */\nCompositeMaterialProperty.prototype._raiseDefinitionChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default CompositeMaterialProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link CompositeProperty} which is also a {@link PositionProperty}.\n *\n * @alias CompositePositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction CompositePositionProperty(referenceFrame) {\n this._referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n this._definitionChanged = new Event();\n this._composite = new CompositeProperty();\n this._composite.definitionChanged.addEventListener(\n CompositePositionProperty.prototype._raiseDefinitionChanged,\n this\n );\n}\n\nObject.defineProperties(CompositePositionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof CompositePositionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._composite.isConstant;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value.\n * @memberof CompositePositionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the interval collection.\n * @memberof CompositePositionProperty.prototype\n *\n * @type {TimeIntervalCollection}\n */\n intervals: {\n get: function () {\n return this._composite.intervals;\n },\n },\n /**\n * Gets or sets the reference frame which this position presents itself as.\n * Each PositionProperty making up this object has it's own reference frame,\n * so this property merely exposes a \"preferred\" reference frame for clients\n * to use.\n * @memberof CompositePositionProperty.prototype\n *\n * @type {ReferenceFrame}\n */\n referenceFrame: {\n get: function () {\n return this._referenceFrame;\n },\n set: function (value) {\n this._referenceFrame = value;\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositePositionProperty.prototype.getValue = function (time, result) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositePositionProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (!defined(referenceFrame)) {\n throw new DeveloperError(\"referenceFrame is required.\");\n }\n //>>includeEnd('debug');\n\n var innerProperty = this._composite._intervals.findDataForIntervalContainingDate(\n time\n );\n if (defined(innerProperty)) {\n return innerProperty.getValueInReferenceFrame(time, referenceFrame, result);\n }\n return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositePositionProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof CompositePositionProperty && //\n this._referenceFrame === other._referenceFrame && //\n this._composite.equals(other._composite, Property.equals))\n );\n};\n\n/**\n * @private\n */\nCompositePositionProperty.prototype._raiseDefinitionChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default CompositePositionProperty;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport TerrainOffsetProperty from \"./TerrainOffsetProperty.js\";\n\nvar defaultZIndex = new ConstantProperty(0);\n\n/**\n * An abstract class for updating ground geometry entities.\n * @constructor\n * @alias GroundGeometryUpdater\n * @param {Object} options An object with the following properties:\n * @param {Entity} options.entity The entity containing the geometry to be visualized.\n * @param {Scene} options.scene The scene where visualization is taking place.\n * @param {Object} options.geometryOptions Options for the geometry\n * @param {String} options.geometryPropertyName The geometry property name\n * @param {String[]} options.observedPropertyNames The entity properties this geometry cares about\n */\nfunction GroundGeometryUpdater(options) {\n GeometryUpdater.call(this, options);\n\n this._zIndex = 0;\n this._terrainOffsetProperty = undefined;\n}\n\nif (defined(Object.create)) {\n GroundGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n GroundGeometryUpdater.prototype.constructor = GroundGeometryUpdater;\n}\n\nObject.defineProperties(GroundGeometryUpdater.prototype, {\n /**\n * Gets the zindex\n * @type {Number}\n * @memberof GroundGeometryUpdater.prototype\n * @readonly\n */\n zIndex: {\n get: function () {\n return this._zIndex;\n },\n },\n\n /**\n * Gets the terrain offset property\n * @type {TerrainOffsetProperty}\n * @memberof GroundGeometryUpdater.prototype\n * @readonly\n * @private\n */\n terrainOffsetProperty: {\n get: function () {\n return this._terrainOffsetProperty;\n },\n },\n});\n\nGroundGeometryUpdater.prototype._isOnTerrain = function (entity, geometry) {\n return (\n this._fillEnabled &&\n !defined(geometry.height) &&\n !defined(geometry.extrudedHeight) &&\n GroundPrimitive.isSupported(this._scene)\n );\n};\n\nGroundGeometryUpdater.prototype._getIsClosed = function (options) {\n var height = options.height;\n var extrudedHeight = options.extrudedHeight;\n return height === 0 || (defined(extrudedHeight) && extrudedHeight !== height);\n};\n\nGroundGeometryUpdater.prototype._computeCenter =\n DeveloperError.throwInstantiationError;\n\nGroundGeometryUpdater.prototype._onEntityPropertyChanged = function (\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n GeometryUpdater.prototype._onEntityPropertyChanged.call(\n this,\n entity,\n propertyName,\n newValue,\n oldValue\n );\n if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n return;\n }\n\n var geometry = this._entity[this._geometryPropertyName];\n if (!defined(geometry)) {\n return;\n }\n if (\n defined(geometry.zIndex) &&\n (defined(geometry.height) || defined(geometry.extrudedHeight))\n ) {\n oneTimeWarning(oneTimeWarning.geometryZIndex);\n }\n\n this._zIndex = defaultValue(geometry.zIndex, defaultZIndex);\n\n if (defined(this._terrainOffsetProperty)) {\n this._terrainOffsetProperty.destroy();\n this._terrainOffsetProperty = undefined;\n }\n\n var heightReferenceProperty = geometry.heightReference;\n var extrudedHeightReferenceProperty = geometry.extrudedHeightReference;\n\n if (\n defined(heightReferenceProperty) ||\n defined(extrudedHeightReferenceProperty)\n ) {\n var centerPosition = new CallbackProperty(\n this._computeCenter.bind(this),\n !this._dynamic\n );\n this._terrainOffsetProperty = new TerrainOffsetProperty(\n this._scene,\n centerPosition,\n heightReferenceProperty,\n extrudedHeightReferenceProperty\n );\n }\n};\n\n/**\n * Destroys and resources used by the object. Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nGroundGeometryUpdater.prototype.destroy = function () {\n if (defined(this._terrainOffsetProperty)) {\n this._terrainOffsetProperty.destroy();\n this._terrainOffsetProperty = undefined;\n }\n\n GeometryUpdater.prototype.destroy.call(this);\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.getGeometryHeight = function (height, heightReference) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"heightReference\", heightReference);\n //>>includeEnd('debug');\n if (!defined(height)) {\n if (heightReference !== HeightReference.NONE) {\n oneTimeWarning(oneTimeWarning.geometryHeightReference);\n }\n return;\n }\n\n if (heightReference !== HeightReference.CLAMP_TO_GROUND) {\n return height;\n }\n return 0.0;\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.getGeometryExtrudedHeight = function (\n extrudedHeight,\n extrudedHeightReference\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"extrudedHeightReference\", extrudedHeightReference);\n //>>includeEnd('debug');\n if (!defined(extrudedHeight)) {\n if (extrudedHeightReference !== HeightReference.NONE) {\n oneTimeWarning(oneTimeWarning.geometryExtrudedHeightReference);\n }\n return;\n }\n if (extrudedHeightReference !== HeightReference.CLAMP_TO_GROUND) {\n return extrudedHeight;\n }\n\n return GroundGeometryUpdater.CLAMP_TO_GROUND;\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.CLAMP_TO_GROUND = \"clamp\";\n\n/**\n * @private\n */\nGroundGeometryUpdater.computeGeometryOffsetAttribute = function (\n height,\n heightReference,\n extrudedHeight,\n extrudedHeightReference\n) {\n if (!defined(height) || !defined(heightReference)) {\n heightReference = HeightReference.NONE;\n }\n if (!defined(extrudedHeight) || !defined(extrudedHeightReference)) {\n extrudedHeightReference = HeightReference.NONE;\n }\n var n = 0;\n if (heightReference !== HeightReference.NONE) {\n n++;\n }\n if (extrudedHeightReference === HeightReference.RELATIVE_TO_GROUND) {\n n++;\n }\n if (n === 2) {\n return GeometryOffsetAttribute.ALL;\n }\n if (n === 1) {\n return GeometryOffsetAttribute.TOP;\n }\n\n return undefined;\n};\nexport default GroundGeometryUpdater;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CorridorGeometry from \"../Core/CorridorGeometry.js\";\nimport CorridorOutlineGeometry from \"../Core/CorridorOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\nvar scratchRectangle = new Rectangle();\n\nfunction CorridorGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.positions = undefined;\n this.width = undefined;\n this.cornerType = undefined;\n this.height = undefined;\n this.extrudedHeight = undefined;\n this.granularity = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for corridors.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias CorridorGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction CorridorGeometryUpdater(entity, scene) {\n GroundGeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new CorridorGeometryOptions(entity),\n geometryPropertyName: \"corridor\",\n observedPropertyNames: [\"availability\", \"corridor\"],\n });\n\n this._onEntityPropertyChanged(entity, \"corridor\", entity.corridor, undefined);\n}\n\nif (defined(Object.create)) {\n CorridorGeometryUpdater.prototype = Object.create(\n GroundGeometryUpdater.prototype\n );\n CorridorGeometryUpdater.prototype.constructor = CorridorGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nCorridorGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n ),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n this._distanceDisplayConditionProperty.getValue(time)\n ),\n offset: undefined,\n color: undefined,\n };\n\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new CorridorGeometry(this._options),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nCorridorGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n this._distanceDisplayConditionProperty.getValue(time)\n ),\n offset: undefined,\n };\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new CorridorOutlineGeometry(this._options),\n attributes: attributes,\n });\n};\n\nCorridorGeometryUpdater.prototype._computeCenter = function (time, result) {\n var positions = Property.getValueOrUndefined(\n this._entity.corridor.positions,\n time\n );\n if (!defined(positions) || positions.length === 0) {\n return;\n }\n return Cartesian3.clone(\n positions[Math.floor(positions.length / 2.0)],\n result\n );\n};\n\nCorridorGeometryUpdater.prototype._isHidden = function (entity, corridor) {\n return (\n !defined(corridor.positions) ||\n !defined(corridor.width) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, corridor)\n );\n};\n\nCorridorGeometryUpdater.prototype._isDynamic = function (entity, corridor) {\n return (\n !corridor.positions.isConstant || //\n !Property.isConstant(corridor.height) || //\n !Property.isConstant(corridor.extrudedHeight) || //\n !Property.isConstant(corridor.granularity) || //\n !Property.isConstant(corridor.width) || //\n !Property.isConstant(corridor.outlineWidth) || //\n !Property.isConstant(corridor.cornerType) || //\n !Property.isConstant(corridor.zIndex) || //\n (this._onTerrain &&\n !Property.isConstant(this._materialProperty) &&\n !(this._materialProperty instanceof ColorMaterialProperty))\n );\n};\n\nCorridorGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n corridor\n) {\n var heightValue = Property.getValueOrUndefined(\n corridor.height,\n Iso8601.MINIMUM_VALUE\n );\n var heightReferenceValue = Property.getValueOrDefault(\n corridor.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n corridor.extrudedHeight,\n Iso8601.MINIMUM_VALUE\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n corridor.extrudedHeightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n var options = this._options;\n options.vertexFormat =\n this._materialProperty instanceof ColorMaterialProperty\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.positions = corridor.positions.getValue(\n Iso8601.MINIMUM_VALUE,\n options.positions\n );\n options.width = corridor.width.getValue(Iso8601.MINIMUM_VALUE);\n options.granularity = Property.getValueOrUndefined(\n corridor.granularity,\n Iso8601.MINIMUM_VALUE\n );\n options.cornerType = Property.getValueOrUndefined(\n corridor.cornerType,\n Iso8601.MINIMUM_VALUE\n );\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n CorridorGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\n\nCorridorGeometryUpdater.DynamicGeometryUpdater = DynamicCorridorGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicCorridorGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicCorridorGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicCorridorGeometryUpdater.prototype.constructor = DynamicCorridorGeometryUpdater;\n}\n\nDynamicCorridorGeometryUpdater.prototype._isHidden = function (\n entity,\n corridor,\n time\n) {\n var options = this._options;\n return (\n !defined(options.positions) ||\n !defined(options.width) ||\n DynamicGeometryUpdater.prototype._isHidden.call(\n this,\n entity,\n corridor,\n time\n )\n );\n};\n\nDynamicCorridorGeometryUpdater.prototype._setOptions = function (\n entity,\n corridor,\n time\n) {\n var options = this._options;\n var heightValue = Property.getValueOrUndefined(corridor.height, time);\n var heightReferenceValue = Property.getValueOrDefault(\n corridor.heightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n corridor.extrudedHeight,\n time\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n corridor.extrudedHeightReference,\n time,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n options.positions = Property.getValueOrUndefined(corridor.positions, time);\n options.width = Property.getValueOrUndefined(corridor.width, time);\n options.granularity = Property.getValueOrUndefined(\n corridor.granularity,\n time\n );\n options.cornerType = Property.getValueOrUndefined(corridor.cornerType, time);\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n CorridorGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\nexport default CorridorGeometryUpdater;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines the interface for data sources, which turn arbitrary data into a\n * {@link EntityCollection} for generic consumption. This object is an interface\n * for documentation purposes and is not intended to be instantiated directly.\n * @alias DataSource\n * @constructor\n *\n * @see Entity\n * @see DataSourceDisplay\n */\nfunction DataSource() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(DataSource.prototype, {\n /**\n * Gets a human-readable name for this instance.\n * @memberof DataSource.prototype\n * @type {String}\n */\n name: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the preferred clock settings for this data source.\n * @memberof DataSource.prototype\n * @type {DataSourceClock}\n */\n clock: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets the collection of {@link Entity} instances.\n * @memberof DataSource.prototype\n * @type {EntityCollection}\n */\n entities: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets a value indicating if the data source is currently loading data.\n * @memberof DataSource.prototype\n * @type {Boolean}\n */\n isLoading: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets an event that will be raised when the underlying data changes.\n * @memberof DataSource.prototype\n * @type {Event}\n */\n changedEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets an event that will be raised if an error is encountered during processing.\n * @memberof DataSource.prototype\n * @type {Event}\n */\n errorEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets an event that will be raised when the value of isLoading changes.\n * @memberof DataSource.prototype\n * @type {Event}\n */\n loadingEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n /**\n * Gets whether or not this data source should be displayed.\n * @memberof DataSource.prototype\n * @type {Boolean}\n */\n show: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n *\n * @memberof DataSource.prototype\n * @type {EntityCluster}\n */\n clustering: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Updates the data source to the provided time. This function is optional and\n * is not required to be implemented. It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nDataSource.prototype.update = function (time) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * @private\n */\nDataSource.setLoading = function (dataSource, isLoading) {\n if (dataSource._isLoading !== isLoading) {\n if (isLoading) {\n dataSource._entityCollection.suspendEvents();\n } else {\n dataSource._entityCollection.resumeEvents();\n }\n dataSource._isLoading = isLoading;\n dataSource._loading.raiseEvent(dataSource, isLoading);\n }\n};\nexport default DataSource;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\n\n/**\n * A graphical point positioned in the 3D scene, that is created\n * and rendered using a {@link PointPrimitiveCollection}. A point is created and its initial\n * properties are set by calling {@link PointPrimitiveCollection#add}.\n *\n * @alias PointPrimitive\n *\n * @performance Reading a property, e.g., {@link PointPrimitive#show}, is constant time.\n * Assigning to a property is constant time but results in\n * CPU to GPU traffic when {@link PointPrimitiveCollection#update} is called. The per-pointPrimitive traffic is\n * the same regardless of how many properties were updated. If most pointPrimitives in a collection need to be\n * updated, it may be more efficient to clear the collection with {@link PointPrimitiveCollection#removeAll}\n * and add new pointPrimitives instead of modifying each one.\n *\n * @exception {DeveloperError} scaleByDistance.far must be greater than scaleByDistance.near\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see PointPrimitiveCollection\n * @see PointPrimitiveCollection#add\n *\n * @internalConstructor\n * @class\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Points.html|Cesium Sandcastle Points Demo}\n */\nfunction PointPrimitive(options, pointPrimitiveCollection) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (\n defined(options.disableDepthTestDistance) &&\n options.disableDepthTestDistance < 0.0\n ) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than or equal to 0.0.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = options.translucencyByDistance;\n var scaleByDistance = options.scaleByDistance;\n var distanceDisplayCondition = options.distanceDisplayCondition;\n if (defined(translucencyByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (translucencyByDistance.far <= translucencyByDistance.near) {\n throw new DeveloperError(\n \"translucencyByDistance.far must be greater than translucencyByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n }\n if (defined(scaleByDistance)) {\n //>>includeStart('debug', pragmas.debug);\n if (scaleByDistance.far <= scaleByDistance.near) {\n throw new DeveloperError(\n \"scaleByDistance.far must be greater than scaleByDistance.near.\"\n );\n }\n //>>includeEnd('debug');\n scaleByDistance = NearFarScalar.clone(scaleByDistance);\n }\n if (defined(distanceDisplayCondition)) {\n //>>includeStart('debug', pragmas.debug);\n if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n throw new DeveloperError(\n \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\"\n );\n }\n //>>includeEnd('debug');\n distanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition\n );\n }\n\n this._show = defaultValue(options.show, true);\n this._position = Cartesian3.clone(\n defaultValue(options.position, Cartesian3.ZERO)\n );\n this._actualPosition = Cartesian3.clone(this._position); // For columbus view and 2D\n this._color = Color.clone(defaultValue(options.color, Color.WHITE));\n this._outlineColor = Color.clone(\n defaultValue(options.outlineColor, Color.TRANSPARENT)\n );\n this._outlineWidth = defaultValue(options.outlineWidth, 0.0);\n this._pixelSize = defaultValue(options.pixelSize, 10.0);\n this._scaleByDistance = scaleByDistance;\n this._translucencyByDistance = translucencyByDistance;\n this._distanceDisplayCondition = distanceDisplayCondition;\n this._disableDepthTestDistance = defaultValue(\n options.disableDepthTestDistance,\n 0.0\n );\n this._id = options.id;\n this._collection = defaultValue(options.collection, pointPrimitiveCollection);\n\n this._clusterShow = true;\n\n this._pickId = undefined;\n this._pointPrimitiveCollection = pointPrimitiveCollection;\n this._dirty = false;\n this._index = -1; //Used only by PointPrimitiveCollection\n}\n\nvar SHOW_INDEX = (PointPrimitive.SHOW_INDEX = 0);\nvar POSITION_INDEX = (PointPrimitive.POSITION_INDEX = 1);\nvar COLOR_INDEX = (PointPrimitive.COLOR_INDEX = 2);\nvar OUTLINE_COLOR_INDEX = (PointPrimitive.OUTLINE_COLOR_INDEX = 3);\nvar OUTLINE_WIDTH_INDEX = (PointPrimitive.OUTLINE_WIDTH_INDEX = 4);\nvar PIXEL_SIZE_INDEX = (PointPrimitive.PIXEL_SIZE_INDEX = 5);\nvar SCALE_BY_DISTANCE_INDEX = (PointPrimitive.SCALE_BY_DISTANCE_INDEX = 6);\nvar TRANSLUCENCY_BY_DISTANCE_INDEX = (PointPrimitive.TRANSLUCENCY_BY_DISTANCE_INDEX = 7);\nvar DISTANCE_DISPLAY_CONDITION_INDEX = (PointPrimitive.DISTANCE_DISPLAY_CONDITION_INDEX = 8);\nvar DISABLE_DEPTH_DISTANCE_INDEX = (PointPrimitive.DISABLE_DEPTH_DISTANCE_INDEX = 9);\nPointPrimitive.NUMBER_OF_PROPERTIES = 10;\n\nfunction makeDirty(pointPrimitive, propertyChanged) {\n var pointPrimitiveCollection = pointPrimitive._pointPrimitiveCollection;\n if (defined(pointPrimitiveCollection)) {\n pointPrimitiveCollection._updatePointPrimitive(\n pointPrimitive,\n propertyChanged\n );\n pointPrimitive._dirty = true;\n }\n}\n\nObject.defineProperties(PointPrimitive.prototype, {\n /**\n * Determines if this point will be shown. Use this to hide or show a point, instead\n * of removing it and re-adding it to the collection.\n * @memberof PointPrimitive.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._show;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._show !== value) {\n this._show = value;\n makeDirty(this, SHOW_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the Cartesian position of this point.\n * @memberof PointPrimitive.prototype\n * @type {Cartesian3}\n */\n position: {\n get: function () {\n return this._position;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug)\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var position = this._position;\n if (!Cartesian3.equals(position, value)) {\n Cartesian3.clone(value, position);\n Cartesian3.clone(value, this._actualPosition);\n\n makeDirty(this, POSITION_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets near and far scaling properties of a point based on the point's distance from the camera.\n * A point's scale will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the point's scale remains clamped to the nearest bound. This scale\n * multiplies the pixelSize and outlineWidth to affect the total size of the point. If undefined,\n * scaleByDistance will be disabled.\n * @memberof PointPrimitive.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a pointPrimitive's scaleByDistance to scale to 15 when the\n * // camera is 1500 meters from the pointPrimitive and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * p.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 15, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable scaling by distance\n * p.scaleByDistance = undefined;\n */\n scaleByDistance: {\n get: function () {\n return this._scaleByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var scaleByDistance = this._scaleByDistance;\n if (!NearFarScalar.equals(scaleByDistance, value)) {\n this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n makeDirty(this, SCALE_BY_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets near and far translucency properties of a point based on the point's distance from the camera.\n * A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the point's translucency remains clamped to the nearest bound. If undefined,\n * translucencyByDistance will be disabled.\n * @memberof PointPrimitive.prototype\n * @type {NearFarScalar}\n *\n * @example\n * // Example 1.\n * // Set a point's translucency to 1.0 when the\n * // camera is 1500 meters from the point and disappear as\n * // the camera distance approaches 8.0e6 meters.\n * p.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n *\n * @example\n * // Example 2.\n * // disable translucency by distance\n * p.translucencyByDistance = undefined;\n */\n translucencyByDistance: {\n get: function () {\n return this._translucencyByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n\n var translucencyByDistance = this._translucencyByDistance;\n if (!NearFarScalar.equals(translucencyByDistance, value)) {\n this._translucencyByDistance = NearFarScalar.clone(\n value,\n translucencyByDistance\n );\n makeDirty(this, TRANSLUCENCY_BY_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the inner size of the point in pixels.\n * @memberof PointPrimitive.prototype\n * @type {Number}\n */\n pixelSize: {\n get: function () {\n return this._pixelSize;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._pixelSize !== value) {\n this._pixelSize = value;\n makeDirty(this, PIXEL_SIZE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the inner color of the point.\n * The red, green, blue, and alpha values are indicated by <code>value</code>'s <code>red</code>, <code>green</code>,\n * <code>blue</code>, and <code>alpha</code> properties as shown in Example 1. These components range from <code>0.0</code>\n * (no intensity) to <code>1.0</code> (full intensity).\n * @memberof PointPrimitive.prototype\n * @type {Color}\n *\n * @example\n * // Example 1. Assign yellow.\n * p.color = Cesium.Color.YELLOW;\n *\n * @example\n * // Example 2. Make a pointPrimitive 50% translucent.\n * p.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5);\n */\n color: {\n get: function () {\n return this._color;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var color = this._color;\n if (!Color.equals(color, value)) {\n Color.clone(value, color);\n makeDirty(this, COLOR_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the outline color of the point.\n * @memberof PointPrimitive.prototype\n * @type {Color}\n */\n outlineColor: {\n get: function () {\n return this._outlineColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n var outlineColor = this._outlineColor;\n if (!Color.equals(outlineColor, value)) {\n Color.clone(value, outlineColor);\n makeDirty(this, OUTLINE_COLOR_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the outline width in pixels. This width adds to pixelSize,\n * increasing the total size of the point.\n * @memberof PointPrimitive.prototype\n * @type {Number}\n */\n outlineWidth: {\n get: function () {\n return this._outlineWidth;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._outlineWidth !== value) {\n this._outlineWidth = value;\n makeDirty(this, OUTLINE_WIDTH_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the condition specifying at what distance from the camera that this point will be displayed.\n * @memberof PointPrimitive.prototype\n * @type {DistanceDisplayCondition}\n * @default undefined\n */\n distanceDisplayCondition: {\n get: function () {\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far <= value.near) {\n throw new DeveloperError(\"far must be greater than near\");\n }\n //>>includeEnd('debug');\n if (\n !DistanceDisplayCondition.equals(this._distanceDisplayCondition, value)\n ) {\n this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n value,\n this._distanceDisplayCondition\n );\n makeDirty(this, DISTANCE_DISPLAY_CONDITION_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n * @memberof PointPrimitive.prototype\n * @type {Number}\n * @default 0.0\n */\n disableDepthTestDistance: {\n get: function () {\n return this._disableDepthTestDistance;\n },\n set: function (value) {\n if (this._disableDepthTestDistance !== value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value) || value < 0.0) {\n throw new DeveloperError(\n \"disableDepthTestDistance must be greater than or equal to 0.0.\"\n );\n }\n //>>includeEnd('debug');\n this._disableDepthTestDistance = value;\n makeDirty(this, DISABLE_DEPTH_DISTANCE_INDEX);\n }\n },\n },\n\n /**\n * Gets or sets the user-defined value returned when the point is picked.\n * @memberof PointPrimitive.prototype\n * @type {*}\n */\n id: {\n get: function () {\n return this._id;\n },\n set: function (value) {\n this._id = value;\n if (defined(this._pickId)) {\n this._pickId.object.id = value;\n }\n },\n },\n\n /**\n * @private\n */\n pickId: {\n get: function () {\n return this._pickId;\n },\n },\n\n /**\n * Determines whether or not this point will be shown or hidden because it was clustered.\n * @memberof PointPrimitive.prototype\n * @type {Boolean}\n * @private\n */\n clusterShow: {\n get: function () {\n return this._clusterShow;\n },\n set: function (value) {\n if (this._clusterShow !== value) {\n this._clusterShow = value;\n makeDirty(this, SHOW_INDEX);\n }\n },\n },\n});\n\nPointPrimitive.prototype.getPickId = function (context) {\n if (!defined(this._pickId)) {\n this._pickId = context.createPickId({\n primitive: this,\n collection: this._collection,\n id: this._id,\n });\n }\n\n return this._pickId;\n};\n\nPointPrimitive.prototype._getActualPosition = function () {\n return this._actualPosition;\n};\n\nPointPrimitive.prototype._setActualPosition = function (value) {\n Cartesian3.clone(value, this._actualPosition);\n makeDirty(this, POSITION_INDEX);\n};\n\nvar tempCartesian3 = new Cartesian4();\nPointPrimitive._computeActualPosition = function (\n position,\n frameState,\n modelMatrix\n) {\n if (frameState.mode === SceneMode.SCENE3D) {\n return position;\n }\n\n Matrix4.multiplyByPoint(modelMatrix, position, tempCartesian3);\n return SceneTransforms.computeActualWgs84Position(frameState, tempCartesian3);\n};\n\nvar scratchCartesian4 = new Cartesian4();\n\n// This function is basically a stripped-down JavaScript version of PointPrimitiveCollectionVS.glsl\nPointPrimitive._computeScreenSpacePosition = function (\n modelMatrix,\n position,\n scene,\n result\n) {\n // Model to world coordinates\n var positionWorld = Matrix4.multiplyByVector(\n modelMatrix,\n Cartesian4.fromElements(\n position.x,\n position.y,\n position.z,\n 1,\n scratchCartesian4\n ),\n scratchCartesian4\n );\n var positionWC = SceneTransforms.wgs84ToWindowCoordinates(\n scene,\n positionWorld,\n result\n );\n return positionWC;\n};\n\n/**\n * Computes the screen-space position of the point's origin.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the point.\n *\n * @exception {DeveloperError} PointPrimitive must be in a collection.\n *\n * @example\n * console.log(p.computeScreenSpacePosition(scene).toString());\n */\nPointPrimitive.prototype.computeScreenSpacePosition = function (scene, result) {\n var pointPrimitiveCollection = this._pointPrimitiveCollection;\n if (!defined(result)) {\n result = new Cartesian2();\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(pointPrimitiveCollection)) {\n throw new DeveloperError(\"PointPrimitive must be in a collection.\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n var modelMatrix = pointPrimitiveCollection.modelMatrix;\n var windowCoordinates = PointPrimitive._computeScreenSpacePosition(\n modelMatrix,\n this._actualPosition,\n scene,\n result\n );\n if (!defined(windowCoordinates)) {\n return undefined;\n }\n\n windowCoordinates.y = scene.canvas.clientHeight - windowCoordinates.y;\n return windowCoordinates;\n};\n\n/**\n * Gets a point's screen space bounding box centered around screenSpacePosition.\n * @param {PointPrimitive} point The point to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nPointPrimitive.getScreenSpaceBoundingBox = function (\n point,\n screenSpacePosition,\n result\n) {\n var size = point.pixelSize;\n var halfSize = size * 0.5;\n\n var x = screenSpacePosition.x - halfSize;\n var y = screenSpacePosition.y - halfSize;\n var width = size;\n var height = size;\n\n if (!defined(result)) {\n result = new BoundingRectangle();\n }\n\n result.x = x;\n result.y = y;\n result.width = width;\n result.height = height;\n\n return result;\n};\n\n/**\n * Determines if this point equals another point. Points are equal if all their properties\n * are equal. Points in different collections can be equal.\n *\n * @param {PointPrimitive} other The point to compare for equality.\n * @returns {Boolean} <code>true</code> if the points are equal; otherwise, <code>false</code>.\n */\nPointPrimitive.prototype.equals = function (other) {\n return (\n this === other ||\n (defined(other) &&\n this._id === other._id &&\n Cartesian3.equals(this._position, other._position) &&\n Color.equals(this._color, other._color) &&\n this._pixelSize === other._pixelSize &&\n this._outlineWidth === other._outlineWidth &&\n this._show === other._show &&\n Color.equals(this._outlineColor, other._outlineColor) &&\n NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n NearFarScalar.equals(\n this._translucencyByDistance,\n other._translucencyByDistance\n ) &&\n DistanceDisplayCondition.equals(\n this._distanceDisplayCondition,\n other._distanceDisplayCondition\n ) &&\n this._disableDepthTestDistance === other._disableDepthTestDistance)\n );\n};\n\nPointPrimitive.prototype._destroy = function () {\n this._pickId = this._pickId && this._pickId.destroy();\n this._pointPrimitiveCollection = undefined;\n};\nexport default PointPrimitive;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec4 v_color;\\n\\\nvarying vec4 v_outlineColor;\\n\\\nvarying float v_innerPercent;\\n\\\nvarying float v_pixelDistance;\\n\\\nvarying vec4 v_pickColor;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n // The distance in UV space from this fragment to the center of the point, at most 0.5.\\n\\\n float distanceToCenter = length(gl_PointCoord - vec2(0.5));\\n\\\n // The max distance stops one pixel shy of the edge to leave space for anti-aliasing.\\n\\\n float maxDistance = max(0.0, 0.5 - v_pixelDistance);\\n\\\n float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter);\\n\\\n float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter);\\n\\\n\\n\\\n vec4 color = mix(v_outlineColor, v_color, innerAlpha);\\n\\\n color.a *= wholeAlpha;\\n\\\n\\n\\\n// Fully transparent parts of the billboard are not pickable.\\n\\\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\\n\\\n if (color.a < 0.005) // matches 0/255 and 1/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#else\\n\\\n// The billboard is rendered twice. The opaque pass discards translucent fragments\\n\\\n// and the translucent pass discards opaque fragments.\\n\\\n#ifdef OPAQUE\\n\\\n if (color.a < 0.995) // matches < 254/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#else\\n\\\n if (color.a >= 0.995) // matches 254/255 and 255/255\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n gl_FragColor = czm_gammaCorrect(color);\\n\\\n czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArrayFacade from \"../Renderer/VertexArrayFacade.js\";\nimport PointPrimitiveCollectionFS from \"../Shaders/PointPrimitiveCollectionFS.js\";\nimport PointPrimitiveCollectionVS from \"../Shaders/PointPrimitiveCollectionVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport PointPrimitive from \"./PointPrimitive.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nvar SHOW_INDEX = PointPrimitive.SHOW_INDEX;\nvar POSITION_INDEX = PointPrimitive.POSITION_INDEX;\nvar COLOR_INDEX = PointPrimitive.COLOR_INDEX;\nvar OUTLINE_COLOR_INDEX = PointPrimitive.OUTLINE_COLOR_INDEX;\nvar OUTLINE_WIDTH_INDEX = PointPrimitive.OUTLINE_WIDTH_INDEX;\nvar PIXEL_SIZE_INDEX = PointPrimitive.PIXEL_SIZE_INDEX;\nvar SCALE_BY_DISTANCE_INDEX = PointPrimitive.SCALE_BY_DISTANCE_INDEX;\nvar TRANSLUCENCY_BY_DISTANCE_INDEX =\n PointPrimitive.TRANSLUCENCY_BY_DISTANCE_INDEX;\nvar DISTANCE_DISPLAY_CONDITION_INDEX =\n PointPrimitive.DISTANCE_DISPLAY_CONDITION_INDEX;\nvar DISABLE_DEPTH_DISTANCE_INDEX = PointPrimitive.DISABLE_DEPTH_DISTANCE_INDEX;\nvar NUMBER_OF_PROPERTIES = PointPrimitive.NUMBER_OF_PROPERTIES;\n\nvar attributeLocations = {\n positionHighAndSize: 0,\n positionLowAndOutline: 1,\n compressedAttribute0: 2, // color, outlineColor, pick color\n compressedAttribute1: 3, // show, translucency by distance, some free space\n scaleByDistance: 4,\n distanceDisplayConditionAndDisableDepth: 5,\n};\n\n/**\n * A renderable collection of points.\n * <br /><br />\n * Points are added and removed from the collection using {@link PointPrimitiveCollection#add}\n * and {@link PointPrimitiveCollection#remove}.\n *\n * @alias PointPrimitiveCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each point from model to world coordinates.\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The point blending option. The default\n * is used for rendering both opaque and translucent points. However, if either all of the points are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n *\n * @performance For best performance, prefer a few collections, each with many points, to\n * many collections with only a few points each. Organize collections so that points\n * with the same update frequency are in the same collection, i.e., points that do not\n * change should be in one collection; points that change every frame should be in another\n * collection; and so on.\n *\n *\n * @example\n * // Create a pointPrimitive collection with two points\n * var points = scene.primitives.add(new Cesium.PointPrimitiveCollection());\n * points.add({\n * position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n * color : Cesium.Color.YELLOW\n * });\n * points.add({\n * position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n * color : Cesium.Color.CYAN\n * });\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#remove\n * @see PointPrimitive\n */\nfunction PointPrimitiveCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._sp = undefined;\n this._spTranslucent = undefined;\n this._rsOpaque = undefined;\n this._rsTranslucent = undefined;\n this._vaf = undefined;\n\n this._pointPrimitives = [];\n this._pointPrimitivesToUpdate = [];\n this._pointPrimitivesToUpdateIndex = 0;\n this._pointPrimitivesRemoved = false;\n this._createVertexArray = false;\n\n this._shaderScaleByDistance = false;\n this._compiledShaderScaleByDistance = false;\n\n this._shaderTranslucencyByDistance = false;\n this._compiledShaderTranslucencyByDistance = false;\n\n this._shaderDistanceDisplayCondition = false;\n this._compiledShaderDistanceDisplayCondition = false;\n\n this._shaderDisableDepthDistance = false;\n this._compiledShaderDisableDepthDistance = false;\n\n this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n\n this._maxPixelSize = 1.0;\n\n this._baseVolume = new BoundingSphere();\n this._baseVolumeWC = new BoundingSphere();\n this._baseVolume2D = new BoundingSphere();\n this._boundingVolume = new BoundingSphere();\n this._boundingVolumeDirty = false;\n\n this._colorCommands = [];\n\n /**\n * The 4x4 transformation matrix that transforms each point in this collection from model to world coordinates.\n * When this is the identity matrix, the pointPrimitives are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n * @default {@link Matrix4.IDENTITY}\n *\n *\n * @example\n * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * pointPrimitives.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n * pointPrimitives.add({\n * color : Cesium.Color.ORANGE,\n * position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center\n * });\n * pointPrimitives.add({\n * color : Cesium.Color.YELLOW,\n * position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east\n * });\n * pointPrimitives.add({\n * color : Cesium.Color.GREEN,\n * position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north\n * });\n * pointPrimitives.add({\n * color : Cesium.Color.CYAN,\n * position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up\n * });\n *\n * @see Transforms.eastNorthUpToFixedFrame\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * The point blending option. The default is used for rendering both opaque and translucent points.\n * However, if either all of the points are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n * performance by up to 2x.\n * @type {BlendOption}\n * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n */\n this.blendOption = defaultValue(\n options.blendOption,\n BlendOption.OPAQUE_AND_TRANSLUCENT\n );\n this._blendOption = undefined;\n\n this._mode = SceneMode.SCENE3D;\n this._maxTotalPointSize = 1;\n\n // The buffer usage for each attribute is determined based on the usage of the attribute over time.\n this._buffersUsage = [\n BufferUsage.STATIC_DRAW, // SHOW_INDEX\n BufferUsage.STATIC_DRAW, // POSITION_INDEX\n BufferUsage.STATIC_DRAW, // COLOR_INDEX\n BufferUsage.STATIC_DRAW, // OUTLINE_COLOR_INDEX\n BufferUsage.STATIC_DRAW, // OUTLINE_WIDTH_INDEX\n BufferUsage.STATIC_DRAW, // PIXEL_SIZE_INDEX\n BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX\n BufferUsage.STATIC_DRAW, // TRANSLUCENCY_BY_DISTANCE_INDEX\n BufferUsage.STATIC_DRAW, // DISTANCE_DISPLAY_CONDITION_INDEX\n ];\n\n var that = this;\n this._uniforms = {\n u_maxTotalPointSize: function () {\n return that._maxTotalPointSize;\n },\n };\n}\n\nObject.defineProperties(PointPrimitiveCollection.prototype, {\n /**\n * Returns the number of points in this collection. This is commonly used with\n * {@link PointPrimitiveCollection#get} to iterate over all the points\n * in the collection.\n * @memberof PointPrimitiveCollection.prototype\n * @type {Number}\n */\n length: {\n get: function () {\n removePointPrimitives(this);\n return this._pointPrimitives.length;\n },\n },\n});\n\nfunction destroyPointPrimitives(pointPrimitives) {\n var length = pointPrimitives.length;\n for (var i = 0; i < length; ++i) {\n if (pointPrimitives[i]) {\n pointPrimitives[i]._destroy();\n }\n }\n}\n\n/**\n * Creates and adds a point with the specified initial properties to the collection.\n * The added point is returned so it can be modified or removed from the collection later.\n *\n * @param {Object}[options] A template describing the point's properties as shown in Example 1.\n * @returns {PointPrimitive} The point that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead. For\n * best performance, add as many pointPrimitives as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1: Add a point, specifying all the default values.\n * var p = pointPrimitives.add({\n * show : true,\n * position : Cesium.Cartesian3.ZERO,\n * pixelSize : 10.0,\n * color : Cesium.Color.WHITE,\n * outlineColor : Cesium.Color.TRANSPARENT,\n * outlineWidth : 0.0,\n * id : undefined\n * });\n *\n * @example\n * // Example 2: Specify only the point's cartographic position.\n * var p = pointPrimitives.add({\n * position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)\n * });\n *\n * @see PointPrimitiveCollection#remove\n * @see PointPrimitiveCollection#removeAll\n */\nPointPrimitiveCollection.prototype.add = function (options) {\n var p = new PointPrimitive(options, this);\n p._index = this._pointPrimitives.length;\n\n this._pointPrimitives.push(p);\n this._createVertexArray = true;\n\n return p;\n};\n\n/**\n * Removes a point from the collection.\n *\n * @param {PointPrimitive} pointPrimitive The point to remove.\n * @returns {Boolean} <code>true</code> if the point was removed; <code>false</code> if the point was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time. However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead. For\n * best performance, remove as many points as possible before calling <code>update</code>.\n * If you intend to temporarily hide a point, it is usually more efficient to call\n * {@link PointPrimitive#show} instead of removing and re-adding the point.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * var p = pointPrimitives.add(...);\n * pointPrimitives.remove(p); // Returns true\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#removeAll\n * @see PointPrimitive#show\n */\nPointPrimitiveCollection.prototype.remove = function (pointPrimitive) {\n if (this.contains(pointPrimitive)) {\n this._pointPrimitives[pointPrimitive._index] = null; // Removed later\n this._pointPrimitivesRemoved = true;\n this._createVertexArray = true;\n pointPrimitive._destroy();\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all points from the collection.\n *\n * @performance <code>O(n)</code>. It is more efficient to remove all the points\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * pointPrimitives.add(...);\n * pointPrimitives.add(...);\n * pointPrimitives.removeAll();\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#remove\n */\nPointPrimitiveCollection.prototype.removeAll = function () {\n destroyPointPrimitives(this._pointPrimitives);\n this._pointPrimitives = [];\n this._pointPrimitivesToUpdate = [];\n this._pointPrimitivesToUpdateIndex = 0;\n this._pointPrimitivesRemoved = false;\n\n this._createVertexArray = true;\n};\n\nfunction removePointPrimitives(pointPrimitiveCollection) {\n if (pointPrimitiveCollection._pointPrimitivesRemoved) {\n pointPrimitiveCollection._pointPrimitivesRemoved = false;\n\n var newPointPrimitives = [];\n var pointPrimitives = pointPrimitiveCollection._pointPrimitives;\n var length = pointPrimitives.length;\n for (var i = 0, j = 0; i < length; ++i) {\n var pointPrimitive = pointPrimitives[i];\n if (pointPrimitive) {\n pointPrimitive._index = j++;\n newPointPrimitives.push(pointPrimitive);\n }\n }\n\n pointPrimitiveCollection._pointPrimitives = newPointPrimitives;\n }\n}\n\nPointPrimitiveCollection.prototype._updatePointPrimitive = function (\n pointPrimitive,\n propertyChanged\n) {\n if (!pointPrimitive._dirty) {\n this._pointPrimitivesToUpdate[\n this._pointPrimitivesToUpdateIndex++\n ] = pointPrimitive;\n }\n\n ++this._propertiesChanged[propertyChanged];\n};\n\n/**\n * Check whether this collection contains a given point.\n *\n * @param {PointPrimitive} [pointPrimitive] The point to check for.\n * @returns {Boolean} true if this collection contains the point, false otherwise.\n *\n * @see PointPrimitiveCollection#get\n */\nPointPrimitiveCollection.prototype.contains = function (pointPrimitive) {\n return (\n defined(pointPrimitive) && pointPrimitive._pointPrimitiveCollection === this\n );\n};\n\n/**\n * Returns the point in the collection at the specified index. Indices are zero-based\n * and increase as points are added. Removing a point shifts all points after\n * it to the left, changing their indices. This function is commonly used with\n * {@link PointPrimitiveCollection#length} to iterate over all the points\n * in the collection.\n *\n * @param {Number} index The zero-based index of the point.\n * @returns {PointPrimitive} The point at the specified index.\n *\n * @performance Expected constant time. If points were removed from the collection and\n * {@link PointPrimitiveCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every point in the collection\n * var len = pointPrimitives.length;\n * for (var i = 0; i < len; ++i) {\n * var p = pointPrimitives.get(i);\n * p.show = !p.show;\n * }\n *\n * @see PointPrimitiveCollection#length\n */\nPointPrimitiveCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n removePointPrimitives(this);\n return this._pointPrimitives[index];\n};\n\nPointPrimitiveCollection.prototype.computeNewBuffersUsage = function () {\n var buffersUsage = this._buffersUsage;\n var usageChanged = false;\n\n var properties = this._propertiesChanged;\n for (var k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n var newUsage =\n properties[k] === 0 ? BufferUsage.STATIC_DRAW : BufferUsage.STREAM_DRAW;\n usageChanged = usageChanged || buffersUsage[k] !== newUsage;\n buffersUsage[k] = newUsage;\n }\n\n return usageChanged;\n};\n\nfunction createVAF(context, numberOfPointPrimitives, buffersUsage) {\n return new VertexArrayFacade(\n context,\n [\n {\n index: attributeLocations.positionHighAndSize,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[POSITION_INDEX],\n },\n {\n index: attributeLocations.positionLowAndShow,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[POSITION_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute0,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[COLOR_INDEX],\n },\n {\n index: attributeLocations.compressedAttribute1,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[TRANSLUCENCY_BY_DISTANCE_INDEX],\n },\n {\n index: attributeLocations.scaleByDistance,\n componentsPerAttribute: 4,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[SCALE_BY_DISTANCE_INDEX],\n },\n {\n index: attributeLocations.distanceDisplayConditionAndDisableDepth,\n componentsPerAttribute: 3,\n componentDatatype: ComponentDatatype.FLOAT,\n usage: buffersUsage[DISTANCE_DISPLAY_CONDITION_INDEX],\n },\n ],\n numberOfPointPrimitives\n ); // 1 vertex per pointPrimitive\n}\n\n///////////////////////////////////////////////////////////////////////////\n\n// PERFORMANCE_IDEA: Save memory if a property is the same for all pointPrimitives, use a latched attribute state,\n// instead of storing it in a vertex buffer.\n\nvar writePositionScratch = new EncodedCartesian3();\n\nfunction writePositionSizeAndOutline(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n var i = pointPrimitive._index;\n var position = pointPrimitive._getActualPosition();\n\n if (pointPrimitiveCollection._mode === SceneMode.SCENE3D) {\n BoundingSphere.expand(\n pointPrimitiveCollection._baseVolume,\n position,\n pointPrimitiveCollection._baseVolume\n );\n pointPrimitiveCollection._boundingVolumeDirty = true;\n }\n\n EncodedCartesian3.fromCartesian(position, writePositionScratch);\n var pixelSize = pointPrimitive.pixelSize;\n var outlineWidth = pointPrimitive.outlineWidth;\n\n pointPrimitiveCollection._maxPixelSize = Math.max(\n pointPrimitiveCollection._maxPixelSize,\n pixelSize + outlineWidth\n );\n\n var positionHighWriter = vafWriters[attributeLocations.positionHighAndSize];\n var high = writePositionScratch.high;\n positionHighWriter(i, high.x, high.y, high.z, pixelSize);\n\n var positionLowWriter = vafWriters[attributeLocations.positionLowAndOutline];\n var low = writePositionScratch.low;\n positionLowWriter(i, low.x, low.y, low.z, outlineWidth);\n}\n\nvar LEFT_SHIFT16 = 65536.0; // 2^16\nvar LEFT_SHIFT8 = 256.0; // 2^8\n\nfunction writeCompressedAttrib0(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n var i = pointPrimitive._index;\n\n var color = pointPrimitive.color;\n var pickColor = pointPrimitive.getPickId(context).color;\n var outlineColor = pointPrimitive.outlineColor;\n\n var red = Color.floatToByte(color.red);\n var green = Color.floatToByte(color.green);\n var blue = Color.floatToByte(color.blue);\n var compressed0 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n red = Color.floatToByte(outlineColor.red);\n green = Color.floatToByte(outlineColor.green);\n blue = Color.floatToByte(outlineColor.blue);\n var compressed1 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n red = Color.floatToByte(pickColor.red);\n green = Color.floatToByte(pickColor.green);\n blue = Color.floatToByte(pickColor.blue);\n var compressed2 = red * LEFT_SHIFT16 + green * LEFT_SHIFT8 + blue;\n\n var compressed3 =\n Color.floatToByte(color.alpha) * LEFT_SHIFT16 +\n Color.floatToByte(outlineColor.alpha) * LEFT_SHIFT8 +\n Color.floatToByte(pickColor.alpha);\n\n var writer = vafWriters[attributeLocations.compressedAttribute0];\n writer(i, compressed0, compressed1, compressed2, compressed3);\n}\n\nfunction writeCompressedAttrib1(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n var i = pointPrimitive._index;\n\n var near = 0.0;\n var nearValue = 1.0;\n var far = 1.0;\n var farValue = 1.0;\n\n var translucency = pointPrimitive.translucencyByDistance;\n if (defined(translucency)) {\n near = translucency.near;\n nearValue = translucency.nearValue;\n far = translucency.far;\n farValue = translucency.farValue;\n\n if (nearValue !== 1.0 || farValue !== 1.0) {\n // translucency by distance calculation in shader need not be enabled\n // until a pointPrimitive with near and far !== 1.0 is found\n pointPrimitiveCollection._shaderTranslucencyByDistance = true;\n }\n }\n\n var show = pointPrimitive.show && pointPrimitive.clusterShow;\n\n // If the color alphas are zero, do not show this pointPrimitive. This lets us avoid providing\n // color during the pick pass and also eliminates a discard in the fragment shader.\n if (\n pointPrimitive.color.alpha === 0.0 &&\n pointPrimitive.outlineColor.alpha === 0.0\n ) {\n show = false;\n }\n\n nearValue = CesiumMath.clamp(nearValue, 0.0, 1.0);\n nearValue = nearValue === 1.0 ? 255.0 : (nearValue * 255.0) | 0;\n var compressed0 = (show ? 1.0 : 0.0) * LEFT_SHIFT8 + nearValue;\n\n farValue = CesiumMath.clamp(farValue, 0.0, 1.0);\n farValue = farValue === 1.0 ? 255.0 : (farValue * 255.0) | 0;\n var compressed1 = farValue;\n\n var writer = vafWriters[attributeLocations.compressedAttribute1];\n writer(i, compressed0, compressed1, near, far);\n}\n\nfunction writeScaleByDistance(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n var i = pointPrimitive._index;\n var writer = vafWriters[attributeLocations.scaleByDistance];\n var near = 0.0;\n var nearValue = 1.0;\n var far = 1.0;\n var farValue = 1.0;\n\n var scale = pointPrimitive.scaleByDistance;\n if (defined(scale)) {\n near = scale.near;\n nearValue = scale.nearValue;\n far = scale.far;\n farValue = scale.farValue;\n\n if (nearValue !== 1.0 || farValue !== 1.0) {\n // scale by distance calculation in shader need not be enabled\n // until a pointPrimitive with near and far !== 1.0 is found\n pointPrimitiveCollection._shaderScaleByDistance = true;\n }\n }\n\n writer(i, near, nearValue, far, farValue);\n}\n\nfunction writeDistanceDisplayConditionAndDepthDisable(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n var i = pointPrimitive._index;\n var writer =\n vafWriters[attributeLocations.distanceDisplayConditionAndDisableDepth];\n var near = 0.0;\n var far = Number.MAX_VALUE;\n\n var distanceDisplayCondition = pointPrimitive.distanceDisplayCondition;\n if (defined(distanceDisplayCondition)) {\n near = distanceDisplayCondition.near;\n far = distanceDisplayCondition.far;\n\n near *= near;\n far *= far;\n\n pointPrimitiveCollection._shaderDistanceDisplayCondition = true;\n }\n\n var disableDepthTestDistance = pointPrimitive.disableDepthTestDistance;\n disableDepthTestDistance *= disableDepthTestDistance;\n if (disableDepthTestDistance > 0.0) {\n pointPrimitiveCollection._shaderDisableDepthDistance = true;\n if (disableDepthTestDistance === Number.POSITIVE_INFINITY) {\n disableDepthTestDistance = -1.0;\n }\n }\n\n writer(i, near, far, disableDepthTestDistance);\n}\n\nfunction writePointPrimitive(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n) {\n writePositionSizeAndOutline(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n );\n writeCompressedAttrib0(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n );\n writeCompressedAttrib1(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n );\n writeScaleByDistance(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n );\n writeDistanceDisplayConditionAndDepthDisable(\n pointPrimitiveCollection,\n context,\n vafWriters,\n pointPrimitive\n );\n}\n\nfunction recomputeActualPositions(\n pointPrimitiveCollection,\n pointPrimitives,\n length,\n frameState,\n modelMatrix,\n recomputeBoundingVolume\n) {\n var boundingVolume;\n if (frameState.mode === SceneMode.SCENE3D) {\n boundingVolume = pointPrimitiveCollection._baseVolume;\n pointPrimitiveCollection._boundingVolumeDirty = true;\n } else {\n boundingVolume = pointPrimitiveCollection._baseVolume2D;\n }\n\n var positions = [];\n for (var i = 0; i < length; ++i) {\n var pointPrimitive = pointPrimitives[i];\n var position = pointPrimitive.position;\n var actualPosition = PointPrimitive._computeActualPosition(\n position,\n frameState,\n modelMatrix\n );\n if (defined(actualPosition)) {\n pointPrimitive._setActualPosition(actualPosition);\n\n if (recomputeBoundingVolume) {\n positions.push(actualPosition);\n } else {\n BoundingSphere.expand(boundingVolume, actualPosition, boundingVolume);\n }\n }\n }\n\n if (recomputeBoundingVolume) {\n BoundingSphere.fromPoints(positions, boundingVolume);\n }\n}\n\nfunction updateMode(pointPrimitiveCollection, frameState) {\n var mode = frameState.mode;\n\n var pointPrimitives = pointPrimitiveCollection._pointPrimitives;\n var pointPrimitivesToUpdate =\n pointPrimitiveCollection._pointPrimitivesToUpdate;\n var modelMatrix = pointPrimitiveCollection._modelMatrix;\n\n if (\n pointPrimitiveCollection._createVertexArray ||\n pointPrimitiveCollection._mode !== mode ||\n (mode !== SceneMode.SCENE3D &&\n !Matrix4.equals(modelMatrix, pointPrimitiveCollection.modelMatrix))\n ) {\n pointPrimitiveCollection._mode = mode;\n Matrix4.clone(pointPrimitiveCollection.modelMatrix, modelMatrix);\n pointPrimitiveCollection._createVertexArray = true;\n\n if (\n mode === SceneMode.SCENE3D ||\n mode === SceneMode.SCENE2D ||\n mode === SceneMode.COLUMBUS_VIEW\n ) {\n recomputeActualPositions(\n pointPrimitiveCollection,\n pointPrimitives,\n pointPrimitives.length,\n frameState,\n modelMatrix,\n true\n );\n }\n } else if (mode === SceneMode.MORPHING) {\n recomputeActualPositions(\n pointPrimitiveCollection,\n pointPrimitives,\n pointPrimitives.length,\n frameState,\n modelMatrix,\n true\n );\n } else if (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {\n recomputeActualPositions(\n pointPrimitiveCollection,\n pointPrimitivesToUpdate,\n pointPrimitiveCollection._pointPrimitivesToUpdateIndex,\n frameState,\n modelMatrix,\n false\n );\n }\n}\n\nfunction updateBoundingVolume(collection, frameState, boundingVolume) {\n var pixelSize = frameState.camera.getPixelSize(\n boundingVolume,\n frameState.context.drawingBufferWidth,\n frameState.context.drawingBufferHeight\n );\n var size = pixelSize * collection._maxPixelSize;\n boundingVolume.radius += size;\n}\n\nvar scratchWriterArray = [];\n\n/**\n * @private\n */\nPointPrimitiveCollection.prototype.update = function (frameState) {\n removePointPrimitives(this);\n\n this._maxTotalPointSize = ContextLimits.maximumAliasedPointSize;\n\n updateMode(this, frameState);\n\n var pointPrimitives = this._pointPrimitives;\n var pointPrimitivesLength = pointPrimitives.length;\n var pointPrimitivesToUpdate = this._pointPrimitivesToUpdate;\n var pointPrimitivesToUpdateLength = this._pointPrimitivesToUpdateIndex;\n\n var properties = this._propertiesChanged;\n\n var createVertexArray = this._createVertexArray;\n\n var vafWriters;\n var context = frameState.context;\n var pass = frameState.passes;\n var picking = pass.pick;\n\n // PERFORMANCE_IDEA: Round robin multiple buffers.\n if (createVertexArray || (!picking && this.computeNewBuffersUsage())) {\n this._createVertexArray = false;\n\n for (var k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n properties[k] = 0;\n }\n\n this._vaf = this._vaf && this._vaf.destroy();\n\n if (pointPrimitivesLength > 0) {\n // PERFORMANCE_IDEA: Instead of creating a new one, resize like std::vector.\n this._vaf = createVAF(context, pointPrimitivesLength, this._buffersUsage);\n vafWriters = this._vaf.writers;\n\n // Rewrite entire buffer if pointPrimitives were added or removed.\n for (var i = 0; i < pointPrimitivesLength; ++i) {\n var pointPrimitive = this._pointPrimitives[i];\n pointPrimitive._dirty = false; // In case it needed an update.\n writePointPrimitive(this, context, vafWriters, pointPrimitive);\n }\n\n this._vaf.commit();\n }\n\n this._pointPrimitivesToUpdateIndex = 0;\n } else if (pointPrimitivesToUpdateLength > 0) {\n // PointPrimitives were modified, but none were added or removed.\n var writers = scratchWriterArray;\n writers.length = 0;\n\n if (\n properties[POSITION_INDEX] ||\n properties[OUTLINE_WIDTH_INDEX] ||\n properties[PIXEL_SIZE_INDEX]\n ) {\n writers.push(writePositionSizeAndOutline);\n }\n\n if (properties[COLOR_INDEX] || properties[OUTLINE_COLOR_INDEX]) {\n writers.push(writeCompressedAttrib0);\n }\n\n if (properties[SHOW_INDEX] || properties[TRANSLUCENCY_BY_DISTANCE_INDEX]) {\n writers.push(writeCompressedAttrib1);\n }\n\n if (properties[SCALE_BY_DISTANCE_INDEX]) {\n writers.push(writeScaleByDistance);\n }\n\n if (\n properties[DISTANCE_DISPLAY_CONDITION_INDEX] ||\n properties[DISABLE_DEPTH_DISTANCE_INDEX]\n ) {\n writers.push(writeDistanceDisplayConditionAndDepthDisable);\n }\n\n var numWriters = writers.length;\n\n vafWriters = this._vaf.writers;\n\n if (pointPrimitivesToUpdateLength / pointPrimitivesLength > 0.1) {\n // If more than 10% of pointPrimitive change, rewrite the entire buffer.\n\n // PERFORMANCE_IDEA: I totally made up 10% :).\n\n for (var m = 0; m < pointPrimitivesToUpdateLength; ++m) {\n var b = pointPrimitivesToUpdate[m];\n b._dirty = false;\n\n for (var n = 0; n < numWriters; ++n) {\n writers[n](this, context, vafWriters, b);\n }\n }\n this._vaf.commit();\n } else {\n for (var h = 0; h < pointPrimitivesToUpdateLength; ++h) {\n var bb = pointPrimitivesToUpdate[h];\n bb._dirty = false;\n\n for (var o = 0; o < numWriters; ++o) {\n writers[o](this, context, vafWriters, bb);\n }\n this._vaf.subCommit(bb._index, 1);\n }\n this._vaf.endSubCommits();\n }\n\n this._pointPrimitivesToUpdateIndex = 0;\n }\n\n // If the number of total pointPrimitives ever shrinks considerably\n // Truncate pointPrimitivesToUpdate so that we free memory that we're\n // not going to be using.\n if (pointPrimitivesToUpdateLength > pointPrimitivesLength * 1.5) {\n pointPrimitivesToUpdate.length = pointPrimitivesLength;\n }\n\n if (!defined(this._vaf) || !defined(this._vaf.va)) {\n return;\n }\n\n if (this._boundingVolumeDirty) {\n this._boundingVolumeDirty = false;\n BoundingSphere.transform(\n this._baseVolume,\n this.modelMatrix,\n this._baseVolumeWC\n );\n }\n\n var boundingVolume;\n var modelMatrix = Matrix4.IDENTITY;\n if (frameState.mode === SceneMode.SCENE3D) {\n modelMatrix = this.modelMatrix;\n boundingVolume = BoundingSphere.clone(\n this._baseVolumeWC,\n this._boundingVolume\n );\n } else {\n boundingVolume = BoundingSphere.clone(\n this._baseVolume2D,\n this._boundingVolume\n );\n }\n updateBoundingVolume(this, frameState, boundingVolume);\n\n var blendOptionChanged = this._blendOption !== this.blendOption;\n this._blendOption = this.blendOption;\n\n if (blendOptionChanged) {\n if (\n this._blendOption === BlendOption.OPAQUE ||\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n ) {\n this._rsOpaque = RenderState.fromCache({\n depthTest: {\n enabled: true,\n func: WebGLConstants.LEQUAL,\n },\n depthMask: true,\n });\n } else {\n this._rsOpaque = undefined;\n }\n\n if (\n this._blendOption === BlendOption.TRANSLUCENT ||\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n ) {\n this._rsTranslucent = RenderState.fromCache({\n depthTest: {\n enabled: true,\n func: WebGLConstants.LEQUAL,\n },\n depthMask: false,\n blending: BlendingState.ALPHA_BLEND,\n });\n } else {\n this._rsTranslucent = undefined;\n }\n }\n\n this._shaderDisableDepthDistance =\n this._shaderDisableDepthDistance ||\n frameState.minimumDisableDepthTestDistance !== 0.0;\n var vs;\n var fs;\n\n if (\n blendOptionChanged ||\n (this._shaderScaleByDistance && !this._compiledShaderScaleByDistance) ||\n (this._shaderTranslucencyByDistance &&\n !this._compiledShaderTranslucencyByDistance) ||\n (this._shaderDistanceDisplayCondition &&\n !this._compiledShaderDistanceDisplayCondition) ||\n this._shaderDisableDepthDistance !==\n this._compiledShaderDisableDepthDistance\n ) {\n vs = new ShaderSource({\n sources: [PointPrimitiveCollectionVS],\n });\n if (this._shaderScaleByDistance) {\n vs.defines.push(\"EYE_DISTANCE_SCALING\");\n }\n if (this._shaderTranslucencyByDistance) {\n vs.defines.push(\"EYE_DISTANCE_TRANSLUCENCY\");\n }\n if (this._shaderDistanceDisplayCondition) {\n vs.defines.push(\"DISTANCE_DISPLAY_CONDITION\");\n }\n if (this._shaderDisableDepthDistance) {\n vs.defines.push(\"DISABLE_DEPTH_DISTANCE\");\n }\n\n if (this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT) {\n fs = new ShaderSource({\n defines: [\"OPAQUE\"],\n sources: [PointPrimitiveCollectionFS],\n });\n this._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n fs = new ShaderSource({\n defines: [\"TRANSLUCENT\"],\n sources: [PointPrimitiveCollectionFS],\n });\n this._spTranslucent = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._spTranslucent,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n if (this._blendOption === BlendOption.OPAQUE) {\n fs = new ShaderSource({\n sources: [PointPrimitiveCollectionFS],\n });\n this._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n if (this._blendOption === BlendOption.TRANSLUCENT) {\n fs = new ShaderSource({\n sources: [PointPrimitiveCollectionFS],\n });\n this._spTranslucent = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._spTranslucent,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n }\n\n this._compiledShaderScaleByDistance = this._shaderScaleByDistance;\n this._compiledShaderTranslucencyByDistance = this._shaderTranslucencyByDistance;\n this._compiledShaderDistanceDisplayCondition = this._shaderDistanceDisplayCondition;\n this._compiledShaderDisableDepthDistance = this._shaderDisableDepthDistance;\n }\n\n var va;\n var vaLength;\n var command;\n var j;\n\n var commandList = frameState.commandList;\n\n if (pass.render || picking) {\n var colorList = this._colorCommands;\n\n var opaque = this._blendOption === BlendOption.OPAQUE;\n var opaqueAndTranslucent =\n this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT;\n\n va = this._vaf.va;\n vaLength = va.length;\n\n colorList.length = vaLength;\n var totalLength = opaqueAndTranslucent ? vaLength * 2 : vaLength;\n for (j = 0; j < totalLength; ++j) {\n var opaqueCommand = opaque || (opaqueAndTranslucent && j % 2 === 0);\n\n command = colorList[j];\n if (!defined(command)) {\n command = colorList[j] = new DrawCommand();\n }\n\n command.primitiveType = PrimitiveType.POINTS;\n command.pass =\n opaqueCommand || !opaqueAndTranslucent ? Pass.OPAQUE : Pass.TRANSLUCENT;\n command.owner = this;\n\n var index = opaqueAndTranslucent ? Math.floor(j / 2.0) : j;\n command.boundingVolume = boundingVolume;\n command.modelMatrix = modelMatrix;\n command.shaderProgram = opaqueCommand ? this._sp : this._spTranslucent;\n command.uniformMap = this._uniforms;\n command.vertexArray = va[index].va;\n command.renderState = opaqueCommand\n ? this._rsOpaque\n : this._rsTranslucent;\n command.debugShowBoundingVolume = this.debugShowBoundingVolume;\n command.pickId = \"v_pickColor\";\n\n commandList.push(command);\n }\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PointPrimitiveCollection#destroy\n */\nPointPrimitiveCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * pointPrimitives = pointPrimitives && pointPrimitives.destroy();\n *\n * @see PointPrimitiveCollection#isDestroyed\n */\nPointPrimitiveCollection.prototype.destroy = function () {\n this._sp = this._sp && this._sp.destroy();\n this._spTranslucent = this._spTranslucent && this._spTranslucent.destroy();\n this._spPick = this._spPick && this._spPick.destroy();\n this._vaf = this._vaf && this._vaf.destroy();\n destroyPointPrimitives(this._pointPrimitives);\n\n return destroyObject(this);\n};\nexport default PointPrimitiveCollection;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform float u_maxTotalPointSize;\\n\\\n\\n\\\nattribute vec4 positionHighAndSize;\\n\\\nattribute vec4 positionLowAndOutline;\\n\\\nattribute vec4 compressedAttribute0; // color, outlineColor, pick color\\n\\\nattribute vec4 compressedAttribute1; // show, translucency by distance, some free space\\n\\\nattribute vec4 scaleByDistance; // near, nearScale, far, farScale\\n\\\nattribute vec3 distanceDisplayConditionAndDisableDepth; // near, far, disableDepthTestDistance\\n\\\n\\n\\\nvarying vec4 v_color;\\n\\\nvarying vec4 v_outlineColor;\\n\\\nvarying float v_innerPercent;\\n\\\nvarying float v_pixelDistance;\\n\\\nvarying vec4 v_pickColor;\\n\\\n\\n\\\nconst float SHIFT_LEFT8 = 256.0;\\n\\\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition\\n\\\n\\n\\\n // unpack attributes\\n\\\n vec3 positionHigh = positionHighAndSize.xyz;\\n\\\n vec3 positionLow = positionLowAndOutline.xyz;\\n\\\n float outlineWidthBothSides = 2.0 * positionLowAndOutline.w;\\n\\\n float totalSize = positionHighAndSize.w + outlineWidthBothSides;\\n\\\n float outlinePercent = outlineWidthBothSides / totalSize;\\n\\\n // Scale in response to browser-zoom.\\n\\\n totalSize *= czm_pixelRatio;\\n\\\n // Add padding for anti-aliasing on both sides.\\n\\\n totalSize += 3.0;\\n\\\n\\n\\\n float temp = compressedAttribute1.x * SHIFT_RIGHT8;\\n\\\n float show = floor(temp);\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n vec4 translucencyByDistance;\\n\\\n translucencyByDistance.x = compressedAttribute1.z;\\n\\\n translucencyByDistance.z = compressedAttribute1.w;\\n\\\n\\n\\\n translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n\\n\\\n temp = compressedAttribute1.y * SHIFT_RIGHT8;\\n\\\n translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n#endif\\n\\\n\\n\\\n ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n vec4 color;\\n\\\n vec4 outlineColor;\\n\\\n vec4 pickColor;\\n\\\n\\n\\\n // compressedAttribute0.z => pickColor.rgb\\n\\\n\\n\\\n temp = compressedAttribute0.z * SHIFT_RIGHT8;\\n\\\n pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n pickColor.r = floor(temp);\\n\\\n\\n\\\n // compressedAttribute0.x => color.rgb\\n\\\n\\n\\\n temp = compressedAttribute0.x * SHIFT_RIGHT8;\\n\\\n color.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n color.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n color.r = floor(temp);\\n\\\n\\n\\\n // compressedAttribute0.y => outlineColor.rgb\\n\\\n\\n\\\n temp = compressedAttribute0.y * SHIFT_RIGHT8;\\n\\\n outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n outlineColor.r = floor(temp);\\n\\\n\\n\\\n // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a\\n\\\n\\n\\\n temp = compressedAttribute0.w * SHIFT_RIGHT8;\\n\\\n pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n pickColor = pickColor / 255.0;\\n\\\n\\n\\\n temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n outlineColor /= 255.0;\\n\\\n color.a = floor(temp);\\n\\\n color /= 255.0;\\n\\\n\\n\\\n ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n vec4 positionEC = czm_modelViewRelativeToEye * p;\\n\\\n\\n\\\n ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\\n\\\n float lengthSq;\\n\\\n if (czm_sceneMode == czm_sceneMode2D)\\n\\\n {\\n\\\n // 2D camera distance is a special case\\n\\\n // treat all billboards as flattened to the z=0.0 plane\\n\\\n lengthSq = czm_eyeHeight2D.y;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n lengthSq = dot(positionEC.xyz, positionEC.xyz);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_SCALING\\n\\\n totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq);\\n\\\n#endif\\n\\\n // Clamp to max point size.\\n\\\n totalSize = min(totalSize, u_maxTotalPointSize);\\n\\\n // If size is too small, push vertex behind near plane for clipping.\\n\\\n // Note that context.minimumAliasedPointSize \\\"will be at most 1.0\\\".\\n\\\n if (totalSize < 1.0)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n totalSize = 1.0;\\n\\\n }\\n\\\n\\n\\\n float translucency = 1.0;\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\\n\\\n // push vertex behind near plane for clipping\\n\\\n if (translucency < 0.004)\\n\\\n {\\n\\\n positionEC.xyz = vec3(0.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n float nearSq = distanceDisplayConditionAndDisableDepth.x;\\n\\\n float farSq = distanceDisplayConditionAndDisableDepth.y;\\n\\\n if (lengthSq < nearSq || lengthSq > farSq) {\\n\\\n // push vertex behind camera to force it to be clipped\\n\\\n positionEC.xyz = vec3(0.0, 0.0, 1.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n gl_Position = czm_projection * positionEC;\\n\\\n czm_vertexLogDepth();\\n\\\n\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n float disableDepthTestDistance = distanceDisplayConditionAndDisableDepth.z;\\n\\\n if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\\n\\\n {\\n\\\n disableDepthTestDistance = czm_minimumDisableDepthTestDistance;\\n\\\n }\\n\\\n\\n\\\n if (disableDepthTestDistance != 0.0)\\n\\\n {\\n\\\n // Don't try to \\\"multiply both sides\\\" by w. Greater/less-than comparisons won't work for negative values of w.\\n\\\n float zclip = gl_Position.z / gl_Position.w;\\n\\\n bool clipped = (zclip < -1.0 || zclip > 1.0);\\n\\\n if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))\\n\\\n {\\n\\\n // Position z on the near plane.\\n\\\n gl_Position.z = -gl_Position.w;\\n\\\n#ifdef LOG_DEPTH\\n\\\n czm_vertexLogDepth(vec4(czm_currentFrustum.x));\\n\\\n#endif\\n\\\n }\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n v_color = color;\\n\\\n v_color.a *= translucency * show;\\n\\\n v_outlineColor = outlineColor;\\n\\\n v_outlineColor.a *= translucency * show;\\n\\\n\\n\\\n v_innerPercent = 1.0 - outlinePercent;\\n\\\n v_pixelDistance = 2.0 / totalSize;\\n\\\n gl_PointSize = totalSize * show;\\n\\\n gl_Position *= show;\\n\\\n\\n\\\n v_pickColor = pickColor;\\n\\\n}\\n\\\n\";\n","function kdbush(points, getX, getY, nodeSize, ArrayType) {\n return new KDBush(points, getX, getY, nodeSize, ArrayType);\n}\n\nfunction KDBush(points, getX, getY, nodeSize, ArrayType) {\n getX = getX || defaultGetX;\n getY = getY || defaultGetY;\n ArrayType = ArrayType || Array;\n\n this.nodeSize = nodeSize || 64;\n this.points = points;\n\n this.ids = new ArrayType(points.length);\n this.coords = new ArrayType(points.length * 2);\n\n for (var i = 0; i < points.length; i++) {\n this.ids[i] = i;\n this.coords[2 * i] = getX(points[i]);\n this.coords[2 * i + 1] = getY(points[i]);\n }\n\n sort(this.ids, this.coords, this.nodeSize, 0, this.ids.length - 1, 0);\n}\n\nKDBush.prototype = {\n range: function (minX, minY, maxX, maxY) {\n return range(this.ids, this.coords, minX, minY, maxX, maxY, this.nodeSize);\n },\n\n within: function (x, y, r) {\n return within(this.ids, this.coords, x, y, r, this.nodeSize);\n }\n};\n\nfunction defaultGetX(p) { return p[0]; }\nfunction defaultGetY(p) { return p[1]; }\n\nfunction range(ids, coords, minX, minY, maxX, maxY, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var x, y;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n x = coords[2 * i];\n y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n x = coords[2 * m];\n y = coords[2 * m + 1];\n\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sort(ids, coords, nodeSize, left, right, depth) {\n if (right - left <= nodeSize) return;\n\n var m = Math.floor((left + right) / 2);\n\n select(ids, coords, m, left, right, depth % 2);\n\n sort(ids, coords, nodeSize, left, m - 1, depth + 1);\n sort(ids, coords, nodeSize, m + 1, right, depth + 1);\n}\n\nfunction select(ids, coords, k, left, right, inc) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, inc);\n }\n\n var t = coords[2 * k + inc];\n var i = left;\n var j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + inc] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + inc] < t) i++;\n while (coords[2 * j + inc] > t) j--;\n }\n\n if (coords[2 * left + inc] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction within(ids, coords, qx, qy, r, nodeSize) {\n var stack = [0, ids.length - 1, 0];\n var result = [];\n var r2 = r * r;\n\n while (stack.length) {\n var axis = stack.pop();\n var right = stack.pop();\n var left = stack.pop();\n\n if (right - left <= nodeSize) {\n for (var i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n var m = Math.floor((left + right) / 2);\n\n var x = coords[2 * m];\n var y = coords[2 * m + 1];\n\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n var nextAxis = (axis + 1) % 2;\n\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(nextAxis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(nextAxis);\n }\n }\n\n return result;\n}\n\nfunction sqDist(ax, ay, bx, by) {\n var dx = ax - bx;\n var dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nexport default kdbush;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\nimport Event from \"../Core/Event.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Billboard from \"../Scene/Billboard.js\";\nimport BillboardCollection from \"../Scene/BillboardCollection.js\";\nimport Label from \"../Scene/Label.js\";\nimport LabelCollection from \"../Scene/LabelCollection.js\";\nimport PointPrimitive from \"../Scene/PointPrimitive.js\";\nimport PointPrimitiveCollection from \"../Scene/PointPrimitiveCollection.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport kdbush from \"../ThirdParty/kdbush.js\";\n\n/**\n * Defines how screen space objects (billboards, points, labels) are clustered.\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Boolean} [options.enabled=false] Whether or not to enable clustering.\n * @param {Number} [options.pixelRange=80] The pixel range to extend the screen space bounding box.\n * @param {Number} [options.minimumClusterSize=2] The minimum number of screen space objects that can be clustered.\n * @param {Boolean} [options.clusterBillboards=true] Whether or not to cluster the billboards of an entity.\n * @param {Boolean} [options.clusterLabels=true] Whether or not to cluster the labels of an entity.\n * @param {Boolean} [options.clusterPoints=true] Whether or not to cluster the points of an entity.\n *\n * @alias EntityCluster\n * @constructor\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Clustering.html|Cesium Sandcastle Clustering Demo}\n */\nfunction EntityCluster(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._enabled = defaultValue(options.enabled, false);\n this._pixelRange = defaultValue(options.pixelRange, 80);\n this._minimumClusterSize = defaultValue(options.minimumClusterSize, 2);\n this._clusterBillboards = defaultValue(options.clusterBillboards, true);\n this._clusterLabels = defaultValue(options.clusterLabels, true);\n this._clusterPoints = defaultValue(options.clusterPoints, true);\n\n this._labelCollection = undefined;\n this._billboardCollection = undefined;\n this._pointCollection = undefined;\n\n this._clusterBillboardCollection = undefined;\n this._clusterLabelCollection = undefined;\n this._clusterPointCollection = undefined;\n\n this._collectionIndicesByEntity = {};\n\n this._unusedLabelIndices = [];\n this._unusedBillboardIndices = [];\n this._unusedPointIndices = [];\n\n this._previousClusters = [];\n this._previousHeight = undefined;\n\n this._enabledDirty = false;\n this._clusterDirty = false;\n\n this._cluster = undefined;\n this._removeEventListener = undefined;\n\n this._clusterEvent = new Event();\n}\n\nfunction getX(point) {\n return point.coord.x;\n}\n\nfunction getY(point) {\n return point.coord.y;\n}\n\nfunction expandBoundingBox(bbox, pixelRange) {\n bbox.x -= pixelRange;\n bbox.y -= pixelRange;\n bbox.width += pixelRange * 2.0;\n bbox.height += pixelRange * 2.0;\n}\n\nvar labelBoundingBoxScratch = new BoundingRectangle();\n\nfunction getBoundingBox(item, coord, pixelRange, entityCluster, result) {\n if (defined(item._labelCollection) && entityCluster._clusterLabels) {\n result = Label.getScreenSpaceBoundingBox(item, coord, result);\n } else if (\n defined(item._billboardCollection) &&\n entityCluster._clusterBillboards\n ) {\n result = Billboard.getScreenSpaceBoundingBox(item, coord, result);\n } else if (\n defined(item._pointPrimitiveCollection) &&\n entityCluster._clusterPoints\n ) {\n result = PointPrimitive.getScreenSpaceBoundingBox(item, coord, result);\n }\n\n expandBoundingBox(result, pixelRange);\n\n if (\n entityCluster._clusterLabels &&\n !defined(item._labelCollection) &&\n defined(item.id) &&\n hasLabelIndex(entityCluster, item.id.id) &&\n defined(item.id._label)\n ) {\n var labelIndex =\n entityCluster._collectionIndicesByEntity[item.id.id].labelIndex;\n var label = entityCluster._labelCollection.get(labelIndex);\n var labelBBox = Label.getScreenSpaceBoundingBox(\n label,\n coord,\n labelBoundingBoxScratch\n );\n expandBoundingBox(labelBBox, pixelRange);\n result = BoundingRectangle.union(result, labelBBox, result);\n }\n\n return result;\n}\n\nfunction addNonClusteredItem(item, entityCluster) {\n item.clusterShow = true;\n\n if (\n !defined(item._labelCollection) &&\n defined(item.id) &&\n hasLabelIndex(entityCluster, item.id.id) &&\n defined(item.id._label)\n ) {\n var labelIndex =\n entityCluster._collectionIndicesByEntity[item.id.id].labelIndex;\n var label = entityCluster._labelCollection.get(labelIndex);\n label.clusterShow = true;\n }\n}\n\nfunction addCluster(position, numPoints, ids, entityCluster) {\n var cluster = {\n billboard: entityCluster._clusterBillboardCollection.add(),\n label: entityCluster._clusterLabelCollection.add(),\n point: entityCluster._clusterPointCollection.add(),\n };\n\n cluster.billboard.show = false;\n cluster.point.show = false;\n cluster.label.show = true;\n cluster.label.text = numPoints.toLocaleString();\n cluster.label.id = ids;\n cluster.billboard.position = cluster.label.position = cluster.point.position = position;\n\n entityCluster._clusterEvent.raiseEvent(ids, cluster);\n}\n\nfunction hasLabelIndex(entityCluster, entityId) {\n return (\n defined(entityCluster) &&\n defined(entityCluster._collectionIndicesByEntity[entityId]) &&\n defined(entityCluster._collectionIndicesByEntity[entityId].labelIndex)\n );\n}\n\nfunction getScreenSpacePositions(\n collection,\n points,\n scene,\n occluder,\n entityCluster\n) {\n if (!defined(collection)) {\n return;\n }\n\n var length = collection.length;\n for (var i = 0; i < length; ++i) {\n var item = collection.get(i);\n item.clusterShow = false;\n\n if (\n !item.show ||\n (entityCluster._scene.mode === SceneMode.SCENE3D &&\n !occluder.isPointVisible(item.position))\n ) {\n continue;\n }\n\n var canClusterLabels =\n entityCluster._clusterLabels && defined(item._labelCollection);\n var canClusterBillboards =\n entityCluster._clusterBillboards && defined(item.id._billboard);\n var canClusterPoints =\n entityCluster._clusterPoints && defined(item.id._point);\n if (canClusterLabels && (canClusterPoints || canClusterBillboards)) {\n continue;\n }\n\n var coord = item.computeScreenSpacePosition(scene);\n if (!defined(coord)) {\n continue;\n }\n\n points.push({\n index: i,\n collection: collection,\n clustered: false,\n coord: coord,\n });\n }\n}\n\nvar pointBoundinRectangleScratch = new BoundingRectangle();\nvar totalBoundingRectangleScratch = new BoundingRectangle();\nvar neighborBoundingRectangleScratch = new BoundingRectangle();\n\nfunction createDeclutterCallback(entityCluster) {\n return function (amount) {\n if ((defined(amount) && amount < 0.05) || !entityCluster.enabled) {\n return;\n }\n\n var scene = entityCluster._scene;\n\n var labelCollection = entityCluster._labelCollection;\n var billboardCollection = entityCluster._billboardCollection;\n var pointCollection = entityCluster._pointCollection;\n\n if (\n (!defined(labelCollection) &&\n !defined(billboardCollection) &&\n !defined(pointCollection)) ||\n (!entityCluster._clusterBillboards &&\n !entityCluster._clusterLabels &&\n !entityCluster._clusterPoints)\n ) {\n return;\n }\n\n var clusteredLabelCollection = entityCluster._clusterLabelCollection;\n var clusteredBillboardCollection =\n entityCluster._clusterBillboardCollection;\n var clusteredPointCollection = entityCluster._clusterPointCollection;\n\n if (defined(clusteredLabelCollection)) {\n clusteredLabelCollection.removeAll();\n } else {\n clusteredLabelCollection = entityCluster._clusterLabelCollection = new LabelCollection(\n {\n scene: scene,\n }\n );\n }\n\n if (defined(clusteredBillboardCollection)) {\n clusteredBillboardCollection.removeAll();\n } else {\n clusteredBillboardCollection = entityCluster._clusterBillboardCollection = new BillboardCollection(\n {\n scene: scene,\n }\n );\n }\n\n if (defined(clusteredPointCollection)) {\n clusteredPointCollection.removeAll();\n } else {\n clusteredPointCollection = entityCluster._clusterPointCollection = new PointPrimitiveCollection();\n }\n\n var pixelRange = entityCluster._pixelRange;\n var minimumClusterSize = entityCluster._minimumClusterSize;\n\n var clusters = entityCluster._previousClusters;\n var newClusters = [];\n\n var previousHeight = entityCluster._previousHeight;\n var currentHeight = scene.camera.positionCartographic.height;\n\n var ellipsoid = scene.mapProjection.ellipsoid;\n var cameraPosition = scene.camera.positionWC;\n var occluder = new EllipsoidalOccluder(ellipsoid, cameraPosition);\n\n var points = [];\n if (entityCluster._clusterLabels) {\n getScreenSpacePositions(\n labelCollection,\n points,\n scene,\n occluder,\n entityCluster\n );\n }\n if (entityCluster._clusterBillboards) {\n getScreenSpacePositions(\n billboardCollection,\n points,\n scene,\n occluder,\n entityCluster\n );\n }\n if (entityCluster._clusterPoints) {\n getScreenSpacePositions(\n pointCollection,\n points,\n scene,\n occluder,\n entityCluster\n );\n }\n\n var i;\n var j;\n var length;\n var bbox;\n var neighbors;\n var neighborLength;\n var neighborIndex;\n var neighborPoint;\n var ids;\n var numPoints;\n\n var collection;\n var collectionIndex;\n\n var index = kdbush(points, getX, getY, 64, Int32Array);\n\n if (currentHeight < previousHeight) {\n length = clusters.length;\n for (i = 0; i < length; ++i) {\n var cluster = clusters[i];\n\n if (!occluder.isPointVisible(cluster.position)) {\n continue;\n }\n\n var coord = Billboard._computeScreenSpacePosition(\n Matrix4.IDENTITY,\n cluster.position,\n Cartesian3.ZERO,\n Cartesian2.ZERO,\n scene\n );\n if (!defined(coord)) {\n continue;\n }\n\n var factor = 1.0 - currentHeight / previousHeight;\n var width = (cluster.width = cluster.width * factor);\n var height = (cluster.height = cluster.height * factor);\n\n width = Math.max(width, cluster.minimumWidth);\n height = Math.max(height, cluster.minimumHeight);\n\n var minX = coord.x - width * 0.5;\n var minY = coord.y - height * 0.5;\n var maxX = coord.x + width;\n var maxY = coord.y + height;\n\n neighbors = index.range(minX, minY, maxX, maxY);\n neighborLength = neighbors.length;\n numPoints = 0;\n ids = [];\n\n for (j = 0; j < neighborLength; ++j) {\n neighborIndex = neighbors[j];\n neighborPoint = points[neighborIndex];\n if (!neighborPoint.clustered) {\n ++numPoints;\n\n collection = neighborPoint.collection;\n collectionIndex = neighborPoint.index;\n ids.push(collection.get(collectionIndex).id);\n }\n }\n\n if (numPoints >= minimumClusterSize) {\n addCluster(cluster.position, numPoints, ids, entityCluster);\n newClusters.push(cluster);\n\n for (j = 0; j < neighborLength; ++j) {\n points[neighbors[j]].clustered = true;\n }\n }\n }\n }\n\n length = points.length;\n for (i = 0; i < length; ++i) {\n var point = points[i];\n if (point.clustered) {\n continue;\n }\n\n point.clustered = true;\n\n collection = point.collection;\n collectionIndex = point.index;\n\n var item = collection.get(collectionIndex);\n bbox = getBoundingBox(\n item,\n point.coord,\n pixelRange,\n entityCluster,\n pointBoundinRectangleScratch\n );\n var totalBBox = BoundingRectangle.clone(\n bbox,\n totalBoundingRectangleScratch\n );\n\n neighbors = index.range(\n bbox.x,\n bbox.y,\n bbox.x + bbox.width,\n bbox.y + bbox.height\n );\n neighborLength = neighbors.length;\n\n var clusterPosition = Cartesian3.clone(item.position);\n numPoints = 1;\n ids = [item.id];\n\n for (j = 0; j < neighborLength; ++j) {\n neighborIndex = neighbors[j];\n neighborPoint = points[neighborIndex];\n if (!neighborPoint.clustered) {\n var neighborItem = neighborPoint.collection.get(neighborPoint.index);\n var neighborBBox = getBoundingBox(\n neighborItem,\n neighborPoint.coord,\n pixelRange,\n entityCluster,\n neighborBoundingRectangleScratch\n );\n\n Cartesian3.add(\n neighborItem.position,\n clusterPosition,\n clusterPosition\n );\n\n BoundingRectangle.union(totalBBox, neighborBBox, totalBBox);\n ++numPoints;\n\n ids.push(neighborItem.id);\n }\n }\n\n if (numPoints >= minimumClusterSize) {\n var position = Cartesian3.multiplyByScalar(\n clusterPosition,\n 1.0 / numPoints,\n clusterPosition\n );\n addCluster(position, numPoints, ids, entityCluster);\n newClusters.push({\n position: position,\n width: totalBBox.width,\n height: totalBBox.height,\n minimumWidth: bbox.width,\n minimumHeight: bbox.height,\n });\n\n for (j = 0; j < neighborLength; ++j) {\n points[neighbors[j]].clustered = true;\n }\n } else {\n addNonClusteredItem(item, entityCluster);\n }\n }\n\n if (clusteredLabelCollection.length === 0) {\n clusteredLabelCollection.destroy();\n entityCluster._clusterLabelCollection = undefined;\n }\n\n if (clusteredBillboardCollection.length === 0) {\n clusteredBillboardCollection.destroy();\n entityCluster._clusterBillboardCollection = undefined;\n }\n\n if (clusteredPointCollection.length === 0) {\n clusteredPointCollection.destroy();\n entityCluster._clusterPointCollection = undefined;\n }\n\n entityCluster._previousClusters = newClusters;\n entityCluster._previousHeight = currentHeight;\n };\n}\n\nEntityCluster.prototype._initialize = function (scene) {\n this._scene = scene;\n\n var cluster = createDeclutterCallback(this);\n this._cluster = cluster;\n this._removeEventListener = scene.camera.changed.addEventListener(cluster);\n};\n\nObject.defineProperties(EntityCluster.prototype, {\n /**\n * Gets or sets whether clustering is enabled.\n * @memberof EntityCluster.prototype\n * @type {Boolean}\n */\n enabled: {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this._enabledDirty = value !== this._enabled;\n this._enabled = value;\n },\n },\n /**\n * Gets or sets the pixel range to extend the screen space bounding box.\n * @memberof EntityCluster.prototype\n * @type {Number}\n */\n pixelRange: {\n get: function () {\n return this._pixelRange;\n },\n set: function (value) {\n this._clusterDirty = this._clusterDirty || value !== this._pixelRange;\n this._pixelRange = value;\n },\n },\n /**\n * Gets or sets the minimum number of screen space objects that can be clustered.\n * @memberof EntityCluster.prototype\n * @type {Number}\n */\n minimumClusterSize: {\n get: function () {\n return this._minimumClusterSize;\n },\n set: function (value) {\n this._clusterDirty =\n this._clusterDirty || value !== this._minimumClusterSize;\n this._minimumClusterSize = value;\n },\n },\n /**\n * Gets the event that will be raised when a new cluster will be displayed. The signature of the event listener is {@link EntityCluster.newClusterCallback}.\n * @memberof EntityCluster.prototype\n * @type {Event}\n */\n clusterEvent: {\n get: function () {\n return this._clusterEvent;\n },\n },\n /**\n * Gets or sets whether clustering billboard entities is enabled.\n * @memberof EntityCluster.prototype\n * @type {Boolean}\n */\n clusterBillboards: {\n get: function () {\n return this._clusterBillboards;\n },\n set: function (value) {\n this._clusterDirty =\n this._clusterDirty || value !== this._clusterBillboards;\n this._clusterBillboards = value;\n },\n },\n /**\n * Gets or sets whether clustering labels entities is enabled.\n * @memberof EntityCluster.prototype\n * @type {Boolean}\n */\n clusterLabels: {\n get: function () {\n return this._clusterLabels;\n },\n set: function (value) {\n this._clusterDirty = this._clusterDirty || value !== this._clusterLabels;\n this._clusterLabels = value;\n },\n },\n /**\n * Gets or sets whether clustering point entities is enabled.\n * @memberof EntityCluster.prototype\n * @type {Boolean}\n */\n clusterPoints: {\n get: function () {\n return this._clusterPoints;\n },\n set: function (value) {\n this._clusterDirty = this._clusterDirty || value !== this._clusterPoints;\n this._clusterPoints = value;\n },\n },\n});\n\nfunction createGetEntity(\n collectionProperty,\n CollectionConstructor,\n unusedIndicesProperty,\n entityIndexProperty\n) {\n return function (entity) {\n var collection = this[collectionProperty];\n\n if (!defined(this._collectionIndicesByEntity)) {\n this._collectionIndicesByEntity = {};\n }\n\n var entityIndices = this._collectionIndicesByEntity[entity.id];\n\n if (!defined(entityIndices)) {\n entityIndices = this._collectionIndicesByEntity[entity.id] = {\n billboardIndex: undefined,\n labelIndex: undefined,\n pointIndex: undefined,\n };\n }\n\n if (defined(collection) && defined(entityIndices[entityIndexProperty])) {\n return collection.get(entityIndices[entityIndexProperty]);\n }\n\n if (!defined(collection)) {\n collection = this[collectionProperty] = new CollectionConstructor({\n scene: this._scene,\n });\n }\n\n var index;\n var entityItem;\n\n var unusedIndices = this[unusedIndicesProperty];\n if (unusedIndices.length > 0) {\n index = unusedIndices.pop();\n entityItem = collection.get(index);\n } else {\n entityItem = collection.add();\n index = collection.length - 1;\n }\n\n entityIndices[entityIndexProperty] = index;\n\n this._clusterDirty = true;\n\n return entityItem;\n };\n}\n\nfunction removeEntityIndicesIfUnused(entityCluster, entityId) {\n var indices = entityCluster._collectionIndicesByEntity[entityId];\n\n if (\n !defined(indices.billboardIndex) &&\n !defined(indices.labelIndex) &&\n !defined(indices.pointIndex)\n ) {\n delete entityCluster._collectionIndicesByEntity[entityId];\n }\n}\n\n/**\n * Returns a new {@link Label}.\n * @param {Entity} entity The entity that will use the returned {@link Label} for visualization.\n * @returns {Label} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getLabel = createGetEntity(\n \"_labelCollection\",\n LabelCollection,\n \"_unusedLabelIndices\",\n \"labelIndex\"\n);\n\n/**\n * Removes the {@link Label} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Label} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removeLabel = function (entity) {\n var entityIndices =\n this._collectionIndicesByEntity &&\n this._collectionIndicesByEntity[entity.id];\n if (\n !defined(this._labelCollection) ||\n !defined(entityIndices) ||\n !defined(entityIndices.labelIndex)\n ) {\n return;\n }\n\n var index = entityIndices.labelIndex;\n entityIndices.labelIndex = undefined;\n removeEntityIndicesIfUnused(this, entity.id);\n\n var label = this._labelCollection.get(index);\n label.show = false;\n label.text = \"\";\n label.id = undefined;\n\n this._unusedLabelIndices.push(index);\n\n this._clusterDirty = true;\n};\n\n/**\n * Returns a new {@link Billboard}.\n * @param {Entity} entity The entity that will use the returned {@link Billboard} for visualization.\n * @returns {Billboard} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getBillboard = createGetEntity(\n \"_billboardCollection\",\n BillboardCollection,\n \"_unusedBillboardIndices\",\n \"billboardIndex\"\n);\n\n/**\n * Removes the {@link Billboard} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Billboard} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removeBillboard = function (entity) {\n var entityIndices =\n this._collectionIndicesByEntity &&\n this._collectionIndicesByEntity[entity.id];\n if (\n !defined(this._billboardCollection) ||\n !defined(entityIndices) ||\n !defined(entityIndices.billboardIndex)\n ) {\n return;\n }\n\n var index = entityIndices.billboardIndex;\n entityIndices.billboardIndex = undefined;\n removeEntityIndicesIfUnused(this, entity.id);\n\n var billboard = this._billboardCollection.get(index);\n billboard.id = undefined;\n billboard.show = false;\n billboard.image = undefined;\n\n this._unusedBillboardIndices.push(index);\n\n this._clusterDirty = true;\n};\n\n/**\n * Returns a new {@link Point}.\n * @param {Entity} entity The entity that will use the returned {@link Point} for visualization.\n * @returns {Point} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getPoint = createGetEntity(\n \"_pointCollection\",\n PointPrimitiveCollection,\n \"_unusedPointIndices\",\n \"pointIndex\"\n);\n\n/**\n * Removes the {@link Point} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Point} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removePoint = function (entity) {\n var entityIndices =\n this._collectionIndicesByEntity &&\n this._collectionIndicesByEntity[entity.id];\n if (\n !defined(this._pointCollection) ||\n !defined(entityIndices) ||\n !defined(entityIndices.pointIndex)\n ) {\n return;\n }\n\n var index = entityIndices.pointIndex;\n entityIndices.pointIndex = undefined;\n removeEntityIndicesIfUnused(this, entity.id);\n\n var point = this._pointCollection.get(index);\n point.show = false;\n point.id = undefined;\n\n this._unusedPointIndices.push(index);\n\n this._clusterDirty = true;\n};\n\nfunction disableCollectionClustering(collection) {\n if (!defined(collection)) {\n return;\n }\n\n var length = collection.length;\n for (var i = 0; i < length; ++i) {\n collection.get(i).clusterShow = true;\n }\n}\n\nfunction updateEnable(entityCluster) {\n if (entityCluster.enabled) {\n return;\n }\n\n if (defined(entityCluster._clusterLabelCollection)) {\n entityCluster._clusterLabelCollection.destroy();\n }\n if (defined(entityCluster._clusterBillboardCollection)) {\n entityCluster._clusterBillboardCollection.destroy();\n }\n if (defined(entityCluster._clusterPointCollection)) {\n entityCluster._clusterPointCollection.destroy();\n }\n\n entityCluster._clusterLabelCollection = undefined;\n entityCluster._clusterBillboardCollection = undefined;\n entityCluster._clusterPointCollection = undefined;\n\n disableCollectionClustering(entityCluster._labelCollection);\n disableCollectionClustering(entityCluster._billboardCollection);\n disableCollectionClustering(entityCluster._pointCollection);\n}\n\n/**\n * Gets the draw commands for the clustered billboards/points/labels if enabled, otherwise,\n * queues the draw commands for billboards/points/labels created for entities.\n * @private\n */\nEntityCluster.prototype.update = function (frameState) {\n // If clustering is enabled before the label collection is updated,\n // the glyphs haven't been created so the screen space bounding boxes\n // are incorrect.\n var commandList;\n if (\n defined(this._labelCollection) &&\n this._labelCollection.length > 0 &&\n this._labelCollection.get(0)._glyphs.length === 0\n ) {\n commandList = frameState.commandList;\n frameState.commandList = [];\n this._labelCollection.update(frameState);\n frameState.commandList = commandList;\n }\n\n // If clustering is enabled before the billboard collection is updated,\n // the images haven't been added to the image atlas so the screen space bounding boxes\n // are incorrect.\n if (\n defined(this._billboardCollection) &&\n this._billboardCollection.length > 0 &&\n !defined(this._billboardCollection.get(0).width)\n ) {\n commandList = frameState.commandList;\n frameState.commandList = [];\n this._billboardCollection.update(frameState);\n frameState.commandList = commandList;\n }\n\n if (this._enabledDirty) {\n this._enabledDirty = false;\n updateEnable(this);\n this._clusterDirty = true;\n }\n\n if (this._clusterDirty) {\n this._clusterDirty = false;\n this._cluster();\n }\n\n if (defined(this._clusterLabelCollection)) {\n this._clusterLabelCollection.update(frameState);\n }\n if (defined(this._clusterBillboardCollection)) {\n this._clusterBillboardCollection.update(frameState);\n }\n if (defined(this._clusterPointCollection)) {\n this._clusterPointCollection.update(frameState);\n }\n\n if (defined(this._labelCollection)) {\n this._labelCollection.update(frameState);\n }\n if (defined(this._billboardCollection)) {\n this._billboardCollection.update(frameState);\n }\n if (defined(this._pointCollection)) {\n this._pointCollection.update(frameState);\n }\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Unlike other objects that use WebGL resources, this object can be reused. For example, if a data source is removed\n * from a data source collection and added to another.\n * </p>\n */\nEntityCluster.prototype.destroy = function () {\n this._labelCollection =\n this._labelCollection && this._labelCollection.destroy();\n this._billboardCollection =\n this._billboardCollection && this._billboardCollection.destroy();\n this._pointCollection =\n this._pointCollection && this._pointCollection.destroy();\n\n this._clusterLabelCollection =\n this._clusterLabelCollection && this._clusterLabelCollection.destroy();\n this._clusterBillboardCollection =\n this._clusterBillboardCollection &&\n this._clusterBillboardCollection.destroy();\n this._clusterPointCollection =\n this._clusterPointCollection && this._clusterPointCollection.destroy();\n\n if (defined(this._removeEventListener)) {\n this._removeEventListener();\n this._removeEventListener = undefined;\n }\n\n this._labelCollection = undefined;\n this._billboardCollection = undefined;\n this._pointCollection = undefined;\n\n this._clusterBillboardCollection = undefined;\n this._clusterLabelCollection = undefined;\n this._clusterPointCollection = undefined;\n\n this._collectionIndicesByEntity = undefined;\n\n this._unusedLabelIndices = [];\n this._unusedBillboardIndices = [];\n this._unusedPointIndices = [];\n\n this._previousClusters = [];\n this._previousHeight = undefined;\n\n this._enabledDirty = false;\n this._pixelRangeDirty = false;\n this._minimumClusterSizeDirty = false;\n\n return undefined;\n};\n\n/**\n * A event listener function used to style clusters.\n * @callback EntityCluster.newClusterCallback\n *\n * @param {Entity[]} clusteredEntities An array of the entities contained in the cluster.\n * @param {Object} cluster An object containing billboard, label, and point properties. The values are the same as\n * billboard, label and point entities, but must be the values of the ConstantProperty.\n *\n * @example\n * // The default cluster values.\n * dataSource.clustering.clusterEvent.addEventListener(function(entities, cluster) {\n * cluster.label.show = true;\n * cluster.label.text = entities.length.toLocaleString();\n * });\n */\nexport default EntityCluster;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport DataSource from \"./DataSource.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\n\n/**\n * A {@link DataSource} implementation which can be used to manually manage a group of entities.\n *\n * @alias CustomDataSource\n * @constructor\n *\n * @param {String} [name] A human-readable name for this instance.\n *\n * @example\n * var dataSource = new Cesium.CustomDataSource('myData');\n *\n * var entity = dataSource.entities.add({\n * position : Cesium.Cartesian3.fromDegrees(1, 2, 0),\n * billboard : {\n * image : 'image.png'\n * }\n * });\n *\n * viewer.dataSources.add(dataSource);\n */\nfunction CustomDataSource(name) {\n this._name = name;\n this._clock = undefined;\n this._changed = new Event();\n this._error = new Event();\n this._isLoading = false;\n this._loading = new Event();\n this._entityCollection = new EntityCollection(this);\n this._entityCluster = new EntityCluster();\n}\n\nObject.defineProperties(CustomDataSource.prototype, {\n /**\n * Gets or sets a human-readable name for this instance.\n * @memberof CustomDataSource.prototype\n * @type {String}\n */\n name: {\n get: function () {\n return this._name;\n },\n set: function (value) {\n if (this._name !== value) {\n this._name = value;\n this._changed.raiseEvent(this);\n }\n },\n },\n /**\n * Gets or sets the clock for this instance.\n * @memberof CustomDataSource.prototype\n * @type {DataSourceClock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n set: function (value) {\n if (this._clock !== value) {\n this._clock = value;\n this._changed.raiseEvent(this);\n }\n },\n },\n /**\n * Gets the collection of {@link Entity} instances.\n * @memberof CustomDataSource.prototype\n * @type {EntityCollection}\n */\n entities: {\n get: function () {\n return this._entityCollection;\n },\n },\n /**\n * Gets or sets whether the data source is currently loading data.\n * @memberof CustomDataSource.prototype\n * @type {Boolean}\n */\n isLoading: {\n get: function () {\n return this._isLoading;\n },\n set: function (value) {\n DataSource.setLoading(this, value);\n },\n },\n /**\n * Gets an event that will be raised when the underlying data changes.\n * @memberof CustomDataSource.prototype\n * @type {Event}\n */\n changedEvent: {\n get: function () {\n return this._changed;\n },\n },\n /**\n * Gets an event that will be raised if an error is encountered during processing.\n * @memberof CustomDataSource.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._error;\n },\n },\n /**\n * Gets an event that will be raised when the data source either starts or stops loading.\n * @memberof CustomDataSource.prototype\n * @type {Event}\n */\n loadingEvent: {\n get: function () {\n return this._loading;\n },\n },\n /**\n * Gets whether or not this data source should be displayed.\n * @memberof CustomDataSource.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._entityCollection.show;\n },\n set: function (value) {\n this._entityCollection.show = value;\n },\n },\n\n /**\n * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n *\n * @memberof CustomDataSource.prototype\n * @type {EntityCluster}\n */\n clustering: {\n get: function () {\n return this._entityCluster;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value must be defined.\");\n }\n //>>includeEnd('debug');\n this._entityCluster = value;\n },\n },\n});\n\n/**\n * Updates the data source to the provided time. This function is optional and\n * is not required to be implemented. It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nCustomDataSource.prototype.update = function (time) {\n return true;\n};\n\nexport default CustomDataSource;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CylinderGeometry from \"../Core/CylinderGeometry.js\";\nimport CylinderOutlineGeometry from \"../Core/CylinderOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport Property from \"./Property.js\";\n\nvar defaultOffset = Cartesian3.ZERO;\n\nvar offsetScratch = new Cartesian3();\nvar positionScratch = new Cartesian3();\nvar scratchColor = new Color();\n\nfunction CylinderGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.length = undefined;\n this.topRadius = undefined;\n this.bottomRadius = undefined;\n this.slices = undefined;\n this.numberOfVerticalLines = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for cylinders.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias CylinderGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction CylinderGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new CylinderGeometryOptions(entity),\n geometryPropertyName: \"cylinder\",\n observedPropertyNames: [\n \"availability\",\n \"position\",\n \"orientation\",\n \"cylinder\",\n ],\n });\n\n this._onEntityPropertyChanged(entity, \"cylinder\", entity.cylinder, undefined);\n}\n\nif (defined(Object.create)) {\n CylinderGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n CylinderGeometryUpdater.prototype.constructor = CylinderGeometryUpdater;\n}\n\nObject.defineProperties(CylinderGeometryUpdater.prototype, {\n /**\n * Gets the terrain offset property\n * @type {TerrainOffsetProperty}\n * @memberof CylinderGeometryUpdater.prototype\n * @readonly\n * @private\n */\n terrainOffsetProperty: {\n get: function () {\n return this._terrainOffsetProperty;\n },\n },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nCylinderGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n\n var attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: undefined,\n offset: undefined,\n };\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new CylinderGeometry(this._options),\n modelMatrix: entity.computeModelMatrixForHeightReference(\n time,\n entity.cylinder.heightReference,\n this._options.length * 0.5,\n this._scene.mapProjection.ellipsoid\n ),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nCylinderGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new CylinderOutlineGeometry(this._options),\n modelMatrix: entity.computeModelMatrixForHeightReference(\n time,\n entity.cylinder.heightReference,\n this._options.length * 0.5,\n this._scene.mapProjection.ellipsoid\n ),\n attributes: attributes,\n });\n};\n\nCylinderGeometryUpdater.prototype._computeCenter = function (time, result) {\n return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nCylinderGeometryUpdater.prototype._isHidden = function (entity, cylinder) {\n return (\n !defined(entity.position) ||\n !defined(cylinder.length) ||\n !defined(cylinder.topRadius) ||\n !defined(cylinder.bottomRadius) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, cylinder)\n );\n};\n\nCylinderGeometryUpdater.prototype._isDynamic = function (entity, cylinder) {\n return (\n !entity.position.isConstant || //\n !Property.isConstant(entity.orientation) || //\n !cylinder.length.isConstant || //\n !cylinder.topRadius.isConstant || //\n !cylinder.bottomRadius.isConstant || //\n !Property.isConstant(cylinder.slices) || //\n !Property.isConstant(cylinder.outlineWidth) || //\n !Property.isConstant(cylinder.numberOfVerticalLines)\n );\n};\n\nCylinderGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n cylinder\n) {\n var heightReference = Property.getValueOrDefault(\n cylinder.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var options = this._options;\n options.vertexFormat =\n this._materialProperty instanceof ColorMaterialProperty\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.length = cylinder.length.getValue(Iso8601.MINIMUM_VALUE);\n options.topRadius = cylinder.topRadius.getValue(Iso8601.MINIMUM_VALUE);\n options.bottomRadius = cylinder.bottomRadius.getValue(Iso8601.MINIMUM_VALUE);\n options.slices = Property.getValueOrUndefined(\n cylinder.slices,\n Iso8601.MINIMUM_VALUE\n );\n options.numberOfVerticalLines = Property.getValueOrUndefined(\n cylinder.numberOfVerticalLines,\n Iso8601.MINIMUM_VALUE\n );\n options.offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n};\n\nCylinderGeometryUpdater.prototype._onEntityPropertyChanged = heightReferenceOnEntityPropertyChanged;\n\nCylinderGeometryUpdater.DynamicGeometryUpdater = DynamicCylinderGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicCylinderGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicCylinderGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicCylinderGeometryUpdater.prototype.constructor = DynamicCylinderGeometryUpdater;\n}\n\nDynamicCylinderGeometryUpdater.prototype._isHidden = function (\n entity,\n cylinder,\n time\n) {\n var options = this._options;\n var position = Property.getValueOrUndefined(\n entity.position,\n time,\n positionScratch\n );\n return (\n !defined(position) ||\n !defined(options.length) ||\n !defined(options.topRadius) || //\n !defined(options.bottomRadius) ||\n DynamicGeometryUpdater.prototype._isHidden.call(\n this,\n entity,\n cylinder,\n time\n )\n );\n};\n\nDynamicCylinderGeometryUpdater.prototype._setOptions = function (\n entity,\n cylinder,\n time\n) {\n var heightReference = Property.getValueOrDefault(\n cylinder.heightReference,\n time,\n HeightReference.NONE\n );\n var options = this._options;\n options.length = Property.getValueOrUndefined(cylinder.length, time);\n options.topRadius = Property.getValueOrUndefined(cylinder.topRadius, time);\n options.bottomRadius = Property.getValueOrUndefined(\n cylinder.bottomRadius,\n time\n );\n options.slices = Property.getValueOrUndefined(cylinder.slices, time);\n options.numberOfVerticalLines = Property.getValueOrUndefined(\n cylinder.numberOfVerticalLines,\n time\n );\n options.offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n};\nexport default CylinderGeometryUpdater;\n","import Clock from \"../Core/Clock.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createRawPropertyDescriptor from \"./createRawPropertyDescriptor.js\";\n\n/**\n * Represents desired clock settings for a particular {@link DataSource}. These settings may be applied\n * to the {@link Clock} when the DataSource is loaded.\n *\n * @alias DataSourceClock\n * @constructor\n */\nfunction DataSourceClock() {\n this._definitionChanged = new Event();\n this._startTime = undefined;\n this._stopTime = undefined;\n this._currentTime = undefined;\n this._clockRange = undefined;\n this._clockStep = undefined;\n this._multiplier = undefined;\n}\n\nObject.defineProperties(DataSourceClock.prototype, {\n /**\n * Gets the event that is raised whenever a new property is assigned.\n * @memberof DataSourceClock.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the desired start time of the clock.\n * See {@link Clock#startTime}.\n * @memberof DataSourceClock.prototype\n * @type {JulianDate}\n */\n startTime: createRawPropertyDescriptor(\"startTime\"),\n\n /**\n * Gets or sets the desired stop time of the clock.\n * See {@link Clock#stopTime}.\n * @memberof DataSourceClock.prototype\n * @type {JulianDate}\n */\n stopTime: createRawPropertyDescriptor(\"stopTime\"),\n\n /**\n * Gets or sets the desired current time when this data source is loaded.\n * See {@link Clock#currentTime}.\n * @memberof DataSourceClock.prototype\n * @type {JulianDate}\n */\n currentTime: createRawPropertyDescriptor(\"currentTime\"),\n\n /**\n * Gets or sets the desired clock range setting.\n * See {@link Clock#clockRange}.\n * @memberof DataSourceClock.prototype\n * @type {ClockRange}\n */\n clockRange: createRawPropertyDescriptor(\"clockRange\"),\n\n /**\n * Gets or sets the desired clock step setting.\n * See {@link Clock#clockStep}.\n * @memberof DataSourceClock.prototype\n * @type {ClockStep}\n */\n clockStep: createRawPropertyDescriptor(\"clockStep\"),\n\n /**\n * Gets or sets the desired clock multiplier.\n * See {@link Clock#multiplier}.\n * @memberof DataSourceClock.prototype\n * @type {Number}\n */\n multiplier: createRawPropertyDescriptor(\"multiplier\"),\n});\n\n/**\n * Duplicates a DataSourceClock instance.\n *\n * @param {DataSourceClock} [result] The object onto which to store the result.\n * @returns {DataSourceClock} The modified result parameter or a new instance if one was not provided.\n */\nDataSourceClock.prototype.clone = function (result) {\n if (!defined(result)) {\n result = new DataSourceClock();\n }\n result.startTime = this.startTime;\n result.stopTime = this.stopTime;\n result.currentTime = this.currentTime;\n result.clockRange = this.clockRange;\n result.clockStep = this.clockStep;\n result.multiplier = this.multiplier;\n return result;\n};\n\n/**\n * Returns true if this DataSourceClock is equivalent to the other\n *\n * @param {DataSourceClock} other The other DataSourceClock to compare to.\n * @returns {Boolean} <code>true</code> if the DataSourceClocks are equal; otherwise, <code>false</code>.\n */\nDataSourceClock.prototype.equals = function (other) {\n return (\n this === other ||\n (defined(other) &&\n JulianDate.equals(this.startTime, other.startTime) &&\n JulianDate.equals(this.stopTime, other.stopTime) &&\n JulianDate.equals(this.currentTime, other.currentTime) &&\n this.clockRange === other.clockRange &&\n this.clockStep === other.clockStep &&\n this.multiplier === other.multiplier)\n );\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {DataSourceClock} source The object to be merged into this object.\n */\nDataSourceClock.prototype.merge = function (source) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(source)) {\n throw new DeveloperError(\"source is required.\");\n }\n //>>includeEnd('debug');\n\n this.startTime = defaultValue(this.startTime, source.startTime);\n this.stopTime = defaultValue(this.stopTime, source.stopTime);\n this.currentTime = defaultValue(this.currentTime, source.currentTime);\n this.clockRange = defaultValue(this.clockRange, source.clockRange);\n this.clockStep = defaultValue(this.clockStep, source.clockStep);\n this.multiplier = defaultValue(this.multiplier, source.multiplier);\n};\n\n/**\n * Gets the value of this clock instance as a {@link Clock} object.\n *\n * @returns {Clock} The modified result parameter or a new instance if one was not provided.\n */\nDataSourceClock.prototype.getValue = function (result) {\n if (!defined(result)) {\n result = new Clock();\n }\n result.startTime = defaultValue(this.startTime, result.startTime);\n result.stopTime = defaultValue(this.stopTime, result.stopTime);\n result.currentTime = defaultValue(this.currentTime, result.currentTime);\n result.clockRange = defaultValue(this.clockRange, result.clockRange);\n result.multiplier = defaultValue(this.multiplier, result.multiplier);\n result.clockStep = defaultValue(this.clockStep, result.clockStep);\n return result;\n};\nexport default DataSourceClock;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultCellAlpha = 0.1;\nvar defaultLineCount = new Cartesian2(8, 8);\nvar defaultLineOffset = new Cartesian2(0, 0);\nvar defaultLineThickness = new Cartesian2(1, 1);\n\n/**\n * A {@link MaterialProperty} that maps to grid {@link Material} uniforms.\n * @alias GridMaterialProperty\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the grid {@link Color}.\n * @param {Property|Number} [options.cellAlpha=0.1] A numeric Property specifying cell alpha values.\n * @param {Property|Cartesian2} [options.lineCount=new Cartesian2(8, 8)] A {@link Cartesian2} Property specifying the number of grid lines along each axis.\n * @param {Property|Cartesian2} [options.lineThickness=new Cartesian2(1.0, 1.0)] A {@link Cartesian2} Property specifying the thickness of grid lines along each axis.\n * @param {Property|Cartesian2} [options.lineOffset=new Cartesian2(0.0, 0.0)] A {@link Cartesian2} Property specifying starting offset of grid lines along each axis.\n *\n * @constructor\n */\nfunction GridMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n this._cellAlpha = undefined;\n this._cellAlphaSubscription = undefined;\n this._lineCount = undefined;\n this._lineCountSubscription = undefined;\n this._lineThickness = undefined;\n this._lineThicknessSubscription = undefined;\n this._lineOffset = undefined;\n this._lineOffsetSubscription = undefined;\n\n this.color = options.color;\n this.cellAlpha = options.cellAlpha;\n this.lineCount = options.lineCount;\n this.lineThickness = options.lineThickness;\n this.lineOffset = options.lineOffset;\n}\n\nObject.defineProperties(GridMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof GridMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._color) &&\n Property.isConstant(this._cellAlpha) &&\n Property.isConstant(this._lineCount) &&\n Property.isConstant(this._lineThickness) &&\n Property.isConstant(this._lineOffset)\n );\n },\n },\n\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof GridMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the Property specifying the grid {@link Color}.\n * @memberof GridMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the numeric Property specifying cell alpha values.\n * @memberof GridMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 0.1\n */\n cellAlpha: createPropertyDescriptor(\"cellAlpha\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the number of grid lines along each axis.\n * @memberof GridMaterialProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(8.0, 8.0)\n */\n lineCount: createPropertyDescriptor(\"lineCount\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the thickness of grid lines along each axis.\n * @memberof GridMaterialProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(1.0, 1.0)\n */\n lineThickness: createPropertyDescriptor(\"lineThickness\"),\n\n /**\n * Gets or sets the {@link Cartesian2} Property specifying the starting offset of grid lines along each axis.\n * @memberof GridMaterialProperty.prototype\n * @type {Property|undefined}\n * @default new Cartesian2(0.0, 0.0)\n */\n lineOffset: createPropertyDescriptor(\"lineOffset\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nGridMaterialProperty.prototype.getType = function (time) {\n return \"Grid\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nGridMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n defaultColor,\n result.color\n );\n result.cellAlpha = Property.getValueOrDefault(\n this._cellAlpha,\n time,\n defaultCellAlpha\n );\n result.lineCount = Property.getValueOrClonedDefault(\n this._lineCount,\n time,\n defaultLineCount,\n result.lineCount\n );\n result.lineThickness = Property.getValueOrClonedDefault(\n this._lineThickness,\n time,\n defaultLineThickness,\n result.lineThickness\n );\n result.lineOffset = Property.getValueOrClonedDefault(\n this._lineOffset,\n time,\n defaultLineOffset,\n result.lineOffset\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nGridMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof GridMaterialProperty && //\n Property.equals(this._color, other._color) && //\n Property.equals(this._cellAlpha, other._cellAlpha) && //\n Property.equals(this._lineCount, other._lineCount) && //\n Property.equals(this._lineThickness, other._lineThickness) && //\n Property.equals(this._lineOffset, other._lineOffset))\n );\n};\nexport default GridMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link MaterialProperty} that maps to PolylineArrow {@link Material} uniforms.\n *\n * @param {Property|Color} [color=Color.WHITE] The {@link Color} Property to be used.\n *\n * @alias PolylineArrowMaterialProperty\n * @constructor\n */\nfunction PolylineArrowMaterialProperty(color) {\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n\n this.color = color;\n}\n\nObject.defineProperties(PolylineArrowMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof PolylineArrowMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return Property.isConstant(this._color);\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof PolylineArrowMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the {@link Color} {@link Property}.\n * @memberof PolylineArrowMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nPolylineArrowMaterialProperty.prototype.getType = function (time) {\n return \"PolylineArrow\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineArrowMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n Color.WHITE,\n result.color\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineArrowMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PolylineArrowMaterialProperty && //\n Property.equals(this._color, other._color))\n );\n};\nexport default PolylineArrowMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultGapColor = Color.TRANSPARENT;\nvar defaultDashLength = 16.0;\nvar defaultDashPattern = 255.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline dash {@link Material} uniforms.\n * @alias PolylineDashMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|Color} [options.gapColor=Color.TRANSPARENT] A Property specifying the {@link Color} of the gaps in the line.\n * @param {Property|Number} [options.dashLength=16.0] A numeric Property specifying the length of the dash pattern in pixels.\n * @param {Property|Number} [options.dashPattern=255.0] A numeric Property specifying a 16 bit pattern for the dash\n */\nfunction PolylineDashMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n this._gapColor = undefined;\n this._gapColorSubscription = undefined;\n this._dashLength = undefined;\n this._dashLengthSubscription = undefined;\n this._dashPattern = undefined;\n this._dashPatternSubscription = undefined;\n\n this.color = options.color;\n this.gapColor = options.gapColor;\n this.dashLength = options.dashLength;\n this.dashPattern = options.dashPattern;\n}\n\nObject.defineProperties(PolylineDashMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._color) &&\n Property.isConstant(this._gapColor) &&\n Property.isConstant(this._dashLength) &&\n Property.isConstant(this._dashPattern)\n );\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the Property specifying the {@link Color} of the line.\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Property|undefined}\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the gaps in the line.\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Property|undefined}\n */\n gapColor: createPropertyDescriptor(\"gapColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the length of a dash cycle\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Property|undefined}\n */\n dashLength: createPropertyDescriptor(\"dashLength\"),\n\n /**\n * Gets or sets the numeric Property specifying a dash pattern\n * @memberof PolylineDashMaterialProperty.prototype\n * @type {Property|undefined}\n */\n dashPattern: createPropertyDescriptor(\"dashPattern\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nPolylineDashMaterialProperty.prototype.getType = function (time) {\n return \"PolylineDash\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineDashMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n defaultColor,\n result.color\n );\n result.gapColor = Property.getValueOrClonedDefault(\n this._gapColor,\n time,\n defaultGapColor,\n result.gapColor\n );\n result.dashLength = Property.getValueOrDefault(\n this._dashLength,\n time,\n defaultDashLength,\n result.dashLength\n );\n result.dashPattern = Property.getValueOrDefault(\n this._dashPattern,\n time,\n defaultDashPattern,\n result.dashPattern\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineDashMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PolylineDashMaterialProperty &&\n Property.equals(this._color, other._color) &&\n Property.equals(this._gapColor, other._gapColor) &&\n Property.equals(this._dashLength, other._dashLength) &&\n Property.equals(this._dashPattern, other._dashPattern))\n );\n};\nexport default PolylineDashMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultGlowPower = 0.25;\nvar defaultTaperPower = 1.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline glow {@link Material} uniforms.\n * @alias PolylineGlowMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|Number} [options.glowPower=0.25] A numeric Property specifying the strength of the glow, as a percentage of the total line width.\n * @param {Property|Number} [options.taperPower=1.0] A numeric Property specifying the strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used.\n */\nfunction PolylineGlowMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n this._glowPower = undefined;\n this._glowPowerSubscription = undefined;\n this._taperPower = undefined;\n this._taperPowerSubscription = undefined;\n\n this.color = options.color;\n this.glowPower = options.glowPower;\n this.taperPower = options.taperPower;\n}\n\nObject.defineProperties(PolylineGlowMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof PolylineGlowMaterialProperty.prototype\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._color) && Property.isConstant(this._glow)\n );\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof PolylineGlowMaterialProperty.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the Property specifying the {@link Color} of the line.\n * @memberof PolylineGlowMaterialProperty.prototype\n * @type {Property|undefined}\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the numeric Property specifying the strength of the glow, as a percentage of the total line width (less than 1.0).\n * @memberof PolylineGlowMaterialProperty.prototype\n * @type {Property|undefined}\n */\n glowPower: createPropertyDescriptor(\"glowPower\"),\n\n /**\n * Gets or sets the numeric Property specifying the strength of the tapering effect, as a percentage of the total line length. If 1.0 or higher, no taper effect is used.\n * @memberof PolylineGlowMaterialProperty.prototype\n * @type {Property|undefined}\n */\n taperPower: createPropertyDescriptor(\"taperPower\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nPolylineGlowMaterialProperty.prototype.getType = function (time) {\n return \"PolylineGlow\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineGlowMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n defaultColor,\n result.color\n );\n result.glowPower = Property.getValueOrDefault(\n this._glowPower,\n time,\n defaultGlowPower,\n result.glowPower\n );\n result.taperPower = Property.getValueOrDefault(\n this._taperPower,\n time,\n defaultTaperPower,\n result.taperPower\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineGlowMaterialProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof PolylineGlowMaterialProperty &&\n Property.equals(this._color, other._color) &&\n Property.equals(this._glowPower, other._glowPower) &&\n Property.equals(this._taperPower, other._taperPower))\n );\n};\nexport default PolylineGlowMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultOutlineColor = Color.BLACK;\nvar defaultOutlineWidth = 1.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline outline {@link Material} uniforms.\n * @alias PolylineOutlineMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|Color} [options.outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @param {Property|Number} [options.outlineWidth=1.0] A numeric Property specifying the width of the outline, in pixels.\n */\nfunction PolylineOutlineMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._color = undefined;\n this._colorSubscription = undefined;\n this._outlineColor = undefined;\n this._outlineColorSubscription = undefined;\n this._outlineWidth = undefined;\n this._outlineWidthSubscription = undefined;\n\n this.color = options.color;\n this.outlineColor = options.outlineColor;\n this.outlineWidth = options.outlineWidth;\n}\n\nObject.defineProperties(PolylineOutlineMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof PolylineOutlineMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._color) &&\n Property.isConstant(this._outlineColor) &&\n Property.isConstant(this._outlineWidth)\n );\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof PolylineOutlineMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the Property specifying the {@link Color} of the line.\n * @memberof PolylineOutlineMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n color: createPropertyDescriptor(\"color\"),\n\n /**\n * Gets or sets the Property specifying the {@link Color} of the outline.\n * @memberof PolylineOutlineMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the width of the outline.\n * @memberof PolylineOutlineMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nPolylineOutlineMaterialProperty.prototype.getType = function (time) {\n return \"PolylineOutline\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineOutlineMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.color = Property.getValueOrClonedDefault(\n this._color,\n time,\n defaultColor,\n result.color\n );\n result.outlineColor = Property.getValueOrClonedDefault(\n this._outlineColor,\n time,\n defaultOutlineColor,\n result.outlineColor\n );\n result.outlineWidth = Property.getValueOrDefault(\n this._outlineWidth,\n time,\n defaultOutlineWidth\n );\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineOutlineMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PolylineOutlineMaterialProperty && //\n Property.equals(this._color, other._color) && //\n Property.equals(this._outlineColor, other._outlineColor) && //\n Property.equals(this._outlineWidth, other._outlineWidth))\n );\n};\nexport default PolylineOutlineMaterialProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is an array whose items are the computed value\n * of other PositionProperty instances.\n *\n * @alias PositionPropertyArray\n * @constructor\n *\n * @param {Property[]} [value] An array of Property instances.\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction PositionPropertyArray(value, referenceFrame) {\n this._value = undefined;\n this._definitionChanged = new Event();\n this._eventHelper = new EventHelper();\n this._referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n this.setValue(value);\n}\n\nObject.defineProperties(PositionPropertyArray.prototype, {\n /**\n * Gets a value indicating if this property is constant. This property\n * is considered constant if all property items in the array are constant.\n * @memberof PositionPropertyArray.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n var value = this._value;\n if (!defined(value)) {\n return true;\n }\n\n var length = value.length;\n for (var i = 0; i < length; i++) {\n if (!Property.isConstant(value[i])) {\n return false;\n }\n }\n return true;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value or one of the properties in the array also changes.\n * @memberof PositionPropertyArray.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the reference frame in which the position is defined.\n * @memberof PositionPropertyArray.prototype\n * @type {ReferenceFrame}\n * @default ReferenceFrame.FIXED;\n */\n referenceFrame: {\n get: function () {\n return this._referenceFrame;\n },\n },\n});\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Cartesian3[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3[]} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionPropertyArray.prototype.getValue = function (time, result) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3[]} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionPropertyArray.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (!defined(referenceFrame)) {\n throw new DeveloperError(\"referenceFrame is required.\");\n }\n //>>includeEnd('debug');\n\n var value = this._value;\n if (!defined(value)) {\n return undefined;\n }\n\n var length = value.length;\n if (!defined(result)) {\n result = new Array(length);\n }\n var i = 0;\n var x = 0;\n while (i < length) {\n var property = value[i];\n var itemValue = property.getValueInReferenceFrame(\n time,\n referenceFrame,\n result[i]\n );\n if (defined(itemValue)) {\n result[x] = itemValue;\n x++;\n }\n i++;\n }\n result.length = x;\n return result;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Property[]} value An array of Property instances.\n */\nPositionPropertyArray.prototype.setValue = function (value) {\n var eventHelper = this._eventHelper;\n eventHelper.removeAll();\n\n if (defined(value)) {\n this._value = value.slice();\n var length = value.length;\n for (var i = 0; i < length; i++) {\n var property = value[i];\n if (defined(property)) {\n eventHelper.add(\n property.definitionChanged,\n PositionPropertyArray.prototype._raiseDefinitionChanged,\n this\n );\n }\n }\n } else {\n this._value = undefined;\n }\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPositionPropertyArray.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PositionPropertyArray && //\n this._referenceFrame === other._referenceFrame && //\n Property.arrayEquals(this._value, other._value))\n );\n};\n\nPositionPropertyArray.prototype._raiseDefinitionChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default PositionPropertyArray;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is an array whose items are the computed value\n * of other property instances.\n *\n * @alias PropertyArray\n * @constructor\n *\n * @param {Property[]} [value] An array of Property instances.\n */\nfunction PropertyArray(value) {\n this._value = undefined;\n this._definitionChanged = new Event();\n this._eventHelper = new EventHelper();\n this.setValue(value);\n}\n\nObject.defineProperties(PropertyArray.prototype, {\n /**\n * Gets a value indicating if this property is constant. This property\n * is considered constant if all property items in the array are constant.\n * @memberof PropertyArray.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n var value = this._value;\n if (!defined(value)) {\n return true;\n }\n var length = value.length;\n for (var i = 0; i < length; i++) {\n if (!Property.isConstant(value[i])) {\n return false;\n }\n }\n return true;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value or one of the properties in the array also changes.\n * @memberof PropertyArray.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object[]} The modified result parameter, which is an array of values produced by evaluating each of the contained properties at the given time or a new instance if the result parameter was not supplied.\n */\nPropertyArray.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var value = this._value;\n if (!defined(value)) {\n return undefined;\n }\n\n var length = value.length;\n if (!defined(result)) {\n result = new Array(length);\n }\n var i = 0;\n var x = 0;\n while (i < length) {\n var property = this._value[i];\n var itemValue = property.getValue(time, result[i]);\n if (defined(itemValue)) {\n result[x] = itemValue;\n x++;\n }\n i++;\n }\n result.length = x;\n return result;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Property[]} value An array of Property instances.\n */\nPropertyArray.prototype.setValue = function (value) {\n var eventHelper = this._eventHelper;\n eventHelper.removeAll();\n\n if (defined(value)) {\n this._value = value.slice();\n var length = value.length;\n for (var i = 0; i < length; i++) {\n var property = value[i];\n if (defined(property)) {\n eventHelper.add(\n property.definitionChanged,\n PropertyArray.prototype._raiseDefinitionChanged,\n this\n );\n }\n }\n } else {\n this._value = undefined;\n }\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPropertyArray.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof PropertyArray && //\n Property.arrayEquals(this._value, other._value))\n );\n};\n\nPropertyArray.prototype._raiseDefinitionChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default PropertyArray;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Property from \"./Property.js\";\n\nfunction resolve(that) {\n var targetProperty = that._targetProperty;\n\n if (!defined(targetProperty)) {\n var targetEntity = that._targetEntity;\n\n if (!defined(targetEntity)) {\n targetEntity = that._targetCollection.getById(that._targetId);\n\n if (!defined(targetEntity)) {\n // target entity not found\n that._targetEntity = that._targetProperty = undefined;\n return;\n }\n\n // target entity was found. listen for changes to entity definition\n targetEntity.definitionChanged.addEventListener(\n ReferenceProperty.prototype._onTargetEntityDefinitionChanged,\n that\n );\n that._targetEntity = targetEntity;\n }\n\n // walk the list of property names and resolve properties\n var targetPropertyNames = that._targetPropertyNames;\n targetProperty = that._targetEntity;\n for (\n var i = 0, len = targetPropertyNames.length;\n i < len && defined(targetProperty);\n ++i\n ) {\n targetProperty = targetProperty[targetPropertyNames[i]];\n }\n\n // target property may or may not be defined, depending on if it was found\n that._targetProperty = targetProperty;\n }\n\n return targetProperty;\n}\n\n/**\n * A {@link Property} which transparently links to another property on a provided object.\n *\n * @alias ReferenceProperty\n * @constructor\n *\n * @param {EntityCollection} targetCollection The entity collection which will be used to resolve the reference.\n * @param {String} targetId The id of the entity which is being referenced.\n * @param {String[]} targetPropertyNames The names of the property on the target entity which we will use.\n *\n * @example\n * var collection = new Cesium.EntityCollection();\n *\n * //Create a new entity and assign a billboard scale.\n * var object1 = new Cesium.Entity({id:'object1'});\n * object1.billboard = new Cesium.BillboardGraphics();\n * object1.billboard.scale = new Cesium.ConstantProperty(2.0);\n * collection.add(object1);\n *\n * //Create a second entity and reference the scale from the first one.\n * var object2 = new Cesium.Entity({id:'object2'});\n * object2.model = new Cesium.ModelGraphics();\n * object2.model.scale = new Cesium.ReferenceProperty(collection, 'object1', ['billboard', 'scale']);\n * collection.add(object2);\n *\n * //Create a third object, but use the fromString helper function.\n * var object3 = new Cesium.Entity({id:'object3'});\n * object3.billboard = new Cesium.BillboardGraphics();\n * object3.billboard.scale = Cesium.ReferenceProperty.fromString(collection, 'object1#billboard.scale');\n * collection.add(object3);\n *\n * //You can refer to an entity with a # or . in id and property names by escaping them.\n * var object4 = new Cesium.Entity({id:'#object.4'});\n * object4.billboard = new Cesium.BillboardGraphics();\n * object4.billboard.scale = new Cesium.ConstantProperty(2.0);\n * collection.add(object4);\n *\n * var object5 = new Cesium.Entity({id:'object5'});\n * object5.billboard = new Cesium.BillboardGraphics();\n * object5.billboard.scale = Cesium.ReferenceProperty.fromString(collection, '\\\\#object\\\\.4#billboard.scale');\n * collection.add(object5);\n */\nfunction ReferenceProperty(targetCollection, targetId, targetPropertyNames) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(targetCollection)) {\n throw new DeveloperError(\"targetCollection is required.\");\n }\n if (!defined(targetId) || targetId === \"\") {\n throw new DeveloperError(\"targetId is required.\");\n }\n if (!defined(targetPropertyNames) || targetPropertyNames.length === 0) {\n throw new DeveloperError(\"targetPropertyNames is required.\");\n }\n for (var i = 0; i < targetPropertyNames.length; i++) {\n var item = targetPropertyNames[i];\n if (!defined(item) || item === \"\") {\n throw new DeveloperError(\"reference contains invalid properties.\");\n }\n }\n //>>includeEnd('debug');\n\n this._targetCollection = targetCollection;\n this._targetId = targetId;\n this._targetPropertyNames = targetPropertyNames;\n this._targetProperty = undefined;\n this._targetEntity = undefined;\n this._definitionChanged = new Event();\n\n targetCollection.collectionChanged.addEventListener(\n ReferenceProperty.prototype._onCollectionChanged,\n this\n );\n}\n\nObject.defineProperties(ReferenceProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * @memberof ReferenceProperty.prototype\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return Property.isConstant(resolve(this));\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever the referenced property's definition is changed.\n * @memberof ReferenceProperty.prototype\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the reference frame that the position is defined in.\n * This property is only valid if the referenced property is a {@link PositionProperty}.\n * @memberof ReferenceProperty.prototype\n * @type {ReferenceFrame}\n * @readonly\n */\n referenceFrame: {\n get: function () {\n var target = resolve(this);\n return defined(target) ? target.referenceFrame : undefined;\n },\n },\n /**\n * Gets the id of the entity being referenced.\n * @memberof ReferenceProperty.prototype\n * @type {String}\n * @readonly\n */\n targetId: {\n get: function () {\n return this._targetId;\n },\n },\n /**\n * Gets the collection containing the entity being referenced.\n * @memberof ReferenceProperty.prototype\n * @type {EntityCollection}\n * @readonly\n */\n targetCollection: {\n get: function () {\n return this._targetCollection;\n },\n },\n /**\n * Gets the array of property names used to retrieve the referenced property.\n * @memberof ReferenceProperty.prototype\n * @type {String[]}\n * @readonly\n */\n targetPropertyNames: {\n get: function () {\n return this._targetPropertyNames;\n },\n },\n /**\n * Gets the resolved instance of the underlying referenced property.\n * @memberof ReferenceProperty.prototype\n * @type {Property|undefined}\n * @readonly\n */\n resolvedProperty: {\n get: function () {\n return resolve(this);\n },\n },\n});\n\n/**\n * Creates a new instance given the entity collection that will\n * be used to resolve it and a string indicating the target entity id and property.\n * The format of the string is \"objectId#foo.bar\", where # separates the id from\n * property path and . separates sub-properties. If the reference identifier or\n * or any sub-properties contains a # . or \\ they must be escaped.\n *\n * @param {EntityCollection} targetCollection\n * @param {String} referenceString\n * @returns {ReferenceProperty} A new instance of ReferenceProperty.\n *\n * @exception {DeveloperError} invalid referenceString.\n */\nReferenceProperty.fromString = function (targetCollection, referenceString) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(targetCollection)) {\n throw new DeveloperError(\"targetCollection is required.\");\n }\n if (!defined(referenceString)) {\n throw new DeveloperError(\"referenceString is required.\");\n }\n //>>includeEnd('debug');\n\n var identifier;\n var values = [];\n\n var inIdentifier = true;\n var isEscaped = false;\n var token = \"\";\n for (var i = 0; i < referenceString.length; ++i) {\n var c = referenceString.charAt(i);\n\n if (isEscaped) {\n token += c;\n isEscaped = false;\n } else if (c === \"\\\\\") {\n isEscaped = true;\n } else if (inIdentifier && c === \"#\") {\n identifier = token;\n inIdentifier = false;\n token = \"\";\n } else if (!inIdentifier && c === \".\") {\n values.push(token);\n token = \"\";\n } else {\n token += c;\n }\n }\n values.push(token);\n\n return new ReferenceProperty(targetCollection, identifier, values);\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nReferenceProperty.prototype.getValue = function (time, result) {\n var target = resolve(this);\n return defined(target) ? target.getValue(time, result) : undefined;\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n * This method is only valid if the property being referenced is a {@link PositionProperty}.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nReferenceProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n var target = resolve(this);\n return defined(target)\n ? target.getValueInReferenceFrame(time, referenceFrame, result)\n : undefined;\n};\n\n/**\n * Gets the {@link Material} type at the provided time.\n * This method is only valid if the property being referenced is a {@link MaterialProperty}.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nReferenceProperty.prototype.getType = function (time) {\n var target = resolve(this);\n return defined(target) ? target.getType(time) : undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nReferenceProperty.prototype.equals = function (other) {\n if (this === other) {\n return true;\n }\n\n var names = this._targetPropertyNames;\n var otherNames = other._targetPropertyNames;\n\n if (\n this._targetCollection !== other._targetCollection || //\n this._targetId !== other._targetId || //\n names.length !== otherNames.length\n ) {\n return false;\n }\n\n var length = this._targetPropertyNames.length;\n for (var i = 0; i < length; i++) {\n if (names[i] !== otherNames[i]) {\n return false;\n }\n }\n\n return true;\n};\n\nReferenceProperty.prototype._onTargetEntityDefinitionChanged = function (\n targetEntity,\n name,\n value,\n oldValue\n) {\n if (defined(this._targetProperty) && this._targetPropertyNames[0] === name) {\n this._targetProperty = undefined;\n this._definitionChanged.raiseEvent(this);\n }\n};\n\nReferenceProperty.prototype._onCollectionChanged = function (\n collection,\n added,\n removed\n) {\n var targetEntity = this._targetEntity;\n if (defined(targetEntity) && removed.indexOf(targetEntity) !== -1) {\n targetEntity.definitionChanged.removeEventListener(\n ReferenceProperty.prototype._onTargetEntityDefinitionChanged,\n this\n );\n this._targetEntity = this._targetProperty = undefined;\n } else if (!defined(targetEntity)) {\n targetEntity = resolve(this);\n if (defined(targetEntity)) {\n this._definitionChanged.raiseEvent(this);\n }\n }\n};\nexport default ReferenceProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * Represents a {@link Packable} number that always interpolates values\n * towards the shortest angle of rotation. This object is never used directly\n * but is instead passed to the constructor of {@link SampledProperty}\n * in order to represent a two-dimensional angle of rotation.\n *\n * @interface Rotation\n *\n *\n * @example\n * var time1 = Cesium.JulianDate.fromIso8601('2010-05-07T00:00:00');\n * var time2 = Cesium.JulianDate.fromIso8601('2010-05-07T00:01:00');\n * var time3 = Cesium.JulianDate.fromIso8601('2010-05-07T00:02:00');\n *\n * var property = new Cesium.SampledProperty(Cesium.Rotation);\n * property.addSample(time1, 0);\n * property.addSample(time3, Cesium.Math.toRadians(350));\n *\n * //Getting the value at time2 will equal 355 degrees instead\n * //of 175 degrees (which is what you get if you construct\n * //a SampledProperty(Number) instead. Note, the actual\n * //return value is in radians, not degrees.\n * property.getValue(time2);\n *\n * @see PackableForInterpolation\n */\nvar Rotation = {\n /**\n * The number of elements used to pack the object into an array.\n * @type {Number}\n */\n packedLength: 1,\n\n /**\n * Stores the provided instance into the provided array.\n *\n * @param {Rotation} value The value to pack.\n * @param {Number[]} array The array to pack into.\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {Number[]} The array that was packed into\n */\n pack: function (value, array, startingIndex) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required\");\n }\n\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n array[startingIndex] = value;\n\n return array;\n },\n\n /**\n * Retrieves an instance from a packed array.\n *\n * @param {Number[]} array The packed array.\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Rotation} [result] The object into which to store the result.\n * @returns {Rotation} The modified result parameter or a new Rotation instance if one was not provided.\n */\n unpack: function (array, startingIndex, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n //>>includeEnd('debug');\n\n startingIndex = defaultValue(startingIndex, 0);\n return array[startingIndex];\n },\n\n /**\n * Converts a packed array into a form suitable for interpolation.\n *\n * @param {Number[]} packedArray The packed array.\n * @param {Number} [startingIndex=0] The index of the first element to be converted.\n * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted.\n * @param {Number[]} [result] The object into which to store the result.\n */\n convertPackedArrayForInterpolation: function (\n packedArray,\n startingIndex,\n lastIndex,\n result\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(packedArray)) {\n throw new DeveloperError(\"packedArray is required\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = [];\n }\n\n startingIndex = defaultValue(startingIndex, 0);\n lastIndex = defaultValue(lastIndex, packedArray.length);\n\n var previousValue;\n for (var i = 0, len = lastIndex - startingIndex + 1; i < len; i++) {\n var value = packedArray[startingIndex + i];\n if (i === 0 || Math.abs(previousValue - value) < Math.PI) {\n result[i] = value;\n } else {\n result[i] = value - CesiumMath.TWO_PI;\n }\n previousValue = value;\n }\n },\n\n /**\n * Retrieves an instance from a packed array converted with {@link Rotation.convertPackedArrayForInterpolation}.\n *\n * @param {Number[]} array The array previously packed for interpolation.\n * @param {Number[]} sourceArray The original packed array.\n * @param {Number} [firstIndex=0] The firstIndex used to convert the array.\n * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n * @param {Rotation} [result] The object into which to store the result.\n * @returns {Rotation} The modified result parameter or a new Rotation instance if one was not provided.\n */\n unpackInterpolationResult: function (\n array,\n sourceArray,\n firstIndex,\n lastIndex,\n result\n ) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(array)) {\n throw new DeveloperError(\"array is required\");\n }\n if (!defined(sourceArray)) {\n throw new DeveloperError(\"sourceArray is required\");\n }\n //>>includeEnd('debug');\n\n result = array[0];\n if (result < 0) {\n return result + CesiumMath.TWO_PI;\n }\n return result;\n },\n};\nexport default Rotation;\n","import binarySearch from \"../Core/binarySearch.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ExtrapolationType from \"../Core/ExtrapolationType.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport LinearApproximation from \"../Core/LinearApproximation.js\";\n\nvar PackableNumber = {\n packedLength: 1,\n pack: function (value, array, startingIndex) {\n startingIndex = defaultValue(startingIndex, 0);\n array[startingIndex] = value;\n },\n unpack: function (array, startingIndex, result) {\n startingIndex = defaultValue(startingIndex, 0);\n return array[startingIndex];\n },\n};\n\n//We can't use splice for inserting new elements because function apply can't handle\n//a huge number of arguments. See https://code.google.com/p/chromium/issues/detail?id=56588\nfunction arrayInsert(array, startIndex, items) {\n var i;\n var arrayLength = array.length;\n var itemsLength = items.length;\n var newLength = arrayLength + itemsLength;\n\n array.length = newLength;\n if (arrayLength !== startIndex) {\n var q = arrayLength - 1;\n for (i = newLength - 1; i >= startIndex; i--) {\n array[i] = array[q--];\n }\n }\n\n for (i = 0; i < itemsLength; i++) {\n array[startIndex++] = items[i];\n }\n}\n\nfunction convertDate(date, epoch) {\n if (date instanceof JulianDate) {\n return date;\n }\n if (typeof date === \"string\") {\n return JulianDate.fromIso8601(date);\n }\n return JulianDate.addSeconds(epoch, date, new JulianDate());\n}\n\nvar timesSpliceArgs = [];\nvar valuesSpliceArgs = [];\n\nfunction mergeNewSamples(epoch, times, values, newData, packedLength) {\n var newDataIndex = 0;\n var i;\n var prevItem;\n var timesInsertionPoint;\n var valuesInsertionPoint;\n var currentTime;\n var nextTime;\n\n while (newDataIndex < newData.length) {\n currentTime = convertDate(newData[newDataIndex], epoch);\n timesInsertionPoint = binarySearch(times, currentTime, JulianDate.compare);\n var timesSpliceArgsCount = 0;\n var valuesSpliceArgsCount = 0;\n\n if (timesInsertionPoint < 0) {\n //Doesn't exist, insert as many additional values as we can.\n timesInsertionPoint = ~timesInsertionPoint;\n\n valuesInsertionPoint = timesInsertionPoint * packedLength;\n prevItem = undefined;\n nextTime = times[timesInsertionPoint];\n while (newDataIndex < newData.length) {\n currentTime = convertDate(newData[newDataIndex], epoch);\n if (\n (defined(prevItem) &&\n JulianDate.compare(prevItem, currentTime) >= 0) ||\n (defined(nextTime) && JulianDate.compare(currentTime, nextTime) >= 0)\n ) {\n break;\n }\n timesSpliceArgs[timesSpliceArgsCount++] = currentTime;\n newDataIndex = newDataIndex + 1;\n for (i = 0; i < packedLength; i++) {\n valuesSpliceArgs[valuesSpliceArgsCount++] = newData[newDataIndex];\n newDataIndex = newDataIndex + 1;\n }\n prevItem = currentTime;\n }\n\n if (timesSpliceArgsCount > 0) {\n valuesSpliceArgs.length = valuesSpliceArgsCount;\n arrayInsert(values, valuesInsertionPoint, valuesSpliceArgs);\n\n timesSpliceArgs.length = timesSpliceArgsCount;\n arrayInsert(times, timesInsertionPoint, timesSpliceArgs);\n }\n } else {\n //Found an exact match\n for (i = 0; i < packedLength; i++) {\n newDataIndex++;\n values[timesInsertionPoint * packedLength + i] = newData[newDataIndex];\n }\n newDataIndex++;\n }\n }\n}\n\n/**\n * A {@link Property} whose value is interpolated for a given time from the\n * provided set of samples and specified interpolation algorithm and degree.\n * @alias SampledProperty\n * @constructor\n *\n * @param {Number|Packable} type The type of property.\n * @param {Packable[]} [derivativeTypes] When supplied, indicates that samples will contain derivative information of the specified types.\n *\n *\n * @example\n * //Create a linearly interpolated Cartesian2\n * var property = new Cesium.SampledProperty(Cesium.Cartesian2);\n *\n * //Populate it with data\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), new Cesium.Cartesian2(0, 0));\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-02T00:00:00.00Z'), new Cesium.Cartesian2(4, 7));\n *\n * //Retrieve an interpolated value\n * var result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T12:00:00.00Z'));\n *\n * @example\n * //Create a simple numeric SampledProperty that uses third degree Hermite Polynomial Approximation\n * var property = new Cesium.SampledProperty(Number);\n * property.setInterpolationOptions({\n * interpolationDegree : 3,\n * interpolationAlgorithm : Cesium.HermitePolynomialApproximation\n * });\n *\n * //Populate it with data\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), 1.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:01:00.00Z'), 6.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:00.00Z'), 12.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:03:30.00Z'), 5.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:06:30.00Z'), 2.0);\n *\n * //Samples can be added in any order.\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:30.00Z'), 6.2);\n *\n * //Retrieve an interpolated value\n * var result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:34.00Z'));\n *\n * @see SampledPositionProperty\n */\nfunction SampledProperty(type, derivativeTypes) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"type\", type);\n //>>includeEnd('debug');\n\n var innerType = type;\n if (innerType === Number) {\n innerType = PackableNumber;\n }\n var packedLength = innerType.packedLength;\n var packedInterpolationLength = defaultValue(\n innerType.packedInterpolationLength,\n packedLength\n );\n\n var inputOrder = 0;\n var innerDerivativeTypes;\n if (defined(derivativeTypes)) {\n var length = derivativeTypes.length;\n innerDerivativeTypes = new Array(length);\n for (var i = 0; i < length; i++) {\n var derivativeType = derivativeTypes[i];\n if (derivativeType === Number) {\n derivativeType = PackableNumber;\n }\n var derivativePackedLength = derivativeType.packedLength;\n packedLength += derivativePackedLength;\n packedInterpolationLength += defaultValue(\n derivativeType.packedInterpolationLength,\n derivativePackedLength\n );\n innerDerivativeTypes[i] = derivativeType;\n }\n inputOrder = length;\n }\n\n this._type = type;\n this._innerType = innerType;\n this._interpolationDegree = 1;\n this._interpolationAlgorithm = LinearApproximation;\n this._numberOfPoints = 0;\n this._times = [];\n this._values = [];\n this._xTable = [];\n this._yTable = [];\n this._packedLength = packedLength;\n this._packedInterpolationLength = packedInterpolationLength;\n this._updateTableLength = true;\n this._interpolationResult = new Array(packedInterpolationLength);\n this._definitionChanged = new Event();\n this._derivativeTypes = derivativeTypes;\n this._innerDerivativeTypes = innerDerivativeTypes;\n this._inputOrder = inputOrder;\n this._forwardExtrapolationType = ExtrapolationType.NONE;\n this._forwardExtrapolationDuration = 0;\n this._backwardExtrapolationType = ExtrapolationType.NONE;\n this._backwardExtrapolationDuration = 0;\n}\n\nObject.defineProperties(SampledProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof SampledProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._values.length === 0;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof SampledProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the type of property.\n * @memberof SampledProperty.prototype\n * @type {*}\n */\n type: {\n get: function () {\n return this._type;\n },\n },\n /**\n * Gets the derivative types used by this property.\n * @memberof SampledProperty.prototype\n * @type {Packable[]}\n */\n derivativeTypes: {\n get: function () {\n return this._derivativeTypes;\n },\n },\n /**\n * Gets the degree of interpolation to perform when retrieving a value.\n * @memberof SampledProperty.prototype\n * @type {Number}\n * @default 1\n */\n interpolationDegree: {\n get: function () {\n return this._interpolationDegree;\n },\n },\n /**\n * Gets the interpolation algorithm to use when retrieving a value.\n * @memberof SampledProperty.prototype\n * @type {InterpolationAlgorithm}\n * @default LinearApproximation\n */\n interpolationAlgorithm: {\n get: function () {\n return this._interpolationAlgorithm;\n },\n },\n /**\n * Gets or sets the type of extrapolation to perform when a value\n * is requested at a time after any available samples.\n * @memberof SampledProperty.prototype\n * @type {ExtrapolationType}\n * @default ExtrapolationType.NONE\n */\n forwardExtrapolationType: {\n get: function () {\n return this._forwardExtrapolationType;\n },\n set: function (value) {\n if (this._forwardExtrapolationType !== value) {\n this._forwardExtrapolationType = value;\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n /**\n * Gets or sets the amount of time to extrapolate forward before\n * the property becomes undefined. A value of 0 will extrapolate forever.\n * @memberof SampledProperty.prototype\n * @type {Number}\n * @default 0\n */\n forwardExtrapolationDuration: {\n get: function () {\n return this._forwardExtrapolationDuration;\n },\n set: function (value) {\n if (this._forwardExtrapolationDuration !== value) {\n this._forwardExtrapolationDuration = value;\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n /**\n * Gets or sets the type of extrapolation to perform when a value\n * is requested at a time before any available samples.\n * @memberof SampledProperty.prototype\n * @type {ExtrapolationType}\n * @default ExtrapolationType.NONE\n */\n backwardExtrapolationType: {\n get: function () {\n return this._backwardExtrapolationType;\n },\n set: function (value) {\n if (this._backwardExtrapolationType !== value) {\n this._backwardExtrapolationType = value;\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n /**\n * Gets or sets the amount of time to extrapolate backward\n * before the property becomes undefined. A value of 0 will extrapolate forever.\n * @memberof SampledProperty.prototype\n * @type {Number}\n * @default 0\n */\n backwardExtrapolationDuration: {\n get: function () {\n return this._backwardExtrapolationDuration;\n },\n set: function (value) {\n if (this._backwardExtrapolationDuration !== value) {\n this._backwardExtrapolationDuration = value;\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledProperty.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var times = this._times;\n var timesLength = times.length;\n if (timesLength === 0) {\n return undefined;\n }\n\n var timeout;\n var innerType = this._innerType;\n var values = this._values;\n var index = binarySearch(times, time, JulianDate.compare);\n\n if (index < 0) {\n index = ~index;\n\n if (index === 0) {\n var startTime = times[index];\n timeout = this._backwardExtrapolationDuration;\n if (\n this._backwardExtrapolationType === ExtrapolationType.NONE ||\n (timeout !== 0 &&\n JulianDate.secondsDifference(startTime, time) > timeout)\n ) {\n return undefined;\n }\n if (this._backwardExtrapolationType === ExtrapolationType.HOLD) {\n return innerType.unpack(values, 0, result);\n }\n }\n\n if (index >= timesLength) {\n index = timesLength - 1;\n var endTime = times[index];\n timeout = this._forwardExtrapolationDuration;\n if (\n this._forwardExtrapolationType === ExtrapolationType.NONE ||\n (timeout !== 0 && JulianDate.secondsDifference(time, endTime) > timeout)\n ) {\n return undefined;\n }\n if (this._forwardExtrapolationType === ExtrapolationType.HOLD) {\n index = timesLength - 1;\n return innerType.unpack(values, index * innerType.packedLength, result);\n }\n }\n\n var xTable = this._xTable;\n var yTable = this._yTable;\n var interpolationAlgorithm = this._interpolationAlgorithm;\n var packedInterpolationLength = this._packedInterpolationLength;\n var inputOrder = this._inputOrder;\n\n if (this._updateTableLength) {\n this._updateTableLength = false;\n var numberOfPoints = Math.min(\n interpolationAlgorithm.getRequiredDataPoints(\n this._interpolationDegree,\n inputOrder\n ),\n timesLength\n );\n if (numberOfPoints !== this._numberOfPoints) {\n this._numberOfPoints = numberOfPoints;\n xTable.length = numberOfPoints;\n yTable.length = numberOfPoints * packedInterpolationLength;\n }\n }\n\n var degree = this._numberOfPoints - 1;\n if (degree < 1) {\n return undefined;\n }\n\n var firstIndex = 0;\n var lastIndex = timesLength - 1;\n var pointsInCollection = lastIndex - firstIndex + 1;\n\n if (pointsInCollection >= degree + 1) {\n var computedFirstIndex = index - ((degree / 2) | 0) - 1;\n if (computedFirstIndex < firstIndex) {\n computedFirstIndex = firstIndex;\n }\n var computedLastIndex = computedFirstIndex + degree;\n if (computedLastIndex > lastIndex) {\n computedLastIndex = lastIndex;\n computedFirstIndex = computedLastIndex - degree;\n if (computedFirstIndex < firstIndex) {\n computedFirstIndex = firstIndex;\n }\n }\n\n firstIndex = computedFirstIndex;\n lastIndex = computedLastIndex;\n }\n var length = lastIndex - firstIndex + 1;\n\n // Build the tables\n for (var i = 0; i < length; ++i) {\n xTable[i] = JulianDate.secondsDifference(\n times[firstIndex + i],\n times[lastIndex]\n );\n }\n\n if (!defined(innerType.convertPackedArrayForInterpolation)) {\n var destinationIndex = 0;\n var packedLength = this._packedLength;\n var sourceIndex = firstIndex * packedLength;\n var stop = (lastIndex + 1) * packedLength;\n\n while (sourceIndex < stop) {\n yTable[destinationIndex] = values[sourceIndex];\n sourceIndex++;\n destinationIndex++;\n }\n } else {\n innerType.convertPackedArrayForInterpolation(\n values,\n firstIndex,\n lastIndex,\n yTable\n );\n }\n\n // Interpolate!\n var x = JulianDate.secondsDifference(time, times[lastIndex]);\n var interpolationResult;\n if (inputOrder === 0 || !defined(interpolationAlgorithm.interpolate)) {\n interpolationResult = interpolationAlgorithm.interpolateOrderZero(\n x,\n xTable,\n yTable,\n packedInterpolationLength,\n this._interpolationResult\n );\n } else {\n var yStride = Math.floor(packedInterpolationLength / (inputOrder + 1));\n interpolationResult = interpolationAlgorithm.interpolate(\n x,\n xTable,\n yTable,\n yStride,\n inputOrder,\n inputOrder,\n this._interpolationResult\n );\n }\n\n if (!defined(innerType.unpackInterpolationResult)) {\n return innerType.unpack(interpolationResult, 0, result);\n }\n return innerType.unpackInterpolationResult(\n interpolationResult,\n values,\n firstIndex,\n lastIndex,\n result\n );\n }\n return innerType.unpack(values, index * this._packedLength, result);\n};\n\n/**\n * Sets the algorithm and degree to use when interpolating a value.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {InterpolationAlgorithm} [options.interpolationAlgorithm] The new interpolation algorithm. If undefined, the existing property will be unchanged.\n * @param {Number} [options.interpolationDegree] The new interpolation degree. If undefined, the existing property will be unchanged.\n */\nSampledProperty.prototype.setInterpolationOptions = function (options) {\n if (!defined(options)) {\n return;\n }\n\n var valuesChanged = false;\n\n var interpolationAlgorithm = options.interpolationAlgorithm;\n var interpolationDegree = options.interpolationDegree;\n\n if (\n defined(interpolationAlgorithm) &&\n this._interpolationAlgorithm !== interpolationAlgorithm\n ) {\n this._interpolationAlgorithm = interpolationAlgorithm;\n valuesChanged = true;\n }\n\n if (\n defined(interpolationDegree) &&\n this._interpolationDegree !== interpolationDegree\n ) {\n this._interpolationDegree = interpolationDegree;\n valuesChanged = true;\n }\n\n if (valuesChanged) {\n this._updateTableLength = true;\n this._definitionChanged.raiseEvent(this);\n }\n};\n\n/**\n * Adds a new sample.\n *\n * @param {JulianDate} time The sample time.\n * @param {Packable} value The value at the provided time.\n * @param {Packable[]} [derivatives] The array of derivatives at the provided time.\n */\nSampledProperty.prototype.addSample = function (time, value, derivatives) {\n var innerDerivativeTypes = this._innerDerivativeTypes;\n var hasDerivatives = defined(innerDerivativeTypes);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n Check.defined(\"value\", value);\n if (hasDerivatives) {\n Check.defined(\"derivatives\", derivatives);\n }\n //>>includeEnd('debug');\n\n var innerType = this._innerType;\n var data = [];\n data.push(time);\n innerType.pack(value, data, data.length);\n\n if (hasDerivatives) {\n var derivativesLength = innerDerivativeTypes.length;\n for (var x = 0; x < derivativesLength; x++) {\n innerDerivativeTypes[x].pack(derivatives[x], data, data.length);\n }\n }\n mergeNewSamples(\n undefined,\n this._times,\n this._values,\n data,\n this._packedLength\n );\n this._updateTableLength = true;\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Adds an array of samples.\n *\n * @param {JulianDate[]} times An array of JulianDate instances where each index is a sample time.\n * @param {Packable[]} values The array of values, where each value corresponds to the provided times index.\n * @param {Array[]} [derivativeValues] An array where each item is the array of derivatives at the equivalent time index.\n *\n * @exception {DeveloperError} times and values must be the same length.\n * @exception {DeveloperError} times and derivativeValues must be the same length.\n */\nSampledProperty.prototype.addSamples = function (\n times,\n values,\n derivativeValues\n) {\n var innerDerivativeTypes = this._innerDerivativeTypes;\n var hasDerivatives = defined(innerDerivativeTypes);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"times\", times);\n Check.defined(\"values\", values);\n if (times.length !== values.length) {\n throw new DeveloperError(\"times and values must be the same length.\");\n }\n if (\n hasDerivatives &&\n (!defined(derivativeValues) || derivativeValues.length !== times.length)\n ) {\n throw new DeveloperError(\n \"times and derivativeValues must be the same length.\"\n );\n }\n //>>includeEnd('debug');\n\n var innerType = this._innerType;\n var length = times.length;\n var data = [];\n for (var i = 0; i < length; i++) {\n data.push(times[i]);\n innerType.pack(values[i], data, data.length);\n\n if (hasDerivatives) {\n var derivatives = derivativeValues[i];\n var derivativesLength = innerDerivativeTypes.length;\n for (var x = 0; x < derivativesLength; x++) {\n innerDerivativeTypes[x].pack(derivatives[x], data, data.length);\n }\n }\n }\n mergeNewSamples(\n undefined,\n this._times,\n this._values,\n data,\n this._packedLength\n );\n this._updateTableLength = true;\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Adds samples as a single packed array where each new sample is represented as a date,\n * followed by the packed representation of the corresponding value and derivatives.\n *\n * @param {Number[]} packedSamples The array of packed samples.\n * @param {JulianDate} [epoch] If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds.\n */\nSampledProperty.prototype.addSamplesPackedArray = function (\n packedSamples,\n epoch\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"packedSamples\", packedSamples);\n //>>includeEnd('debug');\n\n mergeNewSamples(\n epoch,\n this._times,\n this._values,\n packedSamples,\n this._packedLength\n );\n this._updateTableLength = true;\n this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Removes a sample at the given time, if present.\n *\n * @param {JulianDate} time The sample time.\n * @returns {Boolean} <code>true</code> if a sample at time was removed, <code>false</code> otherwise.\n */\nSampledProperty.prototype.removeSample = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var index = binarySearch(this._times, time, JulianDate.compare);\n if (index < 0) {\n return false;\n }\n removeSamples(this, index, 1);\n return true;\n};\n\nfunction removeSamples(property, startIndex, numberToRemove) {\n var packedLength = property._packedLength;\n property._times.splice(startIndex, numberToRemove);\n property._values.splice(\n startIndex * packedLength,\n numberToRemove * packedLength\n );\n property._updateTableLength = true;\n property._definitionChanged.raiseEvent(property);\n}\n\n/**\n * Removes all samples for the given time interval.\n *\n * @param {TimeInterval} time The time interval for which to remove all samples.\n */\nSampledProperty.prototype.removeSamples = function (timeInterval) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"timeInterval\", timeInterval);\n //>>includeEnd('debug');\n\n var times = this._times;\n var startIndex = binarySearch(times, timeInterval.start, JulianDate.compare);\n if (startIndex < 0) {\n startIndex = ~startIndex;\n } else if (!timeInterval.isStartIncluded) {\n ++startIndex;\n }\n var stopIndex = binarySearch(times, timeInterval.stop, JulianDate.compare);\n if (stopIndex < 0) {\n stopIndex = ~stopIndex;\n } else if (timeInterval.isStopIncluded) {\n ++stopIndex;\n }\n\n removeSamples(this, startIndex, stopIndex - startIndex);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nSampledProperty.prototype.equals = function (other) {\n if (this === other) {\n return true;\n }\n if (!defined(other)) {\n return false;\n }\n\n if (\n this._type !== other._type || //\n this._interpolationDegree !== other._interpolationDegree || //\n this._interpolationAlgorithm !== other._interpolationAlgorithm\n ) {\n return false;\n }\n\n var derivativeTypes = this._derivativeTypes;\n var hasDerivatives = defined(derivativeTypes);\n var otherDerivativeTypes = other._derivativeTypes;\n var otherHasDerivatives = defined(otherDerivativeTypes);\n if (hasDerivatives !== otherHasDerivatives) {\n return false;\n }\n\n var i;\n var length;\n if (hasDerivatives) {\n length = derivativeTypes.length;\n if (length !== otherDerivativeTypes.length) {\n return false;\n }\n\n for (i = 0; i < length; i++) {\n if (derivativeTypes[i] !== otherDerivativeTypes[i]) {\n return false;\n }\n }\n }\n\n var times = this._times;\n var otherTimes = other._times;\n length = times.length;\n\n if (length !== otherTimes.length) {\n return false;\n }\n\n for (i = 0; i < length; i++) {\n if (!JulianDate.equals(times[i], otherTimes[i])) {\n return false;\n }\n }\n\n var values = this._values;\n var otherValues = other._values;\n length = values.length;\n\n //Since time lengths are equal, values length and other length are guaranteed to be equal.\n for (i = 0; i < length; i++) {\n if (values[i] !== otherValues[i]) {\n return false;\n }\n }\n\n return true;\n};\n\n//Exposed for testing.\nSampledProperty._mergeNewSamples = mergeNewSamples;\nexport default SampledProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport PositionProperty from \"./PositionProperty.js\";\nimport Property from \"./Property.js\";\nimport SampledProperty from \"./SampledProperty.js\";\n\n/**\n * A {@link SampledProperty} which is also a {@link PositionProperty}.\n *\n * @alias SampledPositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n * @param {Number} [numberOfDerivatives=0] The number of derivatives that accompany each position; i.e. velocity, acceleration, etc...\n */\nfunction SampledPositionProperty(referenceFrame, numberOfDerivatives) {\n numberOfDerivatives = defaultValue(numberOfDerivatives, 0);\n\n var derivativeTypes;\n if (numberOfDerivatives > 0) {\n derivativeTypes = new Array(numberOfDerivatives);\n for (var i = 0; i < numberOfDerivatives; i++) {\n derivativeTypes[i] = Cartesian3;\n }\n }\n\n this._numberOfDerivatives = numberOfDerivatives;\n this._property = new SampledProperty(Cartesian3, derivativeTypes);\n this._definitionChanged = new Event();\n this._referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n\n this._property._definitionChanged.addEventListener(function () {\n this._definitionChanged.raiseEvent(this);\n }, this);\n}\n\nObject.defineProperties(SampledPositionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof SampledPositionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._property.isConstant;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof SampledPositionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the reference frame in which the position is defined.\n * @memberof SampledPositionProperty.prototype\n * @type {ReferenceFrame}\n * @default ReferenceFrame.FIXED;\n */\n referenceFrame: {\n get: function () {\n return this._referenceFrame;\n },\n },\n /**\n * Gets the degree of interpolation to perform when retrieving a value. Call <code>setInterpolationOptions</code> to set this.\n * @memberof SampledPositionProperty.prototype\n *\n * @type {Number}\n * @default 1\n * @readonly\n */\n interpolationDegree: {\n get: function () {\n return this._property.interpolationDegree;\n },\n },\n /**\n * Gets the interpolation algorithm to use when retrieving a value. Call <code>setInterpolationOptions</code> to set this.\n * @memberof SampledPositionProperty.prototype\n *\n * @type {InterpolationAlgorithm}\n * @default LinearApproximation\n * @readonly\n */\n interpolationAlgorithm: {\n get: function () {\n return this._property.interpolationAlgorithm;\n },\n },\n /**\n * The number of derivatives contained by this property; i.e. 0 for just position, 1 for velocity, etc.\n * @memberof SampledPositionProperty.prototype\n *\n * @type {Number}\n * @default 0\n */\n numberOfDerivatives: {\n get: function () {\n return this._numberOfDerivatives;\n },\n },\n /**\n * Gets or sets the type of extrapolation to perform when a value\n * is requested at a time after any available samples.\n * @memberof SampledPositionProperty.prototype\n * @type {ExtrapolationType}\n * @default ExtrapolationType.NONE\n */\n forwardExtrapolationType: {\n get: function () {\n return this._property.forwardExtrapolationType;\n },\n set: function (value) {\n this._property.forwardExtrapolationType = value;\n },\n },\n /**\n * Gets or sets the amount of time to extrapolate forward before\n * the property becomes undefined. A value of 0 will extrapolate forever.\n * @memberof SampledPositionProperty.prototype\n * @type {Number}\n * @default 0\n */\n forwardExtrapolationDuration: {\n get: function () {\n return this._property.forwardExtrapolationDuration;\n },\n set: function (value) {\n this._property.forwardExtrapolationDuration = value;\n },\n },\n /**\n * Gets or sets the type of extrapolation to perform when a value\n * is requested at a time before any available samples.\n * @memberof SampledPositionProperty.prototype\n * @type {ExtrapolationType}\n * @default ExtrapolationType.NONE\n */\n backwardExtrapolationType: {\n get: function () {\n return this._property.backwardExtrapolationType;\n },\n set: function (value) {\n this._property.backwardExtrapolationType = value;\n },\n },\n /**\n * Gets or sets the amount of time to extrapolate backward\n * before the property becomes undefined. A value of 0 will extrapolate forever.\n * @memberof SampledPositionProperty.prototype\n * @type {Number}\n * @default 0\n */\n backwardExtrapolationDuration: {\n get: function () {\n return this._property.backwardExtrapolationDuration;\n },\n set: function (value) {\n this._property.backwardExtrapolationDuration = value;\n },\n },\n});\n\n/**\n * Gets the position at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledPositionProperty.prototype.getValue = function (time, result) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the position at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledPositionProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n Check.defined(\"referenceFrame\", referenceFrame);\n //>>includeEnd('debug');\n\n result = this._property.getValue(time, result);\n if (defined(result)) {\n return PositionProperty.convertToReferenceFrame(\n time,\n result,\n this._referenceFrame,\n referenceFrame,\n result\n );\n }\n return undefined;\n};\n\n/**\n * Sets the algorithm and degree to use when interpolating a position.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {InterpolationAlgorithm} [options.interpolationAlgorithm] The new interpolation algorithm. If undefined, the existing property will be unchanged.\n * @param {Number} [options.interpolationDegree] The new interpolation degree. If undefined, the existing property will be unchanged.\n */\nSampledPositionProperty.prototype.setInterpolationOptions = function (options) {\n this._property.setInterpolationOptions(options);\n};\n\n/**\n * Adds a new sample.\n *\n * @param {JulianDate} time The sample time.\n * @param {Cartesian3} position The position at the provided time.\n * @param {Cartesian3[]} [derivatives] The array of derivative values at the provided time.\n */\nSampledPositionProperty.prototype.addSample = function (\n time,\n position,\n derivatives\n) {\n var numberOfDerivatives = this._numberOfDerivatives;\n //>>includeStart('debug', pragmas.debug);\n if (\n numberOfDerivatives > 0 &&\n (!defined(derivatives) || derivatives.length !== numberOfDerivatives)\n ) {\n throw new DeveloperError(\n \"derivatives length must be equal to the number of derivatives.\"\n );\n }\n //>>includeEnd('debug');\n this._property.addSample(time, position, derivatives);\n};\n\n/**\n * Adds multiple samples via parallel arrays.\n *\n * @param {JulianDate[]} times An array of JulianDate instances where each index is a sample time.\n * @param {Cartesian3[]} positions An array of Cartesian3 position instances, where each value corresponds to the provided time index.\n * @param {Array[]} [derivatives] An array where each value is another array containing derivatives for the corresponding time index.\n *\n * @exception {DeveloperError} All arrays must be the same length.\n */\nSampledPositionProperty.prototype.addSamples = function (\n times,\n positions,\n derivatives\n) {\n this._property.addSamples(times, positions, derivatives);\n};\n\n/**\n * Adds samples as a single packed array where each new sample is represented as a date,\n * followed by the packed representation of the corresponding value and derivatives.\n *\n * @param {Number[]} packedSamples The array of packed samples.\n * @param {JulianDate} [epoch] If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds.\n */\nSampledPositionProperty.prototype.addSamplesPackedArray = function (\n packedSamples,\n epoch\n) {\n this._property.addSamplesPackedArray(packedSamples, epoch);\n};\n\n/**\n * Removes a sample at the given time, if present.\n *\n * @param {JulianDate} time The sample time.\n * @returns {Boolean} <code>true</code> if a sample at time was removed, <code>false</code> otherwise.\n */\nSampledPositionProperty.prototype.removeSample = function (time) {\n this._property.removeSample(time);\n};\n\n/**\n * Removes all samples for the given time interval.\n *\n * @param {TimeInterval} time The time interval for which to remove all samples.\n */\nSampledPositionProperty.prototype.removeSamples = function (timeInterval) {\n this._property.removeSamples(timeInterval);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nSampledPositionProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof SampledPositionProperty &&\n Property.equals(this._property, other._property) && //\n this._referenceFrame === other._referenceFrame)\n );\n};\nexport default SampledPositionProperty;\n","/**\n * Defined the orientation of stripes in {@link StripeMaterialProperty}.\n *\n * @enum {Number}\n */\nvar StripeOrientation = {\n /**\n * Horizontal orientation.\n * @type {Number}\n */\n HORIZONTAL: 0,\n\n /**\n * Vertical orientation.\n * @type {Number}\n */\n VERTICAL: 1,\n};\nexport default Object.freeze(StripeOrientation);\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\nimport StripeOrientation from \"./StripeOrientation.js\";\n\nvar defaultOrientation = StripeOrientation.HORIZONTAL;\nvar defaultEvenColor = Color.WHITE;\nvar defaultOddColor = Color.BLACK;\nvar defaultOffset = 0;\nvar defaultRepeat = 1;\n\n/**\n * A {@link MaterialProperty} that maps to stripe {@link Material} uniforms.\n * @alias StripeMaterialProperty\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Property|StripeOrientation} [options.orientation=StripeOrientation.HORIZONTAL] A Property specifying the {@link StripeOrientation}.\n * @param {Property|Color} [options.evenColor=Color.WHITE] A Property specifying the first {@link Color}.\n * @param {Property|Color} [options.oddColor=Color.BLACK] A Property specifying the second {@link Color}.\n * @param {Property|Number} [options.offset=0] A numeric Property specifying how far into the pattern to start the material.\n * @param {Property|Number} [options.repeat=1] A numeric Property specifying how many times the stripes repeat.\n */\nfunction StripeMaterialProperty(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._definitionChanged = new Event();\n this._orientation = undefined;\n this._orientationSubscription = undefined;\n this._evenColor = undefined;\n this._evenColorSubscription = undefined;\n this._oddColor = undefined;\n this._oddColorSubscription = undefined;\n this._offset = undefined;\n this._offsetSubscription = undefined;\n this._repeat = undefined;\n this._repeatSubscription = undefined;\n\n this.orientation = options.orientation;\n this.evenColor = options.evenColor;\n this.oddColor = options.oddColor;\n this.offset = options.offset;\n this.repeat = options.repeat;\n}\n\nObject.defineProperties(StripeMaterialProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof StripeMaterialProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return (\n Property.isConstant(this._orientation) && //\n Property.isConstant(this._evenColor) && //\n Property.isConstant(this._oddColor) && //\n Property.isConstant(this._offset) && //\n Property.isConstant(this._repeat)\n );\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof StripeMaterialProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n\n /**\n * Gets or sets the Property specifying the {@link StripeOrientation}/\n * @memberof StripeMaterialProperty.prototype\n * @type {Property|undefined}\n * @default StripeOrientation.HORIZONTAL\n */\n orientation: createPropertyDescriptor(\"orientation\"),\n\n /**\n * Gets or sets the Property specifying the first {@link Color}.\n * @memberof StripeMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.WHITE\n */\n evenColor: createPropertyDescriptor(\"evenColor\"),\n\n /**\n * Gets or sets the Property specifying the second {@link Color}.\n * @memberof StripeMaterialProperty.prototype\n * @type {Property|undefined}\n * @default Color.BLACK\n */\n oddColor: createPropertyDescriptor(\"oddColor\"),\n\n /**\n * Gets or sets the numeric Property specifying the point into the pattern\n * to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning\n * of the odd color, 2.0 being the even color again, and any multiple or fractional values\n * being in between.\n * @memberof StripeMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 0.0\n */\n offset: createPropertyDescriptor(\"offset\"),\n\n /**\n * Gets or sets the numeric Property specifying how many times the stripes repeat.\n * @memberof StripeMaterialProperty.prototype\n * @type {Property|undefined}\n * @default 1.0\n */\n repeat: createPropertyDescriptor(\"repeat\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {String} The type of material.\n */\nStripeMaterialProperty.prototype.getType = function (time) {\n return \"Stripe\";\n};\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nStripeMaterialProperty.prototype.getValue = function (time, result) {\n if (!defined(result)) {\n result = {};\n }\n result.horizontal =\n Property.getValueOrDefault(this._orientation, time, defaultOrientation) ===\n StripeOrientation.HORIZONTAL;\n result.evenColor = Property.getValueOrClonedDefault(\n this._evenColor,\n time,\n defaultEvenColor,\n result.evenColor\n );\n result.oddColor = Property.getValueOrClonedDefault(\n this._oddColor,\n time,\n defaultOddColor,\n result.oddColor\n );\n result.offset = Property.getValueOrDefault(this._offset, time, defaultOffset);\n result.repeat = Property.getValueOrDefault(this._repeat, time, defaultRepeat);\n return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nStripeMaterialProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof StripeMaterialProperty && //\n Property.equals(this._orientation, other._orientation) && //\n Property.equals(this._evenColor, other._evenColor) && //\n Property.equals(this._oddColor, other._oddColor) && //\n Property.equals(this._offset, other._offset) && //\n Property.equals(this._repeat, other._repeat))\n );\n};\nexport default StripeMaterialProperty;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport PositionProperty from \"./PositionProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link TimeIntervalCollectionProperty} which is also a {@link PositionProperty}.\n *\n * @alias TimeIntervalCollectionPositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction TimeIntervalCollectionPositionProperty(referenceFrame) {\n this._definitionChanged = new Event();\n this._intervals = new TimeIntervalCollection();\n this._intervals.changedEvent.addEventListener(\n TimeIntervalCollectionPositionProperty.prototype._intervalsChanged,\n this\n );\n this._referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n}\n\nObject.defineProperties(TimeIntervalCollectionPositionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof TimeIntervalCollectionPositionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._intervals.isEmpty;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is considered to have changed if a call to getValue would return\n * a different result for the same time.\n * @memberof TimeIntervalCollectionPositionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the interval collection.\n * @memberof TimeIntervalCollectionPositionProperty.prototype\n * @type {TimeIntervalCollection}\n */\n intervals: {\n get: function () {\n return this._intervals;\n },\n },\n /**\n * Gets the reference frame in which the position is defined.\n * @memberof TimeIntervalCollectionPositionProperty.prototype\n * @type {ReferenceFrame}\n * @default ReferenceFrame.FIXED;\n */\n referenceFrame: {\n get: function () {\n return this._referenceFrame;\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionPositionProperty.prototype.getValue = function (\n time,\n result\n) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionPositionProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (!defined(referenceFrame)) {\n throw new DeveloperError(\"referenceFrame is required.\");\n }\n //>>includeEnd('debug');\n\n var position = this._intervals.findDataForIntervalContainingDate(time);\n if (defined(position)) {\n return PositionProperty.convertToReferenceFrame(\n time,\n position,\n this._referenceFrame,\n referenceFrame,\n result\n );\n }\n return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollectionPositionProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof TimeIntervalCollectionPositionProperty && //\n this._intervals.equals(other._intervals, Property.equals) && //\n this._referenceFrame === other._referenceFrame)\n );\n};\n\n/**\n * @private\n */\nTimeIntervalCollectionPositionProperty.prototype._intervalsChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default TimeIntervalCollectionPositionProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the\n * data property of each {@link TimeInterval} represents the value at time.\n *\n * @alias TimeIntervalCollectionProperty\n * @constructor\n *\n * @example\n * //Create a Cartesian2 interval property which contains data on August 1st, 2012\n * //and uses a different value every 6 hours.\n * var composite = new Cesium.TimeIntervalCollectionProperty();\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T06:00:00.00Z',\n * isStartIncluded : true,\n * isStopIncluded : false,\n * data : new Cesium.Cartesian2(2.0, 3.4)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T06:00:00.00Z/2012-08-01T12:00:00.00Z',\n * isStartIncluded : true,\n * isStopIncluded : false,\n * data : new Cesium.Cartesian2(12.0, 2.7)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T12:00:00.00Z/2012-08-01T18:00:00.00Z',\n * isStartIncluded : true,\n * isStopIncluded : false,\n * data : new Cesium.Cartesian2(5.0, 12.4)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n * iso8601 : '2012-08-01T18:00:00.00Z/2012-08-02T00:00:00.00Z',\n * isStartIncluded : true,\n * isStopIncluded : true,\n * data : new Cesium.Cartesian2(85.0, 4.1)\n * }));\n */\nfunction TimeIntervalCollectionProperty() {\n this._definitionChanged = new Event();\n this._intervals = new TimeIntervalCollection();\n this._intervals.changedEvent.addEventListener(\n TimeIntervalCollectionProperty.prototype._intervalsChanged,\n this\n );\n}\n\nObject.defineProperties(TimeIntervalCollectionProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant. A property is considered\n * constant if getValue always returns the same result for the current definition.\n * @memberof TimeIntervalCollectionProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return this._intervals.isEmpty;\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * The definition is changed whenever setValue is called with data different\n * than the current value.\n * @memberof TimeIntervalCollectionProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets the interval collection.\n * @memberof TimeIntervalCollectionProperty.prototype\n *\n * @type {TimeIntervalCollection}\n */\n intervals: {\n get: function () {\n return this._intervals;\n },\n },\n});\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {Object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionProperty.prototype.getValue = function (time, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required\");\n }\n //>>includeEnd('debug');\n\n var value = this._intervals.findDataForIntervalContainingDate(time);\n if (defined(value) && typeof value.clone === \"function\") {\n return value.clone(result);\n }\n return value;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollectionProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof TimeIntervalCollectionProperty && //\n this._intervals.equals(other._intervals, Property.equals))\n );\n};\n\n/**\n * @private\n */\nTimeIntervalCollectionProperty.prototype._intervalsChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default TimeIntervalCollectionProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} which evaluates to a {@link Cartesian3} vector\n * based on the velocity of the provided {@link PositionProperty}.\n *\n * @alias VelocityVectorProperty\n * @constructor\n *\n * @param {PositionProperty} [position] The position property used to compute the velocity.\n * @param {Boolean} [normalize=true] Whether to normalize the computed velocity vector.\n *\n * @example\n * //Create an entity with a billboard rotated to match its velocity.\n * var position = new Cesium.SampledProperty();\n * position.addSamples(...);\n * var entity = viewer.entities.add({\n * position : position,\n * billboard : {\n * image : 'image.png',\n * alignedAxis : new Cesium.VelocityVectorProperty(position, true) // alignedAxis must be a unit vector\n * }\n * }));\n */\nfunction VelocityVectorProperty(position, normalize) {\n this._position = undefined;\n this._subscription = undefined;\n this._definitionChanged = new Event();\n this._normalize = defaultValue(normalize, true);\n\n this.position = position;\n}\n\nObject.defineProperties(VelocityVectorProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * @memberof VelocityVectorProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return Property.isConstant(this._position);\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * @memberof VelocityVectorProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the position property used to compute the velocity vector.\n * @memberof VelocityVectorProperty.prototype\n *\n * @type {Property|undefined}\n */\n position: {\n get: function () {\n return this._position;\n },\n set: function (value) {\n var oldValue = this._position;\n if (oldValue !== value) {\n if (defined(oldValue)) {\n this._subscription();\n }\n\n this._position = value;\n\n if (defined(value)) {\n this._subscription = value._definitionChanged.addEventListener(\n function () {\n this._definitionChanged.raiseEvent(this);\n },\n this\n );\n }\n\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n /**\n * Gets or sets whether the vector produced by this property\n * will be normalized or not.\n * @memberof VelocityVectorProperty.prototype\n *\n * @type {Boolean}\n */\n normalize: {\n get: function () {\n return this._normalize;\n },\n set: function (value) {\n if (this._normalize === value) {\n return;\n }\n\n this._normalize = value;\n this._definitionChanged.raiseEvent(this);\n },\n },\n});\n\nvar position1Scratch = new Cartesian3();\nvar position2Scratch = new Cartesian3();\nvar timeScratch = new JulianDate();\nvar step = 1.0 / 60.0;\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time] The time for which to retrieve the value.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nVelocityVectorProperty.prototype.getValue = function (time, result) {\n return this._getValue(time, result);\n};\n\n/**\n * @private\n */\nVelocityVectorProperty.prototype._getValue = function (\n time,\n velocityResult,\n positionResult\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required\");\n }\n //>>includeEnd('debug');\n\n if (!defined(velocityResult)) {\n velocityResult = new Cartesian3();\n }\n\n var property = this._position;\n if (Property.isConstant(property)) {\n return this._normalize\n ? undefined\n : Cartesian3.clone(Cartesian3.ZERO, velocityResult);\n }\n\n var position1 = property.getValue(time, position1Scratch);\n var position2 = property.getValue(\n JulianDate.addSeconds(time, step, timeScratch),\n position2Scratch\n );\n\n //If we don't have a position for now, return undefined.\n if (!defined(position1)) {\n return undefined;\n }\n\n //If we don't have a position for now + step, see if we have a position for now - step.\n if (!defined(position2)) {\n position2 = position1;\n position1 = property.getValue(\n JulianDate.addSeconds(time, -step, timeScratch),\n position2Scratch\n );\n\n if (!defined(position1)) {\n return undefined;\n }\n }\n\n if (Cartesian3.equals(position1, position2)) {\n return this._normalize\n ? undefined\n : Cartesian3.clone(Cartesian3.ZERO, velocityResult);\n }\n\n if (defined(positionResult)) {\n position1.clone(positionResult);\n }\n\n var velocity = Cartesian3.subtract(position2, position1, velocityResult);\n if (this._normalize) {\n return Cartesian3.normalize(velocity, velocityResult);\n }\n\n return Cartesian3.divideByScalar(velocity, step, velocityResult);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nVelocityVectorProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof VelocityVectorProperty &&\n Property.equals(this._position, other._position))\n );\n};\nexport default VelocityVectorProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Property from \"./Property.js\";\nimport VelocityVectorProperty from \"./VelocityVectorProperty.js\";\n\n/**\n * A {@link Property} which evaluates to a {@link Quaternion} rotation\n * based on the velocity of the provided {@link PositionProperty}.\n *\n * @alias VelocityOrientationProperty\n * @constructor\n *\n * @param {PositionProperty} [position] The position property used to compute the orientation.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine which way is up.\n *\n * @example\n * //Create an entity with position and orientation.\n * var position = new Cesium.SampledProperty();\n * position.addSamples(...);\n * var entity = viewer.entities.add({\n * position : position,\n * orientation : new Cesium.VelocityOrientationProperty(position)\n * }));\n */\nfunction VelocityOrientationProperty(position, ellipsoid) {\n this._velocityVectorProperty = new VelocityVectorProperty(position, true);\n this._subscription = undefined;\n this._ellipsoid = undefined;\n this._definitionChanged = new Event();\n\n this.ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n var that = this;\n this._velocityVectorProperty.definitionChanged.addEventListener(function () {\n that._definitionChanged.raiseEvent(that);\n });\n}\n\nObject.defineProperties(VelocityOrientationProperty.prototype, {\n /**\n * Gets a value indicating if this property is constant.\n * @memberof VelocityOrientationProperty.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isConstant: {\n get: function () {\n return Property.isConstant(this._velocityVectorProperty);\n },\n },\n /**\n * Gets the event that is raised whenever the definition of this property changes.\n * @memberof VelocityOrientationProperty.prototype\n *\n * @type {Event}\n * @readonly\n */\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n /**\n * Gets or sets the position property used to compute orientation.\n * @memberof VelocityOrientationProperty.prototype\n *\n * @type {Property|undefined}\n */\n position: {\n get: function () {\n return this._velocityVectorProperty.position;\n },\n set: function (value) {\n this._velocityVectorProperty.position = value;\n },\n },\n /**\n * Gets or sets the ellipsoid used to determine which way is up.\n * @memberof VelocityOrientationProperty.prototype\n *\n * @type {Property|undefined}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n set: function (value) {\n var oldValue = this._ellipsoid;\n if (oldValue !== value) {\n this._ellipsoid = value;\n this._definitionChanged.raiseEvent(this);\n }\n },\n },\n});\n\nvar positionScratch = new Cartesian3();\nvar velocityScratch = new Cartesian3();\nvar rotationScratch = new Matrix3();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time] The time for which to retrieve the value.\n * @param {Quaternion} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Quaternion} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nVelocityOrientationProperty.prototype.getValue = function (time, result) {\n var velocity = this._velocityVectorProperty._getValue(\n time,\n velocityScratch,\n positionScratch\n );\n\n if (!defined(velocity)) {\n return undefined;\n }\n\n Transforms.rotationMatrixFromPositionVelocity(\n positionScratch,\n velocity,\n this._ellipsoid,\n rotationScratch\n );\n return Quaternion.fromRotationMatrix(rotationScratch, result);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nVelocityOrientationProperty.prototype.equals = function (other) {\n return (\n this === other || //\n (other instanceof VelocityOrientationProperty &&\n Property.equals(\n this._velocityVectorProperty,\n other._velocityVectorProperty\n ) &&\n (this._ellipsoid === other._ellipsoid ||\n this._ellipsoid.equals(other._ellipsoid)))\n );\n};\nexport default VelocityOrientationProperty;\n","import ArcType from \"../Core/ArcType.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport ClockRange from \"../Core/ClockRange.js\";\nimport ClockStep from \"../Core/ClockStep.js\";\nimport Color from \"../Core/Color.js\";\nimport CornerType from \"../Core/CornerType.js\";\nimport Credit from \"../Core/Credit.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport ExtrapolationType from \"../Core/ExtrapolationType.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport HermitePolynomialApproximation from \"../Core/HermitePolynomialApproximation.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport LagrangePolynomialApproximation from \"../Core/LagrangePolynomialApproximation.js\";\nimport LinearApproximation from \"../Core/LinearApproximation.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Spherical from \"../Core/Spherical.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport ColorBlendMode from \"../Scene/ColorBlendMode.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport Uri from \"../ThirdParty/Uri.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport BoxGraphics from \"./BoxGraphics.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport CheckerboardMaterialProperty from \"./CheckerboardMaterialProperty.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport CompositeMaterialProperty from \"./CompositeMaterialProperty.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport CorridorGraphics from \"./CorridorGraphics.js\";\nimport CylinderGraphics from \"./CylinderGraphics.js\";\nimport DataSource from \"./DataSource.js\";\nimport DataSourceClock from \"./DataSourceClock.js\";\nimport EllipseGraphics from \"./EllipseGraphics.js\";\nimport EllipsoidGraphics from \"./EllipsoidGraphics.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport GridMaterialProperty from \"./GridMaterialProperty.js\";\nimport ImageMaterialProperty from \"./ImageMaterialProperty.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport NodeTransformationProperty from \"./NodeTransformationProperty.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PointGraphics from \"./PointGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineArrowMaterialProperty from \"./PolylineArrowMaterialProperty.js\";\nimport PolylineDashMaterialProperty from \"./PolylineDashMaterialProperty.js\";\nimport PolylineGlowMaterialProperty from \"./PolylineGlowMaterialProperty.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PolylineOutlineMaterialProperty from \"./PolylineOutlineMaterialProperty.js\";\nimport PolylineVolumeGraphics from \"./PolylineVolumeGraphics.js\";\nimport PositionPropertyArray from \"./PositionPropertyArray.js\";\nimport Property from \"./Property.js\";\nimport PropertyArray from \"./PropertyArray.js\";\nimport PropertyBag from \"./PropertyBag.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport Rotation from \"./Rotation.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport SampledProperty from \"./SampledProperty.js\";\nimport StripeMaterialProperty from \"./StripeMaterialProperty.js\";\nimport StripeOrientation from \"./StripeOrientation.js\";\nimport TimeIntervalCollectionPositionProperty from \"./TimeIntervalCollectionPositionProperty.js\";\nimport TimeIntervalCollectionProperty from \"./TimeIntervalCollectionProperty.js\";\nimport VelocityOrientationProperty from \"./VelocityOrientationProperty.js\";\nimport VelocityVectorProperty from \"./VelocityVectorProperty.js\";\nimport WallGraphics from \"./WallGraphics.js\";\nimport Cesium3DTilesetGraphics from \"./Cesium3DTilesetGraphics.js\";\n\n// A marker type to distinguish CZML properties where we need to end up with a unit vector.\n// The data is still loaded into Cartesian3 objects but they are normalized.\nfunction UnitCartesian3() {}\nUnitCartesian3.packedLength = Cartesian3.packedLength;\nUnitCartesian3.unpack = Cartesian3.unpack;\nUnitCartesian3.pack = Cartesian3.pack;\n\n// As a side note, for the purposes of CZML, Quaternion always indicates a unit quaternion.\n\nvar currentId;\n\nfunction createReferenceProperty(entityCollection, referenceString) {\n if (referenceString[0] === \"#\") {\n referenceString = currentId + referenceString;\n }\n return ReferenceProperty.fromString(entityCollection, referenceString);\n}\n\nfunction createSpecializedProperty(type, entityCollection, packetData) {\n if (defined(packetData.reference)) {\n return createReferenceProperty(entityCollection, packetData.reference);\n }\n\n if (defined(packetData.velocityReference)) {\n var referenceProperty = createReferenceProperty(\n entityCollection,\n packetData.velocityReference\n );\n switch (type) {\n case Cartesian3:\n case UnitCartesian3:\n return new VelocityVectorProperty(\n referenceProperty,\n type === UnitCartesian3\n );\n case Quaternion:\n return new VelocityOrientationProperty(referenceProperty);\n }\n }\n\n throw new RuntimeError(JSON.stringify(packetData) + \" is not valid CZML.\");\n}\n\nfunction createAdapterProperty(property, adapterFunction) {\n return new CallbackProperty(function (time, result) {\n return adapterFunction(property.getValue(time, result));\n }, property.isConstant);\n}\n\nvar scratchCartesian = new Cartesian3();\nvar scratchSpherical = new Spherical();\nvar scratchCartographic = new Cartographic();\nvar scratchTimeInterval = new TimeInterval();\nvar scratchQuaternion = new Quaternion();\n\nfunction unwrapColorInterval(czmlInterval) {\n var rgbaf = czmlInterval.rgbaf;\n if (defined(rgbaf)) {\n return rgbaf;\n }\n\n var rgba = czmlInterval.rgba;\n if (!defined(rgba)) {\n return undefined;\n }\n\n var length = rgba.length;\n if (length === Color.packedLength) {\n return [\n Color.byteToFloat(rgba[0]),\n Color.byteToFloat(rgba[1]),\n Color.byteToFloat(rgba[2]),\n Color.byteToFloat(rgba[3]),\n ];\n }\n\n rgbaf = new Array(length);\n for (var i = 0; i < length; i += 5) {\n rgbaf[i] = rgba[i];\n rgbaf[i + 1] = Color.byteToFloat(rgba[i + 1]);\n rgbaf[i + 2] = Color.byteToFloat(rgba[i + 2]);\n rgbaf[i + 3] = Color.byteToFloat(rgba[i + 3]);\n rgbaf[i + 4] = Color.byteToFloat(rgba[i + 4]);\n }\n return rgbaf;\n}\n\nfunction unwrapUriInterval(czmlInterval, sourceUri) {\n var uri = defaultValue(czmlInterval.uri, czmlInterval);\n if (defined(sourceUri)) {\n return sourceUri.getDerivedResource({\n url: uri,\n });\n }\n\n return Resource.createIfNeeded(uri);\n}\n\nfunction unwrapRectangleInterval(czmlInterval) {\n var wsen = czmlInterval.wsen;\n if (defined(wsen)) {\n return wsen;\n }\n\n var wsenDegrees = czmlInterval.wsenDegrees;\n if (!defined(wsenDegrees)) {\n return undefined;\n }\n\n var length = wsenDegrees.length;\n if (length === Rectangle.packedLength) {\n return [\n CesiumMath.toRadians(wsenDegrees[0]),\n CesiumMath.toRadians(wsenDegrees[1]),\n CesiumMath.toRadians(wsenDegrees[2]),\n CesiumMath.toRadians(wsenDegrees[3]),\n ];\n }\n\n wsen = new Array(length);\n for (var i = 0; i < length; i += 5) {\n wsen[i] = wsenDegrees[i];\n wsen[i + 1] = CesiumMath.toRadians(wsenDegrees[i + 1]);\n wsen[i + 2] = CesiumMath.toRadians(wsenDegrees[i + 2]);\n wsen[i + 3] = CesiumMath.toRadians(wsenDegrees[i + 3]);\n wsen[i + 4] = CesiumMath.toRadians(wsenDegrees[i + 4]);\n }\n return wsen;\n}\n\nfunction convertUnitSphericalToCartesian(unitSpherical) {\n var length = unitSpherical.length;\n scratchSpherical.magnitude = 1.0;\n if (length === 2) {\n scratchSpherical.clock = unitSpherical[0];\n scratchSpherical.cone = unitSpherical[1];\n Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n }\n\n var result = new Array((length / 3) * 4);\n for (var i = 0, j = 0; i < length; i += 3, j += 4) {\n result[j] = unitSpherical[i];\n\n scratchSpherical.clock = unitSpherical[i + 1];\n scratchSpherical.cone = unitSpherical[i + 2];\n Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n\n result[j + 1] = scratchCartesian.x;\n result[j + 2] = scratchCartesian.y;\n result[j + 3] = scratchCartesian.z;\n }\n return result;\n}\n\nfunction convertSphericalToCartesian(spherical) {\n var length = spherical.length;\n if (length === 3) {\n scratchSpherical.clock = spherical[0];\n scratchSpherical.cone = spherical[1];\n scratchSpherical.magnitude = spherical[2];\n Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n }\n\n var result = new Array(length);\n for (var i = 0; i < length; i += 4) {\n result[i] = spherical[i];\n\n scratchSpherical.clock = spherical[i + 1];\n scratchSpherical.cone = spherical[i + 2];\n scratchSpherical.magnitude = spherical[i + 3];\n Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n\n result[i + 1] = scratchCartesian.x;\n result[i + 2] = scratchCartesian.y;\n result[i + 3] = scratchCartesian.z;\n }\n return result;\n}\n\nfunction convertCartographicRadiansToCartesian(cartographicRadians) {\n var length = cartographicRadians.length;\n if (length === 3) {\n scratchCartographic.longitude = cartographicRadians[0];\n scratchCartographic.latitude = cartographicRadians[1];\n scratchCartographic.height = cartographicRadians[2];\n Ellipsoid.WGS84.cartographicToCartesian(\n scratchCartographic,\n scratchCartesian\n );\n return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n }\n\n var result = new Array(length);\n for (var i = 0; i < length; i += 4) {\n result[i] = cartographicRadians[i];\n\n scratchCartographic.longitude = cartographicRadians[i + 1];\n scratchCartographic.latitude = cartographicRadians[i + 2];\n scratchCartographic.height = cartographicRadians[i + 3];\n Ellipsoid.WGS84.cartographicToCartesian(\n scratchCartographic,\n scratchCartesian\n );\n\n result[i + 1] = scratchCartesian.x;\n result[i + 2] = scratchCartesian.y;\n result[i + 3] = scratchCartesian.z;\n }\n return result;\n}\n\nfunction convertCartographicDegreesToCartesian(cartographicDegrees) {\n var length = cartographicDegrees.length;\n if (length === 3) {\n scratchCartographic.longitude = CesiumMath.toRadians(\n cartographicDegrees[0]\n );\n scratchCartographic.latitude = CesiumMath.toRadians(cartographicDegrees[1]);\n scratchCartographic.height = cartographicDegrees[2];\n Ellipsoid.WGS84.cartographicToCartesian(\n scratchCartographic,\n scratchCartesian\n );\n return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n }\n\n var result = new Array(length);\n for (var i = 0; i < length; i += 4) {\n result[i] = cartographicDegrees[i];\n\n scratchCartographic.longitude = CesiumMath.toRadians(\n cartographicDegrees[i + 1]\n );\n scratchCartographic.latitude = CesiumMath.toRadians(\n cartographicDegrees[i + 2]\n );\n scratchCartographic.height = cartographicDegrees[i + 3];\n Ellipsoid.WGS84.cartographicToCartesian(\n scratchCartographic,\n scratchCartesian\n );\n\n result[i + 1] = scratchCartesian.x;\n result[i + 2] = scratchCartesian.y;\n result[i + 3] = scratchCartesian.z;\n }\n return result;\n}\n\nfunction unwrapCartesianInterval(czmlInterval) {\n var cartesian = czmlInterval.cartesian;\n if (defined(cartesian)) {\n return cartesian;\n }\n\n var cartesianVelocity = czmlInterval.cartesianVelocity;\n if (defined(cartesianVelocity)) {\n return cartesianVelocity;\n }\n\n var unitCartesian = czmlInterval.unitCartesian;\n if (defined(unitCartesian)) {\n return unitCartesian;\n }\n\n var unitSpherical = czmlInterval.unitSpherical;\n if (defined(unitSpherical)) {\n return convertUnitSphericalToCartesian(unitSpherical);\n }\n\n var spherical = czmlInterval.spherical;\n if (defined(spherical)) {\n return convertSphericalToCartesian(spherical);\n }\n\n var cartographicRadians = czmlInterval.cartographicRadians;\n if (defined(cartographicRadians)) {\n return convertCartographicRadiansToCartesian(cartographicRadians);\n }\n\n var cartographicDegrees = czmlInterval.cartographicDegrees;\n if (defined(cartographicDegrees)) {\n return convertCartographicDegreesToCartesian(cartographicDegrees);\n }\n\n throw new RuntimeError(\n JSON.stringify(czmlInterval) + \" is not a valid CZML interval.\"\n );\n}\n\nfunction normalizePackedCartesianArray(array, startingIndex) {\n Cartesian3.unpack(array, startingIndex, scratchCartesian);\n Cartesian3.normalize(scratchCartesian, scratchCartesian);\n Cartesian3.pack(scratchCartesian, array, startingIndex);\n}\n\nfunction unwrapUnitCartesianInterval(czmlInterval) {\n var cartesian = unwrapCartesianInterval(czmlInterval);\n if (cartesian.length === 3) {\n normalizePackedCartesianArray(cartesian, 0);\n return cartesian;\n }\n\n for (var i = 1; i < cartesian.length; i += 4) {\n normalizePackedCartesianArray(cartesian, i);\n }\n\n return cartesian;\n}\n\nfunction normalizePackedQuaternionArray(array, startingIndex) {\n Quaternion.unpack(array, startingIndex, scratchQuaternion);\n Quaternion.normalize(scratchQuaternion, scratchQuaternion);\n Quaternion.pack(scratchQuaternion, array, startingIndex);\n}\n\nfunction unwrapQuaternionInterval(czmlInterval) {\n var unitQuaternion = czmlInterval.unitQuaternion;\n if (defined(unitQuaternion)) {\n if (unitQuaternion.length === 4) {\n normalizePackedQuaternionArray(unitQuaternion, 0);\n return unitQuaternion;\n }\n\n for (var i = 1; i < unitQuaternion.length; i += 5) {\n normalizePackedQuaternionArray(unitQuaternion, i);\n }\n }\n return unitQuaternion;\n}\n\nfunction getPropertyType(czmlInterval) {\n // The associations in this function need to be kept in sync with the\n // associations in unwrapInterval.\n\n // Intentionally omitted due to conficts in CZML property names:\n // * Image (conflicts with Uri)\n // * Rotation (conflicts with Number)\n //\n // cartesianVelocity is also omitted due to incomplete support for\n // derivative information in CZML properties.\n // (Currently cartesianVelocity is hacked directly into the position processing code)\n if (typeof czmlInterval === \"boolean\") {\n return Boolean;\n } else if (typeof czmlInterval === \"number\") {\n return Number;\n } else if (typeof czmlInterval === \"string\") {\n return String;\n } else if (czmlInterval.hasOwnProperty(\"array\")) {\n return Array;\n } else if (czmlInterval.hasOwnProperty(\"boolean\")) {\n return Boolean;\n } else if (czmlInterval.hasOwnProperty(\"boundingRectangle\")) {\n return BoundingRectangle;\n } else if (czmlInterval.hasOwnProperty(\"cartesian2\")) {\n return Cartesian2;\n } else if (\n czmlInterval.hasOwnProperty(\"cartesian\") ||\n czmlInterval.hasOwnProperty(\"spherical\") ||\n czmlInterval.hasOwnProperty(\"cartographicRadians\") ||\n czmlInterval.hasOwnProperty(\"cartographicDegrees\")\n ) {\n return Cartesian3;\n } else if (\n czmlInterval.hasOwnProperty(\"unitCartesian\") ||\n czmlInterval.hasOwnProperty(\"unitSpherical\")\n ) {\n return UnitCartesian3;\n } else if (\n czmlInterval.hasOwnProperty(\"rgba\") ||\n czmlInterval.hasOwnProperty(\"rgbaf\")\n ) {\n return Color;\n } else if (czmlInterval.hasOwnProperty(\"arcType\")) {\n return ArcType;\n } else if (czmlInterval.hasOwnProperty(\"classificationType\")) {\n return ClassificationType;\n } else if (czmlInterval.hasOwnProperty(\"colorBlendMode\")) {\n return ColorBlendMode;\n } else if (czmlInterval.hasOwnProperty(\"cornerType\")) {\n return CornerType;\n } else if (czmlInterval.hasOwnProperty(\"heightReference\")) {\n return HeightReference;\n } else if (czmlInterval.hasOwnProperty(\"horizontalOrigin\")) {\n return HorizontalOrigin;\n } else if (czmlInterval.hasOwnProperty(\"date\")) {\n return JulianDate;\n } else if (czmlInterval.hasOwnProperty(\"labelStyle\")) {\n return LabelStyle;\n } else if (czmlInterval.hasOwnProperty(\"number\")) {\n return Number;\n } else if (czmlInterval.hasOwnProperty(\"nearFarScalar\")) {\n return NearFarScalar;\n } else if (czmlInterval.hasOwnProperty(\"distanceDisplayCondition\")) {\n return DistanceDisplayCondition;\n } else if (\n czmlInterval.hasOwnProperty(\"object\") ||\n czmlInterval.hasOwnProperty(\"value\")\n ) {\n return Object;\n } else if (czmlInterval.hasOwnProperty(\"unitQuaternion\")) {\n return Quaternion;\n } else if (czmlInterval.hasOwnProperty(\"shadowMode\")) {\n return ShadowMode;\n } else if (czmlInterval.hasOwnProperty(\"string\")) {\n return String;\n } else if (czmlInterval.hasOwnProperty(\"stripeOrientation\")) {\n return StripeOrientation;\n } else if (\n czmlInterval.hasOwnProperty(\"wsen\") ||\n czmlInterval.hasOwnProperty(\"wsenDegrees\")\n ) {\n return Rectangle;\n } else if (czmlInterval.hasOwnProperty(\"uri\")) {\n return Uri;\n } else if (czmlInterval.hasOwnProperty(\"verticalOrigin\")) {\n return VerticalOrigin;\n }\n // fallback case\n return Object;\n}\n\nfunction unwrapInterval(type, czmlInterval, sourceUri) {\n // The associations in this function need to be kept in sync with the\n // associations in getPropertyType\n switch (type) {\n case ArcType:\n return ArcType[defaultValue(czmlInterval.arcType, czmlInterval)];\n case Array:\n return czmlInterval.array;\n case Boolean:\n return defaultValue(czmlInterval[\"boolean\"], czmlInterval);\n case BoundingRectangle:\n return czmlInterval.boundingRectangle;\n case Cartesian2:\n return czmlInterval.cartesian2;\n case Cartesian3:\n return unwrapCartesianInterval(czmlInterval);\n case UnitCartesian3:\n return unwrapUnitCartesianInterval(czmlInterval);\n case Color:\n return unwrapColorInterval(czmlInterval);\n case ClassificationType:\n return ClassificationType[\n defaultValue(czmlInterval.classificationType, czmlInterval)\n ];\n case ColorBlendMode:\n return ColorBlendMode[\n defaultValue(czmlInterval.colorBlendMode, czmlInterval)\n ];\n case CornerType:\n return CornerType[defaultValue(czmlInterval.cornerType, czmlInterval)];\n case HeightReference:\n return HeightReference[\n defaultValue(czmlInterval.heightReference, czmlInterval)\n ];\n case HorizontalOrigin:\n return HorizontalOrigin[\n defaultValue(czmlInterval.horizontalOrigin, czmlInterval)\n ];\n case Image:\n return unwrapUriInterval(czmlInterval, sourceUri);\n case JulianDate:\n return JulianDate.fromIso8601(\n defaultValue(czmlInterval.date, czmlInterval)\n );\n case LabelStyle:\n return LabelStyle[defaultValue(czmlInterval.labelStyle, czmlInterval)];\n case Number:\n return defaultValue(czmlInterval.number, czmlInterval);\n case NearFarScalar:\n return czmlInterval.nearFarScalar;\n case DistanceDisplayCondition:\n return czmlInterval.distanceDisplayCondition;\n case Object:\n return defaultValue(\n defaultValue(czmlInterval.object, czmlInterval.value),\n czmlInterval\n );\n case Quaternion:\n return unwrapQuaternionInterval(czmlInterval);\n case Rotation:\n return defaultValue(czmlInterval.number, czmlInterval);\n case ShadowMode:\n return ShadowMode[\n defaultValue(\n defaultValue(czmlInterval.shadowMode, czmlInterval.shadows),\n czmlInterval\n )\n ];\n case String:\n return defaultValue(czmlInterval.string, czmlInterval);\n case StripeOrientation:\n return StripeOrientation[\n defaultValue(czmlInterval.stripeOrientation, czmlInterval)\n ];\n case Rectangle:\n return unwrapRectangleInterval(czmlInterval);\n case Uri:\n return unwrapUriInterval(czmlInterval, sourceUri);\n case VerticalOrigin:\n return VerticalOrigin[\n defaultValue(czmlInterval.verticalOrigin, czmlInterval)\n ];\n default:\n throw new RuntimeError(type);\n }\n}\n\nvar interpolators = {\n HERMITE: HermitePolynomialApproximation,\n LAGRANGE: LagrangePolynomialApproximation,\n LINEAR: LinearApproximation,\n};\n\nfunction updateInterpolationSettings(packetData, property) {\n var interpolationAlgorithm = packetData.interpolationAlgorithm;\n var interpolationDegree = packetData.interpolationDegree;\n if (defined(interpolationAlgorithm) || defined(interpolationDegree)) {\n property.setInterpolationOptions({\n interpolationAlgorithm: interpolators[interpolationAlgorithm],\n interpolationDegree: interpolationDegree,\n });\n }\n\n var forwardExtrapolationType = packetData.forwardExtrapolationType;\n if (defined(forwardExtrapolationType)) {\n property.forwardExtrapolationType =\n ExtrapolationType[forwardExtrapolationType];\n }\n\n var forwardExtrapolationDuration = packetData.forwardExtrapolationDuration;\n if (defined(forwardExtrapolationDuration)) {\n property.forwardExtrapolationDuration = forwardExtrapolationDuration;\n }\n\n var backwardExtrapolationType = packetData.backwardExtrapolationType;\n if (defined(backwardExtrapolationType)) {\n property.backwardExtrapolationType =\n ExtrapolationType[backwardExtrapolationType];\n }\n\n var backwardExtrapolationDuration = packetData.backwardExtrapolationDuration;\n if (defined(backwardExtrapolationDuration)) {\n property.backwardExtrapolationDuration = backwardExtrapolationDuration;\n }\n}\n\nvar iso8601Scratch = {\n iso8601: undefined,\n};\n\nfunction intervalFromString(intervalString) {\n if (!defined(intervalString)) {\n return undefined;\n }\n iso8601Scratch.iso8601 = intervalString;\n return TimeInterval.fromIso8601(iso8601Scratch);\n}\n\nfunction wrapPropertyInInfiniteInterval(property) {\n var interval = Iso8601.MAXIMUM_INTERVAL.clone();\n interval.data = property;\n return interval;\n}\n\nfunction convertPropertyToComposite(property) {\n // Create the composite and add the old property, wrapped in an infinite interval.\n var composite = new CompositeProperty();\n composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n return composite;\n}\n\nfunction convertPositionPropertyToComposite(property) {\n // Create the composite and add the old property, wrapped in an infinite interval.\n var composite = new CompositePositionProperty(property.referenceFrame);\n composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n return composite;\n}\n\nfunction processProperty(\n type,\n object,\n propertyName,\n packetData,\n constrainedInterval,\n sourceUri,\n entityCollection\n) {\n var combinedInterval = intervalFromString(packetData.interval);\n if (defined(constrainedInterval)) {\n if (defined(combinedInterval)) {\n combinedInterval = TimeInterval.intersect(\n combinedInterval,\n constrainedInterval,\n scratchTimeInterval\n );\n } else {\n combinedInterval = constrainedInterval;\n }\n }\n\n var packedLength;\n var unwrappedInterval;\n var unwrappedIntervalLength;\n\n // CZML properties can be defined in many ways. Most ways represent a structure for\n // encoding a single value (number, string, cartesian, etc.) Regardless of the value type,\n // if it encodes a single value it will get loaded into a ConstantProperty eventually.\n // Alternatively, there are ways of defining a property that require specialized\n // client-side representation. Currently, these are ReferenceProperty,\n // and client-side velocity computation properties such as VelocityVectorProperty.\n var isValue =\n !defined(packetData.reference) && !defined(packetData.velocityReference);\n var hasInterval =\n defined(combinedInterval) &&\n !combinedInterval.equals(Iso8601.MAXIMUM_INTERVAL);\n\n if (packetData.delete === true) {\n // If deleting this property for all time, we can simply set to undefined and return.\n if (!hasInterval) {\n object[propertyName] = undefined;\n return;\n }\n\n // Deleting depends on the type of property we have.\n return removePropertyData(object[propertyName], combinedInterval);\n }\n\n var isSampled = false;\n\n if (isValue) {\n unwrappedInterval = unwrapInterval(type, packetData, sourceUri);\n if (!defined(unwrappedInterval)) {\n // not a known value type, bail\n return;\n }\n packedLength = defaultValue(type.packedLength, 1);\n unwrappedIntervalLength = defaultValue(unwrappedInterval.length, 1);\n isSampled =\n !defined(packetData.array) &&\n typeof unwrappedInterval !== \"string\" &&\n unwrappedIntervalLength > packedLength &&\n type !== Object;\n }\n\n // Rotation is a special case because it represents a native type (Number)\n // and therefore does not need to be unpacked when loaded as a constant value.\n var needsUnpacking = typeof type.unpack === \"function\" && type !== Rotation;\n\n // Any time a constant value is assigned, it completely blows away anything else.\n if (!isSampled && !hasInterval) {\n if (isValue) {\n object[propertyName] = new ConstantProperty(\n needsUnpacking ? type.unpack(unwrappedInterval, 0) : unwrappedInterval\n );\n } else {\n object[propertyName] = createSpecializedProperty(\n type,\n entityCollection,\n packetData\n );\n }\n return;\n }\n\n var property = object[propertyName];\n\n var epoch;\n var packetEpoch = packetData.epoch;\n if (defined(packetEpoch)) {\n epoch = JulianDate.fromIso8601(packetEpoch);\n }\n\n // Without an interval, any sampled value is infinite, meaning it completely\n // replaces any non-sampled property that may exist.\n if (isSampled && !hasInterval) {\n if (!(property instanceof SampledProperty)) {\n object[propertyName] = property = new SampledProperty(type);\n }\n property.addSamplesPackedArray(unwrappedInterval, epoch);\n updateInterpolationSettings(packetData, property);\n return;\n }\n\n var interval;\n\n // A constant value with an interval is normally part of a TimeIntervalCollection,\n // However, if the current property is not a time-interval collection, we need\n // to turn it into a Composite, preserving the old data with the new interval.\n if (!isSampled && hasInterval) {\n // Create a new interval for the constant value.\n combinedInterval = combinedInterval.clone();\n if (isValue) {\n combinedInterval.data = needsUnpacking\n ? type.unpack(unwrappedInterval, 0)\n : unwrappedInterval;\n } else {\n combinedInterval.data = createSpecializedProperty(\n type,\n entityCollection,\n packetData\n );\n }\n\n // If no property exists, simply use a new interval collection\n if (!defined(property)) {\n object[propertyName] = property = isValue\n ? new TimeIntervalCollectionProperty()\n : new CompositeProperty();\n }\n\n if (isValue && property instanceof TimeIntervalCollectionProperty) {\n // If we created a collection, or it already was one, use it.\n property.intervals.addInterval(combinedInterval);\n } else if (property instanceof CompositeProperty) {\n // If the collection was already a CompositeProperty, use it.\n if (isValue) {\n combinedInterval.data = new ConstantProperty(combinedInterval.data);\n }\n property.intervals.addInterval(combinedInterval);\n } else {\n // Otherwise, create a CompositeProperty but preserve the existing data.\n object[propertyName] = property = convertPropertyToComposite(property);\n\n // Change the new data to a ConstantProperty and add it.\n if (isValue) {\n combinedInterval.data = new ConstantProperty(combinedInterval.data);\n }\n property.intervals.addInterval(combinedInterval);\n }\n\n return;\n }\n\n // isSampled && hasInterval\n if (!defined(property)) {\n object[propertyName] = property = new CompositeProperty();\n }\n\n // Create a CompositeProperty but preserve the existing data.\n if (!(property instanceof CompositeProperty)) {\n object[propertyName] = property = convertPropertyToComposite(property);\n }\n\n // Check if the interval already exists in the composite.\n var intervals = property.intervals;\n interval = intervals.findInterval(combinedInterval);\n if (!defined(interval) || !(interval.data instanceof SampledProperty)) {\n // If not, create a SampledProperty for it.\n interval = combinedInterval.clone();\n interval.data = new SampledProperty(type);\n intervals.addInterval(interval);\n }\n interval.data.addSamplesPackedArray(unwrappedInterval, epoch);\n updateInterpolationSettings(packetData, interval.data);\n}\n\nfunction removePropertyData(property, interval) {\n if (property instanceof SampledProperty) {\n property.removeSamples(interval);\n return;\n } else if (property instanceof TimeIntervalCollectionProperty) {\n property.intervals.removeInterval(interval);\n return;\n } else if (property instanceof CompositeProperty) {\n var intervals = property.intervals;\n for (var i = 0; i < intervals.length; ++i) {\n var intersection = TimeInterval.intersect(\n intervals.get(i),\n interval,\n scratchTimeInterval\n );\n if (!intersection.isEmpty) {\n // remove data from the contained properties\n removePropertyData(intersection.data, interval);\n }\n }\n // remove the intervals from the composite\n intervals.removeInterval(interval);\n return;\n }\n}\n\nfunction processPacketData(\n type,\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, len = packetData.length; i < len; ++i) {\n processProperty(\n type,\n object,\n propertyName,\n packetData[i],\n interval,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processProperty(\n type,\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processPositionProperty(\n object,\n propertyName,\n packetData,\n constrainedInterval,\n sourceUri,\n entityCollection\n) {\n var combinedInterval = intervalFromString(packetData.interval);\n if (defined(constrainedInterval)) {\n if (defined(combinedInterval)) {\n combinedInterval = TimeInterval.intersect(\n combinedInterval,\n constrainedInterval,\n scratchTimeInterval\n );\n } else {\n combinedInterval = constrainedInterval;\n }\n }\n\n var numberOfDerivatives = defined(packetData.cartesianVelocity) ? 1 : 0;\n var packedLength = Cartesian3.packedLength * (numberOfDerivatives + 1);\n var unwrappedInterval;\n var unwrappedIntervalLength;\n var isValue = !defined(packetData.reference);\n var hasInterval =\n defined(combinedInterval) &&\n !combinedInterval.equals(Iso8601.MAXIMUM_INTERVAL);\n\n if (packetData.delete === true) {\n // If deleting this property for all time, we can simply set to undefined and return.\n if (!hasInterval) {\n object[propertyName] = undefined;\n return;\n }\n\n // Deleting depends on the type of property we have.\n return removePositionPropertyData(object[propertyName], combinedInterval);\n }\n\n var referenceFrame;\n var isSampled = false;\n\n if (isValue) {\n if (defined(packetData.referenceFrame)) {\n referenceFrame = ReferenceFrame[packetData.referenceFrame];\n }\n referenceFrame = defaultValue(referenceFrame, ReferenceFrame.FIXED);\n unwrappedInterval = unwrapCartesianInterval(packetData);\n unwrappedIntervalLength = defaultValue(unwrappedInterval.length, 1);\n isSampled = unwrappedIntervalLength > packedLength;\n }\n\n // Any time a constant value is assigned, it completely blows away anything else.\n if (!isSampled && !hasInterval) {\n if (isValue) {\n object[propertyName] = new ConstantPositionProperty(\n Cartesian3.unpack(unwrappedInterval),\n referenceFrame\n );\n } else {\n object[propertyName] = createReferenceProperty(\n entityCollection,\n packetData.reference\n );\n }\n return;\n }\n\n var property = object[propertyName];\n\n var epoch;\n var packetEpoch = packetData.epoch;\n if (defined(packetEpoch)) {\n epoch = JulianDate.fromIso8601(packetEpoch);\n }\n\n // Without an interval, any sampled value is infinite, meaning it completely\n // replaces any non-sampled property that may exist.\n if (isSampled && !hasInterval) {\n if (\n !(property instanceof SampledPositionProperty) ||\n (defined(referenceFrame) && property.referenceFrame !== referenceFrame)\n ) {\n object[propertyName] = property = new SampledPositionProperty(\n referenceFrame,\n numberOfDerivatives\n );\n }\n property.addSamplesPackedArray(unwrappedInterval, epoch);\n updateInterpolationSettings(packetData, property);\n return;\n }\n\n var interval;\n\n // A constant value with an interval is normally part of a TimeIntervalCollection,\n // However, if the current property is not a time-interval collection, we need\n // to turn it into a Composite, preserving the old data with the new interval.\n if (!isSampled && hasInterval) {\n // Create a new interval for the constant value.\n combinedInterval = combinedInterval.clone();\n if (isValue) {\n combinedInterval.data = Cartesian3.unpack(unwrappedInterval);\n } else {\n combinedInterval.data = createReferenceProperty(\n entityCollection,\n packetData.reference\n );\n }\n\n // If no property exists, simply use a new interval collection\n if (!defined(property)) {\n if (isValue) {\n property = new TimeIntervalCollectionPositionProperty(referenceFrame);\n } else {\n property = new CompositePositionProperty(referenceFrame);\n }\n object[propertyName] = property;\n }\n\n if (\n isValue &&\n property instanceof TimeIntervalCollectionPositionProperty &&\n defined(referenceFrame) &&\n property.referenceFrame === referenceFrame\n ) {\n // If we create a collection, or it already existed, use it.\n property.intervals.addInterval(combinedInterval);\n } else if (property instanceof CompositePositionProperty) {\n // If the collection was already a CompositePositionProperty, use it.\n if (isValue) {\n combinedInterval.data = new ConstantPositionProperty(\n combinedInterval.data,\n referenceFrame\n );\n }\n property.intervals.addInterval(combinedInterval);\n } else {\n // Otherwise, create a CompositePositionProperty but preserve the existing data.\n object[propertyName] = property = convertPositionPropertyToComposite(\n property\n );\n\n // Change the new data to a ConstantPositionProperty and add it.\n if (isValue) {\n combinedInterval.data = new ConstantPositionProperty(\n combinedInterval.data,\n referenceFrame\n );\n }\n property.intervals.addInterval(combinedInterval);\n }\n\n return;\n }\n\n // isSampled && hasInterval\n if (!defined(property)) {\n object[propertyName] = property = new CompositePositionProperty(\n referenceFrame\n );\n } else if (!(property instanceof CompositePositionProperty)) {\n // Create a CompositeProperty but preserve the existing data.\n object[propertyName] = property = convertPositionPropertyToComposite(\n property\n );\n }\n\n // Check if the interval already exists in the composite.\n var intervals = property.intervals;\n interval = intervals.findInterval(combinedInterval);\n if (\n !defined(interval) ||\n !(interval.data instanceof SampledPositionProperty) ||\n (defined(referenceFrame) && interval.data.referenceFrame !== referenceFrame)\n ) {\n // If not, create a SampledPositionProperty for it.\n interval = combinedInterval.clone();\n interval.data = new SampledPositionProperty(\n referenceFrame,\n numberOfDerivatives\n );\n intervals.addInterval(interval);\n }\n interval.data.addSamplesPackedArray(unwrappedInterval, epoch);\n updateInterpolationSettings(packetData, interval.data);\n}\n\nfunction removePositionPropertyData(property, interval) {\n if (property instanceof SampledPositionProperty) {\n property.removeSamples(interval);\n return;\n } else if (property instanceof TimeIntervalCollectionPositionProperty) {\n property.intervals.removeInterval(interval);\n return;\n } else if (property instanceof CompositePositionProperty) {\n var intervals = property.intervals;\n for (var i = 0; i < intervals.length; ++i) {\n var intersection = TimeInterval.intersect(\n intervals.get(i),\n interval,\n scratchTimeInterval\n );\n if (!intersection.isEmpty) {\n // remove data from the contained properties\n removePositionPropertyData(intersection.data, interval);\n }\n }\n // remove the intervals from the composite\n intervals.removeInterval(interval);\n return;\n }\n}\n\nfunction processPositionPacketData(\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, len = packetData.length; i < len; ++i) {\n processPositionProperty(\n object,\n propertyName,\n packetData[i],\n interval,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processPositionProperty(\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processShapePacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n if (defined(packetData.references)) {\n processReferencesArrayPacketData(\n object,\n propertyName,\n packetData.references,\n packetData.interval,\n entityCollection,\n PropertyArray,\n CompositeProperty\n );\n } else {\n if (defined(packetData.cartesian)) {\n packetData.array = Cartesian2.unpackArray(packetData.cartesian);\n }\n\n if (defined(packetData.array)) {\n processPacketData(\n Array,\n object,\n propertyName,\n packetData,\n undefined,\n undefined,\n entityCollection\n );\n }\n }\n}\n\nfunction processMaterialProperty(\n object,\n propertyName,\n packetData,\n constrainedInterval,\n sourceUri,\n entityCollection\n) {\n var combinedInterval = intervalFromString(packetData.interval);\n if (defined(constrainedInterval)) {\n if (defined(combinedInterval)) {\n combinedInterval = TimeInterval.intersect(\n combinedInterval,\n constrainedInterval,\n scratchTimeInterval\n );\n } else {\n combinedInterval = constrainedInterval;\n }\n }\n\n var property = object[propertyName];\n var existingMaterial;\n var existingInterval;\n\n if (defined(combinedInterval)) {\n if (!(property instanceof CompositeMaterialProperty)) {\n property = new CompositeMaterialProperty();\n object[propertyName] = property;\n }\n //See if we already have data at that interval.\n var thisIntervals = property.intervals;\n existingInterval = thisIntervals.findInterval({\n start: combinedInterval.start,\n stop: combinedInterval.stop,\n });\n if (defined(existingInterval)) {\n //We have an interval, but we need to make sure the\n //new data is the same type of material as the old data.\n existingMaterial = existingInterval.data;\n } else {\n //If not, create it.\n existingInterval = combinedInterval.clone();\n thisIntervals.addInterval(existingInterval);\n }\n } else {\n existingMaterial = property;\n }\n\n var materialData;\n if (defined(packetData.solidColor)) {\n if (!(existingMaterial instanceof ColorMaterialProperty)) {\n existingMaterial = new ColorMaterialProperty();\n }\n materialData = packetData.solidColor;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n undefined,\n entityCollection\n );\n } else if (defined(packetData.grid)) {\n if (!(existingMaterial instanceof GridMaterialProperty)) {\n existingMaterial = new GridMaterialProperty();\n }\n materialData = packetData.grid;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"cellAlpha\",\n materialData.cellAlpha,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n existingMaterial,\n \"lineCount\",\n materialData.lineCount,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n existingMaterial,\n \"lineThickness\",\n materialData.lineThickness,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n existingMaterial,\n \"lineOffset\",\n materialData.lineOffset,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.image)) {\n if (!(existingMaterial instanceof ImageMaterialProperty)) {\n existingMaterial = new ImageMaterialProperty();\n }\n materialData = packetData.image;\n processPacketData(\n Image,\n existingMaterial,\n \"image\",\n materialData.image,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n existingMaterial,\n \"repeat\",\n materialData.repeat,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n existingMaterial,\n \"transparent\",\n materialData.transparent,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.stripe)) {\n if (!(existingMaterial instanceof StripeMaterialProperty)) {\n existingMaterial = new StripeMaterialProperty();\n }\n materialData = packetData.stripe;\n processPacketData(\n StripeOrientation,\n existingMaterial,\n \"orientation\",\n materialData.orientation,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"evenColor\",\n materialData.evenColor,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"oddColor\",\n materialData.oddColor,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"offset\",\n materialData.offset,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"repeat\",\n materialData.repeat,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.polylineOutline)) {\n if (!(existingMaterial instanceof PolylineOutlineMaterialProperty)) {\n existingMaterial = new PolylineOutlineMaterialProperty();\n }\n materialData = packetData.polylineOutline;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"outlineColor\",\n materialData.outlineColor,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"outlineWidth\",\n materialData.outlineWidth,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.polylineGlow)) {\n if (!(existingMaterial instanceof PolylineGlowMaterialProperty)) {\n existingMaterial = new PolylineGlowMaterialProperty();\n }\n materialData = packetData.polylineGlow;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"glowPower\",\n materialData.glowPower,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"taperPower\",\n materialData.taperPower,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.polylineArrow)) {\n if (!(existingMaterial instanceof PolylineArrowMaterialProperty)) {\n existingMaterial = new PolylineArrowMaterialProperty();\n }\n materialData = packetData.polylineArrow;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n undefined,\n entityCollection\n );\n } else if (defined(packetData.polylineDash)) {\n if (!(existingMaterial instanceof PolylineDashMaterialProperty)) {\n existingMaterial = new PolylineDashMaterialProperty();\n }\n materialData = packetData.polylineDash;\n processPacketData(\n Color,\n existingMaterial,\n \"color\",\n materialData.color,\n undefined,\n undefined,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"gapColor\",\n materialData.gapColor,\n undefined,\n undefined,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"dashLength\",\n materialData.dashLength,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n existingMaterial,\n \"dashPattern\",\n materialData.dashPattern,\n undefined,\n sourceUri,\n entityCollection\n );\n } else if (defined(packetData.checkerboard)) {\n if (!(existingMaterial instanceof CheckerboardMaterialProperty)) {\n existingMaterial = new CheckerboardMaterialProperty();\n }\n materialData = packetData.checkerboard;\n processPacketData(\n Color,\n existingMaterial,\n \"evenColor\",\n materialData.evenColor,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n existingMaterial,\n \"oddColor\",\n materialData.oddColor,\n undefined,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n existingMaterial,\n \"repeat\",\n materialData.repeat,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n\n if (defined(existingInterval)) {\n existingInterval.data = existingMaterial;\n } else {\n object[propertyName] = existingMaterial;\n }\n}\n\nfunction processMaterialPacketData(\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, len = packetData.length; i < len; ++i) {\n processMaterialProperty(\n object,\n propertyName,\n packetData[i],\n interval,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processMaterialProperty(\n object,\n propertyName,\n packetData,\n interval,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processName(entity, packet, entityCollection, sourceUri) {\n var nameData = packet.name;\n if (defined(nameData)) {\n entity.name = packet.name;\n }\n}\n\nfunction processDescription(entity, packet, entityCollection, sourceUri) {\n var descriptionData = packet.description;\n if (defined(descriptionData)) {\n processPacketData(\n String,\n entity,\n \"description\",\n descriptionData,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processPosition(entity, packet, entityCollection, sourceUri) {\n var positionData = packet.position;\n if (defined(positionData)) {\n processPositionPacketData(\n entity,\n \"position\",\n positionData,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processViewFrom(entity, packet, entityCollection, sourceUri) {\n var viewFromData = packet.viewFrom;\n if (defined(viewFromData)) {\n processPacketData(\n Cartesian3,\n entity,\n \"viewFrom\",\n viewFromData,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processOrientation(entity, packet, entityCollection, sourceUri) {\n var orientationData = packet.orientation;\n if (defined(orientationData)) {\n processPacketData(\n Quaternion,\n entity,\n \"orientation\",\n orientationData,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processProperties(entity, packet, entityCollection, sourceUri) {\n var propertiesData = packet.properties;\n if (defined(propertiesData)) {\n if (!defined(entity.properties)) {\n entity.properties = new PropertyBag();\n }\n\n // We cannot simply call processPacketData(entity, 'properties', propertyData, undefined, sourceUri, entityCollection)\n // because each property of \"properties\" may vary separately.\n // The properties will be accessible as entity.properties.myprop.getValue(time).\n\n for (var key in propertiesData) {\n if (propertiesData.hasOwnProperty(key)) {\n if (!entity.properties.hasProperty(key)) {\n entity.properties.addProperty(key);\n }\n\n var propertyData = propertiesData[key];\n if (Array.isArray(propertyData)) {\n for (var i = 0, len = propertyData.length; i < len; ++i) {\n processProperty(\n getPropertyType(propertyData[i]),\n entity.properties,\n key,\n propertyData[i],\n undefined,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processProperty(\n getPropertyType(propertyData),\n entity.properties,\n key,\n propertyData,\n undefined,\n sourceUri,\n entityCollection\n );\n }\n }\n }\n }\n}\n\nfunction processReferencesArrayPacketData(\n object,\n propertyName,\n references,\n interval,\n entityCollection,\n PropertyArrayType,\n CompositePropertyArrayType\n) {\n var properties = references.map(function (reference) {\n return createReferenceProperty(entityCollection, reference);\n });\n\n if (defined(interval)) {\n interval = intervalFromString(interval);\n var property = object[propertyName];\n if (!(property instanceof CompositePropertyArrayType)) {\n // If the property was not already a CompositeProperty,\n // create a CompositeProperty but preserve the existing data.\n\n // Create the composite and add the old property, wrapped in an infinite interval.\n var composite = new CompositePropertyArrayType();\n composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n\n object[propertyName] = property = composite;\n }\n\n interval.data = new PropertyArrayType(properties);\n property.intervals.addInterval(interval);\n } else {\n object[propertyName] = new PropertyArrayType(properties);\n }\n}\n\nfunction processArrayPacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n var references = packetData.references;\n if (defined(references)) {\n processReferencesArrayPacketData(\n object,\n propertyName,\n references,\n packetData.interval,\n entityCollection,\n PropertyArray,\n CompositeProperty\n );\n } else {\n processPacketData(\n Array,\n object,\n propertyName,\n packetData,\n undefined,\n undefined,\n entityCollection\n );\n }\n}\n\nfunction processArray(object, propertyName, packetData, entityCollection) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, length = packetData.length; i < length; ++i) {\n processArrayPacketData(\n object,\n propertyName,\n packetData[i],\n entityCollection\n );\n }\n } else {\n processArrayPacketData(object, propertyName, packetData, entityCollection);\n }\n}\n\nfunction processPositionArrayPacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n var references = packetData.references;\n if (defined(references)) {\n processReferencesArrayPacketData(\n object,\n propertyName,\n references,\n packetData.interval,\n entityCollection,\n PositionPropertyArray,\n CompositePositionProperty\n );\n } else {\n if (defined(packetData.cartesian)) {\n packetData.array = Cartesian3.unpackArray(packetData.cartesian);\n } else if (defined(packetData.cartographicRadians)) {\n packetData.array = Cartesian3.fromRadiansArrayHeights(\n packetData.cartographicRadians\n );\n } else if (defined(packetData.cartographicDegrees)) {\n packetData.array = Cartesian3.fromDegreesArrayHeights(\n packetData.cartographicDegrees\n );\n }\n\n if (defined(packetData.array)) {\n processPacketData(\n Array,\n object,\n propertyName,\n packetData,\n undefined,\n undefined,\n entityCollection\n );\n }\n }\n}\n\nfunction processPositionArray(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, length = packetData.length; i < length; ++i) {\n processPositionArrayPacketData(\n object,\n propertyName,\n packetData[i],\n entityCollection\n );\n }\n } else {\n processPositionArrayPacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n );\n }\n}\n\nfunction unpackCartesianArray(array) {\n return Cartesian3.unpackArray(array);\n}\n\nfunction unpackCartographicRadiansArray(array) {\n return Cartesian3.fromRadiansArrayHeights(array);\n}\n\nfunction unpackCartographicDegreesArray(array) {\n return Cartesian3.fromDegreesArrayHeights(array);\n}\n\nfunction processPositionArrayOfArraysPacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n var references = packetData.references;\n if (defined(references)) {\n var properties = references.map(function (referenceArray) {\n var tempObj = {};\n processReferencesArrayPacketData(\n tempObj,\n \"positions\",\n referenceArray,\n packetData.interval,\n entityCollection,\n PositionPropertyArray,\n CompositePositionProperty\n );\n return tempObj.positions;\n });\n object[propertyName] = new PositionPropertyArray(properties);\n } else {\n if (defined(packetData.cartesian)) {\n packetData.array = packetData.cartesian.map(unpackCartesianArray);\n } else if (defined(packetData.cartographicRadians)) {\n packetData.array = packetData.cartographicRadians.map(\n unpackCartographicRadiansArray\n );\n } else if (defined(packetData.cartographicDegrees)) {\n packetData.array = packetData.cartographicDegrees.map(\n unpackCartographicDegreesArray\n );\n }\n\n if (defined(packetData.array)) {\n processPacketData(\n Array,\n object,\n propertyName,\n packetData,\n undefined,\n undefined,\n entityCollection\n );\n }\n }\n}\n\nfunction processPositionArrayOfArrays(\n object,\n propertyName,\n packetData,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, length = packetData.length; i < length; ++i) {\n processPositionArrayOfArraysPacketData(\n object,\n propertyName,\n packetData[i],\n entityCollection\n );\n }\n } else {\n processPositionArrayOfArraysPacketData(\n object,\n propertyName,\n packetData,\n entityCollection\n );\n }\n}\n\nfunction processShape(object, propertyName, packetData, entityCollection) {\n if (!defined(packetData)) {\n return;\n }\n\n if (Array.isArray(packetData)) {\n for (var i = 0, length = packetData.length; i < length; i++) {\n processShapePacketData(\n object,\n propertyName,\n packetData[i],\n entityCollection\n );\n }\n } else {\n processShapePacketData(object, propertyName, packetData, entityCollection);\n }\n}\n\nfunction processAvailability(entity, packet, entityCollection, sourceUri) {\n var packetData = packet.availability;\n if (!defined(packetData)) {\n return;\n }\n\n var intervals;\n if (Array.isArray(packetData)) {\n for (var i = 0, len = packetData.length; i < len; ++i) {\n if (!defined(intervals)) {\n intervals = new TimeIntervalCollection();\n }\n intervals.addInterval(intervalFromString(packetData[i]));\n }\n } else {\n intervals = new TimeIntervalCollection();\n intervals.addInterval(intervalFromString(packetData));\n }\n entity.availability = intervals;\n}\n\nfunction processAlignedAxis(\n billboard,\n packetData,\n interval,\n sourceUri,\n entityCollection\n) {\n if (!defined(packetData)) {\n return;\n }\n\n processPacketData(\n UnitCartesian3,\n billboard,\n \"alignedAxis\",\n packetData,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processBillboard(entity, packet, entityCollection, sourceUri) {\n var billboardData = packet.billboard;\n if (!defined(billboardData)) {\n return;\n }\n\n var interval = intervalFromString(billboardData.interval);\n var billboard = entity.billboard;\n if (!defined(billboard)) {\n entity.billboard = billboard = new BillboardGraphics();\n }\n\n processPacketData(\n Boolean,\n billboard,\n \"show\",\n billboardData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Image,\n billboard,\n \"image\",\n billboardData.image,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n billboard,\n \"scale\",\n billboardData.scale,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n billboard,\n \"pixelOffset\",\n billboardData.pixelOffset,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n billboard,\n \"eyeOffset\",\n billboardData.eyeOffset,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HorizontalOrigin,\n billboard,\n \"horizontalOrigin\",\n billboardData.horizontalOrigin,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n VerticalOrigin,\n billboard,\n \"verticalOrigin\",\n billboardData.verticalOrigin,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n billboard,\n \"heightReference\",\n billboardData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n billboard,\n \"color\",\n billboardData.color,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n billboard,\n \"rotation\",\n billboardData.rotation,\n interval,\n sourceUri,\n entityCollection\n );\n processAlignedAxis(\n billboard,\n billboardData.alignedAxis,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n billboard,\n \"sizeInMeters\",\n billboardData.sizeInMeters,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n billboard,\n \"width\",\n billboardData.width,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n billboard,\n \"height\",\n billboardData.height,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n billboard,\n \"scaleByDistance\",\n billboardData.scaleByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n billboard,\n \"translucencyByDistance\",\n billboardData.translucencyByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n billboard,\n \"pixelOffsetScaleByDistance\",\n billboardData.pixelOffsetScaleByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n BoundingRectangle,\n billboard,\n \"imageSubRegion\",\n billboardData.imageSubRegion,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n billboard,\n \"distanceDisplayCondition\",\n billboardData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n billboard,\n \"disableDepthTestDistance\",\n billboardData.disableDepthTestDistance,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processBox(entity, packet, entityCollection, sourceUri) {\n var boxData = packet.box;\n if (!defined(boxData)) {\n return;\n }\n\n var interval = intervalFromString(boxData.interval);\n var box = entity.box;\n if (!defined(box)) {\n entity.box = box = new BoxGraphics();\n }\n\n processPacketData(\n Boolean,\n box,\n \"show\",\n boxData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n box,\n \"dimensions\",\n boxData.dimensions,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n box,\n \"heightReference\",\n boxData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n box,\n \"fill\",\n boxData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n box,\n \"material\",\n boxData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n box,\n \"outline\",\n boxData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n box,\n \"outlineColor\",\n boxData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n box,\n \"outlineWidth\",\n boxData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n box,\n \"shadows\",\n boxData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n box,\n \"distanceDisplayCondition\",\n boxData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processCorridor(entity, packet, entityCollection, sourceUri) {\n var corridorData = packet.corridor;\n if (!defined(corridorData)) {\n return;\n }\n\n var interval = intervalFromString(corridorData.interval);\n var corridor = entity.corridor;\n if (!defined(corridor)) {\n entity.corridor = corridor = new CorridorGraphics();\n }\n\n processPacketData(\n Boolean,\n corridor,\n \"show\",\n corridorData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPositionArray(\n corridor,\n \"positions\",\n corridorData.positions,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"width\",\n corridorData.width,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"height\",\n corridorData.height,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n corridor,\n \"heightReference\",\n corridorData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"extrudedHeight\",\n corridorData.extrudedHeight,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n corridor,\n \"extrudedHeightReference\",\n corridorData.extrudedHeightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n CornerType,\n corridor,\n \"cornerType\",\n corridorData.cornerType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"granularity\",\n corridorData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n corridor,\n \"fill\",\n corridorData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n corridor,\n \"material\",\n corridorData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n corridor,\n \"outline\",\n corridorData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n corridor,\n \"outlineColor\",\n corridorData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"outlineWidth\",\n corridorData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n corridor,\n \"shadows\",\n corridorData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n corridor,\n \"distanceDisplayCondition\",\n corridorData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ClassificationType,\n corridor,\n \"classificationType\",\n corridorData.classificationType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n corridor,\n \"zIndex\",\n corridorData.zIndex,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processCylinder(entity, packet, entityCollection, sourceUri) {\n var cylinderData = packet.cylinder;\n if (!defined(cylinderData)) {\n return;\n }\n\n var interval = intervalFromString(cylinderData.interval);\n var cylinder = entity.cylinder;\n if (!defined(cylinder)) {\n entity.cylinder = cylinder = new CylinderGraphics();\n }\n\n processPacketData(\n Boolean,\n cylinder,\n \"show\",\n cylinderData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"length\",\n cylinderData.length,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"topRadius\",\n cylinderData.topRadius,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"bottomRadius\",\n cylinderData.bottomRadius,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n cylinder,\n \"heightReference\",\n cylinderData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n cylinder,\n \"fill\",\n cylinderData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n cylinder,\n \"material\",\n cylinderData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n cylinder,\n \"outline\",\n cylinderData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n cylinder,\n \"outlineColor\",\n cylinderData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"outlineWidth\",\n cylinderData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"numberOfVerticalLines\",\n cylinderData.numberOfVerticalLines,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n cylinder,\n \"slices\",\n cylinderData.slices,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n cylinder,\n \"shadows\",\n cylinderData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n cylinder,\n \"distanceDisplayCondition\",\n cylinderData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processDocument(packet, dataSource) {\n var version = packet.version;\n if (defined(version)) {\n if (typeof version === \"string\") {\n var tokens = version.split(\".\");\n if (tokens.length === 2) {\n if (tokens[0] !== \"1\") {\n throw new RuntimeError(\"Cesium only supports CZML version 1.\");\n }\n dataSource._version = version;\n }\n }\n }\n\n if (!defined(dataSource._version)) {\n throw new RuntimeError(\n \"CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.\"\n );\n }\n\n var documentPacket = dataSource._documentPacket;\n\n if (defined(packet.name)) {\n documentPacket.name = packet.name;\n }\n\n var clockPacket = packet.clock;\n if (defined(clockPacket)) {\n var clock = documentPacket.clock;\n if (!defined(clock)) {\n documentPacket.clock = {\n interval: clockPacket.interval,\n currentTime: clockPacket.currentTime,\n range: clockPacket.range,\n step: clockPacket.step,\n multiplier: clockPacket.multiplier,\n };\n } else {\n clock.interval = defaultValue(clockPacket.interval, clock.interval);\n clock.currentTime = defaultValue(\n clockPacket.currentTime,\n clock.currentTime\n );\n clock.range = defaultValue(clockPacket.range, clock.range);\n clock.step = defaultValue(clockPacket.step, clock.step);\n clock.multiplier = defaultValue(clockPacket.multiplier, clock.multiplier);\n }\n }\n}\n\nfunction processEllipse(entity, packet, entityCollection, sourceUri) {\n var ellipseData = packet.ellipse;\n if (!defined(ellipseData)) {\n return;\n }\n\n var interval = intervalFromString(ellipseData.interval);\n var ellipse = entity.ellipse;\n if (!defined(ellipse)) {\n entity.ellipse = ellipse = new EllipseGraphics();\n }\n\n processPacketData(\n Boolean,\n ellipse,\n \"show\",\n ellipseData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"semiMajorAxis\",\n ellipseData.semiMajorAxis,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"semiMinorAxis\",\n ellipseData.semiMinorAxis,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"height\",\n ellipseData.height,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n ellipse,\n \"heightReference\",\n ellipseData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"extrudedHeight\",\n ellipseData.extrudedHeight,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n ellipse,\n \"extrudedHeightReference\",\n ellipseData.extrudedHeightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n ellipse,\n \"rotation\",\n ellipseData.rotation,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n ellipse,\n \"stRotation\",\n ellipseData.stRotation,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"granularity\",\n ellipseData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n ellipse,\n \"fill\",\n ellipseData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n ellipse,\n \"material\",\n ellipseData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n ellipse,\n \"outline\",\n ellipseData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n ellipse,\n \"outlineColor\",\n ellipseData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"outlineWidth\",\n ellipseData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"numberOfVerticalLines\",\n ellipseData.numberOfVerticalLines,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n ellipse,\n \"shadows\",\n ellipseData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n ellipse,\n \"distanceDisplayCondition\",\n ellipseData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ClassificationType,\n ellipse,\n \"classificationType\",\n ellipseData.classificationType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipse,\n \"zIndex\",\n ellipseData.zIndex,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processEllipsoid(entity, packet, entityCollection, sourceUri) {\n var ellipsoidData = packet.ellipsoid;\n if (!defined(ellipsoidData)) {\n return;\n }\n\n var interval = intervalFromString(ellipsoidData.interval);\n var ellipsoid = entity.ellipsoid;\n if (!defined(ellipsoid)) {\n entity.ellipsoid = ellipsoid = new EllipsoidGraphics();\n }\n\n processPacketData(\n Boolean,\n ellipsoid,\n \"show\",\n ellipsoidData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n ellipsoid,\n \"radii\",\n ellipsoidData.radii,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n ellipsoid,\n \"innerRadii\",\n ellipsoidData.innerRadii,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"minimumClock\",\n ellipsoidData.minimumClock,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"maximumClock\",\n ellipsoidData.maximumClock,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"minimumCone\",\n ellipsoidData.minimumCone,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"maximumCone\",\n ellipsoidData.maximumCone,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n ellipsoid,\n \"heightReference\",\n ellipsoidData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n ellipsoid,\n \"fill\",\n ellipsoidData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n ellipsoid,\n \"material\",\n ellipsoidData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n ellipsoid,\n \"outline\",\n ellipsoidData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n ellipsoid,\n \"outlineColor\",\n ellipsoidData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"outlineWidth\",\n ellipsoidData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"stackPartitions\",\n ellipsoidData.stackPartitions,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"slicePartitions\",\n ellipsoidData.slicePartitions,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n ellipsoid,\n \"subdivisions\",\n ellipsoidData.subdivisions,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n ellipsoid,\n \"shadows\",\n ellipsoidData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n ellipsoid,\n \"distanceDisplayCondition\",\n ellipsoidData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processLabel(entity, packet, entityCollection, sourceUri) {\n var labelData = packet.label;\n if (!defined(labelData)) {\n return;\n }\n\n var interval = intervalFromString(labelData.interval);\n var label = entity.label;\n if (!defined(label)) {\n entity.label = label = new LabelGraphics();\n }\n\n processPacketData(\n Boolean,\n label,\n \"show\",\n labelData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n String,\n label,\n \"text\",\n labelData.text,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n String,\n label,\n \"font\",\n labelData.font,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n LabelStyle,\n label,\n \"style\",\n labelData.style,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n label,\n \"scale\",\n labelData.scale,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n label,\n \"showBackground\",\n labelData.showBackground,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n label,\n \"backgroundColor\",\n labelData.backgroundColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n label,\n \"backgroundPadding\",\n labelData.backgroundPadding,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian2,\n label,\n \"pixelOffset\",\n labelData.pixelOffset,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n label,\n \"eyeOffset\",\n labelData.eyeOffset,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HorizontalOrigin,\n label,\n \"horizontalOrigin\",\n labelData.horizontalOrigin,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n VerticalOrigin,\n label,\n \"verticalOrigin\",\n labelData.verticalOrigin,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n label,\n \"heightReference\",\n labelData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n label,\n \"fillColor\",\n labelData.fillColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n label,\n \"outlineColor\",\n labelData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n label,\n \"outlineWidth\",\n labelData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n label,\n \"translucencyByDistance\",\n labelData.translucencyByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n label,\n \"pixelOffsetScaleByDistance\",\n labelData.pixelOffsetScaleByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n label,\n \"scaleByDistance\",\n labelData.scaleByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n label,\n \"distanceDisplayCondition\",\n labelData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n label,\n \"disableDepthTestDistance\",\n labelData.disableDepthTestDistance,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processModel(entity, packet, entityCollection, sourceUri) {\n var modelData = packet.model;\n if (!defined(modelData)) {\n return;\n }\n\n var interval = intervalFromString(modelData.interval);\n var model = entity.model;\n if (!defined(model)) {\n entity.model = model = new ModelGraphics();\n }\n\n processPacketData(\n Boolean,\n model,\n \"show\",\n modelData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Uri,\n model,\n \"uri\",\n modelData.gltf,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n model,\n \"scale\",\n modelData.scale,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n model,\n \"minimumPixelSize\",\n modelData.minimumPixelSize,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n model,\n \"maximumScale\",\n modelData.maximumScale,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n model,\n \"incrementallyLoadTextures\",\n modelData.incrementallyLoadTextures,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n model,\n \"runAnimations\",\n modelData.runAnimations,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n model,\n \"clampAnimations\",\n modelData.clampAnimations,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n model,\n \"shadows\",\n modelData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n model,\n \"heightReference\",\n modelData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n model,\n \"silhouetteColor\",\n modelData.silhouetteColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n model,\n \"silhouetteSize\",\n modelData.silhouetteSize,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n model,\n \"color\",\n modelData.color,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ColorBlendMode,\n model,\n \"colorBlendMode\",\n modelData.colorBlendMode,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n model,\n \"colorBlendAmount\",\n modelData.colorBlendAmount,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n model,\n \"distanceDisplayCondition\",\n modelData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n\n var i, len;\n var nodeTransformationsData = modelData.nodeTransformations;\n if (defined(nodeTransformationsData)) {\n if (Array.isArray(nodeTransformationsData)) {\n for (i = 0, len = nodeTransformationsData.length; i < len; ++i) {\n processNodeTransformations(\n model,\n nodeTransformationsData[i],\n interval,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processNodeTransformations(\n model,\n nodeTransformationsData,\n interval,\n sourceUri,\n entityCollection\n );\n }\n }\n\n var articulationsData = modelData.articulations;\n if (defined(articulationsData)) {\n if (Array.isArray(articulationsData)) {\n for (i = 0, len = articulationsData.length; i < len; ++i) {\n processArticulations(\n model,\n articulationsData[i],\n interval,\n sourceUri,\n entityCollection\n );\n }\n } else {\n processArticulations(\n model,\n articulationsData,\n interval,\n sourceUri,\n entityCollection\n );\n }\n }\n}\n\nfunction processNodeTransformations(\n model,\n nodeTransformationsData,\n constrainedInterval,\n sourceUri,\n entityCollection\n) {\n var combinedInterval = intervalFromString(nodeTransformationsData.interval);\n if (defined(constrainedInterval)) {\n if (defined(combinedInterval)) {\n combinedInterval = TimeInterval.intersect(\n combinedInterval,\n constrainedInterval,\n scratchTimeInterval\n );\n } else {\n combinedInterval = constrainedInterval;\n }\n }\n\n var nodeTransformations = model.nodeTransformations;\n var nodeNames = Object.keys(nodeTransformationsData);\n for (var i = 0, len = nodeNames.length; i < len; ++i) {\n var nodeName = nodeNames[i];\n if (nodeName === \"interval\") {\n continue;\n }\n\n var nodeTransformationData = nodeTransformationsData[nodeName];\n if (!defined(nodeTransformationData)) {\n continue;\n }\n\n if (!defined(nodeTransformations)) {\n model.nodeTransformations = nodeTransformations = new PropertyBag();\n }\n\n if (!nodeTransformations.hasProperty(nodeName)) {\n nodeTransformations.addProperty(nodeName);\n }\n\n var nodeTransformation = nodeTransformations[nodeName];\n if (!defined(nodeTransformation)) {\n nodeTransformations[\n nodeName\n ] = nodeTransformation = new NodeTransformationProperty();\n }\n\n processPacketData(\n Cartesian3,\n nodeTransformation,\n \"translation\",\n nodeTransformationData.translation,\n combinedInterval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Quaternion,\n nodeTransformation,\n \"rotation\",\n nodeTransformationData.rotation,\n combinedInterval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Cartesian3,\n nodeTransformation,\n \"scale\",\n nodeTransformationData.scale,\n combinedInterval,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processArticulations(\n model,\n articulationsData,\n constrainedInterval,\n sourceUri,\n entityCollection\n) {\n var combinedInterval = intervalFromString(articulationsData.interval);\n if (defined(constrainedInterval)) {\n if (defined(combinedInterval)) {\n combinedInterval = TimeInterval.intersect(\n combinedInterval,\n constrainedInterval,\n scratchTimeInterval\n );\n } else {\n combinedInterval = constrainedInterval;\n }\n }\n\n var articulations = model.articulations;\n var keys = Object.keys(articulationsData);\n for (var i = 0, len = keys.length; i < len; ++i) {\n var key = keys[i];\n if (key === \"interval\") {\n continue;\n }\n\n var articulationStageData = articulationsData[key];\n if (!defined(articulationStageData)) {\n continue;\n }\n\n if (!defined(articulations)) {\n model.articulations = articulations = new PropertyBag();\n }\n\n if (!articulations.hasProperty(key)) {\n articulations.addProperty(key);\n }\n\n processPacketData(\n Number,\n articulations,\n key,\n articulationStageData,\n combinedInterval,\n sourceUri,\n entityCollection\n );\n }\n}\n\nfunction processPath(entity, packet, entityCollection, sourceUri) {\n var pathData = packet.path;\n if (!defined(pathData)) {\n return;\n }\n\n var interval = intervalFromString(pathData.interval);\n var path = entity.path;\n if (!defined(path)) {\n entity.path = path = new PathGraphics();\n }\n\n processPacketData(\n Boolean,\n path,\n \"show\",\n pathData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n path,\n \"leadTime\",\n pathData.leadTime,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n path,\n \"trailTime\",\n pathData.trailTime,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n path,\n \"width\",\n pathData.width,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n path,\n \"resolution\",\n pathData.resolution,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n path,\n \"material\",\n pathData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n path,\n \"distanceDisplayCondition\",\n pathData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processPoint(entity, packet, entityCollection, sourceUri) {\n var pointData = packet.point;\n if (!defined(pointData)) {\n return;\n }\n\n var interval = intervalFromString(pointData.interval);\n var point = entity.point;\n if (!defined(point)) {\n entity.point = point = new PointGraphics();\n }\n\n processPacketData(\n Boolean,\n point,\n \"show\",\n pointData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n point,\n \"pixelSize\",\n pointData.pixelSize,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n point,\n \"heightReference\",\n pointData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n point,\n \"color\",\n pointData.color,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n point,\n \"outlineColor\",\n pointData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n point,\n \"outlineWidth\",\n pointData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n point,\n \"scaleByDistance\",\n pointData.scaleByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n NearFarScalar,\n point,\n \"translucencyByDistance\",\n pointData.translucencyByDistance,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n point,\n \"distanceDisplayCondition\",\n pointData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n point,\n \"disableDepthTestDistance\",\n pointData.disableDepthTestDistance,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction PolygonHierarchyProperty(polygon) {\n this.polygon = polygon;\n this._definitionChanged = new Event();\n}\n\nObject.defineProperties(PolygonHierarchyProperty.prototype, {\n isConstant: {\n get: function () {\n var positions = this.polygon._positions;\n var holes = this.polygon._holes;\n return (\n (!defined(positions) || positions.isConstant) &&\n (!defined(holes) || holes.isConstant)\n );\n },\n },\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n});\n\nPolygonHierarchyProperty.prototype.getValue = function (time, result) {\n var positions;\n if (defined(this.polygon._positions)) {\n positions = this.polygon._positions.getValue(time);\n }\n\n var holes;\n if (defined(this.polygon._holes)) {\n holes = this.polygon._holes.getValue(time);\n if (defined(holes)) {\n holes = holes.map(function (holePositions) {\n return new PolygonHierarchy(holePositions);\n });\n }\n }\n\n if (!defined(result)) {\n return new PolygonHierarchy(positions, holes);\n }\n\n result.positions = positions;\n result.holes = holes;\n return result;\n};\n\nPolygonHierarchyProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof PolygonHierarchyProperty &&\n Property.equals(this.polygon._positions, other.polygon._positions) &&\n Property.equals(this.polygon._holes, other.polygon._holes))\n );\n};\n\nfunction processPolygon(entity, packet, entityCollection, sourceUri) {\n var polygonData = packet.polygon;\n if (!defined(polygonData)) {\n return;\n }\n\n var interval = intervalFromString(polygonData.interval);\n var polygon = entity.polygon;\n if (!defined(polygon)) {\n entity.polygon = polygon = new PolygonGraphics();\n }\n\n processPacketData(\n Boolean,\n polygon,\n \"show\",\n polygonData.show,\n interval,\n sourceUri,\n entityCollection\n );\n\n // adapt 'position' property producing Cartesian[]\n // and 'holes' property producing Cartesian[][]\n // to a single property producing PolygonHierarchy\n processPositionArray(\n polygon,\n \"_positions\",\n polygonData.positions,\n entityCollection\n );\n processPositionArrayOfArrays(\n polygon,\n \"_holes\",\n polygonData.holes,\n entityCollection\n );\n if (defined(polygon._positions) || defined(polygon._holes)) {\n polygon.hierarchy = new PolygonHierarchyProperty(polygon);\n }\n\n processPacketData(\n Number,\n polygon,\n \"height\",\n polygonData.height,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n polygon,\n \"heightReference\",\n polygonData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polygon,\n \"extrudedHeight\",\n polygonData.extrudedHeight,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n polygon,\n \"extrudedHeightReference\",\n polygonData.extrudedHeightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n polygon,\n \"stRotation\",\n polygonData.stRotation,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polygon,\n \"granularity\",\n polygonData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polygon,\n \"fill\",\n polygonData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n polygon,\n \"material\",\n polygonData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polygon,\n \"outline\",\n polygonData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n polygon,\n \"outlineColor\",\n polygonData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polygon,\n \"outlineWidth\",\n polygonData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polygon,\n \"perPositionHeight\",\n polygonData.perPositionHeight,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polygon,\n \"closeTop\",\n polygonData.closeTop,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polygon,\n \"closeBottom\",\n polygonData.closeBottom,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ArcType,\n polygon,\n \"arcType\",\n polygonData.arcType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n polygon,\n \"shadows\",\n polygonData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n polygon,\n \"distanceDisplayCondition\",\n polygonData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ClassificationType,\n polygon,\n \"classificationType\",\n polygonData.classificationType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polygon,\n \"zIndex\",\n polygonData.zIndex,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction adaptFollowSurfaceToArcType(followSurface) {\n return followSurface ? ArcType.GEODESIC : ArcType.NONE;\n}\n\nfunction processPolyline(entity, packet, entityCollection, sourceUri) {\n var polylineData = packet.polyline;\n if (!defined(polylineData)) {\n return;\n }\n\n var interval = intervalFromString(polylineData.interval);\n var polyline = entity.polyline;\n if (!defined(polyline)) {\n entity.polyline = polyline = new PolylineGraphics();\n }\n\n processPacketData(\n Boolean,\n polyline,\n \"show\",\n polylineData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPositionArray(\n polyline,\n \"positions\",\n polylineData.positions,\n entityCollection\n );\n processPacketData(\n Number,\n polyline,\n \"width\",\n polylineData.width,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polyline,\n \"granularity\",\n polylineData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n polyline,\n \"material\",\n polylineData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n polyline,\n \"depthFailMaterial\",\n polylineData.depthFailMaterial,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ArcType,\n polyline,\n \"arcType\",\n polylineData.arcType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polyline,\n \"clampToGround\",\n polylineData.clampToGround,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n polyline,\n \"shadows\",\n polylineData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n polyline,\n \"distanceDisplayCondition\",\n polylineData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ClassificationType,\n polyline,\n \"classificationType\",\n polylineData.classificationType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polyline,\n \"zIndex\",\n polylineData.zIndex,\n interval,\n sourceUri,\n entityCollection\n );\n\n // for backwards compatibility, adapt CZML followSurface to arcType.\n if (defined(polylineData.followSurface) && !defined(polylineData.arcType)) {\n var tempObj = {};\n processPacketData(\n Boolean,\n tempObj,\n \"followSurface\",\n polylineData.followSurface,\n interval,\n sourceUri,\n entityCollection\n );\n polyline.arcType = createAdapterProperty(\n tempObj.followSurface,\n adaptFollowSurfaceToArcType\n );\n }\n}\n\nfunction processPolylineVolume(entity, packet, entityCollection, sourceUri) {\n var polylineVolumeData = packet.polylineVolume;\n if (!defined(polylineVolumeData)) {\n return;\n }\n\n var interval = intervalFromString(polylineVolumeData.interval);\n var polylineVolume = entity.polylineVolume;\n if (!defined(polylineVolume)) {\n entity.polylineVolume = polylineVolume = new PolylineVolumeGraphics();\n }\n\n processPositionArray(\n polylineVolume,\n \"positions\",\n polylineVolumeData.positions,\n entityCollection\n );\n processShape(\n polylineVolume,\n \"shape\",\n polylineVolumeData.shape,\n entityCollection\n );\n processPacketData(\n Boolean,\n polylineVolume,\n \"show\",\n polylineVolumeData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n CornerType,\n polylineVolume,\n \"cornerType\",\n polylineVolumeData.cornerType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polylineVolume,\n \"fill\",\n polylineVolumeData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n polylineVolume,\n \"material\",\n polylineVolumeData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n polylineVolume,\n \"outline\",\n polylineVolumeData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n polylineVolume,\n \"outlineColor\",\n polylineVolumeData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polylineVolume,\n \"outlineWidth\",\n polylineVolumeData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n polylineVolume,\n \"granularity\",\n polylineVolumeData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n polylineVolume,\n \"shadows\",\n polylineVolumeData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n polylineVolume,\n \"distanceDisplayCondition\",\n polylineVolumeData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processRectangle(entity, packet, entityCollection, sourceUri) {\n var rectangleData = packet.rectangle;\n if (!defined(rectangleData)) {\n return;\n }\n\n var interval = intervalFromString(rectangleData.interval);\n var rectangle = entity.rectangle;\n if (!defined(rectangle)) {\n entity.rectangle = rectangle = new RectangleGraphics();\n }\n\n processPacketData(\n Boolean,\n rectangle,\n \"show\",\n rectangleData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rectangle,\n rectangle,\n \"coordinates\",\n rectangleData.coordinates,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n rectangle,\n \"height\",\n rectangleData.height,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n rectangle,\n \"heightReference\",\n rectangleData.heightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n rectangle,\n \"extrudedHeight\",\n rectangleData.extrudedHeight,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n HeightReference,\n rectangle,\n \"extrudedHeightReference\",\n rectangleData.extrudedHeightReference,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n rectangle,\n \"rotation\",\n rectangleData.rotation,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Rotation,\n rectangle,\n \"stRotation\",\n rectangleData.stRotation,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n rectangle,\n \"granularity\",\n rectangleData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n rectangle,\n \"fill\",\n rectangleData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n rectangle,\n \"material\",\n rectangleData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n rectangle,\n \"outline\",\n rectangleData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n rectangle,\n \"outlineColor\",\n rectangleData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n rectangle,\n \"outlineWidth\",\n rectangleData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n rectangle,\n \"shadows\",\n rectangleData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n rectangle,\n \"distanceDisplayCondition\",\n rectangleData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ClassificationType,\n rectangle,\n \"classificationType\",\n rectangleData.classificationType,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n rectangle,\n \"zIndex\",\n rectangleData.zIndex,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processTileset(entity, packet, entityCollection, sourceUri) {\n var tilesetData = packet.tileset;\n if (!defined(tilesetData)) {\n return;\n }\n\n var interval = intervalFromString(tilesetData.interval);\n var tileset = entity.tileset;\n if (!defined(tileset)) {\n entity.tileset = tileset = new Cesium3DTilesetGraphics();\n }\n\n processPacketData(\n Boolean,\n tileset,\n \"show\",\n tilesetData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Uri,\n tileset,\n \"uri\",\n tilesetData.uri,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n tileset,\n \"maximumScreenSpaceError\",\n tilesetData.maximumScreenSpaceError,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processWall(entity, packet, entityCollection, sourceUri) {\n var wallData = packet.wall;\n if (!defined(wallData)) {\n return;\n }\n\n var interval = intervalFromString(wallData.interval);\n var wall = entity.wall;\n if (!defined(wall)) {\n entity.wall = wall = new WallGraphics();\n }\n\n processPacketData(\n Boolean,\n wall,\n \"show\",\n wallData.show,\n interval,\n sourceUri,\n entityCollection\n );\n processPositionArray(wall, \"positions\", wallData.positions, entityCollection);\n processArray(\n wall,\n \"minimumHeights\",\n wallData.minimumHeights,\n entityCollection\n );\n processArray(\n wall,\n \"maximumHeights\",\n wallData.maximumHeights,\n entityCollection\n );\n processPacketData(\n Number,\n wall,\n \"granularity\",\n wallData.granularity,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n wall,\n \"fill\",\n wallData.fill,\n interval,\n sourceUri,\n entityCollection\n );\n processMaterialPacketData(\n wall,\n \"material\",\n wallData.material,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Boolean,\n wall,\n \"outline\",\n wallData.outline,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Color,\n wall,\n \"outlineColor\",\n wallData.outlineColor,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n Number,\n wall,\n \"outlineWidth\",\n wallData.outlineWidth,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n ShadowMode,\n wall,\n \"shadows\",\n wallData.shadows,\n interval,\n sourceUri,\n entityCollection\n );\n processPacketData(\n DistanceDisplayCondition,\n wall,\n \"distanceDisplayCondition\",\n wallData.distanceDisplayCondition,\n interval,\n sourceUri,\n entityCollection\n );\n}\n\nfunction processCzmlPacket(\n packet,\n entityCollection,\n updaterFunctions,\n sourceUri,\n dataSource\n) {\n var objectId = packet.id;\n if (!defined(objectId)) {\n objectId = createGuid();\n }\n\n currentId = objectId;\n\n if (!defined(dataSource._version) && objectId !== \"document\") {\n throw new RuntimeError(\n \"The first CZML packet is required to be the document object.\"\n );\n }\n\n if (packet[\"delete\"] === true) {\n entityCollection.removeById(objectId);\n } else if (objectId === \"document\") {\n processDocument(packet, dataSource);\n } else {\n var entity = entityCollection.getOrCreateEntity(objectId);\n\n var parentId = packet.parent;\n if (defined(parentId)) {\n entity.parent = entityCollection.getOrCreateEntity(parentId);\n }\n\n for (var i = updaterFunctions.length - 1; i > -1; i--) {\n updaterFunctions[i](entity, packet, entityCollection, sourceUri);\n }\n }\n\n currentId = undefined;\n}\n\nfunction updateClock(dataSource) {\n var clock;\n var clockPacket = dataSource._documentPacket.clock;\n if (!defined(clockPacket)) {\n if (!defined(dataSource._clock)) {\n var availability = dataSource._entityCollection.computeAvailability();\n if (!availability.start.equals(Iso8601.MINIMUM_VALUE)) {\n var startTime = availability.start;\n var stopTime = availability.stop;\n var totalSeconds = JulianDate.secondsDifference(stopTime, startTime);\n var multiplier = Math.round(totalSeconds / 120.0);\n\n clock = new DataSourceClock();\n clock.startTime = JulianDate.clone(startTime);\n clock.stopTime = JulianDate.clone(stopTime);\n clock.clockRange = ClockRange.LOOP_STOP;\n clock.multiplier = multiplier;\n clock.currentTime = JulianDate.clone(startTime);\n clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n dataSource._clock = clock;\n return true;\n }\n }\n return false;\n }\n\n if (defined(dataSource._clock)) {\n clock = dataSource._clock.clone();\n } else {\n clock = new DataSourceClock();\n clock.startTime = Iso8601.MINIMUM_VALUE.clone();\n clock.stopTime = Iso8601.MAXIMUM_VALUE.clone();\n clock.currentTime = Iso8601.MINIMUM_VALUE.clone();\n clock.clockRange = ClockRange.LOOP_STOP;\n clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n clock.multiplier = 1.0;\n }\n\n var interval = intervalFromString(clockPacket.interval);\n if (defined(interval)) {\n clock.startTime = interval.start;\n clock.stopTime = interval.stop;\n }\n\n if (defined(clockPacket.currentTime)) {\n clock.currentTime = JulianDate.fromIso8601(clockPacket.currentTime);\n }\n if (defined(clockPacket.range)) {\n clock.clockRange = defaultValue(\n ClockRange[clockPacket.range],\n ClockRange.LOOP_STOP\n );\n }\n if (defined(clockPacket.step)) {\n clock.clockStep = defaultValue(\n ClockStep[clockPacket.step],\n ClockStep.SYSTEM_CLOCK_MULTIPLIER\n );\n }\n if (defined(clockPacket.multiplier)) {\n clock.multiplier = clockPacket.multiplier;\n }\n\n if (!clock.equals(dataSource._clock)) {\n dataSource._clock = clock.clone(dataSource._clock);\n return true;\n }\n\n return false;\n}\n\nfunction load(dataSource, czml, options, clear) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(czml)) {\n throw new DeveloperError(\"czml is required.\");\n }\n //>>includeEnd('debug');\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var promise = czml;\n var sourceUri = options.sourceUri;\n\n // User specified credit\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n dataSource._credit = credit;\n\n // If the czml is a URL\n if (typeof czml === \"string\" || czml instanceof Resource) {\n czml = Resource.createIfNeeded(czml);\n promise = czml.fetchJson();\n sourceUri = defaultValue(sourceUri, czml.clone());\n\n // Add resource credits to our list of credits to display\n var resourceCredits = dataSource._resourceCredits;\n var credits = czml.credits;\n if (defined(credits)) {\n var length = credits.length;\n for (var i = 0; i < length; i++) {\n resourceCredits.push(credits[i]);\n }\n }\n }\n\n sourceUri = Resource.createIfNeeded(sourceUri);\n\n DataSource.setLoading(dataSource, true);\n\n return when(promise, function (czml) {\n return loadCzml(dataSource, czml, sourceUri, clear);\n }).otherwise(function (error) {\n DataSource.setLoading(dataSource, false);\n dataSource._error.raiseEvent(dataSource, error);\n console.log(error);\n return when.reject(error);\n });\n}\n\nfunction loadCzml(dataSource, czml, sourceUri, clear) {\n DataSource.setLoading(dataSource, true);\n var entityCollection = dataSource._entityCollection;\n\n if (clear) {\n dataSource._version = undefined;\n dataSource._documentPacket = new DocumentPacket();\n entityCollection.removeAll();\n }\n\n CzmlDataSource._processCzml(\n czml,\n entityCollection,\n sourceUri,\n undefined,\n dataSource\n );\n\n var raiseChangedEvent = updateClock(dataSource);\n\n var documentPacket = dataSource._documentPacket;\n if (\n defined(documentPacket.name) &&\n dataSource._name !== documentPacket.name\n ) {\n dataSource._name = documentPacket.name;\n raiseChangedEvent = true;\n } else if (!defined(dataSource._name) && defined(sourceUri)) {\n dataSource._name = getFilenameFromUri(sourceUri.getUrlComponent());\n raiseChangedEvent = true;\n }\n\n DataSource.setLoading(dataSource, false);\n if (raiseChangedEvent) {\n dataSource._changed.raiseEvent(dataSource);\n }\n\n return dataSource;\n}\n\nfunction DocumentPacket() {\n this.name = undefined;\n this.clock = undefined;\n}\n\n/**\n * @typedef {Object} CzmlDataSource.LoadOptions\n *\n * Initialization options for the `load` method.\n *\n * @property {Resource|string} [sourceUri] Overrides the url to use for resolving relative links.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * A {@link DataSource} which processes {@link https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/CZML-Guide|CZML}.\n * @alias CzmlDataSource\n * @constructor\n *\n * @param {String} [name] An optional name for the data source. This value will be overwritten if a loaded document contains a name.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=CZML.html|Cesium Sandcastle CZML Demo}\n */\nfunction CzmlDataSource(name) {\n this._name = name;\n this._changed = new Event();\n this._error = new Event();\n this._isLoading = false;\n this._loading = new Event();\n this._clock = undefined;\n this._documentPacket = new DocumentPacket();\n this._version = undefined;\n this._entityCollection = new EntityCollection(this);\n this._entityCluster = new EntityCluster();\n this._credit = undefined;\n this._resourceCredits = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided CZML data.\n *\n * @param {Resource|String|Object} czml A url or CZML object to be processed.\n * @param {CzmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise.<CzmlDataSource>} A promise that resolves to the new instance once the data is processed.\n */\nCzmlDataSource.load = function (czml, options) {\n return new CzmlDataSource().load(czml, options);\n};\n\nObject.defineProperties(CzmlDataSource.prototype, {\n /**\n * Gets a human-readable name for this instance.\n * @memberof CzmlDataSource.prototype\n * @type {String}\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n /**\n * Gets the clock settings defined by the loaded CZML. If no clock is explicitly\n * defined in the CZML, the combined availability of all objects is returned. If\n * only static data exists, this value is undefined.\n * @memberof CzmlDataSource.prototype\n * @type {DataSourceClock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n },\n /**\n * Gets the collection of {@link Entity} instances.\n * @memberof CzmlDataSource.prototype\n * @type {EntityCollection}\n */\n entities: {\n get: function () {\n return this._entityCollection;\n },\n },\n /**\n * Gets a value indicating if the data source is currently loading data.\n * @memberof CzmlDataSource.prototype\n * @type {Boolean}\n */\n isLoading: {\n get: function () {\n return this._isLoading;\n },\n },\n /**\n * Gets an event that will be raised when the underlying data changes.\n * @memberof CzmlDataSource.prototype\n * @type {Event}\n */\n changedEvent: {\n get: function () {\n return this._changed;\n },\n },\n /**\n * Gets an event that will be raised if an error is encountered during processing.\n * @memberof CzmlDataSource.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._error;\n },\n },\n /**\n * Gets an event that will be raised when the data source either starts or stops loading.\n * @memberof CzmlDataSource.prototype\n * @type {Event}\n */\n loadingEvent: {\n get: function () {\n return this._loading;\n },\n },\n /**\n * Gets whether or not this data source should be displayed.\n * @memberof CzmlDataSource.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._entityCollection.show;\n },\n set: function (value) {\n this._entityCollection.show = value;\n },\n },\n\n /**\n * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n *\n * @memberof CzmlDataSource.prototype\n * @type {EntityCluster}\n */\n clustering: {\n get: function () {\n return this._entityCluster;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value must be defined.\");\n }\n //>>includeEnd('debug');\n this._entityCluster = value;\n },\n },\n /**\n * Gets the credit that will be displayed for the data source\n * @memberof CzmlDataSource.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n});\n\n/**\n * Gets the array of CZML processing functions.\n * @memberof CzmlDataSource\n * @type Array\n */\nCzmlDataSource.updaters = [\n processBillboard, //\n processBox, //\n processCorridor, //\n processCylinder, //\n processEllipse, //\n processEllipsoid, //\n processLabel, //\n processModel, //\n processName, //\n processDescription, //\n processPath, //\n processPoint, //\n processPolygon, //\n processPolyline, //\n processPolylineVolume, //\n processProperties, //\n processRectangle, //\n processPosition, //\n processTileset, //\n processViewFrom, //\n processWall, //\n processOrientation, //\n processAvailability,\n];\n\n/**\n * Processes the provided url or CZML object without clearing any existing data.\n *\n * @param {Resource|String|Object} czml A url or CZML object to be processed.\n * @param {Object} [options] An object with the following properties:\n * @param {String} [options.sourceUri] Overrides the url to use for resolving relative links.\n * @returns {Promise.<CzmlDataSource>} A promise that resolves to this instances once the data is processed.\n */\nCzmlDataSource.prototype.process = function (czml, options) {\n return load(this, czml, options, false);\n};\n\n/**\n * Loads the provided url or CZML object, replacing any existing data.\n *\n * @param {Resource|String|Object} czml A url or CZML object to be processed.\n * @param {CzmlDataSource.LoadOptions} [options] An object specifying configuration options\n\n * @returns {Promise.<CzmlDataSource>} A promise that resolves to this instances once the data is processed.\n */\nCzmlDataSource.prototype.load = function (czml, options) {\n return load(this, czml, options, true);\n};\n\n/**\n * Updates the data source to the provided time. This function is optional and\n * is not required to be implemented. It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nCzmlDataSource.prototype.update = function (time) {\n return true;\n};\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link Property} from a CZML packet.\n * @function\n *\n * @param {Function} type The constructor function for the property being processed.\n * @param {Object} object The object on which the property will be added or updated.\n * @param {String} propertyName The name of the property on the object.\n * @param {Object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {String} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processPacketData = processPacketData;\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link PositionProperty} from a CZML packet.\n * @function\n *\n * @param {Object} object The object on which the property will be added or updated.\n * @param {String} propertyName The name of the property on the object.\n * @param {Object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {String} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processPositionPacketData = processPositionPacketData;\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link MaterialProperty} from a CZML packet.\n * @function\n *\n * @param {Object} object The object on which the property will be added or updated.\n * @param {String} propertyName The name of the property on the object.\n * @param {Object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {String} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processMaterialPacketData = processMaterialPacketData;\n\nCzmlDataSource._processCzml = function (\n czml,\n entityCollection,\n sourceUri,\n updaterFunctions,\n dataSource\n) {\n updaterFunctions = defaultValue(updaterFunctions, CzmlDataSource.updaters);\n\n if (Array.isArray(czml)) {\n for (var i = 0, len = czml.length; i < len; ++i) {\n processCzmlPacket(\n czml[i],\n entityCollection,\n updaterFunctions,\n sourceUri,\n dataSource\n );\n }\n } else {\n processCzmlPacket(\n czml,\n entityCollection,\n updaterFunctions,\n sourceUri,\n dataSource\n );\n }\n};\nexport default CzmlDataSource;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * A collection of {@link DataSource} instances.\n * @alias DataSourceCollection\n * @constructor\n */\nfunction DataSourceCollection() {\n this._dataSources = [];\n this._dataSourceAdded = new Event();\n this._dataSourceRemoved = new Event();\n this._dataSourceMoved = new Event();\n}\n\nObject.defineProperties(DataSourceCollection.prototype, {\n /**\n * Gets the number of data sources in this collection.\n * @memberof DataSourceCollection.prototype\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._dataSources.length;\n },\n },\n\n /**\n * An event that is raised when a data source is added to the collection.\n * Event handlers are passed the data source that was added.\n * @memberof DataSourceCollection.prototype\n * @type {Event}\n * @readonly\n */\n dataSourceAdded: {\n get: function () {\n return this._dataSourceAdded;\n },\n },\n\n /**\n * An event that is raised when a data source is removed from the collection.\n * Event handlers are passed the data source that was removed.\n * @memberof DataSourceCollection.prototype\n * @type {Event}\n * @readonly\n */\n dataSourceRemoved: {\n get: function () {\n return this._dataSourceRemoved;\n },\n },\n\n /**\n * An event that is raised when a data source changes position in the collection. Event handlers are passed the data source\n * that was moved, its new index after the move, and its old index prior to the move.\n * @memberof DataSourceCollection.prototype\n * @type {Event}\n * @readonly\n */\n dataSourceMoved: {\n get: function () {\n return this._dataSourceMoved;\n },\n },\n});\n\n/**\n * Adds a data source to the collection.\n *\n * @param {DataSource|Promise.<DataSource>} dataSource A data source or a promise to a data source to add to the collection.\n * When passing a promise, the data source will not actually be added\n * to the collection until the promise resolves successfully.\n * @returns {Promise.<DataSource>} A Promise that resolves once the data source has been added to the collection.\n */\nDataSourceCollection.prototype.add = function (dataSource) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(dataSource)) {\n throw new DeveloperError(\"dataSource is required.\");\n }\n //>>includeEnd('debug');\n\n var that = this;\n var dataSources = this._dataSources;\n return when(dataSource, function (value) {\n //Only add the data source if removeAll has not been called\n //Since it was added.\n if (dataSources === that._dataSources) {\n that._dataSources.push(value);\n that._dataSourceAdded.raiseEvent(that, value);\n }\n return value;\n });\n};\n\n/**\n * Removes a data source from this collection, if present.\n *\n * @param {DataSource} dataSource The data source to remove.\n * @param {Boolean} [destroy=false] Whether to destroy the data source in addition to removing it.\n * @returns {Boolean} true if the data source was in the collection and was removed,\n * false if the data source was not in the collection.\n */\nDataSourceCollection.prototype.remove = function (dataSource, destroy) {\n destroy = defaultValue(destroy, false);\n\n var index = this._dataSources.indexOf(dataSource);\n if (index !== -1) {\n this._dataSources.splice(index, 1);\n this._dataSourceRemoved.raiseEvent(this, dataSource);\n\n if (destroy && typeof dataSource.destroy === \"function\") {\n dataSource.destroy();\n }\n\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all data sources from this collection.\n *\n * @param {Boolean} [destroy=false] whether to destroy the data sources in addition to removing them.\n */\nDataSourceCollection.prototype.removeAll = function (destroy) {\n destroy = defaultValue(destroy, false);\n\n var dataSources = this._dataSources;\n for (var i = 0, len = dataSources.length; i < len; ++i) {\n var dataSource = dataSources[i];\n this._dataSourceRemoved.raiseEvent(this, dataSource);\n\n if (destroy && typeof dataSource.destroy === \"function\") {\n dataSource.destroy();\n }\n }\n this._dataSources = [];\n};\n\n/**\n * Checks to see if the collection contains a given data source.\n *\n * @param {DataSource} dataSource The data source to check for.\n * @returns {Boolean} true if the collection contains the data source, false otherwise.\n */\nDataSourceCollection.prototype.contains = function (dataSource) {\n return this.indexOf(dataSource) !== -1;\n};\n\n/**\n * Determines the index of a given data source in the collection.\n *\n * @param {DataSource} dataSource The data source to find the index of.\n * @returns {Number} The index of the data source in the collection, or -1 if the data source does not exist in the collection.\n */\nDataSourceCollection.prototype.indexOf = function (dataSource) {\n return this._dataSources.indexOf(dataSource);\n};\n\n/**\n * Gets a data source by index from the collection.\n *\n * @param {Number} index the index to retrieve.\n * @returns {DataSource} The data source at the specified index.\n */\nDataSourceCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._dataSources[index];\n};\n\n/**\n * Gets a data source by name from the collection.\n *\n * @param {String} name The name to retrieve.\n * @returns {DataSource[]} A list of all data sources matching the provided name.\n */\nDataSourceCollection.prototype.getByName = function (name) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(name)) {\n throw new DeveloperError(\"name is required.\");\n }\n //>>includeEnd('debug');\n\n return this._dataSources.filter(function (dataSource) {\n return dataSource.name === name;\n });\n};\n\nfunction getIndex(dataSources, dataSource) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(dataSource)) {\n throw new DeveloperError(\"dataSource is required.\");\n }\n //>>includeEnd('debug');\n\n var index = dataSources.indexOf(dataSource);\n\n //>>includeStart('debug', pragmas.debug);\n if (index === -1) {\n throw new DeveloperError(\"dataSource is not in this collection.\");\n }\n //>>includeEnd('debug');\n\n return index;\n}\n\nfunction swapDataSources(collection, i, j) {\n var arr = collection._dataSources;\n var length = arr.length - 1;\n i = CesiumMath.clamp(i, 0, length);\n j = CesiumMath.clamp(j, 0, length);\n\n if (i === j) {\n return;\n }\n\n var temp = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n\n collection.dataSourceMoved.raiseEvent(temp, j, i);\n}\n\n/**\n * Raises a data source up one position in the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.raise = function (dataSource) {\n var index = getIndex(this._dataSources, dataSource);\n swapDataSources(this, index, index + 1);\n};\n\n/**\n * Lowers a data source down one position in the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.lower = function (dataSource) {\n var index = getIndex(this._dataSources, dataSource);\n swapDataSources(this, index, index - 1);\n};\n\n/**\n * Raises a data source to the top of the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.raiseToTop = function (dataSource) {\n var index = getIndex(this._dataSources, dataSource);\n if (index === this._dataSources.length - 1) {\n return;\n }\n this._dataSources.splice(index, 1);\n this._dataSources.push(dataSource);\n\n this.dataSourceMoved.raiseEvent(\n dataSource,\n this._dataSources.length - 1,\n index\n );\n};\n\n/**\n * Lowers a data source to the bottom of the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.lowerToBottom = function (dataSource) {\n var index = getIndex(this._dataSources, dataSource);\n if (index === 0) {\n return;\n }\n this._dataSources.splice(index, 1);\n this._dataSources.splice(0, 0, dataSource);\n\n this.dataSourceMoved.raiseEvent(dataSource, 0, index);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} true if this object was destroyed; otherwise, false.\n *\n * @see DataSourceCollection#destroy\n */\nDataSourceCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the resources held by all data sources in this collection. Explicitly destroying this\n * object allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector. Once this object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * dataSourceCollection = dataSourceCollection && dataSourceCollection.destroy();\n *\n * @see DataSourceCollection#isDestroyed\n */\nDataSourceCollection.prototype.destroy = function () {\n this.removeAll(true);\n return destroyObject(this);\n};\nexport default DataSourceCollection;\n","import createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A collection of primitives. This is most often used with {@link Scene#primitives},\n * but <code>PrimitiveCollection</code> is also a primitive itself so collections can\n * be added to collections forming a hierarchy.\n *\n * @alias PrimitiveCollection\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.show=true] Determines if the primitives in the collection will be shown.\n * @param {Boolean} [options.destroyPrimitives=true] Determines if primitives in the collection are destroyed when they are removed.\n *\n * @example\n * var billboards = new Cesium.BillboardCollection();\n * var labels = new Cesium.LabelCollection();\n *\n * var collection = new Cesium.PrimitiveCollection();\n * collection.add(billboards);\n *\n * scene.primitives.add(collection); // Add collection\n * scene.primitives.add(labels); // Add regular primitive\n */\nfunction PrimitiveCollection(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._primitives = [];\n this._guid = createGuid();\n\n // Used by the OrderedGroundPrimitiveCollection\n this._zIndex = undefined;\n\n /**\n * Determines if primitives in this collection will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * Determines if primitives in the collection are destroyed when they are removed by\n * {@link PrimitiveCollection#destroy} or {@link PrimitiveCollection#remove} or implicitly\n * by {@link PrimitiveCollection#removeAll}.\n *\n * @type {Boolean}\n * @default true\n *\n * @example\n * // Example 1. Primitives are destroyed by default.\n * var primitives = new Cesium.PrimitiveCollection();\n * var labels = primitives.add(new Cesium.LabelCollection());\n * primitives = primitives.destroy();\n * var b = labels.isDestroyed(); // true\n *\n * @example\n * // Example 2. Do not destroy primitives in a collection.\n * var primitives = new Cesium.PrimitiveCollection();\n * primitives.destroyPrimitives = false;\n * var labels = primitives.add(new Cesium.LabelCollection());\n * primitives = primitives.destroy();\n * var b = labels.isDestroyed(); // false\n * labels = labels.destroy(); // explicitly destroy\n */\n this.destroyPrimitives = defaultValue(options.destroyPrimitives, true);\n}\n\nObject.defineProperties(PrimitiveCollection.prototype, {\n /**\n * Gets the number of primitives in the collection.\n *\n * @memberof PrimitiveCollection.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._primitives.length;\n },\n },\n});\n\n/**\n * Adds a primitive to the collection.\n *\n * @param {Object} primitive The primitive to add.\n * @param {Number} [index] the index to add the layer at. If omitted, the primitive will\n * added at the bottom of all existing primitives.\n * @returns {Object} The primitive added to the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * var billboards = scene.primitives.add(new Cesium.BillboardCollection());\n */\nPrimitiveCollection.prototype.add = function (primitive, index) {\n var hasIndex = defined(index);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(primitive)) {\n throw new DeveloperError(\"primitive is required.\");\n }\n if (hasIndex) {\n if (index < 0) {\n throw new DeveloperError(\"index must be greater than or equal to zero.\");\n } else if (index > this._primitives.length) {\n throw new DeveloperError(\n \"index must be less than or equal to the number of primitives.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n var external = (primitive._external = primitive._external || {});\n var composites = (external._composites = external._composites || {});\n composites[this._guid] = {\n collection: this,\n };\n\n if (!hasIndex) {\n this._primitives.push(primitive);\n } else {\n this._primitives.splice(index, 0, primitive);\n }\n\n return primitive;\n};\n\n/**\n * Removes a primitive from the collection.\n *\n * @param {Object} [primitive] The primitive to remove.\n * @returns {Boolean} <code>true</code> if the primitive was removed; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * var billboards = scene.primitives.add(new Cesium.BillboardCollection());\n * scene.primitives.remove(billboards); // Returns true\n *\n * @see PrimitiveCollection#destroyPrimitives\n */\nPrimitiveCollection.prototype.remove = function (primitive) {\n // PERFORMANCE_IDEA: We can obviously make this a lot faster.\n if (this.contains(primitive)) {\n var index = this._primitives.indexOf(primitive);\n if (index !== -1) {\n this._primitives.splice(index, 1);\n\n delete primitive._external._composites[this._guid];\n\n if (this.destroyPrimitives) {\n primitive.destroy();\n }\n\n return true;\n }\n // else ... this is not possible, I swear.\n }\n\n return false;\n};\n\n/**\n * Removes and destroys a primitive, regardless of destroyPrimitives setting.\n * @private\n */\nPrimitiveCollection.prototype.removeAndDestroy = function (primitive) {\n var removed = this.remove(primitive);\n if (removed && !this.destroyPrimitives) {\n primitive.destroy();\n }\n return removed;\n};\n\n/**\n * Removes all primitives in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#destroyPrimitives\n */\nPrimitiveCollection.prototype.removeAll = function () {\n var primitives = this._primitives;\n var length = primitives.length;\n for (var i = 0; i < length; ++i) {\n delete primitives[i]._external._composites[this._guid];\n if (this.destroyPrimitives) {\n primitives[i].destroy();\n }\n }\n this._primitives = [];\n};\n\n/**\n * Determines if this collection contains a primitive.\n *\n * @param {Object} [primitive] The primitive to check for.\n * @returns {Boolean} <code>true</code> if the primitive is in the collection; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#get\n */\nPrimitiveCollection.prototype.contains = function (primitive) {\n return !!(\n defined(primitive) &&\n primitive._external &&\n primitive._external._composites &&\n primitive._external._composites[this._guid]\n );\n};\n\nfunction getPrimitiveIndex(compositePrimitive, primitive) {\n //>>includeStart('debug', pragmas.debug);\n if (!compositePrimitive.contains(primitive)) {\n throw new DeveloperError(\"primitive is not in this collection.\");\n }\n //>>includeEnd('debug');\n\n return compositePrimitive._primitives.indexOf(primitive);\n}\n\n/**\n * Raises a primitive \"up one\" in the collection. If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive up one.\n *\n * @param {Object} [primitive] The primitive to raise.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#raiseToTop\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#lowerToBottom\n */\nPrimitiveCollection.prototype.raise = function (primitive) {\n if (defined(primitive)) {\n var index = getPrimitiveIndex(this, primitive);\n var primitives = this._primitives;\n\n if (index !== primitives.length - 1) {\n var p = primitives[index];\n primitives[index] = primitives[index + 1];\n primitives[index + 1] = p;\n }\n }\n};\n\n/**\n * Raises a primitive to the \"top\" of the collection. If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive to the top.\n *\n * @param {Object} [primitive] The primitive to raise the top.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#lowerToBottom\n */\nPrimitiveCollection.prototype.raiseToTop = function (primitive) {\n if (defined(primitive)) {\n var index = getPrimitiveIndex(this, primitive);\n var primitives = this._primitives;\n\n if (index !== primitives.length - 1) {\n // PERFORMANCE_IDEA: Could be faster\n primitives.splice(index, 1);\n primitives.push(primitive);\n }\n }\n};\n\n/**\n * Lowers a primitive \"down one\" in the collection. If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive down one.\n *\n * @param {Object} [primitive] The primitive to lower.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#lowerToBottom\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#raiseToTop\n */\nPrimitiveCollection.prototype.lower = function (primitive) {\n if (defined(primitive)) {\n var index = getPrimitiveIndex(this, primitive);\n var primitives = this._primitives;\n\n if (index !== 0) {\n var p = primitives[index];\n primitives[index] = primitives[index - 1];\n primitives[index - 1] = p;\n }\n }\n};\n\n/**\n * Lowers a primitive to the \"bottom\" of the collection. If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive to the bottom.\n *\n * @param {Object} [primitive] The primitive to lower to the bottom.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#raiseToTop\n */\nPrimitiveCollection.prototype.lowerToBottom = function (primitive) {\n if (defined(primitive)) {\n var index = getPrimitiveIndex(this, primitive);\n var primitives = this._primitives;\n\n if (index !== 0) {\n // PERFORMANCE_IDEA: Could be faster\n primitives.splice(index, 1);\n primitives.unshift(primitive);\n }\n }\n};\n\n/**\n * Returns the primitive in the collection at the specified index.\n *\n * @param {Number} index The zero-based index of the primitive to return.\n * @returns {Object} The primitive at the <code>index</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every primitive in the collection.\n * var primitives = scene.primitives;\n * var length = primitives.length;\n * for (var i = 0; i < length; ++i) {\n * var p = primitives.get(i);\n * p.show = !p.show;\n * }\n *\n * @see PrimitiveCollection#length\n */\nPrimitiveCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._primitives[index];\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n var primitives = this._primitives;\n // Using primitives.length in the loop is a temporary workaround\n // to allow quadtree updates to add and remove primitives in\n // update(). This will be changed to manage added and removed lists.\n for (var i = 0; i < primitives.length; ++i) {\n primitives[i].update(frameState);\n }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.prePassesUpdate = function (frameState) {\n var primitives = this._primitives;\n // Using primitives.length in the loop is a temporary workaround\n // to allow quadtree updates to add and remove primitives in\n // update(). This will be changed to manage added and removed lists.\n for (var i = 0; i < primitives.length; ++i) {\n var primitive = primitives[i];\n if (defined(primitive.prePassesUpdate)) {\n primitive.prePassesUpdate(frameState);\n }\n }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.updateForPass = function (frameState, passState) {\n var primitives = this._primitives;\n // Using primitives.length in the loop is a temporary workaround\n // to allow quadtree updates to add and remove primitives in\n // update(). This will be changed to manage added and removed lists.\n for (var i = 0; i < primitives.length; ++i) {\n var primitive = primitives[i];\n if (defined(primitive.updateForPass)) {\n primitive.updateForPass(frameState, passState);\n }\n }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.postPassesUpdate = function (frameState) {\n var primitives = this._primitives;\n // Using primitives.length in the loop is a temporary workaround\n // to allow quadtree updates to add and remove primitives in\n // update(). This will be changed to manage added and removed lists.\n for (var i = 0; i < primitives.length; ++i) {\n var primitive = primitives[i];\n if (defined(primitive.postPassesUpdate)) {\n primitive.postPassesUpdate(frameState);\n }\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see PrimitiveCollection#destroy\n */\nPrimitiveCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by each primitive in this collection. Explicitly destroying this\n * collection allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector to destroy this collection.\n * <br /><br />\n * Since destroying a collection destroys all the contained primitives, only destroy a collection\n * when you are sure no other code is still using any of the contained primitives.\n * <br /><br />\n * Once this collection is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitives = primitives && primitives.destroy();\n *\n * @see PrimitiveCollection#isDestroyed\n */\nPrimitiveCollection.prototype.destroy = function () {\n this.removeAll();\n return destroyObject(this);\n};\nexport default PrimitiveCollection;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\n\n/**\n * A primitive collection for helping maintain the order or ground primitives based on a z-index\n *\n * @private\n */\nfunction OrderedGroundPrimitiveCollection() {\n this._length = 0;\n this._collections = {};\n this._collectionsArray = [];\n\n this.show = true;\n}\n\nObject.defineProperties(OrderedGroundPrimitiveCollection.prototype, {\n /**\n * Gets the number of primitives in the collection.\n *\n * @memberof OrderedGroundPrimitiveCollection.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._length;\n },\n },\n});\n\n/**\n * Adds a primitive to the collection.\n *\n * @param {GroundPrimitive} primitive The primitive to add.\n * @param {Number} [zIndex = 0] The index of the primitive\n * @returns {GroundPrimitive} The primitive added to the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.add = function (primitive, zIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"primitive\", primitive);\n if (defined(zIndex)) {\n Check.typeOf.number(\"zIndex\", zIndex);\n }\n //>>includeEnd('debug');\n\n zIndex = defaultValue(zIndex, 0);\n var collection = this._collections[zIndex];\n if (!defined(collection)) {\n collection = new PrimitiveCollection({ destroyPrimitives: false });\n collection._zIndex = zIndex;\n this._collections[zIndex] = collection;\n var array = this._collectionsArray;\n var i = 0;\n while (i < array.length && array[i]._zIndex < zIndex) {\n i++;\n }\n array.splice(i, 0, collection);\n }\n\n collection.add(primitive);\n this._length++;\n primitive._zIndex = zIndex;\n\n return primitive;\n};\n\n/**\n * Adjusts the z-index\n * @param {GroundPrimitive} primitive\n * @param {Number} zIndex\n */\nOrderedGroundPrimitiveCollection.prototype.set = function (primitive, zIndex) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"primitive\", primitive);\n Check.typeOf.number(\"zIndex\", zIndex);\n //>>includeEnd('debug');\n\n if (zIndex === primitive._zIndex) {\n return primitive;\n }\n\n this.remove(primitive, true);\n this.add(primitive, zIndex);\n\n return primitive;\n};\n\n/**\n * Removes a primitive from the collection.\n *\n * @param {Object} primitive The primitive to remove.\n * @param {Boolean} [doNotDestroy = false]\n * @returns {Boolean} <code>true</code> if the primitive was removed; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.remove = function (\n primitive,\n doNotDestroy\n) {\n if (this.contains(primitive)) {\n var index = primitive._zIndex;\n var collection = this._collections[index];\n var result;\n if (doNotDestroy) {\n result = collection.remove(primitive);\n } else {\n result = collection.removeAndDestroy(primitive);\n }\n\n if (result) {\n this._length--;\n }\n\n if (collection.length === 0) {\n this._collectionsArray.splice(\n this._collectionsArray.indexOf(collection),\n 1\n );\n this._collections[index] = undefined;\n collection.destroy();\n }\n\n return result;\n }\n\n return false;\n};\n\n/**\n * Removes all primitives in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see OrderedGroundPrimitiveCollection#destroyPrimitives\n */\nOrderedGroundPrimitiveCollection.prototype.removeAll = function () {\n var collections = this._collectionsArray;\n for (var i = 0; i < collections.length; i++) {\n var collection = collections[i];\n collection.destroyPrimitives = true;\n collection.destroy();\n }\n\n this._collections = {};\n this._collectionsArray = [];\n this._length = 0;\n};\n\n/**\n * Determines if this collection contains a primitive.\n *\n * @param {Object} primitive The primitive to check for.\n * @returns {Boolean} <code>true</code> if the primitive is in the collection; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.contains = function (primitive) {\n if (!defined(primitive)) {\n return false;\n }\n var collection = this._collections[primitive._zIndex];\n return defined(collection) && collection.contains(primitive);\n};\n\n/**\n * @private\n */\nOrderedGroundPrimitiveCollection.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n var collections = this._collectionsArray;\n for (var i = 0; i < collections.length; i++) {\n collections[i].update(frameState);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see OrderedGroundPrimitiveCollection#destroy\n */\nOrderedGroundPrimitiveCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by each primitive in this collection. Explicitly destroying this\n * collection allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector to destroy this collection.\n * <br /><br />\n * Since destroying a collection destroys all the contained primitives, only destroy a collection\n * when you are sure no other code is still using any of the contained primitives.\n * <br /><br />\n * Once this collection is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitives = primitives && primitives.destroy();\n *\n * @see OrderedGroundPrimitiveCollection#isDestroyed\n */\nOrderedGroundPrimitiveCollection.prototype.destroy = function () {\n this.removeAll();\n return destroyObject(this);\n};\nexport default OrderedGroundPrimitiveCollection;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport defined from \"../Core/defined.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\n\n/**\n * @private\n */\nfunction DynamicGeometryBatch(primitives, orderedGroundPrimitives) {\n this._primitives = primitives;\n this._orderedGroundPrimitives = orderedGroundPrimitives;\n this._dynamicUpdaters = new AssociativeArray();\n}\n\nDynamicGeometryBatch.prototype.add = function (time, updater) {\n this._dynamicUpdaters.set(\n updater.id,\n updater.createDynamicUpdater(\n this._primitives,\n this._orderedGroundPrimitives\n )\n );\n};\n\nDynamicGeometryBatch.prototype.remove = function (updater) {\n var id = updater.id;\n var dynamicUpdater = this._dynamicUpdaters.get(id);\n if (defined(dynamicUpdater)) {\n this._dynamicUpdaters.remove(id);\n dynamicUpdater.destroy();\n }\n};\n\nDynamicGeometryBatch.prototype.update = function (time) {\n var geometries = this._dynamicUpdaters.values;\n for (var i = 0, len = geometries.length; i < len; i++) {\n geometries[i].update(time);\n }\n return true;\n};\n\nDynamicGeometryBatch.prototype.removeAllPrimitives = function () {\n var geometries = this._dynamicUpdaters.values;\n for (var i = 0, len = geometries.length; i < len; i++) {\n geometries[i].destroy();\n }\n this._dynamicUpdaters.removeAll();\n};\n\nDynamicGeometryBatch.prototype.getBoundingSphere = function (updater, result) {\n updater = this._dynamicUpdaters.get(updater.id);\n if (defined(updater) && defined(updater.getBoundingSphere)) {\n return updater.getBoundingSphere(result);\n }\n return BoundingSphereState.FAILED;\n};\nexport default DynamicGeometryBatch;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipseGeometry from \"../Core/EllipseGeometry.js\";\nimport EllipseOutlineGeometry from \"../Core/EllipseOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\nvar scratchRectangle = new Rectangle();\n\nfunction EllipseGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.center = undefined;\n this.semiMajorAxis = undefined;\n this.semiMinorAxis = undefined;\n this.rotation = undefined;\n this.height = undefined;\n this.extrudedHeight = undefined;\n this.granularity = undefined;\n this.stRotation = undefined;\n this.numberOfVerticalLines = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for ellipses.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias EllipseGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction EllipseGeometryUpdater(entity, scene) {\n GroundGeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new EllipseGeometryOptions(entity),\n geometryPropertyName: \"ellipse\",\n observedPropertyNames: [\"availability\", \"position\", \"ellipse\"],\n });\n\n this._onEntityPropertyChanged(entity, \"ellipse\", entity.ellipse, undefined);\n}\n\nif (defined(Object.create)) {\n EllipseGeometryUpdater.prototype = Object.create(\n GroundGeometryUpdater.prototype\n );\n EllipseGeometryUpdater.prototype.constructor = EllipseGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nEllipseGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n ),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n this._distanceDisplayConditionProperty.getValue(time)\n ),\n offset: undefined,\n color: undefined,\n };\n\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new EllipseGeometry(this._options),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nEllipseGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new EllipseOutlineGeometry(this._options),\n attributes: attributes,\n });\n};\n\nEllipseGeometryUpdater.prototype._computeCenter = function (time, result) {\n return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nEllipseGeometryUpdater.prototype._isHidden = function (entity, ellipse) {\n var position = entity.position;\n\n return (\n !defined(position) ||\n !defined(ellipse.semiMajorAxis) ||\n !defined(ellipse.semiMinorAxis) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, ellipse)\n );\n};\n\nEllipseGeometryUpdater.prototype._isDynamic = function (entity, ellipse) {\n return (\n !entity.position.isConstant || //\n !ellipse.semiMajorAxis.isConstant || //\n !ellipse.semiMinorAxis.isConstant || //\n !Property.isConstant(ellipse.rotation) || //\n !Property.isConstant(ellipse.height) || //\n !Property.isConstant(ellipse.extrudedHeight) || //\n !Property.isConstant(ellipse.granularity) || //\n !Property.isConstant(ellipse.stRotation) || //\n !Property.isConstant(ellipse.outlineWidth) || //\n !Property.isConstant(ellipse.numberOfVerticalLines) || //\n !Property.isConstant(ellipse.zIndex) || //\n (this._onTerrain &&\n !Property.isConstant(this._materialProperty) &&\n !(this._materialProperty instanceof ColorMaterialProperty))\n );\n};\n\nEllipseGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n ellipse\n) {\n var heightValue = Property.getValueOrUndefined(\n ellipse.height,\n Iso8601.MINIMUM_VALUE\n );\n var heightReferenceValue = Property.getValueOrDefault(\n ellipse.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n ellipse.extrudedHeight,\n Iso8601.MINIMUM_VALUE\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n ellipse.extrudedHeightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n var options = this._options;\n options.vertexFormat =\n this._materialProperty instanceof ColorMaterialProperty\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.center = entity.position.getValue(\n Iso8601.MINIMUM_VALUE,\n options.center\n );\n options.semiMajorAxis = ellipse.semiMajorAxis.getValue(\n Iso8601.MINIMUM_VALUE,\n options.semiMajorAxis\n );\n options.semiMinorAxis = ellipse.semiMinorAxis.getValue(\n Iso8601.MINIMUM_VALUE,\n options.semiMinorAxis\n );\n options.rotation = Property.getValueOrUndefined(\n ellipse.rotation,\n Iso8601.MINIMUM_VALUE\n );\n options.granularity = Property.getValueOrUndefined(\n ellipse.granularity,\n Iso8601.MINIMUM_VALUE\n );\n options.stRotation = Property.getValueOrUndefined(\n ellipse.stRotation,\n Iso8601.MINIMUM_VALUE\n );\n options.numberOfVerticalLines = Property.getValueOrUndefined(\n ellipse.numberOfVerticalLines,\n Iso8601.MINIMUM_VALUE\n );\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n EllipseGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\n\nEllipseGeometryUpdater.DynamicGeometryUpdater = DynamicEllipseGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicEllipseGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicEllipseGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicEllipseGeometryUpdater.prototype.constructor = DynamicEllipseGeometryUpdater;\n}\n\nDynamicEllipseGeometryUpdater.prototype._isHidden = function (\n entity,\n ellipse,\n time\n) {\n var options = this._options;\n return (\n !defined(options.center) ||\n !defined(options.semiMajorAxis) ||\n !defined(options.semiMinorAxis) ||\n DynamicGeometryUpdater.prototype._isHidden.call(this, entity, ellipse, time)\n );\n};\n\nDynamicEllipseGeometryUpdater.prototype._setOptions = function (\n entity,\n ellipse,\n time\n) {\n var options = this._options;\n var heightValue = Property.getValueOrUndefined(ellipse.height, time);\n var heightReferenceValue = Property.getValueOrDefault(\n ellipse.heightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n ellipse.extrudedHeight,\n time\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n ellipse.extrudedHeightReference,\n time,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n options.center = Property.getValueOrUndefined(\n entity.position,\n time,\n options.center\n );\n options.semiMajorAxis = Property.getValueOrUndefined(\n ellipse.semiMajorAxis,\n time\n );\n options.semiMinorAxis = Property.getValueOrUndefined(\n ellipse.semiMinorAxis,\n time\n );\n options.rotation = Property.getValueOrUndefined(ellipse.rotation, time);\n options.granularity = Property.getValueOrUndefined(ellipse.granularity, time);\n options.stRotation = Property.getValueOrUndefined(ellipse.stRotation, time);\n options.numberOfVerticalLines = Property.getValueOrUndefined(\n ellipse.numberOfVerticalLines,\n time\n );\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n EllipseGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\nexport default EllipseGeometryUpdater;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport EllipsoidOutlineGeometry from \"../Core/EllipsoidOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nvar defaultOffset = Cartesian3.ZERO;\n\nvar offsetScratch = new Cartesian3();\nvar radiiScratch = new Cartesian3();\nvar innerRadiiScratch = new Cartesian3();\nvar scratchColor = new Color();\nvar unitSphere = new Cartesian3(1, 1, 1);\n\nfunction EllipsoidGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.radii = undefined;\n this.innerRadii = undefined;\n this.minimumClock = undefined;\n this.maximumClock = undefined;\n this.minimumCone = undefined;\n this.maximumCone = undefined;\n this.stackPartitions = undefined;\n this.slicePartitions = undefined;\n this.subdivisions = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for ellipsoids.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias EllipsoidGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction EllipsoidGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new EllipsoidGeometryOptions(entity),\n geometryPropertyName: \"ellipsoid\",\n observedPropertyNames: [\n \"availability\",\n \"position\",\n \"orientation\",\n \"ellipsoid\",\n ],\n });\n\n this._onEntityPropertyChanged(\n entity,\n \"ellipsoid\",\n entity.ellipsoid,\n undefined\n );\n}\n\nif (defined(Object.create)) {\n EllipsoidGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n EllipsoidGeometryUpdater.prototype.constructor = EllipsoidGeometryUpdater;\n}\n\nObject.defineProperties(EllipsoidGeometryUpdater.prototype, {\n /**\n * Gets the terrain offset property\n * @type {TerrainOffsetProperty}\n * @memberof EllipsoidGeometryUpdater.prototype\n * @readonly\n * @private\n */\n terrainOffsetProperty: {\n get: function () {\n return this._terrainOffsetProperty;\n },\n },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @param {Boolean} [skipModelMatrix=false] Whether to compute a model matrix for the geometry instance\n * @param {Matrix4} [modelMatrixResult] Used to store the result of the model matrix calculation\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nEllipsoidGeometryUpdater.prototype.createFillGeometryInstance = function (\n time,\n skipModelMatrix,\n modelMatrixResult\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var color;\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n\n var attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: undefined,\n offset: undefined,\n };\n\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n attributes.color = color;\n }\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new EllipsoidGeometry(this._options),\n modelMatrix: skipModelMatrix\n ? undefined\n : entity.computeModelMatrixForHeightReference(\n time,\n entity.ellipsoid.heightReference,\n this._options.radii.z * 0.5,\n this._scene.mapProjection.ellipsoid,\n modelMatrixResult\n ),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @param {Boolean} [skipModelMatrix=false] Whether to compute a model matrix for the geometry instance\n * @param {Matrix4} [modelMatrixResult] Used to store the result of the model matrix calculation\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nEllipsoidGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time,\n skipModelMatrix,\n modelMatrixResult\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new EllipsoidOutlineGeometry(this._options),\n modelMatrix: skipModelMatrix\n ? undefined\n : entity.computeModelMatrixForHeightReference(\n time,\n entity.ellipsoid.heightReference,\n this._options.radii.z * 0.5,\n this._scene.mapProjection.ellipsoid,\n modelMatrixResult\n ),\n attributes: attributes,\n });\n};\n\nEllipsoidGeometryUpdater.prototype._computeCenter = function (time, result) {\n return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nEllipsoidGeometryUpdater.prototype._isHidden = function (entity, ellipsoid) {\n return (\n !defined(entity.position) ||\n !defined(ellipsoid.radii) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, ellipsoid)\n );\n};\n\nEllipsoidGeometryUpdater.prototype._isDynamic = function (entity, ellipsoid) {\n return (\n !entity.position.isConstant || //\n !Property.isConstant(entity.orientation) || //\n !ellipsoid.radii.isConstant || //\n !Property.isConstant(ellipsoid.innerRadii) || //\n !Property.isConstant(ellipsoid.stackPartitions) || //\n !Property.isConstant(ellipsoid.slicePartitions) || //\n !Property.isConstant(ellipsoid.outlineWidth) || //\n !Property.isConstant(ellipsoid.minimumClock) || //\n !Property.isConstant(ellipsoid.maximumClock) || //\n !Property.isConstant(ellipsoid.minimumCone) || //\n !Property.isConstant(ellipsoid.maximumCone) || //\n !Property.isConstant(ellipsoid.subdivisions)\n );\n};\n\nEllipsoidGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n ellipsoid\n) {\n var heightReference = Property.getValueOrDefault(\n ellipsoid.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var options = this._options;\n options.vertexFormat =\n this._materialProperty instanceof ColorMaterialProperty\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.radii = ellipsoid.radii.getValue(\n Iso8601.MINIMUM_VALUE,\n options.radii\n );\n options.innerRadii = Property.getValueOrUndefined(\n ellipsoid.innerRadii,\n options.radii\n );\n options.minimumClock = Property.getValueOrUndefined(\n ellipsoid.minimumClock,\n Iso8601.MINIMUM_VALUE\n );\n options.maximumClock = Property.getValueOrUndefined(\n ellipsoid.maximumClock,\n Iso8601.MINIMUM_VALUE\n );\n options.minimumCone = Property.getValueOrUndefined(\n ellipsoid.minimumCone,\n Iso8601.MINIMUM_VALUE\n );\n options.maximumCone = Property.getValueOrUndefined(\n ellipsoid.maximumCone,\n Iso8601.MINIMUM_VALUE\n );\n options.stackPartitions = Property.getValueOrUndefined(\n ellipsoid.stackPartitions,\n Iso8601.MINIMUM_VALUE\n );\n options.slicePartitions = Property.getValueOrUndefined(\n ellipsoid.slicePartitions,\n Iso8601.MINIMUM_VALUE\n );\n options.subdivisions = Property.getValueOrUndefined(\n ellipsoid.subdivisions,\n Iso8601.MINIMUM_VALUE\n );\n options.offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n};\n\nEllipsoidGeometryUpdater.prototype._onEntityPropertyChanged = heightReferenceOnEntityPropertyChanged;\n\nEllipsoidGeometryUpdater.DynamicGeometryUpdater = DynamicEllipsoidGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicEllipsoidGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n\n this._scene = geometryUpdater._scene;\n this._modelMatrix = new Matrix4();\n this._attributes = undefined;\n this._outlineAttributes = undefined;\n this._lastSceneMode = undefined;\n this._lastShow = undefined;\n this._lastOutlineShow = undefined;\n this._lastOutlineWidth = undefined;\n this._lastOutlineColor = undefined;\n this._lastOffset = new Cartesian3();\n this._material = {};\n}\n\nif (defined(Object.create)) {\n DynamicEllipsoidGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicEllipsoidGeometryUpdater.prototype.constructor = DynamicEllipsoidGeometryUpdater;\n}\n\nDynamicEllipsoidGeometryUpdater.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var ellipsoid = entity.ellipsoid;\n if (\n !entity.isShowing ||\n !entity.isAvailable(time) ||\n !Property.getValueOrDefault(ellipsoid.show, time, true)\n ) {\n if (defined(this._primitive)) {\n this._primitive.show = false;\n }\n\n if (defined(this._outlinePrimitive)) {\n this._outlinePrimitive.show = false;\n }\n return;\n }\n\n var radii = Property.getValueOrUndefined(ellipsoid.radii, time, radiiScratch);\n var modelMatrix = defined(radii)\n ? entity.computeModelMatrixForHeightReference(\n time,\n ellipsoid.heightReference,\n radii.z * 0.5,\n this._scene.mapProjection.ellipsoid,\n this._modelMatrix\n )\n : undefined;\n if (!defined(modelMatrix) || !defined(radii)) {\n if (defined(this._primitive)) {\n this._primitive.show = false;\n }\n\n if (defined(this._outlinePrimitive)) {\n this._outlinePrimitive.show = false;\n }\n return;\n }\n\n //Compute attributes and material.\n var showFill = Property.getValueOrDefault(ellipsoid.fill, time, true);\n var showOutline = Property.getValueOrDefault(ellipsoid.outline, time, false);\n var outlineColor = Property.getValueOrClonedDefault(\n ellipsoid.outlineColor,\n time,\n Color.BLACK,\n scratchColor\n );\n var material = MaterialProperty.getValue(\n time,\n defaultValue(ellipsoid.material, defaultMaterial),\n this._material\n );\n\n // Check properties that could trigger a primitive rebuild.\n var innerRadii = Property.getValueOrUndefined(\n ellipsoid.innerRadii,\n time,\n innerRadiiScratch\n );\n var minimumClock = Property.getValueOrUndefined(ellipsoid.minimumClock, time);\n var maximumClock = Property.getValueOrUndefined(ellipsoid.maximumClock, time);\n var minimumCone = Property.getValueOrUndefined(ellipsoid.minimumCone, time);\n var maximumCone = Property.getValueOrUndefined(ellipsoid.maximumCone, time);\n var stackPartitions = Property.getValueOrUndefined(\n ellipsoid.stackPartitions,\n time\n );\n var slicePartitions = Property.getValueOrUndefined(\n ellipsoid.slicePartitions,\n time\n );\n var subdivisions = Property.getValueOrUndefined(ellipsoid.subdivisions, time);\n var outlineWidth = Property.getValueOrDefault(\n ellipsoid.outlineWidth,\n time,\n 1.0\n );\n var heightReference = Property.getValueOrDefault(\n ellipsoid.heightReference,\n time,\n HeightReference.NONE\n );\n var offsetAttribute =\n heightReference !== HeightReference.NONE\n ? GeometryOffsetAttribute.ALL\n : undefined;\n\n //In 3D we use a fast path by modifying Primitive.modelMatrix instead of regenerating the primitive every frame.\n //Also check for height reference because this method doesn't work when the height is relative to terrain.\n var sceneMode = this._scene.mode;\n var in3D =\n sceneMode === SceneMode.SCENE3D && heightReference === HeightReference.NONE;\n\n var options = this._options;\n\n var shadows = this._geometryUpdater.shadowsProperty.getValue(time);\n\n var distanceDisplayConditionProperty = this._geometryUpdater\n .distanceDisplayConditionProperty;\n var distanceDisplayCondition = distanceDisplayConditionProperty.getValue(\n time\n );\n\n var offset = Property.getValueOrDefault(\n this._geometryUpdater.terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n );\n\n //We only rebuild the primitive if something other than the radii has changed\n //For the radii, we use unit sphere and then deform it with a scale matrix.\n var rebuildPrimitives =\n !in3D ||\n this._lastSceneMode !== sceneMode ||\n !defined(this._primitive) || //\n options.stackPartitions !== stackPartitions ||\n options.slicePartitions !== slicePartitions || //\n (defined(innerRadii) &&\n !Cartesian3.equals(options.innerRadii !== innerRadii)) ||\n options.minimumClock !== minimumClock || //\n options.maximumClock !== maximumClock ||\n options.minimumCone !== minimumCone || //\n options.maximumCone !== maximumCone ||\n options.subdivisions !== subdivisions || //\n this._lastOutlineWidth !== outlineWidth ||\n options.offsetAttribute !== offsetAttribute;\n\n if (rebuildPrimitives) {\n var primitives = this._primitives;\n primitives.removeAndDestroy(this._primitive);\n primitives.removeAndDestroy(this._outlinePrimitive);\n this._primitive = undefined;\n this._outlinePrimitive = undefined;\n this._lastSceneMode = sceneMode;\n this._lastOutlineWidth = outlineWidth;\n\n options.stackPartitions = stackPartitions;\n options.slicePartitions = slicePartitions;\n options.subdivisions = subdivisions;\n options.offsetAttribute = offsetAttribute;\n options.radii = Cartesian3.clone(in3D ? unitSphere : radii, options.radii);\n if (defined(innerRadii)) {\n if (in3D) {\n var mag = Cartesian3.magnitude(radii);\n options.innerRadii = Cartesian3.fromElements(\n innerRadii.x / mag,\n innerRadii.y / mag,\n innerRadii.z / mag,\n options.innerRadii\n );\n } else {\n options.innerRadii = Cartesian3.clone(innerRadii, options.innerRadii);\n }\n } else {\n options.innerRadii = undefined;\n }\n options.minimumClock = minimumClock;\n options.maximumClock = maximumClock;\n options.minimumCone = minimumCone;\n options.maximumCone = maximumCone;\n\n var appearance = new MaterialAppearance({\n material: material,\n translucent: material.isTranslucent(),\n closed: true,\n });\n options.vertexFormat = appearance.vertexFormat;\n\n var fillInstance = this._geometryUpdater.createFillGeometryInstance(\n time,\n in3D,\n this._modelMatrix\n );\n\n this._primitive = primitives.add(\n new Primitive({\n geometryInstances: fillInstance,\n appearance: appearance,\n asynchronous: false,\n shadows: shadows,\n })\n );\n\n var outlineInstance = this._geometryUpdater.createOutlineGeometryInstance(\n time,\n in3D,\n this._modelMatrix\n );\n this._outlinePrimitive = primitives.add(\n new Primitive({\n geometryInstances: outlineInstance,\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: outlineInstance.attributes.color.value[3] !== 255,\n renderState: {\n lineWidth: this._geometryUpdater._scene.clampLineWidth(\n outlineWidth\n ),\n },\n }),\n asynchronous: false,\n shadows: shadows,\n })\n );\n\n this._lastShow = showFill;\n this._lastOutlineShow = showOutline;\n this._lastOutlineColor = Color.clone(outlineColor, this._lastOutlineColor);\n this._lastDistanceDisplayCondition = distanceDisplayCondition;\n this._lastOffset = Cartesian3.clone(offset, this._lastOffset);\n } else if (this._primitive.ready) {\n //Update attributes only.\n var primitive = this._primitive;\n var outlinePrimitive = this._outlinePrimitive;\n\n primitive.show = true;\n outlinePrimitive.show = true;\n primitive.appearance.material = material;\n\n var attributes = this._attributes;\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(entity);\n this._attributes = attributes;\n }\n if (showFill !== this._lastShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n showFill,\n attributes.show\n );\n this._lastShow = showFill;\n }\n\n var outlineAttributes = this._outlineAttributes;\n\n if (!defined(outlineAttributes)) {\n outlineAttributes = outlinePrimitive.getGeometryInstanceAttributes(\n entity\n );\n this._outlineAttributes = outlineAttributes;\n }\n\n if (showOutline !== this._lastOutlineShow) {\n outlineAttributes.show = ShowGeometryInstanceAttribute.toValue(\n showOutline,\n outlineAttributes.show\n );\n this._lastOutlineShow = showOutline;\n }\n\n if (!Color.equals(outlineColor, this._lastOutlineColor)) {\n outlineAttributes.color = ColorGeometryInstanceAttribute.toValue(\n outlineColor,\n outlineAttributes.color\n );\n Color.clone(outlineColor, this._lastOutlineColor);\n }\n\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n this._lastDistanceDisplayCondition\n )\n ) {\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n outlineAttributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n outlineAttributes.distanceDisplayCondition\n );\n DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n this._lastDistanceDisplayCondition\n );\n }\n\n if (!Cartesian3.equals(offset, this._lastOffset)) {\n attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n offset,\n attributes.offset\n );\n outlineAttributes.offset = OffsetGeometryInstanceAttribute.toValue(\n offset,\n attributes.offset\n );\n Cartesian3.clone(offset, this._lastOffset);\n }\n }\n\n if (in3D) {\n //Since we are scaling a unit sphere, we can't let any of the values go to zero.\n //Instead we clamp them to a small value. To the naked eye, this produces the same results\n //that you get passing EllipsoidGeometry a radii with a zero component.\n radii.x = Math.max(radii.x, 0.001);\n radii.y = Math.max(radii.y, 0.001);\n radii.z = Math.max(radii.z, 0.001);\n\n modelMatrix = Matrix4.multiplyByScale(modelMatrix, radii, modelMatrix);\n this._primitive.modelMatrix = modelMatrix;\n this._outlinePrimitive.modelMatrix = modelMatrix;\n }\n};\nexport default EllipsoidGeometryUpdater;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PlaneGeometry from \"../Core/PlaneGeometry.js\";\nimport PlaneOutlineGeometry from \"../Core/PlaneOutlineGeometry.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar positionScratch = new Cartesian3();\nvar scratchColor = new Color();\n\nfunction PlaneGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.plane = undefined;\n this.dimensions = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for planes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PlaneGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PlaneGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new PlaneGeometryOptions(entity),\n geometryPropertyName: \"plane\",\n observedPropertyNames: [\"availability\", \"position\", \"orientation\", \"plane\"],\n });\n\n this._onEntityPropertyChanged(entity, \"plane\", entity.plane, undefined);\n}\n\nif (defined(Object.create)) {\n PlaneGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n PlaneGeometryUpdater.prototype.constructor = PlaneGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPlaneGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes;\n\n var color;\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: color,\n };\n } else {\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n };\n }\n\n var planeGraphics = entity.plane;\n var options = this._options;\n var modelMatrix = entity.computeModelMatrix(time);\n var plane = Property.getValueOrDefault(\n planeGraphics.plane,\n time,\n options.plane\n );\n var dimensions = Property.getValueOrUndefined(\n planeGraphics.dimensions,\n time,\n options.dimensions\n );\n\n options.plane = plane;\n options.dimensions = dimensions;\n\n modelMatrix = createPrimitiveMatrix(\n plane,\n dimensions,\n modelMatrix,\n this._scene.mapProjection.ellipsoid,\n modelMatrix\n );\n\n return new GeometryInstance({\n id: entity,\n geometry: new PlaneGeometry(this._options),\n modelMatrix: modelMatrix,\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPlaneGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var planeGraphics = entity.plane;\n var options = this._options;\n var modelMatrix = entity.computeModelMatrix(time);\n var plane = Property.getValueOrDefault(\n planeGraphics.plane,\n time,\n options.plane\n );\n var dimensions = Property.getValueOrUndefined(\n planeGraphics.dimensions,\n time,\n options.dimensions\n );\n\n options.plane = plane;\n options.dimensions = dimensions;\n\n modelMatrix = createPrimitiveMatrix(\n plane,\n dimensions,\n modelMatrix,\n this._scene.mapProjection.ellipsoid,\n modelMatrix\n );\n\n return new GeometryInstance({\n id: entity,\n geometry: new PlaneOutlineGeometry(),\n modelMatrix: modelMatrix,\n attributes: {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n },\n });\n};\n\nPlaneGeometryUpdater.prototype._isHidden = function (entity, plane) {\n return (\n !defined(plane.plane) ||\n !defined(plane.dimensions) ||\n !defined(entity.position) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, plane)\n );\n};\n\nPlaneGeometryUpdater.prototype._getIsClosed = function (options) {\n return false;\n};\n\nPlaneGeometryUpdater.prototype._isDynamic = function (entity, plane) {\n return (\n !entity.position.isConstant || //\n !Property.isConstant(entity.orientation) || //\n !plane.plane.isConstant || //\n !plane.dimensions.isConstant || //\n !Property.isConstant(plane.outlineWidth)\n );\n};\n\nPlaneGeometryUpdater.prototype._setStaticOptions = function (entity, plane) {\n var isColorMaterial = this._materialProperty instanceof ColorMaterialProperty;\n\n var options = this._options;\n options.vertexFormat = isColorMaterial\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.plane = plane.plane.getValue(Iso8601.MINIMUM_VALUE, options.plane);\n options.dimensions = plane.dimensions.getValue(\n Iso8601.MINIMUM_VALUE,\n options.dimensions\n );\n};\n\nPlaneGeometryUpdater.DynamicGeometryUpdater = DynamicPlaneGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicPlaneGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicPlaneGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicPlaneGeometryUpdater.prototype.constructor = DynamicPlaneGeometryUpdater;\n}\n\nDynamicPlaneGeometryUpdater.prototype._isHidden = function (\n entity,\n plane,\n time\n) {\n var options = this._options;\n var position = Property.getValueOrUndefined(\n entity.position,\n time,\n positionScratch\n );\n return (\n !defined(position) ||\n !defined(options.plane) ||\n !defined(options.dimensions) ||\n DynamicGeometryUpdater.prototype._isHidden.call(this, entity, plane, time)\n );\n};\n\nDynamicPlaneGeometryUpdater.prototype._setOptions = function (\n entity,\n plane,\n time\n) {\n var options = this._options;\n options.plane = Property.getValueOrDefault(plane.plane, time, options.plane);\n options.dimensions = Property.getValueOrUndefined(\n plane.dimensions,\n time,\n options.dimensions\n );\n};\n\nvar scratchAxis = new Cartesian3();\nvar scratchAxis2 = new Cartesian3();\nvar scratchTranslation = new Cartesian3();\nvar scratchNormal = new Cartesian3();\nvar scratchScale = new Cartesian3();\nvar scratchQuaternion = new Quaternion();\nvar scratchMatrix3 = new Matrix3();\nfunction createPrimitiveMatrix(\n plane,\n dimensions,\n transform,\n ellipsoid,\n result\n) {\n var normal = plane.normal;\n var distance = plane.distance;\n\n var translation = Cartesian3.multiplyByScalar(\n normal,\n -distance,\n scratchTranslation\n );\n translation = Matrix4.multiplyByPoint(transform, translation, translation);\n\n var transformedNormal = Matrix4.multiplyByPointAsVector(\n transform,\n normal,\n scratchNormal\n );\n Cartesian3.normalize(transformedNormal, transformedNormal);\n\n var up = ellipsoid.geodeticSurfaceNormal(translation, scratchAxis2);\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(Cartesian3.dot(up, transformedNormal)),\n 1.0,\n CesiumMath.EPSILON8\n )\n ) {\n up = Cartesian3.clone(Cartesian3.UNIT_Z, up);\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(Cartesian3.dot(up, transformedNormal)),\n 1.0,\n CesiumMath.EPSILON8\n )\n ) {\n up = Cartesian3.clone(Cartesian3.UNIT_X, up);\n }\n }\n\n var left = Cartesian3.cross(up, transformedNormal, scratchAxis);\n up = Cartesian3.cross(transformedNormal, left, up);\n Cartesian3.normalize(left, left);\n Cartesian3.normalize(up, up);\n\n var rotationMatrix = scratchMatrix3;\n Matrix3.setColumn(rotationMatrix, 0, left, rotationMatrix);\n Matrix3.setColumn(rotationMatrix, 1, up, rotationMatrix);\n Matrix3.setColumn(rotationMatrix, 2, transformedNormal, rotationMatrix);\n var rotation = Quaternion.fromRotationMatrix(\n rotationMatrix,\n scratchQuaternion\n );\n\n var scale = Cartesian2.clone(dimensions, scratchScale);\n scale.z = 1.0;\n\n return Matrix4.fromTranslationQuaternionRotationScale(\n translation,\n rotation,\n scale,\n result\n );\n}\n\n/**\n * @private\n */\nPlaneGeometryUpdater.createPrimitiveMatrix = createPrimitiveMatrix;\nexport default PlaneGeometryUpdater;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport ArcType from \"../Core/ArcType.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CoplanarPolygonGeometry from \"../Core/CoplanarPolygonGeometry.js\";\nimport CoplanarPolygonOutlineGeometry from \"../Core/CoplanarPolygonOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipsoidTangentPlane from \"../Core/EllipsoidTangentPlane.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PolygonGeometry from \"../Core/PolygonGeometry.js\";\nimport PolygonOutlineGeometry from \"../Core/PolygonOutlineGeometry.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar heightAndPerPositionHeightWarning =\n \"Entity polygons cannot have both height and perPositionHeight. height will be ignored\";\nvar heightReferenceAndPerPositionHeightWarning =\n \"heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored\";\n\nvar scratchColor = new Color();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\nvar scratchRectangle = new Rectangle();\nvar scratch2DPositions = [];\nvar cart2Scratch = new Cartesian2();\n\nfunction PolygonGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.polygonHierarchy = undefined;\n this.perPositionHeight = undefined;\n this.closeTop = undefined;\n this.closeBottom = undefined;\n this.height = undefined;\n this.extrudedHeight = undefined;\n this.granularity = undefined;\n this.stRotation = undefined;\n this.offsetAttribute = undefined;\n this.arcType = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polygons.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolygonGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolygonGeometryUpdater(entity, scene) {\n GroundGeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new PolygonGeometryOptions(entity),\n geometryPropertyName: \"polygon\",\n observedPropertyNames: [\"availability\", \"polygon\"],\n });\n\n this._onEntityPropertyChanged(entity, \"polygon\", entity.polygon, undefined);\n}\n\nif (defined(Object.create)) {\n PolygonGeometryUpdater.prototype = Object.create(\n GroundGeometryUpdater.prototype\n );\n PolygonGeometryUpdater.prototype.constructor = PolygonGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolygonGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var options = this._options;\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n ),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n this._distanceDisplayConditionProperty.getValue(time)\n ),\n offset: undefined,\n color: undefined,\n };\n\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n if (defined(options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n var geometry;\n if (options.perPositionHeight && !defined(options.extrudedHeight)) {\n geometry = new CoplanarPolygonGeometry(options);\n } else {\n geometry = new PolygonGeometry(options);\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: geometry,\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolygonGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var options = this._options;\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n\n if (defined(options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n var geometry;\n if (options.perPositionHeight && !defined(options.extrudedHeight)) {\n geometry = new CoplanarPolygonOutlineGeometry(options);\n } else {\n geometry = new PolygonOutlineGeometry(options);\n }\n return new GeometryInstance({\n id: entity,\n geometry: geometry,\n attributes: attributes,\n });\n};\n\nPolygonGeometryUpdater.prototype._computeCenter = function (time, result) {\n var hierarchy = Property.getValueOrUndefined(\n this._entity.polygon.hierarchy,\n time\n );\n if (!defined(hierarchy)) {\n return;\n }\n var positions = hierarchy.positions;\n if (positions.length === 0) {\n return;\n }\n var ellipsoid = this._scene.mapProjection.ellipsoid;\n\n var tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n var positions2D = tangentPlane.projectPointsOntoPlane(\n positions,\n scratch2DPositions\n );\n\n var length = positions2D.length;\n var area = 0;\n var j = length - 1;\n var centroid2D = new Cartesian2();\n for (var i = 0; i < length; j = i++) {\n var p1 = positions2D[i];\n var p2 = positions2D[j];\n var f = p1.x * p2.y - p2.x * p1.y;\n\n var sum = Cartesian2.add(p1, p2, cart2Scratch);\n sum = Cartesian2.multiplyByScalar(sum, f, sum);\n centroid2D = Cartesian2.add(centroid2D, sum, centroid2D);\n\n area += f;\n }\n\n var a = 1.0 / (area * 3.0);\n centroid2D = Cartesian2.multiplyByScalar(centroid2D, a, centroid2D);\n return tangentPlane.projectPointOntoEllipsoid(centroid2D, result);\n};\n\nPolygonGeometryUpdater.prototype._isHidden = function (entity, polygon) {\n return (\n !defined(polygon.hierarchy) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, polygon)\n );\n};\n\nPolygonGeometryUpdater.prototype._isOnTerrain = function (entity, polygon) {\n var onTerrain = GroundGeometryUpdater.prototype._isOnTerrain.call(\n this,\n entity,\n polygon\n );\n var perPositionHeightProperty = polygon.perPositionHeight;\n var perPositionHeightEnabled =\n defined(perPositionHeightProperty) &&\n (perPositionHeightProperty.isConstant\n ? perPositionHeightProperty.getValue(Iso8601.MINIMUM_VALUE)\n : true);\n return onTerrain && !perPositionHeightEnabled;\n};\n\nPolygonGeometryUpdater.prototype._isDynamic = function (entity, polygon) {\n return (\n !polygon.hierarchy.isConstant || //\n !Property.isConstant(polygon.height) || //\n !Property.isConstant(polygon.extrudedHeight) || //\n !Property.isConstant(polygon.granularity) || //\n !Property.isConstant(polygon.stRotation) || //\n !Property.isConstant(polygon.outlineWidth) || //\n !Property.isConstant(polygon.perPositionHeight) || //\n !Property.isConstant(polygon.closeTop) || //\n !Property.isConstant(polygon.closeBottom) || //\n !Property.isConstant(polygon.zIndex) || //\n !Property.isConstant(polygon.arcType) || //\n (this._onTerrain &&\n !Property.isConstant(this._materialProperty) &&\n !(this._materialProperty instanceof ColorMaterialProperty))\n );\n};\n\nPolygonGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n polygon\n) {\n var isColorMaterial = this._materialProperty instanceof ColorMaterialProperty;\n\n var options = this._options;\n options.vertexFormat = isColorMaterial\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n\n var hierarchyValue = polygon.hierarchy.getValue(Iso8601.MINIMUM_VALUE);\n var heightValue = Property.getValueOrUndefined(\n polygon.height,\n Iso8601.MINIMUM_VALUE\n );\n var heightReferenceValue = Property.getValueOrDefault(\n polygon.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n polygon.extrudedHeight,\n Iso8601.MINIMUM_VALUE\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n polygon.extrudedHeightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var perPositionHeightValue = Property.getValueOrDefault(\n polygon.perPositionHeight,\n Iso8601.MINIMUM_VALUE,\n false\n );\n\n heightValue = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n var offsetAttribute;\n if (perPositionHeightValue) {\n if (defined(heightValue)) {\n heightValue = undefined;\n oneTimeWarning(heightAndPerPositionHeightWarning);\n }\n if (\n heightReferenceValue !== HeightReference.NONE &&\n perPositionHeightValue\n ) {\n heightValue = undefined;\n oneTimeWarning(heightReferenceAndPerPositionHeightWarning);\n }\n } else {\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n }\n\n options.polygonHierarchy = hierarchyValue;\n options.granularity = Property.getValueOrUndefined(\n polygon.granularity,\n Iso8601.MINIMUM_VALUE\n );\n options.stRotation = Property.getValueOrUndefined(\n polygon.stRotation,\n Iso8601.MINIMUM_VALUE\n );\n options.perPositionHeight = perPositionHeightValue;\n options.closeTop = Property.getValueOrDefault(\n polygon.closeTop,\n Iso8601.MINIMUM_VALUE,\n true\n );\n options.closeBottom = Property.getValueOrDefault(\n polygon.closeBottom,\n Iso8601.MINIMUM_VALUE,\n true\n );\n options.offsetAttribute = offsetAttribute;\n options.height = heightValue;\n options.arcType = Property.getValueOrDefault(\n polygon.arcType,\n Iso8601.MINIMUM_VALUE,\n ArcType.GEODESIC\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n PolygonGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\n\nPolygonGeometryUpdater.prototype._getIsClosed = function (options) {\n var height = options.height;\n var extrudedHeight = options.extrudedHeight;\n var isExtruded = defined(extrudedHeight) && extrudedHeight !== height;\n return (\n !options.perPositionHeight &&\n ((!isExtruded && height === 0) ||\n (isExtruded && options.closeTop && options.closeBottom))\n );\n};\n\nPolygonGeometryUpdater.DynamicGeometryUpdater = DyanmicPolygonGeometryUpdater;\n\n/**\n * @private\n */\nfunction DyanmicPolygonGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DyanmicPolygonGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DyanmicPolygonGeometryUpdater.prototype.constructor = DyanmicPolygonGeometryUpdater;\n}\n\nDyanmicPolygonGeometryUpdater.prototype._isHidden = function (\n entity,\n polygon,\n time\n) {\n return (\n !defined(this._options.polygonHierarchy) ||\n DynamicGeometryUpdater.prototype._isHidden.call(this, entity, polygon, time)\n );\n};\n\nDyanmicPolygonGeometryUpdater.prototype._setOptions = function (\n entity,\n polygon,\n time\n) {\n var options = this._options;\n\n options.polygonHierarchy = Property.getValueOrUndefined(\n polygon.hierarchy,\n time\n );\n\n var heightValue = Property.getValueOrUndefined(polygon.height, time);\n var heightReferenceValue = Property.getValueOrDefault(\n polygon.heightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n polygon.extrudedHeightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n polygon.extrudedHeight,\n time\n );\n var perPositionHeightValue = Property.getValueOrUndefined(\n polygon.perPositionHeight,\n time\n );\n\n heightValue = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n extrudedHeightReferenceValue\n );\n\n var offsetAttribute;\n if (perPositionHeightValue) {\n if (defined(heightValue)) {\n heightValue = undefined;\n oneTimeWarning(heightAndPerPositionHeightWarning);\n }\n if (\n heightReferenceValue !== HeightReference.NONE &&\n perPositionHeightValue\n ) {\n heightValue = undefined;\n oneTimeWarning(heightReferenceAndPerPositionHeightWarning);\n }\n } else {\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n }\n\n options.granularity = Property.getValueOrUndefined(polygon.granularity, time);\n options.stRotation = Property.getValueOrUndefined(polygon.stRotation, time);\n options.perPositionHeight = Property.getValueOrUndefined(\n polygon.perPositionHeight,\n time\n );\n options.closeTop = Property.getValueOrDefault(polygon.closeTop, time, true);\n options.closeBottom = Property.getValueOrDefault(\n polygon.closeBottom,\n time,\n true\n );\n options.offsetAttribute = offsetAttribute;\n options.height = heightValue;\n options.arcType = Property.getValueOrDefault(\n polygon.arcType,\n time,\n ArcType.GEODESIC\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n PolygonGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\nexport default PolygonGeometryUpdater;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport PolylineVolumeGeometry from \"../Core/PolylineVolumeGeometry.js\";\nimport PolylineVolumeOutlineGeometry from \"../Core/PolylineVolumeOutlineGeometry.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\n\nfunction PolylineVolumeGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.polylinePositions = undefined;\n this.shapePositions = undefined;\n this.cornerType = undefined;\n this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polyline volumes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolylineVolumeGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolylineVolumeGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new PolylineVolumeGeometryOptions(entity),\n geometryPropertyName: \"polylineVolume\",\n observedPropertyNames: [\"availability\", \"polylineVolume\"],\n });\n\n this._onEntityPropertyChanged(\n entity,\n \"polylineVolume\",\n entity.polylineVolume,\n undefined\n );\n}\n\nif (defined(Object.create)) {\n PolylineVolumeGeometryUpdater.prototype = Object.create(\n GeometryUpdater.prototype\n );\n PolylineVolumeGeometryUpdater.prototype.constructor = PolylineVolumeGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolylineVolumeGeometryUpdater.prototype.createFillGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes;\n\n var color;\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: color,\n };\n } else {\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n };\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new PolylineVolumeGeometry(this._options),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolylineVolumeGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n return new GeometryInstance({\n id: entity,\n geometry: new PolylineVolumeOutlineGeometry(this._options),\n attributes: {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n },\n });\n};\n\nPolylineVolumeGeometryUpdater.prototype._isHidden = function (\n entity,\n polylineVolume\n) {\n return (\n !defined(polylineVolume.positions) ||\n !defined(polylineVolume.shape) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, polylineVolume)\n );\n};\n\nPolylineVolumeGeometryUpdater.prototype._isDynamic = function (\n entity,\n polylineVolume\n) {\n return (\n !polylineVolume.positions.isConstant || //\n !polylineVolume.shape.isConstant || //\n !Property.isConstant(polylineVolume.granularity) || //\n !Property.isConstant(polylineVolume.outlineWidth) || //\n !Property.isConstant(polylineVolume.cornerType)\n );\n};\n\nPolylineVolumeGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n polylineVolume\n) {\n var granularity = polylineVolume.granularity;\n var cornerType = polylineVolume.cornerType;\n\n var options = this._options;\n var isColorMaterial = this._materialProperty instanceof ColorMaterialProperty;\n options.vertexFormat = isColorMaterial\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.polylinePositions = polylineVolume.positions.getValue(\n Iso8601.MINIMUM_VALUE,\n options.polylinePositions\n );\n options.shapePositions = polylineVolume.shape.getValue(\n Iso8601.MINIMUM_VALUE,\n options.shape\n );\n options.granularity = defined(granularity)\n ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n options.cornerType = defined(cornerType)\n ? cornerType.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n};\n\nPolylineVolumeGeometryUpdater.DynamicGeometryUpdater = DynamicPolylineVolumeGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicPolylineVolumeGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicPolylineVolumeGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicPolylineVolumeGeometryUpdater.prototype.constructor = DynamicPolylineVolumeGeometryUpdater;\n}\n\nDynamicPolylineVolumeGeometryUpdater.prototype._isHidden = function (\n entity,\n polylineVolume,\n time\n) {\n var options = this._options;\n return (\n !defined(options.polylinePositions) ||\n !defined(options.shapePositions) ||\n DynamicGeometryUpdater.prototype._isHidden.call(\n this,\n entity,\n polylineVolume,\n time\n )\n );\n};\n\nDynamicPolylineVolumeGeometryUpdater.prototype._setOptions = function (\n entity,\n polylineVolume,\n time\n) {\n var options = this._options;\n options.polylinePositions = Property.getValueOrUndefined(\n polylineVolume.positions,\n time,\n options.polylinePositions\n );\n options.shapePositions = Property.getValueOrUndefined(\n polylineVolume.shape,\n time\n );\n options.granularity = Property.getValueOrUndefined(\n polylineVolume.granularity,\n time\n );\n options.cornerType = Property.getValueOrUndefined(\n polylineVolume.cornerType,\n time\n );\n};\nexport default PolylineVolumeGeometryUpdater;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RectangleGeometry from \"../Core/RectangleGeometry.js\";\nimport RectangleOutlineGeometry from \"../Core/RectangleOutlineGeometry.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\nvar scratchRectangle = new Rectangle();\nvar scratchCenterRect = new Rectangle();\nvar scratchCarto = new Cartographic();\n\nfunction RectangleGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.rectangle = undefined;\n this.height = undefined;\n this.extrudedHeight = undefined;\n this.granularity = undefined;\n this.stRotation = undefined;\n this.rotation = undefined;\n this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for rectangles.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias RectangleGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction RectangleGeometryUpdater(entity, scene) {\n GroundGeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new RectangleGeometryOptions(entity),\n geometryPropertyName: \"rectangle\",\n observedPropertyNames: [\"availability\", \"rectangle\"],\n });\n\n this._onEntityPropertyChanged(\n entity,\n \"rectangle\",\n entity.rectangle,\n undefined\n );\n}\n\nif (defined(Object.create)) {\n RectangleGeometryUpdater.prototype = Object.create(\n GroundGeometryUpdater.prototype\n );\n RectangleGeometryUpdater.prototype.constructor = RectangleGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nRectangleGeometryUpdater.prototype.createFillGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n ),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n this._distanceDisplayConditionProperty.getValue(time)\n ),\n offset: undefined,\n color: undefined,\n };\n\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new RectangleGeometry(this._options),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nRectangleGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n var attributes = {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n offset: undefined,\n };\n\n if (defined(this._options.offsetAttribute)) {\n attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n Property.getValueOrDefault(\n this._terrainOffsetProperty,\n time,\n defaultOffset,\n offsetScratch\n )\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new RectangleOutlineGeometry(this._options),\n attributes: attributes,\n });\n};\n\nRectangleGeometryUpdater.prototype._computeCenter = function (time, result) {\n var rect = Property.getValueOrUndefined(\n this._entity.rectangle.coordinates,\n time,\n scratchCenterRect\n );\n if (!defined(rect)) {\n return;\n }\n var center = Rectangle.center(rect, scratchCarto);\n return Cartographic.toCartesian(center, Ellipsoid.WGS84, result);\n};\n\nRectangleGeometryUpdater.prototype._isHidden = function (entity, rectangle) {\n return (\n !defined(rectangle.coordinates) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, rectangle)\n );\n};\n\nRectangleGeometryUpdater.prototype._isDynamic = function (entity, rectangle) {\n return (\n !rectangle.coordinates.isConstant || //\n !Property.isConstant(rectangle.height) || //\n !Property.isConstant(rectangle.extrudedHeight) || //\n !Property.isConstant(rectangle.granularity) || //\n !Property.isConstant(rectangle.stRotation) || //\n !Property.isConstant(rectangle.rotation) || //\n !Property.isConstant(rectangle.outlineWidth) || //\n !Property.isConstant(rectangle.zIndex) || //\n (this._onTerrain &&\n !Property.isConstant(this._materialProperty) &&\n !(this._materialProperty instanceof ColorMaterialProperty))\n );\n};\n\nRectangleGeometryUpdater.prototype._setStaticOptions = function (\n entity,\n rectangle\n) {\n var isColorMaterial = this._materialProperty instanceof ColorMaterialProperty;\n\n var heightValue = Property.getValueOrUndefined(\n rectangle.height,\n Iso8601.MINIMUM_VALUE\n );\n var heightReferenceValue = Property.getValueOrDefault(\n rectangle.heightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n rectangle.extrudedHeight,\n Iso8601.MINIMUM_VALUE\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n rectangle.extrudedHeightReference,\n Iso8601.MINIMUM_VALUE,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n var options = this._options;\n options.vertexFormat = isColorMaterial\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.rectangle = rectangle.coordinates.getValue(\n Iso8601.MINIMUM_VALUE,\n options.rectangle\n );\n options.granularity = Property.getValueOrUndefined(\n rectangle.granularity,\n Iso8601.MINIMUM_VALUE\n );\n options.stRotation = Property.getValueOrUndefined(\n rectangle.stRotation,\n Iso8601.MINIMUM_VALUE\n );\n options.rotation = Property.getValueOrUndefined(\n rectangle.rotation,\n Iso8601.MINIMUM_VALUE\n );\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n RectangleGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\n\nRectangleGeometryUpdater.DynamicGeometryUpdater = DynamicRectangleGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicRectangleGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicRectangleGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicRectangleGeometryUpdater.prototype.constructor = DynamicRectangleGeometryUpdater;\n}\n\nDynamicRectangleGeometryUpdater.prototype._isHidden = function (\n entity,\n rectangle,\n time\n) {\n return (\n !defined(this._options.rectangle) ||\n DynamicGeometryUpdater.prototype._isHidden.call(\n this,\n entity,\n rectangle,\n time\n )\n );\n};\n\nDynamicRectangleGeometryUpdater.prototype._setOptions = function (\n entity,\n rectangle,\n time\n) {\n var options = this._options;\n var heightValue = Property.getValueOrUndefined(rectangle.height, time);\n var heightReferenceValue = Property.getValueOrDefault(\n rectangle.heightReference,\n time,\n HeightReference.NONE\n );\n var extrudedHeightValue = Property.getValueOrUndefined(\n rectangle.extrudedHeight,\n time\n );\n var extrudedHeightReferenceValue = Property.getValueOrDefault(\n rectangle.extrudedHeightReference,\n time,\n HeightReference.NONE\n );\n if (defined(extrudedHeightValue) && !defined(heightValue)) {\n heightValue = 0;\n }\n\n options.rectangle = Property.getValueOrUndefined(\n rectangle.coordinates,\n time,\n options.rectangle\n );\n options.granularity = Property.getValueOrUndefined(\n rectangle.granularity,\n time\n );\n options.stRotation = Property.getValueOrUndefined(rectangle.stRotation, time);\n options.rotation = Property.getValueOrUndefined(rectangle.rotation, time);\n options.offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n heightValue,\n heightReferenceValue,\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n options.height = GroundGeometryUpdater.getGeometryHeight(\n heightValue,\n heightReferenceValue\n );\n\n extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n extrudedHeightValue,\n extrudedHeightReferenceValue\n );\n if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n RectangleGeometry.computeRectangle(options, scratchRectangle)\n ).minimumTerrainHeight;\n }\n\n options.extrudedHeight = extrudedHeightValue;\n};\nexport default RectangleGeometryUpdater;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar colorScratch = new Color();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\n\nfunction Batch(\n primitives,\n translucent,\n appearanceType,\n depthFailAppearanceType,\n depthFailMaterialProperty,\n closed,\n shadows\n) {\n this.translucent = translucent;\n this.appearanceType = appearanceType;\n this.depthFailAppearanceType = depthFailAppearanceType;\n this.depthFailMaterialProperty = depthFailMaterialProperty;\n this.depthFailMaterial = undefined;\n this.closed = closed;\n this.shadows = shadows;\n this.primitives = primitives;\n this.createPrimitive = false;\n this.waitingOnCreate = false;\n this.primitive = undefined;\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.updaters = new AssociativeArray();\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n this.itemsToRemove = [];\n this.invalidated = false;\n\n var removeMaterialSubscription;\n if (defined(depthFailMaterialProperty)) {\n removeMaterialSubscription = depthFailMaterialProperty.definitionChanged.addEventListener(\n Batch.prototype.onMaterialChanged,\n this\n );\n }\n this.removeMaterialSubscription = removeMaterialSubscription;\n}\n\nBatch.prototype.onMaterialChanged = function () {\n this.invalidated = true;\n};\n\nBatch.prototype.isMaterial = function (updater) {\n var material = this.depthFailMaterialProperty;\n var updaterMaterial = updater.depthFailMaterialProperty;\n if (updaterMaterial === material) {\n return true;\n }\n if (defined(material)) {\n return material.equals(updaterMaterial);\n }\n return false;\n};\n\nBatch.prototype.add = function (updater, instance) {\n var id = updater.id;\n this.createPrimitive = true;\n this.geometry.set(id, instance);\n this.updaters.set(id, updater);\n if (\n !updater.hasConstantFill ||\n !updater.fillMaterialProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n !Property.isConstant(updater.terrainOffsetProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n this.showsUpdated.remove(id);\n }\n return true;\n }\n return false;\n};\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var removedCount = 0;\n var primitive = this.primitive;\n var primitives = this.primitives;\n var i;\n\n if (this.createPrimitive) {\n var geometries = this.geometry.values;\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n primitives.remove(primitive);\n }\n }\n\n var depthFailAppearance;\n if (defined(this.depthFailAppearanceType)) {\n if (defined(this.depthFailMaterialProperty)) {\n this.depthFailMaterial = MaterialProperty.getValue(\n time,\n this.depthFailMaterialProperty,\n this.depthFailMaterial\n );\n }\n depthFailAppearance = new this.depthFailAppearanceType({\n material: this.depthFailMaterial,\n translucent: this.translucent,\n closed: this.closed,\n });\n }\n\n primitive = new Primitive({\n show: false,\n asynchronous: true,\n geometryInstances: geometries.slice(),\n appearance: new this.appearanceType({\n translucent: this.translucent,\n closed: this.closed,\n }),\n depthFailAppearance: depthFailAppearance,\n shadows: this.shadows,\n });\n primitives.add(primitive);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n primitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n this.waitingOnCreate = true;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n primitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n\n if (\n defined(this.depthFailAppearanceType) &&\n !(this.depthFailMaterialProperty instanceof ColorMaterialProperty)\n ) {\n this.depthFailMaterial = MaterialProperty.getValue(\n time,\n this.depthFailMaterialProperty,\n this.depthFailMaterial\n );\n this.primitive.depthFailAppearance.material = this.depthFailMaterial;\n }\n\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n var waitingOnCreate = this.waitingOnCreate;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n if (!updater.fillMaterialProperty.isConstant || waitingOnCreate) {\n var colorProperty = updater.fillMaterialProperty.color;\n var resultColor = Property.getValueOrDefault(\n colorProperty,\n time,\n Color.WHITE,\n colorScratch\n );\n if (!Color.equals(attributes._lastColor, resultColor)) {\n attributes._lastColor = Color.clone(\n resultColor,\n attributes._lastColor\n );\n attributes.color = ColorGeometryInstanceAttribute.toValue(\n resultColor,\n attributes.color\n );\n if (\n (this.translucent && attributes.color[3] === 255) ||\n (!this.translucent && attributes.color[3] !== 255)\n ) {\n this.itemsToRemove[removedCount++] = updater;\n }\n }\n }\n\n if (\n defined(this.depthFailAppearanceType) &&\n updater.depthFailMaterialProperty instanceof ColorMaterialProperty &&\n (!updater.depthFailMaterialProperty.isConstant || waitingOnCreate)\n ) {\n var depthFailColorProperty = updater.depthFailMaterialProperty.color;\n var depthColor = Property.getValueOrDefault(\n depthFailColorProperty,\n time,\n Color.WHITE,\n colorScratch\n );\n if (!Color.equals(attributes._lastDepthFailColor, depthColor)) {\n attributes._lastDepthFailColor = Color.clone(\n depthColor,\n attributes._lastDepthFailColor\n );\n attributes.depthFailColor = ColorGeometryInstanceAttribute.toValue(\n depthColor,\n attributes.depthFailColor\n );\n }\n }\n\n var show =\n updater.entity.isShowing &&\n (updater.hasConstantFill || updater.isFilled(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n\n var offsetProperty = updater.terrainOffsetProperty;\n if (!Property.isConstant(offsetProperty)) {\n var offset = Property.getValueOrDefault(\n offsetProperty,\n time,\n defaultOffset,\n offsetScratch\n );\n if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n attributes._lastOffset = Cartesian3.clone(\n offset,\n attributes._lastOffset\n );\n attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n offset,\n attributes.offset\n );\n }\n }\n }\n\n this.updateShows(primitive);\n this.waitingOnCreate = false;\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n this.itemsToRemove.length = removedCount;\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = updater.entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n if (\n !defined(attributes) ||\n !defined(attributes.boundingSphere) || //\n (defined(attributes.show) && attributes.show[0] === 0)\n ) {\n return BoundingSphereState.FAILED;\n }\n attributes.boundingSphere.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n var primitive = this.primitive;\n var primitives = this.primitives;\n if (defined(primitive)) {\n primitives.remove(primitive);\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n }\n if (defined(this.removeMaterialSubscription)) {\n this.removeMaterialSubscription();\n }\n};\n\n/**\n * @private\n */\nfunction StaticGeometryColorBatch(\n primitives,\n appearanceType,\n depthFailAppearanceType,\n closed,\n shadows\n) {\n this._solidItems = [];\n this._translucentItems = [];\n this._primitives = primitives;\n this._appearanceType = appearanceType;\n this._depthFailAppearanceType = depthFailAppearanceType;\n this._closed = closed;\n this._shadows = shadows;\n}\n\nStaticGeometryColorBatch.prototype.add = function (time, updater) {\n var items;\n var translucent;\n var instance = updater.createFillGeometryInstance(time);\n if (instance.attributes.color.value[3] === 255) {\n items = this._solidItems;\n translucent = false;\n } else {\n items = this._translucentItems;\n translucent = true;\n }\n\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.isMaterial(updater)) {\n item.add(updater, instance);\n return;\n }\n }\n var batch = new Batch(\n this._primitives,\n translucent,\n this._appearanceType,\n this._depthFailAppearanceType,\n updater.depthFailMaterialProperty,\n this._closed,\n this._shadows\n );\n batch.add(updater, instance);\n items.push(batch);\n};\n\nfunction removeItem(items, updater) {\n var length = items.length;\n for (var i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.remove(updater)) {\n if (item.updaters.length === 0) {\n items.splice(i, 1);\n item.destroy();\n }\n return true;\n }\n }\n return false;\n}\n\nStaticGeometryColorBatch.prototype.remove = function (updater) {\n if (!removeItem(this._solidItems, updater)) {\n removeItem(this._translucentItems, updater);\n }\n};\n\nfunction moveItems(batch, items, time) {\n var itemsMoved = false;\n var length = items.length;\n for (var i = 0; i < length; ++i) {\n var item = items[i];\n var itemsToRemove = item.itemsToRemove;\n var itemsToMoveLength = itemsToRemove.length;\n if (itemsToMoveLength > 0) {\n for (i = 0; i < itemsToMoveLength; i++) {\n var updater = itemsToRemove[i];\n item.remove(updater);\n batch.add(time, updater);\n itemsMoved = true;\n }\n }\n }\n return itemsMoved;\n}\n\nfunction updateItems(batch, items, time, isUpdated) {\n var length = items.length;\n var i;\n for (i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.invalidated) {\n items.splice(i, 1);\n var updaters = item.updaters.values;\n var updatersLength = updaters.length;\n for (var h = 0; h < updatersLength; h++) {\n batch.add(time, updaters[h]);\n }\n item.destroy();\n }\n }\n\n length = items.length;\n for (i = 0; i < length; ++i) {\n isUpdated = items[i].update(time) && isUpdated;\n }\n return isUpdated;\n}\n\nStaticGeometryColorBatch.prototype.update = function (time) {\n //Perform initial update\n var isUpdated = updateItems(this, this._solidItems, time, true);\n isUpdated =\n updateItems(this, this._translucentItems, time, isUpdated) && isUpdated;\n\n //If any items swapped between solid/translucent, we need to\n //move them between batches\n var solidsMoved = moveItems(this, this._solidItems, time);\n var translucentsMoved = moveItems(this, this._translucentItems, time);\n\n //If we moved anything around, we need to re-build the primitive\n if (solidsMoved || translucentsMoved) {\n isUpdated =\n updateItems(this, this._solidItems, time, isUpdated) && isUpdated;\n isUpdated =\n updateItems(this, this._translucentItems, time, isUpdated) && isUpdated;\n }\n\n return isUpdated;\n};\n\nfunction getBoundingSphere(items, updater, result) {\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.contains(updater)) {\n return item.getBoundingSphere(updater, result);\n }\n }\n return BoundingSphereState.FAILED;\n}\n\nStaticGeometryColorBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var boundingSphere = getBoundingSphere(this._solidItems, updater, result);\n if (boundingSphere === BoundingSphereState.FAILED) {\n return getBoundingSphere(this._translucentItems, updater, result);\n }\n return boundingSphere;\n};\n\nfunction removeAllPrimitives(items) {\n var length = items.length;\n for (var i = 0; i < length; i++) {\n items[i].destroy();\n }\n items.length = 0;\n}\n\nStaticGeometryColorBatch.prototype.removeAllPrimitives = function () {\n removeAllPrimitives(this._solidItems);\n removeAllPrimitives(this._translucentItems);\n};\nexport default StaticGeometryColorBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\n\nfunction Batch(\n primitives,\n appearanceType,\n materialProperty,\n depthFailAppearanceType,\n depthFailMaterialProperty,\n closed,\n shadows\n) {\n this.primitives = primitives;\n this.appearanceType = appearanceType;\n this.materialProperty = materialProperty;\n this.depthFailAppearanceType = depthFailAppearanceType;\n this.depthFailMaterialProperty = depthFailMaterialProperty;\n this.closed = closed;\n this.shadows = shadows;\n this.updaters = new AssociativeArray();\n this.createPrimitive = true;\n this.primitive = undefined;\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.material = undefined;\n this.depthFailMaterial = undefined;\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.invalidated = false;\n this.removeMaterialSubscription = materialProperty.definitionChanged.addEventListener(\n Batch.prototype.onMaterialChanged,\n this\n );\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n}\n\nBatch.prototype.onMaterialChanged = function () {\n this.invalidated = true;\n};\n\nBatch.prototype.isMaterial = function (updater) {\n var material = this.materialProperty;\n var updaterMaterial = updater.fillMaterialProperty;\n var depthFailMaterial = this.depthFailMaterialProperty;\n var updaterDepthFailMaterial = updater.depthFailMaterialProperty;\n\n if (\n updaterMaterial === material &&\n updaterDepthFailMaterial === depthFailMaterial\n ) {\n return true;\n }\n var equals = defined(material) && material.equals(updaterMaterial);\n equals =\n ((!defined(depthFailMaterial) && !defined(updaterDepthFailMaterial)) ||\n (defined(depthFailMaterial) &&\n depthFailMaterial.equals(updaterDepthFailMaterial))) &&\n equals;\n return equals;\n};\n\nBatch.prototype.add = function (time, updater) {\n var id = updater.id;\n this.updaters.set(id, updater);\n this.geometry.set(id, updater.createFillGeometryInstance(time));\n if (\n !updater.hasConstantFill ||\n !updater.fillMaterialProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n !Property.isConstant(updater.terrainOffsetProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n this.createPrimitive = true;\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n this.showsUpdated.remove(id);\n }\n return true;\n }\n return false;\n};\n\nvar colorScratch = new Color();\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var primitive = this.primitive;\n var primitives = this.primitives;\n var geometries = this.geometry.values;\n var i;\n\n if (this.createPrimitive) {\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n primitives.remove(primitive);\n }\n }\n\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n\n var depthFailAppearance;\n if (defined(this.depthFailMaterialProperty)) {\n this.depthFailMaterial = MaterialProperty.getValue(\n time,\n this.depthFailMaterialProperty,\n this.depthFailMaterial\n );\n depthFailAppearance = new this.depthFailAppearanceType({\n material: this.depthFailMaterial,\n translucent: this.depthFailMaterial.isTranslucent(),\n closed: this.closed,\n });\n }\n\n primitive = new Primitive({\n show: false,\n asynchronous: true,\n geometryInstances: geometries.slice(),\n appearance: new this.appearanceType({\n material: this.material,\n translucent: this.material.isTranslucent(),\n closed: this.closed,\n }),\n depthFailAppearance: depthFailAppearance,\n shadows: this.shadows,\n });\n\n primitives.add(primitive);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n primitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n primitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n this.primitive.appearance.material = this.material;\n\n if (\n defined(this.depthFailAppearanceType) &&\n !(this.depthFailMaterialProperty instanceof ColorMaterialProperty)\n ) {\n this.depthFailMaterial = MaterialProperty.getValue(\n time,\n this.depthFailMaterialProperty,\n this.depthFailMaterial\n );\n this.primitive.depthFailAppearance.material = this.depthFailMaterial;\n }\n\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n if (\n defined(this.depthFailAppearanceType) &&\n this.depthFailMaterialProperty instanceof ColorMaterialProperty &&\n !updater.depthFailMaterialProperty.isConstant\n ) {\n var depthFailColorProperty = updater.depthFailMaterialProperty.color;\n var depthFailColor = Property.getValueOrDefault(\n depthFailColorProperty,\n time,\n Color.WHITE,\n colorScratch\n );\n if (!Color.equals(attributes._lastDepthFailColor, depthFailColor)) {\n attributes._lastDepthFailColor = Color.clone(\n depthFailColor,\n attributes._lastDepthFailColor\n );\n attributes.depthFailColor = ColorGeometryInstanceAttribute.toValue(\n depthFailColor,\n attributes.depthFailColor\n );\n }\n }\n\n var show =\n entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n\n var offsetProperty = updater.terrainOffsetProperty;\n if (!Property.isConstant(offsetProperty)) {\n var offset = Property.getValueOrDefault(\n offsetProperty,\n time,\n defaultOffset,\n offsetScratch\n );\n if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n attributes._lastOffset = Cartesian3.clone(\n offset,\n attributes._lastOffset\n );\n attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n offset,\n attributes.offset\n );\n }\n }\n }\n\n this.updateShows(primitive);\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n if (\n !defined(attributes) ||\n !defined(attributes.boundingSphere) ||\n (defined(attributes.show) && attributes.show[0] === 0)\n ) {\n return BoundingSphereState.FAILED;\n }\n attributes.boundingSphere.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n var primitive = this.primitive;\n var primitives = this.primitives;\n if (defined(primitive)) {\n primitives.remove(primitive);\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n }\n this.removeMaterialSubscription();\n};\n\n/**\n * @private\n */\nfunction StaticGeometryPerMaterialBatch(\n primitives,\n appearanceType,\n depthFailAppearanceType,\n closed,\n shadows\n) {\n this._items = [];\n this._primitives = primitives;\n this._appearanceType = appearanceType;\n this._depthFailAppearanceType = depthFailAppearanceType;\n this._closed = closed;\n this._shadows = shadows;\n}\n\nStaticGeometryPerMaterialBatch.prototype.add = function (time, updater) {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.isMaterial(updater)) {\n item.add(time, updater);\n return;\n }\n }\n var batch = new Batch(\n this._primitives,\n this._appearanceType,\n updater.fillMaterialProperty,\n this._depthFailAppearanceType,\n updater.depthFailMaterialProperty,\n this._closed,\n this._shadows\n );\n batch.add(time, updater);\n items.push(batch);\n};\n\nStaticGeometryPerMaterialBatch.prototype.remove = function (updater) {\n var items = this._items;\n var length = items.length;\n for (var i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.remove(updater)) {\n if (item.updaters.length === 0) {\n items.splice(i, 1);\n item.destroy();\n }\n break;\n }\n }\n};\n\nStaticGeometryPerMaterialBatch.prototype.update = function (time) {\n var i;\n var items = this._items;\n var length = items.length;\n\n for (i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.invalidated) {\n items.splice(i, 1);\n var updaters = item.updaters.values;\n var updatersLength = updaters.length;\n for (var h = 0; h < updatersLength; h++) {\n this.add(time, updaters[h]);\n }\n item.destroy();\n }\n }\n\n var isUpdated = true;\n for (i = 0; i < items.length; i++) {\n isUpdated = items[i].update(time) && isUpdated;\n }\n return isUpdated;\n};\n\nStaticGeometryPerMaterialBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.contains(updater)) {\n return item.getBoundingSphere(updater, result);\n }\n }\n return BoundingSphereState.FAILED;\n};\n\nStaticGeometryPerMaterialBatch.prototype.removeAllPrimitives = function () {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n items[i].destroy();\n }\n this._items.length = 0;\n};\nexport default StaticGeometryPerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\nimport RectangleCollisionChecker from \"../Core/RectangleCollisionChecker.js\";\n\nvar colorScratch = new Color();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\nfunction Batch(primitives, classificationType, color, zIndex) {\n this.primitives = primitives;\n this.zIndex = zIndex;\n this.classificationType = classificationType;\n this.color = color;\n this.createPrimitive = false;\n this.waitingOnCreate = false;\n this.primitive = undefined;\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.updaters = new AssociativeArray();\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n this.itemsToRemove = [];\n this.isDirty = false;\n this.rectangleCollisionCheck = new RectangleCollisionChecker();\n}\n\nBatch.prototype.overlapping = function (rectangle) {\n return this.rectangleCollisionCheck.collides(rectangle);\n};\n\nBatch.prototype.add = function (updater, instance) {\n var id = updater.id;\n this.createPrimitive = true;\n this.geometry.set(id, instance);\n this.updaters.set(id, updater);\n this.rectangleCollisionCheck.insert(id, instance.geometry.rectangle);\n if (\n !updater.hasConstantFill ||\n !updater.fillMaterialProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n var geometryInstance = this.geometry.get(id);\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.rectangleCollisionCheck.remove(\n id,\n geometryInstance.geometry.rectangle\n );\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n this.showsUpdated.remove(id);\n }\n return true;\n }\n return false;\n};\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var removedCount = 0;\n var primitive = this.primitive;\n var primitives = this.primitives;\n var i;\n\n if (this.createPrimitive) {\n var geometries = this.geometry.values;\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n primitives.remove(primitive);\n }\n }\n\n primitive = new GroundPrimitive({\n show: false,\n asynchronous: true,\n geometryInstances: geometries.slice(),\n classificationType: this.classificationType,\n });\n primitives.add(primitive, this.zIndex);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n primitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n this.waitingOnCreate = true;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n primitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n var waitingOnCreate = this.waitingOnCreate;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n if (!updater.fillMaterialProperty.isConstant || waitingOnCreate) {\n var colorProperty = updater.fillMaterialProperty.color;\n var fillColor = Property.getValueOrDefault(\n colorProperty,\n time,\n Color.WHITE,\n colorScratch\n );\n\n if (!Color.equals(attributes._lastColor, fillColor)) {\n attributes._lastColor = Color.clone(fillColor, attributes._lastColor);\n attributes.color = ColorGeometryInstanceAttribute.toValue(\n fillColor,\n attributes.color\n );\n }\n }\n\n var show =\n updater.entity.isShowing &&\n (updater.hasConstantFill || updater.isFilled(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n }\n\n this.updateShows(primitive);\n this.waitingOnCreate = false;\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n this.itemsToRemove.length = removedCount;\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = updater.entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n\n var bs = primitive.getBoundingSphere(updater.entity);\n if (!defined(bs)) {\n return BoundingSphereState.FAILED;\n }\n\n bs.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.removeAllPrimitives = function () {\n var primitives = this.primitives;\n\n var primitive = this.primitive;\n if (defined(primitive)) {\n primitives.remove(primitive);\n this.primitive = undefined;\n this.geometry.removeAll();\n this.updaters.removeAll();\n }\n\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n};\n\n/**\n * @private\n */\nfunction StaticGroundGeometryColorBatch(primitives, classificationType) {\n this._batches = [];\n this._primitives = primitives;\n this._classificationType = classificationType;\n}\n\nStaticGroundGeometryColorBatch.prototype.add = function (time, updater) {\n var instance = updater.createFillGeometryInstance(time);\n var batches = this._batches;\n var zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n var batch;\n var length = batches.length;\n for (var i = 0; i < length; ++i) {\n var item = batches[i];\n if (\n item.zIndex === zIndex &&\n !item.overlapping(instance.geometry.rectangle)\n ) {\n batch = item;\n break;\n }\n }\n\n if (!defined(batch)) {\n batch = new Batch(\n this._primitives,\n this._classificationType,\n instance.attributes.color.value,\n zIndex\n );\n batches.push(batch);\n }\n batch.add(updater, instance);\n return batch;\n};\n\nStaticGroundGeometryColorBatch.prototype.remove = function (updater) {\n var batches = this._batches;\n var count = batches.length;\n for (var i = 0; i < count; ++i) {\n if (batches[i].remove(updater)) {\n return;\n }\n }\n};\n\nStaticGroundGeometryColorBatch.prototype.update = function (time) {\n var i;\n var updater;\n\n //Perform initial update\n var isUpdated = true;\n var batches = this._batches;\n var batchCount = batches.length;\n for (i = 0; i < batchCount; ++i) {\n isUpdated = batches[i].update(time) && isUpdated;\n }\n\n //If any items swapped between batches we need to move them\n for (i = 0; i < batchCount; ++i) {\n var oldBatch = batches[i];\n var itemsToRemove = oldBatch.itemsToRemove;\n var itemsToMoveLength = itemsToRemove.length;\n for (var j = 0; j < itemsToMoveLength; j++) {\n updater = itemsToRemove[j];\n oldBatch.remove(updater);\n var newBatch = this.add(time, updater);\n oldBatch.isDirty = true;\n newBatch.isDirty = true;\n }\n }\n\n //If we moved anything around, we need to re-build the primitive and remove empty batches\n for (i = batchCount - 1; i >= 0; --i) {\n var batch = batches[i];\n if (batch.isDirty) {\n isUpdated = batches[i].update(time) && isUpdated;\n batch.isDirty = false;\n }\n if (batch.geometry.length === 0) {\n batches.splice(i, 1);\n }\n }\n\n return isUpdated;\n};\n\nStaticGroundGeometryColorBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var batches = this._batches;\n var batchCount = batches.length;\n for (var i = 0; i < batchCount; ++i) {\n var batch = batches[i];\n if (batch.contains(updater)) {\n return batch.getBoundingSphere(updater, result);\n }\n }\n\n return BoundingSphereState.FAILED;\n};\n\nStaticGroundGeometryColorBatch.prototype.removeAllPrimitives = function () {\n var batches = this._batches;\n var batchCount = batches.length;\n for (var i = 0; i < batchCount; ++i) {\n batches[i].removeAllPrimitives();\n }\n};\nexport default StaticGroundGeometryColorBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport RectangleCollisionChecker from \"../Core/RectangleCollisionChecker.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport ShadowVolumeAppearance from \"../Scene/ShadowVolumeAppearance.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\n// Encapsulates a Primitive and all the entities that it represents.\nfunction Batch(\n primitives,\n classificationType,\n appearanceType,\n materialProperty,\n usingSphericalTextureCoordinates,\n zIndex\n) {\n this.primitives = primitives; // scene level primitive collection\n this.classificationType = classificationType;\n this.appearanceType = appearanceType;\n this.materialProperty = materialProperty;\n this.updaters = new AssociativeArray();\n this.createPrimitive = true;\n this.primitive = undefined; // a GroundPrimitive encapsulating all the entities\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.material = undefined;\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.invalidated = false;\n this.removeMaterialSubscription = materialProperty.definitionChanged.addEventListener(\n Batch.prototype.onMaterialChanged,\n this\n );\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n this.usingSphericalTextureCoordinates = usingSphericalTextureCoordinates;\n this.zIndex = zIndex;\n this.rectangleCollisionCheck = new RectangleCollisionChecker();\n}\n\nBatch.prototype.onMaterialChanged = function () {\n this.invalidated = true;\n};\n\nBatch.prototype.overlapping = function (rectangle) {\n return this.rectangleCollisionCheck.collides(rectangle);\n};\n\n// Check if the given updater's material is compatible with this batch\nBatch.prototype.isMaterial = function (updater) {\n var material = this.materialProperty;\n var updaterMaterial = updater.fillMaterialProperty;\n\n if (\n updaterMaterial === material ||\n (updaterMaterial instanceof ColorMaterialProperty &&\n material instanceof ColorMaterialProperty)\n ) {\n return true;\n }\n return defined(material) && material.equals(updaterMaterial);\n};\n\nBatch.prototype.add = function (time, updater, geometryInstance) {\n var id = updater.id;\n this.updaters.set(id, updater);\n this.geometry.set(id, geometryInstance);\n this.rectangleCollisionCheck.insert(id, geometryInstance.geometry.rectangle);\n // Updaters with dynamic attributes must be tracked separately, may exit the batch\n if (\n !updater.hasConstantFill ||\n !updater.fillMaterialProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n // Listen for show changes. These will be synchronized in updateShows.\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n this.createPrimitive = true;\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n var geometryInstance = this.geometry.get(id);\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.rectangleCollisionCheck.remove(\n id,\n geometryInstance.geometry.rectangle\n );\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n }\n return true;\n }\n return false;\n};\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var primitive = this.primitive;\n var primitives = this.primitives;\n var geometries = this.geometry.values;\n var i;\n\n if (this.createPrimitive) {\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n // Keep a handle to the old primitive so it can be removed when the updated version is ready.\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n // For if the new primitive changes again before it is ready.\n primitives.remove(primitive);\n }\n }\n\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n\n primitive = new GroundPrimitive({\n show: false,\n asynchronous: true,\n geometryInstances: geometries.slice(),\n appearance: new this.appearanceType({\n material: this.material,\n // translucent and closed properties overridden\n }),\n classificationType: this.classificationType,\n });\n\n primitives.add(primitive, this.zIndex);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n primitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n primitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n this.primitive.appearance.material = this.material;\n\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show =\n entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n }\n\n this.updateShows(primitive);\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n if (\n !defined(attributes) ||\n !defined(attributes.boundingSphere) ||\n (defined(attributes.show) && attributes.show[0] === 0)\n ) {\n return BoundingSphereState.FAILED;\n }\n attributes.boundingSphere.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n var primitive = this.primitive;\n var primitives = this.primitives;\n if (defined(primitive)) {\n primitives.remove(primitive);\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n }\n this.removeMaterialSubscription();\n};\n\n/**\n * @private\n */\nfunction StaticGroundGeometryPerMaterialBatch(\n primitives,\n classificationType,\n appearanceType\n) {\n this._items = [];\n this._primitives = primitives;\n this._classificationType = classificationType;\n this._appearanceType = appearanceType;\n}\n\nStaticGroundGeometryPerMaterialBatch.prototype.add = function (time, updater) {\n var items = this._items;\n var length = items.length;\n var geometryInstance = updater.createFillGeometryInstance(time);\n var usingSphericalTextureCoordinates = ShadowVolumeAppearance.shouldUseSphericalCoordinates(\n geometryInstance.geometry.rectangle\n );\n var zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n // Check if the Entity represented by the updater can be placed in an existing batch. Requirements:\n // * compatible material (same material or same color)\n // * same type of texture coordinates (spherical vs. planar)\n // * conservatively non-overlapping with any entities in the existing batch\n for (var i = 0; i < length; ++i) {\n var item = items[i];\n if (\n item.isMaterial(updater) &&\n item.usingSphericalTextureCoordinates ===\n usingSphericalTextureCoordinates &&\n item.zIndex === zIndex &&\n !item.overlapping(geometryInstance.geometry.rectangle)\n ) {\n item.add(time, updater, geometryInstance);\n return;\n }\n }\n // If a compatible batch wasn't found, create a new batch.\n var batch = new Batch(\n this._primitives,\n this._classificationType,\n this._appearanceType,\n updater.fillMaterialProperty,\n usingSphericalTextureCoordinates,\n zIndex\n );\n batch.add(time, updater, geometryInstance);\n items.push(batch);\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.remove = function (updater) {\n var items = this._items;\n var length = items.length;\n for (var i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.remove(updater)) {\n if (item.updaters.length === 0) {\n items.splice(i, 1);\n item.destroy();\n }\n break;\n }\n }\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.update = function (time) {\n var i;\n var items = this._items;\n var length = items.length;\n\n for (i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.invalidated) {\n items.splice(i, 1);\n var updaters = item.updaters.values;\n var updatersLength = updaters.length;\n for (var h = 0; h < updatersLength; h++) {\n this.add(time, updaters[h]);\n }\n item.destroy();\n }\n }\n\n var isUpdated = true;\n for (i = 0; i < items.length; i++) {\n isUpdated = items[i].update(time) && isUpdated;\n }\n return isUpdated;\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.contains(updater)) {\n return item.getBoundingSphere(updater, result);\n }\n }\n return BoundingSphereState.FAILED;\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.removeAllPrimitives = function () {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n items[i].destroy();\n }\n this._items.length = 0;\n};\nexport default StaticGroundGeometryPerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar colorScratch = new Color();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nvar defaultOffset = Cartesian3.ZERO;\nvar offsetScratch = new Cartesian3();\n\nfunction Batch(primitives, translucent, width, shadows) {\n this.translucent = translucent;\n this.width = width;\n this.shadows = shadows;\n this.primitives = primitives;\n this.createPrimitive = false;\n this.waitingOnCreate = false;\n this.primitive = undefined;\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.updaters = new AssociativeArray();\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.itemsToRemove = [];\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n}\nBatch.prototype.add = function (updater, instance) {\n var id = updater.id;\n this.createPrimitive = true;\n this.geometry.set(id, instance);\n this.updaters.set(id, updater);\n if (\n !updater.hasConstantOutline ||\n !updater.outlineColorProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n !Property.isConstant(updater.terrainOffsetProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n this.showsUpdated.remove(id);\n }\n return true;\n }\n return false;\n};\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var removedCount = 0;\n var primitive = this.primitive;\n var primitives = this.primitives;\n var i;\n\n if (this.createPrimitive) {\n var geometries = this.geometry.values;\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n primitives.remove(primitive);\n }\n }\n\n primitive = new Primitive({\n show: false,\n asynchronous: true,\n geometryInstances: geometries.slice(),\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: this.translucent,\n renderState: {\n lineWidth: this.width,\n },\n }),\n shadows: this.shadows,\n });\n\n primitives.add(primitive);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n primitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n this.waitingOnCreate = true;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n primitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n var waitingOnCreate = this.waitingOnCreate;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n if (!updater.outlineColorProperty.isConstant || waitingOnCreate) {\n var outlineColorProperty = updater.outlineColorProperty;\n var outlineColor = Property.getValueOrDefault(\n outlineColorProperty,\n time,\n Color.WHITE,\n colorScratch\n );\n if (!Color.equals(attributes._lastColor, outlineColor)) {\n attributes._lastColor = Color.clone(\n outlineColor,\n attributes._lastColor\n );\n attributes.color = ColorGeometryInstanceAttribute.toValue(\n outlineColor,\n attributes.color\n );\n if (\n (this.translucent && attributes.color[3] === 255) ||\n (!this.translucent && attributes.color[3] !== 255)\n ) {\n this.itemsToRemove[removedCount++] = updater;\n }\n }\n }\n\n var show =\n updater.entity.isShowing &&\n (updater.hasConstantOutline || updater.isOutlineVisible(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n\n var offsetProperty = updater.terrainOffsetProperty;\n if (!Property.isConstant(offsetProperty)) {\n var offset = Property.getValueOrDefault(\n offsetProperty,\n time,\n defaultOffset,\n offsetScratch\n );\n if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n attributes._lastOffset = Cartesian3.clone(\n offset,\n attributes._lastOffset\n );\n attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n offset,\n attributes.offset\n );\n }\n }\n }\n\n this.updateShows(primitive);\n this.waitingOnCreate = false;\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n\n this.itemsToRemove.length = removedCount;\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = updater.entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n if (\n !defined(attributes) ||\n !defined(attributes.boundingSphere) || //\n (defined(attributes.show) && attributes.show[0] === 0)\n ) {\n return BoundingSphereState.FAILED;\n }\n attributes.boundingSphere.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.removeAllPrimitives = function () {\n var primitives = this.primitives;\n\n var primitive = this.primitive;\n if (defined(primitive)) {\n primitives.remove(primitive);\n this.primitive = undefined;\n this.geometry.removeAll();\n this.updaters.removeAll();\n }\n\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n primitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n};\n\n/**\n * @private\n */\nfunction StaticOutlineGeometryBatch(primitives, scene, shadows) {\n this._primitives = primitives;\n this._scene = scene;\n this._shadows = shadows;\n this._solidBatches = new AssociativeArray();\n this._translucentBatches = new AssociativeArray();\n}\nStaticOutlineGeometryBatch.prototype.add = function (time, updater) {\n var instance = updater.createOutlineGeometryInstance(time);\n var width = this._scene.clampLineWidth(updater.outlineWidth);\n var batches;\n var batch;\n if (instance.attributes.color.value[3] === 255) {\n batches = this._solidBatches;\n batch = batches.get(width);\n if (!defined(batch)) {\n batch = new Batch(this._primitives, false, width, this._shadows);\n batches.set(width, batch);\n }\n batch.add(updater, instance);\n } else {\n batches = this._translucentBatches;\n batch = batches.get(width);\n if (!defined(batch)) {\n batch = new Batch(this._primitives, true, width, this._shadows);\n batches.set(width, batch);\n }\n batch.add(updater, instance);\n }\n};\n\nStaticOutlineGeometryBatch.prototype.remove = function (updater) {\n var i;\n\n var solidBatches = this._solidBatches.values;\n var solidBatchesLength = solidBatches.length;\n for (i = 0; i < solidBatchesLength; i++) {\n if (solidBatches[i].remove(updater)) {\n return;\n }\n }\n\n var translucentBatches = this._translucentBatches.values;\n var translucentBatchesLength = translucentBatches.length;\n for (i = 0; i < translucentBatchesLength; i++) {\n if (translucentBatches[i].remove(updater)) {\n return;\n }\n }\n};\n\nStaticOutlineGeometryBatch.prototype.update = function (time) {\n var i;\n var x;\n var updater;\n var batch;\n var solidBatches = this._solidBatches.values;\n var solidBatchesLength = solidBatches.length;\n var translucentBatches = this._translucentBatches.values;\n var translucentBatchesLength = translucentBatches.length;\n var itemsToRemove;\n var isUpdated = true;\n var needUpdate = false;\n\n do {\n needUpdate = false;\n for (x = 0; x < solidBatchesLength; x++) {\n batch = solidBatches[x];\n //Perform initial update\n isUpdated = batch.update(time);\n\n //If any items swapped between solid/translucent, we need to\n //move them between batches\n itemsToRemove = batch.itemsToRemove;\n var solidsToMoveLength = itemsToRemove.length;\n if (solidsToMoveLength > 0) {\n needUpdate = true;\n for (i = 0; i < solidsToMoveLength; i++) {\n updater = itemsToRemove[i];\n batch.remove(updater);\n this.add(time, updater);\n }\n }\n }\n for (x = 0; x < translucentBatchesLength; x++) {\n batch = translucentBatches[x];\n //Perform initial update\n isUpdated = batch.update(time);\n\n //If any items swapped between solid/translucent, we need to\n //move them between batches\n itemsToRemove = batch.itemsToRemove;\n var translucentToMoveLength = itemsToRemove.length;\n if (translucentToMoveLength > 0) {\n needUpdate = true;\n for (i = 0; i < translucentToMoveLength; i++) {\n updater = itemsToRemove[i];\n batch.remove(updater);\n this.add(time, updater);\n }\n }\n }\n } while (needUpdate);\n\n return isUpdated;\n};\n\nStaticOutlineGeometryBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var i;\n\n var solidBatches = this._solidBatches.values;\n var solidBatchesLength = solidBatches.length;\n for (i = 0; i < solidBatchesLength; i++) {\n var solidBatch = solidBatches[i];\n if (solidBatch.contains(updater)) {\n return solidBatch.getBoundingSphere(updater, result);\n }\n }\n\n var translucentBatches = this._translucentBatches.values;\n var translucentBatchesLength = translucentBatches.length;\n for (i = 0; i < translucentBatchesLength; i++) {\n var translucentBatch = translucentBatches[i];\n if (translucentBatch.contains(updater)) {\n return translucentBatch.getBoundingSphere(updater, result);\n }\n }\n\n return BoundingSphereState.FAILED;\n};\n\nStaticOutlineGeometryBatch.prototype.removeAllPrimitives = function () {\n var i;\n\n var solidBatches = this._solidBatches.values;\n var solidBatchesLength = solidBatches.length;\n for (i = 0; i < solidBatchesLength; i++) {\n solidBatches[i].removeAllPrimitives();\n }\n\n var translucentBatches = this._translucentBatches.values;\n var translucentBatchesLength = translucentBatches.length;\n for (i = 0; i < translucentBatchesLength; i++) {\n translucentBatches[i].removeAllPrimitives();\n }\n};\nexport default StaticOutlineGeometryBatch;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport WallGeometry from \"../Core/WallGeometry.js\";\nimport WallOutlineGeometry from \"../Core/WallOutlineGeometry.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\n\nfunction WallGeometryOptions(entity) {\n this.id = entity;\n this.vertexFormat = undefined;\n this.positions = undefined;\n this.minimumHeights = undefined;\n this.maximumHeights = undefined;\n this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for walls.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias WallGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction WallGeometryUpdater(entity, scene) {\n GeometryUpdater.call(this, {\n entity: entity,\n scene: scene,\n geometryOptions: new WallGeometryOptions(entity),\n geometryPropertyName: \"wall\",\n observedPropertyNames: [\"availability\", \"wall\"],\n });\n\n this._onEntityPropertyChanged(entity, \"wall\", entity.wall, undefined);\n}\n\nif (defined(Object.create)) {\n WallGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n WallGeometryUpdater.prototype.constructor = WallGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nWallGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n\n var attributes;\n\n var color;\n var show = new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._fillProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n if (this._materialProperty instanceof ColorMaterialProperty) {\n var currentColor;\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n color: color,\n };\n } else {\n attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n };\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new WallGeometry(this._options),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nWallGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n\n if (!this._outlineEnabled) {\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var outlineColor = Property.getValueOrDefault(\n this._outlineColorProperty,\n time,\n Color.BLACK,\n scratchColor\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n\n return new GeometryInstance({\n id: entity,\n geometry: new WallOutlineGeometry(this._options),\n attributes: {\n show: new ShowGeometryInstanceAttribute(\n isAvailable &&\n entity.isShowing &&\n this._showProperty.getValue(time) &&\n this._showOutlineProperty.getValue(time)\n ),\n color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n distanceDisplayCondition: DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n ),\n },\n });\n};\n\nWallGeometryUpdater.prototype._isHidden = function (entity, wall) {\n return (\n !defined(wall.positions) ||\n GeometryUpdater.prototype._isHidden.call(this, entity, wall)\n );\n};\n\nWallGeometryUpdater.prototype._getIsClosed = function (options) {\n return false;\n};\n\nWallGeometryUpdater.prototype._isDynamic = function (entity, wall) {\n return (\n !wall.positions.isConstant || //\n !Property.isConstant(wall.minimumHeights) || //\n !Property.isConstant(wall.maximumHeights) || //\n !Property.isConstant(wall.outlineWidth) || //\n !Property.isConstant(wall.granularity)\n );\n};\n\nWallGeometryUpdater.prototype._setStaticOptions = function (entity, wall) {\n var minimumHeights = wall.minimumHeights;\n var maximumHeights = wall.maximumHeights;\n var granularity = wall.granularity;\n var isColorMaterial = this._materialProperty instanceof ColorMaterialProperty;\n\n var options = this._options;\n options.vertexFormat = isColorMaterial\n ? PerInstanceColorAppearance.VERTEX_FORMAT\n : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n options.positions = wall.positions.getValue(\n Iso8601.MINIMUM_VALUE,\n options.positions\n );\n options.minimumHeights = defined(minimumHeights)\n ? minimumHeights.getValue(Iso8601.MINIMUM_VALUE, options.minimumHeights)\n : undefined;\n options.maximumHeights = defined(maximumHeights)\n ? maximumHeights.getValue(Iso8601.MINIMUM_VALUE, options.maximumHeights)\n : undefined;\n options.granularity = defined(granularity)\n ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n};\n\nWallGeometryUpdater.DynamicGeometryUpdater = DynamicWallGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicWallGeometryUpdater(\n geometryUpdater,\n primitives,\n groundPrimitives\n) {\n DynamicGeometryUpdater.call(\n this,\n geometryUpdater,\n primitives,\n groundPrimitives\n );\n}\n\nif (defined(Object.create)) {\n DynamicWallGeometryUpdater.prototype = Object.create(\n DynamicGeometryUpdater.prototype\n );\n DynamicWallGeometryUpdater.prototype.constructor = DynamicWallGeometryUpdater;\n}\n\nDynamicWallGeometryUpdater.prototype._isHidden = function (entity, wall, time) {\n return (\n !defined(this._options.positions) ||\n DynamicGeometryUpdater.prototype._isHidden.call(this, entity, wall, time)\n );\n};\n\nDynamicWallGeometryUpdater.prototype._setOptions = function (\n entity,\n wall,\n time\n) {\n var options = this._options;\n options.positions = Property.getValueOrUndefined(\n wall.positions,\n time,\n options.positions\n );\n options.minimumHeights = Property.getValueOrUndefined(\n wall.minimumHeights,\n time,\n options.minimumHeights\n );\n options.maximumHeights = Property.getValueOrUndefined(\n wall.maximumHeights,\n time,\n options.maximumHeights\n );\n options.granularity = Property.getValueOrUndefined(wall.granularity, time);\n};\nexport default WallGeometryUpdater;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport BoxGeometryUpdater from \"./BoxGeometryUpdater.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport CorridorGeometryUpdater from \"./CorridorGeometryUpdater.js\";\nimport CylinderGeometryUpdater from \"./CylinderGeometryUpdater.js\";\nimport DynamicGeometryBatch from \"./DynamicGeometryBatch.js\";\nimport EllipseGeometryUpdater from \"./EllipseGeometryUpdater.js\";\nimport EllipsoidGeometryUpdater from \"./EllipsoidGeometryUpdater.js\";\nimport Entity from \"./Entity.js\";\nimport PlaneGeometryUpdater from \"./PlaneGeometryUpdater.js\";\nimport PolygonGeometryUpdater from \"./PolygonGeometryUpdater.js\";\nimport PolylineVolumeGeometryUpdater from \"./PolylineVolumeGeometryUpdater.js\";\nimport RectangleGeometryUpdater from \"./RectangleGeometryUpdater.js\";\nimport StaticGeometryColorBatch from \"./StaticGeometryColorBatch.js\";\nimport StaticGeometryPerMaterialBatch from \"./StaticGeometryPerMaterialBatch.js\";\nimport StaticGroundGeometryColorBatch from \"./StaticGroundGeometryColorBatch.js\";\nimport StaticGroundGeometryPerMaterialBatch from \"./StaticGroundGeometryPerMaterialBatch.js\";\nimport StaticOutlineGeometryBatch from \"./StaticOutlineGeometryBatch.js\";\nimport WallGeometryUpdater from \"./WallGeometryUpdater.js\";\n\nvar emptyArray = [];\n\nvar geometryUpdaters = [\n BoxGeometryUpdater,\n CylinderGeometryUpdater,\n CorridorGeometryUpdater,\n EllipseGeometryUpdater,\n EllipsoidGeometryUpdater,\n PlaneGeometryUpdater,\n PolygonGeometryUpdater,\n PolylineVolumeGeometryUpdater,\n RectangleGeometryUpdater,\n WallGeometryUpdater,\n];\n\nfunction GeometryUpdaterSet(entity, scene) {\n this.entity = entity;\n this.scene = scene;\n var updaters = new Array(geometryUpdaters.length);\n var geometryChanged = new Event();\n function raiseEvent(geometry) {\n geometryChanged.raiseEvent(geometry);\n }\n var eventHelper = new EventHelper();\n for (var i = 0; i < updaters.length; i++) {\n var updater = new geometryUpdaters[i](entity, scene);\n eventHelper.add(updater.geometryChanged, raiseEvent);\n updaters[i] = updater;\n }\n this.updaters = updaters;\n this.geometryChanged = geometryChanged;\n this.eventHelper = eventHelper;\n\n this._removeEntitySubscription = entity.definitionChanged.addEventListener(\n GeometryUpdaterSet.prototype._onEntityPropertyChanged,\n this\n );\n}\n\nGeometryUpdaterSet.prototype._onEntityPropertyChanged = function (\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n var updaters = this.updaters;\n for (var i = 0; i < updaters.length; i++) {\n updaters[i]._onEntityPropertyChanged(\n entity,\n propertyName,\n newValue,\n oldValue\n );\n }\n};\n\nGeometryUpdaterSet.prototype.forEach = function (callback) {\n var updaters = this.updaters;\n for (var i = 0; i < updaters.length; i++) {\n callback(updaters[i]);\n }\n};\n\nGeometryUpdaterSet.prototype.destroy = function () {\n this.eventHelper.removeAll();\n var updaters = this.updaters;\n for (var i = 0; i < updaters.length; i++) {\n updaters[i].destroy();\n }\n this._removeEntitySubscription();\n destroyObject(this);\n};\n\n/**\n * A general purpose visualizer for geometry represented by {@link Primitive} instances.\n * @alias GeometryVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n * @param {PrimitiveCollection} [primitives=scene.primitives] A collection to add primitives related to the entities\n * @param {PrimitiveCollection} [groundPrimitives=scene.groundPrimitives] A collection to add ground primitives related to the entities\n */\nfunction GeometryVisualizer(\n scene,\n entityCollection,\n primitives,\n groundPrimitives\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"scene\", scene);\n Check.defined(\"entityCollection\", entityCollection);\n //>>includeEnd('debug');\n\n primitives = defaultValue(primitives, scene.primitives);\n groundPrimitives = defaultValue(groundPrimitives, scene.groundPrimitives);\n\n this._scene = scene;\n this._primitives = primitives;\n this._groundPrimitives = groundPrimitives;\n this._entityCollection = undefined;\n this._addedObjects = new AssociativeArray();\n this._removedObjects = new AssociativeArray();\n this._changedObjects = new AssociativeArray();\n\n var numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n this._outlineBatches = new Array(numberOfShadowModes * 2);\n this._closedColorBatches = new Array(numberOfShadowModes * 2);\n this._closedMaterialBatches = new Array(numberOfShadowModes * 2);\n this._openColorBatches = new Array(numberOfShadowModes * 2);\n this._openMaterialBatches = new Array(numberOfShadowModes * 2);\n\n var supportsMaterialsforEntitiesOnTerrain = Entity.supportsMaterialsforEntitiesOnTerrain(\n scene\n );\n this._supportsMaterialsforEntitiesOnTerrain = supportsMaterialsforEntitiesOnTerrain;\n\n var i;\n for (i = 0; i < numberOfShadowModes; ++i) {\n this._outlineBatches[i] = new StaticOutlineGeometryBatch(\n primitives,\n scene,\n i,\n false\n );\n this._outlineBatches[\n numberOfShadowModes + i\n ] = new StaticOutlineGeometryBatch(primitives, scene, i, true);\n\n this._closedColorBatches[i] = new StaticGeometryColorBatch(\n primitives,\n PerInstanceColorAppearance,\n undefined,\n true,\n i,\n true\n );\n this._closedColorBatches[\n numberOfShadowModes + i\n ] = new StaticGeometryColorBatch(\n primitives,\n PerInstanceColorAppearance,\n undefined,\n true,\n i,\n false\n );\n\n this._closedMaterialBatches[i] = new StaticGeometryPerMaterialBatch(\n primitives,\n MaterialAppearance,\n undefined,\n true,\n i,\n true\n );\n this._closedMaterialBatches[\n numberOfShadowModes + i\n ] = new StaticGeometryPerMaterialBatch(\n primitives,\n MaterialAppearance,\n undefined,\n true,\n i,\n false\n );\n\n this._openColorBatches[i] = new StaticGeometryColorBatch(\n primitives,\n PerInstanceColorAppearance,\n undefined,\n false,\n i,\n true\n );\n this._openColorBatches[\n numberOfShadowModes + i\n ] = new StaticGeometryColorBatch(\n primitives,\n PerInstanceColorAppearance,\n undefined,\n false,\n i,\n false\n );\n\n this._openMaterialBatches[i] = new StaticGeometryPerMaterialBatch(\n primitives,\n MaterialAppearance,\n undefined,\n false,\n i,\n true\n );\n this._openMaterialBatches[\n numberOfShadowModes + i\n ] = new StaticGeometryPerMaterialBatch(\n primitives,\n MaterialAppearance,\n undefined,\n false,\n i,\n false\n );\n }\n\n var numberOfClassificationTypes =\n ClassificationType.NUMBER_OF_CLASSIFICATION_TYPES;\n var groundColorBatches = new Array(numberOfClassificationTypes);\n var groundMaterialBatches = [];\n if (supportsMaterialsforEntitiesOnTerrain) {\n for (i = 0; i < numberOfClassificationTypes; ++i) {\n groundMaterialBatches.push(\n new StaticGroundGeometryPerMaterialBatch(\n groundPrimitives,\n i,\n MaterialAppearance\n )\n );\n groundColorBatches[i] = new StaticGroundGeometryColorBatch(\n groundPrimitives,\n i\n );\n }\n } else {\n for (i = 0; i < numberOfClassificationTypes; ++i) {\n groundColorBatches[i] = new StaticGroundGeometryColorBatch(\n groundPrimitives,\n i\n );\n }\n }\n\n this._groundColorBatches = groundColorBatches;\n this._groundMaterialBatches = groundMaterialBatches;\n\n this._dynamicBatch = new DynamicGeometryBatch(primitives, groundPrimitives);\n\n this._batches = this._outlineBatches.concat(\n this._closedColorBatches,\n this._closedMaterialBatches,\n this._openColorBatches,\n this._openMaterialBatches,\n this._groundColorBatches,\n this._groundMaterialBatches,\n this._dynamicBatch\n );\n\n this._subscriptions = new AssociativeArray();\n this._updaterSets = new AssociativeArray();\n\n this._entityCollection = entityCollection;\n entityCollection.collectionChanged.addEventListener(\n GeometryVisualizer.prototype._onCollectionChanged,\n this\n );\n this._onCollectionChanged(\n entityCollection,\n entityCollection.values,\n emptyArray\n );\n}\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} True if the visualizer successfully updated to the provided time,\n * false if the visualizer is waiting for asynchronous primitives to be created.\n */\nGeometryVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var addedObjects = this._addedObjects;\n var added = addedObjects.values;\n var removedObjects = this._removedObjects;\n var removed = removedObjects.values;\n var changedObjects = this._changedObjects;\n var changed = changedObjects.values;\n\n var i;\n var entity;\n var id;\n var updaterSet;\n var that = this;\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n id = entity.id;\n updaterSet = this._updaterSets.get(id);\n\n //If in a single update, an entity gets removed and a new instance\n //re-added with the same id, the updater no longer tracks the\n //correct entity, we need to both remove the old one and\n //add the new one, which is done by pushing the entity\n //onto the removed/added lists.\n if (updaterSet.entity === entity) {\n updaterSet.forEach(function (updater) {\n that._removeUpdater(updater);\n that._insertUpdaterIntoBatch(time, updater);\n });\n } else {\n removed.push(entity);\n added.push(entity);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n id = entity.id;\n updaterSet = this._updaterSets.get(id);\n updaterSet.forEach(this._removeUpdater.bind(this));\n updaterSet.destroy();\n this._updaterSets.remove(id);\n this._subscriptions.get(id)();\n this._subscriptions.remove(id);\n }\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n id = entity.id;\n updaterSet = new GeometryUpdaterSet(entity, this._scene);\n this._updaterSets.set(id, updaterSet);\n updaterSet.forEach(function (updater) {\n that._insertUpdaterIntoBatch(time, updater);\n });\n this._subscriptions.set(\n id,\n updaterSet.geometryChanged.addEventListener(\n GeometryVisualizer._onGeometryChanged,\n this\n )\n );\n }\n\n addedObjects.removeAll();\n removedObjects.removeAll();\n changedObjects.removeAll();\n\n var isUpdated = true;\n var batches = this._batches;\n var length = batches.length;\n for (i = 0; i < length; i++) {\n isUpdated = batches[i].update(time) && isUpdated;\n }\n\n return isUpdated;\n};\n\nvar getBoundingSphereArrayScratch = [];\nvar getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nGeometryVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"entity\", entity);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n var boundingSpheres = getBoundingSphereArrayScratch;\n var tmp = getBoundingSphereBoundingSphereScratch;\n\n var count = 0;\n var state = BoundingSphereState.DONE;\n var batches = this._batches;\n var batchesLength = batches.length;\n\n var id = entity.id;\n var updaters = this._updaterSets.get(id).updaters;\n\n for (var j = 0; j < updaters.length; j++) {\n var updater = updaters[j];\n for (var i = 0; i < batchesLength; i++) {\n state = batches[i].getBoundingSphere(updater, tmp);\n if (state === BoundingSphereState.PENDING) {\n return BoundingSphereState.PENDING;\n } else if (state === BoundingSphereState.DONE) {\n boundingSpheres[count] = BoundingSphere.clone(\n tmp,\n boundingSpheres[count]\n );\n count++;\n }\n }\n }\n\n if (count === 0) {\n return BoundingSphereState.FAILED;\n }\n\n boundingSpheres.length = count;\n BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nGeometryVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nGeometryVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n GeometryVisualizer.prototype._onCollectionChanged,\n this\n );\n this._addedObjects.removeAll();\n this._removedObjects.removeAll();\n\n var i;\n var batches = this._batches;\n var length = batches.length;\n for (i = 0; i < length; i++) {\n batches[i].removeAllPrimitives();\n }\n\n var subscriptions = this._subscriptions.values;\n length = subscriptions.length;\n for (i = 0; i < length; i++) {\n subscriptions[i]();\n }\n this._subscriptions.removeAll();\n\n var updaterSets = this._updaterSets.values;\n length = updaterSets.length;\n for (i = 0; i < length; i++) {\n updaterSets[i].destroy();\n }\n this._updaterSets.removeAll();\n return destroyObject(this);\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._removeUpdater = function (updater) {\n //We don't keep track of which batch an updater is in, so just remove it from all of them.\n var batches = this._batches;\n var length = batches.length;\n for (var i = 0; i < length; i++) {\n batches[i].remove(updater);\n }\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._insertUpdaterIntoBatch = function (\n time,\n updater\n) {\n if (updater.isDynamic) {\n this._dynamicBatch.add(time, updater);\n return;\n }\n\n var shadows;\n if (updater.outlineEnabled || updater.fillEnabled) {\n shadows = updater.shadowsProperty.getValue(time);\n }\n\n var numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n if (updater.outlineEnabled) {\n if (defined(updater.terrainOffsetProperty)) {\n this._outlineBatches[numberOfShadowModes + shadows].add(time, updater);\n } else {\n this._outlineBatches[shadows].add(time, updater);\n }\n }\n\n if (updater.fillEnabled) {\n if (updater.onTerrain) {\n var classificationType = updater.classificationTypeProperty.getValue(\n time\n );\n if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n this._groundColorBatches[classificationType].add(time, updater);\n } else {\n // If unsupported, updater will not be on terrain.\n this._groundMaterialBatches[classificationType].add(time, updater);\n }\n } else if (updater.isClosed) {\n if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n if (defined(updater.terrainOffsetProperty)) {\n this._closedColorBatches[numberOfShadowModes + shadows].add(\n time,\n updater\n );\n } else {\n this._closedColorBatches[shadows].add(time, updater);\n }\n } else if (defined(updater.terrainOffsetProperty)) {\n this._closedMaterialBatches[numberOfShadowModes + shadows].add(\n time,\n updater\n );\n } else {\n this._closedMaterialBatches[shadows].add(time, updater);\n }\n } else if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n if (defined(updater.terrainOffsetProperty)) {\n this._openColorBatches[numberOfShadowModes + shadows].add(\n time,\n updater\n );\n } else {\n this._openColorBatches[shadows].add(time, updater);\n }\n } else if (defined(updater.terrainOffsetProperty)) {\n this._openMaterialBatches[numberOfShadowModes + shadows].add(\n time,\n updater\n );\n } else {\n this._openMaterialBatches[shadows].add(time, updater);\n }\n }\n};\n\n/**\n * @private\n */\nGeometryVisualizer._onGeometryChanged = function (updater) {\n var removedObjects = this._removedObjects;\n var changedObjects = this._changedObjects;\n\n var entity = updater.entity;\n var id = entity.id;\n\n if (!defined(removedObjects.get(id)) && !defined(changedObjects.get(id))) {\n changedObjects.set(id, entity);\n }\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed\n) {\n var addedObjects = this._addedObjects;\n var removedObjects = this._removedObjects;\n var changedObjects = this._changedObjects;\n\n var i;\n var id;\n var entity;\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n id = entity.id;\n if (!addedObjects.remove(id)) {\n removedObjects.set(id, entity);\n changedObjects.remove(id);\n }\n }\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n id = entity.id;\n if (removedObjects.remove(id)) {\n changedObjects.set(id, entity);\n } else {\n addedObjects.set(id, entity);\n }\n }\n};\nexport default GeometryVisualizer;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar defaultScale = 1.0;\nvar defaultFont = \"30px sans-serif\";\nvar defaultStyle = LabelStyle.FILL;\nvar defaultFillColor = Color.WHITE;\nvar defaultOutlineColor = Color.BLACK;\nvar defaultOutlineWidth = 1.0;\nvar defaultShowBackground = false;\nvar defaultBackgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\nvar defaultBackgroundPadding = new Cartesian2(7, 5);\nvar defaultPixelOffset = Cartesian2.ZERO;\nvar defaultEyeOffset = Cartesian3.ZERO;\nvar defaultHeightReference = HeightReference.NONE;\nvar defaultHorizontalOrigin = HorizontalOrigin.CENTER;\nvar defaultVerticalOrigin = VerticalOrigin.CENTER;\n\nvar positionScratch = new Cartesian3();\nvar fillColorScratch = new Color();\nvar outlineColorScratch = new Color();\nvar backgroundColorScratch = new Color();\nvar backgroundPaddingScratch = new Cartesian2();\nvar eyeOffsetScratch = new Cartesian3();\nvar pixelOffsetScratch = new Cartesian2();\nvar translucencyByDistanceScratch = new NearFarScalar();\nvar pixelOffsetScaleByDistanceScratch = new NearFarScalar();\nvar scaleByDistanceScratch = new NearFarScalar();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n this.entity = entity;\n this.label = undefined;\n this.index = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps the {@link LabelGraphics} instance\n * in {@link Entity#label} to a {@link Label}.\n * @alias LabelVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction LabelVisualizer(entityCluster, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entityCluster)) {\n throw new DeveloperError(\"entityCluster is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n LabelVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._cluster = entityCluster;\n this._entityCollection = entityCollection;\n this._items = new AssociativeArray();\n\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nLabelVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var items = this._items.values;\n var cluster = this._cluster;\n\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n var entity = item.entity;\n var labelGraphics = entity._label;\n var text;\n var label = item.label;\n var show =\n entity.isShowing &&\n entity.isAvailable(time) &&\n Property.getValueOrDefault(labelGraphics._show, time, true);\n var position;\n if (show) {\n position = Property.getValueOrUndefined(\n entity._position,\n time,\n positionScratch\n );\n text = Property.getValueOrUndefined(labelGraphics._text, time);\n show = defined(position) && defined(text);\n }\n\n if (!show) {\n //don't bother creating or updating anything else\n returnPrimitive(item, entity, cluster);\n continue;\n }\n\n if (!Property.isConstant(entity._position)) {\n cluster._clusterDirty = true;\n }\n\n var updateClamping = false;\n var heightReference = Property.getValueOrDefault(\n labelGraphics._heightReference,\n time,\n defaultHeightReference\n );\n\n if (!defined(label)) {\n label = cluster.getLabel(entity);\n label.id = entity;\n item.label = label;\n\n // If this new label happens to have a position and height reference that match our new values,\n // label._updateClamping will not be called automatically. That's a problem because the clamped\n // height may be based on different terrain than is now loaded. So we'll manually call\n // _updateClamping below.\n updateClamping =\n Cartesian3.equals(label.position, position) &&\n label.heightReference === heightReference;\n }\n\n label.show = true;\n label.position = position;\n label.text = text;\n label.scale = Property.getValueOrDefault(\n labelGraphics._scale,\n time,\n defaultScale\n );\n label.font = Property.getValueOrDefault(\n labelGraphics._font,\n time,\n defaultFont\n );\n label.style = Property.getValueOrDefault(\n labelGraphics._style,\n time,\n defaultStyle\n );\n label.fillColor = Property.getValueOrDefault(\n labelGraphics._fillColor,\n time,\n defaultFillColor,\n fillColorScratch\n );\n label.outlineColor = Property.getValueOrDefault(\n labelGraphics._outlineColor,\n time,\n defaultOutlineColor,\n outlineColorScratch\n );\n label.outlineWidth = Property.getValueOrDefault(\n labelGraphics._outlineWidth,\n time,\n defaultOutlineWidth\n );\n label.showBackground = Property.getValueOrDefault(\n labelGraphics._showBackground,\n time,\n defaultShowBackground\n );\n label.backgroundColor = Property.getValueOrDefault(\n labelGraphics._backgroundColor,\n time,\n defaultBackgroundColor,\n backgroundColorScratch\n );\n label.backgroundPadding = Property.getValueOrDefault(\n labelGraphics._backgroundPadding,\n time,\n defaultBackgroundPadding,\n backgroundPaddingScratch\n );\n label.pixelOffset = Property.getValueOrDefault(\n labelGraphics._pixelOffset,\n time,\n defaultPixelOffset,\n pixelOffsetScratch\n );\n label.eyeOffset = Property.getValueOrDefault(\n labelGraphics._eyeOffset,\n time,\n defaultEyeOffset,\n eyeOffsetScratch\n );\n label.heightReference = heightReference;\n label.horizontalOrigin = Property.getValueOrDefault(\n labelGraphics._horizontalOrigin,\n time,\n defaultHorizontalOrigin\n );\n label.verticalOrigin = Property.getValueOrDefault(\n labelGraphics._verticalOrigin,\n time,\n defaultVerticalOrigin\n );\n label.translucencyByDistance = Property.getValueOrUndefined(\n labelGraphics._translucencyByDistance,\n time,\n translucencyByDistanceScratch\n );\n label.pixelOffsetScaleByDistance = Property.getValueOrUndefined(\n labelGraphics._pixelOffsetScaleByDistance,\n time,\n pixelOffsetScaleByDistanceScratch\n );\n label.scaleByDistance = Property.getValueOrUndefined(\n labelGraphics._scaleByDistance,\n time,\n scaleByDistanceScratch\n );\n label.distanceDisplayCondition = Property.getValueOrUndefined(\n labelGraphics._distanceDisplayCondition,\n time,\n distanceDisplayConditionScratch\n );\n label.disableDepthTestDistance = Property.getValueOrUndefined(\n labelGraphics._disableDepthTestDistance,\n time\n );\n\n if (updateClamping) {\n label._updateClamping();\n }\n }\n return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nLabelVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var item = this._items.get(entity.id);\n if (!defined(item) || !defined(item.label)) {\n return BoundingSphereState.FAILED;\n }\n\n var label = item.label;\n result.center = Cartesian3.clone(\n defaultValue(label._clampedPosition, label.position),\n result.center\n );\n result.radius = 0;\n return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nLabelVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nLabelVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n LabelVisualizer.prototype._onCollectionChanged,\n this\n );\n var entities = this._entityCollection.values;\n for (var i = 0; i < entities.length; i++) {\n this._cluster.removeLabel(entities[i]);\n }\n return destroyObject(this);\n};\n\nLabelVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var items = this._items;\n var cluster = this._cluster;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._label) && defined(entity._position)) {\n items.set(entity.id, new EntityData(entity));\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._label) && defined(entity._position)) {\n if (!items.contains(entity.id)) {\n items.set(entity.id, new EntityData(entity));\n }\n } else {\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n if (defined(item)) {\n item.label = undefined;\n cluster.removeLabel(entity);\n }\n}\nexport default LabelVisualizer;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ColorBlendMode from \"../Scene/ColorBlendMode.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport Model from \"../Scene/Model.js\";\nimport ModelAnimationLoop from \"../Scene/ModelAnimationLoop.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar defaultScale = 1.0;\nvar defaultMinimumPixelSize = 0.0;\nvar defaultIncrementallyLoadTextures = true;\nvar defaultClampAnimations = true;\nvar defaultShadows = ShadowMode.ENABLED;\nvar defaultHeightReference = HeightReference.NONE;\nvar defaultSilhouetteColor = Color.RED;\nvar defaultSilhouetteSize = 0.0;\nvar defaultColor = Color.WHITE;\nvar defaultColorBlendMode = ColorBlendMode.HIGHLIGHT;\nvar defaultColorBlendAmount = 0.5;\nvar defaultImageBasedLightingFactor = new Cartesian2(1.0, 1.0);\n\nvar modelMatrixScratch = new Matrix4();\nvar nodeMatrixScratch = new Matrix4();\n\n/**\n * A {@link Visualizer} which maps {@link Entity#model} to a {@link Model}.\n * @alias ModelVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction ModelVisualizer(scene, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n ModelVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._scene = scene;\n this._primitives = scene.primitives;\n this._entityCollection = entityCollection;\n this._modelHash = {};\n this._entitiesToVisualize = new AssociativeArray();\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates models created this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nModelVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var entities = this._entitiesToVisualize.values;\n var modelHash = this._modelHash;\n var primitives = this._primitives;\n\n for (var i = 0, len = entities.length; i < len; i++) {\n var entity = entities[i];\n var modelGraphics = entity._model;\n\n var resource;\n var modelData = modelHash[entity.id];\n var show =\n entity.isShowing &&\n entity.isAvailable(time) &&\n Property.getValueOrDefault(modelGraphics._show, time, true);\n\n var modelMatrix;\n if (show) {\n modelMatrix = entity.computeModelMatrix(time, modelMatrixScratch);\n resource = Resource.createIfNeeded(\n Property.getValueOrUndefined(modelGraphics._uri, time)\n );\n show = defined(modelMatrix) && defined(resource);\n }\n\n if (!show) {\n if (defined(modelData)) {\n modelData.modelPrimitive.show = false;\n }\n continue;\n }\n\n var model = defined(modelData) ? modelData.modelPrimitive : undefined;\n if (!defined(model) || resource.url !== modelData.url) {\n if (defined(model)) {\n primitives.removeAndDestroy(model);\n delete modelHash[entity.id];\n }\n model = Model.fromGltf({\n url: resource,\n incrementallyLoadTextures: Property.getValueOrDefault(\n modelGraphics._incrementallyLoadTextures,\n time,\n defaultIncrementallyLoadTextures\n ),\n scene: this._scene,\n });\n model.id = entity;\n primitives.add(model);\n\n modelData = {\n modelPrimitive: model,\n url: resource.url,\n animationsRunning: false,\n nodeTransformationsScratch: {},\n articulationsScratch: {},\n loadFail: false,\n };\n modelHash[entity.id] = modelData;\n\n checkModelLoad(model, entity, modelHash);\n }\n\n model.show = true;\n model.scale = Property.getValueOrDefault(\n modelGraphics._scale,\n time,\n defaultScale\n );\n model.minimumPixelSize = Property.getValueOrDefault(\n modelGraphics._minimumPixelSize,\n time,\n defaultMinimumPixelSize\n );\n model.maximumScale = Property.getValueOrUndefined(\n modelGraphics._maximumScale,\n time\n );\n model.modelMatrix = Matrix4.clone(modelMatrix, model.modelMatrix);\n model.shadows = Property.getValueOrDefault(\n modelGraphics._shadows,\n time,\n defaultShadows\n );\n model.heightReference = Property.getValueOrDefault(\n modelGraphics._heightReference,\n time,\n defaultHeightReference\n );\n model.distanceDisplayCondition = Property.getValueOrUndefined(\n modelGraphics._distanceDisplayCondition,\n time\n );\n model.silhouetteColor = Property.getValueOrDefault(\n modelGraphics._silhouetteColor,\n time,\n defaultSilhouetteColor,\n model._silhouetteColor\n );\n model.silhouetteSize = Property.getValueOrDefault(\n modelGraphics._silhouetteSize,\n time,\n defaultSilhouetteSize\n );\n model.color = Property.getValueOrDefault(\n modelGraphics._color,\n time,\n defaultColor,\n model._color\n );\n model.colorBlendMode = Property.getValueOrDefault(\n modelGraphics._colorBlendMode,\n time,\n defaultColorBlendMode\n );\n model.colorBlendAmount = Property.getValueOrDefault(\n modelGraphics._colorBlendAmount,\n time,\n defaultColorBlendAmount\n );\n model.clippingPlanes = Property.getValueOrUndefined(\n modelGraphics._clippingPlanes,\n time\n );\n model.clampAnimations = Property.getValueOrDefault(\n modelGraphics._clampAnimations,\n time,\n defaultClampAnimations\n );\n model.imageBasedLightingFactor = Property.getValueOrDefault(\n modelGraphics._imageBasedLightingFactor,\n time,\n defaultImageBasedLightingFactor\n );\n model.lightColor = Property.getValueOrUndefined(\n modelGraphics._lightColor,\n time\n );\n\n if (model.ready) {\n var runAnimations = Property.getValueOrDefault(\n modelGraphics._runAnimations,\n time,\n true\n );\n if (modelData.animationsRunning !== runAnimations) {\n if (runAnimations) {\n model.activeAnimations.addAll({\n loop: ModelAnimationLoop.REPEAT,\n });\n } else {\n model.activeAnimations.removeAll();\n }\n modelData.animationsRunning = runAnimations;\n }\n\n // Apply node transformations\n var nodeTransformations = Property.getValueOrUndefined(\n modelGraphics._nodeTransformations,\n time,\n modelData.nodeTransformationsScratch\n );\n if (defined(nodeTransformations)) {\n var nodeNames = Object.keys(nodeTransformations);\n for (\n var nodeIndex = 0, nodeLength = nodeNames.length;\n nodeIndex < nodeLength;\n ++nodeIndex\n ) {\n var nodeName = nodeNames[nodeIndex];\n\n var nodeTransformation = nodeTransformations[nodeName];\n if (!defined(nodeTransformation)) {\n continue;\n }\n\n var modelNode = model.getNode(nodeName);\n if (!defined(modelNode)) {\n continue;\n }\n\n var transformationMatrix = Matrix4.fromTranslationRotationScale(\n nodeTransformation,\n nodeMatrixScratch\n );\n modelNode.matrix = Matrix4.multiply(\n modelNode.originalMatrix,\n transformationMatrix,\n transformationMatrix\n );\n }\n }\n\n // Apply articulations\n var anyArticulationUpdated = false;\n var articulations = Property.getValueOrUndefined(\n modelGraphics._articulations,\n time,\n modelData.articulationsScratch\n );\n if (defined(articulations)) {\n var articulationStageKeys = Object.keys(articulations);\n for (\n var s = 0, numKeys = articulationStageKeys.length;\n s < numKeys;\n ++s\n ) {\n var key = articulationStageKeys[s];\n\n var articulationStageValue = articulations[key];\n if (!defined(articulationStageValue)) {\n continue;\n }\n\n anyArticulationUpdated = true;\n model.setArticulationStage(key, articulationStageValue);\n }\n }\n\n if (anyArticulationUpdated) {\n model.applyArticulations();\n }\n }\n }\n\n return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nModelVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nModelVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n ModelVisualizer.prototype._onCollectionChanged,\n this\n );\n var entities = this._entitiesToVisualize.values;\n var modelHash = this._modelHash;\n var primitives = this._primitives;\n for (var i = entities.length - 1; i > -1; i--) {\n removeModel(this, entities[i], modelHash, primitives);\n }\n return destroyObject(this);\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nModelVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var modelData = this._modelHash[entity.id];\n if (!defined(modelData) || modelData.loadFail) {\n return BoundingSphereState.FAILED;\n }\n\n var model = modelData.modelPrimitive;\n if (!defined(model) || !model.show) {\n return BoundingSphereState.FAILED;\n }\n\n if (!model.ready) {\n return BoundingSphereState.PENDING;\n }\n\n if (model.heightReference === HeightReference.NONE) {\n BoundingSphere.transform(model.boundingSphere, model.modelMatrix, result);\n } else {\n if (!defined(model._clampedModelMatrix)) {\n return BoundingSphereState.PENDING;\n }\n BoundingSphere.transform(\n model.boundingSphere,\n model._clampedModelMatrix,\n result\n );\n }\n return BoundingSphereState.DONE;\n};\n\n/**\n * @private\n */\nModelVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var entities = this._entitiesToVisualize;\n var modelHash = this._modelHash;\n var primitives = this._primitives;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._model) && defined(entity._position)) {\n entities.set(entity.id, entity);\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._model) && defined(entity._position)) {\n clearNodeTransformationsArticulationsScratch(entity, modelHash);\n entities.set(entity.id, entity);\n } else {\n removeModel(this, entity, modelHash, primitives);\n entities.remove(entity.id);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n removeModel(this, entity, modelHash, primitives);\n entities.remove(entity.id);\n }\n};\n\nfunction removeModel(visualizer, entity, modelHash, primitives) {\n var modelData = modelHash[entity.id];\n if (defined(modelData)) {\n primitives.removeAndDestroy(modelData.modelPrimitive);\n delete modelHash[entity.id];\n }\n}\n\nfunction clearNodeTransformationsArticulationsScratch(entity, modelHash) {\n var modelData = modelHash[entity.id];\n if (defined(modelData)) {\n modelData.nodeTransformationsScratch = {};\n modelData.articulationsScratch = {};\n }\n}\n\nfunction checkModelLoad(model, entity, modelHash) {\n model.readyPromise.otherwise(function (error) {\n console.error(error);\n modelHash[entity.id].loadFail = true;\n });\n}\nexport default ModelVisualizer;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Property from \"./Property.js\";\n\n/**\n * This is a temporary class for scaling position properties to the WGS84 surface.\n * It will go away or be refactored to support data with arbitrary height references.\n * @private\n */\nfunction ScaledPositionProperty(value) {\n this._definitionChanged = new Event();\n this._value = undefined;\n this._removeSubscription = undefined;\n this.setValue(value);\n}\n\nObject.defineProperties(ScaledPositionProperty.prototype, {\n isConstant: {\n get: function () {\n return Property.isConstant(this._value);\n },\n },\n definitionChanged: {\n get: function () {\n return this._definitionChanged;\n },\n },\n referenceFrame: {\n get: function () {\n return defined(this._value)\n ? this._value.referenceFrame\n : ReferenceFrame.FIXED;\n },\n },\n});\n\nScaledPositionProperty.prototype.getValue = function (time, result) {\n return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\nScaledPositionProperty.prototype.setValue = function (value) {\n if (this._value !== value) {\n this._value = value;\n\n if (defined(this._removeSubscription)) {\n this._removeSubscription();\n this._removeSubscription = undefined;\n }\n\n if (defined(value)) {\n this._removeSubscription = value.definitionChanged.addEventListener(\n this._raiseDefinitionChanged,\n this\n );\n }\n this._definitionChanged.raiseEvent(this);\n }\n};\n\nScaledPositionProperty.prototype.getValueInReferenceFrame = function (\n time,\n referenceFrame,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n if (!defined(referenceFrame)) {\n throw new DeveloperError(\"referenceFrame is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(this._value)) {\n return undefined;\n }\n\n result = this._value.getValueInReferenceFrame(time, referenceFrame, result);\n return defined(result)\n ? Ellipsoid.WGS84.scaleToGeodeticSurface(result, result)\n : undefined;\n};\n\nScaledPositionProperty.prototype.equals = function (other) {\n return (\n this === other ||\n (other instanceof ScaledPositionProperty && this._value === other._value)\n );\n};\n\nScaledPositionProperty.prototype._raiseDefinitionChanged = function () {\n this._definitionChanged.raiseEvent(this);\n};\nexport default ScaledPositionProperty;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport PolylineCollection from \"../Scene/PolylineCollection.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\nimport TimeIntervalCollectionPositionProperty from \"./TimeIntervalCollectionPositionProperty.js\";\n\nvar defaultResolution = 60.0;\nvar defaultWidth = 1.0;\n\nvar scratchTimeInterval = new TimeInterval();\nvar subSampleCompositePropertyScratch = new TimeInterval();\nvar subSampleIntervalPropertyScratch = new TimeInterval();\n\nfunction EntityData(entity) {\n this.entity = entity;\n this.polyline = undefined;\n this.index = undefined;\n this.updater = undefined;\n}\n\nfunction subSampleSampledProperty(\n property,\n start,\n stop,\n times,\n updateTime,\n referenceFrame,\n maximumStep,\n startingIndex,\n result\n) {\n var r = startingIndex;\n //Always step exactly on start (but only use it if it exists.)\n var tmp;\n tmp = property.getValueInReferenceFrame(start, referenceFrame, result[r]);\n if (defined(tmp)) {\n result[r++] = tmp;\n }\n\n var steppedOnNow =\n !defined(updateTime) ||\n JulianDate.lessThanOrEquals(updateTime, start) ||\n JulianDate.greaterThanOrEquals(updateTime, stop);\n\n //Iterate over all interval times and add the ones that fall in our\n //time range. Note that times can contain data outside of\n //the intervals range. This is by design for use with interpolation.\n var t = 0;\n var len = times.length;\n var current = times[t];\n var loopStop = stop;\n var sampling = false;\n var sampleStepsToTake;\n var sampleStepsTaken;\n var sampleStepSize;\n\n while (t < len) {\n if (!steppedOnNow && JulianDate.greaterThanOrEquals(current, updateTime)) {\n tmp = property.getValueInReferenceFrame(\n updateTime,\n referenceFrame,\n result[r]\n );\n if (defined(tmp)) {\n result[r++] = tmp;\n }\n steppedOnNow = true;\n }\n if (\n JulianDate.greaterThan(current, start) &&\n JulianDate.lessThan(current, loopStop) &&\n !current.equals(updateTime)\n ) {\n tmp = property.getValueInReferenceFrame(\n current,\n referenceFrame,\n result[r]\n );\n if (defined(tmp)) {\n result[r++] = tmp;\n }\n }\n\n if (t < len - 1) {\n if (maximumStep > 0 && !sampling) {\n var next = times[t + 1];\n var secondsUntilNext = JulianDate.secondsDifference(next, current);\n sampling = secondsUntilNext > maximumStep;\n\n if (sampling) {\n sampleStepsToTake = Math.ceil(secondsUntilNext / maximumStep);\n sampleStepsTaken = 0;\n sampleStepSize = secondsUntilNext / Math.max(sampleStepsToTake, 2);\n sampleStepsToTake = Math.max(sampleStepsToTake - 1, 1);\n }\n }\n\n if (sampling && sampleStepsTaken < sampleStepsToTake) {\n current = JulianDate.addSeconds(\n current,\n sampleStepSize,\n new JulianDate()\n );\n sampleStepsTaken++;\n continue;\n }\n }\n sampling = false;\n t++;\n current = times[t];\n }\n\n //Always step exactly on stop (but only use it if it exists.)\n tmp = property.getValueInReferenceFrame(stop, referenceFrame, result[r]);\n if (defined(tmp)) {\n result[r++] = tmp;\n }\n\n return r;\n}\n\nfunction subSampleGenericProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n startingIndex,\n result\n) {\n var tmp;\n var i = 0;\n var index = startingIndex;\n var time = start;\n var stepSize = Math.max(maximumStep, 60);\n var steppedOnNow =\n !defined(updateTime) ||\n JulianDate.lessThanOrEquals(updateTime, start) ||\n JulianDate.greaterThanOrEquals(updateTime, stop);\n while (JulianDate.lessThan(time, stop)) {\n if (!steppedOnNow && JulianDate.greaterThanOrEquals(time, updateTime)) {\n steppedOnNow = true;\n tmp = property.getValueInReferenceFrame(\n updateTime,\n referenceFrame,\n result[index]\n );\n if (defined(tmp)) {\n result[index] = tmp;\n index++;\n }\n }\n tmp = property.getValueInReferenceFrame(\n time,\n referenceFrame,\n result[index]\n );\n if (defined(tmp)) {\n result[index] = tmp;\n index++;\n }\n i++;\n time = JulianDate.addSeconds(start, stepSize * i, new JulianDate());\n }\n //Always sample stop.\n tmp = property.getValueInReferenceFrame(stop, referenceFrame, result[index]);\n if (defined(tmp)) {\n result[index] = tmp;\n index++;\n }\n return index;\n}\n\nfunction subSampleIntervalProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n startingIndex,\n result\n) {\n subSampleIntervalPropertyScratch.start = start;\n subSampleIntervalPropertyScratch.stop = stop;\n\n var index = startingIndex;\n var intervals = property.intervals;\n for (var i = 0; i < intervals.length; i++) {\n var interval = intervals.get(i);\n if (\n !TimeInterval.intersect(\n interval,\n subSampleIntervalPropertyScratch,\n scratchTimeInterval\n ).isEmpty\n ) {\n var time = interval.start;\n if (!interval.isStartIncluded) {\n if (interval.isStopIncluded) {\n time = interval.stop;\n } else {\n time = JulianDate.addSeconds(\n interval.start,\n JulianDate.secondsDifference(interval.stop, interval.start) / 2,\n new JulianDate()\n );\n }\n }\n var tmp = property.getValueInReferenceFrame(\n time,\n referenceFrame,\n result[index]\n );\n if (defined(tmp)) {\n result[index] = tmp;\n index++;\n }\n }\n }\n return index;\n}\n\nfunction subSampleConstantProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n startingIndex,\n result\n) {\n var tmp = property.getValueInReferenceFrame(\n start,\n referenceFrame,\n result[startingIndex]\n );\n if (defined(tmp)) {\n result[startingIndex++] = tmp;\n }\n return startingIndex;\n}\n\nfunction subSampleCompositeProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n startingIndex,\n result\n) {\n subSampleCompositePropertyScratch.start = start;\n subSampleCompositePropertyScratch.stop = stop;\n\n var index = startingIndex;\n var intervals = property.intervals;\n for (var i = 0; i < intervals.length; i++) {\n var interval = intervals.get(i);\n if (\n !TimeInterval.intersect(\n interval,\n subSampleCompositePropertyScratch,\n scratchTimeInterval\n ).isEmpty\n ) {\n var intervalStart = interval.start;\n var intervalStop = interval.stop;\n\n var sampleStart = start;\n if (JulianDate.greaterThan(intervalStart, sampleStart)) {\n sampleStart = intervalStart;\n }\n\n var sampleStop = stop;\n if (JulianDate.lessThan(intervalStop, sampleStop)) {\n sampleStop = intervalStop;\n }\n\n index = reallySubSample(\n interval.data,\n sampleStart,\n sampleStop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n }\n }\n return index;\n}\n\nfunction reallySubSample(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n) {\n //Unwrap any references until we have the actual property.\n while (property instanceof ReferenceProperty) {\n property = property.resolvedProperty;\n }\n\n if (property instanceof SampledPositionProperty) {\n var times = property._property._times;\n index = subSampleSampledProperty(\n property,\n start,\n stop,\n times,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n } else if (property instanceof CompositePositionProperty) {\n index = subSampleCompositeProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n } else if (property instanceof TimeIntervalCollectionPositionProperty) {\n index = subSampleIntervalProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n } else if (\n property instanceof ConstantPositionProperty ||\n (property instanceof ScaledPositionProperty &&\n Property.isConstant(property))\n ) {\n index = subSampleConstantProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n } else {\n //Fallback to generic sampling.\n index = subSampleGenericProperty(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n index,\n result\n );\n }\n return index;\n}\n\nfunction subSample(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n result\n) {\n if (!defined(result)) {\n result = [];\n }\n\n var length = reallySubSample(\n property,\n start,\n stop,\n updateTime,\n referenceFrame,\n maximumStep,\n 0,\n result\n );\n result.length = length;\n return result;\n}\n\nvar toFixedScratch = new Matrix3();\nfunction PolylineUpdater(scene, referenceFrame) {\n this._unusedIndexes = [];\n this._polylineCollection = new PolylineCollection();\n this._scene = scene;\n this._referenceFrame = referenceFrame;\n scene.primitives.add(this._polylineCollection);\n}\n\nPolylineUpdater.prototype.update = function (time) {\n if (this._referenceFrame === ReferenceFrame.INERTIAL) {\n var toFixed = Transforms.computeIcrfToFixedMatrix(time, toFixedScratch);\n if (!defined(toFixed)) {\n toFixed = Transforms.computeTemeToPseudoFixedMatrix(time, toFixedScratch);\n }\n Matrix4.fromRotationTranslation(\n toFixed,\n Cartesian3.ZERO,\n this._polylineCollection.modelMatrix\n );\n }\n};\n\nPolylineUpdater.prototype.updateObject = function (time, item) {\n var entity = item.entity;\n var pathGraphics = entity._path;\n var positionProperty = entity._position;\n\n var sampleStart;\n var sampleStop;\n var showProperty = pathGraphics._show;\n var polyline = item.polyline;\n var show =\n entity.isShowing && (!defined(showProperty) || showProperty.getValue(time));\n\n //While we want to show the path, there may not actually be anything to show\n //depending on lead/trail settings. Compute the interval of the path to\n //show and check against actual availability.\n if (show) {\n var leadTime = Property.getValueOrUndefined(pathGraphics._leadTime, time);\n var trailTime = Property.getValueOrUndefined(pathGraphics._trailTime, time);\n var availability = entity._availability;\n var hasAvailability = defined(availability);\n var hasLeadTime = defined(leadTime);\n var hasTrailTime = defined(trailTime);\n\n //Objects need to have either defined availability or both a lead and trail time in order to\n //draw a path (since we can't draw \"infinite\" paths.\n show = hasAvailability || (hasLeadTime && hasTrailTime);\n\n //The final step is to compute the actual start/stop times of the path to show.\n //If current time is outside of the availability interval, there's a chance that\n //we won't have to draw anything anyway.\n if (show) {\n if (hasTrailTime) {\n sampleStart = JulianDate.addSeconds(time, -trailTime, new JulianDate());\n }\n if (hasLeadTime) {\n sampleStop = JulianDate.addSeconds(time, leadTime, new JulianDate());\n }\n\n if (hasAvailability) {\n var start = availability.start;\n var stop = availability.stop;\n\n if (!hasTrailTime || JulianDate.greaterThan(start, sampleStart)) {\n sampleStart = start;\n }\n\n if (!hasLeadTime || JulianDate.lessThan(stop, sampleStop)) {\n sampleStop = stop;\n }\n }\n show = JulianDate.lessThan(sampleStart, sampleStop);\n }\n }\n\n if (!show) {\n //don't bother creating or updating anything else\n if (defined(polyline)) {\n this._unusedIndexes.push(item.index);\n item.polyline = undefined;\n polyline.show = false;\n item.index = undefined;\n }\n return;\n }\n\n if (!defined(polyline)) {\n var unusedIndexes = this._unusedIndexes;\n var length = unusedIndexes.length;\n if (length > 0) {\n var index = unusedIndexes.pop();\n polyline = this._polylineCollection.get(index);\n item.index = index;\n } else {\n item.index = this._polylineCollection.length;\n polyline = this._polylineCollection.add();\n }\n polyline.id = entity;\n item.polyline = polyline;\n }\n\n var resolution = Property.getValueOrDefault(\n pathGraphics._resolution,\n time,\n defaultResolution\n );\n\n polyline.show = true;\n polyline.positions = subSample(\n positionProperty,\n sampleStart,\n sampleStop,\n time,\n this._referenceFrame,\n resolution,\n polyline.positions.slice()\n );\n polyline.material = MaterialProperty.getValue(\n time,\n pathGraphics._material,\n polyline.material\n );\n polyline.width = Property.getValueOrDefault(\n pathGraphics._width,\n time,\n defaultWidth\n );\n polyline.distanceDisplayCondition = Property.getValueOrUndefined(\n pathGraphics._distanceDisplayCondition,\n time,\n polyline.distanceDisplayCondition\n );\n};\n\nPolylineUpdater.prototype.removeObject = function (item) {\n var polyline = item.polyline;\n if (defined(polyline)) {\n this._unusedIndexes.push(item.index);\n item.polyline = undefined;\n polyline.show = false;\n polyline.id = undefined;\n item.index = undefined;\n }\n};\n\nPolylineUpdater.prototype.destroy = function () {\n this._scene.primitives.remove(this._polylineCollection);\n return destroyObject(this);\n};\n\n/**\n * A {@link Visualizer} which maps {@link Entity#path} to a {@link Polyline}.\n * @alias PathVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction PathVisualizer(scene, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n PathVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._scene = scene;\n this._updaters = {};\n this._entityCollection = entityCollection;\n this._items = new AssociativeArray();\n\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nPathVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var updaters = this._updaters;\n for (var key in updaters) {\n if (updaters.hasOwnProperty(key)) {\n updaters[key].update(time);\n }\n }\n\n var items = this._items.values;\n if (\n items.length === 0 &&\n defined(this._updaters) &&\n Object.keys(this._updaters).length > 0\n ) {\n for (var u in updaters) {\n if (updaters.hasOwnProperty(u)) {\n updaters[u].destroy();\n }\n }\n this._updaters = {};\n }\n\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n var entity = item.entity;\n var positionProperty = entity._position;\n\n var lastUpdater = item.updater;\n\n var frameToVisualize = ReferenceFrame.FIXED;\n if (this._scene.mode === SceneMode.SCENE3D) {\n frameToVisualize = positionProperty.referenceFrame;\n }\n\n var currentUpdater = this._updaters[frameToVisualize];\n\n if (lastUpdater === currentUpdater && defined(currentUpdater)) {\n currentUpdater.updateObject(time, item);\n continue;\n }\n\n if (defined(lastUpdater)) {\n lastUpdater.removeObject(item);\n }\n\n if (!defined(currentUpdater)) {\n currentUpdater = new PolylineUpdater(this._scene, frameToVisualize);\n currentUpdater.update(time);\n this._updaters[frameToVisualize] = currentUpdater;\n }\n\n item.updater = currentUpdater;\n if (defined(currentUpdater)) {\n currentUpdater.updateObject(time, item);\n }\n }\n return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nPathVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPathVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n PathVisualizer.prototype._onCollectionChanged,\n this\n );\n\n var updaters = this._updaters;\n for (var key in updaters) {\n if (updaters.hasOwnProperty(key)) {\n updaters[key].destroy();\n }\n }\n\n return destroyObject(this);\n};\n\nPathVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var item;\n var items = this._items;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._path) && defined(entity._position)) {\n items.set(entity.id, new EntityData(entity));\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._path) && defined(entity._position)) {\n if (!items.contains(entity.id)) {\n items.set(entity.id, new EntityData(entity));\n }\n } else {\n item = items.get(entity.id);\n if (defined(item)) {\n if (defined(item.updater)) {\n item.updater.removeObject(item);\n }\n items.remove(entity.id);\n }\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n item = items.get(entity.id);\n if (defined(item)) {\n if (defined(item.updater)) {\n item.updater.removeObject(item);\n }\n items.remove(entity.id);\n }\n }\n};\n\n//for testing\nPathVisualizer._subSample = subSample;\nexport default PathVisualizer;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport createBillboardPointCallback from \"../Scene/createBillboardPointCallback.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nvar defaultColor = Color.WHITE;\nvar defaultOutlineColor = Color.BLACK;\nvar defaultOutlineWidth = 0.0;\nvar defaultPixelSize = 1.0;\nvar defaultDisableDepthTestDistance = 0.0;\n\nvar colorScratch = new Color();\nvar positionScratch = new Cartesian3();\nvar outlineColorScratch = new Color();\nvar scaleByDistanceScratch = new NearFarScalar();\nvar translucencyByDistanceScratch = new NearFarScalar();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n this.entity = entity;\n this.pointPrimitive = undefined;\n this.billboard = undefined;\n this.color = undefined;\n this.outlineColor = undefined;\n this.pixelSize = undefined;\n this.outlineWidth = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps {@link Entity#point} to a {@link PointPrimitive}.\n * @alias PointVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction PointVisualizer(entityCluster, entityCollection) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entityCluster)) {\n throw new DeveloperError(\"entityCluster is required.\");\n }\n if (!defined(entityCollection)) {\n throw new DeveloperError(\"entityCollection is required.\");\n }\n //>>includeEnd('debug');\n\n entityCollection.collectionChanged.addEventListener(\n PointVisualizer.prototype._onCollectionChanged,\n this\n );\n\n this._cluster = entityCluster;\n this._entityCollection = entityCollection;\n this._items = new AssociativeArray();\n this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} This function always returns true.\n */\nPointVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n //>>includeEnd('debug');\n\n var items = this._items.values;\n var cluster = this._cluster;\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n var entity = item.entity;\n var pointGraphics = entity._point;\n var pointPrimitive = item.pointPrimitive;\n var billboard = item.billboard;\n var heightReference = Property.getValueOrDefault(\n pointGraphics._heightReference,\n time,\n HeightReference.NONE\n );\n var show =\n entity.isShowing &&\n entity.isAvailable(time) &&\n Property.getValueOrDefault(pointGraphics._show, time, true);\n var position;\n if (show) {\n position = Property.getValueOrUndefined(\n entity._position,\n time,\n positionScratch\n );\n show = defined(position);\n }\n if (!show) {\n returnPrimitive(item, entity, cluster);\n continue;\n }\n\n if (!Property.isConstant(entity._position)) {\n cluster._clusterDirty = true;\n }\n\n var needsRedraw = false;\n var updateClamping = false;\n if (heightReference !== HeightReference.NONE && !defined(billboard)) {\n if (defined(pointPrimitive)) {\n returnPrimitive(item, entity, cluster);\n pointPrimitive = undefined;\n }\n\n billboard = cluster.getBillboard(entity);\n billboard.id = entity;\n billboard.image = undefined;\n item.billboard = billboard;\n needsRedraw = true;\n\n // If this new billboard happens to have a position and height reference that match our new values,\n // billboard._updateClamping will not be called automatically. That's a problem because the clamped\n // height may be based on different terrain than is now loaded. So we'll manually call\n // _updateClamping below.\n updateClamping =\n Cartesian3.equals(billboard.position, position) &&\n billboard.heightReference === heightReference;\n } else if (\n heightReference === HeightReference.NONE &&\n !defined(pointPrimitive)\n ) {\n if (defined(billboard)) {\n returnPrimitive(item, entity, cluster);\n billboard = undefined;\n }\n\n pointPrimitive = cluster.getPoint(entity);\n pointPrimitive.id = entity;\n item.pointPrimitive = pointPrimitive;\n }\n\n if (defined(pointPrimitive)) {\n pointPrimitive.show = true;\n pointPrimitive.position = position;\n pointPrimitive.scaleByDistance = Property.getValueOrUndefined(\n pointGraphics._scaleByDistance,\n time,\n scaleByDistanceScratch\n );\n pointPrimitive.translucencyByDistance = Property.getValueOrUndefined(\n pointGraphics._translucencyByDistance,\n time,\n translucencyByDistanceScratch\n );\n pointPrimitive.color = Property.getValueOrDefault(\n pointGraphics._color,\n time,\n defaultColor,\n colorScratch\n );\n pointPrimitive.outlineColor = Property.getValueOrDefault(\n pointGraphics._outlineColor,\n time,\n defaultOutlineColor,\n outlineColorScratch\n );\n pointPrimitive.outlineWidth = Property.getValueOrDefault(\n pointGraphics._outlineWidth,\n time,\n defaultOutlineWidth\n );\n pointPrimitive.pixelSize = Property.getValueOrDefault(\n pointGraphics._pixelSize,\n time,\n defaultPixelSize\n );\n pointPrimitive.distanceDisplayCondition = Property.getValueOrUndefined(\n pointGraphics._distanceDisplayCondition,\n time,\n distanceDisplayConditionScratch\n );\n pointPrimitive.disableDepthTestDistance = Property.getValueOrDefault(\n pointGraphics._disableDepthTestDistance,\n time,\n defaultDisableDepthTestDistance\n );\n } else if (defined(billboard)) {\n billboard.show = true;\n billboard.position = position;\n billboard.scaleByDistance = Property.getValueOrUndefined(\n pointGraphics._scaleByDistance,\n time,\n scaleByDistanceScratch\n );\n billboard.translucencyByDistance = Property.getValueOrUndefined(\n pointGraphics._translucencyByDistance,\n time,\n translucencyByDistanceScratch\n );\n billboard.distanceDisplayCondition = Property.getValueOrUndefined(\n pointGraphics._distanceDisplayCondition,\n time,\n distanceDisplayConditionScratch\n );\n billboard.disableDepthTestDistance = Property.getValueOrDefault(\n pointGraphics._disableDepthTestDistance,\n time,\n defaultDisableDepthTestDistance\n );\n billboard.heightReference = heightReference;\n\n var newColor = Property.getValueOrDefault(\n pointGraphics._color,\n time,\n defaultColor,\n colorScratch\n );\n var newOutlineColor = Property.getValueOrDefault(\n pointGraphics._outlineColor,\n time,\n defaultOutlineColor,\n outlineColorScratch\n );\n var newOutlineWidth = Math.round(\n Property.getValueOrDefault(\n pointGraphics._outlineWidth,\n time,\n defaultOutlineWidth\n )\n );\n var newPixelSize = Math.max(\n 1,\n Math.round(\n Property.getValueOrDefault(\n pointGraphics._pixelSize,\n time,\n defaultPixelSize\n )\n )\n );\n\n if (newOutlineWidth > 0) {\n billboard.scale = 1.0;\n needsRedraw =\n needsRedraw || //\n newOutlineWidth !== item.outlineWidth || //\n newPixelSize !== item.pixelSize || //\n !Color.equals(newColor, item.color) || //\n !Color.equals(newOutlineColor, item.outlineColor);\n } else {\n billboard.scale = newPixelSize / 50.0;\n newPixelSize = 50.0;\n needsRedraw =\n needsRedraw || //\n newOutlineWidth !== item.outlineWidth || //\n !Color.equals(newColor, item.color) || //\n !Color.equals(newOutlineColor, item.outlineColor);\n }\n\n if (needsRedraw) {\n item.color = Color.clone(newColor, item.color);\n item.outlineColor = Color.clone(newOutlineColor, item.outlineColor);\n item.pixelSize = newPixelSize;\n item.outlineWidth = newOutlineWidth;\n\n var centerAlpha = newColor.alpha;\n var cssColor = newColor.toCssColorString();\n var cssOutlineColor = newOutlineColor.toCssColorString();\n var textureId = JSON.stringify([\n cssColor,\n newPixelSize,\n cssOutlineColor,\n newOutlineWidth,\n ]);\n\n billboard.setImage(\n textureId,\n createBillboardPointCallback(\n centerAlpha,\n cssColor,\n cssOutlineColor,\n newOutlineWidth,\n newPixelSize\n )\n );\n }\n\n if (updateClamping) {\n billboard._updateClamping();\n }\n }\n }\n return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nPointVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required.\");\n }\n if (!defined(result)) {\n throw new DeveloperError(\"result is required.\");\n }\n //>>includeEnd('debug');\n\n var item = this._items.get(entity.id);\n if (\n !defined(item) ||\n !(defined(item.pointPrimitive) || defined(item.billboard))\n ) {\n return BoundingSphereState.FAILED;\n }\n\n if (defined(item.pointPrimitive)) {\n result.center = Cartesian3.clone(\n item.pointPrimitive.position,\n result.center\n );\n } else {\n var billboard = item.billboard;\n if (!defined(billboard._clampedPosition)) {\n return BoundingSphereState.PENDING;\n }\n result.center = Cartesian3.clone(billboard._clampedPosition, result.center);\n }\n\n result.radius = 0;\n return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nPointVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPointVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n PointVisualizer.prototype._onCollectionChanged,\n this\n );\n var entities = this._entityCollection.values;\n for (var i = 0; i < entities.length; i++) {\n this._cluster.removePoint(entities[i]);\n }\n return destroyObject(this);\n};\n\nPointVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed,\n changed\n) {\n var i;\n var entity;\n var items = this._items;\n var cluster = this._cluster;\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n if (defined(entity._point) && defined(entity._position)) {\n items.set(entity.id, new EntityData(entity));\n }\n }\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n if (defined(entity._point) && defined(entity._position)) {\n if (!items.contains(entity.id)) {\n items.set(entity.id, new EntityData(entity));\n }\n } else {\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n returnPrimitive(items.get(entity.id), entity, cluster);\n items.remove(entity.id);\n }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n if (defined(item)) {\n var pointPrimitive = item.pointPrimitive;\n if (defined(pointPrimitive)) {\n item.pointPrimitive = undefined;\n cluster.removePoint(entity);\n return;\n }\n var billboard = item.billboard;\n if (defined(billboard)) {\n item.billboard = undefined;\n cluster.removeBillboard(entity);\n }\n }\n}\nexport default PointVisualizer;\n","import ArcType from \"../Core/ArcType.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport Event from \"../Core/Event.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GroundPolylineGeometry from \"../Core/GroundPolylineGeometry.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PolylineGeometry from \"../Core/PolylineGeometry.js\";\nimport PolylinePipeline from \"../Core/PolylinePipeline.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Entity from \"../DataSources/Entity.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport PolylineCollection from \"../Scene/PolylineCollection.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar defaultZIndex = new ConstantProperty(0);\n\n//We use this object to create one polyline collection per-scene.\nvar polylineCollections = {};\n\nvar scratchColor = new Color();\nvar defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nvar defaultShow = new ConstantProperty(true);\nvar defaultShadows = new ConstantProperty(ShadowMode.DISABLED);\nvar defaultDistanceDisplayCondition = new ConstantProperty(\n new DistanceDisplayCondition()\n);\nvar defaultClassificationType = new ConstantProperty(ClassificationType.BOTH);\n\nfunction GeometryOptions() {\n this.vertexFormat = undefined;\n this.positions = undefined;\n this.width = undefined;\n this.arcType = undefined;\n this.granularity = undefined;\n}\n\nfunction GroundGeometryOptions() {\n this.positions = undefined;\n this.width = undefined;\n this.arcType = undefined;\n this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polylines.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolylineGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolylineGeometryUpdater(entity, scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entity)) {\n throw new DeveloperError(\"entity is required\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required\");\n }\n //>>includeEnd('debug');\n\n this._entity = entity;\n this._scene = scene;\n this._entitySubscription = entity.definitionChanged.addEventListener(\n PolylineGeometryUpdater.prototype._onEntityPropertyChanged,\n this\n );\n this._fillEnabled = false;\n this._dynamic = false;\n this._geometryChanged = new Event();\n this._showProperty = undefined;\n this._materialProperty = undefined;\n this._shadowsProperty = undefined;\n this._distanceDisplayConditionProperty = undefined;\n this._classificationTypeProperty = undefined;\n this._depthFailMaterialProperty = undefined;\n this._geometryOptions = new GeometryOptions();\n this._groundGeometryOptions = new GroundGeometryOptions();\n this._id = \"polyline-\" + entity.id;\n this._clampToGround = false;\n this._supportsPolylinesOnTerrain = Entity.supportsPolylinesOnTerrain(scene);\n\n this._zIndex = 0;\n\n this._onEntityPropertyChanged(entity, \"polyline\", entity.polyline, undefined);\n}\n\nObject.defineProperties(PolylineGeometryUpdater.prototype, {\n /**\n * Gets the unique ID associated with this updater\n * @memberof PolylineGeometryUpdater.prototype\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n /**\n * Gets the entity associated with this geometry.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Entity}\n * @readonly\n */\n entity: {\n get: function () {\n return this._entity;\n },\n },\n /**\n * Gets a value indicating if the geometry has a fill component.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n fillEnabled: {\n get: function () {\n return this._fillEnabled;\n },\n },\n /**\n * Gets a value indicating if fill visibility varies with simulation time.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n hasConstantFill: {\n get: function () {\n return (\n !this._fillEnabled ||\n (!defined(this._entity.availability) &&\n Property.isConstant(this._showProperty))\n );\n },\n },\n /**\n * Gets the material property used to fill the geometry.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {MaterialProperty}\n * @readonly\n */\n fillMaterialProperty: {\n get: function () {\n return this._materialProperty;\n },\n },\n /**\n * Gets the material property used to fill the geometry when it fails the depth test.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {MaterialProperty}\n * @readonly\n */\n depthFailMaterialProperty: {\n get: function () {\n return this._depthFailMaterialProperty;\n },\n },\n /**\n * Gets a value indicating if the geometry has an outline component.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n outlineEnabled: {\n value: false,\n },\n /**\n * Gets a value indicating if outline visibility varies with simulation time.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n hasConstantOutline: {\n value: true,\n },\n /**\n * Gets the {@link Color} property for the geometry outline.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n outlineColorProperty: {\n value: undefined,\n },\n /**\n * Gets the property specifying whether the geometry\n * casts or receives shadows from light sources.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n shadowsProperty: {\n get: function () {\n return this._shadowsProperty;\n },\n },\n /**\n * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n distanceDisplayConditionProperty: {\n get: function () {\n return this._distanceDisplayConditionProperty;\n },\n },\n /**\n * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Property}\n * @readonly\n */\n classificationTypeProperty: {\n get: function () {\n return this._classificationTypeProperty;\n },\n },\n /**\n * Gets a value indicating if the geometry is time-varying.\n * If true, all visualization is delegated to the {@link DynamicGeometryUpdater}\n * returned by GeometryUpdater#createDynamicUpdater.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isDynamic: {\n get: function () {\n return this._dynamic;\n },\n },\n /**\n * Gets a value indicating if the geometry is closed.\n * This property is only valid for static geometry.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n isClosed: {\n value: false,\n },\n /**\n * Gets an event that is raised whenever the public properties\n * of this updater change.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n geometryChanged: {\n get: function () {\n return this._geometryChanged;\n },\n },\n\n /**\n * Gets a value indicating if the path of the line.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {ArcType}\n * @readonly\n */\n arcType: {\n get: function () {\n return this._arcType;\n },\n },\n\n /**\n * Gets a value indicating if the geometry is clamped to the ground.\n * Returns false if polylines on terrain is not supported.\n * @memberof PolylineGeometryUpdater.prototype\n *\n * @type {Boolean}\n * @readonly\n */\n clampToGround: {\n get: function () {\n return this._clampToGround && this._supportsPolylinesOnTerrain;\n },\n },\n\n /**\n * Gets the zindex\n * @type {Number}\n * @memberof PolylineGeometryUpdater.prototype\n * @readonly\n */\n zIndex: {\n get: function () {\n return this._zIndex;\n },\n },\n});\n\n/**\n * Checks if the geometry is outlined at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {Boolean} true if geometry is outlined at the provided time, false otherwise.\n */\nPolylineGeometryUpdater.prototype.isOutlineVisible = function (time) {\n return false;\n};\n\n/**\n * Checks if the geometry is filled at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {Boolean} true if geometry is filled at the provided time, false otherwise.\n */\nPolylineGeometryUpdater.prototype.isFilled = function (time) {\n var entity = this._entity;\n var visible =\n this._fillEnabled &&\n entity.isAvailable(time) &&\n this._showProperty.getValue(time);\n return defaultValue(visible, false);\n};\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolylineGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(time)) {\n throw new DeveloperError(\"time is required.\");\n }\n\n if (!this._fillEnabled) {\n throw new DeveloperError(\n \"This instance does not represent a filled geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n var entity = this._entity;\n var isAvailable = entity.isAvailable(time);\n var show = new ShowGeometryInstanceAttribute(\n isAvailable && entity.isShowing && this._showProperty.getValue(time)\n );\n var distanceDisplayCondition = this._distanceDisplayConditionProperty.getValue(\n time\n );\n var distanceDisplayConditionAttribute = DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n distanceDisplayCondition\n );\n\n var attributes = {\n show: show,\n distanceDisplayCondition: distanceDisplayConditionAttribute,\n };\n\n var currentColor;\n if (this._materialProperty instanceof ColorMaterialProperty) {\n if (\n defined(this._materialProperty.color) &&\n (this._materialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._materialProperty.color.getValue(time, scratchColor);\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n }\n\n if (this.clampToGround) {\n return new GeometryInstance({\n id: entity,\n geometry: new GroundPolylineGeometry(this._groundGeometryOptions),\n attributes: attributes,\n });\n }\n\n if (\n defined(this._depthFailMaterialProperty) &&\n this._depthFailMaterialProperty instanceof ColorMaterialProperty\n ) {\n if (\n defined(this._depthFailMaterialProperty.color) &&\n (this._depthFailMaterialProperty.color.isConstant || isAvailable)\n ) {\n currentColor = this._depthFailMaterialProperty.color.getValue(\n time,\n scratchColor\n );\n }\n if (!defined(currentColor)) {\n currentColor = Color.WHITE;\n }\n attributes.depthFailColor = ColorGeometryInstanceAttribute.fromColor(\n currentColor\n );\n }\n\n return new GeometryInstance({\n id: entity,\n geometry: new PolylineGeometry(this._geometryOptions),\n attributes: attributes,\n });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolylineGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n time\n) {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n \"This instance does not represent an outlined geometry.\"\n );\n //>>includeEnd('debug');\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nPolylineGeometryUpdater.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys and resources used by the object. Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nPolylineGeometryUpdater.prototype.destroy = function () {\n this._entitySubscription();\n destroyObject(this);\n};\n\nPolylineGeometryUpdater.prototype._onEntityPropertyChanged = function (\n entity,\n propertyName,\n newValue,\n oldValue\n) {\n if (!(propertyName === \"availability\" || propertyName === \"polyline\")) {\n return;\n }\n\n var polyline = this._entity.polyline;\n\n if (!defined(polyline)) {\n if (this._fillEnabled) {\n this._fillEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n var positionsProperty = polyline.positions;\n\n var show = polyline.show;\n if (\n (defined(show) &&\n show.isConstant &&\n !show.getValue(Iso8601.MINIMUM_VALUE)) || //\n !defined(positionsProperty)\n ) {\n if (this._fillEnabled) {\n this._fillEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n var zIndex = polyline.zIndex;\n var material = defaultValue(polyline.material, defaultMaterial);\n var isColorMaterial = material instanceof ColorMaterialProperty;\n this._materialProperty = material;\n this._depthFailMaterialProperty = polyline.depthFailMaterial;\n this._showProperty = defaultValue(show, defaultShow);\n this._shadowsProperty = defaultValue(polyline.shadows, defaultShadows);\n this._distanceDisplayConditionProperty = defaultValue(\n polyline.distanceDisplayCondition,\n defaultDistanceDisplayCondition\n );\n this._classificationTypeProperty = defaultValue(\n polyline.classificationType,\n defaultClassificationType\n );\n this._fillEnabled = true;\n this._zIndex = defaultValue(zIndex, defaultZIndex);\n\n var width = polyline.width;\n var arcType = polyline.arcType;\n var clampToGround = polyline.clampToGround;\n var granularity = polyline.granularity;\n\n if (\n !positionsProperty.isConstant ||\n !Property.isConstant(width) ||\n !Property.isConstant(arcType) ||\n !Property.isConstant(granularity) ||\n !Property.isConstant(clampToGround) ||\n !Property.isConstant(zIndex)\n ) {\n if (!this._dynamic) {\n this._dynamic = true;\n this._geometryChanged.raiseEvent(this);\n }\n } else {\n var geometryOptions = this._geometryOptions;\n var positions = positionsProperty.getValue(\n Iso8601.MINIMUM_VALUE,\n geometryOptions.positions\n );\n\n //Because of the way we currently handle reference properties,\n //we can't automatically assume the positions are always valid.\n if (!defined(positions) || positions.length < 2) {\n if (this._fillEnabled) {\n this._fillEnabled = false;\n this._geometryChanged.raiseEvent(this);\n }\n return;\n }\n\n var vertexFormat;\n if (\n isColorMaterial &&\n (!defined(this._depthFailMaterialProperty) ||\n this._depthFailMaterialProperty instanceof ColorMaterialProperty)\n ) {\n vertexFormat = PolylineColorAppearance.VERTEX_FORMAT;\n } else {\n vertexFormat = PolylineMaterialAppearance.VERTEX_FORMAT;\n }\n\n geometryOptions.vertexFormat = vertexFormat;\n geometryOptions.positions = positions;\n geometryOptions.width = defined(width)\n ? width.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n geometryOptions.arcType = defined(arcType)\n ? arcType.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n geometryOptions.granularity = defined(granularity)\n ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n : undefined;\n\n var groundGeometryOptions = this._groundGeometryOptions;\n groundGeometryOptions.positions = positions;\n groundGeometryOptions.width = geometryOptions.width;\n groundGeometryOptions.arcType = geometryOptions.arcType;\n groundGeometryOptions.granularity = geometryOptions.granularity;\n\n this._clampToGround = defined(clampToGround)\n ? clampToGround.getValue(Iso8601.MINIMUM_VALUE)\n : false;\n\n if (!this._clampToGround && defined(zIndex)) {\n oneTimeWarning(\n \"Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored.\"\n );\n }\n\n this._dynamic = false;\n this._geometryChanged.raiseEvent(this);\n }\n};\n\n/**\n * Creates the dynamic updater to be used when GeometryUpdater#isDynamic is true.\n *\n * @param {PrimitiveCollection} primitives The primitive collection to use.\n * @param {PrimitiveCollection|OrderedGroundPrimitiveCollection} groundPrimitives The primitive collection to use for ordered ground primitives.\n * @returns {DynamicGeometryUpdater} The dynamic updater used to update the geometry each frame.\n *\n * @exception {DeveloperError} This instance does not represent dynamic geometry.\n * @private\n */\nPolylineGeometryUpdater.prototype.createDynamicUpdater = function (\n primitives,\n groundPrimitives\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"primitives\", primitives);\n Check.defined(\"groundPrimitives\", groundPrimitives);\n\n if (!this._dynamic) {\n throw new DeveloperError(\n \"This instance does not represent dynamic geometry.\"\n );\n }\n //>>includeEnd('debug');\n\n return new DynamicGeometryUpdater(primitives, groundPrimitives, this);\n};\n\n/**\n * @private\n */\nvar generateCartesianArcOptions = {\n positions: undefined,\n granularity: undefined,\n height: undefined,\n ellipsoid: undefined,\n};\n\nfunction DynamicGeometryUpdater(primitives, groundPrimitives, geometryUpdater) {\n this._line = undefined;\n this._primitives = primitives;\n this._groundPrimitives = groundPrimitives;\n this._groundPolylinePrimitive = undefined;\n this._material = undefined;\n this._geometryUpdater = geometryUpdater;\n this._positions = [];\n}\n\nfunction getLine(dynamicGeometryUpdater) {\n if (defined(dynamicGeometryUpdater._line)) {\n return dynamicGeometryUpdater._line;\n }\n\n var sceneId = dynamicGeometryUpdater._geometryUpdater._scene.id;\n var polylineCollection = polylineCollections[sceneId];\n var primitives = dynamicGeometryUpdater._primitives;\n if (!defined(polylineCollection) || polylineCollection.isDestroyed()) {\n polylineCollection = new PolylineCollection();\n polylineCollections[sceneId] = polylineCollection;\n primitives.add(polylineCollection);\n } else if (!primitives.contains(polylineCollection)) {\n primitives.add(polylineCollection);\n }\n\n var line = polylineCollection.add();\n line.id = dynamicGeometryUpdater._geometryUpdater._entity;\n dynamicGeometryUpdater._line = line;\n return line;\n}\n\nDynamicGeometryUpdater.prototype.update = function (time) {\n var geometryUpdater = this._geometryUpdater;\n var entity = geometryUpdater._entity;\n var polyline = entity.polyline;\n\n var positionsProperty = polyline.positions;\n var positions = Property.getValueOrUndefined(\n positionsProperty,\n time,\n this._positions\n );\n\n // Synchronize with geometryUpdater for GroundPolylinePrimitive\n geometryUpdater._clampToGround = Property.getValueOrDefault(\n polyline._clampToGround,\n time,\n false\n );\n geometryUpdater._groundGeometryOptions.positions = positions;\n geometryUpdater._groundGeometryOptions.width = Property.getValueOrDefault(\n polyline._width,\n time,\n 1\n );\n geometryUpdater._groundGeometryOptions.arcType = Property.getValueOrDefault(\n polyline._arcType,\n time,\n ArcType.GEODESIC\n );\n geometryUpdater._groundGeometryOptions.granularity = Property.getValueOrDefault(\n polyline._granularity,\n time,\n 9999\n );\n\n var groundPrimitives = this._groundPrimitives;\n\n if (defined(this._groundPolylinePrimitive)) {\n groundPrimitives.remove(this._groundPolylinePrimitive); // destroys by default\n this._groundPolylinePrimitive = undefined;\n }\n\n if (geometryUpdater.clampToGround) {\n if (\n !entity.isShowing ||\n !entity.isAvailable(time) ||\n !Property.getValueOrDefault(polyline._show, time, true)\n ) {\n return;\n }\n\n if (!defined(positions) || positions.length < 2) {\n return;\n }\n\n var fillMaterialProperty = geometryUpdater.fillMaterialProperty;\n var appearance;\n if (fillMaterialProperty instanceof ColorMaterialProperty) {\n appearance = new PolylineColorAppearance();\n } else {\n var material = MaterialProperty.getValue(\n time,\n fillMaterialProperty,\n this._material\n );\n appearance = new PolylineMaterialAppearance({\n material: material,\n translucent: material.isTranslucent(),\n });\n this._material = material;\n }\n\n this._groundPolylinePrimitive = groundPrimitives.add(\n new GroundPolylinePrimitive({\n geometryInstances: geometryUpdater.createFillGeometryInstance(time),\n appearance: appearance,\n classificationType: geometryUpdater.classificationTypeProperty.getValue(\n time\n ),\n asynchronous: false,\n }),\n Property.getValueOrUndefined(geometryUpdater.zIndex, time)\n );\n\n // Hide the polyline in the collection, if any\n if (defined(this._line)) {\n this._line.show = false;\n }\n return;\n }\n\n var line = getLine(this);\n\n if (\n !entity.isShowing ||\n !entity.isAvailable(time) ||\n !Property.getValueOrDefault(polyline._show, time, true)\n ) {\n line.show = false;\n return;\n }\n\n if (!defined(positions) || positions.length < 2) {\n line.show = false;\n return;\n }\n\n var arcType = ArcType.GEODESIC;\n arcType = Property.getValueOrDefault(polyline._arcType, time, arcType);\n\n var globe = geometryUpdater._scene.globe;\n if (arcType !== ArcType.NONE && defined(globe)) {\n generateCartesianArcOptions.ellipsoid = globe.ellipsoid;\n generateCartesianArcOptions.positions = positions;\n generateCartesianArcOptions.granularity = Property.getValueOrUndefined(\n polyline._granularity,\n time\n );\n generateCartesianArcOptions.height = PolylinePipeline.extractHeights(\n positions,\n globe.ellipsoid\n );\n if (arcType === ArcType.GEODESIC) {\n positions = PolylinePipeline.generateCartesianArc(\n generateCartesianArcOptions\n );\n } else {\n positions = PolylinePipeline.generateCartesianRhumbArc(\n generateCartesianArcOptions\n );\n }\n }\n\n line.show = true;\n line.positions = positions.slice();\n line.material = MaterialProperty.getValue(\n time,\n geometryUpdater.fillMaterialProperty,\n line.material\n );\n line.width = Property.getValueOrDefault(polyline._width, time, 1);\n line.distanceDisplayCondition = Property.getValueOrUndefined(\n polyline._distanceDisplayCondition,\n time,\n line.distanceDisplayCondition\n );\n};\n\nDynamicGeometryUpdater.prototype.getBoundingSphere = function (result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n if (!this._geometryUpdater.clampToGround) {\n var line = getLine(this);\n if (line.show && line.positions.length > 0) {\n BoundingSphere.fromPoints(line.positions, result);\n return BoundingSphereState.DONE;\n }\n } else {\n var groundPolylinePrimitive = this._groundPolylinePrimitive;\n if (\n defined(groundPolylinePrimitive) &&\n groundPolylinePrimitive.show &&\n groundPolylinePrimitive.ready\n ) {\n var attributes = groundPolylinePrimitive.getGeometryInstanceAttributes(\n this._geometryUpdater._entity\n );\n if (defined(attributes) && defined(attributes.boundingSphere)) {\n BoundingSphere.clone(attributes.boundingSphere, result);\n return BoundingSphereState.DONE;\n }\n }\n\n if (defined(groundPolylinePrimitive) && !groundPolylinePrimitive.ready) {\n return BoundingSphereState.PENDING;\n }\n\n return BoundingSphereState.DONE;\n }\n\n return BoundingSphereState.FAILED;\n};\n\nDynamicGeometryUpdater.prototype.isDestroyed = function () {\n return false;\n};\n\nDynamicGeometryUpdater.prototype.destroy = function () {\n var geometryUpdater = this._geometryUpdater;\n var sceneId = geometryUpdater._scene.id;\n var polylineCollection = polylineCollections[sceneId];\n if (defined(polylineCollection)) {\n polylineCollection.remove(this._line);\n if (polylineCollection.length === 0) {\n this._primitives.removeAndDestroy(polylineCollection);\n delete polylineCollections[sceneId];\n }\n }\n if (defined(this._groundPolylinePrimitive)) {\n this._groundPrimitives.remove(this._groundPolylinePrimitive);\n }\n destroyObject(this);\n};\nexport default PolylineGeometryUpdater;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nvar scratchColor = new Color();\nvar distanceDisplayConditionScratch = new DistanceDisplayCondition();\nvar defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\n// Encapsulates a Primitive and all the entities that it represents.\nfunction Batch(\n orderedGroundPrimitives,\n classificationType,\n materialProperty,\n zIndex,\n asynchronous\n) {\n var appearanceType;\n if (materialProperty instanceof ColorMaterialProperty) {\n appearanceType = PolylineColorAppearance;\n } else {\n appearanceType = PolylineMaterialAppearance;\n }\n\n this.orderedGroundPrimitives = orderedGroundPrimitives; // scene level primitive collection\n this.classificationType = classificationType;\n this.appearanceType = appearanceType;\n this.materialProperty = materialProperty;\n this.updaters = new AssociativeArray();\n this.createPrimitive = true;\n this.primitive = undefined; // a GroundPolylinePrimitive encapsulating all the entities\n this.oldPrimitive = undefined;\n this.geometry = new AssociativeArray();\n this.material = undefined;\n this.updatersWithAttributes = new AssociativeArray();\n this.attributes = new AssociativeArray();\n this.invalidated = false;\n this.removeMaterialSubscription = materialProperty.definitionChanged.addEventListener(\n Batch.prototype.onMaterialChanged,\n this\n );\n this.subscriptions = new AssociativeArray();\n this.showsUpdated = new AssociativeArray();\n this.zIndex = zIndex;\n\n this._asynchronous = asynchronous;\n}\n\nBatch.prototype.onMaterialChanged = function () {\n this.invalidated = true;\n};\n\n// Check if the given updater's material is compatible with this batch\nBatch.prototype.isMaterial = function (updater) {\n var material = this.materialProperty;\n var updaterMaterial = updater.fillMaterialProperty;\n\n if (\n updaterMaterial === material ||\n (updaterMaterial instanceof ColorMaterialProperty &&\n material instanceof ColorMaterialProperty)\n ) {\n return true;\n }\n return defined(material) && material.equals(updaterMaterial);\n};\n\nBatch.prototype.add = function (time, updater, geometryInstance) {\n var id = updater.id;\n this.updaters.set(id, updater);\n this.geometry.set(id, geometryInstance);\n // Updaters with dynamic attributes must be tracked separately, may exit the batch\n if (\n !updater.hasConstantFill ||\n !updater.fillMaterialProperty.isConstant ||\n !Property.isConstant(updater.distanceDisplayConditionProperty)\n ) {\n this.updatersWithAttributes.set(id, updater);\n } else {\n var that = this;\n // Listen for show changes. These will be synchronized in updateShows.\n this.subscriptions.set(\n id,\n updater.entity.definitionChanged.addEventListener(function (\n entity,\n propertyName,\n newValue,\n oldValue\n ) {\n if (propertyName === \"isShowing\") {\n that.showsUpdated.set(updater.id, updater);\n }\n })\n );\n }\n this.createPrimitive = true;\n};\n\nBatch.prototype.remove = function (updater) {\n var id = updater.id;\n this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n if (this.updaters.remove(id)) {\n this.updatersWithAttributes.remove(id);\n var unsubscribe = this.subscriptions.get(id);\n if (defined(unsubscribe)) {\n unsubscribe();\n this.subscriptions.remove(id);\n }\n return true;\n }\n return false;\n};\n\nBatch.prototype.update = function (time) {\n var isUpdated = true;\n var primitive = this.primitive;\n var orderedGroundPrimitives = this.orderedGroundPrimitives;\n var geometries = this.geometry.values;\n var i;\n\n if (this.createPrimitive) {\n var geometriesLength = geometries.length;\n if (geometriesLength > 0) {\n if (defined(primitive)) {\n // Keep a handle to the old primitive so it can be removed when the updated version is ready.\n if (!defined(this.oldPrimitive)) {\n this.oldPrimitive = primitive;\n } else {\n // For if the new primitive changes again before it is ready.\n orderedGroundPrimitives.remove(primitive);\n }\n }\n\n primitive = new GroundPolylinePrimitive({\n show: false,\n asynchronous: this._asynchronous,\n geometryInstances: geometries.slice(),\n appearance: new this.appearanceType(),\n classificationType: this.classificationType,\n });\n\n if (this.appearanceType === PolylineMaterialAppearance) {\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n primitive.appearance.material = this.material;\n }\n\n orderedGroundPrimitives.add(primitive, this.zIndex);\n isUpdated = false;\n } else {\n if (defined(primitive)) {\n orderedGroundPrimitives.remove(primitive);\n primitive = undefined;\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n orderedGroundPrimitives.remove(oldPrimitive);\n this.oldPrimitive = undefined;\n }\n }\n\n this.attributes.removeAll();\n this.primitive = primitive;\n this.createPrimitive = false;\n } else if (defined(primitive) && primitive.ready) {\n primitive.show = true;\n if (defined(this.oldPrimitive)) {\n orderedGroundPrimitives.remove(this.oldPrimitive);\n this.oldPrimitive = undefined;\n }\n\n if (this.appearanceType === PolylineMaterialAppearance) {\n this.material = MaterialProperty.getValue(\n time,\n this.materialProperty,\n this.material\n );\n this.primitive.appearance.material = this.material;\n }\n var updatersWithAttributes = this.updatersWithAttributes.values;\n var length = updatersWithAttributes.length;\n for (i = 0; i < length; i++) {\n var updater = updatersWithAttributes[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n if (!updater.fillMaterialProperty.isConstant) {\n var colorProperty = updater.fillMaterialProperty.color;\n var resultColor = Property.getValueOrDefault(\n colorProperty,\n time,\n Color.WHITE,\n scratchColor\n );\n if (!Color.equals(attributes._lastColor, resultColor)) {\n attributes._lastColor = Color.clone(\n resultColor,\n attributes._lastColor\n );\n attributes.color = ColorGeometryInstanceAttribute.toValue(\n resultColor,\n attributes.color\n );\n }\n }\n\n var show =\n entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n }\n\n var distanceDisplayConditionProperty =\n updater.distanceDisplayConditionProperty;\n if (!Property.isConstant(distanceDisplayConditionProperty)) {\n var distanceDisplayCondition = Property.getValueOrDefault(\n distanceDisplayConditionProperty,\n time,\n defaultDistanceDisplayCondition,\n distanceDisplayConditionScratch\n );\n if (\n !DistanceDisplayCondition.equals(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n )\n ) {\n attributes._lastDistanceDisplayCondition = DistanceDisplayCondition.clone(\n distanceDisplayCondition,\n attributes._lastDistanceDisplayCondition\n );\n attributes.distanceDisplayCondition = DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n distanceDisplayCondition,\n attributes.distanceDisplayCondition\n );\n }\n }\n }\n\n this.updateShows(primitive);\n } else if (defined(primitive) && !primitive.ready) {\n isUpdated = false;\n }\n return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n var showsUpdated = this.showsUpdated.values;\n var length = showsUpdated.length;\n for (var i = 0; i < length; i++) {\n var updater = showsUpdated[i];\n var entity = updater.entity;\n var instance = this.geometry.get(updater.id);\n\n var attributes = this.attributes.get(instance.id.id);\n if (!defined(attributes)) {\n attributes = primitive.getGeometryInstanceAttributes(instance.id);\n this.attributes.set(instance.id.id, attributes);\n }\n\n var show = entity.isShowing;\n var currentShow = attributes.show[0] === 1;\n if (show !== currentShow) {\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n show,\n attributes.show\n );\n instance.attributes.show.value[0] = attributes.show[0];\n }\n }\n this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n var primitive = this.primitive;\n if (!primitive.ready) {\n return BoundingSphereState.PENDING;\n }\n var attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n if (\n !defined(attributes) ||\n !defined(attributes.boundingSphere) ||\n (defined(attributes.show) && attributes.show[0] === 0)\n ) {\n return BoundingSphereState.FAILED;\n }\n attributes.boundingSphere.clone(result);\n return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n var primitive = this.primitive;\n var orderedGroundPrimitives = this.orderedGroundPrimitives;\n if (defined(primitive)) {\n orderedGroundPrimitives.remove(primitive);\n }\n var oldPrimitive = this.oldPrimitive;\n if (defined(oldPrimitive)) {\n orderedGroundPrimitives.remove(oldPrimitive);\n }\n this.removeMaterialSubscription();\n};\n\n/**\n * @private\n */\nfunction StaticGroundPolylinePerMaterialBatch(\n orderedGroundPrimitives,\n classificationType,\n asynchronous\n) {\n this._items = [];\n this._orderedGroundPrimitives = orderedGroundPrimitives;\n this._classificationType = classificationType;\n this._asynchronous = defaultValue(asynchronous, true);\n}\n\nStaticGroundPolylinePerMaterialBatch.prototype.add = function (time, updater) {\n var items = this._items;\n var length = items.length;\n var geometryInstance = updater.createFillGeometryInstance(time);\n var zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n // Check if the Entity represented by the updater has the same material or a material representable with per-instance color.\n for (var i = 0; i < length; ++i) {\n var item = items[i];\n if (item.isMaterial(updater) && item.zIndex === zIndex) {\n item.add(time, updater, geometryInstance);\n return;\n }\n }\n // If a compatible batch wasn't found, create a new batch.\n var batch = new Batch(\n this._orderedGroundPrimitives,\n this._classificationType,\n updater.fillMaterialProperty,\n zIndex,\n this._asynchronous\n );\n batch.add(time, updater, geometryInstance);\n items.push(batch);\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.remove = function (updater) {\n var items = this._items;\n var length = items.length;\n for (var i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.remove(updater)) {\n if (item.updaters.length === 0) {\n items.splice(i, 1);\n item.destroy();\n }\n break;\n }\n }\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.update = function (time) {\n var i;\n var items = this._items;\n var length = items.length;\n\n for (i = length - 1; i >= 0; i--) {\n var item = items[i];\n if (item.invalidated) {\n items.splice(i, 1);\n var updaters = item.updaters.values;\n var updatersLength = updaters.length;\n for (var h = 0; h < updatersLength; h++) {\n this.add(time, updaters[h]);\n }\n item.destroy();\n }\n }\n\n var isUpdated = true;\n for (i = 0; i < items.length; i++) {\n isUpdated = items[i].update(time) && isUpdated;\n }\n return isUpdated;\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.getBoundingSphere = function (\n updater,\n result\n) {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (item.contains(updater)) {\n return item.getBoundingSphere(updater, result);\n }\n }\n return BoundingSphereState.FAILED;\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.removeAllPrimitives = function () {\n var items = this._items;\n var length = items.length;\n for (var i = 0; i < length; i++) {\n items[i].destroy();\n }\n this._items.length = 0;\n};\nexport default StaticGroundPolylinePerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryBatch from \"./DynamicGeometryBatch.js\";\nimport PolylineGeometryUpdater from \"./PolylineGeometryUpdater.js\";\nimport StaticGeometryColorBatch from \"./StaticGeometryColorBatch.js\";\nimport StaticGeometryPerMaterialBatch from \"./StaticGeometryPerMaterialBatch.js\";\nimport StaticGroundPolylinePerMaterialBatch from \"./StaticGroundPolylinePerMaterialBatch.js\";\n\nvar emptyArray = [];\n\nfunction removeUpdater(that, updater) {\n //We don't keep track of which batch an updater is in, so just remove it from all of them.\n var batches = that._batches;\n var length = batches.length;\n for (var i = 0; i < length; i++) {\n batches[i].remove(updater);\n }\n}\n\nfunction insertUpdaterIntoBatch(that, time, updater) {\n if (updater.isDynamic) {\n that._dynamicBatch.add(time, updater);\n return;\n }\n\n if (updater.clampToGround && updater.fillEnabled) {\n // Also checks for support\n var classificationType = updater.classificationTypeProperty.getValue(time);\n that._groundBatches[classificationType].add(time, updater);\n return;\n }\n\n var shadows;\n if (updater.fillEnabled) {\n shadows = updater.shadowsProperty.getValue(time);\n }\n\n var multiplier = 0;\n if (defined(updater.depthFailMaterialProperty)) {\n multiplier =\n updater.depthFailMaterialProperty instanceof ColorMaterialProperty\n ? 1\n : 2;\n }\n\n var index;\n if (defined(shadows)) {\n index = shadows + multiplier * ShadowMode.NUMBER_OF_SHADOW_MODES;\n }\n\n if (updater.fillEnabled) {\n if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n that._colorBatches[index].add(time, updater);\n } else {\n that._materialBatches[index].add(time, updater);\n }\n }\n}\n\n/**\n * A visualizer for polylines represented by {@link Primitive} instances.\n * @alias PolylineVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n * @param {PrimitiveCollection} [primitives=scene.primitives] A collection to add primitives related to the entities\n * @param {PrimitiveCollection} [groundPrimitives=scene.groundPrimitives] A collection to add ground primitives related to the entities\n */\nfunction PolylineVisualizer(\n scene,\n entityCollection,\n primitives,\n groundPrimitives\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"scene\", scene);\n Check.defined(\"entityCollection\", entityCollection);\n //>>includeEnd('debug');\n\n groundPrimitives = defaultValue(groundPrimitives, scene.groundPrimitives);\n primitives = defaultValue(primitives, scene.primitives);\n\n this._scene = scene;\n this._primitives = primitives;\n this._entityCollection = undefined;\n this._addedObjects = new AssociativeArray();\n this._removedObjects = new AssociativeArray();\n this._changedObjects = new AssociativeArray();\n\n var i;\n var numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n this._colorBatches = new Array(numberOfShadowModes * 3);\n this._materialBatches = new Array(numberOfShadowModes * 3);\n\n for (i = 0; i < numberOfShadowModes; ++i) {\n this._colorBatches[i] = new StaticGeometryColorBatch(\n primitives,\n PolylineColorAppearance,\n undefined,\n false,\n i\n ); // no depth fail appearance\n this._materialBatches[i] = new StaticGeometryPerMaterialBatch(\n primitives,\n PolylineMaterialAppearance,\n undefined,\n false,\n i\n );\n\n this._colorBatches[i + numberOfShadowModes] = new StaticGeometryColorBatch(\n primitives,\n PolylineColorAppearance,\n PolylineColorAppearance,\n false,\n i\n ); //depth fail appearance variations\n this._materialBatches[\n i + numberOfShadowModes\n ] = new StaticGeometryPerMaterialBatch(\n primitives,\n PolylineMaterialAppearance,\n PolylineColorAppearance,\n false,\n i\n );\n\n this._colorBatches[\n i + numberOfShadowModes * 2\n ] = new StaticGeometryColorBatch(\n primitives,\n PolylineColorAppearance,\n PolylineMaterialAppearance,\n false,\n i\n );\n this._materialBatches[\n i + numberOfShadowModes * 2\n ] = new StaticGeometryPerMaterialBatch(\n primitives,\n PolylineMaterialAppearance,\n PolylineMaterialAppearance,\n false,\n i\n );\n }\n\n this._dynamicBatch = new DynamicGeometryBatch(primitives, groundPrimitives);\n\n var numberOfClassificationTypes =\n ClassificationType.NUMBER_OF_CLASSIFICATION_TYPES;\n this._groundBatches = new Array(numberOfClassificationTypes);\n\n for (i = 0; i < numberOfClassificationTypes; ++i) {\n this._groundBatches[i] = new StaticGroundPolylinePerMaterialBatch(\n groundPrimitives,\n i\n );\n }\n\n this._batches = this._colorBatches.concat(\n this._materialBatches,\n this._dynamicBatch,\n this._groundBatches\n );\n\n this._subscriptions = new AssociativeArray();\n this._updaters = new AssociativeArray();\n\n this._entityCollection = entityCollection;\n entityCollection.collectionChanged.addEventListener(\n PolylineVisualizer.prototype._onCollectionChanged,\n this\n );\n this._onCollectionChanged(\n entityCollection,\n entityCollection.values,\n emptyArray\n );\n}\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {Boolean} True if the visualizer successfully updated to the provided time,\n * false if the visualizer is waiting for asynchronous primitives to be created.\n */\nPolylineVisualizer.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var addedObjects = this._addedObjects;\n var added = addedObjects.values;\n var removedObjects = this._removedObjects;\n var removed = removedObjects.values;\n var changedObjects = this._changedObjects;\n var changed = changedObjects.values;\n\n var i;\n var entity;\n var id;\n var updater;\n\n for (i = changed.length - 1; i > -1; i--) {\n entity = changed[i];\n id = entity.id;\n updater = this._updaters.get(id);\n\n //If in a single update, an entity gets removed and a new instance\n //re-added with the same id, the updater no longer tracks the\n //correct entity, we need to both remove the old one and\n //add the new one, which is done by pushing the entity\n //onto the removed/added lists.\n if (updater.entity === entity) {\n removeUpdater(this, updater);\n insertUpdaterIntoBatch(this, time, updater);\n } else {\n removed.push(entity);\n added.push(entity);\n }\n }\n\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n id = entity.id;\n updater = this._updaters.get(id);\n removeUpdater(this, updater);\n updater.destroy();\n this._updaters.remove(id);\n this._subscriptions.get(id)();\n this._subscriptions.remove(id);\n }\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n id = entity.id;\n updater = new PolylineGeometryUpdater(entity, this._scene);\n this._updaters.set(id, updater);\n insertUpdaterIntoBatch(this, time, updater);\n this._subscriptions.set(\n id,\n updater.geometryChanged.addEventListener(\n PolylineVisualizer._onGeometryChanged,\n this\n )\n );\n }\n\n addedObjects.removeAll();\n removedObjects.removeAll();\n changedObjects.removeAll();\n\n var isUpdated = true;\n var batches = this._batches;\n var length = batches.length;\n for (i = 0; i < length; i++) {\n isUpdated = batches[i].update(time) && isUpdated;\n }\n\n return isUpdated;\n};\n\nvar getBoundingSphereArrayScratch = [];\nvar getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nPolylineVisualizer.prototype.getBoundingSphere = function (entity, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"entity\", entity);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n var boundingSpheres = getBoundingSphereArrayScratch;\n var tmp = getBoundingSphereBoundingSphereScratch;\n\n var count = 0;\n var state = BoundingSphereState.DONE;\n var batches = this._batches;\n var batchesLength = batches.length;\n var updater = this._updaters.get(entity.id);\n for (var i = 0; i < batchesLength; i++) {\n state = batches[i].getBoundingSphere(updater, tmp);\n if (state === BoundingSphereState.PENDING) {\n return BoundingSphereState.PENDING;\n } else if (state === BoundingSphereState.DONE) {\n boundingSpheres[count] = BoundingSphere.clone(\n tmp,\n boundingSpheres[count]\n );\n count++;\n }\n }\n\n if (count === 0) {\n return BoundingSphereState.FAILED;\n }\n\n boundingSpheres.length = count;\n BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nPolylineVisualizer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPolylineVisualizer.prototype.destroy = function () {\n this._entityCollection.collectionChanged.removeEventListener(\n PolylineVisualizer.prototype._onCollectionChanged,\n this\n );\n this._addedObjects.removeAll();\n this._removedObjects.removeAll();\n\n var i;\n var batches = this._batches;\n var length = batches.length;\n for (i = 0; i < length; i++) {\n batches[i].removeAllPrimitives();\n }\n\n var subscriptions = this._subscriptions.values;\n length = subscriptions.length;\n for (i = 0; i < length; i++) {\n subscriptions[i]();\n }\n this._subscriptions.removeAll();\n return destroyObject(this);\n};\n\n/**\n * @private\n */\nPolylineVisualizer._onGeometryChanged = function (updater) {\n var removedObjects = this._removedObjects;\n var changedObjects = this._changedObjects;\n\n var entity = updater.entity;\n var id = entity.id;\n\n if (!defined(removedObjects.get(id)) && !defined(changedObjects.get(id))) {\n changedObjects.set(id, entity);\n }\n};\n\n/**\n * @private\n */\nPolylineVisualizer.prototype._onCollectionChanged = function (\n entityCollection,\n added,\n removed\n) {\n var addedObjects = this._addedObjects;\n var removedObjects = this._removedObjects;\n var changedObjects = this._changedObjects;\n\n var i;\n var id;\n var entity;\n for (i = removed.length - 1; i > -1; i--) {\n entity = removed[i];\n id = entity.id;\n if (!addedObjects.remove(id)) {\n removedObjects.set(id, entity);\n changedObjects.remove(id);\n }\n }\n\n for (i = added.length - 1; i > -1; i--) {\n entity = added[i];\n id = entity.id;\n if (removedObjects.remove(id)) {\n changedObjects.set(id, entity);\n } else {\n addedObjects.set(id, entity);\n }\n }\n};\nexport default PolylineVisualizer;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport OrderedGroundPrimitiveCollection from \"../Scene/OrderedGroundPrimitiveCollection.js\";\nimport PrimitiveCollection from \"../Scene/PrimitiveCollection.js\";\nimport BillboardVisualizer from \"./BillboardVisualizer.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport CustomDataSource from \"./CustomDataSource.js\";\nimport GeometryVisualizer from \"./GeometryVisualizer.js\";\nimport LabelVisualizer from \"./LabelVisualizer.js\";\nimport ModelVisualizer from \"./ModelVisualizer.js\";\nimport Cesium3DTilesetVisualizer from \"./Cesium3DTilesetVisualizer.js\";\nimport PathVisualizer from \"./PathVisualizer.js\";\nimport PointVisualizer from \"./PointVisualizer.js\";\nimport PolylineVisualizer from \"./PolylineVisualizer.js\";\n\n/**\n * Visualizes a collection of {@link DataSource} instances.\n * @alias DataSourceDisplay\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Scene} options.scene The scene in which to display the data.\n * @param {DataSourceCollection} options.dataSourceCollection The data sources to display.\n * @param {DataSourceDisplay.VisualizersCallback} [options.visualizersCallback=DataSourceDisplay.defaultVisualizersCallback]\n * A function which creates an array of visualizers used for visualization.\n * If undefined, all standard visualizers are used.\n */\nfunction DataSourceDisplay(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.scene\", options.scene);\n Check.typeOf.object(\n \"options.dataSourceCollection\",\n options.dataSourceCollection\n );\n //>>includeEnd('debug');\n\n GroundPrimitive.initializeTerrainHeights();\n GroundPolylinePrimitive.initializeTerrainHeights();\n\n var scene = options.scene;\n var dataSourceCollection = options.dataSourceCollection;\n\n this._eventHelper = new EventHelper();\n this._eventHelper.add(\n dataSourceCollection.dataSourceAdded,\n this._onDataSourceAdded,\n this\n );\n this._eventHelper.add(\n dataSourceCollection.dataSourceRemoved,\n this._onDataSourceRemoved,\n this\n );\n this._eventHelper.add(\n dataSourceCollection.dataSourceMoved,\n this._onDataSourceMoved,\n this\n );\n this._eventHelper.add(scene.postRender, this._postRender, this);\n\n this._dataSourceCollection = dataSourceCollection;\n this._scene = scene;\n this._visualizersCallback = defaultValue(\n options.visualizersCallback,\n DataSourceDisplay.defaultVisualizersCallback\n );\n\n var primitivesAdded = false;\n var primitives = new PrimitiveCollection();\n var groundPrimitives = new PrimitiveCollection();\n\n if (dataSourceCollection.length > 0) {\n scene.primitives.add(primitives);\n scene.groundPrimitives.add(groundPrimitives);\n primitivesAdded = true;\n }\n\n this._primitives = primitives;\n this._groundPrimitives = groundPrimitives;\n\n for (var i = 0, len = dataSourceCollection.length; i < len; i++) {\n this._onDataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));\n }\n\n var defaultDataSource = new CustomDataSource();\n this._onDataSourceAdded(undefined, defaultDataSource);\n this._defaultDataSource = defaultDataSource;\n\n var removeDefaultDataSourceListener;\n var removeDataSourceCollectionListener;\n if (!primitivesAdded) {\n var that = this;\n var addPrimitives = function () {\n scene.primitives.add(primitives);\n scene.groundPrimitives.add(groundPrimitives);\n removeDefaultDataSourceListener();\n removeDataSourceCollectionListener();\n that._removeDefaultDataSourceListener = undefined;\n that._removeDataSourceCollectionListener = undefined;\n };\n removeDefaultDataSourceListener = defaultDataSource.entities.collectionChanged.addEventListener(\n addPrimitives\n );\n removeDataSourceCollectionListener = dataSourceCollection.dataSourceAdded.addEventListener(\n addPrimitives\n );\n }\n\n this._removeDefaultDataSourceListener = removeDefaultDataSourceListener;\n this._removeDataSourceCollectionListener = removeDataSourceCollectionListener;\n\n this._ready = false;\n}\n\n/**\n * Gets or sets the default function which creates an array of visualizers used for visualization.\n * By default, this function uses all standard visualizers.\n *\n * @type {DataSourceDisplay.VisualizersCallback}\n */\nDataSourceDisplay.defaultVisualizersCallback = function (\n scene,\n entityCluster,\n dataSource\n) {\n var entities = dataSource.entities;\n return [\n new BillboardVisualizer(entityCluster, entities),\n new GeometryVisualizer(\n scene,\n entities,\n dataSource._primitives,\n dataSource._groundPrimitives\n ),\n new LabelVisualizer(entityCluster, entities),\n new ModelVisualizer(scene, entities),\n new Cesium3DTilesetVisualizer(scene, entities),\n new PointVisualizer(entityCluster, entities),\n new PathVisualizer(scene, entities),\n new PolylineVisualizer(\n scene,\n entities,\n dataSource._primitives,\n dataSource._groundPrimitives\n ),\n ];\n};\n\nObject.defineProperties(DataSourceDisplay.prototype, {\n /**\n * Gets the scene associated with this display.\n * @memberof DataSourceDisplay.prototype\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n /**\n * Gets the collection of data sources to display.\n * @memberof DataSourceDisplay.prototype\n * @type {DataSourceCollection}\n */\n dataSources: {\n get: function () {\n return this._dataSourceCollection;\n },\n },\n /**\n * Gets the default data source instance which can be used to\n * manually create and visualize entities not tied to\n * a specific data source. This instance is always available\n * and does not appear in the list dataSources collection.\n * @memberof DataSourceDisplay.prototype\n * @type {CustomDataSource}\n */\n defaultDataSource: {\n get: function () {\n return this._defaultDataSource;\n },\n },\n\n /**\n * Gets a value indicating whether or not all entities in the data source are ready\n * @memberof DataSourceDisplay.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n});\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see DataSourceDisplay#destroy\n */\nDataSourceDisplay.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * dataSourceDisplay = dataSourceDisplay.destroy();\n *\n * @see DataSourceDisplay#isDestroyed\n */\nDataSourceDisplay.prototype.destroy = function () {\n this._eventHelper.removeAll();\n\n var dataSourceCollection = this._dataSourceCollection;\n for (var i = 0, length = dataSourceCollection.length; i < length; ++i) {\n this._onDataSourceRemoved(\n this._dataSourceCollection,\n dataSourceCollection.get(i)\n );\n }\n this._onDataSourceRemoved(undefined, this._defaultDataSource);\n\n if (defined(this._removeDefaultDataSourceListener)) {\n this._removeDefaultDataSourceListener();\n this._removeDataSourceCollectionListener();\n } else {\n this._scene.primitives.remove(this._primitives);\n this._scene.groundPrimitives.remove(this._groundPrimitives);\n }\n\n return destroyObject(this);\n};\n\n/**\n * Updates the display to the provided time.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if all data sources are ready to be displayed, false otherwise.\n */\nDataSourceDisplay.prototype.update = function (time) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n if (!ApproximateTerrainHeights.initialized) {\n this._ready = false;\n return false;\n }\n\n var result = true;\n\n var i;\n var x;\n var visualizers;\n var vLength;\n var dataSources = this._dataSourceCollection;\n var length = dataSources.length;\n for (i = 0; i < length; i++) {\n var dataSource = dataSources.get(i);\n if (defined(dataSource.update)) {\n result = dataSource.update(time) && result;\n }\n\n visualizers = dataSource._visualizers;\n vLength = visualizers.length;\n for (x = 0; x < vLength; x++) {\n result = visualizers[x].update(time) && result;\n }\n }\n\n visualizers = this._defaultDataSource._visualizers;\n vLength = visualizers.length;\n for (x = 0; x < vLength; x++) {\n result = visualizers[x].update(time) && result;\n }\n\n this._ready = result;\n\n return result;\n};\n\nDataSourceDisplay.prototype._postRender = function () {\n // Adds credits for all datasources\n var frameState = this._scene.frameState;\n var dataSources = this._dataSourceCollection;\n var length = dataSources.length;\n for (var i = 0; i < length; i++) {\n var dataSource = dataSources.get(i);\n\n var credit = dataSource.credit;\n if (defined(credit)) {\n frameState.creditDisplay.addCredit(credit);\n }\n\n // Credits from the resource that the user can't remove\n var credits = dataSource._resourceCredits;\n if (defined(credits)) {\n var creditCount = credits.length;\n for (var c = 0; c < creditCount; c++) {\n frameState.creditDisplay.addCredit(credits[c]);\n }\n }\n }\n};\n\nvar getBoundingSphereArrayScratch = [];\nvar getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {Boolean} allowPartial If true, pending bounding spheres are ignored and an answer will be returned from the currently available data.\n * If false, the the function will halt and return pending if any of the bounding spheres are pending.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nDataSourceDisplay.prototype.getBoundingSphere = function (\n entity,\n allowPartial,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"entity\", entity);\n Check.typeOf.bool(\"allowPartial\", allowPartial);\n Check.defined(\"result\", result);\n //>>includeEnd('debug');\n\n if (!this._ready) {\n return BoundingSphereState.PENDING;\n }\n\n var i;\n var length;\n var dataSource = this._defaultDataSource;\n if (!dataSource.entities.contains(entity)) {\n dataSource = undefined;\n\n var dataSources = this._dataSourceCollection;\n length = dataSources.length;\n for (i = 0; i < length; i++) {\n var d = dataSources.get(i);\n if (d.entities.contains(entity)) {\n dataSource = d;\n break;\n }\n }\n }\n\n if (!defined(dataSource)) {\n return BoundingSphereState.FAILED;\n }\n\n var boundingSpheres = getBoundingSphereArrayScratch;\n var tmp = getBoundingSphereBoundingSphereScratch;\n\n var count = 0;\n var state = BoundingSphereState.DONE;\n var visualizers = dataSource._visualizers;\n var visualizersLength = visualizers.length;\n\n for (i = 0; i < visualizersLength; i++) {\n var visualizer = visualizers[i];\n if (defined(visualizer.getBoundingSphere)) {\n state = visualizers[i].getBoundingSphere(entity, tmp);\n if (!allowPartial && state === BoundingSphereState.PENDING) {\n return BoundingSphereState.PENDING;\n } else if (state === BoundingSphereState.DONE) {\n boundingSpheres[count] = BoundingSphere.clone(\n tmp,\n boundingSpheres[count]\n );\n count++;\n }\n }\n }\n\n if (count === 0) {\n return BoundingSphereState.FAILED;\n }\n\n boundingSpheres.length = count;\n BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n return BoundingSphereState.DONE;\n};\n\nDataSourceDisplay.prototype._onDataSourceAdded = function (\n dataSourceCollection,\n dataSource\n) {\n var scene = this._scene;\n\n var displayPrimitives = this._primitives;\n var displayGroundPrimitives = this._groundPrimitives;\n\n var primitives = displayPrimitives.add(new PrimitiveCollection());\n var groundPrimitives = displayGroundPrimitives.add(\n new OrderedGroundPrimitiveCollection()\n );\n\n dataSource._primitives = primitives;\n dataSource._groundPrimitives = groundPrimitives;\n\n var entityCluster = dataSource.clustering;\n entityCluster._initialize(scene);\n\n primitives.add(entityCluster);\n\n dataSource._visualizers = this._visualizersCallback(\n scene,\n entityCluster,\n dataSource\n );\n};\n\nDataSourceDisplay.prototype._onDataSourceRemoved = function (\n dataSourceCollection,\n dataSource\n) {\n var displayPrimitives = this._primitives;\n var displayGroundPrimitives = this._groundPrimitives;\n\n var primitives = dataSource._primitives;\n var groundPrimitives = dataSource._groundPrimitives;\n\n var entityCluster = dataSource.clustering;\n primitives.remove(entityCluster);\n\n var visualizers = dataSource._visualizers;\n var length = visualizers.length;\n for (var i = 0; i < length; i++) {\n visualizers[i].destroy();\n }\n\n displayPrimitives.remove(primitives);\n displayGroundPrimitives.remove(groundPrimitives);\n\n dataSource._visualizers = undefined;\n};\n\nDataSourceDisplay.prototype._onDataSourceMoved = function (\n dataSource,\n newIndex,\n oldIndex\n) {\n var displayPrimitives = this._primitives;\n var displayGroundPrimitives = this._groundPrimitives;\n\n var primitives = dataSource._primitives;\n var groundPrimitives = dataSource._groundPrimitives;\n\n if (newIndex === oldIndex + 1) {\n displayPrimitives.raise(primitives);\n displayGroundPrimitives.raise(groundPrimitives);\n } else if (newIndex === oldIndex - 1) {\n displayPrimitives.lower(primitives);\n displayGroundPrimitives.lower(groundPrimitives);\n } else if (newIndex === 0) {\n displayPrimitives.lowerToBottom(primitives);\n displayGroundPrimitives.lowerToBottom(groundPrimitives);\n displayPrimitives.raise(primitives); // keep defaultDataSource primitives at index 0 since it's not in the collection\n displayGroundPrimitives.raise(groundPrimitives);\n } else {\n displayPrimitives.raiseToTop(primitives);\n displayGroundPrimitives.raiseToTop(groundPrimitives);\n }\n};\n\n/**\n * A function which creates an array of visualizers used for visualization.\n * @callback DataSourceDisplay.VisualizersCallback\n *\n * @param {Scene} scene The scene to create visualizers for.\n * @param {DataSource} dataSource The data source to create visualizers for.\n * @returns {Visualizer[]} An array of visualizers used for visualization.\n *\n * @example\n * function createVisualizers(scene, dataSource) {\n * return [new Cesium.BillboardVisualizer(scene, dataSource.entities)];\n * }\n */\nexport default DataSourceDisplay;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\n\nvar updateTransformMatrix3Scratch1 = new Matrix3();\nvar updateTransformMatrix3Scratch2 = new Matrix3();\nvar updateTransformMatrix3Scratch3 = new Matrix3();\nvar updateTransformMatrix4Scratch = new Matrix4();\nvar updateTransformCartesian3Scratch1 = new Cartesian3();\nvar updateTransformCartesian3Scratch2 = new Cartesian3();\nvar updateTransformCartesian3Scratch3 = new Cartesian3();\nvar updateTransformCartesian3Scratch4 = new Cartesian3();\nvar updateTransformCartesian3Scratch5 = new Cartesian3();\nvar updateTransformCartesian3Scratch6 = new Cartesian3();\nvar deltaTime = new JulianDate();\nvar northUpAxisFactor = 1.25; // times ellipsoid's maximum radius\n\nfunction updateTransform(\n that,\n camera,\n updateLookAt,\n saveCamera,\n positionProperty,\n time,\n ellipsoid\n) {\n var mode = that.scene.mode;\n var cartesian = positionProperty.getValue(time, that._lastCartesian);\n if (defined(cartesian)) {\n var hasBasis = false;\n var invertVelocity = false;\n var xBasis;\n var yBasis;\n var zBasis;\n\n if (mode === SceneMode.SCENE3D) {\n // The time delta was determined based on how fast satellites move compared to vehicles near the surface.\n // Slower moving vehicles will most likely default to east-north-up, while faster ones will be VVLH.\n JulianDate.addSeconds(time, 0.001, deltaTime);\n var deltaCartesian = positionProperty.getValue(\n deltaTime,\n updateTransformCartesian3Scratch1\n );\n\n // If no valid position at (time + 0.001), sample at (time - 0.001) and invert the vector\n if (!defined(deltaCartesian)) {\n JulianDate.addSeconds(time, -0.001, deltaTime);\n deltaCartesian = positionProperty.getValue(\n deltaTime,\n updateTransformCartesian3Scratch1\n );\n invertVelocity = true;\n }\n\n if (defined(deltaCartesian)) {\n var toInertial = Transforms.computeFixedToIcrfMatrix(\n time,\n updateTransformMatrix3Scratch1\n );\n var toInertialDelta = Transforms.computeFixedToIcrfMatrix(\n deltaTime,\n updateTransformMatrix3Scratch2\n );\n var toFixed;\n\n if (!defined(toInertial) || !defined(toInertialDelta)) {\n toFixed = Transforms.computeTemeToPseudoFixedMatrix(\n time,\n updateTransformMatrix3Scratch3\n );\n toInertial = Matrix3.transpose(\n toFixed,\n updateTransformMatrix3Scratch1\n );\n toInertialDelta = Transforms.computeTemeToPseudoFixedMatrix(\n deltaTime,\n updateTransformMatrix3Scratch2\n );\n Matrix3.transpose(toInertialDelta, toInertialDelta);\n } else {\n toFixed = Matrix3.transpose(\n toInertial,\n updateTransformMatrix3Scratch3\n );\n }\n\n var inertialCartesian = Matrix3.multiplyByVector(\n toInertial,\n cartesian,\n updateTransformCartesian3Scratch5\n );\n var inertialDeltaCartesian = Matrix3.multiplyByVector(\n toInertialDelta,\n deltaCartesian,\n updateTransformCartesian3Scratch6\n );\n\n Cartesian3.subtract(\n inertialCartesian,\n inertialDeltaCartesian,\n updateTransformCartesian3Scratch4\n );\n var inertialVelocity =\n Cartesian3.magnitude(updateTransformCartesian3Scratch4) * 1000.0; // meters/sec\n\n var mu = CesiumMath.GRAVITATIONALPARAMETER; // m^3 / sec^2\n var semiMajorAxis =\n -mu /\n (inertialVelocity * inertialVelocity -\n (2 * mu) / Cartesian3.magnitude(inertialCartesian));\n\n if (\n semiMajorAxis < 0 ||\n semiMajorAxis > northUpAxisFactor * ellipsoid.maximumRadius\n ) {\n // North-up viewing from deep space.\n\n // X along the nadir\n xBasis = updateTransformCartesian3Scratch2;\n Cartesian3.normalize(cartesian, xBasis);\n Cartesian3.negate(xBasis, xBasis);\n\n // Z is North\n zBasis = Cartesian3.clone(\n Cartesian3.UNIT_Z,\n updateTransformCartesian3Scratch3\n );\n\n // Y is along the cross of z and x (right handed basis / in the direction of motion)\n yBasis = Cartesian3.cross(\n zBasis,\n xBasis,\n updateTransformCartesian3Scratch1\n );\n if (Cartesian3.magnitude(yBasis) > CesiumMath.EPSILON7) {\n Cartesian3.normalize(xBasis, xBasis);\n Cartesian3.normalize(yBasis, yBasis);\n\n zBasis = Cartesian3.cross(\n xBasis,\n yBasis,\n updateTransformCartesian3Scratch3\n );\n Cartesian3.normalize(zBasis, zBasis);\n\n hasBasis = true;\n }\n } else if (\n !Cartesian3.equalsEpsilon(\n cartesian,\n deltaCartesian,\n CesiumMath.EPSILON7\n )\n ) {\n // Approximation of VVLH (Vehicle Velocity Local Horizontal) with the Z-axis flipped.\n\n // Z along the position\n zBasis = updateTransformCartesian3Scratch2;\n Cartesian3.normalize(inertialCartesian, zBasis);\n Cartesian3.normalize(inertialDeltaCartesian, inertialDeltaCartesian);\n\n // Y is along the angular momentum vector (e.g. \"orbit normal\")\n yBasis = Cartesian3.cross(\n zBasis,\n inertialDeltaCartesian,\n updateTransformCartesian3Scratch3\n );\n\n if (invertVelocity) {\n yBasis = Cartesian3.multiplyByScalar(yBasis, -1, yBasis);\n }\n\n if (\n !Cartesian3.equalsEpsilon(\n yBasis,\n Cartesian3.ZERO,\n CesiumMath.EPSILON7\n )\n ) {\n // X is along the cross of y and z (right handed basis / in the direction of motion)\n xBasis = Cartesian3.cross(\n yBasis,\n zBasis,\n updateTransformCartesian3Scratch1\n );\n\n Matrix3.multiplyByVector(toFixed, xBasis, xBasis);\n Matrix3.multiplyByVector(toFixed, yBasis, yBasis);\n Matrix3.multiplyByVector(toFixed, zBasis, zBasis);\n\n Cartesian3.normalize(xBasis, xBasis);\n Cartesian3.normalize(yBasis, yBasis);\n Cartesian3.normalize(zBasis, zBasis);\n\n hasBasis = true;\n }\n }\n }\n }\n\n if (defined(that.boundingSphere)) {\n cartesian = that.boundingSphere.center;\n }\n\n var position;\n var direction;\n var up;\n\n if (saveCamera) {\n position = Cartesian3.clone(\n camera.position,\n updateTransformCartesian3Scratch4\n );\n direction = Cartesian3.clone(\n camera.direction,\n updateTransformCartesian3Scratch5\n );\n up = Cartesian3.clone(camera.up, updateTransformCartesian3Scratch6);\n }\n\n var transform = updateTransformMatrix4Scratch;\n if (hasBasis) {\n transform[0] = xBasis.x;\n transform[1] = xBasis.y;\n transform[2] = xBasis.z;\n transform[3] = 0.0;\n transform[4] = yBasis.x;\n transform[5] = yBasis.y;\n transform[6] = yBasis.z;\n transform[7] = 0.0;\n transform[8] = zBasis.x;\n transform[9] = zBasis.y;\n transform[10] = zBasis.z;\n transform[11] = 0.0;\n transform[12] = cartesian.x;\n transform[13] = cartesian.y;\n transform[14] = cartesian.z;\n transform[15] = 0.0;\n } else {\n // Stationary or slow-moving, low-altitude objects use East-North-Up.\n Transforms.eastNorthUpToFixedFrame(cartesian, ellipsoid, transform);\n }\n\n camera._setTransform(transform);\n\n if (saveCamera) {\n Cartesian3.clone(position, camera.position);\n Cartesian3.clone(direction, camera.direction);\n Cartesian3.clone(up, camera.up);\n Cartesian3.cross(direction, up, camera.right);\n }\n }\n\n if (updateLookAt) {\n var offset =\n mode === SceneMode.SCENE2D ||\n Cartesian3.equals(that._offset3D, Cartesian3.ZERO)\n ? undefined\n : that._offset3D;\n camera.lookAtTransform(camera.transform, offset);\n }\n}\n\n/**\n * A utility object for tracking an entity with the camera.\n * @alias EntityView\n * @constructor\n *\n * @param {Entity} entity The entity to track with the camera.\n * @param {Scene} scene The scene to use.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use for orienting the camera.\n */\nfunction EntityView(entity, scene, ellipsoid) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"entity\", entity);\n Check.defined(\"scene\", scene);\n //>>includeEnd('debug');\n\n /**\n * The entity to track with the camera.\n * @type {Entity}\n */\n this.entity = entity;\n\n /**\n * The scene in which to track the object.\n * @type {Scene}\n */\n this.scene = scene;\n\n /**\n * The ellipsoid to use for orienting the camera.\n * @type {Ellipsoid}\n */\n this.ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n /**\n * The bounding sphere of the object.\n * @type {BoundingSphere}\n */\n this.boundingSphere = undefined;\n\n // Shadow copies of the objects so we can detect changes.\n this._lastEntity = undefined;\n this._mode = undefined;\n\n this._lastCartesian = new Cartesian3();\n this._defaultOffset3D = undefined;\n\n this._offset3D = new Cartesian3();\n}\n\n// STATIC properties defined here, not per-instance.\nObject.defineProperties(EntityView, {\n /**\n * Gets or sets a camera offset that will be used to\n * initialize subsequent EntityViews.\n * @memberof EntityView\n * @type {Cartesian3}\n */\n defaultOffset3D: {\n get: function () {\n return this._defaultOffset3D;\n },\n set: function (vector) {\n this._defaultOffset3D = Cartesian3.clone(vector, new Cartesian3());\n },\n },\n});\n\n// Initialize the static property.\nEntityView.defaultOffset3D = new Cartesian3(-14000, 3500, 3500);\n\nvar scratchHeadingPitchRange = new HeadingPitchRange();\nvar scratchCartesian = new Cartesian3();\n\n/**\n * Should be called each animation frame to update the camera\n * to the latest settings.\n * @param {JulianDate} time The current animation time.\n * @param {BoundingSphere} [boundingSphere] bounding sphere of the object.\n */\nEntityView.prototype.update = function (time, boundingSphere) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"time\", time);\n //>>includeEnd('debug');\n\n var scene = this.scene;\n var ellipsoid = this.ellipsoid;\n var sceneMode = scene.mode;\n if (sceneMode === SceneMode.MORPHING) {\n return;\n }\n\n var entity = this.entity;\n var positionProperty = entity.position;\n if (!defined(positionProperty)) {\n return;\n }\n var objectChanged = entity !== this._lastEntity;\n var sceneModeChanged = sceneMode !== this._mode;\n\n var camera = scene.camera;\n\n var updateLookAt = objectChanged || sceneModeChanged;\n var saveCamera = true;\n\n if (objectChanged) {\n var viewFromProperty = entity.viewFrom;\n var hasViewFrom = defined(viewFromProperty);\n\n if (!hasViewFrom && defined(boundingSphere)) {\n // The default HPR is not ideal for high altitude objects so\n // we scale the pitch as we get further from the earth for a more\n // downward view.\n scratchHeadingPitchRange.pitch = -CesiumMath.PI_OVER_FOUR;\n scratchHeadingPitchRange.range = 0;\n var position = positionProperty.getValue(time, scratchCartesian);\n if (defined(position)) {\n var factor =\n 2 -\n 1 /\n Math.max(\n 1,\n Cartesian3.magnitude(position) / ellipsoid.maximumRadius\n );\n scratchHeadingPitchRange.pitch *= factor;\n }\n\n camera.viewBoundingSphere(boundingSphere, scratchHeadingPitchRange);\n this.boundingSphere = boundingSphere;\n updateLookAt = false;\n saveCamera = false;\n } else if (\n !hasViewFrom ||\n !defined(viewFromProperty.getValue(time, this._offset3D))\n ) {\n Cartesian3.clone(EntityView._defaultOffset3D, this._offset3D);\n }\n } else if (!sceneModeChanged && this._mode !== SceneMode.SCENE2D) {\n Cartesian3.clone(camera.position, this._offset3D);\n }\n\n this._lastEntity = entity;\n this._mode = sceneMode;\n\n updateTransform(\n this,\n camera,\n updateLookAt,\n saveCamera,\n positionProperty,\n time,\n ellipsoid\n );\n};\nexport default EntityView;\n","/**\n@license\n Copyright (c) 2013 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n**/\n\nimport buildModuleUrl from '../Core/buildModuleUrl.js';\n\nvar tmp = {};\n\n(function(obj) {\n\n\tvar ERR_BAD_FORMAT = \"File format is not recognized.\";\n\tvar ERR_ENCRYPTED = \"File contains encrypted entry.\";\n\tvar ERR_ZIP64 = \"File is using Zip64 (4gb+ file size).\";\n\tvar ERR_READ = \"Error while reading zip file.\";\n\tvar ERR_WRITE = \"Error while writing zip file.\";\n\tvar ERR_WRITE_DATA = \"Error while writing file data.\";\n\tvar ERR_READ_DATA = \"Error while reading file data.\";\n\tvar ERR_DUPLICATED_NAME = \"File already exists.\";\n\tvar CHUNK_SIZE = 512 * 1024;\n\n\tvar INFLATE_JS = \"inflate.js\";\n\tvar DEFLATE_JS = \"deflate.js\";\n\n\tvar TEXT_PLAIN = \"text/plain\";\n\n\tvar MESSAGE_EVENT = \"message\";\n\n\tvar appendABViewSupported;\n\ttry {\n\t\tappendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0;\n\t} catch (e) {\n\t}\n\n\tfunction Crc32() {\n\t\tvar crc = -1, that = this;\n\t\tthat.append = function(data) {\n\t\t\tvar offset, table = that.table;\n\t\t\tfor (offset = 0; offset < data.length; offset++)\n\t\t\t\tcrc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];\n\t\t};\n\t\tthat.get = function() {\n\t\t\treturn ~crc;\n\t\t};\n\t}\n\tCrc32.prototype.table = (function() {\n\t\tvar i, j, t, table = [];\n\t\tfor (i = 0; i < 256; i++) {\n\t\t\tt = i;\n\t\t\tfor (j = 0; j < 8; j++)\n\t\t\t\tif (t & 1)\n\t\t\t\t\tt = (t >>> 1) ^ 0xEDB88320;\n\t\t\t\telse\n\t\t\t\t\tt = t >>> 1;\n\t\t\ttable[i] = t;\n\t\t}\n\t\treturn table;\n\t})();\n\n\tfunction blobSlice(blob, index, length) {\n\t\tif (blob.slice)\n\t\t\treturn blob.slice(index, index + length);\n\t\telse if (blob.webkitSlice)\n\t\t\treturn blob.webkitSlice(index, index + length);\n\t\telse if (blob.mozSlice)\n\t\t\treturn blob.mozSlice(index, index + length);\n\t\telse if (blob.msSlice)\n\t\t\treturn blob.msSlice(index, index + length);\n\t}\n\n\tfunction getDataHelper(byteLength, bytes) {\n\t\tvar dataBuffer, dataArray;\n\t\tdataBuffer = new ArrayBuffer(byteLength);\n\t\tdataArray = new Uint8Array(dataBuffer);\n\t\tif (bytes)\n\t\t\tdataArray.set(bytes, 0);\n\t\treturn {\n\t\t\tbuffer : dataBuffer,\n\t\t\tarray : dataArray,\n\t\t\tview : new DataView(dataBuffer)\n\t\t};\n\t}\n\n\t// Readers\n\tfunction Reader() {\n\t}\n\n\tfunction TextReader(text) {\n\t\tvar that = this, blobReader;\n\n\t\tfunction init(callback, onerror) {\n\t\t\tvar blob = new Blob([ text ], {\n\t\t\t\ttype : TEXT_PLAIN\n\t\t\t});\n\t\t\tblobReader = new BlobReader(blob);\n\t\t\tblobReader.init(function() {\n\t\t\t\tthat.size = blobReader.size;\n\t\t\t\tcallback();\n\t\t\t}, onerror);\n\t\t}\n\n\t\tfunction readUint8Array(index, length, callback, onerror) {\n\t\t\tblobReader.readUint8Array(index, length, callback, onerror);\n\t\t}\n\n\t\tthat.size = 0;\n\t\tthat.init = init;\n\t\tthat.readUint8Array = readUint8Array;\n\t}\n\tTextReader.prototype = new Reader();\n\tTextReader.prototype.constructor = TextReader;\n\n\tfunction Data64URIReader(dataURI) {\n\t\tvar that = this, dataStart;\n\n\t\tfunction init(callback) {\n\t\t\tvar dataEnd = dataURI.length;\n\t\t\twhile (dataURI.charAt(dataEnd - 1) == \"=\")\n\t\t\t\tdataEnd--;\n\t\t\tdataStart = dataURI.indexOf(\",\") + 1;\n\t\t\tthat.size = Math.floor((dataEnd - dataStart) * 0.75);\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction readUint8Array(index, length, callback) {\n\t\t\tvar i, data = getDataHelper(length);\n\t\t\tvar start = Math.floor(index / 3) * 4;\n\t\t\tvar end = Math.ceil((index + length) / 3) * 4;\n\t\t\tvar bytes = window.atob(dataURI.substring(start + dataStart, end + dataStart));\n\t\t\tvar delta = index - Math.floor(start / 4) * 3;\n\t\t\tfor (i = delta; i < delta + length; i++)\n\t\t\t\tdata.array[i - delta] = bytes.charCodeAt(i);\n\t\t\tcallback(data.array);\n\t\t}\n\n\t\tthat.size = 0;\n\t\tthat.init = init;\n\t\tthat.readUint8Array = readUint8Array;\n\t}\n\tData64URIReader.prototype = new Reader();\n\tData64URIReader.prototype.constructor = Data64URIReader;\n\n\tfunction BlobReader(blob) {\n\t\tvar that = this;\n\n\t\tfunction init(callback) {\n\t\t\tthis.size = blob.size;\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction readUint8Array(index, length, callback, onerror) {\n\t\t\tvar reader = new FileReader();\n\t\t\treader.onload = function(e) {\n\t\t\t\tcallback(new Uint8Array(e.target.result));\n\t\t\t};\n\t\t\treader.onerror = onerror;\n\t\t\treader.readAsArrayBuffer(blobSlice(blob, index, length));\n\t\t}\n\n\t\tthat.size = 0;\n\t\tthat.init = init;\n\t\tthat.readUint8Array = readUint8Array;\n\t}\n\tBlobReader.prototype = new Reader();\n\tBlobReader.prototype.constructor = BlobReader;\n\n\t// Writers\n\n\tfunction Writer() {\n\t}\n\tWriter.prototype.getData = function(callback) {\n\t\tcallback(this.data);\n\t};\n\n\tfunction TextWriter(encoding) {\n\t\tvar that = this, blob;\n\n\t\tfunction init(callback) {\n\t\t\tblob = new Blob([], {\n\t\t\t\ttype : TEXT_PLAIN\n\t\t\t});\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction writeUint8Array(array, callback) {\n\t\t\tblob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], {\n\t\t\t\ttype : TEXT_PLAIN\n\t\t\t});\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction getData(callback, onerror) {\n\t\t\tvar reader = new FileReader();\n\t\t\treader.onload = function(e) {\n\t\t\t\tcallback(e.target.result);\n\t\t\t};\n\t\t\treader.onerror = onerror;\n\t\t\treader.readAsText(blob, encoding);\n\t\t}\n\n\t\tthat.init = init;\n\t\tthat.writeUint8Array = writeUint8Array;\n\t\tthat.getData = getData;\n\t}\n\tTextWriter.prototype = new Writer();\n\tTextWriter.prototype.constructor = TextWriter;\n\n\tfunction Data64URIWriter(contentType) {\n\t\tvar that = this, data = \"\", pending = \"\";\n\n\t\tfunction init(callback) {\n\t\t\tdata += \"data:\" + (contentType || \"\") + \";base64,\";\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction writeUint8Array(array, callback) {\n\t\t\tvar i, delta = pending.length, dataString = pending;\n\t\t\tpending = \"\";\n\t\t\tfor (i = 0; i < (Math.floor((delta + array.length) / 3) * 3) - delta; i++)\n\t\t\t\tdataString += String.fromCharCode(array[i]);\n\t\t\tfor (; i < array.length; i++)\n\t\t\t\tpending += String.fromCharCode(array[i]);\n\t\t\tif (dataString.length > 2)\n\t\t\t\tdata += window.btoa(dataString);\n\t\t\telse\n\t\t\t\tpending = dataString;\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction getData(callback) {\n\t\t\tcallback(data + window.btoa(pending));\n\t\t}\n\n\t\tthat.init = init;\n\t\tthat.writeUint8Array = writeUint8Array;\n\t\tthat.getData = getData;\n\t}\n\tData64URIWriter.prototype = new Writer();\n\tData64URIWriter.prototype.constructor = Data64URIWriter;\n\n\tfunction BlobWriter(contentType) {\n\t\tvar blob, that = this;\n\n\t\tfunction init(callback) {\n\t\t\tblob = new Blob([], {\n\t\t\t\ttype : contentType\n\t\t\t});\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction writeUint8Array(array, callback) {\n\t\t\tblob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], {\n\t\t\t\ttype : contentType\n\t\t\t});\n\t\t\tcallback();\n\t\t}\n\n\t\tfunction getData(callback) {\n\t\t\tcallback(blob);\n\t\t}\n\n\t\tthat.init = init;\n\t\tthat.writeUint8Array = writeUint8Array;\n\t\tthat.getData = getData;\n\t}\n\tBlobWriter.prototype = new Writer();\n\tBlobWriter.prototype.constructor = BlobWriter;\n\n\t// inflate/deflate core functions\n\n\tfunction launchWorkerProcess(worker, reader, writer, offset, size, onappend, onprogress, onend, onreaderror, onwriteerror) {\n\t\tvar chunkIndex = 0, index, outputSize;\n\n\t\tfunction onflush() {\n\t\t\tworker.removeEventListener(MESSAGE_EVENT, onmessage, false);\n\t\t\tonend(outputSize);\n\t\t}\n\n\t\tfunction onmessage(event) {\n\t\t\tvar message = event.data, data = message.data;\n\n\t\t\tif (message.onappend) {\n\t\t\t\toutputSize += data.length;\n\t\t\t\twriter.writeUint8Array(data, function() {\n\t\t\t\t\tonappend(false, data);\n\t\t\t\t\tstep();\n\t\t\t\t}, onwriteerror);\n\t\t\t}\n\t\t\tif (message.onflush)\n\t\t\t\tif (data) {\n\t\t\t\t\toutputSize += data.length;\n\t\t\t\t\twriter.writeUint8Array(data, function() {\n\t\t\t\t\t\tonappend(false, data);\n\t\t\t\t\t\tonflush();\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t} else\n\t\t\t\t\tonflush();\n\t\t\tif (message.progress && onprogress)\n\t\t\t\tonprogress(index + message.current, size);\n\t\t}\n\n\t\tfunction step() {\n\t\t\tindex = chunkIndex * CHUNK_SIZE;\n\t\t\tif (index < size)\n\t\t\t\treader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) {\n\t\t\t\t\tworker.postMessage({\n\t\t\t\t\t\tappend : true,\n\t\t\t\t\t\tdata : array\n\t\t\t\t\t});\n\t\t\t\t\tchunkIndex++;\n\t\t\t\t\tif (onprogress)\n\t\t\t\t\t\tonprogress(index, size);\n\t\t\t\t\tonappend(true, array);\n\t\t\t\t}, onreaderror);\n\t\t\telse\n\t\t\t\tworker.postMessage({\n\t\t\t\t\tflush : true\n\t\t\t\t});\n\t\t}\n\n\t\toutputSize = 0;\n\t\tworker.addEventListener(MESSAGE_EVENT, onmessage, false);\n\t\tstep();\n\t}\n\n\tfunction launchProcess(process, reader, writer, offset, size, onappend, onprogress, onend, onreaderror, onwriteerror) {\n\t\tvar chunkIndex = 0, index, outputSize = 0;\n\n\t\tfunction step() {\n\t\t\tvar outputData;\n\t\t\tindex = chunkIndex * CHUNK_SIZE;\n\t\t\tif (index < size)\n\t\t\t\treader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(inputData) {\n\t\t\t\t\tvar outputData = process.append(inputData, function() {\n\t\t\t\t\t\tif (onprogress)\n\t\t\t\t\t\t\tonprogress(offset + index, size);\n\t\t\t\t\t});\n\t\t\t\t\toutputSize += outputData.length;\n\t\t\t\t\tonappend(true, inputData);\n\t\t\t\t\twriter.writeUint8Array(outputData, function() {\n\t\t\t\t\t\tonappend(false, outputData);\n\t\t\t\t\t\tchunkIndex++;\n\t\t\t\t\t\tsetTimeout(step, 1);\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t\tif (onprogress)\n\t\t\t\t\t\tonprogress(index, size);\n\t\t\t\t}, onreaderror);\n\t\t\telse {\n\t\t\t\toutputData = process.flush();\n\t\t\t\tif (outputData) {\n\t\t\t\t\toutputSize += outputData.length;\n\t\t\t\t\twriter.writeUint8Array(outputData, function() {\n\t\t\t\t\t\tonappend(false, outputData);\n\t\t\t\t\t\tonend(outputSize);\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t} else\n\t\t\t\t\tonend(outputSize);\n\t\t\t}\n\t\t}\n\n\t\tstep();\n\t}\n\n\tfunction inflate(reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) {\n\t\tvar worker, crc32 = new Crc32();\n\n\t\tfunction oninflateappend(sending, array) {\n\t\t\tif (computeCrc32 && !sending)\n\t\t\t\tcrc32.append(array);\n\t\t}\n\n\t\tfunction oninflateend(outputSize) {\n\t\t\tonend(outputSize, crc32.get());\n\t\t}\n\n\t\tif (obj.zip.useWebWorkers) {\n\t\t\tworker = new Worker(obj.zip.workerScriptsPath + INFLATE_JS);\n\t\t\tlaunchWorkerProcess(worker, reader, writer, offset, size, oninflateappend, onprogress, oninflateend, onreaderror, onwriteerror);\n\t\t} else\n\t\t\tlaunchProcess(new obj.zip.Inflater(), reader, writer, offset, size, oninflateappend, onprogress, oninflateend, onreaderror, onwriteerror);\n\t\treturn worker;\n\t}\n\n\tfunction deflate(reader, writer, level, onend, onprogress, onreaderror, onwriteerror) {\n\t\tvar worker, crc32 = new Crc32();\n\n\t\tfunction ondeflateappend(sending, array) {\n\t\t\tif (sending)\n\t\t\t\tcrc32.append(array);\n\t\t}\n\n\t\tfunction ondeflateend(outputSize) {\n\t\t\tonend(outputSize, crc32.get());\n\t\t}\n\n\t\tfunction onmessage() {\n\t\t\tworker.removeEventListener(MESSAGE_EVENT, onmessage, false);\n\t\t\tlaunchWorkerProcess(worker, reader, writer, 0, reader.size, ondeflateappend, onprogress, ondeflateend, onreaderror, onwriteerror);\n\t\t}\n\n\t\tif (obj.zip.useWebWorkers) {\n\t\t\tworker = new Worker(obj.zip.workerScriptsPath + DEFLATE_JS);\n\t\t\tworker.addEventListener(MESSAGE_EVENT, onmessage, false);\n\t\t\tworker.postMessage({\n\t\t\t\tinit : true,\n\t\t\t\tlevel : level\n\t\t\t});\n\t\t} else\n\t\t\tlaunchProcess(new obj.zip.Deflater(), reader, writer, 0, reader.size, ondeflateappend, onprogress, ondeflateend, onreaderror, onwriteerror);\n\t\treturn worker;\n\t}\n\n\tfunction copy(reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) {\n\t\tvar chunkIndex = 0, crc32 = new Crc32();\n\n\t\tfunction step() {\n\t\t\tvar index = chunkIndex * CHUNK_SIZE;\n\t\t\tif (index < size)\n\t\t\t\treader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) {\n\t\t\t\t\tif (computeCrc32)\n\t\t\t\t\t\tcrc32.append(array);\n\t\t\t\t\tif (onprogress)\n\t\t\t\t\t\tonprogress(index, size, array);\n\t\t\t\t\twriter.writeUint8Array(array, function() {\n\t\t\t\t\t\tchunkIndex++;\n\t\t\t\t\t\tstep();\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t}, onreaderror);\n\t\t\telse\n\t\t\t\tonend(size, crc32.get());\n\t\t}\n\n\t\tstep();\n\t}\n\n\t// ZipReader\n\n\tfunction decodeASCII(str) {\n\t\tvar i, out = \"\", charCode, extendedASCII = [ '\\u00C7', '\\u00FC', '\\u00E9', '\\u00E2', '\\u00E4', '\\u00E0', '\\u00E5', '\\u00E7', '\\u00EA', '\\u00EB',\n\t\t\t\t'\\u00E8', '\\u00EF', '\\u00EE', '\\u00EC', '\\u00C4', '\\u00C5', '\\u00C9', '\\u00E6', '\\u00C6', '\\u00F4', '\\u00F6', '\\u00F2', '\\u00FB', '\\u00F9',\n\t\t\t\t'\\u00FF', '\\u00D6', '\\u00DC', '\\u00F8', '\\u00A3', '\\u00D8', '\\u00D7', '\\u0192', '\\u00E1', '\\u00ED', '\\u00F3', '\\u00FA', '\\u00F1', '\\u00D1',\n\t\t\t\t'\\u00AA', '\\u00BA', '\\u00BF', '\\u00AE', '\\u00AC', '\\u00BD', '\\u00BC', '\\u00A1', '\\u00AB', '\\u00BB', '_', '_', '_', '\\u00A6', '\\u00A6',\n\t\t\t\t'\\u00C1', '\\u00C2', '\\u00C0', '\\u00A9', '\\u00A6', '\\u00A6', '+', '+', '\\u00A2', '\\u00A5', '+', '+', '-', '-', '+', '-', '+', '\\u00E3',\n\t\t\t\t'\\u00C3', '+', '+', '-', '-', '\\u00A6', '-', '+', '\\u00A4', '\\u00F0', '\\u00D0', '\\u00CA', '\\u00CB', '\\u00C8', 'i', '\\u00CD', '\\u00CE',\n\t\t\t\t'\\u00CF', '+', '+', '_', '_', '\\u00A6', '\\u00CC', '_', '\\u00D3', '\\u00DF', '\\u00D4', '\\u00D2', '\\u00F5', '\\u00D5', '\\u00B5', '\\u00FE',\n\t\t\t\t'\\u00DE', '\\u00DA', '\\u00DB', '\\u00D9', '\\u00FD', '\\u00DD', '\\u00AF', '\\u00B4', '\\u00AD', '\\u00B1', '_', '\\u00BE', '\\u00B6', '\\u00A7',\n\t\t\t\t'\\u00F7', '\\u00B8', '\\u00B0', '\\u00A8', '\\u00B7', '\\u00B9', '\\u00B3', '\\u00B2', '_', ' ' ];\n\t\tfor (i = 0; i < str.length; i++) {\n\t\t\tcharCode = str.charCodeAt(i) & 0xFF;\n\t\t\tif (charCode > 127)\n\t\t\t\tout += extendedASCII[charCode - 128];\n\t\t\telse\n\t\t\t\tout += String.fromCharCode(charCode);\n\t\t}\n\t\treturn out;\n\t}\n\n\tfunction decodeUTF8(string) {\n\t\treturn decodeURIComponent(escape(string));\n\t}\n\n\tfunction getString(bytes) {\n\t\tvar i, str = \"\";\n\t\tfor (i = 0; i < bytes.length; i++)\n\t\t\tstr += String.fromCharCode(bytes[i]);\n\t\treturn str;\n\t}\n\n\tfunction getDate(timeRaw) {\n\t\tvar date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & 0x0000ffff;\n\t\ttry {\n\t\t\treturn new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5,\n\t\t\t\t\t(time & 0x001F) * 2, 0);\n\t\t} catch (e) {\n\t\t}\n\t}\n\n\tfunction readCommonHeader(entry, data, index, centralDirectory, onerror) {\n\t\tentry.version = data.view.getUint16(index, true);\n\t\tentry.bitFlag = data.view.getUint16(index + 2, true);\n\t\tentry.compressionMethod = data.view.getUint16(index + 4, true);\n\t\tentry.lastModDateRaw = data.view.getUint32(index + 6, true);\n\t\tentry.lastModDate = getDate(entry.lastModDateRaw);\n\t\tif ((entry.bitFlag & 0x01) === 0x01) {\n\t\t\tonerror(ERR_ENCRYPTED);\n\t\t\treturn;\n\t\t}\n\t\tif (centralDirectory || (entry.bitFlag & 0x0008) != 0x0008) {\n\t\t\tentry.crc32 = data.view.getUint32(index + 10, true);\n\t\t\tentry.compressedSize = data.view.getUint32(index + 14, true);\n\t\t\tentry.uncompressedSize = data.view.getUint32(index + 18, true);\n\t\t}\n\t\tif (entry.compressedSize === 0xFFFFFFFF || entry.uncompressedSize === 0xFFFFFFFF) {\n\t\t\tonerror(ERR_ZIP64);\n\t\t\treturn;\n\t\t}\n\t\tentry.filenameLength = data.view.getUint16(index + 22, true);\n\t\tentry.extraFieldLength = data.view.getUint16(index + 24, true);\n\t}\n\n\tfunction createZipReader(reader, onerror) {\n\t\tfunction Entry() {\n\t\t}\n\n\t\tEntry.prototype.getData = function(writer, onend, onprogress, checkCrc32) {\n\t\t\tvar that = this, worker;\n\n\t\t\tfunction terminate(callback, param) {\n\t\t\t\tif (worker)\n\t\t\t\t\tworker.terminate();\n\t\t\t\tworker = null;\n\t\t\t\tif (callback)\n\t\t\t\t\tcallback(param);\n\t\t\t}\n\n\t\t\tfunction testCrc32(crc32) {\n\t\t\t\tvar dataCrc32 = getDataHelper(4);\n\t\t\t\tdataCrc32.view.setUint32(0, crc32);\n\t\t\t\treturn that.crc32 == dataCrc32.view.getUint32(0);\n\t\t\t}\n\n\t\t\tfunction getWriterData(uncompressedSize, crc32) {\n\t\t\t\tif (checkCrc32 && !testCrc32(crc32))\n\t\t\t\t\tonreaderror();\n\t\t\t\telse\n\t\t\t\t\twriter.getData(function(data) {\n\t\t\t\t\t\tterminate(onend, data);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction onreaderror() {\n\t\t\t\tterminate(onerror, ERR_READ_DATA);\n\t\t\t}\n\n\t\t\tfunction onwriteerror() {\n\t\t\t\tterminate(onerror, ERR_WRITE_DATA);\n\t\t\t}\n\n\t\t\treader.readUint8Array(that.offset, 30, function(bytes) {\n\t\t\t\tvar data = getDataHelper(bytes.length, bytes), dataOffset;\n\t\t\t\tif (data.view.getUint32(0) != 0x504b0304) {\n\t\t\t\t\tonerror(ERR_BAD_FORMAT);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treadCommonHeader(that, data, 4, false, onerror);\n\t\t\t\tdataOffset = that.offset + 30 + that.filenameLength + that.extraFieldLength;\n\t\t\t\twriter.init(function() {\n\t\t\t\t\tif (that.compressionMethod === 0)\n\t\t\t\t\t\tcopy(reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror);\n\t\t\t\t\telse\n\t\t\t\t\t\tworker = inflate(reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror);\n\t\t\t\t}, onwriteerror);\n\t\t\t}, onreaderror);\n\t\t};\n\n\t\tfunction seekEOCDR(offset, entriesCallback) {\n\t\t\treader.readUint8Array(reader.size - offset, offset, function(bytes) {\n\t\t\t\tvar dataView = getDataHelper(bytes.length, bytes).view;\n\t\t\t\tif (dataView.getUint32(0) != 0x504b0506) {\n\t\t\t\t\tseekEOCDR(offset + 1, entriesCallback);\n\t\t\t\t} else {\n\t\t\t\t\tentriesCallback(dataView);\n\t\t\t\t}\n\t\t\t}, function() {\n\t\t\t\tonerror(ERR_READ);\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tgetEntries : function(callback) {\n\t\t\t\tif (reader.size < 22) {\n\t\t\t\t\tonerror(ERR_BAD_FORMAT);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// look for End of central directory record\n\t\t\t\tseekEOCDR(22, function(dataView) {\n\t\t\t\t\tvar datalength, fileslength;\n\t\t\t\t\tdatalength = dataView.getUint32(16, true);\n\t\t\t\t\tfileslength = dataView.getUint16(8, true);\n\t\t\t\t\treader.readUint8Array(datalength, reader.size - datalength, function(bytes) {\n\t\t\t\t\t\tvar i, index = 0, entries = [], entry, filename, comment, data = getDataHelper(bytes.length, bytes);\n\t\t\t\t\t\tfor (i = 0; i < fileslength; i++) {\n\t\t\t\t\t\t\tentry = new Entry();\n\t\t\t\t\t\t\tif (data.view.getUint32(index) != 0x504b0102) {\n\t\t\t\t\t\t\t\tonerror(ERR_BAD_FORMAT);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treadCommonHeader(entry, data, index + 6, true, onerror);\n\t\t\t\t\t\t\tentry.commentLength = data.view.getUint16(index + 32, true);\n\t\t\t\t\t\t\tentry.directory = ((data.view.getUint8(index + 38) & 0x10) == 0x10);\n\t\t\t\t\t\t\tentry.offset = data.view.getUint32(index + 42, true);\n\t\t\t\t\t\t\tfilename = getString(data.array.subarray(index + 46, index + 46 + entry.filenameLength));\n\t\t\t\t\t\t\tentry.filename = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(filename) : decodeASCII(filename);\n\t\t\t\t\t\t\tif (!entry.directory && entry.filename.charAt(entry.filename.length - 1) == \"/\")\n\t\t\t\t\t\t\t\tentry.directory = true;\n\t\t\t\t\t\t\tcomment = getString(data.array.subarray(index + 46 + entry.filenameLength + entry.extraFieldLength, index + 46\n\t\t\t\t\t\t\t\t\t+ entry.filenameLength + entry.extraFieldLength + entry.commentLength));\n\t\t\t\t\t\t\tentry.comment = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(comment) : decodeASCII(comment);\n\t\t\t\t\t\t\tentries.push(entry);\n\t\t\t\t\t\t\tindex += 46 + entry.filenameLength + entry.extraFieldLength + entry.commentLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallback(entries);\n\t\t\t\t\t}, function() {\n\t\t\t\t\t\tonerror(ERR_READ);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tclose : function(callback) {\n\t\t\t\tif (callback)\n\t\t\t\t\tcallback();\n\t\t\t}\n\t\t};\n\t}\n\n\t// ZipWriter\n\n\tfunction encodeUTF8(string) {\n\t\treturn unescape(encodeURIComponent(string));\n\t}\n\n\tfunction getBytes(str) {\n\t\tvar i, array = [];\n\t\tfor (i = 0; i < str.length; i++)\n\t\t\tarray.push(str.charCodeAt(i));\n\t\treturn array;\n\t}\n\n\tfunction createZipWriter(writer, onerror, dontDeflate) {\n\t\tvar worker, files = {}, filenames = [], datalength = 0;\n\n\t\tfunction terminate(callback, message) {\n\t\t\tif (worker)\n\t\t\t\tworker.terminate();\n\t\t\tworker = null;\n\t\t\tif (callback)\n\t\t\t\tcallback(message);\n\t\t}\n\n\t\tfunction onwriteerror() {\n\t\t\tterminate(onerror, ERR_WRITE);\n\t\t}\n\n\t\tfunction onreaderror() {\n\t\t\tterminate(onerror, ERR_READ_DATA);\n\t\t}\n\n\t\treturn {\n\t\t\tadd : function(name, reader, onend, onprogress, options) {\n\t\t\t\tvar header, filename, date;\n\n\t\t\t\tfunction writeHeader(callback) {\n\t\t\t\t\tvar data;\n\t\t\t\t\tdate = options.lastModDate || new Date();\n\t\t\t\t\theader = getDataHelper(26);\n\t\t\t\t\tfiles[name] = {\n\t\t\t\t\t\theaderArray : header.array,\n\t\t\t\t\t\tdirectory : options.directory,\n\t\t\t\t\t\tfilename : filename,\n\t\t\t\t\t\toffset : datalength,\n\t\t\t\t\t\tcomment : getBytes(encodeUTF8(options.comment || \"\"))\n\t\t\t\t\t};\n\t\t\t\t\theader.view.setUint32(0, 0x14000808);\n\t\t\t\t\tif (options.version)\n\t\t\t\t\t\theader.view.setUint8(0, options.version);\n\t\t\t\t\tif (!dontDeflate && options.level !== 0 && !options.directory)\n\t\t\t\t\t\theader.view.setUint16(4, 0x0800);\n\t\t\t\t\theader.view.setUint16(6, (((date.getHours() << 6) | date.getMinutes()) << 5) | date.getSeconds() / 2, true);\n\t\t\t\t\theader.view.setUint16(8, ((((date.getFullYear() - 1980) << 4) | (date.getMonth() + 1)) << 5) | date.getDate(), true);\n\t\t\t\t\theader.view.setUint16(22, filename.length, true);\n\t\t\t\t\tdata = getDataHelper(30 + filename.length);\n\t\t\t\t\tdata.view.setUint32(0, 0x504b0304);\n\t\t\t\t\tdata.array.set(header.array, 4);\n\t\t\t\t\tdata.array.set(filename, 30);\n\t\t\t\t\tdatalength += data.array.length;\n\t\t\t\t\twriter.writeUint8Array(data.array, callback, onwriteerror);\n\t\t\t\t}\n\n\t\t\t\tfunction writeFooter(compressedLength, crc32) {\n\t\t\t\t\tvar footer = getDataHelper(16);\n\t\t\t\t\tdatalength += compressedLength || 0;\n\t\t\t\t\tfooter.view.setUint32(0, 0x504b0708);\n\t\t\t\t\tif (typeof crc32 != \"undefined\") {\n\t\t\t\t\t\theader.view.setUint32(10, crc32, true);\n\t\t\t\t\t\tfooter.view.setUint32(4, crc32, true);\n\t\t\t\t\t}\n\t\t\t\t\tif (reader) {\n\t\t\t\t\t\tfooter.view.setUint32(8, compressedLength, true);\n\t\t\t\t\t\theader.view.setUint32(14, compressedLength, true);\n\t\t\t\t\t\tfooter.view.setUint32(12, reader.size, true);\n\t\t\t\t\t\theader.view.setUint32(18, reader.size, true);\n\t\t\t\t\t}\n\t\t\t\t\twriter.writeUint8Array(footer.array, function() {\n\t\t\t\t\t\tdatalength += 16;\n\t\t\t\t\t\tterminate(onend);\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t}\n\n\t\t\t\tfunction writeFile() {\n\t\t\t\t\toptions = options || {};\n\t\t\t\t\tname = name.trim();\n\t\t\t\t\tif (options.directory && name.charAt(name.length - 1) != \"/\")\n\t\t\t\t\t\tname += \"/\";\n\t\t\t\t\tif (files.hasOwnProperty(name)) {\n\t\t\t\t\t\tonerror(ERR_DUPLICATED_NAME);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tfilename = getBytes(encodeUTF8(name));\n\t\t\t\t\tfilenames.push(name);\n\t\t\t\t\twriteHeader(function() {\n\t\t\t\t\t\tif (reader)\n\t\t\t\t\t\t\tif (dontDeflate || options.level === 0)\n\t\t\t\t\t\t\t\tcopy(reader, writer, 0, reader.size, true, writeFooter, onprogress, onreaderror, onwriteerror);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tworker = deflate(reader, writer, options.level, writeFooter, onprogress, onreaderror, onwriteerror);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twriteFooter();\n\t\t\t\t\t}, onwriteerror);\n\t\t\t\t}\n\n\t\t\t\tif (reader)\n\t\t\t\t\treader.init(writeFile, onreaderror);\n\t\t\t\telse\n\t\t\t\t\twriteFile();\n\t\t\t},\n\t\t\tclose : function(callback) {\n\t\t\t\tvar data, length = 0, index = 0, indexFilename, file;\n\t\t\t\tfor (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {\n\t\t\t\t\tfile = files[filenames[indexFilename]];\n\t\t\t\t\tlength += 46 + file.filename.length + file.comment.length;\n\t\t\t\t}\n\t\t\t\tdata = getDataHelper(length + 22);\n\t\t\t\tfor (indexFilename = 0; indexFilename < filenames.length; indexFilename++) {\n\t\t\t\t\tfile = files[filenames[indexFilename]];\n\t\t\t\t\tdata.view.setUint32(index, 0x504b0102);\n\t\t\t\t\tdata.view.setUint16(index + 4, 0x1400);\n\t\t\t\t\tdata.array.set(file.headerArray, index + 6);\n\t\t\t\t\tdata.view.setUint16(index + 32, file.comment.length, true);\n\t\t\t\t\tif (file.directory)\n\t\t\t\t\t\tdata.view.setUint8(index + 38, 0x10);\n\t\t\t\t\tdata.view.setUint32(index + 42, file.offset, true);\n\t\t\t\t\tdata.array.set(file.filename, index + 46);\n\t\t\t\t\tdata.array.set(file.comment, index + 46 + file.filename.length);\n\t\t\t\t\tindex += 46 + file.filename.length + file.comment.length;\n\t\t\t\t}\n\t\t\t\tdata.view.setUint32(index, 0x504b0506);\n\t\t\t\tdata.view.setUint16(index + 8, filenames.length, true);\n\t\t\t\tdata.view.setUint16(index + 10, filenames.length, true);\n\t\t\t\tdata.view.setUint32(index + 12, length, true);\n\t\t\t\tdata.view.setUint32(index + 16, datalength, true);\n\t\t\t\twriter.writeUint8Array(data.array, function() {\n\t\t\t\t\tterminate(function() {\n\t\t\t\t\t\twriter.getData(callback);\n\t\t\t\t\t});\n\t\t\t\t}, onwriteerror);\n\t\t\t}\n\t\t};\n\t}\n\n\tobj.zip = {\n\t\tReader : Reader,\n\t\tWriter : Writer,\n\t\tBlobReader : BlobReader,\n\t\tData64URIReader : Data64URIReader,\n\t\tTextReader : TextReader,\n\t\tBlobWriter : BlobWriter,\n\t\tData64URIWriter : Data64URIWriter,\n\t\tTextWriter : TextWriter,\n\t\tcreateReader : function(reader, callback, onerror) {\n\t\t\treader.init(function() {\n\t\t\t\tcallback(createZipReader(reader, onerror));\n\t\t\t}, onerror);\n\t\t},\n\t\tcreateWriter : function(writer, callback, onerror, dontDeflate) {\n\t\t\twriter.init(function() {\n\t\t\t\tcallback(createZipWriter(writer, onerror, dontDeflate));\n\t\t\t}, onerror);\n\t\t},\n\t\tuseWebWorkers : true\n\t};\n\n\tvar workerScriptsPath;\n\n\tObject.defineProperties(obj.zip, {\n 'workerScriptsPath' : {\n get : function() {\n if (typeof workerScriptsPath === 'undefined') {\n workerScriptsPath = buildModuleUrl('ThirdParty/Workers/');\n }\n return workerScriptsPath;\n }\n }\n });\n\n})(tmp);\n\n export default tmp.zip;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport when from \"../ThirdParty/when.js\";\nimport zip from \"../ThirdParty/zip.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport SampledProperty from \"./SampledProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\n\nvar BILLBOARD_SIZE = 32;\nvar kmlNamespace = \"http://www.opengis.net/kml/2.2\";\nvar gxNamespace = \"http://www.google.com/kml/ext/2.2\";\nvar xmlnsNamespace = \"http://www.w3.org/2000/xmlns/\";\n\n//\n// Handles files external to the KML (eg. textures and models)\n//\nfunction ExternalFileHandler(modelCallback) {\n this._files = {};\n this._promises = [];\n this._count = 0;\n this._modelCallback = modelCallback;\n}\n\nvar imageTypeRegex = /^data:image\\/([^,;]+)/;\nExternalFileHandler.prototype.texture = function (texture) {\n var that = this;\n var filename;\n\n if (typeof texture === \"string\" || texture instanceof Resource) {\n texture = Resource.createIfNeeded(texture);\n if (!texture.isDataUri) {\n return texture.url;\n }\n\n // If its a data URI try and get the correct extension and then fetch the blob\n var regexResult = texture.url.match(imageTypeRegex);\n filename = \"texture_\" + ++this._count;\n if (defined(regexResult)) {\n filename += \".\" + regexResult[1];\n }\n\n var promise = texture.fetchBlob().then(function (blob) {\n that._files[filename] = blob;\n });\n\n this._promises.push(promise);\n\n return filename;\n }\n\n if (texture instanceof HTMLCanvasElement) {\n var deferred = when.defer();\n this._promises.push(deferred.promise);\n\n filename = \"texture_\" + ++this._count + \".png\";\n texture.toBlob(function (blob) {\n that._files[filename] = blob;\n deferred.resolve();\n });\n\n return filename;\n }\n\n return \"\";\n};\n\nfunction getModelBlobHander(that, filename) {\n return function (blob) {\n that._files[filename] = blob;\n };\n}\n\nExternalFileHandler.prototype.model = function (model, time) {\n var modelCallback = this._modelCallback;\n if (!defined(modelCallback)) {\n throw new RuntimeError(\n \"Encountered a model entity while exporting to KML, but no model callback was supplied.\"\n );\n }\n\n var externalFiles = {};\n var url = modelCallback(model, time, externalFiles);\n\n // Iterate through external files and add them to our list once the promise resolves\n for (var filename in externalFiles) {\n if (externalFiles.hasOwnProperty(filename)) {\n var promise = when(externalFiles[filename]);\n this._promises.push(promise);\n\n promise.then(getModelBlobHander(this, filename));\n }\n }\n\n return url;\n};\n\nObject.defineProperties(ExternalFileHandler.prototype, {\n promise: {\n get: function () {\n return when.all(this._promises);\n },\n },\n files: {\n get: function () {\n return this._files;\n },\n },\n});\n\n//\n// Handles getting values from properties taking the desired time and default values into account\n//\nfunction ValueGetter(time) {\n this._time = time;\n}\n\nValueGetter.prototype.get = function (property, defaultVal, result) {\n var value;\n if (defined(property)) {\n value = defined(property.getValue)\n ? property.getValue(this._time, result)\n : property;\n }\n\n return defaultValue(value, defaultVal);\n};\n\nValueGetter.prototype.getColor = function (property, defaultVal) {\n var result = this.get(property, defaultVal);\n if (defined(result)) {\n return colorToString(result);\n }\n};\n\nValueGetter.prototype.getMaterialType = function (property) {\n if (!defined(property)) {\n return;\n }\n\n return property.getType(this._time);\n};\n\n//\n// Caches styles so we don't generate a ton of duplicate styles\n//\nfunction StyleCache() {\n this._ids = {};\n this._styles = {};\n this._count = 0;\n}\n\nStyleCache.prototype.get = function (element) {\n var ids = this._ids;\n var key = element.innerHTML;\n if (defined(ids[key])) {\n return ids[key];\n }\n\n var styleId = \"style-\" + ++this._count;\n element.setAttribute(\"id\", styleId);\n\n // Store with #\n styleId = \"#\" + styleId;\n ids[key] = styleId;\n this._styles[key] = element;\n\n return styleId;\n};\n\nStyleCache.prototype.save = function (parentElement) {\n var styles = this._styles;\n\n var firstElement = parentElement.childNodes[0];\n for (var key in styles) {\n if (styles.hasOwnProperty(key)) {\n parentElement.insertBefore(styles[key], firstElement);\n }\n }\n};\n\n//\n// Manages the generation of IDs because an entity may have geometry and a Folder for children\n//\nfunction IdManager() {\n this._ids = {};\n}\n\nIdManager.prototype.get = function (id) {\n if (!defined(id)) {\n return this.get(createGuid());\n }\n\n var ids = this._ids;\n if (!defined(ids[id])) {\n ids[id] = 0;\n return id;\n }\n\n return id.toString() + \"-\" + ++ids[id];\n};\n\n/**\n * @typedef exportKmlResultKml\n * @type {Object}\n * @property {String} kml The generated KML.\n * @property {Object.<string, Blob>} externalFiles An object dictionary of external files\n */\n\n/**\n * @typedef exportKmlResultKmz\n * @type {Object}\n * @property {Blob} kmz The generated kmz file.\n */\n\n/**\n * Exports an EntityCollection as a KML document. Only Point, Billboard, Model, Path, Polygon, Polyline geometries\n * will be exported. Note that there is not a 1 to 1 mapping of Entity properties to KML Feature properties. For\n * example, entity properties that are time dynamic but cannot be dynamic in KML are exported with their values at\n * options.time or the beginning of the EntityCollection's time interval if not specified. For time-dynamic properties\n * that are supported in KML, we use the samples if it is a {@link SampledProperty} otherwise we sample the value using\n * the options.sampleDuration. Point, Billboard, Model and Path geometries with time-dynamic positions will be exported\n * as gx:Track Features. Not all Materials are representable in KML, so for more advanced Materials just the primary\n * color is used. Canvas objects are exported as PNG images.\n *\n * @function exportKml\n *\n * @param {Object} options An object with the following properties:\n * @param {EntityCollection} options.entities The EntityCollection to export as KML.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for the output file.\n * @param {exportKmlModelCallback} [options.modelCallback] A callback that will be called with a {@link ModelGraphics} instance and should return the URI to use in the KML. Required if a model exists in the entity collection.\n * @param {JulianDate} [options.time=entities.computeAvailability().start] The time value to use to get properties that are not time varying in KML.\n * @param {TimeInterval} [options.defaultAvailability=entities.computeAvailability()] The interval that will be sampled if an entity doesn't have an availability.\n * @param {Number} [options.sampleDuration=60] The number of seconds to sample properties that are varying in KML.\n * @param {Boolean} [options.kmz=false] If true KML and external files will be compressed into a kmz file.\n *\n * @returns {Promise<exportKmlResultKml|exportKmlResultKmz>} A promise that resolved to an object containing the KML string and a dictionary of external file blobs, or a kmz file as a blob if options.kmz is true.\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Export%20KML.html|Cesium Sandcastle KML Export Demo}\n * @example\n * Cesium.exportKml({\n * entities: entityCollection\n * })\n * .then(function(result) {\n * // The XML string is in result.kml\n *\n * var externalFiles = result.externalFiles\n * for(var file in externalFiles) {\n * // file is the name of the file used in the KML document as the href\n * // externalFiles[file] is a blob with the contents of the file\n * }\n * });\n *\n */\nfunction exportKml(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var entities = options.entities;\n var kmz = defaultValue(options.kmz, false);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(entities)) {\n throw new DeveloperError(\"entities is required.\");\n }\n //>>includeEnd('debug');\n\n // Get the state that is passed around during the recursion\n // This is separated out for testing.\n var state = exportKml._createState(options);\n\n // Filter EntityCollection so we only have top level entities\n var rootEntities = entities.values.filter(function (entity) {\n return !defined(entity.parent);\n });\n\n // Add the <Document>\n var kmlDoc = state.kmlDoc;\n var kmlElement = kmlDoc.documentElement;\n kmlElement.setAttributeNS(xmlnsNamespace, \"xmlns:gx\", gxNamespace);\n var kmlDocumentElement = kmlDoc.createElement(\"Document\");\n kmlElement.appendChild(kmlDocumentElement);\n\n // Create the KML Hierarchy\n recurseEntities(state, kmlDocumentElement, rootEntities);\n\n // Write out the <Style> elements\n state.styleCache.save(kmlDocumentElement);\n\n // Once all the blobs have resolved return the KML string along with the blob collection\n var externalFileHandler = state.externalFileHandler;\n return externalFileHandler.promise.then(function () {\n var serializer = new XMLSerializer();\n var kmlString = serializer.serializeToString(state.kmlDoc);\n if (kmz) {\n return createKmz(kmlString, externalFileHandler.files);\n }\n\n return {\n kml: kmlString,\n externalFiles: externalFileHandler.files,\n };\n });\n}\n\nfunction createKmz(kmlString, externalFiles) {\n var deferred = when.defer();\n zip.createWriter(new zip.BlobWriter(), function (writer) {\n // We need to only write one file at a time so the zip doesn't get corrupted\n addKmlToZip(writer, kmlString)\n .then(function () {\n var keys = Object.keys(externalFiles);\n return addExternalFilesToZip(writer, keys, externalFiles, 0);\n })\n .then(function () {\n writer.close(function (blob) {\n deferred.resolve({\n kmz: blob,\n });\n });\n });\n });\n\n return deferred.promise;\n}\n\nfunction addKmlToZip(writer, kmlString) {\n var deferred = when.defer();\n writer.add(\"doc.kml\", new zip.TextReader(kmlString), function () {\n deferred.resolve();\n });\n\n return deferred.promise;\n}\n\nfunction addExternalFilesToZip(writer, keys, externalFiles, index) {\n if (keys.length === index) {\n return;\n }\n\n var filename = keys[index];\n\n var deferred = when.defer();\n writer.add(\n filename,\n new zip.BlobReader(externalFiles[filename]),\n function () {\n deferred.resolve();\n }\n );\n\n return deferred.promise.then(function () {\n return addExternalFilesToZip(writer, keys, externalFiles, index + 1);\n });\n}\n\nexportKml._createState = function (options) {\n var entities = options.entities;\n\n var styleCache = new StyleCache();\n\n // Use the start time as the default because just in case they define\n // properties with an interval even if they don't change.\n var entityAvailability = entities.computeAvailability();\n var time = defined(options.time) ? options.time : entityAvailability.start;\n\n // Figure out how we will sample dynamic position properties\n var defaultAvailability = defaultValue(\n options.defaultAvailability,\n entityAvailability\n );\n var sampleDuration = defaultValue(options.sampleDuration, 60);\n\n // Make sure we don't have infinite availability if we need to sample\n if (defaultAvailability.start === Iso8601.MINIMUM_VALUE) {\n if (defaultAvailability.stop === Iso8601.MAXIMUM_VALUE) {\n // Infinite, so just use the default\n defaultAvailability = new TimeInterval();\n } else {\n // No start time, so just sample 10 times before the stop\n JulianDate.addSeconds(\n defaultAvailability.stop,\n -10 * sampleDuration,\n defaultAvailability.start\n );\n }\n } else if (defaultAvailability.stop === Iso8601.MAXIMUM_VALUE) {\n // No stop time, so just sample 10 times after the start\n JulianDate.addSeconds(\n defaultAvailability.start,\n 10 * sampleDuration,\n defaultAvailability.stop\n );\n }\n\n var externalFileHandler = new ExternalFileHandler(options.modelCallback);\n\n var kmlDoc = document.implementation.createDocument(kmlNamespace, \"kml\");\n return {\n kmlDoc: kmlDoc,\n ellipsoid: defaultValue(options.ellipsoid, Ellipsoid.WGS84),\n idManager: new IdManager(),\n styleCache: styleCache,\n externalFileHandler: externalFileHandler,\n time: time,\n valueGetter: new ValueGetter(time),\n sampleDuration: sampleDuration,\n // Wrap it in a TimeIntervalCollection because that is what entity.availability is\n defaultAvailability: new TimeIntervalCollection([defaultAvailability]),\n };\n};\n\nfunction recurseEntities(state, parentNode, entities) {\n var kmlDoc = state.kmlDoc;\n var styleCache = state.styleCache;\n var valueGetter = state.valueGetter;\n var idManager = state.idManager;\n\n var count = entities.length;\n var overlays;\n var geometries;\n var styles;\n for (var i = 0; i < count; ++i) {\n var entity = entities[i];\n overlays = [];\n geometries = [];\n styles = [];\n\n createPoint(state, entity, geometries, styles);\n createLineString(state, entity.polyline, geometries, styles);\n createPolygon(state, entity.rectangle, geometries, styles, overlays);\n createPolygon(state, entity.polygon, geometries, styles, overlays);\n createModel(state, entity, entity.model, geometries, styles);\n\n var timeSpan;\n var availability = entity.availability;\n if (defined(availability)) {\n timeSpan = kmlDoc.createElement(\"TimeSpan\");\n\n if (!JulianDate.equals(availability.start, Iso8601.MINIMUM_VALUE)) {\n timeSpan.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"begin\",\n JulianDate.toIso8601(availability.start)\n )\n );\n }\n\n if (!JulianDate.equals(availability.stop, Iso8601.MAXIMUM_VALUE)) {\n timeSpan.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"end\",\n JulianDate.toIso8601(availability.stop)\n )\n );\n }\n }\n\n for (var overlayIndex = 0; overlayIndex < overlays.length; ++overlayIndex) {\n var overlay = overlays[overlayIndex];\n\n overlay.setAttribute(\"id\", idManager.get(entity.id));\n overlay.appendChild(\n createBasicElementWithText(kmlDoc, \"name\", entity.name)\n );\n overlay.appendChild(\n createBasicElementWithText(kmlDoc, \"visibility\", entity.show)\n );\n overlay.appendChild(\n createBasicElementWithText(kmlDoc, \"description\", entity.description)\n );\n\n if (defined(timeSpan)) {\n overlay.appendChild(timeSpan);\n }\n\n parentNode.appendChild(overlay);\n }\n\n var geometryCount = geometries.length;\n if (geometryCount > 0) {\n var placemark = kmlDoc.createElement(\"Placemark\");\n placemark.setAttribute(\"id\", idManager.get(entity.id));\n\n var name = entity.name;\n var labelGraphics = entity.label;\n if (defined(labelGraphics)) {\n var labelStyle = kmlDoc.createElement(\"LabelStyle\");\n\n // KML only shows the name as a label, so just change the name if we need to show a label\n var text = valueGetter.get(labelGraphics.text);\n name = defined(text) && text.length > 0 ? text : name;\n\n var color = valueGetter.getColor(labelGraphics.fillColor);\n if (defined(color)) {\n labelStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"color\", color)\n );\n labelStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\")\n );\n }\n\n var scale = valueGetter.get(labelGraphics.scale);\n if (defined(scale)) {\n labelStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"scale\", scale)\n );\n }\n\n styles.push(labelStyle);\n }\n\n placemark.appendChild(createBasicElementWithText(kmlDoc, \"name\", name));\n placemark.appendChild(\n createBasicElementWithText(kmlDoc, \"visibility\", entity.show)\n );\n placemark.appendChild(\n createBasicElementWithText(kmlDoc, \"description\", entity.description)\n );\n\n if (defined(timeSpan)) {\n placemark.appendChild(timeSpan);\n }\n\n parentNode.appendChild(placemark);\n\n var styleCount = styles.length;\n if (styleCount > 0) {\n var style = kmlDoc.createElement(\"Style\");\n for (var styleIndex = 0; styleIndex < styleCount; ++styleIndex) {\n style.appendChild(styles[styleIndex]);\n }\n\n placemark.appendChild(\n createBasicElementWithText(kmlDoc, \"styleUrl\", styleCache.get(style))\n );\n }\n\n if (geometries.length === 1) {\n placemark.appendChild(geometries[0]);\n } else if (geometries.length > 1) {\n var multigeometry = kmlDoc.createElement(\"MultiGeometry\");\n for (\n var geometryIndex = 0;\n geometryIndex < geometryCount;\n ++geometryIndex\n ) {\n multigeometry.appendChild(geometries[geometryIndex]);\n }\n placemark.appendChild(multigeometry);\n }\n }\n\n var children = entity._children;\n if (children.length > 0) {\n var folderNode = kmlDoc.createElement(\"Folder\");\n folderNode.setAttribute(\"id\", idManager.get(entity.id));\n folderNode.appendChild(\n createBasicElementWithText(kmlDoc, \"name\", entity.name)\n );\n folderNode.appendChild(\n createBasicElementWithText(kmlDoc, \"visibility\", entity.show)\n );\n folderNode.appendChild(\n createBasicElementWithText(kmlDoc, \"description\", entity.description)\n );\n\n parentNode.appendChild(folderNode);\n\n recurseEntities(state, folderNode, children);\n }\n }\n}\n\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartographic = new Cartographic();\nvar scratchJulianDate = new JulianDate();\n\nfunction createPoint(state, entity, geometries, styles) {\n var kmlDoc = state.kmlDoc;\n var ellipsoid = state.ellipsoid;\n var valueGetter = state.valueGetter;\n\n var pointGraphics = defaultValue(entity.billboard, entity.point);\n if (!defined(pointGraphics) && !defined(entity.path)) {\n return;\n }\n\n // If the point isn't constant then create gx:Track or gx:MultiTrack\n var entityPositionProperty = entity.position;\n if (!entityPositionProperty.isConstant) {\n createTracks(state, entity, pointGraphics, geometries, styles);\n return;\n }\n\n valueGetter.get(entityPositionProperty, undefined, scratchCartesian3);\n var coordinates = createBasicElementWithText(\n kmlDoc,\n \"coordinates\",\n getCoordinates(scratchCartesian3, ellipsoid)\n );\n\n var pointGeometry = kmlDoc.createElement(\"Point\");\n\n // Set altitude mode\n var altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n altitudeMode.appendChild(\n getAltitudeMode(state, pointGraphics.heightReference)\n );\n pointGeometry.appendChild(altitudeMode);\n\n pointGeometry.appendChild(coordinates);\n geometries.push(pointGeometry);\n\n // Create style\n var iconStyle =\n pointGraphics instanceof BillboardGraphics\n ? createIconStyleFromBillboard(state, pointGraphics)\n : createIconStyleFromPoint(state, pointGraphics);\n styles.push(iconStyle);\n}\n\nfunction createTracks(state, entity, pointGraphics, geometries, styles) {\n var kmlDoc = state.kmlDoc;\n var ellipsoid = state.ellipsoid;\n var valueGetter = state.valueGetter;\n\n var intervals;\n var entityPositionProperty = entity.position;\n var useEntityPositionProperty = true;\n if (entityPositionProperty instanceof CompositePositionProperty) {\n intervals = entityPositionProperty.intervals;\n useEntityPositionProperty = false;\n } else {\n intervals = defaultValue(entity.availability, state.defaultAvailability);\n }\n\n var isModel = pointGraphics instanceof ModelGraphics;\n\n var i, j, times;\n var tracks = [];\n for (i = 0; i < intervals.length; ++i) {\n var interval = intervals.get(i);\n var positionProperty = useEntityPositionProperty\n ? entityPositionProperty\n : interval.data;\n\n var trackAltitudeMode = kmlDoc.createElement(\"altitudeMode\");\n // This is something that KML importing uses to handle clampToGround,\n // so just extract the internal property and set the altitudeMode.\n if (positionProperty instanceof ScaledPositionProperty) {\n positionProperty = positionProperty._value;\n trackAltitudeMode.appendChild(\n getAltitudeMode(state, HeightReference.CLAMP_TO_GROUND)\n );\n } else if (defined(pointGraphics)) {\n trackAltitudeMode.appendChild(\n getAltitudeMode(state, pointGraphics.heightReference)\n );\n } else {\n // Path graphics only, which has no height reference\n trackAltitudeMode.appendChild(\n getAltitudeMode(state, HeightReference.NONE)\n );\n }\n\n var positionTimes = [];\n var positionValues = [];\n\n if (positionProperty.isConstant) {\n valueGetter.get(positionProperty, undefined, scratchCartesian3);\n var constCoordinates = createBasicElementWithText(\n kmlDoc,\n \"coordinates\",\n getCoordinates(scratchCartesian3, ellipsoid)\n );\n\n // This interval is constant so add a track with the same position\n positionTimes.push(JulianDate.toIso8601(interval.start));\n positionValues.push(constCoordinates);\n positionTimes.push(JulianDate.toIso8601(interval.stop));\n positionValues.push(constCoordinates);\n } else if (positionProperty instanceof SampledPositionProperty) {\n times = positionProperty._property._times;\n\n for (j = 0; j < times.length; ++j) {\n positionTimes.push(JulianDate.toIso8601(times[j]));\n positionProperty.getValueInReferenceFrame(\n times[j],\n ReferenceFrame.FIXED,\n scratchCartesian3\n );\n positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n }\n } else if (positionProperty instanceof SampledProperty) {\n times = positionProperty._times;\n var values = positionProperty._values;\n\n for (j = 0; j < times.length; ++j) {\n positionTimes.push(JulianDate.toIso8601(times[j]));\n Cartesian3.fromArray(values, j * 3, scratchCartesian3);\n positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n }\n } else {\n var duration = state.sampleDuration;\n interval.start.clone(scratchJulianDate);\n if (!interval.isStartIncluded) {\n JulianDate.addSeconds(scratchJulianDate, duration, scratchJulianDate);\n }\n\n var stopDate = interval.stop;\n while (JulianDate.lessThan(scratchJulianDate, stopDate)) {\n positionProperty.getValue(scratchJulianDate, scratchCartesian3);\n\n positionTimes.push(JulianDate.toIso8601(scratchJulianDate));\n positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n\n JulianDate.addSeconds(scratchJulianDate, duration, scratchJulianDate);\n }\n\n if (\n interval.isStopIncluded &&\n JulianDate.equals(scratchJulianDate, stopDate)\n ) {\n positionProperty.getValue(scratchJulianDate, scratchCartesian3);\n\n positionTimes.push(JulianDate.toIso8601(scratchJulianDate));\n positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n }\n }\n\n var trackGeometry = kmlDoc.createElementNS(gxNamespace, \"Track\");\n trackGeometry.appendChild(trackAltitudeMode);\n\n for (var k = 0; k < positionTimes.length; ++k) {\n var when = createBasicElementWithText(kmlDoc, \"when\", positionTimes[k]);\n var coord = createBasicElementWithText(\n kmlDoc,\n \"coord\",\n positionValues[k],\n gxNamespace\n );\n\n trackGeometry.appendChild(when);\n trackGeometry.appendChild(coord);\n }\n\n if (isModel) {\n trackGeometry.appendChild(createModelGeometry(state, pointGraphics));\n }\n\n tracks.push(trackGeometry);\n }\n\n // If one track, then use it otherwise combine into a multitrack\n if (tracks.length === 1) {\n geometries.push(tracks[0]);\n } else if (tracks.length > 1) {\n var multiTrackGeometry = kmlDoc.createElementNS(gxNamespace, \"MultiTrack\");\n\n for (i = 0; i < tracks.length; ++i) {\n multiTrackGeometry.appendChild(tracks[i]);\n }\n\n geometries.push(multiTrackGeometry);\n }\n\n // Create style\n if (defined(pointGraphics) && !isModel) {\n var iconStyle =\n pointGraphics instanceof BillboardGraphics\n ? createIconStyleFromBillboard(state, pointGraphics)\n : createIconStyleFromPoint(state, pointGraphics);\n styles.push(iconStyle);\n }\n\n // See if we have a line that needs to be drawn\n var path = entity.path;\n if (defined(path)) {\n var width = valueGetter.get(path.width);\n var material = path.material;\n if (defined(material) || defined(width)) {\n var lineStyle = kmlDoc.createElement(\"LineStyle\");\n if (defined(width)) {\n lineStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"width\", width)\n );\n }\n\n processMaterial(state, material, lineStyle);\n styles.push(lineStyle);\n }\n }\n}\n\nfunction createIconStyleFromPoint(state, pointGraphics) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n var iconStyle = kmlDoc.createElement(\"IconStyle\");\n\n var color = valueGetter.getColor(pointGraphics.color);\n if (defined(color)) {\n iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n iconStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\")\n );\n }\n\n var pixelSize = valueGetter.get(pointGraphics.pixelSize);\n if (defined(pixelSize)) {\n iconStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"scale\", pixelSize / BILLBOARD_SIZE)\n );\n }\n\n return iconStyle;\n}\n\nfunction createIconStyleFromBillboard(state, billboardGraphics) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n var externalFileHandler = state.externalFileHandler;\n\n var iconStyle = kmlDoc.createElement(\"IconStyle\");\n\n var image = valueGetter.get(billboardGraphics.image);\n if (defined(image)) {\n image = externalFileHandler.texture(image);\n\n var icon = kmlDoc.createElement(\"Icon\");\n icon.appendChild(createBasicElementWithText(kmlDoc, \"href\", image));\n\n var imageSubRegion = valueGetter.get(billboardGraphics.imageSubRegion);\n if (defined(imageSubRegion)) {\n icon.appendChild(\n createBasicElementWithText(kmlDoc, \"x\", imageSubRegion.x, gxNamespace)\n );\n icon.appendChild(\n createBasicElementWithText(kmlDoc, \"y\", imageSubRegion.y, gxNamespace)\n );\n icon.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"w\",\n imageSubRegion.width,\n gxNamespace\n )\n );\n icon.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"h\",\n imageSubRegion.height,\n gxNamespace\n )\n );\n }\n\n iconStyle.appendChild(icon);\n }\n\n var color = valueGetter.getColor(billboardGraphics.color);\n if (defined(color)) {\n iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n iconStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\")\n );\n }\n\n var scale = valueGetter.get(billboardGraphics.scale);\n if (defined(scale)) {\n iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"scale\", scale));\n }\n\n var pixelOffset = valueGetter.get(billboardGraphics.pixelOffset);\n if (defined(pixelOffset)) {\n scale = defaultValue(scale, 1.0);\n\n Cartesian2.divideByScalar(pixelOffset, scale, pixelOffset);\n\n var width = valueGetter.get(billboardGraphics.width, BILLBOARD_SIZE);\n var height = valueGetter.get(billboardGraphics.height, BILLBOARD_SIZE);\n\n // KML Hotspots are from the bottom left, but we work from the top left\n\n // Move to left\n var horizontalOrigin = valueGetter.get(\n billboardGraphics.horizontalOrigin,\n HorizontalOrigin.CENTER\n );\n if (horizontalOrigin === HorizontalOrigin.CENTER) {\n pixelOffset.x -= width * 0.5;\n } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n pixelOffset.x -= width;\n }\n\n // Move to bottom\n var verticalOrigin = valueGetter.get(\n billboardGraphics.verticalOrigin,\n VerticalOrigin.CENTER\n );\n if (verticalOrigin === VerticalOrigin.TOP) {\n pixelOffset.y += height;\n } else if (verticalOrigin === VerticalOrigin.CENTER) {\n pixelOffset.y += height * 0.5;\n }\n\n var hotSpot = kmlDoc.createElement(\"hotSpot\");\n hotSpot.setAttribute(\"x\", -pixelOffset.x);\n hotSpot.setAttribute(\"y\", pixelOffset.y);\n hotSpot.setAttribute(\"xunits\", \"pixels\");\n hotSpot.setAttribute(\"yunits\", \"pixels\");\n\n iconStyle.appendChild(hotSpot);\n }\n\n // We can only specify heading so if axis isn't Z, then we skip the rotation\n // GE treats a heading of zero as no heading but can still point north using a 360 degree angle\n var rotation = valueGetter.get(billboardGraphics.rotation);\n var alignedAxis = valueGetter.get(billboardGraphics.alignedAxis);\n if (defined(rotation) && Cartesian3.equals(Cartesian3.UNIT_Z, alignedAxis)) {\n rotation = CesiumMath.toDegrees(-rotation);\n if (rotation === 0) {\n rotation = 360;\n }\n\n iconStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"heading\", rotation)\n );\n }\n\n return iconStyle;\n}\n\nfunction createLineString(state, polylineGraphics, geometries, styles) {\n var kmlDoc = state.kmlDoc;\n var ellipsoid = state.ellipsoid;\n var valueGetter = state.valueGetter;\n\n if (!defined(polylineGraphics)) {\n return;\n }\n\n var lineStringGeometry = kmlDoc.createElement(\"LineString\");\n\n // Set altitude mode\n var altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n var clampToGround = valueGetter.get(polylineGraphics.clampToGround, false);\n var altitudeModeText;\n if (clampToGround) {\n lineStringGeometry.appendChild(\n createBasicElementWithText(kmlDoc, \"tessellate\", true)\n );\n altitudeModeText = kmlDoc.createTextNode(\"clampToGround\");\n } else {\n altitudeModeText = kmlDoc.createTextNode(\"absolute\");\n }\n altitudeMode.appendChild(altitudeModeText);\n lineStringGeometry.appendChild(altitudeMode);\n\n // Set coordinates\n var positionsProperty = polylineGraphics.positions;\n var cartesians = valueGetter.get(positionsProperty);\n var coordinates = createBasicElementWithText(\n kmlDoc,\n \"coordinates\",\n getCoordinates(cartesians, ellipsoid)\n );\n lineStringGeometry.appendChild(coordinates);\n\n // Set draw order\n var zIndex = valueGetter.get(polylineGraphics.zIndex);\n if (clampToGround && defined(zIndex)) {\n lineStringGeometry.appendChild(\n createBasicElementWithText(kmlDoc, \"drawOrder\", zIndex, gxNamespace)\n );\n }\n\n geometries.push(lineStringGeometry);\n\n // Create style\n var lineStyle = kmlDoc.createElement(\"LineStyle\");\n\n var width = valueGetter.get(polylineGraphics.width);\n if (defined(width)) {\n lineStyle.appendChild(createBasicElementWithText(kmlDoc, \"width\", width));\n }\n\n processMaterial(state, polylineGraphics.material, lineStyle);\n\n styles.push(lineStyle);\n}\n\nfunction getRectangleBoundaries(state, rectangleGraphics, extrudedHeight) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n var coordinates;\n var height = valueGetter.get(rectangleGraphics.height, 0.0);\n\n if (extrudedHeight > 0) {\n // We extrude up and KML extrudes down, so if we extrude, set the polygon height to\n // the extruded height so KML will look similar to Cesium\n height = extrudedHeight;\n }\n\n var coordinatesProperty = rectangleGraphics.coordinates;\n var rectangle = valueGetter.get(coordinatesProperty);\n\n var coordinateStrings = [];\n var cornerFunction = [\n Rectangle.northeast,\n Rectangle.southeast,\n Rectangle.southwest,\n Rectangle.northwest,\n ];\n\n for (var i = 0; i < 4; ++i) {\n cornerFunction[i](rectangle, scratchCartographic);\n coordinateStrings.push(\n CesiumMath.toDegrees(scratchCartographic.longitude) +\n \",\" +\n CesiumMath.toDegrees(scratchCartographic.latitude) +\n \",\" +\n height\n );\n }\n\n coordinates = createBasicElementWithText(\n kmlDoc,\n \"coordinates\",\n coordinateStrings.join(\" \")\n );\n\n var outerBoundaryIs = kmlDoc.createElement(\"outerBoundaryIs\");\n var linearRing = kmlDoc.createElement(\"LinearRing\");\n linearRing.appendChild(coordinates);\n outerBoundaryIs.appendChild(linearRing);\n\n return [outerBoundaryIs];\n}\n\nfunction getLinearRing(state, positions, height, perPositionHeight) {\n var kmlDoc = state.kmlDoc;\n var ellipsoid = state.ellipsoid;\n\n var coordinateStrings = [];\n var positionCount = positions.length;\n for (var i = 0; i < positionCount; ++i) {\n Cartographic.fromCartesian(positions[i], ellipsoid, scratchCartographic);\n coordinateStrings.push(\n CesiumMath.toDegrees(scratchCartographic.longitude) +\n \",\" +\n CesiumMath.toDegrees(scratchCartographic.latitude) +\n \",\" +\n (perPositionHeight ? scratchCartographic.height : height)\n );\n }\n\n var coordinates = createBasicElementWithText(\n kmlDoc,\n \"coordinates\",\n coordinateStrings.join(\" \")\n );\n var linearRing = kmlDoc.createElement(\"LinearRing\");\n linearRing.appendChild(coordinates);\n\n return linearRing;\n}\n\nfunction getPolygonBoundaries(state, polygonGraphics, extrudedHeight) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n var height = valueGetter.get(polygonGraphics.height, 0.0);\n var perPositionHeight = valueGetter.get(\n polygonGraphics.perPositionHeight,\n false\n );\n\n if (!perPositionHeight && extrudedHeight > 0) {\n // We extrude up and KML extrudes down, so if we extrude, set the polygon height to\n // the extruded height so KML will look similar to Cesium\n height = extrudedHeight;\n }\n\n var boundaries = [];\n var hierarchyProperty = polygonGraphics.hierarchy;\n var hierarchy = valueGetter.get(hierarchyProperty);\n\n // Polygon hierarchy can sometimes just be an array of positions\n var positions = Array.isArray(hierarchy) ? hierarchy : hierarchy.positions;\n\n // Polygon boundaries\n var outerBoundaryIs = kmlDoc.createElement(\"outerBoundaryIs\");\n outerBoundaryIs.appendChild(\n getLinearRing(state, positions, height, perPositionHeight)\n );\n boundaries.push(outerBoundaryIs);\n\n // Hole boundaries\n var holes = hierarchy.holes;\n if (defined(holes)) {\n var holeCount = holes.length;\n for (var i = 0; i < holeCount; ++i) {\n var innerBoundaryIs = kmlDoc.createElement(\"innerBoundaryIs\");\n innerBoundaryIs.appendChild(\n getLinearRing(state, holes[i].positions, height, perPositionHeight)\n );\n boundaries.push(innerBoundaryIs);\n }\n }\n\n return boundaries;\n}\n\nfunction createPolygon(state, geometry, geometries, styles, overlays) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n if (!defined(geometry)) {\n return;\n }\n\n // Detect textured quads and use ground overlays instead\n var isRectangle = geometry instanceof RectangleGraphics;\n if (\n isRectangle &&\n valueGetter.getMaterialType(geometry.material) === \"Image\"\n ) {\n createGroundOverlay(state, geometry, overlays);\n return;\n }\n\n var polygonGeometry = kmlDoc.createElement(\"Polygon\");\n\n var extrudedHeight = valueGetter.get(geometry.extrudedHeight, 0.0);\n if (extrudedHeight > 0) {\n polygonGeometry.appendChild(\n createBasicElementWithText(kmlDoc, \"extrude\", true)\n );\n }\n\n // Set boundaries\n var boundaries = isRectangle\n ? getRectangleBoundaries(state, geometry, extrudedHeight)\n : getPolygonBoundaries(state, geometry, extrudedHeight);\n\n var boundaryCount = boundaries.length;\n for (var i = 0; i < boundaryCount; ++i) {\n polygonGeometry.appendChild(boundaries[i]);\n }\n\n // Set altitude mode\n var altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n altitudeMode.appendChild(getAltitudeMode(state, geometry.heightReference));\n polygonGeometry.appendChild(altitudeMode);\n\n geometries.push(polygonGeometry);\n\n // Create style\n var polyStyle = kmlDoc.createElement(\"PolyStyle\");\n\n var fill = valueGetter.get(geometry.fill, false);\n if (fill) {\n polyStyle.appendChild(createBasicElementWithText(kmlDoc, \"fill\", fill));\n }\n\n processMaterial(state, geometry.material, polyStyle);\n\n var outline = valueGetter.get(geometry.outline, false);\n if (outline) {\n polyStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"outline\", outline)\n );\n\n // Outline uses LineStyle\n var lineStyle = kmlDoc.createElement(\"LineStyle\");\n\n var outlineWidth = valueGetter.get(geometry.outlineWidth, 1.0);\n lineStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"width\", outlineWidth)\n );\n\n var outlineColor = valueGetter.getColor(geometry.outlineColor, Color.BLACK);\n lineStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"color\", outlineColor)\n );\n lineStyle.appendChild(\n createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\")\n );\n\n styles.push(lineStyle);\n }\n\n styles.push(polyStyle);\n}\n\nfunction createGroundOverlay(state, rectangleGraphics, overlays) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n var externalFileHandler = state.externalFileHandler;\n\n var groundOverlay = kmlDoc.createElement(\"GroundOverlay\");\n\n // Set altitude mode\n var altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n altitudeMode.appendChild(\n getAltitudeMode(state, rectangleGraphics.heightReference)\n );\n groundOverlay.appendChild(altitudeMode);\n\n var height = valueGetter.get(rectangleGraphics.height);\n if (defined(height)) {\n groundOverlay.appendChild(\n createBasicElementWithText(kmlDoc, \"altitude\", height)\n );\n }\n\n var rectangle = valueGetter.get(rectangleGraphics.coordinates);\n var latLonBox = kmlDoc.createElement(\"LatLonBox\");\n latLonBox.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"north\",\n CesiumMath.toDegrees(rectangle.north)\n )\n );\n latLonBox.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"south\",\n CesiumMath.toDegrees(rectangle.south)\n )\n );\n latLonBox.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"east\",\n CesiumMath.toDegrees(rectangle.east)\n )\n );\n latLonBox.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"west\",\n CesiumMath.toDegrees(rectangle.west)\n )\n );\n groundOverlay.appendChild(latLonBox);\n\n // We should only end up here if we have an ImageMaterialProperty\n var material = valueGetter.get(rectangleGraphics.material);\n var href = externalFileHandler.texture(material.image);\n var icon = kmlDoc.createElement(\"Icon\");\n icon.appendChild(createBasicElementWithText(kmlDoc, \"href\", href));\n groundOverlay.appendChild(icon);\n\n var color = material.color;\n if (defined(color)) {\n groundOverlay.appendChild(\n createBasicElementWithText(kmlDoc, \"color\", colorToString(material.color))\n );\n }\n\n overlays.push(groundOverlay);\n}\n\nfunction createModelGeometry(state, modelGraphics) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n var externalFileHandler = state.externalFileHandler;\n\n var modelGeometry = kmlDoc.createElement(\"Model\");\n\n var scale = valueGetter.get(modelGraphics.scale);\n if (defined(scale)) {\n var scaleElement = kmlDoc.createElement(\"scale\");\n scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"x\", scale));\n scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"y\", scale));\n scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"z\", scale));\n modelGeometry.appendChild(scaleElement);\n }\n\n var link = kmlDoc.createElement(\"Link\");\n var uri = externalFileHandler.model(modelGraphics, state.time);\n\n link.appendChild(createBasicElementWithText(kmlDoc, \"href\", uri));\n modelGeometry.appendChild(link);\n\n return modelGeometry;\n}\n\nfunction createModel(state, entity, modelGraphics, geometries, styles) {\n var kmlDoc = state.kmlDoc;\n var ellipsoid = state.ellipsoid;\n var valueGetter = state.valueGetter;\n\n if (!defined(modelGraphics)) {\n return;\n }\n\n // If the point isn't constant then create gx:Track or gx:MultiTrack\n var entityPositionProperty = entity.position;\n if (!entityPositionProperty.isConstant) {\n createTracks(state, entity, modelGraphics, geometries, styles);\n return;\n }\n\n var modelGeometry = createModelGeometry(state, modelGraphics);\n\n // Set altitude mode\n var altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n altitudeMode.appendChild(\n getAltitudeMode(state, modelGraphics.heightReference)\n );\n modelGeometry.appendChild(altitudeMode);\n\n valueGetter.get(entityPositionProperty, undefined, scratchCartesian3);\n Cartographic.fromCartesian(scratchCartesian3, ellipsoid, scratchCartographic);\n var location = kmlDoc.createElement(\"Location\");\n location.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"longitude\",\n CesiumMath.toDegrees(scratchCartographic.longitude)\n )\n );\n location.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"latitude\",\n CesiumMath.toDegrees(scratchCartographic.latitude)\n )\n );\n location.appendChild(\n createBasicElementWithText(kmlDoc, \"altitude\", scratchCartographic.height)\n );\n modelGeometry.appendChild(location);\n\n geometries.push(modelGeometry);\n}\n\nfunction processMaterial(state, materialProperty, style) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n if (!defined(materialProperty)) {\n return;\n }\n\n var material = valueGetter.get(materialProperty);\n if (!defined(material)) {\n return;\n }\n\n var color;\n var type = valueGetter.getMaterialType(materialProperty);\n switch (type) {\n case \"Image\":\n // Image materials are only able to be represented on rectangles, so if we make it\n // here we can't texture a generic polygon or polyline in KML, so just use white.\n color = colorToString(Color.WHITE);\n break;\n case \"Color\":\n case \"Grid\":\n case \"PolylineGlow\":\n case \"PolylineArrow\":\n case \"PolylineDash\":\n color = colorToString(material.color);\n break;\n case \"PolylineOutline\":\n color = colorToString(material.color);\n\n var outlineColor = colorToString(material.outlineColor);\n var outlineWidth = material.outlineWidth;\n style.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"outerColor\",\n outlineColor,\n gxNamespace\n )\n );\n style.appendChild(\n createBasicElementWithText(\n kmlDoc,\n \"outerWidth\",\n outlineWidth,\n gxNamespace\n )\n );\n break;\n case \"Stripe\":\n color = colorToString(material.oddColor);\n break;\n }\n\n if (defined(color)) {\n style.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n style.appendChild(\n createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\")\n );\n }\n}\n\nfunction getAltitudeMode(state, heightReferenceProperty) {\n var kmlDoc = state.kmlDoc;\n var valueGetter = state.valueGetter;\n\n var heightReference = valueGetter.get(\n heightReferenceProperty,\n HeightReference.NONE\n );\n var altitudeModeText;\n switch (heightReference) {\n case HeightReference.NONE:\n altitudeModeText = kmlDoc.createTextNode(\"absolute\");\n break;\n case HeightReference.CLAMP_TO_GROUND:\n altitudeModeText = kmlDoc.createTextNode(\"clampToGround\");\n break;\n case HeightReference.RELATIVE_TO_GROUND:\n altitudeModeText = kmlDoc.createTextNode(\"relativeToGround\");\n break;\n }\n\n return altitudeModeText;\n}\n\nfunction getCoordinates(coordinates, ellipsoid) {\n if (!Array.isArray(coordinates)) {\n coordinates = [coordinates];\n }\n\n var count = coordinates.length;\n var coordinateStrings = [];\n for (var i = 0; i < count; ++i) {\n Cartographic.fromCartesian(coordinates[i], ellipsoid, scratchCartographic);\n coordinateStrings.push(\n CesiumMath.toDegrees(scratchCartographic.longitude) +\n \",\" +\n CesiumMath.toDegrees(scratchCartographic.latitude) +\n \",\" +\n scratchCartographic.height\n );\n }\n\n return coordinateStrings.join(\" \");\n}\n\nfunction createBasicElementWithText(\n kmlDoc,\n elementName,\n elementValue,\n namespace\n) {\n elementValue = defaultValue(elementValue, \"\");\n\n if (typeof elementValue === \"boolean\") {\n elementValue = elementValue ? \"1\" : \"0\";\n }\n\n // Create element with optional namespace\n var element = defined(namespace)\n ? kmlDoc.createElementNS(namespace, elementName)\n : kmlDoc.createElement(elementName);\n\n // Wrap value in CDATA section if it contains HTML\n var text =\n elementValue === \"string\" && elementValue.indexOf(\"<\") !== -1\n ? kmlDoc.createCDATASection(elementValue)\n : kmlDoc.createTextNode(elementValue);\n\n element.appendChild(text);\n\n return element;\n}\n\nfunction colorToString(color) {\n var result = \"\";\n var bytes = color.toBytes();\n for (var i = 3; i >= 0; --i) {\n result +=\n bytes[i] < 16 ? \"0\" + bytes[i].toString(16) : bytes[i].toString(16);\n }\n\n return result;\n}\n\n/**\n * Since KML does not support glTF models, this callback is required to specify what URL to use for the model in the KML document.\n * It can also be used to add additional files to the <code>externalFiles</code> object, which is the list of files embedded in the exported KMZ,\n * or otherwise returned with the KML string when exporting.\n *\n * @callback exportKmlModelCallback\n *\n * @param {ModelGraphics} model The ModelGraphics instance for an Entity.\n * @param {JulianDate} time The time that any properties should use to get the value.\n * @param {Object} externalFiles An object that maps a filename to a Blob or a Promise that resolves to a Blob.\n * @returns {String} The URL to use for the href in the KML document.\n */\nexport default exportKml;\n","/**\n@license\ntopojson - https://github.com/topojson/topojson\n\nCopyright (c) 2012-2016, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n**/\n\nvar tmp = {};\n\n// https://github.com/topojson/topojson Version 3.0.2. Copyright 2017 Mike Bostock.\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\t(factory((global.topojson = global.topojson || {})));\n}(tmp, (function (exports) { 'use strict';\n\nvar identity = function(x) {\n return x;\n};\n\nvar transform = function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n};\n\nvar bbox = function(topology) {\n var t = transform(topology.transform), key,\n x0 = Infinity, y0 = x0, x1 = -x0, y1 = -x0;\n\n function bboxPoint(p) {\n p = t(p);\n if (p[0] < x0) x0 = p[0];\n if (p[0] > x1) x1 = p[0];\n if (p[1] < y0) y0 = p[1];\n if (p[1] > y1) y1 = p[1];\n }\n\n function bboxGeometry(o) {\n switch (o.type) {\n case \"GeometryCollection\": o.geometries.forEach(bboxGeometry); break;\n case \"Point\": bboxPoint(o.coordinates); break;\n case \"MultiPoint\": o.coordinates.forEach(bboxPoint); break;\n }\n }\n\n topology.arcs.forEach(function(arc) {\n var i = -1, n = arc.length, p;\n while (++i < n) {\n p = t(arc[i], i);\n if (p[0] < x0) x0 = p[0];\n if (p[0] > x1) x1 = p[0];\n if (p[1] < y0) y0 = p[1];\n if (p[1] > y1) y1 = p[1];\n }\n });\n\n for (key in topology.objects) {\n bboxGeometry(topology.objects[key]);\n }\n\n return [x0, y0, x1, y1];\n};\n\nvar reverse = function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n};\n\nvar feature = function(topology, o) {\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature$1(topology, o); })}\n : feature$1(topology, o);\n};\n\nfunction feature$1(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nfunction object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n\nvar stitch = function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n};\n\nvar mesh = function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n};\n\nfunction meshArcs(topology, object$$1, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object$$1, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object$$1, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object$$1);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n\nfunction planarRingArea(ring) {\n var i = -1, n = ring.length, a, b = ring[n - 1], area = 0;\n while (++i < n) a = b, b = ring[i], area += a[0] * b[1] - a[1] * b[0];\n return Math.abs(area); // Note: doubled area!\n}\n\nvar merge = function(topology) {\n return object(topology, mergeArcs.apply(this, arguments));\n};\n\nfunction mergeArcs(topology, objects) {\n var polygonsByArc = {},\n polygons = [],\n groups = [];\n\n objects.forEach(geometry);\n\n function geometry(o) {\n switch (o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"Polygon\": extract(o.arcs); break;\n case \"MultiPolygon\": o.arcs.forEach(extract); break;\n }\n }\n\n function extract(polygon) {\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n (polygonsByArc[arc = arc < 0 ? ~arc : arc] || (polygonsByArc[arc] = [])).push(polygon);\n });\n });\n polygons.push(polygon);\n }\n\n function area(ring) {\n return planarRingArea(object(topology, {type: \"Polygon\", arcs: [ring]}).coordinates[0]);\n }\n\n polygons.forEach(function(polygon) {\n if (!polygon._) {\n var group = [],\n neighbors = [polygon];\n polygon._ = 1;\n groups.push(group);\n while (polygon = neighbors.pop()) {\n group.push(polygon);\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n polygonsByArc[arc < 0 ? ~arc : arc].forEach(function(polygon) {\n if (!polygon._) {\n polygon._ = 1;\n neighbors.push(polygon);\n }\n });\n });\n });\n }\n }\n });\n\n polygons.forEach(function(polygon) {\n delete polygon._;\n });\n\n return {\n type: \"MultiPolygon\",\n arcs: groups.map(function(polygons) {\n var arcs = [], n;\n\n // Extract the exterior (unique) arcs.\n polygons.forEach(function(polygon) {\n polygon.forEach(function(ring) {\n ring.forEach(function(arc) {\n if (polygonsByArc[arc < 0 ? ~arc : arc].length < 2) {\n arcs.push(arc);\n }\n });\n });\n });\n\n // Stitch the arcs into one or more rings.\n arcs = stitch(topology, arcs);\n\n // If more than one ring is returned,\n // at most one of these rings can be the exterior;\n // choose the one with the greatest absolute area.\n if ((n = arcs.length) > 1) {\n for (var i = 1, k = area(arcs[0]), ki, t; i < n; ++i) {\n if ((ki = area(arcs[i])) > k) {\n t = arcs[0], arcs[0] = arcs[i], arcs[i] = t, k = ki;\n }\n }\n }\n\n return arcs;\n })\n };\n}\n\nvar bisect = function(a, x) {\n var lo = 0, hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (a[mid] < x) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\nvar neighbors = function(objects) {\n var indexesByArc = {}, // arc index -> array of object indexes\n neighbors = objects.map(function() { return []; });\n\n function line(arcs, i) {\n arcs.forEach(function(a) {\n if (a < 0) a = ~a;\n var o = indexesByArc[a];\n if (o) o.push(i);\n else indexesByArc[a] = [i];\n });\n }\n\n function polygon(arcs, i) {\n arcs.forEach(function(arc) { line(arc, i); });\n }\n\n function geometry(o, i) {\n if (o.type === \"GeometryCollection\") o.geometries.forEach(function(o) { geometry(o, i); });\n else if (o.type in geometryType) geometryType[o.type](o.arcs, i);\n }\n\n var geometryType = {\n LineString: line,\n MultiLineString: polygon,\n Polygon: polygon,\n MultiPolygon: function(arcs, i) { arcs.forEach(function(arc) { polygon(arc, i); }); }\n };\n\n objects.forEach(geometry);\n\n for (var i in indexesByArc) {\n for (var indexes = indexesByArc[i], m = indexes.length, j = 0; j < m; ++j) {\n for (var k = j + 1; k < m; ++k) {\n var ij = indexes[j], ik = indexes[k], n;\n if ((n = neighbors[ij])[i = bisect(n, ik)] !== ik) n.splice(i, 0, ik);\n if ((n = neighbors[ik])[i = bisect(n, ij)] !== ij) n.splice(i, 0, ij);\n }\n }\n }\n\n return neighbors;\n};\n\nvar untransform = function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2,\n n = input.length,\n output = new Array(n),\n x1 = Math.round((input[0] - dx) / kx),\n y1 = Math.round((input[1] - dy) / ky);\n output[0] = x1 - x0, x0 = x1;\n output[1] = y1 - y0, y0 = y1;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n};\n\nvar quantize = function(topology, transform) {\n if (topology.transform) throw new Error(\"already quantized\");\n\n if (!transform || !transform.scale) {\n if (!((n = Math.floor(transform)) >= 2)) throw new Error(\"n must be \\u22652\");\n box = topology.bbox || bbox(topology);\n var x0 = box[0], y0 = box[1], x1 = box[2], y1 = box[3], n;\n transform = {scale: [x1 - x0 ? (x1 - x0) / (n - 1) : 1, y1 - y0 ? (y1 - y0) / (n - 1) : 1], translate: [x0, y0]};\n } else {\n box = topology.bbox;\n }\n\n var t = untransform(transform), box, key, inputs = topology.objects, outputs = {};\n\n function quantizePoint(point) {\n return t(point);\n }\n\n function quantizeGeometry(input) {\n var output;\n switch (input.type) {\n case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(quantizeGeometry)}; break;\n case \"Point\": output = {type: \"Point\", coordinates: quantizePoint(input.coordinates)}; break;\n case \"MultiPoint\": output = {type: \"MultiPoint\", coordinates: input.coordinates.map(quantizePoint)}; break;\n default: return input;\n }\n if (input.id != null) output.id = input.id;\n if (input.bbox != null) output.bbox = input.bbox;\n if (input.properties != null) output.properties = input.properties;\n return output;\n }\n\n function quantizeArc(input) {\n var i = 0, j = 1, n = input.length, p, output = new Array(n); // pessimistic\n output[0] = t(input[0], 0);\n while (++i < n) if ((p = t(input[i], i))[0] || p[1]) output[j++] = p; // non-coincident points\n if (j === 1) output[j++] = [0, 0]; // an arc must have at least two points\n output.length = j;\n return output;\n }\n\n for (key in inputs) outputs[key] = quantizeGeometry(inputs[key]);\n\n return {\n type: \"Topology\",\n bbox: box,\n transform: transform,\n objects: outputs,\n arcs: topology.arcs.map(quantizeArc)\n };\n};\n\n// Computes the bounding box of the specified hash of GeoJSON objects.\nvar bounds = function(objects) {\n var x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n function boundGeometry(geometry) {\n if (geometry != null && boundGeometryType.hasOwnProperty(geometry.type)) boundGeometryType[geometry.type](geometry);\n }\n\n var boundGeometryType = {\n GeometryCollection: function(o) { o.geometries.forEach(boundGeometry); },\n Point: function(o) { boundPoint(o.coordinates); },\n MultiPoint: function(o) { o.coordinates.forEach(boundPoint); },\n LineString: function(o) { boundLine(o.arcs); },\n MultiLineString: function(o) { o.arcs.forEach(boundLine); },\n Polygon: function(o) { o.arcs.forEach(boundLine); },\n MultiPolygon: function(o) { o.arcs.forEach(boundMultiLine); }\n };\n\n function boundPoint(coordinates) {\n var x = coordinates[0],\n y = coordinates[1];\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n function boundLine(coordinates) {\n coordinates.forEach(boundPoint);\n }\n\n function boundMultiLine(coordinates) {\n coordinates.forEach(boundLine);\n }\n\n for (var key in objects) {\n boundGeometry(objects[key]);\n }\n\n return x1 >= x0 && y1 >= y0 ? [x0, y0, x1, y1] : undefined;\n};\n\nvar hashset = function(size, hash, equal, type, empty) {\n if (arguments.length === 3) {\n type = Array;\n empty = null;\n }\n\n var store = new type(size = 1 << Math.max(4, Math.ceil(Math.log(size) / Math.LN2))),\n mask = size - 1;\n\n for (var i = 0; i < size; ++i) {\n store[i] = empty;\n }\n\n function add(value) {\n var index = hash(value) & mask,\n match = store[index],\n collisions = 0;\n while (match != empty) {\n if (equal(match, value)) return true;\n if (++collisions >= size) throw new Error(\"full hashset\");\n match = store[index = (index + 1) & mask];\n }\n store[index] = value;\n return true;\n }\n\n function has(value) {\n var index = hash(value) & mask,\n match = store[index],\n collisions = 0;\n while (match != empty) {\n if (equal(match, value)) return true;\n if (++collisions >= size) break;\n match = store[index = (index + 1) & mask];\n }\n return false;\n }\n\n function values() {\n var values = [];\n for (var i = 0, n = store.length; i < n; ++i) {\n var match = store[i];\n if (match != empty) values.push(match);\n }\n return values;\n }\n\n return {\n add: add,\n has: has,\n values: values\n };\n};\n\nvar hashmap = function(size, hash, equal, keyType, keyEmpty, valueType) {\n if (arguments.length === 3) {\n keyType = valueType = Array;\n keyEmpty = null;\n }\n\n var keystore = new keyType(size = 1 << Math.max(4, Math.ceil(Math.log(size) / Math.LN2))),\n valstore = new valueType(size),\n mask = size - 1;\n\n for (var i = 0; i < size; ++i) {\n keystore[i] = keyEmpty;\n }\n\n function set(key, value) {\n var index = hash(key) & mask,\n matchKey = keystore[index],\n collisions = 0;\n while (matchKey != keyEmpty) {\n if (equal(matchKey, key)) return valstore[index] = value;\n if (++collisions >= size) throw new Error(\"full hashmap\");\n matchKey = keystore[index = (index + 1) & mask];\n }\n keystore[index] = key;\n valstore[index] = value;\n return value;\n }\n\n function maybeSet(key, value) {\n var index = hash(key) & mask,\n matchKey = keystore[index],\n collisions = 0;\n while (matchKey != keyEmpty) {\n if (equal(matchKey, key)) return valstore[index];\n if (++collisions >= size) throw new Error(\"full hashmap\");\n matchKey = keystore[index = (index + 1) & mask];\n }\n keystore[index] = key;\n valstore[index] = value;\n return value;\n }\n\n function get(key, missingValue) {\n var index = hash(key) & mask,\n matchKey = keystore[index],\n collisions = 0;\n while (matchKey != keyEmpty) {\n if (equal(matchKey, key)) return valstore[index];\n if (++collisions >= size) break;\n matchKey = keystore[index = (index + 1) & mask];\n }\n return missingValue;\n }\n\n function keys() {\n var keys = [];\n for (var i = 0, n = keystore.length; i < n; ++i) {\n var matchKey = keystore[i];\n if (matchKey != keyEmpty) keys.push(matchKey);\n }\n return keys;\n }\n\n return {\n set: set,\n maybeSet: maybeSet, // set if unset\n get: get,\n keys: keys\n };\n};\n\nvar equalPoint = function(pointA, pointB) {\n return pointA[0] === pointB[0] && pointA[1] === pointB[1];\n};\n\n// TODO if quantized, use simpler Int32 hashing?\n\nvar buffer = new ArrayBuffer(16);\nvar uints = new Uint32Array(buffer);\n\nvar hashPoint = function(point) {\n var hash = uints[0] ^ uints[1];\n hash = hash << 5 ^ hash >> 7 ^ uints[2] ^ uints[3];\n return hash & 0x7fffffff;\n};\n\n// Given an extracted (pre-)topology, identifies all of the junctions. These are\n// the points at which arcs (lines or rings) will need to be cut so that each\n// arc is represented uniquely.\n//\n// A junction is a point where at least one arc deviates from another arc going\n// through the same point. For example, consider the point B. If there is a arc\n// through ABC and another arc through CBA, then B is not a junction because in\n// both cases the adjacent point pairs are {A,C}. However, if there is an\n// additional arc ABD, then {A,D} != {A,C}, and thus B becomes a junction.\n//\n// For a closed ring ABCA, the first point A’s adjacent points are the second\n// and last point {B,C}. For a line, the first and last point are always\n// considered junctions, even if the line is closed; this ensures that a closed\n// line is never rotated.\nvar join = function(topology) {\n var coordinates = topology.coordinates,\n lines = topology.lines,\n rings = topology.rings,\n indexes = index(),\n visitedByIndex = new Int32Array(coordinates.length),\n leftByIndex = new Int32Array(coordinates.length),\n rightByIndex = new Int32Array(coordinates.length),\n junctionByIndex = new Int8Array(coordinates.length),\n junctionCount = 0, // upper bound on number of junctions\n i, n,\n previousIndex,\n currentIndex,\n nextIndex;\n\n for (i = 0, n = coordinates.length; i < n; ++i) {\n visitedByIndex[i] = leftByIndex[i] = rightByIndex[i] = -1;\n }\n\n for (i = 0, n = lines.length; i < n; ++i) {\n var line = lines[i],\n lineStart = line[0],\n lineEnd = line[1];\n currentIndex = indexes[lineStart];\n nextIndex = indexes[++lineStart];\n ++junctionCount, junctionByIndex[currentIndex] = 1; // start\n while (++lineStart <= lineEnd) {\n sequence(i, previousIndex = currentIndex, currentIndex = nextIndex, nextIndex = indexes[lineStart]);\n }\n ++junctionCount, junctionByIndex[nextIndex] = 1; // end\n }\n\n for (i = 0, n = coordinates.length; i < n; ++i) {\n visitedByIndex[i] = -1;\n }\n\n for (i = 0, n = rings.length; i < n; ++i) {\n var ring = rings[i],\n ringStart = ring[0] + 1,\n ringEnd = ring[1];\n previousIndex = indexes[ringEnd - 1];\n currentIndex = indexes[ringStart - 1];\n nextIndex = indexes[ringStart];\n sequence(i, previousIndex, currentIndex, nextIndex);\n while (++ringStart <= ringEnd) {\n sequence(i, previousIndex = currentIndex, currentIndex = nextIndex, nextIndex = indexes[ringStart]);\n }\n }\n\n function sequence(i, previousIndex, currentIndex, nextIndex) {\n if (visitedByIndex[currentIndex] === i) return; // ignore self-intersection\n visitedByIndex[currentIndex] = i;\n var leftIndex = leftByIndex[currentIndex];\n if (leftIndex >= 0) {\n var rightIndex = rightByIndex[currentIndex];\n if ((leftIndex !== previousIndex || rightIndex !== nextIndex)\n && (leftIndex !== nextIndex || rightIndex !== previousIndex)) {\n ++junctionCount, junctionByIndex[currentIndex] = 1;\n }\n } else {\n leftByIndex[currentIndex] = previousIndex;\n rightByIndex[currentIndex] = nextIndex;\n }\n }\n\n function index() {\n var indexByPoint = hashmap(coordinates.length * 1.4, hashIndex, equalIndex, Int32Array, -1, Int32Array),\n indexes = new Int32Array(coordinates.length);\n\n for (var i = 0, n = coordinates.length; i < n; ++i) {\n indexes[i] = indexByPoint.maybeSet(i, i);\n }\n\n return indexes;\n }\n\n function hashIndex(i) {\n return hashPoint(coordinates[i]);\n }\n\n function equalIndex(i, j) {\n return equalPoint(coordinates[i], coordinates[j]);\n }\n\n visitedByIndex = leftByIndex = rightByIndex = null;\n\n var junctionByPoint = hashset(junctionCount * 1.4, hashPoint, equalPoint), j;\n\n // Convert back to a standard hashset by point for caller convenience.\n for (i = 0, n = coordinates.length; i < n; ++i) {\n if (junctionByIndex[j = indexes[i]]) {\n junctionByPoint.add(coordinates[j]);\n }\n }\n\n return junctionByPoint;\n};\n\n// Given an extracted (pre-)topology, cuts (or rotates) arcs so that all shared\n// point sequences are identified. The topology can then be subsequently deduped\n// to remove exact duplicate arcs.\nvar cut = function(topology) {\n var junctions = join(topology),\n coordinates = topology.coordinates,\n lines = topology.lines,\n rings = topology.rings,\n next,\n i, n;\n\n for (i = 0, n = lines.length; i < n; ++i) {\n var line = lines[i],\n lineMid = line[0],\n lineEnd = line[1];\n while (++lineMid < lineEnd) {\n if (junctions.has(coordinates[lineMid])) {\n next = {0: lineMid, 1: line[1]};\n line[1] = lineMid;\n line = line.next = next;\n }\n }\n }\n\n for (i = 0, n = rings.length; i < n; ++i) {\n var ring = rings[i],\n ringStart = ring[0],\n ringMid = ringStart,\n ringEnd = ring[1],\n ringFixed = junctions.has(coordinates[ringStart]);\n while (++ringMid < ringEnd) {\n if (junctions.has(coordinates[ringMid])) {\n if (ringFixed) {\n next = {0: ringMid, 1: ring[1]};\n ring[1] = ringMid;\n ring = ring.next = next;\n } else { // For the first junction, we can rotate rather than cut.\n rotateArray(coordinates, ringStart, ringEnd, ringEnd - ringMid);\n coordinates[ringEnd] = coordinates[ringStart];\n ringFixed = true;\n ringMid = ringStart; // restart; we may have skipped junctions\n }\n }\n }\n }\n\n return topology;\n};\n\nfunction rotateArray(array, start, end, offset) {\n reverse$1(array, start, end);\n reverse$1(array, start, start + offset);\n reverse$1(array, start + offset, end);\n}\n\nfunction reverse$1(array, start, end) {\n for (var mid = start + ((end-- - start) >> 1), t; start < mid; ++start, --end) {\n t = array[start], array[start] = array[end], array[end] = t;\n }\n}\n\n// Given a cut topology, combines duplicate arcs.\nvar dedup = function(topology) {\n var coordinates = topology.coordinates,\n lines = topology.lines, line,\n rings = topology.rings, ring,\n arcCount = lines.length + rings.length,\n i, n;\n\n delete topology.lines;\n delete topology.rings;\n\n // Count the number of (non-unique) arcs to initialize the hashmap safely.\n for (i = 0, n = lines.length; i < n; ++i) {\n line = lines[i]; while (line = line.next) ++arcCount;\n }\n for (i = 0, n = rings.length; i < n; ++i) {\n ring = rings[i]; while (ring = ring.next) ++arcCount;\n }\n\n var arcsByEnd = hashmap(arcCount * 2 * 1.4, hashPoint, equalPoint),\n arcs = topology.arcs = [];\n\n for (i = 0, n = lines.length; i < n; ++i) {\n line = lines[i];\n do {\n dedupLine(line);\n } while (line = line.next);\n }\n\n for (i = 0, n = rings.length; i < n; ++i) {\n ring = rings[i];\n if (ring.next) { // arc is no longer closed\n do {\n dedupLine(ring);\n } while (ring = ring.next);\n } else {\n dedupRing(ring);\n }\n }\n\n function dedupLine(arc) {\n var startPoint,\n endPoint,\n startArcs, startArc,\n endArcs, endArc,\n i, n;\n\n // Does this arc match an existing arc in order?\n if (startArcs = arcsByEnd.get(startPoint = coordinates[arc[0]])) {\n for (i = 0, n = startArcs.length; i < n; ++i) {\n startArc = startArcs[i];\n if (equalLine(startArc, arc)) {\n arc[0] = startArc[0];\n arc[1] = startArc[1];\n return;\n }\n }\n }\n\n // Does this arc match an existing arc in reverse order?\n if (endArcs = arcsByEnd.get(endPoint = coordinates[arc[1]])) {\n for (i = 0, n = endArcs.length; i < n; ++i) {\n endArc = endArcs[i];\n if (reverseEqualLine(endArc, arc)) {\n arc[1] = endArc[0];\n arc[0] = endArc[1];\n return;\n }\n }\n }\n\n if (startArcs) startArcs.push(arc); else arcsByEnd.set(startPoint, [arc]);\n if (endArcs) endArcs.push(arc); else arcsByEnd.set(endPoint, [arc]);\n arcs.push(arc);\n }\n\n function dedupRing(arc) {\n var endPoint,\n endArcs,\n endArc,\n i, n;\n\n // Does this arc match an existing line in order, or reverse order?\n // Rings are closed, so their start point and end point is the same.\n if (endArcs = arcsByEnd.get(endPoint = coordinates[arc[0]])) {\n for (i = 0, n = endArcs.length; i < n; ++i) {\n endArc = endArcs[i];\n if (equalRing(endArc, arc)) {\n arc[0] = endArc[0];\n arc[1] = endArc[1];\n return;\n }\n if (reverseEqualRing(endArc, arc)) {\n arc[0] = endArc[1];\n arc[1] = endArc[0];\n return;\n }\n }\n }\n\n // Otherwise, does this arc match an existing ring in order, or reverse order?\n if (endArcs = arcsByEnd.get(endPoint = coordinates[arc[0] + findMinimumOffset(arc)])) {\n for (i = 0, n = endArcs.length; i < n; ++i) {\n endArc = endArcs[i];\n if (equalRing(endArc, arc)) {\n arc[0] = endArc[0];\n arc[1] = endArc[1];\n return;\n }\n if (reverseEqualRing(endArc, arc)) {\n arc[0] = endArc[1];\n arc[1] = endArc[0];\n return;\n }\n }\n }\n\n if (endArcs) endArcs.push(arc); else arcsByEnd.set(endPoint, [arc]);\n arcs.push(arc);\n }\n\n function equalLine(arcA, arcB) {\n var ia = arcA[0], ib = arcB[0],\n ja = arcA[1], jb = arcB[1];\n if (ia - ja !== ib - jb) return false;\n for (; ia <= ja; ++ia, ++ib) if (!equalPoint(coordinates[ia], coordinates[ib])) return false;\n return true;\n }\n\n function reverseEqualLine(arcA, arcB) {\n var ia = arcA[0], ib = arcB[0],\n ja = arcA[1], jb = arcB[1];\n if (ia - ja !== ib - jb) return false;\n for (; ia <= ja; ++ia, --jb) if (!equalPoint(coordinates[ia], coordinates[jb])) return false;\n return true;\n }\n\n function equalRing(arcA, arcB) {\n var ia = arcA[0], ib = arcB[0],\n ja = arcA[1], jb = arcB[1],\n n = ja - ia;\n if (n !== jb - ib) return false;\n var ka = findMinimumOffset(arcA),\n kb = findMinimumOffset(arcB);\n for (var i = 0; i < n; ++i) {\n if (!equalPoint(coordinates[ia + (i + ka) % n], coordinates[ib + (i + kb) % n])) return false;\n }\n return true;\n }\n\n function reverseEqualRing(arcA, arcB) {\n var ia = arcA[0], ib = arcB[0],\n ja = arcA[1], jb = arcB[1],\n n = ja - ia;\n if (n !== jb - ib) return false;\n var ka = findMinimumOffset(arcA),\n kb = n - findMinimumOffset(arcB);\n for (var i = 0; i < n; ++i) {\n if (!equalPoint(coordinates[ia + (i + ka) % n], coordinates[jb - (i + kb) % n])) return false;\n }\n return true;\n }\n\n // Rings are rotated to a consistent, but arbitrary, start point.\n // This is necessary to detect when a ring and a rotated copy are dupes.\n function findMinimumOffset(arc) {\n var start = arc[0],\n end = arc[1],\n mid = start,\n minimum = mid,\n minimumPoint = coordinates[mid];\n while (++mid < end) {\n var point = coordinates[mid];\n if (point[0] < minimumPoint[0] || point[0] === minimumPoint[0] && point[1] < minimumPoint[1]) {\n minimum = mid;\n minimumPoint = point;\n }\n }\n return minimum - start;\n }\n\n return topology;\n};\n\n// Given an array of arcs in absolute (but already quantized!) coordinates,\n// converts to fixed-point delta encoding.\n// This is a destructive operation that modifies the given arcs!\nvar delta = function(arcs) {\n var i = -1,\n n = arcs.length;\n\n while (++i < n) {\n var arc = arcs[i],\n j = 0,\n k = 1,\n m = arc.length,\n point = arc[0],\n x0 = point[0],\n y0 = point[1],\n x1,\n y1;\n\n while (++j < m) {\n point = arc[j], x1 = point[0], y1 = point[1];\n if (x1 !== x0 || y1 !== y0) arc[k++] = [x1 - x0, y1 - y0], x0 = x1, y0 = y1;\n }\n\n if (k === 1) arc[k++] = [0, 0]; // Each arc must be an array of two or more positions.\n\n arc.length = k;\n }\n\n return arcs;\n};\n\n// Extracts the lines and rings from the specified hash of geometry objects.\n//\n// Returns an object with three properties:\n//\n// * coordinates - shared buffer of [x, y] coordinates\n// * lines - lines extracted from the hash, of the form [start, end]\n// * rings - rings extracted from the hash, of the form [start, end]\n//\n// For each ring or line, start and end represent inclusive indexes into the\n// coordinates buffer. For rings (and closed lines), coordinates[start] equals\n// coordinates[end].\n//\n// For each line or polygon geometry in the input hash, including nested\n// geometries as in geometry collections, the `coordinates` array is replaced\n// with an equivalent `arcs` array that, for each line (for line string\n// geometries) or ring (for polygon geometries), points to one of the above\n// lines or rings.\nvar extract = function(objects) {\n var index = -1,\n lines = [],\n rings = [],\n coordinates = [];\n\n function extractGeometry(geometry) {\n if (geometry && extractGeometryType.hasOwnProperty(geometry.type)) extractGeometryType[geometry.type](geometry);\n }\n\n var extractGeometryType = {\n GeometryCollection: function(o) { o.geometries.forEach(extractGeometry); },\n LineString: function(o) { o.arcs = extractLine(o.arcs); },\n MultiLineString: function(o) { o.arcs = o.arcs.map(extractLine); },\n Polygon: function(o) { o.arcs = o.arcs.map(extractRing); },\n MultiPolygon: function(o) { o.arcs = o.arcs.map(extractMultiRing); }\n };\n\n function extractLine(line) {\n for (var i = 0, n = line.length; i < n; ++i) coordinates[++index] = line[i];\n var arc = {0: index - n + 1, 1: index};\n lines.push(arc);\n return arc;\n }\n\n function extractRing(ring) {\n for (var i = 0, n = ring.length; i < n; ++i) coordinates[++index] = ring[i];\n var arc = {0: index - n + 1, 1: index};\n rings.push(arc);\n return arc;\n }\n\n function extractMultiRing(rings) {\n return rings.map(extractRing);\n }\n\n for (var key in objects) {\n extractGeometry(objects[key]);\n }\n\n return {\n type: \"Topology\",\n coordinates: coordinates,\n lines: lines,\n rings: rings,\n objects: objects\n };\n};\n\n// Given a hash of GeoJSON objects, returns a hash of GeoJSON geometry objects.\n// Any null input geometry objects are represented as {type: null} in the output.\n// Any feature.{id,properties,bbox} are transferred to the output geometry object.\n// Each output geometry object is a shallow copy of the input (e.g., properties, coordinates)!\nvar geometry = function(inputs) {\n var outputs = {}, key;\n for (key in inputs) outputs[key] = geomifyObject(inputs[key]);\n return outputs;\n};\n\nfunction geomifyObject(input) {\n return input == null ? {type: null}\n : (input.type === \"FeatureCollection\" ? geomifyFeatureCollection\n : input.type === \"Feature\" ? geomifyFeature\n : geomifyGeometry)(input);\n}\n\nfunction geomifyFeatureCollection(input) {\n var output = {type: \"GeometryCollection\", geometries: input.features.map(geomifyFeature)};\n if (input.bbox != null) output.bbox = input.bbox;\n return output;\n}\n\nfunction geomifyFeature(input) {\n var output = geomifyGeometry(input.geometry), key; // eslint-disable-line no-unused-vars\n if (input.id != null) output.id = input.id;\n if (input.bbox != null) output.bbox = input.bbox;\n for (key in input.properties) { output.properties = input.properties; break; }\n return output;\n}\n\nfunction geomifyGeometry(input) {\n if (input == null) return {type: null};\n var output = input.type === \"GeometryCollection\" ? {type: \"GeometryCollection\", geometries: input.geometries.map(geomifyGeometry)}\n : input.type === \"Point\" || input.type === \"MultiPoint\" ? {type: input.type, coordinates: input.coordinates}\n : {type: input.type, arcs: input.coordinates}; // TODO Check for unknown types?\n if (input.bbox != null) output.bbox = input.bbox;\n return output;\n}\n\nvar prequantize = function(objects, bbox, n) {\n var x0 = bbox[0],\n y0 = bbox[1],\n x1 = bbox[2],\n y1 = bbox[3],\n kx = x1 - x0 ? (n - 1) / (x1 - x0) : 1,\n ky = y1 - y0 ? (n - 1) / (y1 - y0) : 1;\n\n function quantizePoint(input) {\n return [Math.round((input[0] - x0) * kx), Math.round((input[1] - y0) * ky)];\n }\n\n function quantizePoints(input, m) {\n var i = -1,\n j = 0,\n n = input.length,\n output = new Array(n), // pessimistic\n pi,\n px,\n py,\n x,\n y;\n\n while (++i < n) {\n pi = input[i];\n x = Math.round((pi[0] - x0) * kx);\n y = Math.round((pi[1] - y0) * ky);\n if (x !== px || y !== py) output[j++] = [px = x, py = y]; // non-coincident points\n }\n\n output.length = j;\n while (j < m) j = output.push([output[0][0], output[0][1]]);\n return output;\n }\n\n function quantizeLine(input) {\n return quantizePoints(input, 2);\n }\n\n function quantizeRing(input) {\n return quantizePoints(input, 4);\n }\n\n function quantizePolygon(input) {\n return input.map(quantizeRing);\n }\n\n function quantizeGeometry(o) {\n if (o != null && quantizeGeometryType.hasOwnProperty(o.type)) quantizeGeometryType[o.type](o);\n }\n\n var quantizeGeometryType = {\n GeometryCollection: function(o) { o.geometries.forEach(quantizeGeometry); },\n Point: function(o) { o.coordinates = quantizePoint(o.coordinates); },\n MultiPoint: function(o) { o.coordinates = o.coordinates.map(quantizePoint); },\n LineString: function(o) { o.arcs = quantizeLine(o.arcs); },\n MultiLineString: function(o) { o.arcs = o.arcs.map(quantizeLine); },\n Polygon: function(o) { o.arcs = quantizePolygon(o.arcs); },\n MultiPolygon: function(o) { o.arcs = o.arcs.map(quantizePolygon); }\n };\n\n for (var key in objects) {\n quantizeGeometry(objects[key]);\n }\n\n return {\n scale: [1 / kx, 1 / ky],\n translate: [x0, y0]\n };\n};\n\n// Constructs the TopoJSON Topology for the specified hash of features.\n// Each object in the specified hash must be a GeoJSON object,\n// meaning FeatureCollection, a Feature or a geometry object.\nvar topology = function(objects, quantization) {\n var bbox = bounds(objects = geometry(objects)),\n transform = quantization > 0 && bbox && prequantize(objects, bbox, quantization),\n topology = dedup(cut(extract(objects))),\n coordinates = topology.coordinates,\n indexByArc = hashmap(topology.arcs.length * 1.4, hashArc, equalArc);\n\n objects = topology.objects; // for garbage collection\n topology.bbox = bbox;\n topology.arcs = topology.arcs.map(function(arc, i) {\n indexByArc.set(arc, i);\n return coordinates.slice(arc[0], arc[1] + 1);\n });\n\n delete topology.coordinates;\n coordinates = null;\n\n function indexGeometry(geometry$$1) {\n if (geometry$$1 && indexGeometryType.hasOwnProperty(geometry$$1.type)) indexGeometryType[geometry$$1.type](geometry$$1);\n }\n\n var indexGeometryType = {\n GeometryCollection: function(o) { o.geometries.forEach(indexGeometry); },\n LineString: function(o) { o.arcs = indexArcs(o.arcs); },\n MultiLineString: function(o) { o.arcs = o.arcs.map(indexArcs); },\n Polygon: function(o) { o.arcs = o.arcs.map(indexArcs); },\n MultiPolygon: function(o) { o.arcs = o.arcs.map(indexMultiArcs); }\n };\n\n function indexArcs(arc) {\n var indexes = [];\n do {\n var index = indexByArc.get(arc);\n indexes.push(arc[0] < arc[1] ? index : ~index);\n } while (arc = arc.next);\n return indexes;\n }\n\n function indexMultiArcs(arcs) {\n return arcs.map(indexArcs);\n }\n\n for (var key in objects) {\n indexGeometry(objects[key]);\n }\n\n if (transform) {\n topology.transform = transform;\n topology.arcs = delta(topology.arcs);\n }\n\n return topology;\n};\n\nfunction hashArc(arc) {\n var i = arc[0], j = arc[1], t;\n if (j < i) t = i, i = j, j = t;\n return i + 31 * j;\n}\n\nfunction equalArc(arcA, arcB) {\n var ia = arcA[0], ja = arcA[1],\n ib = arcB[0], jb = arcB[1], t;\n if (ja < ia) t = ia, ia = ja, ja = t;\n if (jb < ib) t = ib, ib = jb, jb = t;\n return ia === ib && ja === jb;\n}\n\nvar prune = function(topology) {\n var oldObjects = topology.objects,\n newObjects = {},\n oldArcs = topology.arcs,\n oldArcsLength = oldArcs.length,\n oldIndex = -1,\n newIndexByOldIndex = new Array(oldArcsLength),\n newArcsLength = 0,\n newArcs,\n newIndex = -1,\n key;\n\n function scanGeometry(input) {\n switch (input.type) {\n case \"GeometryCollection\": input.geometries.forEach(scanGeometry); break;\n case \"LineString\": scanArcs(input.arcs); break;\n case \"MultiLineString\": input.arcs.forEach(scanArcs); break;\n case \"Polygon\": input.arcs.forEach(scanArcs); break;\n case \"MultiPolygon\": input.arcs.forEach(scanMultiArcs); break;\n }\n }\n\n function scanArc(index) {\n if (index < 0) index = ~index;\n if (!newIndexByOldIndex[index]) newIndexByOldIndex[index] = 1, ++newArcsLength;\n }\n\n function scanArcs(arcs) {\n arcs.forEach(scanArc);\n }\n\n function scanMultiArcs(arcs) {\n arcs.forEach(scanArcs);\n }\n\n function reindexGeometry(input) {\n var output;\n switch (input.type) {\n case \"GeometryCollection\": output = {type: \"GeometryCollection\", geometries: input.geometries.map(reindexGeometry)}; break;\n case \"LineString\": output = {type: \"LineString\", arcs: reindexArcs(input.arcs)}; break;\n case \"MultiLineString\": output = {type: \"MultiLineString\", arcs: input.arcs.map(reindexArcs)}; break;\n case \"Polygon\": output = {type: \"Polygon\", arcs: input.arcs.map(reindexArcs)}; break;\n case \"MultiPolygon\": output = {type: \"MultiPolygon\", arcs: input.arcs.map(reindexMultiArcs)}; break;\n default: return input;\n }\n if (input.id != null) output.id = input.id;\n if (input.bbox != null) output.bbox = input.bbox;\n if (input.properties != null) output.properties = input.properties;\n return output;\n }\n\n function reindexArc(oldIndex) {\n return oldIndex < 0 ? ~newIndexByOldIndex[~oldIndex] : newIndexByOldIndex[oldIndex];\n }\n\n function reindexArcs(arcs) {\n return arcs.map(reindexArc);\n }\n\n function reindexMultiArcs(arcs) {\n return arcs.map(reindexArcs);\n }\n\n for (key in oldObjects) {\n scanGeometry(oldObjects[key]);\n }\n\n newArcs = new Array(newArcsLength);\n\n while (++oldIndex < oldArcsLength) {\n if (newIndexByOldIndex[oldIndex]) {\n newIndexByOldIndex[oldIndex] = ++newIndex;\n newArcs[newIndex] = oldArcs[oldIndex];\n }\n }\n\n for (key in oldObjects) {\n newObjects[key] = reindexGeometry(oldObjects[key]);\n }\n\n return {\n type: \"Topology\",\n bbox: topology.bbox,\n transform: topology.transform,\n objects: newObjects,\n arcs: newArcs\n };\n};\n\nvar filter = function(topology, filter) {\n var oldObjects = topology.objects,\n newObjects = {},\n key;\n\n if (filter == null) filter = filterTrue;\n\n function filterGeometry(input) {\n var output, arcs;\n switch (input.type) {\n case \"Polygon\": {\n arcs = filterRings(input.arcs);\n output = arcs ? {type: \"Polygon\", arcs: arcs} : {type: null};\n break;\n }\n case \"MultiPolygon\": {\n arcs = input.arcs.map(filterRings).filter(filterIdentity);\n output = arcs.length ? {type: \"MultiPolygon\", arcs: arcs} : {type: null};\n break;\n }\n case \"GeometryCollection\": {\n arcs = input.geometries.map(filterGeometry).filter(filterNotNull);\n output = arcs.length ? {type: \"GeometryCollection\", geometries: arcs} : {type: null};\n break;\n }\n default: return input;\n }\n if (input.id != null) output.id = input.id;\n if (input.bbox != null) output.bbox = input.bbox;\n if (input.properties != null) output.properties = input.properties;\n return output;\n }\n\n function filterRings(arcs) {\n return arcs.length && filterExteriorRing(arcs[0]) // if the exterior is small, ignore any holes\n ? [arcs[0]].concat(arcs.slice(1).filter(filterInteriorRing))\n : null;\n }\n\n function filterExteriorRing(ring) {\n return filter(ring, false);\n }\n\n function filterInteriorRing(ring) {\n return filter(ring, true);\n }\n\n for (key in oldObjects) {\n newObjects[key] = filterGeometry(oldObjects[key]);\n }\n\n return prune({\n type: \"Topology\",\n bbox: topology.bbox,\n transform: topology.transform,\n objects: newObjects,\n arcs: topology.arcs\n });\n};\n\nfunction filterTrue() {\n return true;\n}\n\nfunction filterIdentity(x) {\n return x;\n}\n\nfunction filterNotNull(geometry) {\n return geometry.type != null;\n}\n\nvar filterAttached = function(topology) {\n var ownerByArc = new Array(topology.arcs.length), // arc index -> index of unique associated ring, or -1 if used by multiple rings\n ownerIndex = 0,\n key;\n\n function testGeometry(o) {\n switch (o.type) {\n case \"GeometryCollection\": o.geometries.forEach(testGeometry); break;\n case \"Polygon\": testArcs(o.arcs); break;\n case \"MultiPolygon\": o.arcs.forEach(testArcs); break;\n }\n }\n\n function testArcs(arcs) {\n for (var i = 0, n = arcs.length; i < n; ++i, ++ownerIndex) {\n for (var ring = arcs[i], j = 0, m = ring.length; j < m; ++j) {\n var arc = ring[j];\n if (arc < 0) arc = ~arc;\n var owner = ownerByArc[arc];\n if (owner == null) ownerByArc[arc] = ownerIndex;\n else if (owner !== ownerIndex) ownerByArc[arc] = -1;\n }\n }\n }\n\n for (key in topology.objects) {\n testGeometry(topology.objects[key]);\n }\n\n return function(ring) {\n for (var j = 0, m = ring.length, arc; j < m; ++j) {\n if (ownerByArc[(arc = ring[j]) < 0 ? ~arc : arc] === -1) {\n return true;\n }\n }\n return false;\n };\n};\n\nfunction planarTriangleArea(triangle) {\n var a = triangle[0], b = triangle[1], c = triangle[2];\n return Math.abs((a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1])) / 2;\n}\n\nfunction planarRingArea$1(ring) {\n var i = -1, n = ring.length, a, b = ring[n - 1], area = 0;\n while (++i < n) a = b, b = ring[i], area += a[0] * b[1] - a[1] * b[0];\n return Math.abs(area) / 2;\n}\n\nvar filterWeight = function(topology, minWeight, weight) {\n minWeight = minWeight == null ? Number.MIN_VALUE : +minWeight;\n\n if (weight == null) weight = planarRingArea$1;\n\n return function(ring, interior) {\n return weight(feature(topology, {type: \"Polygon\", arcs: [ring]}).geometry.coordinates[0], interior) >= minWeight;\n };\n};\n\nvar filterAttachedWeight = function(topology, minWeight, weight) {\n var a = filterAttached(topology),\n w = filterWeight(topology, minWeight, weight);\n return function(ring, interior) {\n return a(ring, interior) || w(ring, interior);\n };\n};\n\nfunction compare(a, b) {\n return a[1][2] - b[1][2];\n}\n\nvar newHeap = function() {\n var heap = {},\n array = [],\n size = 0;\n\n heap.push = function(object) {\n up(array[object._ = size] = object, size++);\n return size;\n };\n\n heap.pop = function() {\n if (size <= 0) return;\n var removed = array[0], object;\n if (--size > 0) object = array[size], down(array[object._ = 0] = object, 0);\n return removed;\n };\n\n heap.remove = function(removed) {\n var i = removed._, object;\n if (array[i] !== removed) return; // invalid request\n if (i !== --size) object = array[size], (compare(object, removed) < 0 ? up : down)(array[object._ = i] = object, i);\n return i;\n };\n\n function up(object, i) {\n while (i > 0) {\n var j = ((i + 1) >> 1) - 1,\n parent = array[j];\n if (compare(object, parent) >= 0) break;\n array[parent._ = i] = parent;\n array[object._ = i = j] = object;\n }\n }\n\n function down(object, i) {\n while (true) {\n var r = (i + 1) << 1,\n l = r - 1,\n j = i,\n child = array[j];\n if (l < size && compare(array[l], child) < 0) child = array[j = l];\n if (r < size && compare(array[r], child) < 0) child = array[j = r];\n if (j === i) break;\n array[child._ = i] = child;\n array[object._ = i = j] = object;\n }\n }\n\n return heap;\n};\n\nfunction copy(point) {\n return [point[0], point[1], 0];\n}\n\nvar presimplify = function(topology, weight) {\n var point = topology.transform ? transform(topology.transform) : copy,\n heap = newHeap();\n\n if (weight == null) weight = planarTriangleArea;\n\n var arcs = topology.arcs.map(function(arc) {\n var triangles = [],\n maxWeight = 0,\n triangle,\n i,\n n;\n\n arc = arc.map(point);\n\n for (i = 1, n = arc.length - 1; i < n; ++i) {\n triangle = [arc[i - 1], arc[i], arc[i + 1]];\n triangle[1][2] = weight(triangle);\n triangles.push(triangle);\n heap.push(triangle);\n }\n\n // Always keep the arc endpoints!\n arc[0][2] = arc[n][2] = Infinity;\n\n for (i = 0, n = triangles.length; i < n; ++i) {\n triangle = triangles[i];\n triangle.previous = triangles[i - 1];\n triangle.next = triangles[i + 1];\n }\n\n while (triangle = heap.pop()) {\n var previous = triangle.previous,\n next = triangle.next;\n\n // If the weight of the current point is less than that of the previous\n // point to be eliminated, use the latter’s weight instead. This ensures\n // that the current point cannot be eliminated without eliminating\n // previously- eliminated points.\n if (triangle[1][2] < maxWeight) triangle[1][2] = maxWeight;\n else maxWeight = triangle[1][2];\n\n if (previous) {\n previous.next = next;\n previous[2] = triangle[2];\n update(previous);\n }\n\n if (next) {\n next.previous = previous;\n next[0] = triangle[0];\n update(next);\n }\n }\n\n return arc;\n });\n\n function update(triangle) {\n heap.remove(triangle);\n triangle[1][2] = weight(triangle);\n heap.push(triangle);\n }\n\n return {\n type: \"Topology\",\n bbox: topology.bbox,\n objects: topology.objects,\n arcs: arcs\n };\n};\n\nvar quantile = function(topology, p) {\n var array = [];\n\n topology.arcs.forEach(function(arc) {\n arc.forEach(function(point) {\n if (isFinite(point[2])) { // Ignore endpoints, whose weight is Infinity.\n array.push(point[2]);\n }\n });\n });\n\n return array.length && quantile$1(array.sort(descending), p);\n};\n\nfunction quantile$1(array, p) {\n if (!(n = array.length)) return;\n if ((p = +p) <= 0 || n < 2) return array[0];\n if (p >= 1) return array[n - 1];\n var n,\n h = (n - 1) * p,\n i = Math.floor(h),\n a = array[i],\n b = array[i + 1];\n return a + (b - a) * (h - i);\n}\n\nfunction descending(a, b) {\n return b - a;\n}\n\nvar simplify = function(topology, minWeight) {\n minWeight = minWeight == null ? Number.MIN_VALUE : +minWeight;\n\n // Remove points whose weight is less than the minimum weight.\n var arcs = topology.arcs.map(function(input) {\n var i = -1,\n j = 0,\n n = input.length,\n output = new Array(n), // pessimistic\n point;\n\n while (++i < n) {\n if ((point = input[i])[2] >= minWeight) {\n output[j++] = [point[0], point[1]];\n }\n }\n\n output.length = j;\n return output;\n });\n\n return {\n type: \"Topology\",\n transform: topology.transform,\n bbox: topology.bbox,\n objects: topology.objects,\n arcs: arcs\n };\n};\n\nvar pi = Math.PI;\nvar tau = 2 * pi;\nvar quarterPi = pi / 4;\nvar radians = pi / 180;\nvar abs = Math.abs;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nfunction halfArea(ring, closed) {\n var i = 0,\n n = ring.length,\n sum = 0,\n point = ring[closed ? i++ : n - 1],\n lambda0, lambda1 = point[0] * radians,\n phi1 = (point[1] * radians) / 2 + quarterPi,\n cosPhi0, cosPhi1 = cos(phi1),\n sinPhi0, sinPhi1 = sin(phi1);\n\n for (; i < n; ++i) {\n point = ring[i];\n lambda0 = lambda1, lambda1 = point[0] * radians;\n phi1 = (point[1] * radians) / 2 + quarterPi;\n cosPhi0 = cosPhi1, cosPhi1 = cos(phi1);\n sinPhi0 = sinPhi1, sinPhi1 = sin(phi1);\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n // See https://github.com/d3/d3-geo/blob/master/README.md#geoArea\n var dLambda = lambda1 - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n k = sinPhi0 * sinPhi1,\n u = cosPhi0 * cosPhi1 + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n sum += atan2(v, u);\n }\n\n return sum;\n}\n\nfunction sphericalRingArea(ring, interior) {\n var sum = halfArea(ring, true);\n if (interior) sum *= -1;\n return (sum < 0 ? tau + sum : sum) * 2;\n}\n\nfunction sphericalTriangleArea(t) {\n return abs(halfArea(t, false)) * 2;\n}\n\nexports.bbox = bbox;\nexports.feature = feature;\nexports.mesh = mesh;\nexports.meshArcs = meshArcs;\nexports.merge = merge;\nexports.mergeArcs = mergeArcs;\nexports.neighbors = neighbors;\nexports.quantize = quantize;\nexports.transform = transform;\nexports.untransform = untransform;\nexports.topology = topology;\nexports.filter = filter;\nexports.filterAttached = filterAttached;\nexports.filterAttachedWeight = filterAttachedWeight;\nexports.filterWeight = filterWeight;\nexports.planarRingArea = planarRingArea$1;\nexports.planarTriangleArea = planarTriangleArea;\nexports.presimplify = presimplify;\nexports.quantile = quantile;\nexports.simplify = simplify;\nexports.sphericalRingArea = sphericalRingArea;\nexports.sphericalTriangleArea = sphericalTriangleArea;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\nexport default tmp.topojson;\n","import ArcType from \"../Core/ArcType.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport PinBuilder from \"../Core/PinBuilder.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport topojson from \"../ThirdParty/topojson.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport DataSource from \"./DataSource.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\n\nfunction defaultCrsFunction(coordinates) {\n return Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2]);\n}\n\nvar crsNames = {\n \"urn:ogc:def:crs:OGC:1.3:CRS84\": defaultCrsFunction,\n \"EPSG:4326\": defaultCrsFunction,\n \"urn:ogc:def:crs:EPSG::4326\": defaultCrsFunction,\n};\n\nvar crsLinkHrefs = {};\nvar crsLinkTypes = {};\nvar defaultMarkerSize = 48;\nvar defaultMarkerSymbol;\nvar defaultMarkerColor = Color.ROYALBLUE;\nvar defaultStroke = Color.YELLOW;\nvar defaultStrokeWidth = 2;\nvar defaultFill = Color.fromBytes(255, 255, 0, 100);\nvar defaultClampToGround = false;\n\nvar sizes = {\n small: 24,\n medium: 48,\n large: 64,\n};\n\nvar simpleStyleIdentifiers = [\n \"title\",\n \"description\", //\n \"marker-size\",\n \"marker-symbol\",\n \"marker-color\",\n \"stroke\", //\n \"stroke-opacity\",\n \"stroke-width\",\n \"fill\",\n \"fill-opacity\",\n];\n\nfunction defaultDescribe(properties, nameProperty) {\n var html = \"\";\n for (var key in properties) {\n if (properties.hasOwnProperty(key)) {\n if (key === nameProperty || simpleStyleIdentifiers.indexOf(key) !== -1) {\n continue;\n }\n var value = properties[key];\n if (defined(value)) {\n if (typeof value === \"object\") {\n html +=\n \"<tr><th>\" +\n key +\n \"</th><td>\" +\n defaultDescribe(value) +\n \"</td></tr>\";\n } else {\n html += \"<tr><th>\" + key + \"</th><td>\" + value + \"</td></tr>\";\n }\n }\n }\n }\n\n if (html.length > 0) {\n html =\n '<table class=\"cesium-infoBox-defaultTable\"><tbody>' +\n html +\n \"</tbody></table>\";\n }\n\n return html;\n}\n\nfunction createDescriptionCallback(describe, properties, nameProperty) {\n var description;\n return function (time, result) {\n if (!defined(description)) {\n description = describe(properties, nameProperty);\n }\n return description;\n };\n}\n\nfunction defaultDescribeProperty(properties, nameProperty) {\n return new CallbackProperty(\n createDescriptionCallback(defaultDescribe, properties, nameProperty),\n true\n );\n}\n\n//GeoJSON specifies only the Feature object has a usable id property\n//But since \"multi\" geometries create multiple entity,\n//we can't use it for them either.\nfunction createObject(geoJson, entityCollection, describe) {\n var id = geoJson.id;\n if (!defined(id) || geoJson.type !== \"Feature\") {\n id = createGuid();\n } else {\n var i = 2;\n var finalId = id;\n while (defined(entityCollection.getById(finalId))) {\n finalId = id + \"_\" + i;\n i++;\n }\n id = finalId;\n }\n\n var entity = entityCollection.getOrCreateEntity(id);\n var properties = geoJson.properties;\n if (defined(properties)) {\n entity.properties = properties;\n\n var nameProperty;\n\n //Check for the simplestyle specified name first.\n var name = properties.title;\n if (defined(name)) {\n entity.name = name;\n nameProperty = \"title\";\n } else {\n //Else, find the name by selecting an appropriate property.\n //The name will be obtained based on this order:\n //1) The first case-insensitive property with the name 'title',\n //2) The first case-insensitive property with the name 'name',\n //3) The first property containing the word 'title'.\n //4) The first property containing the word 'name',\n var namePropertyPrecedence = Number.MAX_VALUE;\n for (var key in properties) {\n if (properties.hasOwnProperty(key) && properties[key]) {\n var lowerKey = key.toLowerCase();\n\n if (namePropertyPrecedence > 1 && lowerKey === \"title\") {\n namePropertyPrecedence = 1;\n nameProperty = key;\n break;\n } else if (namePropertyPrecedence > 2 && lowerKey === \"name\") {\n namePropertyPrecedence = 2;\n nameProperty = key;\n } else if (namePropertyPrecedence > 3 && /title/i.test(key)) {\n namePropertyPrecedence = 3;\n nameProperty = key;\n } else if (namePropertyPrecedence > 4 && /name/i.test(key)) {\n namePropertyPrecedence = 4;\n nameProperty = key;\n }\n }\n }\n if (defined(nameProperty)) {\n entity.name = properties[nameProperty];\n }\n }\n\n var description = properties.description;\n if (description !== null) {\n entity.description = !defined(description)\n ? describe(properties, nameProperty)\n : new ConstantProperty(description);\n }\n }\n return entity;\n}\n\nfunction coordinatesArrayToCartesianArray(coordinates, crsFunction) {\n var positions = new Array(coordinates.length);\n for (var i = 0; i < coordinates.length; i++) {\n positions[i] = crsFunction(coordinates[i]);\n }\n return positions;\n}\n\nvar geoJsonObjectTypes = {\n Feature: processFeature,\n FeatureCollection: processFeatureCollection,\n GeometryCollection: processGeometryCollection,\n LineString: processLineString,\n MultiLineString: processMultiLineString,\n MultiPoint: processMultiPoint,\n MultiPolygon: processMultiPolygon,\n Point: processPoint,\n Polygon: processPolygon,\n Topology: processTopology,\n};\n\nvar geometryTypes = {\n GeometryCollection: processGeometryCollection,\n LineString: processLineString,\n MultiLineString: processMultiLineString,\n MultiPoint: processMultiPoint,\n MultiPolygon: processMultiPolygon,\n Point: processPoint,\n Polygon: processPolygon,\n Topology: processTopology,\n};\n\n// GeoJSON processing functions\nfunction processFeature(dataSource, feature, notUsed, crsFunction, options) {\n if (feature.geometry === null) {\n //Null geometry is allowed, so just create an empty entity instance for it.\n createObject(feature, dataSource._entityCollection, options.describe);\n return;\n }\n\n if (!defined(feature.geometry)) {\n throw new RuntimeError(\"feature.geometry is required.\");\n }\n\n var geometryType = feature.geometry.type;\n var geometryHandler = geometryTypes[geometryType];\n if (!defined(geometryHandler)) {\n throw new RuntimeError(\"Unknown geometry type: \" + geometryType);\n }\n geometryHandler(dataSource, feature, feature.geometry, crsFunction, options);\n}\n\nfunction processFeatureCollection(\n dataSource,\n featureCollection,\n notUsed,\n crsFunction,\n options\n) {\n var features = featureCollection.features;\n for (var i = 0, len = features.length; i < len; i++) {\n processFeature(dataSource, features[i], undefined, crsFunction, options);\n }\n}\n\nfunction processGeometryCollection(\n dataSource,\n geoJson,\n geometryCollection,\n crsFunction,\n options\n) {\n var geometries = geometryCollection.geometries;\n for (var i = 0, len = geometries.length; i < len; i++) {\n var geometry = geometries[i];\n var geometryType = geometry.type;\n var geometryHandler = geometryTypes[geometryType];\n if (!defined(geometryHandler)) {\n throw new RuntimeError(\"Unknown geometry type: \" + geometryType);\n }\n geometryHandler(dataSource, geoJson, geometry, crsFunction, options);\n }\n}\n\nfunction createPoint(dataSource, geoJson, crsFunction, coordinates, options) {\n var symbol = options.markerSymbol;\n var color = options.markerColor;\n var size = options.markerSize;\n\n var properties = geoJson.properties;\n if (defined(properties)) {\n var cssColor = properties[\"marker-color\"];\n if (defined(cssColor)) {\n color = Color.fromCssColorString(cssColor);\n }\n\n size = defaultValue(sizes[properties[\"marker-size\"]], size);\n var markerSymbol = properties[\"marker-symbol\"];\n if (defined(markerSymbol)) {\n symbol = markerSymbol;\n }\n }\n\n var canvasOrPromise;\n if (defined(symbol)) {\n if (symbol.length === 1) {\n canvasOrPromise = dataSource._pinBuilder.fromText(\n symbol.toUpperCase(),\n color,\n size\n );\n } else {\n canvasOrPromise = dataSource._pinBuilder.fromMakiIconId(\n symbol,\n color,\n size\n );\n }\n } else {\n canvasOrPromise = dataSource._pinBuilder.fromColor(color, size);\n }\n\n var billboard = new BillboardGraphics();\n billboard.verticalOrigin = new ConstantProperty(VerticalOrigin.BOTTOM);\n\n // Clamp to ground if there isn't a height specified\n if (coordinates.length === 2 && options.clampToGround) {\n billboard.heightReference = HeightReference.CLAMP_TO_GROUND;\n }\n\n var entity = createObject(\n geoJson,\n dataSource._entityCollection,\n options.describe\n );\n entity.billboard = billboard;\n entity.position = new ConstantPositionProperty(crsFunction(coordinates));\n\n var promise = when(canvasOrPromise)\n .then(function (image) {\n billboard.image = new ConstantProperty(image);\n })\n .otherwise(function () {\n billboard.image = new ConstantProperty(\n dataSource._pinBuilder.fromColor(color, size)\n );\n });\n\n dataSource._promises.push(promise);\n}\n\nfunction processPoint(dataSource, geoJson, geometry, crsFunction, options) {\n createPoint(dataSource, geoJson, crsFunction, geometry.coordinates, options);\n}\n\nfunction processMultiPoint(\n dataSource,\n geoJson,\n geometry,\n crsFunction,\n options\n) {\n var coordinates = geometry.coordinates;\n for (var i = 0; i < coordinates.length; i++) {\n createPoint(dataSource, geoJson, crsFunction, coordinates[i], options);\n }\n}\n\nfunction createLineString(\n dataSource,\n geoJson,\n crsFunction,\n coordinates,\n options\n) {\n var material = options.strokeMaterialProperty;\n var widthProperty = options.strokeWidthProperty;\n\n var properties = geoJson.properties;\n if (defined(properties)) {\n var width = properties[\"stroke-width\"];\n if (defined(width)) {\n widthProperty = new ConstantProperty(width);\n }\n\n var color;\n var stroke = properties.stroke;\n if (defined(stroke)) {\n color = Color.fromCssColorString(stroke);\n }\n var opacity = properties[\"stroke-opacity\"];\n if (defined(opacity) && opacity !== 1.0) {\n if (!defined(color)) {\n color = material.color.clone();\n }\n color.alpha = opacity;\n }\n if (defined(color)) {\n material = new ColorMaterialProperty(color);\n }\n }\n\n var entity = createObject(\n geoJson,\n dataSource._entityCollection,\n options.describe\n );\n var polylineGraphics = new PolylineGraphics();\n entity.polyline = polylineGraphics;\n\n polylineGraphics.clampToGround = options.clampToGround;\n polylineGraphics.material = material;\n polylineGraphics.width = widthProperty;\n polylineGraphics.positions = new ConstantProperty(\n coordinatesArrayToCartesianArray(coordinates, crsFunction)\n );\n polylineGraphics.arcType = ArcType.RHUMB;\n}\n\nfunction processLineString(\n dataSource,\n geoJson,\n geometry,\n crsFunction,\n options\n) {\n createLineString(\n dataSource,\n geoJson,\n crsFunction,\n geometry.coordinates,\n options\n );\n}\n\nfunction processMultiLineString(\n dataSource,\n geoJson,\n geometry,\n crsFunction,\n options\n) {\n var lineStrings = geometry.coordinates;\n for (var i = 0; i < lineStrings.length; i++) {\n createLineString(dataSource, geoJson, crsFunction, lineStrings[i], options);\n }\n}\n\nfunction createPolygon(dataSource, geoJson, crsFunction, coordinates, options) {\n if (coordinates.length === 0 || coordinates[0].length === 0) {\n return;\n }\n\n var outlineColorProperty = options.strokeMaterialProperty.color;\n var material = options.fillMaterialProperty;\n var widthProperty = options.strokeWidthProperty;\n\n var properties = geoJson.properties;\n if (defined(properties)) {\n var width = properties[\"stroke-width\"];\n if (defined(width)) {\n widthProperty = new ConstantProperty(width);\n }\n\n var color;\n var stroke = properties.stroke;\n if (defined(stroke)) {\n color = Color.fromCssColorString(stroke);\n }\n var opacity = properties[\"stroke-opacity\"];\n if (defined(opacity) && opacity !== 1.0) {\n if (!defined(color)) {\n color = options.strokeMaterialProperty.color.clone();\n }\n color.alpha = opacity;\n }\n\n if (defined(color)) {\n outlineColorProperty = new ConstantProperty(color);\n }\n\n var fillColor;\n var fill = properties.fill;\n if (defined(fill)) {\n fillColor = Color.fromCssColorString(fill);\n fillColor.alpha = material.color.alpha;\n }\n opacity = properties[\"fill-opacity\"];\n if (defined(opacity) && opacity !== material.color.alpha) {\n if (!defined(fillColor)) {\n fillColor = material.color.clone();\n }\n fillColor.alpha = opacity;\n }\n if (defined(fillColor)) {\n material = new ColorMaterialProperty(fillColor);\n }\n }\n\n var polygon = new PolygonGraphics();\n polygon.outline = new ConstantProperty(true);\n polygon.outlineColor = outlineColorProperty;\n polygon.outlineWidth = widthProperty;\n polygon.material = material;\n polygon.arcType = ArcType.RHUMB;\n\n var holes = [];\n for (var i = 1, len = coordinates.length; i < len; i++) {\n holes.push(\n new PolygonHierarchy(\n coordinatesArrayToCartesianArray(coordinates[i], crsFunction)\n )\n );\n }\n\n var positions = coordinates[0];\n polygon.hierarchy = new ConstantProperty(\n new PolygonHierarchy(\n coordinatesArrayToCartesianArray(positions, crsFunction),\n holes\n )\n );\n if (positions[0].length > 2) {\n polygon.perPositionHeight = new ConstantProperty(true);\n } else if (!options.clampToGround) {\n polygon.height = 0;\n }\n\n var entity = createObject(\n geoJson,\n dataSource._entityCollection,\n options.describe\n );\n entity.polygon = polygon;\n}\n\nfunction processPolygon(dataSource, geoJson, geometry, crsFunction, options) {\n createPolygon(\n dataSource,\n geoJson,\n crsFunction,\n geometry.coordinates,\n options\n );\n}\n\nfunction processMultiPolygon(\n dataSource,\n geoJson,\n geometry,\n crsFunction,\n options\n) {\n var polygons = geometry.coordinates;\n for (var i = 0; i < polygons.length; i++) {\n createPolygon(dataSource, geoJson, crsFunction, polygons[i], options);\n }\n}\n\nfunction processTopology(dataSource, geoJson, geometry, crsFunction, options) {\n for (var property in geometry.objects) {\n if (geometry.objects.hasOwnProperty(property)) {\n var feature = topojson.feature(geometry, geometry.objects[property]);\n var typeHandler = geoJsonObjectTypes[feature.type];\n typeHandler(dataSource, feature, feature, crsFunction, options);\n }\n }\n}\n\n/**\n * @typedef {Object} GeoJsonDataSource.LoadOptions\n *\n * Initialization options for the `load` method.\n *\n * @property {String} [sourceUri] Overrides the url to use for resolving relative links.\n * @property {Number} [markerSize=GeoJsonDataSource.markerSize] The default size of the map pin created for each point, in pixels.\n * @property {String} [markerSymbol=GeoJsonDataSource.markerSymbol] The default symbol of the map pin created for each point.\n * @property {Color} [markerColor=GeoJsonDataSource.markerColor] The default color of the map pin created for each point.\n * @property {Color} [stroke=GeoJsonDataSource.stroke] The default color of polylines and polygon outlines.\n * @property {Number} [strokeWidth=GeoJsonDataSource.strokeWidth] The default width of polylines and polygon outlines.\n * @property {Color} [fill=GeoJsonDataSource.fill] The default color for polygon interiors.\n * @property {Boolean} [clampToGround=GeoJsonDataSource.clampToGround] true if we want the geometry features (polygons or linestrings) clamped to the ground.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * A {@link DataSource} which processes both\n * {@link http://www.geojson.org/|GeoJSON} and {@link https://github.com/mbostock/topojson|TopoJSON} data.\n * {@link https://github.com/mapbox/simplestyle-spec|simplestyle-spec} properties will also be used if they\n * are present.\n *\n * @alias GeoJsonDataSource\n * @constructor\n *\n * @param {String} [name] The name of this data source. If undefined, a name will be taken from\n * the name of the GeoJSON file.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=GeoJSON%20and%20TopoJSON.html|Cesium Sandcastle GeoJSON and TopoJSON Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=GeoJSON%20simplestyle.html|Cesium Sandcastle GeoJSON simplestyle Demo}\n *\n * @example\n * var viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', {\n * stroke: Cesium.Color.HOTPINK,\n * fill: Cesium.Color.PINK,\n * strokeWidth: 3,\n * markerSymbol: '?'\n * }));\n */\nfunction GeoJsonDataSource(name) {\n this._name = name;\n this._changed = new Event();\n this._error = new Event();\n this._isLoading = false;\n this._loading = new Event();\n this._entityCollection = new EntityCollection(this);\n this._promises = [];\n this._pinBuilder = new PinBuilder();\n this._entityCluster = new EntityCluster();\n this._credit = undefined;\n this._resourceCredits = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided GeoJSON or TopoJSON data.\n *\n * @param {Resource|String|Object} data A url, GeoJSON object, or TopoJSON object to be loaded.\n * @param {GeoJsonDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise.<GeoJsonDataSource>} A promise that will resolve when the data is loaded.\n */\nGeoJsonDataSource.load = function (data, options) {\n return new GeoJsonDataSource().load(data, options);\n};\n\nObject.defineProperties(GeoJsonDataSource, {\n /**\n * Gets or sets the default size of the map pin created for each point, in pixels.\n * @memberof GeoJsonDataSource\n * @type {Number}\n * @default 48\n */\n markerSize: {\n get: function () {\n return defaultMarkerSize;\n },\n set: function (value) {\n defaultMarkerSize = value;\n },\n },\n /**\n * Gets or sets the default symbol of the map pin created for each point.\n * This can be any valid {@link http://mapbox.com/maki/|Maki} identifier, any single character,\n * or blank if no symbol is to be used.\n * @memberof GeoJsonDataSource\n * @type {String}\n */\n markerSymbol: {\n get: function () {\n return defaultMarkerSymbol;\n },\n set: function (value) {\n defaultMarkerSymbol = value;\n },\n },\n /**\n * Gets or sets the default color of the map pin created for each point.\n * @memberof GeoJsonDataSource\n * @type {Color}\n * @default Color.ROYALBLUE\n */\n markerColor: {\n get: function () {\n return defaultMarkerColor;\n },\n set: function (value) {\n defaultMarkerColor = value;\n },\n },\n /**\n * Gets or sets the default color of polylines and polygon outlines.\n * @memberof GeoJsonDataSource\n * @type {Color}\n * @default Color.BLACK\n */\n stroke: {\n get: function () {\n return defaultStroke;\n },\n set: function (value) {\n defaultStroke = value;\n },\n },\n /**\n * Gets or sets the default width of polylines and polygon outlines.\n * @memberof GeoJsonDataSource\n * @type {Number}\n * @default 2.0\n */\n strokeWidth: {\n get: function () {\n return defaultStrokeWidth;\n },\n set: function (value) {\n defaultStrokeWidth = value;\n },\n },\n /**\n * Gets or sets default color for polygon interiors.\n * @memberof GeoJsonDataSource\n * @type {Color}\n * @default Color.YELLOW\n */\n fill: {\n get: function () {\n return defaultFill;\n },\n set: function (value) {\n defaultFill = value;\n },\n },\n /**\n * Gets or sets default of whether to clamp to the ground.\n * @memberof GeoJsonDataSource\n * @type {Boolean}\n * @default false\n */\n clampToGround: {\n get: function () {\n return defaultClampToGround;\n },\n set: function (value) {\n defaultClampToGround = value;\n },\n },\n\n /**\n * Gets an object that maps the name of a crs to a callback function which takes a GeoJSON coordinate\n * and transforms it into a WGS84 Earth-fixed Cartesian. Older versions of GeoJSON which\n * supported the EPSG type can be added to this list as well, by specifying the complete EPSG name,\n * for example 'EPSG:4326'.\n * @memberof GeoJsonDataSource\n * @type {Object}\n */\n crsNames: {\n get: function () {\n return crsNames;\n },\n },\n\n /**\n * Gets an object that maps the href property of a crs link to a callback function\n * which takes the crs properties object and returns a Promise that resolves\n * to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian.\n * Items in this object take precedence over those defined in <code>crsLinkHrefs</code>, assuming\n * the link has a type specified.\n * @memberof GeoJsonDataSource\n * @type {Object}\n */\n crsLinkHrefs: {\n get: function () {\n return crsLinkHrefs;\n },\n },\n\n /**\n * Gets an object that maps the type property of a crs link to a callback function\n * which takes the crs properties object and returns a Promise that resolves\n * to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian.\n * Items in <code>crsLinkHrefs</code> take precedence over this object.\n * @memberof GeoJsonDataSource\n * @type {Object}\n */\n crsLinkTypes: {\n get: function () {\n return crsLinkTypes;\n },\n },\n});\n\nObject.defineProperties(GeoJsonDataSource.prototype, {\n /**\n * Gets or sets a human-readable name for this instance.\n * @memberof GeoJsonDataSource.prototype\n * @type {String}\n */\n name: {\n get: function () {\n return this._name;\n },\n set: function (value) {\n if (this._name !== value) {\n this._name = value;\n this._changed.raiseEvent(this);\n }\n },\n },\n /**\n * This DataSource only defines static data, therefore this property is always undefined.\n * @memberof GeoJsonDataSource.prototype\n * @type {DataSourceClock}\n */\n clock: {\n value: undefined,\n writable: false,\n },\n /**\n * Gets the collection of {@link Entity} instances.\n * @memberof GeoJsonDataSource.prototype\n * @type {EntityCollection}\n */\n entities: {\n get: function () {\n return this._entityCollection;\n },\n },\n /**\n * Gets a value indicating if the data source is currently loading data.\n * @memberof GeoJsonDataSource.prototype\n * @type {Boolean}\n */\n isLoading: {\n get: function () {\n return this._isLoading;\n },\n },\n /**\n * Gets an event that will be raised when the underlying data changes.\n * @memberof GeoJsonDataSource.prototype\n * @type {Event}\n */\n changedEvent: {\n get: function () {\n return this._changed;\n },\n },\n /**\n * Gets an event that will be raised if an error is encountered during processing.\n * @memberof GeoJsonDataSource.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._error;\n },\n },\n /**\n * Gets an event that will be raised when the data source either starts or stops loading.\n * @memberof GeoJsonDataSource.prototype\n * @type {Event}\n */\n loadingEvent: {\n get: function () {\n return this._loading;\n },\n },\n /**\n * Gets whether or not this data source should be displayed.\n * @memberof GeoJsonDataSource.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._entityCollection.show;\n },\n set: function (value) {\n this._entityCollection.show = value;\n },\n },\n\n /**\n * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n *\n * @memberof GeoJsonDataSource.prototype\n * @type {EntityCluster}\n */\n clustering: {\n get: function () {\n return this._entityCluster;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value must be defined.\");\n }\n //>>includeEnd('debug');\n this._entityCluster = value;\n },\n },\n /**\n * Gets the credit that will be displayed for the data source\n * @memberof GeoJsonDataSource.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n});\n\n/**\n * Asynchronously loads the provided GeoJSON or TopoJSON data, replacing any existing data.\n *\n * @param {Resource|String|Object} data A url, GeoJSON object, or TopoJSON object to be loaded.\n * @param {Object} [options] An object with the following properties:\n * @param {String} [options.sourceUri] Overrides the url to use for resolving relative links.\n * @param {GeoJsonDataSource.describe} [options.describe=GeoJsonDataSource.defaultDescribeProperty] A function which returns a Property object (or just a string),\n * which converts the properties into an html description.\n * @param {Number} [options.markerSize=GeoJsonDataSource.markerSize] The default size of the map pin created for each point, in pixels.\n * @param {String} [options.markerSymbol=GeoJsonDataSource.markerSymbol] The default symbol of the map pin created for each point.\n * @param {Color} [options.markerColor=GeoJsonDataSource.markerColor] The default color of the map pin created for each point.\n * @param {Color} [options.stroke=GeoJsonDataSource.stroke] The default color of polylines and polygon outlines.\n * @param {Number} [options.strokeWidth=GeoJsonDataSource.strokeWidth] The default width of polylines and polygon outlines.\n * @param {Color} [options.fill=GeoJsonDataSource.fill] The default color for polygon interiors.\n * @param {Boolean} [options.clampToGround=GeoJsonDataSource.clampToGround] true if we want the features clamped to the ground.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @returns {Promise.<GeoJsonDataSource>} a promise that will resolve when the GeoJSON is loaded.\n */\nGeoJsonDataSource.prototype.load = function (data, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(data)) {\n throw new DeveloperError(\"data is required.\");\n }\n //>>includeEnd('debug');\n\n DataSource.setLoading(this, true);\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n // User specified credit\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n var promise = data;\n var sourceUri = options.sourceUri;\n if (typeof data === \"string\" || data instanceof Resource) {\n data = Resource.createIfNeeded(data);\n promise = data.fetchJson();\n sourceUri = defaultValue(sourceUri, data.getUrlComponent());\n\n // Add resource credits to our list of credits to display\n var resourceCredits = this._resourceCredits;\n var credits = data.credits;\n if (defined(credits)) {\n var length = credits.length;\n for (var i = 0; i < length; i++) {\n resourceCredits.push(credits[i]);\n }\n }\n }\n\n options = {\n describe: defaultValue(options.describe, defaultDescribeProperty),\n markerSize: defaultValue(options.markerSize, defaultMarkerSize),\n markerSymbol: defaultValue(options.markerSymbol, defaultMarkerSymbol),\n markerColor: defaultValue(options.markerColor, defaultMarkerColor),\n strokeWidthProperty: new ConstantProperty(\n defaultValue(options.strokeWidth, defaultStrokeWidth)\n ),\n strokeMaterialProperty: new ColorMaterialProperty(\n defaultValue(options.stroke, defaultStroke)\n ),\n fillMaterialProperty: new ColorMaterialProperty(\n defaultValue(options.fill, defaultFill)\n ),\n clampToGround: defaultValue(options.clampToGround, defaultClampToGround),\n };\n\n var that = this;\n return when(promise, function (geoJson) {\n return load(that, geoJson, options, sourceUri);\n }).otherwise(function (error) {\n DataSource.setLoading(that, false);\n that._error.raiseEvent(that, error);\n console.log(error);\n return when.reject(error);\n });\n};\n\n/**\n * Updates the data source to the provided time. This function is optional and\n * is not required to be implemented. It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nGeoJsonDataSource.prototype.update = function (time) {\n return true;\n};\n\nfunction load(that, geoJson, options, sourceUri) {\n var name;\n if (defined(sourceUri)) {\n name = getFilenameFromUri(sourceUri);\n }\n\n if (defined(name) && that._name !== name) {\n that._name = name;\n that._changed.raiseEvent(that);\n }\n\n var typeHandler = geoJsonObjectTypes[geoJson.type];\n if (!defined(typeHandler)) {\n throw new RuntimeError(\"Unsupported GeoJSON object type: \" + geoJson.type);\n }\n\n //Check for a Coordinate Reference System.\n var crs = geoJson.crs;\n var crsFunction = crs !== null ? defaultCrsFunction : null;\n\n if (defined(crs)) {\n if (!defined(crs.properties)) {\n throw new RuntimeError(\"crs.properties is undefined.\");\n }\n\n var properties = crs.properties;\n if (crs.type === \"name\") {\n crsFunction = crsNames[properties.name];\n if (!defined(crsFunction)) {\n throw new RuntimeError(\"Unknown crs name: \" + properties.name);\n }\n } else if (crs.type === \"link\") {\n var handler = crsLinkHrefs[properties.href];\n if (!defined(handler)) {\n handler = crsLinkTypes[properties.type];\n }\n\n if (!defined(handler)) {\n throw new RuntimeError(\n \"Unable to resolve crs link: \" + JSON.stringify(properties)\n );\n }\n\n crsFunction = handler(properties);\n } else if (crs.type === \"EPSG\") {\n crsFunction = crsNames[\"EPSG:\" + properties.code];\n if (!defined(crsFunction)) {\n throw new RuntimeError(\"Unknown crs EPSG code: \" + properties.code);\n }\n } else {\n throw new RuntimeError(\"Unknown crs type: \" + crs.type);\n }\n }\n\n return when(crsFunction, function (crsFunction) {\n that._entityCollection.removeAll();\n\n // null is a valid value for the crs, but means the entire load process becomes a no-op\n // because we can't assume anything about the coordinates.\n if (crsFunction !== null) {\n typeHandler(that, geoJson, geoJson, crsFunction, options);\n }\n\n return when.all(that._promises, function () {\n that._promises.length = 0;\n DataSource.setLoading(that, false);\n return that;\n });\n });\n}\n\n/**\n * This callback is displayed as part of the GeoJsonDataSource class.\n * @callback GeoJsonDataSource.describe\n * @param {Object} properties The properties of the feature.\n * @param {String} nameProperty The property key that Cesium estimates to have the name of the feature.\n */\nexport default GeoJsonDataSource;\n","/**\n * Representation of <Camera> from KML\n * @alias KmlCamera\n * @constructor\n *\n * @param {Cartesian3} position camera position\n * @param {HeadingPitchRoll} headingPitchRoll camera orientation\n */\nfunction KmlCamera(position, headingPitchRoll) {\n this.position = position;\n this.headingPitchRoll = headingPitchRoll;\n}\nexport default KmlCamera;\n","var tmp = {};\n\n/*!\n * Autolinker.js\n * 3.11.0\n *\n * Copyright(c) 2019 Gregory Jacobs <greg@greg-jacobs.com>\n * MIT License\n *\n * https://github.com/gregjacobs/Autolinker.js\n */\n(function (global, factory) {\n global.Autolinker = factory();\n}(tmp, function () { 'use strict';\n\n /**\n * Assigns (shallow copies) the properties of `src` onto `dest`, if the\n * corresponding property on `dest` === `undefined`.\n *\n * @param {Object} dest The destination object.\n * @param {Object} src The source object.\n * @return {Object} The destination object (`dest`)\n */\n function defaults(dest, src) {\n for (var prop in src) {\n if (src.hasOwnProperty(prop) && dest[prop] === undefined) {\n dest[prop] = src[prop];\n }\n }\n return dest;\n }\n /**\n * Truncates the `str` at `len - ellipsisChars.length`, and adds the `ellipsisChars` to the\n * end of the string (by default, two periods: '..'). If the `str` length does not exceed\n * `len`, the string will be returned unchanged.\n *\n * @param {String} str The string to truncate and add an ellipsis to.\n * @param {Number} truncateLen The length to truncate the string at.\n * @param {String} [ellipsisChars=...] The ellipsis character(s) to add to the end of `str`\n * when truncated. Defaults to '...'\n */\n function ellipsis(str, truncateLen, ellipsisChars) {\n var ellipsisLength;\n if (str.length > truncateLen) {\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLength = 3;\n }\n else {\n ellipsisLength = ellipsisChars.length;\n }\n str = str.substring(0, truncateLen - ellipsisLength) + ellipsisChars;\n }\n return str;\n }\n /**\n * Supports `Array.prototype.indexOf()` functionality for old IE (IE8 and below).\n *\n * @param {Array} arr The array to find an element of.\n * @param {*} element The element to find in the array, and return the index of.\n * @return {Number} The index of the `element`, or -1 if it was not found.\n */\n function indexOf(arr, element) {\n if (Array.prototype.indexOf) {\n return arr.indexOf(element);\n }\n else {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === element)\n return i;\n }\n return -1;\n }\n }\n /**\n * Removes array elements based on a filtering function. Mutates the input\n * array.\n *\n * Using this instead of the ES5 Array.prototype.filter() function, to allow\n * Autolinker compatibility with IE8, and also to prevent creating many new\n * arrays in memory for filtering.\n *\n * @param {Array} arr The array to remove elements from. This array is\n * mutated.\n * @param {Function} fn A function which should return `true` to\n * remove an element.\n * @return {Array} The mutated input `arr`.\n */\n function remove(arr, fn) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (fn(arr[i]) === true) {\n arr.splice(i, 1);\n }\n }\n }\n /**\n * Performs the functionality of what modern browsers do when `String.prototype.split()` is called\n * with a regular expression that contains capturing parenthesis.\n *\n * For example:\n *\n * // Modern browsers:\n * \"a,b,c\".split( /(,)/ ); // --> [ 'a', ',', 'b', ',', 'c' ]\n *\n * // Old IE (including IE8):\n * \"a,b,c\".split( /(,)/ ); // --> [ 'a', 'b', 'c' ]\n *\n * This method emulates the functionality of modern browsers for the old IE case.\n *\n * @param {String} str The string to split.\n * @param {RegExp} splitRegex The regular expression to split the input `str` on. The splitting\n * character(s) will be spliced into the array, as in the \"modern browsers\" example in the\n * description of this method.\n * Note #1: the supplied regular expression **must** have the 'g' flag specified.\n * Note #2: for simplicity's sake, the regular expression does not need\n * to contain capturing parenthesis - it will be assumed that any match has them.\n * @return {String[]} The split array of strings, with the splitting character(s) included.\n */\n function splitAndCapture(str, splitRegex) {\n if (!splitRegex.global)\n throw new Error(\"`splitRegex` must have the 'g' flag set\");\n var result = [], lastIdx = 0, match;\n while (match = splitRegex.exec(str)) {\n result.push(str.substring(lastIdx, match.index));\n result.push(match[0]); // push the splitting char(s)\n lastIdx = match.index + match[0].length;\n }\n result.push(str.substring(lastIdx));\n return result;\n }\n /**\n * Function that should never be called but is used to check that every\n * enum value is handled using TypeScript's 'never' type.\n */\n function throwUnhandledCaseError(theValue) {\n throw new Error(\"Unhandled case for value: '\" + theValue + \"'\");\n }\n\n /**\n * @class Autolinker.HtmlTag\n * @extends Object\n *\n * Represents an HTML tag, which can be used to easily build/modify HTML tags programmatically.\n *\n * Autolinker uses this abstraction to create HTML tags, and then write them out as strings. You may also use\n * this class in your code, especially within a {@link Autolinker#replaceFn replaceFn}.\n *\n * ## Examples\n *\n * Example instantiation:\n *\n * var tag = new Autolinker.HtmlTag( {\n * tagName : 'a',\n * attrs : { 'href': 'http://google.com', 'class': 'external-link' },\n * innerHtml : 'Google'\n * } );\n *\n * tag.toAnchorString(); // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n * // Individual accessor methods\n * tag.getTagName(); // 'a'\n * tag.getAttr( 'href' ); // 'http://google.com'\n * tag.hasClass( 'external-link' ); // true\n *\n *\n * Using mutator methods (which may be used in combination with instantiation config properties):\n *\n * var tag = new Autolinker.HtmlTag();\n * tag.setTagName( 'a' );\n * tag.setAttr( 'href', 'http://google.com' );\n * tag.addClass( 'external-link' );\n * tag.setInnerHtml( 'Google' );\n *\n * tag.getTagName(); // 'a'\n * tag.getAttr( 'href' ); // 'http://google.com'\n * tag.hasClass( 'external-link' ); // true\n *\n * tag.toAnchorString(); // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n *\n * ## Example use within a {@link Autolinker#replaceFn replaceFn}\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance, configured with the Match's href and anchor text\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n *\n *\n * ## Example use with a new tag for the replacement\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = new Autolinker.HtmlTag( {\n * tagName : 'button',\n * attrs : { 'title': 'Load URL: ' + match.getAnchorHref() },\n * innerHtml : 'Load URL: ' + match.getAnchorText()\n * } );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test <button title=\"Load URL: http://google.com\">Load URL: google.com</button>\n */\n var HtmlTag = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} [cfg] The configuration properties for this class, in an Object (map)\n */\n function HtmlTag(cfg) {\n if (cfg === void 0) { cfg = {}; }\n /**\n * @cfg {String} tagName\n *\n * The tag name. Ex: 'a', 'button', etc.\n *\n * Not required at instantiation time, but should be set using {@link #setTagName} before {@link #toAnchorString}\n * is executed.\n */\n this.tagName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object.<String, String>} attrs\n *\n * An key/value Object (map) of attributes to create the tag with. The keys are the attribute names, and the\n * values are the attribute values.\n */\n this.attrs = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} innerHTML\n *\n * The inner HTML for the tag.\n */\n this.innerHTML = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {RegExp} whitespaceRegex\n *\n * Regular expression used to match whitespace in a string of CSS classes.\n */\n this.whitespaceRegex = /\\s+/; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.tagName = cfg.tagName || '';\n this.attrs = cfg.attrs || {};\n this.innerHTML = cfg.innerHtml || cfg.innerHTML || ''; // accept either the camelCased form or the fully capitalized acronym as in the DOM\n }\n /**\n * Sets the tag name that will be used to generate the tag with.\n *\n * @param {String} tagName\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setTagName = function (tagName) {\n this.tagName = tagName;\n return this;\n };\n /**\n * Retrieves the tag name.\n *\n * @return {String}\n */\n HtmlTag.prototype.getTagName = function () {\n return this.tagName || '';\n };\n /**\n * Sets an attribute on the HtmlTag.\n *\n * @param {String} attrName The attribute name to set.\n * @param {String} attrValue The attribute value to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setAttr = function (attrName, attrValue) {\n var tagAttrs = this.getAttrs();\n tagAttrs[attrName] = attrValue;\n return this;\n };\n /**\n * Retrieves an attribute from the HtmlTag. If the attribute does not exist, returns `undefined`.\n *\n * @param {String} attrName The attribute name to retrieve.\n * @return {String} The attribute's value, or `undefined` if it does not exist on the HtmlTag.\n */\n HtmlTag.prototype.getAttr = function (attrName) {\n return this.getAttrs()[attrName];\n };\n /**\n * Sets one or more attributes on the HtmlTag.\n *\n * @param {Object.<String, String>} attrs A key/value Object (map) of the attributes to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setAttrs = function (attrs) {\n Object.assign(this.getAttrs(), attrs);\n return this;\n };\n /**\n * Retrieves the attributes Object (map) for the HtmlTag.\n *\n * @return {Object.<String, String>} A key/value object of the attributes for the HtmlTag.\n */\n HtmlTag.prototype.getAttrs = function () {\n return this.attrs || (this.attrs = {});\n };\n /**\n * Sets the provided `cssClass`, overwriting any current CSS classes on the HtmlTag.\n *\n * @param {String} cssClass One or more space-separated CSS classes to set (overwrite).\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setClass = function (cssClass) {\n return this.setAttr('class', cssClass);\n };\n /**\n * Convenience method to add one or more CSS classes to the HtmlTag. Will not add duplicate CSS classes.\n *\n * @param {String} cssClass One or more space-separated CSS classes to add.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.addClass = function (cssClass) {\n var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = (!classAttr) ? [] : classAttr.split(whitespaceRegex), newClasses = cssClass.split(whitespaceRegex), newClass;\n while (newClass = newClasses.shift()) {\n if (indexOf(classes, newClass) === -1) {\n classes.push(newClass);\n }\n }\n this.getAttrs()['class'] = classes.join(\" \");\n return this;\n };\n /**\n * Convenience method to remove one or more CSS classes from the HtmlTag.\n *\n * @param {String} cssClass One or more space-separated CSS classes to remove.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.removeClass = function (cssClass) {\n var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = (!classAttr) ? [] : classAttr.split(whitespaceRegex), removeClasses = cssClass.split(whitespaceRegex), removeClass;\n while (classes.length && (removeClass = removeClasses.shift())) {\n var idx = indexOf(classes, removeClass);\n if (idx !== -1) {\n classes.splice(idx, 1);\n }\n }\n this.getAttrs()['class'] = classes.join(\" \");\n return this;\n };\n /**\n * Convenience method to retrieve the CSS class(es) for the HtmlTag, which will each be separated by spaces when\n * there are multiple.\n *\n * @return {String}\n */\n HtmlTag.prototype.getClass = function () {\n return this.getAttrs()['class'] || \"\";\n };\n /**\n * Convenience method to check if the tag has a CSS class or not.\n *\n * @param {String} cssClass The CSS class to check for.\n * @return {Boolean} `true` if the HtmlTag has the CSS class, `false` otherwise.\n */\n HtmlTag.prototype.hasClass = function (cssClass) {\n return (' ' + this.getClass() + ' ').indexOf(' ' + cssClass + ' ') !== -1;\n };\n /**\n * Sets the inner HTML for the tag.\n *\n * @param {String} html The inner HTML to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setInnerHTML = function (html) {\n this.innerHTML = html;\n return this;\n };\n /**\n * Backwards compatibility method name.\n *\n * @param {String} html The inner HTML to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setInnerHtml = function (html) {\n return this.setInnerHTML(html);\n };\n /**\n * Retrieves the inner HTML for the tag.\n *\n * @return {String}\n */\n HtmlTag.prototype.getInnerHTML = function () {\n return this.innerHTML || \"\";\n };\n /**\n * Backward compatibility method name.\n *\n * @return {String}\n */\n HtmlTag.prototype.getInnerHtml = function () {\n return this.getInnerHTML();\n };\n /**\n * Override of superclass method used to generate the HTML string for the tag.\n *\n * @return {String}\n */\n HtmlTag.prototype.toAnchorString = function () {\n var tagName = this.getTagName(), attrsStr = this.buildAttrsStr();\n attrsStr = (attrsStr) ? ' ' + attrsStr : ''; // prepend a space if there are actually attributes\n return ['<', tagName, attrsStr, '>', this.getInnerHtml(), '</', tagName, '>'].join(\"\");\n };\n /**\n * Support method for {@link #toAnchorString}, returns the string space-separated key=\"value\" pairs, used to populate\n * the stringified HtmlTag.\n *\n * @protected\n * @return {String} Example return: `attr1=\"value1\" attr2=\"value2\"`\n */\n HtmlTag.prototype.buildAttrsStr = function () {\n if (!this.attrs)\n return \"\"; // no `attrs` Object (map) has been set, return empty string\n var attrs = this.getAttrs(), attrsArr = [];\n for (var prop in attrs) {\n if (attrs.hasOwnProperty(prop)) {\n attrsArr.push(prop + '=\"' + attrs[prop] + '\"');\n }\n }\n return attrsArr.join(\" \");\n };\n return HtmlTag;\n }());\n\n /**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed at a section within\n * the URL making it still somewhat human readable.\n *\n * @param {String} url\t\t\t\t\t\t A URL.\n * @param {Number} truncateLen\t\t The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars\t The characters to place within the url, e.g. \"...\".\n * @return {String} The truncated URL.\n */\n function truncateSmart(url, truncateLen, ellipsisChars) {\n var ellipsisLengthBeforeParsing;\n var ellipsisLength;\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLength = 3;\n ellipsisLengthBeforeParsing = 8;\n }\n else {\n ellipsisLength = ellipsisChars.length;\n ellipsisLengthBeforeParsing = ellipsisChars.length;\n }\n var parse_url = function (url) {\n var urlObj = {};\n var urlSub = url;\n var match = urlSub.match(/^([a-z]+):\\/\\//i);\n if (match) {\n urlObj.scheme = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^(.*?)(?=(\\?|#|\\/|$))/i);\n if (match) {\n urlObj.host = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^\\/(.*?)(?=(\\?|#|$))/i);\n if (match) {\n urlObj.path = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^\\?(.*?)(?=(#|$))/i);\n if (match) {\n urlObj.query = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^#(.*?)$/i);\n if (match) {\n urlObj.fragment = match[1];\n //urlSub = urlSub.substr(match[0].length); -- not used. Uncomment if adding another block.\n }\n return urlObj;\n };\n var buildUrl = function (urlObj) {\n var url = \"\";\n if (urlObj.scheme && urlObj.host) {\n url += urlObj.scheme + \"://\";\n }\n if (urlObj.host) {\n url += urlObj.host;\n }\n if (urlObj.path) {\n url += \"/\" + urlObj.path;\n }\n if (urlObj.query) {\n url += \"?\" + urlObj.query;\n }\n if (urlObj.fragment) {\n url += \"#\" + urlObj.fragment;\n }\n return url;\n };\n var buildSegment = function (segment, remainingAvailableLength) {\n var remainingAvailableLengthHalf = remainingAvailableLength / 2, startOffset = Math.ceil(remainingAvailableLengthHalf), endOffset = (-1) * Math.floor(remainingAvailableLengthHalf), end = \"\";\n if (endOffset < 0) {\n end = segment.substr(endOffset);\n }\n return segment.substr(0, startOffset) + ellipsisChars + end;\n };\n if (url.length <= truncateLen) {\n return url;\n }\n var availableLength = truncateLen - ellipsisLength;\n var urlObj = parse_url(url);\n // Clean up the URL\n if (urlObj.query) {\n var matchQuery = urlObj.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);\n if (matchQuery) {\n // Malformed URL; two or more \"?\". Removed any content behind the 2nd.\n urlObj.query = urlObj.query.substr(0, matchQuery[1].length);\n url = buildUrl(urlObj);\n }\n }\n if (url.length <= truncateLen) {\n return url;\n }\n if (urlObj.host) {\n urlObj.host = urlObj.host.replace(/^www\\./, \"\");\n url = buildUrl(urlObj);\n }\n if (url.length <= truncateLen) {\n return url;\n }\n // Process and build the URL\n var str = \"\";\n if (urlObj.host) {\n str += urlObj.host;\n }\n if (str.length >= availableLength) {\n if (urlObj.host.length == truncateLen) {\n return (urlObj.host.substr(0, (truncateLen - ellipsisLength)) + ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n return buildSegment(str, availableLength).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n var pathAndQuery = \"\";\n if (urlObj.path) {\n pathAndQuery += \"/\" + urlObj.path;\n }\n if (urlObj.query) {\n pathAndQuery += \"?\" + urlObj.query;\n }\n if (pathAndQuery) {\n if ((str + pathAndQuery).length >= availableLength) {\n if ((str + pathAndQuery).length == truncateLen) {\n return (str + pathAndQuery).substr(0, truncateLen);\n }\n var remainingAvailableLength = availableLength - str.length;\n return (str + buildSegment(pathAndQuery, remainingAvailableLength)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n else {\n str += pathAndQuery;\n }\n }\n if (urlObj.fragment) {\n var fragment = \"#\" + urlObj.fragment;\n if ((str + fragment).length >= availableLength) {\n if ((str + fragment).length == truncateLen) {\n return (str + fragment).substr(0, truncateLen);\n }\n var remainingAvailableLength2 = availableLength - str.length;\n return (str + buildSegment(fragment, remainingAvailableLength2)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n else {\n str += fragment;\n }\n }\n if (urlObj.scheme && urlObj.host) {\n var scheme = urlObj.scheme + \"://\";\n if ((str + scheme).length < availableLength) {\n return (scheme + str).substr(0, truncateLen);\n }\n }\n if (str.length <= truncateLen) {\n return str;\n }\n var end = \"\";\n if (availableLength > 0) {\n end = str.substr((-1) * Math.floor(availableLength / 2));\n }\n return (str.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n\n /**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed in the dead-center of the URL.\n *\n * @param {String} url A URL.\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\n function truncateMiddle(url, truncateLen, ellipsisChars) {\n if (url.length <= truncateLen) {\n return url;\n }\n var ellipsisLengthBeforeParsing;\n var ellipsisLength;\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLengthBeforeParsing = 8;\n ellipsisLength = 3;\n }\n else {\n ellipsisLengthBeforeParsing = ellipsisChars.length;\n ellipsisLength = ellipsisChars.length;\n }\n var availableLength = truncateLen - ellipsisLength;\n var end = \"\";\n if (availableLength > 0) {\n end = url.substr((-1) * Math.floor(availableLength / 2));\n }\n return (url.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n\n /**\n * A truncation feature where the ellipsis will be placed at the end of the URL.\n *\n * @param {String} anchorText\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\n function truncateEnd(anchorText, truncateLen, ellipsisChars) {\n return ellipsis(anchorText, truncateLen, ellipsisChars);\n }\n\n /**\n * @protected\n * @class Autolinker.AnchorTagBuilder\n * @extends Object\n *\n * Builds anchor (<a>) tags for the Autolinker utility when a match is\n * found.\n *\n * Normally this class is instantiated, configured, and used internally by an\n * {@link Autolinker} instance, but may actually be used indirectly in a\n * {@link Autolinker#replaceFn replaceFn} to create {@link Autolinker.HtmlTag HtmlTag}\n * instances which may be modified before returning from the\n * {@link Autolinker#replaceFn replaceFn}. For example:\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n */\n var AnchorTagBuilder = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} [cfg] The configuration options for the AnchorTagBuilder instance, specified in an Object (map).\n */\n function AnchorTagBuilder(cfg) {\n if (cfg === void 0) { cfg = {}; }\n /**\n * @cfg {Boolean} newWindow\n * @inheritdoc Autolinker#newWindow\n */\n this.newWindow = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object} truncate\n * @inheritdoc Autolinker#truncate\n */\n this.truncate = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} className\n * @inheritdoc Autolinker#className\n */\n this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.newWindow = cfg.newWindow || false;\n this.truncate = cfg.truncate || {};\n this.className = cfg.className || '';\n }\n /**\n * Generates the actual anchor (<a>) tag to use in place of the\n * matched text, via its `match` object.\n *\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {Autolinker.HtmlTag} The HtmlTag instance for the anchor tag.\n */\n AnchorTagBuilder.prototype.build = function (match) {\n return new HtmlTag({\n tagName: 'a',\n attrs: this.createAttrs(match),\n innerHtml: this.processAnchorText(match.getAnchorText())\n });\n };\n /**\n * Creates the Object (map) of the HTML attributes for the anchor (<a>)\n * tag being generated.\n *\n * @protected\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {Object} A key/value Object (map) of the anchor tag's attributes.\n */\n AnchorTagBuilder.prototype.createAttrs = function (match) {\n var attrs = {\n 'href': match.getAnchorHref() // we'll always have the `href` attribute\n };\n var cssClass = this.createCssClass(match);\n if (cssClass) {\n attrs['class'] = cssClass;\n }\n if (this.newWindow) {\n attrs['target'] = \"_blank\";\n attrs['rel'] = \"noopener noreferrer\"; // Issue #149. See https://mathiasbynens.github.io/rel-noopener/\n }\n if (this.truncate) {\n if (this.truncate.length && this.truncate.length < match.getAnchorText().length) {\n attrs['title'] = match.getAnchorHref();\n }\n }\n return attrs;\n };\n /**\n * Creates the CSS class that will be used for a given anchor tag, based on\n * the `matchType` and the {@link #className} config.\n *\n * Example returns:\n *\n * - \"\" // no {@link #className}\n * - \"myLink myLink-url\" // url match\n * - \"myLink myLink-email\" // email match\n * - \"myLink myLink-phone\" // phone match\n * - \"myLink myLink-hashtag\" // hashtag match\n * - \"myLink myLink-mention myLink-twitter\" // mention match with Twitter service\n *\n * @protected\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {String} The CSS class string for the link. Example return:\n * \"myLink myLink-url\". If no {@link #className} was configured, returns\n * an empty string.\n */\n AnchorTagBuilder.prototype.createCssClass = function (match) {\n var className = this.className;\n if (!className) {\n return \"\";\n }\n else {\n var returnClasses = [className], cssClassSuffixes = match.getCssClassSuffixes();\n for (var i = 0, len = cssClassSuffixes.length; i < len; i++) {\n returnClasses.push(className + '-' + cssClassSuffixes[i]);\n }\n return returnClasses.join(' ');\n }\n };\n /**\n * Processes the `anchorText` by truncating the text according to the\n * {@link #truncate} config.\n *\n * @private\n * @param {String} anchorText The anchor tag's text (i.e. what will be\n * displayed).\n * @return {String} The processed `anchorText`.\n */\n AnchorTagBuilder.prototype.processAnchorText = function (anchorText) {\n anchorText = this.doTruncate(anchorText);\n return anchorText;\n };\n /**\n * Performs the truncation of the `anchorText` based on the {@link #truncate}\n * option. If the `anchorText` is longer than the length specified by the\n * {@link #truncate} option, the truncation is performed based on the\n * `location` property. See {@link #truncate} for details.\n *\n * @private\n * @param {String} anchorText The anchor tag's text (i.e. what will be\n * displayed).\n * @return {String} The truncated anchor text.\n */\n AnchorTagBuilder.prototype.doTruncate = function (anchorText) {\n var truncate = this.truncate;\n if (!truncate || !truncate.length)\n return anchorText;\n var truncateLength = truncate.length, truncateLocation = truncate.location;\n if (truncateLocation === 'smart') {\n return truncateSmart(anchorText, truncateLength);\n }\n else if (truncateLocation === 'middle') {\n return truncateMiddle(anchorText, truncateLength);\n }\n else {\n return truncateEnd(anchorText, truncateLength);\n }\n };\n return AnchorTagBuilder;\n }());\n\n /**\n * @abstract\n * @class Autolinker.match.Match\n *\n * Represents a match found in an input string which should be Autolinked. A Match object is what is provided in a\n * {@link Autolinker#replaceFn replaceFn}, and may be used to query for details about the match.\n *\n * For example:\n *\n * var input = \"...\"; // string with URLs, Email Addresses, and Mentions (Twitter, Instagram, Soundcloud)\n *\n * var linkedText = Autolinker.link( input, {\n * replaceFn : function( match ) {\n * console.log( \"href = \", match.getAnchorHref() );\n * console.log( \"text = \", match.getAnchorText() );\n *\n * switch( match.getType() ) {\n * case 'url' :\n * console.log( \"url: \", match.getUrl() );\n *\n * case 'email' :\n * console.log( \"email: \", match.getEmail() );\n *\n * case 'mention' :\n * console.log( \"mention: \", match.getMention() );\n * }\n * }\n * } );\n *\n * See the {@link Autolinker} class for more details on using the {@link Autolinker#replaceFn replaceFn}.\n */\n var Match = /** @class */ (function () {\n /**\n * @member Autolinker.match.Match\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function Match(cfg) {\n /**\n * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n *\n * Reference to the AnchorTagBuilder instance to use to generate an anchor\n * tag for the Match.\n */\n this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n /**\n * @cfg {String} matchedText (required)\n *\n * The original text that was matched by the {@link Autolinker.matcher.Matcher}.\n */\n this.matchedText = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Number} offset (required)\n *\n * The offset of where the match was made in the input string.\n */\n this.offset = 0; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.tagBuilder = cfg.tagBuilder;\n this.matchedText = cfg.matchedText;\n this.offset = cfg.offset;\n }\n /**\n * Returns the original text that was matched.\n *\n * @return {String}\n */\n Match.prototype.getMatchedText = function () {\n return this.matchedText;\n };\n /**\n * Sets the {@link #offset} of where the match was made in the input string.\n *\n * A {@link Autolinker.matcher.Matcher} will be fed only HTML text nodes,\n * and will therefore set an original offset that is relative to the HTML\n * text node itself. However, we want this offset to be relative to the full\n * HTML input string, and thus if using {@link Autolinker#parse} (rather\n * than calling a {@link Autolinker.matcher.Matcher} directly), then this\n * offset is corrected after the Matcher itself has done its job.\n *\n * @param {Number} offset\n */\n Match.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Returns the offset of where the match was made in the input string. This\n * is the 0-based index of the match.\n *\n * @return {Number}\n */\n Match.prototype.getOffset = function () {\n return this.offset;\n };\n /**\n * Returns the CSS class suffix(es) for this match.\n *\n * A CSS class suffix is appended to the {@link Autolinker#className} in\n * the {@link Autolinker.AnchorTagBuilder} when a match is translated into\n * an anchor tag.\n *\n * For example, if {@link Autolinker#className} was configured as 'myLink',\n * and this method returns `[ 'url' ]`, the final class name of the element\n * will become: 'myLink myLink-url'.\n *\n * The match may provide multiple CSS class suffixes to be appended to the\n * {@link Autolinker#className} in order to facilitate better styling\n * options for different match criteria. See {@link Autolinker.match.Mention}\n * for an example.\n *\n * By default, this method returns a single array with the match's\n * {@link #getType type} name, but may be overridden by subclasses.\n *\n * @return {String[]}\n */\n Match.prototype.getCssClassSuffixes = function () {\n return [this.getType()];\n };\n /**\n * Builds and returns an {@link Autolinker.HtmlTag} instance based on the\n * Match.\n *\n * This can be used to easily generate anchor tags from matches, and either\n * return their HTML string, or modify them before doing so.\n *\n * Example Usage:\n *\n * var tag = match.buildTag();\n * tag.addClass( 'cordova-link' );\n * tag.setAttr( 'target', '_system' );\n *\n * tag.toAnchorString(); // <a href=\"http://google.com\" class=\"cordova-link\" target=\"_system\">Google</a>\n *\n * Example Usage in {@link Autolinker#replaceFn}:\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n */\n Match.prototype.buildTag = function () {\n return this.tagBuilder.build(this);\n };\n return Match;\n }());\n\n /*! *****************************************************************************\n Copyright (c) Microsoft Corporation. All rights reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n this file except in compliance with the License. You may obtain a copy of the\n License at http://www.apache.org/licenses/LICENSE-2.0\n\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n MERCHANTABLITY OR NON-INFRINGEMENT.\n\n See the Apache Version 2.0 License for specific language governing permissions\n and limitations under the License.\n ***************************************************************************** */\n /* global Reflect, Promise */\n\n var extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n\n function __extends(d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n }\n\n var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n /**\n * @class Autolinker.match.Email\n * @extends Autolinker.match.Match\n *\n * Represents a Email match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\n var EmailMatch = /** @class */ (function (_super) {\n __extends(EmailMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function EmailMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} email (required)\n *\n * The email address that was matched.\n */\n _this.email = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.email = cfg.email;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n * For the case of EmailMatch, returns 'email'.\n *\n * @return {String}\n */\n EmailMatch.prototype.getType = function () {\n return 'email';\n };\n /**\n * Returns the email address that was matched.\n *\n * @return {String}\n */\n EmailMatch.prototype.getEmail = function () {\n return this.email;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n EmailMatch.prototype.getAnchorHref = function () {\n return 'mailto:' + this.email;\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n EmailMatch.prototype.getAnchorText = function () {\n return this.email;\n };\n return EmailMatch;\n }(Match));\n\n /**\n * @class Autolinker.match.Hashtag\n * @extends Autolinker.match.Match\n *\n * Represents a Hashtag match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\n var HashtagMatch = /** @class */ (function (_super) {\n __extends(HashtagMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function HashtagMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n * for available values.\n */\n _this.serviceName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} hashtag (required)\n *\n * The HashtagMatch that was matched, without the '#'.\n */\n _this.hashtag = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.serviceName = cfg.serviceName;\n _this.hashtag = cfg.hashtag;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n * For the case of HashtagMatch, returns 'hashtag'.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getType = function () {\n return 'hashtag';\n };\n /**\n * Returns the configured {@link #serviceName} to point the HashtagMatch to.\n * Ex: 'facebook', 'twitter'.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getServiceName = function () {\n return this.serviceName;\n };\n /**\n * Returns the matched hashtag, without the '#' character.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getHashtag = function () {\n return this.hashtag;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getAnchorHref = function () {\n var serviceName = this.serviceName, hashtag = this.hashtag;\n switch (serviceName) {\n case 'twitter':\n return 'https://twitter.com/hashtag/' + hashtag;\n case 'facebook':\n return 'https://www.facebook.com/hashtag/' + hashtag;\n case 'instagram':\n return 'https://instagram.com/explore/tags/' + hashtag;\n default: // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n throw new Error('Unknown service name to point hashtag to: ' + serviceName);\n }\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getAnchorText = function () {\n return '#' + this.hashtag;\n };\n return HashtagMatch;\n }(Match));\n\n /**\n * @class Autolinker.match.Mention\n * @extends Autolinker.match.Match\n *\n * Represents a Mention match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\n var MentionMatch = /** @class */ (function (_super) {\n __extends(MentionMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function MentionMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point mention matches to. See {@link Autolinker#mention}\n * for available values.\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} mention (required)\n *\n * The Mention that was matched, without the '@' character.\n */\n _this.mention = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.mention = cfg.mention;\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n * For the case of MentionMatch, returns 'mention'.\n *\n * @return {String}\n */\n MentionMatch.prototype.getType = function () {\n return 'mention';\n };\n /**\n * Returns the mention, without the '@' character.\n *\n * @return {String}\n */\n MentionMatch.prototype.getMention = function () {\n return this.mention;\n };\n /**\n * Returns the configured {@link #serviceName} to point the mention to.\n * Ex: 'instagram', 'twitter', 'soundcloud'.\n *\n * @return {String}\n */\n MentionMatch.prototype.getServiceName = function () {\n return this.serviceName;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n MentionMatch.prototype.getAnchorHref = function () {\n switch (this.serviceName) {\n case 'twitter':\n return 'https://twitter.com/' + this.mention;\n case 'instagram':\n return 'https://instagram.com/' + this.mention;\n case 'soundcloud':\n return 'https://soundcloud.com/' + this.mention;\n default: // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n throw new Error('Unknown service name to point mention to: ' + this.serviceName);\n }\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n MentionMatch.prototype.getAnchorText = function () {\n return '@' + this.mention;\n };\n /**\n * Returns the CSS class suffixes that should be used on a tag built with\n * the match. See {@link Autolinker.match.Match#getCssClassSuffixes} for\n * details.\n *\n * @return {String[]}\n */\n MentionMatch.prototype.getCssClassSuffixes = function () {\n var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n if (serviceName) {\n cssClassSuffixes.push(serviceName);\n }\n return cssClassSuffixes;\n };\n return MentionMatch;\n }(Match));\n\n /**\n * @class Autolinker.match.Phone\n * @extends Autolinker.match.Match\n *\n * Represents a Phone number match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\n var PhoneMatch = /** @class */ (function (_super) {\n __extends(PhoneMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function PhoneMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @protected\n * @property {String} number (required)\n *\n * The phone number that was matched, without any delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n */\n _this.number = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {Boolean} plusSign (required)\n *\n * `true` if the matched phone number started with a '+' sign. We'll include\n * it in the `tel:` URL if so, as this is needed for international numbers.\n *\n * Ex: '+1 (123) 456 7879'\n */\n _this.plusSign = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.number = cfg.number;\n _this.plusSign = cfg.plusSign;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n * For the case of PhoneMatch, returns 'phone'.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getType = function () {\n return 'phone';\n };\n /**\n * Returns the phone number that was matched as a string, without any\n * delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getPhoneNumber = function () {\n return this.number;\n };\n /**\n * Alias of {@link #getPhoneNumber}, returns the phone number that was\n * matched as a string, without any delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getNumber = function () {\n return this.getPhoneNumber();\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getAnchorHref = function () {\n return 'tel:' + (this.plusSign ? '+' : '') + this.number;\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getAnchorText = function () {\n return this.matchedText;\n };\n return PhoneMatch;\n }(Match));\n\n /**\n * @class Autolinker.match.Url\n * @extends Autolinker.match.Match\n *\n * Represents a Url match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\n var UrlMatch = /** @class */ (function (_super) {\n __extends(UrlMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function UrlMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} url (required)\n *\n * The url that was matched.\n */\n _this.url = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {\"scheme\"/\"www\"/\"tld\"} urlMatchType (required)\n *\n * The type of URL match that this class represents. This helps to determine\n * if the match was made in the original text with a prefixed scheme (ex:\n * 'http://www.google.com'), a prefixed 'www' (ex: 'www.google.com'), or\n * was matched by a known top-level domain (ex: 'google.com').\n */\n _this.urlMatchType = 'scheme'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} protocolUrlMatch (required)\n *\n * `true` if the URL is a match which already has a protocol (i.e.\n * 'http://'), `false` if the match was from a 'www' or known TLD match.\n */\n _this.protocolUrlMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} protocolRelativeMatch (required)\n *\n * `true` if the URL is a protocol-relative match. A protocol-relative match\n * is a URL that starts with '//', and will be either http:// or https://\n * based on the protocol that the site is loaded under.\n */\n _this.protocolRelativeMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object} stripPrefix (required)\n *\n * The Object form of {@link Autolinker#cfg-stripPrefix}.\n */\n _this.stripPrefix = { scheme: true, www: true }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} stripTrailingSlash (required)\n * @inheritdoc Autolinker#cfg-stripTrailingSlash\n */\n _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} decodePercentEncoding (required)\n * @inheritdoc Autolinker#cfg-decodePercentEncoding\n */\n _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @private\n * @property {RegExp} schemePrefixRegex\n *\n * A regular expression used to remove the 'http://' or 'https://' from\n * URLs.\n */\n _this.schemePrefixRegex = /^(https?:\\/\\/)?/i;\n /**\n * @private\n * @property {RegExp} wwwPrefixRegex\n *\n * A regular expression used to remove the 'www.' from URLs.\n */\n _this.wwwPrefixRegex = /^(https?:\\/\\/)?(www\\.)?/i;\n /**\n * @private\n * @property {RegExp} protocolRelativeRegex\n *\n * The regular expression used to remove the protocol-relative '//' from the {@link #url} string, for purposes\n * of {@link #getAnchorText}. A protocol-relative URL is, for example, \"//yahoo.com\"\n */\n _this.protocolRelativeRegex = /^\\/\\//;\n /**\n * @private\n * @property {Boolean} protocolPrepended\n *\n * Will be set to `true` if the 'http://' protocol has been prepended to the {@link #url} (because the\n * {@link #url} did not have a protocol)\n */\n _this.protocolPrepended = false;\n _this.urlMatchType = cfg.urlMatchType;\n _this.url = cfg.url;\n _this.protocolUrlMatch = cfg.protocolUrlMatch;\n _this.protocolRelativeMatch = cfg.protocolRelativeMatch;\n _this.stripPrefix = cfg.stripPrefix;\n _this.stripTrailingSlash = cfg.stripTrailingSlash;\n _this.decodePercentEncoding = cfg.decodePercentEncoding;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n * For the case of UrlMatch, returns 'url'.\n *\n * @return {String}\n */\n UrlMatch.prototype.getType = function () {\n return 'url';\n };\n /**\n * Returns a string name for the type of URL match that this class\n * represents.\n *\n * This helps to determine if the match was made in the original text with a\n * prefixed scheme (ex: 'http://www.google.com'), a prefixed 'www' (ex:\n * 'www.google.com'), or was matched by a known top-level domain (ex:\n * 'google.com').\n *\n * @return {\"scheme\"/\"www\"/\"tld\"}\n */\n UrlMatch.prototype.getUrlMatchType = function () {\n return this.urlMatchType;\n };\n /**\n * Returns the url that was matched, assuming the protocol to be 'http://' if the original\n * match was missing a protocol.\n *\n * @return {String}\n */\n UrlMatch.prototype.getUrl = function () {\n var url = this.url;\n // if the url string doesn't begin with a protocol, assume 'http://'\n if (!this.protocolRelativeMatch && !this.protocolUrlMatch && !this.protocolPrepended) {\n url = this.url = 'http://' + url;\n this.protocolPrepended = true;\n }\n return url;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n UrlMatch.prototype.getAnchorHref = function () {\n var url = this.getUrl();\n return url.replace(/&/g, '&'); // any &'s in the URL should be converted back to '&' if they were displayed as & in the source html\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n UrlMatch.prototype.getAnchorText = function () {\n var anchorText = this.getMatchedText();\n if (this.protocolRelativeMatch) {\n // Strip off any protocol-relative '//' from the anchor text\n anchorText = this.stripProtocolRelativePrefix(anchorText);\n }\n if (this.stripPrefix.scheme) {\n anchorText = this.stripSchemePrefix(anchorText);\n }\n if (this.stripPrefix.www) {\n anchorText = this.stripWwwPrefix(anchorText);\n }\n if (this.stripTrailingSlash) {\n anchorText = this.removeTrailingSlash(anchorText); // remove trailing slash, if there is one\n }\n if (this.decodePercentEncoding) {\n anchorText = this.removePercentEncoding(anchorText);\n }\n return anchorText;\n };\n // ---------------------------------------\n // Utility Functionality\n /**\n * Strips the scheme prefix (such as \"http://\" or \"https://\") from the given\n * `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n * which to strip off the url scheme.\n * @return {String} The `url`, with the scheme stripped.\n */\n UrlMatch.prototype.stripSchemePrefix = function (url) {\n return url.replace(this.schemePrefixRegex, '');\n };\n /**\n * Strips the 'www' prefix from the given `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n * which to strip off the 'www' if it exists.\n * @return {String} The `url`, with the 'www' stripped.\n */\n UrlMatch.prototype.stripWwwPrefix = function (url) {\n return url.replace(this.wwwPrefixRegex, '$1'); // leave any scheme ($1), it one exists\n };\n /**\n * Strips any protocol-relative '//' from the anchor text.\n *\n * @private\n * @param {String} text The text of the anchor that is being generated, for which to strip off the\n * protocol-relative prefix (such as stripping off \"//\")\n * @return {String} The `anchorText`, with the protocol-relative prefix stripped.\n */\n UrlMatch.prototype.stripProtocolRelativePrefix = function (text) {\n return text.replace(this.protocolRelativeRegex, '');\n };\n /**\n * Removes any trailing slash from the given `anchorText`, in preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being generated, for which to remove any trailing\n * slash ('/') that may exist.\n * @return {String} The `anchorText`, with the trailing slash removed.\n */\n UrlMatch.prototype.removeTrailingSlash = function (anchorText) {\n if (anchorText.charAt(anchorText.length - 1) === '/') {\n anchorText = anchorText.slice(0, -1);\n }\n return anchorText;\n };\n /**\n * Decodes percent-encoded characters from the given `anchorText`, in\n * preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being\n * generated, for which to decode any percent-encoded characters.\n * @return {String} The `anchorText`, with the percent-encoded characters\n * decoded.\n */\n UrlMatch.prototype.removePercentEncoding = function (anchorText) {\n // First, convert a few of the known % encodings to the corresponding\n // HTML entities that could accidentally be interpretted as special\n // HTML characters\n var preProcessedEntityAnchorText = anchorText\n .replace(/%22/gi, '"') // \" char\n .replace(/%26/gi, '&') // & char\n .replace(/%27/gi, ''') // ' char\n .replace(/%3C/gi, '<') // < char\n .replace(/%3E/gi, '>'); // > char\n try {\n // Now attempt to decode the rest of the anchor text\n return decodeURIComponent(preProcessedEntityAnchorText);\n }\n catch (e) { // Invalid % escape sequence in the anchor text\n return preProcessedEntityAnchorText;\n }\n };\n return UrlMatch;\n }(Match));\n\n /**\n * @abstract\n * @class Autolinker.matcher.Matcher\n *\n * An abstract class and interface for individual matchers to find matches in\n * an input string with linkified versions of them.\n *\n * Note that Matchers do not take HTML into account - they must be fed the text\n * nodes of any HTML string, which is handled by {@link Autolinker#parse}.\n */\n var Matcher = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Matcher\n * instance, specified in an Object (map).\n */\n function Matcher(cfg) {\n /**\n * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n *\n * Reference to the AnchorTagBuilder instance to use to generate HTML tags\n * for {@link Autolinker.match.Match Matches}.\n */\n this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n this.tagBuilder = cfg.tagBuilder;\n }\n return Matcher;\n }());\n\n /*\n * This file builds and stores a library of the common regular expressions used\n * by the Autolinker utility.\n *\n * Other regular expressions may exist ad-hoc, but these are generally the\n * regular expressions that are shared between source files.\n */\n /**\n * Regular expression to match upper and lowercase ASCII letters\n */\n var letterRe = /[A-Za-z]/;\n /**\n * Regular expression to match ASCII digits\n */\n var digitRe = /[0-9]/;\n /**\n * Regular expression to match whitespace\n */\n var whitespaceRe = /\\s/;\n /**\n * Regular expression to match quote characters\n */\n var quoteRe = /['\"]/;\n /**\n * Regular expression to match the range of ASCII control characters (0-31), and\n * the backspace char (127)\n */\n var controlCharsRe = /[\\x00-\\x1F\\x7F]/;\n /**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars in the unicode character set when placed in a\n * RegExp character class (`[]`). This includes all international alphabetic\n * characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}`\n * escape (\"all letters\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Letter'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\n var alphaCharsStr = /A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/\n .source; // see note in above variable description\n /**\n * The string form of a regular expression that would match all emoji characters\n * Source: https://www.regextester.com/106421\n */\n var emojiStr = /\\u00a9\\u00ae\\u2000-\\u3300\\ud83c\\ud000-\\udfff\\ud83d\\ud000-\\udfff\\ud83e\\ud000-\\udfff/\n .source;\n /**\n * The string form of a regular expression that would match all of the\n * combining mark characters in the unicode character set when placed in a\n * RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{M}`\n * escape (\"all marks\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Mark'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\n var marksStr = /\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/\n .source; // see note in above variable description\n /**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars, emoji, and combining marks in the unicode character set\n * when placed in a RegExp character class (`[]`). This includes all\n * international alphabetic characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}\\p{M}`\n * escapes and emoji characters.\n */\n var alphaCharsAndMarksStr = alphaCharsStr + emojiStr + marksStr;\n /**\n * The string form of a regular expression that would match all of the\n * decimal number chars in the unicode character set when placed in a RegExp\n * character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{Nd}`\n * escape (\"all decimal numbers\")\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Decimal_Number'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\n var decimalNumbersStr = /0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/\n .source; // see note in above variable description\n /**\n * The string form of a regular expression that would match all of the\n * letters and decimal number chars in the unicode character set when placed in\n * a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{Nd}]` escape (\"all letters and decimal numbers\")\n */\n var alphaNumericCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n /**\n * The string form of a regular expression that would match all of the\n * letters, combining marks, and decimal number chars in the unicode character\n * set when placed in a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{M}\\p{Nd}]` escape (\"all letters, combining marks, and decimal\n * numbers\")\n */\n var alphaNumericAndMarksCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n // Simplified IP regular expression\n var ipStr = '(?:[' + decimalNumbersStr + ']{1,3}\\\\.){3}[' + decimalNumbersStr + ']{1,3}';\n // Protected domain label which do not allow \"-\" character on the beginning and the end of a single label\n var domainLabelStr = '[' + alphaNumericAndMarksCharsStr + '](?:[' + alphaNumericAndMarksCharsStr + '\\\\-]{0,61}[' + alphaNumericAndMarksCharsStr + '])?';\n var getDomainLabelStr = function (group) {\n return '(?=(' + domainLabelStr + '))\\\\' + group;\n };\n /**\n * A function to match domain names of a URL or email address.\n * Ex: 'google', 'yahoo', 'some-other-company', etc.\n */\n var getDomainNameStr = function (group) {\n return '(?:' + getDomainLabelStr(group) + '(?:\\\\.' + getDomainLabelStr(group + 1) + '){0,126}|' + ipStr + ')';\n };\n /**\n * A regular expression that is simply the character class of the characters\n * that may be used in a domain name, minus the '-' or '.'\n */\n var domainNameCharRegex = new RegExp(\"[\" + alphaNumericAndMarksCharsStr + \"]\");\n\n // NOTE: THIS IS A GENERATED FILE\n // To update with the latest TLD list, run `npm run update-tld-regex` or `yarn update-tld-regex` (depending on which you have installed)\n var tldRegex = /(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/;\n\n // For debugging: search for other \"For debugging\" lines\n // import CliTable from 'cli-table';\n /**\n * @class Autolinker.matcher.Email\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find email matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\n var EmailMatcher = /** @class */ (function (_super) {\n __extends(EmailMatcher, _super);\n function EmailMatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Valid characters that can be used in the \"local\" part of an email address,\n * i.e. the \"name\" part of \"name@site.com\"\n */\n _this.localPartCharRegex = new RegExp(\"[\" + alphaNumericAndMarksCharsStr + \"!#$%&'*+/=?^_`{|}~-]\");\n /**\n * Stricter TLD regex which adds a beginning and end check to ensure\n * the string is a valid TLD\n */\n _this.strictTldRegex = new RegExp(\"^\" + tldRegex.source + \"$\");\n return _this;\n }\n /**\n * @inheritdoc\n */\n EmailMatcher.prototype.parseMatches = function (text) {\n var tagBuilder = this.tagBuilder, localPartCharRegex = this.localPartCharRegex, strictTldRegex = this.strictTldRegex, matches = [], len = text.length, noCurrentEmailMatch = new CurrentEmailMatch();\n // for matching a 'mailto:' prefix\n var mailtoTransitions = {\n 'm': 'a',\n 'a': 'i',\n 'i': 'l',\n 'l': 't',\n 't': 'o',\n 'o': ':',\n };\n var charIdx = 0, state = 0 /* NonEmailMatch */, currentEmailMatch = noCurrentEmailMatch;\n // For debugging: search for other \"For debugging\" lines\n // const table = new CliTable( {\n // \thead: [ 'charIdx', 'char', 'state', 'charIdx', 'currentEmailAddress.idx', 'hasDomainDot' ]\n // } );\n while (charIdx < len) {\n var char = text.charAt(charIdx);\n // For debugging: search for other \"For debugging\" lines\n // table.push(\n // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n // );\n switch (state) {\n case 0 /* NonEmailMatch */:\n stateNonEmailAddress(char);\n break;\n case 1 /* Mailto */:\n stateMailTo(text.charAt(charIdx - 1), char);\n break;\n case 2 /* LocalPart */:\n stateLocalPart(char);\n break;\n case 3 /* LocalPartDot */:\n stateLocalPartDot(char);\n break;\n case 4 /* AtSign */:\n stateAtSign(char);\n break;\n case 5 /* DomainChar */:\n stateDomainChar(char);\n break;\n case 6 /* DomainHyphen */:\n stateDomainHyphen(char);\n break;\n case 7 /* DomainDot */:\n stateDomainDot(char);\n break;\n default:\n throwUnhandledCaseError(state);\n }\n // For debugging: search for other \"For debugging\" lines\n // table.push(\n // \t[ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ]\n // );\n charIdx++;\n }\n // Capture any valid match at the end of the string\n captureMatchIfValidAndReset();\n // For debugging: search for other \"For debugging\" lines\n //console.log( '\\n' + table.toString() );\n return matches;\n // Handles the state when we're not in an email address\n function stateNonEmailAddress(char) {\n if (char === 'm') {\n beginEmailMatch(1 /* Mailto */);\n }\n else if (localPartCharRegex.test(char)) {\n beginEmailMatch();\n }\n }\n // Handles if we're reading a 'mailto:' prefix on the string\n function stateMailTo(prevChar, char) {\n if (prevChar === ':') {\n // We've reached the end of the 'mailto:' prefix\n if (localPartCharRegex.test(char)) {\n state = 2 /* LocalPart */;\n currentEmailMatch = new CurrentEmailMatch(__assign({}, currentEmailMatch, { hasMailtoPrefix: true }));\n }\n else {\n // we've matched 'mailto:' but didn't get anything meaningful\n // immediately afterwards (for example, we encountered a\n // space character, or an '@' character which formed 'mailto:@'\n resetToNonEmailMatchState();\n }\n }\n else if (mailtoTransitions[prevChar] === char) ;\n else if (localPartCharRegex.test(char)) {\n // We we're reading a prefix of 'mailto:', but encountered a\n // different character that didn't continue the prefix\n state = 2 /* LocalPart */;\n }\n else if (char === '.') {\n // We we're reading a prefix of 'mailto:', but encountered a\n // dot character\n state = 3 /* LocalPartDot */;\n }\n else if (char === '@') {\n // We we're reading a prefix of 'mailto:', but encountered a\n // an @ character\n state = 4 /* AtSign */;\n }\n else {\n // not an email address character, return to \"NonEmailAddress\" state\n resetToNonEmailMatchState();\n }\n }\n // Handles the state when we're currently in the \"local part\" of an\n // email address (as opposed to the \"domain part\")\n function stateLocalPart(char) {\n if (char === '.') {\n state = 3 /* LocalPartDot */;\n }\n else if (char === '@') {\n state = 4 /* AtSign */;\n }\n else if (localPartCharRegex.test(char)) ;\n else {\n // not an email address character, return to \"NonEmailAddress\" state\n resetToNonEmailMatchState();\n }\n }\n // Handles the state where we've read\n function stateLocalPartDot(char) {\n if (char === '.') {\n // We read a second '.' in a row, not a valid email address\n // local part\n resetToNonEmailMatchState();\n }\n else if (char === '@') {\n // We read the '@' character immediately after a dot ('.'), not\n // an email address\n resetToNonEmailMatchState();\n }\n else if (localPartCharRegex.test(char)) {\n state = 2 /* LocalPart */;\n }\n else {\n // Anything else, not an email address\n resetToNonEmailMatchState();\n }\n }\n function stateAtSign(char) {\n if (domainNameCharRegex.test(char)) {\n state = 5 /* DomainChar */;\n }\n else {\n // Anything else, not an email address\n resetToNonEmailMatchState();\n }\n }\n function stateDomainChar(char) {\n if (char === '.') {\n state = 7 /* DomainDot */;\n }\n else if (char === '-') {\n state = 6 /* DomainHyphen */;\n }\n else if (domainNameCharRegex.test(char)) ;\n else {\n // Anything else, we potentially matched if the criteria has\n // been met\n captureMatchIfValidAndReset();\n }\n }\n function stateDomainHyphen(char) {\n if (char === '-' || char === '.') {\n // Not valid to have two hyphens (\"--\") or hypen+dot (\"-.\")\n captureMatchIfValidAndReset();\n }\n else if (domainNameCharRegex.test(char)) {\n state = 5 /* DomainChar */;\n }\n else {\n // Anything else\n captureMatchIfValidAndReset();\n }\n }\n function stateDomainDot(char) {\n if (char === '.' || char === '-') {\n // not valid to have two dots (\"..\") or dot+hypen (\".-\")\n captureMatchIfValidAndReset();\n }\n else if (domainNameCharRegex.test(char)) {\n state = 5 /* DomainChar */;\n // After having read a '.' and then a valid domain character,\n // we now know that the domain part of the email is valid, and\n // we have found at least a partial EmailMatch (however, the\n // email address may have additional characters from this point)\n currentEmailMatch = new CurrentEmailMatch(__assign({}, currentEmailMatch, { hasDomainDot: true }));\n }\n else {\n // Anything else\n captureMatchIfValidAndReset();\n }\n }\n function beginEmailMatch(newState) {\n if (newState === void 0) { newState = 2 /* LocalPart */; }\n state = newState;\n currentEmailMatch = new CurrentEmailMatch({ idx: charIdx });\n }\n function resetToNonEmailMatchState() {\n state = 0 /* NonEmailMatch */;\n currentEmailMatch = noCurrentEmailMatch;\n }\n /*\n * Captures the current email address as an EmailMatch if it's valid,\n * and resets the state to read another email address.\n */\n function captureMatchIfValidAndReset() {\n if (currentEmailMatch.hasDomainDot) { // we need at least one dot in the domain to be considered a valid email address\n var matchedText = text.slice(currentEmailMatch.idx, charIdx);\n // If we read a '.' or '-' char that ended the email address\n // (valid domain name characters, but only valid email address\n // characters if they are followed by something else), strip\n // it off now\n if (/[-.]$/.test(matchedText)) {\n matchedText = matchedText.slice(0, -1);\n }\n var emailAddress = currentEmailMatch.hasMailtoPrefix\n ? matchedText.slice('mailto:'.length)\n : matchedText;\n // if the email address has a valid TLD, add it to the list of matches\n if (doesEmailHaveValidTld(emailAddress)) {\n matches.push(new EmailMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: currentEmailMatch.idx,\n email: emailAddress\n }));\n }\n }\n resetToNonEmailMatchState();\n /**\n * Determines if the given email address has a valid TLD or not\n * @param {string} emailAddress - email address\n * @return {Boolean} - true is email have valid TLD, false otherwise\n */\n function doesEmailHaveValidTld(emailAddress) {\n var emailAddressTld = emailAddress.split('.').pop() || '';\n var emailAddressNormalized = emailAddressTld.toLowerCase();\n var isValidTld = strictTldRegex.test(emailAddressNormalized);\n return isValidTld;\n }\n }\n };\n return EmailMatcher;\n }(Matcher));\n var CurrentEmailMatch = /** @class */ (function () {\n function CurrentEmailMatch(cfg) {\n if (cfg === void 0) { cfg = {}; }\n this.idx = cfg.idx !== undefined ? cfg.idx : -1;\n this.hasMailtoPrefix = !!cfg.hasMailtoPrefix;\n this.hasDomainDot = !!cfg.hasDomainDot;\n }\n return CurrentEmailMatch;\n }());\n\n /**\n * @private\n * @class Autolinker.matcher.UrlMatchValidator\n * @singleton\n *\n * Used by Autolinker to filter out false URL positives from the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n *\n * Due to the limitations of regular expressions (including the missing feature\n * of look-behinds in JS regular expressions), we cannot always determine the\n * validity of a given match. This class applies a bit of additional logic to\n * filter out any false positives that have been matched by the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n */\n var UrlMatchValidator = /** @class */ (function () {\n function UrlMatchValidator() {\n }\n /**\n * Determines if a given URL match found by the {@link Autolinker.matcher.Url UrlMatcher}\n * is valid. Will return `false` for:\n *\n * 1) URL matches which do not have at least have one period ('.') in the\n * domain name (effectively skipping over matches like \"abc:def\").\n * However, URL matches with a protocol will be allowed (ex: 'http://localhost')\n * 2) URL matches which do not have at least one word character in the\n * domain name (effectively skipping over matches like \"git:1.0\").\n * 3) A protocol-relative url match (a URL beginning with '//') whose\n * previous character is a word character (effectively skipping over\n * strings like \"abc//google.com\")\n *\n * Otherwise, returns `true`.\n *\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Boolean} `true` if the match given is valid and should be\n * processed, or `false` if the match is invalid and/or should just not be\n * processed.\n */\n UrlMatchValidator.isValid = function (urlMatch, protocolUrlMatch) {\n if ((protocolUrlMatch && !this.isValidUriScheme(protocolUrlMatch)) ||\n this.urlMatchDoesNotHaveProtocolOrDot(urlMatch, protocolUrlMatch) || // At least one period ('.') must exist in the URL match for us to consider it an actual URL, *unless* it was a full protocol match (like 'http://localhost')\n (this.urlMatchDoesNotHaveAtLeastOneWordChar(urlMatch, protocolUrlMatch) && // At least one letter character must exist in the domain name after a protocol match. Ex: skip over something like \"git:1.0\"\n !this.isValidIpAddress(urlMatch)) || // Except if it's an IP address\n this.containsMultipleDots(urlMatch)) {\n return false;\n }\n return true;\n };\n UrlMatchValidator.isValidIpAddress = function (uriSchemeMatch) {\n var newRegex = new RegExp(this.hasFullProtocolRegex.source + this.ipRegex.source);\n var uriScheme = uriSchemeMatch.match(newRegex);\n return uriScheme !== null;\n };\n UrlMatchValidator.containsMultipleDots = function (urlMatch) {\n var stringBeforeSlash = urlMatch;\n if (this.hasFullProtocolRegex.test(urlMatch)) {\n stringBeforeSlash = urlMatch.split('://')[1];\n }\n return stringBeforeSlash.split('/')[0].indexOf(\"..\") > -1;\n };\n /**\n * Determines if the URI scheme is a valid scheme to be autolinked. Returns\n * `false` if the scheme is 'javascript:' or 'vbscript:'\n *\n * @private\n * @param {String} uriSchemeMatch The match URL string for a full URI scheme\n * match. Ex: 'http://yahoo.com' or 'mailto:a@a.com'.\n * @return {Boolean} `true` if the scheme is a valid one, `false` otherwise.\n */\n UrlMatchValidator.isValidUriScheme = function (uriSchemeMatch) {\n var uriSchemeMatchArr = uriSchemeMatch.match(this.uriSchemeRegex), uriScheme = uriSchemeMatchArr && uriSchemeMatchArr[0].toLowerCase();\n return (uriScheme !== 'javascript:' && uriScheme !== 'vbscript:');\n };\n /**\n * Determines if a URL match does not have either:\n *\n * a) a full protocol (i.e. 'http://'), or\n * b) at least one dot ('.') in the domain name (for a non-full-protocol\n * match).\n *\n * Either situation is considered an invalid URL (ex: 'git:d' does not have\n * either the '://' part, or at least one dot in the domain name. If the\n * match was 'git:abc.com', we would consider this valid.)\n *\n * @private\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Boolean} `true` if the URL match does not have a full protocol,\n * or at least one dot ('.') in a non-full-protocol match.\n */\n UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot = function (urlMatch, protocolUrlMatch) {\n return (!!urlMatch && (!protocolUrlMatch || !this.hasFullProtocolRegex.test(protocolUrlMatch)) && urlMatch.indexOf('.') === -1);\n };\n /**\n * Determines if a URL match does not have at least one word character after\n * the protocol (i.e. in the domain name).\n *\n * At least one letter character must exist in the domain name after a\n * protocol match. Ex: skip over something like \"git:1.0\"\n *\n * @private\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to know whether or not we\n * have a protocol in the URL string, in order to check for a word\n * character after the protocol separator (':').\n * @return {Boolean} `true` if the URL match does not have at least one word\n * character in it after the protocol, `false` otherwise.\n */\n UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar = function (urlMatch, protocolUrlMatch) {\n if (urlMatch && protocolUrlMatch) {\n return !this.hasWordCharAfterProtocolRegex.test(urlMatch);\n }\n else {\n return false;\n }\n };\n /**\n * Regex to test for a full protocol, with the two trailing slashes. Ex: 'http://'\n *\n * @private\n * @property {RegExp} hasFullProtocolRegex\n */\n UrlMatchValidator.hasFullProtocolRegex = /^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//;\n /**\n * Regex to find the URI scheme, such as 'mailto:'.\n *\n * This is used to filter out 'javascript:' and 'vbscript:' schemes.\n *\n * @private\n * @property {RegExp} uriSchemeRegex\n */\n UrlMatchValidator.uriSchemeRegex = /^[A-Za-z][-.+A-Za-z0-9]*:/;\n /**\n * Regex to determine if at least one word char exists after the protocol (i.e. after the ':')\n *\n * @private\n * @property {RegExp} hasWordCharAfterProtocolRegex\n */\n UrlMatchValidator.hasWordCharAfterProtocolRegex = new RegExp(\":[^\\\\s]*?[\" + alphaCharsStr + \"]\");\n /**\n * Regex to determine if the string is a valid IP address\n *\n * @private\n * @property {RegExp} ipRegex\n */\n UrlMatchValidator.ipRegex = /[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/;\n return UrlMatchValidator;\n }());\n\n /**\n * @class Autolinker.matcher.Url\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find URL matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\n var UrlMatcher = /** @class */ (function (_super) {\n __extends(UrlMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function UrlMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {Object} stripPrefix (required)\n *\n * The Object form of {@link Autolinker#cfg-stripPrefix}.\n */\n _this.stripPrefix = { scheme: true, www: true }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} stripTrailingSlash (required)\n * @inheritdoc Autolinker#stripTrailingSlash\n */\n _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} decodePercentEncoding (required)\n * @inheritdoc Autolinker#decodePercentEncoding\n */\n _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {RegExp} matcherRegex\n *\n * The regular expression to match URLs with an optional scheme, port\n * number, path, query string, and hash anchor.\n *\n * Example matches:\n *\n * http://google.com\n * www.google.com\n * google.com/path/to/file?q1=1&q2=2#myAnchor\n *\n *\n * This regular expression will have the following capturing groups:\n *\n * 1. Group that matches a scheme-prefixed URL (i.e. 'http://google.com').\n * This is used to match scheme URLs with just a single word, such as\n * 'http://localhost', where we won't double check that the domain name\n * has at least one dot ('.') in it.\n * 2. Group that matches a 'www.' prefixed URL. This is only matched if the\n * 'www.' text was not prefixed by a scheme (i.e.: not prefixed by\n * 'http://', 'ftp:', etc.)\n * 3. A protocol-relative ('//') match for the case of a 'www.' prefixed\n * URL. Will be an empty string if it is not a protocol-relative match.\n * We need to know the character before the '//' in order to determine\n * if it is a valid match or the // was in a string we don't want to\n * auto-link.\n * 4. Group that matches a known TLD (top level domain), when a scheme\n * or 'www.'-prefixed domain is not matched.\n * 5. A protocol-relative ('//') match for the case of a known TLD prefixed\n * URL. Will be an empty string if it is not a protocol-relative match.\n * See #3 for more info.\n */\n _this.matcherRegex = (function () {\n var schemeRegex = /(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/, // match protocol, allow in format \"http://\" or \"mailto:\". However, do not match the first part of something like 'link:http://www.google.com' (i.e. don't match \"link:\"). Also, make sure we don't interpret 'google.com:8000' as if 'google.com' was a protocol here (i.e. ignore a trailing port number in this regex)\n wwwRegex = /(?:www\\.)/, // starting with 'www.'\n // Allow optional path, query string, and hash anchor, not ending in the following characters: \"?!:,.;\"\n // http://blog.codinghorror.com/the-problem-with-urls/\n urlSuffixRegex = new RegExp('[/?#](?:[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]?!:,.;\\u2713]*[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]\\u2713])?');\n return new RegExp([\n '(?:',\n '(',\n schemeRegex.source,\n getDomainNameStr(2),\n ')',\n '|',\n '(',\n '(//)?',\n wwwRegex.source,\n getDomainNameStr(6),\n ')',\n '|',\n '(',\n '(//)?',\n getDomainNameStr(10) + '\\\\.',\n tldRegex.source,\n '(?![-' + alphaNumericCharsStr + '])',\n ')',\n ')',\n '(?::[0-9]+)?',\n '(?:' + urlSuffixRegex.source + ')?' // match for path, query string, and/or hash anchor - optional\n ].join(\"\"), 'gi');\n })();\n /**\n * A regular expression to use to check the character before a protocol-relative\n * URL match. We don't want to match a protocol-relative URL if it is part\n * of another word.\n *\n * For example, we want to match something like \"Go to: //google.com\",\n * but we don't want to match something like \"abc//google.com\"\n *\n * This regular expression is used to test the character before the '//'.\n *\n * @protected\n * @type {RegExp} wordCharRegExp\n */\n _this.wordCharRegExp = new RegExp('[' + alphaNumericAndMarksCharsStr + ']');\n _this.stripPrefix = cfg.stripPrefix;\n _this.stripTrailingSlash = cfg.stripTrailingSlash;\n _this.decodePercentEncoding = cfg.decodePercentEncoding;\n return _this;\n }\n /**\n * @inheritdoc\n */\n UrlMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, stripPrefix = this.stripPrefix, stripTrailingSlash = this.stripTrailingSlash, decodePercentEncoding = this.decodePercentEncoding, tagBuilder = this.tagBuilder, matches = [], match;\n var _loop_1 = function () {\n var matchStr = match[0], schemeUrlMatch = match[1], wwwUrlMatch = match[4], wwwProtocolRelativeMatch = match[5],\n //tldUrlMatch = match[ 8 ], -- not needed at the moment\n tldProtocolRelativeMatch = match[9], offset = match.index, protocolRelativeMatch = wwwProtocolRelativeMatch || tldProtocolRelativeMatch, prevChar = text.charAt(offset - 1);\n if (!UrlMatchValidator.isValid(matchStr, schemeUrlMatch)) {\n return \"continue\";\n }\n // If the match is preceded by an '@' character, then it is either\n // an email address or a username. Skip these types of matches.\n if (offset > 0 && prevChar === '@') {\n return \"continue\";\n }\n // If it's a protocol-relative '//' match, but the character before the '//'\n // was a word character (i.e. a letter/number), then we found the '//' in the\n // middle of another word (such as \"asdf//asdf.com\"). In this case, skip the\n // match.\n if (offset > 0 && protocolRelativeMatch && this_1.wordCharRegExp.test(prevChar)) {\n return \"continue\";\n }\n // If the URL ends with a question mark, don't include the question\n // mark as part of the URL. We'll assume the question mark was the\n // end of a sentence, such as: \"Going to google.com?\"\n if (/\\?$/.test(matchStr)) {\n matchStr = matchStr.substr(0, matchStr.length - 1);\n }\n // Handle a closing parenthesis or square bracket at the end of the\n // match, and exclude it if there is not a matching open parenthesis\n // or square bracket in the match itself.\n if (this_1.matchHasUnbalancedClosingParen(matchStr)) {\n matchStr = matchStr.substr(0, matchStr.length - 1); // remove the trailing \")\"\n }\n else {\n // Handle an invalid character after the TLD\n var pos = this_1.matchHasInvalidCharAfterTld(matchStr, schemeUrlMatch);\n if (pos > -1) {\n matchStr = matchStr.substr(0, pos); // remove the trailing invalid chars\n }\n }\n // The autolinker accepts many characters in a url's scheme (like `fake://test.com`).\n // However, in cases where a URL is missing whitespace before an obvious link,\n // (for example: `nowhitespacehttp://www.test.com`), we only want the match to start\n // at the http:// part. We will check if the match contains a common scheme and then\n // shift the match to start from there.\n var foundCommonScheme = ['http://', 'https://'].find(function (commonScheme) { return !!schemeUrlMatch && schemeUrlMatch.indexOf(commonScheme) !== -1; });\n if (foundCommonScheme) {\n // If we found an overmatched URL, we want to find the index\n // of where the match should start and shift the match to\n // start from the beginning of the common scheme\n var indexOfSchemeStart = matchStr.indexOf(foundCommonScheme);\n matchStr = matchStr.substr(indexOfSchemeStart);\n schemeUrlMatch = schemeUrlMatch.substr(indexOfSchemeStart);\n offset = offset + indexOfSchemeStart;\n }\n var urlMatchType = schemeUrlMatch ? 'scheme' : (wwwUrlMatch ? 'www' : 'tld'), protocolUrlMatch = !!schemeUrlMatch;\n matches.push(new UrlMatch({\n tagBuilder: tagBuilder,\n matchedText: matchStr,\n offset: offset,\n urlMatchType: urlMatchType,\n url: matchStr,\n protocolUrlMatch: protocolUrlMatch,\n protocolRelativeMatch: !!protocolRelativeMatch,\n stripPrefix: stripPrefix,\n stripTrailingSlash: stripTrailingSlash,\n decodePercentEncoding: decodePercentEncoding,\n }));\n };\n var this_1 = this;\n while ((match = matcherRegex.exec(text)) !== null) {\n _loop_1();\n }\n return matches;\n };\n /**\n * Determines if a match found has an unmatched closing parenthesis or\n * square bracket. If so, the parenthesis or square bracket will be removed\n * from the match itself, and appended after the generated anchor tag.\n *\n * A match may have an extra closing parenthesis at the end of the match\n * because the regular expression must include parenthesis for URLs such as\n * \"wikipedia.com/something_(disambiguation)\", which should be auto-linked.\n *\n * However, an extra parenthesis *will* be included when the URL itself is\n * wrapped in parenthesis, such as in the case of:\n * \"(wikipedia.com/something_(disambiguation))\"\n * In this case, the last closing parenthesis should *not* be part of the\n * URL itself, and this method will return `true`.\n *\n * For square brackets in URLs such as in PHP arrays, the same behavior as\n * parenthesis discussed above should happen:\n * \"[http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3]\"\n * The closing square bracket should not be part of the URL itself, and this\n * method will return `true`.\n *\n * @protected\n * @param {String} matchStr The full match string from the {@link #matcherRegex}.\n * @return {Boolean} `true` if there is an unbalanced closing parenthesis or\n * square bracket at the end of the `matchStr`, `false` otherwise.\n */\n UrlMatcher.prototype.matchHasUnbalancedClosingParen = function (matchStr) {\n var endChar = matchStr.charAt(matchStr.length - 1);\n var startChar;\n if (endChar === ')') {\n startChar = '(';\n }\n else if (endChar === ']') {\n startChar = '[';\n }\n else {\n return false; // not a close parenthesis or square bracket\n }\n // Find if there are the same number of open braces as close braces in\n // the URL string, minus the last character (which we have already\n // determined to be either ')' or ']'\n var numOpenBraces = 0;\n for (var i = 0, len = matchStr.length - 1; i < len; i++) {\n var char = matchStr.charAt(i);\n if (char === startChar) {\n numOpenBraces++;\n }\n else if (char === endChar) {\n numOpenBraces = Math.max(numOpenBraces - 1, 0);\n }\n }\n // If the number of open braces matches the number of close braces in\n // the URL minus the last character, then the match has *unbalanced*\n // braces because of the last character. Example of unbalanced braces\n // from the regex match:\n // \"http://example.com?a[]=1]\"\n if (numOpenBraces === 0) {\n return true;\n }\n return false;\n };\n /**\n * Determine if there's an invalid character after the TLD in a URL. Valid\n * characters after TLD are ':/?#'. Exclude scheme matched URLs from this\n * check.\n *\n * @protected\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} schemeUrlMatch The match URL string for a scheme\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Number} the position where the invalid character was found. If\n * no such character was found, returns -1\n */\n UrlMatcher.prototype.matchHasInvalidCharAfterTld = function (urlMatch, schemeUrlMatch) {\n if (!urlMatch) {\n return -1;\n }\n var offset = 0;\n if (schemeUrlMatch) {\n offset = urlMatch.indexOf(':');\n urlMatch = urlMatch.slice(offset);\n }\n var re = new RegExp(\"^((.?\\/\\/)?[-.\" + alphaNumericAndMarksCharsStr + \"]*[-\" + alphaNumericAndMarksCharsStr + \"]\\\\.[-\" + alphaNumericAndMarksCharsStr + \"]+)\");\n var res = re.exec(urlMatch);\n if (res === null) {\n return -1;\n }\n offset += res[1].length;\n urlMatch = urlMatch.slice(res[1].length);\n if (/^[^-.A-Za-z0-9:\\/?#]/.test(urlMatch)) {\n return offset;\n }\n return -1;\n };\n return UrlMatcher;\n }(Matcher));\n\n /**\n * @class Autolinker.matcher.Hashtag\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find HashtagMatch matches in an input string.\n */\n var HashtagMatcher = /** @class */ (function (_super) {\n __extends(HashtagMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function HashtagMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n * for available values.\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * The regular expression to match Hashtags. Example match:\n *\n * #asdf\n *\n * @protected\n * @property {RegExp} matcherRegex\n */\n _this.matcherRegex = new RegExp(\"#[_\" + alphaNumericAndMarksCharsStr + \"]{1,139}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'); // lookahead used to make sure we don't match something above 139 characters\n /**\n * The regular expression to use to check the character before a username match to\n * make sure we didn't accidentally match an email address.\n *\n * For example, the string \"asdf@asdf.com\" should not match \"@asdf\" as a username.\n *\n * @protected\n * @property {RegExp} nonWordCharRegex\n */\n _this.nonWordCharRegex = new RegExp('[^' + alphaNumericAndMarksCharsStr + ']');\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * @inheritdoc\n */\n HashtagMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, nonWordCharRegex = this.nonWordCharRegex, serviceName = this.serviceName, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n var offset = match.index, prevChar = text.charAt(offset - 1);\n // If we found the match at the beginning of the string, or we found the match\n // and there is a whitespace char in front of it (meaning it is not a '#' char\n // in the middle of a word), then it is a hashtag match.\n if (offset === 0 || nonWordCharRegex.test(prevChar)) {\n var matchedText = match[0], hashtag = match[0].slice(1); // strip off the '#' character at the beginning\n matches.push(new HashtagMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: offset,\n serviceName: serviceName,\n hashtag: hashtag\n }));\n }\n }\n return matches;\n };\n return HashtagMatcher;\n }(Matcher));\n\n /**\n * @class Autolinker.matcher.Phone\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find Phone number matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more\n * details.\n */\n var PhoneMatcher = /** @class */ (function (_super) {\n __extends(PhoneMatcher, _super);\n function PhoneMatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * The regular expression to match Phone numbers. Example match:\n *\n * (123) 456-7890\n *\n * This regular expression has the following capturing groups:\n *\n * 1 or 2. The prefixed '+' sign, if there is one.\n *\n * @protected\n * @property {RegExp} matcherRegex\n */\n _this.matcherRegex = /(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/g;\n return _this;\n }\n // ex: (123) 456-7890, 123 456 7890, 123-456-7890, +18004441234,,;,10226420346#,\n // +1 (800) 444 1234, 10226420346#, 1-800-444-1234,1022,64,20346#\n /**\n * @inheritdoc\n */\n PhoneMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n // Remove non-numeric values from phone number string\n var matchedText = match[0], cleanNumber = matchedText.replace(/[^0-9,;#]/g, ''), // strip out non-digit characters exclude comma semicolon and #\n plusSign = !!(match[1] || match[2]), // match[ 1 ] or match[ 2 ] is the prefixed plus sign, if there is one\n before = match.index == 0 ? '' : text.substr(match.index - 1, 1), after = text.substr(match.index + matchedText.length, 1), contextClear = !before.match(/\\d/) && !after.match(/\\d/);\n if (this.testMatch(match[3]) && this.testMatch(matchedText) && contextClear) {\n matches.push(new PhoneMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: match.index,\n number: cleanNumber,\n plusSign: plusSign\n }));\n }\n }\n return matches;\n };\n PhoneMatcher.prototype.testMatch = function (text) {\n return /\\D/.test(text);\n };\n return PhoneMatcher;\n }(Matcher));\n\n /**\n * @class Autolinker.matcher.Mention\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find/replace username matches in an input string.\n */\n var MentionMatcher = /** @class */ (function (_super) {\n __extends(MentionMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function MentionMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {'twitter'/'instagram'/'soundcloud'} protected\n *\n * The name of service to link @mentions to.\n *\n * Valid values are: 'twitter', 'instagram', or 'soundcloud'\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * Hash of regular expression to match username handles. Example match:\n *\n * @asdf\n *\n * @private\n * @property {Object} matcherRegexes\n */\n _this.matcherRegexes = {\n 'twitter': new RegExp(\"@[_\" + alphaNumericAndMarksCharsStr + \"]{1,50}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'),\n 'instagram': new RegExp(\"@[_.\" + alphaNumericAndMarksCharsStr + \"]{1,30}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'),\n 'soundcloud': new RegExp(\"@[-_.\" + alphaNumericAndMarksCharsStr + \"]{1,50}(?![-_\" + alphaNumericAndMarksCharsStr + \"])\", 'g') // lookahead used to make sure we don't match something above 50 characters\n };\n /**\n * The regular expression to use to check the character before a username match to\n * make sure we didn't accidentally match an email address.\n *\n * For example, the string \"asdf@asdf.com\" should not match \"@asdf\" as a username.\n *\n * @private\n * @property {RegExp} nonWordCharRegex\n */\n _this.nonWordCharRegex = new RegExp('[^' + alphaNumericAndMarksCharsStr + ']');\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * @inheritdoc\n */\n MentionMatcher.prototype.parseMatches = function (text) {\n var serviceName = this.serviceName, matcherRegex = this.matcherRegexes[this.serviceName], nonWordCharRegex = this.nonWordCharRegex, tagBuilder = this.tagBuilder, matches = [], match;\n if (!matcherRegex) {\n return matches;\n }\n while ((match = matcherRegex.exec(text)) !== null) {\n var offset = match.index, prevChar = text.charAt(offset - 1);\n // If we found the match at the beginning of the string, or we found the match\n // and there is a whitespace char in front of it (meaning it is not an email\n // address), then it is a username match.\n if (offset === 0 || nonWordCharRegex.test(prevChar)) {\n var matchedText = match[0].replace(/\\.+$/g, ''), // strip off trailing .\n mention = matchedText.slice(1); // strip off the '@' character at the beginning\n matches.push(new MentionMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: offset,\n serviceName: serviceName,\n mention: mention\n }));\n }\n }\n return matches;\n };\n return MentionMatcher;\n }(Matcher));\n\n // For debugging: search for other \"For debugging\" lines\n // import CliTable from 'cli-table';\n /**\n * Parses an HTML string, calling the callbacks to notify of tags and text.\n *\n * ## History\n *\n * This file previously used a regular expression to find html tags in the input\n * text. Unfortunately, we ran into a bunch of catastrophic backtracking issues\n * with certain input text, causing Autolinker to either hang or just take a\n * really long time to parse the string.\n *\n * The current code is intended to be a O(n) algorithm that walks through\n * the string in one pass, and tries to be as cheap as possible. We don't need\n * to implement the full HTML spec, but rather simply determine where the string\n * looks like an HTML tag, and where it looks like text (so that we can autolink\n * that).\n *\n * This state machine parser is intended just to be a simple but performant\n * parser of HTML for the subset of requirements we have. We simply need to:\n *\n * 1. Determine where HTML tags are\n * 2. Determine the tag name (Autolinker specifically only cares about <a>,\n * <script>, and <style> tags, so as not to link any text within them)\n *\n * We don't need to:\n *\n * 1. Create a parse tree\n * 2. Auto-close tags with invalid markup\n * 3. etc.\n *\n * The other intention behind this is that we didn't want to add external\n * dependencies on the Autolinker utility which would increase its size. For\n * instance, adding htmlparser2 adds 125kb to the minified output file,\n * increasing its final size from 47kb to 172kb (at the time of writing). It\n * also doesn't work exactly correctly, treating the string \"<3 blah blah blah\"\n * as an HTML tag.\n *\n * Reference for HTML spec:\n *\n * https://www.w3.org/TR/html51/syntax.html#sec-tokenization\n *\n * @param {String} html The HTML to parse\n * @param {Object} callbacks\n * @param {Function} callbacks.onOpenTag Callback function to call when an open\n * tag is parsed. Called with the tagName as its argument.\n * @param {Function} callbacks.onCloseTag Callback function to call when a close\n * tag is parsed. Called with the tagName as its argument. If a self-closing\n * tag is found, `onCloseTag` is called immediately after `onOpenTag`.\n * @param {Function} callbacks.onText Callback function to call when text (i.e\n * not an HTML tag) is parsed. Called with the text (string) as its first\n * argument, and offset (number) into the string as its second.\n */\n function parseHtml(html, _a) {\n var onOpenTag = _a.onOpenTag, onCloseTag = _a.onCloseTag, onText = _a.onText, onComment = _a.onComment, onDoctype = _a.onDoctype;\n var noCurrentTag = new CurrentTag();\n var charIdx = 0, len = html.length, state = 0 /* Data */, currentDataIdx = 0, // where the current data start index is\n currentTag = noCurrentTag; // describes the current tag that is being read\n // For debugging: search for other \"For debugging\" lines\n // const table = new CliTable( {\n // \thead: [ 'charIdx', 'char', 'state', 'currentDataIdx', 'currentOpenTagIdx', 'tag.type' ]\n // } );\n while (charIdx < len) {\n var char = html.charAt(charIdx);\n // For debugging: search for other \"For debugging\" lines\n // ALSO: Temporarily remove the 'const' keyword on the State enum\n // table.push(\n // \t[ charIdx, char, State[ state ], currentDataIdx, currentTag.idx, currentTag.idx === -1 ? '' : currentTag.type ]\n // );\n switch (state) {\n case 0 /* Data */:\n stateData(char);\n break;\n case 1 /* TagOpen */:\n stateTagOpen(char);\n break;\n case 2 /* EndTagOpen */:\n stateEndTagOpen(char);\n break;\n case 3 /* TagName */:\n stateTagName(char);\n break;\n case 4 /* BeforeAttributeName */:\n stateBeforeAttributeName(char);\n break;\n case 5 /* AttributeName */:\n stateAttributeName(char);\n break;\n case 6 /* AfterAttributeName */:\n stateAfterAttributeName(char);\n break;\n case 7 /* BeforeAttributeValue */:\n stateBeforeAttributeValue(char);\n break;\n case 8 /* AttributeValueDoubleQuoted */:\n stateAttributeValueDoubleQuoted(char);\n break;\n case 9 /* AttributeValueSingleQuoted */:\n stateAttributeValueSingleQuoted(char);\n break;\n case 10 /* AttributeValueUnquoted */:\n stateAttributeValueUnquoted(char);\n break;\n case 11 /* AfterAttributeValueQuoted */:\n stateAfterAttributeValueQuoted(char);\n break;\n case 12 /* SelfClosingStartTag */:\n stateSelfClosingStartTag(char);\n break;\n case 13 /* MarkupDeclarationOpenState */:\n stateMarkupDeclarationOpen(char);\n break;\n case 14 /* CommentStart */:\n stateCommentStart(char);\n break;\n case 15 /* CommentStartDash */:\n stateCommentStartDash(char);\n break;\n case 16 /* Comment */:\n stateComment(char);\n break;\n case 17 /* CommentEndDash */:\n stateCommentEndDash(char);\n break;\n case 18 /* CommentEnd */:\n stateCommentEnd(char);\n break;\n case 19 /* CommentEndBang */:\n stateCommentEndBang(char);\n break;\n case 20 /* Doctype */:\n stateDoctype(char);\n break;\n default:\n throwUnhandledCaseError(state);\n }\n // For debugging: search for other \"For debugging\" lines\n // ALSO: Temporarily remove the 'const' keyword on the State enum\n // table.push(\n // \t[ charIdx, char, State[ state ], currentDataIdx, currentTag.idx, currentTag.idx === -1 ? '' : currentTag.type ]\n // );\n charIdx++;\n }\n if (currentDataIdx < charIdx) {\n emitText();\n }\n // For debugging: search for other \"For debugging\" lines\n // console.log( '\\n' + table.toString() );\n // Called when non-tags are being read (i.e. the text around HTML †ags)\n // https://www.w3.org/TR/html51/syntax.html#data-state\n function stateData(char) {\n if (char === '<') {\n startNewTag();\n }\n }\n // Called after a '<' is read from the Data state\n // https://www.w3.org/TR/html51/syntax.html#tag-open-state\n function stateTagOpen(char) {\n if (char === '!') {\n state = 13 /* MarkupDeclarationOpenState */;\n }\n else if (char === '/') {\n state = 2 /* EndTagOpen */;\n currentTag = new CurrentTag(__assign({}, currentTag, { isClosing: true }));\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else if (letterRe.test(char)) {\n // tag name start (and no '/' read)\n state = 3 /* TagName */;\n currentTag = new CurrentTag(__assign({}, currentTag, { isOpening: true }));\n }\n else {\n // Any other\n state = 0 /* Data */;\n currentTag = noCurrentTag;\n }\n }\n // After a '<x', '</x' sequence is read (where 'x' is a letter character),\n // this is to continue reading the tag name\n // https://www.w3.org/TR/html51/syntax.html#tag-name-state\n function stateTagName(char) {\n if (whitespaceRe.test(char)) {\n currentTag = new CurrentTag(__assign({}, currentTag, { name: captureTagName() }));\n state = 4 /* BeforeAttributeName */;\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else if (char === '/') {\n currentTag = new CurrentTag(__assign({}, currentTag, { name: captureTagName() }));\n state = 12 /* SelfClosingStartTag */;\n }\n else if (char === '>') {\n currentTag = new CurrentTag(__assign({}, currentTag, { name: captureTagName() }));\n emitTagAndPreviousTextNode(); // resets to Data state as well\n }\n else if (!letterRe.test(char) && !digitRe.test(char) && char !== ':') {\n // Anything else that does not form an html tag. Note: the colon\n // character is accepted for XML namespaced tags\n resetToDataState();\n }\n }\n // Called after the '/' is read from a '</' sequence\n // https://www.w3.org/TR/html51/syntax.html#end-tag-open-state\n function stateEndTagOpen(char) {\n if (char === '>') { // parse error. Encountered \"</>\". Skip it without treating as a tag\n resetToDataState();\n }\n else if (letterRe.test(char)) {\n state = 3 /* TagName */;\n }\n else {\n // some other non-tag-like character, don't treat this as a tag\n resetToDataState();\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#before-attribute-name-state\n function stateBeforeAttributeName(char) {\n if (whitespaceRe.test(char)) ;\n else if (char === '/') {\n state = 12 /* SelfClosingStartTag */;\n }\n else if (char === '>') {\n emitTagAndPreviousTextNode(); // resets to Data state as well\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else if (char === \"=\" || quoteRe.test(char) || controlCharsRe.test(char)) {\n // \"Parse error\" characters that, according to the spec, should be\n // appended to the attribute name, but we'll treat these characters\n // as not forming a real HTML tag\n resetToDataState();\n }\n else {\n // Any other char, start of a new attribute name\n state = 5 /* AttributeName */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#attribute-name-state\n function stateAttributeName(char) {\n if (whitespaceRe.test(char)) {\n state = 6 /* AfterAttributeName */;\n }\n else if (char === '/') {\n state = 12 /* SelfClosingStartTag */;\n }\n else if (char === '=') {\n state = 7 /* BeforeAttributeValue */;\n }\n else if (char === '>') {\n emitTagAndPreviousTextNode(); // resets to Data state as well\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else if (quoteRe.test(char)) {\n // \"Parse error\" characters that, according to the spec, should be\n // appended to the attribute name, but we'll treat these characters\n // as not forming a real HTML tag\n resetToDataState();\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#after-attribute-name-state\n function stateAfterAttributeName(char) {\n if (whitespaceRe.test(char)) ;\n else if (char === '/') {\n state = 12 /* SelfClosingStartTag */;\n }\n else if (char === '=') {\n state = 7 /* BeforeAttributeValue */;\n }\n else if (char === '>') {\n emitTagAndPreviousTextNode();\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else if (quoteRe.test(char)) {\n // \"Parse error\" characters that, according to the spec, should be\n // appended to the attribute name, but we'll treat these characters\n // as not forming a real HTML tag\n resetToDataState();\n }\n else {\n // Any other character, start a new attribute in the current tag\n state = 5 /* AttributeName */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#before-attribute-value-state\n function stateBeforeAttributeValue(char) {\n if (whitespaceRe.test(char)) ;\n else if (char === \"\\\"\") {\n state = 8 /* AttributeValueDoubleQuoted */;\n }\n else if (char === \"'\") {\n state = 9 /* AttributeValueSingleQuoted */;\n }\n else if (/[>=`]/.test(char)) {\n // Invalid chars after an '=' for an attribute value, don't count\n // the current tag as an HTML tag\n resetToDataState();\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else {\n // Any other character, consider it an unquoted attribute value\n state = 10 /* AttributeValueUnquoted */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#attribute-value-double-quoted-state\n function stateAttributeValueDoubleQuoted(char) {\n if (char === \"\\\"\") { // end the current double-quoted attribute\n state = 11 /* AfterAttributeValueQuoted */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#attribute-value-single-quoted-state\n function stateAttributeValueSingleQuoted(char) {\n if (char === \"'\") { // end the current single-quoted attribute\n state = 11 /* AfterAttributeValueQuoted */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#attribute-value-unquoted-state\n function stateAttributeValueUnquoted(char) {\n if (whitespaceRe.test(char)) {\n state = 4 /* BeforeAttributeName */;\n }\n else if (char === '>') {\n emitTagAndPreviousTextNode();\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#after-attribute-value-quoted-state\n function stateAfterAttributeValueQuoted(char) {\n if (whitespaceRe.test(char)) {\n state = 4 /* BeforeAttributeName */;\n }\n else if (char === '/') {\n state = 12 /* SelfClosingStartTag */;\n }\n else if (char === '>') {\n emitTagAndPreviousTextNode();\n }\n else if (char === '<') {\n // start of another tag (ignore the previous, incomplete one)\n startNewTag();\n }\n else {\n // Any other character, \"parse error\". Spec says to switch to the\n // BeforeAttributeState and re-consume the character, as it may be\n // the start of a new attribute name\n state = 4 /* BeforeAttributeName */;\n reconsumeCurrentCharacter();\n }\n }\n // A '/' has just been read in the current tag (presumably for '/>'), and\n // this handles the next character\n // https://www.w3.org/TR/html51/syntax.html#self-closing-start-tag-state\n function stateSelfClosingStartTag(char) {\n if (char === '>') {\n currentTag = new CurrentTag(__assign({}, currentTag, { isClosing: true }));\n emitTagAndPreviousTextNode(); // resets to Data state as well\n }\n else {\n state = 4 /* BeforeAttributeName */;\n }\n }\n // https://www.w3.org/TR/html51/syntax.html#markup-declaration-open-state\n // (HTML Comments or !DOCTYPE)\n function stateMarkupDeclarationOpen(char) {\n if (html.substr(charIdx, 2) === '--') { // html comment\n charIdx += 2; // \"consume\" characters\n currentTag = new CurrentTag(__assign({}, currentTag, { type: 'comment' }));\n state = 14 /* CommentStart */;\n }\n else if (html.substr(charIdx, 7).toUpperCase() === 'DOCTYPE') {\n charIdx += 7; // \"consume\" characters\n currentTag = new CurrentTag(__assign({}, currentTag, { type: 'doctype' }));\n state = 20 /* Doctype */;\n }\n else {\n // At this point, the spec specifies that the state machine should\n // enter the \"bogus comment\" state, in which case any character(s)\n // after the '<!' that were read should become an HTML comment up\n // until the first '>' that is read (or EOF). Instead, we'll assume\n // that a user just typed '<!' as part of text data\n resetToDataState();\n }\n }\n // Handles after the sequence '<!--' has been read\n // https://www.w3.org/TR/html51/syntax.html#comment-start-state\n function stateCommentStart(char) {\n if (char === '-') {\n // We've read the sequence '<!---' at this point (3 dashes)\n state = 15 /* CommentStartDash */;\n }\n else if (char === '>') {\n // At this point, we'll assume the comment wasn't a real comment\n // so we'll just emit it as data. We basically read the sequence\n // '<!-->'\n resetToDataState();\n }\n else {\n // Any other char, take it as part of the comment\n state = 16 /* Comment */;\n }\n }\n // We've read the sequence '<!---' at this point (3 dashes)\n // https://www.w3.org/TR/html51/syntax.html#comment-start-dash-state\n function stateCommentStartDash(char) {\n if (char === '-') {\n // We've read '<!----' (4 dashes) at this point\n state = 18 /* CommentEnd */;\n }\n else if (char === '>') {\n // At this point, we'll assume the comment wasn't a real comment\n // so we'll just emit it as data. We basically read the sequence\n // '<!--->'\n resetToDataState();\n }\n else {\n // Anything else, take it as a valid comment\n state = 16 /* Comment */;\n }\n }\n // Currently reading the comment's text (data)\n // https://www.w3.org/TR/html51/syntax.html#comment-state\n function stateComment(char) {\n if (char === '-') {\n state = 17 /* CommentEndDash */;\n }\n }\n // When we we've read the first dash inside a comment, it may signal the\n // end of the comment if we read another dash\n // https://www.w3.org/TR/html51/syntax.html#comment-end-dash-state\n function stateCommentEndDash(char) {\n if (char === '-') {\n state = 18 /* CommentEnd */;\n }\n else {\n // Wasn't a dash, must still be part of the comment\n state = 16 /* Comment */;\n }\n }\n // After we've read two dashes inside a comment, it may signal the end of\n // the comment if we then read a '>' char\n // https://www.w3.org/TR/html51/syntax.html#comment-end-state\n function stateCommentEnd(char) {\n if (char === '>') {\n emitTagAndPreviousTextNode();\n }\n else if (char === '!') {\n state = 19 /* CommentEndBang */;\n }\n else if (char === '-') ;\n else {\n // Anything else, switch back to the comment state since we didn't\n // read the full \"end comment\" sequence (i.e. '-->')\n state = 16 /* Comment */;\n }\n }\n // We've read the sequence '--!' inside of a comment\n // https://www.w3.org/TR/html51/syntax.html#comment-end-bang-state\n function stateCommentEndBang(char) {\n if (char === '-') {\n // We read the sequence '--!-' inside of a comment. The last dash\n // could signify that the comment is going to close\n state = 17 /* CommentEndDash */;\n }\n else if (char === '>') {\n // End of comment with the sequence '--!>'\n emitTagAndPreviousTextNode();\n }\n else {\n // The '--!' was not followed by a '>', continue reading the\n // comment's text\n state = 16 /* Comment */;\n }\n }\n /**\n * For DOCTYPES in particular, we don't care about the attributes. Just\n * advance to the '>' character and emit the tag, unless we find a '<'\n * character in which case we'll start a new tag.\n *\n * Example doctype tag:\n * <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n *\n * Actual spec: https://www.w3.org/TR/html51/syntax.html#doctype-state\n */\n function stateDoctype(char) {\n if (char === '>') {\n emitTagAndPreviousTextNode();\n }\n else if (char === '<') {\n startNewTag();\n }\n }\n /**\n * Resets the state back to the Data state, and removes the current tag.\n *\n * We'll generally run this function whenever a \"parse error\" is\n * encountered, where the current tag that is being read no longer looks\n * like a real HTML tag.\n */\n function resetToDataState() {\n state = 0 /* Data */;\n currentTag = noCurrentTag;\n }\n /**\n * Starts a new HTML tag at the current index, ignoring any previous HTML\n * tag that was being read.\n *\n * We'll generally run this function whenever we read a new '<' character,\n * including when we read a '<' character inside of an HTML tag that we were\n * previously reading.\n */\n function startNewTag() {\n state = 1 /* TagOpen */;\n currentTag = new CurrentTag({ idx: charIdx });\n }\n /**\n * Once we've decided to emit an open tag, that means we can also emit the\n * text node before it.\n */\n function emitTagAndPreviousTextNode() {\n var textBeforeTag = html.slice(currentDataIdx, currentTag.idx);\n if (textBeforeTag) {\n // the html tag was the first element in the html string, or two\n // tags next to each other, in which case we should not emit a text\n // node\n onText(textBeforeTag, currentDataIdx);\n }\n if (currentTag.type === 'comment') {\n onComment(currentTag.idx);\n }\n else if (currentTag.type === 'doctype') {\n onDoctype(currentTag.idx);\n }\n else {\n if (currentTag.isOpening) {\n onOpenTag(currentTag.name, currentTag.idx);\n }\n if (currentTag.isClosing) { // note: self-closing tags will emit both opening and closing\n onCloseTag(currentTag.name, currentTag.idx);\n }\n }\n // Since we just emitted a tag, reset to the data state for the next char\n resetToDataState();\n currentDataIdx = charIdx + 1;\n }\n function emitText() {\n var text = html.slice(currentDataIdx, charIdx);\n onText(text, currentDataIdx);\n currentDataIdx = charIdx + 1;\n }\n /**\n * Captures the tag name from the start of the tag to the current character\n * index, and converts it to lower case\n */\n function captureTagName() {\n var startIdx = currentTag.idx + (currentTag.isClosing ? 2 : 1);\n return html.slice(startIdx, charIdx).toLowerCase();\n }\n /**\n * Causes the main loop to re-consume the current character, such as after\n * encountering a \"parse error\" that changed state and needs to reconsume\n * the same character in that new state.\n */\n function reconsumeCurrentCharacter() {\n charIdx--;\n }\n }\n var CurrentTag = /** @class */ (function () {\n function CurrentTag(cfg) {\n if (cfg === void 0) { cfg = {}; }\n this.idx = cfg.idx !== undefined ? cfg.idx : -1;\n this.type = cfg.type || 'tag';\n this.name = cfg.name || '';\n this.isOpening = !!cfg.isOpening;\n this.isClosing = !!cfg.isClosing;\n }\n return CurrentTag;\n }());\n\n /**\n * @class Autolinker\n * @extends Object\n *\n * Utility class used to process a given string of text, and wrap the matches in\n * the appropriate anchor (<a>) tags to turn them into links.\n *\n * Any of the configuration options may be provided in an Object provided\n * to the Autolinker constructor, which will configure how the {@link #link link()}\n * method will process the links.\n *\n * For example:\n *\n * var autolinker = new Autolinker( {\n * newWindow : false,\n * truncate : 30\n * } );\n *\n * var html = autolinker.link( \"Joe went to www.yahoo.com\" );\n * // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * The {@link #static-link static link()} method may also be used to inline\n * options into a single call, which may be more convenient for one-off uses.\n * For example:\n *\n * var html = Autolinker.link( \"Joe went to www.yahoo.com\", {\n * newWindow : false,\n * truncate : 30\n * } );\n * // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * ## Custom Replacements of Links\n *\n * If the configuration options do not provide enough flexibility, a {@link #replaceFn}\n * may be provided to fully customize the output of Autolinker. This function is\n * called once for each URL/Email/Phone#/Hashtag/Mention (Twitter, Instagram, Soundcloud)\n * match that is encountered.\n *\n * For example:\n *\n * var input = \"...\"; // string with URLs, Email Addresses, Phone #s, Hashtags, and Mentions (Twitter, Instagram, Soundcloud)\n *\n * var linkedText = Autolinker.link( input, {\n * replaceFn : function( match ) {\n * console.log( \"href = \", match.getAnchorHref() );\n * console.log( \"text = \", match.getAnchorText() );\n *\n * switch( match.getType() ) {\n * case 'url' :\n * console.log( \"url: \", match.getUrl() );\n *\n * if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {\n * var tag = match.buildTag(); // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes\n * tag.setAttr( 'rel', 'nofollow' );\n * tag.addClass( 'external-link' );\n *\n * return tag;\n *\n * } else {\n * return true; // let Autolinker perform its normal anchor tag replacement\n * }\n *\n * case 'email' :\n * var email = match.getEmail();\n * console.log( \"email: \", email );\n *\n * if( email === \"my@own.address\" ) {\n * return false; // don't auto-link this particular email address; leave as-is\n * } else {\n * return; // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)\n * }\n *\n * case 'phone' :\n * var phoneNumber = match.getPhoneNumber();\n * console.log( phoneNumber );\n *\n * return '<a href=\"http://newplace.to.link.phone.numbers.to/\">' + phoneNumber + '</a>';\n *\n * case 'hashtag' :\n * var hashtag = match.getHashtag();\n * console.log( hashtag );\n *\n * return '<a href=\"http://newplace.to.link.hashtag.handles.to/\">' + hashtag + '</a>';\n *\n * case 'mention' :\n * var mention = match.getMention();\n * console.log( mention );\n *\n * return '<a href=\"http://newplace.to.link.mention.to/\">' + mention + '</a>';\n * }\n * }\n * } );\n *\n *\n * The function may return the following values:\n *\n * - `true` (Boolean): Allow Autolinker to replace the match as it normally\n * would.\n * - `false` (Boolean): Do not replace the current match at all - leave as-is.\n * - Any String: If a string is returned from the function, the string will be\n * used directly as the replacement HTML for the match.\n * - An {@link Autolinker.HtmlTag} instance, which can be used to build/modify\n * an HTML tag before writing out its HTML text.\n */\n var Autolinker = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} [cfg] The configuration options for the Autolinker instance,\n * specified in an Object (map).\n */\n function Autolinker(cfg) {\n if (cfg === void 0) { cfg = {}; }\n /**\n * The Autolinker version number exposed on the instance itself.\n *\n * Ex: 0.25.1\n */\n this.version = Autolinker.version;\n /**\n * @cfg {Boolean/Object} [urls]\n *\n * `true` if URLs should be automatically linked, `false` if they should not\n * be. Defaults to `true`.\n *\n * Examples:\n *\n * urls: true\n *\n * // or\n *\n * urls: {\n * schemeMatches : true,\n * wwwMatches : true,\n * tldMatches : true\n * }\n *\n * As shown above, this option also accepts an Object form with 3 properties\n * to allow for more customization of what exactly gets linked. All default\n * to `true`:\n *\n * @cfg {Boolean} [urls.schemeMatches] `true` to match URLs found prefixed\n * with a scheme, i.e. `http://google.com`, or `other+scheme://google.com`,\n * `false` to prevent these types of matches.\n * @cfg {Boolean} [urls.wwwMatches] `true` to match urls found prefixed with\n * `'www.'`, i.e. `www.google.com`. `false` to prevent these types of\n * matches. Note that if the URL had a prefixed scheme, and\n * `schemeMatches` is true, it will still be linked.\n * @cfg {Boolean} [urls.tldMatches] `true` to match URLs with known top\n * level domains (.com, .net, etc.) that are not prefixed with a scheme or\n * `'www.'`. This option attempts to match anything that looks like a URL\n * in the given text. Ex: `google.com`, `asdf.org/?page=1`, etc. `false`\n * to prevent these types of matches.\n */\n this.urls = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} [email=true]\n *\n * `true` if email addresses should be automatically linked, `false` if they\n * should not be.\n */\n this.email = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} [phone=true]\n *\n * `true` if Phone numbers (\"(555)555-5555\") should be automatically linked,\n * `false` if they should not be.\n */\n this.phone = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean/String} [hashtag=false]\n *\n * A string for the service name to have hashtags (ex: \"#myHashtag\")\n * auto-linked to. The currently-supported values are:\n *\n * - 'twitter'\n * - 'facebook'\n * - 'instagram'\n *\n * Pass `false` to skip auto-linking of hashtags.\n */\n this.hashtag = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String/Boolean} [mention=false]\n *\n * A string for the service name to have mentions (ex: \"@myuser\")\n * auto-linked to. The currently supported values are:\n *\n * - 'twitter'\n * - 'instagram'\n * - 'soundcloud'\n *\n * Defaults to `false` to skip auto-linking of mentions.\n */\n this.mention = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} [newWindow=true]\n *\n * `true` if the links should open in a new window, `false` otherwise.\n */\n this.newWindow = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean/Object} [stripPrefix=true]\n *\n * `true` if 'http://' (or 'https://') and/or the 'www.' should be stripped\n * from the beginning of URL links' text, `false` otherwise. Defaults to\n * `true`.\n *\n * Examples:\n *\n * stripPrefix: true\n *\n * // or\n *\n * stripPrefix: {\n * scheme : true,\n * www : true\n * }\n *\n * As shown above, this option also accepts an Object form with 2 properties\n * to allow for more customization of what exactly is prevented from being\n * displayed. Both default to `true`:\n *\n * @cfg {Boolean} [stripPrefix.scheme] `true` to prevent the scheme part of\n * a URL match from being displayed to the user. Example:\n * `'http://google.com'` will be displayed as `'google.com'`. `false` to\n * not strip the scheme. NOTE: Only an `'http://'` or `'https://'` scheme\n * will be removed, so as not to remove a potentially dangerous scheme\n * (such as `'file://'` or `'javascript:'`)\n * @cfg {Boolean} [stripPrefix.www] www (Boolean): `true` to prevent the\n * `'www.'` part of a URL match from being displayed to the user. Ex:\n * `'www.google.com'` will be displayed as `'google.com'`. `false` to not\n * strip the `'www'`.\n */\n this.stripPrefix = { scheme: true, www: true }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} [stripTrailingSlash=true]\n *\n * `true` to remove the trailing slash from URL matches, `false` to keep\n * the trailing slash.\n *\n * Example when `true`: `http://google.com/` will be displayed as\n * `http://google.com`.\n */\n this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} [decodePercentEncoding=true]\n *\n * `true` to decode percent-encoded characters in URL matches, `false` to keep\n * the percent-encoded characters.\n *\n * Example when `true`: `https://en.wikipedia.org/wiki/San_Jos%C3%A9` will\n * be displayed as `https://en.wikipedia.org/wiki/San_José`.\n */\n this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Number/Object} [truncate=0]\n *\n * ## Number Form\n *\n * A number for how many characters matched text should be truncated to\n * inside the text of a link. If the matched text is over this number of\n * characters, it will be truncated to this length by adding a two period\n * ellipsis ('..') to the end of the string.\n *\n * For example: A url like 'http://www.yahoo.com/some/long/path/to/a/file'\n * truncated to 25 characters might look something like this:\n * 'yahoo.com/some/long/pat..'\n *\n * Example Usage:\n *\n * truncate: 25\n *\n *\n * Defaults to `0` for \"no truncation.\"\n *\n *\n * ## Object Form\n *\n * An Object may also be provided with two properties: `length` (Number) and\n * `location` (String). `location` may be one of the following: 'end'\n * (default), 'middle', or 'smart'.\n *\n * Example Usage:\n *\n * truncate: { length: 25, location: 'middle' }\n *\n * @cfg {Number} [truncate.length=0] How many characters to allow before\n * truncation will occur. Defaults to `0` for \"no truncation.\"\n * @cfg {\"end\"/\"middle\"/\"smart\"} [truncate.location=\"end\"]\n *\n * - 'end' (default): will truncate up to the number of characters, and then\n * add an ellipsis at the end. Ex: 'yahoo.com/some/long/pat..'\n * - 'middle': will truncate and add the ellipsis in the middle. Ex:\n * 'yahoo.com/s..th/to/a/file'\n * - 'smart': for URLs where the algorithm attempts to strip out unnecessary\n * parts first (such as the 'www.', then URL scheme, hash, etc.),\n * attempting to make the URL human-readable before looking for a good\n * point to insert the ellipsis if it is still too long. Ex:\n * 'yahoo.com/some..to/a/file'. For more details, see\n * {@link Autolinker.truncate.TruncateSmart}.\n */\n this.truncate = { length: 0, location: 'end' }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} className\n *\n * A CSS class name to add to the generated links. This class will be added\n * to all links, as well as this class plus match suffixes for styling\n * url/email/phone/hashtag/mention links differently.\n *\n * For example, if this config is provided as \"myLink\", then:\n *\n * - URL links will have the CSS classes: \"myLink myLink-url\"\n * - Email links will have the CSS classes: \"myLink myLink-email\", and\n * - Phone links will have the CSS classes: \"myLink myLink-phone\"\n * - Hashtag links will have the CSS classes: \"myLink myLink-hashtag\"\n * - Mention links will have the CSS classes: \"myLink myLink-mention myLink-[type]\"\n * where [type] is either \"instagram\", \"twitter\" or \"soundcloud\"\n */\n this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Function} replaceFn\n *\n * A function to individually process each match found in the input string.\n *\n * See the class's description for usage.\n *\n * The `replaceFn` can be called with a different context object (`this`\n * reference) using the {@link #context} cfg.\n *\n * This function is called with the following parameter:\n *\n * @cfg {Autolinker.match.Match} replaceFn.match The Match instance which\n * can be used to retrieve information about the match that the `replaceFn`\n * is currently processing. See {@link Autolinker.match.Match} subclasses\n * for details.\n */\n this.replaceFn = null; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object} context\n *\n * The context object (`this` reference) to call the `replaceFn` with.\n *\n * Defaults to this Autolinker instance.\n */\n this.context = undefined; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @private\n * @property {Autolinker.matcher.Matcher[]} matchers\n *\n * The {@link Autolinker.matcher.Matcher} instances for this Autolinker\n * instance.\n *\n * This is lazily created in {@link #getMatchers}.\n */\n this.matchers = null;\n /**\n * @private\n * @property {Autolinker.AnchorTagBuilder} tagBuilder\n *\n * The AnchorTagBuilder instance used to build match replacement anchor tags.\n * Note: this is lazily instantiated in the {@link #getTagBuilder} method.\n */\n this.tagBuilder = null;\n // Note: when `this.something` is used in the rhs of these assignments,\n // it refers to the default values set above the constructor\n this.urls = this.normalizeUrlsCfg(cfg.urls);\n this.email = typeof cfg.email === 'boolean' ? cfg.email : this.email;\n this.phone = typeof cfg.phone === 'boolean' ? cfg.phone : this.phone;\n this.hashtag = cfg.hashtag || this.hashtag;\n this.mention = cfg.mention || this.mention;\n this.newWindow = typeof cfg.newWindow === 'boolean' ? cfg.newWindow : this.newWindow;\n this.stripPrefix = this.normalizeStripPrefixCfg(cfg.stripPrefix);\n this.stripTrailingSlash = typeof cfg.stripTrailingSlash === 'boolean' ? cfg.stripTrailingSlash : this.stripTrailingSlash;\n this.decodePercentEncoding = typeof cfg.decodePercentEncoding === 'boolean' ? cfg.decodePercentEncoding : this.decodePercentEncoding;\n // Validate the value of the `mention` cfg\n var mention = this.mention;\n if (mention !== false && mention !== 'twitter' && mention !== 'instagram' && mention !== 'soundcloud') {\n throw new Error(\"invalid `mention` cfg - see docs\");\n }\n // Validate the value of the `hashtag` cfg\n var hashtag = this.hashtag;\n if (hashtag !== false && hashtag !== 'twitter' && hashtag !== 'facebook' && hashtag !== 'instagram') {\n throw new Error(\"invalid `hashtag` cfg - see docs\");\n }\n this.truncate = this.normalizeTruncateCfg(cfg.truncate);\n this.className = cfg.className || this.className;\n this.replaceFn = cfg.replaceFn || this.replaceFn;\n this.context = cfg.context || this;\n }\n /**\n * Automatically links URLs, Email addresses, Phone Numbers, Twitter handles,\n * Hashtags, and Mentions found in the given chunk of HTML. Does not link URLs\n * found within HTML tags.\n *\n * For instance, if given the text: `You should go to http://www.yahoo.com`,\n * then the result will be `You should go to <a href=\"http://www.yahoo.com\">http://www.yahoo.com</a>`\n *\n * Example:\n *\n * var linkedText = Autolinker.link( \"Go to google.com\", { newWindow: false } );\n * // Produces: \"Go to <a href=\"http://google.com\">google.com</a>\"\n *\n * @static\n * @param {String} textOrHtml The HTML or text to find matches within (depending\n * on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #mention},\n * {@link #hashtag}, and {@link #mention} options are enabled).\n * @param {Object} [options] Any of the configuration options for the Autolinker\n * class, specified in an Object (map). See the class description for an\n * example call.\n * @return {String} The HTML text, with matches automatically linked.\n */\n Autolinker.link = function (textOrHtml, options) {\n var autolinker = new Autolinker(options);\n return autolinker.link(textOrHtml);\n };\n /**\n * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n * numbers, username handles, and hashtags (depending on the configuration\n * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n * objects describing those matches (without making any replacements).\n *\n * Note that if parsing multiple pieces of text, it is slightly more efficient\n * to create an Autolinker instance, and use the instance-level {@link #parse}\n * method.\n *\n * Example:\n *\n * var matches = Autolinker.parse( \"Hello google.com, I am asdf@asdf.com\", {\n * urls: true,\n * email: true\n * } );\n *\n * console.log( matches.length ); // 2\n * console.log( matches[ 0 ].getType() ); // 'url'\n * console.log( matches[ 0 ].getUrl() ); // 'google.com'\n * console.log( matches[ 1 ].getType() ); // 'email'\n * console.log( matches[ 1 ].getEmail() ); // 'asdf@asdf.com'\n *\n * @static\n * @param {String} textOrHtml The HTML or text to find matches within\n * (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n * {@link #hashtag}, and {@link #mention} options are enabled).\n * @param {Object} [options] Any of the configuration options for the Autolinker\n * class, specified in an Object (map). See the class description for an\n * example call.\n * @return {Autolinker.match.Match[]} The array of Matches found in the\n * given input `textOrHtml`.\n */\n Autolinker.parse = function (textOrHtml, options) {\n var autolinker = new Autolinker(options);\n return autolinker.parse(textOrHtml);\n };\n /**\n * Normalizes the {@link #urls} config into an Object with 3 properties:\n * `schemeMatches`, `wwwMatches`, and `tldMatches`, all Booleans.\n *\n * See {@link #urls} config for details.\n *\n * @private\n * @param {Boolean/Object} urls\n * @return {Object}\n */\n Autolinker.prototype.normalizeUrlsCfg = function (urls) {\n if (urls == null)\n urls = true; // default to `true`\n if (typeof urls === 'boolean') {\n return { schemeMatches: urls, wwwMatches: urls, tldMatches: urls };\n }\n else { // object form\n return {\n schemeMatches: typeof urls.schemeMatches === 'boolean' ? urls.schemeMatches : true,\n wwwMatches: typeof urls.wwwMatches === 'boolean' ? urls.wwwMatches : true,\n tldMatches: typeof urls.tldMatches === 'boolean' ? urls.tldMatches : true\n };\n }\n };\n /**\n * Normalizes the {@link #stripPrefix} config into an Object with 2\n * properties: `scheme`, and `www` - both Booleans.\n *\n * See {@link #stripPrefix} config for details.\n *\n * @private\n * @param {Boolean/Object} stripPrefix\n * @return {Object}\n */\n Autolinker.prototype.normalizeStripPrefixCfg = function (stripPrefix) {\n if (stripPrefix == null)\n stripPrefix = true; // default to `true`\n if (typeof stripPrefix === 'boolean') {\n return { scheme: stripPrefix, www: stripPrefix };\n }\n else { // object form\n return {\n scheme: typeof stripPrefix.scheme === 'boolean' ? stripPrefix.scheme : true,\n www: typeof stripPrefix.www === 'boolean' ? stripPrefix.www : true\n };\n }\n };\n /**\n * Normalizes the {@link #truncate} config into an Object with 2 properties:\n * `length` (Number), and `location` (String).\n *\n * See {@link #truncate} config for details.\n *\n * @private\n * @param {Number/Object} truncate\n * @return {Object}\n */\n Autolinker.prototype.normalizeTruncateCfg = function (truncate) {\n if (typeof truncate === 'number') {\n return { length: truncate, location: 'end' };\n }\n else { // object, or undefined/null\n return defaults(truncate || {}, {\n length: Number.POSITIVE_INFINITY,\n location: 'end'\n });\n }\n };\n /**\n * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n * numbers, username handles, and hashtags (depending on the configuration\n * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n * objects describing those matches (without making any replacements).\n *\n * This method is used by the {@link #link} method, but can also be used to\n * simply do parsing of the input in order to discover what kinds of links\n * there are and how many.\n *\n * Example usage:\n *\n * var autolinker = new Autolinker( {\n * urls: true,\n * email: true\n * } );\n *\n * var matches = autolinker.parse( \"Hello google.com, I am asdf@asdf.com\" );\n *\n * console.log( matches.length ); // 2\n * console.log( matches[ 0 ].getType() ); // 'url'\n * console.log( matches[ 0 ].getUrl() ); // 'google.com'\n * console.log( matches[ 1 ].getType() ); // 'email'\n * console.log( matches[ 1 ].getEmail() ); // 'asdf@asdf.com'\n *\n * @param {String} textOrHtml The HTML or text to find matches within\n * (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n * {@link #hashtag}, and {@link #mention} options are enabled).\n * @return {Autolinker.match.Match[]} The array of Matches found in the\n * given input `textOrHtml`.\n */\n Autolinker.prototype.parse = function (textOrHtml) {\n var _this = this;\n var skipTagNames = ['a', 'style', 'script'], skipTagsStackCount = 0, // used to only Autolink text outside of anchor/script/style tags. We don't want to autolink something that is already linked inside of an <a> tag, for instance\n matches = [];\n // Find all matches within the `textOrHtml` (but not matches that are\n // already nested within <a>, <style> and <script> tags)\n parseHtml(textOrHtml, {\n onOpenTag: function (tagName) {\n if (skipTagNames.indexOf(tagName) >= 0) {\n skipTagsStackCount++;\n }\n },\n onText: function (text, offset) {\n // Only process text nodes that are not within an <a>, <style> or <script> tag\n if (skipTagsStackCount === 0) {\n // \"Walk around\" common HTML entities. An ' ' (for example)\n // could be at the end of a URL, but we don't want to\n // include the trailing '&' in the URL. See issue #76\n // TODO: Handle HTML entities separately in parseHtml() and\n // don't emit them as \"text\" except for & entities\n var htmlCharacterEntitiesRegex = /( | |<|<|>|>|"|"|')/gi;\n var textSplit = splitAndCapture(text, htmlCharacterEntitiesRegex);\n var currentOffset_1 = offset;\n textSplit.forEach(function (splitText, i) {\n // even number matches are text, odd numbers are html entities\n if (i % 2 === 0) {\n var textNodeMatches = _this.parseText(splitText, currentOffset_1);\n matches.push.apply(matches, textNodeMatches);\n }\n currentOffset_1 += splitText.length;\n });\n }\n },\n onCloseTag: function (tagName) {\n if (skipTagNames.indexOf(tagName) >= 0) {\n skipTagsStackCount = Math.max(skipTagsStackCount - 1, 0); // attempt to handle extraneous </a> tags by making sure the stack count never goes below 0\n }\n },\n onComment: function (offset) { },\n onDoctype: function (offset) { },\n });\n // After we have found all matches, remove subsequent matches that\n // overlap with a previous match. This can happen for instance with URLs,\n // where the url 'google.com/#link' would match '#link' as a hashtag.\n matches = this.compactMatches(matches);\n // And finally, remove matches for match types that have been turned\n // off. We needed to have all match types turned on initially so that\n // things like hashtags could be filtered out if they were really just\n // part of a URL match (for instance, as a named anchor).\n matches = this.removeUnwantedMatches(matches);\n return matches;\n };\n /**\n * After we have found all matches, we need to remove matches that overlap\n * with a previous match. This can happen for instance with URLs, where the\n * url 'google.com/#link' would match '#link' as a hashtag. Because the\n * '#link' part is contained in a larger match that comes before the HashTag\n * match, we'll remove the HashTag match.\n *\n * @private\n * @param {Autolinker.match.Match[]} matches\n * @return {Autolinker.match.Match[]}\n */\n Autolinker.prototype.compactMatches = function (matches) {\n // First, the matches need to be sorted in order of offset\n matches.sort(function (a, b) { return a.getOffset() - b.getOffset(); });\n for (var i = 0; i < matches.length - 1; i++) {\n var match = matches[i], offset = match.getOffset(), matchedTextLength = match.getMatchedText().length, endIdx = offset + matchedTextLength;\n if (i + 1 < matches.length) {\n // Remove subsequent matches that equal offset with current match\n if (matches[i + 1].getOffset() === offset) {\n var removeIdx = matches[i + 1].getMatchedText().length > matchedTextLength ? i : i + 1;\n matches.splice(removeIdx, 1);\n continue;\n }\n // Remove subsequent matches that overlap with the current match\n if (matches[i + 1].getOffset() < endIdx) {\n matches.splice(i + 1, 1);\n }\n }\n }\n return matches;\n };\n /**\n * Removes matches for matchers that were turned off in the options. For\n * example, if {@link #hashtag hashtags} were not to be matched, we'll\n * remove them from the `matches` array here.\n *\n * Note: we *must* use all Matchers on the input string, and then filter\n * them out later. For example, if the options were `{ url: false, hashtag: true }`,\n * we wouldn't want to match the text '#link' as a HashTag inside of the text\n * 'google.com/#link'. The way the algorithm works is that we match the full\n * URL first (which prevents the accidental HashTag match), and then we'll\n * simply throw away the URL match.\n *\n * @private\n * @param {Autolinker.match.Match[]} matches The array of matches to remove\n * the unwanted matches from. Note: this array is mutated for the\n * removals.\n * @return {Autolinker.match.Match[]} The mutated input `matches` array.\n */\n Autolinker.prototype.removeUnwantedMatches = function (matches) {\n if (!this.hashtag)\n remove(matches, function (match) { return match.getType() === 'hashtag'; });\n if (!this.email)\n remove(matches, function (match) { return match.getType() === 'email'; });\n if (!this.phone)\n remove(matches, function (match) { return match.getType() === 'phone'; });\n if (!this.mention)\n remove(matches, function (match) { return match.getType() === 'mention'; });\n if (!this.urls.schemeMatches) {\n remove(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'scheme'; });\n }\n if (!this.urls.wwwMatches) {\n remove(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'www'; });\n }\n if (!this.urls.tldMatches) {\n remove(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'tld'; });\n }\n return matches;\n };\n /**\n * Parses the input `text` looking for URLs, email addresses, phone\n * numbers, username handles, and hashtags (depending on the configuration\n * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n * objects describing those matches.\n *\n * This method processes a **non-HTML string**, and is used to parse and\n * match within the text nodes of an HTML string. This method is used\n * internally by {@link #parse}.\n *\n * @private\n * @param {String} text The text to find matches within (depending on if the\n * {@link #urls}, {@link #email}, {@link #phone},\n * {@link #hashtag}, and {@link #mention} options are enabled). This must be a non-HTML string.\n * @param {Number} [offset=0] The offset of the text node within the\n * original string. This is used when parsing with the {@link #parse}\n * method to generate correct offsets within the {@link Autolinker.match.Match}\n * instances, but may be omitted if calling this method publicly.\n * @return {Autolinker.match.Match[]} The array of Matches found in the\n * given input `text`.\n */\n Autolinker.prototype.parseText = function (text, offset) {\n if (offset === void 0) { offset = 0; }\n offset = offset || 0;\n var matchers = this.getMatchers(), matches = [];\n for (var i = 0, numMatchers = matchers.length; i < numMatchers; i++) {\n var textMatches = matchers[i].parseMatches(text);\n // Correct the offset of each of the matches. They are originally\n // the offset of the match within the provided text node, but we\n // need to correct them to be relative to the original HTML input\n // string (i.e. the one provided to #parse).\n for (var j = 0, numTextMatches = textMatches.length; j < numTextMatches; j++) {\n textMatches[j].setOffset(offset + textMatches[j].getOffset());\n }\n matches.push.apply(matches, textMatches);\n }\n return matches;\n };\n /**\n * Automatically links URLs, Email addresses, Phone numbers, Hashtags,\n * and Mentions (Twitter, Instagram, Soundcloud) found in the given chunk of HTML. Does not link\n * URLs found within HTML tags.\n *\n * For instance, if given the text: `You should go to http://www.yahoo.com`,\n * then the result will be `You should go to\n * <a href=\"http://www.yahoo.com\">http://www.yahoo.com</a>`\n *\n * This method finds the text around any HTML elements in the input\n * `textOrHtml`, which will be the text that is processed. Any original HTML\n * elements will be left as-is, as well as the text that is already wrapped\n * in anchor (<a>) tags.\n *\n * @param {String} textOrHtml The HTML or text to autolink matches within\n * (depending on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #hashtag}, and {@link #mention} options are enabled).\n * @return {String} The HTML, with matches automatically linked.\n */\n Autolinker.prototype.link = function (textOrHtml) {\n if (!textOrHtml) {\n return \"\";\n } // handle `null` and `undefined`\n var matches = this.parse(textOrHtml), newHtml = [], lastIndex = 0;\n for (var i = 0, len = matches.length; i < len; i++) {\n var match = matches[i];\n newHtml.push(textOrHtml.substring(lastIndex, match.getOffset()));\n newHtml.push(this.createMatchReturnVal(match));\n lastIndex = match.getOffset() + match.getMatchedText().length;\n }\n newHtml.push(textOrHtml.substring(lastIndex)); // handle the text after the last match\n return newHtml.join('');\n };\n /**\n * Creates the return string value for a given match in the input string.\n *\n * This method handles the {@link #replaceFn}, if one was provided.\n *\n * @private\n * @param {Autolinker.match.Match} match The Match object that represents\n * the match.\n * @return {String} The string that the `match` should be replaced with.\n * This is usually the anchor tag string, but may be the `matchStr` itself\n * if the match is not to be replaced.\n */\n Autolinker.prototype.createMatchReturnVal = function (match) {\n // Handle a custom `replaceFn` being provided\n var replaceFnResult;\n if (this.replaceFn) {\n replaceFnResult = this.replaceFn.call(this.context, match); // Autolinker instance is the context\n }\n if (typeof replaceFnResult === 'string') {\n return replaceFnResult; // `replaceFn` returned a string, use that\n }\n else if (replaceFnResult === false) {\n return match.getMatchedText(); // no replacement for the match\n }\n else if (replaceFnResult instanceof HtmlTag) {\n return replaceFnResult.toAnchorString();\n }\n else { // replaceFnResult === true, or no/unknown return value from function\n // Perform Autolinker's default anchor tag generation\n var anchorTag = match.buildTag(); // returns an Autolinker.HtmlTag instance\n return anchorTag.toAnchorString();\n }\n };\n /**\n * Lazily instantiates and returns the {@link Autolinker.matcher.Matcher}\n * instances for this Autolinker instance.\n *\n * @private\n * @return {Autolinker.matcher.Matcher[]}\n */\n Autolinker.prototype.getMatchers = function () {\n if (!this.matchers) {\n var tagBuilder = this.getTagBuilder();\n var matchers = [\n new HashtagMatcher({ tagBuilder: tagBuilder, serviceName: this.hashtag }),\n new EmailMatcher({ tagBuilder: tagBuilder }),\n new PhoneMatcher({ tagBuilder: tagBuilder }),\n new MentionMatcher({ tagBuilder: tagBuilder, serviceName: this.mention }),\n new UrlMatcher({ tagBuilder: tagBuilder, stripPrefix: this.stripPrefix, stripTrailingSlash: this.stripTrailingSlash, decodePercentEncoding: this.decodePercentEncoding })\n ];\n return (this.matchers = matchers);\n }\n else {\n return this.matchers;\n }\n };\n /**\n * Returns the {@link #tagBuilder} instance for this Autolinker instance,\n * lazily instantiating it if it does not yet exist.\n *\n * @private\n * @return {Autolinker.AnchorTagBuilder}\n */\n Autolinker.prototype.getTagBuilder = function () {\n var tagBuilder = this.tagBuilder;\n if (!tagBuilder) {\n tagBuilder = this.tagBuilder = new AnchorTagBuilder({\n newWindow: this.newWindow,\n truncate: this.truncate,\n className: this.className\n });\n }\n return tagBuilder;\n };\n /**\n * @static\n * @property {String} version\n *\n * The Autolinker version number in the form major.minor.patch\n *\n * Ex: 0.25.1\n */\n Autolinker.version = '3.11.0';\n /**\n * For backwards compatibility with Autolinker 1.x, the AnchorTagBuilder\n * class is provided as a static on the Autolinker class.\n */\n Autolinker.AnchorTagBuilder = AnchorTagBuilder;\n /**\n * For backwards compatibility with Autolinker 1.x, the HtmlTag class is\n * provided as a static on the Autolinker class.\n */\n Autolinker.HtmlTag = HtmlTag;\n /**\n * For backwards compatibility with Autolinker 1.x, the Matcher classes are\n * provided as statics on the Autolinker class.\n */\n Autolinker.matcher = {\n Email: EmailMatcher,\n Hashtag: HashtagMatcher,\n Matcher: Matcher,\n Mention: MentionMatcher,\n Phone: PhoneMatcher,\n Url: UrlMatcher\n };\n /**\n * For backwards compatibility with Autolinker 1.x, the Match classes are\n * provided as statics on the Autolinker class.\n */\n Autolinker.match = {\n Email: EmailMatch,\n Hashtag: HashtagMatch,\n Match: Match,\n Mention: MentionMatch,\n Phone: PhoneMatch,\n Url: UrlMatch\n };\n return Autolinker;\n }());\n\n return Autolinker;\n\n}));\n\n\n//# sourceMappingURL=Autolinker.js.map\n\nexport default tmp.Autolinker;\n","/**\n * @alias KmlLookAt\n * @constructor\n *\n * @param {Cartesian3} position camera position\n * @param {HeadingPitchRange} headingPitchRange camera orientation\n */\nfunction KmlLookAt(position, headingPitchRange) {\n this.position = position;\n this.headingPitchRange = headingPitchRange;\n}\nexport default KmlLookAt;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\n/**\n * @alias KmlTour\n * @constructor\n *\n * @param {String} name name parsed from KML\n * @param {String} id id parsed from KML\n * @param {Array} playlist array with KMLTourFlyTos, KMLTourWaits and KMLTourSoundCues\n */\nfunction KmlTour(name, id) {\n /**\n * Id of kml gx:Tour entry\n * @type String\n */\n this.id = id;\n /**\n * Tour name\n * @type String\n */\n this.name = name;\n /**\n * Index of current entry from playlist\n * @type Number\n */\n this.playlistIndex = 0;\n /**\n * Array of playlist entries\n * @type Array\n */\n this.playlist = [];\n /**\n * Event will be called when tour starts to play,\n * before any playlist entry starts to play.\n * @type Event\n */\n this.tourStart = new Event();\n /**\n * Event will be called when all playlist entries are\n * played, or tour playback being canceled.\n *\n * If tour playback was terminated, event callback will\n * be called with terminated=true parameter.\n * @type Event\n */\n this.tourEnd = new Event();\n /**\n * Event will be called when entry from playlist starts to play.\n *\n * Event callback will be called with curent entry as first parameter.\n * @type Event\n */\n this.entryStart = new Event();\n /**\n * Event will be called when entry from playlist ends to play.\n *\n * Event callback will be called with following parameters:\n * 1. entry - entry\n * 2. terminated - true if playback was terminated by calling {@link KmlTour#stop}\n * @type Event\n */\n this.entryEnd = new Event();\n\n this._activeEntries = [];\n}\n\n/**\n * Add entry to this tour playlist.\n *\n * @param {KmlTourFlyTo|KmlTourWait} entry an entry to add to the playlist.\n */\nKmlTour.prototype.addPlaylistEntry = function (entry) {\n this.playlist.push(entry);\n};\n\n/**\n * Play this tour.\n *\n * @param {Viewer} viewer viewer widget.\n * @param {Object} [cameraOptions] these options will be merged with {@link Camera#flyTo}\n * options for FlyTo playlist entries.\n */\nKmlTour.prototype.play = function (viewer, cameraOptions) {\n this.tourStart.raiseEvent();\n\n var tour = this;\n playEntry.call(this, viewer, cameraOptions, function (terminated) {\n tour.playlistIndex = 0;\n // Stop nonblocking entries\n if (!terminated) {\n cancelAllEntries(tour._activeEntries);\n }\n tour.tourEnd.raiseEvent(terminated);\n });\n};\n\n/**\n * Stop curently playing tour.\n */\nKmlTour.prototype.stop = function () {\n cancelAllEntries(this._activeEntries);\n};\n\n// Stop all activeEntries.\nfunction cancelAllEntries(activeEntries) {\n for (\n var entry = activeEntries.pop();\n entry !== undefined;\n entry = activeEntries.pop()\n ) {\n entry.stop();\n }\n}\n\n// Play playlist entry.\n// This function is called recursevly with playNext and iterates over all entries from playlist.\nfunction playEntry(viewer, cameraOptions, allDone) {\n var entry = this.playlist[this.playlistIndex];\n if (entry) {\n var _playNext = playNext.bind(this, viewer, cameraOptions, allDone);\n this._activeEntries.push(entry);\n this.entryStart.raiseEvent(entry);\n if (entry.blocking) {\n entry.play(_playNext, viewer.scene.camera, cameraOptions);\n } else {\n var tour = this;\n entry.play(function () {\n tour.entryEnd.raiseEvent(entry);\n var indx = tour._activeEntries.indexOf(entry);\n if (indx >= 0) {\n tour._activeEntries.splice(indx, 1);\n }\n });\n _playNext(viewer, cameraOptions, allDone);\n }\n } else if (defined(allDone)) {\n allDone(false);\n }\n}\n\n// Increment playlistIndex and call playEntry if terminated isn't true.\nfunction playNext(viewer, cameraOptions, allDone, terminated) {\n var entry = this.playlist[this.playlistIndex];\n this.entryEnd.raiseEvent(entry, terminated);\n\n if (terminated) {\n allDone(terminated);\n } else {\n var indx = this._activeEntries.indexOf(entry);\n if (indx >= 0) {\n this._activeEntries.splice(indx, 1);\n }\n this.playlistIndex++;\n playEntry.call(this, viewer, cameraOptions, allDone);\n }\n}\nexport default KmlTour;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\n/**\n * @alias KmlTourFlyTo\n * @constructor\n *\n * @param {Number} duration entry duration\n * @param {String} flyToMode KML fly to mode: bounce, smooth, etc\n * @param {KmlCamera|KmlLookAt} view KmlCamera or KmlLookAt\n */\nfunction KmlTourFlyTo(duration, flyToMode, view) {\n this.type = \"KmlTourFlyTo\";\n this.blocking = true;\n this.activeCamera = null;\n this.activeCallback = null;\n\n this.duration = duration;\n this.view = view;\n this.flyToMode = flyToMode;\n}\n\n/**\n * Play this playlist entry\n *\n * @param {KmlTourFlyTo.DoneCallback} done function which will be called when playback ends\n * @param {Camera} camera Cesium camera\n * @param {Object} [cameraOptions] which will be merged with camera flyTo options. See {@link Camera#flyTo}\n */\nKmlTourFlyTo.prototype.play = function (done, camera, cameraOptions) {\n this.activeCamera = camera;\n if (defined(done) && done !== null) {\n var self = this;\n this.activeCallback = function (terminated) {\n delete self.activeCallback;\n delete self.activeCamera;\n done(defined(terminated) ? false : terminated);\n };\n }\n\n var options = this.getCameraOptions(cameraOptions);\n if (this.view.headingPitchRoll) {\n camera.flyTo(options);\n } else if (this.view.headingPitchRange) {\n var target = new BoundingSphere(this.view.position);\n camera.flyToBoundingSphere(target, options);\n }\n};\n\n/**\n * Stop execution of curent entry. Cancel camera flyTo\n */\nKmlTourFlyTo.prototype.stop = function () {\n if (defined(this.activeCamera)) {\n this.activeCamera.cancelFlight();\n }\n if (defined(this.activeCallback)) {\n this.activeCallback(true);\n }\n};\n\n/**\n * Returns options for {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere}\n * depends on this.view type.\n *\n * @param {Object} cameraOptions options to merge with generated. See {@link Camera#flyTo}\n * @returns {Object} {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere} options\n */\nKmlTourFlyTo.prototype.getCameraOptions = function (cameraOptions) {\n var options = {\n duration: this.duration,\n };\n\n if (defined(this.activeCallback)) {\n options.complete = this.activeCallback;\n }\n\n if (this.flyToMode === \"smooth\") {\n options.easingFunction = EasingFunction.LINEAR_NONE;\n }\n\n if (this.view.headingPitchRoll) {\n options.destination = this.view.position;\n options.orientation = this.view.headingPitchRoll;\n } else if (this.view.headingPitchRange) {\n options.offset = this.view.headingPitchRange;\n }\n\n if (defined(cameraOptions)) {\n options = combine(options, cameraOptions);\n }\n return options;\n};\n\n/**\n * A function that will be executed when the flight completes.\n * @callback KmlTourFlyTo.DoneCallback\n *\n * @param {Boolean} terminated true if {@link KmlTourFlyTo#stop} was\n * called before entry done playback.\n */\nexport default KmlTourFlyTo;\n","import defined from \"../Core/defined.js\";\n/**\n * @alias KmlTourWait\n * @constructor\n *\n * @param {Number} duration entry duration\n */\nfunction KmlTourWait(duration) {\n this.type = \"KmlTourWait\";\n this.blocking = true;\n this.duration = duration;\n\n this.timeout = null;\n}\n\n/**\n * Play this playlist entry\n *\n * @param {KmlTourWait.DoneCallback} done function which will be called when playback ends\n */\nKmlTourWait.prototype.play = function (done) {\n var self = this;\n this.activeCallback = done;\n this.timeout = setTimeout(function () {\n delete self.activeCallback;\n done(false);\n }, this.duration * 1000);\n};\n\n/**\n * Stop execution of curent entry, cancel curent timeout\n */\nKmlTourWait.prototype.stop = function () {\n clearTimeout(this.timeout);\n if (defined(this.activeCallback)) {\n this.activeCallback(true);\n }\n};\n\n/**\n * A function which will be called when playback ends.\n *\n * @callback KmlTourWait.DoneCallback\n * @param {Boolean} terminated true if {@link KmlTourWait#stop} was\n * called before entry done playback.\n */\nexport default KmlTourWait;\n","import ArcType from \"../Core/ArcType.js\";\nimport AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport ClockRange from \"../Core/ClockRange.js\";\nimport ClockStep from \"../Core/ClockStep.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport getExtensionFromUri from \"../Core/getExtensionFromUri.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport objectToQuery from \"../Core/objectToQuery.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PinBuilder from \"../Core/PinBuilder.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport queryToObject from \"../Core/queryToObject.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport Autolinker from \"../ThirdParty/Autolinker.js\";\nimport Uri from \"../ThirdParty/Uri.js\";\nimport when from \"../ThirdParty/when.js\";\nimport zip from \"../ThirdParty/zip.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport DataSource from \"./DataSource.js\";\nimport DataSourceClock from \"./DataSourceClock.js\";\nimport Entity from \"./Entity.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport KmlCamera from \"./KmlCamera.js\";\nimport KmlLookAt from \"./KmlLookAt.js\";\nimport KmlTour from \"./KmlTour.js\";\nimport KmlTourFlyTo from \"./KmlTourFlyTo.js\";\nimport KmlTourWait from \"./KmlTourWait.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PositionPropertyArray from \"./PositionPropertyArray.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\nimport TimeIntervalCollectionProperty from \"./TimeIntervalCollectionProperty.js\";\nimport WallGraphics from \"./WallGraphics.js\";\n\n//This is by no means an exhaustive list of MIME types.\n//The purpose of this list is to be able to accurately identify content embedded\n//in KMZ files. Eventually, we can make this configurable by the end user so they can add\n//there own content types if they have KMZ files that require it.\nvar MimeTypes = {\n avi: \"video/x-msvideo\",\n bmp: \"image/bmp\",\n bz2: \"application/x-bzip2\",\n chm: \"application/vnd.ms-htmlhelp\",\n css: \"text/css\",\n csv: \"text/csv\",\n doc: \"application/msword\",\n dvi: \"application/x-dvi\",\n eps: \"application/postscript\",\n flv: \"video/x-flv\",\n gif: \"image/gif\",\n gz: \"application/x-gzip\",\n htm: \"text/html\",\n html: \"text/html\",\n ico: \"image/vnd.microsoft.icon\",\n jnlp: \"application/x-java-jnlp-file\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n m3u: \"audio/x-mpegurl\",\n m4v: \"video/mp4\",\n mathml: \"application/mathml+xml\",\n mid: \"audio/midi\",\n midi: \"audio/midi\",\n mov: \"video/quicktime\",\n mp3: \"audio/mpeg\",\n mp4: \"video/mp4\",\n mp4v: \"video/mp4\",\n mpeg: \"video/mpeg\",\n mpg: \"video/mpeg\",\n odp: \"application/vnd.oasis.opendocument.presentation\",\n ods: \"application/vnd.oasis.opendocument.spreadsheet\",\n odt: \"application/vnd.oasis.opendocument.text\",\n ogg: \"application/ogg\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n pps: \"application/vnd.ms-powerpoint\",\n ppt: \"application/vnd.ms-powerpoint\",\n ps: \"application/postscript\",\n qt: \"video/quicktime\",\n rdf: \"application/rdf+xml\",\n rss: \"application/rss+xml\",\n rtf: \"application/rtf\",\n svg: \"image/svg+xml\",\n swf: \"application/x-shockwave-flash\",\n text: \"text/plain\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n txt: \"text/plain\",\n wav: \"audio/x-wav\",\n wma: \"audio/x-ms-wma\",\n wmv: \"video/x-ms-wmv\",\n xml: \"application/xml\",\n zip: \"application/zip\",\n\n detectFromFilename: function (filename) {\n var ext = filename.toLowerCase();\n ext = getExtensionFromUri(ext);\n return MimeTypes[ext];\n },\n};\n\nvar parser;\nif (typeof DOMParser !== \"undefined\") {\n parser = new DOMParser();\n}\n\nvar autolinker = new Autolinker({\n stripPrefix: false,\n email: false,\n replaceFn: function (match) {\n if (!match.protocolUrlMatch) {\n //Prevent matching of non-explicit urls.\n //i.e. foo.id won't match but http://foo.id will\n return false;\n }\n },\n});\n\nvar BILLBOARD_SIZE = 32;\n\nvar BILLBOARD_NEAR_DISTANCE = 2414016;\nvar BILLBOARD_NEAR_RATIO = 1.0;\nvar BILLBOARD_FAR_DISTANCE = 1.6093e7;\nvar BILLBOARD_FAR_RATIO = 0.1;\n\nvar kmlNamespaces = [\n null,\n undefined,\n \"http://www.opengis.net/kml/2.2\",\n \"http://earth.google.com/kml/2.2\",\n \"http://earth.google.com/kml/2.1\",\n \"http://earth.google.com/kml/2.0\",\n];\nvar gxNamespaces = [\"http://www.google.com/kml/ext/2.2\"];\nvar atomNamespaces = [\"http://www.w3.org/2005/Atom\"];\nvar namespaces = {\n kml: kmlNamespaces,\n gx: gxNamespaces,\n atom: atomNamespaces,\n kmlgx: kmlNamespaces.concat(gxNamespaces),\n};\n\n// Ensure Specs/Data/KML/unsupported.kml is kept up to date with these supported types\nvar featureTypes = {\n Document: processDocument,\n Folder: processFolder,\n Placemark: processPlacemark,\n NetworkLink: processNetworkLink,\n GroundOverlay: processGroundOverlay,\n PhotoOverlay: processUnsupportedFeature,\n ScreenOverlay: processUnsupportedFeature,\n Tour: processTour,\n};\n\nfunction DeferredLoading(dataSource) {\n this._dataSource = dataSource;\n this._deferred = when.defer();\n this._stack = [];\n this._promises = [];\n this._timeoutSet = false;\n this._used = false;\n\n this._started = 0;\n this._timeThreshold = 1000; // Initial load is 1 second\n}\n\nObject.defineProperties(DeferredLoading.prototype, {\n dataSource: {\n get: function () {\n return this._dataSource;\n },\n },\n});\n\nDeferredLoading.prototype.addNodes = function (nodes, processingData) {\n this._stack.push({\n nodes: nodes,\n index: 0,\n processingData: processingData,\n });\n this._used = true;\n};\n\nDeferredLoading.prototype.addPromise = function (promise) {\n this._promises.push(promise);\n};\n\nDeferredLoading.prototype.wait = function () {\n // Case where we had a non-document/folder as the root\n var deferred = this._deferred;\n if (!this._used) {\n deferred.resolve();\n }\n\n return when.join(deferred.promise, when.all(this._promises));\n};\n\nDeferredLoading.prototype.process = function () {\n var isFirstCall = this._stack.length === 1;\n if (isFirstCall) {\n this._started = KmlDataSource._getTimestamp();\n }\n\n return this._process(isFirstCall);\n};\n\nDeferredLoading.prototype._giveUpTime = function () {\n if (this._timeoutSet) {\n // Timeout was already set so just return\n return;\n }\n\n this._timeoutSet = true;\n this._timeThreshold = 50; // After the first load lower threshold to 0.5 seconds\n var that = this;\n setTimeout(function () {\n that._timeoutSet = false;\n that._started = KmlDataSource._getTimestamp();\n that._process(true);\n }, 0);\n};\n\nDeferredLoading.prototype._nextNode = function () {\n var stack = this._stack;\n var top = stack[stack.length - 1];\n var index = top.index;\n var nodes = top.nodes;\n if (index === nodes.length) {\n return;\n }\n ++top.index;\n\n return nodes[index];\n};\n\nDeferredLoading.prototype._pop = function () {\n var stack = this._stack;\n stack.pop();\n\n // Return false if we are done\n if (stack.length === 0) {\n this._deferred.resolve();\n return false;\n }\n\n return true;\n};\n\nDeferredLoading.prototype._process = function (isFirstCall) {\n var dataSource = this.dataSource;\n var processingData = this._stack[this._stack.length - 1].processingData;\n\n var child = this._nextNode();\n while (defined(child)) {\n var featureProcessor = featureTypes[child.localName];\n if (\n defined(featureProcessor) &&\n (namespaces.kml.indexOf(child.namespaceURI) !== -1 ||\n namespaces.gx.indexOf(child.namespaceURI) !== -1)\n ) {\n featureProcessor(dataSource, child, processingData, this);\n\n // Give up time and continue loading later\n if (\n this._timeoutSet ||\n KmlDataSource._getTimestamp() > this._started + this._timeThreshold\n ) {\n this._giveUpTime();\n return;\n }\n }\n\n child = this._nextNode();\n }\n\n // If we are a recursive call from a subfolder, just return so the parent folder can continue processing\n // If we aren't then make another call to processNodes because there is stuff still left in the queue\n if (this._pop() && isFirstCall) {\n this._process(true);\n }\n};\n\nfunction isZipFile(blob) {\n var magicBlob = blob.slice(0, Math.min(4, blob.size));\n var deferred = when.defer();\n var reader = new FileReader();\n reader.addEventListener(\"load\", function () {\n deferred.resolve(\n new DataView(reader.result).getUint32(0, false) === 0x504b0304\n );\n });\n reader.addEventListener(\"error\", function () {\n deferred.reject(reader.error);\n });\n reader.readAsArrayBuffer(magicBlob);\n return deferred.promise;\n}\n\nfunction readBlobAsText(blob) {\n var deferred = when.defer();\n var reader = new FileReader();\n reader.addEventListener(\"load\", function () {\n deferred.resolve(reader.result);\n });\n reader.addEventListener(\"error\", function () {\n deferred.reject(reader.error);\n });\n reader.readAsText(blob);\n return deferred.promise;\n}\n\nfunction insertNamespaces(text) {\n var namespaceMap = {\n xsi: \"http://www.w3.org/2001/XMLSchema-instance\",\n };\n var firstPart, lastPart, reg, declaration;\n\n for (var key in namespaceMap) {\n if (namespaceMap.hasOwnProperty(key)) {\n reg = RegExp(\"[< ]\" + key + \":\");\n declaration = \"xmlns:\" + key + \"=\";\n if (reg.test(text) && text.indexOf(declaration) === -1) {\n if (!defined(firstPart)) {\n firstPart = text.substr(0, text.indexOf(\"<kml\") + 4);\n lastPart = text.substr(firstPart.length);\n }\n firstPart += \" \" + declaration + '\"' + namespaceMap[key] + '\"';\n }\n }\n }\n\n if (defined(firstPart)) {\n text = firstPart + lastPart;\n }\n\n return text;\n}\n\nfunction removeDuplicateNamespaces(text) {\n var index = text.indexOf(\"xmlns:\");\n var endDeclaration = text.indexOf(\">\", index);\n var namespace, startIndex, endIndex;\n\n while (index !== -1 && index < endDeclaration) {\n namespace = text.slice(index, text.indexOf('\"', index));\n startIndex = index;\n index = text.indexOf(namespace, index + 1);\n if (index !== -1) {\n endIndex = text.indexOf('\"', text.indexOf('\"', index) + 1);\n text = text.slice(0, index - 1) + text.slice(endIndex + 1, text.length);\n index = text.indexOf(\"xmlns:\", startIndex - 1);\n } else {\n index = text.indexOf(\"xmlns:\", startIndex + 1);\n }\n }\n\n return text;\n}\n\nfunction loadXmlFromZip(entry, uriResolver, deferred) {\n entry.getData(new zip.TextWriter(), function (text) {\n text = insertNamespaces(text);\n text = removeDuplicateNamespaces(text);\n uriResolver.kml = parser.parseFromString(text, \"application/xml\");\n deferred.resolve();\n });\n}\n\nfunction loadDataUriFromZip(entry, uriResolver, deferred) {\n var mimeType = defaultValue(\n MimeTypes.detectFromFilename(entry.filename),\n \"application/octet-stream\"\n );\n entry.getData(new zip.Data64URIWriter(mimeType), function (dataUri) {\n uriResolver[entry.filename] = dataUri;\n deferred.resolve();\n });\n}\n\nfunction embedDataUris(div, elementType, attributeName, uriResolver) {\n var keys = uriResolver.keys;\n var baseUri = new Uri(\".\");\n var elements = div.querySelectorAll(elementType);\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var value = element.getAttribute(attributeName);\n var uri = new Uri(value).resolve(baseUri).toString();\n var index = keys.indexOf(uri);\n if (index !== -1) {\n var key = keys[index];\n element.setAttribute(attributeName, uriResolver[key]);\n if (elementType === \"a\" && element.getAttribute(\"download\") === null) {\n element.setAttribute(\"download\", key);\n }\n }\n }\n}\n\nfunction applyBasePath(div, elementType, attributeName, sourceResource) {\n var elements = div.querySelectorAll(elementType);\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var value = element.getAttribute(attributeName);\n var resource = resolveHref(value, sourceResource);\n element.setAttribute(attributeName, resource.url);\n }\n}\n\n// an optional context is passed to allow for some malformed kmls (those with multiple geometries with same ids) to still parse\n// correctly, as they do in Google Earth.\nfunction createEntity(node, entityCollection, context) {\n var id = queryStringAttribute(node, \"id\");\n id = defined(id) && id.length !== 0 ? id : createGuid();\n if (defined(context)) {\n id = context + id;\n }\n\n // If we have a duplicate ID just generate one.\n // This isn't valid KML but Google Earth handles this case.\n var entity = entityCollection.getById(id);\n if (defined(entity)) {\n id = createGuid();\n if (defined(context)) {\n id = context + id;\n }\n }\n\n entity = entityCollection.add(new Entity({ id: id }));\n if (!defined(entity.kml)) {\n entity.addProperty(\"kml\");\n entity.kml = new KmlFeatureData();\n }\n return entity;\n}\n\nfunction isExtrudable(altitudeMode, gxAltitudeMode) {\n return (\n altitudeMode === \"absolute\" ||\n altitudeMode === \"relativeToGround\" ||\n gxAltitudeMode === \"relativeToSeaFloor\"\n );\n}\n\nfunction readCoordinate(value, ellipsoid) {\n //Google Earth treats empty or missing coordinates as 0.\n if (!defined(value)) {\n return Cartesian3.fromDegrees(0, 0, 0, ellipsoid);\n }\n\n var digits = value.match(/[^\\s,\\n]+/g);\n if (!defined(digits)) {\n return Cartesian3.fromDegrees(0, 0, 0, ellipsoid);\n }\n\n var longitude = parseFloat(digits[0]);\n var latitude = parseFloat(digits[1]);\n var height = parseFloat(digits[2]);\n\n longitude = isNaN(longitude) ? 0.0 : longitude;\n latitude = isNaN(latitude) ? 0.0 : latitude;\n height = isNaN(height) ? 0.0 : height;\n\n return Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid);\n}\n\nfunction readCoordinates(element, ellipsoid) {\n if (!defined(element)) {\n return undefined;\n }\n\n var tuples = element.textContent.match(/[^\\s\\n]+/g);\n if (!defined(tuples)) {\n return undefined;\n }\n\n var length = tuples.length;\n var result = new Array(length);\n var resultIndex = 0;\n for (var i = 0; i < length; i++) {\n result[resultIndex++] = readCoordinate(tuples[i], ellipsoid);\n }\n return result;\n}\n\nfunction queryNumericAttribute(node, attributeName) {\n if (!defined(node)) {\n return undefined;\n }\n\n var value = node.getAttribute(attributeName);\n if (value !== null) {\n var result = parseFloat(value);\n return !isNaN(result) ? result : undefined;\n }\n return undefined;\n}\n\nfunction queryStringAttribute(node, attributeName) {\n if (!defined(node)) {\n return undefined;\n }\n var value = node.getAttribute(attributeName);\n return value !== null ? value : undefined;\n}\n\nfunction queryFirstNode(node, tagName, namespace) {\n if (!defined(node)) {\n return undefined;\n }\n var childNodes = node.childNodes;\n var length = childNodes.length;\n for (var q = 0; q < length; q++) {\n var child = childNodes[q];\n if (\n child.localName === tagName &&\n namespace.indexOf(child.namespaceURI) !== -1\n ) {\n return child;\n }\n }\n return undefined;\n}\n\nfunction queryNodes(node, tagName, namespace) {\n if (!defined(node)) {\n return undefined;\n }\n var result = [];\n var childNodes = node.getElementsByTagNameNS(\"*\", tagName);\n var length = childNodes.length;\n for (var q = 0; q < length; q++) {\n var child = childNodes[q];\n if (\n child.localName === tagName &&\n namespace.indexOf(child.namespaceURI) !== -1\n ) {\n result.push(child);\n }\n }\n return result;\n}\n\nfunction queryChildNodes(node, tagName, namespace) {\n if (!defined(node)) {\n return [];\n }\n var result = [];\n var childNodes = node.childNodes;\n var length = childNodes.length;\n for (var q = 0; q < length; q++) {\n var child = childNodes[q];\n if (\n child.localName === tagName &&\n namespace.indexOf(child.namespaceURI) !== -1\n ) {\n result.push(child);\n }\n }\n return result;\n}\n\nfunction queryNumericValue(node, tagName, namespace) {\n var resultNode = queryFirstNode(node, tagName, namespace);\n if (defined(resultNode)) {\n var result = parseFloat(resultNode.textContent);\n return !isNaN(result) ? result : undefined;\n }\n return undefined;\n}\n\nfunction queryStringValue(node, tagName, namespace) {\n var result = queryFirstNode(node, tagName, namespace);\n if (defined(result)) {\n return result.textContent.trim();\n }\n return undefined;\n}\n\nfunction queryBooleanValue(node, tagName, namespace) {\n var result = queryFirstNode(node, tagName, namespace);\n if (defined(result)) {\n var value = result.textContent.trim();\n return value === \"1\" || /^true$/i.test(value);\n }\n return undefined;\n}\n\nfunction resolveHref(href, sourceResource, uriResolver) {\n if (!defined(href)) {\n return undefined;\n }\n\n var resource;\n if (defined(uriResolver)) {\n // To resolve issues with KML sources defined in Windows style paths.\n href = href.replace(/\\\\/g, \"/\");\n var blob = uriResolver[href];\n if (defined(blob)) {\n resource = new Resource({\n url: blob,\n });\n } else {\n // Needed for multiple levels of KML files in a KMZ\n var baseUri = new Uri(sourceResource.getUrlComponent());\n var uri = new Uri(href);\n blob = uriResolver[uri.resolve(baseUri)];\n if (defined(blob)) {\n resource = new Resource({\n url: blob,\n });\n }\n }\n }\n\n if (!defined(resource)) {\n resource = sourceResource.getDerivedResource({\n url: href,\n });\n }\n\n return resource;\n}\n\nvar colorOptions = {\n maximumRed: undefined,\n red: undefined,\n maximumGreen: undefined,\n green: undefined,\n maximumBlue: undefined,\n blue: undefined,\n};\n\nfunction parseColorString(value, isRandom) {\n if (!defined(value) || /^\\s*$/gm.test(value)) {\n return undefined;\n }\n\n if (value[0] === \"#\") {\n value = value.substring(1);\n }\n\n var alpha = parseInt(value.substring(0, 2), 16) / 255.0;\n var blue = parseInt(value.substring(2, 4), 16) / 255.0;\n var green = parseInt(value.substring(4, 6), 16) / 255.0;\n var red = parseInt(value.substring(6, 8), 16) / 255.0;\n\n if (!isRandom) {\n return new Color(red, green, blue, alpha);\n }\n\n if (red > 0) {\n colorOptions.maximumRed = red;\n colorOptions.red = undefined;\n } else {\n colorOptions.maximumRed = undefined;\n colorOptions.red = 0;\n }\n if (green > 0) {\n colorOptions.maximumGreen = green;\n colorOptions.green = undefined;\n } else {\n colorOptions.maximumGreen = undefined;\n colorOptions.green = 0;\n }\n if (blue > 0) {\n colorOptions.maximumBlue = blue;\n colorOptions.blue = undefined;\n } else {\n colorOptions.maximumBlue = undefined;\n colorOptions.blue = 0;\n }\n colorOptions.alpha = alpha;\n return Color.fromRandom(colorOptions);\n}\n\nfunction queryColorValue(node, tagName, namespace) {\n var value = queryStringValue(node, tagName, namespace);\n if (!defined(value)) {\n return undefined;\n }\n return parseColorString(\n value,\n queryStringValue(node, \"colorMode\", namespace) === \"random\"\n );\n}\n\nfunction processTimeStamp(featureNode) {\n var node = queryFirstNode(featureNode, \"TimeStamp\", namespaces.kmlgx);\n var whenString = queryStringValue(node, \"when\", namespaces.kmlgx);\n\n if (!defined(node) || !defined(whenString) || whenString.length === 0) {\n return undefined;\n }\n\n //According to the KML spec, a TimeStamp represents a \"single moment in time\"\n //However, since Cesium animates much differently than Google Earth, that doesn't\n //Make much sense here. Instead, we use the TimeStamp as the moment the feature\n //comes into existence. This works much better and gives a similar feel to\n //GE's experience.\n var when = JulianDate.fromIso8601(whenString);\n var result = new TimeIntervalCollection();\n result.addInterval(\n new TimeInterval({\n start: when,\n stop: Iso8601.MAXIMUM_VALUE,\n })\n );\n return result;\n}\n\nfunction processTimeSpan(featureNode) {\n var node = queryFirstNode(featureNode, \"TimeSpan\", namespaces.kmlgx);\n if (!defined(node)) {\n return undefined;\n }\n var result;\n\n var beginNode = queryFirstNode(node, \"begin\", namespaces.kmlgx);\n var beginDate = defined(beginNode)\n ? JulianDate.fromIso8601(beginNode.textContent)\n : undefined;\n\n var endNode = queryFirstNode(node, \"end\", namespaces.kmlgx);\n var endDate = defined(endNode)\n ? JulianDate.fromIso8601(endNode.textContent)\n : undefined;\n\n if (defined(beginDate) && defined(endDate)) {\n if (JulianDate.lessThan(endDate, beginDate)) {\n var tmp = beginDate;\n beginDate = endDate;\n endDate = tmp;\n }\n result = new TimeIntervalCollection();\n result.addInterval(\n new TimeInterval({\n start: beginDate,\n stop: endDate,\n })\n );\n } else if (defined(beginDate)) {\n result = new TimeIntervalCollection();\n result.addInterval(\n new TimeInterval({\n start: beginDate,\n stop: Iso8601.MAXIMUM_VALUE,\n })\n );\n } else if (defined(endDate)) {\n result = new TimeIntervalCollection();\n result.addInterval(\n new TimeInterval({\n start: Iso8601.MINIMUM_VALUE,\n stop: endDate,\n })\n );\n }\n\n return result;\n}\n\nfunction createDefaultBillboard() {\n var billboard = new BillboardGraphics();\n billboard.width = BILLBOARD_SIZE;\n billboard.height = BILLBOARD_SIZE;\n billboard.scaleByDistance = new NearFarScalar(\n BILLBOARD_NEAR_DISTANCE,\n BILLBOARD_NEAR_RATIO,\n BILLBOARD_FAR_DISTANCE,\n BILLBOARD_FAR_RATIO\n );\n billboard.pixelOffsetScaleByDistance = new NearFarScalar(\n BILLBOARD_NEAR_DISTANCE,\n BILLBOARD_NEAR_RATIO,\n BILLBOARD_FAR_DISTANCE,\n BILLBOARD_FAR_RATIO\n );\n return billboard;\n}\n\nfunction createDefaultPolygon() {\n var polygon = new PolygonGraphics();\n polygon.outline = true;\n polygon.outlineColor = Color.WHITE;\n return polygon;\n}\n\nfunction createDefaultLabel() {\n var label = new LabelGraphics();\n label.translucencyByDistance = new NearFarScalar(3000000, 1.0, 5000000, 0.0);\n label.pixelOffset = new Cartesian2(17, 0);\n label.horizontalOrigin = HorizontalOrigin.LEFT;\n label.font = \"16px sans-serif\";\n label.style = LabelStyle.FILL_AND_OUTLINE;\n return label;\n}\n\nfunction getIconHref(\n iconNode,\n dataSource,\n sourceResource,\n uriResolver,\n canRefresh\n) {\n var href = queryStringValue(iconNode, \"href\", namespaces.kml);\n if (!defined(href) || href.length === 0) {\n return undefined;\n }\n\n if (href.indexOf(\"root://icons/palette-\") === 0) {\n var palette = href.charAt(21);\n\n // Get the icon number\n var x = defaultValue(queryNumericValue(iconNode, \"x\", namespaces.gx), 0);\n var y = defaultValue(queryNumericValue(iconNode, \"y\", namespaces.gx), 0);\n x = Math.min(x / 32, 7);\n y = 7 - Math.min(y / 32, 7);\n var iconNum = 8 * y + x;\n\n href =\n \"https://maps.google.com/mapfiles/kml/pal\" +\n palette +\n \"/icon\" +\n iconNum +\n \".png\";\n }\n\n var hrefResource = resolveHref(href, sourceResource, uriResolver);\n\n if (canRefresh) {\n var refreshMode = queryStringValue(iconNode, \"refreshMode\", namespaces.kml);\n var viewRefreshMode = queryStringValue(\n iconNode,\n \"viewRefreshMode\",\n namespaces.kml\n );\n if (refreshMode === \"onInterval\" || refreshMode === \"onExpire\") {\n oneTimeWarning(\n \"kml-refreshMode-\" + refreshMode,\n \"KML - Unsupported Icon refreshMode: \" + refreshMode\n );\n } else if (viewRefreshMode === \"onStop\" || viewRefreshMode === \"onRegion\") {\n oneTimeWarning(\n \"kml-refreshMode-\" + viewRefreshMode,\n \"KML - Unsupported Icon viewRefreshMode: \" + viewRefreshMode\n );\n }\n\n var viewBoundScale = defaultValue(\n queryStringValue(iconNode, \"viewBoundScale\", namespaces.kml),\n 1.0\n );\n var defaultViewFormat =\n viewRefreshMode === \"onStop\"\n ? \"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]\"\n : \"\";\n var viewFormat = defaultValue(\n queryStringValue(iconNode, \"viewFormat\", namespaces.kml),\n defaultViewFormat\n );\n var httpQuery = queryStringValue(iconNode, \"httpQuery\", namespaces.kml);\n if (defined(viewFormat)) {\n hrefResource.setQueryParameters(queryToObject(cleanupString(viewFormat)));\n }\n if (defined(httpQuery)) {\n hrefResource.setQueryParameters(queryToObject(cleanupString(httpQuery)));\n }\n\n var ellipsoid = dataSource._ellipsoid;\n processNetworkLinkQueryString(\n hrefResource,\n dataSource._camera,\n dataSource._canvas,\n viewBoundScale,\n dataSource._lastCameraView.bbox,\n ellipsoid\n );\n\n return hrefResource;\n }\n\n return hrefResource;\n}\n\nfunction processBillboardIcon(\n dataSource,\n node,\n targetEntity,\n sourceResource,\n uriResolver\n) {\n var scale = queryNumericValue(node, \"scale\", namespaces.kml);\n var heading = queryNumericValue(node, \"heading\", namespaces.kml);\n var color = queryColorValue(node, \"color\", namespaces.kml);\n\n var iconNode = queryFirstNode(node, \"Icon\", namespaces.kml);\n var icon = getIconHref(\n iconNode,\n dataSource,\n sourceResource,\n uriResolver,\n false\n );\n\n // If icon tags are present but blank, we do not want to show an icon\n if (defined(iconNode) && !defined(icon)) {\n icon = false;\n }\n\n var x = queryNumericValue(iconNode, \"x\", namespaces.gx);\n var y = queryNumericValue(iconNode, \"y\", namespaces.gx);\n var w = queryNumericValue(iconNode, \"w\", namespaces.gx);\n var h = queryNumericValue(iconNode, \"h\", namespaces.gx);\n\n var hotSpotNode = queryFirstNode(node, \"hotSpot\", namespaces.kml);\n var hotSpotX = queryNumericAttribute(hotSpotNode, \"x\");\n var hotSpotY = queryNumericAttribute(hotSpotNode, \"y\");\n var hotSpotXUnit = queryStringAttribute(hotSpotNode, \"xunits\");\n var hotSpotYUnit = queryStringAttribute(hotSpotNode, \"yunits\");\n\n var billboard = targetEntity.billboard;\n if (!defined(billboard)) {\n billboard = createDefaultBillboard();\n targetEntity.billboard = billboard;\n }\n\n billboard.image = icon;\n billboard.scale = scale;\n billboard.color = color;\n\n if (defined(x) || defined(y) || defined(w) || defined(h)) {\n billboard.imageSubRegion = new BoundingRectangle(x, y, w, h);\n }\n\n //GE treats a heading of zero as no heading\n //You can still point north using a 360 degree angle (or any multiple of 360)\n if (defined(heading) && heading !== 0) {\n billboard.rotation = CesiumMath.toRadians(-heading);\n billboard.alignedAxis = Cartesian3.UNIT_Z;\n }\n\n //Hotpot is the KML equivalent of pixel offset\n //The hotspot origin is the lower left, but we leave\n //our billboard origin at the center and simply\n //modify the pixel offset to take this into account\n scale = defaultValue(scale, 1.0);\n\n var xOffset;\n var yOffset;\n if (defined(hotSpotX)) {\n if (hotSpotXUnit === \"pixels\") {\n xOffset = -hotSpotX * scale;\n } else if (hotSpotXUnit === \"insetPixels\") {\n xOffset = (hotSpotX - BILLBOARD_SIZE) * scale;\n } else if (hotSpotXUnit === \"fraction\") {\n xOffset = -hotSpotX * BILLBOARD_SIZE * scale;\n }\n xOffset += BILLBOARD_SIZE * 0.5 * scale;\n }\n\n if (defined(hotSpotY)) {\n if (hotSpotYUnit === \"pixels\") {\n yOffset = hotSpotY * scale;\n } else if (hotSpotYUnit === \"insetPixels\") {\n yOffset = (-hotSpotY + BILLBOARD_SIZE) * scale;\n } else if (hotSpotYUnit === \"fraction\") {\n yOffset = hotSpotY * BILLBOARD_SIZE * scale;\n }\n\n yOffset -= BILLBOARD_SIZE * 0.5 * scale;\n }\n\n if (defined(xOffset) || defined(yOffset)) {\n billboard.pixelOffset = new Cartesian2(xOffset, yOffset);\n }\n}\n\nfunction applyStyle(\n dataSource,\n styleNode,\n targetEntity,\n sourceResource,\n uriResolver\n) {\n for (var i = 0, len = styleNode.childNodes.length; i < len; i++) {\n var node = styleNode.childNodes.item(i);\n if (node.localName === \"IconStyle\") {\n processBillboardIcon(\n dataSource,\n node,\n targetEntity,\n sourceResource,\n uriResolver\n );\n } else if (node.localName === \"LabelStyle\") {\n var label = targetEntity.label;\n if (!defined(label)) {\n label = createDefaultLabel();\n targetEntity.label = label;\n }\n label.scale = defaultValue(\n queryNumericValue(node, \"scale\", namespaces.kml),\n label.scale\n );\n label.fillColor = defaultValue(\n queryColorValue(node, \"color\", namespaces.kml),\n label.fillColor\n );\n label.text = targetEntity.name;\n } else if (node.localName === \"LineStyle\") {\n var polyline = targetEntity.polyline;\n if (!defined(polyline)) {\n polyline = new PolylineGraphics();\n targetEntity.polyline = polyline;\n }\n polyline.width = queryNumericValue(node, \"width\", namespaces.kml);\n polyline.material = queryColorValue(node, \"color\", namespaces.kml);\n if (defined(queryColorValue(node, \"outerColor\", namespaces.gx))) {\n oneTimeWarning(\n \"kml-gx:outerColor\",\n \"KML - gx:outerColor is not supported in a LineStyle\"\n );\n }\n if (defined(queryNumericValue(node, \"outerWidth\", namespaces.gx))) {\n oneTimeWarning(\n \"kml-gx:outerWidth\",\n \"KML - gx:outerWidth is not supported in a LineStyle\"\n );\n }\n if (defined(queryNumericValue(node, \"physicalWidth\", namespaces.gx))) {\n oneTimeWarning(\n \"kml-gx:physicalWidth\",\n \"KML - gx:physicalWidth is not supported in a LineStyle\"\n );\n }\n if (defined(queryBooleanValue(node, \"labelVisibility\", namespaces.gx))) {\n oneTimeWarning(\n \"kml-gx:labelVisibility\",\n \"KML - gx:labelVisibility is not supported in a LineStyle\"\n );\n }\n } else if (node.localName === \"PolyStyle\") {\n var polygon = targetEntity.polygon;\n if (!defined(polygon)) {\n polygon = createDefaultPolygon();\n targetEntity.polygon = polygon;\n }\n polygon.material = defaultValue(\n queryColorValue(node, \"color\", namespaces.kml),\n polygon.material\n );\n polygon.fill = defaultValue(\n queryBooleanValue(node, \"fill\", namespaces.kml),\n polygon.fill\n );\n polygon.outline = defaultValue(\n queryBooleanValue(node, \"outline\", namespaces.kml),\n polygon.outline\n );\n } else if (node.localName === \"BalloonStyle\") {\n var bgColor = defaultValue(\n parseColorString(queryStringValue(node, \"bgColor\", namespaces.kml)),\n Color.WHITE\n );\n var textColor = defaultValue(\n parseColorString(queryStringValue(node, \"textColor\", namespaces.kml)),\n Color.BLACK\n );\n var text = queryStringValue(node, \"text\", namespaces.kml);\n\n //This is purely an internal property used in style processing,\n //it never ends up on the final entity.\n targetEntity.addProperty(\"balloonStyle\");\n targetEntity.balloonStyle = {\n bgColor: bgColor,\n textColor: textColor,\n text: text,\n };\n } else if (node.localName === \"ListStyle\") {\n var listItemType = queryStringValue(node, \"listItemType\", namespaces.kml);\n if (listItemType === \"radioFolder\" || listItemType === \"checkOffOnly\") {\n oneTimeWarning(\n \"kml-listStyle-\" + listItemType,\n \"KML - Unsupported ListStyle with listItemType: \" + listItemType\n );\n }\n }\n }\n}\n\n//Processes and merges any inline styles for the provided node into the provided entity.\nfunction computeFinalStyle(\n dataSource,\n placeMark,\n styleCollection,\n sourceResource,\n uriResolver\n) {\n var result = new Entity();\n var styleEntity;\n\n //Google earth seems to always use the last inline Style/StyleMap only\n var styleIndex = -1;\n var childNodes = placeMark.childNodes;\n var length = childNodes.length;\n for (var q = 0; q < length; q++) {\n var child = childNodes[q];\n if (child.localName === \"Style\" || child.localName === \"StyleMap\") {\n styleIndex = q;\n }\n }\n\n if (styleIndex !== -1) {\n var inlineStyleNode = childNodes[styleIndex];\n if (inlineStyleNode.localName === \"Style\") {\n applyStyle(\n dataSource,\n inlineStyleNode,\n result,\n sourceResource,\n uriResolver\n );\n } else {\n // StyleMap\n var pairs = queryChildNodes(inlineStyleNode, \"Pair\", namespaces.kml);\n for (var p = 0; p < pairs.length; p++) {\n var pair = pairs[p];\n var key = queryStringValue(pair, \"key\", namespaces.kml);\n if (key === \"normal\") {\n var styleUrl = queryStringValue(pair, \"styleUrl\", namespaces.kml);\n if (defined(styleUrl)) {\n styleEntity = styleCollection.getById(styleUrl);\n if (!defined(styleEntity)) {\n styleEntity = styleCollection.getById(\"#\" + styleUrl);\n }\n if (defined(styleEntity)) {\n result.merge(styleEntity);\n }\n } else {\n var node = queryFirstNode(pair, \"Style\", namespaces.kml);\n applyStyle(dataSource, node, result, sourceResource, uriResolver);\n }\n } else {\n oneTimeWarning(\n \"kml-styleMap-\" + key,\n \"KML - Unsupported StyleMap key: \" + key\n );\n }\n }\n }\n }\n\n //Google earth seems to always use the first external style only.\n var externalStyle = queryStringValue(placeMark, \"styleUrl\", namespaces.kml);\n if (defined(externalStyle)) {\n var id = externalStyle;\n if (externalStyle[0] !== \"#\" && externalStyle.indexOf(\"#\") !== -1) {\n var tokens = externalStyle.split(\"#\");\n var uri = tokens[0];\n var resource = sourceResource.getDerivedResource({\n url: uri,\n });\n\n id = resource.getUrlComponent() + \"#\" + tokens[1];\n }\n\n styleEntity = styleCollection.getById(id);\n if (!defined(styleEntity)) {\n styleEntity = styleCollection.getById(\"#\" + id);\n }\n if (defined(styleEntity)) {\n result.merge(styleEntity);\n }\n }\n\n return result;\n}\n\n//Asynchronously processes an external style file.\nfunction processExternalStyles(dataSource, resource, styleCollection) {\n return resource.fetchXML().then(function (styleKml) {\n return processStyles(dataSource, styleKml, styleCollection, resource, true);\n });\n}\n\n//Processes all shared and external styles and stores\n//their id into the provided styleCollection.\n//Returns an array of promises that will resolve when\n//each style is loaded.\nfunction processStyles(\n dataSource,\n kml,\n styleCollection,\n sourceResource,\n isExternal,\n uriResolver\n) {\n var i;\n var id;\n var styleEntity;\n\n var node;\n var styleNodes = queryNodes(kml, \"Style\", namespaces.kml);\n if (defined(styleNodes)) {\n var styleNodesLength = styleNodes.length;\n for (i = 0; i < styleNodesLength; i++) {\n node = styleNodes[i];\n id = queryStringAttribute(node, \"id\");\n if (defined(id)) {\n id = \"#\" + id;\n if (isExternal && defined(sourceResource)) {\n id = sourceResource.getUrlComponent() + id;\n }\n if (!defined(styleCollection.getById(id))) {\n styleEntity = new Entity({\n id: id,\n });\n styleCollection.add(styleEntity);\n applyStyle(\n dataSource,\n node,\n styleEntity,\n sourceResource,\n uriResolver\n );\n }\n }\n }\n }\n\n var styleMaps = queryNodes(kml, \"StyleMap\", namespaces.kml);\n if (defined(styleMaps)) {\n var styleMapsLength = styleMaps.length;\n for (i = 0; i < styleMapsLength; i++) {\n var styleMap = styleMaps[i];\n id = queryStringAttribute(styleMap, \"id\");\n if (defined(id)) {\n var pairs = queryChildNodes(styleMap, \"Pair\", namespaces.kml);\n for (var p = 0; p < pairs.length; p++) {\n var pair = pairs[p];\n var key = queryStringValue(pair, \"key\", namespaces.kml);\n if (key === \"normal\") {\n id = \"#\" + id;\n if (isExternal && defined(sourceResource)) {\n id = sourceResource.getUrlComponent() + id;\n }\n if (!defined(styleCollection.getById(id))) {\n styleEntity = styleCollection.getOrCreateEntity(id);\n\n var styleUrl = queryStringValue(pair, \"styleUrl\", namespaces.kml);\n if (defined(styleUrl)) {\n if (styleUrl[0] !== \"#\") {\n styleUrl = \"#\" + styleUrl;\n }\n\n if (isExternal && defined(sourceResource)) {\n styleUrl = sourceResource.getUrlComponent() + styleUrl;\n }\n var base = styleCollection.getById(styleUrl);\n\n if (defined(base)) {\n styleEntity.merge(base);\n }\n } else {\n node = queryFirstNode(pair, \"Style\", namespaces.kml);\n applyStyle(\n dataSource,\n node,\n styleEntity,\n sourceResource,\n uriResolver\n );\n }\n }\n } else {\n oneTimeWarning(\n \"kml-styleMap-\" + key,\n \"KML - Unsupported StyleMap key: \" + key\n );\n }\n }\n }\n }\n }\n\n var promises = [];\n var styleUrlNodes = kml.getElementsByTagName(\"styleUrl\");\n var styleUrlNodesLength = styleUrlNodes.length;\n for (i = 0; i < styleUrlNodesLength; i++) {\n var styleReference = styleUrlNodes[i].textContent;\n if (styleReference[0] !== \"#\") {\n //According to the spec, all local styles should start with a #\n //and everything else is an external style that has a # seperating\n //the URL of the document and the style. However, Google Earth\n //also accepts styleUrls without a # as meaning a local style.\n var tokens = styleReference.split(\"#\");\n if (tokens.length === 2) {\n var uri = tokens[0];\n var resource = sourceResource.getDerivedResource({\n url: uri,\n });\n\n promises.push(\n processExternalStyles(dataSource, resource, styleCollection)\n );\n }\n }\n }\n\n return promises;\n}\n\nfunction createDropLine(entityCollection, entity, styleEntity) {\n var entityPosition = new ReferenceProperty(entityCollection, entity.id, [\n \"position\",\n ]);\n var surfacePosition = new ScaledPositionProperty(entity.position);\n entity.polyline = defined(styleEntity.polyline)\n ? styleEntity.polyline.clone()\n : new PolylineGraphics();\n entity.polyline.positions = new PositionPropertyArray([\n entityPosition,\n surfacePosition,\n ]);\n}\n\nfunction heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode) {\n if (\n (!defined(altitudeMode) && !defined(gxAltitudeMode)) ||\n altitudeMode === \"clampToGround\"\n ) {\n return HeightReference.CLAMP_TO_GROUND;\n }\n\n if (altitudeMode === \"relativeToGround\") {\n return HeightReference.RELATIVE_TO_GROUND;\n }\n\n if (altitudeMode === \"absolute\") {\n return HeightReference.NONE;\n }\n\n if (gxAltitudeMode === \"clampToSeaFloor\") {\n oneTimeWarning(\n \"kml-gx:altitudeMode-clampToSeaFloor\",\n \"KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround.\"\n );\n return HeightReference.CLAMP_TO_GROUND;\n }\n\n if (gxAltitudeMode === \"relativeToSeaFloor\") {\n oneTimeWarning(\n \"kml-gx:altitudeMode-relativeToSeaFloor\",\n \"KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround.\"\n );\n return HeightReference.RELATIVE_TO_GROUND;\n }\n\n if (defined(altitudeMode)) {\n oneTimeWarning(\n \"kml-altitudeMode-unknown\",\n \"KML - Unknown <kml:altitudeMode>:\" +\n altitudeMode +\n \", using <kml:altitudeMode>:CLAMP_TO_GROUND.\"\n );\n } else {\n oneTimeWarning(\n \"kml-gx:altitudeMode-unknown\",\n \"KML - Unknown <gx:altitudeMode>:\" +\n gxAltitudeMode +\n \", using <kml:altitudeMode>:CLAMP_TO_GROUND.\"\n );\n }\n\n // Clamp to ground is the default\n return HeightReference.CLAMP_TO_GROUND;\n}\n\nfunction createPositionPropertyFromAltitudeMode(\n property,\n altitudeMode,\n gxAltitudeMode\n) {\n if (\n gxAltitudeMode === \"relativeToSeaFloor\" ||\n altitudeMode === \"absolute\" ||\n altitudeMode === \"relativeToGround\"\n ) {\n //Just return the ellipsoid referenced property until we support MSL\n return property;\n }\n\n if (\n (defined(altitudeMode) && altitudeMode !== \"clampToGround\") || //\n (defined(gxAltitudeMode) && gxAltitudeMode !== \"clampToSeaFloor\")\n ) {\n oneTimeWarning(\n \"kml-altitudeMode-unknown\",\n \"KML - Unknown altitudeMode: \" +\n defaultValue(altitudeMode, gxAltitudeMode)\n );\n }\n\n // Clamp to ground is the default\n return new ScaledPositionProperty(property);\n}\n\nfunction createPositionPropertyArrayFromAltitudeMode(\n properties,\n altitudeMode,\n gxAltitudeMode,\n ellipsoid\n) {\n if (!defined(properties)) {\n return undefined;\n }\n\n if (\n gxAltitudeMode === \"relativeToSeaFloor\" ||\n altitudeMode === \"absolute\" ||\n altitudeMode === \"relativeToGround\"\n ) {\n //Just return the ellipsoid referenced property until we support MSL\n return properties;\n }\n\n if (\n (defined(altitudeMode) && altitudeMode !== \"clampToGround\") || //\n (defined(gxAltitudeMode) && gxAltitudeMode !== \"clampToSeaFloor\")\n ) {\n oneTimeWarning(\n \"kml-altitudeMode-unknown\",\n \"KML - Unknown altitudeMode: \" +\n defaultValue(altitudeMode, gxAltitudeMode)\n );\n }\n\n // Clamp to ground is the default\n var propertiesLength = properties.length;\n for (var i = 0; i < propertiesLength; i++) {\n var property = properties[i];\n ellipsoid.scaleToGeodeticSurface(property, property);\n }\n return properties;\n}\n\nfunction processPositionGraphics(\n dataSource,\n entity,\n styleEntity,\n heightReference\n) {\n var label = entity.label;\n if (!defined(label)) {\n label = defined(styleEntity.label)\n ? styleEntity.label.clone()\n : createDefaultLabel();\n entity.label = label;\n }\n label.text = entity.name;\n\n var billboard = entity.billboard;\n if (!defined(billboard)) {\n billboard = defined(styleEntity.billboard)\n ? styleEntity.billboard.clone()\n : createDefaultBillboard();\n entity.billboard = billboard;\n }\n\n if (!defined(billboard.image)) {\n billboard.image = dataSource._pinBuilder.fromColor(Color.YELLOW, 64);\n\n // If there were empty <Icon> tags in the KML, then billboard.image was set to false above\n // However, in this case, the false value would have been converted to a property afterwards\n // Thus, we check if billboard.image is defined with value of false\n } else if (!billboard.image.getValue()) {\n billboard.image = undefined;\n }\n\n var scale = 1.0;\n if (defined(billboard.scale)) {\n scale = billboard.scale.getValue();\n if (scale !== 0) {\n label.pixelOffset = new Cartesian2(scale * 16 + 1, 0);\n } else {\n //Minor tweaks to better match Google Earth.\n label.pixelOffset = undefined;\n label.horizontalOrigin = undefined;\n }\n }\n\n if (defined(heightReference) && dataSource._clampToGround) {\n billboard.heightReference = heightReference;\n label.heightReference = heightReference;\n }\n}\n\nfunction processPathGraphics(entity, styleEntity) {\n var path = entity.path;\n if (!defined(path)) {\n path = new PathGraphics();\n path.leadTime = 0;\n entity.path = path;\n }\n\n var polyline = styleEntity.polyline;\n if (defined(polyline)) {\n path.material = polyline.material;\n path.width = polyline.width;\n }\n}\n\nfunction processPoint(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n var coordinatesString = queryStringValue(\n geometryNode,\n \"coordinates\",\n namespaces.kml\n );\n var altitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.kml\n );\n var gxAltitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.gx\n );\n var extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n var ellipsoid = dataSource._ellipsoid;\n var position = readCoordinate(coordinatesString, ellipsoid);\n\n entity.position = position;\n processPositionGraphics(\n dataSource,\n entity,\n styleEntity,\n heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode)\n );\n\n if (extrude && isExtrudable(altitudeMode, gxAltitudeMode)) {\n createDropLine(entityCollection, entity, styleEntity);\n }\n\n return true;\n}\n\nfunction processLineStringOrLinearRing(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n var coordinatesNode = queryFirstNode(\n geometryNode,\n \"coordinates\",\n namespaces.kml\n );\n var altitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.kml\n );\n var gxAltitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.gx\n );\n var extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n var tessellate = queryBooleanValue(\n geometryNode,\n \"tessellate\",\n namespaces.kml\n );\n var canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n var zIndex = queryNumericValue(geometryNode, \"drawOrder\", namespaces.gx);\n\n var ellipsoid = dataSource._ellipsoid;\n var coordinates = readCoordinates(coordinatesNode, ellipsoid);\n var polyline = styleEntity.polyline;\n if (canExtrude && extrude) {\n var wall = new WallGraphics();\n entity.wall = wall;\n wall.positions = coordinates;\n var polygon = styleEntity.polygon;\n\n if (defined(polygon)) {\n wall.fill = polygon.fill;\n wall.material = polygon.material;\n }\n\n //Always outline walls so they show up in 2D.\n wall.outline = true;\n if (defined(polyline)) {\n wall.outlineColor = defined(polyline.material)\n ? polyline.material.color\n : Color.WHITE;\n wall.outlineWidth = polyline.width;\n } else if (defined(polygon)) {\n wall.outlineColor = defined(polygon.material)\n ? polygon.material.color\n : Color.WHITE;\n }\n } else if (dataSource._clampToGround && !canExtrude && tessellate) {\n var polylineGraphics = new PolylineGraphics();\n polylineGraphics.clampToGround = true;\n entity.polyline = polylineGraphics;\n polylineGraphics.positions = coordinates;\n if (defined(polyline)) {\n polylineGraphics.material = defined(polyline.material)\n ? polyline.material.color.getValue(Iso8601.MINIMUM_VALUE)\n : Color.WHITE;\n polylineGraphics.width = defaultValue(polyline.width, 1.0);\n } else {\n polylineGraphics.material = Color.WHITE;\n polylineGraphics.width = 1.0;\n }\n polylineGraphics.zIndex = zIndex;\n } else {\n if (defined(zIndex)) {\n oneTimeWarning(\n \"kml-gx:drawOrder\",\n \"KML - gx:drawOrder is not supported in LineStrings when clampToGround is false\"\n );\n }\n if (dataSource._clampToGround && !tessellate) {\n oneTimeWarning(\n \"kml-line-tesselate\",\n \"Ignoring clampToGround for KML lines without the tessellate flag.\"\n );\n }\n\n polyline = defined(polyline) ? polyline.clone() : new PolylineGraphics();\n entity.polyline = polyline;\n polyline.positions = createPositionPropertyArrayFromAltitudeMode(\n coordinates,\n altitudeMode,\n gxAltitudeMode,\n ellipsoid\n );\n if (!tessellate || canExtrude) {\n polyline.arcType = ArcType.NONE;\n }\n }\n\n return true;\n}\n\nfunction processPolygon(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n var outerBoundaryIsNode = queryFirstNode(\n geometryNode,\n \"outerBoundaryIs\",\n namespaces.kml\n );\n var linearRingNode = queryFirstNode(\n outerBoundaryIsNode,\n \"LinearRing\",\n namespaces.kml\n );\n var coordinatesNode = queryFirstNode(\n linearRingNode,\n \"coordinates\",\n namespaces.kml\n );\n var ellipsoid = dataSource._ellipsoid;\n var coordinates = readCoordinates(coordinatesNode, ellipsoid);\n var extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n var altitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.kml\n );\n var gxAltitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.gx\n );\n var canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n\n var polygon = defined(styleEntity.polygon)\n ? styleEntity.polygon.clone()\n : createDefaultPolygon();\n\n var polyline = styleEntity.polyline;\n if (defined(polyline)) {\n polygon.outlineColor = defined(polyline.material)\n ? polyline.material.color\n : Color.WHITE;\n polygon.outlineWidth = polyline.width;\n }\n entity.polygon = polygon;\n\n if (canExtrude) {\n polygon.perPositionHeight = true;\n polygon.extrudedHeight = extrude ? 0 : undefined;\n } else if (!dataSource._clampToGround) {\n polygon.height = 0;\n }\n\n if (defined(coordinates)) {\n var hierarchy = new PolygonHierarchy(coordinates);\n var innerBoundaryIsNodes = queryChildNodes(\n geometryNode,\n \"innerBoundaryIs\",\n namespaces.kml\n );\n for (var j = 0; j < innerBoundaryIsNodes.length; j++) {\n linearRingNode = queryChildNodes(\n innerBoundaryIsNodes[j],\n \"LinearRing\",\n namespaces.kml\n );\n for (var k = 0; k < linearRingNode.length; k++) {\n coordinatesNode = queryFirstNode(\n linearRingNode[k],\n \"coordinates\",\n namespaces.kml\n );\n coordinates = readCoordinates(coordinatesNode, ellipsoid);\n if (defined(coordinates)) {\n hierarchy.holes.push(new PolygonHierarchy(coordinates));\n }\n }\n }\n polygon.hierarchy = hierarchy;\n }\n\n return true;\n}\n\nfunction processTrack(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n var altitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.kml\n );\n var gxAltitudeMode = queryStringValue(\n geometryNode,\n \"altitudeMode\",\n namespaces.gx\n );\n var coordNodes = queryChildNodes(geometryNode, \"coord\", namespaces.gx);\n var angleNodes = queryChildNodes(geometryNode, \"angles\", namespaces.gx);\n var timeNodes = queryChildNodes(geometryNode, \"when\", namespaces.kml);\n var extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n var canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n var ellipsoid = dataSource._ellipsoid;\n\n if (angleNodes.length > 0) {\n oneTimeWarning(\n \"kml-gx:angles\",\n \"KML - gx:angles are not supported in gx:Tracks\"\n );\n }\n\n var length = Math.min(coordNodes.length, timeNodes.length);\n var coordinates = [];\n var times = [];\n for (var i = 0; i < length; i++) {\n var position = readCoordinate(coordNodes[i].textContent, ellipsoid);\n coordinates.push(position);\n times.push(JulianDate.fromIso8601(timeNodes[i].textContent));\n }\n var property = new SampledPositionProperty();\n property.addSamples(times, coordinates);\n entity.position = property;\n processPositionGraphics(\n dataSource,\n entity,\n styleEntity,\n heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode)\n );\n processPathGraphics(entity, styleEntity);\n\n entity.availability = new TimeIntervalCollection();\n\n if (timeNodes.length > 0) {\n entity.availability.addInterval(\n new TimeInterval({\n start: times[0],\n stop: times[times.length - 1],\n })\n );\n }\n\n if (canExtrude && extrude) {\n createDropLine(entityCollection, entity, styleEntity);\n }\n\n return true;\n}\n\nfunction addToMultiTrack(\n times,\n positions,\n composite,\n availability,\n dropShowProperty,\n extrude,\n altitudeMode,\n gxAltitudeMode,\n includeEndPoints\n) {\n var start = times[0];\n var stop = times[times.length - 1];\n\n var data = new SampledPositionProperty();\n data.addSamples(times, positions);\n\n composite.intervals.addInterval(\n new TimeInterval({\n start: start,\n stop: stop,\n isStartIncluded: includeEndPoints,\n isStopIncluded: includeEndPoints,\n data: createPositionPropertyFromAltitudeMode(\n data,\n altitudeMode,\n gxAltitudeMode\n ),\n })\n );\n availability.addInterval(\n new TimeInterval({\n start: start,\n stop: stop,\n isStartIncluded: includeEndPoints,\n isStopIncluded: includeEndPoints,\n })\n );\n dropShowProperty.intervals.addInterval(\n new TimeInterval({\n start: start,\n stop: stop,\n isStartIncluded: includeEndPoints,\n isStopIncluded: includeEndPoints,\n data: extrude,\n })\n );\n}\n\nfunction processMultiTrack(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n // Multitrack options do not work in GE as detailed in the spec,\n // rather than altitudeMode being at the MultiTrack level,\n // GE just defers all settings to the underlying track.\n\n var interpolate = queryBooleanValue(\n geometryNode,\n \"interpolate\",\n namespaces.gx\n );\n var trackNodes = queryChildNodes(geometryNode, \"Track\", namespaces.gx);\n\n var times;\n var lastStop;\n var lastStopPosition;\n var needDropLine = false;\n var dropShowProperty = new TimeIntervalCollectionProperty();\n var availability = new TimeIntervalCollection();\n var composite = new CompositePositionProperty();\n var ellipsoid = dataSource._ellipsoid;\n for (var i = 0, len = trackNodes.length; i < len; i++) {\n var trackNode = trackNodes[i];\n var timeNodes = queryChildNodes(trackNode, \"when\", namespaces.kml);\n var coordNodes = queryChildNodes(trackNode, \"coord\", namespaces.gx);\n var altitudeMode = queryStringValue(\n trackNode,\n \"altitudeMode\",\n namespaces.kml\n );\n var gxAltitudeMode = queryStringValue(\n trackNode,\n \"altitudeMode\",\n namespaces.gx\n );\n var canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n var extrude = queryBooleanValue(trackNode, \"extrude\", namespaces.kml);\n\n var length = Math.min(coordNodes.length, timeNodes.length);\n\n var positions = [];\n times = [];\n for (var x = 0; x < length; x++) {\n var position = readCoordinate(coordNodes[x].textContent, ellipsoid);\n positions.push(position);\n times.push(JulianDate.fromIso8601(timeNodes[x].textContent));\n }\n\n if (interpolate) {\n //If we are interpolating, then we need to fill in the end of\n //the last track and the beginning of this one with a sampled\n //property. From testing in Google Earth, this property\n //is never extruded and always absolute.\n if (defined(lastStop)) {\n addToMultiTrack(\n [lastStop, times[0]],\n [lastStopPosition, positions[0]],\n composite,\n availability,\n dropShowProperty,\n false,\n \"absolute\",\n undefined,\n false\n );\n }\n lastStop = times[length - 1];\n lastStopPosition = positions[positions.length - 1];\n }\n\n addToMultiTrack(\n times,\n positions,\n composite,\n availability,\n dropShowProperty,\n canExtrude && extrude,\n altitudeMode,\n gxAltitudeMode,\n true\n );\n needDropLine = needDropLine || (canExtrude && extrude);\n }\n\n entity.availability = availability;\n entity.position = composite;\n processPositionGraphics(dataSource, entity, styleEntity);\n processPathGraphics(entity, styleEntity);\n if (needDropLine) {\n createDropLine(entityCollection, entity, styleEntity);\n entity.polyline.show = dropShowProperty;\n }\n\n return true;\n}\n\nvar geometryTypes = {\n Point: processPoint,\n LineString: processLineStringOrLinearRing,\n LinearRing: processLineStringOrLinearRing,\n Polygon: processPolygon,\n Track: processTrack,\n MultiTrack: processMultiTrack,\n MultiGeometry: processMultiGeometry,\n Model: processUnsupportedGeometry,\n};\n\nfunction processMultiGeometry(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity,\n context\n) {\n var childNodes = geometryNode.childNodes;\n var hasGeometry = false;\n for (var i = 0, len = childNodes.length; i < len; i++) {\n var childNode = childNodes.item(i);\n var geometryProcessor = geometryTypes[childNode.localName];\n if (defined(geometryProcessor)) {\n var childEntity = createEntity(childNode, entityCollection, context);\n childEntity.parent = entity;\n childEntity.name = entity.name;\n childEntity.availability = entity.availability;\n childEntity.description = entity.description;\n childEntity.kml = entity.kml;\n if (\n geometryProcessor(\n dataSource,\n entityCollection,\n childNode,\n childEntity,\n styleEntity\n )\n ) {\n hasGeometry = true;\n }\n }\n }\n\n return hasGeometry;\n}\n\nfunction processUnsupportedGeometry(\n dataSource,\n entityCollection,\n geometryNode,\n entity,\n styleEntity\n) {\n oneTimeWarning(\n \"kml-unsupportedGeometry\",\n \"KML - Unsupported geometry: \" + geometryNode.localName\n );\n return false;\n}\n\nfunction processExtendedData(node, entity) {\n var extendedDataNode = queryFirstNode(node, \"ExtendedData\", namespaces.kml);\n\n if (!defined(extendedDataNode)) {\n return undefined;\n }\n\n if (defined(queryFirstNode(extendedDataNode, \"SchemaData\", namespaces.kml))) {\n oneTimeWarning(\"kml-schemaData\", \"KML - SchemaData is unsupported\");\n }\n if (defined(queryStringAttribute(extendedDataNode, \"xmlns:prefix\"))) {\n oneTimeWarning(\n \"kml-extendedData\",\n \"KML - ExtendedData with xmlns:prefix is unsupported\"\n );\n }\n\n var result = {};\n var dataNodes = queryChildNodes(extendedDataNode, \"Data\", namespaces.kml);\n if (defined(dataNodes)) {\n var length = dataNodes.length;\n for (var i = 0; i < length; i++) {\n var dataNode = dataNodes[i];\n var name = queryStringAttribute(dataNode, \"name\");\n if (defined(name)) {\n result[name] = {\n displayName: queryStringValue(\n dataNode,\n \"displayName\",\n namespaces.kml\n ),\n value: queryStringValue(dataNode, \"value\", namespaces.kml),\n };\n }\n }\n }\n entity.kml.extendedData = result;\n}\n\nvar scratchDiv;\nif (typeof document !== \"undefined\") {\n scratchDiv = document.createElement(\"div\");\n}\n\nfunction processDescription(\n node,\n entity,\n styleEntity,\n uriResolver,\n sourceResource\n) {\n var i;\n var key;\n var keys;\n\n var kmlData = entity.kml;\n var extendedData = kmlData.extendedData;\n var description = queryStringValue(node, \"description\", namespaces.kml);\n\n var balloonStyle = defaultValue(\n entity.balloonStyle,\n styleEntity.balloonStyle\n );\n\n var background = Color.WHITE;\n var foreground = Color.BLACK;\n var text = description;\n\n if (defined(balloonStyle)) {\n background = defaultValue(balloonStyle.bgColor, Color.WHITE);\n foreground = defaultValue(balloonStyle.textColor, Color.BLACK);\n text = defaultValue(balloonStyle.text, description);\n }\n\n var value;\n if (defined(text)) {\n text = text.replace(\"$[name]\", defaultValue(entity.name, \"\"));\n text = text.replace(\"$[description]\", defaultValue(description, \"\"));\n text = text.replace(\"$[address]\", defaultValue(kmlData.address, \"\"));\n text = text.replace(\"$[Snippet]\", defaultValue(kmlData.snippet, \"\"));\n text = text.replace(\"$[id]\", entity.id);\n\n //While not explicitly defined by the OGC spec, in Google Earth\n //The appearance of geDirections adds the directions to/from links\n //We simply replace this string with nothing.\n text = text.replace(\"$[geDirections]\", \"\");\n\n if (defined(extendedData)) {\n var matches = text.match(/\\$\\[.+?\\]/g);\n if (matches !== null) {\n for (i = 0; i < matches.length; i++) {\n var token = matches[i];\n var propertyName = token.substr(2, token.length - 3);\n var isDisplayName = /\\/displayName$/.test(propertyName);\n propertyName = propertyName.replace(/\\/displayName$/, \"\");\n\n value = extendedData[propertyName];\n if (defined(value)) {\n value = isDisplayName ? value.displayName : value.value;\n }\n if (defined(value)) {\n text = text.replace(token, defaultValue(value, \"\"));\n }\n }\n }\n }\n } else if (defined(extendedData)) {\n //If no description exists, build a table out of the extended data\n keys = Object.keys(extendedData);\n if (keys.length > 0) {\n text =\n '<table class=\"cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter\"><tbody>';\n for (i = 0; i < keys.length; i++) {\n key = keys[i];\n value = extendedData[key];\n text +=\n \"<tr><th>\" +\n defaultValue(value.displayName, key) +\n \"</th><td>\" +\n defaultValue(value.value, \"\") +\n \"</td></tr>\";\n }\n text += \"</tbody></table>\";\n }\n }\n\n if (!defined(text)) {\n //No description\n return;\n }\n\n //Turns non-explicit links into clickable links.\n text = autolinker.link(text);\n\n //Use a temporary div to manipulate the links\n //so that they open in a new window.\n scratchDiv.innerHTML = text;\n var links = scratchDiv.querySelectorAll(\"a\");\n for (i = 0; i < links.length; i++) {\n links[i].setAttribute(\"target\", \"_blank\");\n }\n\n //Rewrite any KMZ embedded urls\n if (defined(uriResolver) && uriResolver.keys.length > 1) {\n embedDataUris(scratchDiv, \"a\", \"href\", uriResolver);\n embedDataUris(scratchDiv, \"img\", \"src\", uriResolver);\n }\n\n //Make relative urls absolute using the sourceResource\n applyBasePath(scratchDiv, \"a\", \"href\", sourceResource);\n applyBasePath(scratchDiv, \"img\", \"src\", sourceResource);\n\n var tmp = '<div class=\"cesium-infoBox-description-lighter\" style=\"';\n tmp += \"overflow:auto;\";\n tmp += \"word-wrap:break-word;\";\n tmp += \"background-color:\" + background.toCssColorString() + \";\";\n tmp += \"color:\" + foreground.toCssColorString() + \";\";\n tmp += '\">';\n tmp += scratchDiv.innerHTML + \"</div>\";\n scratchDiv.innerHTML = \"\";\n\n //Set the final HTML as the description.\n entity.description = tmp;\n}\n\nfunction processFeature(dataSource, featureNode, processingData) {\n var entityCollection = processingData.entityCollection;\n var parent = processingData.parentEntity;\n var sourceResource = processingData.sourceResource;\n var uriResolver = processingData.uriResolver;\n\n var entity = createEntity(\n featureNode,\n entityCollection,\n processingData.context\n );\n var kmlData = entity.kml;\n var styleEntity = computeFinalStyle(\n dataSource,\n featureNode,\n processingData.styleCollection,\n sourceResource,\n uriResolver\n );\n\n var name = queryStringValue(featureNode, \"name\", namespaces.kml);\n entity.name = name;\n entity.parent = parent;\n\n var availability = processTimeSpan(featureNode);\n if (!defined(availability)) {\n availability = processTimeStamp(featureNode);\n }\n entity.availability = availability;\n\n mergeAvailabilityWithParent(entity);\n\n // Per KML spec \"A Feature is visible only if it and all its ancestors are visible.\"\n function ancestryIsVisible(parentEntity) {\n if (!parentEntity) {\n return true;\n }\n return parentEntity.show && ancestryIsVisible(parentEntity.parent);\n }\n\n var visibility = queryBooleanValue(featureNode, \"visibility\", namespaces.kml);\n entity.show = ancestryIsVisible(parent) && defaultValue(visibility, true);\n //var open = queryBooleanValue(featureNode, 'open', namespaces.kml);\n\n var authorNode = queryFirstNode(featureNode, \"author\", namespaces.atom);\n var author = kmlData.author;\n author.name = queryStringValue(authorNode, \"name\", namespaces.atom);\n author.uri = queryStringValue(authorNode, \"uri\", namespaces.atom);\n author.email = queryStringValue(authorNode, \"email\", namespaces.atom);\n\n var linkNode = queryFirstNode(featureNode, \"link\", namespaces.atom);\n var link = kmlData.link;\n link.href = queryStringAttribute(linkNode, \"href\");\n link.hreflang = queryStringAttribute(linkNode, \"hreflang\");\n link.rel = queryStringAttribute(linkNode, \"rel\");\n link.type = queryStringAttribute(linkNode, \"type\");\n link.title = queryStringAttribute(linkNode, \"title\");\n link.length = queryStringAttribute(linkNode, \"length\");\n\n kmlData.address = queryStringValue(featureNode, \"address\", namespaces.kml);\n kmlData.phoneNumber = queryStringValue(\n featureNode,\n \"phoneNumber\",\n namespaces.kml\n );\n kmlData.snippet = queryStringValue(featureNode, \"Snippet\", namespaces.kml);\n\n processExtendedData(featureNode, entity);\n processDescription(\n featureNode,\n entity,\n styleEntity,\n uriResolver,\n sourceResource\n );\n\n var ellipsoid = dataSource._ellipsoid;\n processLookAt(featureNode, entity, ellipsoid);\n processCamera(featureNode, entity, ellipsoid);\n\n if (defined(queryFirstNode(featureNode, \"Region\", namespaces.kml))) {\n oneTimeWarning(\"kml-region\", \"KML - Placemark Regions are unsupported\");\n }\n\n return {\n entity: entity,\n styleEntity: styleEntity,\n };\n}\n\nfunction processDocument(dataSource, node, processingData, deferredLoading) {\n deferredLoading.addNodes(node.childNodes, processingData);\n deferredLoading.process();\n}\n\nfunction processFolder(dataSource, node, processingData, deferredLoading) {\n var r = processFeature(dataSource, node, processingData);\n var newProcessingData = clone(processingData);\n newProcessingData.parentEntity = r.entity;\n processDocument(dataSource, node, newProcessingData, deferredLoading);\n}\n\nfunction processPlacemark(\n dataSource,\n placemark,\n processingData,\n deferredLoading\n) {\n var r = processFeature(dataSource, placemark, processingData);\n var entity = r.entity;\n var styleEntity = r.styleEntity;\n\n var hasGeometry = false;\n var childNodes = placemark.childNodes;\n for (var i = 0, len = childNodes.length; i < len && !hasGeometry; i++) {\n var childNode = childNodes.item(i);\n var geometryProcessor = geometryTypes[childNode.localName];\n if (defined(geometryProcessor)) {\n // pass the placemark entity id as a context for case of defining multiple child entities together to handle case\n // where some malformed kmls reuse the same id across placemarks, which works in GE, but is not technically to spec.\n geometryProcessor(\n dataSource,\n processingData.entityCollection,\n childNode,\n entity,\n styleEntity,\n entity.id\n );\n hasGeometry = true;\n }\n }\n\n if (!hasGeometry) {\n entity.merge(styleEntity);\n processPositionGraphics(dataSource, entity, styleEntity);\n }\n}\n\nvar playlistNodeProcessors = {\n FlyTo: processTourFlyTo,\n Wait: processTourWait,\n SoundCue: processTourUnsupportedNode,\n AnimatedUpdate: processTourUnsupportedNode,\n TourControl: processTourUnsupportedNode,\n};\n\nfunction processTour(dataSource, node, processingData, deferredLoading) {\n var name = queryStringValue(node, \"name\", namespaces.kml);\n var id = queryStringAttribute(node, \"id\");\n var tour = new KmlTour(name, id);\n\n var playlistNode = queryFirstNode(node, \"Playlist\", namespaces.gx);\n if (playlistNode) {\n var ellipsoid = dataSource._ellipsoid;\n var childNodes = playlistNode.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var entryNode = childNodes[i];\n if (entryNode.localName) {\n var playlistNodeProcessor = playlistNodeProcessors[entryNode.localName];\n if (playlistNodeProcessor) {\n playlistNodeProcessor(tour, entryNode, ellipsoid);\n } else {\n console.log(\n \"Unknown KML Tour playlist entry type \" + entryNode.localName\n );\n }\n }\n }\n }\n\n if (!defined(dataSource.kmlTours)) {\n dataSource.kmlTours = [];\n }\n\n dataSource.kmlTours.push(tour);\n}\n\nfunction processTourUnsupportedNode(tour, entryNode) {\n oneTimeWarning(\"KML Tour unsupported node \" + entryNode.localName);\n}\n\nfunction processTourWait(tour, entryNode) {\n var duration = queryNumericValue(entryNode, \"duration\", namespaces.gx);\n tour.addPlaylistEntry(new KmlTourWait(duration));\n}\n\nfunction processTourFlyTo(tour, entryNode, ellipsoid) {\n var duration = queryNumericValue(entryNode, \"duration\", namespaces.gx);\n var flyToMode = queryStringValue(entryNode, \"flyToMode\", namespaces.gx);\n\n var t = { kml: {} };\n\n processLookAt(entryNode, t, ellipsoid);\n processCamera(entryNode, t, ellipsoid);\n\n var view = t.kml.lookAt || t.kml.camera;\n\n var flyto = new KmlTourFlyTo(duration, flyToMode, view);\n tour.addPlaylistEntry(flyto);\n}\n\nfunction processCamera(featureNode, entity, ellipsoid) {\n var camera = queryFirstNode(featureNode, \"Camera\", namespaces.kml);\n if (defined(camera)) {\n var lon = defaultValue(\n queryNumericValue(camera, \"longitude\", namespaces.kml),\n 0.0\n );\n var lat = defaultValue(\n queryNumericValue(camera, \"latitude\", namespaces.kml),\n 0.0\n );\n var altitude = defaultValue(\n queryNumericValue(camera, \"altitude\", namespaces.kml),\n 0.0\n );\n\n var heading = defaultValue(\n queryNumericValue(camera, \"heading\", namespaces.kml),\n 0.0\n );\n var tilt = defaultValue(\n queryNumericValue(camera, \"tilt\", namespaces.kml),\n 0.0\n );\n var roll = defaultValue(\n queryNumericValue(camera, \"roll\", namespaces.kml),\n 0.0\n );\n\n var position = Cartesian3.fromDegrees(lon, lat, altitude, ellipsoid);\n var hpr = HeadingPitchRoll.fromDegrees(heading, tilt - 90.0, roll);\n\n entity.kml.camera = new KmlCamera(position, hpr);\n }\n}\n\nfunction processLookAt(featureNode, entity, ellipsoid) {\n var lookAt = queryFirstNode(featureNode, \"LookAt\", namespaces.kml);\n if (defined(lookAt)) {\n var lon = defaultValue(\n queryNumericValue(lookAt, \"longitude\", namespaces.kml),\n 0.0\n );\n var lat = defaultValue(\n queryNumericValue(lookAt, \"latitude\", namespaces.kml),\n 0.0\n );\n var altitude = defaultValue(\n queryNumericValue(lookAt, \"altitude\", namespaces.kml),\n 0.0\n );\n var heading = queryNumericValue(lookAt, \"heading\", namespaces.kml);\n var tilt = queryNumericValue(lookAt, \"tilt\", namespaces.kml);\n var range = defaultValue(\n queryNumericValue(lookAt, \"range\", namespaces.kml),\n 0.0\n );\n\n tilt = CesiumMath.toRadians(defaultValue(tilt, 0.0));\n heading = CesiumMath.toRadians(defaultValue(heading, 0.0));\n\n var hpr = new HeadingPitchRange(\n heading,\n tilt - CesiumMath.PI_OVER_TWO,\n range\n );\n var viewPoint = Cartesian3.fromDegrees(lon, lat, altitude, ellipsoid);\n\n entity.kml.lookAt = new KmlLookAt(viewPoint, hpr);\n }\n}\n\nfunction processGroundOverlay(\n dataSource,\n groundOverlay,\n processingData,\n deferredLoading\n) {\n var r = processFeature(dataSource, groundOverlay, processingData);\n var entity = r.entity;\n\n var geometry;\n var isLatLonQuad = false;\n\n var ellipsoid = dataSource._ellipsoid;\n var positions = readCoordinates(\n queryFirstNode(groundOverlay, \"LatLonQuad\", namespaces.gx),\n ellipsoid\n );\n var zIndex = queryNumericValue(groundOverlay, \"drawOrder\", namespaces.kml);\n if (defined(positions)) {\n geometry = createDefaultPolygon();\n geometry.hierarchy = new PolygonHierarchy(positions);\n geometry.zIndex = zIndex;\n entity.polygon = geometry;\n isLatLonQuad = true;\n } else {\n geometry = new RectangleGraphics();\n geometry.zIndex = zIndex;\n entity.rectangle = geometry;\n\n var latLonBox = queryFirstNode(groundOverlay, \"LatLonBox\", namespaces.kml);\n if (defined(latLonBox)) {\n var west = queryNumericValue(latLonBox, \"west\", namespaces.kml);\n var south = queryNumericValue(latLonBox, \"south\", namespaces.kml);\n var east = queryNumericValue(latLonBox, \"east\", namespaces.kml);\n var north = queryNumericValue(latLonBox, \"north\", namespaces.kml);\n\n if (defined(west)) {\n west = CesiumMath.negativePiToPi(CesiumMath.toRadians(west));\n }\n if (defined(south)) {\n south = CesiumMath.clampToLatitudeRange(CesiumMath.toRadians(south));\n }\n if (defined(east)) {\n east = CesiumMath.negativePiToPi(CesiumMath.toRadians(east));\n }\n if (defined(north)) {\n north = CesiumMath.clampToLatitudeRange(CesiumMath.toRadians(north));\n }\n geometry.coordinates = new Rectangle(west, south, east, north);\n\n var rotation = queryNumericValue(latLonBox, \"rotation\", namespaces.kml);\n if (defined(rotation)) {\n var rotationRadians = CesiumMath.toRadians(rotation);\n geometry.rotation = rotationRadians;\n geometry.stRotation = rotationRadians;\n }\n }\n }\n\n var iconNode = queryFirstNode(groundOverlay, \"Icon\", namespaces.kml);\n var href = getIconHref(\n iconNode,\n dataSource,\n processingData.sourceResource,\n processingData.uriResolver,\n true\n );\n if (defined(href)) {\n if (isLatLonQuad) {\n oneTimeWarning(\n \"kml-gx:LatLonQuad\",\n \"KML - gx:LatLonQuad Icon does not support texture projection.\"\n );\n }\n var x = queryNumericValue(iconNode, \"x\", namespaces.gx);\n var y = queryNumericValue(iconNode, \"y\", namespaces.gx);\n var w = queryNumericValue(iconNode, \"w\", namespaces.gx);\n var h = queryNumericValue(iconNode, \"h\", namespaces.gx);\n\n if (defined(x) || defined(y) || defined(w) || defined(h)) {\n oneTimeWarning(\n \"kml-groundOverlay-xywh\",\n \"KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays\"\n );\n }\n\n geometry.material = href;\n geometry.material.color = queryColorValue(\n groundOverlay,\n \"color\",\n namespaces.kml\n );\n geometry.material.transparent = true;\n } else {\n geometry.material = queryColorValue(groundOverlay, \"color\", namespaces.kml);\n }\n\n var altitudeMode = queryStringValue(\n groundOverlay,\n \"altitudeMode\",\n namespaces.kml\n );\n\n if (defined(altitudeMode)) {\n if (altitudeMode === \"absolute\") {\n //Use height above ellipsoid until we support MSL.\n geometry.height = queryNumericValue(\n groundOverlay,\n \"altitude\",\n namespaces.kml\n );\n geometry.zIndex = undefined;\n } else if (altitudeMode !== \"clampToGround\") {\n oneTimeWarning(\n \"kml-altitudeMode-unknown\",\n \"KML - Unknown altitudeMode: \" + altitudeMode\n );\n }\n // else just use the default of 0 until we support 'clampToGround'\n } else {\n altitudeMode = queryStringValue(\n groundOverlay,\n \"altitudeMode\",\n namespaces.gx\n );\n if (altitudeMode === \"relativeToSeaFloor\") {\n oneTimeWarning(\n \"kml-altitudeMode-relativeToSeaFloor\",\n \"KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute.\"\n );\n geometry.height = queryNumericValue(\n groundOverlay,\n \"altitude\",\n namespaces.kml\n );\n geometry.zIndex = undefined;\n } else if (altitudeMode === \"clampToSeaFloor\") {\n oneTimeWarning(\n \"kml-altitudeMode-clampToSeaFloor\",\n \"KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround.\"\n );\n } else if (defined(altitudeMode)) {\n oneTimeWarning(\n \"kml-altitudeMode-unknown\",\n \"KML - Unknown altitudeMode: \" + altitudeMode\n );\n }\n }\n}\n\nfunction processUnsupportedFeature(\n dataSource,\n node,\n processingData,\n deferredLoading\n) {\n dataSource._unsupportedNode.raiseEvent(\n dataSource,\n processingData.parentEntity,\n node,\n processingData.entityCollection,\n processingData.styleCollection,\n processingData.sourceResource,\n processingData.uriResolver\n );\n oneTimeWarning(\n \"kml-unsupportedFeature-\" + node.nodeName,\n \"KML - Unsupported feature: \" + node.nodeName\n );\n}\n\nvar RefreshMode = {\n INTERVAL: 0,\n EXPIRE: 1,\n STOP: 2,\n};\n\nfunction cleanupString(s) {\n if (!defined(s) || s.length === 0) {\n return \"\";\n }\n\n var sFirst = s[0];\n if (sFirst === \"&\" || sFirst === \"?\") {\n s = s.substring(1);\n }\n\n return s;\n}\n\nvar zeroRectangle = new Rectangle();\nvar scratchCartographic = new Cartographic();\nvar scratchCartesian2 = new Cartesian2();\nvar scratchCartesian3 = new Cartesian3();\n\nfunction processNetworkLinkQueryString(\n resource,\n camera,\n canvas,\n viewBoundScale,\n bbox,\n ellipsoid\n) {\n function fixLatitude(value) {\n if (value < -CesiumMath.PI_OVER_TWO) {\n return -CesiumMath.PI_OVER_TWO;\n } else if (value > CesiumMath.PI_OVER_TWO) {\n return CesiumMath.PI_OVER_TWO;\n }\n return value;\n }\n\n function fixLongitude(value) {\n if (value > CesiumMath.PI) {\n return value - CesiumMath.TWO_PI;\n } else if (value < -CesiumMath.PI) {\n return value + CesiumMath.TWO_PI;\n }\n\n return value;\n }\n\n var queryString = objectToQuery(resource.queryParameters);\n\n // objectToQuery escapes [ and ], so fix that\n queryString = queryString.replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n\n if (defined(camera) && camera._mode !== SceneMode.MORPHING) {\n var centerCartesian;\n var centerCartographic;\n\n bbox = defaultValue(bbox, zeroRectangle);\n if (defined(canvas)) {\n scratchCartesian2.x = canvas.clientWidth * 0.5;\n scratchCartesian2.y = canvas.clientHeight * 0.5;\n centerCartesian = camera.pickEllipsoid(\n scratchCartesian2,\n ellipsoid,\n scratchCartesian3\n );\n }\n\n if (defined(centerCartesian)) {\n centerCartographic = ellipsoid.cartesianToCartographic(\n centerCartesian,\n scratchCartographic\n );\n } else {\n centerCartographic = Rectangle.center(bbox, scratchCartographic);\n centerCartesian = ellipsoid.cartographicToCartesian(centerCartographic);\n }\n\n if (\n defined(viewBoundScale) &&\n !CesiumMath.equalsEpsilon(viewBoundScale, 1.0, CesiumMath.EPSILON9)\n ) {\n var newHalfWidth = bbox.width * viewBoundScale * 0.5;\n var newHalfHeight = bbox.height * viewBoundScale * 0.5;\n bbox = new Rectangle(\n fixLongitude(centerCartographic.longitude - newHalfWidth),\n fixLatitude(centerCartographic.latitude - newHalfHeight),\n fixLongitude(centerCartographic.longitude + newHalfWidth),\n fixLatitude(centerCartographic.latitude + newHalfHeight)\n );\n }\n\n queryString = queryString.replace(\n \"[bboxWest]\",\n CesiumMath.toDegrees(bbox.west).toString()\n );\n queryString = queryString.replace(\n \"[bboxSouth]\",\n CesiumMath.toDegrees(bbox.south).toString()\n );\n queryString = queryString.replace(\n \"[bboxEast]\",\n CesiumMath.toDegrees(bbox.east).toString()\n );\n queryString = queryString.replace(\n \"[bboxNorth]\",\n CesiumMath.toDegrees(bbox.north).toString()\n );\n\n var lon = CesiumMath.toDegrees(centerCartographic.longitude).toString();\n var lat = CesiumMath.toDegrees(centerCartographic.latitude).toString();\n queryString = queryString.replace(\"[lookatLon]\", lon);\n queryString = queryString.replace(\"[lookatLat]\", lat);\n queryString = queryString.replace(\n \"[lookatTilt]\",\n CesiumMath.toDegrees(camera.pitch).toString()\n );\n queryString = queryString.replace(\n \"[lookatHeading]\",\n CesiumMath.toDegrees(camera.heading).toString()\n );\n queryString = queryString.replace(\n \"[lookatRange]\",\n Cartesian3.distance(camera.positionWC, centerCartesian)\n );\n queryString = queryString.replace(\"[lookatTerrainLon]\", lon);\n queryString = queryString.replace(\"[lookatTerrainLat]\", lat);\n queryString = queryString.replace(\n \"[lookatTerrainAlt]\",\n centerCartographic.height.toString()\n );\n\n ellipsoid.cartesianToCartographic(camera.positionWC, scratchCartographic);\n queryString = queryString.replace(\n \"[cameraLon]\",\n CesiumMath.toDegrees(scratchCartographic.longitude).toString()\n );\n queryString = queryString.replace(\n \"[cameraLat]\",\n CesiumMath.toDegrees(scratchCartographic.latitude).toString()\n );\n queryString = queryString.replace(\n \"[cameraAlt]\",\n CesiumMath.toDegrees(scratchCartographic.height).toString()\n );\n\n var frustum = camera.frustum;\n var aspectRatio = frustum.aspectRatio;\n var horizFov = \"\";\n var vertFov = \"\";\n if (defined(aspectRatio)) {\n var fov = CesiumMath.toDegrees(frustum.fov);\n if (aspectRatio > 1.0) {\n horizFov = fov;\n vertFov = fov / aspectRatio;\n } else {\n vertFov = fov;\n horizFov = fov * aspectRatio;\n }\n }\n queryString = queryString.replace(\"[horizFov]\", horizFov.toString());\n queryString = queryString.replace(\"[vertFov]\", vertFov.toString());\n } else {\n queryString = queryString.replace(\"[bboxWest]\", \"-180\");\n queryString = queryString.replace(\"[bboxSouth]\", \"-90\");\n queryString = queryString.replace(\"[bboxEast]\", \"180\");\n queryString = queryString.replace(\"[bboxNorth]\", \"90\");\n\n queryString = queryString.replace(\"[lookatLon]\", \"\");\n queryString = queryString.replace(\"[lookatLat]\", \"\");\n queryString = queryString.replace(\"[lookatRange]\", \"\");\n queryString = queryString.replace(\"[lookatTilt]\", \"\");\n queryString = queryString.replace(\"[lookatHeading]\", \"\");\n queryString = queryString.replace(\"[lookatTerrainLon]\", \"\");\n queryString = queryString.replace(\"[lookatTerrainLat]\", \"\");\n queryString = queryString.replace(\"[lookatTerrainAlt]\", \"\");\n\n queryString = queryString.replace(\"[cameraLon]\", \"\");\n queryString = queryString.replace(\"[cameraLat]\", \"\");\n queryString = queryString.replace(\"[cameraAlt]\", \"\");\n queryString = queryString.replace(\"[horizFov]\", \"\");\n queryString = queryString.replace(\"[vertFov]\", \"\");\n }\n\n if (defined(canvas)) {\n queryString = queryString.replace(\"[horizPixels]\", canvas.clientWidth);\n queryString = queryString.replace(\"[vertPixels]\", canvas.clientHeight);\n } else {\n queryString = queryString.replace(\"[horizPixels]\", \"\");\n queryString = queryString.replace(\"[vertPixels]\", \"\");\n }\n\n queryString = queryString.replace(\"[terrainEnabled]\", \"1\");\n queryString = queryString.replace(\"[clientVersion]\", \"1\");\n queryString = queryString.replace(\"[kmlVersion]\", \"2.2\");\n queryString = queryString.replace(\"[clientName]\", \"Cesium\");\n queryString = queryString.replace(\"[language]\", \"English\");\n\n resource.setQueryParameters(queryToObject(queryString));\n}\n\nfunction processNetworkLink(dataSource, node, processingData, deferredLoading) {\n var r = processFeature(dataSource, node, processingData);\n var networkEntity = r.entity;\n\n var sourceResource = processingData.sourceResource;\n var uriResolver = processingData.uriResolver;\n\n var link = queryFirstNode(node, \"Link\", namespaces.kml);\n\n if (!defined(link)) {\n link = queryFirstNode(node, \"Url\", namespaces.kml);\n }\n if (defined(link)) {\n var href = queryStringValue(link, \"href\", namespaces.kml);\n var viewRefreshMode;\n var viewBoundScale;\n if (defined(href)) {\n var newSourceUri = href;\n href = resolveHref(href, sourceResource, processingData.uriResolver);\n\n // We need to pass in the original path if resolveHref returns a data uri because the network link\n // references a document in a KMZ archive\n if (/^data:/.test(href.getUrlComponent())) {\n // So if sourceUri isn't the kmz file, then its another kml in the archive, so resolve it\n if (!/\\.kmz/i.test(sourceResource.getUrlComponent())) {\n newSourceUri = sourceResource.getDerivedResource({\n url: newSourceUri,\n });\n }\n } else {\n newSourceUri = href.clone(); // Not a data uri so use the fully qualified uri\n viewRefreshMode = queryStringValue(\n link,\n \"viewRefreshMode\",\n namespaces.kml\n );\n viewBoundScale = defaultValue(\n queryStringValue(link, \"viewBoundScale\", namespaces.kml),\n 1.0\n );\n var defaultViewFormat =\n viewRefreshMode === \"onStop\"\n ? \"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]\"\n : \"\";\n var viewFormat = defaultValue(\n queryStringValue(link, \"viewFormat\", namespaces.kml),\n defaultViewFormat\n );\n var httpQuery = queryStringValue(link, \"httpQuery\", namespaces.kml);\n if (defined(viewFormat)) {\n href.setQueryParameters(queryToObject(cleanupString(viewFormat)));\n }\n if (defined(httpQuery)) {\n href.setQueryParameters(queryToObject(cleanupString(httpQuery)));\n }\n\n var ellipsoid = dataSource._ellipsoid;\n processNetworkLinkQueryString(\n href,\n dataSource._camera,\n dataSource._canvas,\n viewBoundScale,\n dataSource._lastCameraView.bbox,\n ellipsoid\n );\n }\n\n var options = {\n sourceUri: newSourceUri,\n uriResolver: uriResolver,\n context: networkEntity.id,\n };\n var networkLinkCollection = new EntityCollection();\n var promise = load(dataSource, networkLinkCollection, href, options)\n .then(function (rootElement) {\n var entities = dataSource._entityCollection;\n var newEntities = networkLinkCollection.values;\n entities.suspendEvents();\n for (var i = 0; i < newEntities.length; i++) {\n var newEntity = newEntities[i];\n if (!defined(newEntity.parent)) {\n newEntity.parent = networkEntity;\n mergeAvailabilityWithParent(newEntity);\n }\n\n entities.add(newEntity);\n }\n entities.resumeEvents();\n\n // Add network links to a list if we need they will need to be updated\n var refreshMode = queryStringValue(\n link,\n \"refreshMode\",\n namespaces.kml\n );\n var refreshInterval = defaultValue(\n queryNumericValue(link, \"refreshInterval\", namespaces.kml),\n 0\n );\n if (\n (refreshMode === \"onInterval\" && refreshInterval > 0) ||\n refreshMode === \"onExpire\" ||\n viewRefreshMode === \"onStop\"\n ) {\n var networkLinkControl = queryFirstNode(\n rootElement,\n \"NetworkLinkControl\",\n namespaces.kml\n );\n var hasNetworkLinkControl = defined(networkLinkControl);\n\n var now = JulianDate.now();\n var networkLinkInfo = {\n id: createGuid(),\n href: href,\n cookie: {},\n lastUpdated: now,\n updating: false,\n entity: networkEntity,\n viewBoundScale: viewBoundScale,\n needsUpdate: false,\n cameraUpdateTime: now,\n };\n\n var minRefreshPeriod = 0;\n if (hasNetworkLinkControl) {\n networkLinkInfo.cookie = queryToObject(\n defaultValue(\n queryStringValue(\n networkLinkControl,\n \"cookie\",\n namespaces.kml\n ),\n \"\"\n )\n );\n minRefreshPeriod = defaultValue(\n queryNumericValue(\n networkLinkControl,\n \"minRefreshPeriod\",\n namespaces.kml\n ),\n 0\n );\n }\n\n if (refreshMode === \"onInterval\") {\n if (hasNetworkLinkControl) {\n refreshInterval = Math.max(minRefreshPeriod, refreshInterval);\n }\n networkLinkInfo.refreshMode = RefreshMode.INTERVAL;\n networkLinkInfo.time = refreshInterval;\n } else if (refreshMode === \"onExpire\") {\n var expires;\n if (hasNetworkLinkControl) {\n expires = queryStringValue(\n networkLinkControl,\n \"expires\",\n namespaces.kml\n );\n }\n if (defined(expires)) {\n try {\n var date = JulianDate.fromIso8601(expires);\n var diff = JulianDate.secondsDifference(date, now);\n if (diff > 0 && diff < minRefreshPeriod) {\n JulianDate.addSeconds(now, minRefreshPeriod, date);\n }\n networkLinkInfo.refreshMode = RefreshMode.EXPIRE;\n networkLinkInfo.time = date;\n } catch (e) {\n oneTimeWarning(\n \"kml-refreshMode-onInterval-onExpire\",\n \"KML - NetworkLinkControl expires is not a valid date\"\n );\n }\n } else {\n oneTimeWarning(\n \"kml-refreshMode-onExpire\",\n \"KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element\"\n );\n }\n } else if (dataSource._camera) {\n // Only allow onStop refreshes if we have a camera\n networkLinkInfo.refreshMode = RefreshMode.STOP;\n networkLinkInfo.time = defaultValue(\n queryNumericValue(link, \"viewRefreshTime\", namespaces.kml),\n 0\n );\n } else {\n oneTimeWarning(\n \"kml-refrehMode-onStop-noCamera\",\n \"A NetworkLink with viewRefreshMode=onStop requires a camera be passed in when creating the KmlDataSource\"\n );\n }\n\n if (defined(networkLinkInfo.refreshMode)) {\n dataSource._networkLinks.set(networkLinkInfo.id, networkLinkInfo);\n }\n } else if (viewRefreshMode === \"onRegion\") {\n oneTimeWarning(\n \"kml-refrehMode-onRegion\",\n \"KML - Unsupported viewRefreshMode: onRegion\"\n );\n }\n })\n .otherwise(function (error) {\n oneTimeWarning(\"An error occured during loading \" + href.url);\n dataSource._error.raiseEvent(dataSource, error);\n });\n\n deferredLoading.addPromise(promise);\n }\n }\n}\n\nfunction processFeatureNode(dataSource, node, processingData, deferredLoading) {\n var featureProcessor = featureTypes[node.localName];\n if (defined(featureProcessor)) {\n return featureProcessor(dataSource, node, processingData, deferredLoading);\n }\n\n return processUnsupportedFeature(\n dataSource,\n node,\n processingData,\n deferredLoading\n );\n}\n\nfunction loadKml(\n dataSource,\n entityCollection,\n kml,\n sourceResource,\n uriResolver,\n context\n) {\n entityCollection.removeAll();\n\n var documentElement = kml.documentElement;\n var document =\n documentElement.localName === \"Document\"\n ? documentElement\n : queryFirstNode(documentElement, \"Document\", namespaces.kml);\n var name = queryStringValue(document, \"name\", namespaces.kml);\n if (!defined(name)) {\n name = getFilenameFromUri(sourceResource.getUrlComponent());\n }\n\n // Only set the name from the root document\n if (!defined(dataSource._name)) {\n dataSource._name = name;\n }\n\n var deferredLoading = new KmlDataSource._DeferredLoading(dataSource);\n var styleCollection = new EntityCollection(dataSource);\n return when\n .all(\n processStyles(\n dataSource,\n kml,\n styleCollection,\n sourceResource,\n false,\n uriResolver\n )\n )\n .then(function () {\n var element = kml.documentElement;\n if (element.localName === \"kml\") {\n var childNodes = element.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var tmp = childNodes[i];\n if (defined(featureTypes[tmp.localName])) {\n element = tmp;\n break;\n }\n }\n }\n\n var processingData = {\n parentEntity: undefined,\n entityCollection: entityCollection,\n styleCollection: styleCollection,\n sourceResource: sourceResource,\n uriResolver: uriResolver,\n context: context,\n };\n\n entityCollection.suspendEvents();\n processFeatureNode(dataSource, element, processingData, deferredLoading);\n entityCollection.resumeEvents();\n\n return deferredLoading.wait().then(function () {\n return kml.documentElement;\n });\n });\n}\n\nfunction loadKmz(dataSource, entityCollection, blob, sourceResource) {\n var deferred = when.defer();\n zip.createReader(\n new zip.BlobReader(blob),\n function (reader) {\n reader.getEntries(function (entries) {\n var promises = [];\n var uriResolver = {};\n var docEntry;\n var docDefer;\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n if (!entry.directory) {\n var innerDefer = when.defer();\n promises.push(innerDefer.promise);\n if (/\\.kml$/i.test(entry.filename)) {\n // We use the first KML document we come across\n // https://developers.google.com/kml/documentation/kmzarchives\n // Unless we come across a .kml file at the root of the archive because GE does this\n if (!defined(docEntry) || !/\\//i.test(entry.filename)) {\n if (defined(docEntry)) {\n // We found one at the root so load the initial kml as a data uri\n loadDataUriFromZip(docEntry, uriResolver, docDefer);\n }\n docEntry = entry;\n docDefer = innerDefer;\n } else {\n // Wasn't the first kml and wasn't at the root\n loadDataUriFromZip(entry, uriResolver, innerDefer);\n }\n } else {\n loadDataUriFromZip(entry, uriResolver, innerDefer);\n }\n }\n }\n\n // Now load the root KML document\n if (defined(docEntry)) {\n loadXmlFromZip(docEntry, uriResolver, docDefer);\n }\n when\n .all(promises)\n .then(function () {\n reader.close();\n if (!defined(uriResolver.kml)) {\n deferred.reject(\n new RuntimeError(\"KMZ file does not contain a KML document.\")\n );\n return;\n }\n uriResolver.keys = Object.keys(uriResolver);\n return loadKml(\n dataSource,\n entityCollection,\n uriResolver.kml,\n sourceResource,\n uriResolver\n );\n })\n .then(deferred.resolve)\n .otherwise(deferred.reject);\n });\n },\n function (e) {\n deferred.reject(e);\n }\n );\n\n return deferred.promise;\n}\n\nfunction load(dataSource, entityCollection, data, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var sourceUri = options.sourceUri;\n var uriResolver = options.uriResolver;\n var context = options.context;\n\n var promise = data;\n if (typeof data === \"string\" || data instanceof Resource) {\n data = Resource.createIfNeeded(data);\n promise = data.fetchBlob();\n sourceUri = defaultValue(sourceUri, data.clone());\n\n // Add resource credits to our list of credits to display\n var resourceCredits = dataSource._resourceCredits;\n var credits = data.credits;\n if (defined(credits)) {\n var length = credits.length;\n for (var i = 0; i < length; i++) {\n resourceCredits.push(credits[i]);\n }\n }\n } else {\n sourceUri = defaultValue(sourceUri, Resource.DEFAULT.clone());\n }\n\n sourceUri = Resource.createIfNeeded(sourceUri);\n\n return when(promise)\n .then(function (dataToLoad) {\n if (dataToLoad instanceof Blob) {\n return isZipFile(dataToLoad).then(function (isZip) {\n if (isZip) {\n return loadKmz(dataSource, entityCollection, dataToLoad, sourceUri);\n }\n return readBlobAsText(dataToLoad).then(function (text) {\n //There's no official way to validate if a parse was successful.\n //The following check detects the error on various browsers.\n\n //Insert missing namespaces\n text = insertNamespaces(text);\n\n //Remove Duplicate Namespaces\n text = removeDuplicateNamespaces(text);\n\n //IE raises an exception\n var kml;\n var error;\n try {\n kml = parser.parseFromString(text, \"application/xml\");\n } catch (e) {\n error = e.toString();\n }\n\n //The parse succeeds on Chrome and Firefox, but the error\n //handling is different in each.\n if (\n defined(error) ||\n kml.body ||\n kml.documentElement.tagName === \"parsererror\"\n ) {\n //Firefox has error information as the firstChild nodeValue.\n var msg = defined(error)\n ? error\n : kml.documentElement.firstChild.nodeValue;\n\n //Chrome has it in the body text.\n if (!msg) {\n msg = kml.body.innerText;\n }\n\n //Return the error\n throw new RuntimeError(msg);\n }\n return loadKml(\n dataSource,\n entityCollection,\n kml,\n sourceUri,\n uriResolver,\n context\n );\n });\n });\n }\n return loadKml(\n dataSource,\n entityCollection,\n dataToLoad,\n sourceUri,\n uriResolver,\n context\n );\n })\n .otherwise(function (error) {\n dataSource._error.raiseEvent(dataSource, error);\n console.log(error);\n return when.reject(error);\n });\n}\n\n/**\n * @typedef {Object} KmlDataSource.LoadOptions\n *\n * Initialization options for the `load` method.\n *\n * @property {Camera} camera The camera that is used for viewRefreshModes and sending camera properties to network links.\n * @property {HTMLCanvasElement} canvas The canvas that is used for sending viewer properties to network links.\n * @property {String} [sourceUri] Overrides the url to use for resolving relative links and other KML network features.\n * @property {Boolean} [clampToGround=false] true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The global ellipsoid used for geographical calculations.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * A {@link DataSource} which processes Keyhole Markup Language 2.2 (KML).\n * <p>\n * KML support in Cesium is incomplete, but a large amount of the standard,\n * as well as Google's <code>gx</code> extension namespace, is supported. See Github issue\n * {@link https://github.com/CesiumGS/cesium/issues/873|#873} for a\n * detailed list of what is and isn't support. Cesium will also write information to the\n * console when it encounters most unsupported features.\n * </p>\n * <p>\n * Non visual feature data, such as <code>atom:author</code> and <code>ExtendedData</code>\n * is exposed via an instance of {@link KmlFeatureData}, which is added to each {@link Entity}\n * under the <code>kml</code> property.\n * </p>\n *\n * @alias KmlDataSource\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {Camera} options.camera The camera that is used for viewRefreshModes and sending camera properties to network links.\n * @param {HTMLCanvasElement} options.canvas The canvas that is used for sending viewer properties to network links.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The global ellipsoid used for geographical calculations.\n * @param {Credit|String} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @see {@link http://www.opengeospatial.org/standards/kml/|Open Geospatial Consortium KML Standard}\n * @see {@link https://developers.google.com/kml/|Google KML Documentation}\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=KML.html|Cesium Sandcastle KML Demo}\n *\n * @example\n * var viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.dataSources.add(Cesium.KmlDataSource.load('../../SampleData/facilities.kmz',\n * {\n * camera: viewer.scene.camera,\n * canvas: viewer.scene.canvas\n * })\n * );\n */\nfunction KmlDataSource(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var camera = options.camera;\n var canvas = options.canvas;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(camera)) {\n throw new DeveloperError(\"options.camera is required.\");\n }\n if (!defined(canvas)) {\n throw new DeveloperError(\"options.canvas is required.\");\n }\n //>>includeEnd('debug');\n\n this._changed = new Event();\n this._error = new Event();\n this._loading = new Event();\n this._refresh = new Event();\n this._unsupportedNode = new Event();\n\n this._clock = undefined;\n this._entityCollection = new EntityCollection(this);\n this._name = undefined;\n this._isLoading = false;\n this._pinBuilder = new PinBuilder();\n this._networkLinks = new AssociativeArray();\n this._entityCluster = new EntityCluster();\n\n this._canvas = canvas;\n this._camera = camera;\n this._lastCameraView = {\n position: defined(camera) ? Cartesian3.clone(camera.positionWC) : undefined,\n direction: defined(camera)\n ? Cartesian3.clone(camera.directionWC)\n : undefined,\n up: defined(camera) ? Cartesian3.clone(camera.upWC) : undefined,\n bbox: defined(camera)\n ? camera.computeViewRectangle()\n : Rectangle.clone(Rectangle.MAX_VALUE),\n };\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\n\n // User specified credit\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n // Create a list of Credit's from the resource that the user can't remove\n this._resourceCredits = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided KML data.\n *\n * @param {Resource|String|Document|Blob} data A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.\n * @param {KmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise.<KmlDataSource>} A promise that will resolve to a new KmlDataSource instance once the KML is loaded.\n */\nKmlDataSource.load = function (data, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var dataSource = new KmlDataSource(options);\n return dataSource.load(data, options);\n};\n\nObject.defineProperties(KmlDataSource.prototype, {\n /**\n * Gets or sets a human-readable name for this instance.\n * This will be automatically be set to the KML document name on load.\n * @memberof KmlDataSource.prototype\n * @type {String}\n */\n name: {\n get: function () {\n return this._name;\n },\n set: function (value) {\n if (this._name !== value) {\n this._name = value;\n this._changed.raiseEvent(this);\n }\n },\n },\n /**\n * Gets the clock settings defined by the loaded KML. This represents the total\n * availability interval for all time-dynamic data. If the KML does not contain\n * time-dynamic data, this value is undefined.\n * @memberof KmlDataSource.prototype\n * @type {DataSourceClock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n },\n /**\n * Gets the collection of {@link Entity} instances.\n * @memberof KmlDataSource.prototype\n * @type {EntityCollection}\n */\n entities: {\n get: function () {\n return this._entityCollection;\n },\n },\n /**\n * Gets a value indicating if the data source is currently loading data.\n * @memberof KmlDataSource.prototype\n * @type {Boolean}\n */\n isLoading: {\n get: function () {\n return this._isLoading;\n },\n },\n /**\n * Gets an event that will be raised when the underlying data changes.\n * @memberof KmlDataSource.prototype\n * @type {Event}\n */\n changedEvent: {\n get: function () {\n return this._changed;\n },\n },\n /**\n * Gets an event that will be raised if an error is encountered during processing.\n * @memberof KmlDataSource.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._error;\n },\n },\n /**\n * Gets an event that will be raised when the data source either starts or stops loading.\n * @memberof KmlDataSource.prototype\n * @type {Event}\n */\n loadingEvent: {\n get: function () {\n return this._loading;\n },\n },\n /**\n * Gets an event that will be raised when the data source refreshes a network link.\n * @memberof KmlDataSource.prototype\n * @type {Event}\n */\n refreshEvent: {\n get: function () {\n return this._refresh;\n },\n },\n /**\n * Gets an event that will be raised when the data source finds an unsupported node type.\n * @memberof KmlDataSource.prototype\n * @type {Event}\n */\n unsupportedNodeEvent: {\n get: function () {\n return this._unsupportedNode;\n },\n },\n /**\n * Gets whether or not this data source should be displayed.\n * @memberof KmlDataSource.prototype\n * @type {Boolean}\n */\n show: {\n get: function () {\n return this._entityCollection.show;\n },\n set: function (value) {\n this._entityCollection.show = value;\n },\n },\n\n /**\n * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n *\n * @memberof KmlDataSource.prototype\n * @type {EntityCluster}\n */\n clustering: {\n get: function () {\n return this._entityCluster;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value must be defined.\");\n }\n //>>includeEnd('debug');\n this._entityCluster = value;\n },\n },\n /**\n * Gets the credit that will be displayed for the data source\n * @memberof KmlDataSource.prototype\n * @type {Credit}\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n});\n\n/**\n * Asynchronously loads the provided KML data, replacing any existing data.\n *\n * @param {Resource|String|Document|Blob} data A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.\n * @param {Object} [options] An object with the following properties:\n * @param {Resource|String} [options.sourceUri] Overrides the url to use for resolving relative links and other KML network features.\n * @param {Boolean} [options.clampToGround=false] true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground. If true, lines will use corridors so use Entity.corridor instead of Entity.polyline.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The global ellipsoid used for geographical calculations.\n *\n * @returns {Promise.<KmlDataSource>} A promise that will resolve to this instances once the KML is loaded.\n */\nKmlDataSource.prototype.load = function (data, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(data)) {\n throw new DeveloperError(\"data is required.\");\n }\n //>>includeEnd('debug');\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n DataSource.setLoading(this, true);\n\n var oldName = this._name;\n this._name = undefined;\n this._clampToGround = defaultValue(options.clampToGround, false);\n\n var that = this;\n return load(this, this._entityCollection, data, options)\n .then(function () {\n var clock;\n\n var availability = that._entityCollection.computeAvailability();\n\n var start = availability.start;\n var stop = availability.stop;\n var isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n var isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n if (!isMinStart || !isMaxStop) {\n var date;\n\n //If start is min time just start at midnight this morning, local time\n if (isMinStart) {\n date = new Date();\n date.setHours(0, 0, 0, 0);\n start = JulianDate.fromDate(date);\n }\n\n //If stop is max value just stop at midnight tonight, local time\n if (isMaxStop) {\n date = new Date();\n date.setHours(24, 0, 0, 0);\n stop = JulianDate.fromDate(date);\n }\n\n clock = new DataSourceClock();\n clock.startTime = start;\n clock.stopTime = stop;\n clock.currentTime = JulianDate.clone(start);\n clock.clockRange = ClockRange.LOOP_STOP;\n clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n clock.multiplier = Math.round(\n Math.min(\n Math.max(JulianDate.secondsDifference(stop, start) / 60, 1),\n 3.15569e7\n )\n );\n }\n\n var changed = false;\n if (clock !== that._clock) {\n that._clock = clock;\n changed = true;\n }\n\n if (oldName !== that._name) {\n changed = true;\n }\n\n if (changed) {\n that._changed.raiseEvent(that);\n }\n\n DataSource.setLoading(that, false);\n\n return that;\n })\n .otherwise(function (error) {\n DataSource.setLoading(that, false);\n that._error.raiseEvent(that, error);\n console.log(error);\n return when.reject(error);\n });\n};\n\nfunction mergeAvailabilityWithParent(child) {\n var parent = child.parent;\n if (defined(parent)) {\n var parentAvailability = parent.availability;\n if (defined(parentAvailability)) {\n var childAvailability = child.availability;\n if (defined(childAvailability)) {\n childAvailability.intersect(parentAvailability);\n } else {\n child.availability = parentAvailability;\n }\n }\n }\n}\n\nfunction getNetworkLinkUpdateCallback(\n dataSource,\n networkLink,\n newEntityCollection,\n networkLinks,\n processedHref\n) {\n return function (rootElement) {\n if (!networkLinks.contains(networkLink.id)) {\n // Got into the odd case where a parent network link was updated while a child\n // network link update was in flight, so just throw it away.\n return;\n }\n var remove = false;\n var networkLinkControl = queryFirstNode(\n rootElement,\n \"NetworkLinkControl\",\n namespaces.kml\n );\n var hasNetworkLinkControl = defined(networkLinkControl);\n\n var minRefreshPeriod = 0;\n if (hasNetworkLinkControl) {\n if (\n defined(queryFirstNode(networkLinkControl, \"Update\", namespaces.kml))\n ) {\n oneTimeWarning(\n \"kml-networkLinkControl-update\",\n \"KML - NetworkLinkControl updates aren't supported.\"\n );\n networkLink.updating = false;\n networkLinks.remove(networkLink.id);\n return;\n }\n networkLink.cookie = queryToObject(\n defaultValue(\n queryStringValue(networkLinkControl, \"cookie\", namespaces.kml),\n \"\"\n )\n );\n minRefreshPeriod = defaultValue(\n queryNumericValue(\n networkLinkControl,\n \"minRefreshPeriod\",\n namespaces.kml\n ),\n 0\n );\n }\n\n var now = JulianDate.now();\n var refreshMode = networkLink.refreshMode;\n if (refreshMode === RefreshMode.INTERVAL) {\n if (defined(networkLinkControl)) {\n networkLink.time = Math.max(minRefreshPeriod, networkLink.time);\n }\n } else if (refreshMode === RefreshMode.EXPIRE) {\n var expires;\n if (defined(networkLinkControl)) {\n expires = queryStringValue(\n networkLinkControl,\n \"expires\",\n namespaces.kml\n );\n }\n if (defined(expires)) {\n try {\n var date = JulianDate.fromIso8601(expires);\n var diff = JulianDate.secondsDifference(date, now);\n if (diff > 0 && diff < minRefreshPeriod) {\n JulianDate.addSeconds(now, minRefreshPeriod, date);\n }\n networkLink.time = date;\n } catch (e) {\n oneTimeWarning(\n \"kml-networkLinkControl-expires\",\n \"KML - NetworkLinkControl expires is not a valid date\"\n );\n remove = true;\n }\n } else {\n oneTimeWarning(\n \"kml-refreshMode-onExpire\",\n \"KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element\"\n );\n remove = true;\n }\n }\n\n var networkLinkEntity = networkLink.entity;\n var entityCollection = dataSource._entityCollection;\n var newEntities = newEntityCollection.values;\n\n function removeChildren(entity) {\n entityCollection.remove(entity);\n var children = entity._children;\n var count = children.length;\n for (var i = 0; i < count; ++i) {\n removeChildren(children[i]);\n }\n }\n\n // Remove old entities\n entityCollection.suspendEvents();\n var entitiesCopy = entityCollection.values.slice();\n var i;\n for (i = 0; i < entitiesCopy.length; ++i) {\n var entityToRemove = entitiesCopy[i];\n if (entityToRemove.parent === networkLinkEntity) {\n entityToRemove.parent = undefined;\n removeChildren(entityToRemove);\n }\n }\n entityCollection.resumeEvents();\n\n // Add new entities\n entityCollection.suspendEvents();\n for (i = 0; i < newEntities.length; i++) {\n var newEntity = newEntities[i];\n if (!defined(newEntity.parent)) {\n newEntity.parent = networkLinkEntity;\n mergeAvailabilityWithParent(newEntity);\n }\n entityCollection.add(newEntity);\n }\n entityCollection.resumeEvents();\n\n // No refresh information remove it, otherwise update lastUpdate time\n if (remove) {\n networkLinks.remove(networkLink.id);\n } else {\n networkLink.lastUpdated = now;\n }\n\n var availability = entityCollection.computeAvailability();\n\n var start = availability.start;\n var stop = availability.stop;\n var isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n var isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n if (!isMinStart || !isMaxStop) {\n var clock = dataSource._clock;\n\n if (clock.startTime !== start || clock.stopTime !== stop) {\n clock.startTime = start;\n clock.stopTime = stop;\n dataSource._changed.raiseEvent(dataSource);\n }\n }\n\n networkLink.updating = false;\n networkLink.needsUpdate = false;\n dataSource._refresh.raiseEvent(\n dataSource,\n processedHref.getUrlComponent(true)\n );\n };\n}\n\nvar entitiesToIgnore = new AssociativeArray();\n\n/**\n * Updates any NetworkLink that require updating.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {Boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nKmlDataSource.prototype.update = function (time) {\n var networkLinks = this._networkLinks;\n if (networkLinks.length === 0) {\n return true;\n }\n\n var now = JulianDate.now();\n var that = this;\n\n entitiesToIgnore.removeAll();\n\n function recurseIgnoreEntities(entity) {\n var children = entity._children;\n var count = children.length;\n for (var i = 0; i < count; ++i) {\n var child = children[i];\n entitiesToIgnore.set(child.id, child);\n recurseIgnoreEntities(child);\n }\n }\n\n var cameraViewUpdate = false;\n var lastCameraView = this._lastCameraView;\n var camera = this._camera;\n if (\n defined(camera) &&\n !(\n camera.positionWC.equalsEpsilon(\n lastCameraView.position,\n CesiumMath.EPSILON7\n ) &&\n camera.directionWC.equalsEpsilon(\n lastCameraView.direction,\n CesiumMath.EPSILON7\n ) &&\n camera.upWC.equalsEpsilon(lastCameraView.up, CesiumMath.EPSILON7)\n )\n ) {\n // Camera has changed so update the last view\n lastCameraView.position = Cartesian3.clone(camera.positionWC);\n lastCameraView.direction = Cartesian3.clone(camera.directionWC);\n lastCameraView.up = Cartesian3.clone(camera.upWC);\n lastCameraView.bbox = camera.computeViewRectangle();\n cameraViewUpdate = true;\n }\n\n var newNetworkLinks = new AssociativeArray();\n var changed = false;\n networkLinks.values.forEach(function (networkLink) {\n var entity = networkLink.entity;\n if (entitiesToIgnore.contains(entity.id)) {\n return;\n }\n\n if (!networkLink.updating) {\n var doUpdate = false;\n if (networkLink.refreshMode === RefreshMode.INTERVAL) {\n if (\n JulianDate.secondsDifference(now, networkLink.lastUpdated) >\n networkLink.time\n ) {\n doUpdate = true;\n }\n } else if (networkLink.refreshMode === RefreshMode.EXPIRE) {\n if (JulianDate.greaterThan(now, networkLink.time)) {\n doUpdate = true;\n }\n } else if (networkLink.refreshMode === RefreshMode.STOP) {\n if (cameraViewUpdate) {\n networkLink.needsUpdate = true;\n networkLink.cameraUpdateTime = now;\n }\n\n if (\n networkLink.needsUpdate &&\n JulianDate.secondsDifference(now, networkLink.cameraUpdateTime) >=\n networkLink.time\n ) {\n doUpdate = true;\n }\n }\n\n if (doUpdate) {\n recurseIgnoreEntities(entity);\n networkLink.updating = true;\n var newEntityCollection = new EntityCollection();\n var href = networkLink.href.clone();\n\n href.setQueryParameters(networkLink.cookie);\n var ellipsoid = defaultValue(that._ellipsoid, Ellipsoid.WGS84);\n processNetworkLinkQueryString(\n href,\n that._camera,\n that._canvas,\n networkLink.viewBoundScale,\n lastCameraView.bbox,\n ellipsoid\n );\n\n load(that, newEntityCollection, href, { context: entity.id })\n .then(\n getNetworkLinkUpdateCallback(\n that,\n networkLink,\n newEntityCollection,\n newNetworkLinks,\n href\n )\n )\n .otherwise(function (error) {\n var msg =\n \"NetworkLink \" + networkLink.href + \" refresh failed: \" + error;\n console.log(msg);\n that._error.raiseEvent(that, msg);\n });\n changed = true;\n }\n }\n newNetworkLinks.set(networkLink.id, networkLink);\n });\n\n if (changed) {\n this._networkLinks = newNetworkLinks;\n this._changed.raiseEvent(this);\n }\n\n return true;\n};\n\n/**\n * Contains KML Feature data loaded into the <code>Entity.kml</code> property by {@link KmlDataSource}.\n * @alias KmlFeatureData\n * @constructor\n */\nfunction KmlFeatureData() {\n /**\n * @typedef KmlFeatureData.Author\n * @type {Object}\n * @property {String} name Gets the name.\n * @property {String} uri Gets the URI.\n * @property {Number} age Gets the email.\n */\n\n /**\n * Gets the atom syndication format author field.\n * @type {KmlFeatureData.Author}\n */\n this.author = {\n name: undefined,\n uri: undefined,\n email: undefined,\n };\n\n /**\n * @typedef KmlFeatureData.Link\n * @type {Object}\n * @property {String} href Gets the href.\n * @property {String} hreflang Gets the language of the linked resource.\n * @property {String} rel Gets the link relation.\n * @property {String} type Gets the link type.\n * @property {String} title Gets the link title.\n * @property {String} length Gets the link length.\n */\n\n /**\n * Gets the link.\n * @type {KmlFeatureData.Link}\n */\n this.link = {\n href: undefined,\n hreflang: undefined,\n rel: undefined,\n type: undefined,\n title: undefined,\n length: undefined,\n };\n\n /**\n * Gets the unstructured address field.\n * @type {String}\n */\n this.address = undefined;\n /**\n * Gets the phone number.\n * @type {String}\n */\n this.phoneNumber = undefined;\n /**\n * Gets the snippet.\n * @type {String}\n */\n this.snippet = undefined;\n /**\n * Gets the extended data, parsed into a JSON object.\n * Currently only the <code>Data</code> property is supported.\n * <code>SchemaData</code> and custom data are ignored.\n * @type {String}\n */\n this.extendedData = undefined;\n}\n\n// For testing\nKmlDataSource._DeferredLoading = DeferredLoading;\nKmlDataSource._getTimestamp = getTimestamp;\n\nexport default KmlDataSource;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines the interface for visualizers. Visualizers are plug-ins to\n * {@link DataSourceDisplay} that render data associated with\n * {@link DataSource} instances.\n * This object is an interface for documentation purposes and is not intended\n * to be instantiated directly.\n * @alias Visualizer\n * @constructor\n *\n * @see BillboardVisualizer\n * @see LabelVisualizer\n * @see ModelVisualizer\n * @see PathVisualizer\n * @see PointVisualizer\n * @see GeometryVisualizer\n */\nfunction Visualizer() {\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Updates the visualization to the provided time.\n * @function\n *\n * @param {JulianDate} time The time.\n *\n * @returns {Boolean} True if the display was updated to the provided time,\n * false if the visualizer is waiting for an asynchronous operation to\n * complete before data can be updated.\n */\nVisualizer.prototype.update = DeveloperError.throwInstantiationError;\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n * BoundingSphereState.PENDING if the result is still being computed, or\n * BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nVisualizer.prototype.getBoundingSphere = DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * @function\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n */\nVisualizer.prototype.isDestroyed = DeveloperError.throwInstantiationError;\n\n/**\n * Removes all visualization and cleans up any resources associated with this instance.\n * @function\n */\nVisualizer.prototype.destroy = DeveloperError.throwInstantiationError;\nexport default Visualizer;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport ViewportQuadVS from \"../Shaders/ViewportQuadVS.js\";\nimport ClearCommand from \"./ClearCommand.js\";\nimport DrawCommand from \"./DrawCommand.js\";\nimport Framebuffer from \"./Framebuffer.js\";\nimport RenderState from \"./RenderState.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\n\n/**\n * @private\n */\nfunction ComputeEngine(context) {\n this._context = context;\n}\n\nvar renderStateScratch;\nvar drawCommandScratch = new DrawCommand({\n primitiveType: PrimitiveType.TRIANGLES,\n});\nvar clearCommandScratch = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n});\n\nfunction createFramebuffer(context, outputTexture) {\n return new Framebuffer({\n context: context,\n colorTextures: [outputTexture],\n destroyAttachments: false,\n });\n}\n\nfunction createViewportQuadShader(context, fragmentShaderSource) {\n return ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: ViewportQuadVS,\n fragmentShaderSource: fragmentShaderSource,\n attributeLocations: {\n position: 0,\n textureCoordinates: 1,\n },\n });\n}\n\nfunction createRenderState(width, height) {\n if (\n !defined(renderStateScratch) ||\n renderStateScratch.viewport.width !== width ||\n renderStateScratch.viewport.height !== height\n ) {\n renderStateScratch = RenderState.fromCache({\n viewport: new BoundingRectangle(0, 0, width, height),\n });\n }\n return renderStateScratch;\n}\n\nComputeEngine.prototype.execute = function (computeCommand) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"computeCommand\", computeCommand);\n //>>includeEnd('debug');\n\n // This may modify the command's resources, so do error checking afterwards\n if (defined(computeCommand.preExecute)) {\n computeCommand.preExecute(computeCommand);\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(computeCommand.fragmentShaderSource) &&\n !defined(computeCommand.shaderProgram)\n ) {\n throw new DeveloperError(\n \"computeCommand.fragmentShaderSource or computeCommand.shaderProgram is required.\"\n );\n }\n\n Check.defined(\"computeCommand.outputTexture\", computeCommand.outputTexture);\n //>>includeEnd('debug');\n\n var outputTexture = computeCommand.outputTexture;\n var width = outputTexture.width;\n var height = outputTexture.height;\n\n var context = this._context;\n var vertexArray = defined(computeCommand.vertexArray)\n ? computeCommand.vertexArray\n : context.getViewportQuadVertexArray();\n var shaderProgram = defined(computeCommand.shaderProgram)\n ? computeCommand.shaderProgram\n : createViewportQuadShader(context, computeCommand.fragmentShaderSource);\n var framebuffer = createFramebuffer(context, outputTexture);\n var renderState = createRenderState(width, height);\n var uniformMap = computeCommand.uniformMap;\n\n var clearCommand = clearCommandScratch;\n clearCommand.framebuffer = framebuffer;\n clearCommand.renderState = renderState;\n clearCommand.execute(context);\n\n var drawCommand = drawCommandScratch;\n drawCommand.vertexArray = vertexArray;\n drawCommand.renderState = renderState;\n drawCommand.shaderProgram = shaderProgram;\n drawCommand.uniformMap = uniformMap;\n drawCommand.framebuffer = framebuffer;\n drawCommand.execute(context);\n\n framebuffer.destroy();\n\n if (!computeCommand.persists) {\n shaderProgram.destroy();\n if (defined(computeCommand.vertexArray)) {\n vertexArray.destroy();\n }\n }\n\n if (defined(computeCommand.postExecute)) {\n computeCommand.postExecute(outputTexture);\n }\n};\n\nComputeEngine.prototype.isDestroyed = function () {\n return false;\n};\n\nComputeEngine.prototype.destroy = function () {\n return destroyObject(this);\n};\nexport default ComputeEngine;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 position;\\n\\\nattribute vec2 textureCoordinates;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main() \\n\\\n{\\n\\\n gl_Position = position;\\n\\\n v_textureCoordinates = textureCoordinates;\\n\\\n}\\n\\\n\";\n","/**\n * The state for a particular rendering pass. This is used to supplement the state\n * in a command being executed.\n *\n * @private\n * @constructor\n */\nfunction PassState(context) {\n /**\n * The context used to execute commands for this pass.\n *\n * @type {Context}\n */\n this.context = context;\n\n /**\n * The framebuffer to render to. This framebuffer is used unless a {@link DrawCommand}\n * or {@link ClearCommand} explicitly define a framebuffer, which is used for off-screen\n * rendering.\n *\n * @type {Framebuffer}\n * @default undefined\n */\n this.framebuffer = undefined;\n\n /**\n * When defined, this overrides the blending property of a {@link DrawCommand}'s render state.\n * This is used to, for example, to allow the renderer to turn off blending during the picking pass.\n * <p>\n * When this is <code>undefined</code>, the {@link DrawCommand}'s property is used.\n * </p>\n *\n * @type {Boolean}\n * @default undefined\n */\n this.blendingEnabled = undefined;\n\n /**\n * When defined, this overrides the scissor test property of a {@link DrawCommand}'s render state.\n * This is used to, for example, to allow the renderer to scissor out the pick region during the picking pass.\n * <p>\n * When this is <code>undefined</code>, the {@link DrawCommand}'s property is used.\n * </p>\n *\n * @type {Object}\n * @default undefined\n */\n this.scissorTest = undefined;\n\n /**\n * The viewport used when one is not defined by a {@link DrawCommand}'s render state.\n * @type {BoundingRectangle}\n * @default undefined\n */\n this.viewport = undefined;\n}\nexport default PassState;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\nimport ShaderSource from \"./ShaderSource.js\";\n\n/**\n * @private\n */\nfunction ShaderCache(context) {\n this._context = context;\n this._shaders = {};\n this._numberOfShaders = 0;\n this._shadersToRelease = {};\n}\n\nObject.defineProperties(ShaderCache.prototype, {\n numberOfShaders: {\n get: function () {\n return this._numberOfShaders;\n },\n },\n});\n\n/**\n * Returns a shader program from the cache, or creates and caches a new shader program,\n * given the GLSL vertex and fragment shader source and attribute locations.\n * <p>\n * The difference between this and {@link ShaderCache#getShaderProgram}, is this is used to\n * replace an existing reference to a shader program, which is passed as the first argument.\n * </p>\n *\n * @param {Object} options Object with the following properties:\n * @param {ShaderProgram} [options.shaderProgram] The shader program that is being reassigned.\n * @param {String|ShaderSource} options.vertexShaderSource The GLSL source for the vertex shader.\n * @param {String|ShaderSource} options.fragmentShaderSource The GLSL source for the fragment shader.\n * @param {Object} options.attributeLocations Indices for the attribute inputs to the vertex shader.\n\n * @returns {ShaderProgram} The cached or newly created shader program.\n *\n *\n * @example\n * this._shaderProgram = context.shaderCache.replaceShaderProgram({\n * shaderProgram : this._shaderProgram,\n * vertexShaderSource : vs,\n * fragmentShaderSource : fs,\n * attributeLocations : attributeLocations\n * });\n *\n * @see ShaderCache#getShaderProgram\n */\nShaderCache.prototype.replaceShaderProgram = function (options) {\n if (defined(options.shaderProgram)) {\n options.shaderProgram.destroy();\n }\n\n return this.getShaderProgram(options);\n};\n\n/**\n * Returns a shader program from the cache, or creates and caches a new shader program,\n * given the GLSL vertex and fragment shader source and attribute locations.\n *\n * @param {Object} options Object with the following properties:\n * @param {String|ShaderSource} options.vertexShaderSource The GLSL source for the vertex shader.\n * @param {String|ShaderSource} options.fragmentShaderSource The GLSL source for the fragment shader.\n * @param {Object} options.attributeLocations Indices for the attribute inputs to the vertex shader.\n *\n * @returns {ShaderProgram} The cached or newly created shader program.\n */\nShaderCache.prototype.getShaderProgram = function (options) {\n // convert shaders which are provided as strings into ShaderSource objects\n // because ShaderSource handles all the automatic including of built-in functions, etc.\n\n var vertexShaderSource = options.vertexShaderSource;\n var fragmentShaderSource = options.fragmentShaderSource;\n var attributeLocations = options.attributeLocations;\n\n if (typeof vertexShaderSource === \"string\") {\n vertexShaderSource = new ShaderSource({\n sources: [vertexShaderSource],\n });\n }\n\n if (typeof fragmentShaderSource === \"string\") {\n fragmentShaderSource = new ShaderSource({\n sources: [fragmentShaderSource],\n });\n }\n\n var vertexShaderText = vertexShaderSource.createCombinedVertexShader(\n this._context\n );\n var fragmentShaderText = fragmentShaderSource.createCombinedFragmentShader(\n this._context\n );\n\n var keyword =\n vertexShaderText + fragmentShaderText + JSON.stringify(attributeLocations);\n var cachedShader;\n\n if (defined(this._shaders[keyword])) {\n cachedShader = this._shaders[keyword];\n\n // No longer want to release this if it was previously released.\n delete this._shadersToRelease[keyword];\n } else {\n var context = this._context;\n var shaderProgram = new ShaderProgram({\n gl: context._gl,\n logShaderCompilation: context.logShaderCompilation,\n debugShaders: context.debugShaders,\n vertexShaderSource: vertexShaderSource,\n vertexShaderText: vertexShaderText,\n fragmentShaderSource: fragmentShaderSource,\n fragmentShaderText: fragmentShaderText,\n attributeLocations: attributeLocations,\n });\n\n cachedShader = {\n cache: this,\n shaderProgram: shaderProgram,\n keyword: keyword,\n derivedKeywords: [],\n count: 0,\n };\n\n // A shader can't be in more than one cache.\n shaderProgram._cachedShader = cachedShader;\n this._shaders[keyword] = cachedShader;\n ++this._numberOfShaders;\n }\n\n ++cachedShader.count;\n return cachedShader.shaderProgram;\n};\n\nShaderCache.prototype.replaceDerivedShaderProgram = function (\n shaderProgram,\n keyword,\n options\n) {\n var cachedShader = shaderProgram._cachedShader;\n var derivedKeyword = keyword + cachedShader.keyword;\n var cachedDerivedShader = this._shaders[derivedKeyword];\n if (defined(cachedDerivedShader)) {\n destroyShader(this, cachedDerivedShader);\n var index = cachedShader.derivedKeywords.indexOf(keyword);\n if (index > -1) {\n cachedShader.derivedKeywords.splice(index, 1);\n }\n }\n\n return this.createDerivedShaderProgram(shaderProgram, keyword, options);\n};\n\nShaderCache.prototype.getDerivedShaderProgram = function (\n shaderProgram,\n keyword\n) {\n var cachedShader = shaderProgram._cachedShader;\n var derivedKeyword = keyword + cachedShader.keyword;\n var cachedDerivedShader = this._shaders[derivedKeyword];\n if (!defined(cachedDerivedShader)) {\n return undefined;\n }\n\n return cachedDerivedShader.shaderProgram;\n};\n\nShaderCache.prototype.createDerivedShaderProgram = function (\n shaderProgram,\n keyword,\n options\n) {\n var cachedShader = shaderProgram._cachedShader;\n var derivedKeyword = keyword + cachedShader.keyword;\n\n var vertexShaderSource = options.vertexShaderSource;\n var fragmentShaderSource = options.fragmentShaderSource;\n var attributeLocations = options.attributeLocations;\n\n if (typeof vertexShaderSource === \"string\") {\n vertexShaderSource = new ShaderSource({\n sources: [vertexShaderSource],\n });\n }\n\n if (typeof fragmentShaderSource === \"string\") {\n fragmentShaderSource = new ShaderSource({\n sources: [fragmentShaderSource],\n });\n }\n\n var context = this._context;\n\n var vertexShaderText = vertexShaderSource.createCombinedVertexShader(context);\n var fragmentShaderText = fragmentShaderSource.createCombinedFragmentShader(\n context\n );\n\n var derivedShaderProgram = new ShaderProgram({\n gl: context._gl,\n logShaderCompilation: context.logShaderCompilation,\n debugShaders: context.debugShaders,\n vertexShaderSource: vertexShaderSource,\n vertexShaderText: vertexShaderText,\n fragmentShaderSource: fragmentShaderSource,\n fragmentShaderText: fragmentShaderText,\n attributeLocations: attributeLocations,\n });\n\n var derivedCachedShader = {\n cache: this,\n shaderProgram: derivedShaderProgram,\n keyword: derivedKeyword,\n derivedKeywords: [],\n count: 0,\n };\n\n cachedShader.derivedKeywords.push(keyword);\n derivedShaderProgram._cachedShader = derivedCachedShader;\n this._shaders[derivedKeyword] = derivedCachedShader;\n return derivedShaderProgram;\n};\n\nfunction destroyShader(cache, cachedShader) {\n var derivedKeywords = cachedShader.derivedKeywords;\n var length = derivedKeywords.length;\n for (var i = 0; i < length; ++i) {\n var keyword = derivedKeywords[i] + cachedShader.keyword;\n var derivedCachedShader = cache._shaders[keyword];\n destroyShader(cache, derivedCachedShader);\n }\n\n delete cache._shaders[cachedShader.keyword];\n cachedShader.shaderProgram.finalDestroy();\n}\n\nShaderCache.prototype.destroyReleasedShaderPrograms = function () {\n var shadersToRelease = this._shadersToRelease;\n\n for (var keyword in shadersToRelease) {\n if (shadersToRelease.hasOwnProperty(keyword)) {\n var cachedShader = shadersToRelease[keyword];\n destroyShader(this, cachedShader);\n --this._numberOfShaders;\n }\n }\n\n this._shadersToRelease = {};\n};\n\nShaderCache.prototype.releaseShaderProgram = function (shaderProgram) {\n if (defined(shaderProgram)) {\n var cachedShader = shaderProgram._cachedShader;\n if (cachedShader && --cachedShader.count === 0) {\n this._shadersToRelease[cachedShader.keyword] = cachedShader;\n }\n }\n};\n\nShaderCache.prototype.isDestroyed = function () {\n return false;\n};\n\nShaderCache.prototype.destroy = function () {\n var shaders = this._shaders;\n for (var keyword in shaders) {\n if (shaders.hasOwnProperty(keyword)) {\n shaders[keyword].shaderProgram.finalDestroy();\n }\n }\n return destroyObject(this);\n};\nexport default ShaderCache;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * @private\n */\nfunction TextureCache() {\n this._textures = {};\n this._numberOfTextures = 0;\n this._texturesToRelease = {};\n}\n\nObject.defineProperties(TextureCache.prototype, {\n numberOfTextures: {\n get: function () {\n return this._numberOfTextures;\n },\n },\n});\n\nTextureCache.prototype.getTexture = function (keyword) {\n var cachedTexture = this._textures[keyword];\n if (!defined(cachedTexture)) {\n return undefined;\n }\n\n // No longer want to release this if it was previously released.\n delete this._texturesToRelease[keyword];\n\n ++cachedTexture.count;\n return cachedTexture.texture;\n};\n\nTextureCache.prototype.addTexture = function (keyword, texture) {\n var cachedTexture = {\n texture: texture,\n count: 1,\n };\n\n texture.finalDestroy = texture.destroy;\n\n var that = this;\n texture.destroy = function () {\n if (--cachedTexture.count === 0) {\n that._texturesToRelease[keyword] = cachedTexture;\n }\n };\n\n this._textures[keyword] = cachedTexture;\n ++this._numberOfTextures;\n};\n\nTextureCache.prototype.destroyReleasedTextures = function () {\n var texturesToRelease = this._texturesToRelease;\n\n for (var keyword in texturesToRelease) {\n if (texturesToRelease.hasOwnProperty(keyword)) {\n var cachedTexture = texturesToRelease[keyword];\n delete this._textures[keyword];\n cachedTexture.texture.finalDestroy();\n --this._numberOfTextures;\n }\n }\n\n this._texturesToRelease = {};\n};\n\nTextureCache.prototype.isDestroyed = function () {\n return false;\n};\n\nTextureCache.prototype.destroy = function () {\n var textures = this._textures;\n for (var keyword in textures) {\n if (textures.hasOwnProperty(keyword)) {\n textures[keyword].texture.finalDestroy();\n }\n }\n return destroyObject(this);\n};\nexport default TextureCache;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\n\n/**\n * A directional light source that originates from the Sun.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Color} [options.color=Color.WHITE] The light's color.\n * @param {Number} [options.intensity=2.0] The light's intensity.\n *\n * @alias SunLight\n * @constructor\n */\nfunction SunLight(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n /**\n * The color of the light.\n * @type {Color}\n * @default Color.WHITE\n */\n this.color = Color.clone(defaultValue(options.color, Color.WHITE));\n\n /**\n * The intensity of the light.\n * @type {Number}\n * @default 2.0\n */\n this.intensity = defaultValue(options.intensity, 2.0);\n}\n\nexport default SunLight;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Simon1994PlanetaryPositions from \"../Core/Simon1994PlanetaryPositions.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport SunLight from \"../Scene/SunLight.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction UniformState() {\n /**\n * @type {Texture}\n */\n this.globeDepthTexture = undefined;\n /**\n * @type {Number}\n */\n this.gamma = undefined;\n\n this._viewport = new BoundingRectangle();\n this._viewportCartesian4 = new Cartesian4();\n this._viewportDirty = false;\n this._viewportOrthographicMatrix = Matrix4.clone(Matrix4.IDENTITY);\n this._viewportTransformation = Matrix4.clone(Matrix4.IDENTITY);\n\n this._model = Matrix4.clone(Matrix4.IDENTITY);\n this._view = Matrix4.clone(Matrix4.IDENTITY);\n this._inverseView = Matrix4.clone(Matrix4.IDENTITY);\n this._projection = Matrix4.clone(Matrix4.IDENTITY);\n this._infiniteProjection = Matrix4.clone(Matrix4.IDENTITY);\n this._entireFrustum = new Cartesian2();\n this._currentFrustum = new Cartesian2();\n this._frustumPlanes = new Cartesian4();\n this._farDepthFromNearPlusOne = undefined;\n this._log2FarDepthFromNearPlusOne = undefined;\n this._oneOverLog2FarDepthFromNearPlusOne = undefined;\n\n this._frameState = undefined;\n this._temeToPseudoFixed = Matrix3.clone(Matrix4.IDENTITY);\n\n // Derived members\n this._view3DDirty = true;\n this._view3D = new Matrix4();\n\n this._inverseView3DDirty = true;\n this._inverseView3D = new Matrix4();\n\n this._inverseModelDirty = true;\n this._inverseModel = new Matrix4();\n\n this._inverseTransposeModelDirty = true;\n this._inverseTransposeModel = new Matrix3();\n\n this._viewRotation = new Matrix3();\n this._inverseViewRotation = new Matrix3();\n\n this._viewRotation3D = new Matrix3();\n this._inverseViewRotation3D = new Matrix3();\n\n this._inverseProjectionDirty = true;\n this._inverseProjection = new Matrix4();\n\n this._modelViewDirty = true;\n this._modelView = new Matrix4();\n\n this._modelView3DDirty = true;\n this._modelView3D = new Matrix4();\n\n this._modelViewRelativeToEyeDirty = true;\n this._modelViewRelativeToEye = new Matrix4();\n\n this._inverseModelViewDirty = true;\n this._inverseModelView = new Matrix4();\n\n this._inverseModelView3DDirty = true;\n this._inverseModelView3D = new Matrix4();\n\n this._viewProjectionDirty = true;\n this._viewProjection = new Matrix4();\n\n this._inverseViewProjectionDirty = true;\n this._inverseViewProjection = new Matrix4();\n\n this._modelViewProjectionDirty = true;\n this._modelViewProjection = new Matrix4();\n\n this._inverseModelViewProjectionDirty = true;\n this._inverseModelViewProjection = new Matrix4();\n\n this._modelViewProjectionRelativeToEyeDirty = true;\n this._modelViewProjectionRelativeToEye = new Matrix4();\n\n this._modelViewInfiniteProjectionDirty = true;\n this._modelViewInfiniteProjection = new Matrix4();\n\n this._normalDirty = true;\n this._normal = new Matrix3();\n\n this._normal3DDirty = true;\n this._normal3D = new Matrix3();\n\n this._inverseNormalDirty = true;\n this._inverseNormal = new Matrix3();\n\n this._inverseNormal3DDirty = true;\n this._inverseNormal3D = new Matrix3();\n\n this._encodedCameraPositionMCDirty = true;\n this._encodedCameraPositionMC = new EncodedCartesian3();\n this._cameraPosition = new Cartesian3();\n\n this._sunPositionWC = new Cartesian3();\n this._sunPositionColumbusView = new Cartesian3();\n this._sunDirectionWC = new Cartesian3();\n this._sunDirectionEC = new Cartesian3();\n this._moonDirectionEC = new Cartesian3();\n\n this._lightDirectionWC = new Cartesian3();\n this._lightDirectionEC = new Cartesian3();\n this._lightColor = new Cartesian3();\n this._lightColorHdr = new Cartesian3();\n\n this._pass = undefined;\n this._mode = undefined;\n this._mapProjection = undefined;\n this._ellipsoid = undefined;\n this._cameraDirection = new Cartesian3();\n this._cameraRight = new Cartesian3();\n this._cameraUp = new Cartesian3();\n this._frustum2DWidth = 0.0;\n this._eyeHeight = 0.0;\n this._eyeHeight2D = new Cartesian2();\n this._pixelRatio = 1.0;\n this._orthographicIn3D = false;\n this._backgroundColor = new Color();\n\n this._brdfLut = undefined;\n this._environmentMap = undefined;\n\n this._sphericalHarmonicCoefficients = undefined;\n this._specularEnvironmentMaps = undefined;\n this._specularEnvironmentMapsDimensions = new Cartesian2();\n this._specularEnvironmentMapsMaximumLOD = undefined;\n\n this._fogDensity = undefined;\n\n this._invertClassificationColor = undefined;\n\n this._imagerySplitPosition = 0.0;\n this._pixelSizePerMeter = undefined;\n this._geometricToleranceOverMeter = undefined;\n\n this._minimumDisableDepthTestDistance = undefined;\n}\n\nObject.defineProperties(UniformState.prototype, {\n /**\n * @memberof UniformState.prototype\n * @type {FrameState}\n * @readonly\n */\n frameState: {\n get: function () {\n return this._frameState;\n },\n },\n /**\n * @memberof UniformState.prototype\n * @type {BoundingRectangle}\n */\n viewport: {\n get: function () {\n return this._viewport;\n },\n set: function (viewport) {\n if (!BoundingRectangle.equals(viewport, this._viewport)) {\n BoundingRectangle.clone(viewport, this._viewport);\n\n var v = this._viewport;\n var vc = this._viewportCartesian4;\n vc.x = v.x;\n vc.y = v.y;\n vc.z = v.width;\n vc.w = v.height;\n\n this._viewportDirty = true;\n }\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @private\n */\n viewportCartesian4: {\n get: function () {\n return this._viewportCartesian4;\n },\n },\n\n viewportOrthographic: {\n get: function () {\n cleanViewport(this);\n return this._viewportOrthographicMatrix;\n },\n },\n\n viewportTransformation: {\n get: function () {\n cleanViewport(this);\n return this._viewportTransformation;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n model: {\n get: function () {\n return this._model;\n },\n set: function (matrix) {\n Matrix4.clone(matrix, this._model);\n\n this._modelView3DDirty = true;\n this._inverseModelView3DDirty = true;\n this._inverseModelDirty = true;\n this._inverseTransposeModelDirty = true;\n this._modelViewDirty = true;\n this._inverseModelViewDirty = true;\n this._modelViewRelativeToEyeDirty = true;\n this._inverseModelViewDirty = true;\n this._modelViewProjectionDirty = true;\n this._inverseModelViewProjectionDirty = true;\n this._modelViewProjectionRelativeToEyeDirty = true;\n this._modelViewInfiniteProjectionDirty = true;\n this._normalDirty = true;\n this._inverseNormalDirty = true;\n this._normal3DDirty = true;\n this._inverseNormal3DDirty = true;\n this._encodedCameraPositionMCDirty = true;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseModel: {\n get: function () {\n if (this._inverseModelDirty) {\n this._inverseModelDirty = false;\n\n Matrix4.inverse(this._model, this._inverseModel);\n }\n\n return this._inverseModel;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @private\n */\n inverseTransposeModel: {\n get: function () {\n var m = this._inverseTransposeModel;\n if (this._inverseTransposeModelDirty) {\n this._inverseTransposeModelDirty = false;\n\n Matrix4.getMatrix3(this.inverseModel, m);\n Matrix3.transpose(m, m);\n }\n\n return m;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n view: {\n get: function () {\n return this._view;\n },\n },\n\n /**\n * The 3D view matrix. In 3D mode, this is identical to {@link UniformState#view},\n * but in 2D and Columbus View it is a synthetic matrix based on the equivalent position\n * of the camera in the 3D world.\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n view3D: {\n get: function () {\n updateView3D(this);\n return this._view3D;\n },\n },\n\n /**\n * The 3x3 rotation matrix of the current view matrix ({@link UniformState#view}).\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n viewRotation: {\n get: function () {\n updateView3D(this);\n return this._viewRotation;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n viewRotation3D: {\n get: function () {\n updateView3D(this);\n return this._viewRotation3D;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseView: {\n get: function () {\n return this._inverseView;\n },\n },\n\n /**\n * the 4x4 inverse-view matrix that transforms from eye to 3D world coordinates. In 3D mode, this is\n * identical to {@link UniformState#inverseView}, but in 2D and Columbus View it is a synthetic matrix\n * based on the equivalent position of the camera in the 3D world.\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseView3D: {\n get: function () {\n updateInverseView3D(this);\n return this._inverseView3D;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n inverseViewRotation: {\n get: function () {\n return this._inverseViewRotation;\n },\n },\n\n /**\n * The 3x3 rotation matrix of the current 3D inverse-view matrix ({@link UniformState#inverseView3D}).\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n inverseViewRotation3D: {\n get: function () {\n updateInverseView3D(this);\n return this._inverseViewRotation3D;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n projection: {\n get: function () {\n return this._projection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseProjection: {\n get: function () {\n cleanInverseProjection(this);\n return this._inverseProjection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n infiniteProjection: {\n get: function () {\n return this._infiniteProjection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelView: {\n get: function () {\n cleanModelView(this);\n return this._modelView;\n },\n },\n\n /**\n * The 3D model-view matrix. In 3D mode, this is equivalent to {@link UniformState#modelView}. In 2D and\n * Columbus View, however, it is a synthetic matrix based on the equivalent position of the camera in the 3D world.\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelView3D: {\n get: function () {\n cleanModelView3D(this);\n return this._modelView3D;\n },\n },\n\n /**\n * Model-view relative to eye matrix.\n *\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelViewRelativeToEye: {\n get: function () {\n cleanModelViewRelativeToEye(this);\n return this._modelViewRelativeToEye;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseModelView: {\n get: function () {\n cleanInverseModelView(this);\n return this._inverseModelView;\n },\n },\n\n /**\n * The inverse of the 3D model-view matrix. In 3D mode, this is equivalent to {@link UniformState#inverseModelView}.\n * In 2D and Columbus View, however, it is a synthetic matrix based on the equivalent position of the camera in the 3D world.\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseModelView3D: {\n get: function () {\n cleanInverseModelView3D(this);\n return this._inverseModelView3D;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n viewProjection: {\n get: function () {\n cleanViewProjection(this);\n return this._viewProjection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseViewProjection: {\n get: function () {\n cleanInverseViewProjection(this);\n return this._inverseViewProjection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelViewProjection: {\n get: function () {\n cleanModelViewProjection(this);\n return this._modelViewProjection;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n inverseModelViewProjection: {\n get: function () {\n cleanInverseModelViewProjection(this);\n return this._inverseModelViewProjection;\n },\n },\n\n /**\n * Model-view-projection relative to eye matrix.\n *\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelViewProjectionRelativeToEye: {\n get: function () {\n cleanModelViewProjectionRelativeToEye(this);\n return this._modelViewProjectionRelativeToEye;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Matrix4}\n */\n modelViewInfiniteProjection: {\n get: function () {\n cleanModelViewInfiniteProjection(this);\n return this._modelViewInfiniteProjection;\n },\n },\n\n /**\n * A 3x3 normal transformation matrix that transforms normal vectors in model coordinates to\n * eye coordinates.\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n normal: {\n get: function () {\n cleanNormal(this);\n return this._normal;\n },\n },\n\n /**\n * A 3x3 normal transformation matrix that transforms normal vectors in 3D model\n * coordinates to eye coordinates. In 3D mode, this is identical to\n * {@link UniformState#normal}, but in 2D and Columbus View it represents the normal transformation\n * matrix as if the camera were at an equivalent location in 3D mode.\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n normal3D: {\n get: function () {\n cleanNormal3D(this);\n return this._normal3D;\n },\n },\n\n /**\n * An inverse 3x3 normal transformation matrix that transforms normal vectors in model coordinates\n * to eye coordinates.\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n inverseNormal: {\n get: function () {\n cleanInverseNormal(this);\n return this._inverseNormal;\n },\n },\n\n /**\n * An inverse 3x3 normal transformation matrix that transforms normal vectors in eye coordinates\n * to 3D model coordinates. In 3D mode, this is identical to\n * {@link UniformState#inverseNormal}, but in 2D and Columbus View it represents the normal transformation\n * matrix as if the camera were at an equivalent location in 3D mode.\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n inverseNormal3D: {\n get: function () {\n cleanInverseNormal3D(this);\n return this._inverseNormal3D;\n },\n },\n\n /**\n * The near distance (<code>x</code>) and the far distance (<code>y</code>) of the frustum defined by the camera.\n * This is the largest possible frustum, not an individual frustum used for multi-frustum rendering.\n * @memberof UniformState.prototype\n * @type {Cartesian2}\n */\n entireFrustum: {\n get: function () {\n return this._entireFrustum;\n },\n },\n\n /**\n * The near distance (<code>x</code>) and the far distance (<code>y</code>) of the frustum defined by the camera.\n * This is the individual frustum used for multi-frustum rendering.\n * @memberof UniformState.prototype\n * @type {Cartesian2}\n */\n currentFrustum: {\n get: function () {\n return this._currentFrustum;\n },\n },\n\n /**\n * The distances to the frustum planes. The top, bottom, left and right distances are\n * the x, y, z, and w components, respectively.\n * @memberof UniformState.prototype\n * @type {Cartesian4}\n */\n frustumPlanes: {\n get: function () {\n return this._frustumPlanes;\n },\n },\n\n /**\n * The far plane's distance from the near plane, plus 1.0.\n *\n * @memberof UniformState.prototype\n * @type {Number}\n */\n farDepthFromNearPlusOne: {\n get: function () {\n return this._farDepthFromNearPlusOne;\n },\n },\n\n /**\n * The log2 of {@link UniformState#farDepthFromNearPlusOne}.\n *\n * @memberof UniformState.prototype\n * @type {Number}\n */\n log2FarDepthFromNearPlusOne: {\n get: function () {\n return this._log2FarDepthFromNearPlusOne;\n },\n },\n\n /**\n * 1.0 divided by {@link UniformState#log2FarDepthFromNearPlusOne}.\n *\n * @memberof UniformState.prototype\n * @type {Number}\n */\n oneOverLog2FarDepthFromNearPlusOne: {\n get: function () {\n return this._oneOverLog2FarDepthFromNearPlusOne;\n },\n },\n\n /**\n * The height in meters of the eye (camera) above or below the ellipsoid.\n * @memberof UniformState.prototype\n * @type {Number}\n */\n eyeHeight: {\n get: function () {\n return this._eyeHeight;\n },\n },\n\n /**\n * The height (<code>x</code>) and the height squared (<code>y</code>)\n * in meters of the eye (camera) above the 2D world plane. This uniform is only valid\n * when the {@link SceneMode} is <code>SCENE2D</code>.\n * @memberof UniformState.prototype\n * @type {Cartesian2}\n */\n eyeHeight2D: {\n get: function () {\n return this._eyeHeight2D;\n },\n },\n\n /**\n * The sun position in 3D world coordinates at the current scene time.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n sunPositionWC: {\n get: function () {\n return this._sunPositionWC;\n },\n },\n\n /**\n * The sun position in 2D world coordinates at the current scene time.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n sunPositionColumbusView: {\n get: function () {\n return this._sunPositionColumbusView;\n },\n },\n\n /**\n * A normalized vector to the sun in 3D world coordinates at the current scene time. Even in 2D or\n * Columbus View mode, this returns the direction to the sun in the 3D scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n sunDirectionWC: {\n get: function () {\n return this._sunDirectionWC;\n },\n },\n\n /**\n * A normalized vector to the sun in eye coordinates at the current scene time. In 3D mode, this\n * returns the actual vector from the camera position to the sun position. In 2D and Columbus View, it returns\n * the vector from the equivalent 3D camera position to the position of the sun in the 3D scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n sunDirectionEC: {\n get: function () {\n return this._sunDirectionEC;\n },\n },\n\n /**\n * A normalized vector to the moon in eye coordinates at the current scene time. In 3D mode, this\n * returns the actual vector from the camera position to the moon position. In 2D and Columbus View, it returns\n * the vector from the equivalent 3D camera position to the position of the moon in the 3D scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n moonDirectionEC: {\n get: function () {\n return this._moonDirectionEC;\n },\n },\n\n /**\n * A normalized vector to the scene's light source in 3D world coordinates. Even in 2D or\n * Columbus View mode, this returns the direction to the light in the 3D scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n lightDirectionWC: {\n get: function () {\n return this._lightDirectionWC;\n },\n },\n\n /**\n * A normalized vector to the scene's light source in eye coordinates. In 3D mode, this\n * returns the actual vector from the camera position to the light. In 2D and Columbus View, it returns\n * the vector from the equivalent 3D camera position in the 3D scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n lightDirectionEC: {\n get: function () {\n return this._lightDirectionEC;\n },\n },\n\n /**\n * The color of light emitted by the scene's light source. This is equivalent to the light\n * color multiplied by the light intensity limited to a maximum luminance of 1.0 suitable\n * for non-HDR lighting.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n lightColor: {\n get: function () {\n return this._lightColor;\n },\n },\n\n /**\n * The high dynamic range color of light emitted by the scene's light source. This is equivalent to\n * the light color multiplied by the light intensity suitable for HDR lighting.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n lightColorHdr: {\n get: function () {\n return this._lightColorHdr;\n },\n },\n\n /**\n * The high bits of the camera position.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n encodedCameraPositionMCHigh: {\n get: function () {\n cleanEncodedCameraPositionMC(this);\n return this._encodedCameraPositionMC.high;\n },\n },\n\n /**\n * The low bits of the camera position.\n * @memberof UniformState.prototype\n * @type {Cartesian3}\n */\n encodedCameraPositionMCLow: {\n get: function () {\n cleanEncodedCameraPositionMC(this);\n return this._encodedCameraPositionMC.low;\n },\n },\n\n /**\n * A 3x3 matrix that transforms from True Equator Mean Equinox (TEME) axes to the\n * pseudo-fixed axes at the Scene's current time.\n * @memberof UniformState.prototype\n * @type {Matrix3}\n */\n temeToPseudoFixedMatrix: {\n get: function () {\n return this._temeToPseudoFixed;\n },\n },\n\n /**\n * Gets the scaling factor for transforming from the canvas\n * pixel space to canvas coordinate space.\n * @memberof UniformState.prototype\n * @type {Number}\n */\n pixelRatio: {\n get: function () {\n return this._pixelRatio;\n },\n },\n\n /**\n * A scalar used to mix a color with the fog color based on the distance to the camera.\n * @memberof UniformState.prototype\n * @type {Number}\n */\n fogDensity: {\n get: function () {\n return this._fogDensity;\n },\n },\n\n /**\n * A scalar that represents the geometric tolerance per meter\n * @memberof UniformState.prototype\n * @type {Number}\n */\n geometricToleranceOverMeter: {\n get: function () {\n return this._geometricToleranceOverMeter;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Pass}\n */\n pass: {\n get: function () {\n return this._pass;\n },\n },\n\n /**\n * The current background color\n * @memberof UniformState.prototype\n * @type {Color}\n */\n backgroundColor: {\n get: function () {\n return this._backgroundColor;\n },\n },\n\n /**\n * The look up texture used to find the BRDF for a material\n * @memberof UniformState.prototype\n * @type {Texture}\n */\n brdfLut: {\n get: function () {\n return this._brdfLut;\n },\n },\n\n /**\n * The environment map of the scene\n * @memberof UniformState.prototype\n * @type {CubeMap}\n */\n environmentMap: {\n get: function () {\n return this._environmentMap;\n },\n },\n\n /**\n * The spherical harmonic coefficients of the scene.\n * @memberof UniformState.prototype\n * @type {Cartesian3[]}\n */\n sphericalHarmonicCoefficients: {\n get: function () {\n return this._sphericalHarmonicCoefficients;\n },\n },\n\n /**\n * The specular environment map atlas of the scene.\n * @memberof UniformState.prototype\n * @type {Texture}\n */\n specularEnvironmentMaps: {\n get: function () {\n return this._specularEnvironmentMaps;\n },\n },\n\n /**\n * The dimensions of the specular environment map atlas of the scene.\n * @memberof UniformState.prototype\n * @type {Cartesian2}\n */\n specularEnvironmentMapsDimensions: {\n get: function () {\n return this._specularEnvironmentMapsDimensions;\n },\n },\n\n /**\n * The maximum level-of-detail of the specular environment map atlas of the scene.\n * @memberof UniformState.prototype\n * @type {Number}\n */\n specularEnvironmentMapsMaximumLOD: {\n get: function () {\n return this._specularEnvironmentMapsMaximumLOD;\n },\n },\n\n /**\n * @memberof UniformState.prototype\n * @type {Number}\n */\n imagerySplitPosition: {\n get: function () {\n return this._imagerySplitPosition;\n },\n },\n\n /**\n * The distance from the camera at which to disable the depth test of billboards, labels and points\n * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n * be applied. When less than zero, the depth test should never be applied.\n *\n * @memberof UniformState.prototype\n * @type {Number}\n */\n minimumDisableDepthTestDistance: {\n get: function () {\n return this._minimumDisableDepthTestDistance;\n },\n },\n\n /**\n * The highlight color of unclassified 3D Tiles.\n *\n * @memberof UniformState.prototype\n * @type {Color}\n */\n invertClassificationColor: {\n get: function () {\n return this._invertClassificationColor;\n },\n },\n\n /**\n * Whether or not the current projection is orthographic in 3D.\n *\n * @memberOf UniformState.prototype\n * @type {Boolean}\n */\n orthographicIn3D: {\n get: function () {\n return this._orthographicIn3D;\n },\n },\n\n /**\n * The current ellipsoid.\n *\n * @memberOf UniformState.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return defaultValue(this._ellipsoid, Ellipsoid.WGS84);\n },\n },\n});\n\nfunction setView(uniformState, matrix) {\n Matrix4.clone(matrix, uniformState._view);\n Matrix4.getMatrix3(matrix, uniformState._viewRotation);\n\n uniformState._view3DDirty = true;\n uniformState._inverseView3DDirty = true;\n uniformState._modelViewDirty = true;\n uniformState._modelView3DDirty = true;\n uniformState._modelViewRelativeToEyeDirty = true;\n uniformState._inverseModelViewDirty = true;\n uniformState._inverseModelView3DDirty = true;\n uniformState._viewProjectionDirty = true;\n uniformState._inverseViewProjectionDirty = true;\n uniformState._modelViewProjectionDirty = true;\n uniformState._modelViewProjectionRelativeToEyeDirty = true;\n uniformState._modelViewInfiniteProjectionDirty = true;\n uniformState._normalDirty = true;\n uniformState._inverseNormalDirty = true;\n uniformState._normal3DDirty = true;\n uniformState._inverseNormal3DDirty = true;\n}\n\nfunction setInverseView(uniformState, matrix) {\n Matrix4.clone(matrix, uniformState._inverseView);\n Matrix4.getMatrix3(matrix, uniformState._inverseViewRotation);\n}\n\nfunction setProjection(uniformState, matrix) {\n Matrix4.clone(matrix, uniformState._projection);\n\n uniformState._inverseProjectionDirty = true;\n uniformState._viewProjectionDirty = true;\n uniformState._inverseViewProjectionDirty = true;\n uniformState._modelViewProjectionDirty = true;\n uniformState._modelViewProjectionRelativeToEyeDirty = true;\n}\n\nfunction setInfiniteProjection(uniformState, matrix) {\n Matrix4.clone(matrix, uniformState._infiniteProjection);\n\n uniformState._modelViewInfiniteProjectionDirty = true;\n}\n\nfunction setCamera(uniformState, camera) {\n Cartesian3.clone(camera.positionWC, uniformState._cameraPosition);\n Cartesian3.clone(camera.directionWC, uniformState._cameraDirection);\n Cartesian3.clone(camera.rightWC, uniformState._cameraRight);\n Cartesian3.clone(camera.upWC, uniformState._cameraUp);\n\n var positionCartographic = camera.positionCartographic;\n if (!defined(positionCartographic)) {\n uniformState._eyeHeight = -uniformState._ellipsoid.maximumRadius;\n } else {\n uniformState._eyeHeight = positionCartographic.height;\n }\n\n uniformState._encodedCameraPositionMCDirty = true;\n}\n\nvar transformMatrix = new Matrix3();\nvar sunCartographicScratch = new Cartographic();\nfunction setSunAndMoonDirections(uniformState, frameState) {\n if (\n !defined(\n Transforms.computeIcrfToFixedMatrix(frameState.time, transformMatrix)\n )\n ) {\n transformMatrix = Transforms.computeTemeToPseudoFixedMatrix(\n frameState.time,\n transformMatrix\n );\n }\n\n var position = Simon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame(\n frameState.time,\n uniformState._sunPositionWC\n );\n Matrix3.multiplyByVector(transformMatrix, position, position);\n\n Cartesian3.normalize(position, uniformState._sunDirectionWC);\n\n position = Matrix3.multiplyByVector(\n uniformState.viewRotation3D,\n position,\n uniformState._sunDirectionEC\n );\n Cartesian3.normalize(position, position);\n\n position = Simon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame(\n frameState.time,\n uniformState._moonDirectionEC\n );\n Matrix3.multiplyByVector(transformMatrix, position, position);\n Matrix3.multiplyByVector(uniformState.viewRotation3D, position, position);\n Cartesian3.normalize(position, position);\n\n var projection = frameState.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var sunCartographic = ellipsoid.cartesianToCartographic(\n uniformState._sunPositionWC,\n sunCartographicScratch\n );\n projection.project(sunCartographic, uniformState._sunPositionColumbusView);\n}\n\n/**\n * Synchronizes the frustum's state with the camera state. This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {Object} camera The camera to synchronize with.\n */\nUniformState.prototype.updateCamera = function (camera) {\n setView(this, camera.viewMatrix);\n setInverseView(this, camera.inverseViewMatrix);\n setCamera(this, camera);\n\n this._entireFrustum.x = camera.frustum.near;\n this._entireFrustum.y = camera.frustum.far;\n this.updateFrustum(camera.frustum);\n\n this._orthographicIn3D =\n this._mode !== SceneMode.SCENE2D &&\n camera.frustum instanceof OrthographicFrustum;\n};\n\n/**\n * Synchronizes the frustum's state with the uniform state. This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {Object} frustum The frustum to synchronize with.\n */\nUniformState.prototype.updateFrustum = function (frustum) {\n setProjection(this, frustum.projectionMatrix);\n if (defined(frustum.infiniteProjectionMatrix)) {\n setInfiniteProjection(this, frustum.infiniteProjectionMatrix);\n }\n this._currentFrustum.x = frustum.near;\n this._currentFrustum.y = frustum.far;\n\n this._farDepthFromNearPlusOne = frustum.far - frustum.near + 1.0;\n this._log2FarDepthFromNearPlusOne = CesiumMath.log2(\n this._farDepthFromNearPlusOne\n );\n this._oneOverLog2FarDepthFromNearPlusOne =\n 1.0 / this._log2FarDepthFromNearPlusOne;\n\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n this._frustumPlanes.x = frustum.top;\n this._frustumPlanes.y = frustum.bottom;\n this._frustumPlanes.z = frustum.left;\n this._frustumPlanes.w = frustum.right;\n};\n\nUniformState.prototype.updatePass = function (pass) {\n this._pass = pass;\n};\n\nvar EMPTY_ARRAY = [];\nvar defaultLight = new SunLight();\n\n/**\n * Synchronizes frame state with the uniform state. This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {FrameState} frameState The frameState to synchronize with.\n */\nUniformState.prototype.update = function (frameState) {\n this._mode = frameState.mode;\n this._mapProjection = frameState.mapProjection;\n this._ellipsoid = frameState.mapProjection.ellipsoid;\n this._pixelRatio = frameState.pixelRatio;\n\n var camera = frameState.camera;\n this.updateCamera(camera);\n\n if (frameState.mode === SceneMode.SCENE2D) {\n this._frustum2DWidth = camera.frustum.right - camera.frustum.left;\n this._eyeHeight2D.x = this._frustum2DWidth * 0.5;\n this._eyeHeight2D.y = this._eyeHeight2D.x * this._eyeHeight2D.x;\n } else {\n this._frustum2DWidth = 0.0;\n this._eyeHeight2D.x = 0.0;\n this._eyeHeight2D.y = 0.0;\n }\n\n setSunAndMoonDirections(this, frameState);\n\n var light = defaultValue(frameState.light, defaultLight);\n if (light instanceof SunLight) {\n this._lightDirectionWC = Cartesian3.clone(\n this._sunDirectionWC,\n this._lightDirectionWC\n );\n this._lightDirectionEC = Cartesian3.clone(\n this._sunDirectionEC,\n this._lightDirectionEC\n );\n } else {\n this._lightDirectionWC = Cartesian3.normalize(\n Cartesian3.negate(light.direction, this._lightDirectionWC),\n this._lightDirectionWC\n );\n this._lightDirectionEC = Matrix3.multiplyByVector(\n this.viewRotation3D,\n this._lightDirectionWC,\n this._lightDirectionEC\n );\n }\n\n var lightColor = light.color;\n var lightColorHdr = Cartesian3.fromElements(\n lightColor.red,\n lightColor.green,\n lightColor.blue,\n this._lightColorHdr\n );\n lightColorHdr = Cartesian3.multiplyByScalar(\n lightColorHdr,\n light.intensity,\n lightColorHdr\n );\n var maximumComponent = Cartesian3.maximumComponent(lightColorHdr);\n if (maximumComponent > 1.0) {\n Cartesian3.divideByScalar(\n lightColorHdr,\n maximumComponent,\n this._lightColor\n );\n } else {\n Cartesian3.clone(lightColorHdr, this._lightColor);\n }\n\n var brdfLutGenerator = frameState.brdfLutGenerator;\n var brdfLut = defined(brdfLutGenerator)\n ? brdfLutGenerator.colorTexture\n : undefined;\n this._brdfLut = brdfLut;\n\n this._environmentMap = defaultValue(\n frameState.environmentMap,\n frameState.context.defaultCubeMap\n );\n\n // IE 11 doesn't optimize out uniforms that are #ifdef'd out. So undefined values for the spherical harmonic\n // coefficients and specular environment map atlas dimensions cause a crash.\n this._sphericalHarmonicCoefficients = defaultValue(\n frameState.sphericalHarmonicCoefficients,\n EMPTY_ARRAY\n );\n this._specularEnvironmentMaps = frameState.specularEnvironmentMaps;\n this._specularEnvironmentMapsMaximumLOD =\n frameState.specularEnvironmentMapsMaximumLOD;\n\n if (defined(this._specularEnvironmentMaps)) {\n Cartesian2.clone(\n this._specularEnvironmentMaps.dimensions,\n this._specularEnvironmentMapsDimensions\n );\n }\n\n this._fogDensity = frameState.fog.density;\n\n this._invertClassificationColor = frameState.invertClassificationColor;\n\n this._frameState = frameState;\n this._temeToPseudoFixed = Transforms.computeTemeToPseudoFixedMatrix(\n frameState.time,\n this._temeToPseudoFixed\n );\n\n // Convert the relative imagerySplitPosition to absolute pixel coordinates\n this._imagerySplitPosition =\n frameState.imagerySplitPosition * frameState.context.drawingBufferWidth;\n var fov = camera.frustum.fov;\n var viewport = this._viewport;\n var pixelSizePerMeter;\n if (defined(fov)) {\n if (viewport.height > viewport.width) {\n pixelSizePerMeter = (Math.tan(0.5 * fov) * 2.0) / viewport.height;\n } else {\n pixelSizePerMeter = (Math.tan(0.5 * fov) * 2.0) / viewport.width;\n }\n } else {\n pixelSizePerMeter = 1.0 / Math.max(viewport.width, viewport.height);\n }\n\n this._geometricToleranceOverMeter =\n pixelSizePerMeter * frameState.maximumScreenSpaceError;\n Color.clone(frameState.backgroundColor, this._backgroundColor);\n\n this._minimumDisableDepthTestDistance =\n frameState.minimumDisableDepthTestDistance;\n this._minimumDisableDepthTestDistance *= this._minimumDisableDepthTestDistance;\n if (this._minimumDisableDepthTestDistance === Number.POSITIVE_INFINITY) {\n this._minimumDisableDepthTestDistance = -1.0;\n }\n};\n\nfunction cleanViewport(uniformState) {\n if (uniformState._viewportDirty) {\n var v = uniformState._viewport;\n Matrix4.computeOrthographicOffCenter(\n v.x,\n v.x + v.width,\n v.y,\n v.y + v.height,\n 0.0,\n 1.0,\n uniformState._viewportOrthographicMatrix\n );\n Matrix4.computeViewportTransformation(\n v,\n 0.0,\n 1.0,\n uniformState._viewportTransformation\n );\n uniformState._viewportDirty = false;\n }\n}\n\nfunction cleanInverseProjection(uniformState) {\n if (uniformState._inverseProjectionDirty) {\n uniformState._inverseProjectionDirty = false;\n\n if (\n uniformState._mode !== SceneMode.SCENE2D &&\n uniformState._mode !== SceneMode.MORPHING &&\n !uniformState._orthographicIn3D\n ) {\n Matrix4.inverse(\n uniformState._projection,\n uniformState._inverseProjection\n );\n } else {\n Matrix4.clone(Matrix4.ZERO, uniformState._inverseProjection);\n }\n }\n}\n\n// Derived\nfunction cleanModelView(uniformState) {\n if (uniformState._modelViewDirty) {\n uniformState._modelViewDirty = false;\n\n Matrix4.multiplyTransformation(\n uniformState._view,\n uniformState._model,\n uniformState._modelView\n );\n }\n}\n\nfunction cleanModelView3D(uniformState) {\n if (uniformState._modelView3DDirty) {\n uniformState._modelView3DDirty = false;\n\n Matrix4.multiplyTransformation(\n uniformState.view3D,\n uniformState._model,\n uniformState._modelView3D\n );\n }\n}\n\nfunction cleanInverseModelView(uniformState) {\n if (uniformState._inverseModelViewDirty) {\n uniformState._inverseModelViewDirty = false;\n\n Matrix4.inverse(uniformState.modelView, uniformState._inverseModelView);\n }\n}\n\nfunction cleanInverseModelView3D(uniformState) {\n if (uniformState._inverseModelView3DDirty) {\n uniformState._inverseModelView3DDirty = false;\n\n Matrix4.inverse(uniformState.modelView3D, uniformState._inverseModelView3D);\n }\n}\n\nfunction cleanViewProjection(uniformState) {\n if (uniformState._viewProjectionDirty) {\n uniformState._viewProjectionDirty = false;\n\n Matrix4.multiply(\n uniformState._projection,\n uniformState._view,\n uniformState._viewProjection\n );\n }\n}\n\nfunction cleanInverseViewProjection(uniformState) {\n if (uniformState._inverseViewProjectionDirty) {\n uniformState._inverseViewProjectionDirty = false;\n\n Matrix4.inverse(\n uniformState.viewProjection,\n uniformState._inverseViewProjection\n );\n }\n}\n\nfunction cleanModelViewProjection(uniformState) {\n if (uniformState._modelViewProjectionDirty) {\n uniformState._modelViewProjectionDirty = false;\n\n Matrix4.multiply(\n uniformState._projection,\n uniformState.modelView,\n uniformState._modelViewProjection\n );\n }\n}\n\nfunction cleanModelViewRelativeToEye(uniformState) {\n if (uniformState._modelViewRelativeToEyeDirty) {\n uniformState._modelViewRelativeToEyeDirty = false;\n\n var mv = uniformState.modelView;\n var mvRte = uniformState._modelViewRelativeToEye;\n mvRte[0] = mv[0];\n mvRte[1] = mv[1];\n mvRte[2] = mv[2];\n mvRte[3] = mv[3];\n mvRte[4] = mv[4];\n mvRte[5] = mv[5];\n mvRte[6] = mv[6];\n mvRte[7] = mv[7];\n mvRte[8] = mv[8];\n mvRte[9] = mv[9];\n mvRte[10] = mv[10];\n mvRte[11] = mv[11];\n mvRte[12] = 0.0;\n mvRte[13] = 0.0;\n mvRte[14] = 0.0;\n mvRte[15] = mv[15];\n }\n}\n\nfunction cleanInverseModelViewProjection(uniformState) {\n if (uniformState._inverseModelViewProjectionDirty) {\n uniformState._inverseModelViewProjectionDirty = false;\n\n Matrix4.inverse(\n uniformState.modelViewProjection,\n uniformState._inverseModelViewProjection\n );\n }\n}\n\nfunction cleanModelViewProjectionRelativeToEye(uniformState) {\n if (uniformState._modelViewProjectionRelativeToEyeDirty) {\n uniformState._modelViewProjectionRelativeToEyeDirty = false;\n\n Matrix4.multiply(\n uniformState._projection,\n uniformState.modelViewRelativeToEye,\n uniformState._modelViewProjectionRelativeToEye\n );\n }\n}\n\nfunction cleanModelViewInfiniteProjection(uniformState) {\n if (uniformState._modelViewInfiniteProjectionDirty) {\n uniformState._modelViewInfiniteProjectionDirty = false;\n\n Matrix4.multiply(\n uniformState._infiniteProjection,\n uniformState.modelView,\n uniformState._modelViewInfiniteProjection\n );\n }\n}\n\nfunction cleanNormal(uniformState) {\n if (uniformState._normalDirty) {\n uniformState._normalDirty = false;\n\n var m = uniformState._normal;\n Matrix4.getMatrix3(uniformState.inverseModelView, m);\n Matrix3.getRotation(m, m);\n Matrix3.transpose(m, m);\n }\n}\n\nfunction cleanNormal3D(uniformState) {\n if (uniformState._normal3DDirty) {\n uniformState._normal3DDirty = false;\n\n var m = uniformState._normal3D;\n Matrix4.getMatrix3(uniformState.inverseModelView3D, m);\n Matrix3.getRotation(m, m);\n Matrix3.transpose(m, m);\n }\n}\n\nfunction cleanInverseNormal(uniformState) {\n if (uniformState._inverseNormalDirty) {\n uniformState._inverseNormalDirty = false;\n Matrix4.getMatrix3(\n uniformState.inverseModelView,\n uniformState._inverseNormal\n );\n Matrix3.getRotation(\n uniformState._inverseNormal,\n uniformState._inverseNormal\n );\n }\n}\n\nfunction cleanInverseNormal3D(uniformState) {\n if (uniformState._inverseNormal3DDirty) {\n uniformState._inverseNormal3DDirty = false;\n Matrix4.getMatrix3(\n uniformState.inverseModelView3D,\n uniformState._inverseNormal3D\n );\n Matrix3.getRotation(\n uniformState._inverseNormal3D,\n uniformState._inverseNormal3D\n );\n }\n}\n\nvar cameraPositionMC = new Cartesian3();\n\nfunction cleanEncodedCameraPositionMC(uniformState) {\n if (uniformState._encodedCameraPositionMCDirty) {\n uniformState._encodedCameraPositionMCDirty = false;\n\n Matrix4.multiplyByPoint(\n uniformState.inverseModel,\n uniformState._cameraPosition,\n cameraPositionMC\n );\n EncodedCartesian3.fromCartesian(\n cameraPositionMC,\n uniformState._encodedCameraPositionMC\n );\n }\n}\n\nvar view2Dto3DPScratch = new Cartesian3();\nvar view2Dto3DRScratch = new Cartesian3();\nvar view2Dto3DUScratch = new Cartesian3();\nvar view2Dto3DDScratch = new Cartesian3();\nvar view2Dto3DCartographicScratch = new Cartographic();\nvar view2Dto3DCartesian3Scratch = new Cartesian3();\nvar view2Dto3DMatrix4Scratch = new Matrix4();\n\nfunction view2Dto3D(\n position2D,\n direction2D,\n right2D,\n up2D,\n frustum2DWidth,\n mode,\n projection,\n result\n) {\n // The camera position and directions are expressed in the 2D coordinate system where the Y axis is to the East,\n // the Z axis is to the North, and the X axis is out of the map. Express them instead in the ENU axes where\n // X is to the East, Y is to the North, and Z is out of the local horizontal plane.\n var p = view2Dto3DPScratch;\n p.x = position2D.y;\n p.y = position2D.z;\n p.z = position2D.x;\n\n var r = view2Dto3DRScratch;\n r.x = right2D.y;\n r.y = right2D.z;\n r.z = right2D.x;\n\n var u = view2Dto3DUScratch;\n u.x = up2D.y;\n u.y = up2D.z;\n u.z = up2D.x;\n\n var d = view2Dto3DDScratch;\n d.x = direction2D.y;\n d.y = direction2D.z;\n d.z = direction2D.x;\n\n // In 2D, the camera height is always 12.7 million meters.\n // The apparent height is equal to half the frustum width.\n if (mode === SceneMode.SCENE2D) {\n p.z = frustum2DWidth * 0.5;\n }\n\n // Compute the equivalent camera position in the real (3D) world.\n // In 2D and Columbus View, the camera can travel outside the projection, and when it does so\n // there's not really any corresponding location in the real world. So clamp the unprojected\n // longitude and latitude to their valid ranges.\n var cartographic = projection.unproject(p, view2Dto3DCartographicScratch);\n cartographic.longitude = CesiumMath.clamp(\n cartographic.longitude,\n -Math.PI,\n Math.PI\n );\n cartographic.latitude = CesiumMath.clamp(\n cartographic.latitude,\n -CesiumMath.PI_OVER_TWO,\n CesiumMath.PI_OVER_TWO\n );\n var ellipsoid = projection.ellipsoid;\n var position3D = ellipsoid.cartographicToCartesian(\n cartographic,\n view2Dto3DCartesian3Scratch\n );\n\n // Compute the rotation from the local ENU at the real world camera position to the fixed axes.\n var enuToFixed = Transforms.eastNorthUpToFixedFrame(\n position3D,\n ellipsoid,\n view2Dto3DMatrix4Scratch\n );\n\n // Transform each camera direction to the fixed axes.\n Matrix4.multiplyByPointAsVector(enuToFixed, r, r);\n Matrix4.multiplyByPointAsVector(enuToFixed, u, u);\n Matrix4.multiplyByPointAsVector(enuToFixed, d, d);\n\n // Compute the view matrix based on the new fixed-frame camera position and directions.\n if (!defined(result)) {\n result = new Matrix4();\n }\n\n result[0] = r.x;\n result[1] = u.x;\n result[2] = -d.x;\n result[3] = 0.0;\n result[4] = r.y;\n result[5] = u.y;\n result[6] = -d.y;\n result[7] = 0.0;\n result[8] = r.z;\n result[9] = u.z;\n result[10] = -d.z;\n result[11] = 0.0;\n result[12] = -Cartesian3.dot(r, position3D);\n result[13] = -Cartesian3.dot(u, position3D);\n result[14] = Cartesian3.dot(d, position3D);\n result[15] = 1.0;\n\n return result;\n}\n\nfunction updateView3D(that) {\n if (that._view3DDirty) {\n if (that._mode === SceneMode.SCENE3D) {\n Matrix4.clone(that._view, that._view3D);\n } else {\n view2Dto3D(\n that._cameraPosition,\n that._cameraDirection,\n that._cameraRight,\n that._cameraUp,\n that._frustum2DWidth,\n that._mode,\n that._mapProjection,\n that._view3D\n );\n }\n Matrix4.getMatrix3(that._view3D, that._viewRotation3D);\n that._view3DDirty = false;\n }\n}\n\nfunction updateInverseView3D(that) {\n if (that._inverseView3DDirty) {\n Matrix4.inverseTransformation(that.view3D, that._inverseView3D);\n Matrix4.getMatrix3(that._inverseView3D, that._inverseViewRotation3D);\n that._inverseView3DDirty = false;\n }\n}\nexport default UniformState;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ViewportQuadVS from \"../Shaders/ViewportQuadVS.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport ClearCommand from \"./ClearCommand.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport CubeMap from \"./CubeMap.js\";\nimport DrawCommand from \"./DrawCommand.js\";\nimport PassState from \"./PassState.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport RenderState from \"./RenderState.js\";\nimport ShaderCache from \"./ShaderCache.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\nimport Texture from \"./Texture.js\";\nimport TextureCache from \"./TextureCache.js\";\nimport UniformState from \"./UniformState.js\";\nimport VertexArray from \"./VertexArray.js\";\n\nfunction errorToString(gl, error) {\n var message = \"WebGL Error: \";\n switch (error) {\n case gl.INVALID_ENUM:\n message += \"INVALID_ENUM\";\n break;\n case gl.INVALID_VALUE:\n message += \"INVALID_VALUE\";\n break;\n case gl.INVALID_OPERATION:\n message += \"INVALID_OPERATION\";\n break;\n case gl.OUT_OF_MEMORY:\n message += \"OUT_OF_MEMORY\";\n break;\n case gl.CONTEXT_LOST_WEBGL:\n message += \"CONTEXT_LOST_WEBGL lost\";\n break;\n default:\n message += \"Unknown (\" + error + \")\";\n }\n\n return message;\n}\n\nfunction createErrorMessage(gl, glFunc, glFuncArguments, error) {\n var message = errorToString(gl, error) + \": \" + glFunc.name + \"(\";\n\n for (var i = 0; i < glFuncArguments.length; ++i) {\n if (i !== 0) {\n message += \", \";\n }\n message += glFuncArguments[i];\n }\n message += \");\";\n\n return message;\n}\n\nfunction throwOnError(gl, glFunc, glFuncArguments) {\n var error = gl.getError();\n if (error !== gl.NO_ERROR) {\n throw new RuntimeError(\n createErrorMessage(gl, glFunc, glFuncArguments, error)\n );\n }\n}\n\nfunction makeGetterSetter(gl, propertyName, logFunction) {\n return {\n get: function () {\n var value = gl[propertyName];\n logFunction(gl, \"get: \" + propertyName, value);\n return gl[propertyName];\n },\n set: function (value) {\n gl[propertyName] = value;\n logFunction(gl, \"set: \" + propertyName, value);\n },\n };\n}\n\nfunction wrapGL(gl, logFunction) {\n if (!defined(logFunction)) {\n return gl;\n }\n\n function wrapFunction(property) {\n return function () {\n var result = property.apply(gl, arguments);\n logFunction(gl, property, arguments);\n return result;\n };\n }\n\n var glWrapper = {};\n\n // JavaScript linters normally demand that a for..in loop must directly contain an if,\n // but in our loop below, we actually intend to iterate all properties, including\n // those in the prototype.\n /*eslint-disable guard-for-in*/\n for (var propertyName in gl) {\n var property = gl[propertyName];\n\n // wrap any functions we encounter, otherwise just copy the property to the wrapper.\n if (property instanceof Function) {\n glWrapper[propertyName] = wrapFunction(property);\n } else {\n Object.defineProperty(\n glWrapper,\n propertyName,\n makeGetterSetter(gl, propertyName, logFunction)\n );\n }\n }\n /*eslint-enable guard-for-in*/\n\n return glWrapper;\n}\n\nfunction getExtension(gl, names) {\n var length = names.length;\n for (var i = 0; i < length; ++i) {\n var extension = gl.getExtension(names[i]);\n if (extension) {\n return extension;\n }\n }\n\n return undefined;\n}\n\n/**\n * @private\n * @constructor\n */\nfunction Context(canvas, options) {\n // this check must use typeof, not defined, because defined doesn't work with undeclared variables.\n if (typeof WebGLRenderingContext === \"undefined\") {\n throw new RuntimeError(\n \"The browser does not support WebGL. Visit http://get.webgl.org.\"\n );\n }\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"canvas\", canvas);\n //>>includeEnd('debug');\n\n this._canvas = canvas;\n\n options = clone(options, true);\n // Don't use defaultValue.EMPTY_OBJECT here because the options object gets modified in the next line.\n options = defaultValue(options, {});\n options.allowTextureFilterAnisotropic = defaultValue(\n options.allowTextureFilterAnisotropic,\n true\n );\n var webglOptions = defaultValue(options.webgl, {});\n\n // Override select WebGL defaults\n webglOptions.alpha = defaultValue(webglOptions.alpha, false); // WebGL default is true\n webglOptions.stencil = defaultValue(webglOptions.stencil, true); // WebGL default is false\n\n var requestWebgl2 =\n defaultValue(options.requestWebgl2, false) &&\n typeof WebGL2RenderingContext !== \"undefined\";\n var webgl2 = false;\n\n var glContext;\n var getWebGLStub = options.getWebGLStub;\n\n if (!defined(getWebGLStub)) {\n if (requestWebgl2) {\n glContext =\n canvas.getContext(\"webgl2\", webglOptions) ||\n canvas.getContext(\"experimental-webgl2\", webglOptions) ||\n undefined;\n if (defined(glContext)) {\n webgl2 = true;\n }\n }\n if (!defined(glContext)) {\n glContext =\n canvas.getContext(\"webgl\", webglOptions) ||\n canvas.getContext(\"experimental-webgl\", webglOptions) ||\n undefined;\n }\n if (!defined(glContext)) {\n throw new RuntimeError(\n \"The browser supports WebGL, but initialization failed.\"\n );\n }\n } else {\n // Use WebGL stub when requested for unit tests\n glContext = getWebGLStub(canvas, webglOptions);\n }\n\n this._originalGLContext = glContext;\n this._gl = glContext;\n this._webgl2 = webgl2;\n this._id = createGuid();\n\n // Validation and logging disabled by default for speed.\n this.validateFramebuffer = false;\n this.validateShaderProgram = false;\n this.logShaderCompilation = false;\n\n this._throwOnWebGLError = false;\n\n this._shaderCache = new ShaderCache(this);\n this._textureCache = new TextureCache();\n\n var gl = glContext;\n\n this._stencilBits = gl.getParameter(gl.STENCIL_BITS);\n\n ContextLimits._maximumCombinedTextureImageUnits = gl.getParameter(\n gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS\n ); // min: 8\n ContextLimits._maximumCubeMapSize = gl.getParameter(\n gl.MAX_CUBE_MAP_TEXTURE_SIZE\n ); // min: 16\n ContextLimits._maximumFragmentUniformVectors = gl.getParameter(\n gl.MAX_FRAGMENT_UNIFORM_VECTORS\n ); // min: 16\n ContextLimits._maximumTextureImageUnits = gl.getParameter(\n gl.MAX_TEXTURE_IMAGE_UNITS\n ); // min: 8\n ContextLimits._maximumRenderbufferSize = gl.getParameter(\n gl.MAX_RENDERBUFFER_SIZE\n ); // min: 1\n ContextLimits._maximumTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); // min: 64\n ContextLimits._maximumVaryingVectors = gl.getParameter(\n gl.MAX_VARYING_VECTORS\n ); // min: 8\n ContextLimits._maximumVertexAttributes = gl.getParameter(\n gl.MAX_VERTEX_ATTRIBS\n ); // min: 8\n ContextLimits._maximumVertexTextureImageUnits = gl.getParameter(\n gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS\n ); // min: 0\n ContextLimits._maximumVertexUniformVectors = gl.getParameter(\n gl.MAX_VERTEX_UNIFORM_VECTORS\n ); // min: 128\n\n var aliasedLineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE); // must include 1\n ContextLimits._minimumAliasedLineWidth = aliasedLineWidthRange[0];\n ContextLimits._maximumAliasedLineWidth = aliasedLineWidthRange[1];\n\n var aliasedPointSizeRange = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); // must include 1\n ContextLimits._minimumAliasedPointSize = aliasedPointSizeRange[0];\n ContextLimits._maximumAliasedPointSize = aliasedPointSizeRange[1];\n\n var maximumViewportDimensions = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n ContextLimits._maximumViewportWidth = maximumViewportDimensions[0];\n ContextLimits._maximumViewportHeight = maximumViewportDimensions[1];\n\n var highpFloat = gl.getShaderPrecisionFormat(\n gl.FRAGMENT_SHADER,\n gl.HIGH_FLOAT\n );\n ContextLimits._highpFloatSupported = highpFloat.precision !== 0;\n var highpInt = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT);\n ContextLimits._highpIntSupported = highpInt.rangeMax !== 0;\n\n this._antialias = gl.getContextAttributes().antialias;\n\n // Query and initialize extensions\n this._standardDerivatives = !!getExtension(gl, [\"OES_standard_derivatives\"]);\n this._blendMinmax = !!getExtension(gl, [\"EXT_blend_minmax\"]);\n this._elementIndexUint = !!getExtension(gl, [\"OES_element_index_uint\"]);\n this._depthTexture = !!getExtension(gl, [\n \"WEBGL_depth_texture\",\n \"WEBKIT_WEBGL_depth_texture\",\n ]);\n this._fragDepth = !!getExtension(gl, [\"EXT_frag_depth\"]);\n this._debugShaders = getExtension(gl, [\"WEBGL_debug_shaders\"]);\n\n this._textureFloat = !!getExtension(gl, [\"OES_texture_float\"]);\n this._textureHalfFloat = !!getExtension(gl, [\"OES_texture_half_float\"]);\n\n this._textureFloatLinear = !!getExtension(gl, [\"OES_texture_float_linear\"]);\n this._textureHalfFloatLinear = !!getExtension(gl, [\n \"OES_texture_half_float_linear\",\n ]);\n\n this._colorBufferFloat = !!getExtension(gl, [\n \"EXT_color_buffer_float\",\n \"WEBGL_color_buffer_float\",\n ]);\n this._floatBlend = !!getExtension(gl, [\"EXT_float_blend\"]);\n this._colorBufferHalfFloat = !!getExtension(gl, [\n \"EXT_color_buffer_half_float\",\n ]);\n\n this._s3tc = !!getExtension(gl, [\n \"WEBGL_compressed_texture_s3tc\",\n \"MOZ_WEBGL_compressed_texture_s3tc\",\n \"WEBKIT_WEBGL_compressed_texture_s3tc\",\n ]);\n this._pvrtc = !!getExtension(gl, [\n \"WEBGL_compressed_texture_pvrtc\",\n \"WEBKIT_WEBGL_compressed_texture_pvrtc\",\n ]);\n this._etc1 = !!getExtension(gl, [\"WEBGL_compressed_texture_etc1\"]);\n\n var textureFilterAnisotropic = options.allowTextureFilterAnisotropic\n ? getExtension(gl, [\n \"EXT_texture_filter_anisotropic\",\n \"WEBKIT_EXT_texture_filter_anisotropic\",\n ])\n : undefined;\n this._textureFilterAnisotropic = textureFilterAnisotropic;\n ContextLimits._maximumTextureFilterAnisotropy = defined(\n textureFilterAnisotropic\n )\n ? gl.getParameter(textureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n : 1.0;\n\n var glCreateVertexArray;\n var glBindVertexArray;\n var glDeleteVertexArray;\n\n var glDrawElementsInstanced;\n var glDrawArraysInstanced;\n var glVertexAttribDivisor;\n\n var glDrawBuffers;\n\n var vertexArrayObject;\n var instancedArrays;\n var drawBuffers;\n\n if (webgl2) {\n var that = this;\n\n glCreateVertexArray = function () {\n return that._gl.createVertexArray();\n };\n glBindVertexArray = function (vao) {\n that._gl.bindVertexArray(vao);\n };\n glDeleteVertexArray = function (vao) {\n that._gl.deleteVertexArray(vao);\n };\n\n glDrawElementsInstanced = function (\n mode,\n count,\n type,\n offset,\n instanceCount\n ) {\n gl.drawElementsInstanced(mode, count, type, offset, instanceCount);\n };\n glDrawArraysInstanced = function (mode, first, count, instanceCount) {\n gl.drawArraysInstanced(mode, first, count, instanceCount);\n };\n glVertexAttribDivisor = function (index, divisor) {\n gl.vertexAttribDivisor(index, divisor);\n };\n\n glDrawBuffers = function (buffers) {\n gl.drawBuffers(buffers);\n };\n } else {\n vertexArrayObject = getExtension(gl, [\"OES_vertex_array_object\"]);\n if (defined(vertexArrayObject)) {\n glCreateVertexArray = function () {\n return vertexArrayObject.createVertexArrayOES();\n };\n glBindVertexArray = function (vertexArray) {\n vertexArrayObject.bindVertexArrayOES(vertexArray);\n };\n glDeleteVertexArray = function (vertexArray) {\n vertexArrayObject.deleteVertexArrayOES(vertexArray);\n };\n }\n\n instancedArrays = getExtension(gl, [\"ANGLE_instanced_arrays\"]);\n if (defined(instancedArrays)) {\n glDrawElementsInstanced = function (\n mode,\n count,\n type,\n offset,\n instanceCount\n ) {\n instancedArrays.drawElementsInstancedANGLE(\n mode,\n count,\n type,\n offset,\n instanceCount\n );\n };\n glDrawArraysInstanced = function (mode, first, count, instanceCount) {\n instancedArrays.drawArraysInstancedANGLE(\n mode,\n first,\n count,\n instanceCount\n );\n };\n glVertexAttribDivisor = function (index, divisor) {\n instancedArrays.vertexAttribDivisorANGLE(index, divisor);\n };\n }\n\n drawBuffers = getExtension(gl, [\"WEBGL_draw_buffers\"]);\n if (defined(drawBuffers)) {\n glDrawBuffers = function (buffers) {\n drawBuffers.drawBuffersWEBGL(buffers);\n };\n }\n }\n\n this.glCreateVertexArray = glCreateVertexArray;\n this.glBindVertexArray = glBindVertexArray;\n this.glDeleteVertexArray = glDeleteVertexArray;\n\n this.glDrawElementsInstanced = glDrawElementsInstanced;\n this.glDrawArraysInstanced = glDrawArraysInstanced;\n this.glVertexAttribDivisor = glVertexAttribDivisor;\n\n this.glDrawBuffers = glDrawBuffers;\n\n this._vertexArrayObject = !!vertexArrayObject;\n this._instancedArrays = !!instancedArrays;\n this._drawBuffers = !!drawBuffers;\n\n ContextLimits._maximumDrawBuffers = this.drawBuffers\n ? gl.getParameter(WebGLConstants.MAX_DRAW_BUFFERS)\n : 1;\n ContextLimits._maximumColorAttachments = this.drawBuffers\n ? gl.getParameter(WebGLConstants.MAX_COLOR_ATTACHMENTS)\n : 1;\n\n this._clearColor = new Color(0.0, 0.0, 0.0, 0.0);\n this._clearDepth = 1.0;\n this._clearStencil = 0;\n\n var us = new UniformState();\n var ps = new PassState(this);\n var rs = RenderState.fromCache();\n\n this._defaultPassState = ps;\n this._defaultRenderState = rs;\n this._defaultTexture = undefined;\n this._defaultCubeMap = undefined;\n\n this._us = us;\n this._currentRenderState = rs;\n this._currentPassState = ps;\n this._currentFramebuffer = undefined;\n this._maxFrameTextureUnitIndex = 0;\n\n // Vertex attribute divisor state cache. Workaround for ANGLE (also look at VertexArray.setVertexAttribDivisor)\n this._vertexAttribDivisors = [];\n this._previousDrawInstanced = false;\n for (var i = 0; i < ContextLimits._maximumVertexAttributes; i++) {\n this._vertexAttribDivisors.push(0);\n }\n\n this._pickObjects = {};\n this._nextPickColor = new Uint32Array(1);\n\n /**\n * @example\n * {\n * webgl : {\n * alpha : false,\n * depth : true,\n * stencil : false,\n * antialias : true,\n * premultipliedAlpha : true,\n * preserveDrawingBuffer : false,\n * failIfMajorPerformanceCaveat : true\n * },\n * allowTextureFilterAnisotropic : true\n * }\n */\n this.options = options;\n\n /**\n * A cache of objects tied to this context. Just before the Context is destroyed,\n * <code>destroy</code> will be invoked on each object in this object literal that has\n * such a method. This is useful for caching any objects that might otherwise\n * be stored globally, except they're tied to a particular context, and to manage\n * their lifetime.\n *\n * @type {Object}\n */\n this.cache = {};\n\n RenderState.apply(gl, rs, ps);\n}\n\nvar defaultFramebufferMarker = {};\n\nObject.defineProperties(Context.prototype, {\n id: {\n get: function () {\n return this._id;\n },\n },\n webgl2: {\n get: function () {\n return this._webgl2;\n },\n },\n canvas: {\n get: function () {\n return this._canvas;\n },\n },\n shaderCache: {\n get: function () {\n return this._shaderCache;\n },\n },\n textureCache: {\n get: function () {\n return this._textureCache;\n },\n },\n uniformState: {\n get: function () {\n return this._us;\n },\n },\n\n /**\n * The number of stencil bits per pixel in the default bound framebuffer. The minimum is eight bits.\n * @memberof Context.prototype\n * @type {Number}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>STENCIL_BITS</code>.\n */\n stencilBits: {\n get: function () {\n return this._stencilBits;\n },\n },\n\n /**\n * <code>true</code> if the WebGL context supports stencil buffers.\n * Stencil buffers are not supported by all systems.\n * @memberof Context.prototype\n * @type {Boolean}\n */\n stencilBuffer: {\n get: function () {\n return this._stencilBits >= 8;\n },\n },\n\n /**\n * <code>true</code> if the WebGL context supports antialiasing. By default\n * antialiasing is requested, but it is not supported by all systems.\n * @memberof Context.prototype\n * @type {Boolean}\n */\n antialias: {\n get: function () {\n return this._antialias;\n },\n },\n\n /**\n * <code>true</code> if the OES_standard_derivatives extension is supported. This\n * extension provides access to <code>dFdx</code>, <code>dFdy</code>, and <code>fwidth</code>\n * functions from GLSL. A shader using these functions still needs to explicitly enable the\n * extension with <code>#extension GL_OES_standard_derivatives : enable</code>.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/gles/extensions/OES/OES_standard_derivatives.txt|OES_standard_derivatives}\n */\n standardDerivatives: {\n get: function () {\n return this._standardDerivatives || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if the EXT_float_blend extension is supported. This\n * extension enables blending with 32-bit float values.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_float_blend/}\n */\n floatBlend: {\n get: function () {\n return this._floatBlend;\n },\n },\n\n /**\n * <code>true</code> if the EXT_blend_minmax extension is supported. This\n * extension extends blending capabilities by adding two new blend equations:\n * the minimum or maximum color components of the source and destination colors.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/}\n */\n blendMinmax: {\n get: function () {\n return this._blendMinmax || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if the OES_element_index_uint extension is supported. This\n * extension allows the use of unsigned int indices, which can improve performance by\n * eliminating batch breaking caused by unsigned short indices.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/|OES_element_index_uint}\n */\n elementIndexUint: {\n get: function () {\n return this._elementIndexUint || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if WEBGL_depth_texture is supported. This extension provides\n * access to depth textures that, for example, can be attached to framebuffers for shadow mapping.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\n depthTexture: {\n get: function () {\n return this._depthTexture || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if OES_texture_float is supported. This extension provides\n * access to floating point textures that, for example, can be attached to framebuffers for high dynamic range.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_float/}\n */\n floatingPointTexture: {\n get: function () {\n return this._webgl2 || this._textureFloat;\n },\n },\n\n /**\n * <code>true</code> if OES_texture_half_float is supported. This extension provides\n * access to floating point textures that, for example, can be attached to framebuffers for high dynamic range.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_float/}\n */\n halfFloatingPointTexture: {\n get: function () {\n return this._webgl2 || this._textureHalfFloat;\n },\n },\n\n /**\n * <code>true</code> if OES_texture_float_linear is supported. This extension provides\n * access to linear sampling methods for minification and magnification filters of floating-point textures.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/}\n */\n textureFloatLinear: {\n get: function () {\n return this._textureFloatLinear;\n },\n },\n\n /**\n * <code>true</code> if OES_texture_half_float_linear is supported. This extension provides\n * access to linear sampling methods for minification and magnification filters of half floating-point textures.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/}\n */\n textureHalfFloatLinear: {\n get: function () {\n return (\n (this._webgl2 && this._textureFloatLinear) ||\n (!this._webgl2 && this._textureHalfFloatLinear)\n );\n },\n },\n\n /**\n * <code>true</code> if EXT_texture_filter_anisotropic is supported. This extension provides\n * access to anisotropic filtering for textured surfaces at an oblique angle from the viewer.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/}\n */\n textureFilterAnisotropic: {\n get: function () {\n return !!this._textureFilterAnisotropic;\n },\n },\n\n /**\n * <code>true</code> if WEBGL_texture_compression_s3tc is supported. This extension provides\n * access to DXT compressed textures.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/}\n */\n s3tc: {\n get: function () {\n return this._s3tc;\n },\n },\n\n /**\n * <code>true</code> if WEBGL_texture_compression_pvrtc is supported. This extension provides\n * access to PVR compressed textures.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/}\n */\n pvrtc: {\n get: function () {\n return this._pvrtc;\n },\n },\n\n /**\n * <code>true</code> if WEBGL_texture_compression_etc1 is supported. This extension provides\n * access to ETC1 compressed textures.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc1/}\n */\n etc1: {\n get: function () {\n return this._etc1;\n },\n },\n\n /**\n * <code>true</code> if the OES_vertex_array_object extension is supported. This\n * extension can improve performance by reducing the overhead of switching vertex arrays.\n * When enabled, this extension is automatically used by {@link VertexArray}.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/|OES_vertex_array_object}\n */\n vertexArrayObject: {\n get: function () {\n return this._vertexArrayObject || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if the EXT_frag_depth extension is supported. This\n * extension provides access to the <code>gl_FragDepthEXT</code> built-in output variable\n * from GLSL fragment shaders. A shader using these functions still needs to explicitly enable the\n * extension with <code>#extension GL_EXT_frag_depth : enable</code>.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/|EXT_frag_depth}\n */\n fragmentDepth: {\n get: function () {\n return this._fragDepth || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if the ANGLE_instanced_arrays extension is supported. This\n * extension provides access to instanced rendering.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays}\n */\n instancedArrays: {\n get: function () {\n return this._instancedArrays || this._webgl2;\n },\n },\n\n /**\n * <code>true</code> if the EXT_color_buffer_float extension is supported. This\n * extension makes the gl.RGBA32F format color renderable.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_color_buffer_float/}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/}\n */\n colorBufferFloat: {\n get: function () {\n return this._colorBufferFloat;\n },\n },\n\n /**\n * <code>true</code> if the EXT_color_buffer_half_float extension is supported. This\n * extension makes the format gl.RGBA16F format color renderable.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_half_float/}\n * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/}\n */\n colorBufferHalfFloat: {\n get: function () {\n return (\n (this._webgl2 && this._colorBufferFloat) ||\n (!this._webgl2 && this._colorBufferHalfFloat)\n );\n },\n },\n\n /**\n * <code>true</code> if the WEBGL_draw_buffers extension is supported. This\n * extensions provides support for multiple render targets. The framebuffer object can have mutiple\n * color attachments and the GLSL fragment shader can write to the built-in output array <code>gl_FragData</code>.\n * A shader using this feature needs to explicitly enable the extension with\n * <code>#extension GL_EXT_draw_buffers : enable</code>.\n * @memberof Context.prototype\n * @type {Boolean}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/|WEBGL_draw_buffers}\n */\n drawBuffers: {\n get: function () {\n return this._drawBuffers || this._webgl2;\n },\n },\n\n debugShaders: {\n get: function () {\n return this._debugShaders;\n },\n },\n\n throwOnWebGLError: {\n get: function () {\n return this._throwOnWebGLError;\n },\n set: function (value) {\n this._throwOnWebGLError = value;\n this._gl = wrapGL(\n this._originalGLContext,\n value ? throwOnError : undefined\n );\n },\n },\n\n /**\n * A 1x1 RGBA texture initialized to [255, 255, 255, 255]. This can\n * be used as a placeholder texture while other textures are downloaded.\n * @memberof Context.prototype\n * @type {Texture}\n */\n defaultTexture: {\n get: function () {\n if (this._defaultTexture === undefined) {\n this._defaultTexture = new Texture({\n context: this,\n source: {\n width: 1,\n height: 1,\n arrayBufferView: new Uint8Array([255, 255, 255, 255]),\n },\n flipY: false,\n });\n }\n\n return this._defaultTexture;\n },\n },\n\n /**\n * A cube map, where each face is a 1x1 RGBA texture initialized to\n * [255, 255, 255, 255]. This can be used as a placeholder cube map while\n * other cube maps are downloaded.\n * @memberof Context.prototype\n * @type {CubeMap}\n */\n defaultCubeMap: {\n get: function () {\n if (this._defaultCubeMap === undefined) {\n var face = {\n width: 1,\n height: 1,\n arrayBufferView: new Uint8Array([255, 255, 255, 255]),\n };\n\n this._defaultCubeMap = new CubeMap({\n context: this,\n source: {\n positiveX: face,\n negativeX: face,\n positiveY: face,\n negativeY: face,\n positiveZ: face,\n negativeZ: face,\n },\n flipY: false,\n });\n }\n\n return this._defaultCubeMap;\n },\n },\n\n /**\n * The drawingBufferHeight of the underlying GL context.\n * @memberof Context.prototype\n * @type {Number}\n * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferHeight|drawingBufferHeight}\n */\n drawingBufferHeight: {\n get: function () {\n return this._gl.drawingBufferHeight;\n },\n },\n\n /**\n * The drawingBufferWidth of the underlying GL context.\n * @memberof Context.prototype\n * @type {Number}\n * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferWidth|drawingBufferWidth}\n */\n drawingBufferWidth: {\n get: function () {\n return this._gl.drawingBufferWidth;\n },\n },\n\n /**\n * Gets an object representing the currently bound framebuffer. While this instance is not an actual\n * {@link Framebuffer}, it is used to represent the default framebuffer in calls to\n * {@link Texture.fromFramebuffer}.\n * @memberof Context.prototype\n * @type {Object}\n */\n defaultFramebuffer: {\n get: function () {\n return defaultFramebufferMarker;\n },\n },\n});\n\n/**\n * Validates a framebuffer.\n * Available in debug builds only.\n * @private\n */\nfunction validateFramebuffer(context) {\n //>>includeStart('debug', pragmas.debug);\n if (context.validateFramebuffer) {\n var gl = context._gl;\n var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n var message;\n\n switch (status) {\n case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n message =\n \"Framebuffer is not complete. Incomplete attachment: at least one attachment point with a renderbuffer or texture attached has its attached object no longer in existence or has an attached image with a width or height of zero, or the color attachment point has a non-color-renderable image attached, or the depth attachment point has a non-depth-renderable image attached, or the stencil attachment point has a non-stencil-renderable image attached. Color-renderable formats include GL_RGBA4, GL_RGB5_A1, and GL_RGB565. GL_DEPTH_COMPONENT16 is the only depth-renderable format. GL_STENCIL_INDEX8 is the only stencil-renderable format.\";\n break;\n case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n message =\n \"Framebuffer is not complete. Incomplete dimensions: not all attached images have the same width and height.\";\n break;\n case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n message =\n \"Framebuffer is not complete. Missing attachment: no images are attached to the framebuffer.\";\n break;\n case gl.FRAMEBUFFER_UNSUPPORTED:\n message =\n \"Framebuffer is not complete. Unsupported: the combination of internal formats of the attached images violates an implementation-dependent set of restrictions.\";\n break;\n }\n\n throw new DeveloperError(message);\n }\n }\n //>>includeEnd('debug');\n}\n\nfunction applyRenderState(context, renderState, passState, clear) {\n var previousRenderState = context._currentRenderState;\n var previousPassState = context._currentPassState;\n context._currentRenderState = renderState;\n context._currentPassState = passState;\n RenderState.partialApply(\n context._gl,\n previousRenderState,\n renderState,\n previousPassState,\n passState,\n clear\n );\n}\n\nvar scratchBackBufferArray;\n// this check must use typeof, not defined, because defined doesn't work with undeclared variables.\nif (typeof WebGLRenderingContext !== \"undefined\") {\n scratchBackBufferArray = [WebGLConstants.BACK];\n}\n\nfunction bindFramebuffer(context, framebuffer) {\n if (framebuffer !== context._currentFramebuffer) {\n context._currentFramebuffer = framebuffer;\n var buffers = scratchBackBufferArray;\n\n if (defined(framebuffer)) {\n framebuffer._bind();\n validateFramebuffer(context);\n\n // TODO: Need a way for a command to give what draw buffers are active.\n buffers = framebuffer._getActiveColorAttachments();\n } else {\n var gl = context._gl;\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n if (context.drawBuffers) {\n context.glDrawBuffers(buffers);\n }\n }\n}\n\nvar defaultClearCommand = new ClearCommand();\n\nContext.prototype.clear = function (clearCommand, passState) {\n clearCommand = defaultValue(clearCommand, defaultClearCommand);\n passState = defaultValue(passState, this._defaultPassState);\n\n var gl = this._gl;\n var bitmask = 0;\n\n var c = clearCommand.color;\n var d = clearCommand.depth;\n var s = clearCommand.stencil;\n\n if (defined(c)) {\n if (!Color.equals(this._clearColor, c)) {\n Color.clone(c, this._clearColor);\n gl.clearColor(c.red, c.green, c.blue, c.alpha);\n }\n bitmask |= gl.COLOR_BUFFER_BIT;\n }\n\n if (defined(d)) {\n if (d !== this._clearDepth) {\n this._clearDepth = d;\n gl.clearDepth(d);\n }\n bitmask |= gl.DEPTH_BUFFER_BIT;\n }\n\n if (defined(s)) {\n if (s !== this._clearStencil) {\n this._clearStencil = s;\n gl.clearStencil(s);\n }\n bitmask |= gl.STENCIL_BUFFER_BIT;\n }\n\n var rs = defaultValue(clearCommand.renderState, this._defaultRenderState);\n applyRenderState(this, rs, passState, true);\n\n // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.\n var framebuffer = defaultValue(\n clearCommand.framebuffer,\n passState.framebuffer\n );\n bindFramebuffer(this, framebuffer);\n\n gl.clear(bitmask);\n};\n\nfunction beginDraw(\n context,\n framebuffer,\n passState,\n shaderProgram,\n renderState\n) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(framebuffer) && renderState.depthTest) {\n if (renderState.depthTest.enabled && !framebuffer.hasDepthAttachment) {\n throw new DeveloperError(\n \"The depth test can not be enabled (drawCommand.renderState.depthTest.enabled) because the framebuffer (drawCommand.framebuffer) does not have a depth or depth-stencil renderbuffer.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n bindFramebuffer(context, framebuffer);\n applyRenderState(context, renderState, passState, false);\n shaderProgram._bind();\n context._maxFrameTextureUnitIndex = Math.max(\n context._maxFrameTextureUnitIndex,\n shaderProgram.maximumTextureUnitIndex\n );\n}\n\nfunction continueDraw(context, drawCommand, shaderProgram, uniformMap) {\n var primitiveType = drawCommand._primitiveType;\n var va = drawCommand._vertexArray;\n var offset = drawCommand._offset;\n var count = drawCommand._count;\n var instanceCount = drawCommand.instanceCount;\n\n //>>includeStart('debug', pragmas.debug);\n if (!PrimitiveType.validate(primitiveType)) {\n throw new DeveloperError(\n \"drawCommand.primitiveType is required and must be valid.\"\n );\n }\n\n Check.defined(\"drawCommand.vertexArray\", va);\n Check.typeOf.number.greaterThanOrEquals(\"drawCommand.offset\", offset, 0);\n if (defined(count)) {\n Check.typeOf.number.greaterThanOrEquals(\"drawCommand.count\", count, 0);\n }\n Check.typeOf.number.greaterThanOrEquals(\n \"drawCommand.instanceCount\",\n instanceCount,\n 0\n );\n if (instanceCount > 0 && !context.instancedArrays) {\n throw new DeveloperError(\"Instanced arrays extension is not supported\");\n }\n //>>includeEnd('debug');\n\n context._us.model = defaultValue(drawCommand._modelMatrix, Matrix4.IDENTITY);\n shaderProgram._setUniforms(\n uniformMap,\n context._us,\n context.validateShaderProgram\n );\n\n va._bind();\n var indexBuffer = va.indexBuffer;\n\n if (defined(indexBuffer)) {\n offset = offset * indexBuffer.bytesPerIndex; // offset in vertices to offset in bytes\n count = defaultValue(count, indexBuffer.numberOfIndices);\n if (instanceCount === 0) {\n context._gl.drawElements(\n primitiveType,\n count,\n indexBuffer.indexDatatype,\n offset\n );\n } else {\n context.glDrawElementsInstanced(\n primitiveType,\n count,\n indexBuffer.indexDatatype,\n offset,\n instanceCount\n );\n }\n } else {\n count = defaultValue(count, va.numberOfVertices);\n if (instanceCount === 0) {\n context._gl.drawArrays(primitiveType, offset, count);\n } else {\n context.glDrawArraysInstanced(\n primitiveType,\n offset,\n count,\n instanceCount\n );\n }\n }\n\n va._unBind();\n}\n\nContext.prototype.draw = function (\n drawCommand,\n passState,\n shaderProgram,\n uniformMap\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"drawCommand\", drawCommand);\n Check.defined(\"drawCommand.shaderProgram\", drawCommand._shaderProgram);\n //>>includeEnd('debug');\n\n passState = defaultValue(passState, this._defaultPassState);\n // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.\n var framebuffer = defaultValue(\n drawCommand._framebuffer,\n passState.framebuffer\n );\n var renderState = defaultValue(\n drawCommand._renderState,\n this._defaultRenderState\n );\n shaderProgram = defaultValue(shaderProgram, drawCommand._shaderProgram);\n uniformMap = defaultValue(uniformMap, drawCommand._uniformMap);\n\n beginDraw(this, framebuffer, passState, shaderProgram, renderState);\n continueDraw(this, drawCommand, shaderProgram, uniformMap);\n};\n\nContext.prototype.endFrame = function () {\n var gl = this._gl;\n gl.useProgram(null);\n\n this._currentFramebuffer = undefined;\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n var buffers = scratchBackBufferArray;\n if (this.drawBuffers) {\n this.glDrawBuffers(buffers);\n }\n\n var length = this._maxFrameTextureUnitIndex;\n this._maxFrameTextureUnitIndex = 0;\n\n for (var i = 0; i < length; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);\n }\n};\n\nContext.prototype.readPixels = function (readState) {\n var gl = this._gl;\n\n readState = defaultValue(readState, defaultValue.EMPTY_OBJECT);\n var x = Math.max(defaultValue(readState.x, 0), 0);\n var y = Math.max(defaultValue(readState.y, 0), 0);\n var width = defaultValue(readState.width, gl.drawingBufferWidth);\n var height = defaultValue(readState.height, gl.drawingBufferHeight);\n var framebuffer = readState.framebuffer;\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"readState.width\", width, 0);\n Check.typeOf.number.greaterThan(\"readState.height\", height, 0);\n //>>includeEnd('debug');\n\n var pixelDatatype = PixelDatatype.UNSIGNED_BYTE;\n if (defined(framebuffer) && framebuffer.numberOfColorAttachments > 0) {\n pixelDatatype = framebuffer.getColorTexture(0).pixelDatatype;\n }\n\n var pixels = PixelFormat.createTypedArray(\n PixelFormat.RGBA,\n pixelDatatype,\n width,\n height\n );\n\n bindFramebuffer(this, framebuffer);\n\n gl.readPixels(\n x,\n y,\n width,\n height,\n PixelFormat.RGBA,\n PixelDatatype.toWebGLConstant(pixelDatatype, this),\n pixels\n );\n\n return pixels;\n};\n\nvar viewportQuadAttributeLocations = {\n position: 0,\n textureCoordinates: 1,\n};\n\nContext.prototype.getViewportQuadVertexArray = function () {\n // Per-context cache for viewport quads\n var vertexArray = this.cache.viewportQuad_vertexArray;\n\n if (!defined(vertexArray)) {\n var geometry = new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: [-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0],\n }),\n\n textureCoordinates: new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: [0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0],\n }),\n },\n // Workaround Internet Explorer 11.0.8 lack of TRIANGLE_FAN\n indices: new Uint16Array([0, 1, 2, 0, 2, 3]),\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n vertexArray = VertexArray.fromGeometry({\n context: this,\n geometry: geometry,\n attributeLocations: viewportQuadAttributeLocations,\n bufferUsage: BufferUsage.STATIC_DRAW,\n interleave: true,\n });\n\n this.cache.viewportQuad_vertexArray = vertexArray;\n }\n\n return vertexArray;\n};\n\nContext.prototype.createViewportQuadCommand = function (\n fragmentShaderSource,\n overrides\n) {\n overrides = defaultValue(overrides, defaultValue.EMPTY_OBJECT);\n\n return new DrawCommand({\n vertexArray: this.getViewportQuadVertexArray(),\n primitiveType: PrimitiveType.TRIANGLES,\n renderState: overrides.renderState,\n shaderProgram: ShaderProgram.fromCache({\n context: this,\n vertexShaderSource: ViewportQuadVS,\n fragmentShaderSource: fragmentShaderSource,\n attributeLocations: viewportQuadAttributeLocations,\n }),\n uniformMap: overrides.uniformMap,\n owner: overrides.owner,\n framebuffer: overrides.framebuffer,\n pass: overrides.pass,\n });\n};\n\n/**\n * Gets the object associated with a pick color.\n *\n * @param {Color} pickColor The pick color.\n * @returns {Object} The object associated with the pick color, or undefined if no object is associated with that color.\n *\n * @example\n * var object = context.getObjectByPickColor(pickColor);\n *\n * @see Context#createPickId\n */\nContext.prototype.getObjectByPickColor = function (pickColor) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"pickColor\", pickColor);\n //>>includeEnd('debug');\n\n return this._pickObjects[pickColor.toRgba()];\n};\n\nfunction PickId(pickObjects, key, color) {\n this._pickObjects = pickObjects;\n this.key = key;\n this.color = color;\n}\n\nObject.defineProperties(PickId.prototype, {\n object: {\n get: function () {\n return this._pickObjects[this.key];\n },\n set: function (value) {\n this._pickObjects[this.key] = value;\n },\n },\n});\n\nPickId.prototype.destroy = function () {\n delete this._pickObjects[this.key];\n return undefined;\n};\n\n/**\n * Creates a unique ID associated with the input object for use with color-buffer picking.\n * The ID has an RGBA color value unique to this context. You must call destroy()\n * on the pick ID when destroying the input object.\n *\n * @param {Object} object The object to associate with the pick ID.\n * @returns {Object} A PickId object with a <code>color</code> property.\n *\n * @exception {RuntimeError} Out of unique Pick IDs.\n *\n *\n * @example\n * this._pickId = context.createPickId({\n * primitive : this,\n * id : this.id\n * });\n *\n * @see Context#getObjectByPickColor\n */\nContext.prototype.createPickId = function (object) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"object\", object);\n //>>includeEnd('debug');\n\n // the increment and assignment have to be separate statements to\n // actually detect overflow in the Uint32 value\n ++this._nextPickColor[0];\n var key = this._nextPickColor[0];\n if (key === 0) {\n // In case of overflow\n throw new RuntimeError(\"Out of unique Pick IDs.\");\n }\n\n this._pickObjects[key] = object;\n return new PickId(this._pickObjects, key, Color.fromRgba(key));\n};\n\nContext.prototype.isDestroyed = function () {\n return false;\n};\n\nContext.prototype.destroy = function () {\n // Destroy all objects in the cache that have a destroy method.\n var cache = this.cache;\n for (var property in cache) {\n if (cache.hasOwnProperty(property)) {\n var propertyValue = cache[property];\n if (defined(propertyValue.destroy)) {\n propertyValue.destroy();\n }\n }\n }\n\n this._shaderCache = this._shaderCache.destroy();\n this._textureCache = this._textureCache.destroy();\n this._defaultTexture = this._defaultTexture && this._defaultTexture.destroy();\n this._defaultCubeMap = this._defaultCubeMap && this._defaultCubeMap.destroy();\n\n return destroyObject(this);\n};\nexport default Context;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport when from \"../ThirdParty/when.js\";\nimport CubeMap from \"./CubeMap.js\";\n\n/**\n * Asynchronously loads six images and creates a cube map. Returns a promise that\n * will resolve to a {@link CubeMap} once loaded, or reject if any image fails to load.\n *\n * @function loadCubeMap\n *\n * @param {Context} context The context to use to create the cube map.\n * @param {Object} urls The source URL of each image. See the example below.\n * @returns {Promise.<CubeMap>} a promise that will resolve to the requested {@link CubeMap} when loaded.\n *\n * @exception {DeveloperError} context is required.\n * @exception {DeveloperError} urls is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\n *\n *\n * @example\n * Cesium.loadCubeMap(context, {\n * positiveX : 'skybox_px.png',\n * negativeX : 'skybox_nx.png',\n * positiveY : 'skybox_py.png',\n * negativeY : 'skybox_ny.png',\n * positiveZ : 'skybox_pz.png',\n * negativeZ : 'skybox_nz.png'\n * }).then(function(cubeMap) {\n * // use the cubemap\n * }).otherwise(function(error) {\n * // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n *\n * @private\n */\nfunction loadCubeMap(context, urls) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"context\", context);\n if (\n !defined(urls) ||\n !defined(urls.positiveX) ||\n !defined(urls.negativeX) ||\n !defined(urls.positiveY) ||\n !defined(urls.negativeY) ||\n !defined(urls.positiveZ) ||\n !defined(urls.negativeZ)\n ) {\n throw new DeveloperError(\n \"urls is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\"\n );\n }\n //>>includeEnd('debug');\n\n // PERFORMANCE_IDEA: Given the size of some cube maps, we should consider tiling them, which\n // would prevent hiccups when uploading, for example, six 4096x4096 textures to the GPU.\n //\n // Also, it is perhaps acceptable to use the context here in the callbacks, but\n // ideally, we would do it in the primitive's update function.\n var flipOptions = {\n flipY: true,\n preferImageBitmap: true,\n };\n\n var facePromises = [\n Resource.createIfNeeded(urls.positiveX).fetchImage(flipOptions),\n Resource.createIfNeeded(urls.negativeX).fetchImage(flipOptions),\n Resource.createIfNeeded(urls.positiveY).fetchImage(flipOptions),\n Resource.createIfNeeded(urls.negativeY).fetchImage(flipOptions),\n Resource.createIfNeeded(urls.positiveZ).fetchImage(flipOptions),\n Resource.createIfNeeded(urls.negativeZ).fetchImage(flipOptions),\n ];\n\n return when.all(facePromises, function (images) {\n return new CubeMap({\n context: context,\n source: {\n positiveX: images[0],\n negativeX: images[1],\n positiveY: images[2],\n negativeY: images[3],\n positiveZ: images[4],\n negativeZ: images[5],\n },\n });\n });\n}\nexport default loadCubeMap;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nvar RenderbufferFormat = {\n RGBA4: WebGLConstants.RGBA4,\n RGB5_A1: WebGLConstants.RGB5_A1,\n RGB565: WebGLConstants.RGB565,\n DEPTH_COMPONENT16: WebGLConstants.DEPTH_COMPONENT16,\n STENCIL_INDEX8: WebGLConstants.STENCIL_INDEX8,\n DEPTH_STENCIL: WebGLConstants.DEPTH_STENCIL,\n\n validate: function (renderbufferFormat) {\n return (\n renderbufferFormat === RenderbufferFormat.RGBA4 ||\n renderbufferFormat === RenderbufferFormat.RGB5_A1 ||\n renderbufferFormat === RenderbufferFormat.RGB565 ||\n renderbufferFormat === RenderbufferFormat.DEPTH_COMPONENT16 ||\n renderbufferFormat === RenderbufferFormat.STENCIL_INDEX8 ||\n renderbufferFormat === RenderbufferFormat.DEPTH_STENCIL\n );\n },\n};\nexport default Object.freeze(RenderbufferFormat);\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport RenderbufferFormat from \"./RenderbufferFormat.js\";\n\n/**\n * @private\n */\nfunction Renderbuffer(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.context\", options.context);\n //>>includeEnd('debug');\n\n var context = options.context;\n var gl = context._gl;\n var maximumRenderbufferSize = ContextLimits.maximumRenderbufferSize;\n\n var format = defaultValue(options.format, RenderbufferFormat.RGBA4);\n var width = defined(options.width) ? options.width : gl.drawingBufferWidth;\n var height = defined(options.height)\n ? options.height\n : gl.drawingBufferHeight;\n\n //>>includeStart('debug', pragmas.debug);\n if (!RenderbufferFormat.validate(format)) {\n throw new DeveloperError(\"Invalid format.\");\n }\n\n Check.typeOf.number.greaterThan(\"width\", width, 0);\n\n if (width > maximumRenderbufferSize) {\n throw new DeveloperError(\n \"Width must be less than or equal to the maximum renderbuffer size (\" +\n maximumRenderbufferSize +\n \"). Check maximumRenderbufferSize.\"\n );\n }\n\n Check.typeOf.number.greaterThan(\"height\", height, 0);\n\n if (height > maximumRenderbufferSize) {\n throw new DeveloperError(\n \"Height must be less than or equal to the maximum renderbuffer size (\" +\n maximumRenderbufferSize +\n \"). Check maximumRenderbufferSize.\"\n );\n }\n //>>includeEnd('debug');\n\n this._gl = gl;\n this._format = format;\n this._width = width;\n this._height = height;\n this._renderbuffer = this._gl.createRenderbuffer();\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._renderbuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, format, width, height);\n gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n}\n\nObject.defineProperties(Renderbuffer.prototype, {\n format: {\n get: function () {\n return this._format;\n },\n },\n width: {\n get: function () {\n return this._width;\n },\n },\n height: {\n get: function () {\n return this._height;\n },\n },\n});\n\nRenderbuffer.prototype._getRenderbuffer = function () {\n return this._renderbuffer;\n};\n\nRenderbuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nRenderbuffer.prototype.destroy = function () {\n this._gl.deleteRenderbuffer(this._renderbuffer);\n return destroyObject(this);\n};\nexport default Renderbuffer;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getImagePixels from \"../Core/getImagePixels.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * A policy for discarding tile images that match a known image containing a\n * \"missing\" image.\n *\n * @alias DiscardMissingTileImagePolicy\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Resource|String} options.missingImageUrl The URL of the known missing image.\n * @param {Cartesian2[]} options.pixelsToCheck An array of {@link Cartesian2} pixel positions to\n * compare against the missing image.\n * @param {Boolean} [options.disableCheckIfAllPixelsAreTransparent=false] If true, the discard check will be disabled\n * if all of the pixelsToCheck in the missingImageUrl have an alpha value of 0. If false, the\n * discard check will proceed no matter the values of the pixelsToCheck.\n */\nfunction DiscardMissingTileImagePolicy(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.missingImageUrl)) {\n throw new DeveloperError(\"options.missingImageUrl is required.\");\n }\n\n if (!defined(options.pixelsToCheck)) {\n throw new DeveloperError(\"options.pixelsToCheck is required.\");\n }\n //>>includeEnd('debug');\n\n this._pixelsToCheck = options.pixelsToCheck;\n this._missingImagePixels = undefined;\n this._missingImageByteLength = undefined;\n this._isReady = false;\n\n var resource = Resource.createIfNeeded(options.missingImageUrl);\n\n var that = this;\n\n function success(image) {\n if (defined(image.blob)) {\n that._missingImageByteLength = image.blob.size;\n }\n\n var pixels = getImagePixels(image);\n\n if (options.disableCheckIfAllPixelsAreTransparent) {\n var allAreTransparent = true;\n var width = image.width;\n\n var pixelsToCheck = options.pixelsToCheck;\n for (\n var i = 0, len = pixelsToCheck.length;\n allAreTransparent && i < len;\n ++i\n ) {\n var pos = pixelsToCheck[i];\n var index = pos.x * 4 + pos.y * width;\n var alpha = pixels[index + 3];\n\n if (alpha > 0) {\n allAreTransparent = false;\n }\n }\n\n if (allAreTransparent) {\n pixels = undefined;\n }\n }\n\n that._missingImagePixels = pixels;\n that._isReady = true;\n }\n\n function failure() {\n // Failed to download \"missing\" image, so assume that any truly missing tiles\n // will also fail to download and disable the discard check.\n that._missingImagePixels = undefined;\n that._isReady = true;\n }\n\n resource\n .fetchImage({\n preferBlob: true,\n preferImageBitmap: true,\n flipY: true,\n })\n .then(success)\n .otherwise(failure);\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {Boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nDiscardMissingTileImagePolicy.prototype.isReady = function () {\n return this._isReady;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {Boolean} True if the image should be discarded; otherwise, false.\n *\n * @exception {DeveloperError} <code>shouldDiscardImage</code> must not be called before the discard policy is ready.\n */\nDiscardMissingTileImagePolicy.prototype.shouldDiscardImage = function (image) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._isReady) {\n throw new DeveloperError(\n \"shouldDiscardImage must not be called before the discard policy is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var pixelsToCheck = this._pixelsToCheck;\n var missingImagePixels = this._missingImagePixels;\n\n // If missingImagePixels is undefined, it indicates that the discard check has been disabled.\n if (!defined(missingImagePixels)) {\n return false;\n }\n\n if (defined(image.blob) && image.blob.size !== this._missingImageByteLength) {\n return false;\n }\n\n var pixels = getImagePixels(image);\n var width = image.width;\n\n for (var i = 0, len = pixelsToCheck.length; i < len; ++i) {\n var pos = pixelsToCheck[i];\n var index = pos.x * 4 + pos.y * width;\n for (var offset = 0; offset < 4; ++offset) {\n var pixel = index + offset;\n if (pixels[pixel] !== missingImagePixels[pixel]) {\n return false;\n }\n }\n }\n return true;\n};\nexport default DiscardMissingTileImagePolicy;\n","import defined from \"../Core/defined.js\";\n\n/**\n * Describes a rasterized feature, such as a point, polygon, polyline, etc., in an imagery layer.\n *\n * @alias ImageryLayerFeatureInfo\n * @constructor\n */\nfunction ImageryLayerFeatureInfo() {\n /**\n * Gets or sets the name of the feature.\n * @type {String|undefined}\n */\n this.name = undefined;\n\n /**\n * Gets or sets an HTML description of the feature. The HTML is not trusted and should\n * be sanitized before display to the user.\n * @type {String|undefined}\n */\n this.description = undefined;\n\n /**\n * Gets or sets the position of the feature, or undefined if the position is not known.\n *\n * @type {Cartographic|undefined}\n */\n this.position = undefined;\n\n /**\n * Gets or sets the raw data describing the feature. The raw data may be in any\n * number of formats, such as GeoJSON, KML, etc.\n * @type {Object|undefined}\n */\n this.data = undefined;\n\n /**\n * Gets or sets the image layer of the feature.\n * @type {Object|undefined}\n */\n this.imageryLayer = undefined;\n}\n\n/**\n * Configures the name of this feature by selecting an appropriate property. The name will be obtained from\n * one of the following sources, in this order: 1) the property with the name 'name', 2) the property with the name 'title',\n * 3) the first property containing the word 'name', 4) the first property containing the word 'title'. If\n * the name cannot be obtained from any of these sources, the existing name will be left unchanged.\n *\n * @param {Object} properties An object literal containing the properties of the feature.\n */\nImageryLayerFeatureInfo.prototype.configureNameFromProperties = function (\n properties\n) {\n var namePropertyPrecedence = 10;\n var nameProperty;\n\n for (var key in properties) {\n if (properties.hasOwnProperty(key) && properties[key]) {\n var lowerKey = key.toLowerCase();\n\n if (namePropertyPrecedence > 1 && lowerKey === \"name\") {\n namePropertyPrecedence = 1;\n nameProperty = key;\n } else if (namePropertyPrecedence > 2 && lowerKey === \"title\") {\n namePropertyPrecedence = 2;\n nameProperty = key;\n } else if (namePropertyPrecedence > 3 && /name/i.test(key)) {\n namePropertyPrecedence = 3;\n nameProperty = key;\n } else if (namePropertyPrecedence > 4 && /title/i.test(key)) {\n namePropertyPrecedence = 4;\n nameProperty = key;\n }\n }\n }\n\n if (defined(nameProperty)) {\n this.name = properties[nameProperty];\n }\n};\n\n/**\n * Configures the description of this feature by creating an HTML table of properties and their values.\n *\n * @param {Object} properties An object literal containing the properties of the feature.\n */\nImageryLayerFeatureInfo.prototype.configureDescriptionFromProperties = function (\n properties\n) {\n function describe(properties) {\n var html = '<table class=\"cesium-infoBox-defaultTable\">';\n for (var key in properties) {\n if (properties.hasOwnProperty(key)) {\n var value = properties[key];\n if (defined(value)) {\n if (typeof value === \"object\") {\n html +=\n \"<tr><td>\" + key + \"</td><td>\" + describe(value) + \"</td></tr>\";\n } else {\n html += \"<tr><td>\" + key + \"</td><td>\" + value + \"</td></tr>\";\n }\n }\n }\n }\n html += \"</table>\";\n\n return html;\n }\n\n this.description = describe(properties);\n};\nexport default ImageryLayerFeatureInfo;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport loadCRN from \"../Core/loadCRN.js\";\nimport loadKTX from \"../Core/loadKTX.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * Provides imagery to be displayed on the surface of an ellipsoid. This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias ImageryProvider\n * @constructor\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see OpenStreetMapImageryProvider\n * @see TileMapServiceImageryProvider\n * @see GoogleEarthEnterpriseImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see GridImageryProvider\n * @see IonImageryProvider\n * @see MapboxImageryProvider\n * @see MapboxStyleImageryProvider\n * @see SingleTileImageryProvider\n * @see TileCoordinatesImageryProvider\n * @see UrlTemplateImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Imagery%20Layers.html|Cesium Sandcastle Imagery Layers Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Imagery%20Layers%20Manipulation.html|Cesium Sandcastle Imagery Manipulation Demo}\n */\nfunction ImageryProvider() {\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(ImageryProvider.prototype, {\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof ImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof ImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by the instance. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link ImageryProvider#ready} returns true. Generally,\n * a minimum level should only be used when the rectangle of the imagery is small\n * enough that the number of tiles at the minimum level is small. An imagery\n * provider with more than a few tiles at the minimum level will lead to\n * rendering problems.\n * @memberof ImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof ImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof ImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof ImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof ImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nImageryProvider.prototype.getTileCredits = function (x, y, level) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nImageryProvider.prototype.requestImage = function (x, y, level, request) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link ImageryProvider#ready} returns true.\n * This function is optional, so it may not exist on all ImageryProviders.\n *\n * @function\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n DeveloperError.throwInstantiationError();\n};\n\nvar ktxRegex = /\\.ktx$/i;\nvar crnRegex = /\\.crn$/i;\n\n/**\n * Loads an image from a given URL. If the server referenced by the URL already has\n * too many requests pending, this function will instead return undefined, indicating\n * that the request should be retried later.\n *\n * @param {ImageryProvider} imageryProvider The imagery provider for the URL.\n * @param {Resource|String} url The URL of the image.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n */\nImageryProvider.loadImage = function (imageryProvider, url) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"url\", url);\n //>>includeEnd('debug');\n\n var resource = Resource.createIfNeeded(url);\n\n if (ktxRegex.test(resource.url)) {\n return loadKTX(resource);\n } else if (crnRegex.test(resource.url)) {\n return loadCRN(resource);\n } else if (\n defined(imageryProvider) &&\n defined(imageryProvider.tileDiscardPolicy)\n ) {\n return resource.fetchImage({\n preferBlob: true,\n preferImageBitmap: true,\n flipY: true,\n });\n }\n\n return resource.fetchImage({\n preferImageBitmap: true,\n flipY: true,\n });\n};\nexport default ImageryProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport DiscardMissingTileImagePolicy from \"./DiscardMissingTileImagePolicy.js\";\nimport ImageryLayerFeatureInfo from \"./ImageryLayerFeatureInfo.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {Object} ArcGisMapServerImageryProvider.ConstructorOptions\n *\n * Initialization options for the ArcGisMapServerImageryProvider constructor\n *\n * @property {Resource|String} url The URL of the ArcGIS MapServer service.\n * @property {String} [token] The ArcGIS token used to authenticate with the ArcGIS MapServer service.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n * is invalid and should be discarded. If this value is not specified, a default\n * {@link DiscardMissingTileImagePolicy} is used for tiled map servers, and a\n * {@link NeverTileDiscardPolicy} is used for non-tiled map servers. In the former case,\n * we request tile 0,0 at the maximum tile level and check pixels (0,0), (200,20), (20,200),\n * (80,110), and (160, 130). If all of these pixels are transparent, the discard check is\n * disabled and no tiles are discarded. If any of them have a non-transparent color, any\n * tile that has the same values in these pixel locations is discarded. The end result of\n * these defaults should be correct tile discarding for a standard ArcGIS Server. To ensure\n * that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this\n * parameter.\n * @property {Boolean} [usePreCachedTilesIfAvailable=true] If true, the server's pre-cached\n * tiles are used if they are available. If false, any pre-cached tiles are ignored and the\n * 'export' service is used.\n * @property {String} [layers] A comma-separated list of the layers to show, or undefined if all layers should be shown.\n * @property {Boolean} [enablePickFeatures=true] If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will invoke\n * the Identify service on the MapServer and return the features included in the response. If false,\n * {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n * without communicating with the server. Set this property to false if you don't want this provider's features to\n * be pickable. Can be overridden by setting the {@link ArcGisMapServerImageryProvider#enablePickFeatures} property on the object.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer. This parameter is ignored when accessing\n * a tiled layer.\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme to use to divide the world into tiles.\n * This parameter is ignored when accessing a tiled server.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified and used,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas. This parameter is ignored when accessing a tiled server.\n * @property {Number} [tileWidth=256] The width of each tile in pixels. This parameter is ignored when accessing a tiled server.\n * @property {Number} [tileHeight=256] The height of each tile in pixels. This parameter is ignored when accessing a tiled server.\n * @property {Number} [maximumLevel] The maximum tile level to request, or undefined if there is no maximum. This parameter is ignored when accessing\n * a tiled server.\n */\n\n/**\n * Provides tiled imagery hosted by an ArcGIS MapServer. By default, the server's pre-cached tiles are\n * used, if available.\n *\n * @alias ArcGisMapServerImageryProvider\n * @constructor\n *\n * @param {ArcGisMapServerImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * var esri = new Cesium.ArcGisMapServerImageryProvider({\n * url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'\n * });\n *\n * @see {@link https://developers.arcgis.com/rest/|ArcGIS Server REST API}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction ArcGisMapServerImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(options.url);\n resource.appendForwardSlash();\n\n if (defined(options.token)) {\n resource.setQueryParameters({\n token: options.token,\n });\n }\n\n this._resource = resource;\n this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n this._tileWidth = defaultValue(options.tileWidth, 256);\n this._tileHeight = defaultValue(options.tileHeight, 256);\n this._maximumLevel = options.maximumLevel;\n this._tilingScheme = defaultValue(\n options.tilingScheme,\n new GeographicTilingScheme({ ellipsoid: options.ellipsoid })\n );\n this._useTiles = defaultValue(options.usePreCachedTilesIfAvailable, true);\n this._rectangle = defaultValue(\n options.rectangle,\n this._tilingScheme.rectangle\n );\n this._layers = options.layers;\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n /**\n * Gets or sets a value indicating whether feature picking is enabled. If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will\n * invoke the \"identify\" operation on the ArcGIS server and return the features included in the response. If false,\n * {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n * without communicating with the server.\n * @type {Boolean}\n * @default true\n */\n this.enablePickFeatures = defaultValue(options.enablePickFeatures, true);\n\n this._errorEvent = new Event();\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n // Grab the details of this MapServer.\n var that = this;\n var metadataError;\n\n function metadataSuccess(data) {\n var tileInfo = data.tileInfo;\n if (!defined(tileInfo)) {\n that._useTiles = false;\n } else {\n that._tileWidth = tileInfo.rows;\n that._tileHeight = tileInfo.cols;\n\n if (\n tileInfo.spatialReference.wkid === 102100 ||\n tileInfo.spatialReference.wkid === 102113\n ) {\n that._tilingScheme = new WebMercatorTilingScheme({\n ellipsoid: options.ellipsoid,\n });\n } else if (data.tileInfo.spatialReference.wkid === 4326) {\n that._tilingScheme = new GeographicTilingScheme({\n ellipsoid: options.ellipsoid,\n });\n } else {\n var message =\n \"Tile spatial reference WKID \" +\n data.tileInfo.spatialReference.wkid +\n \" is not supported.\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n return;\n }\n that._maximumLevel = data.tileInfo.lods.length - 1;\n\n if (defined(data.fullExtent)) {\n if (\n defined(data.fullExtent.spatialReference) &&\n defined(data.fullExtent.spatialReference.wkid)\n ) {\n if (\n data.fullExtent.spatialReference.wkid === 102100 ||\n data.fullExtent.spatialReference.wkid === 102113\n ) {\n var projection = new WebMercatorProjection();\n var extent = data.fullExtent;\n var sw = projection.unproject(\n new Cartesian3(\n Math.max(\n extent.xmin,\n -that._tilingScheme.ellipsoid.maximumRadius * Math.PI\n ),\n Math.max(\n extent.ymin,\n -that._tilingScheme.ellipsoid.maximumRadius * Math.PI\n ),\n 0.0\n )\n );\n var ne = projection.unproject(\n new Cartesian3(\n Math.min(\n extent.xmax,\n that._tilingScheme.ellipsoid.maximumRadius * Math.PI\n ),\n Math.min(\n extent.ymax,\n that._tilingScheme.ellipsoid.maximumRadius * Math.PI\n ),\n 0.0\n )\n );\n that._rectangle = new Rectangle(\n sw.longitude,\n sw.latitude,\n ne.longitude,\n ne.latitude\n );\n } else if (data.fullExtent.spatialReference.wkid === 4326) {\n that._rectangle = Rectangle.fromDegrees(\n data.fullExtent.xmin,\n data.fullExtent.ymin,\n data.fullExtent.xmax,\n data.fullExtent.ymax\n );\n } else {\n var extentMessage =\n \"fullExtent.spatialReference WKID \" +\n data.fullExtent.spatialReference.wkid +\n \" is not supported.\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n extentMessage,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n return;\n }\n }\n } else {\n that._rectangle = that._tilingScheme.rectangle;\n }\n\n // Install the default tile discard policy if none has been supplied.\n if (!defined(that._tileDiscardPolicy)) {\n that._tileDiscardPolicy = new DiscardMissingTileImagePolicy({\n missingImageUrl: buildImageResource(that, 0, 0, that._maximumLevel)\n .url,\n pixelsToCheck: [\n new Cartesian2(0, 0),\n new Cartesian2(200, 20),\n new Cartesian2(20, 200),\n new Cartesian2(80, 110),\n new Cartesian2(160, 130),\n ],\n disableCheckIfAllPixelsAreTransparent: true,\n });\n }\n\n that._useTiles = true;\n }\n\n if (defined(data.copyrightText) && data.copyrightText.length > 0) {\n that._credit = new Credit(data.copyrightText);\n }\n\n that._ready = true;\n that._readyPromise.resolve(true);\n TileProviderError.handleSuccess(metadataError);\n }\n\n function metadataFailure(e) {\n var message =\n \"An error occurred while accessing \" + that._resource.url + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n that._readyPromise.reject(new RuntimeError(message));\n }\n\n function requestMetadata() {\n var resource = that._resource.getDerivedResource({\n queryParameters: {\n f: \"json\",\n },\n });\n var metadata = resource.fetchJsonp();\n when(metadata, metadataSuccess, metadataFailure);\n }\n\n if (this._useTiles) {\n requestMetadata();\n } else {\n this._ready = true;\n this._readyPromise.resolve(true);\n }\n}\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n var resource;\n if (imageryProvider._useTiles) {\n resource = imageryProvider._resource.getDerivedResource({\n url: \"tile/\" + level + \"/\" + y + \"/\" + x,\n request: request,\n });\n } else {\n var nativeRectangle = imageryProvider._tilingScheme.tileXYToNativeRectangle(\n x,\n y,\n level\n );\n var bbox =\n nativeRectangle.west +\n \",\" +\n nativeRectangle.south +\n \",\" +\n nativeRectangle.east +\n \",\" +\n nativeRectangle.north;\n\n var query = {\n bbox: bbox,\n size: imageryProvider._tileWidth + \",\" + imageryProvider._tileHeight,\n format: \"png\",\n transparent: true,\n f: \"image\",\n };\n\n if (\n imageryProvider._tilingScheme.projection instanceof GeographicProjection\n ) {\n query.bboxSR = 4326;\n query.imageSR = 4326;\n } else {\n query.bboxSR = 3857;\n query.imageSR = 3857;\n }\n if (imageryProvider.layers) {\n query.layers = \"show:\" + imageryProvider.layers;\n }\n\n resource = imageryProvider._resource.getDerivedResource({\n url: \"export\",\n request: request,\n queryParameters: query,\n });\n }\n\n return resource;\n}\n\nObject.defineProperties(ArcGisMapServerImageryProvider.prototype, {\n /**\n * Gets the URL of the ArcGIS MapServer.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource._url;\n },\n },\n\n /**\n * Gets the ArcGIS token used to authenticate with the ArcGis MapServer service.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n token: {\n get: function () {\n return this._resource.queryParameters.token;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"rectangle must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n * @memberof ArcGisMapServerImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether this imagery provider is using pre-cached tiles from the\n * ArcGIS MapServer. If the imagery provider is not yet ready ({@link ArcGisMapServerImageryProvider#ready}), this function\n * will return the value of `options.usePreCachedTilesIfAvailable`, even if the MapServer does\n * not have pre-cached tiles.\n * @memberof ArcGisMapServerImageryProvider.prototype\n *\n * @type {Boolean}\n * @readonly\n * @default true\n */\n usingPrecachedTiles: {\n get: function () {\n return this._useTiles;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof ArcGisMapServerImageryProvider.prototype\n *\n * @type {Boolean}\n * @readonly\n * @default true\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n\n /**\n * Gets the comma-separated list of layer IDs to show.\n * @memberof ArcGisMapServerImageryProvider.prototype\n *\n * @type {String}\n */\n layers: {\n get: function () {\n return this._layers;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nArcGisMapServerImageryProvider.prototype.getTileCredits = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nArcGisMapServerImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return ImageryProvider.loadImage(\n this,\n buildImageResource(this, x, y, level, request)\n );\n};\n\n/**\n /**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link ImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nArcGisMapServerImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"pickFeatures must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n if (!this.enablePickFeatures) {\n return undefined;\n }\n\n var rectangle = this._tilingScheme.tileXYToNativeRectangle(x, y, level);\n\n var horizontal;\n var vertical;\n var sr;\n if (this._tilingScheme.projection instanceof GeographicProjection) {\n horizontal = CesiumMath.toDegrees(longitude);\n vertical = CesiumMath.toDegrees(latitude);\n sr = \"4326\";\n } else {\n var projected = this._tilingScheme.projection.project(\n new Cartographic(longitude, latitude, 0.0)\n );\n horizontal = projected.x;\n vertical = projected.y;\n sr = \"3857\";\n }\n\n var layers = \"visible\";\n if (defined(this._layers)) {\n layers += \":\" + this._layers;\n }\n\n var query = {\n f: \"json\",\n tolerance: 2,\n geometryType: \"esriGeometryPoint\",\n geometry: horizontal + \",\" + vertical,\n mapExtent:\n rectangle.west +\n \",\" +\n rectangle.south +\n \",\" +\n rectangle.east +\n \",\" +\n rectangle.north,\n imageDisplay: this._tileWidth + \",\" + this._tileHeight + \",96\",\n sr: sr,\n layers: layers,\n };\n\n var resource = this._resource.getDerivedResource({\n url: \"identify\",\n queryParameters: query,\n });\n\n return resource.fetchJson().then(function (json) {\n var result = [];\n\n var features = json.results;\n if (!defined(features)) {\n return result;\n }\n\n for (var i = 0; i < features.length; ++i) {\n var feature = features[i];\n\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.data = feature;\n featureInfo.name = feature.value;\n featureInfo.properties = feature.attributes;\n featureInfo.configureDescriptionFromProperties(feature.attributes);\n\n // If this is a point feature, use the coordinates of the point.\n if (feature.geometryType === \"esriGeometryPoint\" && feature.geometry) {\n var wkid =\n feature.geometry.spatialReference &&\n feature.geometry.spatialReference.wkid\n ? feature.geometry.spatialReference.wkid\n : 4326;\n if (wkid === 4326 || wkid === 4283) {\n featureInfo.position = Cartographic.fromDegrees(\n feature.geometry.x,\n feature.geometry.y,\n feature.geometry.z\n );\n } else if (wkid === 102100 || wkid === 900913 || wkid === 3857) {\n var projection = new WebMercatorProjection();\n featureInfo.position = projection.unproject(\n new Cartesian3(\n feature.geometry.x,\n feature.geometry.y,\n feature.geometry.z\n )\n );\n }\n }\n\n result.push(featureInfo);\n }\n\n return result;\n });\n};\nexport default ArcGisMapServerImageryProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * A post process stage that will get the luminance value at each pixel and\n * uses parallel reduction to compute the average luminance in a 1x1 texture.\n * This texture can be used as input for tone mapping.\n *\n * @constructor\n * @private\n */\nfunction AutoExposure() {\n this._uniformMap = undefined;\n this._command = undefined;\n\n this._colorTexture = undefined;\n this._depthTexture = undefined;\n\n this._ready = false;\n\n this._name = \"czm_autoexposure\";\n\n this._logDepthChanged = undefined;\n this._useLogDepth = undefined;\n\n this._framebuffers = undefined;\n this._previousLuminance = undefined;\n\n this._commands = undefined;\n this._clearCommand = undefined;\n\n this._minMaxLuminance = new Cartesian2();\n\n /**\n * Whether or not to execute this post-process stage when ready.\n *\n * @type {Boolean}\n */\n this.enabled = true;\n this._enabled = true;\n\n /**\n * The minimum value used to clamp the luminance.\n *\n * @type {Number}\n * @default 0.1\n */\n this.minimumLuminance = 0.1;\n\n /**\n * The maximum value used to clamp the luminance.\n *\n * @type {Number}\n * @default 10.0\n */\n this.maximumLuminance = 10.0;\n}\n\nObject.defineProperties(AutoExposure.prototype, {\n /**\n * Determines if this post-process stage is ready to be executed. A stage is only executed when both <code>ready</code>\n * and {@link AutoExposure#enabled} are <code>true</code>. A stage will not be ready while it is waiting on textures\n * to load.\n *\n * @memberof AutoExposure.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n /**\n * The unique name of this post-process stage for reference by other stages.\n *\n * @memberof AutoExposure.prototype\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n\n /**\n * A reference to the texture written to when executing this post process stage.\n *\n * @memberof AutoExposure.prototype\n * @type {Texture}\n * @readonly\n * @private\n */\n outputTexture: {\n get: function () {\n var framebuffers = this._framebuffers;\n if (!defined(framebuffers)) {\n return undefined;\n }\n return framebuffers[framebuffers.length - 1].getColorTexture(0);\n },\n },\n});\n\nfunction destroyFramebuffers(autoexposure) {\n var framebuffers = autoexposure._framebuffers;\n if (!defined(framebuffers)) {\n return;\n }\n\n var length = framebuffers.length;\n for (var i = 0; i < length; ++i) {\n framebuffers[i].destroy();\n }\n autoexposure._framebuffers = undefined;\n\n autoexposure._previousLuminance.destroy();\n autoexposure._previousLuminance = undefined;\n}\n\nfunction createFramebuffers(autoexposure, context) {\n destroyFramebuffers(autoexposure);\n\n var width = autoexposure._width;\n var height = autoexposure._height;\n\n var pixelFormat = PixelFormat.RGBA;\n var pixelDatatype = context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT;\n\n var length = Math.ceil(Math.log(Math.max(width, height)) / Math.log(3.0));\n var framebuffers = new Array(length);\n for (var i = 0; i < length; ++i) {\n width = Math.max(Math.ceil(width / 3.0), 1.0);\n height = Math.max(Math.ceil(height / 3.0), 1.0);\n framebuffers[i] = new Framebuffer({\n context: context,\n colorTextures: [\n new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: pixelFormat,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n }),\n ],\n });\n }\n\n var lastTexture = framebuffers[length - 1].getColorTexture(0);\n autoexposure._previousLuminance = new Framebuffer({\n context: context,\n colorTextures: [\n new Texture({\n context: context,\n width: lastTexture.width,\n height: lastTexture.height,\n pixelFormat: pixelFormat,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n }),\n ],\n });\n\n autoexposure._framebuffers = framebuffers;\n}\n\nfunction destroyCommands(autoexposure) {\n var commands = autoexposure._commands;\n if (!defined(commands)) {\n return;\n }\n\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n commands[i].shaderProgram.destroy();\n }\n autoexposure._commands = undefined;\n}\n\nfunction createUniformMap(autoexposure, index) {\n var uniforms;\n if (index === 0) {\n uniforms = {\n colorTexture: function () {\n return autoexposure._colorTexture;\n },\n colorTextureDimensions: function () {\n return autoexposure._colorTexture.dimensions;\n },\n };\n } else {\n var texture = autoexposure._framebuffers[index - 1].getColorTexture(0);\n uniforms = {\n colorTexture: function () {\n return texture;\n },\n colorTextureDimensions: function () {\n return texture.dimensions;\n },\n };\n }\n\n uniforms.minMaxLuminance = function () {\n return autoexposure._minMaxLuminance;\n };\n uniforms.previousLuminance = function () {\n return autoexposure._previousLuminance.getColorTexture(0);\n };\n\n return uniforms;\n}\n\nfunction getShaderSource(index, length) {\n var source =\n \"uniform sampler2D colorTexture; \\n\" +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"float sampleTexture(vec2 offset) { \\n\";\n\n if (index === 0) {\n source +=\n \" vec4 color = texture2D(colorTexture, v_textureCoordinates + offset); \\n\" +\n \" return czm_luminance(color.rgb); \\n\";\n } else {\n source +=\n \" return texture2D(colorTexture, v_textureCoordinates + offset).r; \\n\";\n }\n\n source += \"}\\n\\n\";\n\n source +=\n \"uniform vec2 colorTextureDimensions; \\n\" +\n \"uniform vec2 minMaxLuminance; \\n\" +\n \"uniform sampler2D previousLuminance; \\n\" +\n \"void main() { \\n\" +\n \" float color = 0.0; \\n\" +\n \" float xStep = 1.0 / colorTextureDimensions.x; \\n\" +\n \" float yStep = 1.0 / colorTextureDimensions.y; \\n\" +\n \" int count = 0; \\n\" +\n \" for (int i = 0; i < 3; ++i) { \\n\" +\n \" for (int j = 0; j < 3; ++j) { \\n\" +\n \" vec2 offset; \\n\" +\n \" offset.x = -xStep + float(i) * xStep; \\n\" +\n \" offset.y = -yStep + float(j) * yStep; \\n\" +\n \" if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) { \\n\" +\n \" continue; \\n\" +\n \" } \\n\" +\n \" color += sampleTexture(offset); \\n\" +\n \" ++count; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" if (count > 0) { \\n\" +\n \" color /= float(count); \\n\" +\n \" } \\n\";\n\n if (index === length - 1) {\n source +=\n \" float previous = texture2D(previousLuminance, vec2(0.5)).r; \\n\" +\n \" color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \\n\" +\n \" color = previous + (color - previous) / (60.0 * 1.5); \\n\" +\n \" color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \\n\";\n }\n\n source += \" gl_FragColor = vec4(color); \\n\" + \"} \\n\";\n return source;\n}\n\nfunction createCommands(autoexposure, context) {\n destroyCommands(autoexposure);\n var framebuffers = autoexposure._framebuffers;\n var length = framebuffers.length;\n\n var commands = new Array(length);\n\n for (var i = 0; i < length; ++i) {\n commands[i] = context.createViewportQuadCommand(\n getShaderSource(i, length),\n {\n framebuffer: framebuffers[i],\n uniformMap: createUniformMap(autoexposure, i),\n }\n );\n }\n autoexposure._commands = commands;\n}\n\n/**\n * A function that will be called before execute. Used to clear any textures attached to framebuffers.\n * @param {Context} context The context.\n * @private\n */\nAutoExposure.prototype.clear = function (context) {\n var framebuffers = this._framebuffers;\n if (!defined(framebuffers)) {\n return;\n }\n\n var clearCommand = this._clearCommand;\n if (!defined(clearCommand)) {\n clearCommand = this._clearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n framebuffer: undefined,\n });\n }\n\n var length = framebuffers.length;\n for (var i = 0; i < length; ++i) {\n clearCommand.framebuffer = framebuffers[i];\n clearCommand.execute(context);\n }\n};\n\n/**\n * A function that will be called before execute. Used to create WebGL resources and load any textures.\n * @param {Context} context The context.\n * @private\n */\nAutoExposure.prototype.update = function (context) {\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n\n if (width !== this._width || height !== this._height) {\n this._width = width;\n this._height = height;\n\n createFramebuffers(this, context);\n createCommands(this, context);\n\n if (!this._ready) {\n this._ready = true;\n }\n }\n\n this._minMaxLuminance.x = this.minimumLuminance;\n this._minMaxLuminance.y = this.maximumLuminance;\n\n var framebuffers = this._framebuffers;\n var temp = framebuffers[framebuffers.length - 1];\n framebuffers[framebuffers.length - 1] = this._previousLuminance;\n this._commands[\n this._commands.length - 1\n ].framebuffer = this._previousLuminance;\n this._previousLuminance = temp;\n};\n\n/**\n * Executes the post-process stage. The color texture is the texture rendered to by the scene or from the previous stage.\n * @param {Context} context The context.\n * @param {Texture} colorTexture The input color texture.\n * @private\n */\nAutoExposure.prototype.execute = function (context, colorTexture) {\n this._colorTexture = colorTexture;\n\n var commands = this._commands;\n if (!defined(commands)) {\n return;\n }\n\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n commands[i].execute(context);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see AutoExposure#destroy\n */\nAutoExposure.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see AutoExposure#isDestroyed\n */\nAutoExposure.prototype.destroy = function () {\n destroyFramebuffers(this);\n destroyCommands(this);\n return destroyObject(this);\n};\nexport default AutoExposure;\n","import defined from \"../Core/defined.js\";\n\n/**\n * A policy for discarding tile images that contain no data (and so aren't actually images).\n * This policy discards {@link DiscardEmptyTileImagePolicy.EMPTY_IMAGE}, which is\n * expected to be used in place of any empty tile images by the image loading code.\n *\n * @alias DiscardEmptyTileImagePolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n */\nfunction DiscardEmptyTileImagePolicy(options) {}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {Boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nDiscardEmptyTileImagePolicy.prototype.isReady = function () {\n return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {Boolean} True if the image should be discarded; otherwise, false.\n */\nDiscardEmptyTileImagePolicy.prototype.shouldDiscardImage = function (image) {\n return DiscardEmptyTileImagePolicy.EMPTY_IMAGE === image;\n};\n\nvar emptyImage;\n\nObject.defineProperties(DiscardEmptyTileImagePolicy, {\n /**\n * Default value for representing an empty image.\n * @type {HTMLImageElement}\n * @readonly\n * @memberof DiscardEmptyTileImagePolicy\n */\n EMPTY_IMAGE: {\n get: function () {\n if (!defined(emptyImage)) {\n emptyImage = new Image();\n // load a blank data URI with a 1x1 transparent pixel.\n emptyImage.src =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n }\n return emptyImage;\n },\n },\n});\nexport default DiscardEmptyTileImagePolicy;\n","/**\n * The types of imagery provided by Bing Maps.\n *\n * @enum {Number}\n *\n * @see BingMapsImageryProvider\n */\nvar BingMapsStyle = {\n /**\n * Aerial imagery.\n *\n * @type {String}\n * @constant\n */\n AERIAL: \"Aerial\",\n\n /**\n * Aerial imagery with a road overlay.\n *\n * @type {String}\n * @constant\n * @deprecated See https://github.com/CesiumGS/cesium/issues/7128.\n * Use `BingMapsStyle.AERIAL_WITH_LABELS_ON_DEMAND` instead\n */\n AERIAL_WITH_LABELS: \"AerialWithLabels\",\n\n /**\n * Aerial imagery with a road overlay.\n *\n * @type {String}\n * @constant\n */\n AERIAL_WITH_LABELS_ON_DEMAND: \"AerialWithLabelsOnDemand\",\n\n /**\n * Roads without additional imagery.\n *\n * @type {String}\n * @constant\n * @deprecated See https://github.com/CesiumGS/cesium/issues/7128.\n * Use `BingMapsStyle.ROAD_ON_DEMAND` instead\n */\n ROAD: \"Road\",\n\n /**\n * Roads without additional imagery.\n *\n * @type {String}\n * @constant\n */\n ROAD_ON_DEMAND: \"RoadOnDemand\",\n\n /**\n * A dark version of the road maps.\n *\n * @type {String}\n * @constant\n */\n CANVAS_DARK: \"CanvasDark\",\n\n /**\n * A lighter version of the road maps.\n *\n * @type {String}\n * @constant\n */\n CANVAS_LIGHT: \"CanvasLight\",\n\n /**\n * A grayscale version of the road maps.\n *\n * @type {String}\n * @constant\n */\n CANVAS_GRAY: \"CanvasGray\",\n\n /**\n * Ordnance Survey imagery. This imagery is visible only for the London, UK area.\n *\n * @type {String}\n * @constant\n */\n ORDNANCE_SURVEY: \"OrdnanceSurvey\",\n\n /**\n * Collins Bart imagery.\n *\n * @type {String}\n * @constant\n */\n COLLINS_BART: \"CollinsBart\",\n};\nexport default Object.freeze(BingMapsStyle);\n","import BingMapsApi from \"../Core/BingMapsApi.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport BingMapsStyle from \"./BingMapsStyle.js\";\nimport DiscardEmptyTilePolicy from \"./DiscardEmptyTileImagePolicy.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {Object} BingMapsImageryProvider.ConstructorOptions\n *\n * Initialization options for the BingMapsImageryProvider constructor\n *\n * @property {Resource|String} url The url of the Bing Maps server hosting the imagery.\n * @property {String} [key] The Bing Maps key for your application, which can be\n * created at {@link https://www.bingmapsportal.com/}.\n * If this parameter is not provided, {@link BingMapsApi.defaultKey} is used, which is undefined by default.\n * @property {String} [tileProtocol] The protocol to use when loading tiles, e.g. 'http' or 'https'.\n * By default, tiles are loaded using the same protocol as the page.\n * @property {BingMapsStyle} [mapStyle=BingMapsStyle.AERIAL] The type of Bing Maps imagery to load.\n * @property {String} [culture=''] The culture to use when requesting Bing Maps imagery. Not\n * all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx}\n * for information on the supported cultures.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n * is invalid and should be discarded. By default, a {@link DiscardEmptyTileImagePolicy}\n * will be used, with the expectation that the Bing Maps server will send a zero-length response for missing tiles.\n * To ensure that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this parameter.\n */\n\n/**\n * Provides tiled imagery using the Bing Maps Imagery REST API.\n *\n * @alias BingMapsImageryProvider\n * @constructor\n *\n * @param {BingMapsImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * var bing = new Cesium.BingMapsImageryProvider({\n * url : 'https://dev.virtualearth.net',\n * key : 'get-yours-at-https://www.bingmapsportal.com/',\n * mapStyle : Cesium.BingMapsStyle.AERIAL\n * });\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/ff701713.aspx|Bing Maps REST Services}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction BingMapsImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default 1.0\n */\n this.defaultGamma = 1.0;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n this._key = BingMapsApi.getKey(options.key);\n this._resource = Resource.createIfNeeded(options.url);\n this._resource.appendForwardSlash();\n this._tileProtocol = options.tileProtocol;\n this._mapStyle = defaultValue(options.mapStyle, BingMapsStyle.AERIAL);\n this._culture = defaultValue(options.culture, \"\");\n\n this._tileDiscardPolicy = options.tileDiscardPolicy;\n if (!defined(this._tileDiscardPolicy)) {\n this._tileDiscardPolicy = new DiscardEmptyTilePolicy();\n }\n\n this._proxy = options.proxy;\n this._credit = new Credit(\n '<a href=\"http://www.bing.com\"><img src=\"' +\n BingMapsImageryProvider.logoUrl +\n '\" title=\"Bing Imagery\"/></a>'\n );\n\n this._tilingScheme = new WebMercatorTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 2,\n ellipsoid: options.ellipsoid,\n });\n\n this._tileWidth = undefined;\n this._tileHeight = undefined;\n this._maximumLevel = undefined;\n this._imageUrlTemplate = undefined;\n this._imageUrlSubdomains = undefined;\n\n this._errorEvent = new Event();\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n var tileProtocol = this._tileProtocol;\n\n // For backward compatibility reasons, the tileProtocol may end with\n // a `:`. Remove it.\n if (defined(tileProtocol)) {\n if (\n tileProtocol.length > 0 &&\n tileProtocol[tileProtocol.length - 1] === \":\"\n ) {\n tileProtocol = tileProtocol.substr(0, tileProtocol.length - 1);\n }\n } else {\n // use http if the document's protocol is http, otherwise use https\n var documentProtocol = document.location.protocol;\n tileProtocol = documentProtocol === \"http:\" ? \"http\" : \"https\";\n }\n\n var metadataResource = this._resource.getDerivedResource({\n url: \"REST/v1/Imagery/Metadata/\" + this._mapStyle,\n queryParameters: {\n incl: \"ImageryProviders\",\n key: this._key,\n uriScheme: tileProtocol,\n },\n });\n var that = this;\n var metadataError;\n\n function metadataSuccess(data) {\n if (data.resourceSets.length !== 1) {\n metadataFailure();\n return;\n }\n var resource = data.resourceSets[0].resources[0];\n\n that._tileWidth = resource.imageWidth;\n that._tileHeight = resource.imageHeight;\n that._maximumLevel = resource.zoomMax - 1;\n that._imageUrlSubdomains = resource.imageUrlSubdomains;\n that._imageUrlTemplate = resource.imageUrl;\n\n var attributionList = (that._attributionList = resource.imageryProviders);\n if (!attributionList) {\n attributionList = that._attributionList = [];\n }\n\n for (\n var attributionIndex = 0, attributionLength = attributionList.length;\n attributionIndex < attributionLength;\n ++attributionIndex\n ) {\n var attribution = attributionList[attributionIndex];\n\n if (attribution.credit instanceof Credit) {\n // If attribution.credit has already been created\n // then we are using a cached value, which means\n // none of the remaining processing needs to be done.\n break;\n }\n\n attribution.credit = new Credit(attribution.attribution);\n var coverageAreas = attribution.coverageAreas;\n\n for (\n var areaIndex = 0, areaLength = attribution.coverageAreas.length;\n areaIndex < areaLength;\n ++areaIndex\n ) {\n var area = coverageAreas[areaIndex];\n var bbox = area.bbox;\n area.bbox = new Rectangle(\n CesiumMath.toRadians(bbox[1]),\n CesiumMath.toRadians(bbox[0]),\n CesiumMath.toRadians(bbox[3]),\n CesiumMath.toRadians(bbox[2])\n );\n }\n }\n\n that._ready = true;\n that._readyPromise.resolve(true);\n TileProviderError.handleSuccess(metadataError);\n }\n\n function metadataFailure(e) {\n var message =\n \"An error occurred while accessing \" + metadataResource.url + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n that._readyPromise.reject(new RuntimeError(message));\n }\n\n var cacheKey = metadataResource.url;\n function requestMetadata() {\n var promise = metadataResource.fetchJsonp(\"jsonp\");\n BingMapsImageryProvider._metadataCache[cacheKey] = promise;\n promise.then(metadataSuccess).otherwise(metadataFailure);\n }\n\n var promise = BingMapsImageryProvider._metadataCache[cacheKey];\n if (defined(promise)) {\n promise.then(metadataSuccess).otherwise(metadataFailure);\n } else {\n requestMetadata();\n }\n}\n\nObject.defineProperties(BingMapsImageryProvider.prototype, {\n /**\n * Gets the name of the BingMaps server url hosting the imagery.\n * @memberof BingMapsImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the Bing Maps key.\n * @memberof BingMapsImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n key: {\n get: function () {\n return this._key;\n },\n },\n\n /**\n * Gets the type of Bing Maps imagery to load.\n * @memberof BingMapsImageryProvider.prototype\n * @type {BingMapsStyle}\n * @readonly\n */\n mapStyle: {\n get: function () {\n return this._mapStyle;\n },\n },\n\n /**\n * The culture to use when requesting Bing Maps imagery. Not\n * all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx}\n * for information on the supported cultures.\n * @memberof BingMapsImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n culture: {\n get: function () {\n return this._culture;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"rectangle must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link BingMapsImageryProvider#ready} returns true.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage\n * and texture upload time.\n * @memberof BingMapsImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return false;\n },\n },\n});\n\nvar rectangleScratch = new Rectangle();\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nBingMapsImageryProvider.prototype.getTileCredits = function (x, y, level) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"getTileCredits must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var rectangle = this._tilingScheme.tileXYToRectangle(\n x,\n y,\n level,\n rectangleScratch\n );\n var result = getRectangleAttribution(this._attributionList, level, rectangle);\n\n return result;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link BingMapsImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nBingMapsImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var promise = ImageryProvider.loadImage(\n this,\n buildImageResource(this, x, y, level, request)\n );\n\n if (defined(promise)) {\n return promise.otherwise(function (error) {\n // One cause of an error here is that the image we tried to load was zero-length.\n // This isn't actually a problem, since it indicates that there is no tile.\n // So, in that case we return the EMPTY_IMAGE sentinel value for later discarding.\n if (defined(error.blob) && error.blob.size === 0) {\n return DiscardEmptyTilePolicy.EMPTY_IMAGE;\n }\n return when.reject(error);\n });\n }\n\n return undefined;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nBingMapsImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\n\n/**\n * Converts a tiles (x, y, level) position into a quadkey used to request an image\n * from a Bing Maps server.\n *\n * @param {Number} x The tile's x coordinate.\n * @param {Number} y The tile's y coordinate.\n * @param {Number} level The tile's zoom level.\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/bb259689.aspx|Bing Maps Tile System}\n * @see BingMapsImageryProvider#quadKeyToTileXY\n */\nBingMapsImageryProvider.tileXYToQuadKey = function (x, y, level) {\n var quadkey = \"\";\n for (var i = level; i >= 0; --i) {\n var bitmask = 1 << i;\n var digit = 0;\n\n if ((x & bitmask) !== 0) {\n digit |= 1;\n }\n\n if ((y & bitmask) !== 0) {\n digit |= 2;\n }\n\n quadkey += digit;\n }\n return quadkey;\n};\n\n/**\n * Converts a tile's quadkey used to request an image from a Bing Maps server into the\n * (x, y, level) position.\n *\n * @param {String} quadkey The tile's quad key\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/bb259689.aspx|Bing Maps Tile System}\n * @see BingMapsImageryProvider#tileXYToQuadKey\n */\nBingMapsImageryProvider.quadKeyToTileXY = function (quadkey) {\n var x = 0;\n var y = 0;\n var level = quadkey.length - 1;\n for (var i = level; i >= 0; --i) {\n var bitmask = 1 << i;\n var digit = +quadkey[level - i];\n\n if ((digit & 1) !== 0) {\n x |= bitmask;\n }\n\n if ((digit & 2) !== 0) {\n y |= bitmask;\n }\n }\n return {\n x: x,\n y: y,\n level: level,\n };\n};\n\nBingMapsImageryProvider._logoUrl = undefined;\n\nObject.defineProperties(BingMapsImageryProvider, {\n /**\n * Gets or sets the URL to the Bing logo for display in the credit.\n * @memberof BingMapsImageryProvider\n * @type {String}\n */\n logoUrl: {\n get: function () {\n if (!defined(BingMapsImageryProvider._logoUrl)) {\n BingMapsImageryProvider._logoUrl = buildModuleUrl(\n \"Assets/Images/bing_maps_credit.png\"\n );\n }\n return BingMapsImageryProvider._logoUrl;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n\n BingMapsImageryProvider._logoUrl = value;\n },\n },\n});\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n var imageUrl = imageryProvider._imageUrlTemplate;\n\n var subdomains = imageryProvider._imageUrlSubdomains;\n var subdomainIndex = (x + y + level) % subdomains.length;\n\n return imageryProvider._resource.getDerivedResource({\n url: imageUrl,\n request: request,\n templateValues: {\n quadkey: BingMapsImageryProvider.tileXYToQuadKey(x, y, level),\n subdomain: subdomains[subdomainIndex],\n culture: imageryProvider._culture,\n },\n queryParameters: {\n // this parameter tells the Bing servers to send a zero-length response\n // instead of a placeholder image for missing tiles.\n n: \"z\",\n },\n });\n}\n\nvar intersectionScratch = new Rectangle();\n\nfunction getRectangleAttribution(attributionList, level, rectangle) {\n // Bing levels start at 1, while ours start at 0.\n ++level;\n\n var result = [];\n\n for (\n var attributionIndex = 0, attributionLength = attributionList.length;\n attributionIndex < attributionLength;\n ++attributionIndex\n ) {\n var attribution = attributionList[attributionIndex];\n var coverageAreas = attribution.coverageAreas;\n\n var included = false;\n\n for (\n var areaIndex = 0, areaLength = attribution.coverageAreas.length;\n !included && areaIndex < areaLength;\n ++areaIndex\n ) {\n var area = coverageAreas[areaIndex];\n if (level >= area.zoomMin && level <= area.zoomMax) {\n var intersection = Rectangle.intersection(\n rectangle,\n area.bbox,\n intersectionScratch\n );\n if (defined(intersection)) {\n included = true;\n }\n }\n }\n\n if (included) {\n result.push(attribution.credit);\n }\n }\n\n return result;\n}\n\n// Exposed for testing\nBingMapsImageryProvider._metadataCache = {};\nexport default BingMapsImageryProvider;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\nvar defaultDimensions = new Cartesian3(1.0, 1.0, 1.0);\n\n/**\n * A ParticleEmitter that emits particles within a box.\n * Particles will be positioned randomly within the box and have initial velocities emanating from the center of the box.\n *\n * @alias BoxEmitter\n * @constructor\n *\n * @param {Cartesian3} dimensions The width, height and depth dimensions of the box.\n */\nfunction BoxEmitter(dimensions) {\n dimensions = defaultValue(dimensions, defaultDimensions);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"dimensions\", dimensions);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0.0);\n //>>includeEnd('debug');\n\n this._dimensions = Cartesian3.clone(dimensions);\n}\n\nObject.defineProperties(BoxEmitter.prototype, {\n /**\n * The width, height and depth dimensions of the box in meters.\n * @memberof BoxEmitter.prototype\n * @type {Cartesian3}\n * @default new Cartesian3(1.0, 1.0, 1.0)\n */\n dimensions: {\n get: function () {\n return this._dimensions;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"value.z\", value.z, 0.0);\n //>>includeEnd('debug');\n Cartesian3.clone(value, this._dimensions);\n },\n },\n});\n\nvar scratchHalfDim = new Cartesian3();\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize.\n */\nBoxEmitter.prototype.emit = function (particle) {\n var dim = this._dimensions;\n var halfDim = Cartesian3.multiplyByScalar(dim, 0.5, scratchHalfDim);\n\n var x = CesiumMath.randomBetween(-halfDim.x, halfDim.x);\n var y = CesiumMath.randomBetween(-halfDim.y, halfDim.y);\n var z = CesiumMath.randomBetween(-halfDim.z, halfDim.z);\n\n particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n particle.velocity = Cartesian3.normalize(\n particle.position,\n particle.velocity\n );\n};\nexport default BoxEmitter;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport BrdfLutGeneratorFS from \"../Shaders/BrdfLutGeneratorFS.js\";\n\n/**\n * @private\n */\nfunction BrdfLutGenerator() {\n this._framebuffer = undefined;\n this._colorTexture = undefined;\n this._drawCommand = undefined;\n}\n\nObject.defineProperties(BrdfLutGenerator.prototype, {\n colorTexture: {\n get: function () {\n return this._colorTexture;\n },\n },\n});\n\nfunction createCommand(generator, context) {\n var framebuffer = generator._framebuffer;\n\n var drawCommand = context.createViewportQuadCommand(BrdfLutGeneratorFS, {\n framebuffer: framebuffer,\n renderState: RenderState.fromCache({\n viewport: new BoundingRectangle(0.0, 0.0, 256.0, 256.0),\n }),\n });\n\n generator._drawCommand = drawCommand;\n}\n\nfunction createFramebuffer(generator, context) {\n var colorTexture = new Texture({\n context: context,\n width: 256,\n height: 256,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n generator._colorTexture = colorTexture;\n\n var framebuffer = new Framebuffer({\n context: context,\n colorTextures: [colorTexture],\n destroyAttachments: false,\n });\n\n generator._framebuffer = framebuffer;\n}\n\nBrdfLutGenerator.prototype.update = function (frameState) {\n if (!defined(this._colorTexture)) {\n var context = frameState.context;\n\n createFramebuffer(this, context);\n createCommand(this, context);\n this._drawCommand.execute(context);\n this._framebuffer = this._framebuffer && this._framebuffer.destroy();\n this._drawCommand.shaderProgram =\n this._drawCommand.shaderProgram &&\n this._drawCommand.shaderProgram.destroy();\n }\n};\n\nBrdfLutGenerator.prototype.isDestroyed = function () {\n return false;\n};\n\nBrdfLutGenerator.prototype.destroy = function () {\n this._colorTexture = this._colorTexture && this._colorTexture.destroy();\n return destroyObject(this);\n};\nexport default BrdfLutGenerator;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec2 v_textureCoordinates;\\n\\\nconst float M_PI = 3.141592653589793;\\n\\\n\\n\\\nfloat vdcRadicalInverse(int i)\\n\\\n{\\n\\\n float r;\\n\\\n float base = 2.0;\\n\\\n float value = 0.0;\\n\\\n float invBase = 1.0 / base;\\n\\\n float invBi = invBase;\\n\\\n for (int x = 0; x < 100; x++)\\n\\\n {\\n\\\n if (i <= 0)\\n\\\n {\\n\\\n break;\\n\\\n }\\n\\\n r = mod(float(i), base);\\n\\\n value += r * invBi;\\n\\\n invBi *= invBase;\\n\\\n i = int(float(i) * invBase);\\n\\\n }\\n\\\n return value;\\n\\\n}\\n\\\n\\n\\\nvec2 hammersley2D(int i, int N)\\n\\\n{\\n\\\n return vec2(float(i) / float(N), vdcRadicalInverse(i));\\n\\\n}\\n\\\n\\n\\\nvec3 importanceSampleGGX(vec2 xi, float roughness, vec3 N)\\n\\\n{\\n\\\n float a = roughness * roughness;\\n\\\n float phi = 2.0 * M_PI * xi.x;\\n\\\n float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));\\n\\\n float sinTheta = sqrt(1.0 - cosTheta * cosTheta);\\n\\\n vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);\\n\\\n vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\\n\\\n vec3 tangentX = normalize(cross(upVector, N));\\n\\\n vec3 tangentY = cross(N, tangentX);\\n\\\n return tangentX * H.x + tangentY * H.y + N * H.z;\\n\\\n}\\n\\\n\\n\\\nfloat G1_Smith(float NdotV, float k)\\n\\\n{\\n\\\n return NdotV / (NdotV * (1.0 - k) + k);\\n\\\n}\\n\\\n\\n\\\nfloat G_Smith(float roughness, float NdotV, float NdotL)\\n\\\n{\\n\\\n float k = roughness * roughness / 2.0;\\n\\\n return G1_Smith(NdotV, k) * G1_Smith(NdotL, k);\\n\\\n}\\n\\\n\\n\\\nvec2 integrateBrdf(float roughness, float NdotV)\\n\\\n{\\n\\\n vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);\\n\\\n float A = 0.0;\\n\\\n float B = 0.0;\\n\\\n const int NumSamples = 1024;\\n\\\n for (int i = 0; i < NumSamples; i++)\\n\\\n {\\n\\\n vec2 xi = hammersley2D(i, NumSamples);\\n\\\n vec3 H = importanceSampleGGX(xi, roughness, vec3(0.0, 0.0, 1.0));\\n\\\n vec3 L = 2.0 * dot(V, H) * H - V;\\n\\\n float NdotL = clamp(L.z, 0.0, 1.0);\\n\\\n float NdotH = clamp(H.z, 0.0, 1.0);\\n\\\n float VdotH = clamp(dot(V, H), 0.0, 1.0);\\n\\\n if (NdotL > 0.0)\\n\\\n {\\n\\\n float G = G_Smith(roughness, NdotV, NdotL);\\n\\\n float G_Vis = G * VdotH / (NdotH * NdotV);\\n\\\n float Fc = pow(1.0 - VdotH, 5.0);\\n\\\n A += (1.0 - Fc) * G_Vis;\\n\\\n B += Fc * G_Vis;\\n\\\n }\\n\\\n }\\n\\\n return vec2(A, B) / float(NumSamples);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);\\n\\\n}\\n\\\n\";\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Creates tweens for camera flights.\n * <br /><br />\n * Mouse interaction is disabled during flights.\n *\n * @private\n */\nvar CameraFlightPath = {};\n\nfunction getAltitude(frustum, dx, dy) {\n var near;\n var top;\n var right;\n if (frustum instanceof PerspectiveFrustum) {\n var tanTheta = Math.tan(0.5 * frustum.fovy);\n near = frustum.near;\n top = frustum.near * tanTheta;\n right = frustum.aspectRatio * top;\n return Math.max((dx * near) / right, (dy * near) / top);\n } else if (frustum instanceof PerspectiveOffCenterFrustum) {\n near = frustum.near;\n top = frustum.top;\n right = frustum.right;\n return Math.max((dx * near) / right, (dy * near) / top);\n }\n\n return Math.max(dx, dy);\n}\n\nvar scratchCart = new Cartesian3();\nvar scratchCart2 = new Cartesian3();\n\nfunction createPitchFunction(\n startPitch,\n endPitch,\n heightFunction,\n pitchAdjustHeight\n) {\n if (defined(pitchAdjustHeight) && heightFunction(0.5) > pitchAdjustHeight) {\n var startHeight = heightFunction(0.0);\n var endHeight = heightFunction(1.0);\n var middleHeight = heightFunction(0.5);\n\n var d1 = middleHeight - startHeight;\n var d2 = middleHeight - endHeight;\n\n return function (time) {\n var altitude = heightFunction(time);\n if (time <= 0.5) {\n var t1 = (altitude - startHeight) / d1;\n return CesiumMath.lerp(startPitch, -CesiumMath.PI_OVER_TWO, t1);\n }\n\n var t2 = (altitude - endHeight) / d2;\n return CesiumMath.lerp(-CesiumMath.PI_OVER_TWO, endPitch, 1 - t2);\n };\n }\n return function (time) {\n return CesiumMath.lerp(startPitch, endPitch, time);\n };\n}\n\nfunction createHeightFunction(\n camera,\n destination,\n startHeight,\n endHeight,\n optionAltitude\n) {\n var altitude = optionAltitude;\n var maxHeight = Math.max(startHeight, endHeight);\n\n if (!defined(altitude)) {\n var start = camera.position;\n var end = destination;\n var up = camera.up;\n var right = camera.right;\n var frustum = camera.frustum;\n\n var diff = Cartesian3.subtract(start, end, scratchCart);\n var verticalDistance = Cartesian3.magnitude(\n Cartesian3.multiplyByScalar(up, Cartesian3.dot(diff, up), scratchCart2)\n );\n var horizontalDistance = Cartesian3.magnitude(\n Cartesian3.multiplyByScalar(\n right,\n Cartesian3.dot(diff, right),\n scratchCart2\n )\n );\n\n altitude = Math.min(\n getAltitude(frustum, verticalDistance, horizontalDistance) * 0.2,\n 1000000000.0\n );\n }\n\n if (maxHeight < altitude) {\n var power = 8.0;\n var factor = 1000000.0;\n\n var s = -Math.pow((altitude - startHeight) * factor, 1.0 / power);\n var e = Math.pow((altitude - endHeight) * factor, 1.0 / power);\n\n return function (t) {\n var x = t * (e - s) + s;\n return -Math.pow(x, power) / factor + altitude;\n };\n }\n\n return function (t) {\n return CesiumMath.lerp(startHeight, endHeight, t);\n };\n}\n\nfunction adjustAngleForLERP(startAngle, endAngle) {\n if (\n CesiumMath.equalsEpsilon(\n startAngle,\n CesiumMath.TWO_PI,\n CesiumMath.EPSILON11\n )\n ) {\n startAngle = 0.0;\n }\n\n if (endAngle > startAngle + Math.PI) {\n startAngle += CesiumMath.TWO_PI;\n } else if (endAngle < startAngle - Math.PI) {\n startAngle -= CesiumMath.TWO_PI;\n }\n\n return startAngle;\n}\n\nvar scratchStart = new Cartesian3();\n\nfunction createUpdateCV(\n scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n optionAltitude\n) {\n var camera = scene.camera;\n\n var start = Cartesian3.clone(camera.position, scratchStart);\n var startPitch = camera.pitch;\n var startHeading = adjustAngleForLERP(camera.heading, heading);\n var startRoll = adjustAngleForLERP(camera.roll, roll);\n\n var heightFunction = createHeightFunction(\n camera,\n destination,\n start.z,\n destination.z,\n optionAltitude\n );\n\n function update(value) {\n var time = value.time / duration;\n\n camera.setView({\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time),\n pitch: CesiumMath.lerp(startPitch, pitch, time),\n roll: CesiumMath.lerp(startRoll, roll, time),\n },\n });\n\n Cartesian2.lerp(start, destination, time, camera.position);\n camera.position.z = heightFunction(time);\n }\n return update;\n}\n\nfunction useLongestFlight(startCart, destCart) {\n if (startCart.longitude < destCart.longitude) {\n startCart.longitude += CesiumMath.TWO_PI;\n } else {\n destCart.longitude += CesiumMath.TWO_PI;\n }\n}\n\nfunction useShortestFlight(startCart, destCart) {\n var diff = startCart.longitude - destCart.longitude;\n if (diff < -CesiumMath.PI) {\n startCart.longitude += CesiumMath.TWO_PI;\n } else if (diff > CesiumMath.PI) {\n destCart.longitude += CesiumMath.TWO_PI;\n }\n}\n\nvar scratchStartCart = new Cartographic();\nvar scratchEndCart = new Cartographic();\n\nfunction createUpdate3D(\n scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n optionAltitude,\n optionFlyOverLongitude,\n optionFlyOverLongitudeWeight,\n optionPitchAdjustHeight\n) {\n var camera = scene.camera;\n var projection = scene.mapProjection;\n var ellipsoid = projection.ellipsoid;\n\n var startCart = Cartographic.clone(\n camera.positionCartographic,\n scratchStartCart\n );\n var startPitch = camera.pitch;\n var startHeading = adjustAngleForLERP(camera.heading, heading);\n var startRoll = adjustAngleForLERP(camera.roll, roll);\n\n var destCart = ellipsoid.cartesianToCartographic(destination, scratchEndCart);\n startCart.longitude = CesiumMath.zeroToTwoPi(startCart.longitude);\n destCart.longitude = CesiumMath.zeroToTwoPi(destCart.longitude);\n\n var useLongFlight = false;\n\n if (defined(optionFlyOverLongitude)) {\n var hitLon = CesiumMath.zeroToTwoPi(optionFlyOverLongitude);\n\n var lonMin = Math.min(startCart.longitude, destCart.longitude);\n var lonMax = Math.max(startCart.longitude, destCart.longitude);\n\n var hitInside = hitLon >= lonMin && hitLon <= lonMax;\n\n if (defined(optionFlyOverLongitudeWeight)) {\n // Distance inside (0...2Pi)\n var din = Math.abs(startCart.longitude - destCart.longitude);\n // Distance outside (0...2Pi)\n var dot = CesiumMath.TWO_PI - din;\n\n var hitDistance = hitInside ? din : dot;\n var offDistance = hitInside ? dot : din;\n\n if (\n hitDistance < offDistance * optionFlyOverLongitudeWeight &&\n !hitInside\n ) {\n useLongFlight = true;\n }\n } else if (!hitInside) {\n useLongFlight = true;\n }\n }\n\n if (useLongFlight) {\n useLongestFlight(startCart, destCart);\n } else {\n useShortestFlight(startCart, destCart);\n }\n\n var heightFunction = createHeightFunction(\n camera,\n destination,\n startCart.height,\n destCart.height,\n optionAltitude\n );\n var pitchFunction = createPitchFunction(\n startPitch,\n pitch,\n heightFunction,\n optionPitchAdjustHeight\n );\n\n // Isolate scope for update function.\n // to have local copies of vars used in lerp\n // Othervise, if you call nex\n // createUpdate3D (createAnimationTween)\n // before you played animation, variables will be overwriten.\n function isolateUpdateFunction() {\n var startLongitude = startCart.longitude;\n var destLongitude = destCart.longitude;\n var startLatitude = startCart.latitude;\n var destLatitude = destCart.latitude;\n\n return function update(value) {\n var time = value.time / duration;\n\n var position = Cartesian3.fromRadians(\n CesiumMath.lerp(startLongitude, destLongitude, time),\n CesiumMath.lerp(startLatitude, destLatitude, time),\n heightFunction(time)\n );\n\n camera.setView({\n destination: position,\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time),\n pitch: pitchFunction(time),\n roll: CesiumMath.lerp(startRoll, roll, time),\n },\n });\n };\n }\n return isolateUpdateFunction();\n}\n\nfunction createUpdate2D(\n scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n optionAltitude\n) {\n var camera = scene.camera;\n\n var start = Cartesian3.clone(camera.position, scratchStart);\n var startHeading = adjustAngleForLERP(camera.heading, heading);\n\n var startHeight = camera.frustum.right - camera.frustum.left;\n var heightFunction = createHeightFunction(\n camera,\n destination,\n startHeight,\n destination.z,\n optionAltitude\n );\n\n function update(value) {\n var time = value.time / duration;\n\n camera.setView({\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time),\n },\n });\n\n Cartesian2.lerp(start, destination, time, camera.position);\n\n var zoom = heightFunction(time);\n\n var frustum = camera.frustum;\n var ratio = frustum.top / frustum.right;\n\n var incrementAmount = (zoom - (frustum.right - frustum.left)) * 0.5;\n frustum.right += incrementAmount;\n frustum.left -= incrementAmount;\n frustum.top = ratio * frustum.right;\n frustum.bottom = -frustum.top;\n }\n return update;\n}\n\nvar scratchCartographic = new Cartographic();\nvar scratchDestination = new Cartesian3();\n\nfunction emptyFlight(complete, cancel) {\n return {\n startObject: {},\n stopObject: {},\n duration: 0.0,\n complete: complete,\n cancel: cancel,\n };\n}\n\nfunction wrapCallback(controller, cb) {\n function wrapped() {\n if (typeof cb === \"function\") {\n cb();\n }\n\n controller.enableInputs = true;\n }\n return wrapped;\n}\n\nCameraFlightPath.createTween = function (scene, options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var destination = options.destination;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n if (!defined(destination)) {\n throw new DeveloperError(\"destination is required.\");\n }\n //>>includeEnd('debug');\n var mode = scene.mode;\n\n if (mode === SceneMode.MORPHING) {\n return emptyFlight();\n }\n\n var convert = defaultValue(options.convert, true);\n var projection = scene.mapProjection;\n var ellipsoid = projection.ellipsoid;\n var maximumHeight = options.maximumHeight;\n var flyOverLongitude = options.flyOverLongitude;\n var flyOverLongitudeWeight = options.flyOverLongitudeWeight;\n var pitchAdjustHeight = options.pitchAdjustHeight;\n var easingFunction = options.easingFunction;\n\n if (convert && mode !== SceneMode.SCENE3D) {\n ellipsoid.cartesianToCartographic(destination, scratchCartographic);\n destination = projection.project(scratchCartographic, scratchDestination);\n }\n\n var camera = scene.camera;\n var transform = options.endTransform;\n if (defined(transform)) {\n camera._setTransform(transform);\n }\n\n var duration = options.duration;\n if (!defined(duration)) {\n duration =\n Math.ceil(Cartesian3.distance(camera.position, destination) / 1000000.0) +\n 2.0;\n duration = Math.min(duration, 3.0);\n }\n\n var heading = defaultValue(options.heading, 0.0);\n var pitch = defaultValue(options.pitch, -CesiumMath.PI_OVER_TWO);\n var roll = defaultValue(options.roll, 0.0);\n\n var controller = scene.screenSpaceCameraController;\n controller.enableInputs = false;\n\n var complete = wrapCallback(controller, options.complete);\n var cancel = wrapCallback(controller, options.cancel);\n\n var frustum = camera.frustum;\n\n var empty = scene.mode === SceneMode.SCENE2D;\n empty =\n empty &&\n Cartesian2.equalsEpsilon(camera.position, destination, CesiumMath.EPSILON6);\n empty =\n empty &&\n CesiumMath.equalsEpsilon(\n Math.max(frustum.right - frustum.left, frustum.top - frustum.bottom),\n destination.z,\n CesiumMath.EPSILON6\n );\n\n empty =\n empty ||\n (scene.mode !== SceneMode.SCENE2D &&\n Cartesian3.equalsEpsilon(\n destination,\n camera.position,\n CesiumMath.EPSILON10\n ));\n\n empty =\n empty &&\n CesiumMath.equalsEpsilon(\n CesiumMath.negativePiToPi(heading),\n CesiumMath.negativePiToPi(camera.heading),\n CesiumMath.EPSILON10\n ) &&\n CesiumMath.equalsEpsilon(\n CesiumMath.negativePiToPi(pitch),\n CesiumMath.negativePiToPi(camera.pitch),\n CesiumMath.EPSILON10\n ) &&\n CesiumMath.equalsEpsilon(\n CesiumMath.negativePiToPi(roll),\n CesiumMath.negativePiToPi(camera.roll),\n CesiumMath.EPSILON10\n );\n\n if (empty) {\n return emptyFlight(complete, cancel);\n }\n\n var updateFunctions = new Array(4);\n updateFunctions[SceneMode.SCENE2D] = createUpdate2D;\n updateFunctions[SceneMode.SCENE3D] = createUpdate3D;\n updateFunctions[SceneMode.COLUMBUS_VIEW] = createUpdateCV;\n\n if (duration <= 0.0) {\n var newOnComplete = function () {\n var update = updateFunctions[mode](\n scene,\n 1.0,\n destination,\n heading,\n pitch,\n roll,\n maximumHeight,\n flyOverLongitude,\n flyOverLongitudeWeight,\n pitchAdjustHeight\n );\n update({ time: 1.0 });\n\n if (typeof complete === \"function\") {\n complete();\n }\n };\n return emptyFlight(newOnComplete, cancel);\n }\n\n var update = updateFunctions[mode](\n scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n maximumHeight,\n flyOverLongitude,\n flyOverLongitudeWeight,\n pitchAdjustHeight\n );\n\n if (!defined(easingFunction)) {\n var startHeight = camera.positionCartographic.height;\n var endHeight =\n mode === SceneMode.SCENE3D\n ? ellipsoid.cartesianToCartographic(destination).height\n : destination.z;\n\n if (startHeight > endHeight && startHeight > 11500.0) {\n easingFunction = EasingFunction.CUBIC_OUT;\n } else {\n easingFunction = EasingFunction.QUINTIC_IN_OUT;\n }\n }\n\n return {\n duration: duration,\n easingFunction: easingFunction,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: duration,\n },\n update: update,\n complete: complete,\n cancel: cancel,\n };\n};\nexport default CameraFlightPath;\n","/**\n * Describes how the map will operate in 2D.\n *\n * @enum {Number}\n */\nvar MapMode2D = {\n /**\n * The 2D map can be rotated about the z axis.\n *\n * @type {Number}\n * @constant\n */\n ROTATE: 0,\n\n /**\n * The 2D map can be scrolled infinitely in the horizontal direction.\n *\n * @type {Number}\n * @constant\n */\n INFINITE_SCROLL: 1,\n};\nexport default Object.freeze(MapMode2D);\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidGeodesic from \"../Core/EllipsoidGeodesic.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport CameraFlightPath from \"./CameraFlightPath.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * The camera is defined by a position, orientation, and view frustum.\n * <br /><br />\n * The orientation forms an orthonormal basis with a view, up and right = view x up unit vectors.\n * <br /><br />\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias Camera\n *\n * @constructor\n *\n * @param {Scene} scene The scene.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Camera.html|Cesium Sandcastle Camera Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Camera%20Tutorial.html|Cesium Sandcastle Camera Tutorial Example}\n * @demo {@link https://cesium.com/docs/tutorials/camera/|Camera Tutorial}\n *\n * @example\n * // Create a camera looking down the negative z-axis, positioned at the origin,\n * // with a field of view of 60 degrees, and 1:1 aspect ratio.\n * var camera = new Cesium.Camera(scene);\n * camera.position = new Cesium.Cartesian3();\n * camera.direction = Cesium.Cartesian3.negate(Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n * camera.up = Cesium.Cartesian3.clone(Cesium.Cartesian3.UNIT_Y);\n * camera.frustum.fov = Cesium.Math.PI_OVER_THREE;\n * camera.frustum.near = 1.0;\n * camera.frustum.far = 2.0;\n */\nfunction Camera(scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n this._scene = scene;\n\n this._transform = Matrix4.clone(Matrix4.IDENTITY);\n this._invTransform = Matrix4.clone(Matrix4.IDENTITY);\n this._actualTransform = Matrix4.clone(Matrix4.IDENTITY);\n this._actualInvTransform = Matrix4.clone(Matrix4.IDENTITY);\n this._transformChanged = false;\n\n /**\n * The position of the camera.\n *\n * @type {Cartesian3}\n */\n this.position = new Cartesian3();\n this._position = new Cartesian3();\n this._positionWC = new Cartesian3();\n this._positionCartographic = new Cartographic();\n this._oldPositionWC = undefined;\n\n /**\n * The position delta magnitude.\n *\n * @private\n */\n this.positionWCDeltaMagnitude = 0.0;\n\n /**\n * The position delta magnitude last frame.\n *\n * @private\n */\n this.positionWCDeltaMagnitudeLastFrame = 0.0;\n\n /**\n * How long in seconds since the camera has stopped moving\n *\n * @private\n */\n this.timeSinceMoved = 0.0;\n this._lastMovedTimestamp = 0.0;\n\n /**\n * The view direction of the camera.\n *\n * @type {Cartesian3}\n */\n this.direction = new Cartesian3();\n this._direction = new Cartesian3();\n this._directionWC = new Cartesian3();\n\n /**\n * The up direction of the camera.\n *\n * @type {Cartesian3}\n */\n this.up = new Cartesian3();\n this._up = new Cartesian3();\n this._upWC = new Cartesian3();\n\n /**\n * The right direction of the camera.\n *\n * @type {Cartesian3}\n */\n this.right = new Cartesian3();\n this._right = new Cartesian3();\n this._rightWC = new Cartesian3();\n\n /**\n * The region of space in view.\n *\n * @type {PerspectiveFrustum|PerspectiveOffCenterFrustum|OrthographicFrustum}\n * @default PerspectiveFrustum()\n *\n * @see PerspectiveFrustum\n * @see PerspectiveOffCenterFrustum\n * @see OrthographicFrustum\n */\n this.frustum = new PerspectiveFrustum();\n this.frustum.aspectRatio =\n scene.drawingBufferWidth / scene.drawingBufferHeight;\n this.frustum.fov = CesiumMath.toRadians(60.0);\n\n /**\n * The default amount to move the camera when an argument is not\n * provided to the move methods.\n * @type {Number}\n * @default 100000.0;\n */\n this.defaultMoveAmount = 100000.0;\n /**\n * The default amount to rotate the camera when an argument is not\n * provided to the look methods.\n * @type {Number}\n * @default Math.PI / 60.0\n */\n this.defaultLookAmount = Math.PI / 60.0;\n /**\n * The default amount to rotate the camera when an argument is not\n * provided to the rotate methods.\n * @type {Number}\n * @default Math.PI / 3600.0\n */\n this.defaultRotateAmount = Math.PI / 3600.0;\n /**\n * The default amount to move the camera when an argument is not\n * provided to the zoom methods.\n * @type {Number}\n * @default 100000.0;\n */\n this.defaultZoomAmount = 100000.0;\n /**\n * If set, the camera will not be able to rotate past this axis in either direction.\n * @type {Cartesian3}\n * @default undefined\n */\n this.constrainedAxis = undefined;\n /**\n * The factor multiplied by the the map size used to determine where to clamp the camera position\n * when zooming out from the surface. The default is 1.5. Only valid for 2D and the map is rotatable.\n * @type {Number}\n * @default 1.5\n */\n this.maximumZoomFactor = 1.5;\n\n this._moveStart = new Event();\n this._moveEnd = new Event();\n\n this._changed = new Event();\n this._changedPosition = undefined;\n this._changedDirection = undefined;\n this._changedFrustum = undefined;\n\n /**\n * The amount the camera has to change before the <code>changed</code> event is raised. The value is a percentage in the [0, 1] range.\n * @type {number}\n * @default 0.5\n */\n this.percentageChanged = 0.5;\n\n this._viewMatrix = new Matrix4();\n this._invViewMatrix = new Matrix4();\n updateViewMatrix(this);\n\n this._mode = SceneMode.SCENE3D;\n this._modeChanged = true;\n var projection = scene.mapProjection;\n this._projection = projection;\n this._maxCoord = projection.project(\n new Cartographic(Math.PI, CesiumMath.PI_OVER_TWO)\n );\n this._max2Dfrustum = undefined;\n\n // set default view\n rectangleCameraPosition3D(\n this,\n Camera.DEFAULT_VIEW_RECTANGLE,\n this.position,\n true\n );\n\n var mag = Cartesian3.magnitude(this.position);\n mag += mag * Camera.DEFAULT_VIEW_FACTOR;\n Cartesian3.normalize(this.position, this.position);\n Cartesian3.multiplyByScalar(this.position, mag, this.position);\n}\n\n/**\n * @private\n */\nCamera.TRANSFORM_2D = new Matrix4(\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n);\n\n/**\n * @private\n */\nCamera.TRANSFORM_2D_INVERSE = Matrix4.inverseTransformation(\n Camera.TRANSFORM_2D,\n new Matrix4()\n);\n\n/**\n * The default rectangle the camera will view on creation.\n * @type Rectangle\n */\nCamera.DEFAULT_VIEW_RECTANGLE = Rectangle.fromDegrees(\n -95.0,\n -20.0,\n -70.0,\n 90.0\n);\n\n/**\n * A scalar to multiply to the camera position and add it back after setting the camera to view the rectangle.\n * A value of zero means the camera will view the entire {@link Camera#DEFAULT_VIEW_RECTANGLE}, a value greater than zero\n * will move it further away from the extent, and a value less than zero will move it close to the extent.\n * @type Number\n */\nCamera.DEFAULT_VIEW_FACTOR = 0.5;\n\n/**\n * The default heading/pitch/range that is used when the camera flies to a location that contains a bounding sphere.\n * @type HeadingPitchRange\n */\nCamera.DEFAULT_OFFSET = new HeadingPitchRange(\n 0.0,\n -CesiumMath.PI_OVER_FOUR,\n 0.0\n);\n\nfunction updateViewMatrix(camera) {\n Matrix4.computeView(\n camera._position,\n camera._direction,\n camera._up,\n camera._right,\n camera._viewMatrix\n );\n Matrix4.multiply(\n camera._viewMatrix,\n camera._actualInvTransform,\n camera._viewMatrix\n );\n Matrix4.inverseTransformation(camera._viewMatrix, camera._invViewMatrix);\n}\n\nfunction updateCameraDeltas(camera) {\n if (!defined(camera._oldPositionWC)) {\n camera._oldPositionWC = Cartesian3.clone(\n camera.positionWC,\n camera._oldPositionWC\n );\n } else {\n camera.positionWCDeltaMagnitudeLastFrame = camera.positionWCDeltaMagnitude;\n var delta = Cartesian3.subtract(\n camera.positionWC,\n camera._oldPositionWC,\n camera._oldPositionWC\n );\n camera.positionWCDeltaMagnitude = Cartesian3.magnitude(delta);\n camera._oldPositionWC = Cartesian3.clone(\n camera.positionWC,\n camera._oldPositionWC\n );\n\n // Update move timers\n if (camera.positionWCDeltaMagnitude > 0.0) {\n camera.timeSinceMoved = 0.0;\n camera._lastMovedTimestamp = getTimestamp();\n } else {\n camera.timeSinceMoved =\n Math.max(getTimestamp() - camera._lastMovedTimestamp, 0.0) / 1000.0;\n }\n }\n}\n\n/**\n * Checks if there's a camera flight with preload for this camera.\n *\n * @returns {Boolean} Whether or not this camera has a current flight with a valid preloadFlightCamera in scene.\n *\n * @private\n *\n */\nCamera.prototype.canPreloadFlight = function () {\n return defined(this._currentFlight) && this._mode !== SceneMode.SCENE2D;\n};\n\nCamera.prototype._updateCameraChanged = function () {\n var camera = this;\n\n updateCameraDeltas(camera);\n\n if (camera._changed.numberOfListeners === 0) {\n return;\n }\n\n var percentageChanged = camera.percentageChanged;\n\n if (camera._mode === SceneMode.SCENE2D) {\n if (!defined(camera._changedFrustum)) {\n camera._changedPosition = Cartesian3.clone(\n camera.position,\n camera._changedPosition\n );\n camera._changedFrustum = camera.frustum.clone();\n return;\n }\n\n var position = camera.position;\n var lastPosition = camera._changedPosition;\n\n var frustum = camera.frustum;\n var lastFrustum = camera._changedFrustum;\n\n var x0 = position.x + frustum.left;\n var x1 = position.x + frustum.right;\n var x2 = lastPosition.x + lastFrustum.left;\n var x3 = lastPosition.x + lastFrustum.right;\n\n var y0 = position.y + frustum.bottom;\n var y1 = position.y + frustum.top;\n var y2 = lastPosition.y + lastFrustum.bottom;\n var y3 = lastPosition.y + lastFrustum.top;\n\n var leftX = Math.max(x0, x2);\n var rightX = Math.min(x1, x3);\n var bottomY = Math.max(y0, y2);\n var topY = Math.min(y1, y3);\n\n var areaPercentage;\n if (leftX >= rightX || bottomY >= y1) {\n areaPercentage = 1.0;\n } else {\n var areaRef = lastFrustum;\n if (x0 < x2 && x1 > x3 && y0 < y2 && y1 > y3) {\n areaRef = frustum;\n }\n areaPercentage =\n 1.0 -\n ((rightX - leftX) * (topY - bottomY)) /\n ((areaRef.right - areaRef.left) * (areaRef.top - areaRef.bottom));\n }\n\n if (areaPercentage > percentageChanged) {\n camera._changed.raiseEvent(areaPercentage);\n camera._changedPosition = Cartesian3.clone(\n camera.position,\n camera._changedPosition\n );\n camera._changedFrustum = camera.frustum.clone(camera._changedFrustum);\n }\n return;\n }\n\n if (!defined(camera._changedDirection)) {\n camera._changedPosition = Cartesian3.clone(\n camera.positionWC,\n camera._changedPosition\n );\n camera._changedDirection = Cartesian3.clone(\n camera.directionWC,\n camera._changedDirection\n );\n return;\n }\n\n var dirAngle = CesiumMath.acosClamped(\n Cartesian3.dot(camera.directionWC, camera._changedDirection)\n );\n\n var dirPercentage;\n if (defined(camera.frustum.fovy)) {\n dirPercentage = dirAngle / (camera.frustum.fovy * 0.5);\n } else {\n dirPercentage = dirAngle;\n }\n\n var distance = Cartesian3.distance(\n camera.positionWC,\n camera._changedPosition\n );\n var heightPercentage = distance / camera.positionCartographic.height;\n\n if (\n dirPercentage > percentageChanged ||\n heightPercentage > percentageChanged\n ) {\n camera._changed.raiseEvent(Math.max(dirPercentage, heightPercentage));\n camera._changedPosition = Cartesian3.clone(\n camera.positionWC,\n camera._changedPosition\n );\n camera._changedDirection = Cartesian3.clone(\n camera.directionWC,\n camera._changedDirection\n );\n }\n};\n\nfunction convertTransformForColumbusView(camera) {\n Transforms.basisTo2D(\n camera._projection,\n camera._transform,\n camera._actualTransform\n );\n}\n\nvar scratchCartographic = new Cartographic();\nvar scratchCartesian3Projection = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartesian4Origin = new Cartesian4();\nvar scratchCartesian4NewOrigin = new Cartesian4();\nvar scratchCartesian4NewXAxis = new Cartesian4();\nvar scratchCartesian4NewYAxis = new Cartesian4();\nvar scratchCartesian4NewZAxis = new Cartesian4();\n\nfunction convertTransformFor2D(camera) {\n var projection = camera._projection;\n var ellipsoid = projection.ellipsoid;\n\n var origin = Matrix4.getColumn(camera._transform, 3, scratchCartesian4Origin);\n var cartographic = ellipsoid.cartesianToCartographic(\n origin,\n scratchCartographic\n );\n\n var projectedPosition = projection.project(\n cartographic,\n scratchCartesian3Projection\n );\n var newOrigin = scratchCartesian4NewOrigin;\n newOrigin.x = projectedPosition.z;\n newOrigin.y = projectedPosition.x;\n newOrigin.z = projectedPosition.y;\n newOrigin.w = 1.0;\n\n var newZAxis = Cartesian4.clone(Cartesian4.UNIT_X, scratchCartesian4NewZAxis);\n\n var xAxis = Cartesian4.add(\n Matrix4.getColumn(camera._transform, 0, scratchCartesian3),\n origin,\n scratchCartesian3\n );\n ellipsoid.cartesianToCartographic(xAxis, cartographic);\n\n projection.project(cartographic, projectedPosition);\n var newXAxis = scratchCartesian4NewXAxis;\n newXAxis.x = projectedPosition.z;\n newXAxis.y = projectedPosition.x;\n newXAxis.z = projectedPosition.y;\n newXAxis.w = 0.0;\n\n Cartesian3.subtract(newXAxis, newOrigin, newXAxis);\n newXAxis.x = 0.0;\n\n var newYAxis = scratchCartesian4NewYAxis;\n if (Cartesian3.magnitudeSquared(newXAxis) > CesiumMath.EPSILON10) {\n Cartesian3.cross(newZAxis, newXAxis, newYAxis);\n } else {\n var yAxis = Cartesian4.add(\n Matrix4.getColumn(camera._transform, 1, scratchCartesian3),\n origin,\n scratchCartesian3\n );\n ellipsoid.cartesianToCartographic(yAxis, cartographic);\n\n projection.project(cartographic, projectedPosition);\n newYAxis.x = projectedPosition.z;\n newYAxis.y = projectedPosition.x;\n newYAxis.z = projectedPosition.y;\n newYAxis.w = 0.0;\n\n Cartesian3.subtract(newYAxis, newOrigin, newYAxis);\n newYAxis.x = 0.0;\n\n if (Cartesian3.magnitudeSquared(newYAxis) < CesiumMath.EPSILON10) {\n Cartesian4.clone(Cartesian4.UNIT_Y, newXAxis);\n Cartesian4.clone(Cartesian4.UNIT_Z, newYAxis);\n }\n }\n\n Cartesian3.cross(newYAxis, newZAxis, newXAxis);\n Cartesian3.normalize(newXAxis, newXAxis);\n Cartesian3.cross(newZAxis, newXAxis, newYAxis);\n Cartesian3.normalize(newYAxis, newYAxis);\n\n Matrix4.setColumn(\n camera._actualTransform,\n 0,\n newXAxis,\n camera._actualTransform\n );\n Matrix4.setColumn(\n camera._actualTransform,\n 1,\n newYAxis,\n camera._actualTransform\n );\n Matrix4.setColumn(\n camera._actualTransform,\n 2,\n newZAxis,\n camera._actualTransform\n );\n Matrix4.setColumn(\n camera._actualTransform,\n 3,\n newOrigin,\n camera._actualTransform\n );\n}\n\nvar scratchCartesian = new Cartesian3();\n\nfunction updateMembers(camera) {\n var mode = camera._mode;\n\n var heightChanged = false;\n var height = 0.0;\n if (mode === SceneMode.SCENE2D) {\n height = camera.frustum.right - camera.frustum.left;\n heightChanged = height !== camera._positionCartographic.height;\n }\n\n var position = camera._position;\n var positionChanged =\n !Cartesian3.equals(position, camera.position) || heightChanged;\n if (positionChanged) {\n position = Cartesian3.clone(camera.position, camera._position);\n }\n\n var direction = camera._direction;\n var directionChanged = !Cartesian3.equals(direction, camera.direction);\n if (directionChanged) {\n Cartesian3.normalize(camera.direction, camera.direction);\n direction = Cartesian3.clone(camera.direction, camera._direction);\n }\n\n var up = camera._up;\n var upChanged = !Cartesian3.equals(up, camera.up);\n if (upChanged) {\n Cartesian3.normalize(camera.up, camera.up);\n up = Cartesian3.clone(camera.up, camera._up);\n }\n\n var right = camera._right;\n var rightChanged = !Cartesian3.equals(right, camera.right);\n if (rightChanged) {\n Cartesian3.normalize(camera.right, camera.right);\n right = Cartesian3.clone(camera.right, camera._right);\n }\n\n var transformChanged = camera._transformChanged || camera._modeChanged;\n camera._transformChanged = false;\n\n if (transformChanged) {\n Matrix4.inverseTransformation(camera._transform, camera._invTransform);\n\n if (\n camera._mode === SceneMode.COLUMBUS_VIEW ||\n camera._mode === SceneMode.SCENE2D\n ) {\n if (Matrix4.equals(Matrix4.IDENTITY, camera._transform)) {\n Matrix4.clone(Camera.TRANSFORM_2D, camera._actualTransform);\n } else if (camera._mode === SceneMode.COLUMBUS_VIEW) {\n convertTransformForColumbusView(camera);\n } else {\n convertTransformFor2D(camera);\n }\n } else {\n Matrix4.clone(camera._transform, camera._actualTransform);\n }\n\n Matrix4.inverseTransformation(\n camera._actualTransform,\n camera._actualInvTransform\n );\n\n camera._modeChanged = false;\n }\n\n var transform = camera._actualTransform;\n\n if (positionChanged || transformChanged) {\n camera._positionWC = Matrix4.multiplyByPoint(\n transform,\n position,\n camera._positionWC\n );\n\n // Compute the Cartographic position of the camera.\n if (mode === SceneMode.SCENE3D || mode === SceneMode.MORPHING) {\n camera._positionCartographic = camera._projection.ellipsoid.cartesianToCartographic(\n camera._positionWC,\n camera._positionCartographic\n );\n } else {\n // The camera position is expressed in the 2D coordinate system where the Y axis is to the East,\n // the Z axis is to the North, and the X axis is out of the map. Express them instead in the ENU axes where\n // X is to the East, Y is to the North, and Z is out of the local horizontal plane.\n var positionENU = scratchCartesian;\n positionENU.x = camera._positionWC.y;\n positionENU.y = camera._positionWC.z;\n positionENU.z = camera._positionWC.x;\n\n // In 2D, the camera height is always 12.7 million meters.\n // The apparent height is equal to half the frustum width.\n if (mode === SceneMode.SCENE2D) {\n positionENU.z = height;\n }\n\n camera._projection.unproject(positionENU, camera._positionCartographic);\n }\n }\n\n if (directionChanged || upChanged || rightChanged) {\n var det = Cartesian3.dot(\n direction,\n Cartesian3.cross(up, right, scratchCartesian)\n );\n if (Math.abs(1.0 - det) > CesiumMath.EPSILON2) {\n //orthonormalize axes\n var invUpMag = 1.0 / Cartesian3.magnitudeSquared(up);\n var scalar = Cartesian3.dot(up, direction) * invUpMag;\n var w0 = Cartesian3.multiplyByScalar(direction, scalar, scratchCartesian);\n up = Cartesian3.normalize(\n Cartesian3.subtract(up, w0, camera._up),\n camera._up\n );\n Cartesian3.clone(up, camera.up);\n\n right = Cartesian3.cross(direction, up, camera._right);\n Cartesian3.clone(right, camera.right);\n }\n }\n\n if (directionChanged || transformChanged) {\n camera._directionWC = Matrix4.multiplyByPointAsVector(\n transform,\n direction,\n camera._directionWC\n );\n Cartesian3.normalize(camera._directionWC, camera._directionWC);\n }\n\n if (upChanged || transformChanged) {\n camera._upWC = Matrix4.multiplyByPointAsVector(transform, up, camera._upWC);\n Cartesian3.normalize(camera._upWC, camera._upWC);\n }\n\n if (rightChanged || transformChanged) {\n camera._rightWC = Matrix4.multiplyByPointAsVector(\n transform,\n right,\n camera._rightWC\n );\n Cartesian3.normalize(camera._rightWC, camera._rightWC);\n }\n\n if (\n positionChanged ||\n directionChanged ||\n upChanged ||\n rightChanged ||\n transformChanged\n ) {\n updateViewMatrix(camera);\n }\n}\n\nfunction getHeading(direction, up) {\n var heading;\n if (\n !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)\n ) {\n heading = Math.atan2(direction.y, direction.x) - CesiumMath.PI_OVER_TWO;\n } else {\n heading = Math.atan2(up.y, up.x) - CesiumMath.PI_OVER_TWO;\n }\n\n return CesiumMath.TWO_PI - CesiumMath.zeroToTwoPi(heading);\n}\n\nfunction getPitch(direction) {\n return CesiumMath.PI_OVER_TWO - CesiumMath.acosClamped(direction.z);\n}\n\nfunction getRoll(direction, up, right) {\n var roll = 0.0;\n if (\n !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)\n ) {\n roll = Math.atan2(-right.z, up.z);\n roll = CesiumMath.zeroToTwoPi(roll + CesiumMath.TWO_PI);\n }\n\n return roll;\n}\n\nvar scratchHPRMatrix1 = new Matrix4();\nvar scratchHPRMatrix2 = new Matrix4();\n\nObject.defineProperties(Camera.prototype, {\n /**\n * Gets the camera's reference frame. The inverse of this transformation is appended to the view matrix.\n * @memberof Camera.prototype\n *\n * @type {Matrix4}\n * @readonly\n *\n * @default {@link Matrix4.IDENTITY}\n */\n transform: {\n get: function () {\n return this._transform;\n },\n },\n\n /**\n * Gets the inverse camera transform.\n * @memberof Camera.prototype\n *\n * @type {Matrix4}\n * @readonly\n *\n * @default {@link Matrix4.IDENTITY}\n */\n inverseTransform: {\n get: function () {\n updateMembers(this);\n return this._invTransform;\n },\n },\n\n /**\n * Gets the view matrix.\n * @memberof Camera.prototype\n *\n * @type {Matrix4}\n * @readonly\n *\n * @see Camera#inverseViewMatrix\n */\n viewMatrix: {\n get: function () {\n updateMembers(this);\n return this._viewMatrix;\n },\n },\n\n /**\n * Gets the inverse view matrix.\n * @memberof Camera.prototype\n *\n * @type {Matrix4}\n * @readonly\n *\n * @see Camera#viewMatrix\n */\n inverseViewMatrix: {\n get: function () {\n updateMembers(this);\n return this._invViewMatrix;\n },\n },\n\n /**\n * Gets the {@link Cartographic} position of the camera, with longitude and latitude\n * expressed in radians and height in meters. In 2D and Columbus View, it is possible\n * for the returned longitude and latitude to be outside the range of valid longitudes\n * and latitudes when the camera is outside the map.\n * @memberof Camera.prototype\n *\n * @type {Cartographic}\n * @readonly\n */\n positionCartographic: {\n get: function () {\n updateMembers(this);\n return this._positionCartographic;\n },\n },\n\n /**\n * Gets the position of the camera in world coordinates.\n * @memberof Camera.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n positionWC: {\n get: function () {\n updateMembers(this);\n return this._positionWC;\n },\n },\n\n /**\n * Gets the view direction of the camera in world coordinates.\n * @memberof Camera.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n directionWC: {\n get: function () {\n updateMembers(this);\n return this._directionWC;\n },\n },\n\n /**\n * Gets the up direction of the camera in world coordinates.\n * @memberof Camera.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n upWC: {\n get: function () {\n updateMembers(this);\n return this._upWC;\n },\n },\n\n /**\n * Gets the right direction of the camera in world coordinates.\n * @memberof Camera.prototype\n *\n * @type {Cartesian3}\n * @readonly\n */\n rightWC: {\n get: function () {\n updateMembers(this);\n return this._rightWC;\n },\n },\n\n /**\n * Gets the camera heading in radians.\n * @memberof Camera.prototype\n *\n * @type {Number}\n * @readonly\n */\n heading: {\n get: function () {\n if (this._mode !== SceneMode.MORPHING) {\n var ellipsoid = this._projection.ellipsoid;\n\n var oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n var transform = Transforms.eastNorthUpToFixedFrame(\n this.positionWC,\n ellipsoid,\n scratchHPRMatrix2\n );\n this._setTransform(transform);\n\n var heading = getHeading(this.direction, this.up);\n\n this._setTransform(oldTransform);\n\n return heading;\n }\n\n return undefined;\n },\n },\n\n /**\n * Gets the camera pitch in radians.\n * @memberof Camera.prototype\n *\n * @type {Number}\n * @readonly\n */\n pitch: {\n get: function () {\n if (this._mode !== SceneMode.MORPHING) {\n var ellipsoid = this._projection.ellipsoid;\n\n var oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n var transform = Transforms.eastNorthUpToFixedFrame(\n this.positionWC,\n ellipsoid,\n scratchHPRMatrix2\n );\n this._setTransform(transform);\n\n var pitch = getPitch(this.direction);\n\n this._setTransform(oldTransform);\n\n return pitch;\n }\n\n return undefined;\n },\n },\n\n /**\n * Gets the camera roll in radians.\n * @memberof Camera.prototype\n *\n * @type {Number}\n * @readonly\n */\n roll: {\n get: function () {\n if (this._mode !== SceneMode.MORPHING) {\n var ellipsoid = this._projection.ellipsoid;\n\n var oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n var transform = Transforms.eastNorthUpToFixedFrame(\n this.positionWC,\n ellipsoid,\n scratchHPRMatrix2\n );\n this._setTransform(transform);\n\n var roll = getRoll(this.direction, this.up, this.right);\n\n this._setTransform(oldTransform);\n\n return roll;\n }\n\n return undefined;\n },\n },\n\n /**\n * Gets the event that will be raised at when the camera starts to move.\n * @memberof Camera.prototype\n * @type {Event}\n * @readonly\n */\n moveStart: {\n get: function () {\n return this._moveStart;\n },\n },\n\n /**\n * Gets the event that will be raised when the camera has stopped moving.\n * @memberof Camera.prototype\n * @type {Event}\n * @readonly\n */\n moveEnd: {\n get: function () {\n return this._moveEnd;\n },\n },\n\n /**\n * Gets the event that will be raised when the camera has changed by <code>percentageChanged</code>.\n * @memberof Camera.prototype\n * @type {Event}\n * @readonly\n */\n changed: {\n get: function () {\n return this._changed;\n },\n },\n});\n\n/**\n * @private\n */\nCamera.prototype.update = function (mode) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(mode)) {\n throw new DeveloperError(\"mode is required.\");\n }\n if (\n mode === SceneMode.SCENE2D &&\n !(this.frustum instanceof OrthographicOffCenterFrustum)\n ) {\n throw new DeveloperError(\n \"An OrthographicOffCenterFrustum is required in 2D.\"\n );\n }\n if (\n (mode === SceneMode.SCENE3D || mode === SceneMode.COLUMBUS_VIEW) &&\n !(this.frustum instanceof PerspectiveFrustum) &&\n !(this.frustum instanceof OrthographicFrustum)\n ) {\n throw new DeveloperError(\n \"A PerspectiveFrustum or OrthographicFrustum is required in 3D and Columbus view\"\n );\n }\n //>>includeEnd('debug');\n\n var updateFrustum = false;\n if (mode !== this._mode) {\n this._mode = mode;\n this._modeChanged = mode !== SceneMode.MORPHING;\n updateFrustum = this._mode === SceneMode.SCENE2D;\n }\n\n if (updateFrustum) {\n var frustum = (this._max2Dfrustum = this.frustum.clone());\n\n //>>includeStart('debug', pragmas.debug);\n if (!(frustum instanceof OrthographicOffCenterFrustum)) {\n throw new DeveloperError(\n \"The camera frustum is expected to be orthographic for 2D camera control.\"\n );\n }\n //>>includeEnd('debug');\n\n var maxZoomOut = 2.0;\n var ratio = frustum.top / frustum.right;\n frustum.right = this._maxCoord.x * maxZoomOut;\n frustum.left = -frustum.right;\n frustum.top = ratio * frustum.right;\n frustum.bottom = -frustum.top;\n }\n\n if (this._mode === SceneMode.SCENE2D) {\n clampMove2D(this, this.position);\n }\n};\n\nvar setTransformPosition = new Cartesian3();\nvar setTransformUp = new Cartesian3();\nvar setTransformDirection = new Cartesian3();\n\nCamera.prototype._setTransform = function (transform) {\n var position = Cartesian3.clone(this.positionWC, setTransformPosition);\n var up = Cartesian3.clone(this.upWC, setTransformUp);\n var direction = Cartesian3.clone(this.directionWC, setTransformDirection);\n\n Matrix4.clone(transform, this._transform);\n this._transformChanged = true;\n updateMembers(this);\n var inverse = this._actualInvTransform;\n\n Matrix4.multiplyByPoint(inverse, position, this.position);\n Matrix4.multiplyByPointAsVector(inverse, direction, this.direction);\n Matrix4.multiplyByPointAsVector(inverse, up, this.up);\n Cartesian3.cross(this.direction, this.up, this.right);\n\n updateMembers(this);\n};\n\nvar scratchAdjustOrthographicFrustumMousePosition = new Cartesian2();\nvar scratchPickRay = new Ray();\nvar scratchRayIntersection = new Cartesian3();\nvar scratchDepthIntersection = new Cartesian3();\n\nfunction calculateOrthographicFrustumWidth(camera) {\n // Camera is fixed to an object, so keep frustum width constant.\n if (!Matrix4.equals(Matrix4.IDENTITY, camera.transform)) {\n return Cartesian3.magnitude(camera.position);\n }\n\n var scene = camera._scene;\n var globe = scene.globe;\n\n var mousePosition = scratchAdjustOrthographicFrustumMousePosition;\n mousePosition.x = scene.drawingBufferWidth / 2.0;\n mousePosition.y = scene.drawingBufferHeight / 2.0;\n\n var rayIntersection;\n if (defined(globe)) {\n var ray = camera.getPickRay(mousePosition, scratchPickRay);\n rayIntersection = globe.pickWorldCoordinates(\n ray,\n scene,\n true,\n scratchRayIntersection\n );\n }\n\n var depthIntersection;\n if (scene.pickPositionSupported) {\n depthIntersection = scene.pickPositionWorldCoordinates(\n mousePosition,\n scratchDepthIntersection\n );\n }\n\n var distance;\n if (defined(rayIntersection) || defined(depthIntersection)) {\n var depthDistance = defined(depthIntersection)\n ? Cartesian3.distance(depthIntersection, camera.positionWC)\n : Number.POSITIVE_INFINITY;\n var rayDistance = defined(rayIntersection)\n ? Cartesian3.distance(rayIntersection, camera.positionWC)\n : Number.POSITIVE_INFINITY;\n distance = Math.min(depthDistance, rayDistance);\n } else {\n distance = Math.max(camera.positionCartographic.height, 0.0);\n }\n return distance;\n}\n\nCamera.prototype._adjustOrthographicFrustum = function (zooming) {\n if (!(this.frustum instanceof OrthographicFrustum)) {\n return;\n }\n\n if (!zooming && this._positionCartographic.height < 150000.0) {\n return;\n }\n\n this.frustum.width = calculateOrthographicFrustumWidth(this);\n};\n\nvar scratchSetViewCartesian = new Cartesian3();\nvar scratchSetViewTransform1 = new Matrix4();\nvar scratchSetViewTransform2 = new Matrix4();\nvar scratchSetViewQuaternion = new Quaternion();\nvar scratchSetViewMatrix3 = new Matrix3();\nvar scratchSetViewCartographic = new Cartographic();\n\nfunction setView3D(camera, position, hpr) {\n var currentTransform = Matrix4.clone(\n camera.transform,\n scratchSetViewTransform1\n );\n var localTransform = Transforms.eastNorthUpToFixedFrame(\n position,\n camera._projection.ellipsoid,\n scratchSetViewTransform2\n );\n camera._setTransform(localTransform);\n\n Cartesian3.clone(Cartesian3.ZERO, camera.position);\n hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n\n var rotQuat = Quaternion.fromHeadingPitchRoll(hpr, scratchSetViewQuaternion);\n var rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n Matrix3.getColumn(rotMat, 0, camera.direction);\n Matrix3.getColumn(rotMat, 2, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n camera._setTransform(currentTransform);\n\n camera._adjustOrthographicFrustum(true);\n}\n\nfunction setViewCV(camera, position, hpr, convert) {\n var currentTransform = Matrix4.clone(\n camera.transform,\n scratchSetViewTransform1\n );\n camera._setTransform(Matrix4.IDENTITY);\n\n if (!Cartesian3.equals(position, camera.positionWC)) {\n if (convert) {\n var projection = camera._projection;\n var cartographic = projection.ellipsoid.cartesianToCartographic(\n position,\n scratchSetViewCartographic\n );\n position = projection.project(cartographic, scratchSetViewCartesian);\n }\n Cartesian3.clone(position, camera.position);\n }\n hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n\n var rotQuat = Quaternion.fromHeadingPitchRoll(hpr, scratchSetViewQuaternion);\n var rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n Matrix3.getColumn(rotMat, 0, camera.direction);\n Matrix3.getColumn(rotMat, 2, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n camera._setTransform(currentTransform);\n\n camera._adjustOrthographicFrustum(true);\n}\n\nfunction setView2D(camera, position, hpr, convert) {\n var currentTransform = Matrix4.clone(\n camera.transform,\n scratchSetViewTransform1\n );\n camera._setTransform(Matrix4.IDENTITY);\n\n if (!Cartesian3.equals(position, camera.positionWC)) {\n if (convert) {\n var projection = camera._projection;\n var cartographic = projection.ellipsoid.cartesianToCartographic(\n position,\n scratchSetViewCartographic\n );\n position = projection.project(cartographic, scratchSetViewCartesian);\n }\n\n Cartesian2.clone(position, camera.position);\n\n var newLeft = -position.z * 0.5;\n var newRight = -newLeft;\n\n var frustum = camera.frustum;\n if (newRight > newLeft) {\n var ratio = frustum.top / frustum.right;\n frustum.right = newRight;\n frustum.left = newLeft;\n frustum.top = frustum.right * ratio;\n frustum.bottom = -frustum.top;\n }\n }\n\n if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n hpr.pitch = -CesiumMath.PI_OVER_TWO;\n hpr.roll = 0.0;\n var rotQuat = Quaternion.fromHeadingPitchRoll(\n hpr,\n scratchSetViewQuaternion\n );\n var rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n Matrix3.getColumn(rotMat, 2, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n }\n\n camera._setTransform(currentTransform);\n}\n\nvar scratchToHPRDirection = new Cartesian3();\nvar scratchToHPRUp = new Cartesian3();\nvar scratchToHPRRight = new Cartesian3();\n\nfunction directionUpToHeadingPitchRoll(camera, position, orientation, result) {\n var direction = Cartesian3.clone(\n orientation.direction,\n scratchToHPRDirection\n );\n var up = Cartesian3.clone(orientation.up, scratchToHPRUp);\n\n if (camera._scene.mode === SceneMode.SCENE3D) {\n var ellipsoid = camera._projection.ellipsoid;\n var transform = Transforms.eastNorthUpToFixedFrame(\n position,\n ellipsoid,\n scratchHPRMatrix1\n );\n var invTransform = Matrix4.inverseTransformation(\n transform,\n scratchHPRMatrix2\n );\n\n Matrix4.multiplyByPointAsVector(invTransform, direction, direction);\n Matrix4.multiplyByPointAsVector(invTransform, up, up);\n }\n\n var right = Cartesian3.cross(direction, up, scratchToHPRRight);\n\n result.heading = getHeading(direction, up);\n result.pitch = getPitch(direction);\n result.roll = getRoll(direction, up, right);\n\n return result;\n}\n\nvar scratchSetViewOptions = {\n destination: undefined,\n orientation: {\n direction: undefined,\n up: undefined,\n heading: undefined,\n pitch: undefined,\n roll: undefined,\n },\n convert: undefined,\n endTransform: undefined,\n};\n\nvar scratchHpr = new HeadingPitchRoll();\n/**\n * Sets the camera position, orientation and transform.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3|Rectangle} [options.destination] The final position of the camera in WGS84 (world) coordinates or a rectangle that would be visible from a top-down view.\n * @param {Object} [options.orientation] An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point\n * towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive\n * y direction in Columbus view. Orientation is not used in 2D when in infinite scrolling mode.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame of the camera.\n * @param {Boolean} [options.convert] Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to <code>true</code>.\n *\n * @example\n * // 1. Set position with a top-down view\n * viewer.camera.setView({\n * destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)\n * });\n *\n * // 2 Set view with heading, pitch and roll\n * viewer.camera.setView({\n * destination : cartesianPosition,\n * orientation: {\n * heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)\n * pitch : Cesium.Math.toRadians(-90), // default value (looking down)\n * roll : 0.0 // default value\n * }\n * });\n *\n * // 3. Change heading, pitch and roll with the camera position remaining the same.\n * viewer.camera.setView({\n * orientation: {\n * heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)\n * pitch : Cesium.Math.toRadians(-90), // default value (looking down)\n * roll : 0.0 // default value\n * }\n * });\n *\n *\n * // 4. View rectangle with a top-down view\n * viewer.camera.setView({\n * destination : Cesium.Rectangle.fromDegrees(west, south, east, north)\n * });\n *\n * // 5. Set position with an orientation using unit vectors.\n * viewer.camera.setView({\n * destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n * orientation : {\n * direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),\n * up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)\n * }\n * });\n */\nCamera.prototype.setView = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var orientation = defaultValue(\n options.orientation,\n defaultValue.EMPTY_OBJECT\n );\n\n var mode = this._mode;\n if (mode === SceneMode.MORPHING) {\n return;\n }\n\n if (defined(options.endTransform)) {\n this._setTransform(options.endTransform);\n }\n\n var convert = defaultValue(options.convert, true);\n var destination = defaultValue(\n options.destination,\n Cartesian3.clone(this.positionWC, scratchSetViewCartesian)\n );\n if (defined(destination) && defined(destination.west)) {\n destination = this.getRectangleCameraCoordinates(\n destination,\n scratchSetViewCartesian\n );\n convert = false;\n }\n\n if (defined(orientation.direction)) {\n orientation = directionUpToHeadingPitchRoll(\n this,\n destination,\n orientation,\n scratchSetViewOptions.orientation\n );\n }\n\n scratchHpr.heading = defaultValue(orientation.heading, 0.0);\n scratchHpr.pitch = defaultValue(orientation.pitch, -CesiumMath.PI_OVER_TWO);\n scratchHpr.roll = defaultValue(orientation.roll, 0.0);\n\n if (mode === SceneMode.SCENE3D) {\n setView3D(this, destination, scratchHpr);\n } else if (mode === SceneMode.SCENE2D) {\n setView2D(this, destination, scratchHpr, convert);\n } else {\n setViewCV(this, destination, scratchHpr, convert);\n }\n};\n\nvar pitchScratch = new Cartesian3();\n/**\n * Fly the camera to the home view. Use {@link Camera#.DEFAULT_VIEW_RECTANGLE} to set\n * the default view for the 3D scene. The home view for 2D and columbus view shows the\n * entire map.\n *\n * @param {Number} [duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight. See {@link Camera#flyTo}\n */\nCamera.prototype.flyHome = function (duration) {\n var mode = this._mode;\n\n if (mode === SceneMode.MORPHING) {\n this._scene.completeMorph();\n }\n\n if (mode === SceneMode.SCENE2D) {\n this.flyTo({\n destination: Camera.DEFAULT_VIEW_RECTANGLE,\n duration: duration,\n endTransform: Matrix4.IDENTITY,\n });\n } else if (mode === SceneMode.SCENE3D) {\n var destination = this.getRectangleCameraCoordinates(\n Camera.DEFAULT_VIEW_RECTANGLE\n );\n\n var mag = Cartesian3.magnitude(destination);\n mag += mag * Camera.DEFAULT_VIEW_FACTOR;\n Cartesian3.normalize(destination, destination);\n Cartesian3.multiplyByScalar(destination, mag, destination);\n\n this.flyTo({\n destination: destination,\n duration: duration,\n endTransform: Matrix4.IDENTITY,\n });\n } else if (mode === SceneMode.COLUMBUS_VIEW) {\n var maxRadii = this._projection.ellipsoid.maximumRadius;\n var position = new Cartesian3(0.0, -1.0, 1.0);\n position = Cartesian3.multiplyByScalar(\n Cartesian3.normalize(position, position),\n 5.0 * maxRadii,\n position\n );\n this.flyTo({\n destination: position,\n duration: duration,\n orientation: {\n heading: 0.0,\n pitch: -Math.acos(Cartesian3.normalize(position, pitchScratch).z),\n roll: 0.0,\n },\n endTransform: Matrix4.IDENTITY,\n convert: false,\n });\n }\n};\n\n/**\n * Transform a vector or point from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian4} cartesian The vector or point to transform.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The transformed vector or point.\n */\nCamera.prototype.worldToCameraCoordinates = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian4();\n }\n updateMembers(this);\n return Matrix4.multiplyByVector(this._actualInvTransform, cartesian, result);\n};\n\n/**\n * Transform a point from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian3} cartesian The point to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed point.\n */\nCamera.prototype.worldToCameraCoordinatesPoint = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n updateMembers(this);\n return Matrix4.multiplyByPoint(this._actualInvTransform, cartesian, result);\n};\n\n/**\n * Transform a vector from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian3} cartesian The vector to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed vector.\n */\nCamera.prototype.worldToCameraCoordinatesVector = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n updateMembers(this);\n return Matrix4.multiplyByPointAsVector(\n this._actualInvTransform,\n cartesian,\n result\n );\n};\n\n/**\n * Transform a vector or point from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian4} cartesian The vector or point to transform.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The transformed vector or point.\n */\nCamera.prototype.cameraToWorldCoordinates = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian4();\n }\n updateMembers(this);\n return Matrix4.multiplyByVector(this._actualTransform, cartesian, result);\n};\n\n/**\n * Transform a point from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian3} cartesian The point to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed point.\n */\nCamera.prototype.cameraToWorldCoordinatesPoint = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n updateMembers(this);\n return Matrix4.multiplyByPoint(this._actualTransform, cartesian, result);\n};\n\n/**\n * Transform a vector from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian3} cartesian The vector to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed vector.\n */\nCamera.prototype.cameraToWorldCoordinatesVector = function (cartesian, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartesian)) {\n throw new DeveloperError(\"cartesian is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n updateMembers(this);\n return Matrix4.multiplyByPointAsVector(\n this._actualTransform,\n cartesian,\n result\n );\n};\n\nfunction clampMove2D(camera, position) {\n var rotatable2D = camera._scene.mapMode2D === MapMode2D.ROTATE;\n var maxProjectedX = camera._maxCoord.x;\n var maxProjectedY = camera._maxCoord.y;\n\n var minX;\n var maxX;\n if (rotatable2D) {\n maxX = maxProjectedX;\n minX = -maxX;\n } else {\n maxX = position.x - maxProjectedX * 2.0;\n minX = position.x + maxProjectedX * 2.0;\n }\n\n if (position.x > maxProjectedX) {\n position.x = maxX;\n }\n if (position.x < -maxProjectedX) {\n position.x = minX;\n }\n\n if (position.y > maxProjectedY) {\n position.y = maxProjectedY;\n }\n if (position.y < -maxProjectedY) {\n position.y = -maxProjectedY;\n }\n}\n\nvar moveScratch = new Cartesian3();\n/**\n * Translates the camera's position by <code>amount</code> along <code>direction</code>.\n *\n * @param {Cartesian3} direction The direction to move.\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveBackward\n * @see Camera#moveForward\n * @see Camera#moveLeft\n * @see Camera#moveRight\n * @see Camera#moveUp\n * @see Camera#moveDown\n */\nCamera.prototype.move = function (direction, amount) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(direction)) {\n throw new DeveloperError(\"direction is required.\");\n }\n //>>includeEnd('debug');\n\n var cameraPosition = this.position;\n Cartesian3.multiplyByScalar(direction, amount, moveScratch);\n Cartesian3.add(cameraPosition, moveScratch, cameraPosition);\n\n if (this._mode === SceneMode.SCENE2D) {\n clampMove2D(this, cameraPosition);\n }\n this._adjustOrthographicFrustum(true);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's view vector.\n * When in 2D mode, this will zoom in the camera instead of translating the camera's position.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveBackward\n */\nCamera.prototype.moveForward = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n\n if (this._mode === SceneMode.SCENE2D) {\n // 2D mode\n zoom2D(this, amount);\n } else {\n // 3D or Columbus view mode\n this.move(this.direction, amount);\n }\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's view vector.\n * When in 2D mode, this will zoom out the camera instead of translating the camera's position.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveForward\n */\nCamera.prototype.moveBackward = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n\n if (this._mode === SceneMode.SCENE2D) {\n // 2D mode\n zoom2D(this, -amount);\n } else {\n // 3D or Columbus view mode\n this.move(this.direction, -amount);\n }\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's up vector.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveDown\n */\nCamera.prototype.moveUp = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n this.move(this.up, amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's up vector.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveUp\n */\nCamera.prototype.moveDown = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n this.move(this.up, -amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's right vector.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveLeft\n */\nCamera.prototype.moveRight = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n this.move(this.right, amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's right vector.\n *\n * @param {Number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveRight\n */\nCamera.prototype.moveLeft = function (amount) {\n amount = defaultValue(amount, this.defaultMoveAmount);\n this.move(this.right, -amount);\n};\n\n/**\n * Rotates the camera around its up vector by amount, in radians, in the opposite direction\n * of its right vector if not in 2D mode.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookRight\n */\nCamera.prototype.lookLeft = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n\n // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n if (this._mode !== SceneMode.SCENE2D) {\n this.look(this.up, -amount);\n }\n};\n\n/**\n * Rotates the camera around its up vector by amount, in radians, in the direction\n * of its right vector if not in 2D mode.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookLeft\n */\nCamera.prototype.lookRight = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n\n // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n if (this._mode !== SceneMode.SCENE2D) {\n this.look(this.up, amount);\n }\n};\n\n/**\n * Rotates the camera around its right vector by amount, in radians, in the direction\n * of its up vector if not in 2D mode.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookDown\n */\nCamera.prototype.lookUp = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n\n // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n if (this._mode !== SceneMode.SCENE2D) {\n this.look(this.right, -amount);\n }\n};\n\n/**\n * Rotates the camera around its right vector by amount, in radians, in the opposite direction\n * of its up vector if not in 2D mode.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookUp\n */\nCamera.prototype.lookDown = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n\n // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n if (this._mode !== SceneMode.SCENE2D) {\n this.look(this.right, amount);\n }\n};\n\nvar lookScratchQuaternion = new Quaternion();\nvar lookScratchMatrix = new Matrix3();\n/**\n * Rotate each of the camera's orientation vectors around <code>axis</code> by <code>angle</code>\n *\n * @param {Cartesian3} axis The axis to rotate around.\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookUp\n * @see Camera#lookDown\n * @see Camera#lookLeft\n * @see Camera#lookRight\n */\nCamera.prototype.look = function (axis, angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(axis)) {\n throw new DeveloperError(\"axis is required.\");\n }\n //>>includeEnd('debug');\n\n var turnAngle = defaultValue(angle, this.defaultLookAmount);\n var quaternion = Quaternion.fromAxisAngle(\n axis,\n -turnAngle,\n lookScratchQuaternion\n );\n var rotation = Matrix3.fromQuaternion(quaternion, lookScratchMatrix);\n\n var direction = this.direction;\n var up = this.up;\n var right = this.right;\n\n Matrix3.multiplyByVector(rotation, direction, direction);\n Matrix3.multiplyByVector(rotation, up, up);\n Matrix3.multiplyByVector(rotation, right, right);\n};\n\n/**\n * Rotate the camera counter-clockwise around its direction vector by amount, in radians.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#twistRight\n */\nCamera.prototype.twistLeft = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n this.look(this.direction, amount);\n};\n\n/**\n * Rotate the camera clockwise around its direction vector by amount, in radians.\n *\n * @param {Number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#twistLeft\n */\nCamera.prototype.twistRight = function (amount) {\n amount = defaultValue(amount, this.defaultLookAmount);\n this.look(this.direction, -amount);\n};\n\nvar rotateScratchQuaternion = new Quaternion();\nvar rotateScratchMatrix = new Matrix3();\n/**\n * Rotates the camera around <code>axis</code> by <code>angle</code>. The distance\n * of the camera's position to the center of the camera's reference frame remains the same.\n *\n * @param {Cartesian3} axis The axis to rotate around given in world coordinates.\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateUp\n * @see Camera#rotateDown\n * @see Camera#rotateLeft\n * @see Camera#rotateRight\n */\nCamera.prototype.rotate = function (axis, angle) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(axis)) {\n throw new DeveloperError(\"axis is required.\");\n }\n //>>includeEnd('debug');\n\n var turnAngle = defaultValue(angle, this.defaultRotateAmount);\n var quaternion = Quaternion.fromAxisAngle(\n axis,\n -turnAngle,\n rotateScratchQuaternion\n );\n var rotation = Matrix3.fromQuaternion(quaternion, rotateScratchMatrix);\n Matrix3.multiplyByVector(rotation, this.position, this.position);\n Matrix3.multiplyByVector(rotation, this.direction, this.direction);\n Matrix3.multiplyByVector(rotation, this.up, this.up);\n Cartesian3.cross(this.direction, this.up, this.right);\n Cartesian3.cross(this.right, this.direction, this.up);\n\n this._adjustOrthographicFrustum(false);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle downwards.\n *\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateUp\n * @see Camera#rotate\n */\nCamera.prototype.rotateDown = function (angle) {\n angle = defaultValue(angle, this.defaultRotateAmount);\n rotateVertical(this, angle);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle upwards.\n *\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateDown\n * @see Camera#rotate\n */\nCamera.prototype.rotateUp = function (angle) {\n angle = defaultValue(angle, this.defaultRotateAmount);\n rotateVertical(this, -angle);\n};\n\nvar rotateVertScratchP = new Cartesian3();\nvar rotateVertScratchA = new Cartesian3();\nvar rotateVertScratchTan = new Cartesian3();\nvar rotateVertScratchNegate = new Cartesian3();\nfunction rotateVertical(camera, angle) {\n var position = camera.position;\n if (\n defined(camera.constrainedAxis) &&\n !Cartesian3.equalsEpsilon(\n camera.position,\n Cartesian3.ZERO,\n CesiumMath.EPSILON2\n )\n ) {\n var p = Cartesian3.normalize(position, rotateVertScratchP);\n var northParallel = Cartesian3.equalsEpsilon(\n p,\n camera.constrainedAxis,\n CesiumMath.EPSILON2\n );\n var southParallel = Cartesian3.equalsEpsilon(\n p,\n Cartesian3.negate(camera.constrainedAxis, rotateVertScratchNegate),\n CesiumMath.EPSILON2\n );\n if (!northParallel && !southParallel) {\n var constrainedAxis = Cartesian3.normalize(\n camera.constrainedAxis,\n rotateVertScratchA\n );\n\n var dot = Cartesian3.dot(p, constrainedAxis);\n var angleToAxis = CesiumMath.acosClamped(dot);\n if (angle > 0 && angle > angleToAxis) {\n angle = angleToAxis - CesiumMath.EPSILON4;\n }\n\n dot = Cartesian3.dot(\n p,\n Cartesian3.negate(constrainedAxis, rotateVertScratchNegate)\n );\n angleToAxis = CesiumMath.acosClamped(dot);\n if (angle < 0 && -angle > angleToAxis) {\n angle = -angleToAxis + CesiumMath.EPSILON4;\n }\n\n var tangent = Cartesian3.cross(constrainedAxis, p, rotateVertScratchTan);\n camera.rotate(tangent, angle);\n } else if ((northParallel && angle < 0) || (southParallel && angle > 0)) {\n camera.rotate(camera.right, angle);\n }\n } else {\n camera.rotate(camera.right, angle);\n }\n}\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle to the right.\n *\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateLeft\n * @see Camera#rotate\n */\nCamera.prototype.rotateRight = function (angle) {\n angle = defaultValue(angle, this.defaultRotateAmount);\n rotateHorizontal(this, -angle);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle to the left.\n *\n * @param {Number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateRight\n * @see Camera#rotate\n */\nCamera.prototype.rotateLeft = function (angle) {\n angle = defaultValue(angle, this.defaultRotateAmount);\n rotateHorizontal(this, angle);\n};\n\nfunction rotateHorizontal(camera, angle) {\n if (defined(camera.constrainedAxis)) {\n camera.rotate(camera.constrainedAxis, angle);\n } else {\n camera.rotate(camera.up, angle);\n }\n}\n\nfunction zoom2D(camera, amount) {\n var frustum = camera.frustum;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !(frustum instanceof OrthographicOffCenterFrustum) ||\n !defined(frustum.left) ||\n !defined(frustum.right) ||\n !defined(frustum.bottom) ||\n !defined(frustum.top)\n ) {\n throw new DeveloperError(\n \"The camera frustum is expected to be orthographic for 2D camera control.\"\n );\n }\n //>>includeEnd('debug');\n\n var ratio;\n amount = amount * 0.5;\n\n if (\n Math.abs(frustum.top) + Math.abs(frustum.bottom) >\n Math.abs(frustum.left) + Math.abs(frustum.right)\n ) {\n var newTop = frustum.top - amount;\n var newBottom = frustum.bottom + amount;\n\n var maxBottom = camera._maxCoord.y;\n if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n maxBottom *= camera.maximumZoomFactor;\n }\n\n if (newBottom > maxBottom) {\n newBottom = maxBottom;\n newTop = -maxBottom;\n }\n\n if (newTop <= newBottom) {\n newTop = 1.0;\n newBottom = -1.0;\n }\n\n ratio = frustum.right / frustum.top;\n frustum.top = newTop;\n frustum.bottom = newBottom;\n frustum.right = frustum.top * ratio;\n frustum.left = -frustum.right;\n } else {\n var newRight = frustum.right - amount;\n var newLeft = frustum.left + amount;\n\n var maxRight = camera._maxCoord.x;\n if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n maxRight *= camera.maximumZoomFactor;\n }\n\n if (newRight > maxRight) {\n newRight = maxRight;\n newLeft = -maxRight;\n }\n\n if (newRight <= newLeft) {\n newRight = 1.0;\n newLeft = -1.0;\n }\n ratio = frustum.top / frustum.right;\n frustum.right = newRight;\n frustum.left = newLeft;\n frustum.top = frustum.right * ratio;\n frustum.bottom = -frustum.top;\n }\n}\n\nfunction zoom3D(camera, amount) {\n camera.move(camera.direction, amount);\n}\n\n/**\n * Zooms <code>amount</code> along the camera's view vector.\n *\n * @param {Number} [amount] The amount to move. Defaults to <code>defaultZoomAmount</code>.\n *\n * @see Camera#zoomOut\n */\nCamera.prototype.zoomIn = function (amount) {\n amount = defaultValue(amount, this.defaultZoomAmount);\n if (this._mode === SceneMode.SCENE2D) {\n zoom2D(this, amount);\n } else {\n zoom3D(this, amount);\n }\n};\n\n/**\n * Zooms <code>amount</code> along the opposite direction of\n * the camera's view vector.\n *\n * @param {Number} [amount] The amount to move. Defaults to <code>defaultZoomAmount</code>.\n *\n * @see Camera#zoomIn\n */\nCamera.prototype.zoomOut = function (amount) {\n amount = defaultValue(amount, this.defaultZoomAmount);\n if (this._mode === SceneMode.SCENE2D) {\n zoom2D(this, -amount);\n } else {\n zoom3D(this, -amount);\n }\n};\n\n/**\n * Gets the magnitude of the camera position. In 3D, this is the vector magnitude. In 2D and\n * Columbus view, this is the distance to the map.\n *\n * @returns {Number} The magnitude of the position.\n */\nCamera.prototype.getMagnitude = function () {\n if (this._mode === SceneMode.SCENE3D) {\n return Cartesian3.magnitude(this.position);\n } else if (this._mode === SceneMode.COLUMBUS_VIEW) {\n return Math.abs(this.position.z);\n } else if (this._mode === SceneMode.SCENE2D) {\n return Math.max(\n this.frustum.right - this.frustum.left,\n this.frustum.top - this.frustum.bottom\n );\n }\n};\n\nvar scratchLookAtMatrix4 = new Matrix4();\n\n/**\n * Sets the camera position and orientation using a target and offset. The target must be given in\n * world coordinates. The offset can be either a cartesian or heading/pitch/range in the local east-north-up reference frame centered at the target.\n * If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset\n * is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center.\n *\n * In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.\n *\n * @param {Cartesian3} target The target position in world coordinates.\n * @param {Cartesian3|HeadingPitchRange} offset The offset from the target in the local east-north-up reference frame centered at the target.\n *\n * @exception {DeveloperError} lookAt is not supported while morphing.\n *\n * @example\n * // 1. Using a cartesian offset\n * var center = Cesium.Cartesian3.fromDegrees(-98.0, 40.0);\n * viewer.camera.lookAt(center, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0));\n *\n * // 2. Using a HeadingPitchRange offset\n * var center = Cesium.Cartesian3.fromDegrees(-72.0, 40.0);\n * var heading = Cesium.Math.toRadians(50.0);\n * var pitch = Cesium.Math.toRadians(-20.0);\n * var range = 5000.0;\n * viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range));\n */\nCamera.prototype.lookAt = function (target, offset) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(target)) {\n throw new DeveloperError(\"target is required\");\n }\n if (!defined(offset)) {\n throw new DeveloperError(\"offset is required\");\n }\n if (this._mode === SceneMode.MORPHING) {\n throw new DeveloperError(\"lookAt is not supported while morphing.\");\n }\n //>>includeEnd('debug');\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n target,\n Ellipsoid.WGS84,\n scratchLookAtMatrix4\n );\n this.lookAtTransform(transform, offset);\n};\n\nvar scratchLookAtHeadingPitchRangeOffset = new Cartesian3();\nvar scratchLookAtHeadingPitchRangeQuaternion1 = new Quaternion();\nvar scratchLookAtHeadingPitchRangeQuaternion2 = new Quaternion();\nvar scratchHeadingPitchRangeMatrix3 = new Matrix3();\n\nfunction offsetFromHeadingPitchRange(heading, pitch, range) {\n pitch = CesiumMath.clamp(\n pitch,\n -CesiumMath.PI_OVER_TWO,\n CesiumMath.PI_OVER_TWO\n );\n heading = CesiumMath.zeroToTwoPi(heading) - CesiumMath.PI_OVER_TWO;\n\n var pitchQuat = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_Y,\n -pitch,\n scratchLookAtHeadingPitchRangeQuaternion1\n );\n var headingQuat = Quaternion.fromAxisAngle(\n Cartesian3.UNIT_Z,\n -heading,\n scratchLookAtHeadingPitchRangeQuaternion2\n );\n var rotQuat = Quaternion.multiply(headingQuat, pitchQuat, headingQuat);\n var rotMatrix = Matrix3.fromQuaternion(\n rotQuat,\n scratchHeadingPitchRangeMatrix3\n );\n\n var offset = Cartesian3.clone(\n Cartesian3.UNIT_X,\n scratchLookAtHeadingPitchRangeOffset\n );\n Matrix3.multiplyByVector(rotMatrix, offset, offset);\n Cartesian3.negate(offset, offset);\n Cartesian3.multiplyByScalar(offset, range, offset);\n return offset;\n}\n\n/**\n * Sets the camera position and orientation using a target and transformation matrix. The offset can be either a cartesian or heading/pitch/range.\n * If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset\n * is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center.\n *\n * In 2D, there must be a top down view. The camera will be placed above the center of the reference frame. The height above the\n * target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.\n *\n * @param {Matrix4} transform The transformation matrix defining the reference frame.\n * @param {Cartesian3|HeadingPitchRange} [offset] The offset from the target in a reference frame centered at the target.\n *\n * @exception {DeveloperError} lookAtTransform is not supported while morphing.\n *\n * @example\n * // 1. Using a cartesian offset\n * var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-98.0, 40.0));\n * viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0));\n *\n * // 2. Using a HeadingPitchRange offset\n * var transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-72.0, 40.0));\n * var heading = Cesium.Math.toRadians(50.0);\n * var pitch = Cesium.Math.toRadians(-20.0);\n * var range = 5000.0;\n * viewer.camera.lookAtTransform(transform, new Cesium.HeadingPitchRange(heading, pitch, range));\n */\nCamera.prototype.lookAtTransform = function (transform, offset) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(transform)) {\n throw new DeveloperError(\"transform is required\");\n }\n if (this._mode === SceneMode.MORPHING) {\n throw new DeveloperError(\n \"lookAtTransform is not supported while morphing.\"\n );\n }\n //>>includeEnd('debug');\n\n this._setTransform(transform);\n if (!defined(offset)) {\n return;\n }\n\n var cartesianOffset;\n if (defined(offset.heading)) {\n cartesianOffset = offsetFromHeadingPitchRange(\n offset.heading,\n offset.pitch,\n offset.range\n );\n } else {\n cartesianOffset = offset;\n }\n\n if (this._mode === SceneMode.SCENE2D) {\n Cartesian2.clone(Cartesian2.ZERO, this.position);\n\n Cartesian3.negate(cartesianOffset, this.up);\n this.up.z = 0.0;\n\n if (Cartesian3.magnitudeSquared(this.up) < CesiumMath.EPSILON10) {\n Cartesian3.clone(Cartesian3.UNIT_Y, this.up);\n }\n\n Cartesian3.normalize(this.up, this.up);\n\n this._setTransform(Matrix4.IDENTITY);\n\n Cartesian3.negate(Cartesian3.UNIT_Z, this.direction);\n Cartesian3.cross(this.direction, this.up, this.right);\n Cartesian3.normalize(this.right, this.right);\n\n var frustum = this.frustum;\n var ratio = frustum.top / frustum.right;\n frustum.right = Cartesian3.magnitude(cartesianOffset) * 0.5;\n frustum.left = -frustum.right;\n frustum.top = ratio * frustum.right;\n frustum.bottom = -frustum.top;\n\n this._setTransform(transform);\n\n return;\n }\n\n Cartesian3.clone(cartesianOffset, this.position);\n Cartesian3.negate(this.position, this.direction);\n Cartesian3.normalize(this.direction, this.direction);\n Cartesian3.cross(this.direction, Cartesian3.UNIT_Z, this.right);\n\n if (Cartesian3.magnitudeSquared(this.right) < CesiumMath.EPSILON10) {\n Cartesian3.clone(Cartesian3.UNIT_X, this.right);\n }\n\n Cartesian3.normalize(this.right, this.right);\n Cartesian3.cross(this.right, this.direction, this.up);\n Cartesian3.normalize(this.up, this.up);\n\n this._adjustOrthographicFrustum(true);\n};\n\nvar viewRectangle3DCartographic1 = new Cartographic();\nvar viewRectangle3DCartographic2 = new Cartographic();\nvar viewRectangle3DNorthEast = new Cartesian3();\nvar viewRectangle3DSouthWest = new Cartesian3();\nvar viewRectangle3DNorthWest = new Cartesian3();\nvar viewRectangle3DSouthEast = new Cartesian3();\nvar viewRectangle3DNorthCenter = new Cartesian3();\nvar viewRectangle3DSouthCenter = new Cartesian3();\nvar viewRectangle3DCenter = new Cartesian3();\nvar viewRectangle3DEquator = new Cartesian3();\nvar defaultRF = {\n direction: new Cartesian3(),\n right: new Cartesian3(),\n up: new Cartesian3(),\n};\nvar viewRectangle3DEllipsoidGeodesic;\n\nfunction computeD(direction, upOrRight, corner, tanThetaOrPhi) {\n var opposite = Math.abs(Cartesian3.dot(upOrRight, corner));\n return opposite / tanThetaOrPhi - Cartesian3.dot(direction, corner);\n}\n\nfunction rectangleCameraPosition3D(camera, rectangle, result, updateCamera) {\n var ellipsoid = camera._projection.ellipsoid;\n var cameraRF = updateCamera ? camera : defaultRF;\n\n var north = rectangle.north;\n var south = rectangle.south;\n var east = rectangle.east;\n var west = rectangle.west;\n\n // If we go across the International Date Line\n if (west > east) {\n east += CesiumMath.TWO_PI;\n }\n\n // Find the midpoint latitude.\n //\n // EllipsoidGeodesic will fail if the north and south edges are very close to being on opposite sides of the ellipsoid.\n // Ideally we'd just call EllipsoidGeodesic.setEndPoints and let it throw when it detects this case, but sadly it doesn't\n // even look for this case in optimized builds, so we have to test for it here instead.\n //\n // Fortunately, this case can only happen (here) when north is very close to the north pole and south is very close to the south pole,\n // so handle it just by using 0 latitude as the center. It's certainliy possible to use a smaller tolerance\n // than one degree here, but one degree is safe and putting the center at 0 latitude should be good enough for any\n // rectangle that spans 178+ of the 180 degrees of latitude.\n var longitude = (west + east) * 0.5;\n var latitude;\n if (\n south < -CesiumMath.PI_OVER_TWO + CesiumMath.RADIANS_PER_DEGREE &&\n north > CesiumMath.PI_OVER_TWO - CesiumMath.RADIANS_PER_DEGREE\n ) {\n latitude = 0.0;\n } else {\n var northCartographic = viewRectangle3DCartographic1;\n northCartographic.longitude = longitude;\n northCartographic.latitude = north;\n northCartographic.height = 0.0;\n\n var southCartographic = viewRectangle3DCartographic2;\n southCartographic.longitude = longitude;\n southCartographic.latitude = south;\n southCartographic.height = 0.0;\n\n var ellipsoidGeodesic = viewRectangle3DEllipsoidGeodesic;\n if (\n !defined(ellipsoidGeodesic) ||\n ellipsoidGeodesic.ellipsoid !== ellipsoid\n ) {\n viewRectangle3DEllipsoidGeodesic = ellipsoidGeodesic = new EllipsoidGeodesic(\n undefined,\n undefined,\n ellipsoid\n );\n }\n\n ellipsoidGeodesic.setEndPoints(northCartographic, southCartographic);\n latitude = ellipsoidGeodesic.interpolateUsingFraction(\n 0.5,\n viewRectangle3DCartographic1\n ).latitude;\n }\n\n var centerCartographic = viewRectangle3DCartographic1;\n centerCartographic.longitude = longitude;\n centerCartographic.latitude = latitude;\n centerCartographic.height = 0.0;\n\n var center = ellipsoid.cartographicToCartesian(\n centerCartographic,\n viewRectangle3DCenter\n );\n\n var cart = viewRectangle3DCartographic1;\n cart.longitude = east;\n cart.latitude = north;\n var northEast = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DNorthEast\n );\n cart.longitude = west;\n var northWest = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DNorthWest\n );\n cart.longitude = longitude;\n var northCenter = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DNorthCenter\n );\n cart.latitude = south;\n var southCenter = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DSouthCenter\n );\n cart.longitude = east;\n var southEast = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DSouthEast\n );\n cart.longitude = west;\n var southWest = ellipsoid.cartographicToCartesian(\n cart,\n viewRectangle3DSouthWest\n );\n\n Cartesian3.subtract(northWest, center, northWest);\n Cartesian3.subtract(southEast, center, southEast);\n Cartesian3.subtract(northEast, center, northEast);\n Cartesian3.subtract(southWest, center, southWest);\n Cartesian3.subtract(northCenter, center, northCenter);\n Cartesian3.subtract(southCenter, center, southCenter);\n\n var direction = ellipsoid.geodeticSurfaceNormal(center, cameraRF.direction);\n Cartesian3.negate(direction, direction);\n var right = Cartesian3.cross(direction, Cartesian3.UNIT_Z, cameraRF.right);\n Cartesian3.normalize(right, right);\n var up = Cartesian3.cross(right, direction, cameraRF.up);\n\n var d;\n if (camera.frustum instanceof OrthographicFrustum) {\n var width = Math.max(\n Cartesian3.distance(northEast, northWest),\n Cartesian3.distance(southEast, southWest)\n );\n var height = Math.max(\n Cartesian3.distance(northEast, southEast),\n Cartesian3.distance(northWest, southWest)\n );\n\n var rightScalar;\n var topScalar;\n var ratio =\n camera.frustum._offCenterFrustum.right /\n camera.frustum._offCenterFrustum.top;\n var heightRatio = height * ratio;\n if (width > heightRatio) {\n rightScalar = width;\n topScalar = rightScalar / ratio;\n } else {\n topScalar = height;\n rightScalar = heightRatio;\n }\n\n d = Math.max(rightScalar, topScalar);\n } else {\n var tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n var tanTheta = camera.frustum.aspectRatio * tanPhi;\n\n d = Math.max(\n computeD(direction, up, northWest, tanPhi),\n computeD(direction, up, southEast, tanPhi),\n computeD(direction, up, northEast, tanPhi),\n computeD(direction, up, southWest, tanPhi),\n computeD(direction, up, northCenter, tanPhi),\n computeD(direction, up, southCenter, tanPhi),\n computeD(direction, right, northWest, tanTheta),\n computeD(direction, right, southEast, tanTheta),\n computeD(direction, right, northEast, tanTheta),\n computeD(direction, right, southWest, tanTheta),\n computeD(direction, right, northCenter, tanTheta),\n computeD(direction, right, southCenter, tanTheta)\n );\n\n // If the rectangle crosses the equator, compute D at the equator, too, because that's the\n // widest part of the rectangle when projected onto the globe.\n if (south < 0 && north > 0) {\n var equatorCartographic = viewRectangle3DCartographic1;\n equatorCartographic.longitude = west;\n equatorCartographic.latitude = 0.0;\n equatorCartographic.height = 0.0;\n var equatorPosition = ellipsoid.cartographicToCartesian(\n equatorCartographic,\n viewRectangle3DEquator\n );\n Cartesian3.subtract(equatorPosition, center, equatorPosition);\n d = Math.max(\n d,\n computeD(direction, up, equatorPosition, tanPhi),\n computeD(direction, right, equatorPosition, tanTheta)\n );\n\n equatorCartographic.longitude = east;\n equatorPosition = ellipsoid.cartographicToCartesian(\n equatorCartographic,\n viewRectangle3DEquator\n );\n Cartesian3.subtract(equatorPosition, center, equatorPosition);\n d = Math.max(\n d,\n computeD(direction, up, equatorPosition, tanPhi),\n computeD(direction, right, equatorPosition, tanTheta)\n );\n }\n }\n\n return Cartesian3.add(\n center,\n Cartesian3.multiplyByScalar(direction, -d, viewRectangle3DEquator),\n result\n );\n}\n\nvar viewRectangleCVCartographic = new Cartographic();\nvar viewRectangleCVNorthEast = new Cartesian3();\nvar viewRectangleCVSouthWest = new Cartesian3();\nfunction rectangleCameraPositionColumbusView(camera, rectangle, result) {\n var projection = camera._projection;\n if (rectangle.west > rectangle.east) {\n rectangle = Rectangle.MAX_VALUE;\n }\n var transform = camera._actualTransform;\n var invTransform = camera._actualInvTransform;\n\n var cart = viewRectangleCVCartographic;\n cart.longitude = rectangle.east;\n cart.latitude = rectangle.north;\n var northEast = projection.project(cart, viewRectangleCVNorthEast);\n Matrix4.multiplyByPoint(transform, northEast, northEast);\n Matrix4.multiplyByPoint(invTransform, northEast, northEast);\n\n cart.longitude = rectangle.west;\n cart.latitude = rectangle.south;\n var southWest = projection.project(cart, viewRectangleCVSouthWest);\n Matrix4.multiplyByPoint(transform, southWest, southWest);\n Matrix4.multiplyByPoint(invTransform, southWest, southWest);\n\n result.x = (northEast.x - southWest.x) * 0.5 + southWest.x;\n result.y = (northEast.y - southWest.y) * 0.5 + southWest.y;\n\n if (defined(camera.frustum.fovy)) {\n var tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n var tanTheta = camera.frustum.aspectRatio * tanPhi;\n result.z =\n Math.max(\n (northEast.x - southWest.x) / tanTheta,\n (northEast.y - southWest.y) / tanPhi\n ) * 0.5;\n } else {\n var width = northEast.x - southWest.x;\n var height = northEast.y - southWest.y;\n result.z = Math.max(width, height);\n }\n\n return result;\n}\n\nvar viewRectangle2DCartographic = new Cartographic();\nvar viewRectangle2DNorthEast = new Cartesian3();\nvar viewRectangle2DSouthWest = new Cartesian3();\nfunction rectangleCameraPosition2D(camera, rectangle, result) {\n var projection = camera._projection;\n\n // Account for the rectangle crossing the International Date Line in 2D mode\n var east = rectangle.east;\n if (rectangle.west > rectangle.east) {\n if (camera._scene.mapMode2D === MapMode2D.INFINITE_SCROLL) {\n east += CesiumMath.TWO_PI;\n } else {\n rectangle = Rectangle.MAX_VALUE;\n east = rectangle.east;\n }\n }\n\n var cart = viewRectangle2DCartographic;\n cart.longitude = east;\n cart.latitude = rectangle.north;\n var northEast = projection.project(cart, viewRectangle2DNorthEast);\n cart.longitude = rectangle.west;\n cart.latitude = rectangle.south;\n var southWest = projection.project(cart, viewRectangle2DSouthWest);\n\n var width = Math.abs(northEast.x - southWest.x) * 0.5;\n var height = Math.abs(northEast.y - southWest.y) * 0.5;\n\n var right, top;\n var ratio = camera.frustum.right / camera.frustum.top;\n var heightRatio = height * ratio;\n if (width > heightRatio) {\n right = width;\n top = right / ratio;\n } else {\n top = height;\n right = heightRatio;\n }\n\n height = Math.max(2.0 * right, 2.0 * top);\n\n result.x = (northEast.x - southWest.x) * 0.5 + southWest.x;\n result.y = (northEast.y - southWest.y) * 0.5 + southWest.y;\n\n cart = projection.unproject(result, cart);\n cart.height = height;\n result = projection.project(cart, result);\n\n return result;\n}\n\n/**\n * Get the camera position needed to view a rectangle on an ellipsoid or map\n *\n * @param {Rectangle} rectangle The rectangle to view.\n * @param {Cartesian3} [result] The camera position needed to view the rectangle\n * @returns {Cartesian3} The camera position needed to view the rectangle\n */\nCamera.prototype.getRectangleCameraCoordinates = function (rectangle, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(rectangle)) {\n throw new DeveloperError(\"rectangle is required\");\n }\n //>>includeEnd('debug');\n var mode = this._mode;\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n if (mode === SceneMode.SCENE3D) {\n return rectangleCameraPosition3D(this, rectangle, result);\n } else if (mode === SceneMode.COLUMBUS_VIEW) {\n return rectangleCameraPositionColumbusView(this, rectangle, result);\n } else if (mode === SceneMode.SCENE2D) {\n return rectangleCameraPosition2D(this, rectangle, result);\n }\n\n return undefined;\n};\n\nvar pickEllipsoid3DRay = new Ray();\nfunction pickEllipsoid3D(camera, windowPosition, ellipsoid, result) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n var ray = camera.getPickRay(windowPosition, pickEllipsoid3DRay);\n var intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n if (!intersection) {\n return undefined;\n }\n\n var t = intersection.start > 0.0 ? intersection.start : intersection.stop;\n return Ray.getPoint(ray, t, result);\n}\n\nvar pickEllipsoid2DRay = new Ray();\nfunction pickMap2D(camera, windowPosition, projection, result) {\n var ray = camera.getPickRay(windowPosition, pickEllipsoid2DRay);\n var position = ray.origin;\n position = Cartesian3.fromElements(position.y, position.z, 0.0, position);\n var cart = projection.unproject(position);\n\n if (\n cart.latitude < -CesiumMath.PI_OVER_TWO ||\n cart.latitude > CesiumMath.PI_OVER_TWO\n ) {\n return undefined;\n }\n\n return projection.ellipsoid.cartographicToCartesian(cart, result);\n}\n\nvar pickEllipsoidCVRay = new Ray();\nfunction pickMapColumbusView(camera, windowPosition, projection, result) {\n var ray = camera.getPickRay(windowPosition, pickEllipsoidCVRay);\n var scalar = -ray.origin.x / ray.direction.x;\n Ray.getPoint(ray, scalar, result);\n\n var cart = projection.unproject(new Cartesian3(result.y, result.z, 0.0));\n\n if (\n cart.latitude < -CesiumMath.PI_OVER_TWO ||\n cart.latitude > CesiumMath.PI_OVER_TWO ||\n cart.longitude < -Math.PI ||\n cart.longitude > Math.PI\n ) {\n return undefined;\n }\n\n return projection.ellipsoid.cartographicToCartesian(cart, result);\n}\n\n/**\n * Pick an ellipsoid or map.\n *\n * @param {Cartesian2} windowPosition The x and y coordinates of a pixel.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to pick.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3 | undefined} If the ellipsoid or map was picked,\n * returns the point on the surface of the ellipsoid or map in world\n * coordinates. If the ellipsoid or map was not picked, returns undefined.\n *\n * @example\n * var canvas = viewer.scene.canvas;\n * var center = new Cesium.Cartesian2(canvas.clientWidth / 2.0, canvas.clientHeight / 2.0);\n * var ellipsoid = viewer.scene.globe.ellipsoid;\n * var result = viewer.camera.pickEllipsoid(center, ellipsoid);\n */\nCamera.prototype.pickEllipsoid = function (windowPosition, ellipsoid, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(windowPosition)) {\n throw new DeveloperError(\"windowPosition is required.\");\n }\n //>>includeEnd('debug');\n\n var canvas = this._scene.canvas;\n if (canvas.clientWidth === 0 || canvas.clientHeight === 0) {\n return undefined;\n }\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n if (this._mode === SceneMode.SCENE3D) {\n result = pickEllipsoid3D(this, windowPosition, ellipsoid, result);\n } else if (this._mode === SceneMode.SCENE2D) {\n result = pickMap2D(this, windowPosition, this._projection, result);\n } else if (this._mode === SceneMode.COLUMBUS_VIEW) {\n result = pickMapColumbusView(\n this,\n windowPosition,\n this._projection,\n result\n );\n } else {\n return undefined;\n }\n\n return result;\n};\n\nvar pickPerspCenter = new Cartesian3();\nvar pickPerspXDir = new Cartesian3();\nvar pickPerspYDir = new Cartesian3();\nfunction getPickRayPerspective(camera, windowPosition, result) {\n var canvas = camera._scene.canvas;\n var width = canvas.clientWidth;\n var height = canvas.clientHeight;\n\n var tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n var tanTheta = camera.frustum.aspectRatio * tanPhi;\n var near = camera.frustum.near;\n\n var x = (2.0 / width) * windowPosition.x - 1.0;\n var y = (2.0 / height) * (height - windowPosition.y) - 1.0;\n\n var position = camera.positionWC;\n Cartesian3.clone(position, result.origin);\n\n var nearCenter = Cartesian3.multiplyByScalar(\n camera.directionWC,\n near,\n pickPerspCenter\n );\n Cartesian3.add(position, nearCenter, nearCenter);\n var xDir = Cartesian3.multiplyByScalar(\n camera.rightWC,\n x * near * tanTheta,\n pickPerspXDir\n );\n var yDir = Cartesian3.multiplyByScalar(\n camera.upWC,\n y * near * tanPhi,\n pickPerspYDir\n );\n var direction = Cartesian3.add(nearCenter, xDir, result.direction);\n Cartesian3.add(direction, yDir, direction);\n Cartesian3.subtract(direction, position, direction);\n Cartesian3.normalize(direction, direction);\n\n return result;\n}\n\nvar scratchDirection = new Cartesian3();\n\nfunction getPickRayOrthographic(camera, windowPosition, result) {\n var canvas = camera._scene.canvas;\n var width = canvas.clientWidth;\n var height = canvas.clientHeight;\n\n var frustum = camera.frustum;\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n var x = (2.0 / width) * windowPosition.x - 1.0;\n x *= (frustum.right - frustum.left) * 0.5;\n var y = (2.0 / height) * (height - windowPosition.y) - 1.0;\n y *= (frustum.top - frustum.bottom) * 0.5;\n\n var origin = result.origin;\n Cartesian3.clone(camera.position, origin);\n\n Cartesian3.multiplyByScalar(camera.right, x, scratchDirection);\n Cartesian3.add(scratchDirection, origin, origin);\n Cartesian3.multiplyByScalar(camera.up, y, scratchDirection);\n Cartesian3.add(scratchDirection, origin, origin);\n\n Cartesian3.clone(camera.directionWC, result.direction);\n\n if (\n camera._mode === SceneMode.COLUMBUS_VIEW ||\n camera._mode === SceneMode.SCENE2D\n ) {\n Cartesian3.fromElements(\n result.origin.z,\n result.origin.x,\n result.origin.y,\n result.origin\n );\n }\n\n return result;\n}\n\n/**\n * Create a ray from the camera position through the pixel at <code>windowPosition</code>\n * in world coordinates.\n *\n * @param {Cartesian2} windowPosition The x and y coordinates of a pixel.\n * @param {Ray} [result] The object onto which to store the result.\n * @returns {Ray} Returns the {@link Cartesian3} position and direction of the ray.\n */\nCamera.prototype.getPickRay = function (windowPosition, result) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(windowPosition)) {\n throw new DeveloperError(\"windowPosition is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Ray();\n }\n\n var frustum = this.frustum;\n if (\n defined(frustum.aspectRatio) &&\n defined(frustum.fov) &&\n defined(frustum.near)\n ) {\n return getPickRayPerspective(this, windowPosition, result);\n }\n\n return getPickRayOrthographic(this, windowPosition, result);\n};\n\nvar scratchToCenter = new Cartesian3();\nvar scratchProj = new Cartesian3();\n\n/**\n * Return the distance from the camera to the front of the bounding sphere.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere in world coordinates.\n * @returns {Number} The distance to the bounding sphere.\n */\nCamera.prototype.distanceToBoundingSphere = function (boundingSphere) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n //>>includeEnd('debug');\n\n var toCenter = Cartesian3.subtract(\n this.positionWC,\n boundingSphere.center,\n scratchToCenter\n );\n var proj = Cartesian3.multiplyByScalar(\n this.directionWC,\n Cartesian3.dot(toCenter, this.directionWC),\n scratchProj\n );\n return Math.max(0.0, Cartesian3.magnitude(proj) - boundingSphere.radius);\n};\n\nvar scratchPixelSize = new Cartesian2();\n\n/**\n * Return the pixel size in meters.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere in world coordinates.\n * @param {Number} drawingBufferWidth The drawing buffer width.\n * @param {Number} drawingBufferHeight The drawing buffer height.\n * @returns {Number} The pixel size in meters.\n */\nCamera.prototype.getPixelSize = function (\n boundingSphere,\n drawingBufferWidth,\n drawingBufferHeight\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n if (!defined(drawingBufferWidth)) {\n throw new DeveloperError(\"drawingBufferWidth is required.\");\n }\n if (!defined(drawingBufferHeight)) {\n throw new DeveloperError(\"drawingBufferHeight is required.\");\n }\n //>>includeEnd('debug');\n\n var distance = this.distanceToBoundingSphere(boundingSphere);\n var pixelSize = this.frustum.getPixelDimensions(\n drawingBufferWidth,\n drawingBufferHeight,\n distance,\n this._scene.pixelRatio,\n scratchPixelSize\n );\n return Math.max(pixelSize.x, pixelSize.y);\n};\n\nfunction createAnimationTemplateCV(\n camera,\n position,\n center,\n maxX,\n maxY,\n duration\n) {\n var newPosition = Cartesian3.clone(position);\n\n if (center.y > maxX) {\n newPosition.y -= center.y - maxX;\n } else if (center.y < -maxX) {\n newPosition.y += -maxX - center.y;\n }\n\n if (center.z > maxY) {\n newPosition.z -= center.z - maxY;\n } else if (center.z < -maxY) {\n newPosition.z += -maxY - center.z;\n }\n\n function updateCV(value) {\n var interp = Cartesian3.lerp(\n position,\n newPosition,\n value.time,\n new Cartesian3()\n );\n camera.worldToCameraCoordinatesPoint(interp, camera.position);\n }\n return {\n easingFunction: EasingFunction.EXPONENTIAL_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n duration: duration,\n update: updateCV,\n };\n}\n\nvar normalScratch = new Cartesian3();\nvar centerScratch = new Cartesian3();\nvar posScratch = new Cartesian3();\nvar scratchCartesian3Subtract = new Cartesian3();\n\nfunction createAnimationCV(camera, duration) {\n var position = camera.position;\n var direction = camera.direction;\n\n var normal = camera.worldToCameraCoordinatesVector(\n Cartesian3.UNIT_X,\n normalScratch\n );\n var scalar =\n -Cartesian3.dot(normal, position) / Cartesian3.dot(normal, direction);\n var center = Cartesian3.add(\n position,\n Cartesian3.multiplyByScalar(direction, scalar, centerScratch),\n centerScratch\n );\n camera.cameraToWorldCoordinatesPoint(center, center);\n\n position = camera.cameraToWorldCoordinatesPoint(camera.position, posScratch);\n\n var tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n var tanTheta = camera.frustum.aspectRatio * tanPhi;\n var distToC = Cartesian3.magnitude(\n Cartesian3.subtract(position, center, scratchCartesian3Subtract)\n );\n var dWidth = tanTheta * distToC;\n var dHeight = tanPhi * distToC;\n\n var mapWidth = camera._maxCoord.x;\n var mapHeight = camera._maxCoord.y;\n\n var maxX = Math.max(dWidth - mapWidth, mapWidth);\n var maxY = Math.max(dHeight - mapHeight, mapHeight);\n\n if (\n position.z < -maxX ||\n position.z > maxX ||\n position.y < -maxY ||\n position.y > maxY\n ) {\n var translateX = center.y < -maxX || center.y > maxX;\n var translateY = center.z < -maxY || center.z > maxY;\n if (translateX || translateY) {\n return createAnimationTemplateCV(\n camera,\n position,\n center,\n maxX,\n maxY,\n duration\n );\n }\n }\n\n return undefined;\n}\n\n/**\n * Create an animation to move the map into view. This method is only valid for 2D and Columbus modes.\n *\n * @param {Number} duration The duration, in seconds, of the animation.\n * @returns {Object} The animation or undefined if the scene mode is 3D or the map is already ion view.\n *\n * @private\n */\nCamera.prototype.createCorrectPositionTween = function (duration) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(duration)) {\n throw new DeveloperError(\"duration is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._mode === SceneMode.COLUMBUS_VIEW) {\n return createAnimationCV(this, duration);\n }\n\n return undefined;\n};\n\nvar scratchFlyToDestination = new Cartesian3();\nvar newOptions = {\n destination: undefined,\n heading: undefined,\n pitch: undefined,\n roll: undefined,\n duration: undefined,\n complete: undefined,\n cancel: undefined,\n endTransform: undefined,\n maximumHeight: undefined,\n easingFunction: undefined,\n};\n\n/**\n * Cancels the current camera flight and leaves the camera at its current location.\n * If no flight is in progress, this this function does nothing.\n */\nCamera.prototype.cancelFlight = function () {\n if (defined(this._currentFlight)) {\n this._currentFlight.cancelTween();\n this._currentFlight = undefined;\n }\n};\n\n/**\n * Completes the current camera flight and moves the camera immediately to its final destination.\n * If no flight is in progress, this this function does nothing.\n */\nCamera.prototype.completeFlight = function () {\n if (defined(this._currentFlight)) {\n this._currentFlight.cancelTween();\n\n var options = {\n destination: undefined,\n orientation: {\n heading: undefined,\n pitch: undefined,\n roll: undefined,\n },\n };\n\n options.destination = newOptions.destination;\n options.orientation.heading = newOptions.heading;\n options.orientation.pitch = newOptions.pitch;\n options.orientation.roll = newOptions.roll;\n\n this.setView(options);\n\n if (defined(this._currentFlight.complete)) {\n this._currentFlight.complete();\n }\n\n this._currentFlight = undefined;\n }\n};\n\n/**\n * Flies the camera from its current position to a new position.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3|Rectangle} options.destination The final position of the camera in WGS84 (world) coordinates or a rectangle that would be visible from a top-down view.\n * @param {Object} [options.orientation] An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point\n * towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive\n * y direction in Columbus view. Orientation is not used in 2D when in infinite scrolling mode.\n * @param {Number} [options.duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight.\n * @param {Camera.FlightCompleteCallback} [options.complete] The function to execute when the flight is complete.\n * @param {Camera.FlightCancelledCallback} [options.cancel] The function to execute if the flight is cancelled.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame the camera will be in when the flight is completed.\n * @param {Number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {Number} [options.pitchAdjustHeight] If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport.\n * @param {Number} [options.flyOverLongitude] There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude.\n * @param {Number} [options.flyOverLongitudeWeight] Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight.\n * @param {Boolean} [options.convert] Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to <code>true</code>.\n * @param {EasingFunction.Callback} [options.easingFunction] Controls how the time is interpolated over the duration of the flight.\n *\n * @exception {DeveloperError} If either direction or up is given, then both are required.\n *\n * @example\n * // 1. Fly to a position with a top-down view\n * viewer.camera.flyTo({\n * destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)\n * });\n *\n * // 2. Fly to a Rectangle with a top-down view\n * viewer.camera.flyTo({\n * destination : Cesium.Rectangle.fromDegrees(west, south, east, north)\n * });\n *\n * // 3. Fly to a position with an orientation using unit vectors.\n * viewer.camera.flyTo({\n * destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n * orientation : {\n * direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),\n * up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)\n * }\n * });\n *\n * // 4. Fly to a position with an orientation using heading, pitch and roll.\n * viewer.camera.flyTo({\n * destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n * orientation : {\n * heading : Cesium.Math.toRadians(175.0),\n * pitch : Cesium.Math.toRadians(-35.0),\n * roll : 0.0\n * }\n * });\n */\nCamera.prototype.flyTo = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var destination = options.destination;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(destination)) {\n throw new DeveloperError(\"destination is required.\");\n }\n //>>includeEnd('debug');\n\n var mode = this._mode;\n if (mode === SceneMode.MORPHING) {\n return;\n }\n\n this.cancelFlight();\n\n var orientation = defaultValue(\n options.orientation,\n defaultValue.EMPTY_OBJECT\n );\n if (defined(orientation.direction)) {\n orientation = directionUpToHeadingPitchRoll(\n this,\n destination,\n orientation,\n scratchSetViewOptions.orientation\n );\n }\n\n if (defined(options.duration) && options.duration <= 0.0) {\n var setViewOptions = scratchSetViewOptions;\n setViewOptions.destination = options.destination;\n setViewOptions.orientation.heading = orientation.heading;\n setViewOptions.orientation.pitch = orientation.pitch;\n setViewOptions.orientation.roll = orientation.roll;\n setViewOptions.convert = options.convert;\n setViewOptions.endTransform = options.endTransform;\n this.setView(setViewOptions);\n if (typeof options.complete === \"function\") {\n options.complete();\n }\n return;\n }\n\n var isRectangle = defined(destination.west);\n if (isRectangle) {\n destination = this.getRectangleCameraCoordinates(\n destination,\n scratchFlyToDestination\n );\n }\n\n var that = this;\n var flightTween;\n\n newOptions.destination = destination;\n newOptions.heading = orientation.heading;\n newOptions.pitch = orientation.pitch;\n newOptions.roll = orientation.roll;\n newOptions.duration = options.duration;\n newOptions.complete = function () {\n if (flightTween === that._currentFlight) {\n that._currentFlight = undefined;\n }\n if (defined(options.complete)) {\n options.complete();\n }\n };\n newOptions.cancel = options.cancel;\n newOptions.endTransform = options.endTransform;\n newOptions.convert = isRectangle ? false : options.convert;\n newOptions.maximumHeight = options.maximumHeight;\n newOptions.pitchAdjustHeight = options.pitchAdjustHeight;\n newOptions.flyOverLongitude = options.flyOverLongitude;\n newOptions.flyOverLongitudeWeight = options.flyOverLongitudeWeight;\n newOptions.easingFunction = options.easingFunction;\n\n var scene = this._scene;\n var tweenOptions = CameraFlightPath.createTween(scene, newOptions);\n // If the camera doesn't actually need to go anywhere, duration\n // will be 0 and we can just complete the current flight.\n if (tweenOptions.duration === 0) {\n if (typeof tweenOptions.complete === \"function\") {\n tweenOptions.complete();\n }\n return;\n }\n flightTween = scene.tweens.add(tweenOptions);\n this._currentFlight = flightTween;\n\n // Save the final destination view information for the PRELOAD_FLIGHT pass.\n var preloadFlightCamera = this._scene.preloadFlightCamera;\n if (this._mode !== SceneMode.SCENE2D) {\n if (!defined(preloadFlightCamera)) {\n preloadFlightCamera = Camera.clone(this);\n }\n preloadFlightCamera.setView({\n destination: destination,\n orientation: orientation,\n });\n\n this._scene.preloadFlightCullingVolume = preloadFlightCamera.frustum.computeCullingVolume(\n preloadFlightCamera.positionWC,\n preloadFlightCamera.directionWC,\n preloadFlightCamera.upWC\n );\n }\n};\n\nfunction distanceToBoundingSphere3D(camera, radius) {\n var frustum = camera.frustum;\n var tanPhi = Math.tan(frustum.fovy * 0.5);\n var tanTheta = frustum.aspectRatio * tanPhi;\n return Math.max(radius / tanTheta, radius / tanPhi);\n}\n\nfunction distanceToBoundingSphere2D(camera, radius) {\n var frustum = camera.frustum;\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n var right, top;\n var ratio = frustum.right / frustum.top;\n var heightRatio = radius * ratio;\n if (radius > heightRatio) {\n right = radius;\n top = right / ratio;\n } else {\n top = radius;\n right = heightRatio;\n }\n\n return Math.max(right, top) * 1.5;\n}\n\nvar MINIMUM_ZOOM = 100.0;\n\nfunction adjustBoundingSphereOffset(camera, boundingSphere, offset) {\n offset = HeadingPitchRange.clone(\n defined(offset) ? offset : Camera.DEFAULT_OFFSET\n );\n\n var minimumZoom =\n camera._scene.screenSpaceCameraController.minimumZoomDistance;\n var maximumZoom =\n camera._scene.screenSpaceCameraController.maximumZoomDistance;\n var range = offset.range;\n if (!defined(range) || range === 0.0) {\n var radius = boundingSphere.radius;\n if (radius === 0.0) {\n offset.range = MINIMUM_ZOOM;\n } else if (\n camera.frustum instanceof OrthographicFrustum ||\n camera._mode === SceneMode.SCENE2D\n ) {\n offset.range = distanceToBoundingSphere2D(camera, radius);\n } else {\n offset.range = distanceToBoundingSphere3D(camera, radius);\n }\n offset.range = CesiumMath.clamp(offset.range, minimumZoom, maximumZoom);\n }\n\n return offset;\n}\n\n/**\n * Sets the camera so that the current view contains the provided bounding sphere.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere to view, in world coordinates.\n * @param {HeadingPitchRange} [offset] The offset from the target in the local east-north-up reference frame centered at the target.\n *\n * @exception {DeveloperError} viewBoundingSphere is not supported while morphing.\n */\nCamera.prototype.viewBoundingSphere = function (boundingSphere, offset) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n\n if (this._mode === SceneMode.MORPHING) {\n throw new DeveloperError(\n \"viewBoundingSphere is not supported while morphing.\"\n );\n }\n //>>includeEnd('debug');\n\n offset = adjustBoundingSphereOffset(this, boundingSphere, offset);\n this.lookAt(boundingSphere.center, offset);\n};\n\nvar scratchflyToBoundingSphereTransform = new Matrix4();\nvar scratchflyToBoundingSphereDestination = new Cartesian3();\nvar scratchflyToBoundingSphereDirection = new Cartesian3();\nvar scratchflyToBoundingSphereUp = new Cartesian3();\nvar scratchflyToBoundingSphereRight = new Cartesian3();\nvar scratchFlyToBoundingSphereCart4 = new Cartesian4();\nvar scratchFlyToBoundingSphereQuaternion = new Quaternion();\nvar scratchFlyToBoundingSphereMatrix3 = new Matrix3();\n\n/**\n * Flies the camera to a location where the current view contains the provided bounding sphere.\n *\n * <p> The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D and Columbus View, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be aligned to local north.</p>\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere to view, in world coordinates.\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight.\n * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target.\n * @param {Camera.FlightCompleteCallback} [options.complete] The function to execute when the flight is complete.\n * @param {Camera.FlightCancelledCallback} [options.cancel] The function to execute if the flight is cancelled.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame the camera will be in when the flight is completed.\n * @param {Number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {Number} [options.pitchAdjustHeight] If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport.\n * @param {Number} [options.flyOverLongitude] There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude.\n * @param {Number} [options.flyOverLongitudeWeight] Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight.\n * @param {EasingFunction.Callback} [options.easingFunction] Controls how the time is interpolated over the duration of the flight.\n */\nCamera.prototype.flyToBoundingSphere = function (boundingSphere, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(boundingSphere)) {\n throw new DeveloperError(\"boundingSphere is required.\");\n }\n //>>includeEnd('debug');\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var scene2D =\n this._mode === SceneMode.SCENE2D || this._mode === SceneMode.COLUMBUS_VIEW;\n this._setTransform(Matrix4.IDENTITY);\n var offset = adjustBoundingSphereOffset(this, boundingSphere, options.offset);\n\n var position;\n if (scene2D) {\n position = Cartesian3.multiplyByScalar(\n Cartesian3.UNIT_Z,\n offset.range,\n scratchflyToBoundingSphereDestination\n );\n } else {\n position = offsetFromHeadingPitchRange(\n offset.heading,\n offset.pitch,\n offset.range\n );\n }\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n boundingSphere.center,\n Ellipsoid.WGS84,\n scratchflyToBoundingSphereTransform\n );\n Matrix4.multiplyByPoint(transform, position, position);\n\n var direction;\n var up;\n\n if (!scene2D) {\n direction = Cartesian3.subtract(\n boundingSphere.center,\n position,\n scratchflyToBoundingSphereDirection\n );\n Cartesian3.normalize(direction, direction);\n\n up = Matrix4.multiplyByPointAsVector(\n transform,\n Cartesian3.UNIT_Z,\n scratchflyToBoundingSphereUp\n );\n if (1.0 - Math.abs(Cartesian3.dot(direction, up)) < CesiumMath.EPSILON6) {\n var rotateQuat = Quaternion.fromAxisAngle(\n direction,\n offset.heading,\n scratchFlyToBoundingSphereQuaternion\n );\n var rotation = Matrix3.fromQuaternion(\n rotateQuat,\n scratchFlyToBoundingSphereMatrix3\n );\n\n Cartesian3.fromCartesian4(\n Matrix4.getColumn(transform, 1, scratchFlyToBoundingSphereCart4),\n up\n );\n Matrix3.multiplyByVector(rotation, up, up);\n }\n\n var right = Cartesian3.cross(\n direction,\n up,\n scratchflyToBoundingSphereRight\n );\n Cartesian3.cross(right, direction, up);\n Cartesian3.normalize(up, up);\n }\n\n this.flyTo({\n destination: position,\n orientation: {\n direction: direction,\n up: up,\n },\n duration: options.duration,\n complete: options.complete,\n cancel: options.cancel,\n endTransform: options.endTransform,\n maximumHeight: options.maximumHeight,\n easingFunction: options.easingFunction,\n flyOverLongitude: options.flyOverLongitude,\n flyOverLongitudeWeight: options.flyOverLongitudeWeight,\n pitchAdjustHeight: options.pitchAdjustHeight,\n });\n};\n\nvar scratchCartesian3_1 = new Cartesian3();\nvar scratchCartesian3_2 = new Cartesian3();\nvar scratchCartesian3_3 = new Cartesian3();\nvar scratchCartesian3_4 = new Cartesian3();\nvar horizonPoints = [\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n];\n\nfunction computeHorizonQuad(camera, ellipsoid) {\n var radii = ellipsoid.radii;\n var p = camera.positionWC;\n\n // Find the corresponding position in the scaled space of the ellipsoid.\n var q = Cartesian3.multiplyComponents(\n ellipsoid.oneOverRadii,\n p,\n scratchCartesian3_1\n );\n\n var qMagnitude = Cartesian3.magnitude(q);\n var qUnit = Cartesian3.normalize(q, scratchCartesian3_2);\n\n // Determine the east and north directions at q.\n var eUnit;\n var nUnit;\n if (\n Cartesian3.equalsEpsilon(qUnit, Cartesian3.UNIT_Z, CesiumMath.EPSILON10)\n ) {\n eUnit = new Cartesian3(0, 1, 0);\n nUnit = new Cartesian3(0, 0, 1);\n } else {\n eUnit = Cartesian3.normalize(\n Cartesian3.cross(Cartesian3.UNIT_Z, qUnit, scratchCartesian3_3),\n scratchCartesian3_3\n );\n nUnit = Cartesian3.normalize(\n Cartesian3.cross(qUnit, eUnit, scratchCartesian3_4),\n scratchCartesian3_4\n );\n }\n\n // Determine the radius of the 'limb' of the ellipsoid.\n var wMagnitude = Math.sqrt(Cartesian3.magnitudeSquared(q) - 1.0);\n\n // Compute the center and offsets.\n var center = Cartesian3.multiplyByScalar(\n qUnit,\n 1.0 / qMagnitude,\n scratchCartesian3_1\n );\n var scalar = wMagnitude / qMagnitude;\n var eastOffset = Cartesian3.multiplyByScalar(\n eUnit,\n scalar,\n scratchCartesian3_2\n );\n var northOffset = Cartesian3.multiplyByScalar(\n nUnit,\n scalar,\n scratchCartesian3_3\n );\n\n // A conservative measure for the longitudes would be to use the min/max longitudes of the bounding frustum.\n var upperLeft = Cartesian3.add(center, northOffset, horizonPoints[0]);\n Cartesian3.subtract(upperLeft, eastOffset, upperLeft);\n Cartesian3.multiplyComponents(radii, upperLeft, upperLeft);\n\n var lowerLeft = Cartesian3.subtract(center, northOffset, horizonPoints[1]);\n Cartesian3.subtract(lowerLeft, eastOffset, lowerLeft);\n Cartesian3.multiplyComponents(radii, lowerLeft, lowerLeft);\n\n var lowerRight = Cartesian3.subtract(center, northOffset, horizonPoints[2]);\n Cartesian3.add(lowerRight, eastOffset, lowerRight);\n Cartesian3.multiplyComponents(radii, lowerRight, lowerRight);\n\n var upperRight = Cartesian3.add(center, northOffset, horizonPoints[3]);\n Cartesian3.add(upperRight, eastOffset, upperRight);\n Cartesian3.multiplyComponents(radii, upperRight, upperRight);\n\n return horizonPoints;\n}\n\nvar scratchPickCartesian2 = new Cartesian2();\nvar scratchRectCartesian = new Cartesian3();\nvar cartoArray = [\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n new Cartographic(),\n];\nfunction addToResult(x, y, index, camera, ellipsoid, computedHorizonQuad) {\n scratchPickCartesian2.x = x;\n scratchPickCartesian2.y = y;\n var r = camera.pickEllipsoid(\n scratchPickCartesian2,\n ellipsoid,\n scratchRectCartesian\n );\n if (defined(r)) {\n cartoArray[index] = ellipsoid.cartesianToCartographic(r, cartoArray[index]);\n return 1;\n }\n cartoArray[index] = ellipsoid.cartesianToCartographic(\n computedHorizonQuad[index],\n cartoArray[index]\n );\n return 0;\n}\n/**\n * Computes the approximate visible rectangle on the ellipsoid.\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid that you want to know the visible region.\n * @param {Rectangle} [result] The rectangle in which to store the result\n *\n * @returns {Rectangle|undefined} The visible rectangle or undefined if the ellipsoid isn't visible at all.\n */\nCamera.prototype.computeViewRectangle = function (ellipsoid, result) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n var cullingVolume = this.frustum.computeCullingVolume(\n this.positionWC,\n this.directionWC,\n this.upWC\n );\n var boundingSphere = new BoundingSphere(\n Cartesian3.ZERO,\n ellipsoid.maximumRadius\n );\n var visibility = cullingVolume.computeVisibility(boundingSphere);\n if (visibility === Intersect.OUTSIDE) {\n return undefined;\n }\n\n var canvas = this._scene.canvas;\n var width = canvas.clientWidth;\n var height = canvas.clientHeight;\n\n var successfulPickCount = 0;\n\n var computedHorizonQuad = computeHorizonQuad(this, ellipsoid);\n\n successfulPickCount += addToResult(\n 0,\n 0,\n 0,\n this,\n ellipsoid,\n computedHorizonQuad\n );\n successfulPickCount += addToResult(\n 0,\n height,\n 1,\n this,\n ellipsoid,\n computedHorizonQuad\n );\n successfulPickCount += addToResult(\n width,\n height,\n 2,\n this,\n ellipsoid,\n computedHorizonQuad\n );\n successfulPickCount += addToResult(\n width,\n 0,\n 3,\n this,\n ellipsoid,\n computedHorizonQuad\n );\n\n if (successfulPickCount < 2) {\n // If we have space non-globe in 3 or 4 corners then return the whole globe\n return Rectangle.MAX_VALUE;\n }\n\n result = Rectangle.fromCartographicArray(cartoArray, result);\n\n // Detect if we go over the poles\n var distance = 0;\n var lastLon = cartoArray[3].longitude;\n for (var i = 0; i < 4; ++i) {\n var lon = cartoArray[i].longitude;\n var diff = Math.abs(lon - lastLon);\n if (diff > CesiumMath.PI) {\n // Crossed the dateline\n distance += CesiumMath.TWO_PI - diff;\n } else {\n distance += diff;\n }\n\n lastLon = lon;\n }\n\n // We are over one of the poles so adjust the rectangle accordingly\n if (\n CesiumMath.equalsEpsilon(\n Math.abs(distance),\n CesiumMath.TWO_PI,\n CesiumMath.EPSILON9\n )\n ) {\n result.west = -CesiumMath.PI;\n result.east = CesiumMath.PI;\n if (cartoArray[0].latitude >= 0.0) {\n result.north = CesiumMath.PI_OVER_TWO;\n } else {\n result.south = -CesiumMath.PI_OVER_TWO;\n }\n }\n\n return result;\n};\n\n/**\n * Switches the frustum/projection to perspective.\n *\n * This function is a no-op in 2D which must always be orthographic.\n */\nCamera.prototype.switchToPerspectiveFrustum = function () {\n if (\n this._mode === SceneMode.SCENE2D ||\n this.frustum instanceof PerspectiveFrustum\n ) {\n return;\n }\n\n var scene = this._scene;\n this.frustum = new PerspectiveFrustum();\n this.frustum.aspectRatio =\n scene.drawingBufferWidth / scene.drawingBufferHeight;\n this.frustum.fov = CesiumMath.toRadians(60.0);\n};\n\n/**\n * Switches the frustum/projection to orthographic.\n *\n * This function is a no-op in 2D which will always be orthographic.\n */\nCamera.prototype.switchToOrthographicFrustum = function () {\n if (\n this._mode === SceneMode.SCENE2D ||\n this.frustum instanceof OrthographicFrustum\n ) {\n return;\n }\n\n // This must be called before changing the frustum because it uses the previous\n // frustum to reconstruct the world space position from the depth buffer.\n var frustumWidth = calculateOrthographicFrustumWidth(this);\n\n var scene = this._scene;\n this.frustum = new OrthographicFrustum();\n this.frustum.aspectRatio =\n scene.drawingBufferWidth / scene.drawingBufferHeight;\n this.frustum.width = frustumWidth;\n};\n\n/**\n * @private\n */\nCamera.clone = function (camera, result) {\n if (!defined(result)) {\n result = new Camera(camera._scene);\n }\n\n Cartesian3.clone(camera.position, result.position);\n Cartesian3.clone(camera.direction, result.direction);\n Cartesian3.clone(camera.up, result.up);\n Cartesian3.clone(camera.right, result.right);\n Matrix4.clone(camera._transform, result.transform);\n result._transformChanged = true;\n result.frustum = camera.frustum.clone();\n\n return result;\n};\n\n/**\n * A function that will execute when a flight completes.\n * @callback Camera.FlightCompleteCallback\n */\n\n/**\n * A function that will execute when a flight is cancelled.\n * @callback Camera.FlightCancelledCallback\n */\nexport default Camera;\n","/**\n * Enumerates the available input for interacting with the camera.\n *\n * @enum {Number}\n */\nvar CameraEventType = {\n /**\n * A left mouse button press followed by moving the mouse and releasing the button.\n *\n * @type {Number}\n * @constant\n */\n LEFT_DRAG: 0,\n\n /**\n * A right mouse button press followed by moving the mouse and releasing the button.\n *\n * @type {Number}\n * @constant\n */\n RIGHT_DRAG: 1,\n\n /**\n * A middle mouse button press followed by moving the mouse and releasing the button.\n *\n * @type {Number}\n * @constant\n */\n MIDDLE_DRAG: 2,\n\n /**\n * Scrolling the middle mouse button.\n *\n * @type {Number}\n * @constant\n */\n WHEEL: 3,\n\n /**\n * A two-finger touch on a touch surface.\n *\n * @type {Number}\n * @constant\n */\n PINCH: 4,\n};\nexport default Object.freeze(CameraEventType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport KeyboardEventModifier from \"../Core/KeyboardEventModifier.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport ScreenSpaceEventHandler from \"../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../Core/ScreenSpaceEventType.js\";\nimport CameraEventType from \"./CameraEventType.js\";\n\nfunction getKey(type, modifier) {\n var key = type;\n if (defined(modifier)) {\n key += \"+\" + modifier;\n }\n return key;\n}\n\nfunction clonePinchMovement(pinchMovement, result) {\n Cartesian2.clone(\n pinchMovement.distance.startPosition,\n result.distance.startPosition\n );\n Cartesian2.clone(\n pinchMovement.distance.endPosition,\n result.distance.endPosition\n );\n\n Cartesian2.clone(\n pinchMovement.angleAndHeight.startPosition,\n result.angleAndHeight.startPosition\n );\n Cartesian2.clone(\n pinchMovement.angleAndHeight.endPosition,\n result.angleAndHeight.endPosition\n );\n}\n\nfunction listenToPinch(aggregator, modifier, canvas) {\n var key = getKey(CameraEventType.PINCH, modifier);\n\n var update = aggregator._update;\n var isDown = aggregator._isDown;\n var eventStartPosition = aggregator._eventStartPosition;\n var pressTime = aggregator._pressTime;\n var releaseTime = aggregator._releaseTime;\n\n update[key] = true;\n isDown[key] = false;\n eventStartPosition[key] = new Cartesian2();\n\n var movement = aggregator._movement[key];\n if (!defined(movement)) {\n movement = aggregator._movement[key] = {};\n }\n\n movement.distance = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n };\n movement.angleAndHeight = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n };\n movement.prevAngle = 0.0;\n\n aggregator._eventHandler.setInputAction(\n function (event) {\n aggregator._buttonsDown++;\n isDown[key] = true;\n pressTime[key] = new Date();\n // Compute center position and store as start point.\n Cartesian2.lerp(\n event.position1,\n event.position2,\n 0.5,\n eventStartPosition[key]\n );\n },\n ScreenSpaceEventType.PINCH_START,\n modifier\n );\n\n aggregator._eventHandler.setInputAction(\n function () {\n aggregator._buttonsDown = Math.max(aggregator._buttonsDown - 1, 0);\n isDown[key] = false;\n releaseTime[key] = new Date();\n },\n ScreenSpaceEventType.PINCH_END,\n modifier\n );\n\n aggregator._eventHandler.setInputAction(\n function (mouseMovement) {\n if (isDown[key]) {\n // Aggregate several input events into a single animation frame.\n if (!update[key]) {\n Cartesian2.clone(\n mouseMovement.distance.endPosition,\n movement.distance.endPosition\n );\n Cartesian2.clone(\n mouseMovement.angleAndHeight.endPosition,\n movement.angleAndHeight.endPosition\n );\n } else {\n clonePinchMovement(mouseMovement, movement);\n update[key] = false;\n movement.prevAngle = movement.angleAndHeight.startPosition.x;\n }\n // Make sure our aggregation of angles does not \"flip\" over 360 degrees.\n var angle = movement.angleAndHeight.endPosition.x;\n var prevAngle = movement.prevAngle;\n var TwoPI = Math.PI * 2;\n while (angle >= prevAngle + Math.PI) {\n angle -= TwoPI;\n }\n while (angle < prevAngle - Math.PI) {\n angle += TwoPI;\n }\n movement.angleAndHeight.endPosition.x =\n (-angle * canvas.clientWidth) / 12;\n movement.angleAndHeight.startPosition.x =\n (-prevAngle * canvas.clientWidth) / 12;\n }\n },\n ScreenSpaceEventType.PINCH_MOVE,\n modifier\n );\n}\n\nfunction listenToWheel(aggregator, modifier) {\n var key = getKey(CameraEventType.WHEEL, modifier);\n\n var update = aggregator._update;\n update[key] = true;\n\n var movement = aggregator._movement[key];\n if (!defined(movement)) {\n movement = aggregator._movement[key] = {};\n }\n\n movement.startPosition = new Cartesian2();\n movement.endPosition = new Cartesian2();\n\n aggregator._eventHandler.setInputAction(\n function (delta) {\n // TODO: magic numbers\n var arcLength = 15.0 * CesiumMath.toRadians(delta);\n if (!update[key]) {\n movement.endPosition.y = movement.endPosition.y + arcLength;\n } else {\n Cartesian2.clone(Cartesian2.ZERO, movement.startPosition);\n movement.endPosition.x = 0.0;\n movement.endPosition.y = arcLength;\n update[key] = false;\n }\n },\n ScreenSpaceEventType.WHEEL,\n modifier\n );\n}\n\nfunction listenMouseButtonDownUp(aggregator, modifier, type) {\n var key = getKey(type, modifier);\n\n var isDown = aggregator._isDown;\n var eventStartPosition = aggregator._eventStartPosition;\n var pressTime = aggregator._pressTime;\n var releaseTime = aggregator._releaseTime;\n\n isDown[key] = false;\n eventStartPosition[key] = new Cartesian2();\n\n var lastMovement = aggregator._lastMovement[key];\n if (!defined(lastMovement)) {\n lastMovement = aggregator._lastMovement[key] = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n valid: false,\n };\n }\n\n var down;\n var up;\n if (type === CameraEventType.LEFT_DRAG) {\n down = ScreenSpaceEventType.LEFT_DOWN;\n up = ScreenSpaceEventType.LEFT_UP;\n } else if (type === CameraEventType.RIGHT_DRAG) {\n down = ScreenSpaceEventType.RIGHT_DOWN;\n up = ScreenSpaceEventType.RIGHT_UP;\n } else if (type === CameraEventType.MIDDLE_DRAG) {\n down = ScreenSpaceEventType.MIDDLE_DOWN;\n up = ScreenSpaceEventType.MIDDLE_UP;\n }\n\n aggregator._eventHandler.setInputAction(\n function (event) {\n aggregator._buttonsDown++;\n lastMovement.valid = false;\n isDown[key] = true;\n pressTime[key] = new Date();\n Cartesian2.clone(event.position, eventStartPosition[key]);\n },\n down,\n modifier\n );\n\n aggregator._eventHandler.setInputAction(\n function () {\n aggregator._buttonsDown = Math.max(aggregator._buttonsDown - 1, 0);\n isDown[key] = false;\n releaseTime[key] = new Date();\n },\n up,\n modifier\n );\n}\n\nfunction cloneMouseMovement(mouseMovement, result) {\n Cartesian2.clone(mouseMovement.startPosition, result.startPosition);\n Cartesian2.clone(mouseMovement.endPosition, result.endPosition);\n}\n\nfunction listenMouseMove(aggregator, modifier) {\n var update = aggregator._update;\n var movement = aggregator._movement;\n var lastMovement = aggregator._lastMovement;\n var isDown = aggregator._isDown;\n\n for (var typeName in CameraEventType) {\n if (CameraEventType.hasOwnProperty(typeName)) {\n var type = CameraEventType[typeName];\n if (defined(type)) {\n var key = getKey(type, modifier);\n update[key] = true;\n\n if (!defined(aggregator._lastMovement[key])) {\n aggregator._lastMovement[key] = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n valid: false,\n };\n }\n\n if (!defined(aggregator._movement[key])) {\n aggregator._movement[key] = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n };\n }\n }\n }\n }\n\n aggregator._eventHandler.setInputAction(\n function (mouseMovement) {\n for (var typeName in CameraEventType) {\n if (CameraEventType.hasOwnProperty(typeName)) {\n var type = CameraEventType[typeName];\n if (defined(type)) {\n var key = getKey(type, modifier);\n if (isDown[key]) {\n if (!update[key]) {\n Cartesian2.clone(\n mouseMovement.endPosition,\n movement[key].endPosition\n );\n } else {\n cloneMouseMovement(movement[key], lastMovement[key]);\n lastMovement[key].valid = true;\n cloneMouseMovement(mouseMovement, movement[key]);\n update[key] = false;\n }\n }\n }\n }\n }\n\n Cartesian2.clone(\n mouseMovement.endPosition,\n aggregator._currentMousePosition\n );\n },\n ScreenSpaceEventType.MOUSE_MOVE,\n modifier\n );\n}\n\n/**\n * Aggregates input events. For example, suppose the following inputs are received between frames:\n * left mouse button down, mouse move, mouse move, left mouse button up. These events will be aggregated into\n * one event with a start and end position of the mouse.\n *\n * @alias CameraEventAggregator\n * @constructor\n *\n * @param {HTMLCanvasElement} [canvas=document] The element to handle events for.\n *\n * @see ScreenSpaceEventHandler\n */\nfunction CameraEventAggregator(canvas) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(canvas)) {\n throw new DeveloperError(\"canvas is required.\");\n }\n //>>includeEnd('debug');\n\n this._eventHandler = new ScreenSpaceEventHandler(canvas);\n\n this._update = {};\n this._movement = {};\n this._lastMovement = {};\n this._isDown = {};\n this._eventStartPosition = {};\n this._pressTime = {};\n this._releaseTime = {};\n\n this._buttonsDown = 0;\n\n this._currentMousePosition = new Cartesian2();\n\n listenToWheel(this, undefined);\n listenToPinch(this, undefined, canvas);\n listenMouseButtonDownUp(this, undefined, CameraEventType.LEFT_DRAG);\n listenMouseButtonDownUp(this, undefined, CameraEventType.RIGHT_DRAG);\n listenMouseButtonDownUp(this, undefined, CameraEventType.MIDDLE_DRAG);\n listenMouseMove(this, undefined);\n\n for (var modifierName in KeyboardEventModifier) {\n if (KeyboardEventModifier.hasOwnProperty(modifierName)) {\n var modifier = KeyboardEventModifier[modifierName];\n if (defined(modifier)) {\n listenToWheel(this, modifier);\n listenToPinch(this, modifier, canvas);\n listenMouseButtonDownUp(this, modifier, CameraEventType.LEFT_DRAG);\n listenMouseButtonDownUp(this, modifier, CameraEventType.RIGHT_DRAG);\n listenMouseButtonDownUp(this, modifier, CameraEventType.MIDDLE_DRAG);\n listenMouseMove(this, modifier);\n }\n }\n }\n}\n\nObject.defineProperties(CameraEventAggregator.prototype, {\n /**\n * Gets the current mouse position.\n * @memberof CameraEventAggregator.prototype\n * @type {Cartesian2}\n */\n currentMousePosition: {\n get: function () {\n return this._currentMousePosition;\n },\n },\n\n /**\n * Gets whether any mouse button is down, a touch has started, or the wheel has been moved.\n * @memberof CameraEventAggregator.prototype\n * @type {Boolean}\n */\n anyButtonDown: {\n get: function () {\n var wheelMoved =\n !this._update[getKey(CameraEventType.WHEEL)] ||\n !this._update[\n getKey(CameraEventType.WHEEL, KeyboardEventModifier.SHIFT)\n ] ||\n !this._update[\n getKey(CameraEventType.WHEEL, KeyboardEventModifier.CTRL)\n ] ||\n !this._update[getKey(CameraEventType.WHEEL, KeyboardEventModifier.ALT)];\n return this._buttonsDown > 0 || wheelMoved;\n },\n },\n});\n\n/**\n * Gets if a mouse button down or touch has started and has been moved.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Boolean} Returns <code>true</code> if a mouse button down or touch has started and has been moved; otherwise, <code>false</code>\n */\nCameraEventAggregator.prototype.isMoving = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n return !this._update[key];\n};\n\n/**\n * Gets the aggregated start and end position of the current event.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Object} An object with two {@link Cartesian2} properties: <code>startPosition</code> and <code>endPosition</code>.\n */\nCameraEventAggregator.prototype.getMovement = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n var movement = this._movement[key];\n return movement;\n};\n\n/**\n * Gets the start and end position of the last move event (not the aggregated event).\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Object|undefined} An object with two {@link Cartesian2} properties: <code>startPosition</code> and <code>endPosition</code> or <code>undefined</code>.\n */\nCameraEventAggregator.prototype.getLastMovement = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n var lastMovement = this._lastMovement[key];\n if (lastMovement.valid) {\n return lastMovement;\n }\n\n return undefined;\n};\n\n/**\n * Gets whether the mouse button is down or a touch has started.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Boolean} Whether the mouse button is down or a touch has started.\n */\nCameraEventAggregator.prototype.isButtonDown = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n return this._isDown[key];\n};\n\n/**\n * Gets the mouse position that started the aggregation.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Cartesian2} The mouse position.\n */\nCameraEventAggregator.prototype.getStartMousePosition = function (\n type,\n modifier\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n if (type === CameraEventType.WHEEL) {\n return this._currentMousePosition;\n }\n\n var key = getKey(type, modifier);\n return this._eventStartPosition[key];\n};\n\n/**\n * Gets the time the button was pressed or the touch was started.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Date} The time the button was pressed or the touch was started.\n */\nCameraEventAggregator.prototype.getButtonPressTime = function (type, modifier) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n return this._pressTime[key];\n};\n\n/**\n * Gets the time the button was released or the touch was ended.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Date} The time the button was released or the touch was ended.\n */\nCameraEventAggregator.prototype.getButtonReleaseTime = function (\n type,\n modifier\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n var key = getKey(type, modifier);\n return this._releaseTime[key];\n};\n\n/**\n * Signals that all of the events have been handled and the aggregator should be reset to handle new events.\n */\nCameraEventAggregator.prototype.reset = function () {\n for (var name in this._update) {\n if (this._update.hasOwnProperty(name)) {\n this._update[name] = true;\n }\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see CameraEventAggregator#destroy\n */\nCameraEventAggregator.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes mouse listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * handler = handler && handler.destroy();\n *\n * @see CameraEventAggregator#isDestroyed\n */\nCameraEventAggregator.prototype.destroy = function () {\n this._eventHandler = this._eventHandler && this._eventHandler.destroy();\n return destroyObject(this);\n};\nexport default CameraEventAggregator;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * The content of a tile in a {@link Cesium3DTileset}.\n * <p>\n * Derived classes of this interface provide access to individual features in the tile.\n * Access derived objects through {@link Cesium3DTile#content}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias Cesium3DTileContent\n * @constructor\n */\nfunction Cesium3DTileContent(tileset, tile, url, arrayBuffer, byteOffset) {\n /**\n * Gets or sets if any feature's property changed. Used to\n * optimized applying a style when a feature's property changed.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @type {Boolean}\n *\n * @private\n */\n this.featurePropertiesDirty = false;\n}\n\nObject.defineProperties(Cesium3DTileContent.prototype, {\n /**\n * Gets the number of features in the tile.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n featuresLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the number of points in the tile.\n * <p>\n * Only applicable for tiles with Point Cloud content. This is different than {@link Cesium3DTileContent#featuresLength} which\n * equals the number of groups of points as distinguished by the <code>BATCH_ID</code> feature table semantic.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/PointCloud#batched-points}\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n pointsLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the number of triangles in the tile.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n trianglesLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the tile's geometry memory in bytes.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n geometryByteLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the tile's texture memory in bytes.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n texturesByteLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the amount of memory used by the batch table textures, in bytes.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Number}\n * @readonly\n */\n batchTableByteLength: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the array of {@link Cesium3DTileContent} objects that represent the\n * content a composite's inner tiles, which can also be composites.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Composite}\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Array}\n * @readonly\n */\n innerContents: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the promise that will be resolved when the tile's content is ready to render.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Promise.<Cesium3DTileContent>}\n * @readonly\n */\n readyPromise: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the tileset for this tile.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Cesium3DTileset}\n * @readonly\n */\n tileset: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the tile containing this content.\n *\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {Cesium3DTile}\n * @readonly\n */\n tile: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the url of the tile's content.\n * @memberof Cesium3DTileContent.prototype\n *\n * @type {String}\n * @readonly\n */\n url: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n\n /**\n * Gets the batch table for this content.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @type {Cesium3DTileBatchTable}\n * @readonly\n *\n * @private\n */\n batchTable: {\n // eslint-disable-next-line getter-return\n get: function () {\n DeveloperError.throwInstantiationError();\n },\n },\n});\n\n/**\n * Determines if the tile's batch table has a property. If it does, each feature in\n * the tile will have the property.\n *\n * @param {Number} batchId The batchId for the feature.\n * @param {String} name The case-sensitive name of the property.\n * @returns {Boolean} <code>true</code> if the property exists; otherwise, <code>false</code>.\n */\nCesium3DTileContent.prototype.hasProperty = function (batchId, name) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns the {@link Cesium3DTileFeature} object for the feature with the\n * given <code>batchId</code>. This object is used to get and modify the\n * feature's properties.\n * <p>\n * Features in a tile are ordered by <code>batchId</code>, an index used to retrieve their metadata from the batch table.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/BatchTable}.\n *\n * @param {Number} batchId The batchId for the feature.\n * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n *\n * @exception {DeveloperError} batchId must be between zero and {@link Cesium3DTileContent#featuresLength} - 1.\n */\nCesium3DTileContent.prototype.getFeature = function (batchId) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Called when {@link Cesium3DTileset#debugColorizeTiles} changes.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Boolean} enabled Whether to enable or disable debug settings.\n * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n\n * @private\n */\nCesium3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Apply a style to the content\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Cesium3DTileStyle} style The style.\n *\n * @private\n */\nCesium3DTileContent.prototype.applyStyle = function (style) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Called by the tile during tileset traversal to get the draw commands needed to render this content.\n * When the tile's content is in the PROCESSING state, this creates WebGL resources to ultimately\n * move to the READY state.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Cesium3DTileset} tileset The tileset containing this tile.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nCesium3DTileContent.prototype.update = function (tileset, frameState) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Cesium3DTileContent#destroy\n *\n * @private\n */\nCesium3DTileContent.prototype.isDestroyed = function () {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * content = content && content.destroy();\n *\n * @see Cesium3DTileContent#isDestroyed\n *\n * @private\n */\nCesium3DTileContent.prototype.destroy = function () {\n DeveloperError.throwInstantiationError();\n};\nexport default Cesium3DTileContent;\n","import Check from \"../Core/Check.js\";\n\n/**\n * The state for a 3D Tiles update pass.\n *\n * @private\n * @constructor\n */\nfunction Cesium3DTilePassState(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.number(\"options.pass\", options.pass);\n //>>includeEnd('debug');\n\n /**\n * The pass.\n *\n * @type {Cesium3DTilePass}\n */\n this.pass = options.pass;\n\n /**\n * An array of rendering commands to use instead of {@link FrameState.commandList} for the current pass.\n *\n * @type {DrawCommand[]}\n */\n this.commandList = options.commandList;\n\n /**\n * A camera to use instead of {@link FrameState.camera} for the current pass.\n *\n * @type {Camera}\n */\n this.camera = options.camera;\n\n /**\n * A culling volume to use instead of {@link FrameState.cullingVolume} for the current pass.\n *\n * @type {CullingVolume}\n */\n this.cullingVolume = options.cullingVolume;\n\n /**\n * A read-only property that indicates whether the pass is ready, i.e. all tiles needed by the pass are loaded.\n *\n * @type {Boolean}\n * @readonly\n * @default false\n */\n this.ready = false;\n}\nexport default Cesium3DTilePassState;\n","import clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport Expression from \"./Expression.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates a conditions expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * Implements the {@link StyleExpression} interface.\n * </p>\n *\n * @alias ConditionsExpression\n * @constructor\n *\n * @param {Object} [conditionsExpression] The conditions expression defined using the 3D Tiles Styling language.\n * @param {Object} [defines] Defines in the style.\n *\n * @example\n * var expression = new Cesium.ConditionsExpression({\n * conditions : [\n * ['${Area} > 10, 'color(\"#FF0000\")'],\n * ['${id} !== \"1\"', 'color(\"#00FF00\")'],\n * ['true', 'color(\"#FFFFFF\")']\n * ]\n * });\n * expression.evaluateColor(feature, result); // returns a Cesium.Color object\n */\nfunction ConditionsExpression(conditionsExpression, defines) {\n this._conditionsExpression = clone(conditionsExpression, true);\n this._conditions = conditionsExpression.conditions;\n this._runtimeConditions = undefined;\n\n setRuntime(this, defines);\n}\n\nObject.defineProperties(ConditionsExpression.prototype, {\n /**\n * Gets the conditions expression defined in the 3D Tiles Styling language.\n *\n * @memberof ConditionsExpression.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @default undefined\n */\n conditionsExpression: {\n get: function () {\n return this._conditionsExpression;\n },\n },\n});\n\nfunction Statement(condition, expression) {\n this.condition = condition;\n this.expression = expression;\n}\n\nfunction setRuntime(expression, defines) {\n var runtimeConditions = [];\n var conditions = expression._conditions;\n if (!defined(conditions)) {\n return;\n }\n var length = conditions.length;\n for (var i = 0; i < length; ++i) {\n var statement = conditions[i];\n var cond = String(statement[0]);\n var condExpression = String(statement[1]);\n runtimeConditions.push(\n new Statement(\n new Expression(cond, defines),\n new Expression(condExpression, defines)\n )\n );\n }\n expression._runtimeConditions = runtimeConditions;\n}\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Object} [result] The object onto which to store the result.\n * @returns {Boolean|Number|String|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nConditionsExpression.prototype.evaluate = function (feature, result) {\n var conditions = this._runtimeConditions;\n if (!defined(conditions)) {\n return undefined;\n }\n var length = conditions.length;\n for (var i = 0; i < length; ++i) {\n var statement = conditions[i];\n if (statement.condition.evaluate(feature)) {\n return statement.expression.evaluate(feature, result);\n }\n }\n};\n\n/**\n * Evaluates the result of a Color expression, using the values defined by a feature.\n * <p>\n * This is equivalent to {@link ConditionsExpression#evaluate} but always returns a {@link Color} object.\n * </p>\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nConditionsExpression.prototype.evaluateColor = function (feature, result) {\n var conditions = this._runtimeConditions;\n if (!defined(conditions)) {\n return undefined;\n }\n var length = conditions.length;\n for (var i = 0; i < length; ++i) {\n var statement = conditions[i];\n if (statement.condition.evaluate(feature)) {\n return statement.expression.evaluateColor(feature, result);\n }\n }\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {String} returnType The return type of the generated function.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nConditionsExpression.prototype.getShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState,\n returnType\n) {\n var conditions = this._runtimeConditions;\n if (!defined(conditions) || conditions.length === 0) {\n return undefined;\n }\n\n var shaderFunction = \"\";\n var length = conditions.length;\n for (var i = 0; i < length; ++i) {\n var statement = conditions[i];\n\n var condition = statement.condition.getShaderExpression(\n propertyNameMap,\n shaderState\n );\n var expression = statement.expression.getShaderExpression(\n propertyNameMap,\n shaderState\n );\n\n // Build the if/else chain from the list of conditions\n shaderFunction +=\n \" \" +\n (i === 0 ? \"if\" : \"else if\") +\n \" (\" +\n condition +\n \") \\n\" +\n \" { \\n\" +\n \" return \" +\n expression +\n \"; \\n\" +\n \" } \\n\";\n }\n\n shaderFunction =\n returnType +\n \" \" +\n functionName +\n \"() \\n\" +\n \"{ \\n\" +\n shaderFunction +\n \" return \" +\n returnType +\n \"(1.0); \\n\" + // Return a default value if no conditions are met\n \"} \\n\";\n\n return shaderFunction;\n};\nexport default ConditionsExpression;\n","import clone from \"../Core/clone.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ConditionsExpression from \"./ConditionsExpression.js\";\nimport Expression from \"./Expression.js\";\n\n/**\n * A style that is applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates an expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}.\n * </p>\n *\n * @alias Cesium3DTileStyle\n * @constructor\n *\n * @param {Resource|String|Object} [style] The url of a style or an object defining a style.\n *\n * @example\n * tileset.style = new Cesium.Cesium3DTileStyle({\n * color : {\n * conditions : [\n * ['${Height} >= 100', 'color(\"purple\", 0.5)'],\n * ['${Height} >= 50', 'color(\"red\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * },\n * show : '${Height} > 0',\n * meta : {\n * description : '\"Building id ${id} has height ${Height}.\"'\n * }\n * });\n *\n * @example\n * tileset.style = new Cesium.Cesium3DTileStyle({\n * color : 'vec4(${Temperature})',\n * pointSize : '${Temperature} * 2.0'\n * });\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n */\nfunction Cesium3DTileStyle(style) {\n this._style = {};\n this._ready = false;\n\n this._show = undefined;\n this._color = undefined;\n this._pointSize = undefined;\n this._pointOutlineColor = undefined;\n this._pointOutlineWidth = undefined;\n this._labelColor = undefined;\n this._labelOutlineColor = undefined;\n this._labelOutlineWidth = undefined;\n this._font = undefined;\n this._labelStyle = undefined;\n this._labelText = undefined;\n this._backgroundColor = undefined;\n this._backgroundPadding = undefined;\n this._backgroundEnabled = undefined;\n this._scaleByDistance = undefined;\n this._translucencyByDistance = undefined;\n this._distanceDisplayCondition = undefined;\n this._heightOffset = undefined;\n this._anchorLineEnabled = undefined;\n this._anchorLineColor = undefined;\n this._image = undefined;\n this._disableDepthTestDistance = undefined;\n this._horizontalOrigin = undefined;\n this._verticalOrigin = undefined;\n this._labelHorizontalOrigin = undefined;\n this._labelVerticalOrigin = undefined;\n this._meta = undefined;\n\n this._colorShaderFunction = undefined;\n this._showShaderFunction = undefined;\n this._pointSizeShaderFunction = undefined;\n this._colorShaderFunctionReady = false;\n this._showShaderFunctionReady = false;\n this._pointSizeShaderFunctionReady = false;\n\n this._colorShaderTranslucent = false;\n\n var promise;\n if (typeof style === \"string\" || style instanceof Resource) {\n var resource = Resource.createIfNeeded(style);\n promise = resource.fetchJson(style);\n } else {\n promise = when.resolve(style);\n }\n\n var that = this;\n this._readyPromise = promise.then(function (styleJson) {\n setup(that, styleJson);\n return that;\n });\n}\n\nfunction setup(that, styleJson) {\n styleJson = defaultValue(clone(styleJson, true), that._style);\n that._style = styleJson;\n\n that.show = styleJson.show;\n that.color = styleJson.color;\n that.pointSize = styleJson.pointSize;\n that.pointOutlineColor = styleJson.pointOutlineColor;\n that.pointOutlineWidth = styleJson.pointOutlineWidth;\n that.labelColor = styleJson.labelColor;\n that.labelOutlineColor = styleJson.labelOutlineColor;\n that.labelOutlineWidth = styleJson.labelOutlineWidth;\n that.labelStyle = styleJson.labelStyle;\n that.font = styleJson.font;\n that.labelText = styleJson.labelText;\n that.backgroundColor = styleJson.backgroundColor;\n that.backgroundPadding = styleJson.backgroundPadding;\n that.backgroundEnabled = styleJson.backgroundEnabled;\n that.scaleByDistance = styleJson.scaleByDistance;\n that.translucencyByDistance = styleJson.translucencyByDistance;\n that.distanceDisplayCondition = styleJson.distanceDisplayCondition;\n that.heightOffset = styleJson.heightOffset;\n that.anchorLineEnabled = styleJson.anchorLineEnabled;\n that.anchorLineColor = styleJson.anchorLineColor;\n that.image = styleJson.image;\n that.disableDepthTestDistance = styleJson.disableDepthTestDistance;\n that.horizontalOrigin = styleJson.horizontalOrigin;\n that.verticalOrigin = styleJson.verticalOrigin;\n that.labelHorizontalOrigin = styleJson.labelHorizontalOrigin;\n that.labelVerticalOrigin = styleJson.labelVerticalOrigin;\n\n var meta = {};\n if (defined(styleJson.meta)) {\n var defines = styleJson.defines;\n var metaJson = defaultValue(styleJson.meta, defaultValue.EMPTY_OBJECT);\n for (var property in metaJson) {\n if (metaJson.hasOwnProperty(property)) {\n meta[property] = new Expression(metaJson[property], defines);\n }\n }\n }\n\n that._meta = meta;\n\n that._ready = true;\n}\n\nfunction getExpression(tileStyle, value) {\n var defines = defaultValue(tileStyle._style, defaultValue.EMPTY_OBJECT)\n .defines;\n\n if (!defined(value)) {\n return undefined;\n } else if (typeof value === \"boolean\" || typeof value === \"number\") {\n return new Expression(String(value));\n } else if (typeof value === \"string\") {\n return new Expression(value, defines);\n } else if (defined(value.conditions)) {\n return new ConditionsExpression(value, defines);\n }\n return value;\n}\n\nfunction getJsonFromExpression(expression) {\n if (!defined(expression)) {\n return undefined;\n } else if (defined(expression.expression)) {\n return expression.expression;\n } else if (defined(expression.conditionsExpression)) {\n return clone(expression.conditionsExpression, true);\n }\n return expression;\n}\n\nObject.defineProperties(Cesium3DTileStyle.prototype, {\n /**\n * Gets the object defining the style using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}.\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @default {}\n *\n * @exception {DeveloperError} The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\n */\n style: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._style;\n },\n },\n\n /**\n * When <code>true</code>, the style is ready and its expressions can be evaluated. When\n * a style is constructed with an object, as opposed to a url, this is <code>true</code> immediately.\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets the promise that will be resolved when the the style is ready and its expressions can be evaluated.\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {Promise.<Cesium3DTileStyle>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>show</code> property. Alternatively a boolean, string, or object defining a show style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return or convert to a <code>Boolean</code>.\n * </p>\n * <p>\n * This expression is applicable to all tile formats.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * show : '(regExp(\"^Chest\").test(${County})) && (${YearBuilt} >= 1970)'\n * });\n * style.show.evaluate(feature); // returns true or false depending on the feature's properties\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override show expression with a custom function\n * style.show = {\n * evaluate : function(feature) {\n * return true;\n * }\n * };\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override show expression with a boolean\n * style.show = true;\n * };\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override show expression with a string\n * style.show = '${Height} > 0';\n * };\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override show expression with a condition\n * style.show = {\n * conditions: [\n * ['${height} > 2', 'false'],\n * ['true', 'true']\n * ];\n * };\n */\n show: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._show;\n },\n set: function (value) {\n this._show = getExpression(this, value);\n this._style.show = getJsonFromExpression(this._show);\n this._showShaderFunctionReady = false;\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>color</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is applicable to all tile formats.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * color : '(${Temperature} > 90) ? color(\"red\") : color(\"white\")'\n * });\n * style.color.evaluateColor(feature, result); // returns a Cesium.Color object\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override color expression with a custom function\n * style.color = {\n * evaluateColor : function(feature, result) {\n * return Cesium.Color.clone(Cesium.Color.WHITE, result);\n * }\n * };\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override color expression with a string\n * style.color = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override color expression with a condition\n * style.color = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n color: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._color;\n },\n set: function (value) {\n this._color = getExpression(this, value);\n this._style.color = getJsonFromExpression(this._color);\n this._colorShaderFunctionReady = false;\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointSize</code> property. Alternatively a string or object defining a point size style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Number</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile or a Point Cloud tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * pointSize : '(${Temperature} > 90) ? 2.0 : 1.0'\n * });\n * style.pointSize.evaluate(feature); // returns a Number\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointSize expression with a custom function\n * style.pointSize = {\n * evaluate : function(feature) {\n * return 1.0;\n * }\n * };\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointSize expression with a number\n * style.pointSize = 1.0;\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointSize expression with a string\n * style.pointSize = '${height} / 10';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointSize expression with a condition\n * style.pointSize = {\n * conditions : [\n * ['${height} > 2', '1.0'],\n * ['true', '2.0']\n * ]\n * };\n */\n pointSize: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._pointSize;\n },\n set: function (value) {\n this._pointSize = getExpression(this, value);\n this._style.pointSize = getJsonFromExpression(this._pointSize);\n this._pointSizeShaderFunctionReady = false;\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointOutlineColor</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointOutlineColor expression with a string\n * style.pointOutlineColor = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointOutlineColor expression with a condition\n * style.pointOutlineColor = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n pointOutlineColor: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._pointOutlineColor;\n },\n set: function (value) {\n this._pointOutlineColor = getExpression(this, value);\n this._style.pointOutlineColor = getJsonFromExpression(\n this._pointOutlineColor\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointOutlineWidth</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Number</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointOutlineWidth expression with a string\n * style.pointOutlineWidth = '5';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override pointOutlineWidth expression with a condition\n * style.pointOutlineWidth = {\n * conditions : [\n * ['${height} > 2', '5'],\n * ['true', '0']\n * ]\n * };\n */\n pointOutlineWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._pointOutlineWidth;\n },\n set: function (value) {\n this._pointOutlineWidth = getExpression(this, value);\n this._style.pointOutlineWidth = getJsonFromExpression(\n this._pointOutlineWidth\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelColor</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelColor expression with a string\n * style.labelColor = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelColor expression with a condition\n * style.labelColor = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n labelColor: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelColor;\n },\n set: function (value) {\n this._labelColor = getExpression(this, value);\n this._style.labelColor = getJsonFromExpression(this._labelColor);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelOutlineColor</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelOutlineColor expression with a string\n * style.labelOutlineColor = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelOutlineColor expression with a condition\n * style.labelOutlineColor = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n labelOutlineColor: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelOutlineColor;\n },\n set: function (value) {\n this._labelOutlineColor = getExpression(this, value);\n this._style.labelOutlineColor = getJsonFromExpression(\n this._labelOutlineColor\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelOutlineWidth</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Number</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelOutlineWidth expression with a string\n * style.labelOutlineWidth = '5';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelOutlineWidth expression with a condition\n * style.labelOutlineWidth = {\n * conditions : [\n * ['${height} > 2', '5'],\n * ['true', '0']\n * ]\n * };\n */\n labelOutlineWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelOutlineWidth;\n },\n set: function (value) {\n this._labelOutlineWidth = getExpression(this, value);\n this._style.labelOutlineWidth = getJsonFromExpression(\n this._labelOutlineWidth\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>font</code> property. Alternatively a string or object defining a string style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>String</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * font : '(${Temperature} > 90) ? \"30px Helvetica\" : \"24px Helvetica\"'\n * });\n * style.font.evaluate(feature); // returns a String\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override font expression with a custom function\n * style.font = {\n * evaluate : function(feature) {\n * return '24px Helvetica';\n * }\n * };\n */\n font: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._font;\n },\n set: function (value) {\n this._font = getExpression(this, value);\n this._style.font = getJsonFromExpression(this._font);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>label style</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>LabelStyle</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * labelStyle : '(${Temperature} > 90) ? ' + LabelStyle.FILL_AND_OUTLINE + ' : ' + LabelStyle.FILL\n * });\n * style.labelStyle.evaluate(feature); // returns a LabelStyle\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelStyle expression with a custom function\n * style.labelStyle = {\n * evaluate : function(feature) {\n * return LabelStyle.FILL;\n * }\n * };\n */\n labelStyle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelStyle;\n },\n set: function (value) {\n this._labelStyle = getExpression(this, value);\n this._style.labelStyle = getJsonFromExpression(this._labelStyle);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelText</code> property. Alternatively a string or object defining a string style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>String</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * labelText : '(${Temperature} > 90) ? \">90\" : \"<=90\"'\n * });\n * style.labelText.evaluate(feature); // returns a String\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelText expression with a custom function\n * style.labelText = {\n * evaluate : function(feature) {\n * return 'Example label text';\n * }\n * };\n */\n labelText: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelText;\n },\n set: function (value) {\n this._labelText = getExpression(this, value);\n this._style.labelText = getJsonFromExpression(this._labelText);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundColor</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override backgroundColor expression with a string\n * style.backgroundColor = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override backgroundColor expression with a condition\n * style.backgroundColor = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n backgroundColor: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._backgroundColor;\n },\n set: function (value) {\n this._backgroundColor = getExpression(this, value);\n this._style.backgroundColor = getJsonFromExpression(\n this._backgroundColor\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundPadding</code> property. Alternatively a string or object defining a vec2 style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Cartesian2</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override backgroundPadding expression with a string\n * style.backgroundPadding = 'vec2(5.0, 7.0)';\n * style.backgroundPadding.evaluate(feature); // returns a Cartesian2\n */\n backgroundPadding: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._backgroundPadding;\n },\n set: function (value) {\n this._backgroundPadding = getExpression(this, value);\n this._style.backgroundPadding = getJsonFromExpression(\n this._backgroundPadding\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundEnabled</code> property. Alternatively a string or object defining a boolean style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Boolean</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override backgroundEnabled expression with a string\n * style.backgroundEnabled = 'true';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override backgroundEnabled expression with a condition\n * style.backgroundEnabled = {\n * conditions : [\n * ['${height} > 2', 'true'],\n * ['true', 'false']\n * ]\n * };\n */\n backgroundEnabled: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._backgroundEnabled;\n },\n set: function (value) {\n this._backgroundEnabled = getExpression(this, value);\n this._style.backgroundEnabled = getJsonFromExpression(\n this._backgroundEnabled\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>scaleByDistance</code> property. Alternatively a string or object defining a vec4 style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Cartesian4</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override scaleByDistance expression with a string\n * style.scaleByDistance = 'vec4(1.5e2, 2.0, 1.5e7, 0.5)';\n * style.scaleByDistance.evaluate(feature); // returns a Cartesian4\n */\n scaleByDistance: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._scaleByDistance;\n },\n set: function (value) {\n this._scaleByDistance = getExpression(this, value);\n this._style.scaleByDistance = getJsonFromExpression(\n this._scaleByDistance\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>translucencyByDistance</code> property. Alternatively a string or object defining a vec4 style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Cartesian4</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override translucencyByDistance expression with a string\n * style.translucencyByDistance = 'vec4(1.5e2, 1.0, 1.5e7, 0.2)';\n * style.translucencyByDistance.evaluate(feature); // returns a Cartesian4\n */\n translucencyByDistance: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._translucencyByDistance;\n },\n set: function (value) {\n this._translucencyByDistance = getExpression(this, value);\n this._style.translucencyByDistance = getJsonFromExpression(\n this._translucencyByDistance\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>distanceDisplayCondition</code> property. Alternatively a string or object defining a vec2 style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Cartesian2</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override distanceDisplayCondition expression with a string\n * style.distanceDisplayCondition = 'vec2(0.0, 5.5e6)';\n * style.distanceDisplayCondition.evaluate(feature); // returns a Cartesian2\n */\n distanceDisplayCondition: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._distanceDisplayCondition;\n },\n set: function (value) {\n this._distanceDisplayCondition = getExpression(this, value);\n this._style.distanceDisplayCondition = getJsonFromExpression(\n this._distanceDisplayCondition\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>heightOffset</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Number</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override heightOffset expression with a string\n * style.heightOffset = '2.0';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override heightOffset expression with a condition\n * style.heightOffset = {\n * conditions : [\n * ['${height} > 2', '4.0'],\n * ['true', '2.0']\n * ]\n * };\n */\n heightOffset: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._heightOffset;\n },\n set: function (value) {\n this._heightOffset = getExpression(this, value);\n this._style.heightOffset = getJsonFromExpression(this._heightOffset);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>anchorLineEnabled</code> property. Alternatively a string or object defining a boolean style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Boolean</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override anchorLineEnabled expression with a string\n * style.anchorLineEnabled = 'true';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override anchorLineEnabled expression with a condition\n * style.anchorLineEnabled = {\n * conditions : [\n * ['${height} > 2', 'true'],\n * ['true', 'false']\n * ]\n * };\n */\n anchorLineEnabled: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._anchorLineEnabled;\n },\n set: function (value) {\n this._anchorLineEnabled = getExpression(this, value);\n this._style.anchorLineEnabled = getJsonFromExpression(\n this._anchorLineEnabled\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>anchorLineColor</code> property. Alternatively a string or object defining a color style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Color</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override anchorLineColor expression with a string\n * style.anchorLineColor = 'color(\"blue\")';\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override anchorLineColor expression with a condition\n * style.anchorLineColor = {\n * conditions : [\n * ['${height} > 2', 'color(\"cyan\")'],\n * ['true', 'color(\"blue\")']\n * ]\n * };\n */\n anchorLineColor: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._anchorLineColor;\n },\n set: function (value) {\n this._anchorLineColor = getExpression(this, value);\n this._style.anchorLineColor = getJsonFromExpression(\n this._anchorLineColor\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>image</code> property. Alternatively a string or object defining a string style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>String</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * image : '(${Temperature} > 90) ? \"/url/to/image1\" : \"/url/to/image2\"'\n * });\n * style.image.evaluate(feature); // returns a String\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override image expression with a custom function\n * style.image = {\n * evaluate : function(feature) {\n * return '/url/to/image';\n * }\n * };\n */\n image: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._image;\n },\n set: function (value) {\n this._image = getExpression(this, value);\n this._style.image = getJsonFromExpression(this._image);\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>disableDepthTestDistance</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>Number</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override disableDepthTestDistance expression with a string\n * style.disableDepthTestDistance = '1000.0';\n * style.disableDepthTestDistance.evaluate(feature); // returns a Number\n */\n disableDepthTestDistance: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._disableDepthTestDistance;\n },\n set: function (value) {\n this._disableDepthTestDistance = getExpression(this, value);\n this._style.disableDepthTestDistance = getJsonFromExpression(\n this._disableDepthTestDistance\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>horizontalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>HorizontalOrigin</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * horizontalOrigin : HorizontalOrigin.LEFT\n * });\n * style.horizontalOrigin.evaluate(feature); // returns a HorizontalOrigin\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override horizontalOrigin expression with a custom function\n * style.horizontalOrigin = {\n * evaluate : function(feature) {\n * return HorizontalOrigin.CENTER;\n * }\n * };\n */\n horizontalOrigin: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._horizontalOrigin;\n },\n set: function (value) {\n this._horizontalOrigin = getExpression(this, value);\n this._style.horizontalOrigin = getJsonFromExpression(\n this._horizontalOrigin\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>verticalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>VerticalOrigin</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * verticalOrigin : VerticalOrigin.TOP\n * });\n * style.verticalOrigin.evaluate(feature); // returns a VerticalOrigin\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override verticalOrigin expression with a custom function\n * style.verticalOrigin = {\n * evaluate : function(feature) {\n * return VerticalOrigin.CENTER;\n * }\n * };\n */\n verticalOrigin: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._verticalOrigin;\n },\n set: function (value) {\n this._verticalOrigin = getExpression(this, value);\n this._style.verticalOrigin = getJsonFromExpression(this._verticalOrigin);\n },\n },\n\n /**\n Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelHorizontalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>HorizontalOrigin</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * labelHorizontalOrigin : HorizontalOrigin.LEFT\n * });\n * style.labelHorizontalOrigin.evaluate(feature); // returns a HorizontalOrigin\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelHorizontalOrigin expression with a custom function\n * style.labelHorizontalOrigin = {\n * evaluate : function(feature) {\n * return HorizontalOrigin.CENTER;\n * }\n * };\n */\n labelHorizontalOrigin: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelHorizontalOrigin;\n },\n set: function (value) {\n this._labelHorizontalOrigin = getExpression(this, value);\n this._style.labelHorizontalOrigin = getJsonFromExpression(\n this._labelHorizontalOrigin\n );\n },\n },\n\n /**\n * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelVerticalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n * <p>\n * The expression must return a <code>VerticalOrigin</code>.\n * </p>\n * <p>\n * This expression is only applicable to point features in a Vector tile.\n * </p>\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * labelVerticalOrigin : VerticalOrigin.TOP\n * });\n * style.labelVerticalOrigin.evaluate(feature); // returns a VerticalOrigin\n *\n * @example\n * var style = new Cesium.Cesium3DTileStyle();\n * // Override labelVerticalOrigin expression with a custom function\n * style.labelVerticalOrigin = {\n * evaluate : function(feature) {\n * return VerticalOrigin.CENTER;\n * }\n * };\n */\n labelVerticalOrigin: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._labelVerticalOrigin;\n },\n set: function (value) {\n this._labelVerticalOrigin = getExpression(this, value);\n this._style.labelVerticalOrigin = getJsonFromExpression(\n this._labelVerticalOrigin\n );\n },\n },\n\n /**\n * Gets or sets the object containing application-specific expression that can be explicitly\n * evaluated, e.g., for display in a UI.\n *\n * @memberof Cesium3DTileStyle.prototype\n *\n * @type {StyleExpression}\n *\n * @exception {DeveloperError} The style is not loaded. Use {@link Cesium3DTileStyle#readyPromise} or wait for {@link Cesium3DTileStyle#ready} to be true.\n *\n * @example\n * var style = new Cesium3DTileStyle({\n * meta : {\n * description : '\"Building id ${id} has height ${Height}.\"'\n * }\n * });\n * style.meta.description.evaluate(feature); // returns a String with the substituted variables\n */\n meta: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"The style is not loaded. Use Cesium3DTileStyle.readyPromise or wait for Cesium3DTileStyle.ready to be true.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._meta;\n },\n set: function (value) {\n this._meta = value;\n },\n },\n});\n\n/**\n * Gets the color shader function for this style.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getColorShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState\n) {\n if (this._colorShaderFunctionReady) {\n shaderState.translucent = this._colorShaderTranslucent;\n // Return the cached result, may be undefined\n return this._colorShaderFunction;\n }\n\n this._colorShaderFunctionReady = true;\n this._colorShaderFunction = defined(this.color)\n ? this.color.getShaderFunction(\n functionName,\n propertyNameMap,\n shaderState,\n \"vec4\"\n )\n : undefined;\n this._colorShaderTranslucent = shaderState.translucent;\n return this._colorShaderFunction;\n};\n\n/**\n * Gets the show shader function for this style.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getShowShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState\n) {\n if (this._showShaderFunctionReady) {\n // Return the cached result, may be undefined\n return this._showShaderFunction;\n }\n\n this._showShaderFunctionReady = true;\n this._showShaderFunction = defined(this.show)\n ? this.show.getShaderFunction(\n functionName,\n propertyNameMap,\n shaderState,\n \"bool\"\n )\n : undefined;\n return this._showShaderFunction;\n};\n\n/**\n * Gets the pointSize shader function for this style.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getPointSizeShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState\n) {\n if (this._pointSizeShaderFunctionReady) {\n // Return the cached result, may be undefined\n return this._pointSizeShaderFunction;\n }\n\n this._pointSizeShaderFunctionReady = true;\n this._pointSizeShaderFunction = defined(this.pointSize)\n ? this.pointSize.getShaderFunction(\n functionName,\n propertyNameMap,\n shaderState,\n \"float\"\n )\n : undefined;\n return this._pointSizeShaderFunction;\n};\nexport default Cesium3DTileStyle;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A ParticleEmitter that emits particles from a circle.\n * Particles will be positioned within a circle and have initial velocities going along the z vector.\n *\n * @alias CircleEmitter\n * @constructor\n *\n * @param {Number} [radius=1.0] The radius of the circle in meters.\n */\nfunction CircleEmitter(radius) {\n radius = defaultValue(radius, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"radius\", radius, 0.0);\n //>>includeEnd('debug');\n\n this._radius = defaultValue(radius, 1.0);\n}\n\nObject.defineProperties(CircleEmitter.prototype, {\n /**\n * The radius of the circle in meters.\n * @memberof CircleEmitter.prototype\n * @type {Number}\n * @default 1.0\n */\n radius: {\n get: function () {\n return this._radius;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._radius = value;\n },\n },\n});\n\n/**\n * Initializes the given {@link Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize.\n */\nCircleEmitter.prototype.emit = function (particle) {\n var theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n var rad = CesiumMath.randomBetween(0.0, this._radius);\n\n var x = rad * Math.cos(theta);\n var y = rad * Math.sin(theta);\n var z = 0.0;\n\n particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n particle.velocity = Cartesian3.clone(Cartesian3.UNIT_Z, particle.velocity);\n};\nexport default CircleEmitter;\n","import defined from \"../Core/defined.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport sampleTerrainMostDetailed from \"../Core/sampleTerrainMostDetailed.js\";\nimport when from \"../ThirdParty/when.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Computes the final camera location to view a rectangle adjusted for the current terrain.\n * If the terrain does not support availability, the height above the ellipsoid is used.\n *\n * @param {Rectangle} rectangle The rectangle being zoomed to.\n * @param {Scene} scene The scene being used.\n *\n * @returns {Cartographic} The optimal location to place the camera so that the entire rectangle is in view.\n *\n * @private\n */\nfunction computeFlyToLocationForRectangle(rectangle, scene) {\n var terrainProvider = scene.terrainProvider;\n var mapProjection = scene.mapProjection;\n var ellipsoid = mapProjection.ellipsoid;\n\n var positionWithoutTerrain;\n var tmp = scene.camera.getRectangleCameraCoordinates(rectangle);\n if (scene.mode === SceneMode.SCENE3D) {\n positionWithoutTerrain = ellipsoid.cartesianToCartographic(tmp);\n } else {\n positionWithoutTerrain = mapProjection.unproject(tmp);\n }\n\n if (!defined(terrainProvider)) {\n return when.resolve(positionWithoutTerrain);\n }\n\n return terrainProvider.readyPromise.then(function () {\n var availability = terrainProvider.availability;\n\n if (!defined(availability) || scene.mode === SceneMode.SCENE2D) {\n return positionWithoutTerrain;\n }\n\n var cartographics = [\n Rectangle.center(rectangle),\n Rectangle.southeast(rectangle),\n Rectangle.southwest(rectangle),\n Rectangle.northeast(rectangle),\n Rectangle.northwest(rectangle),\n ];\n\n return computeFlyToLocationForRectangle\n ._sampleTerrainMostDetailed(terrainProvider, cartographics)\n .then(function (positionsOnTerrain) {\n var maxHeight = positionsOnTerrain.reduce(function (currentMax, item) {\n return Math.max(item.height, currentMax);\n }, -Number.MAX_VALUE);\n\n var finalPosition = positionWithoutTerrain;\n finalPosition.height += maxHeight;\n return finalPosition;\n });\n });\n}\n\n//Exposed for testing.\ncomputeFlyToLocationForRectangle._sampleTerrainMostDetailed = sampleTerrainMostDetailed;\nexport default computeFlyToLocationForRectangle;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\nvar defaultAngle = CesiumMath.toRadians(30.0);\n\n/**\n * A ParticleEmitter that emits particles within a cone.\n * Particles will be positioned at the tip of the cone and have initial velocities going towards the base.\n *\n * @alias ConeEmitter\n * @constructor\n *\n * @param {Number} [angle=Cesium.Math.toRadians(30.0)] The angle of the cone in radians.\n */\nfunction ConeEmitter(angle) {\n this._angle = defaultValue(angle, defaultAngle);\n}\n\nObject.defineProperties(ConeEmitter.prototype, {\n /**\n * The angle of the cone in radians.\n * @memberof CircleEmitter.prototype\n * @type {Number}\n * @default Cesium.Math.toRadians(30.0)\n */\n angle: {\n get: function () {\n return this._angle;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"value\", value);\n //>>includeEnd('debug');\n this._angle = value;\n },\n },\n});\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize\n */\nConeEmitter.prototype.emit = function (particle) {\n var radius = Math.tan(this._angle);\n\n // Compute a random point on the cone's base\n var theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n var rad = CesiumMath.randomBetween(0.0, radius);\n\n var x = rad * Math.cos(theta);\n var y = rad * Math.sin(theta);\n var z = 1.0;\n\n particle.velocity = Cartesian3.fromElements(x, y, z, particle.velocity);\n Cartesian3.normalize(particle.velocity, particle.velocity);\n particle.position = Cartesian3.clone(Cartesian3.ZERO, particle.position);\n};\nexport default ConeEmitter;\n","import ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Creates a {@link Primitive} to visualize well-known vector vertex attributes:\n * <code>normal</code>, <code>tangent</code>, and <code>bitangent</code>. Normal\n * is red; tangent is green; and bitangent is blue. If an attribute is not\n * present, it is not drawn.\n *\n * @function\n *\n * @param {Object} options Object with the following properties:\n * @param {Geometry} options.geometry The <code>Geometry</code> instance with the attribute.\n * @param {Number} [options.length=10000.0] The length of each line segment in meters. This can be negative to point the vector in the opposite direction.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates.\n * @returns {Primitive} A new <code>Primitive</code> instance with geometry for the vectors.\n *\n * @example\n * scene.primitives.add(Cesium.createTangentSpaceDebugPrimitive({\n * geometry : instance.geometry,\n * length : 100000.0,\n * modelMatrix : instance.modelMatrix\n * }));\n */\nfunction createTangentSpaceDebugPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var instances = [];\n var geometry = options.geometry;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"options.geometry is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(geometry.attributes) || !defined(geometry.primitiveType)) {\n // to create the debug lines, we need the computed attributes.\n // compute them if they are undefined.\n geometry = geometry.constructor.createGeometry(geometry);\n }\n\n var attributes = geometry.attributes;\n var modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n var length = defaultValue(options.length, 10000.0);\n\n if (defined(attributes.normal)) {\n instances.push(\n new GeometryInstance({\n geometry: GeometryPipeline.createLineSegmentsForVectors(\n geometry,\n \"normal\",\n length\n ),\n attributes: {\n color: new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0),\n },\n modelMatrix: modelMatrix,\n })\n );\n }\n\n if (defined(attributes.tangent)) {\n instances.push(\n new GeometryInstance({\n geometry: GeometryPipeline.createLineSegmentsForVectors(\n geometry,\n \"tangent\",\n length\n ),\n attributes: {\n color: new ColorGeometryInstanceAttribute(0.0, 1.0, 0.0, 1.0),\n },\n modelMatrix: modelMatrix,\n })\n );\n }\n\n if (defined(attributes.bitangent)) {\n instances.push(\n new GeometryInstance({\n geometry: GeometryPipeline.createLineSegmentsForVectors(\n geometry,\n \"bitangent\",\n length\n ),\n attributes: {\n color: new ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 1.0),\n },\n modelMatrix: modelMatrix,\n })\n );\n }\n\n if (instances.length > 0) {\n return new Primitive({\n asynchronous: false,\n geometryInstances: instances,\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: false,\n }),\n });\n }\n\n return undefined;\n}\nexport default createTangentSpaceDebugPrimitive;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport combine from \"../Core/combine.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\nvar templateRegex = /{[^}]+}/g;\n\nvar tags = {\n x: xTag,\n y: yTag,\n z: zTag,\n s: sTag,\n reverseX: reverseXTag,\n reverseY: reverseYTag,\n reverseZ: reverseZTag,\n westDegrees: westDegreesTag,\n southDegrees: southDegreesTag,\n eastDegrees: eastDegreesTag,\n northDegrees: northDegreesTag,\n westProjected: westProjectedTag,\n southProjected: southProjectedTag,\n eastProjected: eastProjectedTag,\n northProjected: northProjectedTag,\n width: widthTag,\n height: heightTag,\n};\n\nvar pickFeaturesTags = combine(tags, {\n i: iTag,\n j: jTag,\n reverseI: reverseITag,\n reverseJ: reverseJTag,\n longitudeDegrees: longitudeDegreesTag,\n latitudeDegrees: latitudeDegreesTag,\n longitudeProjected: longitudeProjectedTag,\n latitudeProjected: latitudeProjectedTag,\n format: formatTag,\n});\n\n/**\n * @typedef {Object} UrlTemplateImageryProvider.ConstructorOptions\n *\n * Initialization options for the UrlTemplateImageryProvider constructor\n *\n * @property {Promise.<Object>|Object} [options] Object with the following properties:\n * @property {Resource|String} url The URL template to use to request tiles. It has the following keywords:\n * <ul>\n * <li><code>{z}</code>: The level of the tile in the tiling scheme. Level zero is the root of the quadtree pyramid.</li>\n * <li><code>{x}</code>: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.</li>\n * <li><code>{y}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.</li>\n * <li><code>{s}</code>: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.</li>\n * <li><code>{reverseX}</code>: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.</li>\n * <li><code>{reverseY}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.</li>\n * <li><code>{reverseZ}</code>: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid. In order to use reverseZ, maximumLevel must be defined.</li>\n * <li><code>{westDegrees}</code>: The Western edge of the tile in geodetic degrees.</li>\n * <li><code>{southDegrees}</code>: The Southern edge of the tile in geodetic degrees.</li>\n * <li><code>{eastDegrees}</code>: The Eastern edge of the tile in geodetic degrees.</li>\n * <li><code>{northDegrees}</code>: The Northern edge of the tile in geodetic degrees.</li>\n * <li><code>{westProjected}</code>: The Western edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li><code>{southProjected}</code>: The Southern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li><code>{eastProjected}</code>: The Eastern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li><code>{northProjected}</code>: The Northern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li><code>{width}</code>: The width of each tile in pixels.</li>\n * <li><code>{height}</code>: The height of each tile in pixels.</li>\n * </ul>\n * @property {Resource|String} [pickFeaturesUrl] The URL template to use to pick features. If this property is not specified,\n * {@link UrlTemplateImageryProvider#pickFeatures} will immediately returned undefined, indicating no\n * features picked. The URL template supports all of the keywords supported by the <code>url</code>\n * parameter, plus the following:\n * <ul>\n * <li><code>{i}</code>: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.</li>\n * <li><code>{j}</code>: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.</li>\n * <li><code>{reverseI}</code>: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.</li>\n * <li><code>{reverseJ}</code>: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.</li>\n * <li><code>{longitudeDegrees}</code>: The longitude of the picked position in degrees.</li>\n * <li><code>{latitudeDegrees}</code>: The latitude of the picked position in degrees.</li>\n * <li><code>{longitudeProjected}</code>: The longitude of the picked position in the projected coordinates of the tiling scheme.</li>\n * <li><code>{latitudeProjected}</code>: The latitude of the picked position in the projected coordinates of the tiling scheme.</li>\n * <li><code>{format}</code>: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.</li>\n * </ul>\n * @property {Object} [urlSchemeZeroPadding] Gets the URL scheme zero padding for each tile coordinate. The format is '000' where\n * each coordinate will be padded on the left with zeros to match the width of the passed string of zeros. e.g. Setting:\n * urlSchemeZeroPadding : { '{x}' : '0000'}\n * will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL.\n * It the passed object has the following keywords:\n * <ul>\n * <li> <code>{z}</code>: The zero padding for the level of the tile in the tiling scheme.</li>\n * <li> <code>{x}</code>: The zero padding for the tile X coordinate in the tiling scheme.</li>\n * <li> <code>{y}</code>: The zero padding for the the tile Y coordinate in the tiling scheme.</li>\n * <li> <code>{reverseX}</code>: The zero padding for the tile reverseX coordinate in the tiling scheme.</li>\n * <li> <code>{reverseY}</code>: The zero padding for the tile reverseY coordinate in the tiling scheme.</li>\n * <li> <code>{reverseZ}</code>: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.</li>\n * </ul>\n * @property {String|String[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n * If this parameter is a single string, each character in the string is a subdomain. If it is\n * an array, each element in the array is a subdomain.\n * @property {Credit|String} [credit=''] A credit for the data source, which is displayed on the canvas.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when specifying\n * this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely\n * to result in rendering problems.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {TilingScheme} [tilingScheme=WebMercatorTilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles. If this parameter is not provided, a {@link WebMercatorTilingScheme}\n * is used.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @property {Number} [tileWidth=256] Pixel width of image tiles.\n * @property {Number} [tileHeight=256] Pixel height of image tiles.\n * @property {Boolean} [hasAlphaChannel=true] true if the images provided by this imagery provider\n * include an alpha channel; otherwise, false. If this property is false, an alpha channel, if\n * present, will be ignored. If this property is true, any images without an alpha channel will\n * be treated as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are potentially reduced.\n * @property {GetFeatureInfoFormat[]} [getFeatureInfoFormats] The formats in which to get feature information at a\n * specific location when {@link UrlTemplateImageryProvider#pickFeatures} is invoked. If this\n * parameter is not specified, feature picking is disabled.\n * @property {Boolean} [enablePickFeatures=true] If true, {@link UrlTemplateImageryProvider#pickFeatures} will\n * request the <code>pickFeaturesUrl</code> and attempt to interpret the features included in the response. If false,\n * {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n * features) without communicating with the server. Set this property to false if you know your data\n * source does not support picking features or if you don't want this provider's features to be pickable. Note\n * that this can be dynamically overridden by modifying the {@link UriTemplateImageryProvider#enablePickFeatures}\n * property.\n * @property {Object} [customTags] Allow to replace custom keywords in the URL template. The object must have strings as keys and functions as values.\n */\n\n/**\n * Provides imagery by requesting tiles using a specified URL template.\n *\n * @alias UrlTemplateImageryProvider\n * @constructor\n *\n * @param {UrlTemplateImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Access Natural Earth II imagery, which uses a TMS tiling scheme and Geographic (EPSG:4326) project\n * var tms = new Cesium.UrlTemplateImageryProvider({\n * url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') + '/{z}/{x}/{reverseY}.jpg',\n * credit : '© Analytical Graphics, Inc.',\n * tilingScheme : new Cesium.GeographicTilingScheme(),\n * maximumLevel : 5\n * });\n * // Access the CartoDB Positron basemap, which uses an OpenStreetMap-like tiling scheme.\n * var positron = new Cesium.UrlTemplateImageryProvider({\n * url : 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',\n * credit : 'Map tiles by CartoDB, under CC BY 3.0. Data by OpenStreetMap, under ODbL.'\n * });\n * // Access a Web Map Service (WMS) server.\n * var wms = new Cesium.UrlTemplateImageryProvider({\n * url : 'https://programs.communications.gov.au/geoserver/ows?tiled=true&' +\n * 'transparent=true&format=image%2Fpng&exceptions=application%2Fvnd.ogc.se_xml&' +\n * 'styles=&service=WMS&version=1.1.1&request=GetMap&' +\n * 'layers=public%3AMyBroadband_Availability&srs=EPSG%3A3857&' +\n * 'bbox={westProjected}%2C{southProjected}%2C{eastProjected}%2C{northProjected}&' +\n * 'width=256&height=256',\n * rectangle : Cesium.Rectangle.fromDegrees(96.799393, -43.598214999057824, 153.63925700000001, -9.2159219997013)\n * });\n * // Using custom tags in your template url.\n * var custom = new Cesium.UrlTemplateImageryProvider({\n * url : 'https://yoururl/{Time}/{z}/{y}/{x}.png',\n * customTags : {\n * Time: function(imageryProvider, x, y, level) {\n * return '20171231'\n * }\n * }\n * });\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n */\nfunction UrlTemplateImageryProvider(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!when.isPromise(options) && !defined(options.url)) {\n throw new DeveloperError(\"options is required.\");\n }\n //>>includeEnd('debug');\n\n this._errorEvent = new Event();\n\n this._resource = undefined;\n this._urlSchemeZeroPadding = undefined;\n this._pickFeaturesResource = undefined;\n this._tileWidth = undefined;\n this._tileHeight = undefined;\n this._maximumLevel = undefined;\n this._minimumLevel = undefined;\n this._tilingScheme = undefined;\n this._rectangle = undefined;\n this._tileDiscardPolicy = undefined;\n this._credit = undefined;\n this._hasAlphaChannel = undefined;\n this._readyPromise = undefined;\n this._tags = undefined;\n this._pickFeaturesTags = undefined;\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n /**\n * Gets or sets a value indicating whether feature picking is enabled. If true, {@link UrlTemplateImageryProvider#pickFeatures} will\n * request the <code>options.pickFeaturesUrl</code> and attempt to interpret the features included in the response. If false,\n * {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n * features) without communicating with the server. Set this property to false if you know your data\n * source does not support picking features or if you don't want this provider's features to be pickable.\n * @type {Boolean}\n * @default true\n */\n this.enablePickFeatures = true;\n\n this.reinitialize(options);\n}\n\nObject.defineProperties(UrlTemplateImageryProvider.prototype, {\n /**\n * Gets the URL template to use to request tiles. It has the following keywords:\n * <ul>\n * <li> <code>{z}</code>: The level of the tile in the tiling scheme. Level zero is the root of the quadtree pyramid.</li>\n * <li> <code>{x}</code>: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.</li>\n * <li> <code>{y}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.</li>\n * <li> <code>{s}</code>: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.</li>\n * <li> <code>{reverseX}</code>: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.</li>\n * <li> <code>{reverseY}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.</li>\n * <li> <code>{reverseZ}</code>: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid. In order to use reverseZ, maximumLevel must be defined.</li>\n * <li> <code>{westDegrees}</code>: The Western edge of the tile in geodetic degrees.</li>\n * <li> <code>{southDegrees}</code>: The Southern edge of the tile in geodetic degrees.</li>\n * <li> <code>{eastDegrees}</code>: The Eastern edge of the tile in geodetic degrees.</li>\n * <li> <code>{northDegrees}</code>: The Northern edge of the tile in geodetic degrees.</li>\n * <li> <code>{westProjected}</code>: The Western edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li> <code>{southProjected}</code>: The Southern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li> <code>{eastProjected}</code>: The Eastern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li> <code>{northProjected}</code>: The Northern edge of the tile in projected coordinates of the tiling scheme.</li>\n * <li> <code>{width}</code>: The width of each tile in pixels.</li>\n * <li> <code>{height}</code>: The height of each tile in pixels.</li>\n * </ul>\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * Gets the URL scheme zero padding for each tile coordinate. The format is '000' where each coordinate will be padded on\n * the left with zeros to match the width of the passed string of zeros. e.g. Setting:\n * urlSchemeZeroPadding : { '{x}' : '0000'}\n * will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL.\n * It has the following keywords:\n * <ul>\n * <li> <code>{z}</code>: The zero padding for the level of the tile in the tiling scheme.</li>\n * <li> <code>{x}</code>: The zero padding for the tile X coordinate in the tiling scheme.</li>\n * <li> <code>{y}</code>: The zero padding for the the tile Y coordinate in the tiling scheme.</li>\n * <li> <code>{reverseX}</code>: The zero padding for the tile reverseX coordinate in the tiling scheme.</li>\n * <li> <code>{reverseY}</code>: The zero padding for the tile reverseY coordinate in the tiling scheme.</li>\n * <li> <code>{reverseZ}</code>: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.</li>\n * </ul>\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Object}\n * @readonly\n */\n urlSchemeZeroPadding: {\n get: function () {\n return this._urlSchemeZeroPadding;\n },\n },\n\n /**\n * Gets the URL template to use to use to pick features. If this property is not specified,\n * {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined, indicating no\n * features picked. The URL template supports all of the keywords supported by the\n * {@link UrlTemplateImageryProvider#url} property, plus the following:\n * <ul>\n * <li><code>{i}</code>: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.</li>\n * <li><code>{j}</code>: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.</li>\n * <li><code>{reverseI}</code>: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.</li>\n * <li><code>{reverseJ}</code>: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.</li>\n * <li><code>{longitudeDegrees}</code>: The longitude of the picked position in degrees.</li>\n * <li><code>{latitudeDegrees}</code>: The latitude of the picked position in degrees.</li>\n * <li><code>{longitudeProjected}</code>: The longitude of the picked position in the projected coordinates of the tiling scheme.</li>\n * <li><code>{latitudeProjected}</code>: The latitude of the picked position in the projected coordinates of the tiling scheme.</li>\n * <li><code>{format}</code>: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.</li>\n * </ul>\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n pickFeaturesUrl: {\n get: function () {\n return this._pickFeaturesResource.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n * @default undefined\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Number}\n * @readonly\n * @default 256\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Number}\n * @readonly\n * @default 256\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested, or undefined if there is no limit.\n * This function should not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n * @default undefined\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Number}\n * @readonly\n * @default 0\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n * @default new WebMercatorTilingScheme()\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n * @default tilingScheme.rectangle\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"rectangle must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n * @default undefined\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return defined(this._resource);\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Credit}\n * @readonly\n * @default undefined\n */\n credit: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"credit must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced. This function should\n * not be called before {@link ImageryProvider#ready} returns true.\n * @memberof UrlTemplateImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n * @default true\n */\n hasAlphaChannel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"hasAlphaChannel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._hasAlphaChannel;\n },\n },\n});\n\n/**\n * Reinitializes this instance. Reinitializing an instance already in use is supported, but it is not\n * recommended because existing tiles provided by the imagery provider will not be updated.\n *\n * @param {Promise.<Object>|Object} options Any of the options that may be passed to the {@link UrlTemplateImageryProvider} constructor.\n */\nUrlTemplateImageryProvider.prototype.reinitialize = function (options) {\n var that = this;\n that._readyPromise = when(options).then(function (properties) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(properties)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(properties.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n var customTags = properties.customTags;\n var allTags = combine(tags, customTags);\n var allPickFeaturesTags = combine(pickFeaturesTags, customTags);\n var resource = Resource.createIfNeeded(properties.url);\n var pickFeaturesResource = Resource.createIfNeeded(\n properties.pickFeaturesUrl\n );\n\n that.enablePickFeatures = defaultValue(\n properties.enablePickFeatures,\n that.enablePickFeatures\n );\n that._urlSchemeZeroPadding = defaultValue(\n properties.urlSchemeZeroPadding,\n that.urlSchemeZeroPadding\n );\n that._tileDiscardPolicy = properties.tileDiscardPolicy;\n that._getFeatureInfoFormats = properties.getFeatureInfoFormats;\n\n that._subdomains = properties.subdomains;\n if (Array.isArray(that._subdomains)) {\n that._subdomains = that._subdomains.slice();\n } else if (defined(that._subdomains) && that._subdomains.length > 0) {\n that._subdomains = that._subdomains.split(\"\");\n } else {\n that._subdomains = [\"a\", \"b\", \"c\"];\n }\n\n that._tileWidth = defaultValue(properties.tileWidth, 256);\n that._tileHeight = defaultValue(properties.tileHeight, 256);\n that._minimumLevel = defaultValue(properties.minimumLevel, 0);\n that._maximumLevel = properties.maximumLevel;\n that._tilingScheme = defaultValue(\n properties.tilingScheme,\n new WebMercatorTilingScheme({ ellipsoid: properties.ellipsoid })\n );\n that._rectangle = defaultValue(\n properties.rectangle,\n that._tilingScheme.rectangle\n );\n that._rectangle = Rectangle.intersection(\n that._rectangle,\n that._tilingScheme.rectangle\n );\n that._hasAlphaChannel = defaultValue(properties.hasAlphaChannel, true);\n\n var credit = properties.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n that._credit = credit;\n\n that._resource = resource;\n that._tags = allTags;\n that._pickFeaturesResource = pickFeaturesResource;\n that._pickFeaturesTags = allPickFeaturesTags;\n\n return true;\n });\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nUrlTemplateImageryProvider.prototype.getTileCredits = function (x, y, level) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"getTileCredits must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link UrlTemplateImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n */\nUrlTemplateImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return ImageryProvider.loadImage(\n this,\n buildImageResource(this, x, y, level, request)\n );\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link ImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nUrlTemplateImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this.ready) {\n throw new DeveloperError(\n \"pickFeatures must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n if (\n !this.enablePickFeatures ||\n !defined(this._pickFeaturesResource) ||\n this._getFeatureInfoFormats.length === 0\n ) {\n return undefined;\n }\n\n var formatIndex = 0;\n\n var that = this;\n\n function handleResponse(format, data) {\n return format.callback(data);\n }\n\n function doRequest() {\n if (formatIndex >= that._getFeatureInfoFormats.length) {\n // No valid formats, so no features picked.\n return when([]);\n }\n\n var format = that._getFeatureInfoFormats[formatIndex];\n var resource = buildPickFeaturesResource(\n that,\n x,\n y,\n level,\n longitude,\n latitude,\n format.format\n );\n\n ++formatIndex;\n\n if (format.type === \"json\") {\n return resource.fetchJson().then(format.callback).otherwise(doRequest);\n } else if (format.type === \"xml\") {\n return resource.fetchXML().then(format.callback).otherwise(doRequest);\n } else if (format.type === \"text\" || format.type === \"html\") {\n return resource.fetchText().then(format.callback).otherwise(doRequest);\n }\n return resource\n .fetch({\n responseType: format.format,\n })\n .then(handleResponse.bind(undefined, format))\n .otherwise(doRequest);\n }\n\n return doRequest();\n};\n\nvar degreesScratchComputed = false;\nvar degreesScratch = new Rectangle();\nvar projectedScratchComputed = false;\nvar projectedScratch = new Rectangle();\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n degreesScratchComputed = false;\n projectedScratchComputed = false;\n\n var resource = imageryProvider._resource;\n var url = resource.getUrlComponent(true);\n var allTags = imageryProvider._tags;\n var templateValues = {};\n\n var match = url.match(templateRegex);\n if (defined(match)) {\n match.forEach(function (tag) {\n var key = tag.substring(1, tag.length - 1); //strip {}\n if (defined(allTags[key])) {\n templateValues[key] = allTags[key](imageryProvider, x, y, level);\n }\n });\n }\n\n return resource.getDerivedResource({\n request: request,\n templateValues: templateValues,\n });\n}\n\nvar ijScratchComputed = false;\nvar ijScratch = new Cartesian2();\nvar longitudeLatitudeProjectedScratchComputed = false;\n\nfunction buildPickFeaturesResource(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n degreesScratchComputed = false;\n projectedScratchComputed = false;\n ijScratchComputed = false;\n longitudeLatitudeProjectedScratchComputed = false;\n\n var resource = imageryProvider._pickFeaturesResource;\n var url = resource.getUrlComponent(true);\n var allTags = imageryProvider._pickFeaturesTags;\n var templateValues = {};\n var match = url.match(templateRegex);\n if (defined(match)) {\n match.forEach(function (tag) {\n var key = tag.substring(1, tag.length - 1); //strip {}\n if (defined(allTags[key])) {\n templateValues[key] = allTags[key](\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n );\n }\n });\n }\n\n return resource.getDerivedResource({\n templateValues: templateValues,\n });\n}\n\nfunction padWithZerosIfNecessary(imageryProvider, key, value) {\n if (\n imageryProvider &&\n imageryProvider.urlSchemeZeroPadding &&\n imageryProvider.urlSchemeZeroPadding.hasOwnProperty(key)\n ) {\n var paddingTemplate = imageryProvider.urlSchemeZeroPadding[key];\n if (typeof paddingTemplate === \"string\") {\n var paddingTemplateWidth = paddingTemplate.length;\n if (paddingTemplateWidth > 1) {\n value =\n value.length >= paddingTemplateWidth\n ? value\n : new Array(\n paddingTemplateWidth - value.toString().length + 1\n ).join(\"0\") + value;\n }\n }\n }\n return value;\n}\n\nfunction xTag(imageryProvider, x, y, level) {\n return padWithZerosIfNecessary(imageryProvider, \"{x}\", x);\n}\n\nfunction reverseXTag(imageryProvider, x, y, level) {\n var reverseX =\n imageryProvider.tilingScheme.getNumberOfXTilesAtLevel(level) - x - 1;\n return padWithZerosIfNecessary(imageryProvider, \"{reverseX}\", reverseX);\n}\n\nfunction yTag(imageryProvider, x, y, level) {\n return padWithZerosIfNecessary(imageryProvider, \"{y}\", y);\n}\n\nfunction reverseYTag(imageryProvider, x, y, level) {\n var reverseY =\n imageryProvider.tilingScheme.getNumberOfYTilesAtLevel(level) - y - 1;\n return padWithZerosIfNecessary(imageryProvider, \"{reverseY}\", reverseY);\n}\n\nfunction reverseZTag(imageryProvider, x, y, level) {\n var maximumLevel = imageryProvider.maximumLevel;\n var reverseZ =\n defined(maximumLevel) && level < maximumLevel\n ? maximumLevel - level - 1\n : level;\n return padWithZerosIfNecessary(imageryProvider, \"{reverseZ}\", reverseZ);\n}\n\nfunction zTag(imageryProvider, x, y, level) {\n return padWithZerosIfNecessary(imageryProvider, \"{z}\", level);\n}\n\nfunction sTag(imageryProvider, x, y, level) {\n var index = (x + y + level) % imageryProvider._subdomains.length;\n return imageryProvider._subdomains[index];\n}\n\nfunction computeDegrees(imageryProvider, x, y, level) {\n if (degreesScratchComputed) {\n return;\n }\n\n imageryProvider.tilingScheme.tileXYToRectangle(x, y, level, degreesScratch);\n degreesScratch.west = CesiumMath.toDegrees(degreesScratch.west);\n degreesScratch.south = CesiumMath.toDegrees(degreesScratch.south);\n degreesScratch.east = CesiumMath.toDegrees(degreesScratch.east);\n degreesScratch.north = CesiumMath.toDegrees(degreesScratch.north);\n\n degreesScratchComputed = true;\n}\n\nfunction westDegreesTag(imageryProvider, x, y, level) {\n computeDegrees(imageryProvider, x, y, level);\n return degreesScratch.west;\n}\n\nfunction southDegreesTag(imageryProvider, x, y, level) {\n computeDegrees(imageryProvider, x, y, level);\n return degreesScratch.south;\n}\n\nfunction eastDegreesTag(imageryProvider, x, y, level) {\n computeDegrees(imageryProvider, x, y, level);\n return degreesScratch.east;\n}\n\nfunction northDegreesTag(imageryProvider, x, y, level) {\n computeDegrees(imageryProvider, x, y, level);\n return degreesScratch.north;\n}\n\nfunction computeProjected(imageryProvider, x, y, level) {\n if (projectedScratchComputed) {\n return;\n }\n\n imageryProvider.tilingScheme.tileXYToNativeRectangle(\n x,\n y,\n level,\n projectedScratch\n );\n\n projectedScratchComputed = true;\n}\n\nfunction westProjectedTag(imageryProvider, x, y, level) {\n computeProjected(imageryProvider, x, y, level);\n return projectedScratch.west;\n}\n\nfunction southProjectedTag(imageryProvider, x, y, level) {\n computeProjected(imageryProvider, x, y, level);\n return projectedScratch.south;\n}\n\nfunction eastProjectedTag(imageryProvider, x, y, level) {\n computeProjected(imageryProvider, x, y, level);\n return projectedScratch.east;\n}\n\nfunction northProjectedTag(imageryProvider, x, y, level) {\n computeProjected(imageryProvider, x, y, level);\n return projectedScratch.north;\n}\n\nfunction widthTag(imageryProvider, x, y, level) {\n return imageryProvider.tileWidth;\n}\n\nfunction heightTag(imageryProvider, x, y, level) {\n return imageryProvider.tileHeight;\n}\n\nfunction iTag(imageryProvider, x, y, level, longitude, latitude, format) {\n computeIJ(imageryProvider, x, y, level, longitude, latitude);\n return ijScratch.x;\n}\n\nfunction jTag(imageryProvider, x, y, level, longitude, latitude, format) {\n computeIJ(imageryProvider, x, y, level, longitude, latitude);\n return ijScratch.y;\n}\n\nfunction reverseITag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n computeIJ(imageryProvider, x, y, level, longitude, latitude);\n return imageryProvider.tileWidth - ijScratch.x - 1;\n}\n\nfunction reverseJTag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n computeIJ(imageryProvider, x, y, level, longitude, latitude);\n return imageryProvider.tileHeight - ijScratch.y - 1;\n}\n\nvar rectangleScratch = new Rectangle();\nvar longitudeLatitudeProjectedScratch = new Cartesian3();\n\nfunction computeIJ(imageryProvider, x, y, level, longitude, latitude, format) {\n if (ijScratchComputed) {\n return;\n }\n\n computeLongitudeLatitudeProjected(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude\n );\n var projected = longitudeLatitudeProjectedScratch;\n\n var rectangle = imageryProvider.tilingScheme.tileXYToNativeRectangle(\n x,\n y,\n level,\n rectangleScratch\n );\n ijScratch.x =\n ((imageryProvider.tileWidth * (projected.x - rectangle.west)) /\n rectangle.width) |\n 0;\n ijScratch.y =\n ((imageryProvider.tileHeight * (rectangle.north - projected.y)) /\n rectangle.height) |\n 0;\n ijScratchComputed = true;\n}\n\nfunction longitudeDegreesTag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n return CesiumMath.toDegrees(longitude);\n}\n\nfunction latitudeDegreesTag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n return CesiumMath.toDegrees(latitude);\n}\n\nfunction longitudeProjectedTag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n computeLongitudeLatitudeProjected(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude\n );\n return longitudeLatitudeProjectedScratch.x;\n}\n\nfunction latitudeProjectedTag(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n computeLongitudeLatitudeProjected(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude\n );\n return longitudeLatitudeProjectedScratch.y;\n}\n\nvar cartographicScratch = new Cartographic();\n\nfunction computeLongitudeLatitudeProjected(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n format\n) {\n if (longitudeLatitudeProjectedScratchComputed) {\n return;\n }\n\n if (imageryProvider.tilingScheme.projection instanceof GeographicProjection) {\n longitudeLatitudeProjectedScratch.x = CesiumMath.toDegrees(longitude);\n longitudeLatitudeProjectedScratch.y = CesiumMath.toDegrees(latitude);\n } else {\n var cartographic = cartographicScratch;\n cartographic.longitude = longitude;\n cartographic.latitude = latitude;\n imageryProvider.tilingScheme.projection.project(\n cartographic,\n longitudeLatitudeProjectedScratch\n );\n }\n\n longitudeLatitudeProjectedScratchComputed = true;\n}\n\nfunction formatTag(imageryProvider, x, y, level, longitude, latitude, format) {\n return format;\n}\nexport default UrlTemplateImageryProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\n/**\n * @typedef {Object} TileMapServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileMapServiceImageryProvider constructor\n *\n * @property {Resource|String|Promise<Resource>|Promise<String>} [url='.'] Path to image tiles on server.\n * @property {String} [fileExtension='png'] The file extension for images on the server.\n * @property {Credit|String} [credit=''] A credit for the data source, which is displayed on the canvas.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when specifying\n * this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely\n * to result in rendering problems.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {TilingScheme} [tilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles. If this parameter is not provided, a {@link WebMercatorTilingScheme}\n * is used.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @property {Number} [tileWidth=256] Pixel width of image tiles.\n * @property {Number} [tileHeight=256] Pixel height of image tiles.\n * @property {Boolean} [flipXY] Older versions of gdal2tiles.py flipped X and Y values in tilemapresource.xml.\n * Specifying this option will do the same, allowing for loading of these incorrect tilesets.\n */\n\n/**\n * An imagery provider that provides tiled imagery as generated by\n * {@link http://www.maptiler.org/|MapTiler}, {@link http://www.klokan.cz/projects/gdal2tiles/|GDAL2Tiles}, etc.\n *\n * @alias TileMapServiceImageryProvider\n * @constructor\n * @extends UrlTemplateImageryProvider\n *\n * @param {TileMapServiceImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @example\n * var tms = new Cesium.TileMapServiceImageryProvider({\n * url : '../images/cesium_maptiler/Cesium_Logo_Color',\n * fileExtension: 'png',\n * maximumLevel: 4,\n * rectangle: new Cesium.Rectangle(\n * Cesium.Math.toRadians(-120.0),\n * Cesium.Math.toRadians(20.0),\n * Cesium.Math.toRadians(-60.0),\n * Cesium.Math.toRadians(40.0))\n * });\n */\nfunction TileMapServiceImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n var deferred = when.defer();\n UrlTemplateImageryProvider.call(this, deferred.promise);\n\n this._tmsResource = undefined;\n this._xmlResource = undefined;\n this._options = options;\n this._deferred = deferred;\n this._metadataError = undefined;\n\n this._metadataSuccess = this._metadataSuccess.bind(this);\n this._metadataFailure = this._metadataFailure.bind(this);\n this._requestMetadata = this._requestMetadata.bind(this);\n\n var resource;\n var that = this;\n when(options.url)\n .then(function (url) {\n resource = Resource.createIfNeeded(url);\n resource.appendForwardSlash();\n\n that._tmsResource = resource;\n that._xmlResource = resource.getDerivedResource({\n url: \"tilemapresource.xml\",\n });\n\n that._requestMetadata();\n })\n .otherwise(function (e) {\n deferred.reject(e);\n });\n}\n\nif (defined(Object.create)) {\n TileMapServiceImageryProvider.prototype = Object.create(\n UrlTemplateImageryProvider.prototype\n );\n TileMapServiceImageryProvider.prototype.constructor = TileMapServiceImageryProvider;\n}\n\nTileMapServiceImageryProvider.prototype._requestMetadata = function () {\n // Try to load remaining parameters from XML\n this._xmlResource\n .fetchXML()\n .then(this._metadataSuccess)\n .otherwise(this._metadataFailure);\n};\n\n/**\n * Mutates the properties of a given rectangle so it does not extend outside of the given tiling scheme's rectangle\n * @private\n */\nfunction confineRectangleToTilingScheme(rectangle, tilingScheme) {\n if (rectangle.west < tilingScheme.rectangle.west) {\n rectangle.west = tilingScheme.rectangle.west;\n }\n if (rectangle.east > tilingScheme.rectangle.east) {\n rectangle.east = tilingScheme.rectangle.east;\n }\n if (rectangle.south < tilingScheme.rectangle.south) {\n rectangle.south = tilingScheme.rectangle.south;\n }\n if (rectangle.north > tilingScheme.rectangle.north) {\n rectangle.north = tilingScheme.rectangle.north;\n }\n return rectangle;\n}\n\nfunction calculateSafeMinimumDetailLevel(\n tilingScheme,\n rectangle,\n minimumLevel\n) {\n // Check the number of tiles at the minimum level. If it's more than four,\n // try requesting the lower levels anyway, because starting at the higher minimum\n // level will cause too many tiles to be downloaded and rendered.\n var swTile = tilingScheme.positionToTileXY(\n Rectangle.southwest(rectangle),\n minimumLevel\n );\n var neTile = tilingScheme.positionToTileXY(\n Rectangle.northeast(rectangle),\n minimumLevel\n );\n var tileCount =\n (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);\n if (tileCount > 4) {\n return 0;\n }\n return minimumLevel;\n}\n\nTileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {\n var tileFormatRegex = /tileformat/i;\n var tileSetRegex = /tileset/i;\n var tileSetsRegex = /tilesets/i;\n var bboxRegex = /boundingbox/i;\n var format, bbox, tilesets;\n var tilesetsList = []; //list of TileSets\n var xmlResource = this._xmlResource;\n var metadataError = this._metadataError;\n var deferred = this._deferred;\n var requestMetadata = this._requestMetadata;\n\n // Allowing options properties (already copied to that) to override XML values\n\n // Iterate XML Document nodes for properties\n var nodeList = xml.childNodes[0].childNodes;\n for (var i = 0; i < nodeList.length; i++) {\n if (tileFormatRegex.test(nodeList.item(i).nodeName)) {\n format = nodeList.item(i);\n } else if (tileSetsRegex.test(nodeList.item(i).nodeName)) {\n tilesets = nodeList.item(i); // Node list of TileSets\n var tileSetNodes = nodeList.item(i).childNodes;\n // Iterate the nodes to find all TileSets\n for (var j = 0; j < tileSetNodes.length; j++) {\n if (tileSetRegex.test(tileSetNodes.item(j).nodeName)) {\n // Add them to tilesets list\n tilesetsList.push(tileSetNodes.item(j));\n }\n }\n } else if (bboxRegex.test(nodeList.item(i).nodeName)) {\n bbox = nodeList.item(i);\n }\n }\n\n var message;\n if (!defined(tilesets) || !defined(bbox)) {\n message =\n \"Unable to find expected tilesets or bbox attributes in \" +\n xmlResource.url +\n \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n this,\n this.errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n if (!metadataError.retry) {\n deferred.reject(new RuntimeError(message));\n }\n this._metadataError = metadataError;\n return;\n }\n\n var options = this._options;\n var fileExtension = defaultValue(\n options.fileExtension,\n format.getAttribute(\"extension\")\n );\n var tileWidth = defaultValue(\n options.tileWidth,\n parseInt(format.getAttribute(\"width\"), 10)\n );\n var tileHeight = defaultValue(\n options.tileHeight,\n parseInt(format.getAttribute(\"height\"), 10)\n );\n var minimumLevel = defaultValue(\n options.minimumLevel,\n parseInt(tilesetsList[0].getAttribute(\"order\"), 10)\n );\n var maximumLevel = defaultValue(\n options.maximumLevel,\n parseInt(tilesetsList[tilesetsList.length - 1].getAttribute(\"order\"), 10)\n );\n var tilingSchemeName = tilesets.getAttribute(\"profile\");\n var tilingScheme = options.tilingScheme;\n\n if (!defined(tilingScheme)) {\n if (\n tilingSchemeName === \"geodetic\" ||\n tilingSchemeName === \"global-geodetic\"\n ) {\n tilingScheme = new GeographicTilingScheme({\n ellipsoid: options.ellipsoid,\n });\n } else if (\n tilingSchemeName === \"mercator\" ||\n tilingSchemeName === \"global-mercator\"\n ) {\n tilingScheme = new WebMercatorTilingScheme({\n ellipsoid: options.ellipsoid,\n });\n } else {\n message =\n xmlResource.url +\n \"specifies an unsupported profile attribute, \" +\n tilingSchemeName +\n \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n this,\n this.errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n if (!metadataError.retry) {\n deferred.reject(new RuntimeError(message));\n }\n this._metadataError = metadataError;\n return;\n }\n }\n\n // rectangle handling\n var rectangle = Rectangle.clone(options.rectangle);\n\n if (!defined(rectangle)) {\n var sw;\n var ne;\n var swXY;\n var neXY;\n\n // In older versions of gdal x and y values were flipped, which is why we check for an option to flip\n // the values here as well. Unfortunately there is no way to autodetect whether flipping is needed.\n var flipXY = defaultValue(options.flipXY, false);\n if (flipXY) {\n swXY = new Cartesian2(\n parseFloat(bbox.getAttribute(\"miny\")),\n parseFloat(bbox.getAttribute(\"minx\"))\n );\n neXY = new Cartesian2(\n parseFloat(bbox.getAttribute(\"maxy\")),\n parseFloat(bbox.getAttribute(\"maxx\"))\n );\n } else {\n swXY = new Cartesian2(\n parseFloat(bbox.getAttribute(\"minx\")),\n parseFloat(bbox.getAttribute(\"miny\"))\n );\n neXY = new Cartesian2(\n parseFloat(bbox.getAttribute(\"maxx\")),\n parseFloat(bbox.getAttribute(\"maxy\"))\n );\n }\n\n // Determine based on the profile attribute if this tileset was generated by gdal2tiles.py, which\n // uses 'mercator' and 'geodetic' profiles, or by a tool compliant with the TMS standard, which is\n // 'global-mercator' and 'global-geodetic' profiles. In the gdal2Tiles case, X and Y are always in\n // geodetic degrees.\n var isGdal2tiles =\n tilingSchemeName === \"geodetic\" || tilingSchemeName === \"mercator\";\n if (\n tilingScheme.projection instanceof GeographicProjection ||\n isGdal2tiles\n ) {\n sw = Cartographic.fromDegrees(swXY.x, swXY.y);\n ne = Cartographic.fromDegrees(neXY.x, neXY.y);\n } else {\n var projection = tilingScheme.projection;\n sw = projection.unproject(swXY);\n ne = projection.unproject(neXY);\n }\n\n rectangle = new Rectangle(\n sw.longitude,\n sw.latitude,\n ne.longitude,\n ne.latitude\n );\n }\n\n // The rectangle must not be outside the bounds allowed by the tiling scheme.\n rectangle = confineRectangleToTilingScheme(rectangle, tilingScheme);\n // clamp our minimum detail level to something that isn't going to request a ridiculous number of tiles\n minimumLevel = calculateSafeMinimumDetailLevel(\n tilingScheme,\n rectangle,\n minimumLevel\n );\n\n var templateResource = this._tmsResource.getDerivedResource({\n url: \"{z}/{x}/{reverseY}.\" + fileExtension,\n });\n\n deferred.resolve({\n url: templateResource,\n tilingScheme: tilingScheme,\n rectangle: rectangle,\n tileWidth: tileWidth,\n tileHeight: tileHeight,\n minimumLevel: minimumLevel,\n maximumLevel: maximumLevel,\n tileDiscardPolicy: options.tileDiscardPolicy,\n credit: options.credit,\n });\n};\n\nTileMapServiceImageryProvider.prototype._metadataFailure = function (error) {\n // Can't load XML, still allow options and defaults\n var options = this._options;\n var fileExtension = defaultValue(options.fileExtension, \"png\");\n var tileWidth = defaultValue(options.tileWidth, 256);\n var tileHeight = defaultValue(options.tileHeight, 256);\n var maximumLevel = options.maximumLevel;\n var tilingScheme = defined(options.tilingScheme)\n ? options.tilingScheme\n : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });\n\n var rectangle = defaultValue(options.rectangle, tilingScheme.rectangle);\n // The rectangle must not be outside the bounds allowed by the tiling scheme.\n rectangle = confineRectangleToTilingScheme(rectangle, tilingScheme);\n\n // make sure we use a safe minimum detail level, so we don't request a ridiculous number of tiles\n var minimumLevel = calculateSafeMinimumDetailLevel(\n tilingScheme,\n rectangle,\n options.maximumLevel\n );\n\n var templateResource = this._tmsResource.getDerivedResource({\n url: \"{z}/{x}/{reverseY}.\" + fileExtension,\n });\n\n this._deferred.resolve({\n url: templateResource,\n tilingScheme: tilingScheme,\n rectangle: rectangle,\n tileWidth: tileWidth,\n tileHeight: tileHeight,\n minimumLevel: minimumLevel,\n maximumLevel: maximumLevel,\n tileDiscardPolicy: options.tileDiscardPolicy,\n credit: options.credit,\n });\n};\n\nexport default TileMapServiceImageryProvider;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {Object} GoogleEarthEnterpriseMapsProvider.ConstructorOptions\n *\n * Initialization options for the GoogleEarthEnterpriseMapsProvider constructor\n *\n * @property {Resource|String} url The url of the Google Earth server hosting the imagery.\n * @property {Number} channel The channel (id) to be used when requesting data from the server.\n * The channel number can be found by looking at the json file located at:\n * earth.localdomain/default_map/query?request=Json&vars=geeServerDefs The /default_map path may\n * differ depending on your Google Earth Enterprise server configuration. Look for the \"id\" that\n * is associated with a \"ImageryMaps\" requestType. There may be more than one id available.\n * Example:\n * {\n * layers: [\n * {\n * id: 1002,\n * requestType: \"ImageryMaps\"\n * },\n * {\n * id: 1007,\n * requestType: \"VectorMapsRaster\"\n * }\n * ]\n * }\n * @property {String} [path=\"/default_map\"] The path of the Google Earth server hosting the imagery.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the Google Earth\n * Enterprise server, or undefined if there is no limit.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n * is invalid and should be discarded. To ensure that no tiles are discarded, construct and pass\n * a {@link NeverTileDiscardPolicy} for this parameter.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n */\n\n/**\n * Provides tiled imagery using the Google Earth Imagery API.\n *\n * Notes: This imagery provider does not work with the public Google Earth servers. It works with the\n * Google Earth Enterprise Server.\n *\n * By default the Google Earth Enterprise server does not set the\n * {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} headers. You can either\n * use a proxy server which adds these headers, or in the /opt/google/gehttpd/conf/gehttpd.conf\n * and add the 'Header set Access-Control-Allow-Origin \"*\"' option to the '<Directory />' and\n * '<Directory \"/opt/google/gehttpd/htdocs\">' directives.\n *\n * This provider is for use with 2D Maps API as part of Google Earth Enterprise. For 3D Earth API uses, it\n * is necessary to use {@link GoogleEarthEnterpriseImageryProvider}\n *\n * @alias GoogleEarthEnterpriseMapsProvider\n * @constructor\n *\n * @param {GoogleEarthEnterpriseMapsProvider.ConstructorOptions} options Object describing initialization options\n *\n * @exception {RuntimeError} Could not find layer with channel (id) of <code>options.channel</code>.\n * @exception {RuntimeError} Could not find a version in channel (id) <code>options.channel</code>.\n * @exception {RuntimeError} Unsupported projection <code>data.projection</code>.\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * var google = new Cesium.GoogleEarthEnterpriseMapsProvider({\n * url : 'https://earth.localdomain',\n * channel : 1008\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseMapsProvider(options) {\n options = defaultValue(options, {});\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n if (!defined(options.channel)) {\n throw new DeveloperError(\"options.channel is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default 1.9\n */\n this.defaultGamma = 1.9;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var url = options.url;\n var path = defaultValue(options.path, \"/default_map\");\n\n var resource = Resource.createIfNeeded(url).getDerivedResource({\n // We used to just append path to url, so now that we do proper URI resolution, removed the /\n url: path[0] === \"/\" ? path.substring(1) : path,\n });\n\n resource.appendForwardSlash();\n\n this._resource = resource;\n this._url = url;\n this._path = path;\n this._tileDiscardPolicy = options.tileDiscardPolicy;\n this._channel = options.channel;\n this._requestType = \"ImageryMaps\";\n this._credit = new Credit(\n '<a href=\"http://www.google.com/enterprise/mapsearth/products/earthenterprise.html\"><img src=\"' +\n GoogleEarthEnterpriseMapsProvider.logoUrl +\n '\" title=\"Google Imagery\"/></a>'\n );\n\n this._tilingScheme = undefined;\n\n this._version = undefined;\n\n this._tileWidth = 256;\n this._tileHeight = 256;\n this._maximumLevel = options.maximumLevel;\n\n this._errorEvent = new Event();\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n var metadataResource = resource.getDerivedResource({\n url: \"query\",\n queryParameters: {\n request: \"Json\",\n vars: \"geeServerDefs\",\n is2d: \"t\",\n },\n });\n var that = this;\n var metadataError;\n\n function metadataSuccess(text) {\n var data;\n\n // The Google Earth server sends malformed JSON data currently...\n try {\n // First, try parsing it like normal in case a future version sends correctly formatted JSON\n data = JSON.parse(text);\n } catch (e) {\n // Quote object strings manually, then try parsing again\n data = JSON.parse(\n text.replace(/([\\[\\{,])[\\n\\r ]*([A-Za-z0-9]+)[\\n\\r ]*:/g, '$1\"$2\":')\n );\n }\n\n var layer;\n for (var i = 0; i < data.layers.length; i++) {\n if (data.layers[i].id === that._channel) {\n layer = data.layers[i];\n break;\n }\n }\n\n var message;\n\n if (!defined(layer)) {\n message =\n \"Could not find layer with channel (id) of \" + that._channel + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n throw new RuntimeError(message);\n }\n\n if (!defined(layer.version)) {\n message =\n \"Could not find a version in channel (id) \" + that._channel + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n throw new RuntimeError(message);\n }\n that._version = layer.version;\n\n if (defined(data.projection) && data.projection === \"flat\") {\n that._tilingScheme = new GeographicTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 2,\n rectangle: new Rectangle(-Math.PI, -Math.PI, Math.PI, Math.PI),\n ellipsoid: options.ellipsoid,\n });\n // Default to mercator projection when projection is undefined\n } else if (!defined(data.projection) || data.projection === \"mercator\") {\n that._tilingScheme = new WebMercatorTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 2,\n ellipsoid: options.ellipsoid,\n });\n } else {\n message = \"Unsupported projection \" + data.projection + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n throw new RuntimeError(message);\n }\n\n that._ready = true;\n that._readyPromise.resolve(true);\n TileProviderError.handleSuccess(metadataError);\n }\n\n function metadataFailure(e) {\n var message =\n \"An error occurred while accessing \" + metadataResource.url + \".\";\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n message,\n undefined,\n undefined,\n undefined,\n requestMetadata\n );\n that._readyPromise.reject(new RuntimeError(message));\n }\n\n function requestMetadata() {\n var metadata = metadataResource.fetchText();\n when(metadata, metadataSuccess, metadataFailure);\n }\n\n requestMetadata();\n}\n\nObject.defineProperties(GoogleEarthEnterpriseMapsProvider.prototype, {\n /**\n * Gets the URL of the Google Earth MapServer.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._url;\n },\n },\n\n /**\n * Gets the url path of the data on the Google Earth server.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {String}\n * @readonly\n */\n path: {\n get: function () {\n return this._path;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the imagery channel (id) currently being used.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number}\n * @readonly\n */\n channel: {\n get: function () {\n return this._channel;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the version of the data used by this provider. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Number}\n * @readonly\n */\n version: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"version must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._version;\n },\n },\n\n /**\n * Gets the type of data that is being requested from the provider. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {String}\n * @readonly\n */\n requestType: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestType must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._requestType;\n },\n },\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"rectangle must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.getTileCredits = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link GoogleEarthEnterpriseMapsProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var resource = this._resource.getDerivedResource({\n url: \"query\",\n request: request,\n queryParameters: {\n request: this._requestType,\n channel: this._channel,\n version: this._version,\n x: x,\n y: y,\n z: level + 1, // Google Earth starts with a zoom level of 1, not 0\n },\n });\n\n return ImageryProvider.loadImage(this, resource);\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\n\nGoogleEarthEnterpriseMapsProvider._logoUrl = undefined;\n\nObject.defineProperties(GoogleEarthEnterpriseMapsProvider, {\n /**\n * Gets or sets the URL to the Google Earth logo for display in the credit.\n * @memberof GoogleEarthEnterpriseMapsProvider\n * @type {String}\n */\n logoUrl: {\n get: function () {\n if (!defined(GoogleEarthEnterpriseMapsProvider._logoUrl)) {\n GoogleEarthEnterpriseMapsProvider._logoUrl = buildModuleUrl(\n \"Assets/Images/google_earth_credit.png\"\n );\n }\n return GoogleEarthEnterpriseMapsProvider._logoUrl;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n\n GoogleEarthEnterpriseMapsProvider._logoUrl = value;\n },\n },\n});\nexport default GoogleEarthEnterpriseMapsProvider;\n","import Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MapboxApi from \"../Core/MapboxApi.js\";\nimport Resource from \"../Core/Resource.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nvar trailingSlashRegex = /\\/$/;\nvar defaultCredit = new Credit(\n '© <a href=\"https://www.mapbox.com/about/maps/\">Mapbox</a> © <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> <strong><a href=\"https://www.mapbox.com/map-feedback/\">Improve this map</a></strong>'\n);\n\n/**\n * @typedef {Object} MapboxImageryProvider.ConstructorOptions\n *\n * Initialization options for the MapboxImageryProvider constructor\n *\n * @property {String} [url='https://api.mapbox.com/v4/'] The Mapbox server url.\n * @property {String} mapId The Mapbox Map ID.\n * @property {String} [accessToken] The public access token for the imagery.\n * @property {String} [format='png'] The format of the image request.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when specifying\n * this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely\n * to result in rendering problems.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Provides tiled imagery hosted by Mapbox.\n *\n * @alias MapboxImageryProvider\n * @constructor\n *\n * @param {MapboxImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Mapbox tile provider\n * var mapbox = new Cesium.MapboxImageryProvider({\n * mapId: 'mapbox.streets',\n * accessToken: 'thisIsMyAccessToken'\n * });\n *\n * @see {@link https://www.mapbox.com/developers/api/maps/#tiles}\n * @see {@link https://www.mapbox.com/developers/api/#access-tokens}\n */\nfunction MapboxImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var mapId = options.mapId;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(mapId)) {\n throw new DeveloperError(\"options.mapId is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(\n defaultValue(options.url, \"https://{s}.tiles.mapbox.com/v4/\")\n );\n\n var accessToken = MapboxApi.getAccessToken(options.accessToken);\n this._mapId = mapId;\n this._accessToken = accessToken;\n\n this._accessTokenErrorCredit = Credit.clone(\n MapboxApi.getErrorCredit(options.accessToken)\n );\n var format = defaultValue(options.format, \"png\");\n if (!/\\./.test(format)) {\n format = \".\" + format;\n }\n this._format = format;\n\n var templateUrl = resource.getUrlComponent();\n if (!trailingSlashRegex.test(templateUrl)) {\n templateUrl += \"/\";\n }\n templateUrl += mapId + \"/{z}/{x}/{y}\" + this._format;\n resource.url = templateUrl;\n\n resource.setQueryParameters({\n access_token: accessToken,\n });\n\n var credit;\n if (defined(options.credit)) {\n credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n } else {\n credit = defaultCredit;\n }\n\n this._resource = resource;\n this._imageryProvider = new UrlTemplateImageryProvider({\n url: resource,\n credit: credit,\n ellipsoid: options.ellipsoid,\n minimumLevel: options.minimumLevel,\n maximumLevel: options.maximumLevel,\n rectangle: options.rectangle,\n });\n}\n\nObject.defineProperties(MapboxImageryProvider.prototype, {\n /**\n * Gets the URL of the Mapbox server.\n * @memberof MapboxImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._imageryProvider.url;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof MapboxImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._imageryProvider.ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof MapboxImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._imageryProvider.readyPromise;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by the instance. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._imageryProvider.rectangle;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._imageryProvider.tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._imageryProvider.tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return this._imageryProvider.maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true. Generally,\n * a minimum level should only be used when the rectangle of the imagery is small\n * enough that the number of tiles at the minimum level is small. An imagery\n * provider with more than a few tiles at the minimum level will lead to\n * rendering problems.\n * @memberof MapboxImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return this._imageryProvider.minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._imageryProvider.tilingScheme;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return this._imageryProvider.tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof MapboxImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._imageryProvider.errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n * @memberof MapboxImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._imageryProvider.credit;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof MapboxImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._imageryProvider.proxy;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof MapboxImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return this._imageryProvider.hasAlphaChannel;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nMapboxImageryProvider.prototype.getTileCredits = function (x, y, level) {\n if (defined(this._accessTokenErrorCredit)) {\n return [this._accessTokenErrorCredit];\n }\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link MapboxImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nMapboxImageryProvider.prototype.requestImage = function (x, y, level, request) {\n return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link MapboxImageryProvider#ready} returns true.\n * This function is optional, so it may not exist on all ImageryProviders.\n *\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nMapboxImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n// Exposed for tests\nMapboxImageryProvider._defaultCredit = defaultCredit;\nexport default MapboxImageryProvider;\n","import Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {Object} SingleTileImageryProvider.ConstructorOptions\n *\n * Initialization options for the SingleTileImageryProvider constructor\n *\n * @property {Resource|String} url The url for the tile.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n */\n\n/**\n * Provides a single, top-level imagery tile. The single image is assumed to use a\n * {@link GeographicTilingScheme}.\n *\n * @alias SingleTileImageryProvider\n * @constructor\n *\n * @param {SingleTileImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n */\nfunction SingleTileImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(options.url);\n\n var rectangle = defaultValue(options.rectangle, Rectangle.MAX_VALUE);\n var tilingScheme = new GeographicTilingScheme({\n rectangle: rectangle,\n numberOfLevelZeroTilesX: 1,\n numberOfLevelZeroTilesY: 1,\n ellipsoid: options.ellipsoid,\n });\n this._tilingScheme = tilingScheme;\n this._resource = resource;\n this._image = undefined;\n this._texture = undefined;\n this._tileWidth = 0;\n this._tileHeight = 0;\n\n this._errorEvent = new Event();\n\n this._ready = false;\n this._readyPromise = when.defer();\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n var that = this;\n var error;\n\n function success(image) {\n that._image = image;\n that._tileWidth = image.width;\n that._tileHeight = image.height;\n that._ready = true;\n that._readyPromise.resolve(true);\n TileProviderError.handleSuccess(that._errorEvent);\n }\n\n function failure(e) {\n var message = \"Failed to load image \" + resource.url + \".\";\n error = TileProviderError.handleError(\n error,\n that,\n that._errorEvent,\n message,\n 0,\n 0,\n 0,\n doRequest,\n e\n );\n that._readyPromise.reject(new RuntimeError(message));\n }\n\n function doRequest() {\n ImageryProvider.loadImage(null, resource).then(success).otherwise(failure);\n }\n\n doRequest();\n}\n\nObject.defineProperties(SingleTileImageryProvider.prototype, {\n /**\n * Gets the URL of the single, top-level imagery tile.\n * @memberof SingleTileImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return undefined;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link SingleTileImageryProvider#ready} returns true.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof SingleTileImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nSingleTileImageryProvider.prototype.getTileCredits = function (x, y, level) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link SingleTileImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nSingleTileImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._image;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nSingleTileImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\nexport default SingleTileImageryProvider;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport ImageryLayerFeatureInfo from \"./ImageryLayerFeatureInfo.js\";\n\n/**\n * Describes the format in which to request GetFeatureInfo from a Web Map Service (WMS) server.\n *\n * @alias GetFeatureInfoFormat\n * @constructor\n *\n * @param {String} type The type of response to expect from a GetFeatureInfo request. Valid\n * values are 'json', 'xml', 'html', or 'text'.\n * @param {String} [format] The info format to request from the WMS server. This is usually a\n * MIME type such as 'application/json' or text/xml'. If this parameter is not specified, the provider will request 'json'\n * using 'application/json', 'xml' using 'text/xml', 'html' using 'text/html', and 'text' using 'text/plain'.\n * @param {Function} [callback] A function to invoke with the GetFeatureInfo response from the WMS server\n * in order to produce an array of picked {@link ImageryLayerFeatureInfo} instances. If this parameter is not specified,\n * a default function for the type of response is used.\n */\nfunction GetFeatureInfoFormat(type, format, callback) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(type)) {\n throw new DeveloperError(\"type is required.\");\n }\n //>>includeEnd('debug');\n\n this.type = type;\n\n if (!defined(format)) {\n if (type === \"json\") {\n format = \"application/json\";\n } else if (type === \"xml\") {\n format = \"text/xml\";\n } else if (type === \"html\") {\n format = \"text/html\";\n } else if (type === \"text\") {\n format = \"text/plain\";\n }\n //>>includeStart('debug', pragmas.debug);\n else {\n throw new DeveloperError(\n 'format is required when type is not \"json\", \"xml\", \"html\", or \"text\".'\n );\n }\n //>>includeEnd('debug');\n }\n\n this.format = format;\n\n if (!defined(callback)) {\n if (type === \"json\") {\n callback = geoJsonToFeatureInfo;\n } else if (type === \"xml\") {\n callback = xmlToFeatureInfo;\n } else if (type === \"html\") {\n callback = textToFeatureInfo;\n } else if (type === \"text\") {\n callback = textToFeatureInfo;\n }\n //>>includeStart('debug', pragmas.debug);\n else {\n throw new DeveloperError(\n 'callback is required when type is not \"json\", \"xml\", \"html\", or \"text\".'\n );\n }\n //>>includeEnd('debug');\n }\n\n this.callback = callback;\n}\n\nfunction geoJsonToFeatureInfo(json) {\n var result = [];\n\n var features = json.features;\n for (var i = 0; i < features.length; ++i) {\n var feature = features[i];\n\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.data = feature;\n featureInfo.properties = feature.properties;\n featureInfo.configureNameFromProperties(feature.properties);\n featureInfo.configureDescriptionFromProperties(feature.properties);\n\n // If this is a point feature, use the coordinates of the point.\n if (defined(feature.geometry) && feature.geometry.type === \"Point\") {\n var longitude = feature.geometry.coordinates[0];\n var latitude = feature.geometry.coordinates[1];\n featureInfo.position = Cartographic.fromDegrees(longitude, latitude);\n }\n\n result.push(featureInfo);\n }\n\n return result;\n}\n\nvar mapInfoMxpNamespace = \"http://www.mapinfo.com/mxp\";\nvar esriWmsNamespace = \"http://www.esri.com/wms\";\nvar wfsNamespace = \"http://www.opengis.net/wfs\";\nvar gmlNamespace = \"http://www.opengis.net/gml\";\n\nfunction xmlToFeatureInfo(xml) {\n var documentElement = xml.documentElement;\n if (\n documentElement.localName === \"MultiFeatureCollection\" &&\n documentElement.namespaceURI === mapInfoMxpNamespace\n ) {\n // This looks like a MapInfo MXP response\n return mapInfoXmlToFeatureInfo(xml);\n } else if (\n documentElement.localName === \"FeatureInfoResponse\" &&\n documentElement.namespaceURI === esriWmsNamespace\n ) {\n // This looks like an Esri WMS response\n return esriXmlToFeatureInfo(xml);\n } else if (\n documentElement.localName === \"FeatureCollection\" &&\n documentElement.namespaceURI === wfsNamespace\n ) {\n // This looks like a WFS/GML response.\n return gmlToFeatureInfo(xml);\n } else if (documentElement.localName === \"ServiceExceptionReport\") {\n // This looks like a WMS server error, so no features picked.\n throw new RuntimeError(\n new XMLSerializer().serializeToString(documentElement)\n );\n } else if (documentElement.localName === \"msGMLOutput\") {\n return msGmlToFeatureInfo(xml);\n } else {\n // Unknown response type, so just dump the XML itself into the description.\n return unknownXmlToFeatureInfo(xml);\n }\n}\n\nfunction mapInfoXmlToFeatureInfo(xml) {\n var result = [];\n\n var multiFeatureCollection = xml.documentElement;\n\n var features = multiFeatureCollection.getElementsByTagNameNS(\n mapInfoMxpNamespace,\n \"Feature\"\n );\n for (var featureIndex = 0; featureIndex < features.length; ++featureIndex) {\n var feature = features[featureIndex];\n\n var properties = {};\n\n var propertyElements = feature.getElementsByTagNameNS(\n mapInfoMxpNamespace,\n \"Val\"\n );\n for (\n var propertyIndex = 0;\n propertyIndex < propertyElements.length;\n ++propertyIndex\n ) {\n var propertyElement = propertyElements[propertyIndex];\n if (propertyElement.hasAttribute(\"ref\")) {\n var name = propertyElement.getAttribute(\"ref\");\n var value = propertyElement.textContent.trim();\n properties[name] = value;\n }\n }\n\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.data = feature;\n featureInfo.properties = properties;\n featureInfo.configureNameFromProperties(properties);\n featureInfo.configureDescriptionFromProperties(properties);\n result.push(featureInfo);\n }\n\n return result;\n}\n\nfunction esriXmlToFeatureInfo(xml) {\n var featureInfoResponse = xml.documentElement;\n var result = [];\n var properties;\n\n var features = featureInfoResponse.getElementsByTagNameNS(\"*\", \"FIELDS\");\n if (features.length > 0) {\n // Standard esri format\n for (var featureIndex = 0; featureIndex < features.length; ++featureIndex) {\n var feature = features[featureIndex];\n\n properties = {};\n\n var propertyAttributes = feature.attributes;\n for (\n var attributeIndex = 0;\n attributeIndex < propertyAttributes.length;\n ++attributeIndex\n ) {\n var attribute = propertyAttributes[attributeIndex];\n properties[attribute.name] = attribute.value;\n }\n\n result.push(\n imageryLayerFeatureInfoFromDataAndProperties(feature, properties)\n );\n }\n } else {\n // Thredds format -- looks like esri, but instead of containing FIELDS, contains FeatureInfo element\n var featureInfoElements = featureInfoResponse.getElementsByTagNameNS(\n \"*\",\n \"FeatureInfo\"\n );\n for (\n var featureInfoElementIndex = 0;\n featureInfoElementIndex < featureInfoElements.length;\n ++featureInfoElementIndex\n ) {\n var featureInfoElement = featureInfoElements[featureInfoElementIndex];\n\n properties = {};\n\n // node.children is not supported in IE9-11, so use childNodes and check that child.nodeType is an element\n var featureInfoChildren = featureInfoElement.childNodes;\n for (\n var childIndex = 0;\n childIndex < featureInfoChildren.length;\n ++childIndex\n ) {\n var child = featureInfoChildren[childIndex];\n if (child.nodeType === Node.ELEMENT_NODE) {\n properties[child.localName] = child.textContent;\n }\n }\n\n result.push(\n imageryLayerFeatureInfoFromDataAndProperties(\n featureInfoElement,\n properties\n )\n );\n }\n }\n\n return result;\n}\n\nfunction gmlToFeatureInfo(xml) {\n var result = [];\n\n var featureCollection = xml.documentElement;\n\n var featureMembers = featureCollection.getElementsByTagNameNS(\n gmlNamespace,\n \"featureMember\"\n );\n for (\n var featureIndex = 0;\n featureIndex < featureMembers.length;\n ++featureIndex\n ) {\n var featureMember = featureMembers[featureIndex];\n\n var properties = {};\n getGmlPropertiesRecursively(featureMember, properties);\n result.push(\n imageryLayerFeatureInfoFromDataAndProperties(featureMember, properties)\n );\n }\n\n return result;\n}\n\n// msGmlToFeatureInfo is similar to gmlToFeatureInfo, but assumes different XML structure\n// eg. <msGMLOutput> <ABC_layer> <ABC_feature> <foo>bar</foo> ... </ABC_feature> </ABC_layer> </msGMLOutput>\n\nfunction msGmlToFeatureInfo(xml) {\n var result = [];\n\n // Find the first child. Except for IE, this would work:\n // var layer = xml.documentElement.children[0];\n var layer;\n var children = xml.documentElement.childNodes;\n for (var i = 0; i < children.length; i++) {\n if (children[i].nodeType === Node.ELEMENT_NODE) {\n layer = children[i];\n break;\n }\n }\n if (!defined(layer)) {\n throw new RuntimeError(\n \"Unable to find first child of the feature info xml document\"\n );\n }\n var featureMembers = layer.childNodes;\n for (\n var featureIndex = 0;\n featureIndex < featureMembers.length;\n ++featureIndex\n ) {\n var featureMember = featureMembers[featureIndex];\n if (featureMember.nodeType === Node.ELEMENT_NODE) {\n var properties = {};\n getGmlPropertiesRecursively(featureMember, properties);\n result.push(\n imageryLayerFeatureInfoFromDataAndProperties(featureMember, properties)\n );\n }\n }\n\n return result;\n}\n\nfunction getGmlPropertiesRecursively(gmlNode, properties) {\n var isSingleValue = true;\n\n for (var i = 0; i < gmlNode.childNodes.length; ++i) {\n var child = gmlNode.childNodes[i];\n\n if (child.nodeType === Node.ELEMENT_NODE) {\n isSingleValue = false;\n }\n\n if (\n child.localName === \"Point\" ||\n child.localName === \"LineString\" ||\n child.localName === \"Polygon\" ||\n child.localName === \"boundedBy\"\n ) {\n continue;\n }\n\n if (\n child.hasChildNodes() &&\n getGmlPropertiesRecursively(child, properties)\n ) {\n properties[child.localName] = child.textContent;\n }\n }\n\n return isSingleValue;\n}\n\nfunction imageryLayerFeatureInfoFromDataAndProperties(data, properties) {\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.data = data;\n featureInfo.properties = properties;\n featureInfo.configureNameFromProperties(properties);\n featureInfo.configureDescriptionFromProperties(properties);\n return featureInfo;\n}\n\nfunction unknownXmlToFeatureInfo(xml) {\n var xmlText = new XMLSerializer().serializeToString(xml);\n\n var element = document.createElement(\"div\");\n var pre = document.createElement(\"pre\");\n pre.textContent = xmlText;\n element.appendChild(pre);\n\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.data = xml;\n featureInfo.description = element.innerHTML;\n return [featureInfo];\n}\n\nvar emptyBodyRegex = /<body>\\s*<\\/body>/im;\nvar wmsServiceExceptionReportRegex = /<ServiceExceptionReport([\\s\\S]*)<\\/ServiceExceptionReport>/im;\nvar titleRegex = /<title>([\\s\\S]*)<\\/title>/im;\n\nfunction textToFeatureInfo(text) {\n // If the text is HTML and it has an empty body tag, assume it means no features were found.\n if (emptyBodyRegex.test(text)) {\n return undefined;\n }\n\n // If this is a WMS exception report, treat it as \"no features found\" rather than showing\n // bogus feature info.\n if (wmsServiceExceptionReportRegex.test(text)) {\n return undefined;\n }\n\n // If the text has a <title> element, use it as the name.\n var name;\n var title = titleRegex.exec(text);\n if (title && title.length > 1) {\n name = title[1];\n }\n\n var featureInfo = new ImageryLayerFeatureInfo();\n featureInfo.name = name;\n featureInfo.description = text;\n featureInfo.data = text;\n return [featureInfo];\n}\nexport default GetFeatureInfoFormat;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestType from \"../Core/RequestType.js\";\n\n/**\n * Provides functionality for ImageryProviders that have time dynamic imagery\n *\n * @alias TimeDynamicImagery\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Clock} options.clock A Clock instance that is used when determining the value for the time dimension. Required when <code>options.times</code> is specified.\n * @param {TimeIntervalCollection} options.times TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.\n * @param {Function} options.requestImageFunction A function that will request imagery tiles.\n * @param {Function} options.reloadFunction A function that will be called when all imagery tiles need to be reloaded.\n */\nfunction TimeDynamicImagery(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.clock\", options.clock);\n Check.typeOf.object(\"options.times\", options.times);\n Check.typeOf.func(\n \"options.requestImageFunction\",\n options.requestImageFunction\n );\n Check.typeOf.func(\"options.reloadFunction\", options.reloadFunction);\n //>>includeEnd('debug');\n\n this._tileCache = {};\n this._tilesRequestedForInterval = [];\n\n var clock = (this._clock = options.clock);\n this._times = options.times;\n this._requestImageFunction = options.requestImageFunction;\n this._reloadFunction = options.reloadFunction;\n this._currentIntervalIndex = -1;\n\n clock.onTick.addEventListener(this._clockOnTick, this);\n this._clockOnTick(clock);\n}\n\nObject.defineProperties(TimeDynamicImagery.prototype, {\n /**\n * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n * @memberof TimeDynamicImagery.prototype\n * @type {Clock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._clock !== value) {\n this._clock = value;\n this._clockOnTick(value);\n this._reloadFunction();\n }\n },\n },\n /**\n * Gets or sets a time interval collection.\n * @memberof TimeDynamicImagery.prototype\n * @type {TimeIntervalCollection}\n */\n times: {\n get: function () {\n return this._times;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n if (this._times !== value) {\n this._times = value;\n this._clockOnTick(this._clock);\n this._reloadFunction();\n }\n },\n },\n /**\n * Gets the current interval.\n * @memberof TimeDynamicImagery.prototype\n * @type {TimeInterval}\n */\n currentInterval: {\n get: function () {\n return this._times.get(this._currentIntervalIndex);\n },\n },\n});\n\n/**\n * Gets the tile from the cache if its available.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.<HTMLImageElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if the tile is not in the cache.\n */\nTimeDynamicImagery.prototype.getFromCache = function (x, y, level, request) {\n var key = getKey(x, y, level);\n var result;\n var cache = this._tileCache[this._currentIntervalIndex];\n if (defined(cache) && defined(cache[key])) {\n var item = cache[key];\n result = item.promise.otherwise(function (e) {\n // Set the correct state in case it was cancelled\n request.state = item.request.state;\n throw e;\n });\n delete cache[key];\n }\n\n return result;\n};\n\n/**\n * Checks if the next interval is approaching and will start preload the tile if necessary. Otherwise it will\n * just add the tile to a list to preload when we approach the next interval.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n */\nTimeDynamicImagery.prototype.checkApproachingInterval = function (\n x,\n y,\n level,\n request\n) {\n var key = getKey(x, y, level);\n var tilesRequestedForInterval = this._tilesRequestedForInterval;\n\n // If we are approaching an interval, preload this tile in the next interval\n var approachingInterval = getApproachingInterval(this);\n var tile = {\n key: key,\n // Determines priority based on camera distance to the tile.\n // Since the imagery regardless of time will be attached to the same tile we can just steal it.\n priorityFunction: request.priorityFunction,\n };\n if (\n !defined(approachingInterval) ||\n !addToCache(this, tile, approachingInterval)\n ) {\n // Add to recent request list if we aren't approaching and interval or the request was throttled\n tilesRequestedForInterval.push(tile);\n }\n\n // Don't let the tile list get out of hand\n if (tilesRequestedForInterval.length >= 512) {\n tilesRequestedForInterval.splice(0, 256);\n }\n};\n\nTimeDynamicImagery.prototype._clockOnTick = function (clock) {\n var time = clock.currentTime;\n var times = this._times;\n var index = times.indexOf(time);\n var currentIntervalIndex = this._currentIntervalIndex;\n\n if (index !== currentIntervalIndex) {\n // Cancel all outstanding requests and clear out caches not from current time interval\n var currentCache = this._tileCache[currentIntervalIndex];\n for (var t in currentCache) {\n if (currentCache.hasOwnProperty(t)) {\n currentCache[t].request.cancel();\n }\n }\n delete this._tileCache[currentIntervalIndex];\n this._tilesRequestedForInterval = [];\n\n this._currentIntervalIndex = index;\n this._reloadFunction();\n\n return;\n }\n\n var approachingInterval = getApproachingInterval(this);\n if (defined(approachingInterval)) {\n // Start loading recent tiles from end of this._tilesRequestedForInterval\n // We keep preloading until we hit a throttling limit.\n var tilesRequested = this._tilesRequestedForInterval;\n var success = true;\n while (success) {\n if (tilesRequested.length === 0) {\n break;\n }\n\n var tile = tilesRequested.pop();\n success = addToCache(this, tile, approachingInterval);\n if (!success) {\n tilesRequested.push(tile);\n }\n }\n }\n};\n\nfunction getKey(x, y, level) {\n return x + \"-\" + y + \"-\" + level;\n}\n\nfunction getKeyElements(key) {\n var s = key.split(\"-\");\n if (s.length !== 3) {\n return undefined;\n }\n\n return {\n x: Number(s[0]),\n y: Number(s[1]),\n level: Number(s[2]),\n };\n}\n\nfunction getApproachingInterval(that) {\n var times = that._times;\n if (!defined(times)) {\n return undefined;\n }\n var clock = that._clock;\n var time = clock.currentTime;\n var isAnimating = clock.canAnimate && clock.shouldAnimate;\n var multiplier = clock.multiplier;\n\n if (!isAnimating && multiplier !== 0) {\n return undefined;\n }\n\n var seconds;\n var index = times.indexOf(time);\n if (index < 0) {\n return undefined;\n }\n\n var interval = times.get(index);\n if (multiplier > 0) {\n // animating forward\n seconds = JulianDate.secondsDifference(interval.stop, time);\n ++index;\n } else {\n //backwards\n seconds = JulianDate.secondsDifference(interval.start, time); // Will be negative\n --index;\n }\n seconds /= multiplier; // Will always be positive\n\n // Less than 5 wall time seconds\n return index >= 0 && seconds <= 5.0 ? times.get(index) : undefined;\n}\n\nfunction addToCache(that, tile, interval) {\n var index = that._times.indexOf(interval.start);\n var tileCache = that._tileCache;\n var intervalTileCache = tileCache[index];\n if (!defined(intervalTileCache)) {\n intervalTileCache = tileCache[index] = {};\n }\n\n var key = tile.key;\n if (defined(intervalTileCache[key])) {\n return true; // Already in the cache\n }\n\n var keyElements = getKeyElements(key);\n var request = new Request({\n throttle: true,\n throttleByServer: true,\n type: RequestType.IMAGERY,\n priorityFunction: tile.priorityFunction,\n });\n var promise = that._requestImageFunction(\n keyElements.x,\n keyElements.y,\n keyElements.level,\n request,\n interval\n );\n if (!defined(promise)) {\n return false;\n }\n\n intervalTileCache[key] = {\n promise: promise,\n request: request,\n };\n\n return true;\n}\nexport default TimeDynamicImagery;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport GetFeatureInfoFormat from \"./GetFeatureInfoFormat.js\";\nimport TimeDynamicImagery from \"./TimeDynamicImagery.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\n/**\n * @typedef {Object} WebMapServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the WebMapServiceImageryProvider constructor\n *\n * @property {Resource|String} url The URL of the WMS service. The URL supports the same keywords as the {@link UrlTemplateImageryProvider}.\n * @property {String} layers The layers to include, separated by commas.\n * @property {Object} [parameters=WebMapServiceImageryProvider.DefaultParameters] Additional parameters to pass to the WMS server in the GetMap URL.\n * @property {Object} [getFeatureInfoParameters=WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters] Additional parameters to pass to the WMS server in the GetFeatureInfo URL.\n * @property {Boolean} [enablePickFeatures=true] If true, {@link WebMapServiceImageryProvider#pickFeatures} will invoke\n * the GetFeatureInfo operation on the WMS server and return the features included in the response. If false,\n * {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n * without communicating with the server. Set this property to false if you know your WMS server does not support\n * GetFeatureInfo or if you don't want this provider's features to be pickable. Note that this can be dynamically\n * overridden by modifying the WebMapServiceImageryProvider#enablePickFeatures property.\n * @property {GetFeatureInfoFormat[]} [getFeatureInfoFormats=WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats] The formats\n * in which to try WMS GetFeatureInfo requests.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme to use to divide the world into tiles.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @property {Number} [tileWidth=256] The width of each tile in pixels.\n * @property {Number} [tileHeight=256] The height of each tile in pixels.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when\n * specifying this that the number of tiles at the minimum level is small, such as four or less. A larger number is\n * likely to result in rendering problems.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * If not specified, there is no limit.\n * @property {String} [crs] CRS specification, for use with WMS specification >= 1.3.0.\n * @property {String} [srs] SRS specification, for use with WMS specification 1.1.0 or 1.1.1\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {String|String[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n * If this parameter is a single string, each character in the string is a subdomain. If it is\n * an array, each element in the array is a subdomain.\n * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.\n * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values.\n */\n\n/**\n * Provides tiled imagery hosted by a Web Map Service (WMS) server.\n *\n * @alias WebMapServiceImageryProvider\n * @constructor\n *\n * @param {WebMapServiceImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @see {@link http://resources.esri.com/help/9.3/arcgisserver/apis/rest/|ArcGIS Server REST API}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n *\n * @example\n * var provider = new Cesium.WebMapServiceImageryProvider({\n * url : 'https://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer',\n * layers : '0',\n * proxy: new Cesium.DefaultProxy('/proxy/')\n * });\n *\n * viewer.imageryLayers.addImageryProvider(provider);\n */\nfunction WebMapServiceImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n if (!defined(options.layers)) {\n throw new DeveloperError(\"options.layers is required.\");\n }\n //>>includeEnd('debug');\n\n if (defined(options.times) && !defined(options.clock)) {\n throw new DeveloperError(\n \"options.times was specified, so options.clock is required.\"\n );\n }\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(options.url);\n\n var pickFeatureResource = resource.clone();\n\n resource.setQueryParameters(\n WebMapServiceImageryProvider.DefaultParameters,\n true\n );\n pickFeatureResource.setQueryParameters(\n WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters,\n true\n );\n\n if (defined(options.parameters)) {\n resource.setQueryParameters(objectToLowercase(options.parameters));\n }\n\n if (defined(options.getFeatureInfoParameters)) {\n pickFeatureResource.setQueryParameters(\n objectToLowercase(options.getFeatureInfoParameters)\n );\n }\n\n var that = this;\n this._reload = undefined;\n if (defined(options.times)) {\n this._timeDynamicImagery = new TimeDynamicImagery({\n clock: options.clock,\n times: options.times,\n requestImageFunction: function (x, y, level, request, interval) {\n return requestImage(that, x, y, level, request, interval);\n },\n reloadFunction: function () {\n if (defined(that._reload)) {\n that._reload();\n }\n },\n });\n }\n\n var parameters = {};\n parameters.layers = options.layers;\n parameters.bbox =\n \"{westProjected},{southProjected},{eastProjected},{northProjected}\";\n parameters.width = \"{width}\";\n parameters.height = \"{height}\";\n\n // Use SRS or CRS based on the WMS version.\n if (parseFloat(resource.queryParameters.version) >= 1.3) {\n // Use CRS with 1.3.0 and going forward.\n // For GeographicTilingScheme, use CRS:84 vice EPSG:4326 to specify lon, lat (x, y) ordering for\n // bbox requests.\n parameters.crs = defaultValue(\n options.crs,\n options.tilingScheme &&\n options.tilingScheme.projection instanceof WebMercatorProjection\n ? \"EPSG:3857\"\n : \"CRS:84\"\n );\n } else {\n // SRS for WMS 1.1.0 or 1.1.1.\n parameters.srs = defaultValue(\n options.srs,\n options.tilingScheme &&\n options.tilingScheme.projection instanceof WebMercatorProjection\n ? \"EPSG:3857\"\n : \"EPSG:4326\"\n );\n }\n\n resource.setQueryParameters(parameters, true);\n pickFeatureResource.setQueryParameters(parameters, true);\n\n var pickFeatureParams = {\n query_layers: options.layers,\n x: \"{i}\",\n y: \"{j}\",\n info_format: \"{format}\",\n };\n pickFeatureResource.setQueryParameters(pickFeatureParams, true);\n\n this._resource = resource;\n this._pickFeaturesResource = pickFeatureResource;\n this._layers = options.layers;\n\n // Let UrlTemplateImageryProvider do the actual URL building.\n this._tileProvider = new UrlTemplateImageryProvider({\n url: resource,\n pickFeaturesUrl: pickFeatureResource,\n tilingScheme: defaultValue(\n options.tilingScheme,\n new GeographicTilingScheme({ ellipsoid: options.ellipsoid })\n ),\n rectangle: options.rectangle,\n tileWidth: options.tileWidth,\n tileHeight: options.tileHeight,\n minimumLevel: options.minimumLevel,\n maximumLevel: options.maximumLevel,\n subdomains: options.subdomains,\n tileDiscardPolicy: options.tileDiscardPolicy,\n credit: options.credit,\n getFeatureInfoFormats: defaultValue(\n options.getFeatureInfoFormats,\n WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats\n ),\n enablePickFeatures: options.enablePickFeatures,\n });\n}\n\nfunction requestImage(imageryProvider, col, row, level, request, interval) {\n var dynamicIntervalData = defined(interval) ? interval.data : undefined;\n var tileProvider = imageryProvider._tileProvider;\n\n if (defined(dynamicIntervalData)) {\n // We set the query parameters within the tile provider, because it is managing the query.\n tileProvider._resource.setQueryParameters(dynamicIntervalData);\n }\n return tileProvider.requestImage(col, row, level, request);\n}\n\nfunction pickFeatures(\n imageryProvider,\n x,\n y,\n level,\n longitude,\n latitude,\n interval\n) {\n var dynamicIntervalData = defined(interval) ? interval.data : undefined;\n var tileProvider = imageryProvider._tileProvider;\n\n if (defined(dynamicIntervalData)) {\n // We set the query parameters within the tile provider, because it is managing the query.\n tileProvider._pickFeaturesResource.setQueryParameters(dynamicIntervalData);\n }\n return tileProvider.pickFeatures(x, y, level, longitude, latitude);\n}\n\nObject.defineProperties(WebMapServiceImageryProvider.prototype, {\n /**\n * Gets the URL of the WMS server.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource._url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the names of the WMS layers, separated by commas.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n layers: {\n get: function () {\n return this._layers;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._tileProvider.tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._tileProvider.tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return this._tileProvider.maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return this._tileProvider.minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._tileProvider.tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._tileProvider.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return this._tileProvider.tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._tileProvider.errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._tileProvider.ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._tileProvider.readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._tileProvider.credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return this._tileProvider.hasAlphaChannel;\n },\n },\n\n /**\n * Gets or sets a value indicating whether feature picking is enabled. If true, {@link WebMapServiceImageryProvider#pickFeatures} will\n * invoke the <code>GetFeatureInfo</code> service on the WMS server and attempt to interpret the features included in the response. If false,\n * {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n * features) without communicating with the server. Set this property to false if you know your data\n * source does not support picking features or if you don't want this provider's features to be pickable.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Boolean}\n * @default true\n */\n enablePickFeatures: {\n get: function () {\n return this._tileProvider.enablePickFeatures;\n },\n set: function (enablePickFeatures) {\n this._tileProvider.enablePickFeatures = enablePickFeatures;\n },\n },\n\n /**\n * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {Clock}\n */\n clock: {\n get: function () {\n return this._timeDynamicImagery.clock;\n },\n set: function (value) {\n this._timeDynamicImagery.clock = value;\n },\n },\n /**\n * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each\n * TimeInterval is an object containing the keys and values of the properties that are used during\n * tile requests.\n * @memberof WebMapServiceImageryProvider.prototype\n * @type {TimeIntervalCollection}\n */\n times: {\n get: function () {\n return this._timeDynamicImagery.times;\n },\n set: function (value) {\n this._timeDynamicImagery.times = value;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nWebMapServiceImageryProvider.prototype.getTileCredits = function (x, y, level) {\n return this._tileProvider.getTileCredits(x, y, level);\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link WebMapServiceImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nWebMapServiceImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n var result;\n var timeDynamicImagery = this._timeDynamicImagery;\n var currentInterval;\n\n // Try and load from cache\n if (defined(timeDynamicImagery)) {\n currentInterval = timeDynamicImagery.currentInterval;\n result = timeDynamicImagery.getFromCache(x, y, level, request);\n }\n\n // Couldn't load from cache\n if (!defined(result)) {\n result = requestImage(this, x, y, level, request, currentInterval);\n }\n\n // If we are approaching an interval, preload this tile in the next interval\n if (defined(result) && defined(timeDynamicImagery)) {\n timeDynamicImagery.checkApproachingInterval(x, y, level, request);\n }\n\n return result;\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link ImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nWebMapServiceImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n var timeDynamicImagery = this._timeDynamicImagery;\n var currentInterval = defined(timeDynamicImagery)\n ? timeDynamicImagery.currentInterval\n : undefined;\n\n return pickFeatures(this, x, y, level, longitude, latitude, currentInterval);\n};\n\n/**\n * The default parameters to include in the WMS URL to obtain images. The values are as follows:\n * service=WMS\n * version=1.1.1\n * request=GetMap\n * styles=\n * format=image/jpeg\n *\n * @constant\n * @type {Object}\n */\nWebMapServiceImageryProvider.DefaultParameters = Object.freeze({\n service: \"WMS\",\n version: \"1.1.1\",\n request: \"GetMap\",\n styles: \"\",\n format: \"image/jpeg\",\n});\n\n/**\n * The default parameters to include in the WMS URL to get feature information. The values are as follows:\n * service=WMS\n * version=1.1.1\n * request=GetFeatureInfo\n *\n * @constant\n * @type {Object}\n */\nWebMapServiceImageryProvider.GetFeatureInfoDefaultParameters = Object.freeze({\n service: \"WMS\",\n version: \"1.1.1\",\n request: \"GetFeatureInfo\",\n});\n\nWebMapServiceImageryProvider.DefaultGetFeatureInfoFormats = Object.freeze([\n Object.freeze(new GetFeatureInfoFormat(\"json\", \"application/json\")),\n Object.freeze(new GetFeatureInfoFormat(\"xml\", \"text/xml\")),\n Object.freeze(new GetFeatureInfoFormat(\"text\", \"text/html\")),\n]);\n\nfunction objectToLowercase(obj) {\n var result = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n result[key.toLowerCase()] = obj[key];\n }\n }\n return result;\n}\nexport default WebMapServiceImageryProvider;\n","import combine from \"../Core/combine.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\nimport TimeDynamicImagery from \"./TimeDynamicImagery.js\";\n\nvar defaultParameters = Object.freeze({\n service: \"WMTS\",\n version: \"1.0.0\",\n request: \"GetTile\",\n});\n\n/**\n * @typedef {Object} WebMapTileServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the WebMapTileServiceImageryProvider constructor\n *\n * @property {Resource|String} url The base URL for the WMTS GetTile operation (for KVP-encoded requests) or the tile-URL template (for RESTful requests). The tile-URL template should contain the following variables: {style}, {TileMatrixSet}, {TileMatrix}, {TileRow}, {TileCol}. The first two are optional if actual values are hardcoded or not required by the server. The {s} keyword may be used to specify subdomains.\n * @property {String} [format='image/jpeg'] The MIME type for images to retrieve from the server.\n * @property {String} layer The layer name for WMTS requests.\n * @property {String} style The style name for WMTS requests.\n * @property {String} tileMatrixSetID The identifier of the TileMatrixSet to use for WMTS requests.\n * @property {Array} [tileMatrixLabels] A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level.\n * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.\n * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.\n * @property {Object} [dimensions] A object containing static dimensions and their values.\n * @property {Number} [tileWidth=256] The tile width in pixels.\n * @property {Number} [tileHeight=256] The tile height in pixels.\n * @property {TilingScheme} [tilingScheme] The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle covered by the layer.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {String|String[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n * If this parameter is a single string, each character in the string is a subdomain. If it is\n * an array, each element in the array is a subdomain.\n */\n\n/**\n * Provides tiled imagery served by {@link http://www.opengeospatial.org/standards/wmts|WMTS 1.0.0} compliant servers.\n * This provider supports HTTP KVP-encoded and RESTful GetTile requests, but does not yet support the SOAP encoding.\n *\n * @alias WebMapTileServiceImageryProvider\n * @constructor\n *\n * @param {WebMapTileServiceImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Web%20Map%20Tile%20Service%20with%20Time.html|Cesium Sandcastle Web Map Tile Service with Time Demo}\n *\n * @example\n * // Example 1. USGS shaded relief tiles (KVP)\n * var shadedRelief1 = new Cesium.WebMapTileServiceImageryProvider({\n * url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS',\n * layer : 'USGSShadedReliefOnly',\n * style : 'default',\n * format : 'image/jpeg',\n * tileMatrixSetID : 'default028mm',\n * // tileMatrixLabels : ['default028mm:0', 'default028mm:1', 'default028mm:2' ...],\n * maximumLevel: 19,\n * credit : new Cesium.Credit('U. S. Geological Survey')\n * });\n * viewer.imageryLayers.addImageryProvider(shadedRelief1);\n *\n * @example\n * // Example 2. USGS shaded relief tiles (RESTful)\n * var shadedRelief2 = new Cesium.WebMapTileServiceImageryProvider({\n * url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS/tile/1.0.0/USGSShadedReliefOnly/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpg',\n * layer : 'USGSShadedReliefOnly',\n * style : 'default',\n * format : 'image/jpeg',\n * tileMatrixSetID : 'default028mm',\n * maximumLevel: 19,\n * credit : new Cesium.Credit('U. S. Geological Survey')\n * });\n * viewer.imageryLayers.addImageryProvider(shadedRelief2);\n *\n * @example\n * // Example 3. NASA time dynamic weather data (RESTful)\n * var times = Cesium.TimeIntervalCollection.fromIso8601({\n * iso8601: '2015-07-30/2017-06-16/P1D',\n * dataCallback: function dataCallback(interval, index) {\n * return {\n * Time: Cesium.JulianDate.toIso8601(interval.start)\n * };\n * }\n * });\n * var weather = new Cesium.WebMapTileServiceImageryProvider({\n * url : 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/AMSR2_Snow_Water_Equivalent/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png',\n * layer : 'AMSR2_Snow_Water_Equivalent',\n * style : 'default',\n * tileMatrixSetID : '2km',\n * maximumLevel : 5,\n * format : 'image/png',\n * clock: clock,\n * times: times,\n * credit : new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS')\n * });\n * viewer.imageryLayers.addImageryProvider(weather);\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see UrlTemplateImageryProvider\n */\nfunction WebMapTileServiceImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.url)) {\n throw new DeveloperError(\"options.url is required.\");\n }\n if (!defined(options.layer)) {\n throw new DeveloperError(\"options.layer is required.\");\n }\n if (!defined(options.style)) {\n throw new DeveloperError(\"options.style is required.\");\n }\n if (!defined(options.tileMatrixSetID)) {\n throw new DeveloperError(\"options.tileMatrixSetID is required.\");\n }\n if (defined(options.times) && !defined(options.clock)) {\n throw new DeveloperError(\n \"options.times was specified, so options.clock is required.\"\n );\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(options.url);\n\n var style = options.style;\n var tileMatrixSetID = options.tileMatrixSetID;\n var url = resource.url;\n if (url.indexOf(\"{\") >= 0) {\n var templateValues = {\n style: style,\n Style: style,\n TileMatrixSet: tileMatrixSetID,\n };\n\n resource.setTemplateValues(templateValues);\n this._useKvp = false;\n } else {\n resource.setQueryParameters(defaultParameters);\n this._useKvp = true;\n }\n\n this._resource = resource;\n this._layer = options.layer;\n this._style = style;\n this._tileMatrixSetID = tileMatrixSetID;\n this._tileMatrixLabels = options.tileMatrixLabels;\n this._format = defaultValue(options.format, \"image/jpeg\");\n this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n this._tilingScheme = defined(options.tilingScheme)\n ? options.tilingScheme\n : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });\n this._tileWidth = defaultValue(options.tileWidth, 256);\n this._tileHeight = defaultValue(options.tileHeight, 256);\n\n this._minimumLevel = defaultValue(options.minimumLevel, 0);\n this._maximumLevel = options.maximumLevel;\n\n this._rectangle = defaultValue(\n options.rectangle,\n this._tilingScheme.rectangle\n );\n this._dimensions = options.dimensions;\n\n var that = this;\n this._reload = undefined;\n if (defined(options.times)) {\n this._timeDynamicImagery = new TimeDynamicImagery({\n clock: options.clock,\n times: options.times,\n requestImageFunction: function (x, y, level, request, interval) {\n return requestImage(that, x, y, level, request, interval);\n },\n reloadFunction: function () {\n if (defined(that._reload)) {\n that._reload();\n }\n },\n });\n }\n\n this._readyPromise = when.resolve(true);\n\n // Check the number of tiles at the minimum level. If it's more than four,\n // throw an exception, because starting at the higher minimum\n // level will cause too many tiles to be downloaded and rendered.\n var swTile = this._tilingScheme.positionToTileXY(\n Rectangle.southwest(this._rectangle),\n this._minimumLevel\n );\n var neTile = this._tilingScheme.positionToTileXY(\n Rectangle.northeast(this._rectangle),\n this._minimumLevel\n );\n var tileCount =\n (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);\n //>>includeStart('debug', pragmas.debug);\n if (tileCount > 4) {\n throw new DeveloperError(\n \"The imagery provider's rectangle and minimumLevel indicate that there are \" +\n tileCount +\n \" tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.\"\n );\n }\n //>>includeEnd('debug');\n\n this._errorEvent = new Event();\n\n var credit = options.credit;\n this._credit = typeof credit === \"string\" ? new Credit(credit) : credit;\n\n this._subdomains = options.subdomains;\n if (Array.isArray(this._subdomains)) {\n this._subdomains = this._subdomains.slice();\n } else if (defined(this._subdomains) && this._subdomains.length > 0) {\n this._subdomains = this._subdomains.split(\"\");\n } else {\n this._subdomains = [\"a\", \"b\", \"c\"];\n }\n}\n\nfunction requestImage(imageryProvider, col, row, level, request, interval) {\n var labels = imageryProvider._tileMatrixLabels;\n var tileMatrix = defined(labels) ? labels[level] : level.toString();\n var subdomains = imageryProvider._subdomains;\n var staticDimensions = imageryProvider._dimensions;\n var dynamicIntervalData = defined(interval) ? interval.data : undefined;\n\n var resource;\n if (!imageryProvider._useKvp) {\n var templateValues = {\n TileMatrix: tileMatrix,\n TileRow: row.toString(),\n TileCol: col.toString(),\n s: subdomains[(col + row + level) % subdomains.length],\n };\n\n resource = imageryProvider._resource.getDerivedResource({\n request: request,\n });\n resource.setTemplateValues(templateValues);\n\n if (defined(staticDimensions)) {\n resource.setTemplateValues(staticDimensions);\n }\n\n if (defined(dynamicIntervalData)) {\n resource.setTemplateValues(dynamicIntervalData);\n }\n } else {\n // build KVP request\n var query = {};\n query.tilematrix = tileMatrix;\n query.layer = imageryProvider._layer;\n query.style = imageryProvider._style;\n query.tilerow = row;\n query.tilecol = col;\n query.tilematrixset = imageryProvider._tileMatrixSetID;\n query.format = imageryProvider._format;\n\n if (defined(staticDimensions)) {\n query = combine(query, staticDimensions);\n }\n\n if (defined(dynamicIntervalData)) {\n query = combine(query, dynamicIntervalData);\n }\n resource = imageryProvider._resource.getDerivedResource({\n queryParameters: query,\n request: request,\n });\n }\n\n return ImageryProvider.loadImage(imageryProvider, resource);\n}\n\nObject.defineProperties(WebMapTileServiceImageryProvider.prototype, {\n /**\n * Gets the URL of the service hosting the imagery.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._resource.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._resource.proxy;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return this._minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the mime type of images returned by this imagery provider.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n format: {\n get: function () {\n return this._format;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n value: true,\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n /**\n * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Clock}\n */\n clock: {\n get: function () {\n return this._timeDynamicImagery.clock;\n },\n set: function (value) {\n this._timeDynamicImagery.clock = value;\n },\n },\n /**\n * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each\n * TimeInterval is an object containing the keys and values of the properties that are used during\n * tile requests.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {TimeIntervalCollection}\n */\n times: {\n get: function () {\n return this._timeDynamicImagery.times;\n },\n set: function (value) {\n this._timeDynamicImagery.times = value;\n },\n },\n /**\n * Gets or sets an object that contains static dimensions and their values.\n * @memberof WebMapTileServiceImageryProvider.prototype\n * @type {Object}\n */\n dimensions: {\n get: function () {\n return this._dimensions;\n },\n set: function (value) {\n if (this._dimensions !== value) {\n this._dimensions = value;\n if (defined(this._reload)) {\n this._reload();\n }\n }\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nWebMapTileServiceImageryProvider.prototype.getTileCredits = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link WebMapTileServiceImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nWebMapTileServiceImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n var result;\n var timeDynamicImagery = this._timeDynamicImagery;\n var currentInterval;\n\n // Try and load from cache\n if (defined(timeDynamicImagery)) {\n currentInterval = timeDynamicImagery.currentInterval;\n result = timeDynamicImagery.getFromCache(x, y, level, request);\n }\n\n // Couldn't load from cache\n if (!defined(result)) {\n result = requestImage(this, x, y, level, request, currentInterval);\n }\n\n // If we are approaching an interval, preload this tile in the next interval\n if (defined(result) && defined(timeDynamicImagery)) {\n timeDynamicImagery.checkApproachingInterval(x, y, level, request);\n }\n\n return result;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nWebMapTileServiceImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\nexport default WebMapTileServiceImageryProvider;\n","import Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ArcGisMapServerImageryProvider from \"./ArcGisMapServerImageryProvider.js\";\nimport BingMapsImageryProvider from \"./BingMapsImageryProvider.js\";\nimport TileMapServiceImageryProvider from \"./TileMapServiceImageryProvider.js\";\nimport GoogleEarthEnterpriseMapsProvider from \"./GoogleEarthEnterpriseMapsProvider.js\";\nimport MapboxImageryProvider from \"./MapboxImageryProvider.js\";\nimport SingleTileImageryProvider from \"./SingleTileImageryProvider.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\nimport WebMapServiceImageryProvider from \"./WebMapServiceImageryProvider.js\";\nimport WebMapTileServiceImageryProvider from \"./WebMapTileServiceImageryProvider.js\";\n\nfunction createFactory(Type) {\n return function (options) {\n return new Type(options);\n };\n}\n\n// These values are the list of supported external imagery\n// assets in the Cesium ion beta. They are subject to change.\nvar ImageryProviderMapping = {\n ARCGIS_MAPSERVER: createFactory(ArcGisMapServerImageryProvider),\n BING: createFactory(BingMapsImageryProvider),\n GOOGLE_EARTH: createFactory(GoogleEarthEnterpriseMapsProvider),\n MAPBOX: createFactory(MapboxImageryProvider),\n SINGLE_TILE: createFactory(SingleTileImageryProvider),\n TMS: createFactory(TileMapServiceImageryProvider),\n URL_TEMPLATE: createFactory(UrlTemplateImageryProvider),\n WMS: createFactory(WebMapServiceImageryProvider),\n WMTS: createFactory(WebMapTileServiceImageryProvider),\n};\n\n/**\n * @typedef {Object} IonImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileMapServiceImageryProvider constructor\n *\n * @property {Number} assetId An ion imagery asset ID\n * @property {String} [accessToken=Ion.defaultAccessToken] The access token to use.\n * @property {String|Resource} [server=Ion.defaultServer] The resource to the Cesium ion API server.\n */\n\n/**\n * Provides tiled imagery using the Cesium ion REST API.\n *\n * @alias IonImageryProvider\n * @constructor\n *\n * @param {IonImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId : 23489024 }));\n */\nfunction IonImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var assetId = options.assetId;\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number(\"options.assetId\", assetId);\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n this._ready = false;\n this._tileCredits = undefined;\n this._errorEvent = new Event();\n\n var that = this;\n var endpointResource = IonResource._createEndpointResource(assetId, options);\n\n // A simple cache to avoid making repeated requests to ion for endpoints we've\n // already retrieved. This exists mainly to support Bing caching to reduce\n // world imagery sessions, but provides a small boost of performance in general\n // if constantly reloading assets\n var cacheKey =\n options.assetId.toString() + options.accessToken + options.server;\n var promise = IonImageryProvider._endpointCache[cacheKey];\n if (!defined(promise)) {\n promise = endpointResource.fetchJson();\n IonImageryProvider._endpointCache[cacheKey] = promise;\n }\n\n this._readyPromise = promise.then(function (endpoint) {\n if (endpoint.type !== \"IMAGERY\") {\n return when.reject(\n new RuntimeError(\n \"Cesium ion asset \" + assetId + \" is not an imagery asset.\"\n )\n );\n }\n\n var imageryProvider;\n var externalType = endpoint.externalType;\n if (!defined(externalType)) {\n imageryProvider = new TileMapServiceImageryProvider({\n url: new IonResource(endpoint, endpointResource),\n });\n } else {\n var factory = ImageryProviderMapping[externalType];\n\n if (!defined(factory)) {\n return when.reject(\n new RuntimeError(\n \"Unrecognized Cesium ion imagery type: \" + externalType\n )\n );\n }\n imageryProvider = factory(endpoint.options);\n }\n\n that._tileCredits = IonResource.getCreditsFromEndpoint(\n endpoint,\n endpointResource\n );\n\n imageryProvider.errorEvent.addEventListener(function (tileProviderError) {\n //Propagate the errorEvent but set the provider to this instance instead\n //of the inner instance.\n tileProviderError.provider = that;\n that._errorEvent.raiseEvent(tileProviderError);\n });\n\n that._imageryProvider = imageryProvider;\n return imageryProvider.readyPromise.then(function () {\n that._ready = true;\n return true;\n });\n });\n}\n\nObject.defineProperties(IonImageryProvider.prototype, {\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof IonImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof IonImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by the instance. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.rectangle;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link IonImageryProvider#ready} returns true. Generally,\n * a minimum level should only be used when the rectangle of the imagery is small\n * enough that the number of tiles at the minimum level is small. An imagery\n * provider with more than a few tiles at the minimum level will lead to\n * rendering problems.\n * @memberof IonImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.tilingScheme;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof IonImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @memberof IonImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"credit must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof IonImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"hasAlphaChannel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.hasAlphaChannel;\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof IonImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n * @default undefined\n */\n proxy: {\n get: function () {\n return undefined;\n },\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n * @function\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nIonImageryProvider.prototype.getTileCredits = function (x, y, level) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"getTileCredits must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var innerCredits = this._imageryProvider.getTileCredits(x, y, level);\n if (!defined(innerCredits)) {\n return this._tileCredits;\n }\n\n return this._tileCredits.concat(innerCredits);\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link IonImageryProvider#ready} returns true.\n * @function\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nIonImageryProvider.prototype.requestImage = function (x, y, level, request) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link IonImageryProvider#ready} returns true.\n * This function is optional, so it may not exist on all ImageryProviders.\n *\n * @function\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nIonImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"pickFeatures must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n//exposed for testing\nIonImageryProvider._endpointCache = {};\nexport default IonImageryProvider;\n","// Note, these values map directly to ion asset ids.\n\n/**\n * The types of imagery provided by {@link createWorldImagery}.\n *\n * @enum {Number}\n */\nvar IonWorldImageryStyle = {\n /**\n * Aerial imagery.\n *\n * @type {Number}\n * @constant\n */\n AERIAL: 2,\n\n /**\n * Aerial imagery with a road overlay.\n *\n * @type {Number}\n * @constant\n */\n AERIAL_WITH_LABELS: 3,\n\n /**\n * Roads without additional imagery.\n *\n * @type {Number}\n * @constant\n */\n ROAD: 4,\n};\nexport default Object.freeze(IonWorldImageryStyle);\n","import defaultValue from \"../Core/defaultValue.js\";\nimport IonImageryProvider from \"./IonImageryProvider.js\";\nimport IonWorldImageryStyle from \"./IonWorldImageryStyle.js\";\n\n/**\n * Creates an {@link IonImageryProvider} instance for ion's default global base imagery layer, currently Bing Maps.\n *\n * @function\n *\n * @param {Object} [options] Object with the following properties:\n * @param {IonWorldImageryStyle} [options.style=IonWorldImageryStyle] The style of base imagery, only AERIAL, AERIAL_WITH_LABELS, and ROAD are currently supported.\n * @returns {IonImageryProvider}\n *\n * @see Ion\n *\n * @example\n * // Create Cesium World Terrain with default settings\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * imageryProvider : Cesium.createWorldImagery();\n * });\n *\n * @example\n * // Create Cesium World Terrain with water and normals.\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * imageryProvider : Cesium.createWorldImagery({\n * style: Cesium.IonWorldImageryStyle.AERIAL_WITH_LABELS\n * })\n * });\n *\n */\nfunction createWorldImagery(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var style = defaultValue(options.style, IonWorldImageryStyle.AERIAL);\n return new IonImageryProvider({\n assetId: style,\n });\n}\nexport default createWorldImagery;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Uri from \"../ThirdParty/Uri.js\";\n\nvar mobileWidth = 576;\nvar lightboxHeight = 100;\nvar textColor = \"#ffffff\";\nvar highlightColor = \"#48b\";\n\nfunction contains(credits, credit) {\n var len = credits.length;\n for (var i = 0; i < len; i++) {\n var existingCredit = credits[i];\n if (Credit.equals(existingCredit, credit)) {\n return true;\n }\n }\n return false;\n}\n\nfunction swapCesiumCredit(creditDisplay) {\n // We don't want to clutter the screen with the Cesium logo and the Cesium ion\n // logo at the same time. Since the ion logo is required, we just replace the\n // Cesium logo or add the logo if the Cesium one was removed.\n var previousCredit = creditDisplay._previousCesiumCredit;\n var currentCredit = creditDisplay._currentCesiumCredit;\n if (Credit.equals(currentCredit, previousCredit)) {\n return;\n }\n\n if (defined(previousCredit)) {\n creditDisplay._cesiumCreditContainer.removeChild(previousCredit.element);\n }\n if (defined(currentCredit)) {\n creditDisplay._cesiumCreditContainer.appendChild(currentCredit.element);\n }\n\n creditDisplay._previousCesiumCredit = currentCredit;\n}\n\nvar delimiterClassName = \"cesium-credit-delimiter\";\n\nfunction createDelimiterElement(delimiter) {\n var delimiterElement = document.createElement(\"span\");\n delimiterElement.textContent = delimiter;\n delimiterElement.className = delimiterClassName;\n return delimiterElement;\n}\n\nfunction createCreditElement(element, elementWrapperTagName) {\n // may need to wrap the credit in another element\n if (defined(elementWrapperTagName)) {\n var wrapper = document.createElement(elementWrapperTagName);\n wrapper._creditId = element._creditId;\n wrapper.appendChild(element);\n element = wrapper;\n }\n return element;\n}\n\nfunction displayCredits(container, credits, delimiter, elementWrapperTagName) {\n var childNodes = container.childNodes;\n var domIndex = -1;\n for (var creditIndex = 0; creditIndex < credits.length; ++creditIndex) {\n var credit = credits[creditIndex];\n if (defined(credit)) {\n domIndex = creditIndex;\n if (defined(delimiter)) {\n // credits may be separated by delimiters\n domIndex *= 2;\n if (creditIndex > 0) {\n var delimiterDomIndex = domIndex - 1;\n if (childNodes.length <= delimiterDomIndex) {\n container.appendChild(createDelimiterElement(delimiter));\n } else {\n var existingDelimiter = childNodes[delimiterDomIndex];\n if (existingDelimiter.className !== delimiterClassName) {\n container.replaceChild(\n createDelimiterElement(delimiter),\n existingDelimiter\n );\n }\n }\n }\n }\n\n var element = credit.element;\n\n // check to see if the correct credit is in the right place\n if (childNodes.length <= domIndex) {\n container.appendChild(\n createCreditElement(element, elementWrapperTagName)\n );\n } else {\n var existingElement = childNodes[domIndex];\n if (existingElement._creditId !== credit._id) {\n // not the right credit, swap it in\n container.replaceChild(\n createCreditElement(element, elementWrapperTagName),\n existingElement\n );\n }\n }\n }\n }\n\n // any remaining nodes in the container are unnecessary\n ++domIndex;\n while (domIndex < childNodes.length) {\n container.removeChild(childNodes[domIndex]);\n }\n}\n\nfunction styleLightboxContainer(that) {\n var lightboxCredits = that._lightboxCredits;\n var width = that.viewport.clientWidth;\n var height = that.viewport.clientHeight;\n if (width !== that._lastViewportWidth) {\n if (width < mobileWidth) {\n lightboxCredits.className =\n \"cesium-credit-lightbox cesium-credit-lightbox-mobile\";\n lightboxCredits.style.marginTop = \"0\";\n } else {\n lightboxCredits.className =\n \"cesium-credit-lightbox cesium-credit-lightbox-expanded\";\n lightboxCredits.style.marginTop =\n Math.floor((height - lightboxCredits.clientHeight) * 0.5) + \"px\";\n }\n that._lastViewportWidth = width;\n }\n\n if (width >= mobileWidth && height !== that._lastViewportHeight) {\n lightboxCredits.style.marginTop =\n Math.floor((height - lightboxCredits.clientHeight) * 0.5) + \"px\";\n that._lastViewportHeight = height;\n }\n}\n\nfunction addStyle(selector, styles) {\n var style = selector + \" {\";\n for (var attribute in styles) {\n if (styles.hasOwnProperty(attribute)) {\n style += attribute + \": \" + styles[attribute] + \"; \";\n }\n }\n style += \" }\\n\";\n return style;\n}\n\nfunction appendCss() {\n var style = \"\";\n style += addStyle(\".cesium-credit-lightbox-overlay\", {\n display: \"none\",\n \"z-index\": \"1\", //must be at least 1 to draw over top other Cesium widgets\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n \"background-color\": \"rgba(80, 80, 80, 0.8)\",\n });\n\n style += addStyle(\".cesium-credit-lightbox\", {\n \"background-color\": \"#303336\",\n color: textColor,\n position: \"relative\",\n \"min-height\": lightboxHeight + \"px\",\n margin: \"auto\",\n });\n\n style += addStyle(\n \".cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited\",\n {\n color: textColor,\n }\n );\n\n style += addStyle(\".cesium-credit-lightbox > ul > li a:hover\", {\n color: highlightColor,\n });\n\n style += addStyle(\".cesium-credit-lightbox.cesium-credit-lightbox-expanded\", {\n border: \"1px solid #444\",\n \"border-radius\": \"5px\",\n \"max-width\": \"370px\",\n });\n\n style += addStyle(\".cesium-credit-lightbox.cesium-credit-lightbox-mobile\", {\n height: \"100%\",\n width: \"100%\",\n });\n\n style += addStyle(\".cesium-credit-lightbox-title\", {\n padding: \"20px 20px 0 20px\",\n });\n\n style += addStyle(\".cesium-credit-lightbox-close\", {\n \"font-size\": \"18pt\",\n cursor: \"pointer\",\n position: \"absolute\",\n top: \"0\",\n right: \"6px\",\n color: textColor,\n });\n\n style += addStyle(\".cesium-credit-lightbox-close:hover\", {\n color: highlightColor,\n });\n\n style += addStyle(\".cesium-credit-lightbox > ul\", {\n margin: \"0\",\n padding: \"12px 20px 12px 40px\",\n \"font-size\": \"13px\",\n });\n\n style += addStyle(\".cesium-credit-lightbox > ul > li\", {\n \"padding-bottom\": \"6px\",\n });\n\n style += addStyle(\".cesium-credit-lightbox > ul > li *\", {\n padding: \"0\",\n margin: \"0\",\n });\n\n style += addStyle(\".cesium-credit-expand-link\", {\n \"padding-left\": \"5px\",\n cursor: \"pointer\",\n \"text-decoration\": \"underline\",\n color: textColor,\n });\n style += addStyle(\".cesium-credit-expand-link:hover\", {\n color: highlightColor,\n });\n\n style += addStyle(\".cesium-credit-text\", {\n color: textColor,\n });\n\n style += addStyle(\n \".cesium-credit-textContainer *, .cesium-credit-logoContainer *\",\n {\n display: \"inline\",\n }\n );\n\n var head = document.head;\n var css = document.createElement(\"style\");\n css.innerHTML = style;\n head.insertBefore(css, head.firstChild);\n}\n\n/**\n * The credit display is responsible for displaying credits on screen.\n *\n * @param {HTMLElement} container The HTML element where credits will be displayed\n * @param {String} [delimiter= ' • '] The string to separate text credits\n * @param {HTMLElement} [viewport=document.body] The HTML element that will contain the credits popup\n *\n * @alias CreditDisplay\n * @constructor\n *\n * @example\n * var creditDisplay = new Cesium.CreditDisplay(creditContainer);\n */\nfunction CreditDisplay(container, delimiter, viewport) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"container\", container);\n //>>includeEnd('debug');\n var that = this;\n\n viewport = defaultValue(viewport, document.body);\n\n var lightbox = document.createElement(\"div\");\n lightbox.className = \"cesium-credit-lightbox-overlay\";\n viewport.appendChild(lightbox);\n\n var lightboxCredits = document.createElement(\"div\");\n lightboxCredits.className = \"cesium-credit-lightbox\";\n lightbox.appendChild(lightboxCredits);\n\n function hideLightbox(event) {\n if (lightboxCredits.contains(event.target)) {\n return;\n }\n that.hideLightbox();\n }\n lightbox.addEventListener(\"click\", hideLightbox, false);\n\n var title = document.createElement(\"div\");\n title.className = \"cesium-credit-lightbox-title\";\n title.textContent = \"Data provided by:\";\n lightboxCredits.appendChild(title);\n\n var closeButton = document.createElement(\"a\");\n closeButton.onclick = this.hideLightbox.bind(this);\n closeButton.innerHTML = \"×\";\n closeButton.className = \"cesium-credit-lightbox-close\";\n lightboxCredits.appendChild(closeButton);\n\n var creditList = document.createElement(\"ul\");\n lightboxCredits.appendChild(creditList);\n\n var cesiumCreditContainer = document.createElement(\"div\");\n cesiumCreditContainer.className = \"cesium-credit-logoContainer\";\n cesiumCreditContainer.style.display = \"inline\";\n container.appendChild(cesiumCreditContainer);\n\n var screenContainer = document.createElement(\"div\");\n screenContainer.className = \"cesium-credit-textContainer\";\n screenContainer.style.display = \"inline\";\n container.appendChild(screenContainer);\n\n var expandLink = document.createElement(\"a\");\n expandLink.className = \"cesium-credit-expand-link\";\n expandLink.onclick = this.showLightbox.bind(this);\n expandLink.textContent = \"Data attribution\";\n container.appendChild(expandLink);\n\n appendCss();\n var cesiumCredit = Credit.clone(CreditDisplay.cesiumCredit);\n\n this._delimiter = defaultValue(delimiter, \" • \");\n this._screenContainer = screenContainer;\n this._cesiumCreditContainer = cesiumCreditContainer;\n this._lastViewportHeight = undefined;\n this._lastViewportWidth = undefined;\n this._lightboxCredits = lightboxCredits;\n this._creditList = creditList;\n this._lightbox = lightbox;\n this._hideLightbox = hideLightbox;\n this._expandLink = expandLink;\n this._expanded = false;\n this._defaultCredits = [];\n this._cesiumCredit = cesiumCredit;\n this._previousCesiumCredit = undefined;\n this._currentCesiumCredit = cesiumCredit;\n this._currentFrameCredits = {\n screenCredits: new AssociativeArray(),\n lightboxCredits: new AssociativeArray(),\n };\n this._defaultCredit = undefined;\n\n this.viewport = viewport;\n\n /**\n * The HTML element where credits will be displayed.\n * @type {HTMLElement}\n */\n this.container = container;\n}\n\n/**\n * Adds a credit to the list of current credits to be displayed in the credit container\n *\n * @param {Credit} credit The credit to display\n */\nCreditDisplay.prototype.addCredit = function (credit) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"credit\", credit);\n //>>includeEnd('debug');\n\n if (credit._isIon) {\n // If this is the an ion logo credit from the ion server\n // Juse use the default credit (which is identical) to avoid blinking\n if (!defined(this._defaultCredit)) {\n this._defaultCredit = Credit.clone(getDefaultCredit());\n }\n this._currentCesiumCredit = this._defaultCredit;\n return;\n }\n\n if (!credit.showOnScreen) {\n this._currentFrameCredits.lightboxCredits.set(credit.id, credit);\n } else {\n this._currentFrameCredits.screenCredits.set(credit.id, credit);\n }\n};\n\n/**\n * Adds credits that will persist until they are removed\n *\n * @param {Credit} credit The credit to added to defaults\n */\nCreditDisplay.prototype.addDefaultCredit = function (credit) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"credit\", credit);\n //>>includeEnd('debug');\n\n var defaultCredits = this._defaultCredits;\n if (!contains(defaultCredits, credit)) {\n defaultCredits.push(credit);\n }\n};\n\n/**\n * Removes a default credit\n *\n * @param {Credit} credit The credit to be removed from defaults\n */\nCreditDisplay.prototype.removeDefaultCredit = function (credit) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"credit\", credit);\n //>>includeEnd('debug');\n\n var defaultCredits = this._defaultCredits;\n var index = defaultCredits.indexOf(credit);\n if (index !== -1) {\n defaultCredits.splice(index, 1);\n }\n};\n\nCreditDisplay.prototype.showLightbox = function () {\n this._lightbox.style.display = \"block\";\n this._expanded = true;\n};\n\nCreditDisplay.prototype.hideLightbox = function () {\n this._lightbox.style.display = \"none\";\n this._expanded = false;\n};\n\n/**\n * Updates the credit display before a new frame is rendered.\n */\nCreditDisplay.prototype.update = function () {\n if (this._expanded) {\n styleLightboxContainer(this);\n }\n};\n\n/**\n * Resets the credit display to a beginning of frame state, clearing out current credits.\n */\nCreditDisplay.prototype.beginFrame = function () {\n var currentFrameCredits = this._currentFrameCredits;\n\n var screenCredits = currentFrameCredits.screenCredits;\n screenCredits.removeAll();\n var defaultCredits = this._defaultCredits;\n for (var i = 0; i < defaultCredits.length; ++i) {\n var defaultCredit = defaultCredits[i];\n screenCredits.set(defaultCredit.id, defaultCredit);\n }\n\n currentFrameCredits.lightboxCredits.removeAll();\n\n if (!Credit.equals(CreditDisplay.cesiumCredit, this._cesiumCredit)) {\n this._cesiumCredit = Credit.clone(CreditDisplay.cesiumCredit);\n }\n this._currentCesiumCredit = this._cesiumCredit;\n};\n\n/**\n * Sets the credit display to the end of frame state, displaying credits from the last frame in the credit container.\n */\nCreditDisplay.prototype.endFrame = function () {\n var screenCredits = this._currentFrameCredits.screenCredits.values;\n displayCredits(\n this._screenContainer,\n screenCredits,\n this._delimiter,\n undefined\n );\n\n var lightboxCredits = this._currentFrameCredits.lightboxCredits.values;\n this._expandLink.style.display =\n lightboxCredits.length > 0 ? \"inline\" : \"none\";\n displayCredits(this._creditList, lightboxCredits, undefined, \"li\");\n\n swapCesiumCredit(this);\n};\n\n/**\n * Destroys the resources held by this object. Destroying an object allows for deterministic\n * release of resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nCreditDisplay.prototype.destroy = function () {\n this._lightbox.removeEventListener(\"click\", this._hideLightbox, false);\n\n this.container.removeChild(this._cesiumCreditContainer);\n this.container.removeChild(this._screenContainer);\n this.container.removeChild(this._expandLink);\n this.viewport.removeChild(this._lightbox);\n\n return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nCreditDisplay.prototype.isDestroyed = function () {\n return false;\n};\n\nCreditDisplay._cesiumCredit = undefined;\nCreditDisplay._cesiumCreditInitialized = false;\n\nvar defaultCredit;\nfunction getDefaultCredit() {\n if (!defined(defaultCredit)) {\n var logo = buildModuleUrl(\"Assets/Images/ion-credit.png\");\n\n // When hosting in a WebView, the base URL scheme is file:// or ms-appx-web://\n // which is stripped out from the Credit's <img> tag; use the full path instead\n if (logo.indexOf(\"http://\") !== 0 && logo.indexOf(\"https://\") !== 0) {\n var logoUrl = new Uri(logo);\n logo = logoUrl.getPath();\n }\n\n defaultCredit = new Credit(\n '<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"' +\n logo +\n '\" title=\"Cesium ion\"/></a>',\n true\n );\n }\n\n if (!CreditDisplay._cesiumCreditInitialized) {\n CreditDisplay._cesiumCredit = defaultCredit;\n CreditDisplay._cesiumCreditInitialized = true;\n }\n return defaultCredit;\n}\n\nObject.defineProperties(CreditDisplay, {\n /**\n * Gets or sets the Cesium logo credit.\n * @memberof CreditDisplay\n * @type {Credit}\n */\n cesiumCredit: {\n get: function () {\n getDefaultCredit();\n return CreditDisplay._cesiumCredit;\n },\n set: function (value) {\n CreditDisplay._cesiumCredit = value;\n CreditDisplay._cesiumCreditInitialized = true;\n },\n },\n});\nexport default CreditDisplay;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Appearance from \"./Appearance.js\";\n\n/**\n * Visualizes a vertex attribute by displaying it as a color for debugging.\n * <p>\n * Components for well-known unit-length vectors, i.e., <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>, are scaled and biased\n * from [-1.0, 1.0] to (-1.0, 1.0).\n * </p>\n *\n * @alias DebugAppearance\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {String} options.attributeName The name of the attribute to visualize.\n * @param {Boolean} [options.perInstanceAttribute=false] Boolean that determines whether this attribute is a per-instance geometry attribute.\n * @param {String} [options.glslDatatype='vec3'] The GLSL datatype of the attribute. Supported datatypes are <code>float</code>, <code>vec2</code>, <code>vec3</code>, and <code>vec4</code>.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @exception {DeveloperError} options.glslDatatype must be float, vec2, vec3, or vec4.\n *\n * @example\n * var primitive = new Cesium.Primitive({\n * geometryInstances : // ...\n * appearance : new Cesium.DebugAppearance({\n * attributeName : 'normal'\n * })\n * });\n */\nfunction DebugAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var attributeName = options.attributeName;\n var perInstanceAttribute = options.perInstanceAttribute;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(attributeName)) {\n throw new DeveloperError(\"options.attributeName is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(perInstanceAttribute)) {\n perInstanceAttribute = false;\n }\n\n var glslDatatype = defaultValue(options.glslDatatype, \"vec3\");\n var varyingName = \"v_\" + attributeName;\n var getColor;\n\n // Well-known normalized vector attributes in VertexFormat\n if (\n attributeName === \"normal\" ||\n attributeName === \"tangent\" ||\n attributeName === \"bitangent\"\n ) {\n getColor =\n \"vec4 getColor() { return vec4((\" +\n varyingName +\n \" + vec3(1.0)) * 0.5, 1.0); }\\n\";\n } else {\n // All other attributes, both well-known and custom\n if (attributeName === \"st\") {\n glslDatatype = \"vec2\";\n }\n\n switch (glslDatatype) {\n case \"float\":\n getColor =\n \"vec4 getColor() { return vec4(vec3(\" + varyingName + \"), 1.0); }\\n\";\n break;\n case \"vec2\":\n getColor =\n \"vec4 getColor() { return vec4(\" + varyingName + \", 0.0, 1.0); }\\n\";\n break;\n case \"vec3\":\n getColor =\n \"vec4 getColor() { return vec4(\" + varyingName + \", 1.0); }\\n\";\n break;\n case \"vec4\":\n getColor = \"vec4 getColor() { return \" + varyingName + \"; }\\n\";\n break;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\n \"options.glslDatatype must be float, vec2, vec3, or vec4.\"\n );\n //>>includeEnd('debug');\n }\n }\n\n var vs =\n \"attribute vec3 position3DHigh;\\n\" +\n \"attribute vec3 position3DLow;\\n\" +\n \"attribute float batchId;\\n\" +\n (perInstanceAttribute\n ? \"\"\n : \"attribute \" + glslDatatype + \" \" + attributeName + \";\\n\") +\n \"varying \" +\n glslDatatype +\n \" \" +\n varyingName +\n \";\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \"vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);\\n\" +\n (perInstanceAttribute\n ? varyingName + \" = czm_batchTable_\" + attributeName + \"(batchId);\\n\"\n : varyingName + \" = \" + attributeName + \";\\n\") +\n \"gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\" +\n \"}\";\n var fs =\n \"varying \" +\n glslDatatype +\n \" \" +\n varyingName +\n \";\\n\" +\n getColor +\n \"\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \"gl_FragColor = getColor();\\n\" +\n \"}\";\n\n /**\n * This property is part of the {@link Appearance} interface, but is not\n * used by {@link DebugAppearance} since a fully custom fragment shader is used.\n *\n * @type Material\n *\n * @default undefined\n */\n this.material = undefined;\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent.\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.translucent = defaultValue(options.translucent, false);\n\n this._vertexShaderSource = defaultValue(options.vertexShaderSource, vs);\n this._fragmentShaderSource = defaultValue(options.fragmentShaderSource, fs);\n this._renderState = Appearance.getDefaultRenderState(\n false,\n false,\n options.renderState\n );\n this._closed = defaultValue(options.closed, false);\n\n // Non-derived members\n\n this._attributeName = attributeName;\n this._glslDatatype = glslDatatype;\n}\n\nObject.defineProperties(DebugAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader. The full fragment shader\n * source is built procedurally taking into account the {@link DebugAppearance#material}.\n * Use {@link DebugAppearance#getFragmentShaderSource} to get the full source.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The name of the attribute being visualized.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n attributeName: {\n get: function () {\n return this._attributeName;\n },\n },\n\n /**\n * The GLSL datatype of the attribute being visualized.\n *\n * @memberof DebugAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n glslDatatype: {\n get: function () {\n return this._glslDatatype;\n },\n },\n});\n\n/**\n * Returns the full GLSL fragment shader source, which for {@link DebugAppearance} is just\n * {@link DebugAppearance#fragmentShaderSource}.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nDebugAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link DebugAppearance#translucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nDebugAppearance.prototype.isTranslucent = Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nDebugAppearance.prototype.getRenderState = Appearance.prototype.getRenderState;\nexport default DebugAppearance;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FrustumGeometry from \"../Core/FrustumGeometry.js\";\nimport FrustumOutlineGeometry from \"../Core/FrustumOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Draws the outline of the camera's view frustum.\n *\n * @alias DebugCameraPrimitive\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Camera} options.camera The camera.\n * @param {Number[]} [options.frustumSplits] Distances to the near and far planes of the camera frustums. This overrides the camera's frustum near and far values.\n * @param {Color} [options.color=Color.CYAN] The color of the debug outline.\n * @param {Boolean} [options.updateOnChange=true] Whether the primitive updates when the underlying camera changes.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}.\n *\n * @example\n * primitives.add(new Cesium.DebugCameraPrimitive({\n * camera : camera,\n * color : Cesium.Color.YELLOW\n * }));\n */\nfunction DebugCameraPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.camera)) {\n throw new DeveloperError(\"options.camera is required.\");\n }\n //>>includeEnd('debug');\n\n this._camera = options.camera;\n this._frustumSplits = options.frustumSplits;\n this._color = defaultValue(options.color, Color.CYAN);\n this._updateOnChange = defaultValue(options.updateOnChange, true);\n\n /**\n * Determines if this primitive will be shown.\n *\n * @type Boolean\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * User-defined value returned when the primitive is picked.\n *\n * @type {*}\n * @default undefined\n *\n * @see Scene#pick\n */\n this.id = options.id;\n this._id = undefined;\n\n this._outlinePrimitives = [];\n this._planesPrimitives = [];\n}\n\nvar scratchRight = new Cartesian3();\nvar scratchRotation = new Matrix3();\nvar scratchOrientation = new Quaternion();\nvar scratchPerspective = new PerspectiveFrustum();\nvar scratchPerspectiveOffCenter = new PerspectiveOffCenterFrustum();\nvar scratchOrthographic = new OrthographicFrustum();\nvar scratchOrthographicOffCenter = new OrthographicOffCenterFrustum();\n\nvar scratchColor = new Color();\nvar scratchSplits = [1.0, 100000.0];\n\n/**\n * @private\n */\nDebugCameraPrimitive.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n var planesPrimitives = this._planesPrimitives;\n var outlinePrimitives = this._outlinePrimitives;\n var i;\n var length;\n\n if (this._updateOnChange) {\n // Recreate the primitive every frame\n length = planesPrimitives.length;\n for (i = 0; i < length; ++i) {\n outlinePrimitives[i] =\n outlinePrimitives[i] && outlinePrimitives[i].destroy();\n planesPrimitives[i] =\n planesPrimitives[i] && planesPrimitives[i].destroy();\n }\n planesPrimitives.length = 0;\n outlinePrimitives.length = 0;\n }\n\n if (planesPrimitives.length === 0) {\n var camera = this._camera;\n var cameraFrustum = camera.frustum;\n var frustum;\n if (cameraFrustum instanceof PerspectiveFrustum) {\n frustum = scratchPerspective;\n } else if (cameraFrustum instanceof PerspectiveOffCenterFrustum) {\n frustum = scratchPerspectiveOffCenter;\n } else if (cameraFrustum instanceof OrthographicFrustum) {\n frustum = scratchOrthographic;\n } else {\n frustum = scratchOrthographicOffCenter;\n }\n frustum = cameraFrustum.clone(frustum);\n\n var numFrustums;\n var frustumSplits = this._frustumSplits;\n if (!defined(frustumSplits) || frustumSplits.length <= 1) {\n // Use near and far planes if no splits created\n frustumSplits = scratchSplits;\n frustumSplits[0] = this._camera.frustum.near;\n frustumSplits[1] = this._camera.frustum.far;\n numFrustums = 1;\n } else {\n numFrustums = frustumSplits.length - 1;\n }\n\n var position = camera.positionWC;\n var direction = camera.directionWC;\n var up = camera.upWC;\n var right = camera.rightWC;\n right = Cartesian3.negate(right, scratchRight);\n\n var rotation = scratchRotation;\n Matrix3.setColumn(rotation, 0, right, rotation);\n Matrix3.setColumn(rotation, 1, up, rotation);\n Matrix3.setColumn(rotation, 2, direction, rotation);\n\n var orientation = Quaternion.fromRotationMatrix(\n rotation,\n scratchOrientation\n );\n\n planesPrimitives.length = outlinePrimitives.length = numFrustums;\n\n for (i = 0; i < numFrustums; ++i) {\n frustum.near = frustumSplits[i];\n frustum.far = frustumSplits[i + 1];\n\n planesPrimitives[i] = new Primitive({\n geometryInstances: new GeometryInstance({\n geometry: new FrustumGeometry({\n origin: position,\n orientation: orientation,\n frustum: frustum,\n _drawNearPlane: i === 0,\n }),\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(\n Color.fromAlpha(this._color, 0.1, scratchColor)\n ),\n },\n id: this.id,\n pickPrimitive: this,\n }),\n appearance: new PerInstanceColorAppearance({\n translucent: true,\n flat: true,\n }),\n asynchronous: false,\n });\n\n outlinePrimitives[i] = new Primitive({\n geometryInstances: new GeometryInstance({\n geometry: new FrustumOutlineGeometry({\n origin: position,\n orientation: orientation,\n frustum: frustum,\n _drawNearPlane: i === 0,\n }),\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(this._color),\n },\n id: this.id,\n pickPrimitive: this,\n }),\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n });\n }\n }\n\n length = planesPrimitives.length;\n for (i = 0; i < length; ++i) {\n outlinePrimitives[i].update(frameState);\n planesPrimitives[i].update(frameState);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see DebugCameraPrimitive#destroy\n */\nDebugCameraPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * p = p && p.destroy();\n *\n * @see DebugCameraPrimitive#isDestroyed\n */\nDebugCameraPrimitive.prototype.destroy = function () {\n var length = this._planesPrimitives.length;\n for (var i = 0; i < length; ++i) {\n this._outlinePrimitives[i] =\n this._outlinePrimitives[i] && this._outlinePrimitives[i].destroy();\n this._planesPrimitives[i] =\n this._planesPrimitives[i] && this._planesPrimitives[i].destroy();\n }\n return destroyObject(this);\n};\nexport default DebugCameraPrimitive;\n","import ArcType from \"../Core/ArcType.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PolylineGeometry from \"../Core/PolylineGeometry.js\";\nimport PolylineColorAppearance from \"./PolylineColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Draws the axes of a reference frame defined by a matrix that transforms to world\n * coordinates, i.e., Earth's WGS84 coordinates. The most prominent example is\n * a primitives <code>modelMatrix</code>.\n * <p>\n * The X axis is red; Y is green; and Z is blue.\n * </p>\n * <p>\n * This is for debugging only; it is not optimized for production use.\n * </p>\n *\n * @alias DebugModelMatrixPrimitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.length=10000000.0] The length of the axes in meters.\n * @param {Number} [options.width=2.0] The width of the axes in pixels.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}\n *\n * @example\n * primitives.add(new Cesium.DebugModelMatrixPrimitive({\n * modelMatrix : primitive.modelMatrix, // primitive to debug\n * length : 100000.0,\n * width : 10.0\n * }));\n */\nfunction DebugModelMatrixPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The length of the axes in meters.\n *\n * @type {Number}\n * @default 10000000.0\n */\n this.length = defaultValue(options.length, 10000000.0);\n this._length = undefined;\n\n /**\n * The width of the axes in pixels.\n *\n * @type {Number}\n * @default 2.0\n */\n this.width = defaultValue(options.width, 2.0);\n this._width = undefined;\n\n /**\n * Determines if this primitive will be shown.\n *\n * @type Boolean\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.\n *\n * @type {Matrix4}\n * @default {@link Matrix4.IDENTITY}\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = new Matrix4();\n\n /**\n * User-defined value returned when the primitive is picked.\n *\n * @type {*}\n * @default undefined\n *\n * @see Scene#pick\n */\n this.id = options.id;\n this._id = undefined;\n\n this._primitive = undefined;\n}\n\n/**\n * @private\n */\nDebugModelMatrixPrimitive.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n if (\n !defined(this._primitive) ||\n !Matrix4.equals(this._modelMatrix, this.modelMatrix) ||\n this._length !== this.length ||\n this._width !== this.width ||\n this._id !== this.id\n ) {\n this._modelMatrix = Matrix4.clone(this.modelMatrix, this._modelMatrix);\n this._length = this.length;\n this._width = this.width;\n this._id = this.id;\n\n if (defined(this._primitive)) {\n this._primitive.destroy();\n }\n\n // Workaround projecting (0, 0, 0)\n if (\n this.modelMatrix[12] === 0.0 &&\n this.modelMatrix[13] === 0.0 &&\n this.modelMatrix[14] === 0.0\n ) {\n this.modelMatrix[14] = 0.01;\n }\n\n var x = new GeometryInstance({\n geometry: new PolylineGeometry({\n positions: [Cartesian3.ZERO, Cartesian3.UNIT_X],\n width: this.width,\n vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n colors: [Color.RED, Color.RED],\n arcType: ArcType.NONE,\n }),\n modelMatrix: Matrix4.multiplyByUniformScale(\n this.modelMatrix,\n this.length,\n new Matrix4()\n ),\n id: this.id,\n pickPrimitive: this,\n });\n var y = new GeometryInstance({\n geometry: new PolylineGeometry({\n positions: [Cartesian3.ZERO, Cartesian3.UNIT_Y],\n width: this.width,\n vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n colors: [Color.GREEN, Color.GREEN],\n arcType: ArcType.NONE,\n }),\n modelMatrix: Matrix4.multiplyByUniformScale(\n this.modelMatrix,\n this.length,\n new Matrix4()\n ),\n id: this.id,\n pickPrimitive: this,\n });\n var z = new GeometryInstance({\n geometry: new PolylineGeometry({\n positions: [Cartesian3.ZERO, Cartesian3.UNIT_Z],\n width: this.width,\n vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n colors: [Color.BLUE, Color.BLUE],\n arcType: ArcType.NONE,\n }),\n modelMatrix: Matrix4.multiplyByUniformScale(\n this.modelMatrix,\n this.length,\n new Matrix4()\n ),\n id: this.id,\n pickPrimitive: this,\n });\n\n this._primitive = new Primitive({\n geometryInstances: [x, y, z],\n appearance: new PolylineColorAppearance(),\n asynchronous: false,\n });\n }\n\n this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see DebugModelMatrixPrimitive#destroy\n */\nDebugModelMatrixPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * p = p && p.destroy();\n *\n * @see DebugModelMatrixPrimitive#isDestroyed\n */\nDebugModelMatrixPrimitive.prototype.destroy = function () {\n this._primitive = this._primitive && this._primitive.destroy();\n return destroyObject(this);\n};\nexport default DebugModelMatrixPrimitive;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport DepthPlaneFS from \"../Shaders/DepthPlaneFS.js\";\nimport DepthPlaneVS from \"../Shaders/DepthPlaneVS.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * @private\n */\nfunction DepthPlane() {\n this._rs = undefined;\n this._sp = undefined;\n this._va = undefined;\n this._command = undefined;\n this._mode = undefined;\n this._useLogDepth = false;\n}\n\nvar depthQuadScratch = FeatureDetection.supportsTypedArrays()\n ? new Float32Array(12)\n : [];\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchCartesian3 = new Cartesian3();\nvar scratchCartesian4 = new Cartesian3();\nvar scratchCartesian5 = new Cartesian3();\n\nfunction computeDepthQuad(ellipsoid, frameState) {\n var radii = ellipsoid.radii;\n var camera = frameState.camera;\n var center, eastOffset, northOffset;\n\n if (camera.frustum instanceof OrthographicFrustum) {\n center = Cartesian3.ZERO;\n eastOffset = camera.rightWC;\n northOffset = camera.upWC;\n } else {\n var p = camera.positionWC;\n\n // Find the corresponding position in the scaled space of the ellipsoid.\n var q = Cartesian3.multiplyComponents(\n ellipsoid.oneOverRadii,\n p,\n scratchCartesian1\n );\n\n var qUnit = Cartesian3.normalize(q, scratchCartesian2);\n\n // Determine the east and north directions at q.\n var eUnit = Cartesian3.normalize(\n Cartesian3.cross(Cartesian3.UNIT_Z, q, scratchCartesian3),\n scratchCartesian3\n );\n var nUnit = Cartesian3.normalize(\n Cartesian3.cross(qUnit, eUnit, scratchCartesian4),\n scratchCartesian4\n );\n\n var qMagnitude = Cartesian3.magnitude(q);\n\n // Determine the radius of the 'limb' of the ellipsoid.\n var wMagnitude = Math.sqrt(qMagnitude * qMagnitude - 1.0);\n\n // Compute the center and offsets.\n center = Cartesian3.multiplyByScalar(\n qUnit,\n 1.0 / qMagnitude,\n scratchCartesian1\n );\n var scalar = wMagnitude / qMagnitude;\n eastOffset = Cartesian3.multiplyByScalar(eUnit, scalar, scratchCartesian2);\n northOffset = Cartesian3.multiplyByScalar(nUnit, scalar, scratchCartesian3);\n }\n\n // A conservative measure for the longitudes would be to use the min/max longitudes of the bounding frustum.\n var upperLeft = Cartesian3.add(center, northOffset, scratchCartesian5);\n Cartesian3.subtract(upperLeft, eastOffset, upperLeft);\n Cartesian3.multiplyComponents(radii, upperLeft, upperLeft);\n Cartesian3.pack(upperLeft, depthQuadScratch, 0);\n\n var lowerLeft = Cartesian3.subtract(center, northOffset, scratchCartesian5);\n Cartesian3.subtract(lowerLeft, eastOffset, lowerLeft);\n Cartesian3.multiplyComponents(radii, lowerLeft, lowerLeft);\n Cartesian3.pack(lowerLeft, depthQuadScratch, 3);\n\n var upperRight = Cartesian3.add(center, northOffset, scratchCartesian5);\n Cartesian3.add(upperRight, eastOffset, upperRight);\n Cartesian3.multiplyComponents(radii, upperRight, upperRight);\n Cartesian3.pack(upperRight, depthQuadScratch, 6);\n\n var lowerRight = Cartesian3.subtract(center, northOffset, scratchCartesian5);\n Cartesian3.add(lowerRight, eastOffset, lowerRight);\n Cartesian3.multiplyComponents(radii, lowerRight, lowerRight);\n Cartesian3.pack(lowerRight, depthQuadScratch, 9);\n\n return depthQuadScratch;\n}\n\nDepthPlane.prototype.update = function (frameState) {\n this._mode = frameState.mode;\n if (frameState.mode !== SceneMode.SCENE3D) {\n return;\n }\n\n var context = frameState.context;\n var ellipsoid = frameState.mapProjection.ellipsoid;\n var useLogDepth = frameState.useLogDepth;\n\n if (!defined(this._command)) {\n this._rs = RenderState.fromCache({\n // Write depth, not color\n cull: {\n enabled: true,\n },\n depthTest: {\n enabled: true,\n },\n colorMask: {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n },\n });\n\n this._command = new DrawCommand({\n renderState: this._rs,\n boundingVolume: new BoundingSphere(\n Cartesian3.ZERO,\n ellipsoid.maximumRadius\n ),\n pass: Pass.OPAQUE,\n owner: this,\n });\n }\n\n if (!defined(this._sp) || this._useLogDepth !== useLogDepth) {\n this._useLogDepth = useLogDepth;\n\n var vs = new ShaderSource({\n sources: [DepthPlaneVS],\n });\n var fs = new ShaderSource({\n sources: [DepthPlaneFS],\n });\n if (useLogDepth) {\n var extension =\n \"#ifdef GL_EXT_frag_depth \\n\" +\n \"#extension GL_EXT_frag_depth : enable \\n\" +\n \"#endif \\n\\n\";\n\n fs.sources.push(extension);\n fs.defines.push(\"LOG_DEPTH\");\n vs.defines.push(\"LOG_DEPTH\");\n }\n\n this._sp = ShaderProgram.replaceCache({\n shaderProgram: this._sp,\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: {\n position: 0,\n },\n });\n\n this._command.shaderProgram = this._sp;\n }\n\n // update depth plane\n var depthQuad = computeDepthQuad(ellipsoid, frameState);\n\n // depth plane\n if (!defined(this._va)) {\n var geometry = new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: depthQuad,\n }),\n },\n indices: [0, 1, 2, 2, 1, 3],\n primitiveType: PrimitiveType.TRIANGLES,\n });\n\n this._va = VertexArray.fromGeometry({\n context: context,\n geometry: geometry,\n attributeLocations: {\n position: 0,\n },\n bufferUsage: BufferUsage.DYNAMIC_DRAW,\n });\n\n this._command.vertexArray = this._va;\n } else {\n this._va.getAttribute(0).vertexBuffer.copyFromArrayView(depthQuad);\n }\n};\n\nDepthPlane.prototype.execute = function (context, passState) {\n if (this._mode === SceneMode.SCENE3D) {\n this._command.execute(context, passState);\n }\n};\n\nDepthPlane.prototype.isDestroyed = function () {\n return false;\n};\n\nDepthPlane.prototype.destroy = function () {\n this._sp = this._sp && this._sp.destroy();\n this._va = this._va && this._va.destroy();\n};\nexport default DepthPlane;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 position;\\n\\\n\\n\\\nvarying vec4 positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n positionEC = czm_modelView * position;\\n\\\n gl_Position = czm_projection * positionEC;\\n\\\n\\n\\\n czm_vertexLogDepth();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec4 positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 position;\\n\\\n vec3 direction;\\n\\\n if (czm_orthographicIn3D == 1.0)\\n\\\n {\\n\\\n vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw;\\n\\\n vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom\\n\\\n vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top\\n\\\n position = vec3(mix(minPlane, maxPlane, uv), 0.0);\\n\\\n direction = vec3(0.0, 0.0, -1.0);\\n\\\n } \\n\\\n else \\n\\\n {\\n\\\n position = vec3(0.0);\\n\\\n direction = normalize(positionEC.xyz);\\n\\\n }\\n\\\n\\n\\\n czm_ray ray = czm_ray(position, direction);\\n\\\n\\n\\\n vec3 ellipsoid_center = czm_view[3].xyz;\\n\\\n\\n\\\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\\n\\\n if (!czm_isEmpty(intersection))\\n\\\n {\\n\\\n gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","import defined from \"../Core/defined.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\n\n/**\n * @private\n */\nfunction DerivedCommand() {}\n\nvar fragDepthRegex = /\\bgl_FragDepthEXT\\b/;\nvar discardRegex = /\\bdiscard\\b/;\n\nfunction getDepthOnlyShaderProgram(context, shaderProgram) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n \"depthOnly\"\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n var fs = shaderProgram.fragmentShaderSource;\n\n var i;\n var writesDepthOrDiscards = false;\n var sources = fs.sources;\n var length = sources.length;\n for (i = 0; i < length; ++i) {\n if (fragDepthRegex.test(sources[i]) || discardRegex.test(sources[i])) {\n writesDepthOrDiscards = true;\n break;\n }\n }\n\n var usesLogDepth = false;\n var defines = fs.defines;\n length = defines.length;\n for (i = 0; i < length; ++i) {\n if (defines[i] === \"LOG_DEPTH\") {\n usesLogDepth = true;\n break;\n }\n }\n\n var source;\n if (!writesDepthOrDiscards && !usesLogDepth) {\n source =\n \"void main() \\n\" + \"{ \\n\" + \" gl_FragColor = vec4(1.0); \\n\" + \"} \\n\";\n fs = new ShaderSource({\n sources: [source],\n });\n } else if (!writesDepthOrDiscards && usesLogDepth) {\n source =\n \"#ifdef GL_EXT_frag_depth \\n\" +\n \"#extension GL_EXT_frag_depth : enable \\n\" +\n \"#endif \\n\\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" gl_FragColor = vec4(1.0); \\n\" +\n \" czm_writeLogDepth(); \\n\" +\n \"} \\n\";\n fs = new ShaderSource({\n defines: [\"LOG_DEPTH\"],\n sources: [source],\n });\n }\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"depthOnly\",\n {\n vertexShaderSource: shaderProgram.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nfunction getDepthOnlyRenderState(scene, renderState) {\n var cache = scene._depthOnlyRenderStateCache;\n var depthOnlyState = cache[renderState.id];\n if (!defined(depthOnlyState)) {\n var rs = RenderState.getState(renderState);\n rs.depthMask = true;\n rs.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n\n depthOnlyState = RenderState.fromCache(rs);\n cache[renderState.id] = depthOnlyState;\n }\n\n return depthOnlyState;\n}\n\nDerivedCommand.createDepthOnlyDerivedCommand = function (\n scene,\n command,\n context,\n result\n) {\n // For a depth only pass, we bind a framebuffer with only a depth attachment (no color attachments),\n // do not write color, and write depth. If the fragment shader doesn't modify the fragment depth\n // or discard, the driver can replace the fragment shader with a pass-through shader. We're unsure if this\n // actually happens so we modify the shader to use a pass-through fragment shader.\n\n if (!defined(result)) {\n result = {};\n }\n\n var shader;\n var renderState;\n if (defined(result.depthOnlyCommand)) {\n shader = result.depthOnlyCommand.shaderProgram;\n renderState = result.depthOnlyCommand.renderState;\n }\n\n result.depthOnlyCommand = DrawCommand.shallowClone(\n command,\n result.depthOnlyCommand\n );\n\n if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n result.depthOnlyCommand.shaderProgram = getDepthOnlyShaderProgram(\n context,\n command.shaderProgram\n );\n result.depthOnlyCommand.renderState = getDepthOnlyRenderState(\n scene,\n command.renderState\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.depthOnlyCommand.shaderProgram = shader;\n result.depthOnlyCommand.renderState = renderState;\n }\n\n return result;\n};\n\nvar writeLogDepthRegex = /\\s+czm_writeLogDepth\\(/;\nvar vertexlogDepthRegex = /\\s+czm_vertexLogDepth\\(/;\nvar extensionRegex = /\\s*#extension\\s+GL_EXT_frag_depth\\s*:\\s*enable/;\n\nfunction getLogDepthShaderProgram(context, shaderProgram) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n \"logDepth\"\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n var vs = shaderProgram.vertexShaderSource.clone();\n var fs = shaderProgram.fragmentShaderSource.clone();\n\n vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n vs.defines.push(\"LOG_DEPTH\");\n fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n fs.defines.push(\"LOG_DEPTH\");\n\n var i;\n var logMain;\n var writesLogDepth = false;\n var sources = vs.sources;\n var length = sources.length;\n for (i = 0; i < length; ++i) {\n if (vertexlogDepthRegex.test(sources[i])) {\n writesLogDepth = true;\n break;\n }\n }\n\n if (!writesLogDepth) {\n for (i = 0; i < length; ++i) {\n sources[i] = ShaderSource.replaceMain(sources[i], \"czm_log_depth_main\");\n }\n\n logMain =\n \"\\n\\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_log_depth_main(); \\n\" +\n \" czm_vertexLogDepth(); \\n\" +\n \"} \\n\";\n sources.push(logMain);\n }\n\n sources = fs.sources;\n length = sources.length;\n\n writesLogDepth = false;\n for (i = 0; i < length; ++i) {\n if (writeLogDepthRegex.test(sources[i])) {\n writesLogDepth = true;\n }\n }\n // This define indicates that a log depth value is written by the shader but doesn't use czm_writeLogDepth.\n if (fs.defines.indexOf(\"LOG_DEPTH_WRITE\") !== -1) {\n writesLogDepth = true;\n }\n\n var addExtension = true;\n for (i = 0; i < length; ++i) {\n if (extensionRegex.test(sources[i])) {\n addExtension = false;\n }\n }\n\n var logSource = \"\";\n if (addExtension) {\n logSource +=\n \"#ifdef GL_EXT_frag_depth \\n\" +\n \"#extension GL_EXT_frag_depth : enable \\n\" +\n \"#endif \\n\\n\";\n }\n\n if (!writesLogDepth) {\n for (i = 0; i < length; i++) {\n sources[i] = ShaderSource.replaceMain(sources[i], \"czm_log_depth_main\");\n }\n\n logSource +=\n \"\\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_log_depth_main(); \\n\" +\n \" czm_writeLogDepth(); \\n\" +\n \"} \\n\";\n }\n\n sources.push(logSource);\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"logDepth\",\n {\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nDerivedCommand.createLogDepthCommand = function (command, context, result) {\n if (!defined(result)) {\n result = {};\n }\n\n var shader;\n if (defined(result.command)) {\n shader = result.command.shaderProgram;\n }\n\n result.command = DrawCommand.shallowClone(command, result.command);\n\n if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n result.command.shaderProgram = getLogDepthShaderProgram(\n context,\n command.shaderProgram\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.command.shaderProgram = shader;\n }\n\n return result;\n};\n\nfunction getPickShaderProgram(context, shaderProgram, pickId) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n \"pick\"\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n var fs = shaderProgram.fragmentShaderSource;\n\n var sources = fs.sources;\n var length = sources.length;\n\n var newMain =\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_non_pick_main(); \\n\" +\n \" if (gl_FragColor.a == 0.0) { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" gl_FragColor = \" +\n pickId +\n \"; \\n\" +\n \"} \\n\";\n var newSources = new Array(length + 1);\n for (var i = 0; i < length; ++i) {\n newSources[i] = ShaderSource.replaceMain(sources[i], \"czm_non_pick_main\");\n }\n newSources[length] = newMain;\n fs = new ShaderSource({\n sources: newSources,\n defines: fs.defines,\n });\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"pick\",\n {\n vertexShaderSource: shaderProgram.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nfunction getPickRenderState(scene, renderState) {\n var cache = scene.picking.pickRenderStateCache;\n var pickState = cache[renderState.id];\n if (!defined(pickState)) {\n var rs = RenderState.getState(renderState);\n rs.blending.enabled = false;\n\n // Turns on depth writing for opaque and translucent passes\n // Overlapping translucent geometry on the globe surface may exhibit z-fighting\n // during the pick pass which may not match the rendered scene. Once\n // terrain is on by default and ground primitives are used instead\n // this will become less of a problem.\n rs.depthMask = true;\n\n pickState = RenderState.fromCache(rs);\n cache[renderState.id] = pickState;\n }\n\n return pickState;\n}\n\nDerivedCommand.createPickDerivedCommand = function (\n scene,\n command,\n context,\n result\n) {\n if (!defined(result)) {\n result = {};\n }\n\n var shader;\n var renderState;\n if (defined(result.pickCommand)) {\n shader = result.pickCommand.shaderProgram;\n renderState = result.pickCommand.renderState;\n }\n\n result.pickCommand = DrawCommand.shallowClone(command, result.pickCommand);\n\n if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n result.pickCommand.shaderProgram = getPickShaderProgram(\n context,\n command.shaderProgram,\n command.pickId\n );\n result.pickCommand.renderState = getPickRenderState(\n scene,\n command.renderState\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.pickCommand.shaderProgram = shader;\n result.pickCommand.renderState = renderState;\n }\n\n return result;\n};\n\nfunction getHdrShaderProgram(context, shaderProgram) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n \"HDR\"\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n var vs = shaderProgram.vertexShaderSource.clone();\n var fs = shaderProgram.fragmentShaderSource.clone();\n\n vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n vs.defines.push(\"HDR\");\n fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n fs.defines.push(\"HDR\");\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n \"HDR\",\n {\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nDerivedCommand.createHdrCommand = function (command, context, result) {\n if (!defined(result)) {\n result = {};\n }\n\n var shader;\n if (defined(result.command)) {\n shader = result.command.shaderProgram;\n }\n\n result.command = DrawCommand.shallowClone(command, result.command);\n\n if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n result.command.shaderProgram = getHdrShaderProgram(\n context,\n command.shaderProgram\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.command.shaderProgram = shader;\n }\n\n return result;\n};\nexport default DerivedCommand;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\n\n/**\n * @private\n */\nfunction DeviceOrientationCameraController(scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = scene;\n\n this._lastAlpha = undefined;\n this._lastBeta = undefined;\n this._lastGamma = undefined;\n\n this._alpha = undefined;\n this._beta = undefined;\n this._gamma = undefined;\n\n var that = this;\n\n function callback(e) {\n var alpha = e.alpha;\n if (!defined(alpha)) {\n that._alpha = undefined;\n that._beta = undefined;\n that._gamma = undefined;\n return;\n }\n\n that._alpha = CesiumMath.toRadians(alpha);\n that._beta = CesiumMath.toRadians(e.beta);\n that._gamma = CesiumMath.toRadians(e.gamma);\n }\n\n window.addEventListener(\"deviceorientation\", callback, false);\n\n this._removeListener = function () {\n window.removeEventListener(\"deviceorientation\", callback, false);\n };\n}\n\nvar scratchQuaternion1 = new Quaternion();\nvar scratchQuaternion2 = new Quaternion();\nvar scratchMatrix3 = new Matrix3();\n\nfunction rotate(camera, alpha, beta, gamma) {\n var direction = camera.direction;\n var right = camera.right;\n var up = camera.up;\n\n var bQuat = Quaternion.fromAxisAngle(direction, beta, scratchQuaternion2);\n var gQuat = Quaternion.fromAxisAngle(right, gamma, scratchQuaternion1);\n\n var rotQuat = Quaternion.multiply(gQuat, bQuat, gQuat);\n\n var aQuat = Quaternion.fromAxisAngle(up, alpha, scratchQuaternion2);\n Quaternion.multiply(aQuat, rotQuat, rotQuat);\n\n var matrix = Matrix3.fromQuaternion(rotQuat, scratchMatrix3);\n Matrix3.multiplyByVector(matrix, right, right);\n Matrix3.multiplyByVector(matrix, up, up);\n Matrix3.multiplyByVector(matrix, direction, direction);\n}\n\nDeviceOrientationCameraController.prototype.update = function () {\n if (!defined(this._alpha)) {\n return;\n }\n\n if (!defined(this._lastAlpha)) {\n this._lastAlpha = this._alpha;\n this._lastBeta = this._beta;\n this._lastGamma = this._gamma;\n }\n\n var a = this._lastAlpha - this._alpha;\n var b = this._lastBeta - this._beta;\n var g = this._lastGamma - this._gamma;\n\n rotate(this._scene.camera, -a, b, g);\n\n this._lastAlpha = this._alpha;\n this._lastBeta = this._beta;\n this._lastGamma = this._gamma;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nDeviceOrientationCameraController.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the resources held by this object. Destroying an object allows for deterministic\n * release of resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDeviceOrientationCameraController.prototype.destroy = function () {\n this._removeListener();\n return destroyObject(this);\n};\nexport default DeviceOrientationCameraController;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A light that gets emitted in a single direction from infinitely far away.\n *\n * @param {Object} options Object with the following properties:\n * @param {Cartesian3} options.direction The direction in which light gets emitted.\n * @param {Color} [options.color=Color.WHITE] The color of the light.\n * @param {Number} [options.intensity=1.0] The intensity of the light.\n *\n * @exception {DeveloperError} options.direction cannot be zero-length\n *\n * @alias DirectionalLight\n * @constructor\n */\nfunction DirectionalLight(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.typeOf.object(\"options.direction\", options.direction);\n if (Cartesian3.equals(options.direction, Cartesian3.ZERO)) {\n throw new DeveloperError(\"options.direction cannot be zero-length\");\n }\n //>>includeEnd('debug');\n\n /**\n * The direction in which light gets emitted.\n * @type {Cartesian3}\n */\n this.direction = Cartesian3.clone(options.direction);\n\n /**\n * The color of the light.\n * @type {Color}\n * @default Color.WHITE\n */\n this.color = Color.clone(defaultValue(options.color, Color.WHITE));\n\n /**\n * The intensity of the light.\n * @type {Number}\n * @default 1.0\n */\n this.intensity = defaultValue(options.intensity, 1.0);\n}\n\nexport default DirectionalLight;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef WRITE_DEPTH\\n\\\n#ifdef GL_EXT_frag_depth\\n\\\n#extension GL_EXT_frag_depth : enable\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\nuniform vec3 u_radii;\\n\\\nuniform vec3 u_oneOverEllipsoidRadiiSquared;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\n\\n\\\nvec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)\\n\\\n{\\n\\\n vec3 positionEC = czm_pointAlongRay(ray, intersection);\\n\\\n vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;\\n\\\n vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));\\n\\\n vec3 sphericalNormal = normalize(positionMC / u_radii);\\n\\\n vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates\\n\\\n vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordiantes\\n\\\n\\n\\\n vec2 st = czm_ellipsoidWgs84TextureCoordinates(sphericalNormal);\\n\\\n vec3 positionToEyeEC = -positionEC;\\n\\\n\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.s = st.s;\\n\\\n materialInput.st = st;\\n\\\n materialInput.str = (positionMC + u_radii) / u_radii;\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef ONLY_SUN_LIGHTING\\n\\\n return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);\\n\\\n#else\\n\\\n return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii\\n\\\n // in the vertex shader. Only when it is larger than some constant, march along the ray.\\n\\\n // Otherwise perform one intersection test which will be the common case.\\n\\\n\\n\\\n // Test if the ray intersects a sphere with the ellipsoid's maximum radius.\\n\\\n // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test\\n\\\n // may cause false negatives. This will discard fragments before marching the ray forward.\\n\\\n float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;\\n\\\n vec3 direction = normalize(v_positionEC);\\n\\\n vec3 ellipsoidCenter = czm_modelView[3].xyz;\\n\\\n\\n\\\n float t1 = -1.0;\\n\\\n float t2 = -1.0;\\n\\\n\\n\\\n float b = -2.0 * dot(direction, ellipsoidCenter);\\n\\\n float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;\\n\\\n\\n\\\n float discriminant = b * b - 4.0 * c;\\n\\\n if (discriminant >= 0.0) {\\n\\\n t1 = (-b - sqrt(discriminant)) * 0.5;\\n\\\n t2 = (-b + sqrt(discriminant)) * 0.5;\\n\\\n }\\n\\\n\\n\\\n if (t1 < 0.0 && t2 < 0.0) {\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n float t = min(t1, t2);\\n\\\n if (t < 0.0) {\\n\\\n t = 0.0;\\n\\\n }\\n\\\n\\n\\\n // March ray forward to intersection with larger sphere and find\\n\\\n czm_ray ray = czm_ray(t * direction, direction);\\n\\\n\\n\\\n vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);\\n\\\n\\n\\\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);\\n\\\n\\n\\\n if (czm_isEmpty(intersection))\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n\\n\\\n // If the viewer is outside, compute outsideFaceColor, with normals facing outward.\\n\\\n vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);\\n\\\n\\n\\\n // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward.\\n\\\n vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);\\n\\\n\\n\\\n gl_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);\\n\\\n gl_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);\\n\\\n\\n\\\n#ifdef WRITE_DEPTH\\n\\\n#ifdef GL_EXT_frag_depth\\n\\\n t = (intersection.start != 0.0) ? intersection.start : intersection.stop;\\n\\\n vec3 positionEC = czm_pointAlongRay(ray, t);\\n\\\n vec4 positionCC = czm_projection * vec4(positionEC, 1.0);\\n\\\n#ifdef LOG_DEPTH\\n\\\n czm_writeLogDepth(1.0 + positionCC.w);\\n\\\n#else\\n\\\n float z = positionCC.z / positionCC.w;\\n\\\n\\n\\\n float n = czm_depthRange.near;\\n\\\n float f = czm_depthRange.far;\\n\\\n\\n\\\n gl_FragDepthEXT = (z * (f - n) + f + n) * 0.5;\\n\\\n#endif\\n\\\n#endif\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position;\\n\\\n\\n\\\nuniform vec3 u_radii;\\n\\\n\\n\\\nvarying vec3 v_positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates.\\n\\\n // Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry,\\n\\\n // but doing it here allows us to change the radii without rewriting the vertex data, and\\n\\\n // allows all ellipsoids to reuse the same vertex data.\\n\\\n vec4 p = vec4(u_radii * position, 1.0);\\n\\\n\\n\\\n v_positionEC = (czm_modelView * p).xyz; // position in eye coordinates\\n\\\n gl_Position = czm_modelViewProjection * p; // position in clip coordinates\\n\\\n\\n\\\n // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums\\n\\\n // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the\\n\\\n // ellipsoid (does not write depth) that was rendered in the farther frustum.\\n\\\n //\\n\\\n // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates\\n\\\n // artifacts since some fragments can be alpha blended twice. This is solved by only rendering\\n\\\n // the ellipsoid in the closest frustum to the viewer.\\n\\\n gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);\\n\\\n\\n\\\n czm_vertexLogDepth();\\n\\\n}\\n\\\n\";\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport EllipsoidFS from \"../Shaders/EllipsoidFS.js\";\nimport EllipsoidVS from \"../Shaders/EllipsoidVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport Material from \"./Material.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nvar attributeLocations = {\n position: 0,\n};\n\n/**\n * A renderable ellipsoid. It can also draw spheres when the three {@link EllipsoidPrimitive#radii} components are equal.\n * <p>\n * This is only supported in 3D. The ellipsoid is not shown in 2D or Columbus view.\n * </p>\n *\n * @alias EllipsoidPrimitive\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The center of the ellipsoid in the ellipsoid's model coordinates.\n * @param {Cartesian3} [options.radii] The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the ellipsoid from model to world coordinates.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Material} [options.material=Material.ColorType] The surface appearance of the primitive.\n * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}\n * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n *\n * @private\n */\nfunction EllipsoidPrimitive(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The center of the ellipsoid in the ellipsoid's model coordinates.\n * <p>\n * The default is {@link Cartesian3.ZERO}.\n * </p>\n *\n * @type {Cartesian3}\n * @default {@link Cartesian3.ZERO}\n *\n * @see EllipsoidPrimitive#modelMatrix\n */\n this.center = Cartesian3.clone(defaultValue(options.center, Cartesian3.ZERO));\n this._center = new Cartesian3();\n\n /**\n * The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.\n * When these are the same, the ellipsoid is a sphere.\n * <p>\n * The default is <code>undefined</code>. The ellipsoid is not drawn until a radii is provided.\n * </p>\n *\n * @type {Cartesian3}\n * @default undefined\n *\n *\n * @example\n * // A sphere with a radius of 2.0\n * e.radii = new Cesium.Cartesian3(2.0, 2.0, 2.0);\n *\n * @see EllipsoidPrimitive#modelMatrix\n */\n this.radii = Cartesian3.clone(options.radii);\n this._radii = new Cartesian3();\n\n this._oneOverEllipsoidRadiiSquared = new Cartesian3();\n this._boundingSphere = new BoundingSphere();\n\n /**\n * The 4x4 transformation matrix that transforms the ellipsoid from model to world coordinates.\n * When this is the identity matrix, the ellipsoid is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n * Local reference frames can be used by providing a different transformation matrix, like that returned\n * by {@link Transforms.eastNorthUpToFixedFrame}.\n *\n * @type {Matrix4}\n * @default {@link Matrix4.IDENTITY}\n *\n * @example\n * var origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n * e.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._modelMatrix = new Matrix4();\n this._computedModelMatrix = new Matrix4();\n\n /**\n * Determines if the ellipsoid primitive will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * The surface appearance of the ellipsoid. This can be one of several built-in {@link Material} objects or a custom material, scripted with\n * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n * <p>\n * The default material is <code>Material.ColorType</code>.\n * </p>\n *\n * @type {Material}\n * @default Material.fromType(Material.ColorType)\n *\n *\n * @example\n * // 1. Change the color of the default material to yellow\n * e.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n *\n * // 2. Change material to horizontal stripes\n * e.material = Cesium.Material.fromType(Cesium.Material.StripeType);\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = defaultValue(\n options.material,\n Material.fromType(Material.ColorType)\n );\n this._material = undefined;\n this._translucent = undefined;\n\n /**\n * User-defined object returned when the ellipsoid is picked.\n *\n * @type Object\n *\n * @default undefined\n *\n * @see Scene#pick\n */\n this.id = options.id;\n this._id = undefined;\n\n /**\n * This property is for debugging only; it is not for production use nor is it optimized.\n * <p>\n * Draws the bounding sphere for each draw command in the primitive.\n * </p>\n *\n * @type {Boolean}\n *\n * @default false\n */\n this.debugShowBoundingVolume = defaultValue(\n options.debugShowBoundingVolume,\n false\n );\n\n /**\n * @private\n */\n this.onlySunLighting = defaultValue(options.onlySunLighting, false);\n this._onlySunLighting = false;\n\n /**\n * @private\n */\n this._depthTestEnabled = defaultValue(options.depthTestEnabled, true);\n\n this._useLogDepth = false;\n\n this._sp = undefined;\n this._rs = undefined;\n this._va = undefined;\n\n this._pickSP = undefined;\n this._pickId = undefined;\n\n this._colorCommand = new DrawCommand({\n owner: defaultValue(options._owner, this),\n });\n this._pickCommand = new DrawCommand({\n owner: defaultValue(options._owner, this),\n pickOnly: true,\n });\n\n var that = this;\n this._uniforms = {\n u_radii: function () {\n return that.radii;\n },\n u_oneOverEllipsoidRadiiSquared: function () {\n return that._oneOverEllipsoidRadiiSquared;\n },\n };\n\n this._pickUniforms = {\n czm_pickColor: function () {\n return that._pickId.color;\n },\n };\n}\n\nfunction getVertexArray(context) {\n var vertexArray = context.cache.ellipsoidPrimitive_vertexArray;\n\n if (defined(vertexArray)) {\n return vertexArray;\n }\n\n var geometry = BoxGeometry.createGeometry(\n BoxGeometry.fromDimensions({\n dimensions: new Cartesian3(2.0, 2.0, 2.0),\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n\n vertexArray = VertexArray.fromGeometry({\n context: context,\n geometry: geometry,\n attributeLocations: attributeLocations,\n bufferUsage: BufferUsage.STATIC_DRAW,\n interleave: true,\n });\n\n context.cache.ellipsoidPrimitive_vertexArray = vertexArray;\n return vertexArray;\n}\n\nvar logDepthExtension =\n \"#ifdef GL_EXT_frag_depth \\n\" +\n \"#extension GL_EXT_frag_depth : enable \\n\" +\n \"#endif \\n\\n\";\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.material must be defined.\n */\nEllipsoidPrimitive.prototype.update = function (frameState) {\n if (\n !this.show ||\n frameState.mode !== SceneMode.SCENE3D ||\n !defined(this.center) ||\n !defined(this.radii)\n ) {\n return;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this.material)) {\n throw new DeveloperError(\"this.material must be defined.\");\n }\n //>>includeEnd('debug');\n\n var context = frameState.context;\n var translucent = this.material.isTranslucent();\n var translucencyChanged = this._translucent !== translucent;\n\n if (!defined(this._rs) || translucencyChanged) {\n this._translucent = translucent;\n\n // If this render state is ever updated to use a non-default\n // depth range, the hard-coded values in EllipsoidVS.glsl need\n // to be updated as well.\n\n this._rs = RenderState.fromCache({\n // Cull front faces - not back faces - so the ellipsoid doesn't\n // disappear if the viewer enters the bounding box.\n cull: {\n enabled: true,\n face: CullFace.FRONT,\n },\n depthTest: {\n enabled: this._depthTestEnabled,\n },\n // Only write depth when EXT_frag_depth is supported since the depth for\n // the bounding box is wrong; it is not the true depth of the ray casted ellipsoid.\n depthMask: !translucent && context.fragmentDepth,\n blending: translucent ? BlendingState.ALPHA_BLEND : undefined,\n });\n }\n\n if (!defined(this._va)) {\n this._va = getVertexArray(context);\n }\n\n var boundingSphereDirty = false;\n\n var radii = this.radii;\n if (!Cartesian3.equals(this._radii, radii)) {\n Cartesian3.clone(radii, this._radii);\n\n var r = this._oneOverEllipsoidRadiiSquared;\n r.x = 1.0 / (radii.x * radii.x);\n r.y = 1.0 / (radii.y * radii.y);\n r.z = 1.0 / (radii.z * radii.z);\n\n boundingSphereDirty = true;\n }\n\n if (\n !Matrix4.equals(this.modelMatrix, this._modelMatrix) ||\n !Cartesian3.equals(this.center, this._center)\n ) {\n Matrix4.clone(this.modelMatrix, this._modelMatrix);\n Cartesian3.clone(this.center, this._center);\n\n // Translate model coordinates used for rendering such that the origin is the center of the ellipsoid.\n Matrix4.multiplyByTranslation(\n this.modelMatrix,\n this.center,\n this._computedModelMatrix\n );\n boundingSphereDirty = true;\n }\n\n if (boundingSphereDirty) {\n Cartesian3.clone(Cartesian3.ZERO, this._boundingSphere.center);\n this._boundingSphere.radius = Cartesian3.maximumComponent(radii);\n BoundingSphere.transform(\n this._boundingSphere,\n this._computedModelMatrix,\n this._boundingSphere\n );\n }\n\n var materialChanged = this._material !== this.material;\n this._material = this.material;\n this._material.update(context);\n\n var lightingChanged = this.onlySunLighting !== this._onlySunLighting;\n this._onlySunLighting = this.onlySunLighting;\n\n var useLogDepth = frameState.useLogDepth;\n var useLogDepthChanged = this._useLogDepth !== useLogDepth;\n this._useLogDepth = useLogDepth;\n\n var colorCommand = this._colorCommand;\n var vs;\n var fs;\n\n // Recompile shader when material, lighting, or translucency changes\n if (\n materialChanged ||\n lightingChanged ||\n translucencyChanged ||\n useLogDepthChanged\n ) {\n vs = new ShaderSource({\n sources: [EllipsoidVS],\n });\n fs = new ShaderSource({\n sources: [this.material.shaderSource, EllipsoidFS],\n });\n if (this.onlySunLighting) {\n fs.defines.push(\"ONLY_SUN_LIGHTING\");\n }\n if (!translucent && context.fragmentDepth) {\n fs.defines.push(\"WRITE_DEPTH\");\n }\n if (this._useLogDepth) {\n vs.defines.push(\"LOG_DEPTH\");\n fs.defines.push(\"LOG_DEPTH\");\n fs.sources.push(logDepthExtension);\n }\n\n this._sp = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._sp,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n colorCommand.vertexArray = this._va;\n colorCommand.renderState = this._rs;\n colorCommand.shaderProgram = this._sp;\n colorCommand.uniformMap = combine(this._uniforms, this.material._uniforms);\n colorCommand.executeInClosestFrustum = translucent;\n }\n\n var commandList = frameState.commandList;\n var passes = frameState.passes;\n\n if (passes.render) {\n colorCommand.boundingVolume = this._boundingSphere;\n colorCommand.debugShowBoundingVolume = this.debugShowBoundingVolume;\n colorCommand.modelMatrix = this._computedModelMatrix;\n colorCommand.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n commandList.push(colorCommand);\n }\n\n if (passes.pick) {\n var pickCommand = this._pickCommand;\n\n if (!defined(this._pickId) || this._id !== this.id) {\n this._id = this.id;\n this._pickId = this._pickId && this._pickId.destroy();\n this._pickId = context.createPickId({\n primitive: this,\n id: this.id,\n });\n }\n\n // Recompile shader when material changes\n if (\n materialChanged ||\n lightingChanged ||\n !defined(this._pickSP) ||\n useLogDepthChanged\n ) {\n vs = new ShaderSource({\n sources: [EllipsoidVS],\n });\n fs = new ShaderSource({\n sources: [this.material.shaderSource, EllipsoidFS],\n pickColorQualifier: \"uniform\",\n });\n if (this.onlySunLighting) {\n fs.defines.push(\"ONLY_SUN_LIGHTING\");\n }\n if (!translucent && context.fragmentDepth) {\n fs.defines.push(\"WRITE_DEPTH\");\n }\n if (this._useLogDepth) {\n vs.defines.push(\"LOG_DEPTH\");\n fs.defines.push(\"LOG_DEPTH\");\n fs.sources.push(logDepthExtension);\n }\n\n this._pickSP = ShaderProgram.replaceCache({\n context: context,\n shaderProgram: this._pickSP,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n\n pickCommand.vertexArray = this._va;\n pickCommand.renderState = this._rs;\n pickCommand.shaderProgram = this._pickSP;\n pickCommand.uniformMap = combine(\n combine(this._uniforms, this._pickUniforms),\n this.material._uniforms\n );\n pickCommand.executeInClosestFrustum = translucent;\n }\n\n pickCommand.boundingVolume = this._boundingSphere;\n pickCommand.modelMatrix = this._computedModelMatrix;\n pickCommand.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n commandList.push(pickCommand);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see EllipsoidPrimitive#destroy\n */\nEllipsoidPrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * e = e && e.destroy();\n *\n * @see EllipsoidPrimitive#isDestroyed\n */\nEllipsoidPrimitive.prototype.destroy = function () {\n this._sp = this._sp && this._sp.destroy();\n this._pickSP = this._pickSP && this._pickSP.destroy();\n this._pickId = this._pickId && this._pickId.destroy();\n return destroyObject(this);\n};\nexport default EllipsoidPrimitive;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport EllipsoidSurfaceAppearanceFS from \"../Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js\";\nimport EllipsoidSurfaceAppearanceVS from \"../Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\n/**\n * An appearance for geometry on the surface of the ellipsoid like {@link PolygonGeometry}\n * and {@link RectangleGeometry}, which supports all materials like {@link MaterialAppearance}\n * with {@link MaterialAppearance.MaterialSupport.ALL}. However, this appearance requires\n * fewer vertex attributes since the fragment shader can procedurally compute <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>.\n *\n * @alias EllipsoidSurfaceAppearance\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n * @param {Boolean} [options.faceForward=options.aboveGround] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n * @param {Boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link EllipsoidSurfaceAppearance#renderState} has alpha blending enabled.\n * @param {Boolean} [options.aboveGround=false] When <code>true</code>, the geometry is expected to be on the ellipsoid's surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {String} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {String} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {Object} [options.renderState] Optional render state to override the default render state.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n *\n * @example\n * var primitive = new Cesium.Primitive({\n * geometryInstances : new Cesium.GeometryInstance({\n * geometry : new Cesium.PolygonGeometry({\n * vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,\n * // ...\n * })\n * }),\n * appearance : new Cesium.EllipsoidSurfaceAppearance({\n * material : Cesium.Material.fromType('Stripe')\n * })\n * });\n */\nfunction EllipsoidSurfaceAppearance(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var translucent = defaultValue(options.translucent, true);\n var aboveGround = defaultValue(options.aboveGround, false);\n\n /**\n * The material used to determine the fragment color. Unlike other {@link EllipsoidSurfaceAppearance}\n * properties, this is not read-only, so an appearance's material can change on the fly.\n *\n * @type Material\n *\n * @default {@link Material.ColorType}\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = defined(options.material)\n ? options.material\n : Material.fromType(Material.ColorType);\n\n /**\n * When <code>true</code>, the geometry is expected to appear translucent.\n *\n * @type {Boolean}\n *\n * @default true\n */\n this.translucent = defaultValue(options.translucent, true);\n\n this._vertexShaderSource = defaultValue(\n options.vertexShaderSource,\n EllipsoidSurfaceAppearanceVS\n );\n this._fragmentShaderSource = defaultValue(\n options.fragmentShaderSource,\n EllipsoidSurfaceAppearanceFS\n );\n this._renderState = Appearance.getDefaultRenderState(\n translucent,\n !aboveGround,\n options.renderState\n );\n this._closed = false;\n\n // Non-derived members\n\n this._flat = defaultValue(options.flat, false);\n this._faceForward = defaultValue(options.faceForward, aboveGround);\n this._aboveGround = aboveGround;\n}\n\nObject.defineProperties(EllipsoidSurfaceAppearance.prototype, {\n /**\n * The GLSL source code for the vertex shader.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n vertexShaderSource: {\n get: function () {\n return this._vertexShaderSource;\n },\n },\n\n /**\n * The GLSL source code for the fragment shader. The full fragment shader\n * source is built procedurally taking into account {@link EllipsoidSurfaceAppearance#material},\n * {@link EllipsoidSurfaceAppearance#flat}, and {@link EllipsoidSurfaceAppearance#faceForward}.\n * Use {@link EllipsoidSurfaceAppearance#getFragmentShaderSource} to get the full source.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {String}\n * @readonly\n */\n fragmentShaderSource: {\n get: function () {\n return this._fragmentShaderSource;\n },\n },\n\n /**\n * The WebGL fixed-function state to use when rendering the geometry.\n * <p>\n * The render state can be explicitly defined when constructing a {@link EllipsoidSurfaceAppearance}\n * instance, or it is set implicitly via {@link EllipsoidSurfaceAppearance#translucent}\n * and {@link EllipsoidSurfaceAppearance#aboveGround}.\n * </p>\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {Object}\n * @readonly\n */\n renderState: {\n get: function () {\n return this._renderState;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be closed so\n * {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled.\n * If the viewer enters the geometry, it will not be visible.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n closed: {\n get: function () {\n return this._closed;\n },\n },\n\n /**\n * The {@link VertexFormat} that this appearance instance is compatible with.\n * A geometry can have more vertex attributes and still be compatible - at a\n * potential performance cost - but it can't have less.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type VertexFormat\n * @readonly\n *\n * @default {@link EllipsoidSurfaceAppearance.VERTEX_FORMAT}\n */\n vertexFormat: {\n get: function () {\n return EllipsoidSurfaceAppearance.VERTEX_FORMAT;\n },\n },\n\n /**\n * When <code>true</code>, flat shading is used in the fragment shader,\n * which means lighting is not taking into account.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n flat: {\n get: function () {\n return this._flat;\n },\n },\n\n /**\n * When <code>true</code>, the fragment shader flips the surface normal\n * as needed to ensure that the normal faces the viewer to avoid\n * dark spots. This is useful when both sides of a geometry should be\n * shaded like {@link WallGeometry}.\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default true\n */\n faceForward: {\n get: function () {\n return this._faceForward;\n },\n },\n\n /**\n * When <code>true</code>, the geometry is expected to be on the ellipsoid's\n * surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState}\n * has backface culling enabled.\n *\n *\n * @memberof EllipsoidSurfaceAppearance.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n aboveGround: {\n get: function () {\n return this._aboveGround;\n },\n },\n});\n\n/**\n * The {@link VertexFormat} that all {@link EllipsoidSurfaceAppearance} instances\n * are compatible with, which requires only <code>position</code> and <code>st</code>\n * attributes. Other attributes are procedurally computed in the fragment shader.\n *\n * @type VertexFormat\n *\n * @constant\n */\nEllipsoidSurfaceAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_ST;\n\n/**\n * Procedurally creates the full GLSL fragment shader source. For {@link EllipsoidSurfaceAppearance},\n * this is derived from {@link EllipsoidSurfaceAppearance#fragmentShaderSource}, {@link EllipsoidSurfaceAppearance#flat},\n * and {@link EllipsoidSurfaceAppearance#faceForward}.\n *\n * @function\n *\n * @returns {String} The full GLSL fragment shader source.\n */\nEllipsoidSurfaceAppearance.prototype.getFragmentShaderSource =\n Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link EllipsoidSurfaceAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {Boolean} <code>true</code> if the appearance is translucent.\n */\nEllipsoidSurfaceAppearance.prototype.isTranslucent =\n Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state. This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {Object} The render state.\n */\nEllipsoidSurfaceAppearance.prototype.getRenderState =\n Appearance.prototype.getRenderState;\nexport default EllipsoidSurfaceAppearance;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position3DHigh;\\n\\\nattribute vec3 position3DLow;\\n\\\nattribute vec2 st;\\n\\\nattribute float batchId;\\n\\\n\\n\\\nvarying vec3 v_positionMC;\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 p = czm_computePosition();\\n\\\n\\n\\\n v_positionMC = position3DHigh + position3DLow; // position in model coordinates\\n\\\n v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates\\n\\\n v_st = st;\\n\\\n\\n\\\n gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_positionMC;\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n czm_materialInput materialInput;\\n\\\n\\n\\\n vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\\n\\\n#ifdef FACE_FORWARD\\n\\\n normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n materialInput.s = v_st.s;\\n\\\n materialInput.st = v_st;\\n\\\n materialInput.str = vec3(v_st, 0.0);\\n\\\n\\n\\\n // Convert tangent space material normal to eye space\\n\\\n materialInput.normalEC = normalEC;\\n\\\n materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\\n\\\n\\n\\\n // Convert view vector to world space\\n\\\n vec3 positionToEyeEC = -v_positionEC;\\n\\\n materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n gl_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional\n * performance improvements by rendering less geometry and dispatching less terrain requests.\n *\n * @alias Fog\n * @constructor\n */\nfunction Fog() {\n /**\n * <code>true</code> if fog is enabled, <code>false</code> otherwise.\n * @type {Boolean}\n * @default true\n */\n this.enabled = true;\n /**\n * A scalar that determines the density of the fog. Terrain that is in full fog are culled.\n * The density of the fog increases as this number approaches 1.0 and becomes less dense as it approaches zero.\n * The more dense the fog is, the more aggressively the terrain is culled. For example, if the camera is a height of\n * 1000.0m above the ellipsoid, increasing the value to 3.0e-3 will cause many tiles close to the viewer be culled.\n * Decreasing the value will push the fog further from the viewer, but decrease performance as more of the terrain is rendered.\n * @type {Number}\n * @default 2.0e-4\n */\n this.density = 2.0e-4;\n /**\n * A factor used to increase the screen space error of terrain tiles when they are partially in fog. The effect is to reduce\n * the number of terrain tiles requested for rendering. If set to zero, the feature will be disabled. If the value is increased\n * for mountainous regions, less tiles will need to be requested, but the terrain meshes near the horizon may be a noticeably\n * lower resolution. If the value is increased in a relatively flat area, there will be little noticeable change on the horizon.\n * @type {Number}\n * @default 2.0\n */\n this.screenSpaceErrorFactor = 2.0;\n /**\n * The minimum brightness of the fog color from lighting. A value of 0.0 can cause the fog to be completely black. A value of 1.0 will not affect\n * the brightness at all.\n * @type {Number}\n * @default 0.03\n */\n this.minimumBrightness = 0.03;\n}\n\n// These values were found by sampling the density at certain views and finding at what point culled tiles impacted the view at the horizon.\nvar heightsTable = [\n 359.393,\n 800.749,\n 1275.6501,\n 2151.1192,\n 3141.7763,\n 4777.5198,\n 6281.2493,\n 12364.307,\n 15900.765,\n 49889.0549,\n 78026.8259,\n 99260.7344,\n 120036.3873,\n 151011.0158,\n 156091.1953,\n 203849.3112,\n 274866.9803,\n 319916.3149,\n 493552.0528,\n 628733.5874,\n];\nvar densityTable = [\n 2.0e-5,\n 2.0e-4,\n 1.0e-4,\n 7.0e-5,\n 5.0e-5,\n 4.0e-5,\n 3.0e-5,\n 1.9e-5,\n 1.0e-5,\n 8.5e-6,\n 6.2e-6,\n 5.8e-6,\n 5.3e-6,\n 5.2e-6,\n 5.1e-6,\n 4.2e-6,\n 4.0e-6,\n 3.4e-6,\n 2.6e-6,\n 2.2e-6,\n];\n\n// Scale densities by 1e6 to bring lowest value to ~1. Prevents divide by zero.\nfor (var i = 0; i < densityTable.length; ++i) {\n densityTable[i] *= 1.0e6;\n}\n// Change range to [0, 1].\nvar tableStartDensity = densityTable[1];\nvar tableEndDensity = densityTable[densityTable.length - 1];\nfor (var j = 0; j < densityTable.length; ++j) {\n densityTable[j] =\n (densityTable[j] - tableEndDensity) / (tableStartDensity - tableEndDensity);\n}\n\nvar tableLastIndex = 0;\n\nfunction findInterval(height) {\n var heights = heightsTable;\n var length = heights.length;\n\n if (height < heights[0]) {\n tableLastIndex = 0;\n return tableLastIndex;\n } else if (height > heights[length - 1]) {\n tableLastIndex = length - 2;\n return tableLastIndex;\n }\n\n // Take advantage of temporal coherence by checking current, next and previous intervals\n // for containment of time.\n if (height >= heights[tableLastIndex]) {\n if (tableLastIndex + 1 < length && height < heights[tableLastIndex + 1]) {\n return tableLastIndex;\n } else if (\n tableLastIndex + 2 < length &&\n height < heights[tableLastIndex + 2]\n ) {\n ++tableLastIndex;\n return tableLastIndex;\n }\n } else if (tableLastIndex - 1 >= 0 && height >= heights[tableLastIndex - 1]) {\n --tableLastIndex;\n return tableLastIndex;\n }\n\n // The above failed so do a linear search.\n var i;\n for (i = 0; i < length - 2; ++i) {\n if (height >= heights[i] && height < heights[i + 1]) {\n break;\n }\n }\n\n tableLastIndex = i;\n return tableLastIndex;\n}\n\nvar scratchPositionNormal = new Cartesian3();\n\nFog.prototype.update = function (frameState) {\n var enabled = (frameState.fog.enabled = this.enabled);\n if (!enabled) {\n return;\n }\n\n var camera = frameState.camera;\n var positionCartographic = camera.positionCartographic;\n\n // Turn off fog in space.\n if (\n !defined(positionCartographic) ||\n positionCartographic.height > 800000.0 ||\n frameState.mode !== SceneMode.SCENE3D\n ) {\n frameState.fog.enabled = false;\n return;\n }\n\n var height = positionCartographic.height;\n var i = findInterval(height);\n var t = CesiumMath.clamp(\n (height - heightsTable[i]) / (heightsTable[i + 1] - heightsTable[i]),\n 0.0,\n 1.0\n );\n var density = CesiumMath.lerp(densityTable[i], densityTable[i + 1], t);\n\n // Again, scale value to be in the range of densityTable (prevents divide by zero) and change to new range.\n var startDensity = this.density * 1.0e6;\n var endDensity = (startDensity / tableStartDensity) * tableEndDensity;\n density = density * (startDensity - endDensity) * 1.0e-6;\n\n // Fade fog in as the camera tilts toward the horizon.\n var positionNormal = Cartesian3.normalize(\n camera.positionWC,\n scratchPositionNormal\n );\n var dot = Math.abs(Cartesian3.dot(camera.directionWC, positionNormal));\n density *= 1.0 - dot;\n\n frameState.fog.density = density;\n frameState.fog.sse = this.screenSpaceErrorFactor;\n frameState.fog.minimumBrightness = this.minimumBrightness;\n};\nexport default Fog;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport TimeConstants from \"../Core/TimeConstants.js\";\n\n/**\n * Monitors the frame rate (frames per second) in a {@link Scene} and raises an event if the frame rate is\n * lower than a threshold. Later, if the frame rate returns to the required level, a separate event is raised.\n * To avoid creating multiple FrameRateMonitors for a single {@link Scene}, use {@link FrameRateMonitor.fromScene}\n * instead of constructing an instance explicitly.\n *\n * @alias FrameRateMonitor\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Scene} options.scene The Scene instance for which to monitor performance.\n * @param {Number} [options.samplingWindow=5.0] The length of the sliding window over which to compute the average frame rate, in seconds.\n * @param {Number} [options.quietPeriod=2.0] The length of time to wait at startup and each time the page becomes visible (i.e. when the user\n * switches back to the tab) before starting to measure performance, in seconds.\n * @param {Number} [options.warmupPeriod=5.0] The length of the warmup period, in seconds. During the warmup period, a separate\n * (usually lower) frame rate is required.\n * @param {Number} [options.minimumFrameRateDuringWarmup=4] The minimum frames-per-second that are required for acceptable performance during\n * the warmup period. If the frame rate averages less than this during any samplingWindow during the warmupPeriod, the\n * lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any.\n * @param {Number} [options.minimumFrameRateAfterWarmup=8] The minimum frames-per-second that are required for acceptable performance after\n * the end of the warmup period. If the frame rate averages less than this during any samplingWindow after the warmupPeriod, the\n * lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any.\n */\nfunction FrameRateMonitor(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.scene)) {\n throw new DeveloperError(\"options.scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = options.scene;\n\n /**\n * Gets or sets the length of the sliding window over which to compute the average frame rate, in seconds.\n * @type {Number}\n */\n this.samplingWindow = defaultValue(\n options.samplingWindow,\n FrameRateMonitor.defaultSettings.samplingWindow\n );\n\n /**\n * Gets or sets the length of time to wait at startup and each time the page becomes visible (i.e. when the user\n * switches back to the tab) before starting to measure performance, in seconds.\n * @type {Number}\n */\n this.quietPeriod = defaultValue(\n options.quietPeriod,\n FrameRateMonitor.defaultSettings.quietPeriod\n );\n\n /**\n * Gets or sets the length of the warmup period, in seconds. During the warmup period, a separate\n * (usually lower) frame rate is required.\n * @type {Number}\n */\n this.warmupPeriod = defaultValue(\n options.warmupPeriod,\n FrameRateMonitor.defaultSettings.warmupPeriod\n );\n\n /**\n * Gets or sets the minimum frames-per-second that are required for acceptable performance during\n * the warmup period. If the frame rate averages less than this during any <code>samplingWindow</code> during the <code>warmupPeriod</code>, the\n * <code>lowFrameRate</code> event will be raised and the page will redirect to the <code>redirectOnLowFrameRateUrl</code>, if any.\n * @type {Number}\n */\n this.minimumFrameRateDuringWarmup = defaultValue(\n options.minimumFrameRateDuringWarmup,\n FrameRateMonitor.defaultSettings.minimumFrameRateDuringWarmup\n );\n\n /**\n * Gets or sets the minimum frames-per-second that are required for acceptable performance after\n * the end of the warmup period. If the frame rate averages less than this during any <code>samplingWindow</code> after the <code>warmupPeriod</code>, the\n * <code>lowFrameRate</code> event will be raised and the page will redirect to the <code>redirectOnLowFrameRateUrl</code>, if any.\n * @type {Number}\n */\n this.minimumFrameRateAfterWarmup = defaultValue(\n options.minimumFrameRateAfterWarmup,\n FrameRateMonitor.defaultSettings.minimumFrameRateAfterWarmup\n );\n\n this._lowFrameRate = new Event();\n this._nominalFrameRate = new Event();\n\n this._frameTimes = [];\n this._needsQuietPeriod = true;\n this._quietPeriodEndTime = 0.0;\n this._warmupPeriodEndTime = 0.0;\n this._frameRateIsLow = false;\n this._lastFramesPerSecond = undefined;\n this._pauseCount = 0;\n\n var that = this;\n this._preUpdateRemoveListener = this._scene.preUpdate.addEventListener(\n function (scene, time) {\n update(that, time);\n }\n );\n\n this._hiddenPropertyName =\n document.hidden !== undefined\n ? \"hidden\"\n : document.mozHidden !== undefined\n ? \"mozHidden\"\n : document.msHidden !== undefined\n ? \"msHidden\"\n : document.webkitHidden !== undefined\n ? \"webkitHidden\"\n : undefined;\n\n var visibilityChangeEventName =\n document.hidden !== undefined\n ? \"visibilitychange\"\n : document.mozHidden !== undefined\n ? \"mozvisibilitychange\"\n : document.msHidden !== undefined\n ? \"msvisibilitychange\"\n : document.webkitHidden !== undefined\n ? \"webkitvisibilitychange\"\n : undefined;\n\n function visibilityChangeListener() {\n visibilityChanged(that);\n }\n\n this._visibilityChangeRemoveListener = undefined;\n if (defined(visibilityChangeEventName)) {\n document.addEventListener(\n visibilityChangeEventName,\n visibilityChangeListener,\n false\n );\n\n this._visibilityChangeRemoveListener = function () {\n document.removeEventListener(\n visibilityChangeEventName,\n visibilityChangeListener,\n false\n );\n };\n }\n}\n\n/**\n * The default frame rate monitoring settings. These settings are used when {@link FrameRateMonitor.fromScene}\n * needs to create a new frame rate monitor, and for any settings that are not passed to the\n * {@link FrameRateMonitor} constructor.\n *\n * @memberof FrameRateMonitor\n * @type {Object}\n */\nFrameRateMonitor.defaultSettings = {\n samplingWindow: 5.0,\n quietPeriod: 2.0,\n warmupPeriod: 5.0,\n minimumFrameRateDuringWarmup: 4,\n minimumFrameRateAfterWarmup: 8,\n};\n\n/**\n * Gets the {@link FrameRateMonitor} for a given scene. If the scene does not yet have\n * a {@link FrameRateMonitor}, one is created with the {@link FrameRateMonitor.defaultSettings}.\n *\n * @param {Scene} scene The scene for which to get the {@link FrameRateMonitor}.\n * @returns {FrameRateMonitor} The scene's {@link FrameRateMonitor}.\n */\nFrameRateMonitor.fromScene = function (scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n if (\n !defined(scene._frameRateMonitor) ||\n scene._frameRateMonitor.isDestroyed()\n ) {\n scene._frameRateMonitor = new FrameRateMonitor({\n scene: scene,\n });\n }\n\n return scene._frameRateMonitor;\n};\n\nObject.defineProperties(FrameRateMonitor.prototype, {\n /**\n * Gets the {@link Scene} instance for which to monitor performance.\n * @memberof FrameRateMonitor.prototype\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the event that is raised when a low frame rate is detected. The function will be passed\n * the {@link Scene} instance as its first parameter and the average number of frames per second\n * over the sampling window as its second parameter.\n * @memberof FrameRateMonitor.prototype\n * @type {Event}\n */\n lowFrameRate: {\n get: function () {\n return this._lowFrameRate;\n },\n },\n\n /**\n * Gets the event that is raised when the frame rate returns to a normal level after having been low.\n * The function will be passed the {@link Scene} instance as its first parameter and the average\n * number of frames per second over the sampling window as its second parameter.\n * @memberof FrameRateMonitor.prototype\n * @type {Event}\n */\n nominalFrameRate: {\n get: function () {\n return this._nominalFrameRate;\n },\n },\n\n /**\n * Gets the most recently computed average frames-per-second over the last <code>samplingWindow</code>.\n * This property may be undefined if the frame rate has not been computed.\n * @memberof FrameRateMonitor.prototype\n * @type {Number}\n */\n lastFramesPerSecond: {\n get: function () {\n return this._lastFramesPerSecond;\n },\n },\n});\n\n/**\n * Pauses monitoring of the frame rate. To resume monitoring, {@link FrameRateMonitor#unpause}\n * must be called once for each time this function is called.\n * @memberof FrameRateMonitor\n */\nFrameRateMonitor.prototype.pause = function () {\n ++this._pauseCount;\n if (this._pauseCount === 1) {\n this._frameTimes.length = 0;\n this._lastFramesPerSecond = undefined;\n }\n};\n\n/**\n * Resumes monitoring of the frame rate. If {@link FrameRateMonitor#pause} was called\n * multiple times, this function must be called the same number of times in order to\n * actually resume monitoring.\n * @memberof FrameRateMonitor\n */\nFrameRateMonitor.prototype.unpause = function () {\n --this._pauseCount;\n if (this._pauseCount <= 0) {\n this._pauseCount = 0;\n this._needsQuietPeriod = true;\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof FrameRateMonitor\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see FrameRateMonitor#destroy\n */\nFrameRateMonitor.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Unsubscribes this instance from all events it is listening to.\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof FrameRateMonitor\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see FrameRateMonitor#isDestroyed\n */\nFrameRateMonitor.prototype.destroy = function () {\n this._preUpdateRemoveListener();\n\n if (defined(this._visibilityChangeRemoveListener)) {\n this._visibilityChangeRemoveListener();\n }\n\n return destroyObject(this);\n};\n\nfunction update(monitor, time) {\n if (monitor._pauseCount > 0) {\n return;\n }\n\n var timeStamp = getTimestamp();\n\n if (monitor._needsQuietPeriod) {\n monitor._needsQuietPeriod = false;\n monitor._frameTimes.length = 0;\n monitor._quietPeriodEndTime =\n timeStamp + monitor.quietPeriod / TimeConstants.SECONDS_PER_MILLISECOND;\n monitor._warmupPeriodEndTime =\n monitor._quietPeriodEndTime +\n (monitor.warmupPeriod + monitor.samplingWindow) /\n TimeConstants.SECONDS_PER_MILLISECOND;\n } else if (timeStamp >= monitor._quietPeriodEndTime) {\n monitor._frameTimes.push(timeStamp);\n\n var beginningOfWindow =\n timeStamp -\n monitor.samplingWindow / TimeConstants.SECONDS_PER_MILLISECOND;\n\n if (\n monitor._frameTimes.length >= 2 &&\n monitor._frameTimes[0] <= beginningOfWindow\n ) {\n while (\n monitor._frameTimes.length >= 2 &&\n monitor._frameTimes[1] < beginningOfWindow\n ) {\n monitor._frameTimes.shift();\n }\n\n var averageTimeBetweenFrames =\n (timeStamp - monitor._frameTimes[0]) / (monitor._frameTimes.length - 1);\n\n monitor._lastFramesPerSecond = 1000.0 / averageTimeBetweenFrames;\n\n var maximumFrameTime =\n 1000.0 /\n (timeStamp > monitor._warmupPeriodEndTime\n ? monitor.minimumFrameRateAfterWarmup\n : monitor.minimumFrameRateDuringWarmup);\n if (averageTimeBetweenFrames > maximumFrameTime) {\n if (!monitor._frameRateIsLow) {\n monitor._frameRateIsLow = true;\n monitor._needsQuietPeriod = true;\n monitor.lowFrameRate.raiseEvent(\n monitor.scene,\n monitor._lastFramesPerSecond\n );\n }\n } else if (monitor._frameRateIsLow) {\n monitor._frameRateIsLow = false;\n monitor._needsQuietPeriod = true;\n monitor.nominalFrameRate.raiseEvent(\n monitor.scene,\n monitor._lastFramesPerSecond\n );\n }\n }\n }\n}\n\nfunction visibilityChanged(monitor) {\n if (document[monitor._hiddenPropertyName]) {\n monitor.pause();\n } else {\n monitor.unpause();\n }\n}\nexport default FrameRateMonitor;\n","import SceneMode from \"./SceneMode.js\";\n\n/**\n * State information about the current frame. An instance of this class\n * is provided to update functions.\n *\n * @param {Context} context The rendering context\n * @param {CreditDisplay} creditDisplay Handles adding and removing credits from an HTML element\n * @param {JobScheduler} jobScheduler The job scheduler\n *\n * @alias FrameState\n * @constructor\n *\n * @private\n */\nfunction FrameState(context, creditDisplay, jobScheduler) {\n /**\n * The rendering context.\n *\n * @type {Context}\n */\n this.context = context;\n\n /**\n * An array of rendering commands.\n *\n * @type {DrawCommand[]}\n */\n this.commandList = [];\n\n /**\n * An array of shadow maps.\n * @type {ShadowMap[]}\n */\n this.shadowMaps = [];\n\n /**\n * The BRDF look up texture generator used for image-based lighting for PBR models\n * @type {BrdfLutGenerator}\n */\n this.brdfLutGenerator = undefined;\n\n /**\n * The environment map used for image-based lighting for PBR models\n * @type {CubeMap}\n */\n this.environmentMap = undefined;\n\n /**\n * The spherical harmonic coefficients used for image-based lighting for PBR models.\n * @type {Cartesian3[]}\n */\n this.sphericalHarmonicCoefficients = undefined;\n\n /**\n * The specular environment atlas used for image-based lighting for PBR models.\n * @type {Texture}\n */\n this.specularEnvironmentMaps = undefined;\n\n /**\n * The maximum level-of-detail of the specular environment atlas used for image-based lighting for PBR models.\n * @type {Number}\n */\n this.specularEnvironmentMapsMaximumLOD = undefined;\n\n /**\n * The current mode of the scene.\n *\n * @type {SceneMode}\n * @default {@link SceneMode.SCENE3D}\n */\n this.mode = SceneMode.SCENE3D;\n\n /**\n * The current morph transition time between 2D/Columbus View and 3D,\n * with 0.0 being 2D or Columbus View and 1.0 being 3D.\n *\n * @type {Number}\n */\n this.morphTime = SceneMode.getMorphTime(SceneMode.SCENE3D);\n\n /**\n * The current frame number.\n *\n * @type {Number}\n * @default 0\n */\n this.frameNumber = 0;\n\n /**\n * <code>true</code> if a new frame has been issued and the frame number has been updated.\n *\n * @type {Boolean}\n * @default false\n */\n this.newFrame = false;\n\n /**\n * The scene's current time.\n *\n * @type {JulianDate}\n * @default undefined\n */\n this.time = undefined;\n\n /**\n * The job scheduler.\n *\n * @type {JobScheduler}\n */\n this.jobScheduler = jobScheduler;\n\n /**\n * The map projection to use in 2D and Columbus View modes.\n *\n * @type {MapProjection}\n * @default undefined\n */\n this.mapProjection = undefined;\n\n /**\n * The current camera.\n *\n * @type {Camera}\n * @default undefined\n */\n this.camera = undefined;\n\n /**\n * Whether the camera is underground.\n *\n * @type {Boolean}\n * @default false\n */\n this.cameraUnderground = false;\n\n /**\n * The {@link GlobeTranslucencyState} object used by the scene.\n *\n * @type {GlobeTranslucencyState}\n * @default undefined\n */\n this.globeTranslucencyState = undefined;\n\n /**\n * The culling volume.\n *\n * @type {CullingVolume}\n * @default undefined\n */\n this.cullingVolume = undefined;\n\n /**\n * The current occluder.\n *\n * @type {Occluder}\n * @default undefined\n */\n this.occluder = undefined;\n\n /**\n * The maximum screen-space error used to drive level-of-detail refinement. Higher\n * values will provide better performance but lower visual quality.\n *\n * @type {Number}\n * @default 2\n */\n this.maximumScreenSpaceError = undefined;\n\n /**\n * Ratio between a pixel and a density-independent pixel. Provides a standard unit of\n * measure for real pixel measurements appropriate to a particular device.\n *\n * @type {Number}\n * @default 1.0\n */\n this.pixelRatio = 1.0;\n\n /**\n * @typedef FrameState.Passes\n * @type {Object}\n * @property {Boolean} render <code>true</code> if the primitive should update for a render pass, <code>false</code> otherwise.\n * @property {Boolean} pick <code>true</code> if the primitive should update for a picking pass, <code>false</code> otherwise.\n * @property {Boolean} depth <code>true</code> if the primitive should update for a depth only pass, <code>false</code> otherwise.\n * @property {Boolean} postProcess <code>true</code> if the primitive should update for a per-feature post-process pass, <code>false</code> otherwise.\n * @property {Boolean} offscreen <code>true</code> if the primitive should update for an offscreen pass, <code>false</code> otherwise.\n */\n\n /**\n * @type {FrameState.Passes}\n */\n this.passes = {\n /**\n * @default false\n */\n render: false,\n /**\n * @default false\n */\n pick: false,\n /**\n * @default false\n */\n depth: false,\n /**\n * @default false\n */\n postProcess: false,\n /**\n * @default false\n */\n offscreen: false,\n };\n\n /**\n * The credit display.\n *\n * @type {CreditDisplay}\n */\n this.creditDisplay = creditDisplay;\n\n /**\n * An array of functions to be called at the end of the frame. This array\n * will be cleared after each frame.\n * <p>\n * This allows queueing up events in <code>update</code> functions and\n * firing them at a time when the subscribers are free to change the\n * scene state, e.g., manipulate the camera, instead of firing events\n * directly in <code>update</code> functions.\n * </p>\n *\n * @type {FrameState.AfterRenderCallback[]}\n *\n * @example\n * frameState.afterRender.push(function() {\n * // take some action, raise an event, etc.\n * });\n */\n this.afterRender = [];\n\n /**\n * Gets whether or not to optimized for 3D only.\n *\n * @type {Boolean}\n * @default false\n */\n this.scene3DOnly = false;\n\n /**\n * @typedef FrameState.Fog\n * @type {Object}\n * @property {Boolean} enabled <code>true</code> if fog is enabled, <code>false</code> otherwise.\n * @property {Number} density A positive number used to mix the color and fog color based on camera distance.\n * @property {Number} sse A scalar used to modify the screen space error of geometry partially in fog.\n * @property {Number} minimumBrightness The minimum brightness of terrain with fog applied.\n */\n\n /**\n * @type {FrameState.Fog}\n */\n\n this.fog = {\n /**\n * @default false\n */\n enabled: false,\n density: undefined,\n sse: undefined,\n minimumBrightness: undefined,\n };\n\n /**\n * A scalar used to exaggerate the terrain.\n * @type {Number}\n * @default 1.0\n */\n this.terrainExaggeration = 1.0;\n\n /**\n * @typedef FrameState.ShadowState\n * @type {Object}\n * @property {Boolean} shadowsEnabled Whether there are any active shadow maps this frame.\n * @property {Boolean} lightShadowsEnabled Whether there are any active shadow maps that originate from light sources. Does not include shadow maps that are used for analytical purposes.\n * @property {ShadowMap[]} shadowMaps All shadow maps that are enabled this frame.\n * @property {ShadowMap[]} lightShadowMaps Shadow maps that originate from light sources. Does not include shadow maps that are used for analytical purposes. Only these shadow maps will be used to generate receive shadows shaders.\n * @property {Number} nearPlane The near plane of the scene's frustum commands. Used for fitting cascaded shadow maps.\n * @property {Number} farPlane The far plane of the scene's frustum commands. Used for fitting cascaded shadow maps.\n * @property {Number} closestObjectSize The size of the bounding volume that is closest to the camera. This is used to place more shadow detail near the object.\n * @property {Number} lastDirtyTime The time when a shadow map was last dirty\n * @property {Boolean} outOfView Whether the shadows maps are out of view this frame\n */\n\n /**\n * @type {FrameState.ShadowState}\n */\n\n this.shadowState = {\n /**\n * @default true\n */\n shadowsEnabled: true,\n shadowMaps: [],\n lightShadowMaps: [],\n /**\n * @default 1.0\n */\n nearPlane: 1.0,\n /**\n * @default 5000.0\n */\n farPlane: 5000.0,\n /**\n * @default 1000.0\n */\n closestObjectSize: 1000.0,\n /**\n * @default 0\n */\n lastDirtyTime: 0,\n /**\n * @default true\n */\n outOfView: true,\n };\n\n /**\n * The position of the splitter to use when rendering imagery layers on either side of a splitter.\n * This value should be between 0.0 and 1.0 with 0 being the far left of the viewport and 1 being the far right of the viewport.\n * @type {Number}\n * @default 0.0\n */\n this.imagerySplitPosition = 0.0;\n\n /**\n * Distances to the near and far planes of the camera frustums\n * @type {Number[]}\n * @default []\n */\n this.frustumSplits = [];\n\n /**\n * The current scene background color\n *\n * @type {Color}\n */\n this.backgroundColor = undefined;\n\n /**\n * The light used to shade the scene.\n *\n * @type {Light}\n */\n this.light = undefined;\n\n /**\n * The distance from the camera at which to disable the depth test of billboards, labels and points\n * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n * be applied. When less than zero, the depth test should never be applied.\n * @type {Number}\n */\n this.minimumDisableDepthTestDistance = undefined;\n\n /**\n * When <code>false</code>, 3D Tiles will render normally. When <code>true</code>, classified 3D Tile geometry will render normally and\n * unclassified 3D Tile geometry will render with the color multiplied with {@link FrameState#invertClassificationColor}.\n * @type {Boolean}\n * @default false\n */\n this.invertClassification = false;\n\n /**\n * The highlight color of unclassified 3D Tile geometry when {@link FrameState#invertClassification} is <code>true</code>.\n * @type {Color}\n */\n this.invertClassificationColor = undefined;\n\n /**\n * Whether or not the scene uses a logarithmic depth buffer.\n *\n * @type {Boolean}\n * @default false\n */\n this.useLogDepth = false;\n\n /**\n * Additional state used to update 3D Tilesets.\n *\n * @type {Cesium3DTilePassState}\n */\n this.tilesetPassState = undefined;\n\n /**\n * The minimum terrain height out of all rendered terrain tiles. Used to improve culling for objects underneath the ellipsoid but above terrain.\n *\n * @type {Number}\n * @default 0.0\n */\n this.minimumTerrainHeight = 0.0;\n}\n\n/**\n * A function that will be called at the end of the frame.\n *\n * @callback FrameState.AfterRenderCallback\n */\nexport default FrameState;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport Pass from \"../Renderer/Pass.js\";\n\n/**\n * Defines a list of commands whose geometry are bound by near and far distances from the camera.\n * @alias FrustumCommands\n * @constructor\n *\n * @param {Number} [near=0.0] The lower bound or closest distance from the camera.\n * @param {Number} [far=0.0] The upper bound or farthest distance from the camera.\n *\n * @private\n */\nfunction FrustumCommands(near, far) {\n this.near = defaultValue(near, 0.0);\n this.far = defaultValue(far, 0.0);\n\n var numPasses = Pass.NUMBER_OF_PASSES;\n var commands = new Array(numPasses);\n var indices = new Array(numPasses);\n\n for (var i = 0; i < numPasses; ++i) {\n commands[i] = [];\n indices[i] = 0;\n }\n\n this.commands = commands;\n this.indices = indices;\n}\nexport default FrustumCommands;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/*!\\n\\\n * Atmosphere code:\\n\\\n *\\n\\\n * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com)\\n\\\n * All rights reserved.\\n\\\n *\\n\\\n * Redistribution and use in source and binary forms, with or without\\n\\\n * modification, are permitted provided that the following conditions\\n\\\n * are met:\\n\\\n *\\n\\\n * * Redistributions of source code must retain the above copyright notice,\\n\\\n * this list of conditions and the following disclaimer.\\n\\\n * * Redistributions in binary form must reproduce the above copyright notice,\\n\\\n * this list of conditions and the following disclaimer in the documentation\\n\\\n * and/or other materials provided with the distribution.\\n\\\n * * Neither the name of the project nor the names of its contributors may be\\n\\\n * used to endorse or promote products derived from this software without\\n\\\n * specific prior written permission.\\n\\\n *\\n\\\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\"\\n\\\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\n\\\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\n\\\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\\n\\\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\\n\\\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\\n\\\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\\n\\\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\\n\\\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\n\\\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\\n *\\n\\\n * Modifications made by Analytical Graphics, Inc.\\n\\\n */\\n\\\n\\n\\\n // Atmosphere:\\n\\\n // Code: http://sponeil.net/\\n\\\n // GPU Gems 2 Article: https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html\\n\\\n\\n\\\nconst float Kr = 0.0025;\\n\\\nconst float Km = 0.0015;\\n\\\nconst float ESun = 15.0;\\n\\\n\\n\\\nconst float fKrESun = Kr * ESun;\\n\\\nconst float fKmESun = Km * ESun;\\n\\\nconst float fKr4PI = Kr * 4.0 * czm_pi;\\n\\\nconst float fKm4PI = Km * 4.0 * czm_pi;\\n\\\n\\n\\\n// Original: vec3(1.0 / pow(0.650, 4.0), 1.0 / pow(0.570, 4.0), 1.0 / pow(0.475, 4.0));\\n\\\nconst vec3 v3InvWavelength = vec3(5.60204474633241, 9.473284437923038, 19.64380261047721);\\n\\\n\\n\\\nconst float fScaleDepth = 0.25;\\n\\\n\\n\\\nstruct AtmosphereColor\\n\\\n{\\n\\\n vec3 mie;\\n\\\n vec3 rayleigh;\\n\\\n};\\n\\\n\\n\\\nconst int nSamples = 2;\\n\\\nconst float fSamples = 2.0;\\n\\\n\\n\\\nfloat scale(float fCos)\\n\\\n{\\n\\\n float x = 1.0 - fCos;\\n\\\n return fScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\\n\\\n}\\n\\\n\\n\\\nAtmosphereColor computeGroundAtmosphereFromSpace(vec3 v3Pos, bool dynamicLighting, vec3 lightDirectionWC)\\n\\\n{\\n\\\n float fInnerRadius = czm_ellipsoidRadii.x;\\n\\\n float fOuterRadius = czm_ellipsoidRadii.x * 1.025;\\n\\\n float fOuterRadius2 = fOuterRadius * fOuterRadius;\\n\\\n\\n\\\n float fScale = 1.0 / (fOuterRadius - fInnerRadius);\\n\\\n float fScaleOverScaleDepth = fScale / fScaleDepth;\\n\\\n\\n\\\n // Get the ray from the camera to the vertex and its length (which is the far point of the ray passing through the atmosphere)\\n\\\n vec3 v3Ray = v3Pos - czm_viewerPositionWC;\\n\\\n float fFar = length(v3Ray);\\n\\\n v3Ray /= fFar;\\n\\\n\\n\\\n float fCameraHeight = length(czm_viewerPositionWC);\\n\\\n float fCameraHeight2 = fCameraHeight * fCameraHeight;\\n\\\n\\n\\\n // This next line is an ANGLE workaround. It is equivalent to B = 2.0 * dot(czm_viewerPositionWC, v3Ray),\\n\\\n // which is what it should be, but there are problems at the poles.\\n\\\n float B = 2.0 * length(czm_viewerPositionWC) * dot(normalize(czm_viewerPositionWC), v3Ray);\\n\\\n float C = fCameraHeight2 - fOuterRadius2;\\n\\\n float fDet = max(0.0, B*B - 4.0 * C);\\n\\\n float fNear = 0.5 * (-B - sqrt(fDet));\\n\\\n\\n\\\n // Calculate the ray's starting position, then calculate its scattering offset\\n\\\n vec3 v3Start = czm_viewerPositionWC + v3Ray * fNear;\\n\\\n fFar -= fNear;\\n\\\n float fDepth = exp((fInnerRadius - fOuterRadius) / fScaleDepth);\\n\\\n\\n\\\n // The light angle based on the scene's light source would be:\\n\\\n // dot(lightDirectionWC, v3Pos) / length(v3Pos);\\n\\\n // When we want the atmosphere to be uniform over the globe so it is set to 1.0.\\n\\\n\\n\\\n float fLightAngle = czm_branchFreeTernary(dynamicLighting, dot(lightDirectionWC, v3Pos) / length(v3Pos), 1.0);\\n\\\n float fCameraAngle = dot(-v3Ray, v3Pos) / length(v3Pos);\\n\\\n float fCameraScale = scale(fCameraAngle);\\n\\\n float fLightScale = scale(fLightAngle);\\n\\\n float fCameraOffset = fDepth*fCameraScale;\\n\\\n float fTemp = (fLightScale + fCameraScale);\\n\\\n\\n\\\n // Initialize the scattering loop variables\\n\\\n float fSampleLength = fFar / fSamples;\\n\\\n float fScaledLength = fSampleLength * fScale;\\n\\\n vec3 v3SampleRay = v3Ray * fSampleLength;\\n\\\n vec3 v3SamplePoint = v3Start + v3SampleRay * 0.5;\\n\\\n\\n\\\n // Now loop through the sample rays\\n\\\n vec3 v3FrontColor = vec3(0.0);\\n\\\n vec3 v3Attenuate = vec3(0.0);\\n\\\n for(int i=0; i<nSamples; i++)\\n\\\n {\\n\\\n float fHeight = length(v3SamplePoint);\\n\\\n float fDepth = exp(fScaleOverScaleDepth * (fInnerRadius - fHeight));\\n\\\n float fScatter = fDepth*fTemp - fCameraOffset;\\n\\\n v3Attenuate = exp(-fScatter * (v3InvWavelength * fKr4PI + fKm4PI));\\n\\\n v3FrontColor += v3Attenuate * (fDepth * fScaledLength);\\n\\\n v3SamplePoint += v3SampleRay;\\n\\\n }\\n\\\n\\n\\\n AtmosphereColor color;\\n\\\n color.mie = v3FrontColor * (v3InvWavelength * fKrESun + fKmESun);\\n\\\n color.rayleigh = v3Attenuate; // Calculate the attenuation factor for the ground\\n\\\n\\n\\\n return color;\\n\\\n}\\n\\\n\\n\\\n\";\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport TerrainQuantization from \"../Core/TerrainQuantization.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport getClippingFunction from \"./getClippingFunction.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nfunction GlobeSurfaceShader(\n numberOfDayTextures,\n flags,\n material,\n shaderProgram,\n clippingShaderState\n) {\n this.numberOfDayTextures = numberOfDayTextures;\n this.flags = flags;\n this.material = material;\n this.shaderProgram = shaderProgram;\n this.clippingShaderState = clippingShaderState;\n}\n\n/**\n * Manages the shaders used to shade the surface of a {@link Globe}.\n *\n * @alias GlobeSurfaceShaderSet\n * @private\n */\nfunction GlobeSurfaceShaderSet() {\n this.baseVertexShaderSource = undefined;\n this.baseFragmentShaderSource = undefined;\n\n this._shadersByTexturesFlags = [];\n\n this.material = undefined;\n}\n\nfunction getPositionMode(sceneMode) {\n var getPosition3DMode =\n \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }\";\n var getPositionColumbusViewAnd2DMode =\n \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }\";\n var getPositionMorphingMode =\n \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }\";\n\n var positionMode;\n\n switch (sceneMode) {\n case SceneMode.SCENE3D:\n positionMode = getPosition3DMode;\n break;\n case SceneMode.SCENE2D:\n case SceneMode.COLUMBUS_VIEW:\n positionMode = getPositionColumbusViewAnd2DMode;\n break;\n case SceneMode.MORPHING:\n positionMode = getPositionMorphingMode;\n break;\n }\n\n return positionMode;\n}\n\nfunction get2DYPositionFraction(useWebMercatorProjection) {\n var get2DYPositionFractionGeographicProjection =\n \"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }\";\n var get2DYPositionFractionMercatorProjection =\n \"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }\";\n return useWebMercatorProjection\n ? get2DYPositionFractionMercatorProjection\n : get2DYPositionFractionGeographicProjection;\n}\n\nGlobeSurfaceShaderSet.prototype.getShaderProgram = function (options) {\n var frameState = options.frameState;\n var surfaceTile = options.surfaceTile;\n var numberOfDayTextures = options.numberOfDayTextures;\n var applyBrightness = options.applyBrightness;\n var applyContrast = options.applyContrast;\n var applyHue = options.applyHue;\n var applySaturation = options.applySaturation;\n var applyGamma = options.applyGamma;\n var applyAlpha = options.applyAlpha;\n var applyDayNightAlpha = options.applyDayNightAlpha;\n var applySplit = options.applySplit;\n var showReflectiveOcean = options.showReflectiveOcean;\n var showOceanWaves = options.showOceanWaves;\n var enableLighting = options.enableLighting;\n var dynamicAtmosphereLighting = options.dynamicAtmosphereLighting;\n var dynamicAtmosphereLightingFromSun =\n options.dynamicAtmosphereLightingFromSun;\n var showGroundAtmosphere = options.showGroundAtmosphere;\n var perFragmentGroundAtmosphere = options.perFragmentGroundAtmosphere;\n var hasVertexNormals = options.hasVertexNormals;\n var useWebMercatorProjection = options.useWebMercatorProjection;\n var enableFog = options.enableFog;\n var enableClippingPlanes = options.enableClippingPlanes;\n var clippingPlanes = options.clippingPlanes;\n var clippedByBoundaries = options.clippedByBoundaries;\n var hasImageryLayerCutout = options.hasImageryLayerCutout;\n var colorCorrect = options.colorCorrect;\n var highlightFillTile = options.highlightFillTile;\n var colorToAlpha = options.colorToAlpha;\n var showUndergroundColor = options.showUndergroundColor;\n var translucent = options.translucent;\n\n var quantization = 0;\n var quantizationDefine = \"\";\n\n var mesh = surfaceTile.renderedMesh;\n var terrainEncoding = mesh.encoding;\n var quantizationMode = terrainEncoding.quantization;\n if (quantizationMode === TerrainQuantization.BITS12) {\n quantization = 1;\n quantizationDefine = \"QUANTIZATION_BITS12\";\n }\n\n var cartographicLimitRectangleFlag = 0;\n var cartographicLimitRectangleDefine = \"\";\n if (clippedByBoundaries) {\n cartographicLimitRectangleFlag = 1;\n cartographicLimitRectangleDefine = \"TILE_LIMIT_RECTANGLE\";\n }\n\n var imageryCutoutFlag = 0;\n var imageryCutoutDefine = \"\";\n if (hasImageryLayerCutout) {\n imageryCutoutFlag = 1;\n imageryCutoutDefine = \"APPLY_IMAGERY_CUTOUT\";\n }\n\n var sceneMode = frameState.mode;\n var flags =\n sceneMode |\n (applyBrightness << 2) |\n (applyContrast << 3) |\n (applyHue << 4) |\n (applySaturation << 5) |\n (applyGamma << 6) |\n (applyAlpha << 7) |\n (showReflectiveOcean << 8) |\n (showOceanWaves << 9) |\n (enableLighting << 10) |\n (dynamicAtmosphereLighting << 11) |\n (dynamicAtmosphereLightingFromSun << 12) |\n (showGroundAtmosphere << 13) |\n (perFragmentGroundAtmosphere << 14) |\n (hasVertexNormals << 15) |\n (useWebMercatorProjection << 16) |\n (enableFog << 17) |\n (quantization << 18) |\n (applySplit << 19) |\n (enableClippingPlanes << 20) |\n (cartographicLimitRectangleFlag << 21) |\n (imageryCutoutFlag << 22) |\n (colorCorrect << 23) |\n (highlightFillTile << 24) |\n (colorToAlpha << 25) |\n (showUndergroundColor << 26) |\n (translucent << 27) |\n (applyDayNightAlpha << 28);\n\n var currentClippingShaderState = 0;\n if (defined(clippingPlanes) && clippingPlanes.length > 0) {\n currentClippingShaderState = enableClippingPlanes\n ? clippingPlanes.clippingPlanesState\n : 0;\n }\n var surfaceShader = surfaceTile.surfaceShader;\n if (\n defined(surfaceShader) &&\n surfaceShader.numberOfDayTextures === numberOfDayTextures &&\n surfaceShader.flags === flags &&\n surfaceShader.material === this.material &&\n surfaceShader.clippingShaderState === currentClippingShaderState\n ) {\n return surfaceShader.shaderProgram;\n }\n\n // New tile, or tile changed number of textures, flags, or clipping planes\n var shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures];\n if (!defined(shadersByFlags)) {\n shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures] = [];\n }\n\n surfaceShader = shadersByFlags[flags];\n if (\n !defined(surfaceShader) ||\n surfaceShader.material !== this.material ||\n surfaceShader.clippingShaderState !== currentClippingShaderState\n ) {\n // Cache miss - we've never seen this combination of numberOfDayTextures and flags before.\n var vs = this.baseVertexShaderSource.clone();\n var fs = this.baseFragmentShaderSource.clone();\n\n if (currentClippingShaderState !== 0) {\n fs.sources.unshift(\n getClippingFunction(clippingPlanes, frameState.context)\n ); // Need to go before GlobeFS\n }\n\n vs.defines.push(quantizationDefine);\n fs.defines.push(\n \"TEXTURE_UNITS \" + numberOfDayTextures,\n cartographicLimitRectangleDefine,\n imageryCutoutDefine\n );\n\n if (applyBrightness) {\n fs.defines.push(\"APPLY_BRIGHTNESS\");\n }\n if (applyContrast) {\n fs.defines.push(\"APPLY_CONTRAST\");\n }\n if (applyHue) {\n fs.defines.push(\"APPLY_HUE\");\n }\n if (applySaturation) {\n fs.defines.push(\"APPLY_SATURATION\");\n }\n if (applyGamma) {\n fs.defines.push(\"APPLY_GAMMA\");\n }\n if (applyAlpha) {\n fs.defines.push(\"APPLY_ALPHA\");\n }\n if (applyDayNightAlpha) {\n fs.defines.push(\"APPLY_DAY_NIGHT_ALPHA\");\n }\n if (showReflectiveOcean) {\n fs.defines.push(\"SHOW_REFLECTIVE_OCEAN\");\n vs.defines.push(\"SHOW_REFLECTIVE_OCEAN\");\n }\n if (showOceanWaves) {\n fs.defines.push(\"SHOW_OCEAN_WAVES\");\n }\n if (colorToAlpha) {\n fs.defines.push(\"APPLY_COLOR_TO_ALPHA\");\n }\n if (showUndergroundColor) {\n vs.defines.push(\"UNDERGROUND_COLOR\");\n fs.defines.push(\"UNDERGROUND_COLOR\");\n }\n if (translucent) {\n vs.defines.push(\"TRANSLUCENT\");\n fs.defines.push(\"TRANSLUCENT\");\n }\n if (enableLighting) {\n if (hasVertexNormals) {\n vs.defines.push(\"ENABLE_VERTEX_LIGHTING\");\n fs.defines.push(\"ENABLE_VERTEX_LIGHTING\");\n } else {\n vs.defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n fs.defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n }\n }\n\n if (dynamicAtmosphereLighting) {\n fs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING\");\n if (dynamicAtmosphereLightingFromSun) {\n fs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN\");\n }\n }\n\n if (showGroundAtmosphere) {\n vs.defines.push(\"GROUND_ATMOSPHERE\");\n fs.defines.push(\"GROUND_ATMOSPHERE\");\n if (perFragmentGroundAtmosphere) {\n fs.defines.push(\"PER_FRAGMENT_GROUND_ATMOSPHERE\");\n }\n }\n\n vs.defines.push(\"INCLUDE_WEB_MERCATOR_Y\");\n fs.defines.push(\"INCLUDE_WEB_MERCATOR_Y\");\n\n if (enableFog) {\n vs.defines.push(\"FOG\");\n fs.defines.push(\"FOG\");\n }\n\n if (applySplit) {\n fs.defines.push(\"APPLY_SPLIT\");\n }\n\n if (enableClippingPlanes) {\n fs.defines.push(\"ENABLE_CLIPPING_PLANES\");\n }\n\n if (colorCorrect) {\n fs.defines.push(\"COLOR_CORRECT\");\n }\n\n if (highlightFillTile) {\n fs.defines.push(\"HIGHLIGHT_FILL_TILE\");\n }\n\n var computeDayColor =\n \"\\\n vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\\n\\\n {\\n\\\n vec4 color = initialColor;\\n\";\n\n if (hasImageryLayerCutout) {\n computeDayColor +=\n \"\\\n vec4 cutoutAndColorResult;\\n\\\n bool texelUnclipped;\\n\";\n }\n\n for (var i = 0; i < numberOfDayTextures; ++i) {\n if (hasImageryLayerCutout) {\n computeDayColor +=\n \"\\\n cutoutAndColorResult = u_dayTextureCutoutRectangles[\" +\n i +\n \"];\\n\\\n texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\\n\\\n cutoutAndColorResult = sampleAndBlend(\\n\";\n } else {\n computeDayColor += \"\\\n color = sampleAndBlend(\\n\";\n }\n computeDayColor +=\n \"\\\n color,\\n\\\n u_dayTextures[\" +\n i +\n \"],\\n\\\n u_dayTextureUseWebMercatorT[\" +\n i +\n \"] ? textureCoordinates.xz : textureCoordinates.xy,\\n\\\n u_dayTextureTexCoordsRectangle[\" +\n i +\n \"],\\n\\\n u_dayTextureTranslationAndScale[\" +\n i +\n \"],\\n\\\n \" +\n (applyAlpha ? \"u_dayTextureAlpha[\" + i + \"]\" : \"1.0\") +\n \",\\n\\\n \" +\n (applyDayNightAlpha ? \"u_dayTextureNightAlpha[\" + i + \"]\" : \"1.0\") +\n \",\\n\" +\n (applyDayNightAlpha ? \"u_dayTextureDayAlpha[\" + i + \"]\" : \"1.0\") +\n \",\\n\" +\n (applyBrightness ? \"u_dayTextureBrightness[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (applyContrast ? \"u_dayTextureContrast[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (applyHue ? \"u_dayTextureHue[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (applySaturation ? \"u_dayTextureSaturation[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (applyGamma ? \"u_dayTextureOneOverGamma[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (applySplit ? \"u_dayTextureSplit[\" + i + \"]\" : \"0.0\") +\n \",\\n\\\n \" +\n (colorToAlpha ? \"u_colorsToAlpha[\" + i + \"]\" : \"vec4(0.0)\") +\n \",\\n\\\n nightBlend\\\n );\\n\";\n if (hasImageryLayerCutout) {\n computeDayColor +=\n \"\\\n color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\\n\";\n }\n }\n\n computeDayColor += \"\\\n return color;\\n\\\n }\";\n\n fs.sources.push(computeDayColor);\n\n vs.sources.push(getPositionMode(sceneMode));\n vs.sources.push(get2DYPositionFraction(useWebMercatorProjection));\n\n var shader = ShaderProgram.fromCache({\n context: frameState.context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: terrainEncoding.getAttributeLocations(),\n });\n\n surfaceShader = shadersByFlags[flags] = new GlobeSurfaceShader(\n numberOfDayTextures,\n flags,\n this.material,\n shader,\n currentClippingShaderState\n );\n }\n\n surfaceTile.surfaceShader = surfaceShader;\n return surfaceShader.shaderProgram;\n};\n\nGlobeSurfaceShaderSet.prototype.destroy = function () {\n var flags;\n var shader;\n\n var shadersByTexturesFlags = this._shadersByTexturesFlags;\n for (var textureCount in shadersByTexturesFlags) {\n if (shadersByTexturesFlags.hasOwnProperty(textureCount)) {\n var shadersByFlags = shadersByTexturesFlags[textureCount];\n if (!defined(shadersByFlags)) {\n continue;\n }\n\n for (flags in shadersByFlags) {\n if (shadersByFlags.hasOwnProperty(flags)) {\n shader = shadersByFlags[flags];\n if (defined(shader)) {\n shader.shaderProgram.destroy();\n }\n }\n }\n }\n }\n\n return destroyObject(this);\n};\nexport default GlobeSurfaceShaderSet;\n","/**\n * @private\n */\nvar ImageryState = {\n UNLOADED: 0,\n TRANSITIONING: 1,\n RECEIVED: 2,\n TEXTURE_LOADED: 3,\n READY: 4,\n FAILED: 5,\n INVALID: 6,\n PLACEHOLDER: 7,\n};\nexport default Object.freeze(ImageryState);\n","/**\n * The state of a {@link QuadtreeTile} in the tile load pipeline.\n * @enum {Number}\n * @private\n */\nvar QuadtreeTileLoadState = {\n /**\n * The tile is new and loading has not yet begun.\n * @type QuadtreeTileLoadState\n * @constant\n * @default 0\n */\n START: 0,\n\n /**\n * Loading is in progress.\n * @type QuadtreeTileLoadState\n * @constant\n * @default 1\n */\n LOADING: 1,\n\n /**\n * Loading is complete.\n * @type QuadtreeTileLoadState\n * @constant\n * @default 2\n */\n DONE: 2,\n\n /**\n * The tile has failed to load.\n * @type QuadtreeTileLoadState\n * @constant\n * @default 3\n */\n FAILED: 3,\n};\nexport default Object.freeze(QuadtreeTileLoadState);\n","/**\n * @private\n */\nvar TerrainState = {\n FAILED: 0,\n UNLOADED: 1,\n RECEIVING: 2,\n RECEIVED: 3,\n TRANSFORMING: 4,\n TRANSFORMED: 5,\n READY: 6,\n};\nexport default Object.freeze(TerrainState);\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport TerrainState from \"./TerrainState.js\";\n\n/**\n * Contains additional information about a {@link QuadtreeTile} of the globe's surface, and\n * encapsulates state transition logic for loading tiles.\n *\n * @constructor\n * @alias GlobeSurfaceTile\n * @private\n */\nfunction GlobeSurfaceTile() {\n /**\n * The {@link TileImagery} attached to this tile.\n * @type {TileImagery[]}\n * @default []\n */\n this.imagery = [];\n\n this.waterMaskTexture = undefined;\n this.waterMaskTranslationAndScale = new Cartesian4(0.0, 0.0, 1.0, 1.0);\n\n this.terrainData = undefined;\n this.vertexArray = undefined;\n this.orientedBoundingBox = undefined;\n this.boundingVolumeSourceTile = undefined;\n\n /**\n * A bounding region used to estimate distance to the tile. The horizontal bounds are always tight-fitting,\n * but the `minimumHeight` and `maximumHeight` properties may be derived from the min/max of an ancestor tile\n * and be quite loose-fitting and thus very poor for estimating distance. The {@link TileBoundingRegion#boundingVolume}\n * and {@link TileBoundingRegion#boundingSphere} will always be undefined; tiles store these separately.\n * @type {TileBoundingRegion}\n */\n this.tileBoundingRegion = undefined;\n this.occludeePointInScaledSpace = new Cartesian3();\n\n this.terrainState = TerrainState.UNLOADED;\n this.mesh = undefined;\n this.fill = undefined;\n\n this.pickBoundingSphere = new BoundingSphere();\n\n this.surfaceShader = undefined;\n this.isClipped = true;\n\n this.clippedByBoundaries = false;\n}\n\nObject.defineProperties(GlobeSurfaceTile.prototype, {\n /**\n * Gets a value indicating whether or not this tile is eligible to be unloaded.\n * Typically, a tile is ineligible to be unloaded while an asynchronous operation,\n * such as a request for data, is in progress on it. A tile will never be\n * unloaded while it is needed for rendering, regardless of the value of this\n * property.\n * @memberof GlobeSurfaceTile.prototype\n * @type {Boolean}\n */\n eligibleForUnloading: {\n get: function () {\n // Do not remove tiles that are transitioning or that have\n // imagery that is transitioning.\n var terrainState = this.terrainState;\n var loadingIsTransitioning =\n terrainState === TerrainState.RECEIVING ||\n terrainState === TerrainState.TRANSFORMING;\n\n var shouldRemoveTile = !loadingIsTransitioning;\n\n var imagery = this.imagery;\n for (var i = 0, len = imagery.length; shouldRemoveTile && i < len; ++i) {\n var tileImagery = imagery[i];\n shouldRemoveTile =\n !defined(tileImagery.loadingImagery) ||\n tileImagery.loadingImagery.state !== ImageryState.TRANSITIONING;\n }\n\n return shouldRemoveTile;\n },\n },\n\n /**\n * Gets the {@link TerrainMesh} that is used for rendering this tile, if any.\n * Returns the value of the {@link GlobeSurfaceTile#mesh} property if\n * {@link GlobeSurfaceTile#vertexArray} is defined. Otherwise, It returns the\n * {@link TerrainFillMesh#mesh} property of the {@link GlobeSurfaceTile#fill}.\n * If there is no fill, it returns undefined.\n *\n * @memberof GlobeSurfaceTile.prototype\n * @type {TerrainMesh}\n */\n renderedMesh: {\n get: function () {\n if (defined(this.vertexArray)) {\n return this.mesh;\n } else if (defined(this.fill)) {\n return this.fill.mesh;\n }\n return undefined;\n },\n },\n});\n\nfunction getPosition(encoding, mode, projection, vertices, index, result) {\n encoding.decodePosition(vertices, index, result);\n\n if (defined(mode) && mode !== SceneMode.SCENE3D) {\n var ellipsoid = projection.ellipsoid;\n var positionCart = ellipsoid.cartesianToCartographic(result);\n projection.project(positionCart, result);\n Cartesian3.fromElements(result.z, result.x, result.y, result);\n }\n\n return result;\n}\n\nvar scratchV0 = new Cartesian3();\nvar scratchV1 = new Cartesian3();\nvar scratchV2 = new Cartesian3();\n\nGlobeSurfaceTile.prototype.pick = function (\n ray,\n mode,\n projection,\n cullBackFaces,\n result\n) {\n var mesh = this.renderedMesh;\n if (!defined(mesh)) {\n return undefined;\n }\n\n var vertices = mesh.vertices;\n var indices = mesh.indices;\n var encoding = mesh.encoding;\n var indicesLength = indices.length;\n\n var minT = Number.MAX_VALUE;\n\n for (var i = 0; i < indicesLength; i += 3) {\n var i0 = indices[i];\n var i1 = indices[i + 1];\n var i2 = indices[i + 2];\n\n var v0 = getPosition(encoding, mode, projection, vertices, i0, scratchV0);\n var v1 = getPosition(encoding, mode, projection, vertices, i1, scratchV1);\n var v2 = getPosition(encoding, mode, projection, vertices, i2, scratchV2);\n\n var t = IntersectionTests.rayTriangleParametric(\n ray,\n v0,\n v1,\n v2,\n cullBackFaces\n );\n if (defined(t) && t < minT && t >= 0.0) {\n minT = t;\n }\n }\n\n return minT !== Number.MAX_VALUE\n ? Ray.getPoint(ray, minT, result)\n : undefined;\n};\n\nGlobeSurfaceTile.prototype.freeResources = function () {\n if (defined(this.waterMaskTexture)) {\n --this.waterMaskTexture.referenceCount;\n if (this.waterMaskTexture.referenceCount === 0) {\n this.waterMaskTexture.destroy();\n }\n this.waterMaskTexture = undefined;\n }\n\n this.terrainData = undefined;\n\n this.terrainState = TerrainState.UNLOADED;\n this.mesh = undefined;\n this.fill = this.fill && this.fill.destroy();\n\n var imageryList = this.imagery;\n for (var i = 0, len = imageryList.length; i < len; ++i) {\n imageryList[i].freeResources();\n }\n this.imagery.length = 0;\n\n this.freeVertexArray();\n};\n\nGlobeSurfaceTile.prototype.freeVertexArray = function () {\n GlobeSurfaceTile._freeVertexArray(this.vertexArray);\n this.vertexArray = undefined;\n GlobeSurfaceTile._freeVertexArray(this.wireframeVertexArray);\n this.wireframeVertexArray = undefined;\n};\n\nGlobeSurfaceTile.initialize = function (\n tile,\n terrainProvider,\n imageryLayerCollection\n) {\n var surfaceTile = tile.data;\n if (!defined(surfaceTile)) {\n surfaceTile = tile.data = new GlobeSurfaceTile();\n }\n\n if (tile.state === QuadtreeTileLoadState.START) {\n prepareNewTile(tile, terrainProvider, imageryLayerCollection);\n tile.state = QuadtreeTileLoadState.LOADING;\n }\n};\n\nGlobeSurfaceTile.processStateMachine = function (\n tile,\n frameState,\n terrainProvider,\n imageryLayerCollection,\n vertexArraysToDestroy,\n terrainOnly\n) {\n GlobeSurfaceTile.initialize(tile, terrainProvider, imageryLayerCollection);\n\n var surfaceTile = tile.data;\n\n if (tile.state === QuadtreeTileLoadState.LOADING) {\n processTerrainStateMachine(\n tile,\n frameState,\n terrainProvider,\n imageryLayerCollection,\n vertexArraysToDestroy\n );\n }\n\n // From here down we're loading imagery, not terrain. We don't want to load imagery until\n // we're certain that the terrain tiles are actually visible, though. We'll load terrainOnly\n // in these scenarios:\n // * our bounding volume isn't accurate so we're not certain this tile is really visible (see GlobeSurfaceTileProvider#loadTile).\n // * we want to upsample from this tile but don't plan to render it (see processTerrainStateMachine).\n if (terrainOnly) {\n return;\n }\n\n var wasAlreadyRenderable = tile.renderable;\n\n // The terrain is renderable as soon as we have a valid vertex array.\n tile.renderable = defined(surfaceTile.vertexArray);\n\n // But it's not done loading until it's in the READY state.\n var isTerrainDoneLoading = surfaceTile.terrainState === TerrainState.READY;\n\n // If this tile's terrain and imagery are just upsampled from its parent, mark the tile as\n // upsampled only. We won't refine a tile if its four children are upsampled only.\n tile.upsampledFromParent =\n defined(surfaceTile.terrainData) &&\n surfaceTile.terrainData.wasCreatedByUpsampling();\n\n var isImageryDoneLoading = surfaceTile.processImagery(\n tile,\n terrainProvider,\n frameState\n );\n\n if (isTerrainDoneLoading && isImageryDoneLoading) {\n var callbacks = tile._loadedCallbacks;\n var newCallbacks = {};\n for (var layerId in callbacks) {\n if (callbacks.hasOwnProperty(layerId)) {\n if (!callbacks[layerId](tile)) {\n newCallbacks[layerId] = callbacks[layerId];\n }\n }\n }\n tile._loadedCallbacks = newCallbacks;\n\n tile.state = QuadtreeTileLoadState.DONE;\n }\n\n // Once a tile is renderable, it stays renderable, because doing otherwise would\n // cause detail (or maybe even the entire globe) to vanish when adding a new\n // imagery layer. `GlobeSurfaceTileProvider._onLayerAdded` sets renderable to\n // false for all affected tiles that are not currently being rendered.\n if (wasAlreadyRenderable) {\n tile.renderable = true;\n }\n};\n\nGlobeSurfaceTile.prototype.processImagery = function (\n tile,\n terrainProvider,\n frameState,\n skipLoading\n) {\n var surfaceTile = tile.data;\n var isUpsampledOnly = tile.upsampledFromParent;\n var isAnyTileLoaded = false;\n var isDoneLoading = true;\n\n // Transition imagery states\n var tileImageryCollection = surfaceTile.imagery;\n var i, len;\n for (i = 0, len = tileImageryCollection.length; i < len; ++i) {\n var tileImagery = tileImageryCollection[i];\n if (!defined(tileImagery.loadingImagery)) {\n isUpsampledOnly = false;\n continue;\n }\n\n if (tileImagery.loadingImagery.state === ImageryState.PLACEHOLDER) {\n var imageryLayer = tileImagery.loadingImagery.imageryLayer;\n if (imageryLayer.imageryProvider.ready) {\n // Remove the placeholder and add the actual skeletons (if any)\n // at the same position. Then continue the loop at the same index.\n tileImagery.freeResources();\n tileImageryCollection.splice(i, 1);\n imageryLayer._createTileImagerySkeletons(tile, terrainProvider, i);\n --i;\n len = tileImageryCollection.length;\n continue;\n } else {\n isUpsampledOnly = false;\n }\n }\n\n var thisTileDoneLoading = tileImagery.processStateMachine(\n tile,\n frameState,\n skipLoading\n );\n isDoneLoading = isDoneLoading && thisTileDoneLoading;\n\n // The imagery is renderable as soon as we have any renderable imagery for this region.\n isAnyTileLoaded =\n isAnyTileLoaded ||\n thisTileDoneLoading ||\n defined(tileImagery.readyImagery);\n\n isUpsampledOnly =\n isUpsampledOnly &&\n defined(tileImagery.loadingImagery) &&\n (tileImagery.loadingImagery.state === ImageryState.FAILED ||\n tileImagery.loadingImagery.state === ImageryState.INVALID);\n }\n\n tile.upsampledFromParent = isUpsampledOnly;\n\n // Allow rendering if any available layers are loaded\n tile.renderable = tile.renderable && (isAnyTileLoaded || isDoneLoading);\n\n return isDoneLoading;\n};\n\nfunction prepareNewTile(tile, terrainProvider, imageryLayerCollection) {\n var available = terrainProvider.getTileDataAvailable(\n tile.x,\n tile.y,\n tile.level\n );\n\n if (!defined(available) && defined(tile.parent)) {\n // Provider doesn't know if this tile is available. Does the parent tile know?\n var parent = tile.parent;\n var parentSurfaceTile = parent.data;\n if (defined(parentSurfaceTile) && defined(parentSurfaceTile.terrainData)) {\n available = parentSurfaceTile.terrainData.isChildAvailable(\n parent.x,\n parent.y,\n tile.x,\n tile.y\n );\n }\n }\n\n if (available === false) {\n // This tile is not available, so mark it failed so we start upsampling right away.\n tile.data.terrainState = TerrainState.FAILED;\n }\n\n // Map imagery tiles to this terrain tile\n for (var i = 0, len = imageryLayerCollection.length; i < len; ++i) {\n var layer = imageryLayerCollection.get(i);\n if (layer.show) {\n layer._createTileImagerySkeletons(tile, terrainProvider);\n }\n }\n}\n\nfunction processTerrainStateMachine(\n tile,\n frameState,\n terrainProvider,\n imageryLayerCollection,\n vertexArraysToDestroy\n) {\n var surfaceTile = tile.data;\n\n // If this tile is FAILED, we'll need to upsample from the parent. If the parent isn't\n // ready for that, let's push it along.\n var parent = tile.parent;\n if (\n surfaceTile.terrainState === TerrainState.FAILED &&\n parent !== undefined\n ) {\n var parentReady =\n parent.data !== undefined &&\n parent.data.terrainData !== undefined &&\n parent.data.terrainData.canUpsample !== false;\n if (!parentReady) {\n GlobeSurfaceTile.processStateMachine(\n parent,\n frameState,\n terrainProvider,\n imageryLayerCollection,\n true\n );\n }\n }\n\n if (surfaceTile.terrainState === TerrainState.FAILED) {\n upsample(\n surfaceTile,\n tile,\n frameState,\n terrainProvider,\n tile.x,\n tile.y,\n tile.level\n );\n }\n\n if (surfaceTile.terrainState === TerrainState.UNLOADED) {\n requestTileGeometry(\n surfaceTile,\n terrainProvider,\n tile.x,\n tile.y,\n tile.level\n );\n }\n\n if (surfaceTile.terrainState === TerrainState.RECEIVED) {\n transform(\n surfaceTile,\n frameState,\n terrainProvider,\n tile.x,\n tile.y,\n tile.level\n );\n }\n\n if (surfaceTile.terrainState === TerrainState.TRANSFORMED) {\n createResources(\n surfaceTile,\n frameState.context,\n terrainProvider,\n tile.x,\n tile.y,\n tile.level,\n vertexArraysToDestroy\n );\n }\n\n if (\n surfaceTile.terrainState >= TerrainState.RECEIVED &&\n surfaceTile.waterMaskTexture === undefined &&\n terrainProvider.hasWaterMask\n ) {\n var terrainData = surfaceTile.terrainData;\n if (terrainData.waterMask !== undefined) {\n createWaterMaskTextureIfNeeded(frameState.context, surfaceTile);\n } else {\n var sourceTile = surfaceTile._findAncestorTileWithTerrainData(tile);\n if (defined(sourceTile) && defined(sourceTile.data.waterMaskTexture)) {\n surfaceTile.waterMaskTexture = sourceTile.data.waterMaskTexture;\n ++surfaceTile.waterMaskTexture.referenceCount;\n surfaceTile._computeWaterMaskTranslationAndScale(\n tile,\n sourceTile,\n surfaceTile.waterMaskTranslationAndScale\n );\n }\n }\n }\n}\n\nfunction upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {\n var parent = tile.parent;\n if (!parent) {\n // Trying to upsample from a root tile. No can do. This tile is a failure.\n tile.state = QuadtreeTileLoadState.FAILED;\n return;\n }\n\n var sourceData = parent.data.terrainData;\n var sourceX = parent.x;\n var sourceY = parent.y;\n var sourceLevel = parent.level;\n\n if (!defined(sourceData)) {\n // Parent is not available, so we can't upsample this tile yet.\n return;\n }\n\n var terrainDataPromise = sourceData.upsample(\n terrainProvider.tilingScheme,\n sourceX,\n sourceY,\n sourceLevel,\n x,\n y,\n level\n );\n if (!defined(terrainDataPromise)) {\n // The upsample request has been deferred - try again later.\n return;\n }\n\n surfaceTile.terrainState = TerrainState.RECEIVING;\n\n when(\n terrainDataPromise,\n function (terrainData) {\n surfaceTile.terrainData = terrainData;\n surfaceTile.terrainState = TerrainState.RECEIVED;\n },\n function () {\n surfaceTile.terrainState = TerrainState.FAILED;\n }\n );\n}\n\nfunction requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {\n function success(terrainData) {\n surfaceTile.terrainData = terrainData;\n surfaceTile.terrainState = TerrainState.RECEIVED;\n surfaceTile.request = undefined;\n }\n\n function failure() {\n if (surfaceTile.request.state === RequestState.CANCELLED) {\n // Cancelled due to low priority - try again later.\n surfaceTile.terrainData = undefined;\n surfaceTile.terrainState = TerrainState.UNLOADED;\n surfaceTile.request = undefined;\n return;\n }\n\n // Initially assume failure. handleError may retry, in which case the state will\n // change to RECEIVING or UNLOADED.\n surfaceTile.terrainState = TerrainState.FAILED;\n surfaceTile.request = undefined;\n\n var message =\n \"Failed to obtain terrain tile X: \" +\n x +\n \" Y: \" +\n y +\n \" Level: \" +\n level +\n \".\";\n terrainProvider._requestError = TileProviderError.handleError(\n terrainProvider._requestError,\n terrainProvider,\n terrainProvider.errorEvent,\n message,\n x,\n y,\n level,\n doRequest\n );\n }\n\n function doRequest() {\n // Request the terrain from the terrain provider.\n var request = new Request({\n throttle: false,\n throttleByServer: true,\n type: RequestType.TERRAIN,\n });\n surfaceTile.request = request;\n var requestPromise = terrainProvider.requestTileGeometry(\n x,\n y,\n level,\n request\n );\n\n // If the request method returns undefined (instead of a promise), the request\n // has been deferred.\n if (defined(requestPromise)) {\n surfaceTile.terrainState = TerrainState.RECEIVING;\n when(requestPromise, success, failure);\n } else {\n // Deferred - try again later.\n surfaceTile.terrainState = TerrainState.UNLOADED;\n surfaceTile.request = undefined;\n }\n }\n\n doRequest();\n}\n\nfunction transform(surfaceTile, frameState, terrainProvider, x, y, level) {\n var tilingScheme = terrainProvider.tilingScheme;\n\n var terrainData = surfaceTile.terrainData;\n var meshPromise = terrainData.createMesh(\n tilingScheme,\n x,\n y,\n level,\n frameState.terrainExaggeration\n );\n\n if (!defined(meshPromise)) {\n // Postponed.\n return;\n }\n\n surfaceTile.terrainState = TerrainState.TRANSFORMING;\n\n when(\n meshPromise,\n function (mesh) {\n surfaceTile.mesh = mesh;\n surfaceTile.orientedBoundingBox = OrientedBoundingBox.clone(\n mesh.orientedBoundingBox,\n surfaceTile.orientedBoundingBox\n );\n surfaceTile.occludeePointInScaledSpace = Cartesian3.clone(\n mesh.occludeePointInScaledSpace,\n surfaceTile.occludeePointInScaledSpace\n );\n surfaceTile.terrainState = TerrainState.TRANSFORMED;\n },\n function () {\n surfaceTile.terrainState = TerrainState.FAILED;\n }\n );\n}\n\nGlobeSurfaceTile._createVertexArrayForMesh = function (context, mesh) {\n var typedArray = mesh.vertices;\n var buffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: typedArray,\n usage: BufferUsage.STATIC_DRAW,\n });\n var attributes = mesh.encoding.getAttributes(buffer);\n\n var indexBuffers = mesh.indices.indexBuffers || {};\n var indexBuffer = indexBuffers[context.id];\n if (!defined(indexBuffer) || indexBuffer.isDestroyed()) {\n var indices = mesh.indices;\n indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.fromSizeInBytes(indices.BYTES_PER_ELEMENT),\n });\n indexBuffer.vertexArrayDestroyable = false;\n indexBuffer.referenceCount = 1;\n indexBuffers[context.id] = indexBuffer;\n mesh.indices.indexBuffers = indexBuffers;\n } else {\n ++indexBuffer.referenceCount;\n }\n\n return new VertexArray({\n context: context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n });\n};\n\nGlobeSurfaceTile._freeVertexArray = function (vertexArray) {\n if (defined(vertexArray)) {\n var indexBuffer = vertexArray.indexBuffer;\n\n vertexArray.destroy();\n\n if (\n defined(indexBuffer) &&\n !indexBuffer.isDestroyed() &&\n defined(indexBuffer.referenceCount)\n ) {\n --indexBuffer.referenceCount;\n if (indexBuffer.referenceCount === 0) {\n indexBuffer.destroy();\n }\n }\n }\n};\n\nfunction createResources(\n surfaceTile,\n context,\n terrainProvider,\n x,\n y,\n level,\n vertexArraysToDestroy\n) {\n surfaceTile.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n context,\n surfaceTile.mesh\n );\n surfaceTile.terrainState = TerrainState.READY;\n surfaceTile.fill =\n surfaceTile.fill && surfaceTile.fill.destroy(vertexArraysToDestroy);\n}\n\nfunction getContextWaterMaskData(context) {\n var data = context.cache.tile_waterMaskData;\n\n if (!defined(data)) {\n var allWaterTexture = Texture.create({\n context: context,\n pixelFormat: PixelFormat.LUMINANCE,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n arrayBufferView: new Uint8Array([255]),\n width: 1,\n height: 1,\n },\n });\n allWaterTexture.referenceCount = 1;\n\n var sampler = new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR,\n });\n\n data = {\n allWaterTexture: allWaterTexture,\n sampler: sampler,\n destroy: function () {\n this.allWaterTexture.destroy();\n },\n };\n\n context.cache.tile_waterMaskData = data;\n }\n\n return data;\n}\n\nfunction createWaterMaskTextureIfNeeded(context, surfaceTile) {\n var waterMask = surfaceTile.terrainData.waterMask;\n var waterMaskData = getContextWaterMaskData(context);\n var texture;\n\n var waterMaskLength = waterMask.length;\n if (waterMaskLength === 1) {\n // Length 1 means the tile is entirely land or entirely water.\n // A value of 0 indicates entirely land, a value of 1 indicates entirely water.\n if (waterMask[0] !== 0) {\n texture = waterMaskData.allWaterTexture;\n } else {\n // Leave the texture undefined if the tile is entirely land.\n return;\n }\n } else {\n var textureSize = Math.sqrt(waterMaskLength);\n texture = Texture.create({\n context: context,\n pixelFormat: PixelFormat.LUMINANCE,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n width: textureSize,\n height: textureSize,\n arrayBufferView: waterMask,\n },\n sampler: waterMaskData.sampler,\n flipY: false,\n });\n\n texture.referenceCount = 0;\n }\n\n ++texture.referenceCount;\n surfaceTile.waterMaskTexture = texture;\n\n Cartesian4.fromElements(\n 0.0,\n 0.0,\n 1.0,\n 1.0,\n surfaceTile.waterMaskTranslationAndScale\n );\n}\n\nGlobeSurfaceTile.prototype._findAncestorTileWithTerrainData = function (tile) {\n var sourceTile = tile.parent;\n\n while (\n defined(sourceTile) &&\n (!defined(sourceTile.data) ||\n !defined(sourceTile.data.terrainData) ||\n sourceTile.data.terrainData.wasCreatedByUpsampling())\n ) {\n sourceTile = sourceTile.parent;\n }\n\n return sourceTile;\n};\n\nGlobeSurfaceTile.prototype._computeWaterMaskTranslationAndScale = function (\n tile,\n sourceTile,\n result\n) {\n var sourceTileRectangle = sourceTile.rectangle;\n var tileRectangle = tile.rectangle;\n var tileWidth = tileRectangle.width;\n var tileHeight = tileRectangle.height;\n\n var scaleX = tileWidth / sourceTileRectangle.width;\n var scaleY = tileHeight / sourceTileRectangle.height;\n result.x =\n (scaleX * (tileRectangle.west - sourceTileRectangle.west)) / tileWidth;\n result.y =\n (scaleY * (tileRectangle.south - sourceTileRectangle.south)) / tileHeight;\n result.z = scaleX;\n result.w = scaleY;\n\n return result;\n};\nexport default GlobeSurfaceTile;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ImageryState from \"./ImageryState.js\";\n\n/**\n * Stores details about a tile of imagery.\n *\n * @alias Imagery\n * @private\n */\nfunction Imagery(imageryLayer, x, y, level, rectangle) {\n this.imageryLayer = imageryLayer;\n this.x = x;\n this.y = y;\n this.level = level;\n this.request = undefined;\n\n if (level !== 0) {\n var parentX = (x / 2) | 0;\n var parentY = (y / 2) | 0;\n var parentLevel = level - 1;\n this.parent = imageryLayer.getImageryFromCache(\n parentX,\n parentY,\n parentLevel\n );\n }\n\n this.state = ImageryState.UNLOADED;\n this.imageUrl = undefined;\n this.image = undefined;\n this.texture = undefined;\n this.textureWebMercator = undefined;\n this.credits = undefined;\n this.referenceCount = 0;\n\n if (!defined(rectangle) && imageryLayer.imageryProvider.ready) {\n var tilingScheme = imageryLayer.imageryProvider.tilingScheme;\n rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n }\n\n this.rectangle = rectangle;\n}\nImagery.createPlaceholder = function (imageryLayer) {\n var result = new Imagery(imageryLayer, 0, 0, 0);\n result.addReference();\n result.state = ImageryState.PLACEHOLDER;\n return result;\n};\n\nImagery.prototype.addReference = function () {\n ++this.referenceCount;\n};\n\nImagery.prototype.releaseReference = function () {\n --this.referenceCount;\n\n if (this.referenceCount === 0) {\n this.imageryLayer.removeImageryFromCache(this);\n\n if (defined(this.parent)) {\n this.parent.releaseReference();\n }\n\n if (defined(this.image) && defined(this.image.destroy)) {\n this.image.destroy();\n }\n\n if (defined(this.texture)) {\n this.texture.destroy();\n }\n\n if (\n defined(this.textureWebMercator) &&\n this.texture !== this.textureWebMercator\n ) {\n this.textureWebMercator.destroy();\n }\n\n destroyObject(this);\n\n return 0;\n }\n\n return this.referenceCount;\n};\n\nImagery.prototype.processStateMachine = function (\n frameState,\n needGeographicProjection,\n skipLoading\n) {\n if (this.state === ImageryState.UNLOADED && !skipLoading) {\n this.state = ImageryState.TRANSITIONING;\n this.imageryLayer._requestImagery(this);\n }\n\n if (this.state === ImageryState.RECEIVED) {\n this.state = ImageryState.TRANSITIONING;\n this.imageryLayer._createTexture(frameState.context, this);\n }\n\n // If the imagery is already ready, but we need a geographic version and don't have it yet,\n // we still need to do the reprojection step. This can happen if the Web Mercator version\n // is fine initially, but the geographic one is needed later.\n var needsReprojection =\n this.state === ImageryState.READY &&\n needGeographicProjection &&\n !this.texture;\n\n if (this.state === ImageryState.TEXTURE_LOADED || needsReprojection) {\n this.state = ImageryState.TRANSITIONING;\n this.imageryLayer._reprojectTexture(\n frameState,\n this,\n needGeographicProjection\n );\n }\n};\nexport default Imagery;\n","/**\n * The direction to display an ImageryLayer relative to the {@link Scene#imagerySplitPosition}.\n *\n * @enum {Number}\n *\n * @see ImageryLayer#splitDirection\n */\nvar ImagerySplitDirection = {\n /**\n * Display the ImageryLayer to the left of the {@link Scene#imagerySplitPosition}.\n *\n * @type {Number}\n * @constant\n */\n LEFT: -1.0,\n\n /**\n * Always display the ImageryLayer.\n *\n * @type {Number}\n * @constant\n */\n NONE: 0.0,\n\n /**\n * Display the ImageryLayer to the right of the {@link Scene#imagerySplitPosition}.\n *\n * @type {Number}\n * @constant\n */\n RIGHT: 1.0,\n};\nexport default Object.freeze(ImagerySplitDirection);\n","import defined from \"../Core/defined.js\";\nimport ImageryState from \"./ImageryState.js\";\n\n/**\n * The assocation between a terrain tile and an imagery tile.\n *\n * @alias TileImagery\n * @private\n *\n * @param {Imagery} imagery The imagery tile.\n * @param {Cartesian4} textureCoordinateRectangle The texture rectangle of the tile that is covered\n * by the imagery, where X=west, Y=south, Z=east, W=north.\n * @param {Boolean} useWebMercatorT true to use the Web Mercator texture coordinates for this imagery tile.\n */\nfunction TileImagery(imagery, textureCoordinateRectangle, useWebMercatorT) {\n this.readyImagery = undefined;\n this.loadingImagery = imagery;\n this.textureCoordinateRectangle = textureCoordinateRectangle;\n this.textureTranslationAndScale = undefined;\n this.useWebMercatorT = useWebMercatorT;\n}\n\n/**\n * Frees the resources held by this instance.\n */\nTileImagery.prototype.freeResources = function () {\n if (defined(this.readyImagery)) {\n this.readyImagery.releaseReference();\n }\n\n if (defined(this.loadingImagery)) {\n this.loadingImagery.releaseReference();\n }\n};\n\n/**\n * Processes the load state machine for this instance.\n *\n * @param {Tile} tile The tile to which this instance belongs.\n * @param {FrameState} frameState The frameState.\n * @param {Boolean} skipLoading True to skip loading, e.g. new requests, creating textures. This function will\n * still synchronously process imagery that's already mostly ready to go, e.g. use textures\n * already loaded on ancestor tiles.\n * @returns {Boolean} True if this instance is done loading; otherwise, false.\n */\nTileImagery.prototype.processStateMachine = function (\n tile,\n frameState,\n skipLoading\n) {\n var loadingImagery = this.loadingImagery;\n var imageryLayer = loadingImagery.imageryLayer;\n\n loadingImagery.processStateMachine(\n frameState,\n !this.useWebMercatorT,\n skipLoading\n );\n\n if (loadingImagery.state === ImageryState.READY) {\n if (defined(this.readyImagery)) {\n this.readyImagery.releaseReference();\n }\n this.readyImagery = this.loadingImagery;\n this.loadingImagery = undefined;\n this.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(\n tile,\n this\n );\n return true; // done loading\n }\n\n // Find some ancestor imagery we can use while this imagery is still loading.\n var ancestor = loadingImagery.parent;\n var closestAncestorThatNeedsLoading;\n while (\n defined(ancestor) &&\n (ancestor.state !== ImageryState.READY ||\n (!this.useWebMercatorT && !defined(ancestor.texture)))\n ) {\n if (\n ancestor.state !== ImageryState.FAILED &&\n ancestor.state !== ImageryState.INVALID\n ) {\n // ancestor is still loading\n closestAncestorThatNeedsLoading =\n closestAncestorThatNeedsLoading || ancestor;\n }\n ancestor = ancestor.parent;\n }\n\n if (this.readyImagery !== ancestor) {\n if (defined(this.readyImagery)) {\n this.readyImagery.releaseReference();\n }\n\n this.readyImagery = ancestor;\n\n if (defined(ancestor)) {\n ancestor.addReference();\n this.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(\n tile,\n this\n );\n }\n }\n\n if (\n loadingImagery.state === ImageryState.FAILED ||\n loadingImagery.state === ImageryState.INVALID\n ) {\n // The imagery tile is failed or invalid, so we'd like to use an ancestor instead.\n if (defined(closestAncestorThatNeedsLoading)) {\n // Push the ancestor's load process along a bit. This is necessary because some ancestor imagery\n // tiles may not be attached directly to a terrain tile. Such tiles will never load if\n // we don't do it here.\n closestAncestorThatNeedsLoading.processStateMachine(\n frameState,\n !this.useWebMercatorT,\n skipLoading\n );\n return false; // not done loading\n }\n // This imagery tile is failed or invalid, and we have the \"best available\" substitute.\n return true; // done loading\n }\n\n return false; // not done loading\n};\nexport default TileImagery;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport TerrainProvider from \"../Core/TerrainProvider.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport MipmapHint from \"../Renderer/MipmapHint.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport ReprojectWebMercatorFS from \"../Shaders/ReprojectWebMercatorFS.js\";\nimport ReprojectWebMercatorVS from \"../Shaders/ReprojectWebMercatorVS.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Imagery from \"./Imagery.js\";\nimport ImagerySplitDirection from \"./ImagerySplitDirection.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport TileImagery from \"./TileImagery.js\";\n\n/**\n * An imagery layer that displays tiled image data from a single imagery provider\n * on a {@link Globe}.\n *\n * @alias ImageryLayer\n * @constructor\n *\n * @param {ImageryProvider} imageryProvider The imagery provider to use.\n * @param {Object} [options] Object with the following properties:\n * @param {Rectangle} [options.rectangle=imageryProvider.rectangle] The rectangle of the layer. This rectangle\n * can limit the visible portion of the imagery provider.\n * @param {Number|Function} [options.alpha=1.0] The alpha blending value of this layer, from 0.0 to 1.0.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the alpha is required, and it is expected to return\n * the alpha value to use for the tile.\n * @param {Number|Function} [options.nightAlpha=1.0] The alpha blending value of this layer on the night side of the globe, from 0.0 to 1.0.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the alpha is required, and it is expected to return\n * the alpha value to use for the tile. This only takes effect when <code>enableLighting</code> is <code>true</code>.\n * @param {Number|Function} [options.dayAlpha=1.0] The alpha blending value of this layer on the day side of the globe, from 0.0 to 1.0.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the alpha is required, and it is expected to return\n * the alpha value to use for the tile. This only takes effect when <code>enableLighting</code> is <code>true</code>.\n * @param {Number|Function} [options.brightness=1.0] The brightness of this layer. 1.0 uses the unmodified imagery\n * color. Less than 1.0 makes the imagery darker while greater than 1.0 makes it brighter.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the brightness is required, and it is expected to return\n * the brightness value to use for the tile. The function is executed for every\n * frame and for every tile, so it must be fast.\n * @param {Number|Function} [options.contrast=1.0] The contrast of this layer. 1.0 uses the unmodified imagery color.\n * Less than 1.0 reduces the contrast while greater than 1.0 increases it.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the contrast is required, and it is expected to return\n * the contrast value to use for the tile. The function is executed for every\n * frame and for every tile, so it must be fast.\n * @param {Number|Function} [options.hue=0.0] The hue of this layer. 0.0 uses the unmodified imagery color.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates\n * of the imagery tile for which the hue is required, and it is expected to return\n * the contrast value to use for the tile. The function is executed for every\n * frame and for every tile, so it must be fast.\n * @param {Number|Function} [options.saturation=1.0] The saturation of this layer. 1.0 uses the unmodified imagery color.\n * Less than 1.0 reduces the saturation while greater than 1.0 increases it.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates\n * of the imagery tile for which the saturation is required, and it is expected to return\n * the contrast value to use for the tile. The function is executed for every\n * frame and for every tile, so it must be fast.\n * @param {Number|Function} [options.gamma=1.0] The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color.\n * This can either be a simple number or a function with the signature\n * <code>function(frameState, layer, x, y, level)</code>. The function is passed the\n * current frame state, this layer, and the x, y, and level coordinates of the\n * imagery tile for which the gamma is required, and it is expected to return\n * the gamma value to use for the tile. The function is executed for every\n * frame and for every tile, so it must be fast.\n * @param {ImagerySplitDirection|Function} [options.splitDirection=ImagerySplitDirection.NONE] The {@link ImagerySplitDirection} split to apply to this layer.\n * @param {TextureMinificationFilter} [options.minificationFilter=TextureMinificationFilter.LINEAR] The\n * texture minification filter to apply to this layer. Possible values\n * are <code>TextureMinificationFilter.LINEAR</code> and\n * <code>TextureMinificationFilter.NEAREST</code>.\n * @param {TextureMagnificationFilter} [options.magnificationFilter=TextureMagnificationFilter.LINEAR] The\n * texture minification filter to apply to this layer. Possible values\n * are <code>TextureMagnificationFilter.LINEAR</code> and\n * <code>TextureMagnificationFilter.NEAREST</code>.\n * @param {Boolean} [options.show=true] True if the layer is shown; otherwise, false.\n * @param {Number} [options.maximumAnisotropy=maximum supported] The maximum anisotropy level to use\n * for texture filtering. If this parameter is not specified, the maximum anisotropy supported\n * by the WebGL stack will be used. Larger values make the imagery look better in horizon\n * views.\n * @param {Number} [options.minimumTerrainLevel] The minimum terrain level-of-detail at which to show this imagery layer,\n * or undefined to show it at all levels. Level zero is the least-detailed level.\n * @param {Number} [options.maximumTerrainLevel] The maximum terrain level-of-detail at which to show this imagery layer,\n * or undefined to show it at all levels. Level zero is the least-detailed level.\n * @param {Rectangle} [options.cutoutRectangle] Cartographic rectangle for cutting out a portion of this ImageryLayer.\n * @param {Color} [options.colorToAlpha] Color to be used as alpha.\n * @param {Number} [options.colorToAlphaThreshold=0.004] Threshold for color-to-alpha.\n */\nfunction ImageryLayer(imageryProvider, options) {\n this._imageryProvider = imageryProvider;\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The alpha blending value of this layer, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number}\n * @default 1.0\n */\n this.alpha = defaultValue(\n options.alpha,\n defaultValue(imageryProvider.defaultAlpha, 1.0)\n );\n\n /**\n * The alpha blending value of this layer on the night side of the globe, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is <code>true</code>.\n *\n * @type {Number}\n * @default 1.0\n */\n this.nightAlpha = defaultValue(\n options.nightAlpha,\n defaultValue(imageryProvider.defaultNightAlpha, 1.0)\n );\n\n /**\n * The alpha blending value of this layer on the day side of the globe, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is <code>true</code>.\n *\n * @type {Number}\n * @default 1.0\n */\n this.dayAlpha = defaultValue(\n options.dayAlpha,\n defaultValue(imageryProvider.defaultDayAlpha, 1.0)\n );\n\n /**\n * The brightness of this layer. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number}\n * @default {@link ImageryLayer.DEFAULT_BRIGHTNESS}\n */\n this.brightness = defaultValue(\n options.brightness,\n defaultValue(\n imageryProvider.defaultBrightness,\n ImageryLayer.DEFAULT_BRIGHTNESS\n )\n );\n\n /**\n * The contrast of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number}\n * @default {@link ImageryLayer.DEFAULT_CONTRAST}\n */\n this.contrast = defaultValue(\n options.contrast,\n defaultValue(imageryProvider.defaultContrast, ImageryLayer.DEFAULT_CONTRAST)\n );\n\n /**\n * The hue of this layer in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number}\n * @default {@link ImageryLayer.DEFAULT_HUE}\n */\n this.hue = defaultValue(\n options.hue,\n defaultValue(imageryProvider.defaultHue, ImageryLayer.DEFAULT_HUE)\n );\n\n /**\n * The saturation of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number}\n * @default {@link ImageryLayer.DEFAULT_SATURATION}\n */\n this.saturation = defaultValue(\n options.saturation,\n defaultValue(\n imageryProvider.defaultSaturation,\n ImageryLayer.DEFAULT_SATURATION\n )\n );\n\n /**\n * The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color.\n *\n * @type {Number}\n * @default {@link ImageryLayer.DEFAULT_GAMMA}\n */\n this.gamma = defaultValue(\n options.gamma,\n defaultValue(imageryProvider.defaultGamma, ImageryLayer.DEFAULT_GAMMA)\n );\n\n /**\n * The {@link ImagerySplitDirection} to apply to this layer.\n *\n * @type {ImagerySplitDirection}\n * @default {@link ImageryLayer.DEFAULT_SPLIT}\n */\n this.splitDirection = defaultValue(\n options.splitDirection,\n defaultValue(imageryProvider.defaultSplit, ImageryLayer.DEFAULT_SPLIT)\n );\n\n /**\n * The {@link TextureMinificationFilter} to apply to this layer.\n * Possible values are {@link TextureMinificationFilter.LINEAR} (the default)\n * and {@link TextureMinificationFilter.NEAREST}.\n *\n * To take effect, this property must be set immediately after adding the imagery layer.\n * Once a texture is loaded it won't be possible to change the texture filter used.\n *\n * @type {TextureMinificationFilter}\n * @default {@link ImageryLayer.DEFAULT_MINIFICATION_FILTER}\n */\n this.minificationFilter = defaultValue(\n options.minificationFilter,\n defaultValue(\n imageryProvider.defaultMinificationFilter,\n ImageryLayer.DEFAULT_MINIFICATION_FILTER\n )\n );\n\n /**\n * The {@link TextureMagnificationFilter} to apply to this layer.\n * Possible values are {@link TextureMagnificationFilter.LINEAR} (the default)\n * and {@link TextureMagnificationFilter.NEAREST}.\n *\n * To take effect, this property must be set immediately after adding the imagery layer.\n * Once a texture is loaded it won't be possible to change the texture filter used.\n *\n * @type {TextureMagnificationFilter}\n * @default {@link ImageryLayer.DEFAULT_MAGNIFICATION_FILTER}\n */\n this.magnificationFilter = defaultValue(\n options.magnificationFilter,\n defaultValue(\n imageryProvider.defaultMagnificationFilter,\n ImageryLayer.DEFAULT_MAGNIFICATION_FILTER\n )\n );\n\n /**\n * Determines if this layer is shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n this._minimumTerrainLevel = options.minimumTerrainLevel;\n this._maximumTerrainLevel = options.maximumTerrainLevel;\n\n this._rectangle = defaultValue(options.rectangle, Rectangle.MAX_VALUE);\n this._maximumAnisotropy = options.maximumAnisotropy;\n\n this._imageryCache = {};\n\n this._skeletonPlaceholder = new TileImagery(Imagery.createPlaceholder(this));\n\n // The value of the show property on the last update.\n this._show = true;\n\n // The index of this layer in the ImageryLayerCollection.\n this._layerIndex = -1;\n\n // true if this is the base (lowest shown) layer.\n this._isBaseLayer = false;\n\n this._requestImageError = undefined;\n\n this._reprojectComputeCommands = [];\n\n /**\n * Rectangle cutout in this layer of imagery.\n *\n * @type {Rectangle}\n */\n this.cutoutRectangle = options.cutoutRectangle;\n\n /**\n * Color value that should be set to transparent.\n *\n * @type {Color}\n */\n this.colorToAlpha = options.colorToAlpha;\n\n /**\n * Normalized (0-1) threshold for color-to-alpha.\n *\n * @type {Number}\n */\n this.colorToAlphaThreshold = defaultValue(\n options.colorToAlphaThreshold,\n ImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD\n );\n}\n\nObject.defineProperties(ImageryLayer.prototype, {\n /**\n * Gets the imagery provider for this layer.\n * @memberof ImageryLayer.prototype\n * @type {ImageryProvider}\n * @readonly\n */\n imageryProvider: {\n get: function () {\n return this._imageryProvider;\n },\n },\n\n /**\n * Gets the rectangle of this layer. If this rectangle is smaller than the rectangle of the\n * {@link ImageryProvider}, only a portion of the imagery provider is shown.\n * @memberof ImageryLayer.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n});\n\n/**\n * This value is used as the default brightness for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the brightness of the imagery.\n * @type {Number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_BRIGHTNESS = 1.0;\n/**\n * This value is used as the default contrast for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the contrast of the imagery.\n * @type {Number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_CONTRAST = 1.0;\n/**\n * This value is used as the default hue for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the hue of the imagery.\n * @type {Number}\n * @default 0.0\n */\nImageryLayer.DEFAULT_HUE = 0.0;\n/**\n * This value is used as the default saturation for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the saturation of the imagery.\n * @type {Number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_SATURATION = 1.0;\n/**\n * This value is used as the default gamma for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the gamma of the imagery.\n * @type {Number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_GAMMA = 1.0;\n\n/**\n * This value is used as the default split for the imagery layer if one is not provided during construction\n * or by the imagery provider.\n * @type {ImagerySplitDirection}\n * @default ImagerySplitDirection.NONE\n */\nImageryLayer.DEFAULT_SPLIT = ImagerySplitDirection.NONE;\n\n/**\n * This value is used as the default texture minification filter for the imagery layer if one is not provided\n * during construction or by the imagery provider.\n * @type {TextureMinificationFilter}\n * @default TextureMinificationFilter.LINEAR\n */\nImageryLayer.DEFAULT_MINIFICATION_FILTER = TextureMinificationFilter.LINEAR;\n\n/**\n * This value is used as the default texture magnification filter for the imagery layer if one is not provided\n * during construction or by the imagery provider.\n * @type {TextureMagnificationFilter}\n * @default TextureMagnificationFilter.LINEAR\n */\nImageryLayer.DEFAULT_MAGNIFICATION_FILTER = TextureMagnificationFilter.LINEAR;\n\n/**\n * This value is used as the default threshold for color-to-alpha if one is not provided\n * during construction or by the imagery provider.\n * @type {Number}\n * @default 0.004\n */\nImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD = 0.004;\n\n/**\n * Gets a value indicating whether this layer is the base layer in the\n * {@link ImageryLayerCollection}. The base layer is the one that underlies all\n * others. It is special in that it is treated as if it has global rectangle, even if\n * it actually does not, by stretching the texels at the edges over the entire\n * globe.\n *\n * @returns {Boolean} true if this is the base layer; otherwise, false.\n */\nImageryLayer.prototype.isBaseLayer = function () {\n return this._isBaseLayer;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see ImageryLayer#destroy\n */\nImageryLayer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * imageryLayer = imageryLayer && imageryLayer.destroy();\n *\n * @see ImageryLayer#isDestroyed\n */\nImageryLayer.prototype.destroy = function () {\n return destroyObject(this);\n};\n\nvar imageryBoundsScratch = new Rectangle();\nvar tileImageryBoundsScratch = new Rectangle();\nvar clippedRectangleScratch = new Rectangle();\nvar terrainRectangleScratch = new Rectangle();\n\n/**\n * Computes the intersection of this layer's rectangle with the imagery provider's availability rectangle,\n * producing the overall bounds of imagery that can be produced by this layer.\n *\n * @returns {Promise.<Rectangle>} A promise to a rectangle which defines the overall bounds of imagery that can be produced by this layer.\n *\n * @example\n * // Zoom to an imagery layer.\n * imageryLayer.getViewableRectangle().then(function (rectangle) {\n * return camera.flyTo({\n * destination: rectangle\n * });\n * });\n */\nImageryLayer.prototype.getViewableRectangle = function () {\n var imageryProvider = this._imageryProvider;\n var rectangle = this._rectangle;\n return imageryProvider.readyPromise.then(function () {\n return Rectangle.intersection(imageryProvider.rectangle, rectangle);\n });\n};\n\n/**\n * Create skeletons for the imagery tiles that partially or completely overlap a given terrain\n * tile.\n *\n * @private\n *\n * @param {Tile} tile The terrain tile.\n * @param {TerrainProvider} terrainProvider The terrain provider associated with the terrain tile.\n * @param {Number} insertionPoint The position to insert new skeletons before in the tile's imagery list.\n * @returns {Boolean} true if this layer overlaps any portion of the terrain tile; otherwise, false.\n */\nImageryLayer.prototype._createTileImagerySkeletons = function (\n tile,\n terrainProvider,\n insertionPoint\n) {\n var surfaceTile = tile.data;\n\n if (\n defined(this._minimumTerrainLevel) &&\n tile.level < this._minimumTerrainLevel\n ) {\n return false;\n }\n if (\n defined(this._maximumTerrainLevel) &&\n tile.level > this._maximumTerrainLevel\n ) {\n return false;\n }\n\n var imageryProvider = this._imageryProvider;\n\n if (!defined(insertionPoint)) {\n insertionPoint = surfaceTile.imagery.length;\n }\n\n if (!imageryProvider.ready) {\n // The imagery provider is not ready, so we can't create skeletons, yet.\n // Instead, add a placeholder so that we'll know to create\n // the skeletons once the provider is ready.\n this._skeletonPlaceholder.loadingImagery.addReference();\n surfaceTile.imagery.splice(insertionPoint, 0, this._skeletonPlaceholder);\n return true;\n }\n\n // Use Web Mercator for our texture coordinate computations if this imagery layer uses\n // that projection and the terrain tile falls entirely inside the valid bounds of the\n // projection.\n var useWebMercatorT =\n imageryProvider.tilingScheme.projection instanceof WebMercatorProjection &&\n tile.rectangle.north < WebMercatorProjection.MaximumLatitude &&\n tile.rectangle.south > -WebMercatorProjection.MaximumLatitude;\n\n // Compute the rectangle of the imagery from this imageryProvider that overlaps\n // the geometry tile. The ImageryProvider and ImageryLayer both have the\n // opportunity to constrain the rectangle. The imagery TilingScheme's rectangle\n // always fully contains the ImageryProvider's rectangle.\n var imageryBounds = Rectangle.intersection(\n imageryProvider.rectangle,\n this._rectangle,\n imageryBoundsScratch\n );\n var rectangle = Rectangle.intersection(\n tile.rectangle,\n imageryBounds,\n tileImageryBoundsScratch\n );\n\n if (!defined(rectangle)) {\n // There is no overlap between this terrain tile and this imagery\n // provider. Unless this is the base layer, no skeletons need to be created.\n // We stretch texels at the edge of the base layer over the entire globe.\n if (!this.isBaseLayer()) {\n return false;\n }\n\n var baseImageryRectangle = imageryBounds;\n var baseTerrainRectangle = tile.rectangle;\n rectangle = tileImageryBoundsScratch;\n\n if (baseTerrainRectangle.south >= baseImageryRectangle.north) {\n rectangle.north = rectangle.south = baseImageryRectangle.north;\n } else if (baseTerrainRectangle.north <= baseImageryRectangle.south) {\n rectangle.north = rectangle.south = baseImageryRectangle.south;\n } else {\n rectangle.south = Math.max(\n baseTerrainRectangle.south,\n baseImageryRectangle.south\n );\n rectangle.north = Math.min(\n baseTerrainRectangle.north,\n baseImageryRectangle.north\n );\n }\n\n if (baseTerrainRectangle.west >= baseImageryRectangle.east) {\n rectangle.west = rectangle.east = baseImageryRectangle.east;\n } else if (baseTerrainRectangle.east <= baseImageryRectangle.west) {\n rectangle.west = rectangle.east = baseImageryRectangle.west;\n } else {\n rectangle.west = Math.max(\n baseTerrainRectangle.west,\n baseImageryRectangle.west\n );\n rectangle.east = Math.min(\n baseTerrainRectangle.east,\n baseImageryRectangle.east\n );\n }\n }\n\n var latitudeClosestToEquator = 0.0;\n if (rectangle.south > 0.0) {\n latitudeClosestToEquator = rectangle.south;\n } else if (rectangle.north < 0.0) {\n latitudeClosestToEquator = rectangle.north;\n }\n\n // Compute the required level in the imagery tiling scheme.\n // The errorRatio should really be imagerySSE / terrainSSE rather than this hard-coded value.\n // But first we need configurable imagery SSE and we need the rendering to be able to handle more\n // images attached to a terrain tile than there are available texture units. So that's for the future.\n var errorRatio = 1.0;\n var targetGeometricError =\n errorRatio * terrainProvider.getLevelMaximumGeometricError(tile.level);\n var imageryLevel = getLevelWithMaximumTexelSpacing(\n this,\n targetGeometricError,\n latitudeClosestToEquator\n );\n imageryLevel = Math.max(0, imageryLevel);\n var maximumLevel = imageryProvider.maximumLevel;\n if (imageryLevel > maximumLevel) {\n imageryLevel = maximumLevel;\n }\n\n if (defined(imageryProvider.minimumLevel)) {\n var minimumLevel = imageryProvider.minimumLevel;\n if (imageryLevel < minimumLevel) {\n imageryLevel = minimumLevel;\n }\n }\n\n var imageryTilingScheme = imageryProvider.tilingScheme;\n var northwestTileCoordinates = imageryTilingScheme.positionToTileXY(\n Rectangle.northwest(rectangle),\n imageryLevel\n );\n var southeastTileCoordinates = imageryTilingScheme.positionToTileXY(\n Rectangle.southeast(rectangle),\n imageryLevel\n );\n\n // If the southeast corner of the rectangle lies very close to the north or west side\n // of the southeast tile, we don't actually need the southernmost or easternmost\n // tiles.\n // Similarly, if the northwest corner of the rectangle lies very close to the south or east side\n // of the northwest tile, we don't actually need the northernmost or westernmost tiles.\n\n // We define \"very close\" as being within 1/512 of the width of the tile.\n var veryCloseX = tile.rectangle.width / 512.0;\n var veryCloseY = tile.rectangle.height / 512.0;\n\n var northwestTileRectangle = imageryTilingScheme.tileXYToRectangle(\n northwestTileCoordinates.x,\n northwestTileCoordinates.y,\n imageryLevel\n );\n if (\n Math.abs(northwestTileRectangle.south - tile.rectangle.north) <\n veryCloseY &&\n northwestTileCoordinates.y < southeastTileCoordinates.y\n ) {\n ++northwestTileCoordinates.y;\n }\n if (\n Math.abs(northwestTileRectangle.east - tile.rectangle.west) < veryCloseX &&\n northwestTileCoordinates.x < southeastTileCoordinates.x\n ) {\n ++northwestTileCoordinates.x;\n }\n\n var southeastTileRectangle = imageryTilingScheme.tileXYToRectangle(\n southeastTileCoordinates.x,\n southeastTileCoordinates.y,\n imageryLevel\n );\n if (\n Math.abs(southeastTileRectangle.north - tile.rectangle.south) <\n veryCloseY &&\n southeastTileCoordinates.y > northwestTileCoordinates.y\n ) {\n --southeastTileCoordinates.y;\n }\n if (\n Math.abs(southeastTileRectangle.west - tile.rectangle.east) < veryCloseX &&\n southeastTileCoordinates.x > northwestTileCoordinates.x\n ) {\n --southeastTileCoordinates.x;\n }\n\n // Create TileImagery instances for each imagery tile overlapping this terrain tile.\n // We need to do all texture coordinate computations in the imagery tile's tiling scheme.\n\n var terrainRectangle = Rectangle.clone(\n tile.rectangle,\n terrainRectangleScratch\n );\n var imageryRectangle = imageryTilingScheme.tileXYToRectangle(\n northwestTileCoordinates.x,\n northwestTileCoordinates.y,\n imageryLevel\n );\n var clippedImageryRectangle = Rectangle.intersection(\n imageryRectangle,\n imageryBounds,\n clippedRectangleScratch\n );\n\n var imageryTileXYToRectangle;\n if (useWebMercatorT) {\n imageryTilingScheme.rectangleToNativeRectangle(\n terrainRectangle,\n terrainRectangle\n );\n imageryTilingScheme.rectangleToNativeRectangle(\n imageryRectangle,\n imageryRectangle\n );\n imageryTilingScheme.rectangleToNativeRectangle(\n clippedImageryRectangle,\n clippedImageryRectangle\n );\n imageryTilingScheme.rectangleToNativeRectangle(\n imageryBounds,\n imageryBounds\n );\n imageryTileXYToRectangle = imageryTilingScheme.tileXYToNativeRectangle.bind(\n imageryTilingScheme\n );\n veryCloseX = terrainRectangle.width / 512.0;\n veryCloseY = terrainRectangle.height / 512.0;\n } else {\n imageryTileXYToRectangle = imageryTilingScheme.tileXYToRectangle.bind(\n imageryTilingScheme\n );\n }\n\n var minU;\n var maxU = 0.0;\n\n var minV = 1.0;\n var maxV;\n\n // If this is the northern-most or western-most tile in the imagery tiling scheme,\n // it may not start at the northern or western edge of the terrain tile.\n // Calculate where it does start.\n if (\n !this.isBaseLayer() &&\n Math.abs(clippedImageryRectangle.west - terrainRectangle.west) >= veryCloseX\n ) {\n maxU = Math.min(\n 1.0,\n (clippedImageryRectangle.west - terrainRectangle.west) /\n terrainRectangle.width\n );\n }\n\n if (\n !this.isBaseLayer() &&\n Math.abs(clippedImageryRectangle.north - terrainRectangle.north) >=\n veryCloseY\n ) {\n minV = Math.max(\n 0.0,\n (clippedImageryRectangle.north - terrainRectangle.south) /\n terrainRectangle.height\n );\n }\n\n var initialMinV = minV;\n\n for (\n var i = northwestTileCoordinates.x;\n i <= southeastTileCoordinates.x;\n i++\n ) {\n minU = maxU;\n\n imageryRectangle = imageryTileXYToRectangle(\n i,\n northwestTileCoordinates.y,\n imageryLevel\n );\n clippedImageryRectangle = Rectangle.simpleIntersection(\n imageryRectangle,\n imageryBounds,\n clippedRectangleScratch\n );\n\n if (!defined(clippedImageryRectangle)) {\n continue;\n }\n\n maxU = Math.min(\n 1.0,\n (clippedImageryRectangle.east - terrainRectangle.west) /\n terrainRectangle.width\n );\n\n // If this is the eastern-most imagery tile mapped to this terrain tile,\n // and there are more imagery tiles to the east of this one, the maxU\n // should be 1.0 to make sure rounding errors don't make the last\n // image fall shy of the edge of the terrain tile.\n if (\n i === southeastTileCoordinates.x &&\n (this.isBaseLayer() ||\n Math.abs(clippedImageryRectangle.east - terrainRectangle.east) <\n veryCloseX)\n ) {\n maxU = 1.0;\n }\n\n minV = initialMinV;\n\n for (\n var j = northwestTileCoordinates.y;\n j <= southeastTileCoordinates.y;\n j++\n ) {\n maxV = minV;\n\n imageryRectangle = imageryTileXYToRectangle(i, j, imageryLevel);\n clippedImageryRectangle = Rectangle.simpleIntersection(\n imageryRectangle,\n imageryBounds,\n clippedRectangleScratch\n );\n\n if (!defined(clippedImageryRectangle)) {\n continue;\n }\n\n minV = Math.max(\n 0.0,\n (clippedImageryRectangle.south - terrainRectangle.south) /\n terrainRectangle.height\n );\n\n // If this is the southern-most imagery tile mapped to this terrain tile,\n // and there are more imagery tiles to the south of this one, the minV\n // should be 0.0 to make sure rounding errors don't make the last\n // image fall shy of the edge of the terrain tile.\n if (\n j === southeastTileCoordinates.y &&\n (this.isBaseLayer() ||\n Math.abs(clippedImageryRectangle.south - terrainRectangle.south) <\n veryCloseY)\n ) {\n minV = 0.0;\n }\n\n var texCoordsRectangle = new Cartesian4(minU, minV, maxU, maxV);\n var imagery = this.getImageryFromCache(i, j, imageryLevel);\n surfaceTile.imagery.splice(\n insertionPoint,\n 0,\n new TileImagery(imagery, texCoordsRectangle, useWebMercatorT)\n );\n ++insertionPoint;\n }\n }\n\n return true;\n};\n\n/**\n * Calculate the translation and scale for a particular {@link TileImagery} attached to a\n * particular terrain tile.\n *\n * @private\n *\n * @param {Tile} tile The terrain tile.\n * @param {TileImagery} tileImagery The imagery tile mapping.\n * @returns {Cartesian4} The translation and scale where X and Y are the translation and Z and W\n * are the scale.\n */\nImageryLayer.prototype._calculateTextureTranslationAndScale = function (\n tile,\n tileImagery\n) {\n var imageryRectangle = tileImagery.readyImagery.rectangle;\n var terrainRectangle = tile.rectangle;\n\n if (tileImagery.useWebMercatorT) {\n var tilingScheme =\n tileImagery.readyImagery.imageryLayer.imageryProvider.tilingScheme;\n imageryRectangle = tilingScheme.rectangleToNativeRectangle(\n imageryRectangle,\n imageryBoundsScratch\n );\n terrainRectangle = tilingScheme.rectangleToNativeRectangle(\n terrainRectangle,\n terrainRectangleScratch\n );\n }\n\n var terrainWidth = terrainRectangle.width;\n var terrainHeight = terrainRectangle.height;\n\n var scaleX = terrainWidth / imageryRectangle.width;\n var scaleY = terrainHeight / imageryRectangle.height;\n return new Cartesian4(\n (scaleX * (terrainRectangle.west - imageryRectangle.west)) / terrainWidth,\n (scaleY * (terrainRectangle.south - imageryRectangle.south)) /\n terrainHeight,\n scaleX,\n scaleY\n );\n};\n\n/**\n * Request a particular piece of imagery from the imagery provider. This method handles raising an\n * error event if the request fails, and retrying the request if necessary.\n *\n * @private\n *\n * @param {Imagery} imagery The imagery to request.\n */\nImageryLayer.prototype._requestImagery = function (imagery) {\n var imageryProvider = this._imageryProvider;\n\n var that = this;\n\n function success(image) {\n if (!defined(image)) {\n return failure();\n }\n\n imagery.image = image;\n imagery.state = ImageryState.RECEIVED;\n imagery.request = undefined;\n\n TileProviderError.handleSuccess(that._requestImageError);\n }\n\n function failure(e) {\n if (imagery.request.state === RequestState.CANCELLED) {\n // Cancelled due to low priority - try again later.\n imagery.state = ImageryState.UNLOADED;\n imagery.request = undefined;\n return;\n }\n\n // Initially assume failure. handleError may retry, in which case the state will\n // change to TRANSITIONING.\n imagery.state = ImageryState.FAILED;\n imagery.request = undefined;\n\n var message =\n \"Failed to obtain image tile X: \" +\n imagery.x +\n \" Y: \" +\n imagery.y +\n \" Level: \" +\n imagery.level +\n \".\";\n that._requestImageError = TileProviderError.handleError(\n that._requestImageError,\n imageryProvider,\n imageryProvider.errorEvent,\n message,\n imagery.x,\n imagery.y,\n imagery.level,\n doRequest,\n e\n );\n }\n\n function doRequest() {\n var request = new Request({\n throttle: false,\n throttleByServer: true,\n type: RequestType.IMAGERY,\n });\n imagery.request = request;\n imagery.state = ImageryState.TRANSITIONING;\n var imagePromise = imageryProvider.requestImage(\n imagery.x,\n imagery.y,\n imagery.level,\n request\n );\n\n if (!defined(imagePromise)) {\n // Too many parallel requests, so postpone loading tile.\n imagery.state = ImageryState.UNLOADED;\n imagery.request = undefined;\n return;\n }\n\n if (defined(imageryProvider.getTileCredits)) {\n imagery.credits = imageryProvider.getTileCredits(\n imagery.x,\n imagery.y,\n imagery.level\n );\n }\n\n when(imagePromise, success, failure);\n }\n\n doRequest();\n};\n\nImageryLayer.prototype._createTextureWebGL = function (context, imagery) {\n var sampler = new Sampler({\n minificationFilter: this.minificationFilter,\n magnificationFilter: this.magnificationFilter,\n });\n\n var image = imagery.image;\n\n if (defined(image.internalFormat)) {\n return new Texture({\n context: context,\n pixelFormat: image.internalFormat,\n width: image.width,\n height: image.height,\n source: {\n arrayBufferView: image.bufferView,\n },\n sampler: sampler,\n });\n }\n return new Texture({\n context: context,\n source: image,\n pixelFormat: this._imageryProvider.hasAlphaChannel\n ? PixelFormat.RGBA\n : PixelFormat.RGB,\n sampler: sampler,\n });\n};\n\n/**\n * Create a WebGL texture for a given {@link Imagery} instance.\n *\n * @private\n *\n * @param {Context} context The rendered context to use to create textures.\n * @param {Imagery} imagery The imagery for which to create a texture.\n */\nImageryLayer.prototype._createTexture = function (context, imagery) {\n var imageryProvider = this._imageryProvider;\n var image = imagery.image;\n\n // If this imagery provider has a discard policy, use it to check if this\n // image should be discarded.\n if (defined(imageryProvider.tileDiscardPolicy)) {\n var discardPolicy = imageryProvider.tileDiscardPolicy;\n if (defined(discardPolicy)) {\n // If the discard policy is not ready yet, transition back to the\n // RECEIVED state and we'll try again next time.\n if (!discardPolicy.isReady()) {\n imagery.state = ImageryState.RECEIVED;\n return;\n }\n\n // Mark discarded imagery tiles invalid. Parent imagery will be used instead.\n if (discardPolicy.shouldDiscardImage(image)) {\n imagery.state = ImageryState.INVALID;\n return;\n }\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (\n this.minificationFilter !== TextureMinificationFilter.NEAREST &&\n this.minificationFilter !== TextureMinificationFilter.LINEAR\n ) {\n throw new DeveloperError(\n \"ImageryLayer minification filter must be NEAREST or LINEAR\"\n );\n }\n //>>includeEnd('debug');\n\n // Imagery does not need to be discarded, so upload it to WebGL.\n var texture = this._createTextureWebGL(context, imagery);\n\n if (\n imageryProvider.tilingScheme.projection instanceof WebMercatorProjection\n ) {\n imagery.textureWebMercator = texture;\n } else {\n imagery.texture = texture;\n }\n imagery.image = undefined;\n imagery.state = ImageryState.TEXTURE_LOADED;\n};\n\nfunction getSamplerKey(\n minificationFilter,\n magnificationFilter,\n maximumAnisotropy\n) {\n return (\n minificationFilter + \":\" + magnificationFilter + \":\" + maximumAnisotropy\n );\n}\n\nImageryLayer.prototype._finalizeReprojectTexture = function (context, texture) {\n var minificationFilter = this.minificationFilter;\n var magnificationFilter = this.magnificationFilter;\n var usesLinearTextureFilter =\n minificationFilter === TextureMinificationFilter.LINEAR &&\n magnificationFilter === TextureMagnificationFilter.LINEAR;\n // Use mipmaps if this texture has power-of-two dimensions.\n // In addition, mipmaps are only generated if the texture filters are both LINEAR.\n if (\n usesLinearTextureFilter &&\n !PixelFormat.isCompressedFormat(texture.pixelFormat) &&\n CesiumMath.isPowerOfTwo(texture.width) &&\n CesiumMath.isPowerOfTwo(texture.height)\n ) {\n minificationFilter = TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;\n var maximumSupportedAnisotropy =\n ContextLimits.maximumTextureFilterAnisotropy;\n var maximumAnisotropy = Math.min(\n maximumSupportedAnisotropy,\n defaultValue(this._maximumAnisotropy, maximumSupportedAnisotropy)\n );\n var mipmapSamplerKey = getSamplerKey(\n minificationFilter,\n magnificationFilter,\n maximumAnisotropy\n );\n var mipmapSamplers = context.cache.imageryLayerMipmapSamplers;\n if (!defined(mipmapSamplers)) {\n mipmapSamplers = {};\n context.cache.imageryLayerMipmapSamplers = mipmapSamplers;\n }\n var mipmapSampler = mipmapSamplers[mipmapSamplerKey];\n if (!defined(mipmapSampler)) {\n mipmapSampler = mipmapSamplers[mipmapSamplerKey] = new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: minificationFilter,\n magnificationFilter: magnificationFilter,\n maximumAnisotropy: maximumAnisotropy,\n });\n }\n texture.generateMipmap(MipmapHint.NICEST);\n texture.sampler = mipmapSampler;\n } else {\n var nonMipmapSamplerKey = getSamplerKey(\n minificationFilter,\n magnificationFilter,\n 0\n );\n var nonMipmapSamplers = context.cache.imageryLayerNonMipmapSamplers;\n if (!defined(nonMipmapSamplers)) {\n nonMipmapSamplers = {};\n context.cache.imageryLayerNonMipmapSamplers = nonMipmapSamplers;\n }\n var nonMipmapSampler = nonMipmapSamplers[nonMipmapSamplerKey];\n if (!defined(nonMipmapSampler)) {\n nonMipmapSampler = nonMipmapSamplers[nonMipmapSamplerKey] = new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: minificationFilter,\n magnificationFilter: magnificationFilter,\n });\n }\n texture.sampler = nonMipmapSampler;\n }\n};\n\n/**\n * Enqueues a command re-projecting a texture to a {@link GeographicProjection} on the next update, if necessary, and generate\n * mipmaps for the geographic texture.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n * @param {Imagery} imagery The imagery instance to reproject.\n * @param {Boolean} [needGeographicProjection=true] True to reproject to geographic, or false if Web Mercator is fine.\n */\nImageryLayer.prototype._reprojectTexture = function (\n frameState,\n imagery,\n needGeographicProjection\n) {\n var texture = imagery.textureWebMercator || imagery.texture;\n var rectangle = imagery.rectangle;\n var context = frameState.context;\n\n needGeographicProjection = defaultValue(needGeographicProjection, true);\n\n // Reproject this texture if it is not already in a geographic projection and\n // the pixels are more than 1e-5 radians apart. The pixel spacing cutoff\n // avoids precision problems in the reprojection transformation while making\n // no noticeable difference in the georeferencing of the image.\n if (\n needGeographicProjection &&\n !(\n this._imageryProvider.tilingScheme.projection instanceof\n GeographicProjection\n ) &&\n rectangle.width / texture.width > 1e-5\n ) {\n var that = this;\n imagery.addReference();\n var computeCommand = new ComputeCommand({\n persists: true,\n owner: this,\n // Update render resources right before execution instead of now.\n // This allows different ImageryLayers to share the same vao and buffers.\n preExecute: function (command) {\n reprojectToGeographic(command, context, texture, imagery.rectangle);\n },\n postExecute: function (outputTexture) {\n imagery.texture = outputTexture;\n that._finalizeReprojectTexture(context, outputTexture);\n imagery.state = ImageryState.READY;\n imagery.releaseReference();\n },\n });\n this._reprojectComputeCommands.push(computeCommand);\n } else {\n if (needGeographicProjection) {\n imagery.texture = texture;\n }\n this._finalizeReprojectTexture(context, texture);\n imagery.state = ImageryState.READY;\n }\n};\n\n/**\n * Updates frame state to execute any queued texture re-projections.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n */\nImageryLayer.prototype.queueReprojectionCommands = function (frameState) {\n var computeCommands = this._reprojectComputeCommands;\n var length = computeCommands.length;\n for (var i = 0; i < length; ++i) {\n frameState.commandList.push(computeCommands[i]);\n }\n computeCommands.length = 0;\n};\n\n/**\n * Cancels re-projection commands queued for the next frame.\n *\n * @private\n */\nImageryLayer.prototype.cancelReprojections = function () {\n this._reprojectComputeCommands.length = 0;\n};\n\nImageryLayer.prototype.getImageryFromCache = function (\n x,\n y,\n level,\n imageryRectangle\n) {\n var cacheKey = getImageryCacheKey(x, y, level);\n var imagery = this._imageryCache[cacheKey];\n\n if (!defined(imagery)) {\n imagery = new Imagery(this, x, y, level, imageryRectangle);\n this._imageryCache[cacheKey] = imagery;\n }\n\n imagery.addReference();\n return imagery;\n};\n\nImageryLayer.prototype.removeImageryFromCache = function (imagery) {\n var cacheKey = getImageryCacheKey(imagery.x, imagery.y, imagery.level);\n delete this._imageryCache[cacheKey];\n};\n\nfunction getImageryCacheKey(x, y, level) {\n return JSON.stringify([x, y, level]);\n}\n\nvar uniformMap = {\n u_textureDimensions: function () {\n return this.textureDimensions;\n },\n u_texture: function () {\n return this.texture;\n },\n\n textureDimensions: new Cartesian2(),\n texture: undefined,\n};\n\nvar float32ArrayScratch = FeatureDetection.supportsTypedArrays()\n ? new Float32Array(2 * 64)\n : undefined;\n\nfunction reprojectToGeographic(command, context, texture, rectangle) {\n // This function has gone through a number of iterations, because GPUs are awesome.\n //\n // Originally, we had a very simple vertex shader and computed the Web Mercator texture coordinates\n // per-fragment in the fragment shader. That worked well, except on mobile devices, because\n // fragment shaders have limited precision on many mobile devices. The result was smearing artifacts\n // at medium zoom levels because different geographic texture coordinates would be reprojected to Web\n // Mercator as the same value.\n //\n // Our solution was to reproject to Web Mercator in the vertex shader instead of the fragment shader.\n // This required far more vertex data. With fragment shader reprojection, we only needed a single quad.\n // But to achieve the same precision with vertex shader reprojection, we needed a vertex for each\n // output pixel. So we used a grid of 256x256 vertices, because most of our imagery\n // tiles are 256x256. Fortunately the grid could be created and uploaded to the GPU just once and\n // re-used for all reprojections, so the performance was virtually unchanged from our original fragment\n // shader approach. See https://github.com/CesiumGS/cesium/pull/714.\n //\n // Over a year later, we noticed (https://github.com/CesiumGS/cesium/issues/2110)\n // that our reprojection code was creating a rare but severe artifact on some GPUs (Intel HD 4600\n // for one). The problem was that the GLSL sin function on these GPUs had a discontinuity at fine scales in\n // a few places.\n //\n // We solved this by implementing a more reliable sin function based on the CORDIC algorithm\n // (https://github.com/CesiumGS/cesium/pull/2111). Even though this was a fair\n // amount of code to be executing per vertex, the performance seemed to be pretty good on most GPUs.\n // Unfortunately, on some GPUs, the performance was absolutely terrible\n // (https://github.com/CesiumGS/cesium/issues/2258).\n //\n // So that brings us to our current solution, the one you see here. Effectively, we compute the Web\n // Mercator texture coordinates on the CPU and store the T coordinate with each vertex (the S coordinate\n // is the same in Geographic and Web Mercator). To make this faster, we reduced our reprojection mesh\n // to be only 2 vertices wide and 64 vertices high. We should have reduced the width to 2 sooner,\n // because the extra vertices weren't buying us anything. The height of 64 means we are technically\n // doing a slightly less accurate reprojection than we were before, but we can't see the difference\n // so it's worth the 4x speedup.\n\n var reproject = context.cache.imageryLayer_reproject;\n\n if (!defined(reproject)) {\n reproject = context.cache.imageryLayer_reproject = {\n vertexArray: undefined,\n shaderProgram: undefined,\n sampler: undefined,\n destroy: function () {\n if (defined(this.framebuffer)) {\n this.framebuffer.destroy();\n }\n if (defined(this.vertexArray)) {\n this.vertexArray.destroy();\n }\n if (defined(this.shaderProgram)) {\n this.shaderProgram.destroy();\n }\n },\n };\n\n var positions = new Float32Array(2 * 64 * 2);\n var index = 0;\n for (var j = 0; j < 64; ++j) {\n var y = j / 63.0;\n positions[index++] = 0.0;\n positions[index++] = y;\n positions[index++] = 1.0;\n positions[index++] = y;\n }\n\n var reprojectAttributeIndices = {\n position: 0,\n webMercatorT: 1,\n };\n\n var indices = TerrainProvider.getRegularGridIndices(2, 64);\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: indices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n\n reproject.vertexArray = new VertexArray({\n context: context,\n attributes: [\n {\n index: reprojectAttributeIndices.position,\n vertexBuffer: Buffer.createVertexBuffer({\n context: context,\n typedArray: positions,\n usage: BufferUsage.STATIC_DRAW,\n }),\n componentsPerAttribute: 2,\n },\n {\n index: reprojectAttributeIndices.webMercatorT,\n vertexBuffer: Buffer.createVertexBuffer({\n context: context,\n sizeInBytes: 64 * 2 * 4,\n usage: BufferUsage.STREAM_DRAW,\n }),\n componentsPerAttribute: 1,\n },\n ],\n indexBuffer: indexBuffer,\n });\n\n var vs = new ShaderSource({\n sources: [ReprojectWebMercatorVS],\n });\n\n reproject.shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: ReprojectWebMercatorFS,\n attributeLocations: reprojectAttributeIndices,\n });\n\n reproject.sampler = new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR,\n });\n }\n\n texture.sampler = reproject.sampler;\n\n var width = texture.width;\n var height = texture.height;\n\n uniformMap.textureDimensions.x = width;\n uniformMap.textureDimensions.y = height;\n uniformMap.texture = texture;\n\n var sinLatitude = Math.sin(rectangle.south);\n var southMercatorY = 0.5 * Math.log((1 + sinLatitude) / (1 - sinLatitude));\n\n sinLatitude = Math.sin(rectangle.north);\n var northMercatorY = 0.5 * Math.log((1 + sinLatitude) / (1 - sinLatitude));\n var oneOverMercatorHeight = 1.0 / (northMercatorY - southMercatorY);\n\n var outputTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: texture.pixelFormat,\n pixelDatatype: texture.pixelDatatype,\n preMultiplyAlpha: texture.preMultiplyAlpha,\n });\n\n // Allocate memory for the mipmaps. Failure to do this before rendering\n // to the texture via the FBO, and calling generateMipmap later,\n // will result in the texture appearing blank. I can't pretend to\n // understand exactly why this is.\n if (CesiumMath.isPowerOfTwo(width) && CesiumMath.isPowerOfTwo(height)) {\n outputTexture.generateMipmap(MipmapHint.NICEST);\n }\n\n var south = rectangle.south;\n var north = rectangle.north;\n\n var webMercatorT = float32ArrayScratch;\n\n var outputIndex = 0;\n for (var webMercatorTIndex = 0; webMercatorTIndex < 64; ++webMercatorTIndex) {\n var fraction = webMercatorTIndex / 63.0;\n var latitude = CesiumMath.lerp(south, north, fraction);\n sinLatitude = Math.sin(latitude);\n var mercatorY = 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n var mercatorFraction = (mercatorY - southMercatorY) * oneOverMercatorHeight;\n webMercatorT[outputIndex++] = mercatorFraction;\n webMercatorT[outputIndex++] = mercatorFraction;\n }\n\n reproject.vertexArray\n .getAttribute(1)\n .vertexBuffer.copyFromArrayView(webMercatorT);\n\n command.shaderProgram = reproject.shaderProgram;\n command.outputTexture = outputTexture;\n command.uniformMap = uniformMap;\n command.vertexArray = reproject.vertexArray;\n}\n\n/**\n * Gets the level with the specified world coordinate spacing between texels, or less.\n *\n * @param {ImageryLayer} layer The imagery layer to use.\n * @param {Number} texelSpacing The texel spacing for which to find a corresponding level.\n * @param {Number} latitudeClosestToEquator The latitude closest to the equator that we're concerned with.\n * @returns {Number} The level with the specified texel spacing or less.\n * @private\n */\nfunction getLevelWithMaximumTexelSpacing(\n layer,\n texelSpacing,\n latitudeClosestToEquator\n) {\n // PERFORMANCE_IDEA: factor out the stuff that doesn't change.\n var imageryProvider = layer._imageryProvider;\n var tilingScheme = imageryProvider.tilingScheme;\n var ellipsoid = tilingScheme.ellipsoid;\n var latitudeFactor = !(\n layer._imageryProvider.tilingScheme.projection instanceof\n GeographicProjection\n )\n ? Math.cos(latitudeClosestToEquator)\n : 1.0;\n var tilingSchemeRectangle = tilingScheme.rectangle;\n var levelZeroMaximumTexelSpacing =\n (ellipsoid.maximumRadius * tilingSchemeRectangle.width * latitudeFactor) /\n (imageryProvider.tileWidth * tilingScheme.getNumberOfXTilesAtLevel(0));\n\n var twoToTheLevelPower = levelZeroMaximumTexelSpacing / texelSpacing;\n var level = Math.log(twoToTheLevelPower) / Math.log(2);\n var rounded = Math.round(level);\n return rounded | 0;\n}\nexport default ImageryLayer;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 position;\\n\\\nattribute float webMercatorT;\\n\\\n\\n\\\nuniform vec2 u_textureDimensions;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n v_textureCoordinates = vec2(position.x, webMercatorT);\\n\\\n gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_texture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_FragColor = texture2D(u_texture, v_textureCoordinates);\\n\\\n}\\n\\\n\";\n","/**\n * Indicates what happened the last time this tile was visited for selection.\n * @private\n */\nvar TileSelectionResult = {\n /**\n * There was no selection result, perhaps because the tile wasn't visited\n * last frame.\n */\n NONE: 0,\n\n /**\n * This tile was deemed not visible and culled.\n */\n CULLED: 1,\n\n /**\n * The tile was selected for rendering.\n */\n RENDERED: 2,\n\n /**\n * This tile did not meet the required screen-space error and was refined.\n */\n REFINED: 3,\n\n /**\n * This tile was originally rendered, but it got kicked out of the render list\n * in favor of an ancestor because it is not yet renderable.\n */\n RENDERED_AND_KICKED: 2 | 4,\n\n /**\n * This tile was originally refined, but its rendered descendants got kicked out of the\n * render list in favor of an ancestor because it is not yet renderable.\n */\n REFINED_AND_KICKED: 3 | 4,\n\n /**\n * This tile was culled because it was not visible, but it still needs to be loaded\n * and any heights on it need to be updated because the camera's position or the\n * camera's reference frame's origin falls inside this tile. Loading this tile\n * could affect the position of the camera if the camera is currently below\n * terrain or if it is tracking an object whose height is referenced to terrain.\n * And a change in the camera position may, in turn, affect what is culled.\n */\n CULLED_BUT_NEEDED: 1 | 8,\n\n /**\n * Determines if a selection result indicates that this tile or its descendants were\n * kicked from the render list. In other words, if it is <code>RENDERED_AND_KICKED</code>\n * or <code>REFINED_AND_KICKED</code>.\n *\n * @param {TileSelectionResult} value The selection result to test.\n * @returns {Boolean} true if the tile was kicked, no matter if it was originally rendered or refined.\n */\n wasKicked: function (value) {\n return value >= TileSelectionResult.RENDERED_AND_KICKED;\n },\n\n /**\n * Determines the original selection result prior to being kicked or CULLED_BUT_NEEDED.\n * If the tile wasn't kicked or CULLED_BUT_NEEDED, the original value is returned.\n * @param {TileSelectionResult} value The selection result.\n * @returns {TileSelectionResult} The original selection result prior to kicking.\n */\n originalResult: function (value) {\n return value & 3;\n },\n\n /**\n * Converts this selection result to a kick.\n * @param {TileSelectionResult} value The original selection result.\n * @returns {TileSelectionResult} The kicked form of the selection result.\n */\n kick: function (value) {\n return value | 4;\n },\n};\nexport default TileSelectionResult;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport binarySearch from \"../Core/binarySearch.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport HeightmapTerrainData from \"../Core/HeightmapTerrainData.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Queue from \"../Core/Queue.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\nimport TerrainMesh from \"../Core/TerrainMesh.js\";\nimport TileEdge from \"../Core/TileEdge.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport GlobeSurfaceTile from \"./GlobeSurfaceTile.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\nfunction TerrainFillMesh(tile) {\n this.tile = tile;\n this.frameLastUpdated = undefined;\n this.westMeshes = []; // north to south (CCW)\n this.westTiles = [];\n this.southMeshes = []; // west to east (CCW)\n this.southTiles = [];\n this.eastMeshes = []; // south to north (CCW)\n this.eastTiles = [];\n this.northMeshes = []; // east to west (CCW)\n this.northTiles = [];\n this.southwestMesh = undefined;\n this.southwestTile = undefined;\n this.southeastMesh = undefined;\n this.southeastTile = undefined;\n this.northwestMesh = undefined;\n this.northwestTile = undefined;\n this.northeastMesh = undefined;\n this.northeastTile = undefined;\n this.changedThisFrame = true;\n this.visitedFrame = undefined;\n this.enqueuedFrame = undefined;\n this.mesh = undefined;\n this.vertexArray = undefined;\n this.waterMaskTexture = undefined;\n this.waterMaskTranslationAndScale = new Cartesian4();\n}\n\nTerrainFillMesh.prototype.update = function (\n tileProvider,\n frameState,\n vertexArraysToDestroy\n) {\n if (this.changedThisFrame) {\n createFillMesh(tileProvider, frameState, this.tile, vertexArraysToDestroy);\n this.changedThisFrame = false;\n }\n};\n\nTerrainFillMesh.prototype.destroy = function (vertexArraysToDestroy) {\n if (defined(this.vertexArray)) {\n if (defined(vertexArraysToDestroy)) {\n vertexArraysToDestroy.push(this.vertexArray);\n } else {\n GlobeSurfaceTile._freeVertexArray(\n this.vertexArray,\n vertexArraysToDestroy\n );\n }\n this.vertexArray = undefined;\n }\n\n if (defined(this.waterMaskTexture)) {\n --this.waterMaskTexture.referenceCount;\n if (this.waterMaskTexture.referenceCount === 0) {\n this.waterMaskTexture.destroy();\n }\n this.waterMaskTexture = undefined;\n }\n\n return undefined;\n};\n\nvar traversalQueueScratch = new Queue();\n\nTerrainFillMesh.updateFillTiles = function (\n tileProvider,\n renderedTiles,\n frameState,\n vertexArraysToDestroy\n) {\n // We want our fill tiles to look natural, which means they should align perfectly with\n // adjacent loaded tiles, and their edges that are not adjacent to loaded tiles should have\n // sensible heights (e.g. the average of the heights of loaded edges). Some fill tiles may\n // be adjacent only to other fill tiles, and in that case heights should be assigned fanning\n // outward from the loaded tiles so that there are no sudden changes in height.\n\n // We do this with a breadth-first traversal of the rendered tiles, starting with the loaded\n // ones. Graph nodes are tiles and graph edges connect to other rendered tiles that are spatially adjacent\n // to those tiles. As we visit each node, we propagate tile edges to adjacent tiles. If there's no data\n // for a tile edge, we create an edge with an average height and then propagate it. If an edge is partially defined\n // (e.g. an edge is adjacent to multiple more-detailed tiles and only some of them are loaded), we\n // fill in the rest of the edge with the same height.\n var quadtree = tileProvider._quadtree;\n var levelZeroTiles = quadtree._levelZeroTiles;\n var lastSelectionFrameNumber = quadtree._lastSelectionFrameNumber;\n\n var traversalQueue = traversalQueueScratch;\n traversalQueue.clear();\n\n // Add the tiles with real geometry to the traversal queue.\n for (var i = 0; i < renderedTiles.length; ++i) {\n var renderedTile = renderedTiles[i];\n if (defined(renderedTile.data.vertexArray)) {\n traversalQueue.enqueue(renderedTiles[i]);\n }\n }\n\n var tile = traversalQueue.dequeue();\n\n while (tile !== undefined) {\n var tileToWest = tile.findTileToWest(levelZeroTiles);\n var tileToSouth = tile.findTileToSouth(levelZeroTiles);\n var tileToEast = tile.findTileToEast(levelZeroTiles);\n var tileToNorth = tile.findTileToNorth(levelZeroTiles);\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToWest,\n lastSelectionFrameNumber,\n TileEdge.EAST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToSouth,\n lastSelectionFrameNumber,\n TileEdge.NORTH,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToEast,\n lastSelectionFrameNumber,\n TileEdge.WEST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToNorth,\n lastSelectionFrameNumber,\n TileEdge.SOUTH,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n\n var tileToNorthwest = tileToWest.findTileToNorth(levelZeroTiles);\n var tileToSouthwest = tileToWest.findTileToSouth(levelZeroTiles);\n var tileToNortheast = tileToEast.findTileToNorth(levelZeroTiles);\n var tileToSoutheast = tileToEast.findTileToSouth(levelZeroTiles);\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToNorthwest,\n lastSelectionFrameNumber,\n TileEdge.SOUTHEAST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToNortheast,\n lastSelectionFrameNumber,\n TileEdge.SOUTHWEST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToSouthwest,\n lastSelectionFrameNumber,\n TileEdge.NORTHEAST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n tile,\n tileToSoutheast,\n lastSelectionFrameNumber,\n TileEdge.NORTHWEST,\n false,\n traversalQueue,\n vertexArraysToDestroy\n );\n\n tile = traversalQueue.dequeue();\n }\n};\n\nfunction visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile,\n currentFrameNumber,\n tileEdge,\n downOnly,\n traversalQueue,\n vertexArraysToDestroy\n) {\n if (startTile === undefined) {\n // There are no tiles North or South of the poles.\n return;\n }\n\n var tile = startTile;\n while (\n tile &&\n (tile._lastSelectionResultFrame !== currentFrameNumber ||\n TileSelectionResult.wasKicked(tile._lastSelectionResult) ||\n TileSelectionResult.originalResult(tile._lastSelectionResult) ===\n TileSelectionResult.CULLED)\n ) {\n // This tile wasn't visited or it was visited and then kicked, so walk up to find the closest ancestor that was rendered.\n // We also walk up if the tile was culled, because if siblings were kicked an ancestor may have been rendered.\n if (downOnly) {\n return;\n }\n\n var parent = tile.parent;\n if (tileEdge >= TileEdge.NORTHWEST && parent !== undefined) {\n // When we're looking for a corner, verify that the parent tile is still relevant.\n // That is, the parent and child must share the corner in question.\n switch (tileEdge) {\n case TileEdge.NORTHWEST:\n tile = tile === parent.northwestChild ? parent : undefined;\n break;\n case TileEdge.NORTHEAST:\n tile = tile === parent.northeastChild ? parent : undefined;\n break;\n case TileEdge.SOUTHWEST:\n tile = tile === parent.southwestChild ? parent : undefined;\n break;\n case TileEdge.SOUTHEAST:\n tile = tile === parent.southeastChild ? parent : undefined;\n break;\n }\n } else {\n tile = parent;\n }\n }\n\n if (tile === undefined) {\n return;\n }\n\n if (tile._lastSelectionResult === TileSelectionResult.RENDERED) {\n if (defined(tile.data.vertexArray)) {\n // No further processing necessary for renderable tiles.\n return;\n }\n visitTile(\n tileProvider,\n frameState,\n sourceTile,\n tile,\n tileEdge,\n currentFrameNumber,\n traversalQueue,\n vertexArraysToDestroy\n );\n return;\n }\n\n if (\n TileSelectionResult.originalResult(startTile._lastSelectionResult) ===\n TileSelectionResult.CULLED\n ) {\n return;\n }\n\n // This tile was refined, so find rendered children, if any.\n // Visit the tiles in counter-clockwise order.\n switch (tileEdge) {\n case TileEdge.WEST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.EAST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.SOUTH:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.NORTH:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.NORTHWEST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.NORTHEAST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.northeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.SOUTHWEST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southwestChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n case TileEdge.SOUTHEAST:\n visitRenderedTiles(\n tileProvider,\n frameState,\n sourceTile,\n startTile.southeastChild,\n currentFrameNumber,\n tileEdge,\n true,\n traversalQueue,\n vertexArraysToDestroy\n );\n break;\n default:\n throw new DeveloperError(\"Invalid edge\");\n }\n}\n\nfunction visitTile(\n tileProvider,\n frameState,\n sourceTile,\n destinationTile,\n tileEdge,\n frameNumber,\n traversalQueue,\n vertexArraysToDestroy\n) {\n var destinationSurfaceTile = destinationTile.data;\n\n if (destinationSurfaceTile.fill === undefined) {\n destinationSurfaceTile.fill = new TerrainFillMesh(destinationTile);\n } else if (destinationSurfaceTile.fill.visitedFrame === frameNumber) {\n // Don't propagate edges to tiles that have already been visited this frame.\n return;\n }\n\n if (destinationSurfaceTile.fill.enqueuedFrame !== frameNumber) {\n // First time visiting this tile this frame, add it to the traversal queue.\n destinationSurfaceTile.fill.enqueuedFrame = frameNumber;\n destinationSurfaceTile.fill.changedThisFrame = false;\n traversalQueue.enqueue(destinationTile);\n }\n\n propagateEdge(\n tileProvider,\n frameState,\n sourceTile,\n destinationTile,\n tileEdge,\n vertexArraysToDestroy\n );\n}\n\nfunction propagateEdge(\n tileProvider,\n frameState,\n sourceTile,\n destinationTile,\n tileEdge,\n vertexArraysToDestroy\n) {\n var destinationFill = destinationTile.data.fill;\n\n var sourceMesh;\n var sourceFill = sourceTile.data.fill;\n if (defined(sourceFill)) {\n sourceFill.visitedFrame = frameState.frameNumber;\n\n // Source is a fill, create/update it if necessary.\n if (sourceFill.changedThisFrame) {\n createFillMesh(\n tileProvider,\n frameState,\n sourceTile,\n vertexArraysToDestroy\n );\n sourceFill.changedThisFrame = false;\n }\n sourceMesh = sourceTile.data.fill.mesh;\n } else {\n sourceMesh = sourceTile.data.mesh;\n }\n\n var edgeMeshes;\n var edgeTiles;\n\n switch (tileEdge) {\n case TileEdge.WEST:\n edgeMeshes = destinationFill.westMeshes;\n edgeTiles = destinationFill.westTiles;\n break;\n case TileEdge.SOUTH:\n edgeMeshes = destinationFill.southMeshes;\n edgeTiles = destinationFill.southTiles;\n break;\n case TileEdge.EAST:\n edgeMeshes = destinationFill.eastMeshes;\n edgeTiles = destinationFill.eastTiles;\n break;\n case TileEdge.NORTH:\n edgeMeshes = destinationFill.northMeshes;\n edgeTiles = destinationFill.northTiles;\n break;\n // Corners are simpler.\n case TileEdge.NORTHWEST:\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame ||\n destinationFill.northwestMesh !== sourceMesh;\n destinationFill.northwestMesh = sourceMesh;\n destinationFill.northwestTile = sourceTile;\n return;\n case TileEdge.NORTHEAST:\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame ||\n destinationFill.northeastMesh !== sourceMesh;\n destinationFill.northeastMesh = sourceMesh;\n destinationFill.northeastTile = sourceTile;\n return;\n case TileEdge.SOUTHWEST:\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame ||\n destinationFill.southwestMesh !== sourceMesh;\n destinationFill.southwestMesh = sourceMesh;\n destinationFill.southwestTile = sourceTile;\n return;\n case TileEdge.SOUTHEAST:\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame ||\n destinationFill.southeastMesh !== sourceMesh;\n destinationFill.southeastMesh = sourceMesh;\n destinationFill.southeastTile = sourceTile;\n return;\n }\n\n if (sourceTile.level <= destinationTile.level) {\n // Source edge completely spans the destination edge.\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame ||\n edgeMeshes[0] !== sourceMesh ||\n edgeMeshes.length !== 1;\n edgeMeshes[0] = sourceMesh;\n edgeTiles[0] = sourceTile;\n edgeMeshes.length = 1;\n edgeTiles.length = 1;\n return;\n }\n\n // Source edge is a subset of the destination edge.\n // Figure out the range of meshes we're replacing.\n var startIndex, endIndex, existingTile, existingRectangle;\n var sourceRectangle = sourceTile.rectangle;\n\n var epsilon;\n var destinationRectangle = destinationTile.rectangle;\n\n switch (tileEdge) {\n case TileEdge.WEST:\n epsilon =\n (destinationRectangle.north - destinationRectangle.south) *\n CesiumMath.EPSILON5;\n\n for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n existingTile = edgeTiles[startIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.greaterThan(\n sourceRectangle.north,\n existingRectangle.south,\n epsilon\n )\n ) {\n break;\n }\n }\n for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n existingTile = edgeTiles[endIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.greaterThanOrEquals(\n sourceRectangle.south,\n existingRectangle.north,\n epsilon\n )\n ) {\n break;\n }\n }\n break;\n case TileEdge.SOUTH:\n epsilon =\n (destinationRectangle.east - destinationRectangle.west) *\n CesiumMath.EPSILON5;\n\n for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n existingTile = edgeTiles[startIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.lessThan(\n sourceRectangle.west,\n existingRectangle.east,\n epsilon\n )\n ) {\n break;\n }\n }\n for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n existingTile = edgeTiles[endIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.lessThanOrEquals(\n sourceRectangle.east,\n existingRectangle.west,\n epsilon\n )\n ) {\n break;\n }\n }\n break;\n case TileEdge.EAST:\n epsilon =\n (destinationRectangle.north - destinationRectangle.south) *\n CesiumMath.EPSILON5;\n\n for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n existingTile = edgeTiles[startIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.lessThan(\n sourceRectangle.south,\n existingRectangle.north,\n epsilon\n )\n ) {\n break;\n }\n }\n for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n existingTile = edgeTiles[endIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.lessThanOrEquals(\n sourceRectangle.north,\n existingRectangle.south,\n epsilon\n )\n ) {\n break;\n }\n }\n break;\n case TileEdge.NORTH:\n epsilon =\n (destinationRectangle.east - destinationRectangle.west) *\n CesiumMath.EPSILON5;\n\n for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n existingTile = edgeTiles[startIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.greaterThan(\n sourceRectangle.east,\n existingRectangle.west,\n epsilon\n )\n ) {\n break;\n }\n }\n for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n existingTile = edgeTiles[endIndex];\n existingRectangle = existingTile.rectangle;\n if (\n CesiumMath.greaterThanOrEquals(\n sourceRectangle.west,\n existingRectangle.east,\n epsilon\n )\n ) {\n break;\n }\n }\n break;\n }\n\n if (endIndex - startIndex === 1) {\n destinationFill.changedThisFrame =\n destinationFill.changedThisFrame || edgeMeshes[startIndex] !== sourceMesh;\n edgeMeshes[startIndex] = sourceMesh;\n edgeTiles[startIndex] = sourceTile;\n } else {\n destinationFill.changedThisFrame = true;\n edgeMeshes.splice(startIndex, endIndex - startIndex, sourceMesh);\n edgeTiles.splice(startIndex, endIndex - startIndex, sourceTile);\n }\n}\n\nvar cartographicScratch = new Cartographic();\nvar centerCartographicScratch = new Cartographic();\nvar cartesianScratch = new Cartesian3();\nvar normalScratch = new Cartesian3();\nvar octEncodedNormalScratch = new Cartesian2();\nvar uvScratch2 = new Cartesian2();\nvar uvScratch = new Cartesian2();\n\nfunction HeightAndNormal() {\n this.height = 0.0;\n this.encodedNormal = new Cartesian2();\n}\n\nfunction fillMissingCorner(\n fill,\n ellipsoid,\n u,\n v,\n corner,\n adjacentCorner1,\n adjacentCorner2,\n oppositeCorner,\n vertex\n) {\n if (defined(corner)) {\n return corner;\n }\n\n var height;\n\n if (defined(adjacentCorner1) && defined(adjacentCorner2)) {\n height = (adjacentCorner1.height + adjacentCorner2.height) * 0.5;\n } else if (defined(adjacentCorner1)) {\n height = adjacentCorner1.height;\n } else if (defined(adjacentCorner2)) {\n height = adjacentCorner2.height;\n } else if (defined(oppositeCorner)) {\n height = oppositeCorner.height;\n } else {\n var surfaceTile = fill.tile.data;\n var tileBoundingRegion = surfaceTile.tileBoundingRegion;\n var minimumHeight = 0.0;\n var maximumHeight = 0.0;\n if (defined(tileBoundingRegion)) {\n minimumHeight = tileBoundingRegion.minimumHeight;\n maximumHeight = tileBoundingRegion.maximumHeight;\n }\n height = (minimumHeight + maximumHeight) * 0.5;\n }\n\n getVertexWithHeightAtCorner(fill, ellipsoid, u, v, height, vertex);\n return vertex;\n}\n\nvar heightRangeScratch = {\n minimumHeight: 0.0,\n maximumHeight: 0.0,\n};\n\nvar swVertexScratch = new HeightAndNormal();\nvar seVertexScratch = new HeightAndNormal();\nvar nwVertexScratch = new HeightAndNormal();\nvar neVertexScratch = new HeightAndNormal();\nvar heightmapBuffer =\n typeof Uint8Array !== \"undefined\" ? new Uint8Array(9 * 9) : undefined;\n\nfunction createFillMesh(tileProvider, frameState, tile, vertexArraysToDestroy) {\n GlobeSurfaceTile.initialize(\n tile,\n tileProvider.terrainProvider,\n tileProvider._imageryLayers\n );\n\n var surfaceTile = tile.data;\n var fill = surfaceTile.fill;\n var rectangle = tile.rectangle;\n\n var ellipsoid = tile.tilingScheme.ellipsoid;\n\n var nwCorner = getCorner(\n fill,\n ellipsoid,\n 0.0,\n 1.0,\n fill.northwestTile,\n fill.northwestMesh,\n fill.northTiles,\n fill.northMeshes,\n fill.westTiles,\n fill.westMeshes,\n nwVertexScratch\n );\n var swCorner = getCorner(\n fill,\n ellipsoid,\n 0.0,\n 0.0,\n fill.southwestTile,\n fill.southwestMesh,\n fill.westTiles,\n fill.westMeshes,\n fill.southTiles,\n fill.southMeshes,\n swVertexScratch\n );\n var seCorner = getCorner(\n fill,\n ellipsoid,\n 1.0,\n 0.0,\n fill.southeastTile,\n fill.southeastMesh,\n fill.southTiles,\n fill.southMeshes,\n fill.eastTiles,\n fill.eastMeshes,\n seVertexScratch\n );\n var neCorner = getCorner(\n fill,\n ellipsoid,\n 1.0,\n 1.0,\n fill.northeastTile,\n fill.northeastMesh,\n fill.eastTiles,\n fill.eastMeshes,\n fill.northTiles,\n fill.northMeshes,\n neVertexScratch\n );\n\n nwCorner = fillMissingCorner(\n fill,\n ellipsoid,\n 0.0,\n 1.0,\n nwCorner,\n swCorner,\n neCorner,\n seCorner,\n nwVertexScratch\n );\n swCorner = fillMissingCorner(\n fill,\n ellipsoid,\n 0.0,\n 0.0,\n swCorner,\n nwCorner,\n seCorner,\n neCorner,\n swVertexScratch\n );\n seCorner = fillMissingCorner(\n fill,\n ellipsoid,\n 1.0,\n 1.0,\n seCorner,\n swCorner,\n neCorner,\n nwCorner,\n seVertexScratch\n );\n neCorner = fillMissingCorner(\n fill,\n ellipsoid,\n 1.0,\n 1.0,\n neCorner,\n seCorner,\n nwCorner,\n swCorner,\n neVertexScratch\n );\n\n var southwestHeight = swCorner.height;\n var southeastHeight = seCorner.height;\n var northwestHeight = nwCorner.height;\n var northeastHeight = neCorner.height;\n\n var minimumHeight = Math.min(\n southwestHeight,\n southeastHeight,\n northwestHeight,\n northeastHeight\n );\n var maximumHeight = Math.max(\n southwestHeight,\n southeastHeight,\n northwestHeight,\n northeastHeight\n );\n\n var middleHeight = (minimumHeight + maximumHeight) * 0.5;\n\n var i;\n var len;\n\n // For low-detail tiles, our usual fill tile approach will create tiles that\n // look really blocky because they don't have enough vertices to account for the\n // Earth's curvature. But the height range will also typically be well within\n // the allowed geometric error for those levels. So fill such tiles with a\n // constant-height heightmap.\n var geometricError = tileProvider.getLevelMaximumGeometricError(tile.level);\n var minCutThroughRadius = ellipsoid.maximumRadius - geometricError;\n var maxTileWidth =\n Math.acos(minCutThroughRadius / ellipsoid.maximumRadius) * 4.0;\n\n // When the tile width is greater than maxTileWidth as computed above, the error\n // of a normal fill tile from globe curvature alone will exceed the allowed geometric\n // error. Terrain won't change that much. However, we can allow more error than that.\n // A little blockiness during load is acceptable. For the WGS84 ellipsoid and\n // standard geometric error setup, the value here will have us use a heightmap\n // at levels 1, 2, and 3.\n maxTileWidth *= 1.5;\n\n if (\n rectangle.width > maxTileWidth &&\n maximumHeight - minimumHeight <= geometricError\n ) {\n var terrainData = new HeightmapTerrainData({\n width: 9,\n height: 9,\n buffer: heightmapBuffer,\n structure: {\n // Use the maximum as the constant height so that this tile's skirt\n // covers any cracks with adjacent tiles.\n heightOffset: maximumHeight,\n },\n });\n fill.mesh = terrainData._createMeshSync(\n tile.tilingScheme,\n tile.x,\n tile.y,\n tile.level,\n 1.0\n );\n } else {\n var encoding = new TerrainEncoding(\n undefined,\n undefined,\n undefined,\n undefined,\n true,\n true\n );\n\n var centerCartographic = centerCartographicScratch;\n centerCartographic.longitude = (rectangle.east + rectangle.west) * 0.5;\n centerCartographic.latitude = (rectangle.north + rectangle.south) * 0.5;\n centerCartographic.height = middleHeight;\n encoding.center = ellipsoid.cartographicToCartesian(\n centerCartographic,\n encoding.center\n );\n\n // At _most_, we have vertices for the 4 corners, plus 1 center, plus every adjacent edge vertex.\n // In reality there will be less most of the time, but close enough; better\n // to overestimate than to re-allocate/copy/traverse the vertices twice.\n // Also, we'll often be able to squeeze the index data into the extra space in the buffer.\n var maxVertexCount = 5;\n var meshes;\n\n meshes = fill.westMeshes;\n for (i = 0, len = meshes.length; i < len; ++i) {\n maxVertexCount += meshes[i].eastIndicesNorthToSouth.length;\n }\n\n meshes = fill.southMeshes;\n for (i = 0, len = meshes.length; i < len; ++i) {\n maxVertexCount += meshes[i].northIndicesWestToEast.length;\n }\n\n meshes = fill.eastMeshes;\n for (i = 0, len = meshes.length; i < len; ++i) {\n maxVertexCount += meshes[i].westIndicesSouthToNorth.length;\n }\n\n meshes = fill.northMeshes;\n for (i = 0, len = meshes.length; i < len; ++i) {\n maxVertexCount += meshes[i].southIndicesEastToWest.length;\n }\n\n var heightRange = heightRangeScratch;\n heightRange.minimumHeight = minimumHeight;\n heightRange.maximumHeight = maximumHeight;\n\n var stride = encoding.getStride();\n var typedArray = new Float32Array(maxVertexCount * stride);\n\n var nextIndex = 0;\n var northwestIndex = nextIndex;\n nextIndex = addVertexWithComputedPosition(\n ellipsoid,\n rectangle,\n encoding,\n typedArray,\n nextIndex,\n 0.0,\n 1.0,\n nwCorner.height,\n nwCorner.encodedNormal,\n 1.0,\n heightRange\n );\n nextIndex = addEdge(\n fill,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n fill.westTiles,\n fill.westMeshes,\n TileEdge.EAST,\n heightRange\n );\n var southwestIndex = nextIndex;\n nextIndex = addVertexWithComputedPosition(\n ellipsoid,\n rectangle,\n encoding,\n typedArray,\n nextIndex,\n 0.0,\n 0.0,\n swCorner.height,\n swCorner.encodedNormal,\n 0.0,\n heightRange\n );\n nextIndex = addEdge(\n fill,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n fill.southTiles,\n fill.southMeshes,\n TileEdge.NORTH,\n heightRange\n );\n var southeastIndex = nextIndex;\n nextIndex = addVertexWithComputedPosition(\n ellipsoid,\n rectangle,\n encoding,\n typedArray,\n nextIndex,\n 1.0,\n 0.0,\n seCorner.height,\n seCorner.encodedNormal,\n 0.0,\n heightRange\n );\n nextIndex = addEdge(\n fill,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n fill.eastTiles,\n fill.eastMeshes,\n TileEdge.WEST,\n heightRange\n );\n var northeastIndex = nextIndex;\n nextIndex = addVertexWithComputedPosition(\n ellipsoid,\n rectangle,\n encoding,\n typedArray,\n nextIndex,\n 1.0,\n 1.0,\n neCorner.height,\n neCorner.encodedNormal,\n 1.0,\n heightRange\n );\n nextIndex = addEdge(\n fill,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n fill.northTiles,\n fill.northMeshes,\n TileEdge.SOUTH,\n heightRange\n );\n\n minimumHeight = heightRange.minimumHeight;\n maximumHeight = heightRange.maximumHeight;\n\n var obb = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n tile.tilingScheme.ellipsoid\n );\n\n // Add a single vertex at the center of the tile.\n var southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n rectangle.south\n );\n var oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(rectangle.north) -\n southMercatorY);\n var centerWebMercatorT =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n centerCartographic.latitude\n ) -\n southMercatorY) *\n oneOverMercatorHeight;\n\n ellipsoid.geodeticSurfaceNormalCartographic(\n cartographicScratch,\n normalScratch\n );\n var centerEncodedNormal = AttributeCompression.octEncode(\n normalScratch,\n octEncodedNormalScratch\n );\n\n var centerIndex = nextIndex;\n encoding.encode(\n typedArray,\n nextIndex * stride,\n obb.center,\n Cartesian2.fromElements(0.5, 0.5, uvScratch),\n middleHeight,\n centerEncodedNormal,\n centerWebMercatorT\n );\n ++nextIndex;\n\n var vertexCount = nextIndex;\n\n var bytesPerIndex = vertexCount < 256 ? 1 : 2;\n var indexCount = (vertexCount - 1) * 3; // one triangle per edge vertex\n var indexDataBytes = indexCount * bytesPerIndex;\n var availableBytesInBuffer =\n (typedArray.length - vertexCount * stride) *\n Float32Array.BYTES_PER_ELEMENT;\n\n var indices;\n if (availableBytesInBuffer >= indexDataBytes) {\n // Store the index data in the same buffer as the vertex data.\n var startIndex = vertexCount * stride * Float32Array.BYTES_PER_ELEMENT;\n indices =\n vertexCount < 256\n ? new Uint8Array(typedArray.buffer, startIndex, indexCount)\n : new Uint16Array(typedArray.buffer, startIndex, indexCount);\n } else {\n // Allocate a new buffer for the index data.\n indices =\n vertexCount < 256\n ? new Uint8Array(indexCount)\n : new Uint16Array(indexCount);\n }\n\n typedArray = new Float32Array(typedArray.buffer, 0, vertexCount * stride);\n\n var indexOut = 0;\n for (i = 0; i < vertexCount - 2; ++i) {\n indices[indexOut++] = centerIndex;\n indices[indexOut++] = i;\n indices[indexOut++] = i + 1;\n }\n\n indices[indexOut++] = centerIndex;\n indices[indexOut++] = i;\n indices[indexOut++] = 0;\n\n var westIndicesSouthToNorth = [];\n for (i = southwestIndex; i >= northwestIndex; --i) {\n westIndicesSouthToNorth.push(i);\n }\n\n var southIndicesEastToWest = [];\n for (i = southeastIndex; i >= southwestIndex; --i) {\n southIndicesEastToWest.push(i);\n }\n\n var eastIndicesNorthToSouth = [];\n for (i = northeastIndex; i >= southeastIndex; --i) {\n eastIndicesNorthToSouth.push(i);\n }\n\n var northIndicesWestToEast = [];\n northIndicesWestToEast.push(0);\n for (i = centerIndex - 1; i >= northeastIndex; --i) {\n northIndicesWestToEast.push(i);\n }\n\n fill.mesh = new TerrainMesh(\n encoding.center,\n typedArray,\n indices,\n indexCount,\n vertexCount,\n minimumHeight,\n maximumHeight,\n BoundingSphere.fromOrientedBoundingBox(obb),\n computeOccludeePoint(\n tileProvider,\n obb.center,\n rectangle,\n minimumHeight,\n maximumHeight\n ),\n encoding.getStride(),\n obb,\n encoding,\n frameState.terrainExaggeration,\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast\n );\n }\n\n var context = frameState.context;\n\n if (defined(fill.vertexArray)) {\n if (defined(vertexArraysToDestroy)) {\n vertexArraysToDestroy.push(fill.vertexArray);\n } else {\n GlobeSurfaceTile._freeVertexArray(fill.vertexArray);\n }\n }\n\n fill.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n context,\n fill.mesh\n );\n surfaceTile.processImagery(\n tile,\n tileProvider.terrainProvider,\n frameState,\n true\n );\n\n var oldTexture = fill.waterMaskTexture;\n fill.waterMaskTexture = undefined;\n\n if (tileProvider.terrainProvider.hasWaterMask) {\n var waterSourceTile = surfaceTile._findAncestorTileWithTerrainData(tile);\n if (\n defined(waterSourceTile) &&\n defined(waterSourceTile.data.waterMaskTexture)\n ) {\n fill.waterMaskTexture = waterSourceTile.data.waterMaskTexture;\n ++fill.waterMaskTexture.referenceCount;\n surfaceTile._computeWaterMaskTranslationAndScale(\n tile,\n waterSourceTile,\n fill.waterMaskTranslationAndScale\n );\n }\n }\n\n if (defined(oldTexture)) {\n --oldTexture.referenceCount;\n if (oldTexture.referenceCount === 0) {\n oldTexture.destroy();\n }\n }\n}\n\nfunction addVertexWithComputedPosition(\n ellipsoid,\n rectangle,\n encoding,\n buffer,\n index,\n u,\n v,\n height,\n encodedNormal,\n webMercatorT,\n heightRange\n) {\n var cartographic = cartographicScratch;\n cartographic.longitude = CesiumMath.lerp(rectangle.west, rectangle.east, u);\n cartographic.latitude = CesiumMath.lerp(rectangle.south, rectangle.north, v);\n cartographic.height = height;\n var position = ellipsoid.cartographicToCartesian(\n cartographic,\n cartesianScratch\n );\n\n var uv = uvScratch2;\n uv.x = u;\n uv.y = v;\n\n encoding.encode(\n buffer,\n index * encoding.getStride(),\n position,\n uv,\n height,\n encodedNormal,\n webMercatorT\n );\n\n heightRange.minimumHeight = Math.min(heightRange.minimumHeight, height);\n heightRange.maximumHeight = Math.max(heightRange.maximumHeight, height);\n\n return index + 1;\n}\n\nvar sourceRectangleScratch = new Rectangle();\n\nfunction transformTextureCoordinates(\n sourceTile,\n targetTile,\n coordinates,\n result\n) {\n var sourceRectangle = sourceTile.rectangle;\n var targetRectangle = targetTile.rectangle;\n\n // Handle transforming across the anti-meridian.\n if (\n targetTile.x === 0 &&\n coordinates.x === 1.0 &&\n sourceTile.x ===\n sourceTile.tilingScheme.getNumberOfXTilesAtLevel(sourceTile.level) - 1\n ) {\n sourceRectangle = Rectangle.clone(\n sourceTile.rectangle,\n sourceRectangleScratch\n );\n sourceRectangle.west -= CesiumMath.TWO_PI;\n sourceRectangle.east -= CesiumMath.TWO_PI;\n } else if (\n sourceTile.x === 0 &&\n coordinates.x === 0.0 &&\n targetTile.x ===\n targetTile.tilingScheme.getNumberOfXTilesAtLevel(targetTile.level) - 1\n ) {\n sourceRectangle = Rectangle.clone(\n sourceTile.rectangle,\n sourceRectangleScratch\n );\n sourceRectangle.west += CesiumMath.TWO_PI;\n sourceRectangle.east += CesiumMath.TWO_PI;\n }\n\n var sourceWidth = sourceRectangle.east - sourceRectangle.west;\n var umin = (targetRectangle.west - sourceRectangle.west) / sourceWidth;\n var umax = (targetRectangle.east - sourceRectangle.west) / sourceWidth;\n\n var sourceHeight = sourceRectangle.north - sourceRectangle.south;\n var vmin = (targetRectangle.south - sourceRectangle.south) / sourceHeight;\n var vmax = (targetRectangle.north - sourceRectangle.south) / sourceHeight;\n\n var u = (coordinates.x - umin) / (umax - umin);\n var v = (coordinates.y - vmin) / (vmax - vmin);\n\n // Ensure that coordinates very near the corners are at the corners.\n if (Math.abs(u) < Math.EPSILON5) {\n u = 0.0;\n } else if (Math.abs(u - 1.0) < Math.EPSILON5) {\n u = 1.0;\n }\n\n if (Math.abs(v) < Math.EPSILON5) {\n v = 0.0;\n } else if (Math.abs(v - 1.0) < Math.EPSILON5) {\n v = 1.0;\n }\n\n result.x = u;\n result.y = v;\n return result;\n}\n\nvar encodedNormalScratch = new Cartesian2();\n\nfunction getVertexFromTileAtCorner(sourceMesh, sourceIndex, u, v, vertex) {\n var sourceEncoding = sourceMesh.encoding;\n var sourceVertices = sourceMesh.vertices;\n\n vertex.height = sourceEncoding.decodeHeight(sourceVertices, sourceIndex);\n\n if (sourceEncoding.hasVertexNormals) {\n sourceEncoding.getOctEncodedNormal(\n sourceVertices,\n sourceIndex,\n vertex.encodedNormal\n );\n } else {\n var normal = vertex.encodedNormal;\n normal.x = 0.0;\n normal.y = 0.0;\n }\n}\n\nvar encodedNormalScratch2 = new Cartesian2();\nvar cartesianScratch2 = new Cartesian3();\n\nfunction getInterpolatedVertexAtCorner(\n ellipsoid,\n sourceTile,\n targetTile,\n sourceMesh,\n previousIndex,\n nextIndex,\n u,\n v,\n interpolateU,\n vertex\n) {\n var sourceEncoding = sourceMesh.encoding;\n var sourceVertices = sourceMesh.vertices;\n\n var previousUv = transformTextureCoordinates(\n sourceTile,\n targetTile,\n sourceEncoding.decodeTextureCoordinates(\n sourceVertices,\n previousIndex,\n uvScratch\n ),\n uvScratch\n );\n var nextUv = transformTextureCoordinates(\n sourceTile,\n targetTile,\n sourceEncoding.decodeTextureCoordinates(\n sourceVertices,\n nextIndex,\n uvScratch2\n ),\n uvScratch2\n );\n\n var ratio;\n if (interpolateU) {\n ratio = (u - previousUv.x) / (nextUv.x - previousUv.x);\n } else {\n ratio = (v - previousUv.y) / (nextUv.y - previousUv.y);\n }\n\n var height1 = sourceEncoding.decodeHeight(sourceVertices, previousIndex);\n var height2 = sourceEncoding.decodeHeight(sourceVertices, nextIndex);\n\n var targetRectangle = targetTile.rectangle;\n cartographicScratch.longitude = CesiumMath.lerp(\n targetRectangle.west,\n targetRectangle.east,\n u\n );\n cartographicScratch.latitude = CesiumMath.lerp(\n targetRectangle.south,\n targetRectangle.north,\n v\n );\n vertex.height = cartographicScratch.height = CesiumMath.lerp(\n height1,\n height2,\n ratio\n );\n\n var normal;\n if (sourceEncoding.hasVertexNormals) {\n var encodedNormal1 = sourceEncoding.getOctEncodedNormal(\n sourceVertices,\n previousIndex,\n encodedNormalScratch\n );\n var encodedNormal2 = sourceEncoding.getOctEncodedNormal(\n sourceVertices,\n nextIndex,\n encodedNormalScratch2\n );\n var normal1 = AttributeCompression.octDecode(\n encodedNormal1.x,\n encodedNormal1.y,\n cartesianScratch\n );\n var normal2 = AttributeCompression.octDecode(\n encodedNormal2.x,\n encodedNormal2.y,\n cartesianScratch2\n );\n normal = Cartesian3.lerp(normal1, normal2, ratio, cartesianScratch);\n Cartesian3.normalize(normal, normal);\n AttributeCompression.octEncode(normal, vertex.encodedNormal);\n } else {\n normal = ellipsoid.geodeticSurfaceNormalCartographic(\n cartographicScratch,\n cartesianScratch\n );\n AttributeCompression.octEncode(normal, vertex.encodedNormal);\n }\n}\n\nfunction getVertexWithHeightAtCorner(\n terrainFillMesh,\n ellipsoid,\n u,\n v,\n height,\n vertex\n) {\n vertex.height = height;\n var normal = ellipsoid.geodeticSurfaceNormalCartographic(\n cartographicScratch,\n cartesianScratch\n );\n AttributeCompression.octEncode(normal, vertex.encodedNormal);\n}\n\nfunction getCorner(\n terrainFillMesh,\n ellipsoid,\n u,\n v,\n cornerTile,\n cornerMesh,\n previousEdgeTiles,\n previousEdgeMeshes,\n nextEdgeTiles,\n nextEdgeMeshes,\n vertex\n) {\n var gotCorner =\n getCornerFromEdge(\n terrainFillMesh,\n ellipsoid,\n previousEdgeMeshes,\n previousEdgeTiles,\n false,\n u,\n v,\n vertex\n ) ||\n getCornerFromEdge(\n terrainFillMesh,\n ellipsoid,\n nextEdgeMeshes,\n nextEdgeTiles,\n true,\n u,\n v,\n vertex\n );\n if (gotCorner) {\n return vertex;\n }\n\n var vertexIndex;\n\n if (meshIsUsable(cornerTile, cornerMesh)) {\n // Corner mesh is valid, copy its corner vertex to this mesh.\n if (u === 0.0) {\n if (v === 0.0) {\n // southwest destination, northeast source\n vertexIndex = cornerMesh.eastIndicesNorthToSouth[0];\n } else {\n // northwest destination, southeast source\n vertexIndex = cornerMesh.southIndicesEastToWest[0];\n }\n } else if (v === 0.0) {\n // southeast destination, northwest source\n vertexIndex = cornerMesh.northIndicesWestToEast[0];\n } else {\n // northeast destination, southwest source\n vertexIndex = cornerMesh.westIndicesSouthToNorth[0];\n }\n getVertexFromTileAtCorner(cornerMesh, vertexIndex, u, v, vertex);\n return vertex;\n }\n\n // There is no precise vertex available from the corner or from either adjacent edge.\n // This is either because there are no tiles at all at the edges and corner, or\n // because the tiles at the edge are higher-level-number and don't extend all the way\n // to the corner.\n // Try to grab a height from the adjacent edges.\n var height;\n if (u === 0.0) {\n if (v === 0.0) {\n // southwest\n height = getClosestHeightToCorner(\n terrainFillMesh.westMeshes,\n terrainFillMesh.westTiles,\n TileEdge.EAST,\n terrainFillMesh.southMeshes,\n terrainFillMesh.southTiles,\n TileEdge.NORTH,\n u,\n v\n );\n } else {\n // northwest\n height = getClosestHeightToCorner(\n terrainFillMesh.northMeshes,\n terrainFillMesh.northTiles,\n TileEdge.SOUTH,\n terrainFillMesh.westMeshes,\n terrainFillMesh.westTiles,\n TileEdge.EAST,\n u,\n v\n );\n }\n } else if (v === 0.0) {\n // southeast\n height = getClosestHeightToCorner(\n terrainFillMesh.southMeshes,\n terrainFillMesh.southTiles,\n TileEdge.NORTH,\n terrainFillMesh.eastMeshes,\n terrainFillMesh.eastTiles,\n TileEdge.WEST,\n u,\n v\n );\n } else {\n // northeast\n height = getClosestHeightToCorner(\n terrainFillMesh.eastMeshes,\n terrainFillMesh.eastTiles,\n TileEdge.WEST,\n terrainFillMesh.northMeshes,\n terrainFillMesh.northTiles,\n TileEdge.SOUTH,\n u,\n v\n );\n }\n\n if (defined(height)) {\n getVertexWithHeightAtCorner(\n terrainFillMesh,\n ellipsoid,\n u,\n v,\n height,\n vertex\n );\n return vertex;\n }\n\n // No heights available that are closer than the adjacent corners.\n return undefined;\n}\n\nfunction getClosestHeightToCorner(\n previousMeshes,\n previousTiles,\n previousEdge,\n nextMeshes,\n nextTiles,\n nextEdge,\n u,\n v\n) {\n var height1 = getNearestHeightOnEdge(\n previousMeshes,\n previousTiles,\n false,\n previousEdge,\n u,\n v\n );\n var height2 = getNearestHeightOnEdge(\n nextMeshes,\n nextTiles,\n true,\n nextEdge,\n u,\n v\n );\n if (defined(height1) && defined(height2)) {\n // It would be slightly better to do a weighted average of the two heights\n // based on their distance from the corner, but it shouldn't matter much in practice.\n return (height1 + height2) * 0.5;\n } else if (defined(height1)) {\n return height1;\n }\n return height2;\n}\n\nfunction addEdge(\n terrainFillMesh,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n edgeTiles,\n edgeMeshes,\n tileEdge,\n heightRange\n) {\n for (var i = 0; i < edgeTiles.length; ++i) {\n nextIndex = addEdgeMesh(\n terrainFillMesh,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n edgeTiles[i],\n edgeMeshes[i],\n tileEdge,\n heightRange\n );\n }\n return nextIndex;\n}\n\nfunction addEdgeMesh(\n terrainFillMesh,\n ellipsoid,\n encoding,\n typedArray,\n nextIndex,\n edgeTile,\n edgeMesh,\n tileEdge,\n heightRange\n) {\n // Handle copying edges across the anti-meridian.\n var sourceRectangle = edgeTile.rectangle;\n if (tileEdge === TileEdge.EAST && terrainFillMesh.tile.x === 0) {\n sourceRectangle = Rectangle.clone(\n edgeTile.rectangle,\n sourceRectangleScratch\n );\n sourceRectangle.west -= CesiumMath.TWO_PI;\n sourceRectangle.east -= CesiumMath.TWO_PI;\n } else if (tileEdge === TileEdge.WEST && edgeTile.x === 0) {\n sourceRectangle = Rectangle.clone(\n edgeTile.rectangle,\n sourceRectangleScratch\n );\n sourceRectangle.west += CesiumMath.TWO_PI;\n sourceRectangle.east += CesiumMath.TWO_PI;\n }\n\n var targetRectangle = terrainFillMesh.tile.rectangle;\n\n var lastU;\n var lastV;\n\n if (nextIndex > 0) {\n encoding.decodeTextureCoordinates(typedArray, nextIndex - 1, uvScratch);\n lastU = uvScratch.x;\n lastV = uvScratch.y;\n }\n\n var indices;\n var compareU;\n\n switch (tileEdge) {\n case TileEdge.WEST:\n indices = edgeMesh.westIndicesSouthToNorth;\n compareU = false;\n break;\n case TileEdge.NORTH:\n indices = edgeMesh.northIndicesWestToEast;\n compareU = true;\n break;\n case TileEdge.EAST:\n indices = edgeMesh.eastIndicesNorthToSouth;\n compareU = false;\n break;\n case TileEdge.SOUTH:\n indices = edgeMesh.southIndicesEastToWest;\n compareU = true;\n break;\n }\n\n var sourceTile = edgeTile;\n var targetTile = terrainFillMesh.tile;\n var sourceEncoding = edgeMesh.encoding;\n var sourceVertices = edgeMesh.vertices;\n var targetStride = encoding.getStride();\n\n var southMercatorY;\n var oneOverMercatorHeight;\n if (sourceEncoding.hasWebMercatorT) {\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n targetRectangle.south\n );\n oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n targetRectangle.north\n ) -\n southMercatorY);\n }\n\n for (var i = 0; i < indices.length; ++i) {\n var index = indices[i];\n\n var uv = sourceEncoding.decodeTextureCoordinates(\n sourceVertices,\n index,\n uvScratch\n );\n transformTextureCoordinates(sourceTile, targetTile, uv, uv);\n var u = uv.x;\n var v = uv.y;\n var uOrV = compareU ? u : v;\n\n if (uOrV < 0.0 || uOrV > 1.0) {\n // Vertex is outside the target tile - skip it.\n continue;\n }\n\n if (\n Math.abs(u - lastU) < CesiumMath.EPSILON5 &&\n Math.abs(v - lastV) < CesiumMath.EPSILON5\n ) {\n // Vertex is very close to the previous one - skip it.\n continue;\n }\n\n var nearlyEdgeU =\n Math.abs(u) < CesiumMath.EPSILON5 ||\n Math.abs(u - 1.0) < CesiumMath.EPSILON5;\n var nearlyEdgeV =\n Math.abs(v) < CesiumMath.EPSILON5 ||\n Math.abs(v - 1.0) < CesiumMath.EPSILON5;\n\n if (nearlyEdgeU && nearlyEdgeV) {\n // Corner vertex - skip it.\n continue;\n }\n\n var position = sourceEncoding.decodePosition(\n sourceVertices,\n index,\n cartesianScratch\n );\n var height = sourceEncoding.decodeHeight(sourceVertices, index);\n\n var normal;\n if (sourceEncoding.hasVertexNormals) {\n normal = sourceEncoding.getOctEncodedNormal(\n sourceVertices,\n index,\n octEncodedNormalScratch\n );\n } else {\n normal = octEncodedNormalScratch;\n normal.x = 0.0;\n normal.y = 0.0;\n }\n\n var webMercatorT = v;\n if (sourceEncoding.hasWebMercatorT) {\n var latitude = CesiumMath.lerp(\n targetRectangle.south,\n targetRectangle.north,\n v\n );\n webMercatorT =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\n southMercatorY) *\n oneOverMercatorHeight;\n }\n\n encoding.encode(\n typedArray,\n nextIndex * targetStride,\n position,\n uv,\n height,\n normal,\n webMercatorT\n );\n\n heightRange.minimumHeight = Math.min(heightRange.minimumHeight, height);\n heightRange.maximumHeight = Math.max(heightRange.maximumHeight, height);\n\n ++nextIndex;\n }\n\n return nextIndex;\n}\n\nfunction getNearestHeightOnEdge(meshes, tiles, isNext, edge, u, v) {\n var meshStart;\n var meshEnd;\n var meshStep;\n\n if (isNext) {\n meshStart = 0;\n meshEnd = meshes.length;\n meshStep = 1;\n } else {\n meshStart = meshes.length - 1;\n meshEnd = -1;\n meshStep = -1;\n }\n\n for (\n var meshIndex = meshStart;\n meshIndex !== meshEnd;\n meshIndex += meshStep\n ) {\n var mesh = meshes[meshIndex];\n var tile = tiles[meshIndex];\n if (!meshIsUsable(tile, mesh)) {\n continue;\n }\n\n var indices;\n switch (edge) {\n case TileEdge.WEST:\n indices = mesh.westIndicesSouthToNorth;\n break;\n case TileEdge.SOUTH:\n indices = mesh.southIndicesEastToWest;\n break;\n case TileEdge.EAST:\n indices = mesh.eastIndicesNorthToSouth;\n break;\n case TileEdge.NORTH:\n indices = mesh.northIndicesWestToEast;\n break;\n }\n\n var index = indices[isNext ? 0 : indices.length - 1];\n if (defined(index)) {\n return mesh.encoding.decodeHeight(mesh.vertices, index);\n }\n }\n\n return undefined;\n}\n\nfunction meshIsUsable(tile, mesh) {\n return (\n defined(mesh) &&\n (!defined(tile.data.fill) || !tile.data.fill.changedThisFrame)\n );\n}\n\nfunction getCornerFromEdge(\n terrainFillMesh,\n ellipsoid,\n edgeMeshes,\n edgeTiles,\n isNext,\n u,\n v,\n vertex\n) {\n var edgeVertices;\n var compareU;\n var increasing;\n var vertexIndexIndex;\n var vertexIndex;\n var sourceTile = edgeTiles[isNext ? 0 : edgeMeshes.length - 1];\n var sourceMesh = edgeMeshes[isNext ? 0 : edgeMeshes.length - 1];\n\n if (meshIsUsable(sourceTile, sourceMesh)) {\n // Previous mesh is valid, but we don't know yet if it covers this corner.\n if (u === 0.0) {\n if (v === 0.0) {\n // southwest\n edgeVertices = isNext\n ? sourceMesh.northIndicesWestToEast\n : sourceMesh.eastIndicesNorthToSouth;\n compareU = isNext;\n increasing = isNext;\n } else {\n // northwest\n edgeVertices = isNext\n ? sourceMesh.eastIndicesNorthToSouth\n : sourceMesh.southIndicesEastToWest;\n compareU = !isNext;\n increasing = false;\n }\n } else if (v === 0.0) {\n // southeast\n edgeVertices = isNext\n ? sourceMesh.westIndicesSouthToNorth\n : sourceMesh.northIndicesWestToEast;\n compareU = !isNext;\n increasing = true;\n } else {\n // northeast\n edgeVertices = isNext\n ? sourceMesh.southIndicesEastToWest\n : sourceMesh.westIndicesSouthToNorth;\n compareU = isNext;\n increasing = !isNext;\n }\n\n if (edgeVertices.length > 0) {\n // The vertex we want will very often be the first/last vertex so check that first.\n vertexIndexIndex = isNext ? 0 : edgeVertices.length - 1;\n vertexIndex = edgeVertices[vertexIndexIndex];\n sourceMesh.encoding.decodeTextureCoordinates(\n sourceMesh.vertices,\n vertexIndex,\n uvScratch\n );\n var targetUv = transformTextureCoordinates(\n sourceTile,\n terrainFillMesh.tile,\n uvScratch,\n uvScratch\n );\n if (targetUv.x === u && targetUv.y === v) {\n // Vertex is good!\n getVertexFromTileAtCorner(sourceMesh, vertexIndex, u, v, vertex);\n return true;\n }\n\n // The last vertex is not the one we need, try binary searching for the right one.\n vertexIndexIndex = binarySearch(edgeVertices, compareU ? u : v, function (\n vertexIndex,\n textureCoordinate\n ) {\n sourceMesh.encoding.decodeTextureCoordinates(\n sourceMesh.vertices,\n vertexIndex,\n uvScratch\n );\n var targetUv = transformTextureCoordinates(\n sourceTile,\n terrainFillMesh.tile,\n uvScratch,\n uvScratch\n );\n if (increasing) {\n if (compareU) {\n return targetUv.x - u;\n }\n return targetUv.y - v;\n } else if (compareU) {\n return u - targetUv.x;\n }\n return v - targetUv.y;\n });\n\n if (vertexIndexIndex < 0) {\n vertexIndexIndex = ~vertexIndexIndex;\n\n if (vertexIndexIndex > 0 && vertexIndexIndex < edgeVertices.length) {\n // The corner falls between two vertices, so interpolate between them.\n getInterpolatedVertexAtCorner(\n ellipsoid,\n sourceTile,\n terrainFillMesh.tile,\n sourceMesh,\n edgeVertices[vertexIndexIndex - 1],\n edgeVertices[vertexIndexIndex],\n u,\n v,\n compareU,\n vertex\n );\n return true;\n }\n } else {\n // Found a vertex that fits in the corner exactly.\n getVertexFromTileAtCorner(\n sourceMesh,\n edgeVertices[vertexIndexIndex],\n u,\n v,\n vertex\n );\n return true;\n }\n }\n }\n\n return false;\n}\n\nvar cornerPositionsScratch = [\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n];\n\nfunction computeOccludeePoint(\n tileProvider,\n center,\n rectangle,\n minimumHeight,\n maximumHeight,\n result\n) {\n var ellipsoidalOccluder = tileProvider.quadtree._occluders.ellipsoid;\n var ellipsoid = ellipsoidalOccluder.ellipsoid;\n\n var cornerPositions = cornerPositionsScratch;\n Cartesian3.fromRadians(\n rectangle.west,\n rectangle.south,\n maximumHeight,\n ellipsoid,\n cornerPositions[0]\n );\n Cartesian3.fromRadians(\n rectangle.east,\n rectangle.south,\n maximumHeight,\n ellipsoid,\n cornerPositions[1]\n );\n Cartesian3.fromRadians(\n rectangle.west,\n rectangle.north,\n maximumHeight,\n ellipsoid,\n cornerPositions[2]\n );\n Cartesian3.fromRadians(\n rectangle.east,\n rectangle.north,\n maximumHeight,\n ellipsoid,\n cornerPositions[3]\n );\n\n return ellipsoidalOccluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n center,\n cornerPositions,\n minimumHeight,\n result\n );\n}\nexport default TerrainFillMesh;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport TerrainQuantization from \"../Core/TerrainQuantization.js\";\nimport Visibility from \"../Core/Visibility.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport GlobeSurfaceTile from \"./GlobeSurfaceTile.js\";\nimport ImageryLayer from \"./ImageryLayer.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport TerrainFillMesh from \"./TerrainFillMesh.js\";\nimport TerrainState from \"./TerrainState.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * Provides quadtree tiles representing the surface of the globe. This type is intended to be used\n * with {@link QuadtreePrimitive}.\n *\n * @alias GlobeSurfaceTileProvider\n * @constructor\n *\n * @param {TerrainProvider} options.terrainProvider The terrain provider that describes the surface geometry.\n * @param {ImageryLayerCollection} option.imageryLayers The collection of imagery layers describing the shading of the surface.\n * @param {GlobeSurfaceShaderSet} options.surfaceShaderSet The set of shaders used to render the surface.\n *\n * @private\n */\nfunction GlobeSurfaceTileProvider(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.terrainProvider)) {\n throw new DeveloperError(\"options.terrainProvider is required.\");\n } else if (!defined(options.imageryLayers)) {\n throw new DeveloperError(\"options.imageryLayers is required.\");\n } else if (!defined(options.surfaceShaderSet)) {\n throw new DeveloperError(\"options.surfaceShaderSet is required.\");\n }\n //>>includeEnd('debug');\n\n this.lightingFadeOutDistance = 6500000.0;\n this.lightingFadeInDistance = 9000000.0;\n this.hasWaterMask = false;\n this.oceanNormalMap = undefined;\n this.zoomedOutOceanSpecularIntensity = 0.5;\n this.enableLighting = false;\n this.dynamicAtmosphereLighting = false;\n this.dynamicAtmosphereLightingFromSun = false;\n this.showGroundAtmosphere = false;\n this.shadows = ShadowMode.RECEIVE_ONLY;\n\n /**\n * The color to use to highlight terrain fill tiles. If undefined, fill tiles are not\n * highlighted at all. The alpha value is used to alpha blend with the tile's\n * actual color. Because terrain fill tiles do not represent the actual terrain surface,\n * it may be useful in some applications to indicate visually that they are not to be trusted.\n * @type {Color}\n * @default undefined\n */\n this.fillHighlightColor = undefined;\n\n this.hueShift = 0.0;\n this.saturationShift = 0.0;\n this.brightnessShift = 0.0;\n\n this.showSkirts = true;\n this.backFaceCulling = true;\n this.undergroundColor = undefined;\n this.undergroundColorAlphaByDistance = undefined;\n\n this.materialUniformMap = undefined;\n this._materialUniformMap = undefined;\n\n this._quadtree = undefined;\n this._terrainProvider = options.terrainProvider;\n this._imageryLayers = options.imageryLayers;\n this._surfaceShaderSet = options.surfaceShaderSet;\n\n this._renderState = undefined;\n this._blendRenderState = undefined;\n this._disableCullingRenderState = undefined;\n this._disableCullingBlendRenderState = undefined;\n\n this._errorEvent = new Event();\n\n this._imageryLayers.layerAdded.addEventListener(\n GlobeSurfaceTileProvider.prototype._onLayerAdded,\n this\n );\n this._imageryLayers.layerRemoved.addEventListener(\n GlobeSurfaceTileProvider.prototype._onLayerRemoved,\n this\n );\n this._imageryLayers.layerMoved.addEventListener(\n GlobeSurfaceTileProvider.prototype._onLayerMoved,\n this\n );\n this._imageryLayers.layerShownOrHidden.addEventListener(\n GlobeSurfaceTileProvider.prototype._onLayerShownOrHidden,\n this\n );\n this._imageryLayersUpdatedEvent = new Event();\n\n this._layerOrderChanged = false;\n\n this._tilesToRenderByTextureCount = [];\n this._drawCommands = [];\n this._uniformMaps = [];\n this._usedDrawCommands = 0;\n\n this._vertexArraysToDestroy = [];\n\n this._debug = {\n wireframe: false,\n boundingSphereTile: undefined,\n };\n\n this._baseColor = undefined;\n this._firstPassInitialColor = undefined;\n this.baseColor = new Color(0.0, 0.0, 0.5, 1.0);\n\n /**\n * A property specifying a {@link ClippingPlaneCollection} used to selectively disable rendering on the outside of each plane.\n * @type {ClippingPlaneCollection}\n * @private\n */\n this._clippingPlanes = undefined;\n\n /**\n * A property specifying a {@link Rectangle} used to selectively limit terrain and imagery rendering.\n * @type {Rectangle}\n */\n this.cartographicLimitRectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n\n this._hasLoadedTilesThisFrame = false;\n this._hasFillTilesThisFrame = false;\n}\n\nObject.defineProperties(GlobeSurfaceTileProvider.prototype, {\n /**\n * Gets or sets the color of the globe when no imagery is available.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {Color}\n */\n baseColor: {\n get: function () {\n return this._baseColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n this._baseColor = value;\n this._firstPassInitialColor = Cartesian4.fromColor(\n value,\n this._firstPassInitialColor\n );\n },\n },\n /**\n * Gets or sets the {@link QuadtreePrimitive} for which this provider is\n * providing tiles. This property may be undefined if the provider is not yet associated\n * with a {@link QuadtreePrimitive}.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {QuadtreePrimitive}\n */\n quadtree: {\n get: function () {\n return this._quadtree;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value)) {\n throw new DeveloperError(\"value is required.\");\n }\n //>>includeEnd('debug');\n\n this._quadtree = value;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: function () {\n return (\n this._terrainProvider.ready &&\n (this._imageryLayers.length === 0 ||\n this._imageryLayers.get(0).imageryProvider.ready)\n );\n },\n },\n\n /**\n * Gets the tiling scheme used by the provider. This property should\n * not be accessed before {@link GlobeSurfaceTileProvider#ready} returns true.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {TilingScheme}\n */\n tilingScheme: {\n get: function () {\n return this._terrainProvider.tilingScheme;\n },\n },\n\n /**\n * Gets an event that is raised when the geometry provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets an event that is raised when an imagery layer is added, shown, hidden, moved, or removed.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {Event}\n */\n imageryLayersUpdatedEvent: {\n get: function () {\n return this._imageryLayersUpdatedEvent;\n },\n },\n\n /**\n * Gets or sets the terrain provider that describes the surface geometry.\n * @memberof GlobeSurfaceTileProvider.prototype\n * @type {TerrainProvider}\n */\n terrainProvider: {\n get: function () {\n return this._terrainProvider;\n },\n set: function (terrainProvider) {\n if (this._terrainProvider === terrainProvider) {\n return;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(terrainProvider)) {\n throw new DeveloperError(\"terrainProvider is required.\");\n }\n //>>includeEnd('debug');\n\n this._terrainProvider = terrainProvider;\n\n if (defined(this._quadtree)) {\n this._quadtree.invalidateAllTiles();\n }\n },\n },\n /**\n * The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset.\n *\n * @type {ClippingPlaneCollection}\n *\n * @private\n */\n clippingPlanes: {\n get: function () {\n return this._clippingPlanes;\n },\n set: function (value) {\n ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n },\n },\n});\n\nfunction sortTileImageryByLayerIndex(a, b) {\n var aImagery = a.loadingImagery;\n if (!defined(aImagery)) {\n aImagery = a.readyImagery;\n }\n\n var bImagery = b.loadingImagery;\n if (!defined(bImagery)) {\n bImagery = b.readyImagery;\n }\n\n return aImagery.imageryLayer._layerIndex - bImagery.imageryLayer._layerIndex;\n}\n\n/**\n * Make updates to the tile provider that are not involved in rendering. Called before the render update cycle.\n */\nGlobeSurfaceTileProvider.prototype.update = function (frameState) {\n // update collection: imagery indices, base layers, raise layer show/hide event\n this._imageryLayers._update();\n};\n\nfunction updateCredits(surface, frameState) {\n var creditDisplay = frameState.creditDisplay;\n if (\n surface._terrainProvider.ready &&\n defined(surface._terrainProvider.credit)\n ) {\n creditDisplay.addCredit(surface._terrainProvider.credit);\n }\n\n var imageryLayers = surface._imageryLayers;\n for (var i = 0, len = imageryLayers.length; i < len; ++i) {\n var imageryProvider = imageryLayers.get(i).imageryProvider;\n if (imageryProvider.ready && defined(imageryProvider.credit)) {\n creditDisplay.addCredit(imageryProvider.credit);\n }\n }\n}\n\n/**\n * Called at the beginning of each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.initialize = function (frameState) {\n // update each layer for texture reprojection.\n this._imageryLayers.queueReprojectionCommands(frameState);\n\n if (this._layerOrderChanged) {\n this._layerOrderChanged = false;\n\n // Sort the TileImagery instances in each tile by the layer index.\n this._quadtree.forEachLoadedTile(function (tile) {\n tile.data.imagery.sort(sortTileImageryByLayerIndex);\n });\n }\n\n // Add credits for terrain and imagery providers.\n updateCredits(this, frameState);\n\n var vertexArraysToDestroy = this._vertexArraysToDestroy;\n var length = vertexArraysToDestroy.length;\n for (var j = 0; j < length; ++j) {\n GlobeSurfaceTile._freeVertexArray(vertexArraysToDestroy[j]);\n }\n vertexArraysToDestroy.length = 0;\n};\n\n/**\n * Called at the beginning of the update cycle for each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * or any other functions.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.beginUpdate = function (frameState) {\n var tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;\n for (var i = 0, len = tilesToRenderByTextureCount.length; i < len; ++i) {\n var tiles = tilesToRenderByTextureCount[i];\n if (defined(tiles)) {\n tiles.length = 0;\n }\n }\n // update clipping planes\n var clippingPlanes = this._clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n clippingPlanes.update(frameState);\n }\n this._usedDrawCommands = 0;\n\n this._hasLoadedTilesThisFrame = false;\n this._hasFillTilesThisFrame = false;\n};\n\n/**\n * Called at the end of the update cycle for each render frame, after {@link QuadtreeTileProvider#showTileThisFrame}\n * and any other functions.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.endUpdate = function (frameState) {\n if (!defined(this._renderState)) {\n this._renderState = RenderState.fromCache({\n // Write color and depth\n cull: {\n enabled: true,\n },\n depthTest: {\n enabled: true,\n func: DepthFunction.LESS,\n },\n });\n\n this._blendRenderState = RenderState.fromCache({\n // Write color and depth\n cull: {\n enabled: true,\n },\n depthTest: {\n enabled: true,\n func: DepthFunction.LESS_OR_EQUAL,\n },\n blending: BlendingState.ALPHA_BLEND,\n });\n\n var rs = clone(this._renderState, true);\n rs.cull.enabled = false;\n this._disableCullingRenderState = RenderState.fromCache(rs);\n\n rs = clone(this._blendRenderState, true);\n rs.cull.enabled = false;\n this._disableCullingBlendRenderState = RenderState.fromCache(rs);\n }\n\n // If this frame has a mix of loaded and fill tiles, we need to propagate\n // loaded heights to the fill tiles.\n if (this._hasFillTilesThisFrame && this._hasLoadedTilesThisFrame) {\n TerrainFillMesh.updateFillTiles(\n this,\n this._quadtree._tilesToRender,\n frameState,\n this._vertexArraysToDestroy\n );\n }\n\n // Add the tile render commands to the command list, sorted by texture count.\n var tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;\n for (\n var textureCountIndex = 0,\n textureCountLength = tilesToRenderByTextureCount.length;\n textureCountIndex < textureCountLength;\n ++textureCountIndex\n ) {\n var tilesToRender = tilesToRenderByTextureCount[textureCountIndex];\n if (!defined(tilesToRender)) {\n continue;\n }\n\n for (\n var tileIndex = 0, tileLength = tilesToRender.length;\n tileIndex < tileLength;\n ++tileIndex\n ) {\n var tile = tilesToRender[tileIndex];\n var tileBoundingRegion = tile.data.tileBoundingRegion;\n addDrawCommandsForTile(this, tile, frameState);\n frameState.minimumTerrainHeight = Math.min(\n frameState.minimumTerrainHeight,\n tileBoundingRegion.minimumHeight\n );\n }\n }\n};\n\nfunction pushCommand(command, frameState) {\n var globeTranslucencyState = frameState.globeTranslucencyState;\n if (globeTranslucencyState.translucent) {\n var isBlendCommand = command.renderState.blending.enabled;\n globeTranslucencyState.pushDerivedCommands(\n command,\n isBlendCommand,\n frameState\n );\n } else {\n frameState.commandList.push(command);\n }\n}\n\n/**\n * Adds draw commands for tiles rendered in the previous frame for a pick pass.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.updateForPick = function (frameState) {\n // Add the tile pick commands from the tiles drawn last frame.\n var drawCommands = this._drawCommands;\n for (var i = 0, length = this._usedDrawCommands; i < length; ++i) {\n pushCommand(drawCommands[i], frameState);\n }\n};\n\n/**\n * Cancels any imagery re-projections in the queue.\n */\nGlobeSurfaceTileProvider.prototype.cancelReprojections = function () {\n this._imageryLayers.cancelReprojections();\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level, in meters. This function should not be\n * called before {@link GlobeSurfaceTileProvider#ready} returns true.\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error in meters.\n */\nGlobeSurfaceTileProvider.prototype.getLevelMaximumGeometricError = function (\n level\n) {\n return this._terrainProvider.getLevelMaximumGeometricError(level);\n};\n\n/**\n * Loads, or continues loading, a given tile. This function will continue to be called\n * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}. This function should\n * not be called before {@link GlobeSurfaceTileProvider#ready} returns true.\n *\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to load.\n *\n * @exception {DeveloperError} <code>loadTile</code> must not be called before the tile provider is ready.\n */\nGlobeSurfaceTileProvider.prototype.loadTile = function (frameState, tile) {\n // We don't want to load imagery until we're certain that the terrain tiles are actually visible.\n // So if our bounding volume isn't accurate because it came from another tile, load terrain only\n // initially. If we load some terrain and suddenly have a more accurate bounding volume and the\n // tile is _still_ visible, give the tile a chance to load imagery immediately rather than\n // waiting for next frame.\n\n var surfaceTile = tile.data;\n var terrainOnly = true;\n var terrainStateBefore;\n if (defined(surfaceTile)) {\n terrainOnly =\n surfaceTile.boundingVolumeSourceTile !== tile ||\n tile._lastSelectionResult === TileSelectionResult.CULLED_BUT_NEEDED;\n terrainStateBefore = surfaceTile.terrainState;\n }\n\n GlobeSurfaceTile.processStateMachine(\n tile,\n frameState,\n this.terrainProvider,\n this._imageryLayers,\n this._vertexArraysToDestroy,\n terrainOnly\n );\n\n surfaceTile = tile.data;\n if (terrainOnly && terrainStateBefore !== tile.data.terrainState) {\n // Terrain state changed. If:\n // a) The tile is visible, and\n // b) The bounding volume is accurate (updated as a side effect of computing visibility)\n // Then we'll load imagery, too.\n if (\n this.computeTileVisibility(tile, frameState, this.quadtree.occluders) &&\n surfaceTile.boundingVolumeSourceTile === tile\n ) {\n terrainOnly = false;\n GlobeSurfaceTile.processStateMachine(\n tile,\n frameState,\n this.terrainProvider,\n this._imageryLayers,\n this._vertexArraysToDestroy,\n terrainOnly\n );\n }\n }\n};\n\nvar boundingSphereScratch = new BoundingSphere();\nvar rectangleIntersectionScratch = new Rectangle();\nvar splitCartographicLimitRectangleScratch = new Rectangle();\nvar rectangleCenterScratch = new Cartographic();\n\n// cartographicLimitRectangle may span the IDL, but tiles never will.\nfunction clipRectangleAntimeridian(tileRectangle, cartographicLimitRectangle) {\n if (cartographicLimitRectangle.west < cartographicLimitRectangle.east) {\n return cartographicLimitRectangle;\n }\n var splitRectangle = Rectangle.clone(\n cartographicLimitRectangle,\n splitCartographicLimitRectangleScratch\n );\n var tileCenter = Rectangle.center(tileRectangle, rectangleCenterScratch);\n if (tileCenter.longitude > 0.0) {\n splitRectangle.east = CesiumMath.PI;\n } else {\n splitRectangle.west = -CesiumMath.PI;\n }\n return splitRectangle;\n}\n\nfunction isUndergroundVisible(tileProvider, frameState) {\n if (frameState.cameraUnderground) {\n return true;\n }\n\n if (frameState.globeTranslucencyState.translucent) {\n return true;\n }\n\n if (tileProvider.backFaceCulling) {\n return false;\n }\n\n var clippingPlanes = tileProvider._clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n return true;\n }\n\n if (\n !Rectangle.equals(\n tileProvider.cartographicLimitRectangle,\n Rectangle.MAX_VALUE\n )\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Determines the visibility of a given tile. The tile may be fully visible, partially visible, or not\n * visible at all. Tiles that are renderable and are at least partially visible will be shown by a call\n * to {@link GlobeSurfaceTileProvider#showTileThisFrame}.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information about the current frame.\n * @param {QuadtreeOccluders} occluders The objects that may occlude this tile.\n *\n * @returns {Visibility} The visibility of the tile.\n */\nGlobeSurfaceTileProvider.prototype.computeTileVisibility = function (\n tile,\n frameState,\n occluders\n) {\n var distance = this.computeDistanceToTile(tile, frameState);\n tile._distance = distance;\n\n var undergroundVisible = isUndergroundVisible(this, frameState);\n\n if (frameState.fog.enabled && !undergroundVisible) {\n if (CesiumMath.fog(distance, frameState.fog.density) >= 1.0) {\n // Tile is completely in fog so return that it is not visible.\n return Visibility.NONE;\n }\n }\n\n var surfaceTile = tile.data;\n var tileBoundingRegion = surfaceTile.tileBoundingRegion;\n\n if (surfaceTile.boundingVolumeSourceTile === undefined) {\n // We have no idea where this tile is, so let's just call it partially visible.\n return Visibility.PARTIAL;\n }\n\n var cullingVolume = frameState.cullingVolume;\n var boundingVolume = surfaceTile.orientedBoundingBox;\n\n if (!defined(boundingVolume) && defined(surfaceTile.renderedMesh)) {\n boundingVolume = surfaceTile.renderedMesh.boundingSphere3D;\n }\n\n // Check if the tile is outside the limit area in cartographic space\n surfaceTile.clippedByBoundaries = false;\n var clippedCartographicLimitRectangle = clipRectangleAntimeridian(\n tile.rectangle,\n this.cartographicLimitRectangle\n );\n var areaLimitIntersection = Rectangle.simpleIntersection(\n clippedCartographicLimitRectangle,\n tile.rectangle,\n rectangleIntersectionScratch\n );\n if (!defined(areaLimitIntersection)) {\n return Visibility.NONE;\n }\n if (!Rectangle.equals(areaLimitIntersection, tile.rectangle)) {\n surfaceTile.clippedByBoundaries = true;\n }\n\n if (frameState.mode !== SceneMode.SCENE3D) {\n boundingVolume = boundingSphereScratch;\n BoundingSphere.fromRectangleWithHeights2D(\n tile.rectangle,\n frameState.mapProjection,\n tileBoundingRegion.minimumHeight,\n tileBoundingRegion.maximumHeight,\n boundingVolume\n );\n Cartesian3.fromElements(\n boundingVolume.center.z,\n boundingVolume.center.x,\n boundingVolume.center.y,\n boundingVolume.center\n );\n\n if (\n frameState.mode === SceneMode.MORPHING &&\n defined(surfaceTile.renderedMesh)\n ) {\n boundingVolume = BoundingSphere.union(\n surfaceTile.renderedMesh.boundingSphere3D,\n boundingVolume,\n boundingVolume\n );\n }\n }\n\n if (!defined(boundingVolume)) {\n return Intersect.INTERSECTING;\n }\n\n var clippingPlanes = this._clippingPlanes;\n if (defined(clippingPlanes) && clippingPlanes.enabled) {\n var planeIntersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n boundingVolume\n );\n tile.isClipped = planeIntersection !== Intersect.INSIDE;\n if (planeIntersection === Intersect.OUTSIDE) {\n return Visibility.NONE;\n }\n }\n\n var intersection = cullingVolume.computeVisibility(boundingVolume);\n if (intersection === Intersect.OUTSIDE) {\n return Visibility.NONE;\n }\n\n var ortho3D =\n frameState.mode === SceneMode.SCENE3D &&\n frameState.camera.frustum instanceof OrthographicFrustum;\n if (\n frameState.mode === SceneMode.SCENE3D &&\n !ortho3D &&\n defined(occluders) &&\n !undergroundVisible\n ) {\n var occludeePointInScaledSpace = surfaceTile.occludeePointInScaledSpace;\n if (!defined(occludeePointInScaledSpace)) {\n return intersection;\n }\n\n if (\n occluders.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(\n occludeePointInScaledSpace,\n tileBoundingRegion.minimumHeight\n )\n ) {\n return intersection;\n }\n\n return Visibility.NONE;\n }\n\n return intersection;\n};\n\n/**\n * Determines if the given tile can be refined\n * @param {QuadtreeTile} tile The tile to check.\n * @returns {boolean} True if the tile can be refined, false if it cannot.\n */\nGlobeSurfaceTileProvider.prototype.canRefine = function (tile) {\n // Only allow refinement it we know whether or not the children of this tile exist.\n // For a tileset with `availability`, we'll always be able to refine.\n // We can ask for availability of _any_ child tile because we only need to confirm\n // that we get a yes or no answer, it doesn't matter what the answer is.\n if (defined(tile.data.terrainData)) {\n return true;\n }\n var childAvailable = this.terrainProvider.getTileDataAvailable(\n tile.x * 2,\n tile.y * 2,\n tile.level + 1\n );\n return childAvailable !== undefined;\n};\n\nvar readyImageryScratch = [];\nvar canRenderTraversalStack = [];\n\n/**\n * Determines if the given not-fully-loaded tile can be rendered without losing detail that\n * was present last frame as a result of rendering descendant tiles. This method will only be\n * called if this tile's descendants were rendered last frame. If the tile is fully loaded,\n * it is assumed that this method will return true and it will not be called.\n * @param {QuadtreeTile} tile The tile to check.\n * @returns {boolean} True if the tile can be rendered without losing detail.\n */\nGlobeSurfaceTileProvider.prototype.canRenderWithoutLosingDetail = function (\n tile,\n frameState\n) {\n var surfaceTile = tile.data;\n\n var readyImagery = readyImageryScratch;\n readyImagery.length = this._imageryLayers.length;\n\n var terrainReady = false;\n var initialImageryState = false;\n var imagery;\n\n if (defined(surfaceTile)) {\n // We can render even with non-ready terrain as long as all our rendered descendants\n // are missing terrain geometry too. i.e. if we rendered fills for more detailed tiles\n // last frame, it's ok to render a fill for this tile this frame.\n terrainReady = surfaceTile.terrainState === TerrainState.READY;\n\n // Initially assume all imagery layers are ready, unless imagery hasn't been initialized at all.\n initialImageryState = true;\n\n imagery = surfaceTile.imagery;\n }\n\n var i;\n var len;\n\n for (i = 0, len = readyImagery.length; i < len; ++i) {\n readyImagery[i] = initialImageryState;\n }\n\n if (defined(imagery)) {\n for (i = 0, len = imagery.length; i < len; ++i) {\n var tileImagery = imagery[i];\n var loadingImagery = tileImagery.loadingImagery;\n var isReady =\n !defined(loadingImagery) ||\n loadingImagery.state === ImageryState.FAILED ||\n loadingImagery.state === ImageryState.INVALID;\n var layerIndex = (tileImagery.loadingImagery || tileImagery.readyImagery)\n .imageryLayer._layerIndex;\n\n // For a layer to be ready, all tiles belonging to that layer must be ready.\n readyImagery[layerIndex] = isReady && readyImagery[layerIndex];\n }\n }\n\n var lastFrame = this.quadtree._lastSelectionFrameNumber;\n\n // Traverse the descendants looking for one with terrain or imagery that is not loaded on this tile.\n var stack = canRenderTraversalStack;\n stack.length = 0;\n stack.push(\n tile.southwestChild,\n tile.southeastChild,\n tile.northwestChild,\n tile.northeastChild\n );\n\n while (stack.length > 0) {\n var descendant = stack.pop();\n var lastFrameSelectionResult =\n descendant._lastSelectionResultFrame === lastFrame\n ? descendant._lastSelectionResult\n : TileSelectionResult.NONE;\n\n if (lastFrameSelectionResult === TileSelectionResult.RENDERED) {\n var descendantSurface = descendant.data;\n\n if (!defined(descendantSurface)) {\n // Descendant has no data, so it can't block rendering.\n continue;\n }\n\n if (\n !terrainReady &&\n descendant.data.terrainState === TerrainState.READY\n ) {\n // Rendered descendant has real terrain, but we don't. Rendering is blocked.\n return false;\n }\n\n var descendantImagery = descendant.data.imagery;\n for (i = 0, len = descendantImagery.length; i < len; ++i) {\n var descendantTileImagery = descendantImagery[i];\n var descendantLoadingImagery = descendantTileImagery.loadingImagery;\n var descendantIsReady =\n !defined(descendantLoadingImagery) ||\n descendantLoadingImagery.state === ImageryState.FAILED ||\n descendantLoadingImagery.state === ImageryState.INVALID;\n var descendantLayerIndex = (\n descendantTileImagery.loadingImagery ||\n descendantTileImagery.readyImagery\n ).imageryLayer._layerIndex;\n\n // If this imagery tile of a descendant is ready but the layer isn't ready in this tile,\n // then rendering is blocked.\n if (descendantIsReady && !readyImagery[descendantLayerIndex]) {\n return false;\n }\n }\n } else if (lastFrameSelectionResult === TileSelectionResult.REFINED) {\n stack.push(\n descendant.southwestChild,\n descendant.southeastChild,\n descendant.northwestChild,\n descendant.northeastChild\n );\n }\n }\n\n return true;\n};\n\nvar tileDirectionScratch = new Cartesian3();\n\n/**\n * Determines the priority for loading this tile. Lower priority values load sooner.\n * @param {QuadtreeTile} tile The tile.\n * @param {FrameState} frameState The frame state.\n * @returns {Number} The load priority value.\n */\nGlobeSurfaceTileProvider.prototype.computeTileLoadPriority = function (\n tile,\n frameState\n) {\n var surfaceTile = tile.data;\n if (surfaceTile === undefined) {\n return 0.0;\n }\n\n var obb = surfaceTile.orientedBoundingBox;\n if (obb === undefined) {\n return 0.0;\n }\n\n var cameraPosition = frameState.camera.positionWC;\n var cameraDirection = frameState.camera.directionWC;\n var tileDirection = Cartesian3.subtract(\n obb.center,\n cameraPosition,\n tileDirectionScratch\n );\n var magnitude = Cartesian3.magnitude(tileDirection);\n if (magnitude < CesiumMath.EPSILON5) {\n return 0.0;\n }\n Cartesian3.divideByScalar(tileDirection, magnitude, tileDirection);\n return (\n (1.0 - Cartesian3.dot(tileDirection, cameraDirection)) * tile._distance\n );\n};\n\nvar modifiedModelViewScratch = new Matrix4();\nvar modifiedModelViewProjectionScratch = new Matrix4();\nvar tileRectangleScratch = new Cartesian4();\nvar localizedCartographicLimitRectangleScratch = new Cartesian4();\nvar localizedTranslucencyRectangleScratch = new Cartesian4();\nvar rtcScratch = new Cartesian3();\nvar centerEyeScratch = new Cartesian3();\nvar southwestScratch = new Cartesian3();\nvar northeastScratch = new Cartesian3();\n\n/**\n * Shows a specified tile in this frame. The provider can cause the tile to be shown by adding\n * render commands to the commandList, or use any other method as appropriate. The tile is not\n * expected to be visible next frame as well, unless this method is called next frame, too.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n */\nGlobeSurfaceTileProvider.prototype.showTileThisFrame = function (\n tile,\n frameState\n) {\n var readyTextureCount = 0;\n var tileImageryCollection = tile.data.imagery;\n for (var i = 0, len = tileImageryCollection.length; i < len; ++i) {\n var tileImagery = tileImageryCollection[i];\n if (\n defined(tileImagery.readyImagery) &&\n tileImagery.readyImagery.imageryLayer.alpha !== 0.0\n ) {\n ++readyTextureCount;\n }\n }\n\n var tileSet = this._tilesToRenderByTextureCount[readyTextureCount];\n if (!defined(tileSet)) {\n tileSet = [];\n this._tilesToRenderByTextureCount[readyTextureCount] = tileSet;\n }\n\n tileSet.push(tile);\n\n var surfaceTile = tile.data;\n if (!defined(surfaceTile.vertexArray)) {\n this._hasFillTilesThisFrame = true;\n } else {\n this._hasLoadedTilesThisFrame = true;\n }\n\n var debug = this._debug;\n ++debug.tilesRendered;\n debug.texturesRendered += readyTextureCount;\n};\n\nvar cornerPositionsScratch = [\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n new Cartesian3(),\n];\n\nfunction computeOccludeePoint(\n tileProvider,\n center,\n rectangle,\n minimumHeight,\n maximumHeight,\n result\n) {\n var ellipsoidalOccluder = tileProvider.quadtree._occluders.ellipsoid;\n var ellipsoid = ellipsoidalOccluder.ellipsoid;\n\n var cornerPositions = cornerPositionsScratch;\n Cartesian3.fromRadians(\n rectangle.west,\n rectangle.south,\n maximumHeight,\n ellipsoid,\n cornerPositions[0]\n );\n Cartesian3.fromRadians(\n rectangle.east,\n rectangle.south,\n maximumHeight,\n ellipsoid,\n cornerPositions[1]\n );\n Cartesian3.fromRadians(\n rectangle.west,\n rectangle.north,\n maximumHeight,\n ellipsoid,\n cornerPositions[2]\n );\n Cartesian3.fromRadians(\n rectangle.east,\n rectangle.north,\n maximumHeight,\n ellipsoid,\n cornerPositions[3]\n );\n\n return ellipsoidalOccluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n center,\n cornerPositions,\n minimumHeight,\n result\n );\n}\n\n/**\n * Gets the distance from the camera to the closest point on the tile. This is used for level-of-detail selection.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n *\n * @returns {Number} The distance from the camera to the closest point on the tile, in meters.\n */\nGlobeSurfaceTileProvider.prototype.computeDistanceToTile = function (\n tile,\n frameState\n) {\n // The distance should be:\n // 1. the actual distance to the tight-fitting bounding volume, or\n // 2. a distance that is equal to or greater than the actual distance to the tight-fitting bounding volume.\n //\n // When we don't know the min/max heights for a tile, but we do know the min/max of an ancestor tile, we can\n // build a tight-fitting bounding volume horizontally, but not vertically. The min/max heights from the\n // ancestor will likely form a volume that is much bigger than it needs to be. This means that the volume may\n // be deemed to be much closer to the camera than it really is, causing us to select tiles that are too detailed.\n // Loading too-detailed tiles is super expensive, so we don't want to do that. We don't know where the child\n // tile really lies within the parent range of heights, but we _do_ know the child tile can't be any closer than\n // the ancestor height surface (min or max) that is _farthest away_ from the camera. So if we compute distance\n // based that conservative metric, we may end up loading tiles that are not detailed enough, but that's much\n // better (faster) than loading tiles that are too detailed.\n\n var heightSource = updateTileBoundingRegion(\n tile,\n this.terrainProvider,\n frameState\n );\n var surfaceTile = tile.data;\n var tileBoundingRegion = surfaceTile.tileBoundingRegion;\n\n if (heightSource === undefined) {\n // Can't find any min/max heights anywhere? Ok, let's just say the\n // tile is really far away so we'll load and render it rather than\n // refining.\n return 9999999999.0;\n } else if (surfaceTile.boundingVolumeSourceTile !== heightSource) {\n // Heights are from a new source tile, so update the bounding volume.\n surfaceTile.boundingVolumeSourceTile = heightSource;\n\n var rectangle = tile.rectangle;\n if (defined(rectangle)) {\n surfaceTile.orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n tile.rectangle,\n tileBoundingRegion.minimumHeight,\n tileBoundingRegion.maximumHeight,\n tile.tilingScheme.ellipsoid,\n surfaceTile.orientedBoundingBox\n );\n\n surfaceTile.occludeePointInScaledSpace = computeOccludeePoint(\n this,\n surfaceTile.orientedBoundingBox.center,\n tile.rectangle,\n tileBoundingRegion.minimumHeight,\n tileBoundingRegion.maximumHeight,\n surfaceTile.occludeePointInScaledSpace\n );\n }\n }\n\n var min = tileBoundingRegion.minimumHeight;\n var max = tileBoundingRegion.maximumHeight;\n\n if (surfaceTile.boundingVolumeSourceTile !== tile) {\n var cameraHeight = frameState.camera.positionCartographic.height;\n var distanceToMin = Math.abs(cameraHeight - min);\n var distanceToMax = Math.abs(cameraHeight - max);\n if (distanceToMin > distanceToMax) {\n tileBoundingRegion.minimumHeight = min;\n tileBoundingRegion.maximumHeight = min;\n } else {\n tileBoundingRegion.minimumHeight = max;\n tileBoundingRegion.maximumHeight = max;\n }\n }\n\n var result = tileBoundingRegion.distanceToCamera(frameState);\n\n tileBoundingRegion.minimumHeight = min;\n tileBoundingRegion.maximumHeight = max;\n\n return result;\n};\n\nfunction updateTileBoundingRegion(tile, terrainProvider, frameState) {\n var surfaceTile = tile.data;\n if (surfaceTile === undefined) {\n surfaceTile = tile.data = new GlobeSurfaceTile();\n }\n\n if (surfaceTile.tileBoundingRegion === undefined) {\n surfaceTile.tileBoundingRegion = new TileBoundingRegion({\n computeBoundingVolumes: false,\n rectangle: tile.rectangle,\n ellipsoid: tile.tilingScheme.ellipsoid,\n minimumHeight: 0.0,\n maximumHeight: 0.0,\n });\n }\n\n var terrainData = surfaceTile.terrainData;\n var mesh = surfaceTile.mesh;\n var tileBoundingRegion = surfaceTile.tileBoundingRegion;\n\n if (\n mesh !== undefined &&\n mesh.minimumHeight !== undefined &&\n mesh.maximumHeight !== undefined\n ) {\n // We have tight-fitting min/max heights from the mesh.\n tileBoundingRegion.minimumHeight = mesh.minimumHeight;\n tileBoundingRegion.maximumHeight = mesh.maximumHeight;\n return tile;\n }\n\n if (\n terrainData !== undefined &&\n terrainData._minimumHeight !== undefined &&\n terrainData._maximumHeight !== undefined\n ) {\n // We have tight-fitting min/max heights from the terrain data.\n tileBoundingRegion.minimumHeight =\n terrainData._minimumHeight * frameState.terrainExaggeration;\n tileBoundingRegion.maximumHeight =\n terrainData._maximumHeight * frameState.terrainExaggeration;\n return tile;\n }\n\n // No accurate min/max heights available, so we're stuck with min/max heights from an ancestor tile.\n tileBoundingRegion.minimumHeight = Number.NaN;\n tileBoundingRegion.maximumHeight = Number.NaN;\n\n var ancestor = tile.parent;\n while (ancestor !== undefined) {\n var ancestorSurfaceTile = ancestor.data;\n if (ancestorSurfaceTile !== undefined) {\n var ancestorMesh = ancestorSurfaceTile.mesh;\n if (\n ancestorMesh !== undefined &&\n ancestorMesh.minimumHeight !== undefined &&\n ancestorMesh.maximumHeight !== undefined\n ) {\n tileBoundingRegion.minimumHeight = ancestorMesh.minimumHeight;\n tileBoundingRegion.maximumHeight = ancestorMesh.maximumHeight;\n return ancestor;\n }\n\n var ancestorTerrainData = ancestorSurfaceTile.terrainData;\n if (\n ancestorTerrainData !== undefined &&\n ancestorTerrainData._minimumHeight !== undefined &&\n ancestorTerrainData._maximumHeight !== undefined\n ) {\n tileBoundingRegion.minimumHeight =\n ancestorTerrainData._minimumHeight * frameState.terrainExaggeration;\n tileBoundingRegion.maximumHeight =\n ancestorTerrainData._maximumHeight * frameState.terrainExaggeration;\n return ancestor;\n }\n }\n ancestor = ancestor.parent;\n }\n\n return undefined;\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see GlobeSurfaceTileProvider#destroy\n */\nGlobeSurfaceTileProvider.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * provider = provider && provider();\n *\n * @see GlobeSurfaceTileProvider#isDestroyed\n */\nGlobeSurfaceTileProvider.prototype.destroy = function () {\n this._tileProvider = this._tileProvider && this._tileProvider.destroy();\n this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n\n return destroyObject(this);\n};\n\nfunction getTileReadyCallback(tileImageriesToFree, layer, terrainProvider) {\n return function (tile) {\n var tileImagery;\n var imagery;\n var startIndex = -1;\n var tileImageryCollection = tile.data.imagery;\n var length = tileImageryCollection.length;\n var i;\n for (i = 0; i < length; ++i) {\n tileImagery = tileImageryCollection[i];\n imagery = defaultValue(\n tileImagery.readyImagery,\n tileImagery.loadingImagery\n );\n if (imagery.imageryLayer === layer) {\n startIndex = i;\n break;\n }\n }\n\n if (startIndex !== -1) {\n var endIndex = startIndex + tileImageriesToFree;\n tileImagery = tileImageryCollection[endIndex];\n imagery = defined(tileImagery)\n ? defaultValue(tileImagery.readyImagery, tileImagery.loadingImagery)\n : undefined;\n if (!defined(imagery) || imagery.imageryLayer !== layer) {\n // Return false to keep the callback if we have to wait on the skeletons\n // Return true to remove the callback if something went wrong\n return !layer._createTileImagerySkeletons(\n tile,\n terrainProvider,\n endIndex\n );\n }\n\n for (i = startIndex; i < endIndex; ++i) {\n tileImageryCollection[i].freeResources();\n }\n\n tileImageryCollection.splice(startIndex, tileImageriesToFree);\n }\n\n return true; // Everything is done, so remove the callback\n };\n}\n\nGlobeSurfaceTileProvider.prototype._onLayerAdded = function (layer, index) {\n if (layer.show) {\n var terrainProvider = this._terrainProvider;\n\n var that = this;\n var imageryProvider = layer.imageryProvider;\n var tileImageryUpdatedEvent = this._imageryLayersUpdatedEvent;\n imageryProvider._reload = function () {\n // Clear the layer's cache\n layer._imageryCache = {};\n\n that._quadtree.forEachLoadedTile(function (tile) {\n // If this layer is still waiting to for the loaded callback, just return\n if (defined(tile._loadedCallbacks[layer._layerIndex])) {\n return;\n }\n\n var i;\n\n // Figure out how many TileImageries we will need to remove and where to insert new ones\n var tileImageryCollection = tile.data.imagery;\n var length = tileImageryCollection.length;\n var startIndex = -1;\n var tileImageriesToFree = 0;\n for (i = 0; i < length; ++i) {\n var tileImagery = tileImageryCollection[i];\n var imagery = defaultValue(\n tileImagery.readyImagery,\n tileImagery.loadingImagery\n );\n if (imagery.imageryLayer === layer) {\n if (startIndex === -1) {\n startIndex = i;\n }\n\n ++tileImageriesToFree;\n } else if (startIndex !== -1) {\n // iterated past the section of TileImageries belonging to this layer, no need to continue.\n break;\n }\n }\n\n if (startIndex === -1) {\n return;\n }\n\n // Insert immediately after existing TileImageries\n var insertionPoint = startIndex + tileImageriesToFree;\n\n // Create new TileImageries for all loaded tiles\n if (\n layer._createTileImagerySkeletons(\n tile,\n terrainProvider,\n insertionPoint\n )\n ) {\n // Add callback to remove old TileImageries when the new TileImageries are ready\n tile._loadedCallbacks[layer._layerIndex] = getTileReadyCallback(\n tileImageriesToFree,\n layer,\n terrainProvider\n );\n\n tile.state = QuadtreeTileLoadState.LOADING;\n }\n });\n };\n\n // create TileImageries for this layer for all previously loaded tiles\n this._quadtree.forEachLoadedTile(function (tile) {\n if (layer._createTileImagerySkeletons(tile, terrainProvider)) {\n tile.state = QuadtreeTileLoadState.LOADING;\n\n // Tiles that are not currently being rendered need to load the new layer before they're renderable.\n // We don't mark the rendered tiles non-renderable, though, because that would make the globe disappear.\n if (\n tile.level !== 0 &&\n (tile._lastSelectionResultFrame !==\n that.quadtree._lastSelectionFrameNumber ||\n tile._lastSelectionResult !== TileSelectionResult.RENDERED)\n ) {\n tile.renderable = false;\n }\n }\n });\n\n this._layerOrderChanged = true;\n tileImageryUpdatedEvent.raiseEvent();\n }\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerRemoved = function (layer, index) {\n // destroy TileImagerys for this layer for all previously loaded tiles\n this._quadtree.forEachLoadedTile(function (tile) {\n var tileImageryCollection = tile.data.imagery;\n\n var startIndex = -1;\n var numDestroyed = 0;\n for (var i = 0, len = tileImageryCollection.length; i < len; ++i) {\n var tileImagery = tileImageryCollection[i];\n var imagery = tileImagery.loadingImagery;\n if (!defined(imagery)) {\n imagery = tileImagery.readyImagery;\n }\n if (imagery.imageryLayer === layer) {\n if (startIndex === -1) {\n startIndex = i;\n }\n\n tileImagery.freeResources();\n ++numDestroyed;\n } else if (startIndex !== -1) {\n // iterated past the section of TileImagerys belonging to this layer, no need to continue.\n break;\n }\n }\n\n if (startIndex !== -1) {\n tileImageryCollection.splice(startIndex, numDestroyed);\n }\n });\n\n if (defined(layer.imageryProvider)) {\n layer.imageryProvider._reload = undefined;\n }\n\n this._imageryLayersUpdatedEvent.raiseEvent();\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerMoved = function (\n layer,\n newIndex,\n oldIndex\n) {\n this._layerOrderChanged = true;\n this._imageryLayersUpdatedEvent.raiseEvent();\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerShownOrHidden = function (\n layer,\n index,\n show\n) {\n if (show) {\n this._onLayerAdded(layer, index);\n } else {\n this._onLayerRemoved(layer, index);\n }\n};\n\nvar scratchClippingPlaneMatrix = new Matrix4();\nfunction createTileUniformMap(frameState, globeSurfaceTileProvider) {\n var uniformMap = {\n u_initialColor: function () {\n return this.properties.initialColor;\n },\n u_fillHighlightColor: function () {\n return this.properties.fillHighlightColor;\n },\n u_zoomedOutOceanSpecularIntensity: function () {\n return this.properties.zoomedOutOceanSpecularIntensity;\n },\n u_oceanNormalMap: function () {\n return this.properties.oceanNormalMap;\n },\n u_lightingFadeDistance: function () {\n return this.properties.lightingFadeDistance;\n },\n u_nightFadeDistance: function () {\n return this.properties.nightFadeDistance;\n },\n u_center3D: function () {\n return this.properties.center3D;\n },\n u_tileRectangle: function () {\n return this.properties.tileRectangle;\n },\n u_modifiedModelView: function () {\n var viewMatrix = frameState.context.uniformState.view;\n var centerEye = Matrix4.multiplyByPoint(\n viewMatrix,\n this.properties.rtc,\n centerEyeScratch\n );\n Matrix4.setTranslation(viewMatrix, centerEye, modifiedModelViewScratch);\n return modifiedModelViewScratch;\n },\n u_modifiedModelViewProjection: function () {\n var viewMatrix = frameState.context.uniformState.view;\n var projectionMatrix = frameState.context.uniformState.projection;\n var centerEye = Matrix4.multiplyByPoint(\n viewMatrix,\n this.properties.rtc,\n centerEyeScratch\n );\n Matrix4.setTranslation(\n viewMatrix,\n centerEye,\n modifiedModelViewProjectionScratch\n );\n Matrix4.multiply(\n projectionMatrix,\n modifiedModelViewProjectionScratch,\n modifiedModelViewProjectionScratch\n );\n return modifiedModelViewProjectionScratch;\n },\n u_dayTextures: function () {\n return this.properties.dayTextures;\n },\n u_dayTextureTranslationAndScale: function () {\n return this.properties.dayTextureTranslationAndScale;\n },\n u_dayTextureTexCoordsRectangle: function () {\n return this.properties.dayTextureTexCoordsRectangle;\n },\n u_dayTextureUseWebMercatorT: function () {\n return this.properties.dayTextureUseWebMercatorT;\n },\n u_dayTextureAlpha: function () {\n return this.properties.dayTextureAlpha;\n },\n u_dayTextureNightAlpha: function () {\n return this.properties.dayTextureNightAlpha;\n },\n u_dayTextureDayAlpha: function () {\n return this.properties.dayTextureDayAlpha;\n },\n u_dayTextureBrightness: function () {\n return this.properties.dayTextureBrightness;\n },\n u_dayTextureContrast: function () {\n return this.properties.dayTextureContrast;\n },\n u_dayTextureHue: function () {\n return this.properties.dayTextureHue;\n },\n u_dayTextureSaturation: function () {\n return this.properties.dayTextureSaturation;\n },\n u_dayTextureOneOverGamma: function () {\n return this.properties.dayTextureOneOverGamma;\n },\n u_dayIntensity: function () {\n return this.properties.dayIntensity;\n },\n u_southAndNorthLatitude: function () {\n return this.properties.southAndNorthLatitude;\n },\n u_southMercatorYAndOneOverHeight: function () {\n return this.properties.southMercatorYAndOneOverHeight;\n },\n u_waterMask: function () {\n return this.properties.waterMask;\n },\n u_waterMaskTranslationAndScale: function () {\n return this.properties.waterMaskTranslationAndScale;\n },\n u_minMaxHeight: function () {\n return this.properties.minMaxHeight;\n },\n u_scaleAndBias: function () {\n return this.properties.scaleAndBias;\n },\n u_dayTextureSplit: function () {\n return this.properties.dayTextureSplit;\n },\n u_dayTextureCutoutRectangles: function () {\n return this.properties.dayTextureCutoutRectangles;\n },\n u_clippingPlanes: function () {\n var clippingPlanes = globeSurfaceTileProvider._clippingPlanes;\n if (defined(clippingPlanes) && defined(clippingPlanes.texture)) {\n // Check in case clippingPlanes hasn't been updated yet.\n return clippingPlanes.texture;\n }\n return frameState.context.defaultTexture;\n },\n u_cartographicLimitRectangle: function () {\n return this.properties.localizedCartographicLimitRectangle;\n },\n u_clippingPlanesMatrix: function () {\n var clippingPlanes = globeSurfaceTileProvider._clippingPlanes;\n return defined(clippingPlanes)\n ? Matrix4.multiply(\n frameState.context.uniformState.view,\n clippingPlanes.modelMatrix,\n scratchClippingPlaneMatrix\n )\n : Matrix4.IDENTITY;\n },\n u_clippingPlanesEdgeStyle: function () {\n var style = this.properties.clippingPlanesEdgeColor;\n style.alpha = this.properties.clippingPlanesEdgeWidth;\n return style;\n },\n u_minimumBrightness: function () {\n return frameState.fog.minimumBrightness;\n },\n u_hsbShift: function () {\n return this.properties.hsbShift;\n },\n u_colorsToAlpha: function () {\n return this.properties.colorsToAlpha;\n },\n u_frontFaceAlphaByDistance: function () {\n return this.properties.frontFaceAlphaByDistance;\n },\n u_backFaceAlphaByDistance: function () {\n return this.properties.backFaceAlphaByDistance;\n },\n u_translucencyRectangle: function () {\n return this.properties.localizedTranslucencyRectangle;\n },\n u_undergroundColor: function () {\n return this.properties.undergroundColor;\n },\n u_undergroundColorAlphaByDistance: function () {\n return this.properties.undergroundColorAlphaByDistance;\n },\n\n // make a separate object so that changes to the properties are seen on\n // derived commands that combine another uniform map with this one.\n properties: {\n initialColor: new Cartesian4(0.0, 0.0, 0.5, 1.0),\n fillHighlightColor: new Color(0.0, 0.0, 0.0, 0.0),\n zoomedOutOceanSpecularIntensity: 0.5,\n oceanNormalMap: undefined,\n lightingFadeDistance: new Cartesian2(6500000.0, 9000000.0),\n nightFadeDistance: new Cartesian2(10000000.0, 40000000.0),\n hsbShift: new Cartesian3(),\n\n center3D: undefined,\n rtc: new Cartesian3(),\n modifiedModelView: new Matrix4(),\n tileRectangle: new Cartesian4(),\n\n dayTextures: [],\n dayTextureTranslationAndScale: [],\n dayTextureTexCoordsRectangle: [],\n dayTextureUseWebMercatorT: [],\n dayTextureAlpha: [],\n dayTextureNightAlpha: [],\n dayTextureDayAlpha: [],\n dayTextureBrightness: [],\n dayTextureContrast: [],\n dayTextureHue: [],\n dayTextureSaturation: [],\n dayTextureOneOverGamma: [],\n dayTextureSplit: [],\n dayTextureCutoutRectangles: [],\n dayIntensity: 0.0,\n colorsToAlpha: [],\n\n southAndNorthLatitude: new Cartesian2(),\n southMercatorYAndOneOverHeight: new Cartesian2(),\n\n waterMask: undefined,\n waterMaskTranslationAndScale: new Cartesian4(),\n\n minMaxHeight: new Cartesian2(),\n scaleAndBias: new Matrix4(),\n clippingPlanesEdgeColor: Color.clone(Color.WHITE),\n clippingPlanesEdgeWidth: 0.0,\n\n localizedCartographicLimitRectangle: new Cartesian4(),\n\n frontFaceAlphaByDistance: new Cartesian4(),\n backFaceAlphaByDistance: new Cartesian4(),\n localizedTranslucencyRectangle: new Cartesian4(),\n undergroundColor: Color.clone(Color.TRANSPARENT),\n undergroundColorAlphaByDistance: new Cartesian4(),\n },\n };\n\n if (defined(globeSurfaceTileProvider.materialUniformMap)) {\n return combine(uniformMap, globeSurfaceTileProvider.materialUniformMap);\n }\n\n return uniformMap;\n}\n\nfunction createWireframeVertexArrayIfNecessary(context, provider, tile) {\n var surfaceTile = tile.data;\n\n var mesh;\n var vertexArray;\n\n if (defined(surfaceTile.vertexArray)) {\n mesh = surfaceTile.mesh;\n vertexArray = surfaceTile.vertexArray;\n } else if (\n defined(surfaceTile.fill) &&\n defined(surfaceTile.fill.vertexArray)\n ) {\n mesh = surfaceTile.fill.mesh;\n vertexArray = surfaceTile.fill.vertexArray;\n }\n\n if (!defined(mesh) || !defined(vertexArray)) {\n return;\n }\n\n if (defined(surfaceTile.wireframeVertexArray)) {\n if (surfaceTile.wireframeVertexArray.mesh === mesh) {\n return;\n }\n\n surfaceTile.wireframeVertexArray.destroy();\n surfaceTile.wireframeVertexArray = undefined;\n }\n\n surfaceTile.wireframeVertexArray = createWireframeVertexArray(\n context,\n vertexArray,\n mesh\n );\n surfaceTile.wireframeVertexArray.mesh = mesh;\n}\n\n/**\n * Creates a vertex array for wireframe rendering of a terrain tile.\n *\n * @private\n *\n * @param {Context} context The context in which to create the vertex array.\n * @param {VertexArray} vertexArray The existing, non-wireframe vertex array. The new vertex array\n * will share vertex buffers with this existing one.\n * @param {TerrainMesh} terrainMesh The terrain mesh containing non-wireframe indices.\n * @returns {VertexArray} The vertex array for wireframe rendering.\n */\nfunction createWireframeVertexArray(context, vertexArray, terrainMesh) {\n var indices = terrainMesh.indices;\n\n var geometry = {\n indices: indices,\n primitiveType: PrimitiveType.TRIANGLES,\n };\n\n GeometryPipeline.toWireframe(geometry);\n\n var wireframeIndices = geometry.indices;\n var wireframeIndexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: wireframeIndices,\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.fromSizeInBytes(\n wireframeIndices.BYTES_PER_ELEMENT\n ),\n });\n return new VertexArray({\n context: context,\n attributes: vertexArray._attributes,\n indexBuffer: wireframeIndexBuffer,\n });\n}\n\nvar getDebugOrientedBoundingBox;\nvar getDebugBoundingSphere;\nvar debugDestroyPrimitive;\n\n(function () {\n var instanceOBB = new GeometryInstance({\n geometry: BoxOutlineGeometry.fromDimensions({\n dimensions: new Cartesian3(2.0, 2.0, 2.0),\n }),\n });\n var instanceSphere = new GeometryInstance({\n geometry: new SphereOutlineGeometry({ radius: 1.0 }),\n });\n var modelMatrix = new Matrix4();\n var previousVolume;\n var primitive;\n\n function createDebugPrimitive(instance) {\n return new Primitive({\n geometryInstances: instance,\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n });\n }\n\n getDebugOrientedBoundingBox = function (obb, color) {\n if (obb === previousVolume) {\n return primitive;\n }\n debugDestroyPrimitive();\n\n previousVolume = obb;\n modelMatrix = Matrix4.fromRotationTranslation(\n obb.halfAxes,\n obb.center,\n modelMatrix\n );\n\n instanceOBB.modelMatrix = modelMatrix;\n instanceOBB.attributes.color = ColorGeometryInstanceAttribute.fromColor(\n color\n );\n\n primitive = createDebugPrimitive(instanceOBB);\n return primitive;\n };\n\n getDebugBoundingSphere = function (sphere, color) {\n if (sphere === previousVolume) {\n return primitive;\n }\n debugDestroyPrimitive();\n\n previousVolume = sphere;\n modelMatrix = Matrix4.fromTranslation(sphere.center, modelMatrix);\n modelMatrix = Matrix4.multiplyByUniformScale(\n modelMatrix,\n sphere.radius,\n modelMatrix\n );\n\n instanceSphere.modelMatrix = modelMatrix;\n instanceSphere.attributes.color = ColorGeometryInstanceAttribute.fromColor(\n color\n );\n\n primitive = createDebugPrimitive(instanceSphere);\n return primitive;\n };\n\n debugDestroyPrimitive = function () {\n if (defined(primitive)) {\n primitive.destroy();\n primitive = undefined;\n previousVolume = undefined;\n }\n };\n})();\n\nvar otherPassesInitialColor = new Cartesian4(0.0, 0.0, 0.0, 0.0);\nvar surfaceShaderSetOptionsScratch = {\n frameState: undefined,\n surfaceTile: undefined,\n numberOfDayTextures: undefined,\n applyBrightness: undefined,\n applyContrast: undefined,\n applyHue: undefined,\n applySaturation: undefined,\n applyGamma: undefined,\n applyAlpha: undefined,\n applyDayNightAlpha: undefined,\n applySplit: undefined,\n showReflectiveOcean: undefined,\n showOceanWaves: undefined,\n enableLighting: undefined,\n dynamicAtmosphereLighting: undefined,\n dynamicAtmosphereLightingFromSun: undefined,\n showGroundAtmosphere: undefined,\n perFragmentGroundAtmosphere: undefined,\n hasVertexNormals: undefined,\n useWebMercatorProjection: undefined,\n enableFog: undefined,\n enableClippingPlanes: undefined,\n clippingPlanes: undefined,\n clippedByBoundaries: undefined,\n hasImageryLayerCutout: undefined,\n colorCorrect: undefined,\n colorToAlpha: undefined,\n};\n\nvar defaultUndergroundColor = Color.TRANSPARENT;\nvar defaultundergroundColorAlphaByDistance = new NearFarScalar();\n\nfunction addDrawCommandsForTile(tileProvider, tile, frameState) {\n var surfaceTile = tile.data;\n\n if (!defined(surfaceTile.vertexArray)) {\n if (surfaceTile.fill === undefined) {\n // No fill was created for this tile, probably because this tile is not connected to\n // any renderable tiles. So create a simple tile in the middle of the tile's possible\n // height range.\n surfaceTile.fill = new TerrainFillMesh(tile);\n }\n surfaceTile.fill.update(tileProvider, frameState);\n }\n\n var creditDisplay = frameState.creditDisplay;\n\n var terrainData = surfaceTile.terrainData;\n if (defined(terrainData) && defined(terrainData.credits)) {\n var tileCredits = terrainData.credits;\n for (\n var tileCreditIndex = 0, tileCreditLength = tileCredits.length;\n tileCreditIndex < tileCreditLength;\n ++tileCreditIndex\n ) {\n creditDisplay.addCredit(tileCredits[tileCreditIndex]);\n }\n }\n\n var maxTextures = ContextLimits.maximumTextureImageUnits;\n\n var waterMaskTexture = surfaceTile.waterMaskTexture;\n var waterMaskTranslationAndScale = surfaceTile.waterMaskTranslationAndScale;\n if (!defined(waterMaskTexture) && defined(surfaceTile.fill)) {\n waterMaskTexture = surfaceTile.fill.waterMaskTexture;\n waterMaskTranslationAndScale =\n surfaceTile.fill.waterMaskTranslationAndScale;\n }\n\n var cameraUnderground = frameState.cameraUnderground;\n\n var globeTranslucencyState = frameState.globeTranslucencyState;\n var translucent = globeTranslucencyState.translucent;\n var frontFaceAlphaByDistance =\n globeTranslucencyState.frontFaceAlphaByDistance;\n var backFaceAlphaByDistance = globeTranslucencyState.backFaceAlphaByDistance;\n var translucencyRectangle = globeTranslucencyState.rectangle;\n\n var undergroundColor = defaultValue(\n tileProvider.undergroundColor,\n defaultUndergroundColor\n );\n var undergroundColorAlphaByDistance = defaultValue(\n tileProvider.undergroundColorAlphaByDistance,\n defaultundergroundColorAlphaByDistance\n );\n var showUndergroundColor =\n isUndergroundVisible(tileProvider, frameState) &&\n frameState.mode === SceneMode.SCENE3D &&\n undergroundColor.alpha > 0.0 &&\n (undergroundColorAlphaByDistance.nearValue > 0.0 ||\n undergroundColorAlphaByDistance.farValue > 0.0);\n\n var showReflectiveOcean =\n tileProvider.hasWaterMask && defined(waterMaskTexture);\n var oceanNormalMap = tileProvider.oceanNormalMap;\n var showOceanWaves = showReflectiveOcean && defined(oceanNormalMap);\n var hasVertexNormals =\n tileProvider.terrainProvider.ready &&\n tileProvider.terrainProvider.hasVertexNormals;\n var enableFog = frameState.fog.enabled && !cameraUnderground;\n var showGroundAtmosphere =\n tileProvider.showGroundAtmosphere && frameState.mode === SceneMode.SCENE3D;\n var castShadows =\n ShadowMode.castShadows(tileProvider.shadows) && !translucent;\n var receiveShadows =\n ShadowMode.receiveShadows(tileProvider.shadows) && !translucent;\n\n var hueShift = tileProvider.hueShift;\n var saturationShift = tileProvider.saturationShift;\n var brightnessShift = tileProvider.brightnessShift;\n\n var colorCorrect = !(\n CesiumMath.equalsEpsilon(hueShift, 0.0, CesiumMath.EPSILON7) &&\n CesiumMath.equalsEpsilon(saturationShift, 0.0, CesiumMath.EPSILON7) &&\n CesiumMath.equalsEpsilon(brightnessShift, 0.0, CesiumMath.EPSILON7)\n );\n\n var perFragmentGroundAtmosphere = false;\n if (showGroundAtmosphere) {\n var cameraDistance = Cartesian3.magnitude(frameState.camera.positionWC);\n var fadeOutDistance = tileProvider.nightFadeOutDistance;\n perFragmentGroundAtmosphere = cameraDistance > fadeOutDistance;\n }\n\n if (showReflectiveOcean) {\n --maxTextures;\n }\n if (showOceanWaves) {\n --maxTextures;\n }\n if (\n defined(frameState.shadowState) &&\n frameState.shadowState.shadowsEnabled\n ) {\n --maxTextures;\n }\n if (\n defined(tileProvider.clippingPlanes) &&\n tileProvider.clippingPlanes.enabled\n ) {\n --maxTextures;\n }\n\n maxTextures -= globeTranslucencyState.numberOfTextureUniforms;\n\n var mesh = surfaceTile.renderedMesh;\n var rtc = mesh.center;\n var encoding = mesh.encoding;\n\n // Not used in 3D.\n var tileRectangle = tileRectangleScratch;\n\n // Only used for Mercator projections.\n var southLatitude = 0.0;\n var northLatitude = 0.0;\n var southMercatorY = 0.0;\n var oneOverMercatorHeight = 0.0;\n\n var useWebMercatorProjection = false;\n\n if (frameState.mode !== SceneMode.SCENE3D) {\n var projection = frameState.mapProjection;\n var southwest = projection.project(\n Rectangle.southwest(tile.rectangle),\n southwestScratch\n );\n var northeast = projection.project(\n Rectangle.northeast(tile.rectangle),\n northeastScratch\n );\n\n tileRectangle.x = southwest.x;\n tileRectangle.y = southwest.y;\n tileRectangle.z = northeast.x;\n tileRectangle.w = northeast.y;\n\n // In 2D and Columbus View, use the center of the tile for RTC rendering.\n if (frameState.mode !== SceneMode.MORPHING) {\n rtc = rtcScratch;\n rtc.x = 0.0;\n rtc.y = (tileRectangle.z + tileRectangle.x) * 0.5;\n rtc.z = (tileRectangle.w + tileRectangle.y) * 0.5;\n tileRectangle.x -= rtc.y;\n tileRectangle.y -= rtc.z;\n tileRectangle.z -= rtc.y;\n tileRectangle.w -= rtc.z;\n }\n\n if (\n frameState.mode === SceneMode.SCENE2D &&\n encoding.quantization === TerrainQuantization.BITS12\n ) {\n // In 2D, the texture coordinates of the tile are interpolated over the rectangle to get the position in the vertex shader.\n // When the texture coordinates are quantized, error is introduced. This can be seen through the 1px wide cracking\n // between the quantized tiles in 2D. To compensate for the error, move the expand the rectangle in each direction by\n // half the error amount.\n var epsilon = (1.0 / (Math.pow(2.0, 12.0) - 1.0)) * 0.5;\n var widthEpsilon = (tileRectangle.z - tileRectangle.x) * epsilon;\n var heightEpsilon = (tileRectangle.w - tileRectangle.y) * epsilon;\n tileRectangle.x -= widthEpsilon;\n tileRectangle.y -= heightEpsilon;\n tileRectangle.z += widthEpsilon;\n tileRectangle.w += heightEpsilon;\n }\n\n if (projection instanceof WebMercatorProjection) {\n southLatitude = tile.rectangle.south;\n northLatitude = tile.rectangle.north;\n\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n southLatitude\n );\n\n oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(northLatitude) -\n southMercatorY);\n\n useWebMercatorProjection = true;\n }\n }\n\n var surfaceShaderSetOptions = surfaceShaderSetOptionsScratch;\n surfaceShaderSetOptions.frameState = frameState;\n surfaceShaderSetOptions.surfaceTile = surfaceTile;\n surfaceShaderSetOptions.showReflectiveOcean = showReflectiveOcean;\n surfaceShaderSetOptions.showOceanWaves = showOceanWaves;\n surfaceShaderSetOptions.enableLighting = tileProvider.enableLighting;\n surfaceShaderSetOptions.dynamicAtmosphereLighting =\n tileProvider.dynamicAtmosphereLighting;\n surfaceShaderSetOptions.dynamicAtmosphereLightingFromSun =\n tileProvider.dynamicAtmosphereLightingFromSun;\n surfaceShaderSetOptions.showGroundAtmosphere = showGroundAtmosphere;\n surfaceShaderSetOptions.perFragmentGroundAtmosphere = perFragmentGroundAtmosphere;\n surfaceShaderSetOptions.hasVertexNormals = hasVertexNormals;\n surfaceShaderSetOptions.useWebMercatorProjection = useWebMercatorProjection;\n surfaceShaderSetOptions.clippedByBoundaries = surfaceTile.clippedByBoundaries;\n\n var tileImageryCollection = surfaceTile.imagery;\n var imageryIndex = 0;\n var imageryLen = tileImageryCollection.length;\n\n var showSkirts =\n tileProvider.showSkirts && !cameraUnderground && !translucent;\n var backFaceCulling =\n tileProvider.backFaceCulling && !cameraUnderground && !translucent;\n var firstPassRenderState = backFaceCulling\n ? tileProvider._renderState\n : tileProvider._disableCullingRenderState;\n var otherPassesRenderState = backFaceCulling\n ? tileProvider._blendRenderState\n : tileProvider._disableCullingBlendRenderState;\n var renderState = firstPassRenderState;\n\n var initialColor = tileProvider._firstPassInitialColor;\n\n var context = frameState.context;\n\n if (!defined(tileProvider._debug.boundingSphereTile)) {\n debugDestroyPrimitive();\n }\n\n var materialUniformMapChanged =\n tileProvider._materialUniformMap !== tileProvider.materialUniformMap;\n if (materialUniformMapChanged) {\n tileProvider._materialUniformMap = tileProvider.materialUniformMap;\n var drawCommandsLength = tileProvider._drawCommands.length;\n for (var i = 0; i < drawCommandsLength; ++i) {\n tileProvider._uniformMaps[i] = createTileUniformMap(\n frameState,\n tileProvider\n );\n }\n }\n\n do {\n var numberOfDayTextures = 0;\n\n var command;\n var uniformMap;\n\n if (tileProvider._drawCommands.length <= tileProvider._usedDrawCommands) {\n command = new DrawCommand();\n command.owner = tile;\n command.cull = false;\n command.boundingVolume = new BoundingSphere();\n command.orientedBoundingBox = undefined;\n\n uniformMap = createTileUniformMap(frameState, tileProvider);\n\n tileProvider._drawCommands.push(command);\n tileProvider._uniformMaps.push(uniformMap);\n } else {\n command = tileProvider._drawCommands[tileProvider._usedDrawCommands];\n uniformMap = tileProvider._uniformMaps[tileProvider._usedDrawCommands];\n }\n\n command.owner = tile;\n\n ++tileProvider._usedDrawCommands;\n\n if (tile === tileProvider._debug.boundingSphereTile) {\n var obb = surfaceTile.orientedBoundingBox;\n // If a debug primitive already exists for this tile, it will not be\n // re-created, to avoid allocation every frame. If it were possible\n // to have more than one selected tile, this would have to change.\n if (defined(obb)) {\n getDebugOrientedBoundingBox(obb, Color.RED).update(frameState);\n } else if (defined(mesh) && defined(mesh.boundingSphere3D)) {\n getDebugBoundingSphere(mesh.boundingSphere3D, Color.RED).update(\n frameState\n );\n }\n }\n\n var uniformMapProperties = uniformMap.properties;\n Cartesian4.clone(initialColor, uniformMapProperties.initialColor);\n uniformMapProperties.oceanNormalMap = oceanNormalMap;\n uniformMapProperties.lightingFadeDistance.x =\n tileProvider.lightingFadeOutDistance;\n uniformMapProperties.lightingFadeDistance.y =\n tileProvider.lightingFadeInDistance;\n uniformMapProperties.nightFadeDistance.x =\n tileProvider.nightFadeOutDistance;\n uniformMapProperties.nightFadeDistance.y = tileProvider.nightFadeInDistance;\n uniformMapProperties.zoomedOutOceanSpecularIntensity =\n tileProvider.zoomedOutOceanSpecularIntensity;\n\n var frontFaceAlphaByDistanceFinal = cameraUnderground\n ? backFaceAlphaByDistance\n : frontFaceAlphaByDistance;\n var backFaceAlphaByDistanceFinal = cameraUnderground\n ? frontFaceAlphaByDistance\n : backFaceAlphaByDistance;\n\n if (defined(frontFaceAlphaByDistanceFinal)) {\n Cartesian4.fromElements(\n frontFaceAlphaByDistanceFinal.near,\n frontFaceAlphaByDistanceFinal.nearValue,\n frontFaceAlphaByDistanceFinal.far,\n frontFaceAlphaByDistanceFinal.farValue,\n uniformMapProperties.frontFaceAlphaByDistance\n );\n Cartesian4.fromElements(\n backFaceAlphaByDistanceFinal.near,\n backFaceAlphaByDistanceFinal.nearValue,\n backFaceAlphaByDistanceFinal.far,\n backFaceAlphaByDistanceFinal.farValue,\n uniformMapProperties.backFaceAlphaByDistance\n );\n }\n\n Cartesian4.fromElements(\n undergroundColorAlphaByDistance.near,\n undergroundColorAlphaByDistance.nearValue,\n undergroundColorAlphaByDistance.far,\n undergroundColorAlphaByDistance.farValue,\n uniformMapProperties.undergroundColorAlphaByDistance\n );\n Color.clone(undergroundColor, uniformMapProperties.undergroundColor);\n\n var highlightFillTile =\n !defined(surfaceTile.vertexArray) &&\n defined(tileProvider.fillHighlightColor) &&\n tileProvider.fillHighlightColor.alpha > 0.0;\n if (highlightFillTile) {\n Color.clone(\n tileProvider.fillHighlightColor,\n uniformMapProperties.fillHighlightColor\n );\n }\n\n uniformMapProperties.center3D = mesh.center;\n Cartesian3.clone(rtc, uniformMapProperties.rtc);\n\n Cartesian4.clone(tileRectangle, uniformMapProperties.tileRectangle);\n uniformMapProperties.southAndNorthLatitude.x = southLatitude;\n uniformMapProperties.southAndNorthLatitude.y = northLatitude;\n uniformMapProperties.southMercatorYAndOneOverHeight.x = southMercatorY;\n uniformMapProperties.southMercatorYAndOneOverHeight.y = oneOverMercatorHeight;\n\n // Convert tile limiter rectangle from cartographic to texture space using the tileRectangle.\n var localizedCartographicLimitRectangle = localizedCartographicLimitRectangleScratch;\n var cartographicLimitRectangle = clipRectangleAntimeridian(\n tile.rectangle,\n tileProvider.cartographicLimitRectangle\n );\n\n var localizedTranslucencyRectangle = localizedTranslucencyRectangleScratch;\n var clippedTranslucencyRectangle = clipRectangleAntimeridian(\n tile.rectangle,\n translucencyRectangle\n );\n\n Cartesian3.fromElements(\n hueShift,\n saturationShift,\n brightnessShift,\n uniformMapProperties.hsbShift\n );\n\n var cartographicTileRectangle = tile.rectangle;\n var inverseTileWidth = 1.0 / cartographicTileRectangle.width;\n var inverseTileHeight = 1.0 / cartographicTileRectangle.height;\n localizedCartographicLimitRectangle.x =\n (cartographicLimitRectangle.west - cartographicTileRectangle.west) *\n inverseTileWidth;\n localizedCartographicLimitRectangle.y =\n (cartographicLimitRectangle.south - cartographicTileRectangle.south) *\n inverseTileHeight;\n localizedCartographicLimitRectangle.z =\n (cartographicLimitRectangle.east - cartographicTileRectangle.west) *\n inverseTileWidth;\n localizedCartographicLimitRectangle.w =\n (cartographicLimitRectangle.north - cartographicTileRectangle.south) *\n inverseTileHeight;\n\n Cartesian4.clone(\n localizedCartographicLimitRectangle,\n uniformMapProperties.localizedCartographicLimitRectangle\n );\n\n localizedTranslucencyRectangle.x =\n (clippedTranslucencyRectangle.west - cartographicTileRectangle.west) *\n inverseTileWidth;\n localizedTranslucencyRectangle.y =\n (clippedTranslucencyRectangle.south - cartographicTileRectangle.south) *\n inverseTileHeight;\n localizedTranslucencyRectangle.z =\n (clippedTranslucencyRectangle.east - cartographicTileRectangle.west) *\n inverseTileWidth;\n localizedTranslucencyRectangle.w =\n (clippedTranslucencyRectangle.north - cartographicTileRectangle.south) *\n inverseTileHeight;\n\n Cartesian4.clone(\n localizedTranslucencyRectangle,\n uniformMapProperties.localizedTranslucencyRectangle\n );\n\n // For performance, use fog in the shader only when the tile is in fog.\n var applyFog =\n enableFog &&\n CesiumMath.fog(tile._distance, frameState.fog.density) >\n CesiumMath.EPSILON3;\n colorCorrect = colorCorrect && (applyFog || showGroundAtmosphere);\n\n var applyBrightness = false;\n var applyContrast = false;\n var applyHue = false;\n var applySaturation = false;\n var applyGamma = false;\n var applyAlpha = false;\n var applyDayNightAlpha = false;\n var applySplit = false;\n var applyCutout = false;\n var applyColorToAlpha = false;\n\n while (numberOfDayTextures < maxTextures && imageryIndex < imageryLen) {\n var tileImagery = tileImageryCollection[imageryIndex];\n var imagery = tileImagery.readyImagery;\n ++imageryIndex;\n\n if (!defined(imagery) || imagery.imageryLayer.alpha === 0.0) {\n continue;\n }\n\n var texture = tileImagery.useWebMercatorT\n ? imagery.textureWebMercator\n : imagery.texture;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(texture)) {\n // Our \"ready\" texture isn't actually ready. This should never happen.\n //\n // Side note: It IS possible for it to not be in the READY ImageryState, though.\n // This can happen when a single imagery tile is shared by two terrain tiles (common)\n // and one of them (A) needs a geographic version of the tile because it is near the poles,\n // and the other (B) does not. B can and will transition the imagery tile to the READY state\n // without reprojecting to geographic. Then, later, A will deem that same tile not-ready-yet\n // because it only has the Web Mercator texture, and flip it back to the TRANSITIONING state.\n // The imagery tile won't be in the READY state anymore, but it's still READY enough for B's\n // purposes.\n throw new DeveloperError(\"readyImagery is not actually ready!\");\n }\n //>>includeEnd('debug');\n\n var imageryLayer = imagery.imageryLayer;\n\n if (!defined(tileImagery.textureTranslationAndScale)) {\n tileImagery.textureTranslationAndScale = imageryLayer._calculateTextureTranslationAndScale(\n tile,\n tileImagery\n );\n }\n\n uniformMapProperties.dayTextures[numberOfDayTextures] = texture;\n uniformMapProperties.dayTextureTranslationAndScale[numberOfDayTextures] =\n tileImagery.textureTranslationAndScale;\n uniformMapProperties.dayTextureTexCoordsRectangle[numberOfDayTextures] =\n tileImagery.textureCoordinateRectangle;\n uniformMapProperties.dayTextureUseWebMercatorT[numberOfDayTextures] =\n tileImagery.useWebMercatorT;\n\n uniformMapProperties.dayTextureAlpha[numberOfDayTextures] =\n imageryLayer.alpha;\n applyAlpha =\n applyAlpha ||\n uniformMapProperties.dayTextureAlpha[numberOfDayTextures] !== 1.0;\n\n uniformMapProperties.dayTextureNightAlpha[numberOfDayTextures] =\n imageryLayer.nightAlpha;\n applyDayNightAlpha =\n applyDayNightAlpha ||\n uniformMapProperties.dayTextureNightAlpha[numberOfDayTextures] !== 1.0;\n\n uniformMapProperties.dayTextureDayAlpha[numberOfDayTextures] =\n imageryLayer.dayAlpha;\n applyDayNightAlpha =\n applyDayNightAlpha ||\n uniformMapProperties.dayTextureDayAlpha[numberOfDayTextures] !== 1.0;\n\n uniformMapProperties.dayTextureBrightness[numberOfDayTextures] =\n imageryLayer.brightness;\n applyBrightness =\n applyBrightness ||\n uniformMapProperties.dayTextureBrightness[numberOfDayTextures] !==\n ImageryLayer.DEFAULT_BRIGHTNESS;\n\n uniformMapProperties.dayTextureContrast[numberOfDayTextures] =\n imageryLayer.contrast;\n applyContrast =\n applyContrast ||\n uniformMapProperties.dayTextureContrast[numberOfDayTextures] !==\n ImageryLayer.DEFAULT_CONTRAST;\n\n uniformMapProperties.dayTextureHue[numberOfDayTextures] =\n imageryLayer.hue;\n applyHue =\n applyHue ||\n uniformMapProperties.dayTextureHue[numberOfDayTextures] !==\n ImageryLayer.DEFAULT_HUE;\n\n uniformMapProperties.dayTextureSaturation[numberOfDayTextures] =\n imageryLayer.saturation;\n applySaturation =\n applySaturation ||\n uniformMapProperties.dayTextureSaturation[numberOfDayTextures] !==\n ImageryLayer.DEFAULT_SATURATION;\n\n uniformMapProperties.dayTextureOneOverGamma[numberOfDayTextures] =\n 1.0 / imageryLayer.gamma;\n applyGamma =\n applyGamma ||\n uniformMapProperties.dayTextureOneOverGamma[numberOfDayTextures] !==\n 1.0 / ImageryLayer.DEFAULT_GAMMA;\n\n uniformMapProperties.dayTextureSplit[numberOfDayTextures] =\n imageryLayer.splitDirection;\n applySplit =\n applySplit ||\n uniformMapProperties.dayTextureSplit[numberOfDayTextures] !== 0.0;\n\n // Update cutout rectangle\n var dayTextureCutoutRectangle =\n uniformMapProperties.dayTextureCutoutRectangles[numberOfDayTextures];\n if (!defined(dayTextureCutoutRectangle)) {\n dayTextureCutoutRectangle = uniformMapProperties.dayTextureCutoutRectangles[\n numberOfDayTextures\n ] = new Cartesian4();\n }\n\n Cartesian4.clone(Cartesian4.ZERO, dayTextureCutoutRectangle);\n if (defined(imageryLayer.cutoutRectangle)) {\n var cutoutRectangle = clipRectangleAntimeridian(\n cartographicTileRectangle,\n imageryLayer.cutoutRectangle\n );\n var intersection = Rectangle.simpleIntersection(\n cutoutRectangle,\n cartographicTileRectangle,\n rectangleIntersectionScratch\n );\n applyCutout = defined(intersection) || applyCutout;\n\n dayTextureCutoutRectangle.x =\n (cutoutRectangle.west - cartographicTileRectangle.west) *\n inverseTileWidth;\n dayTextureCutoutRectangle.y =\n (cutoutRectangle.south - cartographicTileRectangle.south) *\n inverseTileHeight;\n dayTextureCutoutRectangle.z =\n (cutoutRectangle.east - cartographicTileRectangle.west) *\n inverseTileWidth;\n dayTextureCutoutRectangle.w =\n (cutoutRectangle.north - cartographicTileRectangle.south) *\n inverseTileHeight;\n }\n\n // Update color to alpha\n var colorToAlpha =\n uniformMapProperties.colorsToAlpha[numberOfDayTextures];\n if (!defined(colorToAlpha)) {\n colorToAlpha = uniformMapProperties.colorsToAlpha[\n numberOfDayTextures\n ] = new Cartesian4();\n }\n\n var hasColorToAlpha =\n defined(imageryLayer.colorToAlpha) &&\n imageryLayer.colorToAlphaThreshold > 0.0;\n applyColorToAlpha = applyColorToAlpha || hasColorToAlpha;\n\n if (hasColorToAlpha) {\n var color = imageryLayer.colorToAlpha;\n colorToAlpha.x = color.red;\n colorToAlpha.y = color.green;\n colorToAlpha.z = color.blue;\n colorToAlpha.w = imageryLayer.colorToAlphaThreshold;\n } else {\n colorToAlpha.w = -1.0;\n }\n\n if (defined(imagery.credits)) {\n var credits = imagery.credits;\n for (\n var creditIndex = 0, creditLength = credits.length;\n creditIndex < creditLength;\n ++creditIndex\n ) {\n creditDisplay.addCredit(credits[creditIndex]);\n }\n }\n\n ++numberOfDayTextures;\n }\n\n // trim texture array to the used length so we don't end up using old textures\n // which might get destroyed eventually\n uniformMapProperties.dayTextures.length = numberOfDayTextures;\n uniformMapProperties.waterMask = waterMaskTexture;\n Cartesian4.clone(\n waterMaskTranslationAndScale,\n uniformMapProperties.waterMaskTranslationAndScale\n );\n\n uniformMapProperties.minMaxHeight.x = encoding.minimumHeight;\n uniformMapProperties.minMaxHeight.y = encoding.maximumHeight;\n Matrix4.clone(encoding.matrix, uniformMapProperties.scaleAndBias);\n\n // update clipping planes\n var clippingPlanes = tileProvider._clippingPlanes;\n var clippingPlanesEnabled =\n defined(clippingPlanes) && clippingPlanes.enabled && tile.isClipped;\n if (clippingPlanesEnabled) {\n uniformMapProperties.clippingPlanesEdgeColor = Color.clone(\n clippingPlanes.edgeColor,\n uniformMapProperties.clippingPlanesEdgeColor\n );\n uniformMapProperties.clippingPlanesEdgeWidth = clippingPlanes.edgeWidth;\n }\n\n surfaceShaderSetOptions.numberOfDayTextures = numberOfDayTextures;\n surfaceShaderSetOptions.applyBrightness = applyBrightness;\n surfaceShaderSetOptions.applyContrast = applyContrast;\n surfaceShaderSetOptions.applyHue = applyHue;\n surfaceShaderSetOptions.applySaturation = applySaturation;\n surfaceShaderSetOptions.applyGamma = applyGamma;\n surfaceShaderSetOptions.applyAlpha = applyAlpha;\n surfaceShaderSetOptions.applyDayNightAlpha = applyDayNightAlpha;\n surfaceShaderSetOptions.applySplit = applySplit;\n surfaceShaderSetOptions.enableFog = applyFog;\n surfaceShaderSetOptions.enableClippingPlanes = clippingPlanesEnabled;\n surfaceShaderSetOptions.clippingPlanes = clippingPlanes;\n surfaceShaderSetOptions.hasImageryLayerCutout = applyCutout;\n surfaceShaderSetOptions.colorCorrect = colorCorrect;\n surfaceShaderSetOptions.highlightFillTile = highlightFillTile;\n surfaceShaderSetOptions.colorToAlpha = applyColorToAlpha;\n surfaceShaderSetOptions.showUndergroundColor = showUndergroundColor;\n surfaceShaderSetOptions.translucent = translucent;\n\n var count = surfaceTile.renderedMesh.indices.length;\n if (!showSkirts) {\n count = surfaceTile.renderedMesh.indexCountWithoutSkirts;\n }\n\n command.shaderProgram = tileProvider._surfaceShaderSet.getShaderProgram(\n surfaceShaderSetOptions\n );\n command.castShadows = castShadows;\n command.receiveShadows = receiveShadows;\n command.renderState = renderState;\n command.primitiveType = PrimitiveType.TRIANGLES;\n command.vertexArray =\n surfaceTile.vertexArray || surfaceTile.fill.vertexArray;\n command.count = count;\n command.uniformMap = uniformMap;\n command.pass = Pass.GLOBE;\n\n if (tileProvider._debug.wireframe) {\n createWireframeVertexArrayIfNecessary(context, tileProvider, tile);\n if (defined(surfaceTile.wireframeVertexArray)) {\n command.vertexArray = surfaceTile.wireframeVertexArray;\n command.primitiveType = PrimitiveType.LINES;\n command.count = count * 2;\n }\n }\n\n var boundingVolume = command.boundingVolume;\n var orientedBoundingBox = command.orientedBoundingBox;\n\n if (frameState.mode !== SceneMode.SCENE3D) {\n var tileBoundingRegion = surfaceTile.tileBoundingRegion;\n BoundingSphere.fromRectangleWithHeights2D(\n tile.rectangle,\n frameState.mapProjection,\n tileBoundingRegion.minimumHeight,\n tileBoundingRegion.maximumHeight,\n boundingVolume\n );\n Cartesian3.fromElements(\n boundingVolume.center.z,\n boundingVolume.center.x,\n boundingVolume.center.y,\n boundingVolume.center\n );\n\n if (frameState.mode === SceneMode.MORPHING) {\n boundingVolume = BoundingSphere.union(\n mesh.boundingSphere3D,\n boundingVolume,\n boundingVolume\n );\n }\n } else {\n command.boundingVolume = BoundingSphere.clone(\n mesh.boundingSphere3D,\n boundingVolume\n );\n command.orientedBoundingBox = OrientedBoundingBox.clone(\n surfaceTile.orientedBoundingBox,\n orientedBoundingBox\n );\n }\n\n command.dirty = true;\n\n if (translucent) {\n globeTranslucencyState.updateDerivedCommands(command, frameState);\n }\n\n pushCommand(command, frameState);\n\n renderState = otherPassesRenderState;\n initialColor = otherPassesInitialColor;\n } while (imageryIndex < imageryLen);\n}\nexport default GlobeSurfaceTileProvider;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\n\n/**\n * Properties for controlling globe translucency.\n *\n * @alias GlobeTranslucency\n * @constructor\n */\nfunction GlobeTranslucency() {\n this._enabled = false;\n this._frontFaceAlpha = 1.0;\n this._frontFaceAlphaByDistance = undefined;\n this._backFaceAlpha = 1.0;\n this._backFaceAlphaByDistance = undefined;\n this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n}\n\nObject.defineProperties(GlobeTranslucency.prototype, {\n /**\n * When true, the globe is rendered as a translucent surface.\n * <br /><br />\n * The alpha is computed by blending {@link Globe#material}, {@link Globe#imageryLayers},\n * and {@link Globe#baseColor}, all of which may contain translucency, and then multiplying by\n * {@link GlobeTranslucency#frontFaceAlpha} and {@link GlobeTranslucency#frontFaceAlphaByDistance} for front faces and\n * {@link GlobeTranslucency#backFaceAlpha} and {@link GlobeTranslucency#backFaceAlphaByDistance} for back faces.\n * When the camera is underground back faces and front faces are swapped, i.e. back-facing geometry\n * is considered front facing.\n * <br /><br />\n * Translucency is disabled by default.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {Boolean}\n * @default false\n *\n * @see GlobeTranslucency#frontFaceAlpha\n * @see GlobeTranslucency#frontFaceAlphaByDistance\n * @see GlobeTranslucency#backFaceAlpha\n * @see GlobeTranslucency#backFaceAlphaByDistance\n */\n enabled: {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"enabled\", value);\n //>>includeEnd('debug');\n this._enabled = value;\n },\n },\n\n /**\n * A constant translucency to apply to front faces of the globe.\n * <br /><br />\n * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {Number}\n * @default 1.0\n *\n * @see GlobeTranslucency#enabled\n * @see GlobeTranslucency#frontFaceAlphaByDistance\n *\n * @example\n * // Set front face translucency to 0.5.\n * globe.translucency.frontFaceAlpha = 0.5;\n * globe.translucency.enabled = true;\n */\n frontFaceAlpha: {\n get: function () {\n return this._frontFaceAlpha;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"frontFaceAlpha\", value, 0.0);\n Check.typeOf.number.lessThanOrEquals(\"frontFaceAlpha\", value, 1.0);\n //>>includeEnd('debug');\n this._frontFaceAlpha = value;\n },\n },\n /**\n * Gets or sets near and far translucency properties of front faces of the globe based on the distance to the camera.\n * The translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the translucency remains clamped to the nearest bound. If undefined,\n * frontFaceAlphaByDistance will be disabled.\n * <br /><br />\n * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {NearFarScalar}\n * @default undefined\n *\n * @see GlobeTranslucency#enabled\n * @see GlobeTranslucency#frontFaceAlpha\n *\n * @example\n * // Example 1.\n * // Set front face translucency to 0.5 when the\n * // camera is 1500 meters from the surface and 1.0\n * // as the camera distance approaches 8.0e6 meters.\n * globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);\n * globe.translucency.enabled = true;\n *\n * @example\n * // Example 2.\n * // Disable front face translucency by distance\n * globe.translucency.frontFaceAlphaByDistance = undefined;\n */\n frontFaceAlphaByDistance: {\n get: function () {\n return this._frontFaceAlphaByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far < value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n this._frontFaceAlphaByDistance = NearFarScalar.clone(\n value,\n this._frontFaceAlphaByDistance\n );\n },\n },\n\n /**\n * A constant translucency to apply to back faces of the globe.\n * <br /><br />\n * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {Number}\n * @default 1.0\n *\n * @see GlobeTranslucency#enabled\n * @see GlobeTranslucency#backFaceAlphaByDistance\n *\n * @example\n * // Set back face translucency to 0.5.\n * globe.translucency.backFaceAlpha = 0.5;\n * globe.translucency.enabled = true;\n */\n backFaceAlpha: {\n get: function () {\n return this._backFaceAlpha;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"backFaceAlpha\", value, 0.0);\n Check.typeOf.number.lessThanOrEquals(\"backFaceAlpha\", value, 1.0);\n //>>includeEnd('debug');\n this._backFaceAlpha = value;\n },\n },\n /**\n * Gets or sets near and far translucency properties of back faces of the globe based on the distance to the camera.\n * The translucency will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the translucency remains clamped to the nearest bound. If undefined,\n * backFaceAlphaByDistance will be disabled.\n * <br /><br />\n * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {NearFarScalar}\n * @default undefined\n *\n * @see GlobeTranslucency#enabled\n * @see GlobeTranslucency#backFaceAlpha\n *\n * @example\n * // Example 1.\n * // Set back face translucency to 0.5 when the\n * // camera is 1500 meters from the surface and 1.0\n * // as the camera distance approaches 8.0e6 meters.\n * globe.translucency.backFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);\n * globe.translucency.enabled = true;\n *\n * @example\n * // Example 2.\n * // Disable back face translucency by distance\n * globe.translucency.backFaceAlphaByDistance = undefined;\n */\n backFaceAlphaByDistance: {\n get: function () {\n return this._backFaceAlphaByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far < value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n this._backFaceAlphaByDistance = NearFarScalar.clone(\n value,\n this._backFaceAlphaByDistance\n );\n },\n },\n\n /**\n * A property specifying a {@link Rectangle} used to limit translucency to a cartographic area.\n * Defaults to the maximum extent of cartographic coordinates.\n *\n * @memberof GlobeTranslucency.prototype\n *\n * @type {Rectangle}\n * @default {@link Rectangle.MAX_VALUE}\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n set: function (value) {\n if (!defined(value)) {\n value = Rectangle.clone(Rectangle.MAX_VALUE);\n }\n Rectangle.clone(value, this._rectangle);\n },\n },\n});\n\nexport default GlobeTranslucency;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ImageryLayer from \"./ImageryLayer.js\";\n\n/**\n * An ordered collection of imagery layers.\n *\n * @alias ImageryLayerCollection\n * @constructor\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Imagery%20Adjustment.html|Cesium Sandcastle Imagery Adjustment Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Imagery%20Layers%20Manipulation.html|Cesium Sandcastle Imagery Manipulation Demo}\n */\nfunction ImageryLayerCollection() {\n this._layers = [];\n\n /**\n * An event that is raised when a layer is added to the collection. Event handlers are passed the layer that\n * was added and the index at which it was added.\n * @type {Event}\n * @default Event()\n */\n this.layerAdded = new Event();\n\n /**\n * An event that is raised when a layer is removed from the collection. Event handlers are passed the layer that\n * was removed and the index from which it was removed.\n * @type {Event}\n * @default Event()\n */\n this.layerRemoved = new Event();\n\n /**\n * An event that is raised when a layer changes position in the collection. Event handlers are passed the layer that\n * was moved, its new index after the move, and its old index prior to the move.\n * @type {Event}\n * @default Event()\n */\n this.layerMoved = new Event();\n\n /**\n * An event that is raised when a layer is shown or hidden by setting the\n * {@link ImageryLayer#show} property. Event handlers are passed a reference to this layer,\n * the index of the layer in the collection, and a flag that is true if the layer is now\n * shown or false if it is now hidden.\n *\n * @type {Event}\n * @default Event()\n */\n this.layerShownOrHidden = new Event();\n}\n\nObject.defineProperties(ImageryLayerCollection.prototype, {\n /**\n * Gets the number of layers in this collection.\n * @memberof ImageryLayerCollection.prototype\n * @type {Number}\n */\n length: {\n get: function () {\n return this._layers.length;\n },\n },\n});\n\n/**\n * Adds a layer to the collection.\n *\n * @param {ImageryLayer} layer the layer to add.\n * @param {Number} [index] the index to add the layer at. If omitted, the layer will\n * be added on top of all existing layers.\n *\n * @exception {DeveloperError} index, if supplied, must be greater than or equal to zero and less than or equal to the number of the layers.\n */\nImageryLayerCollection.prototype.add = function (layer, index) {\n var hasIndex = defined(index);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(layer)) {\n throw new DeveloperError(\"layer is required.\");\n }\n if (hasIndex) {\n if (index < 0) {\n throw new DeveloperError(\"index must be greater than or equal to zero.\");\n } else if (index > this._layers.length) {\n throw new DeveloperError(\n \"index must be less than or equal to the number of layers.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n if (!hasIndex) {\n index = this._layers.length;\n this._layers.push(layer);\n } else {\n this._layers.splice(index, 0, layer);\n }\n\n this._update();\n this.layerAdded.raiseEvent(layer, index);\n};\n\n/**\n * Creates a new layer using the given ImageryProvider and adds it to the collection.\n *\n * @param {ImageryProvider} imageryProvider the imagery provider to create a new layer for.\n * @param {Number} [index] the index to add the layer at. If omitted, the layer will\n * added on top of all existing layers.\n * @returns {ImageryLayer} The newly created layer.\n */\nImageryLayerCollection.prototype.addImageryProvider = function (\n imageryProvider,\n index\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(imageryProvider)) {\n throw new DeveloperError(\"imageryProvider is required.\");\n }\n //>>includeEnd('debug');\n\n var layer = new ImageryLayer(imageryProvider);\n this.add(layer, index);\n return layer;\n};\n\n/**\n * Removes a layer from this collection, if present.\n *\n * @param {ImageryLayer} layer The layer to remove.\n * @param {Boolean} [destroy=true] whether to destroy the layers in addition to removing them.\n * @returns {Boolean} true if the layer was in the collection and was removed,\n * false if the layer was not in the collection.\n */\nImageryLayerCollection.prototype.remove = function (layer, destroy) {\n destroy = defaultValue(destroy, true);\n\n var index = this._layers.indexOf(layer);\n if (index !== -1) {\n this._layers.splice(index, 1);\n\n this._update();\n\n this.layerRemoved.raiseEvent(layer, index);\n\n if (destroy) {\n layer.destroy();\n }\n\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all layers from this collection.\n *\n * @param {Boolean} [destroy=true] whether to destroy the layers in addition to removing them.\n */\nImageryLayerCollection.prototype.removeAll = function (destroy) {\n destroy = defaultValue(destroy, true);\n\n var layers = this._layers;\n for (var i = 0, len = layers.length; i < len; i++) {\n var layer = layers[i];\n this.layerRemoved.raiseEvent(layer, i);\n\n if (destroy) {\n layer.destroy();\n }\n }\n\n this._layers = [];\n};\n\n/**\n * Checks to see if the collection contains a given layer.\n *\n * @param {ImageryLayer} layer the layer to check for.\n *\n * @returns {Boolean} true if the collection contains the layer, false otherwise.\n */\nImageryLayerCollection.prototype.contains = function (layer) {\n return this.indexOf(layer) !== -1;\n};\n\n/**\n * Determines the index of a given layer in the collection.\n *\n * @param {ImageryLayer} layer The layer to find the index of.\n *\n * @returns {Number} The index of the layer in the collection, or -1 if the layer does not exist in the collection.\n */\nImageryLayerCollection.prototype.indexOf = function (layer) {\n return this._layers.indexOf(layer);\n};\n\n/**\n * Gets a layer by index from the collection.\n *\n * @param {Number} index the index to retrieve.\n *\n * @returns {ImageryLayer} The imagery layer at the given index.\n */\nImageryLayerCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\", \"index\");\n }\n //>>includeEnd('debug');\n\n return this._layers[index];\n};\n\nfunction getLayerIndex(layers, layer) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(layer)) {\n throw new DeveloperError(\"layer is required.\");\n }\n //>>includeEnd('debug');\n\n var index = layers.indexOf(layer);\n\n //>>includeStart('debug', pragmas.debug);\n if (index === -1) {\n throw new DeveloperError(\"layer is not in this collection.\");\n }\n //>>includeEnd('debug');\n\n return index;\n}\n\nfunction swapLayers(collection, i, j) {\n var arr = collection._layers;\n i = CesiumMath.clamp(i, 0, arr.length - 1);\n j = CesiumMath.clamp(j, 0, arr.length - 1);\n\n if (i === j) {\n return;\n }\n\n var temp = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n\n collection._update();\n\n collection.layerMoved.raiseEvent(temp, j, i);\n}\n\n/**\n * Raises a layer up one position in the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.raise = function (layer) {\n var index = getLayerIndex(this._layers, layer);\n swapLayers(this, index, index + 1);\n};\n\n/**\n * Lowers a layer down one position in the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.lower = function (layer) {\n var index = getLayerIndex(this._layers, layer);\n swapLayers(this, index, index - 1);\n};\n\n/**\n * Raises a layer to the top of the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.raiseToTop = function (layer) {\n var index = getLayerIndex(this._layers, layer);\n if (index === this._layers.length - 1) {\n return;\n }\n this._layers.splice(index, 1);\n this._layers.push(layer);\n\n this._update();\n\n this.layerMoved.raiseEvent(layer, this._layers.length - 1, index);\n};\n\n/**\n * Lowers a layer to the bottom of the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.lowerToBottom = function (layer) {\n var index = getLayerIndex(this._layers, layer);\n if (index === 0) {\n return;\n }\n this._layers.splice(index, 1);\n this._layers.splice(0, 0, layer);\n\n this._update();\n\n this.layerMoved.raiseEvent(layer, 0, index);\n};\n\nvar applicableRectangleScratch = new Rectangle();\n\n/**\n * Asynchronously determines the imagery layer features that are intersected by a pick ray. The intersected imagery\n * layer features are found by invoking {@link ImageryProvider#pickFeatures} for each imagery layer tile intersected\n * by the pick ray. To compute a pick ray from a location on the screen, use {@link Camera.getPickRay}.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise that resolves to an array of features intersected by the pick ray.\n * If it can be quickly determined that no features are intersected (for example,\n * because no active imagery providers support {@link ImageryProvider#pickFeatures}\n * or because the pick ray does not intersect the surface), this function will\n * return undefined.\n *\n * @example\n * var pickRay = viewer.camera.getPickRay(windowPosition);\n * var featuresPromise = viewer.imageryLayers.pickImageryLayerFeatures(pickRay, viewer.scene);\n * if (!Cesium.defined(featuresPromise)) {\n * console.log('No features picked.');\n * } else {\n * Cesium.when(featuresPromise, function(features) {\n * // This function is called asynchronously when the list if picked features is available.\n * console.log('Number of features: ' + features.length);\n * if (features.length > 0) {\n * console.log('First feature name: ' + features[0].name);\n * }\n * });\n * }\n */\nImageryLayerCollection.prototype.pickImageryLayerFeatures = function (\n ray,\n scene\n) {\n // Find the picked location on the globe.\n var pickedPosition = scene.globe.pick(ray, scene);\n if (!defined(pickedPosition)) {\n return undefined;\n }\n\n var pickedLocation = scene.globe.ellipsoid.cartesianToCartographic(\n pickedPosition\n );\n\n // Find the terrain tile containing the picked location.\n var tilesToRender = scene.globe._surface._tilesToRender;\n var pickedTile;\n\n for (\n var textureIndex = 0;\n !defined(pickedTile) && textureIndex < tilesToRender.length;\n ++textureIndex\n ) {\n var tile = tilesToRender[textureIndex];\n if (Rectangle.contains(tile.rectangle, pickedLocation)) {\n pickedTile = tile;\n }\n }\n\n if (!defined(pickedTile)) {\n return undefined;\n }\n\n // Pick against all attached imagery tiles containing the pickedLocation.\n var imageryTiles = pickedTile.data.imagery;\n\n var promises = [];\n var imageryLayers = [];\n for (var i = imageryTiles.length - 1; i >= 0; --i) {\n var terrainImagery = imageryTiles[i];\n var imagery = terrainImagery.readyImagery;\n if (!defined(imagery)) {\n continue;\n }\n var provider = imagery.imageryLayer.imageryProvider;\n if (!defined(provider.pickFeatures)) {\n continue;\n }\n\n if (!Rectangle.contains(imagery.rectangle, pickedLocation)) {\n continue;\n }\n\n // If this imagery came from a parent, it may not be applicable to its entire rectangle.\n // Check the textureCoordinateRectangle.\n var applicableRectangle = applicableRectangleScratch;\n\n var epsilon = 1 / 1024; // 1/4 of a pixel in a typical 256x256 tile.\n applicableRectangle.west = CesiumMath.lerp(\n pickedTile.rectangle.west,\n pickedTile.rectangle.east,\n terrainImagery.textureCoordinateRectangle.x - epsilon\n );\n applicableRectangle.east = CesiumMath.lerp(\n pickedTile.rectangle.west,\n pickedTile.rectangle.east,\n terrainImagery.textureCoordinateRectangle.z + epsilon\n );\n applicableRectangle.south = CesiumMath.lerp(\n pickedTile.rectangle.south,\n pickedTile.rectangle.north,\n terrainImagery.textureCoordinateRectangle.y - epsilon\n );\n applicableRectangle.north = CesiumMath.lerp(\n pickedTile.rectangle.south,\n pickedTile.rectangle.north,\n terrainImagery.textureCoordinateRectangle.w + epsilon\n );\n if (!Rectangle.contains(applicableRectangle, pickedLocation)) {\n continue;\n }\n\n var promise = provider.pickFeatures(\n imagery.x,\n imagery.y,\n imagery.level,\n pickedLocation.longitude,\n pickedLocation.latitude\n );\n if (!defined(promise)) {\n continue;\n }\n\n promises.push(promise);\n imageryLayers.push(imagery.imageryLayer);\n }\n\n if (promises.length === 0) {\n return undefined;\n }\n\n return when.all(promises, function (results) {\n var features = [];\n\n for (var resultIndex = 0; resultIndex < results.length; ++resultIndex) {\n var result = results[resultIndex];\n var image = imageryLayers[resultIndex];\n\n if (defined(result) && result.length > 0) {\n for (\n var featureIndex = 0;\n featureIndex < result.length;\n ++featureIndex\n ) {\n var feature = result[featureIndex];\n feature.imageryLayer = image;\n\n // For features without a position, use the picked location.\n if (!defined(feature.position)) {\n feature.position = pickedLocation;\n }\n\n features.push(feature);\n }\n }\n }\n\n return features;\n });\n};\n\n/**\n * Updates frame state to execute any queued texture re-projections.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n */\nImageryLayerCollection.prototype.queueReprojectionCommands = function (\n frameState\n) {\n var layers = this._layers;\n for (var i = 0, len = layers.length; i < len; ++i) {\n layers[i].queueReprojectionCommands(frameState);\n }\n};\n\n/**\n * Cancels re-projection commands queued for the next frame.\n *\n * @private\n */\nImageryLayerCollection.prototype.cancelReprojections = function () {\n var layers = this._layers;\n for (var i = 0, len = layers.length; i < len; ++i) {\n layers[i].cancelReprojections();\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} true if this object was destroyed; otherwise, false.\n *\n * @see ImageryLayerCollection#destroy\n */\nImageryLayerCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by all layers in this collection. Explicitly destroying this\n * object allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector.\n * <br /><br />\n * Once this object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * layerCollection = layerCollection && layerCollection.destroy();\n *\n * @see ImageryLayerCollection#isDestroyed\n */\nImageryLayerCollection.prototype.destroy = function () {\n this.removeAll(true);\n return destroyObject(this);\n};\n\nImageryLayerCollection.prototype._update = function () {\n var isBaseLayer = true;\n var layers = this._layers;\n var layersShownOrHidden;\n var layer;\n var i, len;\n for (i = 0, len = layers.length; i < len; ++i) {\n layer = layers[i];\n\n layer._layerIndex = i;\n\n if (layer.show) {\n layer._isBaseLayer = isBaseLayer;\n isBaseLayer = false;\n } else {\n layer._isBaseLayer = false;\n }\n\n if (layer.show !== layer._show) {\n if (defined(layer._show)) {\n if (!defined(layersShownOrHidden)) {\n layersShownOrHidden = [];\n }\n layersShownOrHidden.push(layer);\n }\n layer._show = layer.show;\n }\n }\n\n if (defined(layersShownOrHidden)) {\n for (i = 0, len = layersShownOrHidden.length; i < len; ++i) {\n layer = layersShownOrHidden[i];\n this.layerShownOrHidden.raiseEvent(layer, layer._layerIndex, layer.show);\n }\n }\n};\nexport default ImageryLayerCollection;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\n\n/**\n * A set of occluders that can be used to test quadtree tiles for occlusion.\n *\n * @alias QuadtreeOccluders\n * @constructor\n * @private\n *\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid that potentially occludes tiles.\n */\nfunction QuadtreeOccluders(options) {\n this._ellipsoid = new EllipsoidalOccluder(options.ellipsoid, Cartesian3.ZERO);\n}\n\nObject.defineProperties(QuadtreeOccluders.prototype, {\n /**\n * Gets the {@link EllipsoidalOccluder} that can be used to determine if a point is\n * occluded by an {@link Ellipsoid}.\n * @type {EllipsoidalOccluder}\n * @memberof QuadtreeOccluders.prototype\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n});\nexport default QuadtreeOccluders;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * A single tile in a {@link QuadtreePrimitive}.\n *\n * @alias QuadtreeTile\n * @constructor\n * @private\n *\n * @param {Number} options.level The level of the tile in the quadtree.\n * @param {Number} options.x The X coordinate of the tile in the quadtree. 0 is the westernmost tile.\n * @param {Number} options.y The Y coordinate of the tile in the quadtree. 0 is the northernmost tile.\n * @param {TilingScheme} options.tilingScheme The tiling scheme in which this tile exists.\n * @param {QuadtreeTile} [options.parent] This tile's parent, or undefined if this is a root tile.\n */\nfunction QuadtreeTile(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options)) {\n throw new DeveloperError(\"options is required.\");\n }\n if (!defined(options.x)) {\n throw new DeveloperError(\"options.x is required.\");\n } else if (!defined(options.y)) {\n throw new DeveloperError(\"options.y is required.\");\n } else if (options.x < 0 || options.y < 0) {\n throw new DeveloperError(\n \"options.x and options.y must be greater than or equal to zero.\"\n );\n }\n if (!defined(options.level)) {\n throw new DeveloperError(\n \"options.level is required and must be greater than or equal to zero.\"\n );\n }\n if (!defined(options.tilingScheme)) {\n throw new DeveloperError(\"options.tilingScheme is required.\");\n }\n //>>includeEnd('debug');\n\n this._tilingScheme = options.tilingScheme;\n this._x = options.x;\n this._y = options.y;\n this._level = options.level;\n this._parent = options.parent;\n this._rectangle = this._tilingScheme.tileXYToRectangle(\n this._x,\n this._y,\n this._level\n );\n\n this._southwestChild = undefined;\n this._southeastChild = undefined;\n this._northwestChild = undefined;\n this._northeastChild = undefined;\n\n // TileReplacementQueue gets/sets these private properties.\n this.replacementPrevious = undefined;\n this.replacementNext = undefined;\n\n // The distance from the camera to this tile, updated when the tile is selected\n // for rendering. We can get rid of this if we have a better way to sort by\n // distance - for example, by using the natural ordering of a quadtree.\n // QuadtreePrimitive gets/sets this private property.\n this._distance = 0.0;\n this._loadPriority = 0.0;\n\n this._customData = [];\n this._frameUpdated = undefined;\n this._lastSelectionResult = TileSelectionResult.NONE;\n this._lastSelectionResultFrame = undefined;\n this._loadedCallbacks = {};\n\n /**\n * Gets or sets the current state of the tile in the tile load pipeline.\n * @type {QuadtreeTileLoadState}\n * @default {@link QuadtreeTileLoadState.START}\n */\n this.state = QuadtreeTileLoadState.START;\n\n /**\n * Gets or sets a value indicating whether or not the tile is currently renderable.\n * @type {Boolean}\n * @default false\n */\n this.renderable = false;\n\n /**\n * Gets or set a value indicating whether or not the tile was entirely upsampled from its\n * parent tile. If all four children of a parent tile were upsampled from the parent,\n * we will render the parent instead of the children even if the LOD indicates that\n * the children would be preferable.\n * @type {Boolean}\n * @default false\n */\n this.upsampledFromParent = false;\n\n /**\n * Gets or sets the additional data associated with this tile. The exact content is specific to the\n * {@link QuadtreeTileProvider}.\n * @type {Object}\n * @default undefined\n */\n this.data = undefined;\n}\n\n/**\n * Creates a rectangular set of tiles for level of detail zero, the coarsest, least detailed level.\n *\n * @memberof QuadtreeTile\n *\n * @param {TilingScheme} tilingScheme The tiling scheme for which the tiles are to be created.\n * @returns {QuadtreeTile[]} An array containing the tiles at level of detail zero, starting with the\n * tile in the northwest corner and followed by the tile (if any) to its east.\n */\nQuadtreeTile.createLevelZeroTiles = function (tilingScheme) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(tilingScheme)) {\n throw new DeveloperError(\"tilingScheme is required.\");\n }\n //>>includeEnd('debug');\n\n var numberOfLevelZeroTilesX = tilingScheme.getNumberOfXTilesAtLevel(0);\n var numberOfLevelZeroTilesY = tilingScheme.getNumberOfYTilesAtLevel(0);\n\n var result = new Array(numberOfLevelZeroTilesX * numberOfLevelZeroTilesY);\n\n var index = 0;\n for (var y = 0; y < numberOfLevelZeroTilesY; ++y) {\n for (var x = 0; x < numberOfLevelZeroTilesX; ++x) {\n result[index++] = new QuadtreeTile({\n tilingScheme: tilingScheme,\n x: x,\n y: y,\n level: 0,\n });\n }\n }\n\n return result;\n};\n\nQuadtreeTile.prototype._updateCustomData = function (\n frameNumber,\n added,\n removed\n) {\n var customData = this.customData;\n\n var i;\n var data;\n var rectangle;\n\n if (defined(added) && defined(removed)) {\n customData = customData.filter(function (value) {\n return removed.indexOf(value) === -1;\n });\n this._customData = customData;\n\n rectangle = this._rectangle;\n for (i = 0; i < added.length; ++i) {\n data = added[i];\n if (Rectangle.contains(rectangle, data.positionCartographic)) {\n customData.push(data);\n }\n }\n\n this._frameUpdated = frameNumber;\n } else {\n // interior or leaf tile, update from parent\n var parent = this._parent;\n if (defined(parent) && this._frameUpdated !== parent._frameUpdated) {\n customData.length = 0;\n\n rectangle = this._rectangle;\n var parentCustomData = parent.customData;\n for (i = 0; i < parentCustomData.length; ++i) {\n data = parentCustomData[i];\n if (Rectangle.contains(rectangle, data.positionCartographic)) {\n customData.push(data);\n }\n }\n\n this._frameUpdated = parent._frameUpdated;\n }\n }\n};\n\nObject.defineProperties(QuadtreeTile.prototype, {\n /**\n * Gets the tiling scheme used to tile the surface.\n * @memberof QuadtreeTile.prototype\n * @type {TilingScheme}\n */\n tilingScheme: {\n get: function () {\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the tile X coordinate.\n * @memberof QuadtreeTile.prototype\n * @type {Number}\n */\n x: {\n get: function () {\n return this._x;\n },\n },\n\n /**\n * Gets the tile Y coordinate.\n * @memberof QuadtreeTile.prototype\n * @type {Number}\n */\n y: {\n get: function () {\n return this._y;\n },\n },\n\n /**\n * Gets the level-of-detail, where zero is the coarsest, least-detailed.\n * @memberof QuadtreeTile.prototype\n * @type {Number}\n */\n level: {\n get: function () {\n return this._level;\n },\n },\n\n /**\n * Gets the parent tile of this tile.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile}\n */\n parent: {\n get: function () {\n return this._parent;\n },\n },\n\n /**\n * Gets the cartographic rectangle of the tile, with north, south, east and\n * west properties in radians.\n * @memberof QuadtreeTile.prototype\n * @type {Rectangle}\n */\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n\n /**\n * An array of tiles that is at the next level of the tile tree.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile[]}\n */\n children: {\n get: function () {\n return [\n this.northwestChild,\n this.northeastChild,\n this.southwestChild,\n this.southeastChild,\n ];\n },\n },\n\n /**\n * Gets the southwest child tile.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile}\n */\n southwestChild: {\n get: function () {\n if (!defined(this._southwestChild)) {\n this._southwestChild = new QuadtreeTile({\n tilingScheme: this.tilingScheme,\n x: this.x * 2,\n y: this.y * 2 + 1,\n level: this.level + 1,\n parent: this,\n });\n }\n return this._southwestChild;\n },\n },\n\n /**\n * Gets the southeast child tile.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile}\n */\n southeastChild: {\n get: function () {\n if (!defined(this._southeastChild)) {\n this._southeastChild = new QuadtreeTile({\n tilingScheme: this.tilingScheme,\n x: this.x * 2 + 1,\n y: this.y * 2 + 1,\n level: this.level + 1,\n parent: this,\n });\n }\n return this._southeastChild;\n },\n },\n\n /**\n * Gets the northwest child tile.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile}\n */\n northwestChild: {\n get: function () {\n if (!defined(this._northwestChild)) {\n this._northwestChild = new QuadtreeTile({\n tilingScheme: this.tilingScheme,\n x: this.x * 2,\n y: this.y * 2,\n level: this.level + 1,\n parent: this,\n });\n }\n return this._northwestChild;\n },\n },\n\n /**\n * Gets the northeast child tile.\n * @memberof QuadtreeTile.prototype\n * @type {QuadtreeTile}\n */\n northeastChild: {\n get: function () {\n if (!defined(this._northeastChild)) {\n this._northeastChild = new QuadtreeTile({\n tilingScheme: this.tilingScheme,\n x: this.x * 2 + 1,\n y: this.y * 2,\n level: this.level + 1,\n parent: this,\n });\n }\n return this._northeastChild;\n },\n },\n\n /**\n * An array of objects associated with this tile.\n * @memberof QuadtreeTile.prototype\n * @type {Array}\n */\n customData: {\n get: function () {\n return this._customData;\n },\n },\n\n /**\n * Gets a value indicating whether or not this tile needs further loading.\n * This property will return true if the {@link QuadtreeTile#state} is\n * <code>START</code> or <code>LOADING</code>.\n * @memberof QuadtreeTile.prototype\n * @type {Boolean}\n */\n needsLoading: {\n get: function () {\n return this.state < QuadtreeTileLoadState.DONE;\n },\n },\n\n /**\n * Gets a value indicating whether or not this tile is eligible to be unloaded.\n * Typically, a tile is ineligible to be unloaded while an asynchronous operation,\n * such as a request for data, is in progress on it. A tile will never be\n * unloaded while it is needed for rendering, regardless of the value of this\n * property. If {@link QuadtreeTile#data} is defined and has an\n * <code>eligibleForUnloading</code> property, the value of that property is returned.\n * Otherwise, this property returns true.\n * @memberof QuadtreeTile.prototype\n * @type {Boolean}\n */\n eligibleForUnloading: {\n get: function () {\n var result = true;\n\n if (defined(this.data)) {\n result = this.data.eligibleForUnloading;\n if (!defined(result)) {\n result = true;\n }\n }\n\n return result;\n },\n },\n});\n\nQuadtreeTile.prototype.findLevelZeroTile = function (levelZeroTiles, x, y) {\n var xTiles = this.tilingScheme.getNumberOfXTilesAtLevel(0);\n if (x < 0) {\n x += xTiles;\n } else if (x >= xTiles) {\n x -= xTiles;\n }\n\n if (y < 0 || y >= this.tilingScheme.getNumberOfYTilesAtLevel(0)) {\n return undefined;\n }\n\n return levelZeroTiles.filter(function (tile) {\n return tile.x === x && tile.y === y;\n })[0];\n};\n\nQuadtreeTile.prototype.findTileToWest = function (levelZeroTiles) {\n var parent = this.parent;\n if (parent === undefined) {\n return this.findLevelZeroTile(levelZeroTiles, this.x - 1, this.y);\n }\n\n if (parent.southeastChild === this) {\n return parent.southwestChild;\n } else if (parent.northeastChild === this) {\n return parent.northwestChild;\n }\n\n var westOfParent = parent.findTileToWest(levelZeroTiles);\n if (westOfParent === undefined) {\n return undefined;\n } else if (parent.southwestChild === this) {\n return westOfParent.southeastChild;\n }\n return westOfParent.northeastChild;\n};\n\nQuadtreeTile.prototype.findTileToEast = function (levelZeroTiles) {\n var parent = this.parent;\n if (parent === undefined) {\n return this.findLevelZeroTile(levelZeroTiles, this.x + 1, this.y);\n }\n\n if (parent.southwestChild === this) {\n return parent.southeastChild;\n } else if (parent.northwestChild === this) {\n return parent.northeastChild;\n }\n\n var eastOfParent = parent.findTileToEast(levelZeroTiles);\n if (eastOfParent === undefined) {\n return undefined;\n } else if (parent.southeastChild === this) {\n return eastOfParent.southwestChild;\n }\n return eastOfParent.northwestChild;\n};\n\nQuadtreeTile.prototype.findTileToSouth = function (levelZeroTiles) {\n var parent = this.parent;\n if (parent === undefined) {\n return this.findLevelZeroTile(levelZeroTiles, this.x, this.y + 1);\n }\n\n if (parent.northwestChild === this) {\n return parent.southwestChild;\n } else if (parent.northeastChild === this) {\n return parent.southeastChild;\n }\n\n var southOfParent = parent.findTileToSouth(levelZeroTiles);\n if (southOfParent === undefined) {\n return undefined;\n } else if (parent.southwestChild === this) {\n return southOfParent.northwestChild;\n }\n return southOfParent.northeastChild;\n};\n\nQuadtreeTile.prototype.findTileToNorth = function (levelZeroTiles) {\n var parent = this.parent;\n if (parent === undefined) {\n return this.findLevelZeroTile(levelZeroTiles, this.x, this.y - 1);\n }\n\n if (parent.southwestChild === this) {\n return parent.northwestChild;\n } else if (parent.southeastChild === this) {\n return parent.northeastChild;\n }\n\n var northOfParent = parent.findTileToNorth(levelZeroTiles);\n if (northOfParent === undefined) {\n return undefined;\n } else if (parent.northwestChild === this) {\n return northOfParent.southwestChild;\n }\n return northOfParent.southeastChild;\n};\n\n/**\n * Frees the resources associated with this tile and returns it to the <code>START</code>\n * {@link QuadtreeTileLoadState}. If the {@link QuadtreeTile#data} property is defined and it\n * has a <code>freeResources</code> method, the method will be invoked.\n *\n * @memberof QuadtreeTile\n */\nQuadtreeTile.prototype.freeResources = function () {\n this.state = QuadtreeTileLoadState.START;\n this.renderable = false;\n this.upsampledFromParent = false;\n\n if (defined(this.data) && defined(this.data.freeResources)) {\n this.data.freeResources();\n }\n\n freeTile(this._southwestChild);\n this._southwestChild = undefined;\n freeTile(this._southeastChild);\n this._southeastChild = undefined;\n freeTile(this._northwestChild);\n this._northwestChild = undefined;\n freeTile(this._northeastChild);\n this._northeastChild = undefined;\n};\n\nfunction freeTile(tile) {\n if (defined(tile)) {\n tile.freeResources();\n }\n}\nexport default QuadtreeTile;\n","import defined from \"../Core/defined.js\";\n\n/**\n * A priority queue of tiles to be replaced, if necessary, to make room for new tiles. The queue\n * is implemented as a linked list.\n *\n * @alias TileReplacementQueue\n * @private\n */\nfunction TileReplacementQueue() {\n this.head = undefined;\n this.tail = undefined;\n this.count = 0;\n this._lastBeforeStartOfFrame = undefined;\n}\n\n/**\n * Marks the start of the render frame. Tiles before (closer to the head) this tile in the\n * list were used last frame and must not be unloaded.\n */\nTileReplacementQueue.prototype.markStartOfRenderFrame = function () {\n this._lastBeforeStartOfFrame = this.head;\n};\n\n/**\n * Reduces the size of the queue to a specified size by unloading the least-recently used\n * tiles. Tiles that were used last frame will not be unloaded, even if that puts the number\n * of tiles above the specified maximum.\n *\n * @param {Number} maximumTiles The maximum number of tiles in the queue.\n */\nTileReplacementQueue.prototype.trimTiles = function (maximumTiles) {\n var tileToTrim = this.tail;\n var keepTrimming = true;\n while (\n keepTrimming &&\n defined(this._lastBeforeStartOfFrame) &&\n this.count > maximumTiles &&\n defined(tileToTrim)\n ) {\n // Stop trimming after we process the last tile not used in the\n // current frame.\n keepTrimming = tileToTrim !== this._lastBeforeStartOfFrame;\n\n var previous = tileToTrim.replacementPrevious;\n\n if (tileToTrim.eligibleForUnloading) {\n tileToTrim.freeResources();\n remove(this, tileToTrim);\n }\n\n tileToTrim = previous;\n }\n};\n\nfunction remove(tileReplacementQueue, item) {\n var previous = item.replacementPrevious;\n var next = item.replacementNext;\n\n if (item === tileReplacementQueue._lastBeforeStartOfFrame) {\n tileReplacementQueue._lastBeforeStartOfFrame = next;\n }\n\n if (item === tileReplacementQueue.head) {\n tileReplacementQueue.head = next;\n } else {\n previous.replacementNext = next;\n }\n\n if (item === tileReplacementQueue.tail) {\n tileReplacementQueue.tail = previous;\n } else {\n next.replacementPrevious = previous;\n }\n\n item.replacementPrevious = undefined;\n item.replacementNext = undefined;\n\n --tileReplacementQueue.count;\n}\n\n/**\n * Marks a tile as rendered this frame and moves it before the first tile that was not rendered\n * this frame.\n *\n * @param {TileReplacementQueue} item The tile that was rendered.\n */\nTileReplacementQueue.prototype.markTileRendered = function (item) {\n var head = this.head;\n if (head === item) {\n if (item === this._lastBeforeStartOfFrame) {\n this._lastBeforeStartOfFrame = item.replacementNext;\n }\n return;\n }\n\n ++this.count;\n\n if (!defined(head)) {\n // no other tiles in the list\n item.replacementPrevious = undefined;\n item.replacementNext = undefined;\n this.head = item;\n this.tail = item;\n return;\n }\n\n if (defined(item.replacementPrevious) || defined(item.replacementNext)) {\n // tile already in the list, remove from its current location\n remove(this, item);\n }\n\n item.replacementPrevious = undefined;\n item.replacementNext = head;\n head.replacementPrevious = item;\n\n this.head = item;\n};\nexport default TileReplacementQueue;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Visibility from \"../Core/Visibility.js\";\nimport QuadtreeOccluders from \"./QuadtreeOccluders.js\";\nimport QuadtreeTile from \"./QuadtreeTile.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport TileReplacementQueue from \"./TileReplacementQueue.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * Renders massive sets of data by utilizing level-of-detail and culling. The globe surface is divided into\n * a quadtree of tiles with large, low-detail tiles at the root and small, high-detail tiles at the leaves.\n * The set of tiles to render is selected by projecting an estimate of the geometric error in a tile onto\n * the screen to estimate screen-space error, in pixels, which must be below a user-specified threshold.\n * The actual content of the tiles is arbitrary and is specified using a {@link QuadtreeTileProvider}.\n *\n * @alias QuadtreePrimitive\n * @constructor\n * @private\n *\n * @param {QuadtreeTileProvider} options.tileProvider The tile provider that loads, renders, and estimates\n * the distance to individual tiles.\n * @param {Number} [options.maximumScreenSpaceError=2] The maximum screen-space error, in pixels, that is allowed.\n * A higher maximum error will render fewer tiles and improve performance, while a lower\n * value will improve visual quality.\n * @param {Number} [options.tileCacheSize=100] The maximum number of tiles that will be retained in the tile cache.\n * Note that tiles will never be unloaded if they were used for rendering the last\n * frame, so the actual number of resident tiles may be higher. The value of\n * this property will not affect visual quality.\n */\nfunction QuadtreePrimitive(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.tileProvider)) {\n throw new DeveloperError(\"options.tileProvider is required.\");\n }\n if (defined(options.tileProvider.quadtree)) {\n throw new DeveloperError(\n \"A QuadtreeTileProvider can only be used with a single QuadtreePrimitive\"\n );\n }\n //>>includeEnd('debug');\n\n this._tileProvider = options.tileProvider;\n this._tileProvider.quadtree = this;\n\n this._debug = {\n enableDebugOutput: false,\n\n maxDepth: 0,\n maxDepthVisited: 0,\n tilesVisited: 0,\n tilesCulled: 0,\n tilesRendered: 0,\n tilesWaitingForChildren: 0,\n\n lastMaxDepth: -1,\n lastMaxDepthVisited: -1,\n lastTilesVisited: -1,\n lastTilesCulled: -1,\n lastTilesRendered: -1,\n lastTilesWaitingForChildren: -1,\n\n suspendLodUpdate: false,\n };\n\n var tilingScheme = this._tileProvider.tilingScheme;\n var ellipsoid = tilingScheme.ellipsoid;\n\n this._tilesToRender = [];\n this._tileLoadQueueHigh = []; // high priority tiles are preventing refinement\n this._tileLoadQueueMedium = []; // medium priority tiles are being rendered\n this._tileLoadQueueLow = []; // low priority tiles were refined past or are non-visible parts of quads.\n this._tileReplacementQueue = new TileReplacementQueue();\n this._levelZeroTiles = undefined;\n this._loadQueueTimeSlice = 5.0;\n this._tilesInvalidated = false;\n\n this._addHeightCallbacks = [];\n this._removeHeightCallbacks = [];\n\n this._tileToUpdateHeights = [];\n this._lastTileIndex = 0;\n this._updateHeightsTimeSlice = 2.0;\n\n // If a culled tile contains _cameraPositionCartographic or _cameraReferenceFrameOriginCartographic, it will be marked\n // TileSelectionResult.CULLED_BUT_NEEDED and added to the list of tiles to update heights,\n // even though it is not rendered.\n // These are updated each frame in `selectTilesForRendering`.\n this._cameraPositionCartographic = undefined;\n this._cameraReferenceFrameOriginCartographic = undefined;\n\n /**\n * Gets or sets the maximum screen-space error, in pixels, that is allowed.\n * A higher maximum error will render fewer tiles and improve performance, while a lower\n * value will improve visual quality.\n * @type {Number}\n * @default 2\n */\n this.maximumScreenSpaceError = defaultValue(\n options.maximumScreenSpaceError,\n 2\n );\n\n /**\n * Gets or sets the maximum number of tiles that will be retained in the tile cache.\n * Note that tiles will never be unloaded if they were used for rendering the last\n * frame, so the actual number of resident tiles may be higher. The value of\n * this property will not affect visual quality.\n * @type {Number}\n * @default 100\n */\n this.tileCacheSize = defaultValue(options.tileCacheSize, 100);\n\n /**\n * Gets or sets the number of loading descendant tiles that is considered \"too many\".\n * If a tile has too many loading descendants, that tile will be loaded and rendered before any of\n * its descendants are loaded and rendered. This means more feedback for the user that something\n * is happening at the cost of a longer overall load time. Setting this to 0 will cause each\n * tile level to be loaded successively, significantly increasing load time. Setting it to a large\n * number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make\n * detail appear all at once after a long wait.\n * @type {Number}\n * @default 20\n */\n this.loadingDescendantLimit = 20;\n\n /**\n * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded.\n * Setting this to true optimizes the zoom-out experience and provides more detail in\n * newly-exposed areas when panning. The down side is that it requires loading more tiles.\n * @type {Boolean}\n * @default true\n */\n this.preloadAncestors = true;\n\n /**\n * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded.\n * Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even\n * if they are culled. Setting this to true may provide a better panning experience at the\n * cost of loading more tiles.\n * @type {Boolean}\n * @default false\n */\n this.preloadSiblings = false;\n\n this._occluders = new QuadtreeOccluders({\n ellipsoid: ellipsoid,\n });\n\n this._tileLoadProgressEvent = new Event();\n this._lastTileLoadQueueLength = 0;\n\n this._lastSelectionFrameNumber = undefined;\n}\n\nObject.defineProperties(QuadtreePrimitive.prototype, {\n /**\n * Gets the provider of {@link QuadtreeTile} instances for this quadtree.\n * @type {QuadtreeTile}\n * @memberof QuadtreePrimitive.prototype\n */\n tileProvider: {\n get: function () {\n return this._tileProvider;\n },\n },\n /**\n * Gets an event that's raised when the length of the tile load queue has changed since the last render frame. When the load queue is empty,\n * all terrain and imagery for the current view have been loaded. The event passes the new length of the tile load queue.\n *\n * @memberof QuadtreePrimitive.prototype\n * @type {Event}\n */\n tileLoadProgressEvent: {\n get: function () {\n return this._tileLoadProgressEvent;\n },\n },\n\n occluders: {\n get: function () {\n return this._occluders;\n },\n },\n});\n\n/**\n * Invalidates and frees all the tiles in the quadtree. The tiles must be reloaded\n * before they can be displayed.\n *\n * @memberof QuadtreePrimitive\n */\nQuadtreePrimitive.prototype.invalidateAllTiles = function () {\n this._tilesInvalidated = true;\n};\n\nfunction invalidateAllTiles(primitive) {\n // Clear the replacement queue\n var replacementQueue = primitive._tileReplacementQueue;\n replacementQueue.head = undefined;\n replacementQueue.tail = undefined;\n replacementQueue.count = 0;\n\n clearTileLoadQueue(primitive);\n\n // Free and recreate the level zero tiles.\n var levelZeroTiles = primitive._levelZeroTiles;\n if (defined(levelZeroTiles)) {\n for (var i = 0; i < levelZeroTiles.length; ++i) {\n var tile = levelZeroTiles[i];\n var customData = tile.customData;\n var customDataLength = customData.length;\n\n for (var j = 0; j < customDataLength; ++j) {\n var data = customData[j];\n data.level = 0;\n primitive._addHeightCallbacks.push(data);\n }\n\n levelZeroTiles[i].freeResources();\n }\n }\n\n primitive._levelZeroTiles = undefined;\n\n primitive._tileProvider.cancelReprojections();\n}\n\n/**\n * Invokes a specified function for each {@link QuadtreeTile} that is partially\n * or completely loaded.\n *\n * @param {Function} tileFunction The function to invoke for each loaded tile. The\n * function is passed a reference to the tile as its only parameter.\n */\nQuadtreePrimitive.prototype.forEachLoadedTile = function (tileFunction) {\n var tile = this._tileReplacementQueue.head;\n while (defined(tile)) {\n if (tile.state !== QuadtreeTileLoadState.START) {\n tileFunction(tile);\n }\n tile = tile.replacementNext;\n }\n};\n\n/**\n * Invokes a specified function for each {@link QuadtreeTile} that was rendered\n * in the most recent frame.\n *\n * @param {Function} tileFunction The function to invoke for each rendered tile. The\n * function is passed a reference to the tile as its only parameter.\n */\nQuadtreePrimitive.prototype.forEachRenderedTile = function (tileFunction) {\n var tilesRendered = this._tilesToRender;\n for (var i = 0, len = tilesRendered.length; i < len; ++i) {\n tileFunction(tilesRendered[i]);\n }\n};\n\n/**\n * Calls the callback when a new tile is rendered that contains the given cartographic. The only parameter\n * is the cartesian position on the tile.\n *\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Function} callback The function to be called when a new tile is loaded containing cartographic.\n * @returns {Function} The function to remove this callback from the quadtree.\n */\nQuadtreePrimitive.prototype.updateHeight = function (cartographic, callback) {\n var primitive = this;\n var object = {\n positionOnEllipsoidSurface: undefined,\n positionCartographic: cartographic,\n level: -1,\n callback: callback,\n };\n\n object.removeFunc = function () {\n var addedCallbacks = primitive._addHeightCallbacks;\n var length = addedCallbacks.length;\n for (var i = 0; i < length; ++i) {\n if (addedCallbacks[i] === object) {\n addedCallbacks.splice(i, 1);\n break;\n }\n }\n primitive._removeHeightCallbacks.push(object);\n };\n\n primitive._addHeightCallbacks.push(object);\n return object.removeFunc;\n};\n\n/**\n * Updates the tile provider imagery and continues to process the tile load queue.\n * @private\n */\nQuadtreePrimitive.prototype.update = function (frameState) {\n if (defined(this._tileProvider.update)) {\n this._tileProvider.update(frameState);\n }\n};\n\nfunction clearTileLoadQueue(primitive) {\n var debug = primitive._debug;\n debug.maxDepth = 0;\n debug.maxDepthVisited = 0;\n debug.tilesVisited = 0;\n debug.tilesCulled = 0;\n debug.tilesRendered = 0;\n debug.tilesWaitingForChildren = 0;\n\n primitive._tileLoadQueueHigh.length = 0;\n primitive._tileLoadQueueMedium.length = 0;\n primitive._tileLoadQueueLow.length = 0;\n}\n\n/**\n * Initializes values for a new render frame and prepare the tile load queue.\n * @private\n */\nQuadtreePrimitive.prototype.beginFrame = function (frameState) {\n var passes = frameState.passes;\n if (!passes.render) {\n return;\n }\n\n if (this._tilesInvalidated) {\n invalidateAllTiles(this);\n this._tilesInvalidated = false;\n }\n\n // Gets commands for any texture re-projections\n this._tileProvider.initialize(frameState);\n\n clearTileLoadQueue(this);\n\n if (this._debug.suspendLodUpdate) {\n return;\n }\n\n this._tileReplacementQueue.markStartOfRenderFrame();\n};\n\n/**\n * Selects new tiles to load based on the frame state and creates render commands.\n * @private\n */\nQuadtreePrimitive.prototype.render = function (frameState) {\n var passes = frameState.passes;\n var tileProvider = this._tileProvider;\n\n if (passes.render) {\n tileProvider.beginUpdate(frameState);\n\n selectTilesForRendering(this, frameState);\n createRenderCommandsForSelectedTiles(this, frameState);\n\n tileProvider.endUpdate(frameState);\n }\n\n if (passes.pick && this._tilesToRender.length > 0) {\n tileProvider.updateForPick(frameState);\n }\n};\n\n/**\n * Checks if the load queue length has changed since the last time we raised a queue change event - if so, raises\n * a new change event at the end of the render cycle.\n * @private\n */\nfunction updateTileLoadProgress(primitive, frameState) {\n var currentLoadQueueLength =\n primitive._tileLoadQueueHigh.length +\n primitive._tileLoadQueueMedium.length +\n primitive._tileLoadQueueLow.length;\n\n if (\n currentLoadQueueLength !== primitive._lastTileLoadQueueLength ||\n primitive._tilesInvalidated\n ) {\n frameState.afterRender.push(\n Event.prototype.raiseEvent.bind(\n primitive._tileLoadProgressEvent,\n currentLoadQueueLength\n )\n );\n primitive._lastTileLoadQueueLength = currentLoadQueueLength;\n }\n\n var debug = primitive._debug;\n if (debug.enableDebugOutput && !debug.suspendLodUpdate) {\n debug.maxDepth = primitive._tilesToRender.reduce(function (max, tile) {\n return Math.max(max, tile.level);\n }, -1);\n debug.tilesRendered = primitive._tilesToRender.length;\n\n if (\n debug.tilesVisited !== debug.lastTilesVisited ||\n debug.tilesRendered !== debug.lastTilesRendered ||\n debug.tilesCulled !== debug.lastTilesCulled ||\n debug.maxDepth !== debug.lastMaxDepth ||\n debug.tilesWaitingForChildren !== debug.lastTilesWaitingForChildren ||\n debug.maxDepthVisited !== debug.lastMaxDepthVisited\n ) {\n console.log(\n \"Visited \" +\n debug.tilesVisited +\n \", Rendered: \" +\n debug.tilesRendered +\n \", Culled: \" +\n debug.tilesCulled +\n \", Max Depth Rendered: \" +\n debug.maxDepth +\n \", Max Depth Visited: \" +\n debug.maxDepthVisited +\n \", Waiting for children: \" +\n debug.tilesWaitingForChildren\n );\n\n debug.lastTilesVisited = debug.tilesVisited;\n debug.lastTilesRendered = debug.tilesRendered;\n debug.lastTilesCulled = debug.tilesCulled;\n debug.lastMaxDepth = debug.maxDepth;\n debug.lastTilesWaitingForChildren = debug.tilesWaitingForChildren;\n debug.lastMaxDepthVisited = debug.maxDepthVisited;\n }\n }\n}\n\n/**\n * Updates terrain heights.\n * @private\n */\nQuadtreePrimitive.prototype.endFrame = function (frameState) {\n var passes = frameState.passes;\n if (!passes.render || frameState.mode === SceneMode.MORPHING) {\n // Only process the load queue for a single pass.\n // Don't process the load queue or update heights during the morph flights.\n return;\n }\n\n // Load/create resources for terrain and imagery. Prepare texture re-projections for the next frame.\n processTileLoadQueue(this, frameState);\n updateHeights(this, frameState);\n updateTileLoadProgress(this, frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof QuadtreePrimitive\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see QuadtreePrimitive#destroy\n */\nQuadtreePrimitive.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof QuadtreePrimitive\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitive = primitive && primitive.destroy();\n *\n * @see QuadtreePrimitive#isDestroyed\n */\nQuadtreePrimitive.prototype.destroy = function () {\n this._tileProvider = this._tileProvider && this._tileProvider.destroy();\n};\n\nvar comparisonPoint;\nvar centerScratch = new Cartographic();\nfunction compareDistanceToPoint(a, b) {\n var center = Rectangle.center(a.rectangle, centerScratch);\n var alon = center.longitude - comparisonPoint.longitude;\n var alat = center.latitude - comparisonPoint.latitude;\n\n center = Rectangle.center(b.rectangle, centerScratch);\n var blon = center.longitude - comparisonPoint.longitude;\n var blat = center.latitude - comparisonPoint.latitude;\n\n return alon * alon + alat * alat - (blon * blon + blat * blat);\n}\n\nvar cameraOriginScratch = new Cartesian3();\nvar rootTraversalDetails = [];\n\nfunction selectTilesForRendering(primitive, frameState) {\n var debug = primitive._debug;\n if (debug.suspendLodUpdate) {\n return;\n }\n\n // Clear the render list.\n var tilesToRender = primitive._tilesToRender;\n tilesToRender.length = 0;\n\n // We can't render anything before the level zero tiles exist.\n var i;\n var tileProvider = primitive._tileProvider;\n if (!defined(primitive._levelZeroTiles)) {\n if (tileProvider.ready) {\n var tilingScheme = tileProvider.tilingScheme;\n primitive._levelZeroTiles = QuadtreeTile.createLevelZeroTiles(\n tilingScheme\n );\n var numberOfRootTiles = primitive._levelZeroTiles.length;\n if (rootTraversalDetails.length < numberOfRootTiles) {\n rootTraversalDetails = new Array(numberOfRootTiles);\n for (i = 0; i < numberOfRootTiles; ++i) {\n if (rootTraversalDetails[i] === undefined) {\n rootTraversalDetails[i] = new TraversalDetails();\n }\n }\n }\n } else {\n // Nothing to do until the provider is ready.\n return;\n }\n }\n\n primitive._occluders.ellipsoid.cameraPosition = frameState.camera.positionWC;\n\n var tile;\n var levelZeroTiles = primitive._levelZeroTiles;\n var occluders = levelZeroTiles.length > 1 ? primitive._occluders : undefined;\n\n // Sort the level zero tiles by the distance from the center to the camera.\n // The level zero tiles aren't necessarily a nice neat quad, so we can't use the\n // quadtree ordering we use elsewhere in the tree\n comparisonPoint = frameState.camera.positionCartographic;\n levelZeroTiles.sort(compareDistanceToPoint);\n\n var customDataAdded = primitive._addHeightCallbacks;\n var customDataRemoved = primitive._removeHeightCallbacks;\n var frameNumber = frameState.frameNumber;\n\n var len;\n if (customDataAdded.length > 0 || customDataRemoved.length > 0) {\n for (i = 0, len = levelZeroTiles.length; i < len; ++i) {\n tile = levelZeroTiles[i];\n tile._updateCustomData(frameNumber, customDataAdded, customDataRemoved);\n }\n\n customDataAdded.length = 0;\n customDataRemoved.length = 0;\n }\n\n var camera = frameState.camera;\n\n primitive._cameraPositionCartographic = camera.positionCartographic;\n var cameraFrameOrigin = Matrix4.getTranslation(\n camera.transform,\n cameraOriginScratch\n );\n primitive._cameraReferenceFrameOriginCartographic = primitive.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(\n cameraFrameOrigin,\n primitive._cameraReferenceFrameOriginCartographic\n );\n\n // Traverse in depth-first, near-to-far order.\n for (i = 0, len = levelZeroTiles.length; i < len; ++i) {\n tile = levelZeroTiles[i];\n primitive._tileReplacementQueue.markTileRendered(tile);\n if (!tile.renderable) {\n queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n ++debug.tilesWaitingForChildren;\n } else {\n visitIfVisible(\n primitive,\n tile,\n tileProvider,\n frameState,\n occluders,\n false,\n rootTraversalDetails[i]\n );\n }\n }\n\n primitive._lastSelectionFrameNumber = frameNumber;\n}\n\nfunction queueTileLoad(primitive, queue, tile, frameState) {\n if (!tile.needsLoading) {\n return;\n }\n\n if (primitive.tileProvider.computeTileLoadPriority !== undefined) {\n tile._loadPriority = primitive.tileProvider.computeTileLoadPriority(\n tile,\n frameState\n );\n }\n queue.push(tile);\n}\n\n/**\n * Tracks details of traversing a tile while selecting tiles for rendering.\n * @alias TraversalDetails\n * @constructor\n * @private\n */\nfunction TraversalDetails() {\n /**\n * True if all selected (i.e. not culled or refined) tiles in this tile's subtree\n * are renderable. If the subtree is renderable, we'll render it; no drama.\n */\n this.allAreRenderable = true;\n\n /**\n * True if any tiles in this tile's subtree were rendered last frame. If any\n * were, we must render the subtree rather than this tile, because rendering\n * this tile would cause detail to vanish that was visible last frame, and\n * that's no good.\n */\n this.anyWereRenderedLastFrame = false;\n\n /**\n * Counts the number of selected tiles in this tile's subtree that are\n * not yet ready to be rendered because they need more loading. Note that\n * this value will _not_ necessarily be zero when\n * {@link TraversalDetails#allAreRenderable} is true, for subtle reasons.\n * When {@link TraversalDetails#allAreRenderable} and\n * {@link TraversalDetails#anyWereRenderedLastFrame} are both false, we\n * will render this tile instead of any tiles in its subtree and\n * the `allAreRenderable` value for this tile will reflect only whether _this_\n * tile is renderable. The `notYetRenderableCount` value, however, will still\n * reflect the total number of tiles that we are waiting on, including the\n * ones that we're not rendering. `notYetRenderableCount` is only reset\n * when a subtree is removed from the render queue because the\n * `notYetRenderableCount` exceeds the\n * {@link QuadtreePrimitive#loadingDescendantLimit}.\n */\n this.notYetRenderableCount = 0;\n}\n\nfunction TraversalQuadDetails() {\n this.southwest = new TraversalDetails();\n this.southeast = new TraversalDetails();\n this.northwest = new TraversalDetails();\n this.northeast = new TraversalDetails();\n}\n\nTraversalQuadDetails.prototype.combine = function (result) {\n var southwest = this.southwest;\n var southeast = this.southeast;\n var northwest = this.northwest;\n var northeast = this.northeast;\n\n result.allAreRenderable =\n southwest.allAreRenderable &&\n southeast.allAreRenderable &&\n northwest.allAreRenderable &&\n northeast.allAreRenderable;\n result.anyWereRenderedLastFrame =\n southwest.anyWereRenderedLastFrame ||\n southeast.anyWereRenderedLastFrame ||\n northwest.anyWereRenderedLastFrame ||\n northeast.anyWereRenderedLastFrame;\n result.notYetRenderableCount =\n southwest.notYetRenderableCount +\n southeast.notYetRenderableCount +\n northwest.notYetRenderableCount +\n northeast.notYetRenderableCount;\n};\n\nvar traversalQuadsByLevel = new Array(31); // level 30 tiles are ~2cm wide at the equator, should be good enough.\nfor (var i = 0; i < traversalQuadsByLevel.length; ++i) {\n traversalQuadsByLevel[i] = new TraversalQuadDetails();\n}\n\n/**\n * Visits a tile for possible rendering. When we call this function with a tile:\n *\n * * the tile has been determined to be visible (possibly based on a bounding volume that is not very tight-fitting)\n * * its parent tile does _not_ meet the SSE (unless ancestorMeetsSse=true, see comments below)\n * * the tile may or may not be renderable\n *\n * @private\n *\n * @param {Primitive} primitive The QuadtreePrimitive.\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to visit\n * @param {Boolean} ancestorMeetsSse True if a tile higher in the tile tree already met the SSE and we're refining further only\n * to maintain detail while that higher tile loads.\n * @param {TraversalDetails} traveralDetails On return, populated with details of how the traversal of this tile went.\n */\nfunction visitTile(\n primitive,\n frameState,\n tile,\n ancestorMeetsSse,\n traversalDetails\n) {\n var debug = primitive._debug;\n\n ++debug.tilesVisited;\n\n primitive._tileReplacementQueue.markTileRendered(tile);\n tile._updateCustomData(frameState.frameNumber);\n\n if (tile.level > debug.maxDepthVisited) {\n debug.maxDepthVisited = tile.level;\n }\n\n var meetsSse =\n screenSpaceError(primitive, frameState, tile) <\n primitive.maximumScreenSpaceError;\n\n var southwestChild = tile.southwestChild;\n var southeastChild = tile.southeastChild;\n var northwestChild = tile.northwestChild;\n var northeastChild = tile.northeastChild;\n\n var lastFrame = primitive._lastSelectionFrameNumber;\n var lastFrameSelectionResult =\n tile._lastSelectionResultFrame === lastFrame\n ? tile._lastSelectionResult\n : TileSelectionResult.NONE;\n\n var tileProvider = primitive.tileProvider;\n\n if (meetsSse || ancestorMeetsSse) {\n // This tile (or an ancestor) is the one we want to render this frame, but we'll do different things depending\n // on the state of this tile and on what we did _last_ frame.\n\n // We can render it if _any_ of the following are true:\n // 1. We rendered it (or kicked it) last frame.\n // 2. This tile was culled last frame, or it wasn't even visited because an ancestor was culled.\n // 3. The tile is completely done loading.\n // 4. a) Terrain is ready, and\n // b) All necessary imagery is ready. Necessary imagery is imagery that was rendered with this tile\n // or any descendants last frame. Such imagery is required because rendering this tile without\n // it would cause detail to disappear.\n //\n // Determining condition 4 is more expensive, so we check the others first.\n //\n // Note that even if we decide to render a tile here, it may later get \"kicked\" in favor of an ancestor.\n\n var oneRenderedLastFrame =\n TileSelectionResult.originalResult(lastFrameSelectionResult) ===\n TileSelectionResult.RENDERED;\n var twoCulledOrNotVisited =\n TileSelectionResult.originalResult(lastFrameSelectionResult) ===\n TileSelectionResult.CULLED ||\n lastFrameSelectionResult === TileSelectionResult.NONE;\n var threeCompletelyLoaded = tile.state === QuadtreeTileLoadState.DONE;\n\n var renderable =\n oneRenderedLastFrame || twoCulledOrNotVisited || threeCompletelyLoaded;\n\n if (!renderable) {\n // Check the more expensive condition 4 above. This requires details of the thing\n // we're rendering (e.g. the globe surface), so delegate it to the tile provider.\n if (defined(tileProvider.canRenderWithoutLosingDetail)) {\n renderable = tileProvider.canRenderWithoutLosingDetail(tile);\n }\n }\n\n if (renderable) {\n // Only load this tile if it (not just an ancestor) meets the SSE.\n if (meetsSse) {\n queueTileLoad(\n primitive,\n primitive._tileLoadQueueMedium,\n tile,\n frameState\n );\n }\n addTileToRenderList(primitive, tile);\n\n traversalDetails.allAreRenderable = tile.renderable;\n traversalDetails.anyWereRenderedLastFrame =\n lastFrameSelectionResult === TileSelectionResult.RENDERED;\n traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n\n tile._lastSelectionResultFrame = frameState.frameNumber;\n tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n if (!traversalDetails.anyWereRenderedLastFrame) {\n // Tile is newly-rendered this frame, so update its heights.\n primitive._tileToUpdateHeights.push(tile);\n }\n\n return;\n }\n\n // Otherwise, we can't render this tile (or its fill) because doing so would cause detail to disappear\n // that was visible last frame. Instead, keep rendering any still-visible descendants that were rendered\n // last frame and render fills for newly-visible descendants. E.g. if we were rendering level 15 last\n // frame but this frame we want level 14 and the closest renderable level <= 14 is 0, rendering level\n // zero would be pretty jarring so instead we keep rendering level 15 even though its SSE is better\n // than required. So fall through to continue traversal...\n ancestorMeetsSse = true;\n\n // Load this blocker tile with high priority, but only if this tile (not just an ancestor) meets the SSE.\n if (meetsSse) {\n queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n }\n }\n\n if (tileProvider.canRefine(tile)) {\n var allAreUpsampled =\n southwestChild.upsampledFromParent &&\n southeastChild.upsampledFromParent &&\n northwestChild.upsampledFromParent &&\n northeastChild.upsampledFromParent;\n\n if (allAreUpsampled) {\n // No point in rendering the children because they're all upsampled. Render this tile instead.\n addTileToRenderList(primitive, tile);\n\n // Rendered tile that's not waiting on children loads with medium priority.\n queueTileLoad(\n primitive,\n primitive._tileLoadQueueMedium,\n tile,\n frameState\n );\n\n // Make sure we don't unload the children and forget they're upsampled.\n primitive._tileReplacementQueue.markTileRendered(southwestChild);\n primitive._tileReplacementQueue.markTileRendered(southeastChild);\n primitive._tileReplacementQueue.markTileRendered(northwestChild);\n primitive._tileReplacementQueue.markTileRendered(northeastChild);\n\n traversalDetails.allAreRenderable = tile.renderable;\n traversalDetails.anyWereRenderedLastFrame =\n lastFrameSelectionResult === TileSelectionResult.RENDERED;\n traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n\n tile._lastSelectionResultFrame = frameState.frameNumber;\n tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n if (!traversalDetails.anyWereRenderedLastFrame) {\n // Tile is newly-rendered this frame, so update its heights.\n primitive._tileToUpdateHeights.push(tile);\n }\n\n return;\n }\n\n // SSE is not good enough, so refine.\n tile._lastSelectionResultFrame = frameState.frameNumber;\n tile._lastSelectionResult = TileSelectionResult.REFINED;\n\n var firstRenderedDescendantIndex = primitive._tilesToRender.length;\n var loadIndexLow = primitive._tileLoadQueueLow.length;\n var loadIndexMedium = primitive._tileLoadQueueMedium.length;\n var loadIndexHigh = primitive._tileLoadQueueHigh.length;\n var tilesToUpdateHeightsIndex = primitive._tileToUpdateHeights.length;\n\n // No need to add the children to the load queue because they'll be added (if necessary) when they're visited.\n visitVisibleChildrenNearToFar(\n primitive,\n southwestChild,\n southeastChild,\n northwestChild,\n northeastChild,\n frameState,\n ancestorMeetsSse,\n traversalDetails\n );\n\n // If no descendant tiles were added to the render list by the function above, it means they were all\n // culled even though this tile was deemed visible. That's pretty common.\n\n if (firstRenderedDescendantIndex !== primitive._tilesToRender.length) {\n // At least one descendant tile was added to the render list.\n // The traversalDetails tell us what happened while visiting the children.\n\n var allAreRenderable = traversalDetails.allAreRenderable;\n var anyWereRenderedLastFrame = traversalDetails.anyWereRenderedLastFrame;\n var notYetRenderableCount = traversalDetails.notYetRenderableCount;\n var queuedForLoad = false;\n\n if (!allAreRenderable && !anyWereRenderedLastFrame) {\n // Some of our descendants aren't ready to render yet, and none were rendered last frame,\n // so kick them all out of the render list and render this tile instead. Continue to load them though!\n\n // Mark the rendered descendants and their ancestors - up to this tile - as kicked.\n var renderList = primitive._tilesToRender;\n for (var i = firstRenderedDescendantIndex; i < renderList.length; ++i) {\n var workTile = renderList[i];\n while (\n workTile !== undefined &&\n workTile._lastSelectionResult !== TileSelectionResult.KICKED &&\n workTile !== tile\n ) {\n workTile._lastSelectionResult = TileSelectionResult.kick(\n workTile._lastSelectionResult\n );\n workTile = workTile.parent;\n }\n }\n\n // Remove all descendants from the render list and add this tile.\n primitive._tilesToRender.length = firstRenderedDescendantIndex;\n primitive._tileToUpdateHeights.length = tilesToUpdateHeightsIndex;\n addTileToRenderList(primitive, tile);\n\n tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n // If we're waiting on heaps of descendants, the above will take too long. So in that case,\n // load this tile INSTEAD of loading any of the descendants, and tell the up-level we're only waiting\n // on this tile. Keep doing this until we actually manage to render this tile.\n var wasRenderedLastFrame =\n lastFrameSelectionResult === TileSelectionResult.RENDERED;\n if (\n !wasRenderedLastFrame &&\n notYetRenderableCount > primitive.loadingDescendantLimit\n ) {\n // Remove all descendants from the load queues.\n primitive._tileLoadQueueLow.length = loadIndexLow;\n primitive._tileLoadQueueMedium.length = loadIndexMedium;\n primitive._tileLoadQueueHigh.length = loadIndexHigh;\n queueTileLoad(\n primitive,\n primitive._tileLoadQueueMedium,\n tile,\n frameState\n );\n traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n queuedForLoad = true;\n }\n\n traversalDetails.allAreRenderable = tile.renderable;\n traversalDetails.anyWereRenderedLastFrame = wasRenderedLastFrame;\n\n if (!wasRenderedLastFrame) {\n // Tile is newly-rendered this frame, so update its heights.\n primitive._tileToUpdateHeights.push(tile);\n }\n\n ++debug.tilesWaitingForChildren;\n }\n\n if (primitive.preloadAncestors && !queuedForLoad) {\n queueTileLoad(primitive, primitive._tileLoadQueueLow, tile, frameState);\n }\n }\n\n return;\n }\n\n tile._lastSelectionResultFrame = frameState.frameNumber;\n tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n // We'd like to refine but can't because we have no availability data for this tile's children,\n // so we have no idea if refinining would involve a load or an upsample. We'll have to finish\n // loading this tile first in order to find that out, so load this refinement blocker with\n // high priority.\n addTileToRenderList(primitive, tile);\n queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n\n traversalDetails.allAreRenderable = tile.renderable;\n traversalDetails.anyWereRenderedLastFrame =\n lastFrameSelectionResult === TileSelectionResult.RENDERED;\n traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n}\n\nfunction visitVisibleChildrenNearToFar(\n primitive,\n southwest,\n southeast,\n northwest,\n northeast,\n frameState,\n ancestorMeetsSse,\n traversalDetails\n) {\n var cameraPosition = frameState.camera.positionCartographic;\n var tileProvider = primitive._tileProvider;\n var occluders = primitive._occluders;\n\n var quadDetails = traversalQuadsByLevel[southwest.level];\n var southwestDetails = quadDetails.southwest;\n var southeastDetails = quadDetails.southeast;\n var northwestDetails = quadDetails.northwest;\n var northeastDetails = quadDetails.northeast;\n\n if (cameraPosition.longitude < southwest.rectangle.east) {\n if (cameraPosition.latitude < southwest.rectangle.north) {\n // Camera in southwest quadrant\n visitIfVisible(\n primitive,\n southwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southwestDetails\n );\n visitIfVisible(\n primitive,\n southeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southeastDetails\n );\n visitIfVisible(\n primitive,\n northwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northwestDetails\n );\n visitIfVisible(\n primitive,\n northeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northeastDetails\n );\n } else {\n // Camera in northwest quadrant\n visitIfVisible(\n primitive,\n northwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northwestDetails\n );\n visitIfVisible(\n primitive,\n southwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southwestDetails\n );\n visitIfVisible(\n primitive,\n northeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northeastDetails\n );\n visitIfVisible(\n primitive,\n southeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southeastDetails\n );\n }\n } else if (cameraPosition.latitude < southwest.rectangle.north) {\n // Camera southeast quadrant\n visitIfVisible(\n primitive,\n southeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southeastDetails\n );\n visitIfVisible(\n primitive,\n southwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southwestDetails\n );\n visitIfVisible(\n primitive,\n northeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northeastDetails\n );\n visitIfVisible(\n primitive,\n northwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northwestDetails\n );\n } else {\n // Camera in northeast quadrant\n visitIfVisible(\n primitive,\n northeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northeastDetails\n );\n visitIfVisible(\n primitive,\n northwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n northwestDetails\n );\n visitIfVisible(\n primitive,\n southeast,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southeastDetails\n );\n visitIfVisible(\n primitive,\n southwest,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n southwestDetails\n );\n }\n\n quadDetails.combine(traversalDetails);\n}\n\nfunction containsNeededPosition(primitive, tile) {\n var rectangle = tile.rectangle;\n return (\n (defined(primitive._cameraPositionCartographic) &&\n Rectangle.contains(rectangle, primitive._cameraPositionCartographic)) ||\n (defined(primitive._cameraReferenceFrameOriginCartographic) &&\n Rectangle.contains(\n rectangle,\n primitive._cameraReferenceFrameOriginCartographic\n ))\n );\n}\n\nfunction visitIfVisible(\n primitive,\n tile,\n tileProvider,\n frameState,\n occluders,\n ancestorMeetsSse,\n traversalDetails\n) {\n if (\n tileProvider.computeTileVisibility(tile, frameState, occluders) !==\n Visibility.NONE\n ) {\n return visitTile(\n primitive,\n frameState,\n tile,\n ancestorMeetsSse,\n traversalDetails\n );\n }\n\n ++primitive._debug.tilesCulled;\n primitive._tileReplacementQueue.markTileRendered(tile);\n\n traversalDetails.allAreRenderable = true;\n traversalDetails.anyWereRenderedLastFrame = false;\n traversalDetails.notYetRenderableCount = 0;\n\n if (containsNeededPosition(primitive, tile)) {\n // Load the tile(s) that contains the camera's position and\n // the origin of its reference frame with medium priority.\n // But we only need to load until the terrain is available, no need to load imagery.\n if (!defined(tile.data) || !defined(tile.data.vertexArray)) {\n queueTileLoad(\n primitive,\n primitive._tileLoadQueueMedium,\n tile,\n frameState\n );\n }\n\n var lastFrame = primitive._lastSelectionFrameNumber;\n var lastFrameSelectionResult =\n tile._lastSelectionResultFrame === lastFrame\n ? tile._lastSelectionResult\n : TileSelectionResult.NONE;\n if (\n lastFrameSelectionResult !== TileSelectionResult.CULLED_BUT_NEEDED &&\n lastFrameSelectionResult !== TileSelectionResult.RENDERED\n ) {\n primitive._tileToUpdateHeights.push(tile);\n }\n\n tile._lastSelectionResult = TileSelectionResult.CULLED_BUT_NEEDED;\n } else if (primitive.preloadSiblings || tile.level === 0) {\n // Load culled level zero tiles with low priority.\n // For all other levels, only load culled tiles if preloadSiblings is enabled.\n queueTileLoad(primitive, primitive._tileLoadQueueLow, tile, frameState);\n tile._lastSelectionResult = TileSelectionResult.CULLED;\n } else {\n tile._lastSelectionResult = TileSelectionResult.CULLED;\n }\n\n tile._lastSelectionResultFrame = frameState.frameNumber;\n}\n\nfunction screenSpaceError(primitive, frameState, tile) {\n if (\n frameState.mode === SceneMode.SCENE2D ||\n frameState.camera.frustum instanceof OrthographicFrustum ||\n frameState.camera.frustum instanceof OrthographicOffCenterFrustum\n ) {\n return screenSpaceError2D(primitive, frameState, tile);\n }\n\n var maxGeometricError = primitive._tileProvider.getLevelMaximumGeometricError(\n tile.level\n );\n\n var distance = tile._distance;\n var height = frameState.context.drawingBufferHeight;\n var sseDenominator = frameState.camera.frustum.sseDenominator;\n\n var error = (maxGeometricError * height) / (distance * sseDenominator);\n\n if (frameState.fog.enabled) {\n error -=\n CesiumMath.fog(distance, frameState.fog.density) * frameState.fog.sse;\n }\n\n error /= frameState.pixelRatio;\n\n return error;\n}\n\nfunction screenSpaceError2D(primitive, frameState, tile) {\n var camera = frameState.camera;\n var frustum = camera.frustum;\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n var context = frameState.context;\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n\n var maxGeometricError = primitive._tileProvider.getLevelMaximumGeometricError(\n tile.level\n );\n var pixelSize =\n Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) /\n Math.max(width, height);\n var error = maxGeometricError / pixelSize;\n\n if (frameState.fog.enabled && frameState.mode !== SceneMode.SCENE2D) {\n error -=\n CesiumMath.fog(tile._distance, frameState.fog.density) *\n frameState.fog.sse;\n }\n\n error /= frameState.pixelRatio;\n\n return error;\n}\n\nfunction addTileToRenderList(primitive, tile) {\n primitive._tilesToRender.push(tile);\n}\n\nfunction processTileLoadQueue(primitive, frameState) {\n var tileLoadQueueHigh = primitive._tileLoadQueueHigh;\n var tileLoadQueueMedium = primitive._tileLoadQueueMedium;\n var tileLoadQueueLow = primitive._tileLoadQueueLow;\n\n if (\n tileLoadQueueHigh.length === 0 &&\n tileLoadQueueMedium.length === 0 &&\n tileLoadQueueLow.length === 0\n ) {\n return;\n }\n\n // Remove any tiles that were not used this frame beyond the number\n // we're allowed to keep.\n primitive._tileReplacementQueue.trimTiles(primitive.tileCacheSize);\n\n var endTime = getTimestamp() + primitive._loadQueueTimeSlice;\n var tileProvider = primitive._tileProvider;\n\n var didSomeLoading = processSinglePriorityLoadQueue(\n primitive,\n frameState,\n tileProvider,\n endTime,\n tileLoadQueueHigh,\n false\n );\n didSomeLoading = processSinglePriorityLoadQueue(\n primitive,\n frameState,\n tileProvider,\n endTime,\n tileLoadQueueMedium,\n didSomeLoading\n );\n processSinglePriorityLoadQueue(\n primitive,\n frameState,\n tileProvider,\n endTime,\n tileLoadQueueLow,\n didSomeLoading\n );\n}\n\nfunction sortByLoadPriority(a, b) {\n return a._loadPriority - b._loadPriority;\n}\n\nfunction processSinglePriorityLoadQueue(\n primitive,\n frameState,\n tileProvider,\n endTime,\n loadQueue,\n didSomeLoading\n) {\n if (tileProvider.computeTileLoadPriority !== undefined) {\n loadQueue.sort(sortByLoadPriority);\n }\n\n for (\n var i = 0, len = loadQueue.length;\n i < len && (getTimestamp() < endTime || !didSomeLoading);\n ++i\n ) {\n var tile = loadQueue[i];\n primitive._tileReplacementQueue.markTileRendered(tile);\n tileProvider.loadTile(frameState, tile);\n didSomeLoading = true;\n }\n\n return didSomeLoading;\n}\n\nvar scratchRay = new Ray();\nvar scratchCartographic = new Cartographic();\nvar scratchPosition = new Cartesian3();\nvar scratchArray = [];\n\nfunction updateHeights(primitive, frameState) {\n if (!primitive.tileProvider.ready) {\n return;\n }\n\n var tryNextFrame = scratchArray;\n tryNextFrame.length = 0;\n var tilesToUpdateHeights = primitive._tileToUpdateHeights;\n var terrainProvider = primitive._tileProvider.terrainProvider;\n\n var startTime = getTimestamp();\n var timeSlice = primitive._updateHeightsTimeSlice;\n var endTime = startTime + timeSlice;\n\n var mode = frameState.mode;\n var projection = frameState.mapProjection;\n var ellipsoid = primitive.tileProvider.tilingScheme.ellipsoid;\n var i;\n\n while (tilesToUpdateHeights.length > 0) {\n var tile = tilesToUpdateHeights[0];\n if (!defined(tile.data) || !defined(tile.data.mesh)) {\n // Tile isn't loaded enough yet, so try again next frame if this tile is still\n // being rendered.\n var selectionResult =\n tile._lastSelectionResultFrame === primitive._lastSelectionFrameNumber\n ? tile._lastSelectionResult\n : TileSelectionResult.NONE;\n if (\n selectionResult === TileSelectionResult.RENDERED ||\n selectionResult === TileSelectionResult.CULLED_BUT_NEEDED\n ) {\n tryNextFrame.push(tile);\n }\n tilesToUpdateHeights.shift();\n primitive._lastTileIndex = 0;\n continue;\n }\n var customData = tile.customData;\n var customDataLength = customData.length;\n\n var timeSliceMax = false;\n for (i = primitive._lastTileIndex; i < customDataLength; ++i) {\n var data = customData[i];\n\n if (tile.level > data.level) {\n if (!defined(data.positionOnEllipsoidSurface)) {\n // cartesian has to be on the ellipsoid surface for `ellipsoid.geodeticSurfaceNormal`\n data.positionOnEllipsoidSurface = Cartesian3.fromRadians(\n data.positionCartographic.longitude,\n data.positionCartographic.latitude,\n 0.0,\n ellipsoid\n );\n }\n\n if (mode === SceneMode.SCENE3D) {\n var surfaceNormal = ellipsoid.geodeticSurfaceNormal(\n data.positionOnEllipsoidSurface,\n scratchRay.direction\n );\n\n // compute origin point\n\n // Try to find the intersection point between the surface normal and z-axis.\n // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n var rayOrigin = ellipsoid.getSurfaceNormalIntersectionWithZAxis(\n data.positionOnEllipsoidSurface,\n 11500.0,\n scratchRay.origin\n );\n\n // Theoretically, not with Earth datums, the intersection point can be outside the ellipsoid\n if (!defined(rayOrigin)) {\n // intersection point is outside the ellipsoid, try other value\n // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n var minimumHeight;\n if (defined(tile.data.tileBoundingRegion)) {\n minimumHeight = tile.data.tileBoundingRegion.minimumHeight;\n }\n var magnitude = Math.min(\n defaultValue(minimumHeight, 0.0),\n -11500.0\n );\n\n // multiply by the *positive* value of the magnitude\n var vectorToMinimumPoint = Cartesian3.multiplyByScalar(\n surfaceNormal,\n Math.abs(magnitude) + 1,\n scratchPosition\n );\n Cartesian3.subtract(\n data.positionOnEllipsoidSurface,\n vectorToMinimumPoint,\n scratchRay.origin\n );\n }\n } else {\n Cartographic.clone(data.positionCartographic, scratchCartographic);\n\n // minimum height for the terrain set, need to get this information from the terrain provider\n scratchCartographic.height = -11500.0;\n projection.project(scratchCartographic, scratchPosition);\n Cartesian3.fromElements(\n scratchPosition.z,\n scratchPosition.x,\n scratchPosition.y,\n scratchPosition\n );\n Cartesian3.clone(scratchPosition, scratchRay.origin);\n Cartesian3.clone(Cartesian3.UNIT_X, scratchRay.direction);\n }\n\n var position = tile.data.pick(\n scratchRay,\n mode,\n projection,\n false,\n scratchPosition\n );\n if (defined(position)) {\n data.callback(position);\n data.level = tile.level;\n }\n } else if (tile.level === data.level) {\n var children = tile.children;\n var childrenLength = children.length;\n\n var child;\n for (var j = 0; j < childrenLength; ++j) {\n child = children[j];\n if (Rectangle.contains(child.rectangle, data.positionCartographic)) {\n break;\n }\n }\n\n var tileDataAvailable = terrainProvider.getTileDataAvailable(\n child.x,\n child.y,\n child.level\n );\n var parentTile = tile.parent;\n if (\n (defined(tileDataAvailable) && !tileDataAvailable) ||\n (defined(parentTile) &&\n defined(parentTile.data) &&\n defined(parentTile.data.terrainData) &&\n !parentTile.data.terrainData.isChildAvailable(\n parentTile.x,\n parentTile.y,\n child.x,\n child.y\n ))\n ) {\n data.removeFunc();\n }\n }\n\n if (getTimestamp() >= endTime) {\n timeSliceMax = true;\n break;\n }\n }\n\n if (timeSliceMax) {\n primitive._lastTileIndex = i;\n break;\n } else {\n primitive._lastTileIndex = 0;\n tilesToUpdateHeights.shift();\n }\n }\n for (i = 0; i < tryNextFrame.length; i++) {\n tilesToUpdateHeights.push(tryNextFrame[i]);\n }\n}\n\nfunction createRenderCommandsForSelectedTiles(primitive, frameState) {\n var tileProvider = primitive._tileProvider;\n var tilesToRender = primitive._tilesToRender;\n\n for (var i = 0, len = tilesToRender.length; i < len; ++i) {\n var tile = tilesToRender[i];\n tileProvider.showTileThisFrame(tile, frameState);\n }\n}\nexport default QuadtreePrimitive;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidTerrainProvider from \"../Core/EllipsoidTerrainProvider.js\";\nimport Event from \"../Core/Event.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport GlobeFS from \"../Shaders/GlobeFS.js\";\nimport GlobeVS from \"../Shaders/GlobeVS.js\";\nimport GroundAtmosphere from \"../Shaders/GroundAtmosphere.js\";\nimport when from \"../ThirdParty/when.js\";\nimport GlobeSurfaceShaderSet from \"./GlobeSurfaceShaderSet.js\";\nimport GlobeSurfaceTileProvider from \"./GlobeSurfaceTileProvider.js\";\nimport GlobeTranslucency from \"./GlobeTranslucency.js\";\nimport ImageryLayerCollection from \"./ImageryLayerCollection.js\";\nimport QuadtreePrimitive from \"./QuadtreePrimitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\n/**\n * The globe rendered in the scene, including its terrain ({@link Globe#terrainProvider})\n * and imagery layers ({@link Globe#imageryLayers}). Access the globe using {@link Scene#globe}.\n *\n * @alias Globe\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] Determines the size and shape of the\n * globe.\n */\nfunction Globe(ellipsoid) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n var terrainProvider = new EllipsoidTerrainProvider({\n ellipsoid: ellipsoid,\n });\n var imageryLayerCollection = new ImageryLayerCollection();\n\n this._ellipsoid = ellipsoid;\n this._imageryLayerCollection = imageryLayerCollection;\n\n this._surfaceShaderSet = new GlobeSurfaceShaderSet();\n this._material = undefined;\n\n this._surface = new QuadtreePrimitive({\n tileProvider: new GlobeSurfaceTileProvider({\n terrainProvider: terrainProvider,\n imageryLayers: imageryLayerCollection,\n surfaceShaderSet: this._surfaceShaderSet,\n }),\n });\n\n this._terrainProvider = terrainProvider;\n this._terrainProviderChanged = new Event();\n\n this._undergroundColor = Color.clone(Color.BLACK);\n this._undergroundColorAlphaByDistance = new NearFarScalar(\n ellipsoid.maximumRadius / 1000.0,\n 0.0,\n ellipsoid.maximumRadius / 5.0,\n 1.0\n );\n\n this._translucency = new GlobeTranslucency();\n\n makeShadersDirty(this);\n\n /**\n * Determines if the globe will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = true;\n\n this._oceanNormalMapResourceDirty = true;\n this._oceanNormalMapResource = new Resource({\n url: buildModuleUrl(\"Assets/Textures/waterNormalsSmall.jpg\"),\n });\n\n /**\n * The maximum screen-space error used to drive level-of-detail refinement. Higher\n * values will provide better performance but lower visual quality.\n *\n * @type {Number}\n * @default 2\n */\n this.maximumScreenSpaceError = 2;\n\n /**\n * The size of the terrain tile cache, expressed as a number of tiles. Any additional\n * tiles beyond this number will be freed, as long as they aren't needed for rendering\n * this frame. A larger number will consume more memory but will show detail faster\n * when, for example, zooming out and then back in.\n *\n * @type {Number}\n * @default 100\n */\n this.tileCacheSize = 100;\n\n /**\n * Gets or sets the number of loading descendant tiles that is considered \"too many\".\n * If a tile has too many loading descendants, that tile will be loaded and rendered before any of\n * its descendants are loaded and rendered. This means more feedback for the user that something\n * is happening at the cost of a longer overall load time. Setting this to 0 will cause each\n * tile level to be loaded successively, significantly increasing load time. Setting it to a large\n * number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make\n * detail appear all at once after a long wait.\n * @type {Number}\n * @default 20\n */\n this.loadingDescendantLimit = 20;\n\n /**\n * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded.\n * Setting this to true optimizes the zoom-out experience and provides more detail in\n * newly-exposed areas when panning. The down side is that it requires loading more tiles.\n * @type {Boolean}\n * @default true\n */\n this.preloadAncestors = true;\n\n /**\n * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded.\n * Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even\n * if they are culled. Setting this to true may provide a better panning experience at the\n * cost of loading more tiles.\n * @type {Boolean}\n * @default false\n */\n this.preloadSiblings = false;\n\n /**\n * The color to use to highlight terrain fill tiles. If undefined, fill tiles are not\n * highlighted at all. The alpha value is used to alpha blend with the tile's\n * actual color. Because terrain fill tiles do not represent the actual terrain surface,\n * it may be useful in some applications to indicate visually that they are not to be trusted.\n * @type {Color}\n * @default undefined\n */\n this.fillHighlightColor = undefined;\n\n /**\n * Enable lighting the globe with the scene's light source.\n *\n * @type {Boolean}\n * @default false\n */\n this.enableLighting = false;\n\n /**\n * Enable dynamic lighting effects on atmosphere and fog. This only takes effect\n * when <code>enableLighting</code> is <code>true</code>.\n *\n * @type {Boolean}\n * @default true\n */\n this.dynamicAtmosphereLighting = true;\n\n /**\n * Whether dynamic atmosphere lighting uses the sun direction instead of the scene's\n * light direction. This only takes effect when <code>enableLighting</code> and\n * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n *\n * @type {Boolean}\n * @default false\n */\n this.dynamicAtmosphereLightingFromSun = false;\n\n /**\n * Enable the ground atmosphere, which is drawn over the globe when viewed from a distance between <code>lightingFadeInDistance</code> and <code>lightingFadeOutDistance</code>.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Ground%20Atmosphere.html|Ground atmosphere demo in Sandcastle}\n *\n * @type {Boolean}\n * @default true\n */\n this.showGroundAtmosphere = true;\n\n /**\n * The distance where everything becomes lit. This only takes effect\n * when <code>enableLighting</code> or <code>showGroundAtmosphere</code> is <code>true</code>.\n *\n * @type {Number}\n * @default 10000000.0\n */\n this.lightingFadeOutDistance = 1.0e7;\n\n /**\n * The distance where lighting resumes. This only takes effect\n * when <code>enableLighting</code> or <code>showGroundAtmosphere</code> is <code>true</code>.\n *\n * @type {Number}\n * @default 20000000.0\n */\n this.lightingFadeInDistance = 2.0e7;\n\n /**\n * The distance where the darkness of night from the ground atmosphere fades out to a lit ground atmosphere.\n * This only takes effect when <code>showGroundAtmosphere</code>, <code>enableLighting</code>, and\n * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n *\n * @type {Number}\n * @default 10000000.0\n */\n this.nightFadeOutDistance = 1.0e7;\n\n /**\n * The distance where the darkness of night from the ground atmosphere fades in to an unlit ground atmosphere.\n * This only takes effect when <code>showGroundAtmosphere</code>, <code>enableLighting</code>, and\n * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n *\n * @type {Number}\n * @default 50000000.0\n */\n this.nightFadeInDistance = 5.0e7;\n\n /**\n * True if an animated wave effect should be shown in areas of the globe\n * covered by water; otherwise, false. This property is ignored if the\n * <code>terrainProvider</code> does not provide a water mask.\n *\n * @type {Boolean}\n * @default true\n */\n this.showWaterEffect = true;\n\n /**\n * True if primitives such as billboards, polylines, labels, etc. should be depth-tested\n * against the terrain surface, or false if such primitives should always be drawn on top\n * of terrain unless they're on the opposite side of the globe. The disadvantage of depth\n * testing primitives against terrain is that slight numerical noise or terrain level-of-detail\n * switched can sometimes make a primitive that should be on the surface disappear underneath it.\n *\n * @type {Boolean}\n * @default false\n *\n */\n this.depthTestAgainstTerrain = false;\n\n /**\n * Determines whether the globe casts or receives shadows from light sources. Setting the globe\n * to cast shadows may impact performance since the terrain is rendered again from the light's perspective.\n * Currently only terrain that is in view casts shadows. By default the globe does not cast shadows.\n *\n * @type {ShadowMode}\n * @default ShadowMode.RECEIVE_ONLY\n */\n this.shadows = ShadowMode.RECEIVE_ONLY;\n\n /**\n * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A hue shift of 1.0 indicates a complete rotation of the hues available.\n * @type {Number}\n * @default 0.0\n */\n this.atmosphereHueShift = 0.0;\n\n /**\n * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A saturation shift of -1.0 is monochrome.\n * @type {Number}\n * @default 0.0\n */\n this.atmosphereSaturationShift = 0.0;\n\n /**\n * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A brightness shift of -1.0 is complete darkness, which will let space show through.\n * @type {Number}\n * @default 0.0\n */\n this.atmosphereBrightnessShift = 0.0;\n\n /**\n * Whether to show terrain skirts. Terrain skirts are geometry extending downwards from a tile's edges used to hide seams between neighboring tiles.\n * Skirts are always hidden when the camera is underground or translucency is enabled.\n *\n * @type {Boolean}\n * @default true\n */\n this.showSkirts = true;\n\n /**\n * Whether to cull back-facing terrain. Back faces are not culled when the camera is underground or translucency is enabled.\n *\n * @type {Boolean}\n * @default true\n */\n this.backFaceCulling = true;\n\n this._oceanNormalMap = undefined;\n this._zoomedOutOceanSpecularIntensity = undefined;\n}\n\nObject.defineProperties(Globe.prototype, {\n /**\n * Gets an ellipsoid describing the shape of this globe.\n * @memberof Globe.prototype\n * @type {Ellipsoid}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n /**\n * Gets the collection of image layers that will be rendered on this globe.\n * @memberof Globe.prototype\n * @type {ImageryLayerCollection}\n */\n imageryLayers: {\n get: function () {\n return this._imageryLayerCollection;\n },\n },\n /**\n * Gets an event that's raised when an imagery layer is added, shown, hidden, moved, or removed.\n *\n * @memberof Globe.prototype\n * @type {Event}\n * @readonly\n */\n imageryLayersUpdatedEvent: {\n get: function () {\n return this._surface.tileProvider.imageryLayersUpdatedEvent;\n },\n },\n /**\n * Returns <code>true</code> when the tile load queue is empty, <code>false</code> otherwise. When the load queue is empty,\n * all terrain and imagery for the current view have been loaded.\n * @memberof Globe.prototype\n * @type {Boolean}\n * @readonly\n */\n tilesLoaded: {\n get: function () {\n if (!defined(this._surface)) {\n return true;\n }\n return (\n this._surface.tileProvider.ready &&\n this._surface._tileLoadQueueHigh.length === 0 &&\n this._surface._tileLoadQueueMedium.length === 0 &&\n this._surface._tileLoadQueueLow.length === 0\n );\n },\n },\n /**\n * Gets or sets the color of the globe when no imagery is available.\n * @memberof Globe.prototype\n * @type {Color}\n */\n baseColor: {\n get: function () {\n return this._surface.tileProvider.baseColor;\n },\n set: function (value) {\n this._surface.tileProvider.baseColor = value;\n },\n },\n /**\n * A property specifying a {@link ClippingPlaneCollection} used to selectively disable rendering on the outside of each plane.\n *\n * @memberof Globe.prototype\n * @type {ClippingPlaneCollection}\n */\n clippingPlanes: {\n get: function () {\n return this._surface.tileProvider.clippingPlanes;\n },\n set: function (value) {\n this._surface.tileProvider.clippingPlanes = value;\n },\n },\n /**\n * A property specifying a {@link Rectangle} used to limit globe rendering to a cartographic area.\n * Defaults to the maximum extent of cartographic coordinates.\n *\n * @memberof Globe.prototype\n * @type {Rectangle}\n * @default {@link Rectangle.MAX_VALUE}\n */\n cartographicLimitRectangle: {\n get: function () {\n return this._surface.tileProvider.cartographicLimitRectangle;\n },\n set: function (value) {\n if (!defined(value)) {\n value = Rectangle.clone(Rectangle.MAX_VALUE);\n }\n this._surface.tileProvider.cartographicLimitRectangle = value;\n },\n },\n /**\n * The normal map to use for rendering waves in the ocean. Setting this property will\n * only have an effect if the configured terrain provider includes a water mask.\n * @memberof Globe.prototype\n * @type {String}\n * @default buildModuleUrl('Assets/Textures/waterNormalsSmall.jpg')\n */\n oceanNormalMapUrl: {\n get: function () {\n return this._oceanNormalMapResource.url;\n },\n set: function (value) {\n this._oceanNormalMapResource.url = value;\n this._oceanNormalMapResourceDirty = true;\n },\n },\n /**\n * The terrain provider providing surface geometry for this globe.\n * @type {TerrainProvider}\n *\n * @memberof Globe.prototype\n * @type {TerrainProvider}\n *\n */\n terrainProvider: {\n get: function () {\n return this._terrainProvider;\n },\n set: function (value) {\n if (value !== this._terrainProvider) {\n this._terrainProvider = value;\n this._terrainProviderChanged.raiseEvent(value);\n if (defined(this._material)) {\n makeShadersDirty(this);\n }\n }\n },\n },\n /**\n * Gets an event that's raised when the terrain provider is changed\n *\n * @memberof Globe.prototype\n * @type {Event}\n * @readonly\n */\n terrainProviderChanged: {\n get: function () {\n return this._terrainProviderChanged;\n },\n },\n /**\n * Gets an event that's raised when the length of the tile load queue has changed since the last render frame. When the load queue is empty,\n * all terrain and imagery for the current view have been loaded. The event passes the new length of the tile load queue.\n *\n * @memberof Globe.prototype\n * @type {Event}\n */\n tileLoadProgressEvent: {\n get: function () {\n return this._surface.tileLoadProgressEvent;\n },\n },\n\n /**\n * Gets or sets the material appearance of the Globe. This can be one of several built-in {@link Material} objects or a custom material, scripted with\n * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n * @memberof Globe.prototype\n * @type {Material}\n */\n material: {\n get: function () {\n return this._material;\n },\n set: function (material) {\n if (this._material !== material) {\n this._material = material;\n makeShadersDirty(this);\n }\n },\n },\n\n /**\n * The color to render the back side of the globe when the camera is underground or the globe is translucent,\n * blended with the globe color based on the camera's distance.\n * <br /><br />\n * To disable underground coloring, set <code>undergroundColor</code> to <code>undefined</code>.\n *\n * @memberof Globe.prototype\n * @type {Color}\n * @default {@link Color.BLACK}\n *\n * @see Globe#undergroundColorAlphaByDistance\n */\n undergroundColor: {\n get: function () {\n return this._undergroundColor;\n },\n set: function (value) {\n this._undergroundColor = Color.clone(value, this._undergroundColor);\n },\n },\n\n /**\n * Gets or sets the near and far distance for blending {@link Globe#undergroundColor} with the globe color.\n * The alpha will interpolate between the {@link NearFarScalar#nearValue} and\n * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n * Outside of these ranges the alpha remains clamped to the nearest bound. If undefined,\n * the underground color will not be blended with the globe color.\n * <br /> <br />\n * When the camera is above the ellipsoid the distance is computed from the nearest\n * point on the ellipsoid instead of the camera's position.\n *\n * @memberof Globe.prototype\n * @type {NearFarScalar}\n *\n * @see Globe#undergroundColor\n *\n */\n undergroundColorAlphaByDistance: {\n get: function () {\n return this._undergroundColorAlphaByDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value.far < value.near) {\n throw new DeveloperError(\n \"far distance must be greater than near distance.\"\n );\n }\n //>>includeEnd('debug');\n this._undergroundColorAlphaByDistance = NearFarScalar.clone(\n value,\n this._undergroundColorAlphaByDistance\n );\n },\n },\n\n /**\n * Properties for controlling globe translucency.\n *\n * @memberof Globe.prototype\n * @type {GlobeTranslucency}\n */\n translucency: {\n get: function () {\n return this._translucency;\n },\n },\n});\n\nfunction makeShadersDirty(globe) {\n var defines = [];\n\n var requireNormals =\n defined(globe._material) &&\n (globe._material.shaderSource.match(/slope/) ||\n globe._material.shaderSource.match(\"normalEC\"));\n\n var fragmentSources = [GroundAtmosphere];\n if (\n defined(globe._material) &&\n (!requireNormals || globe._terrainProvider.requestVertexNormals)\n ) {\n fragmentSources.push(globe._material.shaderSource);\n defines.push(\"APPLY_MATERIAL\");\n globe._surface._tileProvider.materialUniformMap = globe._material._uniforms;\n } else {\n globe._surface._tileProvider.materialUniformMap = undefined;\n }\n fragmentSources.push(GlobeFS);\n\n globe._surfaceShaderSet.baseVertexShaderSource = new ShaderSource({\n sources: [GroundAtmosphere, GlobeVS],\n defines: defines,\n });\n\n globe._surfaceShaderSet.baseFragmentShaderSource = new ShaderSource({\n sources: fragmentSources,\n defines: defines,\n });\n globe._surfaceShaderSet.material = globe._material;\n}\n\nfunction createComparePickTileFunction(rayOrigin) {\n return function (a, b) {\n var aDist = BoundingSphere.distanceSquaredTo(\n a.pickBoundingSphere,\n rayOrigin\n );\n var bDist = BoundingSphere.distanceSquaredTo(\n b.pickBoundingSphere,\n rayOrigin\n );\n\n return aDist - bDist;\n };\n}\n\nvar scratchArray = [];\nvar scratchSphereIntersectionResult = {\n start: 0.0,\n stop: 0.0,\n};\n\n/**\n * Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @param {Boolean} [cullBackFaces=true] Set to true to not pick back faces.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found. The returned position is in projected coordinates for 2D and Columbus View.\n *\n * @private\n */\nGlobe.prototype.pickWorldCoordinates = function (\n ray,\n scene,\n cullBackFaces,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(ray)) {\n throw new DeveloperError(\"ray is required\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required\");\n }\n //>>includeEnd('debug');\n\n cullBackFaces = defaultValue(cullBackFaces, true);\n\n var mode = scene.mode;\n var projection = scene.mapProjection;\n\n var sphereIntersections = scratchArray;\n sphereIntersections.length = 0;\n\n var tilesToRender = this._surface._tilesToRender;\n var length = tilesToRender.length;\n\n var tile;\n var i;\n\n for (i = 0; i < length; ++i) {\n tile = tilesToRender[i];\n var surfaceTile = tile.data;\n\n if (!defined(surfaceTile)) {\n continue;\n }\n\n var boundingVolume = surfaceTile.pickBoundingSphere;\n if (mode !== SceneMode.SCENE3D) {\n surfaceTile.pickBoundingSphere = boundingVolume = BoundingSphere.fromRectangleWithHeights2D(\n tile.rectangle,\n projection,\n surfaceTile.tileBoundingRegion.minimumHeight,\n surfaceTile.tileBoundingRegion.maximumHeight,\n boundingVolume\n );\n Cartesian3.fromElements(\n boundingVolume.center.z,\n boundingVolume.center.x,\n boundingVolume.center.y,\n boundingVolume.center\n );\n } else if (defined(surfaceTile.renderedMesh)) {\n BoundingSphere.clone(\n surfaceTile.renderedMesh.boundingSphere3D,\n boundingVolume\n );\n } else {\n // So wait how did we render this thing then? It shouldn't be possible to get here.\n continue;\n }\n\n var boundingSphereIntersection = IntersectionTests.raySphere(\n ray,\n boundingVolume,\n scratchSphereIntersectionResult\n );\n if (defined(boundingSphereIntersection)) {\n sphereIntersections.push(surfaceTile);\n }\n }\n\n sphereIntersections.sort(createComparePickTileFunction(ray.origin));\n\n var intersection;\n length = sphereIntersections.length;\n for (i = 0; i < length; ++i) {\n intersection = sphereIntersections[i].pick(\n ray,\n scene.mode,\n scene.mapProjection,\n cullBackFaces,\n result\n );\n if (defined(intersection)) {\n break;\n }\n }\n\n return intersection;\n};\n\nvar cartoScratch = new Cartographic();\n/**\n * Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @example\n * // find intersection of ray through a pixel and the globe\n * var ray = viewer.camera.getPickRay(windowCoordinates);\n * var intersection = globe.pick(ray, scene);\n */\nGlobe.prototype.pick = function (ray, scene, result) {\n result = this.pickWorldCoordinates(ray, scene, true, result);\n if (defined(result) && scene.mode !== SceneMode.SCENE3D) {\n result = Cartesian3.fromElements(result.y, result.z, result.x, result);\n var carto = scene.mapProjection.unproject(result, cartoScratch);\n result = scene.globe.ellipsoid.cartographicToCartesian(carto, result);\n }\n\n return result;\n};\n\nvar scratchGetHeightCartesian = new Cartesian3();\nvar scratchGetHeightIntersection = new Cartesian3();\nvar scratchGetHeightCartographic = new Cartographic();\nvar scratchGetHeightRay = new Ray();\n\nfunction tileIfContainsCartographic(tile, cartographic) {\n return defined(tile) && Rectangle.contains(tile.rectangle, cartographic)\n ? tile\n : undefined;\n}\n\n/**\n * Get the height of the surface at a given cartographic.\n *\n * @param {Cartographic} cartographic The cartographic for which to find the height.\n * @returns {Number|undefined} The height of the cartographic or undefined if it could not be found.\n */\nGlobe.prototype.getHeight = function (cartographic) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(cartographic)) {\n throw new DeveloperError(\"cartographic is required\");\n }\n //>>includeEnd('debug');\n\n var levelZeroTiles = this._surface._levelZeroTiles;\n if (!defined(levelZeroTiles)) {\n return;\n }\n\n var tile;\n var i;\n\n var length = levelZeroTiles.length;\n for (i = 0; i < length; ++i) {\n tile = levelZeroTiles[i];\n if (Rectangle.contains(tile.rectangle, cartographic)) {\n break;\n }\n }\n\n if (i >= length) {\n return undefined;\n }\n\n var tileWithMesh = tile;\n\n while (defined(tile)) {\n tile =\n tileIfContainsCartographic(tile._southwestChild, cartographic) ||\n tileIfContainsCartographic(tile._southeastChild, cartographic) ||\n tileIfContainsCartographic(tile._northwestChild, cartographic) ||\n tile._northeastChild;\n\n if (\n defined(tile) &&\n defined(tile.data) &&\n defined(tile.data.renderedMesh)\n ) {\n tileWithMesh = tile;\n }\n }\n\n tile = tileWithMesh;\n\n // This tile was either rendered or culled.\n // It is sometimes useful to get a height from a culled tile,\n // e.g. when we're getting a height in order to place a billboard\n // on terrain, and the camera is looking at that same billboard.\n // The culled tile must have a valid mesh, though.\n if (\n !defined(tile) ||\n !defined(tile.data) ||\n !defined(tile.data.renderedMesh)\n ) {\n // Tile was not rendered (culled).\n return undefined;\n }\n\n var ellipsoid = this._surface._tileProvider.tilingScheme.ellipsoid;\n\n //cartesian has to be on the ellipsoid surface for `ellipsoid.geodeticSurfaceNormal`\n var cartesian = Cartesian3.fromRadians(\n cartographic.longitude,\n cartographic.latitude,\n 0.0,\n ellipsoid,\n scratchGetHeightCartesian\n );\n\n var ray = scratchGetHeightRay;\n var surfaceNormal = ellipsoid.geodeticSurfaceNormal(cartesian, ray.direction);\n\n // Try to find the intersection point between the surface normal and z-axis.\n // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n var rayOrigin = ellipsoid.getSurfaceNormalIntersectionWithZAxis(\n cartesian,\n 11500.0,\n ray.origin\n );\n\n // Theoretically, not with Earth datums, the intersection point can be outside the ellipsoid\n if (!defined(rayOrigin)) {\n // intersection point is outside the ellipsoid, try other value\n // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n var minimumHeight;\n if (defined(tile.data.tileBoundingRegion)) {\n minimumHeight = tile.data.tileBoundingRegion.minimumHeight;\n }\n var magnitude = Math.min(defaultValue(minimumHeight, 0.0), -11500.0);\n\n // multiply by the *positive* value of the magnitude\n var vectorToMinimumPoint = Cartesian3.multiplyByScalar(\n surfaceNormal,\n Math.abs(magnitude) + 1,\n scratchGetHeightIntersection\n );\n Cartesian3.subtract(cartesian, vectorToMinimumPoint, ray.origin);\n }\n\n var intersection = tile.data.pick(\n ray,\n undefined,\n undefined,\n false,\n scratchGetHeightIntersection\n );\n if (!defined(intersection)) {\n return undefined;\n }\n\n return ellipsoid.cartesianToCartographic(\n intersection,\n scratchGetHeightCartographic\n ).height;\n};\n\n/**\n * @private\n */\nGlobe.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n if (frameState.passes.render) {\n this._surface.update(frameState);\n }\n};\n\n/**\n * @private\n */\nGlobe.prototype.beginFrame = function (frameState) {\n var surface = this._surface;\n var tileProvider = surface.tileProvider;\n var terrainProvider = this.terrainProvider;\n var hasWaterMask =\n this.showWaterEffect &&\n terrainProvider.ready &&\n terrainProvider.hasWaterMask;\n\n if (hasWaterMask && this._oceanNormalMapResourceDirty) {\n // url changed, load new normal map asynchronously\n this._oceanNormalMapResourceDirty = false;\n var oceanNormalMapResource = this._oceanNormalMapResource;\n var oceanNormalMapUrl = oceanNormalMapResource.url;\n if (defined(oceanNormalMapUrl)) {\n var that = this;\n when(oceanNormalMapResource.fetchImage(), function (image) {\n if (oceanNormalMapUrl !== that._oceanNormalMapResource.url) {\n // url changed while we were loading\n return;\n }\n\n that._oceanNormalMap =\n that._oceanNormalMap && that._oceanNormalMap.destroy();\n that._oceanNormalMap = new Texture({\n context: frameState.context,\n source: image,\n });\n });\n } else {\n this._oceanNormalMap =\n this._oceanNormalMap && this._oceanNormalMap.destroy();\n }\n }\n\n var pass = frameState.passes;\n var mode = frameState.mode;\n\n if (pass.render) {\n if (this.showGroundAtmosphere) {\n this._zoomedOutOceanSpecularIntensity = 0.4;\n } else {\n this._zoomedOutOceanSpecularIntensity = 0.5;\n }\n\n surface.maximumScreenSpaceError = this.maximumScreenSpaceError;\n surface.tileCacheSize = this.tileCacheSize;\n surface.loadingDescendantLimit = this.loadingDescendantLimit;\n surface.preloadAncestors = this.preloadAncestors;\n surface.preloadSiblings = this.preloadSiblings;\n\n tileProvider.terrainProvider = this.terrainProvider;\n tileProvider.lightingFadeOutDistance = this.lightingFadeOutDistance;\n tileProvider.lightingFadeInDistance = this.lightingFadeInDistance;\n tileProvider.nightFadeOutDistance = this.nightFadeOutDistance;\n tileProvider.nightFadeInDistance = this.nightFadeInDistance;\n tileProvider.zoomedOutOceanSpecularIntensity =\n mode === SceneMode.SCENE3D ? this._zoomedOutOceanSpecularIntensity : 0.0;\n tileProvider.hasWaterMask = hasWaterMask;\n tileProvider.oceanNormalMap = this._oceanNormalMap;\n tileProvider.enableLighting = this.enableLighting;\n tileProvider.dynamicAtmosphereLighting = this.dynamicAtmosphereLighting;\n tileProvider.dynamicAtmosphereLightingFromSun = this.dynamicAtmosphereLightingFromSun;\n tileProvider.showGroundAtmosphere = this.showGroundAtmosphere;\n tileProvider.shadows = this.shadows;\n tileProvider.hueShift = this.atmosphereHueShift;\n tileProvider.saturationShift = this.atmosphereSaturationShift;\n tileProvider.brightnessShift = this.atmosphereBrightnessShift;\n tileProvider.fillHighlightColor = this.fillHighlightColor;\n tileProvider.showSkirts = this.showSkirts;\n tileProvider.backFaceCulling = this.backFaceCulling;\n tileProvider.undergroundColor = this._undergroundColor;\n tileProvider.undergroundColorAlphaByDistance = this._undergroundColorAlphaByDistance;\n surface.beginFrame(frameState);\n }\n};\n\n/**\n * @private\n */\nGlobe.prototype.render = function (frameState) {\n if (!this.show) {\n return;\n }\n\n if (defined(this._material)) {\n this._material.update(frameState.context);\n }\n\n this._surface.render(frameState);\n};\n\n/**\n * @private\n */\nGlobe.prototype.endFrame = function (frameState) {\n if (!this.show) {\n return;\n }\n\n if (frameState.passes.render) {\n this._surface.endFrame(frameState);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see Globe#destroy\n */\nGlobe.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * globe = globe && globe.destroy();\n *\n * @see Globe#isDestroyed\n */\nGlobe.prototype.destroy = function () {\n this._surfaceShaderSet =\n this._surfaceShaderSet && this._surfaceShaderSet.destroy();\n this._surface = this._surface && this._surface.destroy();\n this._oceanNormalMap = this._oceanNormalMap && this._oceanNormalMap.destroy();\n return destroyObject(this);\n};\nexport default Globe;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 u_initialColor;\\n\\\n\\n\\\n#if TEXTURE_UNITS > 0\\n\\\nuniform sampler2D u_dayTextures[TEXTURE_UNITS];\\n\\\nuniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];\\n\\\nuniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];\\n\\\n\\n\\\n#ifdef APPLY_ALPHA\\n\\\nuniform float u_dayTextureAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_DAY_NIGHT_ALPHA\\n\\\nuniform float u_dayTextureNightAlpha[TEXTURE_UNITS];\\n\\\nuniform float u_dayTextureDayAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SPLIT\\n\\\nuniform float u_dayTextureSplit[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_BRIGHTNESS\\n\\\nuniform float u_dayTextureBrightness[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_CONTRAST\\n\\\nuniform float u_dayTextureContrast[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_HUE\\n\\\nuniform float u_dayTextureHue[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SATURATION\\n\\\nuniform float u_dayTextureSaturation[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_GAMMA\\n\\\nuniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_IMAGERY_CUTOUT\\n\\\nuniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_COLOR_TO_ALPHA\\n\\\nuniform vec4 u_colorsToAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SHOW_REFLECTIVE_OCEAN\\n\\\nuniform sampler2D u_waterMask;\\n\\\nuniform vec4 u_waterMaskTranslationAndScale;\\n\\\nuniform float u_zoomedOutOceanSpecularIntensity;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\nuniform sampler2D u_oceanNormalMap;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\\n\\\nuniform vec2 u_lightingFadeDistance;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TILE_LIMIT_RECTANGLE\\n\\\nuniform vec4 u_cartographicLimitRectangle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\nuniform vec2 u_nightFadeDistance;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\nuniform sampler2D u_clippingPlanes;\\n\\\nuniform mat4 u_clippingPlanesMatrix;\\n\\\nuniform vec4 u_clippingPlanesEdgeStyle;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\\n\\\nuniform float u_minimumBrightness;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef COLOR_CORRECT\\n\\\nuniform vec3 u_hsbShift; // Hue, saturation, brightness\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HIGHLIGHT_FILL_TILE\\n\\\nuniform vec4 u_fillHighlightColor;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TRANSLUCENT\\n\\\nuniform vec4 u_frontFaceAlphaByDistance;\\n\\\nuniform vec4 u_backFaceAlphaByDistance;\\n\\\nuniform vec4 u_translucencyRectangle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef UNDERGROUND_COLOR\\n\\\nuniform vec4 u_undergroundColor;\\n\\\nuniform vec4 u_undergroundColorAlphaByDistance;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec3 v_positionMC;\\n\\\nvarying vec3 v_positionEC;\\n\\\nvarying vec3 v_textureCoordinates;\\n\\\nvarying vec3 v_normalMC;\\n\\\nvarying vec3 v_normalEC;\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\nvarying float v_height;\\n\\\nvarying float v_slope;\\n\\\nvarying float v_aspect;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nvarying float v_distance;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\\n\\\nvarying vec3 v_fogRayleighColor;\\n\\\nvarying vec3 v_fogMieColor;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\nvarying vec3 v_rayleighColor;\\n\\\nvarying vec3 v_mieColor;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nfloat interpolateByDistance(vec4 nearFarScalar, float distance)\\n\\\n{\\n\\\n float startDistance = nearFarScalar.x;\\n\\\n float startValue = nearFarScalar.y;\\n\\\n float endDistance = nearFarScalar.z;\\n\\\n float endValue = nearFarScalar.w;\\n\\\n float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);\\n\\\n return mix(startValue, endValue, t);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)\\n\\\nvec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)\\n\\\n{\\n\\\n return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TRANSLUCENT\\n\\\nbool inTranslucencyRectangle()\\n\\\n{\\n\\\n return\\n\\\n v_textureCoordinates.x > u_translucencyRectangle.x &&\\n\\\n v_textureCoordinates.x < u_translucencyRectangle.z &&\\n\\\n v_textureCoordinates.y > u_translucencyRectangle.y &&\\n\\\n v_textureCoordinates.y < u_translucencyRectangle.w;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nvec4 sampleAndBlend(\\n\\\n vec4 previousColor,\\n\\\n sampler2D textureToSample,\\n\\\n vec2 tileTextureCoordinates,\\n\\\n vec4 textureCoordinateRectangle,\\n\\\n vec4 textureCoordinateTranslationAndScale,\\n\\\n float textureAlpha,\\n\\\n float textureNightAlpha,\\n\\\n float textureDayAlpha,\\n\\\n float textureBrightness,\\n\\\n float textureContrast,\\n\\\n float textureHue,\\n\\\n float textureSaturation,\\n\\\n float textureOneOverGamma,\\n\\\n float split,\\n\\\n vec4 colorToAlpha,\\n\\\n float nightBlend)\\n\\\n{\\n\\\n // This crazy step stuff sets the alpha to 0.0 if this following condition is true:\\n\\\n // tileTextureCoordinates.s < textureCoordinateRectangle.s ||\\n\\\n // tileTextureCoordinates.s > textureCoordinateRectangle.p ||\\n\\\n // tileTextureCoordinates.t < textureCoordinateRectangle.t ||\\n\\\n // tileTextureCoordinates.t > textureCoordinateRectangle.q\\n\\\n // In other words, the alpha is zero if the fragment is outside the rectangle\\n\\\n // covered by this texture. Would an actual 'if' yield better performance?\\n\\\n vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);\\n\\\n textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\\n\\\n\\n\\\n alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);\\n\\\n textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\\n\\\n\\n\\\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);\\n\\\n#endif\\n\\\n\\n\\\n vec2 translation = textureCoordinateTranslationAndScale.xy;\\n\\\n vec2 scale = textureCoordinateTranslationAndScale.zw;\\n\\\n vec2 textureCoordinates = tileTextureCoordinates * scale + translation;\\n\\\n vec4 value = texture2D(textureToSample, textureCoordinates);\\n\\\n vec3 color = value.rgb;\\n\\\n float alpha = value.a;\\n\\\n\\n\\\n#ifdef APPLY_COLOR_TO_ALPHA\\n\\\n vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);\\n\\\n colorDiff.r = max(max(colorDiff.r, colorDiff.g), colorDiff.b);\\n\\\n alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);\\n\\\n#endif\\n\\\n\\n\\\n#if !defined(APPLY_GAMMA)\\n\\\n vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));\\n\\\n color = tempColor.rgb;\\n\\\n alpha = tempColor.a;\\n\\\n#else\\n\\\n color = pow(color, vec3(textureOneOverGamma));\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SPLIT\\n\\\n float splitPosition = czm_imagerySplitPosition;\\n\\\n // Split to the left\\n\\\n if (split < 0.0 && gl_FragCoord.x > splitPosition) {\\n\\\n alpha = 0.0;\\n\\\n }\\n\\\n // Split to the right\\n\\\n else if (split > 0.0 && gl_FragCoord.x < splitPosition) {\\n\\\n alpha = 0.0;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_BRIGHTNESS\\n\\\n color = mix(vec3(0.0), color, textureBrightness);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_CONTRAST\\n\\\n color = mix(vec3(0.5), color, textureContrast);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_HUE\\n\\\n color = czm_hue(color, textureHue);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SATURATION\\n\\\n color = czm_saturation(color, textureSaturation);\\n\\\n#endif\\n\\\n\\n\\\n float sourceAlpha = alpha * textureAlpha;\\n\\\n float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);\\n\\\n outAlpha += sign(outAlpha) - 1.0;\\n\\\n\\n\\\n vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;\\n\\\n\\n\\\n // When rendering imagery for a tile in multiple passes,\\n\\\n // some GPU/WebGL implementation combinations will not blend fragments in\\n\\\n // additional passes correctly if their computation includes an unmasked\\n\\\n // divide-by-zero operation,\\n\\\n // even if it's not in the output or if the output has alpha zero.\\n\\\n //\\n\\\n // For example, without sanitization for outAlpha,\\n\\\n // this renders without artifacts:\\n\\\n // if (outAlpha == 0.0) { outColor = vec3(0.0); }\\n\\\n //\\n\\\n // but using czm_branchFreeTernary will cause portions of the tile that are\\n\\\n // alpha-zero in the additional pass to render as black instead of blending\\n\\\n // with the previous pass:\\n\\\n // outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor);\\n\\\n //\\n\\\n // So instead, sanitize against divide-by-zero,\\n\\\n // store this state on the sign of outAlpha, and correct on return.\\n\\\n\\n\\\n return vec4(outColor, max(outAlpha, 0.0));\\n\\\n}\\n\\\n\\n\\\nvec3 colorCorrect(vec3 rgb) {\\n\\\n#ifdef COLOR_CORRECT\\n\\\n // Convert rgb color to hsb\\n\\\n vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n // Perform hsb shift\\n\\\n hsb.x += u_hsbShift.x; // hue\\n\\\n hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation\\n\\\n hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness\\n\\\n // Convert shifted hsb back to rgb\\n\\\n rgb = czm_HSBToRGB(hsb);\\n\\\n#endif\\n\\\n return rgb;\\n\\\n}\\n\\\n\\n\\\nvec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);\\n\\\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist);\\n\\\n#endif\\n\\\n\\n\\\nconst float fExposure = 2.0;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef TILE_LIMIT_RECTANGLE\\n\\\n if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||\\n\\\n v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)\\n\\\n {\\n\\\n discard;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\n float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);\\n\\\n#endif\\n\\\n\\n\\\n#if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)\\n\\\n vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates\\n\\\n vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordiantes\\n\\\n#endif\\n\\\n\\n\\\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);\\n\\\n#else\\n\\\n float nightBlend = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0\\n\\\n // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the\\n\\\n // fragments on the edges of tiles even though the vertex shader is outputting\\n\\\n // coordinates strictly in the 0-1 range.\\n\\\n vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);\\n\\\n\\n\\\n#ifdef SHOW_TILE_BOUNDARIES\\n\\\n if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||\\n\\\n v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))\\n\\\n {\\n\\\n color = vec4(1.0, 0.0, 0.0, 1.0);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\\n\\\n float cameraDist;\\n\\\n if (czm_sceneMode == czm_sceneMode2D)\\n\\\n {\\n\\\n cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;\\n\\\n }\\n\\\n else if (czm_sceneMode == czm_sceneModeColumbusView)\\n\\\n {\\n\\\n cameraDist = -czm_view[3].z;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n cameraDist = length(czm_view[3]);\\n\\\n }\\n\\\n float fadeOutDist = u_lightingFadeDistance.x;\\n\\\n float fadeInDist = u_lightingFadeDistance.y;\\n\\\n if (czm_sceneMode != czm_sceneMode3D) {\\n\\\n vec3 radii = czm_ellipsoidRadii;\\n\\\n float maxRadii = max(radii.x, max(radii.y, radii.z));\\n\\\n fadeOutDist -= maxRadii;\\n\\\n fadeInDist -= maxRadii;\\n\\\n }\\n\\\n float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\\n\\\n#else\\n\\\n float fade = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;\\n\\\n vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;\\n\\\n vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;\\n\\\n waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;\\n\\\n\\n\\\n float mask = texture2D(u_waterMask, waterMaskTextureCoordinates).r;\\n\\\n\\n\\\n if (mask > 0.0)\\n\\\n {\\n\\\n mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);\\n\\\n\\n\\\n vec2 ellipsoidTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC);\\n\\\n vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC.zyx);\\n\\\n\\n\\\n vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));\\n\\\n\\n\\\n color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\n czm_materialInput materialInput;\\n\\\n materialInput.st = v_textureCoordinates.st;\\n\\\n materialInput.normalEC = normalize(v_normalEC);\\n\\\n materialInput.slope = v_slope;\\n\\\n materialInput.height = v_height;\\n\\\n materialInput.aspect = v_aspect;\\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n vec4 materialColor = vec4(material.diffuse, material.alpha);\\n\\\n color = alphaBlend(materialColor, color);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_VERTEX_LIGHTING\\n\\\n float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * 0.9 + 0.3, 0.0, 1.0);\\n\\\n vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\\n\\\n#elif defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);\\n\\\n diffuseIntensity = mix(1.0, diffuseIntensity, fade);\\n\\\n vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\\n\\\n#else\\n\\\n vec4 finalColor = color;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\n vec4 clippingPlanesEdgeColor = vec4(1.0);\\n\\\n clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;\\n\\\n float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;\\n\\\n\\n\\\n if (clipDistance < clippingPlanesEdgeWidth)\\n\\\n {\\n\\\n finalColor = clippingPlanesEdgeColor;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HIGHLIGHT_FILL_TILE\\n\\\n finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\\n\\\n vec3 fogColor = colorCorrect(v_fogMieColor) + finalColor.rgb * colorCorrect(v_fogRayleighColor);\\n\\\n#ifndef HDR\\n\\\n fogColor = vec3(1.0) - exp(-fExposure * fogColor);\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)\\n\\\n vec3 atmosphereLightDirection = czm_sunDirectionWC;\\n\\\n#else\\n\\\n vec3 atmosphereLightDirection = czm_lightDirectionWC;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FOG\\n\\\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\\n\\\n float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);\\n\\\n fogColor *= darken;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HDR\\n\\\n const float modifier = 0.15;\\n\\\n finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor, modifier), finalColor.a);\\n\\\n#else\\n\\\n finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor), finalColor.a);\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\n if (!czm_backFacing())\\n\\\n {\\n\\\n vec3 groundAtmosphereColor = computeGroundAtmosphereColor(fogColor, finalColor, atmosphereLightDirection, cameraDist);\\n\\\n finalColor = vec4(mix(finalColor.rgb, groundAtmosphereColor, fade), finalColor.a);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef UNDERGROUND_COLOR\\n\\\n if (czm_backFacing())\\n\\\n {\\n\\\n float distanceFromEllipsoid = max(czm_eyeHeight, 0.0);\\n\\\n float distance = max(v_distance - distanceFromEllipsoid, 0.0);\\n\\\n float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);\\n\\\n vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);\\n\\\n finalColor = alphaBlend(undergroundColor, finalColor);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TRANSLUCENT\\n\\\n if (inTranslucencyRectangle())\\n\\\n {\\n\\\n vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;\\n\\\n finalColor.a *= interpolateByDistance(alphaByDistance, v_distance);\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n gl_FragColor = finalColor;\\n\\\n}\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\nvec3 computeGroundAtmosphereColor(vec3 fogColor, vec4 finalColor, vec3 atmosphereLightDirection, float cameraDist)\\n\\\n{\\n\\\n#if defined(PER_FRAGMENT_GROUND_ATMOSPHERE) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))\\n\\\n float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);\\n\\\n vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);\\n\\\n xy *= czm_viewport.zw * mpp * 0.5;\\n\\\n\\n\\\n vec3 direction = normalize(vec3(xy, -czm_currentFrustum.x));\\n\\\n czm_ray ray = czm_ray(vec3(0.0), direction);\\n\\\n\\n\\\n vec3 ellipsoid_center = czm_view[3].xyz;\\n\\\n\\n\\\n czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\\n\\\n\\n\\\n vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);\\n\\\n ellipsoidPosition = (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;\\n\\\n AtmosphereColor atmosColor = computeGroundAtmosphereFromSpace(ellipsoidPosition, true, atmosphereLightDirection);\\n\\\n\\n\\\n vec3 groundAtmosphereColor = colorCorrect(atmosColor.mie) + finalColor.rgb * colorCorrect(atmosColor.rayleigh);\\n\\\n#ifndef HDR\\n\\\n groundAtmosphereColor = vec3(1.0) - exp(-fExposure * groundAtmosphereColor);\\n\\\n#endif\\n\\\n\\n\\\n float fadeInDist = u_nightFadeDistance.x;\\n\\\n float fadeOutDist = u_nightFadeDistance.y;\\n\\\n\\n\\\n float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\\n\\\n\\n\\\n#ifdef HDR\\n\\\n // Some tweaking to make HDR look better\\n\\\n sunlitAtmosphereIntensity = max(sunlitAtmosphereIntensity * sunlitAtmosphereIntensity, 0.03);\\n\\\n#endif\\n\\\n\\n\\\n groundAtmosphereColor = mix(groundAtmosphereColor, fogColor, sunlitAtmosphereIntensity);\\n\\\n#else\\n\\\n vec3 groundAtmosphereColor = fogColor;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HDR\\n\\\n // Some tweaking to make HDR look better\\n\\\n groundAtmosphereColor = czm_saturation(groundAtmosphereColor, 1.6);\\n\\\n#endif\\n\\\n\\n\\\n return groundAtmosphereColor;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n\\n\\\nfloat waveFade(float edge0, float edge1, float x)\\n\\\n{\\n\\\n float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\\n return pow(1.0 - y, 5.0);\\n\\\n}\\n\\\n\\n\\\nfloat linearFade(float edge0, float edge1, float x)\\n\\\n{\\n\\\n return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\n// Based on water rendering by Jonas Wagner:\\n\\\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\\n\\\n\\n\\\n// low altitude wave settings\\n\\\nconst float oceanFrequencyLowAltitude = 825000.0;\\n\\\nconst float oceanAnimationSpeedLowAltitude = 0.004;\\n\\\nconst float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;\\n\\\nconst float oceanSpecularIntensity = 0.5;\\n\\\n\\n\\\n// high altitude wave settings\\n\\\nconst float oceanFrequencyHighAltitude = 125000.0;\\n\\\nconst float oceanAnimationSpeedHighAltitude = 0.008;\\n\\\nconst float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;\\n\\\n\\n\\\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)\\n\\\n{\\n\\\n vec3 positionToEyeEC = -positionEyeCoordinates;\\n\\\n float positionToEyeECLength = length(positionToEyeEC);\\n\\\n\\n\\\n // The double normalize below works around a bug in Firefox on Android devices.\\n\\\n vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));\\n\\\n\\n\\\n // Fade out the waves as the camera moves far from the surface.\\n\\\n float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\n // high altitude waves\\n\\\n float time = czm_frameNumber * oceanAnimationSpeedHighAltitude;\\n\\\n vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);\\n\\\n vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);\\n\\\n\\n\\\n // low altitude waves\\n\\\n time = czm_frameNumber * oceanAnimationSpeedLowAltitude;\\n\\\n noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);\\n\\\n vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);\\n\\\n\\n\\\n // blend the 2 wave layers based on distance to surface\\n\\\n float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);\\n\\\n float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);\\n\\\n vec3 normalTangentSpace =\\n\\\n (highAltitudeFade * normalTangentSpaceHighAltitude) +\\n\\\n (lowAltitudeFade * normalTangentSpaceLowAltitude);\\n\\\n normalTangentSpace = normalize(normalTangentSpace);\\n\\\n\\n\\\n // fade out the normal perturbation as we move farther from the water surface\\n\\\n normalTangentSpace.xy *= waveIntensity;\\n\\\n normalTangentSpace = normalize(normalTangentSpace);\\n\\\n#else\\n\\\n vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);\\n\\\n#endif\\n\\\n\\n\\\n vec3 normalEC = enuToEye * normalTangentSpace;\\n\\\n\\n\\\n const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);\\n\\\n\\n\\\n // Use diffuse light to highlight the waves\\n\\\n float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;\\n\\\n vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\n // Where diffuse light is low or non-existent, use wave highlights based solely on\\n\\\n // the wave bumpiness and no particular light direction.\\n\\\n float tsPerturbationRatio = normalTangentSpace.z;\\n\\\n vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);\\n\\\n#else\\n\\\n vec3 nonDiffuseHighlight = vec3(0.0);\\n\\\n#endif\\n\\\n\\n\\\n // Add specular highlights in 3D, and in all modes when zoomed in.\\n\\\n float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);\\n\\\n float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);\\n\\\n float specular = specularIntensity * surfaceReflectance;\\n\\\n\\n\\\n#ifdef HDR\\n\\\n specular *= 1.4;\\n\\\n\\n\\\n float e = 0.2;\\n\\\n float d = 3.3;\\n\\\n float c = 1.7;\\n\\\n\\n\\\n vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));\\n\\\n#else\\n\\\n vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;\\n\\\n#endif\\n\\\n\\n\\\n return vec4(color, imageryColor.a);\\n\\\n}\\n\\\n\\n\\\n#endif // #ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef QUANTIZATION_BITS12\\n\\\nattribute vec4 compressed0;\\n\\\nattribute float compressed1;\\n\\\n#else\\n\\\nattribute vec4 position3DAndHeight;\\n\\\nattribute vec4 textureCoordAndEncodedNormals;\\n\\\n#endif\\n\\\n\\n\\\nuniform vec3 u_center3D;\\n\\\nuniform mat4 u_modifiedModelView;\\n\\\nuniform mat4 u_modifiedModelViewProjection;\\n\\\nuniform vec4 u_tileRectangle;\\n\\\n\\n\\\n// Uniforms for 2D Mercator projection\\n\\\nuniform vec2 u_southAndNorthLatitude;\\n\\\nuniform vec2 u_southMercatorYAndOneOverHeight;\\n\\\n\\n\\\nvarying vec3 v_positionMC;\\n\\\nvarying vec3 v_positionEC;\\n\\\n\\n\\\nvarying vec3 v_textureCoordinates;\\n\\\nvarying vec3 v_normalMC;\\n\\\nvarying vec3 v_normalEC;\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\nvarying float v_slope;\\n\\\nvarying float v_aspect;\\n\\\nvarying float v_height;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nvarying float v_distance;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\\n\\\nvarying vec3 v_fogMieColor;\\n\\\nvarying vec3 v_fogRayleighColor;\\n\\\n#endif\\n\\\n\\n\\\n// These functions are generated at runtime.\\n\\\nvec4 getPosition(vec3 position, float height, vec2 textureCoordinates);\\n\\\nfloat get2DYPositionFraction(vec2 textureCoordinates);\\n\\\n\\n\\\nvec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n return u_modifiedModelViewProjection * vec4(position, 1.0);\\n\\\n}\\n\\\n\\n\\\nfloat get2DMercatorYPositionFraction(vec2 textureCoordinates)\\n\\\n{\\n\\\n // The width of a tile at level 11, in radians and assuming a single root tile, is\\n\\\n // 2.0 * czm_pi / pow(2.0, 11.0)\\n\\\n // We want to just linearly interpolate the 2D position from the texture coordinates\\n\\\n // when we're at this level or higher. The constant below is the expression\\n\\\n // above evaluated and then rounded up at the 4th significant digit.\\n\\\n const float maxTileWidth = 0.003068;\\n\\\n float positionFraction = textureCoordinates.y;\\n\\\n float southLatitude = u_southAndNorthLatitude.x;\\n\\\n float northLatitude = u_southAndNorthLatitude.y;\\n\\\n if (northLatitude - southLatitude > maxTileWidth)\\n\\\n {\\n\\\n float southMercatorY = u_southMercatorYAndOneOverHeight.x;\\n\\\n float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;\\n\\\n\\n\\\n float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);\\n\\\n currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);\\n\\\n positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);\\n\\\n }\\n\\\n return positionFraction;\\n\\\n}\\n\\\n\\n\\\nfloat get2DGeographicYPositionFraction(vec2 textureCoordinates)\\n\\\n{\\n\\\n return textureCoordinates.y;\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n float yPositionFraction = get2DYPositionFraction(textureCoordinates);\\n\\\n vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\\n\\\n return u_modifiedModelViewProjection * rtcPosition2D;\\n\\\n}\\n\\\n\\n\\\nvec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n return getPositionPlanarEarth(position, 0.0, textureCoordinates);\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n return getPositionPlanarEarth(position, height, textureCoordinates);\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n // We do not do RTC while morphing, so there is potential for jitter.\\n\\\n // This is unlikely to be noticeable, though.\\n\\\n vec3 position3DWC = position + u_center3D;\\n\\\n float yPositionFraction = get2DYPositionFraction(textureCoordinates);\\n\\\n vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\\n\\\n vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);\\n\\\n return czm_modelViewProjection * morphPosition;\\n\\\n}\\n\\\n\\n\\\n#ifdef QUANTIZATION_BITS12\\n\\\nuniform vec2 u_minMaxHeight;\\n\\\nuniform mat4 u_scaleAndBias;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef QUANTIZATION_BITS12\\n\\\n vec2 xy = czm_decompressTextureCoordinates(compressed0.x);\\n\\\n vec2 zh = czm_decompressTextureCoordinates(compressed0.y);\\n\\\n vec3 position = vec3(xy, zh.x);\\n\\\n float height = zh.y;\\n\\\n vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);\\n\\\n\\n\\\n height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;\\n\\\n position = (u_scaleAndBias * vec4(position, 1.0)).xyz;\\n\\\n\\n\\\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\\n\\\n float encodedNormal = compressed1;\\n\\\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\\n\\\n float encodedNormal = 0.0;\\n\\\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)\\n\\\n float webMercatorT = textureCoordinates.y;\\n\\\n float encodedNormal = compressed0.w;\\n\\\n#else\\n\\\n float webMercatorT = textureCoordinates.y;\\n\\\n float encodedNormal = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#else\\n\\\n // A single float per element\\n\\\n vec3 position = position3DAndHeight.xyz;\\n\\\n float height = position3DAndHeight.w;\\n\\\n vec2 textureCoordinates = textureCoordAndEncodedNormals.xy;\\n\\\n\\n\\\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n float webMercatorT = textureCoordAndEncodedNormals.z;\\n\\\n float encodedNormal = textureCoordAndEncodedNormals.w;\\n\\\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\\n\\\n float webMercatorT = textureCoordinates.y;\\n\\\n float encodedNormal = textureCoordAndEncodedNormals.z;\\n\\\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n float webMercatorT = textureCoordAndEncodedNormals.z;\\n\\\n float encodedNormal = 0.0;\\n\\\n#else\\n\\\n float webMercatorT = textureCoordinates.y;\\n\\\n float encodedNormal = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n vec3 position3DWC = position + u_center3D;\\n\\\n gl_Position = getPosition(position, height, textureCoordinates);\\n\\\n\\n\\\n v_textureCoordinates = vec3(textureCoordinates, webMercatorT);\\n\\\n\\n\\\n#if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\\n\\\n v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\\n\\\n v_positionMC = position3DWC; // position in model coordinates\\n\\\n vec3 normalMC = czm_octDecode(encodedNormal);\\n\\\n v_normalMC = normalMC;\\n\\\n v_normalEC = czm_normal3D * v_normalMC;\\n\\\n#elif defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(GENERATE_POSITION) || defined(HDR)\\n\\\n v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\\n\\\n v_positionMC = position3DWC; // position in model coordinates\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\\n\\\n AtmosphereColor atmosFogColor = computeGroundAtmosphereFromSpace(position3DWC, false, vec3(0.0));\\n\\\n v_fogMieColor = atmosFogColor.mie;\\n\\\n v_fogRayleighColor = atmosFogColor.rayleigh;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\n v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\n float northPoleZ = czm_ellipsoidRadii.z;\\n\\\n vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);\\n\\\n vec3 ellipsoidNormal = normalize(v_positionMC); // For a sphere this is correct, but not generally for an ellipsoid.\\n\\\n vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));\\n\\\n float dotProd = abs(dot(ellipsoidNormal, v_normalMC));\\n\\\n v_slope = acos(dotProd);\\n\\\n vec3 normalRejected = ellipsoidNormal * dotProd;\\n\\\n vec3 normalProjected = v_normalMC - normalRejected;\\n\\\n vec3 aspectVector = normalize(normalProjected);\\n\\\n v_aspect = acos(dot(aspectVector, vectorEastMC));\\n\\\n float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);\\n\\\n v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);\\n\\\n v_height = height;\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_FragColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_depthTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n gl_FragColor = czm_packDepth(texture2D(u_depthTexture, v_textureCoordinates).r);\\n\\\n}\\n\\\n\";\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PassThroughDepth from \"../Shaders/PostProcessStages/PassThroughDepth.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * @private\n */\nfunction GlobeDepth() {\n this._globeColorTexture = undefined;\n this._primitiveColorTexture = undefined;\n this._depthStencilTexture = undefined;\n this._globeDepthTexture = undefined;\n this._tempGlobeDepthTexture = undefined;\n this._tempCopyDepthTexture = undefined;\n\n this._globeColorFramebuffer = undefined;\n this._primitiveColorFramebuffer = undefined;\n this._copyDepthFramebuffer = undefined;\n this._tempCopyDepthFramebuffer = undefined;\n this._updateDepthFramebuffer = undefined;\n\n this._clearGlobeColorCommand = undefined;\n this._clearPrimitiveColorCommand = undefined;\n this._copyColorCommand = undefined;\n this._copyDepthCommand = undefined;\n this._tempCopyDepthCommand = undefined;\n this._updateDepthCommand = undefined;\n this._mergeColorCommand = undefined;\n\n this._viewport = new BoundingRectangle();\n this._rs = undefined;\n this._rsBlend = undefined;\n this._rsUpdate = undefined;\n\n this._useScissorTest = false;\n this._scissorRectangle = undefined;\n\n this._useLogDepth = undefined;\n this._useHdr = undefined;\n this._clearGlobeDepth = undefined;\n\n this._debugGlobeDepthViewportCommand = undefined;\n}\n\nObject.defineProperties(GlobeDepth.prototype, {\n framebuffer: {\n get: function () {\n return this._globeColorFramebuffer;\n },\n },\n primitiveFramebuffer: {\n get: function () {\n return this._primitiveColorFramebuffer;\n },\n },\n});\n\nfunction executeDebugGlobeDepth(globeDepth, context, passState, useLogDepth) {\n if (\n !defined(globeDepth._debugGlobeDepthViewportCommand) ||\n useLogDepth !== globeDepth._useLogDepth\n ) {\n var fsSource =\n \"uniform sampler2D u_depthTexture;\\n\" +\n \"varying vec2 v_textureCoordinates;\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" float z_window = czm_unpackDepth(texture2D(u_depthTexture, v_textureCoordinates));\\n\" +\n \" z_window = czm_reverseLogDepth(z_window); \\n\" +\n \" float n_range = czm_depthRange.near;\\n\" +\n \" float f_range = czm_depthRange.far;\\n\" +\n \" float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\\n\" +\n \" float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\\n\" +\n \" gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\\n\" +\n \"}\\n\";\n var fs = new ShaderSource({\n defines: [useLogDepth ? \"LOG_DEPTH\" : \"\"],\n sources: [fsSource],\n });\n\n globeDepth._debugGlobeDepthViewportCommand = context.createViewportQuadCommand(\n fs,\n {\n uniformMap: {\n u_depthTexture: function () {\n return globeDepth._globeDepthTexture;\n },\n },\n owner: globeDepth,\n }\n );\n\n globeDepth._useLogDepth = useLogDepth;\n }\n\n globeDepth._debugGlobeDepthViewportCommand.execute(context, passState);\n}\n\nfunction destroyTextures(globeDepth) {\n globeDepth._globeColorTexture =\n globeDepth._globeColorTexture &&\n !globeDepth._globeColorTexture.isDestroyed() &&\n globeDepth._globeColorTexture.destroy();\n globeDepth._depthStencilTexture =\n globeDepth._depthStencilTexture &&\n !globeDepth._depthStencilTexture.isDestroyed() &&\n globeDepth._depthStencilTexture.destroy();\n globeDepth._globeDepthTexture =\n globeDepth._globeDepthTexture &&\n !globeDepth._globeDepthTexture.isDestroyed() &&\n globeDepth._globeDepthTexture.destroy();\n}\n\nfunction destroyFramebuffers(globeDepth) {\n globeDepth._globeColorFramebuffer =\n globeDepth._globeColorFramebuffer &&\n !globeDepth._globeColorFramebuffer.isDestroyed() &&\n globeDepth._globeColorFramebuffer.destroy();\n globeDepth._copyDepthFramebuffer =\n globeDepth._copyDepthFramebuffer &&\n !globeDepth._copyDepthFramebuffer.isDestroyed() &&\n globeDepth._copyDepthFramebuffer.destroy();\n}\n\nfunction destroyUpdateDepthResources(globeDepth) {\n globeDepth._tempCopyDepthFramebuffer =\n globeDepth._tempCopyDepthFramebuffer &&\n !globeDepth._tempCopyDepthFramebuffer.isDestroyed() &&\n globeDepth._tempCopyDepthFramebuffer.destroy();\n globeDepth._updateDepthFramebuffer =\n globeDepth._updateDepthFramebuffer &&\n !globeDepth._updateDepthFramebuffer.isDestroyed() &&\n globeDepth._updateDepthFramebuffer.destroy();\n globeDepth._tempGlobeDepthTexture =\n globeDepth._tempGlobeDepthTexture &&\n !globeDepth._tempGlobeDepthTexture.isDestroyed() &&\n globeDepth._tempGlobeDepthTexture.destroy();\n}\n\nfunction createUpdateDepthResources(\n globeDepth,\n context,\n width,\n height,\n passState\n) {\n globeDepth._tempGlobeDepthTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n globeDepth._tempCopyDepthFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeDepth._tempGlobeDepthTexture],\n destroyAttachments: false,\n });\n globeDepth._updateDepthFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeDepth._globeDepthTexture],\n depthStencilTexture: passState.framebuffer.depthStencilTexture,\n destroyAttachments: false,\n });\n}\n\nfunction createTextures(globeDepth, context, width, height, hdr) {\n var pixelDatatype = hdr\n ? context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT\n : PixelDatatype.UNSIGNED_BYTE;\n globeDepth._globeColorTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n });\n\n globeDepth._depthStencilTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n });\n\n globeDepth._globeDepthTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n}\n\nfunction createFramebuffers(globeDepth, context) {\n globeDepth._globeColorFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeDepth._globeColorTexture],\n depthStencilTexture: globeDepth._depthStencilTexture,\n destroyAttachments: false,\n });\n\n globeDepth._copyDepthFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeDepth._globeDepthTexture],\n destroyAttachments: false,\n });\n}\n\nfunction createPrimitiveFramebuffer(globeDepth, context, width, height, hdr) {\n var pixelDatatype = hdr\n ? context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT\n : PixelDatatype.UNSIGNED_BYTE;\n globeDepth._primitiveColorTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n });\n\n globeDepth._primitiveColorFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeDepth._primitiveColorTexture],\n depthStencilTexture: globeDepth._depthStencilTexture,\n destroyAttachments: false,\n });\n}\n\nfunction destroyPrimitiveFramebuffer(globeDepth) {\n globeDepth._primitiveColorTexture =\n globeDepth._primitiveColorTexture &&\n !globeDepth._primitiveColorTexture.isDestroyed() &&\n globeDepth._primitiveColorTexture.destroy();\n globeDepth._primitiveColorFramebuffer =\n globeDepth._primitiveColorFramebuffer &&\n !globeDepth._primitiveColorFramebuffer.isDestroyed() &&\n globeDepth._primitiveColorFramebuffer.destroy();\n}\n\nfunction updateFramebuffers(\n globeDepth,\n context,\n width,\n height,\n hdr,\n clearGlobeDepth\n) {\n var colorTexture = globeDepth._globeColorTexture;\n var textureChanged =\n !defined(colorTexture) ||\n colorTexture.width !== width ||\n colorTexture.height !== height ||\n hdr !== globeDepth._useHdr;\n if (textureChanged) {\n destroyTextures(globeDepth);\n destroyFramebuffers(globeDepth);\n createTextures(globeDepth, context, width, height, hdr, clearGlobeDepth);\n createFramebuffers(globeDepth, context, clearGlobeDepth);\n }\n\n if (textureChanged || clearGlobeDepth !== globeDepth._clearGlobeDepth) {\n destroyPrimitiveFramebuffer(globeDepth);\n if (clearGlobeDepth) {\n createPrimitiveFramebuffer(globeDepth, context, width, height, hdr);\n }\n }\n}\n\nfunction updateCopyCommands(globeDepth, context, width, height, passState) {\n globeDepth._viewport.width = width;\n globeDepth._viewport.height = height;\n\n var useScissorTest = !BoundingRectangle.equals(\n globeDepth._viewport,\n passState.viewport\n );\n var updateScissor = useScissorTest !== globeDepth._useScissorTest;\n globeDepth._useScissorTest = useScissorTest;\n\n if (\n !BoundingRectangle.equals(globeDepth._scissorRectangle, passState.viewport)\n ) {\n globeDepth._scissorRectangle = BoundingRectangle.clone(\n passState.viewport,\n globeDepth._scissorRectangle\n );\n updateScissor = true;\n }\n\n if (\n !defined(globeDepth._rs) ||\n !BoundingRectangle.equals(globeDepth._viewport, globeDepth._rs.viewport) ||\n updateScissor\n ) {\n globeDepth._rs = RenderState.fromCache({\n viewport: globeDepth._viewport,\n scissorTest: {\n enabled: globeDepth._useScissorTest,\n rectangle: globeDepth._scissorRectangle,\n },\n });\n globeDepth._rsBlend = RenderState.fromCache({\n viewport: globeDepth._viewport,\n scissorTest: {\n enabled: globeDepth._useScissorTest,\n rectangle: globeDepth._scissorRectangle,\n },\n blending: BlendingState.ALPHA_BLEND,\n });\n\n // Copy packed depth only if the 3D Tiles bit is set\n globeDepth._rsUpdate = RenderState.fromCache({\n viewport: globeDepth._viewport,\n scissorTest: {\n enabled: globeDepth._useScissorTest,\n rectangle: globeDepth._scissorRectangle,\n },\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.EQUAL,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: StencilFunction.NEVER,\n reference: StencilConstants.CESIUM_3D_TILE_MASK,\n mask: StencilConstants.CESIUM_3D_TILE_MASK,\n },\n });\n }\n\n if (!defined(globeDepth._copyDepthCommand)) {\n globeDepth._copyDepthCommand = context.createViewportQuadCommand(\n PassThroughDepth,\n {\n uniformMap: {\n u_depthTexture: function () {\n return globeDepth._depthStencilTexture;\n },\n },\n owner: globeDepth,\n }\n );\n }\n\n globeDepth._copyDepthCommand.framebuffer = globeDepth._copyDepthFramebuffer;\n globeDepth._copyDepthCommand.renderState = globeDepth._rs;\n\n if (!defined(globeDepth._copyColorCommand)) {\n globeDepth._copyColorCommand = context.createViewportQuadCommand(\n PassThrough,\n {\n uniformMap: {\n colorTexture: function () {\n return globeDepth._globeColorTexture;\n },\n },\n owner: globeDepth,\n }\n );\n }\n\n globeDepth._copyColorCommand.renderState = globeDepth._rs;\n\n if (!defined(globeDepth._tempCopyDepthCommand)) {\n globeDepth._tempCopyDepthCommand = context.createViewportQuadCommand(\n PassThroughDepth,\n {\n uniformMap: {\n u_depthTexture: function () {\n return globeDepth._tempCopyDepthTexture;\n },\n },\n owner: globeDepth,\n }\n );\n }\n\n globeDepth._tempCopyDepthCommand.framebuffer =\n globeDepth._tempCopyDepthFramebuffer;\n globeDepth._tempCopyDepthCommand.renderState = globeDepth._rs;\n\n if (!defined(globeDepth._updateDepthCommand)) {\n globeDepth._updateDepthCommand = context.createViewportQuadCommand(\n PassThrough,\n {\n uniformMap: {\n colorTexture: function () {\n return globeDepth._tempGlobeDepthTexture;\n },\n },\n owner: globeDepth,\n }\n );\n }\n\n globeDepth._updateDepthCommand.framebuffer =\n globeDepth._updateDepthFramebuffer;\n globeDepth._updateDepthCommand.renderState = globeDepth._rsUpdate;\n\n if (!defined(globeDepth._clearGlobeColorCommand)) {\n globeDepth._clearGlobeColorCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n stencil: 0.0,\n owner: globeDepth,\n });\n }\n\n globeDepth._clearGlobeColorCommand.framebuffer =\n globeDepth._globeColorFramebuffer;\n\n if (!defined(globeDepth._clearPrimitiveColorCommand)) {\n globeDepth._clearPrimitiveColorCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n stencil: 0.0,\n owner: globeDepth,\n });\n }\n\n globeDepth._clearPrimitiveColorCommand.framebuffer =\n globeDepth._primitiveColorFramebuffer;\n\n if (!defined(globeDepth._mergeColorCommand)) {\n globeDepth._mergeColorCommand = context.createViewportQuadCommand(\n PassThrough,\n {\n uniformMap: {\n colorTexture: function () {\n return globeDepth._primitiveColorTexture;\n },\n },\n owner: globeDepth,\n }\n );\n }\n\n globeDepth._mergeColorCommand.framebuffer = globeDepth._globeColorFramebuffer;\n globeDepth._mergeColorCommand.renderState = globeDepth._rsBlend;\n}\n\nGlobeDepth.prototype.executeDebugGlobeDepth = function (\n context,\n passState,\n useLogDepth\n) {\n executeDebugGlobeDepth(this, context, passState, useLogDepth);\n};\n\nGlobeDepth.prototype.update = function (\n context,\n passState,\n viewport,\n hdr,\n clearGlobeDepth\n) {\n var width = viewport.width;\n var height = viewport.height;\n\n updateFramebuffers(this, context, width, height, hdr, clearGlobeDepth);\n updateCopyCommands(this, context, width, height, passState);\n context.uniformState.globeDepthTexture = undefined;\n\n this._useHdr = hdr;\n this._clearGlobeDepth = clearGlobeDepth;\n};\n\nGlobeDepth.prototype.executeCopyDepth = function (context, passState) {\n if (defined(this._copyDepthCommand)) {\n this._copyDepthCommand.execute(context, passState);\n context.uniformState.globeDepthTexture = this._globeDepthTexture;\n }\n};\n\nGlobeDepth.prototype.executeUpdateDepth = function (\n context,\n passState,\n clearGlobeDepth\n) {\n var depthTextureToCopy = passState.framebuffer.depthStencilTexture;\n if (clearGlobeDepth || depthTextureToCopy !== this._depthStencilTexture) {\n // First copy the depth to a temporary globe depth texture, then update the\n // main globe depth texture where the stencil bit for 3D Tiles is set.\n // This preserves the original globe depth except where 3D Tiles is rendered.\n // The additional texture and framebuffer resources are created on demand.\n if (defined(this._updateDepthCommand)) {\n if (\n !defined(this._updateDepthFramebuffer) ||\n this._updateDepthFramebuffer.depthStencilTexture !==\n depthTextureToCopy ||\n this._updateDepthFramebuffer.getColorTexture(0) !==\n this._globeDepthTexture\n ) {\n var width = this._globeDepthTexture.width;\n var height = this._globeDepthTexture.height;\n destroyUpdateDepthResources(this);\n createUpdateDepthResources(this, context, width, height, passState);\n updateCopyCommands(this, context, width, height, passState);\n }\n this._tempCopyDepthTexture = depthTextureToCopy;\n this._tempCopyDepthCommand.execute(context, passState);\n this._updateDepthCommand.execute(context, passState);\n }\n return;\n }\n\n // Fast path - the depth texture can be copied normally.\n if (defined(this._copyDepthCommand)) {\n this._copyDepthCommand.execute(context, passState);\n }\n};\n\nGlobeDepth.prototype.executeCopyColor = function (context, passState) {\n if (defined(this._copyColorCommand)) {\n this._copyColorCommand.execute(context, passState);\n }\n};\n\nGlobeDepth.prototype.executeMergeColor = function (context, passState) {\n if (defined(this._mergeColorCommand)) {\n this._mergeColorCommand.execute(context, passState);\n }\n};\n\nGlobeDepth.prototype.clear = function (context, passState, clearColor) {\n var clear = this._clearGlobeColorCommand;\n if (defined(clear)) {\n Color.clone(clearColor, clear.color);\n clear.execute(context, passState);\n }\n clear = this._clearPrimitiveColorCommand;\n if (defined(clear) && defined(this._primitiveColorFramebuffer)) {\n clear.execute(context, passState);\n }\n};\n\nGlobeDepth.prototype.isDestroyed = function () {\n return false;\n};\n\nGlobeDepth.prototype.destroy = function () {\n destroyTextures(this);\n destroyFramebuffers(this);\n destroyPrimitiveFramebuffer(this);\n destroyUpdateDepthResources(this);\n\n if (defined(this._copyColorCommand)) {\n this._copyColorCommand.shaderProgram = this._copyColorCommand.shaderProgram.destroy();\n }\n\n if (defined(this._copyDepthCommand)) {\n this._copyDepthCommand.shaderProgram = this._copyDepthCommand.shaderProgram.destroy();\n }\n\n if (defined(this._tempCopyDepthCommand)) {\n this._tempCopyDepthCommand.shaderProgram = this._tempCopyDepthCommand.shaderProgram.destroy();\n }\n\n if (defined(this._updateDepthCommand)) {\n this._updateDepthCommand.shaderProgram = this._updateDepthCommand.shaderProgram.destroy();\n }\n\n if (defined(this._mergeColorCommand)) {\n this._mergeColorCommand.shaderProgram = this._mergeColorCommand.shaderProgram.destroy();\n }\n\n if (defined(this._debugGlobeDepthViewportCommand)) {\n this._debugGlobeDepthViewportCommand.shaderProgram = this._debugGlobeDepthViewportCommand.shaderProgram.destroy();\n }\n\n return destroyObject(this);\n};\nexport default GlobeDepth;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport PassThroughDepth from \"../Shaders/PostProcessStages/PassThroughDepth.js\";\n\n/**\n * @private\n */\nfunction GlobeTranslucencyFramebuffer() {\n this._colorTexture = undefined;\n this._depthStencilTexture = undefined;\n this._depthStencilRenderbuffer = undefined;\n this._framebuffer = undefined;\n\n this._packedDepthTexture = undefined;\n this._packedDepthFramebuffer = undefined;\n\n this._renderState = undefined;\n\n this._packedDepthCommand = undefined;\n this._clearCommand = undefined;\n\n this._viewport = new BoundingRectangle();\n this._useScissorTest = false;\n this._scissorRectangle = undefined;\n this._useHdr = undefined;\n}\n\nObject.defineProperties(GlobeTranslucencyFramebuffer.prototype, {\n classificationTexture: {\n get: function () {\n return this._colorTexture;\n },\n },\n classificationFramebuffer: {\n get: function () {\n return this._framebuffer;\n },\n },\n});\n\nfunction destroyResources(globeTranslucency) {\n globeTranslucency._colorTexture =\n globeTranslucency._colorTexture &&\n !globeTranslucency._colorTexture.isDestroyed() &&\n globeTranslucency._colorTexture.destroy();\n globeTranslucency._depthStencilTexture =\n globeTranslucency._depthStencilTexture &&\n !globeTranslucency._depthStencilTexture.isDestroyed() &&\n globeTranslucency._depthStencilTexture.destroy();\n globeTranslucency._depthStencilRenderbuffer =\n globeTranslucency._depthStencilRenderbuffer &&\n !globeTranslucency._depthStencilRenderbuffer.isDestroyed() &&\n globeTranslucency._depthStencilRenderbuffer.destroy();\n globeTranslucency._framebuffer =\n globeTranslucency._framebuffer &&\n !globeTranslucency._framebuffer.isDestroyed() &&\n globeTranslucency._framebuffer.destroy();\n globeTranslucency._packedDepthTexture =\n globeTranslucency._packedDepthTexture &&\n !globeTranslucency._packedDepthTexture.isDestroyed() &&\n globeTranslucency._packedDepthTexture.destroy();\n globeTranslucency._packedDepthFramebuffer =\n globeTranslucency._packedDepthFramebuffer &&\n !globeTranslucency._packedDepthFramebuffer.isDestroyed() &&\n globeTranslucency._packedDepthFramebuffer.destroy();\n}\n\nfunction createResources(globeTranslucency, context, width, height, hdr) {\n var pixelDatatype = hdr\n ? context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT\n : PixelDatatype.UNSIGNED_BYTE;\n globeTranslucency._colorTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n });\n\n if (context.depthTexture) {\n globeTranslucency._depthStencilTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n });\n } else {\n globeTranslucency._depthStencilRenderbuffer = new Renderbuffer({\n context: context,\n width: width,\n height: height,\n format: RenderbufferFormat.DEPTH_STENCIL,\n });\n }\n\n globeTranslucency._framebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeTranslucency._colorTexture],\n depthStencilTexture: globeTranslucency._depthStencilTexture,\n depthStencilRenderbuffer: globeTranslucency._depthStencilRenderbuffer,\n destroyAttachments: false,\n });\n\n globeTranslucency._packedDepthTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n globeTranslucency._packedDepthFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [globeTranslucency._packedDepthTexture],\n destroyAttachments: false,\n });\n}\n\nfunction updateResources(globeTranslucency, context, width, height, hdr) {\n var colorTexture = globeTranslucency._colorTexture;\n var textureChanged =\n !defined(colorTexture) ||\n colorTexture.width !== width ||\n colorTexture.height !== height ||\n hdr !== globeTranslucency._useHdr;\n if (textureChanged) {\n destroyResources(globeTranslucency);\n createResources(globeTranslucency, context, width, height, hdr);\n }\n}\n\nfunction updateCommands(globeTranslucency, context, width, height, passState) {\n globeTranslucency._viewport.width = width;\n globeTranslucency._viewport.height = height;\n\n var useScissorTest = !BoundingRectangle.equals(\n globeTranslucency._viewport,\n passState.viewport\n );\n var updateScissor = useScissorTest !== globeTranslucency._useScissorTest;\n globeTranslucency._useScissorTest = useScissorTest;\n\n if (\n !BoundingRectangle.equals(\n globeTranslucency._scissorRectangle,\n passState.viewport\n )\n ) {\n globeTranslucency._scissorRectangle = BoundingRectangle.clone(\n passState.viewport,\n globeTranslucency._scissorRectangle\n );\n updateScissor = true;\n }\n\n if (\n !defined(globeTranslucency._renderState) ||\n !BoundingRectangle.equals(\n globeTranslucency._viewport,\n globeTranslucency._renderState.viewport\n ) ||\n updateScissor\n ) {\n globeTranslucency._renderState = RenderState.fromCache({\n viewport: globeTranslucency._viewport,\n scissorTest: {\n enabled: globeTranslucency._useScissorTest,\n rectangle: globeTranslucency._scissorRectangle,\n },\n });\n }\n\n if (!defined(globeTranslucency._packedDepthCommand)) {\n globeTranslucency._packedDepthCommand = context.createViewportQuadCommand(\n PassThroughDepth,\n {\n uniformMap: {\n u_depthTexture: function () {\n return globeTranslucency._depthStencilTexture;\n },\n },\n owner: globeTranslucency,\n }\n );\n }\n\n if (!defined(globeTranslucency._clearCommand)) {\n globeTranslucency._clearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n depth: 1.0,\n stencil: 0.0,\n owner: globeTranslucency,\n });\n }\n\n globeTranslucency._packedDepthCommand.framebuffer =\n globeTranslucency._packedDepthFramebuffer;\n globeTranslucency._packedDepthCommand.renderState =\n globeTranslucency._renderState;\n globeTranslucency._clearCommand.framebuffer = globeTranslucency._framebuffer;\n globeTranslucency._clearCommand.renderState = globeTranslucency._renderState;\n}\n\nGlobeTranslucencyFramebuffer.prototype.updateAndClear = function (\n hdr,\n viewport,\n context,\n passState\n) {\n var width = viewport.width;\n var height = viewport.height;\n\n updateResources(this, context, width, height, hdr);\n updateCommands(this, context, width, height, passState);\n\n this._useHdr = hdr;\n};\n\nGlobeTranslucencyFramebuffer.prototype.clearClassification = function (\n context,\n passState\n) {\n this._clearCommand.execute(context, passState);\n};\n\nGlobeTranslucencyFramebuffer.prototype.packDepth = function (\n context,\n passState\n) {\n this._packedDepthCommand.execute(context, passState);\n return this._packedDepthTexture;\n};\n\nGlobeTranslucencyFramebuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nGlobeTranslucencyFramebuffer.prototype.destroy = function () {\n destroyResources(this);\n return destroyObject(this);\n};\n\nexport default GlobeTranslucencyFramebuffer;\n","import combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nvar DerivedCommandType = {\n OPAQUE_FRONT_FACE: 0,\n OPAQUE_BACK_FACE: 1,\n DEPTH_ONLY_FRONT_FACE: 2,\n DEPTH_ONLY_BACK_FACE: 3,\n DEPTH_ONLY_FRONT_AND_BACK_FACE: 4,\n TRANSLUCENT_FRONT_FACE: 5,\n TRANSLUCENT_BACK_FACE: 6,\n TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST: 7,\n TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST: 8,\n PICK_FRONT_FACE: 9,\n PICK_BACK_FACE: 10,\n DERIVED_COMMANDS_MAXIMUM_LENGTH: 11,\n};\n\nvar derivedCommandsMaximumLength =\n DerivedCommandType.DERIVED_COMMANDS_MAXIMUM_LENGTH;\n\nvar DerivedCommandNames = [\n \"opaqueFrontFaceCommand\",\n \"opaqueBackFaceCommand\",\n \"depthOnlyFrontFaceCommand\",\n \"depthOnlyBackFaceCommand\",\n \"depthOnlyFrontAndBackFaceCommand\",\n \"translucentFrontFaceCommand\",\n \"translucentBackFaceCommand\",\n \"translucentFrontFaceManualDepthTestCommand\",\n \"translucentBackFaceManualDepthTestCommand\",\n \"pickFrontFaceCommand\",\n \"pickBackFaceCommand\",\n];\n\n/**\n * @private\n */\nfunction GlobeTranslucencyState() {\n this._frontFaceAlphaByDistance = new NearFarScalar(0.0, 1.0, 0.0, 1.0);\n this._backFaceAlphaByDistance = new NearFarScalar(0.0, 1.0, 0.0, 1.0);\n\n this._frontFaceTranslucent = false;\n this._backFaceTranslucent = false;\n this._requiresManualDepthTest = false;\n this._sunVisibleThroughGlobe = false;\n this._environmentVisible = false;\n this._useDepthPlane = false;\n this._numberOfTextureUniforms = 0;\n this._globeTranslucencyFramebuffer = undefined;\n this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n\n this._derivedCommandKey = 0;\n this._derivedCommandsDirty = false;\n this._derivedCommandPacks = undefined;\n\n this._derivedCommandTypes = new Array(derivedCommandsMaximumLength);\n this._derivedBlendCommandTypes = new Array(derivedCommandsMaximumLength);\n this._derivedPickCommandTypes = new Array(derivedCommandsMaximumLength);\n this._derivedCommandTypesToUpdate = new Array(derivedCommandsMaximumLength);\n\n this._derivedCommandsLength = 0;\n this._derivedBlendCommandsLength = 0;\n this._derivedPickCommandsLength = 0;\n this._derivedCommandsToUpdateLength = 0;\n}\n\nObject.defineProperties(GlobeTranslucencyState.prototype, {\n frontFaceAlphaByDistance: {\n get: function () {\n return this._frontFaceAlphaByDistance;\n },\n },\n backFaceAlphaByDistance: {\n get: function () {\n return this._backFaceAlphaByDistance;\n },\n },\n translucent: {\n get: function () {\n return this._frontFaceTranslucent;\n },\n },\n sunVisibleThroughGlobe: {\n get: function () {\n return this._sunVisibleThroughGlobe;\n },\n },\n environmentVisible: {\n get: function () {\n return this._environmentVisible;\n },\n },\n useDepthPlane: {\n get: function () {\n return this._useDepthPlane;\n },\n },\n numberOfTextureUniforms: {\n get: function () {\n return this._numberOfTextureUniforms;\n },\n },\n rectangle: {\n get: function () {\n return this._rectangle;\n },\n },\n});\n\nGlobeTranslucencyState.prototype.update = function (scene) {\n var globe = scene.globe;\n if (!defined(globe) || !globe.show) {\n this._frontFaceTranslucent = false;\n this._backFaceTranslucent = false;\n this._sunVisibleThroughGlobe = true;\n this._environmentVisible = true;\n this._useDepthPlane = false;\n return;\n }\n\n this._frontFaceAlphaByDistance = updateAlphaByDistance(\n globe.translucency.enabled,\n globe.translucency.frontFaceAlpha,\n globe.translucency.frontFaceAlphaByDistance,\n this._frontFaceAlphaByDistance\n );\n this._backFaceAlphaByDistance = updateAlphaByDistance(\n globe.translucency.enabled,\n globe.translucency.backFaceAlpha,\n globe.translucency.backFaceAlphaByDistance,\n this._backFaceAlphaByDistance\n );\n\n this._frontFaceTranslucent = isFaceTranslucent(\n globe.translucency.enabled,\n this._frontFaceAlphaByDistance,\n globe\n );\n this._backFaceTranslucent = isFaceTranslucent(\n globe.translucency.enabled,\n this._backFaceAlphaByDistance,\n globe\n );\n\n this._requiresManualDepthTest = requiresManualDepthTest(this, scene, globe);\n\n this._sunVisibleThroughGlobe = isSunVisibleThroughGlobe(this, scene);\n this._environmentVisible = isEnvironmentVisible(this, scene);\n this._useDepthPlane = useDepthPlane(this, scene);\n this._numberOfTextureUniforms = getNumberOfTextureUniforms(this);\n\n this._rectangle = Rectangle.clone(\n globe.translucency.rectangle,\n this._rectangle\n );\n\n gatherDerivedCommandRequirements(this, scene);\n};\n\nfunction updateAlphaByDistance(enabled, alpha, alphaByDistance, result) {\n if (!enabled) {\n result.nearValue = 1.0;\n result.farValue = 1.0;\n return result;\n }\n\n if (!defined(alphaByDistance)) {\n result.nearValue = alpha;\n result.farValue = alpha;\n return result;\n }\n\n NearFarScalar.clone(alphaByDistance, result);\n result.nearValue *= alpha;\n result.farValue *= alpha;\n return result;\n}\n\nfunction isFaceTranslucent(translucencyEnabled, alphaByDistance, globe) {\n return (\n translucencyEnabled &&\n (globe.baseColor.alpha < 1.0 ||\n alphaByDistance.nearValue < 1.0 ||\n alphaByDistance.farValue < 1.0)\n );\n}\n\nfunction isSunVisibleThroughGlobe(state, scene) {\n // The sun is visible through the globe if the front and back faces are translucent when above ground\n // or if front faces are translucent when below ground\n var frontTranslucent = state._frontFaceTranslucent;\n var backTranslucent = state._backFaceTranslucent;\n return frontTranslucent && (scene.cameraUnderground || backTranslucent);\n}\n\nfunction isEnvironmentVisible(state, scene) {\n // The environment is visible if the camera is above ground or underground with translucency\n return !scene.cameraUnderground || state._frontFaceTranslucent;\n}\n\nfunction useDepthPlane(state, scene) {\n // Use the depth plane when the camera is above ground and the globe is opaque\n return !scene.cameraUnderground && !state._frontFaceTranslucent;\n}\n\nfunction requiresManualDepthTest(state, scene, globe) {\n return (\n state._frontFaceTranslucent &&\n !state._backFaceTranslucent &&\n !globe.depthTestAgainstTerrain &&\n scene.mode !== SceneMode.SCENE2D &&\n scene.context.depthTexture\n );\n}\n\nfunction getNumberOfTextureUniforms(state) {\n var numberOfTextureUniforms = 0;\n\n if (state._frontFaceTranslucent) {\n ++numberOfTextureUniforms; // classification texture\n }\n\n if (state._requiresManualDepthTest) {\n ++numberOfTextureUniforms; // czm_globeDepthTexture for manual depth testing\n }\n\n return numberOfTextureUniforms;\n}\n\nfunction gatherDerivedCommandRequirements(state, scene) {\n state._derivedCommandsLength = getDerivedCommandTypes(\n state,\n scene,\n false,\n false,\n state._derivedCommandTypes\n );\n\n state._derivedBlendCommandsLength = getDerivedCommandTypes(\n state,\n scene,\n true,\n false,\n state._derivedBlendCommandTypes\n );\n\n state._derivedPickCommandsLength = getDerivedCommandTypes(\n state,\n scene,\n false,\n true,\n state._derivedPickCommandTypes\n );\n\n var i;\n\n var derivedCommandKey = 0;\n for (i = 0; i < state._derivedCommandsLength; ++i) {\n derivedCommandKey |= 1 << state._derivedCommandTypes[i];\n }\n for (i = 0; i < state._derivedBlendCommandsLength; ++i) {\n derivedCommandKey |= 1 << state._derivedBlendCommandTypes[i];\n }\n for (i = 0; i < state._derivedPickCommandsLength; ++i) {\n derivedCommandKey |= 1 << state._derivedPickCommandTypes[i];\n }\n\n var derivedCommandsToUpdateLength = 0;\n for (i = 0; i < derivedCommandsMaximumLength; ++i) {\n if ((derivedCommandKey & (1 << i)) > 0) {\n state._derivedCommandTypesToUpdate[derivedCommandsToUpdateLength++] = i;\n }\n }\n state._derivedCommandsToUpdateLength = derivedCommandsToUpdateLength;\n\n var derivedCommandsDirty = derivedCommandKey !== state._derivedCommandKey;\n state._derivedCommandKey = derivedCommandKey;\n state._derivedCommandsDirty = derivedCommandsDirty;\n\n if (!defined(state._derivedCommandPacks) && state._frontFaceTranslucent) {\n state._derivedCommandPacks = createDerivedCommandPacks();\n }\n}\n\nfunction getDerivedCommandTypes(\n state,\n scene,\n isBlendCommand,\n isPickCommand,\n types\n) {\n var length = 0;\n\n var frontTranslucent = state._frontFaceTranslucent;\n var backTranslucent = state._backFaceTranslucent;\n\n if (!frontTranslucent) {\n // Don't use derived commands if the globe is opaque\n return length;\n }\n\n var cameraUnderground = scene.cameraUnderground;\n var requiresManualDepthTest = state._requiresManualDepthTest;\n\n var translucentFrontFaceCommandType = isPickCommand\n ? DerivedCommandType.PICK_FRONT_FACE\n : requiresManualDepthTest\n ? DerivedCommandType.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST\n : DerivedCommandType.TRANSLUCENT_FRONT_FACE;\n\n var translucentBackFaceCommandType = isPickCommand\n ? DerivedCommandType.PICK_BACK_FACE\n : requiresManualDepthTest\n ? DerivedCommandType.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST\n : DerivedCommandType.TRANSLUCENT_BACK_FACE;\n\n if (scene.mode === SceneMode.SCENE2D) {\n types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_FACE;\n types[length++] = translucentFrontFaceCommandType;\n return length;\n }\n\n if (backTranslucent) {\n // Push depth-only command for classification. Blend commands do not need to write depth.\n // Push translucent commands for front and back faces.\n if (!isBlendCommand) {\n types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE;\n }\n if (cameraUnderground) {\n types[length++] = translucentFrontFaceCommandType;\n types[length++] = translucentBackFaceCommandType;\n } else {\n types[length++] = translucentBackFaceCommandType;\n types[length++] = translucentFrontFaceCommandType;\n }\n } else {\n // Push opaque command for the face that appears in back.\n // Push depth-only command and translucent command for the face that appears in front.\n // eslint-disable-next-line no-lonely-if\n if (cameraUnderground) {\n if (!isBlendCommand) {\n types[length++] = DerivedCommandType.DEPTH_ONLY_BACK_FACE;\n }\n types[length++] = DerivedCommandType.OPAQUE_FRONT_FACE;\n types[length++] = translucentBackFaceCommandType;\n } else {\n if (!isBlendCommand) {\n types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_FACE;\n }\n types[length++] = DerivedCommandType.OPAQUE_BACK_FACE;\n types[length++] = translucentFrontFaceCommandType;\n }\n }\n\n return length;\n}\n\nfunction removeDefine(defines, defineToRemove) {\n var index = defines.indexOf(defineToRemove);\n if (index > -1) {\n defines.splice(index, 1);\n }\n}\n\nfunction hasDefine(defines, define) {\n return defines.indexOf(define) > -1;\n}\n\nfunction getOpaqueFrontFaceShaderProgram(vs, fs) {\n removeDefine(vs.defines, \"TRANSLUCENT\");\n removeDefine(fs.defines, \"TRANSLUCENT\");\n}\n\nfunction getOpaqueBackFaceShaderProgram(vs, fs) {\n removeDefine(vs.defines, \"GROUND_ATMOSPHERE\");\n removeDefine(fs.defines, \"GROUND_ATMOSPHERE\");\n removeDefine(vs.defines, \"FOG\");\n removeDefine(fs.defines, \"FOG\");\n removeDefine(vs.defines, \"TRANSLUCENT\");\n removeDefine(fs.defines, \"TRANSLUCENT\");\n}\n\nfunction getDepthOnlyShaderProgram(vs, fs) {\n if (\n hasDefine(fs.defines, \"TILE_LIMIT_RECTANGLE\") ||\n hasDefine(fs.defines, \"ENABLE_CLIPPING_PLANES\")\n ) {\n // Need to execute the full shader if discard is called\n return;\n }\n\n var depthOnlyShader =\n \"void main() \\n\" + \"{ \\n\" + \" gl_FragColor = vec4(1.0); \\n\" + \"} \\n\";\n\n fs.sources = [depthOnlyShader];\n}\n\nfunction getTranslucentShaderProgram(vs, fs) {\n var sources = fs.sources;\n var length = sources.length;\n for (var i = 0; i < length; ++i) {\n sources[i] = ShaderSource.replaceMain(\n sources[i],\n \"czm_globe_translucency_main\"\n );\n }\n\n var globeTranslucencyMain =\n \"\\n\\n\" +\n \"uniform sampler2D u_classificationTexture; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" vec2 st = gl_FragCoord.xy / czm_viewport.zw; \\n\" +\n \"#ifdef MANUAL_DEPTH_TEST \\n\" +\n \" float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, st)); \\n\" +\n \" if (logDepthOrDepth != 0.0) \\n\" +\n \" { \\n\" +\n \" vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); \\n\" +\n \" float depthEC = eyeCoordinate.z / eyeCoordinate.w; \\n\" +\n \" if (v_positionEC.z < depthEC) \\n\" +\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \"#endif \\n\" +\n \" czm_globe_translucency_main(); \\n\" +\n \" vec4 classificationColor = texture2D(u_classificationTexture, st); \\n\" +\n \" if (classificationColor.a > 0.0) \\n\" +\n \" { \\n\" +\n \" // Reverse premultiplication process to get the correct composited result of the classification primitives \\n\" +\n \" classificationColor.rgb /= classificationColor.a; \\n\" +\n \" } \\n\" +\n \" gl_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + gl_FragColor * (1.0 - classificationColor.a); \\n\" +\n \"} \\n\";\n\n sources.push(globeTranslucencyMain);\n}\n\nfunction getTranslucentBackFaceShaderProgram(vs, fs) {\n getTranslucentShaderProgram(vs, fs);\n removeDefine(vs.defines, \"GROUND_ATMOSPHERE\");\n removeDefine(fs.defines, \"GROUND_ATMOSPHERE\");\n removeDefine(vs.defines, \"FOG\");\n removeDefine(fs.defines, \"FOG\");\n}\n\nfunction getTranslucentFrontFaceManualDepthTestShaderProgram(vs, fs) {\n getTranslucentShaderProgram(vs, fs);\n vs.defines.push(\"GENERATE_POSITION\");\n fs.defines.push(\"MANUAL_DEPTH_TEST\");\n}\n\nfunction getTranslucentBackFaceManualDepthTestShaderProgram(vs, fs) {\n getTranslucentBackFaceShaderProgram(vs, fs);\n vs.defines.push(\"GENERATE_POSITION\");\n fs.defines.push(\"MANUAL_DEPTH_TEST\");\n}\n\nfunction getPickShaderProgram(vs, fs) {\n var pickShader =\n \"uniform sampler2D u_classificationTexture; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" vec2 st = gl_FragCoord.xy / czm_viewport.zw; \\n\" +\n \" vec4 pickColor = texture2D(u_classificationTexture, st); \\n\" +\n \" if (pickColor == vec4(0.0)) \\n\" +\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" gl_FragColor = pickColor; \\n\" +\n \"} \\n\";\n\n fs.sources = [pickShader];\n}\n\nfunction getDerivedShaderProgram(\n context,\n shaderProgram,\n derivedShaderProgram,\n shaderProgramDirty,\n getShaderProgramFunction,\n cacheName\n) {\n if (!defined(getShaderProgramFunction)) {\n return shaderProgram;\n }\n\n if (!shaderProgramDirty && defined(derivedShaderProgram)) {\n return derivedShaderProgram;\n }\n\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n cacheName\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n var vs = shaderProgram.vertexShaderSource.clone();\n var fs = shaderProgram.fragmentShaderSource.clone();\n vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n\n getShaderProgramFunction(vs, fs);\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n cacheName,\n {\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nfunction getOpaqueFrontFaceRenderState(renderState) {\n renderState.cull.face = CullFace.BACK;\n renderState.cull.enabled = true;\n}\n\nfunction getOpaqueBackFaceRenderState(renderState) {\n renderState.cull.face = CullFace.FRONT;\n renderState.cull.enabled = true;\n}\n\nfunction getDepthOnlyFrontFaceRenderState(renderState) {\n renderState.cull.face = CullFace.BACK;\n renderState.cull.enabled = true;\n renderState.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n}\n\nfunction getDepthOnlyBackFaceRenderState(renderState) {\n renderState.cull.face = CullFace.FRONT;\n renderState.cull.enabled = true;\n renderState.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n}\n\nfunction getDepthOnlyFrontAndBackFaceRenderState(renderState) {\n renderState.cull.enabled = false;\n renderState.colorMask = {\n red: false,\n green: false,\n blue: false,\n alpha: false,\n };\n}\n\nfunction getTranslucentFrontFaceRenderState(renderState) {\n renderState.cull.face = CullFace.BACK;\n renderState.cull.enabled = true;\n renderState.depthMask = false;\n renderState.blending = BlendingState.ALPHA_BLEND;\n}\n\nfunction getTranslucentBackFaceRenderState(renderState) {\n renderState.cull.face = CullFace.FRONT;\n renderState.cull.enabled = true;\n renderState.depthMask = false;\n renderState.blending = BlendingState.ALPHA_BLEND;\n}\n\nfunction getPickFrontFaceRenderState(renderState) {\n renderState.cull.face = CullFace.BACK;\n renderState.cull.enabled = true;\n renderState.blending.enabled = false;\n}\n\nfunction getPickBackFaceRenderState(renderState) {\n renderState.cull.face = CullFace.FRONT;\n renderState.cull.enabled = true;\n renderState.blending.enabled = false;\n}\n\nfunction getDerivedRenderState(\n renderState,\n derivedRenderState,\n renderStateDirty,\n getRenderStateFunction,\n cache\n) {\n if (!defined(getRenderStateFunction)) {\n return renderState;\n }\n\n if (!renderStateDirty && defined(derivedRenderState)) {\n return derivedRenderState;\n }\n\n var cachedRenderState = cache[renderState.id];\n if (!defined(cachedRenderState)) {\n var rs = RenderState.getState(renderState);\n getRenderStateFunction(rs);\n cachedRenderState = RenderState.fromCache(rs);\n cache[renderState.id] = cachedRenderState;\n }\n\n return cachedRenderState;\n}\n\nfunction getTranslucencyUniformMap(state) {\n return {\n u_classificationTexture: function () {\n return state._globeTranslucencyFramebuffer.classificationTexture;\n },\n };\n}\n\nfunction getDerivedUniformMap(\n state,\n uniformMap,\n derivedUniformMap,\n uniformMapDirty,\n getDerivedUniformMapFunction\n) {\n if (!defined(getDerivedUniformMapFunction)) {\n return uniformMap;\n }\n\n if (!uniformMapDirty && defined(derivedUniformMap)) {\n return derivedUniformMap;\n }\n\n return combine(uniformMap, getDerivedUniformMapFunction(state), false);\n}\n\nfunction DerivedCommandPack(options) {\n this.pass = options.pass;\n this.pickOnly = options.pickOnly;\n this.getShaderProgramFunction = options.getShaderProgramFunction;\n this.getRenderStateFunction = options.getRenderStateFunction;\n this.getUniformMapFunction = options.getUniformMapFunction;\n this.renderStateCache = {};\n}\n\nfunction createDerivedCommandPacks() {\n return [\n // opaqueFrontFaceCommand\n new DerivedCommandPack({\n pass: Pass.GLOBE,\n pickOnly: false,\n getShaderProgramFunction: getOpaqueFrontFaceShaderProgram,\n getRenderStateFunction: getOpaqueFrontFaceRenderState,\n getUniformMapFunction: undefined,\n }),\n // opaqueBackFaceCommand\n new DerivedCommandPack({\n pass: Pass.GLOBE,\n pickOnly: false,\n getShaderProgramFunction: getOpaqueBackFaceShaderProgram,\n getRenderStateFunction: getOpaqueBackFaceRenderState,\n getUniformMapFunction: undefined,\n }),\n // depthOnlyFrontFaceCommand\n new DerivedCommandPack({\n pass: Pass.GLOBE,\n pickOnly: false,\n getShaderProgramFunction: getDepthOnlyShaderProgram,\n getRenderStateFunction: getDepthOnlyFrontFaceRenderState,\n getUniformMapFunction: undefined,\n }),\n // depthOnlyBackFaceCommand\n new DerivedCommandPack({\n pass: Pass.GLOBE,\n pickOnly: false,\n getShaderProgramFunction: getDepthOnlyShaderProgram,\n getRenderStateFunction: getDepthOnlyBackFaceRenderState,\n getUniformMapFunction: undefined,\n }),\n // depthOnlyFrontAndBackFaceCommand\n new DerivedCommandPack({\n pass: Pass.GLOBE,\n pickOnly: false,\n getShaderProgramFunction: getDepthOnlyShaderProgram,\n getRenderStateFunction: getDepthOnlyFrontAndBackFaceRenderState,\n getUniformMapFunction: undefined,\n }),\n // translucentFrontFaceCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: false,\n getShaderProgramFunction: getTranslucentShaderProgram,\n getRenderStateFunction: getTranslucentFrontFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n // translucentBackFaceCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: false,\n getShaderProgramFunction: getTranslucentBackFaceShaderProgram,\n getRenderStateFunction: getTranslucentBackFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n // translucentFrontFaceManualDepthTestCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: false,\n getShaderProgramFunction: getTranslucentFrontFaceManualDepthTestShaderProgram,\n getRenderStateFunction: getTranslucentFrontFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n // translucentBackFaceManualDepthTestCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: false,\n getShaderProgramFunction: getTranslucentBackFaceManualDepthTestShaderProgram,\n getRenderStateFunction: getTranslucentBackFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n // pickFrontFaceCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: true,\n getShaderProgramFunction: getPickShaderProgram,\n getRenderStateFunction: getPickFrontFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n // pickBackFaceCommand\n new DerivedCommandPack({\n pass: Pass.TRANSLUCENT,\n pickOnly: true,\n getShaderProgramFunction: getPickShaderProgram,\n getRenderStateFunction: getPickBackFaceRenderState,\n getUniformMapFunction: getTranslucencyUniformMap,\n }),\n ];\n}\n\nvar derivedCommandNames = new Array(derivedCommandsMaximumLength);\nvar derivedCommandPacks = new Array(derivedCommandsMaximumLength);\n\nGlobeTranslucencyState.prototype.updateDerivedCommands = function (\n command,\n frameState\n) {\n var derivedCommandTypes = this._derivedCommandTypesToUpdate;\n var derivedCommandsLength = this._derivedCommandsToUpdateLength;\n\n if (derivedCommandsLength === 0) {\n return;\n }\n\n for (var i = 0; i < derivedCommandsLength; ++i) {\n derivedCommandPacks[i] = this._derivedCommandPacks[derivedCommandTypes[i]];\n derivedCommandNames[i] = DerivedCommandNames[derivedCommandTypes[i]];\n }\n\n updateDerivedCommands(\n this,\n command,\n derivedCommandsLength,\n derivedCommandTypes,\n derivedCommandNames,\n derivedCommandPacks,\n frameState\n );\n};\n\nfunction updateDerivedCommands(\n state,\n command,\n derivedCommandsLength,\n derivedCommandTypes,\n derivedCommandNames,\n derivedCommandPacks,\n frameState\n) {\n var derivedCommandsObject = command.derivedCommands.globeTranslucency;\n var derivedCommandsDirty = state._derivedCommandsDirty;\n\n if (\n command.dirty ||\n !defined(derivedCommandsObject) ||\n derivedCommandsDirty\n ) {\n command.dirty = false;\n\n if (!defined(derivedCommandsObject)) {\n derivedCommandsObject = {};\n command.derivedCommands.globeTranslucency = derivedCommandsObject;\n }\n\n var frameNumber = frameState.frameNumber;\n\n var uniformMapDirtyFrame = defaultValue(\n derivedCommandsObject.uniformMapDirtyFrame,\n 0\n );\n var shaderProgramDirtyFrame = defaultValue(\n derivedCommandsObject.shaderProgramDirtyFrame,\n 0\n );\n var renderStateDirtyFrame = defaultValue(\n derivedCommandsObject.renderStateDirtyFrame,\n 0\n );\n\n var uniformMapDirty =\n derivedCommandsObject.uniformMap !== command.uniformMap;\n\n var shaderProgramDirty =\n derivedCommandsObject.shaderProgramId !== command.shaderProgram.id;\n\n var renderStateDirty =\n derivedCommandsObject.renderStateId !== command.renderState.id;\n\n if (uniformMapDirty) {\n derivedCommandsObject.uniformMapDirtyFrame = frameNumber;\n }\n if (shaderProgramDirty) {\n derivedCommandsObject.shaderProgramDirtyFrame = frameNumber;\n }\n if (renderStateDirty) {\n derivedCommandsObject.renderStateDirtyFrame = frameNumber;\n }\n\n derivedCommandsObject.uniformMap = command.uniformMap;\n derivedCommandsObject.shaderProgramId = command.shaderProgram.id;\n derivedCommandsObject.renderStateId = command.renderState.id;\n\n for (var i = 0; i < derivedCommandsLength; ++i) {\n var derivedCommandPack = derivedCommandPacks[i];\n var derivedCommandType = derivedCommandTypes[i];\n var derivedCommandName = derivedCommandNames[i];\n var derivedCommand = derivedCommandsObject[derivedCommandName];\n\n var derivedUniformMap;\n var derivedShaderProgram;\n var derivedRenderState;\n\n if (defined(derivedCommand)) {\n derivedUniformMap = derivedCommand.uniformMap;\n derivedShaderProgram = derivedCommand.shaderProgram;\n derivedRenderState = derivedCommand.renderState;\n } else {\n derivedUniformMap = undefined;\n derivedShaderProgram = undefined;\n derivedRenderState = undefined;\n }\n\n derivedCommand = DrawCommand.shallowClone(command, derivedCommand);\n derivedCommandsObject[derivedCommandName] = derivedCommand;\n\n var derivedUniformMapDirtyFrame = defaultValue(\n derivedCommand.derivedCommands.uniformMapDirtyFrame,\n 0\n );\n var derivedShaderProgramDirtyFrame = defaultValue(\n derivedCommand.derivedCommands.shaderProgramDirtyFrame,\n 0\n );\n var derivedRenderStateDirtyFrame = defaultValue(\n derivedCommand.derivedCommands.renderStateDirtyFrame,\n 0\n );\n\n var derivedUniformMapDirty =\n uniformMapDirty || derivedUniformMapDirtyFrame < uniformMapDirtyFrame;\n var derivedShaderProgramDirty =\n shaderProgramDirty ||\n derivedShaderProgramDirtyFrame < shaderProgramDirtyFrame;\n var derivedRenderStateDirty =\n renderStateDirty ||\n derivedRenderStateDirtyFrame < renderStateDirtyFrame;\n\n if (derivedUniformMapDirty) {\n derivedCommand.derivedCommands.uniformMapDirtyFrame = frameNumber;\n }\n if (derivedShaderProgramDirty) {\n derivedCommand.derivedCommands.shaderProgramDirtyFrame = frameNumber;\n }\n if (derivedRenderStateDirty) {\n derivedCommand.derivedCommands.renderStateDirtyFrame = frameNumber;\n }\n\n derivedCommand.derivedCommands.type = derivedCommandType;\n derivedCommand.pass = derivedCommandPack.pass;\n derivedCommand.pickOnly = derivedCommandPack.pickOnly;\n derivedCommand.uniformMap = getDerivedUniformMap(\n state,\n command.uniformMap,\n derivedUniformMap,\n derivedUniformMapDirty,\n derivedCommandPack.getUniformMapFunction\n );\n derivedCommand.shaderProgram = getDerivedShaderProgram(\n frameState.context,\n command.shaderProgram,\n derivedShaderProgram,\n derivedShaderProgramDirty,\n derivedCommandPack.getShaderProgramFunction,\n derivedCommandName\n );\n derivedCommand.renderState = getDerivedRenderState(\n command.renderState,\n derivedRenderState,\n derivedRenderStateDirty,\n derivedCommandPack.getRenderStateFunction,\n derivedCommandPack.renderStateCache\n );\n }\n }\n}\n\nGlobeTranslucencyState.prototype.pushDerivedCommands = function (\n command,\n isBlendCommand,\n frameState\n) {\n var picking = frameState.passes.pick;\n if (picking && isBlendCommand) {\n // No need to push blend commands in the pick pass\n return;\n }\n\n var derivedCommandTypes = this._derivedCommandTypes;\n var derivedCommandsLength = this._derivedCommandsLength;\n\n if (picking) {\n derivedCommandTypes = this._derivedPickCommandTypes;\n derivedCommandsLength = this._derivedPickCommandsLength;\n } else if (isBlendCommand) {\n derivedCommandTypes = this._derivedBlendCommandTypes;\n derivedCommandsLength = this._derivedBlendCommandsLength;\n }\n\n if (derivedCommandsLength === 0) {\n // No derived commands to push so just push the globe command\n frameState.commandList.push(command);\n return;\n }\n\n // Push derived commands\n var derivedCommands = command.derivedCommands.globeTranslucency;\n for (var i = 0; i < derivedCommandsLength; ++i) {\n var derivedCommandName = DerivedCommandNames[derivedCommandTypes[i]];\n frameState.commandList.push(derivedCommands[derivedCommandName]);\n }\n};\n\nfunction executeCommandsMatchingType(\n commands,\n commandsLength,\n executeCommandFunction,\n scene,\n context,\n passState,\n types\n) {\n for (var i = 0; i < commandsLength; ++i) {\n var command = commands[i];\n var type = command.derivedCommands.type;\n if (!defined(types) || types.indexOf(type) > -1) {\n executeCommandFunction(command, scene, context, passState);\n }\n }\n}\n\nfunction executeCommands(\n commands,\n commandsLength,\n executeCommandFunction,\n scene,\n context,\n passState\n) {\n for (var i = 0; i < commandsLength; ++i) {\n executeCommandFunction(commands[i], scene, context, passState);\n }\n}\n\nvar opaqueTypes = [\n DerivedCommandType.OPAQUE_FRONT_FACE,\n DerivedCommandType.OPAQUE_BACK_FACE,\n];\nvar depthOnlyTypes = [\n DerivedCommandType.DEPTH_ONLY_FRONT_FACE,\n DerivedCommandType.DEPTH_ONLY_BACK_FACE,\n DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE,\n];\n\nGlobeTranslucencyState.prototype.executeGlobeCommands = function (\n frustumCommands,\n executeCommandFunction,\n globeTranslucencyFramebuffer,\n scene,\n passState\n) {\n var context = scene.context;\n var globeCommands = frustumCommands.commands[Pass.GLOBE];\n var globeCommandsLength = frustumCommands.indices[Pass.GLOBE];\n\n if (globeCommandsLength === 0) {\n return;\n }\n\n this._globeTranslucencyFramebuffer = globeTranslucencyFramebuffer;\n globeTranslucencyFramebuffer.clearClassification(context, passState);\n\n // Render opaque commands like normal\n executeCommandsMatchingType(\n globeCommands,\n globeCommandsLength,\n executeCommandFunction,\n scene,\n context,\n passState,\n opaqueTypes\n );\n};\n\nGlobeTranslucencyState.prototype.executeGlobeClassificationCommands = function (\n frustumCommands,\n executeCommandFunction,\n globeTranslucencyFramebuffer,\n scene,\n passState\n) {\n var context = scene.context;\n var globeCommands = frustumCommands.commands[Pass.GLOBE];\n var globeCommandsLength = frustumCommands.indices[Pass.GLOBE];\n var classificationCommands =\n frustumCommands.commands[Pass.TERRAIN_CLASSIFICATION];\n var classificationCommandsLength =\n frustumCommands.indices[Pass.TERRAIN_CLASSIFICATION];\n\n if (globeCommandsLength === 0 || classificationCommandsLength === 0) {\n return;\n }\n\n var frontTranslucent = this._frontFaceTranslucent;\n var backTranslucent = this._backFaceTranslucent;\n\n if (!frontTranslucent || !backTranslucent) {\n // Render classification on opaque faces like normal\n executeCommands(\n classificationCommands,\n classificationCommandsLength,\n executeCommandFunction,\n scene,\n context,\n passState\n );\n }\n\n if (!frontTranslucent && !backTranslucent) {\n // No translucent commands to render. Skip translucent classification.\n return;\n }\n\n this._globeTranslucencyFramebuffer = globeTranslucencyFramebuffer;\n\n var originalGlobeDepthTexture = context.uniformState.globeDepthTexture;\n var originalFramebuffer = passState.framebuffer;\n\n // Render to internal framebuffer and get the first depth peel\n passState.framebuffer =\n globeTranslucencyFramebuffer.classificationFramebuffer;\n\n executeCommandsMatchingType(\n globeCommands,\n globeCommandsLength,\n executeCommandFunction,\n scene,\n context,\n passState,\n depthOnlyTypes\n );\n\n if (context.depthTexture) {\n // Pack depth into separate texture for ground polylines and textured ground primitives\n var packedDepthTexture = globeTranslucencyFramebuffer.packDepth(\n context,\n passState\n );\n context.uniformState.globeDepthTexture = packedDepthTexture;\n }\n\n // Render classification on translucent faces\n executeCommands(\n classificationCommands,\n classificationCommandsLength,\n executeCommandFunction,\n scene,\n context,\n passState\n );\n\n // Unset temporary state\n context.uniformState.globeDepthTexture = originalGlobeDepthTexture;\n passState.framebuffer = originalFramebuffer;\n};\n\nexport default GlobeTranslucencyState;\n","import Credit from \"../Core/Credit.js\";\nimport decodeGoogleEarthEnterpriseData from \"../Core/decodeGoogleEarthEnterpriseData.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport GoogleEarthEnterpriseMetadata from \"../Core/GoogleEarthEnterpriseMetadata.js\";\nimport loadImageFromTypedArray from \"../Core/loadImageFromTypedArray.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport protobuf from \"../ThirdParty/protobuf-minimal.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * @private\n */\nfunction GoogleEarthEnterpriseDiscardPolicy() {\n this._image = new Image();\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {Boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nGoogleEarthEnterpriseDiscardPolicy.prototype.isReady = function () {\n return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {Boolean} True if the image should be discarded; otherwise, false.\n */\nGoogleEarthEnterpriseDiscardPolicy.prototype.shouldDiscardImage = function (\n image\n) {\n return image === this._image;\n};\n\n/**\n * @typedef {Object} GoogleEarthEnterpriseImageryProvider.ConstructorOptions\n *\n * Initialization options for the GoogleEarthEnterpriseImageryProvider constructor\n *\n * @property {Resource|String} url The url of the Google Earth Enterprise server hosting the imagery.\n * @property {GoogleEarthEnterpriseMetadata} metadata A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseTerrainProvider.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n * is invalid and should be discarded. If this value is not specified, a default\n * is to discard tiles that fail to download.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Provides tiled imagery using the Google Earth Enterprise REST API.\n *\n * Notes: This provider is for use with the 3D Earth API of Google Earth Enterprise,\n * {@link GoogleEarthEnterpriseMapsProvider} should be used with 2D Maps API.\n *\n * @alias GoogleEarthEnterpriseImageryProvider\n * @constructor\n *\n * @param {GoogleEarthEnterpriseImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see GoogleEarthEnterpriseTerrainProvider\n * @see ArcGisMapServerImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * var geeMetadata = new GoogleEarthEnterpriseMetadata('http://www.earthenterprise.org/3d');\n * var gee = new Cesium.GoogleEarthEnterpriseImageryProvider({\n * metadata : geeMetadata\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!(defined(options.url) || defined(options.metadata))) {\n throw new DeveloperError(\"options.url or options.metadata is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var metadata;\n if (defined(options.metadata)) {\n metadata = options.metadata;\n } else {\n var resource = Resource.createIfNeeded(options.url);\n metadata = new GoogleEarthEnterpriseMetadata(resource);\n }\n this._metadata = metadata;\n this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n this._tilingScheme = new GeographicTilingScheme({\n numberOfLevelZeroTilesX: 2,\n numberOfLevelZeroTilesY: 2,\n rectangle: new Rectangle(\n -CesiumMath.PI,\n -CesiumMath.PI,\n CesiumMath.PI,\n CesiumMath.PI\n ),\n ellipsoid: options.ellipsoid,\n });\n\n var credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n this._credit = credit;\n\n this._tileWidth = 256;\n this._tileHeight = 256;\n this._maximumLevel = 23;\n\n // Install the default tile discard policy if none has been supplied.\n if (!defined(this._tileDiscardPolicy)) {\n this._tileDiscardPolicy = new GoogleEarthEnterpriseDiscardPolicy();\n }\n\n this._errorEvent = new Event();\n\n this._ready = false;\n var that = this;\n var metadataError;\n this._readyPromise = metadata.readyPromise\n .then(function (result) {\n if (!metadata.imageryPresent) {\n var e = new RuntimeError(\n \"The server \" + metadata.url + \" doesn't have imagery\"\n );\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n e.message,\n undefined,\n undefined,\n undefined,\n e\n );\n return when.reject(e);\n }\n\n TileProviderError.handleSuccess(metadataError);\n that._ready = result;\n return result;\n })\n .otherwise(function (e) {\n metadataError = TileProviderError.handleError(\n metadataError,\n that,\n that._errorEvent,\n e.message,\n undefined,\n undefined,\n undefined,\n e\n );\n return when.reject(e);\n });\n}\n\nObject.defineProperties(GoogleEarthEnterpriseImageryProvider.prototype, {\n /**\n * Gets the name of the Google Earth Enterprise server url hosting the imagery.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._metadata.url;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._metadata.proxy;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileWidth must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileHeight must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"maximumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"minimumLevel must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return 0;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tilingScheme must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"rectangle must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"tileDiscardPolicy must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n return this._tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._credit;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage\n * and texture upload time.\n * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return false;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.getTileCredits = function (\n x,\n y,\n level\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"getTileCredits must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var metadata = this._metadata;\n var info = metadata.getTileInformation(x, y, level);\n if (defined(info)) {\n var credit = metadata.providers[info.imageryProvider];\n if (defined(credit)) {\n return [credit];\n }\n }\n\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link GoogleEarthEnterpriseImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!this._ready) {\n throw new DeveloperError(\n \"requestImage must not be called before the imagery provider is ready.\"\n );\n }\n //>>includeEnd('debug');\n\n var invalidImage = this._tileDiscardPolicy._image; // Empty image or undefined depending on discard policy\n var metadata = this._metadata;\n var quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n var info = metadata.getTileInformation(x, y, level);\n if (!defined(info)) {\n if (metadata.isValid(quadKey)) {\n var metadataRequest = new Request({\n throttle: request.throttle,\n throttleByServer: request.throttleByServer,\n type: request.type,\n priorityFunction: request.priorityFunction,\n });\n metadata.populateSubtree(x, y, level, metadataRequest);\n return undefined; // No metadata so return undefined so we can be loaded later\n }\n return invalidImage; // Image doesn't exist\n }\n\n if (!info.hasImagery()) {\n // Already have info and there isn't any imagery here\n return invalidImage;\n }\n var promise = buildImageResource(\n this,\n info,\n x,\n y,\n level,\n request\n ).fetchArrayBuffer();\n if (!defined(promise)) {\n return undefined; // Throttled\n }\n\n return promise.then(function (image) {\n decodeGoogleEarthEnterpriseData(metadata.key, image);\n var a = new Uint8Array(image);\n var type;\n\n var protoImagery = metadata.protoImagery;\n if (!defined(protoImagery) || !protoImagery) {\n type = getImageType(a);\n }\n\n if (!defined(type) && (!defined(protoImagery) || protoImagery)) {\n var message = decodeEarthImageryPacket(a);\n type = message.imageType;\n a = message.imageData;\n }\n\n if (!defined(type) || !defined(a)) {\n return invalidImage;\n }\n\n return loadImageFromTypedArray({\n uint8Array: a,\n format: type,\n flipY: true,\n });\n });\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\n\n//\n// Functions to handle imagery packets\n//\nfunction buildImageResource(imageryProvider, info, x, y, level, request) {\n var quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n var version = info.imageryVersion;\n version = defined(version) && version > 0 ? version : 1;\n\n return imageryProvider._metadata.resource.getDerivedResource({\n url: \"flatfile?f1-0\" + quadKey + \"-i.\" + version.toString(),\n request: request,\n });\n}\n\n// Detects if a Uint8Array is a JPEG or PNG\nfunction getImageType(image) {\n var jpeg = \"JFIF\";\n if (\n image[6] === jpeg.charCodeAt(0) &&\n image[7] === jpeg.charCodeAt(1) &&\n image[8] === jpeg.charCodeAt(2) &&\n image[9] === jpeg.charCodeAt(3)\n ) {\n return \"image/jpeg\";\n }\n\n var png = \"PNG\";\n if (\n image[1] === png.charCodeAt(0) &&\n image[2] === png.charCodeAt(1) &&\n image[3] === png.charCodeAt(2)\n ) {\n return \"image/png\";\n }\n\n return undefined;\n}\n\n// Decodes an Imagery protobuf into the message\n// Partially generated with the help of protobuf.js static generator\nfunction decodeEarthImageryPacket(data) {\n var reader = protobuf.Reader.create(data);\n var end = reader.len;\n var message = {};\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.imageType = reader.uint32();\n break;\n case 2:\n message.imageData = reader.bytes();\n break;\n case 3:\n message.alphaType = reader.uint32();\n break;\n case 4:\n message.imageAlpha = reader.bytes();\n break;\n case 5:\n var copyrightIds = message.copyrightIds;\n if (!defined(copyrightIds)) {\n copyrightIds = message.copyrightIds = [];\n }\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n copyrightIds.push(reader.uint32());\n }\n } else {\n copyrightIds.push(reader.uint32());\n }\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n\n var imageType = message.imageType;\n if (defined(imageType)) {\n switch (imageType) {\n case 0:\n message.imageType = \"image/jpeg\";\n break;\n case 4:\n message.imageType = \"image/png\";\n break;\n default:\n throw new RuntimeError(\n \"GoogleEarthEnterpriseImageryProvider: Unsupported image type.\"\n );\n }\n }\n\n var alphaType = message.alphaType;\n if (defined(alphaType) && alphaType !== 0) {\n console.log(\n \"GoogleEarthEnterpriseImageryProvider: External alpha not supported.\"\n );\n delete message.alphaType;\n delete message.imageAlpha;\n }\n\n return message;\n}\nexport default GoogleEarthEnterpriseImageryProvider;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\n\nvar defaultColor = new Color(1.0, 1.0, 1.0, 0.4);\nvar defaultGlowColor = new Color(0.0, 1.0, 0.0, 0.05);\nvar defaultBackgroundColor = new Color(0.0, 0.5, 0.0, 0.2);\n\n/**\n * @typedef {Object} GridImageryProvider.ConstructorOptions\n *\n * Initialization options for the GridImageryProvider constructor\n *\n * @param {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme for which to draw tiles.\n * @param {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @param {Number} [cells=8] The number of grids cells.\n * @param {Color} [color=Color(1.0, 1.0, 1.0, 0.4)] The color to draw grid lines.\n * @param {Color} [glowColor=Color(0.0, 1.0, 0.0, 0.05)] The color to draw glow for grid lines.\n * @param {Number} [glowWidth=6] The width of lines used for rendering the line glow effect.\n * @param {Color} [backgroundColor=Color(0.0, 0.5, 0.0, 0.2)] Background fill color.\n * @param {Number} [tileWidth=256] The width of the tile for level-of-detail selection purposes.\n * @param {Number} [tileHeight=256] The height of the tile for level-of-detail selection purposes.\n * @param {Number} [canvasSize=256] The size of the canvas used for rendering.\n */\n\n/**\n * An {@link ImageryProvider} that draws a wireframe grid on every tile with controllable background and glow.\n * May be useful for custom rendering effects or debugging terrain.\n *\n * @alias GridImageryProvider\n * @constructor\n * @param {GridImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n */\nfunction GridImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n this._tilingScheme = defined(options.tilingScheme)\n ? options.tilingScheme\n : new GeographicTilingScheme({ ellipsoid: options.ellipsoid });\n this._cells = defaultValue(options.cells, 8);\n this._color = defaultValue(options.color, defaultColor);\n this._glowColor = defaultValue(options.glowColor, defaultGlowColor);\n this._glowWidth = defaultValue(options.glowWidth, 6);\n this._backgroundColor = defaultValue(\n options.backgroundColor,\n defaultBackgroundColor\n );\n this._errorEvent = new Event();\n\n this._tileWidth = defaultValue(options.tileWidth, 256);\n this._tileHeight = defaultValue(options.tileHeight, 256);\n\n // A little larger than tile size so lines are sharper\n // Note: can't be too much difference otherwise texture blowout\n this._canvasSize = defaultValue(options.canvasSize, 256);\n\n // We only need a single canvas since all tiles will be the same\n this._canvas = this._createGridCanvas();\n\n this._readyPromise = when.resolve(true);\n}\n\nObject.defineProperties(GridImageryProvider.prototype, {\n /**\n * Gets the proxy used by this provider.\n * @memberof GridImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof GridImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof GridImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return true;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof GridImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link GridImageryProvider#ready} returns true.\n * @memberof GridImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof GridImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n});\n\n/**\n * Draws a grid of lines into a canvas.\n */\nGridImageryProvider.prototype._drawGrid = function (context) {\n var minPixel = 0;\n var maxPixel = this._canvasSize;\n for (var x = 0; x <= this._cells; ++x) {\n var nx = x / this._cells;\n var val = 1 + nx * (maxPixel - 1);\n\n context.moveTo(val, minPixel);\n context.lineTo(val, maxPixel);\n context.moveTo(minPixel, val);\n context.lineTo(maxPixel, val);\n }\n context.stroke();\n};\n\n/**\n * Render a grid into a canvas with background and glow\n */\nGridImageryProvider.prototype._createGridCanvas = function () {\n var canvas = document.createElement(\"canvas\");\n canvas.width = this._canvasSize;\n canvas.height = this._canvasSize;\n var minPixel = 0;\n var maxPixel = this._canvasSize;\n\n var context = canvas.getContext(\"2d\");\n\n // Fill the background\n var cssBackgroundColor = this._backgroundColor.toCssColorString();\n context.fillStyle = cssBackgroundColor;\n context.fillRect(minPixel, minPixel, maxPixel, maxPixel);\n\n // Glow for grid lines\n var cssGlowColor = this._glowColor.toCssColorString();\n context.strokeStyle = cssGlowColor;\n // Wide\n context.lineWidth = this._glowWidth;\n context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n this._drawGrid(context);\n // Narrow\n context.lineWidth = this._glowWidth * 0.5;\n context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n this._drawGrid(context);\n\n // Grid lines\n var cssColor = this._color.toCssColorString();\n // Border\n context.strokeStyle = cssColor;\n context.lineWidth = 2;\n context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n // Inner\n context.lineWidth = 1;\n this._drawGrid(context);\n\n return canvas;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nGridImageryProvider.prototype.getTileCredits = function (x, y, level) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link GridImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n */\nGridImageryProvider.prototype.requestImage = function (x, y, level, request) {\n return this._canvas;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nGridImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\nexport default GridImageryProvider;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * @private\n */\nfunction InvertClassification() {\n this.previousFramebuffer = undefined;\n this._previousFramebuffer = undefined;\n\n this._texture = undefined;\n this._classifiedTexture = undefined;\n this._depthStencilTexture = undefined;\n this._fbo = undefined;\n this._fboClassified = undefined;\n\n this._rsUnclassified = undefined;\n this._rsClassified = undefined;\n\n this._unclassifiedCommand = undefined;\n this._classifiedCommand = undefined;\n this._translucentCommand = undefined;\n\n this._clearColorCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n owner: this,\n });\n this._clearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n depth: 1.0,\n stencil: 0,\n });\n\n var that = this;\n this._uniformMap = {\n colorTexture: function () {\n return that._texture;\n },\n depthTexture: function () {\n return that._depthStencilTexture;\n },\n classifiedTexture: function () {\n return that._classifiedTexture;\n },\n };\n}\n\nObject.defineProperties(InvertClassification.prototype, {\n unclassifiedCommand: {\n get: function () {\n return this._unclassifiedCommand;\n },\n },\n});\n\nInvertClassification.isTranslucencySupported = function (context) {\n return context.depthTexture && context.fragmentDepth;\n};\n\nvar rsUnclassified = {\n depthMask: false,\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.EQUAL,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: StencilFunction.NEVER,\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n blending: BlendingState.ALPHA_BLEND,\n};\n\nvar rsClassified = {\n depthMask: false,\n stencilTest: {\n enabled: true,\n frontFunction: StencilFunction.NOT_EQUAL,\n frontOperation: {\n fail: StencilOperation.KEEP,\n zFail: StencilOperation.KEEP,\n zPass: StencilOperation.KEEP,\n },\n backFunction: StencilFunction.NEVER,\n reference: 0,\n mask: StencilConstants.CLASSIFICATION_MASK,\n },\n blending: BlendingState.ALPHA_BLEND,\n};\n\n// Set the 3D Tiles bit when rendering back into the scene's framebuffer. This is only needed if\n// invert classification does not use the scene's depth-stencil texture, which is the case if the invert\n// classification color is translucent.\nvar rsDefault = {\n depthMask: true,\n depthTest: {\n enabled: true,\n },\n stencilTest: StencilConstants.setCesium3DTileBit(),\n stencilMask: StencilConstants.CESIUM_3D_TILE_MASK,\n blending: BlendingState.ALPHA_BLEND,\n};\n\nvar translucentFS =\n \"#extension GL_EXT_frag_depth : enable\\n\" +\n \"uniform sampler2D colorTexture;\\n\" +\n \"uniform sampler2D depthTexture;\\n\" +\n \"uniform sampler2D classifiedTexture;\\n\" +\n \"varying vec2 v_textureCoordinates;\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n\" +\n \" if (color.a == 0.0)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \" bool isClassified = all(equal(texture2D(classifiedTexture, v_textureCoordinates), vec4(0.0)));\\n\" +\n \"#ifdef UNCLASSIFIED\\n\" +\n \" vec4 highlightColor = czm_invertClassificationColor;\\n\" +\n \" if (isClassified)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \"#else\\n\" +\n \" vec4 highlightColor = vec4(1.0);\\n\" +\n \" if (!isClassified)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \"#endif\\n\" +\n \" gl_FragColor = color * highlightColor;\\n\" +\n \" gl_FragDepthEXT = texture2D(depthTexture, v_textureCoordinates).r;\\n\" +\n \"}\\n\";\n\nvar opaqueFS =\n \"uniform sampler2D colorTexture;\\n\" +\n \"varying vec2 v_textureCoordinates;\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n\" +\n \" if (color.a == 0.0)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n \"#ifdef UNCLASSIFIED\\n\" +\n \" gl_FragColor = color * czm_invertClassificationColor;\\n\" +\n \"#else\\n\" +\n \" gl_FragColor = color;\\n\" +\n \"#endif\\n\" +\n \"}\\n\";\n\nInvertClassification.prototype.update = function (context) {\n var texture = this._texture;\n var previousFramebufferChanged =\n !defined(texture) || this.previousFramebuffer !== this._previousFramebuffer;\n this._previousFramebuffer = this.previousFramebuffer;\n\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n\n var textureChanged =\n !defined(texture) || texture.width !== width || texture.height !== height;\n if (textureChanged || previousFramebufferChanged) {\n this._texture = this._texture && this._texture.destroy();\n this._classifiedTexture =\n this._classifiedTexture && this._classifiedTexture.destroy();\n this._depthStencilTexture =\n this._depthStencilTexture && this._depthStencilTexture.destroy();\n\n this._texture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR,\n }),\n });\n\n if (!defined(this._previousFramebuffer)) {\n this._classifiedTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: TextureMinificationFilter.LINEAR,\n magnificationFilter: TextureMagnificationFilter.LINEAR,\n }),\n });\n this._depthStencilTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n });\n }\n }\n\n if (!defined(this._fbo) || textureChanged || previousFramebufferChanged) {\n this._fbo = this._fbo && this._fbo.destroy();\n this._fboClassified = this._fboClassified && this._fboClassified.destroy();\n\n var depthStencilTexture;\n var depthStencilRenderbuffer;\n if (defined(this._previousFramebuffer)) {\n depthStencilTexture = this._previousFramebuffer.depthStencilTexture;\n depthStencilRenderbuffer = this._previousFramebuffer\n .depthStencilRenderbuffer;\n } else {\n depthStencilTexture = this._depthStencilTexture;\n }\n\n this._fbo = new Framebuffer({\n context: context,\n colorTextures: [this._texture],\n depthStencilTexture: depthStencilTexture,\n depthStencilRenderbuffer: depthStencilRenderbuffer,\n destroyAttachments: false,\n });\n\n if (!defined(this._previousFramebuffer)) {\n this._fboClassified = new Framebuffer({\n context: context,\n colorTextures: [this._classifiedTexture],\n depthStencilTexture: depthStencilTexture,\n destroyAttachments: false,\n });\n }\n }\n\n if (!defined(this._rsUnclassified)) {\n this._rsUnclassified = RenderState.fromCache(rsUnclassified);\n this._rsClassified = RenderState.fromCache(rsClassified);\n this._rsDefault = RenderState.fromCache(rsDefault);\n }\n\n if (!defined(this._unclassifiedCommand) || previousFramebufferChanged) {\n if (defined(this._unclassifiedCommand)) {\n this._unclassifiedCommand.shaderProgram =\n this._unclassifiedCommand.shaderProgram &&\n this._unclassifiedCommand.shaderProgram.destroy();\n this._classifiedCommand.shaderProgram =\n this._classifiedCommand.shaderProgram &&\n this._classifiedCommand.shaderProgram.destroy();\n }\n\n var fs = defined(this._previousFramebuffer) ? opaqueFS : translucentFS;\n var unclassifiedFSSource = new ShaderSource({\n defines: [\"UNCLASSIFIED\"],\n sources: [fs],\n });\n var classifiedFSSource = new ShaderSource({\n sources: [fs],\n });\n this._unclassifiedCommand = context.createViewportQuadCommand(\n unclassifiedFSSource,\n {\n renderState: defined(this._previousFramebuffer)\n ? this._rsUnclassified\n : this._rsDefault,\n uniformMap: this._uniformMap,\n owner: this,\n }\n );\n this._classifiedCommand = context.createViewportQuadCommand(\n classifiedFSSource,\n {\n renderState: defined(this._previousFramebuffer)\n ? this._rsClassified\n : this._rsDefault,\n uniformMap: this._uniformMap,\n owner: this,\n }\n );\n\n if (defined(this._translucentCommand)) {\n this._translucentCommand.shaderProgram =\n this._translucentCommand.shaderProgram &&\n this._translucentCommand.shaderProgram.destroy();\n }\n if (!defined(this._previousFramebuffer)) {\n this._translucentCommand = context.createViewportQuadCommand(\n PassThrough,\n {\n renderState: this._rsUnclassified,\n uniformMap: this._uniformMap,\n owner: this,\n }\n );\n }\n }\n};\n\nInvertClassification.prototype.clear = function (context, passState) {\n var framebuffer = passState.framebuffer;\n\n if (defined(this._previousFramebuffer)) {\n passState.framebuffer = this._fbo;\n this._clearColorCommand.execute(context, passState);\n } else {\n passState.framebuffer = this._fbo;\n this._clearCommand.execute(context, passState);\n passState.framebuffer = this._fboClassified;\n this._clearCommand.execute(context, passState);\n }\n\n passState.framebuffer = framebuffer;\n};\n\nInvertClassification.prototype.executeClassified = function (\n context,\n passState\n) {\n if (!defined(this._previousFramebuffer)) {\n var framebuffer = passState.framebuffer;\n\n passState.framebuffer = this._fboClassified;\n this._translucentCommand.execute(context, passState);\n\n passState.framebuffer = framebuffer;\n }\n this._classifiedCommand.execute(context, passState);\n};\n\nInvertClassification.prototype.executeUnclassified = function (\n context,\n passState\n) {\n this._unclassifiedCommand.execute(context, passState);\n};\n\nInvertClassification.prototype.isDestroyed = function () {\n return false;\n};\n\nInvertClassification.prototype.destroy = function () {\n this._fbo = this._fbo && this._fbo.destroy();\n this._texture = this._texture && this._texture.destroy();\n this._depthStencilTexture =\n this._depthStencilTexture && this._depthStencilTexture.destroy();\n\n if (defined(this._unclassifiedCommand)) {\n this._unclassifiedCommand.shaderProgram =\n this._unclassifiedCommand.shaderProgram &&\n this._unclassifiedCommand.shaderProgram.destroy();\n this._classifiedCommand.shaderProgram =\n this._classifiedCommand.shaderProgram &&\n this._classifiedCommand.shaderProgram.destroy();\n }\n\n return destroyObject(this);\n};\nexport default InvertClassification;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport JobType from \"./JobType.js\";\n\n/**\n *\n * @private\n * @constructor\n */\nfunction JobTypeBudget(total) {\n /**\n * Total budget, in milliseconds, allowed for one frame\n */\n this._total = total;\n\n /**\n * Time, in milliseconds, used so far during this frame\n */\n this.usedThisFrame = 0.0;\n\n /**\n * Time, in milliseconds, that other job types stole this frame\n */\n this.stolenFromMeThisFrame = 0.0;\n\n /**\n * Indicates if this job type was starved this frame, i.e., a job\n * tried to run but didn't have budget\n */\n this.starvedThisFrame = false;\n\n /**\n * Indicates if this job was starved last frame. This prevents it\n * from being stolen from this frame.\n */\n this.starvedLastFrame = false;\n}\n\nObject.defineProperties(JobTypeBudget.prototype, {\n total: {\n get: function () {\n return this._total;\n },\n },\n});\n\n/**\n * Engine for time slicing jobs during a frame to amortize work over multiple frames. This supports:\n * <ul>\n * <li>\n * Separate budgets for different job types, e.g., texture, shader program, and buffer creation. This\n * allows all job types to make progress each frame.\n * </li>\n * <li>\n * Stealing from other jobs type budgets if they were not exhausted in the previous frame. This allows\n * using the entire budget for all job types each frame even if, for example, all the jobs are the same type.\n * </li>\n * <li>\n * Guaranteed progress on all job types each frame, even if it means exceeding the total budget for the frame.\n * This prevents, for example, several expensive texture uploads over many frames from prevent a shader compile.\n * </li>\n * </ul>\n *\n * @private\n */\nfunction JobScheduler(budgets) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(budgets) && budgets.length !== JobType.NUMBER_OF_JOB_TYPES) {\n throw new DeveloperError(\n \"A budget must be specified for each job type; budgets.length should equal JobType.NUMBER_OF_JOB_TYPES.\"\n );\n }\n //>>includeEnd('debug');\n\n // Total for defaults is half of of one frame at 10 fps\n var jobBudgets = new Array(JobType.NUMBER_OF_JOB_TYPES);\n jobBudgets[JobType.TEXTURE] = new JobTypeBudget(\n defined(budgets) ? budgets[JobType.TEXTURE] : 10.0\n );\n // On cache miss, this most likely only allows one shader compile per frame\n jobBudgets[JobType.PROGRAM] = new JobTypeBudget(\n defined(budgets) ? budgets[JobType.PROGRAM] : 10.0\n );\n jobBudgets[JobType.BUFFER] = new JobTypeBudget(\n defined(budgets) ? budgets[JobType.BUFFER] : 30.0\n );\n\n var length = jobBudgets.length;\n var i;\n\n var totalBudget = 0.0;\n for (i = 0; i < length; ++i) {\n totalBudget += jobBudgets[i].total;\n }\n\n var executedThisFrame = new Array(length);\n for (i = 0; i < length; ++i) {\n executedThisFrame[i] = false;\n }\n\n this._totalBudget = totalBudget;\n this._totalUsedThisFrame = 0.0;\n this._budgets = jobBudgets;\n this._executedThisFrame = executedThisFrame;\n}\n\n// For unit testing\nJobScheduler.getTimestamp = getTimestamp;\n\nObject.defineProperties(JobScheduler.prototype, {\n totalBudget: {\n get: function () {\n return this._totalBudget;\n },\n },\n});\n\nJobScheduler.prototype.disableThisFrame = function () {\n // Prevent jobs from running this frame\n this._totalUsedThisFrame = this._totalBudget;\n};\n\nJobScheduler.prototype.resetBudgets = function () {\n var budgets = this._budgets;\n var length = budgets.length;\n for (var i = 0; i < length; ++i) {\n var budget = budgets[i];\n budget.starvedLastFrame = budget.starvedThisFrame;\n budget.starvedThisFrame = false;\n budget.usedThisFrame = 0.0;\n budget.stolenFromMeThisFrame = 0.0;\n }\n this._totalUsedThisFrame = 0.0;\n};\n\nJobScheduler.prototype.execute = function (job, jobType) {\n var budgets = this._budgets;\n var budget = budgets[jobType];\n\n // This ensures each job type makes progress each frame by executing at least once\n var progressThisFrame = this._executedThisFrame[jobType];\n\n if (this._totalUsedThisFrame >= this._totalBudget && progressThisFrame) {\n // No budget left this frame for jobs of any type\n budget.starvedThisFrame = true;\n return false;\n }\n\n var stolenBudget;\n\n if (budget.usedThisFrame + budget.stolenFromMeThisFrame >= budget.total) {\n // No budget remaining for jobs of this type. Try to steal from other job types.\n var length = budgets.length;\n var i;\n for (i = 0; i < length; ++i) {\n stolenBudget = budgets[i];\n\n // Steal from this budget if it has time left and it wasn't starved last fame\n if (\n stolenBudget.usedThisFrame + stolenBudget.stolenFromMeThisFrame <\n stolenBudget.total &&\n !stolenBudget.starvedLastFrame\n ) {\n break;\n }\n }\n\n if (i === length && progressThisFrame) {\n // No other job types can give up their budget this frame, and\n // this job type already progressed this frame\n return false;\n }\n\n if (progressThisFrame) {\n // It is considered \"starved\" even if it executes using stolen time so that\n // next frame, no other job types can steal time from it.\n budget.starvedThisFrame = true;\n }\n }\n\n var startTime = JobScheduler.getTimestamp();\n job.execute();\n var duration = JobScheduler.getTimestamp() - startTime;\n\n // Track both time remaining for this job type and all jobs\n // so budget stealing does send us way over the total budget.\n this._totalUsedThisFrame += duration;\n\n if (stolenBudget) {\n stolenBudget.stolenFromMeThisFrame += duration;\n } else {\n budget.usedThisFrame += duration;\n }\n this._executedThisFrame[jobType] = true;\n\n return true;\n};\nexport default JobScheduler;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A light source. This type describes an interface and is not intended to be instantiated directly.\n *\n * @alias Light\n * @constructor\n *\n * @see DirectionalLight\n * @see SunLight\n */\nfunction Light() {}\n\nObject.defineProperties(Light.prototype, {\n /**\n * The color of the light.\n * @memberof Light.prototype\n * @type {Color}\n */\n color: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * The intensity of the light.\n * @memberof Light.prototype\n * @type {Number}\n */\n intensity: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\nexport default Light;\n","import Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MapboxApi from \"../Core/MapboxApi.js\";\nimport Resource from \"../Core/Resource.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nvar trailingSlashRegex = /\\/$/;\nvar defaultCredit = new Credit(\n '© <a href=\"https://www.mapbox.com/about/maps/\">Mapbox</a> © <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> <strong><a href=\"https://www.mapbox.com/map-feedback/\">Improve this map</a></strong>'\n);\n\n/**\n * @typedef {Object} MapboxStyleImageryProvider.ConstructorOptions\n *\n * Initialization options for the MapboxStyleImageryProvider constructor\n *\n * @property {Resource|String} [url='https://api.mapbox.com/styles/v1/'] The Mapbox server url.\n * @property {String} [username='mapbox'] The username of the map account.\n * @property {String} styleId The Mapbox Style ID.\n * @property {String} [accessToken] The public access token for the imagery.\n * @property {Number} [tilesize=512] The size of the image tiles.\n * @property {Boolean} [scaleFactor] Determines if tiles are rendered at a @2x scale factor.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when specifying\n * this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely\n * to result in rendering problems.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|String} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Provides tiled imagery hosted by Mapbox.\n *\n * @alias MapboxStyleImageryProvider\n * @constructor\n *\n * @param {MapboxStyleImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Mapbox style provider\n * var mapbox = new Cesium.MapboxStyleImageryProvider({\n * styleId: 'streets-v11',\n * accessToken: 'thisIsMyAccessToken'\n * });\n *\n * @see {@link https://docs.mapbox.com/api/maps/#styles}\n * @see {@link https://docs.mapbox.com/api/#access-tokens-and-token-scopes}\n */\nfunction MapboxStyleImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var styleId = options.styleId;\n //>>includeStart('debug', pragmas.debug);\n if (!defined(styleId)) {\n throw new DeveloperError(\"options.styleId is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n\n var resource = Resource.createIfNeeded(\n defaultValue(options.url, \"https://api.mapbox.com/styles/v1/\")\n );\n\n var accessToken = MapboxApi.getAccessToken(options.accessToken);\n this._styleId = styleId;\n this._accessToken = accessToken;\n\n this._accessTokenErrorCredit = Credit.clone(\n MapboxApi.getErrorCredit(options.accessToken)\n );\n\n var tilesize = defaultValue(options.tilesize, 512);\n this._tilesize = tilesize;\n\n var username = defaultValue(options.username, \"mapbox\");\n this._username = username;\n\n var scaleFactor = defined(options.scaleFactor) ? \"@2x\" : \"\";\n\n var templateUrl = resource.getUrlComponent();\n if (!trailingSlashRegex.test(templateUrl)) {\n templateUrl += \"/\";\n }\n templateUrl +=\n this._username +\n \"/\" +\n styleId +\n \"/tiles/\" +\n this._tilesize +\n \"/{z}/{x}/{y}\" +\n scaleFactor;\n resource.url = templateUrl;\n\n resource.setQueryParameters({\n access_token: accessToken,\n });\n\n var credit;\n if (defined(options.credit)) {\n credit = options.credit;\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n } else {\n credit = defaultCredit;\n }\n\n this._resource = resource;\n this._imageryProvider = new UrlTemplateImageryProvider({\n url: resource,\n credit: credit,\n ellipsoid: options.ellipsoid,\n minimumLevel: options.minimumLevel,\n maximumLevel: options.maximumLevel,\n rectangle: options.rectangle,\n });\n}\n\nObject.defineProperties(MapboxStyleImageryProvider.prototype, {\n /**\n * Gets the URL of the Mapbox server.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {String}\n * @readonly\n */\n url: {\n get: function () {\n return this._imageryProvider.url;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._imageryProvider.ready;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._imageryProvider.readyPromise;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by the instance. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._imageryProvider.rectangle;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._imageryProvider.tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._imageryProvider.tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return this._imageryProvider.maximumLevel;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true. Generally,\n * a minimum level should only be used when the rectangle of the imagery is small\n * enough that the number of tiles at the minimum level is small. An imagery\n * provider with more than a few tiles at the minimum level will lead to\n * rendering problems.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return this._imageryProvider.minimumLevel;\n },\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._imageryProvider.tilingScheme;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return this._imageryProvider.tileDiscardPolicy;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error.. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._imageryProvider.errorEvent;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return this._imageryProvider.credit;\n },\n },\n\n /**\n * Gets the proxy used by this provider.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return this._imageryProvider.proxy;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. When this property is false, memory usage\n * and texture upload time are reduced.\n * @memberof MapboxStyleImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return this._imageryProvider.hasAlphaChannel;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nMapboxStyleImageryProvider.prototype.getTileCredits = function (x, y, level) {\n if (defined(this._accessTokenErrorCredit)) {\n return [this._accessTokenErrorCredit];\n }\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n *\n * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.\n */\nMapboxStyleImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function should not be called before {@link MapboxStyleImageryProvider#ready} returns true.\n * This function is optional, so it may not exist on all ImageryProviders.\n *\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n *\n * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.\n */\nMapboxStyleImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n// Exposed for tests\nMapboxStyleImageryProvider._defaultCredit = defaultCredit;\nexport default MapboxStyleImageryProvider;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IauOrientationAxes from \"../Core/IauOrientationAxes.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Simon1994PlanetaryPositions from \"../Core/Simon1994PlanetaryPositions.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport EllipsoidPrimitive from \"./EllipsoidPrimitive.js\";\nimport Material from \"./Material.js\";\n\n/**\n * Draws the Moon in 3D.\n * @alias Moon\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.show=true] Determines whether the moon will be rendered.\n * @param {String} [options.textureUrl=buildModuleUrl('Assets/Textures/moonSmall.jpg')] The moon texture.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.MOON] The moon ellipsoid.\n * @param {Boolean} [options.onlySunLighting=true] Use the sun as the only light source.\n *\n *\n * @example\n * scene.moon = new Cesium.Moon();\n *\n * @see Scene#moon\n */\nfunction Moon(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var url = options.textureUrl;\n if (!defined(url)) {\n url = buildModuleUrl(\"Assets/Textures/moonSmall.jpg\");\n }\n\n /**\n * Determines if the moon will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * The moon texture.\n * @type {String}\n * @default buildModuleUrl('Assets/Textures/moonSmall.jpg')\n */\n this.textureUrl = url;\n\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.MOON);\n\n /**\n * Use the sun as the only light source.\n * @type {Boolean}\n * @default true\n */\n this.onlySunLighting = defaultValue(options.onlySunLighting, true);\n\n this._ellipsoidPrimitive = new EllipsoidPrimitive({\n radii: this.ellipsoid.radii,\n material: Material.fromType(Material.ImageType),\n depthTestEnabled: false,\n _owner: this,\n });\n this._ellipsoidPrimitive.material.translucent = false;\n\n this._axes = new IauOrientationAxes();\n}\n\nObject.defineProperties(Moon.prototype, {\n /**\n * Get the ellipsoid that defines the shape of the moon.\n *\n * @memberof Moon.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n *\n * @default {@link Ellipsoid.MOON}\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n});\n\nvar icrfToFixed = new Matrix3();\nvar rotationScratch = new Matrix3();\nvar translationScratch = new Cartesian3();\nvar scratchCommandList = [];\n\n/**\n * @private\n */\nMoon.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n var ellipsoidPrimitive = this._ellipsoidPrimitive;\n ellipsoidPrimitive.material.uniforms.image = this.textureUrl;\n ellipsoidPrimitive.onlySunLighting = this.onlySunLighting;\n\n var date = frameState.time;\n if (!defined(Transforms.computeIcrfToFixedMatrix(date, icrfToFixed))) {\n Transforms.computeTemeToPseudoFixedMatrix(date, icrfToFixed);\n }\n\n var rotation = this._axes.evaluate(date, rotationScratch);\n Matrix3.transpose(rotation, rotation);\n Matrix3.multiply(icrfToFixed, rotation, rotation);\n\n var translation = Simon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame(\n date,\n translationScratch\n );\n Matrix3.multiplyByVector(icrfToFixed, translation, translation);\n\n Matrix4.fromRotationTranslation(\n rotation,\n translation,\n ellipsoidPrimitive.modelMatrix\n );\n\n var savedCommandList = frameState.commandList;\n frameState.commandList = scratchCommandList;\n scratchCommandList.length = 0;\n ellipsoidPrimitive.update(frameState);\n frameState.commandList = savedCommandList;\n return scratchCommandList.length === 1 ? scratchCommandList[0] : undefined;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Moon#destroy\n */\nMoon.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * moon = moon && moon.destroy();\n *\n * @see Moon#isDestroyed\n */\nMoon.prototype.destroy = function () {\n this._ellipsoidPrimitive =\n this._ellipsoidPrimitive && this._ellipsoidPrimitive.destroy();\n return destroyObject(this);\n};\nexport default Moon;\n","/**\n * A {@link TileDiscardPolicy} specifying that tile images should never be discard.\n *\n * @alias NeverTileDiscardPolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n */\nfunction NeverTileDiscardPolicy(options) {}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {Boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nNeverTileDiscardPolicy.prototype.isReady = function () {\n return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {Boolean} True if the image should be discarded; otherwise, false.\n */\nNeverTileDiscardPolicy.prototype.shouldDiscardImage = function (image) {\n return false;\n};\nexport default NeverTileDiscardPolicy;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef MRT\\n\\\n#extension GL_EXT_draw_buffers : enable\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 u_bgColor;\\n\\\nuniform sampler2D u_depthTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n if (texture2D(u_depthTexture, v_textureCoordinates).r < 1.0)\\n\\\n {\\n\\\n#ifdef MRT\\n\\\n gl_FragData[0] = u_bgColor;\\n\\\n gl_FragData[1] = vec4(u_bgColor.a);\\n\\\n#else\\n\\\n gl_FragColor = u_bgColor;\\n\\\n#endif\\n\\\n return;\\n\\\n }\\n\\\n \\n\\\n discard;\\n\\\n}\\n\\\n\";\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport AdjustTranslucentFS from \"../Shaders/AdjustTranslucentFS.js\";\nimport CompositeOITFS from \"../Shaders/CompositeOITFS.js\";\nimport BlendEquation from \"./BlendEquation.js\";\nimport BlendFunction from \"./BlendFunction.js\";\n\n/**\n * @private\n */\nfunction OIT(context) {\n // We support multipass for the Chrome D3D9 backend and ES 2.0 on mobile.\n this._translucentMultipassSupport = false;\n this._translucentMRTSupport = false;\n\n var extensionsSupported = context.colorBufferFloat && context.depthTexture;\n this._translucentMRTSupport = context.drawBuffers && extensionsSupported;\n this._translucentMultipassSupport =\n !this._translucentMRTSupport && extensionsSupported;\n\n this._opaqueFBO = undefined;\n this._opaqueTexture = undefined;\n this._depthStencilTexture = undefined;\n\n this._accumulationTexture = undefined;\n\n this._translucentFBO = undefined;\n this._alphaFBO = undefined;\n\n this._adjustTranslucentFBO = undefined;\n this._adjustAlphaFBO = undefined;\n\n this._opaqueClearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n owner: this,\n });\n this._translucentMRTClearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 1.0),\n owner: this,\n });\n this._translucentMultipassClearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n owner: this,\n });\n this._alphaClearCommand = new ClearCommand({\n color: new Color(1.0, 1.0, 1.0, 1.0),\n owner: this,\n });\n\n this._translucentRenderStateCache = {};\n this._alphaRenderStateCache = {};\n\n this._compositeCommand = undefined;\n this._adjustTranslucentCommand = undefined;\n this._adjustAlphaCommand = undefined;\n\n this._viewport = new BoundingRectangle();\n this._rs = undefined;\n\n this._useScissorTest = false;\n this._scissorRectangle = undefined;\n\n this._useHDR = false;\n}\n\nfunction destroyTextures(oit) {\n oit._accumulationTexture =\n oit._accumulationTexture &&\n !oit._accumulationTexture.isDestroyed() &&\n oit._accumulationTexture.destroy();\n oit._revealageTexture =\n oit._revealageTexture &&\n !oit._revealageTexture.isDestroyed() &&\n oit._revealageTexture.destroy();\n}\n\nfunction destroyFramebuffers(oit) {\n oit._translucentFBO =\n oit._translucentFBO &&\n !oit._translucentFBO.isDestroyed() &&\n oit._translucentFBO.destroy();\n oit._alphaFBO =\n oit._alphaFBO && !oit._alphaFBO.isDestroyed() && oit._alphaFBO.destroy();\n oit._adjustTranslucentFBO =\n oit._adjustTranslucentFBO &&\n !oit._adjustTranslucentFBO.isDestroyed() &&\n oit._adjustTranslucentFBO.destroy();\n oit._adjustAlphaFBO =\n oit._adjustAlphaFBO &&\n !oit._adjustAlphaFBO.isDestroyed() &&\n oit._adjustAlphaFBO.destroy();\n}\n\nfunction destroyResources(oit) {\n destroyTextures(oit);\n destroyFramebuffers(oit);\n}\n\nfunction updateTextures(oit, context, width, height) {\n destroyTextures(oit);\n\n oit._accumulationTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.FLOAT,\n });\n\n // Use zeroed arraybuffer instead of null to initialize texture\n // to workaround Firefox. Only needed for the second color attachment.\n var source = new Float32Array(width * height * 4);\n oit._revealageTexture = new Texture({\n context: context,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.FLOAT,\n source: {\n arrayBufferView: source,\n width: width,\n height: height,\n },\n flipY: false,\n });\n}\n\nfunction updateFramebuffers(oit, context) {\n destroyFramebuffers(oit);\n\n var completeFBO = WebGLConstants.FRAMEBUFFER_COMPLETE;\n var supported = true;\n\n // if MRT is supported, attempt to make an FBO with multiple color attachments\n if (oit._translucentMRTSupport) {\n oit._translucentFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._accumulationTexture, oit._revealageTexture],\n depthStencilTexture: oit._depthStencilTexture,\n destroyAttachments: false,\n });\n oit._adjustTranslucentFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._accumulationTexture, oit._revealageTexture],\n destroyAttachments: false,\n });\n\n if (\n oit._translucentFBO.status !== completeFBO ||\n oit._adjustTranslucentFBO.status !== completeFBO\n ) {\n destroyFramebuffers(oit);\n oit._translucentMRTSupport = false;\n }\n }\n\n // either MRT isn't supported or FBO creation failed, attempt multipass\n if (!oit._translucentMRTSupport) {\n oit._translucentFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._accumulationTexture],\n depthStencilTexture: oit._depthStencilTexture,\n destroyAttachments: false,\n });\n oit._alphaFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._revealageTexture],\n depthStencilTexture: oit._depthStencilTexture,\n destroyAttachments: false,\n });\n oit._adjustTranslucentFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._accumulationTexture],\n destroyAttachments: false,\n });\n oit._adjustAlphaFBO = new Framebuffer({\n context: context,\n colorTextures: [oit._revealageTexture],\n destroyAttachments: false,\n });\n\n var translucentComplete = oit._translucentFBO.status === completeFBO;\n var alphaComplete = oit._alphaFBO.status === completeFBO;\n var adjustTranslucentComplete =\n oit._adjustTranslucentFBO.status === completeFBO;\n var adjustAlphaComplete = oit._adjustAlphaFBO.status === completeFBO;\n if (\n !translucentComplete ||\n !alphaComplete ||\n !adjustTranslucentComplete ||\n !adjustAlphaComplete\n ) {\n destroyResources(oit);\n oit._translucentMultipassSupport = false;\n supported = false;\n }\n }\n\n return supported;\n}\n\nOIT.prototype.update = function (context, passState, framebuffer, useHDR) {\n if (!this.isSupported()) {\n return;\n }\n\n this._opaqueFBO = framebuffer;\n this._opaqueTexture = framebuffer.getColorTexture(0);\n this._depthStencilTexture = framebuffer.depthStencilTexture;\n\n var width = this._opaqueTexture.width;\n var height = this._opaqueTexture.height;\n\n var accumulationTexture = this._accumulationTexture;\n var textureChanged =\n !defined(accumulationTexture) ||\n accumulationTexture.width !== width ||\n accumulationTexture.height !== height ||\n useHDR !== this._useHDR;\n if (textureChanged) {\n updateTextures(this, context, width, height);\n }\n\n if (!defined(this._translucentFBO) || textureChanged) {\n if (!updateFramebuffers(this, context)) {\n // framebuffer creation failed\n return;\n }\n }\n\n this._useHDR = useHDR;\n\n var that = this;\n var fs;\n var uniformMap;\n\n if (!defined(this._compositeCommand)) {\n fs = new ShaderSource({\n sources: [CompositeOITFS],\n });\n if (this._translucentMRTSupport) {\n fs.defines.push(\"MRT\");\n }\n\n uniformMap = {\n u_opaque: function () {\n return that._opaqueTexture;\n },\n u_accumulation: function () {\n return that._accumulationTexture;\n },\n u_revealage: function () {\n return that._revealageTexture;\n },\n };\n this._compositeCommand = context.createViewportQuadCommand(fs, {\n uniformMap: uniformMap,\n owner: this,\n });\n }\n\n if (!defined(this._adjustTranslucentCommand)) {\n if (this._translucentMRTSupport) {\n fs = new ShaderSource({\n defines: [\"MRT\"],\n sources: [AdjustTranslucentFS],\n });\n\n uniformMap = {\n u_bgColor: function () {\n return that._translucentMRTClearCommand.color;\n },\n u_depthTexture: function () {\n return that._depthStencilTexture;\n },\n };\n\n this._adjustTranslucentCommand = context.createViewportQuadCommand(fs, {\n uniformMap: uniformMap,\n owner: this,\n });\n } else if (this._translucentMultipassSupport) {\n fs = new ShaderSource({\n sources: [AdjustTranslucentFS],\n });\n\n uniformMap = {\n u_bgColor: function () {\n return that._translucentMultipassClearCommand.color;\n },\n u_depthTexture: function () {\n return that._depthStencilTexture;\n },\n };\n\n this._adjustTranslucentCommand = context.createViewportQuadCommand(fs, {\n uniformMap: uniformMap,\n owner: this,\n });\n\n uniformMap = {\n u_bgColor: function () {\n return that._alphaClearCommand.color;\n },\n u_depthTexture: function () {\n return that._depthStencilTexture;\n },\n };\n\n this._adjustAlphaCommand = context.createViewportQuadCommand(fs, {\n uniformMap: uniformMap,\n owner: this,\n });\n }\n }\n\n this._viewport.width = width;\n this._viewport.height = height;\n\n var useScissorTest = !BoundingRectangle.equals(\n this._viewport,\n passState.viewport\n );\n var updateScissor = useScissorTest !== this._useScissorTest;\n this._useScissorTest = useScissorTest;\n\n if (!BoundingRectangle.equals(this._scissorRectangle, passState.viewport)) {\n this._scissorRectangle = BoundingRectangle.clone(\n passState.viewport,\n this._scissorRectangle\n );\n updateScissor = true;\n }\n\n if (\n !defined(this._rs) ||\n !BoundingRectangle.equals(this._viewport, this._rs.viewport) ||\n updateScissor\n ) {\n this._rs = RenderState.fromCache({\n viewport: this._viewport,\n scissorTest: {\n enabled: this._useScissorTest,\n rectangle: this._scissorRectangle,\n },\n });\n }\n\n if (defined(this._compositeCommand)) {\n this._compositeCommand.renderState = this._rs;\n }\n\n if (this._adjustTranslucentCommand) {\n this._adjustTranslucentCommand.renderState = this._rs;\n }\n\n if (defined(this._adjustAlphaCommand)) {\n this._adjustAlphaCommand.renderState = this._rs;\n }\n};\n\nvar translucentMRTBlend = {\n enabled: true,\n color: new Color(0.0, 0.0, 0.0, 0.0),\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.ONE,\n functionDestinationRgb: BlendFunction.ONE,\n functionSourceAlpha: BlendFunction.ZERO,\n functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n};\n\nvar translucentColorBlend = {\n enabled: true,\n color: new Color(0.0, 0.0, 0.0, 0.0),\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.ONE,\n functionDestinationRgb: BlendFunction.ONE,\n functionSourceAlpha: BlendFunction.ONE,\n functionDestinationAlpha: BlendFunction.ONE,\n};\n\nvar translucentAlphaBlend = {\n enabled: true,\n color: new Color(0.0, 0.0, 0.0, 0.0),\n equationRgb: BlendEquation.ADD,\n equationAlpha: BlendEquation.ADD,\n functionSourceRgb: BlendFunction.ZERO,\n functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n functionSourceAlpha: BlendFunction.ZERO,\n functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n};\n\nfunction getTranslucentRenderState(\n context,\n translucentBlending,\n cache,\n renderState\n) {\n var translucentState = cache[renderState.id];\n if (!defined(translucentState)) {\n var rs = RenderState.getState(renderState);\n rs.depthMask = false;\n rs.blending = translucentBlending;\n\n translucentState = RenderState.fromCache(rs);\n cache[renderState.id] = translucentState;\n }\n\n return translucentState;\n}\n\nfunction getTranslucentMRTRenderState(oit, context, renderState) {\n return getTranslucentRenderState(\n context,\n translucentMRTBlend,\n oit._translucentRenderStateCache,\n renderState\n );\n}\n\nfunction getTranslucentColorRenderState(oit, context, renderState) {\n return getTranslucentRenderState(\n context,\n translucentColorBlend,\n oit._translucentRenderStateCache,\n renderState\n );\n}\n\nfunction getTranslucentAlphaRenderState(oit, context, renderState) {\n return getTranslucentRenderState(\n context,\n translucentAlphaBlend,\n oit._alphaRenderStateCache,\n renderState\n );\n}\n\nvar mrtShaderSource =\n \" vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\\n\" +\n \" float ai = czm_gl_FragColor.a;\\n\" +\n \" float wzi = czm_alphaWeight(ai);\\n\" +\n \" gl_FragData[0] = vec4(Ci * wzi, ai);\\n\" +\n \" gl_FragData[1] = vec4(ai * wzi);\\n\";\n\nvar colorShaderSource =\n \" vec3 Ci = czm_gl_FragColor.rgb * czm_gl_FragColor.a;\\n\" +\n \" float ai = czm_gl_FragColor.a;\\n\" +\n \" float wzi = czm_alphaWeight(ai);\\n\" +\n \" gl_FragColor = vec4(Ci, ai) * wzi;\\n\";\n\nvar alphaShaderSource =\n \" float ai = czm_gl_FragColor.a;\\n\" + \" gl_FragColor = vec4(ai);\\n\";\n\nfunction getTranslucentShaderProgram(context, shaderProgram, keyword, source) {\n var shader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n keyword\n );\n if (!defined(shader)) {\n var attributeLocations = shaderProgram._attributeLocations;\n\n var fs = shaderProgram.fragmentShaderSource.clone();\n\n fs.sources = fs.sources.map(function (source) {\n source = ShaderSource.replaceMain(source, \"czm_translucent_main\");\n source = source.replace(/gl_FragColor/g, \"czm_gl_FragColor\");\n source = source.replace(/\\bdiscard\\b/g, \"czm_discard = true\");\n source = source.replace(/czm_phong/g, \"czm_translucentPhong\");\n return source;\n });\n\n // Discarding the fragment in main is a workaround for ANGLE D3D9\n // shader compilation errors.\n\n fs.sources.splice(\n 0,\n 0,\n (source.indexOf(\"gl_FragData\") !== -1\n ? \"#extension GL_EXT_draw_buffers : enable \\n\"\n : \"\") +\n \"vec4 czm_gl_FragColor;\\n\" +\n \"bool czm_discard = false;\\n\"\n );\n\n fs.sources.push(\n \"void main()\\n\" +\n \"{\\n\" +\n \" czm_translucent_main();\\n\" +\n \" if (czm_discard)\\n\" +\n \" {\\n\" +\n \" discard;\\n\" +\n \" }\\n\" +\n source +\n \"}\\n\"\n );\n\n shader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n keyword,\n {\n vertexShaderSource: shaderProgram.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n }\n );\n }\n\n return shader;\n}\n\nfunction getTranslucentMRTShaderProgram(context, shaderProgram) {\n return getTranslucentShaderProgram(\n context,\n shaderProgram,\n \"translucentMRT\",\n mrtShaderSource\n );\n}\n\nfunction getTranslucentColorShaderProgram(context, shaderProgram) {\n return getTranslucentShaderProgram(\n context,\n shaderProgram,\n \"translucentMultipass\",\n colorShaderSource\n );\n}\n\nfunction getTranslucentAlphaShaderProgram(context, shaderProgram) {\n return getTranslucentShaderProgram(\n context,\n shaderProgram,\n \"alphaMultipass\",\n alphaShaderSource\n );\n}\n\nOIT.prototype.createDerivedCommands = function (command, context, result) {\n if (!defined(result)) {\n result = {};\n }\n\n if (this._translucentMRTSupport) {\n var translucentShader;\n var translucentRenderState;\n if (defined(result.translucentCommand)) {\n translucentShader = result.translucentCommand.shaderProgram;\n translucentRenderState = result.translucentCommand.renderState;\n }\n\n result.translucentCommand = DrawCommand.shallowClone(\n command,\n result.translucentCommand\n );\n\n if (\n !defined(translucentShader) ||\n result.shaderProgramId !== command.shaderProgram.id\n ) {\n result.translucentCommand.shaderProgram = getTranslucentMRTShaderProgram(\n context,\n command.shaderProgram\n );\n result.translucentCommand.renderState = getTranslucentMRTRenderState(\n this,\n context,\n command.renderState\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.translucentCommand.shaderProgram = translucentShader;\n result.translucentCommand.renderState = translucentRenderState;\n }\n } else {\n var colorShader;\n var colorRenderState;\n var alphaShader;\n var alphaRenderState;\n if (defined(result.translucentCommand)) {\n colorShader = result.translucentCommand.shaderProgram;\n colorRenderState = result.translucentCommand.renderState;\n alphaShader = result.alphaCommand.shaderProgram;\n alphaRenderState = result.alphaCommand.renderState;\n }\n\n result.translucentCommand = DrawCommand.shallowClone(\n command,\n result.translucentCommand\n );\n result.alphaCommand = DrawCommand.shallowClone(\n command,\n result.alphaCommand\n );\n\n if (\n !defined(colorShader) ||\n result.shaderProgramId !== command.shaderProgram.id\n ) {\n result.translucentCommand.shaderProgram = getTranslucentColorShaderProgram(\n context,\n command.shaderProgram\n );\n result.translucentCommand.renderState = getTranslucentColorRenderState(\n this,\n context,\n command.renderState\n );\n result.alphaCommand.shaderProgram = getTranslucentAlphaShaderProgram(\n context,\n command.shaderProgram\n );\n result.alphaCommand.renderState = getTranslucentAlphaRenderState(\n this,\n context,\n command.renderState\n );\n result.shaderProgramId = command.shaderProgram.id;\n } else {\n result.translucentCommand.shaderProgram = colorShader;\n result.translucentCommand.renderState = colorRenderState;\n result.alphaCommand.shaderProgram = alphaShader;\n result.alphaCommand.renderState = alphaRenderState;\n }\n }\n\n return result;\n};\n\nfunction executeTranslucentCommandsSortedMultipass(\n oit,\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n) {\n var command;\n var derivedCommand;\n var j;\n\n var context = scene.context;\n var useLogDepth = scene.frameState.useLogDepth;\n var useHdr = scene._hdr;\n var framebuffer = passState.framebuffer;\n var length = commands.length;\n\n var lightShadowsEnabled = scene.frameState.shadowState.lightShadowsEnabled;\n\n passState.framebuffer = oit._adjustTranslucentFBO;\n oit._adjustTranslucentCommand.execute(context, passState);\n passState.framebuffer = oit._adjustAlphaFBO;\n oit._adjustAlphaCommand.execute(context, passState);\n\n var debugFramebuffer = oit._opaqueFBO;\n passState.framebuffer = oit._translucentFBO;\n\n for (j = 0; j < length; ++j) {\n command = commands[j];\n command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n command = useHdr ? command.derivedCommands.hdr.command : command;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.translucentCommand\n : command.derivedCommands.oit.translucentCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n if (defined(invertClassification)) {\n command = invertClassification.unclassifiedCommand;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.translucentCommand\n : command.derivedCommands.oit.translucentCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n passState.framebuffer = oit._alphaFBO;\n\n for (j = 0; j < length; ++j) {\n command = commands[j];\n command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n command = useHdr ? command.derivedCommands.hdr.command : command;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.alphaCommand\n : command.derivedCommands.oit.alphaCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n if (defined(invertClassification)) {\n command = invertClassification.unclassifiedCommand;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.alphaCommand\n : command.derivedCommands.oit.alphaCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n passState.framebuffer = framebuffer;\n}\n\nfunction executeTranslucentCommandsSortedMRT(\n oit,\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n) {\n var context = scene.context;\n var useLogDepth = scene.frameState.useLogDepth;\n var useHdr = scene._hdr;\n var framebuffer = passState.framebuffer;\n var length = commands.length;\n\n var lightShadowsEnabled = scene.frameState.shadowState.lightShadowsEnabled;\n\n passState.framebuffer = oit._adjustTranslucentFBO;\n oit._adjustTranslucentCommand.execute(context, passState);\n\n var debugFramebuffer = oit._opaqueFBO;\n passState.framebuffer = oit._translucentFBO;\n\n var command;\n var derivedCommand;\n\n for (var j = 0; j < length; ++j) {\n command = commands[j];\n command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n command = useHdr ? command.derivedCommands.hdr.command : command;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.translucentCommand\n : command.derivedCommands.oit.translucentCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n if (defined(invertClassification)) {\n command = invertClassification.unclassifiedCommand;\n derivedCommand =\n lightShadowsEnabled && command.receiveShadows\n ? command.derivedCommands.oit.shadows.translucentCommand\n : command.derivedCommands.oit.translucentCommand;\n executeFunction(\n derivedCommand,\n scene,\n context,\n passState,\n debugFramebuffer\n );\n }\n\n passState.framebuffer = framebuffer;\n}\n\nOIT.prototype.executeCommands = function (\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n) {\n if (this._translucentMRTSupport) {\n executeTranslucentCommandsSortedMRT(\n this,\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n );\n return;\n }\n\n executeTranslucentCommandsSortedMultipass(\n this,\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n );\n};\n\nOIT.prototype.execute = function (context, passState) {\n this._compositeCommand.execute(context, passState);\n};\n\nOIT.prototype.clear = function (context, passState, clearColor) {\n var framebuffer = passState.framebuffer;\n\n passState.framebuffer = this._opaqueFBO;\n Color.clone(clearColor, this._opaqueClearCommand.color);\n this._opaqueClearCommand.execute(context, passState);\n\n passState.framebuffer = this._translucentFBO;\n var translucentClearCommand = this._translucentMRTSupport\n ? this._translucentMRTClearCommand\n : this._translucentMultipassClearCommand;\n translucentClearCommand.execute(context, passState);\n\n if (this._translucentMultipassSupport) {\n passState.framebuffer = this._alphaFBO;\n this._alphaClearCommand.execute(context, passState);\n }\n\n passState.framebuffer = framebuffer;\n};\n\nOIT.prototype.isSupported = function () {\n return this._translucentMRTSupport || this._translucentMultipassSupport;\n};\n\nOIT.prototype.isDestroyed = function () {\n return false;\n};\n\nOIT.prototype.destroy = function () {\n destroyResources(this);\n\n if (defined(this._compositeCommand)) {\n this._compositeCommand.shaderProgram =\n this._compositeCommand.shaderProgram &&\n this._compositeCommand.shaderProgram.destroy();\n }\n\n if (defined(this._adjustTranslucentCommand)) {\n this._adjustTranslucentCommand.shaderProgram =\n this._adjustTranslucentCommand.shaderProgram &&\n this._adjustTranslucentCommand.shaderProgram.destroy();\n }\n\n if (defined(this._adjustAlphaCommand)) {\n this._adjustAlphaCommand.shaderProgram =\n this._adjustAlphaCommand.shaderProgram &&\n this._adjustAlphaCommand.shaderProgram.destroy();\n }\n\n return destroyObject(this);\n};\nexport default OIT;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compositing for Weighted Blended Order-Independent Transparency. See:\\n\\\n * - http://jcgt.org/published/0002/02/09/\\n\\\n * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html\\n\\\n */\\n\\\n\\n\\\nuniform sampler2D u_opaque;\\n\\\nuniform sampler2D u_accumulation;\\n\\\nuniform sampler2D u_revealage;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 opaque = texture2D(u_opaque, v_textureCoordinates);\\n\\\n vec4 accum = texture2D(u_accumulation, v_textureCoordinates);\\n\\\n float r = texture2D(u_revealage, v_textureCoordinates).r;\\n\\\n\\n\\\n#ifdef MRT\\n\\\n vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\\n\\\n#else\\n\\\n vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);\\n\\\n#endif\\n\\\n\\n\\\n gl_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;\\n\\\n\\n\\\n if (opaque != czm_backgroundColor)\\n\\\n {\\n\\\n gl_FragColor.a = 1.0;\\n\\\n }\\n\\\n}\\n\\\n\";\n","import Credit from \"../Core/Credit.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nvar defaultCredit = new Credit(\n \"MapQuest, Open Street Map and contributors, CC-BY-SA\"\n);\n\n/**\n * @typedef {Object} OpenStreetMapImageryProvider.ConstructorOptions\n *\n * Initialization options for the OpenStreetMapImageryProvider constructor\n *\n * @property {String} [url='https://a.tile.openstreetmap.org'] The OpenStreetMap server url.\n * @property {String} [fileExtension='png'] The file extension for images on the server.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.\n * @property {Number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.\n * @property {Number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.\n * @property {Credit|String} [credit='MapQuest, Open Street Map and contributors, CC-BY-SA'] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * An imagery provider that provides tiled imagery hosted by OpenStreetMap\n * or another provider of Slippy tiles. The default url connects to OpenStreetMap's volunteer-run\n * servers, so you must conform to their\n * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}.\n *\n * @alias OpenStreetMapImageryProvider\n * @constructor\n * @extends UrlTemplateImageryProvider\n *\n * @param {OpenStreetMapImageryProvider.ConstructorOptions} options Object describing initialization options\n * @exception {DeveloperError} The rectangle and minimumLevel indicate that there are more than four tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @example\n * var osm = new Cesium.OpenStreetMapImageryProvider({\n * url : 'https://a.tile.openstreetmap.org/'\n * });\n *\n * @see {@link http://wiki.openstreetmap.org/wiki/Main_Page|OpenStreetMap Wiki}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction OpenStreetMapImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var resource = Resource.createIfNeeded(\n defaultValue(options.url, \"https://a.tile.openstreetmap.org/\")\n );\n resource.appendForwardSlash();\n resource.url += \"{z}/{x}/{y}.\" + defaultValue(options.fileExtension, \"png\");\n\n var tilingScheme = new WebMercatorTilingScheme({\n ellipsoid: options.ellipsoid,\n });\n\n var tileWidth = 256;\n var tileHeight = 256;\n\n var minimumLevel = defaultValue(options.minimumLevel, 0);\n var maximumLevel = options.maximumLevel;\n\n var rectangle = defaultValue(options.rectangle, tilingScheme.rectangle);\n\n // Check the number of tiles at the minimum level. If it's more than four,\n // throw an exception, because starting at the higher minimum\n // level will cause too many tiles to be downloaded and rendered.\n var swTile = tilingScheme.positionToTileXY(\n Rectangle.southwest(rectangle),\n minimumLevel\n );\n var neTile = tilingScheme.positionToTileXY(\n Rectangle.northeast(rectangle),\n minimumLevel\n );\n var tileCount =\n (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);\n //>>includeStart('debug', pragmas.debug);\n if (tileCount > 4) {\n throw new DeveloperError(\n \"The rectangle and minimumLevel indicate that there are \" +\n tileCount +\n \" tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.\"\n );\n }\n //>>includeEnd('debug');\n\n var credit = defaultValue(options.credit, defaultCredit);\n if (typeof credit === \"string\") {\n credit = new Credit(credit);\n }\n\n UrlTemplateImageryProvider.call(this, {\n url: resource,\n credit: credit,\n tilingScheme: tilingScheme,\n tileWidth: tileWidth,\n tileHeight: tileHeight,\n minimumLevel: minimumLevel,\n maximumLevel: maximumLevel,\n rectangle: rectangle,\n });\n}\n\nif (defined(Object.create)) {\n OpenStreetMapImageryProvider.prototype = Object.create(\n UrlTemplateImageryProvider.prototype\n );\n OpenStreetMapImageryProvider.prototype.constructor = OpenStreetMapImageryProvider;\n}\n\nexport default OpenStreetMapImageryProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\n\nvar defaultSize = new Cartesian2(1.0, 1.0);\n\n/**\n * A particle emitted by a {@link ParticleSystem}.\n *\n * @alias Particle\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {Number} [options.mass=1.0] The mass of the particle in kilograms.\n * @param {Cartesian3} [options.position=Cartesian3.ZERO] The initial position of the particle in world coordinates.\n * @param {Cartesian3} [options.velocity=Cartesian3.ZERO] The velocity vector of the particle in world coordinates.\n * @param {Number} [options.life=Number.MAX_VALUE] The life of the particle in seconds.\n * @param {Object} [options.image] The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n * @param {Color} [options.startColor=Color.WHITE] The color of a particle when it is born.\n * @param {Color} [options.endColor=Color.WHITE] The color of a particle when it dies.\n * @param {Number} [options.startScale=1.0] The scale of the particle when it is born.\n * @param {Number} [options.endScale=1.0] The scale of the particle when it dies.\n * @param {Cartesian2} [options.imageSize=new Cartesian2(1.0, 1.0)] The dimensions, width by height, to scale the particle image in pixels.\n */\nfunction Particle(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The mass of the particle in kilograms.\n * @type {Number}\n * @default 1.0\n */\n this.mass = defaultValue(options.mass, 1.0);\n /**\n * The positon of the particle in world coordinates.\n * @type {Cartesian3}\n * @default Cartesian3.ZERO\n */\n this.position = Cartesian3.clone(\n defaultValue(options.position, Cartesian3.ZERO)\n );\n /**\n * The velocity of the particle in world coordinates.\n * @type {Cartesian3}\n * @default Cartesian3.ZERO\n */\n this.velocity = Cartesian3.clone(\n defaultValue(options.velocity, Cartesian3.ZERO)\n );\n /**\n * The life of the particle in seconds.\n * @type {Number}\n * @default Number.MAX_VALUE\n */\n this.life = defaultValue(options.life, Number.MAX_VALUE);\n /**\n * The image to use for the particle.\n * @type {Object}\n * @default undefined\n */\n this.image = options.image;\n /**\n * The color of the particle when it is born.\n * @type {Color}\n * @default Color.WHITE\n */\n this.startColor = Color.clone(defaultValue(options.startColor, Color.WHITE));\n /**\n * The color of the particle when it dies.\n * @type {Color}\n * @default Color.WHITE\n */\n this.endColor = Color.clone(defaultValue(options.endColor, Color.WHITE));\n /**\n * the scale of the particle when it is born.\n * @type {Number}\n * @default 1.0\n */\n this.startScale = defaultValue(options.startScale, 1.0);\n /**\n * The scale of the particle when it dies.\n * @type {Number}\n * @default 1.0\n */\n this.endScale = defaultValue(options.endScale, 1.0);\n /**\n * The dimensions, width by height, to scale the particle image in pixels.\n * @type {Cartesian2}\n * @default new Cartesian(1.0, 1.0)\n */\n this.imageSize = Cartesian2.clone(\n defaultValue(options.imageSize, defaultSize)\n );\n\n this._age = 0.0;\n this._normalizedAge = 0.0;\n\n // used by ParticleSystem\n this._billboard = undefined;\n}\n\nObject.defineProperties(Particle.prototype, {\n /**\n * Gets the age of the particle in seconds.\n * @memberof Particle.prototype\n * @type {Number}\n */\n age: {\n get: function () {\n return this._age;\n },\n },\n /**\n * Gets the age normalized to a value in the range [0.0, 1.0].\n * @memberof Particle.prototype\n * @type {Number}\n */\n normalizedAge: {\n get: function () {\n return this._normalizedAge;\n },\n },\n});\n\nvar deltaScratch = new Cartesian3();\n\n/**\n * @private\n */\nParticle.prototype.update = function (dt, particleUpdateFunction) {\n // Apply the velocity\n Cartesian3.multiplyByScalar(this.velocity, dt, deltaScratch);\n Cartesian3.add(this.position, deltaScratch, this.position);\n\n // Update any forces.\n if (defined(particleUpdateFunction)) {\n particleUpdateFunction(this, dt);\n }\n\n // Age the particle\n this._age += dt;\n\n // Compute the normalized age.\n if (this.life === Number.MAX_VALUE) {\n this._normalizedAge = 0.0;\n } else {\n this._normalizedAge = this._age / this.life;\n }\n\n // If this particle is older than it's lifespan then die.\n return this._age <= this.life;\n};\nexport default Particle;\n","import defaultValue from \"../Core/defaultValue.js\";\n\n/**\n * Represents a burst of {@link Particle}s from a {@link ParticleSystem} at a given time in the systems lifetime.\n *\n * @alias ParticleBurst\n * @constructor\n *\n * @param {Object} [options] An object with the following properties:\n * @param {Number} [options.time=0.0] The time in seconds after the beginning of the particle system's lifetime that the burst will occur.\n * @param {Number} [options.minimum=0.0] The minimum number of particles emmitted in the burst.\n * @param {Number} [options.maximum=50.0] The maximum number of particles emitted in the burst.\n */\nfunction ParticleBurst(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * The time in seconds after the beginning of the particle system's lifetime that the burst will occur.\n * @type {Number}\n * @default 0.0\n */\n this.time = defaultValue(options.time, 0.0);\n /**\n * The minimum number of particles emitted.\n * @type {Number}\n * @default 0.0\n */\n this.minimum = defaultValue(options.minimum, 0.0);\n /**\n * The maximum number of particles emitted.\n * @type {Number}\n * @default 50.0\n */\n this.maximum = defaultValue(options.maximum, 50.0);\n\n this._complete = false;\n}\n\nObject.defineProperties(ParticleBurst.prototype, {\n /**\n * <code>true</code> if the burst has been completed; <code>false</code> otherwise.\n * @memberof ParticleBurst.prototype\n * @type {Boolean}\n */\n complete: {\n get: function () {\n return this._complete;\n },\n },\n});\nexport default ParticleBurst;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * <p>\n * An object that initializes a {@link Particle} from a {@link ParticleSystem}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias ParticleEmitter\n * @constructor\n *\n * @see BoxEmitter\n * @see CircleEmitter\n * @see ConeEmitter\n * @see SphereEmitter\n */\nfunction ParticleEmitter(options) {\n //>>includeStart('debug', pragmas.debug);\n throw new DeveloperError(\n \"This type should not be instantiated directly. Instead, use BoxEmitter, CircleEmitter, ConeEmitter or SphereEmitter.\"\n );\n //>>includeEnd('debug');\n}\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} The particle to initialize\n */\nParticleEmitter.prototype.emit = function (particle) {\n DeveloperError.throwInstantiationError();\n};\nexport default ParticleEmitter;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport CircleEmitter from \"./CircleEmitter.js\";\nimport Particle from \"./Particle.js\";\n\nvar defaultImageSize = new Cartesian2(1.0, 1.0);\n\n/**\n * A ParticleSystem manages the updating and display of a collection of particles.\n *\n * @alias ParticleSystem\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.show=true] Whether to display the particle system.\n * @param {ParticleSystem.updateCallback} [options.updateCallback] The callback function to be called each frame to update a particle.\n * @param {ParticleEmitter} [options.emitter=new CircleEmitter(0.5)] The particle emitter for this system.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the particle system from model to world coordinates.\n * @param {Matrix4} [options.emitterModelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.\n * @param {Number} [options.emissionRate=5] The number of particles to emit per second.\n * @param {ParticleBurst[]} [options.bursts] An array of {@link ParticleBurst}, emitting bursts of particles at periodic times.\n * @param {Boolean} [options.loop=true] Whether the particle system should loop its bursts when it is complete.\n * @param {Number} [options.scale=1.0] Sets the scale to apply to the image of the particle for the duration of its particleLife.\n * @param {Number} [options.startScale] The initial scale to apply to the image of the particle at the beginning of its life.\n * @param {Number} [options.endScale] The final scale to apply to the image of the particle at the end of its life.\n * @param {Color} [options.color=Color.WHITE] Sets the color of a particle for the duration of its particleLife.\n * @param {Color} [options.startColor] The color of the particle at the beginning of its life.\n * @param {Color} [options.endColor] The color of the particle at the end of its life.\n * @param {Object} [options.image] The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n * @param {Cartesian2} [options.imageSize=new Cartesian2(1.0, 1.0)] If set, overrides the minimumImageSize and maximumImageSize inputs that scale the particle image's dimensions in pixels.\n * @param {Cartesian2} [options.minimumImageSize] Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.\n * @param {Cartesian2} [options.maximumImageSize] Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.\n * @param {Boolean} [options.sizeInMeters] Sets if the size of particles is in meters or pixels. <code>true</code> to size the particles in meters; otherwise, the size is in pixels.\n * @param {Number} [options.speed=1.0] If set, overrides the minimumSpeed and maximumSpeed inputs with this value.\n * @param {Number} [options.minimumSpeed] Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.\n * @param {Number} [options.maximumSpeed] Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.\n * @param {Number} [options.lifetime=Number.MAX_VALUE] How long the particle system will emit particles, in seconds.\n * @param {Number} [options.particleLife=5.0] If set, overrides the minimumParticleLife and maximumParticleLife inputs with this value.\n * @param {Number} [options.minimumParticleLife] Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.\n * @param {Number} [options.maximumParticleLife] Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.\n * @param {Number} [options.mass=1.0] Sets the minimum and maximum mass of particles in kilograms.\n * @param {Number} [options.minimumMass] Sets the minimum bound for the mass of a particle in kilograms. A particle's actual mass will be chosen as a random amount above this value.\n * @param {Number} [options.maximumMass] Sets the maximum mass of particles in kilograms. A particle's actual mass will be chosen as a random amount below this value.\n * @tutorial {@link https://cesium.com/docs/tutorials/particle-systems/|Particle Systems Tutorial}\n * @demo {@link https://sandcastle.cesium.com/?src=Particle%20System.html&label=Showcases|Particle Systems Tutorial Demo}\n * @demo {@link https://sandcastle.cesium.com/?src=Particle%20System%20Fireworks.html&label=Showcases|Particle Systems Fireworks Demo}\n */\nfunction ParticleSystem(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * Whether to display the particle system.\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * An array of force callbacks. The callback is passed a {@link Particle} and the difference from the last time\n * @type {ParticleSystem.updateCallback}\n * @default undefined\n */\n this.updateCallback = options.updateCallback;\n\n /**\n * Whether the particle system should loop it's bursts when it is complete.\n * @type {Boolean}\n * @default true\n */\n this.loop = defaultValue(options.loop, true);\n\n /**\n * The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n * @type {Object}\n * @default undefined\n */\n this.image = defaultValue(options.image, undefined);\n\n var emitter = options.emitter;\n if (!defined(emitter)) {\n emitter = new CircleEmitter(0.5);\n }\n this._emitter = emitter;\n\n this._bursts = options.bursts;\n\n this._modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n this._emitterModelMatrix = Matrix4.clone(\n defaultValue(options.emitterModelMatrix, Matrix4.IDENTITY)\n );\n this._matrixDirty = true;\n this._combinedMatrix = new Matrix4();\n\n this._startColor = Color.clone(\n defaultValue(options.color, defaultValue(options.startColor, Color.WHITE))\n );\n this._endColor = Color.clone(\n defaultValue(options.color, defaultValue(options.endColor, Color.WHITE))\n );\n\n this._startScale = defaultValue(\n options.scale,\n defaultValue(options.startScale, 1.0)\n );\n this._endScale = defaultValue(\n options.scale,\n defaultValue(options.endScale, 1.0)\n );\n\n this._emissionRate = defaultValue(options.emissionRate, 5.0);\n\n this._minimumSpeed = defaultValue(\n options.speed,\n defaultValue(options.minimumSpeed, 1.0)\n );\n this._maximumSpeed = defaultValue(\n options.speed,\n defaultValue(options.maximumSpeed, 1.0)\n );\n\n this._minimumParticleLife = defaultValue(\n options.particleLife,\n defaultValue(options.minimumParticleLife, 5.0)\n );\n this._maximumParticleLife = defaultValue(\n options.particleLife,\n defaultValue(options.maximumParticleLife, 5.0)\n );\n\n this._minimumMass = defaultValue(\n options.mass,\n defaultValue(options.minimumMass, 1.0)\n );\n this._maximumMass = defaultValue(\n options.mass,\n defaultValue(options.maximumMass, 1.0)\n );\n\n this._minimumImageSize = Cartesian2.clone(\n defaultValue(\n options.imageSize,\n defaultValue(options.minimumImageSize, defaultImageSize)\n )\n );\n this._maximumImageSize = Cartesian2.clone(\n defaultValue(\n options.imageSize,\n defaultValue(options.maximumImageSize, defaultImageSize)\n )\n );\n\n this._sizeInMeters = defaultValue(options.sizeInMeters, false);\n\n this._lifetime = defaultValue(options.lifetime, Number.MAX_VALUE);\n\n this._billboardCollection = undefined;\n this._particles = [];\n\n // An array of available particles that we can reuse instead of allocating new.\n this._particlePool = [];\n\n this._previousTime = undefined;\n this._currentTime = 0.0;\n this._carryOver = 0.0;\n\n this._complete = new Event();\n this._isComplete = false;\n\n this._updateParticlePool = true;\n this._particleEstimate = 0;\n}\n\nObject.defineProperties(ParticleSystem.prototype, {\n /**\n * The particle emitter for this\n * @memberof ParticleSystem.prototype\n * @type {ParticleEmitter}\n * @default CircleEmitter\n */\n emitter: {\n get: function () {\n return this._emitter;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n this._emitter = value;\n },\n },\n /**\n * An array of {@link ParticleBurst}, emitting bursts of particles at periodic times.\n * @memberof ParticleSystem.prototype\n * @type {ParticleBurst[]}\n * @default undefined\n */\n bursts: {\n get: function () {\n return this._bursts;\n },\n set: function (value) {\n this._bursts = value;\n this._updateParticlePool = true;\n },\n },\n /**\n * The 4x4 transformation matrix that transforms the particle system from model to world coordinates.\n * @memberof ParticleSystem.prototype\n * @type {Matrix4}\n * @default Matrix4.IDENTITY\n */\n modelMatrix: {\n get: function () {\n return this._modelMatrix;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n this._matrixDirty =\n this._matrixDirty || !Matrix4.equals(this._modelMatrix, value);\n Matrix4.clone(value, this._modelMatrix);\n },\n },\n /**\n * The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.\n * @memberof ParticleSystem.prototype\n * @type {Matrix4}\n * @default Matrix4.IDENTITY\n */\n emitterModelMatrix: {\n get: function () {\n return this._emitterModelMatrix;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n this._matrixDirty =\n this._matrixDirty || !Matrix4.equals(this._emitterModelMatrix, value);\n Matrix4.clone(value, this._emitterModelMatrix);\n },\n },\n /**\n * The color of the particle at the beginning of its life.\n * @memberof ParticleSystem.prototype\n * @type {Color}\n * @default Color.WHITE\n */\n startColor: {\n get: function () {\n return this._startColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n Color.clone(value, this._startColor);\n },\n },\n /**\n * The color of the particle at the end of its life.\n * @memberof ParticleSystem.prototype\n * @type {Color}\n * @default Color.WHITE\n */\n endColor: {\n get: function () {\n return this._endColor;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"value\", value);\n //>>includeEnd('debug');\n Color.clone(value, this._endColor);\n },\n },\n /**\n * The initial scale to apply to the image of the particle at the beginning of its life.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n startScale: {\n get: function () {\n return this._startScale;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._startScale = value;\n },\n },\n /**\n * The final scale to apply to the image of the particle at the end of its life.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n endScale: {\n get: function () {\n return this._endScale;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._endScale = value;\n },\n },\n /**\n * The number of particles to emit per second.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 5\n */\n emissionRate: {\n get: function () {\n return this._emissionRate;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._emissionRate = value;\n this._updateParticlePool = true;\n },\n },\n /**\n * Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n minimumSpeed: {\n get: function () {\n return this._minimumSpeed;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._minimumSpeed = value;\n },\n },\n /**\n * Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n maximumSpeed: {\n get: function () {\n return this._maximumSpeed;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._maximumSpeed = value;\n },\n },\n /**\n * Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 5.0\n */\n minimumParticleLife: {\n get: function () {\n return this._minimumParticleLife;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._minimumParticleLife = value;\n },\n },\n /**\n * Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 5.0\n */\n maximumParticleLife: {\n get: function () {\n return this._maximumParticleLife;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._maximumParticleLife = value;\n this._updateParticlePool = true;\n },\n },\n /**\n * Sets the minimum mass of particles in kilograms.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n minimumMass: {\n get: function () {\n return this._minimumMass;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._minimumMass = value;\n },\n },\n /**\n * Sets the maximum mass of particles in kilograms.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default 1.0\n */\n maximumMass: {\n get: function () {\n return this._maximumMass;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._maximumMass = value;\n },\n },\n /**\n * Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.\n * @memberof ParticleSystem.prototype\n * @type {Cartesian2}\n * @default new Cartesian2(1.0, 1.0)\n */\n minimumImageSize: {\n get: function () {\n return this._minimumImageSize;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n //>>includeEnd('debug');\n this._minimumImageSize = value;\n },\n },\n /**\n * Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.\n * @memberof ParticleSystem.prototype\n * @type {Cartesian2}\n * @default new Cartesian2(1.0, 1.0)\n */\n maximumImageSize: {\n get: function () {\n return this._maximumImageSize;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"value\", value);\n Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n //>>includeEnd('debug');\n this._maximumImageSize = value;\n },\n },\n /**\n * Gets or sets if the particle size is in meters or pixels. <code>true</code> to size particles in meters; otherwise, the size is in pixels.\n * @memberof ParticleSystem.prototype\n * @type {Boolean}\n * @default false\n */\n sizeInMeters: {\n get: function () {\n return this._sizeInMeters;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.bool(\"value\", value);\n //>>includeEnd('debug');\n this._sizeInMeters = value;\n },\n },\n /**\n * How long the particle system will emit particles, in seconds.\n * @memberof ParticleSystem.prototype\n * @type {Number}\n * @default Number.MAX_VALUE\n */\n lifetime: {\n get: function () {\n return this._lifetime;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._lifetime = value;\n },\n },\n /**\n * Fires an event when the particle system has reached the end of its lifetime.\n * @memberof ParticleSystem.prototype\n * @type {Event}\n */\n complete: {\n get: function () {\n return this._complete;\n },\n },\n /**\n * When <code>true</code>, the particle system has reached the end of its lifetime; <code>false</code> otherwise.\n * @memberof ParticleSystem.prototype\n * @type {Boolean}\n */\n isComplete: {\n get: function () {\n return this._isComplete;\n },\n },\n});\n\nfunction updateParticlePool(system) {\n var emissionRate = system._emissionRate;\n var life = system._maximumParticleLife;\n\n var burstAmount = 0;\n var bursts = system._bursts;\n if (defined(bursts)) {\n var length = bursts.length;\n for (var i = 0; i < length; ++i) {\n burstAmount += bursts[i].maximum;\n }\n }\n\n var billboardCollection = system._billboardCollection;\n var image = system.image;\n\n var particleEstimate = Math.ceil(emissionRate * life + burstAmount);\n var particles = system._particles;\n var particlePool = system._particlePool;\n var numToAdd = Math.max(\n particleEstimate - particles.length - particlePool.length,\n 0\n );\n\n for (var j = 0; j < numToAdd; ++j) {\n var particle = new Particle();\n particle._billboard = billboardCollection.add({\n image: image,\n });\n particlePool.push(particle);\n }\n\n system._particleEstimate = particleEstimate;\n}\n\nfunction getOrCreateParticle(system) {\n // Try to reuse an existing particle from the pool.\n var particle = system._particlePool.pop();\n if (!defined(particle)) {\n // Create a new one\n particle = new Particle();\n }\n return particle;\n}\n\nfunction addParticleToPool(system, particle) {\n system._particlePool.push(particle);\n}\n\nfunction freeParticlePool(system) {\n var particles = system._particles;\n var particlePool = system._particlePool;\n var billboardCollection = system._billboardCollection;\n\n var numParticles = particles.length;\n var numInPool = particlePool.length;\n var estimate = system._particleEstimate;\n\n var start = numInPool - Math.max(estimate - numParticles - numInPool, 0);\n for (var i = start; i < numInPool; ++i) {\n var p = particlePool[i];\n billboardCollection.remove(p._billboard);\n }\n particlePool.length = start;\n}\n\nfunction removeBillboard(particle) {\n if (defined(particle._billboard)) {\n particle._billboard.show = false;\n }\n}\n\nfunction updateBillboard(system, particle) {\n var billboard = particle._billboard;\n if (!defined(billboard)) {\n billboard = particle._billboard = system._billboardCollection.add({\n image: particle.image,\n });\n }\n billboard.width = particle.imageSize.x;\n billboard.height = particle.imageSize.y;\n billboard.position = particle.position;\n billboard.sizeInMeters = system.sizeInMeters;\n billboard.show = true;\n\n // Update the color\n var r = CesiumMath.lerp(\n particle.startColor.red,\n particle.endColor.red,\n particle.normalizedAge\n );\n var g = CesiumMath.lerp(\n particle.startColor.green,\n particle.endColor.green,\n particle.normalizedAge\n );\n var b = CesiumMath.lerp(\n particle.startColor.blue,\n particle.endColor.blue,\n particle.normalizedAge\n );\n var a = CesiumMath.lerp(\n particle.startColor.alpha,\n particle.endColor.alpha,\n particle.normalizedAge\n );\n billboard.color = new Color(r, g, b, a);\n\n // Update the scale\n billboard.scale = CesiumMath.lerp(\n particle.startScale,\n particle.endScale,\n particle.normalizedAge\n );\n}\n\nfunction addParticle(system, particle) {\n particle.startColor = Color.clone(system._startColor, particle.startColor);\n particle.endColor = Color.clone(system._endColor, particle.endColor);\n particle.startScale = system._startScale;\n particle.endScale = system._endScale;\n particle.image = system.image;\n particle.life = CesiumMath.randomBetween(\n system._minimumParticleLife,\n system._maximumParticleLife\n );\n particle.mass = CesiumMath.randomBetween(\n system._minimumMass,\n system._maximumMass\n );\n particle.imageSize.x = CesiumMath.randomBetween(\n system._minimumImageSize.x,\n system._maximumImageSize.x\n );\n particle.imageSize.y = CesiumMath.randomBetween(\n system._minimumImageSize.y,\n system._maximumImageSize.y\n );\n\n // Reset the normalizedAge and age in case the particle was reused.\n particle._normalizedAge = 0.0;\n particle._age = 0.0;\n\n var speed = CesiumMath.randomBetween(\n system._minimumSpeed,\n system._maximumSpeed\n );\n Cartesian3.multiplyByScalar(particle.velocity, speed, particle.velocity);\n\n system._particles.push(particle);\n}\n\nfunction calculateNumberToEmit(system, dt) {\n // This emitter is finished if it exceeds it's lifetime.\n if (system._isComplete) {\n return 0;\n }\n\n dt = CesiumMath.mod(dt, system._lifetime);\n\n // Compute the number of particles to emit based on the emissionRate.\n var v = dt * system._emissionRate;\n var numToEmit = Math.floor(v);\n system._carryOver += v - numToEmit;\n if (system._carryOver > 1.0) {\n numToEmit++;\n system._carryOver -= 1.0;\n }\n\n // Apply any bursts\n if (defined(system.bursts)) {\n var length = system.bursts.length;\n for (var i = 0; i < length; i++) {\n var burst = system.bursts[i];\n var currentTime = system._currentTime;\n if (defined(burst) && !burst._complete && currentTime > burst.time) {\n numToEmit += CesiumMath.randomBetween(burst.minimum, burst.maximum);\n burst._complete = true;\n }\n }\n }\n\n return numToEmit;\n}\n\nvar rotatedVelocityScratch = new Cartesian3();\n\n/**\n * @private\n */\nParticleSystem.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n if (!defined(this._billboardCollection)) {\n this._billboardCollection = new BillboardCollection();\n }\n\n if (this._updateParticlePool) {\n updateParticlePool(this);\n this._updateParticlePool = false;\n }\n\n // Compute the frame time\n var dt = 0.0;\n if (this._previousTime) {\n dt = JulianDate.secondsDifference(frameState.time, this._previousTime);\n }\n\n if (dt < 0.0) {\n dt = 0.0;\n }\n\n var particles = this._particles;\n var emitter = this._emitter;\n var updateCallback = this.updateCallback;\n\n var i;\n var particle;\n\n // update particles and remove dead particles\n var length = particles.length;\n for (i = 0; i < length; ++i) {\n particle = particles[i];\n if (!particle.update(dt, updateCallback)) {\n removeBillboard(particle);\n // Add the particle back to the pool so it can be reused.\n addParticleToPool(this, particle);\n particles[i] = particles[length - 1];\n --i;\n --length;\n } else {\n updateBillboard(this, particle);\n }\n }\n particles.length = length;\n\n var numToEmit = calculateNumberToEmit(this, dt);\n\n if (numToEmit > 0 && defined(emitter)) {\n // Compute the final model matrix by combining the particle systems model matrix and the emitter matrix.\n if (this._matrixDirty) {\n this._combinedMatrix = Matrix4.multiply(\n this.modelMatrix,\n this.emitterModelMatrix,\n this._combinedMatrix\n );\n this._matrixDirty = false;\n }\n\n var combinedMatrix = this._combinedMatrix;\n\n for (i = 0; i < numToEmit; i++) {\n // Create a new particle.\n particle = getOrCreateParticle(this);\n\n // Let the emitter initialize the particle.\n this._emitter.emit(particle);\n\n //For the velocity we need to add it to the original position and then multiply by point.\n Cartesian3.add(\n particle.position,\n particle.velocity,\n rotatedVelocityScratch\n );\n Matrix4.multiplyByPoint(\n combinedMatrix,\n rotatedVelocityScratch,\n rotatedVelocityScratch\n );\n\n // Change the position to be in world coordinates\n particle.position = Matrix4.multiplyByPoint(\n combinedMatrix,\n particle.position,\n particle.position\n );\n\n // Orient the velocity in world space as well.\n Cartesian3.subtract(\n rotatedVelocityScratch,\n particle.position,\n particle.velocity\n );\n Cartesian3.normalize(particle.velocity, particle.velocity);\n\n // Add the particle to the system.\n addParticle(this, particle);\n updateBillboard(this, particle);\n }\n }\n\n this._billboardCollection.update(frameState);\n this._previousTime = JulianDate.clone(frameState.time, this._previousTime);\n this._currentTime += dt;\n\n if (\n this._lifetime !== Number.MAX_VALUE &&\n this._currentTime > this._lifetime\n ) {\n if (this.loop) {\n this._currentTime = CesiumMath.mod(this._currentTime, this._lifetime);\n if (this.bursts) {\n var burstLength = this.bursts.length;\n // Reset any bursts\n for (i = 0; i < burstLength; i++) {\n this.bursts[i]._complete = false;\n }\n }\n } else {\n this._isComplete = true;\n this._complete.raiseEvent(this);\n }\n }\n\n // free particles in the pool and release billboard GPU memory\n if (frameState.frameNumber % 120 === 0) {\n freeParticlePool(this);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ParticleSystem#destroy\n */\nParticleSystem.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see ParticleSystem#isDestroyed\n */\nParticleSystem.prototype.destroy = function () {\n this._billboardCollection =\n this._billboardCollection && this._billboardCollection.destroy();\n return destroyObject(this);\n};\n\n/**\n * A function used to modify attributes of the particle at each time step. This can include force modifications,\n * color, sizing, etc.\n *\n * @callback ParticleSystem.updateCallback\n *\n * @param {Particle} particle The particle being updated.\n * @param {Number} dt The time in seconds since the last update.\n *\n * @example\n * function applyGravity(particle, dt) {\n * var position = particle.position;\n * var gravityVector = Cesium.Cartesian3.normalize(position, new Cesium.Cartesian3());\n * Cesium.Cartesian3.multiplyByScalar(gravityVector, GRAVITATIONAL_CONSTANT * dt, gravityVector);\n * particle.velocity = Cesium.Cartesian3.add(particle.velocity, gravityVector, particle.velocity);\n * }\n */\nexport default ParticleSystem;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * If element is a string, look up the element in the DOM by ID. Otherwise return element.\n *\n * @private\n *\n * @exception {DeveloperError} Element with id \"id\" does not exist in the document.\n */\nfunction getElement(element) {\n if (typeof element === \"string\") {\n var foundElement = document.getElementById(element);\n\n //>>includeStart('debug', pragmas.debug);\n if (foundElement === null) {\n throw new DeveloperError(\n 'Element with id \"' + element + '\" does not exist in the document.'\n );\n }\n //>>includeEnd('debug');\n\n element = foundElement;\n }\n return element;\n}\nexport default getElement;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport getElement from \"../Widgets/getElement.js\";\n\n/**\n * @private\n */\nfunction PerformanceDisplay(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var container = getElement(options.container);\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required\");\n }\n //>>includeEnd('debug');\n\n this._container = container;\n\n var display = document.createElement(\"div\");\n display.className = \"cesium-performanceDisplay\";\n var fpsElement = document.createElement(\"div\");\n fpsElement.className = \"cesium-performanceDisplay-fps\";\n this._fpsText = document.createTextNode(\"\");\n fpsElement.appendChild(this._fpsText);\n var msElement = document.createElement(\"div\");\n msElement.className = \"cesium-performanceDisplay-ms\";\n this._msText = document.createTextNode(\"\");\n msElement.appendChild(this._msText);\n display.appendChild(msElement);\n display.appendChild(fpsElement);\n this._container.appendChild(display);\n\n this._lastFpsSampleTime = getTimestamp();\n this._lastMsSampleTime = getTimestamp();\n this._fpsFrameCount = 0;\n this._msFrameCount = 0;\n\n this._throttled = false;\n var throttledElement = document.createElement(\"div\");\n throttledElement.className = \"cesium-performanceDisplay-throttled\";\n this._throttledText = document.createTextNode(\"\");\n throttledElement.appendChild(this._throttledText);\n display.appendChild(throttledElement);\n}\n\nObject.defineProperties(PerformanceDisplay.prototype, {\n /**\n * The display should indicate the FPS is being throttled.\n * @memberof PerformanceDisplay.prototype\n *\n * @type {Boolean}\n */\n throttled: {\n get: function () {\n return this._throttled;\n },\n set: function (value) {\n if (this._throttled === value) {\n return;\n }\n\n if (value) {\n this._throttledText.nodeValue = \"(throttled)\";\n } else {\n this._throttledText.nodeValue = \"\";\n }\n\n this._throttled = value;\n },\n },\n});\n\n/**\n * Update the display. This function should only be called once per frame, because\n * each call records a frame in the internal buffer and redraws the display.\n *\n * @param {Boolean} [renderedThisFrame=true] If provided, the FPS count will only update and display if true.\n */\nPerformanceDisplay.prototype.update = function (renderedThisFrame) {\n var time = getTimestamp();\n var updateDisplay = defaultValue(renderedThisFrame, true);\n\n this._fpsFrameCount++;\n var fpsElapsedTime = time - this._lastFpsSampleTime;\n if (fpsElapsedTime > 1000) {\n var fps = \"N/A\";\n if (updateDisplay) {\n fps = ((this._fpsFrameCount * 1000) / fpsElapsedTime) | 0;\n }\n\n this._fpsText.nodeValue = fps + \" FPS\";\n this._lastFpsSampleTime = time;\n this._fpsFrameCount = 0;\n }\n\n this._msFrameCount++;\n var msElapsedTime = time - this._lastMsSampleTime;\n if (msElapsedTime > 200) {\n var ms = \"N/A\";\n if (updateDisplay) {\n ms = (msElapsedTime / this._msFrameCount).toFixed(2);\n }\n\n this._msText.nodeValue = ms + \" MS\";\n this._lastMsSampleTime = time;\n this._msFrameCount = 0;\n }\n};\n\n/**\n * Destroys the WebGL resources held by this object.\n */\nPerformanceDisplay.prototype.destroy = function () {\n return destroyObject(this);\n};\nexport default PerformanceDisplay;\n","import Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * @private\n */\nfunction PickDepth() {\n this._framebuffer = undefined;\n\n this._depthTexture = undefined;\n this._textureToCopy = undefined;\n this._copyDepthCommand = undefined;\n\n this._useLogDepth = undefined;\n\n this._debugPickDepthViewportCommand = undefined;\n}\n\nfunction executeDebugPickDepth(pickDepth, context, passState, useLogDepth) {\n if (\n !defined(pickDepth._debugPickDepthViewportCommand) ||\n useLogDepth !== pickDepth._useLogDepth\n ) {\n var fsSource =\n \"uniform sampler2D u_texture;\\n\" +\n \"varying vec2 v_textureCoordinates;\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" float z_window = czm_unpackDepth(texture2D(u_texture, v_textureCoordinates));\\n\" +\n \" z_window = czm_reverseLogDepth(z_window); \\n\" +\n \" float n_range = czm_depthRange.near;\\n\" +\n \" float f_range = czm_depthRange.far;\\n\" +\n \" float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\\n\" +\n \" float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\\n\" +\n \" gl_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\\n\" +\n \"}\\n\";\n var fs = new ShaderSource({\n defines: [useLogDepth ? \"LOG_DEPTH\" : \"\"],\n sources: [fsSource],\n });\n\n pickDepth._debugPickDepthViewportCommand = context.createViewportQuadCommand(\n fs,\n {\n uniformMap: {\n u_texture: function () {\n return pickDepth._depthTexture;\n },\n },\n owner: pickDepth,\n }\n );\n\n pickDepth._useLogDepth = useLogDepth;\n }\n\n pickDepth._debugPickDepthViewportCommand.execute(context, passState);\n}\n\nfunction destroyTextures(pickDepth) {\n pickDepth._depthTexture =\n pickDepth._depthTexture &&\n !pickDepth._depthTexture.isDestroyed() &&\n pickDepth._depthTexture.destroy();\n}\n\nfunction destroyFramebuffers(pickDepth) {\n pickDepth._framebuffer =\n pickDepth._framebuffer &&\n !pickDepth._framebuffer.isDestroyed() &&\n pickDepth._framebuffer.destroy();\n}\n\nfunction createTextures(pickDepth, context, width, height) {\n pickDepth._depthTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n });\n}\n\nfunction createFramebuffers(pickDepth, context, width, height) {\n destroyTextures(pickDepth);\n destroyFramebuffers(pickDepth);\n\n createTextures(pickDepth, context, width, height);\n\n pickDepth._framebuffer = new Framebuffer({\n context: context,\n colorTextures: [pickDepth._depthTexture],\n destroyAttachments: false,\n });\n}\n\nfunction updateFramebuffers(pickDepth, context, depthTexture) {\n var width = depthTexture.width;\n var height = depthTexture.height;\n\n var texture = pickDepth._depthTexture;\n var textureChanged =\n !defined(texture) || texture.width !== width || texture.height !== height;\n if (!defined(pickDepth._framebuffer) || textureChanged) {\n createFramebuffers(pickDepth, context, width, height);\n }\n}\n\nfunction updateCopyCommands(pickDepth, context, depthTexture) {\n if (!defined(pickDepth._copyDepthCommand)) {\n var fs =\n \"uniform sampler2D u_texture;\\n\" +\n \"varying vec2 v_textureCoordinates;\\n\" +\n \"void main()\\n\" +\n \"{\\n\" +\n \" gl_FragColor = czm_packDepth(texture2D(u_texture, v_textureCoordinates).r);\\n\" +\n \"}\\n\";\n pickDepth._copyDepthCommand = context.createViewportQuadCommand(fs, {\n renderState: RenderState.fromCache(),\n uniformMap: {\n u_texture: function () {\n return pickDepth._textureToCopy;\n },\n },\n owner: pickDepth,\n });\n }\n\n pickDepth._textureToCopy = depthTexture;\n pickDepth._copyDepthCommand.framebuffer = pickDepth._framebuffer;\n}\n\nPickDepth.prototype.executeDebugPickDepth = function (\n context,\n passState,\n useLogDepth\n) {\n executeDebugPickDepth(this, context, passState, useLogDepth);\n};\n\nPickDepth.prototype.update = function (context, depthTexture) {\n updateFramebuffers(this, context, depthTexture);\n updateCopyCommands(this, context, depthTexture);\n};\n\nvar scratchPackedDepth = new Cartesian4();\nvar packedDepthScale = new Cartesian4(\n 1.0,\n 1.0 / 255.0,\n 1.0 / 65025.0,\n 1.0 / 16581375.0\n);\n\nPickDepth.prototype.getDepth = function (context, x, y) {\n // If this function is called before the framebuffer is created, the depth is undefined.\n if (!defined(this._framebuffer)) {\n return undefined;\n }\n\n var pixels = context.readPixels({\n x: x,\n y: y,\n width: 1,\n height: 1,\n framebuffer: this._framebuffer,\n });\n\n var packedDepth = Cartesian4.unpack(pixels, 0, scratchPackedDepth);\n Cartesian4.divideByScalar(packedDepth, 255.0, packedDepth);\n return Cartesian4.dot(packedDepth, packedDepthScale);\n};\n\nPickDepth.prototype.executeCopyDepth = function (context, passState) {\n this._copyDepthCommand.execute(context, passState);\n};\n\nPickDepth.prototype.isDestroyed = function () {\n return false;\n};\n\nPickDepth.prototype.destroy = function () {\n destroyTextures(this);\n destroyFramebuffers(this);\n\n if (defined(this._copyDepthCommand)) {\n this._copyDepthCommand.shaderProgram =\n defined(this._copyDepthCommand.shaderProgram) &&\n this._copyDepthCommand.shaderProgram.destroy();\n }\n\n return destroyObject(this);\n};\nexport default PickDepth;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * @private\n */\nfunction PickDepthFramebuffer() {\n this._depthStencilTexture = undefined;\n this._framebuffer = undefined;\n this._passState = undefined;\n}\n\nfunction destroyResources(pickDepth) {\n pickDepth._framebuffer =\n pickDepth._framebuffer && pickDepth._framebuffer.destroy();\n pickDepth._depthStencilTexture =\n pickDepth._depthStencilTexture && pickDepth._depthStencilTexture.destroy();\n}\n\nfunction createResources(pickDepth, context) {\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n\n pickDepth._depthStencilTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n });\n\n pickDepth._framebuffer = new Framebuffer({\n context: context,\n depthStencilTexture: pickDepth._depthStencilTexture,\n destroyAttachments: false,\n });\n\n var passState = new PassState(context);\n passState.blendingEnabled = false;\n passState.scissorTest = {\n enabled: true,\n rectangle: new BoundingRectangle(),\n };\n passState.viewport = new BoundingRectangle();\n pickDepth._passState = passState;\n}\n\nPickDepthFramebuffer.prototype.update = function (\n context,\n drawingBufferPosition,\n viewport\n) {\n var width = viewport.width;\n var height = viewport.height;\n\n if (\n !defined(this._framebuffer) ||\n width !== this._depthStencilTexture.width ||\n height !== this._depthStencilTexture.height\n ) {\n destroyResources(this);\n createResources(this, context);\n }\n\n var framebuffer = this._framebuffer;\n var passState = this._passState;\n passState.framebuffer = framebuffer;\n passState.viewport.width = width;\n passState.viewport.height = height;\n passState.scissorTest.rectangle.x = drawingBufferPosition.x;\n passState.scissorTest.rectangle.y = height - drawingBufferPosition.y;\n passState.scissorTest.rectangle.width = 1;\n passState.scissorTest.rectangle.height = 1;\n\n return passState;\n};\n\nPickDepthFramebuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nPickDepthFramebuffer.prototype.destroy = function () {\n destroyResources(this);\n return destroyObject(this);\n};\nexport default PickDepthFramebuffer;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * @private\n */\nfunction PickFramebuffer(context) {\n // Override per-command states\n var passState = new PassState(context);\n passState.blendingEnabled = false;\n passState.scissorTest = {\n enabled: true,\n rectangle: new BoundingRectangle(),\n };\n passState.viewport = new BoundingRectangle();\n\n this._context = context;\n this._fb = undefined;\n this._passState = passState;\n this._width = 0;\n this._height = 0;\n}\nPickFramebuffer.prototype.begin = function (screenSpaceRectangle, viewport) {\n var context = this._context;\n var width = viewport.width;\n var height = viewport.height;\n\n BoundingRectangle.clone(\n screenSpaceRectangle,\n this._passState.scissorTest.rectangle\n );\n\n // Initially create or recreate renderbuffers and framebuffer used for picking\n if (!defined(this._fb) || this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n\n this._fb = this._fb && this._fb.destroy();\n this._fb = new Framebuffer({\n context: context,\n colorTextures: [\n new Texture({\n context: context,\n width: width,\n height: height,\n }),\n ],\n depthStencilRenderbuffer: new Renderbuffer({\n context: context,\n width: width,\n height: height,\n format: RenderbufferFormat.DEPTH_STENCIL,\n }),\n });\n this._passState.framebuffer = this._fb;\n }\n\n this._passState.viewport.width = width;\n this._passState.viewport.height = height;\n\n return this._passState;\n};\n\nvar colorScratch = new Color();\n\nPickFramebuffer.prototype.end = function (screenSpaceRectangle) {\n var width = defaultValue(screenSpaceRectangle.width, 1.0);\n var height = defaultValue(screenSpaceRectangle.height, 1.0);\n\n var context = this._context;\n var pixels = context.readPixels({\n x: screenSpaceRectangle.x,\n y: screenSpaceRectangle.y,\n width: width,\n height: height,\n framebuffer: this._fb,\n });\n\n var max = Math.max(width, height);\n var length = max * max;\n var halfWidth = Math.floor(width * 0.5);\n var halfHeight = Math.floor(height * 0.5);\n\n var x = 0;\n var y = 0;\n var dx = 0;\n var dy = -1;\n\n // Spiral around the center pixel, this is a workaround until\n // we can access the depth buffer on all browsers.\n\n // The region does not have to square and the dimensions do not have to be odd, but\n // loop iterations would be wasted. Prefer square regions where the size is odd.\n for (var i = 0; i < length; ++i) {\n if (\n -halfWidth <= x &&\n x <= halfWidth &&\n -halfHeight <= y &&\n y <= halfHeight\n ) {\n var index = 4 * ((halfHeight - y) * width + x + halfWidth);\n\n colorScratch.red = Color.byteToFloat(pixels[index]);\n colorScratch.green = Color.byteToFloat(pixels[index + 1]);\n colorScratch.blue = Color.byteToFloat(pixels[index + 2]);\n colorScratch.alpha = Color.byteToFloat(pixels[index + 3]);\n\n var object = context.getObjectByPickColor(colorScratch);\n if (defined(object)) {\n return object;\n }\n }\n\n // if (top right || bottom left corners) || (top left corner) || (bottom right corner + (1, 0))\n // change spiral direction\n if (x === y || (x < 0 && -x === y) || (x > 0 && x === 1 - y)) {\n var temp = dx;\n dx = -dy;\n dy = temp;\n }\n\n x += dx;\n y += dy;\n }\n\n return undefined;\n};\n\nPickFramebuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nPickFramebuffer.prototype.destroy = function () {\n this._fb = this._fb && this._fb.destroy();\n return destroyObject(this);\n};\nexport default PickFramebuffer;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * @private\n */\nfunction SceneFramebuffer() {\n this._colorTexture = undefined;\n this._idTexture = undefined;\n this._depthStencilTexture = undefined;\n this._depthStencilRenderbuffer = undefined;\n this._framebuffer = undefined;\n this._idFramebuffer = undefined;\n\n this._idClearColor = new Color(0.0, 0.0, 0.0, 0.0);\n\n this._useHdr = undefined;\n\n this._clearCommand = new ClearCommand({\n color: new Color(0.0, 0.0, 0.0, 0.0),\n depth: 1.0,\n owner: this,\n });\n}\n\nfunction destroyResources(post) {\n post._framebuffer = post._framebuffer && post._framebuffer.destroy();\n post._idFramebuffer = post._idFramebuffer && post._idFramebuffer.destroy();\n post._colorTexture = post._colorTexture && post._colorTexture.destroy();\n post._idTexture = post._idTexture && post._idTexture.destroy();\n post._depthStencilTexture =\n post._depthStencilTexture && post._depthStencilTexture.destroy();\n post._depthStencilRenderbuffer =\n post._depthStencilRenderbuffer && post._depthStencilRenderbuffer.destroy();\n post._depthStencilIdTexture =\n post._depthStencilIdTexture && post._depthStencilIdTexture.destroy();\n post._depthStencilIdRenderbuffer =\n post._depthStencilIdRenderbuffer &&\n post._depthStencilIdRenderbuffer.destroy();\n\n post._framebuffer = undefined;\n post._idFramebuffer = undefined;\n post._colorTexture = undefined;\n post._idTexture = undefined;\n post._depthStencilTexture = undefined;\n post._depthStencilRenderbuffer = undefined;\n post._depthStencilIdTexture = undefined;\n post._depthStencilIdRenderbuffer = undefined;\n}\n\nSceneFramebuffer.prototype.update = function (context, viewport, hdr) {\n var width = viewport.width;\n var height = viewport.height;\n var colorTexture = this._colorTexture;\n if (\n defined(colorTexture) &&\n colorTexture.width === width &&\n colorTexture.height === height &&\n hdr === this._useHdr\n ) {\n return;\n }\n\n destroyResources(this);\n this._useHdr = hdr;\n\n var pixelDatatype = hdr\n ? context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT\n : PixelDatatype.UNSIGNED_BYTE;\n this._colorTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: pixelDatatype,\n sampler: Sampler.NEAREST,\n });\n\n this._idTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n if (context.depthTexture) {\n this._depthStencilTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n sampler: Sampler.NEAREST,\n });\n this._depthStencilIdTexture = new Texture({\n context: context,\n width: width,\n height: height,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n sampler: Sampler.NEAREST,\n });\n } else {\n this._depthStencilRenderbuffer = new Renderbuffer({\n context: context,\n width: width,\n height: height,\n format: RenderbufferFormat.DEPTH_STENCIL,\n });\n this._depthStencilIdRenderbuffer = new Renderbuffer({\n context: context,\n width: width,\n height: height,\n format: RenderbufferFormat.DEPTH_STENCIL,\n });\n }\n\n this._framebuffer = new Framebuffer({\n context: context,\n colorTextures: [this._colorTexture],\n depthStencilTexture: this._depthStencilTexture,\n depthStencilRenderbuffer: this._depthStencilRenderbuffer,\n destroyAttachments: false,\n });\n\n this._idFramebuffer = new Framebuffer({\n context: context,\n colorTextures: [this._idTexture],\n depthStencilTexture: this._depthStencilIdTexture,\n depthStencilRenderbuffer: this._depthStencilIdRenderbuffer,\n destroyAttachments: false,\n });\n};\n\nSceneFramebuffer.prototype.clear = function (context, passState, clearColor) {\n var framebuffer = passState.framebuffer;\n\n passState.framebuffer = this._framebuffer;\n Color.clone(clearColor, this._clearCommand.color);\n this._clearCommand.execute(context, passState);\n\n passState.framebuffer = this._idFramebuffer;\n Color.clone(this._idClearColor, this._clearCommand.color);\n this._clearCommand.execute(context, passState);\n\n passState.framebuffer = framebuffer;\n};\n\nSceneFramebuffer.prototype.getFramebuffer = function () {\n return this._framebuffer;\n};\n\nSceneFramebuffer.prototype.getIdFramebuffer = function () {\n return this._idFramebuffer;\n};\n\nSceneFramebuffer.prototype.isDestroyed = function () {\n return false;\n};\n\nSceneFramebuffer.prototype.destroy = function () {\n destroyResources(this);\n return destroyObject(this);\n};\nexport default SceneFramebuffer;\n","import defined from \"../Core/defined.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\n\n/**\n * @private\n */\nfunction ShadowMapShader() {}\n\nShadowMapShader.getShadowCastShaderKeyword = function (\n isPointLight,\n isTerrain,\n usesDepthTexture,\n isOpaque\n) {\n return (\n \"castShadow \" +\n isPointLight +\n \" \" +\n isTerrain +\n \" \" +\n usesDepthTexture +\n \" \" +\n isOpaque\n );\n};\n\nShadowMapShader.createShadowCastVertexShader = function (\n vs,\n isPointLight,\n isTerrain\n) {\n var defines = vs.defines.slice(0);\n var sources = vs.sources.slice(0);\n\n defines.push(\"SHADOW_MAP\");\n\n if (isTerrain) {\n defines.push(\"GENERATE_POSITION\");\n }\n\n var positionVaryingName = ShaderSource.findPositionVarying(vs);\n var hasPositionVarying = defined(positionVaryingName);\n\n if (isPointLight && !hasPositionVarying) {\n var length = sources.length;\n for (var j = 0; j < length; ++j) {\n sources[j] = ShaderSource.replaceMain(sources[j], \"czm_shadow_cast_main\");\n }\n\n var shadowVS =\n \"varying vec3 v_positionEC; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_shadow_cast_main(); \\n\" +\n \" v_positionEC = (czm_inverseProjection * gl_Position).xyz; \\n\" +\n \"}\";\n sources.push(shadowVS);\n }\n\n return new ShaderSource({\n defines: defines,\n sources: sources,\n });\n};\n\nShadowMapShader.createShadowCastFragmentShader = function (\n fs,\n isPointLight,\n usesDepthTexture,\n opaque\n) {\n var defines = fs.defines.slice(0);\n var sources = fs.sources.slice(0);\n\n var positionVaryingName = ShaderSource.findPositionVarying(fs);\n var hasPositionVarying = defined(positionVaryingName);\n if (!hasPositionVarying) {\n positionVaryingName = \"v_positionEC\";\n }\n\n var length = sources.length;\n for (var i = 0; i < length; ++i) {\n sources[i] = ShaderSource.replaceMain(sources[i], \"czm_shadow_cast_main\");\n }\n\n var fsSource = \"\";\n\n if (isPointLight) {\n if (!hasPositionVarying) {\n fsSource += \"varying vec3 v_positionEC; \\n\";\n }\n fsSource += \"uniform vec4 shadowMap_lightPositionEC; \\n\";\n }\n\n if (opaque) {\n fsSource += \"void main() \\n\" + \"{ \\n\";\n } else {\n fsSource +=\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_shadow_cast_main(); \\n\" +\n \" if (gl_FragColor.a == 0.0) \\n\" +\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\";\n }\n\n if (isPointLight) {\n fsSource +=\n \" float distance = length(\" +\n positionVaryingName +\n \"); \\n\" +\n \" if (distance >= shadowMap_lightPositionEC.w) \\n\" +\n \" { \\n\" +\n \" discard; \\n\" +\n \" } \\n\" +\n \" distance /= shadowMap_lightPositionEC.w; // radius \\n\" +\n \" gl_FragColor = czm_packDepth(distance); \\n\";\n } else if (usesDepthTexture) {\n fsSource += \" gl_FragColor = vec4(1.0); \\n\";\n } else {\n fsSource += \" gl_FragColor = czm_packDepth(gl_FragCoord.z); \\n\";\n }\n\n fsSource += \"} \\n\";\n\n sources.push(fsSource);\n\n return new ShaderSource({\n defines: defines,\n sources: sources,\n });\n};\n\nShadowMapShader.getShadowReceiveShaderKeyword = function (\n shadowMap,\n castShadows,\n isTerrain,\n hasTerrainNormal\n) {\n var usesDepthTexture = shadowMap._usesDepthTexture;\n var polygonOffsetSupported = shadowMap._polygonOffsetSupported;\n var isPointLight = shadowMap._isPointLight;\n var isSpotLight = shadowMap._isSpotLight;\n var hasCascades = shadowMap._numberOfCascades > 1;\n var debugCascadeColors = shadowMap.debugCascadeColors;\n var softShadows = shadowMap.softShadows;\n\n return (\n \"receiveShadow \" +\n usesDepthTexture +\n polygonOffsetSupported +\n isPointLight +\n isSpotLight +\n hasCascades +\n debugCascadeColors +\n softShadows +\n castShadows +\n isTerrain +\n hasTerrainNormal\n );\n};\n\nShadowMapShader.createShadowReceiveVertexShader = function (\n vs,\n isTerrain,\n hasTerrainNormal\n) {\n var defines = vs.defines.slice(0);\n var sources = vs.sources.slice(0);\n\n defines.push(\"SHADOW_MAP\");\n\n if (isTerrain) {\n if (hasTerrainNormal) {\n defines.push(\"GENERATE_POSITION_AND_NORMAL\");\n } else {\n defines.push(\"GENERATE_POSITION\");\n }\n }\n\n return new ShaderSource({\n defines: defines,\n sources: sources,\n });\n};\n\nShadowMapShader.createShadowReceiveFragmentShader = function (\n fs,\n shadowMap,\n castShadows,\n isTerrain,\n hasTerrainNormal\n) {\n var normalVaryingName = ShaderSource.findNormalVarying(fs);\n var hasNormalVarying =\n (!isTerrain && defined(normalVaryingName)) ||\n (isTerrain && hasTerrainNormal);\n\n var positionVaryingName = ShaderSource.findPositionVarying(fs);\n var hasPositionVarying = defined(positionVaryingName);\n\n var usesDepthTexture = shadowMap._usesDepthTexture;\n var polygonOffsetSupported = shadowMap._polygonOffsetSupported;\n var isPointLight = shadowMap._isPointLight;\n var isSpotLight = shadowMap._isSpotLight;\n var hasCascades = shadowMap._numberOfCascades > 1;\n var debugCascadeColors = shadowMap.debugCascadeColors;\n var softShadows = shadowMap.softShadows;\n var bias = isPointLight\n ? shadowMap._pointBias\n : isTerrain\n ? shadowMap._terrainBias\n : shadowMap._primitiveBias;\n\n var defines = fs.defines.slice(0);\n var sources = fs.sources.slice(0);\n\n var length = sources.length;\n for (var i = 0; i < length; ++i) {\n sources[i] = ShaderSource.replaceMain(\n sources[i],\n \"czm_shadow_receive_main\"\n );\n }\n\n if (isPointLight) {\n defines.push(\"USE_CUBE_MAP_SHADOW\");\n } else if (usesDepthTexture) {\n defines.push(\"USE_SHADOW_DEPTH_TEXTURE\");\n }\n\n if (softShadows && !isPointLight) {\n defines.push(\"USE_SOFT_SHADOWS\");\n }\n\n // Enable day-night shading so that the globe is dark when the light is below the horizon\n if (hasCascades && castShadows && isTerrain) {\n if (hasNormalVarying) {\n defines.push(\"ENABLE_VERTEX_LIGHTING\");\n } else {\n defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n }\n }\n\n if (castShadows && bias.normalShading && hasNormalVarying) {\n defines.push(\"USE_NORMAL_SHADING\");\n if (bias.normalShadingSmooth > 0.0) {\n defines.push(\"USE_NORMAL_SHADING_SMOOTH\");\n }\n }\n\n var fsSource = \"\";\n\n if (isPointLight) {\n fsSource += \"uniform samplerCube shadowMap_textureCube; \\n\";\n } else {\n fsSource += \"uniform sampler2D shadowMap_texture; \\n\";\n }\n\n var returnPositionEC;\n if (hasPositionVarying) {\n returnPositionEC = \" return vec4(\" + positionVaryingName + \", 1.0); \\n\";\n } else {\n returnPositionEC =\n \"#ifndef LOG_DEPTH \\n\" +\n \" return czm_windowToEyeCoordinates(gl_FragCoord); \\n\" +\n \"#else \\n\" +\n \" return vec4(v_logPositionEC, 1.0); \\n\" +\n \"#endif \\n\";\n }\n\n fsSource +=\n \"uniform mat4 shadowMap_matrix; \\n\" +\n \"uniform vec3 shadowMap_lightDirectionEC; \\n\" +\n \"uniform vec4 shadowMap_lightPositionEC; \\n\" +\n \"uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; \\n\" +\n \"uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; \\n\" +\n \"#ifdef LOG_DEPTH \\n\" +\n \"varying vec3 v_logPositionEC; \\n\" +\n \"#endif \\n\" +\n \"vec4 getPositionEC() \\n\" +\n \"{ \\n\" +\n returnPositionEC +\n \"} \\n\" +\n \"vec3 getNormalEC() \\n\" +\n \"{ \\n\" +\n (hasNormalVarying\n ? \" return normalize(\" + normalVaryingName + \"); \\n\"\n : \" return vec3(1.0); \\n\") +\n \"} \\n\" +\n // Offset the shadow position in the direction of the normal for perpendicular and back faces\n \"void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) \\n\" +\n \"{ \\n\" +\n (bias.normalOffset && hasNormalVarying\n ? \" float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; \\n\" +\n \" float normalOffsetScale = 1.0 - nDotL; \\n\" +\n \" vec3 offset = normalOffset * normalOffsetScale * normalEC; \\n\" +\n \" positionEC.xyz += offset; \\n\"\n : \"\") +\n \"} \\n\";\n\n fsSource +=\n \"void main() \\n\" +\n \"{ \\n\" +\n \" czm_shadow_receive_main(); \\n\" +\n \" vec4 positionEC = getPositionEC(); \\n\" +\n \" vec3 normalEC = getNormalEC(); \\n\" +\n \" float depth = -positionEC.z; \\n\";\n\n fsSource +=\n \" czm_shadowParameters shadowParameters; \\n\" +\n \" shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; \\n\" +\n \" shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; \\n\" +\n \" shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; \\n\" +\n \" shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; \\n\";\n\n if (isTerrain) {\n // Scale depth bias based on view distance to reduce z-fighting in distant terrain\n fsSource += \" shadowParameters.depthBias *= max(depth * 0.01, 1.0); \\n\";\n } else if (!polygonOffsetSupported) {\n // If polygon offset isn't supported push the depth back based on view, however this\n // causes light leaking at further away views\n fsSource +=\n \" shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \\n\";\n }\n\n if (isPointLight) {\n fsSource +=\n \" vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; \\n\" +\n \" float distance = length(directionEC); \\n\" +\n \" directionEC = normalize(directionEC); \\n\" +\n \" float radius = shadowMap_lightPositionEC.w; \\n\" +\n \" // Stop early if the fragment is beyond the point light radius \\n\" +\n \" if (distance > radius) \\n\" +\n \" { \\n\" +\n \" return; \\n\" +\n \" } \\n\" +\n \" vec3 directionWC = czm_inverseViewRotation * directionEC; \\n\" +\n \" shadowParameters.depth = distance / radius; \\n\" +\n \" shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \\n\" +\n \" shadowParameters.texCoords = directionWC; \\n\" +\n \" float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); \\n\";\n } else if (isSpotLight) {\n fsSource +=\n \" vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); \\n\" +\n \" float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \\n\" +\n \" applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n \" vec4 shadowPosition = shadowMap_matrix * positionEC; \\n\" +\n \" // Spot light uses a perspective projection, so perform the perspective divide \\n\" +\n \" shadowPosition /= shadowPosition.w; \\n\" +\n \" // Stop early if the fragment is not in the shadow bounds \\n\" +\n \" if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \\n\" +\n \" { \\n\" +\n \" return; \\n\" +\n \" } \\n\" +\n \" shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n \" shadowParameters.depth = shadowPosition.z; \\n\" +\n \" shadowParameters.nDotL = nDotL; \\n\" +\n \" float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\";\n } else if (hasCascades) {\n fsSource +=\n \" float maxDepth = shadowMap_cascadeSplits[1].w; \\n\" +\n \" // Stop early if the eye depth exceeds the last cascade \\n\" +\n \" if (depth > maxDepth) \\n\" +\n \" { \\n\" +\n \" return; \\n\" +\n \" } \\n\" +\n \" // Get the cascade based on the eye-space depth \\n\" +\n \" vec4 weights = czm_cascadeWeights(depth); \\n\" +\n \" // Apply normal offset \\n\" +\n \" float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \\n\" +\n \" applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n \" // Transform position into the cascade \\n\" +\n \" vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; \\n\" +\n \" // Get visibility \\n\" +\n \" shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n \" shadowParameters.depth = shadowPosition.z; \\n\" +\n \" shadowParameters.nDotL = nDotL; \\n\" +\n \" float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\" +\n \" // Fade out shadows that are far away \\n\" +\n \" float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; \\n\" +\n \" float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); \\n\" +\n \" visibility = mix(visibility, 1.0, fade); \\n\" +\n (debugCascadeColors\n ? \" // Draw cascade colors for debugging \\n\" +\n \" gl_FragColor *= czm_cascadeColor(weights); \\n\"\n : \"\");\n } else {\n fsSource +=\n \" float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \\n\" +\n \" applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n \" vec4 shadowPosition = shadowMap_matrix * positionEC; \\n\" +\n \" // Stop early if the fragment is not in the shadow bounds \\n\" +\n \" if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \\n\" +\n \" { \\n\" +\n \" return; \\n\" +\n \" } \\n\" +\n \" shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n \" shadowParameters.depth = shadowPosition.z; \\n\" +\n \" shadowParameters.nDotL = nDotL; \\n\" +\n \" float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\";\n }\n\n fsSource += \" gl_FragColor.rgb *= visibility; \\n\" + \"} \\n\";\n\n sources.push(fsSource);\n\n return new ShaderSource({\n defines: defines,\n sources: sources,\n });\n};\nexport default ShadowMapShader;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport Camera from \"./Camera.js\";\nimport CullFace from \"./CullFace.js\";\nimport DebugCameraPrimitive from \"./DebugCameraPrimitive.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport ShadowMapShader from \"./ShadowMapShader.js\";\n\n/**\n * Use {@link Viewer#shadowMap} to get the scene's shadow map. Do not construct this directly.\n *\n * <p>\n * The normalOffset bias pushes the shadows forward slightly, and may be disabled\n * for applications that require ultra precise shadows.\n * </p>\n *\n * @alias ShadowMap\n * @internalConstructor\n * @class\n *\n * @param {Object} options An object containing the following properties:\n * @param {Camera} options.lightCamera A camera representing the light source.\n * @param {Boolean} [options.enabled=true] Whether the shadow map is enabled.\n * @param {Boolean} [options.isPointLight=false] Whether the light source is a point light. Point light shadows do not use cascades.\n * @param {Boolean} [options.pointLightRadius=100.0] Radius of the point light.\n * @param {Boolean} [options.cascadesEnabled=true] Use multiple shadow maps to cover different partitions of the view frustum.\n * @param {Number} [options.numberOfCascades=4] The number of cascades to use for the shadow map. Supported values are one and four.\n * @param {Number} [options.maximumDistance=5000.0] The maximum distance used for generating cascaded shadows. Lower values improve shadow quality.\n * @param {Number} [options.size=2048] The width and height, in pixels, of each shadow map.\n * @param {Boolean} [options.softShadows=false] Whether percentage-closer-filtering is enabled for producing softer shadows.\n * @param {Number} [options.darkness=0.3] The shadow darkness.\n * @param {Boolean} [options.normalOffset=true] Whether a normal bias is applied to shadows.\n *\n * @exception {DeveloperError} Only one or four cascades are supported.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Shadows.html|Cesium Sandcastle Shadows Demo}\n */\nfunction ShadowMap(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n // options.context is an undocumented option\n var context = options.context;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(context)) {\n throw new DeveloperError(\"context is required.\");\n }\n if (!defined(options.lightCamera)) {\n throw new DeveloperError(\"lightCamera is required.\");\n }\n if (\n defined(options.numberOfCascades) &&\n options.numberOfCascades !== 1 &&\n options.numberOfCascades !== 4\n ) {\n throw new DeveloperError(\"Only one or four cascades are supported.\");\n }\n //>>includeEnd('debug');\n\n this._enabled = defaultValue(options.enabled, true);\n this._softShadows = defaultValue(options.softShadows, false);\n this._normalOffset = defaultValue(options.normalOffset, true);\n this.dirty = true;\n\n /**\n * Specifies whether the shadow map originates from a light source. Shadow maps that are used for analytical\n * purposes should set this to false so as not to affect scene rendering.\n *\n * @private\n */\n this.fromLightSource = defaultValue(options.fromLightSource, true);\n\n /**\n * Determines the darkness of the shadows.\n *\n * @type {Number}\n * @default 0.3\n */\n this.darkness = defaultValue(options.darkness, 0.3);\n this._darkness = this.darkness;\n\n /**\n * Determines the maximum distance of the shadow map. Only applicable for cascaded shadows. Larger distances may result in lower quality shadows.\n *\n * @type {Number}\n * @default 5000.0\n */\n this.maximumDistance = defaultValue(options.maximumDistance, 5000.0);\n\n this._outOfView = false;\n this._outOfViewPrevious = false;\n this._needsUpdate = true;\n\n // In IE11 and Edge polygon offset is not functional.\n // TODO : Also disabled for instances of Firefox and Chrome running ANGLE that do not support depth textures.\n // Re-enable once https://github.com/CesiumGS/cesium/issues/4560 is resolved.\n var polygonOffsetSupported = true;\n if (\n FeatureDetection.isInternetExplorer() ||\n FeatureDetection.isEdge() ||\n ((FeatureDetection.isChrome() || FeatureDetection.isFirefox()) &&\n FeatureDetection.isWindows() &&\n !context.depthTexture)\n ) {\n polygonOffsetSupported = false;\n }\n this._polygonOffsetSupported = polygonOffsetSupported;\n\n this._terrainBias = {\n polygonOffset: polygonOffsetSupported,\n polygonOffsetFactor: 1.1,\n polygonOffsetUnits: 4.0,\n normalOffset: this._normalOffset,\n normalOffsetScale: 0.5,\n normalShading: true,\n normalShadingSmooth: 0.3,\n depthBias: 0.0001,\n };\n\n this._primitiveBias = {\n polygonOffset: polygonOffsetSupported,\n polygonOffsetFactor: 1.1,\n polygonOffsetUnits: 4.0,\n normalOffset: this._normalOffset,\n normalOffsetScale: 0.1,\n normalShading: true,\n normalShadingSmooth: 0.05,\n depthBias: 0.00002,\n };\n\n this._pointBias = {\n polygonOffset: false,\n polygonOffsetFactor: 1.1,\n polygonOffsetUnits: 4.0,\n normalOffset: this._normalOffset,\n normalOffsetScale: 0.0,\n normalShading: true,\n normalShadingSmooth: 0.1,\n depthBias: 0.0005,\n };\n\n // Framebuffer resources\n this._depthAttachment = undefined;\n this._colorAttachment = undefined;\n\n // Uniforms\n this._shadowMapMatrix = new Matrix4();\n this._shadowMapTexture = undefined;\n this._lightDirectionEC = new Cartesian3();\n this._lightPositionEC = new Cartesian4();\n this._distance = 0.0;\n\n this._lightCamera = options.lightCamera;\n this._shadowMapCamera = new ShadowMapCamera();\n this._shadowMapCullingVolume = undefined;\n this._sceneCamera = undefined;\n this._boundingSphere = new BoundingSphere();\n\n this._isPointLight = defaultValue(options.isPointLight, false);\n this._pointLightRadius = defaultValue(options.pointLightRadius, 100.0);\n\n this._cascadesEnabled = this._isPointLight\n ? false\n : defaultValue(options.cascadesEnabled, true);\n this._numberOfCascades = !this._cascadesEnabled\n ? 0\n : defaultValue(options.numberOfCascades, 4);\n this._fitNearFar = true;\n this._maximumCascadeDistances = [25.0, 150.0, 700.0, Number.MAX_VALUE];\n\n this._textureSize = new Cartesian2();\n\n this._isSpotLight = false;\n if (this._cascadesEnabled) {\n // Cascaded shadows are always orthographic. The frustum dimensions are calculated on the fly.\n this._shadowMapCamera.frustum = new OrthographicOffCenterFrustum();\n } else if (defined(this._lightCamera.frustum.fov)) {\n // If the light camera uses a perspective frustum, then the light source is a spot light\n this._isSpotLight = true;\n }\n\n // Uniforms\n this._cascadeSplits = [new Cartesian4(), new Cartesian4()];\n this._cascadeMatrices = [\n new Matrix4(),\n new Matrix4(),\n new Matrix4(),\n new Matrix4(),\n ];\n this._cascadeDistances = new Cartesian4();\n\n var numberOfPasses;\n if (this._isPointLight) {\n numberOfPasses = 6; // One shadow map for each direction\n } else if (!this._cascadesEnabled) {\n numberOfPasses = 1;\n } else {\n numberOfPasses = this._numberOfCascades;\n }\n\n this._passes = new Array(numberOfPasses);\n for (var i = 0; i < numberOfPasses; ++i) {\n this._passes[i] = new ShadowPass(context);\n }\n\n this.debugShow = false;\n this.debugFreezeFrame = false;\n this._debugFreezeFrame = false;\n this._debugCascadeColors = false;\n this._debugLightFrustum = undefined;\n this._debugCameraFrustum = undefined;\n this._debugCascadeFrustums = new Array(this._numberOfCascades);\n this._debugShadowViewCommand = undefined;\n\n this._usesDepthTexture = context.depthTexture;\n\n if (this._isPointLight) {\n this._usesDepthTexture = false;\n }\n\n // Create render states for shadow casters\n this._primitiveRenderState = undefined;\n this._terrainRenderState = undefined;\n this._pointRenderState = undefined;\n createRenderStates(this);\n\n // For clearing the shadow map texture every frame\n this._clearCommand = new ClearCommand({\n depth: 1.0,\n color: new Color(),\n });\n\n this._clearPassState = new PassState(context);\n\n this._size = defaultValue(options.size, 2048);\n this.size = this._size;\n}\n\n/**\n * Global maximum shadow distance used to prevent far off receivers from extending\n * the shadow far plane. This helps set a tighter near/far when viewing objects from space.\n *\n * @private\n */\nShadowMap.MAXIMUM_DISTANCE = 20000.0;\n\nfunction ShadowPass(context) {\n this.camera = new ShadowMapCamera();\n this.passState = new PassState(context);\n this.framebuffer = undefined;\n this.textureOffsets = undefined;\n this.commandList = [];\n this.cullingVolume = undefined;\n}\n\nfunction createRenderState(colorMask, bias) {\n return RenderState.fromCache({\n cull: {\n enabled: true,\n face: CullFace.BACK,\n },\n depthTest: {\n enabled: true,\n },\n colorMask: {\n red: colorMask,\n green: colorMask,\n blue: colorMask,\n alpha: colorMask,\n },\n depthMask: true,\n polygonOffset: {\n enabled: bias.polygonOffset,\n factor: bias.polygonOffsetFactor,\n units: bias.polygonOffsetUnits,\n },\n });\n}\n\nfunction createRenderStates(shadowMap) {\n // Enable the color mask if the shadow map is backed by a color texture, e.g. when depth textures aren't supported\n var colorMask = !shadowMap._usesDepthTexture;\n shadowMap._primitiveRenderState = createRenderState(\n colorMask,\n shadowMap._primitiveBias\n );\n shadowMap._terrainRenderState = createRenderState(\n colorMask,\n shadowMap._terrainBias\n );\n shadowMap._pointRenderState = createRenderState(\n colorMask,\n shadowMap._pointBias\n );\n}\n\n/**\n * @private\n */\nShadowMap.prototype.debugCreateRenderStates = function () {\n createRenderStates(this);\n};\n\nObject.defineProperties(ShadowMap.prototype, {\n /**\n * Determines if the shadow map will be shown.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @default true\n */\n enabled: {\n get: function () {\n return this._enabled;\n },\n set: function (value) {\n this.dirty = this._enabled !== value;\n this._enabled = value;\n },\n },\n\n /**\n * Determines if a normal bias will be applied to shadows.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @default true\n */\n normalOffset: {\n get: function () {\n return this._normalOffset;\n },\n set: function (value) {\n this.dirty = this._normalOffset !== value;\n this._normalOffset = value;\n this._terrainBias.normalOffset = value;\n this._primitiveBias.normalOffset = value;\n this._pointBias.normalOffset = value;\n },\n },\n\n /**\n * Determines if soft shadows are enabled. Uses pcf filtering which requires more texture reads and may hurt performance.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @default false\n */\n softShadows: {\n get: function () {\n return this._softShadows;\n },\n set: function (value) {\n this.dirty = this._softShadows !== value;\n this._softShadows = value;\n },\n },\n\n /**\n * The width and height, in pixels, of each shadow map.\n *\n * @memberof ShadowMap.prototype\n * @type {Number}\n * @default 2048\n */\n size: {\n get: function () {\n return this._size;\n },\n set: function (value) {\n resize(this, value);\n },\n },\n\n /**\n * Whether the shadow map is out of view of the scene camera.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @readonly\n * @private\n */\n outOfView: {\n get: function () {\n return this._outOfView;\n },\n },\n\n /**\n * The culling volume of the shadow frustum.\n *\n * @memberof ShadowMap.prototype\n * @type {CullingVolume}\n * @readonly\n * @private\n */\n shadowMapCullingVolume: {\n get: function () {\n return this._shadowMapCullingVolume;\n },\n },\n\n /**\n * The passes used for rendering shadows. Each face of a point light or each cascade for a cascaded shadow map is a separate pass.\n *\n * @memberof ShadowMap.prototype\n * @type {ShadowPass[]}\n * @readonly\n * @private\n */\n passes: {\n get: function () {\n return this._passes;\n },\n },\n\n /**\n * Whether the light source is a point light.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @readonly\n * @private\n */\n isPointLight: {\n get: function () {\n return this._isPointLight;\n },\n },\n\n /**\n * Debug option for visualizing the cascades by color.\n *\n * @memberof ShadowMap.prototype\n * @type {Boolean}\n * @default false\n * @private\n */\n debugCascadeColors: {\n get: function () {\n return this._debugCascadeColors;\n },\n set: function (value) {\n this.dirty = this._debugCascadeColors !== value;\n this._debugCascadeColors = value;\n },\n },\n});\n\nfunction destroyFramebuffer(shadowMap) {\n var length = shadowMap._passes.length;\n for (var i = 0; i < length; ++i) {\n var pass = shadowMap._passes[i];\n var framebuffer = pass.framebuffer;\n if (defined(framebuffer) && !framebuffer.isDestroyed()) {\n framebuffer.destroy();\n }\n pass.framebuffer = undefined;\n }\n\n // Destroy the framebuffer attachments\n shadowMap._depthAttachment =\n shadowMap._depthAttachment && shadowMap._depthAttachment.destroy();\n shadowMap._colorAttachment =\n shadowMap._colorAttachment && shadowMap._colorAttachment.destroy();\n}\n\nfunction createFramebufferColor(shadowMap, context) {\n var depthRenderbuffer = new Renderbuffer({\n context: context,\n width: shadowMap._textureSize.x,\n height: shadowMap._textureSize.y,\n format: RenderbufferFormat.DEPTH_COMPONENT16,\n });\n\n var colorTexture = new Texture({\n context: context,\n width: shadowMap._textureSize.x,\n height: shadowMap._textureSize.y,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n var framebuffer = new Framebuffer({\n context: context,\n depthRenderbuffer: depthRenderbuffer,\n colorTextures: [colorTexture],\n destroyAttachments: false,\n });\n\n var length = shadowMap._passes.length;\n for (var i = 0; i < length; ++i) {\n var pass = shadowMap._passes[i];\n pass.framebuffer = framebuffer;\n pass.passState.framebuffer = framebuffer;\n }\n\n shadowMap._shadowMapTexture = colorTexture;\n shadowMap._depthAttachment = depthRenderbuffer;\n shadowMap._colorAttachment = colorTexture;\n}\n\nfunction createFramebufferDepth(shadowMap, context) {\n var depthStencilTexture = new Texture({\n context: context,\n width: shadowMap._textureSize.x,\n height: shadowMap._textureSize.y,\n pixelFormat: PixelFormat.DEPTH_STENCIL,\n pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n sampler: Sampler.NEAREST,\n });\n\n var framebuffer = new Framebuffer({\n context: context,\n depthStencilTexture: depthStencilTexture,\n destroyAttachments: false,\n });\n\n var length = shadowMap._passes.length;\n for (var i = 0; i < length; ++i) {\n var pass = shadowMap._passes[i];\n pass.framebuffer = framebuffer;\n pass.passState.framebuffer = framebuffer;\n }\n\n shadowMap._shadowMapTexture = depthStencilTexture;\n shadowMap._depthAttachment = depthStencilTexture;\n}\n\nfunction createFramebufferCube(shadowMap, context) {\n var depthRenderbuffer = new Renderbuffer({\n context: context,\n width: shadowMap._textureSize.x,\n height: shadowMap._textureSize.y,\n format: RenderbufferFormat.DEPTH_COMPONENT16,\n });\n\n var cubeMap = new CubeMap({\n context: context,\n width: shadowMap._textureSize.x,\n height: shadowMap._textureSize.y,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n sampler: Sampler.NEAREST,\n });\n\n var faces = [\n cubeMap.negativeX,\n cubeMap.negativeY,\n cubeMap.negativeZ,\n cubeMap.positiveX,\n cubeMap.positiveY,\n cubeMap.positiveZ,\n ];\n\n for (var i = 0; i < 6; ++i) {\n var framebuffer = new Framebuffer({\n context: context,\n depthRenderbuffer: depthRenderbuffer,\n colorTextures: [faces[i]],\n destroyAttachments: false,\n });\n var pass = shadowMap._passes[i];\n pass.framebuffer = framebuffer;\n pass.passState.framebuffer = framebuffer;\n }\n\n shadowMap._shadowMapTexture = cubeMap;\n shadowMap._depthAttachment = depthRenderbuffer;\n shadowMap._colorAttachment = cubeMap;\n}\n\nfunction createFramebuffer(shadowMap, context) {\n if (shadowMap._isPointLight) {\n createFramebufferCube(shadowMap, context);\n } else if (shadowMap._usesDepthTexture) {\n createFramebufferDepth(shadowMap, context);\n } else {\n createFramebufferColor(shadowMap, context);\n }\n}\n\nfunction checkFramebuffer(shadowMap, context) {\n // Attempt to make an FBO with only a depth texture. If it fails, fallback to a color texture.\n if (\n shadowMap._usesDepthTexture &&\n shadowMap._passes[0].framebuffer.status !==\n WebGLConstants.FRAMEBUFFER_COMPLETE\n ) {\n shadowMap._usesDepthTexture = false;\n createRenderStates(shadowMap);\n destroyFramebuffer(shadowMap);\n createFramebuffer(shadowMap, context);\n }\n}\n\nfunction updateFramebuffer(shadowMap, context) {\n if (\n !defined(shadowMap._passes[0].framebuffer) ||\n shadowMap._shadowMapTexture.width !== shadowMap._textureSize.x\n ) {\n destroyFramebuffer(shadowMap);\n createFramebuffer(shadowMap, context);\n checkFramebuffer(shadowMap, context);\n clearFramebuffer(shadowMap, context);\n }\n}\n\nfunction clearFramebuffer(shadowMap, context, shadowPass) {\n shadowPass = defaultValue(shadowPass, 0);\n if (shadowMap._isPointLight || shadowPass === 0) {\n shadowMap._clearCommand.framebuffer =\n shadowMap._passes[shadowPass].framebuffer;\n shadowMap._clearCommand.execute(context, shadowMap._clearPassState);\n }\n}\n\nfunction resize(shadowMap, size) {\n shadowMap._size = size;\n var passes = shadowMap._passes;\n var numberOfPasses = passes.length;\n var textureSize = shadowMap._textureSize;\n\n if (shadowMap._isPointLight) {\n size =\n ContextLimits.maximumCubeMapSize >= size\n ? size\n : ContextLimits.maximumCubeMapSize;\n textureSize.x = size;\n textureSize.y = size;\n var faceViewport = new BoundingRectangle(0, 0, size, size);\n passes[0].passState.viewport = faceViewport;\n passes[1].passState.viewport = faceViewport;\n passes[2].passState.viewport = faceViewport;\n passes[3].passState.viewport = faceViewport;\n passes[4].passState.viewport = faceViewport;\n passes[5].passState.viewport = faceViewport;\n } else if (numberOfPasses === 1) {\n // +----+\n // | 1 |\n // +----+\n size =\n ContextLimits.maximumTextureSize >= size\n ? size\n : ContextLimits.maximumTextureSize;\n textureSize.x = size;\n textureSize.y = size;\n passes[0].passState.viewport = new BoundingRectangle(0, 0, size, size);\n } else if (numberOfPasses === 4) {\n // +----+----+\n // | 3 | 4 |\n // +----+----+\n // | 1 | 2 |\n // +----+----+\n size =\n ContextLimits.maximumTextureSize >= size * 2\n ? size\n : ContextLimits.maximumTextureSize / 2;\n textureSize.x = size * 2;\n textureSize.y = size * 2;\n passes[0].passState.viewport = new BoundingRectangle(0, 0, size, size);\n passes[1].passState.viewport = new BoundingRectangle(size, 0, size, size);\n passes[2].passState.viewport = new BoundingRectangle(0, size, size, size);\n passes[3].passState.viewport = new BoundingRectangle(\n size,\n size,\n size,\n size\n );\n }\n\n // Update clear pass state\n shadowMap._clearPassState.viewport = new BoundingRectangle(\n 0,\n 0,\n textureSize.x,\n textureSize.y\n );\n\n // Transforms shadow coordinates [0, 1] into the pass's region of the texture\n for (var i = 0; i < numberOfPasses; ++i) {\n var pass = passes[i];\n var viewport = pass.passState.viewport;\n var biasX = viewport.x / textureSize.x;\n var biasY = viewport.y / textureSize.y;\n var scaleX = viewport.width / textureSize.x;\n var scaleY = viewport.height / textureSize.y;\n pass.textureOffsets = new Matrix4(\n scaleX,\n 0.0,\n 0.0,\n biasX,\n 0.0,\n scaleY,\n 0.0,\n biasY,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n );\n }\n}\n\nvar scratchViewport = new BoundingRectangle();\n\nfunction createDebugShadowViewCommand(shadowMap, context) {\n var fs;\n if (shadowMap._isPointLight) {\n fs =\n \"uniform samplerCube shadowMap_textureCube; \\n\" +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n \" vec2 uv = v_textureCoordinates; \\n\" +\n \" vec3 dir; \\n\" +\n \" \\n\" +\n \" if (uv.y < 0.5) \\n\" +\n \" { \\n\" +\n \" if (uv.x < 0.333) \\n\" +\n \" { \\n\" +\n \" dir.x = -1.0; \\n\" +\n \" dir.y = uv.x * 6.0 - 1.0; \\n\" +\n \" dir.z = uv.y * 4.0 - 1.0; \\n\" +\n \" } \\n\" +\n \" else if (uv.x < 0.666) \\n\" +\n \" { \\n\" +\n \" dir.y = -1.0; \\n\" +\n \" dir.x = uv.x * 6.0 - 3.0; \\n\" +\n \" dir.z = uv.y * 4.0 - 1.0; \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" dir.z = -1.0; \\n\" +\n \" dir.x = uv.x * 6.0 - 5.0; \\n\" +\n \" dir.y = uv.y * 4.0 - 1.0; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" if (uv.x < 0.333) \\n\" +\n \" { \\n\" +\n \" dir.x = 1.0; \\n\" +\n \" dir.y = uv.x * 6.0 - 1.0; \\n\" +\n \" dir.z = uv.y * 4.0 - 3.0; \\n\" +\n \" } \\n\" +\n \" else if (uv.x < 0.666) \\n\" +\n \" { \\n\" +\n \" dir.y = 1.0; \\n\" +\n \" dir.x = uv.x * 6.0 - 3.0; \\n\" +\n \" dir.z = uv.y * 4.0 - 3.0; \\n\" +\n \" } \\n\" +\n \" else \\n\" +\n \" { \\n\" +\n \" dir.z = 1.0; \\n\" +\n \" dir.x = uv.x * 6.0 - 5.0; \\n\" +\n \" dir.y = uv.y * 4.0 - 3.0; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" \\n\" +\n \" float shadow = czm_unpackDepth(textureCube(shadowMap_textureCube, dir)); \\n\" +\n \" gl_FragColor = vec4(vec3(shadow), 1.0); \\n\" +\n \"} \\n\";\n } else {\n fs =\n \"uniform sampler2D shadowMap_texture; \\n\" +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"void main() \\n\" +\n \"{ \\n\" +\n (shadowMap._usesDepthTexture\n ? \" float shadow = texture2D(shadowMap_texture, v_textureCoordinates).r; \\n\"\n : \" float shadow = czm_unpackDepth(texture2D(shadowMap_texture, v_textureCoordinates)); \\n\") +\n \" gl_FragColor = vec4(vec3(shadow), 1.0); \\n\" +\n \"} \\n\";\n }\n\n var drawCommand = context.createViewportQuadCommand(fs, {\n uniformMap: {\n shadowMap_texture: function () {\n return shadowMap._shadowMapTexture;\n },\n shadowMap_textureCube: function () {\n return shadowMap._shadowMapTexture;\n },\n },\n });\n drawCommand.pass = Pass.OVERLAY;\n return drawCommand;\n}\n\nfunction updateDebugShadowViewCommand(shadowMap, frameState) {\n // Draws the shadow map on the bottom-right corner of the screen\n var context = frameState.context;\n var screenWidth = frameState.context.drawingBufferWidth;\n var screenHeight = frameState.context.drawingBufferHeight;\n var size = Math.min(screenWidth, screenHeight) * 0.3;\n\n var viewport = scratchViewport;\n viewport.x = screenWidth - size;\n viewport.y = 0;\n viewport.width = size;\n viewport.height = size;\n\n var debugCommand = shadowMap._debugShadowViewCommand;\n if (!defined(debugCommand)) {\n debugCommand = createDebugShadowViewCommand(shadowMap, context);\n shadowMap._debugShadowViewCommand = debugCommand;\n }\n\n // Get a new RenderState for the updated viewport size\n if (\n !defined(debugCommand.renderState) ||\n !BoundingRectangle.equals(debugCommand.renderState.viewport, viewport)\n ) {\n debugCommand.renderState = RenderState.fromCache({\n viewport: BoundingRectangle.clone(viewport),\n });\n }\n\n frameState.commandList.push(shadowMap._debugShadowViewCommand);\n}\n\nvar frustumCornersNDC = new Array(8);\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, -1.0, 1.0);\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, -1.0, 1.0);\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, -1.0, 1.0);\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, -1.0, 1.0);\nfrustumCornersNDC[4] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[5] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[6] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\nfrustumCornersNDC[7] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\n\nvar scratchMatrix = new Matrix4();\nvar scratchFrustumCorners = new Array(8);\nfor (var i = 0; i < 8; ++i) {\n scratchFrustumCorners[i] = new Cartesian4();\n}\n\nfunction createDebugPointLight(modelMatrix, color) {\n var box = new GeometryInstance({\n geometry: new BoxOutlineGeometry({\n minimum: new Cartesian3(-0.5, -0.5, -0.5),\n maximum: new Cartesian3(0.5, 0.5, 0.5),\n }),\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(color),\n },\n });\n\n var sphere = new GeometryInstance({\n geometry: new SphereOutlineGeometry({\n radius: 0.5,\n }),\n attributes: {\n color: ColorGeometryInstanceAttribute.fromColor(color),\n },\n });\n\n return new Primitive({\n geometryInstances: [box, sphere],\n appearance: new PerInstanceColorAppearance({\n translucent: false,\n flat: true,\n }),\n asynchronous: false,\n modelMatrix: modelMatrix,\n });\n}\n\nvar debugOutlineColors = [Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA];\nvar scratchScale = new Cartesian3();\n\nfunction applyDebugSettings(shadowMap, frameState) {\n updateDebugShadowViewCommand(shadowMap, frameState);\n\n var enterFreezeFrame =\n shadowMap.debugFreezeFrame && !shadowMap._debugFreezeFrame;\n shadowMap._debugFreezeFrame = shadowMap.debugFreezeFrame;\n\n // Draw scene camera in freeze frame mode\n if (shadowMap.debugFreezeFrame) {\n if (enterFreezeFrame) {\n // Recreate debug camera when entering freeze frame mode\n shadowMap._debugCameraFrustum =\n shadowMap._debugCameraFrustum &&\n shadowMap._debugCameraFrustum.destroy();\n shadowMap._debugCameraFrustum = new DebugCameraPrimitive({\n camera: shadowMap._sceneCamera,\n color: Color.CYAN,\n updateOnChange: false,\n });\n }\n shadowMap._debugCameraFrustum.update(frameState);\n }\n\n if (shadowMap._cascadesEnabled) {\n // Draw cascades only in freeze frame mode\n if (shadowMap.debugFreezeFrame) {\n if (enterFreezeFrame) {\n // Recreate debug frustum when entering freeze frame mode\n shadowMap._debugLightFrustum =\n shadowMap._debugLightFrustum &&\n shadowMap._debugLightFrustum.destroy();\n shadowMap._debugLightFrustum = new DebugCameraPrimitive({\n camera: shadowMap._shadowMapCamera,\n color: Color.YELLOW,\n updateOnChange: false,\n });\n }\n shadowMap._debugLightFrustum.update(frameState);\n\n for (var i = 0; i < shadowMap._numberOfCascades; ++i) {\n if (enterFreezeFrame) {\n // Recreate debug frustum when entering freeze frame mode\n shadowMap._debugCascadeFrustums[i] =\n shadowMap._debugCascadeFrustums[i] &&\n shadowMap._debugCascadeFrustums[i].destroy();\n shadowMap._debugCascadeFrustums[i] = new DebugCameraPrimitive({\n camera: shadowMap._passes[i].camera,\n color: debugOutlineColors[i],\n updateOnChange: false,\n });\n }\n shadowMap._debugCascadeFrustums[i].update(frameState);\n }\n }\n } else if (shadowMap._isPointLight) {\n if (!defined(shadowMap._debugLightFrustum) || shadowMap._needsUpdate) {\n var translation = shadowMap._shadowMapCamera.positionWC;\n var rotation = Quaternion.IDENTITY;\n var uniformScale = shadowMap._pointLightRadius * 2.0;\n var scale = Cartesian3.fromElements(\n uniformScale,\n uniformScale,\n uniformScale,\n scratchScale\n );\n var modelMatrix = Matrix4.fromTranslationQuaternionRotationScale(\n translation,\n rotation,\n scale,\n scratchMatrix\n );\n\n shadowMap._debugLightFrustum =\n shadowMap._debugLightFrustum && shadowMap._debugLightFrustum.destroy();\n shadowMap._debugLightFrustum = createDebugPointLight(\n modelMatrix,\n Color.YELLOW\n );\n }\n shadowMap._debugLightFrustum.update(frameState);\n } else {\n if (!defined(shadowMap._debugLightFrustum) || shadowMap._needsUpdate) {\n shadowMap._debugLightFrustum = new DebugCameraPrimitive({\n camera: shadowMap._shadowMapCamera,\n color: Color.YELLOW,\n updateOnChange: false,\n });\n }\n shadowMap._debugLightFrustum.update(frameState);\n }\n}\n\nfunction ShadowMapCamera() {\n this.viewMatrix = new Matrix4();\n this.inverseViewMatrix = new Matrix4();\n this.frustum = undefined;\n this.positionCartographic = new Cartographic();\n this.positionWC = new Cartesian3();\n this.directionWC = Cartesian3.clone(Cartesian3.UNIT_Z);\n this.upWC = Cartesian3.clone(Cartesian3.UNIT_Y);\n this.rightWC = Cartesian3.clone(Cartesian3.UNIT_X);\n this.viewProjectionMatrix = new Matrix4();\n}\n\nShadowMapCamera.prototype.clone = function (camera) {\n Matrix4.clone(camera.viewMatrix, this.viewMatrix);\n Matrix4.clone(camera.inverseViewMatrix, this.inverseViewMatrix);\n this.frustum = camera.frustum.clone(this.frustum);\n Cartographic.clone(camera.positionCartographic, this.positionCartographic);\n Cartesian3.clone(camera.positionWC, this.positionWC);\n Cartesian3.clone(camera.directionWC, this.directionWC);\n Cartesian3.clone(camera.upWC, this.upWC);\n Cartesian3.clone(camera.rightWC, this.rightWC);\n};\n\n// Converts from NDC space to texture space\nvar scaleBiasMatrix = new Matrix4(\n 0.5,\n 0.0,\n 0.0,\n 0.5,\n 0.0,\n 0.5,\n 0.0,\n 0.5,\n 0.0,\n 0.0,\n 0.5,\n 0.5,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n);\n\nShadowMapCamera.prototype.getViewProjection = function () {\n var view = this.viewMatrix;\n var projection = this.frustum.projectionMatrix;\n Matrix4.multiply(projection, view, this.viewProjectionMatrix);\n Matrix4.multiply(\n scaleBiasMatrix,\n this.viewProjectionMatrix,\n this.viewProjectionMatrix\n );\n return this.viewProjectionMatrix;\n};\n\nvar scratchSplits = new Array(5);\nvar scratchFrustum = new PerspectiveFrustum();\nvar scratchCascadeDistances = new Array(4);\nvar scratchMin = new Cartesian3();\nvar scratchMax = new Cartesian3();\n\nfunction computeCascades(shadowMap, frameState) {\n var shadowMapCamera = shadowMap._shadowMapCamera;\n var sceneCamera = shadowMap._sceneCamera;\n var cameraNear = sceneCamera.frustum.near;\n var cameraFar = sceneCamera.frustum.far;\n var numberOfCascades = shadowMap._numberOfCascades;\n\n // Split cascades. Use a mix of linear and log splits.\n var i;\n var range = cameraFar - cameraNear;\n var ratio = cameraFar / cameraNear;\n\n var lambda = 0.9;\n var clampCascadeDistances = false;\n\n // When the camera is close to a relatively small model, provide more detail in the closer cascades.\n // If the camera is near or inside a large model, such as the root tile of a city, then use the default values.\n // To get the most accurate cascade splits we would need to find the min and max values from the depth texture.\n if (frameState.shadowState.closestObjectSize < 200.0) {\n clampCascadeDistances = true;\n lambda = 0.9;\n }\n\n var cascadeDistances = scratchCascadeDistances;\n var splits = scratchSplits;\n splits[0] = cameraNear;\n splits[numberOfCascades] = cameraFar;\n\n // Find initial splits\n for (i = 0; i < numberOfCascades; ++i) {\n var p = (i + 1) / numberOfCascades;\n var logScale = cameraNear * Math.pow(ratio, p);\n var uniformScale = cameraNear + range * p;\n var split = CesiumMath.lerp(uniformScale, logScale, lambda);\n splits[i + 1] = split;\n cascadeDistances[i] = split - splits[i];\n }\n\n if (clampCascadeDistances) {\n // Clamp each cascade to its maximum distance\n for (i = 0; i < numberOfCascades; ++i) {\n cascadeDistances[i] = Math.min(\n cascadeDistances[i],\n shadowMap._maximumCascadeDistances[i]\n );\n }\n\n // Recompute splits\n var distance = splits[0];\n for (i = 0; i < numberOfCascades - 1; ++i) {\n distance += cascadeDistances[i];\n splits[i + 1] = distance;\n }\n }\n\n Cartesian4.unpack(splits, 0, shadowMap._cascadeSplits[0]);\n Cartesian4.unpack(splits, 1, shadowMap._cascadeSplits[1]);\n Cartesian4.unpack(cascadeDistances, 0, shadowMap._cascadeDistances);\n\n var shadowFrustum = shadowMapCamera.frustum;\n var left = shadowFrustum.left;\n var right = shadowFrustum.right;\n var bottom = shadowFrustum.bottom;\n var top = shadowFrustum.top;\n var near = shadowFrustum.near;\n var far = shadowFrustum.far;\n\n var position = shadowMapCamera.positionWC;\n var direction = shadowMapCamera.directionWC;\n var up = shadowMapCamera.upWC;\n\n var cascadeSubFrustum = sceneCamera.frustum.clone(scratchFrustum);\n var shadowViewProjection = shadowMapCamera.getViewProjection();\n\n for (i = 0; i < numberOfCascades; ++i) {\n // Find the bounding box of the camera sub-frustum in shadow map texture space\n cascadeSubFrustum.near = splits[i];\n cascadeSubFrustum.far = splits[i + 1];\n var viewProjection = Matrix4.multiply(\n cascadeSubFrustum.projectionMatrix,\n sceneCamera.viewMatrix,\n scratchMatrix\n );\n var inverseViewProjection = Matrix4.inverse(viewProjection, scratchMatrix);\n var shadowMapMatrix = Matrix4.multiply(\n shadowViewProjection,\n inverseViewProjection,\n scratchMatrix\n );\n\n // Project each corner from camera NDC space to shadow map texture space. Min and max will be from 0 to 1.\n var min = Cartesian3.fromElements(\n Number.MAX_VALUE,\n Number.MAX_VALUE,\n Number.MAX_VALUE,\n scratchMin\n );\n var max = Cartesian3.fromElements(\n -Number.MAX_VALUE,\n -Number.MAX_VALUE,\n -Number.MAX_VALUE,\n scratchMax\n );\n\n for (var k = 0; k < 8; ++k) {\n var corner = Cartesian4.clone(\n frustumCornersNDC[k],\n scratchFrustumCorners[k]\n );\n Matrix4.multiplyByVector(shadowMapMatrix, corner, corner);\n Cartesian3.divideByScalar(corner, corner.w, corner); // Handle the perspective divide\n Cartesian3.minimumByComponent(corner, min, min);\n Cartesian3.maximumByComponent(corner, max, max);\n }\n\n // Limit light-space coordinates to the [0, 1] range\n min.x = Math.max(min.x, 0.0);\n min.y = Math.max(min.y, 0.0);\n min.z = 0.0; // Always start cascade frustum at the top of the light frustum to capture objects in the light's path\n max.x = Math.min(max.x, 1.0);\n max.y = Math.min(max.y, 1.0);\n max.z = Math.min(max.z, 1.0);\n\n var pass = shadowMap._passes[i];\n var cascadeCamera = pass.camera;\n cascadeCamera.clone(shadowMapCamera); // PERFORMANCE_IDEA : could do a shallow clone for all properties except the frustum\n\n var frustum = cascadeCamera.frustum;\n frustum.left = left + min.x * (right - left);\n frustum.right = left + max.x * (right - left);\n frustum.bottom = bottom + min.y * (top - bottom);\n frustum.top = bottom + max.y * (top - bottom);\n frustum.near = near + min.z * (far - near);\n frustum.far = near + max.z * (far - near);\n\n pass.cullingVolume = cascadeCamera.frustum.computeCullingVolume(\n position,\n direction,\n up\n );\n\n // Transforms from eye space to the cascade's texture space\n var cascadeMatrix = shadowMap._cascadeMatrices[i];\n Matrix4.multiply(\n cascadeCamera.getViewProjection(),\n sceneCamera.inverseViewMatrix,\n cascadeMatrix\n );\n Matrix4.multiply(pass.textureOffsets, cascadeMatrix, cascadeMatrix);\n }\n}\n\nvar scratchLightView = new Matrix4();\nvar scratchRight = new Cartesian3();\nvar scratchUp = new Cartesian3();\nvar scratchTranslation = new Cartesian3();\n\nfunction fitShadowMapToScene(shadowMap, frameState) {\n var shadowMapCamera = shadowMap._shadowMapCamera;\n var sceneCamera = shadowMap._sceneCamera;\n\n // 1. First find a tight bounding box in light space that contains the entire camera frustum.\n var viewProjection = Matrix4.multiply(\n sceneCamera.frustum.projectionMatrix,\n sceneCamera.viewMatrix,\n scratchMatrix\n );\n var inverseViewProjection = Matrix4.inverse(viewProjection, scratchMatrix);\n\n // Start to construct the light view matrix. Set translation later once the bounding box is found.\n var lightDir = shadowMapCamera.directionWC;\n var lightUp = sceneCamera.directionWC; // Align shadows to the camera view.\n if (Cartesian3.equalsEpsilon(lightDir, lightUp, CesiumMath.EPSILON10)) {\n lightUp = sceneCamera.upWC;\n }\n var lightRight = Cartesian3.cross(lightDir, lightUp, scratchRight);\n lightUp = Cartesian3.cross(lightRight, lightDir, scratchUp); // Recalculate up now that right is derived\n Cartesian3.normalize(lightUp, lightUp);\n Cartesian3.normalize(lightRight, lightRight);\n var lightPosition = Cartesian3.fromElements(\n 0.0,\n 0.0,\n 0.0,\n scratchTranslation\n );\n\n var lightView = Matrix4.computeView(\n lightPosition,\n lightDir,\n lightUp,\n lightRight,\n scratchLightView\n );\n var cameraToLight = Matrix4.multiply(\n lightView,\n inverseViewProjection,\n scratchMatrix\n );\n\n // Project each corner from NDC space to light view space, and calculate a min and max in light view space\n var min = Cartesian3.fromElements(\n Number.MAX_VALUE,\n Number.MAX_VALUE,\n Number.MAX_VALUE,\n scratchMin\n );\n var max = Cartesian3.fromElements(\n -Number.MAX_VALUE,\n -Number.MAX_VALUE,\n -Number.MAX_VALUE,\n scratchMax\n );\n\n for (var i = 0; i < 8; ++i) {\n var corner = Cartesian4.clone(\n frustumCornersNDC[i],\n scratchFrustumCorners[i]\n );\n Matrix4.multiplyByVector(cameraToLight, corner, corner);\n Cartesian3.divideByScalar(corner, corner.w, corner); // Handle the perspective divide\n Cartesian3.minimumByComponent(corner, min, min);\n Cartesian3.maximumByComponent(corner, max, max);\n }\n\n // 2. Set bounding box back to include objects in the light's view\n max.z += 1000.0; // Note: in light space, a positive number is behind the camera\n min.z -= 10.0; // Extend the shadow volume forward slightly to avoid problems right at the edge\n\n // 3. Adjust light view matrix so that it is centered on the bounding volume\n var translation = scratchTranslation;\n translation.x = -(0.5 * (min.x + max.x));\n translation.y = -(0.5 * (min.y + max.y));\n translation.z = -max.z;\n\n var translationMatrix = Matrix4.fromTranslation(translation, scratchMatrix);\n lightView = Matrix4.multiply(translationMatrix, lightView, lightView);\n\n // 4. Create an orthographic frustum that covers the bounding box extents\n var halfWidth = 0.5 * (max.x - min.x);\n var halfHeight = 0.5 * (max.y - min.y);\n var depth = max.z - min.z;\n\n var frustum = shadowMapCamera.frustum;\n frustum.left = -halfWidth;\n frustum.right = halfWidth;\n frustum.bottom = -halfHeight;\n frustum.top = halfHeight;\n frustum.near = 0.01;\n frustum.far = depth;\n\n // 5. Update the shadow map camera\n Matrix4.clone(lightView, shadowMapCamera.viewMatrix);\n Matrix4.inverse(lightView, shadowMapCamera.inverseViewMatrix);\n Matrix4.getTranslation(\n shadowMapCamera.inverseViewMatrix,\n shadowMapCamera.positionWC\n );\n frameState.mapProjection.ellipsoid.cartesianToCartographic(\n shadowMapCamera.positionWC,\n shadowMapCamera.positionCartographic\n );\n Cartesian3.clone(lightDir, shadowMapCamera.directionWC);\n Cartesian3.clone(lightUp, shadowMapCamera.upWC);\n Cartesian3.clone(lightRight, shadowMapCamera.rightWC);\n}\n\nvar directions = [\n new Cartesian3(-1.0, 0.0, 0.0),\n new Cartesian3(0.0, -1.0, 0.0),\n new Cartesian3(0.0, 0.0, -1.0),\n new Cartesian3(1.0, 0.0, 0.0),\n new Cartesian3(0.0, 1.0, 0.0),\n new Cartesian3(0.0, 0.0, 1.0),\n];\n\nvar ups = [\n new Cartesian3(0.0, -1.0, 0.0),\n new Cartesian3(0.0, 0.0, -1.0),\n new Cartesian3(0.0, -1.0, 0.0),\n new Cartesian3(0.0, -1.0, 0.0),\n new Cartesian3(0.0, 0.0, 1.0),\n new Cartesian3(0.0, -1.0, 0.0),\n];\n\nvar rights = [\n new Cartesian3(0.0, 0.0, 1.0),\n new Cartesian3(1.0, 0.0, 0.0),\n new Cartesian3(-1.0, 0.0, 0.0),\n new Cartesian3(0.0, 0.0, -1.0),\n new Cartesian3(1.0, 0.0, 0.0),\n new Cartesian3(1.0, 0.0, 0.0),\n];\n\nfunction computeOmnidirectional(shadowMap, frameState) {\n // All sides share the same frustum\n var frustum = new PerspectiveFrustum();\n frustum.fov = CesiumMath.PI_OVER_TWO;\n frustum.near = 1.0;\n frustum.far = shadowMap._pointLightRadius;\n frustum.aspectRatio = 1.0;\n\n for (var i = 0; i < 6; ++i) {\n var camera = shadowMap._passes[i].camera;\n camera.positionWC = shadowMap._shadowMapCamera.positionWC;\n camera.positionCartographic = frameState.mapProjection.ellipsoid.cartesianToCartographic(\n camera.positionWC,\n camera.positionCartographic\n );\n camera.directionWC = directions[i];\n camera.upWC = ups[i];\n camera.rightWC = rights[i];\n\n Matrix4.computeView(\n camera.positionWC,\n camera.directionWC,\n camera.upWC,\n camera.rightWC,\n camera.viewMatrix\n );\n Matrix4.inverse(camera.viewMatrix, camera.inverseViewMatrix);\n\n camera.frustum = frustum;\n }\n}\n\nvar scratchCartesian1 = new Cartesian3();\nvar scratchCartesian2 = new Cartesian3();\nvar scratchBoundingSphere = new BoundingSphere();\nvar scratchCenter = scratchBoundingSphere.center;\n\nfunction checkVisibility(shadowMap, frameState) {\n var sceneCamera = shadowMap._sceneCamera;\n var shadowMapCamera = shadowMap._shadowMapCamera;\n\n var boundingSphere = scratchBoundingSphere;\n\n // Check whether the shadow map is in view and needs to be updated\n if (shadowMap._cascadesEnabled) {\n // If the nearest shadow receiver is further than the shadow map's maximum distance then the shadow map is out of view.\n if (sceneCamera.frustum.near >= shadowMap.maximumDistance) {\n shadowMap._outOfView = true;\n shadowMap._needsUpdate = false;\n return;\n }\n\n // If the light source is below the horizon then the shadow map is out of view\n var surfaceNormal = frameState.mapProjection.ellipsoid.geodeticSurfaceNormal(\n sceneCamera.positionWC,\n scratchCartesian1\n );\n var lightDirection = Cartesian3.negate(\n shadowMapCamera.directionWC,\n scratchCartesian2\n );\n var dot = Cartesian3.dot(surfaceNormal, lightDirection);\n\n // Shadows start to fade out once the light gets closer to the horizon.\n // At this point the globe uses vertex lighting alone to darken the surface.\n var darknessAmount = CesiumMath.clamp(dot / 0.1, 0.0, 1.0);\n shadowMap._darkness = CesiumMath.lerp(\n 1.0,\n shadowMap.darkness,\n darknessAmount\n );\n\n if (dot < 0.0) {\n shadowMap._outOfView = true;\n shadowMap._needsUpdate = false;\n return;\n }\n\n // By default cascaded shadows need to update and are always in view\n shadowMap._needsUpdate = true;\n shadowMap._outOfView = false;\n } else if (shadowMap._isPointLight) {\n // Sphere-frustum intersection test\n boundingSphere.center = shadowMapCamera.positionWC;\n boundingSphere.radius = shadowMap._pointLightRadius;\n shadowMap._outOfView =\n frameState.cullingVolume.computeVisibility(boundingSphere) ===\n Intersect.OUTSIDE;\n shadowMap._needsUpdate =\n !shadowMap._outOfView &&\n !shadowMap._boundingSphere.equals(boundingSphere);\n BoundingSphere.clone(boundingSphere, shadowMap._boundingSphere);\n } else {\n // Simplify frustum-frustum intersection test as a sphere-frustum test\n var frustumRadius = shadowMapCamera.frustum.far / 2.0;\n var frustumCenter = Cartesian3.add(\n shadowMapCamera.positionWC,\n Cartesian3.multiplyByScalar(\n shadowMapCamera.directionWC,\n frustumRadius,\n scratchCenter\n ),\n scratchCenter\n );\n boundingSphere.center = frustumCenter;\n boundingSphere.radius = frustumRadius;\n shadowMap._outOfView =\n frameState.cullingVolume.computeVisibility(boundingSphere) ===\n Intersect.OUTSIDE;\n shadowMap._needsUpdate =\n !shadowMap._outOfView &&\n !shadowMap._boundingSphere.equals(boundingSphere);\n BoundingSphere.clone(boundingSphere, shadowMap._boundingSphere);\n }\n}\n\nfunction updateCameras(shadowMap, frameState) {\n var camera = frameState.camera; // The actual camera in the scene\n var lightCamera = shadowMap._lightCamera; // The external camera representing the light source\n var sceneCamera = shadowMap._sceneCamera; // Clone of camera, with clamped near and far planes\n var shadowMapCamera = shadowMap._shadowMapCamera; // Camera representing the shadow volume, initially cloned from lightCamera\n\n // Clone light camera into the shadow map camera\n if (shadowMap._cascadesEnabled) {\n Cartesian3.clone(lightCamera.directionWC, shadowMapCamera.directionWC);\n } else if (shadowMap._isPointLight) {\n Cartesian3.clone(lightCamera.positionWC, shadowMapCamera.positionWC);\n } else {\n shadowMapCamera.clone(lightCamera);\n }\n\n // Get the light direction in eye coordinates\n var lightDirection = shadowMap._lightDirectionEC;\n Matrix4.multiplyByPointAsVector(\n camera.viewMatrix,\n shadowMapCamera.directionWC,\n lightDirection\n );\n Cartesian3.normalize(lightDirection, lightDirection);\n Cartesian3.negate(lightDirection, lightDirection);\n\n // Get the light position in eye coordinates\n Matrix4.multiplyByPoint(\n camera.viewMatrix,\n shadowMapCamera.positionWC,\n shadowMap._lightPositionEC\n );\n shadowMap._lightPositionEC.w = shadowMap._pointLightRadius;\n\n // Get the near and far of the scene camera\n var near;\n var far;\n if (shadowMap._fitNearFar) {\n // shadowFar can be very large, so limit to shadowMap.maximumDistance\n // Push the far plane slightly further than the near plane to avoid degenerate frustum\n near = Math.min(\n frameState.shadowState.nearPlane,\n shadowMap.maximumDistance\n );\n far = Math.min(\n frameState.shadowState.farPlane,\n shadowMap.maximumDistance + 1.0\n );\n } else {\n near = camera.frustum.near;\n far = shadowMap.maximumDistance;\n }\n\n shadowMap._sceneCamera = Camera.clone(camera, sceneCamera);\n camera.frustum.clone(shadowMap._sceneCamera.frustum);\n shadowMap._sceneCamera.frustum.near = near;\n shadowMap._sceneCamera.frustum.far = far;\n shadowMap._distance = far - near;\n\n checkVisibility(shadowMap, frameState);\n\n if (!shadowMap._outOfViewPrevious && shadowMap._outOfView) {\n shadowMap._needsUpdate = true;\n }\n shadowMap._outOfViewPrevious = shadowMap._outOfView;\n}\n\n/**\n * @private\n */\nShadowMap.prototype.update = function (frameState) {\n updateCameras(this, frameState);\n\n if (this._needsUpdate) {\n updateFramebuffer(this, frameState.context);\n\n if (this._isPointLight) {\n computeOmnidirectional(this, frameState);\n }\n\n if (this._cascadesEnabled) {\n fitShadowMapToScene(this, frameState);\n\n if (this._numberOfCascades > 1) {\n computeCascades(this, frameState);\n }\n }\n\n if (!this._isPointLight) {\n // Compute the culling volume\n var shadowMapCamera = this._shadowMapCamera;\n var position = shadowMapCamera.positionWC;\n var direction = shadowMapCamera.directionWC;\n var up = shadowMapCamera.upWC;\n this._shadowMapCullingVolume = shadowMapCamera.frustum.computeCullingVolume(\n position,\n direction,\n up\n );\n\n if (this._passes.length === 1) {\n // Since there is only one pass, use the shadow map camera as the pass camera.\n this._passes[0].camera.clone(shadowMapCamera);\n }\n } else {\n this._shadowMapCullingVolume = CullingVolume.fromBoundingSphere(\n this._boundingSphere\n );\n }\n }\n\n if (this._passes.length === 1) {\n // Transforms from eye space to shadow texture space.\n // Always requires an update since the scene camera constantly changes.\n var inverseView = this._sceneCamera.inverseViewMatrix;\n Matrix4.multiply(\n this._shadowMapCamera.getViewProjection(),\n inverseView,\n this._shadowMapMatrix\n );\n }\n\n if (this.debugShow) {\n applyDebugSettings(this, frameState);\n }\n};\n\n/**\n * @private\n */\nShadowMap.prototype.updatePass = function (context, shadowPass) {\n clearFramebuffer(this, context, shadowPass);\n};\n\nvar scratchTexelStepSize = new Cartesian2();\n\nfunction combineUniforms(shadowMap, uniforms, isTerrain) {\n var bias = shadowMap._isPointLight\n ? shadowMap._pointBias\n : isTerrain\n ? shadowMap._terrainBias\n : shadowMap._primitiveBias;\n\n var mapUniforms = {\n shadowMap_texture: function () {\n return shadowMap._shadowMapTexture;\n },\n shadowMap_textureCube: function () {\n return shadowMap._shadowMapTexture;\n },\n shadowMap_matrix: function () {\n return shadowMap._shadowMapMatrix;\n },\n shadowMap_cascadeSplits: function () {\n return shadowMap._cascadeSplits;\n },\n shadowMap_cascadeMatrices: function () {\n return shadowMap._cascadeMatrices;\n },\n shadowMap_lightDirectionEC: function () {\n return shadowMap._lightDirectionEC;\n },\n shadowMap_lightPositionEC: function () {\n return shadowMap._lightPositionEC;\n },\n shadowMap_cascadeDistances: function () {\n return shadowMap._cascadeDistances;\n },\n shadowMap_texelSizeDepthBiasAndNormalShadingSmooth: function () {\n var texelStepSize = scratchTexelStepSize;\n texelStepSize.x = 1.0 / shadowMap._textureSize.x;\n texelStepSize.y = 1.0 / shadowMap._textureSize.y;\n\n return Cartesian4.fromElements(\n texelStepSize.x,\n texelStepSize.y,\n bias.depthBias,\n bias.normalShadingSmooth,\n this.combinedUniforms1\n );\n },\n shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness: function () {\n return Cartesian4.fromElements(\n bias.normalOffsetScale,\n shadowMap._distance,\n shadowMap.maximumDistance,\n shadowMap._darkness,\n this.combinedUniforms2\n );\n },\n\n combinedUniforms1: new Cartesian4(),\n combinedUniforms2: new Cartesian4(),\n };\n\n return combine(uniforms, mapUniforms, false);\n}\n\nfunction createCastDerivedCommand(\n shadowMap,\n shadowsDirty,\n command,\n context,\n oldShaderId,\n result\n) {\n var castShader;\n var castRenderState;\n var castUniformMap;\n if (defined(result)) {\n castShader = result.shaderProgram;\n castRenderState = result.renderState;\n castUniformMap = result.uniformMap;\n }\n\n result = DrawCommand.shallowClone(command, result);\n result.castShadows = true;\n result.receiveShadows = false;\n\n if (\n !defined(castShader) ||\n oldShaderId !== command.shaderProgram.id ||\n shadowsDirty\n ) {\n var shaderProgram = command.shaderProgram;\n\n var isTerrain = command.pass === Pass.GLOBE;\n var isOpaque = command.pass !== Pass.TRANSLUCENT;\n var isPointLight = shadowMap._isPointLight;\n var usesDepthTexture = shadowMap._usesDepthTexture;\n\n var keyword = ShadowMapShader.getShadowCastShaderKeyword(\n isPointLight,\n isTerrain,\n usesDepthTexture,\n isOpaque\n );\n castShader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n keyword\n );\n if (!defined(castShader)) {\n var vertexShaderSource = shaderProgram.vertexShaderSource;\n var fragmentShaderSource = shaderProgram.fragmentShaderSource;\n\n var castVS = ShadowMapShader.createShadowCastVertexShader(\n vertexShaderSource,\n isPointLight,\n isTerrain\n );\n var castFS = ShadowMapShader.createShadowCastFragmentShader(\n fragmentShaderSource,\n isPointLight,\n usesDepthTexture,\n isOpaque\n );\n\n castShader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n keyword,\n {\n vertexShaderSource: castVS,\n fragmentShaderSource: castFS,\n attributeLocations: shaderProgram._attributeLocations,\n }\n );\n }\n\n castRenderState = shadowMap._primitiveRenderState;\n if (isPointLight) {\n castRenderState = shadowMap._pointRenderState;\n } else if (isTerrain) {\n castRenderState = shadowMap._terrainRenderState;\n }\n\n // Modify the render state for commands that do not use back-face culling, e.g. flat textured walls\n var cullEnabled = command.renderState.cull.enabled;\n if (!cullEnabled) {\n castRenderState = clone(castRenderState, false);\n castRenderState.cull = clone(castRenderState.cull, false);\n castRenderState.cull.enabled = false;\n castRenderState = RenderState.fromCache(castRenderState);\n }\n\n castUniformMap = combineUniforms(shadowMap, command.uniformMap, isTerrain);\n }\n\n result.shaderProgram = castShader;\n result.renderState = castRenderState;\n result.uniformMap = castUniformMap;\n\n return result;\n}\n\nShadowMap.createReceiveDerivedCommand = function (\n lightShadowMaps,\n command,\n shadowsDirty,\n context,\n result\n) {\n if (!defined(result)) {\n result = {};\n }\n\n var lightShadowMapsEnabled = lightShadowMaps.length > 0;\n var shaderProgram = command.shaderProgram;\n var vertexShaderSource = shaderProgram.vertexShaderSource;\n var fragmentShaderSource = shaderProgram.fragmentShaderSource;\n var isTerrain = command.pass === Pass.GLOBE;\n\n var hasTerrainNormal = false;\n if (isTerrain) {\n hasTerrainNormal =\n command.owner.data.renderedMesh.encoding.hasVertexNormals;\n }\n\n if (command.receiveShadows && lightShadowMapsEnabled) {\n // Only generate a receiveCommand if there is a shadow map originating from a light source.\n var receiveShader;\n var receiveUniformMap;\n if (defined(result.receiveCommand)) {\n receiveShader = result.receiveCommand.shaderProgram;\n receiveUniformMap = result.receiveCommand.uniformMap;\n }\n\n result.receiveCommand = DrawCommand.shallowClone(\n command,\n result.receiveCommand\n );\n result.castShadows = false;\n result.receiveShadows = true;\n\n // If castShadows changed, recompile the receive shadows shader. The normal shading technique simulates\n // self-shadowing so it should be turned off if castShadows is false.\n var castShadowsDirty =\n result.receiveShaderCastShadows !== command.castShadows;\n var shaderDirty =\n result.receiveShaderProgramId !== command.shaderProgram.id;\n\n if (\n !defined(receiveShader) ||\n shaderDirty ||\n shadowsDirty ||\n castShadowsDirty\n ) {\n var keyword = ShadowMapShader.getShadowReceiveShaderKeyword(\n lightShadowMaps[0],\n command.castShadows,\n isTerrain,\n hasTerrainNormal\n );\n receiveShader = context.shaderCache.getDerivedShaderProgram(\n shaderProgram,\n keyword\n );\n if (!defined(receiveShader)) {\n var receiveVS = ShadowMapShader.createShadowReceiveVertexShader(\n vertexShaderSource,\n isTerrain,\n hasTerrainNormal\n );\n var receiveFS = ShadowMapShader.createShadowReceiveFragmentShader(\n fragmentShaderSource,\n lightShadowMaps[0],\n command.castShadows,\n isTerrain,\n hasTerrainNormal\n );\n\n receiveShader = context.shaderCache.createDerivedShaderProgram(\n shaderProgram,\n keyword,\n {\n vertexShaderSource: receiveVS,\n fragmentShaderSource: receiveFS,\n attributeLocations: shaderProgram._attributeLocations,\n }\n );\n }\n\n receiveUniformMap = combineUniforms(\n lightShadowMaps[0],\n command.uniformMap,\n isTerrain\n );\n }\n\n result.receiveCommand.shaderProgram = receiveShader;\n result.receiveCommand.uniformMap = receiveUniformMap;\n result.receiveShaderProgramId = command.shaderProgram.id;\n result.receiveShaderCastShadows = command.castShadows;\n }\n\n return result;\n};\n\nShadowMap.createCastDerivedCommand = function (\n shadowMaps,\n command,\n shadowsDirty,\n context,\n result\n) {\n if (!defined(result)) {\n result = {};\n }\n\n if (command.castShadows) {\n var castCommands = result.castCommands;\n if (!defined(castCommands)) {\n castCommands = result.castCommands = [];\n }\n\n var oldShaderId = result.castShaderProgramId;\n\n var shadowMapLength = shadowMaps.length;\n castCommands.length = shadowMapLength;\n\n for (var i = 0; i < shadowMapLength; ++i) {\n castCommands[i] = createCastDerivedCommand(\n shadowMaps[i],\n shadowsDirty,\n command,\n context,\n oldShaderId,\n castCommands[i]\n );\n }\n\n result.castShaderProgramId = command.shaderProgram.id;\n }\n\n return result;\n};\n\n/**\n * @private\n */\nShadowMap.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * @private\n */\nShadowMap.prototype.destroy = function () {\n destroyFramebuffer(this);\n\n this._debugLightFrustum =\n this._debugLightFrustum && this._debugLightFrustum.destroy();\n this._debugCameraFrustum =\n this._debugCameraFrustum && this._debugCameraFrustum.destroy();\n this._debugShadowViewCommand =\n this._debugShadowViewCommand &&\n this._debugShadowViewCommand.shaderProgram &&\n this._debugShadowViewCommand.shaderProgram.destroy();\n\n for (var i = 0; i < this._numberOfCascades; ++i) {\n this._debugCascadeFrustums[i] =\n this._debugCascadeFrustums[i] && this._debugCascadeFrustums[i].destroy();\n }\n\n return destroyObject(this);\n};\nexport default ShadowMap;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defined from \"../Core/defined.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport Interval from \"../Core/Interval.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport Camera from \"./Camera.js\";\nimport FrustumCommands from \"./FrustumCommands.js\";\nimport GlobeDepth from \"./GlobeDepth.js\";\nimport GlobeTranslucencyFramebuffer from \"./GlobeTranslucencyFramebuffer.js\";\nimport OIT from \"./OIT.js\";\nimport PickDepthFramebuffer from \"./PickDepthFramebuffer.js\";\nimport PickFramebuffer from \"./PickFramebuffer.js\";\nimport SceneFramebuffer from \"./SceneFramebuffer.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMap from \"./ShadowMap.js\";\n\nfunction CommandExtent() {\n this.command = undefined;\n this.near = undefined;\n this.far = undefined;\n}\n\n/**\n * @private\n */\nfunction View(scene, camera, viewport) {\n var context = scene.context;\n\n var globeDepth;\n if (context.depthTexture) {\n globeDepth = new GlobeDepth();\n }\n\n var oit;\n if (scene._useOIT && context.depthTexture) {\n oit = new OIT(context);\n }\n\n var passState = new PassState(context);\n passState.viewport = BoundingRectangle.clone(viewport);\n\n this.camera = camera;\n this._cameraClone = Camera.clone(camera);\n this._cameraStartFired = false;\n this._cameraMovedTime = undefined;\n\n this.viewport = viewport;\n this.passState = passState;\n this.pickFramebuffer = new PickFramebuffer(context);\n this.pickDepthFramebuffer = new PickDepthFramebuffer();\n this.sceneFramebuffer = new SceneFramebuffer();\n this.globeDepth = globeDepth;\n this.globeTranslucencyFramebuffer = new GlobeTranslucencyFramebuffer();\n this.oit = oit;\n this.pickDepths = [];\n this.debugGlobeDepths = [];\n this.frustumCommandsList = [];\n this.debugFrustumStatistics = undefined;\n\n // Array of all commands that get rendered into frustums along with their near / far values.\n // Acts similar to a ManagedArray.\n this._commandExtents = [];\n}\n\nvar scratchPosition0 = new Cartesian3();\nvar scratchPosition1 = new Cartesian3();\nfunction maxComponent(a, b) {\n var x = Math.max(Math.abs(a.x), Math.abs(b.x));\n var y = Math.max(Math.abs(a.y), Math.abs(b.y));\n var z = Math.max(Math.abs(a.z), Math.abs(b.z));\n return Math.max(Math.max(x, y), z);\n}\n\nfunction cameraEqual(camera0, camera1, epsilon) {\n var scalar =\n 1 / Math.max(1, maxComponent(camera0.position, camera1.position));\n Cartesian3.multiplyByScalar(camera0.position, scalar, scratchPosition0);\n Cartesian3.multiplyByScalar(camera1.position, scalar, scratchPosition1);\n return (\n Cartesian3.equalsEpsilon(scratchPosition0, scratchPosition1, epsilon) &&\n Cartesian3.equalsEpsilon(camera0.direction, camera1.direction, epsilon) &&\n Cartesian3.equalsEpsilon(camera0.up, camera1.up, epsilon) &&\n Cartesian3.equalsEpsilon(camera0.right, camera1.right, epsilon) &&\n Matrix4.equalsEpsilon(camera0.transform, camera1.transform, epsilon) &&\n camera0.frustum.equalsEpsilon(camera1.frustum, epsilon)\n );\n}\n\nView.prototype.checkForCameraUpdates = function (scene) {\n var camera = this.camera;\n var cameraClone = this._cameraClone;\n if (!cameraEqual(camera, cameraClone, CesiumMath.EPSILON15)) {\n if (!this._cameraStartFired) {\n camera.moveStart.raiseEvent();\n this._cameraStartFired = true;\n }\n this._cameraMovedTime = getTimestamp();\n Camera.clone(camera, cameraClone);\n\n return true;\n }\n\n if (\n this._cameraStartFired &&\n getTimestamp() - this._cameraMovedTime > scene.cameraEventWaitTime\n ) {\n camera.moveEnd.raiseEvent();\n this._cameraStartFired = false;\n }\n\n return false;\n};\n\nfunction updateFrustums(view, scene, near, far) {\n var frameState = scene.frameState;\n var camera = frameState.camera;\n var farToNearRatio = frameState.useLogDepth\n ? scene.logarithmicDepthFarToNearRatio\n : scene.farToNearRatio;\n var is2D = scene.mode === SceneMode.SCENE2D;\n var nearToFarDistance2D = scene.nearToFarDistance2D;\n\n // The computed near plane must be between the user defined near and far planes.\n // The computed far plane must between the user defined far and computed near.\n // This will handle the case where the computed near plane is further than the user defined far plane.\n near = Math.min(Math.max(near, camera.frustum.near), camera.frustum.far);\n far = Math.max(Math.min(far, camera.frustum.far), near);\n\n var numFrustums;\n if (is2D) {\n // The multifrustum for 2D is uniformly distributed. To avoid z-fighting in 2D,\n // the camera is moved to just before the frustum and the frustum depth is scaled\n // to be in [1.0, nearToFarDistance2D].\n far = Math.min(far, camera.position.z + scene.nearToFarDistance2D);\n near = Math.min(near, far);\n numFrustums = Math.ceil(\n Math.max(1.0, far - near) / scene.nearToFarDistance2D\n );\n } else {\n // The multifrustum for 3D/CV is non-uniformly distributed.\n numFrustums = Math.ceil(Math.log(far / near) / Math.log(farToNearRatio));\n }\n\n var frustumCommandsList = view.frustumCommandsList;\n frustumCommandsList.length = numFrustums;\n for (var m = 0; m < numFrustums; ++m) {\n var curNear;\n var curFar;\n\n if (is2D) {\n curNear = Math.min(\n far - nearToFarDistance2D,\n near + m * nearToFarDistance2D\n );\n curFar = Math.min(far, curNear + nearToFarDistance2D);\n } else {\n curNear = Math.max(near, Math.pow(farToNearRatio, m) * near);\n curFar = Math.min(far, farToNearRatio * curNear);\n }\n var frustumCommands = frustumCommandsList[m];\n if (!defined(frustumCommands)) {\n frustumCommands = frustumCommandsList[m] = new FrustumCommands(\n curNear,\n curFar\n );\n } else {\n frustumCommands.near = curNear;\n frustumCommands.far = curFar;\n }\n }\n}\n\nfunction insertIntoBin(view, scene, command, commandNear, commandFar) {\n if (scene.debugShowFrustums) {\n command.debugOverlappingFrustums = 0;\n }\n\n var frustumCommandsList = view.frustumCommandsList;\n var length = frustumCommandsList.length;\n\n for (var i = 0; i < length; ++i) {\n var frustumCommands = frustumCommandsList[i];\n var curNear = frustumCommands.near;\n var curFar = frustumCommands.far;\n\n if (commandNear > curFar) {\n continue;\n }\n\n if (commandFar < curNear) {\n break;\n }\n\n var pass = command.pass;\n var index = frustumCommands.indices[pass]++;\n frustumCommands.commands[pass][index] = command;\n\n if (scene.debugShowFrustums) {\n command.debugOverlappingFrustums |= 1 << i;\n }\n\n if (command.executeInClosestFrustum) {\n break;\n }\n }\n\n if (scene.debugShowFrustums) {\n var cf = view.debugFrustumStatistics.commandsInFrustums;\n cf[command.debugOverlappingFrustums] = defined(\n cf[command.debugOverlappingFrustums]\n )\n ? cf[command.debugOverlappingFrustums] + 1\n : 1;\n ++view.debugFrustumStatistics.totalCommands;\n }\n\n scene.updateDerivedCommands(command);\n}\n\nvar scratchCullingVolume = new CullingVolume();\nvar scratchNearFarInterval = new Interval();\n\nView.prototype.createPotentiallyVisibleSet = function (scene) {\n var frameState = scene.frameState;\n var camera = frameState.camera;\n var direction = camera.directionWC;\n var position = camera.positionWC;\n\n var computeList = scene._computeCommandList;\n var overlayList = scene._overlayCommandList;\n var commandList = frameState.commandList;\n\n if (scene.debugShowFrustums) {\n this.debugFrustumStatistics = {\n totalCommands: 0,\n commandsInFrustums: {},\n };\n }\n\n var frustumCommandsList = this.frustumCommandsList;\n var numberOfFrustums = frustumCommandsList.length;\n var numberOfPasses = Pass.NUMBER_OF_PASSES;\n for (var n = 0; n < numberOfFrustums; ++n) {\n for (var p = 0; p < numberOfPasses; ++p) {\n frustumCommandsList[n].indices[p] = 0;\n }\n }\n\n computeList.length = 0;\n overlayList.length = 0;\n\n var commandExtents = this._commandExtents;\n var commandExtentCapacity = commandExtents.length;\n var commandExtentCount = 0;\n\n var near = +Number.MAX_VALUE;\n var far = -Number.MAX_VALUE;\n\n var shadowsEnabled = frameState.shadowState.shadowsEnabled;\n var shadowNear = +Number.MAX_VALUE;\n var shadowFar = -Number.MAX_VALUE;\n var shadowClosestObjectSize = Number.MAX_VALUE;\n\n var occluder =\n frameState.mode === SceneMode.SCENE3D ? frameState.occluder : undefined;\n var cullingVolume = frameState.cullingVolume;\n\n // get user culling volume minus the far plane.\n var planes = scratchCullingVolume.planes;\n for (var k = 0; k < 5; ++k) {\n planes[k] = cullingVolume.planes[k];\n }\n cullingVolume = scratchCullingVolume;\n\n var length = commandList.length;\n for (var i = 0; i < length; ++i) {\n var command = commandList[i];\n var pass = command.pass;\n\n if (pass === Pass.COMPUTE) {\n computeList.push(command);\n } else if (pass === Pass.OVERLAY) {\n overlayList.push(command);\n } else {\n var commandNear;\n var commandFar;\n\n var boundingVolume = command.boundingVolume;\n if (defined(boundingVolume)) {\n if (!scene.isVisible(command, cullingVolume, occluder)) {\n continue;\n }\n\n var nearFarInterval = boundingVolume.computePlaneDistances(\n position,\n direction,\n scratchNearFarInterval\n );\n commandNear = nearFarInterval.start;\n commandFar = nearFarInterval.stop;\n near = Math.min(near, commandNear);\n far = Math.max(far, commandFar);\n\n // Compute a tight near and far plane for commands that receive shadows. This helps compute\n // good splits for cascaded shadow maps. Ignore commands that exceed the maximum distance.\n // When moving the camera low LOD globe tiles begin to load, whose bounding volumes\n // throw off the near/far fitting for the shadow map. Only update for globe tiles that the\n // camera isn't inside.\n if (\n shadowsEnabled &&\n command.receiveShadows &&\n commandNear < ShadowMap.MAXIMUM_DISTANCE &&\n !(pass === Pass.GLOBE && commandNear < -100.0 && commandFar > 100.0)\n ) {\n // Get the smallest bounding volume the camera is near. This is used to place more shadow detail near the object.\n var size = commandFar - commandNear;\n if (pass !== Pass.GLOBE && commandNear < 100.0) {\n shadowClosestObjectSize = Math.min(shadowClosestObjectSize, size);\n }\n shadowNear = Math.min(shadowNear, commandNear);\n shadowFar = Math.max(shadowFar, commandFar);\n }\n } else if (command instanceof ClearCommand) {\n // Clear commands don't need a bounding volume - just add the clear to all frustums.\n commandNear = camera.frustum.near;\n commandFar = camera.frustum.far;\n } else {\n // If command has no bounding volume we need to use the camera's\n // worst-case near and far planes to avoid clipping something important.\n commandNear = camera.frustum.near;\n commandFar = camera.frustum.far;\n near = Math.min(near, commandNear);\n far = Math.max(far, commandFar);\n }\n\n var extent = commandExtents[commandExtentCount];\n if (!defined(extent)) {\n extent = commandExtents[commandExtentCount] = new CommandExtent();\n }\n extent.command = command;\n extent.near = commandNear;\n extent.far = commandFar;\n commandExtentCount++;\n }\n }\n\n if (shadowsEnabled) {\n shadowNear = Math.min(\n Math.max(shadowNear, camera.frustum.near),\n camera.frustum.far\n );\n shadowFar = Math.max(Math.min(shadowFar, camera.frustum.far), shadowNear);\n }\n\n // Use the computed near and far for shadows\n if (shadowsEnabled) {\n frameState.shadowState.nearPlane = shadowNear;\n frameState.shadowState.farPlane = shadowFar;\n frameState.shadowState.closestObjectSize = shadowClosestObjectSize;\n }\n\n updateFrustums(this, scene, near, far);\n\n var c;\n var ce;\n\n for (c = 0; c < commandExtentCount; c++) {\n ce = commandExtents[c];\n insertIntoBin(this, scene, ce.command, ce.near, ce.far);\n }\n\n // Dereference old commands\n if (commandExtentCount < commandExtentCapacity) {\n for (c = commandExtentCount; c < commandExtentCapacity; c++) {\n ce = commandExtents[c];\n if (!defined(ce.command)) {\n // If the command is undefined, it's assumed that all\n // subsequent commmands were set to undefined as well,\n // so no need to loop over them all\n break;\n }\n ce.command = undefined;\n }\n }\n\n var numFrustums = frustumCommandsList.length;\n var frustumSplits = frameState.frustumSplits;\n frustumSplits.length = numFrustums + 1;\n for (var j = 0; j < numFrustums; ++j) {\n frustumSplits[j] = frustumCommandsList[j].near;\n if (j === numFrustums - 1) {\n frustumSplits[j + 1] = frustumCommandsList[j].far;\n }\n }\n};\n\nView.prototype.destroy = function () {\n this.pickFramebuffer = this.pickFramebuffer && this.pickFramebuffer.destroy();\n this.pickDepthFramebuffer =\n this.pickDepthFramebuffer && this.pickDepthFramebuffer.destroy();\n this.sceneFramebuffer =\n this.sceneFramebuffer && this.sceneFramebuffer.destroy();\n this.globeDepth = this.globeDepth && this.globeDepth.destroy();\n this.oit = this.oit && this.oit.destroy();\n this.globeTranslucencyFramebuffer =\n this.globeTranslucencyFramebuffer &&\n this.globeTranslucencyFramebuffer.destroy();\n\n var i;\n var length;\n\n var pickDepths = this.pickDepths;\n var debugGlobeDepths = this.debugGlobeDepths;\n\n length = pickDepths.length;\n for (i = 0; i < length; ++i) {\n pickDepths[i].destroy();\n }\n\n length = debugGlobeDepths.length;\n for (i = 0; i < length; ++i) {\n debugGlobeDepths[i].destroy();\n }\n};\nexport default View;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Camera from \"./Camera.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTilePassState from \"./Cesium3DTilePassState.js\";\nimport PickDepth from \"./PickDepth.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport View from \"./View.js\";\n\nvar offscreenDefaultWidth = 0.1;\n\nvar mostDetailedPreloadTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.MOST_DETAILED_PRELOAD,\n});\n\nvar mostDetailedPickTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.MOST_DETAILED_PICK,\n});\n\nvar pickTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.PICK,\n});\n\n/**\n * @private\n */\nfunction Picking(scene) {\n this._mostDetailedRayPicks = [];\n this.pickRenderStateCache = {};\n this._pickPositionCache = {};\n this._pickPositionCacheDirty = false;\n\n var pickOffscreenViewport = new BoundingRectangle(0, 0, 1, 1);\n var pickOffscreenCamera = new Camera(scene);\n pickOffscreenCamera.frustum = new OrthographicFrustum({\n width: offscreenDefaultWidth,\n aspectRatio: 1.0,\n near: 0.1,\n });\n\n this._pickOffscreenView = new View(\n scene,\n pickOffscreenCamera,\n pickOffscreenViewport\n );\n}\n\nPicking.prototype.update = function () {\n this._pickPositionCacheDirty = true;\n};\n\nPicking.prototype.getPickDepth = function (scene, index) {\n var pickDepths = scene.view.pickDepths;\n var pickDepth = pickDepths[index];\n if (!defined(pickDepth)) {\n pickDepth = new PickDepth();\n pickDepths[index] = pickDepth;\n }\n return pickDepth;\n};\n\nvar scratchOrthoPickingFrustum = new OrthographicOffCenterFrustum();\nvar scratchOrthoOrigin = new Cartesian3();\nvar scratchOrthoDirection = new Cartesian3();\nvar scratchOrthoPixelSize = new Cartesian2();\nvar scratchOrthoPickVolumeMatrix4 = new Matrix4();\n\nfunction getPickOrthographicCullingVolume(\n scene,\n drawingBufferPosition,\n width,\n height,\n viewport\n) {\n var camera = scene.camera;\n var frustum = camera.frustum;\n if (defined(frustum._offCenterFrustum)) {\n frustum = frustum._offCenterFrustum;\n }\n\n var x = (2.0 * (drawingBufferPosition.x - viewport.x)) / viewport.width - 1.0;\n x *= (frustum.right - frustum.left) * 0.5;\n var y =\n (2.0 * (viewport.height - drawingBufferPosition.y - viewport.y)) /\n viewport.height -\n 1.0;\n y *= (frustum.top - frustum.bottom) * 0.5;\n\n var transform = Matrix4.clone(\n camera.transform,\n scratchOrthoPickVolumeMatrix4\n );\n camera._setTransform(Matrix4.IDENTITY);\n\n var origin = Cartesian3.clone(camera.position, scratchOrthoOrigin);\n Cartesian3.multiplyByScalar(camera.right, x, scratchOrthoDirection);\n Cartesian3.add(scratchOrthoDirection, origin, origin);\n Cartesian3.multiplyByScalar(camera.up, y, scratchOrthoDirection);\n Cartesian3.add(scratchOrthoDirection, origin, origin);\n\n camera._setTransform(transform);\n\n if (scene.mode === SceneMode.SCENE2D) {\n Cartesian3.fromElements(origin.z, origin.x, origin.y, origin);\n }\n\n var pixelSize = frustum.getPixelDimensions(\n viewport.width,\n viewport.height,\n 1.0,\n 1.0,\n scratchOrthoPixelSize\n );\n\n var ortho = scratchOrthoPickingFrustum;\n ortho.right = pixelSize.x * 0.5;\n ortho.left = -ortho.right;\n ortho.top = pixelSize.y * 0.5;\n ortho.bottom = -ortho.top;\n ortho.near = frustum.near;\n ortho.far = frustum.far;\n\n return ortho.computeCullingVolume(origin, camera.directionWC, camera.upWC);\n}\n\nvar scratchPerspPickingFrustum = new PerspectiveOffCenterFrustum();\nvar scratchPerspPixelSize = new Cartesian2();\n\nfunction getPickPerspectiveCullingVolume(\n scene,\n drawingBufferPosition,\n width,\n height,\n viewport\n) {\n var camera = scene.camera;\n var frustum = camera.frustum;\n var near = frustum.near;\n\n var tanPhi = Math.tan(frustum.fovy * 0.5);\n var tanTheta = frustum.aspectRatio * tanPhi;\n\n var x = (2.0 * (drawingBufferPosition.x - viewport.x)) / viewport.width - 1.0;\n var y =\n (2.0 * (viewport.height - drawingBufferPosition.y - viewport.y)) /\n viewport.height -\n 1.0;\n\n var xDir = x * near * tanTheta;\n var yDir = y * near * tanPhi;\n\n var pixelSize = frustum.getPixelDimensions(\n viewport.width,\n viewport.height,\n 1.0,\n 1.0,\n scratchPerspPixelSize\n );\n var pickWidth = pixelSize.x * width * 0.5;\n var pickHeight = pixelSize.y * height * 0.5;\n\n var offCenter = scratchPerspPickingFrustum;\n offCenter.top = yDir + pickHeight;\n offCenter.bottom = yDir - pickHeight;\n offCenter.right = xDir + pickWidth;\n offCenter.left = xDir - pickWidth;\n offCenter.near = near;\n offCenter.far = frustum.far;\n\n return offCenter.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n}\n\nfunction getPickCullingVolume(\n scene,\n drawingBufferPosition,\n width,\n height,\n viewport\n) {\n var frustum = scene.camera.frustum;\n if (\n frustum instanceof OrthographicFrustum ||\n frustum instanceof OrthographicOffCenterFrustum\n ) {\n return getPickOrthographicCullingVolume(\n scene,\n drawingBufferPosition,\n width,\n height,\n viewport\n );\n }\n\n return getPickPerspectiveCullingVolume(\n scene,\n drawingBufferPosition,\n width,\n height,\n viewport\n );\n}\n\n// pick rectangle width and height, assumed odd\nvar scratchRectangleWidth = 3.0;\nvar scratchRectangleHeight = 3.0;\nvar scratchRectangle = new BoundingRectangle(\n 0.0,\n 0.0,\n scratchRectangleWidth,\n scratchRectangleHeight\n);\nvar scratchPosition = new Cartesian2();\nvar scratchColorZero = new Color(0.0, 0.0, 0.0, 0.0);\n\nPicking.prototype.pick = function (scene, windowPosition, width, height) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(windowPosition)) {\n throw new DeveloperError(\"windowPosition is undefined.\");\n }\n //>>includeEnd('debug');\n\n scratchRectangleWidth = defaultValue(width, 3.0);\n scratchRectangleHeight = defaultValue(height, scratchRectangleWidth);\n\n var context = scene.context;\n var us = context.uniformState;\n var frameState = scene.frameState;\n\n var view = scene.defaultView;\n scene.view = view;\n\n var viewport = view.viewport;\n viewport.x = 0;\n viewport.y = 0;\n viewport.width = context.drawingBufferWidth;\n viewport.height = context.drawingBufferHeight;\n\n var passState = view.passState;\n passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n var drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n scene,\n windowPosition,\n scratchPosition\n );\n\n scene.jobScheduler.disableThisFrame();\n\n scene.updateFrameState();\n frameState.cullingVolume = getPickCullingVolume(\n scene,\n drawingBufferPosition,\n scratchRectangleWidth,\n scratchRectangleHeight,\n viewport\n );\n frameState.invertClassification = false;\n frameState.passes.pick = true;\n frameState.tilesetPassState = pickTilesetPassState;\n\n us.update(frameState);\n\n scene.updateEnvironment();\n\n scratchRectangle.x =\n drawingBufferPosition.x - (scratchRectangleWidth - 1.0) * 0.5;\n scratchRectangle.y =\n scene.drawingBufferHeight -\n drawingBufferPosition.y -\n (scratchRectangleHeight - 1.0) * 0.5;\n scratchRectangle.width = scratchRectangleWidth;\n scratchRectangle.height = scratchRectangleHeight;\n passState = view.pickFramebuffer.begin(scratchRectangle, view.viewport);\n\n scene.updateAndExecuteCommands(passState, scratchColorZero);\n scene.resolveFramebuffers(passState);\n\n var object = view.pickFramebuffer.end(scratchRectangle);\n context.endFrame();\n return object;\n};\n\nfunction renderTranslucentDepthForPick(scene, drawingBufferPosition) {\n // PERFORMANCE_IDEA: render translucent only and merge with the previous frame\n var context = scene.context;\n var frameState = scene.frameState;\n var environmentState = scene.environmentState;\n\n var view = scene.defaultView;\n scene.view = view;\n\n var viewport = view.viewport;\n viewport.x = 0;\n viewport.y = 0;\n viewport.width = context.drawingBufferWidth;\n viewport.height = context.drawingBufferHeight;\n\n var passState = view.passState;\n passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n scene.clearPasses(frameState.passes);\n frameState.passes.pick = true;\n frameState.passes.depth = true;\n frameState.cullingVolume = getPickCullingVolume(\n scene,\n drawingBufferPosition,\n 1,\n 1,\n viewport\n );\n frameState.tilesetPassState = pickTilesetPassState;\n\n scene.updateEnvironment();\n environmentState.renderTranslucentDepthForPick = true;\n passState = view.pickDepthFramebuffer.update(\n context,\n drawingBufferPosition,\n viewport\n );\n\n scene.updateAndExecuteCommands(passState, scratchColorZero);\n scene.resolveFramebuffers(passState);\n\n context.endFrame();\n}\n\nvar scratchPerspectiveFrustum = new PerspectiveFrustum();\nvar scratchPerspectiveOffCenterFrustum = new PerspectiveOffCenterFrustum();\nvar scratchOrthographicFrustum = new OrthographicFrustum();\nvar scratchOrthographicOffCenterFrustum = new OrthographicOffCenterFrustum();\n\nPicking.prototype.pickPositionWorldCoordinates = function (\n scene,\n windowPosition,\n result\n) {\n if (!scene.useDepthPicking) {\n return undefined;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(windowPosition)) {\n throw new DeveloperError(\"windowPosition is undefined.\");\n }\n if (!scene.context.depthTexture) {\n throw new DeveloperError(\n \"Picking from the depth buffer is not supported. Check pickPositionSupported.\"\n );\n }\n //>>includeEnd('debug');\n\n var cacheKey = windowPosition.toString();\n\n if (this._pickPositionCacheDirty) {\n this._pickPositionCache = {};\n this._pickPositionCacheDirty = false;\n } else if (this._pickPositionCache.hasOwnProperty(cacheKey)) {\n return Cartesian3.clone(this._pickPositionCache[cacheKey], result);\n }\n\n var frameState = scene.frameState;\n var context = scene.context;\n var uniformState = context.uniformState;\n\n var view = scene.defaultView;\n scene.view = view;\n\n var drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n scene,\n windowPosition,\n scratchPosition\n );\n if (scene.pickTranslucentDepth) {\n renderTranslucentDepthForPick(scene, drawingBufferPosition);\n } else {\n scene.updateFrameState();\n uniformState.update(frameState);\n scene.updateEnvironment();\n }\n drawingBufferPosition.y = scene.drawingBufferHeight - drawingBufferPosition.y;\n\n var camera = scene.camera;\n\n // Create a working frustum from the original camera frustum.\n var frustum;\n if (defined(camera.frustum.fov)) {\n frustum = camera.frustum.clone(scratchPerspectiveFrustum);\n } else if (defined(camera.frustum.infiniteProjectionMatrix)) {\n frustum = camera.frustum.clone(scratchPerspectiveOffCenterFrustum);\n } else if (defined(camera.frustum.width)) {\n frustum = camera.frustum.clone(scratchOrthographicFrustum);\n } else {\n frustum = camera.frustum.clone(scratchOrthographicOffCenterFrustum);\n }\n\n var frustumCommandsList = view.frustumCommandsList;\n var numFrustums = frustumCommandsList.length;\n for (var i = 0; i < numFrustums; ++i) {\n var pickDepth = this.getPickDepth(scene, i);\n var depth = pickDepth.getDepth(\n context,\n drawingBufferPosition.x,\n drawingBufferPosition.y\n );\n if (!defined(depth)) {\n continue;\n }\n if (depth > 0.0 && depth < 1.0) {\n var renderedFrustum = frustumCommandsList[i];\n var height2D;\n if (scene.mode === SceneMode.SCENE2D) {\n height2D = camera.position.z;\n camera.position.z = height2D - renderedFrustum.near + 1.0;\n frustum.far = Math.max(1.0, renderedFrustum.far - renderedFrustum.near);\n frustum.near = 1.0;\n uniformState.update(frameState);\n uniformState.updateFrustum(frustum);\n } else {\n frustum.near =\n renderedFrustum.near *\n (i !== 0 ? scene.opaqueFrustumNearOffset : 1.0);\n frustum.far = renderedFrustum.far;\n uniformState.updateFrustum(frustum);\n }\n\n result = SceneTransforms.drawingBufferToWgs84Coordinates(\n scene,\n drawingBufferPosition,\n depth,\n result\n );\n\n if (scene.mode === SceneMode.SCENE2D) {\n camera.position.z = height2D;\n uniformState.update(frameState);\n }\n\n this._pickPositionCache[cacheKey] = Cartesian3.clone(result);\n return result;\n }\n }\n\n this._pickPositionCache[cacheKey] = undefined;\n return undefined;\n};\n\nvar scratchPickPositionCartographic = new Cartographic();\n\nPicking.prototype.pickPosition = function (scene, windowPosition, result) {\n result = this.pickPositionWorldCoordinates(scene, windowPosition, result);\n if (defined(result) && scene.mode !== SceneMode.SCENE3D) {\n Cartesian3.fromElements(result.y, result.z, result.x, result);\n\n var projection = scene.mapProjection;\n var ellipsoid = projection.ellipsoid;\n\n var cart = projection.unproject(result, scratchPickPositionCartographic);\n ellipsoid.cartographicToCartesian(cart, result);\n }\n\n return result;\n};\n\nfunction drillPick(limit, pickCallback) {\n // PERFORMANCE_IDEA: This function calls each primitive's update for each pass. Instead\n // we could update the primitive once, and then just execute their commands for each pass,\n // and cull commands for picked primitives. e.g., base on the command's owner.\n var i;\n var attributes;\n var result = [];\n var pickedPrimitives = [];\n var pickedAttributes = [];\n var pickedFeatures = [];\n if (!defined(limit)) {\n limit = Number.MAX_VALUE;\n }\n\n var pickedResult = pickCallback();\n while (defined(pickedResult)) {\n var object = pickedResult.object;\n var position = pickedResult.position;\n var exclude = pickedResult.exclude;\n\n if (defined(position) && !defined(object)) {\n result.push(pickedResult);\n break;\n }\n\n if (!defined(object) || !defined(object.primitive)) {\n break;\n }\n\n if (!exclude) {\n result.push(pickedResult);\n if (0 >= --limit) {\n break;\n }\n }\n\n var primitive = object.primitive;\n var hasShowAttribute = false;\n\n // If the picked object has a show attribute, use it.\n if (typeof primitive.getGeometryInstanceAttributes === \"function\") {\n if (defined(object.id)) {\n attributes = primitive.getGeometryInstanceAttributes(object.id);\n if (defined(attributes) && defined(attributes.show)) {\n hasShowAttribute = true;\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n false,\n attributes.show\n );\n pickedAttributes.push(attributes);\n }\n }\n }\n\n if (object instanceof Cesium3DTileFeature) {\n hasShowAttribute = true;\n object.show = false;\n pickedFeatures.push(object);\n }\n\n // Otherwise, hide the entire primitive\n if (!hasShowAttribute) {\n primitive.show = false;\n pickedPrimitives.push(primitive);\n }\n\n pickedResult = pickCallback();\n }\n\n // Unhide everything we hid while drill picking\n for (i = 0; i < pickedPrimitives.length; ++i) {\n pickedPrimitives[i].show = true;\n }\n\n for (i = 0; i < pickedAttributes.length; ++i) {\n attributes = pickedAttributes[i];\n attributes.show = ShowGeometryInstanceAttribute.toValue(\n true,\n attributes.show\n );\n }\n\n for (i = 0; i < pickedFeatures.length; ++i) {\n pickedFeatures[i].show = true;\n }\n\n return result;\n}\n\nPicking.prototype.drillPick = function (\n scene,\n windowPosition,\n limit,\n width,\n height\n) {\n var that = this;\n var pickCallback = function () {\n var object = that.pick(scene, windowPosition, width, height);\n if (defined(object)) {\n return {\n object: object,\n position: undefined,\n exclude: false,\n };\n }\n };\n var objects = drillPick(limit, pickCallback);\n return objects.map(function (element) {\n return element.object;\n });\n};\n\nvar scratchRight = new Cartesian3();\nvar scratchUp = new Cartesian3();\n\nfunction MostDetailedRayPick(ray, width, tilesets) {\n this.ray = ray;\n this.width = width;\n this.tilesets = tilesets;\n this.ready = false;\n this.deferred = when.defer();\n this.promise = this.deferred.promise;\n}\n\nfunction updateOffscreenCameraFromRay(picking, ray, width, camera) {\n var direction = ray.direction;\n var orthogonalAxis = Cartesian3.mostOrthogonalAxis(direction, scratchRight);\n var right = Cartesian3.cross(direction, orthogonalAxis, scratchRight);\n var up = Cartesian3.cross(direction, right, scratchUp);\n\n camera.position = ray.origin;\n camera.direction = direction;\n camera.up = up;\n camera.right = right;\n\n camera.frustum.width = defaultValue(width, offscreenDefaultWidth);\n return camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n}\n\nfunction updateMostDetailedRayPick(picking, scene, rayPick) {\n var frameState = scene.frameState;\n\n var ray = rayPick.ray;\n var width = rayPick.width;\n var tilesets = rayPick.tilesets;\n\n var camera = picking._pickOffscreenView.camera;\n var cullingVolume = updateOffscreenCameraFromRay(picking, ray, width, camera);\n\n var tilesetPassState = mostDetailedPreloadTilesetPassState;\n tilesetPassState.camera = camera;\n tilesetPassState.cullingVolume = cullingVolume;\n\n var ready = true;\n var tilesetsLength = tilesets.length;\n for (var i = 0; i < tilesetsLength; ++i) {\n var tileset = tilesets[i];\n if (tileset.show && scene.primitives.contains(tileset)) {\n // Only update tilesets that are still contained in the scene's primitive collection and are still visible\n // Update tilesets continually until all tilesets are ready. This way tiles are never removed from the cache.\n tileset.updateForPass(frameState, tilesetPassState);\n ready = ready && tilesetPassState.ready;\n }\n }\n\n if (ready) {\n rayPick.deferred.resolve();\n }\n\n return ready;\n}\n\nPicking.prototype.updateMostDetailedRayPicks = function (scene) {\n // Modifies array during iteration\n var rayPicks = this._mostDetailedRayPicks;\n for (var i = 0; i < rayPicks.length; ++i) {\n if (updateMostDetailedRayPick(this, scene, rayPicks[i])) {\n rayPicks.splice(i--, 1);\n }\n }\n};\n\nfunction getTilesets(primitives, objectsToExclude, tilesets) {\n var length = primitives.length;\n for (var i = 0; i < length; ++i) {\n var primitive = primitives.get(i);\n if (primitive.show) {\n if (defined(primitive.isCesium3DTileset)) {\n if (\n !defined(objectsToExclude) ||\n objectsToExclude.indexOf(primitive) === -1\n ) {\n tilesets.push(primitive);\n }\n } else if (primitive instanceof PrimitiveCollection) {\n getTilesets(primitive, objectsToExclude, tilesets);\n }\n }\n }\n}\n\nfunction launchMostDetailedRayPick(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n callback\n) {\n var tilesets = [];\n getTilesets(scene.primitives, objectsToExclude, tilesets);\n if (tilesets.length === 0) {\n return when.resolve(callback());\n }\n\n var rayPick = new MostDetailedRayPick(ray, width, tilesets);\n picking._mostDetailedRayPicks.push(rayPick);\n return rayPick.promise.then(function () {\n return callback();\n });\n}\n\nfunction isExcluded(object, objectsToExclude) {\n if (\n !defined(object) ||\n !defined(objectsToExclude) ||\n objectsToExclude.length === 0\n ) {\n return false;\n }\n return (\n objectsToExclude.indexOf(object) > -1 ||\n objectsToExclude.indexOf(object.primitive) > -1 ||\n objectsToExclude.indexOf(object.id) > -1\n );\n}\n\nfunction getRayIntersection(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n) {\n var context = scene.context;\n var uniformState = context.uniformState;\n var frameState = scene.frameState;\n\n var view = picking._pickOffscreenView;\n scene.view = view;\n\n updateOffscreenCameraFromRay(picking, ray, width, view.camera);\n\n scratchRectangle = BoundingRectangle.clone(view.viewport, scratchRectangle);\n\n var passState = view.pickFramebuffer.begin(scratchRectangle, view.viewport);\n\n scene.jobScheduler.disableThisFrame();\n\n scene.updateFrameState();\n frameState.invertClassification = false;\n frameState.passes.pick = true;\n frameState.passes.offscreen = true;\n\n if (mostDetailed) {\n frameState.tilesetPassState = mostDetailedPickTilesetPassState;\n } else {\n frameState.tilesetPassState = pickTilesetPassState;\n }\n\n uniformState.update(frameState);\n\n scene.updateEnvironment();\n scene.updateAndExecuteCommands(passState, scratchColorZero);\n scene.resolveFramebuffers(passState);\n\n var position;\n var object = view.pickFramebuffer.end(context);\n\n if (scene.context.depthTexture) {\n var numFrustums = view.frustumCommandsList.length;\n for (var i = 0; i < numFrustums; ++i) {\n var pickDepth = picking.getPickDepth(scene, i);\n var depth = pickDepth.getDepth(context, 0, 0);\n if (!defined(depth)) {\n continue;\n }\n if (depth > 0.0 && depth < 1.0) {\n var renderedFrustum = view.frustumCommandsList[i];\n var near =\n renderedFrustum.near *\n (i !== 0 ? scene.opaqueFrustumNearOffset : 1.0);\n var far = renderedFrustum.far;\n var distance = near + depth * (far - near);\n position = Ray.getPoint(ray, distance);\n break;\n }\n }\n }\n\n scene.view = scene.defaultView;\n context.endFrame();\n\n if (defined(object) || defined(position)) {\n return {\n object: object,\n position: position,\n exclude:\n (!defined(position) && requirePosition) ||\n isExcluded(object, objectsToExclude),\n };\n }\n}\n\nfunction getRayIntersections(\n picking,\n scene,\n ray,\n limit,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n) {\n var pickCallback = function () {\n return getRayIntersection(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n );\n };\n return drillPick(limit, pickCallback);\n}\n\nfunction pickFromRay(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n) {\n var results = getRayIntersections(\n picking,\n scene,\n ray,\n 1,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n );\n if (results.length > 0) {\n return results[0];\n }\n}\n\nfunction drillPickFromRay(\n picking,\n scene,\n ray,\n limit,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n) {\n return getRayIntersections(\n picking,\n scene,\n ray,\n limit,\n objectsToExclude,\n width,\n requirePosition,\n mostDetailed\n );\n}\n\nfunction deferPromiseUntilPostRender(scene, promise) {\n // Resolve promise after scene's postRender in case entities are created when the promise resolves.\n // Entities can't be created between viewer._onTick and viewer._postRender.\n var deferred = when.defer();\n promise\n .then(function (result) {\n var removeCallback = scene.postRender.addEventListener(function () {\n deferred.resolve(result);\n removeCallback();\n });\n scene.requestRender();\n })\n .otherwise(function (error) {\n deferred.reject(error);\n });\n return deferred.promise;\n}\n\nPicking.prototype.pickFromRay = function (scene, ray, objectsToExclude, width) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"ray\", ray);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"Ray intersections are only supported in 3D mode.\"\n );\n }\n //>>includeEnd('debug');\n\n return pickFromRay(this, scene, ray, objectsToExclude, width, false, false);\n};\n\nPicking.prototype.drillPickFromRay = function (\n scene,\n ray,\n limit,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"ray\", ray);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"Ray intersections are only supported in 3D mode.\"\n );\n }\n //>>includeEnd('debug');\n\n return drillPickFromRay(\n this,\n scene,\n ray,\n limit,\n objectsToExclude,\n width,\n false,\n false\n );\n};\n\nPicking.prototype.pickFromRayMostDetailed = function (\n scene,\n ray,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"ray\", ray);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"Ray intersections are only supported in 3D mode.\"\n );\n }\n //>>includeEnd('debug');\n\n var that = this;\n ray = Ray.clone(ray);\n objectsToExclude = defined(objectsToExclude)\n ? objectsToExclude.slice()\n : objectsToExclude;\n return deferPromiseUntilPostRender(\n scene,\n launchMostDetailedRayPick(\n that,\n scene,\n ray,\n objectsToExclude,\n width,\n function () {\n return pickFromRay(\n that,\n scene,\n ray,\n objectsToExclude,\n width,\n false,\n true\n );\n }\n )\n );\n};\n\nPicking.prototype.drillPickFromRayMostDetailed = function (\n scene,\n ray,\n limit,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"ray\", ray);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"Ray intersections are only supported in 3D mode.\"\n );\n }\n //>>includeEnd('debug');\n\n var that = this;\n ray = Ray.clone(ray);\n objectsToExclude = defined(objectsToExclude)\n ? objectsToExclude.slice()\n : objectsToExclude;\n return deferPromiseUntilPostRender(\n scene,\n launchMostDetailedRayPick(\n that,\n scene,\n ray,\n objectsToExclude,\n width,\n function () {\n return drillPickFromRay(\n that,\n scene,\n ray,\n limit,\n objectsToExclude,\n width,\n false,\n true\n );\n }\n )\n );\n};\n\nvar scratchSurfacePosition = new Cartesian3();\nvar scratchSurfaceNormal = new Cartesian3();\nvar scratchSurfaceRay = new Ray();\nvar scratchCartographic = new Cartographic();\n\nfunction getRayForSampleHeight(scene, cartographic) {\n var globe = scene.globe;\n var ellipsoid = defined(globe)\n ? globe.ellipsoid\n : scene.mapProjection.ellipsoid;\n var height = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n var surfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n cartographic,\n scratchSurfaceNormal\n );\n var surfacePosition = Cartographic.toCartesian(\n cartographic,\n ellipsoid,\n scratchSurfacePosition\n );\n var surfaceRay = scratchSurfaceRay;\n surfaceRay.origin = surfacePosition;\n surfaceRay.direction = surfaceNormal;\n var ray = new Ray();\n Ray.getPoint(surfaceRay, height, ray.origin);\n Cartesian3.negate(surfaceNormal, ray.direction);\n return ray;\n}\n\nfunction getRayForClampToHeight(scene, cartesian) {\n var globe = scene.globe;\n var ellipsoid = defined(globe)\n ? globe.ellipsoid\n : scene.mapProjection.ellipsoid;\n var cartographic = Cartographic.fromCartesian(\n cartesian,\n ellipsoid,\n scratchCartographic\n );\n return getRayForSampleHeight(scene, cartographic);\n}\n\nfunction getHeightFromCartesian(scene, cartesian) {\n var globe = scene.globe;\n var ellipsoid = defined(globe)\n ? globe.ellipsoid\n : scene.mapProjection.ellipsoid;\n var cartographic = Cartographic.fromCartesian(\n cartesian,\n ellipsoid,\n scratchCartographic\n );\n return cartographic.height;\n}\n\nfunction sampleHeightMostDetailed(\n picking,\n scene,\n cartographic,\n objectsToExclude,\n width\n) {\n var ray = getRayForSampleHeight(scene, cartographic);\n return launchMostDetailedRayPick(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n function () {\n var pickResult = pickFromRay(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n true,\n true\n );\n if (defined(pickResult)) {\n return getHeightFromCartesian(scene, pickResult.position);\n }\n }\n );\n}\n\nfunction clampToHeightMostDetailed(\n picking,\n scene,\n cartesian,\n objectsToExclude,\n width,\n result\n) {\n var ray = getRayForClampToHeight(scene, cartesian);\n return launchMostDetailedRayPick(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n function () {\n var pickResult = pickFromRay(\n picking,\n scene,\n ray,\n objectsToExclude,\n width,\n true,\n true\n );\n if (defined(pickResult)) {\n return Cartesian3.clone(pickResult.position, result);\n }\n }\n );\n}\n\nPicking.prototype.sampleHeight = function (\n scene,\n position,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"position\", position);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\"sampleHeight is only supported in 3D mode.\");\n }\n if (!scene.sampleHeightSupported) {\n throw new DeveloperError(\n \"sampleHeight requires depth texture support. Check sampleHeightSupported.\"\n );\n }\n //>>includeEnd('debug');\n\n var ray = getRayForSampleHeight(scene, position);\n var pickResult = pickFromRay(\n this,\n scene,\n ray,\n objectsToExclude,\n width,\n true,\n false\n );\n if (defined(pickResult)) {\n return getHeightFromCartesian(scene, pickResult.position);\n }\n};\n\nPicking.prototype.clampToHeight = function (\n scene,\n cartesian,\n objectsToExclude,\n width,\n result\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesian\", cartesian);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\"clampToHeight is only supported in 3D mode.\");\n }\n if (!scene.clampToHeightSupported) {\n throw new DeveloperError(\n \"clampToHeight requires depth texture support. Check clampToHeightSupported.\"\n );\n }\n //>>includeEnd('debug');\n\n var ray = getRayForClampToHeight(scene, cartesian);\n var pickResult = pickFromRay(\n this,\n scene,\n ray,\n objectsToExclude,\n width,\n true,\n false\n );\n if (defined(pickResult)) {\n return Cartesian3.clone(pickResult.position, result);\n }\n};\n\nPicking.prototype.sampleHeightMostDetailed = function (\n scene,\n positions,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"positions\", positions);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"sampleHeightMostDetailed is only supported in 3D mode.\"\n );\n }\n if (!scene.sampleHeightSupported) {\n throw new DeveloperError(\n \"sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.\"\n );\n }\n //>>includeEnd('debug');\n\n objectsToExclude = defined(objectsToExclude)\n ? objectsToExclude.slice()\n : objectsToExclude;\n var length = positions.length;\n var promises = new Array(length);\n for (var i = 0; i < length; ++i) {\n promises[i] = sampleHeightMostDetailed(\n this,\n scene,\n positions[i],\n objectsToExclude,\n width\n );\n }\n return deferPromiseUntilPostRender(\n scene,\n when.all(promises).then(function (heights) {\n var length = heights.length;\n for (var i = 0; i < length; ++i) {\n positions[i].height = heights[i];\n }\n return positions;\n })\n );\n};\n\nPicking.prototype.clampToHeightMostDetailed = function (\n scene,\n cartesians,\n objectsToExclude,\n width\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"cartesians\", cartesians);\n if (scene.mode !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"clampToHeightMostDetailed is only supported in 3D mode.\"\n );\n }\n if (!scene.clampToHeightSupported) {\n throw new DeveloperError(\n \"clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.\"\n );\n }\n //>>includeEnd('debug');\n\n objectsToExclude = defined(objectsToExclude)\n ? objectsToExclude.slice()\n : objectsToExclude;\n var length = cartesians.length;\n var promises = new Array(length);\n for (var i = 0; i < length; ++i) {\n promises[i] = clampToHeightMostDetailed(\n this,\n scene,\n cartesians[i],\n objectsToExclude,\n width,\n cartesians[i]\n );\n }\n return deferPromiseUntilPostRender(\n scene,\n when.all(promises).then(function (clampedCartesians) {\n var length = clampedCartesians.length;\n for (var i = 0; i < length; ++i) {\n cartesians[i] = clampedCartesians[i];\n }\n return cartesians;\n })\n );\n};\n\nPicking.prototype.destroy = function () {\n this._pickOffscreenView =\n this._pickOffscreenView && this._pickOffscreenView.destroy();\n};\nexport default Picking;\n","/**\n * Determines how input texture to a {@link PostProcessStage} is sampled.\n *\n * @enum {Number}\n */\nvar PostProcessStageSampleMode = {\n /**\n * Samples the texture by returning the closest texel.\n *\n * @type {Number}\n * @constant\n */\n NEAREST: 0,\n /**\n * Samples the texture through bi-linear interpolation of the four nearest texels.\n *\n * @type {Number}\n * @constant\n */\n LINEAR: 1,\n};\nexport default PostProcessStageSampleMode;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Resource from \"../Core/Resource.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport when from \"../ThirdParty/when.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\n\n/**\n * Runs a post-process stage on either the texture rendered by the scene or the output of a previous post-process stage.\n *\n * @alias PostProcessStage\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {String} options.fragmentShader The fragment shader to use. The default <code>sampler2D</code> uniforms are <code>colorTexture</code> and <code>depthTexture</code>. The color texture is the output of rendering the scene or the previous stage. The depth texture is the output from rendering the scene. The shader should contain one or both uniforms. There is also a <code>vec2</code> varying named <code>v_textureCoordinates</code> that can be used to sample the textures.\n * @param {Object} [options.uniforms] An object whose properties will be used to set the shaders uniforms. The properties can be constant values or a function. A constant value can also be a URI, data URI, or HTML element to use as a texture.\n * @param {Number} [options.textureScale=1.0] A number in the range (0.0, 1.0] used to scale the texture dimensions. A scale of 1.0 will render this post-process stage to a texture the size of the viewport.\n * @param {Boolean} [options.forcePowerOfTwo=false] Whether or not to force the texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions.\n * @param {PostProcessStageSampleMode} [options.sampleMode=PostProcessStageSampleMode.NEAREST] How to sample the input color texture.\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGBA] The color pixel format of the output texture.\n * @param {PixelDatatype} [options.pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The pixel data type of the output texture.\n * @param {Color} [options.clearColor=Color.BLACK] The color to clear the output texture to.\n * @param {BoundingRectangle} [options.scissorRectangle] The rectangle to use for the scissor test.\n * @param {String} [options.name=createGuid()] The unique name of this post-process stage for reference by other stages in a composite. If a name is not supplied, a GUID will be generated.\n *\n * @exception {DeveloperError} options.textureScale must be greater than 0.0 and less than or equal to 1.0.\n * @exception {DeveloperError} options.pixelFormat must be a color format.\n * @exception {DeveloperError} When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture.\n *\n * @see PostProcessStageComposite\n *\n * @example\n * // Simple stage to change the color\n * var fs =\n * 'uniform sampler2D colorTexture;\\n' +\n * 'varying vec2 v_textureCoordinates;\\n' +\n * 'uniform float scale;\\n' +\n * 'uniform vec3 offset;\\n' +\n * 'void main() {\\n' +\n * ' vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n' +\n * ' gl_FragColor = vec4(color.rgb * scale + offset, 1.0);\\n' +\n * '}\\n';\n * scene.postProcessStages.add(new Cesium.PostProcessStage({\n * fragmentShader : fs,\n * uniforms : {\n * scale : 1.1,\n * offset : function() {\n * return new Cesium.Cartesian3(0.1, 0.2, 0.3);\n * }\n * }\n * }));\n *\n * @example\n * // Simple stage to change the color of what is selected.\n * // If czm_selected returns true, the current fragment belongs to geometry in the selected array.\n * var fs =\n * 'uniform sampler2D colorTexture;\\n' +\n * 'varying vec2 v_textureCoordinates;\\n' +\n * 'uniform vec4 highlight;\\n' +\n * 'void main() {\\n' +\n * ' vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n' +\n * ' if (czm_selected()) {\\n' +\n * ' vec3 highlighted = highlight.a * highlight.rgb + (1.0 - highlight.a) * color.rgb;\\n' +\n * ' gl_FragColor = vec4(highlighted, 1.0);\\n' +\n * ' } else { \\n' +\n * ' gl_FragColor = color;\\n' +\n * ' }\\n' +\n * '}\\n';\n * var stage = scene.postProcessStages.add(new Cesium.PostProcessStage({\n * fragmentShader : fs,\n * uniforms : {\n * highlight : function() {\n * return new Cesium.Color(1.0, 0.0, 0.0, 0.5);\n * }\n * }\n * }));\n * stage.selected = [cesium3DTileFeature];\n */\nfunction PostProcessStage(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var fragmentShader = options.fragmentShader;\n var textureScale = defaultValue(options.textureScale, 1.0);\n var pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"options.fragmentShader\", fragmentShader);\n Check.typeOf.number.greaterThan(\"options.textureScale\", textureScale, 0.0);\n Check.typeOf.number.lessThanOrEquals(\n \"options.textureScale\",\n textureScale,\n 1.0\n );\n if (!PixelFormat.isColorFormat(pixelFormat)) {\n throw new DeveloperError(\"options.pixelFormat must be a color format.\");\n }\n //>>includeEnd('debug');\n\n this._fragmentShader = fragmentShader;\n this._uniforms = options.uniforms;\n this._textureScale = textureScale;\n this._forcePowerOfTwo = defaultValue(options.forcePowerOfTwo, false);\n this._sampleMode = defaultValue(\n options.sampleMode,\n PostProcessStageSampleMode.NEAREST\n );\n this._pixelFormat = pixelFormat;\n this._pixelDatatype = defaultValue(\n options.pixelDatatype,\n PixelDatatype.UNSIGNED_BYTE\n );\n this._clearColor = defaultValue(options.clearColor, Color.BLACK);\n\n this._uniformMap = undefined;\n this._command = undefined;\n\n this._colorTexture = undefined;\n this._depthTexture = undefined;\n this._idTexture = undefined;\n\n this._actualUniforms = {};\n this._dirtyUniforms = [];\n this._texturesToRelease = [];\n this._texturesToCreate = [];\n this._texturePromise = undefined;\n\n var passState = new PassState();\n passState.scissorTest = {\n enabled: true,\n rectangle: defined(options.scissorRectangle)\n ? BoundingRectangle.clone(options.scissorRectangle)\n : new BoundingRectangle(),\n };\n this._passState = passState;\n\n this._ready = false;\n\n var name = options.name;\n if (!defined(name)) {\n name = createGuid();\n }\n this._name = name;\n\n this._logDepthChanged = undefined;\n this._useLogDepth = undefined;\n\n this._selectedIdTexture = undefined;\n this._selected = undefined;\n this._selectedShadow = undefined;\n this._parentSelected = undefined;\n this._parentSelectedShadow = undefined;\n this._combinedSelected = undefined;\n this._combinedSelectedShadow = undefined;\n this._selectedLength = 0;\n this._parentSelectedLength = 0;\n this._selectedDirty = true;\n\n // set by PostProcessStageCollection\n this._textureCache = undefined;\n this._index = undefined;\n\n /**\n * Whether or not to execute this post-process stage when ready.\n *\n * @type {Boolean}\n */\n this.enabled = true;\n this._enabled = true;\n}\n\nObject.defineProperties(PostProcessStage.prototype, {\n /**\n * Determines if this post-process stage is ready to be executed. A stage is only executed when both <code>ready</code>\n * and {@link PostProcessStage#enabled} are <code>true</code>. A stage will not be ready while it is waiting on textures\n * to load.\n *\n * @memberof PostProcessStage.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return this._ready;\n },\n },\n /**\n * The unique name of this post-process stage for reference by other stages in a {@link PostProcessStageComposite}.\n *\n * @memberof PostProcessStage.prototype\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n /**\n * The fragment shader to use when execute this post-process stage.\n * <p>\n * The shader must contain a sampler uniform declaration for <code>colorTexture</code>, <code>depthTexture</code>,\n * or both.\n * </p>\n * <p>\n * The shader must contain a <code>vec2</code> varying declaration for <code>v_textureCoordinates</code> for sampling\n * the texture uniforms.\n * </p>\n *\n * @memberof PostProcessStage.prototype\n * @type {String}\n * @readonly\n */\n fragmentShader: {\n get: function () {\n return this._fragmentShader;\n },\n },\n /**\n * An object whose properties are used to set the uniforms of the fragment shader.\n * <p>\n * The object property values can be either a constant or a function. The function will be called\n * each frame before the post-process stage is executed.\n * </p>\n * <p>\n * A constant value can also be a URI to an image, a data URI, or an HTML element that can be used as a texture, such as HTMLImageElement or HTMLCanvasElement.\n * </p>\n * <p>\n * If this post-process stage is part of a {@link PostProcessStageComposite} that does not execute in series, the constant value can also be\n * the name of another stage in a composite. This will set the uniform to the output texture the stage with that name.\n * </p>\n *\n * @memberof PostProcessStage.prototype\n * @type {Object}\n * @readonly\n */\n uniforms: {\n get: function () {\n return this._uniforms;\n },\n },\n /**\n * A number in the range (0.0, 1.0] used to scale the output texture dimensions. A scale of 1.0 will render this post-process stage to a texture the size of the viewport.\n *\n * @memberof PostProcessStage.prototype\n * @type {Number}\n * @readonly\n */\n textureScale: {\n get: function () {\n return this._textureScale;\n },\n },\n /**\n * Whether or not to force the output texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions.\n *\n * @memberof PostProcessStage.prototype\n * @type {Number}\n * @readonly\n */\n forcePowerOfTwo: {\n get: function () {\n return this._forcePowerOfTwo;\n },\n },\n /**\n * How to sample the input color texture.\n *\n * @memberof PostProcessStage.prototype\n * @type {PostProcessStageSampleMode}\n * @readonly\n */\n sampleMode: {\n get: function () {\n return this._sampleMode;\n },\n },\n /**\n * The color pixel format of the output texture.\n *\n * @memberof PostProcessStage.prototype\n * @type {PixelFormat}\n * @readonly\n */\n pixelFormat: {\n get: function () {\n return this._pixelFormat;\n },\n },\n /**\n * The pixel data type of the output texture.\n *\n * @memberof PostProcessStage.prototype\n * @type {PixelDatatype}\n * @readonly\n */\n pixelDatatype: {\n get: function () {\n return this._pixelDatatype;\n },\n },\n /**\n * The color to clear the output texture to.\n *\n * @memberof PostProcessStage.prototype\n * @type {Color}\n * @readonly\n */\n clearColor: {\n get: function () {\n return this._clearColor;\n },\n },\n /**\n * The {@link BoundingRectangle} to use for the scissor test. A default bounding rectangle will disable the scissor test.\n *\n * @memberof PostProcessStage.prototype\n * @type {BoundingRectangle}\n * @readonly\n */\n scissorRectangle: {\n get: function () {\n return this._passState.scissorTest.rectangle;\n },\n },\n /**\n * A reference to the texture written to when executing this post process stage.\n *\n * @memberof PostProcessStage.prototype\n * @type {Texture}\n * @readonly\n * @private\n */\n outputTexture: {\n get: function () {\n if (defined(this._textureCache)) {\n var framebuffer = this._textureCache.getFramebuffer(this._name);\n if (defined(framebuffer)) {\n return framebuffer.getColorTexture(0);\n }\n }\n return undefined;\n },\n },\n /**\n * The features selected for applying the post-process.\n * <p>\n * In the fragment shader, use <code>czm_selected</code> to determine whether or not to apply the post-process\n * stage to that fragment. For example:\n * <code>\n * if (czm_selected(v_textureCoordinates)) {\n * // apply post-process stage\n * } else {\n * gl_FragColor = texture2D(colorTexture, v_textureCordinates);\n * }\n * </code>\n * </p>\n *\n * @memberof PostProcessStage.prototype\n * @type {Array}\n */\n selected: {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n this._selected = value;\n },\n },\n /**\n * @private\n */\n parentSelected: {\n get: function () {\n return this._parentSelected;\n },\n set: function (value) {\n this._parentSelected = value;\n },\n },\n});\n\nvar depthTextureRegex = /uniform\\s+sampler2D\\s+depthTexture/g;\n\n/**\n * @private\n */\nPostProcessStage.prototype._isSupported = function (context) {\n return !depthTextureRegex.test(this._fragmentShader) || context.depthTexture;\n};\n\nfunction getUniformValueGetterAndSetter(stage, uniforms, name) {\n var currentValue = uniforms[name];\n if (\n typeof currentValue === \"string\" ||\n currentValue instanceof HTMLCanvasElement ||\n currentValue instanceof HTMLImageElement ||\n currentValue instanceof HTMLVideoElement ||\n currentValue instanceof ImageData\n ) {\n stage._dirtyUniforms.push(name);\n }\n\n return {\n get: function () {\n return uniforms[name];\n },\n set: function (value) {\n var currentValue = uniforms[name];\n uniforms[name] = value;\n\n var actualUniforms = stage._actualUniforms;\n var actualValue = actualUniforms[name];\n if (\n defined(actualValue) &&\n actualValue !== currentValue &&\n actualValue instanceof Texture &&\n !defined(stage._textureCache.getStageByName(name))\n ) {\n stage._texturesToRelease.push(actualValue);\n delete actualUniforms[name];\n delete actualUniforms[name + \"Dimensions\"];\n }\n\n if (currentValue instanceof Texture) {\n stage._texturesToRelease.push(currentValue);\n }\n\n if (\n typeof value === \"string\" ||\n value instanceof HTMLCanvasElement ||\n value instanceof HTMLImageElement ||\n value instanceof HTMLVideoElement ||\n value instanceof ImageData\n ) {\n stage._dirtyUniforms.push(name);\n } else {\n actualUniforms[name] = value;\n }\n },\n };\n}\n\nfunction getUniformMapFunction(stage, name) {\n return function () {\n var value = stage._actualUniforms[name];\n if (typeof value === \"function\") {\n return value();\n }\n return value;\n };\n}\n\nfunction getUniformMapDimensionsFunction(uniformMap, name) {\n return function () {\n var texture = uniformMap[name]();\n if (defined(texture)) {\n return texture.dimensions;\n }\n return undefined;\n };\n}\n\nfunction createUniformMap(stage) {\n if (defined(stage._uniformMap)) {\n return;\n }\n\n var uniformMap = {};\n var newUniforms = {};\n var uniforms = stage._uniforms;\n var actualUniforms = stage._actualUniforms;\n for (var name in uniforms) {\n if (uniforms.hasOwnProperty(name)) {\n if (typeof uniforms[name] !== \"function\") {\n uniformMap[name] = getUniformMapFunction(stage, name);\n newUniforms[name] = getUniformValueGetterAndSetter(\n stage,\n uniforms,\n name\n );\n } else {\n uniformMap[name] = uniforms[name];\n newUniforms[name] = uniforms[name];\n }\n\n actualUniforms[name] = uniforms[name];\n\n var value = uniformMap[name]();\n if (\n typeof value === \"string\" ||\n value instanceof Texture ||\n value instanceof HTMLImageElement ||\n value instanceof HTMLCanvasElement ||\n value instanceof HTMLVideoElement\n ) {\n uniformMap[name + \"Dimensions\"] = getUniformMapDimensionsFunction(\n uniformMap,\n name\n );\n }\n }\n }\n\n stage._uniforms = {};\n Object.defineProperties(stage._uniforms, newUniforms);\n\n stage._uniformMap = combine(uniformMap, {\n colorTexture: function () {\n return stage._colorTexture;\n },\n colorTextureDimensions: function () {\n return stage._colorTexture.dimensions;\n },\n depthTexture: function () {\n return stage._depthTexture;\n },\n depthTextureDimensions: function () {\n return stage._depthTexture.dimensions;\n },\n czm_idTexture: function () {\n return stage._idTexture;\n },\n czm_selectedIdTexture: function () {\n return stage._selectedIdTexture;\n },\n czm_selectedIdTextureStep: function () {\n return 1.0 / stage._selectedIdTexture.width;\n },\n });\n}\n\nfunction createDrawCommand(stage, context) {\n if (\n defined(stage._command) &&\n !stage._logDepthChanged &&\n !stage._selectedDirty\n ) {\n return;\n }\n\n var fs = stage._fragmentShader;\n if (defined(stage._selectedIdTexture)) {\n var width = stage._selectedIdTexture.width;\n\n fs = fs.replace(/varying\\s+vec2\\s+v_textureCoordinates;/g, \"\");\n fs =\n \"#define CZM_SELECTED_FEATURE \\n\" +\n \"uniform sampler2D czm_idTexture; \\n\" +\n \"uniform sampler2D czm_selectedIdTexture; \\n\" +\n \"uniform float czm_selectedIdTextureStep; \\n\" +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"bool czm_selected(vec2 offset) \\n\" +\n \"{ \\n\" +\n \" bool selected = false;\\n\" +\n \" vec4 id = texture2D(czm_idTexture, v_textureCoordinates + offset); \\n\" +\n \" for (int i = 0; i < \" +\n width +\n \"; ++i) \\n\" +\n \" { \\n\" +\n \" vec4 selectedId = texture2D(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5)); \\n\" +\n \" if (all(equal(id, selectedId))) \\n\" +\n \" { \\n\" +\n \" return true; \\n\" +\n \" } \\n\" +\n \" } \\n\" +\n \" return false; \\n\" +\n \"} \\n\\n\" +\n \"bool czm_selected() \\n\" +\n \"{ \\n\" +\n \" return czm_selected(vec2(0.0)); \\n\" +\n \"} \\n\\n\" +\n fs;\n }\n\n var fragmentShader = new ShaderSource({\n defines: [stage._useLogDepth ? \"LOG_DEPTH\" : \"\"],\n sources: [fs],\n });\n stage._command = context.createViewportQuadCommand(fragmentShader, {\n uniformMap: stage._uniformMap,\n owner: stage,\n });\n}\n\nfunction createSampler(stage) {\n var mode = stage._sampleMode;\n\n var minFilter;\n var magFilter;\n\n if (mode === PostProcessStageSampleMode.LINEAR) {\n minFilter = TextureMinificationFilter.LINEAR;\n magFilter = TextureMagnificationFilter.LINEAR;\n } else {\n minFilter = TextureMinificationFilter.NEAREST;\n magFilter = TextureMagnificationFilter.NEAREST;\n }\n\n var sampler = stage._sampler;\n if (\n !defined(sampler) ||\n sampler.minificationFilter !== minFilter ||\n sampler.magnificationFilter !== magFilter\n ) {\n stage._sampler = new Sampler({\n wrapS: TextureWrap.CLAMP_TO_EDGE,\n wrapT: TextureWrap.CLAMP_TO_EDGE,\n minificationFilter: minFilter,\n magnificationFilter: magFilter,\n });\n }\n}\n\nfunction createLoadImageFunction(stage, name) {\n return function (image) {\n stage._texturesToCreate.push({\n name: name,\n source: image,\n });\n };\n}\n\nfunction createStageOutputTextureFunction(stage, name) {\n return function () {\n return stage._textureCache.getOutputTexture(name);\n };\n}\n\nfunction updateUniformTextures(stage, context) {\n var i;\n var texture;\n var name;\n\n var texturesToRelease = stage._texturesToRelease;\n var length = texturesToRelease.length;\n for (i = 0; i < length; ++i) {\n texture = texturesToRelease[i];\n texture = texture && texture.destroy();\n }\n texturesToRelease.length = 0;\n\n var texturesToCreate = stage._texturesToCreate;\n length = texturesToCreate.length;\n for (i = 0; i < length; ++i) {\n var textureToCreate = texturesToCreate[i];\n name = textureToCreate.name;\n var source = textureToCreate.source;\n stage._actualUniforms[name] = new Texture({\n context: context,\n source: source,\n });\n }\n texturesToCreate.length = 0;\n\n var dirtyUniforms = stage._dirtyUniforms;\n if (dirtyUniforms.length === 0 && !defined(stage._texturePromise)) {\n stage._ready = true;\n return;\n }\n\n if (dirtyUniforms.length === 0 || defined(stage._texturePromise)) {\n return;\n }\n\n length = dirtyUniforms.length;\n var uniforms = stage._uniforms;\n var promises = [];\n for (i = 0; i < length; ++i) {\n name = dirtyUniforms[i];\n var stageNameUrlOrImage = uniforms[name];\n var stageWithName = stage._textureCache.getStageByName(stageNameUrlOrImage);\n if (defined(stageWithName)) {\n stage._actualUniforms[name] = createStageOutputTextureFunction(\n stage,\n stageNameUrlOrImage\n );\n } else if (typeof stageNameUrlOrImage === \"string\") {\n var resource = new Resource({\n url: stageNameUrlOrImage,\n });\n\n promises.push(\n resource.fetchImage().then(createLoadImageFunction(stage, name))\n );\n } else {\n stage._texturesToCreate.push({\n name: name,\n source: stageNameUrlOrImage,\n });\n }\n }\n\n dirtyUniforms.length = 0;\n\n if (promises.length > 0) {\n stage._ready = false;\n stage._texturePromise = when.all(promises).then(function () {\n stage._ready = true;\n stage._texturePromise = undefined;\n });\n } else {\n stage._ready = true;\n }\n}\n\nfunction releaseResources(stage) {\n if (defined(stage._command)) {\n stage._command.shaderProgram =\n stage._command.shaderProgram && stage._command.shaderProgram.destroy();\n stage._command = undefined;\n }\n\n stage._selectedIdTexture =\n stage._selectedIdTexture && stage._selectedIdTexture.destroy();\n\n var textureCache = stage._textureCache;\n if (!defined(textureCache)) {\n return;\n }\n\n var uniforms = stage._uniforms;\n var actualUniforms = stage._actualUniforms;\n for (var name in actualUniforms) {\n if (actualUniforms.hasOwnProperty(name)) {\n if (actualUniforms[name] instanceof Texture) {\n if (!defined(textureCache.getStageByName(uniforms[name]))) {\n actualUniforms[name].destroy();\n }\n stage._dirtyUniforms.push(name);\n }\n }\n }\n}\n\nfunction isSelectedTextureDirty(stage) {\n var length = defined(stage._selected) ? stage._selected.length : 0;\n var parentLength = defined(stage._parentSelected) ? stage._parentSelected : 0;\n var dirty =\n stage._selected !== stage._selectedShadow ||\n length !== stage._selectedLength;\n dirty =\n dirty ||\n stage._parentSelected !== stage._parentSelectedShadow ||\n parentLength !== stage._parentSelectedLength;\n\n if (defined(stage._selected) && defined(stage._parentSelected)) {\n stage._combinedSelected = stage._selected.concat(stage._parentSelected);\n } else if (defined(stage._parentSelected)) {\n stage._combinedSelected = stage._parentSelected;\n } else {\n stage._combinedSelected = stage._selected;\n }\n\n if (!dirty && defined(stage._combinedSelected)) {\n if (!defined(stage._combinedSelectedShadow)) {\n return true;\n }\n\n length = stage._combinedSelected.length;\n for (var i = 0; i < length; ++i) {\n if (stage._combinedSelected[i] !== stage._combinedSelectedShadow[i]) {\n return true;\n }\n }\n }\n return dirty;\n}\n\nfunction createSelectedTexture(stage, context) {\n if (!stage._selectedDirty) {\n return;\n }\n\n stage._selectedIdTexture =\n stage._selectedIdTexture && stage._selectedIdTexture.destroy();\n stage._selectedIdTexture = undefined;\n\n var features = stage._combinedSelected;\n if (!defined(features)) {\n return;\n }\n\n var i;\n var feature;\n\n var textureLength = 0;\n var length = features.length;\n for (i = 0; i < length; ++i) {\n feature = features[i];\n if (defined(feature.pickIds)) {\n textureLength += feature.pickIds.length;\n } else if (defined(feature.pickId)) {\n ++textureLength;\n }\n }\n\n if (length === 0 || textureLength === 0) {\n // max pick id is reserved\n var empty = new Uint8Array(4);\n empty[0] = 255;\n empty[1] = 255;\n empty[2] = 255;\n empty[3] = 255;\n\n stage._selectedIdTexture = new Texture({\n context: context,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n arrayBufferView: empty,\n width: 1,\n height: 1,\n },\n sampler: Sampler.NEAREST,\n });\n return;\n }\n\n var pickColor;\n var offset = 0;\n var ids = new Uint8Array(textureLength * 4);\n for (i = 0; i < length; ++i) {\n feature = features[i];\n if (defined(feature.pickIds)) {\n var pickIds = feature.pickIds;\n var pickIdsLength = pickIds.length;\n for (var j = 0; j < pickIdsLength; ++j) {\n pickColor = pickIds[j].color;\n ids[offset] = Color.floatToByte(pickColor.red);\n ids[offset + 1] = Color.floatToByte(pickColor.green);\n ids[offset + 2] = Color.floatToByte(pickColor.blue);\n ids[offset + 3] = Color.floatToByte(pickColor.alpha);\n offset += 4;\n }\n } else if (defined(feature.pickId)) {\n pickColor = feature.pickId.color;\n ids[offset] = Color.floatToByte(pickColor.red);\n ids[offset + 1] = Color.floatToByte(pickColor.green);\n ids[offset + 2] = Color.floatToByte(pickColor.blue);\n ids[offset + 3] = Color.floatToByte(pickColor.alpha);\n offset += 4;\n }\n }\n\n stage._selectedIdTexture = new Texture({\n context: context,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n arrayBufferView: ids,\n width: textureLength,\n height: 1,\n },\n sampler: Sampler.NEAREST,\n });\n}\n\n/**\n * A function that will be called before execute. Used to create WebGL resources and load any textures.\n * @param {Context} context The context.\n * @param {Boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n * @private\n */\nPostProcessStage.prototype.update = function (context, useLogDepth) {\n if (this.enabled !== this._enabled && !this.enabled) {\n releaseResources(this);\n }\n\n this._enabled = this.enabled;\n if (!this._enabled) {\n return;\n }\n\n this._logDepthChanged = useLogDepth !== this._useLogDepth;\n this._useLogDepth = useLogDepth;\n\n this._selectedDirty = isSelectedTextureDirty(this);\n\n this._selectedShadow = this._selected;\n this._parentSelectedShadow = this._parentSelected;\n this._combinedSelectedShadow = this._combinedSelected;\n this._selectedLength = defined(this._selected) ? this._selected.length : 0;\n this._parentSelectedLength = defined(this._parentSelected)\n ? this._parentSelected.length\n : 0;\n\n createSelectedTexture(this, context);\n createUniformMap(this);\n updateUniformTextures(this, context);\n createDrawCommand(this, context);\n createSampler(this);\n\n this._selectedDirty = false;\n\n if (!this._ready) {\n return;\n }\n\n var framebuffer = this._textureCache.getFramebuffer(this._name);\n this._command.framebuffer = framebuffer;\n\n if (!defined(framebuffer)) {\n return;\n }\n\n var colorTexture = framebuffer.getColorTexture(0);\n var renderState;\n if (\n colorTexture.width !== context.drawingBufferWidth ||\n colorTexture.height !== context.drawingBufferHeight\n ) {\n renderState = this._renderState;\n if (\n !defined(renderState) ||\n colorTexture.width !== renderState.viewport.width ||\n colorTexture.height !== renderState.viewport.height\n ) {\n this._renderState = RenderState.fromCache({\n viewport: new BoundingRectangle(\n 0,\n 0,\n colorTexture.width,\n colorTexture.height\n ),\n });\n }\n }\n\n this._command.renderState = renderState;\n};\n\n/**\n * Executes the post-process stage. The color texture is the texture rendered to by the scene or from the previous stage.\n * @param {Context} context The context.\n * @param {Texture} colorTexture The input color texture.\n * @param {Texture} depthTexture The input depth texture.\n * @param {Texture} idTexture The id texture.\n * @private\n */\nPostProcessStage.prototype.execute = function (\n context,\n colorTexture,\n depthTexture,\n idTexture\n) {\n if (\n !defined(this._command) ||\n !defined(this._command.framebuffer) ||\n !this._ready ||\n !this._enabled\n ) {\n return;\n }\n\n this._colorTexture = colorTexture;\n this._depthTexture = depthTexture;\n this._idTexture = idTexture;\n\n if (!Sampler.equals(this._colorTexture.sampler, this._sampler)) {\n this._colorTexture.sampler = this._sampler;\n }\n\n var passState =\n this.scissorRectangle.width > 0 && this.scissorRectangle.height > 0\n ? this._passState\n : undefined;\n if (defined(passState)) {\n passState.context = context;\n }\n\n this._command.execute(context, passState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStage#destroy\n */\nPostProcessStage.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStage#isDestroyed\n */\nPostProcessStage.prototype.destroy = function () {\n releaseResources(this);\n return destroyObject(this);\n};\nexport default PostProcessStage;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#define SAMPLES 8\\n\\\n\\n\\\nuniform float delta;\\n\\\nuniform float sigma;\\n\\\nuniform float direction; // 0.0 for x direction, 1.0 for y direction\\n\\\n\\n\\\nuniform sampler2D colorTexture;\\n\\\n\\n\\\n#ifdef USE_STEP_SIZE\\n\\\nuniform float stepSize;\\n\\\n#else\\n\\\nuniform vec2 step;\\n\\\n#endif\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n// Incremental Computation of the Gaussian:\\n\\\n// https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec2 st = v_textureCoordinates;\\n\\\n vec2 dir = vec2(1.0 - direction, direction);\\n\\\n\\n\\\n#ifdef USE_STEP_SIZE\\n\\\n vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));\\n\\\n#else\\n\\\n vec2 step = step;\\n\\\n#endif\\n\\\n\\n\\\n vec3 g;\\n\\\n g.x = 1.0 / (sqrt(czm_twoPi) * sigma);\\n\\\n g.y = exp((-0.5 * delta * delta) / (sigma * sigma));\\n\\\n g.z = g.y * g.y;\\n\\\n\\n\\\n vec4 result = texture2D(colorTexture, st) * g.x;\\n\\\n for (int i = 1; i < SAMPLES; ++i)\\n\\\n {\\n\\\n g.xy *= g.yz;\\n\\\n\\n\\\n vec2 offset = float(i) * dir * step;\\n\\\n result += texture2D(colorTexture, st - offset) * g.x;\\n\\\n result += texture2D(colorTexture, st + offset) * g.x;\\n\\\n }\\n\\\n\\n\\\n gl_FragColor = result;\\n\\\n}\\n\\\n\";\n","import Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * A collection of {@link PostProcessStage}s or other post-process composite stages that execute together logically.\n * <p>\n * All stages are executed in the order of the array. The input texture changes based on the value of <code>inputPreviousStageTexture</code>.\n * If <code>inputPreviousStageTexture</code> is <code>true</code>, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it.\n * If <code>inputPreviousStageTexture</code> is <code>false</code>, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene\n * or the output texture of the previous stage.\n * </p>\n *\n * @alias PostProcessStageComposite\n * @constructor\n *\n * @param {Object} options An object with the following properties:\n * @param {Array} options.stages An array of {@link PostProcessStage}s or composites to be executed in order.\n * @param {Boolean} [options.inputPreviousStageTexture=true] Whether to execute each post-process stage where the input to one stage is the output of the previous. Otherwise, the input to each contained stage is the output of the stage that executed before the composite.\n * @param {String} [options.name=createGuid()] The unique name of this post-process stage for reference by other composites. If a name is not supplied, a GUID will be generated.\n * @param {Object} [options.uniforms] An alias to the uniforms of post-process stages.\n *\n * @exception {DeveloperError} options.stages.length must be greater than 0.0.\n *\n * @see PostProcessStage\n *\n * @example\n * // Example 1: separable blur filter\n * // The input to blurXDirection is the texture rendered to by the scene or the output of the previous stage.\n * // The input to blurYDirection is the texture rendered to by blurXDirection.\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n * stages : [blurXDirection, blurYDirection]\n * }));\n *\n * @example\n * // Example 2: referencing the output of another post-process stage\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n * inputPreviousStageTexture : false,\n * stages : [\n * // The same as Example 1.\n * new Cesium.PostProcessStageComposite({\n * inputPreviousStageTexture : true\n * stages : [blurXDirection, blurYDirection],\n * name : 'blur'\n * }),\n * // The input texture for this stage is the same input texture to blurXDirection since inputPreviousStageTexture is false\n * new Cesium.PostProcessStage({\n * fragmentShader : compositeShader,\n * uniforms : {\n * blurTexture : 'blur' // The output of the composite with name 'blur' (the texture that blurYDirection rendered to).\n * }\n * })\n * ]\n * });\n *\n * @example\n * // Example 3: create a uniform alias\n * var uniforms = {};\n * Cesium.defineProperties(uniforms, {\n * filterSize : {\n * get : function() {\n * return blurXDirection.uniforms.filterSize;\n * },\n * set : function(value) {\n * blurXDirection.uniforms.filterSize = blurYDirection.uniforms.filterSize = value;\n * }\n * }\n * });\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n * stages : [blurXDirection, blurYDirection],\n * uniforms : uniforms\n * }));\n */\nfunction PostProcessStageComposite(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"options.stages\", options.stages);\n Check.typeOf.number.greaterThan(\n \"options.stages.length\",\n options.stages.length,\n 0\n );\n //>>includeEnd('debug');\n\n this._stages = options.stages;\n this._inputPreviousStageTexture = defaultValue(\n options.inputPreviousStageTexture,\n true\n );\n\n var name = options.name;\n if (!defined(name)) {\n name = createGuid();\n }\n this._name = name;\n\n this._uniforms = options.uniforms;\n\n // used by PostProcessStageCollection\n this._textureCache = undefined;\n this._index = undefined;\n\n this._selected = undefined;\n this._selectedShadow = undefined;\n this._parentSelected = undefined;\n this._parentSelectedShadow = undefined;\n this._combinedSelected = undefined;\n this._combinedSelectedShadow = undefined;\n this._selectedLength = 0;\n this._parentSelectedLength = 0;\n this._selectedDirty = true;\n}\n\nObject.defineProperties(PostProcessStageComposite.prototype, {\n /**\n * Determines if this post-process stage is ready to be executed.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n if (!stages[i].ready) {\n return false;\n }\n }\n return true;\n },\n },\n /**\n * The unique name of this post-process stage for reference by other stages in a PostProcessStageComposite.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {String}\n * @readonly\n */\n name: {\n get: function () {\n return this._name;\n },\n },\n /**\n * Whether or not to execute this post-process stage when ready.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {Boolean}\n */\n enabled: {\n get: function () {\n return this._stages[0].enabled;\n },\n set: function (value) {\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n stages[i].enabled = value;\n }\n },\n },\n /**\n * An alias to the uniform values of the post-process stages. May be <code>undefined</code>; in which case, get each stage to set uniform values.\n * @memberof PostProcessStageComposite.prototype\n * @type {Object}\n */\n uniforms: {\n get: function () {\n return this._uniforms;\n },\n },\n /**\n * All post-process stages are executed in the order of the array. The input texture changes based on the value of <code>inputPreviousStageTexture</code>.\n * If <code>inputPreviousStageTexture</code> is <code>true</code>, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it.\n * If <code>inputPreviousStageTexture</code> is <code>false</code>, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene\n * or the output texture of the previous stage.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {Boolean}\n * @readonly\n */\n inputPreviousStageTexture: {\n get: function () {\n return this._inputPreviousStageTexture;\n },\n },\n /**\n * The number of post-process stages in this composite.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._stages.length;\n },\n },\n /**\n * The features selected for applying the post-process.\n *\n * @memberof PostProcessStageComposite.prototype\n * @type {Array}\n */\n selected: {\n get: function () {\n return this._selected;\n },\n set: function (value) {\n this._selected = value;\n },\n },\n /**\n * @private\n */\n parentSelected: {\n get: function () {\n return this._parentSelected;\n },\n set: function (value) {\n this._parentSelected = value;\n },\n },\n});\n\n/**\n * @private\n */\nPostProcessStageComposite.prototype._isSupported = function (context) {\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n if (!stages[i]._isSupported(context)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Gets the post-process stage at <code>index</code>\n *\n * @param {Number} index The index of the post-process stage or composite.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage or composite at index.\n *\n * @exception {DeveloperError} index must be greater than or equal to 0.\n * @exception {DeveloperError} index must be less than {@link PostProcessStageComposite#length}.\n */\nPostProcessStageComposite.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThan(\"index\", index, this.length);\n //>>includeEnd('debug');\n return this._stages[index];\n};\n\nfunction isSelectedTextureDirty(stage) {\n var length = defined(stage._selected) ? stage._selected.length : 0;\n var parentLength = defined(stage._parentSelected) ? stage._parentSelected : 0;\n var dirty =\n stage._selected !== stage._selectedShadow ||\n length !== stage._selectedLength;\n dirty =\n dirty ||\n stage._parentSelected !== stage._parentSelectedShadow ||\n parentLength !== stage._parentSelectedLength;\n\n if (defined(stage._selected) && defined(stage._parentSelected)) {\n stage._combinedSelected = stage._selected.concat(stage._parentSelected);\n } else if (defined(stage._parentSelected)) {\n stage._combinedSelected = stage._parentSelected;\n } else {\n stage._combinedSelected = stage._selected;\n }\n\n if (!dirty && defined(stage._combinedSelected)) {\n if (!defined(stage._combinedSelectedShadow)) {\n return true;\n }\n\n length = stage._combinedSelected.length;\n for (var i = 0; i < length; ++i) {\n if (stage._combinedSelected[i] !== stage._combinedSelectedShadow[i]) {\n return true;\n }\n }\n }\n return dirty;\n}\n\n/**\n * A function that will be called before execute. Updates each post-process stage in the composite.\n * @param {Context} context The context.\n * @param {Boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n * @private\n */\nPostProcessStageComposite.prototype.update = function (context, useLogDepth) {\n this._selectedDirty = isSelectedTextureDirty(this);\n\n this._selectedShadow = this._selected;\n this._parentSelectedShadow = this._parentSelected;\n this._combinedSelectedShadow = this._combinedSelected;\n this._selectedLength = defined(this._selected) ? this._selected.length : 0;\n this._parentSelectedLength = defined(this._parentSelected)\n ? this._parentSelected.length\n : 0;\n\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n var stage = stages[i];\n if (this._selectedDirty) {\n stage.parentSelected = this._combinedSelected;\n }\n stage.update(context, useLogDepth);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageComposite#destroy\n */\nPostProcessStageComposite.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageComposite#isDestroyed\n */\nPostProcessStageComposite.prototype.destroy = function () {\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n stages[i].destroy();\n }\n return destroyObject(this);\n};\nexport default PostProcessStageComposite;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport AcesTonemapping from \"../Shaders/PostProcessStages/AcesTonemappingStage.js\";\nimport AmbientOcclusionGenerate from \"../Shaders/PostProcessStages/AmbientOcclusionGenerate.js\";\nimport AmbientOcclusionModulate from \"../Shaders/PostProcessStages/AmbientOcclusionModulate.js\";\nimport BlackAndWhite from \"../Shaders/PostProcessStages/BlackAndWhite.js\";\nimport BloomComposite from \"../Shaders/PostProcessStages/BloomComposite.js\";\nimport Brightness from \"../Shaders/PostProcessStages/Brightness.js\";\nimport ContrastBias from \"../Shaders/PostProcessStages/ContrastBias.js\";\nimport DepthOfField from \"../Shaders/PostProcessStages/DepthOfField.js\";\nimport DepthView from \"../Shaders/PostProcessStages/DepthView.js\";\nimport EdgeDetection from \"../Shaders/PostProcessStages/EdgeDetection.js\";\nimport FilmicTonemapping from \"../Shaders/PostProcessStages/FilmicTonemapping.js\";\nimport FXAA from \"../Shaders/PostProcessStages/FXAA.js\";\nimport GaussianBlur1D from \"../Shaders/PostProcessStages/GaussianBlur1D.js\";\nimport LensFlare from \"../Shaders/PostProcessStages/LensFlare.js\";\nimport ModifiedReinhardTonemapping from \"../Shaders/PostProcessStages/ModifiedReinhardTonemapping.js\";\nimport NightVision from \"../Shaders/PostProcessStages/NightVision.js\";\nimport ReinhardTonemapping from \"../Shaders/PostProcessStages/ReinhardTonemapping.js\";\nimport Silhouette from \"../Shaders/PostProcessStages/Silhouette.js\";\nimport FXAA3_11 from \"../ThirdParty/Shaders/FXAA3_11.js\";\nimport AutoExposure from \"./AutoExposure.js\";\nimport PostProcessStage from \"./PostProcessStage.js\";\nimport PostProcessStageComposite from \"./PostProcessStageComposite.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\n\n/**\n * Contains functions for creating common post-process stages.\n *\n * @namespace PostProcessStageLibrary\n */\nvar PostProcessStageLibrary = {};\n\nfunction createBlur(name) {\n var delta = 1.0;\n var sigma = 2.0;\n var stepSize = 1.0;\n\n var blurShader = \"#define USE_STEP_SIZE\\n\" + GaussianBlur1D;\n var blurX = new PostProcessStage({\n name: name + \"_x_direction\",\n fragmentShader: blurShader,\n uniforms: {\n delta: delta,\n sigma: sigma,\n stepSize: stepSize,\n direction: 0.0,\n },\n sampleMode: PostProcessStageSampleMode.LINEAR,\n });\n var blurY = new PostProcessStage({\n name: name + \"_y_direction\",\n fragmentShader: blurShader,\n uniforms: {\n delta: delta,\n sigma: sigma,\n stepSize: stepSize,\n direction: 1.0,\n },\n sampleMode: PostProcessStageSampleMode.LINEAR,\n });\n\n var uniforms = {};\n Object.defineProperties(uniforms, {\n delta: {\n get: function () {\n return blurX.uniforms.delta;\n },\n set: function (value) {\n var blurXUniforms = blurX.uniforms;\n var blurYUniforms = blurY.uniforms;\n blurXUniforms.delta = blurYUniforms.delta = value;\n },\n },\n sigma: {\n get: function () {\n return blurX.uniforms.sigma;\n },\n set: function (value) {\n var blurXUniforms = blurX.uniforms;\n var blurYUniforms = blurY.uniforms;\n blurXUniforms.sigma = blurYUniforms.sigma = value;\n },\n },\n stepSize: {\n get: function () {\n return blurX.uniforms.stepSize;\n },\n set: function (value) {\n var blurXUniforms = blurX.uniforms;\n var blurYUniforms = blurY.uniforms;\n blurXUniforms.stepSize = blurYUniforms.stepSize = value;\n },\n },\n });\n return new PostProcessStageComposite({\n name: name,\n stages: [blurX, blurY],\n uniforms: uniforms,\n });\n}\n\n/**\n * Creates a post-process stage that applies a Gaussian blur to the input texture. This stage is usually applied in conjunction with another stage.\n * <p>\n * This stage has the following uniforms: <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <p>\n * <code>delta</code> and <code>sigma</code> are used to compute the weights of a Gaussian filter. The equation is <code>exp((-0.5 * delta * delta) / (sigma * sigma))</code>.\n * The default value for <code>delta</code> is <code>1.0</code>. The default value for <code>sigma</code> is <code>2.0</code>.\n * <code>stepSize</code> is the distance to the next texel. The default is <code>1.0</code>.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies a Gaussian blur to the input texture.\n */\nPostProcessStageLibrary.createBlurStage = function () {\n return createBlur(\"czm_blur\");\n};\n\n/**\n * Creates a post-process stage that applies a depth of field effect.\n * <p>\n * Depth of field simulates camera focus. Objects in the scene that are in focus\n * will be clear whereas objects not in focus will be blurred.\n * </p>\n * <p>\n * This stage has the following uniforms: <code>focalDistance</code>, <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <p>\n * <code>focalDistance</code> is the distance in meters from the camera to set the camera focus.\n * </p>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * The blur is applied to the areas out of focus.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies a depth of field effect.\n */\nPostProcessStageLibrary.createDepthOfFieldStage = function () {\n var blur = createBlur(\"czm_depth_of_field_blur\");\n var dof = new PostProcessStage({\n name: \"czm_depth_of_field_composite\",\n fragmentShader: DepthOfField,\n uniforms: {\n focalDistance: 5.0,\n blurTexture: blur.name,\n },\n });\n\n var uniforms = {};\n Object.defineProperties(uniforms, {\n focalDistance: {\n get: function () {\n return dof.uniforms.focalDistance;\n },\n set: function (value) {\n dof.uniforms.focalDistance = value;\n },\n },\n delta: {\n get: function () {\n return blur.uniforms.delta;\n },\n set: function (value) {\n blur.uniforms.delta = value;\n },\n },\n sigma: {\n get: function () {\n return blur.uniforms.sigma;\n },\n set: function (value) {\n blur.uniforms.sigma = value;\n },\n },\n stepSize: {\n get: function () {\n return blur.uniforms.stepSize;\n },\n set: function (value) {\n blur.uniforms.stepSize = value;\n },\n },\n });\n return new PostProcessStageComposite({\n name: \"czm_depth_of_field\",\n stages: [blur, dof],\n inputPreviousStageTexture: false,\n uniforms: uniforms,\n });\n};\n\n/**\n * Whether or not a depth of field stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {Boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isDepthOfFieldSupported = function (scene) {\n return scene.context.depthTexture;\n};\n\n/**\n * Creates a post-process stage that detects edges.\n * <p>\n * Writes the color to the output texture with alpha set to 1.0 when it is on an edge.\n * </p>\n * <p>\n * This stage has the following uniforms: <code>color</code> and <code>length</code>\n * </p>\n * <ul>\n * <li><code>color</code> is the color of the highlighted edge. The default is {@link Color#BLACK}.</li>\n * <li><code>length</code> is the length of the edges in pixels. The default is <code>0.5</code>.</li>\n * </ul>\n * <p>\n * This stage is not supported in 2D.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies an edge detection effect.\n *\n * @example\n * // multiple silhouette effects\n * var yellowEdge = Cesium.PostProcessLibrary.createEdgeDetectionStage();\n * yellowEdge.uniforms.color = Cesium.Color.YELLOW;\n * yellowEdge.selected = [feature0];\n *\n * var greenEdge = Cesium.PostProcessLibrary.createEdgeDetectionStage();\n * greenEdge.uniforms.color = Cesium.Color.LIME;\n * greenEdge.selected = [feature1];\n *\n * // draw edges around feature0 and feature1\n * postProcessStages.add(Cesium.PostProcessLibrary.createSilhouetteStage([yellowEdge, greenEdge]);\n */\nPostProcessStageLibrary.createEdgeDetectionStage = function () {\n // unique name generated on call so more than one effect can be added\n var name = createGuid();\n return new PostProcessStage({\n name: \"czm_edge_detection_\" + name,\n fragmentShader: EdgeDetection,\n uniforms: {\n length: 0.25,\n color: Color.clone(Color.BLACK),\n },\n });\n};\n\n/**\n * Whether or not an edge detection stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {Boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isEdgeDetectionSupported = function (scene) {\n return scene.context.depthTexture;\n};\n\nfunction getSilhouetteEdgeDetection(edgeDetectionStages) {\n if (!defined(edgeDetectionStages)) {\n return PostProcessStageLibrary.createEdgeDetectionStage();\n }\n\n var edgeDetection = new PostProcessStageComposite({\n name: \"czm_edge_detection_multiple\",\n stages: edgeDetectionStages,\n inputPreviousStageTexture: false,\n });\n\n var compositeUniforms = {};\n var fsDecl = \"\";\n var fsLoop = \"\";\n for (var i = 0; i < edgeDetectionStages.length; ++i) {\n fsDecl += \"uniform sampler2D edgeTexture\" + i + \"; \\n\";\n fsLoop +=\n \" vec4 edge\" +\n i +\n \" = texture2D(edgeTexture\" +\n i +\n \", v_textureCoordinates); \\n\" +\n \" if (edge\" +\n i +\n \".a > 0.0) \\n\" +\n \" { \\n\" +\n \" color = edge\" +\n i +\n \"; \\n\" +\n \" break; \\n\" +\n \" } \\n\";\n compositeUniforms[\"edgeTexture\" + i] = edgeDetectionStages[i].name;\n }\n\n var fs =\n fsDecl +\n \"varying vec2 v_textureCoordinates; \\n\" +\n \"void main() { \\n\" +\n \" vec4 color = vec4(0.0); \\n\" +\n \" for (int i = 0; i < \" +\n edgeDetectionStages.length +\n \"; i++) \\n\" +\n \" { \\n\" +\n fsLoop +\n \" } \\n\" +\n \" gl_FragColor = color; \\n\" +\n \"} \\n\";\n\n var edgeComposite = new PostProcessStage({\n name: \"czm_edge_detection_combine\",\n fragmentShader: fs,\n uniforms: compositeUniforms,\n });\n return new PostProcessStageComposite({\n name: \"czm_edge_detection_composite\",\n stages: [edgeDetection, edgeComposite],\n });\n}\n\n/**\n * Creates a post-process stage that applies a silhouette effect.\n * <p>\n * A silhouette effect composites the color from the edge detection pass with input color texture.\n * </p>\n * <p>\n * This stage has the following uniforms when <code>edgeDetectionStages</code> is <code>undefined</code>: <code>color</code> and <code>length</code>\n * </p>\n * <p>\n * <code>color</code> is the color of the highlighted edge. The default is {@link Color#BLACK}.\n * <code>length</code> is the length of the edges in pixels. The default is <code>0.5</code>.\n * </p>\n * @param {PostProcessStage[]} [edgeDetectionStages] An array of edge detection post process stages.\n * @return {PostProcessStageComposite} A post-process stage that applies a silhouette effect.\n */\nPostProcessStageLibrary.createSilhouetteStage = function (edgeDetectionStages) {\n var edgeDetection = getSilhouetteEdgeDetection(edgeDetectionStages);\n var silhouetteProcess = new PostProcessStage({\n name: \"czm_silhouette_color_edges\",\n fragmentShader: Silhouette,\n uniforms: {\n silhouetteTexture: edgeDetection.name,\n },\n });\n\n return new PostProcessStageComposite({\n name: \"czm_silhouette\",\n stages: [edgeDetection, silhouetteProcess],\n inputPreviousStageTexture: false,\n uniforms: edgeDetection.uniforms,\n });\n};\n\n/**\n * Whether or not a silhouette stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {Boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isSilhouetteSupported = function (scene) {\n return scene.context.depthTexture;\n};\n\n/**\n * Creates a post-process stage that applies a bloom effect to the input texture.\n * <p>\n * A bloom effect adds glow effect, makes bright areas brighter, and dark areas darker.\n * </p>\n * <p>\n * This post-process stage has the following uniforms: <code>contrast</code>, <code>brightness</code>, <code>glowOnly</code>,\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <ul>\n * <li><code>contrast</code> is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is <code>128.0</code>.</li>\n * <li><code>brightness</code> is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is\n * added to the brightness. The default value is <code>-0.3</code>.</li>\n * <li><code>glowOnly</code> is a boolean value. When <code>true</code>, only the glow effect will be shown. When <code>false</code>, the glow will be added to the input texture.\n * The default value is <code>false</code>. This is a debug option for viewing the effects when changing the other uniform values.</li>\n * </ul>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage to applies a bloom effect.\n *\n * @private\n */\nPostProcessStageLibrary.createBloomStage = function () {\n var contrastBias = new PostProcessStage({\n name: \"czm_bloom_contrast_bias\",\n fragmentShader: ContrastBias,\n uniforms: {\n contrast: 128.0,\n brightness: -0.3,\n },\n });\n var blur = createBlur(\"czm_bloom_blur\");\n var generateComposite = new PostProcessStageComposite({\n name: \"czm_bloom_contrast_bias_blur\",\n stages: [contrastBias, blur],\n });\n\n var bloomComposite = new PostProcessStage({\n name: \"czm_bloom_generate_composite\",\n fragmentShader: BloomComposite,\n uniforms: {\n glowOnly: false,\n bloomTexture: generateComposite.name,\n },\n });\n\n var uniforms = {};\n Object.defineProperties(uniforms, {\n glowOnly: {\n get: function () {\n return bloomComposite.uniforms.glowOnly;\n },\n set: function (value) {\n bloomComposite.uniforms.glowOnly = value;\n },\n },\n contrast: {\n get: function () {\n return contrastBias.uniforms.contrast;\n },\n set: function (value) {\n contrastBias.uniforms.contrast = value;\n },\n },\n brightness: {\n get: function () {\n return contrastBias.uniforms.brightness;\n },\n set: function (value) {\n contrastBias.uniforms.brightness = value;\n },\n },\n delta: {\n get: function () {\n return blur.uniforms.delta;\n },\n set: function (value) {\n blur.uniforms.delta = value;\n },\n },\n sigma: {\n get: function () {\n return blur.uniforms.sigma;\n },\n set: function (value) {\n blur.uniforms.sigma = value;\n },\n },\n stepSize: {\n get: function () {\n return blur.uniforms.stepSize;\n },\n set: function (value) {\n blur.uniforms.stepSize = value;\n },\n },\n });\n\n return new PostProcessStageComposite({\n name: \"czm_bloom\",\n stages: [generateComposite, bloomComposite],\n inputPreviousStageTexture: false,\n uniforms: uniforms,\n });\n};\n\n/**\n * Creates a post-process stage that Horizon-based Ambient Occlusion (HBAO) to the input texture.\n * <p>\n * Ambient occlusion simulates shadows from ambient light. These shadows would always be present when the\n * surface receives light and regardless of the light's position.\n * </p>\n * <p>\n * The uniforms have the following properties: <code>intensity</code>, <code>bias</code>, <code>lengthCap</code>,\n * <code>stepSize</code>, <code>frustumLength</code>, <code>randomTexture</code>, <code>ambientOcclusionOnly</code>,\n * <code>delta</code>, <code>sigma</code>, and <code>blurStepSize</code>.\n * </p>\n * <ul>\n * <li><code>intensity</code> is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is <code>3.0</code>.</li>\n * <li><code>bias</code> is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value,\n * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is <code>0.1</code>.</li>\n * <li><code>lengthCap</code> is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value,\n * sampling stops in the current direction. The default value is <code>0.26</code>.</li>\n * <li><code>stepSize</code> is a scalar value indicating the distance to the next texel sample in the current direction. The default value is <code>1.95</code>.</li>\n * <li><code>frustumLength</code> is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment.\n * The default value is <code>1000.0</code>.</li>\n * <li><code>randomTexture</code> is a texture where the red channel is a random value in [0.0, 1.0]. The default value is <code>undefined</code>. This texture needs to be set.</li>\n * <li><code>ambientOcclusionOnly</code> is a boolean value. When <code>true</code>, only the shadows generated are written to the output. When <code>false</code>, the input texture is modulated\n * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is <code>false</code>.</li>\n * </ul>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>blurStepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * The blur is applied to the shadows generated from the image to make them smoother.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies an ambient occlusion effect.\n *\n * @private\n */\nPostProcessStageLibrary.createAmbientOcclusionStage = function () {\n var generate = new PostProcessStage({\n name: \"czm_ambient_occlusion_generate\",\n fragmentShader: AmbientOcclusionGenerate,\n uniforms: {\n intensity: 3.0,\n bias: 0.1,\n lengthCap: 0.26,\n stepSize: 1.95,\n frustumLength: 1000.0,\n randomTexture: undefined,\n },\n });\n var blur = createBlur(\"czm_ambient_occlusion_blur\");\n blur.uniforms.stepSize = 0.86;\n var generateAndBlur = new PostProcessStageComposite({\n name: \"czm_ambient_occlusion_generate_blur\",\n stages: [generate, blur],\n });\n\n var ambientOcclusionModulate = new PostProcessStage({\n name: \"czm_ambient_occlusion_composite\",\n fragmentShader: AmbientOcclusionModulate,\n uniforms: {\n ambientOcclusionOnly: false,\n ambientOcclusionTexture: generateAndBlur.name,\n },\n });\n\n var uniforms = {};\n Object.defineProperties(uniforms, {\n intensity: {\n get: function () {\n return generate.uniforms.intensity;\n },\n set: function (value) {\n generate.uniforms.intensity = value;\n },\n },\n bias: {\n get: function () {\n return generate.uniforms.bias;\n },\n set: function (value) {\n generate.uniforms.bias = value;\n },\n },\n lengthCap: {\n get: function () {\n return generate.uniforms.lengthCap;\n },\n set: function (value) {\n generate.uniforms.lengthCap = value;\n },\n },\n stepSize: {\n get: function () {\n return generate.uniforms.stepSize;\n },\n set: function (value) {\n generate.uniforms.stepSize = value;\n },\n },\n frustumLength: {\n get: function () {\n return generate.uniforms.frustumLength;\n },\n set: function (value) {\n generate.uniforms.frustumLength = value;\n },\n },\n randomTexture: {\n get: function () {\n return generate.uniforms.randomTexture;\n },\n set: function (value) {\n generate.uniforms.randomTexture = value;\n },\n },\n delta: {\n get: function () {\n return blur.uniforms.delta;\n },\n set: function (value) {\n blur.uniforms.delta = value;\n },\n },\n sigma: {\n get: function () {\n return blur.uniforms.sigma;\n },\n set: function (value) {\n blur.uniforms.sigma = value;\n },\n },\n blurStepSize: {\n get: function () {\n return blur.uniforms.stepSize;\n },\n set: function (value) {\n blur.uniforms.stepSize = value;\n },\n },\n ambientOcclusionOnly: {\n get: function () {\n return ambientOcclusionModulate.uniforms.ambientOcclusionOnly;\n },\n set: function (value) {\n ambientOcclusionModulate.uniforms.ambientOcclusionOnly = value;\n },\n },\n });\n\n return new PostProcessStageComposite({\n name: \"czm_ambient_occlusion\",\n stages: [generateAndBlur, ambientOcclusionModulate],\n inputPreviousStageTexture: false,\n uniforms: uniforms,\n });\n};\n\n/**\n * Whether or not an ambient occlusion stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {Boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isAmbientOcclusionSupported = function (scene) {\n return scene.context.depthTexture;\n};\n\nvar fxaaFS = \"#define FXAA_QUALITY_PRESET 39 \\n\" + FXAA3_11 + \"\\n\" + FXAA;\n\n/**\n * Creates a post-process stage that applies Fast Approximate Anti-aliasing (FXAA) to the input texture.\n * @return {PostProcessStage} A post-process stage that applies Fast Approximate Anti-aliasing to the input texture.\n *\n * @private\n */\nPostProcessStageLibrary.createFXAAStage = function () {\n return new PostProcessStage({\n name: \"czm_FXAA\",\n fragmentShader: fxaaFS,\n sampleMode: PostProcessStageSampleMode.LINEAR,\n });\n};\n\n/**\n * Creates a post-process stage that applies ACES tonemapping operator.\n * @param {Boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies ACES tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createAcesTonemappingStage = function (\n useAutoExposure\n) {\n var fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n fs += AcesTonemapping;\n return new PostProcessStage({\n name: \"czm_aces\",\n fragmentShader: fs,\n uniforms: {\n autoExposure: undefined,\n },\n });\n};\n\n/**\n * Creates a post-process stage that applies filmic tonemapping operator.\n * @param {Boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies filmic tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createFilmicTonemappingStage = function (\n useAutoExposure\n) {\n var fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n fs += FilmicTonemapping;\n return new PostProcessStage({\n name: \"czm_filmic\",\n fragmentShader: fs,\n uniforms: {\n autoExposure: undefined,\n },\n });\n};\n\n/**\n * Creates a post-process stage that applies Reinhard tonemapping operator.\n * @param {Boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies Reinhard tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createReinhardTonemappingStage = function (\n useAutoExposure\n) {\n var fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n fs += ReinhardTonemapping;\n return new PostProcessStage({\n name: \"czm_reinhard\",\n fragmentShader: fs,\n uniforms: {\n autoExposure: undefined,\n },\n });\n};\n\n/**\n * Creates a post-process stage that applies modified Reinhard tonemapping operator.\n * @param {Boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies modified Reinhard tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createModifiedReinhardTonemappingStage = function (\n useAutoExposure\n) {\n var fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n fs += ModifiedReinhardTonemapping;\n return new PostProcessStage({\n name: \"czm_modified_reinhard\",\n fragmentShader: fs,\n uniforms: {\n white: Color.WHITE,\n autoExposure: undefined,\n },\n });\n};\n\n/**\n * Creates a post-process stage that finds the average luminance of the input texture.\n * @return {PostProcessStage} A post-process stage that finds the average luminance of the input texture.\n * @private\n */\nPostProcessStageLibrary.createAutoExposureStage = function () {\n return new AutoExposure();\n};\n\n/**\n * Creates a post-process stage that renders the input texture with black and white gradations.\n * <p>\n * This stage has one uniform value, <code>gradations</code>, which scales the luminance of each pixel.\n * </p>\n * @return {PostProcessStage} A post-process stage that renders the input texture with black and white gradations.\n */\nPostProcessStageLibrary.createBlackAndWhiteStage = function () {\n return new PostProcessStage({\n name: \"czm_black_and_white\",\n fragmentShader: BlackAndWhite,\n uniforms: {\n gradations: 5.0,\n },\n });\n};\n\n/**\n * Creates a post-process stage that saturates the input texture.\n * <p>\n * This stage has one uniform value, <code>brightness</code>, which scales the saturation of each pixel.\n * </p>\n * @return {PostProcessStage} A post-process stage that saturates the input texture.\n */\nPostProcessStageLibrary.createBrightnessStage = function () {\n return new PostProcessStage({\n name: \"czm_brightness\",\n fragmentShader: Brightness,\n uniforms: {\n brightness: 0.5,\n },\n });\n};\n\n/**\n * Creates a post-process stage that adds a night vision effect to the input texture.\n * @return {PostProcessStage} A post-process stage that adds a night vision effect to the input texture.\n */\nPostProcessStageLibrary.createNightVisionStage = function () {\n return new PostProcessStage({\n name: \"czm_night_vision\",\n fragmentShader: NightVision,\n });\n};\n\n/**\n * Creates a post-process stage that replaces the input color texture with a black and white texture representing the fragment depth at each pixel.\n * @return {PostProcessStage} A post-process stage that replaces the input color texture with a black and white texture representing the fragment depth at each pixel.\n *\n * @private\n */\nPostProcessStageLibrary.createDepthViewStage = function () {\n return new PostProcessStage({\n name: \"czm_depth_view\",\n fragmentShader: DepthView,\n });\n};\n\n/**\n * Creates a post-process stage that applies an effect simulating light flaring a camera lens.\n * <p>\n * This stage has the following uniforms: <code>dirtTexture</code>, <code>starTexture</code>, <code>intensity</code>, <code>distortion</code>, <code>ghostDispersal</code>,\n * <code>haloWidth</code>, <code>dirtAmount</code>, and <code>earthRadius</code>.\n * <ul>\n * <li><code>dirtTexture</code> is a texture sampled to simulate dirt on the lens.</li>\n * <li><code>starTexture</code> is the texture sampled for the star pattern of the flare.</li>\n * <li><code>intensity</code> is a scalar multiplied by the result of the lens flare. The default value is <code>2.0</code>.</li>\n * <li><code>distortion</code> is a scalar value that affects the chromatic effect distortion. The default value is <code>10.0</code>.</li>\n * <li><code>ghostDispersal</code> is a scalar indicating how far the halo effect is from the center of the texture. The default value is <code>0.4</code>.</li>\n * <li><code>haloWidth</code> is a scalar representing the width of the halo from the ghost dispersal. The default value is <code>0.4</code>.</li>\n * <li><code>dirtAmount</code> is a scalar representing the amount of dirt on the lens. The default value is <code>0.4</code>.</li>\n * <li><code>earthRadius</code> is the maximum radius of the earth. The default value is <code>Ellipsoid.WGS84.maximumRadius</code>.</li>\n * </ul>\n * </p>\n * @return {PostProcessStage} A post-process stage for applying a lens flare effect.\n */\nPostProcessStageLibrary.createLensFlareStage = function () {\n return new PostProcessStage({\n name: \"czm_lens_flare\",\n fragmentShader: LensFlare,\n uniforms: {\n dirtTexture: buildModuleUrl(\"Assets/Textures/LensFlare/DirtMask.jpg\"),\n starTexture: buildModuleUrl(\"Assets/Textures/LensFlare/StarBurst.jpg\"),\n intensity: 2.0,\n distortion: 10.0,\n ghostDispersal: 0.4,\n haloWidth: 0.4,\n dirtAmount: 0.4,\n earthRadius: Ellipsoid.WGS84.maximumRadius,\n },\n });\n};\nexport default PostProcessStageLibrary;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D blurTexture;\\n\\\nuniform sampler2D depthTexture;\\n\\\nuniform float focalDistance;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec4 toEye(vec2 uv, float depth)\\n\\\n{\\n\\\n vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\\n\\\n vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);\\n\\\n posInCamera = posInCamera / posInCamera.w;\\n\\\n return posInCamera;\\n\\\n}\\n\\\n\\n\\\nfloat computeDepthBlur(float depth)\\n\\\n{\\n\\\n float f;\\n\\\n if (depth < focalDistance)\\n\\\n {\\n\\\n f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);\\n\\\n f = pow(f, 0.1);\\n\\\n }\\n\\\n f *= f;\\n\\\n f = clamp(f, 0.0, 1.0);\\n\\\n return pow(f, 0.5);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n\\\n vec4 posInCamera = toEye(v_textureCoordinates, depth);\\n\\\n float d = computeDepthBlur(-posInCamera.z);\\n\\\n gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), texture2D(blurTexture, v_textureCoordinates), d);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D depthTexture;\\n\\\nuniform float length;\\n\\\nuniform vec4 color;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float directions[3];\\n\\\n directions[0] = -1.0;\\n\\\n directions[1] = 0.0;\\n\\\n directions[2] = 1.0;\\n\\\n\\n\\\n float scalars[3];\\n\\\n scalars[0] = 3.0;\\n\\\n scalars[1] = 10.0;\\n\\\n scalars[2] = 3.0;\\n\\\n\\n\\\n float padx = czm_pixelRatio / czm_viewport.z;\\n\\\n float pady = czm_pixelRatio / czm_viewport.w;\\n\\\n\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n bool selected = false;\\n\\\n for (int i = 0; i < 3; ++i)\\n\\\n {\\n\\\n float dir = directions[i];\\n\\\n selected = selected || czm_selected(vec2(-padx, dir * pady));\\n\\\n selected = selected || czm_selected(vec2(padx, dir * pady));\\n\\\n selected = selected || czm_selected(vec2(dir * padx, -pady));\\n\\\n selected = selected || czm_selected(vec2(dir * padx, pady));\\n\\\n if (selected)\\n\\\n {\\n\\\n break;\\n\\\n }\\n\\\n }\\n\\\n if (!selected)\\n\\\n {\\n\\\n gl_FragColor = vec4(color.rgb, 0.0);\\n\\\n return;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n float horizEdge = 0.0;\\n\\\n float vertEdge = 0.0;\\n\\\n\\n\\\n for (int i = 0; i < 3; ++i)\\n\\\n {\\n\\\n float dir = directions[i];\\n\\\n float scale = scalars[i];\\n\\\n\\n\\\n horizEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;\\n\\\n horizEdge += texture2D(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;\\n\\\n\\n\\\n vertEdge -= texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;\\n\\\n vertEdge += texture2D(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;\\n\\\n }\\n\\\n\\n\\\n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\\n\\\n gl_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D silhouetteTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec4 silhouetteColor = texture2D(silhouetteTexture, v_textureCoordinates);\\n\\\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n\\\n gl_FragColor = mix(color, silhouetteColor, silhouetteColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float contrast;\\n\\\nuniform float brightness;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec3 sceneColor = texture2D(colorTexture, v_textureCoordinates).xyz;\\n\\\n sceneColor = czm_RGBToHSB(sceneColor);\\n\\\n sceneColor.z += brightness;\\n\\\n sceneColor = czm_HSBToRGB(sceneColor);\\n\\\n\\n\\\n float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));\\n\\\n sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);\\n\\\n gl_FragColor = vec4(sceneColor, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D bloomTexture;\\n\\\nuniform bool glowOnly;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n\\\n\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n if (czm_selected()) {\\n\\\n gl_FragColor = color;\\n\\\n return;\\n\\\n }\\n\\\n#endif\\n\\\n\\n\\\n vec4 bloom = texture2D(bloomTexture, v_textureCoordinates);\\n\\\n gl_FragColor = glowOnly ? bloom : bloom + color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D randomTexture;\\n\\\nuniform sampler2D depthTexture;\\n\\\nuniform float intensity;\\n\\\nuniform float bias;\\n\\\nuniform float lengthCap;\\n\\\nuniform float stepSize;\\n\\\nuniform float frustumLength;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec4 clipToEye(vec2 uv, float depth)\\n\\\n{\\n\\\n vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\\n\\\n vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);\\n\\\n posEC = posEC / posEC.w;\\n\\\n return posEC;\\n\\\n}\\n\\\n\\n\\\n//Reconstruct Normal Without Edge Removation\\n\\\nvec3 getNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize)\\n\\\n{\\n\\\n vec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU);\\n\\\n vec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD);\\n\\\n vec4 posInCameraLeft = clipToEye(v_textureCoordinates - vec2(pixelSize.x, 0.0), depthL);\\n\\\n vec4 posInCameraRight = clipToEye(v_textureCoordinates + vec2(pixelSize.x, 0.0), depthR);\\n\\\n\\n\\\n vec3 up = posInCamera.xyz - posInCameraUp.xyz;\\n\\\n vec3 down = posInCameraDown.xyz - posInCamera.xyz;\\n\\\n vec3 left = posInCamera.xyz - posInCameraLeft.xyz;\\n\\\n vec3 right = posInCameraRight.xyz - posInCamera.xyz;\\n\\\n\\n\\\n vec3 DX = length(left) < length(right) ? left : right;\\n\\\n vec3 DY = length(up) < length(down) ? up : down;\\n\\\n\\n\\\n return normalize(cross(DY, DX));\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n\\\n vec4 posInCamera = clipToEye(v_textureCoordinates, depth);\\n\\\n\\n\\\n if (posInCamera.z > frustumLength)\\n\\\n {\\n\\\n gl_FragColor = vec4(1.0);\\n\\\n return;\\n\\\n }\\n\\\n\\n\\\n vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\\n\\\n float depthU = czm_readDepth(depthTexture, v_textureCoordinates - vec2(0.0, pixelSize.y));\\n\\\n float depthD = czm_readDepth(depthTexture, v_textureCoordinates + vec2(0.0, pixelSize.y));\\n\\\n float depthL = czm_readDepth(depthTexture, v_textureCoordinates - vec2(pixelSize.x, 0.0));\\n\\\n float depthR = czm_readDepth(depthTexture, v_textureCoordinates + vec2(pixelSize.x, 0.0));\\n\\\n vec3 normalInCamera = getNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize);\\n\\\n\\n\\\n float ao = 0.0;\\n\\\n vec2 sampleDirection = vec2(1.0, 0.0);\\n\\\n float gapAngle = 90.0 * czm_radiansPerDegree;\\n\\\n\\n\\\n // RandomNoise\\n\\\n float randomVal = texture2D(randomTexture, v_textureCoordinates).x;\\n\\\n\\n\\\n //Loop for each direction\\n\\\n for (int i = 0; i < 4; i++)\\n\\\n {\\n\\\n float newGapAngle = gapAngle * (float(i) + randomVal);\\n\\\n float cosVal = cos(newGapAngle);\\n\\\n float sinVal = sin(newGapAngle);\\n\\\n\\n\\\n //Rotate Sampling Direction\\n\\\n vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);\\n\\\n float localAO = 0.0;\\n\\\n float localStepSize = stepSize;\\n\\\n\\n\\\n //Loop for each step\\n\\\n for (int j = 0; j < 6; j++)\\n\\\n {\\n\\\n vec2 newCoords = v_textureCoordinates + rotatedSampleDirection * localStepSize * pixelSize;\\n\\\n\\n\\\n //Exception Handling\\n\\\n if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0)\\n\\\n {\\n\\\n break;\\n\\\n }\\n\\\n\\n\\\n float stepDepthInfo = czm_readDepth(depthTexture, newCoords);\\n\\\n vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo);\\n\\\n vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz;\\n\\\n float len = length(diffVec);\\n\\\n\\n\\\n if (len > lengthCap)\\n\\\n {\\n\\\n break;\\n\\\n }\\n\\\n\\n\\\n float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 );\\n\\\n float weight = len / lengthCap;\\n\\\n weight = 1.0 - weight * weight;\\n\\\n\\n\\\n if (dotVal < bias)\\n\\\n {\\n\\\n dotVal = 0.0;\\n\\\n }\\n\\\n\\n\\\n localAO = max(localAO, dotVal * weight);\\n\\\n localStepSize += stepSize;\\n\\\n }\\n\\\n ao += localAO;\\n\\\n }\\n\\\n\\n\\\n ao /= 4.0;\\n\\\n ao = 1.0 - clamp(ao, 0.0, 1.0);\\n\\\n ao = pow(ao, intensity);\\n\\\n gl_FragColor = vec4(vec3(ao), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D ambientOcclusionTexture;\\n\\\nuniform bool ambientOcclusionOnly;\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec3 color = texture2D(colorTexture, v_textureCoordinates).rgb;\\n\\\n vec3 ao = texture2D(ambientOcclusionTexture, v_textureCoordinates).rgb;\\n\\\n gl_FragColor.rgb = ambientOcclusionOnly ? ao : ao * color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 color = fragmentColor.rgb;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n color /= texture2D(autoExposure, vec2(0.5)).r;\\n\\\n#endif\\n\\\n color = czm_acesTonemapping(color);\\n\\\n color = czm_inverseGamma(color);\\n\\\n\\n\\\n gl_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#endif\\n\\\n\\n\\\n// See slides 142 and 143:\\n\\\n// http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 color = fragmentColor.rgb;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\\n\\\n color /= exposure;\\n\\\n#endif\\n\\\n\\n\\\n\tconst float A = 0.22; // shoulder strength\\n\\\n\tconst float B = 0.30; // linear strength\\n\\\n\tconst float C = 0.10; // linear angle\\n\\\n\tconst float D = 0.20; // toe strength\\n\\\n\tconst float E = 0.01; // toe numerator\\n\\\n\tconst float F = 0.30; // toe denominator\\n\\\n\\n\\\n\tconst float white = 11.2; // linear white point value\\n\\\n\\n\\\n\tvec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;\\n\\\n\tfloat w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;\\n\\\n\\n\\\n\tc = czm_inverseGamma(c / w);\\n\\\n\tgl_FragColor = vec4(c, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#endif\\n\\\n\\n\\\n// See equation 3:\\n\\\n// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 color = fragmentColor.rgb;\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\\n\\\n color /= exposure;\\n\\\n#endif\\n\\\n color = color / (1.0 + color);\\n\\\n color = czm_inverseGamma(color);\\n\\\n gl_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform vec3 white;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#endif\\n\\\n\\n\\\n// See equation 4:\\n\\\n// http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 fragmentColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 color = fragmentColor.rgb;\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n float exposure = texture2D(autoExposure, vec2(0.5)).r;\\n\\\n color /= exposure;\\n\\\n#endif\\n\\\n color = (color * (1.0 + color / white)) / (1.0 + color);\\n\\\n color = czm_inverseGamma(color);\\n\\\n gl_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float gradations;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n if (czm_selected()) {\\n\\\n gl_FragColor = vec4(rgb, 1.0);\\n\\\n return;\\n\\\n }\\n\\\n#endif\\n\\\n float luminance = czm_luminance(rgb);\\n\\\n float darkness = luminance * gradations;\\n\\\n darkness = (darkness - fract(darkness)) / gradations;\\n\\\n gl_FragColor = vec4(vec3(darkness), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float brightness;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\\n\\\n vec3 target = vec3(0.0);\\n\\\n gl_FragColor = vec4(mix(target, rgb, brightness), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nfloat rand(vec2 co)\\n\\\n{\\n\\\n return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;\\n\\\n vec3 rgb = texture2D(colorTexture, v_textureCoordinates).rgb;\\n\\\n vec3 green = vec3(0.0, 1.0, 0.0);\\n\\\n gl_FragColor = vec4((noiseValue + rgb) * green, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D depthTexture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n\\\n gl_FragColor = vec4(vec3(depth), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D dirtTexture;\\n\\\nuniform sampler2D starTexture;\\n\\\nuniform vec2 dirtTextureDimensions;\\n\\\nuniform float distortion;\\n\\\nuniform float ghostDispersal;\\n\\\nuniform float haloWidth;\\n\\\nuniform float dirtAmount;\\n\\\nuniform float earthRadius;\\n\\\nuniform float intensity;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\n// whether it is in space or not\\n\\\n// 6500000.0 is empirical value\\n\\\n#define DISTANCE_TO_SPACE 6500000.0\\n\\\n\\n\\\n// return ndc from world coordinate biased earthRadius\\n\\\nvec4 getNDCFromWC(vec3 WC, float earthRadius)\\n\\\n{\\n\\\n vec4 positionEC = czm_view * vec4(WC, 1.0);\\n\\\n positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);\\n\\\n vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);\\n\\\n}\\n\\\n\\n\\\n// Check if current pixel is included Earth\\n\\\n// if then mask it gradually\\n\\\nfloat isInEarth(vec2 texcoord, vec2 sceneSize)\\n\\\n{\\n\\\n vec2 NDC = texcoord * 2.0 - 1.0;\\n\\\n vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);\\n\\\n vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);\\n\\\n NDC.xy -= earthPosSC.xy;\\n\\\n\\n\\\n float X = abs(NDC.x) * sceneSize.x;\\n\\\n float Y = abs(NDC.y) * sceneSize.y;\\n\\\n\\n\\\n return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));\\n\\\n}\\n\\\n\\n\\\n// For Chromatic effect\\n\\\nvec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)\\n\\\n{\\n\\\n vec2 sceneSize = czm_viewport.zw;\\n\\\n vec3 color;\\n\\\n if(isSpace)\\n\\\n {\\n\\\n color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture2D(tex, texcoord + direction * distortion.r).r;\\n\\\n color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture2D(tex, texcoord + direction * distortion.g).g;\\n\\\n color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture2D(tex, texcoord + direction * distortion.b).b;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n color.r = texture2D(tex, texcoord + direction * distortion.r).r;\\n\\\n color.g = texture2D(tex, texcoord + direction * distortion.g).g;\\n\\\n color.b = texture2D(tex, texcoord + direction * distortion.b).b;\\n\\\n }\\n\\\n return vec4(clamp(color, 0.0, 1.0), 0.0);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec4 originalColor = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 rgb = originalColor.rgb;\\n\\\n bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;\\n\\\n\\n\\\n // Sun position\\n\\\n vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);\\n\\\n vec4 sunPositionEC = czm_view * sunPos;\\n\\\n vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);\\n\\\n sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);\\n\\\n\\n\\\n // If sun is not in the screen space, use original color.\\n\\\n if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))\\n\\\n {\\n\\\n // Lens flare is disabled when not in space until #5932 is fixed.\\n\\\n // https://github.com/CesiumGS/cesium/issues/5932\\n\\\n gl_FragColor = originalColor;\\n\\\n return;\\n\\\n }\\n\\\n\\n\\\n vec2 texcoord = vec2(1.0) - v_textureCoordinates;\\n\\\n vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\\n\\\n vec2 invPixelSize = 1.0 / pixelSize;\\n\\\n vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);\\n\\\n\\n\\\n // ghost vector to image centre:\\n\\\n vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;\\n\\\n vec3 direction = normalize(vec3(ghostVec, 0.0));\\n\\\n\\n\\\n // sample ghosts:\\n\\\n vec4 result = vec4(0.0);\\n\\\n vec4 ghost = vec4(0.0);\\n\\\n for (int i = 0; i < 4; ++i)\\n\\\n {\\n\\\n vec2 offset = fract(texcoord + ghostVec * float(i));\\n\\\n // Only bright spots from the centre of the source image\\n\\\n ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);\\n\\\n }\\n\\\n result += ghost;\\n\\\n\\n\\\n // sample halo\\n\\\n vec2 haloVec = normalize(ghostVec) * haloWidth;\\n\\\n float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\\n\\\n weightForHalo = pow(1.0 - weightForHalo, 5.0);\\n\\\n\\n\\\n result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;\\n\\\n\\n\\\n // dirt on lens\\n\\\n vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;\\n\\\n if (dirtTexCoords.x > 1.0)\\n\\\n {\\n\\\n dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x);\\n\\\n }\\n\\\n if (dirtTexCoords.y > 1.0)\\n\\\n {\\n\\\n dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y);\\n\\\n }\\n\\\n result += dirtAmount * texture2D(dirtTexture, dirtTexCoords);\\n\\\n\\n\\\n // Rotating starburst texture's coordinate\\n\\\n // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0))\\n\\\n float camrot = czm_view[0].z + czm_view[1].y;\\n\\\n float cosValue = cos(camrot);\\n\\\n float sinValue = sin(camrot);\\n\\\n mat3 rotation = mat3(\\n\\\n cosValue, -sinValue, 0.0,\\n\\\n sinValue, cosValue, 0.0,\\n\\\n 0.0, 0.0, 1.0\\n\\\n );\\n\\\n\\n\\\n vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);\\n\\\n vec3 st2 = vec3((rotation * st1).xy, 1.0);\\n\\\n vec3 st3 = st2 * 0.5 + vec3(0.5);\\n\\\n vec2 lensStarTexcoord = st3.xy;\\n\\\n float weightForLensFlare = length(vec3(sunPos.xy, 0.0));\\n\\\n float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);\\n\\\n\\n\\\n if (!isSpace)\\n\\\n {\\n\\\n result *= oneMinusWeightForLensFlare * intensity * 0.2;\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n result *= oneMinusWeightForLensFlare * intensity;\\n\\\n result *= texture2D(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;\\n\\\n }\\n\\\n\\n\\\n result += texture2D(colorTexture, v_textureCoordinates);\\n\\\n\\n\\\n gl_FragColor = result;\\n\\\n}\\n\\\n\";\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * Creates a minimal amount of textures and framebuffers.\n *\n * @alias PostProcessStageTextureCache\n * @constructor\n *\n * @param {PostProcessStageCollection} postProcessStageCollection The post process collection.\n *\n * @private\n */\nfunction PostProcessStageTextureCache(postProcessStageCollection) {\n this._collection = postProcessStageCollection;\n\n this._framebuffers = [];\n this._stageNameToFramebuffer = {};\n\n this._width = undefined;\n this._height = undefined;\n this._updateDependencies = false;\n}\n\nfunction getLastStageName(stage) {\n while (defined(stage.length)) {\n stage = stage.get(stage.length - 1);\n }\n return stage.name;\n}\n\nfunction getStageDependencies(\n collection,\n context,\n dependencies,\n stage,\n previousName\n) {\n if (!stage.enabled || !stage._isSupported(context)) {\n return previousName;\n }\n\n var stageDependencies = (dependencies[stage.name] = {});\n if (defined(previousName)) {\n var previous = collection.getStageByName(previousName);\n stageDependencies[getLastStageName(previous)] = true;\n }\n var uniforms = stage.uniforms;\n if (defined(uniforms)) {\n var uniformNames = Object.getOwnPropertyNames(uniforms);\n var uniformNamesLength = uniformNames.length;\n for (var i = 0; i < uniformNamesLength; ++i) {\n var value = uniforms[uniformNames[i]];\n if (typeof value === \"string\") {\n var dependent = collection.getStageByName(value);\n if (defined(dependent)) {\n stageDependencies[getLastStageName(dependent)] = true;\n }\n }\n }\n }\n\n return stage.name;\n}\n\nfunction getCompositeDependencies(\n collection,\n context,\n dependencies,\n composite,\n previousName\n) {\n if (\n (defined(composite.enabled) && !composite.enabled) ||\n (defined(composite._isSupported) && !composite._isSupported(context))\n ) {\n return previousName;\n }\n\n var originalDependency = previousName;\n\n var inSeries =\n !defined(composite.inputPreviousStageTexture) ||\n composite.inputPreviousStageTexture;\n var currentName = previousName;\n var length = composite.length;\n for (var i = 0; i < length; ++i) {\n var stage = composite.get(i);\n if (defined(stage.length)) {\n currentName = getCompositeDependencies(\n collection,\n context,\n dependencies,\n stage,\n previousName\n );\n } else {\n currentName = getStageDependencies(\n collection,\n context,\n dependencies,\n stage,\n previousName\n );\n }\n // Stages in a series only depend on the previous stage\n if (inSeries) {\n previousName = currentName;\n }\n }\n\n // Stages not in a series depend on every stage executed before it since it could reference it as a uniform.\n // This prevents looking at the dependencies of each stage in the composite, but might create more framebuffers than necessary.\n // In practice, there are only 2-3 stages in these composites.\n var j;\n var name;\n if (!inSeries) {\n for (j = 1; j < length; ++j) {\n name = getLastStageName(composite.get(j));\n var currentDependencies = dependencies[name];\n for (var k = 0; k < j; ++k) {\n currentDependencies[getLastStageName(composite.get(k))] = true;\n }\n }\n } else {\n for (j = 1; j < length; ++j) {\n name = getLastStageName(composite.get(j));\n if (!defined(dependencies[name])) {\n dependencies[name] = {};\n }\n dependencies[name][originalDependency] = true;\n }\n }\n\n return currentName;\n}\n\nfunction getDependencies(collection, context) {\n var dependencies = {};\n\n if (defined(collection.ambientOcclusion)) {\n var ao = collection.ambientOcclusion;\n var bloom = collection.bloom;\n var tonemapping = collection._tonemapping;\n var fxaa = collection.fxaa;\n\n var previousName = getCompositeDependencies(\n collection,\n context,\n dependencies,\n ao,\n undefined\n );\n previousName = getCompositeDependencies(\n collection,\n context,\n dependencies,\n bloom,\n previousName\n );\n previousName = getStageDependencies(\n collection,\n context,\n dependencies,\n tonemapping,\n previousName\n );\n previousName = getCompositeDependencies(\n collection,\n context,\n dependencies,\n collection,\n previousName\n );\n getStageDependencies(collection, context, dependencies, fxaa, previousName);\n } else {\n getCompositeDependencies(\n collection,\n context,\n dependencies,\n collection,\n undefined\n );\n }\n\n return dependencies;\n}\n\nfunction getFramebuffer(cache, stageName, dependencies) {\n var collection = cache._collection;\n var stage = collection.getStageByName(stageName);\n\n var textureScale = stage._textureScale;\n var forcePowerOfTwo = stage._forcePowerOfTwo;\n var pixelFormat = stage._pixelFormat;\n var pixelDatatype = stage._pixelDatatype;\n var clearColor = stage._clearColor;\n\n var i;\n var framebuffer;\n var framebuffers = cache._framebuffers;\n var length = framebuffers.length;\n for (i = 0; i < length; ++i) {\n framebuffer = framebuffers[i];\n\n if (\n textureScale !== framebuffer.textureScale ||\n forcePowerOfTwo !== framebuffer.forcePowerOfTwo ||\n pixelFormat !== framebuffer.pixelFormat ||\n pixelDatatype !== framebuffer.pixelDatatype ||\n !Color.equals(clearColor, framebuffer.clearColor)\n ) {\n continue;\n }\n\n var stageNames = framebuffer.stages;\n var stagesLength = stageNames.length;\n var foundConflict = false;\n for (var j = 0; j < stagesLength; ++j) {\n if (dependencies[stageNames[j]]) {\n foundConflict = true;\n break;\n }\n }\n\n if (!foundConflict) {\n break;\n }\n }\n\n if (defined(framebuffer) && i < length) {\n framebuffer.stages.push(stageName);\n return framebuffer;\n }\n\n framebuffer = {\n textureScale: textureScale,\n forcePowerOfTwo: forcePowerOfTwo,\n pixelFormat: pixelFormat,\n pixelDatatype: pixelDatatype,\n clearColor: clearColor,\n stages: [stageName],\n buffer: undefined,\n clear: undefined,\n };\n\n framebuffers.push(framebuffer);\n return framebuffer;\n}\n\nfunction createFramebuffers(cache, context) {\n var dependencies = getDependencies(cache._collection, context);\n for (var stageName in dependencies) {\n if (dependencies.hasOwnProperty(stageName)) {\n cache._stageNameToFramebuffer[stageName] = getFramebuffer(\n cache,\n stageName,\n dependencies[stageName]\n );\n }\n }\n}\n\nfunction releaseResources(cache) {\n var framebuffers = cache._framebuffers;\n var length = framebuffers.length;\n for (var i = 0; i < length; ++i) {\n var framebuffer = framebuffers[i];\n framebuffer.buffer = framebuffer.buffer && framebuffer.buffer.destroy();\n framebuffer.buffer = undefined;\n }\n}\n\nfunction updateFramebuffers(cache, context) {\n var width = cache._width;\n var height = cache._height;\n\n var framebuffers = cache._framebuffers;\n var length = framebuffers.length;\n for (var i = 0; i < length; ++i) {\n var framebuffer = framebuffers[i];\n\n var scale = framebuffer.textureScale;\n var textureWidth = Math.ceil(width * scale);\n var textureHeight = Math.ceil(height * scale);\n\n var size = Math.min(textureWidth, textureHeight);\n if (framebuffer.forcePowerOfTwo) {\n if (!CesiumMath.isPowerOfTwo(size)) {\n size = CesiumMath.nextPowerOfTwo(size);\n }\n textureWidth = size;\n textureHeight = size;\n }\n\n framebuffer.buffer = new Framebuffer({\n context: context,\n colorTextures: [\n new Texture({\n context: context,\n width: textureWidth,\n height: textureHeight,\n pixelFormat: framebuffer.pixelFormat,\n pixelDatatype: framebuffer.pixelDatatype,\n }),\n ],\n });\n framebuffer.clear = new ClearCommand({\n color: framebuffer.clearColor,\n framebuffer: framebuffer.buffer,\n });\n }\n}\n\nPostProcessStageTextureCache.prototype.updateDependencies = function () {\n this._updateDependencies = true;\n};\n\n/**\n * Called before the stages in the collection are executed. Creates the minimum amount of framebuffers for a post-process collection.\n *\n * @param {Context} context The context.\n */\nPostProcessStageTextureCache.prototype.update = function (context) {\n var collection = this._collection;\n var updateDependencies = this._updateDependencies;\n var aoEnabled =\n defined(collection.ambientOcclusion) &&\n collection.ambientOcclusion.enabled &&\n collection.ambientOcclusion._isSupported(context);\n var bloomEnabled =\n defined(collection.bloom) &&\n collection.bloom.enabled &&\n collection.bloom._isSupported(context);\n var tonemappingEnabled =\n defined(collection._tonemapping) &&\n collection._tonemapping.enabled &&\n collection._tonemapping._isSupported(context);\n var fxaaEnabled =\n defined(collection.fxaa) &&\n collection.fxaa.enabled &&\n collection.fxaa._isSupported(context);\n var needsCheckDimensionsUpdate =\n !defined(collection._activeStages) ||\n collection._activeStages.length > 0 ||\n aoEnabled ||\n bloomEnabled ||\n tonemappingEnabled ||\n fxaaEnabled;\n if (\n updateDependencies ||\n (!needsCheckDimensionsUpdate && this._framebuffers.length > 0)\n ) {\n releaseResources(this);\n this._framebuffers.length = 0;\n this._stageNameToFramebuffer = {};\n this._width = undefined;\n this._height = undefined;\n }\n\n if (!updateDependencies && !needsCheckDimensionsUpdate) {\n return;\n }\n\n if (this._framebuffers.length === 0) {\n createFramebuffers(this, context);\n }\n\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n var dimensionsChanged = this._width !== width || this._height !== height;\n if (!updateDependencies && !dimensionsChanged) {\n return;\n }\n\n this._width = width;\n this._height = height;\n this._updateDependencies = false;\n releaseResources(this);\n updateFramebuffers(this, context);\n};\n\n/**\n * Clears all of the framebuffers.\n *\n * @param {Context} context The context.\n */\nPostProcessStageTextureCache.prototype.clear = function (context) {\n var framebuffers = this._framebuffers;\n for (var i = 0; i < framebuffers.length; ++i) {\n framebuffers[i].clear.execute(context);\n }\n};\n\n/**\n * Gets the stage with the given name.\n * @param {String} name The name of the stage.\n * @return {PostProcessStage|PostProcessStageComposite}\n */\nPostProcessStageTextureCache.prototype.getStageByName = function (name) {\n return this._collection.getStageByName(name);\n};\n\n/**\n * Gets the output texture for a stage with the given name.\n * @param {String} name The name of the stage.\n * @return {Texture|undefined} The output texture of the stage with the given name.\n */\nPostProcessStageTextureCache.prototype.getOutputTexture = function (name) {\n return this._collection.getOutputTexture(name);\n};\n\n/**\n * Gets the framebuffer for a stage with the given name.\n *\n * @param {String} name The name of the stage.\n * @return {Framebuffer|undefined} The framebuffer for the stage with the given name.\n */\nPostProcessStageTextureCache.prototype.getFramebuffer = function (name) {\n var framebuffer = this._stageNameToFramebuffer[name];\n if (!defined(framebuffer)) {\n return undefined;\n }\n return framebuffer.buffer;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageTextureCache#destroy\n */\nPostProcessStageTextureCache.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageTextureCache#isDestroyed\n */\nPostProcessStageTextureCache.prototype.destroy = function () {\n releaseResources(this);\n return destroyObject(this);\n};\nexport default PostProcessStageTextureCache;\n","/**\n * A tonemapping algorithm when rendering with high dynamic range.\n *\n * @enum {Number}\n * @private\n */\nvar Tonemapper = {\n /**\n * Use the Reinhard tonemapping operator.\n *\n * @type {Number}\n * @constant\n */\n REINHARD: 0,\n\n /**\n * Use the modified Reinhard tonemapping operator.\n *\n * @type {Number}\n * @constant\n */\n MODIFIED_REINHARD: 1,\n\n /**\n * Use the Filmic tonemapping operator.\n *\n * @type {Number}\n * @constant\n */\n FILMIC: 2,\n\n /**\n * Use the ACES tonemapping operator.\n *\n * @type {Number}\n * @constant\n */\n ACES: 3,\n\n /**\n * @private\n */\n validate: function (tonemapper) {\n return (\n tonemapper === Tonemapper.REINHARD ||\n tonemapper === Tonemapper.MODIFIED_REINHARD ||\n tonemapper === Tonemapper.FILMIC ||\n tonemapper === Tonemapper.ACES\n );\n },\n};\nexport default Object.freeze(Tonemapper);\n","import arraySlice from \"../Core/arraySlice.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PostProcessStageLibrary from \"./PostProcessStageLibrary.js\";\nimport PostProcessStageTextureCache from \"./PostProcessStageTextureCache.js\";\nimport Tonemapper from \"./Tonemapper.js\";\n\nvar stackScratch = [];\n\n/**\n * A collection of {@link PostProcessStage}s and/or {@link PostProcessStageComposite}s.\n * <p>\n * The input texture for each post-process stage is the texture rendered to by the scene or the texture rendered\n * to by the previous stage in the collection.\n * </p>\n * <p>\n * If the ambient occlusion or bloom stages are enabled, they will execute before all other stages.\n * </p>\n * <p>\n * If the FXAA stage is enabled, it will execute after all other stages.\n * </p>\n *\n * @alias PostProcessStageCollection\n * @constructor\n */\nfunction PostProcessStageCollection() {\n var fxaa = PostProcessStageLibrary.createFXAAStage();\n var ao = PostProcessStageLibrary.createAmbientOcclusionStage();\n var bloom = PostProcessStageLibrary.createBloomStage();\n\n // Auto-exposure is currently disabled because most shaders output a value in [0.0, 1.0].\n // Some shaders, such as the atmosphere and ground atmosphere, output values slightly over 1.0.\n this._autoExposureEnabled = false;\n this._autoExposure = PostProcessStageLibrary.createAutoExposureStage();\n this._tonemapping = undefined;\n this._tonemapper = undefined;\n\n // set tonemapper and tonemapping\n this.tonemapper = Tonemapper.ACES;\n\n var tonemapping = this._tonemapping;\n\n fxaa.enabled = false;\n ao.enabled = false;\n bloom.enabled = false;\n tonemapping.enabled = false; // will be enabled if necessary in update\n\n var textureCache = new PostProcessStageTextureCache(this);\n\n var stageNames = {};\n var stack = stackScratch;\n stack.push(fxaa, ao, bloom, tonemapping);\n while (stack.length > 0) {\n var stage = stack.pop();\n stageNames[stage.name] = stage;\n stage._textureCache = textureCache;\n\n var length = stage.length;\n if (defined(length)) {\n for (var i = 0; i < length; ++i) {\n stack.push(stage.get(i));\n }\n }\n }\n\n this._stages = [];\n this._activeStages = [];\n this._previousActiveStages = [];\n\n this._randomTexture = undefined; // For AO\n\n var that = this;\n ao.uniforms.randomTexture = function () {\n return that._randomTexture;\n };\n\n this._ao = ao;\n this._bloom = bloom;\n this._fxaa = fxaa;\n\n this._lastLength = undefined;\n this._aoEnabled = undefined;\n this._bloomEnabled = undefined;\n this._tonemappingEnabled = undefined;\n this._fxaaEnabled = undefined;\n\n this._stagesRemoved = false;\n this._textureCacheDirty = false;\n\n this._stageNames = stageNames;\n this._textureCache = textureCache;\n}\n\nObject.defineProperties(PostProcessStageCollection.prototype, {\n /**\n * Determines if all of the post-process stages in the collection are ready to be executed.\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n var readyAndEnabled = false;\n var stages = this._stages;\n var length = stages.length;\n for (var i = length - 1; i >= 0; --i) {\n var stage = stages[i];\n readyAndEnabled = readyAndEnabled || (stage.ready && stage.enabled);\n }\n\n var fxaa = this._fxaa;\n var ao = this._ao;\n var bloom = this._bloom;\n var tonemapping = this._tonemapping;\n\n readyAndEnabled = readyAndEnabled || (fxaa.ready && fxaa.enabled);\n readyAndEnabled = readyAndEnabled || (ao.ready && ao.enabled);\n readyAndEnabled = readyAndEnabled || (bloom.ready && bloom.enabled);\n readyAndEnabled =\n readyAndEnabled || (tonemapping.ready && tonemapping.enabled);\n\n return readyAndEnabled;\n },\n },\n /**\n * A post-process stage for Fast Approximate Anti-aliasing.\n * <p>\n * When enabled, this stage will execute after all others.\n * </p>\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {PostProcessStage}\n * @readonly\n */\n fxaa: {\n get: function () {\n return this._fxaa;\n },\n },\n /**\n * A post-process stage that applies Horizon-based Ambient Occlusion (HBAO) to the input texture.\n * <p>\n * Ambient occlusion simulates shadows from ambient light. These shadows would always be present when the\n * surface receives light and regardless of the light's position.\n * </p>\n * <p>\n * The uniforms have the following properties: <code>intensity</code>, <code>bias</code>, <code>lengthCap</code>,\n * <code>stepSize</code>, <code>frustumLength</code>, <code>ambientOcclusionOnly</code>,\n * <code>delta</code>, <code>sigma</code>, and <code>blurStepSize</code>.\n * </p>\n * <ul>\n * <li><code>intensity</code> is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is <code>3.0</code>.</li>\n *\n * <li><code>bias</code> is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value,\n * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is <code>0.1</code>.</li>\n *\n * <li><code>lengthCap</code> is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value,\n * sampling stops in the current direction. The default value is <code>0.26</code>.</li>\n *\n * <li><code>stepSize</code> is a scalar value indicating the distance to the next texel sample in the current direction. The default value is <code>1.95</code>.</li>\n *\n * <li><code>frustumLength</code> is a scalar value in meters. If the current fragment has a distance from the camera greater than this value, ambient occlusion is not computed for the fragment.\n * The default value is <code>1000.0</code>.</li>\n *\n * <li><code>ambientOcclusionOnly</code> is a boolean value. When <code>true</code>, only the shadows generated are written to the output. When <code>false</code>, the input texture is modulated\n * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is <code>false</code>.</li>\n * </ul>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>blurStepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * The blur is applied to the shadows generated from the image to make them smoother.\n * </p>\n * <p>\n * When enabled, this stage will execute before all others.\n * </p>\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {PostProcessStageComposite}\n * @readonly\n */\n ambientOcclusion: {\n get: function () {\n return this._ao;\n },\n },\n /**\n * A post-process stage for a bloom effect.\n * <p>\n * A bloom effect adds glow effect, makes bright areas brighter, and dark areas darker.\n * </p>\n * <p>\n * This stage has the following uniforms: <code>contrast</code>, <code>brightness</code>, <code>glowOnly</code>,\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <ul>\n * <li><code>contrast</code> is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is <code>128.0</code>.</li>\n *\n * <li><code>brightness</code> is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is\n * added to the brightness. The default value is <code>-0.3</code>.</li>\n *\n * <li><code>glowOnly</code> is a boolean value. When <code>true</code>, only the glow effect will be shown. When <code>false</code>, the glow will be added to the input texture.\n * The default value is <code>false</code>. This is a debug option for viewing the effects when changing the other uniform values.</li>\n * </ul>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * The blur is applied to the shadows generated from the image to make them smoother.\n * </p>\n * <p>\n * When enabled, this stage will execute before all others.\n * </p>\n *\n * @memberOf PostProcessStageCollection.prototype\n * @type {PostProcessStageComposite}\n * @readonly\n */\n bloom: {\n get: function () {\n return this._bloom;\n },\n },\n /**\n * The number of post-process stages in this collection.\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n removeStages(this);\n return this._stages.length;\n },\n },\n /**\n * A reference to the last texture written to when executing the post-process stages in this collection.\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {Texture}\n * @readonly\n * @private\n */\n outputTexture: {\n get: function () {\n var fxaa = this._fxaa;\n if (fxaa.enabled && fxaa.ready) {\n return this.getOutputTexture(fxaa.name);\n }\n\n var stages = this._stages;\n var length = stages.length;\n for (var i = length - 1; i >= 0; --i) {\n var stage = stages[i];\n if (defined(stage) && stage.ready && stage.enabled) {\n return this.getOutputTexture(stage.name);\n }\n }\n\n var tonemapping = this._tonemapping;\n if (tonemapping.enabled && tonemapping.ready) {\n return this.getOutputTexture(tonemapping.name);\n }\n\n var bloom = this._bloom;\n if (bloom.enabled && bloom.ready) {\n return this.getOutputTexture(bloom.name);\n }\n\n var ao = this._ao;\n if (ao.enabled && ao.ready) {\n return this.getOutputTexture(ao.name);\n }\n\n return undefined;\n },\n },\n /**\n * Whether the collection has a stage that has selected features.\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {Boolean}\n * @readonly\n * @private\n */\n hasSelected: {\n get: function () {\n var stages = arraySlice(this._stages);\n while (stages.length > 0) {\n var stage = stages.pop();\n if (!defined(stage)) {\n continue;\n }\n if (defined(stage.selected)) {\n return true;\n }\n var length = stage.length;\n if (defined(length)) {\n for (var i = 0; i < length; ++i) {\n stages.push(stage.get(i));\n }\n }\n }\n return false;\n },\n },\n /**\n * Gets and sets the tonemapping algorithm used when rendering with high dynamic range.\n *\n * @memberof PostProcessStageCollection.prototype\n * @type {Tonemapper}\n * @private\n */\n tonemapper: {\n get: function () {\n return this._tonemapper;\n },\n set: function (value) {\n if (this._tonemapper === value) {\n return;\n }\n //>>includeStart('debug', pragmas.debug);\n if (!Tonemapper.validate(value)) {\n throw new DeveloperError(\"tonemapper was set to an invalid value.\");\n }\n //>>includeEnd('debug');\n\n if (defined(this._tonemapping)) {\n delete this._stageNames[this._tonemapping.name];\n this._tonemapping.destroy();\n }\n\n var useAutoExposure = this._autoExposureEnabled;\n var tonemapper;\n\n switch (value) {\n case Tonemapper.REINHARD:\n tonemapper = PostProcessStageLibrary.createReinhardTonemappingStage(\n useAutoExposure\n );\n break;\n case Tonemapper.MODIFIED_REINHARD:\n tonemapper = PostProcessStageLibrary.createModifiedReinhardTonemappingStage(\n useAutoExposure\n );\n break;\n case Tonemapper.FILMIC:\n tonemapper = PostProcessStageLibrary.createFilmicTonemappingStage(\n useAutoExposure\n );\n break;\n default:\n tonemapper = PostProcessStageLibrary.createAcesTonemappingStage(\n useAutoExposure\n );\n break;\n }\n\n if (useAutoExposure) {\n var autoexposure = this._autoExposure;\n tonemapper.uniforms.autoExposure = function () {\n return autoexposure.outputTexture;\n };\n }\n\n this._tonemapper = value;\n this._tonemapping = tonemapper;\n\n if (defined(this._stageNames)) {\n this._stageNames[tonemapper.name] = tonemapper;\n tonemapper._textureCache = this._textureCache;\n }\n\n this._textureCacheDirty = true;\n },\n },\n});\n\nfunction removeStages(collection) {\n if (!collection._stagesRemoved) {\n return;\n }\n\n collection._stagesRemoved = false;\n\n var newStages = [];\n var stages = collection._stages;\n var length = stages.length;\n for (var i = 0, j = 0; i < length; ++i) {\n var stage = stages[i];\n if (stage) {\n stage._index = j++;\n newStages.push(stage);\n }\n }\n\n collection._stages = newStages;\n}\n\n/**\n * Adds the post-process stage to the collection.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage to add to the collection.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage that was added to the collection.\n *\n * @exception {DeveloperError} The post-process stage has already been added to the collection or does not have a unique name.\n */\nPostProcessStageCollection.prototype.add = function (stage) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"stage\", stage);\n //>>includeEnd('debug');\n\n var stageNames = this._stageNames;\n\n var stack = stackScratch;\n stack.push(stage);\n while (stack.length > 0) {\n var currentStage = stack.pop();\n //>>includeStart('debug', pragmas.debug);\n if (defined(stageNames[currentStage.name])) {\n throw new DeveloperError(\n currentStage.name +\n \" has already been added to the collection or does not have a unique name.\"\n );\n }\n //>>includeEnd('debug');\n stageNames[currentStage.name] = currentStage;\n currentStage._textureCache = this._textureCache;\n\n var length = currentStage.length;\n if (defined(length)) {\n for (var i = 0; i < length; ++i) {\n stack.push(currentStage.get(i));\n }\n }\n }\n\n var stages = this._stages;\n stage._index = stages.length;\n stages.push(stage);\n this._textureCacheDirty = true;\n return stage;\n};\n\n/**\n * Removes a post-process stage from the collection and destroys it.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage to remove from the collection.\n * @return {Boolean} Whether the post-process stage was removed.\n */\nPostProcessStageCollection.prototype.remove = function (stage) {\n if (!this.contains(stage)) {\n return false;\n }\n\n var stageNames = this._stageNames;\n\n var stack = stackScratch;\n stack.push(stage);\n while (stack.length > 0) {\n var currentStage = stack.pop();\n delete stageNames[currentStage.name];\n\n var length = currentStage.length;\n if (defined(length)) {\n for (var i = 0; i < length; ++i) {\n stack.push(currentStage.get(i));\n }\n }\n }\n\n this._stages[stage._index] = undefined;\n this._stagesRemoved = true;\n this._textureCacheDirty = true;\n stage._index = undefined;\n stage._textureCache = undefined;\n stage.destroy();\n return true;\n};\n\n/**\n * Returns whether the collection contains a post-process stage.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage.\n * @return {Boolean} Whether the collection contains the post-process stage.\n */\nPostProcessStageCollection.prototype.contains = function (stage) {\n return (\n defined(stage) &&\n defined(stage._index) &&\n stage._textureCache === this._textureCache\n );\n};\n\n/**\n * Gets the post-process stage at <code>index</code>.\n *\n * @param {Number} index The index of the post-process stage.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage at index.\n */\nPostProcessStageCollection.prototype.get = function (index) {\n removeStages(this);\n var stages = this._stages;\n //>>includeStart('debug', pragmas.debug);\n var length = stages.length;\n Check.typeOf.number.greaterThanOrEquals(\"stages length\", length, 0);\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n Check.typeOf.number.lessThan(\"index\", index, length);\n //>>includeEnd('debug');\n return stages[index];\n};\n\n/**\n * Removes all post-process stages from the collection and destroys them.\n */\nPostProcessStageCollection.prototype.removeAll = function () {\n var stages = this._stages;\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n this.remove(stages[i]);\n }\n stages.length = 0;\n};\n\n/**\n * Gets a post-process stage in the collection by its name.\n *\n * @param {String} name The name of the post-process stage.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage.\n *\n * @private\n */\nPostProcessStageCollection.prototype.getStageByName = function (name) {\n return this._stageNames[name];\n};\n\n/**\n * Called before the post-process stages in the collection are executed. Calls update for each stage and creates WebGL resources.\n *\n * @param {Context} context The context.\n * @param {Boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n *\n * @private\n */\nPostProcessStageCollection.prototype.update = function (\n context,\n useLogDepth,\n useHdr\n) {\n removeStages(this);\n\n var previousActiveStages = this._activeStages;\n var activeStages = (this._activeStages = this._previousActiveStages);\n this._previousActiveStages = previousActiveStages;\n\n var stages = this._stages;\n var length = (activeStages.length = stages.length);\n\n var i;\n var stage;\n var count = 0;\n for (i = 0; i < length; ++i) {\n stage = stages[i];\n if (stage.ready && stage.enabled && stage._isSupported(context)) {\n activeStages[count++] = stage;\n }\n }\n activeStages.length = count;\n\n var activeStagesChanged = count !== previousActiveStages.length;\n if (!activeStagesChanged) {\n for (i = 0; i < count; ++i) {\n if (activeStages[i] !== previousActiveStages[i]) {\n activeStagesChanged = true;\n break;\n }\n }\n }\n\n var ao = this._ao;\n var bloom = this._bloom;\n var autoexposure = this._autoExposure;\n var tonemapping = this._tonemapping;\n var fxaa = this._fxaa;\n\n tonemapping.enabled = useHdr;\n\n var aoEnabled = ao.enabled && ao._isSupported(context);\n var bloomEnabled = bloom.enabled && bloom._isSupported(context);\n var tonemappingEnabled =\n tonemapping.enabled && tonemapping._isSupported(context);\n var fxaaEnabled = fxaa.enabled && fxaa._isSupported(context);\n\n if (\n activeStagesChanged ||\n this._textureCacheDirty ||\n count !== this._lastLength ||\n aoEnabled !== this._aoEnabled ||\n bloomEnabled !== this._bloomEnabled ||\n tonemappingEnabled !== this._tonemappingEnabled ||\n fxaaEnabled !== this._fxaaEnabled\n ) {\n // The number of stages to execute has changed.\n // Update dependencies and recreate framebuffers.\n this._textureCache.updateDependencies();\n\n this._lastLength = count;\n this._aoEnabled = aoEnabled;\n this._bloomEnabled = bloomEnabled;\n this._tonemappingEnabled = tonemappingEnabled;\n this._fxaaEnabled = fxaaEnabled;\n this._textureCacheDirty = false;\n }\n\n if (defined(this._randomTexture) && !aoEnabled) {\n this._randomTexture.destroy();\n this._randomTexture = undefined;\n }\n\n if (!defined(this._randomTexture) && aoEnabled) {\n length = 256 * 256 * 3;\n var random = new Uint8Array(length);\n for (i = 0; i < length; i += 3) {\n random[i] = Math.floor(Math.random() * 255.0);\n }\n\n this._randomTexture = new Texture({\n context: context,\n pixelFormat: PixelFormat.RGB,\n pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n source: {\n arrayBufferView: random,\n width: 256,\n height: 256,\n },\n sampler: new Sampler({\n wrapS: TextureWrap.REPEAT,\n wrapT: TextureWrap.REPEAT,\n minificationFilter: TextureMinificationFilter.NEAREST,\n magnificationFilter: TextureMagnificationFilter.NEAREST,\n }),\n });\n }\n\n this._textureCache.update(context);\n\n fxaa.update(context, useLogDepth);\n ao.update(context, useLogDepth);\n bloom.update(context, useLogDepth);\n tonemapping.update(context, useLogDepth);\n\n if (this._autoExposureEnabled) {\n autoexposure.update(context, useLogDepth);\n }\n\n length = stages.length;\n for (i = 0; i < length; ++i) {\n stages[i].update(context, useLogDepth);\n }\n};\n\n/**\n * Clears all of the framebuffers used by the stages.\n *\n * @param {Context} context The context.\n *\n * @private\n */\nPostProcessStageCollection.prototype.clear = function (context) {\n this._textureCache.clear(context);\n\n if (this._autoExposureEnabled) {\n this._autoExposure.clear(context);\n }\n};\n\nfunction getOutputTexture(stage) {\n while (defined(stage.length)) {\n stage = stage.get(stage.length - 1);\n }\n return stage.outputTexture;\n}\n\n/**\n * Gets the output texture of a stage with the given name.\n *\n * @param {String} stageName The name of the stage.\n * @return {Texture|undefined} The texture rendered to by the stage with the given name.\n *\n * @private\n */\nPostProcessStageCollection.prototype.getOutputTexture = function (stageName) {\n var stage = this.getStageByName(stageName);\n if (!defined(stage)) {\n return undefined;\n }\n return getOutputTexture(stage);\n};\n\nfunction execute(stage, context, colorTexture, depthTexture, idTexture) {\n if (defined(stage.execute)) {\n stage.execute(context, colorTexture, depthTexture, idTexture);\n return;\n }\n\n var length = stage.length;\n var i;\n\n if (stage.inputPreviousStageTexture) {\n execute(stage.get(0), context, colorTexture, depthTexture, idTexture);\n for (i = 1; i < length; ++i) {\n execute(\n stage.get(i),\n context,\n getOutputTexture(stage.get(i - 1)),\n depthTexture,\n idTexture\n );\n }\n } else {\n for (i = 0; i < length; ++i) {\n execute(stage.get(i), context, colorTexture, depthTexture, idTexture);\n }\n }\n}\n\n/**\n * Executes all ready and enabled stages in the collection.\n *\n * @param {Context} context The context.\n * @param {Texture} colorTexture The color texture rendered to by the scene.\n * @param {Texture} depthTexture The depth texture written to by the scene.\n * @param {Texture} idTexture The id texture written to by the scene.\n *\n * @private\n */\nPostProcessStageCollection.prototype.execute = function (\n context,\n colorTexture,\n depthTexture,\n idTexture\n) {\n var activeStages = this._activeStages;\n var length = activeStages.length;\n\n var fxaa = this._fxaa;\n var ao = this._ao;\n var bloom = this._bloom;\n var autoexposure = this._autoExposure;\n var tonemapping = this._tonemapping;\n\n var aoEnabled = ao.enabled && ao._isSupported(context);\n var bloomEnabled = bloom.enabled && bloom._isSupported(context);\n var autoExposureEnabled = this._autoExposureEnabled;\n var tonemappingEnabled =\n tonemapping.enabled && tonemapping._isSupported(context);\n var fxaaEnabled = fxaa.enabled && fxaa._isSupported(context);\n\n if (\n !fxaaEnabled &&\n !aoEnabled &&\n !bloomEnabled &&\n !tonemappingEnabled &&\n length === 0\n ) {\n return;\n }\n\n var initialTexture = colorTexture;\n if (aoEnabled && ao.ready) {\n execute(ao, context, initialTexture, depthTexture, idTexture);\n initialTexture = getOutputTexture(ao);\n }\n if (bloomEnabled && bloom.ready) {\n execute(bloom, context, initialTexture, depthTexture, idTexture);\n initialTexture = getOutputTexture(bloom);\n }\n if (autoExposureEnabled && autoexposure.ready) {\n execute(autoexposure, context, initialTexture, depthTexture, idTexture);\n }\n if (tonemappingEnabled && tonemapping.ready) {\n execute(tonemapping, context, initialTexture, depthTexture, idTexture);\n initialTexture = getOutputTexture(tonemapping);\n }\n\n var lastTexture = initialTexture;\n\n if (length > 0) {\n execute(activeStages[0], context, initialTexture, depthTexture, idTexture);\n for (var i = 1; i < length; ++i) {\n execute(\n activeStages[i],\n context,\n getOutputTexture(activeStages[i - 1]),\n depthTexture,\n idTexture\n );\n }\n lastTexture = getOutputTexture(activeStages[length - 1]);\n }\n\n if (fxaaEnabled && fxaa.ready) {\n execute(fxaa, context, lastTexture, depthTexture, idTexture);\n }\n};\n\n/**\n * Copies the output of all executed stages to the color texture of a framebuffer.\n *\n * @param {Context} context The context.\n * @param {Framebuffer} framebuffer The framebuffer to copy to.\n *\n * @private\n */\nPostProcessStageCollection.prototype.copy = function (context, framebuffer) {\n if (!defined(this._copyColorCommand)) {\n var that = this;\n this._copyColorCommand = context.createViewportQuadCommand(PassThrough, {\n uniformMap: {\n colorTexture: function () {\n return that.outputTexture;\n },\n },\n owner: this,\n });\n }\n\n this._copyColorCommand.framebuffer = framebuffer;\n this._copyColorCommand.execute(context);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageCollection#destroy\n */\nPostProcessStageCollection.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageCollection#isDestroyed\n */\nPostProcessStageCollection.prototype.destroy = function () {\n this._fxaa.destroy();\n this._ao.destroy();\n this._bloom.destroy();\n this._autoExposure.destroy();\n this._tonemapping.destroy();\n this.removeAll();\n this._textureCache = this._textureCache && this._textureCache.destroy();\n return destroyObject(this);\n};\nexport default PostProcessStageCollection;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Provides general quadtree tiles to be displayed on or near the surface of an ellipsoid. It is intended to be\n * used with the {@link QuadtreePrimitive}. This type describes an interface and is not intended to be\n * instantiated directly.\n *\n * @alias QuadtreeTileProvider\n * @constructor\n * @private\n */\nfunction QuadtreeTileProvider() {\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Computes the default geometric error for level zero of the quadtree.\n *\n * @memberof QuadtreeTileProvider\n *\n * @param {TilingScheme} tilingScheme The tiling scheme for which to compute the geometric error.\n * @returns {Number} The maximum geometric error at level zero, in meters.\n */\nQuadtreeTileProvider.computeDefaultLevelZeroMaximumGeometricError = function (\n tilingScheme\n) {\n return (\n (tilingScheme.ellipsoid.maximumRadius * 2 * Math.PI * 0.25) /\n (65 * tilingScheme.getNumberOfXTilesAtLevel(0))\n );\n};\n\nObject.defineProperties(QuadtreeTileProvider.prototype, {\n /**\n * Gets or sets the {@link QuadtreePrimitive} for which this provider is\n * providing tiles.\n * @memberof QuadtreeTileProvider.prototype\n * @type {QuadtreePrimitive}\n */\n quadtree: {\n get: DeveloperError.throwInstantiationError,\n set: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof QuadtreeTileProvider.prototype\n * @type {Boolean}\n */\n ready: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the tiling scheme used by the provider. This property should\n * not be accessed before {@link QuadtreeTileProvider#ready} returns true.\n * @memberof QuadtreeTileProvider.prototype\n * @type {TilingScheme}\n */\n tilingScheme: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets an event that is raised when the geometry provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof QuadtreeTileProvider.prototype\n * @type {Event}\n */\n errorEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\n/**\n * Called at the beginning of the update cycle, regardless of id a new frame is being rendered, before {@link QuadtreeTileProvider#beginUpdate}\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n */\nQuadtreeTileProvider.prototype.update = DeveloperError.throwInstantiationError;\n\n/**\n * Called at the beginning of the update cycle for each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * or any other functions.\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} commandList An array of rendering commands. This method may push\n * commands into this array.\n */\nQuadtreeTileProvider.prototype.beginUpdate =\n DeveloperError.throwInstantiationError;\n\n/**\n * Called at the end of the update cycle for each render frame, after {@link QuadtreeTileProvider#showTileThisFrame}\n * and any other functions.\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} commandList An array of rendering commands. This method may push\n * commands into this array.\n */\nQuadtreeTileProvider.prototype.endUpdate =\n DeveloperError.throwInstantiationError;\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level, in meters. This function should not be\n * called before {@link QuadtreeTileProvider#ready} returns true.\n *\n * @see QuadtreeTileProvider#computeDefaultLevelZeroMaximumGeometricError\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error in meters.\n */\nQuadtreeTileProvider.prototype.getLevelMaximumGeometricError =\n DeveloperError.throwInstantiationError;\n\n/**\n * Loads, or continues loading, a given tile. This function will continue to be called\n * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}. This function should\n * not be called before {@link QuadtreeTileProvider#ready} returns true.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to load.\n *\n * @exception {DeveloperError} <code>loadTile</code> must not be called before the tile provider is ready.\n */\nQuadtreeTileProvider.prototype.loadTile =\n DeveloperError.throwInstantiationError;\n\n/**\n * Determines the visibility of a given tile. The tile may be fully visible, partially visible, or not\n * visible at all. Tiles that are renderable and are at least partially visible will be shown by a call\n * to {@link QuadtreeTileProvider#showTileThisFrame}.\n *\n * @memberof QuadtreeTileProvider\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information about the current frame.\n * @param {QuadtreeOccluders} occluders The objects that may occlude this tile.\n *\n * @returns {Visibility} The visibility of the tile.\n */\nQuadtreeTileProvider.prototype.computeTileVisibility =\n DeveloperError.throwInstantiationError;\n\n/**\n * Shows a specified tile in this frame. The provider can cause the tile to be shown by adding\n * render commands to the commandList, or use any other method as appropriate. The tile is not\n * expected to be visible next frame as well, unless this method is call next frame, too.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The state information of the current rendering frame.\n * @param {DrawCommand[]} commandList The list of rendering commands. This method may add additional commands to this list.\n */\nQuadtreeTileProvider.prototype.showTileThisFrame =\n DeveloperError.throwInstantiationError;\n\n/**\n * Gets the distance from the camera to the closest point on the tile. This is used for level-of-detail selection.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n *\n * @returns {Number} The distance from the camera to the closest point on the tile, in meters.\n */\nQuadtreeTileProvider.prototype.computeDistanceToTile =\n DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof QuadtreeTileProvider\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see QuadtreeTileProvider#destroy\n */\nQuadtreeTileProvider.prototype.isDestroyed =\n DeveloperError.throwInstantiationError;\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof QuadtreeTileProvider\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * provider = provider && provider();\n *\n * @see QuadtreeTileProvider#isDestroyed\n */\nQuadtreeTileProvider.prototype.destroy = DeveloperError.throwInstantiationError;\nexport default QuadtreeTileProvider;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport ScreenSpaceEventHandler from \"../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../Core/ScreenSpaceEventType.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Camera from \"./Camera.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * @private\n */\nfunction SceneTransitioner(scene) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scene\", scene);\n //>>includeEnd('debug');\n\n this._scene = scene;\n this._currentTweens = [];\n this._morphHandler = undefined;\n this._morphCancelled = false;\n this._completeMorph = undefined;\n this._morphToOrthographic = false;\n}\n\nSceneTransitioner.prototype.completeMorph = function () {\n if (defined(this._completeMorph)) {\n this._completeMorph();\n }\n};\n\nSceneTransitioner.prototype.morphTo2D = function (duration, ellipsoid) {\n if (defined(this._completeMorph)) {\n this._completeMorph();\n }\n\n var scene = this._scene;\n this._previousMode = scene.mode;\n this._morphToOrthographic =\n scene.camera.frustum instanceof OrthographicFrustum;\n\n if (\n this._previousMode === SceneMode.SCENE2D ||\n this._previousMode === SceneMode.MORPHING\n ) {\n return;\n }\n this._scene.morphStart.raiseEvent(\n this,\n this._previousMode,\n SceneMode.SCENE2D,\n true\n );\n\n scene._mode = SceneMode.MORPHING;\n scene.camera._setTransform(Matrix4.IDENTITY);\n\n if (this._previousMode === SceneMode.COLUMBUS_VIEW) {\n morphFromColumbusViewTo2D(this, duration);\n } else {\n morphFrom3DTo2D(this, duration, ellipsoid);\n }\n\n if (duration === 0.0 && defined(this._completeMorph)) {\n this._completeMorph();\n }\n};\n\nvar scratchToCVPosition = new Cartesian3();\nvar scratchToCVDirection = new Cartesian3();\nvar scratchToCVUp = new Cartesian3();\nvar scratchToCVPosition2D = new Cartesian3();\nvar scratchToCVDirection2D = new Cartesian3();\nvar scratchToCVUp2D = new Cartesian3();\nvar scratchToCVSurfacePosition = new Cartesian3();\nvar scratchToCVCartographic = new Cartographic();\nvar scratchToCVToENU = new Matrix4();\nvar scratchToCVFrustumPerspective = new PerspectiveFrustum();\nvar scratchToCVFrustumOrthographic = new OrthographicFrustum();\nvar scratchToCVCamera = {\n position: undefined,\n direction: undefined,\n up: undefined,\n position2D: undefined,\n direction2D: undefined,\n up2D: undefined,\n frustum: undefined,\n};\n\nSceneTransitioner.prototype.morphToColumbusView = function (\n duration,\n ellipsoid\n) {\n if (defined(this._completeMorph)) {\n this._completeMorph();\n }\n\n var scene = this._scene;\n this._previousMode = scene.mode;\n\n if (\n this._previousMode === SceneMode.COLUMBUS_VIEW ||\n this._previousMode === SceneMode.MORPHING\n ) {\n return;\n }\n this._scene.morphStart.raiseEvent(\n this,\n this._previousMode,\n SceneMode.COLUMBUS_VIEW,\n true\n );\n\n scene.camera._setTransform(Matrix4.IDENTITY);\n\n var position = scratchToCVPosition;\n var direction = scratchToCVDirection;\n var up = scratchToCVUp;\n\n if (duration > 0.0) {\n position.x = 0.0;\n position.y = -1.0;\n position.z = 1.0;\n position = Cartesian3.multiplyByScalar(\n Cartesian3.normalize(position, position),\n 5.0 * ellipsoid.maximumRadius,\n position\n );\n\n Cartesian3.negate(Cartesian3.normalize(position, direction), direction);\n Cartesian3.cross(Cartesian3.UNIT_X, direction, up);\n } else {\n var camera = scene.camera;\n if (this._previousMode === SceneMode.SCENE2D) {\n Cartesian3.clone(camera.position, position);\n position.z = camera.frustum.right - camera.frustum.left;\n Cartesian3.negate(Cartesian3.UNIT_Z, direction);\n Cartesian3.clone(Cartesian3.UNIT_Y, up);\n } else {\n Cartesian3.clone(camera.positionWC, position);\n Cartesian3.clone(camera.directionWC, direction);\n Cartesian3.clone(camera.upWC, up);\n\n var surfacePoint = ellipsoid.scaleToGeodeticSurface(\n position,\n scratchToCVSurfacePosition\n );\n var toENU = Transforms.eastNorthUpToFixedFrame(\n surfacePoint,\n ellipsoid,\n scratchToCVToENU\n );\n Matrix4.inverseTransformation(toENU, toENU);\n\n scene.mapProjection.project(\n ellipsoid.cartesianToCartographic(position, scratchToCVCartographic),\n position\n );\n Matrix4.multiplyByPointAsVector(toENU, direction, direction);\n Matrix4.multiplyByPointAsVector(toENU, up, up);\n }\n }\n\n var frustum;\n if (this._morphToOrthographic) {\n frustum = scratchToCVFrustumOrthographic;\n frustum.width = scene.camera.frustum.right - scene.camera.frustum.left;\n frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n } else {\n frustum = scratchToCVFrustumPerspective;\n frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n frustum.fov = CesiumMath.toRadians(60.0);\n }\n\n var cameraCV = scratchToCVCamera;\n cameraCV.position = position;\n cameraCV.direction = direction;\n cameraCV.up = up;\n cameraCV.frustum = frustum;\n\n var complete = completeColumbusViewCallback(cameraCV);\n createMorphHandler(this, complete);\n\n if (this._previousMode === SceneMode.SCENE2D) {\n morphFrom2DToColumbusView(this, duration, cameraCV, complete);\n } else {\n cameraCV.position2D = Matrix4.multiplyByPoint(\n Camera.TRANSFORM_2D,\n position,\n scratchToCVPosition2D\n );\n cameraCV.direction2D = Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n direction,\n scratchToCVDirection2D\n );\n cameraCV.up2D = Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n up,\n scratchToCVUp2D\n );\n\n scene._mode = SceneMode.MORPHING;\n morphFrom3DToColumbusView(this, duration, cameraCV, complete);\n }\n\n if (duration === 0.0 && defined(this._completeMorph)) {\n this._completeMorph();\n }\n};\n\nvar scratchCVTo3DCamera = {\n position: new Cartesian3(),\n direction: new Cartesian3(),\n up: new Cartesian3(),\n frustum: undefined,\n};\nvar scratch2DTo3DFrustumPersp = new PerspectiveFrustum();\n\nSceneTransitioner.prototype.morphTo3D = function (duration, ellipsoid) {\n if (defined(this._completeMorph)) {\n this._completeMorph();\n }\n\n var scene = this._scene;\n this._previousMode = scene.mode;\n\n if (\n this._previousMode === SceneMode.SCENE3D ||\n this._previousMode === SceneMode.MORPHING\n ) {\n return;\n }\n this._scene.morphStart.raiseEvent(\n this,\n this._previousMode,\n SceneMode.SCENE3D,\n true\n );\n\n scene._mode = SceneMode.MORPHING;\n scene.camera._setTransform(Matrix4.IDENTITY);\n\n if (this._previousMode === SceneMode.SCENE2D) {\n morphFrom2DTo3D(this, duration, ellipsoid);\n } else {\n var camera3D;\n if (duration > 0.0) {\n camera3D = scratchCVTo3DCamera;\n Cartesian3.fromDegrees(\n 0.0,\n 0.0,\n 5.0 * ellipsoid.maximumRadius,\n ellipsoid,\n camera3D.position\n );\n Cartesian3.negate(camera3D.position, camera3D.direction);\n Cartesian3.normalize(camera3D.direction, camera3D.direction);\n Cartesian3.clone(Cartesian3.UNIT_Z, camera3D.up);\n } else {\n camera3D = getColumbusViewTo3DCamera(this, ellipsoid);\n }\n\n var frustum;\n var camera = scene.camera;\n if (camera.frustum instanceof OrthographicFrustum) {\n frustum = camera.frustum.clone();\n } else {\n frustum = scratch2DTo3DFrustumPersp;\n frustum.aspectRatio =\n scene.drawingBufferWidth / scene.drawingBufferHeight;\n frustum.fov = CesiumMath.toRadians(60.0);\n }\n camera3D.frustum = frustum;\n\n var complete = complete3DCallback(camera3D);\n createMorphHandler(this, complete);\n\n morphFromColumbusViewTo3D(this, duration, camera3D, complete);\n }\n\n if (duration === 0.0 && defined(this._completeMorph)) {\n this._completeMorph();\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nSceneTransitioner.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * transitioner = transitioner && transitioner.destroy();\n */\nSceneTransitioner.prototype.destroy = function () {\n destroyMorphHandler(this);\n return destroyObject(this);\n};\n\nfunction createMorphHandler(transitioner, completeMorphFunction) {\n if (transitioner._scene.completeMorphOnUserInput) {\n transitioner._morphHandler = new ScreenSpaceEventHandler(\n transitioner._scene.canvas\n );\n\n var completeMorph = function () {\n transitioner._morphCancelled = true;\n transitioner._scene.camera.cancelFlight();\n completeMorphFunction(transitioner);\n };\n transitioner._completeMorph = completeMorph;\n transitioner._morphHandler.setInputAction(\n completeMorph,\n ScreenSpaceEventType.LEFT_DOWN\n );\n transitioner._morphHandler.setInputAction(\n completeMorph,\n ScreenSpaceEventType.MIDDLE_DOWN\n );\n transitioner._morphHandler.setInputAction(\n completeMorph,\n ScreenSpaceEventType.RIGHT_DOWN\n );\n transitioner._morphHandler.setInputAction(\n completeMorph,\n ScreenSpaceEventType.WHEEL\n );\n }\n}\n\nfunction destroyMorphHandler(transitioner) {\n var tweens = transitioner._currentTweens;\n for (var i = 0; i < tweens.length; ++i) {\n tweens[i].cancelTween();\n }\n transitioner._currentTweens.length = 0;\n transitioner._morphHandler =\n transitioner._morphHandler && transitioner._morphHandler.destroy();\n}\n\nvar scratchCVTo3DCartographic = new Cartographic();\nvar scratchCVTo3DSurfacePoint = new Cartesian3();\nvar scratchCVTo3DFromENU = new Matrix4();\n\nfunction getColumbusViewTo3DCamera(transitioner, ellipsoid) {\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var camera3D = scratchCVTo3DCamera;\n var position = camera3D.position;\n var direction = camera3D.direction;\n var up = camera3D.up;\n\n var positionCarto = scene.mapProjection.unproject(\n camera.position,\n scratchCVTo3DCartographic\n );\n ellipsoid.cartographicToCartesian(positionCarto, position);\n var surfacePoint = ellipsoid.scaleToGeodeticSurface(\n position,\n scratchCVTo3DSurfacePoint\n );\n\n var fromENU = Transforms.eastNorthUpToFixedFrame(\n surfacePoint,\n ellipsoid,\n scratchCVTo3DFromENU\n );\n\n Matrix4.multiplyByPointAsVector(fromENU, camera.direction, direction);\n Matrix4.multiplyByPointAsVector(fromENU, camera.up, up);\n\n return camera3D;\n}\n\nvar scratchCVTo3DStartPos = new Cartesian3();\nvar scratchCVTo3DStartDir = new Cartesian3();\nvar scratchCVTo3DStartUp = new Cartesian3();\nvar scratchCVTo3DEndPos = new Cartesian3();\nvar scratchCVTo3DEndDir = new Cartesian3();\nvar scratchCVTo3DEndUp = new Cartesian3();\n\nfunction morphFromColumbusViewTo3D(\n transitioner,\n duration,\n endCamera,\n complete\n) {\n duration *= 0.5;\n\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var startPos = Cartesian3.clone(camera.position, scratchCVTo3DStartPos);\n var startDir = Cartesian3.clone(camera.direction, scratchCVTo3DStartDir);\n var startUp = Cartesian3.clone(camera.up, scratchCVTo3DStartUp);\n\n var endPos = Matrix4.multiplyByPoint(\n Camera.TRANSFORM_2D_INVERSE,\n endCamera.position,\n scratchCVTo3DEndPos\n );\n var endDir = Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D_INVERSE,\n endCamera.direction,\n scratchCVTo3DEndDir\n );\n var endUp = Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D_INVERSE,\n endCamera.up,\n scratchCVTo3DEndUp\n );\n\n function update(value) {\n columbusViewMorph(startPos, endPos, value.time, camera.position);\n columbusViewMorph(startDir, endDir, value.time, camera.direction);\n columbusViewMorph(startUp, endUp, value.time, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n }\n\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: update,\n complete: function () {\n addMorphTimeAnimations(transitioner, scene, 0.0, 1.0, duration, complete);\n },\n });\n transitioner._currentTweens.push(tween);\n}\n\nvar scratch2DTo3DFrustumOrtho = new OrthographicFrustum();\nvar scratch3DToCVStartPos = new Cartesian3();\nvar scratch3DToCVStartDir = new Cartesian3();\nvar scratch3DToCVStartUp = new Cartesian3();\nvar scratch3DToCVEndPos = new Cartesian3();\nvar scratch3DToCVEndDir = new Cartesian3();\nvar scratch3DToCVEndUp = new Cartesian3();\n\nfunction morphFrom2DTo3D(transitioner, duration, ellipsoid) {\n duration /= 3.0;\n\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var camera3D;\n if (duration > 0.0) {\n camera3D = scratchCVTo3DCamera;\n Cartesian3.fromDegrees(\n 0.0,\n 0.0,\n 5.0 * ellipsoid.maximumRadius,\n ellipsoid,\n camera3D.position\n );\n Cartesian3.negate(camera3D.position, camera3D.direction);\n Cartesian3.normalize(camera3D.direction, camera3D.direction);\n Cartesian3.clone(Cartesian3.UNIT_Z, camera3D.up);\n } else {\n camera.position.z = camera.frustum.right - camera.frustum.left;\n\n camera3D = getColumbusViewTo3DCamera(transitioner, ellipsoid);\n }\n\n var frustum;\n if (transitioner._morphToOrthographic) {\n frustum = scratch2DTo3DFrustumOrtho;\n frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n frustum.width = camera.frustum.right - camera.frustum.left;\n } else {\n frustum = scratch2DTo3DFrustumPersp;\n frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n frustum.fov = CesiumMath.toRadians(60.0);\n }\n\n camera3D.frustum = frustum;\n\n var complete = complete3DCallback(camera3D);\n createMorphHandler(transitioner, complete);\n\n var morph;\n if (transitioner._morphToOrthographic) {\n morph = function () {\n morphFromColumbusViewTo3D(transitioner, duration, camera3D, complete);\n };\n } else {\n morph = function () {\n morphOrthographicToPerspective(\n transitioner,\n duration,\n camera3D,\n function () {\n morphFromColumbusViewTo3D(transitioner, duration, camera3D, complete);\n }\n );\n };\n }\n\n if (duration > 0.0) {\n scene._mode = SceneMode.SCENE2D;\n camera.flyTo({\n duration: duration,\n destination: Cartesian3.fromDegrees(\n 0.0,\n 0.0,\n 5.0 * ellipsoid.maximumRadius,\n ellipsoid,\n scratch3DToCVEndPos\n ),\n complete: function () {\n scene._mode = SceneMode.MORPHING;\n morph();\n },\n });\n } else {\n morph();\n }\n}\n\nfunction columbusViewMorph(startPosition, endPosition, time, result) {\n // Just linear for now.\n return Cartesian3.lerp(startPosition, endPosition, time, result);\n}\n\nfunction morphPerspectiveToOrthographic(\n transitioner,\n duration,\n endCamera,\n updateHeight,\n complete\n) {\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n if (camera.frustum instanceof OrthographicFrustum) {\n return;\n }\n\n var startFOV = camera.frustum.fov;\n var endFOV = CesiumMath.RADIANS_PER_DEGREE * 0.5;\n var d = endCamera.position.z * Math.tan(startFOV * 0.5);\n camera.frustum.far = d / Math.tan(endFOV * 0.5) + 10000000.0;\n\n function update(value) {\n camera.frustum.fov = CesiumMath.lerp(startFOV, endFOV, value.time);\n var height = d / Math.tan(camera.frustum.fov * 0.5);\n updateHeight(camera, height);\n }\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: update,\n complete: function () {\n camera.frustum = endCamera.frustum.clone();\n complete(transitioner);\n },\n });\n transitioner._currentTweens.push(tween);\n}\n\nvar scratchCVTo2DStartPos = new Cartesian3();\nvar scratchCVTo2DStartDir = new Cartesian3();\nvar scratchCVTo2DStartUp = new Cartesian3();\nvar scratchCVTo2DEndPos = new Cartesian3();\nvar scratchCVTo2DEndDir = new Cartesian3();\nvar scratchCVTo2DEndUp = new Cartesian3();\nvar scratchCVTo2DFrustum = new OrthographicOffCenterFrustum();\nvar scratchCVTo2DRay = new Ray();\nvar scratchCVTo2DPickPos = new Cartesian3();\nvar scratchCVTo2DCamera = {\n position: undefined,\n direction: undefined,\n up: undefined,\n frustum: undefined,\n};\n\nfunction morphFromColumbusViewTo2D(transitioner, duration) {\n duration *= 0.5;\n\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var startPos = Cartesian3.clone(camera.position, scratchCVTo2DStartPos);\n var startDir = Cartesian3.clone(camera.direction, scratchCVTo2DStartDir);\n var startUp = Cartesian3.clone(camera.up, scratchCVTo2DStartUp);\n\n var endDir = Cartesian3.negate(Cartesian3.UNIT_Z, scratchCVTo2DEndDir);\n var endUp = Cartesian3.clone(Cartesian3.UNIT_Y, scratchCVTo2DEndUp);\n\n var endPos = scratchCVTo2DEndPos;\n\n if (duration > 0.0) {\n Cartesian3.clone(Cartesian3.ZERO, scratchCVTo2DEndPos);\n endPos.z = 5.0 * scene.mapProjection.ellipsoid.maximumRadius;\n } else {\n Cartesian3.clone(startPos, scratchCVTo2DEndPos);\n\n var ray = scratchCVTo2DRay;\n Matrix4.multiplyByPoint(Camera.TRANSFORM_2D, startPos, ray.origin);\n Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n startDir,\n ray.direction\n );\n\n var globe = scene.globe;\n if (defined(globe)) {\n var pickPos = globe.pickWorldCoordinates(\n ray,\n scene,\n true,\n scratchCVTo2DPickPos\n );\n if (defined(pickPos)) {\n Matrix4.multiplyByPoint(Camera.TRANSFORM_2D_INVERSE, pickPos, endPos);\n endPos.z += Cartesian3.distance(startPos, endPos);\n }\n }\n }\n\n var frustum = scratchCVTo2DFrustum;\n frustum.right = endPos.z * 0.5;\n frustum.left = -frustum.right;\n frustum.top =\n frustum.right * (scene.drawingBufferHeight / scene.drawingBufferWidth);\n frustum.bottom = -frustum.top;\n\n var camera2D = scratchCVTo2DCamera;\n camera2D.position = endPos;\n camera2D.direction = endDir;\n camera2D.up = endUp;\n camera2D.frustum = frustum;\n\n var complete = complete2DCallback(camera2D);\n createMorphHandler(transitioner, complete);\n\n function updateCV(value) {\n columbusViewMorph(startPos, endPos, value.time, camera.position);\n columbusViewMorph(startDir, endDir, value.time, camera.direction);\n columbusViewMorph(startUp, endUp, value.time, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n camera._adjustOrthographicFrustum(true);\n }\n\n function updateHeight(camera, height) {\n camera.position.z = height;\n }\n\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: updateCV,\n complete: function () {\n morphPerspectiveToOrthographic(\n transitioner,\n duration,\n camera2D,\n updateHeight,\n complete\n );\n },\n });\n transitioner._currentTweens.push(tween);\n}\n\nvar scratch3DTo2DCartographic = new Cartographic();\nvar scratch3DTo2DCamera = {\n position: new Cartesian3(),\n direction: new Cartesian3(),\n up: new Cartesian3(),\n position2D: new Cartesian3(),\n direction2D: new Cartesian3(),\n up2D: new Cartesian3(),\n frustum: new OrthographicOffCenterFrustum(),\n};\nvar scratch3DTo2DEndCamera = {\n position: new Cartesian3(),\n direction: new Cartesian3(),\n up: new Cartesian3(),\n frustum: undefined,\n};\nvar scratch3DTo2DPickPosition = new Cartesian3();\nvar scratch3DTo2DRay = new Ray();\nvar scratch3DTo2DToENU = new Matrix4();\nvar scratch3DTo2DSurfacePoint = new Cartesian3();\n\nfunction morphFrom3DTo2D(transitioner, duration, ellipsoid) {\n duration *= 0.5;\n\n var scene = transitioner._scene;\n var camera = scene.camera;\n var camera2D = scratch3DTo2DCamera;\n\n if (duration > 0.0) {\n Cartesian3.clone(Cartesian3.ZERO, camera2D.position);\n camera2D.position.z = 5.0 * ellipsoid.maximumRadius;\n Cartesian3.negate(Cartesian3.UNIT_Z, camera2D.direction);\n Cartesian3.clone(Cartesian3.UNIT_Y, camera2D.up);\n } else {\n ellipsoid.cartesianToCartographic(\n camera.positionWC,\n scratch3DTo2DCartographic\n );\n scene.mapProjection.project(scratch3DTo2DCartographic, camera2D.position);\n\n Cartesian3.negate(Cartesian3.UNIT_Z, camera2D.direction);\n Cartesian3.clone(Cartesian3.UNIT_Y, camera2D.up);\n\n var ray = scratch3DTo2DRay;\n Cartesian3.clone(camera2D.position2D, ray.origin);\n var rayDirection = Cartesian3.clone(camera.directionWC, ray.direction);\n var surfacePoint = ellipsoid.scaleToGeodeticSurface(\n camera.positionWC,\n scratch3DTo2DSurfacePoint\n );\n var toENU = Transforms.eastNorthUpToFixedFrame(\n surfacePoint,\n ellipsoid,\n scratch3DTo2DToENU\n );\n Matrix4.inverseTransformation(toENU, toENU);\n Matrix4.multiplyByPointAsVector(toENU, rayDirection, rayDirection);\n Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n rayDirection,\n rayDirection\n );\n\n var globe = scene.globe;\n if (defined(globe)) {\n var pickedPos = globe.pickWorldCoordinates(\n ray,\n scene,\n true,\n scratch3DTo2DPickPosition\n );\n if (defined(pickedPos)) {\n var height = Cartesian3.distance(camera2D.position2D, pickedPos);\n pickedPos.x += height;\n Cartesian3.clone(pickedPos, camera2D.position2D);\n }\n }\n }\n\n function updateHeight(camera, height) {\n camera.position.x = height;\n }\n\n Matrix4.multiplyByPoint(\n Camera.TRANSFORM_2D,\n camera2D.position,\n camera2D.position2D\n );\n Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n camera2D.direction,\n camera2D.direction2D\n );\n Matrix4.multiplyByPointAsVector(\n Camera.TRANSFORM_2D,\n camera2D.up,\n camera2D.up2D\n );\n\n var frustum = camera2D.frustum;\n frustum.right = camera2D.position.z * 0.5;\n frustum.left = -frustum.right;\n frustum.top =\n frustum.right * (scene.drawingBufferHeight / scene.drawingBufferWidth);\n frustum.bottom = -frustum.top;\n\n var endCamera = scratch3DTo2DEndCamera;\n Matrix4.multiplyByPoint(\n Camera.TRANSFORM_2D_INVERSE,\n camera2D.position2D,\n endCamera.position\n );\n Cartesian3.clone(camera2D.direction, endCamera.direction);\n Cartesian3.clone(camera2D.up, endCamera.up);\n endCamera.frustum = frustum;\n\n var complete = complete2DCallback(endCamera);\n createMorphHandler(transitioner, complete);\n\n function completeCallback() {\n morphPerspectiveToOrthographic(\n transitioner,\n duration,\n camera2D,\n updateHeight,\n complete\n );\n }\n morphFrom3DToColumbusView(transitioner, duration, camera2D, completeCallback);\n}\n\nfunction morphOrthographicToPerspective(\n transitioner,\n duration,\n cameraCV,\n complete\n) {\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var height = camera.frustum.right - camera.frustum.left;\n camera.frustum = cameraCV.frustum.clone();\n\n var endFOV = camera.frustum.fov;\n var startFOV = CesiumMath.RADIANS_PER_DEGREE * 0.5;\n var d = height * Math.tan(endFOV * 0.5);\n camera.frustum.far = d / Math.tan(startFOV * 0.5) + 10000000.0;\n camera.frustum.fov = startFOV;\n\n function update(value) {\n camera.frustum.fov = CesiumMath.lerp(startFOV, endFOV, value.time);\n camera.position.z = d / Math.tan(camera.frustum.fov * 0.5);\n }\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: update,\n complete: function () {\n complete(transitioner);\n },\n });\n transitioner._currentTweens.push(tween);\n}\n\nfunction morphFrom2DToColumbusView(transitioner, duration, cameraCV, complete) {\n duration *= 0.5;\n\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var endPos = Cartesian3.clone(cameraCV.position, scratch3DToCVEndPos);\n var endDir = Cartesian3.clone(cameraCV.direction, scratch3DToCVEndDir);\n var endUp = Cartesian3.clone(cameraCV.up, scratch3DToCVEndUp);\n\n scene._mode = SceneMode.MORPHING;\n\n function morph() {\n camera.frustum = cameraCV.frustum.clone();\n\n var startPos = Cartesian3.clone(camera.position, scratch3DToCVStartPos);\n var startDir = Cartesian3.clone(camera.direction, scratch3DToCVStartDir);\n var startUp = Cartesian3.clone(camera.up, scratch3DToCVStartUp);\n startPos.z = endPos.z;\n\n function update(value) {\n columbusViewMorph(startPos, endPos, value.time, camera.position);\n columbusViewMorph(startDir, endDir, value.time, camera.direction);\n columbusViewMorph(startUp, endUp, value.time, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n }\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: update,\n complete: function () {\n complete(transitioner);\n },\n });\n transitioner._currentTweens.push(tween);\n }\n\n if (transitioner._morphToOrthographic) {\n morph();\n } else {\n morphOrthographicToPerspective(transitioner, 0.0, cameraCV, morph);\n }\n}\n\nfunction morphFrom3DToColumbusView(\n transitioner,\n duration,\n endCamera,\n complete\n) {\n var scene = transitioner._scene;\n var camera = scene.camera;\n\n var startPos = Cartesian3.clone(camera.position, scratch3DToCVStartPos);\n var startDir = Cartesian3.clone(camera.direction, scratch3DToCVStartDir);\n var startUp = Cartesian3.clone(camera.up, scratch3DToCVStartUp);\n\n var endPos = Cartesian3.clone(endCamera.position2D, scratch3DToCVEndPos);\n var endDir = Cartesian3.clone(endCamera.direction2D, scratch3DToCVEndDir);\n var endUp = Cartesian3.clone(endCamera.up2D, scratch3DToCVEndUp);\n\n function update(value) {\n columbusViewMorph(startPos, endPos, value.time, camera.position);\n columbusViewMorph(startDir, endDir, value.time, camera.direction);\n columbusViewMorph(startUp, endUp, value.time, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n camera._adjustOrthographicFrustum(true);\n }\n var tween = scene.tweens.add({\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n startObject: {\n time: 0.0,\n },\n stopObject: {\n time: 1.0,\n },\n update: update,\n complete: function () {\n addMorphTimeAnimations(transitioner, scene, 1.0, 0.0, duration, complete);\n },\n });\n transitioner._currentTweens.push(tween);\n}\n\nfunction addMorphTimeAnimations(\n transitioner,\n scene,\n start,\n stop,\n duration,\n complete\n) {\n // Later, this will be linear and each object will adjust, if desired, in its vertex shader.\n var options = {\n object: scene,\n property: \"morphTime\",\n startValue: start,\n stopValue: stop,\n duration: duration,\n easingFunction: EasingFunction.QUARTIC_OUT,\n };\n\n if (defined(complete)) {\n options.complete = function () {\n complete(transitioner);\n };\n }\n\n var tween = scene.tweens.addProperty(options);\n transitioner._currentTweens.push(tween);\n}\n\nfunction complete3DCallback(camera3D) {\n return function (transitioner) {\n var scene = transitioner._scene;\n scene._mode = SceneMode.SCENE3D;\n scene.morphTime = SceneMode.getMorphTime(SceneMode.SCENE3D);\n\n destroyMorphHandler(transitioner);\n\n var camera = scene.camera;\n if (\n transitioner._previousMode !== SceneMode.MORPHING ||\n transitioner._morphCancelled\n ) {\n transitioner._morphCancelled = false;\n\n Cartesian3.clone(camera3D.position, camera.position);\n Cartesian3.clone(camera3D.direction, camera.direction);\n Cartesian3.clone(camera3D.up, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n\n camera.frustum = camera3D.frustum.clone();\n }\n\n var frustum = camera.frustum;\n if (scene.frameState.useLogDepth) {\n frustum.near = 0.1;\n frustum.far = 10000000000.0;\n }\n\n var wasMorphing = defined(transitioner._completeMorph);\n transitioner._completeMorph = undefined;\n scene.camera.update(scene.mode);\n transitioner._scene.morphComplete.raiseEvent(\n transitioner,\n transitioner._previousMode,\n SceneMode.SCENE3D,\n wasMorphing\n );\n };\n}\n\nfunction complete2DCallback(camera2D) {\n return function (transitioner) {\n var scene = transitioner._scene;\n\n scene._mode = SceneMode.SCENE2D;\n scene.morphTime = SceneMode.getMorphTime(SceneMode.SCENE2D);\n\n destroyMorphHandler(transitioner);\n\n var camera = scene.camera;\n Cartesian3.clone(camera2D.position, camera.position);\n camera.position.z = scene.mapProjection.ellipsoid.maximumRadius * 2.0;\n Cartesian3.clone(camera2D.direction, camera.direction);\n Cartesian3.clone(camera2D.up, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n camera.frustum = camera2D.frustum.clone();\n\n var wasMorphing = defined(transitioner._completeMorph);\n transitioner._completeMorph = undefined;\n scene.camera.update(scene.mode);\n transitioner._scene.morphComplete.raiseEvent(\n transitioner,\n transitioner._previousMode,\n SceneMode.SCENE2D,\n wasMorphing\n );\n };\n}\n\nfunction completeColumbusViewCallback(cameraCV) {\n return function (transitioner) {\n var scene = transitioner._scene;\n scene._mode = SceneMode.COLUMBUS_VIEW;\n scene.morphTime = SceneMode.getMorphTime(SceneMode.COLUMBUS_VIEW);\n\n destroyMorphHandler(transitioner);\n\n var camera = scene.camera;\n if (\n transitioner._previousModeMode !== SceneMode.MORPHING ||\n transitioner._morphCancelled\n ) {\n transitioner._morphCancelled = false;\n\n Cartesian3.clone(cameraCV.position, camera.position);\n Cartesian3.clone(cameraCV.direction, camera.direction);\n Cartesian3.clone(cameraCV.up, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.normalize(camera.right, camera.right);\n }\n\n var frustum = camera.frustum;\n if (scene.frameState.useLogDepth) {\n frustum.near = 0.1;\n frustum.far = 10000000000.0;\n }\n\n var wasMorphing = defined(transitioner._completeMorph);\n transitioner._completeMorph = undefined;\n scene.camera.update(scene.mode);\n transitioner._scene.morphComplete.raiseEvent(\n transitioner,\n transitioner._previousMode,\n SceneMode.COLUMBUS_VIEW,\n wasMorphing\n );\n };\n}\nexport default SceneTransitioner;\n","import clone from \"../Core/clone.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport TimeConstants from \"../Core/TimeConstants.js\";\nimport TweenJS from \"../ThirdParty/Tween.js\";\n\n/**\n * A tween is an animation that interpolates the properties of two objects using an {@link EasingFunction}. Create\n * one using {@link Scene#tweens} and {@link TweenCollection#add} and related add functions.\n *\n * @alias Tween\n * @constructor\n *\n * @private\n */\nfunction Tween(\n tweens,\n tweenjs,\n startObject,\n stopObject,\n duration,\n delay,\n easingFunction,\n update,\n complete,\n cancel\n) {\n this._tweens = tweens;\n this._tweenjs = tweenjs;\n\n this._startObject = clone(startObject);\n this._stopObject = clone(stopObject);\n\n this._duration = duration;\n this._delay = delay;\n this._easingFunction = easingFunction;\n\n this._update = update;\n this._complete = complete;\n\n /**\n * The callback to call if the tween is canceled either because {@link Tween#cancelTween}\n * was called or because the tween was removed from the collection.\n *\n * @type {TweenCollection.TweenCancelledCallback}\n */\n this.cancel = cancel;\n\n /**\n * @private\n */\n this.needsStart = true;\n}\n\nObject.defineProperties(Tween.prototype, {\n /**\n * An object with properties for initial values of the tween. The properties of this object are changed during the tween's animation.\n * @memberof Tween.prototype\n *\n * @type {Object}\n * @readonly\n */\n startObject: {\n get: function () {\n return this._startObject;\n },\n },\n\n /**\n * An object with properties for the final values of the tween.\n * @memberof Tween.prototype\n *\n * @type {Object}\n * @readonly\n */\n stopObject: {\n get: function () {\n return this._stopObject;\n },\n },\n\n /**\n * The duration, in seconds, for the tween. The tween is automatically removed from the collection when it stops.\n * @memberof Tween.prototype\n *\n * @type {Number}\n * @readonly\n */\n duration: {\n get: function () {\n return this._duration;\n },\n },\n\n /**\n * The delay, in seconds, before the tween starts animating.\n * @memberof Tween.prototype\n *\n * @type {Number}\n * @readonly\n */\n delay: {\n get: function () {\n return this._delay;\n },\n },\n\n /**\n * Determines the curve for animtion.\n * @memberof Tween.prototype\n *\n * @type {EasingFunction}\n * @readonly\n */\n easingFunction: {\n get: function () {\n return this._easingFunction;\n },\n },\n\n /**\n * The callback to call at each animation update (usually tied to the a rendered frame).\n * @memberof Tween.prototype\n *\n * @type {TweenCollection.TweenUpdateCallback}\n * @readonly\n */\n update: {\n get: function () {\n return this._update;\n },\n },\n\n /**\n * The callback to call when the tween finishes animating.\n * @memberof Tween.prototype\n *\n * @type {TweenCollection.TweenCompleteCallback}\n * @readonly\n */\n complete: {\n get: function () {\n return this._complete;\n },\n },\n\n /**\n * @memberof Tween.prototype\n *\n * @private\n */\n tweenjs: {\n get: function () {\n return this._tweenjs;\n },\n },\n});\n\n/**\n * Cancels the tween calling the {@link Tween#cancel} callback if one exists. This\n * has no effect if the tween finished or was already canceled.\n */\nTween.prototype.cancelTween = function () {\n this._tweens.remove(this);\n};\n\n/**\n * A collection of tweens for animating properties. Commonly accessed using {@link Scene#tweens}.\n *\n * @alias TweenCollection\n * @constructor\n *\n * @private\n */\nfunction TweenCollection() {\n this._tweens = [];\n}\n\nObject.defineProperties(TweenCollection.prototype, {\n /**\n * The number of tweens in the collection.\n * @memberof TweenCollection.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._tweens.length;\n },\n },\n});\n\n/**\n * Creates a tween for animating between two sets of properties. The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Object} options.startObject An object with properties for initial values of the tween. The properties of this object are changed during the tween's animation.\n * @param {Object} options.stopObject An object with properties for the final values of the tween.\n * @param {Number} options.duration The duration, in seconds, for the tween. The tween is automatically removed from the collection when it stops.\n * @param {Number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.add = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.startObject) || !defined(options.stopObject)) {\n throw new DeveloperError(\n \"options.startObject and options.stopObject are required.\"\n );\n }\n\n if (!defined(options.duration) || options.duration < 0.0) {\n throw new DeveloperError(\n \"options.duration is required and must be positive.\"\n );\n }\n //>>includeEnd('debug');\n\n if (options.duration === 0.0) {\n if (defined(options.complete)) {\n options.complete();\n }\n return new Tween(this);\n }\n\n var duration = options.duration / TimeConstants.SECONDS_PER_MILLISECOND;\n var delayInSeconds = defaultValue(options.delay, 0.0);\n var delay = delayInSeconds / TimeConstants.SECONDS_PER_MILLISECOND;\n var easingFunction = defaultValue(\n options.easingFunction,\n EasingFunction.LINEAR_NONE\n );\n\n var value = options.startObject;\n var tweenjs = new TweenJS.Tween(value);\n tweenjs.to(clone(options.stopObject), duration);\n tweenjs.delay(delay);\n tweenjs.easing(easingFunction);\n if (defined(options.update)) {\n tweenjs.onUpdate(function () {\n options.update(value);\n });\n }\n tweenjs.onComplete(defaultValue(options.complete, null));\n tweenjs.repeat(defaultValue(options._repeat, 0.0));\n\n var tween = new Tween(\n this,\n tweenjs,\n options.startObject,\n options.stopObject,\n options.duration,\n delayInSeconds,\n easingFunction,\n options.update,\n options.complete,\n options.cancel\n );\n this._tweens.push(tween);\n return tween;\n};\n\n/**\n * Creates a tween for animating a scalar property on the given object. The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Object} options.object The object containing the property to animate.\n * @param {String} options.property The name of the property to animate.\n * @param {Number} options.startValue The initial value.\n * @param {Number} options.stopValue The final value.\n * @param {Number} [options.duration=3.0] The duration, in seconds, for the tween. The tween is automatically removed from the collection when it stops.\n * @param {Number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} options.object must have the specified property.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addProperty = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var object = options.object;\n var property = options.property;\n var startValue = options.startValue;\n var stopValue = options.stopValue;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(object) || !defined(options.property)) {\n throw new DeveloperError(\n \"options.object and options.property are required.\"\n );\n }\n if (!defined(object[property])) {\n throw new DeveloperError(\n \"options.object must have the specified property.\"\n );\n }\n if (!defined(startValue) || !defined(stopValue)) {\n throw new DeveloperError(\n \"options.startValue and options.stopValue are required.\"\n );\n }\n //>>includeEnd('debug');\n\n function update(value) {\n object[property] = value.value;\n }\n\n return this.add({\n startObject: {\n value: startValue,\n },\n stopObject: {\n value: stopValue,\n },\n duration: defaultValue(options.duration, 3.0),\n delay: options.delay,\n easingFunction: options.easingFunction,\n update: update,\n complete: options.complete,\n cancel: options.cancel,\n _repeat: options._repeat,\n });\n};\n\n/**\n * Creates a tween for animating the alpha of all color uniforms on a {@link Material}. The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Material} options.material The material to animate.\n * @param {Number} [options.startValue=0.0] The initial alpha value.\n * @param {Number} [options.stopValue=1.0] The final alpha value.\n * @param {Number} [options.duration=3.0] The duration, in seconds, for the tween. The tween is automatically removed from the collection when it stops.\n * @param {Number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} material has no properties with alpha components.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addAlpha = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var material = options.material;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(material)) {\n throw new DeveloperError(\"options.material is required.\");\n }\n //>>includeEnd('debug');\n\n var properties = [];\n\n for (var property in material.uniforms) {\n if (\n material.uniforms.hasOwnProperty(property) &&\n defined(material.uniforms[property]) &&\n defined(material.uniforms[property].alpha)\n ) {\n properties.push(property);\n }\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (properties.length === 0) {\n throw new DeveloperError(\n \"material has no properties with alpha components.\"\n );\n }\n //>>includeEnd('debug');\n\n function update(value) {\n var length = properties.length;\n for (var i = 0; i < length; ++i) {\n material.uniforms[properties[i]].alpha = value.alpha;\n }\n }\n\n return this.add({\n startObject: {\n alpha: defaultValue(options.startValue, 0.0), // Default to fade in\n },\n stopObject: {\n alpha: defaultValue(options.stopValue, 1.0),\n },\n duration: defaultValue(options.duration, 3.0),\n delay: options.delay,\n easingFunction: options.easingFunction,\n update: update,\n complete: options.complete,\n cancel: options.cancel,\n });\n};\n\n/**\n * Creates a tween for animating the offset uniform of a {@link Material}. The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Material} options.material The material to animate.\n * @param {Number} options.startValue The initial alpha value.\n * @param {Number} options.stopValue The final alpha value.\n * @param {Number} [options.duration=3.0] The duration, in seconds, for the tween. The tween is automatically removed from the collection when it stops.\n * @param {Number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} material.uniforms must have an offset property.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addOffsetIncrement = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var material = options.material;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(material)) {\n throw new DeveloperError(\"material is required.\");\n }\n if (!defined(material.uniforms.offset)) {\n throw new DeveloperError(\"material.uniforms must have an offset property.\");\n }\n //>>includeEnd('debug');\n\n var uniforms = material.uniforms;\n return this.addProperty({\n object: uniforms,\n property: \"offset\",\n startValue: uniforms.offset,\n stopValue: uniforms.offset + 1,\n duration: options.duration,\n delay: options.delay,\n easingFunction: options.easingFunction,\n update: options.update,\n cancel: options.cancel,\n _repeat: Infinity,\n });\n};\n\n/**\n * Removes a tween from the collection.\n * <p>\n * This calls the {@link Tween#cancel} callback if the tween has one.\n * </p>\n *\n * @param {Tween} tween The tween to remove.\n * @returns {Boolean} <code>true</code> if the tween was removed; <code>false</code> if the tween was not found in the collection.\n */\nTweenCollection.prototype.remove = function (tween) {\n if (!defined(tween)) {\n return false;\n }\n\n var index = this._tweens.indexOf(tween);\n if (index !== -1) {\n tween.tweenjs.stop();\n if (defined(tween.cancel)) {\n tween.cancel();\n }\n this._tweens.splice(index, 1);\n return true;\n }\n\n return false;\n};\n\n/**\n * Removes all tweens from the collection.\n * <p>\n * This calls the {@link Tween#cancel} callback for each tween that has one.\n * </p>\n */\nTweenCollection.prototype.removeAll = function () {\n var tweens = this._tweens;\n\n for (var i = 0; i < tweens.length; ++i) {\n var tween = tweens[i];\n tween.tweenjs.stop();\n if (defined(tween.cancel)) {\n tween.cancel();\n }\n }\n tweens.length = 0;\n};\n\n/**\n * Determines whether this collection contains a given tween.\n *\n * @param {Tween} tween The tween to check for.\n * @returns {Boolean} <code>true</code> if this collection contains the tween, <code>false</code> otherwise.\n */\nTweenCollection.prototype.contains = function (tween) {\n return defined(tween) && this._tweens.indexOf(tween) !== -1;\n};\n\n/**\n * Returns the tween in the collection at the specified index. Indices are zero-based\n * and increase as tweens are added. Removing a tween shifts all tweens after\n * it to the left, changing their indices. This function is commonly used to iterate over\n * all the tween in the collection.\n *\n * @param {Number} index The zero-based index of the tween.\n * @returns {Tween} The tween at the specified index.\n *\n * @example\n * // Output the duration of all the tweens in the collection.\n * var tweens = scene.tweens;\n * var length = tweens.length;\n * for (var i = 0; i < length; ++i) {\n * console.log(tweens.get(i).duration);\n * }\n */\nTweenCollection.prototype.get = function (index) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(index)) {\n throw new DeveloperError(\"index is required.\");\n }\n //>>includeEnd('debug');\n\n return this._tweens[index];\n};\n\n/**\n * Updates the tweens in the collection to be at the provide time. When a tween finishes, it is removed\n * from the collection.\n *\n * @param {Number} [time=getTimestamp()] The time in seconds. By default tweens are synced to the system clock.\n */\nTweenCollection.prototype.update = function (time) {\n var tweens = this._tweens;\n\n var i = 0;\n time = defined(time)\n ? time / TimeConstants.SECONDS_PER_MILLISECOND\n : getTimestamp();\n while (i < tweens.length) {\n var tween = tweens[i];\n var tweenjs = tween.tweenjs;\n\n if (tween.needsStart) {\n tween.needsStart = false;\n tweenjs.start(time);\n } else if (tweenjs.update(time)) {\n i++;\n } else {\n tweenjs.stop();\n tweens.splice(i, 1);\n }\n }\n};\n\n/**\n * A function that will execute when a tween completes.\n * @callback TweenCollection.TweenCompleteCallback\n */\n\n/**\n * A function that will execute when a tween updates.\n * @callback TweenCollection.TweenUpdateCallback\n */\n\n/**\n * A function that will execute when a tween is cancelled.\n * @callback TweenCollection.TweenCancelledCallback\n */\nexport default TweenCollection;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport KeyboardEventModifier from \"../Core/KeyboardEventModifier.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Plane from \"../Core/Plane.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport CameraEventAggregator from \"./CameraEventAggregator.js\";\nimport CameraEventType from \"./CameraEventType.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport TweenCollection from \"./TweenCollection.js\";\n\n/**\n * Modifies the camera position and orientation based on mouse input to a canvas.\n * @alias ScreenSpaceCameraController\n * @constructor\n *\n * @param {Scene} scene The scene.\n */\nfunction ScreenSpaceCameraController(scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n /**\n * If true, inputs are allowed conditionally with the flags enableTranslate, enableZoom,\n * enableRotate, enableTilt, and enableLook. If false, all inputs are disabled.\n *\n * NOTE: This setting is for temporary use cases, such as camera flights and\n * drag-selection of regions (see Picking demo). It is typically set to false at the\n * start of such events, and set true on completion. To keep inputs disabled\n * past the end of camera flights, you must use the other booleans (enableTranslate,\n * enableZoom, enableRotate, enableTilt, and enableLook).\n * @type {Boolean}\n * @default true\n */\n this.enableInputs = true;\n /**\n * If true, allows the user to pan around the map. If false, the camera stays locked at the current position.\n * This flag only applies in 2D and Columbus view modes.\n * @type {Boolean}\n * @default true\n */\n this.enableTranslate = true;\n /**\n * If true, allows the user to zoom in and out. If false, the camera is locked to the current distance from the ellipsoid.\n * @type {Boolean}\n * @default true\n */\n this.enableZoom = true;\n /**\n * If true, allows the user to rotate the world which translates the user's position.\n * This flag only applies in 2D and 3D.\n * @type {Boolean}\n * @default true\n */\n this.enableRotate = true;\n /**\n * If true, allows the user to tilt the camera. If false, the camera is locked to the current heading.\n * This flag only applies in 3D and Columbus view.\n * @type {Boolean}\n * @default true\n */\n this.enableTilt = true;\n /**\n * If true, allows the user to use free-look. If false, the camera view direction can only be changed through translating\n * or rotating. This flag only applies in 3D and Columbus view modes.\n * @type {Boolean}\n * @default true\n */\n this.enableLook = true;\n /**\n * A parameter in the range <code>[0, 1)</code> used to determine how long\n * the camera will continue to spin because of inertia.\n * With value of zero, the camera will have no inertia.\n * @type {Number}\n * @default 0.9\n */\n this.inertiaSpin = 0.9;\n /**\n * A parameter in the range <code>[0, 1)</code> used to determine how long\n * the camera will continue to translate because of inertia.\n * With value of zero, the camera will have no inertia.\n * @type {Number}\n * @default 0.9\n */\n this.inertiaTranslate = 0.9;\n /**\n * A parameter in the range <code>[0, 1)</code> used to determine how long\n * the camera will continue to zoom because of inertia.\n * With value of zero, the camera will have no inertia.\n * @type {Number}\n * @default 0.8\n */\n this.inertiaZoom = 0.8;\n /**\n * A parameter in the range <code>[0, 1)</code> used to limit the range\n * of various user inputs to a percentage of the window width/height per animation frame.\n * This helps keep the camera under control in low-frame-rate situations.\n * @type {Number}\n * @default 0.1\n */\n this.maximumMovementRatio = 0.1;\n /**\n * Sets the duration, in seconds, of the bounce back animations in 2D and Columbus view.\n * @type {Number}\n * @default 3.0\n */\n this.bounceAnimationTime = 3.0;\n /**\n * The minimum magnitude, in meters, of the camera position when zooming. Defaults to 1.0.\n * @type {Number}\n * @default 1.0\n */\n this.minimumZoomDistance = 1.0;\n /**\n * The maximum magnitude, in meters, of the camera position when zooming. Defaults to positive infinity.\n * @type {Number}\n * @default {@link Number.POSITIVE_INFINITY}\n */\n this.maximumZoomDistance = Number.POSITIVE_INFINITY;\n /**\n * The input that allows the user to pan around the map. This only applies in 2D and Columbus view modes.\n * <p>\n * The type came be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n * or an array of any of the preceding.\n * </p>\n * @type {CameraEventType|Array|undefined}\n * @default {@link CameraEventType.LEFT_DRAG}\n */\n this.translateEventTypes = CameraEventType.LEFT_DRAG;\n /**\n * The input that allows the user to zoom in/out.\n * <p>\n * The type came be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n * or an array of any of the preceding.\n * </p>\n * @type {CameraEventType|Array|undefined}\n * @default [{@link CameraEventType.RIGHT_DRAG}, {@link CameraEventType.WHEEL}, {@link CameraEventType.PINCH}]\n */\n this.zoomEventTypes = [\n CameraEventType.RIGHT_DRAG,\n CameraEventType.WHEEL,\n CameraEventType.PINCH,\n ];\n /**\n * The input that allows the user to rotate around the globe or another object. This only applies in 3D and Columbus view modes.\n * <p>\n * The type came be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n * or an array of any of the preceding.\n * </p>\n * @type {CameraEventType|Array|undefined}\n * @default {@link CameraEventType.LEFT_DRAG}\n */\n this.rotateEventTypes = CameraEventType.LEFT_DRAG;\n /**\n * The input that allows the user to tilt in 3D and Columbus view or twist in 2D.\n * <p>\n * The type came be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n * or an array of any of the preceding.\n * </p>\n * @type {CameraEventType|Array|undefined}\n * @default [{@link CameraEventType.MIDDLE_DRAG}, {@link CameraEventType.PINCH}, {\n * eventType : {@link CameraEventType.LEFT_DRAG},\n * modifier : {@link KeyboardEventModifier.CTRL}\n * }, {\n * eventType : {@link CameraEventType.RIGHT_DRAG},\n * modifier : {@link KeyboardEventModifier.CTRL}\n * }]\n */\n this.tiltEventTypes = [\n CameraEventType.MIDDLE_DRAG,\n CameraEventType.PINCH,\n {\n eventType: CameraEventType.LEFT_DRAG,\n modifier: KeyboardEventModifier.CTRL,\n },\n {\n eventType: CameraEventType.RIGHT_DRAG,\n modifier: KeyboardEventModifier.CTRL,\n },\n ];\n /**\n * The input that allows the user to change the direction the camera is viewing. This only applies in 3D and Columbus view modes.\n * <p>\n * The type came be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n * or an array of any of the preceding.\n * </p>\n * @type {CameraEventType|Array|undefined}\n * @default { eventType : {@link CameraEventType.LEFT_DRAG}, modifier : {@link KeyboardEventModifier.SHIFT} }\n */\n this.lookEventTypes = {\n eventType: CameraEventType.LEFT_DRAG,\n modifier: KeyboardEventModifier.SHIFT,\n };\n /**\n * The minimum height the camera must be before picking the terrain instead of the ellipsoid.\n * @type {Number}\n * @default 150000.0\n */\n this.minimumPickingTerrainHeight = 150000.0;\n this._minimumPickingTerrainHeight = this.minimumPickingTerrainHeight;\n /**\n * The minimum height the camera must be before testing for collision with terrain.\n * @type {Number}\n * @default 15000.0\n */\n this.minimumCollisionTerrainHeight = 15000.0;\n this._minimumCollisionTerrainHeight = this.minimumCollisionTerrainHeight;\n /**\n * The minimum height the camera must be before switching from rotating a track ball to\n * free look when clicks originate on the sky or in space.\n * @type {Number}\n * @default 7500000.0\n */\n this.minimumTrackBallHeight = 7500000.0;\n this._minimumTrackBallHeight = this.minimumTrackBallHeight;\n /**\n * Enables or disables camera collision detection with terrain.\n * @type {Boolean}\n * @default true\n */\n this.enableCollisionDetection = true;\n\n this._scene = scene;\n this._globe = undefined;\n this._ellipsoid = undefined;\n\n this._aggregator = new CameraEventAggregator(scene.canvas);\n\n this._lastInertiaSpinMovement = undefined;\n this._lastInertiaZoomMovement = undefined;\n this._lastInertiaTranslateMovement = undefined;\n this._lastInertiaTiltMovement = undefined;\n\n // Zoom disables tilt, spin, and translate inertia\n // Tilt disables spin and translate inertia\n this._inertiaDisablers = {\n _lastInertiaZoomMovement: [\n \"_lastInertiaSpinMovement\",\n \"_lastInertiaTranslateMovement\",\n \"_lastInertiaTiltMovement\",\n ],\n _lastInertiaTiltMovement: [\n \"_lastInertiaSpinMovement\",\n \"_lastInertiaTranslateMovement\",\n ],\n };\n\n this._tweens = new TweenCollection();\n this._tween = undefined;\n\n this._horizontalRotationAxis = undefined;\n\n this._tiltCenterMousePosition = new Cartesian2(-1.0, -1.0);\n this._tiltCenter = new Cartesian3();\n this._rotateMousePosition = new Cartesian2(-1.0, -1.0);\n this._rotateStartPosition = new Cartesian3();\n this._strafeStartPosition = new Cartesian3();\n this._strafeMousePosition = new Cartesian2();\n this._strafeEndMousePosition = new Cartesian2();\n this._zoomMouseStart = new Cartesian2(-1.0, -1.0);\n this._zoomWorldPosition = new Cartesian3();\n this._useZoomWorldPosition = false;\n this._tiltCVOffMap = false;\n this._looking = false;\n this._rotating = false;\n this._strafing = false;\n this._zoomingOnVector = false;\n this._zoomingUnderground = false;\n this._rotatingZoom = false;\n this._adjustedHeightForTerrain = false;\n this._cameraUnderground = false;\n\n var projection = scene.mapProjection;\n this._maxCoord = projection.project(\n new Cartographic(Math.PI, CesiumMath.PI_OVER_TWO)\n );\n\n // Constants, Make any of these public?\n this._zoomFactor = 5.0;\n this._rotateFactor = undefined;\n this._rotateRateRangeAdjustment = undefined;\n this._maximumRotateRate = 1.77;\n this._minimumRotateRate = 1.0 / 5000.0;\n this._minimumZoomRate = 20.0;\n this._maximumZoomRate = 5906376272000.0; // distance from the Sun to Pluto in meters.\n this._minimumUndergroundPickDistance = 2000.0;\n this._maximumUndergroundPickDistance = 10000.0;\n}\n\nfunction decay(time, coefficient) {\n if (time < 0) {\n return 0.0;\n }\n\n var tau = (1.0 - coefficient) * 25.0;\n return Math.exp(-tau * time);\n}\n\nfunction sameMousePosition(movement) {\n return Cartesian2.equalsEpsilon(\n movement.startPosition,\n movement.endPosition,\n CesiumMath.EPSILON14\n );\n}\n\n// If the time between mouse down and mouse up is not between\n// these thresholds, the camera will not move with inertia.\n// This value is probably dependent on the browser and/or the\n// hardware. Should be investigated further.\nvar inertiaMaxClickTimeThreshold = 0.4;\n\nfunction maintainInertia(\n aggregator,\n type,\n modifier,\n decayCoef,\n action,\n object,\n lastMovementName\n) {\n var movementState = object[lastMovementName];\n if (!defined(movementState)) {\n movementState = object[lastMovementName] = {\n startPosition: new Cartesian2(),\n endPosition: new Cartesian2(),\n motion: new Cartesian2(),\n inertiaEnabled: true,\n };\n }\n\n var ts = aggregator.getButtonPressTime(type, modifier);\n var tr = aggregator.getButtonReleaseTime(type, modifier);\n\n var threshold = ts && tr && (tr.getTime() - ts.getTime()) / 1000.0;\n var now = new Date();\n var fromNow = tr && (now.getTime() - tr.getTime()) / 1000.0;\n\n if (ts && tr && threshold < inertiaMaxClickTimeThreshold) {\n var d = decay(fromNow, decayCoef);\n\n var lastMovement = aggregator.getLastMovement(type, modifier);\n if (\n !defined(lastMovement) ||\n sameMousePosition(lastMovement) ||\n !movementState.inertiaEnabled\n ) {\n return;\n }\n\n movementState.motion.x =\n (lastMovement.endPosition.x - lastMovement.startPosition.x) * 0.5;\n movementState.motion.y =\n (lastMovement.endPosition.y - lastMovement.startPosition.y) * 0.5;\n\n movementState.startPosition = Cartesian2.clone(\n lastMovement.startPosition,\n movementState.startPosition\n );\n\n movementState.endPosition = Cartesian2.multiplyByScalar(\n movementState.motion,\n d,\n movementState.endPosition\n );\n movementState.endPosition = Cartesian2.add(\n movementState.startPosition,\n movementState.endPosition,\n movementState.endPosition\n );\n\n // If value from the decreasing exponential function is close to zero,\n // the end coordinates may be NaN.\n if (\n isNaN(movementState.endPosition.x) ||\n isNaN(movementState.endPosition.y) ||\n Cartesian2.distance(\n movementState.startPosition,\n movementState.endPosition\n ) < 0.5\n ) {\n return;\n }\n\n if (!aggregator.isButtonDown(type, modifier)) {\n var startPosition = aggregator.getStartMousePosition(type, modifier);\n action(object, startPosition, movementState);\n }\n }\n}\n\nfunction activateInertia(controller, inertiaStateName) {\n if (defined(inertiaStateName)) {\n // Re-enable inertia if it was disabled\n var movementState = controller[inertiaStateName];\n if (defined(movementState)) {\n movementState.inertiaEnabled = true;\n }\n // Disable inertia on other movements\n var inertiasToDisable = controller._inertiaDisablers[inertiaStateName];\n if (defined(inertiasToDisable)) {\n var length = inertiasToDisable.length;\n for (var i = 0; i < length; ++i) {\n movementState = controller[inertiasToDisable[i]];\n if (defined(movementState)) {\n movementState.inertiaEnabled = false;\n }\n }\n }\n }\n}\n\nvar scratchEventTypeArray = [];\n\nfunction reactToInput(\n controller,\n enabled,\n eventTypes,\n action,\n inertiaConstant,\n inertiaStateName\n) {\n if (!defined(eventTypes)) {\n return;\n }\n\n var aggregator = controller._aggregator;\n\n if (!Array.isArray(eventTypes)) {\n scratchEventTypeArray[0] = eventTypes;\n eventTypes = scratchEventTypeArray;\n }\n\n var length = eventTypes.length;\n for (var i = 0; i < length; ++i) {\n var eventType = eventTypes[i];\n var type = defined(eventType.eventType) ? eventType.eventType : eventType;\n var modifier = eventType.modifier;\n\n var movement =\n aggregator.isMoving(type, modifier) &&\n aggregator.getMovement(type, modifier);\n var startPosition = aggregator.getStartMousePosition(type, modifier);\n\n if (controller.enableInputs && enabled) {\n if (movement) {\n action(controller, startPosition, movement);\n activateInertia(controller, inertiaStateName);\n } else if (inertiaConstant < 1.0) {\n maintainInertia(\n aggregator,\n type,\n modifier,\n inertiaConstant,\n action,\n controller,\n inertiaStateName\n );\n }\n }\n }\n}\n\nvar scratchZoomPickRay = new Ray();\nvar scratchPickCartesian = new Cartesian3();\nvar scratchZoomOffset = new Cartesian2();\nvar scratchZoomDirection = new Cartesian3();\nvar scratchCenterPixel = new Cartesian2();\nvar scratchCenterPosition = new Cartesian3();\nvar scratchPositionNormal = new Cartesian3();\nvar scratchPickNormal = new Cartesian3();\nvar scratchZoomAxis = new Cartesian3();\nvar scratchCameraPositionNormal = new Cartesian3();\n\n// Scratch variables used in zooming algorithm\nvar scratchTargetNormal = new Cartesian3();\nvar scratchCameraPosition = new Cartesian3();\nvar scratchCameraUpNormal = new Cartesian3();\nvar scratchCameraRightNormal = new Cartesian3();\nvar scratchForwardNormal = new Cartesian3();\nvar scratchPositionToTarget = new Cartesian3();\nvar scratchPositionToTargetNormal = new Cartesian3();\nvar scratchPan = new Cartesian3();\nvar scratchCenterMovement = new Cartesian3();\nvar scratchCenter = new Cartesian3();\nvar scratchCartesian = new Cartesian3();\nvar scratchCartesianTwo = new Cartesian3();\nvar scratchCartesianThree = new Cartesian3();\nvar scratchZoomViewOptions = {\n orientation: new HeadingPitchRoll(),\n};\n\nfunction handleZoom(\n object,\n startPosition,\n movement,\n zoomFactor,\n distanceMeasure,\n unitPositionDotDirection\n) {\n var percentage = 1.0;\n if (defined(unitPositionDotDirection)) {\n percentage = CesiumMath.clamp(\n Math.abs(unitPositionDotDirection),\n 0.25,\n 1.0\n );\n }\n\n // distanceMeasure should be the height above the ellipsoid.\n // The zoomRate slows as it approaches the surface and stops minimumZoomDistance above it.\n var minHeight = object.minimumZoomDistance * percentage;\n var maxHeight = object.maximumZoomDistance;\n\n var minDistance = distanceMeasure - minHeight;\n var zoomRate = zoomFactor * minDistance;\n zoomRate = CesiumMath.clamp(\n zoomRate,\n object._minimumZoomRate,\n object._maximumZoomRate\n );\n\n var diff = movement.endPosition.y - movement.startPosition.y;\n var rangeWindowRatio = diff / object._scene.canvas.clientHeight;\n rangeWindowRatio = Math.min(rangeWindowRatio, object.maximumMovementRatio);\n var distance = zoomRate * rangeWindowRatio;\n\n if (\n object.enableCollisionDetection ||\n object.minimumZoomDistance === 0.0 ||\n !defined(object._globe) // look-at mode\n ) {\n if (distance > 0.0 && Math.abs(distanceMeasure - minHeight) < 1.0) {\n return;\n }\n\n if (distance < 0.0 && Math.abs(distanceMeasure - maxHeight) < 1.0) {\n return;\n }\n\n if (distanceMeasure - distance < minHeight) {\n distance = distanceMeasure - minHeight - 1.0;\n } else if (distanceMeasure - distance > maxHeight) {\n distance = distanceMeasure - maxHeight;\n }\n }\n\n var scene = object._scene;\n var camera = scene.camera;\n var mode = scene.mode;\n\n var orientation = scratchZoomViewOptions.orientation;\n orientation.heading = camera.heading;\n orientation.pitch = camera.pitch;\n orientation.roll = camera.roll;\n\n if (camera.frustum instanceof OrthographicFrustum) {\n if (Math.abs(distance) > 0.0) {\n camera.zoomIn(distance);\n camera._adjustOrthographicFrustum();\n }\n return;\n }\n\n var sameStartPosition = Cartesian2.equals(\n startPosition,\n object._zoomMouseStart\n );\n var zoomingOnVector = object._zoomingOnVector;\n var rotatingZoom = object._rotatingZoom;\n var pickedPosition;\n\n if (!sameStartPosition) {\n object._zoomMouseStart = Cartesian2.clone(\n startPosition,\n object._zoomMouseStart\n );\n\n if (defined(object._globe)) {\n if (mode === SceneMode.SCENE2D) {\n pickedPosition = camera.getPickRay(startPosition, scratchZoomPickRay)\n .origin;\n pickedPosition = Cartesian3.fromElements(\n pickedPosition.y,\n pickedPosition.z,\n pickedPosition.x\n );\n } else {\n pickedPosition = pickGlobe(object, startPosition, scratchPickCartesian);\n }\n }\n if (defined(pickedPosition)) {\n object._useZoomWorldPosition = true;\n object._zoomWorldPosition = Cartesian3.clone(\n pickedPosition,\n object._zoomWorldPosition\n );\n } else {\n object._useZoomWorldPosition = false;\n }\n\n zoomingOnVector = object._zoomingOnVector = false;\n rotatingZoom = object._rotatingZoom = false;\n object._zoomingUnderground = object._cameraUnderground;\n }\n\n if (!object._useZoomWorldPosition) {\n camera.zoomIn(distance);\n return;\n }\n\n var zoomOnVector = mode === SceneMode.COLUMBUS_VIEW;\n\n if (camera.positionCartographic.height < 2000000) {\n rotatingZoom = true;\n }\n\n if (!sameStartPosition || rotatingZoom) {\n if (mode === SceneMode.SCENE2D) {\n var worldPosition = object._zoomWorldPosition;\n var endPosition = camera.position;\n\n if (\n !Cartesian3.equals(worldPosition, endPosition) &&\n camera.positionCartographic.height < object._maxCoord.x * 2.0\n ) {\n var savedX = camera.position.x;\n\n var direction = Cartesian3.subtract(\n worldPosition,\n endPosition,\n scratchZoomDirection\n );\n Cartesian3.normalize(direction, direction);\n\n var d =\n (Cartesian3.distance(worldPosition, endPosition) * distance) /\n (camera.getMagnitude() * 0.5);\n camera.move(direction, d * 0.5);\n\n if (\n (camera.position.x < 0.0 && savedX > 0.0) ||\n (camera.position.x > 0.0 && savedX < 0.0)\n ) {\n pickedPosition = camera.getPickRay(startPosition, scratchZoomPickRay)\n .origin;\n pickedPosition = Cartesian3.fromElements(\n pickedPosition.y,\n pickedPosition.z,\n pickedPosition.x\n );\n object._zoomWorldPosition = Cartesian3.clone(\n pickedPosition,\n object._zoomWorldPosition\n );\n }\n }\n } else if (mode === SceneMode.SCENE3D) {\n var cameraPositionNormal = Cartesian3.normalize(\n camera.position,\n scratchCameraPositionNormal\n );\n if (\n object._cameraUnderground ||\n object._zoomingUnderground ||\n (camera.positionCartographic.height < 3000.0 &&\n Math.abs(Cartesian3.dot(camera.direction, cameraPositionNormal)) <\n 0.6)\n ) {\n zoomOnVector = true;\n } else {\n var canvas = scene.canvas;\n\n var centerPixel = scratchCenterPixel;\n centerPixel.x = canvas.clientWidth / 2;\n centerPixel.y = canvas.clientHeight / 2;\n var centerPosition = pickGlobe(\n object,\n centerPixel,\n scratchCenterPosition\n );\n // If centerPosition is not defined, it means the globe does not cover the center position of screen\n\n if (\n defined(centerPosition) &&\n camera.positionCartographic.height < 1000000\n ) {\n var cameraPosition = scratchCameraPosition;\n Cartesian3.clone(camera.position, cameraPosition);\n var target = object._zoomWorldPosition;\n\n var targetNormal = scratchTargetNormal;\n\n targetNormal = Cartesian3.normalize(target, targetNormal);\n\n if (Cartesian3.dot(targetNormal, cameraPositionNormal) < 0.0) {\n return;\n }\n\n var center = scratchCenter;\n var forward = scratchForwardNormal;\n Cartesian3.clone(camera.direction, forward);\n Cartesian3.add(\n cameraPosition,\n Cartesian3.multiplyByScalar(forward, 1000, scratchCartesian),\n center\n );\n\n var positionToTarget = scratchPositionToTarget;\n var positionToTargetNormal = scratchPositionToTargetNormal;\n Cartesian3.subtract(target, cameraPosition, positionToTarget);\n\n Cartesian3.normalize(positionToTarget, positionToTargetNormal);\n\n var alphaDot = Cartesian3.dot(\n cameraPositionNormal,\n positionToTargetNormal\n );\n if (alphaDot >= 0.0) {\n // We zoomed past the target, and this zoom is not valid anymore.\n // This line causes the next zoom movement to pick a new starting point.\n object._zoomMouseStart.x = -1;\n return;\n }\n var alpha = Math.acos(-alphaDot);\n var cameraDistance = Cartesian3.magnitude(cameraPosition);\n var targetDistance = Cartesian3.magnitude(target);\n var remainingDistance = cameraDistance - distance;\n var positionToTargetDistance = Cartesian3.magnitude(positionToTarget);\n\n var gamma = Math.asin(\n CesiumMath.clamp(\n (positionToTargetDistance / targetDistance) * Math.sin(alpha),\n -1.0,\n 1.0\n )\n );\n var delta = Math.asin(\n CesiumMath.clamp(\n (remainingDistance / targetDistance) * Math.sin(alpha),\n -1.0,\n 1.0\n )\n );\n var beta = gamma - delta + alpha;\n\n var up = scratchCameraUpNormal;\n Cartesian3.normalize(cameraPosition, up);\n var right = scratchCameraRightNormal;\n right = Cartesian3.cross(positionToTargetNormal, up, right);\n right = Cartesian3.normalize(right, right);\n\n Cartesian3.normalize(\n Cartesian3.cross(up, right, scratchCartesian),\n forward\n );\n\n // Calculate new position to move to\n Cartesian3.multiplyByScalar(\n Cartesian3.normalize(center, scratchCartesian),\n Cartesian3.magnitude(center) - distance,\n center\n );\n Cartesian3.normalize(cameraPosition, cameraPosition);\n Cartesian3.multiplyByScalar(\n cameraPosition,\n remainingDistance,\n cameraPosition\n );\n\n // Pan\n var pMid = scratchPan;\n Cartesian3.multiplyByScalar(\n Cartesian3.add(\n Cartesian3.multiplyByScalar(\n up,\n Math.cos(beta) - 1,\n scratchCartesianTwo\n ),\n Cartesian3.multiplyByScalar(\n forward,\n Math.sin(beta),\n scratchCartesianThree\n ),\n scratchCartesian\n ),\n remainingDistance,\n pMid\n );\n Cartesian3.add(cameraPosition, pMid, cameraPosition);\n\n Cartesian3.normalize(center, up);\n Cartesian3.normalize(\n Cartesian3.cross(up, right, scratchCartesian),\n forward\n );\n\n var cMid = scratchCenterMovement;\n Cartesian3.multiplyByScalar(\n Cartesian3.add(\n Cartesian3.multiplyByScalar(\n up,\n Math.cos(beta) - 1,\n scratchCartesianTwo\n ),\n Cartesian3.multiplyByScalar(\n forward,\n Math.sin(beta),\n scratchCartesianThree\n ),\n scratchCartesian\n ),\n Cartesian3.magnitude(center),\n cMid\n );\n Cartesian3.add(center, cMid, center);\n\n // Update camera\n\n // Set new position\n Cartesian3.clone(cameraPosition, camera.position);\n\n // Set new direction\n Cartesian3.normalize(\n Cartesian3.subtract(center, cameraPosition, scratchCartesian),\n camera.direction\n );\n Cartesian3.clone(camera.direction, camera.direction);\n\n // Set new right & up vectors\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n camera.setView(scratchZoomViewOptions);\n return;\n }\n\n if (defined(centerPosition)) {\n var positionNormal = Cartesian3.normalize(\n centerPosition,\n scratchPositionNormal\n );\n var pickedNormal = Cartesian3.normalize(\n object._zoomWorldPosition,\n scratchPickNormal\n );\n var dotProduct = Cartesian3.dot(pickedNormal, positionNormal);\n\n if (dotProduct > 0.0 && dotProduct < 1.0) {\n var angle = CesiumMath.acosClamped(dotProduct);\n var axis = Cartesian3.cross(\n pickedNormal,\n positionNormal,\n scratchZoomAxis\n );\n\n var denom =\n Math.abs(angle) > CesiumMath.toRadians(20.0)\n ? camera.positionCartographic.height * 0.75\n : camera.positionCartographic.height - distance;\n var scalar = distance / denom;\n camera.rotate(axis, angle * scalar);\n }\n } else {\n zoomOnVector = true;\n }\n }\n }\n\n object._rotatingZoom = !zoomOnVector;\n }\n\n if ((!sameStartPosition && zoomOnVector) || zoomingOnVector) {\n var ray;\n var zoomMouseStart = SceneTransforms.wgs84ToWindowCoordinates(\n scene,\n object._zoomWorldPosition,\n scratchZoomOffset\n );\n if (\n mode !== SceneMode.COLUMBUS_VIEW &&\n Cartesian2.equals(startPosition, object._zoomMouseStart) &&\n defined(zoomMouseStart)\n ) {\n ray = camera.getPickRay(zoomMouseStart, scratchZoomPickRay);\n } else {\n ray = camera.getPickRay(startPosition, scratchZoomPickRay);\n }\n\n var rayDirection = ray.direction;\n if (mode === SceneMode.COLUMBUS_VIEW || mode === SceneMode.SCENE2D) {\n Cartesian3.fromElements(\n rayDirection.y,\n rayDirection.z,\n rayDirection.x,\n rayDirection\n );\n }\n\n camera.move(rayDirection, distance);\n\n object._zoomingOnVector = true;\n } else {\n camera.zoomIn(distance);\n }\n\n if (!object._cameraUnderground) {\n camera.setView(scratchZoomViewOptions);\n }\n}\n\nvar translate2DStart = new Ray();\nvar translate2DEnd = new Ray();\nvar scratchTranslateP0 = new Cartesian3();\n\nfunction translate2D(controller, startPosition, movement) {\n var scene = controller._scene;\n var camera = scene.camera;\n var start = camera.getPickRay(movement.startPosition, translate2DStart)\n .origin;\n var end = camera.getPickRay(movement.endPosition, translate2DEnd).origin;\n\n start = Cartesian3.fromElements(start.y, start.z, start.x, start);\n end = Cartesian3.fromElements(end.y, end.z, end.x, end);\n\n var direction = Cartesian3.subtract(start, end, scratchTranslateP0);\n var distance = Cartesian3.magnitude(direction);\n\n if (distance > 0.0) {\n Cartesian3.normalize(direction, direction);\n camera.move(direction, distance);\n }\n}\n\nfunction zoom2D(controller, startPosition, movement) {\n if (defined(movement.distance)) {\n movement = movement.distance;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n\n handleZoom(\n controller,\n startPosition,\n movement,\n controller._zoomFactor,\n camera.getMagnitude()\n );\n}\n\nvar twist2DStart = new Cartesian2();\nvar twist2DEnd = new Cartesian2();\n\nfunction twist2D(controller, startPosition, movement) {\n if (defined(movement.angleAndHeight)) {\n singleAxisTwist2D(controller, startPosition, movement.angleAndHeight);\n return;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n var width = canvas.clientWidth;\n var height = canvas.clientHeight;\n\n var start = twist2DStart;\n start.x = (2.0 / width) * movement.startPosition.x - 1.0;\n start.y = (2.0 / height) * (height - movement.startPosition.y) - 1.0;\n start = Cartesian2.normalize(start, start);\n\n var end = twist2DEnd;\n end.x = (2.0 / width) * movement.endPosition.x - 1.0;\n end.y = (2.0 / height) * (height - movement.endPosition.y) - 1.0;\n end = Cartesian2.normalize(end, end);\n\n var startTheta = CesiumMath.acosClamped(start.x);\n if (start.y < 0) {\n startTheta = CesiumMath.TWO_PI - startTheta;\n }\n var endTheta = CesiumMath.acosClamped(end.x);\n if (end.y < 0) {\n endTheta = CesiumMath.TWO_PI - endTheta;\n }\n var theta = endTheta - startTheta;\n\n camera.twistRight(theta);\n}\n\nfunction singleAxisTwist2D(controller, startPosition, movement) {\n var rotateRate =\n controller._rotateFactor * controller._rotateRateRangeAdjustment;\n\n if (rotateRate > controller._maximumRotateRate) {\n rotateRate = controller._maximumRotateRate;\n }\n\n if (rotateRate < controller._minimumRotateRate) {\n rotateRate = controller._minimumRotateRate;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n\n var phiWindowRatio =\n (movement.endPosition.x - movement.startPosition.x) / canvas.clientWidth;\n phiWindowRatio = Math.min(phiWindowRatio, controller.maximumMovementRatio);\n\n var deltaPhi = rotateRate * phiWindowRatio * Math.PI * 4.0;\n\n camera.twistRight(deltaPhi);\n}\n\nfunction update2D(controller) {\n var rotatable2D = controller._scene.mapMode2D === MapMode2D.ROTATE;\n if (!Matrix4.equals(Matrix4.IDENTITY, controller._scene.camera.transform)) {\n reactToInput(\n controller,\n controller.enableZoom,\n controller.zoomEventTypes,\n zoom2D,\n controller.inertiaZoom,\n \"_lastInertiaZoomMovement\"\n );\n if (rotatable2D) {\n reactToInput(\n controller,\n controller.enableRotate,\n controller.translateEventTypes,\n twist2D,\n controller.inertiaSpin,\n \"_lastInertiaSpinMovement\"\n );\n }\n } else {\n reactToInput(\n controller,\n controller.enableTranslate,\n controller.translateEventTypes,\n translate2D,\n controller.inertiaTranslate,\n \"_lastInertiaTranslateMovement\"\n );\n reactToInput(\n controller,\n controller.enableZoom,\n controller.zoomEventTypes,\n zoom2D,\n controller.inertiaZoom,\n \"_lastInertiaZoomMovement\"\n );\n if (rotatable2D) {\n reactToInput(\n controller,\n controller.enableRotate,\n controller.tiltEventTypes,\n twist2D,\n controller.inertiaSpin,\n \"_lastInertiaTiltMovement\"\n );\n }\n }\n}\n\nvar pickGlobeScratchRay = new Ray();\nvar scratchDepthIntersection = new Cartesian3();\nvar scratchRayIntersection = new Cartesian3();\n\nfunction pickGlobe(controller, mousePosition, result) {\n var scene = controller._scene;\n var globe = controller._globe;\n var camera = scene.camera;\n\n if (!defined(globe)) {\n return undefined;\n }\n\n var cullBackFaces = !controller._cameraUnderground;\n\n var depthIntersection;\n if (scene.pickPositionSupported) {\n depthIntersection = scene.pickPositionWorldCoordinates(\n mousePosition,\n scratchDepthIntersection\n );\n }\n\n var ray = camera.getPickRay(mousePosition, pickGlobeScratchRay);\n var rayIntersection = globe.pickWorldCoordinates(\n ray,\n scene,\n cullBackFaces,\n scratchRayIntersection\n );\n\n var pickDistance = defined(depthIntersection)\n ? Cartesian3.distance(depthIntersection, camera.positionWC)\n : Number.POSITIVE_INFINITY;\n var rayDistance = defined(rayIntersection)\n ? Cartesian3.distance(rayIntersection, camera.positionWC)\n : Number.POSITIVE_INFINITY;\n\n if (pickDistance < rayDistance) {\n return Cartesian3.clone(depthIntersection, result);\n }\n\n return Cartesian3.clone(rayIntersection, result);\n}\n\nvar scratchDistanceCartographic = new Cartographic();\n\nfunction getDistanceFromSurface(controller) {\n var ellipsoid = controller._ellipsoid;\n var scene = controller._scene;\n var camera = scene.camera;\n var mode = scene.mode;\n\n var height = 0.0;\n if (mode === SceneMode.SCENE3D) {\n var cartographic = ellipsoid.cartesianToCartographic(\n camera.position,\n scratchDistanceCartographic\n );\n if (defined(cartographic)) {\n height = cartographic.height;\n }\n } else {\n height = camera.position.z;\n }\n var globeHeight = defaultValue(controller._scene.globeHeight, 0.0);\n var distanceFromSurface = Math.abs(globeHeight - height);\n return distanceFromSurface;\n}\n\nvar scratchSurfaceNormal = new Cartesian3();\n\nfunction getZoomDistanceUnderground(controller, ray) {\n var origin = ray.origin;\n var direction = ray.direction;\n var distanceFromSurface = getDistanceFromSurface(controller);\n\n // Weight zoom distance based on how strongly the pick ray is pointing inward.\n // Geocentric normal is accurate enough for these purposes\n var surfaceNormal = Cartesian3.normalize(origin, scratchSurfaceNormal);\n var strength = Math.abs(Cartesian3.dot(surfaceNormal, direction));\n strength = Math.max(strength, 0.5) * 2.0;\n return distanceFromSurface * strength;\n}\n\nfunction getTiltCenterUnderground(controller, ray, pickedPosition, result) {\n var distance = Cartesian3.distance(ray.origin, pickedPosition);\n var distanceFromSurface = getDistanceFromSurface(controller);\n\n var maximumDistance = CesiumMath.clamp(\n distanceFromSurface * 5.0,\n controller._minimumUndergroundPickDistance,\n controller._maximumUndergroundPickDistance\n );\n\n if (distance > maximumDistance) {\n // Simulate look-at behavior by tilting around a small invisible sphere\n distance = Math.min(distance, distanceFromSurface / 5.0);\n distance = Math.max(distance, 100.0);\n }\n\n return Ray.getPoint(ray, distance, result);\n}\n\nfunction getStrafeStartPositionUnderground(\n controller,\n ray,\n pickedPosition,\n result\n) {\n var distance;\n if (!defined(pickedPosition)) {\n distance = getDistanceFromSurface(controller);\n } else {\n distance = Cartesian3.distance(ray.origin, pickedPosition);\n if (distance > controller._maximumUndergroundPickDistance) {\n // If the picked position is too far away set the strafe speed based on the\n // camera's height from the globe surface\n distance = getDistanceFromSurface(controller);\n }\n }\n\n return Ray.getPoint(ray, distance, result);\n}\n\nvar scratchInertialDelta = new Cartesian2();\n\nfunction continueStrafing(controller, movement) {\n // Update the end position continually based on the inertial delta\n var originalEndPosition = movement.endPosition;\n var inertialDelta = Cartesian2.subtract(\n movement.endPosition,\n movement.startPosition,\n scratchInertialDelta\n );\n var endPosition = controller._strafeEndMousePosition;\n Cartesian2.add(endPosition, inertialDelta, endPosition);\n movement.endPosition = endPosition;\n strafe(controller, movement, controller._strafeStartPosition);\n movement.endPosition = originalEndPosition;\n}\n\nvar translateCVStartRay = new Ray();\nvar translateCVEndRay = new Ray();\nvar translateCVStartPos = new Cartesian3();\nvar translateCVEndPos = new Cartesian3();\nvar translateCVDifference = new Cartesian3();\nvar translateCVOrigin = new Cartesian3();\nvar translateCVPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nvar translateCVStartMouse = new Cartesian2();\nvar translateCVEndMouse = new Cartesian2();\n\nfunction translateCV(controller, startPosition, movement) {\n if (!Cartesian3.equals(startPosition, controller._translateMousePosition)) {\n controller._looking = false;\n }\n\n if (!Cartesian3.equals(startPosition, controller._strafeMousePosition)) {\n controller._strafing = false;\n }\n\n if (controller._looking) {\n look3D(controller, startPosition, movement);\n return;\n }\n\n if (controller._strafing) {\n continueStrafing(controller, movement);\n return;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n var cameraUnderground = controller._cameraUnderground;\n var startMouse = Cartesian2.clone(\n movement.startPosition,\n translateCVStartMouse\n );\n var endMouse = Cartesian2.clone(movement.endPosition, translateCVEndMouse);\n var startRay = camera.getPickRay(startMouse, translateCVStartRay);\n\n var origin = Cartesian3.clone(Cartesian3.ZERO, translateCVOrigin);\n var normal = Cartesian3.UNIT_X;\n\n var globePos;\n if (camera.position.z < controller._minimumPickingTerrainHeight) {\n globePos = pickGlobe(controller, startMouse, translateCVStartPos);\n if (defined(globePos)) {\n origin.x = globePos.x;\n }\n }\n\n if (\n cameraUnderground ||\n (origin.x > camera.position.z && defined(globePos))\n ) {\n var pickPosition = globePos;\n if (cameraUnderground) {\n pickPosition = getStrafeStartPositionUnderground(\n controller,\n startRay,\n globePos,\n translateCVStartPos\n );\n }\n Cartesian2.clone(startPosition, controller._strafeMousePosition);\n Cartesian2.clone(startPosition, controller._strafeEndMousePosition);\n Cartesian3.clone(pickPosition, controller._strafeStartPosition);\n controller._strafing = true;\n strafe(controller, movement, controller._strafeStartPosition);\n return;\n }\n\n var plane = Plane.fromPointNormal(origin, normal, translateCVPlane);\n\n startRay = camera.getPickRay(startMouse, translateCVStartRay);\n var startPlanePos = IntersectionTests.rayPlane(\n startRay,\n plane,\n translateCVStartPos\n );\n\n var endRay = camera.getPickRay(endMouse, translateCVEndRay);\n var endPlanePos = IntersectionTests.rayPlane(\n endRay,\n plane,\n translateCVEndPos\n );\n\n if (!defined(startPlanePos) || !defined(endPlanePos)) {\n controller._looking = true;\n look3D(controller, startPosition, movement);\n Cartesian2.clone(startPosition, controller._translateMousePosition);\n return;\n }\n\n var diff = Cartesian3.subtract(\n startPlanePos,\n endPlanePos,\n translateCVDifference\n );\n var temp = diff.x;\n diff.x = diff.y;\n diff.y = diff.z;\n diff.z = temp;\n var mag = Cartesian3.magnitude(diff);\n if (mag > CesiumMath.EPSILON6) {\n Cartesian3.normalize(diff, diff);\n camera.move(diff, mag);\n }\n}\n\nvar rotateCVWindowPos = new Cartesian2();\nvar rotateCVWindowRay = new Ray();\nvar rotateCVCenter = new Cartesian3();\nvar rotateCVVerticalCenter = new Cartesian3();\nvar rotateCVTransform = new Matrix4();\nvar rotateCVVerticalTransform = new Matrix4();\nvar rotateCVOrigin = new Cartesian3();\nvar rotateCVPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nvar rotateCVCartesian3 = new Cartesian3();\nvar rotateCVCart = new Cartographic();\nvar rotateCVOldTransform = new Matrix4();\nvar rotateCVQuaternion = new Quaternion();\nvar rotateCVMatrix = new Matrix3();\nvar tilt3DCartesian3 = new Cartesian3();\n\nfunction rotateCV(controller, startPosition, movement) {\n if (defined(movement.angleAndHeight)) {\n movement = movement.angleAndHeight;\n }\n\n if (!Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n controller._tiltCVOffMap = false;\n controller._looking = false;\n }\n\n if (controller._looking) {\n look3D(controller, startPosition, movement);\n return;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n\n if (\n controller._tiltCVOffMap ||\n !controller.onMap() ||\n Math.abs(camera.position.z) > controller._minimumPickingTerrainHeight\n ) {\n controller._tiltCVOffMap = true;\n rotateCVOnPlane(controller, startPosition, movement);\n } else {\n rotateCVOnTerrain(controller, startPosition, movement);\n }\n}\n\nfunction rotateCVOnPlane(controller, startPosition, movement) {\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n\n var windowPosition = rotateCVWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = canvas.clientHeight / 2;\n var ray = camera.getPickRay(windowPosition, rotateCVWindowRay);\n var normal = Cartesian3.UNIT_X;\n\n var position = ray.origin;\n var direction = ray.direction;\n var scalar;\n var normalDotDirection = Cartesian3.dot(normal, direction);\n if (Math.abs(normalDotDirection) > CesiumMath.EPSILON6) {\n scalar = -Cartesian3.dot(normal, position) / normalDotDirection;\n }\n\n if (!defined(scalar) || scalar <= 0.0) {\n controller._looking = true;\n look3D(controller, startPosition, movement);\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n return;\n }\n\n var center = Cartesian3.multiplyByScalar(direction, scalar, rotateCVCenter);\n Cartesian3.add(position, center, center);\n\n var projection = scene.mapProjection;\n var ellipsoid = projection.ellipsoid;\n\n Cartesian3.fromElements(center.y, center.z, center.x, center);\n var cart = projection.unproject(center, rotateCVCart);\n ellipsoid.cartographicToCartesian(cart, center);\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n center,\n ellipsoid,\n rotateCVTransform\n );\n\n var oldGlobe = controller._globe;\n var oldEllipsoid = controller._ellipsoid;\n controller._globe = undefined;\n controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n controller._rotateFactor = 1.0;\n controller._rotateRateRangeAdjustment = 1.0;\n\n var oldTransform = Matrix4.clone(camera.transform, rotateCVOldTransform);\n camera._setTransform(transform);\n\n rotate3D(controller, startPosition, movement, Cartesian3.UNIT_Z);\n\n camera._setTransform(oldTransform);\n controller._globe = oldGlobe;\n controller._ellipsoid = oldEllipsoid;\n\n var radius = oldEllipsoid.maximumRadius;\n controller._rotateFactor = 1.0 / radius;\n controller._rotateRateRangeAdjustment = radius;\n}\n\nfunction rotateCVOnTerrain(controller, startPosition, movement) {\n var scene = controller._scene;\n var camera = scene.camera;\n var cameraUnderground = controller._cameraUnderground;\n\n var center;\n var ray;\n var normal = Cartesian3.UNIT_X;\n\n if (Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n center = Cartesian3.clone(controller._tiltCenter, rotateCVCenter);\n } else {\n if (camera.position.z < controller._minimumPickingTerrainHeight) {\n center = pickGlobe(controller, startPosition, rotateCVCenter);\n }\n\n if (!defined(center)) {\n ray = camera.getPickRay(startPosition, rotateCVWindowRay);\n var position = ray.origin;\n var direction = ray.direction;\n\n var scalar;\n var normalDotDirection = Cartesian3.dot(normal, direction);\n if (Math.abs(normalDotDirection) > CesiumMath.EPSILON6) {\n scalar = -Cartesian3.dot(normal, position) / normalDotDirection;\n }\n\n if (!defined(scalar) || scalar <= 0.0) {\n controller._looking = true;\n look3D(controller, startPosition, movement);\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n return;\n }\n\n center = Cartesian3.multiplyByScalar(direction, scalar, rotateCVCenter);\n Cartesian3.add(position, center, center);\n }\n\n if (cameraUnderground) {\n if (!defined(ray)) {\n ray = camera.getPickRay(startPosition, rotateCVWindowRay);\n }\n getTiltCenterUnderground(controller, ray, center, center);\n }\n\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n Cartesian3.clone(center, controller._tiltCenter);\n }\n\n var canvas = scene.canvas;\n\n var windowPosition = rotateCVWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = controller._tiltCenterMousePosition.y;\n ray = camera.getPickRay(windowPosition, rotateCVWindowRay);\n\n var origin = Cartesian3.clone(Cartesian3.ZERO, rotateCVOrigin);\n origin.x = center.x;\n\n var plane = Plane.fromPointNormal(origin, normal, rotateCVPlane);\n var verticalCenter = IntersectionTests.rayPlane(\n ray,\n plane,\n rotateCVVerticalCenter\n );\n\n var projection = camera._projection;\n var ellipsoid = projection.ellipsoid;\n\n Cartesian3.fromElements(center.y, center.z, center.x, center);\n var cart = projection.unproject(center, rotateCVCart);\n ellipsoid.cartographicToCartesian(cart, center);\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n center,\n ellipsoid,\n rotateCVTransform\n );\n\n var verticalTransform;\n if (defined(verticalCenter)) {\n Cartesian3.fromElements(\n verticalCenter.y,\n verticalCenter.z,\n verticalCenter.x,\n verticalCenter\n );\n cart = projection.unproject(verticalCenter, rotateCVCart);\n ellipsoid.cartographicToCartesian(cart, verticalCenter);\n\n verticalTransform = Transforms.eastNorthUpToFixedFrame(\n verticalCenter,\n ellipsoid,\n rotateCVVerticalTransform\n );\n } else {\n verticalTransform = transform;\n }\n\n var oldGlobe = controller._globe;\n var oldEllipsoid = controller._ellipsoid;\n controller._globe = undefined;\n controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n controller._rotateFactor = 1.0;\n controller._rotateRateRangeAdjustment = 1.0;\n\n var constrainedAxis = Cartesian3.UNIT_Z;\n\n var oldTransform = Matrix4.clone(camera.transform, rotateCVOldTransform);\n camera._setTransform(transform);\n\n var tangent = Cartesian3.cross(\n Cartesian3.UNIT_Z,\n Cartesian3.normalize(camera.position, rotateCVCartesian3),\n rotateCVCartesian3\n );\n var dot = Cartesian3.dot(camera.right, tangent);\n\n rotate3D(controller, startPosition, movement, constrainedAxis, false, true);\n\n camera._setTransform(verticalTransform);\n if (dot < 0.0) {\n var movementDelta = movement.startPosition.y - movement.endPosition.y;\n if (\n (cameraUnderground && movementDelta < 0.0) ||\n (!cameraUnderground && movementDelta > 0.0)\n ) {\n // Prevent camera from flipping past the up axis\n constrainedAxis = undefined;\n }\n\n var oldConstrainedAxis = camera.constrainedAxis;\n camera.constrainedAxis = undefined;\n\n rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n\n camera.constrainedAxis = oldConstrainedAxis;\n } else {\n rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n }\n\n if (defined(camera.constrainedAxis)) {\n var right = Cartesian3.cross(\n camera.direction,\n camera.constrainedAxis,\n tilt3DCartesian3\n );\n if (\n !Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)\n ) {\n if (Cartesian3.dot(right, camera.right) < 0.0) {\n Cartesian3.negate(right, right);\n }\n\n Cartesian3.cross(right, camera.direction, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n Cartesian3.normalize(camera.up, camera.up);\n Cartesian3.normalize(camera.right, camera.right);\n }\n }\n\n camera._setTransform(oldTransform);\n controller._globe = oldGlobe;\n controller._ellipsoid = oldEllipsoid;\n\n var radius = oldEllipsoid.maximumRadius;\n controller._rotateFactor = 1.0 / radius;\n controller._rotateRateRangeAdjustment = radius;\n\n var originalPosition = Cartesian3.clone(\n camera.positionWC,\n rotateCVCartesian3\n );\n\n if (controller.enableCollisionDetection) {\n adjustHeightForTerrain(controller);\n }\n\n if (!Cartesian3.equals(camera.positionWC, originalPosition)) {\n camera._setTransform(verticalTransform);\n camera.worldToCameraCoordinatesPoint(originalPosition, originalPosition);\n\n var magSqrd = Cartesian3.magnitudeSquared(originalPosition);\n if (Cartesian3.magnitudeSquared(camera.position) > magSqrd) {\n Cartesian3.normalize(camera.position, camera.position);\n Cartesian3.multiplyByScalar(\n camera.position,\n Math.sqrt(magSqrd),\n camera.position\n );\n }\n\n var angle = Cartesian3.angleBetween(originalPosition, camera.position);\n var axis = Cartesian3.cross(\n originalPosition,\n camera.position,\n originalPosition\n );\n Cartesian3.normalize(axis, axis);\n\n var quaternion = Quaternion.fromAxisAngle(axis, angle, rotateCVQuaternion);\n var rotation = Matrix3.fromQuaternion(quaternion, rotateCVMatrix);\n Matrix3.multiplyByVector(rotation, camera.direction, camera.direction);\n Matrix3.multiplyByVector(rotation, camera.up, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n camera._setTransform(oldTransform);\n }\n}\n\nvar zoomCVWindowPos = new Cartesian2();\nvar zoomCVWindowRay = new Ray();\nvar zoomCVIntersection = new Cartesian3();\n\nfunction zoomCV(controller, startPosition, movement) {\n if (defined(movement.distance)) {\n movement = movement.distance;\n }\n\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n\n var cameraUnderground = controller._cameraUnderground;\n\n var windowPosition;\n\n if (cameraUnderground) {\n windowPosition = startPosition;\n } else {\n windowPosition = zoomCVWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = canvas.clientHeight / 2;\n }\n\n var ray = camera.getPickRay(windowPosition, zoomCVWindowRay);\n var position = ray.origin;\n var direction = ray.direction;\n var height = camera.position.z;\n\n var intersection;\n if (height < controller._minimumPickingTerrainHeight) {\n intersection = pickGlobe(controller, windowPosition, zoomCVIntersection);\n }\n\n var distance;\n if (defined(intersection)) {\n distance = Cartesian3.distance(position, intersection);\n }\n\n if (cameraUnderground) {\n var distanceUnderground = getZoomDistanceUnderground(\n controller,\n ray,\n height\n );\n if (defined(distance)) {\n distance = Math.min(distance, distanceUnderground);\n } else {\n distance = distanceUnderground;\n }\n }\n\n if (!defined(distance)) {\n var normal = Cartesian3.UNIT_X;\n distance =\n -Cartesian3.dot(normal, position) / Cartesian3.dot(normal, direction);\n }\n\n handleZoom(\n controller,\n startPosition,\n movement,\n controller._zoomFactor,\n distance\n );\n}\n\nfunction updateCV(controller) {\n var scene = controller._scene;\n var camera = scene.camera;\n\n if (!Matrix4.equals(Matrix4.IDENTITY, camera.transform)) {\n reactToInput(\n controller,\n controller.enableRotate,\n controller.rotateEventTypes,\n rotate3D,\n controller.inertiaSpin,\n \"_lastInertiaSpinMovement\"\n );\n reactToInput(\n controller,\n controller.enableZoom,\n controller.zoomEventTypes,\n zoom3D,\n controller.inertiaZoom,\n \"_lastInertiaZoomMovement\"\n );\n } else {\n var tweens = controller._tweens;\n\n if (controller._aggregator.anyButtonDown) {\n tweens.removeAll();\n }\n\n reactToInput(\n controller,\n controller.enableTilt,\n controller.tiltEventTypes,\n rotateCV,\n controller.inertiaSpin,\n \"_lastInertiaTiltMovement\"\n );\n reactToInput(\n controller,\n controller.enableTranslate,\n controller.translateEventTypes,\n translateCV,\n controller.inertiaTranslate,\n \"_lastInertiaTranslateMovement\"\n );\n reactToInput(\n controller,\n controller.enableZoom,\n controller.zoomEventTypes,\n zoomCV,\n controller.inertiaZoom,\n \"_lastInertiaZoomMovement\"\n );\n reactToInput(\n controller,\n controller.enableLook,\n controller.lookEventTypes,\n look3D\n );\n\n if (\n !controller._aggregator.anyButtonDown &&\n !tweens.contains(controller._tween)\n ) {\n var tween = camera.createCorrectPositionTween(\n controller.bounceAnimationTime\n );\n if (defined(tween)) {\n controller._tween = tweens.add(tween);\n }\n }\n\n tweens.update();\n }\n}\n\nvar scratchStrafeRay = new Ray();\nvar scratchStrafePlane = new Plane(Cartesian3.UNIT_X, 0.0);\nvar scratchStrafeIntersection = new Cartesian3();\nvar scratchStrafeDirection = new Cartesian3();\nvar scratchMousePos = new Cartesian3();\n\nfunction strafe(controller, movement, strafeStartPosition) {\n var scene = controller._scene;\n var camera = scene.camera;\n\n var ray = camera.getPickRay(movement.endPosition, scratchStrafeRay);\n\n var direction = Cartesian3.clone(camera.direction, scratchStrafeDirection);\n if (scene.mode === SceneMode.COLUMBUS_VIEW) {\n Cartesian3.fromElements(direction.z, direction.x, direction.y, direction);\n }\n\n var plane = Plane.fromPointNormal(\n strafeStartPosition,\n direction,\n scratchStrafePlane\n );\n var intersection = IntersectionTests.rayPlane(\n ray,\n plane,\n scratchStrafeIntersection\n );\n if (!defined(intersection)) {\n return;\n }\n\n direction = Cartesian3.subtract(strafeStartPosition, intersection, direction);\n if (scene.mode === SceneMode.COLUMBUS_VIEW) {\n Cartesian3.fromElements(direction.y, direction.z, direction.x, direction);\n }\n\n Cartesian3.add(camera.position, direction, camera.position);\n}\n\nvar spin3DPick = new Cartesian3();\nvar scratchCartographic = new Cartographic();\nvar scratchRadii = new Cartesian3();\nvar scratchEllipsoid = new Ellipsoid();\nvar scratchLookUp = new Cartesian3();\nvar scratchNormal = new Cartesian3();\n\nfunction spin3D(controller, startPosition, movement) {\n var scene = controller._scene;\n var camera = scene.camera;\n var cameraUnderground = controller._cameraUnderground;\n var ellipsoid = controller._ellipsoid;\n\n if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n rotate3D(controller, startPosition, movement);\n return;\n }\n\n var magnitude;\n var radii;\n\n var up = ellipsoid.geodeticSurfaceNormal(camera.position, scratchLookUp);\n\n if (Cartesian2.equals(startPosition, controller._rotateMousePosition)) {\n if (controller._looking) {\n look3D(controller, startPosition, movement, up);\n } else if (controller._rotating) {\n rotate3D(controller, startPosition, movement);\n } else if (controller._strafing) {\n continueStrafing(controller, movement);\n } else {\n if (\n Cartesian3.magnitude(camera.position) <\n Cartesian3.magnitude(controller._rotateStartPosition)\n ) {\n // Pan action is no longer valid if camera moves below the pan ellipsoid\n return;\n }\n magnitude = Cartesian3.magnitude(controller._rotateStartPosition);\n radii = scratchRadii;\n radii.x = radii.y = radii.z = magnitude;\n ellipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n pan3D(controller, startPosition, movement, ellipsoid);\n }\n return;\n }\n controller._looking = false;\n controller._rotating = false;\n controller._strafing = false;\n\n var height = ellipsoid.cartesianToCartographic(\n camera.positionWC,\n scratchCartographic\n ).height;\n var globe = controller._globe;\n\n if (defined(globe) && height < controller._minimumPickingTerrainHeight) {\n var mousePos = pickGlobe(\n controller,\n movement.startPosition,\n scratchMousePos\n );\n if (defined(mousePos)) {\n var strafing = false;\n var ray = camera.getPickRay(movement.startPosition, pickGlobeScratchRay);\n\n if (cameraUnderground) {\n strafing = true;\n getStrafeStartPositionUnderground(controller, ray, mousePos, mousePos);\n } else {\n var normal = ellipsoid.geodeticSurfaceNormal(mousePos, scratchNormal);\n var tangentPick =\n Math.abs(Cartesian3.dot(ray.direction, normal)) < 0.05;\n\n if (tangentPick) {\n strafing = true;\n } else {\n strafing =\n Cartesian3.magnitude(camera.position) <\n Cartesian3.magnitude(mousePos);\n }\n }\n\n if (strafing) {\n Cartesian2.clone(startPosition, controller._strafeEndMousePosition);\n Cartesian3.clone(mousePos, controller._strafeStartPosition);\n controller._strafing = true;\n strafe(controller, movement, controller._strafeStartPosition);\n } else {\n magnitude = Cartesian3.magnitude(mousePos);\n radii = scratchRadii;\n radii.x = radii.y = radii.z = magnitude;\n ellipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n pan3D(controller, startPosition, movement, ellipsoid);\n\n Cartesian3.clone(mousePos, controller._rotateStartPosition);\n }\n } else {\n controller._looking = true;\n look3D(controller, startPosition, movement, up);\n }\n } else if (\n defined(\n camera.pickEllipsoid(\n movement.startPosition,\n controller._ellipsoid,\n spin3DPick\n )\n )\n ) {\n pan3D(controller, startPosition, movement, controller._ellipsoid);\n Cartesian3.clone(spin3DPick, controller._rotateStartPosition);\n } else if (height > controller._minimumTrackBallHeight) {\n controller._rotating = true;\n rotate3D(controller, startPosition, movement);\n } else {\n controller._looking = true;\n look3D(controller, startPosition, movement, up);\n }\n\n Cartesian2.clone(startPosition, controller._rotateMousePosition);\n}\n\nfunction rotate3D(\n controller,\n startPosition,\n movement,\n constrainedAxis,\n rotateOnlyVertical,\n rotateOnlyHorizontal\n) {\n rotateOnlyVertical = defaultValue(rotateOnlyVertical, false);\n rotateOnlyHorizontal = defaultValue(rotateOnlyHorizontal, false);\n\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n\n var oldAxis = camera.constrainedAxis;\n if (defined(constrainedAxis)) {\n camera.constrainedAxis = constrainedAxis;\n }\n\n var rho = Cartesian3.magnitude(camera.position);\n var rotateRate =\n controller._rotateFactor * (rho - controller._rotateRateRangeAdjustment);\n\n if (rotateRate > controller._maximumRotateRate) {\n rotateRate = controller._maximumRotateRate;\n }\n\n if (rotateRate < controller._minimumRotateRate) {\n rotateRate = controller._minimumRotateRate;\n }\n\n var phiWindowRatio =\n (movement.startPosition.x - movement.endPosition.x) / canvas.clientWidth;\n var thetaWindowRatio =\n (movement.startPosition.y - movement.endPosition.y) / canvas.clientHeight;\n phiWindowRatio = Math.min(phiWindowRatio, controller.maximumMovementRatio);\n thetaWindowRatio = Math.min(\n thetaWindowRatio,\n controller.maximumMovementRatio\n );\n\n var deltaPhi = rotateRate * phiWindowRatio * Math.PI * 2.0;\n var deltaTheta = rotateRate * thetaWindowRatio * Math.PI;\n\n if (!rotateOnlyVertical) {\n camera.rotateRight(deltaPhi);\n }\n\n if (!rotateOnlyHorizontal) {\n camera.rotateUp(deltaTheta);\n }\n\n camera.constrainedAxis = oldAxis;\n}\n\nvar pan3DP0 = Cartesian4.clone(Cartesian4.UNIT_W);\nvar pan3DP1 = Cartesian4.clone(Cartesian4.UNIT_W);\nvar pan3DTemp0 = new Cartesian3();\nvar pan3DTemp1 = new Cartesian3();\nvar pan3DTemp2 = new Cartesian3();\nvar pan3DTemp3 = new Cartesian3();\nvar pan3DStartMousePosition = new Cartesian2();\nvar pan3DEndMousePosition = new Cartesian2();\n\nfunction pan3D(controller, startPosition, movement, ellipsoid) {\n var scene = controller._scene;\n var camera = scene.camera;\n\n var startMousePosition = Cartesian2.clone(\n movement.startPosition,\n pan3DStartMousePosition\n );\n var endMousePosition = Cartesian2.clone(\n movement.endPosition,\n pan3DEndMousePosition\n );\n\n var p0 = camera.pickEllipsoid(startMousePosition, ellipsoid, pan3DP0);\n var p1 = camera.pickEllipsoid(endMousePosition, ellipsoid, pan3DP1);\n\n if (!defined(p0) || !defined(p1)) {\n controller._rotating = true;\n rotate3D(controller, startPosition, movement);\n return;\n }\n\n p0 = camera.worldToCameraCoordinates(p0, p0);\n p1 = camera.worldToCameraCoordinates(p1, p1);\n\n if (!defined(camera.constrainedAxis)) {\n Cartesian3.normalize(p0, p0);\n Cartesian3.normalize(p1, p1);\n var dot = Cartesian3.dot(p0, p1);\n var axis = Cartesian3.cross(p0, p1, pan3DTemp0);\n\n if (\n dot < 1.0 &&\n !Cartesian3.equalsEpsilon(axis, Cartesian3.ZERO, CesiumMath.EPSILON14)\n ) {\n // dot is in [0, 1]\n var angle = Math.acos(dot);\n camera.rotate(axis, angle);\n }\n } else {\n var basis0 = camera.constrainedAxis;\n var basis1 = Cartesian3.mostOrthogonalAxis(basis0, pan3DTemp0);\n Cartesian3.cross(basis1, basis0, basis1);\n Cartesian3.normalize(basis1, basis1);\n var basis2 = Cartesian3.cross(basis0, basis1, pan3DTemp1);\n\n var startRho = Cartesian3.magnitude(p0);\n var startDot = Cartesian3.dot(basis0, p0);\n var startTheta = Math.acos(startDot / startRho);\n var startRej = Cartesian3.multiplyByScalar(basis0, startDot, pan3DTemp2);\n Cartesian3.subtract(p0, startRej, startRej);\n Cartesian3.normalize(startRej, startRej);\n\n var endRho = Cartesian3.magnitude(p1);\n var endDot = Cartesian3.dot(basis0, p1);\n var endTheta = Math.acos(endDot / endRho);\n var endRej = Cartesian3.multiplyByScalar(basis0, endDot, pan3DTemp3);\n Cartesian3.subtract(p1, endRej, endRej);\n Cartesian3.normalize(endRej, endRej);\n\n var startPhi = Math.acos(Cartesian3.dot(startRej, basis1));\n if (Cartesian3.dot(startRej, basis2) < 0) {\n startPhi = CesiumMath.TWO_PI - startPhi;\n }\n\n var endPhi = Math.acos(Cartesian3.dot(endRej, basis1));\n if (Cartesian3.dot(endRej, basis2) < 0) {\n endPhi = CesiumMath.TWO_PI - endPhi;\n }\n\n var deltaPhi = startPhi - endPhi;\n\n var east;\n if (\n Cartesian3.equalsEpsilon(basis0, camera.position, CesiumMath.EPSILON2)\n ) {\n east = camera.right;\n } else {\n east = Cartesian3.cross(basis0, camera.position, pan3DTemp0);\n }\n\n var planeNormal = Cartesian3.cross(basis0, east, pan3DTemp0);\n var side0 = Cartesian3.dot(\n planeNormal,\n Cartesian3.subtract(p0, basis0, pan3DTemp1)\n );\n var side1 = Cartesian3.dot(\n planeNormal,\n Cartesian3.subtract(p1, basis0, pan3DTemp1)\n );\n\n var deltaTheta;\n if (side0 > 0 && side1 > 0) {\n deltaTheta = endTheta - startTheta;\n } else if (side0 > 0 && side1 <= 0) {\n if (Cartesian3.dot(camera.position, basis0) > 0) {\n deltaTheta = -startTheta - endTheta;\n } else {\n deltaTheta = startTheta + endTheta;\n }\n } else {\n deltaTheta = startTheta - endTheta;\n }\n\n camera.rotateRight(deltaPhi);\n camera.rotateUp(deltaTheta);\n }\n}\n\nvar zoom3DUnitPosition = new Cartesian3();\nvar zoom3DCartographic = new Cartographic();\n\nfunction zoom3D(controller, startPosition, movement) {\n if (defined(movement.distance)) {\n movement = movement.distance;\n }\n\n var ellipsoid = controller._ellipsoid;\n var scene = controller._scene;\n var camera = scene.camera;\n var canvas = scene.canvas;\n\n var cameraUnderground = controller._cameraUnderground;\n\n var windowPosition;\n\n if (cameraUnderground) {\n windowPosition = startPosition;\n } else {\n windowPosition = zoomCVWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = canvas.clientHeight / 2;\n }\n\n var ray = camera.getPickRay(windowPosition, zoomCVWindowRay);\n\n var intersection;\n var height = ellipsoid.cartesianToCartographic(\n camera.position,\n zoom3DCartographic\n ).height;\n if (height < controller._minimumPickingTerrainHeight) {\n intersection = pickGlobe(controller, windowPosition, zoomCVIntersection);\n }\n\n var distance;\n if (defined(intersection)) {\n distance = Cartesian3.distance(ray.origin, intersection);\n }\n\n if (cameraUnderground) {\n var distanceUnderground = getZoomDistanceUnderground(\n controller,\n ray,\n height\n );\n if (defined(distance)) {\n distance = Math.min(distance, distanceUnderground);\n } else {\n distance = distanceUnderground;\n }\n }\n\n if (!defined(distance)) {\n distance = height;\n }\n\n var unitPosition = Cartesian3.normalize(camera.position, zoom3DUnitPosition);\n handleZoom(\n controller,\n startPosition,\n movement,\n controller._zoomFactor,\n distance,\n Cartesian3.dot(unitPosition, camera.direction)\n );\n}\n\nvar tilt3DWindowPos = new Cartesian2();\nvar tilt3DRay = new Ray();\nvar tilt3DCenter = new Cartesian3();\nvar tilt3DVerticalCenter = new Cartesian3();\nvar tilt3DTransform = new Matrix4();\nvar tilt3DVerticalTransform = new Matrix4();\nvar tilt3DOldTransform = new Matrix4();\nvar tilt3DQuaternion = new Quaternion();\nvar tilt3DMatrix = new Matrix3();\nvar tilt3DCart = new Cartographic();\nvar tilt3DLookUp = new Cartesian3();\n\nfunction tilt3D(controller, startPosition, movement) {\n var scene = controller._scene;\n var camera = scene.camera;\n\n if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n return;\n }\n\n if (defined(movement.angleAndHeight)) {\n movement = movement.angleAndHeight;\n }\n\n if (!Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n controller._tiltOnEllipsoid = false;\n controller._looking = false;\n }\n\n if (controller._looking) {\n var up = controller._ellipsoid.geodeticSurfaceNormal(\n camera.position,\n tilt3DLookUp\n );\n look3D(controller, startPosition, movement, up);\n return;\n }\n\n var ellipsoid = controller._ellipsoid;\n var cartographic = ellipsoid.cartesianToCartographic(\n camera.position,\n tilt3DCart\n );\n\n if (\n controller._tiltOnEllipsoid ||\n cartographic.height > controller._minimumCollisionTerrainHeight\n ) {\n controller._tiltOnEllipsoid = true;\n tilt3DOnEllipsoid(controller, startPosition, movement);\n } else {\n tilt3DOnTerrain(controller, startPosition, movement);\n }\n}\n\nvar tilt3DOnEllipsoidCartographic = new Cartographic();\n\nfunction tilt3DOnEllipsoid(controller, startPosition, movement) {\n var ellipsoid = controller._ellipsoid;\n var scene = controller._scene;\n var camera = scene.camera;\n var minHeight = controller.minimumZoomDistance * 0.25;\n var height = ellipsoid.cartesianToCartographic(\n camera.positionWC,\n tilt3DOnEllipsoidCartographic\n ).height;\n if (\n height - minHeight - 1.0 < CesiumMath.EPSILON3 &&\n movement.endPosition.y - movement.startPosition.y < 0\n ) {\n return;\n }\n\n var canvas = scene.canvas;\n\n var windowPosition = tilt3DWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = canvas.clientHeight / 2;\n var ray = camera.getPickRay(windowPosition, tilt3DRay);\n\n var center;\n var intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n if (defined(intersection)) {\n center = Ray.getPoint(ray, intersection.start, tilt3DCenter);\n } else if (height > controller._minimumTrackBallHeight) {\n var grazingAltitudeLocation = IntersectionTests.grazingAltitudeLocation(\n ray,\n ellipsoid\n );\n if (!defined(grazingAltitudeLocation)) {\n return;\n }\n var grazingAltitudeCart = ellipsoid.cartesianToCartographic(\n grazingAltitudeLocation,\n tilt3DCart\n );\n grazingAltitudeCart.height = 0.0;\n center = ellipsoid.cartographicToCartesian(\n grazingAltitudeCart,\n tilt3DCenter\n );\n } else {\n controller._looking = true;\n var up = controller._ellipsoid.geodeticSurfaceNormal(\n camera.position,\n tilt3DLookUp\n );\n look3D(controller, startPosition, movement, up);\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n return;\n }\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n center,\n ellipsoid,\n tilt3DTransform\n );\n\n var oldGlobe = controller._globe;\n var oldEllipsoid = controller._ellipsoid;\n controller._globe = undefined;\n controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n controller._rotateFactor = 1.0;\n controller._rotateRateRangeAdjustment = 1.0;\n\n var oldTransform = Matrix4.clone(camera.transform, tilt3DOldTransform);\n camera._setTransform(transform);\n\n rotate3D(controller, startPosition, movement, Cartesian3.UNIT_Z);\n\n camera._setTransform(oldTransform);\n controller._globe = oldGlobe;\n controller._ellipsoid = oldEllipsoid;\n\n var radius = oldEllipsoid.maximumRadius;\n controller._rotateFactor = 1.0 / radius;\n controller._rotateRateRangeAdjustment = radius;\n}\n\nfunction tilt3DOnTerrain(controller, startPosition, movement) {\n var ellipsoid = controller._ellipsoid;\n var scene = controller._scene;\n var camera = scene.camera;\n var cameraUnderground = controller._cameraUnderground;\n\n var center;\n var ray;\n var intersection;\n\n if (Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n center = Cartesian3.clone(controller._tiltCenter, tilt3DCenter);\n } else {\n center = pickGlobe(controller, startPosition, tilt3DCenter);\n\n if (!defined(center)) {\n ray = camera.getPickRay(startPosition, tilt3DRay);\n intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n if (!defined(intersection)) {\n var cartographic = ellipsoid.cartesianToCartographic(\n camera.position,\n tilt3DCart\n );\n if (cartographic.height <= controller._minimumTrackBallHeight) {\n controller._looking = true;\n var up = controller._ellipsoid.geodeticSurfaceNormal(\n camera.position,\n tilt3DLookUp\n );\n look3D(controller, startPosition, movement, up);\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n }\n return;\n }\n center = Ray.getPoint(ray, intersection.start, tilt3DCenter);\n }\n\n if (cameraUnderground) {\n if (!defined(ray)) {\n ray = camera.getPickRay(startPosition, tilt3DRay);\n }\n getTiltCenterUnderground(controller, ray, center, center);\n }\n\n Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n Cartesian3.clone(center, controller._tiltCenter);\n }\n\n var canvas = scene.canvas;\n\n var windowPosition = tilt3DWindowPos;\n windowPosition.x = canvas.clientWidth / 2;\n windowPosition.y = controller._tiltCenterMousePosition.y;\n ray = camera.getPickRay(windowPosition, tilt3DRay);\n\n var mag = Cartesian3.magnitude(center);\n var radii = Cartesian3.fromElements(mag, mag, mag, scratchRadii);\n var newEllipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n\n intersection = IntersectionTests.rayEllipsoid(ray, newEllipsoid);\n if (!defined(intersection)) {\n return;\n }\n\n var t =\n Cartesian3.magnitude(ray.origin) > mag\n ? intersection.start\n : intersection.stop;\n var verticalCenter = Ray.getPoint(ray, t, tilt3DVerticalCenter);\n\n var transform = Transforms.eastNorthUpToFixedFrame(\n center,\n ellipsoid,\n tilt3DTransform\n );\n var verticalTransform = Transforms.eastNorthUpToFixedFrame(\n verticalCenter,\n newEllipsoid,\n tilt3DVerticalTransform\n );\n\n var oldGlobe = controller._globe;\n var oldEllipsoid = controller._ellipsoid;\n controller._globe = undefined;\n controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n controller._rotateFactor = 1.0;\n controller._rotateRateRangeAdjustment = 1.0;\n\n var constrainedAxis = Cartesian3.UNIT_Z;\n\n var oldTransform = Matrix4.clone(camera.transform, tilt3DOldTransform);\n camera._setTransform(transform);\n\n var tangent = Cartesian3.cross(\n verticalCenter,\n camera.positionWC,\n tilt3DCartesian3\n );\n var dot = Cartesian3.dot(camera.rightWC, tangent);\n\n rotate3D(controller, startPosition, movement, constrainedAxis, false, true);\n\n camera._setTransform(verticalTransform);\n\n if (dot < 0.0) {\n var movementDelta = movement.startPosition.y - movement.endPosition.y;\n if (\n (cameraUnderground && movementDelta < 0.0) ||\n (!cameraUnderground && movementDelta > 0.0)\n ) {\n // Prevent camera from flipping past the up axis\n constrainedAxis = undefined;\n }\n\n var oldConstrainedAxis = camera.constrainedAxis;\n camera.constrainedAxis = undefined;\n\n rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n\n camera.constrainedAxis = oldConstrainedAxis;\n } else {\n rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n }\n\n if (defined(camera.constrainedAxis)) {\n var right = Cartesian3.cross(\n camera.direction,\n camera.constrainedAxis,\n tilt3DCartesian3\n );\n if (\n !Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)\n ) {\n if (Cartesian3.dot(right, camera.right) < 0.0) {\n Cartesian3.negate(right, right);\n }\n\n Cartesian3.cross(right, camera.direction, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n Cartesian3.normalize(camera.up, camera.up);\n Cartesian3.normalize(camera.right, camera.right);\n }\n }\n\n camera._setTransform(oldTransform);\n controller._globe = oldGlobe;\n controller._ellipsoid = oldEllipsoid;\n\n var radius = oldEllipsoid.maximumRadius;\n controller._rotateFactor = 1.0 / radius;\n controller._rotateRateRangeAdjustment = radius;\n\n var originalPosition = Cartesian3.clone(camera.positionWC, tilt3DCartesian3);\n\n if (controller.enableCollisionDetection) {\n adjustHeightForTerrain(controller);\n }\n\n if (!Cartesian3.equals(camera.positionWC, originalPosition)) {\n camera._setTransform(verticalTransform);\n camera.worldToCameraCoordinatesPoint(originalPosition, originalPosition);\n\n var magSqrd = Cartesian3.magnitudeSquared(originalPosition);\n if (Cartesian3.magnitudeSquared(camera.position) > magSqrd) {\n Cartesian3.normalize(camera.position, camera.position);\n Cartesian3.multiplyByScalar(\n camera.position,\n Math.sqrt(magSqrd),\n camera.position\n );\n }\n\n var angle = Cartesian3.angleBetween(originalPosition, camera.position);\n var axis = Cartesian3.cross(\n originalPosition,\n camera.position,\n originalPosition\n );\n Cartesian3.normalize(axis, axis);\n\n var quaternion = Quaternion.fromAxisAngle(axis, angle, tilt3DQuaternion);\n var rotation = Matrix3.fromQuaternion(quaternion, tilt3DMatrix);\n Matrix3.multiplyByVector(rotation, camera.direction, camera.direction);\n Matrix3.multiplyByVector(rotation, camera.up, camera.up);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n camera._setTransform(oldTransform);\n }\n}\n\nvar look3DStartPos = new Cartesian2();\nvar look3DEndPos = new Cartesian2();\nvar look3DStartRay = new Ray();\nvar look3DEndRay = new Ray();\nvar look3DNegativeRot = new Cartesian3();\nvar look3DTan = new Cartesian3();\n\nfunction look3D(controller, startPosition, movement, rotationAxis) {\n var scene = controller._scene;\n var camera = scene.camera;\n\n var startPos = look3DStartPos;\n startPos.x = movement.startPosition.x;\n startPos.y = 0.0;\n var endPos = look3DEndPos;\n endPos.x = movement.endPosition.x;\n endPos.y = 0.0;\n\n var startRay = camera.getPickRay(startPos, look3DStartRay);\n var endRay = camera.getPickRay(endPos, look3DEndRay);\n var angle = 0.0;\n var start;\n var end;\n\n if (camera.frustum instanceof OrthographicFrustum) {\n start = startRay.origin;\n end = endRay.origin;\n\n Cartesian3.add(camera.direction, start, start);\n Cartesian3.add(camera.direction, end, end);\n\n Cartesian3.subtract(start, camera.position, start);\n Cartesian3.subtract(end, camera.position, end);\n\n Cartesian3.normalize(start, start);\n Cartesian3.normalize(end, end);\n } else {\n start = startRay.direction;\n end = endRay.direction;\n }\n\n var dot = Cartesian3.dot(start, end);\n if (dot < 1.0) {\n // dot is in [0, 1]\n angle = Math.acos(dot);\n }\n\n angle = movement.startPosition.x > movement.endPosition.x ? -angle : angle;\n\n var horizontalRotationAxis = controller._horizontalRotationAxis;\n if (defined(rotationAxis)) {\n camera.look(rotationAxis, -angle);\n } else if (defined(horizontalRotationAxis)) {\n camera.look(horizontalRotationAxis, -angle);\n } else {\n camera.lookLeft(angle);\n }\n\n startPos.x = 0.0;\n startPos.y = movement.startPosition.y;\n endPos.x = 0.0;\n endPos.y = movement.endPosition.y;\n\n startRay = camera.getPickRay(startPos, look3DStartRay);\n endRay = camera.getPickRay(endPos, look3DEndRay);\n angle = 0.0;\n\n if (camera.frustum instanceof OrthographicFrustum) {\n start = startRay.origin;\n end = endRay.origin;\n\n Cartesian3.add(camera.direction, start, start);\n Cartesian3.add(camera.direction, end, end);\n\n Cartesian3.subtract(start, camera.position, start);\n Cartesian3.subtract(end, camera.position, end);\n\n Cartesian3.normalize(start, start);\n Cartesian3.normalize(end, end);\n } else {\n start = startRay.direction;\n end = endRay.direction;\n }\n\n dot = Cartesian3.dot(start, end);\n if (dot < 1.0) {\n // dot is in [0, 1]\n angle = Math.acos(dot);\n }\n angle = movement.startPosition.y > movement.endPosition.y ? -angle : angle;\n\n rotationAxis = defaultValue(rotationAxis, horizontalRotationAxis);\n if (defined(rotationAxis)) {\n var direction = camera.direction;\n var negativeRotationAxis = Cartesian3.negate(\n rotationAxis,\n look3DNegativeRot\n );\n var northParallel = Cartesian3.equalsEpsilon(\n direction,\n rotationAxis,\n CesiumMath.EPSILON2\n );\n var southParallel = Cartesian3.equalsEpsilon(\n direction,\n negativeRotationAxis,\n CesiumMath.EPSILON2\n );\n if (!northParallel && !southParallel) {\n dot = Cartesian3.dot(direction, rotationAxis);\n var angleToAxis = CesiumMath.acosClamped(dot);\n if (angle > 0 && angle > angleToAxis) {\n angle = angleToAxis - CesiumMath.EPSILON4;\n }\n\n dot = Cartesian3.dot(direction, negativeRotationAxis);\n angleToAxis = CesiumMath.acosClamped(dot);\n if (angle < 0 && -angle > angleToAxis) {\n angle = -angleToAxis + CesiumMath.EPSILON4;\n }\n\n var tangent = Cartesian3.cross(rotationAxis, direction, look3DTan);\n camera.look(tangent, angle);\n } else if ((northParallel && angle < 0) || (southParallel && angle > 0)) {\n camera.look(camera.right, -angle);\n }\n } else {\n camera.lookUp(angle);\n }\n}\n\nfunction update3D(controller) {\n reactToInput(\n controller,\n controller.enableRotate,\n controller.rotateEventTypes,\n spin3D,\n controller.inertiaSpin,\n \"_lastInertiaSpinMovement\"\n );\n reactToInput(\n controller,\n controller.enableZoom,\n controller.zoomEventTypes,\n zoom3D,\n controller.inertiaZoom,\n \"_lastInertiaZoomMovement\"\n );\n reactToInput(\n controller,\n controller.enableTilt,\n controller.tiltEventTypes,\n tilt3D,\n controller.inertiaSpin,\n \"_lastInertiaTiltMovement\"\n );\n reactToInput(\n controller,\n controller.enableLook,\n controller.lookEventTypes,\n look3D\n );\n}\n\nvar scratchAdjustHeightTransform = new Matrix4();\nvar scratchAdjustHeightCartographic = new Cartographic();\n\nfunction adjustHeightForTerrain(controller) {\n controller._adjustedHeightForTerrain = true;\n\n var scene = controller._scene;\n var mode = scene.mode;\n var globe = scene.globe;\n\n if (\n !defined(globe) ||\n mode === SceneMode.SCENE2D ||\n mode === SceneMode.MORPHING\n ) {\n return;\n }\n\n var camera = scene.camera;\n var ellipsoid = globe.ellipsoid;\n var projection = scene.mapProjection;\n\n var transform;\n var mag;\n if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n transform = Matrix4.clone(camera.transform, scratchAdjustHeightTransform);\n mag = Cartesian3.magnitude(camera.position);\n camera._setTransform(Matrix4.IDENTITY);\n }\n\n var cartographic = scratchAdjustHeightCartographic;\n if (mode === SceneMode.SCENE3D) {\n ellipsoid.cartesianToCartographic(camera.position, cartographic);\n } else {\n projection.unproject(camera.position, cartographic);\n }\n\n var heightUpdated = false;\n if (cartographic.height < controller._minimumCollisionTerrainHeight) {\n var globeHeight = controller._scene.globeHeight;\n if (defined(globeHeight)) {\n var height = globeHeight + controller.minimumZoomDistance;\n if (cartographic.height < height) {\n cartographic.height = height;\n if (mode === SceneMode.SCENE3D) {\n ellipsoid.cartographicToCartesian(cartographic, camera.position);\n } else {\n projection.project(cartographic, camera.position);\n }\n heightUpdated = true;\n }\n }\n }\n\n if (defined(transform)) {\n camera._setTransform(transform);\n if (heightUpdated) {\n Cartesian3.normalize(camera.position, camera.position);\n Cartesian3.negate(camera.position, camera.direction);\n Cartesian3.multiplyByScalar(\n camera.position,\n Math.max(mag, controller.minimumZoomDistance),\n camera.position\n );\n Cartesian3.normalize(camera.direction, camera.direction);\n Cartesian3.cross(camera.direction, camera.up, camera.right);\n Cartesian3.cross(camera.right, camera.direction, camera.up);\n }\n }\n}\n\n/**\n * @private\n */\nScreenSpaceCameraController.prototype.onMap = function () {\n var scene = this._scene;\n var mode = scene.mode;\n var camera = scene.camera;\n\n if (mode === SceneMode.COLUMBUS_VIEW) {\n return (\n Math.abs(camera.position.x) - this._maxCoord.x < 0 &&\n Math.abs(camera.position.y) - this._maxCoord.y < 0\n );\n }\n\n return true;\n};\n\nvar scratchPreviousPosition = new Cartesian3();\nvar scratchPreviousDirection = new Cartesian3();\n\n/**\n * @private\n */\nScreenSpaceCameraController.prototype.update = function () {\n var scene = this._scene;\n var camera = scene.camera;\n var globe = scene.globe;\n var mode = scene.mode;\n\n if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n this._globe = undefined;\n this._ellipsoid = Ellipsoid.UNIT_SPHERE;\n } else {\n this._globe = globe;\n this._ellipsoid = defined(this._globe)\n ? this._globe.ellipsoid\n : scene.mapProjection.ellipsoid;\n }\n\n this._cameraUnderground = scene.cameraUnderground && defined(this._globe);\n\n this._minimumCollisionTerrainHeight =\n this.minimumCollisionTerrainHeight * scene.terrainExaggeration;\n this._minimumPickingTerrainHeight =\n this.minimumPickingTerrainHeight * scene.terrainExaggeration;\n this._minimumTrackBallHeight =\n this.minimumTrackBallHeight * scene.terrainExaggeration;\n\n var radius = this._ellipsoid.maximumRadius;\n this._rotateFactor = 1.0 / radius;\n this._rotateRateRangeAdjustment = radius;\n\n this._adjustedHeightForTerrain = false;\n var previousPosition = Cartesian3.clone(\n camera.positionWC,\n scratchPreviousPosition\n );\n var previousDirection = Cartesian3.clone(\n camera.directionWC,\n scratchPreviousDirection\n );\n\n if (mode === SceneMode.SCENE2D) {\n update2D(this);\n } else if (mode === SceneMode.COLUMBUS_VIEW) {\n this._horizontalRotationAxis = Cartesian3.UNIT_Z;\n updateCV(this);\n } else if (mode === SceneMode.SCENE3D) {\n this._horizontalRotationAxis = undefined;\n update3D(this);\n }\n\n if (this.enableCollisionDetection && !this._adjustedHeightForTerrain) {\n // Adjust the camera height if the camera moved at all (user input or inertia) and an action didn't already adjust the camera height\n var cameraChanged =\n !Cartesian3.equals(previousPosition, camera.positionWC) ||\n !Cartesian3.equals(previousDirection, camera.directionWC);\n if (cameraChanged) {\n adjustHeightForTerrain(this);\n }\n }\n\n this._aggregator.reset();\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ScreenSpaceCameraController#destroy\n */\nScreenSpaceCameraController.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Removes mouse listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * controller = controller && controller.destroy();\n *\n * @see ScreenSpaceCameraController#isDestroyed\n */\nScreenSpaceCameraController.prototype.destroy = function () {\n this._tweens.removeAll();\n this._aggregator = this._aggregator && this._aggregator.destroy();\n return destroyObject(this);\n};\nexport default ScreenSpaceCameraController;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport AdditiveBlend from \"../Shaders/PostProcessStages/AdditiveBlend.js\";\nimport BrightPass from \"../Shaders/PostProcessStages/BrightPass.js\";\nimport GaussianBlur1D from \"../Shaders/PostProcessStages/GaussianBlur1D.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PostProcessStage from \"./PostProcessStage.js\";\nimport PostProcessStageComposite from \"./PostProcessStageComposite.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\nimport PostProcessStageTextureCache from \"./PostProcessStageTextureCache.js\";\nimport SceneFramebuffer from \"./SceneFramebuffer.js\";\n\nfunction SunPostProcess() {\n this._sceneFramebuffer = new SceneFramebuffer();\n\n var scale = 0.125;\n var stages = new Array(6);\n\n stages[0] = new PostProcessStage({\n fragmentShader: PassThrough,\n textureScale: scale,\n forcePowerOfTwo: true,\n sampleMode: PostProcessStageSampleMode.LINEAR,\n });\n\n var brightPass = (stages[1] = new PostProcessStage({\n fragmentShader: BrightPass,\n uniforms: {\n avgLuminance: 0.5, // A guess at the average luminance across the entire scene\n threshold: 0.25,\n offset: 0.1,\n },\n textureScale: scale,\n forcePowerOfTwo: true,\n }));\n\n var that = this;\n this._delta = 1.0;\n this._sigma = 2.0;\n this._blurStep = new Cartesian2();\n\n stages[2] = new PostProcessStage({\n fragmentShader: GaussianBlur1D,\n uniforms: {\n step: function () {\n that._blurStep.x = that._blurStep.y =\n 1.0 / brightPass.outputTexture.width;\n return that._blurStep;\n },\n delta: function () {\n return that._delta;\n },\n sigma: function () {\n return that._sigma;\n },\n direction: 0.0,\n },\n textureScale: scale,\n forcePowerOfTwo: true,\n });\n\n stages[3] = new PostProcessStage({\n fragmentShader: GaussianBlur1D,\n uniforms: {\n step: function () {\n that._blurStep.x = that._blurStep.y =\n 1.0 / brightPass.outputTexture.width;\n return that._blurStep;\n },\n delta: function () {\n return that._delta;\n },\n sigma: function () {\n return that._sigma;\n },\n direction: 1.0,\n },\n textureScale: scale,\n forcePowerOfTwo: true,\n });\n\n stages[4] = new PostProcessStage({\n fragmentShader: PassThrough,\n sampleMode: PostProcessStageSampleMode.LINEAR,\n });\n\n this._uCenter = new Cartesian2();\n this._uRadius = undefined;\n\n stages[5] = new PostProcessStage({\n fragmentShader: AdditiveBlend,\n uniforms: {\n center: function () {\n return that._uCenter;\n },\n radius: function () {\n return that._uRadius;\n },\n colorTexture2: function () {\n return that._sceneFramebuffer.getFramebuffer().getColorTexture(0);\n },\n },\n });\n\n this._stages = new PostProcessStageComposite({\n stages: stages,\n });\n\n var textureCache = new PostProcessStageTextureCache(this);\n var length = stages.length;\n for (var i = 0; i < length; ++i) {\n stages[i]._textureCache = textureCache;\n }\n\n this._textureCache = textureCache;\n this.length = stages.length;\n}\n\nSunPostProcess.prototype.get = function (index) {\n return this._stages.get(index);\n};\n\nSunPostProcess.prototype.getStageByName = function (name) {\n var length = this._stages.length;\n for (var i = 0; i < length; ++i) {\n var stage = this._stages.get(i);\n if (stage.name === name) {\n return stage;\n }\n }\n return undefined;\n};\n\nvar sunPositionECScratch = new Cartesian4();\nvar sunPositionWCScratch = new Cartesian2();\nvar sizeScratch = new Cartesian2();\nvar postProcessMatrix4Scratch = new Matrix4();\n\nfunction updateSunPosition(postProcess, context, viewport) {\n var us = context.uniformState;\n var sunPosition = us.sunPositionWC;\n var viewMatrix = us.view;\n var viewProjectionMatrix = us.viewProjection;\n var projectionMatrix = us.projection;\n\n // create up sampled render state\n var viewportTransformation = Matrix4.computeViewportTransformation(\n viewport,\n 0.0,\n 1.0,\n postProcessMatrix4Scratch\n );\n var sunPositionEC = Matrix4.multiplyByPoint(\n viewMatrix,\n sunPosition,\n sunPositionECScratch\n );\n var sunPositionWC = Transforms.pointToGLWindowCoordinates(\n viewProjectionMatrix,\n viewportTransformation,\n sunPosition,\n sunPositionWCScratch\n );\n\n sunPositionEC.x += CesiumMath.SOLAR_RADIUS;\n var limbWC = Transforms.pointToGLWindowCoordinates(\n projectionMatrix,\n viewportTransformation,\n sunPositionEC,\n sunPositionEC\n );\n var sunSize =\n Cartesian2.magnitude(Cartesian2.subtract(limbWC, sunPositionWC, limbWC)) *\n 30.0 *\n 2.0;\n\n var size = sizeScratch;\n size.x = sunSize;\n size.y = sunSize;\n\n postProcess._uCenter = Cartesian2.clone(sunPositionWC, postProcess._uCenter);\n postProcess._uRadius = Math.max(size.x, size.y) * 0.15;\n\n var width = context.drawingBufferWidth;\n var height = context.drawingBufferHeight;\n\n var stages = postProcess._stages;\n var firstStage = stages.get(0);\n\n var downSampleWidth = firstStage.outputTexture.width;\n var downSampleHeight = firstStage.outputTexture.height;\n\n var downSampleViewport = new BoundingRectangle();\n downSampleViewport.width = downSampleWidth;\n downSampleViewport.height = downSampleHeight;\n\n // create down sampled render state\n viewportTransformation = Matrix4.computeViewportTransformation(\n downSampleViewport,\n 0.0,\n 1.0,\n postProcessMatrix4Scratch\n );\n sunPositionWC = Transforms.pointToGLWindowCoordinates(\n viewProjectionMatrix,\n viewportTransformation,\n sunPosition,\n sunPositionWCScratch\n );\n\n size.x *= downSampleWidth / width;\n size.y *= downSampleHeight / height;\n\n var scissorRectangle = firstStage.scissorRectangle;\n scissorRectangle.x = Math.max(sunPositionWC.x - size.x * 0.5, 0.0);\n scissorRectangle.y = Math.max(sunPositionWC.y - size.y * 0.5, 0.0);\n scissorRectangle.width = Math.min(size.x, width);\n scissorRectangle.height = Math.min(size.y, height);\n\n for (var i = 1; i < 4; ++i) {\n BoundingRectangle.clone(scissorRectangle, stages.get(i).scissorRectangle);\n }\n}\n\nSunPostProcess.prototype.clear = function (context, passState, clearColor) {\n this._sceneFramebuffer.clear(context, passState, clearColor);\n this._textureCache.clear(context);\n};\n\nSunPostProcess.prototype.update = function (passState) {\n var context = passState.context;\n var viewport = passState.viewport;\n\n var sceneFramebuffer = this._sceneFramebuffer;\n sceneFramebuffer.update(context, viewport);\n var framebuffer = sceneFramebuffer.getFramebuffer();\n\n this._textureCache.update(context);\n this._stages.update(context, false);\n\n updateSunPosition(this, context, viewport);\n\n return framebuffer;\n};\n\nSunPostProcess.prototype.execute = function (context) {\n var colorTexture = this._sceneFramebuffer.getFramebuffer().getColorTexture(0);\n var stages = this._stages;\n var length = stages.length;\n stages.get(0).execute(context, colorTexture);\n for (var i = 1; i < length; ++i) {\n stages.get(i).execute(context, stages.get(i - 1).outputTexture);\n }\n};\n\nSunPostProcess.prototype.copy = function (context, framebuffer) {\n if (!defined(this._copyColorCommand)) {\n var that = this;\n this._copyColorCommand = context.createViewportQuadCommand(PassThrough, {\n uniformMap: {\n colorTexture: function () {\n return that._stages.get(that._stages.length - 1).outputTexture;\n },\n },\n owner: this,\n });\n }\n\n this._copyColorCommand.framebuffer = framebuffer;\n this._copyColorCommand.execute(context);\n};\n\nSunPostProcess.prototype.isDestroyed = function () {\n return false;\n};\n\nSunPostProcess.prototype.destroy = function () {\n this._textureCache.destroy();\n this._stages.destroy();\n return destroyObject(this);\n};\nexport default SunPostProcess;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nuniform float avgLuminance;\\n\\\nuniform float threshold;\\n\\\nuniform float offset;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nfloat key(float avg)\\n\\\n{\\n\\\n float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));\\n\\\n return max(0.0, guess) + 0.1;\\n\\\n}\\n\\\n\\n\\\n// See section 9. \\\"The bright-pass filter\\\" of Realtime HDR Rendering\\n\\\n// http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 color = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec3 xyz = czm_RGBToXYZ(color.rgb);\\n\\\n float luminance = xyz.r;\\n\\\n\\n\\\n float scaledLum = key(avgLuminance) * luminance / avgLuminance;\\n\\\n float brightLum = max(scaledLum - threshold, 0.0);\\n\\\n float brightness = brightLum / (offset + brightLum);\\n\\\n\\n\\\n xyz.r = brightness;\\n\\\n gl_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D colorTexture2;\\n\\\n\\n\\\nuniform vec2 center;\\n\\\nuniform float radius;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 color0 = texture2D(colorTexture, v_textureCoordinates);\\n\\\n vec4 color1 = texture2D(colorTexture2, v_textureCoordinates);\\n\\\n\\n\\\n float x = length(gl_FragCoord.xy - center) / radius;\\n\\\n float t = smoothstep(0.5, 0.8, x);\\n\\\n gl_FragColor = mix(color0 + color1, color1, t);\\n\\\n}\\n\\\n\";\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport mergeSort from \"../Core/mergeSort.js\";\nimport Occluder from \"../Core/Occluder.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport RequestScheduler from \"../Core/RequestScheduler.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport ComputeEngine from \"../Renderer/ComputeEngine.js\";\nimport Context from \"../Renderer/Context.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport BrdfLutGenerator from \"./BrdfLutGenerator.js\";\nimport Camera from \"./Camera.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTilePassState from \"./Cesium3DTilePassState.js\";\nimport CreditDisplay from \"./CreditDisplay.js\";\nimport DebugCameraPrimitive from \"./DebugCameraPrimitive.js\";\nimport DepthPlane from \"./DepthPlane.js\";\nimport DerivedCommand from \"./DerivedCommand.js\";\nimport DeviceOrientationCameraController from \"./DeviceOrientationCameraController.js\";\nimport Fog from \"./Fog.js\";\nimport FrameState from \"./FrameState.js\";\nimport GlobeDepth from \"./GlobeDepth.js\";\nimport GlobeTranslucencyState from \"./GlobeTranslucencyState.js\";\nimport InvertClassification from \"./InvertClassification.js\";\nimport JobScheduler from \"./JobScheduler.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport OctahedralProjectedCubeMap from \"./OctahedralProjectedCubeMap.js\";\nimport PerformanceDisplay from \"./PerformanceDisplay.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Picking from \"./Picking.js\";\nimport PostProcessStageCollection from \"./PostProcessStageCollection.js\";\nimport Primitive from \"./Primitive.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport SceneTransitioner from \"./SceneTransitioner.js\";\nimport ScreenSpaceCameraController from \"./ScreenSpaceCameraController.js\";\nimport ShadowMap from \"./ShadowMap.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport SunLight from \"./SunLight.js\";\nimport SunPostProcess from \"./SunPostProcess.js\";\nimport TweenCollection from \"./TweenCollection.js\";\nimport View from \"./View.js\";\n\nvar requestRenderAfterFrame = function (scene) {\n return function () {\n scene.frameState.afterRender.push(function () {\n scene.requestRender();\n });\n };\n};\n\n/**\n * The container for all 3D graphical objects and state in a Cesium virtual scene. Generally,\n * a scene is not created directly; instead, it is implicitly created by {@link CesiumWidget}.\n * <p>\n * <em><code>contextOptions</code> parameter details:</em>\n * </p>\n * <p>\n * The default values are:\n * <code>\n * {\n * webgl : {\n * alpha : false,\n * depth : true,\n * stencil : false,\n * antialias : true,\n * powerPreference: 'high-performance',\n * premultipliedAlpha : true,\n * preserveDrawingBuffer : false,\n * failIfMajorPerformanceCaveat : false\n * },\n * allowTextureFilterAnisotropic : true\n * }\n * </code>\n * </p>\n * <p>\n * The <code>webgl</code> property corresponds to the {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}\n * object used to create the WebGL context.\n * </p>\n * <p>\n * <code>webgl.alpha</code> defaults to false, which can improve performance compared to the standard WebGL default\n * of true. If an application needs to composite Cesium above other HTML elements using alpha-blending, set\n * <code>webgl.alpha</code> to true.\n * </p>\n * <p>\n * The other <code>webgl</code> properties match the WebGL defaults for {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}.\n * </p>\n * <p>\n * <code>allowTextureFilterAnisotropic</code> defaults to true, which enables anisotropic texture filtering when the\n * WebGL extension is supported. Setting this to false will improve performance, but hurt visual quality, especially for horizon views.\n * </p>\n *\n * @alias Scene\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {HTMLCanvasElement} options.canvas The HTML canvas element to create the scene for.\n * @param {Object} [options.contextOptions] Context and WebGL creation properties. See details above.\n * @param {Element} [options.creditContainer] The HTML element in which the credits will be displayed.\n * @param {Element} [options.creditViewport] The HTML element in which to display the credit popup. If not specified, the viewport will be a added as a sibling of the canvas.\n * @param {MapProjection} [options.mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes.\n * @param {Boolean} [options.orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @param {Boolean} [options.scene3DOnly=false] If true, optimizes memory use and performance for 3D mode but disables the ability to use 2D or Columbus View.\n * @param {Number} [options.terrainExaggeration=1.0] A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid.\n * @param {Boolean} [options.shadows=false] Determines if shadows are cast by light sources.\n * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @param {Boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {Number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n *\n * @see CesiumWidget\n * @see {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}\n *\n * @exception {DeveloperError} options and options.canvas are required.\n *\n * @example\n * // Create scene without anisotropic texture filtering\n * var scene = new Cesium.Scene({\n * canvas : canvas,\n * contextOptions : {\n * allowTextureFilterAnisotropic : false\n * }\n * });\n */\nfunction Scene(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n var canvas = options.canvas;\n var creditContainer = options.creditContainer;\n var creditViewport = options.creditViewport;\n\n var contextOptions = clone(options.contextOptions);\n if (!defined(contextOptions)) {\n contextOptions = {};\n }\n if (!defined(contextOptions.webgl)) {\n contextOptions.webgl = {};\n }\n contextOptions.webgl.powerPreference = defaultValue(\n contextOptions.webgl.powerPreference,\n \"high-performance\"\n );\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(canvas)) {\n throw new DeveloperError(\"options and options.canvas are required.\");\n }\n //>>includeEnd('debug');\n var hasCreditContainer = defined(creditContainer);\n var context = new Context(canvas, contextOptions);\n if (!hasCreditContainer) {\n creditContainer = document.createElement(\"div\");\n creditContainer.style.position = \"absolute\";\n creditContainer.style.bottom = \"0\";\n creditContainer.style[\"text-shadow\"] = \"0 0 2px #000000\";\n creditContainer.style.color = \"#ffffff\";\n creditContainer.style[\"font-size\"] = \"10px\";\n creditContainer.style[\"padding-right\"] = \"5px\";\n canvas.parentNode.appendChild(creditContainer);\n }\n if (!defined(creditViewport)) {\n creditViewport = canvas.parentNode;\n }\n\n this._id = createGuid();\n this._jobScheduler = new JobScheduler();\n this._frameState = new FrameState(\n context,\n new CreditDisplay(creditContainer, \" • \", creditViewport),\n this._jobScheduler\n );\n this._frameState.scene3DOnly = defaultValue(options.scene3DOnly, false);\n this._removeCreditContainer = !hasCreditContainer;\n this._creditContainer = creditContainer;\n\n this._canvas = canvas;\n this._context = context;\n this._computeEngine = new ComputeEngine(context);\n this._globe = undefined;\n this._globeTranslucencyState = new GlobeTranslucencyState();\n this._primitives = new PrimitiveCollection();\n this._groundPrimitives = new PrimitiveCollection();\n\n this._globeHeight = undefined;\n this._cameraUnderground = false;\n\n this._logDepthBuffer = context.fragmentDepth;\n this._logDepthBufferDirty = true;\n\n this._tweens = new TweenCollection();\n\n this._shaderFrameCount = 0;\n\n this._sunPostProcess = undefined;\n\n this._computeCommandList = [];\n this._overlayCommandList = [];\n\n this._useOIT = defaultValue(options.orderIndependentTranslucency, true);\n this._executeOITFunction = undefined;\n\n this._depthPlane = new DepthPlane();\n\n this._clearColorCommand = new ClearCommand({\n color: new Color(),\n stencil: 0,\n owner: this,\n });\n this._depthClearCommand = new ClearCommand({\n depth: 1.0,\n owner: this,\n });\n this._stencilClearCommand = new ClearCommand({\n stencil: 0,\n });\n this._classificationStencilClearCommand = new ClearCommand({\n stencil: 0,\n renderState: RenderState.fromCache({\n stencilMask: StencilConstants.CLASSIFICATION_MASK,\n }),\n });\n\n this._depthOnlyRenderStateCache = {};\n\n this._transitioner = new SceneTransitioner(this);\n\n this._preUpdate = new Event();\n this._postUpdate = new Event();\n\n this._renderError = new Event();\n this._preRender = new Event();\n this._postRender = new Event();\n\n this._minimumDisableDepthTestDistance = 0.0;\n\n /**\n * Exceptions occurring in <code>render</code> are always caught in order to raise the\n * <code>renderError</code> event. If this property is true, the error is rethrown\n * after the event is raised. If this property is false, the <code>render</code> function\n * returns normally after raising the event.\n *\n * @type {Boolean}\n * @default false\n */\n this.rethrowRenderErrors = false;\n\n /**\n * Determines whether or not to instantly complete the\n * scene transition animation on user input.\n *\n * @type {Boolean}\n * @default true\n */\n this.completeMorphOnUserInput = true;\n\n /**\n * The event fired at the beginning of a scene transition.\n * @type {Event}\n * @default Event()\n */\n this.morphStart = new Event();\n\n /**\n * The event fired at the completion of a scene transition.\n * @type {Event}\n * @default Event()\n */\n this.morphComplete = new Event();\n\n /**\n * The {@link SkyBox} used to draw the stars.\n *\n * @type {SkyBox}\n * @default undefined\n *\n * @see Scene#backgroundColor\n */\n this.skyBox = undefined;\n\n /**\n * The sky atmosphere drawn around the globe.\n *\n * @type {SkyAtmosphere}\n * @default undefined\n */\n this.skyAtmosphere = undefined;\n\n /**\n * The {@link Sun}.\n *\n * @type {Sun}\n * @default undefined\n */\n this.sun = undefined;\n\n /**\n * Uses a bloom filter on the sun when enabled.\n *\n * @type {Boolean}\n * @default true\n */\n this.sunBloom = true;\n this._sunBloom = undefined;\n\n /**\n * The {@link Moon}\n *\n * @type Moon\n * @default undefined\n */\n this.moon = undefined;\n\n /**\n * The background color, which is only visible if there is no sky box, i.e., {@link Scene#skyBox} is undefined.\n *\n * @type {Color}\n * @default {@link Color.BLACK}\n *\n * @see Scene#skyBox\n */\n this.backgroundColor = Color.clone(Color.BLACK);\n\n this._mode = SceneMode.SCENE3D;\n\n this._mapProjection = defined(options.mapProjection)\n ? options.mapProjection\n : new GeographicProjection();\n\n /**\n * The current morph transition time between 2D/Columbus View and 3D,\n * with 0.0 being 2D or Columbus View and 1.0 being 3D.\n *\n * @type {Number}\n * @default 1.0\n */\n this.morphTime = 1.0;\n\n /**\n * The far-to-near ratio of the multi-frustum when using a normal depth buffer.\n * <p>\n * This value is used to create the near and far values for each frustum of the multi-frustum. It is only used\n * when {@link Scene#logarithmicDepthBuffer} is <code>false</code>. When <code>logarithmicDepthBuffer</code> is\n * <code>true</code>, use {@link Scene#logarithmicDepthFarToNearRatio}.\n * </p>\n *\n * @type {Number}\n * @default 1000.0\n */\n this.farToNearRatio = 1000.0;\n\n /**\n * The far-to-near ratio of the multi-frustum when using a logarithmic depth buffer.\n * <p>\n * This value is used to create the near and far values for each frustum of the multi-frustum. It is only used\n * when {@link Scene#logarithmicDepthBuffer} is <code>true</code>. When <code>logarithmicDepthBuffer</code> is\n * <code>false</code>, use {@link Scene#farToNearRatio}.\n * </p>\n *\n * @type {Number}\n * @default 1e9\n */\n this.logarithmicDepthFarToNearRatio = 1e9;\n\n /**\n * Determines the uniform depth size in meters of each frustum of the multifrustum in 2D. If a primitive or model close\n * to the surface shows z-fighting, decreasing this will eliminate the artifact, but decrease performance. On the\n * other hand, increasing this will increase performance but may cause z-fighting among primitives close to the surface.\n *\n * @type {Number}\n * @default 1.75e6\n */\n this.nearToFarDistance2D = 1.75e6;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * A function that determines what commands are executed. As shown in the examples below,\n * the function receives the command's <code>owner</code> as an argument, and returns a boolean indicating if the\n * command should be executed.\n * </p>\n * <p>\n * The default is <code>undefined</code>, indicating that all commands are executed.\n * </p>\n *\n * @type Function\n *\n * @default undefined\n *\n * @example\n * // Do not execute any commands.\n * scene.debugCommandFilter = function(command) {\n * return false;\n * };\n *\n * // Execute only the billboard's commands. That is, only draw the billboard.\n * var billboards = new Cesium.BillboardCollection();\n * scene.debugCommandFilter = function(command) {\n * return command.owner === billboards;\n * };\n */\n this.debugCommandFilter = undefined;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * When <code>true</code>, commands are randomly shaded. This is useful\n * for performance analysis to see what parts of a scene or model are\n * command-dense and could benefit from batching.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.debugShowCommands = false;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * When <code>true</code>, commands are shaded based on the frustums they\n * overlap. Commands in the closest frustum are tinted red, commands in\n * the next closest are green, and commands in the farthest frustum are\n * blue. If a command overlaps more than one frustum, the color components\n * are combined, e.g., a command overlapping the first two frustums is tinted\n * yellow.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.debugShowFrustums = false;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * Displays frames per second and time between frames.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.debugShowFramesPerSecond = false;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * Displays depth information for the indicated frustum.\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.debugShowGlobeDepth = false;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * Indicates which frustum will have depth information displayed.\n * </p>\n *\n * @type Number\n *\n * @default 1\n */\n this.debugShowDepthFrustum = 1;\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * When <code>true</code>, draws outlines to show the boundaries of the camera frustums\n * </p>\n *\n * @type Boolean\n *\n * @default false\n */\n this.debugShowFrustumPlanes = false;\n this._debugShowFrustumPlanes = false;\n this._debugFrustumPlanes = undefined;\n\n /**\n * When <code>true</code>, enables picking using the depth buffer.\n *\n * @type Boolean\n * @default true\n */\n this.useDepthPicking = true;\n\n /**\n * When <code>true</code>, enables picking translucent geometry using the depth buffer. Note that {@link Scene#useDepthPicking} must also be true for enabling this to work.\n *\n * <p>\n * Render must be called between picks.\n * <br>There is a decrease in performance when enabled. There are extra draw calls to write depth for\n * translucent geometry.\n * </p>\n *\n * @example\n * // picking the position of a translucent primitive\n * viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {\n * var pickedFeature = viewer.scene.pick(movement.position);\n * if (!Cesium.defined(pickedFeature)) {\n * // nothing picked\n * return;\n * }\n * viewer.scene.render();\n * var worldPosition = viewer.scene.pickPosition(movement.position);\n * }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n *\n * @type {Boolean}\n * @default false\n */\n this.pickTranslucentDepth = false;\n\n /**\n * The time in milliseconds to wait before checking if the camera has not moved and fire the cameraMoveEnd event.\n * @type {Number}\n * @default 500.0\n * @private\n */\n this.cameraEventWaitTime = 500.0;\n\n /**\n * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional\n * performance improvements by rendering less geometry and dispatching less terrain requests.\n * @type {Fog}\n */\n this.fog = new Fog();\n\n this._shadowMapCamera = new Camera(this);\n\n /**\n * The shadow map for the scene's light source. When enabled, models, primitives, and the globe may cast and receive shadows.\n * @type {ShadowMap}\n */\n this.shadowMap = new ShadowMap({\n context: context,\n lightCamera: this._shadowMapCamera,\n enabled: defaultValue(options.shadows, false),\n });\n\n /**\n * When <code>false</code>, 3D Tiles will render normally. When <code>true</code>, classified 3D Tile geometry will render normally and\n * unclassified 3D Tile geometry will render with the color multiplied by {@link Scene#invertClassificationColor}.\n * @type {Boolean}\n * @default false\n */\n this.invertClassification = false;\n\n /**\n * The highlight color of unclassified 3D Tile geometry when {@link Scene#invertClassification} is <code>true</code>.\n * <p>When the color's alpha is less than 1.0, the unclassified portions of the 3D Tiles will not blend correctly with the classified positions of the 3D Tiles.</p>\n * <p>Also, when the color's alpha is less than 1.0, the WEBGL_depth_texture and EXT_frag_depth WebGL extensions must be supported.</p>\n * @type {Color}\n * @default Color.WHITE\n */\n this.invertClassificationColor = Color.clone(Color.WHITE);\n\n this._actualInvertClassificationColor = Color.clone(\n this._invertClassificationColor\n );\n this._invertClassification = new InvertClassification();\n\n /**\n * The focal length for use when with cardboard or WebVR.\n * @type {Number}\n */\n this.focalLength = undefined;\n\n /**\n * The eye separation distance in meters for use with cardboard or WebVR.\n * @type {Number}\n */\n this.eyeSeparation = undefined;\n\n /**\n * Post processing effects applied to the final render.\n * @type {PostProcessStageCollection}\n */\n this.postProcessStages = new PostProcessStageCollection();\n\n this._brdfLutGenerator = new BrdfLutGenerator();\n\n this._terrainExaggeration = defaultValue(options.terrainExaggeration, 1.0);\n\n this._performanceDisplay = undefined;\n this._debugVolume = undefined;\n\n this._screenSpaceCameraController = new ScreenSpaceCameraController(this);\n this._cameraUnderground = false;\n this._mapMode2D = defaultValue(options.mapMode2D, MapMode2D.INFINITE_SCROLL);\n\n // Keeps track of the state of a frame. FrameState is the state across\n // the primitives of the scene. This state is for internally keeping track\n // of celestial and environment effects that need to be updated/rendered in\n // a certain order as well as updating/tracking framebuffer usage.\n this._environmentState = {\n skyBoxCommand: undefined,\n skyAtmosphereCommand: undefined,\n sunDrawCommand: undefined,\n sunComputeCommand: undefined,\n moonCommand: undefined,\n\n isSunVisible: false,\n isMoonVisible: false,\n isReadyForAtmosphere: false,\n isSkyAtmosphereVisible: false,\n\n clearGlobeDepth: false,\n useDepthPlane: false,\n renderTranslucentDepthForPick: false,\n\n originalFramebuffer: undefined,\n useGlobeDepthFramebuffer: false,\n separatePrimitiveFramebuffer: false,\n useOIT: false,\n useInvertClassification: false,\n usePostProcess: false,\n usePostProcessSelected: false,\n useWebVR: false,\n };\n\n this._useWebVR = false;\n this._cameraVR = undefined;\n this._aspectRatioVR = undefined;\n\n /**\n * When <code>true</code>, rendering a frame will only occur when needed as determined by changes within the scene.\n * Enabling improves performance of the application, but requires using {@link Scene#requestRender}\n * to render a new frame explicitly in this mode. This will be necessary in many cases after making changes\n * to the scene in other parts of the API.\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#maximumRenderTimeChange\n * @see Scene#requestRender\n *\n * @type {Boolean}\n * @default false\n */\n this.requestRenderMode = defaultValue(options.requestRenderMode, false);\n this._renderRequested = true;\n\n /**\n * If {@link Scene#requestRenderMode} is <code>true</code>, this value defines the maximum change in\n * simulation time allowed before a render is requested. Lower values increase the number of frames rendered\n * and higher values decrease the number of frames rendered. If <code>undefined</code>, changes to\n * the simulation time will never request a render.\n * This value impacts the rate of rendering for changes in the scene like lighting, entity property updates,\n * and animations.\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#requestRenderMode\n *\n * @type {Number}\n * @default 0.0\n */\n this.maximumRenderTimeChange = defaultValue(\n options.maximumRenderTimeChange,\n 0.0\n );\n this._lastRenderTime = undefined;\n this._frameRateMonitor = undefined;\n\n this._removeRequestListenerCallback = RequestScheduler.requestCompletedEvent.addEventListener(\n requestRenderAfterFrame(this)\n );\n this._removeTaskProcessorListenerCallback = TaskProcessor.taskCompletedEvent.addEventListener(\n requestRenderAfterFrame(this)\n );\n this._removeGlobeCallbacks = [];\n\n var viewport = new BoundingRectangle(\n 0,\n 0,\n context.drawingBufferWidth,\n context.drawingBufferHeight\n );\n var camera = new Camera(this);\n\n if (this._logDepthBuffer) {\n camera.frustum.near = 0.1;\n camera.frustum.far = 10000000000.0;\n }\n\n /**\n * The camera view for the scene camera flight destination. Used for preloading flight destination tiles.\n * @type {Camera}\n * @private\n */\n this.preloadFlightCamera = new Camera(this);\n\n /**\n * The culling volume for the scene camera flight destination. Used for preloading flight destination tiles.\n * @type {CullingVolume}\n * @private\n */\n this.preloadFlightCullingVolume = undefined;\n\n this._picking = new Picking(this);\n this._defaultView = new View(this, camera, viewport);\n this._view = this._defaultView;\n\n this._hdr = undefined;\n this._hdrDirty = undefined;\n this.highDynamicRange = false;\n this.gamma = 2.2;\n\n /**\n * The spherical harmonic coefficients for image-based lighting of PBR models.\n * @type {Cartesian3[]}\n */\n this.sphericalHarmonicCoefficients = undefined;\n\n /**\n * The url to the KTX file containing the specular environment map and convoluted mipmaps for image-based lighting of PBR models.\n * @type {String}\n */\n this.specularEnvironmentMaps = undefined;\n this._specularEnvironmentMapAtlas = undefined;\n\n /**\n * The light source for shading. Defaults to a directional light from the Sun.\n * @type {Light}\n */\n this.light = new SunLight();\n\n // Give frameState, camera, and screen space camera controller initial state before rendering\n updateFrameNumber(this, 0.0, JulianDate.now());\n this.updateFrameState();\n this.initializeFrame();\n}\n\nfunction updateGlobeListeners(scene, globe) {\n for (var i = 0; i < scene._removeGlobeCallbacks.length; ++i) {\n scene._removeGlobeCallbacks[i]();\n }\n scene._removeGlobeCallbacks.length = 0;\n\n var removeGlobeCallbacks = [];\n if (defined(globe)) {\n removeGlobeCallbacks.push(\n globe.imageryLayersUpdatedEvent.addEventListener(\n requestRenderAfterFrame(scene)\n )\n );\n removeGlobeCallbacks.push(\n globe.terrainProviderChanged.addEventListener(\n requestRenderAfterFrame(scene)\n )\n );\n }\n scene._removeGlobeCallbacks = removeGlobeCallbacks;\n}\n\nObject.defineProperties(Scene.prototype, {\n /**\n * Gets the canvas element to which this scene is bound.\n * @memberof Scene.prototype\n *\n * @type {HTMLCanvasElement}\n * @readonly\n */\n canvas: {\n get: function () {\n return this._canvas;\n },\n },\n\n /**\n * The drawingBufferHeight of the underlying GL context.\n * @memberof Scene.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferHeight|drawingBufferHeight}\n */\n drawingBufferHeight: {\n get: function () {\n return this._context.drawingBufferHeight;\n },\n },\n\n /**\n * The drawingBufferHeight of the underlying GL context.\n * @memberof Scene.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferHeight|drawingBufferHeight}\n */\n drawingBufferWidth: {\n get: function () {\n return this._context.drawingBufferWidth;\n },\n },\n\n /**\n * The maximum aliased line width, in pixels, supported by this WebGL implementation. It will be at least one.\n * @memberof Scene.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n */\n maximumAliasedLineWidth: {\n get: function () {\n return ContextLimits.maximumAliasedLineWidth;\n },\n },\n\n /**\n * The maximum length in pixels of one edge of a cube map, supported by this WebGL implementation. It will be at least 16.\n * @memberof Scene.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>GL_MAX_CUBE_MAP_TEXTURE_SIZE</code>.\n */\n maximumCubeMapSize: {\n get: function () {\n return ContextLimits.maximumCubeMapSize;\n },\n },\n\n /**\n * Returns <code>true</code> if the {@link Scene#pickPosition} function is supported.\n * @memberof Scene.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @see Scene#pickPosition\n */\n pickPositionSupported: {\n get: function () {\n return this._context.depthTexture;\n },\n },\n\n /**\n * Returns <code>true</code> if the {@link Scene#sampleHeight} and {@link Scene#sampleHeightMostDetailed} functions are supported.\n * @memberof Scene.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @see Scene#sampleHeight\n * @see Scene#sampleHeightMostDetailed\n */\n sampleHeightSupported: {\n get: function () {\n return this._context.depthTexture;\n },\n },\n\n /**\n * Returns <code>true</code> if the {@link Scene#clampToHeight} and {@link Scene#clampToHeightMostDetailed} functions are supported.\n * @memberof Scene.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @see Scene#clampToHeight\n * @see Scene#clampToHeightMostDetailed\n */\n clampToHeightSupported: {\n get: function () {\n return this._context.depthTexture;\n },\n },\n\n /**\n * Returns <code>true</code> if the {@link Scene#invertClassification} is supported.\n * @memberof Scene.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @see Scene#invertClassification\n */\n invertClassificationSupported: {\n get: function () {\n return this._context.depthTexture;\n },\n },\n\n /**\n * Returns <code>true</code> if specular environment maps are supported.\n * @memberof Scene.prototype\n *\n * @type {Boolean}\n * @readonly\n *\n * @see Scene#specularEnvironmentMaps\n */\n specularEnvironmentMapsSupported: {\n get: function () {\n return OctahedralProjectedCubeMap.isSupported(this._context);\n },\n },\n\n /**\n * Gets or sets the depth-test ellipsoid.\n * @memberof Scene.prototype\n *\n * @type {Globe}\n */\n globe: {\n get: function () {\n return this._globe;\n },\n\n set: function (globe) {\n this._globe = this._globe && this._globe.destroy();\n this._globe = globe;\n\n updateGlobeListeners(this, globe);\n },\n },\n\n /**\n * Gets the collection of primitives.\n * @memberof Scene.prototype\n *\n * @type {PrimitiveCollection}\n * @readonly\n */\n primitives: {\n get: function () {\n return this._primitives;\n },\n },\n\n /**\n * Gets the collection of ground primitives.\n * @memberof Scene.prototype\n *\n * @type {PrimitiveCollection}\n * @readonly\n */\n groundPrimitives: {\n get: function () {\n return this._groundPrimitives;\n },\n },\n\n /**\n * Gets or sets the camera.\n * @memberof Scene.prototype\n *\n * @type {Camera}\n * @readonly\n */\n camera: {\n get: function () {\n return this._view.camera;\n },\n set: function (camera) {\n // For internal use only. Documentation is still @readonly.\n this._view.camera = camera;\n },\n },\n\n /**\n * Gets or sets the view.\n * @memberof Scene.prototype\n *\n * @type {View}\n * @readonly\n *\n * @private\n */\n view: {\n get: function () {\n return this._view;\n },\n set: function (view) {\n // For internal use only. Documentation is still @readonly.\n this._view = view;\n },\n },\n\n /**\n * Gets the default view.\n * @memberof Scene.prototype\n *\n * @type {View}\n * @readonly\n *\n * @private\n */\n defaultView: {\n get: function () {\n return this._defaultView;\n },\n },\n\n /**\n * Gets picking functions and state\n * @memberof Scene.prototype\n *\n * @type {Picking}\n * @readonly\n *\n * @private\n */\n picking: {\n get: function () {\n return this._picking;\n },\n },\n\n /**\n * Gets the controller for camera input handling.\n * @memberof Scene.prototype\n *\n * @type {ScreenSpaceCameraController}\n * @readonly\n */\n screenSpaceCameraController: {\n get: function () {\n return this._screenSpaceCameraController;\n },\n },\n\n /**\n * Get the map projection to use in 2D and Columbus View modes.\n * @memberof Scene.prototype\n *\n * @type {MapProjection}\n * @readonly\n *\n * @default new GeographicProjection()\n */\n mapProjection: {\n get: function () {\n return this._mapProjection;\n },\n },\n\n /**\n * Gets the job scheduler\n * @memberof Scene.prototype\n * @type {JobScheduler}\n * @readonly\n *\n * @private\n */\n jobScheduler: {\n get: function () {\n return this._jobScheduler;\n },\n },\n\n /**\n * Gets state information about the current scene. If called outside of a primitive's <code>update</code>\n * function, the previous frame's state is returned.\n * @memberof Scene.prototype\n *\n * @type {FrameState}\n * @readonly\n *\n * @private\n */\n frameState: {\n get: function () {\n return this._frameState;\n },\n },\n\n /**\n * Gets the environment state.\n * @memberof Scene.prototype\n *\n * @type {EnvironmentState}\n * @readonly\n *\n * @private\n */\n environmentState: {\n get: function () {\n return this._environmentState;\n },\n },\n\n /**\n * Gets the collection of tweens taking place in the scene.\n * @memberof Scene.prototype\n *\n * @type {TweenCollection}\n * @readonly\n *\n * @private\n */\n tweens: {\n get: function () {\n return this._tweens;\n },\n },\n\n /**\n * Gets the collection of image layers that will be rendered on the globe.\n * @memberof Scene.prototype\n *\n * @type {ImageryLayerCollection}\n * @readonly\n */\n imageryLayers: {\n get: function () {\n if (!defined(this.globe)) {\n return undefined;\n }\n\n return this.globe.imageryLayers;\n },\n },\n\n /**\n * The terrain provider providing surface geometry for the globe.\n * @memberof Scene.prototype\n *\n * @type {TerrainProvider}\n */\n terrainProvider: {\n get: function () {\n if (!defined(this.globe)) {\n return undefined;\n }\n\n return this.globe.terrainProvider;\n },\n set: function (terrainProvider) {\n if (defined(this.globe)) {\n this.globe.terrainProvider = terrainProvider;\n }\n },\n },\n\n /**\n * Gets an event that's raised when the terrain provider is changed\n * @memberof Scene.prototype\n *\n * @type {Event}\n * @readonly\n */\n terrainProviderChanged: {\n get: function () {\n if (!defined(this.globe)) {\n return undefined;\n }\n\n return this.globe.terrainProviderChanged;\n },\n },\n\n /**\n * Gets the event that will be raised before the scene is updated or rendered. Subscribers to the event\n * receive the Scene instance as the first parameter and the current time as the second parameter.\n * @memberof Scene.prototype\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#postUpdate\n * @see Scene#preRender\n * @see Scene#postRender\n *\n * @type {Event}\n * @readonly\n */\n preUpdate: {\n get: function () {\n return this._preUpdate;\n },\n },\n\n /**\n * Gets the event that will be raised immediately after the scene is updated and before the scene is rendered.\n * Subscribers to the event receive the Scene instance as the first parameter and the current time as the second\n * parameter.\n * @memberof Scene.prototype\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#preUpdate\n * @see Scene#preRender\n * @see Scene#postRender\n *\n * @type {Event}\n * @readonly\n */\n postUpdate: {\n get: function () {\n return this._postUpdate;\n },\n },\n\n /**\n * Gets the event that will be raised when an error is thrown inside the <code>render</code> function.\n * The Scene instance and the thrown error are the only two parameters passed to the event handler.\n * By default, errors are not rethrown after this event is raised, but that can be changed by setting\n * the <code>rethrowRenderErrors</code> property.\n * @memberof Scene.prototype\n *\n * @type {Event}\n * @readonly\n */\n renderError: {\n get: function () {\n return this._renderError;\n },\n },\n\n /**\n * Gets the event that will be raised after the scene is updated and immediately before the scene is rendered.\n * Subscribers to the event receive the Scene instance as the first parameter and the current time as the second\n * parameter.\n * @memberof Scene.prototype\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#preUpdate\n * @see Scene#postUpdate\n * @see Scene#postRender\n *\n * @type {Event}\n * @readonly\n */\n preRender: {\n get: function () {\n return this._preRender;\n },\n },\n\n /**\n * Gets the event that will be raised immediately after the scene is rendered. Subscribers to the event\n * receive the Scene instance as the first parameter and the current time as the second parameter.\n * @memberof Scene.prototype\n *\n * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n * @see Scene#preUpdate\n * @see Scene#postUpdate\n * @see Scene#postRender\n *\n * @type {Event}\n * @readonly\n */\n postRender: {\n get: function () {\n return this._postRender;\n },\n },\n\n /**\n * Gets the simulation time when the scene was last rendered. Returns undefined if the scene has not yet been\n * rendered.\n * @memberof Scene.prototype\n *\n * @type {JulianDate}\n * @readonly\n */\n lastRenderTime: {\n get: function () {\n return this._lastRenderTime;\n },\n },\n\n /**\n * @memberof Scene.prototype\n * @private\n * @readonly\n */\n context: {\n get: function () {\n return this._context;\n },\n },\n\n /**\n * This property is for debugging only; it is not for production use.\n * <p>\n * When {@link Scene.debugShowFrustums} is <code>true</code>, this contains\n * properties with statistics about the number of command execute per frustum.\n * <code>totalCommands</code> is the total number of commands executed, ignoring\n * overlap. <code>commandsInFrustums</code> is an array with the number of times\n * commands are executed redundantly, e.g., how many commands overlap two or\n * three frustums.\n * </p>\n *\n * @memberof Scene.prototype\n *\n * @type {Object}\n * @readonly\n *\n * @default undefined\n */\n debugFrustumStatistics: {\n get: function () {\n return this._view.debugFrustumStatistics;\n },\n },\n\n /**\n * Gets whether or not the scene is optimized for 3D only viewing.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @readonly\n */\n scene3DOnly: {\n get: function () {\n return this._frameState.scene3DOnly;\n },\n },\n\n /**\n * Gets whether or not the scene has order independent translucency enabled.\n * Note that this only reflects the original construction option, and there are\n * other factors that could prevent OIT from functioning on a given system configuration.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @readonly\n */\n orderIndependentTranslucency: {\n get: function () {\n return this._useOIT;\n },\n },\n\n /**\n * Gets the unique identifier for this scene.\n * @memberof Scene.prototype\n * @type {String}\n * @readonly\n */\n id: {\n get: function () {\n return this._id;\n },\n },\n\n /**\n * Gets or sets the current mode of the scene.\n * @memberof Scene.prototype\n * @type {SceneMode}\n * @default {@link SceneMode.SCENE3D}\n */\n mode: {\n get: function () {\n return this._mode;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (this.scene3DOnly && value !== SceneMode.SCENE3D) {\n throw new DeveloperError(\n \"Only SceneMode.SCENE3D is valid when scene3DOnly is true.\"\n );\n }\n //>>includeEnd('debug');\n if (value === SceneMode.SCENE2D) {\n this.morphTo2D(0);\n } else if (value === SceneMode.SCENE3D) {\n this.morphTo3D(0);\n } else if (value === SceneMode.COLUMBUS_VIEW) {\n this.morphToColumbusView(0);\n //>>includeStart('debug', pragmas.debug);\n } else {\n throw new DeveloperError(\n \"value must be a valid SceneMode enumeration.\"\n );\n //>>includeEnd('debug');\n }\n this._mode = value;\n },\n },\n\n /**\n * Gets the number of frustums used in the last frame.\n * @memberof Scene.prototype\n * @type {FrustumCommands[]}\n *\n * @private\n */\n frustumCommandsList: {\n get: function () {\n return this._view.frustumCommandsList;\n },\n },\n\n /**\n * Gets the number of frustums used in the last frame.\n * @memberof Scene.prototype\n * @type {Number}\n *\n * @private\n */\n numberOfFrustums: {\n get: function () {\n return this._view.frustumCommandsList.length;\n },\n },\n\n /**\n * Gets the scalar used to exaggerate the terrain.\n * @memberof Scene.prototype\n * @type {Number}\n * @readonly\n */\n terrainExaggeration: {\n get: function () {\n return this._terrainExaggeration;\n },\n },\n\n /**\n * When <code>true</code>, splits the scene into two viewports with steroscopic views for the left and right eyes.\n * Used for cardboard and WebVR.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @default false\n */\n useWebVR: {\n get: function () {\n return this._useWebVR;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (this.camera.frustum instanceof OrthographicFrustum) {\n throw new DeveloperError(\n \"VR is unsupported with an orthographic projection.\"\n );\n }\n //>>includeEnd('debug');\n this._useWebVR = value;\n if (this._useWebVR) {\n this._frameState.creditDisplay.container.style.visibility = \"hidden\";\n this._cameraVR = new Camera(this);\n if (!defined(this._deviceOrientationCameraController)) {\n this._deviceOrientationCameraController = new DeviceOrientationCameraController(\n this\n );\n }\n\n this._aspectRatioVR = this.camera.frustum.aspectRatio;\n } else {\n this._frameState.creditDisplay.container.style.visibility = \"visible\";\n this._cameraVR = undefined;\n this._deviceOrientationCameraController =\n this._deviceOrientationCameraController &&\n !this._deviceOrientationCameraController.isDestroyed() &&\n this._deviceOrientationCameraController.destroy();\n\n this.camera.frustum.aspectRatio = this._aspectRatioVR;\n this.camera.frustum.xOffset = 0.0;\n }\n },\n },\n\n /**\n * Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @memberof Scene.prototype\n * @type {MapMode2D}\n * @readonly\n */\n mapMode2D: {\n get: function () {\n return this._mapMode2D;\n },\n },\n\n /**\n * Gets or sets the position of the Imagery splitter within the viewport. Valid values are between 0.0 and 1.0.\n * @memberof Scene.prototype\n *\n * @type {Number}\n */\n imagerySplitPosition: {\n get: function () {\n return this._frameState.imagerySplitPosition;\n },\n set: function (value) {\n this._frameState.imagerySplitPosition = value;\n },\n },\n\n /**\n * The distance from the camera at which to disable the depth test of billboards, labels and points\n * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n * be applied. When less than zero, the depth test should never be applied. Setting the disableDepthTestDistance\n * property of a billboard, label or point will override this value.\n * @memberof Scene.prototype\n * @type {Number}\n * @default 0.0\n */\n minimumDisableDepthTestDistance: {\n get: function () {\n return this._minimumDisableDepthTestDistance;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(value) || value < 0.0) {\n throw new DeveloperError(\n \"minimumDisableDepthTestDistance must be greater than or equal to 0.0.\"\n );\n }\n //>>includeEnd('debug');\n this._minimumDisableDepthTestDistance = value;\n },\n },\n\n /**\n * Whether or not to use a logarithmic depth buffer. Enabling this option will allow for less frustums in the multi-frustum,\n * increasing performance. This property relies on fragmentDepth being supported.\n * @memberof Scene.prototype\n * @type {Boolean}\n */\n logarithmicDepthBuffer: {\n get: function () {\n return this._logDepthBuffer;\n },\n set: function (value) {\n value = this._context.fragmentDepth && value;\n if (this._logDepthBuffer !== value) {\n this._logDepthBuffer = value;\n this._logDepthBufferDirty = true;\n }\n },\n },\n\n /**\n * The value used for gamma correction. This is only used when rendering with high dynamic range.\n * @memberof Scene.prototype\n * @type {Number}\n * @default 2.2\n */\n gamma: {\n get: function () {\n return this._context.uniformState.gamma;\n },\n set: function (value) {\n this._context.uniformState.gamma = value;\n },\n },\n\n /**\n * Whether or not to use high dynamic range rendering.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @default true\n */\n highDynamicRange: {\n get: function () {\n return this._hdr;\n },\n set: function (value) {\n var context = this._context;\n var hdr =\n value &&\n context.depthTexture &&\n (context.colorBufferFloat || context.colorBufferHalfFloat);\n this._hdrDirty = hdr !== this._hdr;\n this._hdr = hdr;\n },\n },\n\n /**\n * Whether or not high dynamic range rendering is supported.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @readonly\n * @default true\n */\n highDynamicRangeSupported: {\n get: function () {\n var context = this._context;\n return (\n context.depthTexture &&\n (context.colorBufferFloat || context.colorBufferHalfFloat)\n );\n },\n },\n\n /**\n * Whether or not the camera is underneath the globe.\n * @memberof Scene.prototype\n * @type {Boolean}\n * @readonly\n * @default false\n */\n cameraUnderground: {\n get: function () {\n return this._cameraUnderground;\n },\n },\n\n /**\n * Ratio between a pixel and a density-independent pixel. Provides a standard unit of\n * measure for real pixel measurements appropriate to a particular device.\n *\n * @memberof Scene.prototype\n * @type {Number}\n * @default 1.0\n * @private\n */\n pixelRatio: {\n get: function () {\n return this._frameState.pixelRatio;\n },\n set: function (value) {\n this._frameState.pixelRatio = value;\n },\n },\n\n /**\n * @private\n */\n opaqueFrustumNearOffset: {\n get: function () {\n return 0.9999;\n },\n },\n\n /**\n * @private\n */\n globeHeight: {\n get: function () {\n return this._globeHeight;\n },\n },\n});\n\n/**\n * Determines if a compressed texture format is supported.\n * @param {String} format The texture format. May be the name of the format or the WebGL extension name, e.g. s3tc or WEBGL_compressed_texture_s3tc.\n * @return {boolean} Whether or not the format is supported.\n */\nScene.prototype.getCompressedTextureFormatSupported = function (format) {\n var context = this.context;\n return (\n ((format === \"WEBGL_compressed_texture_s3tc\" || format === \"s3tc\") &&\n context.s3tc) ||\n ((format === \"WEBGL_compressed_texture_pvrtc\" || format === \"pvrtc\") &&\n context.pvrtc) ||\n ((format === \"WEBGL_compressed_texture_etc1\" || format === \"etc1\") &&\n context.etc1)\n );\n};\n\nfunction updateDerivedCommands(scene, command, shadowsDirty) {\n var frameState = scene._frameState;\n var context = scene._context;\n var oit = scene._view.oit;\n var lightShadowMaps = frameState.shadowState.lightShadowMaps;\n var lightShadowsEnabled = frameState.shadowState.lightShadowsEnabled;\n\n var derivedCommands = command.derivedCommands;\n\n if (defined(command.pickId)) {\n derivedCommands.picking = DerivedCommand.createPickDerivedCommand(\n scene,\n command,\n context,\n derivedCommands.picking\n );\n }\n\n if (!command.pickOnly) {\n derivedCommands.depth = DerivedCommand.createDepthOnlyDerivedCommand(\n scene,\n command,\n context,\n derivedCommands.depth\n );\n }\n\n derivedCommands.originalCommand = command;\n\n if (scene._hdr) {\n derivedCommands.hdr = DerivedCommand.createHdrCommand(\n command,\n context,\n derivedCommands.hdr\n );\n command = derivedCommands.hdr.command;\n derivedCommands = command.derivedCommands;\n }\n\n if (lightShadowsEnabled && command.receiveShadows) {\n derivedCommands.shadows = ShadowMap.createReceiveDerivedCommand(\n lightShadowMaps,\n command,\n shadowsDirty,\n context,\n derivedCommands.shadows\n );\n }\n\n if (command.pass === Pass.TRANSLUCENT && defined(oit) && oit.isSupported()) {\n if (lightShadowsEnabled && command.receiveShadows) {\n derivedCommands.oit = defined(derivedCommands.oit)\n ? derivedCommands.oit\n : {};\n derivedCommands.oit.shadows = oit.createDerivedCommands(\n derivedCommands.shadows.receiveCommand,\n context,\n derivedCommands.oit.shadows\n );\n } else {\n derivedCommands.oit = oit.createDerivedCommands(\n command,\n context,\n derivedCommands.oit\n );\n }\n }\n}\n\n/**\n * @private\n */\nScene.prototype.updateDerivedCommands = function (command) {\n if (!defined(command.derivedCommands)) {\n // Is not a DrawCommand\n return;\n }\n\n var frameState = this._frameState;\n var context = this._context;\n\n // Update derived commands when any shadow maps become dirty\n var shadowsDirty = false;\n var lastDirtyTime = frameState.shadowState.lastDirtyTime;\n if (command.lastDirtyTime !== lastDirtyTime) {\n command.lastDirtyTime = lastDirtyTime;\n command.dirty = true;\n shadowsDirty = true;\n }\n\n var useLogDepth = frameState.useLogDepth;\n var useHdr = this._hdr;\n var derivedCommands = command.derivedCommands;\n var hasLogDepthDerivedCommands = defined(derivedCommands.logDepth);\n var hasHdrCommands = defined(derivedCommands.hdr);\n var hasDerivedCommands = defined(derivedCommands.originalCommand);\n var needsLogDepthDerivedCommands = useLogDepth && !hasLogDepthDerivedCommands;\n var needsHdrCommands = useHdr && !hasHdrCommands;\n var needsDerivedCommands = (!useLogDepth || !useHdr) && !hasDerivedCommands;\n command.dirty =\n command.dirty ||\n needsLogDepthDerivedCommands ||\n needsHdrCommands ||\n needsDerivedCommands;\n\n if (command.dirty) {\n command.dirty = false;\n\n var shadowMaps = frameState.shadowState.shadowMaps;\n var shadowsEnabled = frameState.shadowState.shadowsEnabled;\n if (shadowsEnabled && command.castShadows) {\n derivedCommands.shadows = ShadowMap.createCastDerivedCommand(\n shadowMaps,\n command,\n shadowsDirty,\n context,\n derivedCommands.shadows\n );\n }\n\n if (hasLogDepthDerivedCommands || needsLogDepthDerivedCommands) {\n derivedCommands.logDepth = DerivedCommand.createLogDepthCommand(\n command,\n context,\n derivedCommands.logDepth\n );\n updateDerivedCommands(\n this,\n derivedCommands.logDepth.command,\n shadowsDirty\n );\n }\n if (hasDerivedCommands || needsDerivedCommands) {\n updateDerivedCommands(this, command, shadowsDirty);\n }\n }\n};\n\nvar renderTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.RENDER,\n});\n\nvar preloadTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.PRELOAD,\n});\n\nvar preloadFlightTilesetPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.PRELOAD_FLIGHT,\n});\n\nvar requestRenderModeDeferCheckPassState = new Cesium3DTilePassState({\n pass: Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK,\n});\n\nvar scratchOccluderBoundingSphere = new BoundingSphere();\nvar scratchOccluder;\n\nfunction getOccluder(scene) {\n // TODO: The occluder is the top-level globe. When we add\n // support for multiple central bodies, this should be the closest one.\n var globe = scene.globe;\n if (\n scene._mode === SceneMode.SCENE3D &&\n defined(globe) &&\n globe.show &&\n !scene._cameraUnderground &&\n !scene._globeTranslucencyState.translucent\n ) {\n var ellipsoid = globe.ellipsoid;\n var minimumTerrainHeight = scene.frameState.minimumTerrainHeight;\n scratchOccluderBoundingSphere.radius =\n ellipsoid.minimumRadius + minimumTerrainHeight;\n scratchOccluder = Occluder.fromBoundingSphere(\n scratchOccluderBoundingSphere,\n scene.camera.positionWC,\n scratchOccluder\n );\n return scratchOccluder;\n }\n\n return undefined;\n}\n\n/**\n * @private\n */\nScene.prototype.clearPasses = function (passes) {\n passes.render = false;\n passes.pick = false;\n passes.depth = false;\n passes.postProcess = false;\n passes.offscreen = false;\n};\n\nfunction updateFrameNumber(scene, frameNumber, time) {\n var frameState = scene._frameState;\n frameState.frameNumber = frameNumber;\n frameState.time = JulianDate.clone(time, frameState.time);\n}\n\n/**\n * @private\n */\nScene.prototype.updateFrameState = function () {\n var camera = this.camera;\n\n var frameState = this._frameState;\n frameState.commandList.length = 0;\n frameState.shadowMaps.length = 0;\n frameState.brdfLutGenerator = this._brdfLutGenerator;\n frameState.environmentMap = this.skyBox && this.skyBox._cubeMap;\n frameState.mode = this._mode;\n frameState.morphTime = this.morphTime;\n frameState.mapProjection = this.mapProjection;\n frameState.camera = camera;\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n frameState.occluder = getOccluder(this);\n frameState.terrainExaggeration = this._terrainExaggeration;\n frameState.minimumTerrainHeight = 0.0;\n frameState.minimumDisableDepthTestDistance = this._minimumDisableDepthTestDistance;\n frameState.invertClassification = this.invertClassification;\n frameState.useLogDepth =\n this._logDepthBuffer &&\n !(\n this.camera.frustum instanceof OrthographicFrustum ||\n this.camera.frustum instanceof OrthographicOffCenterFrustum\n );\n frameState.light = this.light;\n frameState.cameraUnderground = this._cameraUnderground;\n frameState.globeTranslucencyState = this._globeTranslucencyState;\n\n if (\n defined(this._specularEnvironmentMapAtlas) &&\n this._specularEnvironmentMapAtlas.ready\n ) {\n frameState.specularEnvironmentMaps = this._specularEnvironmentMapAtlas.texture;\n frameState.specularEnvironmentMapsMaximumLOD = this._specularEnvironmentMapAtlas.maximumMipmapLevel;\n } else {\n frameState.specularEnvironmentMaps = undefined;\n frameState.specularEnvironmentMapsMaximumLOD = undefined;\n }\n\n frameState.sphericalHarmonicCoefficients = this.sphericalHarmonicCoefficients;\n\n this._actualInvertClassificationColor = Color.clone(\n this.invertClassificationColor,\n this._actualInvertClassificationColor\n );\n if (!InvertClassification.isTranslucencySupported(this._context)) {\n this._actualInvertClassificationColor.alpha = 1.0;\n }\n\n frameState.invertClassificationColor = this._actualInvertClassificationColor;\n\n if (defined(this.globe)) {\n frameState.maximumScreenSpaceError = this.globe.maximumScreenSpaceError;\n } else {\n frameState.maximumScreenSpaceError = 2;\n }\n\n this.clearPasses(frameState.passes);\n\n frameState.tilesetPassState = undefined;\n};\n\n/**\n * @private\n */\nScene.prototype.isVisible = function (command, cullingVolume, occluder) {\n return (\n defined(command) &&\n (!defined(command.boundingVolume) ||\n !command.cull ||\n (cullingVolume.computeVisibility(command.boundingVolume) !==\n Intersect.OUTSIDE &&\n (!defined(occluder) ||\n !command.occlude ||\n !command.boundingVolume.isOccluded(occluder))))\n );\n};\n\nfunction getAttributeLocations(shaderProgram) {\n var attributeLocations = {};\n var attributes = shaderProgram.vertexAttributes;\n for (var a in attributes) {\n if (attributes.hasOwnProperty(a)) {\n attributeLocations[a] = attributes[a].index;\n }\n }\n\n return attributeLocations;\n}\n\nfunction createDebugFragmentShaderProgram(command, scene, shaderProgram) {\n var context = scene.context;\n var sp = defaultValue(shaderProgram, command.shaderProgram);\n var fs = sp.fragmentShaderSource.clone();\n\n var targets = [];\n fs.sources = fs.sources.map(function (source) {\n source = ShaderSource.replaceMain(source, \"czm_Debug_main\");\n var re = /gl_FragData\\[(\\d+)\\]/g;\n var match;\n while ((match = re.exec(source)) !== null) {\n if (targets.indexOf(match[1]) === -1) {\n targets.push(match[1]);\n }\n }\n return source;\n });\n var length = targets.length;\n\n var newMain = \"void main() \\n\" + \"{ \\n\" + \" czm_Debug_main(); \\n\";\n\n var i;\n if (scene.debugShowCommands) {\n if (!defined(command._debugColor)) {\n command._debugColor = Color.fromRandom();\n }\n var c = command._debugColor;\n if (length > 0) {\n for (i = 0; i < length; ++i) {\n newMain +=\n \" gl_FragData[\" +\n targets[i] +\n \"].rgb *= vec3(\" +\n c.red +\n \", \" +\n c.green +\n \", \" +\n c.blue +\n \"); \\n\";\n }\n } else {\n newMain +=\n \" \" +\n \"gl_FragColor\" +\n \".rgb *= vec3(\" +\n c.red +\n \", \" +\n c.green +\n \", \" +\n c.blue +\n \"); \\n\";\n }\n }\n\n if (scene.debugShowFrustums) {\n // Support up to three frustums. If a command overlaps all\n // three, it's code is not changed.\n var r = command.debugOverlappingFrustums & (1 << 0) ? \"1.0\" : \"0.0\";\n var g = command.debugOverlappingFrustums & (1 << 1) ? \"1.0\" : \"0.0\";\n var b = command.debugOverlappingFrustums & (1 << 2) ? \"1.0\" : \"0.0\";\n if (length > 0) {\n for (i = 0; i < length; ++i) {\n newMain +=\n \" gl_FragData[\" +\n targets[i] +\n \"].rgb *= vec3(\" +\n r +\n \", \" +\n g +\n \", \" +\n b +\n \"); \\n\";\n }\n } else {\n newMain +=\n \" \" +\n \"gl_FragColor\" +\n \".rgb *= vec3(\" +\n r +\n \", \" +\n g +\n \", \" +\n b +\n \"); \\n\";\n }\n }\n\n newMain += \"}\";\n\n fs.sources.push(newMain);\n\n var attributeLocations = getAttributeLocations(sp);\n\n return ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: sp.vertexShaderSource,\n fragmentShaderSource: fs,\n attributeLocations: attributeLocations,\n });\n}\n\nfunction executeDebugCommand(command, scene, passState) {\n var debugCommand = DrawCommand.shallowClone(command);\n debugCommand.shaderProgram = createDebugFragmentShaderProgram(command, scene);\n debugCommand.execute(scene.context, passState);\n debugCommand.shaderProgram.destroy();\n}\n\nvar transformFrom2D = new Matrix4(\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 1.0\n);\ntransformFrom2D = Matrix4.inverseTransformation(\n transformFrom2D,\n transformFrom2D\n);\n\nfunction debugShowBoundingVolume(command, scene, passState, debugFramebuffer) {\n // Debug code to draw bounding volume for command. Not optimized!\n // Assumes bounding volume is a bounding sphere or box\n var frameState = scene._frameState;\n var context = frameState.context;\n var boundingVolume = command.boundingVolume;\n\n if (defined(scene._debugVolume)) {\n scene._debugVolume.destroy();\n }\n\n var geometry;\n\n var center = Cartesian3.clone(boundingVolume.center);\n if (frameState.mode !== SceneMode.SCENE3D) {\n center = Matrix4.multiplyByPoint(transformFrom2D, center, center);\n var projection = frameState.mapProjection;\n var centerCartographic = projection.unproject(center);\n center = projection.ellipsoid.cartographicToCartesian(centerCartographic);\n }\n\n if (defined(boundingVolume.radius)) {\n var radius = boundingVolume.radius;\n\n geometry = GeometryPipeline.toWireframe(\n EllipsoidGeometry.createGeometry(\n new EllipsoidGeometry({\n radii: new Cartesian3(radius, radius, radius),\n vertexFormat: PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,\n })\n )\n );\n\n scene._debugVolume = new Primitive({\n geometryInstances: new GeometryInstance({\n geometry: geometry,\n modelMatrix: Matrix4.fromTranslation(center),\n attributes: {\n color: new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0),\n },\n }),\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: false,\n }),\n asynchronous: false,\n });\n } else {\n var halfAxes = boundingVolume.halfAxes;\n\n geometry = GeometryPipeline.toWireframe(\n BoxGeometry.createGeometry(\n BoxGeometry.fromDimensions({\n dimensions: new Cartesian3(2.0, 2.0, 2.0),\n vertexFormat: PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,\n })\n )\n );\n\n scene._debugVolume = new Primitive({\n geometryInstances: new GeometryInstance({\n geometry: geometry,\n modelMatrix: Matrix4.fromRotationTranslation(\n halfAxes,\n center,\n new Matrix4()\n ),\n attributes: {\n color: new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0),\n },\n }),\n appearance: new PerInstanceColorAppearance({\n flat: true,\n translucent: false,\n }),\n asynchronous: false,\n });\n }\n\n var savedCommandList = frameState.commandList;\n var commandList = (frameState.commandList = []);\n scene._debugVolume.update(frameState);\n\n command = commandList[0];\n\n if (frameState.useLogDepth) {\n var logDepth = DerivedCommand.createLogDepthCommand(command, context);\n command = logDepth.command;\n }\n\n var framebuffer;\n if (defined(debugFramebuffer)) {\n framebuffer = passState.framebuffer;\n passState.framebuffer = debugFramebuffer;\n }\n\n command.execute(context, passState);\n\n if (defined(framebuffer)) {\n passState.framebuffer = framebuffer;\n }\n\n frameState.commandList = savedCommandList;\n}\n\nfunction executeCommand(command, scene, context, passState, debugFramebuffer) {\n var frameState = scene._frameState;\n\n if (defined(scene.debugCommandFilter) && !scene.debugCommandFilter(command)) {\n return;\n }\n\n if (command instanceof ClearCommand) {\n command.execute(context, passState);\n return;\n }\n\n if (command.debugShowBoundingVolume && defined(command.boundingVolume)) {\n debugShowBoundingVolume(command, scene, passState, debugFramebuffer);\n }\n\n if (frameState.useLogDepth && defined(command.derivedCommands.logDepth)) {\n command = command.derivedCommands.logDepth.command;\n }\n\n var passes = frameState.passes;\n if (\n !passes.pick &&\n !passes.depth &&\n scene._hdr &&\n defined(command.derivedCommands) &&\n defined(command.derivedCommands.hdr)\n ) {\n command = command.derivedCommands.hdr.command;\n }\n\n if (passes.pick || passes.depth) {\n if (\n passes.pick &&\n !passes.depth &&\n defined(command.derivedCommands.picking)\n ) {\n command = command.derivedCommands.picking.pickCommand;\n command.execute(context, passState);\n return;\n } else if (defined(command.derivedCommands.depth)) {\n command = command.derivedCommands.depth.depthOnlyCommand;\n command.execute(context, passState);\n return;\n }\n }\n\n if (scene.debugShowCommands || scene.debugShowFrustums) {\n executeDebugCommand(command, scene, passState);\n return;\n }\n\n if (\n frameState.shadowState.lightShadowsEnabled &&\n command.receiveShadows &&\n defined(command.derivedCommands.shadows)\n ) {\n // If the command receives shadows, execute the derived shadows command.\n // Some commands, such as OIT derived commands, do not have derived shadow commands themselves\n // and instead shadowing is built-in. In this case execute the command regularly below.\n command.derivedCommands.shadows.receiveCommand.execute(context, passState);\n } else {\n command.execute(context, passState);\n }\n}\n\nfunction executeIdCommand(command, scene, context, passState) {\n var frameState = scene._frameState;\n var derivedCommands = command.derivedCommands;\n if (!defined(derivedCommands)) {\n return;\n }\n\n if (frameState.useLogDepth && defined(derivedCommands.logDepth)) {\n command = derivedCommands.logDepth.command;\n }\n\n derivedCommands = command.derivedCommands;\n if (defined(derivedCommands.picking)) {\n command = derivedCommands.picking.pickCommand;\n command.execute(context, passState);\n } else if (defined(derivedCommands.depth)) {\n command = derivedCommands.depth.depthOnlyCommand;\n command.execute(context, passState);\n }\n}\n\nfunction backToFront(a, b, position) {\n return (\n b.boundingVolume.distanceSquaredTo(position) -\n a.boundingVolume.distanceSquaredTo(position)\n );\n}\n\nfunction frontToBack(a, b, position) {\n // When distances are equal equal favor sorting b before a. This gives render priority to commands later in the list.\n return (\n a.boundingVolume.distanceSquaredTo(position) -\n b.boundingVolume.distanceSquaredTo(position) +\n CesiumMath.EPSILON12\n );\n}\n\nfunction executeTranslucentCommandsBackToFront(\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n) {\n var context = scene.context;\n\n mergeSort(commands, backToFront, scene.camera.positionWC);\n\n if (defined(invertClassification)) {\n executeFunction(\n invertClassification.unclassifiedCommand,\n scene,\n context,\n passState\n );\n }\n\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n executeFunction(commands[i], scene, context, passState);\n }\n}\n\nfunction executeTranslucentCommandsFrontToBack(\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n) {\n var context = scene.context;\n\n mergeSort(commands, frontToBack, scene.camera.positionWC);\n\n if (defined(invertClassification)) {\n executeFunction(\n invertClassification.unclassifiedCommand,\n scene,\n context,\n passState\n );\n }\n\n var length = commands.length;\n for (var i = 0; i < length; ++i) {\n executeFunction(commands[i], scene, context, passState);\n }\n}\n\nfunction getDebugGlobeDepth(scene, index) {\n var globeDepths = scene._view.debugGlobeDepths;\n var globeDepth = globeDepths[index];\n if (!defined(globeDepth) && scene.context.depthTexture) {\n globeDepth = new GlobeDepth();\n globeDepths[index] = globeDepth;\n }\n return globeDepth;\n}\n\nvar scratchPerspectiveFrustum = new PerspectiveFrustum();\nvar scratchPerspectiveOffCenterFrustum = new PerspectiveOffCenterFrustum();\nvar scratchOrthographicFrustum = new OrthographicFrustum();\nvar scratchOrthographicOffCenterFrustum = new OrthographicOffCenterFrustum();\n\nfunction executeCommands(scene, passState) {\n var camera = scene.camera;\n var context = scene.context;\n var frameState = scene.frameState;\n var us = context.uniformState;\n\n us.updateCamera(camera);\n\n // Create a working frustum from the original camera frustum.\n var frustum;\n if (defined(camera.frustum.fov)) {\n frustum = camera.frustum.clone(scratchPerspectiveFrustum);\n } else if (defined(camera.frustum.infiniteProjectionMatrix)) {\n frustum = camera.frustum.clone(scratchPerspectiveOffCenterFrustum);\n } else if (defined(camera.frustum.width)) {\n frustum = camera.frustum.clone(scratchOrthographicFrustum);\n } else {\n frustum = camera.frustum.clone(scratchOrthographicOffCenterFrustum);\n }\n\n // Ideally, we would render the sky box and atmosphere last for\n // early-z, but we would have to draw it in each frustum\n frustum.near = camera.frustum.near;\n frustum.far = camera.frustum.far;\n us.updateFrustum(frustum);\n us.updatePass(Pass.ENVIRONMENT);\n\n var passes = frameState.passes;\n var picking = passes.pick;\n var environmentState = scene._environmentState;\n var view = scene._view;\n var renderTranslucentDepthForPick =\n environmentState.renderTranslucentDepthForPick;\n var useWebVR = environmentState.useWebVR;\n\n // Do not render environment primitives during a pick pass since they do not generate picking commands.\n if (!picking) {\n var skyBoxCommand = environmentState.skyBoxCommand;\n if (defined(skyBoxCommand)) {\n executeCommand(skyBoxCommand, scene, context, passState);\n }\n\n if (environmentState.isSkyAtmosphereVisible) {\n executeCommand(\n environmentState.skyAtmosphereCommand,\n scene,\n context,\n passState\n );\n }\n\n if (environmentState.isSunVisible) {\n environmentState.sunDrawCommand.execute(context, passState);\n if (scene.sunBloom && !useWebVR) {\n var framebuffer;\n if (environmentState.useGlobeDepthFramebuffer) {\n framebuffer = view.globeDepth.framebuffer;\n } else if (environmentState.usePostProcess) {\n framebuffer = view.sceneFramebuffer.getFramebuffer();\n } else {\n framebuffer = environmentState.originalFramebuffer;\n }\n scene._sunPostProcess.execute(context);\n scene._sunPostProcess.copy(context, framebuffer);\n passState.framebuffer = framebuffer;\n }\n }\n\n // Moon can be seen through the atmosphere, since the sun is rendered after the atmosphere.\n if (environmentState.isMoonVisible) {\n environmentState.moonCommand.execute(context, passState);\n }\n }\n\n // Determine how translucent surfaces will be handled.\n var executeTranslucentCommands;\n if (environmentState.useOIT) {\n if (!defined(scene._executeOITFunction)) {\n scene._executeOITFunction = function (\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n ) {\n view.oit.executeCommands(\n scene,\n executeFunction,\n passState,\n commands,\n invertClassification\n );\n };\n }\n executeTranslucentCommands = scene._executeOITFunction;\n } else if (passes.render) {\n executeTranslucentCommands = executeTranslucentCommandsBackToFront;\n } else {\n executeTranslucentCommands = executeTranslucentCommandsFrontToBack;\n }\n\n var frustumCommandsList = view.frustumCommandsList;\n var numFrustums = frustumCommandsList.length;\n\n var clearGlobeDepth = environmentState.clearGlobeDepth;\n var useDepthPlane = environmentState.useDepthPlane;\n var globeTranslucencyState = scene._globeTranslucencyState;\n var globeTranslucent = globeTranslucencyState.translucent;\n var globeTranslucencyFramebuffer = scene._view.globeTranslucencyFramebuffer;\n var separatePrimitiveFramebuffer = (environmentState.separatePrimitiveFramebuffer = false);\n var clearDepth = scene._depthClearCommand;\n var clearStencil = scene._stencilClearCommand;\n var clearClassificationStencil = scene._classificationStencilClearCommand;\n var depthPlane = scene._depthPlane;\n var usePostProcessSelected = environmentState.usePostProcessSelected;\n\n var height2D = camera.position.z;\n\n // Execute commands in each frustum in back to front order\n var j;\n for (var i = 0; i < numFrustums; ++i) {\n var index = numFrustums - i - 1;\n var frustumCommands = frustumCommandsList[index];\n\n if (scene.mode === SceneMode.SCENE2D) {\n // To avoid z-fighting in 2D, move the camera to just before the frustum\n // and scale the frustum depth to be in [1.0, nearToFarDistance2D].\n camera.position.z = height2D - frustumCommands.near + 1.0;\n frustum.far = Math.max(1.0, frustumCommands.far - frustumCommands.near);\n frustum.near = 1.0;\n us.update(frameState);\n us.updateFrustum(frustum);\n } else {\n // Avoid tearing artifacts between adjacent frustums in the opaque passes\n frustum.near =\n index !== 0\n ? frustumCommands.near * scene.opaqueFrustumNearOffset\n : frustumCommands.near;\n frustum.far = frustumCommands.far;\n us.updateFrustum(frustum);\n }\n\n var globeDepth = scene.debugShowGlobeDepth\n ? getDebugGlobeDepth(scene, index)\n : view.globeDepth;\n\n if (separatePrimitiveFramebuffer) {\n // Render to globe framebuffer in GLOBE pass\n passState.framebuffer = globeDepth.framebuffer;\n }\n\n var fb;\n if (\n scene.debugShowGlobeDepth &&\n defined(globeDepth) &&\n environmentState.useGlobeDepthFramebuffer\n ) {\n globeDepth.update(\n context,\n passState,\n view.viewport,\n scene._hdr,\n clearGlobeDepth\n );\n globeDepth.clear(context, passState, scene._clearColorCommand.color);\n fb = passState.framebuffer;\n passState.framebuffer = globeDepth.framebuffer;\n }\n\n clearDepth.execute(context, passState);\n\n if (context.stencilBuffer) {\n clearStencil.execute(context, passState);\n }\n\n us.updatePass(Pass.GLOBE);\n var commands = frustumCommands.commands[Pass.GLOBE];\n var length = frustumCommands.indices[Pass.GLOBE];\n\n if (globeTranslucent) {\n globeTranslucencyState.executeGlobeCommands(\n frustumCommands,\n executeCommand,\n globeTranslucencyFramebuffer,\n scene,\n passState\n );\n } else {\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n }\n\n if (defined(globeDepth) && environmentState.useGlobeDepthFramebuffer) {\n globeDepth.executeCopyDepth(context, passState);\n }\n\n if (\n scene.debugShowGlobeDepth &&\n defined(globeDepth) &&\n environmentState.useGlobeDepthFramebuffer\n ) {\n passState.framebuffer = fb;\n }\n\n // Draw terrain classification\n if (!environmentState.renderTranslucentDepthForPick) {\n us.updatePass(Pass.TERRAIN_CLASSIFICATION);\n commands = frustumCommands.commands[Pass.TERRAIN_CLASSIFICATION];\n length = frustumCommands.indices[Pass.TERRAIN_CLASSIFICATION];\n\n if (globeTranslucent) {\n globeTranslucencyState.executeGlobeClassificationCommands(\n frustumCommands,\n executeCommand,\n globeTranslucencyFramebuffer,\n scene,\n passState\n );\n } else {\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n }\n }\n\n if (clearGlobeDepth) {\n clearDepth.execute(context, passState);\n if (useDepthPlane) {\n depthPlane.execute(context, passState);\n }\n }\n\n if (separatePrimitiveFramebuffer) {\n // Render to primitive framebuffer in all other passes\n passState.framebuffer = globeDepth.primitiveFramebuffer;\n }\n\n if (\n !environmentState.useInvertClassification ||\n picking ||\n environmentState.renderTranslucentDepthForPick\n ) {\n // Common/fastest path. Draw 3D Tiles and classification normally.\n\n // Draw 3D Tiles\n us.updatePass(Pass.CESIUM_3D_TILE);\n commands = frustumCommands.commands[Pass.CESIUM_3D_TILE];\n length = frustumCommands.indices[Pass.CESIUM_3D_TILE];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n\n if (length > 0) {\n if (defined(globeDepth) && environmentState.useGlobeDepthFramebuffer) {\n globeDepth.executeUpdateDepth(context, passState, clearGlobeDepth);\n }\n\n // Draw classifications. Modifies 3D Tiles color.\n if (!environmentState.renderTranslucentDepthForPick) {\n us.updatePass(Pass.CESIUM_3D_TILE_CLASSIFICATION);\n commands =\n frustumCommands.commands[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n length = frustumCommands.indices[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n }\n }\n } else {\n // When the invert classification color is opaque:\n // Main FBO (FBO1): Main_Color + Main_DepthStencil\n // Invert classification FBO (FBO2) : Invert_Color + Main_DepthStencil\n //\n // 1. Clear FBO2 color to vec4(0.0) for each frustum\n // 2. Draw 3D Tiles to FBO2\n // 3. Draw classification to FBO2\n // 4. Fullscreen pass to FBO1, draw Invert_Color when:\n // * Main_DepthStencil has the stencil bit set > 0 (classified)\n // 5. Fullscreen pass to FBO1, draw Invert_Color * czm_invertClassificationColor when:\n // * Main_DepthStencil has stencil bit set to 0 (unclassified) and\n // * Invert_Color !== vec4(0.0)\n //\n // When the invert classification color is translucent:\n // Main FBO (FBO1): Main_Color + Main_DepthStencil\n // Invert classification FBO (FBO2): Invert_Color + Invert_DepthStencil\n // IsClassified FBO (FBO3): IsClassified_Color + Invert_DepthStencil\n //\n // 1. Clear FBO2 and FBO3 color to vec4(0.0), stencil to 0, and depth to 1.0\n // 2. Draw 3D Tiles to FBO2\n // 3. Draw classification to FBO2\n // 4. Fullscreen pass to FBO3, draw any color when\n // * Invert_DepthStencil has the stencil bit set > 0 (classified)\n // 5. Fullscreen pass to FBO1, draw Invert_Color when:\n // * Invert_Color !== vec4(0.0) and\n // * IsClassified_Color !== vec4(0.0)\n // 6. Fullscreen pass to FBO1, draw Invert_Color * czm_invertClassificationColor when:\n // * Invert_Color !== vec4(0.0) and\n // * IsClassified_Color === vec4(0.0)\n //\n // NOTE: Step six when translucent invert color occurs after the TRANSLUCENT pass\n //\n scene._invertClassification.clear(context, passState);\n\n var opaqueClassificationFramebuffer = passState.framebuffer;\n passState.framebuffer = scene._invertClassification._fbo;\n\n // Draw normally\n us.updatePass(Pass.CESIUM_3D_TILE);\n commands = frustumCommands.commands[Pass.CESIUM_3D_TILE];\n length = frustumCommands.indices[Pass.CESIUM_3D_TILE];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n\n if (defined(globeDepth) && environmentState.useGlobeDepthFramebuffer) {\n globeDepth.executeUpdateDepth(context, passState, clearGlobeDepth);\n }\n\n // Set stencil\n us.updatePass(Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW);\n commands =\n frustumCommands.commands[\n Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW\n ];\n length =\n frustumCommands.indices[Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n\n passState.framebuffer = opaqueClassificationFramebuffer;\n\n // Fullscreen pass to copy classified fragments\n scene._invertClassification.executeClassified(context, passState);\n if (frameState.invertClassificationColor.alpha === 1.0) {\n // Fullscreen pass to copy unclassified fragments when alpha == 1.0\n scene._invertClassification.executeUnclassified(context, passState);\n }\n\n // Clear stencil set by the classification for the next classification pass\n if (length > 0 && context.stencilBuffer) {\n clearClassificationStencil.execute(context, passState);\n }\n\n // Draw style over classification.\n us.updatePass(Pass.CESIUM_3D_TILE_CLASSIFICATION);\n commands = frustumCommands.commands[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n length = frustumCommands.indices[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n }\n\n if (length > 0 && context.stencilBuffer) {\n clearStencil.execute(context, passState);\n }\n\n us.updatePass(Pass.OPAQUE);\n commands = frustumCommands.commands[Pass.OPAQUE];\n length = frustumCommands.indices[Pass.OPAQUE];\n for (j = 0; j < length; ++j) {\n executeCommand(commands[j], scene, context, passState);\n }\n\n if (index !== 0 && scene.mode !== SceneMode.SCENE2D) {\n // Do not overlap frustums in the translucent pass to avoid blending artifacts\n frustum.near = frustumCommands.near;\n us.updateFrustum(frustum);\n }\n\n var invertClassification;\n if (\n !picking &&\n environmentState.useInvertClassification &&\n frameState.invertClassificationColor.alpha < 1.0\n ) {\n // Fullscreen pass to copy unclassified fragments when alpha < 1.0.\n // Not executed when undefined.\n invertClassification = scene._invertClassification;\n }\n\n us.updatePass(Pass.TRANSLUCENT);\n commands = frustumCommands.commands[Pass.TRANSLUCENT];\n commands.length = frustumCommands.indices[Pass.TRANSLUCENT];\n executeTranslucentCommands(\n scene,\n executeCommand,\n passState,\n commands,\n invertClassification\n );\n\n if (\n context.depthTexture &&\n scene.useDepthPicking &&\n (environmentState.useGlobeDepthFramebuffer ||\n renderTranslucentDepthForPick)\n ) {\n // PERFORMANCE_IDEA: Use MRT to avoid the extra copy.\n var depthStencilTexture = renderTranslucentDepthForPick\n ? passState.framebuffer.depthStencilTexture\n : globeDepth.framebuffer.depthStencilTexture;\n var pickDepth = scene._picking.getPickDepth(scene, index);\n pickDepth.update(context, depthStencilTexture);\n pickDepth.executeCopyDepth(context, passState);\n }\n\n if (separatePrimitiveFramebuffer) {\n // Reset framebuffer\n passState.framebuffer = globeDepth.framebuffer;\n }\n\n if (picking || !usePostProcessSelected) {\n continue;\n }\n\n var originalFramebuffer = passState.framebuffer;\n passState.framebuffer = view.sceneFramebuffer.getIdFramebuffer();\n\n // reset frustum\n frustum.near =\n index !== 0\n ? frustumCommands.near * scene.opaqueFrustumNearOffset\n : frustumCommands.near;\n frustum.far = frustumCommands.far;\n us.updateFrustum(frustum);\n\n us.updatePass(Pass.GLOBE);\n commands = frustumCommands.commands[Pass.GLOBE];\n length = frustumCommands.indices[Pass.GLOBE];\n\n if (globeTranslucent) {\n globeTranslucencyState.executeGlobeCommands(\n frustumCommands,\n executeIdCommand,\n globeTranslucencyFramebuffer,\n scene,\n passState\n );\n } else {\n for (j = 0; j < length; ++j) {\n executeIdCommand(commands[j], scene, context, passState);\n }\n }\n\n if (clearGlobeDepth) {\n clearDepth.framebuffer = passState.framebuffer;\n clearDepth.execute(context, passState);\n clearDepth.framebuffer = undefined;\n }\n\n if (clearGlobeDepth && useDepthPlane) {\n depthPlane.execute(context, passState);\n }\n\n us.updatePass(Pass.CESIUM_3D_TILE);\n commands = frustumCommands.commands[Pass.CESIUM_3D_TILE];\n length = frustumCommands.indices[Pass.CESIUM_3D_TILE];\n for (j = 0; j < length; ++j) {\n executeIdCommand(commands[j], scene, context, passState);\n }\n\n us.updatePass(Pass.OPAQUE);\n commands = frustumCommands.commands[Pass.OPAQUE];\n length = frustumCommands.indices[Pass.OPAQUE];\n for (j = 0; j < length; ++j) {\n executeIdCommand(commands[j], scene, context, passState);\n }\n\n us.updatePass(Pass.TRANSLUCENT);\n commands = frustumCommands.commands[Pass.TRANSLUCENT];\n length = frustumCommands.indices[Pass.TRANSLUCENT];\n for (j = 0; j < length; ++j) {\n executeIdCommand(commands[j], scene, context, passState);\n }\n\n passState.framebuffer = originalFramebuffer;\n }\n}\n\nfunction executeComputeCommands(scene) {\n var us = scene.context.uniformState;\n us.updatePass(Pass.COMPUTE);\n\n var sunComputeCommand = scene._environmentState.sunComputeCommand;\n if (defined(sunComputeCommand)) {\n sunComputeCommand.execute(scene._computeEngine);\n }\n\n var commandList = scene._computeCommandList;\n var length = commandList.length;\n for (var i = 0; i < length; ++i) {\n commandList[i].execute(scene._computeEngine);\n }\n}\n\nfunction executeOverlayCommands(scene, passState) {\n var us = scene.context.uniformState;\n us.updatePass(Pass.OVERLAY);\n\n var context = scene.context;\n var commandList = scene._overlayCommandList;\n var length = commandList.length;\n for (var i = 0; i < length; ++i) {\n commandList[i].execute(context, passState);\n }\n}\n\nfunction insertShadowCastCommands(scene, commandList, shadowMap) {\n var shadowVolume = shadowMap.shadowMapCullingVolume;\n var isPointLight = shadowMap.isPointLight;\n var passes = shadowMap.passes;\n var numberOfPasses = passes.length;\n\n var length = commandList.length;\n for (var i = 0; i < length; ++i) {\n var command = commandList[i];\n scene.updateDerivedCommands(command);\n\n if (\n command.castShadows &&\n (command.pass === Pass.GLOBE ||\n command.pass === Pass.CESIUM_3D_TILE ||\n command.pass === Pass.OPAQUE ||\n command.pass === Pass.TRANSLUCENT)\n ) {\n if (scene.isVisible(command, shadowVolume)) {\n if (isPointLight) {\n for (var k = 0; k < numberOfPasses; ++k) {\n passes[k].commandList.push(command);\n }\n } else if (numberOfPasses === 1) {\n passes[0].commandList.push(command);\n } else {\n var wasVisible = false;\n // Loop over cascades from largest to smallest\n for (var j = numberOfPasses - 1; j >= 0; --j) {\n var cascadeVolume = passes[j].cullingVolume;\n if (scene.isVisible(command, cascadeVolume)) {\n passes[j].commandList.push(command);\n wasVisible = true;\n } else if (wasVisible) {\n // If it was visible in the previous cascade but now isn't\n // then there is no need to check any more cascades\n break;\n }\n }\n }\n }\n }\n }\n}\n\nfunction executeShadowMapCastCommands(scene) {\n var frameState = scene.frameState;\n var shadowMaps = frameState.shadowState.shadowMaps;\n var shadowMapLength = shadowMaps.length;\n\n if (!frameState.shadowState.shadowsEnabled) {\n return;\n }\n\n var context = scene.context;\n var uniformState = context.uniformState;\n\n for (var i = 0; i < shadowMapLength; ++i) {\n var shadowMap = shadowMaps[i];\n if (shadowMap.outOfView) {\n continue;\n }\n\n // Reset the command lists\n var j;\n var passes = shadowMap.passes;\n var numberOfPasses = passes.length;\n for (j = 0; j < numberOfPasses; ++j) {\n passes[j].commandList.length = 0;\n }\n\n // Insert the primitive/model commands into the command lists\n var sceneCommands = scene.frameState.commandList;\n insertShadowCastCommands(scene, sceneCommands, shadowMap);\n\n for (j = 0; j < numberOfPasses; ++j) {\n var pass = shadowMap.passes[j];\n uniformState.updateCamera(pass.camera);\n shadowMap.updatePass(context, j);\n var numberOfCommands = pass.commandList.length;\n for (var k = 0; k < numberOfCommands; ++k) {\n var command = pass.commandList[k];\n // Set the correct pass before rendering into the shadow map because some shaders\n // conditionally render based on whether the pass is translucent or opaque.\n uniformState.updatePass(command.pass);\n executeCommand(\n command.derivedCommands.shadows.castCommands[i],\n scene,\n context,\n pass.passState\n );\n }\n }\n }\n}\n\nvar scratchEyeTranslation = new Cartesian3();\n\n/**\n * @private\n */\nScene.prototype.updateAndExecuteCommands = function (\n passState,\n backgroundColor\n) {\n var frameState = this._frameState;\n var mode = frameState.mode;\n var useWebVR = this._environmentState.useWebVR;\n\n if (useWebVR) {\n executeWebVRCommands(this, passState, backgroundColor);\n } else if (\n mode !== SceneMode.SCENE2D ||\n this._mapMode2D === MapMode2D.ROTATE\n ) {\n executeCommandsInViewport(true, this, passState, backgroundColor);\n } else {\n updateAndClearFramebuffers(this, passState, backgroundColor);\n execute2DViewportCommands(this, passState);\n }\n};\n\nfunction executeWebVRCommands(scene, passState, backgroundColor) {\n var view = scene._view;\n var camera = view.camera;\n var environmentState = scene._environmentState;\n var renderTranslucentDepthForPick =\n environmentState.renderTranslucentDepthForPick;\n\n updateAndClearFramebuffers(scene, passState, backgroundColor);\n\n if (!renderTranslucentDepthForPick) {\n updateAndRenderPrimitives(scene);\n }\n\n view.createPotentiallyVisibleSet(scene);\n\n if (!renderTranslucentDepthForPick) {\n executeComputeCommands(scene);\n executeShadowMapCastCommands(scene);\n }\n\n // Based on Calculating Stereo pairs by Paul Bourke\n // http://paulbourke.net/stereographics/stereorender/\n var viewport = passState.viewport;\n viewport.x = 0;\n viewport.y = 0;\n viewport.width = viewport.width * 0.5;\n\n var savedCamera = Camera.clone(camera, scene._cameraVR);\n savedCamera.frustum = camera.frustum;\n\n var near = camera.frustum.near;\n var fo = near * defaultValue(scene.focalLength, 5.0);\n var eyeSeparation = defaultValue(scene.eyeSeparation, fo / 30.0);\n var eyeTranslation = Cartesian3.multiplyByScalar(\n savedCamera.right,\n eyeSeparation * 0.5,\n scratchEyeTranslation\n );\n\n camera.frustum.aspectRatio = viewport.width / viewport.height;\n\n var offset = (0.5 * eyeSeparation * near) / fo;\n\n Cartesian3.add(savedCamera.position, eyeTranslation, camera.position);\n camera.frustum.xOffset = offset;\n\n executeCommands(scene, passState);\n\n viewport.x = viewport.width;\n\n Cartesian3.subtract(savedCamera.position, eyeTranslation, camera.position);\n camera.frustum.xOffset = -offset;\n\n executeCommands(scene, passState);\n\n Camera.clone(savedCamera, camera);\n}\n\nvar scratch2DViewportCartographic = new Cartographic(\n Math.PI,\n CesiumMath.PI_OVER_TWO\n);\nvar scratch2DViewportMaxCoord = new Cartesian3();\nvar scratch2DViewportSavedPosition = new Cartesian3();\nvar scratch2DViewportTransform = new Matrix4();\nvar scratch2DViewportCameraTransform = new Matrix4();\nvar scratch2DViewportEyePoint = new Cartesian3();\nvar scratch2DViewportWindowCoords = new Cartesian3();\nvar scratch2DViewport = new BoundingRectangle();\n\nfunction execute2DViewportCommands(scene, passState) {\n var context = scene.context;\n var frameState = scene.frameState;\n var camera = scene.camera;\n\n var originalViewport = passState.viewport;\n var viewport = BoundingRectangle.clone(originalViewport, scratch2DViewport);\n passState.viewport = viewport;\n\n var maxCartographic = scratch2DViewportCartographic;\n var maxCoord = scratch2DViewportMaxCoord;\n\n var projection = scene.mapProjection;\n projection.project(maxCartographic, maxCoord);\n\n var position = Cartesian3.clone(\n camera.position,\n scratch2DViewportSavedPosition\n );\n var transform = Matrix4.clone(\n camera.transform,\n scratch2DViewportCameraTransform\n );\n var frustum = camera.frustum.clone();\n\n camera._setTransform(Matrix4.IDENTITY);\n\n var viewportTransformation = Matrix4.computeViewportTransformation(\n viewport,\n 0.0,\n 1.0,\n scratch2DViewportTransform\n );\n var projectionMatrix = camera.frustum.projectionMatrix;\n\n var x = camera.positionWC.y;\n var eyePoint = Cartesian3.fromElements(\n CesiumMath.sign(x) * maxCoord.x - x,\n 0.0,\n -camera.positionWC.x,\n scratch2DViewportEyePoint\n );\n var windowCoordinates = Transforms.pointToGLWindowCoordinates(\n projectionMatrix,\n viewportTransformation,\n eyePoint,\n scratch2DViewportWindowCoords\n );\n\n windowCoordinates.x = Math.floor(windowCoordinates.x);\n\n var viewportX = viewport.x;\n var viewportWidth = viewport.width;\n\n if (\n x === 0.0 ||\n windowCoordinates.x <= viewportX ||\n windowCoordinates.x >= viewportX + viewportWidth\n ) {\n executeCommandsInViewport(true, scene, passState);\n } else if (\n Math.abs(viewportX + viewportWidth * 0.5 - windowCoordinates.x) < 1.0\n ) {\n viewport.width = windowCoordinates.x - viewport.x;\n\n camera.position.x *= CesiumMath.sign(camera.position.x);\n\n camera.frustum.right = 0.0;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(true, scene, passState);\n\n viewport.x = windowCoordinates.x;\n\n camera.position.x = -camera.position.x;\n\n camera.frustum.right = -camera.frustum.left;\n camera.frustum.left = 0.0;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(false, scene, passState);\n } else if (windowCoordinates.x > viewportX + viewportWidth * 0.5) {\n viewport.width = windowCoordinates.x - viewportX;\n\n var right = camera.frustum.right;\n camera.frustum.right = maxCoord.x - x;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(true, scene, passState);\n\n viewport.x = windowCoordinates.x;\n viewport.width = viewportX + viewportWidth - windowCoordinates.x;\n\n camera.position.x = -camera.position.x;\n\n camera.frustum.left = -camera.frustum.right;\n camera.frustum.right = right - camera.frustum.right * 2.0;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(false, scene, passState);\n } else {\n viewport.x = windowCoordinates.x;\n viewport.width = viewportX + viewportWidth - windowCoordinates.x;\n\n var left = camera.frustum.left;\n camera.frustum.left = -maxCoord.x - x;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(true, scene, passState);\n\n viewport.x = viewportX;\n viewport.width = windowCoordinates.x - viewportX;\n\n camera.position.x = -camera.position.x;\n\n camera.frustum.right = -camera.frustum.left;\n camera.frustum.left = left - camera.frustum.left * 2.0;\n\n frameState.cullingVolume = camera.frustum.computeCullingVolume(\n camera.positionWC,\n camera.directionWC,\n camera.upWC\n );\n context.uniformState.update(frameState);\n\n executeCommandsInViewport(false, scene, passState);\n }\n\n camera._setTransform(transform);\n Cartesian3.clone(position, camera.position);\n camera.frustum = frustum.clone();\n passState.viewport = originalViewport;\n}\n\nfunction executeCommandsInViewport(\n firstViewport,\n scene,\n passState,\n backgroundColor\n) {\n var environmentState = scene._environmentState;\n var view = scene._view;\n var renderTranslucentDepthForPick =\n environmentState.renderTranslucentDepthForPick;\n\n if (!firstViewport && !renderTranslucentDepthForPick) {\n scene.frameState.commandList.length = 0;\n }\n\n if (!renderTranslucentDepthForPick) {\n updateAndRenderPrimitives(scene);\n }\n\n view.createPotentiallyVisibleSet(scene);\n\n if (firstViewport) {\n if (defined(backgroundColor)) {\n updateAndClearFramebuffers(scene, passState, backgroundColor);\n }\n if (!renderTranslucentDepthForPick) {\n executeComputeCommands(scene);\n executeShadowMapCastCommands(scene);\n }\n }\n\n executeCommands(scene, passState);\n}\n\nvar scratchCullingVolume = new CullingVolume();\n\n/**\n * @private\n */\nScene.prototype.updateEnvironment = function () {\n var frameState = this._frameState;\n var view = this._view;\n\n // Update celestial and terrestrial environment effects.\n var environmentState = this._environmentState;\n var renderPass = frameState.passes.render;\n var offscreenPass = frameState.passes.offscreen;\n var skyAtmosphere = this.skyAtmosphere;\n var globe = this.globe;\n var globeTranslucencyState = this._globeTranslucencyState;\n\n if (\n !renderPass ||\n (this._mode !== SceneMode.SCENE2D &&\n view.camera.frustum instanceof OrthographicFrustum) ||\n !globeTranslucencyState.environmentVisible\n ) {\n environmentState.skyAtmosphereCommand = undefined;\n environmentState.skyBoxCommand = undefined;\n environmentState.sunDrawCommand = undefined;\n environmentState.sunComputeCommand = undefined;\n environmentState.moonCommand = undefined;\n } else {\n if (defined(skyAtmosphere)) {\n if (defined(globe)) {\n skyAtmosphere.setDynamicAtmosphereColor(\n globe.enableLighting && globe.dynamicAtmosphereLighting,\n globe.dynamicAtmosphereLightingFromSun\n );\n environmentState.isReadyForAtmosphere =\n environmentState.isReadyForAtmosphere ||\n globe._surface._tilesToRender.length > 0;\n }\n environmentState.skyAtmosphereCommand = skyAtmosphere.update(\n frameState,\n globe\n );\n if (defined(environmentState.skyAtmosphereCommand)) {\n this.updateDerivedCommands(environmentState.skyAtmosphereCommand);\n }\n } else {\n environmentState.skyAtmosphereCommand = undefined;\n }\n\n environmentState.skyBoxCommand = defined(this.skyBox)\n ? this.skyBox.update(frameState, this._hdr)\n : undefined;\n var sunCommands = defined(this.sun)\n ? this.sun.update(frameState, view.passState, this._hdr)\n : undefined;\n environmentState.sunDrawCommand = defined(sunCommands)\n ? sunCommands.drawCommand\n : undefined;\n environmentState.sunComputeCommand = defined(sunCommands)\n ? sunCommands.computeCommand\n : undefined;\n environmentState.moonCommand = defined(this.moon)\n ? this.moon.update(frameState)\n : undefined;\n }\n\n var clearGlobeDepth = (environmentState.clearGlobeDepth =\n defined(globe) &&\n globe.show &&\n (!globe.depthTestAgainstTerrain || this.mode === SceneMode.SCENE2D));\n var useDepthPlane = (environmentState.useDepthPlane =\n clearGlobeDepth &&\n this.mode === SceneMode.SCENE3D &&\n globeTranslucencyState.useDepthPlane);\n if (useDepthPlane) {\n // Update the depth plane that is rendered in 3D when the primitives are\n // not depth tested against terrain so primitives on the backface\n // of the globe are not picked.\n this._depthPlane.update(frameState);\n }\n\n environmentState.renderTranslucentDepthForPick = false;\n environmentState.useWebVR =\n this._useWebVR && this.mode !== SceneMode.SCENE2D && !offscreenPass;\n\n var occluder =\n frameState.mode === SceneMode.SCENE3D &&\n !globeTranslucencyState.sunVisibleThroughGlobe\n ? frameState.occluder\n : undefined;\n var cullingVolume = frameState.cullingVolume;\n\n // get user culling volume minus the far plane.\n var planes = scratchCullingVolume.planes;\n for (var k = 0; k < 5; ++k) {\n planes[k] = cullingVolume.planes[k];\n }\n cullingVolume = scratchCullingVolume;\n\n // Determine visibility of celestial and terrestrial environment effects.\n environmentState.isSkyAtmosphereVisible =\n defined(environmentState.skyAtmosphereCommand) &&\n environmentState.isReadyForAtmosphere;\n environmentState.isSunVisible = this.isVisible(\n environmentState.sunDrawCommand,\n cullingVolume,\n occluder\n );\n environmentState.isMoonVisible = this.isVisible(\n environmentState.moonCommand,\n cullingVolume,\n occluder\n );\n\n var envMaps = this.specularEnvironmentMaps;\n var envMapAtlas = this._specularEnvironmentMapAtlas;\n if (\n defined(envMaps) &&\n (!defined(envMapAtlas) || envMapAtlas.url !== envMaps)\n ) {\n envMapAtlas = envMapAtlas && envMapAtlas.destroy();\n this._specularEnvironmentMapAtlas = new OctahedralProjectedCubeMap(envMaps);\n } else if (!defined(envMaps) && defined(envMapAtlas)) {\n envMapAtlas.destroy();\n this._specularEnvironmentMapAtlas = undefined;\n }\n\n if (defined(this._specularEnvironmentMapAtlas)) {\n this._specularEnvironmentMapAtlas.update(frameState);\n }\n};\n\nfunction updateDebugFrustumPlanes(scene) {\n var frameState = scene._frameState;\n if (scene.debugShowFrustumPlanes !== scene._debugShowFrustumPlanes) {\n if (scene.debugShowFrustumPlanes) {\n scene._debugFrustumPlanes = new DebugCameraPrimitive({\n camera: scene.camera,\n updateOnChange: false,\n frustumSplits: frameState.frustumSplits,\n });\n } else {\n scene._debugFrustumPlanes =\n scene._debugFrustumPlanes && scene._debugFrustumPlanes.destroy();\n }\n scene._debugShowFrustumPlanes = scene.debugShowFrustumPlanes;\n }\n\n if (defined(scene._debugFrustumPlanes)) {\n scene._debugFrustumPlanes.update(frameState);\n }\n}\n\nfunction updateShadowMaps(scene) {\n var frameState = scene._frameState;\n var shadowMaps = frameState.shadowMaps;\n var length = shadowMaps.length;\n\n var shadowsEnabled =\n length > 0 && !frameState.passes.pick && scene.mode === SceneMode.SCENE3D;\n if (shadowsEnabled !== frameState.shadowState.shadowsEnabled) {\n // Update derived commands when shadowsEnabled changes\n ++frameState.shadowState.lastDirtyTime;\n frameState.shadowState.shadowsEnabled = shadowsEnabled;\n }\n\n frameState.shadowState.lightShadowsEnabled = false;\n\n if (!shadowsEnabled) {\n return;\n }\n\n // Check if the shadow maps are different than the shadow maps last frame.\n // If so, the derived commands need to be updated.\n for (var j = 0; j < length; ++j) {\n if (shadowMaps[j] !== frameState.shadowState.shadowMaps[j]) {\n ++frameState.shadowState.lastDirtyTime;\n break;\n }\n }\n\n frameState.shadowState.shadowMaps.length = 0;\n frameState.shadowState.lightShadowMaps.length = 0;\n\n for (var i = 0; i < length; ++i) {\n var shadowMap = shadowMaps[i];\n shadowMap.update(frameState);\n\n frameState.shadowState.shadowMaps.push(shadowMap);\n\n if (shadowMap.fromLightSource) {\n frameState.shadowState.lightShadowMaps.push(shadowMap);\n frameState.shadowState.lightShadowsEnabled = true;\n }\n\n if (shadowMap.dirty) {\n ++frameState.shadowState.lastDirtyTime;\n shadowMap.dirty = false;\n }\n }\n}\n\nfunction updateAndRenderPrimitives(scene) {\n var frameState = scene._frameState;\n\n scene._groundPrimitives.update(frameState);\n scene._primitives.update(frameState);\n\n updateDebugFrustumPlanes(scene);\n updateShadowMaps(scene);\n\n if (scene._globe) {\n scene._globe.render(frameState);\n }\n}\n\nfunction updateAndClearFramebuffers(scene, passState, clearColor) {\n var context = scene._context;\n var frameState = scene._frameState;\n var environmentState = scene._environmentState;\n var view = scene._view;\n\n var passes = scene._frameState.passes;\n var picking = passes.pick;\n var useWebVR = environmentState.useWebVR;\n\n // Preserve the reference to the original framebuffer.\n environmentState.originalFramebuffer = passState.framebuffer;\n\n // Manage sun bloom post-processing effect.\n if (defined(scene.sun) && scene.sunBloom !== scene._sunBloom) {\n if (scene.sunBloom && !useWebVR) {\n scene._sunPostProcess = new SunPostProcess();\n } else if (defined(scene._sunPostProcess)) {\n scene._sunPostProcess = scene._sunPostProcess.destroy();\n }\n\n scene._sunBloom = scene.sunBloom;\n } else if (!defined(scene.sun) && defined(scene._sunPostProcess)) {\n scene._sunPostProcess = scene._sunPostProcess.destroy();\n scene._sunBloom = false;\n }\n\n // Clear the pass state framebuffer.\n var clear = scene._clearColorCommand;\n Color.clone(clearColor, clear.color);\n clear.execute(context, passState);\n\n // Update globe depth rendering based on the current context and clear the globe depth framebuffer.\n // Globe depth is copied for the pick pass to support picking batched geometries in GroundPrimitives.\n var useGlobeDepthFramebuffer = (environmentState.useGlobeDepthFramebuffer = defined(\n view.globeDepth\n ));\n if (useGlobeDepthFramebuffer) {\n view.globeDepth.update(\n context,\n passState,\n view.viewport,\n scene._hdr,\n environmentState.clearGlobeDepth\n );\n view.globeDepth.clear(context, passState, clearColor);\n }\n\n // If supported, configure OIT to use the globe depth framebuffer and clear the OIT framebuffer.\n var oit = view.oit;\n var useOIT = (environmentState.useOIT =\n !picking && defined(oit) && oit.isSupported());\n if (useOIT) {\n oit.update(context, passState, view.globeDepth.framebuffer, scene._hdr);\n oit.clear(context, passState, clearColor);\n environmentState.useOIT = oit.isSupported();\n }\n\n var postProcess = scene.postProcessStages;\n var usePostProcess = (environmentState.usePostProcess =\n !picking &&\n (scene._hdr ||\n postProcess.length > 0 ||\n postProcess.ambientOcclusion.enabled ||\n postProcess.fxaa.enabled ||\n postProcess.bloom.enabled));\n environmentState.usePostProcessSelected = false;\n if (usePostProcess) {\n view.sceneFramebuffer.update(context, view.viewport, scene._hdr);\n view.sceneFramebuffer.clear(context, passState, clearColor);\n\n postProcess.update(context, frameState.useLogDepth, scene._hdr);\n postProcess.clear(context);\n\n usePostProcess = environmentState.usePostProcess = postProcess.ready;\n environmentState.usePostProcessSelected =\n usePostProcess && postProcess.hasSelected;\n }\n\n if (environmentState.isSunVisible && scene.sunBloom && !useWebVR) {\n passState.framebuffer = scene._sunPostProcess.update(passState);\n scene._sunPostProcess.clear(context, passState, clearColor);\n } else if (useGlobeDepthFramebuffer) {\n passState.framebuffer = view.globeDepth.framebuffer;\n } else if (usePostProcess) {\n passState.framebuffer = view.sceneFramebuffer.getFramebuffer();\n }\n\n if (defined(passState.framebuffer)) {\n clear.execute(context, passState);\n }\n\n var useInvertClassification = (environmentState.useInvertClassification =\n !picking && defined(passState.framebuffer) && scene.invertClassification);\n if (useInvertClassification) {\n var depthFramebuffer;\n if (scene.frameState.invertClassificationColor.alpha === 1.0) {\n if (environmentState.useGlobeDepthFramebuffer) {\n depthFramebuffer = view.globeDepth.framebuffer;\n }\n }\n\n if (defined(depthFramebuffer) || context.depthTexture) {\n scene._invertClassification.previousFramebuffer = depthFramebuffer;\n scene._invertClassification.update(context);\n scene._invertClassification.clear(context, passState);\n\n if (scene.frameState.invertClassificationColor.alpha < 1.0 && useOIT) {\n var command = scene._invertClassification.unclassifiedCommand;\n var derivedCommands = command.derivedCommands;\n derivedCommands.oit = oit.createDerivedCommands(\n command,\n context,\n derivedCommands.oit\n );\n }\n } else {\n environmentState.useInvertClassification = false;\n }\n }\n\n if (scene._globeTranslucencyState.translucent) {\n view.globeTranslucencyFramebuffer.updateAndClear(\n scene._hdr,\n view.viewport,\n context,\n passState\n );\n }\n}\n\n/**\n * @private\n */\nScene.prototype.resolveFramebuffers = function (passState) {\n var context = this._context;\n var frameState = this._frameState;\n var environmentState = this._environmentState;\n var view = this._view;\n var globeDepth = view.globeDepth;\n\n var useOIT = environmentState.useOIT;\n var useGlobeDepthFramebuffer = environmentState.useGlobeDepthFramebuffer;\n var usePostProcess = environmentState.usePostProcess;\n\n var defaultFramebuffer = environmentState.originalFramebuffer;\n var globeFramebuffer = useGlobeDepthFramebuffer\n ? globeDepth.framebuffer\n : undefined;\n var sceneFramebuffer = view.sceneFramebuffer.getFramebuffer();\n var idFramebuffer = view.sceneFramebuffer.getIdFramebuffer();\n\n if (environmentState.separatePrimitiveFramebuffer) {\n // Merge primitive framebuffer into globe framebuffer\n globeDepth.executeMergeColor(context, passState);\n }\n\n if (useOIT) {\n passState.framebuffer = usePostProcess\n ? sceneFramebuffer\n : defaultFramebuffer;\n view.oit.execute(context, passState);\n }\n\n if (usePostProcess) {\n var inputFramebuffer = sceneFramebuffer;\n if (useGlobeDepthFramebuffer && !useOIT) {\n inputFramebuffer = globeFramebuffer;\n }\n\n var postProcess = this.postProcessStages;\n var colorTexture = inputFramebuffer.getColorTexture(0);\n var idTexture = idFramebuffer.getColorTexture(0);\n var depthTexture = defaultValue(globeFramebuffer, sceneFramebuffer)\n .depthStencilTexture;\n postProcess.execute(context, colorTexture, depthTexture, idTexture);\n postProcess.copy(context, defaultFramebuffer);\n }\n\n if (!useOIT && !usePostProcess && useGlobeDepthFramebuffer) {\n passState.framebuffer = defaultFramebuffer;\n globeDepth.executeCopyColor(context, passState);\n }\n\n var useLogDepth = frameState.useLogDepth;\n\n if (this.debugShowGlobeDepth && useGlobeDepthFramebuffer) {\n var gd = getDebugGlobeDepth(this, this.debugShowDepthFrustum - 1);\n gd.executeDebugGlobeDepth(context, passState, useLogDepth);\n }\n\n if (this.debugShowPickDepth && useGlobeDepthFramebuffer) {\n var pd = this._picking.getPickDepth(this, this.debugShowDepthFrustum - 1);\n pd.executeDebugPickDepth(context, passState, useLogDepth);\n }\n};\n\nfunction callAfterRenderFunctions(scene) {\n // Functions are queued up during primitive update and executed here in case\n // the function modifies scene state that should remain constant over the frame.\n var functions = scene._frameState.afterRender;\n for (var i = 0, length = functions.length; i < length; ++i) {\n functions[i]();\n scene.requestRender();\n }\n\n functions.length = 0;\n}\n\nfunction getGlobeHeight(scene) {\n var globe = scene._globe;\n var camera = scene.camera;\n var cartographic = camera.positionCartographic;\n if (defined(globe) && globe.show && defined(cartographic)) {\n return globe.getHeight(cartographic);\n }\n return undefined;\n}\n\nfunction isCameraUnderground(scene) {\n var camera = scene.camera;\n var mode = scene._mode;\n var globe = scene.globe;\n var cameraController = scene._screenSpaceCameraController;\n var cartographic = camera.positionCartographic;\n\n if (!defined(cartographic)) {\n return false;\n }\n\n if (!cameraController.onMap() && cartographic.height < 0.0) {\n // The camera can go off the map while in Columbus View.\n // Make a best guess as to whether it's underground by checking if its height is less than zero.\n return true;\n }\n\n if (\n !defined(globe) ||\n !globe.show ||\n mode === SceneMode.SCENE2D ||\n mode === SceneMode.MORPHING\n ) {\n return false;\n }\n\n var globeHeight = scene._globeHeight;\n return defined(globeHeight) && cartographic.height < globeHeight;\n}\n\n/**\n * @private\n */\nScene.prototype.initializeFrame = function () {\n // Destroy released shaders and textures once every 120 frames to avoid thrashing the cache\n if (this._shaderFrameCount++ === 120) {\n this._shaderFrameCount = 0;\n this._context.shaderCache.destroyReleasedShaderPrograms();\n this._context.textureCache.destroyReleasedTextures();\n }\n\n this._tweens.update();\n\n this._globeHeight = getGlobeHeight(this);\n this._cameraUnderground = isCameraUnderground(this);\n this._globeTranslucencyState.update(this);\n\n this._screenSpaceCameraController.update();\n if (defined(this._deviceOrientationCameraController)) {\n this._deviceOrientationCameraController.update();\n }\n\n this.camera.update(this._mode);\n this.camera._updateCameraChanged();\n};\n\nfunction updateDebugShowFramesPerSecond(scene, renderedThisFrame) {\n if (scene.debugShowFramesPerSecond) {\n if (!defined(scene._performanceDisplay)) {\n var performanceContainer = document.createElement(\"div\");\n performanceContainer.className =\n \"cesium-performanceDisplay-defaultContainer\";\n var container = scene._canvas.parentNode;\n container.appendChild(performanceContainer);\n var performanceDisplay = new PerformanceDisplay({\n container: performanceContainer,\n });\n scene._performanceDisplay = performanceDisplay;\n scene._performanceContainer = performanceContainer;\n }\n\n scene._performanceDisplay.throttled = scene.requestRenderMode;\n scene._performanceDisplay.update(renderedThisFrame);\n } else if (defined(scene._performanceDisplay)) {\n scene._performanceDisplay =\n scene._performanceDisplay && scene._performanceDisplay.destroy();\n scene._performanceContainer.parentNode.removeChild(\n scene._performanceContainer\n );\n }\n}\n\nfunction prePassesUpdate(scene) {\n scene._jobScheduler.resetBudgets();\n\n var frameState = scene._frameState;\n var primitives = scene.primitives;\n primitives.prePassesUpdate(frameState);\n\n if (defined(scene.globe)) {\n scene.globe.update(frameState);\n }\n\n scene._picking.update();\n frameState.creditDisplay.update();\n}\n\nfunction postPassesUpdate(scene) {\n var frameState = scene._frameState;\n var primitives = scene.primitives;\n primitives.postPassesUpdate(frameState);\n\n RequestScheduler.update();\n}\n\nvar scratchBackgroundColor = new Color();\n\nfunction render(scene) {\n var frameState = scene._frameState;\n\n var context = scene.context;\n var us = context.uniformState;\n\n var view = scene._defaultView;\n scene._view = view;\n\n scene.updateFrameState();\n frameState.passes.render = true;\n frameState.passes.postProcess = scene.postProcessStages.hasSelected;\n frameState.tilesetPassState = renderTilesetPassState;\n\n var backgroundColor = defaultValue(scene.backgroundColor, Color.BLACK);\n if (scene._hdr) {\n backgroundColor = Color.clone(backgroundColor, scratchBackgroundColor);\n backgroundColor.red = Math.pow(backgroundColor.red, scene.gamma);\n backgroundColor.green = Math.pow(backgroundColor.green, scene.gamma);\n backgroundColor.blue = Math.pow(backgroundColor.blue, scene.gamma);\n }\n frameState.backgroundColor = backgroundColor;\n\n scene.fog.update(frameState);\n\n us.update(frameState);\n\n var shadowMap = scene.shadowMap;\n if (defined(shadowMap) && shadowMap.enabled) {\n if (!defined(scene.light) || scene.light instanceof SunLight) {\n // Negate the sun direction so that it is from the Sun, not to the Sun\n Cartesian3.negate(us.sunDirectionWC, scene._shadowMapCamera.direction);\n } else {\n Cartesian3.clone(scene.light.direction, scene._shadowMapCamera.direction);\n }\n frameState.shadowMaps.push(shadowMap);\n }\n\n scene._computeCommandList.length = 0;\n scene._overlayCommandList.length = 0;\n\n var viewport = view.viewport;\n viewport.x = 0;\n viewport.y = 0;\n viewport.width = context.drawingBufferWidth;\n viewport.height = context.drawingBufferHeight;\n\n var passState = view.passState;\n passState.framebuffer = undefined;\n passState.blendingEnabled = undefined;\n passState.scissorTest = undefined;\n passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n if (defined(scene.globe)) {\n scene.globe.beginFrame(frameState);\n }\n\n scene.updateEnvironment();\n scene.updateAndExecuteCommands(passState, backgroundColor);\n scene.resolveFramebuffers(passState);\n\n passState.framebuffer = undefined;\n executeOverlayCommands(scene, passState);\n\n if (defined(scene.globe)) {\n scene.globe.endFrame(frameState);\n\n if (!scene.globe.tilesLoaded) {\n scene._renderRequested = true;\n }\n }\n\n context.endFrame();\n}\n\nfunction tryAndCatchError(scene, functionToExecute) {\n try {\n functionToExecute(scene);\n } catch (error) {\n scene._renderError.raiseEvent(scene, error);\n\n if (scene.rethrowRenderErrors) {\n throw error;\n }\n }\n}\n\nfunction updateMostDetailedRayPicks(scene) {\n return scene._picking.updateMostDetailedRayPicks(scene);\n}\n\n/**\n * Update and render the scene. It is usually not necessary to call this function\n * directly because {@link CesiumWidget} or {@link Viewer} do it automatically.\n * @param {JulianDate} [time] The simulation time at which to render.\n */\nScene.prototype.render = function (time) {\n /**\n *\n * Pre passes update. Execute any pass invariant code that should run before the passes here.\n *\n */\n this._preUpdate.raiseEvent(this, time);\n\n var frameState = this._frameState;\n frameState.newFrame = false;\n\n if (!defined(time)) {\n time = JulianDate.now();\n }\n\n // Determine if shouldRender\n var cameraChanged = this._view.checkForCameraUpdates(this);\n var shouldRender =\n !this.requestRenderMode ||\n this._renderRequested ||\n cameraChanged ||\n this._logDepthBufferDirty ||\n this._hdrDirty ||\n this.mode === SceneMode.MORPHING;\n if (\n !shouldRender &&\n defined(this.maximumRenderTimeChange) &&\n defined(this._lastRenderTime)\n ) {\n var difference = Math.abs(\n JulianDate.secondsDifference(this._lastRenderTime, time)\n );\n shouldRender = shouldRender || difference > this.maximumRenderTimeChange;\n }\n\n if (shouldRender) {\n this._lastRenderTime = JulianDate.clone(time, this._lastRenderTime);\n this._renderRequested = false;\n this._logDepthBufferDirty = false;\n this._hdrDirty = false;\n\n var frameNumber = CesiumMath.incrementWrap(\n frameState.frameNumber,\n 15000000.0,\n 1.0\n );\n updateFrameNumber(this, frameNumber, time);\n frameState.newFrame = true;\n }\n\n tryAndCatchError(this, prePassesUpdate);\n\n /**\n *\n * Passes update. Add any passes here\n *\n */\n if (this.primitives.show) {\n tryAndCatchError(this, updateMostDetailedRayPicks);\n tryAndCatchError(this, updatePreloadPass);\n tryAndCatchError(this, updatePreloadFlightPass);\n if (!shouldRender) {\n tryAndCatchError(this, updateRequestRenderModeDeferCheckPass);\n }\n }\n\n this._postUpdate.raiseEvent(this, time);\n\n if (shouldRender) {\n this._preRender.raiseEvent(this, time);\n frameState.creditDisplay.beginFrame();\n tryAndCatchError(this, render);\n }\n\n /**\n *\n * Post passes update. Execute any pass invariant code that should run after the passes here.\n *\n */\n updateDebugShowFramesPerSecond(this, shouldRender);\n tryAndCatchError(this, postPassesUpdate);\n\n // Often used to trigger events (so don't want in trycatch) that the user might be subscribed to. Things like the tile load events, ready promises, etc.\n // We don't want those events to resolve during the render loop because the events might add new primitives\n callAfterRenderFunctions(this);\n\n if (shouldRender) {\n this._postRender.raiseEvent(this, time);\n frameState.creditDisplay.endFrame();\n }\n};\n\n/**\n * Update and render the scene. Always forces a new render frame regardless of whether a render was\n * previously requested.\n * @param {JulianDate} [time] The simulation time at which to render.\n *\n * @private\n */\nScene.prototype.forceRender = function (time) {\n this._renderRequested = true;\n this.render(time);\n};\n\n/**\n * Requests a new rendered frame when {@link Scene#requestRenderMode} is set to <code>true</code>.\n * The render rate will not exceed the {@link CesiumWidget#targetFrameRate}.\n *\n * @see Scene#requestRenderMode\n */\nScene.prototype.requestRender = function () {\n this._renderRequested = true;\n};\n\n/**\n * @private\n */\nScene.prototype.clampLineWidth = function (width) {\n return Math.max(\n ContextLimits.minimumAliasedLineWidth,\n Math.min(width, ContextLimits.maximumAliasedLineWidth)\n );\n};\n\n/**\n * Returns an object with a `primitive` property that contains the first (top) primitive in the scene\n * at a particular window coordinate or undefined if nothing is at the location. Other properties may\n * potentially be set depending on the type of primitive and may be used to further identify the picked object.\n * <p>\n * When a feature of a 3D Tiles tileset is picked, <code>pick</code> returns a {@link Cesium3DTileFeature} object.\n * </p>\n *\n * @example\n * // On mouse over, color the feature yellow.\n * handler.setInputAction(function(movement) {\n * var feature = scene.pick(movement.endPosition);\n * if (feature instanceof Cesium.Cesium3DTileFeature) {\n * feature.color = Cesium.Color.YELLOW;\n * }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Number} [width=3] Width of the pick rectangle.\n * @param {Number} [height=3] Height of the pick rectangle.\n * @returns {Object} Object containing the picked primitive.\n */\nScene.prototype.pick = function (windowPosition, width, height) {\n return this._picking.pick(this, windowPosition, width, height);\n};\n\n/**\n * Returns the cartesian position reconstructed from the depth buffer and window position.\n * The returned position is in world coordinates. Used internally by camera functions to\n * prevent conversion to projected 2D coordinates and then back.\n * <p>\n * Set {@link Scene#pickTranslucentDepth} to <code>true</code> to include the depth of\n * translucent primitives; otherwise, this essentially picks through translucent primitives.\n * </p>\n *\n * @private\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Cartesian3} [result] The object on which to restore the result.\n * @returns {Cartesian3} The cartesian position in world coordinates.\n *\n * @exception {DeveloperError} Picking from the depth buffer is not supported. Check pickPositionSupported.\n */\nScene.prototype.pickPositionWorldCoordinates = function (\n windowPosition,\n result\n) {\n return this._picking.pickPositionWorldCoordinates(\n this,\n windowPosition,\n result\n );\n};\n\n/**\n * Returns the cartesian position reconstructed from the depth buffer and window position.\n * <p>\n * The position reconstructed from the depth buffer in 2D may be slightly different from those\n * reconstructed in 3D and Columbus view. This is caused by the difference in the distribution\n * of depth values of perspective and orthographic projection.\n * </p>\n * <p>\n * Set {@link Scene#pickTranslucentDepth} to <code>true</code> to include the depth of\n * translucent primitives; otherwise, this essentially picks through translucent primitives.\n * </p>\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Cartesian3} [result] The object on which to restore the result.\n * @returns {Cartesian3} The cartesian position.\n *\n * @exception {DeveloperError} Picking from the depth buffer is not supported. Check pickPositionSupported.\n */\nScene.prototype.pickPosition = function (windowPosition, result) {\n return this._picking.pickPosition(this, windowPosition, result);\n};\n\n/**\n * Returns a list of objects, each containing a `primitive` property, for all primitives at\n * a particular window coordinate position. Other properties may also be set depending on the\n * type of primitive and may be used to further identify the picked object. The primitives in\n * the list are ordered by their visual order in the scene (front to back).\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Number} [limit] If supplied, stop drilling after collecting this many picks.\n * @param {Number} [width=3] Width of the pick rectangle.\n * @param {Number} [height=3] Height of the pick rectangle.\n * @returns {Array.<*>} Array of objects, each containing 1 picked primitives.\n *\n * @exception {DeveloperError} windowPosition is undefined.\n *\n * @example\n * var pickedObjects = scene.drillPick(new Cesium.Cartesian2(100.0, 200.0));\n *\n * @see Scene#pick\n */\nScene.prototype.drillPick = function (windowPosition, limit, width, height) {\n return this._picking.drillPick(this, windowPosition, limit, width, height);\n};\n\nfunction updatePreloadPass(scene) {\n var frameState = scene._frameState;\n preloadTilesetPassState.camera = frameState.camera;\n preloadTilesetPassState.cullingVolume = frameState.cullingVolume;\n\n var primitives = scene.primitives;\n primitives.updateForPass(frameState, preloadTilesetPassState);\n}\n\nfunction updatePreloadFlightPass(scene) {\n var frameState = scene._frameState;\n var camera = frameState.camera;\n if (!camera.canPreloadFlight()) {\n return;\n }\n\n preloadFlightTilesetPassState.camera = scene.preloadFlightCamera;\n preloadFlightTilesetPassState.cullingVolume =\n scene.preloadFlightCullingVolume;\n\n var primitives = scene.primitives;\n primitives.updateForPass(frameState, preloadFlightTilesetPassState);\n}\n\nfunction updateRequestRenderModeDeferCheckPass(scene) {\n // Check if any ignored requests are ready to go (to wake rendering up again)\n scene.primitives.updateForPass(\n scene._frameState,\n requestRenderModeDeferCheckPassState\n );\n}\n\n/**\n * Returns an object containing the first object intersected by the ray and the position of intersection,\n * or <code>undefined</code> if there were no intersections. The intersected object has a <code>primitive</code>\n * property that contains the intersected primitive. Other properties may be set depending on the type of primitive\n * and may be used to further identify the picked object. The ray must be given in world coordinates.\n * <p>\n * This function only picks globe tiles and 3D Tiles that are rendered in the current view. Picks all other\n * primitives regardless of their visibility.\n * </p>\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Object} An object containing the object and position of the first intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.pickFromRay = function (ray, objectsToExclude, width) {\n return this._picking.pickFromRay(this, ray, objectsToExclude, width);\n};\n\n/**\n * Returns a list of objects, each containing the object intersected by the ray and the position of intersection.\n * The intersected object has a <code>primitive</code> property that contains the intersected primitive. Other\n * properties may also be set depending on the type of primitive and may be used to further identify the picked object.\n * The primitives in the list are ordered by first intersection to last intersection. The ray must be given in\n * world coordinates.\n * <p>\n * This function only picks globe tiles and 3D Tiles that are rendered in the current view. Picks all other\n * primitives regardless of their visibility.\n * </p>\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {Number} [limit=Number.MAX_VALUE] If supplied, stop finding intersections after this many intersections.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Object[]} List of objects containing the object and position of each intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.drillPickFromRay = function (\n ray,\n limit,\n objectsToExclude,\n width\n) {\n return this._picking.drillPickFromRay(\n this,\n ray,\n limit,\n objectsToExclude,\n width\n );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#pickFromRay} request using the maximum level of detail for 3D Tilesets\n * regardless of visibility.\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise.<Object>} A promise that resolves to an object containing the object and position of the first intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.pickFromRayMostDetailed = function (\n ray,\n objectsToExclude,\n width\n) {\n return this._picking.pickFromRayMostDetailed(\n this,\n ray,\n objectsToExclude,\n width\n );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#drillPickFromRay} request using the maximum level of detail for 3D Tilesets\n * regardless of visibility.\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {Number} [limit=Number.MAX_VALUE] If supplied, stop finding intersections after this many intersections.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise.<Object[]>} A promise that resolves to a list of objects containing the object and position of each intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.drillPickFromRayMostDetailed = function (\n ray,\n limit,\n objectsToExclude,\n width\n) {\n return this._picking.drillPickFromRayMostDetailed(\n this,\n ray,\n limit,\n objectsToExclude,\n width\n );\n};\n\n/**\n * Returns the height of scene geometry at the given cartographic position or <code>undefined</code> if there was no\n * scene geometry to sample height from. The height of the input position is ignored. May be used to clamp objects to\n * the globe, 3D Tiles, or primitives in the scene.\n * <p>\n * This function only samples height from globe tiles and 3D Tiles that are rendered in the current view. Samples height\n * from all other primitives regardless of their visibility.\n * </p>\n *\n * @param {Cartographic} position The cartographic position to sample height from.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not sample height from.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Number} The height. This may be <code>undefined</code> if there was no scene geometry to sample height from.\n *\n * @example\n * var position = new Cesium.Cartographic(-1.31968, 0.698874);\n * var height = viewer.scene.sampleHeight(position);\n * console.log(height);\n *\n * @see Scene#clampToHeight\n * @see Scene#clampToHeightMostDetailed\n * @see Scene#sampleHeightMostDetailed\n *\n * @exception {DeveloperError} sampleHeight is only supported in 3D mode.\n * @exception {DeveloperError} sampleHeight requires depth texture support. Check sampleHeightSupported.\n */\nScene.prototype.sampleHeight = function (position, objectsToExclude, width) {\n return this._picking.sampleHeight(this, position, objectsToExclude, width);\n};\n\n/**\n * Clamps the given cartesian position to the scene geometry along the geodetic surface normal. Returns the\n * clamped position or <code>undefined</code> if there was no scene geometry to clamp to. May be used to clamp\n * objects to the globe, 3D Tiles, or primitives in the scene.\n * <p>\n * This function only clamps to globe tiles and 3D Tiles that are rendered in the current view. Clamps to\n * all other primitives regardless of their visibility.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian position.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not clamp to.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @param {Cartesian3} [result] An optional object to return the clamped position.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. This may be <code>undefined</code> if there was no scene geometry to clamp to.\n *\n * @example\n * // Clamp an entity to the underlying scene geometry\n * var position = entity.position.getValue(Cesium.JulianDate.now());\n * entity.position = viewer.scene.clampToHeight(position);\n *\n * @see Scene#sampleHeight\n * @see Scene#sampleHeightMostDetailed\n * @see Scene#clampToHeightMostDetailed\n *\n * @exception {DeveloperError} clampToHeight is only supported in 3D mode.\n * @exception {DeveloperError} clampToHeight requires depth texture support. Check clampToHeightSupported.\n */\nScene.prototype.clampToHeight = function (\n cartesian,\n objectsToExclude,\n width,\n result\n) {\n return this._picking.clampToHeight(\n this,\n cartesian,\n objectsToExclude,\n width,\n result\n );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#sampleHeight} query for an array of {@link Cartographic} positions\n * using the maximum level of detail for 3D Tilesets in the scene. The height of the input positions is ignored.\n * Returns a promise that is resolved when the query completes. Each point height is modified in place.\n * If a height cannot be determined because no geometry can be sampled at that location, or another error occurs,\n * the height is set to undefined.\n *\n * @param {Cartographic[]} positions The cartographic positions to update with sampled heights.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not sample height from.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise.<Number[]>} A promise that resolves to the provided list of positions when the query has completed.\n *\n * @example\n * var positions = [\n * new Cesium.Cartographic(-1.31968, 0.69887),\n * new Cesium.Cartographic(-1.10489, 0.83923)\n * ];\n * var promise = viewer.scene.sampleHeightMostDetailed(positions);\n * promise.then(function(updatedPosition) {\n * // positions[0].height and positions[1].height have been updated.\n * // updatedPositions is just a reference to positions.\n * }\n *\n * @see Scene#sampleHeight\n *\n * @exception {DeveloperError} sampleHeightMostDetailed is only supported in 3D mode.\n * @exception {DeveloperError} sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.\n */\nScene.prototype.sampleHeightMostDetailed = function (\n positions,\n objectsToExclude,\n width\n) {\n return this._picking.sampleHeightMostDetailed(\n this,\n positions,\n objectsToExclude,\n width\n );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#clampToHeight} query for an array of {@link Cartesian3} positions\n * using the maximum level of detail for 3D Tilesets in the scene. Returns a promise that is resolved when\n * the query completes. Each position is modified in place. If a position cannot be clamped because no geometry\n * can be sampled at that location, or another error occurs, the element in the array is set to undefined.\n *\n * @param {Cartesian3[]} cartesians The cartesian positions to update with clamped positions.\n * @param {Object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not clamp to.\n * @param {Number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise.<Cartesian3[]>} A promise that resolves to the provided list of positions when the query has completed.\n *\n * @example\n * var cartesians = [\n * entities[0].position.getValue(Cesium.JulianDate.now()),\n * entities[1].position.getValue(Cesium.JulianDate.now())\n * ];\n * var promise = viewer.scene.clampToHeightMostDetailed(cartesians);\n * promise.then(function(updatedCartesians) {\n * entities[0].position = updatedCartesians[0];\n * entities[1].position = updatedCartesians[1];\n * }\n *\n * @see Scene#clampToHeight\n *\n * @exception {DeveloperError} clampToHeightMostDetailed is only supported in 3D mode.\n * @exception {DeveloperError} clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.\n */\nScene.prototype.clampToHeightMostDetailed = function (\n cartesians,\n objectsToExclude,\n width\n) {\n return this._picking.clampToHeightMostDetailed(\n this,\n cartesians,\n objectsToExclude,\n width\n );\n};\n\n/**\n * Transforms a position in cartesian coordinates to canvas coordinates. This is commonly used to place an\n * HTML element at the same screen position as an object in the scene.\n *\n * @param {Cartesian3} position The position in cartesian coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to canvas coordinates.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the canvas position of longitude/latitude (0, 0) every time the mouse moves.\n * var scene = widget.scene;\n * var ellipsoid = scene.globe.ellipsoid;\n * var position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n * console.log(scene.cartesianToCanvasCoordinates(position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nScene.prototype.cartesianToCanvasCoordinates = function (position, result) {\n return SceneTransforms.wgs84ToWindowCoordinates(this, position, result);\n};\n\n/**\n * Instantly completes an active transition.\n */\nScene.prototype.completeMorph = function () {\n this._transitioner.completeMorph();\n};\n\n/**\n * Asynchronously transitions the scene to 2D.\n * @param {Number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphTo2D = function (duration) {\n var ellipsoid;\n var globe = this.globe;\n if (defined(globe)) {\n ellipsoid = globe.ellipsoid;\n } else {\n ellipsoid = this.mapProjection.ellipsoid;\n }\n duration = defaultValue(duration, 2.0);\n this._transitioner.morphTo2D(duration, ellipsoid);\n};\n\n/**\n * Asynchronously transitions the scene to Columbus View.\n * @param {Number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphToColumbusView = function (duration) {\n var ellipsoid;\n var globe = this.globe;\n if (defined(globe)) {\n ellipsoid = globe.ellipsoid;\n } else {\n ellipsoid = this.mapProjection.ellipsoid;\n }\n duration = defaultValue(duration, 2.0);\n this._transitioner.morphToColumbusView(duration, ellipsoid);\n};\n\n/**\n * Asynchronously transitions the scene to 3D.\n * @param {Number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphTo3D = function (duration) {\n var ellipsoid;\n var globe = this.globe;\n if (defined(globe)) {\n ellipsoid = globe.ellipsoid;\n } else {\n ellipsoid = this.mapProjection.ellipsoid;\n }\n duration = defaultValue(duration, 2.0);\n this._transitioner.morphTo3D(duration, ellipsoid);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Scene#destroy\n */\nScene.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * scene = scene && scene.destroy();\n *\n * @see Scene#isDestroyed\n */\nScene.prototype.destroy = function () {\n this._tweens.removeAll();\n this._computeEngine = this._computeEngine && this._computeEngine.destroy();\n this._screenSpaceCameraController =\n this._screenSpaceCameraController &&\n this._screenSpaceCameraController.destroy();\n this._deviceOrientationCameraController =\n this._deviceOrientationCameraController &&\n !this._deviceOrientationCameraController.isDestroyed() &&\n this._deviceOrientationCameraController.destroy();\n this._primitives = this._primitives && this._primitives.destroy();\n this._groundPrimitives =\n this._groundPrimitives && this._groundPrimitives.destroy();\n this._globe = this._globe && this._globe.destroy();\n this.skyBox = this.skyBox && this.skyBox.destroy();\n this.skyAtmosphere = this.skyAtmosphere && this.skyAtmosphere.destroy();\n this._debugSphere = this._debugSphere && this._debugSphere.destroy();\n this.sun = this.sun && this.sun.destroy();\n this._sunPostProcess = this._sunPostProcess && this._sunPostProcess.destroy();\n this._depthPlane = this._depthPlane && this._depthPlane.destroy();\n this._transitioner = this._transitioner && this._transitioner.destroy();\n this._debugFrustumPlanes =\n this._debugFrustumPlanes && this._debugFrustumPlanes.destroy();\n this._brdfLutGenerator =\n this._brdfLutGenerator && this._brdfLutGenerator.destroy();\n this._picking = this._picking && this._picking.destroy();\n\n this._defaultView = this._defaultView && this._defaultView.destroy();\n this._view = undefined;\n\n if (this._removeCreditContainer) {\n this._canvas.parentNode.removeChild(this._creditContainer);\n }\n\n this.postProcessStages =\n this.postProcessStages && this.postProcessStages.destroy();\n\n this._context = this._context && this._context.destroy();\n this._frameState.creditDisplay =\n this._frameState.creditDisplay && this._frameState.creditDisplay.destroy();\n\n if (defined(this._performanceDisplay)) {\n this._performanceDisplay =\n this._performanceDisplay && this._performanceDisplay.destroy();\n this._performanceContainer.parentNode.removeChild(\n this._performanceContainer\n );\n }\n\n this._removeRequestListenerCallback();\n this._removeTaskProcessorListenerCallback();\n for (var i = 0; i < this._removeGlobeCallbacks.length; ++i) {\n this._removeGlobeCallbacks[i]();\n }\n this._removeGlobeCallbacks.length = 0;\n\n return destroyObject(this);\n};\nexport default Scene;\n","/**\n * @license\n * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com)\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * * Neither the name of the project nor the names of its contributors may be\n * used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Modifications made by Cesium GS, Inc.\n */\n//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @license\\n\\\n * Copyright (c) 2000-2005, Sean O'Neil (s_p_oneil@hotmail.com)\\n\\\n * All rights reserved.\\n\\\n *\\n\\\n * Redistribution and use in source and binary forms, with or without\\n\\\n * modification, are permitted provided that the following conditions\\n\\\n * are met:\\n\\\n *\\n\\\n * * Redistributions of source code must retain the above copyright notice,\\n\\\n * this list of conditions and the following disclaimer.\\n\\\n * * Redistributions in binary form must reproduce the above copyright notice,\\n\\\n * this list of conditions and the following disclaimer in the documentation\\n\\\n * and/or other materials provided with the distribution.\\n\\\n * * Neither the name of the project nor the names of its contributors may be\\n\\\n * used to endorse or promote products derived from this software without\\n\\\n * specific prior written permission.\\n\\\n *\\n\\\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\"\\n\\\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\n\\\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\n\\\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\\n\\\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\\n\\\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\\n\\\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\\n\\\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\\n\\\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\n\\\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\\n *\\n\\\n * Modifications made by Cesium GS, Inc.\\n\\\n */\\n\\\n\\n\\\n // Code: http://sponeil.net/\\n\\\n // GPU Gems 2 Article: https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html\\n\\\n\\n\\\nconst float Kr = 0.0025;\\n\\\nconst float Kr4PI = Kr * 4.0 * czm_pi;\\n\\\nconst float Km = 0.0015;\\n\\\nconst float Km4PI = Km * 4.0 * czm_pi;\\n\\\nconst float ESun = 15.0;\\n\\\nconst float KmESun = Km * ESun;\\n\\\nconst float KrESun = Kr * ESun;\\n\\\nconst vec3 InvWavelength = vec3(\\n\\\n 5.60204474633241, // Red = 1.0 / Math.pow(0.650, 4.0)\\n\\\n 9.473284437923038, // Green = 1.0 / Math.pow(0.570, 4.0)\\n\\\n 19.643802610477206); // Blue = 1.0 / Math.pow(0.475, 4.0)\\n\\\nconst float rayleighScaleDepth = 0.25;\\n\\\n\\n\\\nconst int nSamples = 2;\\n\\\nconst float fSamples = 2.0;\\n\\\n\\n\\\nconst float g = -0.95;\\n\\\nconst float g2 = g * g;\\n\\\n\\n\\\n#ifdef COLOR_CORRECT\\n\\\nuniform vec3 u_hsbShift; // Hue, saturation, brightness\\n\\\n#endif\\n\\\n\\n\\\nuniform vec3 u_radiiAndDynamicAtmosphereColor; // outer radius, inner radius, dynamic atmosphere color flag\\n\\\n\\n\\\nfloat scale(float cosAngle)\\n\\\n{\\n\\\n float x = 1.0 - cosAngle;\\n\\\n return rayleighScaleDepth * exp(-0.00287 + x*(0.459 + x*(3.83 + x*(-6.80 + x*5.25))));\\n\\\n}\\n\\\n\\n\\\nvec3 getLightDirection(vec3 positionWC)\\n\\\n{\\n\\\n float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\\n\\\n vec3 lightDirection =\\n\\\n positionWC * float(lightEnum == 0.0) +\\n\\\n czm_lightDirectionWC * float(lightEnum == 1.0) +\\n\\\n czm_sunDirectionWC * float(lightEnum == 2.0);\\n\\\n return normalize(lightDirection);\\n\\\n}\\n\\\n\\n\\\nvoid calculateRayScatteringFromSpace(in vec3 positionWC, in vec3 ray, in float innerRadius, in float outerRadius, inout float far, out vec3 start, out float startOffset)\\n\\\n{\\n\\\n // Calculate the closest intersection of the ray with the outer atmosphere (which is the near point of the ray passing through the atmosphere)\\n\\\n float cameraHeight = length(positionWC);\\n\\\n float B = 2.0 * dot(positionWC, ray);\\n\\\n float C = cameraHeight * cameraHeight - outerRadius * outerRadius;\\n\\\n float det = max(0.0, B * B - 4.0 * C);\\n\\\n float near = 0.5 * (-B - sqrt(det));\\n\\\n\\n\\\n // Calculate the ray's starting position, then calculate its scattering offset\\n\\\n start = positionWC + ray * near;\\n\\\n far -= near;\\n\\\n float startAngle = dot(ray, start) / outerRadius;\\n\\\n float startDepth = exp(-1.0 / rayleighScaleDepth);\\n\\\n startOffset = startDepth * scale(startAngle);\\n\\\n}\\n\\\n\\n\\\nvoid calculateRayScatteringFromGround(in vec3 positionWC, in vec3 ray, in float atmosphereScale, in float innerRadius, out vec3 start, out float startOffset)\\n\\\n{\\n\\\n // Calculate the ray's starting position, then calculate its scattering offset\\n\\\n float cameraHeight = length(positionWC);\\n\\\n start = positionWC;\\n\\\n float height = length(start);\\n\\\n float depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - cameraHeight));\\n\\\n float startAngle = dot(ray, start) / height;\\n\\\n startOffset = depth*scale(startAngle);\\n\\\n}\\n\\\n\\n\\\nczm_raySegment rayEllipsoidIntersection(czm_ray ray, vec3 inverseRadii)\\n\\\n{\\n\\\n vec3 o = inverseRadii * (czm_inverseView * vec4(ray.origin, 1.0)).xyz;\\n\\\n vec3 d = inverseRadii * (czm_inverseView * vec4(ray.direction, 0.0)).xyz;\\n\\\n\\n\\\n float a = dot(d, d);\\n\\\n float b = dot(d, o);\\n\\\n float c = dot(o, o) - 1.0;\\n\\\n float discriminant = b * b - a * c;\\n\\\n if (discriminant < 0.0)\\n\\\n {\\n\\\n return czm_emptyRaySegment;\\n\\\n }\\n\\\n discriminant = sqrt(discriminant);\\n\\\n float t1 = (-b - discriminant) / a;\\n\\\n float t2 = (-b + discriminant) / a;\\n\\\n\\n\\\n if (t1 < 0.0 && t2 < 0.0)\\n\\\n {\\n\\\n return czm_emptyRaySegment;\\n\\\n }\\n\\\n\\n\\\n if (t1 < 0.0 && t2 >= 0.0)\\n\\\n {\\n\\\n t1 = 0.0;\\n\\\n }\\n\\\n\\n\\\n return czm_raySegment(t1, t2);\\n\\\n}\\n\\\n\\n\\\nvec3 getAdjustedPosition(vec3 positionWC, float innerRadius)\\n\\\n{\\n\\\n // Adjust the camera position so that atmosphere color looks the same wherever the eye height is the same\\n\\\n float cameraHeight = czm_eyeHeight + innerRadius;\\n\\\n return normalize(positionWC) * cameraHeight;\\n\\\n}\\n\\\n\\n\\\nvec3 getTranslucentPosition(vec3 positionWC, vec3 outerPositionWC, float innerRadius, out bool intersectsEllipsoid)\\n\\\n{\\n\\\n vec3 directionWC = normalize(outerPositionWC - positionWC);\\n\\\n vec3 directionEC = czm_viewRotation * directionWC;\\n\\\n czm_ray viewRay = czm_ray(vec3(0.0), directionEC);\\n\\\n czm_raySegment raySegment = rayEllipsoidIntersection(viewRay, czm_ellipsoidInverseRadii);\\n\\\n intersectsEllipsoid = raySegment.start >= 0.0;\\n\\\n\\n\\\n if (intersectsEllipsoid)\\n\\\n {\\n\\\n return positionWC + raySegment.stop * directionWC;\\n\\\n }\\n\\\n\\n\\\n return getAdjustedPosition(positionWC, innerRadius);\\n\\\n}\\n\\\n\\n\\\nvoid calculateMieColorAndRayleighColor(vec3 outerPositionWC, out vec3 mieColor, out vec3 rayleighColor)\\n\\\n{\\n\\\n // Unpack attributes\\n\\\n float outerRadius = u_radiiAndDynamicAtmosphereColor.x;\\n\\\n float innerRadius = u_radiiAndDynamicAtmosphereColor.y;\\n\\\n\\n\\\n#ifdef GLOBE_TRANSLUCENT\\n\\\n bool intersectsEllipsoid = false;\\n\\\n vec3 startPositionWC = getTranslucentPosition(czm_viewerPositionWC, outerPositionWC, innerRadius, intersectsEllipsoid);\\n\\\n#else\\n\\\n vec3 startPositionWC = getAdjustedPosition(czm_viewerPositionWC, innerRadius);\\n\\\n#endif\\n\\\n\\n\\\n vec3 lightDirection = getLightDirection(startPositionWC);\\n\\\n\\n\\\n // Get the ray from the start position to the outer position and its length (which is the far point of the ray passing through the atmosphere)\\n\\\n vec3 ray = outerPositionWC - startPositionWC;\\n\\\n float far = length(ray);\\n\\\n ray /= far;\\n\\\n\\n\\\n float atmosphereScale = 1.0 / (outerRadius - innerRadius);\\n\\\n\\n\\\n vec3 start;\\n\\\n float startOffset;\\n\\\n\\n\\\n#ifdef SKY_FROM_SPACE\\n\\\n#ifdef GLOBE_TRANSLUCENT\\n\\\n if (intersectsEllipsoid)\\n\\\n {\\n\\\n calculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n calculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\\n\\\n }\\n\\\n#else\\n\\\n calculateRayScatteringFromSpace(startPositionWC, ray, innerRadius, outerRadius, far, start, startOffset);\\n\\\n#endif\\n\\\n#else\\n\\\n calculateRayScatteringFromGround(startPositionWC, ray, atmosphereScale, innerRadius, start, startOffset);\\n\\\n#endif\\n\\\n\\n\\\n // Initialize the scattering loop variables\\n\\\n float sampleLength = far / fSamples;\\n\\\n float scaledLength = sampleLength * atmosphereScale;\\n\\\n vec3 sampleRay = ray * sampleLength;\\n\\\n vec3 samplePoint = start + sampleRay * 0.5;\\n\\\n\\n\\\n // Now loop through the sample rays\\n\\\n vec3 frontColor = vec3(0.0, 0.0, 0.0);\\n\\\n\\n\\\n for (int i = 0; i<nSamples; i++)\\n\\\n {\\n\\\n float height = length(samplePoint);\\n\\\n float depth = exp((atmosphereScale / rayleighScaleDepth ) * (innerRadius - height));\\n\\\n float fLightAngle = dot(lightDirection, samplePoint) / height;\\n\\\n float fCameraAngle = dot(ray, samplePoint) / height;\\n\\\n float fScatter = (startOffset + depth*(scale(fLightAngle) - scale(fCameraAngle)));\\n\\\n vec3 attenuate = exp(-fScatter * (InvWavelength * Kr4PI + Km4PI));\\n\\\n frontColor += attenuate * (depth * scaledLength);\\n\\\n samplePoint += sampleRay;\\n\\\n }\\n\\\n\\n\\\n // Finally, scale the Mie and Rayleigh colors and set up the varying variables for the pixel shader\\n\\\n mieColor = frontColor * KmESun;\\n\\\n rayleighColor = frontColor * (InvWavelength * KrESun);\\n\\\n\\n\\\n // Cap mie and rayleigh colors to prevent NaNs when vertex interpolation happens\\n\\\n mieColor = min(mieColor, vec3(10000000.0));\\n\\\n rayleighColor = min(rayleighColor, vec3(10000000.0));\\n\\\n}\\n\\\n\\n\\\nvec4 calculateFinalColor(vec3 positionWC, vec3 toCamera, vec3 lightDirection, vec3 mieColor, vec3 rayleighColor)\\n\\\n{\\n\\\n // Extra normalize added for Android\\n\\\n float cosAngle = dot(lightDirection, normalize(toCamera)) / length(toCamera);\\n\\\n float rayleighPhase = 0.75 * (1.0 + cosAngle * cosAngle);\\n\\\n float miePhase = 1.5 * ((1.0 - g2) / (2.0 + g2)) * (1.0 + cosAngle * cosAngle) / pow(1.0 + g2 - 2.0 * g * cosAngle, 1.5);\\n\\\n\\n\\\n vec3 rgb = rayleighPhase * rayleighColor + miePhase * mieColor;\\n\\\n\\n\\\n const float exposure = 2.0;\\n\\\n vec3 rgbExposure = vec3(1.0) - exp(-exposure * rgb);\\n\\\n\\n\\\n#ifndef HDR\\n\\\n rgb = rgbExposure;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef COLOR_CORRECT\\n\\\n // Convert rgb color to hsb\\n\\\n vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n // Perform hsb shift\\n\\\n hsb.x += u_hsbShift.x; // hue\\n\\\n hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation\\n\\\n hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness\\n\\\n // Convert shifted hsb back to rgb\\n\\\n rgb = czm_HSBToRGB(hsb);\\n\\\n#endif\\n\\\n\\n\\\n float outerRadius = u_radiiAndDynamicAtmosphereColor.x;\\n\\\n float innerRadius = u_radiiAndDynamicAtmosphereColor.y;\\n\\\n float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\\n\\\n\\n\\\n float cameraHeight = czm_eyeHeight + innerRadius;\\n\\\n\\n\\\n // Alter alpha based on how close the viewer is to the ground (1.0 = on ground, 0.0 = at edge of atmosphere)\\n\\\n float atmosphereAlpha = clamp((outerRadius - cameraHeight) / (outerRadius - innerRadius), 0.0, 1.0);\\n\\\n\\n\\\n // Alter alpha based on time of day (0.0 = night , 1.0 = day)\\n\\\n float nightAlpha = (lightEnum != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;\\n\\\n atmosphereAlpha *= pow(nightAlpha, 0.5);\\n\\\n\\n\\\n vec4 finalColor = vec4(rgb, mix(clamp(rgbExposure.b, 0.0, 1.0), 1.0, atmosphereAlpha) * smoothstep(0.0, 1.0, czm_morphTime));\\n\\\n\\n\\\n if (mieColor.b > 1.0)\\n\\\n {\\n\\\n // Fade atmosphere below the ellipsoid. As the camera zooms further away from the ellipsoid draw\\n\\\n // a larger atmosphere ring to cover empty space of lower LOD globe tiles.\\n\\\n float strength = mieColor.b;\\n\\\n float minDistance = outerRadius;\\n\\\n float maxDistance = outerRadius * 3.0;\\n\\\n float maxStrengthLerp = 1.0 - clamp((maxDistance - cameraHeight) / (maxDistance - minDistance), 0.0, 1.0);\\n\\\n float maxStrength = mix(100.0, 10000.0, maxStrengthLerp);\\n\\\n strength = min(strength, maxStrength);\\n\\\n float alpha = 1.0 - (strength / maxStrength);\\n\\\n finalColor.a = alpha;\\n\\\n }\\n\\\n\\n\\\n return finalColor;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"varying vec3 v_outerPositionWC;\\n\\\n\\n\\\n#ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\nvarying vec3 v_mieColor;\\n\\\nvarying vec3 v_rayleighColor;\\n\\\n#endif\\n\\\n\\n\\\nvoid main (void)\\n\\\n{\\n\\\n vec3 toCamera = czm_viewerPositionWC - v_outerPositionWC;\\n\\\n vec3 lightDirection = getLightDirection(czm_viewerPositionWC);\\n\\\n vec3 mieColor;\\n\\\n vec3 rayleighColor;\\n\\\n\\n\\\n#ifdef PER_FRAGMENT_ATMOSPHERE\\n\\\n calculateMieColorAndRayleighColor(v_outerPositionWC, mieColor, rayleighColor);\\n\\\n#else\\n\\\n mieColor = v_mieColor;\\n\\\n rayleighColor = v_rayleighColor;\\n\\\n#endif\\n\\\n\\n\\\n gl_FragColor = calculateFinalColor(czm_viewerPositionWC, toCamera, lightDirection, mieColor, rayleighColor);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec4 position;\\n\\\n\\n\\\nvarying vec3 v_outerPositionWC;\\n\\\n\\n\\\n#ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\nvarying vec3 v_mieColor;\\n\\\nvarying vec3 v_rayleighColor;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n vec4 positionWC = czm_model * position;\\n\\\n\\n\\\n#ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\n calculateMieColorAndRayleighColor(positionWC.xyz, v_mieColor, v_rayleighColor);\\n\\\n#endif\\n\\\n v_outerPositionWC = positionWC.xyz;\\n\\\n gl_Position = czm_modelViewProjection * position;\\n\\\n}\\n\\\n\";\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport SkyAtmosphereCommon from \"../Shaders/SkyAtmosphereCommon.js\";\nimport SkyAtmosphereFS from \"../Shaders/SkyAtmosphereFS.js\";\nimport SkyAtmosphereVS from \"../Shaders/SkyAtmosphereVS.js\";\nimport Axis from \"./Axis.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * An atmosphere drawn around the limb of the provided ellipsoid. Based on\n * {@link https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter16.html|Accurate Atmospheric Scattering}\n * in GPU Gems 2.\n * <p>\n * This is only supported in 3D. Atmosphere is faded out when morphing to 2D or Columbus view.\n * </p>\n *\n * @alias SkyAtmosphere\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid that the atmosphere is drawn around.\n *\n * @example\n * scene.skyAtmosphere = new Cesium.SkyAtmosphere();\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Sky%20Atmosphere.html|Sky atmosphere demo in Sandcastle}\n *\n * @see Scene.skyAtmosphere\n */\nfunction SkyAtmosphere(ellipsoid) {\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\n\n /**\n * Determines if the atmosphere is shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = true;\n\n /**\n * Compute atmosphere per-fragment instead of per-vertex.\n * This produces better looking atmosphere with a slight performance penalty.\n *\n * @type {Boolean}\n * @default false\n */\n this.perFragmentAtmosphere = false;\n\n this._ellipsoid = ellipsoid;\n\n var outerEllipsoidScale = 1.025;\n var scaleVector = Cartesian3.multiplyByScalar(\n ellipsoid.radii,\n outerEllipsoidScale,\n new Cartesian3()\n );\n this._scaleMatrix = Matrix4.fromScale(scaleVector);\n this._modelMatrix = new Matrix4();\n\n this._command = new DrawCommand({\n owner: this,\n modelMatrix: this._modelMatrix,\n });\n this._spSkyFromSpace = undefined;\n this._spSkyFromAtmosphere = undefined;\n\n this._flags = undefined;\n\n /**\n * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A hue shift of 1.0 indicates a complete rotation of the hues available.\n * @type {Number}\n * @default 0.0\n */\n this.hueShift = 0.0;\n\n /**\n * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A saturation shift of -1.0 is monochrome.\n * @type {Number}\n * @default 0.0\n */\n this.saturationShift = 0.0;\n\n /**\n * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n * A brightness shift of -1.0 is complete darkness, which will let space show through.\n * @type {Number}\n * @default 0.0\n */\n this.brightnessShift = 0.0;\n\n this._hueSaturationBrightness = new Cartesian3();\n\n // outer radius, inner radius, dynamic atmosphere color flag\n var radiiAndDynamicAtmosphereColor = new Cartesian3();\n\n radiiAndDynamicAtmosphereColor.x =\n ellipsoid.maximumRadius * outerEllipsoidScale;\n radiiAndDynamicAtmosphereColor.y = ellipsoid.maximumRadius;\n\n // Toggles whether the sun position is used. 0 treats the sun as always directly overhead.\n radiiAndDynamicAtmosphereColor.z = 0;\n\n this._radiiAndDynamicAtmosphereColor = radiiAndDynamicAtmosphereColor;\n\n var that = this;\n\n this._command.uniformMap = {\n u_radiiAndDynamicAtmosphereColor: function () {\n return that._radiiAndDynamicAtmosphereColor;\n },\n u_hsbShift: function () {\n that._hueSaturationBrightness.x = that.hueShift;\n that._hueSaturationBrightness.y = that.saturationShift;\n that._hueSaturationBrightness.z = that.brightnessShift;\n return that._hueSaturationBrightness;\n },\n };\n}\n\nObject.defineProperties(SkyAtmosphere.prototype, {\n /**\n * Gets the ellipsoid the atmosphere is drawn around.\n * @memberof SkyAtmosphere.prototype\n *\n * @type {Ellipsoid}\n * @readonly\n */\n ellipsoid: {\n get: function () {\n return this._ellipsoid;\n },\n },\n});\n\n/**\n * @private\n */\nSkyAtmosphere.prototype.setDynamicAtmosphereColor = function (\n enableLighting,\n useSunDirection\n) {\n var lightEnum = enableLighting ? (useSunDirection ? 2.0 : 1.0) : 0.0;\n this._radiiAndDynamicAtmosphereColor.z = lightEnum;\n};\n\nvar scratchModelMatrix = new Matrix4();\n\n/**\n * @private\n */\nSkyAtmosphere.prototype.update = function (frameState, globe) {\n if (!this.show) {\n return undefined;\n }\n\n var mode = frameState.mode;\n if (mode !== SceneMode.SCENE3D && mode !== SceneMode.MORPHING) {\n return undefined;\n }\n\n // The atmosphere is only rendered during the render pass; it is not pickable, it doesn't cast shadows, etc.\n if (!frameState.passes.render) {\n return undefined;\n }\n\n // Align the ellipsoid geometry so it always faces the same direction as the\n // camera to reduce artifacts when rendering atmosphere per-vertex\n var rotationMatrix = Matrix4.fromRotationTranslation(\n frameState.context.uniformState.inverseViewRotation,\n Cartesian3.ZERO,\n scratchModelMatrix\n );\n var rotationOffsetMatrix = Matrix4.multiplyTransformation(\n rotationMatrix,\n Axis.Y_UP_TO_Z_UP,\n scratchModelMatrix\n );\n var modelMatrix = Matrix4.multiply(\n this._scaleMatrix,\n rotationOffsetMatrix,\n scratchModelMatrix\n );\n Matrix4.clone(modelMatrix, this._modelMatrix);\n\n var context = frameState.context;\n\n var colorCorrect = hasColorCorrection(this);\n var translucent = frameState.globeTranslucencyState.translucent;\n var perFragmentAtmosphere =\n this.perFragmentAtmosphere || translucent || !defined(globe) || !globe.show;\n\n var command = this._command;\n\n if (!defined(command.vertexArray)) {\n var geometry = EllipsoidGeometry.createGeometry(\n new EllipsoidGeometry({\n radii: new Cartesian3(1.0, 1.0, 1.0),\n slicePartitions: 256,\n stackPartitions: 256,\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n command.vertexArray = VertexArray.fromGeometry({\n context: context,\n geometry: geometry,\n attributeLocations: GeometryPipeline.createAttributeLocations(geometry),\n bufferUsage: BufferUsage.STATIC_DRAW,\n });\n command.renderState = RenderState.fromCache({\n cull: {\n enabled: true,\n face: CullFace.FRONT,\n },\n blending: BlendingState.ALPHA_BLEND,\n depthMask: false,\n });\n }\n\n var flags = colorCorrect | (perFragmentAtmosphere << 2) | (translucent << 3);\n\n if (flags !== this._flags) {\n this._flags = flags;\n\n var defines = [];\n\n if (colorCorrect) {\n defines.push(\"COLOR_CORRECT\");\n }\n\n if (perFragmentAtmosphere) {\n defines.push(\"PER_FRAGMENT_ATMOSPHERE\");\n }\n\n if (translucent) {\n defines.push(\"GLOBE_TRANSLUCENT\");\n }\n\n var vs = new ShaderSource({\n defines: defines.concat(\"SKY_FROM_SPACE\"),\n sources: [SkyAtmosphereCommon, SkyAtmosphereVS],\n });\n\n var fs = new ShaderSource({\n defines: defines.concat(\"SKY_FROM_SPACE\"),\n sources: [SkyAtmosphereCommon, SkyAtmosphereFS],\n });\n\n this._spSkyFromSpace = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n });\n\n vs = new ShaderSource({\n defines: defines.concat(\"SKY_FROM_ATMOSPHERE\"),\n sources: [SkyAtmosphereCommon, SkyAtmosphereVS],\n });\n\n fs = new ShaderSource({\n defines: defines.concat(\"SKY_FROM_ATMOSPHERE\"),\n sources: [SkyAtmosphereCommon, SkyAtmosphereFS],\n });\n\n this._spSkyFromAtmosphere = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: vs,\n fragmentShaderSource: fs,\n });\n }\n\n var cameraPosition = frameState.camera.positionWC;\n var cameraHeight = Cartesian3.magnitude(cameraPosition);\n\n if (cameraHeight > this._radiiAndDynamicAtmosphereColor.x) {\n // Camera in space\n command.shaderProgram = this._spSkyFromSpace;\n } else {\n // Camera in atmosphere\n command.shaderProgram = this._spSkyFromAtmosphere;\n }\n\n return command;\n};\n\nfunction hasColorCorrection(skyAtmosphere) {\n return !(\n CesiumMath.equalsEpsilon(\n skyAtmosphere.hueShift,\n 0.0,\n CesiumMath.EPSILON7\n ) &&\n CesiumMath.equalsEpsilon(\n skyAtmosphere.saturationShift,\n 0.0,\n CesiumMath.EPSILON7\n ) &&\n CesiumMath.equalsEpsilon(\n skyAtmosphere.brightnessShift,\n 0.0,\n CesiumMath.EPSILON7\n )\n );\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SkyAtmosphere#destroy\n */\nSkyAtmosphere.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * skyAtmosphere = skyAtmosphere && skyAtmosphere.destroy();\n *\n * @see SkyAtmosphere#isDestroyed\n */\nSkyAtmosphere.prototype.destroy = function () {\n var command = this._command;\n command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n this._spSkyFromSpace = this._spSkyFromSpace && this._spSkyFromSpace.destroy();\n this._spSkyFromAtmosphere =\n this._spSkyFromAtmosphere && this._spSkyFromAtmosphere.destroy();\n return destroyObject(this);\n};\nexport default SkyAtmosphere;\n","import BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport loadCubeMap from \"../Renderer/loadCubeMap.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport SkyBoxFS from \"../Shaders/SkyBoxFS.js\";\nimport SkyBoxVS from \"../Shaders/SkyBoxVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * A sky box around the scene to draw stars. The sky box is defined using the True Equator Mean Equinox (TEME) axes.\n * <p>\n * This is only supported in 3D. The sky box is faded out when morphing to 2D or Columbus view. The size of\n * the sky box must not exceed {@link Scene#maximumCubeMapSize}.\n * </p>\n *\n * @alias SkyBox\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Object} [options.sources] The source URL or <code>Image</code> object for each of the six cube map faces. See the example below.\n * @param {Boolean} [options.show=true] Determines if this primitive will be shown.\n *\n *\n * @example\n * scene.skyBox = new Cesium.SkyBox({\n * sources : {\n * positiveX : 'skybox_px.png',\n * negativeX : 'skybox_nx.png',\n * positiveY : 'skybox_py.png',\n * negativeY : 'skybox_ny.png',\n * positiveZ : 'skybox_pz.png',\n * negativeZ : 'skybox_nz.png'\n * }\n * });\n *\n * @see Scene#skyBox\n * @see Transforms.computeTemeToPseudoFixedMatrix\n */\nfunction SkyBox(options) {\n /**\n * The sources used to create the cube map faces: an object\n * with <code>positiveX</code>, <code>negativeX</code>, <code>positiveY</code>,\n * <code>negativeY</code>, <code>positiveZ</code>, and <code>negativeZ</code> properties.\n * These can be either URLs or <code>Image</code> objects.\n *\n * @type Object\n * @default undefined\n */\n this.sources = options.sources;\n this._sources = undefined;\n\n /**\n * Determines if the sky box will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n this._command = new DrawCommand({\n modelMatrix: Matrix4.clone(Matrix4.IDENTITY),\n owner: this,\n });\n this._cubeMap = undefined;\n\n this._attributeLocations = undefined;\n this._useHdr = undefined;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\n * @exception {DeveloperError} this.sources properties must all be the same type.\n */\nSkyBox.prototype.update = function (frameState, useHdr) {\n var that = this;\n\n if (!this.show) {\n return undefined;\n }\n\n if (\n frameState.mode !== SceneMode.SCENE3D &&\n frameState.mode !== SceneMode.MORPHING\n ) {\n return undefined;\n }\n\n // The sky box is only rendered during the render pass; it is not pickable, it doesn't cast shadows, etc.\n if (!frameState.passes.render) {\n return undefined;\n }\n\n var context = frameState.context;\n\n if (this._sources !== this.sources) {\n this._sources = this.sources;\n var sources = this.sources;\n\n //>>includeStart('debug', pragmas.debug);\n if (\n !defined(sources.positiveX) ||\n !defined(sources.negativeX) ||\n !defined(sources.positiveY) ||\n !defined(sources.negativeY) ||\n !defined(sources.positiveZ) ||\n !defined(sources.negativeZ)\n ) {\n throw new DeveloperError(\n \"this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\"\n );\n }\n\n if (\n typeof sources.positiveX !== typeof sources.negativeX ||\n typeof sources.positiveX !== typeof sources.positiveY ||\n typeof sources.positiveX !== typeof sources.negativeY ||\n typeof sources.positiveX !== typeof sources.positiveZ ||\n typeof sources.positiveX !== typeof sources.negativeZ\n ) {\n throw new DeveloperError(\n \"this.sources properties must all be the same type.\"\n );\n }\n //>>includeEnd('debug');\n\n if (typeof sources.positiveX === \"string\") {\n // Given urls for cube-map images. Load them.\n loadCubeMap(context, this._sources).then(function (cubeMap) {\n that._cubeMap = that._cubeMap && that._cubeMap.destroy();\n that._cubeMap = cubeMap;\n });\n } else {\n this._cubeMap = this._cubeMap && this._cubeMap.destroy();\n this._cubeMap = new CubeMap({\n context: context,\n source: sources,\n });\n }\n }\n\n var command = this._command;\n\n if (!defined(command.vertexArray)) {\n command.uniformMap = {\n u_cubeMap: function () {\n return that._cubeMap;\n },\n };\n\n var geometry = BoxGeometry.createGeometry(\n BoxGeometry.fromDimensions({\n dimensions: new Cartesian3(2.0, 2.0, 2.0),\n vertexFormat: VertexFormat.POSITION_ONLY,\n })\n );\n var attributeLocations = (this._attributeLocations = GeometryPipeline.createAttributeLocations(\n geometry\n ));\n\n command.vertexArray = VertexArray.fromGeometry({\n context: context,\n geometry: geometry,\n attributeLocations: attributeLocations,\n bufferUsage: BufferUsage.STATIC_DRAW,\n });\n\n command.renderState = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n });\n }\n\n if (!defined(command.shaderProgram) || this._useHdr !== useHdr) {\n var fs = new ShaderSource({\n defines: [useHdr ? \"HDR\" : \"\"],\n sources: [SkyBoxFS],\n });\n command.shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: SkyBoxVS,\n fragmentShaderSource: fs,\n attributeLocations: this._attributeLocations,\n });\n this._useHdr = useHdr;\n }\n\n if (!defined(this._cubeMap)) {\n return undefined;\n }\n\n return command;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SkyBox#destroy\n */\nSkyBox.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * skyBox = skyBox && skyBox.destroy();\n *\n * @see SkyBox#isDestroyed\n */\nSkyBox.prototype.destroy = function () {\n var command = this._command;\n command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n command.shaderProgram =\n command.shaderProgram && command.shaderProgram.destroy();\n this._cubeMap = this._cubeMap && this._cubeMap.destroy();\n return destroyObject(this);\n};\nexport default SkyBox;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform samplerCube u_cubeMap;\\n\\\n\\n\\\nvarying vec3 v_texCoord;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 color = textureCube(u_cubeMap, normalize(v_texCoord));\\n\\\n gl_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec3 position;\\n\\\n\\n\\\nvarying vec3 v_texCoord;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\\n\\\n gl_Position = czm_projection * vec4(p, 1.0);\\n\\\n v_texCoord = position.xyz;\\n\\\n}\\n\\\n\";\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A ParticleEmitter that emits particles within a sphere.\n * Particles will be positioned randomly within the sphere and have initial velocities emanating from the center of the sphere.\n *\n * @alias SphereEmitter\n * @constructor\n *\n * @param {Number} [radius=1.0] The radius of the sphere in meters.\n */\nfunction SphereEmitter(radius) {\n radius = defaultValue(radius, 1.0);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"radius\", radius, 0.0);\n //>>includeEnd('debug');\n\n this._radius = defaultValue(radius, 1.0);\n}\n\nObject.defineProperties(SphereEmitter.prototype, {\n /**\n * The radius of the sphere in meters.\n * @memberof SphereEmitter.prototype\n * @type {Number}\n * @default 1.0\n */\n radius: {\n get: function () {\n return this._radius;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThan(\"value\", value, 0.0);\n //>>includeEnd('debug');\n this._radius = value;\n },\n },\n});\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize\n */\nSphereEmitter.prototype.emit = function (particle) {\n var theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n var phi = CesiumMath.randomBetween(0.0, CesiumMath.PI);\n var rad = CesiumMath.randomBetween(0.0, this._radius);\n\n var x = rad * Math.cos(theta) * Math.sin(phi);\n var y = rad * Math.sin(theta) * Math.sin(phi);\n var z = rad * Math.cos(phi);\n\n particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n particle.velocity = Cartesian3.normalize(\n particle.position,\n particle.velocity\n );\n};\nexport default SphereEmitter;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Derived classes of this interface evaluate expressions in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias StyleExpression\n * @constructor\n *\n * @see Expression\n * @see ConditionsExpression\n */\nfunction StyleExpression() {}\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Object} [result] The object onto which to store the result.\n * @returns {Boolean|Number|String|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nStyleExpression.prototype.evaluate = function (feature, result) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Evaluates the result of a Color expression, optionally using the provided feature's properties.\n * <p>\n * This is equivalent to {@link StyleExpression#evaluate} but always returns a {@link Color} object.\n * </p>\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nStyleExpression.prototype.evaluateColor = function (feature, result) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {String} functionName Name to give to the generated function.\n * @param {String} propertyNameMap Maps property variable names to shader attribute names.\n * @param {Object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {String} returnType The return type of the generated function.\n *\n * @returns {String} The shader function.\n *\n * @private\n */\nStyleExpression.prototype.getShaderFunction = function (\n functionName,\n propertyNameMap,\n shaderState,\n returnType\n) {\n DeveloperError.throwInstantiationError();\n};\nexport default StyleExpression;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport SunFS from \"../Shaders/SunFS.js\";\nimport SunTextureFS from \"../Shaders/SunTextureFS.js\";\nimport SunVS from \"../Shaders/SunVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\n\n/**\n * Draws a sun billboard.\n * <p>This is only supported in 3D and Columbus view.</p>\n *\n * @alias Sun\n * @constructor\n *\n *\n * @example\n * scene.sun = new Cesium.Sun();\n *\n * @see Scene#sun\n */\nfunction Sun() {\n /**\n * Determines if the sun will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = true;\n\n this._drawCommand = new DrawCommand({\n primitiveType: PrimitiveType.TRIANGLES,\n boundingVolume: new BoundingSphere(),\n owner: this,\n });\n this._commands = {\n drawCommand: this._drawCommand,\n computeCommand: undefined,\n };\n this._boundingVolume = new BoundingSphere();\n this._boundingVolume2D = new BoundingSphere();\n\n this._texture = undefined;\n this._drawingBufferWidth = undefined;\n this._drawingBufferHeight = undefined;\n this._radiusTS = undefined;\n this._size = undefined;\n\n this.glowFactor = 1.0;\n this._glowFactorDirty = false;\n\n this._useHdr = undefined;\n\n var that = this;\n this._uniformMap = {\n u_texture: function () {\n return that._texture;\n },\n u_size: function () {\n return that._size;\n },\n };\n}\n\nObject.defineProperties(Sun.prototype, {\n /**\n * Gets or sets a number that controls how \"bright\" the Sun's lens flare appears\n * to be. Zero shows just the Sun's disc without any flare.\n * Use larger values for a more pronounced flare around the Sun.\n *\n * @memberof Sun.prototype\n * @type {Number}\n * @default 1.0\n */\n glowFactor: {\n get: function () {\n return this._glowFactor;\n },\n set: function (glowFactor) {\n glowFactor = Math.max(glowFactor, 0.0);\n this._glowFactor = glowFactor;\n this._glowFactorDirty = true;\n },\n },\n});\n\nvar scratchPositionWC = new Cartesian2();\nvar scratchLimbWC = new Cartesian2();\nvar scratchPositionEC = new Cartesian4();\nvar scratchCartesian4 = new Cartesian4();\n\n/**\n * @private\n */\nSun.prototype.update = function (frameState, passState, useHdr) {\n if (!this.show) {\n return undefined;\n }\n\n var mode = frameState.mode;\n if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n return undefined;\n }\n\n if (!frameState.passes.render) {\n return undefined;\n }\n\n var context = frameState.context;\n var drawingBufferWidth = passState.viewport.width;\n var drawingBufferHeight = passState.viewport.height;\n\n if (\n !defined(this._texture) ||\n drawingBufferWidth !== this._drawingBufferWidth ||\n drawingBufferHeight !== this._drawingBufferHeight ||\n this._glowFactorDirty ||\n useHdr !== this._useHdr\n ) {\n this._texture = this._texture && this._texture.destroy();\n this._drawingBufferWidth = drawingBufferWidth;\n this._drawingBufferHeight = drawingBufferHeight;\n this._glowFactorDirty = false;\n this._useHdr = useHdr;\n\n var size = Math.max(drawingBufferWidth, drawingBufferHeight);\n size = Math.pow(2.0, Math.ceil(Math.log(size) / Math.log(2.0)) - 2.0);\n\n // The size computed above can be less than 1.0 if size < 4.0. This will probably\n // never happen in practice, but does in the tests. Clamp to 1.0 to prevent WebGL\n // errors in the tests.\n size = Math.max(1.0, size);\n\n var pixelDatatype = useHdr\n ? context.halfFloatingPointTexture\n ? PixelDatatype.HALF_FLOAT\n : PixelDatatype.FLOAT\n : PixelDatatype.UNSIGNED_BYTE;\n this._texture = new Texture({\n context: context,\n width: size,\n height: size,\n pixelFormat: PixelFormat.RGBA,\n pixelDatatype: pixelDatatype,\n });\n\n this._glowLengthTS = this._glowFactor * 5.0;\n this._radiusTS = (1.0 / (1.0 + 2.0 * this._glowLengthTS)) * 0.5;\n\n var that = this;\n var uniformMap = {\n u_radiusTS: function () {\n return that._radiusTS;\n },\n };\n\n this._commands.computeCommand = new ComputeCommand({\n fragmentShaderSource: SunTextureFS,\n outputTexture: this._texture,\n uniformMap: uniformMap,\n persists: false,\n owner: this,\n postExecute: function () {\n that._commands.computeCommand = undefined;\n },\n });\n }\n\n var drawCommand = this._drawCommand;\n\n if (!defined(drawCommand.vertexArray)) {\n var attributeLocations = {\n direction: 0,\n };\n\n var directions = new Uint8Array(4 * 2);\n directions[0] = 0;\n directions[1] = 0;\n\n directions[2] = 255;\n directions[3] = 0.0;\n\n directions[4] = 255;\n directions[5] = 255;\n\n directions[6] = 0.0;\n directions[7] = 255;\n\n var vertexBuffer = Buffer.createVertexBuffer({\n context: context,\n typedArray: directions,\n usage: BufferUsage.STATIC_DRAW,\n });\n var attributes = [\n {\n index: attributeLocations.direction,\n vertexBuffer: vertexBuffer,\n componentsPerAttribute: 2,\n normalize: true,\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n },\n ];\n // Workaround Internet Explorer 11.0.8 lack of TRIANGLE_FAN\n var indexBuffer = Buffer.createIndexBuffer({\n context: context,\n typedArray: new Uint16Array([0, 1, 2, 0, 2, 3]),\n usage: BufferUsage.STATIC_DRAW,\n indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n });\n drawCommand.vertexArray = new VertexArray({\n context: context,\n attributes: attributes,\n indexBuffer: indexBuffer,\n });\n\n drawCommand.shaderProgram = ShaderProgram.fromCache({\n context: context,\n vertexShaderSource: SunVS,\n fragmentShaderSource: SunFS,\n attributeLocations: attributeLocations,\n });\n\n drawCommand.renderState = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n });\n drawCommand.uniformMap = this._uniformMap;\n }\n\n var sunPosition = context.uniformState.sunPositionWC;\n var sunPositionCV = context.uniformState.sunPositionColumbusView;\n\n var boundingVolume = this._boundingVolume;\n var boundingVolume2D = this._boundingVolume2D;\n\n Cartesian3.clone(sunPosition, boundingVolume.center);\n boundingVolume2D.center.x = sunPositionCV.z;\n boundingVolume2D.center.y = sunPositionCV.x;\n boundingVolume2D.center.z = sunPositionCV.y;\n\n boundingVolume.radius =\n CesiumMath.SOLAR_RADIUS + CesiumMath.SOLAR_RADIUS * this._glowLengthTS;\n boundingVolume2D.radius = boundingVolume.radius;\n\n if (mode === SceneMode.SCENE3D) {\n BoundingSphere.clone(boundingVolume, drawCommand.boundingVolume);\n } else if (mode === SceneMode.COLUMBUS_VIEW) {\n BoundingSphere.clone(boundingVolume2D, drawCommand.boundingVolume);\n }\n\n var position = SceneTransforms.computeActualWgs84Position(\n frameState,\n sunPosition,\n scratchCartesian4\n );\n\n var dist = Cartesian3.magnitude(\n Cartesian3.subtract(position, frameState.camera.position, scratchCartesian4)\n );\n var projMatrix = context.uniformState.projection;\n\n var positionEC = scratchPositionEC;\n positionEC.x = 0;\n positionEC.y = 0;\n positionEC.z = -dist;\n positionEC.w = 1;\n\n var positionCC = Matrix4.multiplyByVector(\n projMatrix,\n positionEC,\n scratchCartesian4\n );\n var positionWC = SceneTransforms.clipToGLWindowCoordinates(\n passState.viewport,\n positionCC,\n scratchPositionWC\n );\n\n positionEC.x = CesiumMath.SOLAR_RADIUS;\n var limbCC = Matrix4.multiplyByVector(\n projMatrix,\n positionEC,\n scratchCartesian4\n );\n var limbWC = SceneTransforms.clipToGLWindowCoordinates(\n passState.viewport,\n limbCC,\n scratchLimbWC\n );\n\n this._size = Cartesian2.magnitude(\n Cartesian2.subtract(limbWC, positionWC, scratchCartesian4)\n );\n this._size = 2.0 * this._size * (1.0 + 2.0 * this._glowLengthTS);\n this._size = Math.ceil(this._size);\n\n return this._commands;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Sun#destroy\n */\nSun.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * sun = sun && sun.destroy();\n *\n * @see Sun#isDestroyed\n */\nSun.prototype.destroy = function () {\n var command = this._drawCommand;\n command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n command.shaderProgram =\n command.shaderProgram && command.shaderProgram.destroy();\n\n this._texture = this._texture && this._texture.destroy();\n\n return destroyObject(this);\n};\nexport default Sun;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform float u_radiusTS;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec2 rotate(vec2 p, vec2 direction)\\n\\\n{\\n\\\n return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);\\n\\\n}\\n\\\n\\n\\\nvec4 addBurst(vec2 position, vec2 direction, float lengthScalar)\\n\\\n{\\n\\\n vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);\\n\\\n float radius = length(rotatedPosition) * lengthScalar;\\n\\\n float burst = 1.0 - smoothstep(0.0, 0.55, radius);\\n\\\n return vec4(burst);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n float lengthScalar = 2.0 / sqrt(2.0);\\n\\\n vec2 position = v_textureCoordinates - vec2(0.5);\\n\\\n float radius = length(position) * lengthScalar;\\n\\\n float surface = step(radius, u_radiusTS);\\n\\\n vec4 color = vec4(vec2(1.0), surface + 0.2, surface);\\n\\\n\\n\\\n float glow = 1.0 - smoothstep(0.0, 0.55, radius);\\n\\\n color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;\\n\\\n\\n\\\n vec4 burst = vec4(0.0);\\n\\\n\\n\\\n // The following loop has been manually unrolled for speed, to\\n\\\n // avoid sin() and cos().\\n\\\n //\\n\\\n //for (float i = 0.4; i < 3.2; i += 1.047) {\\n\\\n // vec2 direction = vec2(sin(i), cos(i));\\n\\\n // burst += 0.4 * addBurst(position, direction, lengthScalar);\\n\\\n //\\n\\\n // direction = vec2(sin(i - 0.08), cos(i - 0.08));\\n\\\n // burst += 0.3 * addBurst(position, direction, lengthScalar);\\n\\\n //}\\n\\\n\\n\\\n burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4\\n\\\n burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047\\n\\\n burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0\\n\\\n\\n\\\n burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08\\n\\\n burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08\\n\\\n burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08\\n\\\n\\n\\\n // End of manual loop unrolling.\\n\\\n\\n\\\n color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;\\n\\\n\\n\\\n gl_FragColor = clamp(color, vec4(0.0), vec4(1.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"attribute vec2 direction;\\n\\\n\\n\\\nuniform float u_size;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main() \\n\\\n{\\n\\\n vec4 position;\\n\\\n if (czm_morphTime == 1.0)\\n\\\n {\\n\\\n position = vec4(czm_sunPositionWC, 1.0);\\n\\\n }\\n\\\n else\\n\\\n {\\n\\\n position = vec4(czm_sunPositionColumbusView.zxy, 1.0);\\n\\\n }\\n\\\n \\n\\\n vec4 positionEC = czm_view * position;\\n\\\n vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n \\n\\\n vec2 halfSize = vec2(u_size * 0.5);\\n\\\n halfSize *= ((direction * 2.0) - 1.0);\\n\\\n \\n\\\n gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);\\n\\\n \\n\\\n v_textureCoordinates = direction;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_texture;\\n\\\n\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n vec4 color = texture2D(u_texture, v_textureCoordinates);\\n\\\n gl_FragColor = czm_gammaCorrect(color);\\n\\\n}\\n\\\n\";\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines a bounding volume for a tile. This type describes an interface\n * and is not intended to be instantiated directly.\n *\n * @alias TileBoundingVolume\n * @constructor\n *\n * @see TileBoundingRegion\n * @see TileBoundingSphere\n * @see TileOrientedBoundingBox\n *\n * @private\n */\nfunction TileBoundingVolume() {}\n\n/**\n * The underlying bounding volume.\n *\n * @type {Object}\n * @readonly\n */\nTileBoundingVolume.prototype.boundingVolume = undefined;\n\n/**\n * The underlying bounding sphere.\n *\n * @type {BoundingSphere}\n * @readonly\n */\nTileBoundingVolume.prototype.boundingSphere = undefined;\n\n/**\n * Calculates the distance between the tile and the camera.\n *\n * @param {FrameState} frameState The frame state.\n * @return {Number} The distance between the tile and the camera, in meters.\n * Returns 0.0 if the camera is inside the tile.\n */\nTileBoundingVolume.prototype.distanceToCamera = function (frameState) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Determines which side of a plane this volume is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire volume is on the side of the plane\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire volume is\n * on the opposite side, and {@link Intersect.INTERSECTING} if the volume\n * intersects the plane.\n */\nTileBoundingVolume.prototype.intersectPlane = function (plane) {\n DeveloperError.throwInstantiationError();\n};\n\n/**\n * Creates a debug primitive that shows the outline of the tile bounding\n * volume.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileBoundingVolume.prototype.createDebugVolume = function (color) {\n DeveloperError.throwInstantiationError();\n};\nexport default TileBoundingVolume;\n","import Color from \"../Core/Color.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport when from \"../ThirdParty/when.js\";\n\n/**\n * @typedef {Object} TileCoordinatesImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileCoordinatesImageryProvider constructor\n *\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme for which to draw tiles.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the WGS84 ellipsoid is used.\n * @property {Color} [color=Color.YELLOW] The color to draw the tile box and label.\n * @property {Number} [tileWidth=256] The width of the tile for level-of-detail selection purposes.\n * @property {Number} [tileHeight=256] The height of the tile for level-of-detail selection purposes.\n */\n\n/**\n * An {@link ImageryProvider} that draws a box around every rendered tile in the tiling scheme, and draws\n * a label inside it indicating the X, Y, Level coordinates of the tile. This is mostly useful for\n * debugging terrain and imagery rendering problems.\n *\n * @alias TileCoordinatesImageryProvider\n * @constructor\n *\n * @param {TileCoordinatesImageryProvider.ConstructorOptions} [options] Object describing initialization options\n */\nfunction TileCoordinatesImageryProvider(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n this._tilingScheme = defined(options.tilingScheme)\n ? options.tilingScheme\n : new GeographicTilingScheme({ ellipsoid: options.ellipsoid });\n this._color = defaultValue(options.color, Color.YELLOW);\n this._errorEvent = new Event();\n this._tileWidth = defaultValue(options.tileWidth, 256);\n this._tileHeight = defaultValue(options.tileHeight, 256);\n this._readyPromise = when.resolve(true);\n\n /**\n * The default alpha blending value of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultAlpha = undefined;\n\n /**\n * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultNightAlpha = undefined;\n\n /**\n * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and\n * 1.0 representing fully opaque.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultDayAlpha = undefined;\n\n /**\n * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0\n * makes the imagery darker while greater than 1.0 makes it brighter.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultBrightness = undefined;\n\n /**\n * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces\n * the contrast while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultContrast = undefined;\n\n /**\n * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultHue = undefined;\n\n /**\n * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n * saturation while greater than 1.0 increases it.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultSaturation = undefined;\n\n /**\n * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.defaultGamma = undefined;\n\n /**\n * The default texture minification filter to apply to this provider.\n *\n * @type {TextureMinificationFilter}\n * @default undefined\n */\n this.defaultMinificationFilter = undefined;\n\n /**\n * The default texture magnification filter to apply to this provider.\n *\n * @type {TextureMagnificationFilter}\n * @default undefined\n */\n this.defaultMagnificationFilter = undefined;\n}\n\nObject.defineProperties(TileCoordinatesImageryProvider.prototype, {\n /**\n * Gets the proxy used by this provider.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Proxy}\n * @readonly\n */\n proxy: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the width of each tile, in pixels. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileWidth: {\n get: function () {\n return this._tileWidth;\n },\n },\n\n /**\n * Gets the height of each tile, in pixels. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n tileHeight: {\n get: function () {\n return this._tileHeight;\n },\n },\n\n /**\n * Gets the maximum level-of-detail that can be requested. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Number|undefined}\n * @readonly\n */\n maximumLevel: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the minimum level-of-detail that can be requested. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Number}\n * @readonly\n */\n minimumLevel: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets the tiling scheme used by this provider. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: function () {\n return this._tilingScheme;\n },\n },\n\n /**\n * Gets the rectangle, in radians, of the imagery provided by this instance. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Rectangle}\n * @readonly\n */\n rectangle: {\n get: function () {\n return this._tilingScheme.rectangle;\n },\n },\n\n /**\n * Gets the tile discard policy. If not undefined, the discard policy is responsible\n * for filtering out \"missing\" tiles via its shouldDiscardImage function. If this function\n * returns undefined, no tiles are filtered. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {TileDiscardPolicy}\n * @readonly\n */\n tileDiscardPolicy: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets an event that is raised when the imagery provider encounters an asynchronous error. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: function () {\n return this._errorEvent;\n },\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: function () {\n return true;\n },\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Promise.<Boolean>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise;\n },\n },\n\n /**\n * Gets the credit to display when this imagery provider is active. Typically this is used to credit\n * the source of the imagery. This function should not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: function () {\n return undefined;\n },\n },\n\n /**\n * Gets a value indicating whether or not the images provided by this imagery provider\n * include an alpha channel. If this property is false, an alpha channel, if present, will\n * be ignored. If this property is true, any images without an alpha channel will be treated\n * as if their alpha is 1.0 everywhere. Setting this property to false reduces memory usage\n * and texture upload time.\n * @memberof TileCoordinatesImageryProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasAlphaChannel: {\n get: function () {\n return true;\n },\n },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n *\n * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.\n */\nTileCoordinatesImageryProvider.prototype.getTileCredits = function (\n x,\n y,\n level\n) {\n return undefined;\n};\n\n/**\n * Requests the image for a given tile. This function should\n * not be called before {@link TileCoordinatesImageryProvider#ready} returns true.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<HTMLImageElement|HTMLCanvasElement>|undefined} A promise for the image that will resolve when the image is available, or\n * undefined if there are too many active requests to the server, and the request\n * should be retried later. The resolved image may be either an\n * Image or a Canvas DOM object.\n */\nTileCoordinatesImageryProvider.prototype.requestImage = function (\n x,\n y,\n level,\n request\n) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = 256;\n canvas.height = 256;\n var context = canvas.getContext(\"2d\");\n\n var cssColor = this._color.toCssColorString();\n\n context.strokeStyle = cssColor;\n context.lineWidth = 2;\n context.strokeRect(1, 1, 255, 255);\n\n context.font = \"bold 25px Arial\";\n context.textAlign = \"center\";\n context.fillStyle = cssColor;\n context.fillText(\"L: \" + level, 124, 86);\n context.fillText(\"X: \" + x, 124, 136);\n context.fillText(\"Y: \" + y, 124, 186);\n\n return canvas;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {Number} x The tile X coordinate.\n * @param {Number} y The tile Y coordinate.\n * @param {Number} level The tile level.\n * @param {Number} longitude The longitude at which to pick features.\n * @param {Number} latitude The latitude at which to pick features.\n * @return {Promise.<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}\n * instances. The array may be empty if no features are found at the given location.\n * It may also be undefined if picking is not supported.\n */\nTileCoordinatesImageryProvider.prototype.pickFeatures = function (\n x,\n y,\n level,\n longitude,\n latitude\n) {\n return undefined;\n};\nexport default TileCoordinatesImageryProvider;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A policy for discarding tile images according to some criteria. This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TileDiscardPolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n * @see NeverTileDiscardPolicy\n */\nfunction TileDiscardPolicy(options) {\n DeveloperError.throwInstantiationError();\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @function\n *\n * @returns {Boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nTileDiscardPolicy.prototype.isReady = DeveloperError.throwInstantiationError;\n\n/**\n * Given a tile image, decide whether to discard that image.\n * @function\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {Boolean} True if the image should be discarded; otherwise, false.\n */\nTileDiscardPolicy.prototype.shouldDiscardImage =\n DeveloperError.throwInstantiationError;\nexport default TileDiscardPolicy;\n","/**\n * @private\n */\nvar TileState = {\n START: 0,\n LOADING: 1,\n READY: 2,\n UPSAMPLED_ONLY: 3,\n};\nexport default Object.freeze(TileState);\n","import arrayFill from \"../Core/arrayFill.js\";\nimport Check from \"../Core/Check.js\";\nimport combine from \"../Core/combine.js\";\nimport defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport when from \"../ThirdParty/when.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport PointCloud from \"./PointCloud.js\";\nimport PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\nimport PointCloudShading from \"./PointCloudShading.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\n/**\n * Provides playback of time-dynamic point cloud data.\n * <p>\n * Point cloud frames are prefetched in intervals determined by the average frame load time and the current clock speed.\n * If intermediate frames cannot be loaded in time to meet playback speed, they will be skipped. If frames are sufficiently\n * small or the clock is sufficiently slow then no frames will be skipped.\n * </p>\n *\n * @alias TimeDynamicPointCloud\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Clock} options.clock A {@link Clock} instance that is used when determining the value for the time dimension.\n * @param {TimeIntervalCollection} options.intervals A {@link TimeIntervalCollection} with its data property being an object containing a <code>uri</code> to a 3D Tiles Point Cloud tile and an optional <code>transform</code>.\n * @param {Boolean} [options.show=true] Determines if the point cloud will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] A 4x4 transformation matrix that transforms the point cloud.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the point cloud casts or receives shadows from light sources.\n * @param {Number} [options.maximumMemoryUsage=256] The maximum amount of memory in MB that can be used by the point cloud.\n * @param {Object} [options.shading] Options for constructing a {@link PointCloudShading} object to control point attenuation and eye dome lighting.\n * @param {Cesium3DTileStyle} [options.style] The style, defined using the {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}, applied to each point in the point cloud.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud.\n */\nfunction TimeDynamicPointCloud(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options.clock\", options.clock);\n Check.typeOf.object(\"options.intervals\", options.intervals);\n //>>includeEnd('debug');\n\n /**\n * Determines if the point cloud will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true);\n\n /**\n * A 4x4 transformation matrix that transforms the point cloud.\n *\n * @type {Matrix4}\n * @default Matrix4.IDENTITY\n */\n this.modelMatrix = Matrix4.clone(\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\n );\n\n /**\n * Determines whether the point cloud casts or receives shadows from light sources.\n * <p>\n * Enabling shadows has a performance impact. A point cloud that casts shadows must be rendered twice, once from the camera and again from the light's point of view.\n * </p>\n * <p>\n * Shadows are rendered only when {@link Viewer#shadows} is <code>true</code>.\n * </p>\n *\n * @type {ShadowMode}\n * @default ShadowMode.ENABLED\n */\n this.shadows = defaultValue(options.shadows, ShadowMode.ENABLED);\n\n /**\n * The maximum amount of GPU memory (in MB) that may be used to cache point cloud frames.\n * <p>\n * Frames that are not being loaded or rendered are unloaded to enforce this.\n * </p>\n * <p>\n * If decreasing this value results in unloading tiles, the tiles are unloaded the next frame.\n * </p>\n *\n * @type {Number}\n * @default 256\n *\n * @see TimeDynamicPointCloud#totalMemoryUsageInBytes\n */\n this.maximumMemoryUsage = defaultValue(options.maximumMemoryUsage, 256);\n\n /**\n * Options for controlling point size based on geometric error and eye dome lighting.\n * @type {PointCloudShading}\n */\n this.shading = new PointCloudShading(options.shading);\n\n /**\n * The style, defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language},\n * applied to each point in the point cloud.\n * <p>\n * Assign <code>undefined</code> to remove the style, which will restore the visual\n * appearance of the point cloud to its default when no style was applied.\n * </p>\n *\n * @type {Cesium3DTileStyle}\n *\n * @example\n * pointCloud.style = new Cesium.Cesium3DTileStyle({\n * color : {\n * conditions : [\n * ['${Classification} === 0', 'color(\"purple\", 0.5)'],\n * ['${Classification} === 1', 'color(\"red\")'],\n * ['true', '${COLOR}']\n * ]\n * },\n * show : '${Classification} !== 2'\n * });\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/master/specification/Styling|3D Tiles Styling language}\n */\n this.style = options.style;\n\n /**\n * The event fired to indicate that a frame failed to load. A frame may fail to load if the\n * request for its uri fails or processing fails due to invalid content.\n * <p>\n * If there are no event listeners, error messages will be logged to the console.\n * </p>\n * <p>\n * The error object passed to the listener contains two properties:\n * <ul>\n * <li><code>uri</code>: the uri of the failed frame.</li>\n * <li><code>message</code>: the error message.</li>\n * </ul>\n *\n * @type {Event}\n * @default new Event()\n *\n * @example\n * pointCloud.frameFailed.addEventListener(function(error) {\n * console.log('An error occurred loading frame: ' + error.uri);\n * console.log('Error: ' + error.message);\n * });\n */\n this.frameFailed = new Event();\n\n /**\n * The event fired to indicate that a new frame was rendered.\n * <p>\n * The time dynamic point cloud {@link TimeDynamicPointCloud} is passed to the event listener.\n * </p>\n * @type {Event}\n * @default new Event()\n *\n * @example\n * pointCloud.frameChanged.addEventListener(function(timeDynamicPointCloud) {\n * viewer.camera.viewBoundingSphere(timeDynamicPointCloud.boundingSphere);\n * });\n */\n this.frameChanged = new Event();\n\n this._clock = options.clock;\n this._intervals = options.intervals;\n this._clippingPlanes = undefined;\n this.clippingPlanes = options.clippingPlanes; // Call setter\n this._pointCloudEyeDomeLighting = new PointCloudEyeDomeLighting();\n this._loadTimestamp = undefined;\n this._clippingPlanesState = 0;\n this._styleDirty = false;\n this._pickId = undefined;\n this._totalMemoryUsageInBytes = 0;\n this._frames = [];\n this._previousInterval = undefined;\n this._nextInterval = undefined;\n this._lastRenderedFrame = undefined;\n this._clockMultiplier = 0.0;\n this._readyPromise = when.defer();\n\n // For calculating average load time of the last N frames\n this._runningSum = 0.0;\n this._runningLength = 0;\n this._runningIndex = 0;\n this._runningSamples = arrayFill(new Array(5), 0.0);\n this._runningAverage = 0.0;\n}\n\nObject.defineProperties(TimeDynamicPointCloud.prototype, {\n /**\n * The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud.\n *\n * @memberof TimeDynamicPointCloud.prototype\n *\n * @type {ClippingPlaneCollection}\n */\n clippingPlanes: {\n get: function () {\n return this._clippingPlanes;\n },\n set: function (value) {\n ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n },\n },\n\n /**\n * The total amount of GPU memory in bytes used by the point cloud.\n *\n * @memberof TimeDynamicPointCloud.prototype\n *\n * @type {Number}\n * @readonly\n *\n * @see TimeDynamicPointCloud#maximumMemoryUsage\n */\n totalMemoryUsageInBytes: {\n get: function () {\n return this._totalMemoryUsageInBytes;\n },\n },\n\n /**\n * The bounding sphere of the frame being rendered. Returns <code>undefined</code> if no frame is being rendered.\n *\n * @memberof TimeDynamicPointCloud.prototype\n *\n * @type {BoundingSphere}\n * @readonly\n */\n boundingSphere: {\n get: function () {\n if (defined(this._lastRenderedFrame)) {\n return this._lastRenderedFrame.pointCloud.boundingSphere;\n }\n return undefined;\n },\n },\n\n /**\n * Gets the promise that will be resolved when the point cloud renders a frame for the first time.\n *\n * @memberof TimeDynamicPointCloud.prototype\n *\n * @type {Promise.<TimeDynamicPointCloud>}\n * @readonly\n */\n readyPromise: {\n get: function () {\n return this._readyPromise.promise;\n },\n },\n});\n\nfunction getFragmentShaderLoaded(fs) {\n return \"uniform vec4 czm_pickColor;\\n\" + fs;\n}\n\nfunction getUniformMapLoaded(stream) {\n return function (uniformMap) {\n return combine(uniformMap, {\n czm_pickColor: function () {\n return stream._pickId.color;\n },\n });\n };\n}\n\nfunction getPickIdLoaded() {\n return \"czm_pickColor\";\n}\n\n/**\n * Marks the point cloud's {@link TimeDynamicPointCloud#style} as dirty, which forces all\n * points to re-evaluate the style in the next frame.\n */\nTimeDynamicPointCloud.prototype.makeStyleDirty = function () {\n this._styleDirty = true;\n};\n\n/**\n * Exposed for testing.\n *\n * @private\n */\nTimeDynamicPointCloud.prototype._getAverageLoadTime = function () {\n if (this._runningLength === 0) {\n // Before any frames have loaded make a best guess about the average load time\n return 0.05;\n }\n return this._runningAverage;\n};\n\nvar scratchDate = new JulianDate();\n\nfunction getClockMultiplier(that) {\n var clock = that._clock;\n var isAnimating = clock.canAnimate && clock.shouldAnimate;\n var multiplier = clock.multiplier;\n return isAnimating ? multiplier : 0.0;\n}\n\nfunction getIntervalIndex(that, interval) {\n return that._intervals.indexOf(interval.start);\n}\n\nfunction getNextInterval(that, currentInterval) {\n var intervals = that._intervals;\n var clock = that._clock;\n var multiplier = getClockMultiplier(that);\n\n if (multiplier === 0.0) {\n return undefined;\n }\n\n var averageLoadTime = that._getAverageLoadTime();\n var time = JulianDate.addSeconds(\n clock.currentTime,\n averageLoadTime * multiplier,\n scratchDate\n );\n var index = intervals.indexOf(time);\n\n var currentIndex = getIntervalIndex(that, currentInterval);\n if (index === currentIndex) {\n if (multiplier >= 0) {\n ++index;\n } else {\n --index;\n }\n }\n\n // Returns undefined if not in range\n return intervals.get(index);\n}\n\nfunction getCurrentInterval(that) {\n var intervals = that._intervals;\n var clock = that._clock;\n var time = clock.currentTime;\n var index = intervals.indexOf(time);\n\n // Returns undefined if not in range\n return intervals.get(index);\n}\n\nfunction reachedInterval(that, currentInterval, nextInterval) {\n var multiplier = getClockMultiplier(that);\n var currentIndex = getIntervalIndex(that, currentInterval);\n var nextIndex = getIntervalIndex(that, nextInterval);\n\n if (multiplier >= 0) {\n return currentIndex >= nextIndex;\n }\n return currentIndex <= nextIndex;\n}\n\nfunction handleFrameFailure(that, uri) {\n return function (error) {\n var message = defined(error.message) ? error.message : error.toString();\n if (that.frameFailed.numberOfListeners > 0) {\n that.frameFailed.raiseEvent({\n uri: uri,\n message: message,\n });\n } else {\n console.log(\"A frame failed to load: \" + uri);\n console.log(\"Error: \" + message);\n }\n };\n}\n\nfunction requestFrame(that, interval, frameState) {\n var index = getIntervalIndex(that, interval);\n var frames = that._frames;\n var frame = frames[index];\n if (!defined(frame)) {\n var transformArray = interval.data.transform;\n var transform = defined(transformArray)\n ? Matrix4.fromArray(transformArray)\n : undefined;\n var uri = interval.data.uri;\n frame = {\n pointCloud: undefined,\n transform: transform,\n timestamp: getTimestamp(),\n sequential: true,\n ready: false,\n touchedFrameNumber: frameState.frameNumber,\n };\n frames[index] = frame;\n Resource.fetchArrayBuffer({\n url: uri,\n })\n .then(function (arrayBuffer) {\n // PERFORMANCE_IDEA: share a memory pool, render states, shaders, and other resources among all\n // frames. Each frame just needs an index/offset into the pool.\n frame.pointCloud = new PointCloud({\n arrayBuffer: arrayBuffer,\n cull: true,\n fragmentShaderLoaded: getFragmentShaderLoaded,\n uniformMapLoaded: getUniformMapLoaded(that),\n pickIdLoaded: getPickIdLoaded,\n });\n return frame.pointCloud.readyPromise;\n })\n .otherwise(handleFrameFailure(that, uri));\n }\n return frame;\n}\n\nfunction updateAverageLoadTime(that, loadTime) {\n that._runningSum += loadTime;\n that._runningSum -= that._runningSamples[that._runningIndex];\n that._runningSamples[that._runningIndex] = loadTime;\n that._runningLength = Math.min(\n that._runningLength + 1,\n that._runningSamples.length\n );\n that._runningIndex = (that._runningIndex + 1) % that._runningSamples.length;\n that._runningAverage = that._runningSum / that._runningLength;\n}\n\nfunction prepareFrame(that, frame, updateState, frameState) {\n if (frame.touchedFrameNumber < frameState.frameNumber - 1) {\n // If this frame was not loaded in sequential updates then it can't be used it for calculating the average load time.\n // For example: selecting a frame on the timeline, selecting another frame before the request finishes, then selecting this frame later.\n frame.sequential = false;\n }\n\n var pointCloud = frame.pointCloud;\n\n if (defined(pointCloud) && !frame.ready) {\n // Call update to prepare renderer resources. Don't render anything yet.\n var commandList = frameState.commandList;\n var lengthBeforeUpdate = commandList.length;\n renderFrame(that, frame, updateState, frameState);\n\n if (pointCloud.ready) {\n // Point cloud became ready this update\n frame.ready = true;\n that._totalMemoryUsageInBytes += pointCloud.geometryByteLength;\n commandList.length = lengthBeforeUpdate; // Don't allow preparing frame to insert commands.\n if (frame.sequential) {\n // Update the values used to calculate average load time\n var loadTime = (getTimestamp() - frame.timestamp) / 1000.0;\n updateAverageLoadTime(that, loadTime);\n }\n }\n }\n\n frame.touchedFrameNumber = frameState.frameNumber;\n}\n\nvar scratchModelMatrix = new Matrix4();\n\nfunction getGeometricError(that, pointCloud) {\n var shading = that.shading;\n if (defined(shading) && defined(shading.baseResolution)) {\n return shading.baseResolution;\n } else if (defined(pointCloud.boundingSphere)) {\n return CesiumMath.cbrt(\n pointCloud.boundingSphere.volume() / pointCloud.pointsLength\n );\n }\n return 0.0;\n}\n\nfunction getMaximumAttenuation(that) {\n var shading = that.shading;\n if (defined(shading) && defined(shading.maximumAttenuation)) {\n return shading.maximumAttenuation;\n }\n\n // Return a hardcoded maximum attenuation. For a tileset this would instead be the maximum screen space error.\n return 10.0;\n}\n\nvar defaultShading = new PointCloudShading();\n\nfunction renderFrame(that, frame, updateState, frameState) {\n var shading = defaultValue(that.shading, defaultShading);\n var pointCloud = frame.pointCloud;\n var transform = defaultValue(frame.transform, Matrix4.IDENTITY);\n pointCloud.modelMatrix = Matrix4.multiplyTransformation(\n that.modelMatrix,\n transform,\n scratchModelMatrix\n );\n pointCloud.style = that.style;\n pointCloud.time = updateState.timeSinceLoad;\n pointCloud.shadows = that.shadows;\n pointCloud.clippingPlanes = that._clippingPlanes;\n pointCloud.isClipped = updateState.isClipped;\n pointCloud.attenuation = shading.attenuation;\n pointCloud.backFaceCulling = shading.backFaceCulling;\n pointCloud.normalShading = shading.normalShading;\n pointCloud.geometricError = getGeometricError(that, pointCloud);\n pointCloud.geometricErrorScale = shading.geometricErrorScale;\n pointCloud.maximumAttenuation = getMaximumAttenuation(that);\n\n pointCloud.update(frameState);\n frame.touchedFrameNumber = frameState.frameNumber;\n}\n\nfunction loadFrame(that, interval, updateState, frameState) {\n var frame = requestFrame(that, interval, frameState);\n prepareFrame(that, frame, updateState, frameState);\n}\n\nfunction getUnloadCondition(frameState) {\n return function (frame) {\n // Unload all frames that aren't currently being loaded or rendered\n return frame.touchedFrameNumber < frameState.frameNumber;\n };\n}\n\nfunction unloadFrames(that, unloadCondition) {\n var frames = that._frames;\n var length = frames.length;\n for (var i = 0; i < length; ++i) {\n var frame = frames[i];\n if (defined(frame)) {\n if (!defined(unloadCondition) || unloadCondition(frame)) {\n var pointCloud = frame.pointCloud;\n if (frame.ready) {\n that._totalMemoryUsageInBytes -= pointCloud.geometryByteLength;\n }\n if (defined(pointCloud)) {\n pointCloud.destroy();\n }\n if (frame === that._lastRenderedFrame) {\n that._lastRenderedFrame = undefined;\n }\n frames[i] = undefined;\n }\n }\n }\n}\n\nfunction getFrame(that, interval) {\n var index = getIntervalIndex(that, interval);\n var frame = that._frames[index];\n if (defined(frame) && frame.ready) {\n return frame;\n }\n}\n\nfunction updateInterval(that, interval, frame, updateState, frameState) {\n if (defined(frame)) {\n if (frame.ready) {\n return true;\n }\n loadFrame(that, interval, updateState, frameState);\n return frame.ready;\n }\n return false;\n}\n\nfunction getNearestReadyInterval(\n that,\n previousInterval,\n currentInterval,\n updateState,\n frameState\n) {\n var i;\n var interval;\n var frame;\n var intervals = that._intervals;\n var frames = that._frames;\n var currentIndex = getIntervalIndex(that, currentInterval);\n var previousIndex = getIntervalIndex(that, previousInterval);\n\n if (currentIndex >= previousIndex) {\n // look backwards\n for (i = currentIndex; i >= previousIndex; --i) {\n interval = intervals.get(i);\n frame = frames[i];\n if (updateInterval(that, interval, frame, updateState, frameState)) {\n return interval;\n }\n }\n } else {\n // look forwards\n for (i = currentIndex; i <= previousIndex; ++i) {\n interval = intervals.get(i);\n frame = frames[i];\n if (updateInterval(that, interval, frame, updateState, frameState)) {\n return interval;\n }\n }\n }\n\n // If no intervals are ready return the previous interval\n return previousInterval;\n}\n\nfunction setFramesDirty(that, clippingPlanesDirty, styleDirty) {\n var frames = that._frames;\n var framesLength = frames.length;\n for (var i = 0; i < framesLength; ++i) {\n var frame = frames[i];\n if (defined(frame) && defined(frame.pointCloud)) {\n frame.pointCloud.clippingPlanesDirty = clippingPlanesDirty;\n frame.pointCloud.styleDirty = styleDirty;\n }\n }\n}\n\nvar updateState = {\n timeSinceLoad: 0,\n isClipped: false,\n clippingPlanesDirty: false,\n};\n\n/**\n * @private\n */\nTimeDynamicPointCloud.prototype.update = function (frameState) {\n if (frameState.mode === SceneMode.MORPHING) {\n return;\n }\n\n if (!this.show) {\n return;\n }\n\n if (!defined(this._pickId)) {\n this._pickId = frameState.context.createPickId({\n primitive: this,\n });\n }\n\n if (!defined(this._loadTimestamp)) {\n this._loadTimestamp = JulianDate.clone(frameState.time);\n }\n\n // For styling\n var timeSinceLoad = Math.max(\n JulianDate.secondsDifference(frameState.time, this._loadTimestamp) * 1000,\n 0.0\n );\n\n // Update clipping planes\n var clippingPlanes = this._clippingPlanes;\n var clippingPlanesState = 0;\n var clippingPlanesDirty = false;\n var isClipped = defined(clippingPlanes) && clippingPlanes.enabled;\n\n if (isClipped) {\n clippingPlanes.update(frameState);\n clippingPlanesState = clippingPlanes.clippingPlanesState;\n }\n\n if (this._clippingPlanesState !== clippingPlanesState) {\n this._clippingPlanesState = clippingPlanesState;\n clippingPlanesDirty = true;\n }\n\n var styleDirty = this._styleDirty;\n this._styleDirty = false;\n\n if (clippingPlanesDirty || styleDirty) {\n setFramesDirty(this, clippingPlanesDirty, styleDirty);\n }\n\n updateState.timeSinceLoad = timeSinceLoad;\n updateState.isClipped = isClipped;\n\n var shading = this.shading;\n var eyeDomeLighting = this._pointCloudEyeDomeLighting;\n\n var commandList = frameState.commandList;\n var lengthBeforeUpdate = commandList.length;\n\n var previousInterval = this._previousInterval;\n var nextInterval = this._nextInterval;\n var currentInterval = getCurrentInterval(this);\n\n if (!defined(currentInterval)) {\n return;\n }\n\n var clockMultiplierChanged = false;\n var clockMultiplier = getClockMultiplier(this);\n var clockPaused = clockMultiplier === 0;\n if (clockMultiplier !== this._clockMultiplier) {\n clockMultiplierChanged = true;\n this._clockMultiplier = clockMultiplier;\n }\n\n if (!defined(previousInterval) || clockPaused) {\n previousInterval = currentInterval;\n }\n\n if (\n !defined(nextInterval) ||\n clockMultiplierChanged ||\n reachedInterval(this, currentInterval, nextInterval)\n ) {\n nextInterval = getNextInterval(this, currentInterval);\n }\n\n previousInterval = getNearestReadyInterval(\n this,\n previousInterval,\n currentInterval,\n updateState,\n frameState\n );\n var frame = getFrame(this, previousInterval);\n\n if (!defined(frame)) {\n // The frame is not ready to render. This can happen when the simulation starts or when scrubbing the timeline\n // to a frame that hasn't loaded yet. Just render the last rendered frame in its place until it finishes loading.\n loadFrame(this, previousInterval, updateState, frameState);\n frame = this._lastRenderedFrame;\n }\n\n if (defined(frame)) {\n renderFrame(this, frame, updateState, frameState);\n }\n\n if (defined(nextInterval)) {\n // Start loading the next frame\n loadFrame(this, nextInterval, updateState, frameState);\n }\n\n var that = this;\n if (defined(frame) && !defined(this._lastRenderedFrame)) {\n frameState.afterRender.push(function () {\n that._readyPromise.resolve(that);\n });\n }\n\n if (defined(frame) && frame !== this._lastRenderedFrame) {\n if (that.frameChanged.numberOfListeners > 0) {\n frameState.afterRender.push(function () {\n that.frameChanged.raiseEvent(that);\n });\n }\n }\n\n this._previousInterval = previousInterval;\n this._nextInterval = nextInterval;\n this._lastRenderedFrame = frame;\n\n var totalMemoryUsageInBytes = this._totalMemoryUsageInBytes;\n var maximumMemoryUsageInBytes = this.maximumMemoryUsage * 1024 * 1024;\n\n if (totalMemoryUsageInBytes > maximumMemoryUsageInBytes) {\n unloadFrames(this, getUnloadCondition(frameState));\n }\n\n var lengthAfterUpdate = commandList.length;\n var addedCommandsLength = lengthAfterUpdate - lengthBeforeUpdate;\n\n if (\n defined(shading) &&\n shading.attenuation &&\n shading.eyeDomeLighting &&\n addedCommandsLength > 0\n ) {\n eyeDomeLighting.update(\n frameState,\n lengthBeforeUpdate,\n shading,\n this.boundingSphere\n );\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see TimeDynamicPointCloud#destroy\n */\nTimeDynamicPointCloud.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * pointCloud = pointCloud && pointCloud.destroy();\n *\n * @see TimeDynamicPointCloud#isDestroyed\n */\nTimeDynamicPointCloud.prototype.destroy = function () {\n unloadFrames(this);\n this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n this._pickId = this._pickId && this._pickId.destroy();\n return destroyObject(this);\n};\nexport default TimeDynamicPointCloud;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ViewportQuadFS from \"../Shaders/ViewportQuadFS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Material from \"./Material.js\";\n\n/**\n * A viewport aligned quad.\n *\n * @alias ViewportQuad\n * @constructor\n *\n * @param {BoundingRectangle} [rectangle] The {@link BoundingRectangle} defining the quad's position within the viewport.\n * @param {Material} [material] The {@link Material} defining the surface appearance of the viewport quad.\n *\n * @example\n * var viewportQuad = new Cesium.ViewportQuad(new Cesium.BoundingRectangle(0, 0, 80, 40));\n * viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 0.0, 0.0, 1.0);\n */\nfunction ViewportQuad(rectangle, material) {\n /**\n * Determines if the viewport quad primitive will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = true;\n\n if (!defined(rectangle)) {\n rectangle = new BoundingRectangle();\n }\n\n /**\n * The BoundingRectangle defining the quad's position within the viewport.\n *\n * @type {BoundingRectangle}\n *\n * @example\n * viewportQuad.rectangle = new Cesium.BoundingRectangle(0, 0, 80, 40);\n */\n this.rectangle = BoundingRectangle.clone(rectangle);\n\n if (!defined(material)) {\n material = Material.fromType(Material.ColorType, {\n color: new Color(1.0, 1.0, 1.0, 1.0),\n });\n }\n\n /**\n * The surface appearance of the viewport quad. This can be one of several built-in {@link Material} objects or a custom material, scripted with\n * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n * <p>\n * The default material is <code>Material.ColorType</code>.\n * </p>\n *\n * @type Material\n *\n * @example\n * // 1. Change the color of the default material to yellow\n * viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n *\n * // 2. Change material to horizontal stripes\n * viewportQuad.material = Cesium.Material.fromType(Cesium.Material.StripeType);\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n */\n this.material = material;\n this._material = undefined;\n\n this._overlayCommand = undefined;\n this._rs = undefined;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly. This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.material must be defined.\n * @exception {DeveloperError} this.rectangle must be defined.\n */\nViewportQuad.prototype.update = function (frameState) {\n if (!this.show) {\n return;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(this.material)) {\n throw new DeveloperError(\"this.material must be defined.\");\n }\n if (!defined(this.rectangle)) {\n throw new DeveloperError(\"this.rectangle must be defined.\");\n }\n //>>includeEnd('debug');\n\n var rs = this._rs;\n if (!defined(rs) || !BoundingRectangle.equals(rs.viewport, this.rectangle)) {\n this._rs = RenderState.fromCache({\n blending: BlendingState.ALPHA_BLEND,\n viewport: this.rectangle,\n });\n }\n\n var pass = frameState.passes;\n if (pass.render) {\n var context = frameState.context;\n\n if (this._material !== this.material || !defined(this._overlayCommand)) {\n // Recompile shader when material changes\n this._material = this.material;\n\n if (defined(this._overlayCommand)) {\n this._overlayCommand.shaderProgram.destroy();\n }\n\n var fs = new ShaderSource({\n sources: [this._material.shaderSource, ViewportQuadFS],\n });\n this._overlayCommand = context.createViewportQuadCommand(fs, {\n renderState: this._rs,\n uniformMap: this._material._uniforms,\n owner: this,\n });\n this._overlayCommand.pass = Pass.OVERLAY;\n }\n\n this._material.update(context);\n\n this._overlayCommand.uniformMap = this._material._uniforms;\n frameState.commandList.push(this._overlayCommand);\n }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {Boolean} True if this object was destroyed; otherwise, false.\n *\n * @see ViewportQuad#destroy\n */\nViewportQuad.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * quad = quad && quad.destroy();\n *\n * @see ViewportQuad#isDestroyed\n */\nViewportQuad.prototype.destroy = function () {\n if (defined(this._overlayCommand)) {\n this._overlayCommand.shaderProgram =\n this._overlayCommand.shaderProgram &&\n this._overlayCommand.shaderProgram.destroy();\n }\n return destroyObject(this);\n};\nexport default ViewportQuad;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nvarying vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n czm_materialInput materialInput;\\n\\\n \\n\\\n materialInput.s = v_textureCoordinates.s;\\n\\\n materialInput.st = v_textureCoordinates;\\n\\\n materialInput.str = vec3(v_textureCoordinates, 0.0);\\n\\\n materialInput.normalEC = vec3(0.0, 0.0, -1.0);\\n\\\n \\n\\\n czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n}\\n\\\n\";\n","/**\n * @license\n * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5\n * Copyright (c) Steve Sanderson\n * MIT license\n */\n\n var OBSERVABLES_PROPERTY = '__knockoutObservables';\n var SUBSCRIBABLE_PROPERTY = '__knockoutSubscribable';\n\n // Model tracking\n // --------------\n //\n // This is the central feature of Knockout-ES5. We augment model objects by converting properties\n // into ES5 getter/setter pairs that read/write an underlying Knockout observable. This means you can\n // use plain JavaScript syntax to read/write the property while still getting the full benefits of\n // Knockout's automatic dependency detection and notification triggering.\n //\n // For comparison, here's Knockout ES3-compatible syntax:\n //\n // var firstNameLength = myModel.user().firstName().length; // Read\n // myModel.user().firstName('Bert'); // Write\n //\n // ... versus Knockout-ES5 syntax:\n //\n // var firstNameLength = myModel.user.firstName.length; // Read\n // myModel.user.firstName = 'Bert'; // Write\n\n // `ko.track(model)` converts each property on the given model object into a getter/setter pair that\n // wraps a Knockout observable. Optionally specify an array of property names to wrap; otherwise we\n // wrap all properties. If any of the properties are already observables, we replace them with\n // ES5 getter/setter pairs that wrap your original observable instances. In the case of readonly\n // ko.computed properties, we simply do not define a setter (so attempted writes will be ignored,\n // which is how ES5 readonly properties normally behave).\n //\n // By design, this does *not* recursively walk child object properties, because making literally\n // everything everywhere independently observable is usually unhelpful. When you do want to track\n // child object properties independently, define your own class for those child objects and put\n // a separate ko.track call into its constructor --- this gives you far more control.\n function track(obj, propertyNames) {\n if (!obj /*|| typeof obj !== 'object'*/) {\n throw new Error('When calling ko.track, you must pass an object as the first parameter.');\n }\n\n var ko = this,\n allObservablesForObject = getAllObservablesForObject(obj, true);\n propertyNames = propertyNames || Object.getOwnPropertyNames(obj);\n\n propertyNames.forEach(function(propertyName) {\n // Skip storage properties\n if (propertyName === OBSERVABLES_PROPERTY || propertyName === SUBSCRIBABLE_PROPERTY) {\n return;\n }\n // Skip properties that are already tracked\n if (propertyName in allObservablesForObject) {\n return;\n }\n\n var origValue = obj[propertyName],\n isArray = origValue instanceof Array,\n observable = ko.isObservable(origValue) ? origValue\n : isArray ? ko.observableArray(origValue)\n : ko.observable(origValue);\n\n Object.defineProperty(obj, propertyName, {\n configurable: true,\n enumerable: true,\n get: observable,\n set: ko.isWriteableObservable(observable) ? observable : undefined\n });\n\n allObservablesForObject[propertyName] = observable;\n\n if (isArray) {\n notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);\n }\n });\n\n return obj;\n }\n\n // Gets or creates the hidden internal key-value collection of observables corresponding to\n // properties on the model object.\n function getAllObservablesForObject(obj, createIfNotDefined) {\n var result = obj[OBSERVABLES_PROPERTY];\n if (!result && createIfNotDefined) {\n result = {};\n Object.defineProperty(obj, OBSERVABLES_PROPERTY, {\n value : result\n });\n }\n return result;\n }\n\n // Computed properties\n // -------------------\n //\n // The preceding code is already sufficient to upgrade ko.computed model properties to ES5\n // getter/setter pairs (or in the case of readonly ko.computed properties, just a getter).\n // These then behave like a regular property with a getter function, except they are smarter:\n // your evaluator is only invoked when one of its dependencies changes. The result is cached\n // and used for all evaluations until the next time a dependency changes).\n //\n // However, instead of forcing developers to declare a ko.computed property explicitly, it's\n // nice to offer a utility function that declares a computed getter directly.\n\n // Implements `ko.defineProperty`\n function defineComputedProperty(obj, propertyName, evaluatorOrOptions) {\n var ko = this,\n computedOptions = { owner: obj, deferEvaluation: true };\n\n if (typeof evaluatorOrOptions === 'function') {\n computedOptions.read = evaluatorOrOptions;\n } else {\n if ('value' in evaluatorOrOptions) {\n throw new Error('For ko.defineProperty, you must not specify a \"value\" for the property. You must provide a \"get\" function.');\n }\n\n if (typeof evaluatorOrOptions.get !== 'function') {\n throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called \"get\".');\n }\n\n computedOptions.read = evaluatorOrOptions.get;\n computedOptions.write = evaluatorOrOptions.set;\n }\n\n obj[propertyName] = ko.computed(computedOptions);\n track.call(ko, obj, [propertyName]);\n return obj;\n }\n\n // Array handling\n // --------------\n //\n // Arrays are special, because unlike other property types, they have standard mutator functions\n // (`push`/`pop`/`splice`/etc.) and it's desirable to trigger a change notification whenever one of\n // those mutator functions is invoked.\n //\n // Traditionally, Knockout handles this by putting special versions of `push`/`pop`/etc. on observable\n // arrays that mutate the underlying array and then trigger a notification. That approach doesn't\n // work for Knockout-ES5 because properties now return the underlying arrays, so the mutator runs\n // in the context of the underlying array, not any particular observable:\n //\n // // Operates on the underlying array value\n // myModel.someCollection.push('New value');\n //\n // To solve this, Knockout-ES5 detects array values, and modifies them as follows:\n // 1. Associates a hidden subscribable with each array instance that it encounters\n // 2. Intercepts standard mutators (`push`/`pop`/etc.) and makes them trigger the subscribable\n // Then, for model properties whose values are arrays, the property's underlying observable\n // subscribes to the array subscribable, so it can trigger a change notification after mutation.\n\n // Given an observable that underlies a model property, watch for any array value that might\n // be assigned as the property value, and hook into its change events\n function notifyWhenPresentOrFutureArrayValuesMutate(ko, observable) {\n var watchingArraySubscription = null;\n ko.computed(function () {\n // Unsubscribe to any earlier array instance\n if (watchingArraySubscription) {\n watchingArraySubscription.dispose();\n watchingArraySubscription = null;\n }\n\n // Subscribe to the new array instance\n var newArrayInstance = observable();\n if (newArrayInstance instanceof Array) {\n watchingArraySubscription = startWatchingArrayInstance(ko, observable, newArrayInstance);\n }\n });\n }\n\n // Listens for array mutations, and when they happen, cause the observable to fire notifications.\n // This is used to make model properties of type array fire notifications when the array changes.\n // Returns a subscribable that can later be disposed.\n function startWatchingArrayInstance(ko, observable, arrayInstance) {\n var subscribable = getSubscribableForArray(ko, arrayInstance);\n return subscribable.subscribe(observable);\n }\n\n // Gets or creates a subscribable that fires after each array mutation\n function getSubscribableForArray(ko, arrayInstance) {\n var subscribable = arrayInstance[SUBSCRIBABLE_PROPERTY];\n if (!subscribable) {\n subscribable = new ko.subscribable();\n Object.defineProperty(arrayInstance, SUBSCRIBABLE_PROPERTY, {\n value : subscribable\n });\n\n var notificationPauseSignal = {};\n wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal);\n addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal);\n }\n\n return subscribable;\n }\n\n // After each array mutation, fires a notification on the given subscribable\n function wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal) {\n ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'].forEach(function(fnName) {\n var origMutator = arrayInstance[fnName];\n arrayInstance[fnName] = function() {\n var result = origMutator.apply(this, arguments);\n if (notificationPauseSignal.pause !== true) {\n subscribable.notifySubscribers(this);\n }\n return result;\n };\n });\n }\n\n // Adds Knockout's additional array mutation functions to the array\n function addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal) {\n ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'].forEach(function(fnName) {\n // Make it a non-enumerable property for consistency with standard Array functions\n Object.defineProperty(arrayInstance, fnName, {\n enumerable: false,\n value: function() {\n var result;\n\n // These additional array mutators are built using the underlying push/pop/etc.\n // mutators, which are wrapped to trigger notifications. But we don't want to\n // trigger multiple notifications, so pause the push/pop/etc. wrappers and\n // delivery only one notification at the end of the process.\n notificationPauseSignal.pause = true;\n try {\n // Creates a temporary observableArray that can perform the operation.\n result = ko.observableArray.fn[fnName].apply(ko.observableArray(arrayInstance), arguments);\n }\n finally {\n notificationPauseSignal.pause = false;\n }\n subscribable.notifySubscribers(arrayInstance);\n return result;\n }\n });\n });\n }\n\n // Static utility functions\n // ------------------------\n //\n // Since Knockout-ES5 sets up properties that return values, not observables, you can't\n // trivially subscribe to the underlying observables (e.g., `someProperty.subscribe(...)`),\n // or tell them that object values have mutated, etc. To handle this, we set up some\n // extra utility functions that can return or work with the underlying observables.\n\n // Returns the underlying observable associated with a model property (or `null` if the\n // model or property doesn't exist, or isn't associated with an observable). This means\n // you can subscribe to the property, e.g.:\n //\n // ko.getObservable(model, 'propertyName')\n // .subscribe(function(newValue) { ... });\n function getObservable(obj, propertyName) {\n if (!obj /*|| typeof obj !== 'object'*/) {\n return null;\n }\n\n var allObservablesForObject = getAllObservablesForObject(obj, false);\n return (allObservablesForObject && allObservablesForObject[propertyName]) || null;\n }\n\n // Causes a property's associated observable to fire a change notification. Useful when\n // the property value is a complex object and you've modified a child property.\n function valueHasMutated(obj, propertyName) {\n var observable = getObservable(obj, propertyName);\n\n if (observable) {\n observable.valueHasMutated();\n }\n }\n\n // Extends a Knockout instance with Knockout-ES5 functionality\n function attachToKo(ko) {\n ko.track = track;\n ko.getObservable = getObservable;\n ko.valueHasMutated = valueHasMutated;\n ko.defineProperty = defineComputedProperty;\n }\n\n export default {\n attachToKo : attachToKo\n };\n","var svgNS = \"http://www.w3.org/2000/svg\";\nvar svgClassName = \"cesium-svgPath-svg\";\n\n/**\n * A Knockout binding handler that creates a DOM element for a single SVG path.\n * This binding handler will be registered as cesiumSvgPath.\n *\n * <p>\n * The parameter to this binding is an object with the following properties:\n * </p>\n *\n * <ul>\n * <li>path: The SVG path as a string.</li>\n * <li>width: The width of the SVG path with no transformations applied.</li>\n * <li>height: The height of the SVG path with no transformations applied.</li>\n * <li>css: Optional. A string containing additional CSS classes to apply to the SVG. 'cesium-svgPath-svg' is always applied.</li>\n * </ul>\n *\n * @namespace SvgPathBindingHandler\n *\n * @example\n * // Create an SVG as a child of a div\n * <div data-bind=\"cesiumSvgPath: { path: 'M 100 100 L 300 100 L 200 300 z', width: 28, height: 28 }\"></div>\n *\n * // parameters can be observable from the view model\n * <div data-bind=\"cesiumSvgPath: { path: currentPath, width: currentWidth, height: currentHeight }\"></div>\n *\n * // or the whole object can be observable from the view model\n * <div data-bind=\"cesiumSvgPath: svgPathOptions\"></div>\n */\nvar SvgPathBindingHandler = {\n /**\n * @function\n */\n register: function (knockout) {\n knockout.bindingHandlers.cesiumSvgPath = {\n init: function (element, valueAccessor) {\n var svg = document.createElementNS(svgNS, \"svg:svg\");\n svg.setAttribute(\"class\", svgClassName);\n\n var pathElement = document.createElementNS(svgNS, \"path\");\n svg.appendChild(pathElement);\n\n knockout.virtualElements.setDomNodeChildren(element, [svg]);\n\n knockout.computed({\n read: function () {\n var value = knockout.unwrap(valueAccessor());\n\n pathElement.setAttribute(\"d\", knockout.unwrap(value.path));\n\n var pathWidth = knockout.unwrap(value.width);\n var pathHeight = knockout.unwrap(value.height);\n\n svg.setAttribute(\"width\", pathWidth);\n svg.setAttribute(\"height\", pathHeight);\n svg.setAttribute(\"viewBox\", \"0 0 \" + pathWidth + \" \" + pathHeight);\n\n if (value.css) {\n svg.setAttribute(\n \"class\",\n svgClassName + \" \" + knockout.unwrap(value.css)\n );\n }\n },\n disposeWhenNodeIsRemoved: element,\n });\n\n return {\n controlsDescendantBindings: true,\n };\n },\n };\n\n knockout.virtualElements.allowedBindings.cesiumSvgPath = true;\n },\n};\nexport default SvgPathBindingHandler;\n","import knockout from './knockout-3.5.1.js';\nimport knockout_es5 from './knockout-es5.js';\nimport SvgPathBindingHandler from '../Widgets/SvgPathBindingHandler.js';\n\n// install the Knockout-ES5 plugin\nknockout_es5.attachToKo(knockout);\n\n// Register all Cesium binding handlers\nSvgPathBindingHandler.register(knockout);\n\nexport default knockout;\n","/* jshint forin: false, bitwise: false */\n/*\nCopyright 2015-2018 Esri\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nA copy of the license and additional notices are located with the\nsource distribution at:\n\nhttp://github.com/Esri/lerc/\n\nContributors: Johannes Schmid, (LERC v1)\n Chayanika Khatua, (LERC v1)\n Wenxue Ju (LERC v1, v2.x)\n*/\n\n/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */\n\nvar tmp = {};\n\n/**\n * a module for decoding LERC blobs\n * @module Lerc\n */\n(function() {\n //the original LercDecode for Version 1\n var LercDecode = (function() {\n\n // WARNING: This decoder version can only read old version 1 Lerc blobs. Use with caution.\n\n // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n // the class was chosen to be future proof.\n\n var CntZImage = {};\n\n CntZImage.defaultNoDataValue = -3.4027999387901484e+38; // smallest Float32 value\n\n /**\n * Decode a LERC byte stream and return an object containing the pixel data and some required and optional\n * information about it, such as the image's width and height.\n *\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] Decoding options, containing any of the following properties:\n * @config {number} [inputOffset = 0]\n * Skip the first inputOffset bytes of the input byte stream. A valid LERC file is expected at that position.\n * @config {Uint8Array} [encodedMask = null]\n * If specified, the decoder will not read mask information from the input and use the specified encoded\n * mask data instead. Mask header/data must not be present in the LERC byte stream in this case.\n * @config {number} [noDataValue = LercCode.defaultNoDataValue]\n * Pixel value to use for masked pixels.\n * @config {ArrayBufferView|Array} [pixelType = Float32Array]\n * The desired type of the pixelData array in the return value. Note that it is the caller's responsibility to\n * provide an appropriate noDataValue if the default pixelType is overridden.\n * @config {boolean} [returnMask = false]\n * If true, the return value will contain a maskData property of type Uint8Array which has one element per\n * pixel, the value of which is 1 or 0 depending on whether that pixel's data is present or masked. If the\n * input LERC data does not contain a mask, maskData will not be returned.\n * @config {boolean} [returnEncodedMask = false]\n * If true, the return value will contain a encodedMaskData property, which can be passed into encode() as\n * encodedMask.\n * @config {boolean} [returnFileInfo = false]\n * If true, the return value will have a fileInfo property that contains metadata obtained from the\n * LERC headers and the decoding process.\n * @config {boolean} [computeUsedBitDepths = false]\n * If true, the fileInfo property in the return value will contain the set of all block bit depths\n * encountered during decoding. Will only have an effect if returnFileInfo option is true.\n * @returns {{width, height, pixelData, minValue, maxValue, noDataValue, maskData, encodedMaskData, fileInfo}}\n */\n CntZImage.decode = function(input, options) {\n options = options || {};\n\n var skipMask = options.encodedMaskData || (options.encodedMaskData === null);\n var parsedData = parse(input, options.inputOffset || 0, skipMask);\n\n var noDataValue = (options.noDataValue !== null) ? options.noDataValue : CntZImage.defaultNoDataValue;\n\n var uncompressedData = uncompressPixelValues(parsedData, options.pixelType || Float32Array,\n options.encodedMaskData, noDataValue, options.returnMask);\n\n var result = {\n width: parsedData.width,\n height: parsedData.height,\n pixelData: uncompressedData.resultPixels,\n minValue: uncompressedData.minValue,\n maxValue: parsedData.pixels.maxValue,\n noDataValue: noDataValue\n };\n\n if (uncompressedData.resultMask) {\n result.maskData = uncompressedData.resultMask;\n }\n\n if (options.returnEncodedMask && parsedData.mask) {\n result.encodedMaskData = parsedData.mask.bitset ? parsedData.mask.bitset : null;\n }\n\n if (options.returnFileInfo) {\n result.fileInfo = formatFileInfo(parsedData);\n if (options.computeUsedBitDepths) {\n result.fileInfo.bitDepths = computeUsedBitDepths(parsedData);\n }\n }\n\n return result;\n };\n\n var uncompressPixelValues = function(data, TypedArrayClass, maskBitset, noDataValue, storeDecodedMask) {\n var blockIdx = 0;\n var numX = data.pixels.numBlocksX;\n var numY = data.pixels.numBlocksY;\n var blockWidth = Math.floor(data.width / numX);\n var blockHeight = Math.floor(data.height / numY);\n var scale = 2 * data.maxZError;\n var minValue = Number.MAX_VALUE, currentValue;\n maskBitset = maskBitset || ((data.mask) ? data.mask.bitset : null);\n\n var resultPixels, resultMask;\n resultPixels = new TypedArrayClass(data.width * data.height);\n if (storeDecodedMask && maskBitset) {\n resultMask = new Uint8Array(data.width * data.height);\n }\n var blockDataBuffer = new Float32Array(blockWidth * blockHeight);\n\n var xx, yy;\n for (var y = 0; y <= numY; y++) {\n var thisBlockHeight = (y !== numY) ? blockHeight : (data.height % numY);\n if (thisBlockHeight === 0) {\n continue;\n }\n for (var x = 0; x <= numX; x++) {\n var thisBlockWidth = (x !== numX) ? blockWidth : (data.width % numX);\n if (thisBlockWidth === 0) {\n continue;\n }\n\n var outPtr = y * data.width * blockHeight + x * blockWidth;\n var outStride = data.width - thisBlockWidth;\n\n var block = data.pixels.blocks[blockIdx];\n\n var blockData, blockPtr, constValue;\n if (block.encoding < 2) {\n // block is either uncompressed or bit-stuffed (encodings 0 and 1)\n if (block.encoding === 0) {\n // block is uncompressed\n blockData = block.rawData;\n } else {\n // block is bit-stuffed\n unstuff(block.stuffedData, block.bitsPerPixel, block.numValidPixels, block.offset, scale, blockDataBuffer, data.pixels.maxValue);\n blockData = blockDataBuffer;\n }\n blockPtr = 0;\n }\n else if (block.encoding === 2) {\n // block is all 0\n constValue = 0;\n }\n else {\n // block has constant value (encoding === 3)\n constValue = block.offset;\n }\n\n var maskByte;\n if (maskBitset) {\n for (yy = 0; yy < thisBlockHeight; yy++) {\n if (outPtr & 7) {\n //\n maskByte = maskBitset[outPtr >> 3];\n maskByte <<= outPtr & 7;\n }\n for (xx = 0; xx < thisBlockWidth; xx++) {\n if (!(outPtr & 7)) {\n // read next byte from mask\n maskByte = maskBitset[outPtr >> 3];\n }\n if (maskByte & 128) {\n // pixel data present\n if (resultMask) {\n resultMask[outPtr] = 1;\n }\n currentValue = (block.encoding < 2) ? blockData[blockPtr++] : constValue;\n minValue = minValue > currentValue ? currentValue : minValue;\n resultPixels[outPtr++] = currentValue;\n } else {\n // pixel data not present\n if (resultMask) {\n resultMask[outPtr] = 0;\n }\n resultPixels[outPtr++] = noDataValue;\n }\n maskByte <<= 1;\n }\n outPtr += outStride;\n }\n } else {\n // mask not present, simply copy block over\n if (block.encoding < 2) {\n // duplicating this code block for performance reasons\n // blockData case:\n for (yy = 0; yy < thisBlockHeight; yy++) {\n for (xx = 0; xx < thisBlockWidth; xx++) {\n currentValue = blockData[blockPtr++];\n minValue = minValue > currentValue ? currentValue : minValue;\n resultPixels[outPtr++] = currentValue;\n }\n outPtr += outStride;\n }\n }\n else {\n // constValue case:\n minValue = minValue > constValue ? constValue : minValue;\n for (yy = 0; yy < thisBlockHeight; yy++) {\n for (xx = 0; xx < thisBlockWidth; xx++) {\n resultPixels[outPtr++] = constValue;\n }\n outPtr += outStride;\n }\n }\n }\n if ((block.encoding === 1) && (blockPtr !== block.numValidPixels)) {\n throw \"Block and Mask do not match\";\n }\n blockIdx++;\n }\n }\n\n return {\n resultPixels: resultPixels,\n resultMask: resultMask,\n minValue: minValue\n };\n };\n\n var formatFileInfo = function(data) {\n return {\n \"fileIdentifierString\": data.fileIdentifierString,\n \"fileVersion\": data.fileVersion,\n \"imageType\": data.imageType,\n \"height\": data.height,\n \"width\": data.width,\n \"maxZError\": data.maxZError,\n \"eofOffset\": data.eofOffset,\n \"mask\": data.mask ? {\n \"numBlocksX\": data.mask.numBlocksX,\n \"numBlocksY\": data.mask.numBlocksY,\n \"numBytes\": data.mask.numBytes,\n \"maxValue\": data.mask.maxValue\n } : null,\n \"pixels\": {\n \"numBlocksX\": data.pixels.numBlocksX,\n \"numBlocksY\": data.pixels.numBlocksY,\n \"numBytes\": data.pixels.numBytes,\n \"maxValue\": data.pixels.maxValue,\n \"noDataValue\": data.noDataValue\n }\n };\n };\n\n var computeUsedBitDepths = function(data) {\n var numBlocks = data.pixels.numBlocksX * data.pixels.numBlocksY;\n var bitDepths = {};\n for (var i = 0; i < numBlocks; i++) {\n var block = data.pixels.blocks[i];\n if (block.encoding === 0) {\n bitDepths.float32 = true;\n } else if (block.encoding === 1) {\n bitDepths[block.bitsPerPixel] = true;\n } else {\n bitDepths[0] = true;\n }\n }\n\n return Object.keys(bitDepths);\n };\n\n var parse = function(input, fp, skipMask) {\n var data = {};\n\n // File header\n var fileIdView = new Uint8Array(input, fp, 10);\n data.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n if (data.fileIdentifierString.trim() !== \"CntZImage\") {\n throw \"Unexpected file identifier string: \" + data.fileIdentifierString;\n }\n fp += 10;\n var view = new DataView(input, fp, 24);\n data.fileVersion = view.getInt32(0, true);\n data.imageType = view.getInt32(4, true);\n data.height = view.getUint32(8, true);\n data.width = view.getUint32(12, true);\n data.maxZError = view.getFloat64(16, true);\n fp += 24;\n\n // Mask Header\n if (!skipMask) {\n view = new DataView(input, fp, 16);\n data.mask = {};\n data.mask.numBlocksY = view.getUint32(0, true);\n data.mask.numBlocksX = view.getUint32(4, true);\n data.mask.numBytes = view.getUint32(8, true);\n data.mask.maxValue = view.getFloat32(12, true);\n fp += 16;\n\n // Mask Data\n if (data.mask.numBytes > 0) {\n var bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n view = new DataView(input, fp, data.mask.numBytes);\n var cnt = view.getInt16(0, true);\n var ip = 2, op = 0;\n do {\n if (cnt > 0) {\n while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n } else {\n var val = view.getUint8(ip++);\n cnt = -cnt;\n while (cnt--) { bitset[op++] = val; }\n }\n cnt = view.getInt16(ip, true);\n ip += 2;\n } while (ip < data.mask.numBytes);\n if ((cnt !== -32768) || (op < bitset.length)) {\n throw \"Unexpected end of mask RLE encoding\";\n }\n data.mask.bitset = bitset;\n fp += data.mask.numBytes;\n }\n else if ((data.mask.numBytes | data.mask.numBlocksY | data.mask.maxValue) === 0) { // Special case, all nodata\n data.mask.bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n }\n }\n\n // Pixel Header\n view = new DataView(input, fp, 16);\n data.pixels = {};\n data.pixels.numBlocksY = view.getUint32(0, true);\n data.pixels.numBlocksX = view.getUint32(4, true);\n data.pixels.numBytes = view.getUint32(8, true);\n data.pixels.maxValue = view.getFloat32(12, true);\n fp += 16;\n\n var numBlocksX = data.pixels.numBlocksX;\n var numBlocksY = data.pixels.numBlocksY;\n // the number of blocks specified in the header does not take into account the blocks at the end of\n // each row/column with a special width/height that make the image complete in case the width is not\n // evenly divisible by the number of blocks.\n var actualNumBlocksX = numBlocksX + ((data.width % numBlocksX) > 0 ? 1 : 0);\n var actualNumBlocksY = numBlocksY + ((data.height % numBlocksY) > 0 ? 1 : 0);\n data.pixels.blocks = new Array(actualNumBlocksX * actualNumBlocksY);\n var blockI = 0;\n for (var blockY = 0; blockY < actualNumBlocksY; blockY++) {\n for (var blockX = 0; blockX < actualNumBlocksX; blockX++) {\n\n // Block\n var size = 0;\n var bytesLeft = input.byteLength - fp;\n view = new DataView(input, fp, Math.min(10, bytesLeft));\n var block = {};\n data.pixels.blocks[blockI++] = block;\n var headerByte = view.getUint8(0); size++;\n block.encoding = headerByte & 63;\n if (block.encoding > 3) {\n throw \"Invalid block encoding (\" + block.encoding + \")\";\n }\n if (block.encoding === 2) {\n fp++;\n continue;\n }\n if ((headerByte !== 0) && (headerByte !== 2)) {\n headerByte >>= 6;\n block.offsetType = headerByte;\n if (headerByte === 2) {\n block.offset = view.getInt8(1); size++;\n } else if (headerByte === 1) {\n block.offset = view.getInt16(1, true); size += 2;\n } else if (headerByte === 0) {\n block.offset = view.getFloat32(1, true); size += 4;\n } else {\n throw \"Invalid block offset type\";\n }\n\n if (block.encoding === 1) {\n headerByte = view.getUint8(size); size++;\n block.bitsPerPixel = headerByte & 63;\n headerByte >>= 6;\n block.numValidPixelsType = headerByte;\n if (headerByte === 2) {\n block.numValidPixels = view.getUint8(size); size++;\n } else if (headerByte === 1) {\n block.numValidPixels = view.getUint16(size, true); size += 2;\n } else if (headerByte === 0) {\n block.numValidPixels = view.getUint32(size, true); size += 4;\n } else {\n throw \"Invalid valid pixel count type\";\n }\n }\n }\n fp += size;\n\n if (block.encoding === 3) {\n continue;\n }\n\n var arrayBuf, store8;\n if (block.encoding === 0) {\n var numPixels = (data.pixels.numBytes - 1) / 4;\n if (numPixels !== Math.floor(numPixels)) {\n throw \"uncompressed block has invalid length\";\n }\n arrayBuf = new ArrayBuffer(numPixels * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, fp, numPixels * 4));\n var rawData = new Float32Array(arrayBuf);\n block.rawData = rawData;\n fp += numPixels * 4;\n } else if (block.encoding === 1) {\n var dataBytes = Math.ceil(block.numValidPixels * block.bitsPerPixel / 8);\n var dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, fp, dataBytes));\n block.stuffedData = new Uint32Array(arrayBuf);\n fp += dataBytes;\n }\n }\n }\n data.eofOffset = fp;\n return data;\n };\n\n var unstuff = function(src, bitsPerPixel, numPixels, offset, scale, dest, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer;\n var nmax = Math.ceil((maxValue - offset) / scale);\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n } else {\n var missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n return dest;\n };\n\n return CntZImage;\n })();\n\n //version 2. Supports 2.1, 2.2, 2.3\n var Lerc2Decode = (function() {\n \"use strict\";\n // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n // the class was chosen to be future proof, following LercDecode.\n\n /*****************************************\n * private static class bitsutffer used by Lerc2Decode\n *******************************************/\n var BitStuffer = {\n //methods ending with 2 are for the new byte order used by Lerc2.3 and above.\n //originalUnstuff is used to unpack Huffman code table. code is duplicated to unstuffx for performance reasons.\n unstuff: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer, missingBits, nmax;\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n if (lutArr) {\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n dest[o] = lutArr[n];//offset + lutArr[n] * scale;\n }\n }\n else {\n nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n }\n },\n\n unstuffLUT: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0;\n var buffer;\n var dest = [];\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //dest.push(n);\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n dest.unshift(offset);//1st one\n return dest;\n },\n\n unstuff2: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0, bitPos = 0;\n var n, buffer, missingBits;\n if (lutArr) {\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n dest[o] = lutArr[n];\n }\n }\n else {\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n }\n return dest;\n },\n\n unstuffLUT2: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0, bitPos = 0;\n var buffer;\n var dest = [];\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n //dest.push(n);\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n dest.unshift(offset);\n return dest;\n },\n\n originalUnstuff: function(src, dest, bitsPerPixel, numPixels) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer, missingBits;\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n dest[o] = n;\n }\n return dest;\n },\n\n originalUnstuff2: function(src, dest, bitsPerPixel, numPixels) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0, bitPos = 0;\n var n, buffer, missingBits;\n //micro-optimizations\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n dest[o] = n;\n }\n return dest;\n }\n };\n\n /*****************************************\n *private static class used by Lerc2Decode\n ******************************************/\n var Lerc2Helpers = {\n HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, treat it like constant\n computeChecksumFletcher32: function(input) {\n\n var sum1 = 0xffff, sum2 = 0xffff;\n var len = input.length;\n var words = Math.floor(len / 2);\n var i = 0;\n while (words) {\n var tlen = (words >= 359) ? 359 : words;\n words -= tlen;\n do {\n sum1 += (input[i++] << 8);\n sum2 += sum1 += input[i++];\n } while (--tlen);\n\n sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n }\n\n // add the straggler byte if it exists\n if (len & 1) {\n sum2 += sum1 += (input[i] << 8);\n }\n // second reduction step to reduce sums to 16 bits\n sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n\n return (sum2 << 16 | sum1) >>> 0;\n },\n\n readHeaderInfo: function(input, data) {\n var ptr = data.ptr;\n var fileIdView = new Uint8Array(input, ptr, 6);\n var headerInfo = {};\n headerInfo.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n if (headerInfo.fileIdentifierString.lastIndexOf(\"Lerc2\", 0) !== 0) {\n throw \"Unexpected file identifier string (expect Lerc2 ): \" + headerInfo.fileIdentifierString;\n }\n ptr += 6;\n var view = new DataView(input, ptr, 8);\n var fileVersion = view.getInt32(0, true);\n headerInfo.fileVersion = fileVersion;\n ptr += 4;\n if (fileVersion >= 3) {\n headerInfo.checksum = view.getUint32(4, true); //nrows\n ptr += 4;\n }\n\n //keys start from here\n view = new DataView(input, ptr, 12);\n headerInfo.height = view.getUint32(0, true); //nrows\n headerInfo.width = view.getUint32(4, true); //ncols\n ptr += 8;\n if (fileVersion >= 4) {\n headerInfo.numDims = view.getUint32(8, true);\n ptr += 4;\n }\n else {\n headerInfo.numDims = 1;\n }\n\n view = new DataView(input, ptr, 40);\n headerInfo.numValidPixel = view.getUint32(0, true);\n headerInfo.microBlockSize = view.getInt32(4, true);\n headerInfo.blobSize = view.getInt32(8, true);\n headerInfo.imageType = view.getInt32(12, true);\n\n headerInfo.maxZError = view.getFloat64(16, true);\n headerInfo.zMin = view.getFloat64(24, true);\n headerInfo.zMax = view.getFloat64(32, true);\n ptr += 40;\n data.headerInfo = headerInfo;\n data.ptr = ptr;\n\n var checksum, keyLength;\n if (fileVersion >= 3) {\n keyLength = fileVersion >= 4 ? 52 : 48;\n checksum = this.computeChecksumFletcher32(new Uint8Array(input, ptr - keyLength, headerInfo.blobSize - 14));\n if (checksum !== headerInfo.checksum) {\n throw \"Checksum failed.\";\n }\n }\n return true;\n },\n\n checkMinMaxRanges: function(input, data) {\n var headerInfo = data.headerInfo;\n var OutPixelTypeArray = this.getDataTypeArray(headerInfo.imageType);\n var rangeBytes = headerInfo.numDims * this.getDataTypeSize(headerInfo.imageType);\n var minValues = this.readSubArray(input, data.ptr, OutPixelTypeArray, rangeBytes);\n var maxValues = this.readSubArray(input, data.ptr + rangeBytes, OutPixelTypeArray, rangeBytes);\n data.ptr += (2 * rangeBytes);\n var i, equal = true;\n for (i = 0; i < headerInfo.numDims; i++) {\n if (minValues[i] !== maxValues[i]) {\n equal = false;\n break;\n }\n }\n headerInfo.minValues = minValues;\n headerInfo.maxValues = maxValues;\n return equal;\n },\n\n readSubArray: function(input, ptr, OutPixelTypeArray, numBytes) {\n var rawData;\n if (OutPixelTypeArray === Uint8Array) {\n rawData = new Uint8Array(input, ptr, numBytes);\n }\n else {\n var arrayBuf = new ArrayBuffer(numBytes);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n }\n return rawData;\n },\n\n readMask: function(input, data) {\n var ptr = data.ptr;\n var headerInfo = data.headerInfo;\n var numPixels = headerInfo.width * headerInfo.height;\n var numValidPixel = headerInfo.numValidPixel;\n\n var view = new DataView(input, ptr, 4);\n var mask = {};\n mask.numBytes = view.getUint32(0, true);\n ptr += 4;\n\n // Mask Data\n if ((0 === numValidPixel || numPixels === numValidPixel) && 0 !== mask.numBytes) {\n throw (\"invalid mask\");\n }\n var bitset, resultMask;\n if (numValidPixel === 0) {\n bitset = new Uint8Array(Math.ceil(numPixels / 8));\n mask.bitset = bitset;\n resultMask = new Uint8Array(numPixels);\n data.pixels.resultMask = resultMask;\n ptr += mask.numBytes;\n }// ????? else if (data.mask.numBytes > 0 && data.mask.numBytes< data.numValidPixel) {\n else if (mask.numBytes > 0) {\n bitset = new Uint8Array(Math.ceil(numPixels / 8));\n view = new DataView(input, ptr, mask.numBytes);\n var cnt = view.getInt16(0, true);\n var ip = 2, op = 0, val = 0;\n do {\n if (cnt > 0) {\n while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n } else {\n val = view.getUint8(ip++);\n cnt = -cnt;\n while (cnt--) { bitset[op++] = val; }\n }\n cnt = view.getInt16(ip, true);\n ip += 2;\n } while (ip < mask.numBytes);\n if ((cnt !== -32768) || (op < bitset.length)) {\n throw \"Unexpected end of mask RLE encoding\";\n }\n\n resultMask = new Uint8Array(numPixels);\n var mb = 0, k = 0;\n\n for (k = 0; k < numPixels; k++) {\n if (k & 7) {\n mb = bitset[k >> 3];\n mb <<= k & 7;\n }\n else {\n mb = bitset[k >> 3];\n }\n if (mb & 128) {\n resultMask[k] = 1;\n }\n }\n data.pixels.resultMask = resultMask;\n\n mask.bitset = bitset;\n ptr += mask.numBytes;\n }\n data.ptr = ptr;\n data.mask = mask;\n return true;\n },\n\n readDataOneSweep: function(input, data, OutPixelTypeArray) {\n var ptr = data.ptr;\n var headerInfo = data.headerInfo;\n var numDims = headerInfo.numDims;\n var numPixels = headerInfo.width * headerInfo.height;\n var imageType = headerInfo.imageType;\n var numBytes = headerInfo.numValidPixel * Lerc2Helpers.getDataTypeSize(imageType) * numDims;\n //data.pixels.numBytes = numBytes;\n var rawData;\n var mask = data.pixels.resultMask;\n if (OutPixelTypeArray === Uint8Array) {\n rawData = new Uint8Array(input, ptr, numBytes);\n }\n else {\n var arrayBuf = new ArrayBuffer(numBytes);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n }\n if (rawData.length === numPixels * numDims) {\n data.pixels.resultPixels = rawData;\n }\n else //mask\n {\n data.pixels.resultPixels = new OutPixelTypeArray(numPixels * numDims);\n var z = 0, k = 0, i = 0, nStart = 0;\n if (numDims > 1) {\n for (i=0; i < numDims; i++) {\n nStart = i * numPixels;\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[nStart + k] = rawData[z++];\n }\n }\n }\n }\n else {\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[k] = rawData[z++];\n }\n }\n }\n }\n ptr += numBytes;\n data.ptr = ptr; //return data;\n return true;\n },\n\n readHuffmanTree: function(input, data) {\n var BITS_MAX = this.HUFFMAN_LUT_BITS_MAX; //8 is slow for the large test image\n //var size_max = 1 << BITS_MAX;\n /* ************************\n * reading code table\n *************************/\n var view = new DataView(input, data.ptr, 16);\n data.ptr += 16;\n var version = view.getInt32(0, true);\n if (version < 2) {\n throw \"unsupported Huffman version\";\n }\n var size = view.getInt32(4, true);\n var i0 = view.getInt32(8, true);\n var i1 = view.getInt32(12, true);\n if (i0 >= i1) {\n return false;\n }\n var blockDataBuffer = new Uint32Array(i1 - i0);\n Lerc2Helpers.decodeBits(input, data, blockDataBuffer);\n var codeTable = []; //size\n var i, j, k, len;\n\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n codeTable[j] = { first: blockDataBuffer[i - i0], second: null };\n }\n\n var dataBytes = input.byteLength - data.ptr;\n var dataWords = Math.ceil(dataBytes / 4);\n var arrayBuf = new ArrayBuffer(dataWords * 4);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n var stuffedData = new Uint32Array(arrayBuf); //must start from x*4\n var bitPos = 0, word, srcPtr = 0;\n word = stuffedData[0];\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n len = codeTable[j].first;\n if (len > 0) {\n codeTable[j].second = (word << bitPos) >>> (32 - len);\n\n if (32 - bitPos >= len) {\n bitPos += len;\n if (bitPos === 32) {\n bitPos = 0;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n }\n else {\n bitPos += len - 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n codeTable[j].second |= word >>> (32 - bitPos);\n }\n }\n }\n\n //finished reading code table\n\n /* ************************\n * building lut\n *************************/\n var numBitsLUT = 0, numBitsLUTQick = 0;\n var tree = new TreeNode();\n for (i = 0; i < codeTable.length; i++) {\n if (codeTable[i] !== undefined) {\n numBitsLUT = Math.max(numBitsLUT, codeTable[i].first);\n }\n }\n if (numBitsLUT >= BITS_MAX) {\n numBitsLUTQick = BITS_MAX;\n }\n else {\n numBitsLUTQick = numBitsLUT;\n }\n if (numBitsLUT >= 30) {\n console.log(\"WARning, large NUM LUT BITS IS \" + numBitsLUT);\n }\n var decodeLut = [], entry, code, numEntries, jj, currentBit, node;\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n len = codeTable[j].first;\n if (len > 0) {\n entry = [len, j];\n if (len <= numBitsLUTQick) {\n code = codeTable[j].second << (numBitsLUTQick - len);\n numEntries = 1 << (numBitsLUTQick - len);\n for (k = 0; k < numEntries; k++) {\n decodeLut[code | k] = entry;\n }\n }\n else {\n //build tree\n code = codeTable[j].second;\n node = tree;\n for (jj = len - 1; jj >= 0; jj--) {\n currentBit = code >>> jj & 1; //no left shift as length could be 30,31\n if (currentBit) {\n if (!node.right) {\n node.right = new TreeNode();\n }\n node = node.right;\n }\n else {\n if (!node.left) {\n node.left = new TreeNode();\n }\n node = node.left;\n }\n if (jj === 0 && !node.val) {\n node.val = entry[1];\n }\n }\n }\n }\n }\n return {\n decodeLut: decodeLut,\n numBitsLUTQick: numBitsLUTQick,\n numBitsLUT: numBitsLUT,\n tree: tree,\n stuffedData: stuffedData,\n srcPtr: srcPtr,\n bitPos: bitPos\n };\n },\n\n readHuffman: function(input, data, OutPixelTypeArray) {\n var headerInfo = data.headerInfo;\n var numDims = headerInfo.numDims;\n var height = data.headerInfo.height;\n var width = data.headerInfo.width;\n var numPixels = width * height;\n //var size_max = 1 << BITS_MAX;\n /* ************************\n * reading huffman structure info\n *************************/\n var huffmanInfo = this.readHuffmanTree(input, data);\n var decodeLut = huffmanInfo.decodeLut;\n var tree = huffmanInfo.tree;\n //stuffedData includes huffman headers\n var stuffedData = huffmanInfo.stuffedData;\n var srcPtr = huffmanInfo.srcPtr;\n var bitPos = huffmanInfo.bitPos;\n var numBitsLUTQick = huffmanInfo.numBitsLUTQick;\n var numBitsLUT = huffmanInfo.numBitsLUT;\n var offset = data.headerInfo.imageType === 0 ? 128 : 0;\n /*************************\n * decode\n ***************************/\n var node, val, delta, mask = data.pixels.resultMask, valTmp, valTmpQuick, currentBit;\n var i, j, k, ii;\n var prevVal = 0;\n if (bitPos > 0) {\n srcPtr++;\n bitPos = 0;\n }\n var word = stuffedData[srcPtr];\n var deltaEncode = data.encodeMode === 1;\n var resultPixelsAllDim = new OutPixelTypeArray(numPixels * numDims);\n var resultPixels = resultPixelsAllDim;\n var iDim;\n for (iDim = 0; iDim < headerInfo.numDims; iDim++) {\n if (numDims > 1) {\n //get the mem block of current dimension\n resultPixels = new OutPixelTypeArray(resultPixelsAllDim.buffer, numPixels * iDim, numPixels);\n prevVal = 0;\n }\n if (data.headerInfo.numValidPixel === width * height) { //all valid\n for (k = 0, i = 0; i < height; i++) {\n for (j = 0; j < width; j++, k++) {\n val = 0;\n valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUTQick) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done\n {\n val = decodeLut[valTmpQuick][1];\n bitPos += decodeLut[valTmpQuick][0];\n }\n else {\n valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUT) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n node = tree;\n for (ii = 0; ii < numBitsLUT; ii++) {\n currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n node = currentBit ? node.right : node.left;\n if (!(node.left || node.right)) {\n val = node.val;\n bitPos = bitPos + ii + 1;\n break;\n }\n }\n }\n\n if (bitPos >= 32) {\n bitPos -= 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n\n delta = val - offset;\n if (deltaEncode) {\n if (j > 0) {\n delta += prevVal; // use overflow\n }\n else if (i > 0) {\n delta += resultPixels[k - width];\n }\n else {\n delta += prevVal;\n }\n delta &= 0xFF; //overflow\n resultPixels[k] = delta;//overflow\n prevVal = delta;\n }\n else {\n resultPixels[k] = delta;\n }\n }\n }\n }\n else { //not all valid, use mask\n for (k = 0, i = 0; i < height; i++) {\n for (j = 0; j < width; j++, k++) {\n if (mask[k]) {\n val = 0;\n valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUTQick) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done\n {\n val = decodeLut[valTmpQuick][1];\n bitPos += decodeLut[valTmpQuick][0];\n }\n else {\n valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUT) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n node = tree;\n for (ii = 0; ii < numBitsLUT; ii++) {\n currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n node = currentBit ? node.right : node.left;\n if (!(node.left || node.right)) {\n val = node.val;\n bitPos = bitPos + ii + 1;\n break;\n }\n }\n }\n\n if (bitPos >= 32) {\n bitPos -= 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n\n delta = val - offset;\n if (deltaEncode) {\n if (j > 0 && mask[k - 1]) {\n delta += prevVal; // use overflow\n }\n else if (i > 0 && mask[k - width]) {\n delta += resultPixels[k - width];\n }\n else {\n delta += prevVal;\n }\n\n delta &= 0xFF; //overflow\n resultPixels[k] = delta;//overflow\n prevVal = delta;\n }\n else {\n resultPixels[k] = delta;\n }\n }\n }\n }\n }\n data.ptr = data.ptr + (srcPtr + 1) * 4 + (bitPos > 0 ? 4 : 0);\n }\n data.pixels.resultPixels = resultPixelsAllDim;\n },\n\n decodeBits: function(input, data, blockDataBuffer, offset, iDim) {\n {\n //bitstuff encoding is 3\n var headerInfo = data.headerInfo;\n var fileVersion = headerInfo.fileVersion;\n //var block = {};\n var blockPtr = 0;\n var viewByteLength = ((input.byteLength - data.ptr) >= 5) ? 5 : (input.byteLength - data.ptr);\n var view = new DataView(input, data.ptr, viewByteLength);\n var headerByte = view.getUint8(0);\n blockPtr++;\n var bits67 = headerByte >> 6;\n var n = (bits67 === 0) ? 4 : 3 - bits67;\n var doLut = (headerByte & 32) > 0 ? true : false;//5th bit\n var numBits = headerByte & 31;\n var numElements = 0;\n if (n === 1) {\n numElements = view.getUint8(blockPtr); blockPtr++;\n } else if (n === 2) {\n numElements = view.getUint16(blockPtr, true); blockPtr += 2;\n } else if (n === 4) {\n numElements = view.getUint32(blockPtr, true); blockPtr += 4;\n } else {\n throw \"Invalid valid pixel count type\";\n }\n //fix: huffman codes are bit stuffed, but not bound by data's max value, so need to use originalUnstuff\n //offset = offset || 0;\n var scale = 2 * headerInfo.maxZError;\n var stuffedData, arrayBuf, store8, dataBytes, dataWords;\n var lutArr, lutData, lutBytes, lutBitsPerElement, bitsPerPixel;\n var zMax = headerInfo.numDims > 1 ? headerInfo.maxValues[iDim] : headerInfo.zMax;\n if (doLut) {\n data.counter.lut++;\n lutBytes = view.getUint8(blockPtr);\n lutBitsPerElement = numBits;\n blockPtr++;\n dataBytes = Math.ceil((lutBytes - 1) * numBits / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n\n data.ptr += blockPtr;\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n\n lutData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n\n bitsPerPixel = 0;\n while ((lutBytes - 1) >>> bitsPerPixel) {\n bitsPerPixel++;\n }\n dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n stuffedData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n if (fileVersion >= 3) {\n lutArr = BitStuffer.unstuffLUT2(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n }\n else {\n lutArr = BitStuffer.unstuffLUT(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n }\n //lutArr.unshift(0);\n if (fileVersion >= 3) {\n //BitStuffer.unstuff2(block, blockDataBuffer, headerInfo.zMax);\n BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n }\n else {\n BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n }\n }\n else {\n //console.debug(\"bitstuffer\");\n data.counter.bitstuffer++;\n bitsPerPixel = numBits;\n data.ptr += blockPtr;\n if (bitsPerPixel > 0) {\n dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n stuffedData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n if (fileVersion >= 3) {\n if (offset === null) {\n BitStuffer.originalUnstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n }\n else {\n BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n }\n }\n else {\n if (offset === null) {\n BitStuffer.originalUnstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n }\n else {\n BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n }\n }\n }\n }\n }\n\n },\n\n readTiles: function(input, data, OutPixelTypeArray) {\n var headerInfo = data.headerInfo;\n var width = headerInfo.width;\n var height = headerInfo.height;\n var microBlockSize = headerInfo.microBlockSize;\n var imageType = headerInfo.imageType;\n var dataTypeSize = Lerc2Helpers.getDataTypeSize(imageType);\n var numBlocksX = Math.ceil(width / microBlockSize);\n var numBlocksY = Math.ceil(height / microBlockSize);\n data.pixels.numBlocksY = numBlocksY;\n data.pixels.numBlocksX = numBlocksX;\n data.pixels.ptr = 0;\n var row = 0, col = 0, blockY = 0, blockX = 0, thisBlockHeight = 0, thisBlockWidth = 0, bytesLeft = 0, headerByte = 0, bits67 = 0, testCode = 0, outPtr = 0, outStride = 0, numBytes = 0, bytesleft = 0, z = 0, blockPtr = 0;\n var view, block, arrayBuf, store8, rawData;\n var blockEncoding;\n var blockDataBuffer = new OutPixelTypeArray(microBlockSize * microBlockSize);\n var lastBlockHeight = (height % microBlockSize) || microBlockSize;\n var lastBlockWidth = (width % microBlockSize) || microBlockSize;\n var offsetType, offset;\n var numDims = headerInfo.numDims, iDim;\n var mask = data.pixels.resultMask;\n var resultPixels = data.pixels.resultPixels;\n for (blockY = 0; blockY < numBlocksY; blockY++) {\n thisBlockHeight = (blockY !== numBlocksY - 1) ? microBlockSize : lastBlockHeight;\n for (blockX = 0; blockX < numBlocksX; blockX++) {\n //console.debug(\"y\" + blockY + \" x\" + blockX);\n thisBlockWidth = (blockX !== numBlocksX - 1) ? microBlockSize : lastBlockWidth;\n\n outPtr = blockY * width * microBlockSize + blockX * microBlockSize;\n outStride = width - thisBlockWidth;\n\n\n for (iDim = 0; iDim < numDims; iDim++) {\n if (numDims > 1) {\n resultPixels = new OutPixelTypeArray(data.pixels.resultPixels.buffer, width * height * iDim * dataTypeSize, width * height);\n }\n bytesLeft = input.byteLength - data.ptr;\n view = new DataView(input, data.ptr, Math.min(10, bytesLeft));\n block = {};\n blockPtr = 0;\n headerByte = view.getUint8(0);\n blockPtr++;\n bits67 = (headerByte >> 6) & 0xFF;\n testCode = (headerByte >> 2) & 15; // use bits 2345 for integrity check\n if (testCode !== (((blockX * microBlockSize) >> 3) & 15)) {\n throw \"integrity issue\";\n //return false;\n }\n\n blockEncoding = headerByte & 3;\n if (blockEncoding > 3) {\n data.ptr += blockPtr;\n throw \"Invalid block encoding (\" + blockEncoding + \")\";\n }\n else if (blockEncoding === 2) { //constant 0\n data.counter.constant++;\n data.ptr += blockPtr;\n continue;\n }\n else if (blockEncoding === 0) { //uncompressed\n data.counter.uncompressed++;\n data.ptr += blockPtr;\n numBytes = thisBlockHeight * thisBlockWidth * dataTypeSize;\n bytesleft = input.byteLength - data.ptr;\n numBytes = numBytes < bytesleft ? numBytes : bytesleft;\n //bit alignment\n arrayBuf = new ArrayBuffer((numBytes % dataTypeSize) === 0 ? numBytes : (numBytes + dataTypeSize - numBytes % dataTypeSize));\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n z = 0;\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = rawData[z++];\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {//all valid\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = rawData[z++];\n }\n outPtr += outStride;\n }\n }\n data.ptr += z * dataTypeSize;\n }\n else { //1 or 3\n offsetType = Lerc2Helpers.getDataTypeUsed(imageType, bits67);\n offset = Lerc2Helpers.getOnePixel(block, blockPtr, offsetType, view);\n blockPtr += Lerc2Helpers.getDataTypeSize(offsetType);\n if (blockEncoding === 3) //constant offset value\n {\n data.ptr += blockPtr;\n data.counter.constantoffset++;\n //you can delete the following resultMask case in favor of performance because val is constant and users use nodata mask, otherwise nodatavalue post processing handles it too.\n //while the above statement is true, we're not doing it as we want to keep invalid pixel value at 0 rather than arbitrary values\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = offset;\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = offset;\n }\n outPtr += outStride;\n }\n }\n }\n else { //bitstuff encoding is 3\n data.ptr += blockPtr;\n //heavy lifting\n Lerc2Helpers.decodeBits(input, data, blockDataBuffer, offset, iDim);\n blockPtr = 0;\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = blockDataBuffer[blockPtr++];\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = blockDataBuffer[blockPtr++];\n }\n outPtr += outStride;\n }\n }\n }\n }\n }\n }\n }\n },\n\n /*****************\n * private methods (helper methods)\n *****************/\n\n formatFileInfo: function(data) {\n return {\n \"fileIdentifierString\": data.headerInfo.fileIdentifierString,\n \"fileVersion\": data.headerInfo.fileVersion,\n \"imageType\": data.headerInfo.imageType,\n \"height\": data.headerInfo.height,\n \"width\": data.headerInfo.width,\n \"numValidPixel\": data.headerInfo.numValidPixel,\n \"microBlockSize\": data.headerInfo.microBlockSize,\n \"blobSize\": data.headerInfo.blobSize,\n \"maxZError\": data.headerInfo.maxZError,\n \"pixelType\": Lerc2Helpers.getPixelType(data.headerInfo.imageType),\n \"eofOffset\": data.eofOffset,\n \"mask\": data.mask ? {\n \"numBytes\": data.mask.numBytes\n } : null,\n \"pixels\": {\n \"numBlocksX\": data.pixels.numBlocksX,\n \"numBlocksY\": data.pixels.numBlocksY,\n //\"numBytes\": data.pixels.numBytes,\n \"maxValue\": data.headerInfo.zMax,\n \"minValue\": data.headerInfo.zMin,\n \"noDataValue\": data.noDataValue\n }\n };\n },\n\n constructConstantSurface: function(data) {\n var val = data.headerInfo.zMax;\n var numDims = data.headerInfo.numDims;\n var numPixels = data.headerInfo.height * data.headerInfo.width;\n var numPixelAllDims = numPixels * numDims;\n var i=0, k = 0, nStart=0;\n var mask = data.pixels.resultMask;\n if (mask) {\n if (numDims > 1) {\n for (i=0; i < numDims; i++) {\n nStart = i * numPixels;\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[nStart + k] = val;\n }\n }\n }\n }\n else {\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[k] = val;\n }\n }\n }\n }\n else {\n if (data.pixels.resultPixels.fill) {\n data.pixels.resultPixels.fill(val);\n }\n else {\n for (k = 0; k < numPixelAllDims; k++) {\n data.pixels.resultPixels[k] = val;\n }\n }\n }\n return;\n },\n\n getDataTypeArray: function(t) {\n var tp;\n switch (t) {\n case 0: //char\n tp = Int8Array;\n break;\n case 1: //byte\n tp = Uint8Array;\n break;\n case 2: //short\n tp = Int16Array;\n break;\n case 3: //ushort\n tp = Uint16Array;\n break;\n case 4:\n tp = Int32Array;\n break;\n case 5:\n tp = Uint32Array;\n break;\n case 6:\n tp = Float32Array;\n break;\n case 7:\n tp = Float64Array;\n break;\n default:\n tp = Float32Array;\n }\n return tp;\n },\n\n getPixelType: function(t) {\n var tp;\n switch (t) {\n case 0: //char\n tp = \"S8\";\n break;\n case 1: //byte\n tp = \"U8\";\n break;\n case 2: //short\n tp = \"S16\";\n break;\n case 3: //ushort\n tp = \"U16\";\n break;\n case 4:\n tp = \"S32\";\n break;\n case 5:\n tp = \"U32\";\n break;\n case 6:\n tp = \"F32\";\n break;\n case 7:\n tp = \"F64\"; //not supported\n break;\n default:\n tp = \"F32\";\n }\n return tp;\n },\n\n isValidPixelValue: function(t, val) {\n if (val === null) {\n return false;\n }\n var isValid;\n switch (t) {\n case 0: //char\n isValid = val >= -128 && val <= 127;\n break;\n case 1: //byte (unsigned char)\n isValid = val >= 0 && val <= 255;\n break;\n case 2: //short\n isValid = val >= -32768 && val <= 32767;\n break;\n case 3: //ushort\n isValid = val >= 0 && val <= 65536;\n break;\n case 4: //int 32\n isValid = val >= -2147483648 && val <= 2147483647;\n break;\n case 5: //uinit 32\n isValid = val >= 0 && val <= 4294967296;\n break;\n case 6:\n isValid = val >= -3.4027999387901484e+38 && val <= 3.4027999387901484e+38;\n break;\n case 7:\n isValid = val >= 5e-324 && val <= 1.7976931348623157e+308;\n break;\n default:\n isValid = false;\n }\n return isValid;\n },\n\n getDataTypeSize: function(t) {\n var s = 0;\n switch (t) {\n case 0: //ubyte\n case 1: //byte\n s = 1;\n break;\n case 2: //short\n case 3: //ushort\n s = 2;\n break;\n case 4:\n case 5:\n case 6:\n s = 4;\n break;\n case 7:\n s = 8;\n break;\n default:\n s = t;\n }\n return s;\n },\n\n getDataTypeUsed: function(dt, tc) {\n var t = dt;\n switch (dt) {\n case 2: //short\n case 4: //long\n t = dt - tc;\n break;\n case 3: //ushort\n case 5: //ulong\n t = dt - 2 * tc;\n break;\n case 6: //float\n if (0 === tc) {\n t = dt;\n }\n else if (1 === tc) {\n t = 2;\n }\n else {\n t = 1;//byte\n }\n break;\n case 7: //double\n if (0 === tc) {\n t = dt;\n }\n else {\n t = dt - 2 * tc + 1;\n }\n break;\n default:\n t = dt;\n break;\n }\n return t;\n },\n\n getOnePixel: function(block, blockPtr, offsetType, view) {\n var temp = 0;\n switch (offsetType) {\n case 0: //char\n temp = view.getInt8(blockPtr);\n break;\n case 1: //byte\n temp = view.getUint8(blockPtr);\n break;\n case 2:\n temp = view.getInt16(blockPtr, true);\n break;\n case 3:\n temp = view.getUint16(blockPtr, true);\n break;\n case 4:\n temp = view.getInt32(blockPtr, true);\n break;\n case 5:\n temp = view.getUInt32(blockPtr, true);\n break;\n case 6:\n temp = view.getFloat32(blockPtr, true);\n break;\n case 7:\n //temp = view.getFloat64(blockPtr, true);\n //blockPtr += 8;\n //lerc2 encoding doesnt handle float 64, force to float32???\n temp = view.getFloat64(blockPtr, true);\n break;\n default:\n throw (\"the decoder does not understand this pixel type\");\n }\n return temp;\n }\n };\n\n /***************************************************\n *private class for a tree node. Huffman code is in Lerc2Helpers\n ****************************************************/\n var TreeNode = function(val, left, right) {\n this.val = val;\n this.left = left;\n this.right = right;\n };\n\n var Lerc2Decode = {\n /*\n * ********removed options compared to LERC1. We can bring some of them back if needed.\n * removed pixel type. LERC2 is typed and doesn't require user to give pixel type\n * changed encodedMaskData to maskData. LERC2 's js version make it faster to use maskData directly.\n * removed returnMask. mask is used by LERC2 internally and is cost free. In case of user input mask, it's returned as well and has neglible cost.\n * removed nodatavalue. Because LERC2 pixels are typed, nodatavalue will sacrify a useful value for many types (8bit, 16bit) etc,\n * user has to be knowledgable enough about raster and their data to avoid usability issues. so nodata value is simply removed now.\n * We can add it back later if their's a clear requirement.\n * removed encodedMask. This option was not implemented in LercDecode. It can be done after decoding (less efficient)\n * removed computeUsedBitDepths.\n *\n *\n * response changes compared to LERC1\n * 1. encodedMaskData is not available\n * 2. noDataValue is optional (returns only if user's noDataValue is with in the valid data type range)\n * 3. maskData is always available\n */\n /*****************\n * public properties\n ******************/\n //HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, not configurable\n\n /*****************\n * public methods\n *****************/\n\n /**\n * Decode a LERC2 byte stream and return an object containing the pixel data and optional metadata.\n *\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] options Decoding options\n * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid LERC file is expected at that position\n * @param {boolean} [options.returnFileInfo] If true, the return value will have a fileInfo property that contains metadata obtained from the LERC headers and the decoding process\n */\n decode: function(/*byte array*/ input, /*object*/ options) {\n //currently there's a bug in the sparse array, so please do not set to false\n options = options || {};\n var noDataValue = options.noDataValue;\n\n //initialize\n var i = 0, data = {};\n data.ptr = options.inputOffset || 0;\n data.pixels = {};\n\n // File header\n if (!Lerc2Helpers.readHeaderInfo(input, data)) {\n return;\n }\n var headerInfo = data.headerInfo;\n var fileVersion = headerInfo.fileVersion;\n var OutPixelTypeArray = Lerc2Helpers.getDataTypeArray(headerInfo.imageType);\n\n // Mask Header\n Lerc2Helpers.readMask(input, data);\n if (headerInfo.numValidPixel !== headerInfo.width * headerInfo.height && !data.pixels.resultMask) {\n data.pixels.resultMask = options.maskData;\n }\n\n var numPixels = headerInfo.width * headerInfo.height;\n data.pixels.resultPixels = new OutPixelTypeArray(numPixels * headerInfo.numDims);\n\n data.counter = {\n onesweep: 0,\n uncompressed: 0,\n lut: 0,\n bitstuffer: 0,\n constant: 0,\n constantoffset: 0\n };\n if (headerInfo.numValidPixel !== 0) {\n //not tested\n if (headerInfo.zMax === headerInfo.zMin) //constant surface\n {\n Lerc2Helpers.constructConstantSurface(data);\n }\n else if (fileVersion >= 4 && Lerc2Helpers.checkMinMaxRanges(input, data)) {\n Lerc2Helpers.constructConstantSurface(data);\n }\n else {\n var view = new DataView(input, data.ptr, 2);\n var bReadDataOneSweep = view.getUint8(0);\n data.ptr++;\n if (bReadDataOneSweep) {\n //console.debug(\"OneSweep\");\n Lerc2Helpers.readDataOneSweep(input, data, OutPixelTypeArray);\n }\n else {\n //lerc2.1: //bitstuffing + lut\n //lerc2.2: //bitstuffing + lut + huffman\n //lerc2.3: new bitstuffer\n if (fileVersion > 1 && headerInfo.imageType <= 1 && Math.abs(headerInfo.maxZError - 0.5) < 0.00001) {\n //this is 2.x plus 8 bit (unsigned and signed) data, possiblity of Huffman\n var flagHuffman = view.getUint8(1);\n data.ptr++;\n data.encodeMode = flagHuffman;\n if (flagHuffman > 2 || (fileVersion < 4 && flagHuffman > 1)) {\n throw \"Invalid Huffman flag \" + flagHuffman;\n }\n if (flagHuffman) {//1 - delta Huffman, 2 - Huffman\n //console.log(\"Huffman\");\n Lerc2Helpers.readHuffman(input, data, OutPixelTypeArray);\n }\n else {\n //console.log(\"Tiles\");\n Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n }\n }\n else { //lerc2.x non-8 bit data\n //console.log(\"Tiles\");\n Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n }\n }\n }\n }\n\n data.eofOffset = data.ptr;\n var diff;\n if (options.inputOffset) {\n diff = data.headerInfo.blobSize + options.inputOffset - data.ptr;\n if (Math.abs(diff) >= 1) {\n //console.debug(\"incorrect eof: dataptr \" + data.ptr + \" offset \" + options.inputOffset + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n data.eofOffset = options.inputOffset + data.headerInfo.blobSize;\n }\n }\n else {\n diff = data.headerInfo.blobSize - data.ptr;\n if (Math.abs(diff) >= 1) {\n //console.debug(\"incorrect first band eof: dataptr \" + data.ptr + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n data.eofOffset = data.headerInfo.blobSize;\n }\n }\n\n var result = {\n width: headerInfo.width,\n height: headerInfo.height,\n pixelData: data.pixels.resultPixels,\n minValue: headerInfo.zMin,\n maxValue: headerInfo.zMax,\n validPixelCount: headerInfo.numValidPixel,\n dimCount: headerInfo.numDims,\n dimStats: {\n minValues: headerInfo.minValues,\n maxValues: headerInfo.maxValues\n },\n maskData: data.pixels.resultMask\n //noDataValue: noDataValue\n };\n\n //we should remove this if there's no existing client\n //optional noDataValue processing, it's user's responsiblity\n if (data.pixels.resultMask && Lerc2Helpers.isValidPixelValue(headerInfo.imageType, noDataValue)) {\n var mask = data.pixels.resultMask;\n for (i = 0; i < numPixels; i++) {\n if (!mask[i]) {\n result.pixelData[i] = noDataValue;\n }\n }\n result.noDataValue = noDataValue;\n }\n data.noDataValue = noDataValue;\n if (options.returnFileInfo) {\n result.fileInfo = Lerc2Helpers.formatFileInfo(data);\n }\n return result;\n },\n\n getBandCount: function(/*byte array*/ input) {\n var count = 0;\n var i = 0;\n var temp = {};\n temp.ptr = 0;\n temp.pixels = {};\n while (i < input.byteLength - 58) {\n Lerc2Helpers.readHeaderInfo(input, temp);\n i += temp.headerInfo.blobSize;\n count++;\n temp.ptr = i;\n }\n return count;\n }\n };\n\n return Lerc2Decode;\n })();\n\n var isPlatformLittleEndian = (function() {\n var a = new ArrayBuffer(4);\n var b = new Uint8Array(a);\n var c = new Uint32Array(a);\n c[0] = 1;\n return b[0] === 1;\n })();\n\n var Lerc = {\n /************wrapper**********************************************/\n /**\n * A wrapper for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.\n *\n * @alias module:Lerc\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] The decoding options below are optional.\n * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position.\n * @param {string} [options.pixelType] (LERC1 only) Default value is F32. Valid pixel types for input are U8/S8/S16/U16/S32/U32/F32.\n * @param {number} [options.noDataValue] (LERC1 only). It is recommended to use the returned mask instead of setting this value.\n * @returns {{width, height, pixels, pixelType, mask, statistics}}\n * @property {number} width Width of decoded image.\n * @property {number} height Height of decoded image.\n * @property {array} pixels [band1, band2, …] Each band is a typed array of width*height.\n * @property {string} pixelType The type of pixels represented in the output.\n * @property {mask} mask Typed array with a size of width*height, or null if all pixels are valid.\n * @property {array} statistics [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values\n **/\n decode: function(encodedData, options) {\n if (!isPlatformLittleEndian) {\n throw \"Big endian system is not supported.\";\n }\n options = options || {};\n var inputOffset = options.inputOffset || 0;\n var fileIdView = new Uint8Array(encodedData, inputOffset, 10);\n var fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n var lerc, majorVersion;\n if (fileIdentifierString.trim() === \"CntZImage\") {\n lerc = LercDecode;\n majorVersion = 1;\n }\n else if (fileIdentifierString.substring(0, 5) === \"Lerc2\") {\n lerc = Lerc2Decode;\n majorVersion = 2;\n }\n else {\n throw \"Unexpected file identifier string: \" + fileIdentifierString;\n }\n\n var iPlane = 0, eof = encodedData.byteLength - 10, encodedMaskData, bandMasks = [], bandMask, maskData;\n var decodedPixelBlock = {\n width: 0,\n height: 0,\n pixels: [],\n pixelType: options.pixelType,\n mask: null,\n statistics: []\n };\n\n while (inputOffset < eof) {\n var result = lerc.decode(encodedData, {\n inputOffset: inputOffset,//for both lerc1 and lerc2\n encodedMaskData: encodedMaskData,//lerc1 only\n maskData: maskData,//lerc2 only\n returnMask: iPlane === 0 ? true : false,//lerc1 only\n returnEncodedMask: iPlane === 0 ? true : false,//lerc1 only\n returnFileInfo: true,//for both lerc1 and lerc2\n pixelType: options.pixelType || null,//lerc1 only\n noDataValue: options.noDataValue || null//lerc1 only\n });\n\n inputOffset = result.fileInfo.eofOffset;\n if (iPlane === 0) {\n encodedMaskData = result.encodedMaskData;//lerc1\n maskData = result.maskData;//lerc2\n decodedPixelBlock.width = result.width;\n decodedPixelBlock.height = result.height;\n decodedPixelBlock.dimCount = result.dimCount || 1;\n //decodedPixelBlock.dimStats = decodedPixelBlock.dimStats;\n decodedPixelBlock.pixelType = result.pixelType || result.fileInfo.pixelType;\n decodedPixelBlock.mask = result.maskData;\n }\n if (majorVersion >1 && result.fileInfo.mask && result.fileInfo.mask.numBytes > 0) {\n bandMasks.push(result.maskData);\n }\n\n iPlane++;\n decodedPixelBlock.pixels.push(result.pixelData);\n decodedPixelBlock.statistics.push({\n minValue: result.minValue,\n maxValue: result.maxValue,\n noDataValue: result.noDataValue,\n dimStats: result.dimStats\n });\n }\n var i, j, numPixels;\n if (majorVersion > 1 && bandMasks.length > 1) {\n numPixels = decodedPixelBlock.width * decodedPixelBlock.height;\n decodedPixelBlock.bandMasks = bandMasks;\n maskData = new Uint8Array(numPixels);\n maskData.set(bandMasks[0]);\n for (i = 1; i < bandMasks.length; i++) {\n bandMask = bandMasks[i];\n for (j = 0; j < numPixels; j++) {\n maskData[j] = maskData[j] & bandMask[j];\n }\n }\n decodedPixelBlock.maskData = maskData;\n }\n\n return decodedPixelBlock;\n }\n };\n\n tmp.Lerc = Lerc;\n})();\n\nexport default tmp.Lerc;\n","var tmp = {};\n\n/*! NoSleep.js v0.9.0 - git.io/vfn01 - Rich Tibbett - MIT license */\n(function webpackUniversalModuleDefinition(root, factory) {\n\t// if(typeof exports === 'object' && typeof module === 'object')\n\t// \tmodule.exports = factory();\n\t// else if(typeof define === 'function' && define.amd)\n\t// \tdefine([], factory);\n\t// else if(typeof exports === 'object')\n\t// \texports[\"NoSleep\"] = factory();\n\t// else\n\t\troot[\"NoSleep\"] = factory();\n})(tmp, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = __webpack_require__(1),\n webm = _require.webm,\n mp4 = _require.mp4;\n\n// Detect iOS browsers < version 10\n\n\nvar oldIOS = typeof navigator !== 'undefined' && parseFloat(('' + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ''])[1]).replace('undefined', '3_2').replace('_', '.').replace('_', '')) < 10 && !window.MSStream;\n\nvar NoSleep = function () {\n function NoSleep() {\n var _this = this;\n\n _classCallCheck(this, NoSleep);\n\n if (oldIOS) {\n this.noSleepTimer = null;\n } else {\n // Set up no sleep video element\n this.noSleepVideo = document.createElement('video');\n\n this.noSleepVideo.setAttribute('muted', '');\n this.noSleepVideo.setAttribute('title', 'No Sleep');\n this.noSleepVideo.setAttribute('playsinline', '');\n\n this._addSourceToVideo(this.noSleepVideo, 'webm', webm);\n this._addSourceToVideo(this.noSleepVideo, 'mp4', mp4);\n\n this.noSleepVideo.addEventListener('loadedmetadata', function () {\n if (_this.noSleepVideo.duration <= 1) {\n // webm source\n _this.noSleepVideo.setAttribute('loop', '');\n } else {\n // mp4 source\n _this.noSleepVideo.addEventListener('timeupdate', function () {\n if (_this.noSleepVideo.currentTime > 0.5) {\n _this.noSleepVideo.currentTime = Math.random();\n }\n });\n }\n });\n }\n }\n\n _createClass(NoSleep, [{\n key: '_addSourceToVideo',\n value: function _addSourceToVideo(element, type, dataURI) {\n var source = document.createElement('source');\n source.src = dataURI;\n source.type = 'video/' + type;\n element.appendChild(source);\n }\n }, {\n key: 'enable',\n value: function enable() {\n if (oldIOS) {\n this.disable();\n console.warn('\\n NoSleep enabled for older iOS devices. This can interrupt\\n active or long-running network requests from completing successfully.\\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\\n ');\n this.noSleepTimer = window.setInterval(function () {\n if (!document.hidden) {\n window.location.href = window.location.href.split('#')[0];\n window.setTimeout(window.stop, 0);\n }\n }, 15000);\n } else {\n this.noSleepVideo.play();\n }\n }\n }, {\n key: 'disable',\n value: function disable() {\n if (oldIOS) {\n if (this.noSleepTimer) {\n console.warn('\\n NoSleep now disabled for older iOS devices.\\n ');\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n }\n }]);\n\n return NoSleep;\n}();\n\n;\n\nmodule.exports = NoSleep;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n webm: 'data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=',\n mp4: 'data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQAD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'\n};\n\n/***/ })\n/******/ ]);\n});\n\nexport default tmp.NoSleep;\n","import Clock from \"../Core/Clock.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\n/**\n * A view model which exposes a {@link Clock} for user interfaces.\n * @alias ClockViewModel\n * @constructor\n *\n * @param {Clock} [clock] The clock object wrapped by this view model, if undefined a new instance will be created.\n *\n * @see Clock\n */\nfunction ClockViewModel(clock) {\n if (!defined(clock)) {\n clock = new Clock();\n }\n this._clock = clock;\n\n this._eventHelper = new EventHelper();\n this._eventHelper.add(clock.onTick, this.synchronize, this);\n\n /**\n * Gets the current system time.\n * This property is observable.\n * @type {JulianDate}\n */\n this.systemTime = knockout.observable(JulianDate.now());\n this.systemTime.equalityComparer = JulianDate.equals;\n\n /**\n * Gets or sets the start time of the clock.\n * See {@link Clock#startTime}.\n * This property is observable.\n * @type {JulianDate}\n */\n this.startTime = knockout.observable(clock.startTime);\n this.startTime.equalityComparer = JulianDate.equals;\n this.startTime.subscribe(function (value) {\n clock.startTime = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets the stop time of the clock.\n * See {@link Clock#stopTime}.\n * This property is observable.\n * @type {JulianDate}\n */\n this.stopTime = knockout.observable(clock.stopTime);\n this.stopTime.equalityComparer = JulianDate.equals;\n this.stopTime.subscribe(function (value) {\n clock.stopTime = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets the current time.\n * See {@link Clock#currentTime}.\n * This property is observable.\n * @type {JulianDate}\n */\n this.currentTime = knockout.observable(clock.currentTime);\n this.currentTime.equalityComparer = JulianDate.equals;\n this.currentTime.subscribe(function (value) {\n clock.currentTime = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets the clock multiplier.\n * See {@link Clock#multiplier}.\n * This property is observable.\n * @type {Number}\n */\n this.multiplier = knockout.observable(clock.multiplier);\n this.multiplier.subscribe(function (value) {\n clock.multiplier = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets the clock step setting.\n * See {@link Clock#clockStep}.\n * This property is observable.\n * @type {ClockStep}\n */\n this.clockStep = knockout.observable(clock.clockStep);\n this.clockStep.subscribe(function (value) {\n clock.clockStep = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets the clock range setting.\n * See {@link Clock#clockRange}.\n * This property is observable.\n * @type {ClockRange}\n */\n this.clockRange = knockout.observable(clock.clockRange);\n this.clockRange.subscribe(function (value) {\n clock.clockRange = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets whether the clock can animate.\n * See {@link Clock#canAnimate}.\n * This property is observable.\n * @type {Boolean}\n */\n this.canAnimate = knockout.observable(clock.canAnimate);\n this.canAnimate.subscribe(function (value) {\n clock.canAnimate = value;\n this.synchronize();\n }, this);\n\n /**\n * Gets or sets whether the clock should animate.\n * See {@link Clock#shouldAnimate}.\n * This property is observable.\n * @type {Boolean}\n */\n this.shouldAnimate = knockout.observable(clock.shouldAnimate);\n this.shouldAnimate.subscribe(function (value) {\n clock.shouldAnimate = value;\n this.synchronize();\n }, this);\n\n knockout.track(this, [\n \"systemTime\",\n \"startTime\",\n \"stopTime\",\n \"currentTime\",\n \"multiplier\",\n \"clockStep\",\n \"clockRange\",\n \"canAnimate\",\n \"shouldAnimate\",\n ]);\n}\n\nObject.defineProperties(ClockViewModel.prototype, {\n /**\n * Gets the underlying Clock.\n * @memberof ClockViewModel.prototype\n * @type {Clock}\n */\n clock: {\n get: function () {\n return this._clock;\n },\n },\n});\n\n/**\n * Updates the view model with the contents of the underlying clock.\n * Can be called to force an update of the viewModel if the underlying\n * clock has changed and <code>Clock.tick</code> has not yet been called.\n */\nClockViewModel.prototype.synchronize = function () {\n var clock = this._clock;\n\n this.systemTime = JulianDate.now();\n this.startTime = clock.startTime;\n this.stopTime = clock.stopTime;\n this.currentTime = clock.currentTime;\n this.multiplier = clock.multiplier;\n this.clockStep = clock.clockStep;\n this.clockRange = clock.clockRange;\n this.canAnimate = clock.canAnimate;\n this.shouldAnimate = clock.shouldAnimate;\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nClockViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the view model. Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nClockViewModel.prototype.destroy = function () {\n this._eventHelper.removeAll();\n\n destroyObject(this);\n};\nexport default ClockViewModel;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\n/**\n * Create a Command from a given function, for use with ViewModels.\n *\n * A Command is a function with an extra <code>canExecute</code> observable property to determine\n * whether the command can be executed. When executed, a Command function will check the\n * value of <code>canExecute</code> and throw if false. It also provides events for when\n * a command has been or is about to be executed.\n *\n * @function\n *\n * @param {Function} func The function to execute.\n * @param {Boolean} [canExecute=true] A boolean indicating whether the function can currently be executed.\n */\nfunction createCommand(func, canExecute) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(func)) {\n throw new DeveloperError(\"func is required.\");\n }\n //>>includeEnd('debug');\n\n canExecute = defaultValue(canExecute, true);\n\n var beforeExecute = new Event();\n var afterExecute = new Event();\n\n function command() {\n //>>includeStart('debug', pragmas.debug);\n if (!command.canExecute) {\n throw new DeveloperError(\"Cannot execute command, canExecute is false.\");\n }\n //>>includeEnd('debug');\n\n var commandInfo = {\n args: arguments,\n cancel: false,\n };\n\n var result;\n beforeExecute.raiseEvent(commandInfo);\n if (!commandInfo.cancel) {\n result = func.apply(null, arguments);\n afterExecute.raiseEvent(result);\n }\n return result;\n }\n\n command.canExecute = canExecute;\n knockout.track(command, [\"canExecute\"]);\n\n Object.defineProperties(command, {\n beforeExecute: {\n value: beforeExecute,\n },\n afterExecute: {\n value: afterExecute,\n },\n });\n\n return command;\n}\nexport default createCommand;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A static class with helper functions used by the CesiumInspector and Cesium3DTilesInspector\n * @private\n */\nvar InspectorShared = {};\n\n/**\n * Creates a checkbox component\n * @param {String} labelText The text to display in the checkbox label\n * @param {String} checkedBinding The name of the variable used for checked binding\n * @param {String} [enableBinding] The name of the variable used for enable binding\n * @return {Element}\n */\nInspectorShared.createCheckbox = function (\n labelText,\n checkedBinding,\n enableBinding\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"labelText\", labelText);\n Check.typeOf.string(\"checkedBinding\", checkedBinding);\n //>>includeEnd('debug');\n var checkboxContainer = document.createElement(\"div\");\n var checkboxLabel = document.createElement(\"label\");\n var checkboxInput = document.createElement(\"input\");\n checkboxInput.type = \"checkbox\";\n\n var binding = \"checked: \" + checkedBinding;\n if (defined(enableBinding)) {\n binding += \", enable: \" + enableBinding;\n }\n checkboxInput.setAttribute(\"data-bind\", binding);\n checkboxLabel.appendChild(checkboxInput);\n checkboxLabel.appendChild(document.createTextNode(labelText));\n checkboxContainer.appendChild(checkboxLabel);\n return checkboxContainer;\n};\n\n/**\n * Creates a section element\n * @param {Element} panel The parent element\n * @param {String} headerText The text to display at the top of the section\n * @param {String} sectionVisibleBinding The name of the variable used for visible binding\n * @param {String} toggleSectionVisibilityBinding The name of the function used to toggle visibility\n * @return {Element}\n */\nInspectorShared.createSection = function (\n panel,\n headerText,\n sectionVisibleBinding,\n toggleSectionVisibilityBinding\n) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"panel\", panel);\n Check.typeOf.string(\"headerText\", headerText);\n Check.typeOf.string(\"sectionVisibleBinding\", sectionVisibleBinding);\n Check.typeOf.string(\n \"toggleSectionVisibilityBinding\",\n toggleSectionVisibilityBinding\n );\n //>>includeEnd('debug');\n var section = document.createElement(\"div\");\n section.className = \"cesium-cesiumInspector-section\";\n section.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-cesiumInspector-section-collapsed\": !' +\n sectionVisibleBinding +\n \" }\"\n );\n panel.appendChild(section);\n\n var sectionHeader = document.createElement(\"h3\");\n sectionHeader.className = \"cesium-cesiumInspector-sectionHeader\";\n sectionHeader.appendChild(document.createTextNode(headerText));\n sectionHeader.setAttribute(\n \"data-bind\",\n \"click: \" + toggleSectionVisibilityBinding\n );\n section.appendChild(sectionHeader);\n\n var sectionContent = document.createElement(\"div\");\n sectionContent.className = \"cesium-cesiumInspector-sectionContent\";\n section.appendChild(sectionContent);\n return sectionContent;\n};\nexport default InspectorShared;\n","import knockout from \"../ThirdParty/knockout.js\";\n\n/**\n * Subscribe to a Knockout observable ES5 property, and immediately fire\n * the callback with the current value of the property.\n *\n * @private\n *\n * @function subscribeAndEvaluate\n *\n * @param {Object} owner The object containing the observable property.\n * @param {String} observablePropertyName The name of the observable property.\n * @param {Function} callback The callback function.\n * @param {Object} [target] The value of this in the callback function.\n * @param {String} [event='change'] The name of the event to receive notification for.\n * @returns The subscription object from Knockout which can be used to dispose the subscription later.\n */\nfunction subscribeAndEvaluate(\n owner,\n observablePropertyName,\n callback,\n target,\n event\n) {\n callback.call(target, owner[observablePropertyName]);\n return knockout\n .getObservable(owner, observablePropertyName)\n .subscribe(callback, target, event);\n}\nexport default subscribeAndEvaluate;\n","import defaultValue from \"../Core/defaultValue.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\n/**\n * A view model which exposes the properties of a toggle button.\n * @alias ToggleButtonViewModel\n * @constructor\n *\n * @param {Command} command The command which will be executed when the button is toggled.\n * @param {Object} [options] Object with the following properties:\n * @param {Boolean} [options.toggled=false] A boolean indicating whether the button should be initially toggled.\n * @param {String} [options.tooltip=''] A string containing the button's tooltip.\n */\nfunction ToggleButtonViewModel(command, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(command)) {\n throw new DeveloperError(\"command is required.\");\n }\n //>>includeEnd('debug');\n\n this._command = command;\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n /**\n * Gets or sets whether the button is currently toggled. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.toggled = defaultValue(options.toggled, false);\n\n /**\n * Gets or sets the button's tooltip. This property is observable.\n * @type {String}\n * @default ''\n */\n this.tooltip = defaultValue(options.tooltip, \"\");\n\n knockout.track(this, [\"toggled\", \"tooltip\"]);\n}\n\nObject.defineProperties(ToggleButtonViewModel.prototype, {\n /**\n * Gets the command which will be executed when the button is toggled.\n * @memberof ToggleButtonViewModel.prototype\n * @type {Command}\n */\n command: {\n get: function () {\n return this._command;\n },\n },\n});\nexport default ToggleButtonViewModel;\n","import ForEach from './ForEach.js'\nimport defined from '../../Core/defined.js'\n\n /**\n * Iterate through the objects within the glTF and delete their pipeline extras object.\n *\n * @param {Object} gltf A javascript object containing a glTF asset.\n * @returns {Object} glTF with no pipeline extras.\n *\n * @private\n */\n function removePipelineExtras(gltf) {\n ForEach.shader(gltf, function(shader) {\n removeExtras(shader);\n });\n ForEach.buffer(gltf, function(buffer) {\n removeExtras(buffer);\n });\n ForEach.image(gltf, function (image) {\n removeExtras(image);\n ForEach.compressedImage(image, function(compressedImage) {\n removeExtras(compressedImage);\n });\n });\n\n removeExtras(gltf);\n\n return gltf;\n }\n\n function removeExtras(object) {\n if (!defined(object.extras)) {\n return;\n }\n\n if (defined(object.extras._pipeline)) {\n delete object.extras._pipeline;\n }\n\n if (Object.keys(object.extras).length === 0) {\n delete object.extras;\n }\n }\n\n export default removePipelineExtras;\n","import Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport getElement from \"../getElement.js\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\n\nvar svgNS = \"http://www.w3.org/2000/svg\";\nvar xlinkNS = \"http://www.w3.org/1999/xlink\";\n\nvar widgetForDrag;\n\nvar gradientEnabledColor0 = Color.fromCssColorString(\"rgba(247,250,255,0.384)\");\nvar gradientEnabledColor1 = Color.fromCssColorString(\"rgba(143,191,255,0.216)\");\nvar gradientEnabledColor2 = Color.fromCssColorString(\"rgba(153,197,255,0.098)\");\nvar gradientEnabledColor3 = Color.fromCssColorString(\"rgba(255,255,255,0.086)\");\n\nvar gradientDisabledColor0 = Color.fromCssColorString(\n \"rgba(255,255,255,0.267)\"\n);\nvar gradientDisabledColor1 = Color.fromCssColorString(\"rgba(255,255,255,0)\");\n\nvar gradientKnobColor = Color.fromCssColorString(\"rgba(66,67,68,0.3)\");\nvar gradientPointerColor = Color.fromCssColorString(\"rgba(0,0,0,0.5)\");\n\nfunction getElementColor(element) {\n return Color.fromCssColorString(\n window.getComputedStyle(element).getPropertyValue(\"color\")\n );\n}\n\nvar svgIconsById = {\n animation_pathReset: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n d:\n \"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z\",\n },\n animation_pathPause: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n d: \"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z\",\n },\n animation_pathPlay: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n d: \"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z\",\n },\n animation_pathPlayReverse: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(-0.85,0.85) translate(-16,-16)\",\n d: \"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z\",\n },\n animation_pathLoop: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n d:\n \"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z\",\n },\n animation_pathClock: {\n tagName: \"path\",\n transform: \"translate(16,16) scale(0.85) translate(-16,-15.5)\",\n d:\n \"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z\",\n },\n animation_pathWingButton: {\n tagName: \"path\",\n d:\n \"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z\",\n },\n animation_pathPointer: {\n tagName: \"path\",\n d: \"M-15,-65,-15,-55,15,-55,15,-65,0,-95z\",\n },\n animation_pathSwooshFX: {\n tagName: \"path\",\n d:\n \"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z\",\n },\n};\n\n//Dynamically builds an SVG element from a JSON object.\nfunction svgFromObject(obj) {\n var ele = document.createElementNS(svgNS, obj.tagName);\n for (var field in obj) {\n if (obj.hasOwnProperty(field) && field !== \"tagName\") {\n if (field === \"children\") {\n var i;\n var len = obj.children.length;\n for (i = 0; i < len; ++i) {\n ele.appendChild(svgFromObject(obj.children[i]));\n }\n } else if (field.indexOf(\"xlink:\") === 0) {\n ele.setAttributeNS(xlinkNS, field.substring(6), obj[field]);\n } else if (field === \"textContent\") {\n ele.textContent = obj[field];\n } else {\n ele.setAttribute(field, obj[field]);\n }\n }\n }\n return ele;\n}\n\nfunction svgText(x, y, msg) {\n var text = document.createElementNS(svgNS, \"text\");\n text.setAttribute(\"x\", x);\n text.setAttribute(\"y\", y);\n text.setAttribute(\"class\", \"cesium-animation-svgText\");\n\n var tspan = document.createElementNS(svgNS, \"tspan\");\n tspan.textContent = msg;\n text.appendChild(tspan);\n return text;\n}\n\nfunction setShuttleRingPointer(shuttleRingPointer, knobOuter, angle) {\n shuttleRingPointer.setAttribute(\n \"transform\",\n \"translate(100,100) rotate(\" + angle + \")\"\n );\n knobOuter.setAttribute(\"transform\", \"rotate(\" + angle + \")\");\n}\n\nvar makeColorStringScratch = new Color();\nfunction makeColorString(background, gradient) {\n var gradientAlpha = gradient.alpha;\n var backgroundAlpha = 1.0 - gradientAlpha;\n makeColorStringScratch.red =\n background.red * backgroundAlpha + gradient.red * gradientAlpha;\n makeColorStringScratch.green =\n background.green * backgroundAlpha + gradient.green * gradientAlpha;\n makeColorStringScratch.blue =\n background.blue * backgroundAlpha + gradient.blue * gradientAlpha;\n return makeColorStringScratch.toCssColorString();\n}\n\nfunction rectButton(x, y, path) {\n var iconInfo = svgIconsById[path];\n\n var button = {\n tagName: \"g\",\n class: \"cesium-animation-rectButton\",\n transform: \"translate(\" + x + \",\" + y + \")\",\n children: [\n {\n tagName: \"rect\",\n class: \"cesium-animation-buttonGlow\",\n width: 32,\n height: 32,\n rx: 2,\n ry: 2,\n },\n {\n tagName: \"rect\",\n class: \"cesium-animation-buttonMain\",\n width: 32,\n height: 32,\n rx: 4,\n ry: 4,\n },\n {\n class: \"cesium-animation-buttonPath\",\n id: path,\n tagName: iconInfo.tagName,\n transform: iconInfo.transform,\n d: iconInfo.d,\n },\n {\n tagName: \"title\",\n textContent: \"\",\n },\n ],\n };\n return svgFromObject(button);\n}\n\nfunction wingButton(x, y, path) {\n var buttonIconInfo = svgIconsById[path];\n var wingIconInfo = svgIconsById[\"animation_pathWingButton\"];\n\n var button = {\n tagName: \"g\",\n class: \"cesium-animation-rectButton\",\n transform: \"translate(\" + x + \",\" + y + \")\",\n children: [\n {\n class: \"cesium-animation-buttonGlow\",\n id: \"animation_pathWingButton\",\n tagName: wingIconInfo.tagName,\n d: wingIconInfo.d,\n },\n {\n class: \"cesium-animation-buttonMain\",\n id: \"animation_pathWingButton\",\n tagName: wingIconInfo.tagName,\n d: wingIconInfo.d,\n },\n {\n class: \"cesium-animation-buttonPath\",\n id: path,\n tagName: buttonIconInfo.tagName,\n transform: buttonIconInfo.transform,\n d: buttonIconInfo.d,\n },\n {\n tagName: \"title\",\n textContent: \"\",\n },\n ],\n };\n return svgFromObject(button);\n}\n\nfunction setShuttleRingFromMouseOrTouch(widget, e) {\n var viewModel = widget._viewModel;\n var shuttleRingDragging = viewModel.shuttleRingDragging;\n\n if (shuttleRingDragging && widgetForDrag !== widget) {\n return;\n }\n\n if (\n e.type === \"mousedown\" ||\n (shuttleRingDragging && e.type === \"mousemove\") ||\n (e.type === \"touchstart\" && e.touches.length === 1) ||\n (shuttleRingDragging && e.type === \"touchmove\" && e.touches.length === 1)\n ) {\n var centerX = widget._centerX;\n var centerY = widget._centerY;\n var svg = widget._svgNode;\n var rect = svg.getBoundingClientRect();\n var clientX;\n var clientY;\n if (e.type === \"touchstart\" || e.type === \"touchmove\") {\n clientX = e.touches[0].clientX;\n clientY = e.touches[0].clientY;\n } else {\n clientX = e.clientX;\n clientY = e.clientY;\n }\n\n if (\n !shuttleRingDragging &&\n (clientX > rect.right ||\n clientX < rect.left ||\n clientY < rect.top ||\n clientY > rect.bottom)\n ) {\n return;\n }\n\n var pointerRect = widget._shuttleRingPointer.getBoundingClientRect();\n\n var x = clientX - centerX - rect.left;\n var y = clientY - centerY - rect.top;\n\n var angle = (Math.atan2(y, x) * 180) / Math.PI + 90;\n if (angle > 180) {\n angle -= 360;\n }\n var shuttleRingAngle = viewModel.shuttleRingAngle;\n if (\n shuttleRingDragging ||\n (clientX < pointerRect.right &&\n clientX > pointerRect.left &&\n clientY > pointerRect.top &&\n clientY < pointerRect.bottom)\n ) {\n widgetForDrag = widget;\n viewModel.shuttleRingDragging = true;\n viewModel.shuttleRingAngle = angle;\n } else if (angle < shuttleRingAngle) {\n viewModel.slower();\n } else if (angle > shuttleRingAngle) {\n viewModel.faster();\n }\n e.preventDefault();\n } else {\n if (widget === widgetForDrag) {\n widgetForDrag = undefined;\n }\n viewModel.shuttleRingDragging = false;\n }\n}\n\n//This is a private class for treating an SVG element like a button.\n//If we ever need a general purpose SVG button, we can make this generic.\nfunction SvgButton(svgElement, viewModel) {\n this._viewModel = viewModel;\n this.svgElement = svgElement;\n this._enabled = undefined;\n this._toggled = undefined;\n\n var that = this;\n this._clickFunction = function () {\n var command = that._viewModel.command;\n if (command.canExecute) {\n command();\n }\n };\n\n svgElement.addEventListener(\"click\", this._clickFunction, true);\n\n //TODO: Since the animation widget uses SVG and has no HTML backing,\n //we need to wire everything up manually. Knockout can supposedly\n //bind to SVG, so we we figure that out we can modify our SVG\n //to include the binding information directly.\n\n this._subscriptions = [\n //\n subscribeAndEvaluate(viewModel, \"toggled\", this.setToggled, this), //\n subscribeAndEvaluate(viewModel, \"tooltip\", this.setTooltip, this), //\n subscribeAndEvaluate(\n viewModel.command,\n \"canExecute\",\n this.setEnabled,\n this\n ),\n ];\n}\n\nSvgButton.prototype.destroy = function () {\n this.svgElement.removeEventListener(\"click\", this._clickFunction, true);\n var subscriptions = this._subscriptions;\n for (var i = 0, len = subscriptions.length; i < len; i++) {\n subscriptions[i].dispose();\n }\n destroyObject(this);\n};\n\nSvgButton.prototype.isDestroyed = function () {\n return false;\n};\n\nSvgButton.prototype.setEnabled = function (enabled) {\n if (this._enabled !== enabled) {\n this._enabled = enabled;\n\n if (!enabled) {\n this.svgElement.setAttribute(\"class\", \"cesium-animation-buttonDisabled\");\n return;\n }\n\n if (this._toggled) {\n this.svgElement.setAttribute(\n \"class\",\n \"cesium-animation-rectButton cesium-animation-buttonToggled\"\n );\n return;\n }\n\n this.svgElement.setAttribute(\"class\", \"cesium-animation-rectButton\");\n }\n};\n\nSvgButton.prototype.setToggled = function (toggled) {\n if (this._toggled !== toggled) {\n this._toggled = toggled;\n\n if (this._enabled) {\n if (toggled) {\n this.svgElement.setAttribute(\n \"class\",\n \"cesium-animation-rectButton cesium-animation-buttonToggled\"\n );\n } else {\n this.svgElement.setAttribute(\"class\", \"cesium-animation-rectButton\");\n }\n }\n }\n};\n\nSvgButton.prototype.setTooltip = function (tooltip) {\n this.svgElement.getElementsByTagName(\"title\")[0].textContent = tooltip;\n};\n\n/**\n * <span style=\"display: block; text-align: center;\">\n * <img src=\"Images/AnimationWidget.png\" width=\"211\" height=\"142\" alt=\"\" />\n * <br />Animation widget\n * </span>\n * <br /><br />\n * The Animation widget provides buttons for play, pause, and reverse, along with the\n * current time and date, surrounded by a \"shuttle ring\" for controlling the speed of animation.\n * <br /><br />\n * The \"shuttle ring\" concept is borrowed from video editing, where typically a\n * \"jog wheel\" can be rotated to move past individual animation frames very slowly, and\n * a surrounding shuttle ring can be twisted to control direction and speed of fast playback.\n * Cesium typically treats time as continuous (not broken into pre-defined animation frames),\n * so this widget offers no jog wheel. Instead, the shuttle ring is capable of both fast and\n * very slow playback. Click and drag the shuttle ring pointer itself (shown above in green),\n * or click in the rest of the ring area to nudge the pointer to the next preset speed in that direction.\n * <br /><br />\n * The Animation widget also provides a \"realtime\" button (in the upper-left) that keeps\n * animation time in sync with the end user's system clock, typically displaying\n * \"today\" or \"right now.\" This mode is not available in {@link ClockRange.CLAMPED} or\n * {@link ClockRange.LOOP_STOP} mode if the current time is outside of {@link Clock}'s startTime and endTime.\n *\n * @alias Animation\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {AnimationViewModel} viewModel The view model used by this widget.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n *\n * @example\n * // In HTML head, include a link to Animation.css stylesheet,\n * // and in the body, include: <div id=\"animationContainer\"></div>\n *\n * var clock = new Cesium.Clock();\n * var clockViewModel = new Cesium.ClockViewModel(clock);\n * var viewModel = new Cesium.AnimationViewModel(clockViewModel);\n * var widget = new Cesium.Animation('animationContainer', viewModel);\n *\n * function tick() {\n * clock.tick();\n * Cesium.requestAnimationFrame(tick);\n * }\n * Cesium.requestAnimationFrame(tick);\n *\n * @see AnimationViewModel\n * @see Clock\n */\nfunction Animation(container, viewModel) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n if (!defined(viewModel)) {\n throw new DeveloperError(\"viewModel is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n this._viewModel = viewModel;\n this._container = container;\n this._centerX = 0;\n this._centerY = 0;\n this._defsElement = undefined;\n this._svgNode = undefined;\n this._topG = undefined;\n this._lastHeight = undefined;\n this._lastWidth = undefined;\n\n var ownerDocument = container.ownerDocument;\n\n // Firefox requires SVG references to be included directly, not imported from external CSS.\n // Also, CSS minifiers get confused by this being in an external CSS file.\n var cssStyle = document.createElement(\"style\");\n cssStyle.textContent =\n \".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }\\\n.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }\\\n.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }\\\n.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }\\\n.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }\\\n.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }\\\n.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }\\\n.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }\\\n.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }\\\n.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }\\\n.cesium-animation-knobInner { fill: url(#animation_knobInner); }\";\n\n ownerDocument.head.insertBefore(cssStyle, ownerDocument.head.childNodes[0]);\n\n var themeEle = document.createElement(\"div\");\n themeEle.className = \"cesium-animation-theme\";\n themeEle.innerHTML =\n '<div class=\"cesium-animation-themeNormal\"></div>\\\n<div class=\"cesium-animation-themeHover\"></div>\\\n<div class=\"cesium-animation-themeSelect\"></div>\\\n<div class=\"cesium-animation-themeDisabled\"></div>\\\n<div class=\"cesium-animation-themeKnob\"></div>\\\n<div class=\"cesium-animation-themePointer\"></div>\\\n<div class=\"cesium-animation-themeSwoosh\"></div>\\\n<div class=\"cesium-animation-themeSwooshHover\"></div>';\n\n this._theme = themeEle;\n this._themeNormal = themeEle.childNodes[0];\n this._themeHover = themeEle.childNodes[1];\n this._themeSelect = themeEle.childNodes[2];\n this._themeDisabled = themeEle.childNodes[3];\n this._themeKnob = themeEle.childNodes[4];\n this._themePointer = themeEle.childNodes[5];\n this._themeSwoosh = themeEle.childNodes[6];\n this._themeSwooshHover = themeEle.childNodes[7];\n\n var svg = document.createElementNS(svgNS, \"svg:svg\");\n this._svgNode = svg;\n\n // Define the XLink namespace that SVG uses\n svg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", xlinkNS);\n\n var topG = document.createElementNS(svgNS, \"g\");\n this._topG = topG;\n\n this._realtimeSVG = new SvgButton(\n wingButton(3, 4, \"animation_pathClock\"),\n viewModel.playRealtimeViewModel\n );\n this._playReverseSVG = new SvgButton(\n rectButton(44, 99, \"animation_pathPlayReverse\"),\n viewModel.playReverseViewModel\n );\n this._playForwardSVG = new SvgButton(\n rectButton(124, 99, \"animation_pathPlay\"),\n viewModel.playForwardViewModel\n );\n this._pauseSVG = new SvgButton(\n rectButton(84, 99, \"animation_pathPause\"),\n viewModel.pauseViewModel\n );\n\n var buttonsG = document.createElementNS(svgNS, \"g\");\n buttonsG.appendChild(this._realtimeSVG.svgElement);\n buttonsG.appendChild(this._playReverseSVG.svgElement);\n buttonsG.appendChild(this._playForwardSVG.svgElement);\n buttonsG.appendChild(this._pauseSVG.svgElement);\n\n var shuttleRingBackPanel = svgFromObject({\n tagName: \"circle\",\n class: \"cesium-animation-shuttleRingBack\",\n cx: 100,\n cy: 100,\n r: 99,\n });\n this._shuttleRingBackPanel = shuttleRingBackPanel;\n\n var swooshIconInfo = svgIconsById[\"animation_pathSwooshFX\"];\n var shuttleRingPointerIconInfo = svgIconsById[\"animation_pathPointer\"];\n\n var shuttleRingSwooshG = svgFromObject({\n tagName: \"g\",\n class: \"cesium-animation-shuttleRingSwoosh\",\n children: [\n {\n tagName: swooshIconInfo.tagName,\n transform: \"translate(100,97) scale(-1,1)\",\n id: \"animation_pathSwooshFX\",\n d: swooshIconInfo.d,\n },\n {\n tagName: swooshIconInfo.tagName,\n transform: \"translate(100,97)\",\n id: \"animation_pathSwooshFX\",\n d: swooshIconInfo.d,\n },\n {\n tagName: \"line\",\n x1: 100,\n y1: 8,\n x2: 100,\n y2: 22,\n },\n ],\n });\n this._shuttleRingSwooshG = shuttleRingSwooshG;\n\n this._shuttleRingPointer = svgFromObject({\n class: \"cesium-animation-shuttleRingPointer\",\n id: \"animation_pathPointer\",\n tagName: shuttleRingPointerIconInfo.tagName,\n d: shuttleRingPointerIconInfo.d,\n });\n\n var knobG = svgFromObject({\n tagName: \"g\",\n transform: \"translate(100,100)\",\n });\n\n this._knobOuter = svgFromObject({\n tagName: \"circle\",\n class: \"cesium-animation-knobOuter\",\n cx: 0,\n cy: 0,\n r: 71,\n });\n\n var knobInnerAndShieldSize = 61;\n\n var knobInner = svgFromObject({\n tagName: \"circle\",\n class: \"cesium-animation-knobInner\",\n cx: 0,\n cy: 0,\n r: knobInnerAndShieldSize,\n });\n\n this._knobDate = svgText(0, -24, \"\");\n this._knobTime = svgText(0, -7, \"\");\n this._knobStatus = svgText(0, -41, \"\");\n\n // widget shield catches clicks on the knob itself (even while DOM elements underneath are changing).\n var knobShield = svgFromObject({\n tagName: \"circle\",\n class: \"cesium-animation-blank\",\n cx: 0,\n cy: 0,\n r: knobInnerAndShieldSize,\n });\n\n var shuttleRingBackG = document.createElementNS(svgNS, \"g\");\n shuttleRingBackG.setAttribute(\"class\", \"cesium-animation-shuttleRingG\");\n\n container.appendChild(themeEle);\n topG.appendChild(shuttleRingBackG);\n topG.appendChild(knobG);\n topG.appendChild(buttonsG);\n\n shuttleRingBackG.appendChild(shuttleRingBackPanel);\n shuttleRingBackG.appendChild(shuttleRingSwooshG);\n shuttleRingBackG.appendChild(this._shuttleRingPointer);\n\n knobG.appendChild(this._knobOuter);\n knobG.appendChild(knobInner);\n knobG.appendChild(this._knobDate);\n knobG.appendChild(this._knobTime);\n knobG.appendChild(this._knobStatus);\n knobG.appendChild(knobShield);\n\n svg.appendChild(topG);\n container.appendChild(svg);\n\n var that = this;\n function mouseCallback(e) {\n setShuttleRingFromMouseOrTouch(that, e);\n }\n this._mouseCallback = mouseCallback;\n\n shuttleRingBackPanel.addEventListener(\"mousedown\", mouseCallback, true);\n shuttleRingBackPanel.addEventListener(\"touchstart\", mouseCallback, true);\n shuttleRingSwooshG.addEventListener(\"mousedown\", mouseCallback, true);\n shuttleRingSwooshG.addEventListener(\"touchstart\", mouseCallback, true);\n ownerDocument.addEventListener(\"mousemove\", mouseCallback, true);\n ownerDocument.addEventListener(\"touchmove\", mouseCallback, true);\n ownerDocument.addEventListener(\"mouseup\", mouseCallback, true);\n ownerDocument.addEventListener(\"touchend\", mouseCallback, true);\n ownerDocument.addEventListener(\"touchcancel\", mouseCallback, true);\n this._shuttleRingPointer.addEventListener(\"mousedown\", mouseCallback, true);\n this._shuttleRingPointer.addEventListener(\"touchstart\", mouseCallback, true);\n this._knobOuter.addEventListener(\"mousedown\", mouseCallback, true);\n this._knobOuter.addEventListener(\"touchstart\", mouseCallback, true);\n\n //TODO: Since the animation widget uses SVG and has no HTML backing,\n //we need to wire everything up manually. Knockout can supposedly\n //bind to SVG, so we we figure that out we can modify our SVG\n //to include the binding information directly.\n\n var timeNode = this._knobTime.childNodes[0];\n var dateNode = this._knobDate.childNodes[0];\n var statusNode = this._knobStatus.childNodes[0];\n var isPaused;\n this._subscriptions = [\n //\n subscribeAndEvaluate(viewModel.pauseViewModel, \"toggled\", function (value) {\n if (isPaused !== value) {\n isPaused = value;\n if (isPaused) {\n that._shuttleRingPointer.setAttribute(\n \"class\",\n \"cesium-animation-shuttleRingPausePointer\"\n );\n } else {\n that._shuttleRingPointer.setAttribute(\n \"class\",\n \"cesium-animation-shuttleRingPointer\"\n );\n }\n }\n }),\n\n subscribeAndEvaluate(viewModel, \"shuttleRingAngle\", function (value) {\n setShuttleRingPointer(that._shuttleRingPointer, that._knobOuter, value);\n }),\n\n subscribeAndEvaluate(viewModel, \"dateLabel\", function (value) {\n if (dateNode.textContent !== value) {\n dateNode.textContent = value;\n }\n }),\n\n subscribeAndEvaluate(viewModel, \"timeLabel\", function (value) {\n if (timeNode.textContent !== value) {\n timeNode.textContent = value;\n }\n }),\n\n subscribeAndEvaluate(viewModel, \"multiplierLabel\", function (value) {\n if (statusNode.textContent !== value) {\n statusNode.textContent = value;\n }\n }),\n ];\n\n this.applyThemeChanges();\n this.resize();\n}\n\nObject.defineProperties(Animation.prototype, {\n /**\n * Gets the parent container.\n *\n * @memberof Animation.prototype\n * @type {Element}\n * @readonly\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n *\n * @memberof Animation.prototype\n * @type {AnimationViewModel}\n * @readonly\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nAnimation.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the animation widget. Should be called if permanently\n * removing the widget from layout.\n */\nAnimation.prototype.destroy = function () {\n if (defined(this._observer)) {\n this._observer.disconnect();\n this._observer = undefined;\n }\n\n var doc = this._container.ownerDocument;\n\n var mouseCallback = this._mouseCallback;\n this._shuttleRingBackPanel.removeEventListener(\n \"mousedown\",\n mouseCallback,\n true\n );\n this._shuttleRingBackPanel.removeEventListener(\n \"touchstart\",\n mouseCallback,\n true\n );\n this._shuttleRingSwooshG.removeEventListener(\n \"mousedown\",\n mouseCallback,\n true\n );\n this._shuttleRingSwooshG.removeEventListener(\n \"touchstart\",\n mouseCallback,\n true\n );\n doc.removeEventListener(\"mousemove\", mouseCallback, true);\n doc.removeEventListener(\"touchmove\", mouseCallback, true);\n doc.removeEventListener(\"mouseup\", mouseCallback, true);\n doc.removeEventListener(\"touchend\", mouseCallback, true);\n doc.removeEventListener(\"touchcancel\", mouseCallback, true);\n this._shuttleRingPointer.removeEventListener(\n \"mousedown\",\n mouseCallback,\n true\n );\n this._shuttleRingPointer.removeEventListener(\n \"touchstart\",\n mouseCallback,\n true\n );\n this._knobOuter.removeEventListener(\"mousedown\", mouseCallback, true);\n this._knobOuter.removeEventListener(\"touchstart\", mouseCallback, true);\n\n this._container.removeChild(this._svgNode);\n this._container.removeChild(this._theme);\n this._realtimeSVG.destroy();\n this._playReverseSVG.destroy();\n this._playForwardSVG.destroy();\n this._pauseSVG.destroy();\n\n var subscriptions = this._subscriptions;\n for (var i = 0, len = subscriptions.length; i < len; i++) {\n subscriptions[i].dispose();\n }\n\n return destroyObject(this);\n};\n\n/**\n * Resizes the widget to match the container size.\n * This function should be called whenever the container size is changed.\n */\nAnimation.prototype.resize = function () {\n var parentWidth = this._container.clientWidth;\n var parentHeight = this._container.clientHeight;\n if (parentWidth === this._lastWidth && parentHeight === this._lastHeight) {\n return;\n }\n\n var svg = this._svgNode;\n\n //The width and height as the SVG was originally drawn.\n var baseWidth = 200;\n var baseHeight = 132;\n\n var width = parentWidth;\n var height = parentHeight;\n\n if (parentWidth === 0 && parentHeight === 0) {\n width = baseWidth;\n height = baseHeight;\n } else if (parentWidth === 0) {\n height = parentHeight;\n width = baseWidth * (parentHeight / baseHeight);\n } else if (parentHeight === 0) {\n width = parentWidth;\n height = baseHeight * (parentWidth / baseWidth);\n }\n\n var scaleX = width / baseWidth;\n var scaleY = height / baseHeight;\n\n svg.style.cssText =\n \"width: \" +\n width +\n \"px; height: \" +\n height +\n \"px; position: absolute; bottom: 0; left: 0; overflow: hidden;\";\n svg.setAttribute(\"width\", width);\n svg.setAttribute(\"height\", height);\n svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\n\n this._topG.setAttribute(\"transform\", \"scale(\" + scaleX + \",\" + scaleY + \")\");\n\n this._centerX = Math.max(1, 100.0 * scaleX);\n this._centerY = Math.max(1, 100.0 * scaleY);\n\n this._lastHeight = parentWidth;\n this._lastWidth = parentHeight;\n};\n\n/**\n * Updates the widget to reflect any modified CSS rules for theming.\n *\n * @example\n * //Switch to the cesium-lighter theme.\n * document.body.className = 'cesium-lighter';\n * animation.applyThemeChanges();\n */\nAnimation.prototype.applyThemeChanges = function () {\n // Since we rely on computed styles for themeing, we can't actually\n // do anything if the container has not yet been added to the DOM.\n // Set up an observer to be notified when it is added and apply\n // the changes at that time.\n\n var doc = this._container.ownerDocument;\n\n if (!doc.body.contains(this._container)) {\n if (defined(this._observer)) {\n //Already listening.\n return;\n }\n var that = this;\n that._observer = new MutationObserver(function () {\n if (doc.body.contains(that._container)) {\n that._observer.disconnect();\n that._observer = undefined;\n that.applyThemeChanges();\n }\n });\n that._observer.observe(doc, { childList: true, subtree: true });\n return;\n }\n\n var buttonNormalBackColor = getElementColor(this._themeNormal);\n var buttonHoverBackColor = getElementColor(this._themeHover);\n var buttonToggledBackColor = getElementColor(this._themeSelect);\n var buttonDisabledBackColor = getElementColor(this._themeDisabled);\n var knobBackColor = getElementColor(this._themeKnob);\n var pointerColor = getElementColor(this._themePointer);\n var swooshColor = getElementColor(this._themeSwoosh);\n var swooshHoverColor = getElementColor(this._themeSwooshHover);\n\n var defsElement = svgFromObject({\n tagName: \"defs\",\n children: [\n {\n id: \"animation_buttonNormal\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n //add a 'stop-opacity' field to make translucent.\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": makeColorString(\n buttonNormalBackColor,\n gradientEnabledColor0\n ),\n },\n {\n tagName: \"stop\",\n offset: \"12%\",\n \"stop-color\": makeColorString(\n buttonNormalBackColor,\n gradientEnabledColor1\n ),\n },\n {\n tagName: \"stop\",\n offset: \"46%\",\n \"stop-color\": makeColorString(\n buttonNormalBackColor,\n gradientEnabledColor2\n ),\n },\n {\n tagName: \"stop\",\n offset: \"81%\",\n \"stop-color\": makeColorString(\n buttonNormalBackColor,\n gradientEnabledColor3\n ),\n },\n ],\n },\n {\n id: \"animation_buttonHovered\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": makeColorString(\n buttonHoverBackColor,\n gradientEnabledColor0\n ),\n },\n {\n tagName: \"stop\",\n offset: \"12%\",\n \"stop-color\": makeColorString(\n buttonHoverBackColor,\n gradientEnabledColor1\n ),\n },\n {\n tagName: \"stop\",\n offset: \"46%\",\n \"stop-color\": makeColorString(\n buttonHoverBackColor,\n gradientEnabledColor2\n ),\n },\n {\n tagName: \"stop\",\n offset: \"81%\",\n \"stop-color\": makeColorString(\n buttonHoverBackColor,\n gradientEnabledColor3\n ),\n },\n ],\n },\n {\n id: \"animation_buttonToggled\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": makeColorString(\n buttonToggledBackColor,\n gradientEnabledColor0\n ),\n },\n {\n tagName: \"stop\",\n offset: \"12%\",\n \"stop-color\": makeColorString(\n buttonToggledBackColor,\n gradientEnabledColor1\n ),\n },\n {\n tagName: \"stop\",\n offset: \"46%\",\n \"stop-color\": makeColorString(\n buttonToggledBackColor,\n gradientEnabledColor2\n ),\n },\n {\n tagName: \"stop\",\n offset: \"81%\",\n \"stop-color\": makeColorString(\n buttonToggledBackColor,\n gradientEnabledColor3\n ),\n },\n ],\n },\n {\n id: \"animation_buttonDisabled\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": makeColorString(\n buttonDisabledBackColor,\n gradientDisabledColor0\n ),\n },\n {\n tagName: \"stop\",\n offset: \"75%\",\n \"stop-color\": makeColorString(\n buttonDisabledBackColor,\n gradientDisabledColor1\n ),\n },\n ],\n },\n {\n id: \"animation_blurred\",\n tagName: \"filter\",\n width: \"200%\",\n height: \"200%\",\n x: \"-50%\",\n y: \"-50%\",\n children: [\n {\n tagName: \"feGaussianBlur\",\n stdDeviation: 4,\n in: \"SourceGraphic\",\n },\n ],\n },\n {\n id: \"animation_shuttleRingSwooshGradient\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-opacity\": 0.2,\n \"stop-color\": swooshColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"85%\",\n \"stop-opacity\": 0.85,\n \"stop-color\": swooshColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"95%\",\n \"stop-opacity\": 0.05,\n \"stop-color\": swooshColor.toCssColorString(),\n },\n ],\n },\n {\n id: \"animation_shuttleRingSwooshHovered\",\n tagName: \"linearGradient\",\n x1: \"50%\",\n y1: \"0%\",\n x2: \"50%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-opacity\": 0.2,\n \"stop-color\": swooshHoverColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"85%\",\n \"stop-opacity\": 0.85,\n \"stop-color\": swooshHoverColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"95%\",\n \"stop-opacity\": 0.05,\n \"stop-color\": swooshHoverColor.toCssColorString(),\n },\n ],\n },\n {\n id: \"animation_shuttleRingPointerGradient\",\n tagName: \"linearGradient\",\n x1: \"0%\",\n y1: \"50%\",\n x2: \"100%\",\n y2: \"50%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": pointerColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"40%\",\n \"stop-color\": pointerColor.toCssColorString(),\n },\n {\n tagName: \"stop\",\n offset: \"60%\",\n \"stop-color\": makeColorString(pointerColor, gradientPointerColor),\n },\n {\n tagName: \"stop\",\n offset: \"100%\",\n \"stop-color\": makeColorString(pointerColor, gradientPointerColor),\n },\n ],\n },\n {\n id: \"animation_shuttleRingPointerPaused\",\n tagName: \"linearGradient\",\n x1: \"0%\",\n y1: \"50%\",\n x2: \"100%\",\n y2: \"50%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"0%\",\n \"stop-color\": \"#CCC\",\n },\n {\n tagName: \"stop\",\n offset: \"40%\",\n \"stop-color\": \"#CCC\",\n },\n {\n tagName: \"stop\",\n offset: \"60%\",\n \"stop-color\": \"#555\",\n },\n {\n tagName: \"stop\",\n offset: \"100%\",\n \"stop-color\": \"#555\",\n },\n ],\n },\n {\n id: \"animation_knobOuter\",\n tagName: \"linearGradient\",\n x1: \"20%\",\n y1: \"0%\",\n x2: \"90%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"5%\",\n \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor0),\n },\n {\n tagName: \"stop\",\n offset: \"60%\",\n \"stop-color\": makeColorString(knobBackColor, gradientKnobColor),\n },\n {\n tagName: \"stop\",\n offset: \"85%\",\n \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor1),\n },\n ],\n },\n {\n id: \"animation_knobInner\",\n tagName: \"linearGradient\",\n x1: \"20%\",\n y1: \"0%\",\n x2: \"90%\",\n y2: \"100%\",\n children: [\n {\n tagName: \"stop\",\n offset: \"5%\",\n \"stop-color\": makeColorString(knobBackColor, gradientKnobColor),\n },\n {\n tagName: \"stop\",\n offset: \"60%\",\n \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor0),\n },\n {\n tagName: \"stop\",\n offset: \"85%\",\n \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor3),\n },\n ],\n },\n ],\n });\n\n if (!defined(this._defsElement)) {\n this._svgNode.appendChild(defsElement);\n } else {\n this._svgNode.replaceChild(defsElement, this._defsElement);\n }\n this._defsElement = defsElement;\n};\nexport default Animation;\n","import binarySearch from \"../../Core/binarySearch.js\";\nimport ClockRange from \"../../Core/ClockRange.js\";\nimport ClockStep from \"../../Core/ClockStep.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport sprintf from \"../../ThirdParty/sprintf.js\";\nimport createCommand from \"../createCommand.js\";\nimport ToggleButtonViewModel from \"../ToggleButtonViewModel.js\";\n\nvar monthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\nvar realtimeShuttleRingAngle = 15;\nvar maxShuttleRingAngle = 105;\n\nfunction numberComparator(left, right) {\n return left - right;\n}\n\nfunction getTypicalMultiplierIndex(multiplier, shuttleRingTicks) {\n var index = binarySearch(shuttleRingTicks, multiplier, numberComparator);\n return index < 0 ? ~index : index;\n}\n\nfunction angleToMultiplier(angle, shuttleRingTicks) {\n //Use a linear scale for -1 to 1 between -15 < angle < 15 degrees\n if (Math.abs(angle) <= realtimeShuttleRingAngle) {\n return angle / realtimeShuttleRingAngle;\n }\n\n var minp = realtimeShuttleRingAngle;\n var maxp = maxShuttleRingAngle;\n var maxv;\n var minv = 0;\n var scale;\n if (angle > 0) {\n maxv = Math.log(shuttleRingTicks[shuttleRingTicks.length - 1]);\n scale = (maxv - minv) / (maxp - minp);\n return Math.exp(minv + scale * (angle - minp));\n }\n\n maxv = Math.log(-shuttleRingTicks[0]);\n scale = (maxv - minv) / (maxp - minp);\n return -Math.exp(minv + scale * (Math.abs(angle) - minp));\n}\n\nfunction multiplierToAngle(multiplier, shuttleRingTicks, clockViewModel) {\n if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) {\n return realtimeShuttleRingAngle;\n }\n\n if (Math.abs(multiplier) <= 1) {\n return multiplier * realtimeShuttleRingAngle;\n }\n\n var fastedMultipler = shuttleRingTicks[shuttleRingTicks.length - 1];\n if (multiplier > fastedMultipler) {\n multiplier = fastedMultipler;\n } else if (multiplier < -fastedMultipler) {\n multiplier = -fastedMultipler;\n }\n\n var minp = realtimeShuttleRingAngle;\n var maxp = maxShuttleRingAngle;\n var maxv;\n var minv = 0;\n var scale;\n\n if (multiplier > 0) {\n maxv = Math.log(fastedMultipler);\n scale = (maxv - minv) / (maxp - minp);\n return (Math.log(multiplier) - minv) / scale + minp;\n }\n\n maxv = Math.log(-shuttleRingTicks[0]);\n scale = (maxv - minv) / (maxp - minp);\n return -((Math.log(Math.abs(multiplier)) - minv) / scale + minp);\n}\n\n/**\n * The view model for the {@link Animation} widget.\n * @alias AnimationViewModel\n * @constructor\n *\n * @param {ClockViewModel} clockViewModel The ClockViewModel instance to use.\n *\n * @see Animation\n */\nfunction AnimationViewModel(clockViewModel) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(clockViewModel)) {\n throw new DeveloperError(\"clockViewModel is required.\");\n }\n //>>includeEnd('debug');\n\n var that = this;\n this._clockViewModel = clockViewModel;\n this._allShuttleRingTicks = [];\n this._dateFormatter = AnimationViewModel.defaultDateFormatter;\n this._timeFormatter = AnimationViewModel.defaultTimeFormatter;\n\n /**\n * Gets or sets whether the shuttle ring is currently being dragged. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.shuttleRingDragging = false;\n\n /**\n * Gets or sets whether dragging the shuttle ring should cause the multiplier\n * to snap to the defined tick values rather than interpolating between them.\n * This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.snapToTicks = false;\n\n knockout.track(this, [\n \"_allShuttleRingTicks\",\n \"_dateFormatter\",\n \"_timeFormatter\",\n \"shuttleRingDragging\",\n \"snapToTicks\",\n ]);\n\n this._sortedFilteredPositiveTicks = [];\n\n this.setShuttleRingTicks(AnimationViewModel.defaultTicks);\n\n /**\n * Gets the string representation of the current time. This property is observable.\n * @type {String}\n */\n this.timeLabel = undefined;\n knockout.defineProperty(this, \"timeLabel\", function () {\n return that._timeFormatter(that._clockViewModel.currentTime, that);\n });\n\n /**\n * Gets the string representation of the current date. This property is observable.\n * @type {String}\n */\n this.dateLabel = undefined;\n knockout.defineProperty(this, \"dateLabel\", function () {\n return that._dateFormatter(that._clockViewModel.currentTime, that);\n });\n\n /**\n * Gets the string representation of the current multiplier. This property is observable.\n * @type {String}\n */\n this.multiplierLabel = undefined;\n knockout.defineProperty(this, \"multiplierLabel\", function () {\n var clockViewModel = that._clockViewModel;\n if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) {\n return \"Today\";\n }\n\n var multiplier = clockViewModel.multiplier;\n\n //If it's a whole number, just return it.\n if (multiplier % 1 === 0) {\n return multiplier.toFixed(0) + \"x\";\n }\n\n //Convert to decimal string and remove any trailing zeroes\n return multiplier.toFixed(3).replace(/0{0,3}$/, \"\") + \"x\";\n });\n\n /**\n * Gets or sets the current shuttle ring angle. This property is observable.\n * @type {Number}\n */\n this.shuttleRingAngle = undefined;\n knockout.defineProperty(this, \"shuttleRingAngle\", {\n get: function () {\n return multiplierToAngle(\n clockViewModel.multiplier,\n that._allShuttleRingTicks,\n clockViewModel\n );\n },\n set: function (angle) {\n angle = Math.max(\n Math.min(angle, maxShuttleRingAngle),\n -maxShuttleRingAngle\n );\n var ticks = that._allShuttleRingTicks;\n\n var clockViewModel = that._clockViewModel;\n clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n\n //If we are at the max angle, simply return the max value in either direction.\n if (Math.abs(angle) === maxShuttleRingAngle) {\n clockViewModel.multiplier =\n angle > 0 ? ticks[ticks.length - 1] : ticks[0];\n return;\n }\n\n var multiplier = angleToMultiplier(angle, ticks);\n if (that.snapToTicks) {\n multiplier = ticks[getTypicalMultiplierIndex(multiplier, ticks)];\n } else if (multiplier !== 0) {\n var positiveMultiplier = Math.abs(multiplier);\n\n if (positiveMultiplier > 100) {\n var numDigits = positiveMultiplier.toFixed(0).length - 2;\n var divisor = Math.pow(10, numDigits);\n multiplier = (Math.round(multiplier / divisor) * divisor) | 0;\n } else if (positiveMultiplier > realtimeShuttleRingAngle) {\n multiplier = Math.round(multiplier);\n } else if (positiveMultiplier > 1) {\n multiplier = +multiplier.toFixed(1);\n } else if (positiveMultiplier > 0) {\n multiplier = +multiplier.toFixed(2);\n }\n }\n clockViewModel.multiplier = multiplier;\n },\n });\n\n this._canAnimate = undefined;\n knockout.defineProperty(this, \"_canAnimate\", function () {\n var clockViewModel = that._clockViewModel;\n var clockRange = clockViewModel.clockRange;\n\n if (that.shuttleRingDragging || clockRange === ClockRange.UNBOUNDED) {\n return true;\n }\n\n var multiplier = clockViewModel.multiplier;\n var currentTime = clockViewModel.currentTime;\n var startTime = clockViewModel.startTime;\n\n var result = false;\n if (clockRange === ClockRange.LOOP_STOP) {\n result =\n JulianDate.greaterThan(currentTime, startTime) ||\n (currentTime.equals(startTime) && multiplier > 0);\n } else {\n var stopTime = clockViewModel.stopTime;\n result =\n (JulianDate.greaterThan(currentTime, startTime) &&\n JulianDate.lessThan(currentTime, stopTime)) || //\n (currentTime.equals(startTime) && multiplier > 0) || //\n (currentTime.equals(stopTime) && multiplier < 0);\n }\n\n if (!result) {\n clockViewModel.shouldAnimate = false;\n }\n return result;\n });\n\n this._isSystemTimeAvailable = undefined;\n knockout.defineProperty(this, \"_isSystemTimeAvailable\", function () {\n var clockViewModel = that._clockViewModel;\n var clockRange = clockViewModel.clockRange;\n if (clockRange === ClockRange.UNBOUNDED) {\n return true;\n }\n\n var systemTime = clockViewModel.systemTime;\n return (\n JulianDate.greaterThanOrEquals(systemTime, clockViewModel.startTime) &&\n JulianDate.lessThanOrEquals(systemTime, clockViewModel.stopTime)\n );\n });\n\n this._isAnimating = undefined;\n knockout.defineProperty(this, \"_isAnimating\", function () {\n return (\n that._clockViewModel.shouldAnimate &&\n (that._canAnimate || that.shuttleRingDragging)\n );\n });\n\n var pauseCommand = createCommand(function () {\n var clockViewModel = that._clockViewModel;\n if (clockViewModel.shouldAnimate) {\n clockViewModel.shouldAnimate = false;\n } else if (that._canAnimate) {\n clockViewModel.shouldAnimate = true;\n }\n });\n\n this._pauseViewModel = new ToggleButtonViewModel(pauseCommand, {\n toggled: knockout.computed(function () {\n return !that._isAnimating;\n }),\n tooltip: \"Pause\",\n });\n\n var playReverseCommand = createCommand(function () {\n var clockViewModel = that._clockViewModel;\n var multiplier = clockViewModel.multiplier;\n if (multiplier > 0) {\n clockViewModel.multiplier = -multiplier;\n }\n clockViewModel.shouldAnimate = true;\n });\n\n this._playReverseViewModel = new ToggleButtonViewModel(playReverseCommand, {\n toggled: knockout.computed(function () {\n return that._isAnimating && clockViewModel.multiplier < 0;\n }),\n tooltip: \"Play Reverse\",\n });\n\n var playForwardCommand = createCommand(function () {\n var clockViewModel = that._clockViewModel;\n var multiplier = clockViewModel.multiplier;\n if (multiplier < 0) {\n clockViewModel.multiplier = -multiplier;\n }\n clockViewModel.shouldAnimate = true;\n });\n\n this._playForwardViewModel = new ToggleButtonViewModel(playForwardCommand, {\n toggled: knockout.computed(function () {\n return (\n that._isAnimating &&\n clockViewModel.multiplier > 0 &&\n clockViewModel.clockStep !== ClockStep.SYSTEM_CLOCK\n );\n }),\n tooltip: \"Play Forward\",\n });\n\n var playRealtimeCommand = createCommand(function () {\n that._clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK;\n }, knockout.getObservable(this, \"_isSystemTimeAvailable\"));\n\n this._playRealtimeViewModel = new ToggleButtonViewModel(playRealtimeCommand, {\n toggled: knockout.computed(function () {\n return clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK;\n }),\n tooltip: knockout.computed(function () {\n return that._isSystemTimeAvailable\n ? \"Today (real-time)\"\n : \"Current time not in range\";\n }),\n });\n\n this._slower = createCommand(function () {\n var clockViewModel = that._clockViewModel;\n var shuttleRingTicks = that._allShuttleRingTicks;\n var multiplier = clockViewModel.multiplier;\n var index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) - 1;\n if (index >= 0) {\n clockViewModel.multiplier = shuttleRingTicks[index];\n }\n });\n\n this._faster = createCommand(function () {\n var clockViewModel = that._clockViewModel;\n var shuttleRingTicks = that._allShuttleRingTicks;\n var multiplier = clockViewModel.multiplier;\n var index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) + 1;\n if (index < shuttleRingTicks.length) {\n clockViewModel.multiplier = shuttleRingTicks[index];\n }\n });\n}\n\n/**\n * Gets or sets the default date formatter used by new instances.\n *\n * @member\n * @type {AnimationViewModel.DateFormatter}\n */\nAnimationViewModel.defaultDateFormatter = function (date, viewModel) {\n var gregorianDate = JulianDate.toGregorianDate(date);\n return (\n monthNames[gregorianDate.month - 1] +\n \" \" +\n gregorianDate.day +\n \" \" +\n gregorianDate.year\n );\n};\n\n/**\n * Gets or sets the default array of known clock multipliers associated with new instances of the shuttle ring.\n * @type {Number[]}\n */\nAnimationViewModel.defaultTicks = [\n //\n 0.001,\n 0.002,\n 0.005,\n 0.01,\n 0.02,\n 0.05,\n 0.1,\n 0.25,\n 0.5,\n 1.0,\n 2.0,\n 5.0,\n 10.0, //\n 15.0,\n 30.0,\n 60.0,\n 120.0,\n 300.0,\n 600.0,\n 900.0,\n 1800.0,\n 3600.0,\n 7200.0,\n 14400.0, //\n 21600.0,\n 43200.0,\n 86400.0,\n 172800.0,\n 345600.0,\n 604800.0,\n];\n\n/**\n * Gets or sets the default time formatter used by new instances.\n *\n * @member\n * @type {AnimationViewModel.TimeFormatter}\n */\nAnimationViewModel.defaultTimeFormatter = function (date, viewModel) {\n var gregorianDate = JulianDate.toGregorianDate(date);\n var millisecond = Math.round(gregorianDate.millisecond);\n if (Math.abs(viewModel._clockViewModel.multiplier) < 1) {\n return sprintf(\n \"%02d:%02d:%02d.%03d\",\n gregorianDate.hour,\n gregorianDate.minute,\n gregorianDate.second,\n millisecond\n );\n }\n return sprintf(\n \"%02d:%02d:%02d UTC\",\n gregorianDate.hour,\n gregorianDate.minute,\n gregorianDate.second\n );\n};\n\n/**\n * Gets a copy of the array of positive known clock multipliers to associate with the shuttle ring.\n *\n * @returns {Number[]} The array of known clock multipliers associated with the shuttle ring.\n */\nAnimationViewModel.prototype.getShuttleRingTicks = function () {\n return this._sortedFilteredPositiveTicks.slice(0);\n};\n\n/**\n * Sets the array of positive known clock multipliers to associate with the shuttle ring.\n * These values will have negative equivalents created for them and sets both the minimum\n * and maximum range of values for the shuttle ring as well as the values that are snapped\n * to when a single click is made. The values need not be in order, as they will be sorted\n * automatically, and duplicate values will be removed.\n *\n * @param {Number[]} positiveTicks The list of known positive clock multipliers to associate with the shuttle ring.\n */\nAnimationViewModel.prototype.setShuttleRingTicks = function (positiveTicks) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(positiveTicks)) {\n throw new DeveloperError(\"positiveTicks is required.\");\n }\n //>>includeEnd('debug');\n\n var i;\n var len;\n var tick;\n\n var hash = {};\n var sortedFilteredPositiveTicks = this._sortedFilteredPositiveTicks;\n sortedFilteredPositiveTicks.length = 0;\n for (i = 0, len = positiveTicks.length; i < len; ++i) {\n tick = positiveTicks[i];\n //filter duplicates\n if (!hash.hasOwnProperty(tick)) {\n hash[tick] = true;\n sortedFilteredPositiveTicks.push(tick);\n }\n }\n sortedFilteredPositiveTicks.sort(numberComparator);\n\n var allTicks = [];\n for (len = sortedFilteredPositiveTicks.length, i = len - 1; i >= 0; --i) {\n tick = sortedFilteredPositiveTicks[i];\n if (tick !== 0) {\n allTicks.push(-tick);\n }\n }\n Array.prototype.push.apply(allTicks, sortedFilteredPositiveTicks);\n\n this._allShuttleRingTicks = allTicks;\n};\n\nObject.defineProperties(AnimationViewModel.prototype, {\n /**\n * Gets a command that decreases the speed of animation.\n * @memberof AnimationViewModel.prototype\n * @type {Command}\n */\n slower: {\n get: function () {\n return this._slower;\n },\n },\n\n /**\n * Gets a command that increases the speed of animation.\n * @memberof AnimationViewModel.prototype\n * @type {Command}\n */\n faster: {\n get: function () {\n return this._faster;\n },\n },\n\n /**\n * Gets the clock view model.\n * @memberof AnimationViewModel.prototype\n *\n * @type {ClockViewModel}\n */\n clockViewModel: {\n get: function () {\n return this._clockViewModel;\n },\n },\n\n /**\n * Gets the pause toggle button view model.\n * @memberof AnimationViewModel.prototype\n *\n * @type {ToggleButtonViewModel}\n */\n pauseViewModel: {\n get: function () {\n return this._pauseViewModel;\n },\n },\n\n /**\n * Gets the reverse toggle button view model.\n * @memberof AnimationViewModel.prototype\n *\n * @type {ToggleButtonViewModel}\n */\n playReverseViewModel: {\n get: function () {\n return this._playReverseViewModel;\n },\n },\n\n /**\n * Gets the play toggle button view model.\n * @memberof AnimationViewModel.prototype\n *\n * @type {ToggleButtonViewModel}\n */\n playForwardViewModel: {\n get: function () {\n return this._playForwardViewModel;\n },\n },\n\n /**\n * Gets the realtime toggle button view model.\n * @memberof AnimationViewModel.prototype\n *\n * @type {ToggleButtonViewModel}\n */\n playRealtimeViewModel: {\n get: function () {\n return this._playRealtimeViewModel;\n },\n },\n\n /**\n * Gets or sets the function which formats a date for display.\n * @memberof AnimationViewModel.prototype\n *\n * @type {AnimationViewModel.DateFormatter}\n * @default AnimationViewModel.defaultDateFormatter\n */\n dateFormatter: {\n //TODO:@exception {DeveloperError} dateFormatter must be a function.\n get: function () {\n return this._dateFormatter;\n },\n set: function (dateFormatter) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof dateFormatter !== \"function\") {\n throw new DeveloperError(\"dateFormatter must be a function\");\n }\n //>>includeEnd('debug');\n\n this._dateFormatter = dateFormatter;\n },\n },\n\n /**\n * Gets or sets the function which formats a time for display.\n * @memberof AnimationViewModel.prototype\n *\n * @type {AnimationViewModel.TimeFormatter}\n * @default AnimationViewModel.defaultTimeFormatter\n */\n timeFormatter: {\n //TODO:@exception {DeveloperError} timeFormatter must be a function.\n get: function () {\n return this._timeFormatter;\n },\n set: function (timeFormatter) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof timeFormatter !== \"function\") {\n throw new DeveloperError(\"timeFormatter must be a function\");\n }\n //>>includeEnd('debug');\n\n this._timeFormatter = timeFormatter;\n },\n },\n});\n\n//Currently exposed for tests.\nAnimationViewModel._maxShuttleRingAngle = maxShuttleRingAngle;\nAnimationViewModel._realtimeShuttleRingAngle = realtimeShuttleRingAngle;\n\n/**\n * A function that formats a date for display.\n * @callback AnimationViewModel.DateFormatter\n *\n * @param {JulianDate} date The date to be formatted\n * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting.\n * @returns {String} The string representation of the calendar date portion of the provided date.\n */\n\n/**\n * A function that formats a time for display.\n * @callback AnimationViewModel.TimeFormatter\n *\n * @param {JulianDate} date The date to be formatted\n * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting.\n * @returns {String} The string representation of the time portion of the provided date.\n */\nexport default AnimationViewModel;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport EllipsoidTerrainProvider from \"../../Core/EllipsoidTerrainProvider.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link BaseLayerPicker}.\n * @alias BaseLayerPickerViewModel\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Globe} options.globe The Globe to use.\n * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery.\n * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used.\n * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain.\n * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used.\n *\n * @exception {DeveloperError} imageryProviderViewModels must be an array.\n * @exception {DeveloperError} terrainProviderViewModels must be an array.\n */\nfunction BaseLayerPickerViewModel(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var globe = options.globe;\n var imageryProviderViewModels = defaultValue(\n options.imageryProviderViewModels,\n []\n );\n var terrainProviderViewModels = defaultValue(\n options.terrainProviderViewModels,\n []\n );\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(globe)) {\n throw new DeveloperError(\"globe is required\");\n }\n //>>includeEnd('debug');\n\n this._globe = globe;\n\n /**\n * Gets or sets an array of ProviderViewModel instances available for imagery selection.\n * This property is observable.\n * @type {ProviderViewModel[]}\n */\n this.imageryProviderViewModels = imageryProviderViewModels.slice(0);\n\n /**\n * Gets or sets an array of ProviderViewModel instances available for terrain selection.\n * This property is observable.\n * @type {ProviderViewModel[]}\n */\n this.terrainProviderViewModels = terrainProviderViewModels.slice(0);\n\n /**\n * Gets or sets whether the imagery selection drop-down is currently visible.\n * @type {Boolean}\n * @default false\n */\n this.dropDownVisible = false;\n\n knockout.track(this, [\n \"imageryProviderViewModels\",\n \"terrainProviderViewModels\",\n \"dropDownVisible\",\n ]);\n\n var imageryObservable = knockout.getObservable(\n this,\n \"imageryProviderViewModels\"\n );\n var imageryProviders = knockout.pureComputed(function () {\n var providers = imageryObservable();\n var categories = {};\n var i;\n for (i = 0; i < providers.length; i++) {\n var provider = providers[i];\n var category = provider.category;\n if (defined(categories[category])) {\n categories[category].push(provider);\n } else {\n categories[category] = [provider];\n }\n }\n var allCategoryNames = Object.keys(categories);\n\n var result = [];\n for (i = 0; i < allCategoryNames.length; i++) {\n var name = allCategoryNames[i];\n result.push({\n name: name,\n providers: categories[name],\n });\n }\n return result;\n });\n this._imageryProviders = imageryProviders;\n\n var terrainObservable = knockout.getObservable(\n this,\n \"terrainProviderViewModels\"\n );\n var terrainProviders = knockout.pureComputed(function () {\n var providers = terrainObservable();\n var categories = {};\n var i;\n for (i = 0; i < providers.length; i++) {\n var provider = providers[i];\n var category = provider.category;\n if (defined(categories[category])) {\n categories[category].push(provider);\n } else {\n categories[category] = [provider];\n }\n }\n var allCategoryNames = Object.keys(categories);\n\n var result = [];\n for (i = 0; i < allCategoryNames.length; i++) {\n var name = allCategoryNames[i];\n result.push({\n name: name,\n providers: categories[name],\n });\n }\n return result;\n });\n this._terrainProviders = terrainProviders;\n\n /**\n * Gets the button tooltip. This property is observable.\n * @type {String}\n */\n this.buttonTooltip = undefined;\n knockout.defineProperty(this, \"buttonTooltip\", function () {\n var selectedImagery = this.selectedImagery;\n var selectedTerrain = this.selectedTerrain;\n\n var imageryTip = defined(selectedImagery)\n ? selectedImagery.name\n : undefined;\n var terrainTip = defined(selectedTerrain)\n ? selectedTerrain.name\n : undefined;\n\n if (defined(imageryTip) && defined(terrainTip)) {\n return imageryTip + \"\\n\" + terrainTip;\n } else if (defined(imageryTip)) {\n return imageryTip;\n }\n return terrainTip;\n });\n\n /**\n * Gets the button background image. This property is observable.\n * @type {String}\n */\n this.buttonImageUrl = undefined;\n knockout.defineProperty(this, \"buttonImageUrl\", function () {\n var selectedImagery = this.selectedImagery;\n if (defined(selectedImagery)) {\n return selectedImagery.iconUrl;\n }\n });\n\n /**\n * Gets or sets the currently selected imagery. This property is observable.\n * @type {ProviderViewModel}\n * @default undefined\n */\n this.selectedImagery = undefined;\n var selectedImageryViewModel = knockout.observable();\n\n this._currentImageryProviders = [];\n knockout.defineProperty(this, \"selectedImagery\", {\n get: function () {\n return selectedImageryViewModel();\n },\n set: function (value) {\n if (selectedImageryViewModel() === value) {\n this.dropDownVisible = false;\n return;\n }\n\n var i;\n var currentImageryProviders = this._currentImageryProviders;\n var currentImageryProvidersLength = currentImageryProviders.length;\n var imageryLayers = this._globe.imageryLayers;\n var hadExistingBaseLayer = false;\n for (i = 0; i < currentImageryProvidersLength; i++) {\n var layersLength = imageryLayers.length;\n for (var x = 0; x < layersLength; x++) {\n var layer = imageryLayers.get(x);\n if (layer.imageryProvider === currentImageryProviders[i]) {\n imageryLayers.remove(layer);\n hadExistingBaseLayer = true;\n break;\n }\n }\n }\n\n if (defined(value)) {\n var newProviders = value.creationCommand();\n if (Array.isArray(newProviders)) {\n var newProvidersLength = newProviders.length;\n for (i = newProvidersLength - 1; i >= 0; i--) {\n imageryLayers.addImageryProvider(newProviders[i], 0);\n }\n this._currentImageryProviders = newProviders.slice(0);\n } else {\n this._currentImageryProviders = [newProviders];\n if (hadExistingBaseLayer) {\n imageryLayers.addImageryProvider(newProviders, 0);\n } else {\n var baseLayer = imageryLayers.get(0);\n if (defined(baseLayer)) {\n imageryLayers.remove(baseLayer);\n }\n imageryLayers.addImageryProvider(newProviders, 0);\n }\n }\n }\n selectedImageryViewModel(value);\n this.dropDownVisible = false;\n },\n });\n\n /**\n * Gets or sets the currently selected terrain. This property is observable.\n * @type {ProviderViewModel}\n * @default undefined\n */\n this.selectedTerrain = undefined;\n var selectedTerrainViewModel = knockout.observable();\n\n knockout.defineProperty(this, \"selectedTerrain\", {\n get: function () {\n return selectedTerrainViewModel();\n },\n set: function (value) {\n if (selectedTerrainViewModel() === value) {\n this.dropDownVisible = false;\n return;\n }\n\n var newProvider;\n if (defined(value)) {\n newProvider = value.creationCommand();\n }\n\n this._globe.depthTestAgainstTerrain = !(\n newProvider instanceof EllipsoidTerrainProvider\n );\n this._globe.terrainProvider = newProvider;\n selectedTerrainViewModel(value);\n this.dropDownVisible = false;\n },\n });\n\n var that = this;\n this._toggleDropDown = createCommand(function () {\n that.dropDownVisible = !that.dropDownVisible;\n });\n\n this.selectedImagery = defaultValue(\n options.selectedImageryProviderViewModel,\n imageryProviderViewModels[0]\n );\n this.selectedTerrain = defaultValue(\n options.selectedTerrainProviderViewModel,\n terrainProviderViewModels[0]\n );\n}\n\nObject.defineProperties(BaseLayerPickerViewModel.prototype, {\n /**\n * Gets the command to toggle the visibility of the drop down.\n * @memberof BaseLayerPickerViewModel.prototype\n *\n * @type {Command}\n */\n toggleDropDown: {\n get: function () {\n return this._toggleDropDown;\n },\n },\n\n /**\n * Gets the globe.\n * @memberof BaseLayerPickerViewModel.prototype\n *\n * @type {Globe}\n */\n globe: {\n get: function () {\n return this._globe;\n },\n },\n});\nexport default BaseLayerPickerViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport BaseLayerPickerViewModel from \"./BaseLayerPickerViewModel.js\";\n\n/**\n * <span style=\"display: block; text-align: center;\">\n * <img src=\"Images/BaseLayerPicker.png\" width=\"264\" height=\"287\" alt=\"\" />\n * <br />BaseLayerPicker with its drop-panel open.\n * </span>\n * <br /><br />\n * The BaseLayerPicker is a single button widget that displays a panel of available imagery and\n * terrain providers. When imagery is selected, the corresponding imagery layer is created and inserted\n * as the base layer of the imagery collection; removing the existing base. When terrain is selected,\n * it replaces the current terrain provider. Each item in the available providers list contains a name,\n * a representative icon, and a tooltip to display more information when hovered. The list is initially\n * empty, and must be configured before use, as illustrated in the below example.\n *\n * @alias BaseLayerPicker\n * @constructor\n *\n * @param {Element|String} container The parent HTML container node or ID for this widget.\n * @param {Object} options Object with the following properties:\n * @param {Globe} options.globe The Globe to use.\n * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery.\n * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used.\n * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain.\n * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n *\n * @example\n * // In HTML head, include a link to the BaseLayerPicker.css stylesheet,\n * // and in the body, include: <div id=\"baseLayerPickerContainer\"\n * // style=\"position:absolute;top:24px;right:24px;width:38px;height:38px;\"></div>\n *\n * //Create the list of available providers we would like the user to select from.\n * //This example uses 3, OpenStreetMap, The Black Marble, and a single, non-streaming world image.\n * var imageryViewModels = [];\n * imageryViewModels.push(new Cesium.ProviderViewModel({\n * name : 'Open\\u00adStreet\\u00adMap',\n * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/openStreetMap.png'),\n * tooltip : 'OpenStreetMap (OSM) is a collaborative project to create a free editable \\\n * map of the world.\\nhttp://www.openstreetmap.org',\n * creationFunction : function() {\n * return new Cesium.OpenStreetMapImageryProvider({\n * url : 'https://a.tile.openstreetmap.org/'\n * });\n * }\n * }));\n *\n * imageryViewModels.push(new Cesium.ProviderViewModel({\n * name : 'Earth at Night',\n * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/blackMarble.png'),\n * tooltip : 'The lights of cities and villages trace the outlines of civilization \\\n * in this global view of the Earth at night as seen by NASA/NOAA\\'s Suomi NPP satellite.',\n * creationFunction : function() {\n * return new Cesium.IonImageryProvider({ assetId: 3812 });\n * }\n * }));\n *\n * imageryViewModels.push(new Cesium.ProviderViewModel({\n * name : 'Natural Earth\\u00a0II',\n * iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/naturalEarthII.png'),\n * tooltip : 'Natural Earth II, darkened for contrast.\\nhttp://www.naturalearthdata.com/',\n * creationFunction : function() {\n * return new Cesium.TileMapServiceImageryProvider({\n * url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII')\n * });\n * }\n * }));\n *\n * //Create a CesiumWidget without imagery, if you haven't already done so.\n * var cesiumWidget = new Cesium.CesiumWidget('cesiumContainer', { imageryProvider: false });\n *\n * //Finally, create the baseLayerPicker widget using our view models.\n * var layers = cesiumWidget.imageryLayers;\n * var baseLayerPicker = new Cesium.BaseLayerPicker('baseLayerPickerContainer', {\n * globe : cesiumWidget.scene.globe,\n * imageryProviderViewModels : imageryViewModels\n * });\n *\n * @see TerrainProvider\n * @see ImageryProvider\n * @see ImageryLayerCollection\n */\nfunction BaseLayerPicker(container, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new BaseLayerPickerViewModel(options);\n\n var element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = \"cesium-button cesium-toolbar-button\";\n element.setAttribute(\n \"data-bind\",\n \"\\\nattr: { title: buttonTooltip },\\\nclick: toggleDropDown\"\n );\n container.appendChild(element);\n\n var imgElement = document.createElement(\"img\");\n imgElement.setAttribute(\"draggable\", \"false\");\n imgElement.className = \"cesium-baseLayerPicker-selected\";\n imgElement.setAttribute(\n \"data-bind\",\n \"\\\nattr: { src: buttonImageUrl }, visible: !!buttonImageUrl\"\n );\n element.appendChild(imgElement);\n\n var dropPanel = document.createElement(\"div\");\n dropPanel.className = \"cesium-baseLayerPicker-dropDown\";\n dropPanel.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-baseLayerPicker-dropDown-visible\" : dropDownVisible }'\n );\n container.appendChild(dropPanel);\n\n var imageryTitle = document.createElement(\"div\");\n imageryTitle.className = \"cesium-baseLayerPicker-sectionTitle\";\n imageryTitle.setAttribute(\n \"data-bind\",\n \"visible: imageryProviderViewModels.length > 0\"\n );\n imageryTitle.innerHTML = \"Imagery\";\n dropPanel.appendChild(imageryTitle);\n\n var imagerySection = document.createElement(\"div\");\n imagerySection.className = \"cesium-baseLayerPicker-section\";\n imagerySection.setAttribute(\"data-bind\", \"foreach: _imageryProviders\");\n dropPanel.appendChild(imagerySection);\n\n var imageryCategories = document.createElement(\"div\");\n imageryCategories.className = \"cesium-baseLayerPicker-category\";\n imagerySection.appendChild(imageryCategories);\n\n var categoryTitle = document.createElement(\"div\");\n categoryTitle.className = \"cesium-baseLayerPicker-categoryTitle\";\n categoryTitle.setAttribute(\"data-bind\", \"text: name\");\n imageryCategories.appendChild(categoryTitle);\n\n var imageryChoices = document.createElement(\"div\");\n imageryChoices.className = \"cesium-baseLayerPicker-choices\";\n imageryChoices.setAttribute(\"data-bind\", \"foreach: providers\");\n imageryCategories.appendChild(imageryChoices);\n\n var imageryProvider = document.createElement(\"div\");\n imageryProvider.className = \"cesium-baseLayerPicker-item\";\n imageryProvider.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-baseLayerPicker-selectedItem\" : $data === $parents[1].selectedImagery },\\\nattr: { title: tooltip },\\\nvisible: creationCommand.canExecute,\\\nclick: function($data) { $parents[1].selectedImagery = $data; }'\n );\n imageryChoices.appendChild(imageryProvider);\n\n var providerIcon = document.createElement(\"img\");\n providerIcon.className = \"cesium-baseLayerPicker-itemIcon\";\n providerIcon.setAttribute(\"data-bind\", \"attr: { src: iconUrl }\");\n providerIcon.setAttribute(\"draggable\", \"false\");\n imageryProvider.appendChild(providerIcon);\n\n var providerLabel = document.createElement(\"div\");\n providerLabel.className = \"cesium-baseLayerPicker-itemLabel\";\n providerLabel.setAttribute(\"data-bind\", \"text: name\");\n imageryProvider.appendChild(providerLabel);\n\n var terrainTitle = document.createElement(\"div\");\n terrainTitle.className = \"cesium-baseLayerPicker-sectionTitle\";\n terrainTitle.setAttribute(\n \"data-bind\",\n \"visible: terrainProviderViewModels.length > 0\"\n );\n terrainTitle.innerHTML = \"Terrain\";\n dropPanel.appendChild(terrainTitle);\n\n var terrainSection = document.createElement(\"div\");\n terrainSection.className = \"cesium-baseLayerPicker-section\";\n terrainSection.setAttribute(\"data-bind\", \"foreach: _terrainProviders\");\n dropPanel.appendChild(terrainSection);\n\n var terrainCategories = document.createElement(\"div\");\n terrainCategories.className = \"cesium-baseLayerPicker-category\";\n terrainSection.appendChild(terrainCategories);\n\n var terrainCategoryTitle = document.createElement(\"div\");\n terrainCategoryTitle.className = \"cesium-baseLayerPicker-categoryTitle\";\n terrainCategoryTitle.setAttribute(\"data-bind\", \"text: name\");\n terrainCategories.appendChild(terrainCategoryTitle);\n\n var terrainChoices = document.createElement(\"div\");\n terrainChoices.className = \"cesium-baseLayerPicker-choices\";\n terrainChoices.setAttribute(\"data-bind\", \"foreach: providers\");\n terrainCategories.appendChild(terrainChoices);\n\n var terrainProvider = document.createElement(\"div\");\n terrainProvider.className = \"cesium-baseLayerPicker-item\";\n terrainProvider.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-baseLayerPicker-selectedItem\" : $data === $parents[1].selectedTerrain },\\\nattr: { title: tooltip },\\\nvisible: creationCommand.canExecute,\\\nclick: function($data) { $parents[1].selectedTerrain = $data; }'\n );\n terrainChoices.appendChild(terrainProvider);\n\n var terrainProviderIcon = document.createElement(\"img\");\n terrainProviderIcon.className = \"cesium-baseLayerPicker-itemIcon\";\n terrainProviderIcon.setAttribute(\"data-bind\", \"attr: { src: iconUrl }\");\n terrainProviderIcon.setAttribute(\"draggable\", \"false\");\n terrainProvider.appendChild(terrainProviderIcon);\n\n var terrainProviderLabel = document.createElement(\"div\");\n terrainProviderLabel.className = \"cesium-baseLayerPicker-itemLabel\";\n terrainProviderLabel.setAttribute(\"data-bind\", \"text: name\");\n terrainProvider.appendChild(terrainProviderLabel);\n\n knockout.applyBindings(viewModel, element);\n knockout.applyBindings(viewModel, dropPanel);\n\n this._viewModel = viewModel;\n this._container = container;\n this._element = element;\n this._dropPanel = dropPanel;\n\n this._closeDropDown = function (e) {\n if (!(element.contains(e.target) || dropPanel.contains(e.target))) {\n viewModel.dropDownVisible = false;\n }\n };\n\n if (FeatureDetection.supportsPointerEvents()) {\n document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.addEventListener(\"mousedown\", this._closeDropDown, true);\n document.addEventListener(\"touchstart\", this._closeDropDown, true);\n }\n}\n\nObject.defineProperties(BaseLayerPicker.prototype, {\n /**\n * Gets the parent container.\n * @memberof BaseLayerPicker.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof BaseLayerPicker.prototype\n *\n * @type {BaseLayerPickerViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nBaseLayerPicker.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nBaseLayerPicker.prototype.destroy = function () {\n if (FeatureDetection.supportsPointerEvents()) {\n document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n }\n\n knockout.cleanNode(this._element);\n knockout.cleanNode(this._dropPanel);\n this._container.removeChild(this._element);\n this._container.removeChild(this._dropPanel);\n return destroyObject(this);\n};\nexport default BaseLayerPicker;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * A view model that represents each item in the {@link BaseLayerPicker}.\n *\n * @alias ProviderViewModel\n * @constructor\n *\n * @param {Object} options The object containing all parameters.\n * @param {String} options.name The name of the layer.\n * @param {String} options.tooltip The tooltip to show when the item is moused over.\n * @param {String} options.iconUrl An icon representing the layer.\n * @param {String} [options.category] A category for the layer.\n * @param {ProviderViewModel.CreationFunction|Command} options.creationFunction A function or Command\n * that creates one or more providers which will be added to the globe when this item is selected.\n *\n * @see BaseLayerPicker\n * @see ImageryProvider\n * @see TerrainProvider\n */\nfunction ProviderViewModel(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options.name)) {\n throw new DeveloperError(\"options.name is required.\");\n }\n if (!defined(options.tooltip)) {\n throw new DeveloperError(\"options.tooltip is required.\");\n }\n if (!defined(options.iconUrl)) {\n throw new DeveloperError(\"options.iconUrl is required.\");\n }\n if (typeof options.creationFunction !== \"function\") {\n throw new DeveloperError(\"options.creationFunction is required.\");\n }\n //>>includeEnd('debug');\n\n var creationCommand = options.creationFunction;\n if (!defined(creationCommand.canExecute)) {\n creationCommand = createCommand(creationCommand);\n }\n\n this._creationCommand = creationCommand;\n\n /**\n * Gets the display name. This property is observable.\n * @type {String}\n */\n this.name = options.name;\n\n /**\n * Gets the tooltip. This property is observable.\n * @type {String}\n */\n this.tooltip = options.tooltip;\n\n /**\n * Gets the icon. This property is observable.\n * @type {String}\n */\n this.iconUrl = options.iconUrl;\n\n this._category = defaultValue(options.category, \"\");\n\n knockout.track(this, [\"name\", \"tooltip\", \"iconUrl\"]);\n}\n\nObject.defineProperties(ProviderViewModel.prototype, {\n /**\n * Gets the Command that creates one or more providers which will be added to\n * the globe when this item is selected.\n * @memberof ProviderViewModel.prototype\n * @memberof ProviderViewModel.prototype\n * @type {Command}\n * @readonly\n */\n creationCommand: {\n get: function () {\n return this._creationCommand;\n },\n },\n\n /**\n * Gets the category\n * @type {String}\n * @memberof ProviderViewModel.prototype\n * @readonly\n */\n category: {\n get: function () {\n return this._category;\n },\n },\n});\n\n/**\n * A function which creates one or more providers.\n * @callback ProviderViewModel.CreationFunction\n * @returns {ImageryProvider|TerrainProvider|ImageryProvider[]|TerrainProvider[]}\n * The ImageryProvider or TerrainProvider, or array of providers, to be added\n * to the globe.\n */\nexport default ProviderViewModel;\n","import buildModuleUrl from \"../../Core/buildModuleUrl.js\";\nimport ArcGisMapServerImageryProvider from \"../../Scene/ArcGisMapServerImageryProvider.js\";\nimport createWorldImagery from \"../../Scene/createWorldImagery.js\";\nimport IonImageryProvider from \"../../Scene/IonImageryProvider.js\";\nimport IonWorldImageryStyle from \"../../Scene/IonWorldImageryStyle.js\";\nimport MapboxStyleImageryProvider from \"../../Scene/MapboxStyleImageryProvider.js\";\nimport OpenStreetMapImageryProvider from \"../../Scene/OpenStreetMapImageryProvider.js\";\nimport TileMapServiceImageryProvider from \"../../Scene/TileMapServiceImageryProvider.js\";\nimport ProviderViewModel from \"../BaseLayerPicker/ProviderViewModel.js\";\n\n/**\n * @private\n */\nfunction createDefaultImageryProviderViewModels() {\n var providerViewModels = [];\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Bing Maps Aerial\",\n iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/bingAerial.png\"),\n tooltip: \"Bing Maps aerial imagery, provided by Cesium ion\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return createWorldImagery({\n style: IonWorldImageryStyle.AERIAL,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Bing Maps Aerial with Labels\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/bingAerialLabels.png\"\n ),\n tooltip: \"Bing Maps aerial imagery with labels, provided by Cesium ion\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return createWorldImagery({\n style: IonWorldImageryStyle.AERIAL_WITH_LABELS,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Bing Maps Roads\",\n iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/bingRoads.png\"),\n tooltip: \"Bing Maps standard road maps, provided by Cesium ion\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return createWorldImagery({\n style: IonWorldImageryStyle.ROAD,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Mapbox Satellite\",\n tooltip: \"Mapbox satellite imagery https://www.mapbox.com/maps/\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/mapboxSatellite.png\"\n ),\n category: \"Other\",\n creationFunction: function () {\n return new MapboxStyleImageryProvider({\n styleId: \"satellite-v9\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Mapbox Streets\",\n tooltip: \"Mapbox streets imagery https://www.mapbox.com/maps/\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/mapboxTerrain.png\"\n ),\n category: \"Other\",\n creationFunction: function () {\n return new MapboxStyleImageryProvider({\n styleId: \"satellite-streets-v11\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Mapbox Streets Classic\",\n tooltip: \"Mapbox streets basic imagery https://www.mapbox.com/maps/\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/mapboxStreets.png\"\n ),\n category: \"Other\",\n creationFunction: function () {\n return new MapboxStyleImageryProvider({\n styleId: \"streets-v11\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"ESRI World Imagery\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/esriWorldImagery.png\"\n ),\n tooltip:\n \"\\\nWorld Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution \\\nsatellite imagery worldwide. The map includes NASA Blue Marble: Next Generation 500m resolution imagery at small scales \\\n(above 1:1,000,000), i-cubed 15m eSAT imagery at medium-to-large scales (down to 1:70,000) for the world, and USGS 15m Landsat \\\nimagery for Antarctica. The map features 0.3m resolution imagery in the continental United States and 0.6m resolution imagery in \\\nparts of Western Europe from DigitalGlobe. In other parts of the world, 1 meter resolution imagery is available from GeoEye IKONOS, \\\ni-cubed Nationwide Prime, Getmapping, AeroGRID, IGN Spain, and IGP Portugal. Additionally, imagery at different resolutions has been \\\ncontributed by the GIS User Community.\\nhttp://www.esri.com\",\n category: \"Other\",\n creationFunction: function () {\n return new ArcGisMapServerImageryProvider({\n url:\n \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\n enablePickFeatures: false,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"ESRI World Street Map\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/esriWorldStreetMap.png\"\n ),\n tooltip:\n \"\\\nThis worldwide street map presents highway-level data for the world. Street-level data includes the United States; much of \\\nCanada; Japan; most countries in Europe; Australia and New Zealand; India; parts of South America including Argentina, Brazil, \\\nChile, Colombia, and Venezuela; Ghana; and parts of southern Africa including Botswana, Lesotho, Namibia, South Africa, and Swaziland.\\n\\\nhttp://www.esri.com\",\n category: \"Other\",\n creationFunction: function () {\n return new ArcGisMapServerImageryProvider({\n url:\n \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\n enablePickFeatures: false,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"ESRI National Geographic\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/esriNationalGeographic.png\"\n ),\n tooltip:\n \"\\\nThis web map contains the National Geographic World Map service. This map service is designed to be used as a general reference map \\\nfor informational and educational purposes as well as a basemap by GIS professionals and other users for creating web maps and web \\\nmapping applications.\\nhttp://www.esri.com\",\n category: \"Other\",\n creationFunction: function () {\n return new ArcGisMapServerImageryProvider({\n url:\n \"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\n enablePickFeatures: false,\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Open\\u00adStreet\\u00adMap\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/openStreetMap.png\"\n ),\n tooltip:\n \"OpenStreetMap (OSM) is a collaborative project to create a free editable map \\\nof the world.\\nhttp://www.openstreetmap.org\",\n category: \"Other\",\n creationFunction: function () {\n return new OpenStreetMapImageryProvider({\n url: \"https://a.tile.openstreetmap.org/\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Stamen Watercolor\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/stamenWatercolor.png\"\n ),\n tooltip:\n \"Reminiscent of hand drawn maps, Stamen watercolor maps apply raster effect \\\narea washes and organic edges over a paper texture to add warm pop to any map.\\nhttp://maps.stamen.com\",\n category: \"Other\",\n creationFunction: function () {\n return new OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\",\n credit:\n \"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Stamen Toner\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/stamenToner.png\"\n ),\n tooltip: \"A high contrast black and white map.\\nhttp://maps.stamen.com\",\n category: \"Other\",\n creationFunction: function () {\n return new OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\",\n credit:\n \"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.\",\n });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Sentinel-2\",\n iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/sentinel-2.png\"),\n tooltip:\n \"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return new IonImageryProvider({ assetId: 3954 });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Blue Marble\",\n iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/blueMarble.png\"),\n tooltip: \"Blue Marble Next Generation July, 2004 imagery from NASA.\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return new IonImageryProvider({ assetId: 3845 });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Earth at night\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/earthAtNight.png\"\n ),\n tooltip:\n \"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return new IonImageryProvider({ assetId: 3812 });\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Natural Earth\\u00a0II\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/ImageryProviders/naturalEarthII.png\"\n ),\n tooltip:\n \"Natural Earth II, darkened for contrast.\\nhttp://www.naturalearthdata.com/\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return new TileMapServiceImageryProvider({\n url: buildModuleUrl(\"Assets/Textures/NaturalEarthII\"),\n });\n },\n })\n );\n\n return providerViewModels;\n}\nexport default createDefaultImageryProviderViewModels;\n","import buildModuleUrl from \"../../Core/buildModuleUrl.js\";\nimport createWorldTerrain from \"../../Core/createWorldTerrain.js\";\nimport EllipsoidTerrainProvider from \"../../Core/EllipsoidTerrainProvider.js\";\nimport ProviderViewModel from \"../BaseLayerPicker/ProviderViewModel.js\";\n\n/**\n * @private\n */\nfunction createDefaultTerrainProviderViewModels() {\n var providerViewModels = [];\n providerViewModels.push(\n new ProviderViewModel({\n name: \"WGS84 Ellipsoid\",\n iconUrl: buildModuleUrl(\"Widgets/Images/TerrainProviders/Ellipsoid.png\"),\n tooltip: \"WGS84 standard ellipsoid, also known as EPSG:4326\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return new EllipsoidTerrainProvider();\n },\n })\n );\n\n providerViewModels.push(\n new ProviderViewModel({\n name: \"Cesium World Terrain\",\n iconUrl: buildModuleUrl(\n \"Widgets/Images/TerrainProviders/CesiumWorldTerrain.png\"\n ),\n tooltip:\n \"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion\",\n category: \"Cesium ion\",\n creationFunction: function () {\n return createWorldTerrain({\n requestWaterMask: true,\n requestVertexNormals: true,\n });\n },\n })\n );\n\n return providerViewModels;\n}\nexport default createDefaultTerrainProviderViewModels;\n","import Check from \"../../Core/Check.js\";\nimport Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport ScreenSpaceEventHandler from \"../../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../../Core/ScreenSpaceEventType.js\";\nimport Cesium3DTileColorBlendMode from \"../../Scene/Cesium3DTileColorBlendMode.js\";\nimport Cesium3DTileFeature from \"../../Scene/Cesium3DTileFeature.js\";\nimport Cesium3DTilePass from \"../../Scene/Cesium3DTilePass.js\";\nimport Cesium3DTileset from \"../../Scene/Cesium3DTileset.js\";\nimport Cesium3DTileStyle from \"../../Scene/Cesium3DTileStyle.js\";\nimport PerformanceDisplay from \"../../Scene/PerformanceDisplay.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\n\nfunction getPickTileset(viewModel) {\n return function (e) {\n var pick = viewModel._scene.pick(e.position);\n if (defined(pick) && pick.primitive instanceof Cesium3DTileset) {\n viewModel.tileset = pick.primitive;\n }\n viewModel.pickActive = false;\n };\n}\n\nfunction selectTilesetOnHover(viewModel, value) {\n if (value) {\n viewModel._eventHandler.setInputAction(function (e) {\n var pick = viewModel._scene.pick(e.endPosition);\n if (defined(pick) && pick.primitive instanceof Cesium3DTileset) {\n viewModel.tileset = pick.primitive;\n }\n }, ScreenSpaceEventType.MOUSE_MOVE);\n } else {\n viewModel._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE);\n\n // Restore hover-over selection to its current value\n // eslint-disable-next-line no-self-assign\n viewModel.picking = viewModel.picking;\n }\n}\n\nvar stringOptions = {\n maximumFractionDigits: 3,\n};\n\nfunction formatMemoryString(memorySizeInBytes) {\n var memoryInMegabytes = memorySizeInBytes / 1048576;\n if (memoryInMegabytes < 1.0) {\n return memoryInMegabytes.toLocaleString(undefined, stringOptions);\n }\n return Math.round(memoryInMegabytes).toLocaleString();\n}\n\nfunction getStatistics(tileset, isPick) {\n if (!defined(tileset)) {\n return \"\";\n }\n\n var statistics = isPick\n ? tileset._statisticsPerPass[Cesium3DTilePass.PICK]\n : tileset._statisticsPerPass[Cesium3DTilePass.RENDER];\n\n // Since the pick pass uses a smaller frustum around the pixel of interest,\n // the statistics will be different than the normal render pass.\n var s = '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Rendering statistics\n \"<li><strong>Visited: </strong>\" +\n statistics.visited.toLocaleString() +\n \"</li>\" +\n // Number of commands returned is likely to be higher than the number of tiles selected\n // because of tiles that create multiple commands.\n \"<li><strong>Selected: </strong>\" +\n statistics.selected.toLocaleString() +\n \"</li>\" +\n // Number of commands executed is likely to be higher because of commands overlapping\n // multiple frustums.\n \"<li><strong>Commands: </strong>\" +\n statistics.numberOfCommands.toLocaleString() +\n \"</li>\";\n s += \"</ul>\";\n if (!isPick) {\n s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Cache/loading statistics\n \"<li><strong>Requests: </strong>\" +\n statistics.numberOfPendingRequests.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Attempted: </strong>\" +\n statistics.numberOfAttemptedRequests.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Processing: </strong>\" +\n statistics.numberOfTilesProcessing.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Content Ready: </strong>\" +\n statistics.numberOfTilesWithContentReady.toLocaleString() +\n \"</li>\" +\n // Total number of tiles includes tiles without content, so \"Ready\" may never reach\n // \"Total.\" Total also will increase when a tile with a tileset JSON content is loaded.\n \"<li><strong>Total: </strong>\" +\n statistics.numberOfTilesTotal.toLocaleString() +\n \"</li>\";\n s += \"</ul>\";\n s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Features statistics\n \"<li><strong>Features Selected: </strong>\" +\n statistics.numberOfFeaturesSelected.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Features Loaded: </strong>\" +\n statistics.numberOfFeaturesLoaded.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Points Selected: </strong>\" +\n statistics.numberOfPointsSelected.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Points Loaded: </strong>\" +\n statistics.numberOfPointsLoaded.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Triangles Selected: </strong>\" +\n statistics.numberOfTrianglesSelected.toLocaleString() +\n \"</li>\";\n s += \"</ul>\";\n s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Styling statistics\n \"<li><strong>Tiles styled: </strong>\" +\n statistics.numberOfTilesStyled.toLocaleString() +\n \"</li>\" +\n \"<li><strong>Features styled: </strong>\" +\n statistics.numberOfFeaturesStyled.toLocaleString() +\n \"</li>\";\n s += \"</ul>\";\n s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Optimization statistics\n \"<li><strong>Children Union Culled: </strong>\" +\n statistics.numberOfTilesCulledWithChildrenUnion.toLocaleString() +\n \"</li>\";\n s += \"</ul>\";\n s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n s +=\n // --- Memory statistics\n \"<li><strong>Geometry Memory (MB): </strong>\" +\n formatMemoryString(statistics.geometryByteLength) +\n \"</li>\" +\n \"<li><strong>Texture Memory (MB): </strong>\" +\n formatMemoryString(statistics.texturesByteLength) +\n \"</li>\" +\n \"<li><strong>Batch Table Memory (MB): </strong>\" +\n formatMemoryString(statistics.batchTableByteLength) +\n \"</li>\";\n s += \"</ul>\";\n }\n return s;\n}\n\nvar colorBlendModes = [\n {\n text: \"Highlight\",\n value: Cesium3DTileColorBlendMode.HIGHLIGHT,\n },\n {\n text: \"Replace\",\n value: Cesium3DTileColorBlendMode.REPLACE,\n },\n {\n text: \"Mix\",\n value: Cesium3DTileColorBlendMode.MIX,\n },\n];\n\nvar highlightColor = new Color(1.0, 1.0, 0.0, 0.4);\nvar scratchColor = new Color();\nvar oldColor = new Color();\n\n/**\n * The view model for {@link Cesium3DTilesInspector}.\n * @alias Cesium3DTilesInspectorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {HTMLElement} performanceContainer The container for the performance display\n */\nfunction Cesium3DTilesInspectorViewModel(scene, performanceContainer) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"scene\", scene);\n Check.typeOf.object(\"performanceContainer\", performanceContainer);\n //>>includeEnd('debug');\n\n var that = this;\n var canvas = scene.canvas;\n this._eventHandler = new ScreenSpaceEventHandler(canvas);\n this._scene = scene;\n this._performanceContainer = performanceContainer;\n this._canvas = canvas;\n\n this._performanceDisplay = new PerformanceDisplay({\n container: performanceContainer,\n });\n\n this._statisticsText = \"\";\n this._pickStatisticsText = \"\";\n this._editorError = \"\";\n\n /**\n * Gets or sets the flag to enable performance display. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.performance = false;\n\n /**\n * Gets or sets the flag to show statistics. This property is observable.\n *\n * @type {Boolean}\n * @default true\n */\n this.showStatistics = true;\n\n /**\n * Gets or sets the flag to show pick statistics. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showPickStatistics = true;\n\n /**\n * Gets or sets the flag to show the inspector. This property is observable.\n *\n * @type {Boolean}\n * @default true\n */\n this.inspectorVisible = true;\n\n /**\n * Gets or sets the flag to show the tileset section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.tilesetVisible = false;\n\n /**\n * Gets or sets the flag to show the display section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.displayVisible = false;\n\n /**\n * Gets or sets the flag to show the update section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.updateVisible = false;\n\n /**\n * Gets or sets the flag to show the logging section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.loggingVisible = false;\n\n /**\n * Gets or sets the flag to show the style section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.styleVisible = false;\n\n /**\n * Gets or sets the flag to show the tile info section. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.tileDebugLabelsVisible = false;\n\n /**\n * Gets or sets the flag to show the optimization info section. This property is observable.\n *\n * @type {Boolean}\n * @default false;\n */\n this.optimizationVisible = false;\n\n /**\n * Gets or sets the JSON for the tileset style. This property is observable.\n *\n * @type {String}\n * @default '{}'\n */\n this.styleString = \"{}\";\n\n this._tileset = undefined;\n this._feature = undefined;\n this._tile = undefined;\n\n knockout.track(this, [\n \"performance\",\n \"inspectorVisible\",\n \"_statisticsText\",\n \"_pickStatisticsText\",\n \"_editorError\",\n \"showPickStatistics\",\n \"showStatistics\",\n \"tilesetVisible\",\n \"displayVisible\",\n \"updateVisible\",\n \"loggingVisible\",\n \"styleVisible\",\n \"optimizationVisible\",\n \"tileDebugLabelsVisible\",\n \"styleString\",\n \"_feature\",\n \"_tile\",\n ]);\n\n this._properties = knockout.observable({});\n /**\n * Gets the names of the properties in the tileset. This property is observable.\n * @type {String[]}\n * @readonly\n */\n this.properties = [];\n knockout.defineProperty(this, \"properties\", function () {\n var names = [];\n var properties = that._properties();\n for (var prop in properties) {\n if (properties.hasOwnProperty(prop)) {\n names.push(prop);\n }\n }\n return names;\n });\n\n var dynamicScreenSpaceError = knockout.observable();\n knockout.defineProperty(this, \"dynamicScreenSpaceError\", {\n get: function () {\n return dynamicScreenSpaceError();\n },\n set: function (value) {\n dynamicScreenSpaceError(value);\n if (defined(that._tileset)) {\n that._tileset.dynamicScreenSpaceError = value;\n }\n },\n });\n /**\n * Gets or sets the flag to enable dynamic screen space error. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.dynamicScreenSpaceError = false;\n\n var colorBlendMode = knockout.observable();\n knockout.defineProperty(this, \"colorBlendMode\", {\n get: function () {\n return colorBlendMode();\n },\n set: function (value) {\n colorBlendMode(value);\n if (defined(that._tileset)) {\n that._tileset.colorBlendMode = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the color blend mode. This property is observable.\n *\n * @type {Cesium3DTileColorBlendMode}\n * @default Cesium3DTileColorBlendMode.HIGHLIGHT\n */\n this.colorBlendMode = Cesium3DTileColorBlendMode.HIGHLIGHT;\n\n var showOnlyPickedTileDebugLabel = knockout.observable();\n var picking = knockout.observable();\n knockout.defineProperty(this, \"picking\", {\n get: function () {\n return picking();\n },\n set: function (value) {\n picking(value);\n if (value) {\n that._eventHandler.setInputAction(function (e) {\n var picked = scene.pick(e.endPosition);\n if (picked instanceof Cesium3DTileFeature) {\n // Picked a feature\n that.feature = picked;\n that.tile = picked.content.tile;\n } else if (defined(picked) && defined(picked.content)) {\n // Picked a tile\n that.feature = undefined;\n that.tile = picked.content.tile;\n } else {\n // Picked nothing\n that.feature = undefined;\n that.tile = undefined;\n }\n if (!defined(that._tileset)) {\n return;\n }\n if (\n showOnlyPickedTileDebugLabel &&\n defined(picked) &&\n defined(picked.content)\n ) {\n var position;\n if (scene.pickPositionSupported) {\n position = scene.pickPosition(e.endPosition);\n if (defined(position)) {\n that._tileset.debugPickPosition = position;\n }\n }\n that._tileset.debugPickedTile = picked.content.tile;\n } else {\n that._tileset.debugPickedTile = undefined;\n }\n that._scene.requestRender();\n }, ScreenSpaceEventType.MOUSE_MOVE);\n } else {\n that.feature = undefined;\n that.tile = undefined;\n that._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE);\n }\n },\n });\n /**\n * Gets or sets the flag to enable picking. This property is observable.\n *\n * @type {Boolean}\n * @default true\n */\n this.picking = true;\n\n var colorize = knockout.observable();\n knockout.defineProperty(this, \"colorize\", {\n get: function () {\n return colorize();\n },\n set: function (value) {\n colorize(value);\n if (defined(that._tileset)) {\n that._tileset.debugColorizeTiles = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to colorize tiles. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.colorize = false;\n\n var wireframe = knockout.observable();\n knockout.defineProperty(this, \"wireframe\", {\n get: function () {\n return wireframe();\n },\n set: function (value) {\n wireframe(value);\n if (defined(that._tileset)) {\n that._tileset.debugWireframe = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to draw with wireframe. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.wireframe = false;\n\n var showBoundingVolumes = knockout.observable();\n knockout.defineProperty(this, \"showBoundingVolumes\", {\n get: function () {\n return showBoundingVolumes();\n },\n set: function (value) {\n showBoundingVolumes(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowBoundingVolume = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show bounding volumes. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showBoundingVolumes = false;\n\n var showContentBoundingVolumes = knockout.observable();\n knockout.defineProperty(this, \"showContentBoundingVolumes\", {\n get: function () {\n return showContentBoundingVolumes();\n },\n set: function (value) {\n showContentBoundingVolumes(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowContentBoundingVolume = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show content volumes. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showContentBoundingVolumes = false;\n\n var showRequestVolumes = knockout.observable();\n knockout.defineProperty(this, \"showRequestVolumes\", {\n get: function () {\n return showRequestVolumes();\n },\n set: function (value) {\n showRequestVolumes(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowViewerRequestVolume = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show request volumes. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showRequestVolumes = false;\n\n var freezeFrame = knockout.observable();\n knockout.defineProperty(this, \"freezeFrame\", {\n get: function () {\n return freezeFrame();\n },\n set: function (value) {\n freezeFrame(value);\n if (defined(that._tileset)) {\n that._tileset.debugFreezeFrame = value;\n that._scene.debugShowFrustumPlanes = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to suspend updates. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.freezeFrame = false;\n\n knockout.defineProperty(this, \"showOnlyPickedTileDebugLabel\", {\n get: function () {\n return showOnlyPickedTileDebugLabel();\n },\n set: function (value) {\n showOnlyPickedTileDebugLabel(value);\n if (defined(that._tileset)) {\n that._tileset.debugPickedTileLabelOnly = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show debug labels only for the currently picked tile. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showOnlyPickedTileDebugLabel = false;\n\n var showGeometricError = knockout.observable();\n knockout.defineProperty(this, \"showGeometricError\", {\n get: function () {\n return showGeometricError();\n },\n set: function (value) {\n showGeometricError(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowGeometricError = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show tile geometric error. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showGeometricError = false;\n\n var showRenderingStatistics = knockout.observable();\n knockout.defineProperty(this, \"showRenderingStatistics\", {\n get: function () {\n return showRenderingStatistics();\n },\n set: function (value) {\n showRenderingStatistics(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowRenderingStatistics = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Displays the number of commands, points, triangles and features used per tile. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showRenderingStatistics = false;\n\n var showMemoryUsage = knockout.observable();\n knockout.defineProperty(this, \"showMemoryUsage\", {\n get: function () {\n return showMemoryUsage();\n },\n set: function (value) {\n showMemoryUsage(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowMemoryUsage = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Displays the memory used per tile. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showMemoryUsage = false;\n\n var showUrl = knockout.observable();\n knockout.defineProperty(this, \"showUrl\", {\n get: function () {\n return showUrl();\n },\n set: function (value) {\n showUrl(value);\n if (defined(that._tileset)) {\n that._tileset.debugShowUrl = value;\n that._scene.requestRender();\n }\n },\n });\n /**\n * Gets or sets the flag to show the tile url. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.showUrl = false;\n\n var maximumScreenSpaceError = knockout.observable();\n knockout.defineProperty(this, \"maximumScreenSpaceError\", {\n get: function () {\n return maximumScreenSpaceError();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n maximumScreenSpaceError(value);\n if (defined(that._tileset)) {\n that._tileset.maximumScreenSpaceError = value;\n }\n }\n },\n });\n /**\n * Gets or sets the maximum screen space error. This property is observable.\n *\n * @type {Number}\n * @default 16\n */\n this.maximumScreenSpaceError = 16;\n\n var dynamicScreenSpaceErrorDensity = knockout.observable();\n knockout.defineProperty(this, \"dynamicScreenSpaceErrorDensity\", {\n get: function () {\n return dynamicScreenSpaceErrorDensity();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n dynamicScreenSpaceErrorDensity(value);\n if (defined(that._tileset)) {\n that._tileset.dynamicScreenSpaceErrorDensity = value;\n }\n }\n },\n });\n /**\n * Gets or sets the dynamic screen space error density. This property is observable.\n *\n * @type {Number}\n * @default 0.00278\n */\n this.dynamicScreenSpaceErrorDensity = 0.00278;\n\n /**\n * Gets or sets the dynamic screen space error density slider value.\n * This allows the slider to be exponential because values tend to be closer to 0 than 1.\n * This property is observable.\n *\n * @type {Number}\n * @default 0.00278\n */\n this.dynamicScreenSpaceErrorDensitySliderValue = undefined;\n knockout.defineProperty(this, \"dynamicScreenSpaceErrorDensitySliderValue\", {\n get: function () {\n return Math.pow(dynamicScreenSpaceErrorDensity(), 1 / 6);\n },\n set: function (value) {\n dynamicScreenSpaceErrorDensity(Math.pow(value, 6));\n },\n });\n\n var dynamicScreenSpaceErrorFactor = knockout.observable();\n knockout.defineProperty(this, \"dynamicScreenSpaceErrorFactor\", {\n get: function () {\n return dynamicScreenSpaceErrorFactor();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n dynamicScreenSpaceErrorFactor(value);\n if (defined(that._tileset)) {\n that._tileset.dynamicScreenSpaceErrorFactor = value;\n }\n }\n },\n });\n /**\n * Gets or sets the dynamic screen space error factor. This property is observable.\n *\n * @type {Number}\n * @default 4.0\n */\n this.dynamicScreenSpaceErrorFactor = 4.0;\n\n var pickTileset = getPickTileset(this);\n var pickActive = knockout.observable();\n knockout.defineProperty(this, \"pickActive\", {\n get: function () {\n return pickActive();\n },\n set: function (value) {\n pickActive(value);\n if (value) {\n that._eventHandler.setInputAction(\n pickTileset,\n ScreenSpaceEventType.LEFT_CLICK\n );\n } else {\n that._eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n }\n },\n });\n\n var pointCloudShading = knockout.observable();\n knockout.defineProperty(this, \"pointCloudShading\", {\n get: function () {\n return pointCloudShading();\n },\n set: function (value) {\n pointCloudShading(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.attenuation = value;\n }\n },\n });\n /**\n * Gets or sets the flag to enable point cloud shading. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.pointCloudShading = false;\n\n var geometricErrorScale = knockout.observable();\n knockout.defineProperty(this, \"geometricErrorScale\", {\n get: function () {\n return geometricErrorScale();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n geometricErrorScale(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.geometricErrorScale = value;\n }\n }\n },\n });\n /**\n * Gets or sets the geometric error scale. This property is observable.\n *\n * @type {Number}\n * @default 1.0\n */\n this.geometricErrorScale = 1.0;\n\n var maximumAttenuation = knockout.observable();\n knockout.defineProperty(this, \"maximumAttenuation\", {\n get: function () {\n return maximumAttenuation();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n maximumAttenuation(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.maximumAttenuation =\n value === 0 ? undefined : value;\n }\n }\n },\n });\n /**\n * Gets or sets the maximum attenuation. This property is observable.\n *\n * @type {Number}\n * @default 0\n */\n this.maximumAttenuation = 0;\n\n var baseResolution = knockout.observable();\n knockout.defineProperty(this, \"baseResolution\", {\n get: function () {\n return baseResolution();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n baseResolution(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.baseResolution =\n value === 0 ? undefined : value;\n }\n }\n },\n });\n /**\n * Gets or sets the base resolution. This property is observable.\n *\n * @type {Number}\n * @default 0\n */\n this.baseResolution = 0;\n\n var eyeDomeLighting = knockout.observable();\n knockout.defineProperty(this, \"eyeDomeLighting\", {\n get: function () {\n return eyeDomeLighting();\n },\n set: function (value) {\n eyeDomeLighting(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.eyeDomeLighting = value;\n }\n },\n });\n /**\n * Gets or sets the flag to enable eye dome lighting. This property is observable.\n *\n * @type {Boolean}\n * @default false\n */\n this.eyeDomeLighting = false;\n\n var eyeDomeLightingStrength = knockout.observable();\n knockout.defineProperty(this, \"eyeDomeLightingStrength\", {\n get: function () {\n return eyeDomeLightingStrength();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n eyeDomeLightingStrength(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.eyeDomeLightingStrength = value;\n }\n }\n },\n });\n /**\n * Gets or sets the eye dome lighting strength. This property is observable.\n *\n * @type {Number}\n * @default 1.0\n */\n this.eyeDomeLightingStrength = 1.0;\n\n var eyeDomeLightingRadius = knockout.observable();\n knockout.defineProperty(this, \"eyeDomeLightingRadius\", {\n get: function () {\n return eyeDomeLightingRadius();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n eyeDomeLightingRadius(value);\n if (defined(that._tileset)) {\n that._tileset.pointCloudShading.eyeDomeLightingRadius = value;\n }\n }\n },\n });\n /**\n * Gets or sets the eye dome lighting radius. This property is observable.\n *\n * @type {Number}\n * @default 1.0\n */\n this.eyeDomeLightingRadius = 1.0;\n\n /**\n * Gets or sets the pick state\n *\n * @type {Boolean}\n * @default false\n */\n this.pickActive = false;\n\n var skipLevelOfDetail = knockout.observable();\n knockout.defineProperty(this, \"skipLevelOfDetail\", {\n get: function () {\n return skipLevelOfDetail();\n },\n set: function (value) {\n skipLevelOfDetail(value);\n if (defined(that._tileset)) {\n that._tileset.skipLevelOfDetail = value;\n }\n },\n });\n /**\n * Gets or sets the flag to determine if level of detail skipping should be applied during the traversal.\n * This property is observable.\n * @type {Boolean}\n * @default true\n */\n this.skipLevelOfDetail = true;\n\n var skipScreenSpaceErrorFactor = knockout.observable();\n knockout.defineProperty(this, \"skipScreenSpaceErrorFactor\", {\n get: function () {\n return skipScreenSpaceErrorFactor();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n skipScreenSpaceErrorFactor(value);\n if (defined(that._tileset)) {\n that._tileset.skipScreenSpaceErrorFactor = value;\n }\n }\n },\n });\n /**\n * Gets or sets the multiplier defining the minimum screen space error to skip. This property is observable.\n * @type {Number}\n * @default 16\n */\n this.skipScreenSpaceErrorFactor = 16;\n\n var baseScreenSpaceError = knockout.observable();\n knockout.defineProperty(this, \"baseScreenSpaceError\", {\n get: function () {\n return baseScreenSpaceError();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n baseScreenSpaceError(value);\n if (defined(that._tileset)) {\n that._tileset.baseScreenSpaceError = value;\n }\n }\n },\n });\n /**\n * Gets or sets the screen space error that must be reached before skipping levels of detail. This property is observable.\n * @type {Number}\n * @default 1024\n */\n this.baseScreenSpaceError = 1024;\n\n var skipLevels = knockout.observable();\n knockout.defineProperty(this, \"skipLevels\", {\n get: function () {\n return skipLevels();\n },\n set: function (value) {\n value = Number(value);\n if (!isNaN(value)) {\n skipLevels(value);\n if (defined(that._tileset)) {\n that._tileset.skipLevels = value;\n }\n }\n },\n });\n /**\n * Gets or sets the constant defining the minimum number of levels to skip when loading tiles. This property is observable.\n * @type {Number}\n * @default 1\n */\n this.skipLevels = 1;\n\n var immediatelyLoadDesiredLevelOfDetail = knockout.observable();\n knockout.defineProperty(this, \"immediatelyLoadDesiredLevelOfDetail\", {\n get: function () {\n return immediatelyLoadDesiredLevelOfDetail();\n },\n set: function (value) {\n immediatelyLoadDesiredLevelOfDetail(value);\n if (defined(that._tileset)) {\n that._tileset.immediatelyLoadDesiredLevelOfDetail = value;\n }\n },\n });\n /**\n * Gets or sets the flag which, when true, only tiles that meet the maximum screen space error will ever be downloaded.\n * This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.immediatelyLoadDesiredLevelOfDetail = false;\n\n var loadSiblings = knockout.observable();\n knockout.defineProperty(this, \"loadSiblings\", {\n get: function () {\n return loadSiblings();\n },\n set: function (value) {\n loadSiblings(value);\n if (defined(that._tileset)) {\n that._tileset.loadSiblings = value;\n }\n },\n });\n /**\n * Gets or sets the flag which determines whether siblings of visible tiles are always downloaded during traversal.\n * This property is observable\n * @type {Boolean}\n * @default false\n */\n this.loadSiblings = false;\n\n this._style = undefined;\n this._shouldStyle = false;\n this._definedProperties = [\n \"properties\",\n \"dynamicScreenSpaceError\",\n \"colorBlendMode\",\n \"picking\",\n \"colorize\",\n \"wireframe\",\n \"showBoundingVolumes\",\n \"showContentBoundingVolumes\",\n \"showRequestVolumes\",\n \"freezeFrame\",\n \"maximumScreenSpaceError\",\n \"dynamicScreenSpaceErrorDensity\",\n \"baseScreenSpaceError\",\n \"skipScreenSpaceErrorFactor\",\n \"skipLevelOfDetail\",\n \"skipLevels\",\n \"immediatelyLoadDesiredLevelOfDetail\",\n \"loadSiblings\",\n \"dynamicScreenSpaceErrorDensitySliderValue\",\n \"dynamicScreenSpaceErrorFactor\",\n \"pickActive\",\n \"showOnlyPickedTileDebugLabel\",\n \"showGeometricError\",\n \"showRenderingStatistics\",\n \"showMemoryUsage\",\n \"showUrl\",\n \"pointCloudShading\",\n \"geometricErrorScale\",\n \"maximumAttenuation\",\n \"baseResolution\",\n \"eyeDomeLighting\",\n \"eyeDomeLightingStrength\",\n \"eyeDomeLightingRadius\",\n ];\n this._removePostRenderEvent = scene.postRender.addEventListener(function () {\n that._update();\n });\n\n if (!defined(this._tileset)) {\n selectTilesetOnHover(this, true);\n }\n}\n\nObject.defineProperties(Cesium3DTilesInspectorViewModel.prototype, {\n /**\n * Gets the scene\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {Scene}\n * @readonly\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n /**\n * Gets the performance container\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {HTMLElement}\n * @readonly\n */\n performanceContainer: {\n get: function () {\n return this._performanceContainer;\n },\n },\n\n /**\n * Gets the statistics text. This property is observable.\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {String}\n * @readonly\n */\n statisticsText: {\n get: function () {\n return this._statisticsText;\n },\n },\n /**\n * Gets the pick statistics text. This property is observable.\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {String}\n * @readonly\n */\n pickStatisticsText: {\n get: function () {\n return this._pickStatisticsText;\n },\n },\n\n /**\n * Gets the available blend modes\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {Object[]}\n * @readonly\n */\n colorBlendModes: {\n get: function () {\n return colorBlendModes;\n },\n },\n\n /**\n * Gets the editor error message\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {String}\n * @readonly\n */\n editorError: {\n get: function () {\n return this._editorError;\n },\n },\n\n /**\n * Gets or sets the tileset of the view model.\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {Cesium3DTileset}\n */\n tileset: {\n get: function () {\n return this._tileset;\n },\n set: function (tileset) {\n this._tileset = tileset;\n this._style = undefined;\n this.styleString = \"{}\";\n this.feature = undefined;\n this.tile = undefined;\n\n if (defined(tileset)) {\n var that = this;\n tileset.readyPromise.then(function (t) {\n if (!that.isDestroyed()) {\n that._properties(t.properties);\n }\n });\n\n // update tileset with existing settings\n var settings = [\n \"colorize\",\n \"wireframe\",\n \"showBoundingVolumes\",\n \"showContentBoundingVolumes\",\n \"showRequestVolumes\",\n \"freezeFrame\",\n \"showOnlyPickedTileDebugLabel\",\n \"showGeometricError\",\n \"showRenderingStatistics\",\n \"showMemoryUsage\",\n \"showUrl\",\n ];\n var length = settings.length;\n for (var i = 0; i < length; ++i) {\n var setting = settings[i];\n //eslint-disable-next-line no-self-assign\n this[setting] = this[setting];\n }\n\n // update view model with existing tileset settings\n this.maximumScreenSpaceError = tileset.maximumScreenSpaceError;\n this.dynamicScreenSpaceError = tileset.dynamicScreenSpaceError;\n this.dynamicScreenSpaceErrorDensity =\n tileset.dynamicScreenSpaceErrorDensity;\n this.dynamicScreenSpaceErrorFactor =\n tileset.dynamicScreenSpaceErrorFactor;\n this.colorBlendMode = tileset.colorBlendMode;\n this.skipLevelOfDetail = tileset.skipLevelOfDetail;\n this.skipScreenSpaceErrorFactor = tileset.skipScreenSpaceErrorFactor;\n this.baseScreenSpaceError = tileset.baseScreenSpaceError;\n this.skipLevels = tileset.skipLevels;\n this.immediatelyLoadDesiredLevelOfDetail =\n tileset.immediatelyLoadDesiredLevelOfDetail;\n this.loadSiblings = tileset.loadSiblings;\n\n var pointCloudShading = tileset.pointCloudShading;\n this.pointCloudShading = pointCloudShading.attenuation;\n this.geometricErrorScale = pointCloudShading.geometricErrorScale;\n this.maximumAttenuation = pointCloudShading.maximumAttenuation\n ? pointCloudShading.maximumAttenuation\n : 0.0;\n this.baseResolution = pointCloudShading.baseResolution\n ? pointCloudShading.baseResolution\n : 0.0;\n this.eyeDomeLighting = pointCloudShading.eyeDomeLighting;\n this.eyeDomeLightingStrength =\n pointCloudShading.eyeDomeLightingStrength;\n this.eyeDomeLightingRadius = pointCloudShading.eyeDomeLightingRadius;\n\n this._scene.requestRender();\n } else {\n this._properties({});\n }\n\n this._statisticsText = getStatistics(tileset, false);\n this._pickStatisticsText = getStatistics(tileset, true);\n selectTilesetOnHover(this, false);\n },\n },\n\n /**\n * Gets the current feature of the view model.\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {Cesium3DTileFeature}\n */\n feature: {\n get: function () {\n return this._feature;\n },\n set: function (feature) {\n if (this._feature === feature) {\n return;\n }\n var currentFeature = this._feature;\n if (defined(currentFeature) && !currentFeature.content.isDestroyed()) {\n // Restore original color to feature that is no longer selected\n if (!this.colorize && defined(this._style)) {\n currentFeature.color = defined(this._style.color)\n ? this._style.color.evaluateColor(currentFeature, scratchColor)\n : Color.WHITE;\n } else {\n currentFeature.color = oldColor;\n }\n this._scene.requestRender();\n }\n if (defined(feature)) {\n // Highlight new feature\n Color.clone(feature.color, oldColor);\n feature.color = highlightColor;\n this._scene.requestRender();\n }\n this._feature = feature;\n },\n },\n\n /**\n * Gets the current tile of the view model\n * @memberof Cesium3DTilesInspectorViewModel.prototype\n * @type {Cesium3DTile}\n */\n tile: {\n get: function () {\n return this._tile;\n },\n set: function (tile) {\n if (this._tile === tile) {\n return;\n }\n var currentTile = this._tile;\n\n if (\n defined(currentTile) &&\n !currentTile.isDestroyed() &&\n !hasFeatures(currentTile.content)\n ) {\n // Restore original color to tile that is no longer selected\n currentTile.color = oldColor;\n this._scene.requestRender();\n }\n\n if (defined(tile) && !hasFeatures(tile.content)) {\n // Highlight new tile\n Color.clone(tile.color, oldColor);\n tile.color = highlightColor;\n this._scene.requestRender();\n }\n this._tile = tile;\n },\n },\n});\n\nfunction hasFeatures(content) {\n if (content.featuresLength > 0) {\n return true;\n }\n var innerContents = content.innerContents;\n if (defined(innerContents)) {\n var length = innerContents.length;\n for (var i = 0; i < length; ++i) {\n if (!hasFeatures(innerContents[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\n/**\n * Toggles the pick tileset mode\n */\nCesium3DTilesInspectorViewModel.prototype.togglePickTileset = function () {\n this.pickActive = !this.pickActive;\n};\n\n/**\n * Toggles the inspector visibility\n */\nCesium3DTilesInspectorViewModel.prototype.toggleInspector = function () {\n this.inspectorVisible = !this.inspectorVisible;\n};\n\n/**\n * Toggles the visibility of the tileset section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleTileset = function () {\n this.tilesetVisible = !this.tilesetVisible;\n};\n\n/**\n * Toggles the visibility of the display section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleDisplay = function () {\n this.displayVisible = !this.displayVisible;\n};\n\n/**\n * Toggles the visibility of the update section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleUpdate = function () {\n this.updateVisible = !this.updateVisible;\n};\n\n/**\n * Toggles the visibility of the logging section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleLogging = function () {\n this.loggingVisible = !this.loggingVisible;\n};\n\n/**\n * Toggles the visibility of the style section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleStyle = function () {\n this.styleVisible = !this.styleVisible;\n};\n\n/**\n * Toggles the visibility of the tile Debug Info section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleTileDebugLabels = function () {\n this.tileDebugLabelsVisible = !this.tileDebugLabelsVisible;\n};\n\n/**\n * Toggles the visibility of the optimization section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleOptimization = function () {\n this.optimizationVisible = !this.optimizationVisible;\n};\n\n/**\n * Trims tile cache\n */\nCesium3DTilesInspectorViewModel.prototype.trimTilesCache = function () {\n if (defined(this._tileset)) {\n this._tileset.trimLoadedTiles();\n }\n};\n\n/**\n * Compiles the style in the style editor.\n */\nCesium3DTilesInspectorViewModel.prototype.compileStyle = function () {\n var tileset = this._tileset;\n if (!defined(tileset) || this.styleString === JSON.stringify(tileset.style)) {\n return;\n }\n this._editorError = \"\";\n try {\n if (this.styleString.length === 0) {\n this.styleString = \"{}\";\n }\n this._style = new Cesium3DTileStyle(JSON.parse(this.styleString));\n this._shouldStyle = true;\n this._scene.requestRender();\n } catch (err) {\n this._editorError = err.toString();\n }\n\n // set feature again so pick coloring is set\n this.feature = this._feature;\n this.tile = this._tile;\n};\n\n/**\n * Handles key press events on the style editor.\n */\nCesium3DTilesInspectorViewModel.prototype.styleEditorKeyPress = function (\n sender,\n event\n) {\n if (event.keyCode === 9) {\n //tab\n event.preventDefault();\n var textArea = event.target;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var newEnd = end;\n var selected = textArea.value.slice(start, end);\n var lines = selected.split(\"\\n\");\n var length = lines.length;\n var i;\n if (!event.shiftKey) {\n for (i = 0; i < length; ++i) {\n lines[i] = \" \" + lines[i];\n newEnd += 2;\n }\n } else {\n for (i = 0; i < length; ++i) {\n if (lines[i][0] === \" \") {\n if (lines[i][1] === \" \") {\n lines[i] = lines[i].substr(2);\n newEnd -= 2;\n } else {\n lines[i] = lines[i].substr(1);\n newEnd -= 1;\n }\n }\n }\n }\n var newText = lines.join(\"\\n\");\n textArea.value =\n textArea.value.slice(0, start) + newText + textArea.value.slice(end);\n textArea.selectionStart = start !== end ? start : newEnd;\n textArea.selectionEnd = newEnd;\n } else if (event.ctrlKey && (event.keyCode === 10 || event.keyCode === 13)) {\n //ctrl + enter\n this.compileStyle();\n }\n return true;\n};\n\n/**\n * Updates the values of view model\n * @private\n */\nCesium3DTilesInspectorViewModel.prototype._update = function () {\n var tileset = this._tileset;\n\n if (this.performance) {\n this._performanceDisplay.update();\n }\n\n if (defined(tileset)) {\n if (tileset.isDestroyed()) {\n this.tile = undefined;\n this.feature = undefined;\n this.tileset = undefined;\n return;\n }\n\n var style = tileset.style;\n if (this._style !== tileset.style) {\n if (this._shouldStyle) {\n tileset.style = this._style;\n this._shouldStyle = false;\n } else {\n this._style = style;\n this.styleString = JSON.stringify(style.style, null, \" \");\n }\n }\n }\n if (this.showStatistics) {\n this._statisticsText = getStatistics(tileset, false);\n this._pickStatisticsText = getStatistics(tileset, true);\n }\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nCesium3DTilesInspectorViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nCesium3DTilesInspectorViewModel.prototype.destroy = function () {\n this._eventHandler.destroy();\n this._removePostRenderEvent();\n\n var that = this;\n this._definedProperties.forEach(function (property) {\n knockout.getObservable(that, property).dispose();\n });\n\n return destroyObject(this);\n};\n\n/**\n * Generates an HTML string of the statistics\n *\n * @function\n * @param {Cesium3DTileset} tileset The tileset\n * @param {Boolean} isPick Whether this is getting the statistics for the pick pass\n * @returns {String} The formatted statistics\n */\nCesium3DTilesInspectorViewModel.getStatistics = getStatistics;\nexport default Cesium3DTilesInspectorViewModel;\n","import Check from \"../../Core/Check.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport InspectorShared from \"../InspectorShared.js\";\nimport Cesium3DTilesInspectorViewModel from \"./Cesium3DTilesInspectorViewModel.js\";\n\n/**\n * Inspector widget to aid in debugging 3D Tiles\n *\n * @alias Cesium3DTilesInspector\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene the Scene instance to use.\n */\nfunction Cesium3DTilesInspector(container, scene) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"container\", container);\n Check.typeOf.object(\"scene\", scene);\n //>>includeEnd('debug');\n\n container = getElement(container);\n var element = document.createElement(\"div\");\n var performanceContainer = document.createElement(\"div\");\n performanceContainer.setAttribute(\"data-bind\", \"visible: performance\");\n var viewModel = new Cesium3DTilesInspectorViewModel(\n scene,\n performanceContainer\n );\n\n this._viewModel = viewModel;\n this._container = container;\n this._element = element;\n\n var text = document.createElement(\"div\");\n text.textContent = \"3D Tiles Inspector\";\n text.className = \"cesium-cesiumInspector-button\";\n text.setAttribute(\"data-bind\", \"click: toggleInspector\");\n element.appendChild(text);\n element.className = \"cesium-cesiumInspector cesium-3DTilesInspector\";\n element.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-cesiumInspector-visible\" : inspectorVisible, \"cesium-cesiumInspector-hidden\" : !inspectorVisible}'\n );\n container.appendChild(element);\n\n var panel = document.createElement(\"div\");\n this._panel = panel;\n panel.className = \"cesium-cesiumInspector-dropDown\";\n element.appendChild(panel);\n\n var createSection = InspectorShared.createSection;\n var createCheckbox = InspectorShared.createCheckbox;\n\n var tilesetPanelContents = createSection(\n panel,\n \"Tileset\",\n \"tilesetVisible\",\n \"toggleTileset\"\n );\n var displayPanelContents = createSection(\n panel,\n \"Display\",\n \"displayVisible\",\n \"toggleDisplay\"\n );\n var updatePanelContents = createSection(\n panel,\n \"Update\",\n \"updateVisible\",\n \"toggleUpdate\"\n );\n var loggingPanelContents = createSection(\n panel,\n \"Logging\",\n \"loggingVisible\",\n \"toggleLogging\"\n );\n var tileDebugLabelsPanelContents = createSection(\n panel,\n \"Tile Debug Labels\",\n \"tileDebugLabelsVisible\",\n \"toggleTileDebugLabels\"\n );\n var stylePanelContents = createSection(\n panel,\n \"Style\",\n \"styleVisible\",\n \"toggleStyle\"\n );\n var optimizationPanelContents = createSection(\n panel,\n \"Optimization\",\n \"optimizationVisible\",\n \"toggleOptimization\"\n );\n\n var properties = document.createElement(\"div\");\n properties.className = \"field-group\";\n var propertiesLabel = document.createElement(\"label\");\n propertiesLabel.className = \"field-label\";\n propertiesLabel.appendChild(document.createTextNode(\"Properties: \"));\n var propertiesField = document.createElement(\"div\");\n propertiesField.setAttribute(\"data-bind\", \"text: properties\");\n properties.appendChild(propertiesLabel);\n properties.appendChild(propertiesField);\n tilesetPanelContents.appendChild(properties);\n tilesetPanelContents.appendChild(\n makeButton(\"togglePickTileset\", \"Pick Tileset\", \"pickActive\")\n );\n tilesetPanelContents.appendChild(\n makeButton(\"trimTilesCache\", \"Trim Tiles Cache\")\n );\n tilesetPanelContents.appendChild(createCheckbox(\"Enable Picking\", \"picking\"));\n\n displayPanelContents.appendChild(createCheckbox(\"Colorize\", \"colorize\"));\n displayPanelContents.appendChild(createCheckbox(\"Wireframe\", \"wireframe\"));\n displayPanelContents.appendChild(\n createCheckbox(\"Bounding Volumes\", \"showBoundingVolumes\")\n );\n displayPanelContents.appendChild(\n createCheckbox(\"Content Volumes\", \"showContentBoundingVolumes\")\n );\n displayPanelContents.appendChild(\n createCheckbox(\"Request Volumes\", \"showRequestVolumes\")\n );\n\n displayPanelContents.appendChild(\n createCheckbox(\"Point Cloud Shading\", \"pointCloudShading\")\n );\n var pointCloudShadingContainer = document.createElement(\"div\");\n pointCloudShadingContainer.setAttribute(\n \"data-bind\",\n \"visible: pointCloudShading\"\n );\n pointCloudShadingContainer.appendChild(\n makeRangeInput(\"geometricErrorScale\", 0, 2, 0.01, \"Geometric Error Scale\")\n );\n pointCloudShadingContainer.appendChild(\n makeRangeInput(\"maximumAttenuation\", 0, 32, 1, \"Maximum Attenuation\")\n );\n pointCloudShadingContainer.appendChild(\n makeRangeInput(\"baseResolution\", 0, 1, 0.01, \"Base Resolution\")\n );\n pointCloudShadingContainer.appendChild(\n createCheckbox(\"Eye Dome Lighting (EDL)\", \"eyeDomeLighting\")\n );\n displayPanelContents.appendChild(pointCloudShadingContainer);\n\n var edlContainer = document.createElement(\"div\");\n edlContainer.setAttribute(\"data-bind\", \"visible: eyeDomeLighting\");\n edlContainer.appendChild(\n makeRangeInput(\"eyeDomeLightingStrength\", 0, 2.0, 0.1, \"EDL Strength\")\n );\n edlContainer.appendChild(\n makeRangeInput(\"eyeDomeLightingRadius\", 0, 4.0, 0.1, \"EDL Radius\")\n );\n pointCloudShadingContainer.appendChild(edlContainer);\n\n updatePanelContents.appendChild(\n createCheckbox(\"Freeze Frame\", \"freezeFrame\")\n );\n updatePanelContents.appendChild(\n createCheckbox(\"Dynamic Screen Space Error\", \"dynamicScreenSpaceError\")\n );\n var sseContainer = document.createElement(\"div\");\n sseContainer.appendChild(\n makeRangeInput(\n \"maximumScreenSpaceError\",\n 0,\n 128,\n 1,\n \"Maximum Screen Space Error\"\n )\n );\n updatePanelContents.appendChild(sseContainer);\n var dynamicScreenSpaceErrorContainer = document.createElement(\"div\");\n dynamicScreenSpaceErrorContainer.setAttribute(\n \"data-bind\",\n \"visible: dynamicScreenSpaceError\"\n );\n dynamicScreenSpaceErrorContainer.appendChild(\n makeRangeInput(\n \"dynamicScreenSpaceErrorDensitySliderValue\",\n 0,\n 1,\n 0.005,\n \"Screen Space Error Density\",\n \"dynamicScreenSpaceErrorDensity\"\n )\n );\n dynamicScreenSpaceErrorContainer.appendChild(\n makeRangeInput(\n \"dynamicScreenSpaceErrorFactor\",\n 1,\n 10,\n 0.1,\n \"Screen Space Error Factor\"\n )\n );\n updatePanelContents.appendChild(dynamicScreenSpaceErrorContainer);\n\n loggingPanelContents.appendChild(\n createCheckbox(\"Performance\", \"performance\")\n );\n loggingPanelContents.appendChild(performanceContainer);\n loggingPanelContents.appendChild(\n createCheckbox(\"Statistics\", \"showStatistics\")\n );\n var statistics = document.createElement(\"div\");\n statistics.className = \"cesium-3dTilesInspector-statistics\";\n statistics.setAttribute(\n \"data-bind\",\n \"html: statisticsText, visible: showStatistics\"\n );\n loggingPanelContents.appendChild(statistics);\n loggingPanelContents.appendChild(\n createCheckbox(\"Pick Statistics\", \"showPickStatistics\")\n );\n var pickStatistics = document.createElement(\"div\");\n pickStatistics.className = \"cesium-3dTilesInspector-statistics\";\n pickStatistics.setAttribute(\n \"data-bind\",\n \"html: pickStatisticsText, visible: showPickStatistics\"\n );\n loggingPanelContents.appendChild(pickStatistics);\n\n var stylePanelEditor = document.createElement(\"div\");\n stylePanelContents.appendChild(stylePanelEditor);\n stylePanelEditor.appendChild(document.createTextNode(\"Color Blend Mode: \"));\n var blendDropdown = document.createElement(\"select\");\n blendDropdown.setAttribute(\n \"data-bind\",\n \"options: colorBlendModes, \" +\n 'optionsText: \"text\", ' +\n 'optionsValue: \"value\", ' +\n \"value: colorBlendMode\"\n );\n stylePanelEditor.appendChild(blendDropdown);\n var styleEditor = document.createElement(\"textarea\");\n styleEditor.setAttribute(\n \"data-bind\",\n \"textInput: styleString, event: { keydown: styleEditorKeyPress }\"\n );\n stylePanelEditor.className = \"cesium-cesiumInspector-styleEditor\";\n stylePanelEditor.appendChild(styleEditor);\n var closeStylesBtn = makeButton(\"compileStyle\", \"Compile (Ctrl+Enter)\");\n stylePanelEditor.appendChild(closeStylesBtn);\n var errorBox = document.createElement(\"div\");\n errorBox.className = \"cesium-cesiumInspector-error\";\n errorBox.setAttribute(\"data-bind\", \"text: editorError\");\n stylePanelEditor.appendChild(errorBox);\n\n tileDebugLabelsPanelContents.appendChild(\n createCheckbox(\"Show Picked Only\", \"showOnlyPickedTileDebugLabel\")\n );\n tileDebugLabelsPanelContents.appendChild(\n createCheckbox(\"Geometric Error\", \"showGeometricError\")\n );\n tileDebugLabelsPanelContents.appendChild(\n createCheckbox(\"Rendering Statistics\", \"showRenderingStatistics\")\n );\n tileDebugLabelsPanelContents.appendChild(\n createCheckbox(\"Memory Usage (MB)\", \"showMemoryUsage\")\n );\n tileDebugLabelsPanelContents.appendChild(createCheckbox(\"Url\", \"showUrl\"));\n\n optimizationPanelContents.appendChild(\n createCheckbox(\"Skip Tile LODs\", \"skipLevelOfDetail\")\n );\n var skipScreenSpaceErrorFactorContainer = document.createElement(\"div\");\n skipScreenSpaceErrorFactorContainer.appendChild(\n makeRangeInput(\"skipScreenSpaceErrorFactor\", 1, 50, 1, \"Skip SSE Factor\")\n );\n optimizationPanelContents.appendChild(skipScreenSpaceErrorFactorContainer);\n var baseScreenSpaceError = document.createElement(\"div\");\n baseScreenSpaceError.appendChild(\n makeRangeInput(\n \"baseScreenSpaceError\",\n 0,\n 4096,\n 1,\n \"SSE before skipping LOD\"\n )\n );\n optimizationPanelContents.appendChild(baseScreenSpaceError);\n var skipLevelsContainer = document.createElement(\"div\");\n skipLevelsContainer.appendChild(\n makeRangeInput(\"skipLevels\", 0, 10, 1, \"Min. levels to skip\")\n );\n optimizationPanelContents.appendChild(skipLevelsContainer);\n optimizationPanelContents.appendChild(\n createCheckbox(\n \"Load only tiles that meet the max SSE.\",\n \"immediatelyLoadDesiredLevelOfDetail\"\n )\n );\n optimizationPanelContents.appendChild(\n createCheckbox(\"Load siblings of visible tiles\", \"loadSiblings\")\n );\n\n knockout.applyBindings(viewModel, element);\n}\n\nObject.defineProperties(Cesium3DTilesInspector.prototype, {\n /**\n * Gets the parent container.\n * @memberof Cesium3DTilesInspector.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof Cesium3DTilesInspector.prototype\n *\n * @type {Cesium3DTilesInspectorViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nCesium3DTilesInspector.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nCesium3DTilesInspector.prototype.destroy = function () {\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n this.viewModel.destroy();\n\n return destroyObject(this);\n};\n\nfunction makeRangeInput(property, min, max, step, text, displayProperty) {\n displayProperty = defaultValue(displayProperty, property);\n var input = document.createElement(\"input\");\n input.setAttribute(\"data-bind\", \"value: \" + displayProperty);\n input.type = \"number\";\n\n var slider = document.createElement(\"input\");\n slider.type = \"range\";\n slider.min = min;\n slider.max = max;\n slider.step = step;\n slider.setAttribute(\"data-bind\", 'valueUpdate: \"input\", value: ' + property);\n\n var wrapper = document.createElement(\"div\");\n wrapper.appendChild(slider);\n\n var container = document.createElement(\"div\");\n container.className = \"cesium-cesiumInspector-slider\";\n container.appendChild(document.createTextNode(text));\n container.appendChild(input);\n container.appendChild(wrapper);\n\n return container;\n}\n\nfunction makeButton(action, text, active) {\n var button = document.createElement(\"button\");\n button.type = \"button\";\n button.textContent = text;\n button.className = \"cesium-cesiumInspector-pickButton\";\n var binding = \"click: \" + action;\n if (defined(active)) {\n binding +=\n ', css: {\"cesium-cesiumInspector-pickButtonHighlight\" : ' + active + \"}\";\n }\n button.setAttribute(\"data-bind\", binding);\n\n return button;\n}\nexport default Cesium3DTilesInspector;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Ray from \"../../Core/Ray.js\";\nimport Rectangle from \"../../Core/Rectangle.js\";\nimport ScreenSpaceEventHandler from \"../../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../../Core/ScreenSpaceEventType.js\";\nimport DebugModelMatrixPrimitive from \"../../Scene/DebugModelMatrixPrimitive.js\";\nimport PerformanceDisplay from \"../../Scene/PerformanceDisplay.js\";\nimport TileCoordinatesImageryProvider from \"../../Scene/TileCoordinatesImageryProvider.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\nfunction frustumStatisticsToString(statistics) {\n var str;\n if (defined(statistics)) {\n str = \"Command Statistics\";\n var com = statistics.commandsInFrustums;\n for (var n in com) {\n if (com.hasOwnProperty(n)) {\n var num = parseInt(n, 10);\n var s;\n if (num === 7) {\n s = \"1, 2 and 3\";\n } else {\n var f = [];\n for (var i = 2; i >= 0; i--) {\n var p = Math.pow(2, i);\n if (num >= p) {\n f.push(i + 1);\n num -= p;\n }\n }\n s = f.reverse().join(\" and \");\n }\n str += \"<br>    \" + com[n] + \" in frustum \" + s;\n }\n }\n str += \"<br>Total: \" + statistics.totalCommands;\n }\n\n return str;\n}\n\nfunction boundDepthFrustum(lower, upper, proposed) {\n var bounded = Math.min(proposed, upper);\n bounded = Math.max(bounded, lower);\n return bounded;\n}\n\nvar scratchPickRay = new Ray();\nvar scratchPickCartesian = new Cartesian3();\n\n/**\n * The view model for {@link CesiumInspector}.\n * @alias CesiumInspectorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {Element} performanceContainer The instance to use for performance container.\n */\nfunction CesiumInspectorViewModel(scene, performanceContainer) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required\");\n }\n\n if (!defined(performanceContainer)) {\n throw new DeveloperError(\"performanceContainer is required\");\n }\n //>>includeEnd('debug');\n\n var that = this;\n var canvas = scene.canvas;\n var eventHandler = new ScreenSpaceEventHandler(canvas);\n this._eventHandler = eventHandler;\n this._scene = scene;\n this._canvas = canvas;\n this._primitive = undefined;\n this._tile = undefined;\n this._modelMatrixPrimitive = undefined;\n this._performanceDisplay = undefined;\n this._performanceContainer = performanceContainer;\n\n var globe = this._scene.globe;\n globe.depthTestAgainstTerrain = true;\n\n /**\n * Gets or sets the show frustums state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.frustums = false;\n\n /**\n * Gets or sets the show frustum planes state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.frustumPlanes = false;\n\n /**\n * Gets or sets the show performance display state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.performance = false;\n\n /**\n * Gets or sets the shader cache text. This property is observable.\n * @type {String}\n * @default ''\n */\n this.shaderCacheText = \"\";\n\n /**\n * Gets or sets the show primitive bounding sphere state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.primitiveBoundingSphere = false;\n\n /**\n * Gets or sets the show primitive reference frame state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.primitiveReferenceFrame = false;\n\n /**\n * Gets or sets the filter primitive state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.filterPrimitive = false;\n\n /**\n * Gets or sets the show tile bounding sphere state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.tileBoundingSphere = false;\n\n /**\n * Gets or sets the filter tile state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.filterTile = false;\n\n /**\n * Gets or sets the show wireframe state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.wireframe = false;\n\n /**\n * Gets or sets the show globe depth state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.globeDepth = false;\n\n /**\n * Gets or sets the show pick depth state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.pickDepth = false;\n\n /**\n * Gets or sets the index of the depth frustum to display. This property is observable.\n * @type {Number}\n * @default 1\n */\n this.depthFrustum = 1;\n this._numberOfFrustums = 1;\n\n /**\n * Gets or sets the suspend updates state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.suspendUpdates = false;\n\n /**\n * Gets or sets the show tile coordinates state. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.tileCoordinates = false;\n\n /**\n * Gets or sets the frustum statistic text. This property is observable.\n * @type {String}\n * @default ''\n */\n this.frustumStatisticText = false;\n\n /**\n * Gets or sets the selected tile information text. This property is observable.\n * @type {String}\n * @default ''\n */\n this.tileText = \"\";\n\n /**\n * Gets if a primitive has been selected. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.hasPickedPrimitive = false;\n\n /**\n * Gets if a tile has been selected. This property is observable\n * @type {Boolean}\n * @default false\n */\n this.hasPickedTile = false;\n\n /**\n * Gets if the picking primitive command is active. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.pickPrimitiveActive = false;\n\n /**\n * Gets if the picking tile command is active. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.pickTileActive = false;\n\n /**\n * Gets or sets if the cesium inspector drop down is visible. This property is observable.\n * @type {Boolean}\n * @default true\n */\n this.dropDownVisible = true;\n\n /**\n * Gets or sets if the general section is visible. This property is observable.\n * @type {Boolean}\n * @default true\n */\n this.generalVisible = true;\n\n /**\n * Gets or sets if the primitive section is visible. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.primitivesVisible = false;\n\n /**\n * Gets or sets if the terrain section is visible. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.terrainVisible = false;\n\n /**\n * Gets or sets the index of the depth frustum text. This property is observable.\n * @type {String}\n * @default ''\n */\n this.depthFrustumText = \"\";\n\n knockout.track(this, [\n \"frustums\",\n \"frustumPlanes\",\n \"performance\",\n \"shaderCacheText\",\n \"primitiveBoundingSphere\",\n \"primitiveReferenceFrame\",\n \"filterPrimitive\",\n \"tileBoundingSphere\",\n \"filterTile\",\n \"wireframe\",\n \"globeDepth\",\n \"pickDepth\",\n \"depthFrustum\",\n \"suspendUpdates\",\n \"tileCoordinates\",\n \"frustumStatisticText\",\n \"tileText\",\n \"hasPickedPrimitive\",\n \"hasPickedTile\",\n \"pickPrimitiveActive\",\n \"pickTileActive\",\n \"dropDownVisible\",\n \"generalVisible\",\n \"primitivesVisible\",\n \"terrainVisible\",\n \"depthFrustumText\",\n ]);\n\n this._toggleDropDown = createCommand(function () {\n that.dropDownVisible = !that.dropDownVisible;\n });\n\n this._toggleGeneral = createCommand(function () {\n that.generalVisible = !that.generalVisible;\n });\n\n this._togglePrimitives = createCommand(function () {\n that.primitivesVisible = !that.primitivesVisible;\n });\n\n this._toggleTerrain = createCommand(function () {\n that.terrainVisible = !that.terrainVisible;\n });\n\n this._frustumsSubscription = knockout\n .getObservable(this, \"frustums\")\n .subscribe(function (val) {\n that._scene.debugShowFrustums = val;\n that._scene.requestRender();\n });\n\n this._frustumPlanesSubscription = knockout\n .getObservable(this, \"frustumPlanes\")\n .subscribe(function (val) {\n that._scene.debugShowFrustumPlanes = val;\n that._scene.requestRender();\n });\n\n this._performanceSubscription = knockout\n .getObservable(this, \"performance\")\n .subscribe(function (val) {\n if (val) {\n that._performanceDisplay = new PerformanceDisplay({\n container: that._performanceContainer,\n });\n } else {\n that._performanceContainer.innerHTML = \"\";\n }\n });\n\n this._showPrimitiveBoundingSphere = createCommand(function () {\n that._primitive.debugShowBoundingVolume = that.primitiveBoundingSphere;\n that._scene.requestRender();\n return true;\n });\n\n this._primitiveBoundingSphereSubscription = knockout\n .getObservable(this, \"primitiveBoundingSphere\")\n .subscribe(function () {\n that._showPrimitiveBoundingSphere();\n });\n\n this._showPrimitiveReferenceFrame = createCommand(function () {\n if (that.primitiveReferenceFrame) {\n var modelMatrix = that._primitive.modelMatrix;\n that._modelMatrixPrimitive = new DebugModelMatrixPrimitive({\n modelMatrix: modelMatrix,\n });\n that._scene.primitives.add(that._modelMatrixPrimitive);\n } else if (defined(that._modelMatrixPrimitive)) {\n that._scene.primitives.remove(that._modelMatrixPrimitive);\n that._modelMatrixPrimitive = undefined;\n }\n that._scene.requestRender();\n return true;\n });\n\n this._primitiveReferenceFrameSubscription = knockout\n .getObservable(this, \"primitiveReferenceFrame\")\n .subscribe(function () {\n that._showPrimitiveReferenceFrame();\n });\n\n this._doFilterPrimitive = createCommand(function () {\n if (that.filterPrimitive) {\n that._scene.debugCommandFilter = function (command) {\n if (\n defined(that._modelMatrixPrimitive) &&\n command.owner === that._modelMatrixPrimitive._primitive\n ) {\n return true;\n } else if (defined(that._primitive)) {\n return (\n command.owner === that._primitive ||\n command.owner === that._primitive._billboardCollection ||\n command.owner.primitive === that._primitive\n );\n }\n return false;\n };\n } else {\n that._scene.debugCommandFilter = undefined;\n }\n return true;\n });\n\n this._filterPrimitiveSubscription = knockout\n .getObservable(this, \"filterPrimitive\")\n .subscribe(function () {\n that._doFilterPrimitive();\n that._scene.requestRender();\n });\n\n this._wireframeSubscription = knockout\n .getObservable(this, \"wireframe\")\n .subscribe(function (val) {\n globe._surface.tileProvider._debug.wireframe = val;\n that._scene.requestRender();\n });\n\n this._globeDepthSubscription = knockout\n .getObservable(this, \"globeDepth\")\n .subscribe(function (val) {\n that._scene.debugShowGlobeDepth = val;\n that._scene.requestRender();\n });\n\n this._pickDepthSubscription = knockout\n .getObservable(this, \"pickDepth\")\n .subscribe(function (val) {\n that._scene.debugShowPickDepth = val;\n that._scene.requestRender();\n });\n\n this._depthFrustumSubscription = knockout\n .getObservable(this, \"depthFrustum\")\n .subscribe(function (val) {\n that._scene.debugShowDepthFrustum = val;\n that._scene.requestRender();\n });\n\n this._incrementDepthFrustum = createCommand(function () {\n var next = that.depthFrustum + 1;\n that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next);\n that._scene.requestRender();\n return true;\n });\n\n this._decrementDepthFrustum = createCommand(function () {\n var next = that.depthFrustum - 1;\n that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next);\n that._scene.requestRender();\n return true;\n });\n\n this._suspendUpdatesSubscription = knockout\n .getObservable(this, \"suspendUpdates\")\n .subscribe(function (val) {\n globe._surface._debug.suspendLodUpdate = val;\n if (!val) {\n that.filterTile = false;\n }\n });\n\n var tileBoundariesLayer;\n this._showTileCoordinates = createCommand(function () {\n if (that.tileCoordinates && !defined(tileBoundariesLayer)) {\n tileBoundariesLayer = scene.imageryLayers.addImageryProvider(\n new TileCoordinatesImageryProvider({\n tilingScheme: scene.terrainProvider.tilingScheme,\n })\n );\n } else if (!that.tileCoordinates && defined(tileBoundariesLayer)) {\n scene.imageryLayers.remove(tileBoundariesLayer);\n tileBoundariesLayer = undefined;\n }\n return true;\n });\n\n this._tileCoordinatesSubscription = knockout\n .getObservable(this, \"tileCoordinates\")\n .subscribe(function () {\n that._showTileCoordinates();\n that._scene.requestRender();\n });\n\n this._tileBoundingSphereSubscription = knockout\n .getObservable(this, \"tileBoundingSphere\")\n .subscribe(function () {\n that._showTileBoundingSphere();\n that._scene.requestRender();\n });\n\n this._showTileBoundingSphere = createCommand(function () {\n if (that.tileBoundingSphere) {\n globe._surface.tileProvider._debug.boundingSphereTile = that._tile;\n } else {\n globe._surface.tileProvider._debug.boundingSphereTile = undefined;\n }\n that._scene.requestRender();\n return true;\n });\n\n this._doFilterTile = createCommand(function () {\n if (!that.filterTile) {\n that.suspendUpdates = false;\n } else {\n that.suspendUpdates = true;\n\n globe._surface._tilesToRender = [];\n\n if (defined(that._tile) && that._tile.renderable) {\n globe._surface._tilesToRender.push(that._tile);\n }\n }\n return true;\n });\n\n this._filterTileSubscription = knockout\n .getObservable(this, \"filterTile\")\n .subscribe(function () {\n that.doFilterTile();\n that._scene.requestRender();\n });\n\n function pickPrimitive(e) {\n var newPick = that._scene.pick({\n x: e.position.x,\n y: e.position.y,\n });\n if (defined(newPick)) {\n that.primitive = defined(newPick.collection)\n ? newPick.collection\n : newPick.primitive;\n }\n\n that._scene.requestRender();\n that.pickPrimitiveActive = false;\n }\n\n this._pickPrimitive = createCommand(function () {\n that.pickPrimitiveActive = !that.pickPrimitiveActive;\n });\n\n this._pickPrimitiveActiveSubscription = knockout\n .getObservable(this, \"pickPrimitiveActive\")\n .subscribe(function (val) {\n if (val) {\n eventHandler.setInputAction(\n pickPrimitive,\n ScreenSpaceEventType.LEFT_CLICK\n );\n } else {\n eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n }\n });\n\n function selectTile(e) {\n var selectedTile;\n var ellipsoid = globe.ellipsoid;\n\n var ray = that._scene.camera.getPickRay(e.position, scratchPickRay);\n var cartesian = globe.pick(ray, that._scene, scratchPickCartesian);\n\n if (defined(cartesian)) {\n var cartographic = ellipsoid.cartesianToCartographic(cartesian);\n var tilesRendered =\n globe._surface.tileProvider._tilesToRenderByTextureCount;\n for (\n var textureCount = 0;\n !selectedTile && textureCount < tilesRendered.length;\n ++textureCount\n ) {\n var tilesRenderedByTextureCount = tilesRendered[textureCount];\n if (!defined(tilesRenderedByTextureCount)) {\n continue;\n }\n\n for (\n var tileIndex = 0;\n !selectedTile && tileIndex < tilesRenderedByTextureCount.length;\n ++tileIndex\n ) {\n var tile = tilesRenderedByTextureCount[tileIndex];\n if (Rectangle.contains(tile.rectangle, cartographic)) {\n selectedTile = tile;\n }\n }\n }\n }\n\n that.tile = selectedTile;\n\n that.pickTileActive = false;\n }\n\n this._pickTile = createCommand(function () {\n that.pickTileActive = !that.pickTileActive;\n });\n\n this._pickTileActiveSubscription = knockout\n .getObservable(this, \"pickTileActive\")\n .subscribe(function (val) {\n if (val) {\n eventHandler.setInputAction(\n selectTile,\n ScreenSpaceEventType.LEFT_CLICK\n );\n } else {\n eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n }\n });\n\n this._removePostRenderEvent = scene.postRender.addEventListener(function () {\n that._update();\n });\n}\n\nObject.defineProperties(CesiumInspectorViewModel.prototype, {\n /**\n * Gets the scene to control.\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the container of the PerformanceDisplay\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Element}\n */\n performanceContainer: {\n get: function () {\n return this._performanceContainer;\n },\n },\n\n /**\n * Gets the command to toggle the visibility of the drop down.\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n toggleDropDown: {\n get: function () {\n return this._toggleDropDown;\n },\n },\n\n /**\n * Gets the command to toggle the visibility of a BoundingSphere for a primitive\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n showPrimitiveBoundingSphere: {\n get: function () {\n return this._showPrimitiveBoundingSphere;\n },\n },\n\n /**\n * Gets the command to toggle the visibility of a {@link DebugModelMatrixPrimitive} for the model matrix of a primitive\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n showPrimitiveReferenceFrame: {\n get: function () {\n return this._showPrimitiveReferenceFrame;\n },\n },\n\n /**\n * Gets the command to toggle a filter that renders only a selected primitive\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n doFilterPrimitive: {\n get: function () {\n return this._doFilterPrimitive;\n },\n },\n\n /**\n * Gets the command to increment the depth frustum index to be shown\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n incrementDepthFrustum: {\n get: function () {\n return this._incrementDepthFrustum;\n },\n },\n\n /**\n * Gets the command to decrement the depth frustum index to be shown\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n decrementDepthFrustum: {\n get: function () {\n return this._decrementDepthFrustum;\n },\n },\n\n /**\n * Gets the command to toggle the visibility of tile coordinates\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n showTileCoordinates: {\n get: function () {\n return this._showTileCoordinates;\n },\n },\n\n /**\n * Gets the command to toggle the visibility of a BoundingSphere for a selected tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n showTileBoundingSphere: {\n get: function () {\n return this._showTileBoundingSphere;\n },\n },\n\n /**\n * Gets the command to toggle a filter that renders only a selected tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n doFilterTile: {\n get: function () {\n return this._doFilterTile;\n },\n },\n\n /**\n * Gets the command to expand and collapse the general section\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n toggleGeneral: {\n get: function () {\n return this._toggleGeneral;\n },\n },\n\n /**\n * Gets the command to expand and collapse the primitives section\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n togglePrimitives: {\n get: function () {\n return this._togglePrimitives;\n },\n },\n\n /**\n * Gets the command to expand and collapse the terrain section\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n toggleTerrain: {\n get: function () {\n return this._toggleTerrain;\n },\n },\n\n /**\n * Gets the command to pick a primitive\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n pickPrimitive: {\n get: function () {\n return this._pickPrimitive;\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n pickTile: {\n get: function () {\n return this._pickTile;\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n selectParent: {\n get: function () {\n var that = this;\n return createCommand(function () {\n that.tile = that.tile.parent;\n });\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n selectNW: {\n get: function () {\n var that = this;\n return createCommand(function () {\n that.tile = that.tile.northwestChild;\n });\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n selectNE: {\n get: function () {\n var that = this;\n return createCommand(function () {\n that.tile = that.tile.northeastChild;\n });\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n selectSW: {\n get: function () {\n var that = this;\n return createCommand(function () {\n that.tile = that.tile.southwestChild;\n });\n },\n },\n\n /**\n * Gets the command to pick a tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n selectSE: {\n get: function () {\n var that = this;\n return createCommand(function () {\n that.tile = that.tile.southeastChild;\n });\n },\n },\n\n /**\n * Gets or sets the current selected primitive\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n primitive: {\n get: function () {\n return this._primitive;\n },\n set: function (newPrimitive) {\n var oldPrimitive = this._primitive;\n if (newPrimitive !== oldPrimitive) {\n this.hasPickedPrimitive = true;\n if (defined(oldPrimitive)) {\n oldPrimitive.debugShowBoundingVolume = false;\n }\n this._scene.debugCommandFilter = undefined;\n if (defined(this._modelMatrixPrimitive)) {\n this._scene.primitives.remove(this._modelMatrixPrimitive);\n this._modelMatrixPrimitive = undefined;\n }\n this._primitive = newPrimitive;\n newPrimitive.show = false;\n setTimeout(function () {\n newPrimitive.show = true;\n }, 50);\n this.showPrimitiveBoundingSphere();\n this.showPrimitiveReferenceFrame();\n this.doFilterPrimitive();\n }\n },\n },\n\n /**\n * Gets or sets the current selected tile\n * @memberof CesiumInspectorViewModel.prototype\n *\n * @type {Command}\n */\n tile: {\n get: function () {\n return this._tile;\n },\n set: function (newTile) {\n if (defined(newTile)) {\n this.hasPickedTile = true;\n var oldTile = this._tile;\n if (newTile !== oldTile) {\n this.tileText =\n \"L: \" + newTile.level + \" X: \" + newTile.x + \" Y: \" + newTile.y;\n this.tileText +=\n \"<br>SW corner: \" +\n newTile.rectangle.west +\n \", \" +\n newTile.rectangle.south;\n this.tileText +=\n \"<br>NE corner: \" +\n newTile.rectangle.east +\n \", \" +\n newTile.rectangle.north;\n var data = newTile.data;\n if (defined(data) && defined(data.tileBoundingRegion)) {\n this.tileText +=\n \"<br>Min: \" +\n data.tileBoundingRegion.minimumHeight +\n \" Max: \" +\n data.tileBoundingRegion.maximumHeight;\n } else {\n this.tileText += \"<br>(Tile is not loaded)\";\n }\n }\n this._tile = newTile;\n this.showTileBoundingSphere();\n this.doFilterTile();\n } else {\n this.hasPickedTile = false;\n this._tile = undefined;\n }\n },\n },\n});\n\n/**\n * Updates the view model\n * @private\n */\nCesiumInspectorViewModel.prototype._update = function () {\n if (this.frustums) {\n this.frustumStatisticText = frustumStatisticsToString(\n this._scene.debugFrustumStatistics\n );\n }\n\n // Determine the number of frustums being used.\n var numberOfFrustums = this._scene.numberOfFrustums;\n this._numberOfFrustums = numberOfFrustums;\n // Bound the frustum to be displayed.\n this.depthFrustum = boundDepthFrustum(1, numberOfFrustums, this.depthFrustum);\n // Update the displayed text.\n this.depthFrustumText = this.depthFrustum + \" of \" + numberOfFrustums;\n\n if (this.performance) {\n this._performanceDisplay.update();\n }\n if (this.primitiveReferenceFrame) {\n this._modelMatrixPrimitive.modelMatrix = this._primitive.modelMatrix;\n }\n\n this.shaderCacheText =\n \"Cached shaders: \" + this._scene.context.shaderCache.numberOfShaders;\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumInspectorViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nCesiumInspectorViewModel.prototype.destroy = function () {\n this._eventHandler.destroy();\n this._removePostRenderEvent();\n this._frustumsSubscription.dispose();\n this._frustumPlanesSubscription.dispose();\n this._performanceSubscription.dispose();\n this._primitiveBoundingSphereSubscription.dispose();\n this._primitiveReferenceFrameSubscription.dispose();\n this._filterPrimitiveSubscription.dispose();\n this._wireframeSubscription.dispose();\n this._globeDepthSubscription.dispose();\n this._pickDepthSubscription.dispose();\n this._depthFrustumSubscription.dispose();\n this._suspendUpdatesSubscription.dispose();\n this._tileCoordinatesSubscription.dispose();\n this._tileBoundingSphereSubscription.dispose();\n this._filterTileSubscription.dispose();\n this._pickPrimitiveActiveSubscription.dispose();\n this._pickTileActiveSubscription.dispose();\n return destroyObject(this);\n};\nexport default CesiumInspectorViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport InspectorShared from \"../InspectorShared.js\";\nimport CesiumInspectorViewModel from \"./CesiumInspectorViewModel.js\";\n\n/**\n * Inspector widget to aid in debugging\n *\n * @alias CesiumInspector\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Inspector.html|Cesium Sandcastle Cesium Inspector Demo}\n */\nfunction CesiumInspector(container, scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var performanceContainer = document.createElement(\"div\");\n\n var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);\n this._viewModel = viewModel;\n this._container = container;\n\n var element = document.createElement(\"div\");\n this._element = element;\n var text = document.createElement(\"div\");\n text.textContent = \"Cesium Inspector\";\n text.className = \"cesium-cesiumInspector-button\";\n text.setAttribute(\"data-bind\", \"click: toggleDropDown\");\n element.appendChild(text);\n element.className = \"cesium-cesiumInspector\";\n element.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-cesiumInspector-visible\" : dropDownVisible, \"cesium-cesiumInspector-hidden\" : !dropDownVisible }'\n );\n container.appendChild(this._element);\n\n var panel = document.createElement(\"div\");\n this._panel = panel;\n panel.className = \"cesium-cesiumInspector-dropDown\";\n element.appendChild(panel);\n\n var createSection = InspectorShared.createSection;\n var createCheckbox = InspectorShared.createCheckbox;\n\n // General\n var generalSection = createSection(\n panel,\n \"General\",\n \"generalVisible\",\n \"toggleGeneral\"\n );\n\n var debugShowFrustums = createCheckbox(\"Show Frustums\", \"frustums\");\n var frustumStatistics = document.createElement(\"div\");\n frustumStatistics.className = \"cesium-cesiumInspector-frustumStatistics\";\n frustumStatistics.setAttribute(\n \"data-bind\",\n \"visible: frustums, html: frustumStatisticText\"\n );\n debugShowFrustums.appendChild(frustumStatistics);\n generalSection.appendChild(debugShowFrustums);\n\n generalSection.appendChild(\n createCheckbox(\"Show Frustum Planes\", \"frustumPlanes\")\n );\n generalSection.appendChild(\n createCheckbox(\"Performance Display\", \"performance\")\n );\n\n performanceContainer.className = \"cesium-cesiumInspector-performanceDisplay\";\n generalSection.appendChild(performanceContainer);\n\n var shaderCacheDisplay = document.createElement(\"div\");\n shaderCacheDisplay.className = \"cesium-cesiumInspector-shaderCache\";\n shaderCacheDisplay.setAttribute(\"data-bind\", \"html: shaderCacheText\");\n generalSection.appendChild(shaderCacheDisplay);\n\n // https://github.com/CesiumGS/cesium/issues/6763\n // var globeDepth = createCheckbox('Show globe depth', 'globeDepth');\n // generalSection.appendChild(globeDepth);\n //\n // var globeDepthFrustum = document.createElement('div');\n // globeDepth.appendChild(globeDepthFrustum);\n //\n // generalSection.appendChild(createCheckbox('Show pick depth', 'pickDepth'));\n\n var depthFrustum = document.createElement(\"div\");\n generalSection.appendChild(depthFrustum);\n\n // Use a span with HTML binding so that we can indent with non-breaking spaces.\n var gLabel = document.createElement(\"span\");\n gLabel.setAttribute(\n \"data-bind\",\n 'html: \"     Frustum:\"'\n );\n depthFrustum.appendChild(gLabel);\n\n var gText = document.createElement(\"span\");\n gText.setAttribute(\"data-bind\", \"text: depthFrustumText\");\n depthFrustum.appendChild(gText);\n\n var gMinusButton = document.createElement(\"input\");\n gMinusButton.type = \"button\";\n gMinusButton.value = \"-\";\n gMinusButton.className = \"cesium-cesiumInspector-pickButton\";\n gMinusButton.setAttribute(\"data-bind\", \"click: decrementDepthFrustum\");\n depthFrustum.appendChild(gMinusButton);\n\n var gPlusButton = document.createElement(\"input\");\n gPlusButton.type = \"button\";\n gPlusButton.value = \"+\";\n gPlusButton.className = \"cesium-cesiumInspector-pickButton\";\n gPlusButton.setAttribute(\"data-bind\", \"click: incrementDepthFrustum\");\n depthFrustum.appendChild(gPlusButton);\n\n // Primitives\n var primSection = createSection(\n panel,\n \"Primitives\",\n \"primitivesVisible\",\n \"togglePrimitives\"\n );\n var pickPrimRequired = document.createElement(\"div\");\n pickPrimRequired.className = \"cesium-cesiumInspector-pickSection\";\n primSection.appendChild(pickPrimRequired);\n\n var pickPrimitiveButton = document.createElement(\"input\");\n pickPrimitiveButton.type = \"button\";\n pickPrimitiveButton.value = \"Pick a primitive\";\n pickPrimitiveButton.className = \"cesium-cesiumInspector-pickButton\";\n pickPrimitiveButton.setAttribute(\n \"data-bind\",\n 'css: {\"cesium-cesiumInspector-pickButtonHighlight\" : pickPrimitiveActive}, click: pickPrimitive'\n );\n var buttonWrap = document.createElement(\"div\");\n buttonWrap.className = \"cesium-cesiumInspector-center\";\n buttonWrap.appendChild(pickPrimitiveButton);\n pickPrimRequired.appendChild(buttonWrap);\n\n pickPrimRequired.appendChild(\n createCheckbox(\n \"Show bounding sphere\",\n \"primitiveBoundingSphere\",\n \"hasPickedPrimitive\"\n )\n );\n pickPrimRequired.appendChild(\n createCheckbox(\n \"Show reference frame\",\n \"primitiveReferenceFrame\",\n \"hasPickedPrimitive\"\n )\n );\n\n this._primitiveOnly = createCheckbox(\n \"Show only selected\",\n \"filterPrimitive\",\n \"hasPickedPrimitive\"\n );\n pickPrimRequired.appendChild(this._primitiveOnly);\n\n // Terrain\n var terrainSection = createSection(\n panel,\n \"Terrain\",\n \"terrainVisible\",\n \"toggleTerrain\"\n );\n var pickTileRequired = document.createElement(\"div\");\n pickTileRequired.className = \"cesium-cesiumInspector-pickSection\";\n terrainSection.appendChild(pickTileRequired);\n var pickTileButton = document.createElement(\"input\");\n pickTileButton.type = \"button\";\n pickTileButton.value = \"Pick a tile\";\n pickTileButton.className = \"cesium-cesiumInspector-pickButton\";\n pickTileButton.setAttribute(\n \"data-bind\",\n 'css: {\"cesium-cesiumInspector-pickButtonHighlight\" : pickTileActive}, click: pickTile'\n );\n buttonWrap = document.createElement(\"div\");\n buttonWrap.appendChild(pickTileButton);\n buttonWrap.className = \"cesium-cesiumInspector-center\";\n pickTileRequired.appendChild(buttonWrap);\n var tileInfo = document.createElement(\"div\");\n pickTileRequired.appendChild(tileInfo);\n var parentTile = document.createElement(\"input\");\n parentTile.type = \"button\";\n parentTile.value = \"Parent\";\n parentTile.className = \"cesium-cesiumInspector-pickButton\";\n parentTile.setAttribute(\"data-bind\", \"click: selectParent\");\n var nwTile = document.createElement(\"input\");\n nwTile.type = \"button\";\n nwTile.value = \"NW\";\n nwTile.className = \"cesium-cesiumInspector-pickButton\";\n nwTile.setAttribute(\"data-bind\", \"click: selectNW\");\n var neTile = document.createElement(\"input\");\n neTile.type = \"button\";\n neTile.value = \"NE\";\n neTile.className = \"cesium-cesiumInspector-pickButton\";\n neTile.setAttribute(\"data-bind\", \"click: selectNE\");\n var swTile = document.createElement(\"input\");\n swTile.type = \"button\";\n swTile.value = \"SW\";\n swTile.className = \"cesium-cesiumInspector-pickButton\";\n swTile.setAttribute(\"data-bind\", \"click: selectSW\");\n var seTile = document.createElement(\"input\");\n seTile.type = \"button\";\n seTile.value = \"SE\";\n seTile.className = \"cesium-cesiumInspector-pickButton\";\n seTile.setAttribute(\"data-bind\", \"click: selectSE\");\n\n var tileText = document.createElement(\"div\");\n tileText.className = \"cesium-cesiumInspector-tileText\";\n tileInfo.className = \"cesium-cesiumInspector-frustumStatistics\";\n tileInfo.appendChild(tileText);\n tileInfo.setAttribute(\"data-bind\", \"visible: hasPickedTile\");\n tileText.setAttribute(\"data-bind\", \"html: tileText\");\n\n var relativeText = document.createElement(\"div\");\n relativeText.className = \"cesium-cesiumInspector-relativeText\";\n relativeText.textContent = \"Select relative:\";\n tileInfo.appendChild(relativeText);\n\n var table = document.createElement(\"table\");\n var tr1 = document.createElement(\"tr\");\n var tr2 = document.createElement(\"tr\");\n var td1 = document.createElement(\"td\");\n td1.appendChild(parentTile);\n var td2 = document.createElement(\"td\");\n td2.appendChild(nwTile);\n var td3 = document.createElement(\"td\");\n td3.appendChild(neTile);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n tr1.appendChild(td3);\n var td4 = document.createElement(\"td\");\n var td5 = document.createElement(\"td\");\n td5.appendChild(swTile);\n var td6 = document.createElement(\"td\");\n td6.appendChild(seTile);\n tr2.appendChild(td4);\n tr2.appendChild(td5);\n tr2.appendChild(td6);\n table.appendChild(tr1);\n table.appendChild(tr2);\n\n tileInfo.appendChild(table);\n\n pickTileRequired.appendChild(\n createCheckbox(\n \"Show bounding volume\",\n \"tileBoundingSphere\",\n \"hasPickedTile\"\n )\n );\n pickTileRequired.appendChild(\n createCheckbox(\"Show only selected\", \"filterTile\", \"hasPickedTile\")\n );\n\n terrainSection.appendChild(createCheckbox(\"Wireframe\", \"wireframe\"));\n terrainSection.appendChild(\n createCheckbox(\"Suspend LOD update\", \"suspendUpdates\")\n );\n terrainSection.appendChild(\n createCheckbox(\"Show tile coordinates\", \"tileCoordinates\")\n );\n\n knockout.applyBindings(viewModel, this._element);\n}\n\nObject.defineProperties(CesiumInspector.prototype, {\n /**\n * Gets the parent container.\n * @memberof CesiumInspector.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof CesiumInspector.prototype\n *\n * @type {CesiumInspectorViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumInspector.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nCesiumInspector.prototype.destroy = function () {\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n this.viewModel.destroy();\n\n return destroyObject(this);\n};\nexport default CesiumInspector;\n","import buildModuleUrl from \"../../Core/buildModuleUrl.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Clock from \"../../Core/Clock.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport formatError from \"../../Core/formatError.js\";\nimport requestAnimationFrame from \"../../Core/requestAnimationFrame.js\";\nimport ScreenSpaceEventHandler from \"../../Core/ScreenSpaceEventHandler.js\";\nimport createWorldImagery from \"../../Scene/createWorldImagery.js\";\nimport Globe from \"../../Scene/Globe.js\";\nimport Moon from \"../../Scene/Moon.js\";\nimport Scene from \"../../Scene/Scene.js\";\nimport SceneMode from \"../../Scene/SceneMode.js\";\nimport ShadowMode from \"../../Scene/ShadowMode.js\";\nimport SkyAtmosphere from \"../../Scene/SkyAtmosphere.js\";\nimport SkyBox from \"../../Scene/SkyBox.js\";\nimport Sun from \"../../Scene/Sun.js\";\nimport getElement from \"../getElement.js\";\n\nfunction getDefaultSkyBoxUrl(suffix) {\n return buildModuleUrl(\n \"Assets/Textures/SkyBox/tycho2t3_80_\" + suffix + \".jpg\"\n );\n}\n\nfunction startRenderLoop(widget) {\n widget._renderLoopRunning = true;\n\n var lastFrameTime = 0;\n function render(frameTime) {\n if (widget.isDestroyed()) {\n return;\n }\n\n if (widget._useDefaultRenderLoop) {\n try {\n var targetFrameRate = widget._targetFrameRate;\n if (!defined(targetFrameRate)) {\n widget.resize();\n widget.render();\n requestAnimationFrame(render);\n } else {\n var interval = 1000.0 / targetFrameRate;\n var delta = frameTime - lastFrameTime;\n\n if (delta > interval) {\n widget.resize();\n widget.render();\n lastFrameTime = frameTime - (delta % interval);\n }\n requestAnimationFrame(render);\n }\n } catch (error) {\n widget._useDefaultRenderLoop = false;\n widget._renderLoopRunning = false;\n if (widget._showRenderLoopErrors) {\n var title =\n \"An error occurred while rendering. Rendering has stopped.\";\n widget.showErrorPanel(title, undefined, error);\n }\n }\n } else {\n widget._renderLoopRunning = false;\n }\n }\n\n requestAnimationFrame(render);\n}\n\nfunction configurePixelRatio(widget) {\n var pixelRatio = widget._useBrowserRecommendedResolution\n ? 1.0\n : window.devicePixelRatio;\n pixelRatio *= widget._resolutionScale;\n if (defined(widget._scene)) {\n widget._scene.pixelRatio = pixelRatio;\n }\n\n return pixelRatio;\n}\n\nfunction configureCanvasSize(widget) {\n var canvas = widget._canvas;\n var width = canvas.clientWidth;\n var height = canvas.clientHeight;\n var pixelRatio = configurePixelRatio(widget);\n\n widget._canvasClientWidth = width;\n widget._canvasClientHeight = height;\n\n width *= pixelRatio;\n height *= pixelRatio;\n\n canvas.width = width;\n canvas.height = height;\n\n widget._canRender = width !== 0 && height !== 0;\n widget._lastDevicePixelRatio = window.devicePixelRatio;\n}\n\nfunction configureCameraFrustum(widget) {\n var canvas = widget._canvas;\n var width = canvas.width;\n var height = canvas.height;\n if (width !== 0 && height !== 0) {\n var frustum = widget._scene.camera.frustum;\n if (defined(frustum.aspectRatio)) {\n frustum.aspectRatio = width / height;\n } else {\n frustum.top = frustum.right * (height / width);\n frustum.bottom = -frustum.top;\n }\n }\n}\n\n/**\n * A widget containing a Cesium scene.\n *\n * @alias CesiumWidget\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Object} [options] Object with the following properties:\n * @param {Clock} [options.clock=new Clock()] The clock to use to control current time.\n * @param {ImageryProvider | false} [options.imageryProvider=createWorldImagery()] The imagery provider to serve as the base layer. If set to <code>false</code>, no imagery provider will be added.\n * @param {TerrainProvider} [options.terrainProvider=new EllipsoidTerrainProvider] The terrain provider.\n * @param {SkyBox| false} [options.skyBox] The skybox used to render the stars. When <code>undefined</code>, the default stars are used. If set to <code>false</code>, no skyBox, Sun, or Moon will be added.\n * @param {SkyAtmosphere | false} [options.skyAtmosphere] Blue sky, and the glow around the Earth's limb. Set to <code>false</code> to turn it off.\n * @param {SceneMode} [options.sceneMode=SceneMode.SCENE3D] The initial scene mode.\n * @param {Boolean} [options.scene3DOnly=false] When <code>true</code>, each geometry instance will only be rendered in 3D to save GPU memory.\n * @param {Boolean} [options.orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @param {MapProjection} [options.mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes.\n * @param {Globe | false} [options.globe=new Globe(mapProjection.ellipsoid)] The globe to use in the scene. If set to <code>false</code>, no globe will be added.\n * @param {Boolean} [options.useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise.\n * @param {Boolean} [options.useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore <code>window.devicePixelRatio</code>.\n * @param {Number} [options.targetFrameRate] The target frame rate when using the default render loop.\n * @param {Boolean} [options.showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs.\n * @param {Object} [options.contextOptions] Context and WebGL creation properties corresponding to <code>options</code> passed to {@link Scene}.\n * @param {Element|String} [options.creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added\n * to the bottom of the widget itself.\n * @param {Element|String} [options.creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself.\n * @param {Number} [options.terrainExaggeration=1.0] A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid.\n * @param {Boolean} [options.shadows=false] Determines if shadows are cast by light sources.\n * @param {ShadowMode} [options.terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources.\n * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @param {Boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {Number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Widget.html|Cesium Sandcastle Cesium Widget Demo}\n *\n * @example\n * // For each example, include a link to CesiumWidget.css stylesheet in HTML head,\n * // and in the body, include: <div id=\"cesiumContainer\"></div>\n *\n * //Widget with no terrain and default Bing Maps imagery provider.\n * var widget = new Cesium.CesiumWidget('cesiumContainer');\n *\n * //Widget with ion imagery and Cesium World Terrain.\n * var widget = new Cesium.CesiumWidget('cesiumContainer', {\n * imageryProvider : Cesium.createWorldImagery(),\n * terrainProvider : Cesium.createWorldTerrain(),\n * skyBox : new Cesium.SkyBox({\n * sources : {\n * positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg',\n * negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg',\n * positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg',\n * negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg',\n * positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg',\n * negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg'\n * }\n * }),\n * // Show Columbus View map with Web Mercator projection\n * sceneMode : Cesium.SceneMode.COLUMBUS_VIEW,\n * mapProjection : new Cesium.WebMercatorProjection()\n * });\n */\nfunction CesiumWidget(container, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n //Configure the widget DOM elements\n var element = document.createElement(\"div\");\n element.className = \"cesium-widget\";\n container.appendChild(element);\n\n var canvas = document.createElement(\"canvas\");\n var supportsImageRenderingPixelated = FeatureDetection.supportsImageRenderingPixelated();\n this._supportsImageRenderingPixelated = supportsImageRenderingPixelated;\n if (supportsImageRenderingPixelated) {\n canvas.style.imageRendering = FeatureDetection.imageRenderingValue();\n }\n\n canvas.oncontextmenu = function () {\n return false;\n };\n canvas.onselectstart = function () {\n return false;\n };\n\n // Interacting with a canvas does not automatically blur the previously focused element.\n // This leads to unexpected interaction if the last element was an input field.\n // For example, clicking the mouse wheel could lead to the value in the field changing\n // unexpectedly. The solution is to blur whatever has focus as soon as canvas interaction begins.\n function blurActiveElement() {\n if (canvas !== canvas.ownerDocument.activeElement) {\n canvas.ownerDocument.activeElement.blur();\n }\n }\n canvas.addEventListener(\"mousedown\", blurActiveElement);\n canvas.addEventListener(\"pointerdown\", blurActiveElement);\n\n element.appendChild(canvas);\n\n var innerCreditContainer = document.createElement(\"div\");\n innerCreditContainer.className = \"cesium-widget-credits\";\n\n var creditContainer = defined(options.creditContainer)\n ? getElement(options.creditContainer)\n : element;\n creditContainer.appendChild(innerCreditContainer);\n\n var creditViewport = defined(options.creditViewport)\n ? getElement(options.creditViewport)\n : element;\n\n var showRenderLoopErrors = defaultValue(options.showRenderLoopErrors, true);\n\n var useBrowserRecommendedResolution = defaultValue(\n options.useBrowserRecommendedResolution,\n true\n );\n\n this._element = element;\n this._container = container;\n this._canvas = canvas;\n this._canvasClientWidth = 0;\n this._canvasClientHeight = 0;\n this._lastDevicePixelRatio = 0;\n this._creditViewport = creditViewport;\n this._creditContainer = creditContainer;\n this._innerCreditContainer = innerCreditContainer;\n this._canRender = false;\n this._renderLoopRunning = false;\n this._showRenderLoopErrors = showRenderLoopErrors;\n this._resolutionScale = 1.0;\n this._useBrowserRecommendedResolution = useBrowserRecommendedResolution;\n this._forceResize = false;\n this._clock = defined(options.clock) ? options.clock : new Clock();\n\n configureCanvasSize(this);\n\n try {\n var scene = new Scene({\n canvas: canvas,\n contextOptions: options.contextOptions,\n creditContainer: innerCreditContainer,\n creditViewport: creditViewport,\n mapProjection: options.mapProjection,\n orderIndependentTranslucency: options.orderIndependentTranslucency,\n scene3DOnly: defaultValue(options.scene3DOnly, false),\n terrainExaggeration: options.terrainExaggeration,\n shadows: options.shadows,\n mapMode2D: options.mapMode2D,\n requestRenderMode: options.requestRenderMode,\n maximumRenderTimeChange: options.maximumRenderTimeChange,\n });\n this._scene = scene;\n\n scene.camera.constrainedAxis = Cartesian3.UNIT_Z;\n\n configurePixelRatio(this);\n configureCameraFrustum(this);\n\n var ellipsoid = defaultValue(\n scene.mapProjection.ellipsoid,\n Ellipsoid.WGS84\n );\n\n var globe = options.globe;\n if (!defined(globe)) {\n globe = new Globe(ellipsoid);\n }\n if (globe !== false) {\n scene.globe = globe;\n scene.globe.shadows = defaultValue(\n options.terrainShadows,\n ShadowMode.RECEIVE_ONLY\n );\n }\n\n var skyBox = options.skyBox;\n if (!defined(skyBox)) {\n skyBox = new SkyBox({\n sources: {\n positiveX: getDefaultSkyBoxUrl(\"px\"),\n negativeX: getDefaultSkyBoxUrl(\"mx\"),\n positiveY: getDefaultSkyBoxUrl(\"py\"),\n negativeY: getDefaultSkyBoxUrl(\"my\"),\n positiveZ: getDefaultSkyBoxUrl(\"pz\"),\n negativeZ: getDefaultSkyBoxUrl(\"mz\"),\n },\n });\n }\n if (skyBox !== false) {\n scene.skyBox = skyBox;\n scene.sun = new Sun();\n scene.moon = new Moon();\n }\n\n // Blue sky, and the glow around the Earth's limb.\n var skyAtmosphere = options.skyAtmosphere;\n if (!defined(skyAtmosphere)) {\n skyAtmosphere = new SkyAtmosphere(ellipsoid);\n }\n if (skyAtmosphere !== false) {\n scene.skyAtmosphere = skyAtmosphere;\n }\n\n //Set the base imagery layer\n var imageryProvider =\n options.globe === false ? false : options.imageryProvider;\n if (!defined(imageryProvider)) {\n imageryProvider = createWorldImagery();\n }\n\n if (imageryProvider !== false) {\n scene.imageryLayers.addImageryProvider(imageryProvider);\n }\n\n //Set the terrain provider if one is provided.\n if (defined(options.terrainProvider) && options.globe !== false) {\n scene.terrainProvider = options.terrainProvider;\n }\n\n this._screenSpaceEventHandler = new ScreenSpaceEventHandler(canvas);\n\n if (defined(options.sceneMode)) {\n if (options.sceneMode === SceneMode.SCENE2D) {\n this._scene.morphTo2D(0);\n }\n if (options.sceneMode === SceneMode.COLUMBUS_VIEW) {\n this._scene.morphToColumbusView(0);\n }\n }\n\n this._useDefaultRenderLoop = undefined;\n this.useDefaultRenderLoop = defaultValue(\n options.useDefaultRenderLoop,\n true\n );\n\n this._targetFrameRate = undefined;\n this.targetFrameRate = options.targetFrameRate;\n\n var that = this;\n this._onRenderError = function (scene, error) {\n that._useDefaultRenderLoop = false;\n that._renderLoopRunning = false;\n if (that._showRenderLoopErrors) {\n var title =\n \"An error occurred while rendering. Rendering has stopped.\";\n that.showErrorPanel(title, undefined, error);\n }\n };\n scene.renderError.addEventListener(this._onRenderError);\n } catch (error) {\n if (showRenderLoopErrors) {\n var title = \"Error constructing CesiumWidget.\";\n var message =\n 'Visit <a href=\"http://get.webgl.org\">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:';\n this.showErrorPanel(title, message, error);\n }\n throw error;\n }\n}\n\nObject.defineProperties(CesiumWidget.prototype, {\n /**\n * Gets the parent container.\n * @memberof CesiumWidget.prototype\n *\n * @type {Element}\n * @readonly\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the canvas.\n * @memberof CesiumWidget.prototype\n *\n * @type {HTMLCanvasElement}\n * @readonly\n */\n canvas: {\n get: function () {\n return this._canvas;\n },\n },\n\n /**\n * Gets the credit container.\n * @memberof CesiumWidget.prototype\n *\n * @type {Element}\n * @readonly\n */\n creditContainer: {\n get: function () {\n return this._creditContainer;\n },\n },\n\n /**\n * Gets the credit viewport\n * @memberof CesiumWidget.prototype\n *\n * @type {Element}\n * @readonly\n */\n creditViewport: {\n get: function () {\n return this._creditViewport;\n },\n },\n\n /**\n * Gets the scene.\n * @memberof CesiumWidget.prototype\n *\n * @type {Scene}\n * @readonly\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the collection of image layers that will be rendered on the globe.\n * @memberof CesiumWidget.prototype\n *\n * @type {ImageryLayerCollection}\n * @readonly\n */\n imageryLayers: {\n get: function () {\n return this._scene.imageryLayers;\n },\n },\n\n /**\n * The terrain provider providing surface geometry for the globe.\n * @memberof CesiumWidget.prototype\n *\n * @type {TerrainProvider}\n */\n terrainProvider: {\n get: function () {\n return this._scene.terrainProvider;\n },\n set: function (terrainProvider) {\n this._scene.terrainProvider = terrainProvider;\n },\n },\n\n /**\n * Gets the camera.\n * @memberof CesiumWidget.prototype\n *\n * @type {Camera}\n * @readonly\n */\n camera: {\n get: function () {\n return this._scene.camera;\n },\n },\n\n /**\n * Gets the clock.\n * @memberof CesiumWidget.prototype\n *\n * @type {Clock}\n * @readonly\n */\n clock: {\n get: function () {\n return this._clock;\n },\n },\n\n /**\n * Gets the screen space event handler.\n * @memberof CesiumWidget.prototype\n *\n * @type {ScreenSpaceEventHandler}\n * @readonly\n */\n screenSpaceEventHandler: {\n get: function () {\n return this._screenSpaceEventHandler;\n },\n },\n\n /**\n * Gets or sets the target frame rate of the widget when <code>useDefaultRenderLoop</code>\n * is true. If undefined, the browser's {@link requestAnimationFrame} implementation\n * determines the frame rate. If defined, this value must be greater than 0. A value higher\n * than the underlying requestAnimationFrame implementation will have no effect.\n * @memberof CesiumWidget.prototype\n *\n * @type {Number}\n */\n targetFrameRate: {\n get: function () {\n return this._targetFrameRate;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (value <= 0) {\n throw new DeveloperError(\n \"targetFrameRate must be greater than 0, or undefined.\"\n );\n }\n //>>includeEnd('debug');\n this._targetFrameRate = value;\n },\n },\n\n /**\n * Gets or sets whether or not this widget should control the render loop.\n * If set to true the widget will use {@link requestAnimationFrame} to\n * perform rendering and resizing of the widget, as well as drive the\n * simulation clock. If set to false, you must manually call the\n * <code>resize</code>, <code>render</code> methods as part of a custom\n * render loop. If an error occurs during rendering, {@link Scene}'s\n * <code>renderError</code> event will be raised and this property\n * will be set to false. It must be set back to true to continue rendering\n * after the error.\n * @memberof CesiumWidget.prototype\n *\n * @type {Boolean}\n */\n useDefaultRenderLoop: {\n get: function () {\n return this._useDefaultRenderLoop;\n },\n set: function (value) {\n if (this._useDefaultRenderLoop !== value) {\n this._useDefaultRenderLoop = value;\n if (value && !this._renderLoopRunning) {\n startRenderLoop(this);\n }\n }\n },\n },\n\n /**\n * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve\n * performance on less powerful devices while values greater than 1.0 will render at a higher\n * resolution and then scale down, resulting in improved visual fidelity.\n * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5\n * will cause the scene to be rendered at 320x240 and then scaled up while setting\n * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down.\n * @memberof CesiumWidget.prototype\n *\n * @type {Number}\n * @default 1.0\n */\n resolutionScale: {\n get: function () {\n return this._resolutionScale;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (value <= 0) {\n throw new DeveloperError(\"resolutionScale must be greater than 0.\");\n }\n //>>includeEnd('debug');\n if (this._resolutionScale !== value) {\n this._resolutionScale = value;\n this._forceResize = true;\n }\n },\n },\n\n /**\n * Boolean flag indicating if the browser's recommended resolution is used.\n * If true, the browser's device pixel ratio is ignored and 1.0 is used instead,\n * effectively rendering based on CSS pixels instead of device pixels. This can improve\n * performance on less powerful devices that have high pixel density. When false, rendering\n * will be in device pixels. {@link CesiumWidget#resolutionScale} will still take effect whether\n * this flag is true or false.\n * @memberof CesiumWidget.prototype\n *\n * @type {Boolean}\n * @default true\n */\n useBrowserRecommendedResolution: {\n get: function () {\n return this._useBrowserRecommendedResolution;\n },\n set: function (value) {\n if (this._useBrowserRecommendedResolution !== value) {\n this._useBrowserRecommendedResolution = value;\n this._forceResize = true;\n }\n },\n },\n});\n\n/**\n * Show an error panel to the user containing a title and a longer error message,\n * which can be dismissed using an OK button. This panel is displayed automatically\n * when a render loop error occurs, if showRenderLoopErrors was not false when the\n * widget was constructed.\n *\n * @param {String} title The title to be displayed on the error panel. This string is interpreted as text.\n * @param {String} [message] A helpful, user-facing message to display prior to the detailed error information. This string is interpreted as HTML.\n * @param {String} [error] The error to be displayed on the error panel. This string is formatted using {@link formatError} and then displayed as text.\n */\nCesiumWidget.prototype.showErrorPanel = function (title, message, error) {\n var element = this._element;\n var overlay = document.createElement(\"div\");\n overlay.className = \"cesium-widget-errorPanel\";\n\n var content = document.createElement(\"div\");\n content.className = \"cesium-widget-errorPanel-content\";\n overlay.appendChild(content);\n\n var errorHeader = document.createElement(\"div\");\n errorHeader.className = \"cesium-widget-errorPanel-header\";\n errorHeader.appendChild(document.createTextNode(title));\n content.appendChild(errorHeader);\n\n var errorPanelScroller = document.createElement(\"div\");\n errorPanelScroller.className = \"cesium-widget-errorPanel-scroll\";\n content.appendChild(errorPanelScroller);\n function resizeCallback() {\n errorPanelScroller.style.maxHeight =\n Math.max(Math.round(element.clientHeight * 0.9 - 100), 30) + \"px\";\n }\n resizeCallback();\n if (defined(window.addEventListener)) {\n window.addEventListener(\"resize\", resizeCallback, false);\n }\n\n var hasMessage = defined(message);\n var hasError = defined(error);\n\n if (hasMessage || hasError) {\n var errorMessage = document.createElement(\"div\");\n errorMessage.className = \"cesium-widget-errorPanel-message\";\n errorPanelScroller.appendChild(errorMessage);\n\n if (hasError) {\n var errorDetails = formatError(error);\n if (!hasMessage) {\n if (typeof error === \"string\") {\n error = new Error(error);\n }\n\n message = formatError({\n name: error.name,\n message: error.message,\n });\n errorDetails = error.stack;\n }\n\n //IE8 does not have a console object unless the dev tools are open.\n if (typeof console !== \"undefined\") {\n console.error(title + \"\\n\" + message + \"\\n\" + errorDetails);\n }\n\n var errorMessageDetails = document.createElement(\"div\");\n errorMessageDetails.className =\n \"cesium-widget-errorPanel-message-details collapsed\";\n\n var moreDetails = document.createElement(\"span\");\n moreDetails.className = \"cesium-widget-errorPanel-more-details\";\n moreDetails.appendChild(document.createTextNode(\"See more...\"));\n errorMessageDetails.appendChild(moreDetails);\n\n errorMessageDetails.onclick = function (e) {\n errorMessageDetails.removeChild(moreDetails);\n errorMessageDetails.appendChild(document.createTextNode(errorDetails));\n errorMessageDetails.className =\n \"cesium-widget-errorPanel-message-details\";\n content.className = \"cesium-widget-errorPanel-content expanded\";\n errorMessageDetails.onclick = undefined;\n };\n\n errorPanelScroller.appendChild(errorMessageDetails);\n }\n\n errorMessage.innerHTML = \"<p>\" + message + \"</p>\";\n }\n\n var buttonPanel = document.createElement(\"div\");\n buttonPanel.className = \"cesium-widget-errorPanel-buttonPanel\";\n content.appendChild(buttonPanel);\n\n var okButton = document.createElement(\"button\");\n okButton.setAttribute(\"type\", \"button\");\n okButton.className = \"cesium-button\";\n okButton.appendChild(document.createTextNode(\"OK\"));\n okButton.onclick = function () {\n if (defined(resizeCallback) && defined(window.removeEventListener)) {\n window.removeEventListener(\"resize\", resizeCallback, false);\n }\n element.removeChild(overlay);\n };\n\n buttonPanel.appendChild(okButton);\n\n element.appendChild(overlay);\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumWidget.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nCesiumWidget.prototype.destroy = function () {\n if (defined(this._scene)) {\n this._scene.renderError.removeEventListener(this._onRenderError);\n this._scene = this._scene.destroy();\n }\n this._container.removeChild(this._element);\n this._creditContainer.removeChild(this._innerCreditContainer);\n destroyObject(this);\n};\n\n/**\n * Updates the canvas size, camera aspect ratio, and viewport size.\n * This function is called automatically as needed unless\n * <code>useDefaultRenderLoop</code> is set to false.\n */\nCesiumWidget.prototype.resize = function () {\n var canvas = this._canvas;\n if (\n !this._forceResize &&\n this._canvasClientWidth === canvas.clientWidth &&\n this._canvasClientHeight === canvas.clientHeight &&\n this._lastDevicePixelRatio === window.devicePixelRatio\n ) {\n return;\n }\n this._forceResize = false;\n\n configureCanvasSize(this);\n configureCameraFrustum(this);\n\n this._scene.requestRender();\n};\n\n/**\n * Renders the scene. This function is called automatically\n * unless <code>useDefaultRenderLoop</code> is set to false;\n */\nCesiumWidget.prototype.render = function () {\n if (this._canRender) {\n this._scene.initializeFrame();\n var currentTime = this._clock.tick();\n this._scene.render(currentTime);\n } else {\n this._clock.tick();\n }\n};\nexport default CesiumWidget;\n","import defined from \"../../Core/defined.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Fullscreen from \"../../Core/Fullscreen.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\nimport getElement from \"../getElement.js\";\n\n/**\n * The view model for {@link FullscreenButton}.\n * @alias FullscreenButtonViewModel\n * @constructor\n *\n * @param {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode.\n * @param {Element|String} [container] The DOM element or ID that will contain the widget.\n */\nfunction FullscreenButtonViewModel(fullscreenElement, container) {\n if (!defined(container)) {\n container = document.body;\n }\n\n container = getElement(container);\n\n var that = this;\n\n var tmpIsFullscreen = knockout.observable(Fullscreen.fullscreen);\n var tmpIsEnabled = knockout.observable(Fullscreen.enabled);\n var ownerDocument = container.ownerDocument;\n\n /**\n * Gets whether or not fullscreen mode is active. This property is observable.\n *\n * @type {Boolean}\n */\n this.isFullscreen = undefined;\n knockout.defineProperty(this, \"isFullscreen\", {\n get: function () {\n return tmpIsFullscreen();\n },\n });\n\n /**\n * Gets or sets whether or not fullscreen functionality should be enabled. This property is observable.\n *\n * @type {Boolean}\n * @see Fullscreen.enabled\n */\n this.isFullscreenEnabled = undefined;\n knockout.defineProperty(this, \"isFullscreenEnabled\", {\n get: function () {\n return tmpIsEnabled();\n },\n set: function (value) {\n tmpIsEnabled(value && Fullscreen.enabled);\n },\n });\n\n /**\n * Gets the tooltip. This property is observable.\n *\n * @type {String}\n */\n this.tooltip = undefined;\n knockout.defineProperty(this, \"tooltip\", function () {\n if (!this.isFullscreenEnabled) {\n return \"Full screen unavailable\";\n }\n return tmpIsFullscreen() ? \"Exit full screen\" : \"Full screen\";\n });\n\n this._command = createCommand(function () {\n if (Fullscreen.fullscreen) {\n Fullscreen.exitFullscreen();\n } else {\n Fullscreen.requestFullscreen(that._fullscreenElement);\n }\n }, knockout.getObservable(this, \"isFullscreenEnabled\"));\n\n this._fullscreenElement = defaultValue(\n getElement(fullscreenElement),\n ownerDocument.body\n );\n\n this._callback = function () {\n tmpIsFullscreen(Fullscreen.fullscreen);\n };\n ownerDocument.addEventListener(Fullscreen.changeEventName, this._callback);\n}\n\nObject.defineProperties(FullscreenButtonViewModel.prototype, {\n /**\n * Gets or sets the HTML element to place into fullscreen mode when the\n * corresponding button is pressed.\n * @memberof FullscreenButtonViewModel.prototype\n *\n * @type {Element}\n */\n fullscreenElement: {\n //TODO:@exception {DeveloperError} value must be a valid HTML Element.\n get: function () {\n return this._fullscreenElement;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!(value instanceof Element)) {\n throw new DeveloperError(\"value must be a valid Element.\");\n }\n //>>includeEnd('debug');\n\n this._fullscreenElement = value;\n },\n },\n\n /**\n * Gets the Command to toggle fullscreen mode.\n * @memberof FullscreenButtonViewModel.prototype\n *\n * @type {Command}\n */\n command: {\n get: function () {\n return this._command;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nFullscreenButtonViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the view model. Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nFullscreenButtonViewModel.prototype.destroy = function () {\n document.removeEventListener(Fullscreen.changeEventName, this._callback);\n destroyObject(this);\n};\nexport default FullscreenButtonViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport FullscreenButtonViewModel from \"./FullscreenButtonViewModel.js\";\n\nvar enterFullScreenPath =\n \"M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z\";\nvar exitFullScreenPath =\n \"M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z\";\n\n/**\n * A single button widget for toggling fullscreen mode.\n *\n * @alias FullscreenButton\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @see Fullscreen\n */\nfunction FullscreenButton(container, fullscreenElement) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new FullscreenButtonViewModel(fullscreenElement, container);\n\n viewModel._exitFullScreenPath = exitFullScreenPath;\n viewModel._enterFullScreenPath = enterFullScreenPath;\n\n var element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = \"cesium-button cesium-fullscreenButton\";\n element.setAttribute(\n \"data-bind\",\n \"\\\nattr: { title: tooltip },\\\nclick: command,\\\nenable: isFullscreenEnabled,\\\ncesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }\"\n );\n\n container.appendChild(element);\n\n knockout.applyBindings(viewModel, element);\n\n this._container = container;\n this._viewModel = viewModel;\n this._element = element;\n}\n\nObject.defineProperties(FullscreenButton.prototype, {\n /**\n * Gets the parent container.\n * @memberof FullscreenButton.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof FullscreenButton.prototype\n *\n * @type {FullscreenButtonViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nFullscreenButton.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nFullscreenButton.prototype.destroy = function () {\n this._viewModel.destroy();\n\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n\n return destroyObject(this);\n};\nexport default FullscreenButton;\n","import CartographicGeocoderService from \"../../Core/CartographicGeocoderService.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Event from \"../../Core/Event.js\";\nimport GeocodeType from \"../../Core/GeocodeType.js\";\nimport IonGeocoderService from \"../../Core/IonGeocoderService.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Rectangle from \"../../Core/Rectangle.js\";\nimport sampleTerrainMostDetailed from \"../../Core/sampleTerrainMostDetailed.js\";\nimport computeFlyToLocationForRectangle from \"../../Scene/computeFlyToLocationForRectangle.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport when from \"../../ThirdParty/when.js\";\nimport createCommand from \"../createCommand.js\";\nimport getElement from \"../getElement.js\";\n\n// The height we use if geocoding to a specific point instead of an rectangle.\nvar DEFAULT_HEIGHT = 1000;\n\n/**\n * The view model for the {@link Geocoder} widget.\n * @alias GeocoderViewModel\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Scene} options.scene The Scene instance to use.\n * @param {GeocoderService[]} [options.geocoderServices] Geocoder services to use for geocoding queries.\n * If more than one are supplied, suggestions will be gathered for the geocoders that support it,\n * and if no suggestion is selected the result from the first geocoder service wil be used.\n * @param {Number} [options.flightDuration] The duration of the camera flight to an entered location, in seconds.\n * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination.\n */\nfunction GeocoderViewModel(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.scene)) {\n throw new DeveloperError(\"options.scene is required.\");\n }\n //>>includeEnd('debug');\n\n if (defined(options.geocoderServices)) {\n this._geocoderServices = options.geocoderServices;\n } else {\n this._geocoderServices = [\n new CartographicGeocoderService(),\n new IonGeocoderService({ scene: options.scene }),\n ];\n }\n\n this._viewContainer = options.container;\n this._scene = options.scene;\n this._flightDuration = options.flightDuration;\n this._searchText = \"\";\n this._isSearchInProgress = false;\n this._geocodePromise = undefined;\n this._complete = new Event();\n this._suggestions = [];\n this._selectedSuggestion = undefined;\n this._showSuggestions = true;\n\n this._handleArrowDown = handleArrowDown;\n this._handleArrowUp = handleArrowUp;\n\n var that = this;\n\n this._suggestionsVisible = knockout.pureComputed(function () {\n var suggestions = knockout.getObservable(that, \"_suggestions\");\n var suggestionsNotEmpty = suggestions().length > 0;\n var showSuggestions = knockout.getObservable(that, \"_showSuggestions\")();\n return suggestionsNotEmpty && showSuggestions;\n });\n\n this._searchCommand = createCommand(function (geocodeType) {\n geocodeType = defaultValue(geocodeType, GeocodeType.SEARCH);\n that._focusTextbox = false;\n if (defined(that._selectedSuggestion)) {\n that.activateSuggestion(that._selectedSuggestion);\n return false;\n }\n that.hideSuggestions();\n if (that.isSearchInProgress) {\n cancelGeocode(that);\n } else {\n geocode(that, that._geocoderServices, geocodeType);\n }\n });\n\n this.deselectSuggestion = function () {\n that._selectedSuggestion = undefined;\n };\n\n this.handleKeyDown = function (data, event) {\n var downKey =\n event.key === \"ArrowDown\" || event.key === \"Down\" || event.keyCode === 40;\n var upKey =\n event.key === \"ArrowUp\" || event.key === \"Up\" || event.keyCode === 38;\n if (downKey || upKey) {\n event.preventDefault();\n }\n\n return true;\n };\n\n this.handleKeyUp = function (data, event) {\n var downKey =\n event.key === \"ArrowDown\" || event.key === \"Down\" || event.keyCode === 40;\n var upKey =\n event.key === \"ArrowUp\" || event.key === \"Up\" || event.keyCode === 38;\n var enterKey = event.key === \"Enter\" || event.keyCode === 13;\n if (upKey) {\n handleArrowUp(that);\n } else if (downKey) {\n handleArrowDown(that);\n } else if (enterKey) {\n that._searchCommand();\n }\n return true;\n };\n\n this.activateSuggestion = function (data) {\n that.hideSuggestions();\n that._searchText = data.displayName;\n var destination = data.destination;\n clearSuggestions(that);\n that.destinationFound(that, destination);\n };\n\n this.hideSuggestions = function () {\n that._showSuggestions = false;\n that._selectedSuggestion = undefined;\n };\n\n this.showSuggestions = function () {\n that._showSuggestions = true;\n };\n\n this.handleMouseover = function (data, event) {\n if (data !== that._selectedSuggestion) {\n that._selectedSuggestion = data;\n }\n };\n\n /**\n * Gets or sets a value indicating if this instance should always show its text input field.\n *\n * @type {Boolean}\n * @default false\n */\n this.keepExpanded = false;\n\n /**\n * True if the geocoder should query as the user types to autocomplete\n * @type {Boolean}\n * @default true\n */\n this.autoComplete = defaultValue(options.autocomplete, true);\n\n /**\n * Gets and sets the command called when a geocode destination is found\n * @type {Geocoder.DestinationFoundFunction}\n */\n this.destinationFound = defaultValue(\n options.destinationFound,\n GeocoderViewModel.flyToDestination\n );\n\n this._focusTextbox = false;\n\n knockout.track(this, [\n \"_searchText\",\n \"_isSearchInProgress\",\n \"keepExpanded\",\n \"_suggestions\",\n \"_selectedSuggestion\",\n \"_showSuggestions\",\n \"_focusTextbox\",\n ]);\n\n var searchTextObservable = knockout.getObservable(this, \"_searchText\");\n searchTextObservable.extend({ rateLimit: { timeout: 500 } });\n this._suggestionSubscription = searchTextObservable.subscribe(function () {\n GeocoderViewModel._updateSearchSuggestions(that);\n });\n /**\n * Gets a value indicating whether a search is currently in progress. This property is observable.\n *\n * @type {Boolean}\n */\n this.isSearchInProgress = undefined;\n knockout.defineProperty(this, \"isSearchInProgress\", {\n get: function () {\n return this._isSearchInProgress;\n },\n });\n\n /**\n * Gets or sets the text to search for. The text can be an address, or longitude, latitude,\n * and optional height, where longitude and latitude are in degrees and height is in meters.\n *\n * @type {String}\n */\n this.searchText = undefined;\n knockout.defineProperty(this, \"searchText\", {\n get: function () {\n if (this.isSearchInProgress) {\n return \"Searching...\";\n }\n\n return this._searchText;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (typeof value !== \"string\") {\n throw new DeveloperError(\"value must be a valid string.\");\n }\n //>>includeEnd('debug');\n this._searchText = value;\n },\n });\n\n /**\n * Gets or sets the the duration of the camera flight in seconds.\n * A value of zero causes the camera to instantly switch to the geocoding location.\n * The duration will be computed based on the distance when undefined.\n *\n * @type {Number|undefined}\n * @default undefined\n */\n this.flightDuration = undefined;\n knockout.defineProperty(this, \"flightDuration\", {\n get: function () {\n return this._flightDuration;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value < 0) {\n throw new DeveloperError(\"value must be positive.\");\n }\n //>>includeEnd('debug');\n\n this._flightDuration = value;\n },\n });\n}\n\nObject.defineProperties(GeocoderViewModel.prototype, {\n /**\n * Gets the event triggered on flight completion.\n * @memberof GeocoderViewModel.prototype\n *\n * @type {Event}\n */\n complete: {\n get: function () {\n return this._complete;\n },\n },\n\n /**\n * Gets the scene to control.\n * @memberof GeocoderViewModel.prototype\n *\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the Command that is executed when the button is clicked.\n * @memberof GeocoderViewModel.prototype\n *\n * @type {Command}\n */\n search: {\n get: function () {\n return this._searchCommand;\n },\n },\n\n /**\n * Gets the currently selected geocoder search suggestion\n * @memberof GeocoderViewModel.prototype\n *\n * @type {Object}\n */\n selectedSuggestion: {\n get: function () {\n return this._selectedSuggestion;\n },\n },\n\n /**\n * Gets the list of geocoder search suggestions\n * @memberof GeocoderViewModel.prototype\n *\n * @type {Object[]}\n */\n suggestions: {\n get: function () {\n return this._suggestions;\n },\n },\n});\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nGeocoderViewModel.prototype.destroy = function () {\n this._suggestionSubscription.dispose();\n};\n\nfunction handleArrowUp(viewModel) {\n if (viewModel._suggestions.length === 0) {\n return;\n }\n var next;\n var currentIndex = viewModel._suggestions.indexOf(\n viewModel._selectedSuggestion\n );\n if (currentIndex === -1 || currentIndex === 0) {\n viewModel._selectedSuggestion = undefined;\n return;\n }\n next = currentIndex - 1;\n viewModel._selectedSuggestion = viewModel._suggestions[next];\n GeocoderViewModel._adjustSuggestionsScroll(viewModel, next);\n}\n\nfunction handleArrowDown(viewModel) {\n if (viewModel._suggestions.length === 0) {\n return;\n }\n var numberOfSuggestions = viewModel._suggestions.length;\n var currentIndex = viewModel._suggestions.indexOf(\n viewModel._selectedSuggestion\n );\n var next = (currentIndex + 1) % numberOfSuggestions;\n viewModel._selectedSuggestion = viewModel._suggestions[next];\n\n GeocoderViewModel._adjustSuggestionsScroll(viewModel, next);\n}\n\nfunction computeFlyToLocationForCartographic(cartographic, terrainProvider) {\n var availability = defined(terrainProvider)\n ? terrainProvider.availability\n : undefined;\n\n if (!defined(availability)) {\n cartographic.height += DEFAULT_HEIGHT;\n return when.resolve(cartographic);\n }\n\n return sampleTerrainMostDetailed(terrainProvider, [cartographic]).then(\n function (positionOnTerrain) {\n cartographic = positionOnTerrain[0];\n cartographic.height += DEFAULT_HEIGHT;\n return cartographic;\n }\n );\n}\n\nfunction flyToDestination(viewModel, destination) {\n var scene = viewModel._scene;\n var mapProjection = scene.mapProjection;\n var ellipsoid = mapProjection.ellipsoid;\n\n var camera = scene.camera;\n var terrainProvider = scene.terrainProvider;\n var finalDestination = destination;\n\n var promise;\n if (destination instanceof Rectangle) {\n // Some geocoders return a Rectangle of zero width/height, treat it like a point instead.\n if (\n CesiumMath.equalsEpsilon(\n destination.south,\n destination.north,\n CesiumMath.EPSILON7\n ) &&\n CesiumMath.equalsEpsilon(\n destination.east,\n destination.west,\n CesiumMath.EPSILON7\n )\n ) {\n // destination is now a Cartographic\n destination = Rectangle.center(destination);\n } else {\n promise = computeFlyToLocationForRectangle(destination, scene);\n }\n } else {\n // destination is a Cartesian3\n destination = ellipsoid.cartesianToCartographic(destination);\n }\n\n if (!defined(promise)) {\n promise = computeFlyToLocationForCartographic(destination, terrainProvider);\n }\n\n promise\n .then(function (result) {\n finalDestination = ellipsoid.cartographicToCartesian(result);\n })\n .always(function () {\n // Whether terrain querying succeeded or not, fly to the destination.\n camera.flyTo({\n destination: finalDestination,\n complete: function () {\n viewModel._complete.raiseEvent();\n },\n duration: viewModel._flightDuration,\n endTransform: Matrix4.IDENTITY,\n });\n });\n}\n\nfunction chainPromise(promise, geocoderService, query, geocodeType) {\n return promise.then(function (result) {\n if (\n defined(result) &&\n result.state === \"fulfilled\" &&\n result.value.length > 0\n ) {\n return result;\n }\n var nextPromise = geocoderService\n .geocode(query, geocodeType)\n .then(function (result) {\n return { state: \"fulfilled\", value: result };\n })\n .otherwise(function (err) {\n return { state: \"rejected\", reason: err };\n });\n\n return nextPromise;\n });\n}\n\nfunction geocode(viewModel, geocoderServices, geocodeType) {\n var query = viewModel._searchText;\n\n if (hasOnlyWhitespace(query)) {\n viewModel.showSuggestions();\n return;\n }\n\n viewModel._isSearchInProgress = true;\n\n var promise = when.resolve();\n for (var i = 0; i < geocoderServices.length; i++) {\n promise = chainPromise(promise, geocoderServices[i], query, geocodeType);\n }\n\n viewModel._geocodePromise = promise;\n promise.then(function (result) {\n if (promise.cancel) {\n return;\n }\n viewModel._isSearchInProgress = false;\n\n var geocoderResults = result.value;\n if (\n result.state === \"fulfilled\" &&\n defined(geocoderResults) &&\n geocoderResults.length > 0\n ) {\n viewModel._searchText = geocoderResults[0].displayName;\n viewModel.destinationFound(viewModel, geocoderResults[0].destination);\n return;\n }\n viewModel._searchText = query + \" (not found)\";\n });\n}\n\nfunction adjustSuggestionsScroll(viewModel, focusedItemIndex) {\n var container = getElement(viewModel._viewContainer);\n var searchResults = container.getElementsByClassName(\"search-results\")[0];\n var listItems = container.getElementsByTagName(\"li\");\n var element = listItems[focusedItemIndex];\n\n if (focusedItemIndex === 0) {\n searchResults.scrollTop = 0;\n return;\n }\n\n var offsetTop = element.offsetTop;\n if (offsetTop + element.clientHeight > searchResults.clientHeight) {\n searchResults.scrollTop = offsetTop + element.clientHeight;\n } else if (offsetTop < searchResults.scrollTop) {\n searchResults.scrollTop = offsetTop;\n }\n}\n\nfunction cancelGeocode(viewModel) {\n viewModel._isSearchInProgress = false;\n if (defined(viewModel._geocodePromise)) {\n viewModel._geocodePromise.cancel = true;\n viewModel._geocodePromise = undefined;\n }\n}\n\nfunction hasOnlyWhitespace(string) {\n return /^\\s*$/.test(string);\n}\n\nfunction clearSuggestions(viewModel) {\n knockout.getObservable(viewModel, \"_suggestions\").removeAll();\n}\n\nfunction updateSearchSuggestions(viewModel) {\n if (!viewModel.autoComplete) {\n return;\n }\n\n var query = viewModel._searchText;\n\n clearSuggestions(viewModel);\n if (hasOnlyWhitespace(query)) {\n return;\n }\n\n var promise = when.resolve([]);\n viewModel._geocoderServices.forEach(function (service) {\n promise = promise.then(function (results) {\n if (results.length >= 5) {\n return results;\n }\n return service\n .geocode(query, GeocodeType.AUTOCOMPLETE)\n .then(function (newResults) {\n results = results.concat(newResults);\n return results;\n });\n });\n });\n promise.then(function (results) {\n var suggestions = viewModel._suggestions;\n for (var i = 0; i < results.length; i++) {\n suggestions.push(results[i]);\n }\n });\n}\n\n/**\n * A function to fly to the destination found by a successful geocode.\n * @type {Geocoder.DestinationFoundFunction}\n */\nGeocoderViewModel.flyToDestination = flyToDestination;\n\n//exposed for testing\nGeocoderViewModel._updateSearchSuggestions = updateSearchSuggestions;\nGeocoderViewModel._adjustSuggestionsScroll = adjustSuggestionsScroll;\nexport default GeocoderViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport GeocoderViewModel from \"./GeocoderViewModel.js\";\n\nvar startSearchPath =\n \"M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z\";\nvar stopSearchPath =\n \"M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z\";\n\n/**\n * A widget for finding addresses and landmarks, and flying the camera to them. Geocoding is\n * performed using {@link https://cesium.com/cesium-ion/|Cesium ion}.\n *\n * @alias Geocoder\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Element|String} options.container The DOM element or ID that will contain the widget.\n * @param {Scene} options.scene The Scene instance to use.\n * @param {GeocoderService[]} [options.geocoderServices] The geocoder services to be used\n * @param {Boolean} [options.autoComplete = true] True if the geocoder should query as the user types to autocomplete\n * @param {Number} [options.flightDuration=1.5] The duration of the camera flight to an entered location, in seconds.\n * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode. If not supplied, the default behavior is to fly the camera to the result destination.\n */\nfunction Geocoder(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.container)) {\n throw new DeveloperError(\"options.container is required.\");\n }\n if (!defined(options.scene)) {\n throw new DeveloperError(\"options.scene is required.\");\n }\n //>>includeEnd('debug');\n\n var container = getElement(options.container);\n var viewModel = new GeocoderViewModel(options);\n\n viewModel._startSearchPath = startSearchPath;\n viewModel._stopSearchPath = stopSearchPath;\n\n var form = document.createElement(\"form\");\n form.setAttribute(\"data-bind\", \"submit: search\");\n\n var textBox = document.createElement(\"input\");\n textBox.type = \"search\";\n textBox.className = \"cesium-geocoder-input\";\n textBox.setAttribute(\"placeholder\", \"Enter an address or landmark...\");\n textBox.setAttribute(\n \"data-bind\",\n '\\\ntextInput: searchText,\\\ndisable: isSearchInProgress,\\\nevent: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },\\\ncss: { \"cesium-geocoder-input-wide\" : keepExpanded || searchText.length > 0 },\\\nhasFocus: _focusTextbox'\n );\n\n this._onTextBoxFocus = function () {\n // as of 2016-10-19, setTimeout is required to ensure that the\n // text is focused on Safari 10\n setTimeout(function () {\n textBox.select();\n }, 0);\n };\n\n textBox.addEventListener(\"focus\", this._onTextBoxFocus, false);\n form.appendChild(textBox);\n this._textBox = textBox;\n\n var searchButton = document.createElement(\"span\");\n searchButton.className = \"cesium-geocoder-searchButton\";\n searchButton.setAttribute(\n \"data-bind\",\n \"\\\nclick: search,\\\ncesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }\"\n );\n form.appendChild(searchButton);\n\n container.appendChild(form);\n\n var searchSuggestionsContainer = document.createElement(\"div\");\n searchSuggestionsContainer.className = \"search-results\";\n searchSuggestionsContainer.setAttribute(\n \"data-bind\",\n \"visible: _suggestionsVisible\"\n );\n\n var suggestionsList = document.createElement(\"ul\");\n suggestionsList.setAttribute(\"data-bind\", \"foreach: _suggestions\");\n var suggestions = document.createElement(\"li\");\n suggestionsList.appendChild(suggestions);\n suggestions.setAttribute(\n \"data-bind\",\n \"text: $data.displayName, \\\nclick: $parent.activateSuggestion, \\\nevent: { mouseover: $parent.handleMouseover}, \\\ncss: { active: $data === $parent._selectedSuggestion }\"\n );\n\n searchSuggestionsContainer.appendChild(suggestionsList);\n container.appendChild(searchSuggestionsContainer);\n\n knockout.applyBindings(viewModel, form);\n knockout.applyBindings(viewModel, searchSuggestionsContainer);\n\n this._container = container;\n this._searchSuggestionsContainer = searchSuggestionsContainer;\n this._viewModel = viewModel;\n this._form = form;\n\n this._onInputBegin = function (e) {\n // e.target will not be correct if we are inside of the Shadow DOM\n // and contains will always fail. To retrieve the correct target,\n // we need to access the first element of the composedPath.\n // This allows us to use shadow DOM if it exists and fall\n // back to legacy behavior if its not being used.\n\n var target = e.target;\n if (typeof e.composedPath === \"function\") {\n target = e.composedPath()[0];\n }\n\n if (!container.contains(target)) {\n viewModel._focusTextbox = false;\n viewModel.hideSuggestions();\n }\n };\n\n this._onInputEnd = function (e) {\n viewModel._focusTextbox = true;\n viewModel.showSuggestions();\n };\n\n //We subscribe to both begin and end events in order to give the text box\n //focus no matter where on the widget is clicked.\n\n if (FeatureDetection.supportsPointerEvents()) {\n document.addEventListener(\"pointerdown\", this._onInputBegin, true);\n container.addEventListener(\"pointerup\", this._onInputEnd, true);\n container.addEventListener(\"pointercancel\", this._onInputEnd, true);\n } else {\n document.addEventListener(\"mousedown\", this._onInputBegin, true);\n container.addEventListener(\"mouseup\", this._onInputEnd, true);\n document.addEventListener(\"touchstart\", this._onInputBegin, true);\n container.addEventListener(\"touchend\", this._onInputEnd, true);\n container.addEventListener(\"touchcancel\", this._onInputEnd, true);\n }\n}\n\nObject.defineProperties(Geocoder.prototype, {\n /**\n * Gets the parent container.\n * @memberof Geocoder.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the parent container.\n * @memberof Geocoder.prototype\n *\n * @type {Element}\n */\n searchSuggestionsContainer: {\n get: function () {\n return this._searchSuggestionsContainer;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof Geocoder.prototype\n *\n * @type {GeocoderViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nGeocoder.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nGeocoder.prototype.destroy = function () {\n var container = this._container;\n if (FeatureDetection.supportsPointerEvents()) {\n document.removeEventListener(\"pointerdown\", this._onInputBegin, true);\n container.removeEventListener(\"pointerup\", this._onInputEnd, true);\n } else {\n document.removeEventListener(\"mousedown\", this._onInputBegin, true);\n container.removeEventListener(\"mouseup\", this._onInputEnd, true);\n document.removeEventListener(\"touchstart\", this._onInputBegin, true);\n container.removeEventListener(\"touchend\", this._onInputEnd, true);\n }\n this._viewModel.destroy();\n knockout.cleanNode(this._form);\n knockout.cleanNode(this._searchSuggestionsContainer);\n container.removeChild(this._form);\n container.removeChild(this._searchSuggestionsContainer);\n this._textBox.removeEventListener(\"focus\", this._onTextBoxFocus, false);\n\n return destroyObject(this);\n};\n\n/**\n * A function that handles the result of a successful geocode.\n * @callback Geocoder.DestinationFoundFunction\n * @param {GeocoderViewModel} viewModel The view model.\n * @param {Cartesian3|Rectangle} destination The destination result of the geocode.\n */\nexport default Geocoder;\n","import defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link HomeButton}.\n * @alias HomeButtonViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {Number} [duration] The duration of the camera flight in seconds.\n */\nfunction HomeButtonViewModel(scene, duration) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = scene;\n this._duration = duration;\n\n var that = this;\n this._command = createCommand(function () {\n that._scene.camera.flyHome(that._duration);\n });\n\n /**\n * Gets or sets the tooltip. This property is observable.\n *\n * @type {String}\n */\n this.tooltip = \"View Home\";\n\n knockout.track(this, [\"tooltip\"]);\n}\n\nObject.defineProperties(HomeButtonViewModel.prototype, {\n /**\n * Gets the scene to control.\n * @memberof HomeButtonViewModel.prototype\n *\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the Command that is executed when the button is clicked.\n * @memberof HomeButtonViewModel.prototype\n *\n * @type {Command}\n */\n command: {\n get: function () {\n return this._command;\n },\n },\n\n /**\n * Gets or sets the the duration of the camera flight in seconds.\n * A value of zero causes the camera to instantly switch to home view.\n * The duration will be computed based on the distance when undefined.\n * @memberof HomeButtonViewModel.prototype\n *\n * @type {Number|undefined}\n */\n duration: {\n get: function () {\n return this._duration;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (defined(value) && value < 0) {\n throw new DeveloperError(\"value must be positive.\");\n }\n //>>includeEnd('debug');\n\n this._duration = value;\n },\n },\n});\nexport default HomeButtonViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport HomeButtonViewModel from \"./HomeButtonViewModel.js\";\n\n/**\n * A single button widget for returning to the default camera view of the current scene.\n *\n * @alias HomeButton\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n * @param {Number} [duration] The time, in seconds, it takes to complete the camera flight home.\n */\nfunction HomeButton(container, scene, duration) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new HomeButtonViewModel(scene, duration);\n\n viewModel._svgPath =\n \"M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z\";\n\n var element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = \"cesium-button cesium-toolbar-button cesium-home-button\";\n element.setAttribute(\n \"data-bind\",\n \"\\\nattr: { title: tooltip },\\\nclick: command,\\\ncesiumSvgPath: { path: _svgPath, width: 28, height: 28 }\"\n );\n\n container.appendChild(element);\n\n knockout.applyBindings(viewModel, element);\n\n this._container = container;\n this._viewModel = viewModel;\n this._element = element;\n}\n\nObject.defineProperties(HomeButton.prototype, {\n /**\n * Gets the parent container.\n * @memberof HomeButton.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof HomeButton.prototype\n *\n * @type {HomeButtonViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nHomeButton.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nHomeButton.prototype.destroy = function () {\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n\n return destroyObject(this);\n};\nexport default HomeButton;\n","import defined from \"../../Core/defined.js\";\nimport Event from \"../../Core/Event.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\n\nvar cameraEnabledPath =\n \"M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z\";\nvar cameraDisabledPath =\n \"M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z\";\n\n/**\n * The view model for {@link InfoBox}.\n * @alias InfoBoxViewModel\n * @constructor\n */\nfunction InfoBoxViewModel() {\n this._cameraClicked = new Event();\n this._closeClicked = new Event();\n\n /**\n * Gets or sets the maximum height of the info box in pixels. This property is observable.\n * @type {Number}\n */\n this.maxHeight = 500;\n\n /**\n * Gets or sets whether the camera tracking icon is enabled.\n * @type {Boolean}\n */\n this.enableCamera = false;\n\n /**\n * Gets or sets the status of current camera tracking of the selected object.\n * @type {Boolean}\n */\n this.isCameraTracking = false;\n\n /**\n * Gets or sets the visibility of the info box.\n * @type {Boolean}\n */\n this.showInfo = false;\n\n /**\n * Gets or sets the title text in the info box.\n * @type {String}\n */\n this.titleText = \"\";\n\n /**\n * Gets or sets the description HTML for the info box.\n * @type {String}\n */\n this.description = \"\";\n\n knockout.track(this, [\n \"showInfo\",\n \"titleText\",\n \"description\",\n \"maxHeight\",\n \"enableCamera\",\n \"isCameraTracking\",\n ]);\n\n this._loadingIndicatorHtml =\n '<div class=\"cesium-infoBox-loadingContainer\"><span class=\"cesium-infoBox-loading\"></span></div>';\n\n /**\n * Gets the SVG path of the camera icon, which can change to be \"crossed out\" or not.\n * @type {String}\n */\n this.cameraIconPath = undefined;\n knockout.defineProperty(this, \"cameraIconPath\", {\n get: function () {\n return !this.enableCamera || this.isCameraTracking\n ? cameraDisabledPath\n : cameraEnabledPath;\n },\n });\n\n knockout.defineProperty(this, \"_bodyless\", {\n get: function () {\n return !defined(this.description) || this.description.length === 0;\n },\n });\n}\n\n/**\n * Gets the maximum height of sections within the info box, minus an offset, in CSS-ready form.\n * @param {Number} offset The offset in pixels.\n * @returns {String}\n */\nInfoBoxViewModel.prototype.maxHeightOffset = function (offset) {\n return this.maxHeight - offset + \"px\";\n};\n\nObject.defineProperties(InfoBoxViewModel.prototype, {\n /**\n * Gets an {@link Event} that is fired when the user clicks the camera icon.\n * @memberof InfoBoxViewModel.prototype\n * @type {Event}\n */\n cameraClicked: {\n get: function () {\n return this._cameraClicked;\n },\n },\n /**\n * Gets an {@link Event} that is fired when the user closes the info box.\n * @memberof InfoBoxViewModel.prototype\n * @type {Event}\n */\n closeClicked: {\n get: function () {\n return this._closeClicked;\n },\n },\n});\nexport default InfoBoxViewModel;\n","import buildModuleUrl from \"../../Core/buildModuleUrl.js\";\nimport Check from \"../../Core/Check.js\";\nimport Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\nimport InfoBoxViewModel from \"./InfoBoxViewModel.js\";\n\n/**\n * A widget for displaying information or a description.\n *\n * @alias InfoBox\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction InfoBox(container) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"container\", container);\n //>>includeEnd('debug')\n\n container = getElement(container);\n\n var infoElement = document.createElement(\"div\");\n infoElement.className = \"cesium-infoBox\";\n infoElement.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-infoBox-visible\" : showInfo, \"cesium-infoBox-bodyless\" : _bodyless }'\n );\n container.appendChild(infoElement);\n\n var titleElement = document.createElement(\"div\");\n titleElement.className = \"cesium-infoBox-title\";\n titleElement.setAttribute(\"data-bind\", \"text: titleText\");\n infoElement.appendChild(titleElement);\n\n var cameraElement = document.createElement(\"button\");\n cameraElement.type = \"button\";\n cameraElement.className = \"cesium-button cesium-infoBox-camera\";\n cameraElement.setAttribute(\n \"data-bind\",\n '\\\nattr: { title: \"Focus camera on object\" },\\\nclick: function () { cameraClicked.raiseEvent(this); },\\\nenable: enableCamera,\\\ncesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'\n );\n infoElement.appendChild(cameraElement);\n\n var closeElement = document.createElement(\"button\");\n closeElement.type = \"button\";\n closeElement.className = \"cesium-infoBox-close\";\n closeElement.setAttribute(\n \"data-bind\",\n \"\\\nclick: function () { closeClicked.raiseEvent(this); }\"\n );\n closeElement.innerHTML = \"×\";\n infoElement.appendChild(closeElement);\n\n var frame = document.createElement(\"iframe\");\n frame.className = \"cesium-infoBox-iframe\";\n frame.setAttribute(\"sandbox\", \"allow-same-origin allow-popups allow-forms\"); //allow-pointer-lock allow-scripts allow-top-navigation\n frame.setAttribute(\n \"data-bind\",\n \"style : { maxHeight : maxHeightOffset(40) }\"\n );\n frame.setAttribute(\"allowfullscreen\", true);\n infoElement.appendChild(frame);\n\n var viewModel = new InfoBoxViewModel();\n knockout.applyBindings(viewModel, infoElement);\n\n this._container = container;\n this._element = infoElement;\n this._frame = frame;\n this._viewModel = viewModel;\n this._descriptionSubscription = undefined;\n\n var that = this;\n //We can't actually add anything into the frame until the load event is fired\n frame.addEventListener(\"load\", function () {\n var frameDocument = frame.contentDocument;\n\n //We inject default css into the content iframe,\n //end users can remove it or add their own via the exposed frame property.\n var cssLink = frameDocument.createElement(\"link\");\n cssLink.href = buildModuleUrl(\"Widgets/InfoBox/InfoBoxDescription.css\");\n cssLink.rel = \"stylesheet\";\n cssLink.type = \"text/css\";\n\n //div to use for description content.\n var frameContent = frameDocument.createElement(\"div\");\n frameContent.className = \"cesium-infoBox-description\";\n\n frameDocument.head.appendChild(cssLink);\n frameDocument.body.appendChild(frameContent);\n\n //We manually subscribe to the description event rather than through a binding for two reasons.\n //1. It's an easy way to ensure order of operation so that we can adjust the height.\n //2. Knockout does not bind to elements inside of an iFrame, so we would have to apply a second binding\n // model anyway.\n that._descriptionSubscription = subscribeAndEvaluate(\n viewModel,\n \"description\",\n function (value) {\n // Set the frame to small height, force vertical scroll bar to appear, and text to wrap accordingly.\n frame.style.height = \"5px\";\n frameContent.innerHTML = value;\n\n //If the snippet is a single element, then use its background\n //color for the body of the InfoBox. This makes the padding match\n //the content and produces much nicer results.\n var background = null;\n var firstElementChild = frameContent.firstElementChild;\n if (\n firstElementChild !== null &&\n frameContent.childNodes.length === 1\n ) {\n var style = window.getComputedStyle(firstElementChild);\n if (style !== null) {\n var backgroundColor = style[\"background-color\"];\n var color = Color.fromCssColorString(backgroundColor);\n if (defined(color) && color.alpha !== 0) {\n background = style[\"background-color\"];\n }\n }\n }\n infoElement.style[\"background-color\"] = background;\n\n // Measure and set the new custom height, based on text wrapped above.\n var height = frameContent.getBoundingClientRect().height;\n frame.style.height = height + \"px\";\n }\n );\n });\n\n //Chrome does not send the load event unless we explicitly set a src\n frame.setAttribute(\"src\", \"about:blank\");\n}\n\nObject.defineProperties(InfoBox.prototype, {\n /**\n * Gets the parent container.\n * @memberof InfoBox.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof InfoBox.prototype\n *\n * @type {InfoBoxViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n\n /**\n * Gets the iframe used to display the description.\n * @memberof InfoBox.prototype\n *\n * @type {HTMLIFrameElement}\n */\n frame: {\n get: function () {\n return this._frame;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nInfoBox.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nInfoBox.prototype.destroy = function () {\n var container = this._container;\n knockout.cleanNode(this._element);\n container.removeChild(this._element);\n\n if (defined(this._descriptionSubscription)) {\n this._descriptionSubscription.dispose();\n }\n\n return destroyObject(this);\n};\nexport default InfoBox;\n","import knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link NavigationHelpButton}.\n * @alias NavigationHelpButtonViewModel\n * @constructor\n */\nfunction NavigationHelpButtonViewModel() {\n /**\n * Gets or sets whether the instructions are currently shown. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.showInstructions = false;\n\n var that = this;\n this._command = createCommand(function () {\n that.showInstructions = !that.showInstructions;\n });\n this._showClick = createCommand(function () {\n that._touch = false;\n });\n this._showTouch = createCommand(function () {\n that._touch = true;\n });\n\n this._touch = false;\n\n /**\n * Gets or sets the tooltip. This property is observable.\n *\n * @type {String}\n */\n this.tooltip = \"Navigation Instructions\";\n\n knockout.track(this, [\"tooltip\", \"showInstructions\", \"_touch\"]);\n}\n\nObject.defineProperties(NavigationHelpButtonViewModel.prototype, {\n /**\n * Gets the Command that is executed when the button is clicked.\n * @memberof NavigationHelpButtonViewModel.prototype\n *\n * @type {Command}\n */\n command: {\n get: function () {\n return this._command;\n },\n },\n\n /**\n * Gets the Command that is executed when the mouse instructions should be shown.\n * @memberof NavigationHelpButtonViewModel.prototype\n *\n * @type {Command}\n */\n showClick: {\n get: function () {\n return this._showClick;\n },\n },\n\n /**\n * Gets the Command that is executed when the touch instructions should be shown.\n * @memberof NavigationHelpButtonViewModel.prototype\n *\n * @type {Command}\n */\n showTouch: {\n get: function () {\n return this._showTouch;\n },\n },\n});\nexport default NavigationHelpButtonViewModel;\n","import buildModuleUrl from \"../../Core/buildModuleUrl.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport NavigationHelpButtonViewModel from \"./NavigationHelpButtonViewModel.js\";\n\n/**\n * <p>The NavigationHelpButton is a single button widget for displaying instructions for\n * navigating the globe with the mouse.</p><p style=\"clear: both;\"></p><br/>\n *\n * @alias NavigationHelpButton\n * @constructor\n *\n * @param {Object} options Object with the following properties:\n * @param {Element|String} options.container The DOM element or ID that will contain the widget.\n * @param {Boolean} [options.instructionsInitiallyVisible=false] True if the navigation instructions should initially be visible; otherwise, false.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the NavigationHelpButton.css stylesheet,\n * // and in the body, include: <div id=\"navigationHelpButtonContainer\"></div>\n *\n * var navigationHelpButton = new Cesium.NavigationHelpButton({\n * container : 'navigationHelpButtonContainer'\n * });\n */\nfunction NavigationHelpButton(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.container)) {\n throw new DeveloperError(\"options.container is required.\");\n }\n //>>includeEnd('debug');\n\n var container = getElement(options.container);\n\n var viewModel = new NavigationHelpButtonViewModel();\n\n var showInsructionsDefault = defaultValue(\n options.instructionsInitiallyVisible,\n false\n );\n viewModel.showInstructions = showInsructionsDefault;\n\n viewModel._svgPath =\n \"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z\";\n\n var wrapper = document.createElement(\"span\");\n wrapper.className = \"cesium-navigationHelpButton-wrapper\";\n container.appendChild(wrapper);\n\n var button = document.createElement(\"button\");\n button.type = \"button\";\n button.className =\n \"cesium-button cesium-toolbar-button cesium-navigation-help-button\";\n button.setAttribute(\n \"data-bind\",\n \"\\\nattr: { title: tooltip },\\\nclick: command,\\\ncesiumSvgPath: { path: _svgPath, width: 32, height: 32 }\"\n );\n wrapper.appendChild(button);\n\n var instructionContainer = document.createElement(\"div\");\n instructionContainer.className = \"cesium-navigation-help\";\n instructionContainer.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-navigation-help-visible\" : showInstructions}'\n );\n wrapper.appendChild(instructionContainer);\n\n var mouseButton = document.createElement(\"button\");\n mouseButton.type = \"button\";\n mouseButton.className =\n \"cesium-navigation-button cesium-navigation-button-left\";\n mouseButton.setAttribute(\n \"data-bind\",\n 'click: showClick, css: {\"cesium-navigation-button-selected\": !_touch, \"cesium-navigation-button-unselected\": _touch}'\n );\n var mouseIcon = document.createElement(\"img\");\n mouseIcon.src = buildModuleUrl(\"Widgets/Images/NavigationHelp/Mouse.svg\");\n mouseIcon.className = \"cesium-navigation-button-icon\";\n mouseIcon.style.width = \"25px\";\n mouseIcon.style.height = \"25px\";\n mouseButton.appendChild(mouseIcon);\n mouseButton.appendChild(document.createTextNode(\"Mouse\"));\n\n var touchButton = document.createElement(\"button\");\n touchButton.type = \"button\";\n touchButton.className =\n \"cesium-navigation-button cesium-navigation-button-right\";\n touchButton.setAttribute(\n \"data-bind\",\n 'click: showTouch, css: {\"cesium-navigation-button-selected\": _touch, \"cesium-navigation-button-unselected\": !_touch}'\n );\n var touchIcon = document.createElement(\"img\");\n touchIcon.src = buildModuleUrl(\"Widgets/Images/NavigationHelp/Touch.svg\");\n touchIcon.className = \"cesium-navigation-button-icon\";\n touchIcon.style.width = \"25px\";\n touchIcon.style.height = \"25px\";\n touchButton.appendChild(touchIcon);\n touchButton.appendChild(document.createTextNode(\"Touch\"));\n\n instructionContainer.appendChild(mouseButton);\n instructionContainer.appendChild(touchButton);\n\n var clickInstructions = document.createElement(\"div\");\n clickInstructions.className =\n \"cesium-click-navigation-help cesium-navigation-help-instructions\";\n clickInstructions.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-click-navigation-help-visible\" : !_touch}'\n );\n clickInstructions.innerHTML =\n '\\\n <table>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/MouseLeft.svg\") +\n '\" width=\"48\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-pan\">Pan view</div>\\\n <div class=\"cesium-navigation-help-details\">Left click + drag</div>\\\n </td>\\\n </tr>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/MouseRight.svg\") +\n '\" width=\"48\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-zoom\">Zoom view</div>\\\n <div class=\"cesium-navigation-help-details\">Right click + drag, or</div>\\\n <div class=\"cesium-navigation-help-details\">Mouse wheel scroll</div>\\\n </td>\\\n </tr>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/MouseMiddle.svg\") +\n '\" width=\"48\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-rotate\">Rotate view</div>\\\n <div class=\"cesium-navigation-help-details\">Middle click + drag, or</div>\\\n <div class=\"cesium-navigation-help-details\">CTRL + Left/Right click + drag</div>\\\n </td>\\\n </tr>\\\n </table>';\n\n instructionContainer.appendChild(clickInstructions);\n\n var touchInstructions = document.createElement(\"div\");\n touchInstructions.className =\n \"cesium-touch-navigation-help cesium-navigation-help-instructions\";\n touchInstructions.setAttribute(\n \"data-bind\",\n 'css: { \"cesium-touch-navigation-help-visible\" : _touch}'\n );\n touchInstructions.innerHTML =\n '\\\n <table>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/TouchDrag.svg\") +\n '\" width=\"70\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-pan\">Pan view</div>\\\n <div class=\"cesium-navigation-help-details\">One finger drag</div>\\\n </td>\\\n </tr>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/TouchZoom.svg\") +\n '\" width=\"70\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-zoom\">Zoom view</div>\\\n <div class=\"cesium-navigation-help-details\">Two finger pinch</div>\\\n </td>\\\n </tr>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/TouchTilt.svg\") +\n '\" width=\"70\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-rotate\">Tilt view</div>\\\n <div class=\"cesium-navigation-help-details\">Two finger drag, same direction</div>\\\n </td>\\\n </tr>\\\n <tr>\\\n <td><img src=\"' +\n buildModuleUrl(\"Widgets/Images/NavigationHelp/TouchRotate.svg\") +\n '\" width=\"70\" height=\"48\" /></td>\\\n <td>\\\n <div class=\"cesium-navigation-help-tilt\">Rotate view</div>\\\n <div class=\"cesium-navigation-help-details\">Two finger drag, opposite direction</div>\\\n </td>\\\n </tr>\\\n </table>';\n\n instructionContainer.appendChild(touchInstructions);\n\n knockout.applyBindings(viewModel, wrapper);\n\n this._container = container;\n this._viewModel = viewModel;\n this._wrapper = wrapper;\n\n this._closeInstructions = function (e) {\n if (!wrapper.contains(e.target)) {\n viewModel.showInstructions = false;\n }\n };\n\n if (FeatureDetection.supportsPointerEvents()) {\n document.addEventListener(\"pointerdown\", this._closeInstructions, true);\n } else {\n document.addEventListener(\"mousedown\", this._closeInstructions, true);\n document.addEventListener(\"touchstart\", this._closeInstructions, true);\n }\n}\n\nObject.defineProperties(NavigationHelpButton.prototype, {\n /**\n * Gets the parent container.\n * @memberof NavigationHelpButton.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof NavigationHelpButton.prototype\n *\n * @type {NavigationHelpButtonViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nNavigationHelpButton.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nNavigationHelpButton.prototype.destroy = function () {\n if (FeatureDetection.supportsPointerEvents()) {\n document.removeEventListener(\"pointerdown\", this._closeInstructions, true);\n } else {\n document.removeEventListener(\"mousedown\", this._closeInstructions, true);\n document.removeEventListener(\"touchstart\", this._closeInstructions, true);\n }\n\n knockout.cleanNode(this._wrapper);\n this._container.removeChild(this._wrapper);\n\n return destroyObject(this);\n};\nexport default NavigationHelpButton;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FrameRateMonitor from \"../../Scene/FrameRateMonitor.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link PerformanceWatchdog}.\n *\n * @alias PerformanceWatchdogViewModel\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Scene} options.scene The Scene instance for which to monitor performance.\n * @param {String} [options.lowFrameRateMessage='This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] The\n * message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure\n * it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks.\n */\nfunction PerformanceWatchdogViewModel(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.scene)) {\n throw new DeveloperError(\"options.scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = options.scene;\n\n /**\n * Gets or sets the message to display when a low frame rate is detected. This string will be interpreted as HTML.\n * @type {String}\n */\n this.lowFrameRateMessage = defaultValue(\n options.lowFrameRateMessage,\n \"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.\"\n );\n\n /**\n * Gets or sets a value indicating whether the low frame rate message has previously been dismissed by the user. If it has\n * been dismissed, the message will not be redisplayed, no matter the frame rate.\n * @type {Boolean}\n */\n this.lowFrameRateMessageDismissed = false;\n\n /**\n * Gets or sets a value indicating whether the low frame rate message is currently being displayed.\n * @type {Boolean}\n */\n this.showingLowFrameRateMessage = false;\n\n knockout.track(this, [\n \"lowFrameRateMessage\",\n \"lowFrameRateMessageDismissed\",\n \"showingLowFrameRateMessage\",\n ]);\n\n var that = this;\n this._dismissMessage = createCommand(function () {\n that.showingLowFrameRateMessage = false;\n that.lowFrameRateMessageDismissed = true;\n });\n\n var monitor = FrameRateMonitor.fromScene(options.scene);\n\n this._unsubscribeLowFrameRate = monitor.lowFrameRate.addEventListener(\n function () {\n if (!that.lowFrameRateMessageDismissed) {\n that.showingLowFrameRateMessage = true;\n }\n }\n );\n\n this._unsubscribeNominalFrameRate = monitor.nominalFrameRate.addEventListener(\n function () {\n that.showingLowFrameRateMessage = false;\n }\n );\n}\n\nObject.defineProperties(PerformanceWatchdogViewModel.prototype, {\n /**\n * Gets the {@link Scene} instance for which to monitor performance.\n * @memberof PerformanceWatchdogViewModel.prototype\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets a command that dismisses the low frame rate message. Once it is dismissed, the message\n * will not be redisplayed.\n * @memberof PerformanceWatchdogViewModel.prototype\n * @type {Command}\n */\n dismissMessage: {\n get: function () {\n return this._dismissMessage;\n },\n },\n});\n\nPerformanceWatchdogViewModel.prototype.destroy = function () {\n this._unsubscribeLowFrameRate();\n this._unsubscribeNominalFrameRate();\n\n return destroyObject(this);\n};\nexport default PerformanceWatchdogViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport PerformanceWatchdogViewModel from \"./PerformanceWatchdogViewModel.js\";\n\n/**\n * Monitors performance of the application and displays a message if poor performance is detected.\n *\n * @alias PerformanceWatchdog\n * @constructor\n *\n * @param {Object} [options] Object with the following properties:\n * @param {Element|String} options.container The DOM element or ID that will contain the widget.\n * @param {Scene} options.scene The {@link Scene} for which to monitor performance.\n * @param {String} [options.lowFrameRateMessage='This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.'] The\n * message to display when a low frame rate is detected. The message is interpeted as HTML, so make sure\n * it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks.\n */\nfunction PerformanceWatchdog(options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(options) || !defined(options.container)) {\n throw new DeveloperError(\"options.container is required.\");\n }\n if (!defined(options.scene)) {\n throw new DeveloperError(\"options.scene is required.\");\n }\n //>>includeEnd('debug');\n\n var container = getElement(options.container);\n\n var viewModel = new PerformanceWatchdogViewModel(options);\n\n var element = document.createElement(\"div\");\n element.className = \"cesium-performance-watchdog-message-area\";\n element.setAttribute(\"data-bind\", \"visible: showingLowFrameRateMessage\");\n\n var dismissButton = document.createElement(\"button\");\n dismissButton.setAttribute(\"type\", \"button\");\n dismissButton.className = \"cesium-performance-watchdog-message-dismiss\";\n dismissButton.innerHTML = \"×\";\n dismissButton.setAttribute(\"data-bind\", \"click: dismissMessage\");\n element.appendChild(dismissButton);\n\n var message = document.createElement(\"div\");\n message.className = \"cesium-performance-watchdog-message\";\n message.setAttribute(\"data-bind\", \"html: lowFrameRateMessage\");\n element.appendChild(message);\n\n container.appendChild(element);\n\n knockout.applyBindings(viewModel, element);\n\n this._container = container;\n this._viewModel = viewModel;\n this._element = element;\n}\n\nObject.defineProperties(PerformanceWatchdog.prototype, {\n /**\n * Gets the parent container.\n * @memberof PerformanceWatchdog.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof PerformanceWatchdog.prototype\n *\n * @type {PerformanceWatchdogViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @memberof PerformanceWatchdog\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nPerformanceWatchdog.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n * @memberof PerformanceWatchdog\n */\nPerformanceWatchdog.prototype.destroy = function () {\n this._viewModel.destroy();\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n\n return destroyObject(this);\n};\nexport default PerformanceWatchdog;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport EventHelper from \"../../Core/EventHelper.js\";\nimport OrthographicFrustum from \"../../Core/OrthographicFrustum.js\";\nimport SceneMode from \"../../Scene/SceneMode.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link ProjectionPicker}.\n * @alias ProjectionPickerViewModel\n * @constructor\n *\n * @param {Scene} scene The Scene to switch projections.\n */\nfunction ProjectionPickerViewModel(scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = scene;\n this._orthographic = scene.camera.frustum instanceof OrthographicFrustum;\n this._flightInProgress = false;\n\n /**\n * Gets or sets whether the button drop-down is currently visible. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.dropDownVisible = false;\n\n /**\n * Gets or sets the perspective projection tooltip. This property is observable.\n * @type {String}\n * @default 'Perspective Projection'\n */\n this.tooltipPerspective = \"Perspective Projection\";\n\n /**\n * Gets or sets the orthographic projection tooltip. This property is observable.\n * @type {String}\n * @default 'Orthographic Projection'\n */\n this.tooltipOrthographic = \"Orthographic Projection\";\n\n /**\n * Gets the currently active tooltip. This property is observable.\n * @type {String}\n */\n this.selectedTooltip = undefined;\n\n /**\n * Gets or sets the current SceneMode. This property is observable.\n * @type {SceneMode}\n */\n this.sceneMode = scene.mode;\n\n knockout.track(this, [\n \"_orthographic\",\n \"_flightInProgress\",\n \"sceneMode\",\n \"dropDownVisible\",\n \"tooltipPerspective\",\n \"tooltipOrthographic\",\n ]);\n\n var that = this;\n knockout.defineProperty(this, \"selectedTooltip\", function () {\n if (that._orthographic) {\n return that.tooltipOrthographic;\n }\n return that.tooltipPerspective;\n });\n\n this._toggleDropDown = createCommand(function () {\n if (that.sceneMode === SceneMode.SCENE2D || that._flightInProgress) {\n return;\n }\n\n that.dropDownVisible = !that.dropDownVisible;\n });\n\n this._eventHelper = new EventHelper();\n this._eventHelper.add(scene.morphComplete, function (\n transitioner,\n oldMode,\n newMode,\n isMorphing\n ) {\n that.sceneMode = newMode;\n that._orthographic =\n newMode === SceneMode.SCENE2D ||\n that._scene.camera.frustum instanceof OrthographicFrustum;\n });\n this._eventHelper.add(scene.preRender, function () {\n that._flightInProgress = defined(scene.camera._currentFlight);\n });\n\n this._switchToPerspective = createCommand(function () {\n if (that.sceneMode === SceneMode.SCENE2D) {\n return;\n }\n\n that._scene.camera.switchToPerspectiveFrustum();\n that._orthographic = false;\n that.dropDownVisible = false;\n });\n\n this._switchToOrthographic = createCommand(function () {\n if (that.sceneMode === SceneMode.SCENE2D) {\n return;\n }\n\n that._scene.camera.switchToOrthographicFrustum();\n that._orthographic = true;\n that.dropDownVisible = false;\n });\n\n //Used by knockout\n this._sceneMode = SceneMode;\n}\n\nObject.defineProperties(ProjectionPickerViewModel.prototype, {\n /**\n * Gets the scene\n * @memberof ProjectionPickerViewModel.prototype\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets the command to toggle the drop down box.\n * @memberof ProjectionPickerViewModel.prototype\n *\n * @type {Command}\n */\n toggleDropDown: {\n get: function () {\n return this._toggleDropDown;\n },\n },\n\n /**\n * Gets the command to switch to a perspective projection.\n * @memberof ProjectionPickerViewModel.prototype\n *\n * @type {Command}\n */\n switchToPerspective: {\n get: function () {\n return this._switchToPerspective;\n },\n },\n\n /**\n * Gets the command to switch to orthographic projection.\n * @memberof ProjectionPickerViewModel.prototype\n *\n * @type {Command}\n */\n switchToOrthographic: {\n get: function () {\n return this._switchToOrthographic;\n },\n },\n\n /**\n * Gets whether the scene is currently using an orthographic projection.\n * @memberof ProjectionPickerViewModel.prototype\n *\n * @type {Command}\n */\n isOrthographicProjection: {\n get: function () {\n return this._orthographic;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nProjectionPickerViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the view model.\n */\nProjectionPickerViewModel.prototype.destroy = function () {\n this._eventHelper.removeAll();\n destroyObject(this);\n};\nexport default ProjectionPickerViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport ProjectionPickerViewModel from \"./ProjectionPickerViewModel.js\";\n\nvar perspectivePath =\n \"M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z\";\nvar orthographicPath =\n \"m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z\";\n\n/**\n * The ProjectionPicker is a single button widget for switching between perspective and orthographic projections.\n *\n * @alias ProjectionPicker\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the ProjectionPicker.css stylesheet,\n * // and in the body, include: <div id=\"projectionPickerContainer\"></div>\n * // Note: This code assumes you already have a Scene instance.\n *\n * var projectionPicker = new Cesium.ProjectionPicker('projectionPickerContainer', scene);\n */\nfunction ProjectionPicker(container, scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new ProjectionPickerViewModel(scene);\n\n viewModel._perspectivePath = perspectivePath;\n viewModel._orthographicPath = orthographicPath;\n\n var wrapper = document.createElement(\"span\");\n wrapper.className = \"cesium-projectionPicker-wrapper cesium-toolbar-button\";\n container.appendChild(wrapper);\n\n var button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"cesium-button cesium-toolbar-button\";\n button.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-projectionPicker-buttonPerspective\": !_orthographic,\\\n \"cesium-projectionPicker-buttonOrthographic\": _orthographic,\\\n \"cesium-button-disabled\" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, \\\n \"cesium-projectionPicker-selected\": dropDownVisible },\\\nattr: { title: selectedTooltip },\\\nclick: toggleDropDown'\n );\n button.innerHTML =\n '\\\n<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: \"cesium-projectionPicker-iconPerspective\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: \"cesium-projectionPicker-iconOrthographic\" } --><!-- /ko -->';\n wrapper.appendChild(button);\n\n var perspectiveButton = document.createElement(\"button\");\n perspectiveButton.type = \"button\";\n perspectiveButton.className =\n \"cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon\";\n perspectiveButton.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-projectionPicker-visible\" : (dropDownVisible && _orthographic),\\\n \"cesium-projectionPicker-none\" : !_orthographic,\\\n \"cesium-projectionPicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltipPerspective },\\\nclick: switchToPerspective,\\\ncesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'\n );\n wrapper.appendChild(perspectiveButton);\n\n var orthographicButton = document.createElement(\"button\");\n orthographicButton.type = \"button\";\n orthographicButton.className =\n \"cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon\";\n orthographicButton.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-projectionPicker-visible\" : (dropDownVisible && !_orthographic),\\\n \"cesium-projectionPicker-none\" : _orthographic,\\\n \"cesium-projectionPicker-hidden\" : !dropDownVisible},\\\nattr: { title: tooltipOrthographic },\\\nclick: switchToOrthographic,\\\ncesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'\n );\n wrapper.appendChild(orthographicButton);\n\n knockout.applyBindings(viewModel, wrapper);\n\n this._viewModel = viewModel;\n this._container = container;\n this._wrapper = wrapper;\n\n this._closeDropDown = function (e) {\n if (!wrapper.contains(e.target)) {\n viewModel.dropDownVisible = false;\n }\n };\n if (FeatureDetection.supportsPointerEvents()) {\n document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.addEventListener(\"mousedown\", this._closeDropDown, true);\n document.addEventListener(\"touchstart\", this._closeDropDown, true);\n }\n}\n\nObject.defineProperties(ProjectionPicker.prototype, {\n /**\n * Gets the parent container.\n * @memberof ProjectionPicker.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof ProjectionPicker.prototype\n *\n * @type {ProjectionPickerViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nProjectionPicker.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nProjectionPicker.prototype.destroy = function () {\n this._viewModel.destroy();\n\n if (FeatureDetection.supportsPointerEvents()) {\n document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n }\n\n knockout.cleanNode(this._wrapper);\n this._container.removeChild(this._wrapper);\n\n return destroyObject(this);\n};\nexport default ProjectionPicker;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport EventHelper from \"../../Core/EventHelper.js\";\nimport SceneMode from \"../../Scene/SceneMode.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link SceneModePicker}.\n * @alias SceneModePickerViewModel\n * @constructor\n *\n * @param {Scene} scene The Scene to morph\n * @param {Number} [duration=2.0] The duration of scene morph animations, in seconds\n */\nfunction SceneModePickerViewModel(scene, duration) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n this._scene = scene;\n\n var that = this;\n\n var morphStart = function (transitioner, oldMode, newMode, isMorphing) {\n that.sceneMode = newMode;\n that.dropDownVisible = false;\n };\n\n this._eventHelper = new EventHelper();\n this._eventHelper.add(scene.morphStart, morphStart);\n\n this._duration = defaultValue(duration, 2.0);\n\n /**\n * Gets or sets the current SceneMode. This property is observable.\n * @type {SceneMode}\n */\n this.sceneMode = scene.mode;\n\n /**\n * Gets or sets whether the button drop-down is currently visible. This property is observable.\n * @type {Boolean}\n * @default false\n */\n this.dropDownVisible = false;\n\n /**\n * Gets or sets the 2D tooltip. This property is observable.\n * @type {String}\n * @default '2D'\n */\n this.tooltip2D = \"2D\";\n\n /**\n * Gets or sets the 3D tooltip. This property is observable.\n * @type {String}\n * @default '3D'\n */\n this.tooltip3D = \"3D\";\n\n /**\n * Gets or sets the Columbus View tooltip. This property is observable.\n * @type {String}\n * @default 'Columbus View'\n */\n this.tooltipColumbusView = \"Columbus View\";\n\n knockout.track(this, [\n \"sceneMode\",\n \"dropDownVisible\",\n \"tooltip2D\",\n \"tooltip3D\",\n \"tooltipColumbusView\",\n ]);\n\n /**\n * Gets the currently active tooltip. This property is observable.\n * @type {String}\n */\n this.selectedTooltip = undefined;\n knockout.defineProperty(this, \"selectedTooltip\", function () {\n var mode = that.sceneMode;\n if (mode === SceneMode.SCENE2D) {\n return that.tooltip2D;\n }\n if (mode === SceneMode.SCENE3D) {\n return that.tooltip3D;\n }\n return that.tooltipColumbusView;\n });\n\n this._toggleDropDown = createCommand(function () {\n that.dropDownVisible = !that.dropDownVisible;\n });\n\n this._morphTo2D = createCommand(function () {\n scene.morphTo2D(that._duration);\n });\n\n this._morphTo3D = createCommand(function () {\n scene.morphTo3D(that._duration);\n });\n\n this._morphToColumbusView = createCommand(function () {\n scene.morphToColumbusView(that._duration);\n });\n\n //Used by knockout\n this._sceneMode = SceneMode;\n}\n\nObject.defineProperties(SceneModePickerViewModel.prototype, {\n /**\n * Gets the scene\n * @memberof SceneModePickerViewModel.prototype\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n\n /**\n * Gets or sets the the duration of scene mode transition animations in seconds.\n * A value of zero causes the scene to instantly change modes.\n * @memberof SceneModePickerViewModel.prototype\n * @type {Number}\n */\n duration: {\n get: function () {\n return this._duration;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (value < 0.0) {\n throw new DeveloperError(\"duration value must be positive.\");\n }\n //>>includeEnd('debug');\n\n this._duration = value;\n },\n },\n\n /**\n * Gets the command to toggle the drop down box.\n * @memberof SceneModePickerViewModel.prototype\n *\n * @type {Command}\n */\n toggleDropDown: {\n get: function () {\n return this._toggleDropDown;\n },\n },\n\n /**\n * Gets the command to morph to 2D.\n * @memberof SceneModePickerViewModel.prototype\n *\n * @type {Command}\n */\n morphTo2D: {\n get: function () {\n return this._morphTo2D;\n },\n },\n\n /**\n * Gets the command to morph to 3D.\n * @memberof SceneModePickerViewModel.prototype\n *\n * @type {Command}\n */\n morphTo3D: {\n get: function () {\n return this._morphTo3D;\n },\n },\n\n /**\n * Gets the command to morph to Columbus View.\n * @memberof SceneModePickerViewModel.prototype\n *\n * @type {Command}\n */\n morphToColumbusView: {\n get: function () {\n return this._morphToColumbusView;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nSceneModePickerViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the view model.\n */\nSceneModePickerViewModel.prototype.destroy = function () {\n this._eventHelper.removeAll();\n\n destroyObject(this);\n};\nexport default SceneModePickerViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport FeatureDetection from \"../../Core/FeatureDetection.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport SceneModePickerViewModel from \"./SceneModePickerViewModel.js\";\n\nvar globePath =\n \"m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 \\\n -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 \\\n -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 \\\n 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z \\\n M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 \\\n 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 \\\n -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z\";\nvar flatMapPath =\n \"m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z\";\nvar columbusViewPath =\n \"m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z\";\n\n/**\n * <img src=\"Images/sceneModePicker.png\" style=\"float: left; margin-right: 10px;\" width=\"44\" height=\"116\" />\n * <p>The SceneModePicker is a single button widget for switching between scene modes;\n * shown to the left in its expanded state. Programatic switching of scene modes will\n * be automatically reflected in the widget as long as the specified Scene\n * is used to perform the change.</p><p style=\"clear: both;\"></p><br/>\n *\n * @alias SceneModePicker\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n * @param {Number} [duration=2.0] The time, in seconds, it takes for the scene to transition.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the SceneModePicker.css stylesheet,\n * // and in the body, include: <div id=\"sceneModePickerContainer\"></div>\n * // Note: This code assumes you already have a Scene instance.\n *\n * var sceneModePicker = new Cesium.SceneModePicker('sceneModePickerContainer', scene);\n */\nfunction SceneModePicker(container, scene, duration) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new SceneModePickerViewModel(scene, duration);\n\n viewModel._globePath = globePath;\n viewModel._flatMapPath = flatMapPath;\n viewModel._columbusViewPath = columbusViewPath;\n\n var wrapper = document.createElement(\"span\");\n wrapper.className = \"cesium-sceneModePicker-wrapper cesium-toolbar-button\";\n container.appendChild(wrapper);\n\n var button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"cesium-button cesium-toolbar-button\";\n button.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-sceneModePicker-button2D\": sceneMode === _sceneMode.SCENE2D,\\\n \"cesium-sceneModePicker-button3D\": sceneMode === _sceneMode.SCENE3D,\\\n \"cesium-sceneModePicker-buttonColumbusView\": sceneMode === _sceneMode.COLUMBUS_VIEW,\\\n \"cesium-sceneModePicker-selected\": dropDownVisible },\\\nattr: { title: selectedTooltip },\\\nclick: toggleDropDown'\n );\n button.innerHTML =\n '\\\n<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView\" } --><!-- /ko -->';\n wrapper.appendChild(button);\n\n var morphTo3DButton = document.createElement(\"button\");\n morphTo3DButton.type = \"button\";\n morphTo3DButton.className =\n \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n morphTo3DButton.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)),\\\n \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.SCENE3D,\\\n \"cesium-sceneModePicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltip3D },\\\nclick: morphTo3D,\\\ncesiumSvgPath: { path: _globePath, width: 64, height: 64 }'\n );\n wrapper.appendChild(morphTo3DButton);\n\n var morphTo2DButton = document.createElement(\"button\");\n morphTo2DButton.type = \"button\";\n morphTo2DButton.className =\n \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n morphTo2DButton.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)),\\\n \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.SCENE2D,\\\n \"cesium-sceneModePicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltip2D },\\\nclick: morphTo2D,\\\ncesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'\n );\n wrapper.appendChild(morphTo2DButton);\n\n var morphToCVButton = document.createElement(\"button\");\n morphToCVButton.type = \"button\";\n morphToCVButton.className =\n \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n morphToCVButton.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)),\\\n \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.COLUMBUS_VIEW,\\\n \"cesium-sceneModePicker-hidden\" : !dropDownVisible},\\\nattr: { title: tooltipColumbusView },\\\nclick: morphToColumbusView,\\\ncesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'\n );\n wrapper.appendChild(morphToCVButton);\n\n knockout.applyBindings(viewModel, wrapper);\n\n this._viewModel = viewModel;\n this._container = container;\n this._wrapper = wrapper;\n\n this._closeDropDown = function (e) {\n if (!wrapper.contains(e.target)) {\n viewModel.dropDownVisible = false;\n }\n };\n if (FeatureDetection.supportsPointerEvents()) {\n document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.addEventListener(\"mousedown\", this._closeDropDown, true);\n document.addEventListener(\"touchstart\", this._closeDropDown, true);\n }\n}\n\nObject.defineProperties(SceneModePicker.prototype, {\n /**\n * Gets the parent container.\n * @memberof SceneModePicker.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof SceneModePicker.prototype\n *\n * @type {SceneModePickerViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nSceneModePicker.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nSceneModePicker.prototype.destroy = function () {\n this._viewModel.destroy();\n\n if (FeatureDetection.supportsPointerEvents()) {\n document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n } else {\n document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n }\n\n knockout.cleanNode(this._wrapper);\n this._container.removeChild(this._wrapper);\n\n return destroyObject(this);\n};\nexport default SceneModePicker;\n","import Cartesian2 from \"../../Core/Cartesian2.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport EasingFunction from \"../../Core/EasingFunction.js\";\nimport SceneTransforms from \"../../Scene/SceneTransforms.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\n\nvar screenSpacePos = new Cartesian2();\nvar offScreen = \"-1000px\";\n\n/**\n * The view model for {@link SelectionIndicator}.\n * @alias SelectionIndicatorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use for screen-space coordinate conversion.\n * @param {Element} selectionIndicatorElement The element containing all elements that make up the selection indicator.\n * @param {Element} container The DOM element that contains the widget.\n */\nfunction SelectionIndicatorViewModel(\n scene,\n selectionIndicatorElement,\n container\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n\n if (!defined(selectionIndicatorElement)) {\n throw new DeveloperError(\"selectionIndicatorElement is required.\");\n }\n\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug')\n\n this._scene = scene;\n this._screenPositionX = offScreen;\n this._screenPositionY = offScreen;\n this._tweens = scene.tweens;\n this._container = defaultValue(container, document.body);\n this._selectionIndicatorElement = selectionIndicatorElement;\n this._scale = 1;\n\n /**\n * Gets or sets the world position of the object for which to display the selection indicator.\n * @type {Cartesian3}\n */\n this.position = undefined;\n\n /**\n * Gets or sets the visibility of the selection indicator.\n * @type {Boolean}\n */\n this.showSelection = false;\n\n knockout.track(this, [\n \"position\",\n \"_screenPositionX\",\n \"_screenPositionY\",\n \"_scale\",\n \"showSelection\",\n ]);\n\n /**\n * Gets the visibility of the position indicator. This can be false even if an\n * object is selected, when the selected object has no position.\n * @type {Boolean}\n */\n this.isVisible = undefined;\n knockout.defineProperty(this, \"isVisible\", {\n get: function () {\n return this.showSelection && defined(this.position);\n },\n });\n\n knockout.defineProperty(this, \"_transform\", {\n get: function () {\n return \"scale(\" + this._scale + \")\";\n },\n });\n\n /**\n * Gets or sets the function for converting the world position of the object to the screen space position.\n *\n * @member\n * @type {SelectionIndicatorViewModel.ComputeScreenSpacePosition}\n * @default SceneTransforms.wgs84ToWindowCoordinates\n *\n * @example\n * selectionIndicatorViewModel.computeScreenSpacePosition = function(position, result) {\n * return Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, position, result);\n * };\n */\n this.computeScreenSpacePosition = function (position, result) {\n return SceneTransforms.wgs84ToWindowCoordinates(scene, position, result);\n };\n}\n\n/**\n * Updates the view of the selection indicator to match the position and content properties of the view model.\n * This function should be called as part of the render loop.\n */\nSelectionIndicatorViewModel.prototype.update = function () {\n if (this.showSelection && defined(this.position)) {\n var screenPosition = this.computeScreenSpacePosition(\n this.position,\n screenSpacePos\n );\n if (!defined(screenPosition)) {\n this._screenPositionX = offScreen;\n this._screenPositionY = offScreen;\n } else {\n var container = this._container;\n var containerWidth = container.parentNode.clientWidth;\n var containerHeight = container.parentNode.clientHeight;\n var indicatorSize = this._selectionIndicatorElement.clientWidth;\n var halfSize = indicatorSize * 0.5;\n\n screenPosition.x =\n Math.min(\n Math.max(screenPosition.x, -indicatorSize),\n containerWidth + indicatorSize\n ) - halfSize;\n screenPosition.y =\n Math.min(\n Math.max(screenPosition.y, -indicatorSize),\n containerHeight + indicatorSize\n ) - halfSize;\n\n this._screenPositionX = Math.floor(screenPosition.x + 0.25) + \"px\";\n this._screenPositionY = Math.floor(screenPosition.y + 0.25) + \"px\";\n }\n }\n};\n\n/**\n * Animate the indicator to draw attention to the selection.\n */\nSelectionIndicatorViewModel.prototype.animateAppear = function () {\n this._tweens.addProperty({\n object: this,\n property: \"_scale\",\n startValue: 2,\n stopValue: 1,\n duration: 0.8,\n easingFunction: EasingFunction.EXPONENTIAL_OUT,\n });\n};\n\n/**\n * Animate the indicator to release the selection.\n */\nSelectionIndicatorViewModel.prototype.animateDepart = function () {\n this._tweens.addProperty({\n object: this,\n property: \"_scale\",\n startValue: this._scale,\n stopValue: 1.5,\n duration: 0.8,\n easingFunction: EasingFunction.EXPONENTIAL_OUT,\n });\n};\n\nObject.defineProperties(SelectionIndicatorViewModel.prototype, {\n /**\n * Gets the HTML element containing the selection indicator.\n * @memberof SelectionIndicatorViewModel.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the HTML element that holds the selection indicator.\n * @memberof SelectionIndicatorViewModel.prototype\n *\n * @type {Element}\n */\n selectionIndicatorElement: {\n get: function () {\n return this._selectionIndicatorElement;\n },\n },\n\n /**\n * Gets the scene being used.\n * @memberof SelectionIndicatorViewModel.prototype\n *\n * @type {Scene}\n */\n scene: {\n get: function () {\n return this._scene;\n },\n },\n});\n\n/**\n * A function that converts the world position of an object to a screen space position.\n * @callback SelectionIndicatorViewModel.ComputeScreenSpacePosition\n * @param {Cartesian3} position The position in WGS84 (world) coordinates.\n * @param {Cartesian2} result An object to return the input position transformed to window coordinates.\n * @returns {Cartesian2} The modified result parameter.\n */\nexport default SelectionIndicatorViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport SelectionIndicatorViewModel from \"./SelectionIndicatorViewModel.js\";\n\n/**\n * A widget for displaying an indicator on a selected object.\n *\n * @alias SelectionIndicator\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction SelectionIndicator(container, scene) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug')\n\n container = getElement(container);\n\n this._container = container;\n\n var el = document.createElement(\"div\");\n el.className = \"cesium-selection-wrapper\";\n el.setAttribute(\n \"data-bind\",\n '\\\nstyle: { \"top\" : _screenPositionY, \"left\" : _screenPositionX },\\\ncss: { \"cesium-selection-wrapper-visible\" : isVisible }'\n );\n container.appendChild(el);\n this._element = el;\n\n var svgNS = \"http://www.w3.org/2000/svg\";\n var path =\n \"M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z\";\n\n var svg = document.createElementNS(svgNS, \"svg:svg\");\n svg.setAttribute(\"width\", 160);\n svg.setAttribute(\"height\", 160);\n svg.setAttribute(\"viewBox\", \"0 0 160 160\");\n\n var group = document.createElementNS(svgNS, \"g\");\n group.setAttribute(\"transform\", \"translate(80,80)\");\n svg.appendChild(group);\n\n var pathElement = document.createElementNS(svgNS, \"path\");\n pathElement.setAttribute(\"data-bind\", \"attr: { transform: _transform }\");\n pathElement.setAttribute(\"d\", path);\n group.appendChild(pathElement);\n\n el.appendChild(svg);\n\n var viewModel = new SelectionIndicatorViewModel(\n scene,\n this._element,\n this._container\n );\n this._viewModel = viewModel;\n\n knockout.applyBindings(this._viewModel, this._element);\n}\n\nObject.defineProperties(SelectionIndicator.prototype, {\n /**\n * Gets the parent container.\n * @memberof SelectionIndicator.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof SelectionIndicator.prototype\n *\n * @type {SelectionIndicatorViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nSelectionIndicator.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nSelectionIndicator.prototype.destroy = function () {\n var container = this._container;\n knockout.cleanNode(this._element);\n container.removeChild(this._element);\n return destroyObject(this);\n};\nexport default SelectionIndicator;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\n\n/**\n * @private\n */\nfunction TimelineHighlightRange(color, heightInPx, base) {\n this._color = color;\n this._height = heightInPx;\n this._base = defaultValue(base, 0);\n}\n\nTimelineHighlightRange.prototype.getHeight = function () {\n return this._height;\n};\n\nTimelineHighlightRange.prototype.getBase = function () {\n return this._base;\n};\n\nTimelineHighlightRange.prototype.getStartTime = function () {\n return this._start;\n};\n\nTimelineHighlightRange.prototype.getStopTime = function () {\n return this._stop;\n};\n\nTimelineHighlightRange.prototype.setRange = function (start, stop) {\n this._start = start;\n this._stop = stop;\n};\n\nTimelineHighlightRange.prototype.render = function (renderState) {\n var range = \"\";\n if (this._start && this._stop && this._color) {\n var highlightStart = JulianDate.secondsDifference(\n this._start,\n renderState.epochJulian\n );\n var highlightLeft = Math.round(\n renderState.timeBarWidth * renderState.getAlpha(highlightStart)\n );\n var highlightStop = JulianDate.secondsDifference(\n this._stop,\n renderState.epochJulian\n );\n var highlightWidth =\n Math.round(\n renderState.timeBarWidth * renderState.getAlpha(highlightStop)\n ) - highlightLeft;\n if (highlightLeft < 0) {\n highlightWidth += highlightLeft;\n highlightLeft = 0;\n }\n if (highlightLeft + highlightWidth > renderState.timeBarWidth) {\n highlightWidth = renderState.timeBarWidth - highlightLeft;\n }\n if (highlightWidth > 0) {\n range =\n '<span class=\"cesium-timeline-highlight\" style=\"left: ' +\n highlightLeft.toString() +\n \"px; width: \" +\n highlightWidth.toString() +\n \"px; bottom: \" +\n this._base.toString() +\n \"px; height: \" +\n this._height +\n \"px; background-color: \" +\n this._color +\n ';\"></span>';\n }\n }\n return range;\n};\nexport default TimelineHighlightRange;\n","import Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\n\n/**\n * @private\n */\nfunction TimelineTrack(interval, pixelHeight, color, backgroundColor) {\n this.interval = interval;\n this.height = pixelHeight;\n this.color = color || new Color(0.5, 0.5, 0.5, 1.0);\n this.backgroundColor = backgroundColor || new Color(0.0, 0.0, 0.0, 0.0);\n}\n\nTimelineTrack.prototype.render = function (context, renderState) {\n var startInterval = this.interval.start;\n var stopInterval = this.interval.stop;\n\n var spanStart = renderState.startJulian;\n var spanStop = JulianDate.addSeconds(\n renderState.startJulian,\n renderState.duration,\n new JulianDate()\n );\n\n if (\n JulianDate.lessThan(startInterval, spanStart) &&\n JulianDate.greaterThan(stopInterval, spanStop)\n ) {\n //The track takes up the entire visible span.\n context.fillStyle = this.color.toCssColorString();\n context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);\n } else if (\n JulianDate.lessThanOrEquals(startInterval, spanStop) &&\n JulianDate.greaterThanOrEquals(stopInterval, spanStart)\n ) {\n //The track only takes up some of the visible span, compute that span.\n var x;\n var start, stop;\n for (x = 0; x < renderState.timeBarWidth; ++x) {\n var currentTime = JulianDate.addSeconds(\n renderState.startJulian,\n (x / renderState.timeBarWidth) * renderState.duration,\n new JulianDate()\n );\n if (\n !defined(start) &&\n JulianDate.greaterThanOrEquals(currentTime, startInterval)\n ) {\n start = x;\n } else if (\n !defined(stop) &&\n JulianDate.greaterThanOrEquals(currentTime, stopInterval)\n ) {\n stop = x;\n }\n }\n\n context.fillStyle = this.backgroundColor.toCssColorString();\n context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);\n\n if (defined(start)) {\n if (!defined(stop)) {\n stop = renderState.timeBarWidth;\n }\n context.fillStyle = this.color.toCssColorString();\n context.fillRect(\n start,\n renderState.y,\n Math.max(stop - start, 1),\n this.height\n );\n }\n }\n};\nexport default TimelineTrack;\n","import ClockRange from \"../../Core/ClockRange.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\nimport getElement from \"../getElement.js\";\nimport TimelineHighlightRange from \"./TimelineHighlightRange.js\";\nimport TimelineTrack from \"./TimelineTrack.js\";\n\nvar timelineWheelDelta = 1e12;\n\nvar timelineMouseMode = {\n none: 0,\n scrub: 1,\n slide: 2,\n zoom: 3,\n touchOnly: 4,\n};\nvar timelineTouchMode = {\n none: 0,\n scrub: 1,\n slideZoom: 2,\n singleTap: 3,\n ignore: 4,\n};\n\nvar timelineTicScales = [\n 0.001,\n 0.002,\n 0.005,\n 0.01,\n 0.02,\n 0.05,\n 0.1,\n 0.25,\n 0.5,\n 1.0,\n 2.0,\n 5.0,\n 10.0,\n 15.0,\n 30.0,\n 60.0, // 1min\n 120.0, // 2min\n 300.0, // 5min\n 600.0, // 10min\n 900.0, // 15min\n 1800.0, // 30min\n 3600.0, // 1hr\n 7200.0, // 2hr\n 14400.0, // 4hr\n 21600.0, // 6hr\n 43200.0, // 12hr\n 86400.0, // 24hr\n 172800.0, // 2days\n 345600.0, // 4days\n 604800.0, // 7days\n 1296000.0, // 15days\n 2592000.0, // 30days\n 5184000.0, // 60days\n 7776000.0, // 90days\n 15552000.0, // 180days\n 31536000.0, // 365days\n 63072000.0, // 2years\n 126144000.0, // 4years\n 157680000.0, // 5years\n 315360000.0, // 10years\n 630720000.0, // 20years\n 1261440000.0, // 40years\n 1576800000.0, // 50years\n 3153600000.0, // 100years\n 6307200000.0, // 200years\n 12614400000.0, // 400years\n 15768000000.0, // 500years\n 31536000000.0, // 1000years\n];\n\nvar timelineMonthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\n/**\n * The Timeline is a widget for displaying and controlling the current scene time.\n * @alias Timeline\n * @constructor\n *\n * @param {Element} container The parent HTML container node for this widget.\n * @param {Clock} clock The clock to use.\n */\nfunction Timeline(container, clock) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n if (!defined(clock)) {\n throw new DeveloperError(\"clock is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var ownerDocument = container.ownerDocument;\n\n /**\n * Gets the parent container.\n * @type {Element}\n */\n this.container = container;\n\n var topDiv = ownerDocument.createElement(\"div\");\n topDiv.className = \"cesium-timeline-main\";\n container.appendChild(topDiv);\n this._topDiv = topDiv;\n\n this._endJulian = undefined;\n this._epochJulian = undefined;\n this._lastXPos = undefined;\n this._scrubElement = undefined;\n this._startJulian = undefined;\n this._timeBarSecondsSpan = undefined;\n this._clock = clock;\n this._scrubJulian = clock.currentTime;\n this._mainTicSpan = -1;\n this._mouseMode = timelineMouseMode.none;\n this._touchMode = timelineTouchMode.none;\n this._touchState = {\n centerX: 0,\n spanX: 0,\n };\n this._mouseX = 0;\n this._timelineDrag = 0;\n this._timelineDragLocation = undefined;\n this._lastHeight = undefined;\n this._lastWidth = undefined;\n\n this._topDiv.innerHTML =\n '<div class=\"cesium-timeline-bar\"></div><div class=\"cesium-timeline-trackContainer\">' +\n '<canvas class=\"cesium-timeline-tracks\" width=\"10\" height=\"1\">' +\n '</canvas></div><div class=\"cesium-timeline-needle\"></div><span class=\"cesium-timeline-ruler\"></span>';\n this._timeBarEle = this._topDiv.childNodes[0];\n this._trackContainer = this._topDiv.childNodes[1];\n this._trackListEle = this._topDiv.childNodes[1].childNodes[0];\n this._needleEle = this._topDiv.childNodes[2];\n this._rulerEle = this._topDiv.childNodes[3];\n this._context = this._trackListEle.getContext(\"2d\");\n\n this._trackList = [];\n this._highlightRanges = [];\n\n this.zoomTo(clock.startTime, clock.stopTime);\n\n this._onMouseDown = createMouseDownCallback(this);\n this._onMouseUp = createMouseUpCallback(this);\n this._onMouseMove = createMouseMoveCallback(this);\n this._onMouseWheel = createMouseWheelCallback(this);\n this._onTouchStart = createTouchStartCallback(this);\n this._onTouchMove = createTouchMoveCallback(this);\n this._onTouchEnd = createTouchEndCallback(this);\n\n var timeBarEle = this._timeBarEle;\n ownerDocument.addEventListener(\"mouseup\", this._onMouseUp, false);\n ownerDocument.addEventListener(\"mousemove\", this._onMouseMove, false);\n timeBarEle.addEventListener(\"mousedown\", this._onMouseDown, false);\n timeBarEle.addEventListener(\"DOMMouseScroll\", this._onMouseWheel, false); // Mozilla mouse wheel\n timeBarEle.addEventListener(\"mousewheel\", this._onMouseWheel, false);\n timeBarEle.addEventListener(\"touchstart\", this._onTouchStart, false);\n timeBarEle.addEventListener(\"touchmove\", this._onTouchMove, false);\n timeBarEle.addEventListener(\"touchend\", this._onTouchEnd, false);\n timeBarEle.addEventListener(\"touchcancel\", this._onTouchEnd, false);\n\n this._topDiv.oncontextmenu = function () {\n return false;\n };\n\n clock.onTick.addEventListener(this.updateFromClock, this);\n this.updateFromClock();\n}\n\n/**\n * @private\n */\nTimeline.prototype.addEventListener = function (type, listener, useCapture) {\n this._topDiv.addEventListener(type, listener, useCapture);\n};\n\n/**\n * @private\n */\nTimeline.prototype.removeEventListener = function (type, listener, useCapture) {\n this._topDiv.removeEventListener(type, listener, useCapture);\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nTimeline.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nTimeline.prototype.destroy = function () {\n this._clock.onTick.removeEventListener(this.updateFromClock, this);\n\n var doc = this.container.ownerDocument;\n doc.removeEventListener(\"mouseup\", this._onMouseUp, false);\n doc.removeEventListener(\"mousemove\", this._onMouseMove, false);\n\n var timeBarEle = this._timeBarEle;\n timeBarEle.removeEventListener(\"mousedown\", this._onMouseDown, false);\n timeBarEle.removeEventListener(\"DOMMouseScroll\", this._onMouseWheel, false); // Mozilla mouse wheel\n timeBarEle.removeEventListener(\"mousewheel\", this._onMouseWheel, false);\n timeBarEle.removeEventListener(\"touchstart\", this._onTouchStart, false);\n timeBarEle.removeEventListener(\"touchmove\", this._onTouchMove, false);\n timeBarEle.removeEventListener(\"touchend\", this._onTouchEnd, false);\n timeBarEle.removeEventListener(\"touchcancel\", this._onTouchEnd, false);\n this.container.removeChild(this._topDiv);\n destroyObject(this);\n};\n\n/**\n * @private\n */\nTimeline.prototype.addHighlightRange = function (color, heightInPx, base) {\n var newHighlightRange = new TimelineHighlightRange(color, heightInPx, base);\n this._highlightRanges.push(newHighlightRange);\n this.resize();\n return newHighlightRange;\n};\n\n/**\n * @private\n */\nTimeline.prototype.addTrack = function (\n interval,\n heightInPx,\n color,\n backgroundColor\n) {\n var newTrack = new TimelineTrack(\n interval,\n heightInPx,\n color,\n backgroundColor\n );\n this._trackList.push(newTrack);\n this._lastHeight = undefined;\n this.resize();\n return newTrack;\n};\n\n/**\n * Sets the view to the provided times.\n *\n * @param {JulianDate} startTime The start time.\n * @param {JulianDate} stopTime The stop time.\n */\nTimeline.prototype.zoomTo = function (startTime, stopTime) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(startTime)) {\n throw new DeveloperError(\"startTime is required.\");\n }\n if (!defined(stopTime)) {\n throw new DeveloperError(\"stopTime is required\");\n }\n if (JulianDate.lessThanOrEquals(stopTime, startTime)) {\n throw new DeveloperError(\"Start time must come before end time.\");\n }\n //>>includeEnd('debug');\n\n this._startJulian = startTime;\n this._endJulian = stopTime;\n this._timeBarSecondsSpan = JulianDate.secondsDifference(stopTime, startTime);\n\n // If clock is not unbounded, clamp timeline range to clock.\n if (this._clock && this._clock.clockRange !== ClockRange.UNBOUNDED) {\n var clockStart = this._clock.startTime;\n var clockEnd = this._clock.stopTime;\n var clockSpan = JulianDate.secondsDifference(clockEnd, clockStart);\n var startOffset = JulianDate.secondsDifference(\n clockStart,\n this._startJulian\n );\n var endOffset = JulianDate.secondsDifference(clockEnd, this._endJulian);\n\n if (this._timeBarSecondsSpan >= clockSpan) {\n // if new duration longer than clock range duration, clamp to full range.\n this._timeBarSecondsSpan = clockSpan;\n this._startJulian = this._clock.startTime;\n this._endJulian = this._clock.stopTime;\n } else if (startOffset > 0) {\n // if timeline start is before clock start, shift right\n this._endJulian = JulianDate.addSeconds(\n this._endJulian,\n startOffset,\n new JulianDate()\n );\n this._startJulian = clockStart;\n this._timeBarSecondsSpan = JulianDate.secondsDifference(\n this._endJulian,\n this._startJulian\n );\n } else if (endOffset < 0) {\n // if timeline end is after clock end, shift left\n this._startJulian = JulianDate.addSeconds(\n this._startJulian,\n endOffset,\n new JulianDate()\n );\n this._endJulian = clockEnd;\n this._timeBarSecondsSpan = JulianDate.secondsDifference(\n this._endJulian,\n this._startJulian\n );\n }\n }\n\n this._makeTics();\n\n var evt = document.createEvent(\"Event\");\n evt.initEvent(\"setzoom\", true, true);\n evt.startJulian = this._startJulian;\n evt.endJulian = this._endJulian;\n evt.epochJulian = this._epochJulian;\n evt.totalSpan = this._timeBarSecondsSpan;\n evt.mainTicSpan = this._mainTicSpan;\n this._topDiv.dispatchEvent(evt);\n};\n\n/**\n * @private\n */\nTimeline.prototype.zoomFrom = function (amount) {\n var centerSec = JulianDate.secondsDifference(\n this._scrubJulian,\n this._startJulian\n );\n if (amount > 1 || centerSec < 0 || centerSec > this._timeBarSecondsSpan) {\n centerSec = this._timeBarSecondsSpan * 0.5;\n } else {\n centerSec += centerSec - this._timeBarSecondsSpan * 0.5;\n }\n var centerSecFlip = this._timeBarSecondsSpan - centerSec;\n this.zoomTo(\n JulianDate.addSeconds(\n this._startJulian,\n centerSec - centerSec * amount,\n new JulianDate()\n ),\n JulianDate.addSeconds(\n this._endJulian,\n centerSecFlip * amount - centerSecFlip,\n new JulianDate()\n )\n );\n};\n\nfunction twoDigits(num) {\n return num < 10 ? \"0\" + num.toString() : num.toString();\n}\n\n/**\n * @private\n */\nTimeline.prototype.makeLabel = function (time) {\n var gregorian = JulianDate.toGregorianDate(time);\n var millisecond = gregorian.millisecond,\n millisecondString = \" UTC\";\n if (millisecond > 0 && this._timeBarSecondsSpan < 3600) {\n millisecondString = Math.floor(millisecond).toString();\n while (millisecondString.length < 3) {\n millisecondString = \"0\" + millisecondString;\n }\n millisecondString = \".\" + millisecondString;\n }\n\n return (\n timelineMonthNames[gregorian.month - 1] +\n \" \" +\n gregorian.day +\n \" \" +\n gregorian.year +\n \" \" +\n twoDigits(gregorian.hour) +\n \":\" +\n twoDigits(gregorian.minute) +\n \":\" +\n twoDigits(gregorian.second) +\n millisecondString\n );\n};\n\n/**\n * @private\n */\nTimeline.prototype.smallestTicInPixels = 7.0;\n\n/**\n * @private\n */\nTimeline.prototype._makeTics = function () {\n var timeBar = this._timeBarEle;\n\n var seconds = JulianDate.secondsDifference(\n this._scrubJulian,\n this._startJulian\n );\n var xPos = Math.round(\n (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan\n );\n var scrubX = xPos - 8,\n tic;\n var widget = this;\n\n this._needleEle.style.left = xPos.toString() + \"px\";\n\n var tics = \"\";\n\n var minimumDuration = 0.01;\n var maximumDuration = 31536000000.0; // ~1000 years\n var epsilon = 1e-10;\n\n // If time step size is known, enter it here...\n var minSize = 0;\n\n var duration = this._timeBarSecondsSpan;\n if (duration < minimumDuration) {\n duration = minimumDuration;\n this._timeBarSecondsSpan = minimumDuration;\n this._endJulian = JulianDate.addSeconds(\n this._startJulian,\n minimumDuration,\n new JulianDate()\n );\n } else if (duration > maximumDuration) {\n duration = maximumDuration;\n this._timeBarSecondsSpan = maximumDuration;\n this._endJulian = JulianDate.addSeconds(\n this._startJulian,\n maximumDuration,\n new JulianDate()\n );\n }\n\n var timeBarWidth = this._timeBarEle.clientWidth;\n if (timeBarWidth < 10) {\n timeBarWidth = 10;\n }\n var startJulian = this._startJulian;\n\n // epsilonTime: a small fraction of one pixel width of the timeline, measured in seconds.\n var epsilonTime = Math.min((duration / timeBarWidth) * 1e-5, 0.4);\n\n // epochJulian: a nearby time to be considered \"zero seconds\", should be a round-ish number by human standards.\n var epochJulian;\n var gregorianDate = JulianDate.toGregorianDate(startJulian);\n if (duration > 315360000) {\n // 3650+ days visible, epoch is start of the first visible century.\n epochJulian = JulianDate.fromDate(\n new Date(Date.UTC(Math.floor(gregorianDate.year / 100) * 100, 0))\n );\n } else if (duration > 31536000) {\n // 365+ days visible, epoch is start of the first visible decade.\n epochJulian = JulianDate.fromDate(\n new Date(Date.UTC(Math.floor(gregorianDate.year / 10) * 10, 0))\n );\n } else if (duration > 86400) {\n // 1+ day(s) visible, epoch is start of the year.\n epochJulian = JulianDate.fromDate(\n new Date(Date.UTC(gregorianDate.year, 0))\n );\n } else {\n // Less than a day on timeline, epoch is midnight of the visible day.\n epochJulian = JulianDate.fromDate(\n new Date(\n Date.UTC(gregorianDate.year, gregorianDate.month, gregorianDate.day)\n )\n );\n }\n\n // startTime: Seconds offset of the left side of the timeline from epochJulian.\n var startTime = JulianDate.secondsDifference(\n this._startJulian,\n JulianDate.addSeconds(epochJulian, epsilonTime, new JulianDate())\n );\n // endTime: Seconds offset of the right side of the timeline from epochJulian.\n var endTime = startTime + duration;\n this._epochJulian = epochJulian;\n\n function getStartTic(ticScale) {\n return Math.floor(startTime / ticScale) * ticScale;\n }\n\n function getNextTic(tic, ticScale) {\n return Math.ceil(tic / ticScale + 0.5) * ticScale;\n }\n\n function getAlpha(time) {\n return (time - startTime) / duration;\n }\n\n function remainder(x, y) {\n //return x % y;\n return x - y * Math.round(x / y);\n }\n\n // Width in pixels of a typical label, plus padding\n this._rulerEle.innerHTML = this.makeLabel(\n JulianDate.addSeconds(this._endJulian, -minimumDuration, new JulianDate())\n );\n var sampleWidth = this._rulerEle.offsetWidth + 20;\n if (sampleWidth < 30) {\n // Workaround an apparent IE bug with measuring the width after going full-screen from inside an iframe.\n sampleWidth = 180;\n }\n\n var origMinSize = minSize;\n minSize -= epsilon;\n\n var renderState = {\n startTime: startTime,\n startJulian: startJulian,\n epochJulian: epochJulian,\n duration: duration,\n timeBarWidth: timeBarWidth,\n getAlpha: getAlpha,\n };\n this._highlightRanges.forEach(function (highlightRange) {\n tics += highlightRange.render(renderState);\n });\n\n // Calculate tic mark label spacing in the TimeBar.\n var mainTic = 0.0,\n subTic = 0.0,\n tinyTic = 0.0;\n // Ideal labeled tic as percentage of zoom interval\n var idealTic = sampleWidth / timeBarWidth;\n if (idealTic > 1.0) {\n // Clamp to width of window, for thin windows.\n idealTic = 1.0;\n }\n // Ideal labeled tic size in seconds\n idealTic *= this._timeBarSecondsSpan;\n var ticIndex = -1,\n smallestIndex = -1;\n\n var i,\n ticScaleLen = timelineTicScales.length;\n for (i = 0; i < ticScaleLen; ++i) {\n var sc = timelineTicScales[i];\n ++ticIndex;\n mainTic = sc;\n // Find acceptable main tic size not smaller than ideal size.\n if (sc > idealTic && sc > minSize) {\n break;\n }\n if (\n smallestIndex < 0 &&\n timeBarWidth * (sc / this._timeBarSecondsSpan) >= this.smallestTicInPixels\n ) {\n smallestIndex = ticIndex;\n }\n }\n if (ticIndex > 0) {\n while (ticIndex > 0) {\n // Compute sub-tic size that evenly divides main tic.\n --ticIndex;\n if (Math.abs(remainder(mainTic, timelineTicScales[ticIndex])) < 0.00001) {\n if (timelineTicScales[ticIndex] >= minSize) {\n subTic = timelineTicScales[ticIndex];\n }\n break;\n }\n }\n\n if (smallestIndex >= 0) {\n while (smallestIndex < ticIndex) {\n // Compute tiny tic size that evenly divides sub-tic.\n if (\n Math.abs(remainder(subTic, timelineTicScales[smallestIndex])) <\n 0.00001 &&\n timelineTicScales[smallestIndex] >= minSize\n ) {\n tinyTic = timelineTicScales[smallestIndex];\n break;\n }\n ++smallestIndex;\n }\n }\n }\n\n minSize = origMinSize;\n if (\n minSize > epsilon &&\n tinyTic < 0.00001 &&\n Math.abs(minSize - mainTic) > epsilon\n ) {\n tinyTic = minSize;\n if (minSize <= mainTic + epsilon) {\n subTic = 0.0;\n }\n }\n\n var lastTextLeft = -999999,\n textWidth;\n if (timeBarWidth * (tinyTic / this._timeBarSecondsSpan) >= 3.0) {\n for (\n tic = getStartTic(tinyTic);\n tic <= endTime;\n tic = getNextTic(tic, tinyTic)\n ) {\n tics +=\n '<span class=\"cesium-timeline-ticTiny\" style=\"left: ' +\n Math.round(timeBarWidth * getAlpha(tic)).toString() +\n 'px;\"></span>';\n }\n }\n if (timeBarWidth * (subTic / this._timeBarSecondsSpan) >= 3.0) {\n for (\n tic = getStartTic(subTic);\n tic <= endTime;\n tic = getNextTic(tic, subTic)\n ) {\n tics +=\n '<span class=\"cesium-timeline-ticSub\" style=\"left: ' +\n Math.round(timeBarWidth * getAlpha(tic)).toString() +\n 'px;\"></span>';\n }\n }\n if (timeBarWidth * (mainTic / this._timeBarSecondsSpan) >= 2.0) {\n this._mainTicSpan = mainTic;\n endTime += mainTic;\n tic = getStartTic(mainTic);\n var leapSecond = JulianDate.computeTaiMinusUtc(epochJulian);\n while (tic <= endTime) {\n var ticTime = JulianDate.addSeconds(\n startJulian,\n tic - startTime,\n new JulianDate()\n );\n if (mainTic > 2.1) {\n var ticLeap = JulianDate.computeTaiMinusUtc(ticTime);\n if (Math.abs(ticLeap - leapSecond) > 0.1) {\n tic += ticLeap - leapSecond;\n ticTime = JulianDate.addSeconds(\n startJulian,\n tic - startTime,\n new JulianDate()\n );\n }\n }\n var ticLeft = Math.round(timeBarWidth * getAlpha(tic));\n var ticLabel = this.makeLabel(ticTime);\n this._rulerEle.innerHTML = ticLabel;\n textWidth = this._rulerEle.offsetWidth;\n if (textWidth < 10) {\n // IE iframe fullscreen sampleWidth workaround, continued.\n textWidth = sampleWidth;\n }\n var labelLeft = ticLeft - (textWidth / 2 - 1);\n if (labelLeft > lastTextLeft) {\n lastTextLeft = labelLeft + textWidth + 5;\n tics +=\n '<span class=\"cesium-timeline-ticMain\" style=\"left: ' +\n ticLeft.toString() +\n 'px;\"></span>' +\n '<span class=\"cesium-timeline-ticLabel\" style=\"left: ' +\n labelLeft.toString() +\n 'px;\">' +\n ticLabel +\n \"</span>\";\n } else {\n tics +=\n '<span class=\"cesium-timeline-ticSub\" style=\"left: ' +\n ticLeft.toString() +\n 'px;\"></span>';\n }\n tic = getNextTic(tic, mainTic);\n }\n } else {\n this._mainTicSpan = -1;\n }\n\n tics +=\n '<span class=\"cesium-timeline-icon16\" style=\"left:' +\n scrubX +\n 'px;bottom:0;background-position: 0 0;\"></span>';\n timeBar.innerHTML = tics;\n this._scrubElement = timeBar.lastChild;\n\n // Clear track canvas.\n this._context.clearRect(\n 0,\n 0,\n this._trackListEle.width,\n this._trackListEle.height\n );\n\n renderState.y = 0;\n this._trackList.forEach(function (track) {\n track.render(widget._context, renderState);\n renderState.y += track.height;\n });\n};\n\n/**\n * @private\n */\nTimeline.prototype.updateFromClock = function () {\n this._scrubJulian = this._clock.currentTime;\n var scrubElement = this._scrubElement;\n if (defined(this._scrubElement)) {\n var seconds = JulianDate.secondsDifference(\n this._scrubJulian,\n this._startJulian\n );\n var xPos = Math.round(\n (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan\n );\n\n if (this._lastXPos !== xPos) {\n this._lastXPos = xPos;\n\n scrubElement.style.left = xPos - 8 + \"px\";\n this._needleEle.style.left = xPos + \"px\";\n }\n }\n if (defined(this._timelineDragLocation)) {\n this._setTimeBarTime(\n this._timelineDragLocation,\n (this._timelineDragLocation * this._timeBarSecondsSpan) /\n this._topDiv.clientWidth\n );\n this.zoomTo(\n JulianDate.addSeconds(\n this._startJulian,\n this._timelineDrag,\n new JulianDate()\n ),\n JulianDate.addSeconds(\n this._endJulian,\n this._timelineDrag,\n new JulianDate()\n )\n );\n }\n};\n\n/**\n * @private\n */\nTimeline.prototype._setTimeBarTime = function (xPos, seconds) {\n xPos = Math.round(xPos);\n this._scrubJulian = JulianDate.addSeconds(\n this._startJulian,\n seconds,\n new JulianDate()\n );\n if (this._scrubElement) {\n var scrubX = xPos - 8;\n this._scrubElement.style.left = scrubX.toString() + \"px\";\n this._needleEle.style.left = xPos.toString() + \"px\";\n }\n\n var evt = document.createEvent(\"Event\");\n evt.initEvent(\"settime\", true, true);\n evt.clientX = xPos;\n evt.timeSeconds = seconds;\n evt.timeJulian = this._scrubJulian;\n evt.clock = this._clock;\n this._topDiv.dispatchEvent(evt);\n};\n\nfunction createMouseDownCallback(timeline) {\n return function (e) {\n if (timeline._mouseMode !== timelineMouseMode.touchOnly) {\n if (e.button === 0) {\n timeline._mouseMode = timelineMouseMode.scrub;\n if (timeline._scrubElement) {\n timeline._scrubElement.style.backgroundPosition = \"-16px 0\";\n }\n timeline._onMouseMove(e);\n } else {\n timeline._mouseX = e.clientX;\n if (e.button === 2) {\n timeline._mouseMode = timelineMouseMode.zoom;\n } else {\n timeline._mouseMode = timelineMouseMode.slide;\n }\n }\n }\n e.preventDefault();\n };\n}\n\nfunction createMouseUpCallback(timeline) {\n return function (e) {\n timeline._mouseMode = timelineMouseMode.none;\n if (timeline._scrubElement) {\n timeline._scrubElement.style.backgroundPosition = \"0 0\";\n }\n timeline._timelineDrag = 0;\n timeline._timelineDragLocation = undefined;\n };\n}\n\nfunction createMouseMoveCallback(timeline) {\n return function (e) {\n var dx;\n if (timeline._mouseMode === timelineMouseMode.scrub) {\n e.preventDefault();\n var x = e.clientX - timeline._topDiv.getBoundingClientRect().left;\n\n if (x < 0) {\n timeline._timelineDragLocation = 0;\n timeline._timelineDrag = -0.01 * timeline._timeBarSecondsSpan;\n } else if (x > timeline._topDiv.clientWidth) {\n timeline._timelineDragLocation = timeline._topDiv.clientWidth;\n timeline._timelineDrag = 0.01 * timeline._timeBarSecondsSpan;\n } else {\n timeline._timelineDragLocation = undefined;\n timeline._setTimeBarTime(\n x,\n (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth\n );\n }\n } else if (timeline._mouseMode === timelineMouseMode.slide) {\n dx = timeline._mouseX - e.clientX;\n timeline._mouseX = e.clientX;\n if (dx !== 0) {\n var dsec =\n (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth;\n timeline.zoomTo(\n JulianDate.addSeconds(timeline._startJulian, dsec, new JulianDate()),\n JulianDate.addSeconds(timeline._endJulian, dsec, new JulianDate())\n );\n }\n } else if (timeline._mouseMode === timelineMouseMode.zoom) {\n dx = timeline._mouseX - e.clientX;\n timeline._mouseX = e.clientX;\n if (dx !== 0) {\n timeline.zoomFrom(Math.pow(1.01, dx));\n }\n }\n };\n}\n\nfunction createMouseWheelCallback(timeline) {\n return function (e) {\n var dy = e.wheelDeltaY || e.wheelDelta || -e.detail;\n timelineWheelDelta = Math.max(\n Math.min(Math.abs(dy), timelineWheelDelta),\n 1\n );\n dy /= timelineWheelDelta;\n timeline.zoomFrom(Math.pow(1.05, -dy));\n };\n}\n\nfunction createTouchStartCallback(timeline) {\n return function (e) {\n var len = e.touches.length,\n seconds,\n xPos,\n leftX = timeline._topDiv.getBoundingClientRect().left;\n e.preventDefault();\n timeline._mouseMode = timelineMouseMode.touchOnly;\n if (len === 1) {\n seconds = JulianDate.secondsDifference(\n timeline._scrubJulian,\n timeline._startJulian\n );\n xPos = Math.round(\n (seconds * timeline._topDiv.clientWidth) /\n timeline._timeBarSecondsSpan +\n leftX\n );\n if (Math.abs(e.touches[0].clientX - xPos) < 50) {\n timeline._touchMode = timelineTouchMode.scrub;\n if (timeline._scrubElement) {\n timeline._scrubElement.style.backgroundPosition =\n len === 1 ? \"-16px 0\" : \"0 0\";\n }\n } else {\n timeline._touchMode = timelineTouchMode.singleTap;\n timeline._touchState.centerX = e.touches[0].clientX - leftX;\n }\n } else if (len === 2) {\n timeline._touchMode = timelineTouchMode.slideZoom;\n timeline._touchState.centerX =\n (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX;\n timeline._touchState.spanX = Math.abs(\n e.touches[0].clientX - e.touches[1].clientX\n );\n } else {\n timeline._touchMode = timelineTouchMode.ignore;\n }\n };\n}\n\nfunction createTouchEndCallback(timeline) {\n return function (e) {\n var len = e.touches.length,\n leftX = timeline._topDiv.getBoundingClientRect().left;\n if (timeline._touchMode === timelineTouchMode.singleTap) {\n timeline._touchMode = timelineTouchMode.scrub;\n timeline._onTouchMove(e);\n } else if (timeline._touchMode === timelineTouchMode.scrub) {\n timeline._onTouchMove(e);\n }\n timeline._mouseMode = timelineMouseMode.touchOnly;\n if (len !== 1) {\n timeline._touchMode =\n len > 0 ? timelineTouchMode.ignore : timelineTouchMode.none;\n } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n timeline._touchState.centerX = e.touches[0].clientX - leftX;\n }\n if (timeline._scrubElement) {\n timeline._scrubElement.style.backgroundPosition = \"0 0\";\n }\n };\n}\n\nfunction createTouchMoveCallback(timeline) {\n return function (e) {\n var dx,\n x,\n len,\n newCenter,\n newSpan,\n newStartTime,\n zoom = 1,\n leftX = timeline._topDiv.getBoundingClientRect().left;\n if (timeline._touchMode === timelineTouchMode.singleTap) {\n timeline._touchMode = timelineTouchMode.slideZoom;\n }\n timeline._mouseMode = timelineMouseMode.touchOnly;\n if (timeline._touchMode === timelineTouchMode.scrub) {\n e.preventDefault();\n if (e.changedTouches.length === 1) {\n x = e.changedTouches[0].clientX - leftX;\n if (x >= 0 && x <= timeline._topDiv.clientWidth) {\n timeline._setTimeBarTime(\n x,\n (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth\n );\n }\n }\n } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n len = e.touches.length;\n if (len === 2) {\n newCenter = (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX;\n newSpan = Math.abs(e.touches[0].clientX - e.touches[1].clientX);\n } else if (len === 1) {\n newCenter = e.touches[0].clientX - leftX;\n newSpan = 0;\n }\n\n if (defined(newCenter)) {\n if (newSpan > 0 && timeline._touchState.spanX > 0) {\n // Zoom and slide\n zoom = timeline._touchState.spanX / newSpan;\n newStartTime = JulianDate.addSeconds(\n timeline._startJulian,\n (timeline._touchState.centerX * timeline._timeBarSecondsSpan -\n newCenter * timeline._timeBarSecondsSpan * zoom) /\n timeline._topDiv.clientWidth,\n new JulianDate()\n );\n } else {\n // Slide to newCenter\n dx = timeline._touchState.centerX - newCenter;\n newStartTime = JulianDate.addSeconds(\n timeline._startJulian,\n (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth,\n new JulianDate()\n );\n }\n\n timeline.zoomTo(\n newStartTime,\n JulianDate.addSeconds(\n newStartTime,\n timeline._timeBarSecondsSpan * zoom,\n new JulianDate()\n )\n );\n timeline._touchState.centerX = newCenter;\n timeline._touchState.spanX = newSpan;\n }\n }\n };\n}\n\n/**\n * Resizes the widget to match the container size.\n */\nTimeline.prototype.resize = function () {\n var width = this.container.clientWidth;\n var height = this.container.clientHeight;\n\n if (width === this._lastWidth && height === this._lastHeight) {\n return;\n }\n\n this._trackContainer.style.height = height + \"px\";\n\n var trackListHeight = 1;\n this._trackList.forEach(function (track) {\n trackListHeight += track.height;\n });\n this._trackListEle.style.height = trackListHeight.toString() + \"px\";\n this._trackListEle.width = this._trackListEle.clientWidth;\n this._trackListEle.height = trackListHeight;\n this._makeTics();\n\n this._lastXPos = undefined;\n this._lastWidth = width;\n this._lastHeight = height;\n};\nexport default Timeline;\n","import defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport EventHelper from \"../../Core/EventHelper.js\";\nimport Fullscreen from \"../../Core/Fullscreen.js\";\nimport OrthographicFrustum from \"../../Core/OrthographicFrustum.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport NoSleep from \"../../ThirdParty/NoSleep.js\";\nimport createCommand from \"../createCommand.js\";\nimport getElement from \"../getElement.js\";\n\nfunction lockScreen(orientation) {\n var locked = false;\n var screen = window.screen;\n if (defined(screen)) {\n if (defined(screen.lockOrientation)) {\n locked = screen.lockOrientation(orientation);\n } else if (defined(screen.mozLockOrientation)) {\n locked = screen.mozLockOrientation(orientation);\n } else if (defined(screen.msLockOrientation)) {\n locked = screen.msLockOrientation(orientation);\n } else if (defined(screen.orientation && screen.orientation.lock)) {\n locked = screen.orientation.lock(orientation);\n }\n }\n return locked;\n}\n\nfunction unlockScreen() {\n var screen = window.screen;\n if (defined(screen)) {\n if (defined(screen.unlockOrientation)) {\n screen.unlockOrientation();\n } else if (defined(screen.mozUnlockOrientation)) {\n screen.mozUnlockOrientation();\n } else if (defined(screen.msUnlockOrientation)) {\n screen.msUnlockOrientation();\n } else if (defined(screen.orientation && screen.orientation.unlock)) {\n screen.orientation.unlock();\n }\n }\n}\n\nfunction toggleVR(viewModel, scene, isVRMode, isOrthographic) {\n if (isOrthographic()) {\n return;\n }\n\n if (isVRMode()) {\n scene.useWebVR = false;\n if (viewModel._locked) {\n unlockScreen();\n viewModel._locked = false;\n }\n viewModel._noSleep.disable();\n Fullscreen.exitFullscreen();\n isVRMode(false);\n } else {\n if (!Fullscreen.fullscreen) {\n Fullscreen.requestFullscreen(viewModel._vrElement);\n }\n viewModel._noSleep.enable();\n if (!viewModel._locked) {\n viewModel._locked = lockScreen(\"landscape\");\n }\n scene.useWebVR = true;\n isVRMode(true);\n }\n}\n\n/**\n * The view model for {@link VRButton}.\n * @alias VRButtonViewModel\n * @constructor\n *\n * @param {Scene} scene The scene.\n * @param {Element|String} [vrElement=document.body] The element or id to be placed into VR mode.\n */\nfunction VRButtonViewModel(scene, vrElement) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n var that = this;\n\n var isEnabled = knockout.observable(Fullscreen.enabled);\n var isVRMode = knockout.observable(false);\n\n /**\n * Gets whether or not VR mode is active.\n *\n * @type {Boolean}\n */\n this.isVRMode = undefined;\n knockout.defineProperty(this, \"isVRMode\", {\n get: function () {\n return isVRMode();\n },\n });\n\n /**\n * Gets or sets whether or not VR functionality should be enabled.\n *\n * @type {Boolean}\n * @see Fullscreen.enabled\n */\n this.isVREnabled = undefined;\n knockout.defineProperty(this, \"isVREnabled\", {\n get: function () {\n return isEnabled();\n },\n set: function (value) {\n isEnabled(value && Fullscreen.enabled);\n },\n });\n\n /**\n * Gets the tooltip. This property is observable.\n *\n * @type {String}\n */\n this.tooltip = undefined;\n knockout.defineProperty(this, \"tooltip\", function () {\n if (!isEnabled()) {\n return \"VR mode is unavailable\";\n }\n return isVRMode() ? \"Exit VR mode\" : \"Enter VR mode\";\n });\n\n var isOrthographic = knockout.observable(false);\n\n this._isOrthographic = undefined;\n knockout.defineProperty(this, \"_isOrthographic\", {\n get: function () {\n return isOrthographic();\n },\n });\n\n this._eventHelper = new EventHelper();\n this._eventHelper.add(scene.preRender, function () {\n isOrthographic(scene.camera.frustum instanceof OrthographicFrustum);\n });\n\n this._locked = false;\n this._noSleep = new NoSleep();\n\n this._command = createCommand(function () {\n toggleVR(that, scene, isVRMode, isOrthographic);\n }, knockout.getObservable(this, \"isVREnabled\"));\n\n this._vrElement = defaultValue(getElement(vrElement), document.body);\n\n this._callback = function () {\n if (!Fullscreen.fullscreen && isVRMode()) {\n scene.useWebVR = false;\n if (that._locked) {\n unlockScreen();\n that._locked = false;\n }\n that._noSleep.disable();\n isVRMode(false);\n }\n };\n document.addEventListener(Fullscreen.changeEventName, this._callback);\n}\n\nObject.defineProperties(VRButtonViewModel.prototype, {\n /**\n * Gets or sets the HTML element to place into VR mode when the\n * corresponding button is pressed.\n * @memberof VRButtonViewModel.prototype\n *\n * @type {Element}\n */\n vrElement: {\n //TODO:@exception {DeveloperError} value must be a valid HTML Element.\n get: function () {\n return this._vrElement;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n if (!(value instanceof Element)) {\n throw new DeveloperError(\"value must be a valid Element.\");\n }\n //>>includeEnd('debug');\n\n this._vrElement = value;\n },\n },\n\n /**\n * Gets the Command to toggle VR mode.\n * @memberof VRButtonViewModel.prototype\n *\n * @type {Command}\n */\n command: {\n get: function () {\n return this._command;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nVRButtonViewModel.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the view model. Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nVRButtonViewModel.prototype.destroy = function () {\n this._eventHelper.removeAll();\n document.removeEventListener(Fullscreen.changeEventName, this._callback);\n destroyObject(this);\n};\nexport default VRButtonViewModel;\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport getElement from \"../getElement.js\";\nimport VRButtonViewModel from \"./VRButtonViewModel.js\";\n\nvar enterVRPath =\n \"M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z\";\nvar exitVRPath =\n \"M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z\";\n\n/**\n * A single button widget for toggling vr mode.\n *\n * @alias VRButton\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The scene.\n * @param {Element|String} [vrElement=document.body] The element or id to be placed into vr mode.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction VRButton(container, scene, vrElement) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n if (!defined(scene)) {\n throw new DeveloperError(\"scene is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n\n var viewModel = new VRButtonViewModel(scene, vrElement);\n\n viewModel._exitVRPath = exitVRPath;\n viewModel._enterVRPath = enterVRPath;\n\n var element = document.createElement(\"button\");\n element.type = \"button\";\n element.className = \"cesium-button cesium-vrButton\";\n element.setAttribute(\n \"data-bind\",\n '\\\ncss: { \"cesium-button-disabled\" : _isOrthographic }, \\\nattr: { title: tooltip },\\\nclick: command,\\\nenable: isVREnabled,\\\ncesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'\n );\n\n container.appendChild(element);\n\n knockout.applyBindings(viewModel, element);\n\n this._container = container;\n this._viewModel = viewModel;\n this._element = element;\n}\n\nObject.defineProperties(VRButton.prototype, {\n /**\n * Gets the parent container.\n * @memberof VRButton.prototype\n *\n * @type {Element}\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the view model.\n * @memberof VRButton.prototype\n *\n * @type {VRButtonViewModel}\n */\n viewModel: {\n get: function () {\n return this._viewModel;\n },\n },\n});\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nVRButton.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nVRButton.prototype.destroy = function () {\n this._viewModel.destroy();\n\n knockout.cleanNode(this._element);\n this._container.removeChild(this._element);\n\n return destroyObject(this);\n};\nexport default VRButton;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartographic from \"../../Core/Cartographic.js\";\nimport Clock from \"../../Core/Clock.js\";\nimport defaultValue from \"../../Core/defaultValue.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Event from \"../../Core/Event.js\";\nimport EventHelper from \"../../Core/EventHelper.js\";\nimport HeadingPitchRange from \"../../Core/HeadingPitchRange.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport ScreenSpaceEventType from \"../../Core/ScreenSpaceEventType.js\";\nimport BoundingSphereState from \"../../DataSources/BoundingSphereState.js\";\nimport ConstantPositionProperty from \"../../DataSources/ConstantPositionProperty.js\";\nimport DataSourceCollection from \"../../DataSources/DataSourceCollection.js\";\nimport DataSourceDisplay from \"../../DataSources/DataSourceDisplay.js\";\nimport Entity from \"../../DataSources/Entity.js\";\nimport EntityView from \"../../DataSources/EntityView.js\";\nimport Property from \"../../DataSources/Property.js\";\nimport Cesium3DTileset from \"../../Scene/Cesium3DTileset.js\";\nimport computeFlyToLocationForRectangle from \"../../Scene/computeFlyToLocationForRectangle.js\";\nimport ImageryLayer from \"../../Scene/ImageryLayer.js\";\nimport SceneMode from \"../../Scene/SceneMode.js\";\nimport TimeDynamicPointCloud from \"../../Scene/TimeDynamicPointCloud.js\";\nimport knockout from \"../../ThirdParty/knockout.js\";\nimport when from \"../../ThirdParty/when.js\";\nimport Animation from \"../Animation/Animation.js\";\nimport AnimationViewModel from \"../Animation/AnimationViewModel.js\";\nimport BaseLayerPicker from \"../BaseLayerPicker/BaseLayerPicker.js\";\nimport createDefaultImageryProviderViewModels from \"../BaseLayerPicker/createDefaultImageryProviderViewModels.js\";\nimport createDefaultTerrainProviderViewModels from \"../BaseLayerPicker/createDefaultTerrainProviderViewModels.js\";\nimport CesiumWidget from \"../CesiumWidget/CesiumWidget.js\";\nimport ClockViewModel from \"../ClockViewModel.js\";\nimport FullscreenButton from \"../FullscreenButton/FullscreenButton.js\";\nimport Geocoder from \"../Geocoder/Geocoder.js\";\nimport getElement from \"../getElement.js\";\nimport HomeButton from \"../HomeButton/HomeButton.js\";\nimport InfoBox from \"../InfoBox/InfoBox.js\";\nimport NavigationHelpButton from \"../NavigationHelpButton/NavigationHelpButton.js\";\nimport ProjectionPicker from \"../ProjectionPicker/ProjectionPicker.js\";\nimport SceneModePicker from \"../SceneModePicker/SceneModePicker.js\";\nimport SelectionIndicator from \"../SelectionIndicator/SelectionIndicator.js\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\nimport Timeline from \"../Timeline/Timeline.js\";\nimport VRButton from \"../VRButton/VRButton.js\";\n\nvar boundingSphereScratch = new BoundingSphere();\n\nfunction onTimelineScrubfunction(e) {\n var clock = e.clock;\n clock.currentTime = e.timeJulian;\n clock.shouldAnimate = false;\n}\n\nfunction pickEntity(viewer, e) {\n var picked = viewer.scene.pick(e.position);\n if (defined(picked)) {\n var id = defaultValue(picked.id, picked.primitive.id);\n if (id instanceof Entity) {\n return id;\n }\n }\n\n // No regular entity picked. Try picking features from imagery layers.\n if (defined(viewer.scene.globe)) {\n return pickImageryLayerFeature(viewer, e.position);\n }\n}\n\nfunction trackDataSourceClock(timeline, clock, dataSource) {\n if (defined(dataSource)) {\n var dataSourceClock = dataSource.clock;\n if (defined(dataSourceClock)) {\n dataSourceClock.getValue(clock);\n if (defined(timeline)) {\n timeline.updateFromClock();\n timeline.zoomTo(dataSourceClock.startTime, dataSourceClock.stopTime);\n }\n }\n }\n}\n\nvar cartesian3Scratch = new Cartesian3();\n\nfunction pickImageryLayerFeature(viewer, windowPosition) {\n var scene = viewer.scene;\n var pickRay = scene.camera.getPickRay(windowPosition);\n var imageryLayerFeaturePromise = scene.imageryLayers.pickImageryLayerFeatures(\n pickRay,\n scene\n );\n if (!defined(imageryLayerFeaturePromise)) {\n return;\n }\n\n // Imagery layer feature picking is asynchronous, so put up a message while loading.\n var loadingMessage = new Entity({\n id: \"Loading...\",\n description: \"Loading feature information...\",\n });\n\n when(\n imageryLayerFeaturePromise,\n function (features) {\n // Has this async pick been superseded by a later one?\n if (viewer.selectedEntity !== loadingMessage) {\n return;\n }\n\n if (!defined(features) || features.length === 0) {\n viewer.selectedEntity = createNoFeaturesEntity();\n return;\n }\n\n // Select the first feature.\n var feature = features[0];\n\n var entity = new Entity({\n id: feature.name,\n description: feature.description,\n });\n\n if (defined(feature.position)) {\n var ecfPosition = viewer.scene.globe.ellipsoid.cartographicToCartesian(\n feature.position,\n cartesian3Scratch\n );\n entity.position = new ConstantPositionProperty(ecfPosition);\n }\n\n viewer.selectedEntity = entity;\n },\n function () {\n // Has this async pick been superseded by a later one?\n if (viewer.selectedEntity !== loadingMessage) {\n return;\n }\n viewer.selectedEntity = createNoFeaturesEntity();\n }\n );\n\n return loadingMessage;\n}\n\nfunction createNoFeaturesEntity() {\n return new Entity({\n id: \"None\",\n description: \"No features found.\",\n });\n}\n\nfunction enableVRUI(viewer, enabled) {\n var geocoder = viewer._geocoder;\n var homeButton = viewer._homeButton;\n var sceneModePicker = viewer._sceneModePicker;\n var projectionPicker = viewer._projectionPicker;\n var baseLayerPicker = viewer._baseLayerPicker;\n var animation = viewer._animation;\n var timeline = viewer._timeline;\n var fullscreenButton = viewer._fullscreenButton;\n var infoBox = viewer._infoBox;\n var selectionIndicator = viewer._selectionIndicator;\n\n var visibility = enabled ? \"hidden\" : \"visible\";\n\n if (defined(geocoder)) {\n geocoder.container.style.visibility = visibility;\n }\n if (defined(homeButton)) {\n homeButton.container.style.visibility = visibility;\n }\n if (defined(sceneModePicker)) {\n sceneModePicker.container.style.visibility = visibility;\n }\n if (defined(projectionPicker)) {\n projectionPicker.container.style.visibility = visibility;\n }\n if (defined(baseLayerPicker)) {\n baseLayerPicker.container.style.visibility = visibility;\n }\n if (defined(animation)) {\n animation.container.style.visibility = visibility;\n }\n if (defined(timeline)) {\n timeline.container.style.visibility = visibility;\n }\n if (\n defined(fullscreenButton) &&\n fullscreenButton.viewModel.isFullscreenEnabled\n ) {\n fullscreenButton.container.style.visibility = visibility;\n }\n if (defined(infoBox)) {\n infoBox.container.style.visibility = visibility;\n }\n if (defined(selectionIndicator)) {\n selectionIndicator.container.style.visibility = visibility;\n }\n\n if (viewer._container) {\n var right =\n enabled || !defined(fullscreenButton)\n ? 0\n : fullscreenButton.container.clientWidth;\n viewer._vrButton.container.style.right = right + \"px\";\n\n viewer.forceResize();\n }\n}\n\n/**\n * @typedef {Object} Viewer.ConstructorOptions\n *\n * Initialization options for the Viewer constructor\n *\n * @property {Boolean} [animation=true] If set to false, the Animation widget will not be created.\n * @property {Boolean} [baseLayerPicker=true] If set to false, the BaseLayerPicker widget will not be created.\n * @property {Boolean} [fullscreenButton=true] If set to false, the FullscreenButton widget will not be created.\n * @property {Boolean} [vrButton=false] If set to true, the VRButton widget will be created.\n * @property {Boolean|GeocoderService[]} [geocoder=true] If set to false, the Geocoder widget will not be created.\n * @property {Boolean} [homeButton=true] If set to false, the HomeButton widget will not be created.\n * @property {Boolean} [infoBox=true] If set to false, the InfoBox widget will not be created.\n * @property {Boolean} [sceneModePicker=true] If set to false, the SceneModePicker widget will not be created.\n * @property {Boolean} [selectionIndicator=true] If set to false, the SelectionIndicator widget will not be created.\n * @property {Boolean} [timeline=true] If set to false, the Timeline widget will not be created.\n * @property {Boolean} [navigationHelpButton=true] If set to false, the navigation help button will not be created.\n * @property {Boolean} [navigationInstructionsInitiallyVisible=true] True if the navigation instructions should initially be visible, or false if the should not be shown until the user explicitly clicks the button.\n * @property {Boolean} [scene3DOnly=false] When <code>true</code>, each geometry instance will only be rendered in 3D to save GPU memory.\n * @property {Boolean} [shouldAnimate=false] <code>true</code> if the clock should attempt to advance simulation time by default, <code>false</code> otherwise. This option takes precedence over setting {@link Viewer#clockViewModel}.\n * @property {ClockViewModel} [clockViewModel=new ClockViewModel(clock)] The clock view model to use to control current time.\n * @property {ProviderViewModel} [selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel[]} [imageryProviderViewModels=createDefaultImageryProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel} [selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available base layer is used. This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel[]} [terrainProviderViewModels=createDefaultTerrainProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker. This value is only valid if `baseLayerPicker` is set to true.\n * @property {ImageryProvider} [imageryProvider=createWorldImagery()] The imagery provider to use. This value is only valid if `baseLayerPicker` is set to false.\n * @property {TerrainProvider} [terrainProvider=new EllipsoidTerrainProvider()] The terrain provider to use\n * @property {SkyBox|false} [skyBox] The skybox used to render the stars. When <code>undefined</code>, the default stars are used. If set to <code>false</code>, no skyBox, Sun, or Moon will be added.\n * @property {SkyAtmosphere|false} [skyAtmosphere] Blue sky, and the glow around the Earth's limb. Set to <code>false</code> to turn it off.\n * @property {Element|String} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode when the full screen button is pressed.\n * @property {Boolean} [useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise.\n * @property {Number} [targetFrameRate] The target frame rate when using the default render loop.\n * @property {Boolean} [showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs.\n * @property {Boolean} [useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore <code>window.devicePixelRatio</code>.\n * @property {Boolean} [automaticallyTrackDataSourceClocks=true] If true, this widget will automatically track the clock settings of newly added DataSources, updating if the DataSource's clock changes. Set this to false if you want to configure the clock independently.\n * @property {Object} [contextOptions] Context and WebGL creation properties corresponding to <code>options</code> passed to {@link Scene}.\n * @property {SceneMode} [sceneMode=SceneMode.SCENE3D] The initial scene mode.\n * @property {MapProjection} [mapProjection=new GeographicProjection()] The map projection to use in 2D and Columbus View modes.\n * @property {Globe} [globe=new Globe(mapProjection.ellipsoid)] The globe to use in the scene. If set to <code>false</code>, no globe will be added.\n * @property {Boolean} [orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @property {Element|String} [creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}. If not specified, the credits are added to the bottom of the widget itself.\n * @property {Element|String} [creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}. If not specified, it will appear over the widget itself.\n * @property {DataSourceCollection} [dataSources=new DataSourceCollection()] The collection of data sources visualized by the widget. If this parameter is provided,\n * the instance is assumed to be owned by the caller and will not be destroyed when the viewer is destroyed.\n * @property {Number} [terrainExaggeration=1.0] A scalar used to exaggerate the terrain. Note that terrain exaggeration will not modify any other primitive as they are positioned relative to the ellipsoid.\n * @property {Boolean} [shadows=false] Determines if shadows are cast by light sources.\n * @property {ShadowMode} [terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources.\n * @property {MapMode2D} [mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @property {Boolean} [projectionPicker=false] If set to true, the ProjectionPicker widget will be created.\n * @property {Boolean} [requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling reduces the CPU/GPU usage of your application and uses less battery on mobile, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @property {Number} [maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n */\n\n/**\n * A base widget for building applications. It composites all of the standard Cesium widgets into one reusable package.\n * The widget can always be extended by using mixins, which add functionality useful for a variety of applications.\n *\n * @alias Viewer\n * @constructor\n *\n * @param {Element|String} container The DOM element or ID that will contain the widget.\n * @param {Viewer.ConstructorOptions} [options] Object describing initialization options\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n * @exception {DeveloperError} options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.imageryProvider instead.\n * @exception {DeveloperError} options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.terrainProvider instead.\n *\n * @see Animation\n * @see BaseLayerPicker\n * @see CesiumWidget\n * @see FullscreenButton\n * @see HomeButton\n * @see SceneModePicker\n * @see Timeline\n * @see viewerDragDropMixin\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Hello%20World.html|Cesium Sandcastle Hello World Demo}\n *\n * @example\n * //Initialize the viewer widget with several custom options and mixins.\n * var viewer = new Cesium.Viewer('cesiumContainer', {\n * //Start in Columbus Viewer\n * sceneMode : Cesium.SceneMode.COLUMBUS_VIEW,\n * //Use Cesium World Terrain\n * terrainProvider : Cesium.createWorldTerrain(),\n * //Hide the base layer picker\n * baseLayerPicker : false,\n * //Use OpenStreetMaps\n * imageryProvider : new Cesium.OpenStreetMapImageryProvider({\n * url : 'https://a.tile.openstreetmap.org/'\n * }),\n * skyBox : new Cesium.SkyBox({\n * sources : {\n * positiveX : 'stars/TychoSkymapII.t3_08192x04096_80_px.jpg',\n * negativeX : 'stars/TychoSkymapII.t3_08192x04096_80_mx.jpg',\n * positiveY : 'stars/TychoSkymapII.t3_08192x04096_80_py.jpg',\n * negativeY : 'stars/TychoSkymapII.t3_08192x04096_80_my.jpg',\n * positiveZ : 'stars/TychoSkymapII.t3_08192x04096_80_pz.jpg',\n * negativeZ : 'stars/TychoSkymapII.t3_08192x04096_80_mz.jpg'\n * }\n * }),\n * // Show Columbus View map with Web Mercator projection\n * mapProjection : new Cesium.WebMercatorProjection()\n * });\n *\n * //Add basic drag and drop functionality\n * viewer.extend(Cesium.viewerDragDropMixin);\n *\n * //Show a pop-up alert if we encounter an error when processing a dropped file\n * viewer.dropError.addEventListener(function(dropHandler, name, error) {\n * console.log(error);\n * window.alert(error);\n * });\n */\nfunction Viewer(container, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(container)) {\n throw new DeveloperError(\"container is required.\");\n }\n //>>includeEnd('debug');\n\n container = getElement(container);\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var createBaseLayerPicker =\n (!defined(options.globe) || options.globe !== false) &&\n (!defined(options.baseLayerPicker) || options.baseLayerPicker !== false);\n\n //>>includeStart('debug', pragmas.debug);\n // If not using BaseLayerPicker, selectedImageryProviderViewModel is an invalid option\n if (\n !createBaseLayerPicker &&\n defined(options.selectedImageryProviderViewModel)\n ) {\n throw new DeveloperError(\n \"options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget. \\\nEither specify options.imageryProvider instead or set options.baseLayerPicker to true.\"\n );\n }\n\n // If not using BaseLayerPicker, selectedTerrainProviderViewModel is an invalid option\n if (\n !createBaseLayerPicker &&\n defined(options.selectedTerrainProviderViewModel)\n ) {\n throw new DeveloperError(\n \"options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget. \\\nEither specify options.terrainProvider instead or set options.baseLayerPicker to true.\"\n );\n }\n //>>includeEnd('debug')\n\n var that = this;\n\n var viewerContainer = document.createElement(\"div\");\n viewerContainer.className = \"cesium-viewer\";\n container.appendChild(viewerContainer);\n\n // Cesium widget container\n var cesiumWidgetContainer = document.createElement(\"div\");\n cesiumWidgetContainer.className = \"cesium-viewer-cesiumWidgetContainer\";\n viewerContainer.appendChild(cesiumWidgetContainer);\n\n // Bottom container\n var bottomContainer = document.createElement(\"div\");\n bottomContainer.className = \"cesium-viewer-bottom\";\n\n viewerContainer.appendChild(bottomContainer);\n\n var scene3DOnly = defaultValue(options.scene3DOnly, false);\n\n var clock;\n var clockViewModel;\n var destroyClockViewModel = false;\n if (defined(options.clockViewModel)) {\n clockViewModel = options.clockViewModel;\n clock = clockViewModel.clock;\n } else {\n clock = new Clock();\n clockViewModel = new ClockViewModel(clock);\n destroyClockViewModel = true;\n }\n\n if (defined(options.shouldAnimate)) {\n clock.shouldAnimate = options.shouldAnimate;\n }\n\n // Cesium widget\n var cesiumWidget = new CesiumWidget(cesiumWidgetContainer, {\n imageryProvider:\n createBaseLayerPicker || defined(options.imageryProvider)\n ? false\n : undefined,\n clock: clock,\n skyBox: options.skyBox,\n skyAtmosphere: options.skyAtmosphere,\n sceneMode: options.sceneMode,\n mapProjection: options.mapProjection,\n globe: options.globe,\n orderIndependentTranslucency: options.orderIndependentTranslucency,\n contextOptions: options.contextOptions,\n useDefaultRenderLoop: options.useDefaultRenderLoop,\n targetFrameRate: options.targetFrameRate,\n showRenderLoopErrors: options.showRenderLoopErrors,\n useBrowserRecommendedResolution: options.useBrowserRecommendedResolution,\n creditContainer: defined(options.creditContainer)\n ? options.creditContainer\n : bottomContainer,\n creditViewport: options.creditViewport,\n scene3DOnly: scene3DOnly,\n terrainExaggeration: options.terrainExaggeration,\n shadows: options.shadows,\n terrainShadows: options.terrainShadows,\n mapMode2D: options.mapMode2D,\n requestRenderMode: options.requestRenderMode,\n maximumRenderTimeChange: options.maximumRenderTimeChange,\n });\n\n var dataSourceCollection = options.dataSources;\n var destroyDataSourceCollection = false;\n if (!defined(dataSourceCollection)) {\n dataSourceCollection = new DataSourceCollection();\n destroyDataSourceCollection = true;\n }\n\n var scene = cesiumWidget.scene;\n\n var dataSourceDisplay = new DataSourceDisplay({\n scene: scene,\n dataSourceCollection: dataSourceCollection,\n });\n\n var eventHelper = new EventHelper();\n\n eventHelper.add(clock.onTick, Viewer.prototype._onTick, this);\n eventHelper.add(scene.morphStart, Viewer.prototype._clearTrackedObject, this);\n\n // Selection Indicator\n var selectionIndicator;\n if (\n !defined(options.selectionIndicator) ||\n options.selectionIndicator !== false\n ) {\n var selectionIndicatorContainer = document.createElement(\"div\");\n selectionIndicatorContainer.className =\n \"cesium-viewer-selectionIndicatorContainer\";\n viewerContainer.appendChild(selectionIndicatorContainer);\n selectionIndicator = new SelectionIndicator(\n selectionIndicatorContainer,\n scene\n );\n }\n\n // Info Box\n var infoBox;\n if (!defined(options.infoBox) || options.infoBox !== false) {\n var infoBoxContainer = document.createElement(\"div\");\n infoBoxContainer.className = \"cesium-viewer-infoBoxContainer\";\n viewerContainer.appendChild(infoBoxContainer);\n infoBox = new InfoBox(infoBoxContainer);\n\n var infoBoxViewModel = infoBox.viewModel;\n eventHelper.add(\n infoBoxViewModel.cameraClicked,\n Viewer.prototype._onInfoBoxCameraClicked,\n this\n );\n eventHelper.add(\n infoBoxViewModel.closeClicked,\n Viewer.prototype._onInfoBoxClockClicked,\n this\n );\n }\n\n // Main Toolbar\n var toolbar = document.createElement(\"div\");\n toolbar.className = \"cesium-viewer-toolbar\";\n viewerContainer.appendChild(toolbar);\n\n // Geocoder\n var geocoder;\n if (!defined(options.geocoder) || options.geocoder !== false) {\n var geocoderContainer = document.createElement(\"div\");\n geocoderContainer.className = \"cesium-viewer-geocoderContainer\";\n toolbar.appendChild(geocoderContainer);\n var geocoderService;\n if (defined(options.geocoder) && typeof options.geocoder !== \"boolean\") {\n geocoderService = Array.isArray(options.geocoder)\n ? options.geocoder\n : [options.geocoder];\n }\n geocoder = new Geocoder({\n container: geocoderContainer,\n geocoderServices: geocoderService,\n scene: scene,\n });\n // Subscribe to search so that we can clear the trackedEntity when it is clicked.\n eventHelper.add(\n geocoder.viewModel.search.beforeExecute,\n Viewer.prototype._clearObjects,\n this\n );\n }\n\n // HomeButton\n var homeButton;\n if (!defined(options.homeButton) || options.homeButton !== false) {\n homeButton = new HomeButton(toolbar, scene);\n if (defined(geocoder)) {\n eventHelper.add(homeButton.viewModel.command.afterExecute, function () {\n var viewModel = geocoder.viewModel;\n viewModel.searchText = \"\";\n if (viewModel.isSearchInProgress) {\n viewModel.search();\n }\n });\n }\n // Subscribe to the home button beforeExecute event so that we can clear the trackedEntity.\n eventHelper.add(\n homeButton.viewModel.command.beforeExecute,\n Viewer.prototype._clearTrackedObject,\n this\n );\n }\n\n // SceneModePicker\n // By default, we silently disable the scene mode picker if scene3DOnly is true,\n // but if sceneModePicker is explicitly set to true, throw an error.\n //>>includeStart('debug', pragmas.debug);\n if (options.sceneModePicker === true && scene3DOnly) {\n throw new DeveloperError(\n \"options.sceneModePicker is not available when options.scene3DOnly is set to true.\"\n );\n }\n //>>includeEnd('debug');\n\n var sceneModePicker;\n if (\n !scene3DOnly &&\n (!defined(options.sceneModePicker) || options.sceneModePicker !== false)\n ) {\n sceneModePicker = new SceneModePicker(toolbar, scene);\n }\n\n var projectionPicker;\n if (options.projectionPicker) {\n projectionPicker = new ProjectionPicker(toolbar, scene);\n }\n\n // BaseLayerPicker\n var baseLayerPicker;\n var baseLayerPickerDropDown;\n if (createBaseLayerPicker) {\n var imageryProviderViewModels = defaultValue(\n options.imageryProviderViewModels,\n createDefaultImageryProviderViewModels()\n );\n var terrainProviderViewModels = defaultValue(\n options.terrainProviderViewModels,\n createDefaultTerrainProviderViewModels()\n );\n\n baseLayerPicker = new BaseLayerPicker(toolbar, {\n globe: scene.globe,\n imageryProviderViewModels: imageryProviderViewModels,\n selectedImageryProviderViewModel:\n options.selectedImageryProviderViewModel,\n terrainProviderViewModels: terrainProviderViewModels,\n selectedTerrainProviderViewModel:\n options.selectedTerrainProviderViewModel,\n });\n\n //Grab the dropdown for resize code.\n var elements = toolbar.getElementsByClassName(\n \"cesium-baseLayerPicker-dropDown\"\n );\n baseLayerPickerDropDown = elements[0];\n }\n\n // These need to be set after the BaseLayerPicker is created in order to take effect\n if (defined(options.imageryProvider) && options.imageryProvider !== false) {\n if (createBaseLayerPicker) {\n baseLayerPicker.viewModel.selectedImagery = undefined;\n }\n scene.imageryLayers.removeAll();\n scene.imageryLayers.addImageryProvider(options.imageryProvider);\n }\n if (defined(options.terrainProvider)) {\n if (createBaseLayerPicker) {\n baseLayerPicker.viewModel.selectedTerrain = undefined;\n }\n scene.terrainProvider = options.terrainProvider;\n }\n\n // Navigation Help Button\n var navigationHelpButton;\n if (\n !defined(options.navigationHelpButton) ||\n options.navigationHelpButton !== false\n ) {\n var showNavHelp = true;\n try {\n //window.localStorage is null if disabled in Firefox or undefined in browsers with implementation\n if (defined(window.localStorage)) {\n var hasSeenNavHelp = window.localStorage.getItem(\n \"cesium-hasSeenNavHelp\"\n );\n if (defined(hasSeenNavHelp) && Boolean(hasSeenNavHelp)) {\n showNavHelp = false;\n } else {\n window.localStorage.setItem(\"cesium-hasSeenNavHelp\", \"true\");\n }\n }\n } catch (e) {\n //Accessing window.localStorage throws if disabled in Chrome\n //window.localStorage.setItem throws if in Safari private browsing mode or in any browser if we are over quota.\n }\n navigationHelpButton = new NavigationHelpButton({\n container: toolbar,\n instructionsInitiallyVisible: defaultValue(\n options.navigationInstructionsInitiallyVisible,\n showNavHelp\n ),\n });\n }\n\n // Animation\n var animation;\n if (!defined(options.animation) || options.animation !== false) {\n var animationContainer = document.createElement(\"div\");\n animationContainer.className = \"cesium-viewer-animationContainer\";\n viewerContainer.appendChild(animationContainer);\n animation = new Animation(\n animationContainer,\n new AnimationViewModel(clockViewModel)\n );\n }\n\n // Timeline\n var timeline;\n if (!defined(options.timeline) || options.timeline !== false) {\n var timelineContainer = document.createElement(\"div\");\n timelineContainer.className = \"cesium-viewer-timelineContainer\";\n viewerContainer.appendChild(timelineContainer);\n timeline = new Timeline(timelineContainer, clock);\n timeline.addEventListener(\"settime\", onTimelineScrubfunction, false);\n timeline.zoomTo(clock.startTime, clock.stopTime);\n }\n\n // Fullscreen\n var fullscreenButton;\n var fullscreenSubscription;\n var fullscreenContainer;\n if (\n !defined(options.fullscreenButton) ||\n options.fullscreenButton !== false\n ) {\n fullscreenContainer = document.createElement(\"div\");\n fullscreenContainer.className = \"cesium-viewer-fullscreenContainer\";\n viewerContainer.appendChild(fullscreenContainer);\n fullscreenButton = new FullscreenButton(\n fullscreenContainer,\n options.fullscreenElement\n );\n\n //Subscribe to fullscreenButton.viewModel.isFullscreenEnabled so\n //that we can hide/show the button as well as size the timeline.\n fullscreenSubscription = subscribeAndEvaluate(\n fullscreenButton.viewModel,\n \"isFullscreenEnabled\",\n function (isFullscreenEnabled) {\n fullscreenContainer.style.display = isFullscreenEnabled\n ? \"block\"\n : \"none\";\n if (defined(timeline)) {\n timeline.container.style.right =\n fullscreenContainer.clientWidth + \"px\";\n timeline.resize();\n }\n }\n );\n }\n\n // VR\n var vrButton;\n var vrSubscription;\n var vrModeSubscription;\n if (options.vrButton) {\n var vrContainer = document.createElement(\"div\");\n vrContainer.className = \"cesium-viewer-vrContainer\";\n viewerContainer.appendChild(vrContainer);\n vrButton = new VRButton(vrContainer, scene, options.fullScreenElement);\n\n vrSubscription = subscribeAndEvaluate(\n vrButton.viewModel,\n \"isVREnabled\",\n function (isVREnabled) {\n vrContainer.style.display = isVREnabled ? \"block\" : \"none\";\n if (defined(fullscreenButton)) {\n vrContainer.style.right = fullscreenContainer.clientWidth + \"px\";\n }\n if (defined(timeline)) {\n timeline.container.style.right = vrContainer.clientWidth + \"px\";\n timeline.resize();\n }\n }\n );\n\n vrModeSubscription = subscribeAndEvaluate(\n vrButton.viewModel,\n \"isVRMode\",\n function (isVRMode) {\n enableVRUI(that, isVRMode);\n }\n );\n }\n\n //Assign all properties to this instance. No \"this\" assignments should\n //take place above this line.\n this._baseLayerPickerDropDown = baseLayerPickerDropDown;\n this._fullscreenSubscription = fullscreenSubscription;\n this._vrSubscription = vrSubscription;\n this._vrModeSubscription = vrModeSubscription;\n this._dataSourceChangedListeners = {};\n this._automaticallyTrackDataSourceClocks = defaultValue(\n options.automaticallyTrackDataSourceClocks,\n true\n );\n this._container = container;\n this._bottomContainer = bottomContainer;\n this._element = viewerContainer;\n this._cesiumWidget = cesiumWidget;\n this._selectionIndicator = selectionIndicator;\n this._infoBox = infoBox;\n this._dataSourceCollection = dataSourceCollection;\n this._destroyDataSourceCollection = destroyDataSourceCollection;\n this._dataSourceDisplay = dataSourceDisplay;\n this._clockViewModel = clockViewModel;\n this._destroyClockViewModel = destroyClockViewModel;\n this._toolbar = toolbar;\n this._homeButton = homeButton;\n this._sceneModePicker = sceneModePicker;\n this._projectionPicker = projectionPicker;\n this._baseLayerPicker = baseLayerPicker;\n this._navigationHelpButton = navigationHelpButton;\n this._animation = animation;\n this._timeline = timeline;\n this._fullscreenButton = fullscreenButton;\n this._vrButton = vrButton;\n this._geocoder = geocoder;\n this._eventHelper = eventHelper;\n this._lastWidth = 0;\n this._lastHeight = 0;\n this._allowDataSourcesToSuspendAnimation = true;\n this._entityView = undefined;\n this._enableInfoOrSelection = defined(infoBox) || defined(selectionIndicator);\n this._clockTrackedDataSource = undefined;\n this._trackedEntity = undefined;\n this._needTrackedEntityUpdate = false;\n this._selectedEntity = undefined;\n this._clockTrackedDataSource = undefined;\n this._zoomIsFlight = false;\n this._zoomTarget = undefined;\n this._zoomPromise = undefined;\n this._zoomOptions = undefined;\n this._selectedEntityChanged = new Event();\n this._trackedEntityChanged = new Event();\n\n knockout.track(this, [\n \"_trackedEntity\",\n \"_selectedEntity\",\n \"_clockTrackedDataSource\",\n ]);\n\n //Listen to data source events in order to track clock changes.\n eventHelper.add(\n dataSourceCollection.dataSourceAdded,\n Viewer.prototype._onDataSourceAdded,\n this\n );\n eventHelper.add(\n dataSourceCollection.dataSourceRemoved,\n Viewer.prototype._onDataSourceRemoved,\n this\n );\n\n // Prior to each render, check if anything needs to be resized.\n eventHelper.add(scene.postUpdate, Viewer.prototype.resize, this);\n eventHelper.add(scene.postRender, Viewer.prototype._postRender, this);\n\n // We need to subscribe to the data sources and collections so that we can clear the\n // tracked object when it is removed from the scene.\n // Subscribe to current data sources\n var dataSourceLength = dataSourceCollection.length;\n for (var i = 0; i < dataSourceLength; i++) {\n this._dataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));\n }\n this._dataSourceAdded(undefined, dataSourceDisplay.defaultDataSource);\n\n // Hook up events so that we can subscribe to future sources.\n eventHelper.add(\n dataSourceCollection.dataSourceAdded,\n Viewer.prototype._dataSourceAdded,\n this\n );\n eventHelper.add(\n dataSourceCollection.dataSourceRemoved,\n Viewer.prototype._dataSourceRemoved,\n this\n );\n\n // Subscribe to left clicks and zoom to the picked object.\n function pickAndTrackObject(e) {\n var entity = pickEntity(that, e);\n if (defined(entity)) {\n //Only track the entity if it has a valid position at the current time.\n if (\n Property.getValueOrUndefined(entity.position, that.clock.currentTime)\n ) {\n that.trackedEntity = entity;\n } else {\n that.zoomTo(entity);\n }\n } else if (defined(that.trackedEntity)) {\n that.trackedEntity = undefined;\n }\n }\n\n function pickAndSelectObject(e) {\n that.selectedEntity = pickEntity(that, e);\n }\n\n cesiumWidget.screenSpaceEventHandler.setInputAction(\n pickAndSelectObject,\n ScreenSpaceEventType.LEFT_CLICK\n );\n cesiumWidget.screenSpaceEventHandler.setInputAction(\n pickAndTrackObject,\n ScreenSpaceEventType.LEFT_DOUBLE_CLICK\n );\n}\n\nObject.defineProperties(Viewer.prototype, {\n /**\n * Gets the parent container.\n * @memberof Viewer.prototype\n * @type {Element}\n * @readonly\n */\n container: {\n get: function () {\n return this._container;\n },\n },\n\n /**\n * Gets the DOM element for the area at the bottom of the window containing the\n * {@link CreditDisplay} and potentially other things.\n * @memberof Viewer.prototype\n * @type {Element}\n * @readonly\n */\n bottomContainer: {\n get: function () {\n return this._bottomContainer;\n },\n },\n\n /**\n * Gets the CesiumWidget.\n * @memberof Viewer.prototype\n * @type {CesiumWidget}\n * @readonly\n */\n cesiumWidget: {\n get: function () {\n return this._cesiumWidget;\n },\n },\n\n /**\n * Gets the selection indicator.\n * @memberof Viewer.prototype\n * @type {SelectionIndicator}\n * @readonly\n */\n selectionIndicator: {\n get: function () {\n return this._selectionIndicator;\n },\n },\n\n /**\n * Gets the info box.\n * @memberof Viewer.prototype\n * @type {InfoBox}\n * @readonly\n */\n infoBox: {\n get: function () {\n return this._infoBox;\n },\n },\n\n /**\n * Gets the Geocoder.\n * @memberof Viewer.prototype\n * @type {Geocoder}\n * @readonly\n */\n geocoder: {\n get: function () {\n return this._geocoder;\n },\n },\n\n /**\n * Gets the HomeButton.\n * @memberof Viewer.prototype\n * @type {HomeButton}\n * @readonly\n */\n homeButton: {\n get: function () {\n return this._homeButton;\n },\n },\n\n /**\n * Gets the SceneModePicker.\n * @memberof Viewer.prototype\n * @type {SceneModePicker}\n * @readonly\n */\n sceneModePicker: {\n get: function () {\n return this._sceneModePicker;\n },\n },\n\n /**\n * Gets the ProjectionPicker.\n * @memberof Viewer.prototype\n * @type {ProjectionPicker}\n * @readonly\n */\n projectionPicker: {\n get: function () {\n return this._projectionPicker;\n },\n },\n\n /**\n * Gets the BaseLayerPicker.\n * @memberof Viewer.prototype\n * @type {BaseLayerPicker}\n * @readonly\n */\n baseLayerPicker: {\n get: function () {\n return this._baseLayerPicker;\n },\n },\n\n /**\n * Gets the NavigationHelpButton.\n * @memberof Viewer.prototype\n * @type {NavigationHelpButton}\n * @readonly\n */\n navigationHelpButton: {\n get: function () {\n return this._navigationHelpButton;\n },\n },\n\n /**\n * Gets the Animation widget.\n * @memberof Viewer.prototype\n * @type {Animation}\n * @readonly\n */\n animation: {\n get: function () {\n return this._animation;\n },\n },\n\n /**\n * Gets the Timeline widget.\n * @memberof Viewer.prototype\n * @type {Timeline}\n * @readonly\n */\n timeline: {\n get: function () {\n return this._timeline;\n },\n },\n\n /**\n * Gets the FullscreenButton.\n * @memberof Viewer.prototype\n * @type {FullscreenButton}\n * @readonly\n */\n fullscreenButton: {\n get: function () {\n return this._fullscreenButton;\n },\n },\n\n /**\n * Gets the VRButton.\n * @memberof Viewer.prototype\n * @type {VRButton}\n * @readonly\n */\n vrButton: {\n get: function () {\n return this._vrButton;\n },\n },\n\n /**\n * Gets the display used for {@link DataSource} visualization.\n * @memberof Viewer.prototype\n * @type {DataSourceDisplay}\n * @readonly\n */\n dataSourceDisplay: {\n get: function () {\n return this._dataSourceDisplay;\n },\n },\n\n /**\n * Gets the collection of entities not tied to a particular data source.\n * This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link Viewer#dataSourceDisplay}.\n * @memberof Viewer.prototype\n * @type {EntityCollection}\n * @readonly\n */\n entities: {\n get: function () {\n return this._dataSourceDisplay.defaultDataSource.entities;\n },\n },\n\n /**\n * Gets the set of {@link DataSource} instances to be visualized.\n * @memberof Viewer.prototype\n * @type {DataSourceCollection}\n * @readonly\n */\n dataSources: {\n get: function () {\n return this._dataSourceCollection;\n },\n },\n\n /**\n * Gets the canvas.\n * @memberof Viewer.prototype\n * @type {HTMLCanvasElement}\n * @readonly\n */\n canvas: {\n get: function () {\n return this._cesiumWidget.canvas;\n },\n },\n\n /**\n * Gets the scene.\n * @memberof Viewer.prototype\n * @type {Scene}\n * @readonly\n */\n scene: {\n get: function () {\n return this._cesiumWidget.scene;\n },\n },\n\n /**\n * Determines if shadows are cast by light sources.\n * @memberof Viewer.prototype\n * @type {Boolean}\n */\n shadows: {\n get: function () {\n return this.scene.shadowMap.enabled;\n },\n set: function (value) {\n this.scene.shadowMap.enabled = value;\n },\n },\n\n /**\n * Determines if the terrain casts or shadows from light sources.\n * @memberof Viewer.prototype\n * @type {ShadowMode}\n */\n terrainShadows: {\n get: function () {\n return this.scene.globe.shadows;\n },\n set: function (value) {\n this.scene.globe.shadows = value;\n },\n },\n\n /**\n * Get the scene's shadow map\n * @memberof Viewer.prototype\n * @type {ShadowMap}\n * @readonly\n */\n shadowMap: {\n get: function () {\n return this.scene.shadowMap;\n },\n },\n\n /**\n * Gets the collection of image layers that will be rendered on the globe.\n * @memberof Viewer.prototype\n *\n * @type {ImageryLayerCollection}\n * @readonly\n */\n imageryLayers: {\n get: function () {\n return this.scene.imageryLayers;\n },\n },\n\n /**\n * The terrain provider providing surface geometry for the globe.\n * @memberof Viewer.prototype\n *\n * @type {TerrainProvider}\n */\n terrainProvider: {\n get: function () {\n return this.scene.terrainProvider;\n },\n set: function (terrainProvider) {\n this.scene.terrainProvider = terrainProvider;\n },\n },\n\n /**\n * Gets the camera.\n * @memberof Viewer.prototype\n *\n * @type {Camera}\n * @readonly\n */\n camera: {\n get: function () {\n return this.scene.camera;\n },\n },\n\n /**\n * Gets the post-process stages.\n * @memberof Viewer.prototype\n *\n * @type {PostProcessStageCollection}\n * @readonly\n */\n postProcessStages: {\n get: function () {\n return this.scene.postProcessStages;\n },\n },\n\n /**\n * Gets the clock.\n * @memberof Viewer.prototype\n * @type {Clock}\n * @readonly\n */\n clock: {\n get: function () {\n return this._clockViewModel.clock;\n },\n },\n\n /**\n * Gets the clock view model.\n * @memberof Viewer.prototype\n * @type {ClockViewModel}\n * @readonly\n */\n clockViewModel: {\n get: function () {\n return this._clockViewModel;\n },\n },\n\n /**\n * Gets the screen space event handler.\n * @memberof Viewer.prototype\n * @type {ScreenSpaceEventHandler}\n * @readonly\n */\n screenSpaceEventHandler: {\n get: function () {\n return this._cesiumWidget.screenSpaceEventHandler;\n },\n },\n\n /**\n * Gets or sets the target frame rate of the widget when <code>useDefaultRenderLoop</code>\n * is true. If undefined, the browser's {@link requestAnimationFrame} implementation\n * determines the frame rate. If defined, this value must be greater than 0. A value higher\n * than the underlying requestAnimationFrame implementation will have no effect.\n * @memberof Viewer.prototype\n *\n * @type {Number}\n */\n targetFrameRate: {\n get: function () {\n return this._cesiumWidget.targetFrameRate;\n },\n set: function (value) {\n this._cesiumWidget.targetFrameRate = value;\n },\n },\n\n /**\n * Gets or sets whether or not this widget should control the render loop.\n * If set to true the widget will use {@link requestAnimationFrame} to\n * perform rendering and resizing of the widget, as well as drive the\n * simulation clock. If set to false, you must manually call the\n * <code>resize</code>, <code>render</code> methods\n * as part of a custom render loop. If an error occurs during rendering, {@link Scene}'s\n * <code>renderError</code> event will be raised and this property\n * will be set to false. It must be set back to true to continue rendering\n * after the error.\n * @memberof Viewer.prototype\n *\n * @type {Boolean}\n */\n useDefaultRenderLoop: {\n get: function () {\n return this._cesiumWidget.useDefaultRenderLoop;\n },\n set: function (value) {\n this._cesiumWidget.useDefaultRenderLoop = value;\n },\n },\n\n /**\n * Gets or sets a scaling factor for rendering resolution. Values less than 1.0 can improve\n * performance on less powerful devices while values greater than 1.0 will render at a higher\n * resolution and then scale down, resulting in improved visual fidelity.\n * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5\n * will cause the scene to be rendered at 320x240 and then scaled up while setting\n * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down.\n * @memberof Viewer.prototype\n *\n * @type {Number}\n * @default 1.0\n */\n resolutionScale: {\n get: function () {\n return this._cesiumWidget.resolutionScale;\n },\n set: function (value) {\n this._cesiumWidget.resolutionScale = value;\n },\n },\n\n /**\n * Boolean flag indicating if the browser's recommended resolution is used.\n * If true, the browser's device pixel ratio is ignored and 1.0 is used instead,\n * effectively rendering based on CSS pixels instead of device pixels. This can improve\n * performance on less powerful devices that have high pixel density. When false, rendering\n * will be in device pixels. {@link Viewer#resolutionScale} will still take effect whether\n * this flag is true or false.\n * @memberof Viewer.prototype\n *\n * @type {Boolean}\n * @default true\n */\n useBrowserRecommendedResolution: {\n get: function () {\n return this._cesiumWidget.useBrowserRecommendedResolution;\n },\n set: function (value) {\n this._cesiumWidget.useBrowserRecommendedResolution = value;\n },\n },\n\n /**\n * Gets or sets whether or not data sources can temporarily pause\n * animation in order to avoid showing an incomplete picture to the user.\n * For example, if asynchronous primitives are being processed in the\n * background, the clock will not advance until the geometry is ready.\n *\n * @memberof Viewer.prototype\n *\n * @type {Boolean}\n */\n allowDataSourcesToSuspendAnimation: {\n get: function () {\n return this._allowDataSourcesToSuspendAnimation;\n },\n set: function (value) {\n this._allowDataSourcesToSuspendAnimation = value;\n },\n },\n\n /**\n * Gets or sets the Entity instance currently being tracked by the camera.\n * @memberof Viewer.prototype\n * @type {Entity | undefined}\n */\n trackedEntity: {\n get: function () {\n return this._trackedEntity;\n },\n set: function (value) {\n if (this._trackedEntity !== value) {\n this._trackedEntity = value;\n\n //Cancel any pending zoom\n cancelZoom(this);\n\n var scene = this.scene;\n var sceneMode = scene.mode;\n\n //Stop tracking\n if (!defined(value) || !defined(value.position)) {\n this._needTrackedEntityUpdate = false;\n if (\n sceneMode === SceneMode.COLUMBUS_VIEW ||\n sceneMode === SceneMode.SCENE2D\n ) {\n scene.screenSpaceCameraController.enableTranslate = true;\n }\n\n if (\n sceneMode === SceneMode.COLUMBUS_VIEW ||\n sceneMode === SceneMode.SCENE3D\n ) {\n scene.screenSpaceCameraController.enableTilt = true;\n }\n\n this._entityView = undefined;\n this.camera.lookAtTransform(Matrix4.IDENTITY);\n } else {\n //We can't start tracking immediately, so we set a flag and start tracking\n //when the bounding sphere is ready (most likely next frame).\n this._needTrackedEntityUpdate = true;\n }\n\n this._trackedEntityChanged.raiseEvent(value);\n this.scene.requestRender();\n }\n },\n },\n /**\n * Gets or sets the object instance for which to display a selection indicator.\n * @memberof Viewer.prototype\n * @type {Entity | undefined}\n */\n selectedEntity: {\n get: function () {\n return this._selectedEntity;\n },\n set: function (value) {\n if (this._selectedEntity !== value) {\n this._selectedEntity = value;\n var selectionIndicatorViewModel = defined(this._selectionIndicator)\n ? this._selectionIndicator.viewModel\n : undefined;\n if (defined(value)) {\n if (defined(selectionIndicatorViewModel)) {\n selectionIndicatorViewModel.animateAppear();\n }\n } else if (defined(selectionIndicatorViewModel)) {\n // Leave the info text in place here, it is needed during the exit animation.\n selectionIndicatorViewModel.animateDepart();\n }\n this._selectedEntityChanged.raiseEvent(value);\n }\n },\n },\n /**\n * Gets the event that is raised when the selected entity changes.\n * @memberof Viewer.prototype\n * @type {Event}\n * @readonly\n */\n selectedEntityChanged: {\n get: function () {\n return this._selectedEntityChanged;\n },\n },\n /**\n * Gets the event that is raised when the tracked entity changes.\n * @memberof Viewer.prototype\n * @type {Event}\n * @readonly\n */\n trackedEntityChanged: {\n get: function () {\n return this._trackedEntityChanged;\n },\n },\n /**\n * Gets or sets the data source to track with the viewer's clock.\n * @memberof Viewer.prototype\n * @type {DataSource}\n */\n clockTrackedDataSource: {\n get: function () {\n return this._clockTrackedDataSource;\n },\n set: function (value) {\n if (this._clockTrackedDataSource !== value) {\n this._clockTrackedDataSource = value;\n trackDataSourceClock(this._timeline, this.clock, value);\n }\n },\n },\n});\n\n/**\n * Extends the base viewer functionality with the provided mixin.\n * A mixin may add additional properties, functions, or other behavior\n * to the provided viewer instance.\n *\n * @param {Viewer.ViewerMixin} mixin The Viewer mixin to add to this instance.\n * @param {Object} [options] The options object to be passed to the mixin function.\n *\n * @see viewerDragDropMixin\n */\nViewer.prototype.extend = function (mixin, options) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(mixin)) {\n throw new DeveloperError(\"mixin is required.\");\n }\n //>>includeEnd('debug')\n\n mixin(this, options);\n};\n\n/**\n * Resizes the widget to match the container size.\n * This function is called automatically as needed unless\n * <code>useDefaultRenderLoop</code> is set to false.\n */\nViewer.prototype.resize = function () {\n var cesiumWidget = this._cesiumWidget;\n var container = this._container;\n var width = container.clientWidth;\n var height = container.clientHeight;\n var animationExists = defined(this._animation);\n var timelineExists = defined(this._timeline);\n\n cesiumWidget.resize();\n\n if (width === this._lastWidth && height === this._lastHeight) {\n return;\n }\n\n var panelMaxHeight = height - 125;\n var baseLayerPickerDropDown = this._baseLayerPickerDropDown;\n\n if (defined(baseLayerPickerDropDown)) {\n baseLayerPickerDropDown.style.maxHeight = panelMaxHeight + \"px\";\n }\n\n if (defined(this._geocoder)) {\n var geocoderSuggestions = this._geocoder.searchSuggestionsContainer;\n geocoderSuggestions.style.maxHeight = panelMaxHeight + \"px\";\n }\n\n if (defined(this._infoBox)) {\n this._infoBox.viewModel.maxHeight = panelMaxHeight;\n }\n\n var timeline = this._timeline;\n var animationContainer;\n var animationWidth = 0;\n var creditLeft = 0;\n var creditBottom = 0;\n\n if (\n animationExists &&\n window.getComputedStyle(this._animation.container).visibility !== \"hidden\"\n ) {\n var lastWidth = this._lastWidth;\n animationContainer = this._animation.container;\n if (width > 900) {\n animationWidth = 169;\n if (lastWidth <= 900) {\n animationContainer.style.width = \"169px\";\n animationContainer.style.height = \"112px\";\n this._animation.resize();\n }\n } else if (width >= 600) {\n animationWidth = 136;\n if (lastWidth < 600 || lastWidth > 900) {\n animationContainer.style.width = \"136px\";\n animationContainer.style.height = \"90px\";\n this._animation.resize();\n }\n } else {\n animationWidth = 106;\n if (lastWidth > 600 || lastWidth === 0) {\n animationContainer.style.width = \"106px\";\n animationContainer.style.height = \"70px\";\n this._animation.resize();\n }\n }\n creditLeft = animationWidth + 5;\n }\n\n if (\n timelineExists &&\n window.getComputedStyle(this._timeline.container).visibility !== \"hidden\"\n ) {\n var fullscreenButton = this._fullscreenButton;\n var vrButton = this._vrButton;\n var timelineContainer = timeline.container;\n var timelineStyle = timelineContainer.style;\n\n creditBottom = timelineContainer.clientHeight + 3;\n timelineStyle.left = animationWidth + \"px\";\n\n var pixels = 0;\n if (defined(fullscreenButton)) {\n pixels += fullscreenButton.container.clientWidth;\n }\n if (defined(vrButton)) {\n pixels += vrButton.container.clientWidth;\n }\n\n timelineStyle.right = pixels + \"px\";\n timeline.resize();\n }\n\n this._bottomContainer.style.left = creditLeft + \"px\";\n this._bottomContainer.style.bottom = creditBottom + \"px\";\n\n this._lastWidth = width;\n this._lastHeight = height;\n};\n\n/**\n * This forces the widget to re-think its layout, including\n * widget sizes and credit placement.\n */\nViewer.prototype.forceResize = function () {\n this._lastWidth = 0;\n this.resize();\n};\n\n/**\n * Renders the scene. This function is called automatically\n * unless <code>useDefaultRenderLoop</code> is set to false;\n */\nViewer.prototype.render = function () {\n this._cesiumWidget.render();\n};\n\n/**\n * @returns {Boolean} true if the object has been destroyed, false otherwise.\n */\nViewer.prototype.isDestroyed = function () {\n return false;\n};\n\n/**\n * Destroys the widget. Should be called if permanently\n * removing the widget from layout.\n */\nViewer.prototype.destroy = function () {\n var i;\n\n this.screenSpaceEventHandler.removeInputAction(\n ScreenSpaceEventType.LEFT_CLICK\n );\n this.screenSpaceEventHandler.removeInputAction(\n ScreenSpaceEventType.LEFT_DOUBLE_CLICK\n );\n\n // Unsubscribe from data sources\n var dataSources = this.dataSources;\n var dataSourceLength = dataSources.length;\n for (i = 0; i < dataSourceLength; i++) {\n this._dataSourceRemoved(dataSources, dataSources.get(i));\n }\n this._dataSourceRemoved(undefined, this._dataSourceDisplay.defaultDataSource);\n\n this._container.removeChild(this._element);\n this._element.removeChild(this._toolbar);\n\n this._eventHelper.removeAll();\n\n if (defined(this._geocoder)) {\n this._geocoder = this._geocoder.destroy();\n }\n\n if (defined(this._homeButton)) {\n this._homeButton = this._homeButton.destroy();\n }\n\n if (defined(this._sceneModePicker)) {\n this._sceneModePicker = this._sceneModePicker.destroy();\n }\n\n if (defined(this._projectionPicker)) {\n this._projectionPicker = this._projectionPicker.destroy();\n }\n\n if (defined(this._baseLayerPicker)) {\n this._baseLayerPicker = this._baseLayerPicker.destroy();\n }\n\n if (defined(this._animation)) {\n this._element.removeChild(this._animation.container);\n this._animation = this._animation.destroy();\n }\n\n if (defined(this._timeline)) {\n this._timeline.removeEventListener(\n \"settime\",\n onTimelineScrubfunction,\n false\n );\n this._element.removeChild(this._timeline.container);\n this._timeline = this._timeline.destroy();\n }\n\n if (defined(this._fullscreenButton)) {\n this._fullscreenSubscription.dispose();\n this._element.removeChild(this._fullscreenButton.container);\n this._fullscreenButton = this._fullscreenButton.destroy();\n }\n\n if (defined(this._vrButton)) {\n this._vrSubscription.dispose();\n this._vrModeSubscription.dispose();\n this._element.removeChild(this._vrButton.container);\n this._vrButton = this._vrButton.destroy();\n }\n\n if (defined(this._infoBox)) {\n this._element.removeChild(this._infoBox.container);\n this._infoBox = this._infoBox.destroy();\n }\n\n if (defined(this._selectionIndicator)) {\n this._element.removeChild(this._selectionIndicator.container);\n this._selectionIndicator = this._selectionIndicator.destroy();\n }\n\n if (this._destroyClockViewModel) {\n this._clockViewModel = this._clockViewModel.destroy();\n }\n this._dataSourceDisplay = this._dataSourceDisplay.destroy();\n this._cesiumWidget = this._cesiumWidget.destroy();\n\n if (this._destroyDataSourceCollection) {\n this._dataSourceCollection = this._dataSourceCollection.destroy();\n }\n\n return destroyObject(this);\n};\n\n/**\n * @private\n */\nViewer.prototype._dataSourceAdded = function (\n dataSourceCollection,\n dataSource\n) {\n var entityCollection = dataSource.entities;\n entityCollection.collectionChanged.addEventListener(\n Viewer.prototype._onEntityCollectionChanged,\n this\n );\n};\n\n/**\n * @private\n */\nViewer.prototype._dataSourceRemoved = function (\n dataSourceCollection,\n dataSource\n) {\n var entityCollection = dataSource.entities;\n entityCollection.collectionChanged.removeEventListener(\n Viewer.prototype._onEntityCollectionChanged,\n this\n );\n\n if (defined(this.trackedEntity)) {\n if (\n entityCollection.getById(this.trackedEntity.id) === this.trackedEntity\n ) {\n this.trackedEntity = undefined;\n }\n }\n\n if (defined(this.selectedEntity)) {\n if (\n entityCollection.getById(this.selectedEntity.id) === this.selectedEntity\n ) {\n this.selectedEntity = undefined;\n }\n }\n};\n\n/**\n * @private\n */\nViewer.prototype._onTick = function (clock) {\n var time = clock.currentTime;\n\n var isUpdated = this._dataSourceDisplay.update(time);\n if (this._allowDataSourcesToSuspendAnimation) {\n this._clockViewModel.canAnimate = isUpdated;\n }\n\n var entityView = this._entityView;\n if (defined(entityView)) {\n var trackedEntity = this._trackedEntity;\n var trackedState = this._dataSourceDisplay.getBoundingSphere(\n trackedEntity,\n false,\n boundingSphereScratch\n );\n if (trackedState === BoundingSphereState.DONE) {\n entityView.update(time, boundingSphereScratch);\n }\n }\n\n var position;\n var enableCamera = false;\n var selectedEntity = this.selectedEntity;\n var showSelection = defined(selectedEntity) && this._enableInfoOrSelection;\n\n if (\n showSelection &&\n selectedEntity.isShowing &&\n selectedEntity.isAvailable(time)\n ) {\n var state = this._dataSourceDisplay.getBoundingSphere(\n selectedEntity,\n true,\n boundingSphereScratch\n );\n if (state !== BoundingSphereState.FAILED) {\n position = boundingSphereScratch.center;\n } else if (defined(selectedEntity.position)) {\n position = selectedEntity.position.getValue(time, position);\n }\n enableCamera = defined(position);\n }\n\n var selectionIndicatorViewModel = defined(this._selectionIndicator)\n ? this._selectionIndicator.viewModel\n : undefined;\n if (defined(selectionIndicatorViewModel)) {\n selectionIndicatorViewModel.position = Cartesian3.clone(\n position,\n selectionIndicatorViewModel.position\n );\n selectionIndicatorViewModel.showSelection = showSelection && enableCamera;\n selectionIndicatorViewModel.update();\n }\n\n var infoBoxViewModel = defined(this._infoBox)\n ? this._infoBox.viewModel\n : undefined;\n if (defined(infoBoxViewModel)) {\n infoBoxViewModel.showInfo = showSelection;\n infoBoxViewModel.enableCamera = enableCamera;\n infoBoxViewModel.isCameraTracking =\n this.trackedEntity === this.selectedEntity;\n\n if (showSelection) {\n infoBoxViewModel.titleText = defaultValue(\n selectedEntity.name,\n selectedEntity.id\n );\n infoBoxViewModel.description = Property.getValueOrDefault(\n selectedEntity.description,\n time,\n \"\"\n );\n } else {\n infoBoxViewModel.titleText = \"\";\n infoBoxViewModel.description = \"\";\n }\n }\n};\n\n/**\n * @private\n */\nViewer.prototype._onEntityCollectionChanged = function (\n collection,\n added,\n removed\n) {\n var length = removed.length;\n for (var i = 0; i < length; i++) {\n var removedObject = removed[i];\n if (this.trackedEntity === removedObject) {\n this.trackedEntity = undefined;\n }\n if (this.selectedEntity === removedObject) {\n this.selectedEntity = undefined;\n }\n }\n};\n\n/**\n * @private\n */\nViewer.prototype._onInfoBoxCameraClicked = function (infoBoxViewModel) {\n if (\n infoBoxViewModel.isCameraTracking &&\n this.trackedEntity === this.selectedEntity\n ) {\n this.trackedEntity = undefined;\n } else {\n var selectedEntity = this.selectedEntity;\n var position = selectedEntity.position;\n if (defined(position)) {\n this.trackedEntity = this.selectedEntity;\n } else {\n this.zoomTo(this.selectedEntity);\n }\n }\n};\n\n/**\n * @private\n */\nViewer.prototype._clearTrackedObject = function () {\n this.trackedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._onInfoBoxClockClicked = function (infoBoxViewModel) {\n this.selectedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._clearObjects = function () {\n this.trackedEntity = undefined;\n this.selectedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceChanged = function (dataSource) {\n if (this.clockTrackedDataSource === dataSource) {\n trackDataSourceClock(this.timeline, this.clock, dataSource);\n }\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceAdded = function (\n dataSourceCollection,\n dataSource\n) {\n if (this._automaticallyTrackDataSourceClocks) {\n this.clockTrackedDataSource = dataSource;\n }\n var id = dataSource.entities.id;\n var removalFunc = this._eventHelper.add(\n dataSource.changedEvent,\n Viewer.prototype._onDataSourceChanged,\n this\n );\n this._dataSourceChangedListeners[id] = removalFunc;\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceRemoved = function (\n dataSourceCollection,\n dataSource\n) {\n var resetClock = this.clockTrackedDataSource === dataSource;\n var id = dataSource.entities.id;\n this._dataSourceChangedListeners[id]();\n this._dataSourceChangedListeners[id] = undefined;\n if (resetClock) {\n var numDataSources = dataSourceCollection.length;\n if (this._automaticallyTrackDataSourceClocks && numDataSources > 0) {\n this.clockTrackedDataSource = dataSourceCollection.get(\n numDataSources - 1\n );\n } else {\n this.clockTrackedDataSource = undefined;\n }\n }\n};\n\n/**\n * Asynchronously sets the camera to view the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the zoom.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise.<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {HeadingPitchRange} [offset] The offset from the center of the entity in the local east-north-up reference frame.\n * @returns {Promise.<Boolean>} A Promise that resolves to true if the zoom was successful or false if the target is not currently visualized in the scene or the zoom was cancelled.\n */\nViewer.prototype.zoomTo = function (target, offset) {\n var options = {\n offset: offset,\n };\n return zoomToOrFly(this, target, options, false);\n};\n\n/**\n * Flies the camera to the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the flight.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise.<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {Object} [options] Object with the following properties:\n * @param {Number} [options.duration=3.0] The duration of the flight in seconds.\n * @param {Number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target.\n * @returns {Promise.<Boolean>} A Promise that resolves to true if the flight was successful or false if the target is not currently visualized in the scene or the flight was cancelled. //TODO: Cleanup entity mentions\n */\nViewer.prototype.flyTo = function (target, options) {\n return zoomToOrFly(this, target, options, true);\n};\n\nfunction zoomToOrFly(that, zoomTarget, options, isFlight) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(zoomTarget)) {\n throw new DeveloperError(\"zoomTarget is required.\");\n }\n //>>includeEnd('debug');\n\n cancelZoom(that);\n\n //We can't actually perform the zoom until all visualization is ready and\n //bounding spheres have been computed. Therefore we create and return\n //a deferred which will be resolved as part of the post-render step in the\n //frame that actually performs the zoom\n var zoomPromise = when.defer();\n that._zoomPromise = zoomPromise;\n that._zoomIsFlight = isFlight;\n that._zoomOptions = options;\n\n when(zoomTarget, function (zoomTarget) {\n //Only perform the zoom if it wasn't cancelled before the promise resolved.\n if (that._zoomPromise !== zoomPromise) {\n return;\n }\n\n //If the zoom target is a rectangular imagery in an ImageLayer\n if (zoomTarget instanceof ImageryLayer) {\n zoomTarget\n .getViewableRectangle()\n .then(function (rectangle) {\n return computeFlyToLocationForRectangle(rectangle, that.scene);\n })\n .then(function (position) {\n //Only perform the zoom if it wasn't cancelled before the promise was resolved\n if (that._zoomPromise === zoomPromise) {\n that._zoomTarget = position;\n }\n });\n return;\n }\n\n //If the zoom target is a Cesium3DTileset\n if (zoomTarget instanceof Cesium3DTileset) {\n that._zoomTarget = zoomTarget;\n return;\n }\n\n //If the zoom target is a TimeDynamicPointCloud\n if (zoomTarget instanceof TimeDynamicPointCloud) {\n that._zoomTarget = zoomTarget;\n return;\n }\n\n //If the zoom target is a data source, and it's in the middle of loading, wait for it to finish loading.\n if (zoomTarget.isLoading && defined(zoomTarget.loadingEvent)) {\n var removeEvent = zoomTarget.loadingEvent.addEventListener(function () {\n removeEvent();\n\n //Only perform the zoom if it wasn't cancelled before the data source finished.\n if (that._zoomPromise === zoomPromise) {\n that._zoomTarget = zoomTarget.entities.values.slice(0);\n }\n });\n return;\n }\n\n //Zoom target is already an array, just copy it and return.\n if (Array.isArray(zoomTarget)) {\n that._zoomTarget = zoomTarget.slice(0);\n return;\n }\n\n //If zoomTarget is an EntityCollection, this will retrieve the array\n zoomTarget = defaultValue(zoomTarget.values, zoomTarget);\n\n //If zoomTarget is a DataSource, this will retrieve the array.\n if (defined(zoomTarget.entities)) {\n zoomTarget = zoomTarget.entities.values;\n }\n\n //Zoom target is already an array, just copy it and return.\n if (Array.isArray(zoomTarget)) {\n that._zoomTarget = zoomTarget.slice(0);\n } else {\n //Single entity\n that._zoomTarget = [zoomTarget];\n }\n });\n\n that.scene.requestRender();\n return zoomPromise.promise;\n}\n\nfunction clearZoom(viewer) {\n viewer._zoomPromise = undefined;\n viewer._zoomTarget = undefined;\n viewer._zoomOptions = undefined;\n}\n\nfunction cancelZoom(viewer) {\n var zoomPromise = viewer._zoomPromise;\n if (defined(zoomPromise)) {\n clearZoom(viewer);\n zoomPromise.resolve(false);\n }\n}\n\n/**\n * @private\n */\nViewer.prototype._postRender = function () {\n updateZoomTarget(this);\n updateTrackedEntity(this);\n};\n\nfunction updateZoomTarget(viewer) {\n var target = viewer._zoomTarget;\n if (!defined(target) || viewer.scene.mode === SceneMode.MORPHING) {\n return;\n }\n\n var scene = viewer.scene;\n var camera = scene.camera;\n var zoomPromise = viewer._zoomPromise;\n var zoomOptions = defaultValue(viewer._zoomOptions, {});\n var options;\n var boundingSphere;\n\n // If zoomTarget was Cesium3DTileset\n if (target instanceof Cesium3DTileset) {\n return target.readyPromise.then(function () {\n var boundingSphere = target.boundingSphere;\n // If offset was originally undefined then give it base value instead of empty object\n if (!defined(zoomOptions.offset)) {\n zoomOptions.offset = new HeadingPitchRange(\n 0.0,\n -0.5,\n boundingSphere.radius\n );\n }\n\n options = {\n offset: zoomOptions.offset,\n duration: zoomOptions.duration,\n maximumHeight: zoomOptions.maximumHeight,\n complete: function () {\n zoomPromise.resolve(true);\n },\n cancel: function () {\n zoomPromise.resolve(false);\n },\n };\n\n if (viewer._zoomIsFlight) {\n camera.flyToBoundingSphere(target.boundingSphere, options);\n } else {\n camera.viewBoundingSphere(boundingSphere, zoomOptions.offset);\n camera.lookAtTransform(Matrix4.IDENTITY);\n\n // Finish the promise\n zoomPromise.resolve(true);\n }\n\n clearZoom(viewer);\n });\n }\n\n // If zoomTarget was TimeDynamicPointCloud\n if (target instanceof TimeDynamicPointCloud) {\n return target.readyPromise.then(function () {\n var boundingSphere = target.boundingSphere;\n // If offset was originally undefined then give it base value instead of empty object\n if (!defined(zoomOptions.offset)) {\n zoomOptions.offset = new HeadingPitchRange(\n 0.0,\n -0.5,\n boundingSphere.radius\n );\n }\n\n options = {\n offset: zoomOptions.offset,\n duration: zoomOptions.duration,\n maximumHeight: zoomOptions.maximumHeight,\n complete: function () {\n zoomPromise.resolve(true);\n },\n cancel: function () {\n zoomPromise.resolve(false);\n },\n };\n\n if (viewer._zoomIsFlight) {\n camera.flyToBoundingSphere(boundingSphere, options);\n } else {\n camera.viewBoundingSphere(boundingSphere, zoomOptions.offset);\n camera.lookAtTransform(Matrix4.IDENTITY);\n\n // Finish the promise\n zoomPromise.resolve(true);\n }\n\n clearZoom(viewer);\n });\n }\n\n // If zoomTarget was an ImageryLayer\n if (target instanceof Cartographic) {\n options = {\n destination: scene.mapProjection.ellipsoid.cartographicToCartesian(\n target\n ),\n duration: zoomOptions.duration,\n maximumHeight: zoomOptions.maximumHeight,\n complete: function () {\n zoomPromise.resolve(true);\n },\n cancel: function () {\n zoomPromise.resolve(false);\n },\n };\n\n if (viewer._zoomIsFlight) {\n camera.flyTo(options);\n } else {\n camera.setView(options);\n zoomPromise.resolve(true);\n }\n clearZoom(viewer);\n return;\n }\n\n var entities = target;\n\n var boundingSpheres = [];\n for (var i = 0, len = entities.length; i < len; i++) {\n var state = viewer._dataSourceDisplay.getBoundingSphere(\n entities[i],\n false,\n boundingSphereScratch\n );\n\n if (state === BoundingSphereState.PENDING) {\n return;\n } else if (state !== BoundingSphereState.FAILED) {\n boundingSpheres.push(BoundingSphere.clone(boundingSphereScratch));\n }\n }\n\n if (boundingSpheres.length === 0) {\n cancelZoom(viewer);\n return;\n }\n\n //Stop tracking the current entity.\n viewer.trackedEntity = undefined;\n\n boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres);\n\n if (!viewer._zoomIsFlight) {\n camera.viewBoundingSphere(boundingSphere, zoomOptions.offset);\n camera.lookAtTransform(Matrix4.IDENTITY);\n clearZoom(viewer);\n zoomPromise.resolve(true);\n } else {\n clearZoom(viewer);\n camera.flyToBoundingSphere(boundingSphere, {\n duration: zoomOptions.duration,\n maximumHeight: zoomOptions.maximumHeight,\n complete: function () {\n zoomPromise.resolve(true);\n },\n cancel: function () {\n zoomPromise.resolve(false);\n },\n offset: zoomOptions.offset,\n });\n }\n}\n\nfunction updateTrackedEntity(viewer) {\n if (!viewer._needTrackedEntityUpdate) {\n return;\n }\n\n var trackedEntity = viewer._trackedEntity;\n var currentTime = viewer.clock.currentTime;\n\n //Verify we have a current position at this time. This is only triggered if a position\n //has become undefined after trackedEntity is set but before the boundingSphere has been\n //computed. In this case, we will track the entity once it comes back into existence.\n var currentPosition = Property.getValueOrUndefined(\n trackedEntity.position,\n currentTime\n );\n\n if (!defined(currentPosition)) {\n return;\n }\n\n var scene = viewer.scene;\n\n var state = viewer._dataSourceDisplay.getBoundingSphere(\n trackedEntity,\n false,\n boundingSphereScratch\n );\n if (state === BoundingSphereState.PENDING) {\n return;\n }\n\n var sceneMode = scene.mode;\n if (\n sceneMode === SceneMode.COLUMBUS_VIEW ||\n sceneMode === SceneMode.SCENE2D\n ) {\n scene.screenSpaceCameraController.enableTranslate = false;\n }\n\n if (\n sceneMode === SceneMode.COLUMBUS_VIEW ||\n sceneMode === SceneMode.SCENE3D\n ) {\n scene.screenSpaceCameraController.enableTilt = false;\n }\n\n var bs =\n state !== BoundingSphereState.FAILED ? boundingSphereScratch : undefined;\n viewer._entityView = new EntityView(\n trackedEntity,\n scene,\n scene.mapProjection.ellipsoid\n );\n viewer._entityView.update(currentTime, bs);\n viewer._needTrackedEntityUpdate = false;\n}\n\n/**\n * A function that augments a Viewer instance with additional functionality.\n * @callback Viewer.ViewerMixin\n * @param {Viewer} viewer The viewer instance.\n * @param {Object} options Options object to be passed to the mixin function.\n *\n * @see Viewer#extend\n */\nexport default Viewer;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nexport var DISPLAYNAME_PREFIX = \"Blueprint3\";\n/** A collection of curated prop keys used across our Components which are not valid HTMLElement props. */\nvar INVALID_PROPS = [\n \"active\",\n \"alignText\",\n \"containerRef\",\n \"current\",\n \"elementRef\",\n \"fill\",\n \"icon\",\n \"inputRef\",\n \"intent\",\n \"inline\",\n \"large\",\n \"loading\",\n \"leftElement\",\n \"leftIcon\",\n \"minimal\",\n \"onRemove\",\n \"outlined\",\n \"panel\",\n \"panelClassName\",\n \"popoverProps\",\n \"rightElement\",\n \"rightIcon\",\n \"round\",\n \"small\",\n \"text\",\n];\n/**\n * Typically applied to HTMLElements to filter out disallowed props. When applied to a Component,\n * can filter props from being passed down to the children. Can also filter by a combined list of\n * supplied prop keys and the denylist (only appropriate for HTMLElements).\n * @param props The original props object to filter down.\n * @param {string[]} invalidProps If supplied, overwrites the default denylist.\n * @param {boolean} shouldMerge If true, will merge supplied invalidProps and denylist together.\n */\nexport function removeNonHTMLProps(props, invalidProps, shouldMerge) {\n if (invalidProps === void 0) { invalidProps = INVALID_PROPS; }\n if (shouldMerge === void 0) { shouldMerge = false; }\n if (shouldMerge) {\n invalidProps = invalidProps.concat(INVALID_PROPS);\n }\n return invalidProps.reduce(function (prev, curr) {\n // Props with hyphens (e.g. data-*) are always considered html props\n if (curr.indexOf(\"-\") !== -1) {\n return prev;\n }\n if (prev.hasOwnProperty(curr)) {\n delete prev[curr];\n }\n return prev;\n }, __assign({}, props));\n}\n//# sourceMappingURL=props.js.map","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import PropTypes from 'prop-types';\nexport var subscriptionShape = PropTypes.shape({\n trySubscribe: PropTypes.func.isRequired,\n tryUnsubscribe: PropTypes.func.isRequired,\n notifyNestedSubs: PropTypes.func.isRequired,\n isSubscribed: PropTypes.func.isRequired\n});\nexport var storeShape = PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n});","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { storeShape, subscriptionShape } from '../utils/PropTypes';\nimport warning from '../utils/warning';\nvar prefixUnsafeLifecycleMethods = typeof React.forwardRef !== \"undefined\";\nvar didWarnAboutReceivingStore = false;\n\nfunction warnAboutReceivingStore() {\n if (didWarnAboutReceivingStore) {\n return;\n }\n\n didWarnAboutReceivingStore = true;\n warning('<Provider> does not support changing `store` on the fly. ' + 'It is most likely that you see this error because you updated to ' + 'Redux 2.x and React Redux 2.x which no longer hot reload reducers ' + 'automatically. See https://github.com/reduxjs/react-redux/releases/' + 'tag/v2.0.0 for the migration instructions.');\n}\n\nexport function createProvider(storeKey) {\n var _Provider$childContex;\n\n if (storeKey === void 0) {\n storeKey = 'store';\n }\n\n var subscriptionKey = storeKey + \"Subscription\";\n\n var Provider =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[storeKey] = this[storeKey], _ref[subscriptionKey] = null, _ref;\n };\n\n function Provider(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this[storeKey] = props.store;\n return _this;\n }\n\n _proto.render = function render() {\n return Children.only(this.props.children);\n };\n\n return Provider;\n }(Component);\n\n if (process.env.NODE_ENV !== 'production') {\n // Use UNSAFE_ event name where supported\n var eventName = prefixUnsafeLifecycleMethods ? 'UNSAFE_componentWillReceiveProps' : 'componentWillReceiveProps';\n\n Provider.prototype[eventName] = function (nextProps) {\n if (this[storeKey] !== nextProps.store) {\n warnAboutReceivingStore();\n }\n };\n }\n\n Provider.propTypes = {\n store: storeShape.isRequired,\n children: PropTypes.element.isRequired\n };\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[storeKey] = storeShape.isRequired, _Provider$childContex[subscriptionKey] = subscriptionShape, _Provider$childContex);\n return Provider;\n}\nexport default createProvider();","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\nvar CLEARED = null;\nvar nullListeners = {\n notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n // the current/next pattern is copied from redux's createStore code.\n // TODO: refactor+expose that code to be reusable here?\n var current = [];\n var next = [];\n return {\n clear: function clear() {\n next = CLEARED;\n current = CLEARED;\n },\n notify: function notify() {\n var listeners = current = next;\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i]();\n }\n },\n get: function get() {\n return next;\n },\n subscribe: function subscribe(listener) {\n var isSubscribed = true;\n if (next === current) next = current.slice();\n next.push(listener);\n return function unsubscribe() {\n if (!isSubscribed || current === CLEARED) return;\n isSubscribed = false;\n if (next === current) next = current.slice();\n next.splice(next.indexOf(listener), 1);\n };\n }\n };\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n function Subscription(store, parentSub, onStateChange) {\n this.store = store;\n this.parentSub = parentSub;\n this.onStateChange = onStateChange;\n this.unsubscribe = null;\n this.listeners = nullListeners;\n }\n\n var _proto = Subscription.prototype;\n\n _proto.addNestedSub = function addNestedSub(listener) {\n this.trySubscribe();\n return this.listeners.subscribe(listener);\n };\n\n _proto.notifyNestedSubs = function notifyNestedSubs() {\n this.listeners.notify();\n };\n\n _proto.isSubscribed = function isSubscribed() {\n return Boolean(this.unsubscribe);\n };\n\n _proto.trySubscribe = function trySubscribe() {\n if (!this.unsubscribe) {\n this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange);\n this.listeners = createListenerCollection();\n }\n };\n\n _proto.tryUnsubscribe = function tryUnsubscribe() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n this.listeners.clear();\n this.listeners = nullListeners;\n }\n };\n\n return Subscription;\n}();\n\nexport { Subscription as default };","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport React, { Component, createElement } from 'react';\nimport { isValidElementType } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { storeShape, subscriptionShape } from '../utils/PropTypes';\nvar prefixUnsafeLifecycleMethods = typeof React.forwardRef !== \"undefined\";\nvar hotReloadingVersion = 0;\nvar dummyState = {};\n\nfunction noop() {}\n\nfunction makeSelectorStateful(sourceSelector, store) {\n // wrap the selector in an object that tracks its results between runs.\n var selector = {\n run: function runComponentSelector(props) {\n try {\n var nextProps = sourceSelector(store.getState(), props);\n\n if (nextProps !== selector.props || selector.error) {\n selector.shouldComponentUpdate = true;\n selector.props = nextProps;\n selector.error = null;\n }\n } catch (error) {\n selector.shouldComponentUpdate = true;\n selector.error = error;\n }\n }\n };\n return selector;\n}\n\nexport default function connectAdvanced(\n/*\n selectorFactory is a func that is responsible for returning the selector function used to\n compute new props from state, props, and dispatch. For example:\n export default connectAdvanced((dispatch, options) => (state, props) => ({\n thing: state.things[props.thingId],\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n }))(YourComponent)\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n props. Do not use connectAdvanced directly without memoizing results between calls to your\n selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory, // options object:\n_ref) {\n var _contextTypes, _childContextTypes;\n\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\"]);\n\n var subscriptionKey = storeKey + 'Subscription';\n var version = hotReloadingVersion++;\n var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = storeShape, _contextTypes[subscriptionKey] = subscriptionShape, _contextTypes);\n var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = subscriptionShape, _childContextTypes);\n return function wrapWithConnect(WrappedComponent) {\n invariant(isValidElementType(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + JSON.stringify(WrappedComponent)));\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n withRef: withRef,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent // TODO Actually fix our use of componentWillReceiveProps\n\n /* eslint-disable react/no-deprecated */\n\n });\n\n var Connect =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Connect, _Component);\n\n function Connect(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this.version = version;\n _this.state = {};\n _this.renderCount = 0;\n _this.store = props[storeKey] || context[storeKey];\n _this.propsMode = Boolean(props[storeKey]);\n _this.setWrappedInstance = _this.setWrappedInstance.bind(_assertThisInitialized(_assertThisInitialized(_this)));\n invariant(_this.store, \"Could not find \\\"\" + storeKey + \"\\\" in either the context or props of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + (\"or explicitly pass \\\"\" + storeKey + \"\\\" as a prop to \\\"\" + displayName + \"\\\".\"));\n\n _this.initSelector();\n\n _this.initSubscription();\n\n return _this;\n }\n\n var _proto = Connect.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref3;\n\n // If this component received store from props, its subscription should be transparent\n // to any descendants receiving store+subscription from context; it passes along\n // subscription passed to it. Otherwise, it shadows the parent subscription, which allows\n // Connect to control ordering of notifications to flow top-down.\n var subscription = this.propsMode ? null : this.subscription;\n return _ref3 = {}, _ref3[subscriptionKey] = subscription || this.context[subscriptionKey], _ref3;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n if (!shouldHandleStateChanges) return; // componentWillMount fires during server side rendering, but componentDidMount and\n // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount.\n // Otherwise, unsubscription would never take place during SSR, causing a memory leak.\n // To handle the case where a child component may have triggered a state change by\n // dispatching an action in its componentWillMount, we have to re-run the select and maybe\n // re-render.\n\n this.subscription.trySubscribe();\n this.selector.run(this.props);\n if (this.selector.shouldComponentUpdate) this.forceUpdate();\n }; // Note: this is renamed below to the UNSAFE_ version in React >=16.3.0\n\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n this.selector.run(nextProps);\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate() {\n return this.selector.shouldComponentUpdate;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.subscription) this.subscription.tryUnsubscribe();\n this.subscription = null;\n this.notifyNestedSubs = noop;\n this.store = null;\n this.selector.run = noop;\n this.selector.shouldComponentUpdate = false;\n };\n\n _proto.getWrappedInstance = function getWrappedInstance() {\n invariant(withRef, \"To access the wrapped instance, you need to specify \" + (\"{ withRef: true } in the options argument of the \" + methodName + \"() call.\"));\n return this.wrappedInstance;\n };\n\n _proto.setWrappedInstance = function setWrappedInstance(ref) {\n this.wrappedInstance = ref;\n };\n\n _proto.initSelector = function initSelector() {\n var sourceSelector = selectorFactory(this.store.dispatch, selectorFactoryOptions);\n this.selector = makeSelectorStateful(sourceSelector, this.store);\n this.selector.run(this.props);\n };\n\n _proto.initSubscription = function initSubscription() {\n if (!shouldHandleStateChanges) return; // parentSub's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n var parentSub = (this.propsMode ? this.props : this.context)[subscriptionKey];\n this.subscription = new Subscription(this.store, parentSub, this.onStateChange.bind(this)); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `this.subscription` will then be null. An\n // extra null check every change can be avoided by copying the method onto `this` and then\n // replacing it with a no-op on unmount. This can probably be avoided if Subscription's\n // listeners logic is changed to not call listeners that have been unsubscribed in the\n // middle of the notification loop.\n\n this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription);\n };\n\n _proto.onStateChange = function onStateChange() {\n this.selector.run(this.props);\n\n if (!this.selector.shouldComponentUpdate) {\n this.notifyNestedSubs();\n } else {\n this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate;\n this.setState(dummyState);\n }\n };\n\n _proto.notifyNestedSubsOnComponentDidUpdate = function notifyNestedSubsOnComponentDidUpdate() {\n // `componentDidUpdate` is conditionally implemented when `onStateChange` determines it\n // needs to notify nested subs. Once called, it unimplements itself until further state\n // changes occur. Doing it this way vs having a permanent `componentDidUpdate` that does\n // a boolean check every time avoids an extra method call most of the time, resulting\n // in some perf boost.\n this.componentDidUpdate = undefined;\n this.notifyNestedSubs();\n };\n\n _proto.isSubscribed = function isSubscribed() {\n return Boolean(this.subscription) && this.subscription.isSubscribed();\n };\n\n _proto.addExtraProps = function addExtraProps(props) {\n if (!withRef && !renderCountProp && !(this.propsMode && this.subscription)) return props; // make a shallow copy so that fields added don't leak to the original selector.\n // this is especially important for 'ref' since that's a reference back to the component\n // instance. a singleton memoized selector would then be holding a reference to the\n // instance, preventing the instance from being garbage collected, and that would be bad\n\n var withExtras = _extends({}, props);\n\n if (withRef) withExtras.ref = this.setWrappedInstance;\n if (renderCountProp) withExtras[renderCountProp] = this.renderCount++;\n if (this.propsMode && this.subscription) withExtras[subscriptionKey] = this.subscription;\n return withExtras;\n };\n\n _proto.render = function render() {\n var selector = this.selector;\n selector.shouldComponentUpdate = false;\n\n if (selector.error) {\n throw selector.error;\n } else {\n return createElement(WrappedComponent, this.addExtraProps(selector.props));\n }\n };\n\n return Connect;\n }(Component);\n\n if (prefixUnsafeLifecycleMethods) {\n // Use UNSAFE_ event name where supported\n Connect.prototype.UNSAFE_componentWillReceiveProps = Connect.prototype.componentWillReceiveProps;\n delete Connect.prototype.componentWillReceiveProps;\n }\n /* eslint-enable react/no-deprecated */\n\n\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = displayName;\n Connect.childContextTypes = childContextTypes;\n Connect.contextTypes = contextTypes;\n Connect.propTypes = contextTypes;\n\n if (process.env.NODE_ENV !== 'production') {\n // Use UNSAFE_ event name where supported\n var eventName = prefixUnsafeLifecycleMethods ? 'UNSAFE_componentWillUpdate' : 'componentWillUpdate';\n\n Connect.prototype[eventName] = function componentWillUpdate() {\n var _this2 = this;\n\n // We are hot reloading!\n if (this.version !== version) {\n this.version = version;\n this.initSelector(); // If any connected descendants don't hot reload (and resubscribe in the process), their\n // listeners will be lost when we unsubscribe. Unfortunately, by copying over all\n // listeners, this does mean that the old versions of connected descendants will still be\n // notified of state changes; however, their onStateChange function is a no-op so this\n // isn't a huge deal.\n\n var oldListeners = [];\n\n if (this.subscription) {\n oldListeners = this.subscription.listeners.get();\n this.subscription.tryUnsubscribe();\n }\n\n this.initSubscription();\n\n if (shouldHandleStateChanges) {\n this.subscription.trySubscribe();\n oldListeners.forEach(function (listener) {\n return _this2.subscription.listeners.subscribe(listener);\n });\n }\n }\n };\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n// \n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n// \n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n// \n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n// \n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n// \n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\n connect is a facade over connectAdvanced. It turns its args into a compatible\n selectorFactory, which has the signature:\n\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n \n connect passes its args to connectAdvanced as options, which will in turn pass them to\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n selectorFactory returns a final props selector from its mapStateToProps,\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n mergePropsFactories, and pure args.\n\n The resulting final props selector is called by the Connect component instance whenever\n it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default createConnect();","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import defaultValue from \"./defaultValue.js\";\n\n/**\n * Clones an object, returning a new object containing the same properties.\n *\n * @function\n *\n * @param {Object} object The object to clone.\n * @param {Boolean} [deep=false] If true, all properties will be deep cloned recursively.\n * @returns {Object} The cloned object.\n */\nfunction clone(object, deep) {\n if (object === null || typeof object !== \"object\") {\n return object;\n }\n\n deep = defaultValue(deep, false);\n\n var result = new object.constructor();\n for (var propertyName in object) {\n if (object.hasOwnProperty(propertyName)) {\n var value = object[propertyName];\n if (deep) {\n value = clone(value, deep);\n }\n result[propertyName] = value;\n }\n }\n\n return result;\n}\nexport default clone;\n","'use strict';\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction defaultMemoize(func) {\n var equalityCheck = arguments.length <= 1 || arguments[1] === undefined ? defaultEqualityCheck : arguments[1];\n\n var lastArgs = null;\n var lastResult = null;\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (lastArgs === null || lastArgs.length !== args.length || !args.every(function (value, index) {\n return equalityCheck(value, lastArgs[index]);\n })) {\n lastResult = func.apply(undefined, args);\n }\n lastArgs = args;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep;\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n for (var _len2 = arguments.length, memoizeOptions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n memoizeOptions[_key2 - 1] = arguments[_key2];\n }\n\n return function () {\n for (var _len3 = arguments.length, funcs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n funcs[_key3] = arguments[_key3];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++;\n return resultFunc.apply(undefined, arguments);\n }].concat(memoizeOptions));\n\n var selector = function selector(state, props) {\n for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {\n args[_key4 - 2] = arguments[_key4];\n }\n\n var params = dependencies.map(function (dependency) {\n return dependency.apply(undefined, [state, props].concat(args));\n });\n return memoizedResultFunc.apply(undefined, _toConsumableArray(params));\n };\n\n selector.resultFunc = resultFunc;\n selector.recomputations = function () {\n return recomputations;\n };\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n return selector;\n };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n var selectorCreator = arguments.length <= 1 || arguments[1] === undefined ? createSelector : arguments[1];\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n }\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len5 = arguments.length, values = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n values[_key5] = arguments[_key5];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Merges two objects, copying their properties onto a new combined object. When two objects have the same\n * property, the value of the property on the first object is used. If either object is undefined,\n * it will be treated as an empty object.\n *\n * @example\n * var object1 = {\n * propOne : 1,\n * propTwo : {\n * value1 : 10\n * }\n * }\n * var object2 = {\n * propTwo : 2\n * }\n * var final = Cesium.combine(object1, object2);\n *\n * // final === {\n * // propOne : 1,\n * // propTwo : {\n * // value1 : 10\n * // }\n * // }\n *\n * @param {Object} [object1] The first object to merge.\n * @param {Object} [object2] The second object to merge.\n * @param {Boolean} [deep=false] Perform a recursive merge.\n * @returns {Object} The combined object containing all properties from both objects.\n *\n * @function\n */\nfunction combine(object1, object2, deep) {\n deep = defaultValue(deep, false);\n\n var result = {};\n\n var object1Defined = defined(object1);\n var object2Defined = defined(object2);\n var property;\n var object1Value;\n var object2Value;\n if (object1Defined) {\n for (property in object1) {\n if (object1.hasOwnProperty(property)) {\n object1Value = object1[property];\n if (\n object2Defined &&\n deep &&\n typeof object1Value === \"object\" &&\n object2.hasOwnProperty(property)\n ) {\n object2Value = object2[property];\n if (typeof object2Value === \"object\") {\n result[property] = combine(object1Value, object2Value, deep);\n } else {\n result[property] = object1Value;\n }\n } else {\n result[property] = object1Value;\n }\n }\n }\n }\n if (object2Defined) {\n for (property in object2) {\n if (\n object2.hasOwnProperty(property) &&\n !result.hasOwnProperty(property)\n ) {\n object2Value = object2[property];\n result[property] = object2Value;\n }\n }\n }\n return result;\n}\nexport default combine;\n","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ns = \"[Blueprint Table]\";\n// const deprec = `${ns} DEPRECATION:`;\nexport var QUADRANT_ON_SCROLL_UNNECESSARILY_DEFINED = ns + \" <TableQuadrant> onScroll need not be defined for any quadrant aside from the MAIN quadrant.\";\nexport var TABLE_EXPAND_FOCUSED_REGION_MULTI_COLUMN_REGION = ns + \" <Table> Cannot expand a FULL_COLUMNS selection using a multi-column region.\";\nexport var TABLE_EXPAND_FOCUSED_REGION_MULTI_ROW_REGION = ns + \" <Table> Cannot expand a FULL_COLUMNS selection using a multi-row region.\";\nexport var TABLE_NON_COLUMN_CHILDREN_WARNING = ns + \" <Table> Children of Table must be Columns\\\"\";\nexport var TABLE_NUM_FROZEN_COLUMNS_BOUND_WARNING = ns +\n \" <Table> numFrozenColumns must be in less than or equal to the number of columns. Clamping the value for you.\";\nexport var TABLE_NUM_FROZEN_COLUMNS_NEGATIVE = ns + \" <Table> requires numFrozenColumns to be greater than or equal to 0.\";\nexport var TABLE_NUM_FROZEN_ROWS_BOUND_WARNING = ns + \" <Table> numFrozenRows must be less than or equal to numRows. Clamping the value for you.\";\nexport var TABLE_NUM_FROZEN_ROWS_NEGATIVE = ns + \" <Table> requires numFrozenRows to be greater than or equal to 0.\";\nexport var TABLE_NUM_ROWS_ROW_HEIGHTS_MISMATCH = ns + \" <Table> requires rowHeights.length to equal numRows when both props are provided.\";\nexport var TABLE_NUM_ROWS_NEGATIVE = ns + \" <Table> requires numRows to be greater than or equal to 0.\";\nexport var TABLE_NUM_COLUMNS_COLUMN_WIDTHS_MISMATCH = ns + \" <Table> requires columnWidths.length to equal the number of <Column>s if provided.\";\n//# sourceMappingURL=errors.js.map","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { IconSvgPaths16, IconSvgPaths20 } from \"@blueprintjs/icons\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX } from \"../../common\";\nvar Icon = /** @class */ (function (_super) {\n __extends(Icon, _super);\n function Icon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Icon_1 = Icon;\n Icon.prototype.render = function () {\n var icon = this.props.icon;\n if (icon == null || typeof icon === \"boolean\") {\n return null;\n }\n else if (typeof icon !== \"string\") {\n return icon;\n }\n var _a = this.props, className = _a.className, color = _a.color, htmlTitle = _a.htmlTitle, _b = _a.iconSize, iconSize = _b === void 0 ? Icon_1.SIZE_STANDARD : _b, intent = _a.intent, _c = _a.title, title = _c === void 0 ? icon : _c, _d = _a.tagName, tagName = _d === void 0 ? \"span\" : _d, htmlprops = __rest(_a, [\"className\", \"color\", \"htmlTitle\", \"iconSize\", \"intent\", \"title\", \"tagName\"]);\n // choose which pixel grid is most appropriate for given icon size\n var pixelGridSize = iconSize >= Icon_1.SIZE_LARGE ? Icon_1.SIZE_LARGE : Icon_1.SIZE_STANDARD;\n // render path elements, or nothing if icon name is unknown.\n var paths = this.renderSvgPaths(pixelGridSize, icon);\n var classes = classNames(Classes.ICON, Classes.iconClass(icon), Classes.intentClass(intent), className);\n var viewBox = \"0 0 \" + pixelGridSize + \" \" + pixelGridSize;\n return React.createElement(tagName, __assign(__assign({}, htmlprops), { className: classes, title: htmlTitle }), React.createElement(\"svg\", { fill: color, \"data-icon\": icon, width: iconSize, height: iconSize, viewBox: viewBox },\n title && React.createElement(\"desc\", null, title),\n paths));\n };\n /** Render `<path>` elements for the given icon name. Returns `null` if name is unknown. */\n Icon.prototype.renderSvgPaths = function (pathsSize, iconName) {\n var svgPathsRecord = pathsSize === Icon_1.SIZE_STANDARD ? IconSvgPaths16 : IconSvgPaths20;\n var pathStrings = svgPathsRecord[iconName];\n if (pathStrings == null) {\n return null;\n }\n return pathStrings.map(function (d, i) { return React.createElement(\"path\", { key: i, d: d, fillRule: \"evenodd\" }); });\n };\n var Icon_1;\n Icon.displayName = DISPLAYNAME_PREFIX + \".Icon\";\n Icon.SIZE_STANDARD = 16;\n Icon.SIZE_LARGE = 20;\n Icon = Icon_1 = __decorate([\n polyfill\n ], Icon);\n return Icon;\n}(AbstractPureComponent2));\nexport { Icon };\n//# sourceMappingURL=icon.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nimport { Icon } from \"@blueprintjs/core\";\n// used to exclude icons from column header measure\nexport var CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT = \"bp-table-text-no-measure\";\n// supposed width of the icons placeholder\nvar EXCLUDED_ICON_PLACEHOLDER_WIDTH = Icon.SIZE_STANDARD;\n/**\n * Since Firefox doesn't provide a computed \"font\" property, we manually\n * construct it using the ordered properties that can be specifed in CSS.\n */\nvar CSS_FONT_PROPERTIES = [\"font-style\", \"font-variant\", \"font-weight\", \"font-size\", \"font-family\"];\n// table is nearly deprecated, let's not block on code coverage\n/* istanbul ignore next */\nexport var Utils = {\n /**\n * Invokes the callback `n` times, collecting the results in an array, which\n * is the return value. Similar to _.times\n */\n times: function (n, callback) {\n if (n < 0) {\n throw new Error(\"[Blueprint] times() cannot be called with negative numbers.\");\n }\n var result = Array(n);\n for (var index = 0; index < n; index++) {\n result[index] = callback(index);\n }\n return result;\n },\n /**\n * Takes an array of numbers, returns an array of numbers of the same length in which each\n * value is the sum of current and previous values in the input array.\n *\n * Example input: [10, 20, 50]\n * output: [10, 30, 80]\n */\n accumulate: function (numbers) {\n var result = [];\n var sum = 0;\n for (var _i = 0, numbers_1 = numbers; _i < numbers_1.length; _i++) {\n var num = numbers_1[_i];\n sum += num;\n result.push(sum);\n }\n return result;\n },\n /**\n * Returns traditional spreadsheet-style column names\n * e.g. (A, B, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...).\n *\n * Note that this isn't technically mathematically equivalent to base 26 since\n * there is no zero element.\n */\n toBase26Alpha: function (num) {\n var str = \"\";\n while (true) {\n var letter = num % 26;\n // eslint-disable-next-line id-blacklist\n str = String.fromCharCode(65 + letter) + str;\n num = num - letter;\n if (num <= 0) {\n return str;\n }\n num = num / 26 - 1;\n }\n },\n /**\n * Returns traditional spreadsheet-style cell names\n * e.g. (A1, B2, ..., Z44, AA1) with rows 1-indexed.\n */\n toBase26CellName: function (rowIndex, columnIndex) {\n return \"\" + Utils.toBase26Alpha(columnIndex) + (rowIndex + 1);\n },\n /**\n * Performs the binary search algorithm to find the index of the `value`\n * parameter in a sorted list of numbers. If `value` is not in the list, the\n * index where `value` can be inserted to maintain the sort is returned.\n *\n * Unlike a typical binary search implementation, we use a `lookup`\n * callback to access the sorted list of numbers instead of an array. This\n * avoids additional storage overhead.\n *\n * We use this to, for example, find the index of a row/col given its client\n * coordinate.\n *\n * Adapted from lodash https://github.com/lodash/lodash/blob/4.11.2/lodash.js#L3579\n *\n * @param value - the query value\n * @param high - the length of the sorted list of numbers\n * @param lookup - returns the number from the list at the supplied index\n */\n binarySearch: function (value, high, lookup) {\n var low = 0;\n while (low < high) {\n var mid = Math.floor((low + high) / 2.0);\n var computed = lookup(mid);\n if (computed < value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return high;\n },\n /**\n * Returns a copy of the array that will have a length of the supplied parameter.\n * If the array is too long, it will be truncated. If it is too short, it will be\n * filled with the suppleid `fillValue` argument.\n *\n * @param array - the `Array` to copy and adjust\n * @param length - the target length of the array\n * @param fillValue - the value to add to the array if it is too short\n */\n arrayOfLength: function (array, length, fillValue) {\n if (array.length > length) {\n return array.slice(0, length);\n }\n array = array.slice();\n while (array.length < length) {\n array.push(fillValue);\n }\n return array;\n },\n /**\n * Takes in one full array of values and one sparse array of the same\n * length and type. Returns a copy of the `defaults` array, where each\n * value is replaced with the corresponding non-null value at the same\n * index in `sparseOverrides`.\n *\n * @param defaults - the full array of default values\n * @param sparseOverrides - the sparse array of override values\n */\n assignSparseValues: function (defaults, sparseOverrides) {\n if (sparseOverrides == null || defaults.length !== sparseOverrides.length) {\n return defaults;\n }\n defaults = defaults.slice();\n for (var i = 0; i < defaults.length; i++) {\n var override = sparseOverrides[i];\n if (override != null) {\n defaults[i] = override;\n }\n }\n return defaults;\n },\n /**\n * Measures the bounds of supplied element's textContent.\n * We use the computed font from the supplied element and a non-DOM canvas\n * context to measure the text.\n */\n measureElementTextContent: function (element) {\n var context = document.createElement(\"canvas\").getContext(\"2d\");\n var style = getComputedStyle(element, null);\n context.font = CSS_FONT_PROPERTIES.map(function (prop) { return style.getPropertyValue(prop); }).join(\" \");\n return measureTextContentWithExclusions(context, element);\n },\n /**\n * Given a number, returns a value that is clamped within a\n * minimum/maximum bounded range. The minimum and maximum are optional. If\n * either is missing, that extrema limit is not applied.\n *\n * Assumes max >= min.\n */\n clamp: function (value, min, max) {\n if (min != null && value < min) {\n value = min;\n }\n if (max != null && value > max) {\n value = max;\n }\n return value;\n },\n /**\n * When reordering a contiguous block of rows or columns to a new index, we show a preview guide\n * at the absolute index in the original ordering but emit the new index in the reordered list.\n * This function converts an absolute \"guide\" index to a relative \"reordered\" index.\n *\n * Example: Say we want to move the first three columns two spots to the right. While we drag, a\n * vertical guide is shown to preview where we'll be dropping the columns. (In the following\n * ASCII art, `*` denotes a selected column, `·` denotes a cell border, and `|` denotes a\n * vertical guide).\n *\n * Before mousedown:\n * · 0 · 1 · 2 · 3 · 4 · 5 ·\n * * * *\n *\n * During mousemove two spots to the right:\n * · 0 · 1 · 2 · 3 · 4 | 5 ·\n * * * *\n *\n * After mouseup:\n * · 3 · 4 · 0 · 1 · 2 · 5 ·\n * * * *\n *\n * Note that moving the three columns beyond index 4 effectively moves them two spots rightward.\n *\n * In this case, the inputs to this function would be:\n * - oldIndex: 0 (the left-most index of the selected column range in the original ordering)\n * - newIndex: 5 (the index on whose left boundary the guide appears in the original ordering)\n * - length: 3 (the number of columns to move)\n *\n * The return value will then be 2, the left-most index of the columns in the new ordering.\n */\n guideIndexToReorderedIndex: function (oldIndex, newIndex, length) {\n if (newIndex < oldIndex) {\n return newIndex;\n }\n else if (oldIndex <= newIndex && newIndex < oldIndex + length) {\n return oldIndex;\n }\n else {\n return Math.max(0, newIndex - length);\n }\n },\n /**\n * When reordering a contiguous block of rows or columns to a new index, we show a preview guide\n * at the absolute index in the original ordering but emit the new index in the reordered list.\n * This function converts a relative \"reordered\"\" index to an absolute \"guide\" index.\n *\n * For the scenario in the example above, the inputs to this function would be:\n * - oldIndex: 0 (the left-most index of the selected column range in the original ordering)\n * - newIndex: 2 (the left-most index of the selected column range in the new ordering)\n * - length: 3 (the number of columns to move)\n *\n * The return value will then be 5, the index on whose left boundary the guide should appear in\n * the original ordering.\n */\n reorderedIndexToGuideIndex: function (oldIndex, newIndex, length) {\n return newIndex <= oldIndex ? newIndex : newIndex + length;\n },\n /**\n * Returns a copy of the provided array with the `length` contiguous elements starting at the\n * `from` index reordered to start at the `to` index.\n *\n * For example, given the array [A,B,C,D,E,F], reordering the 3 contiguous elements starting at\n * index 1 (B, C, and D) to start at index 2 would yield [A,E,B,C,D,F].\n */\n reorderArray: function (array, from, to, length) {\n if (length === void 0) { length = 1; }\n if (length === 0 || length === array.length || from === to) {\n // return an unchanged copy\n return array.slice();\n }\n if (length < 0 || length > array.length || from + length > array.length) {\n return undefined;\n }\n var before = array.slice(0, from);\n var within = array.slice(from, from + length);\n var after = array.slice(from + length);\n var result = [];\n var i = 0;\n var b = 0;\n var w = 0;\n var a = 0;\n while (i < to) {\n if (b < before.length) {\n result.push(before[b]);\n b += 1;\n }\n else {\n result.push(after[a]);\n a += 1;\n }\n i += 1;\n }\n while (w < length) {\n result.push(within[w]);\n w += 1;\n i += 1;\n }\n while (i < array.length) {\n if (b < before.length) {\n result.push(before[b]);\n b += 1;\n }\n else {\n result.push(after[a]);\n a += 1;\n }\n i += 1;\n }\n return result;\n },\n /**\n * Returns true if the mouse event was triggered by the left mouse button.\n */\n isLeftClick: function (event) {\n return event.button === 0;\n },\n getApproxCellHeight: function (cellText, columnWidth, approxCharWidth, approxLineHeight, horizontalPadding, numBufferLines) {\n var numCharsInCell = cellText == null ? 0 : cellText.length;\n var actualCellWidth = columnWidth;\n var availableCellWidth = actualCellWidth - horizontalPadding;\n var approxCharsPerLine = availableCellWidth / approxCharWidth;\n var approxNumLinesDesired = Math.ceil(numCharsInCell / approxCharsPerLine) + numBufferLines;\n var approxCellHeight = approxNumLinesDesired * approxLineHeight;\n return approxCellHeight;\n },\n};\n// table is nearly deprecated, let's not block on code coverage\n/* istanbul ignore next */\n/**\n * Wrapper around Canvas measureText which applies some extra logic to optionally\n * exclude an element's text from the computation.\n */\nfunction measureTextContentWithExclusions(context, element) {\n var elementsToExclude = element.querySelectorAll(\".\" + CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT);\n var excludedElementsWidth = 0;\n if (elementsToExclude && elementsToExclude.length) {\n elementsToExclude.forEach(function (e) {\n var excludedMetrics = context.measureText(e.textContent);\n excludedElementsWidth += excludedMetrics.width - EXCLUDED_ICON_PLACEHOLDER_WIDTH;\n });\n }\n var metrics = context.measureText(element.textContent);\n var metricsWithExclusions = __assign(__assign({}, metrics), { width: metrics.width - excludedElementsWidth });\n return metricsWithExclusions;\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright 2019 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { isNodeEnv } from \"./utils\";\n/**\n * An abstract component that Blueprint components can extend\n * in order to add some common functionality like runtime props validation.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nvar AbstractPureComponent2 = /** @class */ (function (_super) {\n __extends(AbstractPureComponent2, _super);\n function AbstractPureComponent2(props, context) {\n var _this = _super.call(this, props, context) || this;\n // Not bothering to remove entries when their timeouts finish because clearing invalid ID is a no-op\n _this.timeoutIds = [];\n /**\n * Clear all known timeouts.\n */\n _this.clearTimeouts = function () {\n if (_this.timeoutIds.length > 0) {\n for (var _i = 0, _a = _this.timeoutIds; _i < _a.length; _i++) {\n var timeoutId = _a[_i];\n window.clearTimeout(timeoutId);\n }\n _this.timeoutIds = [];\n }\n };\n if (!isNodeEnv(\"production\")) {\n _this.validateProps(_this.props);\n }\n return _this;\n }\n AbstractPureComponent2.prototype.componentDidUpdate = function (_prevProps, _prevState, _snapshot) {\n if (!isNodeEnv(\"production\")) {\n this.validateProps(this.props);\n }\n };\n AbstractPureComponent2.prototype.componentWillUnmount = function () {\n this.clearTimeouts();\n };\n /**\n * Set a timeout and remember its ID.\n * All stored timeouts will be cleared when component unmounts.\n * @returns a \"cancel\" function that will clear timeout when invoked.\n */\n AbstractPureComponent2.prototype.setTimeout = function (callback, timeout) {\n var handle = window.setTimeout(callback, timeout);\n this.timeoutIds.push(handle);\n return function () { return window.clearTimeout(handle); };\n };\n /**\n * Ensures that the props specified for a component are valid.\n * Implementations should check that props are valid and usually throw an Error if they are not.\n * Implementations should not duplicate checks that the type system already guarantees.\n *\n * This method should be used instead of React's\n * [propTypes](https://facebook.github.io/react/docs/reusable-components.html#prop-validation) feature.\n * Like propTypes, these runtime checks run only in development mode.\n */\n AbstractPureComponent2.prototype.validateProps = function (_props) {\n // implement in subclass\n };\n return AbstractPureComponent2;\n}(React.PureComponent));\nexport { AbstractPureComponent2 };\n//# sourceMappingURL=abstractPureComponent2.js.map","/**\n * @license\n *\n * Grauw URI utilities\n *\n * See: http://hg.grauw.nl/grauw-lib/file/tip/src/uri.js\n *\n * @author Laurens Holst (http://www.grauw.nl/)\n *\n * Copyright 2012 Laurens Holst\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\t/**\n\t * Constructs a URI object.\n\t * @constructor\n\t * @class Implementation of URI parsing and base URI resolving algorithm in RFC 3986.\n\t * @param {string|URI} uri A string or URI object to create the object from.\n\t */\n\tfunction URI(uri) {\n\t\tif (uri instanceof URI) { // copy constructor\n\t\t\tthis.scheme = uri.scheme;\n\t\t\tthis.authority = uri.authority;\n\t\t\tthis.path = uri.path;\n\t\t\tthis.query = uri.query;\n\t\t\tthis.fragment = uri.fragment;\n\t\t} else if (uri) { // uri is URI string or cast to string\n\t\t\tvar c = parseRegex.exec(uri);\n\t\t\tthis.scheme = c[1];\n\t\t\tthis.authority = c[2];\n\t\t\tthis.path = c[3];\n\t\t\tthis.query = c[4];\n\t\t\tthis.fragment = c[5];\n\t\t}\n\t}\n\t// Initial values on the prototype\n\tURI.prototype.scheme = null;\n\tURI.prototype.authority = null;\n\tURI.prototype.path = '';\n\tURI.prototype.query = null;\n\tURI.prototype.fragment = null;\n\n\t// Regular expression from RFC 3986 appendix B\n\tvar parseRegex = new RegExp('^(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\\\\?([^#]*))?(?:#(.*))?$');\n\n\t/**\n\t * Returns the scheme part of the URI.\n\t * In \"http://example.com:80/a/b?x#y\" this is \"http\".\n\t */\n\tURI.prototype.getScheme = function() {\n\t\treturn this.scheme;\n\t};\n\n\t/**\n\t * Returns the authority part of the URI.\n\t * In \"http://example.com:80/a/b?x#y\" this is \"example.com:80\".\n\t */\n\tURI.prototype.getAuthority = function() {\n\t\treturn this.authority;\n\t};\n\n\t/**\n\t * Returns the path part of the URI.\n\t * In \"http://example.com:80/a/b?x#y\" this is \"/a/b\".\n\t * In \"mailto:mike@example.com\" this is \"mike@example.com\".\n\t */\n\tURI.prototype.getPath = function() {\n\t\treturn this.path;\n\t};\n\n\t/**\n\t * Returns the query part of the URI.\n\t * In \"http://example.com:80/a/b?x#y\" this is \"x\".\n\t */\n\tURI.prototype.getQuery = function() {\n\t\treturn this.query;\n\t};\n\n\t/**\n\t * Returns the fragment part of the URI.\n\t * In \"http://example.com:80/a/b?x#y\" this is \"y\".\n\t */\n\tURI.prototype.getFragment = function() {\n\t\treturn this.fragment;\n\t};\n\n\t/**\n\t * Tests whether the URI is an absolute URI.\n\t * See RFC 3986 section 4.3.\n\t */\n\tURI.prototype.isAbsolute = function() {\n\t\treturn !!this.scheme && !this.fragment;\n\t};\n\n\t///**\n\t//* Extensive validation of the URI against the ABNF in RFC 3986\n\t//*/\n\t//URI.prototype.validate\n\n\t/**\n\t * Tests whether the URI is a same-document reference.\n\t * See RFC 3986 section 4.4.\n\t *\n\t * To perform more thorough comparison, you can normalise the URI objects.\n\t */\n\tURI.prototype.isSameDocumentAs = function(uri) {\n\t\treturn uri.scheme == this.scheme &&\n\t\t uri.authority == this.authority &&\n\t\t uri.path == this.path &&\n\t\t uri.query == this.query;\n\t};\n\n\t/**\n\t * Simple String Comparison of two URIs.\n\t * See RFC 3986 section 6.2.1.\n\t *\n\t * To perform more thorough comparison, you can normalise the URI objects.\n\t */\n\tURI.prototype.equals = function(uri) {\n\t\treturn this.isSameDocumentAs(uri) && uri.fragment == this.fragment;\n\t};\n\n\t/**\n\t * Normalizes the URI using syntax-based normalization.\n\t * This includes case normalization, percent-encoding normalization and path segment normalization.\n\t * XXX: Percent-encoding normalization does not escape characters that need to be escaped.\n\t * (Although that would not be a valid URI in the first place. See validate().)\n\t * See RFC 3986 section 6.2.2.\n\t */\n\tURI.prototype.normalize = function() {\n\t\tthis.removeDotSegments();\n\t\tif (this.scheme)\n\t\t\tthis.scheme = this.scheme.toLowerCase();\n\t\tif (this.authority)\n\t\t\tthis.authority = this.authority.replace(authorityRegex, replaceAuthority).\n\t\t\t\t\t\t\t\t\treplace(caseRegex, replaceCase);\n\t\tif (this.path)\n\t\t\tthis.path = this.path.replace(caseRegex, replaceCase);\n\t\tif (this.query)\n\t\t\tthis.query = this.query.replace(caseRegex, replaceCase);\n\t\tif (this.fragment)\n\t\t\tthis.fragment = this.fragment.replace(caseRegex, replaceCase);\n\t};\n\n\tvar caseRegex = /%[0-9a-z]{2}/gi;\n\tvar percentRegex = /[a-zA-Z0-9\\-\\._~]/;\n\tvar authorityRegex = /(.*@)?([^@:]*)(:.*)?/;\n\n\tfunction replaceCase(str) {\n\t\tvar dec = unescape(str);\n\t\treturn percentRegex.test(dec) ? dec : str.toUpperCase();\n\t}\n\n\tfunction replaceAuthority(str, p1, p2, p3) {\n\t\treturn (p1 || '') + p2.toLowerCase() + (p3 || '');\n\t}\n\n\t/**\n\t * Resolve a relative URI (this) against a base URI.\n\t * The base URI must be an absolute URI.\n\t * See RFC 3986 section 5.2\n\t */\n\tURI.prototype.resolve = function(baseURI) {\n\t\tvar uri = new URI();\n\t\tif (this.scheme) {\n\t\t\turi.scheme = this.scheme;\n\t\t\turi.authority = this.authority;\n\t\t\turi.path = this.path;\n\t\t\turi.query = this.query;\n\t\t} else {\n\t\t\turi.scheme = baseURI.scheme;\n\t\t\tif (this.authority) {\n\t\t\t\turi.authority = this.authority;\n\t\t\t\turi.path = this.path;\n\t\t\t\turi.query = this.query;\n\t\t\t} else {\n\t\t\t\turi.authority = baseURI.authority;\n\t\t\t\tif (this.path == '') {\n\t\t\t\t\turi.path = baseURI.path;\n\t\t\t\t\turi.query = this.query || baseURI.query;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.path.charAt(0) == '/') {\n\t\t\t\t\t\turi.path = this.path;\n\t\t\t\t\t\turi.removeDotSegments();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (baseURI.authority && baseURI.path == '') {\n\t\t\t\t\t\t\turi.path = '/' + this.path;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\turi.path = baseURI.path.substring(0, baseURI.path.lastIndexOf('/') + 1) + this.path;\n\t\t\t\t\t\t}\n\t\t\t\t\t\turi.removeDotSegments();\n\t\t\t\t\t}\n\t\t\t\t\turi.query = this.query;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\turi.fragment = this.fragment;\n\t\treturn uri;\n\t};\n\n\t/**\n\t * Remove dot segments from path.\n\t * See RFC 3986 section 5.2.4\n\t * @private\n\t */\n\tURI.prototype.removeDotSegments = function() {\n\t\tvar input = this.path.split('/'),\n\t\t\toutput = [],\n\t\t\tsegment,\n\t\t\tabsPath = input[0] == '';\n\t\tif (absPath)\n\t\t\tinput.shift();\n\t\tvar sFirst = input[0] == '' ? input.shift() : null;\n\t\twhile (input.length) {\n\t\t\tsegment = input.shift();\n\t\t\tif (segment == '..') {\n\t\t\t\toutput.pop();\n\t\t\t} else if (segment != '.') {\n\t\t\t\toutput.push(segment);\n\t\t\t}\n\t\t}\n\t\tif (segment == '.' || segment == '..')\n\t\t\toutput.push('');\n\t\tif (absPath)\n\t\t\toutput.unshift('');\n\t\tthis.path = output.join('/');\n\t};\n\n\t// We don't like this function because it builds up a cache that is never cleared.\n//\t/**\n//\t * Resolves a relative URI against an absolute base URI.\n//\t * Convenience method.\n//\t * @param {String} uri the relative URI to resolve\n//\t * @param {String} baseURI the base URI (must be absolute) to resolve against\n//\t */\n//\tURI.resolve = function(sURI, sBaseURI) {\n//\t\tvar uri = cache[sURI] || (cache[sURI] = new URI(sURI));\n//\t\tvar baseURI = cache[sBaseURI] || (cache[sBaseURI] = new URI(sBaseURI));\n//\t\treturn uri.resolve(baseURI).toString();\n//\t};\n\n//\tvar cache = {};\n\n\t/**\n\t * Serialises the URI to a string.\n\t */\n\tURI.prototype.toString = function() {\n\t\tvar result = '';\n\t\tif (this.scheme)\n\t\t\tresult += this.scheme + ':';\n\t\tif (this.authority)\n\t\t\tresult += '//' + this.authority;\n\t\tresult += this.path;\n\t\tif (this.query)\n\t\t\tresult += '?' + this.query;\n\t\tif (this.fragment)\n\t\t\tresult += '#' + this.fragment;\n\t\treturn result;\n\t};\n\nexport default URI;\n","/**\n * State of the request.\n *\n * @enum {Number}\n */\nvar RequestState = {\n /**\n * Initial unissued state.\n *\n * @type Number\n * @constant\n */\n UNISSUED: 0,\n\n /**\n * Issued but not yet active. Will become active when open slots are available.\n *\n * @type Number\n * @constant\n */\n ISSUED: 1,\n\n /**\n * Actual http request has been sent.\n *\n * @type Number\n * @constant\n */\n ACTIVE: 2,\n\n /**\n * Request completed successfully.\n *\n * @type Number\n * @constant\n */\n RECEIVED: 3,\n\n /**\n * Request was cancelled, either explicitly or automatically because of low priority.\n *\n * @type Number\n * @constant\n */\n CANCELLED: 4,\n\n /**\n * Request failed.\n *\n * @type Number\n * @constant\n */\n FAILED: 5,\n};\nexport default Object.freeze(RequestState);\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var Position = {\n BOTTOM: \"bottom\",\n BOTTOM_LEFT: \"bottom-left\",\n BOTTOM_RIGHT: \"bottom-right\",\n LEFT: \"left\",\n LEFT_BOTTOM: \"left-bottom\",\n LEFT_TOP: \"left-top\",\n RIGHT: \"right\",\n RIGHT_BOTTOM: \"right-bottom\",\n RIGHT_TOP: \"right-top\",\n TOP: \"top\",\n TOP_LEFT: \"top-left\",\n TOP_RIGHT: \"top-right\",\n};\nexport function isPositionHorizontal(position) {\n /* istanbul ignore next */\n return (position === Position.TOP ||\n position === Position.TOP_LEFT ||\n position === Position.TOP_RIGHT ||\n position === Position.BOTTOM ||\n position === Position.BOTTOM_LEFT ||\n position === Position.BOTTOM_RIGHT);\n}\nexport function isPositionVertical(position) {\n /* istanbul ignore next */\n return (position === Position.LEFT ||\n position === Position.LEFT_TOP ||\n position === Position.LEFT_BOTTOM ||\n position === Position.RIGHT ||\n position === Position.RIGHT_TOP ||\n position === Position.RIGHT_BOTTOM);\n}\nexport function getPositionIgnoreAngles(position) {\n if (position === Position.TOP || position === Position.TOP_LEFT || position === Position.TOP_RIGHT) {\n return Position.TOP;\n }\n else if (position === Position.BOTTOM ||\n position === Position.BOTTOM_LEFT ||\n position === Position.BOTTOM_RIGHT) {\n return Position.BOTTOM;\n }\n else if (position === Position.LEFT || position === Position.LEFT_TOP || position === Position.LEFT_BOTTOM) {\n return Position.LEFT;\n }\n else {\n return Position.RIGHT;\n }\n}\n//# sourceMappingURL=position.js.map","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns whether the value is a function. Acts as a type guard. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isFunction(value) {\n return typeof value === \"function\";\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function safeInvoke(func) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (isFunction(func)) {\n return func.apply(void 0, args);\n }\n return undefined;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function safeInvokeOrValue(funcOrValue) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return isFunction(funcOrValue) ? funcOrValue.apply(void 0, args) : funcOrValue;\n}\n//# sourceMappingURL=functionUtils.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from \"./compareUtils\";\nexport * from \"./domUtils\";\nexport * from \"./functionUtils\";\nexport * from \"./jsUtils\";\nexport * from \"./reactUtils\";\nexport * from \"./safeInvokeMember\";\n/**\n * Utils.getRef() was added to the public API in @blueprintjs/core@3.27.0,\n * but ref utils were refactored in the next version. We keep this additional\n * export around for backwards compatibility.\n * @see https://github.com/palantir/blueprint/pull/4140\n */\nexport { getRef } from \"../refs\";\n//# sourceMappingURL=index.js.map","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\n\n/**\n * Stores information for making a request. In general this does not need to be constructed directly.\n *\n * @alias Request\n * @constructor\n\n * @param {Object} [options] An object with the following properties:\n * @param {String} [options.url] The url to request.\n * @param {Request.RequestCallback} [options.requestFunction] The function that makes the actual data request.\n * @param {Request.CancelCallback} [options.cancelFunction] The function that is called when the request is cancelled.\n * @param {Request.PriorityCallback} [options.priorityFunction] The function that is called to update the request's priority, which occurs once per frame.\n * @param {Number} [options.priority=0.0] The initial priority of the request.\n * @param {Boolean} [options.throttle=false] Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority.\n * @param {Boolean} [options.throttleByServer=false] Whether to throttle the request by server.\n * @param {RequestType} [options.type=RequestType.OTHER] The type of request.\n */\nfunction Request(options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n\n var throttleByServer = defaultValue(options.throttleByServer, false);\n var throttle = defaultValue(options.throttle, false);\n\n /**\n * The URL to request.\n *\n * @type {String}\n */\n this.url = options.url;\n\n /**\n * The function that makes the actual data request.\n *\n * @type {Request.RequestCallback}\n */\n this.requestFunction = options.requestFunction;\n\n /**\n * The function that is called when the request is cancelled.\n *\n * @type {Request.CancelCallback}\n */\n this.cancelFunction = options.cancelFunction;\n\n /**\n * The function that is called to update the request's priority, which occurs once per frame.\n *\n * @type {Request.PriorityCallback}\n */\n this.priorityFunction = options.priorityFunction;\n\n /**\n * Priority is a unit-less value where lower values represent higher priority.\n * For world-based objects, this is usually the distance from the camera.\n * A request that does not have a priority function defaults to a priority of 0.\n *\n * If priorityFunction is defined, this value is updated every frame with the result of that call.\n *\n * @type {Number}\n * @default 0.0\n */\n this.priority = defaultValue(options.priority, 0.0);\n\n /**\n * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the\n * request will be throttled and sent based on priority.\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n this.throttle = throttle;\n\n /**\n * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections\n * for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value\n * to <code>true</code> is preferable for requests going through HTTP/1 servers.\n *\n * @type {Boolean}\n * @readonly\n *\n * @default false\n */\n this.throttleByServer = throttleByServer;\n\n /**\n * Type of request.\n *\n * @type {RequestType}\n * @readonly\n *\n * @default RequestType.OTHER\n */\n this.type = defaultValue(options.type, RequestType.OTHER);\n\n /**\n * A key used to identify the server that a request is going to. It is derived from the url's authority and scheme.\n *\n * @type {String}\n *\n * @private\n */\n this.serverKey = undefined;\n\n /**\n * The current state of the request.\n *\n * @type {RequestState}\n * @readonly\n */\n this.state = RequestState.UNISSUED;\n\n /**\n * The requests's deferred promise.\n *\n * @type {Object}\n *\n * @private\n */\n this.deferred = undefined;\n\n /**\n * Whether the request was explicitly cancelled.\n *\n * @type {Boolean}\n *\n * @private\n */\n this.cancelled = false;\n}\n\n/**\n * Mark the request as cancelled.\n *\n * @private\n */\nRequest.prototype.cancel = function () {\n this.cancelled = true;\n};\n\n/**\n * Duplicates a Request instance.\n *\n * @param {Request} [result] The object onto which to store the result.\n *\n * @returns {Request} The modified result parameter or a new Resource instance if one was not provided.\n */\nRequest.prototype.clone = function (result) {\n if (!defined(result)) {\n return new Request(this);\n }\n\n result.url = this.url;\n result.requestFunction = this.requestFunction;\n result.cancelFunction = this.cancelFunction;\n result.priorityFunction = this.priorityFunction;\n result.priority = this.priority;\n result.throttle = this.throttle;\n result.throttleByServer = this.throttleByServer;\n result.type = this.type;\n result.serverKey = this.serverKey;\n\n // These get defaulted because the cloned request hasn't been issued\n result.state = this.RequestState.UNISSUED;\n result.deferred = undefined;\n result.cancelled = false;\n\n return result;\n};\n\n/**\n * The function that makes the actual data request.\n * @callback Request.RequestCallback\n * @returns {Promise<void>} A promise for the requested data.\n */\n\n/**\n * The function that is called when the request is cancelled.\n * @callback Request.CancelCallback\n */\n\n/**\n * The function that is called to update the request's priority, which occurs once per frame.\n * @callback Request.PriorityCallback\n * @returns {Number} The updated priority value.\n */\nexport default Request;\n","/**\n * An enum identifying the type of request. Used for finer grained logging and priority sorting.\n *\n * @enum {Number}\n */\nvar RequestType = {\n /**\n * Terrain request.\n *\n * @type Number\n * @constant\n */\n TERRAIN: 0,\n\n /**\n * Imagery request.\n *\n * @type Number\n * @constant\n */\n IMAGERY: 1,\n\n /**\n * 3D Tiles request.\n *\n * @type Number\n * @constant\n */\n TILES3D: 2,\n\n /**\n * Other request.\n *\n * @type Number\n * @constant\n */\n OTHER: 3,\n};\nexport default Object.freeze(RequestType);\n","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","'use strict'\n\nfunction markdownLineEnding(code) {\n return code < -2\n}\n\nmodule.exports = markdownLineEnding\n","'use strict'\n\nvar markdownSpace = require('../character/markdown-space.js')\n\nfunction spaceFactory(effects, ok, type, max) {\n var limit = max ? max - 1 : Infinity\n var size = 0\n return start\n\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n\n return ok(code)\n }\n\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n\n effects.exit(type)\n return ok(code)\n }\n}\n\nmodule.exports = spaceFactory\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","'use strict'\n\nmodule.exports = all\n\nvar one = require('./one')\n\nfunction all(h, parent) {\n var nodes = parent.children || []\n var length = nodes.length\n var values = []\n var index = -1\n var result\n var head\n\n while (++index < length) {\n result = one(h, nodes[index], parent)\n\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (result.value) {\n result.value = result.value.replace(/^\\s+/, '')\n }\n\n head = result.children && result.children[0]\n\n if (head && head.value) {\n head.value = head.value.replace(/^\\s+/, '')\n }\n }\n\n values = values.concat(result)\n }\n }\n\n return values\n}\n","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { BLOCKQUOTE, CODE, CODE_BLOCK, HEADING, LABEL, LIST } from \"../../common/classes\";\nfunction htmlElement(tagName, tagClassName) {\n return function (props) {\n var className = props.className, elementRef = props.elementRef, htmlProps = __rest(props, [\"className\", \"elementRef\"]);\n return React.createElement(tagName, __assign(__assign({}, htmlProps), { className: classNames(tagClassName, className), ref: elementRef }));\n };\n}\n// the following components are linted by blueprint-html-components because\n// they should rarely be used without the Blueprint classes/styles:\nexport var H1 = htmlElement(\"h1\", HEADING);\nexport var H2 = htmlElement(\"h2\", HEADING);\nexport var H3 = htmlElement(\"h3\", HEADING);\nexport var H4 = htmlElement(\"h4\", HEADING);\nexport var H5 = htmlElement(\"h5\", HEADING);\nexport var H6 = htmlElement(\"h6\", HEADING);\nexport var Blockquote = htmlElement(\"blockquote\", BLOCKQUOTE);\nexport var Code = htmlElement(\"code\", CODE);\nexport var Pre = htmlElement(\"pre\", CODE_BLOCK);\nexport var Label = htmlElement(\"label\", LABEL);\n// these two are not linted by blueprint-html-components because there are valid\n// uses of these elements without Blueprint styles:\nexport var OL = htmlElement(\"ol\", LIST);\nexport var UL = htmlElement(\"ul\", LIST);\n//# sourceMappingURL=html.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var KeyCodes = {\n 8: \"backspace\",\n 9: \"tab\",\n 13: \"enter\",\n 20: \"capslock\",\n 27: \"esc\",\n 32: \"space\",\n 33: \"pageup\",\n 34: \"pagedown\",\n 35: \"end\",\n 36: \"home\",\n 37: \"left\",\n 38: \"up\",\n 39: \"right\",\n 40: \"down\",\n 45: \"ins\",\n 46: \"del\",\n // number keys\n 48: \"0\",\n 49: \"1\",\n 50: \"2\",\n 51: \"3\",\n 52: \"4\",\n 53: \"5\",\n 54: \"6\",\n 55: \"7\",\n 56: \"8\",\n 57: \"9\",\n // alphabet\n 65: \"a\",\n 66: \"b\",\n 67: \"c\",\n 68: \"d\",\n 69: \"e\",\n 70: \"f\",\n 71: \"g\",\n 72: \"h\",\n 73: \"i\",\n 74: \"j\",\n 75: \"k\",\n 76: \"l\",\n 77: \"m\",\n 78: \"n\",\n 79: \"o\",\n 80: \"p\",\n 81: \"q\",\n 82: \"r\",\n 83: \"s\",\n 84: \"t\",\n 85: \"u\",\n 86: \"v\",\n 87: \"w\",\n 88: \"x\",\n 89: \"y\",\n 90: \"z\",\n // punctuation\n 106: \"*\",\n 107: \"+\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n};\nexport var Modifiers = {\n 16: \"shift\",\n 17: \"ctrl\",\n 18: \"alt\",\n 91: \"meta\",\n 93: \"meta\",\n 224: \"meta\",\n};\nexport var ModifierBitMasks = {\n alt: 1,\n ctrl: 2,\n meta: 4,\n shift: 8,\n};\nexport var Aliases = {\n cmd: \"meta\",\n command: \"meta\",\n escape: \"esc\",\n minus: \"-\",\n mod: isMac() ? \"meta\" : \"ctrl\",\n option: \"alt\",\n plus: \"+\",\n return: \"enter\",\n win: \"meta\",\n};\n// alph sorting is unintuitive here\n// tslint:disable object-literal-sort-keys\nexport var ShiftKeys = {\n \"~\": \"`\",\n \"!\": \"1\",\n \"@\": \"2\",\n \"#\": \"3\",\n $: \"4\",\n \"%\": \"5\",\n \"^\": \"6\",\n \"&\": \"7\",\n \"*\": \"8\",\n \"(\": \"9\",\n \")\": \"0\",\n _: \"-\",\n \"+\": \"=\",\n \"{\": \"[\",\n \"}\": \"]\",\n \"|\": \"\\\\\",\n \":\": \";\",\n '\"': \"'\",\n \"<\": \",\",\n \">\": \".\",\n \"?\": \"/\",\n};\n// tslint:enable object-literal-sort-keys\n// Function keys\nfor (var i = 1; i <= 12; ++i) {\n KeyCodes[111 + i] = \"f\" + i;\n}\n// Numpad\nfor (var i = 0; i <= 9; ++i) {\n KeyCodes[96 + i] = \"num\" + i.toString();\n}\nexport function comboMatches(a, b) {\n return a.modifiers === b.modifiers && a.key === b.key;\n}\n/**\n * Converts a key combo string into a key combo object. Key combos include\n * zero or more modifier keys, such as `shift` or `alt`, and exactly one\n * action key, such as `A`, `enter`, or `left`.\n *\n * For action keys that require a shift, e.g. `@` or `|`, we inlude the\n * necessary `shift` modifier and automatically convert the action key to the\n * unshifted version. For example, `@` is equivalent to `shift+2`.\n */\nexport var parseKeyCombo = function (combo) {\n var pieces = combo.replace(/\\s/g, \"\").toLowerCase().split(\"+\");\n var modifiers = 0;\n var key = null;\n for (var _i = 0, pieces_1 = pieces; _i < pieces_1.length; _i++) {\n var piece = pieces_1[_i];\n if (piece === \"\") {\n throw new Error(\"Failed to parse key combo \\\"\" + combo + \"\\\".\\n Valid key combos look like \\\"cmd + plus\\\", \\\"shift+p\\\", or \\\"!\\\"\");\n }\n if (Aliases[piece] != null) {\n piece = Aliases[piece];\n }\n if (ModifierBitMasks[piece] != null) {\n modifiers += ModifierBitMasks[piece];\n }\n else if (ShiftKeys[piece] != null) {\n modifiers += ModifierBitMasks.shift;\n key = ShiftKeys[piece];\n }\n else {\n key = piece.toLowerCase();\n }\n }\n return { modifiers: modifiers, key: key };\n};\n/**\n * Converts a keyboard event into a valid combo prop string\n */\nexport var getKeyComboString = function (e) {\n var keys = [];\n // modifiers first\n if (e.ctrlKey) {\n keys.push(\"ctrl\");\n }\n if (e.altKey) {\n keys.push(\"alt\");\n }\n if (e.shiftKey) {\n keys.push(\"shift\");\n }\n if (e.metaKey) {\n keys.push(\"meta\");\n }\n // HACKHACK: https://github.com/palantir/blueprint/issues/4165\n // eslint-disable-next-line deprecation/deprecation\n var which = e.which;\n if (Modifiers[which] != null) {\n // no action key\n }\n else if (KeyCodes[which] != null) {\n keys.push(KeyCodes[which]);\n }\n else {\n // eslint-disable-next-line id-blacklist\n keys.push(String.fromCharCode(which).toLowerCase());\n }\n // join keys with plusses\n return keys.join(\" + \");\n};\n/**\n * Determines the key combo object from the given keyboard event. Again, a key\n * combo includes zero or more modifiers (represented by a bitmask) and one\n * action key, which we determine from the `e.which` property of the keyboard\n * event.\n */\nexport var getKeyCombo = function (e) {\n var key = null;\n // HACKHACK: https://github.com/palantir/blueprint/issues/4165\n // eslint-disable-next-line deprecation/deprecation\n var which = e.which;\n if (Modifiers[which] != null) {\n // keep key null\n }\n else if (KeyCodes[which] != null) {\n key = KeyCodes[which];\n }\n else {\n // eslint-disable-next-line id-blacklist\n key = String.fromCharCode(which).toLowerCase();\n }\n var modifiers = 0;\n if (e.altKey) {\n modifiers += ModifierBitMasks.alt;\n }\n if (e.ctrlKey) {\n modifiers += ModifierBitMasks.ctrl;\n }\n if (e.metaKey) {\n modifiers += ModifierBitMasks.meta;\n }\n if (e.shiftKey) {\n modifiers += ModifierBitMasks.shift;\n }\n return { modifiers: modifiers, key: key };\n};\n/**\n * Splits a key combo string into its constituent key values and looks up\n * aliases, such as `return` -> `enter`.\n *\n * Unlike the parseKeyCombo method, this method does NOT convert shifted\n * action keys. So `\"@\"` will NOT be converted to `[\"shift\", \"2\"]`).\n */\nexport var normalizeKeyCombo = function (combo, platformOverride) {\n var keys = combo.replace(/\\s/g, \"\").split(\"+\");\n return keys.map(function (key) {\n var keyName = Aliases[key] != null ? Aliases[key] : key;\n return keyName === \"meta\" ? (isMac(platformOverride) ? \"cmd\" : \"ctrl\") : keyName;\n });\n};\nfunction isMac(platformOverride) {\n var platform = platformOverride != null ? platformOverride : typeof navigator !== \"undefined\" ? navigator.platform : undefined;\n return platform == null ? false : /Mac|iPod|iPhone|iPad/.test(platform);\n}\n//# sourceMappingURL=hotkeyParser.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// tslint:disable:object-literal-sort-keys\n/**\n * The four basic intents.\n */\nexport var Intent = {\n NONE: \"none\",\n PRIMARY: \"primary\",\n SUCCESS: \"success\",\n WARNING: \"warning\",\n DANGER: \"danger\",\n};\n//# sourceMappingURL=intent.js.map","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// HACKHACK: workaround for https://github.com/palantir/tslint/issues/1768\n// eslint-disable @typescript-eslint/adjacent-overload-signatures\n/**\n * A simple object for storing the client bounds of HTMLElements. Since\n * ClientRects are immutable, this object enables editing and some simple\n * manipulation methods.\n */\nvar Rect = /** @class */ (function () {\n function Rect(left, top, width, height) {\n this.left = left;\n this.top = top;\n this.width = width;\n this.height = height;\n }\n /**\n * Returns the smallest Rect that entirely contains the supplied rects\n */\n Rect.union = function (anyRect0, anyRect1) {\n var rect0 = Rect.wrap(anyRect0);\n var rect1 = Rect.wrap(anyRect1);\n var top = Math.min(rect0.top, rect1.top);\n var left = Math.min(rect0.left, rect1.left);\n var bottom = Math.max(rect0.top + rect0.height, rect1.top + rect1.height);\n var right = Math.max(rect0.left + rect0.width, rect1.left + rect1.width);\n var height = bottom - top;\n var width = right - left;\n return new Rect(left, top, width, height);\n };\n /**\n * Returns a new Rect that subtracts the origin of the second argument\n * from the first.\n */\n Rect.subtractOrigin = function (anyRect0, anyRect1) {\n var rect0 = Rect.wrap(anyRect0);\n var rect1 = Rect.wrap(anyRect1);\n return new Rect(rect0.left - rect1.left, rect0.top - rect1.top, rect0.width, rect0.height);\n };\n /**\n * Returns the CSS properties representing the absolute positioning of\n * this Rect.\n */\n Rect.style = function (rect) {\n return {\n height: rect.height + \"px\",\n left: rect.left + \"px\",\n position: \"absolute\",\n top: rect.top + \"px\",\n width: rect.width + \"px\",\n };\n };\n /**\n * Given a ClientRect or Rect object, returns a Rect object.\n */\n Rect.wrap = function (rect) {\n if (rect instanceof Rect) {\n return rect;\n }\n else {\n return new Rect(rect.left, rect.top, rect.width, rect.height);\n }\n };\n Rect.prototype.subtractOrigin = function (anyRect) {\n return Rect.subtractOrigin(this, anyRect);\n };\n Rect.prototype.union = function (anyRect) {\n return Rect.union(this, anyRect);\n };\n Rect.prototype.style = function () {\n return Rect.style(this);\n };\n Rect.prototype.sizeStyle = function () {\n return {\n height: this.height + \"px\",\n width: this.width + \"px\",\n };\n };\n Rect.prototype.containsX = function (clientX) {\n return clientX >= this.left && clientX <= this.left + this.width;\n };\n Rect.prototype.containsY = function (clientY) {\n return clientY >= this.top && clientY <= this.top + this.height;\n };\n Rect.prototype.equals = function (rect) {\n return (rect != null &&\n this.left === rect.left &&\n this.top === rect.top &&\n this.width === rect.width &&\n this.height === rect.height);\n };\n Rect.ORIGIN = new Rect(0, 0, 0, 0);\n return Rect;\n}());\nexport { Rect };\n//# sourceMappingURL=rect.js.map","'use strict'\n\nmodule.exports = u\n\nfunction u(type, props, value) {\n var node\n\n if (\n (value === null || value === undefined) &&\n (typeof props !== 'object' || Array.isArray(props))\n ) {\n value = props\n props = {}\n }\n\n node = Object.assign({type: String(type)}, props)\n\n if (Array.isArray(value)) {\n node.children = value\n } else if (value !== null && value !== undefined) {\n node.value = String(value)\n }\n\n return node\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","import _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport * as React from 'react';\nimport createContext from 'create-react-context';\nexport var ManagerReferenceNodeContext = createContext();\nexport var ManagerReferenceNodeSetterContext = createContext();\n\nvar Manager =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Manager, _React$Component);\n\n function Manager() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"referenceNode\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"setReferenceNode\", function (newReferenceNode) {\n if (newReferenceNode && _this.referenceNode !== newReferenceNode) {\n _this.referenceNode = newReferenceNode;\n\n _this.forceUpdate();\n }\n });\n\n return _this;\n }\n\n var _proto = Manager.prototype;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.referenceNode = null;\n };\n\n _proto.render = function render() {\n return React.createElement(ManagerReferenceNodeContext.Provider, {\n value: this.referenceNode\n }, React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n value: this.setReferenceNode\n }, this.props.children));\n };\n\n return Manager;\n}(React.Component);\n\nexport { Manager as default };","/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === \"function\") {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Does a shallow equality check of two objects by comparing the reference\n * equality of each value.\n */\n\nexport var shallowEqual = function shallowEqual(objA, objB) {\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n\n if (bKeys.length !== aKeys.length) {\n return false;\n }\n\n for (var i = 0; i < bKeys.length; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === \"function\") {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\n\nvar InnerReference =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(InnerReference, _React$Component);\n\n function InnerReference() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"refHandler\", function (node) {\n setRef(_this.props.innerRef, node);\n safeInvoke(_this.props.setReferenceNode, node);\n });\n\n return _this;\n }\n\n var _proto = InnerReference.prototype;\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n setRef(this.props.innerRef, null);\n };\n\n _proto.render = function render() {\n warning(Boolean(this.props.setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n return unwrapArray(this.props.children)({\n ref: this.refHandler\n });\n };\n\n return InnerReference;\n}(React.Component);\n\nexport default function Reference(props) {\n return React.createElement(ManagerReferenceNodeSetterContext.Consumer, null, function (setReferenceNode) {\n return React.createElement(InnerReference, _extends({\n setReferenceNode: setReferenceNode\n }, props));\n });\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport deepEqual from \"deep-equal\";\nimport * as React from 'react';\nimport PopperJS from 'popper.js';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef, shallowEqual } from './utils';\nvar initialStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: 0,\n pointerEvents: 'none'\n};\nvar initialArrowStyle = {};\nexport var InnerPopper =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(InnerPopper, _React$Component);\n\n function InnerPopper() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n data: undefined,\n placement: undefined\n });\n\n _defineProperty(_assertThisInitialized(_this), \"popperInstance\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"popperNode\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"arrowNode\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"setPopperNode\", function (popperNode) {\n if (!popperNode || _this.popperNode === popperNode) return;\n setRef(_this.props.innerRef, popperNode);\n _this.popperNode = popperNode;\n\n _this.updatePopperInstance();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setArrowNode\", function (arrowNode) {\n _this.arrowNode = arrowNode;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateStateModifier\", {\n enabled: true,\n order: 900,\n fn: function fn(data) {\n var placement = data.placement;\n\n _this.setState({\n data: data,\n placement: placement\n });\n\n return data;\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getOptions\", function () {\n return {\n placement: _this.props.placement,\n eventsEnabled: _this.props.eventsEnabled,\n positionFixed: _this.props.positionFixed,\n modifiers: _extends({}, _this.props.modifiers, {\n arrow: _extends({}, _this.props.modifiers && _this.props.modifiers.arrow, {\n enabled: !!_this.arrowNode,\n element: _this.arrowNode\n }),\n applyStyle: {\n enabled: false\n },\n updateStateModifier: _this.updateStateModifier\n })\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPopperStyle\", function () {\n return !_this.popperNode || !_this.state.data ? initialStyle : _extends({\n position: _this.state.data.offsets.popper.position\n }, _this.state.data.styles);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPopperPlacement\", function () {\n return !_this.state.data ? undefined : _this.state.placement;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getArrowStyle\", function () {\n return !_this.arrowNode || !_this.state.data ? initialArrowStyle : _this.state.data.arrowStyles;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getOutOfBoundariesState\", function () {\n return _this.state.data ? _this.state.data.hide : undefined;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"destroyPopperInstance\", function () {\n if (!_this.popperInstance) return;\n\n _this.popperInstance.destroy();\n\n _this.popperInstance = null;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updatePopperInstance\", function () {\n _this.destroyPopperInstance();\n\n var _assertThisInitialize = _assertThisInitialized(_this),\n popperNode = _assertThisInitialize.popperNode;\n\n var referenceElement = _this.props.referenceElement;\n if (!referenceElement || !popperNode) return;\n _this.popperInstance = new PopperJS(referenceElement, popperNode, _this.getOptions());\n });\n\n _defineProperty(_assertThisInitialized(_this), \"scheduleUpdate\", function () {\n if (_this.popperInstance) {\n _this.popperInstance.scheduleUpdate();\n }\n });\n\n return _this;\n }\n\n var _proto = InnerPopper.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // If the Popper.js options have changed, update the instance (destroy + create)\n if (this.props.placement !== prevProps.placement || this.props.referenceElement !== prevProps.referenceElement || this.props.positionFixed !== prevProps.positionFixed || !deepEqual(this.props.modifiers, prevProps.modifiers, {\n strict: true\n })) {\n // develop only check that modifiers isn't being updated needlessly\n if (process.env.NODE_ENV === \"development\") {\n if (this.props.modifiers !== prevProps.modifiers && this.props.modifiers != null && prevProps.modifiers != null && shallowEqual(this.props.modifiers, prevProps.modifiers)) {\n console.warn(\"'modifiers' prop reference updated even though all values appear the same.\\nConsider memoizing the 'modifiers' object to avoid needless rendering.\");\n }\n }\n\n this.updatePopperInstance();\n } else if (this.props.eventsEnabled !== prevProps.eventsEnabled && this.popperInstance) {\n this.props.eventsEnabled ? this.popperInstance.enableEventListeners() : this.popperInstance.disableEventListeners();\n } // A placement difference in state means popper determined a new placement\n // apart from the props value. By the time the popper element is rendered with\n // the new position Popper has already measured it, if the place change triggers\n // a size change it will result in a misaligned popper. So we schedule an update to be sure.\n\n\n if (prevState.placement !== this.state.placement) {\n this.scheduleUpdate();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n setRef(this.props.innerRef, null);\n this.destroyPopperInstance();\n };\n\n _proto.render = function render() {\n return unwrapArray(this.props.children)({\n ref: this.setPopperNode,\n style: this.getPopperStyle(),\n placement: this.getPopperPlacement(),\n outOfBoundaries: this.getOutOfBoundariesState(),\n scheduleUpdate: this.scheduleUpdate,\n arrowProps: {\n ref: this.setArrowNode,\n style: this.getArrowStyle()\n }\n });\n };\n\n return InnerPopper;\n}(React.Component);\n\n_defineProperty(InnerPopper, \"defaultProps\", {\n placement: 'bottom',\n eventsEnabled: true,\n referenceElement: undefined,\n positionFixed: false\n});\n\nvar placements = PopperJS.placements;\nexport { placements };\nexport default function Popper(_ref) {\n var referenceElement = _ref.referenceElement,\n props = _objectWithoutPropertiesLoose(_ref, [\"referenceElement\"]);\n\n return React.createElement(ManagerReferenceNodeContext.Consumer, null, function (referenceNode) {\n return React.createElement(InnerPopper, _extends({\n referenceElement: referenceElement !== undefined ? referenceElement : referenceNode\n }, props));\n });\n}","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Popper placement utils\n// ======================\n/** Converts a full placement to one of the four positions by stripping text after the `-`. */\nexport function getPosition(placement) {\n return placement.split(\"-\")[0];\n}\n/** Returns true if position is left or right. */\nexport function isVerticalPosition(side) {\n return [\"left\", \"right\"].indexOf(side) !== -1;\n}\n/** Returns the opposite position. */\nexport function getOppositePosition(side) {\n switch (side) {\n case \"top\":\n return \"bottom\";\n case \"left\":\n return \"right\";\n case \"bottom\":\n return \"top\";\n default:\n return \"left\";\n }\n}\n/** Returns the CSS alignment keyword corresponding to given placement. */\nexport function getAlignment(placement) {\n var align = placement.split(\"-\")[1];\n switch (align) {\n case \"start\":\n return \"left\";\n case \"end\":\n return \"right\";\n default:\n return \"center\";\n }\n}\n// Popper modifiers\n// ================\n/** Modifier helper function to compute popper transform-origin based on arrow position */\nexport function getTransformOrigin(data) {\n var position = getPosition(data.placement);\n if (data.arrowElement == null) {\n return isVerticalPosition(position)\n ? getOppositePosition(position) + \" \" + getAlignment(position)\n : getAlignment(position) + \" \" + getOppositePosition(position);\n }\n else {\n var arrowSizeShift = data.arrowElement.clientHeight / 2;\n var arrow = data.offsets.arrow;\n // can use keyword for dimension without the arrow, to ease computation burden.\n // move origin by half arrow's height to keep it centered.\n return isVerticalPosition(position)\n ? getOppositePosition(position) + \" \" + (arrow.top + arrowSizeShift) + \"px\"\n : arrow.left + arrowSizeShift + \"px \" + getOppositePosition(position);\n }\n}\n// additional space between arrow and edge of target\nvar ARROW_SPACING = 4;\n/** Popper modifier that offsets popper and arrow so arrow points out of the correct side */\nexport var arrowOffsetModifier = function (data) {\n if (data.arrowElement == null) {\n return data;\n }\n // our arrows have equal width and height\n var arrowSize = data.arrowElement.clientWidth;\n // this logic borrowed from original Popper arrow modifier itself\n var position = getPosition(data.placement);\n var isVertical = isVerticalPosition(position);\n var len = isVertical ? \"width\" : \"height\";\n var offsetSide = isVertical ? \"left\" : \"top\";\n var arrowOffsetSize = Math.round(arrowSize / 2 / Math.sqrt(2));\n // offset popover by arrow size, offset arrow in the opposite direction\n if (position === \"top\" || position === \"left\") {\n // the \"up & back\" directions require negative popper offsets\n data.offsets.popper[offsetSide] -= arrowOffsetSize + ARROW_SPACING;\n // can only use left/top on arrow so gotta get clever with 100% + X\n data.offsets.arrow[offsetSide] = data.offsets.popper[len] - arrowSize + arrowOffsetSize;\n }\n else {\n data.offsets.popper[offsetSide] += arrowOffsetSize + ARROW_SPACING;\n data.offsets.arrow[offsetSide] = -arrowOffsetSize;\n }\n return data;\n};\n//# sourceMappingURL=popperUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { getPosition } from \"./popperUtils\";\n// these paths come from the Core Kit Sketch file\n// https://github.com/palantir/blueprint/blob/develop/resources/sketch/Core%20Kit.sketch\nvar SVG_SHADOW_PATH = \"M8.11 6.302c1.015-.936 1.887-2.922 1.887-4.297v26c0-1.378\" +\n \"-.868-3.357-1.888-4.297L.925 17.09c-1.237-1.14-1.233-3.034 0-4.17L8.11 6.302z\";\nvar SVG_ARROW_PATH = \"M8.787 7.036c1.22-1.125 2.21-3.376 2.21-5.03V0v30-2.005\" +\n \"c0-1.654-.983-3.9-2.21-5.03l-7.183-6.616c-.81-.746-.802-1.96 0-2.7l7.183-6.614z\";\n/** Modifier helper function to compute arrow rotate() transform */\nfunction getArrowAngle(placement) {\n if (placement == null) {\n return 0;\n }\n // can only be top/left/bottom/right - auto is resolved internally\n switch (getPosition(placement)) {\n case \"top\":\n return -90;\n case \"left\":\n return 180;\n case \"bottom\":\n return 90;\n default:\n return 0;\n }\n}\nexport var PopoverArrow = function (_a) {\n var _b = _a.arrowProps, ref = _b.ref, style = _b.style, placement = _a.placement;\n return (React.createElement(\"div\", { className: Classes.POPOVER_ARROW, ref: ref, style: isNaN(+style.left) ? {} : style },\n React.createElement(\"svg\", { viewBox: \"0 0 30 30\", style: { transform: \"rotate(\" + getArrowAngle(placement) + \"deg)\" } },\n React.createElement(\"path\", { className: Classes.POPOVER_ARROW + \"-border\", d: SVG_SHADOW_PATH }),\n React.createElement(\"path\", { className: Classes.POPOVER_ARROW + \"-fill\", d: SVG_ARROW_PATH }))));\n};\nPopoverArrow.displayName = DISPLAYNAME_PREFIX + \".PopoverArrow\";\n//# sourceMappingURL=popoverArrow.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Position } from \"../../common/position\";\n/**\n * Convert a position to a placement.\n * @param position the position to convert\n */\nexport function positionToPlacement(position) {\n /* istanbul ignore next */\n switch (position) {\n case Position.TOP_LEFT:\n return \"top-start\";\n case Position.TOP:\n return \"top\";\n case Position.TOP_RIGHT:\n return \"top-end\";\n case Position.RIGHT_TOP:\n return \"right-start\";\n case Position.RIGHT:\n return \"right\";\n case Position.RIGHT_BOTTOM:\n return \"right-end\";\n case Position.BOTTOM_RIGHT:\n return \"bottom-end\";\n case Position.BOTTOM:\n return \"bottom\";\n case Position.BOTTOM_LEFT:\n return \"bottom-start\";\n case Position.LEFT_BOTTOM:\n return \"left-end\";\n case Position.LEFT:\n return \"left\";\n case Position.LEFT_TOP:\n return \"left-start\";\n case \"auto\":\n case \"auto-start\":\n case \"auto-end\":\n // Return the string unchanged.\n return position;\n default:\n return assertNever(position);\n }\n}\n/* istanbul ignore next */\nfunction assertNever(x) {\n throw new Error(\"Unexpected position: \" + x);\n}\n//# sourceMappingURL=popoverMigrationUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { Manager, Popper, Reference } from \"react-popper\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport * as Utils from \"../../common/utils\";\nimport { Overlay } from \"../overlay/overlay\";\nimport { ResizeSensor } from \"../resize-sensor/resizeSensor\";\n// eslint-disable-next-line import/no-cycle\nimport { Tooltip } from \"../tooltip/tooltip\";\nimport { PopoverArrow } from \"./popoverArrow\";\nimport { positionToPlacement } from \"./popoverMigrationUtils\";\nimport { arrowOffsetModifier, getTransformOrigin } from \"./popperUtils\";\nexport var PopoverInteractionKind = {\n CLICK: \"click\",\n CLICK_TARGET_ONLY: \"click-target\",\n HOVER: \"hover\",\n HOVER_TARGET_ONLY: \"hover-target\",\n};\nvar Popover = /** @class */ (function (_super) {\n __extends(Popover, _super);\n function Popover() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n hasDarkParent: false,\n isOpen: _this.getIsOpen(_this.props),\n transformOrigin: \"\",\n };\n // a flag that lets us detect mouse movement between the target and popover,\n // now that mouseleave is triggered when you cross the gap between the two.\n _this.isMouseInTargetOrPopover = false;\n // a flag that indicates whether the target previously lost focus to another\n // element on the same page.\n _this.lostFocusOnSamePage = true;\n _this.refHandlers = {\n popover: function (ref) {\n _this.popoverElement = ref;\n Utils.safeInvoke(_this.props.popoverRef, ref);\n },\n target: function (ref) { return (_this.targetElement = ref); },\n };\n /**\n * Instance method to instruct the `Popover` to recompute its position.\n *\n * This method should only be used if you are updating the target in a way\n * that does not cause it to re-render, such as changing its _position_\n * without changing its _size_ (since `Popover` already repositions when it\n * detects a resize).\n */\n _this.reposition = function () { return Utils.safeInvoke(_this.popperScheduleUpdate); };\n _this.renderPopover = function (popperProps) {\n var _a;\n var _b = _this.props, usePortal = _b.usePortal, interactionKind = _b.interactionKind;\n var transformOrigin = _this.state.transformOrigin;\n // Need to update our reference to this on every render as it will change.\n _this.popperScheduleUpdate = popperProps.scheduleUpdate;\n var popoverHandlers = {\n // always check popover clicks for dismiss class\n onClick: _this.handlePopoverClick,\n };\n if (interactionKind === PopoverInteractionKind.HOVER ||\n (!usePortal && interactionKind === PopoverInteractionKind.HOVER_TARGET_ONLY)) {\n popoverHandlers.onMouseEnter = _this.handleMouseEnter;\n popoverHandlers.onMouseLeave = _this.handleMouseLeave;\n }\n var popoverClasses = classNames(Classes.POPOVER, (_a = {},\n _a[Classes.DARK] = _this.props.inheritDarkTheme && _this.state.hasDarkParent,\n _a[Classes.MINIMAL] = _this.props.minimal,\n _a), _this.props.popoverClassName);\n return (React.createElement(\"div\", { className: Classes.TRANSITION_CONTAINER, ref: popperProps.ref, style: popperProps.style },\n React.createElement(ResizeSensor, { onResize: _this.reposition },\n React.createElement(\"div\", __assign({ className: popoverClasses, style: { transformOrigin: transformOrigin } }, popoverHandlers),\n _this.isArrowEnabled() && (React.createElement(PopoverArrow, { arrowProps: popperProps.arrowProps, placement: popperProps.placement })),\n React.createElement(\"div\", { className: Classes.POPOVER_CONTENT }, _this.understandChildren().content)))));\n };\n _this.renderTarget = function (referenceProps) {\n var _a, _b;\n var _c = _this.props, fill = _c.fill, openOnTargetFocus = _c.openOnTargetFocus, targetClassName = _c.targetClassName, _d = _c.targetProps, targetProps = _d === void 0 ? {} : _d;\n var isOpen = _this.state.isOpen;\n var isControlled = _this.isControlled();\n var isHoverInteractionKind = _this.isHoverInteractionKind();\n var targetTagName = _this.props.targetTagName;\n if (fill) {\n targetTagName = \"div\";\n }\n var finalTargetProps = isHoverInteractionKind\n ? {\n // HOVER handlers\n onBlur: _this.handleTargetBlur,\n onFocus: _this.handleTargetFocus,\n onMouseEnter: _this.handleMouseEnter,\n onMouseLeave: _this.handleMouseLeave,\n }\n : {\n // CLICK needs only one handler\n onClick: _this.handleTargetClick,\n };\n finalTargetProps.className = classNames(Classes.POPOVER_TARGET, (_a = {}, _a[Classes.POPOVER_OPEN] = isOpen, _a), targetProps.className, targetClassName);\n finalTargetProps.ref = referenceProps.ref;\n var rawTarget = Utils.ensureElement(_this.understandChildren().target);\n var rawTabIndex = rawTarget.props.tabIndex;\n // ensure target is focusable if relevant prop enabled\n var tabIndex = rawTabIndex == null && openOnTargetFocus && isHoverInteractionKind ? 0 : rawTabIndex;\n var clonedTarget = React.cloneElement(rawTarget, {\n className: classNames(rawTarget.props.className, (_b = {},\n // this class is mainly useful for button targets; we should only apply it for uncontrolled popovers\n // when they are opened by a user interaction\n _b[Classes.ACTIVE] = isOpen && !isControlled && !isHoverInteractionKind,\n _b)),\n // force disable single Tooltip child when popover is open (BLUEPRINT-552)\n disabled: isOpen && Utils.isElementOfType(rawTarget, Tooltip) ? true : rawTarget.props.disabled,\n tabIndex: tabIndex,\n });\n var target = React.createElement(targetTagName, __assign(__assign({}, targetProps), finalTargetProps), clonedTarget);\n return React.createElement(ResizeSensor, { onResize: _this.reposition }, target);\n };\n _this.isControlled = function () { return _this.props.isOpen !== undefined; };\n _this.handleTargetFocus = function (e) {\n if (_this.props.openOnTargetFocus && _this.isHoverInteractionKind()) {\n if (e.relatedTarget == null && !_this.lostFocusOnSamePage) {\n // ignore this focus event -- the target was already focused but the page itself\n // lost focus (e.g. due to switching tabs).\n return;\n }\n _this.handleMouseEnter(e);\n }\n Utils.safeInvokeMember(_this.props.targetProps, \"onFocus\", e);\n };\n _this.handleTargetBlur = function (e) {\n if (_this.props.openOnTargetFocus && _this.isHoverInteractionKind()) {\n // if the next element to receive focus is within the popover, we'll want to leave the\n // popover open. e.relatedTarget ought to tell us the next element to receive focus, but if the user just\n // clicked on an element which is not focusable (either by default or with a tabIndex attribute),\n // it won't be set. So, we filter those out here and assume that a click handler somewhere else will\n // close the popover if necessary.\n if (e.relatedTarget != null && !_this.isElementInPopover(e.relatedTarget)) {\n _this.handleMouseLeave(e);\n }\n }\n _this.lostFocusOnSamePage = e.relatedTarget != null;\n Utils.safeInvokeMember(_this.props.targetProps, \"onBlur\", e);\n };\n _this.handleMouseEnter = function (e) {\n _this.isMouseInTargetOrPopover = true;\n // if we're entering the popover, and the mode is set to be HOVER_TARGET_ONLY, we want to manually\n // trigger the mouse leave event, as hovering over the popover shouldn't count.\n if (!_this.props.usePortal &&\n _this.isElementInPopover(e.target) &&\n _this.props.interactionKind === PopoverInteractionKind.HOVER_TARGET_ONLY &&\n !_this.props.openOnTargetFocus) {\n _this.handleMouseLeave(e);\n }\n else if (!_this.props.disabled) {\n // only begin opening popover when it is enabled\n _this.setOpenState(true, e, _this.props.hoverOpenDelay);\n }\n Utils.safeInvokeMember(_this.props.targetProps, \"onMouseEnter\", e);\n };\n _this.handleMouseLeave = function (e) {\n _this.isMouseInTargetOrPopover = false;\n // wait until the event queue is flushed, because we want to leave the\n // popover open if the mouse entered the popover immediately after\n // leaving the target (or vice versa).\n _this.setTimeout(function () {\n if (_this.isMouseInTargetOrPopover) {\n return;\n }\n // user-configurable closing delay is helpful when moving mouse from target to popover\n _this.setOpenState(false, e, _this.props.hoverCloseDelay);\n });\n Utils.safeInvokeMember(_this.props.targetProps, \"onMouseLeave\", e);\n };\n _this.handlePopoverClick = function (e) {\n var eventTarget = e.target;\n // an OVERRIDE inside a DISMISS does not dismiss, and a DISMISS inside an OVERRIDE will dismiss.\n var dismissElement = eventTarget.closest(\".\" + Classes.POPOVER_DISMISS + \", .\" + Classes.POPOVER_DISMISS_OVERRIDE);\n var shouldDismiss = dismissElement != null && dismissElement.classList.contains(Classes.POPOVER_DISMISS);\n var isDisabled = eventTarget.closest(\":disabled, .\" + Classes.DISABLED) != null;\n if (shouldDismiss && !isDisabled && !e.isDefaultPrevented()) {\n _this.setOpenState(false, e);\n if (_this.props.captureDismiss) {\n e.preventDefault();\n }\n }\n };\n _this.handleOverlayClose = function (e) {\n var eventTarget = e.target;\n // if click was in target, target event listener will handle things, so don't close\n if (!Utils.elementIsOrContains(_this.targetElement, eventTarget) || e.nativeEvent instanceof KeyboardEvent) {\n _this.setOpenState(false, e);\n }\n };\n _this.handleTargetClick = function (e) {\n // ensure click did not originate from within inline popover before closing\n if (!_this.props.disabled && !_this.isElementInPopover(e.target)) {\n if (_this.props.isOpen == null) {\n _this.setState(function (prevState) { return ({ isOpen: !prevState.isOpen }); });\n }\n else {\n _this.setOpenState(!_this.props.isOpen, e);\n }\n }\n Utils.safeInvokeMember(_this.props.targetProps, \"onClick\", e);\n };\n /** Popper modifier that updates React state (for style properties) based on latest data. */\n _this.updatePopoverState = function (data) {\n // always set string; let shouldComponentUpdate determine if update is necessary\n _this.setState({ transformOrigin: getTransformOrigin(data) });\n return data;\n };\n return _this;\n }\n Popover.prototype.render = function () {\n var _a;\n // rename wrapper tag to begin with uppercase letter so it's recognized\n // as JSX component instead of intrinsic element. but because of its\n // type, tsc actually recognizes that it is _any_ intrinsic element, so\n // it can typecheck the HTML props!!\n var _b = this.props, className = _b.className, disabled = _b.disabled, fill = _b.fill;\n var isOpen = this.state.isOpen;\n var wrapperTagName = this.props.wrapperTagName;\n if (fill) {\n wrapperTagName = \"div\";\n }\n var isContentEmpty = Utils.ensureElement(this.understandChildren().content) == null;\n // need to do this check in render(), because `isOpen` is derived from\n // state, and state can't necessarily be accessed in validateProps.\n if (isContentEmpty && !disabled && isOpen !== false && !Utils.isNodeEnv(\"production\")) {\n console.warn(Errors.POPOVER_WARN_EMPTY_CONTENT);\n }\n var wrapperClasses = classNames(Classes.POPOVER_WRAPPER, className, (_a = {},\n _a[Classes.FILL] = fill,\n _a));\n var wrapper = React.createElement(wrapperTagName, { className: wrapperClasses }, React.createElement(Reference, { innerRef: this.refHandlers.target }, this.renderTarget), React.createElement(Overlay, { autoFocus: this.props.autoFocus, backdropClassName: Classes.POPOVER_BACKDROP, backdropProps: this.props.backdropProps, canEscapeKeyClose: this.props.canEscapeKeyClose, canOutsideClickClose: this.props.interactionKind === PopoverInteractionKind.CLICK, className: this.props.portalClassName, enforceFocus: this.props.enforceFocus, hasBackdrop: this.props.hasBackdrop, isOpen: isOpen && !isContentEmpty, onClose: this.handleOverlayClose, onClosed: this.props.onClosed, onClosing: this.props.onClosing, onOpened: this.props.onOpened, onOpening: this.props.onOpening, transitionDuration: this.props.transitionDuration, transitionName: Classes.POPOVER, usePortal: this.props.usePortal, portalContainer: this.props.portalContainer },\n React.createElement(Popper, { innerRef: this.refHandlers.popover, placement: positionToPlacement(this.props.position), modifiers: this.getPopperModifiers() }, this.renderPopover)));\n return React.createElement(Manager, null, wrapper);\n };\n Popover.prototype.componentDidMount = function () {\n this.updateDarkParent();\n };\n Popover.prototype.componentDidUpdate = function (props, state) {\n _super.prototype.componentDidUpdate.call(this, props, state);\n this.updateDarkParent();\n var nextIsOpen = this.getIsOpen(this.props);\n if (this.props.isOpen != null && nextIsOpen !== this.state.isOpen) {\n this.setOpenState(nextIsOpen);\n // tricky: setOpenState calls setState only if this.props.isOpen is\n // not controlled, so we need to invoke setState manually here.\n this.setState({ isOpen: nextIsOpen });\n }\n else if (this.props.disabled && this.state.isOpen && this.props.isOpen == null) {\n // special case: close an uncontrolled popover when disabled is set to true\n this.setOpenState(false);\n }\n };\n Popover.prototype.validateProps = function (props) {\n if (props.isOpen == null && props.onInteraction != null) {\n console.warn(Errors.POPOVER_WARN_UNCONTROLLED_ONINTERACTION);\n }\n if (props.hasBackdrop && !props.usePortal) {\n console.warn(Errors.POPOVER_WARN_HAS_BACKDROP_INLINE);\n }\n if (props.hasBackdrop && props.interactionKind !== PopoverInteractionKind.CLICK) {\n throw new Error(Errors.POPOVER_HAS_BACKDROP_INTERACTION);\n }\n var childrenCount = React.Children.count(props.children);\n var hasContentProp = props.content !== undefined;\n var hasTargetProp = props.target !== undefined;\n if (childrenCount === 0 && !hasTargetProp) {\n throw new Error(Errors.POPOVER_REQUIRES_TARGET);\n }\n if (childrenCount > 2) {\n console.warn(Errors.POPOVER_WARN_TOO_MANY_CHILDREN);\n }\n if (childrenCount > 0 && hasTargetProp) {\n console.warn(Errors.POPOVER_WARN_DOUBLE_TARGET);\n }\n if (childrenCount === 2 && hasContentProp) {\n console.warn(Errors.POPOVER_WARN_DOUBLE_CONTENT);\n }\n };\n Popover.prototype.updateDarkParent = function () {\n if (this.props.usePortal && this.state.isOpen) {\n var hasDarkParent = this.targetElement != null && this.targetElement.closest(\".\" + Classes.DARK) != null;\n this.setState({ hasDarkParent: hasDarkParent });\n }\n };\n // content and target can be specified as props or as children. this method\n // normalizes the two approaches, preferring child over prop.\n Popover.prototype.understandChildren = function () {\n var _a = this.props, children = _a.children, contentProp = _a.content, targetProp = _a.target;\n // #validateProps asserts that 1 <= children.length <= 2 so content is optional\n var _b = React.Children.toArray(children), targetChild = _b[0], contentChild = _b[1];\n return {\n content: contentChild == null ? contentProp : contentChild,\n target: targetChild == null ? targetProp : targetChild,\n };\n };\n Popover.prototype.getIsOpen = function (props) {\n // disabled popovers should never be allowed to open.\n if (props.disabled) {\n return false;\n }\n else if (props.isOpen != null) {\n return props.isOpen;\n }\n else {\n return props.defaultIsOpen;\n }\n };\n Popover.prototype.getPopperModifiers = function () {\n var _a = this.props, boundary = _a.boundary, modifiers = _a.modifiers;\n var _b = modifiers.flip, flip = _b === void 0 ? {} : _b, _c = modifiers.preventOverflow, preventOverflow = _c === void 0 ? {} : _c;\n return __assign(__assign({}, modifiers), { arrowOffset: {\n enabled: this.isArrowEnabled(),\n fn: arrowOffsetModifier,\n order: 510,\n }, flip: __assign({ boundariesElement: boundary }, flip), preventOverflow: __assign({ boundariesElement: boundary }, preventOverflow), updatePopoverState: {\n enabled: true,\n fn: this.updatePopoverState,\n order: 900,\n } });\n };\n // a wrapper around setState({isOpen}) that will call props.onInteraction instead when in controlled mode.\n // starts a timeout to delay changing the state if a non-zero duration is provided.\n Popover.prototype.setOpenState = function (isOpen, e, timeout) {\n var _this = this;\n // cancel any existing timeout because we have new state\n Utils.safeInvoke(this.cancelOpenTimeout);\n if (timeout > 0) {\n this.cancelOpenTimeout = this.setTimeout(function () { return _this.setOpenState(isOpen, e); }, timeout);\n }\n else {\n if (this.props.isOpen == null) {\n this.setState({ isOpen: isOpen });\n }\n else {\n Utils.safeInvoke(this.props.onInteraction, isOpen, e);\n }\n if (!isOpen) {\n Utils.safeInvoke(this.props.onClose, e);\n }\n }\n };\n Popover.prototype.isArrowEnabled = function () {\n var _a = this.props, minimal = _a.minimal, arrow = _a.modifiers.arrow;\n // omitting `arrow` from `modifiers` uses Popper default, which does show an arrow.\n return !minimal && (arrow == null || arrow.enabled);\n };\n Popover.prototype.isElementInPopover = function (element) {\n return this.popoverElement != null && this.popoverElement.contains(element);\n };\n Popover.prototype.isHoverInteractionKind = function () {\n return (this.props.interactionKind === PopoverInteractionKind.HOVER ||\n this.props.interactionKind === PopoverInteractionKind.HOVER_TARGET_ONLY);\n };\n Popover.displayName = DISPLAYNAME_PREFIX + \".Popover\";\n Popover.defaultProps = {\n boundary: \"scrollParent\",\n captureDismiss: false,\n defaultIsOpen: false,\n disabled: false,\n fill: false,\n hasBackdrop: false,\n hoverCloseDelay: 300,\n hoverOpenDelay: 150,\n inheritDarkTheme: true,\n interactionKind: PopoverInteractionKind.CLICK,\n minimal: false,\n modifiers: {},\n openOnTargetFocus: true,\n position: \"auto\",\n targetTagName: \"span\",\n transitionDuration: 300,\n usePortal: true,\n wrapperTagName: \"span\",\n };\n Popover = __decorate([\n polyfill\n ], Popover);\n return Popover;\n}(AbstractPureComponent2));\nexport { Popover };\n//# sourceMappingURL=popover.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { AbstractPureComponent2, Classes, getRef, Keys, Utils, } from \"../../common\";\nimport { Icon } from \"../icon/icon\";\nimport { Spinner } from \"../spinner/spinner\";\nvar AbstractButton = /** @class */ (function (_super) {\n __extends(AbstractButton, _super);\n function AbstractButton() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isActive: false,\n };\n _this.currentKeyDown = null;\n // we're casting as `any` to get around a somewhat opaque safeInvoke error\n // that \"Type argument candidate 'KeyboardEvent<T>' is not a valid type\n // argument because it is not a supertype of candidate\n // 'KeyboardEvent<HTMLElement>'.\"\n _this.handleKeyDown = function (e) {\n var _a, _b;\n if (Keys.isKeyboardClick(e.which)) {\n e.preventDefault();\n if (e.which !== _this.currentKeyDown) {\n _this.setState({ isActive: true });\n }\n }\n _this.currentKeyDown = e.which;\n (_b = (_a = _this.props).onKeyDown) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n };\n _this.handleKeyUp = function (e) {\n var _a, _b;\n if (Keys.isKeyboardClick(e.which)) {\n _this.setState({ isActive: false });\n getRef(_this.buttonRef).click();\n }\n _this.currentKeyDown = null;\n (_b = (_a = _this.props).onKeyUp) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n };\n return _this;\n }\n // A disabled element cannot be active, but there are cases where\n // this situation can happen (NumericInput buttons), hence the need\n // to check if disabled prop has been passed and change isActive\n // accordingly\n AbstractButton.getDerivedStateFromProps = function (props, state) {\n if (state.isActive && props.disabled) {\n return {\n isActive: false,\n };\n }\n return null;\n };\n AbstractButton.prototype.getCommonButtonProps = function () {\n var _a;\n var _b = this.props, alignText = _b.alignText, fill = _b.fill, large = _b.large, loading = _b.loading, outlined = _b.outlined, minimal = _b.minimal, small = _b.small, tabIndex = _b.tabIndex;\n var disabled = this.props.disabled || loading;\n var className = classNames(Classes.BUTTON, (_a = {},\n _a[Classes.ACTIVE] = this.state.isActive || this.props.active,\n _a[Classes.DISABLED] = disabled,\n _a[Classes.FILL] = fill,\n _a[Classes.LARGE] = large,\n _a[Classes.LOADING] = loading,\n _a[Classes.MINIMAL] = minimal,\n _a[Classes.OUTLINED] = outlined,\n _a[Classes.SMALL] = small,\n _a), Classes.alignmentClass(alignText), Classes.intentClass(this.props.intent), this.props.className);\n return {\n className: className,\n disabled: disabled,\n onClick: disabled ? undefined : this.props.onClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n tabIndex: disabled ? -1 : tabIndex,\n };\n };\n AbstractButton.prototype.renderChildren = function () {\n var _a = this.props, children = _a.children, icon = _a.icon, loading = _a.loading, rightIcon = _a.rightIcon, text = _a.text;\n return [\n loading && React.createElement(Spinner, { key: \"loading\", className: Classes.BUTTON_SPINNER, size: Icon.SIZE_LARGE }),\n React.createElement(Icon, { key: \"leftIcon\", icon: icon }),\n (!Utils.isReactNodeEmpty(text) || !Utils.isReactNodeEmpty(children)) && (React.createElement(\"span\", { key: \"text\", className: Classes.BUTTON_TEXT },\n text,\n children)),\n React.createElement(Icon, { key: \"rightIcon\", icon: rightIcon }),\n ];\n };\n return AbstractButton;\n}(AbstractPureComponent2));\nexport { AbstractButton };\n//# sourceMappingURL=abstractButton.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\n// HACKHACK: these components should go in separate files\n/* eslint-disable max-classes-per-file */\nimport * as React from \"react\";\nimport { DISPLAYNAME_PREFIX, removeNonHTMLProps } from \"../../common/props\";\nimport { isRefObject } from \"../../common/refs\";\nimport { AbstractButton } from \"./abstractButton\";\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n function Button() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleRef = isRefObject(_this.props.elementRef)\n ? (_this.buttonRef = _this.props.elementRef)\n : function (ref) {\n var _a;\n _this.buttonRef = ref;\n (_a = _this.props.elementRef) === null || _a === void 0 ? void 0 : _a(ref);\n };\n return _this;\n }\n Button.prototype.render = function () {\n return (React.createElement(\"button\", __assign({ type: \"button\", ref: this.handleRef }, removeNonHTMLProps(this.props), this.getCommonButtonProps()), this.renderChildren()));\n };\n Button.displayName = DISPLAYNAME_PREFIX + \".Button\";\n return Button;\n}(AbstractButton));\nexport { Button };\nvar AnchorButton = /** @class */ (function (_super) {\n __extends(AnchorButton, _super);\n function AnchorButton() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleRef = isRefObject(_this.props.elementRef)\n ? (_this.buttonRef = _this.props.elementRef)\n : function (ref) {\n var _a;\n _this.buttonRef = ref;\n (_a = _this.props.elementRef) === null || _a === void 0 ? void 0 : _a(ref);\n };\n return _this;\n }\n AnchorButton.prototype.render = function () {\n var _a = this.props, href = _a.href, _b = _a.tabIndex, tabIndex = _b === void 0 ? 0 : _b;\n var commonProps = this.getCommonButtonProps();\n return (React.createElement(\"a\", __assign({ role: \"button\", ref: this.handleRef }, removeNonHTMLProps(this.props), commonProps, { href: commonProps.disabled ? undefined : href, tabIndex: commonProps.disabled ? -1 : tabIndex }), this.renderChildren()));\n };\n AnchorButton.displayName = DISPLAYNAME_PREFIX + \".AnchorButton\";\n return AnchorButton;\n}(AbstractButton));\nexport { AnchorButton };\n//# sourceMappingURL=buttons.js.map","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Parses a query string into an object, where the keys and values of the object are the\n * name/value pairs from the query string, decoded. If a name appears multiple times,\n * the value in the object will be an array of values.\n * @function queryToObject\n *\n * @param {String} queryString The query string.\n * @returns {Object} An object containing the parameters parsed from the query string.\n *\n *\n * @example\n * var obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y');\n * // obj will be:\n * // {\n * // key1 : 'some value',\n * // key2 : 'a/b',\n * // key3 : ['x', 'y']\n * // }\n *\n * @see objectToQuery\n */\nfunction queryToObject(queryString) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(queryString)) {\n throw new DeveloperError(\"queryString is required.\");\n }\n //>>includeEnd('debug');\n\n var result = {};\n if (queryString === \"\") {\n return result;\n }\n var parts = queryString.replace(/\\+/g, \"%20\").split(/[&;]/);\n for (var i = 0, len = parts.length; i < len; ++i) {\n var subparts = parts[i].split(\"=\");\n\n var name = decodeURIComponent(subparts[0]);\n var value = subparts[1];\n if (defined(value)) {\n value = decodeURIComponent(value);\n } else {\n value = \"\";\n }\n\n var resultValue = result[name];\n if (typeof resultValue === \"string\") {\n // expand the single value to an array\n result[name] = [resultValue, value];\n } else if (Array.isArray(resultValue)) {\n resultValue.push(value);\n } else {\n result[name] = value;\n }\n }\n return result;\n}\nexport default queryToObject;\n","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Helper function for formatting ratios as CSS percentage values. */\nexport function formatPercentage(ratio) {\n return (ratio * 100).toFixed(2) + \"%\";\n}\n/**\n * Mutates the values array by filling all the values between start and end index (inclusive) with the fill value.\n */\nexport function fillValues(values, startIndex, endIndex, fillValue) {\n var inc = startIndex < endIndex ? 1 : -1;\n for (var index = startIndex; index !== endIndex + inc; index += inc) {\n values[index] = fillValue;\n }\n}\n/**\n * Returns the minimum element of an array as determined by comparing the results of calling the arg function on each\n * element of the array. The function will only be called once per element.\n */\nexport function argMin(values, argFn) {\n if (values.length === 0) {\n return undefined;\n }\n var minValue = values[0];\n var minArg = argFn(minValue);\n for (var index = 1; index < values.length; index++) {\n var value = values[index];\n var arg = argFn(value);\n if (arg < minArg) {\n minValue = value;\n minArg = arg;\n }\n }\n return minValue;\n}\n//# sourceMappingURL=sliderUtils.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Keys } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { clamp, safeInvoke } from \"../../common/utils\";\nimport { formatPercentage } from \"./sliderUtils\";\n// props that require number values, for validation\nvar NUMBER_PROPS = [\"max\", \"min\", \"stepSize\", \"tickSize\", \"value\"];\n/** Internal component for a Handle with click/drag/keyboard logic to determine a new value. */\nvar Handle = /** @class */ (function (_super) {\n __extends(Handle, _super);\n function Handle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isMoving: false,\n };\n _this.refHandlers = {\n handle: function (el) { return (_this.handleElement = el); },\n };\n _this.beginHandleMovement = function (event) {\n document.addEventListener(\"mousemove\", _this.handleHandleMovement);\n document.addEventListener(\"mouseup\", _this.endHandleMovement);\n _this.setState({ isMoving: true });\n _this.changeValue(_this.clientToValue(_this.mouseEventClientOffset(event)));\n };\n _this.beginHandleTouchMovement = function (event) {\n document.addEventListener(\"touchmove\", _this.handleHandleTouchMovement);\n document.addEventListener(\"touchend\", _this.endHandleTouchMovement);\n document.addEventListener(\"touchcancel\", _this.endHandleTouchMovement);\n _this.setState({ isMoving: true });\n _this.changeValue(_this.clientToValue(_this.touchEventClientOffset(event)));\n };\n _this.endHandleMovement = function (event) {\n _this.handleMoveEndedAt(_this.mouseEventClientOffset(event));\n };\n _this.endHandleTouchMovement = function (event) {\n _this.handleMoveEndedAt(_this.touchEventClientOffset(event));\n };\n _this.handleMoveEndedAt = function (clientPixel) {\n _this.removeDocumentEventListeners();\n _this.setState({ isMoving: false });\n // always invoke onRelease; changeValue may call onChange if value is different\n var onRelease = _this.props.onRelease;\n var finalValue = _this.changeValue(_this.clientToValue(clientPixel));\n safeInvoke(onRelease, finalValue);\n };\n _this.handleHandleMovement = function (event) {\n _this.handleMovedTo(_this.mouseEventClientOffset(event));\n };\n _this.handleHandleTouchMovement = function (event) {\n _this.handleMovedTo(_this.touchEventClientOffset(event));\n };\n _this.handleMovedTo = function (clientPixel) {\n if (_this.state.isMoving && !_this.props.disabled) {\n _this.changeValue(_this.clientToValue(clientPixel));\n }\n };\n _this.handleKeyDown = function (event) {\n var _a = _this.props, stepSize = _a.stepSize, value = _a.value;\n var which = event.which;\n if (which === Keys.ARROW_DOWN || which === Keys.ARROW_LEFT) {\n _this.changeValue(value - stepSize);\n // this key event has been handled! prevent browser scroll on up/down\n event.preventDefault();\n }\n else if (which === Keys.ARROW_UP || which === Keys.ARROW_RIGHT) {\n _this.changeValue(value + stepSize);\n event.preventDefault();\n }\n };\n _this.handleKeyUp = function (event) {\n if ([Keys.ARROW_UP, Keys.ARROW_DOWN, Keys.ARROW_LEFT, Keys.ARROW_RIGHT].indexOf(event.which) >= 0) {\n safeInvoke(_this.props.onRelease, _this.props.value);\n }\n };\n return _this;\n }\n Handle.prototype.componentDidMount = function () {\n // The first time this component renders, it has no ref to the handle and thus incorrectly centers the handle.\n // Therefore, on the first mount, force a re-render to center the handle with the ref'd component.\n this.forceUpdate();\n };\n Handle.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, disabled = _b.disabled, label = _b.label, min = _b.min, tickSizeRatio = _b.tickSizeRatio, value = _b.value, vertical = _b.vertical;\n var isMoving = this.state.isMoving;\n // The handle midpoint of RangeSlider is actually shifted by a margin to\n // be on the edge of the visible handle element. Because the midpoint\n // calculation does not take this margin into account, we instead\n // measure the long side (which is equal to the short side plus the\n // margin).\n var handleMidpoint = this.getHandleMidpointAndOffset(this.handleElement, true).handleMidpoint;\n var offsetRatio = (value - min) * tickSizeRatio;\n var offsetCalc = \"calc(\" + formatPercentage(offsetRatio) + \" - \" + handleMidpoint + \"px)\";\n var style = vertical ? { bottom: offsetCalc } : { left: offsetCalc };\n return (React.createElement(\"span\", { className: classNames(Classes.SLIDER_HANDLE, (_a = {}, _a[Classes.ACTIVE] = isMoving, _a), className), onKeyDown: disabled ? null : this.handleKeyDown, onKeyUp: disabled ? null : this.handleKeyUp, onMouseDown: disabled ? null : this.beginHandleMovement, onTouchStart: disabled ? null : this.beginHandleTouchMovement, ref: this.refHandlers.handle, style: style, tabIndex: 0 }, label == null ? null : React.createElement(\"span\", { className: Classes.SLIDER_LABEL }, label)));\n };\n Handle.prototype.componentWillUnmount = function () {\n this.removeDocumentEventListeners();\n };\n /** Convert client pixel to value between min and max. */\n Handle.prototype.clientToValue = function (clientPixel) {\n var _a = this.props, stepSize = _a.stepSize, tickSize = _a.tickSize, value = _a.value, vertical = _a.vertical;\n if (this.handleElement == null) {\n return value;\n }\n // #1769: this logic doesn't work perfectly when the tick size is\n // smaller than the handle size; it may be off by a tick or two.\n var clientPixelNormalized = vertical ? window.innerHeight - clientPixel : clientPixel;\n var handleCenterPixel = this.getHandleElementCenterPixel(this.handleElement);\n var pixelDelta = clientPixelNormalized - handleCenterPixel;\n if (isNaN(pixelDelta)) {\n return value;\n }\n // convert pixels to range value in increments of `stepSize`\n return value + Math.round(pixelDelta / (tickSize * stepSize)) * stepSize;\n };\n Handle.prototype.mouseEventClientOffset = function (event) {\n return this.props.vertical ? event.clientY : event.clientX;\n };\n Handle.prototype.touchEventClientOffset = function (event) {\n var touch = event.changedTouches[0];\n return this.props.vertical ? touch.clientY : touch.clientX;\n };\n Handle.prototype.validateProps = function (props) {\n for (var _i = 0, NUMBER_PROPS_1 = NUMBER_PROPS; _i < NUMBER_PROPS_1.length; _i++) {\n var prop = NUMBER_PROPS_1[_i];\n if (typeof props[prop] !== \"number\") {\n throw new Error(\"[Blueprint] <Handle> requires number value for \" + prop + \" prop\");\n }\n }\n };\n /** Clamp value and invoke callback if it differs from current value */\n Handle.prototype.changeValue = function (newValue, callback) {\n if (callback === void 0) { callback = this.props.onChange; }\n newValue = this.clamp(newValue);\n if (!isNaN(newValue) && this.props.value !== newValue) {\n safeInvoke(callback, newValue);\n }\n return newValue;\n };\n /** Clamp value between min and max props */\n Handle.prototype.clamp = function (value) {\n return clamp(value, this.props.min, this.props.max);\n };\n Handle.prototype.getHandleElementCenterPixel = function (handleElement) {\n var _a = this.getHandleMidpointAndOffset(handleElement), handleMidpoint = _a.handleMidpoint, handleOffset = _a.handleOffset;\n return handleOffset + handleMidpoint;\n };\n Handle.prototype.getHandleMidpointAndOffset = function (handleElement, useOppositeDimension) {\n if (useOppositeDimension === void 0) { useOppositeDimension = false; }\n if (handleElement == null) {\n return { handleMidpoint: 0, handleOffset: 0 };\n }\n var vertical = this.props.vertical;\n // getBoundingClientRect().height includes border size; clientHeight does not.\n var handleRect = handleElement.getBoundingClientRect();\n var sizeKey = vertical\n ? useOppositeDimension\n ? \"width\"\n : \"height\"\n : useOppositeDimension\n ? \"height\"\n : \"width\";\n // \"bottom\" value seems to be consistently incorrect, so explicitly\n // calculate it using the window offset instead.\n var handleOffset = vertical ? window.innerHeight - (handleRect.top + handleRect[sizeKey]) : handleRect.left;\n return { handleMidpoint: handleRect[sizeKey] / 2, handleOffset: handleOffset };\n };\n Handle.prototype.removeDocumentEventListeners = function () {\n document.removeEventListener(\"mousemove\", this.handleHandleMovement);\n document.removeEventListener(\"mouseup\", this.endHandleMovement);\n document.removeEventListener(\"touchmove\", this.handleHandleTouchMovement);\n document.removeEventListener(\"touchend\", this.endHandleTouchMovement);\n document.removeEventListener(\"touchcancel\", this.endHandleTouchMovement);\n };\n Handle.displayName = DISPLAYNAME_PREFIX + \".SliderHandle\";\n Handle = __decorate([\n polyfill\n ], Handle);\n return Handle;\n}(AbstractPureComponent2));\nexport { Handle };\n//# sourceMappingURL=handle.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Intent } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport * as Utils from \"../../common/utils\";\nimport { Handle } from \"./handle\";\nimport { HandleInteractionKind, HandleType } from \"./handleProps\";\nimport { argMin, fillValues, formatPercentage } from \"./sliderUtils\";\n/**\n * SFC used to pass slider handle props to a `MultiSlider`.\n * This element is not rendered directly.\n */\nvar MultiSliderHandle = function () { return null; };\nMultiSliderHandle.displayName = DISPLAYNAME_PREFIX + \".MultiSliderHandle\";\nvar MultiSlider = /** @class */ (function (_super) {\n __extends(MultiSlider, _super);\n function MultiSlider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n labelPrecision: getLabelPrecision(_this.props),\n tickSize: 0,\n tickSizeRatio: 0,\n };\n _this.handleElements = [];\n _this.addHandleRef = function (ref) {\n if (ref != null) {\n _this.handleElements.push(ref);\n }\n };\n _this.maybeHandleTrackClick = function (event) {\n if (_this.canHandleTrackEvent(event)) {\n var foundHandle = _this.nearestHandleForValue(_this.handleElements, function (handle) {\n return handle.mouseEventClientOffset(event);\n });\n if (foundHandle) {\n foundHandle.beginHandleMovement(event);\n }\n }\n };\n _this.maybeHandleTrackTouch = function (event) {\n if (_this.canHandleTrackEvent(event)) {\n var foundHandle = _this.nearestHandleForValue(_this.handleElements, function (handle) {\n return handle.touchEventClientOffset(event);\n });\n if (foundHandle) {\n foundHandle.beginHandleTouchMovement(event);\n }\n }\n };\n _this.canHandleTrackEvent = function (event) {\n var target = event.target;\n // ensure event does not come from inside the handle\n return !_this.props.disabled && target.closest(\".\" + Classes.SLIDER_HANDLE) == null;\n };\n _this.getHandlerForIndex = function (index, callback) {\n return function (newValue) {\n Utils.safeInvoke(callback, _this.getNewHandleValues(newValue, index));\n };\n };\n _this.handleChange = function (newValues) {\n var handleProps = getSortedInteractiveHandleProps(_this.props);\n var oldValues = handleProps.map(function (handle) { return handle.value; });\n if (!Utils.arraysEqual(newValues, oldValues)) {\n Utils.safeInvoke(_this.props.onChange, newValues);\n handleProps.forEach(function (handle, index) {\n if (oldValues[index] !== newValues[index]) {\n Utils.safeInvoke(handle.onChange, newValues[index]);\n }\n });\n }\n };\n _this.handleRelease = function (newValues) {\n var handleProps = getSortedInteractiveHandleProps(_this.props);\n Utils.safeInvoke(_this.props.onRelease, newValues);\n handleProps.forEach(function (handle, index) {\n Utils.safeInvoke(handle.onRelease, newValues[index]);\n });\n };\n return _this;\n }\n MultiSlider_1 = MultiSlider;\n MultiSlider.getDerivedStateFromProps = function (props) {\n return { labelPrecision: MultiSlider_1.getLabelPrecision(props) };\n };\n MultiSlider.getLabelPrecision = function (_a) {\n var labelPrecision = _a.labelPrecision, stepSize = _a.stepSize;\n // infer default label precision from stepSize because that's how much the handle moves.\n return labelPrecision == null ? Utils.countDecimalPlaces(stepSize) : labelPrecision;\n };\n MultiSlider.prototype.getSnapshotBeforeUpdate = function (prevProps) {\n var prevHandleProps = getSortedInteractiveHandleProps(prevProps);\n var newHandleProps = getSortedInteractiveHandleProps(this.props);\n if (newHandleProps.length !== prevHandleProps.length) {\n // clear refs\n this.handleElements = [];\n }\n return null;\n };\n MultiSlider.prototype.render = function () {\n var _a;\n var _this = this;\n var classes = classNames(Classes.SLIDER, (_a = {},\n _a[Classes.DISABLED] = this.props.disabled,\n _a[Classes.SLIDER + \"-unlabeled\"] = this.props.labelRenderer === false,\n _a[Classes.VERTICAL] = this.props.vertical,\n _a), this.props.className);\n return (React.createElement(\"div\", { className: classes, onMouseDown: this.maybeHandleTrackClick, onTouchStart: this.maybeHandleTrackTouch },\n React.createElement(\"div\", { className: Classes.SLIDER_TRACK, ref: function (ref) { return (_this.trackElement = ref); } }, this.renderTracks()),\n React.createElement(\"div\", { className: Classes.SLIDER_AXIS }, this.renderLabels()),\n this.renderHandles()));\n };\n MultiSlider.prototype.componentDidMount = function () {\n this.updateTickSize();\n };\n MultiSlider.prototype.componentDidUpdate = function (prevProps, prevState) {\n _super.prototype.componentDidUpdate.call(this, prevProps, prevState);\n this.updateTickSize();\n };\n MultiSlider.prototype.validateProps = function (props) {\n if (props.stepSize <= 0) {\n throw new Error(Errors.SLIDER_ZERO_STEP);\n }\n if (props.labelStepSize <= 0) {\n throw new Error(Errors.SLIDER_ZERO_LABEL_STEP);\n }\n var anyInvalidChildren = false;\n React.Children.forEach(props.children, function (child) {\n // allow boolean coercion to omit nulls and false values\n if (child && !Utils.isElementOfType(child, MultiSlider_1.Handle)) {\n anyInvalidChildren = true;\n }\n });\n if (anyInvalidChildren) {\n throw new Error(Errors.MULTISLIDER_INVALID_CHILD);\n }\n };\n MultiSlider.prototype.formatLabel = function (value) {\n var labelRenderer = this.props.labelRenderer;\n if (labelRenderer === false) {\n return null;\n }\n else if (Utils.isFunction(labelRenderer)) {\n return labelRenderer(value);\n }\n else {\n return value.toFixed(this.state.labelPrecision);\n }\n };\n MultiSlider.prototype.renderLabels = function () {\n if (this.props.labelRenderer === false) {\n return null;\n }\n var _a = this.props, labelStepSize = _a.labelStepSize, max = _a.max, min = _a.min;\n var labels = [];\n var stepSizeRatio = this.state.tickSizeRatio * labelStepSize;\n // step size lends itself naturally to a `for` loop\n // eslint-disable-line one-var, no-sequences\n for (var i = min, offsetRatio = 0; i < max || Utils.approxEqual(i, max); i += labelStepSize, offsetRatio += stepSizeRatio) {\n var offsetPercentage = formatPercentage(offsetRatio);\n var style = this.props.vertical ? { bottom: offsetPercentage } : { left: offsetPercentage };\n labels.push(React.createElement(\"div\", { className: Classes.SLIDER_LABEL, key: i, style: style }, this.formatLabel(i)));\n }\n return labels;\n };\n MultiSlider.prototype.renderTracks = function () {\n var trackStops = getSortedHandleProps(this.props);\n trackStops.push({ value: this.props.max });\n // render from current to previous, then increment previous\n var previous = { value: this.props.min };\n var handles = [];\n for (var index = 0; index < trackStops.length; index++) {\n var current = trackStops[index];\n handles.push(this.renderTrackFill(index, previous, current));\n previous = current;\n }\n return handles;\n };\n MultiSlider.prototype.renderTrackFill = function (index, start, end) {\n // ensure startRatio <= endRatio\n var _a = [this.getOffsetRatio(start.value), this.getOffsetRatio(end.value)].sort(function (left, right) { return left - right; }), startRatio = _a[0], endRatio = _a[1];\n var startOffset = formatPercentage(startRatio);\n var endOffset = formatPercentage(1 - endRatio);\n var orientationStyle = this.props.vertical\n ? { bottom: startOffset, top: endOffset, left: 0 }\n : { left: startOffset, right: endOffset, top: 0 };\n var style = __assign(__assign({}, orientationStyle), (start.trackStyleAfter || end.trackStyleBefore || {}));\n var classes = classNames(Classes.SLIDER_PROGRESS, Classes.intentClass(this.getTrackIntent(start, end)));\n return React.createElement(\"div\", { key: \"track-\" + index, className: classes, style: style });\n };\n MultiSlider.prototype.renderHandles = function () {\n var _this = this;\n var _a = this.props, disabled = _a.disabled, max = _a.max, min = _a.min, stepSize = _a.stepSize, vertical = _a.vertical;\n var handleProps = getSortedInteractiveHandleProps(this.props);\n if (handleProps.length === 0) {\n return null;\n }\n return handleProps.map(function (_a, index) {\n var _b;\n var value = _a.value, type = _a.type;\n return (React.createElement(Handle, { className: classNames((_b = {},\n _b[Classes.START] = type === HandleType.START,\n _b[Classes.END] = type === HandleType.END,\n _b)), disabled: disabled, key: index + \"-\" + handleProps.length, label: _this.formatLabel(value), max: max, min: min, onChange: _this.getHandlerForIndex(index, _this.handleChange), onRelease: _this.getHandlerForIndex(index, _this.handleRelease), ref: _this.addHandleRef, stepSize: stepSize, tickSize: _this.state.tickSize, tickSizeRatio: _this.state.tickSizeRatio, value: value, vertical: vertical }));\n });\n };\n MultiSlider.prototype.nearestHandleForValue = function (handles, getOffset) {\n return argMin(handles, function (handle) {\n var offset = getOffset(handle);\n var offsetValue = handle.clientToValue(offset);\n var handleValue = handle.props.value;\n return Math.abs(offsetValue - handleValue);\n });\n };\n MultiSlider.prototype.getNewHandleValues = function (newValue, oldIndex) {\n var handleProps = getSortedInteractiveHandleProps(this.props);\n var oldValues = handleProps.map(function (handle) { return handle.value; });\n var newValues = oldValues.slice();\n newValues[oldIndex] = newValue;\n newValues.sort(function (left, right) { return left - right; });\n var newIndex = newValues.indexOf(newValue);\n var lockIndex = this.findFirstLockedHandleIndex(oldIndex, newIndex);\n if (lockIndex === -1) {\n fillValues(newValues, oldIndex, newIndex, newValue);\n }\n else {\n // If pushing past a locked handle, discard the new value and only make the updates to clamp values against the lock.\n var lockValue = oldValues[lockIndex];\n fillValues(oldValues, oldIndex, lockIndex, lockValue);\n return oldValues;\n }\n return newValues;\n };\n MultiSlider.prototype.findFirstLockedHandleIndex = function (startIndex, endIndex) {\n var inc = startIndex < endIndex ? 1 : -1;\n var handleProps = getSortedInteractiveHandleProps(this.props);\n for (var index = startIndex + inc; index !== endIndex + inc; index += inc) {\n if (handleProps[index].interactionKind !== HandleInteractionKind.PUSH) {\n return index;\n }\n }\n return -1;\n };\n MultiSlider.prototype.getOffsetRatio = function (value) {\n return Utils.clamp((value - this.props.min) * this.state.tickSizeRatio, 0, 1);\n };\n MultiSlider.prototype.getTrackIntent = function (start, end) {\n if (!this.props.showTrackFill) {\n return Intent.NONE;\n }\n if (start.intentAfter !== undefined) {\n return start.intentAfter;\n }\n else if (end !== undefined && end.intentBefore !== undefined) {\n return end.intentBefore;\n }\n return this.props.defaultTrackIntent;\n };\n MultiSlider.prototype.updateTickSize = function () {\n if (this.trackElement != null) {\n var trackSize = this.props.vertical ? this.trackElement.clientHeight : this.trackElement.clientWidth;\n var tickSizeRatio = 1 / (this.props.max - this.props.min);\n var tickSize = trackSize * tickSizeRatio;\n this.setState({ tickSize: tickSize, tickSizeRatio: tickSizeRatio });\n }\n };\n var MultiSlider_1;\n MultiSlider.defaultSliderProps = {\n disabled: false,\n labelStepSize: 1,\n max: 10,\n min: 0,\n showTrackFill: true,\n stepSize: 1,\n vertical: false,\n };\n MultiSlider.defaultProps = __assign(__assign({}, MultiSlider_1.defaultSliderProps), { defaultTrackIntent: Intent.NONE });\n MultiSlider.displayName = DISPLAYNAME_PREFIX + \".MultiSlider\";\n MultiSlider.Handle = MultiSliderHandle;\n MultiSlider = MultiSlider_1 = __decorate([\n polyfill\n ], MultiSlider);\n return MultiSlider;\n}(AbstractPureComponent2));\nexport { MultiSlider };\nfunction getLabelPrecision(_a) {\n var labelPrecision = _a.labelPrecision, stepSize = _a.stepSize;\n // infer default label precision from stepSize because that's how much the handle moves.\n return labelPrecision == null ? Utils.countDecimalPlaces(stepSize) : labelPrecision;\n}\nfunction getSortedInteractiveHandleProps(props) {\n return getSortedHandleProps(props, function (childProps) { return childProps.interactionKind !== HandleInteractionKind.NONE; });\n}\nfunction getSortedHandleProps(_a, predicate) {\n var children = _a.children;\n if (predicate === void 0) { predicate = function () { return true; }; }\n var maybeHandles = React.Children.map(children, function (child) {\n return Utils.isElementOfType(child, MultiSlider.Handle) && predicate(child.props) ? child.props : null;\n });\n var handles = maybeHandles != null ? maybeHandles : [];\n handles = handles.filter(function (handle) { return handle !== null; });\n handles.sort(function (left, right) { return left.value - right.value; });\n return handles;\n}\n//# sourceMappingURL=multiSlider.js.map","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport when from \"../ThirdParty/when.js\";\nimport Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport Event from \"./Event.js\";\nimport Heap from \"./Heap.js\";\nimport isBlobUri from \"./isBlobUri.js\";\nimport isDataUri from \"./isDataUri.js\";\nimport RequestState from \"./RequestState.js\";\n\nfunction sortRequests(a, b) {\n return a.priority - b.priority;\n}\n\nvar statistics = {\n numberOfAttemptedRequests: 0,\n numberOfActiveRequests: 0,\n numberOfCancelledRequests: 0,\n numberOfCancelledActiveRequests: 0,\n numberOfFailedRequests: 0,\n numberOfActiveRequestsEver: 0,\n lastNumberOfActiveRequests: 0,\n};\n\nvar priorityHeapLength = 20;\nvar requestHeap = new Heap({\n comparator: sortRequests,\n});\nrequestHeap.maximumLength = priorityHeapLength;\nrequestHeap.reserve(priorityHeapLength);\n\nvar activeRequests = [];\nvar numberOfActiveRequestsByServer = {};\n\nvar pageUri =\n typeof document !== \"undefined\" ? new Uri(document.location.href) : new Uri();\n\nvar requestCompletedEvent = new Event();\n\n/**\n * The request scheduler is used to track and constrain the number of active requests in order to prioritize incoming requests. The ability\n * to retain control over the number of requests in CesiumJS is important because due to events such as changes in the camera position,\n * a lot of new requests may be generated and a lot of in-flight requests may become redundant. The request scheduler manually constrains the\n * number of requests so that newer requests wait in a shorter queue and don't have to compete for bandwidth with requests that have expired.\n *\n * @namespace RequestScheduler\n *\n */\nfunction RequestScheduler() {}\n\n/**\n * The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit.\n * @type {Number}\n * @default 50\n */\nRequestScheduler.maximumRequests = 50;\n\n/**\n * The maximum number of simultaneous active requests per server. Un-throttled requests or servers specifically\n * listed in {@link requestsByServer} do not observe this limit.\n * @type {Number}\n * @default 6\n */\nRequestScheduler.maximumRequestsPerServer = 6;\n\n/**\n * A per server key list of overrides to use for throttling instead of <code>maximumRequestsPerServer</code>\n * @type {Object}\n *\n * @example\n * RequestScheduler.requestsByServer = {\n * 'api.cesium.com:443': 18,\n * 'assets.cesium.com:443': 18\n * };\n */\nRequestScheduler.requestsByServer = {\n \"api.cesium.com:443\": 18,\n \"assets.cesium.com:443\": 18,\n};\n\n/**\n * Specifies if the request scheduler should throttle incoming requests, or let the browser queue requests under its control.\n * @type {Boolean}\n * @default true\n */\nRequestScheduler.throttleRequests = true;\n\n/**\n * When true, log statistics to the console every frame\n * @type {Boolean}\n * @default false\n * @private\n */\nRequestScheduler.debugShowStatistics = false;\n\n/**\n * An event that's raised when a request is completed. Event handlers are passed\n * the error object if the request fails.\n *\n * @type {Event}\n * @default Event()\n * @private\n */\nRequestScheduler.requestCompletedEvent = requestCompletedEvent;\n\nObject.defineProperties(RequestScheduler, {\n /**\n * Returns the statistics used by the request scheduler.\n *\n * @memberof RequestScheduler\n *\n * @type Object\n * @readonly\n * @private\n */\n statistics: {\n get: function () {\n return statistics;\n },\n },\n\n /**\n * The maximum size of the priority heap. This limits the number of requests that are sorted by priority. Only applies to requests that are not yet active.\n *\n * @memberof RequestScheduler\n *\n * @type {Number}\n * @default 20\n * @private\n */\n priorityHeapLength: {\n get: function () {\n return priorityHeapLength;\n },\n set: function (value) {\n // If the new length shrinks the heap, need to cancel some of the requests.\n // Since this value is not intended to be tweaked regularly it is fine to just cancel the high priority requests.\n if (value < priorityHeapLength) {\n while (requestHeap.length > value) {\n var request = requestHeap.pop();\n cancelRequest(request);\n }\n }\n priorityHeapLength = value;\n requestHeap.maximumLength = value;\n requestHeap.reserve(value);\n },\n },\n});\n\nfunction updatePriority(request) {\n if (defined(request.priorityFunction)) {\n request.priority = request.priorityFunction();\n }\n}\n\nfunction serverHasOpenSlots(serverKey) {\n var maxRequests = defaultValue(\n RequestScheduler.requestsByServer[serverKey],\n RequestScheduler.maximumRequestsPerServer\n );\n return numberOfActiveRequestsByServer[serverKey] < maxRequests;\n}\n\nfunction issueRequest(request) {\n if (request.state === RequestState.UNISSUED) {\n request.state = RequestState.ISSUED;\n request.deferred = when.defer();\n }\n return request.deferred.promise;\n}\n\nfunction getRequestReceivedFunction(request) {\n return function (results) {\n if (request.state === RequestState.CANCELLED) {\n // If the data request comes back but the request is cancelled, ignore it.\n return;\n }\n --statistics.numberOfActiveRequests;\n --numberOfActiveRequestsByServer[request.serverKey];\n requestCompletedEvent.raiseEvent();\n request.state = RequestState.RECEIVED;\n request.deferred.resolve(results);\n // explicitly set to undefined to ensure GC of request response data. See #8843\n request.deferred = undefined;\n };\n}\n\nfunction getRequestFailedFunction(request) {\n return function (error) {\n if (request.state === RequestState.CANCELLED) {\n // If the data request comes back but the request is cancelled, ignore it.\n return;\n }\n ++statistics.numberOfFailedRequests;\n --statistics.numberOfActiveRequests;\n --numberOfActiveRequestsByServer[request.serverKey];\n requestCompletedEvent.raiseEvent(error);\n request.state = RequestState.FAILED;\n request.deferred.reject(error);\n };\n}\n\nfunction startRequest(request) {\n var promise = issueRequest(request);\n request.state = RequestState.ACTIVE;\n activeRequests.push(request);\n ++statistics.numberOfActiveRequests;\n ++statistics.numberOfActiveRequestsEver;\n ++numberOfActiveRequestsByServer[request.serverKey];\n request\n .requestFunction()\n .then(getRequestReceivedFunction(request))\n .otherwise(getRequestFailedFunction(request));\n return promise;\n}\n\nfunction cancelRequest(request) {\n var active = request.state === RequestState.ACTIVE;\n request.state = RequestState.CANCELLED;\n ++statistics.numberOfCancelledRequests;\n // check that deferred has not been cleared since cancelRequest can be called\n // on a finished request, e.g. by clearForSpecs during tests\n if (defined(request.deferred)) {\n request.deferred.reject();\n request.deferred = undefined;\n }\n\n if (active) {\n --statistics.numberOfActiveRequests;\n --numberOfActiveRequestsByServer[request.serverKey];\n ++statistics.numberOfCancelledActiveRequests;\n }\n\n if (defined(request.cancelFunction)) {\n request.cancelFunction();\n }\n}\n\n/**\n * Sort requests by priority and start requests.\n * @private\n */\nRequestScheduler.update = function () {\n var i;\n var request;\n\n // Loop over all active requests. Cancelled, failed, or received requests are removed from the array to make room for new requests.\n var removeCount = 0;\n var activeLength = activeRequests.length;\n for (i = 0; i < activeLength; ++i) {\n request = activeRequests[i];\n if (request.cancelled) {\n // Request was explicitly cancelled\n cancelRequest(request);\n }\n if (request.state !== RequestState.ACTIVE) {\n // Request is no longer active, remove from array\n ++removeCount;\n continue;\n }\n if (removeCount > 0) {\n // Shift back to fill in vacated slots from completed requests\n activeRequests[i - removeCount] = request;\n }\n }\n activeRequests.length -= removeCount;\n\n // Update priority of issued requests and resort the heap\n var issuedRequests = requestHeap.internalArray;\n var issuedLength = requestHeap.length;\n for (i = 0; i < issuedLength; ++i) {\n updatePriority(issuedRequests[i]);\n }\n requestHeap.resort();\n\n // Get the number of open slots and fill with the highest priority requests.\n // Un-throttled requests are automatically added to activeRequests, so activeRequests.length may exceed maximumRequests\n var openSlots = Math.max(\n RequestScheduler.maximumRequests - activeRequests.length,\n 0\n );\n var filledSlots = 0;\n while (filledSlots < openSlots && requestHeap.length > 0) {\n // Loop until all open slots are filled or the heap becomes empty\n request = requestHeap.pop();\n if (request.cancelled) {\n // Request was explicitly cancelled\n cancelRequest(request);\n continue;\n }\n\n if (request.throttleByServer && !serverHasOpenSlots(request.serverKey)) {\n // Open slots are available, but the request is throttled by its server. Cancel and try again later.\n cancelRequest(request);\n continue;\n }\n\n startRequest(request);\n ++filledSlots;\n }\n\n updateStatistics();\n};\n\n/**\n * Get the server key from a given url.\n *\n * @param {String} url The url.\n * @returns {String} The server key.\n * @private\n */\nRequestScheduler.getServerKey = function (url) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"url\", url);\n //>>includeEnd('debug');\n\n var uri = new Uri(url).resolve(pageUri);\n uri.normalize();\n var serverKey = uri.authority;\n if (!/:/.test(serverKey)) {\n // If the authority does not contain a port number, add port 443 for https or port 80 for http\n serverKey = serverKey + \":\" + (uri.scheme === \"https\" ? \"443\" : \"80\");\n }\n\n var length = numberOfActiveRequestsByServer[serverKey];\n if (!defined(length)) {\n numberOfActiveRequestsByServer[serverKey] = 0;\n }\n\n return serverKey;\n};\n\n/**\n * Issue a request. If request.throttle is false, the request is sent immediately. Otherwise the request will be\n * queued and sorted by priority before being sent.\n *\n * @param {Request} request The request object.\n *\n * @returns {Promise|undefined} A Promise for the requested data, or undefined if this request does not have high enough priority to be issued.\n *\n * @private\n */\nRequestScheduler.request = function (request) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"request\", request);\n Check.typeOf.string(\"request.url\", request.url);\n Check.typeOf.func(\"request.requestFunction\", request.requestFunction);\n //>>includeEnd('debug');\n\n if (isDataUri(request.url) || isBlobUri(request.url)) {\n requestCompletedEvent.raiseEvent();\n request.state = RequestState.RECEIVED;\n return request.requestFunction();\n }\n\n ++statistics.numberOfAttemptedRequests;\n\n if (!defined(request.serverKey)) {\n request.serverKey = RequestScheduler.getServerKey(request.url);\n }\n\n if (\n RequestScheduler.throttleRequests &&\n request.throttleByServer &&\n !serverHasOpenSlots(request.serverKey)\n ) {\n // Server is saturated. Try again later.\n return undefined;\n }\n\n if (!RequestScheduler.throttleRequests || !request.throttle) {\n return startRequest(request);\n }\n\n if (activeRequests.length >= RequestScheduler.maximumRequests) {\n // Active requests are saturated. Try again later.\n return undefined;\n }\n\n // Insert into the priority heap and see if a request was bumped off. If this request is the lowest\n // priority it will be returned.\n updatePriority(request);\n var removedRequest = requestHeap.insert(request);\n\n if (defined(removedRequest)) {\n if (removedRequest === request) {\n // Request does not have high enough priority to be issued\n return undefined;\n }\n // A previously issued request has been bumped off the priority heap, so cancel it\n cancelRequest(removedRequest);\n }\n\n return issueRequest(request);\n};\n\nfunction updateStatistics() {\n if (!RequestScheduler.debugShowStatistics) {\n return;\n }\n\n if (\n statistics.numberOfActiveRequests === 0 &&\n statistics.lastNumberOfActiveRequests > 0\n ) {\n if (statistics.numberOfAttemptedRequests > 0) {\n console.log(\n \"Number of attempted requests: \" + statistics.numberOfAttemptedRequests\n );\n statistics.numberOfAttemptedRequests = 0;\n }\n\n if (statistics.numberOfCancelledRequests > 0) {\n console.log(\n \"Number of cancelled requests: \" + statistics.numberOfCancelledRequests\n );\n statistics.numberOfCancelledRequests = 0;\n }\n\n if (statistics.numberOfCancelledActiveRequests > 0) {\n console.log(\n \"Number of cancelled active requests: \" +\n statistics.numberOfCancelledActiveRequests\n );\n statistics.numberOfCancelledActiveRequests = 0;\n }\n\n if (statistics.numberOfFailedRequests > 0) {\n console.log(\n \"Number of failed requests: \" + statistics.numberOfFailedRequests\n );\n statistics.numberOfFailedRequests = 0;\n }\n }\n\n statistics.lastNumberOfActiveRequests = statistics.numberOfActiveRequests;\n}\n\n/**\n * For testing only. Clears any requests that may not have completed from previous tests.\n *\n * @private\n */\nRequestScheduler.clearForSpecs = function () {\n while (requestHeap.length > 0) {\n var request = requestHeap.pop();\n cancelRequest(request);\n }\n var length = activeRequests.length;\n for (var i = 0; i < length; ++i) {\n cancelRequest(activeRequests[i]);\n }\n activeRequests.length = 0;\n numberOfActiveRequestsByServer = {};\n\n // Clear stats\n statistics.numberOfAttemptedRequests = 0;\n statistics.numberOfActiveRequests = 0;\n statistics.numberOfCancelledRequests = 0;\n statistics.numberOfCancelledActiveRequests = 0;\n statistics.numberOfFailedRequests = 0;\n statistics.numberOfActiveRequestsEver = 0;\n statistics.lastNumberOfActiveRequests = 0;\n};\n\n/**\n * For testing only.\n *\n * @private\n */\nRequestScheduler.numberOfActiveRequestsByServer = function (serverKey) {\n return numberOfActiveRequestsByServer[serverKey];\n};\n\n/**\n * For testing only.\n *\n * @private\n */\nRequestScheduler.requestHeap = requestHeap;\nexport default RequestScheduler;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ReactCSS = exports.loop = exports.handleActive = exports.handleHover = exports.hover = undefined;\n\nvar _flattenNames = require('./flattenNames');\n\nvar _flattenNames2 = _interopRequireDefault(_flattenNames);\n\nvar _mergeClasses = require('./mergeClasses');\n\nvar _mergeClasses2 = _interopRequireDefault(_mergeClasses);\n\nvar _autoprefix = require('./autoprefix');\n\nvar _autoprefix2 = _interopRequireDefault(_autoprefix);\n\nvar _hover2 = require('./components/hover');\n\nvar _hover3 = _interopRequireDefault(_hover2);\n\nvar _active = require('./components/active');\n\nvar _active2 = _interopRequireDefault(_active);\n\nvar _loop2 = require('./loop');\n\nvar _loop3 = _interopRequireDefault(_loop2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.hover = _hover3.default;\nexports.handleHover = _hover3.default;\nexports.handleActive = _active2.default;\nexports.loop = _loop3.default;\nvar ReactCSS = exports.ReactCSS = function ReactCSS(classes) {\n for (var _len = arguments.length, activations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n activations[_key - 1] = arguments[_key];\n }\n\n var activeNames = (0, _flattenNames2.default)(activations);\n var merged = (0, _mergeClasses2.default)(classes, activeNames);\n return (0, _autoprefix2.default)(merged);\n};\n\nexports.default = ReactCSS;","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { CSSTransition, TransitionGroup } from \"react-transition-group\";\nimport { findDOMNode } from \"react-dom\";\nimport { AbstractPureComponent2, Classes, Keys } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke } from \"../../common/utils\";\nimport { Portal } from \"../portal/portal\";\nvar Overlay = /** @class */ (function (_super) {\n __extends(Overlay, _super);\n function Overlay(props, context) {\n var _this = _super.call(this, props, context) || this;\n _this.refHandlers = {\n container: function (ref) { return (_this.containerElement = findDOMNode(ref)); },\n };\n _this.maybeRenderChild = function (child) {\n if (child == null) {\n return null;\n }\n // add a special class to each child element that will automatically set the appropriate\n // CSS position mode under the hood. also, make the container focusable so we can\n // trap focus inside it (via `enforceFocus`).\n var decoratedChild = typeof child === \"object\" ? (React.cloneElement(child, {\n className: classNames(child.props.className, Classes.OVERLAY_CONTENT),\n tabIndex: 0,\n })) : (React.createElement(\"span\", { className: Classes.OVERLAY_CONTENT }, child));\n var _a = _this.props, onOpening = _a.onOpening, onOpened = _a.onOpened, onClosing = _a.onClosing, onClosed = _a.onClosed, transitionDuration = _a.transitionDuration, transitionName = _a.transitionName;\n // a breaking change in react-transition-group types requires us to be explicit about the type overload here,\n // using a technique similar to Select.ofType() in @blueprintjs/select\n var CSSTransitionImplicit = CSSTransition;\n return (React.createElement(CSSTransitionImplicit, { classNames: transitionName, onEntering: onOpening, onEntered: onOpened, onExiting: onClosing, onExited: onClosed, timeout: transitionDuration }, decoratedChild));\n };\n _this.handleBackdropMouseDown = function (e) {\n var _a = _this.props, backdropProps = _a.backdropProps, canOutsideClickClose = _a.canOutsideClickClose, enforceFocus = _a.enforceFocus, onClose = _a.onClose;\n if (canOutsideClickClose) {\n safeInvoke(onClose, e);\n }\n if (enforceFocus) {\n // make sure document.activeElement is updated before bringing the focus back\n _this.bringFocusInsideOverlay();\n }\n safeInvoke(backdropProps.onMouseDown, e);\n };\n _this.handleDocumentClick = function (e) {\n var _a = _this.props, canOutsideClickClose = _a.canOutsideClickClose, isOpen = _a.isOpen, onClose = _a.onClose;\n // get the actually target even if we are in an open mode Shadow DOM\n var eventTarget = (e.composed ? e.composedPath()[0] : e.target);\n var stackIndex = Overlay_1.openStack.indexOf(_this);\n var isClickInThisOverlayOrDescendant = Overlay_1.openStack\n .slice(stackIndex)\n .some(function (_a) {\n var elem = _a.containerElement;\n // `elem` is the container of backdrop & content, so clicking on that container\n // should not count as being \"inside\" the overlay.\n return elem && elem.contains(eventTarget) && !elem.isSameNode(eventTarget);\n });\n if (isOpen && canOutsideClickClose && !isClickInThisOverlayOrDescendant) {\n // casting to any because this is a native event\n safeInvoke(onClose, e);\n }\n };\n _this.handleDocumentFocus = function (e) {\n // get the actually target even if we are in an open mode Shadow DOM\n var eventTarget = e.composed ? e.composedPath()[0] : e.target;\n if (_this.props.enforceFocus &&\n _this.containerElement != null &&\n eventTarget instanceof Node &&\n !_this.containerElement.contains(eventTarget)) {\n // prevent default focus behavior (sometimes auto-scrolls the page)\n e.preventDefault();\n e.stopImmediatePropagation();\n _this.bringFocusInsideOverlay();\n }\n };\n _this.handleKeyDown = function (e) {\n var _a = _this.props, canEscapeKeyClose = _a.canEscapeKeyClose, onClose = _a.onClose;\n if (e.which === Keys.ESCAPE && canEscapeKeyClose) {\n safeInvoke(onClose, e);\n // prevent browser-specific escape key behavior (Safari exits fullscreen)\n e.preventDefault();\n }\n };\n _this.state = { hasEverOpened: props.isOpen };\n return _this;\n }\n Overlay_1 = Overlay;\n Overlay.getDerivedStateFromProps = function (_a) {\n var hasEverOpened = _a.isOpen;\n if (hasEverOpened) {\n return { hasEverOpened: hasEverOpened };\n }\n return null;\n };\n Overlay.prototype.render = function () {\n var _a;\n // oh snap! no reason to render anything at all if we're being truly lazy\n if (this.props.lazy && !this.state.hasEverOpened) {\n return null;\n }\n var _b = this.props, children = _b.children, className = _b.className, usePortal = _b.usePortal, isOpen = _b.isOpen;\n // TransitionGroup types require single array of children; does not support nested arrays.\n // So we must collapse backdrop and children into one array, and every item must be wrapped in a\n // Transition element (no ReactText allowed).\n var childrenWithTransitions = isOpen ? React.Children.map(children, this.maybeRenderChild) : [];\n childrenWithTransitions.unshift(this.maybeRenderBackdrop());\n var containerClasses = classNames(Classes.OVERLAY, (_a = {},\n _a[Classes.OVERLAY_OPEN] = isOpen,\n _a[Classes.OVERLAY_INLINE] = !usePortal,\n _a), className);\n var transitionGroup = (React.createElement(TransitionGroup, { appear: true, className: containerClasses, component: \"div\", onKeyDown: this.handleKeyDown, ref: this.refHandlers.container }, childrenWithTransitions));\n if (usePortal) {\n return (React.createElement(Portal, { className: this.props.portalClassName, container: this.props.portalContainer }, transitionGroup));\n }\n else {\n return transitionGroup;\n }\n };\n Overlay.prototype.componentDidMount = function () {\n if (this.props.isOpen) {\n this.overlayWillOpen();\n }\n };\n Overlay.prototype.componentDidUpdate = function (prevProps) {\n if (prevProps.isOpen && !this.props.isOpen) {\n this.overlayWillClose();\n }\n else if (!prevProps.isOpen && this.props.isOpen) {\n this.overlayWillOpen();\n }\n };\n Overlay.prototype.componentWillUnmount = function () {\n this.overlayWillClose();\n };\n /**\n * @public for testing\n * @internal\n */\n Overlay.prototype.bringFocusInsideOverlay = function () {\n var _this = this;\n // always delay focus manipulation to just before repaint to prevent scroll jumping\n return requestAnimationFrame(function () {\n // container ref may be undefined between component mounting and Portal rendering\n // activeElement may be undefined in some rare cases in IE\n if (_this.containerElement == null || document.activeElement == null || !_this.props.isOpen) {\n return;\n }\n var isFocusOutsideModal = !_this.containerElement.contains(document.activeElement);\n if (isFocusOutsideModal) {\n // element marked autofocus has higher priority than the other clowns\n var autofocusElement = _this.containerElement.querySelector(\"[autofocus]\");\n var wrapperElement = _this.containerElement.querySelector(\"[tabindex]\");\n if (autofocusElement != null) {\n autofocusElement.focus();\n }\n else if (wrapperElement != null) {\n wrapperElement.focus();\n }\n }\n });\n };\n Overlay.prototype.maybeRenderBackdrop = function () {\n var _a = this.props, backdropClassName = _a.backdropClassName, backdropProps = _a.backdropProps, hasBackdrop = _a.hasBackdrop, isOpen = _a.isOpen, transitionDuration = _a.transitionDuration, transitionName = _a.transitionName;\n if (hasBackdrop && isOpen) {\n return (React.createElement(CSSTransition, { classNames: transitionName, key: \"__backdrop\", timeout: transitionDuration },\n React.createElement(\"div\", __assign({}, backdropProps, { className: classNames(Classes.OVERLAY_BACKDROP, backdropClassName, backdropProps.className), onMouseDown: this.handleBackdropMouseDown, tabIndex: this.props.canOutsideClickClose ? 0 : null }))));\n }\n else {\n return null;\n }\n };\n Overlay.prototype.overlayWillClose = function () {\n document.removeEventListener(\"focus\", this.handleDocumentFocus, /* useCapture */ true);\n document.removeEventListener(\"mousedown\", this.handleDocumentClick);\n var openStack = Overlay_1.openStack;\n var stackIndex = openStack.indexOf(this);\n if (stackIndex !== -1) {\n openStack.splice(stackIndex, 1);\n if (openStack.length > 0) {\n var lastOpenedOverlay = Overlay_1.getLastOpened();\n if (lastOpenedOverlay.props.enforceFocus) {\n document.addEventListener(\"focus\", lastOpenedOverlay.handleDocumentFocus, /* useCapture */ true);\n }\n }\n if (openStack.filter(function (o) { return o.props.usePortal && o.props.hasBackdrop; }).length === 0) {\n document.body.classList.remove(Classes.OVERLAY_OPEN);\n }\n }\n };\n Overlay.prototype.overlayWillOpen = function () {\n var openStack = Overlay_1.openStack;\n if (openStack.length > 0) {\n document.removeEventListener(\"focus\", Overlay_1.getLastOpened().handleDocumentFocus, /* useCapture */ true);\n }\n openStack.push(this);\n if (this.props.autoFocus) {\n this.bringFocusInsideOverlay();\n }\n if (this.props.enforceFocus) {\n document.addEventListener(\"focus\", this.handleDocumentFocus, /* useCapture */ true);\n }\n if (this.props.canOutsideClickClose && !this.props.hasBackdrop) {\n document.addEventListener(\"mousedown\", this.handleDocumentClick);\n }\n if (this.props.hasBackdrop && this.props.usePortal) {\n // add a class to the body to prevent scrolling of content below the overlay\n document.body.classList.add(Classes.OVERLAY_OPEN);\n }\n };\n var Overlay_1;\n Overlay.displayName = DISPLAYNAME_PREFIX + \".Overlay\";\n Overlay.defaultProps = {\n autoFocus: true,\n backdropProps: {},\n canEscapeKeyClose: true,\n canOutsideClickClose: true,\n enforceFocus: true,\n hasBackdrop: true,\n isOpen: false,\n lazy: true,\n transitionDuration: 300,\n transitionName: Classes.OVERLAY,\n usePortal: true,\n };\n Overlay.openStack = [];\n Overlay.getLastOpened = function () { return Overlay_1.openStack[Overlay_1.openStack.length - 1]; };\n Overlay = Overlay_1 = __decorate([\n polyfill\n ], Overlay);\n return Overlay;\n}(AbstractPureComponent2));\nexport { Overlay };\n//# sourceMappingURL=overlay.js.map","import superPropBase from \"./superPropBase\";\nexport default function _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Boundary of a one-dimensional interval. */\nexport var Boundary = {\n START: \"start\",\n // tslint:disable-next-line:object-literal-sort-keys\n END: \"end\",\n};\n//# sourceMappingURL=boundary.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n */\nexport var ADD = \"add\";\nexport var ADD_COLUMN_LEFT = \"add-column-left\";\nexport var ADD_COLUMN_RIGHT = \"add-column-right\";\nexport var ADD_ROW_BOTTOM = \"add-row-bottom\";\nexport var ADD_ROW_TOP = \"add-row-top\";\nexport var ADD_TO_ARTIFACT = \"add-to-artifact\";\nexport var ADD_TO_FOLDER = \"add-to-folder\";\nexport var AIRPLANE = \"airplane\";\nexport var ALIGN_CENTER = \"align-center\";\nexport var ALIGN_JUSTIFY = \"align-justify\";\nexport var ALIGN_LEFT = \"align-left\";\nexport var ALIGN_RIGHT = \"align-right\";\nexport var ALIGNMENT_BOTTOM = \"alignment-bottom\";\nexport var ALIGNMENT_HORIZONTAL_CENTER = \"alignment-horizontal-center\";\nexport var ALIGNMENT_LEFT = \"alignment-left\";\nexport var ALIGNMENT_RIGHT = \"alignment-right\";\nexport var ALIGNMENT_TOP = \"alignment-top\";\nexport var ALIGNMENT_VERTICAL_CENTER = \"alignment-vertical-center\";\nexport var ANNOTATION = \"annotation\";\nexport var APP_HEADER = \"app-header\";\nexport var APPLICATION = \"application\";\nexport var APPLICATIONS = \"applications\";\nexport var ARCHIVE = \"archive\";\nexport var ARROW_BOTTOM_LEFT = \"arrow-bottom-left\";\nexport var ARROW_BOTTOM_RIGHT = \"arrow-bottom-right\";\nexport var ARROW_DOWN = \"arrow-down\";\nexport var ARROW_LEFT = \"arrow-left\";\nexport var ARROW_RIGHT = \"arrow-right\";\nexport var ARROW_TOP_LEFT = \"arrow-top-left\";\nexport var ARROW_TOP_RIGHT = \"arrow-top-right\";\nexport var ARROW_UP = \"arrow-up\";\nexport var ARROWS_HORIZONTAL = \"arrows-horizontal\";\nexport var ARROWS_VERTICAL = \"arrows-vertical\";\nexport var ASTERISK = \"asterisk\";\nexport var AUTOMATIC_UPDATES = \"automatic-updates\";\nexport var BACKLINK = \"backlink\";\nexport var BADGE = \"badge\";\nexport var BAN_CIRCLE = \"ban-circle\";\nexport var BANK_ACCOUNT = \"bank-account\";\nexport var BARCODE = \"barcode\";\nexport var BLANK = \"blank\";\nexport var BLOCKED_PERSON = \"blocked-person\";\nexport var BOLD = \"bold\";\nexport var BOOK = \"book\";\nexport var BOOKMARK = \"bookmark\";\nexport var BOX = \"box\";\nexport var BRIEFCASE = \"briefcase\";\nexport var BRING_DATA = \"bring-data\";\nexport var BUILD = \"build\";\nexport var CALCULATOR = \"calculator\";\nexport var CALENDAR = \"calendar\";\nexport var CAMERA = \"camera\";\nexport var CARET_DOWN = \"caret-down\";\nexport var CARET_LEFT = \"caret-left\";\nexport var CARET_RIGHT = \"caret-right\";\nexport var CARET_UP = \"caret-up\";\nexport var CELL_TOWER = \"cell-tower\";\nexport var CHANGES = \"changes\";\nexport var CHART = \"chart\";\nexport var CHAT = \"chat\";\nexport var CHEVRON_BACKWARD = \"chevron-backward\";\nexport var CHEVRON_DOWN = \"chevron-down\";\nexport var CHEVRON_FORWARD = \"chevron-forward\";\nexport var CHEVRON_LEFT = \"chevron-left\";\nexport var CHEVRON_RIGHT = \"chevron-right\";\nexport var CHEVRON_UP = \"chevron-up\";\nexport var CIRCLE = \"circle\";\nexport var CIRCLE_ARROW_DOWN = \"circle-arrow-down\";\nexport var CIRCLE_ARROW_LEFT = \"circle-arrow-left\";\nexport var CIRCLE_ARROW_RIGHT = \"circle-arrow-right\";\nexport var CIRCLE_ARROW_UP = \"circle-arrow-up\";\nexport var CITATION = \"citation\";\nexport var CLEAN = \"clean\";\nexport var CLIPBOARD = \"clipboard\";\nexport var CLOUD = \"cloud\";\nexport var CLOUD_DOWNLOAD = \"cloud-download\";\nexport var CLOUD_UPLOAD = \"cloud-upload\";\nexport var CODE = \"code\";\nexport var CODE_BLOCK = \"code-block\";\nexport var COG = \"cog\";\nexport var COLLAPSE_ALL = \"collapse-all\";\nexport var COLUMN_LAYOUT = \"column-layout\";\nexport var COMMENT = \"comment\";\nexport var COMPARISON = \"comparison\";\nexport var COMPASS = \"compass\";\nexport var COMPRESSED = \"compressed\";\nexport var CONFIRM = \"confirm\";\nexport var CONSOLE = \"console\";\nexport var CONTRAST = \"contrast\";\nexport var CONTROL = \"control\";\nexport var CREDIT_CARD = \"credit-card\";\nexport var CROSS = \"cross\";\nexport var CROWN = \"crown\";\nexport var CUBE = \"cube\";\nexport var CUBE_ADD = \"cube-add\";\nexport var CUBE_REMOVE = \"cube-remove\";\nexport var CURVED_RANGE_CHART = \"curved-range-chart\";\nexport var CUT = \"cut\";\nexport var CYCLE = \"cycle\";\nexport var DASHBOARD = \"dashboard\";\nexport var DATA_LINEAGE = \"data-lineage\";\nexport var DATABASE = \"database\";\nexport var DELETE = \"delete\";\nexport var DELTA = \"delta\";\nexport var DERIVE_COLUMN = \"derive-column\";\nexport var DESKTOP = \"desktop\";\nexport var DIAGNOSIS = \"diagnosis\";\nexport var DIAGRAM_TREE = \"diagram-tree\";\nexport var DIRECTION_LEFT = \"direction-left\";\nexport var DIRECTION_RIGHT = \"direction-right\";\nexport var DISABLE = \"disable\";\nexport var DOCUMENT = \"document\";\nexport var DOCUMENT_OPEN = \"document-open\";\nexport var DOCUMENT_SHARE = \"document-share\";\nexport var DOLLAR = \"dollar\";\nexport var DOT = \"dot\";\nexport var DOUBLE_CARET_HORIZONTAL = \"double-caret-horizontal\";\nexport var DOUBLE_CARET_VERTICAL = \"double-caret-vertical\";\nexport var DOUBLE_CHEVRON_DOWN = \"double-chevron-down\";\nexport var DOUBLE_CHEVRON_LEFT = \"double-chevron-left\";\nexport var DOUBLE_CHEVRON_RIGHT = \"double-chevron-right\";\nexport var DOUBLE_CHEVRON_UP = \"double-chevron-up\";\nexport var DOUGHNUT_CHART = \"doughnut-chart\";\nexport var DOWNLOAD = \"download\";\nexport var DRAG_HANDLE_HORIZONTAL = \"drag-handle-horizontal\";\nexport var DRAG_HANDLE_VERTICAL = \"drag-handle-vertical\";\nexport var DRAW = \"draw\";\nexport var DRAWER_LEFT = \"drawer-left\";\nexport var DRAWER_LEFT_FILLED = \"drawer-left-filled\";\nexport var DRAWER_RIGHT = \"drawer-right\";\nexport var DRAWER_RIGHT_FILLED = \"drawer-right-filled\";\nexport var DRIVE_TIME = \"drive-time\";\nexport var DUPLICATE = \"duplicate\";\nexport var EDIT = \"edit\";\nexport var EJECT = \"eject\";\nexport var ENDORSED = \"endorsed\";\nexport var ENVELOPE = \"envelope\";\nexport var EQUALS = \"equals\";\nexport var ERASER = \"eraser\";\nexport var ERROR = \"error\";\nexport var EURO = \"euro\";\nexport var EXCHANGE = \"exchange\";\nexport var EXCLUDE_ROW = \"exclude-row\";\nexport var EXPAND_ALL = \"expand-all\";\nexport var EXPORT = \"export\";\nexport var EYE_OFF = \"eye-off\";\nexport var EYE_ON = \"eye-on\";\nexport var EYE_OPEN = \"eye-open\";\nexport var FAST_BACKWARD = \"fast-backward\";\nexport var FAST_FORWARD = \"fast-forward\";\nexport var FEED = \"feed\";\nexport var FEED_SUBSCRIBED = \"feed-subscribed\";\nexport var FILM = \"film\";\nexport var FILTER = \"filter\";\nexport var FILTER_KEEP = \"filter-keep\";\nexport var FILTER_LIST = \"filter-list\";\nexport var FILTER_OPEN = \"filter-open\";\nexport var FILTER_REMOVE = \"filter-remove\";\nexport var FLAG = \"flag\";\nexport var FLAME = \"flame\";\nexport var FLASH = \"flash\";\nexport var FLOPPY_DISK = \"floppy-disk\";\nexport var FLOW_BRANCH = \"flow-branch\";\nexport var FLOW_END = \"flow-end\";\nexport var FLOW_LINEAR = \"flow-linear\";\nexport var FLOW_REVIEW = \"flow-review\";\nexport var FLOW_REVIEW_BRANCH = \"flow-review-branch\";\nexport var FLOWS = \"flows\";\nexport var FOLDER_CLOSE = \"folder-close\";\nexport var FOLDER_NEW = \"folder-new\";\nexport var FOLDER_OPEN = \"folder-open\";\nexport var FOLDER_SHARED = \"folder-shared\";\nexport var FOLDER_SHARED_OPEN = \"folder-shared-open\";\nexport var FOLLOWER = \"follower\";\nexport var FOLLOWING = \"following\";\nexport var FONT = \"font\";\nexport var FORK = \"fork\";\nexport var FORM = \"form\";\nexport var FULL_CIRCLE = \"full-circle\";\nexport var FULL_STACKED_CHART = \"full-stacked-chart\";\nexport var FULLSCREEN = \"fullscreen\";\nexport var FUNCTION = \"function\";\nexport var GANTT_CHART = \"gantt-chart\";\nexport var GEOFENCE = \"geofence\";\nexport var GEOLOCATION = \"geolocation\";\nexport var GEOSEARCH = \"geosearch\";\nexport var GIT_BRANCH = \"git-branch\";\nexport var GIT_COMMIT = \"git-commit\";\nexport var GIT_MERGE = \"git-merge\";\nexport var GIT_NEW_BRANCH = \"git-new-branch\";\nexport var GIT_PULL = \"git-pull\";\nexport var GIT_PUSH = \"git-push\";\nexport var GIT_REPO = \"git-repo\";\nexport var GLASS = \"glass\";\nexport var GLOBE = \"globe\";\nexport var GLOBE_NETWORK = \"globe-network\";\nexport var GRAPH = \"graph\";\nexport var GRAPH_REMOVE = \"graph-remove\";\nexport var GREATER_THAN = \"greater-than\";\nexport var GREATER_THAN_OR_EQUAL_TO = \"greater-than-or-equal-to\";\nexport var GRID = \"grid\";\nexport var GRID_VIEW = \"grid-view\";\nexport var GROUP_OBJECTS = \"group-objects\";\nexport var GROUPED_BAR_CHART = \"grouped-bar-chart\";\nexport var HAND = \"hand\";\nexport var HAND_DOWN = \"hand-down\";\nexport var HAND_LEFT = \"hand-left\";\nexport var HAND_RIGHT = \"hand-right\";\nexport var HAND_UP = \"hand-up\";\nexport var HAT = \"hat\";\nexport var HEADER = \"header\";\nexport var HEADER_ONE = \"header-one\";\nexport var HEADER_TWO = \"header-two\";\nexport var HEADSET = \"headset\";\nexport var HEART = \"heart\";\nexport var HEART_BROKEN = \"heart-broken\";\nexport var HEAT_GRID = \"heat-grid\";\nexport var HEATMAP = \"heatmap\";\nexport var HELP = \"help\";\nexport var HELPER_MANAGEMENT = \"helper-management\";\nexport var HIGHLIGHT = \"highlight\";\nexport var HISTORY = \"history\";\nexport var HOME = \"home\";\nexport var HORIZONTAL_BAR_CHART = \"horizontal-bar-chart\";\nexport var HORIZONTAL_BAR_CHART_ASC = \"horizontal-bar-chart-asc\";\nexport var HORIZONTAL_BAR_CHART_DESC = \"horizontal-bar-chart-desc\";\nexport var HORIZONTAL_DISTRIBUTION = \"horizontal-distribution\";\nexport var ID_NUMBER = \"id-number\";\nexport var IMAGE_ROTATE_LEFT = \"image-rotate-left\";\nexport var IMAGE_ROTATE_RIGHT = \"image-rotate-right\";\nexport var IMPORT = \"import\";\nexport var INBOX = \"inbox\";\nexport var INBOX_FILTERED = \"inbox-filtered\";\nexport var INBOX_GEO = \"inbox-geo\";\nexport var INBOX_SEARCH = \"inbox-search\";\nexport var INBOX_UPDATE = \"inbox-update\";\nexport var INFO_SIGN = \"info-sign\";\nexport var INHERITANCE = \"inheritance\";\nexport var INHERITED_GROUP = \"inherited-group\";\nexport var INNER_JOIN = \"inner-join\";\nexport var INSERT = \"insert\";\nexport var INTERSECTION = \"intersection\";\nexport var IP_ADDRESS = \"ip-address\";\nexport var ISSUE = \"issue\";\nexport var ISSUE_CLOSED = \"issue-closed\";\nexport var ISSUE_NEW = \"issue-new\";\nexport var ITALIC = \"italic\";\nexport var JOIN_TABLE = \"join-table\";\nexport var KEY = \"key\";\nexport var KEY_BACKSPACE = \"key-backspace\";\nexport var KEY_COMMAND = \"key-command\";\nexport var KEY_CONTROL = \"key-control\";\nexport var KEY_DELETE = \"key-delete\";\nexport var KEY_ENTER = \"key-enter\";\nexport var KEY_ESCAPE = \"key-escape\";\nexport var KEY_OPTION = \"key-option\";\nexport var KEY_SHIFT = \"key-shift\";\nexport var KEY_TAB = \"key-tab\";\nexport var KNOWN_VEHICLE = \"known-vehicle\";\nexport var LAB_TEST = \"lab-test\";\nexport var LABEL = \"label\";\nexport var LAYER = \"layer\";\nexport var LAYERS = \"layers\";\nexport var LAYOUT = \"layout\";\nexport var LAYOUT_AUTO = \"layout-auto\";\nexport var LAYOUT_BALLOON = \"layout-balloon\";\nexport var LAYOUT_CIRCLE = \"layout-circle\";\nexport var LAYOUT_GRID = \"layout-grid\";\nexport var LAYOUT_GROUP_BY = \"layout-group-by\";\nexport var LAYOUT_HIERARCHY = \"layout-hierarchy\";\nexport var LAYOUT_LINEAR = \"layout-linear\";\nexport var LAYOUT_SKEW_GRID = \"layout-skew-grid\";\nexport var LAYOUT_SORTED_CLUSTERS = \"layout-sorted-clusters\";\nexport var LEARNING = \"learning\";\nexport var LEFT_JOIN = \"left-join\";\nexport var LESS_THAN = \"less-than\";\nexport var LESS_THAN_OR_EQUAL_TO = \"less-than-or-equal-to\";\nexport var LIFESAVER = \"lifesaver\";\nexport var LIGHTBULB = \"lightbulb\";\nexport var LINK = \"link\";\nexport var LIST = \"list\";\nexport var LIST_COLUMNS = \"list-columns\";\nexport var LIST_DETAIL_VIEW = \"list-detail-view\";\nexport var LOCATE = \"locate\";\nexport var LOCK = \"lock\";\nexport var LOG_IN = \"log-in\";\nexport var LOG_OUT = \"log-out\";\nexport var MANUAL = \"manual\";\nexport var MANUALLY_ENTERED_DATA = \"manually-entered-data\";\nexport var MAP = \"map\";\nexport var MAP_CREATE = \"map-create\";\nexport var MAP_MARKER = \"map-marker\";\nexport var MAXIMIZE = \"maximize\";\nexport var MEDIA = \"media\";\nexport var MENU = \"menu\";\nexport var MENU_CLOSED = \"menu-closed\";\nexport var MENU_OPEN = \"menu-open\";\nexport var MERGE_COLUMNS = \"merge-columns\";\nexport var MERGE_LINKS = \"merge-links\";\nexport var MINIMIZE = \"minimize\";\nexport var MINUS = \"minus\";\nexport var MOBILE_PHONE = \"mobile-phone\";\nexport var MOBILE_VIDEO = \"mobile-video\";\nexport var MODAL = \"modal\";\nexport var MODAL_FILLED = \"modal-filled\";\nexport var MOON = \"moon\";\nexport var MORE = \"more\";\nexport var MOUNTAIN = \"mountain\";\nexport var MOVE = \"move\";\nexport var MUGSHOT = \"mugshot\";\nexport var MULTI_SELECT = \"multi-select\";\nexport var MUSIC = \"music\";\nexport var NEW_DRAWING = \"new-drawing\";\nexport var NEW_GRID_ITEM = \"new-grid-item\";\nexport var NEW_LAYER = \"new-layer\";\nexport var NEW_LAYERS = \"new-layers\";\nexport var NEW_LINK = \"new-link\";\nexport var NEW_OBJECT = \"new-object\";\nexport var NEW_PERSON = \"new-person\";\nexport var NEW_PRESCRIPTION = \"new-prescription\";\nexport var NEW_TEXT_BOX = \"new-text-box\";\nexport var NINJA = \"ninja\";\nexport var NOT_EQUAL_TO = \"not-equal-to\";\nexport var NOTIFICATIONS = \"notifications\";\nexport var NOTIFICATIONS_UPDATED = \"notifications-updated\";\nexport var NUMBERED_LIST = \"numbered-list\";\nexport var NUMERICAL = \"numerical\";\nexport var OFFICE = \"office\";\nexport var OFFLINE = \"offline\";\nexport var OIL_FIELD = \"oil-field\";\nexport var ONE_COLUMN = \"one-column\";\nexport var OUTDATED = \"outdated\";\nexport var PAGE_LAYOUT = \"page-layout\";\nexport var PANEL_STATS = \"panel-stats\";\nexport var PANEL_TABLE = \"panel-table\";\nexport var PAPERCLIP = \"paperclip\";\nexport var PARAGRAPH = \"paragraph\";\nexport var PATH = \"path\";\nexport var PATH_SEARCH = \"path-search\";\nexport var PAUSE = \"pause\";\nexport var PEOPLE = \"people\";\nexport var PERCENTAGE = \"percentage\";\nexport var PERSON = \"person\";\nexport var PHONE = \"phone\";\nexport var PIE_CHART = \"pie-chart\";\nexport var PIN = \"pin\";\nexport var PIVOT = \"pivot\";\nexport var PIVOT_TABLE = \"pivot-table\";\nexport var PLAY = \"play\";\nexport var PLUS = \"plus\";\nexport var POLYGON_FILTER = \"polygon-filter\";\nexport var POWER = \"power\";\nexport var PREDICTIVE_ANALYSIS = \"predictive-analysis\";\nexport var PRESCRIPTION = \"prescription\";\nexport var PRESENTATION = \"presentation\";\nexport var PRINT = \"print\";\nexport var PROJECTS = \"projects\";\nexport var PROPERTIES = \"properties\";\nexport var PROPERTY = \"property\";\nexport var PUBLISH_FUNCTION = \"publish-function\";\nexport var PULSE = \"pulse\";\nexport var RANDOM = \"random\";\nexport var RECORD = \"record\";\nexport var REDO = \"redo\";\nexport var REFRESH = \"refresh\";\nexport var REGRESSION_CHART = \"regression-chart\";\nexport var REMOVE = \"remove\";\nexport var REMOVE_COLUMN = \"remove-column\";\nexport var REMOVE_COLUMN_LEFT = \"remove-column-left\";\nexport var REMOVE_COLUMN_RIGHT = \"remove-column-right\";\nexport var REMOVE_ROW_BOTTOM = \"remove-row-bottom\";\nexport var REMOVE_ROW_TOP = \"remove-row-top\";\nexport var REPEAT = \"repeat\";\nexport var RESET = \"reset\";\nexport var RESOLVE = \"resolve\";\nexport var RIG = \"rig\";\nexport var RIGHT_JOIN = \"right-join\";\nexport var RING = \"ring\";\nexport var ROTATE_DOCUMENT = \"rotate-document\";\nexport var ROTATE_PAGE = \"rotate-page\";\nexport var ROUTE = \"route\";\nexport var SATELLITE = \"satellite\";\nexport var SAVED = \"saved\";\nexport var SCATTER_PLOT = \"scatter-plot\";\nexport var SEARCH = \"search\";\nexport var SEARCH_AROUND = \"search-around\";\nexport var SEARCH_TEMPLATE = \"search-template\";\nexport var SEARCH_TEXT = \"search-text\";\nexport var SEGMENTED_CONTROL = \"segmented-control\";\nexport var SELECT = \"select\";\nexport var SELECTION = \"selection\";\nexport var SEND_MESSAGE = \"send-message\";\nexport var SEND_TO = \"send-to\";\nexport var SEND_TO_GRAPH = \"send-to-graph\";\nexport var SEND_TO_MAP = \"send-to-map\";\nexport var SERIES_ADD = \"series-add\";\nexport var SERIES_CONFIGURATION = \"series-configuration\";\nexport var SERIES_DERIVED = \"series-derived\";\nexport var SERIES_FILTERED = \"series-filtered\";\nexport var SERIES_SEARCH = \"series-search\";\nexport var SETTINGS = \"settings\";\nexport var SHARE = \"share\";\nexport var SHIELD = \"shield\";\nexport var SHOP = \"shop\";\nexport var SHOPPING_CART = \"shopping-cart\";\nexport var SIGNAL_SEARCH = \"signal-search\";\nexport var SIM_CARD = \"sim-card\";\nexport var SLASH = \"slash\";\nexport var SMALL_CROSS = \"small-cross\";\nexport var SMALL_MINUS = \"small-minus\";\nexport var SMALL_PLUS = \"small-plus\";\nexport var SMALL_TICK = \"small-tick\";\nexport var SNOWFLAKE = \"snowflake\";\nexport var SOCIAL_MEDIA = \"social-media\";\nexport var SORT = \"sort\";\nexport var SORT_ALPHABETICAL = \"sort-alphabetical\";\nexport var SORT_ALPHABETICAL_DESC = \"sort-alphabetical-desc\";\nexport var SORT_ASC = \"sort-asc\";\nexport var SORT_DESC = \"sort-desc\";\nexport var SORT_NUMERICAL = \"sort-numerical\";\nexport var SORT_NUMERICAL_DESC = \"sort-numerical-desc\";\nexport var SPLIT_COLUMNS = \"split-columns\";\nexport var SQUARE = \"square\";\nexport var STACKED_CHART = \"stacked-chart\";\nexport var STAR = \"star\";\nexport var STAR_EMPTY = \"star-empty\";\nexport var STEP_BACKWARD = \"step-backward\";\nexport var STEP_CHART = \"step-chart\";\nexport var STEP_FORWARD = \"step-forward\";\nexport var STOP = \"stop\";\nexport var STOPWATCH = \"stopwatch\";\nexport var STRIKETHROUGH = \"strikethrough\";\nexport var STYLE = \"style\";\nexport var SWAP_HORIZONTAL = \"swap-horizontal\";\nexport var SWAP_VERTICAL = \"swap-vertical\";\nexport var SYMBOL_CIRCLE = \"symbol-circle\";\nexport var SYMBOL_CROSS = \"symbol-cross\";\nexport var SYMBOL_DIAMOND = \"symbol-diamond\";\nexport var SYMBOL_SQUARE = \"symbol-square\";\nexport var SYMBOL_TRIANGLE_DOWN = \"symbol-triangle-down\";\nexport var SYMBOL_TRIANGLE_UP = \"symbol-triangle-up\";\nexport var TAG = \"tag\";\nexport var TAKE_ACTION = \"take-action\";\nexport var TAXI = \"taxi\";\nexport var TEXT_HIGHLIGHT = \"text-highlight\";\nexport var TH = \"th\";\nexport var TH_DERIVED = \"th-derived\";\nexport var TH_DISCONNECT = \"th-disconnect\";\nexport var TH_FILTERED = \"th-filtered\";\nexport var TH_LIST = \"th-list\";\nexport var THUMBS_DOWN = \"thumbs-down\";\nexport var THUMBS_UP = \"thumbs-up\";\nexport var TICK = \"tick\";\nexport var TICK_CIRCLE = \"tick-circle\";\nexport var TIME = \"time\";\nexport var TIMELINE_AREA_CHART = \"timeline-area-chart\";\nexport var TIMELINE_BAR_CHART = \"timeline-bar-chart\";\nexport var TIMELINE_EVENTS = \"timeline-events\";\nexport var TIMELINE_LINE_CHART = \"timeline-line-chart\";\nexport var TINT = \"tint\";\nexport var TORCH = \"torch\";\nexport var TRACTOR = \"tractor\";\nexport var TRAIN = \"train\";\nexport var TRANSLATE = \"translate\";\nexport var TRASH = \"trash\";\nexport var TREE = \"tree\";\nexport var TRENDING_DOWN = \"trending-down\";\nexport var TRENDING_UP = \"trending-up\";\nexport var TRUCK = \"truck\";\nexport var TWO_COLUMNS = \"two-columns\";\nexport var UNARCHIVE = \"unarchive\";\nexport var UNDERLINE = \"underline\";\nexport var UNDO = \"undo\";\nexport var UNGROUP_OBJECTS = \"ungroup-objects\";\nexport var UNKNOWN_VEHICLE = \"unknown-vehicle\";\nexport var UNLOCK = \"unlock\";\nexport var UNPIN = \"unpin\";\nexport var UNRESOLVE = \"unresolve\";\nexport var UPDATED = \"updated\";\nexport var UPLOAD = \"upload\";\nexport var USER = \"user\";\nexport var VARIABLE = \"variable\";\nexport var VERTICAL_BAR_CHART_ASC = \"vertical-bar-chart-asc\";\nexport var VERTICAL_BAR_CHART_DESC = \"vertical-bar-chart-desc\";\nexport var VERTICAL_DISTRIBUTION = \"vertical-distribution\";\nexport var VIDEO = \"video\";\nexport var VIRUS = \"virus\";\nexport var VOLUME_DOWN = \"volume-down\";\nexport var VOLUME_OFF = \"volume-off\";\nexport var VOLUME_UP = \"volume-up\";\nexport var WALK = \"walk\";\nexport var WARNING_SIGN = \"warning-sign\";\nexport var WATERFALL_CHART = \"waterfall-chart\";\nexport var WIDGET = \"widget\";\nexport var WIDGET_BUTTON = \"widget-button\";\nexport var WIDGET_FOOTER = \"widget-footer\";\nexport var WIDGET_HEADER = \"widget-header\";\nexport var WRENCH = \"wrench\";\nexport var ZOOM_IN = \"zoom-in\";\nexport var ZOOM_OUT = \"zoom-out\";\nexport var ZOOM_TO_FIT = \"zoom-to-fit\";\n//# sourceMappingURL=iconNames.js.map","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","'use strict'\n\nfunction markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\n}\n\nmodule.exports = markdownSpace\n","'use strict'\n\nvar splice = require('../constant/splice.js')\n\n// causes a stack overflow in V8 when trying to insert 100k items for instance.\n\nfunction chunkedSplice(list, start, remove, items) {\n var end = list.length\n var chunkStart = 0\n var parameters // Make start between zero and `end` (included).\n\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n\n remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items.\n\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n splice.apply(list, parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0)\n splice.apply(list, parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n\nmodule.exports = chunkedSplice\n","'use strict'\n\nfunction markdownLineEndingOrSpace(code) {\n return code < 0 || code === 32\n}\n\nmodule.exports = markdownLineEndingOrSpace\n","import Uri from \"../ThirdParty/Uri.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a relative Uri and a base Uri, returns the absolute Uri of the relative Uri.\n * @function\n *\n * @param {String} relative The relative Uri.\n * @param {String} [base] The base Uri.\n * @returns {String} The absolute Uri of the given relative Uri.\n *\n * @example\n * //absolute Uri will be \"https://test.com/awesome.png\";\n * var absoluteUri = Cesium.getAbsoluteUri('awesome.png', 'https://test.com');\n */\nfunction getAbsoluteUri(relative, base) {\n var documentObject;\n if (typeof document !== \"undefined\") {\n documentObject = document;\n }\n\n return getAbsoluteUri._implementation(relative, base, documentObject);\n}\n\ngetAbsoluteUri._implementation = function (relative, base, documentObject) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(relative)) {\n throw new DeveloperError(\"relative uri is required.\");\n }\n //>>includeEnd('debug');\n\n if (!defined(base)) {\n if (typeof documentObject === \"undefined\") {\n return relative;\n }\n base = defaultValue(documentObject.baseURI, documentObject.location.href);\n }\n\n var baseUri = new Uri(base);\n var relativeUri = new Uri(relative);\n return relativeUri.resolve(baseUri).toString();\n};\nexport default getAbsoluteUri;\n","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX } from \"../../common\";\nimport { KeyCombo } from \"./keyCombo\";\nvar Hotkey = /** @class */ (function (_super) {\n __extends(Hotkey, _super);\n function Hotkey() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Hotkey.prototype.render = function () {\n var _a = this.props, label = _a.label, className = _a.className, spreadableProps = __rest(_a, [\"label\", \"className\"]);\n var rootClasses = classNames(Classes.HOTKEY, className);\n return (React.createElement(\"div\", { className: rootClasses },\n React.createElement(\"div\", { className: Classes.HOTKEY_LABEL }, label),\n React.createElement(KeyCombo, __assign({}, spreadableProps))));\n };\n Hotkey.prototype.validateProps = function (props) {\n if (props.global !== true && props.group == null) {\n throw new Error(\"non-global <Hotkey>s must define a group\");\n }\n };\n Hotkey.displayName = DISPLAYNAME_PREFIX + \".Hotkey\";\n Hotkey.defaultProps = {\n allowInInput: false,\n disabled: false,\n global: false,\n preventDefault: false,\n stopPropagation: false,\n };\n Hotkey = __decorate([\n polyfill\n ], Hotkey);\n return Hotkey;\n}(AbstractPureComponent2));\nexport { Hotkey };\n//# sourceMappingURL=hotkey.js.map","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Classes } from \"../../common\";\nimport { Dialog } from \"../../components\";\nimport { Hotkey } from \"./hotkey\";\nimport { Hotkeys } from \"./hotkeys\";\n/**\n * The delay before showing or hiding the dialog. Should be long enough to\n * allow all registered hotkey listeners to execute first.\n */\nvar DELAY_IN_MS = 10;\nvar HotkeysDialog = /** @class */ (function () {\n function HotkeysDialog() {\n var _this = this;\n this.componentProps = {\n globalHotkeysGroup: \"Global hotkeys\",\n };\n this.hotkeysQueue = [];\n this.isDialogShowing = false;\n this.show = function () {\n _this.isDialogShowing = true;\n _this.render();\n };\n this.hide = function () {\n _this.isDialogShowing = false;\n _this.render();\n };\n }\n HotkeysDialog.prototype.render = function () {\n if (this.container == null) {\n this.container = this.getContainer();\n }\n ReactDOM.render(this.renderComponent(), this.container);\n };\n HotkeysDialog.prototype.unmount = function () {\n if (this.container != null) {\n ReactDOM.unmountComponentAtNode(this.container);\n this.container.remove();\n delete this.container;\n }\n };\n /**\n * Because hotkeys can be registered globally and locally and because\n * event ordering cannot be guaranteed, we use this debouncing method to\n * allow all hotkey listeners to fire and add their hotkeys to the dialog.\n *\n * 10msec after the last listener adds their hotkeys, we render the dialog\n * and clear the queue.\n */\n HotkeysDialog.prototype.enqueueHotkeysForDisplay = function (hotkeys) {\n this.hotkeysQueue.push(hotkeys);\n // reset timeout for debounce\n window.clearTimeout(this.showTimeoutToken);\n this.showTimeoutToken = window.setTimeout(this.show, DELAY_IN_MS);\n };\n HotkeysDialog.prototype.hideAfterDelay = function () {\n window.clearTimeout(this.hideTimeoutToken);\n this.hideTimeoutToken = window.setTimeout(this.hide, DELAY_IN_MS);\n };\n HotkeysDialog.prototype.isShowing = function () {\n return this.isDialogShowing;\n };\n HotkeysDialog.prototype.getContainer = function () {\n if (this.container == null) {\n this.container = document.createElement(\"div\");\n this.container.classList.add(Classes.PORTAL);\n document.body.appendChild(this.container);\n }\n return this.container;\n };\n HotkeysDialog.prototype.renderComponent = function () {\n return (React.createElement(Dialog, __assign({}, this.componentProps, { className: classNames(Classes.HOTKEY_DIALOG, this.componentProps.className), isOpen: this.isDialogShowing, onClose: this.hide }),\n React.createElement(\"div\", { className: Classes.DIALOG_BODY }, this.renderHotkeys())));\n };\n HotkeysDialog.prototype.renderHotkeys = function () {\n var _this = this;\n var hotkeys = this.emptyHotkeyQueue();\n var elements = hotkeys.map(function (hotkey, index) {\n var group = hotkey.global === true && hotkey.group == null ? _this.componentProps.globalHotkeysGroup : hotkey.group;\n return React.createElement(Hotkey, __assign({ key: index }, hotkey, { group: group }));\n });\n return React.createElement(Hotkeys, null, elements);\n };\n HotkeysDialog.prototype.emptyHotkeyQueue = function () {\n // flatten then empty the hotkeys queue\n var hotkeys = this.hotkeysQueue.reduce(function (arr, queued) { return arr.concat(queued); }, []);\n this.hotkeysQueue.length = 0;\n return hotkeys;\n };\n return HotkeysDialog;\n}());\n// singleton instance\nvar HOTKEYS_DIALOG = new HotkeysDialog();\nexport function isHotkeysDialogShowing() {\n return HOTKEYS_DIALOG.isShowing();\n}\nexport function setHotkeysDialogProps(props) {\n for (var key in props) {\n if (props.hasOwnProperty(key)) {\n HOTKEYS_DIALOG.componentProps[key] = props[key];\n }\n }\n}\nexport function showHotkeysDialog(hotkeys) {\n HOTKEYS_DIALOG.enqueueHotkeysForDisplay(hotkeys);\n}\nexport function hideHotkeysDialog() {\n HOTKEYS_DIALOG.hide();\n}\n/**\n * Use this function instead of `hideHotkeysDialog` if you need to ensure that all hotkey listeners\n * have time to execute with the dialog in a consistent open state. This can avoid flickering the\n * dialog between open and closed states as successive listeners fire.\n */\nexport function hideHotkeysDialogAfterDelay() {\n HOTKEYS_DIALOG.hideAfterDelay();\n}\n//# sourceMappingURL=hotkeysDialog.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// tslint:disable:object-literal-sort-keys\nexport var Elevation = {\n ZERO: 0,\n ONE: 1,\n TWO: 2,\n THREE: 3,\n FOUR: 4,\n};\n//# sourceMappingURL=elevation.js.map","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CLAMP_MIN_MAX } from \"../errors\";\n/** Returns whether `process.env.NODE_ENV` exists and equals `env`. */\nexport function isNodeEnv(env) {\n return typeof process !== \"undefined\" && process.env && process.env.NODE_ENV === env;\n}\n/**\n * Returns the difference in length between two arrays. A `null` argument is\n * considered an empty list. The return value will be positive if `a` is longer\n * than `b`, negative if the opposite is true, and zero if their lengths are\n * equal.\n */\nexport function arrayLengthCompare(a, b) {\n if (a === void 0) { a = []; }\n if (b === void 0) { b = []; }\n return a.length - b.length;\n}\n/**\n * Returns true if the two numbers are within the given tolerance of each other.\n * This is useful to correct for floating point precision issues, less useful\n * for integers.\n */\nexport function approxEqual(a, b, tolerance) {\n if (tolerance === void 0) { tolerance = 0.00001; }\n return Math.abs(a - b) <= tolerance;\n}\n/**\n * Clamps the given number between min and max values. Returns value if within\n * range, or closest bound.\n */\nexport function clamp(val, min, max) {\n if (val == null) {\n return val;\n }\n if (max < min) {\n throw new Error(CLAMP_MIN_MAX);\n }\n return Math.min(Math.max(val, min), max);\n}\n/** Returns the number of decimal places in the given number. */\nexport function countDecimalPlaces(num) {\n if (!isFinite(num)) {\n return 0;\n }\n var e = 1;\n var p = 0;\n while (Math.round(num * e) / e !== num) {\n e *= 10;\n p++;\n }\n return p;\n}\n//# sourceMappingURL=jsUtils.js.map","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction regexCheck(regex) {\n return check\n\n function check(code) {\n return regex.test(fromCharCode(code))\n }\n}\n\nmodule.exports = regexCheck\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","'use strict'\n\nvar assign = require('../constant/assign.js')\n\nfunction shallow(object) {\n return assign({}, object)\n}\n\nmodule.exports = shallow\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function isRefObject(value) {\n return value != null && typeof value.current !== \"undefined\";\n}\nexport function isRefCallback(value) {\n return typeof value === \"function\";\n}\nexport function getRef(ref) {\n if (ref && ref.current) {\n return ref.current;\n }\n return ref;\n}\n//# sourceMappingURL=refs.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { findDOMNode } from \"react-dom\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport { AbstractPureComponent2 } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke } from \"../../common/utils\";\nvar ResizeSensor = /** @class */ (function (_super) {\n __extends(ResizeSensor, _super);\n function ResizeSensor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = null;\n _this.observer = new ResizeObserver(function (entries) { return safeInvoke(_this.props.onResize, entries); });\n return _this;\n }\n ResizeSensor.prototype.render = function () {\n // pass-through render of single child\n return React.Children.only(this.props.children);\n };\n ResizeSensor.prototype.componentDidMount = function () {\n this.observeElement();\n };\n ResizeSensor.prototype.componentDidUpdate = function (prevProps) {\n this.observeElement(this.props.observeParents !== prevProps.observeParents);\n };\n ResizeSensor.prototype.componentWillUnmount = function () {\n this.observer.disconnect();\n };\n /**\n * Observe the DOM element, if defined and different from the currently\n * observed element. Pass `force` argument to skip element checks and always\n * re-observe.\n */\n ResizeSensor.prototype.observeElement = function (force) {\n if (force === void 0) { force = false; }\n var element = this.getElement();\n if (!(element instanceof Element)) {\n // stop everything if not defined\n this.observer.disconnect();\n return;\n }\n if (element === this.element && !force) {\n // quit if given same element -- nothing to update (unless forced)\n return;\n }\n else {\n // clear observer list if new element\n this.observer.disconnect();\n // remember element reference for next time\n this.element = element;\n }\n // observer callback is invoked immediately when observing new elements\n this.observer.observe(element);\n if (this.props.observeParents) {\n var parent_1 = element.parentElement;\n while (parent_1 != null) {\n this.observer.observe(parent_1);\n parent_1 = parent_1.parentElement;\n }\n }\n };\n ResizeSensor.prototype.getElement = function () {\n try {\n // using findDOMNode for two reasons:\n // 1. cloning to insert a ref is unwieldy and not performant.\n // 2. ensure that we resolve to an actual DOM node (instead of any JSX ref instance).\n return findDOMNode(this);\n }\n catch (_a) {\n // swallow error if findDOMNode is run on unmounted component.\n return null;\n }\n };\n ResizeSensor.displayName = DISPLAYNAME_PREFIX + \".ResizeSensor\";\n ResizeSensor = __decorate([\n polyfill\n ], ResizeSensor);\n return ResizeSensor;\n}(AbstractPureComponent2));\nexport { ResizeSensor };\n//# sourceMappingURL=resizeSensor.js.map","import defined from \"./defined.js\";\nimport parseResponseHeaders from \"./parseResponseHeaders.js\";\n\n/**\n * An event that is raised when a request encounters an error.\n *\n * @constructor\n * @alias RequestErrorEvent\n *\n * @param {Number} [statusCode] The HTTP error status code, such as 404.\n * @param {Object} [response] The response included along with the error.\n * @param {String|Object} [responseHeaders] The response headers, represented either as an object literal or as a\n * string in the format returned by XMLHttpRequest's getAllResponseHeaders() function.\n */\nfunction RequestErrorEvent(statusCode, response, responseHeaders) {\n /**\n * The HTTP error status code, such as 404. If the error does not have a particular\n * HTTP code, this property will be undefined.\n *\n * @type {Number}\n */\n this.statusCode = statusCode;\n\n /**\n * The response included along with the error. If the error does not include a response,\n * this property will be undefined.\n *\n * @type {Object}\n */\n this.response = response;\n\n /**\n * The headers included in the response, represented as an object literal of key/value pairs.\n * If the error does not include any headers, this property will be undefined.\n *\n * @type {Object}\n */\n this.responseHeaders = responseHeaders;\n\n if (typeof this.responseHeaders === \"string\") {\n this.responseHeaders = parseResponseHeaders(this.responseHeaders);\n }\n}\n\n/**\n * Creates a string representing this RequestErrorEvent.\n * @memberof RequestErrorEvent\n *\n * @returns {String} A string representing the provided RequestErrorEvent.\n */\nRequestErrorEvent.prototype.toString = function () {\n var str = \"Request has failed.\";\n if (defined(this.statusCode)) {\n str += \" Status Code: \" + this.statusCode;\n }\n return str;\n};\nexport default RequestErrorEvent;\n","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var HandleType = {\n /** A full handle appears as a small square. */\n FULL: \"full\",\n /** A start handle appears as the left or top half of a square. */\n START: \"start\",\n /** An end handle appears as the right or bottom half of a square. */\n END: \"end\",\n};\nexport var HandleInteractionKind = {\n /** Locked handles prevent other handles from being dragged past then. */\n LOCK: \"lock\",\n /** Push handles move overlapping handles with them as they are dragged. */\n PUSH: \"push\",\n /**\n * Handles marked \"none\" are not interactive and do not appear in the UI.\n * They serve only to break the track into subsections that can be colored separately.\n */\n NONE: \"none\",\n};\n//# sourceMappingURL=handleProps.js.map","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import isPlainObject from 'lodash-es/isPlainObject';\nimport $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nexport var ActionTypes = {\n INIT: '@@redux/INIT'\n\n /**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n};export default function createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n function getState() {\n return currentState;\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return { unsubscribe: unsubscribe };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT });\n\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}","import { ActionTypes } from './createStore';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport warning from './utils/warning';\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return 'The ' + argumentName + ' has unexpected type of \"' + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + '\". Expected argument to be an object with the following ' + ('keys: \"' + reducerKeys.join('\", \"') + '\"');\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n\n if (unexpectedKeys.length > 0) {\n return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('\"' + unexpectedKeys.join('\", \"') + '\" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('\"' + reducerKeys.join('\", \"') + '\". Unexpected keys will be ignored.');\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, { type: ActionTypes.INIT });\n\n if (typeof initialState === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n if (typeof reducer(undefined, { type: type }) === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined when probed with a random type. ' + ('Don\\'t try to handle ' + ActionTypes.INIT + ' or other actions in \"redux/*\" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\nexport default function combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning('No reducer provided for key \"' + key + '\"');\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n var finalReducerKeys = Object.keys(finalReducers);\n\n var unexpectedKeyCache = void 0;\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError = void 0;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments[1];\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n return hasChanged ? nextState : state;\n };\n}","function bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}","/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\nexport default function compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport compose from './compose';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\nexport default function applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(undefined, chain)(store.dispatch);\n\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}","function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","'use strict'\n\nvar normalize = require('../../normalize')\nvar Schema = require('./schema')\nvar DefinedInfo = require('./defined-info')\n\nmodule.exports = create\n\nfunction create(definition) {\n var space = definition.space\n var mustUseProperty = definition.mustUseProperty || []\n var attributes = definition.attributes || {}\n var props = definition.properties\n var transform = definition.transform\n var property = {}\n var normal = {}\n var prop\n var info\n\n for (prop in props) {\n info = new DefinedInfo(\n prop,\n transform(attributes, prop),\n props[prop],\n space\n )\n\n if (mustUseProperty.indexOf(prop) !== -1) {\n info.mustUseProperty = true\n }\n\n property[prop] = info\n\n normal[normalize(prop)] = prop\n normal[normalize(info.attribute)] = prop\n }\n\n return new Schema(property, normal, space)\n}\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the extension of the URI.\n * @function getExtensionFromUri\n *\n * @param {String} uri The Uri.\n * @returns {String} The extension of the Uri.\n *\n * @example\n * //extension will be \"czml\";\n * var extension = Cesium.getExtensionFromUri('/Gallery/simple.czml?value=true&example=false');\n */\nfunction getExtensionFromUri(uri) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(uri)) {\n throw new DeveloperError(\"uri is required.\");\n }\n //>>includeEnd('debug');\n\n var uriObject = new Uri(uri);\n uriObject.normalize();\n var path = uriObject.path;\n var index = path.lastIndexOf(\"/\");\n if (index !== -1) {\n path = path.substr(index + 1);\n }\n index = path.lastIndexOf(\".\");\n if (index === -1) {\n path = \"\";\n } else {\n path = path.substr(index + 1);\n }\n return path;\n}\nexport default getExtensionFromUri;\n","import Check from \"./Check.js\";\n\nvar blobUriRegex = /^blob:/i;\n\n/**\n * Determines if the specified uri is a blob uri.\n *\n * @function isBlobUri\n *\n * @param {String} uri The uri to test.\n * @returns {Boolean} true when the uri is a blob uri; otherwise, false.\n *\n * @private\n */\nfunction isBlobUri(uri) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"uri\", uri);\n //>>includeEnd('debug');\n\n return blobUriRegex.test(uri);\n}\nexport default isBlobUri;\n","import defined from \"./defined.js\";\n\nvar a;\n\n/**\n * Given a URL, determine whether that URL is considered cross-origin to the current page.\n *\n * @private\n */\nfunction isCrossOriginUrl(url) {\n if (!defined(a)) {\n a = document.createElement(\"a\");\n }\n\n // copy window location into the anchor to get consistent results\n // when the port is default for the protocol (e.g. 80 for HTTP)\n a.href = window.location.href;\n\n // host includes both hostname and port if the port is not standard\n var host = a.host;\n var protocol = a.protocol;\n\n a.href = url;\n // IE only absolutizes href on get, not set\n // eslint-disable-next-line no-self-assign\n a.href = a.href;\n\n return protocol !== a.protocol || host !== a.host;\n}\nexport default isCrossOriginUrl;\n","import Check from \"./Check.js\";\n\nvar dataUriRegex = /^data:/i;\n\n/**\n * Determines if the specified uri is a data uri.\n *\n * @function isDataUri\n *\n * @param {String} uri The uri to test.\n * @returns {Boolean} true when the uri is a data uri; otherwise, false.\n *\n * @private\n */\nfunction isDataUri(uri) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.string(\"uri\", uri);\n //>>includeEnd('debug');\n\n return dataUriRegex.test(uri);\n}\nexport default isDataUri;\n","import when from \"../ThirdParty/when.js\";\n\n/**\n * @private\n */\nfunction loadAndExecuteScript(url) {\n var deferred = when.defer();\n var script = document.createElement(\"script\");\n script.async = true;\n script.src = url;\n\n var head = document.getElementsByTagName(\"head\")[0];\n script.onload = function () {\n script.onload = undefined;\n head.removeChild(script);\n deferred.resolve();\n };\n script.onerror = function (e) {\n deferred.reject(e);\n };\n\n head.appendChild(script);\n\n return deferred.promise;\n}\nexport default loadAndExecuteScript;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Converts an object representing a set of name/value pairs into a query string,\n * with names and values encoded properly for use in a URL. Values that are arrays\n * will produce multiple values with the same name.\n * @function objectToQuery\n *\n * @param {Object} obj The object containing data to encode.\n * @returns {String} An encoded query string.\n *\n *\n * @example\n * var str = Cesium.objectToQuery({\n * key1 : 'some value',\n * key2 : 'a/b',\n * key3 : ['x', 'y']\n * });\n *\n * @see queryToObject\n * // str will be:\n * // 'key1=some%20value&key2=a%2Fb&key3=x&key3=y'\n */\nfunction objectToQuery(obj) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(obj)) {\n throw new DeveloperError(\"obj is required.\");\n }\n //>>includeEnd('debug');\n\n var result = \"\";\n for (var propName in obj) {\n if (obj.hasOwnProperty(propName)) {\n var value = obj[propName];\n\n var part = encodeURIComponent(propName) + \"=\";\n if (Array.isArray(value)) {\n for (var i = 0, len = value.length; i < len; ++i) {\n result += part + encodeURIComponent(value[i]) + \"&\";\n }\n } else {\n result += part + encodeURIComponent(value) + \"&\";\n }\n }\n }\n\n // trim last &\n result = result.slice(0, -1);\n\n // This function used to replace %20 with + which is more compact and readable.\n // However, some servers didn't properly handle + as a space.\n // https://github.com/CesiumGS/cesium/issues/2192\n\n return result;\n}\nexport default objectToQuery;\n","var tmp = {};\n/*!\n * protobuf.js v6.7.0 (c) 2016, Daniel Wirtz\n * Compiled Wed, 22 Mar 2017 17:30:26 UTC\n * Licensed under the BSD-3-Clause License\n * see: https://github.com/dcodeIO/protobuf.js for details\n */\n(function(global,undefined){\"use strict\";(function prelude(modules, cache, entries) {\n\n // This is the prelude used to bundle protobuf.js for the browser. Wraps up the CommonJS\n // sources through a conflict-free require shim and is again wrapped within an iife that\n // provides a unified `global` and a minification-friendly `undefined` var plus a global\n // \"use strict\" directive so that minification can remove the directives of each module.\n\n function $require(name) {\n var $module = cache[name];\n if (!$module)\n modules[name][0].call($module = cache[name] = { exports: {} }, $require, $module, $module.exports);\n return $module.exports;\n }\n\n // Expose globally\n var protobuf = global.protobuf = $require(entries[0]);\n\n // Commented out to avoid polluing the global scope in Node.js\n // // Be nice to AMD\n // if (typeof define === \"function\" && define.amd)\n // define([], function() {\n // protobuf.configure();\n // return protobuf;\n // });\n\n // // Be nice to CommonJS\n // if (typeof module === \"object\" && module && module.exports)\n // module.exports = protobuf;\n\n})/* end of prelude */({1:[function(require,module,exports){\n\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {function(?Error, ...*)} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n var params = [];\n for (var i = 2; i < arguments.length;)\n params.push(arguments[i++]);\n var pending = true;\n return new Promise(function asPromiseExecutor(resolve, reject) {\n params.push(function asPromiseCallback(err/*, varargs */) {\n if (pending) {\n pending = false;\n if (err)\n reject(err);\n else {\n var args = [];\n for (var i = 1; i < arguments.length;)\n args.push(arguments[i++]);\n resolve.apply(null, args);\n }\n }\n });\n try {\n fn.apply(ctx || this, params); // eslint-disable-line no-invalid-this\n } catch (err) {\n if (pending) {\n pending = false;\n reject(err);\n }\n }\n });\n}\n\n},{}],2:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n var p = string.length;\n if (!p)\n return 0;\n var n = 0;\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\n ++n;\n return Math.ceil(string.length * 3) / 4 - n;\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n var string = []; // alt: new Array(Math.ceil((end - start) / 3) * 4);\n var i = 0, // output index\n j = 0, // goto index\n t; // temporary\n while (start < end) {\n var b = buffer[start++];\n switch (j) {\n case 0:\n string[i++] = b64[b >> 2];\n t = (b & 3) << 4;\n j = 1;\n break;\n case 1:\n string[i++] = b64[t | b >> 4];\n t = (b & 15) << 2;\n j = 2;\n break;\n case 2:\n string[i++] = b64[t | b >> 6];\n string[i++] = b64[b & 63];\n j = 0;\n break;\n }\n }\n if (j) {\n string[i++] = b64[t];\n string[i ] = 61;\n if (j === 1)\n string[i + 1] = 61;\n }\n return String.fromCharCode.apply(String, string);\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n var start = offset;\n var j = 0, // goto index\n t; // temporary\n for (var i = 0; i < string.length;) {\n var c = string.charCodeAt(i++);\n if (c === 61 && j > 1)\n break;\n if ((c = s64[c]) === undefined)\n throw Error(invalidEncoding);\n switch (j) {\n case 0:\n t = c;\n j = 1;\n break;\n case 1:\n buffer[offset++] = t << 2 | (c & 48) >> 4;\n t = c;\n j = 2;\n break;\n case 2:\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n t = c;\n j = 3;\n break;\n case 3:\n buffer[offset++] = (t & 3) << 6 | c;\n j = 0;\n break;\n }\n }\n if (j === 1)\n throw Error(invalidEncoding);\n return offset - start;\n};\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\n};\n\n},{}],3:[function(require,module,exports){\n\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n /**\n * Registered listeners.\n * @type {Object.<string,*>}\n * @private\n */\n this._listeners = {};\n}\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {function} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {util.EventEmitter} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\n fn : fn,\n ctx : ctx || this\n });\n return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {util.EventEmitter} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n if (evt === undefined)\n this._listeners = {};\n else {\n if (fn === undefined)\n this._listeners[evt] = [];\n else {\n var listeners = this._listeners[evt];\n for (var i = 0; i < listeners.length;)\n if (listeners[i].fn === fn)\n listeners.splice(i, 1);\n else\n ++i;\n }\n }\n return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {util.EventEmitter} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n var listeners = this._listeners[evt];\n if (listeners) {\n var args = [],\n i = 1;\n for (; i < arguments.length;)\n args.push(arguments[i++]);\n for (i = 0; i < listeners.length;)\n listeners[i].fn.apply(listeners[i++].ctx, args);\n }\n return this;\n};\n\n},{}],4:[function(require,module,exports){\n\"use strict\";\nmodule.exports = inquire;\n\n/**\n * Requires a module only if available.\n * @memberof util\n * @param {string} moduleName Module to require\n * @returns {?Object} Required module if available and not empty, otherwise `null`\n */\nfunction inquire(moduleName) {\n try {\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\n if (mod && (mod.length || Object.keys(mod).length))\n return mod;\n } catch (e) {} // eslint-disable-line no-empty\n return null;\n}\n\n},{}],5:[function(require,module,exports){\n\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this {Uint8Array}\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n var SIZE = size || 8192;\n var MAX = SIZE >>> 1;\n var slab = null;\n var offset = SIZE;\n return function pool_alloc(size) {\n if (size < 1 || size > MAX)\n return alloc(size);\n if (offset + size > SIZE) {\n slab = alloc(SIZE);\n offset = 0;\n }\n var buf = slice.call(slab, offset, offset += size);\n if (offset & 7) // align to 32 bit\n offset = (offset | 7) + 1;\n return buf;\n };\n}\n\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A minimal UTF8 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports;\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n var len = 0,\n c = 0;\n for (var i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i);\n if (c < 128)\n len += 1;\n else if (c < 2048)\n len += 2;\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n ++i;\n len += 4;\n } else\n len += 3;\n }\n return len;\n};\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read(buffer, start, end) {\n var len = end - start;\n if (len < 1)\n return \"\";\n var parts = null,\n chunk = [],\n i = 0, // char offset\n t; // temporary\n while (start < end) {\n t = buffer[start++];\n if (t < 128)\n chunk[i++] = t;\n else if (t > 191 && t < 224)\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\n else if (t > 239 && t < 365) {\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\n chunk[i++] = 0xD800 + (t >> 10);\n chunk[i++] = 0xDC00 + (t & 1023);\n } else\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\n if (i > 8191) {\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n i = 0;\n }\n }\n if (parts) {\n if (i)\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n return parts.join(\"\");\n }\n return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n var start = offset,\n c1, // character 1\n c2; // character 2\n for (var i = 0; i < string.length; ++i) {\n c1 = string.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = c1 >> 6 | 192;\n buffer[offset++] = c1 & 63 | 128;\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n ++i;\n buffer[offset++] = c1 >> 18 | 240;\n buffer[offset++] = c1 >> 12 & 63 | 128;\n buffer[offset++] = c1 >> 6 & 63 | 128;\n buffer[offset++] = c1 & 63 | 128;\n } else {\n buffer[offset++] = c1 >> 12 | 224;\n buffer[offset++] = c1 >> 6 & 63 | 128;\n buffer[offset++] = c1 & 63 | 128;\n }\n }\n return offset - start;\n};\n\n},{}],7:[function(require,module,exports){\n\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\nprotobuf.roots = {};\n\n// Serialization\nprotobuf.Writer = require(14);\nprotobuf.BufferWriter = require(15);\nprotobuf.Reader = require(8);\nprotobuf.BufferReader = require(9);\n\n// Utility\nprotobuf.util = require(13);\nprotobuf.rpc = require(10);\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.Reader._configure(protobuf.BufferReader);\n protobuf.util._configure();\n}\n\n// Configure serialization\nprotobuf.Writer._configure(protobuf.BufferWriter);\nconfigure();\n\n},{\"10\":10,\"13\":13,\"14\":14,\"15\":15,\"8\":8,\"9\":9}],8:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(13);\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore next */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore next */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore next */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long|number} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long|number} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long|number} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32(buf, end) {\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore next */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore next */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore next */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32(this.buf, this.pos += 4), readFixed32(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long|number} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long|number} Value read\n */\n\nvar readFloat = typeof Float32Array !== \"undefined\"\n ? (function() {\n var f32 = new Float32Array(1),\n f8b = new Uint8Array(f32.buffer);\n f32[0] = -0;\n return f8b[3] // already le?\n ? function readFloat_f32(buf, pos) {\n f8b[0] = buf[pos ];\n f8b[1] = buf[pos + 1];\n f8b[2] = buf[pos + 2];\n f8b[3] = buf[pos + 3];\n return f32[0];\n }\n /* istanbul ignore next */\n : function readFloat_f32_le(buf, pos) {\n f8b[0] = buf[pos + 3];\n f8b[1] = buf[pos + 2];\n f8b[2] = buf[pos + 1];\n f8b[3] = buf[pos ];\n return f32[0];\n };\n })()\n /* istanbul ignore next */\n : function readFloat_ieee754(buf, pos) {\n var uint = readFixed32(buf, pos + 4),\n sign = (uint >> 31) * 2 + 1,\n exponent = uint >>> 23 & 255,\n mantissa = uint & 8388607;\n return exponent === 255\n ? mantissa\n ? NaN\n : sign * Infinity\n : exponent === 0 // denormal\n ? sign * 1.401298464324817e-45 * mantissa\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n };\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore next */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = readFloat(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\nvar readDouble = typeof Float64Array !== \"undefined\"\n ? (function() {\n var f64 = new Float64Array(1),\n f8b = new Uint8Array(f64.buffer);\n f64[0] = -0;\n return f8b[7] // already le?\n ? function readDouble_f64(buf, pos) {\n f8b[0] = buf[pos ];\n f8b[1] = buf[pos + 1];\n f8b[2] = buf[pos + 2];\n f8b[3] = buf[pos + 3];\n f8b[4] = buf[pos + 4];\n f8b[5] = buf[pos + 5];\n f8b[6] = buf[pos + 6];\n f8b[7] = buf[pos + 7];\n return f64[0];\n }\n /* istanbul ignore next */\n : function readDouble_f64_le(buf, pos) {\n f8b[0] = buf[pos + 7];\n f8b[1] = buf[pos + 6];\n f8b[2] = buf[pos + 5];\n f8b[3] = buf[pos + 4];\n f8b[4] = buf[pos + 3];\n f8b[5] = buf[pos + 2];\n f8b[6] = buf[pos + 1];\n f8b[7] = buf[pos ];\n return f64[0];\n };\n })()\n /* istanbul ignore next */\n : function readDouble_ieee754(buf, pos) {\n var lo = readFixed32(buf, pos + 4),\n hi = readFixed32(buf, pos + 8);\n var sign = (hi >> 31) * 2 + 1,\n exponent = hi >>> 20 & 2047,\n mantissa = 4294967296 * (hi & 1048575) + lo;\n return exponent === 2047\n ? mantissa\n ? NaN\n : sign * Infinity\n : exponent === 0 // denormal\n ? sign * 5e-324 * mantissa\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n };\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore next */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = readDouble(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore next */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore next */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n /* istanbul ignore next */\n do {\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n do { // eslint-disable-line no-constant-condition\n if ((wireType = this.uint32() & 7) === 4)\n break;\n this.skipType(wireType);\n } while (true);\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n\n},{\"13\":13}],9:[function(require,module,exports){\n\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(8);\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(13);\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\n/* istanbul ignore else */\nif (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\n},{\"13\":13,\"8\":8}],10:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {?Error} error Error, if any, otherwise `null`\n * @param {?Uint8Array} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(11);\n\n},{\"11\":11}],11:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Service;\n\nvar util = require(13);\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @type {function}\n * @param {?Error} error Error, if any\n * @param {?Message} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.ServiceMethodMixin|ServiceMethodMixin} and thus {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @type {function}\n * @param {Message|Object.<string,*>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * A service method mixin.\n *\n * When using TypeScript, mixed in service methods are only supported directly with a type definition of a static module (used with reflection). Otherwise, explicit casting is required.\n * @typedef rpc.ServiceMethodMixin\n * @type {Object.<string,rpc.ServiceMethod>}\n * @example\n * // Explicit casting with TypeScript\n * (myRpcService[\"myMethod\"] as protobuf.rpc.ServiceMethod)(...)\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @augments rpc.ServiceMethodMixin\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {?RPCImpl}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {function} requestCtor Request constructor\n * @param {function} responseCtor Response constructor\n * @param {Message|Object.<string,*>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n\n},{\"13\":13}],12:[function(require,module,exports){\n\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(13);\n\n/**\n * Any compatible Long instance.\n *\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @typedef Long\n * @type {Object}\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n\n},{\"13\":13}],13:[function(require,module,exports){\n\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(1);\n\n// converts to / from base64 encoded strings\nutil.base64 = require(2);\n\n// base class of rpc.Service\nutil.EventEmitter = require(3);\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(4);\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(6);\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(5);\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(12);\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(global.process && global.process.versions && global.process.versions.node);\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Node's Buffer class if available.\n * @type {?function(new: Buffer)}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n/**\n * Internal alias of or polyfull for Buffer.from.\n * @type {?function}\n * @param {string|number[]} value Value\n * @param {string} [encoding] Encoding if value is a string\n * @returns {Uint8Array}\n * @private\n */\nutil._Buffer_from = null;\n\n/**\n * Internal alias of or polyfill for Buffer.allocUnsafe.\n * @type {?function}\n * @param {number} size Buffer size\n * @returns {Uint8Array}\n * @private\n */\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {?function(new: Uint8Array, *)}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Long.js's Long class if available.\n * @type {?function(new: Long)}\n */\nutil.Long = /* istanbul ignore next */ global.dcodeIO && /* istanbul ignore next */ global.dcodeIO.Long || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {function} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: (new Error()).stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>=} properties Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {function():string|undefined} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {function(?string):undefined} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Lazily resolves fully qualified type names against the specified root.\n * @param {Root} root Root instanceof\n * @param {Object.<number,string|ReflectionObject>} lazyTypes Type names\n * @returns {undefined}\n */\nutil.lazyResolve = function lazyResolve(root, lazyTypes) {\n for (var i = 0; i < lazyTypes.length; ++i) {\n for (var keys = Object.keys(lazyTypes[i]), j = 0; j < keys.length; ++j) {\n var path = lazyTypes[i][keys[j]].split(\".\"),\n ptr = root;\n while (path.length)\n ptr = ptr[path.shift()];\n lazyTypes[i][keys[j]] = ptr;\n }\n }\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations. Longs, enums and bytes are converted to strings by default.\n * @type {ConversionOptions}\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String\n};\n\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n\n},{\"1\":1,\"12\":12,\"2\":2,\"3\":3,\"4\":4,\"5\":5,\"6\":6}],14:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(13);\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @private\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {?State}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {?Object}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this.push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this.push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this.push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this.push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos++] = val & 255;\n buf[pos++] = val >>> 8 & 255;\n buf[pos++] = val >>> 16 & 255;\n buf[pos ] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this.push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this.push(writeFixed32, 4, bits.lo).push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\nvar writeFloat = typeof Float32Array !== \"undefined\"\n ? (function() {\n var f32 = new Float32Array(1),\n f8b = new Uint8Array(f32.buffer);\n f32[0] = -0;\n return f8b[3] // already le?\n ? function writeFloat_f32(val, buf, pos) {\n f32[0] = val;\n buf[pos++] = f8b[0];\n buf[pos++] = f8b[1];\n buf[pos++] = f8b[2];\n buf[pos ] = f8b[3];\n }\n /* istanbul ignore next */\n : function writeFloat_f32_le(val, buf, pos) {\n f32[0] = val;\n buf[pos++] = f8b[3];\n buf[pos++] = f8b[2];\n buf[pos++] = f8b[1];\n buf[pos ] = f8b[0];\n };\n })()\n /* istanbul ignore next */\n : function writeFloat_ieee754(value, buf, pos) {\n var sign = value < 0 ? 1 : 0;\n if (sign)\n value = -value;\n if (value === 0)\n writeFixed32(1 / value > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n else if (isNaN(value))\n writeFixed32(2147483647, buf, pos);\n else if (value > 3.4028234663852886e+38) // +-Infinity\n writeFixed32((sign << 31 | 2139095040) >>> 0, buf, pos);\n else if (value < 1.1754943508222875e-38) // denormal\n writeFixed32((sign << 31 | Math.round(value / 1.401298464324817e-45)) >>> 0, buf, pos);\n else {\n var exponent = Math.floor(Math.log(value) / Math.LN2),\n mantissa = Math.round(value * Math.pow(2, -exponent) * 8388608) & 8388607;\n writeFixed32((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n }\n };\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this.push(writeFloat, 4, value);\n};\n\nvar writeDouble = typeof Float64Array !== \"undefined\"\n ? (function() {\n var f64 = new Float64Array(1),\n f8b = new Uint8Array(f64.buffer);\n f64[0] = -0;\n return f8b[7] // already le?\n ? function writeDouble_f64(val, buf, pos) {\n f64[0] = val;\n buf[pos++] = f8b[0];\n buf[pos++] = f8b[1];\n buf[pos++] = f8b[2];\n buf[pos++] = f8b[3];\n buf[pos++] = f8b[4];\n buf[pos++] = f8b[5];\n buf[pos++] = f8b[6];\n buf[pos ] = f8b[7];\n }\n /* istanbul ignore next */\n : function writeDouble_f64_le(val, buf, pos) {\n f64[0] = val;\n buf[pos++] = f8b[7];\n buf[pos++] = f8b[6];\n buf[pos++] = f8b[5];\n buf[pos++] = f8b[4];\n buf[pos++] = f8b[3];\n buf[pos++] = f8b[2];\n buf[pos++] = f8b[1];\n buf[pos ] = f8b[0];\n };\n })()\n /* istanbul ignore next */\n : function writeDouble_ieee754(value, buf, pos) {\n var sign = value < 0 ? 1 : 0;\n if (sign)\n value = -value;\n if (value === 0) {\n writeFixed32(0, buf, pos);\n writeFixed32(1 / value > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + 4);\n } else if (isNaN(value)) {\n writeFixed32(4294967295, buf, pos);\n writeFixed32(2147483647, buf, pos + 4);\n } else if (value > 1.7976931348623157e+308) { // +-Infinity\n writeFixed32(0, buf, pos);\n writeFixed32((sign << 31 | 2146435072) >>> 0, buf, pos + 4);\n } else {\n var mantissa;\n if (value < 2.2250738585072014e-308) { // denormal\n mantissa = value / 5e-324;\n writeFixed32(mantissa >>> 0, buf, pos);\n writeFixed32((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + 4);\n } else {\n var exponent = Math.floor(Math.log(value) / Math.LN2);\n if (exponent === 1024)\n exponent = 1023;\n mantissa = value * Math.pow(2, -exponent);\n writeFixed32(mantissa * 4503599627370496 >>> 0, buf, pos);\n writeFixed32((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + 4);\n }\n }\n };\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this.push(writeDouble, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this.push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len).push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len).push(utf8.write, len, value)\n : this.push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n};\n\n},{\"13\":13}],15:[function(require,module,exports){\n\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(14);\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(13);\n\nvar Buffer = util.Buffer;\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\nBufferWriter.alloc = function alloc_buffer(size) {\n return (BufferWriter.alloc = util._Buffer_allocUnsafe)(size);\n};\n\nvar writeBytesBuffer = Buffer && Buffer.prototype instanceof Uint8Array && Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this.push(writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else\n buf.utf8Write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this.push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\n},{\"13\":13,\"14\":14}]},{},[7])\n\n})(tmp);\n//# sourceMappingURL=protobuf.js.map\n\nexport default tmp.protobuf;\n","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { MenuDivider } from \"./menuDivider\";\n// eslint-disable-next-line import/no-cycle\nimport { MenuItem } from \"./menuItem\";\nvar Menu = /** @class */ (function (_super) {\n __extends(Menu, _super);\n function Menu() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Menu.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, children = _b.children, large = _b.large, ulRef = _b.ulRef, htmlProps = __rest(_b, [\"className\", \"children\", \"large\", \"ulRef\"]);\n var classes = classNames(Classes.MENU, (_a = {}, _a[Classes.LARGE] = large, _a), className);\n return (React.createElement(\"ul\", __assign({}, htmlProps, { className: classes, ref: ulRef }), children));\n };\n Menu.displayName = DISPLAYNAME_PREFIX + \".Menu\";\n Menu.Divider = MenuDivider;\n Menu.Item = MenuItem;\n Menu = __decorate([\n polyfill\n ], Menu);\n return Menu;\n}(AbstractPureComponent2));\nexport { Menu };\n//# sourceMappingURL=menu.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Position } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { Icon } from \"../icon/icon\";\nimport { Popover, PopoverInteractionKind } from \"../popover/popover\";\nimport { Text } from \"../text/text\";\n// eslint-disable-next-line import/no-cycle\nimport { Menu } from \"./menu\";\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MenuItem.prototype.render = function () {\n var _a, _b;\n var _c = this.props, active = _c.active, className = _c.className, children = _c.children, disabled = _c.disabled, icon = _c.icon, intent = _c.intent, labelClassName = _c.labelClassName, labelElement = _c.labelElement, multiline = _c.multiline, popoverProps = _c.popoverProps, shouldDismissPopover = _c.shouldDismissPopover, text = _c.text, textClassName = _c.textClassName, _d = _c.tagName, tagName = _d === void 0 ? \"a\" : _d, htmlProps = __rest(_c, [\"active\", \"className\", \"children\", \"disabled\", \"icon\", \"intent\", \"labelClassName\", \"labelElement\", \"multiline\", \"popoverProps\", \"shouldDismissPopover\", \"text\", \"textClassName\", \"tagName\"]);\n var hasSubmenu = children != null;\n var intentClass = Classes.intentClass(intent);\n var anchorClasses = classNames(Classes.MENU_ITEM, intentClass, (_a = {},\n _a[Classes.ACTIVE] = active,\n _a[Classes.INTENT_PRIMARY] = active && intentClass == null,\n _a[Classes.DISABLED] = disabled,\n // prevent popover from closing when clicking on submenu trigger or disabled item\n _a[Classes.POPOVER_DISMISS] = shouldDismissPopover && !disabled && !hasSubmenu,\n _a), className);\n var target = React.createElement(tagName, __assign(__assign(__assign({}, htmlProps), (disabled ? DISABLED_PROPS : {})), { className: anchorClasses }), React.createElement(Icon, { icon: icon }), React.createElement(Text, { className: classNames(Classes.FILL, textClassName), ellipsize: !multiline }, text), this.maybeRenderLabel(labelElement), hasSubmenu ? React.createElement(Icon, { icon: \"caret-right\" }) : undefined);\n var liClasses = classNames((_b = {}, _b[Classes.MENU_SUBMENU] = hasSubmenu, _b));\n return React.createElement(\"li\", { className: liClasses }, this.maybeRenderPopover(target, children));\n };\n MenuItem.prototype.maybeRenderLabel = function (labelElement) {\n var _a = this.props, label = _a.label, labelClassName = _a.labelClassName;\n if (label == null && labelElement == null) {\n return null;\n }\n return (React.createElement(\"span\", { className: classNames(Classes.MENU_ITEM_LABEL, labelClassName) },\n label,\n labelElement));\n };\n MenuItem.prototype.maybeRenderPopover = function (target, children) {\n if (children == null) {\n return target;\n }\n var _a = this.props, disabled = _a.disabled, popoverProps = _a.popoverProps;\n return (React.createElement(Popover, __assign({ autoFocus: false, captureDismiss: false, disabled: disabled, enforceFocus: false, hoverCloseDelay: 0, interactionKind: PopoverInteractionKind.HOVER, modifiers: SUBMENU_POPOVER_MODIFIERS, position: Position.RIGHT_TOP, usePortal: false }, popoverProps, { content: React.createElement(Menu, null, children), minimal: true, popoverClassName: classNames(Classes.MENU_SUBMENU, popoverProps.popoverClassName), target: target })));\n };\n MenuItem.defaultProps = {\n disabled: false,\n multiline: false,\n popoverProps: {},\n shouldDismissPopover: true,\n text: \"\",\n };\n MenuItem.displayName = DISPLAYNAME_PREFIX + \".MenuItem\";\n MenuItem = __decorate([\n polyfill\n ], MenuItem);\n return MenuItem;\n}(AbstractPureComponent2));\nexport { MenuItem };\nvar SUBMENU_POPOVER_MODIFIERS = {\n // 20px padding - scrollbar width + a bit\n flip: { boundariesElement: \"viewport\", padding: 20 },\n // shift popover up 5px so MenuItems align\n offset: { offset: -5 },\n preventOverflow: { boundariesElement: \"viewport\", padding: 20 },\n};\n// props to ignore when disabled\nvar DISABLED_PROPS = {\n href: undefined,\n onClick: undefined,\n onMouseDown: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n tabIndex: -1,\n};\n//# sourceMappingURL=menuItem.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isContentOverflowing: false,\n textContent: \"\",\n };\n _this.textRef = null;\n return _this;\n }\n Text.prototype.componentDidMount = function () {\n this.update();\n };\n Text.prototype.componentDidUpdate = function () {\n this.update();\n };\n Text.prototype.render = function () {\n var _a;\n var _this = this;\n var classes = classNames((_a = {},\n _a[Classes.TEXT_OVERFLOW_ELLIPSIS] = this.props.ellipsize,\n _a), this.props.className);\n var _b = this.props, children = _b.children, _c = _b.tagName, tagName = _c === void 0 ? \"div\" : _c;\n return React.createElement(tagName, {\n className: classes,\n ref: function (ref) { return (_this.textRef = ref); },\n title: this.state.isContentOverflowing ? this.state.textContent : undefined,\n }, children);\n };\n Text.prototype.update = function () {\n if (this.textRef == null) {\n return;\n }\n var newState = {\n isContentOverflowing: this.props.ellipsize && this.textRef.scrollWidth > this.textRef.clientWidth,\n textContent: this.textRef.textContent,\n };\n this.setState(newState);\n };\n Text.displayName = DISPLAYNAME_PREFIX + \".Text\";\n Text = __decorate([\n polyfill\n ], Text);\n return Text;\n}(AbstractPureComponent2));\nexport { Text };\n//# sourceMappingURL=text.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar ButtonGroup = /** @class */ (function (_super) {\n __extends(ButtonGroup, _super);\n function ButtonGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ButtonGroup.prototype.render = function () {\n var _a;\n var _b = this.props, alignText = _b.alignText, className = _b.className, fill = _b.fill, minimal = _b.minimal, large = _b.large, vertical = _b.vertical, htmlProps = __rest(_b, [\"alignText\", \"className\", \"fill\", \"minimal\", \"large\", \"vertical\"]);\n var buttonGroupClasses = classNames(Classes.BUTTON_GROUP, (_a = {},\n _a[Classes.FILL] = fill,\n _a[Classes.LARGE] = large,\n _a[Classes.MINIMAL] = minimal,\n _a[Classes.VERTICAL] = vertical,\n _a), Classes.alignmentClass(alignText), className);\n return (React.createElement(\"div\", __assign({}, htmlProps, { className: buttonGroupClasses }), this.props.children));\n };\n ButtonGroup.displayName = DISPLAYNAME_PREFIX + \".ButtonGroup\";\n ButtonGroup = __decorate([\n polyfill\n ], ButtonGroup);\n return ButtonGroup;\n}(AbstractPureComponent2));\nexport { ButtonGroup };\n//# sourceMappingURL=buttonGroup.js.map","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","var oldValue;\nif (typeof ko !== 'undefined') {\n oldValue = ko;\n}\n\n(function(){\n/*!\n * Knockout JavaScript library v3.5.1\n * (c) The Knockout.js team - http://knockoutjs.com/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n\n(function() {(function(n){var A=this||(0,eval)(\"this\"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||\"undefined\"===typeof jQuery||(v=jQuery);(function(n){n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);\nd=a.a.setTimeout(b,c)}}function Z(a,c){c&&\"change\"!==c?\"beforeChange\"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a=\"undefined\"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split(\".\"),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version=\"3.5.1\";a.b(\"version\",\na.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(\" \")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h=\"function\"===typeof Symbol,m={},k={};m[R&&/Firefox\\/2/i.test(R.userAgent)?\n\"KeyboardEvent\":\"UIEvents\"]=[\"keyup\",\"keydown\",\"keypress\"];m.MouseEvents=\"click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\".split(\" \");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement(\"div\"),c=b.getElementsByTagName(\"i\");b.innerHTML=\"\\x3c!--[if gt IE \"+ ++a+\"]><i></i><![endif]--\\x3e\",c[0];);return 4<a?a:n}(),q=/\\S+/g,t;return{Jc:[\"authenticity_token\",/^__RequestVerificationToken(_.*)?$/],\nD:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:\"function\"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,\nb,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=\nb.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement(\"div\"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],\nl=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute(\"selected\",b):a.selected=b},Db:function(a){return null===a||a===n?\"\":a.trim?\na.trim():a.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")},Ud:function(a,b){a=a||\"\";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&\na.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||\"function\"!=typeof b.addEventListener)if(\"undefined\"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f=\"on\"+c;b.attachEvent(f,\nk);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error(\"Browser doesn't support addEventListener or attachEvent\");else b.addEventListener(c,e,!1);else t||(t=\"function\"==typeof v(b).on?\"on\":\"bind\"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error(\"element must be a DOM node when calling triggerEvent\");var d;\"input\"===a.a.R(b)&&b.type&&\"click\"==c.toLowerCase()?(d=b.type,d=\"checkbox\"==d||\"radio\"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if(\"function\"==typeof w.createEvent)if(\"function\"==\ntypeof b.dispatchEvent)d=w.createEvent(k[c]||\"HTMLEvents\"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error(\"The supplied element doesn't support dispatchEvent\");else if(d&&b.click)b.click();else if(\"undefined\"!=typeof b.fireEvent)b.fireEvent(\"on\"+c);else throw Error(\"Browser doesn't support triggering events\");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&(\"object\"===typeof b.classList?\n(l=b.classList[d?\"add\":\"remove\"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):\"string\"===typeof b.className.baseVal?e(b.className,\"baseVal\",c,d):e(b,\"className\",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d=\"\";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'\"]/g,function(a){return\"&#\"+a.charCodeAt(0)+\";\"});a.mergeAttributes(w.createElement(\"<input name='\"+\nc+\"'/>\"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName(\"input\")).concat(a.a.la(b.getElementsByTagName(\"textarea\"))),\ne=\"string\"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return\"string\"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function(\"return \"+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\");\nreturn H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if(\"object\"==typeof c&&\"form\"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement(\"form\");p.style.display=\"none\";p.action=f;p.method=\"post\";for(var q in d)c=w.createElement(\"input\"),c.type=\"hidden\",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement(\"input\");\nc.type=\"hidden\";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b(\"utils\",a.a);a.b(\"utils.arrayForEach\",a.a.D);a.b(\"utils.arrayFirst\",a.a.Lb);a.b(\"utils.arrayFilter\",a.a.jb);a.b(\"utils.arrayGetDistinctValues\",a.a.wc);a.b(\"utils.arrayIndexOf\",a.a.A);a.b(\"utils.arrayMap\",a.a.Mb);a.b(\"utils.arrayPushAll\",a.a.Nb);a.b(\"utils.arrayRemoveItem\",a.a.Pa);a.b(\"utils.cloneNodes\",a.a.Ca);a.b(\"utils.createSymbolOrString\",\na.a.Da);a.b(\"utils.extend\",a.a.extend);a.b(\"utils.fieldsIncludedWithJsonPost\",a.a.Jc);a.b(\"utils.getFormFields\",a.a.Lc);a.b(\"utils.objectMap\",a.a.Ga);a.b(\"utils.peekObservable\",a.a.bc);a.b(\"utils.postJson\",a.a.Od);a.b(\"utils.parseJson\",a.a.Nd);a.b(\"utils.registerEventHandler\",a.a.B);a.b(\"utils.stringifyJson\",a.a.hc);a.b(\"utils.range\",a.a.Pd);a.b(\"utils.toggleDomNodeCssClass\",a.a.Eb);a.b(\"utils.triggerEvent\",a.a.Fb);a.b(\"utils.unwrapObservable\",a.a.f);a.b(\"utils.objectForEach\",a.a.P);a.b(\"utils.addOrRemoveItem\",\na.a.Na);a.b(\"utils.setTextContent\",a.a.Bb);a.b(\"unwrap\",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c=\"__ko__\"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||\"null\"===f||!d[f]){if(!e)return n;f=a[c]=\"ko\"+b++;d[f]=\n{}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b(\"utils.domData\",a.a.g);a.b(\"utils.domData.clear\",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);\nd===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if(\"function\"!=typeof c)throw Error(\"Callback must be a function\");b(a,!0).push(c)},yb:function(c,\nd){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName(\"*\")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&\"function\"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b(\"cleanNode\",a.oa);a.b(\"removeNode\",a.removeNode);a.b(\"utils.domNodeDisposal\",a.a.K);a.b(\"utils.domNodeDisposal.addDisposeCallback\",\na.a.K.za);a.b(\"utils.domNodeDisposal.removeDisposeCallback\",a.a.K.yb);(function(){var b=[0,\"\",\"\"],c=[1,\"<table>\",\"</table>\"],d=[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],e=[1,\"<select multiple='multiple'>\",\"</select>\"],f={thead:c,tbody:c,tfoot:c,tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;\nl.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement(\"div\"),t;t=(p=p.match(/^(?:\\x3c!--.*?--\\x3e\\s*?)*?<([a-z]+)[\\s>]/))&&f[p[1]]||b;p=t[0];t=\"ignored<div>\"+t[1]+c+t[2]+\"</div>\";\"function\"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,\nc);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if(\"string\"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b(\"utils.parseHtmlFragment\",a.a.ua);a.b(\"utils.setHtml\",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],\ne)}var c={};return{Xb:function(a){if(\"function\"!=typeof a)throw Error(\"You can only pass a function to ko.memoization.memoize()\");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return\"\\x3c!--[ko_memo:\"+b+\"]--\\x3e\"},bd:function(a,b){var f=c[a];if(f===n)throw Error(\"Couldn't find any memo with ID \"+a+\". Perhaps it's already been unmemoized.\");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=\n[];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue=\"\";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\\[ko_memo\\:(.*?)\\]$/))?a[1]:null}}}();a.b(\"memoization\",a.aa);a.b(\"memoization.memoize\",a.aa.Xb);a.b(\"memoization.unmemoize\",a.aa.bd);a.b(\"memoization.parseMemoText\",a.aa.Uc);a.b(\"memoization.unmemoizeDomNodeAndDescendants\",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=\n++c){h=f;a.a.Gc(Error(\"'Too much recursion' after processing \"+c+\" task groups.\"));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement(\"div\");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle(\"foo\")}}(c):d=w&&\"onreadystatechange\"in w.createElement(\"script\")?function(a){var b=w.createElement(\"script\");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);\nb=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b(\"tasks\",a.na);a.b(\"tasks.schedule\",a.na.zb);a.b(\"tasks.runEarly\",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},\nc)}})},rateLimit:function(a,c){var d,e,f;\"number\"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f=\"function\"==typeof e?e:\"notifyWhenChangesStop\"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error(\"The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.\");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,\"dirty\")}finally{f=\n!1}}}}))},notify:function(a,c){a.equalityComparer=\"always\"==c?null:K}};var W={undefined:1,\"boolean\":1,number:1,string:1};a.b(\"extenders\",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,\"dispose\",this.s);a.L(this,\"disposeWhenNodeIsRemoved\",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};\na.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||\"change\";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||\"change\";\"change\"===c&&this.Gb();if(this.Wa(c)){var d=\"change\"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},\nDd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,\"beforeChange\"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},\nBd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){\"dirty\"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return\"[object Object]\"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];\"function\"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,\"init\",D.qb);a.L(D,\"subscribe\",D.subscribe);a.L(D,\"extend\",D.extend);a.L(D,\"getSubscriptionsCount\",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,\nFunction.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&\"function\"==typeof a.subscribe&&\"function\"==typeof a.notifySubscribers};a.b(\"subscribable\",a.T);a.b(\"isSubscribable\",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error(\"Only subscribable things can act as dependencies\");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},\nVa:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b(\"computedContext\",a.S);a.b(\"computedContext.getDependenciesCount\",a.S.qa);a.b(\"computedContext.getDependencies\",a.S.Va);a.b(\"computedContext.isInitial\",a.S.Ya);a.b(\"computedContext.registerDependency\",a.S.cc);a.b(\"ignoreDependencies\",a.Yd=a.u.G);var I=a.a.Da(\"_latestValue\");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;\na.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],\"spectate\");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],\"beforeChange\")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma=\"__ko_proto__\";F[G]=a.ta;a.O=function(b){if((b=\"function\"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error(\"Invalid object that looks like an observable; possibly from another Knockout instance\");\nreturn!!b};a.Za=function(b){return\"function\"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b(\"observable\",a.ta);a.b(\"isObservable\",a.O);a.b(\"isWriteableObservable\",a.Za);a.b(\"isWritableObservable\",a.Za);a.b(\"observable.fn\",F);a.L(F,\"peek\",F.v);a.L(F,\"valueHasMutated\",F.xa);a.L(F,\"valueWillMutate\",F.ya);a.Ha=function(b){b=b||[];if(\"object\"!=typeof b||!(\"length\"in b))throw Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\");b=a.ta(b);a.a.Ab(b,\na.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error(\"Array modified during remove; cannot remove item\");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=\na.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);\nreturn a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D(\"pop push reverse shift sort splice unshift\".split(\" \"),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D([\"slice\"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&\"function\"==typeof b.remove&&\"function\"==\ntypeof b.push};a.b(\"observableArray\",a.Ha);a.b(\"isObservableArray\",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa(\"arrayChange\")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,\"arrayChange\")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,\"spectate\"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&\"object\"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,\nk,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);\"arrayChange\"===a&&d()};b.hb=function(a){p&&p.call(b,a);\"arrayChange\"!==a||b.Wa(\"arrayChange\")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case \"push\":h=p;case \"unshift\":for(c=0;c<g;c++)l(\"added\",d[c],h+c);break;case \"pop\":h=p-1;case \"shift\":p&&l(\"deleted\",b[h],h);break;case \"splice\":c=Math.min(Math.max(0,0>d[0]?p+d[0]:\nd[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l(\"deleted\",b[c],c)),c<g&&U.push(l(\"added\",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da(\"_state\");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if(\"function\"===typeof f)f.apply(g.nb,arguments);else throw Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\");return this}g.ra||\na.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}\"object\"===typeof b?d=b:(d=d||{},b&&(d.read=b));if(\"function\"!=typeof d.read)throw Error(\"Pass a function that returns the value of the ko.computed\");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc=\"function\"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):\nd.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&\nc===this)throw Error(\"A 'pure' computed must not be called recursively\");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,\"dirty\"),d=a.subscribe(this.Rd,\nthis);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,\nod:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,\"beforeChange\"),c.X=f,this.notifySubscribers(c.X,\"spectate\"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,\"awake\");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},\nub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&\"change\"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=\n0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,\"awake\")}},hb:function(b){var c=this[r];c.ra||\"change\"!=b||this.Wa(\"change\")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,\"asleep\"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){\"change\"!=\na&&\"beforeChange\"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return\"function\"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b(\"computed\",a.o);a.b(\"dependentObservable\",a.o);a.b(\"isComputed\",a.Oc);a.b(\"isPureComputed\",a.Fd);a.b(\"computed.fn\",C);a.L(C,\"peek\",C.v);a.L(C,\"dispose\",C.s);a.L(C,\"isActive\",C.ja);a.L(C,\"getDependenciesCount\",C.qa);a.L(C,\"getDependencies\",C.Va);a.xb=function(b,c){if(\"function\"===typeof b)return a.o(b,\nc,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b(\"pureComputed\",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if(\"object\"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case \"boolean\":case \"number\":case \"string\":case \"function\":h[c]=d;break;case \"object\":case \"undefined\":var l=g.get(d);h[c]=l!==\nn?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);\"function\"==typeof a.toJSON&&b(\"toJSON\")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error(\"When calling ko.toJS, pass the object you want to convert.\");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,\nb);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b(\"toJS\",a.ad);a.b(\"toJSON\",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:\"always\"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return\"function\"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b(\"when\",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case \"option\":return!0===b.__ko__hasDomDataOptionValue__?\na.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode(\"value\")&&b.getAttributeNode(\"value\").specified?b.value:b.text:b.value;case \"select\":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case \"option\":\"string\"===typeof c?(a.a.g.set(b,a.c.options.$b,n),\"__ko__hasDomDataOptionValue__\"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value=\"number\"===\ntypeof c?c:\"\");break;case \"select\":if(\"\"===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||\"\"===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c=\"\";b.value=c}}}})();a.b(\"selectExtensions\",a.w);a.b(\"selectExtensions.readValue\",a.w.M);a.b(\"selectExtensions.writeValue\",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,\n-1));b+=\"\\n,\";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join(\"\")}:{unknown:p||q.join(\"\")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B=\"/\"):40===u||123===u||91===u?++h:\n41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error(\"Unbalanced parentheses, braces, or brackets\");}return c}var c=[\"true\",\"false\",\"null\",\"undefined\"],d=/^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i,e=RegExp(\"\\\"(?:\\\\\\\\.|[^\\\"])*\\\"|'(?:\\\\\\\\.|[^'])*'|`(?:\\\\\\\\.|[^`])*`|/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/|//.*\\n|/(?:\\\\\\\\.|[^/])+/w*|[^\\\\s:,/][^,\\\"'`{}()/:[\\\\]]*[^\\\\s,\\\"'`{}()/:[\\\\]]|[^\\\\s]\",\"g\"),f=/[\\])\"'A-Za-z0-9_$]+$/,g={\"in\":1,\"return\":1,\"typeof\":1},\nh={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?\"Object(\"+k[1]+\")\"+k[2]:f),k=f;k&&q.push(\"'\"+(\"string\"==typeof h[b]?h[b]:b)+\"':function(_z){\"+f+\"=_z}\")}g&&(e=\"function(){return \"+e+\" }\");p.push(\"'\"+b+\"':\"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B=\"string\"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,\na.value)});q.length&&l(\"_ko_property_writers\",\"{\"+q.join(\",\")+\" }\");return p.join(\",\")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get(\"_ko_property_writers\"))&&b[d])b[d](e)}}}();a.b(\"expressionRewriting\",a.m);a.b(\"expressionRewriting.bindingRewriteValidators\",a.m.Ra);a.b(\"expressionRewriting.parseObjectLiteral\",a.m.ac);a.b(\"expressionRewriting.preProcessBindings\",a.m.vb);a.b(\"expressionRewriting._twoWayBindings\",\na.m.wa);a.b(\"jsonExpressionRewriting\",a.m);a.b(\"jsonExpressionRewriting.insertPropertyAccessorsIntoJson\",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error(\"Cannot find closing comment tag to match: \"+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?\n0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&\"\\x3c!--test--\\x3e\"===w.createComment(\"test\").text,g=f?/^\\x3c!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*--\\x3e$/:/^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/,h=f?/^\\x3c!--\\s*\\/ko\\s*--\\x3e$/:/^\\s*\\/ko\\s*$/,m={ul:!0,ol:!0},k=\"__ko_matchedEndComment__\";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=\nc.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error(\"Found invalid end comment, as the first child of \"+\na);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error(\"Found end comment without a matching opening comment, as child of \"+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=\ng:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b(\"virtualElements\",a.h);a.b(\"virtualElements.allowedBindings\",a.h.ea);a.b(\"virtualElements.emptyNode\",a.h.Ea);a.b(\"virtualElements.insertAfter\",a.h.Wb);a.b(\"virtualElements.prepend\",a.h.Vc);a.b(\"virtualElements.setDomNodeChildren\",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=\nb.getAttribute(\"data-bind\")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute(\"data-bind\");case 8:return a.h.Vd(b);default:return null}},\nparseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||\"\"),h;if(!(h=f[g])){var m,k=\"with($context){with($data||{}){return{\"+a.m.vb(b,e)+\"}}}\";m=new Function(\"$context\",\"$element\",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message=\"Unable to parse bindings.\\nBindings value: \"+b+\"\\nMessage: \"+l.message,l;}}});a.ga.instance=new a.ga})();a.b(\"bindingProvider\",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=\nd;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return\"function\"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);\nd=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error(\"Cannot combine the following bindings, because they have a cyclic dependency: \"+e.join(\", \"));\nca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error(\"You cannot apply bindings multiple times to the same element.\");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&\"function\"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():\ng,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error(\"The binding '\"+\nf+\"' cannot be used with virtual elements\");try{\"function\"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error(\"Multiple bindings (\"+u+\" and \"+f+\") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\");u=f}}),\"function\"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding \"'+f+\": \"+g[f]+'\"\\nMessage: '+k.message,\nk;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da(\"_subscribable\"),x=a.a.Da(\"_ancestorBindingInfo\"),B=a.a.Da(\"_dataDependency\");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=\nb,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p=\"function\"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&\"object\"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f=\"function\"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,\nthis,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,\"function\"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=\nnull,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:\"childrenComplete\",pa:\"descendantsComplete\",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error(\"descendantsComplete event not supported for bindings on this node\");\n},Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error(\"ko.applyBindings: could not find document.body; has the document been loaded?\");\n}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b(\"bindingHandlers\",a.c);a.b(\"bindingEvent\",a.i);a.b(\"bindingEvent.subscribe\",a.i.subscribe);a.b(\"bindingEvent.startPossiblyAsyncContentBinding\",a.i.Cb);a.b(\"applyBindings\",a.vc);a.b(\"applyBindingsToDescendants\",a.Oa);\na.b(\"applyBindingAccessorsToNode\",a.ib);a.b(\"applyBindingsToNode\",a.ld);a.b(\"contextFor\",a.Dc);a.b(\"dataFor\",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e(\"getConfig\",[a],function(c){c?e(\"loadComponent\",[a,c],function(a){b(a,\nc)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error(\"Component loaders must supply values by invoking the callback, not by returning values synchronously.\");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):\na.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b(\"components\",a.j);a.b(\"components.get\",a.j.get);a.b(\"components.clearCachedDefinition\",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc(\"loadTemplate\",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc(\"loadViewModel\",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if(\"function\"===typeof b)d(function(a){return new b(a)});\nelse if(\"function\"===typeof b[m])d(b[m]);else if(\"instance\"in b){var e=b.instance;d(function(){return e})}else\"viewModel\"in b?c(a,b.viewModel,d):a(\"Unknown viewModel value: \"+b)}function d(b){switch(a.a.R(b)){case \"script\":return a.a.ua(b.text);case \"textarea\":return a.a.ua(b.value);case \"template\":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){\"string\"===typeof b.require?\nT||A.require?(T||A.require)([b.require],function(a){a&&\"object\"===typeof a&&a.Xd&&a[\"default\"]&&(a=a[\"default\"]);c(a)}):a(\"Uses require, but no AMD loader is present\"):c(b)}function g(a){return function(b){throw Error(\"Component '\"+a+\"': \"+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error(\"Invalid configuration for \"+b);if(a.j.tb(b))throw Error(\"Component \"+b+\" is already registered\");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];\na.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if(\"string\"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if(\"string\"===typeof c){var h=w.getElementById(c);h?f(d(h)):b(\"Cannot find element with ID \"+c)}else b(\"Unknown element type: \"+\nc);else b(\"Unknown template value: \"+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m=\"createViewModel\";a.b(\"components.register\",a.j.register);a.b(\"components.isRegistered\",a.j.tb);a.b(\"components.unregister\",a.j.unregister);a.b(\"components.defaultLoader\",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute(\"params\");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,\nfunction(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,\"$raw\")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf(\"-\")||\"[object HTMLUnknownElement]\"==\"\"+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the \"component\" binding on a custom element matching a component');\nvar m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error(\"Component '\"+b+\"' has no template\");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,\nb,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;\"function\"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;\"string\"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error(\"No component name specified\");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error(\"Unknown component '\"+h+\"'\");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});\nd=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={\"class\":\"className\",\"for\":\"htmlFor\"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(\":\"),g=\"lookupNamespaceURI\"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===\nd||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));\"name\"===c&&a.a.Yc(b,h?\"\":d)})}};(function(){a.c.checked={after:[\"value\",\"attr\"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,\nd,\"checked\",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has(\"checkedValue\"))return a.a.f(d.get(\"checkedValue\"));if(q)return d.has(\"value\")?a.a.f(d.get(\"value\")):b.value}),h=\"checkbox\"==b.type,m=\"radio\"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,\"click\",e);a.o(f,null,{l:b});\nk=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c[\"class\"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&\"object\"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c[\"class\"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute(\"disabled\"):d||b.disabled||(b.disabled=!0)}};a.c.disable=\n{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){\"string\"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+\"Bubble\")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);\nif(!d||\"number\"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=\n!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if(\"activeElement\"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,\"hasfocus\",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,\"focus\",f);a.a.B(b,\"focusin\",f);a.a.B(b,\"blur\",g);a.a.B(b,\"focusout\",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===\nd||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?\"focusin\":\"focusout\"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus=\"hasfocus\";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get(\"as\");var u=h.get(\"noChildContext\");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=\n\"render\"==h.get(\"completeOn\"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext(\"function\"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b(\"if\");b(\"ifnot\",!1,!0);b(\"with\",!0)})();a.c.let={init:function(b,\nc,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if(\"select\"!==a.a.R(b))throw Error(\"options binding applies only to SELECT elements\");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return\"function\"==d?b(a):\"string\"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=\n0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,\"change\"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get(\"valueAllowUnset\")&&d.has(\"value\"),p=d.get(\"optionsIncludeDestroyed\");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&(\"undefined\"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has(\"optionsCaption\")&&(k=a.a.f(d.get(\"optionsCaption\")),null!==\nk&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has(\"optionsAfterRender\")&&\"function\"==typeof d.get(\"optionsAfterRender\")&&(k=function(b,c){g(0,c);a.u.G(d.get(\"optionsAfterRender\"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement(\"option\");c===Q?(a.a.Bb(e,d.get(\"optionsCaption\")),a.w.cb(e,n)):(g=f(c,d.get(\"optionsValue\"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get(\"optionsText\"),g),\na.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,\"change\"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName(\"option\"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,\"selectedOptions\",\nf)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&\"number\"==typeof d.length&&a.a.D(b.getElementsByTagName(\"option\"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if(\"select\"!=a.a.R(b))throw Error(\"selectedOptions binding applies only to SELECT elements\");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,\"change\",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||\n{});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d=\"\";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+\"px\")}})}};a.c.submit={init:function(b,c,d,e,f){if(\"function\"!=typeof c())throw Error(\"The value for a submit binding must be a function\");a.a.B(b,\"submit\",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?\na.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\\/([^ ]+)$/)))||b(c.match(/Chrome\\/([^ ]+)/))||(e=b(c.match(/Version\\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||\n(g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,\"selectionchange\",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d=\"\";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,\n4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,\"textInput\",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l(\"keypress\",z);11>g&&l(\"propertychange\",function(a){y||\"value\"!==a.propertyName||A(a)});8==g&&(l(\"keyup\",z),l(\"keydown\",z));p&&(p(b,A),l(\"dragend\",r));(!g||9<=g)&&l(\"input\",A);5>e&&\"textarea\"===a.a.R(b)?(l(\"keydown\",r),l(\"paste\",r),l(\"cut\",r)):11>d?l(\"keydown\",r):4>f?(l(\"DOMAutoComplete\",z),l(\"dragdrop\",z),l(\"drop\",z)):h&&\"number\"===b.type&&l(\"keydown\",r);l(\"change\",\nz);l(\"blur\",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c(\"textInput\",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d=\"ko_unique_\"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has(\"as\")&&(g={as:d.get(\"as\"),noChildContext:d.get(\"noChildContext\")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f=\"input\"==\ne;if(!f||\"checkbox\"!=b.type&&\"radio\"!=b.type){var g=[],h=d.get(\"valueUpdate\"),m=!1,k=null;h&&(\"string\"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,\"change\"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,\"value\",f)};!a.a.W||!f||\"text\"!=b.type||\"off\"==b.autocomplete||b.form&&\"off\"==b.form.autocomplete||-1!=a.a.A(g,\"propertychange\")||(a.a.B(b,\"propertychange\",function(){m=!0}),a.a.B(b,\"focus\",function(){m=!1}),a.a.B(b,\"blur\",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,\"after\")&&\n(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&\"file\"==b.type?function(){var d=a.a.f(c());null===d||d===n||\"\"===d?b.value=\"\":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)\"select\"===e?(g=d.get(\"valueAllowUnset\"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if(\"select\"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get(\"valueAllowUnset\")?p():l():(a.a.B(b,\"change\",l),q=a.o(p,null,{l:b}))},\nnull,{notifyImmediately:!0})}else a.a.B(b,\"change\",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e=\"none\"!=b.style.display;d&&!e?b.style.display=\"\":!d&&e&&(b.style.display=\"none\")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})(\"click\");\na.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error(\"Override renderTemplateSource\");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error(\"Override createJavaScriptEvaluatorBlock\");};a.ca.prototype.makeTemplateSource=function(b,c){if(\"string\"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error(\"Cannot find template with ID \"+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error(\"Unknown template type: \"+b);};a.ca.prototype.renderTemplate=\nfunction(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data(\"isRewritten\")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data(\"isRewritten\",!0)};a.b(\"templateEngine\",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,\nl)){var p=m[l];if(\"function\"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error(\"This template engine does not support the '\"+l+\"' binding within its templates\");}}d=\"ko.__tr_ambtns(function($context,$element){return(function(){return{ \"+a.m.vb(b,{valueAccessors:!0})+\" } })()},'\"+d.toLowerCase()+\"')\";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\\d*)(?:\\s+(?!data-bind\\s*=\\s*)[a-z0-9\\-]+(?:=(?:\\\"[^\\\"]*\\\"|\\'[^\\']*\\'|[^>]*))?)*\\s+)data-bind\\s*=\\s*([\"'])([\\s\\S]*?)\\3/gi,\nd=/\\x3c!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*--\\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,\"\\x3c!-- ko --\\x3e\",\"#comment\",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b(\"__tr_ambtns\",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=\na.a.R(b);this.ab=\"script\"===c?1:\"textarea\"===c?2:\"template\"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?\"text\":2===this.ab?\"value\":\"innerHTML\";if(0==arguments.length)return this.F[b];var c=arguments[0];\"innerHTML\"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+\"_\";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;\nif(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text(\"\");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,\nc,{bb:arguments[0]})};a.b(\"templateSources\",a.C);a.b(\"templateSources.domElement\",a.C.F);a.b(\"templateSources.anonymousTemplate\",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):\n(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if(\"number\"!=typeof f.length||0<f.length&&\"number\"!=typeof f[0].nodeType)throw Error(\"Template engine must return an array of DOM nodes\");n=!1;switch(e){case \"replaceChildren\":a.h.va(b,\nf);n=!0;break;case \"replaceNode\":a.a.Xc(b,f);n=!0;break;case \"ignoreTargetNode\":break;default:throw Error(\"Unknown renderMode: \"+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||\"$data\"]]),\"replaceChildren\"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():\"function\"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error(\"templateEngine must inherit from ko.templateEngine\");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==\nn)throw Error(\"Set a template engine before calling renderTemplate\");t=t||\"replaceChildren\";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);\"replaceNode\"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&\"replaceNode\"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,\"replaceNode\")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}\nfunction r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+\"Index\"]=c)}});var d=f(b,a,v);return e(h,\"ignoreTargetNode\",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];\"undefined\"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||\n!a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,\"arrayChange\");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if(\"string\"==typeof d||\"name\"in d)a.h.Ea(b);else if(\"nodes\"in d){d=d.nodes||[];if(a.O(d))throw Error('The \"nodes\" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=\na.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error(\"Anonymous template defined, but no template content was provided\");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;\"string\"==typeof c?c={}:(g=\"name\"in c?c.name:b,\"if\"in c&&(d=a.a.f(c[\"if\"])),d&&\"ifnot\"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));\"foreach\"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,\"data\"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),\ne=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&\"function\"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,\"name\")?null:\"This template engine does not support anonymous templates nested within its templates\"};a.h.ea.template=!0})();a.b(\"setTemplateEngine\",a.gc);a.b(\"renderTemplate\",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===\nm.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):\n(--q,--l,g.sparse||h.push({status:\"retained\",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e=\"boolean\"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,\"added\",\"deleted\",e):b(d,a,\"deleted\",\"added\",e)}}();a.b(\"utils.compareArrays\",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});\nreturn{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];\"undefined\"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=\na.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case \"deleted\":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case \"added\":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,\nh.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);\nq(h.afterAdd,F)}})();a.b(\"utils.setDomNodeChildrenFromArrayMapping\",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b(\"nativeTemplateEngine\",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf(\"__\"))return 2}catch(a){}return 1}();\nthis.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\");var h=b.data(\"precompiled\");h||(h=b.text()||\"\",h=v.template(null,\"{{ko_with $item.koBindingContext}}\"+h+\"{{/ko_with}}\"),b.data(\"precompiled\",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement(\"div\"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return\"{{ko_code ((function() { return \"+\na+\" })()) }}\"};this.addTemplate=function(a,b){w.write(\"<script type='text/html' id='\"+a+\"'>\"+b+\"\\x3c/script>\")};0<a&&(v.tmpl.tag.ko_code={open:\"__.push($1 || '');\"},v.tmpl.tag.ko_with={open:\"with($1) {\",close:\"} \"})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b(\"jqueryTmplTemplateEngine\",a.$a)})()})})();})();\n\n})();\n\n// Avoid polluting the global scope.\nvar knockout = ko;\nif (typeof window !== 'undefined') {\n ko = window.ko;\n if (typeof oldValue !== 'undefined') {\n window.ko = oldValue;\n } else {\n delete window.ko;\n }\n} else {\n ko = global.ko;\n if (typeof oldValue !== 'undefined') {\n global.ko = oldValue;\n } else {\n delete global.ko;\n }\n}\n\nexport default knockout;\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Alignment along the horizontal axis. */\nexport var Alignment = {\n CENTER: \"center\",\n LEFT: \"left\",\n RIGHT: \"right\",\n};\n//# sourceMappingURL=alignment.js.map","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { Classes } from \"@blueprintjs/core\";\n// This class expects a single, non-string child.\nvar LoadableContent = /** @class */ (function (_super) {\n __extends(LoadableContent, _super);\n function LoadableContent(props) {\n var _this = _super.call(this, props) || this;\n _this.style = _this.calculateStyle(props.variableLength);\n return _this;\n }\n LoadableContent.prototype.componentDidUpdate = function (prevProps) {\n if ((!prevProps.loading && this.props.loading) || prevProps.variableLength !== this.props.variableLength) {\n this.style = this.calculateStyle(this.props.variableLength);\n }\n };\n LoadableContent.prototype.render = function () {\n if (this.props.loading) {\n return React.createElement(\"div\", { className: Classes.SKELETON, style: this.style });\n }\n return React.Children.only(this.props.children);\n };\n LoadableContent.prototype.calculateStyle = function (variableLength) {\n var skeletonLength = variableLength ? 75 - Math.floor(Math.random() * 11) * 5 : 100;\n return { width: skeletonLength + \"%\" };\n };\n return LoadableContent;\n}(React.PureComponent));\nexport { LoadableContent };\n//# sourceMappingURL=loadableContent.js.map","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from \"react\";\n/**\n * Returns true if `node` is null/undefined, false, empty string, or an array\n * composed of those. If `node` is an array, only one level of the array is\n * checked, for performance reasons.\n */\nexport function isReactNodeEmpty(node, skipArray) {\n if (skipArray === void 0) { skipArray = false; }\n return (node == null ||\n node === \"\" ||\n node === false ||\n (!skipArray &&\n Array.isArray(node) &&\n // only recurse one level through arrays, for performance\n (node.length === 0 || node.every(function (n) { return isReactNodeEmpty(n, true); }))));\n}\n/**\n * Converts a React node to an element: non-empty string or number or\n * `React.Fragment` (React 16.3+) is wrapped in given tag name; empty strings\n * and booleans are discarded.\n */\nexport function ensureElement(child, tagName) {\n if (tagName === void 0) { tagName = \"span\"; }\n if (child == null || typeof child === \"boolean\") {\n return undefined;\n }\n else if (typeof child === \"string\") {\n // cull whitespace strings\n return child.trim().length > 0 ? React.createElement(tagName, {}, child) : undefined;\n }\n else if (typeof child === \"number\" || typeof child.type === \"symbol\" || Array.isArray(child)) {\n // React.Fragment has a symbol type, ReactNodeArray extends from Array\n return React.createElement(tagName, {}, child);\n }\n else if (isReactElement(child)) {\n return child;\n }\n else {\n // child is inferred as {}\n return undefined;\n }\n}\nexport function isReactElement(child) {\n return (typeof child === \"object\" &&\n typeof child.type !== \"undefined\" &&\n typeof child.props !== \"undefined\");\n}\nexport function getDisplayName(ComponentClass) {\n return ComponentClass.displayName || ComponentClass.name || \"Unknown\";\n}\n/**\n * Returns true if the given JSX element matches the given component type.\n *\n * NOTE: This function only checks equality of `displayName` for performance and\n * to tolerate multiple minor versions of a component being included in one\n * application bundle.\n * @param element JSX element in question\n * @param ComponentType desired component type of element\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isElementOfType(element, ComponentType) {\n return (element != null &&\n element.type != null &&\n element.type.displayName != null &&\n element.type.displayName === ComponentType.displayName);\n}\n//# sourceMappingURL=reactUtils.js.map","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict'\n\nvar assign = Object.assign\n\nmodule.exports = assign\n","'use strict'\n\nvar sizeChunks = require('./size-chunks.js')\n\nfunction prefixSize(events, type) {\n var tail = events[events.length - 1]\n if (!tail || tail[1].type !== type) return 0\n return sizeChunks(tail[2].sliceStream(tail[1]))\n}\n\nmodule.exports = prefixSize\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\nmodule.exports = asciiAlphanumeric\n","'use strict'\n\nmodule.exports = wrap\n\nvar u = require('unist-builder')\n\n// Wrap `nodes` with line feeds between each entry.\n// Optionally adds line feeds at the start and end.\nfunction wrap(nodes, loose) {\n var result = []\n var index = -1\n var length = nodes.length\n\n if (loose) {\n result.push(u('text', '\\n'))\n }\n\n while (++index < length) {\n if (index) {\n result.push(u('text', '\\n'))\n }\n\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push(u('text', '\\n'))\n }\n\n return result\n}\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A singleton that contains all of the servers that are trusted. Credentials will be sent with\n * any requests to these servers.\n *\n * @namespace TrustedServers\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nvar TrustedServers = {};\nvar _servers = {};\n\n/**\n * Adds a trusted server to the registry\n *\n * @param {String} host The host to be added.\n * @param {Number} port The port used to access the host.\n *\n * @example\n * // Add a trusted server\n * TrustedServers.add('my.server.com', 80);\n */\nTrustedServers.add = function (host, port) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(host)) {\n throw new DeveloperError(\"host is required.\");\n }\n if (!defined(port) || port <= 0) {\n throw new DeveloperError(\"port is required to be greater than 0.\");\n }\n //>>includeEnd('debug');\n\n var authority = host.toLowerCase() + \":\" + port;\n if (!defined(_servers[authority])) {\n _servers[authority] = true;\n }\n};\n\n/**\n * Removes a trusted server from the registry\n *\n * @param {String} host The host to be removed.\n * @param {Number} port The port used to access the host.\n *\n * @example\n * // Remove a trusted server\n * TrustedServers.remove('my.server.com', 80);\n */\nTrustedServers.remove = function (host, port) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(host)) {\n throw new DeveloperError(\"host is required.\");\n }\n if (!defined(port) || port <= 0) {\n throw new DeveloperError(\"port is required to be greater than 0.\");\n }\n //>>includeEnd('debug');\n\n var authority = host.toLowerCase() + \":\" + port;\n if (defined(_servers[authority])) {\n delete _servers[authority];\n }\n};\n\nfunction getAuthority(url) {\n var uri = new Uri(url);\n uri.normalize();\n\n // Removes username:password@ so we just have host[:port]\n var authority = uri.getAuthority();\n if (!defined(authority)) {\n return undefined; // Relative URL\n }\n\n if (authority.indexOf(\"@\") !== -1) {\n var parts = authority.split(\"@\");\n authority = parts[1];\n }\n\n // If the port is missing add one based on the scheme\n if (authority.indexOf(\":\") === -1) {\n var scheme = uri.getScheme();\n if (!defined(scheme)) {\n scheme = window.location.protocol;\n scheme = scheme.substring(0, scheme.length - 1);\n }\n if (scheme === \"http\") {\n authority += \":80\";\n } else if (scheme === \"https\") {\n authority += \":443\";\n } else {\n return undefined;\n }\n }\n\n return authority;\n}\n\n/**\n * Tests whether a server is trusted or not. The server must have been added with the port if it is included in the url.\n *\n * @param {String} url The url to be tested against the trusted list\n *\n * @returns {boolean} Returns true if url is trusted, false otherwise.\n *\n * @example\n * // Add server\n * TrustedServers.add('my.server.com', 81);\n *\n * // Check if server is trusted\n * if (TrustedServers.contains('https://my.server.com:81/path/to/file.png')) {\n * // my.server.com:81 is trusted\n * }\n * if (TrustedServers.contains('https://my.server.com/path/to/file.png')) {\n * // my.server.com isn't trusted\n * }\n */\nTrustedServers.contains = function (url) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(url)) {\n throw new DeveloperError(\"url is required.\");\n }\n //>>includeEnd('debug');\n var authority = getAuthority(url);\n if (defined(authority) && defined(_servers[authority])) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Clears the registry\n *\n * @example\n * // Remove a trusted server\n * TrustedServers.clear();\n */\nTrustedServers.clear = function () {\n _servers = {};\n};\nexport default TrustedServers;\n","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n */\nexport var IconSvgPaths16 = {\n \"add\": [\"M10.99 6.99h-2v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z\"],\n \"add-column-left\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 14H2V2h8v12zm4 0h-3V2h3v12zM4 9h1v1c0 .55.45 1 1 1s1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1H7V6c0-.55-.45-1-1-1s-1 .45-1 1v1H4c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"add-column-right\": [\"M8 9h1v1c0 .55.45 1 1 1s1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V6c0-.55-.45-1-1-1s-1 .45-1 1v1H8c-.55 0-1 .45-1 1s.45 1 1 1zm7-9H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 14H2V2h3v12zm9 0H6V2h8v12z\"],\n \"add-row-bottom\": [\"M6 11h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1H9V8c0-.55-.45-1-1-1s-1 .45-1 1v1H6c-.55 0-1 .45-1 1s.45 1 1 1zm9-11H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V6h12v8zm0-9H2V2h12v3z\"],\n \"add-row-top\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2v-3h12v3zm0-4H2V2h12v8zM6 7h1v1c0 .55.45 1 1 1s1-.45 1-1V7h1c.55 0 1-.45 1-1s-.45-1-1-1H9V4c0-.55-.45-1-1-1s-1 .45-1 1v1H6c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"add-to-artifact\": [\"M14 4.01h-1v-1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1 0-.56-.45-1-1-1zm-13 2h6c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm8 6H1c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1 0-.56-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1 0-.56-.45-1-1-1z\"],\n \"add-to-folder\": [\"M.01 7V5H16v7c0 .55-.45 1-1 1H9.005v-2.99C8.974 8.332 7.644 7 5.996 7H.01zM15 2H7.416L5.706.29a.996.996 0 00-.71-.29H1C.45 0 0 .45 0 1v3h15.99V3c.01-.55-.44-1-.99-1zM5.997 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.589L.3 14.29a1.003 1.003 0 001.42 1.42l3.287-3.29v1.59c0 .55.45 1 1 1 .549 0 .999-.45.999-1v-4A1.02 1.02 0 005.996 9z\"],\n \"airplane\": [\"M16 1.5A1.498 1.498 0 0013.44.44L9.91 3.97 2 1 1 3l5.93 3.95L3.88 10H1l-1 1 3 2 2 3 1-1v-2.88l3.05-3.05L13 15l2-1-2.97-7.91 3.53-3.53c.27-.27.44-.65.44-1.06z\"],\n \"align-center\": [\"M4 4c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H4zM1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm13 10H2c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm1-6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-5 5c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1h4z\"],\n \"align-justify\": [\"M15 12.98H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-14-10h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1 0 .56.45 1 1 1zm14 4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-3H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0 6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"align-left\": [\"M13 13H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zM1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 3h8c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 12h4c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"align-right\": [\"M15 12.98H3c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm-14-10h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1 0 .56.45 1 1 1zm14 1H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0 6h-4c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1zm0-3H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"alignment-bottom\": [\"M10 12h3c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm5 2H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h3c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1z\"],\n \"alignment-horizontal-center\": [\"M15 7h-1V6c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v1H7V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v4H1c-.55 0-1 .45-1 1s.45 1 1 1h1v4c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V9h2v1c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V9h1c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"alignment-left\": [\"M9 9H5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zM1 0C.45 0 0 .45 0 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm13 2H5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"alignment-right\": [\"M11 9H7c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zm4-9c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-4 2H2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"alignment-top\": [\"M15 0H1C.45 0 0 .45 0 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM6 4H3c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm7 0h-3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"alignment-vertical-center\": [\"M13 2H9V1c0-.55-.45-1-1-1S7 .45 7 1v1H3c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h4v2H6c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1H9V7h4c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"annotation\": [\"M15.52 2.77c.3-.29.48-.7.48-1.15C16 .73 15.27 0 14.38 0c-.45 0-.85.18-1.15.48l-1.34 1.34 2.3 2.3 1.33-1.35zM7.4 10.9l6.21-6.21-2.3-2.3L5.1 8.6l2.3 2.3zM14 14H2V2h6.34l2-2H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5.66l-2 2V14zM3 13l3.58-1.29-2.29-2.27L3 13z\"],\n \"app-header\": [\"M15 0a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h14zM6 4a1 1 0 00-1.993-.117L4 4v8a1 1 0 001.993.117L6 12V9h4v3a1 1 0 001.993.117L12 12V4a1 1 0 00-1.993-.117L10 4v3H6V4z\"],\n \"application\": [\"M3.5 7h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5zM15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm-1 12H2V5h12v8zM3.5 9h4c.28 0 .5-.22.5-.5S7.78 8 7.5 8h-4c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5z\"],\n \"applications\": [\"M3.5 11h2c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-2c-.28 0-.5.22-.5.5s.22.5.5.5zm0-2h5c.28 0 .5-.22.5-.5S8.78 8 8.5 8h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM11 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V7h8v7zm5-14H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM3.5 13h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-3c-.28 0-.5.22-.5.5s.22.5.5.5z\"],\n \"archive\": [\"M13.382 0a1 1 0 01.894.553L16 4v11a1 1 0 01-1 1H1a1 1 0 01-1-1V4L1.724.553A1 1 0 012.618 0h10.764zM8 6c-.55 0-1 .45-1 1v2.59l-.29-.29-.081-.076A.97.97 0 006 9a1.003 1.003 0 00-.71 1.71l2 2 .096.084c.168.13.38.206.614.206.28 0 .53-.11.71-.29l2-2 .084-.096A1.003 1.003 0 009.29 9.29l-.29.3V7l-.007-.116A1.004 1.004 0 008 6zm5-4H3L2 4h12l-1-2z\"],\n \"arrow-bottom-left\": [\"M14 3a1.003 1.003 0 00-1.71-.71L4 10.59V6c0-.55-.45-1-1-1s-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1H5.41l8.29-8.29c.19-.18.3-.43.3-.71z\"],\n \"arrow-bottom-right\": [\"M13 5c-.55 0-1 .45-1 1v4.59l-8.29-8.3a1.003 1.003 0 00-1.42 1.42l8.3 8.29H6c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z\"],\n \"arrow-down\": [\"M13 8c-.3 0-.5.1-.7.3L9 11.6V2c0-.5-.4-1-1-1s-1 .5-1 1v9.6L3.7 8.3C3.5 8.1 3.3 8 3 8c-.5 0-1 .5-1 1 0 .3.1.5.3.7l5 5c.2.2.4.3.7.3s.5-.1.7-.3l5-5c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1z\"],\n \"arrow-left\": [\"M13.99 6.99H4.41L7.7 3.7a1.003 1.003 0 00-1.42-1.42l-5 5a1.014 1.014 0 000 1.42l5 5a1.003 1.003 0 001.42-1.42L4.41 8.99H14c.55 0 1-.45 1-1s-.46-1-1.01-1z\"],\n \"arrow-right\": [\"M14.7 7.29l-5-5a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l3.29 3.29H1.99c-.55 0-1 .45-1 1s.45 1 1 1h9.59l-3.29 3.29a1.003 1.003 0 001.42 1.42l5-5c.18-.18.29-.43.29-.71s-.12-.52-.3-.7z\"],\n \"arrow-top-left\": [\"M13.71 12.29L5.41 4H10c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V5.41l8.29 8.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"arrow-top-right\": [\"M13 2H6c-.55 0-1 .45-1 1s.45 1 1 1h4.59L2.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L12 5.41V10c0 .55.45 1 1 1s1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"arrow-up\": [\"M13.7 6.3l-5-5C8.5 1.1 8.3 1 8 1s-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L7 4.4V14c0 .6.4 1 1 1s1-.4 1-1V4.4l3.3 3.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7z\"],\n \"arrows-horizontal\": [\"M15.7 7.3l-4-4c-.2-.2-.4-.3-.7-.3-.6 0-1 .5-1 1 0 .3.1.5.3.7L12.6 7H3.4l2.3-2.3c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1-.3 0-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7s.1.5.3.7l4 4c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7L3.4 9h9.2l-2.3 2.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l4-4c.2-.2.3-.4.3-.7s-.1-.5-.3-.7z\"],\n \"arrows-vertical\": [\"M12 10c-.3 0-.5.1-.7.3L9 12.6V3.4l2.3 2.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7l-4-4C8.5.1 8.3 0 8 0s-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L7 3.4v9.2l-2.3-2.3c-.2-.2-.4-.3-.7-.3-.5 0-1 .4-1 1 0 .3.1.5.3.7l4 4c.2.2.4.3.7.3s.5-.1.7-.3l4-4c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1z\"],\n \"asterisk\": [\"M14.54 11.18l.01-.02L9.8 8l4.75-3.17-.01-.02c.27-.17.46-.46.46-.81 0-.55-.45-1-1-1-.21 0-.39.08-.54.18l-.01-.02L9 6.13V1c0-.55-.45-1-1-1S7 .45 7 1v5.13L2.55 3.17l-.01.01A.969.969 0 002 3c-.55 0-1 .45-1 1 0 .35.19.64.46.82l-.01.01L6.2 8l-4.75 3.17.01.02c-.27.17-.46.46-.46.81 0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02L7 9.87V15c0 .55.45 1 1 1s1-.45 1-1V9.87l4.45 2.96.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1 0-.35-.19-.64-.46-.82z\"],\n \"automatic-updates\": [\"M8 14c-3.31 0-6-2.69-6-6 0-1.77.78-3.36 2-4.46V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1h1.74A7.95 7.95 0 000 8c0 4.42 3.58 8 8 8 .55 0 1-.45 1-1s-.45-1-1-1zM8 2a5.9 5.9 0 012.95.81l1.47-1.47A7.893 7.893 0 008 0c-.55 0-1 .45-1 1s.45 1 1 1zm2.71 6.71l5-5a1.003 1.003 0 00-1.42-1.42L10 6.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29s.53-.11.71-.29zM16 8c0-.55-.06-1.08-.16-1.6l-1.87 1.87A5.966 5.966 0 0112 12.45V11c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-1.74A7.95 7.95 0 0016 8z\"],\n \"backlink\": [\"M14 10a1 1 0 110 2h-.585l2.292 2.293a1 1 0 01-1.32 1.497l-.094-.083L12 13.415V14a1 1 0 11-2 0l.003-3.075.012-.1.012-.059.033-.108.034-.081.052-.098.067-.096.08-.09a1.01 1.01 0 01.112-.097l.11-.071.143-.065.076-.024.091-.02.116-.014L14 10zM6.036 6.136l-3.45 3.45-.117.127a2 2 0 002.818 2.818l.127-.117 3.45-3.449a4 4 0 01-.885 3.704l-.15.16-1 1A4 4 0 011.02 8.33l.15-.16 1-1a3.998 3.998 0 013.865-1.035zm4.671-1.843a1 1 0 01.083 1.32l-.083.094-5 5a1 1 0 01-1.497-1.32l.083-.094 5-5a1 1 0 011.414 0zm3.121-3.121a4 4 0 01.151 5.497l-.15.16-1 1a3.998 3.998 0 01-3.864 1.036l3.45-3.45.116-.128a2 2 0 00-2.818-2.818l-.127.117-3.45 3.45A4 4 0 017.02 2.33l.15-.16 1-1a4 4 0 015.657 0z\"],\n \"badge\": [\"M13.36 4.59c-.15-1.13.5-2.01 1.1-2.87L13.43.53c-1.72.88-4.12.65-5.63-.53-1.51 1.18-3.91 1.41-5.63.52l-1.03 1.2c.61.86 1.25 1.74 1.1 2.87-.3 2.29-2.45 4.17-1.32 6.68.45 1.14 1.44 1.9 2.72 2.2 1.56.36 3.52.72 4.16 2.53.64-1.81 2.6-2.16 4.16-2.54 1.28-.3 2.27-1.06 2.72-2.2 1.12-2.5-1.03-4.38-1.32-6.67z\"],\n \"ban-circle\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm3 9H5c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1z\"],\n \"bank-account\": [\"M15.36 6.46l-.62-.14c-.31-1.12-.98-2.15-1.87-2.99l.4-1.77a.438.438 0 00-.49-.56c-.85.09-1.6.42-2.14.98-.84-.32-1.87-.51-2.85-.51-2.49 0-4.63 1.17-5.92 2.89-.18-.04-.36-.09-.53-.09-.76 0-1.34.61-1.34 1.4 0 .56.31 1.03.76 1.26-.05.33-.09.7-.09 1.07 0 1.68.71 3.17 1.83 4.34l-.27 1.59c-.09.56.35 1.07.89 1.07h.58c.45 0 .8-.33.89-.79l.04-.37c.94.42 2 .7 3.16.7 1.11 0 2.23-.23 3.16-.7l.05.37c.09.47.45.79.89.79h.58c.53 0 .98-.51.89-1.07l-.27-1.54c.62-.61 1.07-1.35 1.38-2.15l.8-.19c.4-.09.71-.47.71-.93V7.4c.09-.47-.22-.84-.62-.94zM12 8c-.6 0-1-.7-1-1.5S11.4 5 12 5s1 .7 1 1.5S12.6 8 12 8zM6.21 4.92c-.41.2-.91.04-1.12-.36-.21-.4-.04-.88.37-1.07 1.35-.65 2.73-.65 4.08 0 .41.2.58.68.37 1.07-.21.4-.71.56-1.12.36-.87-.43-1.71-.43-2.58 0z\"],\n \"barcode\": [\"M0 14h2V2H0v12zm6 0h1V2H6v12zm2 0h1V2H8v12zm-5 0h2V2H3v12zM15 2v12h1V2h-1zm-5 12h1V2h-1v12zm2 0h2V2h-2v12z\"],\n \"blank\": [],\n \"blocked-person\": [\"M9.39 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.07-.01-.13-.02-.2.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.13-.39.27-.06.43-.36.5-.63.01-.03.03-.08.05-.12C8.18 7.8 6.94 6.04 6.94 4c0-.32.04-.62.09-.92-.17-.03-.35-.08-.51-.08-.65 0-1.37.2-1.88.59-.5.38-.87.92-1.05 1.51-.04.14-.07.27-.09.41-.09.48-.14 1.23-.14 1.74v.06c-.19.08-.36.27-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.12 15.5.03 16 .03 16h12.96s.15-.5-.22-1.36c-.37-.85-2.18-1.42-3.38-1.95zM11.97 0C9.75 0 7.94 1.79 7.94 4s1.8 4 4.03 4S16 6.21 16 4s-1.8-4-4.03-4zM9.96 4c0-1.1.9-2 2.01-2 .37 0 .72.11 1.02.28l-2.75 2.73c-.17-.3-.28-.64-.28-1.01zm2.01 2c-.37 0-.72-.11-1.02-.28l2.75-2.73c.18.3.28.64.28 1.01.01 1.1-.9 2-2.01 2z\"],\n \"bold\": [\"M11.7 7c.2-.4.3-1 .3-1.5v-.4V5c0-.1 0-.2-.1-.3v-.1C11.4 3.1 10.1 2 8.5 2H4c-.5 0-1 .4-1 1v10c0 .5.4 1 1 1h5c2.2 0 4-1.8 4-4 0-1.2-.5-2.3-1.3-3zM6 5h2c.6 0 1 .4 1 1s-.4 1-1 1H6V5zm3 6H6V9h3c.6 0 1 .4 1 1s-.4 1-1 1z\"],\n \"book\": [\"M2 1v14c0 .55.45 1 1 1h1V0H3c-.55 0-1 .45-1 1zm11-1h-1v7l-2-2-2 2V0H5v16h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"bookmark\": [\"M11.2.01h-.15C11.03.01 11.02 0 11 0H5c-.02 0-.03.01-.05.01H4.8c-.44 0-.8.37-.8.82v14.75c0 .45.25.56.57.24l2.87-2.94c.31-.32.82-.32 1.13 0l2.87 2.94c.31.32.57.21.57-.24V.83C12 .38 11.64.01 11.2.01z\"],\n \"box\": [\"M6 10h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1zm9.93-4.37v-.02L13.94.63C13.78.26 13.42 0 13 0H3c-.42 0-.78.26-.93.63L.08 5.61l-.01.02C.03 5.74 0 5.87 0 6v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.13-.03-.26-.07-.37zM9 2h3.32l1.2 3H9V2zM3.68 2H7v3H2.48l1.2-3zM14 14H2V7h12v7z\"],\n \"briefcase\": [\"M15 3.98h-3v-2c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v4h3v-1h2v1h6v-1h2v1h3v-4c0-.55-.45-1-1-1zm-5 0H6v-1h4v1zm3 7h-2v-1H5v1H3v-1H0v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-4h-3v1z\"],\n \"bring-data\": [\"M14 14a1 1 0 010 2H2a1 1 0 010-2h12zM7.995 3.005c.55 0 1 .45 1 .999v5.584l1.29-1.288a1.002 1.002 0 011.42 1.419l-3 2.996a1.015 1.015 0 01-1.42 0l-3-2.997A1.002 1.002 0 015.705 8.3l1.29 1.29V4.013c0-.55.45-1.009 1-1.009zM14 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zM8 0a1 1 0 110 2 1 1 0 010-2zM5 0a1 1 0 110 2 1 1 0 010-2zM2 0a1 1 0 110 2 1 1 0 010-2z\"],\n \"build\": [\"M15.39 12.41L7.7 6l1.07-1.1c.34-.34-.12-.63.12-1.26.88-2.17 3.41-2.35 3.41-2.35s.36-.37.71-.72C9.74-.81 7.53.53 6.54 1.4L3.12 4.9l-.71.72c-.39.4-.39 1.05 0 1.45l-.7.72c-.39-.4-1.02-.4-1.41 0s-.39 1.05 0 1.45l1.41 1.45c.39.4 1.02.4 1.41 0s.39-1.05 0-1.45l.71-.72c.39.4 1.02.4 1.41 0l.8-.82 6.39 7.67c.82.82 2.14.82 2.96 0 .81-.82.81-2.15 0-2.96z\"],\n \"calculator\": [\"M13 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM6 14H4v-2h2v2zm0-3H4V9h2v2zm0-3H4V6h2v2zm3 6H7v-2h2v2zm0-3H7V9h2v2zm0-3H7V6h2v2zm3 6h-2V9h2v5zm0-6h-2V6h2v2zm0-3H4V2h8v3z\"],\n \"calendar\": [\"M11 3c.6 0 1-.5 1-1V1c0-.6-.4-1-1-1s-1 .4-1 1v1c0 .5.4 1 1 1zm3-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H6v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h13c.6 0 1-.4 1-1V2c0-.6-.5-1-1-1zM5 13H2v-3h3v3zm0-4H2V6h3v3zm4 4H6v-3h3v3zm0-4H6V6h3v3zm4 4h-3v-3h3v3zm0-4h-3V6h3v3zM4 3c.6 0 1-.5 1-1V1c0-.6-.4-1-1-1S3 .4 3 1v1c0 .5.4 1 1 1z\"],\n \"camera\": [\"M15 3h-2.59L10.7 1.29A.956.956 0 0010 1H6c-.28 0-.53.11-.71.29L3.59 3H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h2.56c1.1 1.22 2.67 2 4.44 2s3.34-.78 4.44-2H15c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM3 6H1V5h2v1zm5 6c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"caret-down\": [\"M12 6.5c0-.28-.22-.5-.5-.5h-7a.495.495 0 00-.37.83l3.5 4c.09.1.22.17.37.17s.28-.07.37-.17l3.5-4c.08-.09.13-.2.13-.33z\"],\n \"caret-left\": [\"M9.5 4c-.13 0-.24.05-.33.13l-4 3.5c-.1.09-.17.22-.17.37s.07.28.17.37l4 3.5a.495.495 0 00.83-.37v-7c0-.28-.22-.5-.5-.5z\"],\n \"caret-right\": [\"M11 8c0-.15-.07-.28-.17-.37l-4-3.5A.495.495 0 006 4.5v7a.495.495 0 00.83.37l4-3.5c.1-.09.17-.22.17-.37z\"],\n \"caret-up\": [\"M11.87 9.17s.01 0 0 0l-3.5-4C8.28 5.07 8.15 5 8 5s-.28.07-.37.17l-3.5 4a.495.495 0 00.37.83h7a.495.495 0 00.37-.83z\"],\n \"cell-tower\": [\"M8.97 6.76c-.01-.05-.04-.08-.06-.13-.02-.05-.03-.1-.05-.15.08-.14.14-.3.14-.48 0-.55-.45-1-1-1s-1 .45-1 1c0 .18.06.34.14.48-.03.05-.03.1-.05.15-.02.05-.05.08-.06.13l-2 8c-.13.54.19 1.08.73 1.21a.995.995 0 001.21-.73L7.53 13h.94l.56 2.24a1 1 0 001.94-.48l-2-8zM3.72 1.7C4.1 1.3 4.09.67 3.7.28S2.67-.09 2.28.3c-3.05 3.12-3.05 8.28 0 11.4a.996.996 0 101.43-1.39c-2.28-2.35-2.28-6.27.01-8.61zM11.6 3.2c-.44-.33-1.07-.24-1.4.2-.33.44-.24 1.07.2 1.4.43.32.53 1.96-.04 2.43-.42.35-.48.98-.13 1.41.35.42.98.48 1.41.13 1.59-1.33 1.39-4.5-.04-5.57z\",\n \"M13.72.3c-.39-.4-1.02-.4-1.41-.02s-.41 1.02-.03 1.42c2.29 2.34 2.29 6.26 0 8.6-.39.39-.38 1.03.02 1.41s1.03.38 1.41-.02c3.05-3.11 3.05-8.27.01-11.39zM5.4 7.23c-.57-.47-.47-2.11-.04-2.43.44-.33.53-.96.2-1.4s-.96-.53-1.4-.2c-1.44 1.07-1.63 4.24-.04 5.57.42.35 1.05.3 1.41-.13.35-.42.29-1.06-.13-1.41z\"],\n \"changes\": [\"M8.29 7.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L13 7.59V1c0-.55-.45-1-1-1s-1 .45-1 1v6.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42zM14.5 13h-13c-.83 0-1.5.67-1.5 1.5S.67 16 1.5 16h13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5zM1 5c.28 0 .53-.11.71-.29L3 3.41V10c0 .55.45 1 1 1s1-.45 1-1V3.41L6.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C4.53.11 4.28 0 4 0s-.53.11-.71.29l-3 3A1.003 1.003 0 001 5z\"],\n \"chart\": [\"M0 15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V9.4L0 11v4zm6-5.5V15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-5l-1 1-3-1.5zM13 7l-1 1v7c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V7.88c-.26.07-.58.12-1 .12-1.96 0-2-1-2-1zm2-6h-3c-.55 0-1 .45-1 1s.45 1 1 1h.59L8.8 6.78 5.45 5.11v.01C5.31 5.05 5.16 5 5 5s-.31.05-.44.11V5.1l-4 2v.01C.23 7.28 0 7.61 0 8c0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L5 7.12 8.55 8.9v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L14 4.41V5c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"chat\": [\"M6 10c-1.1 0-2-.9-2-2V3H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1v2a1.003 1.003 0 001.71.71L5.41 13H10c.55 0 1-.45 1-1v-1.17l-.83-.83H6zm9-10H6c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"chevron-backward\": [\"M7.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L6 6.59V4c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1s1-.45 1-1V9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L7.41 8z\"],\n \"chevron-down\": [\"M12 5c-.28 0-.53.11-.71.29L8 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 5z\"],\n \"chevron-forward\": [\"M10 3c-.55 0-1 .45-1 1v2.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L7.59 8 4.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L9 9.41V12c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"chevron-left\": [\"M7.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C5.11 7.47 5 7.72 5 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L7.41 8z\"],\n \"chevron-right\": [\"M10.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"chevron-up\": [\"M12.71 9.29l-4-4C8.53 5.11 8.28 5 8 5s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 7.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"circle\": [\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z\"],\n \"circle-arrow-down\": [\"M11 7c-.28 0-.53.11-.71.29L9 8.59V5c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 7zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"circle-arrow-left\": [\"M11 7H7.41L8.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C4.11 7.47 4 7.72 4 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L7.41 9H11c.55 0 1-.45 1-1s-.45-1-1-1zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"circle-arrow-right\": [\"M8.71 4.29a1.003 1.003 0 00-1.42 1.42L8.59 7H5c-.55 0-1 .45-1 1s.45 1 1 1h3.59L7.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"circle-arrow-up\": [\"M8.71 4.29C8.53 4.11 8.28 4 8 4s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L7 7.41V11c0 .55.45 1 1 1s1-.45 1-1V7.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"citation\": [\"M15.02 5c0-1.66-1.34-3-3-3s-3 1.34-3 3a2.996 2.996 0 003.6 2.94C12.1 9.76 11.14 11 10.02 11c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5-3.13 5-7 0-.2-.02-.39-.04-.58.01-.14.04-.28.04-.42zm-11-3c-1.66 0-3 1.34-3 3a2.996 2.996 0 003.6 2.94C4.1 9.76 3.14 11 2.02 11c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5-3.13 5-7 0-.2-.02-.39-.04-.58.01-.14.04-.28.04-.42 0-1.66-1.35-3-3-3z\"],\n \"clean\": [\"M12 8l-1.2 2.796-2.8 1.2 2.8 1.197L12 16l1.2-2.807L16 12l-2.8-1.204zM5 0L3.5 3.5 0 4.995 3.5 6.5 5 10l1.5-3.5L10 5 6.5 3.5z\"],\n \"clipboard\": [\"M11 2c0-.55-.45-1-1-1h.22C9.88.4 9.24 0 8.5 0S7.12.4 6.78 1H7c-.55 0-1 .45-1 1v1h5V2zm2 0h-1v2H5V2H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"cloud\": [\"M12 6c-.03 0-.07 0-.1.01A5 5 0 002 7c0 .11.01.22.02.33A3.51 3.51 0 000 10.5C0 12.43 1.57 14 3.5 14H12c2.21 0 4-1.79 4-4s-1.79-4-4-4z\"],\n \"cloud-download\": [\"M11 11c-.28 0-.53.11-.71.29L9 12.59V8c0-.55-.45-1-1-1s-1 .45-1 1v4.59L5.71 11.3A.965.965 0 005 11a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 11zm1-7c-.03 0-.07 0-.1.01A5 5 0 002 5c0 .11.01.22.02.33A3.51 3.51 0 000 8.5c0 1.41.84 2.61 2.03 3.17C2.2 10.17 3.46 9 5 9c.06 0 .13.02.19.02C5.07 8.7 5 8.36 5 8c0-1.66 1.34-3 3-3s3 1.34 3 3c0 .36-.07.7-.19 1.02.06 0 .13-.02.19-.02 1.48 0 2.7 1.07 2.95 2.47A3.964 3.964 0 0016 8c0-2.21-1.79-4-4-4z\"],\n \"cloud-upload\": [\"M8.71 7.29C8.53 7.11 8.28 7 8 7s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L7 10.41V15c0 .55.45 1 1 1s1-.45 1-1v-4.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM12 4c-.03 0-.07 0-.1.01A5 5 0 002 5c0 .11.01.22.02.33a3.495 3.495 0 00.07 6.37c-.05-.23-.09-.46-.09-.7 0-.83.34-1.58.88-2.12l3-3a2.993 2.993 0 014.24 0l3 3c.54.54.88 1.29.88 2.12 0 .16-.02.32-.05.47C15.17 10.78 16 9.5 16 8c0-2.21-1.79-4-4-4z\"],\n \"code\": [\"M15.71 7.29l-3-3a1.003 1.003 0 00-1.42 1.42L13.59 8l-2.29 2.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM5 5a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L2.41 8 4.7 5.71c.19-.18.3-.43.3-.71zm4-3c-.48 0-.87.35-.96.81l-2 10c-.01.06-.04.12-.04.19 0 .55.45 1 1 1 .48 0 .87-.35.96-.81l2-10c.01-.06.04-.12.04-.19 0-.55-.45-1-1-1z\"],\n \"code-block\": [\"M15 3h-2V2c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v1H7V2c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-8.29 8.29a1.003 1.003 0 01-1.42 1.42l-3-3C2.11 9.53 2 9.28 2 9s.11-.53.29-.71l3-3a1.003 1.003 0 011.42 1.42L4.41 9l2.3 2.29zm7-1.58l-3 3a1.003 1.003 0 01-1.42-1.42L11.59 9l-2.3-2.29a1.003 1.003 0 011.42-1.42l3 3c.18.18.29.43.29.71s-.11.53-.29.71z\"],\n \"cog\": [\"M15.19 6.39h-1.85c-.11-.37-.27-.71-.45-1.04l1.36-1.36c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0l-1.36 1.36c-.33-.17-.67-.33-1.04-.44V.79c0-.44-.36-.8-.8-.8h-1.6c-.44 0-.8.36-.8.8v1.86c-.39.12-.75.28-1.1.47l-1.3-1.3c-.3-.3-.79-.3-1.09 0L1.82 2.91c-.3.3-.3.79 0 1.09l1.3 1.3c-.2.34-.36.7-.48 1.09H.79c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.85c.11.37.27.71.45 1.04l-1.36 1.36c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.36-1.36c.33.18.67.33 1.04.44v1.86c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.86c.39-.12.75-.28 1.1-.47l1.3 1.3c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1.3-1.3c.19-.35.36-.71.48-1.1h1.85c.44 0 .8-.36.8-.8v-1.6a.816.816 0 00-.81-.79zm-7.2 4.6c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"],\n \"collapse-all\": [\"M7.29 6.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L8 4.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4zm1.42 2.58C8.53 9.11 8.28 9 8 9s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 11.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z\"],\n \"column-layout\": [\"M15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 13H2V3h2v10zm3 0H5V3h2v10zm7 0H8V3h6v10z\"],\n \"comment\": [\"M14 1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h2v3a1.003 1.003 0 001.71.71L8.41 12H14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM3.5 8C2.67 8 2 7.33 2 6.5S2.67 5 3.5 5 5 5.67 5 6.5 4.33 8 3.5 8zm4 0C6.67 8 6 7.33 6 6.5S6.67 5 7.5 5 9 5.67 9 6.5 8.33 8 7.5 8zm4 0c-.83 0-1.5-.67-1.5-1.5S10.67 5 11.5 5s1.5.67 1.5 1.5S12.33 8 11.5 8z\"],\n \"comparison\": [\"M7.99-.01c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1v-14c0-.55-.45-1-1-1zm-3 3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm10 0h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-4v-2h4v2zm0 3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-4v-2h4v2zm-10-3h-4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z\"],\n \"compass\": [\"M12 8c0 .14-.03.27-.08.39l-3 6.99c-.15.37-.51.62-.92.62s-.77-.25-.92-.61l-3-6.99a1.006 1.006 0 010-.79l3-6.99C7.23.25 7.59 0 8 0s.77.25.92.61l3 6.99c.05.13.08.26.08.4zM8 3.54L6.09 8h3.82L8 3.54z\"],\n \"compressed\": [\"M15.93 5.63v-.02L13.94.63C13.78.26 13.42 0 13 0H3c-.42 0-.78.26-.93.63L.08 5.61l-.01.02C.03 5.74 0 5.87 0 6v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.13-.03-.26-.07-.37zM9 2h3.32l1.2 3H9V2zM3.68 2H7v3H2.48l1.2-3zM14 14H2V7h5v2.59l-1.29-1.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L9 9.59V7h5v7z\"],\n \"confirm\": [\"M8.7 4.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l5-5a1.003 1.003 0 00-1.42-1.42l-4.29 4.3L8.7 4.29zm5.22 3.01c.03.23.07.45.07.69 0 3.31-2.69 6-6 6s-6-2.69-6-6 2.69-6 6-6c.81 0 1.59.17 2.3.46l1.5-1.5A7.998 7.998 0 00-.01 7.99c0 4.42 3.58 8 8 8s8-3.58 8-8c0-.83-.13-1.64-.36-2.39l-1.71 1.7z\"],\n \"console\": [\"M15 15H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h14c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zM14 5H2v8h12V5zM4 6c.28 0 .53.11.71.29l2 2c.18.18.29.43.29.71s-.11.53-.29.71l-2 2a1.003 1.003 0 01-1.42-1.42L4.59 9l-1.3-1.29A1.003 1.003 0 014 6zm5 4h3c.55 0 1 .45 1 1s-.45 1-1 1H9c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"contrast\": [\"M15.2 6.4h-1.44c-.13-.47-.32-.92-.56-1.34L14.26 4c.31-.31.31-.82 0-1.13l-1.13-1.13a.803.803 0 00-1.13 0L10.94 2.8c-.42-.24-.86-.42-1.34-.56V.8c0-.44-.36-.8-.8-.8H7.2c-.44 0-.8.36-.8.8v1.44c-.5.14-.96.34-1.4.59l-1-1c-.3-.3-.79-.3-1.09 0L1.83 2.91c-.3.3-.3.79 0 1.09l1 1c-.25.44-.45.9-.59 1.4H.8c-.44 0-.8.36-.8.8v1.6c0 .44.36.8.8.8h1.44c.13.47.32.92.56 1.34L1.74 12c-.31.31-.31.82 0 1.13l1.13 1.13c.31.31.82.31 1.13 0l1.06-1.06c.42.24.86.42 1.34.56v1.44c0 .44.36.8.8.8h1.6c.44 0 .8-.36.8-.8v-1.44c.5-.14.96-.33 1.4-.59l1 1c.3.3.79.3 1.09 0l1.09-1.09c.3-.3.3-.79 0-1.09l-1-1c.25-.43.45-.9.59-1.4h1.44c.44 0 .8-.36.8-.8V7.2a.818.818 0 00-.81-.8zM8 12c-2.21 0-4-1.79-4-4s1.79-4 4-4v8z\"],\n \"control\": [\"M13 8H8v5h5V8zm0-5H8v4h5V3zm2-3H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V2h12v12zM7 3H3v10h4V3z\"],\n \"credit-card\": [\"M14.99 2.95h-14c-.55 0-1 .45-1 1v1h16v-1c0-.55-.45-1-1-1zm-15 10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-6h-16v6zm5.5-2h5c.28 0 .5.22.5.5s-.22.5-.5.5h-5c-.28 0-.5-.22-.5-.5s.23-.5.5-.5zm-3 0h1c.28 0 .5.22.5.5s-.22.5-.5.5h-1c-.28 0-.5-.22-.5-.5s.23-.5.5-.5z\"],\n \"cross\": [\"M9.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z\"],\n \"crown\": [\"M2 6l3 2 3-4 3 4 3-2-1 6H3L2 6zm6-5a1 1 0 110 2 1 1 0 010-2zM1 3a1 1 0 110 2 1 1 0 010-2zm14 0a1 1 0 110 2 1 1 0 010-2zM3 13h10v2H3v-2z\"],\n \"cube\": [\"M14.194 3.54L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l5.698 3.255zm.75.71a1 1 0 01.056.33v6.84a1 1 0 01-.504.868L8.5 15.714V8.277l6.444-4.027zm-13.888 0L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33z\"],\n \"cube-add\": [\"M14 2h1a1 1 0 010 2h-1v1a1 1 0 01-2 0V4h-1a1 1 0 010-2h1V1a1 1 0 012 0v1zM9.136.65a3.001 3.001 0 00.992 5.222c.018.058.038.115.059.172L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l.64.365zM15 7.235v4.184a1 1 0 01-.504.868L8.5 15.714V8.277l2.187-1.367A2.994 2.994 0 0013 8c.768 0 1.47-.289 2-.764zM1.056 4.25L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33z\"],\n \"cube-remove\": [\"M10.365 5.933L8 7.41 1.806 3.54 7.504.283a1 1 0 01.992 0l.64.365a3.001 3.001 0 001.228 5.283zM15 6v5.42a1 1 0 01-.504.868L8.5 15.714V8.277L12.143 6H15zM1.056 4.25L7.5 8.277v7.437l-5.996-3.426A1 1 0 011 11.42V4.58a1 1 0 01.056-.33zM11 2h4a1 1 0 010 2h-4a1 1 0 010-2z\"],\n \"curved-range-chart\": [\"M15 12H3.12l1.81-1.39c1.73 1.01 5.53-.03 9.08-2.61l-1.22-1.5C10.3 8.3 7.86 9.37 6.65 9.29L14.3 3.4l-.6-.8-7.83 6.03c-.01-1.07 1.8-3.19 4.47-5.13L9.12 2C5.38 4.7 3.34 8.1 4.25 9.87L2 11.6V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"cut\": [\"M13 2s.71-1.29 0-2L8.66 5.07l1.05 1.32L13 2zm.07 8c-.42 0-.82.09-1.18.26L3.31 0c-.69.71 0 2 0 2l3.68 5.02-2.77 3.24A2.996 2.996 0 000 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-.46-.11-.89-.29-1.27L8.1 8.54l2.33 3.19c-.18.39-.29.82-.29 1.27 0 1.66 1.31 3 2.93 3S16 14.66 16 13s-1.31-3-2.93-3zM3 14c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm10.07 0c-.54 0-.98-.45-.98-1s.44-1 .98-1 .98.45.98 1-.44 1-.98 1z\"],\n \"cycle\": [\"M13 9a3 3 0 110 6 3 3 0 010-6zM3 9a3 3 0 110 6 3 3 0 010-6zm6.169-5.27l.087.09 1.51 1.746 1.589.549a1 1 0 01.65 1.16l-.032.112a1 1 0 01-1.159.65l-.112-.032-1.843-.636a1 1 0 01-.337-.198l-.092-.093-.959-1.109L7.041 7.5l1.691 1.819a1 1 0 01.26.556L9 10v3a1 1 0 01-1.993.117L7 13l-.001-2.608-2.056-2.211a1 1 0 01-.081-1.264l.082-.1 2.825-3.026a1 1 0 011.4-.061zM13 10.5a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm-10 0a1.5 1.5 0 100 3 1.5 1.5 0 000-3zM11 1a1.5 1.5 0 110 3 1.5 1.5 0 010-3z\"],\n \"dashboard\": [\"M5 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM4 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-2c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-2 6c0 1.1.9 2 2 2s2-.9 2-2c0-.53-2-5-2-5s-2 4.47-2 5zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm4-9c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm0 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\"],\n \"data-lineage\": [\"M1.067 0C.477 0 0 .478 0 1.067V3.2c0 .59.478 1.067 1.067 1.067h2.24a5.342 5.342 0 002.9 3.734 5.337 5.337 0 00-2.9 3.733h-2.24C.477 11.733 0 12.21 0 12.8v2.133C0 15.523.478 16 1.067 16H6.4c.59 0 1.067-.478 1.067-1.067V12.8c0-.59-.478-1.067-1.067-1.067H4.401a4.27 4.27 0 013.92-3.194l.212-.006V9.6c0 .59.478 1.067 1.067 1.067h5.333c.59 0 1.067-.478 1.067-1.067V6.4c0-.59-.478-1.067-1.067-1.067H9.6c-.59 0-1.067.478-1.067 1.067v1.067a4.268 4.268 0 01-4.132-3.2H6.4c.59 0 1.067-.478 1.067-1.067V1.067C7.467.477 6.989 0 6.4 0H1.067z\"],\n \"database\": [\"M8 4c3.31 0 6-.9 6-2s-2.69-2-6-2C4.68 0 2 .9 2 2s2.68 2 6 2zm-6-.48V8c0 1.1 2.69 2 6 2s6-.9 6-2V3.52C12.78 4.4 10.56 5 8 5s-4.78-.6-6-1.48zm0 6V14c0 1.1 2.69 2 6 2s6-.9 6-2V9.52C12.78 10.4 10.56 11 8 11s-4.78-.6-6-1.48z\"],\n \"delete\": [\"M11.99 4.99a1.003 1.003 0 00-1.71-.71l-2.29 2.3L5.7 4.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2.29 2.29-2.29 2.29A1.003 1.003 0 005.7 11.7l2.29-2.29 2.29 2.29a1.003 1.003 0 001.42-1.42L9.41 7.99 11.7 5.7c.18-.18.29-.43.29-.71zm-4-5c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z\"],\n \"delta\": [\"M8 0L0 16h16L8 0zM7 5l5 10H2L7 5z\"],\n \"derive-column\": [\"M6.08 6.67h-.84c.24-.92.56-1.6.96-2.03.24-.27.48-.4.71-.4.05 0 .08.01.11.04s.04.06.04.1c0 .04-.03.11-.1.21-.06.1-.1.2-.1.29 0 .13.05.24.15.33.1.09.23.14.39.14.17 0 .31-.06.42-.17A.58.58 0 008 4.73c0-.22-.09-.39-.26-.53-.17-.13-.44-.2-.81-.2-.59 0-1.12.16-1.59.48-.48.32-.93.85-1.36 1.59-.15.26-.29.42-.42.49s-.35.11-.64.1l-.19.65h.81l-1.19 4.37c-.2.72-.33 1.16-.4 1.33-.1.24-.26.45-.46.62-.08.07-.18.1-.3.1-.03 0-.06-.01-.08-.03l-.03-.04c0-.02.03-.06.09-.11.06-.06.09-.14.09-.26 0-.13-.05-.23-.14-.32a.6.6 0 00-.4-.13c-.21 0-.38.05-.51.16s-.21.25-.21.4c0 .16.08.3.23.42.16.12.4.18.74.18.53 0 .99-.13 1.4-.39.41-.26.76-.65 1.07-1.19.3-.54.62-1.4.94-2.59l.68-2.53h.82l.2-.63zM15 0H8c-.55 0-1 .45-1 1v2h2V2h5v12H9v-1H7v2c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM8.3 9.94c.18.52.33.89.46 1.13.13.24.28.4.44.51.17.1.37.16.62.16.24 0 .49-.08.74-.25.33-.21.66-.58 1.01-1.09l-.21-.11c-.23.31-.41.5-.52.57a.44.44 0 01-.26.07c-.12 0-.24-.07-.36-.21-.2-.24-.46-.91-.8-2 .3-.49.55-.81.75-.96.15-.11.3-.16.47-.16.06 0 .17.02.34.06.16.04.31.06.43.06.17 0 .31-.06.43-.17.1-.11.16-.25.16-.43 0-.19-.06-.33-.17-.44-.12-.11-.28-.16-.49-.16-.19 0-.37.04-.54.13-.17.09-.39.27-.65.56-.2.21-.48.58-.87 1.11-.15-.66-.41-1.26-.78-1.81l-2.05.33-.04.21c.15-.03.28-.04.39-.04.2 0 .37.08.5.25.21.26.5 1.03.88 2.33-.29.37-.49.61-.6.72-.18.18-.33.3-.44.36-.09.04-.19.07-.3.07-.09 0-.23-.04-.42-.13a.866.866 0 00-.36-.09c-.2 0-.36.06-.49.18a.59.59 0 00-.19.46c0 .17.06.32.18.43.12.11.28.16.48.16.2 0 .38-.04.55-.11.17-.08.39-.24.65-.49.24-.27.6-.66 1.06-1.21z\"],\n \"desktop\": [\"M15 0H1C.45 0 0 .45 0 1v10c0 .55.45 1 1 1h4.75l-.5 2H4c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1h-1.25l-.5-2H15c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 10H2V2h12v8z\"],\n \"diagnosis\": [\"M3.2 1a1 1 0 01.117 1.993L3.2 3H3v3a2 2 0 001.85 1.995L5 8a2 2 0 001.995-1.85L7 6V3h-.2a1 1 0 01-.993-.883L5.8 2a1 1 0 01.883-.993L6.8 1H8a1 1 0 01.993.883L9 2v4a4.002 4.002 0 01-3.007 3.876v.007L6 10a3 3 0 005.995.176L12 10V7.792a2.5 2.5 0 112 0V10a5 5 0 01-10 0c0-.042.003-.084.008-.125A4 4 0 011.005 6.2L1 6V2a1 1 0 01.883-.993L2 1h1.2z\"],\n \"diagram-tree\": [\"M15 8v3h-2V9H9v2H7V9H3v2H1V8a1 1 0 011-1h5V5h2v2h5a1 1 0 011 1zM1 12h2a1 1 0 011 1v2a1 1 0 01-1 1H1a1 1 0 01-1-1v-2a1 1 0 011-1zm12 0h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2a1 1 0 011-1zm-6 0h2a1 1 0 011 1v2a1 1 0 01-1 1H7a1 1 0 01-1-1v-2a1 1 0 011-1zM7 0h2a1 1 0 011 1v2a1 1 0 01-1 1H7a1 1 0 01-1-1V1a1 1 0 011-1z\"],\n \"direction-left\": [\"M16 1.99l-16 6 16 6-4-6z\"],\n \"direction-right\": [\"M16 7.99l-16-6 4 6-4 6z\"],\n \"disable\": [\"M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-6 8c0-3.31 2.69-6 6-6 1.3 0 2.49.42 3.47 1.12l-8.35 8.35c-.7-.98-1.12-2.17-1.12-3.47zm6 6c-1.3 0-2.49-.42-3.47-1.12l8.35-8.35c.7.98 1.12 2.17 1.12 3.47 0 3.32-2.68 6-6 6z\"],\n \"document\": [\"M9 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5L9 0zm3 14H4V2h4v4h4v8z\"],\n \"document-open\": [\"M6 12c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1h1.59L1.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L6 10.41V12zm4-12H4c-.55 0-1 .45-1 1v4h2V2h4v4h4v8H5.24l-1.8 1.8c.16.12.35.2.56.2h10c.55 0 1-.45 1-1V5l-5-5z\"],\n \"document-share\": [\"M10 14H2V2h4v4h1c0-.83.36-1.55.91-2.09l-.03-.03.9-.9C8.3 2.45 8 1.77 8 1L7 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V8.22c-.53.48-1.23.78-2 .78v5zm5-14h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 3.41V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"dollar\": [\"M12.83 9.51c-.1-.3-.25-.58-.45-.84s-.45-.49-.75-.7c-.3-.2-.65-.36-1.05-.48-.16-.04-.43-.11-.8-.2-.35-.09-.73-.18-1.12-.28-.39-.1-.74-.19-1.06-.27-.31-.08-.49-.12-.54-.13-.43-.12-.78-.29-1.05-.52-.27-.23-.4-.55-.4-.95 0-.29.07-.53.21-.72.14-.19.32-.34.54-.46.22-.11.46-.19.72-.24.26-.05.52-.08.77-.08.74 0 1.35.15 1.83.46.48.3.75.83.81 1.56h2.14c0-.6-.13-1.13-.38-1.58-.25-.45-.59-.84-1.02-1.15-.43-.31-.93-.54-1.49-.7-.24-.06-.49-.1-.75-.14V1c0-.55-.45-1-1-1s-1 .45-1 1v1.08c-.23.03-.46.07-.68.13-.54.13-1.02.34-1.44.61-.42.28-.76.63-1.02 1.05-.26.43-.39.93-.39 1.5 0 .3.04.59.13.88.09.29.23.56.44.82.21.26.48.49.83.7.35.21.79.38 1.31.51.85.21 1.56.38 2.14.52.58.13 1.08.28 1.52.42.25.09.48.23.69.44.21.21.32.53.32.97 0 .21-.05.42-.14.63-.09.21-.24.39-.45.55-.21.16-.47.29-.81.39-.33.1-.73.15-1.2.15-.43 0-.84-.05-1.21-.14-.37-.09-.7-.24-.99-.43-.29-.2-.51-.45-.67-.76-.16-.31-.24-.68-.24-1.12H3c.01.71.15 1.32.43 1.84.27.52.64.94 1.1 1.27.46.33.99.58 1.61.74.27.07.56.12.85.16V15c0 .55.45 1 1 1s1-.45 1-1v-1.05c.3-.03.61-.08.9-.15.58-.13 1.1-.34 1.56-.63.46-.29.83-.66 1.11-1.11.28-.45.42-1 .42-1.64 0-.31-.05-.61-.15-.91z\"],\n \"dot\": [\"M8 5a3 3 0 100 6 3 3 0 100-6z\"],\n \"double-caret-horizontal\": [\"M13.71 7.29l-3-3A1.003 1.003 0 009 5v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM6 4c-.28 0-.53.11-.71.29l-3 3C2.11 7.47 2 7.72 2 8c0 .28.11.53.29.71l3 3A1.003 1.003 0 007 11V5c0-.55-.45-1-1-1z\"],\n \"double-caret-vertical\": [\"M5 7h6a1.003 1.003 0 00.71-1.71l-3-3C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-3 3A1.003 1.003 0 005 7zm6 2H5a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0011 9z\"],\n \"double-chevron-down\": [\"M7.29 8.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4zM12 8c-.28 0-.53.11-.71.29L8 11.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 8z\"],\n \"double-chevron-left\": [\"M4.41 8L7.7 4.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C2.11 7.47 2 7.72 2 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.41 8zm5 0l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C7.11 7.47 7 7.72 7 8c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L9.41 8z\"],\n \"double-chevron-right\": [\"M9 8c0-.28-.11-.53-.29-.71l-4-4a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4C8.89 8.53 9 8.28 9 8zm4.71-.71l-4-4a1.003 1.003 0 00-1.42 1.42L11.59 8 8.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"double-chevron-up\": [\"M4 8c.28 0 .53-.11.71-.29L8 4.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-4 4A1.003 1.003 0 004 8zm4.71-.71C8.53 7.11 8.28 7 8 7s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z\"],\n \"doughnut-chart\": [\"M11.86 7h4.05C15.45 3.39 12.61.52 9 .07v4.07A4 4 0 0111.86 7zM12 8c0 2.21-1.79 4-4 4s-4-1.79-4-4 1.79-4 4-4V0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8h-4z\"],\n \"download\": [\"M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM11.7 9.7l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-3-3A1.003 1.003 0 015.7 8.28l1.29 1.29V3.99c0-.55.45-1 1-1s1 .45 1 1v5.59l1.29-1.29a1.003 1.003 0 011.71.71c0 .27-.11.52-.29.7z\"],\n \"drag-handle-horizontal\": [\"M2 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm8-2c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-4-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\"],\n \"drag-handle-vertical\": [\"M6 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-6c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zM6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4 8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\"],\n \"draw\": [\"M14.9 11c-.3 0-.5.1-.7.3l-3 3c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1zm-1-1v-.2l-1-5c-.1-.3-.3-.6-.6-.7l-11-4-.3.3 5.8 5.8c.2-.1.4-.2.6-.2.8 0 1.5.7 1.5 1.5S8.3 9 7.4 9s-1.5-.7-1.5-1.5c0-.2.1-.4.2-.6L.3 1.1l-.3.3 4 11c.1.3.4.6.7.6l5 1h.2c.3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7z\"],\n \"drawer-left\": [\"M7 0a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h6zM6 2H2v12h4V2zm2 5h4.59L11.3 5.71A.965.965 0 0111 5a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42L12.59 9H8V7z\"],\n \"drawer-left-filled\": [\"M1 0h6a1 1 0 011 1v14a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1zm7 7h4.59L11.3 5.71A.965.965 0 0111 5a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42L12.59 9H8V7z\"],\n \"drawer-right\": [\"M15 0a1 1 0 011 1v14a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1h6zm-1 2h-4v12h4V2zM8 7H3.41L4.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 9H8V7z\"],\n \"drawer-right-filled\": [\"M9 0h6a1 1 0 011 1v14a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1zM8 7H3.41L4.7 5.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 9H8V7z\"],\n \"drive-time\": [\"M15.12 4.76h-1.05l-.76-2.12c-.19-.53-.76-1.08-1.27-1.24 0 0-1.32-.4-4.04-.4-2.72 0-4.04.4-4.04.4-.5.16-1.07.71-1.26 1.24l-.77 2.12H.88c-.48 0-.88.42-.88.94s.4.94.88.94h.38L1 7c-.03.69 0 1.44 0 2v5c0 .66.38 1 1 1s1-.34 1-1v-1h10v1c0 .66.38 1 1 1s1-.34 1-1V9c0-.56-.01-1.37 0-2l-.26-.37h.38c.48 0 .88-.42.88-.93 0-.52-.4-.94-.88-.94zM5 10H3V8h2v2zm8 0h-2V8h2v2zm0-4H3c-.18 0-.06-.82 0-1l.73-1.63C3.79 3.19 3.82 3 4 3h8c.18 0 .21.19.27.37L13 5c.06.18.18 1 0 1z\"],\n \"duplicate\": [\"M15 0H5c-.55 0-1 .45-1 1v2h2V2h8v7h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 10H2V6h8v8z\"],\n \"edit\": [\"M3.25 10.26l2.47 2.47 6.69-6.69-2.46-2.48-6.7 6.7zM.99 14.99l3.86-1.39-2.46-2.44-1.4 3.83zm12.25-14c-.48 0-.92.2-1.24.51l-1.44 1.44 2.47 2.47 1.44-1.44c.32-.32.51-.75.51-1.24.01-.95-.77-1.74-1.74-1.74z\"],\n \"eject\": [\"M4 9h8a1.003 1.003 0 00.71-1.71l-4-4C8.53 3.11 8.28 3 8 3s-.53.11-.71.29l-4 4A1.003 1.003 0 004 9zm8 1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1z\"],\n \"endorsed\": [\"M15.86 7.5l-.81-1.42V4.5c0-.36-.19-.68-.49-.87l-1.37-.8-.81-1.41c-.19-.31-.51-.49-.86-.49H9.89L8.5.14a.948.948 0 00-1 0l-1.39.8H4.52a1 1 0 00-.86.49l-.8 1.37-1.44.83c-.3.19-.49.51-.49.87v1.65l-.8 1.37c-.08.15-.13.32-.13.49s.05.34.14.49l.8 1.37v1.65c0 .36.19.68.49.87l1.42.81.8 1.37c.19.31.51.49.86.49H6.1l1.39.8c.15.09.32.14.48.14s.34-.05.49-.14l1.39-.8h1.63a1 1 0 00.86-.49l.81-1.41 1.37-.8c.3-.19.49-.51.49-.87V9.93l.81-1.42a.89.89 0 00.04-1.01zm-4.12-.82l-4.01 4.01c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-2-2c-.18-.19-.3-.44-.3-.71a1.003 1.003 0 011.71-.71l1.3 1.3 3.3-3.3a1.003 1.003 0 011.71.71.95.95 0 01-.29.7z\"],\n \"envelope\": [\"M0 3.06v9.88L4.94 8 0 3.06zM14.94 2H1.06L8 8.94 14.94 2zm-6.41 8.53c-.14.14-.32.22-.53.22s-.39-.08-.53-.22L6 9.06 1.06 14h13.88L10 9.06l-1.47 1.47zM11.06 8L16 12.94V3.06L11.06 8z\"],\n \"equals\": [\"M3 5h10a1 1 0 010 2H3a1 1 0 110-2zm0 4h10a1 1 0 010 2H3a1 1 0 010-2z\"],\n \"eraser\": [\"M8.06 13.91l7.63-7.44c.41-.4.41-1.05 0-1.45L10.86.3c-.41-.4-1.08-.4-1.49 0L.31 9.13c-.41.4-.41 1.05 0 1.45l5.58 5.44h8.12v-.01c.55 0 1-.45 1-1s-.45-1-1-1H7.96l.1-.1zm-2.17.06L1.67 9.85l4.22-4.11 4.22 4.11-4.22 4.12z\"],\n \"error\": [\"M7.99-.01c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13h-2v-2h2v2zm0-3h-2v-7h2v7z\"],\n \"euro\": [\"M6.52 3.18c.51-.27 1.12-.4 1.83-.4.48 0 .91.06 1.27.18.37.12.68.29.96.51.18.14.3.33.44.51l1.53-1.53c-.12-.11-.23-.22-.36-.32a5.61 5.61 0 00-1.74-.83c-.66-.2-1.36-.3-2.1-.3-.99 0-1.88.18-2.66.53-.79.35-1.45.82-2 1.41-.55.58-.96 1.27-1.26 2.06H2c-.55 0-1 .45-1 1s.45 1 1 1h.04c-.01.17-.04.33-.04.5 0 .17.03.33.04.5H2c-.55 0-1 .45-1 1s.45 1 1 1h.43c0 .01 0 .02.01.02a6.2 6.2 0 001.25 2.07 5.77 5.77 0 002 1.4c.78.34 1.67.51 2.66.51.81 0 1.54-.12 2.21-.36.67-.24 1.25-.59 1.75-1.03l.03-.03-1.55-1.33c-.01.01-.02.03-.03.04-.29.3-.63.53-1.02.69-.4.17-.85.25-1.37.25-.71 0-1.32-.13-1.83-.4s-.93-.62-1.25-1.07c-.19-.24-.34-.49-.46-.76H9c.55 0 1-.45 1-1s-.45-1-1-1H4.35c-.01-.17-.03-.33-.03-.5 0-.17.02-.34.03-.5H10c.55 0 1-.45 1-1s-.45-1-1-1H4.83c.13-.27.27-.52.44-.76.32-.44.74-.8 1.25-1.06zM14 8.98v0z\"],\n \"exchange\": [\"M1.99 5.99c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zm4.15 1.86a.495.495 0 10.7-.7L5.7 5.99h5.79c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H5.7l1.15-1.15a.495.495 0 10-.7-.7l-2 2c-.1.09-.16.21-.16.35s.06.26.15.35l2 2.01zm7.85-1.86c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zM9.85 8.14a.533.533 0 00-.36-.15.495.495 0 00-.35.85l1.15 1.15h-5.8c-.28 0-.5.22-.5.5s.22.5.5.5h5.79l-1.15 1.15a.495.495 0 10.7.7l2-2c.09-.09.15-.22.15-.35s-.06-.26-.15-.35l-1.98-2z\"],\n \"exclude-row\": [\"M0 10a1.003 1.003 0 001.71.71L3 9.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 8 5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L3 6.59l-1.29-1.3A1.003 1.003 0 00.29 6.71L1.59 8 .29 9.29C.11 9.47 0 9.72 0 10zm1-7h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 10H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-1-7H9c-1.1 0-2 .9-2 2s.9 2 2 2h5c1.1 0 2-.9 2-2s-.9-2-2-2z\"],\n \"expand-all\": [\"M4 7c.28 0 .53-.11.71-.29L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4A1.003 1.003 0 004 7zm8 2c-.28 0-.53.11-.71.29L8 12.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0012 9z\"],\n \"export\": [\"M4 6c.28 0 .53-.11.71-.29L7 3.41V11c0 .55.45 1 1 1s1-.45 1-1V3.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4C8.53.11 8.28 0 8 0s-.53.11-.71.29l-4 4A1.003 1.003 0 004 6zm11 5c-.55 0-1 .45-1 1v2H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z\"],\n \"eye-off\": [\"M16 7.97v-.02-.01-.02-.02a.672.672 0 00-.17-.36c-.49-.63-1.07-1.2-1.65-1.72l-3.16 2.26a2.978 2.978 0 01-2.98 2.9c-.31 0-.6-.06-.88-.15L5.09 12.3c.44.19.9.36 1.37.47.97.23 1.94.24 2.92.05.88-.17 1.74-.54 2.53-.98 1.25-.7 2.39-1.67 3.38-2.75.18-.2.37-.41.53-.62.09-.1.15-.22.17-.36v-.02-.02-.01-.02-.03c.01-.02.01-.03.01-.04zm-.43-4.17c.25-.18.43-.46.43-.8 0-.55-.45-1-1-1-.22 0-.41.08-.57.2l-.01-.01-2.67 1.91c-.69-.38-1.41-.69-2.17-.87a6.8 6.8 0 00-2.91-.05c-.88.18-1.74.54-2.53.99-1.25.7-2.39 1.67-3.38 2.75-.18.2-.37.41-.53.62-.23.29-.23.63-.01.92.51.66 1.11 1.25 1.73 1.79.18.16.38.29.56.44l-2.09 1.5.01.01c-.25.18-.43.46-.43.8 0 .55.45 1 1 1 .22 0 .41-.08.57-.2l.01.01 14-10-.01-.01zm-10.41 5a3.03 3.03 0 01-.11-.8 2.99 2.99 0 012.99-2.98c.62 0 1.19.21 1.66.53L5.16 8.8z\"],\n \"eye-on\": [\"M10.29 6.7c.18.18.43.29.71.29s.53-.11.71-.29l4-4c.17-.18.29-.43.29-.7a1.003 1.003 0 00-1.71-.71L11 4.58 9.71 3.29A.997.997 0 009 3c-.55 0-1 .44-1 1a1 1 0 00.3.7l1.99 2zM16 7.96v-.02-.01-.02-.02a.64.64 0 00-.17-.36c-.3-.4-.65-.76-1-1.12l-1.7 1.7c-.55.55-1.3.88-2.13.88-.06 0-.11-.01-.17-.02C10.42 10.15 9.32 11 8.01 11A3.005 3.005 0 016.4 5.46c-.24-.43-.39-.93-.39-1.46 0-.26.04-.5.1-.74-.7.2-1.37.5-2.01.86-1.26.7-2.4 1.68-3.4 2.77-.18.21-.36.41-.53.63-.22.29-.22.64 0 .93.51.67 1.12 1.27 1.73 1.81 1.33 1.17 2.85 2.15 4.53 2.55.97.23 1.95.24 2.92.05.89-.18 1.74-.54 2.54-.99 1.25-.71 2.4-1.69 3.39-2.78.18-.2.37-.41.54-.63.09-.1.15-.23.17-.37v-.02-.02-.01-.02-.03c.01-.01.01-.02.01-.03zM8.01 9c.48 0 .87-.35.96-.81a.55.55 0 01-.07-.09l-.02.01L7.8 7.03c-.45.1-.79.48-.79.96 0 .56.45 1.01 1 1.01z\"],\n \"eye-open\": [\"M8.002 7.003a1.003 1.003 0 000 2.005 1.003 1.003 0 000-2.005zm7.988.972v-.02-.01-.02-.02a.675.675 0 00-.17-.36c-.509-.673-1.118-1.264-1.737-1.806-1.328-1.173-2.846-2.155-4.523-2.546a6.702 6.702 0 00-2.925-.06c-.889.18-1.738.541-2.546.992C2.84 4.837 1.692 5.81.694 6.902c-.18.211-.36.411-.53.632a.742.742 0 000 .932c.51.672 1.119 1.264 1.738 1.805 1.328 1.173 2.846 2.156 4.523 2.547.968.23 1.947.24 2.925.04.889-.18 1.738-.542 2.546-.993 1.248-.712 2.397-1.684 3.395-2.777.18-.2.37-.411.54-.632.09-.1.149-.23.169-.36v-.02-.02-.01-.02-.03c0-.01-.01-.01-.01-.02zm-7.988 3.038a2.998 2.998 0 01-2.995-3.008 2.998 2.998 0 012.995-3.008 2.998 2.998 0 012.996 3.008 2.998 2.998 0 01-2.996 3.008z\"],\n \"fast-backward\": [\"M14 3c-.24 0-.44.09-.62.23l-.01-.01L9 6.72V4c0-.55-.45-1-1-1-.24 0-.44.09-.62.23v-.01l-5 4 .01.01C2.16 7.41 2 7.68 2 8s.16.59.38.77v.01l5 4 .01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V9.28l4.38 3.5.01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"fast-forward\": [\"M15 8c0-.32-.16-.59-.38-.77l.01-.01-5-4-.01.01A.987.987 0 009 3c-.55 0-1 .45-1 1v2.72l-4.38-3.5v.01A.987.987 0 003 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01L8 9.28V12c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01 5-4-.01-.01c.22-.18.38-.45.38-.77z\"],\n \"feed\": [\"M1.99 11.99c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.89-2-2-2zm1-4c-.55 0-1 .45-1 1s.45 1 1 1c1.66 0 3 1.34 3 3 0 .55.45 1 1 1s1-.45 1-1c0-2.76-2.24-5-5-5zm0-4c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7 3.13 7 7 0 .55.45 1 1 1s1-.45 1-1a9 9 0 00-9-9zm0-4c-.55 0-1 .45-1 1s.45 1 1 1c6.08 0 11 4.92 11 11 0 .55.45 1 1 1s1-.45 1-1c0-7.18-5.82-13-13-13z\"],\n \"feed-subscribed\": [\"M3 2c1.06 0 2.08.16 3.06.45.13-.71.52-1.32 1.05-1.76C5.82.25 4.44 0 3 0c-.55 0-1 .45-1 1s.45 1 1 1zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm8.32-6.33a.99.99 0 001.4 0l3.98-3.98c.19-.18.3-.42.3-.7 0-.55-.45-.99-1-.99-.28 0-.52.11-.7.29l-3.28 3.28-1.29-1.29a.99.99 0 00-.7-.29 1 1 0 00-1 .99c0 .27.11.52.29.7l2 1.99zm3.73.53l-.93.93-.02-.02c-.17.17-.35.33-.56.45C13.47 9.16 14 11.02 14 13c0 .55.45 1 1 1s1-.45 1-1c0-2.5-.73-4.82-1.95-6.8zM3 8c-.55 0-1 .45-1 1s.45 1 1 1c1.66 0 3 1.34 3 3 0 .55.45 1 1 1s1-.45 1-1c0-2.76-2.24-5-5-5zm5.91-.91l-.03.03-2-2 .03-.03c-.11-.11-.23-.2-.33-.33A8.9 8.9 0 003 4c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7 3.13 7 7 0 .55.45 1 1 1s1-.45 1-1c0-1.87-.57-3.61-1.55-5.06-.61-.11-1.13-.42-1.54-.85z\"],\n \"film\": [\"M15 1h-5v2H6V1H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h5v-2h4v2h5c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 13H2v-2h2v2zm0-3H2V8h2v2zm0-3H2V5h2v2zm0-3H2V2h2v2zm6 6H6V5h4v5zm4 3h-2v-2h2v2zm0-3h-2V8h2v2zm0-3h-2V5h2v2zm0-3h-2V2h2v2z\"],\n \"filter\": [\"M13.99.99h-12a1.003 1.003 0 00-.71 1.71l4.71 4.71V14a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V7.41L14.7 2.7a1.003 1.003 0 00-.71-1.71z\"],\n \"filter-keep\": [\"M15 10c-.28 0-.53.11-.71.29L12 12.59l-1.29-1.29A.965.965 0 0010 11a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0015 10zm-3-8c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7z\"],\n \"filter-list\": [\"M9 8c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1h-5c-.55 0-1 .45-1 1zm3-6c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7zm3 8h-5c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0 3h-5c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"filter-open\": [\"M15.707 10.293a1 1 0 010 1.414l-3 3c-.63.63-1.707.184-1.707-.707V8c0-.89 1.077-1.337 1.707-.707l3 3zM12 2c0 .28-.11.53-.29.7L8 6.41V10c0 .28-.11.53-.29.71l-2 2A1.003 1.003 0 014 12V6.41L.29 2.71A1.003 1.003 0 011 1h10c.55 0 1 .45 1 1z\"],\n \"filter-remove\": [\"M12 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L4 6.41V12a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71V6.41l3.71-3.71c.18-.17.29-.42.29-.7zm2.41 10l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L13 10.59 11.71 9.3A.965.965 0 0011 9a1.003 1.003 0 00-.71 1.71l1.3 1.29-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l1.29-1.3 1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L14.41 12z\"],\n \"flag\": [\"M2.99 2.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1s1-.45 1-1v-11c0-.55-.45-1-1-1zm0-3c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm2 3.03v7.23c2.07-2.11 5.92 1.75 9 0V3.02c-3 2.07-6.94-2.03-9 0z\"],\n \"flame\": [\"M9.217 0c0 1.368.368 2.462 1.104 3.282C12.774 5.197 14 7.385 14 9.846c0 2.735-1.472 4.786-4.415 6.154 2.165-2.4 1.84-3.385-.368-6.4-2.342 1.2-1.967 2-1.592 3.6-.786 0-1.5 0-1.875-.4 0 .547.898 2 1.464 3.2-2.943-.82-6.092-5.744-4.988-6.154.736-.273 1.594-.137 2.575.41C3.575 5.333 5.047 1.915 9.217 0z\"],\n \"flash\": [\"M4 8c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1zm4-4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S7 .45 7 1v2c0 .55.45 1 1 1zM3.79 5.21a1.003 1.003 0 001.42-1.42l-1.5-1.5a1.003 1.003 0 00-1.42 1.42l1.5 1.5zm.71 5.29c-.28 0-.53.11-.71.29l-1.5 1.5a1.003 1.003 0 001.42 1.42l1.5-1.5a1.003 1.003 0 00-.71-1.71zm7-5c.28 0 .53-.11.71-.29l1.5-1.5a1.003 1.003 0 00-1.42-1.42l-1.5 1.5a1.003 1.003 0 00.71 1.71zm.71 5.29a1.003 1.003 0 00-1.42 1.42l1.5 1.5a1.003 1.003 0 001.42-1.42l-1.5-1.5zM15 7h-2c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1s-.45-1-1-1zM8 5C6.34 5 5 6.34 5 8s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0 3c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1z\"],\n \"floppy-disk\": [\"M15.71 2.29l-2-2A.997.997 0 0013 0h-1v6H4V0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V3c0-.28-.11-.53-.29-.71zM14 15H2V9c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v6zM11 1H9v4h2V1z\"],\n \"flow-branch\": [\"M10.643 6.595c.22.418.344.894.344 1.399 0 .439-.094.855-.263 1.231l3.265 3.462-.002-1.75a.973.973 0 01.314-.68.99.99 0 011.388.048c.186.2.316.46.3.715l-.009 4.03a.959.959 0 01-.3.68.972.972 0 01-.698.266l-4.053.002a.97.97 0 01-.679-.314 1.031 1.031 0 01.05-1.42.972.972 0 01.698-.266l1.7-.001-3.305-3.35a2.998 2.998 0 01-4.228-1.653H.999a1 1 0 010-2h4.166a2.998 2.998 0 014.06-1.735l3.449-3.268-1.745.002a.979.979 0 01-.631-1.692c.199-.186.459-.316.713-.3l4.025.009c.247.008.493.1.679.3.186.2.274.451.265.7l.002 4.046a.972.972 0 01-.313.68 1.03 1.03 0 01-1.42-.05.973.973 0 01-.266-.7V3.295l-3.34 3.301z\"],\n \"flow-end\": [\"M9.702 7.31c.176.176.293.41.293.684a.976.976 0 01-.283.695c-1.888 1.91-2.892 2.918-3.011 3.027-.179.164-.42.284-.693.284a.995.995 0 01-.997-.985c0-.274.112-.541.292-.72.12-.12.624-.551 1.514-1.293H.98c-.536 0-.975-.47-.975-1.008 0-.537.439-.996.975-.996h5.837c-.895-.752-1.4-1.187-1.514-1.304a1.03 1.03 0 01-.292-.705C5.01 4.45 5.464 4 6 4c.272 0 .52.108.695.294A535.7 535.7 0 009.702 7.31zM13 11.002c-1.657 0-3-1.347-3-3.008a3.004 3.004 0 013-3.007c1.657 0 3 1.346 3 3.007a3.004 3.004 0 01-3 3.008z\"],\n \"flow-linear\": [\"M4.16 9.002H.977C.44 9.002 0 8.532 0 7.994c0-.537.44-.99.978-.99h3.18A3.01 3.01 0 016.995 5a3.01 3.01 0 012.839 2.004h2.98c-.898-.756-1.404-1.193-1.518-1.31a1.03 1.03 0 01-.293-.705c0-.538.454-.989.992-.989.274 0 .521.108.697.294.118.124 1.122 1.13 3.014 3.016a.96.96 0 01.293.684.975.975 0 01-.284.695l-3.018 3.027a.974.974 0 01-.694.284c-.553 0-1-.447-1-.985 0-.274.117-.545.293-.72l1.518-1.293H9.833A3.01 3.01 0 016.996 11 3.01 3.01 0 014.16 9.002z\"],\n \"flow-review\": [\"M5.175 7.004a3.003 3.003 0 012.83-2.001c1.305 0 2.416.835 2.83 2.001h1.985c-.896-.756-1.401-1.193-1.515-1.31a1.03 1.03 0 01-.292-.705c0-.538.453-.989.99-.989a.95.95 0 01.696.294c.117.124 1.12 1.13 3.008 3.016.176.176.293.41.293.684a.976.976 0 01-.283.695l-3.013 3.027a.995.995 0 01-1.691-.702c0-.273.116-.544.292-.72l1.515-1.292h-1.98a3.003 3.003 0 01-2.835 2.016A3.003 3.003 0 015.17 9.002H3.18l1.515 1.292c.176.176.292.447.292.72a.995.995 0 01-1.69.702L.282 8.69A.976.976 0 010 7.994c0-.273.117-.508.293-.684A535.858 535.858 0 003.3 4.294.95.95 0 013.997 4c.537 0 .99.45.99.989 0 .273-.12.528-.292.705-.114.117-.62.554-1.515 1.31h1.995z\"],\n \"flow-review-branch\": [\"M10.392 10.647A3.002 3.002 0 016.16 8.995H3.37l1.338 1.318c.172.178.287.41.282.683-.01.536-.524.995-.99.995-.465 0-.63-.187-.747-.294L.281 8.682A.956.956 0 010 7.994a.971.971 0 01.294-.687l3.01-3.028a.973.973 0 01.697-.27c.536.01.998.485.989 1.021a.971.971 0 01-.295.687L3.37 6.997h2.79a3.002 3.002 0 014.106-1.716l2.416-2.277-1.732.004a.99.99 0 01-.679-.329.978.978 0 01.05-1.378c.199-.186.459-.315.714-.3l4.012.005c.248.009.493.1.68.3.185.2.273.45.264.699L15.99 6.05a.973.973 0 01-.314.679 1.03 1.03 0 01-1.421-.048.971.971 0 01-.265-.699V4.29L11.65 6.602c.219.416.343.89.343 1.394 0 .451-.1.88-.279 1.263L14 11.68l-.004-1.73a.982.982 0 01.323-.68.978.978 0 011.378.049c.187.2.316.46.3.714l-.004 4.011a.983.983 0 01-.3.691.972.972 0 01-.7.265l-4.046-.001a.987.987 0 01-.679-.326 1.017 1.017 0 01.048-1.41.972.972 0 01.699-.265h1.693l-2.315-2.35z\"],\n \"flows\": [\"M13.5 6a2.5 2.5 0 00-2.45 2h-1.3L5.74 4l-.75.75L8.25 8h-3.3a2.5 2.5 0 100 1h3.3l-3.26 3.25.75.75 4.01-4h1.3a2.5 2.5 0 102.45-3z\"],\n \"folder-close\": [\"M-.01 14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7h-16v7zm15-10H7.41L5.7 2.3a.965.965 0 00-.71-.3h-4c-.55 0-1 .45-1 1v3h16V5c0-.55-.45-1-1-1z\"],\n \"folder-new\": [\"M10.165 7a3.003 3.003 0 002.827 2 3.003 3.003 0 002.827-2H16v7c0 .55-.45 1-1 1H1.01c-.55 0-1-.45-1-1V7h10.155zM8.76 6H0V3c0-.55.45-1 1-1h1.998c.28 0 .53.11.71.29L5.417 4h2.578c0 .768.29 1.469.765 2zm6.23-3c.55 0 1 .45 1 1s-.45 1-1 1h-.999v1c0 .55-.45 1-1 1-.549 0-.998-.45-.998-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 .999-1 .55 0 1 .45 1 1v1h.999z\"],\n \"folder-open\": [\"M2.06 6.69c.14-.4.5-.69.94-.69h11V5c0-.55-.45-1-1-1H6.41l-1.7-1.71A.997.997 0 004 2H1c-.55 0-1 .45-1 1v9.84l2.05-6.15h.01zM16 8c0-.55-.45-1-1-1H4a.99.99 0 00-.94.69l-2 6c-.04.09-.06.2-.06.31 0 .55.45 1 1 1h11c.44 0 .81-.29.94-.69l2-6c.04-.09.06-.2.06-.31z\"],\n \"folder-shared\": [\"M8.76 5.98c-.47-.53-.77-1.22-.77-1.99h-.58L5.7 2.29a.965.965 0 00-.71-.3h-4c-.55 0-1 .45-1 1v3h8.76l.01-.01zm6.23-2.99h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.3a.99.99 0 00-.29.7 1.003 1.003 0 001.71.71l3.29-3.29V8c0 .55.45 1 1 1s1-.45 1-1V4c0-.56-.45-1.01-1-1.01zm-1.98 7.23l-.9.9-.01-.01c-.54.55-1.28.89-2.11.89-1.66 0-3-1.34-3-3 0-.77.3-1.47.78-2H-.01v7c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3.18c-.31.11-.65.18-1 .18-.76-.01-1.45-.31-1.98-.78z\"],\n \"folder-shared-open\": [\"M13.02 10.22l-.9.9-.01-.01c-.54.55-1.28.89-2.11.89-1.66 0-3-1.34-3-3 0-.77.3-1.47.78-2H4a.99.99 0 00-.94.69l-2 6c-.04.09-.06.2-.06.31 0 .55.45 1 1 1h11c.44 0 .81-.29.94-.69l1.11-3.32c-.01 0-.03.01-.05.01-.77 0-1.45-.3-1.98-.78zM2.06 6.69c.14-.4.5-.69.94-.69h5.76l.01-.01C8.3 5.46 8 4.77 8 4H6.41l-1.7-1.71A.997.997 0 004 2H1c-.55 0-1 .45-1 1v9.84l2.05-6.15h.01zM15 3h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 6.41V8c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"follower\": [\"M9.37 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.06-.01-.12-.01-.19.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.12-.39.28-.06.44-.36.5-.63.06-.11.19-.39.16-.7-.04-.4-.2-.59-.38-.67v-.07c0-.52-.05-1.26-.14-1.74a2.72 2.72 0 00-.09-.43 3.02 3.02 0 00-1.04-1.51C7.87 3.2 7.15 3 6.5 3c-.64 0-1.36.2-1.87.59-.5.38-.87.92-1.05 1.51-.04.13-.07.27-.09.4-.09.49-.14 1.24-.14 1.75v.06c-.19.07-.36.26-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.13 15.5.02 16 .02 16h12.96s.15-.5-.22-1.36c-.38-.85-2.19-1.42-3.39-1.95zm6.33-10.4l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9.99c-.55 0-1 .45-1 1s.45 1 1 1h2.58l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"following\": [\"M9.37 12.69c-1.2-.53-1.04-.85-1.08-1.29-.01-.06-.01-.12-.01-.19.41-.37.75-.87.97-1.44 0 0 .01-.03.01-.04.05-.13.09-.26.12-.39.28-.06.44-.36.5-.63.06-.11.19-.39.16-.7-.04-.4-.2-.59-.38-.67v-.07c0-.52-.05-1.26-.14-1.74a2.72 2.72 0 00-.09-.43 3.02 3.02 0 00-1.04-1.51C7.87 3.2 7.15 3 6.5 3c-.64 0-1.36.2-1.87.59-.5.38-.87.92-1.05 1.51-.04.13-.07.27-.09.4-.09.49-.14 1.24-.14 1.75v.06c-.19.07-.36.26-.4.68-.03.31.1.59.16.7.06.28.23.59.51.64.04.14.08.27.13.39 0 .01.01.02.01.02v.01c.22.59.57 1.1.99 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.12 1.29-1.2.53-3.01 1.1-3.38 1.95C-.13 15.5.02 16 .02 16h12.96s.15-.5-.22-1.36c-.38-.85-2.19-1.42-3.39-1.95zM14.99 2h-2.58l.29-.29A1.003 1.003 0 0011.28.29l-2 2c-.17.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L12.41 4h2.58c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"font\": [\"M13.93 14.67L8.94.67h-.01C8.79.28 8.43 0 8 0s-.79.28-.93.67h-.01l-5 14h.01c-.04.1-.07.21-.07.33 0 .55.45 1 1 1 .43 0 .79-.28.93-.67h.01L5.49 11h5.02l1.55 4.34h.01c.14.38.5.66.93.66.55 0 1-.45 1-1 0-.12-.03-.23-.07-.33zM6.2 9L8 3.97 9.8 9H6.2z\"],\n \"fork\": [\"M13.7 9.29a1.003 1.003 0 00-1.42 1.42l.29.29H11.4l-5-5h6.17l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.29.29H.99c-.55 0-1 .45-1 1s.45 1 1 1h2.59l6.71 6.71c.18.18.43.29.71.29h1.59l-.29.29a1.003 1.003 0 001.42 1.42l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71l-2.02-2z\"],\n \"form\": [\"M2 11v2h2v-2H2zM1 9h4c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1zm9-6h5c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1zM6 1a1.003 1.003 0 01.71 1.71l-3 4C3.53 6.89 3.28 7 3 7s-.53-.11-.71-.29l-2-2a1.003 1.003 0 011.42-1.42L3 4.59l2.29-3.3C5.47 1.11 5.72 1 6 1zm4 10h5c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"full-circle\": [\"M8 0a8 8 0 100 16A8 8 0 108 0z\"],\n \"full-stacked-chart\": [\"M13 12h1c.55 0 1-.45 1-1V8h-3v3c0 .55.45 1 1 1zM10 2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3h3V2zm0 4H7v3h3V6zm5-4c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v2h3V2zm0 3h-3v2h3V5zM5 5H2v3h3V5zm-2 7h1c.55 0 1-.45 1-1V9H2v2c0 .55.45 1 1 1zm12 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM5 2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h3V2zm3 10h1c.55 0 1-.45 1-1v-1H7v1c0 .55.45 1 1 1z\"],\n \"fullscreen\": [\"M3.41 2H5c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v4c0 .55.45 1 1 1s1-.45 1-1V3.41L5.29 6.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L3.41 2zM6 9c-.28 0-.53.11-.71.29L2 12.59V11c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.41l3.29-3.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1zm9 1c-.55 0-1 .45-1 1v1.59L10.71 9.3A.965.965 0 0010 9a1.003 1.003 0 00-.71 1.71l3.3 3.29H11c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm0-10h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.29a1.003 1.003 0 001.42 1.42L14 3.41V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"function\": [\"M8.12 4.74H6.98c.33-1.29.75-2.24 1.28-2.84.33-.37.64-.56.95-.56.06 0 .11.02.15.05.04.04.06.09.06.15 0 .05-.04.15-.13.29-.09.14-.13.28-.13.4 0 .18.07.33.2.46.14.13.31.19.52.19.22 0 .41-.08.56-.23.15-.16.23-.37.23-.63 0-.3-.11-.55-.34-.74C10.1 1.09 9.74 1 9.24 1c-.78 0-1.49.22-2.12.67-.64.45-1.24 1.2-1.81 2.23-.2.36-.38.59-.56.69-.18.1-.46.15-.85.15l-.26.9h1.08l-1.59 6.12c-.27 1.01-.44 1.63-.54 1.86-.14.34-.34.63-.62.87-.11.1-.24.15-.4.15a.15.15 0 01-.11-.04l-.04-.05c0-.03.04-.08.12-.16.08-.08.12-.2.12-.36 0-.18-.06-.33-.19-.44-.12-.12-.3-.18-.54-.18-.28 0-.51.08-.68.23-.16.14-.25.32-.25.53 0 .22.1.42.31.59.21.17.53.25.97.25.7 0 1.32-.18 1.87-.54.54-.36 1.02-.92 1.42-1.67.41-.75.82-1.96 1.25-3.63l.91-3.54h1.1l.29-.89zm5.43 1.52c.2-.15.41-.23.62-.23.08 0 .23.03.45.09s.41.09.57.09c.23 0 .42-.08.57-.23.16-.16.24-.36.24-.61 0-.26-.08-.47-.23-.62-.15-.15-.37-.23-.66-.23-.25 0-.5.06-.72.18-.23.12-.51.38-.86.78-.26.3-.64.81-1.15 1.55-.2-.91-.55-1.75-1.05-2.51l-2.72.46-.06.29c.2-.04.37-.06.51-.06.27 0 .49.11.67.34.28.36.67 1.45 1.17 3.26-.39.52-.66.85-.8 1.01-.24.26-.44.42-.59.5-.12.06-.25.09-.41.09-.11 0-.3-.06-.56-.18-.18-.08-.34-.12-.48-.12-.27 0-.48.08-.66.25-.17.17-.26.38-.26.64 0 .25.08.44.24.6.16.15.37.23.64.23.26 0 .5-.05.73-.16.23-.11.52-.34.86-.69.35-.35.82-.9 1.43-1.67.23.73.44 1.25.61 1.58s.37.57.59.71c.22.15.5.22.83.22.32 0 .65-.11.98-.34.44-.3.88-.81 1.34-1.53l-.26-.15c-.31.43-.54.7-.69.8-.1.07-.22.1-.35.1-.16 0-.32-.1-.48-.3-.27-.34-.62-1.27-1.06-2.8.4-.68.73-1.13 1-1.34z\"],\n \"gantt-chart\": [\"M10 10c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1zM6 7c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1zm9 5H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM4 5h3c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"geofence\": [\"M6 9c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1s-1-.45-1-1v-1.59l-3.29 3.3A1.003 1.003 0 010 15c0-.28.11-.53.3-.71L3.59 11H2c-.55 0-1-.45-1-1s.45-1 1-1zM9.088.004l.097.013.097.024.057.018.1.042.054.029.095.061.052.04 6 5 .05.046.076.08.053.07.06.095.051.11c.056.141.079.294.067.446l-.014.105-.037.143-.035.087-.043.083-4 7-.034.056-.059.08-.038.044-.096.092-.114.082-.116.062-.086.034-.109.03-.1.017-.069.006H8.83c.088-.25.144-.515.163-.79L9 13v-3a3 3 0 00-2.824-2.995L6 7H3c-.351 0-.689.06-1.002.171L2 5l.002-.07.013-.1.015-.073.025-.085.043-.104.056-.101.045-.066.079-.093.084-.078.083-.062 6-4 .07-.043.12-.056.111-.036.108-.022.083-.01h.031c.046-.002.083 0 .12.003z\"],\n \"geolocation\": [\"M-.01 6.66l7.34 2 2 7.33 6.66-16z\"],\n \"geosearch\": [\"M8.82 12.4h.66c.23 0 .36-.17.36-.4v-1.48l.19-.18c-.27.03-.55.06-.83.06-.28 0-.56-.03-.84-.07.02.04.05.08.07.13V12c0 .23.15.4.39.4zM6.4 15.1A5.51 5.51 0 01.9 9.6c0-.49.06-.98.18-1.43.03 0 .05-.01.08-.01h.08v.44c0 .19.17.34.36.34.03 0 .07-.01.1-.01l.71.7c.07.07.19.07.26 0s.07-.19 0-.26l-.7-.72c0-.02.03-.03.03-.05v-.11c0-.15.08-.2.23-.33h.42c.08 0 .15-.01.22-.04h.02c.02-.02.03-.02.04-.04.01-.01.01-.01.02-.01l.02-.01.9-.9c-.13-.26-.24-.52-.34-.8h-.5v-.43c0-.01.05.05.04-.08h.31c-.03-.13-.06-.26-.08-.39h-.57c.16-.12.34-.24.51-.36-.02-.23-.04-.46-.04-.7 0-.12.01-.23.02-.34A6.385 6.385 0 000 9.6C0 13.13 2.87 16 6.4 16c3.1 0 5.67-2.22 6.26-5.15l-.78-.88c-.21 2.85-2.58 5.13-5.48 5.13zm-1.7-2.93v-.28h.12c.23 0 .39-.19.39-.42v-.54s.01-.01 0-.01L3.77 9.45h-.62c-.23 0-.38.19-.38.42v1.6c0 .23.14.42.38.42h.26v1.61c0 .23.22.41.45.41s.45-.18.45-.41v-.97H4.3c.24 0 .4-.13.4-.36zm11.07-2.34l-2.94-2.94c.11-.17.21-.34.3-.52.01-.03.03-.06.04-.09.08-.18.16-.36.22-.55v-.01c.06-.19.1-.38.14-.58.01-.05.01-.09.02-.14.03-.2.05-.4.05-.61a4.4 4.4 0 00-4.4-4.4C6.77 0 4.8 1.97 4.8 4.4s1.97 4.4 4.4 4.4c.21 0 .41-.02.61-.05.04 0 .09-.01.14-.02.2-.03.39-.08.58-.14h.01c.19-.06.37-.14.55-.22.03-.01.06-.03.09-.04.18-.09.35-.19.52-.3l2.94 2.94a.8.8 0 00.57.23c.44 0 .8-.36.8-.8a.895.895 0 00-.24-.57zM9.2 7.6C7.43 7.6 6 6.17 6 4.4c0-1.77 1.43-3.2 3.2-3.2s3.2 1.43 3.2 3.2c0 1.77-1.43 3.2-3.2 3.2zm1.54 4.26v-.52c0-.09-.1-.17-.19-.17s-.19.07-.19.17v.52c0 .09.1.17.19.17s.19-.07.19-.17z\"],\n \"git-branch\": [\"M12 1c-1.66 0-3 1.34-3 3 0 1.25.76 2.32 1.85 2.77A2.02 2.02 0 019 8H7c-.73 0-1.41.2-2 .55V5.82C6.16 5.4 7 4.3 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.82v4.37c-1.16.4-2 1.51-2 2.81 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.04-.53-1.95-1.32-2.49.35-.31.81-.51 1.32-.51h2c1.92 0 3.52-1.35 3.91-3.15A2.996 2.996 0 0012 1zM4 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 12c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm8-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-commit\": [\"M15 7h-3.14c-.45-1.72-2-3-3.86-3S4.59 5.28 4.14 7H1c-.55 0-1 .45-1 1s.45 1 1 1h3.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H15c.55 0 1-.45 1-1s-.45-1-1-1zm-7 3c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"],\n \"git-merge\": [\"M12 6c-1.3 0-2.4.84-2.82 2H9c-1.62 0-3-.96-3.63-2.34C6.33 5.16 7 4.16 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.81v4.37C1.84 10.6 1 11.7 1 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V8.43A5.89 5.89 0 009 10h.18A2.996 2.996 0 0015 9c0-1.66-1.34-3-3-3zm-8 8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm8 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-new-branch\": [\"M14 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3.18 4.8C10.51 7.51 9.82 8 9 8H7c-.73 0-1.41.2-2 .55V5.82C6.16 5.4 7 4.3 7 3c0-1.66-1.34-3-3-3S1 1.34 1 3c0 1.3.84 2.4 2 2.82v4.37c-1.16.4-2 1.51-2 2.81 0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.04-.53-1.95-1.32-2.49.35-.31.81-.51 1.32-.51h2c1.9 0 3.49-1.33 3.89-3.11-.29.07-.58.11-.89.11-.41 0-.8-.08-1.18-.2zM4 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 12c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-pull\": [\"M3 1C1.34 1 0 2.34 0 4c0 1.3.84 2.4 2 2.82v3.37C.84 10.6 0 11.7 0 13c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V6.82C5.16 6.4 6 5.3 6 4c0-1.66-1.34-3-3-3zm0 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm11 5.18V6c0-1.66-1.34-3-3-3H9.41l1.29-1.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-3 3C6.11 3.47 6 3.72 6 4c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L9.41 5H11c.55 0 1 .45 1 1v4.18A2.996 2.996 0 0013 16c1.66 0 3-1.34 3-3 0-1.3-.84-2.4-2-2.82zM13 14c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-push\": [\"M4 6h1V5H4v1zm9 3c0-.28-.11-.53-.29-.71l-3-3C9.53 5.11 9.28 5 9 5s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L8 8.41V15c0 .55.45 1 1 1s1-.45 1-1V8.41l1.29 1.29c.18.19.43.3.71.3.55 0 1-.45 1-1zM5 3H4v1h1V3zm10-3H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h5v-2H2v-1h4v-1H3V2h11v9h-2v1h2v1h-2v2h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"git-repo\": [\"M5 9H4v1h1V9zm10-9H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h3v1l2-1 2 1v-1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM4 13H2v-1h2v1zm10 0H8v-1h6v1zm0-2H3V2h11v9zM5 3H4v1h1V3zm0 4H4v1h1V7zm0-2H4v1h1V5z\"],\n \"glass\": [\"M2 0v4c0 2.97 2.16 5.43 5 5.91V14H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1H9V9.91c2.84-.48 5-2.94 5-5.91V0H2z\"],\n \"globe\": [\"M4.45 7.83c-.26 0-.41.21-.41.46v1.75c0 .26.16.46.41.46h.29v1.77c0 .25.24.45.49.45s.49-.2.49-.45V11.2h-.01c.26 0 .44-.14.44-.4v-.3h.14c.26 0 .43-.2.43-.46v-.59s.01-.01 0-.01l-1.58-1.6h-.69zM8.51 3.9h.22c.06 0 .12-.01.12-.07 0-.06-.05-.07-.12-.07h-.22c-.06 0-.12.01-.12.07.01.06.06.07.12.07zm-2.33-.05c.07-.07.07-.19 0-.26l-.5-.5a.187.187 0 00-.26 0c-.07.07-.07.19 0 .26l.5.5c.07.07.19.07.26 0zm3.06.89c.07 0 .14-.06.14-.12v-.31c0-.07-.07-.12-.14-.12s-.14.06-.14.12v.31c0 .07.07.12.14.12zM8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-.55.1-1.07.23-1.57h.11v.47c0 .2.18.37.39.37.03 0 .08-.01.11-.02l.78.77c.08.08.2.08.28 0 .08-.08.08-.2 0-.28l-.75-.78c0-.02.04-.04.04-.06v-.12c0-.16.09-.22.25-.36h.46c.09 0 .17-.01.24-.05h.02c.02-.01.03-.02.05-.03.01-.01.01-.01.02-.01l.02-.02 1.59-1.58c.18-.18.18-.46 0-.64s-.47-.15-.65.03l-.3.34h-.57v-.48c0-.01.05.05.05-.09h.64c.12 0 .22-.09.22-.21s-.1-.21-.22-.21H4.1c.18-.15.34-.31.54-.44l.01-.01c.21-.14.45-.25.68-.37.15-.07.29-.15.44-.21.17-.07.35-.11.53-.17.18-.05.35-.12.53-.16a6.05 6.05 0 013.47.35c.05.02.1.05.16.08.25.11.48.24.71.39.25.16.49.34.71.55H10.6s0-.03-.01-.03c-.04 0-.09 0-.13.03l-.51.51a.17.17 0 000 .23c.06.06.17.06.23 0l.42-.44.01-.02h.25c0 .14-.07.09-.07.12v.07c0 .22-.15.37-.36.37h-.38c-.19 0-.38.21-.38.4v.17h-.1c-.12 0-.2.06-.2.18v.25h-.23c-.17 0-.3.11-.3.28 0 .17.13.26.3.26.07 0 .14.03.19-.11l.04.01.49-.46h.17l.39.37c.03.03.08.02.12-.01.03-.03.03-.12 0-.15l-.32-.35h.23l.09.12c.18.18.48.17.66-.01l.09-.1h.4c.02 0 .08.05.08.05v.24l-.05-.01h-.36c-.11 0-.21.1-.21.21 0 .11.09.21.21.21h.41v.15c-.14.21-.24.42-.45.42h-.94v-.01l-.44-.44a.47.47 0 00-.66 0l-.42.43v.01H8.6c-.26 0-.49.21-.49.46v.92c0 .26.23.45.49.45h.9c.34.14.57.35.72.69v1.68c0 .26.17.44.42.44h.72c.26 0 .4-.18.4-.44V9l.89-.86.03-.02.02-.01h.03c.07-.08.15-.19.15-.31v-.91c0-.18-.16-.32-.31-.46H13c.01.28.21.42.46.42h.42c.08.37.12.76.12 1.15 0 3.31-2.69 6-6 6zm4.54-4.27c-.1 0-.21.08-.21.18v.57c0 .1.11.18.21.18.1 0 .21-.08.21-.18v-.57c0-.1-.11-.18-.21-.18zM8.37 3.19c0-.25-.2-.42-.46-.42h-.54c-.25 0-.42.18-.42.43 0 .03-.1.04.05.08v.47c0 .15.06.27.21.27s.21-.12.21-.27v-.14h.5c.24 0 .45-.16.45-.42z\"],\n \"globe-network\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm5.17 5h-2.44c-.21-1.11-.51-2.03-.91-2.69 1.43.46 2.61 1.43 3.35 2.69zM10 8c0 .73-.05 1.39-.12 2H6.12C6.05 9.39 6 8.73 6 8s.05-1.39.12-2h3.76c.07.61.12 1.27.12 2zM8 2c.67 0 1.36 1.1 1.73 3H6.27C6.64 3.1 7.33 2 8 2zm-1.82.31c-.4.66-.71 1.58-.91 2.69H2.83a6.025 6.025 0 013.35-2.69zM2 8c0-.7.13-1.37.35-2h2.76C5.04 6.62 5 7.28 5 8s.04 1.38.11 2H2.35C2.13 9.37 2 8.7 2 8zm.83 3h2.44c.21 1.11.51 2.03.91 2.69A6.025 6.025 0 012.83 11zM8 14c-.67 0-1.36-1.1-1.73-3h3.46c-.37 1.9-1.06 3-1.73 3zm1.82-.31c.4-.66.7-1.58.91-2.69h2.44a6.025 6.025 0 01-3.35 2.69zM13.65 10h-2.76c.07-.62.11-1.28.11-2s-.04-1.38-.11-2h2.76c.22.63.35 1.3.35 2s-.13 1.37-.35 2z\"],\n \"graph\": [\"M14 3c-1.06 0-1.92.83-1.99 1.88l-1.93.97A2.95 2.95 0 008 5c-.56 0-1.08.16-1.52.43L3.97 3.34C3.98 3.23 4 3.12 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.24 0 .47-.05.68-.13l2.51 2.09C5.08 7.29 5 7.63 5 8c0 .96.46 1.81 1.16 2.35l-.56 1.69c-.91.19-1.6.99-1.6 1.96 0 1.1.9 2 2 2s2-.9 2-2c0-.51-.2-.97-.51-1.32l.56-1.69A2.99 2.99 0 0011 8c0-.12-.02-.24-.04-.36l1.94-.97c.32.21.69.33 1.1.33 1.1 0 2-.9 2-2s-.9-2-2-2z\"],\n \"graph-remove\": [\"M12.89 8.11l-.01.01-.38-.38-.38.38-.02-.02c-.54.55-1.27.9-2.1.9-1.66 0-3-1.34-3-3 0-.83.35-1.56.9-2.1l-.02-.02.38-.38-.38-.38.01-.01C7.35 2.57 7 1.83 7 1c0-.34.07-.65.17-.96A8.004 8.004 0 000 8c0 4.42 3.58 8 8 8 4.14 0 7.54-3.14 7.96-7.17-.31.1-.62.17-.96.17-.83 0-1.57-.35-2.11-.89zm1.02-4.61l1.79-1.79c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-1.79 1.8L10.71.3A.965.965 0 0010 0a1.003 1.003 0 00-.71 1.71l1.79 1.79-1.79 1.79a1.003 1.003 0 001.42 1.42l1.79-1.79 1.79 1.79a1.003 1.003 0 001.42-1.42l-1.8-1.79z\"],\n \"greater-than\": [\"M2.713 5.958a1 1 0 01.574-1.916l10 3c.95.285.95 1.63 0 1.916l-10 3a1 1 0 01-.574-1.916L9.52 8 2.713 5.958z\"],\n \"greater-than-or-equal-to\": [\"M2.713 3.958a1 1 0 01.574-1.916l10 3c.95.285.95 1.63 0 1.916l-10 3a1 1 0 01-.574-1.916L9.52 6 2.713 3.958zM3 12h10a1 1 0 010 2H3a1 1 0 010-2z\"],\n \"grid\": [\"M15 9c.55 0 1-.45 1-1s-.45-1-1-1h-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1H9V1c0-.55-.45-1-1-1S7 .45 7 1v1H4V1c0-.55-.45-1-1-1S2 .45 2 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v3H1c-.55 0-1 .45-1 1s.45 1 1 1h1v3H1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-1h3v1c0 .55.45 1 1 1s1-.45 1-1v-1h3v1c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V9h1zm-8 3H4V9h3v3zm0-5H4V4h3v3zm5 5H9V9h3v3zm0-5H9V4h3v3z\"],\n \"grid-view\": [\"M0 1v6h7V0H1C.45 0 0 .45 0 1zm0 14c0 .55.45 1 1 1h6V9H0v6zM15 0H9v7h7V1c0-.55-.45-1-1-1zM9 16h6c.55 0 1-.45 1-1V9H9v7z\"],\n \"group-objects\": [\"M5 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-3H5C2.24 3 0 5.24 0 8s2.24 5 5 5h6c2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 9H5c-2.21 0-4-1.79-4-4s1.79-4 4-4h6c2.21 0 4 1.79 4 4s-1.79 4-4 4zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"grouped-bar-chart\": [\"M10 12c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1zm3 0c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1zm2 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-9-1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1zm-3 0c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1v9c0 .55.45 1 1 1z\"],\n \"hand\": [\"M15 5c0-.55-.45-1-1-1-.41 0-.76.24-.91.59v.01s0 .01-.01.01L11.57 8h-.36l.78-4.84C12 3.11 12 3.05 12 3a1 1 0 00-1.99-.16v.01L9.18 8H9V1c0-.55-.45-1-1-1S7 .45 7 1v7h-.09l-.93-5.18A1 1 0 005 2c-.55 0-1 .45-1 1 0 .05 0 .11.01.16L5.26 11h-.04L2.83 7.44C2.65 7.18 2.35 7 2 7c-.55 0-1 .45-1 1 0 .17.04.33.12.47l3 5.69h.01v.01A5.002 5.002 0 0013 11v-.59l1.93-5.05c.05-.11.07-.23.07-.36z\"],\n \"hand-down\": [\"M14.72 7.87c-1.54-.67-2.99-2.68-3.7-3.95C10.11 1.95 9.93 0 6.14 0 4.05 0 2.71.61 1.92 2.12 1.27 3.36 1 5.21 1 7.83v.79c0 .65.6 1.18 1.35 1.18.34 0 .64-.11.88-.29.17.48.68.84 1.29.84.41 0 .78-.16 1.03-.42.23.37.67.63 1.19.63.57 0 1.05-.31 1.25-.74l.01.63v4.05c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V7.9c.58.41 1.55 1.21 2.47 1.29 1.57.14 1.82-1.07 1.25-1.32z\"],\n \"hand-left\": [\"M12.08 4.97c-1.26-.71-3.27-2.15-3.95-3.7C7.88.7 6.67.96 6.81 2.52c.09.93.89 1.9 1.3 2.48H1.5C.67 5 0 5.67 0 6.5S.67 8 1.5 8h4.05l.63.01c-.44.2-.75.69-.75 1.25 0 .52.26.96.63 1.19-.26.25-.42.61-.42 1.03 0 .61.35 1.12.84 1.29-.18.24-.29.54-.29.88 0 .75.54 1.35 1.19 1.35h.79c2.62 0 4.47-.28 5.71-.92 1.51-.79 2.12-2.14 2.12-4.22 0-3.79-1.95-3.97-3.92-4.89z\"],\n \"hand-right\": [\"M14.5 5H7.89c.41-.58 1.21-1.55 1.3-2.47C9.34.97 8.12.71 7.87 1.28c-.67 1.54-2.68 2.99-3.95 3.7C1.95 5.89 0 6.07 0 9.86c0 2.09.61 3.43 2.12 4.22 1.24.65 3.09.92 5.71.92h.79c.65 0 1.18-.6 1.18-1.35 0-.34-.11-.64-.29-.88.48-.17.84-.68.84-1.29 0-.41-.16-.78-.42-1.03.37-.23.63-.67.63-1.19 0-.57-.31-1.05-.74-1.25l.63-.01h4.05c.83 0 1.5-.67 1.5-1.5S15.33 5 14.5 5z\"],\n \"hand-up\": [\"M13.65 6.19c-.34 0-.64.11-.88.29-.17-.48-.68-.84-1.29-.84-.41 0-.78.16-1.03.42-.23-.37-.67-.63-1.19-.63-.57 0-1.05.31-1.25.74L8 5.55V1.5C8 .67 7.33 0 6.5 0S5 .67 5 1.5v6.61c-.58-.41-1.55-1.21-2.48-1.3C.96 6.67.7 7.88 1.28 8.13c1.54.67 2.99 2.68 3.7 3.95C5.89 14.05 6.07 16 9.86 16c2.09 0 3.43-.61 4.22-2.12.64-1.24.92-3.09.92-5.71v-.79c0-.65-.6-1.19-1.35-1.19z\"],\n \"hat\": [\"M15 10c.495 0 .933.379.993.882L16 11v.505c0 1.461-3.524 2.45-7.707 2.493L8 14c-4.31 0-8-1-8-2.495V11c0-.561.466-1 1-1 .895 0 3 1 7 1l.381-.003C12.135 10.937 14.134 10 15 10zm-4-8c1.13 0 2.02 2.153 2.671 6.46-1.063.266-2.644.652-4.887.727l-.403.01L8 9.2c-2.664 0-4.488-.444-5.673-.74C2.98 4.153 3.87 2 5 2c2 0 1.329 2 3 2s1-2 3-2z\"],\n \"header\": [\"M13 1c-.55 0-1 .45-1 1v5H4V2c0-.55-.45-1-1-1s-1 .45-1 1v12c0 .55.45 1 1 1s1-.45 1-1V9h8v5c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"header-one\": [\"M14.06 8c-.04.23-.12.44-.25.61-.13.17-.29.3-.48.41-.18.11-.39.18-.62.23-.23.04-.46.07-.71.07v1.03h1.74V16H15V8h-.94zM7 0c-.56 0-1 .45-1 1v4H2V1c0-.55-.45-1-1-1-.56 0-1 .45-1 1v10c0 .55.45 1 1 1 .56 0 1-.45 1-1V7h4v4c0 .55.45 1 1 1 .56 0 1-.45 1-1V1c0-.54-.45-1-1-1z\"],\n \"header-two\": [\"M13.17 13.93c-.17.15-.33.29-.46.44-.13.16-.22.32-.27.49h3.55V16H11c.01-.65.16-1.22.44-1.71s.67-.91 1.17-1.27c.24-.18.49-.36.75-.54.25-.18.49-.36.71-.57.21-.2.39-.42.53-.65.14-.24.21-.51.22-.82 0-.14-.02-.29-.05-.45-.03-.16-.09-.31-.18-.45a1.13 1.13 0 00-.37-.35c-.16-.09-.37-.14-.63-.14-.24 0-.43.05-.59.15-.16.1-.29.24-.38.42-.1.17-.17.38-.21.62-.05.24-.07.5-.08.77h-1.19c0-.43.05-.83.16-1.2s.27-.69.49-.96c.21-.25.48-.46.79-.62.31-.15.67-.23 1.07-.23.45 0 .82.08 1.11.23.3.16.55.36.73.6.19.24.32.5.39.79.08.28.12.54.12.79 0 .31-.04.6-.13.85s-.22.49-.37.7c-.15.21-.32.41-.52.59s-.4.35-.61.51l-.63.45c-.21.14-.39.28-.57.42zM0 1c0-.55.44-1 1-1 .55 0 1 .46 1 1v10c0 .55-.44 1-1 1-.55 0-1-.46-1-1V1zm6 0c0-.55.44-1 1-1 .55 0 1 .46 1 1v10c0 .55-.44 1-1 1-.55 0-1-.46-1-1V1zM2 5h4v2H2V5z\"],\n \"headset\": [\"M14.85 6.34C14.18 2.72 11.37 0 8 0S1.82 2.72 1.15 6.34C.47 6.9 0 8.1 0 9.5 0 11.43.9 13 2 13c0 1.1.9 2 2 2h2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1H4c-.55 0-1-.45-1-1 .55 0 1-.45 1-1V7c0-.45-.3-.81-.71-.94C3.97 3.7 5.81 2 8 2s4.03 1.7 4.71 4.06c-.41.13-.71.49-.71.94v5c0 .55.45 1 1 1h1c1.1 0 2-1.57 2-3.5 0-1.4-.47-2.6-1.15-3.16z\"],\n \"heart\": [\"M16 5.095c0-2.255-1.88-4.083-4.2-4.083-1.682 0-3.13.964-3.8 2.352a4.206 4.206 0 00-3.8-2.352C1.88 1.012 0 2.84 0 5.095c0 .066.007.13.01.194H.004c.001.047.01.096.014.143l.013.142c.07.8.321 1.663.824 2.573C2.073 10.354 4.232 12.018 8 15c3.767-2.982 5.926-4.647 7.144-6.854.501-.905.752-1.766.823-2.562.007-.055.012-.11.016-.164.003-.043.012-.088.013-.13h-.006c.003-.066.01-.13.01-.195z\"],\n \"heart-broken\": [\"M7.71 8.87L6.17 6.55l.02-.01A.906.906 0 016 6c0-.07.03-.13.04-.19h-.02l.78-3.92C6.09 1.34 5.19 1 4.2 1 1.88 1 0 2.83 0 5.09c0 .07.01.13.01.19H0c0 .05.01.1.01.14 0 .05.01.1.01.14.07.8.32 1.66.82 2.57 1.07 1.94 2.88 3.47 5.86 5.84l-.68-2.74h.02C6.03 11.16 6 11.08 6 11c0-.28.11-.53.29-.71l1.42-1.42zM16 5.09C16 2.83 14.12 1 11.8 1c-1.2 0-2.27.5-3.04 1.28l-.7 3.51 1.77 2.66-.01.01c.1.15.18.33.18.54 0 .28-.11.53-.29.71l-1.6 1.6.75 3.01c3.23-2.56 5.16-4.15 6.28-6.18.5-.91.75-1.77.82-2.56.01-.05.01-.11.02-.16 0-.04.01-.09.01-.13h-.01c.01-.07.02-.14.02-.2z\"],\n \"heat-grid\": [\"M0 10h5V7H0v3zm1-2h3v1H1V8zm14-5h-4v3h5V4c0-.55-.45-1-1-1zm0 2h-3V4h3v1zM0 4v2h5V3H1c-.55 0-1 .45-1 1zm0 9c0 .55.45 1 1 1h4v-3H0v2zm6-7h4V3H6v3zm0 8h4v-3H6v3zm1-2h2v1H7v-1zm4 2h4c.55 0 1-.45 1-1v-2h-5v3zm0-4h5V7h-5v3zm-5 0h4V7H6v3z\"],\n \"heatmap\": [\"M2 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm11-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm3 4.5A2.5 2.5 0 0013.5 6c-.98 0-1.82.57-2.23 1.39-.6-.78-1.51-1.3-2.56-1.36.18-.49.29-.99.29-1.53C9 2.01 6.99 0 4.5 0S0 2.01 0 4.5 2.01 9 4.5 9c.19 0 .37-.03.56-.06-.03.19-.06.37-.06.56C5 11.43 6.57 13 8.5 13c1.63 0 2.98-1.11 3.37-2.62.44.38 1 .62 1.63.62A2.5 2.5 0 0016 8.5zM14.5 13c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"],\n \"help\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm1 13H7v-2h2v2zm1.93-6.52c-.14.32-.35.64-.62.97L9.25 8.83c-.12.15-.24.29-.28.42-.04.13-.09.3-.09.52V10H7.12V8.88s.05-.51.21-.71L8.4 6.73c.22-.26.35-.49.44-.68.09-.19.12-.38.12-.58 0-.3-.1-.55-.28-.75-.18-.19-.44-.28-.76-.28-.33 0-.59.1-.78.29-.19.19-.33.46-.4.81-.03.11-.1.15-.2.14l-1.7-.25c-.12-.01-.16-.08-.14-.19.12-.82.46-1.47 1.03-1.94.57-.48 1.32-.72 2.25-.72.47 0 .9.07 1.29.22s.72.34 1 .59c.28.25.49.55.65.89.15.35.22.72.22 1.12s-.07.75-.21 1.08z\"],\n \"helper-management\": [\"M13 5h-2v2h2V5zm0 6h-2v2h2v-2zm0-3h-2v2h2V8zm2-8H1C.4 0 0 .4 0 1v14c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H2V2h12v12zm-7-3H5v2h2v-2zm3 0H8v2h2v-2z\"],\n \"highlight\": [\"M9.12 11.07l2-2.02.71.71 4-4.04L10.17 0l-4 4.04.71.71-2 2.02 4.24 4.3zM2 12.97h4c.28 0 .53-.11.71-.3l1-1.01-3.42-3.45-3 3.03c-.18.18-.29.44-.29.72 0 .55.45 1.01 1 1.01zm13 1.01H1c-.55 0-1 .45-1 1.01S.45 16 1 16h14c.55 0 1-.45 1-1.01s-.45-1.01-1-1.01z\"],\n \"history\": [\"M8 3c-.55 0-1 .45-1 1v4c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L9 7.59V4c0-.55-.45-1-1-1zm0-3a7.95 7.95 0 00-6 2.74V1c0-.55-.45-1-1-1S0 .45 0 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.54C4.64 2.78 6.23 2 8 2c3.31 0 6 2.69 6 6 0 2.61-1.67 4.81-4 5.63v-.01c-.63.23-1.29.38-2 .38-3.31 0-6-2.69-6-6 0-.55-.45-1-1-1s-1 .45-1 1c0 4.42 3.58 8 8 8 .34 0 .67-.03 1-.07.02 0 .04-.01.06-.01C12.98 15.4 16 12.06 16 8c0-4.42-3.58-8-8-8z\"],\n \"home\": [\"M2 10v5c0 .55.45 1 1 1h3v-5h4v5h3c.55 0 1-.45 1-1v-5L8 4l-6 6zm13.71-2.71L14 5.59V2c0-.55-.45-1-1-1s-1 .45-1 1v1.59L8.71.29C8.53.11 8.28 0 8 0s-.53.11-.71.29l-7 7a1.003 1.003 0 001.42 1.42L8 2.41l6.29 6.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"horizontal-bar-chart\": [\"M4 5h7c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zM1 1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1zm14 6H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-6 5H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1z\"],\n \"horizontal-bar-chart-asc\": [\"M1 3h5c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h7c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 6H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 11h10c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"horizontal-bar-chart-desc\": [\"M15 1H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM8 9H1c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm-2 4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm5-8H1c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"horizontal-distribution\": [\"M2 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm13 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-5 2H7c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"id-number\": [\"M2 5v7h12V5H2zm0-2h12c1.1 0 2 .9 2 2v7c0 1.1-.9 2-2 2H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2z\",\n \"M7.9 10.48c-.14-.33-.84-.55-1.3-.75-.46-.2-.4-.33-.42-.5v-.07c.16-.14.29-.33.37-.56 0 0 0-.01.01-.02.02-.05.03-.1.05-.15.1-.01.16-.13.19-.23.03-.04.07-.15.06-.27-.02-.16-.08-.24-.15-.26v-.03c0-.2-.02-.48-.05-.67-.01-.05-.02-.1-.03-.16-.07-.23-.21-.44-.4-.58-.2-.15-.48-.23-.73-.23s-.53.08-.72.23c-.19.14-.33.35-.4.58-.02.05-.03.1-.03.16-.05.18-.06.47-.06.67v.03c-.07.03-.14.1-.15.26-.02.12.03.22.06.27.02.1.09.22.2.24.01.05.03.1.05.15v.01c.08.23.22.42.38.56v.07c-.02.17.03.29-.43.5-.46.2-1.16.42-1.3.75s-.09.52-.09.52H8c-.01 0 .05-.19-.1-.52zM10 6h2c.55 0 1 .45 1 1s-.45 1-1 1h-2c-.55 0-1-.45-1-1s.45-1 1-1zM10 9h2c.55 0 1 .45 1 1s-.45 1-1 1h-2c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"image-rotate-left\": [\"M13 2h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C8.11 2.47 8 2.72 8 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H13c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3zm-5.5 9c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 6.33L7 12l-1 1-2-3-2 2.67V9h7v4.33z\"],\n \"image-rotate-right\": [\"M5.71 5.71l2-2C7.89 3.53 8 3.28 8 3c0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H3C1.34 2 0 3.34 0 5v3c0 .55.45 1 1 1s1-.45 1-1V5c0-.55.45-1 1-1h1.59l-.3.29a1.003 1.003 0 001.42 1.42zM12.5 11c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM15 7H6c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 6.33L12 12l-1 1-2-3-2 2.67V9h7v4.33z\"],\n \"import\": [\"M7.29 11.71c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L9 8.59V1c0-.55-.45-1-1-1S7 .45 7 1v7.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l4 4zM15 11c-.55 0-1 .45-1 1v2H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z\"],\n \"inbox\": [\"M13.91 2.6c-.16-.36-.51-.61-.92-.61h-10c-.41 0-.77.25-.92.61L-.01 7.45v5.54c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7.45L13.91 2.6zm-1.92 5.39c-.55 0-1 .45-1 1v1h-6v-1c0-.55-.45-1-1-1H1.94l1.71-4h8.68l1.71 4h-2.05z\"],\n \"inbox-filtered\": [\"M6.432 2c.094.14.202.273.324.394L8.42 4H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6.557c.693 0 1.363-.262 1.837-.736l.103-.102.85-1.14a2.564 2.564 0 00.623-1.682V5.058L16 7.46V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h3.432zm9.048-2c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V3.71L8.17.98A.566.566 0 018 .57c0-.31.26-.57.57-.57h6.91z\"],\n \"inbox-geo\": [\"M6.341 2A5.99 5.99 0 006 4H3.66L1.95 8H4c.55 0 1 .45 1 1v1h7a5.978 5.978 0 004-1.528V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h3.341zm3.679 2.145c0-.125.075-.23.205-.225h.345l.79.8c.005 0 0 .005 0 .005v.295c0 .13-.085.23-.215.23h-.07v.15c0 .13-.09.2-.215.2v.535c0 .125-.12.225-.245.225s-.245-.1-.245-.225V5.25h-.145c-.125 0-.205-.1-.205-.23v-.875zm2.235-2.195c-.03 0-.055-.005-.06-.035 0-.03.03-.035.06-.035h.11c.035 0 .06.005.06.035 0 .03-.03.035-.06.035h-.11zm-1.165-.025a.094.094 0 01-.13 0l-.25-.25a.094.094 0 010-.13.094.094 0 01.13 0l.25.25a.094.094 0 010 .13zm1.53.445c-.035 0-.07-.025-.07-.06v-.155c0-.03.035-.06.07-.06s.07.025.07.06v.155c0 .03-.035.06-.07.06zM12 0c2.21 0 4 1.79 4 4s-1.79 4-4 4-4-1.79-4-4 1.79-4 4-4zm0 7c1.655 0 3-1.345 3-3 0-.195-.02-.39-.06-.575h-.21c-.125 0-.225-.07-.23-.21h-.215c.075.07.155.14.155.23V3.9c0 .06-.04.115-.075.155h-.015l-.01.005-.015.01-.445.43v.815c0 .13-.07.22-.2.22h-.36c-.125 0-.21-.09-.21-.22v-.84a.627.627 0 00-.36-.345h-.45c-.13 0-.245-.095-.245-.225v-.46c0-.125.115-.23.245-.23l.13-.005.21-.215c.09-.09.24-.09.33 0l.22.225h.47c.105 0 .155-.105.225-.21v-.075h-.205a.106.106 0 01-.105-.105.11.11 0 01.105-.105h.18l.025.005v-.12s-.03-.025-.04-.025h-.2l-.045.05a.235.235 0 01-.33.005l-.045-.06h-.115l.16.175c.015.015.015.06 0 .075-.02.015-.045.02-.06.005l-.195-.185h-.085l-.245.23-.02-.005c-.025.07-.06.055-.095.055-.085 0-.15-.045-.15-.13s.065-.14.15-.14h.115v-.125c0-.06.04-.09.1-.09h.05V2.36c0-.095.095-.2.19-.2h.19c.105 0 .18-.075.18-.185V1.94c0-.015.035.01.035-.06h-.125l-.005.01-.21.22a.085.085 0 01-.115 0 .085.085 0 010-.115l.255-.255c.02-.015.045-.015.065-.015.005 0 .005.015.005.015h.64a2.327 2.327 0 00-.355-.275 2.452 2.452 0 00-.355-.195c-.03-.015-.055-.03-.08-.04a3.025 3.025 0 00-1.735-.175c-.09.02-.175.055-.265.08-.09.03-.18.05-.265.085-.075.03-.145.07-.22.105-.115.06-.235.115-.34.185l-.005.005c-.1.065-.18.145-.27.22h.455c.06 0 .11.045.11.105s-.05.105-.11.105h-.32c0 .07-.025.04-.025.045v.24h.285l.15-.17c.09-.09.235-.105.325-.015.09.09.09.23 0 .32l-.795.79-.01.01c-.005 0-.005 0-.01.005l-.025.015h-.01a.235.235 0 01-.12.025h-.23c-.08.07-.125.1-.125.18v.06c0 .01-.02.02-.02.03l.375.39c.04.04.04.1 0 .14-.04.04-.1.04-.14 0l-.39-.385a.213.213 0 01-.055.01c-.105 0-.195-.085-.195-.185v-.235h-.055A3.1 3.1 0 009 4c0 1.655 1.345 3 3 3zm2.27-2.135c.05 0 .105.04.105.09v.285c0 .05-.055.09-.105.09-.05 0-.105-.04-.105-.09v-.285c0-.05.055-.09.105-.09zm-2.085-3.27c0 .13-.105.21-.225.21h-.25v.07c0 .075-.03.135-.105.135s-.105-.06-.105-.135V1.64c-.075-.02-.025-.025-.025-.04 0-.125.085-.215.21-.215h.27c.13 0 .23.085.23.21z\"],\n \"inbox-search\": [\"M5.639 2a5.391 5.391 0 00-.144 2H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6V9c0-.088.012-.174.033-.255.12-.007.238-.019.39-.038.154-.008.252-.03.442-.077a5.34 5.34 0 00.24-.05h.05l.122-.04 1.266 1.271c.425.47 1.116.769 1.847.769.21 0 .414-.025.61-.071V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h2.639zM15.82 7.53c.1.12.17.27.18.44 0 .34-.27.61-.61.61a.57.57 0 01-.43-.18l-2.24-2.25c-.13.08-.26.16-.4.23-.02.01-.05.02-.07.03-.14.06-.27.12-.42.17h-.01c-.14.05-.29.08-.44.11-.04.01-.08.02-.11.02-.15.02-.3.04-.46.04-1.85 0-3.35-1.51-3.35-3.37S8.96.01 10.81 0c1.85 0 3.35 1.51 3.35 3.37 0 .16-.02.31-.04.47-.01.04-.01.07-.02.11-.02.15-.05.29-.1.44v.01c-.05.15-.11.28-.17.42-.01.02-.02.05-.03.07-.07.14-.14.27-.23.4l2.25 2.24zm-5.01-1.94c1.22 0 2.21-.99 2.21-2.22 0-1.23-.99-2.22-2.21-2.22S8.6 2.14 8.6 3.37c0 1.22.99 2.22 2.21 2.22z\"],\n \"inbox-update\": [\"M8.1 2a5.023 5.023 0 000 2H3.66L1.95 8H4c.55 0 1 .45 1 1v1h6V9c0-.55.45-1 1-1h2.05c.708 0 1.352-.241 1.905-.645L16 7.46V13c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7.46l2.08-4.85C2.23 2.25 2.59 2 3 2h5.1zM13 6a3 3 0 110-6 3 3 0 010 6z\"],\n \"info-sign\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM7 3h2v2H7V3zm3 10H6v-1h1V7H6V6h3v6h1v1z\"],\n \"inheritance\": [\"M5 8c0 1.66 1.34 3 3 3h4.59L11.3 9.71A.965.965 0 0111 9a1.003 1.003 0 011.71-.71l3 3c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-3 3a1.003 1.003 0 01-1.42-1.42l1.3-1.29H8c-2.76 0-5-2.24-5-5H1a1 1 0 01-1-1V1a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5zM2 2v4h4V2H2z\"],\n \"inherited-group\": [\"M1 7c.51 0 .935.388.993.884L2 8v3c0 .51.388.935.884.993L3 12h1.59l-.3-.29a1.003 1.003 0 011.324-1.504l.096.084 2 2c.18.18.29.43.29.71 0 .233-.076.446-.206.614l-.084.096-2 2A1.003 1.003 0 014 15c0-.24.08-.458.224-.629l.076-.081.29-.29H3a2.996 2.996 0 01-2.995-2.823L0 11V8c0-.55.45-1 1-1zm5.388-7c.629 0 1.338.21 1.838.6.48.38.85.91 1.019 1.52.04.13.07.27.09.4.09.48.14 1.22.14 1.73v.07c.18.08.34.27.37.67.03.32-.09.59-.16.71-.06.28-.21.58-.48.63-.03.13-.07.26-.12.39 0 .01-.01.04-.01.04-.22.58-.55 1.08-.949 1.45v.18c.04.45-.12.77 1.059 1.3 1.179.53 2.947 1.09 3.307 1.95.37.86.22 1.36.22 1.36H9c0-.539-.21-1.045-.583-1.417l-2-2A1.997 1.997 0 005 9c-.149 0-.296-.015-.442-.045.099-.19.082-.37.101-.575 0-.05.01-.11.01-.17-.41-.35-.75-.86-.969-1.45v-.01s-.01-.01-.01-.02c-.04-.12-.09-.26-.12-.39-.28-.05-.44-.36-.5-.64-.06-.12-.19-.39-.16-.71.04-.41.21-.6.39-.68v-.06c0-.51.05-1.26.14-1.74.02-.13.05-.27.09-.4.17-.6.54-1.13 1.02-1.51C5.048.21 5.757 0 6.387 0zm4.625 2.04c.49 0 1.05.16 1.439.46.38.29.67.7.8 1.17.03.1.05.21.07.31.07.37.11.94.11 1.33v.05c.139.06.269.21.289.51.02.25-.07.45-.13.54-.05.21-.16.44-.38.48a1.711 1.711 0 01-.1.33c-.17.44-.43.83-.749 1.11v.14c.03.35-.09.59.83 1 .929.41 2.317.84 2.597 1.5.29.66.17 1.04.17 1.04H13.66v.01c-.05-.24-.14-.5-.25-.76-.36-.86-1.119-1.33-2.687-2-.14-.06-.59-.25-.6-.25-.21-.09-.36-.15-.5-.22.02-.1.02-.2.03-.31 0-.04.01-.08.01-.13-.07-.06-.13-.12-.19-.19.22-.32.4-.67.54-1.05.02-.06.02-.06.03-.1.29-.23.48-.57.59-.96.16-.33.25-.73.21-1.16-.03-.4-.16-.76-.37-1.03-.02-.53-.07-1.13-.15-1.54-.01-.06-.02-.12-.03-.19.23-.06.48-.09.72-.09z\"],\n \"inner-join\": [\"M6.6 3.3C5.3 4.4 4.5 6.1 4.5 8s.8 3.6 2.1 4.7c-.5.2-1 .3-1.6.3-2.8 0-5-2.2-5-5s2.2-5 5-5c.6 0 1.1.1 1.6.3zm-1.96 8.68C3.92 10.83 3.5 9.46 3.5 8s.42-2.83 1.14-3.98C2.6 4.2 1 5.91 1 8s1.6 3.8 3.64 3.98zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3zm.35 1.02c.73 1.15 1.14 2.52 1.14 3.98s-.42 2.83-1.14 3.98c2.04-.18 3.64-1.9 3.64-3.98s-1.6-3.8-3.64-3.98z\"],\n \"insert\": [\"M5 9h2v2c0 .6.4 1 1 1s1-.4 1-1V9h2c.6 0 1-.4 1-1s-.4-1-1-1H9V5c0-.6-.4-1-1-1s-1 .4-1 1v2H5c-.6 0-1 .4-1 1s.4 1 1 1zm10-9H1C.4 0 0 .4 0 1v14c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V1c0-.6-.4-1-1-1zm-1 14H2V2h12v12z\"],\n \"intersection\": [\"M10 3c-.92 0-1.76.26-2.5.69C6.76 3.26 5.92 3 5 3 2.24 3 0 5.24 0 8s2.24 5 5 5c.92 0 1.76-.26 2.5-.69.74.43 1.58.69 2.5.69 2.76 0 5-2.24 5-5s-2.24-5-5-5zm-4.1 7.85c-.29.09-.59.15-.9.15-1.66 0-3-1.34-3-3s1.34-3 3-3c.31 0 .61.06.9.15C5.33 5.96 5 6.94 5 8s.33 2.04.9 2.85zM10 11c-.31 0-.61-.06-.9-.15.57-.81.9-1.79.9-2.85s-.33-2.04-.9-2.85c.29-.09.59-.15.9-.15 1.66 0 3 1.34 3 3s-1.34 3-3 3z\"],\n \"ip-address\": [\"M5 2.66C5 4.14 8 8 8 8s3-3.86 3-5.34C10.99 1.2 9.66 0 8 0S5 1.2 5 2.66zM7 3c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1zM10.5 10H8v5h1v-4h1v1H9v1h2v-3h-.5zM2 9h12c.55 0 1 .45 1 1v5c0 .55-.45 1-1 1H2c-.55 0-1-.45-1-1v-5c0-.55.45-1 1-1zm4 1v5h1v-5H6z\"],\n \"issue\": [\"M8 16A8 8 0 118 0a8 8 0 010 16zm0-2A6 6 0 108 2a6 6 0 000 12zm1-2H7v-2h2v2zm0-3H7V4h2v5z\"],\n \"issue-closed\": [\"M9.296.104a2.99 2.99 0 00-1.003.664 2.987 2.987 0 00-.75 1.25 6 6 0 106.28 4.527c.043-.039.085-.079.127-.12l1.456-1.456A8 8 0 119.296.105zm2.532 5.2a.997.997 0 01-.707-.294L9.707 3.596a1 1 0 011.414-1.414l.707.707 1.768-1.768a1 1 0 111.414 1.415L12.536 5.01a.997.997 0 01-.708.293zM9 12H7v-2h2v2zm0-3H7V4h2v5z\"],\n \"issue-new\": [\"M10.568.421c-.01.04-.018.08-.026.121-.837.156-1.53.73-1.85 1.497a6 6 0 105.27 5.273 2.51 2.51 0 001.496-1.854c.04-.008.081-.016.121-.026A8 8 0 1110.568.421zM9 12H7v-2h2v2zm0-3H7V4h2v5zm1-6c0-.55.45-1 1-1h1V1c0-.55.45-1 1-1s1 .45 1 1v1h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v1.005c0 .55-.45 1-1 1s-1-.45-1-1V4h-1c-.55 0-1-.45-1-1z\"],\n \"italic\": [\"M9.8 4H11c.5 0 1-.4 1-1s-.4-1-1-1H7c-.5 0-1 .4-1 1s.4 1 1 1h.8l-1.6 8H5c-.5 0-1 .4-1 1s.4 1 1 1h4c.5 0 1-.4 1-1s-.4-1-1-1h-.8l1.6-8z\"],\n \"join-table\": [\"M15 5h-3V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h3v3c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-5-1v2H6V4h4zm0 6H6V7h4v3zM2 4h3v2H2V4zm0 5V7h3v2H2zm4 4v-2h4v2H6zm8 0h-3v-2h3v2zm0-3h-3V8h3v2z\"],\n \"key\": [\"M11 0C8.24 0 6 2.24 6 5c0 1.02.31 1.96.83 2.75L.29 14.29a1.003 1.003 0 001.42 1.42L3 14.41l1.29 1.29c.18.19.43.3.71.3s.53-.11.71-.29l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71L6.41 11l1.83-1.83c.8.52 1.74.83 2.76.83 2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8c-.23 0-.45-.03-.66-.08-.01 0-.02-.01-.03-.01-.21-.05-.41-.12-.6-.21a3.014 3.014 0 01-1.62-2c0-.01-.01-.02-.01-.03C8.03 5.45 8 5.23 8 5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3z\"],\n \"key-backspace\": [\"M15 2H6c-.28 0-.53.11-.71.29l-5 5C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l5 5c.18.18.43.29.71.29h9c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-2.29 7.29a1.003 1.003 0 01-1.42 1.42L10 9.41 8.71 10.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L8.59 8l-1.3-1.29a1.003 1.003 0 011.42-1.42L10 6.59l1.29-1.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L11.41 8l1.3 1.29z\"],\n \"key-command\": [\"M12 9h-1V7h1c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3v1H7V4c0-1.66-1.34-3-3-3S1 2.34 1 4s1.34 3 3 3h1v2H4c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3v-1h2v1c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3zm0-6c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM4 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm5 4H7V7h2v2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"key-control\": [\"M12.71 5.29l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"key-delete\": [\"M15.71 7.29l-5-5A.997.997 0 0010 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h9c.28 0 .53-.11.71-.29l5-5c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zm-7 2a1.003 1.003 0 01-1.42 1.42L6 9.41 4.71 10.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L4.59 8l-1.3-1.29a1.003 1.003 0 011.42-1.42L6 6.59 7.29 5.3c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L7.41 8l1.3 1.29z\"],\n \"key-enter\": [\"M14 2c-.55 0-1 .45-1 1v3c0 1.66-1.34 3-3 3H4.41L5.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L4.41 11H10c2.76 0 5-2.24 5-5V3c0-.55-.45-1-1-1z\"],\n \"key-escape\": [\"M2 7c.55 0 1-.45 1-1V4.41L7.29 8.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 3H6c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm7-5.9v2A5 5 0 113.1 9h-2c.49 3.39 3.38 6 6.9 6 3.87 0 7-3.13 7-7 0-3.52-2.61-6.41-6-6.9z\"],\n \"key-option\": [\"M11 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm4 8h-3.43L5.86 2.49h-.02A.975.975 0 005 2H1c-.55 0-1 .45-1 1s.45 1 1 1h3.43l5.71 9.51.01-.01c.18.3.49.5.85.5h4c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"key-shift\": [\"M13.71 7.29l-5-5C8.53 2.11 8.28 2 8 2s-.53.11-.71.29l-5 5A1.003 1.003 0 003 9h2v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V9h2a1.003 1.003 0 00.71-1.71z\"],\n \"key-tab\": [\"M15 10H4.41L5.7 8.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L2 9.59V8c0-.55-.45-1-1-1s-1 .45-1 1v6c0 .55.45 1 1 1s1-.45 1-1v-1.59l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 12H15c.55 0 1-.45 1-1s-.45-1-1-1zm0-9c-.55 0-1 .45-1 1v1.59L11.71 1.3A.965.965 0 0011 1a1.003 1.003 0 00-.71 1.71L11.59 4H1c-.55 0-1 .45-1 1s.45 1 1 1h10.59L10.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L14 6.41V8c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"known-vehicle\": [\"M15 3a.997.997 0 00-.707.293L12 5.586l-1.293-1.293a1 1 0 10-1.414 1.414l2 2a.997.997 0 001.414 0l3-3A1 1 0 0015 3zm-.879 6.121l-.007-.007c-.313.309-.69.552-1.114.702V10h-.998H12h-1v-.184c-.424-.15-.8-.395-1.112-.704l-.01.01-2-2 .012-.012A2.978 2.978 0 017.184 6H3c-.176 0-.06-.824 0-1l.73-1.63C3.79 3.192 3.823 3 4 3H7.78C8.328 2.39 9.115 2 10 2c.768 0 1.461.293 1.987.77l.844-.844c-.238-.244-.524-.442-.794-.524C12.037 1.402 10.72 1 8 1c-2.72 0-4.037.402-4.037.402-.508.155-1.078.711-1.268 1.237l-.763 2.117H.88c-.484 0-.88.423-.88.939s.396.939.88.939h.375L1 7c-.034.685 0 1.436 0 2v5c0 .657.384 1 1 1s1-.343 1-1v-1h10v1c0 .657.384 1 1 1s1-.343 1-1V9l-.003-.754-.876.875zM5.001 10H3V8h2v2z\"],\n \"lab-test\": [\"M11 1a1 1 0 010 2v3l3 7v1.25a.75.75 0 01-.75.75H2.75a.75.75 0 01-.75-.75V13l3-7V3a1 1 0 110-2h6zM9 3H7v3l-1.714 4h5.428L9 6V3z\"],\n \"label\": [\"M11 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7l-5-5zm3 10H2V4h8v2H3v1h7v1h4v4zm-3-5V4l3 3h-3zm-8 3h10V9H3v1z\"],\n \"layer\": [\"M16 8c0-.37-.21-.68-.51-.85l.01-.01-7-4-.01.01C8.34 3.06 8.18 3 8 3s-.34.06-.49.15l-.01-.02-7 4 .01.01C.21 7.32 0 7.63 0 8s.21.68.51.85l-.01.01 7 4 .01-.01c.15.09.31.15.49.15s.34-.06.49-.15l.01.01 7-4-.01-.01c.3-.17.51-.48.51-.85z\"],\n \"layers\": [\"M.55 4.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5a.998.998 0 00-.06-1.81L8.4.08a1.006 1.006 0 00-.79 0l-6.99 3a.992.992 0 00-.07 1.81zM15 10c-.16 0-.31.04-.45.11L8 13.38 1.45 10.1c-.14-.06-.29-.1-.45-.1-.55 0-1 .45-1 1 0 .39.23.73.55.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5c.32-.16.55-.5.55-.89 0-.55-.45-1-1-1zm0-3.5c-.16 0-.31.04-.45.11L8 9.88 1.45 6.61A.997.997 0 001 6.5c-.55 0-1 .45-1 1 0 .39.23.73.55.89l7 3.5c.14.07.29.11.45.11s.31-.04.45-.11l7-3.5c.32-.16.55-.5.55-.89 0-.55-.45-1-1-1z\"],\n \"layout\": [\"M14 4c-1.1 0-2 .9-2 2 0 .47.17.9.44 1.24l-.68.91A1.996 1.996 0 009.07 9.5H7.93C7.71 8.64 6.93 8 6 8c-.47 0-.9.17-1.24.44l-.91-.68c.1-.23.15-.49.15-.76 0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .37.11.71.28 1.01L3.01 5.28C2.71 5.11 2.37 5 2 5 .9 5 0 5.9 0 7s.9 2 2 2c.47 0 .9-.17 1.24-.44l.91.68c-.1.23-.15.49-.15.76 0 .37.11.71.28 1.01l-1.27 1.27C2.71 12.11 2.37 12 2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.37-.11-.71-.28-1.01l1.27-1.27c.3.17.64.28 1.01.28.93 0 1.71-.64 1.93-1.5h1.14c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2 0-.47-.17-.9-.44-1.24l.68-.91c.23.1.49.15.76.15 1.1 0 2-.9 2-2s-.9-2-2-2z\"],\n \"layout-auto\": [\"M14 9.5c-.56 0-1.06.23-1.42.59L8.99 8l3.59-2.09A2.002 2.002 0 0016 4.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .19.03.37.08.54L8.5 7.13v-3.2c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v3.2L3.92 5.04c.05-.17.08-.35.08-.54 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.56 0 1.06-.23 1.42-.59L7.01 8l-3.59 2.09A2.002 2.002 0 000 11.5c0 1.1.9 2 2 2s2-.9 2-2c0-.19-.03-.37-.08-.54L7.5 8.87v3.2c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-3.2l3.58 2.09c-.05.17-.08.35-.08.54 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\"],\n \"layout-balloon\": [\"M14 11c-.2 0-.38.04-.56.09L12.42 9.4c.36-.36.58-.85.58-1.4 0-.55-.22-1.04-.58-1.4l1.01-1.69c.19.05.37.09.57.09 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .55.22 1.04.58 1.4l-1.01 1.69C11.38 6.04 11.2 6 11 6c-.93 0-1.71.64-1.93 1.5H6.93C6.71 6.64 5.93 6 5 6c-.2 0-.38.04-.56.09L3.42 4.4C3.78 4.04 4 3.55 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.2 0 .38-.04.56-.09L3.58 6.6C3.22 6.96 3 7.45 3 8c0 .55.22 1.04.58 1.4l-1.01 1.69C2.38 11.04 2.2 11 2 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.55-.22-1.04-.58-1.4l1.01-1.69c.19.05.37.09.57.09.93 0 1.71-.64 1.93-1.5h2.14c.22.86 1 1.5 1.93 1.5.2 0 .38-.04.56-.09l1.01 1.69c-.35.36-.57.85-.57 1.4 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\"],\n \"layout-circle\": [\"M14.16 6.02c-.12-.36-.26-.7-.43-1.03.17-.29.27-.63.27-.99 0-1.1-.9-2-2-2-.36 0-.7.1-.99.27-.33-.17-.67-.31-1.03-.43A1.987 1.987 0 008 0C6.95 0 6.1.81 6.02 1.84c-.36.12-.7.26-1.03.43C4.7 2.1 4.36 2 4 2c-1.1 0-2 .9-2 2 0 .36.1.7.27.99-.17.33-.31.67-.43 1.03C.81 6.1 0 6.95 0 8c0 1.05.81 1.9 1.84 1.98.12.36.26.7.43 1.03-.17.29-.27.63-.27.99 0 1.1.9 2 2 2 .36 0 .7-.1.99-.27.33.17.67.32 1.03.43C6.1 15.19 6.95 16 8 16c1.05 0 1.9-.81 1.98-1.84.36-.12.7-.26 1.03-.43.29.17.63.27.99.27 1.1 0 2-.9 2-2 0-.36-.1-.7-.27-.99.17-.33.31-.67.43-1.03C15.19 9.9 16 9.05 16 8c0-1.05-.81-1.9-1.84-1.98zm-.99 3.79c-.05.16-.11.31-.17.46-.3-.17-.64-.27-1-.27-1.1 0-2 .9-2 2 0 .36.1.7.27 1-.15.07-.3.12-.46.17C9.5 12.48 8.81 12 8 12s-1.5.48-1.81 1.17c-.16-.06-.32-.11-.46-.17.17-.3.27-.64.27-1 0-1.1-.9-2-2-2-.36 0-.7.1-1 .27-.07-.15-.12-.3-.17-.46C3.52 9.5 4 8.81 4 8s-.48-1.5-1.17-1.81c.06-.16.11-.32.17-.46.3.17.64.27 1 .27 1.1 0 2-.9 2-2 0-.36-.1-.7-.27-1 .15-.07.3-.12.46-.17C6.5 3.52 7.19 4 8 4s1.5-.48 1.81-1.17c.16.06.32.11.46.17-.17.3-.27.64-.27 1 0 1.1.9 2 2 2 .36 0 .7-.1 1-.27.07.15.12.3.17.46C12.48 6.5 12 7.19 12 8s.48 1.5 1.17 1.81z\"],\n \"layout-grid\": [\"M2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 0C6.9 0 6 .9 6 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"layout-group-by\": [\"M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 5c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 1C.9 1 0 1.9 0 3s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"layout-hierarchy\": [\"M14.5 12.07V9.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2-.93 0-1.71.64-1.93 1.5H9.93c-.18-.7-.73-1.25-1.43-1.43V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v2.14c-.7.18-1.25.73-1.43 1.43H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8c0 .93.64 1.71 1.5 1.93v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93V9.93c.7-.18 1.25-.73 1.43-1.43h2.14c.18.7.73 1.25 1.43 1.43v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93V9.93c.7-.18 1.25-.73 1.43-1.43h2.14c.18.7.73 1.25 1.43 1.43v2.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93z\"],\n \"layout-linear\": [\"M14 6c-.93 0-1.71.64-1.93 1.5H9.93C9.71 6.64 8.93 6 8 6s-1.71.64-1.93 1.5H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.93 0 1.71-.64 1.93-1.5h2.13C6.29 9.36 7.07 10 8 10s1.71-.64 1.93-1.5h2.13c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2C16 6.9 15.1 6 14 6z\"],\n \"layout-skew-grid\": [\"M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"layout-sorted-clusters\": [\"M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM8 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"learning\": [\"M8.441 1.104a.985.985 0 00-.882 0L.365 5c-.487.253-.487.747 0 1L7.56 9.896a.985.985 0 00.882 0L15.635 6c.487-.253.487-.747 0-1L8.44 1.104z\",\n \"M14 5.5l.016 4.514c.002.548.447.99.994.99a.99.99 0 00.99-.99V5.5h-2zM3.371 9.047l4.387 2.432a.5.5 0 00.485 0l4.39-2.432a.25.25 0 01.371.218v2.955a.25.25 0 01-.134.222l-4.635 2.436a.5.5 0 01-.466 0l-4.635-2.436A.25.25 0 013 12.22V9.265a.25.25 0 01.371-.218z\"],\n \"left-join\": [\"M6.6 3.3C6.1 3.1 5.6 3 5 3 2.2 3 0 5.2 0 8s2.2 5 5 5c.6 0 1.1-.1 1.6-.3C5.3 11.6 4.5 9.9 4.5 8s.8-3.6 2.1-4.7zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3zm.35 1.02c.73 1.15 1.14 2.52 1.14 3.98s-.42 2.83-1.14 3.98c2.04-.18 3.64-1.9 3.64-3.98s-1.6-3.8-3.64-3.98z\"],\n \"less-than\": [\"M13.287 5.958a1 1 0 00-.574-1.916l-10 3c-.95.285-.95 1.631 0 1.916l10 3a1 1 0 00.574-1.916L6.48 8l6.807-2.042z\"],\n \"less-than-or-equal-to\": [\"M13.287 3.958a1 1 0 00-.575-1.916l-10 3c-.95.285-.95 1.63 0 1.916l10 3a1 1 0 00.575-1.916L6.48 6l6.807-2.042zM13 12H3a1 1 0 000 2h10a1 1 0 000-2z\"],\n \"lifesaver\": [\"M9.405 11.746C8.968 11.91 8.495 12 8 12c-.494 0-.968-.09-1.405-.254l-.702 1.873C6.548 13.865 7.258 14 8 14c.742 0 1.452-.135 2.107-.38l-.702-1.874zm2.341-2.341l1.873.702C13.865 9.452 14 8.742 14 8c0-.742-.135-1.452-.38-2.107l-1.874.702c.164.437.254.91.254 1.405 0 .494-.09.968-.254 1.405zM9.405 4.254l.702-1.873A5.987 5.987 0 008 2c-.742 0-1.452.135-2.107.38l.702 1.874C7.032 4.09 7.505 4 8 4c.494 0 .968.09 1.405.254zM4.254 6.595L2.38 5.893A5.987 5.987 0 002 8c0 .742.135 1.452.38 2.107l1.874-.702A3.991 3.991 0 014 8c0-.494.09-.968.254-1.405zM8 16A8 8 0 118 0a8 8 0 010 16zm0-6a2 2 0 100-4 2 2 0 000 4z\"],\n \"lightbulb\": [\"M9.01 14h-2c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1s-.44-1-1-1zm1-3h-4c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.44-1-1-1zm-2-11C5.26 0 3.03 1.95 3.03 4.35c0 2.37 1.63 2.64 1.94 5.22 0 .24.22.44.5.44h5.09c.28 0 .5-.19.5-.44C11.37 6.99 13 6.72 13 4.35 13 1.95 10.77 0 8.01 0z\"],\n \"link\": [\"M4.99 11.99c.28 0 .53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42l-6 6a1.003 1.003 0 00.71 1.71zm3.85-2.02L6.4 12.41l-1 1-.01-.01c-.36.36-.85.6-1.4.6-1.1 0-2-.9-2-2 0-.55.24-1.04.6-1.4l-.01-.01 1-1 2.44-2.44c-.33-.1-.67-.16-1.03-.16-1.1 0-2.09.46-2.81 1.19l-.02-.02-1 1 .02.02c-.73.72-1.19 1.71-1.19 2.81 0 2.21 1.79 4 4 4 1.1 0 2.09-.46 2.81-1.19l.02.02 1-1-.02-.02c.73-.72 1.19-1.71 1.19-2.81 0-.35-.06-.69-.15-1.02zm7.15-5.98c0-2.21-1.79-4-4-4-1.1 0-2.09.46-2.81 1.19l-.02-.02-1 1 .02.02c-.72.72-1.19 1.71-1.19 2.81 0 .36.06.69.15 1.02l2.44-2.44 1-1 .01.01c.36-.36.85-.6 1.4-.6 1.1 0 2 .9 2 2 0 .55-.24 1.04-.6 1.4l.01.01-1 1-2.43 2.45c.33.09.67.15 1.02.15 1.1 0 2.09-.46 2.81-1.19l.02.02 1-1-.02-.02a3.92 3.92 0 001.19-2.81z\"],\n \"list\": [\"M1 3h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 10H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"list-columns\": [\"M6 1c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1s.45-1 1-1h5zm9-12c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5zm0 4c.55 0 1 .45 1 1s-.45 1-1 1h-5c-.55 0-1-.45-1-1s.45-1 1-1h5z\"],\n \"list-detail-view\": [\"M6 9H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm9-12h-5c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM6 5H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"locate\": [\"M15 7h-.09A6.98 6.98 0 009 1.1V1c0-.55-.45-1-1-1S7 .45 7 1v.09A6.98 6.98 0 001.1 7H1c-.55 0-1 .45-1 1s.45 1 1 1h.1A6.969 6.969 0 007 14.91V15c0 .55.45 1 1 1s1-.45 1-1v-.09A6.98 6.98 0 0014.9 9h.1c.55 0 1-.45 1-1s-.45-1-1-1zm-6.02 5.9c-.05-.5-.46-.9-.98-.9s-.93.4-.98.9A5.017 5.017 0 013.1 8.98c.5-.05.9-.46.9-.98s-.4-.93-.9-.98A5.017 5.017 0 017.02 3.1c.05.5.46.9.98.9s.93-.4.98-.9c1.97.39 3.52 1.95 3.92 3.92-.5.05-.9.46-.9.98s.4.93.9.98a5.017 5.017 0 01-3.92 3.92zM8 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"lock\": [\"M13.96 7H12V3.95C12 1.77 10.21 0 8 0S4 1.77 4 3.95V7H1.96c-.55 0-.96.35-.96.9v6.91c0 .54.41 1.19.96 1.19h12c.55 0 1.04-.65 1.04-1.19V7.9c0-.55-.49-.9-1.04-.9zM6 7V3.95c0-1.09.9-1.97 2-1.97s2 .88 2 1.97V7H6z\"],\n \"log-in\": [\"M11 8c0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L7.59 7H1c-.55 0-1 .45-1 1s.45 1 1 1h6.59L6.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71zm4-8H9c-.55 0-1 .45-1 1s.45 1 1 1h5v12H9c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"log-out\": [\"M7 14H2V2h5c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm8.71-6.71l-3-3a1.003 1.003 0 00-1.42 1.42L12.59 7H6c-.55 0-1 .45-1 1s.45 1 1 1h6.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"manual\": [\"M15.99 1.13c-.02-.41-.33-.77-.78-.87C12.26-.36 9.84.13 8 1.7 6.16.13 3.74-.36.78.26.33.35.03.72.01 1.13H0v12c0 .08 0 .17.02.26.12.51.65.82 1.19.71 2.63-.55 4.59-.04 6.01 1.57.02.03.06.04.08.06.02.02.03.04.05.06.04.03.09.04.13.07.05.03.09.05.14.07.11.04.23.07.35.07h.04c.12 0 .24-.03.35-.07.05-.02.09-.05.14-.07.04-.02.09-.04.13-.07.02-.02.03-.04.05-.06.03-.02.06-.03.08-.06 1.42-1.6 3.39-2.12 6.01-1.57.54.11 1.07-.21 1.19-.71.04-.09.04-.18.04-.26l-.01-12zM7 12.99c-1.4-.83-3.07-1.14-5-.93V1.96c2.11-.28 3.75.2 5 1.46v9.57zm7-.92c-1.93-.21-3.6.1-5 .93V3.42c1.25-1.26 2.89-1.74 5-1.46v10.11z\"],\n \"manually-entered-data\": [\"M1 8h3.76l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm14.49-4.01c.31-.32.51-.76.51-1.24C16 1.78 15.22 1 14.25 1c-.48 0-.92.2-1.24.51l-1.44 1.44 2.47 2.47 1.45-1.43zM1 4h7.76l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm0 6c-.55 0-1 .45-1 1 0 .48.35.86.8.96L2.76 10H1zm9.95-6.43l-6.69 6.69 2.47 2.47 6.69-6.69-2.47-2.47zm4.25 2.47L13.24 8H15c.55 0 1-.45 1-1 0-.48-.35-.86-.8-.96zM2 15l3.86-1.39-2.46-2.44L2 15zm13-5h-3.76l-2 2H15c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"map\": [\"M15.55 3.17l-4.49-3A.975.975 0 009.99.15L5.53 2.82 1.56.17A1.003 1.003 0 000 1v11c0 .35.18.65.45.83l4.49 3a.975.975 0 001.07.02l4.46-2.67 3.97 2.65A1.003 1.003 0 0016 15V4c0-.35-.18-.65-.45-.83zM5 13.46l-3-2v-8.6l2.94 1.96c.02.02.04.03.06.04v8.6zm5-2.32s-.01 0-.01.01L6 13.53V4.86s.01 0 .01-.01L10 2.47v8.67zm4 1.99l-2.94-1.96c-.02-.01-.04-.02-.05-.03v-8.6l3 2v8.59z\"],\n \"map-create\": [\"M14 6.82v6.32l-2.94-1.96c-.02-.01-.04-.02-.05-.03V6.22c-.08-.07-.15-.16-.22-.24-.28-.02-.54-.08-.79-.16v5.32s-.01 0-.01.01L6 13.53V4.86s.01 0 .01-.01l2.05-1.23C8.02 3.42 8 3.21 8 3c0-.98.47-1.84 1.2-2.39l-3.67 2.2L1.56.17A1.003 1.003 0 000 1v11c0 .35.18.65.45.83l4.49 3a.975.975 0 001.07.02l4.46-2.67 3.97 2.65A1.003 1.003 0 0016 15V5.82c-.25.09-.52.14-.8.16-.33.36-.73.67-1.2.84zm-9 6.64l-3-2v-8.6l2.94 1.96c.02.02.04.03.06.04v8.6zM11 4h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"map-marker\": [\"M8.46 0C5.42 0 2.95 2.39 2.95 5.33 2.95 8.28 8.46 16 8.46 16s5.51-7.72 5.51-10.67C13.96 2.39 11.5 0 8.46 0zm0 8a2.5 2.5 0 010-5 2.5 2.5 0 010 5z\"],\n \"maximize\": [\"M5.99 8.99c-.28 0-.53.11-.71.29l-3.29 3.29v-1.59c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.41L6.7 10.7a1.003 1.003 0 00-.71-1.71zm9-9h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-3.3 3.3a.99.99 0 00-.29.7 1.003 1.003 0 001.71.71l3.29-3.29V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z\"],\n \"media\": [\"M11.99 6.99c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm3-5h-14c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-10c0-.55-.45-1-1-1zm-1 9l-5-3-1 2-3-4-3 5v-7h12v7z\"],\n \"menu\": [\"M1 4h14c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 8H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm0-5H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"menu-closed\": [\"M14.99 6.99h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm-12-2c-.28 0-.53.11-.71.29l-2 2a1.014 1.014 0 000 1.42l2 2a1.003 1.003 0 001.71-.71v-4c0-.55-.45-1-1-1zm3-1h9c.55 0 1-.45 1-1s-.45-1-1-1h-9c-.55 0-1 .45-1 1s.45 1 1 1zm9 8h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"menu-open\": [\"M9.99 11.99h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm5.71 5.3l-2-2a1.003 1.003 0 00-1.71.71v4a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71z\"],\n \"merge-columns\": [\"M5.71 5.29a1.003 1.003 0 00-1.42 1.42l.3.29H2V2h3v1.51c.52.06.99.29 1.34.65l.66.66V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-3.82l-.66.66c-.35.35-.82.59-1.34.65V14H2V9h2.59l-.3.29a1.003 1.003 0 001.42 1.42l2-2C7.89 8.53 8 8.28 8 8c0-.28-.11-.53-.29-.71l-2-2zM15 0h-5c-.55 0-1 .45-1 1v3.82l.66-.66c.35-.35.82-.59 1.34-.65V2h3v5h-2.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C8.11 7.47 8 7.72 8 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14v5h-3v-1.51c-.52-.06-.99-.29-1.34-.65L9 11.18V15c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"merge-links\": [\"M8 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6 3c-.93 0-1.71.64-1.93 1.5H11V3c0-1.66-1.34-3-3-3S5 1.34 5 3v4.5H3.93C3.71 6.64 2.93 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.93 0 1.71-.64 1.93-1.5H5V13c0 1.66 1.34 3 3 3s3-1.34 3-3V8.5h1.07c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2s-.9-2-2-2zm-4 7c0 1.1-.9 2-2 2s-2-.9-2-2V3c0-1.1.9-2 2-2s2 .9 2 2v10z\"],\n \"minimize\": [\"M15.99.99a1.003 1.003 0 00-1.71-.71l-3.29 3.29V1.99c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H12.4l3.3-3.29c.18-.18.29-.43.29-.71zm-10 8h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.29 14.28a1.003 1.003 0 001.42 1.42L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4a1.02 1.02 0 00-1.01-1.01z\"],\n \"minus\": [\"M13 7H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"mobile-phone\": [\"M12 0H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM8 15c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3-3H5V3h6v9z\"],\n \"mobile-video\": [\"M15 4c-.28 0-.53.11-.71.29L12 6.59V4c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V9.41l2.29 2.29c.18.19.43.3.71.3.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"modal\": [\"M15 1a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h14zm-1 4H2v8h12V5zm-3-3H9v2h2V2zm3 0h-2v2h2V2z\"],\n \"modal-filled\": [\"M15 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm1 4H0V3h16v2zm-3-2h-2V1h2v2z\"],\n \"moon\": [\"M15 11.38A7.835 7.835 0 017.85 16C3.51 16 0 12.49 0 8.15 0 4.97 1.89 2.23 4.62 1c-.45.99-.7 2.08-.7 3.23a7.85 7.85 0 007.85 7.85c1.15 0 2.24-.25 3.23-.7z\"],\n \"more\": [\"M2 6.03a2 2 0 100 4 2 2 0 100-4zM14 6.03a2 2 0 100 4 2 2 0 100-4zM8 6.03a2 2 0 100 4 2 2 0 100-4z\"],\n \"mountain\": [\"M16 13H3l6-9h1l2 2h1l3 7zm-2.5-3.5l-1-2.5h-1l-2-2-3 4.5L9 8l1 1 1-1 2.5 1.5zM5.94 7l-4.122 6H0l5-6h.94z\"],\n \"move\": [\"M15.71 7.29l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9V3.41l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53.11 8.28 0 8 0s-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V7H3.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 9H7v3.59l-.29-.29A.965.965 0 006 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2a1.003 1.003 0 00-1.42-1.42l-.29.3V9h3.59l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"mugshot\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14h-.15c-.03-.09-.04-.16-.08-.25-.34-.79-2.01-1.31-3.12-1.8-1.11-.49-.96-.79-1-1.2-.01-.06-.01-.12-.01-.18.38-.34.69-.8.89-1.33 0 0 .01-.03.01-.04.04-.12.08-.24.11-.36.25-.05.4-.33.46-.59.06-.1.18-.36.15-.65-.04-.37-.19-.55-.35-.62v-.06c0-.48-.04-1.16-.13-1.61-.02-.12-.05-.25-.08-.37-.16-.55-.51-1.05-.96-1.39C9.26 3.19 8.6 3 8 3c-.59 0-1.26.19-1.73.55-.45.35-.8.84-.96 1.39-.04.13-.06.25-.08.38-.09.45-.13 1.13-.13 1.61v.06c-.18.06-.33.24-.37.62-.03.29.09.54.15.65.06.26.21.54.47.59.03.12.07.25.11.36 0 .01.01.02.01.02v.01c.21.54.53 1.01.92 1.35 0 .05-.01.11-.01.16-.04.41.08.7-1.03 1.2-1.11.49-2.77 1.01-3.12 1.8-.04.09-.05.16-.08.25H2V2h12v12z\"],\n \"multi-select\": [\"M12 3.98H4c-.55 0-1 .45-1 1v1h8v5h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm3-3H7c-.55 0-1 .45-1 1v1h8v5h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm-6 6H1c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm-1 5H2v-3h6v3z\"],\n \"music\": [\"M15 0c-.07 0-.13.03-.19.04V.02l-10 2v.02C4.35 2.13 4 2.52 4 3v9.12c-.31-.07-.65-.12-1-.12-1.66 0-3 .9-3 2s1.34 2 3 2 3-.9 3-2V6.32l8-1.6v5.4c-.31-.07-.65-.12-1-.12-1.66 0-3 .9-3 2s1.34 2 3 2 3-.9 3-2V1c0-.55-.45-1-1-1z\"],\n \"new-drawing\": [\"M14.9 11c.6 0 1 .5 1 1 0 .257-.073.44-.22.614l-.08.086-3 3c-.2.2-.4.3-.7.3-.5 0-1-.4-1-1 0-.257.073-.44.22-.614l.08-.086 3-3c.2-.2.4-.3.7-.3zM1.3.1l6.734 2.45a3.005 3.005 0 002.095 3.322 3.005 3.005 0 003.401 2.081L13.9 9.8v.2c0 .257-.073.44-.22.614l-.08.086-3 3c-.171.171-.343.27-.577.294L9.9 14h-.2l-5-1-.1-.01c-.231-.05-.45-.26-.56-.49L4 12.4l-4-11 .3-.3 5.8 5.8c-.1.2-.2.4-.2.6 0 .8.6 1.5 1.5 1.5s1.5-.7 1.5-1.5S8.2 6 7.4 6c-.16 0-.32.064-.48.14l-.12.06L1 .4l.3-.3zM13 0c.55 0 1 .45 1 1v1h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .503-.376.922-.861.99l-.013.002A.999.999 0 0113 6l.097-.006-.027.004a1 1 0 01-.037.001L13 6c-.55 0-1-.45-1-1V4h-1a.993.993 0 01-.855-.482A1 1 0 0110 3c0-.55.45-1 1-1h1V1c0-.55.45-1 1-1z\"],\n \"new-grid-item\": [\"M6 0H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm5 14c0-.55-.45-1-1-1s-1 .45-1 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1s-.45-1-1-1zM6 9H1c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1zm9 4c-.55 0-1 .45-1 1-.55 0-1 .45-1 1s.45 1 1 1h1c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm-4-4h-1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1s1-.45 1-1c.55 0 1-.45 1-1s-.45-1-1-1zm4-9h-5c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm0 9h-1c-.55 0-1 .45-1 1s.45 1 1 1c0 .55.45 1 1 1s1-.45 1-1v-1c0-.55-.45-1-1-1z\"],\n \"new-layer\": [\"M13.982 6.272l1.518.868-.01.01c.3.17.51.48.51.85s-.21.68-.51.85l.01.01-7 4-.01-.01A.94.94 0 018 13a.94.94 0 01-.49-.15l-.01.01-7-4 .01-.01A.977.977 0 010 8c0-.37.21-.68.51-.86L.5 7.13l7-4 .01.02A.94.94 0 018 3c.086 0 .168.014.246.038a2 2 0 105.736 3.234zM14 3c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .55-.45 1-1 1s-1-.45-1-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 1-1s1 .45 1 1v1h1z\"],\n \"new-layers\": [\"M13 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5H9a1 1 0 110-2h2V1a1 1 0 012 0v2zm-3-1.983V2H9a2 2 0 100 4h1v1c0 .279.057.544.16.785l-1.71.855c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5a.992.992 0 01.07-1.81l6.99-3a1.006 1.006 0 01.79 0l1.6.687zm.91 7.66a2 2 0 003.085-1.54l.555-.277c.14-.07.29-.11.45-.11.55 0 1 .45 1 1 0 .39-.23.73-.55.89l-7 3.5c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5C.23 8.48 0 8.14 0 7.75c0-.55.45-1 1-1 .16 0 .31.04.45.11L8 10.13l2.91-1.453zM15 10.25c.55 0 1 .45 1 1 0 .39-.23.73-.55.89l-7 3.5c-.14.07-.29.11-.45.11-.16 0-.31-.04-.45-.11l-7-3.5c-.32-.16-.55-.5-.55-.89 0-.55.45-1 1-1 .16 0 .31.04.45.1L8 13.63l6.55-3.27c.14-.07.29-.11.45-.11z\"],\n \"new-link\": [\"M15 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3.5 6a2.5 2.5 0 00-2.45 2h-4.1a2.5 2.5 0 100 1h4.1a2.5 2.5 0 102.45-3z\"],\n \"new-object\": [\"M8 4c0 .6.4 1 1 1h2v2c0 .6.4 1 1 1s1-.4 1-1V5h2c.6 0 1-.4 1-1s-.4-1-1-1h-2V1c0-.6-.4-1-1-1s-1 .4-1 1v2H9c-.6 0-1 .5-1 1zm6.5 2.5V7c0 1.4-1.1 2.5-2.5 2.5S9.5 8.4 9.5 7v-.5H9C7.6 6.5 6.5 5.4 6.5 4S7.6 1.5 9 1.5h.5V1c0-.3.1-.6.1-.8C9.1.1 8.6 0 8 0 3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8c0-.6-.1-1.3-.2-1.9-.4.3-.8.4-1.3.4z\"],\n \"new-person\": [\"M9.12 12.69c-1.17-.53-1.01-.85-1.05-1.29-.01-.06-.01-.12-.01-.19.4-.37.73-.87.94-1.44 0 0 .01-.03.01-.04.05-.14.09-.27.12-.4.27-.06.43-.36.49-.63.06-.11.19-.39.16-.7-.04-.41-.2-.6-.38-.68v-.07c0-.51-.05-1.25-.14-1.74-.02-.13-.05-.27-.09-.4-.17-.6-.53-1.14-1.01-1.52C7.66 3.2 6.96 3 6.33 3c-.62 0-1.33.2-1.82.59-.49.38-.85.92-1.02 1.52-.04.13-.07.26-.09.4-.09.49-.13 1.23-.13 1.74v.06c-.19.08-.35.27-.39.68-.03.31.1.59.16.7.06.28.22.59.5.64.03.14.07.27.11.4 0 .01.01.02.01.02v.01c.22.59.55 1.1.96 1.46 0 .06-.01.12-.01.17-.04.44.08.76-1.09 1.29-1.17.53-2.93 1.1-3.29 1.95-.35.87-.2 1.37-.2 1.37h12.6s.15-.5-.22-1.36c-.36-.85-2.12-1.42-3.29-1.95zM14.89 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"new-prescription\": [\"M9.82 11.66l2.48-2.87c.12-.2.13-.37.04-.53-.11-.19-.3-.26-.52-.26h-1.29c-.27 0-.49.13-.63.34L8.44 9.9 6.95 8a.482.482 0 00-.08-.1L5.82 6.55c.57-.24 1.04-.57 1.42-1.01.49-.57.74-1.27.74-2.08 0-.51-.1-.99-.32-1.42-.21-.43-.51-.8-.89-1.11A4.1 4.1 0 005.42.24C4.91.08 4.34 0 3.72 0H.61C.26 0 0 .23 0 .56v9.89c0 .33.26.55.61.55h.8c.36 0 .61-.23.61-.56V6.99H3.3l3.73 4.74-2.71 3.48c-.12.2-.13.37-.04.53.11.19.3.26.52.26h1.27c.27 0 .51-.12.64-.34l1.69-2.15 1.66 2.14c.12.21.34.35.62.35h1.43c.2 0 .39-.08.5-.25.12-.18.09-.38-.02-.55l-2.77-3.54zM4.18 5H1.99V2.02h2.19c.62 0 1.08.13 1.38.37.29.22.44.62.44 1.08 0 .45-.15.94-.44 1.17-.31.23-.76.36-1.38.36zM15 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zM9.99 3.01c0 .02.01.04.01.06V2.95c0 .02-.01.04-.01.06z\"],\n \"new-text-box\": [\"M5 6.5c0 .28.22.5.5.5H7v3.5c0 .28.22.5.5.5s.5-.22.5-.5V7h1.5c.28 0 .5-.22.5-.5S9.78 6 9.5 6h-4c-.28 0-.5.22-.5.5zM15 2h-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V4h1c.55 0 1-.45 1-1s-.45-1-1-1zm-2 5c-.55 0-1 .45-1 1v5H3V4h5c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1z\"],\n \"ninja\": [\"M16 5s-2.52 2.11-4.96 1.99C11.03 4.89 10.39.23 5 0c0 0 2.11 2.54 1.96 4.99C4.86 5.01.23 5.65 0 11c0 0 2.56-2.12 5.02-1.95.02 2.11.67 6.72 5.98 6.95 0 0-2.09-2.54-1.94-4.99 2.11-.02 6.71-.68 6.94-6.01zM8 9.5c-.83 0-1.5-.67-1.5-1.5S7.17 6.5 8 6.5s1.5.67 1.5 1.5S8.83 9.5 8 9.5z\"],\n \"not-equal-to\": [\"M7.58 5l.44-2.196a1 1 0 011.96.392L9.62 5H13a1 1 0 010 2H9.22l-.4 2H13a1 1 0 010 2H8.42l-.44 2.196a1 1 0 01-1.96-.392L6.38 11H3a1 1 0 010-2h3.78l.4-2H3a1 1 0 110-2h4.58z\"],\n \"notifications\": [\"M8 16c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm6-5c-.55 0-1-.45-1-1V6c0-2.43-1.73-4.45-4.02-4.9 0-.04.02-.06.02-.1 0-.55-.45-1-1-1S7 .45 7 1c0 .04.02.06.02.1A4.992 4.992 0 003 6v4c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"notifications-updated\": [\"M8 16c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm3.399-13.667l-.413.412A2.99 2.99 0 009 1.99a3 3 0 00-3 2.99c0 .8.32 1.558.876 2.114l2.002 1.992A2.99 2.99 0 0013 9.184V10c0 .55.45 1 1 1s1 .45 1 1-.45 1-1 1H2c-.55 0-1-.45-1-1s.45-1 1-1 1-.45 1-1V6c0-2.43 1.73-4.45 4.02-4.9 0-.04-.02-.06-.02-.1 0-.55.45-1 1-1s1 .45 1 1c0 .04-.02.06-.02.1a4.97 4.97 0 012.419 1.233zM10.29 7.67l-2-1.99a.99.99 0 01-.29-.7 1 1 0 011-.99c.27 0 .52.11.7.29l1.29 1.29 3.28-3.28c.18-.18.42-.29.7-.29.55 0 1 .44 1 .99 0 .28-.11.52-.3.7l-3.98 3.98a.99.99 0 01-1.4 0z\"],\n \"numbered-list\": [\"M2.76 7h1.26V0h-.94c-.04.21-.12.39-.25.54-.13.15-.29.27-.48.36-.18.09-.39.16-.62.2-.23.04-.46.06-.71.06v.9h1.74V7zm-.59 7.17c.18-.12.37-.25.58-.37a10.763 10.763 0 001.24-.83c.2-.16.37-.33.52-.51.15-.19.28-.39.37-.61.09-.22.14-.47.14-.74 0-.22-.04-.45-.12-.7-.08-.26-.21-.49-.4-.69-.18-.21-.43-.39-.72-.52-.3-.14-.68-.21-1.12-.21-.41 0-.77.07-1.08.2-.32.14-.58.32-.8.56-.22.23-.38.51-.49.84-.11.32-.16.67-.16 1.05h1.19c.01-.24.03-.47.08-.67.05-.21.11-.39.21-.54.09-.15.22-.27.38-.36.16-.09.35-.13.59-.13.26 0 .47.04.63.12.16.08.29.18.38.3.09.12.15.25.18.39s.05.27.05.4c-.01.27-.08.5-.22.71-.14.21-.32.4-.53.57-.22.18-.45.34-.71.49-.26.15-.51.31-.74.47-.5.31-.89.68-1.17 1.11-.3.41-.44.91-.45 1.48h5v-1H1.43c.05-.15.14-.29.27-.43.14-.13.29-.26.47-.38zM15.01 1.99h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.44-1-1-1zm0 9h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.44-1-1-1z\"],\n \"numerical\": [\"M2.79 4.61c-.13.17-.29.3-.48.41-.18.11-.39.18-.62.23-.23.04-.46.07-.71.07v1.03h1.74V12h1.26V4h-.94c-.04.23-.12.44-.25.61zm4.37 5.31c.18-.14.37-.28.58-.42l.63-.45c.21-.16.41-.33.61-.51s.37-.38.52-.59c.15-.21.28-.45.37-.7.09-.25.13-.54.13-.85 0-.25-.04-.52-.12-.8-.07-.29-.2-.55-.39-.79a2.18 2.18 0 00-.73-.6c-.29-.15-.66-.23-1.11-.23-.41 0-.77.08-1.08.23-.31.16-.58.37-.79.64-.22.27-.38.59-.49.96-.11.37-.16.77-.16 1.2h1.19c.01-.27.03-.53.08-.77.04-.24.11-.45.21-.62.09-.18.22-.32.38-.42.16-.1.35-.15.59-.15.26 0 .47.05.63.14.15.09.28.21.37.35.09.14.15.29.18.45.03.16.05.31.05.45-.01.31-.08.58-.22.82-.14.23-.32.45-.53.65-.22.21-.46.39-.71.57-.26.18-.51.36-.75.54-.5.36-.89.78-1.17 1.27-.28.49-.43 1.06-.44 1.71h5v-1.15H6.43c.05-.17.14-.33.27-.49.13-.15.29-.29.46-.44zm8.5-1.56c-.23-.35-.54-.57-.95-.65v-.02c.34-.13.6-.34.76-.63.16-.29.24-.63.24-1.02 0-.34-.06-.64-.19-.9s-.3-.47-.51-.64c-.21-.17-.45-.3-.72-.38-.27-.09-.54-.13-.82-.13-.36 0-.68.07-.96.2-.28.13-.53.32-.72.55-.2.23-.36.51-.47.83-.11.32-.18.66-.19 1.04h1.15c-.01-.2.01-.39.06-.58.05-.19.12-.36.22-.51.1-.15.22-.27.37-.36.15-.09.32-.13.53-.13.32 0 .59.1.79.3.21.2.31.46.31.79 0 .23-.05.43-.14.59-.09.16-.21.29-.35.38-.15.09-.32.16-.51.19-.19.04-.38.05-.57.04v.93c.23-.01.45 0 .67.02.22.02.42.08.59.17.18.09.32.23.43.4.11.18.16.41.16.71 0 .44-.13.78-.39 1.02s-.58.36-.97.36c-.45 0-.79-.16-1.02-.47-.23-.31-.33-.7-.32-1.17H11c.01.4.06.77.17 1.1.11.33.26.61.47.85.21.23.46.42.77.54.31.13.67.19 1.08.19.34 0 .66-.05.96-.16.3-.11.57-.27.8-.47.23-.2.41-.45.55-.74.13-.27.2-.6.2-.97 0-.5-.11-.92-.34-1.27z\"],\n \"office\": [\"M15 5h-3V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h3v-4h4v4h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM5 10H2V7h3v3zm0-5H2V2h3v3zm5 5H7V7h3v3zm0-5H7V2h3v3zm4 9h-2v-2h2v2zm0-4h-2V7h2v3z\"],\n \"offline\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zM6 14l1-5H4l6-7-1 5h3l-6 7z\"],\n \"oil-field\": [\"M15 14h-1.35l-3.34-7.51 2.46-.95 1.45 3.21c.09.2.36.3.6.23.1-.03.18-.08.24-.15.05-.08 1.23-1.56.87-4.2-.11-.79-.52-4.62-3.26-4.62-.93 0-1.68.62-1.67 1.37 0 .14.03.28.09.42l.87 1.92L.64 8.07v.01A.98.98 0 000 9c0 .55.45 1 1 1 .13 0 .25-.03.36-.07v.01l1.04-.4L3.67 14H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM4.27 8.81L7.14 7.7 5.2 12.08l-.93-3.27zM6.54 14L9 8.46 11.46 14H6.54z\"],\n \"one-column\": [\"M11.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1zm-6 5c-.28 0-.53.11-.71.29l-2 2a1.014 1.014 0 000 1.42l2 2a1.003 1.003 0 001.71-.71v-4c0-.55-.45-1-1-1z\"],\n \"outdated\": [\"M8 0c4.42 0 8 3.58 8 8 0 4.06-3.02 7.4-6.94 7.92-.02 0-.04.01-.06.01-.33.04-.66.07-1 .07-4.42 0-8-3.58-8-8 0-.55.45-1 1-1s1 .45 1 1c0 3.31 2.69 6 6 6 .71 0 1.37-.15 2-.38v.01c2.33-.82 4-3.02 4-5.63 0-3.31-2.69-6-6-6-1.78 0-3.36.78-4.46 2H5c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v1.74A7.95 7.95 0 018 0zm1 12H7v-2h2v2zm0-3H7V4h2v5z\"],\n \"page-layout\": [\"M15 .95H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-12c0-.55-.45-1-1-1zm-9 12H2v-6h4v6zm8 0H7v-6h7v6zm0-7H2v-3h12v3z\"],\n \"panel-stats\": [\"M10 4h3v1h-3zM10 6h3v1h-3zM10 8h3v1h-3zM10 10h3v1h-3z\",\n \"M15 1H1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM8 12H2V3h6v9zm6 0H9V3h5v9z\"],\n \"panel-table\": [\"M15 1H1c-.6 0-1 .4-1 1v11c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM8 9H6V7h2v2zm0-3H6V4h2v2zm-6 6V3h3v9H2zm4 0v-2h2v2H6zm8 0H9v-2h5v2zm0-3H9V7h5v2zm0-3H9V4h5v2z\"],\n \"paperclip\": [\"M14.68 2.31A4.54 4.54 0 0011.46.99c-1.15 0-2.31.44-3.19 1.32L.95 9.63c-.63.63-.95 1.46-.95 2.28a3.21 3.21 0 003.23 3.22c.83 0 1.66-.31 2.3-.95l7.31-7.32c.76-.77.76-1.98.01-2.73s-1.99-.76-2.75 0l-6.07 6.08c-.24.25-.24.65.01.9s.65.25.91.01l6.07-6.08c.25-.25.67-.25.91-.01.25.25.25.67 0 .92l-7.31 7.32c-.75.75-2.04.74-2.76.01-.75-.75-.73-2.02.01-2.76L9.2 3.21c1.24-1.24 3.35-1.26 4.58-.03 1.24 1.24 1.24 3.36 0 4.6l-7.12 7.13c-.24.25-.24.64.01.88.24.24.63.24.88.01v.01l7.13-7.13A4.41 4.41 0 0016 5.51c0-1.16-.44-2.32-1.32-3.2z\"],\n \"paragraph\": [\"M13 1H6C3.8 1 2 2.8 2 5s1.8 4 4 4v5c0 .6.4 1 1 1s1-.5 1-1V3h2v11c0 .6.4 1 1 1s1-.5 1-1V3h1c.5 0 1-.4 1-1s-.4-1-1-1z\"],\n \"path\": [\"M14.5 0h-13C.67 0 0 .67 0 1.5S.67 3 1.5 3H7v3H3.5C2.67 6 2 6.67 2 7.5S2.67 9 3.5 9H7v3H5.5c-.83 0-1.5.67-1.5 1.5S4.67 15 5.5 15h5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5H9V9h3.5c.83 0 1.5-.67 1.5-1.5S13.33 6 12.5 6H9V3h5.5c.83 0 1.5-.67 1.5-1.5S15.33 0 14.5 0z\"],\n \"path-search\": [\"M15 14.62l-4-2.4V9.77c-.32.09-.66.15-1 .18v2.27l-4 2.4V8.71c-.38-.31-.72-.66-1-1.06v6.97l-4-2.4V8c.55 0 1-.45 1-1s-.45-1-1-1V1.38l3.15 1.89c.08-.34.18-.66.32-.97L.76.07v.01A.496.496 0 00.5 0C.22 0 0 .22 0 .5v12c0 .18.1.33.25.42v.01l5 3v-.01c.07.05.16.08.25.08s.18-.03.25-.08v.01l4.74-2.85 4.74 2.85v-.01c.09.05.18.08.27.08.28 0 .5-.22.5-.5v-3.78c-.3.17-.63.28-1 .28v2.62zM2 5c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1zm6-1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm7.75-.92l-1.19-.72c.18.43.29.9.36 1.38l.08.04v3.39l1 1V3.5c0-.18-.1-.33-.25-.42zM10 2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3.3 4.89c.44-.7.7-1.51.7-2.39C14 2.01 11.99 0 9.5 0S5 2.01 5 4.5 7.01 9 9.5 9c.88 0 1.69-.26 2.39-.7l2.41 2.41c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71l-2.41-2.4zM9.5 8C7.57 8 6 6.43 6 4.5S7.57 1 9.5 1 13 2.57 13 4.5 11.43 8 9.5 8z\"],\n \"pause\": [\"M6 3H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm6 0h-2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"people\": [\"M13.69 13.98c-.05-.24-.14-.5-.25-.76-.36-.86-1.12-1.33-2.69-2-.14-.06-.59-.25-.6-.25-.21-.09-.36-.15-.5-.22.02-.1.02-.2.03-.31 0-.04.01-.08.01-.13-.07-.06-.13-.12-.19-.19.22-.32.4-.67.54-1.05.02-.06.02-.06.03-.1.29-.23.48-.57.59-.96.16-.33.25-.73.21-1.16-.03-.4-.16-.76-.37-1.03-.02-.53-.07-1.13-.15-1.54-.01-.06-.02-.12-.03-.19.23-.06.48-.09.72-.09.49 0 1.05.16 1.44.46.38.29.67.7.8 1.17.03.1.05.21.07.31.07.37.11.94.11 1.33v.05c.14.06.27.21.29.51.02.25-.07.45-.13.54-.05.21-.16.44-.38.48-.02.1-.05.2-.09.3 0 .01-.01.03-.01.03-.17.44-.43.83-.75 1.11v.14c.03.35-.09.59.83 1 .93.41 2.32.84 2.6 1.5.29.66.17 1.04.17 1.04h-2.3zm-1.17-.38c.37.86.22 1.36.22 1.36H.06s-.14-.5.22-1.36 2.13-1.43 3.31-1.96c1.17-.54 1.05-.86 1.09-1.3 0-.05.01-.11.01-.17-.41-.35-.75-.86-.97-1.45v-.01s-.01-.01-.01-.02c-.04-.12-.09-.26-.12-.39-.28-.05-.44-.36-.5-.64-.06-.12-.19-.39-.16-.71.04-.41.21-.6.39-.68v-.06c0-.51.05-1.26.14-1.74.02-.13.05-.27.09-.4.17-.6.54-1.13 1.02-1.51.5-.39 1.21-.6 1.84-.6s1.34.21 1.84.6c.48.38.85.91 1.02 1.52.04.13.07.27.09.4.09.48.14 1.22.14 1.73v.07c.18.08.34.27.37.67.03.32-.09.59-.16.71-.06.28-.21.58-.48.63-.03.13-.07.26-.12.39 0 .01-.01.04-.01.04-.22.58-.55 1.08-.95 1.45v.18c.04.45-.12.77 1.06 1.3 1.18.53 2.95 1.09 3.31 1.95z\"],\n \"percentage\": [\"M6 6V4c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1c1.1 0 2-.9 2-2zM3.5 6c-.28 0-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5s.5.22.5.5v1c0 .28-.22.5-.5.5zM13 8h-1c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1c1.1 0 2-.9 2-2v-2c0-1.1-.9-2-2-2zm0 3.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5s.5.22.5.5v1zM12 3a1.003 1.003 0 00-1.87-.5l-5.99 9.98c-.09.15-.14.33-.14.52a1.003 1.003 0 001.87.5l5.99-9.98c.09-.15.14-.33.14-.52z\"],\n \"person\": [\"M15.68 14.32c-.46-1.05-2.68-1.75-4.16-2.4-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15A3.671 3.671 0 0010.32.72C9.68.25 8.79-.01 8-.01c-.79 0-1.68.25-2.31.73-.61.47-1.06 1.13-1.28 1.86-.05.17-.09.33-.11.5-.12.6-.17 1.51-.17 2.15v.08c-.24.09-.45.32-.5.83-.03.38.13.72.2.86.08.35.28.72.63.78.04.17.09.33.15.49 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.37 1.59-1.48.65-3.7 1.35-4.16 2.4-.46 1.05-.27 1.67-.27 1.67h15.92c-.01.01.18-.61-.28-1.66z\"],\n \"phone\": [\"M15.9 12.41c-.06-.06-3.37-2-3.48-2.05a.794.794 0 00-.32-.08c-.15 0-.34.11-.57.32-.23.22-.94 1.19-1.15 1.4-.21.22-.38.32-.52.32-.07 0-.15-.02-.25-.06-.1-.04-1.16-.58-3.36-2.52-2.2-1.93-2.49-3.2-2.5-3.55 0-.14.11-.31.32-.52.22-.21.45-.41.7-.6.25-.19.49-.4.7-.62.22-.23.32-.42.32-.57 0-.11-.03-.21-.08-.32C5.66 3.46 3.66.15 3.59.08 3.44-.07 2.85 0 2.55.16.16 1.46-.03 3.2 0 3.89c.04.71.49 4.46 4.16 7.95C8.72 16.17 11.89 16 12.1 16c.69 0 2.82-.38 3.72-2.55.13-.32.25-.87.08-1.04z\"],\n \"pie-chart\": [\"M7 1.08c-3.37.5-5.97 3.4-5.97 6.92 0 3.87 3.13 7 6.98 7 3.52 0 6.42-2.61 6.91-6H7V1.08z\",\n \"M8 0v8h8c0-4.42-3.58-8-8-8z\"],\n \"pin\": [\"M9.41.92c-.51.51-.41 1.5.15 2.56L4.34 7.54C2.8 6.48 1.45 6.05.92 6.58l3.54 3.54-3.54 4.95 4.95-3.54 3.54 3.54c.53-.53.1-1.88-.96-3.42l4.06-5.22c1.06.56 2.04.66 2.55.15L9.41.92z\"],\n \"pivot\": [\"M4.57 7.02L.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4.27-4.27c-.58-.35-1.07-.84-1.41-1.42zM15 8c-.55 0-1 .45-1 1v.59l-2.57-2.57c-.34.58-.83 1.07-1.41 1.41L12.59 11H12c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-4-3c0-1.66-1.34-3-3-3S5 3.34 5 5s1.34 3 3 3 3-1.34 3-3zM8 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"pivot-table\": [\"M2 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm0-4H1C.45 0 0 .45 0 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm11.71 4.29C13.53 4.11 13.28 4 13 4s-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V9c0 1.66-1.34 3-3 3H7.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H9c2.76 0 5-2.24 5-5V7.41l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2zM15 0H5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"play\": [\"M12 8c0-.35-.19-.64-.46-.82l.01-.02-6-4-.01.02A.969.969 0 005 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 6-4-.01-.02c.27-.18.46-.47.46-.82z\"],\n \"plus\": [\"M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"polygon-filter\": [\"M14 5c-.24 0-.47.05-.68.13L9.97 2.34c.01-.11.03-.22.03-.34 0-1.1-.9-2-2-2S6 .9 6 2c0 .04.01.08.01.12L2.88 4.21C2.61 4.08 2.32 4 2 4 .9 4 0 4.9 0 6c0 .74.4 1.38 1 1.72v4.55c-.6.35-1 .99-1 1.73 0 1.1.9 2 2 2 .74 0 1.38-.4 1.72-1h4.55c.35.6.98 1 1.72 1 1.1 0 2-.9 2-2 0-.37-.11-.7-.28-1L14 9c1.11-.01 2-.9 2-2s-.9-2-2-2zm-4.01 7c-.73 0-1.37.41-1.71 1H3.73c-.18-.3-.43-.55-.73-.72V7.72c.6-.34 1-.98 1-1.72 0-.04-.01-.08-.01-.12l3.13-2.09c.27.13.56.21.88.21.24 0 .47-.05.68-.13l3.35 2.79c-.01.11-.03.22-.03.34 0 .37.11.7.28 1l-2.29 4z\"],\n \"power\": [\"M8 8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S7 .45 7 1v6c0 .55.45 1 1 1zm3-5.32v2.34c1.21.91 2 2.35 2 3.98 0 2.76-2.24 5-5 5s-5-2.24-5-5c0-1.63.79-3.06 2-3.98V2.68C2.64 3.81 1 6.21 1 9c0 3.87 3.13 7 7 7s7-3.13 7-7c0-2.79-1.64-5.19-4-6.32z\"],\n \"predictive-analysis\": [\"M16 6.41c0-1.01-.49-1.94-1.29-2.49-.43-1.92-2.07-3.28-4-3.28-.46 0-.92.08-1.35.24C8.83.31 8.11 0 7.34 0c-.9 0-1.74.44-2.28 1.16-.12-.01-.24-.02-.36-.02-1.31 0-2.42.89-2.77 2.17C.78 3.72 0 4.84 0 6.13c0 .38.07.76.21 1.12C.07 7.6 0 7.98 0 8.36c0 1.11.58 2.11 1.51 2.63.54.56 1.27.87 2.03.87.49 0 .95-.12 1.37-.36a2.85 2.85 0 002.18 1.04c.52 0 1.03-.14 1.47-.42.49.39 1.07.65 1.69.73 1.04 1.15 1.84 2.63 1.84 2.64 0 0 .28.49.26.49.77 0 1.41-.16 1.32-1.04 0 .02-.73-2.31-.73-2.31.41-.21.75-.55.97-.98.9-.52 1.47-1.53 1.47-2.61 0-.24-.03-.48-.08-.71.45-.52.7-1.21.7-1.92zm-1.23 1.02l-.15-.16-.61-.67c-.27-.29-.54-.94-.58-1.39l-.1-1.01c-.05-.59-.94-.58-.91.11 0 .02.1 1.01.1 1.01.03.29.12.62.24.93-.06-.01-.12-.02-.18-.02 0 0-2.06-.1-2.05-.11-.58-.02-.71.97-.04 1l2.05.11c.42.02 1.04.3 1.29.58l.49.54.02.05c.08.21.12.44.12.66 0 .74-.41 1.41-1.07 1.75l-.16.08-.07.18c-.15.38-.48.66-.88.74l-.54.11.7 2.2c-.38-.61-.95-1.43-1.62-2.14l-.12-.13-.17-.01c-.41-.03-.8-.17-1.14-.38l1.36-1.18c.35-.31.83-.44.99-.39 0 0 .63.17.62.18.63.16.83-.74.23-.97l-.62-.18c-.55-.16-1.33.18-1.79.58l-1.53 1.33-.31.26c-.35.29-.75.44-1.2.44-.64 0-1.23-.33-1.58-.86V9.15c0-.4.17-.79.27-.85 0 0 .52-.34.51-.35.71-.53.18-1.23-.49-.89 0-.01-.52.35-.52.35-.26.15-.45.44-.58.77-.11-.11-.22-.2-.34-.28 0 0-1.53-1.01-1.53-1.02-.65-.45-1.2.51-.49.89 0-.01 1.51 1.02 1.51 1.02.37.24.62.78.62 1.09v.67c-.34.19-.63.29-.99.29-.54 0-1.05-.23-1.41-.63l-.05-.06-.07-.04c-.65-.34-1.05-1-1.05-1.73 0-.3.07-.6.2-.87l.12-.25L1.15 7c-.13-.27-.2-.56-.2-.87 0-.9.61-1.68 1.48-1.89l.31-.08.05-.34a1.926 1.926 0 012.38-1.58l.32.08.18-.31c.35-.6.99-.97 1.67-.97.44 0 .86.15 1.2.42l-.36.36v-.01l-.25.26c-.33.27-.74.42-.89.4 0 0-.67-.1-.67-.11-.67-.13-.87.86-.14 1.02.01 0 .67.11.67.11.02 0 .05 0 .07.01-.11.37-.15.77-.1 1.12 0 0 .17.99.15.99.11.52 1.06.36.93-.18 0-.01-.15-.99-.15-.99-.05-.37.12-.94.36-1.19l.39-.4c.05-.05.1-.09.15-.14l.74-.76c.4-.18.83-.27 1.27-.27 1.55 0 2.86 1.12 3.11 2.67l.04.25.21.12c.61.35.98 1 .98 1.7 0 .36-.1.7-.28 1.01z\"],\n \"prescription\": [\"M10.91 8.34c.14-.21.36-.34.63-.34h1.29c.22 0 .41.07.52.26.09.16.08.33-.04.53l-2.49 2.87 2.77 3.54c.12.17.14.37.02.55-.11.17-.3.25-.5.25h-1.44a.69.69 0 01-.61-.35L9.4 13.51l-1.69 2.15c-.13.21-.36.34-.63.34H5.8c-.22 0-.41-.07-.52-.26-.09-.16-.08-.33.04-.53l2.71-3.48L4.3 6.99H3.03v3.47c0 .33-.26.56-.62.56h-.8c-.35-.01-.61-.23-.61-.56V.56c0-.33.26-.56.62-.56h3.11c.62 0 1.19.08 1.7.24.51.16.96.39 1.34.69a3.194 3.194 0 011.21 2.53c0 .81-.25 1.5-.74 2.08-.37.44-.84.77-1.42 1.01L7.88 7.9c.04.04.07.08.08.1l1.49 1.9 1.46-1.56zM5.18 5c.62 0 1.08-.13 1.39-.37.29-.23.44-.71.44-1.16s-.15-.87-.44-1.1C6.26 2.12 5.8 2 5.18 2H2.99v3h2.19z\"],\n \"presentation\": [\"M15 1H9c0-.55-.45-1-1-1S7 .45 7 1H1c-.55 0-1 .45-1 1s.45 1 1 1v8c0 .55.45 1 1 1h3.59L3.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 13.41V15c0 .55.45 1 1 1s1-.45 1-1v-1.59l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L10.41 12H14c.55 0 1-.45 1-1V3c.55 0 1-.45 1-1s-.45-1-1-1zm-2 9H3V3h10v7z\"],\n \"print\": [\"M12 2.02c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h8v-1zm3 2H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1v-3h12v3h1c.55 0 1-.45 1-1v-6c0-.56-.45-1-1-1zm-1 3h-2v-1h2v1zm-3 6H5v-3H3v4c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-4h-2v3z\"],\n \"projects\": [\"M14 3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v1h12V3zm-2-3H4c-.55 0-1 .45-1 1h10c0-.55-.45-1-1-1zm3 5H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-3 6c0 .55-.45 1-1 1H5c-.55 0-1-.45-1-1V9h1v2h6V9h1v2z\"],\n \"properties\": [\"M2 6C.9 6 0 6.9 0 8s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-3h9c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1zm-4 9c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm13-5H6c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0 6H6c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"property\": [\"M3 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-.5-6.5a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM7 3h8c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zm8 10H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zM3 0C1.9 0 1 .9 1 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 6H7c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z\"],\n \"publish-function\": [\"M12.16 3.76c.15-.11.3-.16.47-.16.06 0 .17.02.34.06.16.04.31.06.43.06a.58.58 0 00.6-.6c0-.19-.06-.33-.17-.44-.11-.11-.28-.16-.49-.16-.19 0-.37.04-.54.13-.17.09-.39.27-.65.55-.2.21-.48.58-.87 1.11a5.22 5.22 0 00-.78-1.79l-2.05.32-.04.21c.15-.03.28-.04.39-.04.2 0 .37.08.5.25.21.26.5 1.03.88 2.33-.29.36-.49.6-.6.71-.18.19-.33.31-.45.36-.09.04-.19.07-.3.07-.09 0-.23-.04-.42-.13a.904.904 0 00-.36-.09c-.2 0-.36.06-.49.18a.59.59 0 00-.19.46c0 .18.06.32.18.43.12.11.28.16.48.16.2 0 .38-.04.55-.12.17-.08.39-.24.65-.49s.62-.65 1.07-1.19c.18.52.33.89.46 1.13.13.24.28.4.44.51.17.1.37.16.62.16.24 0 .49-.08.74-.25.33-.21.66-.58 1.01-1.09l-.21-.11c-.23.31-.41.5-.52.57a.44.44 0 01-.26.07c-.12 0-.24-.07-.36-.21-.2-.24-.46-.91-.8-2 .29-.49.54-.81.74-.96zM6.37 5.83l.68-2.53h.83l.2-.64h-.84c.24-.91.56-1.59.96-2.01.24-.27.48-.4.71-.4.05 0 .08.01.11.04s.04.06.04.1c0 .04-.03.11-.1.21-.06.1-.1.2-.1.29 0 .13.05.24.15.33.1.09.23.14.39.14.17 0 .31-.06.42-.17.12-.12.18-.27.18-.46 0-.21-.08-.39-.25-.52C9.57.07 9.3 0 8.93 0c-.59 0-1.12.16-1.59.48-.48.32-.93.85-1.36 1.59-.15.26-.29.42-.42.49s-.35.11-.64.1l-.19.65h.81L4.35 7.68c-.2.72-.33 1.16-.4 1.33-.1.24-.26.45-.46.62a.48.48 0 01-.31.1c-.03 0-.06-.01-.08-.03l-.03-.03c0-.02.03-.06.09-.11.06-.06.09-.15.09-.26 0-.13-.05-.23-.14-.32-.1-.09-.23-.13-.41-.13-.21 0-.38.05-.51.16A.52.52 0 002 9.4c0 .16.08.3.23.42.16.12.4.18.74.18.53 0 .99-.13 1.4-.39.41-.26.76-.65 1.07-1.19.3-.53.61-1.39.93-2.59zm2.34 3.46A.997.997 0 008 9c-.28 0-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V15c0 .55.45 1 1 1s1-.45 1-1v-2.59l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2z\"],\n \"pulse\": [\"M15 8h-1.46l-1.7-2.55-.02.01A.984.984 0 0011 5c-.43 0-.79.27-.93.65h-.01l-1.69 4.51-1.38-8.32h-.02A.989.989 0 006 1c-.41 0-.77.25-.92.61L2.34 8H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.41 0 .77-.25.92-.61l1.65-3.86 1.44 8.63h.02c.08.47.47.84.97.84.43 0 .79-.27.93-.65h.01l2.31-6.17.92 1.38.02-.01c.17.26.46.45.81.45h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"random\": [\"M11.48 4h1.11l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H11c-.32 0-.59.16-.77.38l-.01-.01L8.28 4.8l1.28 1.6L11.48 4zm2.23 6.29a1.003 1.003 0 00-1.42 1.42l.3.29h-1.11l-7.7-9.62h-.01A.996.996 0 003 2H1c-.55 0-1 .45-1 1s.45 1 1 1h1.52l7.7 9.62.01-.01c.18.23.45.39.77.39h1.59l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2zM2.52 12H1c-.55 0-1 .45-1 1s.45 1 1 1h2c.32 0 .59-.16.77-.38l.01.01 1.94-2.42L4.44 9.6 2.52 12z\"],\n \"record\": [\"M8 3a5 5 0 100 10A5 5 0 108 3z\"],\n \"redo\": [\"M12 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3.71-6.71l-3-3a1.003 1.003 0 00-1.42 1.42L12.59 4H5C2.24 4 0 6.24 0 9s2.24 5 5 5h4v-2H5c-1.66 0-3-1.34-3-3s1.34-3 3-3h7.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"refresh\": [\"M14.99 6.99c-.55 0-1 .45-1 1 0 3.31-2.69 6-6 6-1.77 0-3.36-.78-4.46-2h1.46c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1v-1.74a7.95 7.95 0 006 2.74c4.42 0 8-3.58 8-8 0-.55-.45-1-1-1zm0-7c-.55 0-1 .45-1 1v1.74a7.95 7.95 0 00-6-2.74c-4.42 0-8 3.58-8 8 0 .55.45 1 1 1s1-.45 1-1c0-3.31 2.69-6 6-6 1.77 0 3.36.78 4.46 2h-1.46c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z\"],\n \"regression-chart\": [\"M13 6.5c0 .83.67 1.5 1.5 1.5S16 7.33 16 6.5 15.33 5 14.5 5 13 5.67 13 6.5zM8.5 5c.83 0 1.5-.67 1.5-1.5S9.33 2 8.5 2 7 2.67 7 3.5 7.67 5 8.5 5zM9 9.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5S11.33 8 10.5 8 9 8.67 9 9.5zM4.5 8C5.33 8 6 7.33 6 6.5S5.33 5 4.5 5 3 5.67 3 6.5 3.67 8 4.5 8zM15 12H3.26l12.03-8.59-.58-.81L2 11.67V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"remove\": [\"M10.99 6.99h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z\"],\n \"remove-column\": [\"M14 0H4c-.55 0-1 .45-1 1v3h2V2h3v12H5v-2H3v3c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14h-3V2h3v12zm-8.71-3.29a1.003 1.003 0 001.42-1.42L4.41 8 5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L3 6.59l-1.29-1.3A1.003 1.003 0 00.29 6.71L1.59 8 .29 9.29a1.003 1.003 0 001.42 1.42L3 9.41l1.29 1.3z\"],\n \"remove-column-left\": [\"M4 9h4c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm11-9H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 14H2V2h8v12zm4 0h-3V2h3v12z\"],\n \"remove-column-right\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 14H2V2h3v12zm9 0H6V2h8v12zM8 9h4c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"remove-row-bottom\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V6h12v8zm0-9H2V2h12v3zm-8 6h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"remove-row-top\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2v-3h12v3zm0-4H2V2h12v8zM6 7h4c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"repeat\": [\"M10 5c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1s-1 .45-1 1v1.74A7.95 7.95 0 008 0C3.58 0 0 3.58 0 8c0 4.06 3.02 7.4 6.94 7.92.02 0 .04.01.06.01.33.04.66.07 1 .07 4.42 0 8-3.58 8-8 0-.55-.45-1-1-1s-1 .45-1 1c0 3.31-2.69 6-6 6-.71 0-1.37-.15-2-.38v.01C3.67 12.81 2 10.61 2 8c0-3.31 2.69-6 6-6 1.77 0 3.36.78 4.46 2H11c-.55 0-1 .45-1 1z\"],\n \"reset\": [\"M6 5c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v1.74A7.95 7.95 0 018 0c4.42 0 8 3.58 8 8 0 4.06-3.02 7.4-6.94 7.92-.02 0-.04.01-.06.01-.33.04-.66.07-1 .07-4.42 0-8-3.58-8-8 0-.55.45-1 1-1s1 .45 1 1c0 3.31 2.69 6 6 6 .71 0 1.37-.15 2-.38v.01c2.33-.82 4-3.02 4-5.63 0-3.31-2.69-6-6-6-1.77 0-3.36.78-4.46 2H5c.55 0 1 .45 1 1z\"],\n \"resolve\": [\"M6.6 3.3C6.1 3.1 5.6 3 5 3 2.2 3 0 5.2 0 8s2.2 5 5 5c.6 0 1.1-.1 1.6-.3C5.3 11.6 4.5 9.9 4.5 8s.8-3.6 2.1-4.7zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c-.6 0-1.1.1-1.6.3 1.3 1.2 2.1 2.9 2.1 4.7s-.8 3.6-2.1 4.7c.5.2 1 .3 1.6.3 2.8 0 5-2.2 5-5s-2.2-5-5-5z\"],\n \"rig\": [\"M5.71 3c0 1.1.96 2 2.14 2C9.04 5 10 3.96 10 3c0-1.96-1.47-3-2.14-3H5c0 1.96 2.68 1.4.71 3zm2.5 3l.01.01s0-.01-.01-.01zm6.5 8.29L10 9.59V7c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v2.58l-4.71 4.7c-.18.19-.29.44-.29.72a1.003 1.003 0 001.71.71L6 12.42V15c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2.58l3.29 3.29a1.003 1.003 0 001.42-1.42z\"],\n \"right-join\": [\"M6.6 3.3C5.3 4.4 4.5 6.1 4.5 8s.8 3.6 2.1 4.7c-.5.2-1 .3-1.6.3-2.8 0-5-2.2-5-5s2.2-5 5-5c.6 0 1.1.1 1.6.3zm-1.96 8.68C3.92 10.83 3.5 9.46 3.5 8s.42-2.83 1.14-3.98C2.6 4.2 1 5.91 1 8s1.6 3.8 3.64 3.98zM8 4c-1.2.9-2 2.4-2 4s.8 3.1 2 4c1.2-.9 2-2.3 2-4s-.8-3.1-2-4zm3-1c2.8 0 5 2.2 5 5s-2.2 5-5 5c-.6 0-1.1-.1-1.6-.3 1.3-1.1 2.1-2.9 2.1-4.7s-.8-3.5-2.1-4.7c.5-.2 1-.3 1.6-.3z\"],\n \"ring\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 12c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\"],\n \"rotate-document\": [\"M12 2h-1.59l.29-.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-2 2C7.11 2.47 7 2.72 7 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H12c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3zM5.71 5.29A.997.997 0 005 5H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V9c0-.28-.11-.53-.29-.71l-3-3zM7 14H2V7h2v2c0 .55.45 1 1 1h2v4z\"],\n \"rotate-page\": [\"M8 6H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm-1 8H3V8h4v6zm5-12h-1.59l.29-.29c.19-.18.3-.43.3-.71A1.003 1.003 0 009.29.29l-2 2C7.11 2.47 7 2.72 7 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H12c.55 0 1 .45 1 1v3c0 .55.45 1 1 1s1-.45 1-1V5c0-1.66-1.34-3-3-3z\"],\n \"route\": [\"M11.669 5.066l.099.189c.113.213.236.434.367.661.226.39.468.78.709 1.151l-.198-.004-.48-.004c-1.745.003-2.369.233-2.369.688 0 .053.226.19 1.038.436l.84.24C13.9 9.064 15 9.83 15 11.63c0 2.123-1.607 3.122-4.027 3.366-.651.065-1.266.075-2.043.05l-.958-.035H5.196l.268-.406c.336-.517.672-1.052.998-1.593h1.636l.572.023c.857.036 1.475.034 2.103-.03 1.526-.153 2.227-.59 2.227-1.375 0-.531-.402-.84-1.66-1.22l-.691-.198c-1.04-.293-1.764-.562-2.222-.946C8.8 8.366 9 7.612 9 6.997a5.03 5.03 0 00-.184-1.334c.645-.395 1.598-.562 2.853-.597zM4 3a4.007 4.007 0 014 3.997C8 9.21 4 15 4 15l-.416-.62C2.56 12.827 0 8.767 0 6.997A4.002 4.002 0 014 3zm0 2a2 2 0 10.001 4.001A2 2 0 004 5zm10-4c1.103 0 1.996.896 2 1.999C16 4.105 14 7 14 7l-.293-.44C13.15 5.707 12 3.838 12 2.999 12 1.896 12.897 1 14 1z\"],\n \"satellite\": [\"M3 9c0-.6.4-1 1-1s1 .4 1 1c0 1.1.9 2 2 2 .6 0 1 .4 1 1s-.4 1-1 1c-2.2 0-4-1.8-4-4zM0 9c0-.6.4-1 1-1s1 .4 1 1c0 2.8 2.2 5 5 5 .6 0 1 .4 1 1s-.4 1-1 1c-3.9 0-7-3.1-7-7zm7 1c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm1.3-2.8c-.4-.4-.4-1 0-1.4l4.5-4.5c.4-.4 1-.4 1.4 0l.5.5c.4.4.4 1 0 1.4l-4.5 4.5c-.4.4-1 .4-1.4 0l-.5-.5zM5.2.3c.4-.4 1-.4 1.4 0l2.1 2.1c.4.4.4 1 0 1.4l-.9.9c-.4.4-1 .4-1.4 0L4.3 2.6c-.4-.4-.4-1 0-1.4l.9-.9zm7 7c.4-.4 1-.4 1.4 0l2.1 2.1c.4.4.4 1 0 1.4l-.9.9c-.4.4-1 .4-1.4 0l-2.1-2.1c-.4-.4-.4-1 0-1.4l.9-.9z\"],\n \"saved\": [\"M6.71 9.29a1.003 1.003 0 00-1.42 1.42l2 2a.997.997 0 001.6-.27h.01l2-4h-.01c.06-.13.11-.28.11-.44 0-.55-.45-1-1-1-.39 0-.72.23-.89.56H9.1l-1.38 2.76-1.01-1.03zM9 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5L9 0zm3 14H4V2h4v4h4v8z\"],\n \"scatter-plot\": [\"M15 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm-.5-7c.83 0 1.5-.67 1.5-1.5S15.33 2 14.5 2 13 2.67 13 3.5 13.67 5 14.5 5zm-3 4c.83 0 1.5-.67 1.5-1.5S12.33 6 11.5 6 10 6.67 10 7.5 10.67 9 11.5 9zm-4-2C8.33 7 9 6.33 9 5.5S8.33 4 7.5 4 6 4.67 6 5.5 6.67 7 7.5 7zm-3 4c.83 0 1.5-.67 1.5-1.5S5.33 8 4.5 8 3 8.67 3 9.5 3.67 11 4.5 11z\"],\n \"search\": [\"M15.55 13.43l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"search-around\": [\"M13.5 11c-.51 0-.98.15-1.38.42l-2.4-2.41c.17-.3.28-.64.28-1.01s-.11-.71-.28-1.01l2.41-2.41c.39.27.86.42 1.37.42a2.5 2.5 0 000-5A2.5 2.5 0 0011 2.5c0 .51.15.98.42 1.38l-2.41 2.4C8.71 6.11 8.37 6 8 6s-.71.11-1.01.28l-2.41-2.4c.27-.4.42-.87.42-1.38a2.5 2.5 0 00-5 0A2.5 2.5 0 002.5 5c.51 0 .98-.15 1.38-.42l2.41 2.41C6.11 7.29 6 7.63 6 8s.11.71.28 1.01l-2.41 2.41c-.39-.27-.86-.42-1.37-.42a2.5 2.5 0 000 5A2.5 2.5 0 005 13.5c0-.51-.15-.98-.42-1.38l2.41-2.41c.3.18.64.29 1.01.29s.71-.11 1.01-.28l2.41 2.41c-.27.39-.42.86-.42 1.37a2.5 2.5 0 005 0 2.5 2.5 0 00-2.5-2.5zm0-10c.83 0 1.5.67 1.5 1.5S14.33 4 13.5 4 12 3.33 12 2.5 12.67 1 13.5 1zm-11 3C1.67 4 1 3.33 1 2.5S1.67 1 2.5 1 4 1.67 4 2.5 3.33 4 2.5 4zm0 11c-.83 0-1.5-.67-1.5-1.5S1.67 12 2.5 12s1.5.67 1.5 1.5S3.33 15 2.5 15zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"],\n \"search-template\": [\"M15.55 13.43l-2.67-2.67c.7-1.09 1.11-2.38 1.11-3.77 0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.41 3.77-1.11l2.67 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm2.5-6h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm0-2h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm0 4h-5c-.28 0-.5.22-.5.5s.22.5.5.5h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5z\"],\n \"search-text\": [\"M9 4H5c-.55 0-1 .45-1 1s.45 1 1 1h1v3c0 .55.45 1 1 1s1-.45 1-1V6h1c.55 0 1-.45 1-1s-.45-1-1-1zm6.56 9.44l-2.67-2.67C13.59 9.68 14 8.39 14 7c0-3.87-3.13-7-7-7S0 3.13 0 7s3.13 7 7 7c1.39 0 2.68-.41 3.77-1.11l2.67 2.67a1.498 1.498 0 102.12-2.12zM7 12c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"segmented-control\": [\"M15 4H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 6H8V6h6v4z\"],\n \"select\": [\"M16 15c0-.28-.12-.52-.31-.69l.02-.02-3.12-3.12 3.41-.84-8.05-2.86c.03-.09.05-.17.05-.27V2c0-.55-.45-1-1-1H3c0-.55-.45-1-1-1S1 .45 1 1c-.55 0-1 .45-1 1s.45 1 1 1v4c0 .55.45 1 1 1h5.2c.1 0 .18-.02.27-.05L10.33 16l.85-3.41 3.12 3.12.02-.02c.16.19.4.31.68.31.04 0 .07-.02.1-.02s.06.02.1.02c.44 0 .8-.36.8-.8 0-.04-.02-.07-.02-.1s.02-.06.02-.1zM6 6H3V3h3v3z\"],\n \"selection\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm0-9C6.34 5 5 6.34 5 8s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"],\n \"send-message\": [\"M15.398 9.01l-13.87 6.865c-.536.267-1.176.081-1.422-.427A.953.953 0 010 15v-4.838l8.67-2.168L0 5.923V1.001C0 .47.407 0 1.004 0c.169 0 .416.04.567.116L15.403 7.07a1.084 1.084 0 01-.005 1.939z\"],\n \"send-to\": [\"M15 7.5c-.8 0-1.5-.4-2-1l-1.2 1.2c-.4.5-1.1.7-1.8.7-1.4.1-2.5-1-2.5-2.4 0-.7.3-1.3.7-1.8L9.5 3c-.6-.5-1-1.2-1-2 0-.3.1-.7.2-1H8C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8v-.7c-.3.1-.6.2-1 .2zM15 0h-4c-.6 0-1 .5-1 1s.4 1 1 1h1.6L9.3 5.3c-.2.2-.3.4-.3.7 0 .5.4 1 1 1 .3 0 .5-.1.7-.3L14 3.4V5c0 .6.4 1 1 1 .5 0 1-.4 1-1V1c0-.5-.4-1-1-1z\"],\n \"send-to-graph\": [\"M6 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1zm8 .5c-.56 0-1.06.23-1.42.59l-2.13-1.24L8.99 8l3.59-2.09A2.002 2.002 0 0016 4.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .19.03.37.08.54L8.5 7.13v-3.2c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v3.2l-.88-.52-2.7-1.57c.05-.17.08-.35.08-.54 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.56 0 1.06-.23 1.42-.59l2.13 1.24 3.84 2.24 2.7 1.57c-.06.17-.09.35-.09.54 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\"],\n \"send-to-map\": [\"M6 9H2c-.55 0-1 .45-1 1s.45 1 1 1h1.59L.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L5 12.41V14c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1zm9.55-5.83l-4.49-3A.975.975 0 009.99.15L5.53 2.82 1.56.17A1.003 1.003 0 000 1v6h2V2.87l2.94 1.96.06.03V7h1V4.86s.01 0 .01-.01L10 2.47v8.67s-.01 0-.01.01l-.99.58v2.33l1.47-.88 3.97 2.65A1.003 1.003 0 0016 15V4c0-.35-.18-.65-.45-.83zM14 13.13l-2.94-1.96c-.02-.01-.04-.02-.05-.03v-8.6l3 2v8.59z\"],\n \"series-add\": [\"M10.68 7.9c.44.54 1.07.92 1.79 1.05l-2.76 2.76c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l1.68-1.69zM15 3c.55 0 1 .45 1 1s-.45 1-1 1h-1v1c0 .55-.45 1-1 1s-1-.45-1-1V5h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V2c0-.55.45-1 1-1s1 .45 1 1v1h1z\"],\n \"series-configuration\": [\"M9.94 9.64c.65.23 1.34.36 2.06.36.14 0 .29-.01.43-.01L9.7 12.71c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.3L5 9.41l-3 3V14h12.99c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 7.11 4.72 7 5 7c.28 0 .53.11.71.29L9 10.59l.94-.95zm4.73-6.44h.92c.22 0 .4.18.4.4v.8c0 .22-.18.4-.4.4h-.93c-.06.2-.14.38-.24.55l.66.65c.15.15.15.4 0 .55l-.54.55c-.15.15-.4.15-.55 0l-.65-.65c-.17.1-.36.18-.55.24v.91c0 .22-.18.4-.4.4h-.8c-.22 0-.4-.18-.4-.4v-.93c-.18-.06-.36-.13-.52-.22l-.68.68c-.15.16-.41.16-.57 0l-.56-.56a.417.417 0 010-.57l.68-.68c-.08-.16-.16-.33-.22-.52h-.93c-.22 0-.4-.18-.4-.4v-.8c0-.22.18-.4.4-.4h.93c.06-.2.14-.38.24-.55l-.65-.64a.392.392 0 010-.55l.54-.55a.38.38 0 01.54 0l.65.65c.18-.1.36-.18.55-.24V.4c0-.22.18-.4.4-.4h.8c.22 0 .4.18.4.4v.93c.18.06.35.14.52.22l.68-.68c.15-.16.41-.16.57 0l.57.57c.15.16.15.41 0 .57l-.68.68c.09.16.16.33.22.51zm-4.18.8c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5c-.82 0-1.5.67-1.5 1.5z\"],\n \"series-derived\": [\"M10.66 7.92c.44.54 1.07.91 1.8 1.03L9.71 11.7c-.18.19-.43.3-.71.3s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l1.66-1.67zM12.3 5.3l.3-.3H8c-.6 0-1-.4-1-1s.4-1 1-1h4.6l-.3-.3c-.2-.2-.3-.4-.3-.7 0-.6.5-1 1-1 .3 0 .5.1.7.3l2 2c.2.2.3.4.3.7s-.1.5-.3.7l-2 2c-.2.2-.4.3-.7.3-.6 0-1-.4-1-1 0-.3.1-.5.3-.7z\"],\n \"series-filtered\": [\"M9.29 9.3c.3.62.8 1.12 1.42 1.41l-1 1c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L5 8.41l-3 3V13h13c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1 .45 1 1v4.59l2.29-2.3C4.47 6.11 4.72 6 5 6s.53.11.71.29L9 9.59l.29-.29zM15.48 1c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V4.71L8.17 1.98A.566.566 0 018 1.57c0-.31.26-.57.57-.57h6.91z\"],\n \"series-search\": [\"M9.6 8.94a4.937 4.937 0 001.82.01c.1-.01.22-.04.39-.08l.23-.07c.04-.01.08-.02.11-.04l.22.22-2.7 2.72c-.18.19-.43.3-.71.3s-.53-.11-.71-.3L4.98 8.41l-2.99 3V13h12.94c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V3.99c0-.55.45-1 1-1s1 .45 1 1v4.59l2.28-2.3c.17-.18.42-.29.7-.29s.53.11.7.29l3.28 3.3.64-.64zm6.22-.41c.1.12.17.27.18.44 0 .34-.27.61-.61.61a.57.57 0 01-.43-.18l-2.24-2.25c-.13.08-.26.16-.4.23-.02.01-.05.02-.07.03-.14.06-.27.12-.42.17h-.01c-.14.05-.29.08-.44.11-.04.01-.08.02-.11.02-.15.02-.3.04-.46.04-1.85 0-3.35-1.51-3.35-3.37S8.96 1.01 10.81 1c1.85 0 3.35 1.51 3.35 3.37 0 .16-.02.31-.04.47-.01.04-.01.07-.02.11-.02.15-.05.29-.1.44v.01c-.05.15-.11.28-.17.42-.01.02-.02.05-.03.07-.07.14-.14.27-.23.4l2.25 2.24zm-5.01-1.94c1.22 0 2.21-.99 2.21-2.22 0-1.23-.99-2.22-2.21-2.22S8.6 3.14 8.6 4.37c0 1.22.99 2.22 2.21 2.22z\"],\n \"settings\": [\"M3 1c0-.55-.45-1-1-1S1 .45 1 1v3h2V1zm0 4H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm12-4c0-.55-.45-1-1-1s-1 .45-1 1v2h2V1zM9 1c0-.55-.45-1-1-1S7 .45 7 1v6h2V1zM1 15c0 .55.45 1 1 1s1-.45 1-1v-5H1v5zM15 4h-2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-2 11c0 .55.45 1 1 1s1-.45 1-1V9h-2v6zM9 8H7c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-2 7c0 .55.45 1 1 1s1-.45 1-1v-2H7v2z\"],\n \"share\": [\"M10.99 13.99h-9v-9h4.76l2-2H.99c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V7.24l-2 2v4.75zm4-14h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L7.29 7.28a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l5.29-5.29V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.56-.45-1.01-1-1.01z\"],\n \"shield\": [\"M8 16c4.667-3.048 7-7.238 7-12.571-1.556 0-3.889-1.143-7-3.429-3.111 2.286-5.444 3.429-7 3.429C1 8.762 3.333 12.952 8 16zM8 2.121c2.005 1.388 3.715 2.304 5.186 2.735-.342 3.702-2.05 6.683-5.186 9.038V2.121z\"],\n \"shop\": [\"M3 2h10c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1zm9 11H4v-3H2v5c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-5h-2v3zm4-6l-1.01-3.17C14.9 3.36 14.49 3 14 3H2c-.49 0-.9.36-.98.83L.01 7H0c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2c0 1.1.9 2 2 2s2-.9 2-2z\"],\n \"shopping-cart\": [\"M14 10H7.72l-.33-1H13c.39 0 .72-.23.89-.56h.01l2-4h-.01c.06-.13.11-.28.11-.44 0-.55-.45-1-1-1H5.39l-.44-1.32h-.01C4.8 1.29 4.44 1 4 1H1c-.55 0-1 .45-1 1s.45 1 1 1h2.28l2.33 7H4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2h6c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zM6.05 5h7.33l-1 2H6.72l-.67-2z\"],\n \"signal-search\": [\"M5.474 7.971A5.31 5.31 0 006.66 8.9l.007.019.018.056c.015.038.038.06.045.098l1.5 5.999a.75.75 0 01-1.455.36l-.42-1.68h-.704l-.42 1.68a.746.746 0 01-.907.547.746.746 0 01-.547-.907l1.5-6c.007-.037.03-.06.044-.097.015-.037.015-.075.038-.112a.722.722 0 01-.105-.36c0-.207.084-.394.22-.53zM2.795 5.277a.763.763 0 00-.015-1.065.756.756 0 00-1.065.015c-2.286 2.34-2.286 6.21 0 8.549a.747.747 0 101.072-1.042c-1.709-1.763-1.709-4.702.008-6.457zM7.808 9.388a5.318 5.318 0 001.58.211 2.236 2.236 0 01-.656.98.756.756 0 01-1.057-.098.756.756 0 01.097-1.057l.036-.036zM11.544 9.105l.378.378a6.02 6.02 0 01-1.638 3.285c-.285.3-.757.3-1.057.015a.74.74 0 01-.015-1.057 4.52 4.52 0 001.185-2.24c.4-.083.785-.212 1.147-.381z\",\n \"M4.054 9.424c-.427-.352-.352-1.582-.03-1.822a.752.752 0 00.15-1.05.752.752 0 00-1.05-.15c-1.079.802-1.221 3.18-.03 4.177a.75.75 0 10.96-1.155zM9.318 0a4.318 4.318 0 014.317 4.318c0 .206-.02.402-.049.598-.01.05-.01.088-.02.138-.039.196-.078.382-.137.569v.01c-.059.186-.137.363-.216.54l-.039.087a5.285 5.285 0 01-.294.51l2.884 2.886a.878.878 0 01.236.559.787.787 0 01-.785.785.785.785 0 01-.56-.226L11.772 7.89a5.285 5.285 0 01-.51.295l-.089.039c-.176.079-.353.157-.54.216h-.01a3.701 3.701 0 01-.568.137c-.05.01-.099.02-.138.02-.196.03-.392.049-.598.049A4.318 4.318 0 015 4.327 4.332 4.332 0 019.318 0zm-.02 1.1A3.195 3.195 0 006.1 4.298a3.195 3.195 0 003.198 3.198 3.195 3.195 0 003.198-3.198A3.195 3.195 0 009.298 1.1z\"],\n \"sim-card\": [\"M13.71 4.29l-4-4A.997.997 0 009 0H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V5c0-.28-.11-.53-.29-.71zM7 6h2v2H7V6zM4 6h2v2H4V6zm2 8H4v-2h2v2zm3 0H7v-2h2v2zm3 0h-2v-2h2v2zm0-3H4V9h8v2zm0-3h-2V6h2v2z\"],\n \"slash\": [\"M10 2a.99.99 0 00-.96.73l-2.99 9.96A1.003 1.003 0 007 14c.46 0 .85-.31.96-.73l2.99-9.96A1.003 1.003 0 0010 2z\"],\n \"small-cross\": [\"M9.41 8l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42L6.59 8 4.3 10.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z\"],\n \"small-minus\": [\"M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"small-plus\": [\"M11 7H9V5c0-.55-.45-1-1-1s-1 .45-1 1v2H5c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V9h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"small-tick\": [\"M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z\"],\n \"snowflake\": [\"M13.364 9l.879.879a1 1 0 11-1.415 1.414l-2.12-2.121A1.003 1.003 0 0110.568 9H9v1.604c.042.03.083.065.121.103l2.122 2.121a1 1 0 01-1.415 1.415L9 13.414V15a1 1 0 01-2 0v-1.636l-.879.879a1 1 0 11-1.414-1.415l2.121-2.12c.054-.054.111-.1.172-.139V9H5.38c-.038.06-.084.118-.137.172l-2.122 2.12A1 1 0 111.707 9.88L2.586 9H1a1 1 0 110-2h1.536l-.829-.828a1 1 0 011.414-1.415L5.243 6.88c.038.038.072.079.103.121H7V5.38a1.003 1.003 0 01-.172-.137L4.708 3.12A1 1 0 016.12 1.707L7 2.586V1a1 1 0 112 0v1.536l.828-.829a1 1 0 011.415 1.414L9.12 5.243A1.007 1.007 0 019 5.346V7h1.604c.03-.042.065-.083.103-.121l2.121-2.122a1 1 0 011.415 1.415L13.414 7H15a1 1 0 010 2h-1.636z\"],\n \"social-media\": [\"M9.5 4c.4 0 .8-.1 1.1-.3C12 4.5 12.9 6 13 7.6c0 .5.5.9 1 .9.6 0 1-.4 1-1v-.2c-.2-2.4-1.5-4.4-3.5-5.5-.1-1-.9-1.8-2-1.8s-2 .9-2 2 .9 2 2 2zM4 8.5c0-.7-.4-1.3-.9-1.7.3-1.4 1.2-2.6 2.5-3.3.3-.1.6-.4.6-.9s-.4-1-1-1c-.2 0-.3 0-.5.1-1.9 1-3.2 2.8-3.6 5C.4 7.1 0 7.8 0 8.5c0 1.1.9 2 2 2s2-.9 2-2zm8.8 1.2c-1.1 0-2 .9-2 2v.3c-.8.6-1.8.9-2.8.9-1.2 0-2.3-.4-3.2-1.1-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.6.3.8C4.6 14.4 6.2 15 8 15c1.5 0 3-.5 4.1-1.3.2.1.5.1.7.1 1.1 0 2-.9 2-2s-.9-2.1-2-2.1z\"],\n \"sort\": [\"M5 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm3-9h7c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm7 2H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0 8H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"sort-alphabetical\": [\"M6 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 002 12a1.003 1.003 0 00-.71 1.71l2 2c.19.18.44.29.71.29.28 0 .53-.11.71-.29l2-2c.18-.18.29-.43.29-.71a.99.99 0 00-1-1zm7.93-.95v-1.04H9.25v1.11h2.94L9 14.96V16h5.02v-1.11h-3.27l3.18-3.84zm-1.42-4.84l.62 1.78H15L11.94.01H10.1L7 7.99h1.81l.64-1.78h3.06zm-1.52-4.24h.02l1.03 2.93H9.92l1.07-2.93z\"],\n \"sort-alphabetical-desc\": [\"M5.99 11.99c-.28 0-.53.11-.71.29l-.29.29V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l2-2c.18-.18.29-.43.29-.71 0-.56-.45-1.01-1-1.01zM12.7 10h-1.38L9 15.99h1.36l.48-1.33h2.3l.46 1.33H15L12.7 10zm-1.51 3.67l.8-2.2h.02l.77 2.2h-1.59zm3.8-7.17h-4.57l4.45-5.12V0H8.34v1.48h4.1L7.99 6.59v1.39h7V6.5z\"],\n \"sort-asc\": [\"M8 7h3c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h1c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0 8h5c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm-3 1c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm10 1H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"sort-desc\": [\"M5 12c-.28 0-.53.11-.71.29l-.29.3V9c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29A.965.965 0 001 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 005 12zm4 1H8c-.55 0-1 .45-1 1s.45 1 1 1h1c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H8c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm-2 4H8c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H8c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"sort-numerical\": [\"M6 11.99c-.28 0-.53.11-.71.29l-.29.3V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l2-2A1.003 1.003 0 006 11.99zm7.91-.08c-.06-.36-.17-.68-.33-.96-.16-.28-.37-.51-.64-.69-.27-.17-.61-.26-1.03-.26-.28 0-.54.06-.78.17-.23.11-.43.26-.6.45-.17.19-.3.41-.39.67a2.492 2.492 0 00-.04 1.52 1.623 1.623 0 00.89 1.03c.22.11.45.16.68.16.26 0 .5-.05.7-.15s.38-.26.53-.5l.02.02c-.01.16-.03.34-.07.54-.03.2-.09.4-.17.57-.08.18-.18.33-.31.45s-.29.19-.5.19a.63.63 0 01-.48-.21c-.13-.14-.21-.31-.25-.5H10.1c.03.25.1.48.19.68.1.2.22.37.38.5.16.14.33.24.54.31s.42.1.65.1c.39 0 .72-.09.99-.27.27-.18.49-.41.66-.7.17-.29.29-.61.37-.97.08-.36.12-.72.12-1.07 0-.36-.03-.72-.09-1.08zm-1.14.54c-.04.13-.09.24-.16.34a.78.78 0 01-.27.24c-.11.06-.24.09-.39.09a.75.75 0 01-.37-.09.777.777 0 01-.26-.25c-.07-.1-.12-.22-.15-.35-.03-.13-.05-.26-.05-.4 0-.13.02-.26.05-.39.04-.13.09-.24.16-.34.07-.1.16-.18.26-.24s.22-.09.35-.09c.14 0 .26.03.37.09.11.06.2.14.28.24a1.32 1.32 0 01.23.74c0 .15-.02.28-.05.41zm-1.56-4.47H13V0h-1.42c-.05.3-.16.56-.31.76-.16.21-.35.37-.58.5-.23.13-.49.21-.78.26-.3.05-.6.07-.91.06V2.8h2.21v5.18z\"],\n \"sort-numerical-desc\": [\"M6 11.99c-.28 0-.53.11-.71.29l-.29.3V8.99c0-.55-.45-1-1-1s-1 .45-1 1v3.59l-.29-.29a.982.982 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 006 11.99zm7.86-9.45c-.09-.48-.26-.9-.5-1.28S12.8.58 12.4.35C12 .12 11.49 0 10.86 0c-.43 0-.82.07-1.17.22s-.65.35-.9.6-.44.55-.58.89c-.14.34-.2.71-.2 1.11 0 .31.05.61.15.91.1.3.26.57.48.8.23.24.52.43.85.58.33.14.68.21 1.03.21.4 0 .75-.07 1.05-.2.3-.13.57-.35.79-.66l.02.02c-.02.21-.05.45-.1.73-.05.27-.13.53-.25.76-.12.24-.27.44-.47.6-.19.16-.44.25-.75.25a.98.98 0 01-.72-.29c-.19-.18-.31-.4-.37-.66H8.15c.05.34.14.64.29.9.15.26.34.49.57.67.23.18.5.32.8.41.31.1.63.15.98.15.58 0 1.08-.12 1.48-.36.4-.24.73-.55.99-.93.26-.39.44-.82.56-1.29.12-.48.18-.96.18-1.44s-.05-.96-.14-1.44zm-1.71.72c-.05.17-.14.32-.24.46-.11.13-.24.24-.41.31-.16.08-.36.12-.58.12-.21 0-.39-.04-.55-.13-.16-.08-.29-.19-.39-.33-.12-.14-.19-.29-.24-.46-.05-.17-.08-.35-.08-.54 0-.18.03-.35.08-.52.06-.16.14-.31.25-.44.11-.13.24-.24.4-.32.16-.08.33-.12.52-.12.21 0 .4.04.56.12.16.08.3.19.41.32.11.14.2.29.26.46.06.17.09.35.09.52 0 .2-.03.38-.08.55zm-.46 7.31c-.12.15-.26.28-.44.37-.17.09-.37.16-.58.2-.22.04-.44.05-.67.05v.92h1.65v3.88h1.33V10h-1.06c-.03.23-.11.42-.23.57z\"],\n \"split-columns\": [\"M12 10a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9V2h3v1.71c.31-.13.64-.21 1-.21s.69.08 1 .21V1c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2.71c.31-.13.64-.21 1-.21s.69.08 1 .21V2h3v5H3.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 9H7v5H4v-1.71c-.31.13-.64.21-1 .21s-.69-.08-1-.21V15c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-2.71c-.31.13-.64.21-1 .21s-.69-.08-1-.21V14H9V9h3.59l-.29.29c-.19.18-.3.43-.3.71z\"],\n \"square\": [\"M15 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H2V2h12v12z\"],\n \"stacked-chart\": [\"M10 2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3h3V2zm3 10h1c.55 0 1-.45 1-1V8h-3v3c0 .55.45 1 1 1zm2-7c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v2h3V5zm-5 1H7v3h3V6zM5 7c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v1h3V7zm3 5h1c.55 0 1-.45 1-1v-1H7v1c0 .55.45 1 1 1zm7 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h1c.55 0 1-.45 1-1V9H2v2c0 .55.45 1 1 1z\"],\n \"star\": [\"M8 0l2.5 5.3 5.5.8-4 4.1.9 5.8L8 13.3 3.1 16l.9-5.8-4-4.1 5.5-.8z\"],\n \"star-empty\": [\"M16 6.11l-5.53-.84L8 0 5.53 5.27 0 6.11l4 4.1L3.06 16 8 13.27 12.94 16 12 10.21l4-4.1zM4.91 13.2l.59-3.62L3 7.02l3.45-.53L8 3.2l1.55 3.29 3.45.53-2.5 2.56.59 3.62L8 11.49 4.91 13.2z\"],\n \"step-backward\": [\"M12 3c-.24 0-.44.09-.62.23l-.01-.01L7 6.72V4c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V9.28l4.38 3.5.01-.01c.17.14.37.23.61.23.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"step-chart\": [\"M15 12H2v-2h3c.55 0 1-.45 1-1V7h2v1c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h-2V6c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v2H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"step-forward\": [\"M12 3h-1c-.55 0-1 .45-1 1v2.72l-4.38-3.5v.01A.987.987 0 005 3c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1 .24 0 .44-.09.62-.23l.01.01L10 9.28V12c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"stop\": [\"M12 3H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"stopwatch\": [\"M9 2v1.083A6.002 6.002 0 018 15 6 6 0 017 3.083V2H6a1 1 0 110-2h4a1 1 0 010 2H9zM8 5a4 4 0 104 4H8V5z\"],\n \"strikethrough\": [\"M14 7H8.65c-.38-.09-.73-.18-1.04-.26-.31-.08-.49-.13-.54-.14-.43-.11-.79-.29-1.05-.52-.27-.23-.4-.55-.4-.95 0-.29.07-.53.21-.72s.32-.34.54-.46c.22-.11.46-.19.72-.24.26-.05.52-.07.77-.07.74 0 1.36.15 1.84.46.32.2.55.5.68.9h2.22c-.06-.33-.17-.64-.32-.92-.25-.45-.59-.84-1.02-1.15-.43-.31-.93-.54-1.49-.7S8.59 2 7.95 2c-.55 0-1.1.07-1.63.2-.54.13-1.02.34-1.45.62-.42.28-.76.63-1.02 1.05-.26.42-.39.92-.39 1.5 0 .3.04.59.13.88.08.26.21.51.39.75H2c-.55 0-1 .45-1 1s.45 1 1 1h7.13c.25.07.49.14.71.22.25.09.48.23.7.44.21.21.32.53.32.97 0 .21-.05.43-.14.63-.09.21-.24.39-.45.55-.21.16-.48.29-.81.39-.33.1-.73.15-1.2.15-.44 0-.84-.05-1.21-.14-.37-.09-.7-.24-.99-.43-.29-.2-.51-.45-.67-.76-.01 0-.01-.01-.02-.02H3.14a3.68 3.68 0 001.39 2.03c.46.34 1 .58 1.62.74.61.15 1.27.23 1.97.23.61 0 1.2-.07 1.79-.2.58-.13 1.11-.34 1.56-.63.46-.29.83-.66 1.11-1.11.28-.45.42-1 .42-1.64 0-.3-.05-.6-.15-.9-.05-.19-.13-.36-.22-.52H14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"style\": [\"M14 14H2V2h8.76l2-2H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6.24l-2 2V14zm1.4-14L9.7 5.7l2.1 2.1L16 3.6V0h-.6zM4 11.92c2.33.15 4.42.15 6.15-1.5.82-.83.82-2.25 0-3.08-.45-.38-.98-.6-1.5-.6-.53 0-1.05.22-1.43.6-.82.91-1.27 3.38-3.22 4.58z\"],\n \"swap-horizontal\": [\"M0 7.02L.05 7H0v.02zm2-2.03h9.57l-1.29 1.29A1.003 1.003 0 0011.7 7.7l2.99-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2.99-3a1.07 1.07 0 00-.71-.28 1.003 1.003 0 00-.71 1.71L11.57 3H2c-.55 0-1 .45-1 1a1 1 0 001 .99zM15.96 9H16v-.02l-.04.02zM14 11.01H4.43l1.29-1.29A1.003 1.003 0 004.3 8.3l-2.99 3a.99.99 0 00-.29.7c0 .28.11.53.29.71l2.99 3a1.003 1.003 0 001.42-1.42L4.43 13H14c.55 0 1-.45 1-1s-.45-.99-1-.99z\"],\n \"swap-vertical\": [\"M9 0h-.02L9 .04V0zM7 16h.02L7 15.95V16zM4.7 1.31c-.18-.18-.43-.29-.7-.29s-.53.11-.71.29l-3 2.99a1.003 1.003 0 001.42 1.42L3 4.43V14c0 .55.45 1 1 1s1-.45 1-1V4.43l1.29 1.29c.18.18.43.29.7.29A1.003 1.003 0 007.7 4.3l-3-2.99zM15 9.99c-.28 0-.53.11-.71.29L13 11.57V2c0-.55-.45-1-1-1s-1 .45-1 1v9.57l-1.29-1.29a.99.99 0 00-.7-.29 1.003 1.003 0 00-.71 1.71l3 2.99c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-2.99c.18-.18.29-.43.29-.71-.01-.55-.46-1-1.01-1z\"],\n \"symbol-circle\": [\"M8 3.01a5 5 0 100 10 5 5 0 100-10z\"],\n \"symbol-cross\": [\"M12 6.01h-2v-2c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v2H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2h2c.55 0 1-.45 1-1v-2c0-.56-.45-1-1-1z\"],\n \"symbol-diamond\": [\"M12 8.01c0-.19-.07-.36-.16-.51l.01-.01-3-5-.01.01c-.17-.29-.48-.49-.84-.49s-.67.2-.84.49l-.02-.01-3 5 .02.01c-.09.15-.16.32-.16.51s.07.36.16.51h-.02l3 5 .01-.01c.18.29.49.5.85.5s.67-.2.84-.49l.01.01 3-5-.01-.01c.09-.16.16-.32.16-.51z\"],\n \"symbol-square\": [\"M12 3.01H4c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-8c0-.56-.45-1-1-1z\"],\n \"symbol-triangle-down\": [\"M13 4.01c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 .16.05.31.11.44H3.1l4 8h.01c.16.33.49.56.89.56s.72-.23.89-.56h.01l4-8h-.01c.06-.14.11-.28.11-.44z\"],\n \"symbol-triangle-up\": [\"M12.89 11.56l-3.99-8h-.01c-.17-.32-.5-.55-.89-.55s-.72.23-.89.55H7.1l-4 8h.01c-.06.14-.11.29-.11.45 0 .55.45 1 1 1h8c.55 0 1-.45 1-1 0-.16-.05-.31-.11-.45z\"],\n \"tag\": [\"M1 3a2 2 0 012-2h4.584a2 2 0 011.414.586l5.413 5.412a2 2 0 010 2.829L9.827 14.41a2 2 0 01-2.829 0L1.586 8.998A2 2 0 011 7.584V3zm3.487-.007a1.494 1.494 0 100 2.988 1.494 1.494 0 000-2.988z\"],\n \"take-action\": [\"M9 11a1.003 1.003 0 001.71.71l4-4a1.003 1.003 0 00-1.42-1.42l-4 4c-.18.18-.29.43-.29.71zM4 6c.28 0 .53-.11.71-.29l4-4A1.003 1.003 0 007.29.29l-4 4A1.003 1.003 0 004 6zm4 4l5-5-.79-.79.5-.5a1.003 1.003 0 00-1.42-1.42l-.5.5L10 2 5 7l.79.79-5.5 5.5a1.003 1.003 0 001.42 1.42l5.5-5.5L8 10zm7 4H7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"taxi\": [\"M15.12 6.63h-.38L15 7c-.01.3-.01.64 0 .98V8c0 .07-.03.13-.04.19h.02L14 13.1v.9c0 .55-.45 1-1 1s-1-.45-1-1v-1H4v1c0 .55-.45 1-1 1s-1-.45-1-1v-.9l-.98-4.9h.02C1.03 8.13 1 8.07 1 8H.99c0-.33 0-.67.01-1l.26-.37H.88C.4 6.63 0 6.21 0 5.69s.4-.94.88-.94h1.05l.77-2.11c.19-.53.76-1.08 1.26-1.24 0 0 .68-.2 2.05-.32C6.01 1.05 6 1.03 6 1c0-.55.45-1 1-1h2c.55 0 1 .45 1 1 0 .03-.01.05-.02.08 1.37.12 2.05.32 2.05.32.51.15 1.08.71 1.27 1.24l.76 2.12h1.05c.49 0 .89.42.89.93 0 .52-.4.94-.88.94zM11 10h2V8h-2v2zm-8 0h2V8H3v2zm10-5l-.73-1.63C12.21 3.19 12.18 3 12 3H4c-.18 0-.21.19-.27.37L3 5c-.06.18-.18 1 0 1h10c.18 0 .06-.82 0-1z\"],\n \"text-highlight\": [\"M9 10H2V6h7V4H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h8v-2zm4 3h-1V3h1c.55 0 1-.45 1-1s-.45-1-1-1h-1c-.37 0-.7.11-1 .28-.3-.17-.63-.28-1-.28H9c-.55 0-1 .45-1 1s.45 1 1 1h1v10H9c-.55 0-1 .45-1 1s.45 1 1 1h1c.37 0 .7-.11 1-.28.3.17.63.28 1 .28h1c.55 0 1-.45 1-1s-.45-1-1-1zm2-9h-2v2h1v4h-1v2h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"th\": [\"M15 1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1zM6 13H2v-2h4v2zm0-3H2V8h4v2zm0-3H2V5h4v2zm8 6H7v-2h7v2zm0-3H7V8h7v2zm0-3H7V5h7v2z\"],\n \"th-derived\": [\"M5.6 10l-.3.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l2-2c.2-.2.3-.4.3-.7s-.1-.5-.3-.7l-2-2C6.5 6.1 6.3 6 6 6c-.5 0-1 .4-1 1 0 .3.1.5.3.7l.3.3H1c-.6 0-1 .4-1 1s.4 1 1 1h4.6zM15 1H2c-.5 0-1 .5-1 1v5h2V5h11v2H8.8l.6.6c.1.1.2.3.3.4H14v2H9.7c-.1.1-.2.3-.3.4l-.6.6H14v2H3v-2H1v3c0 .5.5 1 1 1h13c.6 0 1-.5 1-1V2c0-.5-.4-1-1-1z\"],\n \"th-disconnect\": [\"M12 1h3c.6 0 1 .5 1 1v12c0 .6-.4 1-1 1h-4.97l.286-2H14v-2h-3.398l.143-1H14V8h-2.97l.143-1H14V5h-2.541l.51-3.576C11.99 1.282 12 1.14 12 1zM5.97 1l-.572 4H2v2h3.112L4.97 8H2v2h2.684l-.143 1H2v2h2.255l-.225 1.576c-.02.142-.03.284-.03.424H1c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1h4.97zM8.01.859a1 1 0 111.98.282l-2 14a1 1 0 11-1.98-.282l2-14z\"],\n \"th-filtered\": [\"M10 10h3l1.78-2.226a1 1 0 00.22-.625V4.3l1-.9V14c0 .6-.4 1-1 1H1c-.6 0-1-.4-1-1V2c0-.5.4-1 1-1h4.333L9 4.3V5H7v2h2v1H7v2h3zm-4 3v-2H2v2h4zm0-3V8H2v2h4zm0-3V5H2v2h4zm8 6v-2H7v2h7z\",\n \"M15.48 0c.31 0 .52.26.52.57 0 .16-.06.3-.17.41l-2.86 2.73v2.63c0 .16-.06.3-.17.41l-.82 1.1c-.1.1-.25.17-.41.17-.31 0-.57-.26-.57-.57V3.71L8.17.98A.566.566 0 018 .57c0-.31.26-.57.57-.57h6.91z\"],\n \"th-list\": [\"M15 1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1zm-1 12H2v-2h12v2zm0-3H2V8h12v2zm0-3H2V5h12v2z\"],\n \"thumbs-down\": [\"M2 2H0v7h2c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm13.99 4.38c.08-.58-.44-1.02-1.15-1.05-.25-.01-.52-.03-.81-.05.02 0 .05-.01.07-.01.7-.1 1.34-.49 1.41-1.07.06-.58-.46-.97-1.17-1.04-.25-.02-.52-.04-.79-.06.47-.15.84-.42.87-.93.04-.58-.79-1.03-1.5-1.09-.27-.02-.51-.04-.73-.05h-.09c-.23-.02-.43-.02-.62-.03C8.35.95 5.66 1.47 4 2.51v6c2.14 1.29 4.76 3.59 4.21 5.51-.18.59.31 1.05.98.98.81-.09 1.37-.91 1.4-1.78.04-1-.15-2.01-.5-2.91-.04-.25.01-.5.37-.53.49-.03 1.11-.06 1.59-.08.26 0 .51-.01.75-.02h.01c.41-.02.8-.05 1.13-.09.7-.09 1.35-.47 1.43-1.05.08-.58-.44-.97-1.15-1.05-.05-.01-.11-.01-.16-.02.17-.01.33-.03.49-.05.72-.08 1.37-.46 1.44-1.04z\"],\n \"thumbs-up\": [\"M15.99 9.62c-.08-.58-.73-.96-1.43-1.05-.15-.02-.32-.04-.49-.05.06-.01.11-.01.16-.02.71-.08 1.23-.47 1.15-1.05-.08-.58-.73-.96-1.43-1.05-.34-.04-.72-.07-1.13-.09h-.01c-.24-.01-.49-.02-.75-.02-.48-.02-1.11-.04-1.59-.08-.36-.03-.41-.28-.37-.53.35-.9.54-1.91.5-2.91-.04-.85-.6-1.68-1.41-1.77-.67-.07-1.16.39-.99.98C8.76 3.91 6.13 6.2 4 7.49v6c1.66 1.03 4.35 1.56 7.48 1.5.19 0 .39-.01.62-.02h.09c.22-.01.46-.03.73-.05.71-.06 1.54-.51 1.5-1.09-.03-.51-.4-.79-.87-.93.27-.02.54-.04.79-.06.71-.06 1.24-.45 1.17-1.04-.06-.58-.7-.97-1.41-1.07-.02 0-.05-.01-.07-.01.29-.02.57-.03.81-.05.71-.03 1.23-.47 1.15-1.05zM2 7H0v7h2c.55 0 1-.45 1-1V8c0-.56-.45-1-1-1z\"],\n \"tick\": [\"M14 3c-.28 0-.53.11-.71.29L6 10.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29s.53-.11.71-.29l8-8A1.003 1.003 0 0014 3z\"],\n \"tick-circle\": [\"M8 16c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm4-11c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z\"],\n \"time\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm1-6.41V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L9 7.59z\"],\n \"timeline-area-chart\": [\"M15 2.59L9.91 7.68 6.6 5.2l-.01.01C6.42 5.09 6.23 5 6 5c-.24 0-.44.09-.62.23v-.01L3 7.12V11h12V2.59zM15 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"timeline-bar-chart\": [\"M8 12h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1zm5 0h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1zm2 1H2c-.55 0-1 .45-1 1s.45 1 1 1h13c.55 0 1-.45 1-1s-.45-1-1-1zM3 12h1c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1z\"],\n \"timeline-events\": [\"M8 11H7v1h1v-1zm-4 0H3v1h1v-1zm7-8c.6 0 1-.5 1-1V1c0-.5-.4-1-1-1s-1 .5-1 1v1c0 .5.5 1 1 1zM4 3c.5 0 1-.5 1-1V1c0-.5-.5-1-1-1S3 .5 3 1v1c0 .5.5 1 1 1zm10-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H6v1c0 1.1-.9 2-2 2s-2-.9-2-2V1H1c-.5 0-1 .5-1 1v12c0 .5.5 1 1 1h13c.6 0 1-.5 1-1V2c0-.5-.4-1-1-1zM5 13H2v-3h3v3zm0-4H2V6h3v3zm4 4H6v-3h3v3zm0-4H6V6h3v3zm4 4h-3v-3h3v3zm0-4h-3V6h3v3zm-1-2h-1v1h1V7z\"],\n \"timeline-line-chart\": [\"M15 12H2V9.41l3-3L8.29 9.7c.18.19.43.3.71.3s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L9 7.59l-3.29-3.3C5.53 4.11 5.28 4 5 4s-.53.11-.71.29L2 6.59V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"tint\": [\"M7.88 1s-4.9 6.28-4.9 8.9c.01 2.82 2.34 5.1 4.99 5.1 2.65-.01 5.03-2.3 5.03-5.13C12.99 7.17 7.88 1 7.88 1z\"],\n \"torch\": [\"M5 15c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H5v1zm7-15H4c-.55 0-1 .45-1 1v1h10V1c0-.55-.45-1-1-1zM5 7v6h6V7l2-4H3l2 4zm2 0c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1V7z\"],\n \"tractor\": [\"M3.5 9a3.5 3.5 0 110 7 3.5 3.5 0 010-7zm9.5 1a3 3 0 110 6 3 3 0 010-6zm-9.5 1a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm9.5 1a1 1 0 100 2 1 1 0 000-2zM5 0c1.46 0 2.527.668 3 2l.815 3.255a78.9 78.9 0 012.186.195L11 2h2l.001 3.688c.698.095 1.37.198 2.013.312.623.11.986.479.986 1v3.354a4.001 4.001 0 00-6.873 1.645H7.999l-.026-.002A4.5 4.5 0 00.659 9.01l-.654.001v-.829C.003 7.386.002 6.423 0 6.022 0 5.5.376 4.99 1 4.99V1a1 1 0 011-1h3zm1 2H3v2.99c1.29.024 2.554.069 3.781.135L6 2z\"],\n \"train\": [\"M13 14h-1l1 2H3l1-2H3c-1.1 0-2-.9-2-2V2C1 .9 4.13 0 8 0s7 .9 7 2v10c0 1.1-.9 2-2 2zm-2-2h2v-2h-2v2zM9 7h4V3H9v4zm-6 5h2v-2H3v2zm0-5h4V3H3v4z\"],\n \"translate\": [\"M15.89 14.56l-3.99-8h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56h-.01L9 8.76 7.17 7.38l.23-.18C8.37 6.47 9 5.31 9 4V3h1c.55 0 1-.45 1-1s-.45-1-1-1H7c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H1c-.55 0-1 .45-1 1s.45 1 1 1h6v1c0 .66-.32 1.25-.82 1.61l-.68.51-.68-.5C4.32 5.25 4 4.66 4 4H2c0 1.31.63 2.47 1.6 3.2l.23.17L1.4 9.2l.01.01C1.17 9.4 1 9.67 1 10c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01 2.9-2.17 2.6 1.95-1.99 3.98h.01c-.07.13-.12.28-.12.44 0 .55.45 1 1 1 .39 0 .72-.23.89-.56h.01L8.62 14h4.76l.72 1.45h.01c.17.32.5.55.89.55.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44zM9.62 12L11 9.24 12.38 12H9.62z\"],\n \"trash\": [\"M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z\"],\n \"tree\": [\"M9 11.857V16H7v-4.143L1 13l3.885-4.44L3 9l3.07-4.297L5 5l3-5 3 5-1.07-.297L13 9l-1.885-.44L15 13l-6-1.143z\"],\n \"trending-down\": [\"M15 7c-.55 0-1 .45-1 1v.59l-4.29-4.3A.997.997 0 009 4c-.16 0-.31.05-.44.11V4.1L5 5.88 1.45 4.11v.01C1.31 4.05 1.16 4 1 4c-.55 0-1 .45-1 1 0 .39.23.72.56.89v.01l4 2v-.01c.13.06.28.11.44.11s.31-.05.44-.11v.01L8.8 6.22 12.59 10H12c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1z\"],\n \"trending-up\": [\"M15 4h-3c-.55 0-1 .45-1 1s.45 1 1 1h.59L8.8 9.78 5.45 8.11v.01C5.31 8.05 5.16 8 5 8s-.31.05-.44.11V8.1l-4 2v.01c-.33.17-.56.5-.56.89 0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L5 10.12l3.55 1.78v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L14 7.41V8c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"truck\": [\"M12.5 0a.5.5 0 01.5.5V9a1 1 0 011 1v2h.5a.5.5 0 01.5.5v1a.5.5 0 01-.5.5H13v1a1 1 0 01-2 0v-1H5v1a1 1 0 01-2 0v-1H1.5a.5.5 0 01-.5-.5v-1a.5.5 0 01.5-.5H2v-2a1 1 0 011-1V.5a.5.5 0 011 0V3a2 2 0 012-2h4a2 2 0 012 2V.5a.5.5 0 01.5-.5zM9 8H7a1 1 0 00-1 1v2a1 1 0 001 1h2a1 1 0 001-1V9a1 1 0 00-1-1zm3.5 3h-1a.5.5 0 100 1h1a.5.5 0 100-1zm-8 0h-1a.5.5 0 100 1h1a.5.5 0 100-1zM9 9a.5.5 0 01.5.5v1l-.008.09A.5.5 0 019 11H7l-.09-.008a.5.5 0 01-.41-.492v-1l.008-.09A.5.5 0 017 9zm2-5H5v2h6V4z\"],\n \"two-columns\": [\"M3.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1zm11.71 7.3l-2-2a1.003 1.003 0 00-1.71.71v4a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71zM9.99-.01h-3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-14c0-.55-.45-1-1-1z\"],\n \"unarchive\": [\"M13.382 0a1 1 0 01.894.553L16 4v11a1 1 0 01-1 1H1a1 1 0 01-1-1V4L1.724.553A1 1 0 012.618 0h10.764zM8 6c-.28 0-.53.11-.71.29l-2 2-.084.096A1.003 1.003 0 006.71 9.71l.29-.3V12l.007.116c.058.496.482.884.993.884.55 0 1-.45 1-1V9.41l.29.29.081.076A.97.97 0 0010 10a1.003 1.003 0 00.71-1.71l-2-2-.096-.084A1.002 1.002 0 008 6zm5-4H3L2 4h12l-1-2z\"],\n \"underline\": [\"M8 14c2.8 0 5-2.2 5-5V3c0-.6-.4-1-1-1s-1 .4-1 1v6c0 1.7-1.3 3-3 3s-3-1.3-3-3V3c0-.6-.4-1-1-1s-1 .4-1 1v6c0 2.8 2.2 5 5 5zM13.5 15h-11c-.3 0-.5.2-.5.5s.2.5.5.5h11c.3 0 .5-.2.5-.5s-.2-.5-.5-.5z\"],\n \"undo\": [\"M4 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7-7H3.41L4.7 2.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 4.47 0 4.72 0 5c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 6H11c1.66 0 3 1.34 3 3s-1.34 3-3 3H7v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"],\n \"ungroup-objects\": [\"M3.5 5C1.57 5 0 6.57 0 8.5S1.57 12 3.5 12 7 10.43 7 8.5 5.43 5 3.5 5zm9 0C10.57 5 9 6.57 9 8.5s1.57 3.5 3.5 3.5S16 10.43 16 8.5 14.43 5 12.5 5z\"],\n \"unknown-vehicle\": [\"M10.507 9.75v-3.5c0-.089.023-.171.051-.25h-7.55c-.176 0-.061-.824 0-1l.729-1.63c.06-.177.095-.37.27-.37h4.5V1.01c-.166-.003-.32-.01-.5-.01-2.72 0-4.036.402-4.036.402-.508.155-1.079.711-1.268 1.237L1.94 4.756H.887c-.483 0-.88.423-.88.939s.397.939.88.939h.376L1.008 7c-.034.685 0 1.436 0 2v5c0 .657.384 1 1 1s1-.343 1-1v-1h10v1c0 .657.383 1 1 1s1-.343 1-1v-3.5h-3.75a.75.75 0 01-.75-.75zm-5.5.25h-2V8h2v2zm11-4.305zM15.34.826a2.807 2.807 0 00-.932-.598c-.386-.16-.868-.241-1.445-.241-.447 0-.851.076-1.213.228-.362.153-.67.364-.926.636s-.456.592-.598.963a3.535 3.535 0 00-.218 1.144V3h1.789c.003-.208.023-.405.069-.588.049-.193.124-.362.225-.506.102-.144.232-.259.39-.345.159-.087.348-.13.567-.13.325 0 .58.09.762.272.183.18.275.46.275.839.008.222-.031.407-.116.555a1.654 1.654 0 01-.335.408 7.4 7.4 0 01-.452.37c-.162.123-.316.27-.463.438a2.556 2.556 0 00-.384.611c-.11.239-.177.535-.2.889V6h1.645v-.1c.032-.248.111-.453.237-.618.126-.164.27-.31.433-.438.163-.128.335-.255.518-.383a2.413 2.413 0 00.878-1.117c.102-.255.152-.58.152-.975A2.241 2.241 0 0015.34.826zM12.007 7v2h2V7h-2z\"],\n \"unlock\": [\"M11.99-.01c-2.21 0-4 1.79-4 4v3h-7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1h-3v-3c0-1.1.9-2 2-2s2 .9 2 2v1c0 .55.45 1 1 1s1-.45 1-1v-1c0-2.21-1.79-4-4-4z\"],\n \"unpin\": [\"M9.39 1c-.5.5-.4 1.48.15 2.53L4.38 7.54C2.85 6.5 1.52 6.07 1 6.59l3.5 3.5c-.02.02-1.4 2.8-1.4 2.8l2.8-1.4 3.5 3.5c.53-.53.1-1.86-.95-3.38l4.02-5.16c1.04.55 2.01.65 2.51.14L9.39 1z\"],\n \"unresolve\": [\"M11 3c-.55 0-1.07.09-1.57.26a6.46 6.46 0 010 9.48c.5.17 1.02.26 1.57.26 2.76 0 5-2.24 5-5s-2.24-5-5-5zM9.78 9.38l.09-.27c.08-.36.13-.73.13-1.11s-.05-.75-.13-1.11l-.09-.27a5.32 5.32 0 00-.29-.79l-.12-.21c-.14-.27-.31-.52-.51-.76a.7.7 0 00-.08-.1c-.24-.27-.49-.52-.78-.74-.43-.32-.92-.58-1.45-.75l.01-.01c-.1-.03-.2-.05-.3-.08-.12-.03-.23-.07-.36-.09A5.28 5.28 0 005 3C2.24 3 0 5.24 0 8s2.24 5 5 5c.31 0 .61-.04.9-.09.12-.02.24-.06.36-.09.1-.03.21-.04.3-.08l-.01-.01c.88-.29 1.64-.8 2.22-1.49.03-.03.06-.07.09-.1.19-.24.36-.49.51-.76.04-.07.08-.14.11-.21.13-.25.23-.52.3-.79z\"],\n \"updated\": [\"M8 0a7.95 7.95 0 00-6 2.74V1c0-.55-.45-1-1-1S0 .45 0 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.54C4.64 2.78 6.22 2 8 2c3.31 0 6 2.69 6 6 0 2.61-1.67 4.81-4 5.63-.63.22-1.29.37-2 .37-3.31 0-6-2.69-6-6 0-.55-.45-1-1-1s-1 .45-1 1c0 4.42 3.58 8 8 8 .34 0 .67-.03 1-.07.02 0 .04-.01.06-.01C12.98 15.4 16 12.06 16 8c0-4.42-3.58-8-8-8zm3 5c-.28 0-.53.11-.71.29L7 8.58 5.71 7.29a1.003 1.003 0 00-1.42 1.42l2 2c.18.18.43.29.71.29.28 0 .53-.11.71-.29l4-4A1.003 1.003 0 0011 5z\"],\n \"upload\": [\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm3 8c-.28 0-.53-.11-.71-.29L9 6.41V12c0 .55-.45 1-1 1s-1-.45-1-1V6.41l-1.29 1.3a1.003 1.003 0 01-1.42-1.42l3-3C7.47 3.11 7.72 3 8 3s.53.11.71.29l3 3A1.003 1.003 0 0111 8z\"],\n \"user\": [\"M7.99-.01A7.998 7.998 0 00.03 8.77c.01.09.03.18.04.28.02.15.04.31.07.47.02.11.05.22.08.34.03.13.06.26.1.38.04.12.08.25.12.37.04.11.08.21.12.32a6.583 6.583 0 00.3.65c.07.14.14.27.22.4.04.07.08.13.12.2l.27.42.1.13a7.973 7.973 0 003.83 2.82c.03.01.05.02.07.03.37.12.75.22 1.14.29l.2.03c.39.06.79.1 1.2.1s.81-.04 1.2-.1l.2-.03c.39-.07.77-.16 1.14-.29.03-.01.05-.02.07-.03a8.037 8.037 0 003.83-2.82c.03-.04.06-.08.09-.13.1-.14.19-.28.28-.42.04-.07.08-.13.12-.2.08-.13.15-.27.22-.41.04-.08.08-.17.12-.26.06-.13.11-.26.17-.39.04-.1.08-.21.12-.32.04-.12.08-.24.12-.37.04-.13.07-.25.1-.38.03-.11.06-.22.08-.34.03-.16.05-.31.07-.47.01-.09.03-.18.04-.28.02-.26.04-.51.04-.78-.03-4.41-3.61-7.99-8.03-7.99zm0 14.4c-1.98 0-3.75-.9-4.92-2.31.67-.36 1.49-.66 2.14-.95 1.16-.52 1.04-.84 1.08-1.27.01-.06.01-.11.01-.17-.41-.36-.74-.86-.96-1.44v-.01c0-.01-.01-.02-.01-.02-.05-.13-.09-.26-.12-.39-.28-.05-.44-.35-.5-.63-.06-.11-.18-.38-.15-.69.04-.41.2-.59.38-.67v-.06c0-.51.05-1.24.14-1.72.02-.13.05-.26.09-.39.17-.59.53-1.12 1.01-1.49.49-.38 1.19-.59 1.82-.59.62 0 1.32.2 1.82.59.48.37.84.9 1.01 1.49.04.13.07.26.09.4.09.48.14 1.21.14 1.72v.07c.18.08.33.26.37.66.03.31-.1.58-.16.69-.06.27-.21.57-.48.62-.03.13-.07.26-.12.38 0 .01-.01.04-.01.04-.21.57-.54 1.06-.94 1.42 0 .06.01.13.01.19.04.43-.12.75 1.05 1.27.65.29 1.47.6 2.14.95a6.415 6.415 0 01-4.93 2.31z\"],\n \"variable\": [\"M3.94 3.15c.47-.66 1.05-1.24 1.76-1.73l.13-.4c-1.11.45-2.05 1.01-2.84 1.7-1.02.88-1.8 1.9-2.32 3.05C.22 6.76 0 7.75 0 8.75c0 1.75.66 3.5 1.99 5.25l.13-.42c-.39-.94-.59-1.82-.59-2.63 0-1.28.22-2.64.67-4.1.45-1.45 1.03-2.69 1.74-3.7zm7.51 6.41l-.27-.15c-.3.41-.52.66-.66.77-.09.06-.21.1-.33.1-.15 0-.3-.1-.45-.28-.25-.33-.59-1.22-1.01-2.69.38-.65.69-1.08.95-1.28.19-.15.39-.22.59-.22.08 0 .22.03.43.08.2.06.39.08.54.08.22 0 .4-.07.54-.22.15-.15.22-.34.22-.57 0-.25-.07-.45-.22-.59-.15-.15-.35-.22-.63-.22-.24 0-.47.06-.69.17-.21.11-.49.36-.82.74-.25.28-.61.78-1.1 1.48a6.72 6.72 0 00-.97-2.38l-2.59.44-.05.27c.19-.04.36-.06.49-.06.26 0 .47.11.64.33.26.34.63 1.38 1.11 3.12-.37.49-.63.81-.77.96-.23.24-.41.4-.56.47-.11.06-.24.09-.39.09-.11 0-.29-.06-.53-.18-.17-.07-.32-.11-.45-.11-.25 0-.46.08-.62.24-.16.16-.24.37-.24.61 0 .23.08.42.23.57.15.15.35.22.61.22.25 0 .48-.05.7-.15.22-.1.49-.32.82-.65.33-.33.78-.86 1.36-1.59.22.69.42 1.19.58 1.51.16.31.35.54.56.68.21.14.47.21.79.21.31 0 .62-.11.93-.33.4-.29.82-.77 1.26-1.47zm2.56-8.54l-.12.42c.39.95.59 1.82.59 2.64 0 1.09-.17 2.26-.5 3.51-.26.96-.6 1.87-1.02 2.71-.42.85-.82 1.51-1.21 1.98-.39.48-.87.92-1.44 1.32l-.14.4c1.11-.45 2.05-1.02 2.84-1.7 1.03-.89 1.81-1.91 2.33-3.05.44-.99.66-1.99.66-3 0-1.73-.66-3.48-1.99-5.23z\"],\n \"vertical-bar-chart-asc\": [\"M6 7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1zM2 9c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm8-5c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1zm4-4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"vertical-bar-chart-desc\": [\"M6 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1zM2 0c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm8 7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1s1-.45 1-1V8c0-.55-.45-1-1-1zm4 2c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1z\"],\n \"vertical-distribution\": [\"M1 2h14c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1zm14 11H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM3 5c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1H3z\"],\n \"video\": [\"M15 2H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM5 11V5l6 3-6 3z\"],\n \"virus\": [\"M11.918 11.107l.737.737.052-.051A1 1 0 0114.2 13.12l-.078.087-1.414 1.414a1 1 0 01-1.492-1.327l.029-.033-.863-.863c-.426.231-.89.402-1.38.502L9 14l.117.007A1 1 0 019 16H7l-.117-.007A1 1 0 017 14v-1.1a4.967 4.967 0 01-1.447-.539l-.846.846.078.087a1 1 0 01-1.492 1.327l-1.414-1.414-.078-.087a1 1 0 011.492-1.327l.744-.744A4.986 4.986 0 013.23 9.5H2a1 1 0 01-1.993.117L0 9.5v-2a1 1 0 011.993-.117L2 7.5h1.025a4.973 4.973 0 01.905-2.405l-.512-.513-.125.125A1 1 0 011.8 3.38l.078-.087 1.414-1.414a1 1 0 011.529 1.277l.573.575a4.969 4.969 0 011.604-.63V2l-.116-.007a1 1 0 010-1.986L7 0h2a1 1 0 01.117 1.993L9 2l.001 1.1c.639.13 1.233.381 1.757.73l.535-.537-.078-.087a1 1 0 011.492-1.327l1.414 1.414.078.087a1 1 0 01-1.492 1.327l-.535.536a4.97 4.97 0 01.803 2.257H14l.007-.117A1 1 0 0116 7.5v2l-.007.117A1 1 0 0114 9.5h-1.229a4.987 4.987 0 01-.853 1.607zM10 9a1 1 0 100 2 1 1 0 000-2zM6.5 5a1.5 1.5 0 100 3 1.5 1.5 0 000-3z\"],\n \"volume-down\": [\"M9 2c-.28 0-.53.11-.71.29L5.59 5H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm3.57 1.44l-1.59 1.22C11.62 5.61 12 6.76 12 8s-.38 2.39-1.02 3.34l1.59 1.22C13.47 11.27 14 9.7 14 8c0-1.7-.53-3.27-1.43-4.56z\"],\n \"volume-off\": [\"M11 2c-.28 0-.53.11-.71.29L7.59 5H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"volume-up\": [\"M7 1.86c-.28 0-.53.11-.71.29l-2.7 2.71H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2.59l2.71 2.71a1.003 1.003 0 001.71-.71v-10c-.01-.55-.46-1-1.01-1zm6.74-.99l-1.58 1.22A9.985 9.985 0 0114 7.86c0 2.16-.69 4.15-1.85 5.78l1.58 1.22c1.42-1.97 2.26-4.38 2.26-7 .01-2.61-.84-5.02-2.25-6.99zM8.98 4.52C9.62 5.48 10 6.63 10 7.86s-.38 2.39-1.02 3.34l1.59 1.22c.9-1.29 1.43-2.86 1.43-4.56 0-1.7-.53-3.27-1.43-4.56L8.98 4.52z\"],\n \"walk\": [\"M13 8h-2c-.16 0-.31-.05-.44-.11v.01l-1.02-.51-.37 1.86 1.38.92-.01.02c.27.17.46.46.46.81v4c0 .55-.45 1-1 1s-1-.45-1-1v-3.46l-1.27-.85-1.8 4.67h-.01A.98.98 0 015 16c-.55 0-1-.45-1-1 0-.13.03-.25.07-.36h-.01L7.39 6H5.62l-.73 1.45h-.01C4.72 7.77 4.39 8 4 8c-.55 0-1-.45-1-1 0-.16.05-.31.11-.44H3.1l1-2h.01c.17-.33.5-.56.89-.56h3.16l.29-.75C8.17 2.9 8 2.47 8 2c0-1.1.9-2 2-2s2 .9 2 2c0 1-.73 1.82-1.69 1.97l-.5 1.32 1.43.71H13c.55 0 1 .45 1 1s-.45 1-1 1z\"],\n \"warning-sign\": [\"M15.84 13.5l.01-.01-7-12-.01.01c-.17-.3-.48-.5-.85-.5s-.67.2-.85.5l-.01-.01-7 12 .01.01c-.09.15-.15.31-.15.5 0 .55.45 1 1 1h14c.55 0 1-.45 1-1 0-.19-.06-.35-.15-.5zm-6.85-.51h-2v-2h2v2zm0-3h-2v-5h2v5z\"],\n \"waterfall-chart\": [\"M8 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-4 4h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1zm7-6c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1s-1 .45-1 1v1c0 .55.45 1 1 1zm4-3h-1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 10H2V3c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"widget\": [\"M13 11h2V5h-2v6zM3 5H1v6h2V5zm11-1c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM5 3h6V1H5v2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3 15h6v-2H5v2z\"],\n \"widget-button\": [\"M1 3h14c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1zm1 2v6h12V5H2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm3 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"widget-footer\": [\"M14 0H2c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H3v-3h10v3zm0-4H3V2h10v8z\"],\n \"widget-header\": [\"M14 0H2c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 14H3V6h10v8zm0-9H3V2h10v3z\"],\n \"wrench\": [\"M15.83 3.7l-3.06 3.05-2.84-.7-.7-2.83L12.29.17a5.004 5.004 0 00-4.83 1.29 4.967 4.967 0 00-1.12 5.36L.58 12.58c-.36.36-.58.86-.58 1.41 0 1.1.9 2 2 2 .55 0 1.05-.22 1.41-.59l5.77-5.77c1.79.69 3.91.33 5.35-1.12 1.32-1.3 1.74-3.15 1.3-4.81z\"],\n \"zoom-in\": [\"M7.99 5.99v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2zm7.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"zoom-out\": [\"M3.99 5.99c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1h-6zm11.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"zoom-to-fit\": [\"M11 10a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42L12.59 8 11.3 9.29c-.19.18-.3.43-.3.71zM1 5c.55 0 1-.45 1-1V2h2c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v3c0 .55.45 1 1 1zm4 1a1.003 1.003 0 00-1.71-.71l-2 2C1.11 7.47 1 7.72 1 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 8 4.7 6.71c.19-.18.3-.43.3-.71zm1-1c.28 0 .53-.11.71-.29L8 3.41 9.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-2 2A1.003 1.003 0 006 5zm9 6c-.55 0-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zm0-11h-3c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zM4 14H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm6-3c-.28 0-.53.11-.71.29L8 12.59 6.71 11.3A.965.965 0 006 11a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 0010 11z\"],\n};\nexport var IconSvgPaths20 = {\n \"add\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm5-9h-4V5c0-.55-.45-1-1-1s-1 .45-1 1v4H5c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1v-4h4c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"add-column-left\": [\"M4 11h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1H8V7c0-.55-.45-1-1-1s-1 .45-1 1v2H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-7 18H2V2h10v16zm6 0h-5V2h5v16z\"],\n \"add-column-right\": [\"M10 11h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V7c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1zm9-11H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H2V2h5v16zm11 0H8V2h10v16z\"],\n \"add-row-bottom\": [\"M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V8h16v10zm0-11H2V2h16v5zM7 14h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2v-2c0-.55-.45-1-1-1s-1 .45-1 1v2H7c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"add-row-top\": [\"M7 8h2v2c0 .55.45 1 1 1s1-.45 1-1V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v2H7c-.55 0-1 .45-1 1s.45 1 1 1zm12-8H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2v-5h16v5zm0-6H2V2h16v10z\"],\n \"add-to-artifact\": [\"M13 12H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zM1 6h9c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm12 2H1c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm6-4h-2V2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V6h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"add-to-folder\": [\"M.01 10V6H20v10c0 .55-.45 1-1 1H9.995v-3.99C9.965 11.332 8.635 10 6.987 10H.01zM19 3c.55 0 1 .45.99 1v1H0V2c0-.55.45-1 1-1h5.997c.28 0 .53.11.71.29L9.414 3H19zM6.987 12c.55 0 .999.45 1.009 1.01v5c0 .55-.45 1-1 1s-.999-.45-.999-1v-2.59l-4.288 4.29a1.003 1.003 0 01-1.42-1.42L4.579 14H1.989c-.55 0-1-.45-1-1s.45-1 1-1h4.998z\"],\n \"airplane\": [\"M20 2c0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-4.84 4.84L2 1 1 3l7.53 5.64L4.17 13H1l-1 1 4 2 2 4 1-1v-3.17l4.36-4.36L17 19l2-1-4.43-9.74 4.84-4.84c.37-.37.59-.87.59-1.42z\"],\n \"align-center\": [\"M5 5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1H5zM1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm12 12c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h6zm4 2H3c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm2-8H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"align-justify\": [\"M1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 14H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-12H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"align-left\": [\"M1 7h10c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm14 14H1c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zm4-8H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM1 15h6c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"align-right\": [\"M19 17H5c-.55 0-1 .45-1 1s.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1zM1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 10h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H9c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"alignment-bottom\": [\"M12 16h4c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1zm7 2H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1z\"],\n \"alignment-horizontal-center\": [\"M19 9h-2V7c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v2H9V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6H1c-.55 0-1 .45-1 1s.45 1 1 1h2v6c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-6h2v2c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"alignment-left\": [\"M1 0C.45 0 0 .45 0 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm11 11H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm7-8H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"alignment-right\": [\"M19 0c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-4 11H8c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm0-8H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"alignment-top\": [\"M8 4H4c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm11-4H1C.45 0 0 .45 0 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-3 4h-4c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"alignment-vertical-center\": [\"M17 3h-6V1c0-.55-.45-1-1-1S9 .45 9 1v2H3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h6v2H7c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1h-2V9h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"annotation\": [\"M9.41 13.41l7.65-7.65-2.83-2.83-7.65 7.65 2.83 2.83zm10-10c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.83 1.64-1.66zM18 18H2V2h8.93l2-2H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7.07l-2 2V18zM4 16l4.41-1.59-2.81-2.79L4 16z\"],\n \"app-header\": [\"M19 0a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h18zM8 6a1 1 0 00-1.993-.117L6 6v8a1 1 0 001.993.117L8 14v-3h4v3a1 1 0 001.993.117L14 14V6a1 1 0 00-1.993-.117L12 6v3H8V6z\"],\n \"application\": [\"M3.5 9h9c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-9c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm-1 16H2V6h16v11zM3.5 13h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5z\"],\n \"applications\": [\"M15 5H1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 13H2V8h12v10zM3.5 10h7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-7c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-3c-.28 0-.5.22-.5.5s.22.5.5.5zm0 2h5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-5c-.28 0-.5.22-.5.5s.22.5.5.5zM19 0H5c-.55 0-1 .45-1 1v3h2V3h12v10h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"archive\": [\"M16.434 0a1 1 0 01.857.486L20 5v14a1 1 0 01-1 1H1a1 1 0 01-1-1V5L2.709.486A1 1 0 013.566 0h12.868zM10 8c-.55 0-1 .45-1 1v4.58l-1.29-1.29-.081-.073A.996.996 0 007 11.99a1.003 1.003 0 00-.71 1.71l3 3 .096.084c.168.13.38.206.614.206.28 0 .53-.11.71-.29l3-3 .084-.096a1.003 1.003 0 00-1.504-1.324L11 13.58V9l-.007-.116A1.004 1.004 0 0010 8zm6-6H4L2 5.002h16L16 2z\"],\n \"arrow-bottom-left\": [\"M18 3a1.003 1.003 0 00-1.71-.71L4 14.59V7c0-.55-.45-1-1-1s-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1H5.41l12.3-12.29c.18-.18.29-.43.29-.71z\"],\n \"arrow-bottom-right\": [\"M17 6c-.55 0-1 .45-1 1v7.59L3.71 2.29a1.003 1.003 0 00-1.42 1.42L14.59 16H7c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z\"],\n \"arrow-down\": [\"M16 11c-.3 0-.5.1-.7.3L11 15.6V2c0-.5-.4-1-1-1s-1 .5-1 1v13.6l-4.3-4.3c-.2-.2-.4-.3-.7-.3-.5 0-1 .4-1 1 0 .3.1.5.3.7l6 6c.2.2.4.3.7.3s.5-.1.7-.3l6-6c.2-.2.3-.4.3-.7 0-.6-.5-1-1-1z\"],\n \"arrow-left\": [\"M18 9H4.41L8.7 4.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L4.41 11H18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"arrow-right\": [\"M18.71 9.29l-6-6a1.003 1.003 0 00-1.42 1.42L15.59 9H2c-.55 0-1 .45-1 1s.45 1 1 1h13.59l-4.29 4.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"arrow-top-left\": [\"M17.71 16.29L5.41 4H13c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1s1-.45 1-1V5.41L16.29 17.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"arrow-top-right\": [\"M17 2H7c-.55 0-1 .45-1 1s.45 1 1 1h7.59L2.29 16.29a1.003 1.003 0 001.42 1.42L16 5.41V13c0 .55.45 1 1 1s1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"arrow-up\": [\"M16.7 7.3l-6-6c-.2-.2-.4-.3-.7-.3s-.5.1-.7.3l-6 6c-.2.2-.3.4-.3.7 0 .6.5 1 1 1 .3 0 .5-.1.7-.3L9 4.4V18c0 .5.4 1 1 1s1-.5 1-1V4.4l4.3 4.3c.2.2.4.3.7.3.5 0 1-.4 1-1 0-.3-.1-.5-.3-.7z\"],\n \"arrows-horizontal\": [\"M19.7 9.3l-5-5c-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.5.3.7L16.6 9H3.4l3.3-3.3c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1-.3 0-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7s.1.5.3.7l5 5c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7L3.4 11h13.2l-3.3 3.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l5-5c.2-.2.3-.4.3-.7s-.1-.5-.3-.7z\"],\n \"arrows-vertical\": [\"M15 13c-.3 0-.5.1-.7.3L11 16.6V3.4l3.3 3.3c.2.2.4.3.7.3.6 0 1-.4 1-1 0-.3-.1-.5-.3-.7l-5-5c-.2-.2-.4-.3-.7-.3s-.5.1-.7.3l-5 5c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3L9 3.4v13.2l-3.3-3.3c-.2-.2-.4-.3-.7-.3-.6 0-1 .4-1 1 0 .3.1.5.3.7l5 5c.2.2.4.3.7.3s.5-.1.7-.3l5-5c.2-.2.3-.4.3-.7 0-.5-.4-1-1-1z\"],\n \"asterisk\": [\"M18.52 14.17l.01-.02L11.89 10l6.64-4.15-.01-.02A.97.97 0 0019 5c0-.55-.45-1-1-1-.2 0-.37.07-.52.17l-.01-.02L11 8.2V1c0-.55-.45-1-1-1S9 .45 9 1v7.2L2.53 4.15l-.01.02A.922.922 0 002 4c-.55 0-1 .45-1 1 0 .36.2.66.48.83l-.01.02L8.11 10l-6.64 4.15.01.02A.97.97 0 001 15c0 .55.45 1 1 1 .2 0 .37-.07.52-.17l.01.02L9 11.8V19c0 .55.45 1 1 1s1-.45 1-1v-7.2l6.47 4.04.01-.02c.15.11.32.18.52.18.55 0 1-.45 1-1 0-.36-.2-.66-.48-.83z\"],\n \"automatic-updates\": [\"M10 18c-4.42 0-8-3.58-8-8 0-2.52 1.18-4.76 3-6.22V5c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1h2.06C1.61 3.82 0 6.71 0 10c0 5.52 4.48 10 10 10 .55 0 1-.45 1-1s-.45-1-1-1zm0-16c1.64 0 3.15.49 4.42 1.34l1.43-1.43A9.869 9.869 0 0010 0c-.55 0-1 .45-1 1s.45 1 1 1zm10 8c0-1.13-.2-2.21-.54-3.22L17.84 8.4A7.962 7.962 0 0115 16.22V15c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1h-2.06c2.45-1.82 4.06-4.71 4.06-8zm0-7a1.003 1.003 0 00-1.71-.71L12 8.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7c.18-.18.29-.43.29-.71z\"],\n \"backlink\": [\"M18.387 19.79l-.094-.083L14 15.415V18a1 1 0 01-2 0l.003-5.075.017-.126.03-.111.044-.111.052-.098.067-.096.08-.09a1.01 1.01 0 01.112-.097l.11-.071.114-.054.105-.035.15-.03L13 12h5a1 1 0 110 2h-2.585l4.292 4.293a1 1 0 01-1.32 1.497zM7.036 9.136l-4.45 4.45-.117.127a2 2 0 002.818 2.818l.127-.117 4.45-4.449a4 4 0 01-.885 3.704l-.15.16-2 2A4 4 0 011.02 12.33l.15-.16 2-2a3.998 3.998 0 013.865-1.035zm6.671-3.843a1 1 0 01.083 1.32l-.083.094-7 7a1 1 0 01-1.497-1.32l.083-.094 7-7a1 1 0 011.414 0zm4.121-4.121a4 4 0 01.151 5.497l-.15.16-2 2a3.998 3.998 0 01-3.864 1.036l4.45-4.45.116-.128a2 2 0 00-2.818-2.818l-.127.117-4.45 4.45a4 4 0 01.885-3.705l.15-.16 2-2a4 4 0 015.657 0z\"],\n \"badge\": [\"M16.94 5.73c-.19-1.41.62-2.52 1.38-3.59L17.03.65C14.89 1.76 11.88 1.48 10 0 8.12 1.48 5.11 1.76 2.97.65L1.68 2.14c.76 1.07 1.57 2.18 1.38 3.59C2.68 8.59 0 10.94 1.4 14.08c.56 1.43 1.81 2.37 3.4 2.75 1.95.46 4.4.91 5.2 3.17.8-2.26 3.25-2.71 5.2-3.17 1.6-.38 2.84-1.32 3.4-2.75 1.4-3.14-1.28-5.49-1.66-8.35z\"],\n \"ban-circle\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm5 11H5c-.55 0-1-.45-1-1s.45-1 1-1h10c.55 0 1 .45 1 1s-.45 1-1 1z\"],\n \"bank-account\": [\"M19.2 8.02l-.78-.18C18.03 6.4 17.2 5.08 16.08 4l.5-2.28c.11-.42-.22-.78-.61-.72-1.06.12-2 .54-2.67 1.26-1.06-.42-2.34-.66-3.56-.66-3.12 0-5.79 1.5-7.4 3.72-.23-.05-.45-.11-.67-.11C.72 5.21 0 5.98 0 7c0 .72.39 1.32.95 1.62-.06.42-.12.9-.12 1.38 0 2.16.89 4.08 2.28 5.58l-.33 2.04c-.11.72.45 1.38 1.12 1.38h.72c.56 0 1-.42 1.11-1.02l.06-.48c1.17.54 2.5.9 3.95.9 1.39 0 2.78-.3 3.95-.9l.06.48c.11.6.56 1.02 1.11 1.02h.72c.67 0 1.22-.66 1.11-1.38l-.33-1.98c.78-.78 1.34-1.74 1.73-2.76l1-.24c.5-.12.89-.6.89-1.2V9.22c.11-.6-.28-1.08-.78-1.2zM15 10c-.6 0-1-.7-1-1.5S14.4 7 15 7s1 .7 1 1.5-.4 1.5-1 1.5zM7.55 5.83a.99.99 0 01-1.38-.28.99.99 0 01.28-1.38c2.34-1.56 4.77-1.56 7.11 0 .46.31.58.93.28 1.39-.31.46-.93.58-1.39.28-1.67-1.12-3.23-1.12-4.9-.01z\"],\n \"barcode\": [\"M6 16.98h2v-14H6v14zm3 0h1v-14H9v14zm-6 0h2v-14H3v14zm-3 0h2v-14H0v14zm16 0h2v-14h-2v14zm-4 0h1v-14h-1v14zm7-14v14h1v-14h-1zm-5 14h1v-14h-1v14z\"],\n \"blank\": [],\n \"blocked-person\": [\"M11.55 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.06-.11.14-.35.17-.62C10.33 9.42 8.92 7.38 8.92 5c0-.3.05-.58.09-.87-.33-.08-.67-.13-.99-.13-.79 0-1.68.25-2.31.73-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.17 1.51-.17 2.14v.08c-.24.09-.45.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59C3 16.56.77 17.26.32 18.31-.15 19.38.04 20 .04 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.69-1.75-4.17-2.41zM14.97 0c-2.78 0-5.03 2.24-5.03 5s2.25 5 5.03 5S20 7.76 20 5s-2.25-5-5.03-5zm-3.03 5c0-1.66 1.35-3 3.02-3 .47 0 .9.11 1.29.3l-4.01 3.99c-.18-.4-.3-.83-.3-1.29zm3.03 3c-.47 0-.9-.11-1.29-.3l4.01-3.99c.19.39.3.82.3 1.29 0 1.66-1.36 3-3.02 3z\"],\n \"bold\": [\"M14.3 9c.4-.8.7-1.6.7-2.5C15 4 13 2 10.5 2H5c-.6 0-1 .4-1 1v13c0 .6.4 1 1 1h6.5c2.5 0 4.5-2 4.5-4.5 0-1.4-.7-2.7-1.7-3.5zM7 5h3.5c.8 0 1.5.7 1.5 1.5S11.3 8 10.5 8H7V5zm4.5 9H7v-3h4.5c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5z\"],\n \"book\": [\"M3 1v18c0 .55.45 1 1 1h2V0H4c-.55 0-1 .45-1 1zm14-1h-2v8l-2-2-2 2V0H7v20h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"bookmark\": [\"M6 0c-.55 0-1 .45-1 1v18c0 .55.32.68.71.29L9.3 15.7a.996.996 0 011.41 0l3.59 3.59c.38.39.7.26.7-.29v-8-4.5V1c0-.55-.45-1-1-1H6z\"],\n \"box\": [\"M19.89 6.56l-2.99-6h-.01C16.72.23 16.39 0 16 0H4c-.39 0-.72.23-.89.56H3.1l-3 6h.01C.05 6.69 0 6.84 0 7v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7c0-.16-.05-.31-.11-.44zM11 2h4.38l2 4H11V2zM4.62 2H9v4H2.62l2-4zM18 18H2V8h16v10zM8 12h4c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"briefcase\": [\"M19 5h-4V2c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v3H1c-.55 0-1 .45-1 1v5h4v-1h2v1h8v-1h2v1h4V6c0-.55-.45-1-1-1zm-6 0H7V3h6v2zm3 8h-2v-1H6v1H4v-1H0v6c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-6h-4v1z\"],\n \"bring-data\": [\"M18 18a1 1 0 010 2H2a1 1 0 010-2h16zM9.995 3.005c.55 0 1 .45 1 .999v9.584l1.29-1.288a1.002 1.002 0 011.42 1.419l-3 2.996a1.015 1.015 0 01-1.42 0l-3-2.997a1.002 1.002 0 011.42-1.419l1.29 1.29V4.013c0-.55.45-1.009 1-1.009zM16 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zm-3 0a1 1 0 110 2 1 1 0 010-2zM7 0a1 1 0 110 2 1 1 0 010-2zM4 0a1 1 0 110 2 1 1 0 010-2z\"],\n \"build\": [\"M19.43 16.67L9.31 7.81l1.47-1.56c.41-.44-.15-.8.15-1.6 1.08-2.76 4.19-2.99 4.19-2.99s.45-.47.87-.92C11.98-1 9.26.7 8.04 1.8L3.83 6.25l-.86.92c-.48.51-.48 1.33 0 1.84l-.87.92c-.48-.51-1.26-.51-1.74 0s-.48 1.33 0 1.84l1.74 1.84c.48.51 1.26.51 1.74 0s.48-1.33 0-1.84l.87-.92c.48.51 1.26.51 1.74 0l1.41-1.49 8.81 10.07c.76.76 2 .76 2.76 0 .76-.76.76-2 0-2.76z\"],\n \"calculator\": [\"M16 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V8h2v2zm4 8H9v-2h2v2zm0-4H9v-2h2v2zm0-4H9V8h2v2zm4 8h-2v-6h2v6zm0-8h-2V8h2v2zm0-4H5V2h10v4z\"],\n \"calendar\": [\"M15 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zM5 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm13-2h-1v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H7v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H2c-.5 0-1 .5-1 1v14c0 .5.5 1 1 1h16c.5 0 1-.5 1-1V4c0-.5-.5-1-1-1zM7 17H3v-4h4v4zm0-5H3V8h4v4zm5 5H8v-4h4v4zm0-5H8V8h4v4zm5 5h-4v-4h4v4zm0-5h-4V8h4v4z\"],\n \"camera\": [\"M10 8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm9-4h-3.59L13.7 2.29A.956.956 0 0013 2H7c-.28 0-.53.11-.71.29L4.59 4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h4.11c1.26 1.24 2.99 2 4.89 2s3.63-.76 4.89-2H19c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM4 8H2V6h2v2zm6 8c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"caret-down\": [\"M16 7c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1 0 .24.1.46.24.63l-.01.01 5 6 .01-.01c.19.22.45.37.76.37s.57-.15.76-.37l.01.01 5-6-.01-.01c.14-.17.24-.39.24-.63z\"],\n \"caret-left\": [\"M13 4c-.24 0-.46.1-.63.24l-.01-.01-6 5 .01.01c-.22.19-.37.45-.37.76s.15.57.37.76l-.01.01 6 5 .01-.01c.17.14.39.24.63.24.55 0 1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"caret-right\": [\"M14 10c0-.31-.15-.57-.37-.76l.01-.01-6-5-.01.01C7.46 4.1 7.24 4 7 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1 .24 0 .46-.1.63-.24l.01.01 6-5-.01-.01c.22-.19.37-.45.37-.76z\"],\n \"caret-up\": [\"M15.76 12.37l.01-.01-5-6-.01.01C10.57 6.15 10.31 6 10 6s-.57.15-.76.37l-.01-.01-5 6 .01.01c-.14.17-.24.39-.24.63 0 .55.45 1 1 1h10c.55 0 1-.45 1-1 0-.24-.1-.46-.24-.63z\"],\n \"cell-tower\": [\"M11.5 8.32c.31-.35.51-.81.51-1.32 0-1.1-.9-2-2-2s-2 .9-2 2c0 .51.2.97.51 1.32L5.06 18.69c-.17.52.11 1.09.63 1.26s1.09-.11 1.26-.63L8.39 15h3.23l1.44 4.32c.17.52.74.81 1.26.63s.81-.74.63-1.26L11.5 8.32zM10.95 13H9.06l.95-2.84.94 2.84zM5.31 10.73a.996.996 0 101.37-1.45c-1.4-1.33-1.28-3.35-.01-4.54.4-.38.43-1.01.05-1.41-.36-.41-1-.43-1.4-.06-2.09 1.95-2.28 5.3-.01 7.46z\",\n \"M4.6 12.2C3 11.1 2 9 2 7c0-2.1.9-3.9 2.6-5.2.5-.3.5-1 .2-1.4-.3-.5-1-.5-1.4-.2C1.2 1.9-.1 4.2 0 7c.1 2.7 1.4 5.3 3.4 6.8.2.1.4.2.6.2.3 0 .6-.1.8-.4.4-.5.3-1.1-.2-1.4zM13.27 10.69c.38.4 1.01.42 1.41.04 2.27-2.16 2.08-5.51-.01-7.46a.996.996 0 10-1.36 1.46c1.28 1.19 1.39 3.21-.01 4.54-.39.39-.41 1.02-.03 1.42z\",\n \"M16.6.2c-.4-.3-1.1-.3-1.4.2-.3.4-.3 1.1.2 1.4C17.1 3.1 18 4.9 18 7c0 2-1 4.1-2.6 5.2-.5.3-.6.9-.2 1.4.2.3.5.4.8.4.2 0 .4-.1.6-.2C18.7 12.3 20 9.7 20 7c.09-2.8-1.2-5.1-3.4-6.8z\"],\n \"changes\": [\"M18 16H2c-1.1 0-2 .9-2 2s.9 2 2 2h16c1.1 0 2-.9 2-2s-.9-2-2-2zM3 5c.28 0 .53-.11.71-.29L5 3.41V13c0 .55.45 1 1 1s1-.45 1-1V3.41L8.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C6.53.11 6.28 0 6 0s-.53.11-.71.29l-3 3A1.003 1.003 0 003 5zm7.29 5.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L15 10.59V1c0-.55-.45-1-1-1s-1 .45-1 1v9.59L11.71 9.3A.965.965 0 0011 9a1.003 1.003 0 00-.71 1.71z\"],\n \"chart\": [\"M7 11v8c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-8l-2 2-4-2zm-7 8c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-8l-6 3v5zM17 7l-3 3v9c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V8.74c-.26.15-.58.26-1 .26-1.92 0-2-2-2-2zm2-6h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59L10.8 8.78 7.45 7.11v.01C7.31 7.05 7.16 7 7 7s-.31.05-.44.11V7.1l-6 3v.01c-.33.17-.56.5-.56.89 0 .55.45 1 1 1 .16 0 .31-.05.44-.11v.01L7 9.12l3.55 1.78v-.01c.14.06.29.11.45.11.28 0 .53-.11.71-.29L18 4.41V6c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"chat\": [\"M19 0H7c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h5.59l3.71 3.71c.17.18.42.29.7.29.55 0 1-.45 1-1v-3h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 13c-1.1 0-2-.9-2-2V4H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h1v3a1.003 1.003 0 001.71.71L7.41 16H13c.55 0 1-.45 1-1v-.17L12.17 13H7z\"],\n \"chevron-backward\": [\"M8.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L7 8.59V4c0-.55-.45-1-1-1s-1 .45-1 1v12c0 .55.45 1 1 1s1-.45 1-1v-4.59l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L8.41 10z\"],\n \"chevron-down\": [\"M16 6c-.28 0-.53.11-.71.29L10 11.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 6z\"],\n \"chevron-forward\": [\"M13 3c-.55 0-1 .45-1 1v4.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5.29-5.3V16c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"chevron-left\": [\"M8.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L8.41 10z\"],\n \"chevron-right\": [\"M13.71 9.29l-6-6a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"chevron-up\": [\"M16.71 12.29l-6-6C10.53 6.11 10.28 6 10 6s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42L10 8.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"circle\": [\"M10 0C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10S15.5 0 10 0zm0 18c-4.4 0-8-3.6-8-8s3.6-8 8-8 8 3.6 8 8-3.6 8-8 8z\"],\n \"circle-arrow-down\": [\"M14 10c-.28 0-.53.11-.71.29L11 12.59V5c0-.55-.45-1-1-1s-1 .45-1 1v7.59L6.71 10.3A.965.965 0 006 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0014 10zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"],\n \"circle-arrow-left\": [\"M15 9H7.41L9.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L7.41 11H15c.55 0 1-.45 1-1s-.45-1-1-1zm-5-9C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"],\n \"circle-arrow-right\": [\"M15.71 9.29l-4-4a1.003 1.003 0 00-1.42 1.42L12.59 9H5c-.55 0-1 .45-1 1s.45 1 1 1h7.59l-2.29 2.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"],\n \"circle-arrow-up\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.71-13.71C10.53 4.11 10.28 4 10 4s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L9 7.41V15c0 .55.45 1 1 1s1-.45 1-1V7.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-4-4z\"],\n \"citation\": [\"M4 1C1.79 1 0 2.79 0 5s1.79 4 4 4c.1 0 .2-.01.3-.02C3.82 11.32 2.53 13 1 13c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7-4.48 7-10 0-2.21-1.79-4-4-4zM16 1c-2.21 0-4 1.79-4 4s1.79 4 4 4c.1 0 .2-.01.3-.02C15.82 11.32 14.53 13 13 13c-.55 0-1 .45-1 1s.45 1 1 1c3.87 0 7-4.48 7-10 0-2.21-1.79-4-4-4z\"],\n \"clean\": [\"M7 0L5 5 0 6.998 5 9l2 5 2-5 5-1.995L9 5zM15 10l-1.5 3.496-3.5 1.499 3.5 1.498L15 20l1.5-3.507L20 15l-3.5-1.504z\"],\n \"clipboard\": [\"M13 2c0-.55-.45-1-1-1h-.78a1.98 1.98 0 00-3.44 0H7c-.55 0-1 .45-1 1v2h7V2z\",\n \"M16 2h-2v3H5V2H3c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"],\n \"cloud\": [\"M15 7c-.12 0-.24.03-.36.04C13.83 4.69 11.62 3 9 3 5.69 3 3 5.69 3 9c0 .05.01.09.01.14A3.98 3.98 0 000 13c0 2.21 1.79 4 4 4h11c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"],\n \"cloud-download\": [\"M15 4c-.12 0-.24.03-.36.04C13.83 1.69 11.62 0 9 0 5.69 0 3 2.69 3 6c0 .05.01.09.01.14A3.98 3.98 0 000 10c0 2.21 1.79 4 4 4h.78c.55-.61 1.34-1 2.22-1v-2c0-1.66 1.34-3 3-3s3 1.34 3 3v2c.88 0 1.66.38 2.2.98C17.87 13.87 20 11.69 20 9c0-2.76-2.24-5-5-5zm-2 11c-.28 0-.53.11-.71.29L11 16.59V11c0-.55-.45-1-1-1s-1 .45-1 1v5.59L7.71 15.3A.965.965 0 007 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 0013 15z\"],\n \"cloud-upload\": [\"M10.71 10.29c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 13.41V19c0 .55.45 1 1 1s1-.45 1-1v-5.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM15 4c-.12 0-.24.03-.36.04C13.83 1.69 11.62 0 9 0 5.69 0 3 2.69 3 6c0 .05.01.09.01.14A3.98 3.98 0 000 10c0 2.21 1.79 4 4 4 0-.83.34-1.58.88-2.12l3-3a2.993 2.993 0 014.24 0l3 3-.01.01c.52.52.85 1.23.87 2.02C18.28 13.44 20 11.42 20 9c0-2.76-2.24-5-5-5z\"],\n \"code\": [\"M6 6a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L2.41 10 5.7 6.71c.19-.18.3-.43.3-.71zm6-4c-.46 0-.83.31-.95.73l-4 14c-.02.09-.05.17-.05.27 0 .55.45 1 1 1 .46 0 .83-.31.95-.73l4-14c.02-.09.05-.17.05-.27 0-.55-.45-1-1-1zm7.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42l3.3 3.29-3.29 3.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"code-block\": [\"M19 5h-2V3c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v2H9V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM8.71 15.29a1.003 1.003 0 01-1.42 1.42l-4-4C3.11 12.53 3 12.28 3 12s.11-.53.29-.71l4-4a1.003 1.003 0 011.42 1.42L5.41 12l3.3 3.29zm8-2.58l-4 4a1.003 1.003 0 01-1.42-1.42l3.3-3.29-3.29-3.29A.965.965 0 0111 8a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71s-.11.53-.29.71z\"],\n \"cog\": [\"M19 8h-2.31c-.14-.46-.33-.89-.56-1.3l1.7-1.7a.996.996 0 000-1.41l-1.41-1.41a.996.996 0 00-1.41 0l-1.7 1.7c-.41-.22-.84-.41-1.3-.55V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v2.33c-.48.14-.94.34-1.37.58L5 2.28a.972.972 0 00-1.36 0L2.28 3.64c-.37.38-.37.99 0 1.36L3.9 6.62c-.24.44-.44.89-.59 1.38H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2.31c.14.46.33.89.56 1.3L2.17 15a.996.996 0 000 1.41l1.41 1.41c.39.39 1.02.39 1.41 0l1.7-1.7c.41.22.84.41 1.3.55V19c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2.33c.48-.14.94-.35 1.37-.59L15 17.72c.37.37.98.37 1.36 0l1.36-1.36c.37-.37.37-.98 0-1.36l-1.62-1.62c.24-.43.45-.89.6-1.38H19c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-9 6c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\"],\n \"collapse-all\": [\"M9.29 8.71c.18.18.43.29.71.29s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L10 6.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6zm1.42 2.58c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42l5.29-5.3 5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6z\"],\n \"column-layout\": [\"M19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM5 17H2V3h3v14zm4 0H6V3h3v14zm9 0h-8V3h8v14z\"],\n \"comment\": [\"M19 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3v4a1.003 1.003 0 001.71.71l4.7-4.71H19c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM4 10c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"],\n \"comparison\": [\"M6 8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm13-6h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 3h-5V3h5v2zM6 14H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zM6 2H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm4-2c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm9 14h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm0 3h-5v-2h5v2zm0-9h-5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm0 3h-5V9h5v2z\"],\n \"compass\": [\"M15 10c0 .14-.03.28-.09.4l-3.99 8.98-.01.02a.991.991 0 01-1.82 0l-.01-.02-3.99-8.98c-.06-.12-.09-.26-.09-.4s.03-.28.09-.4L9.08.62 9.09.6a.991.991 0 011.82 0l.01.02 3.99 8.98c.06.12.09.26.09.4zm-5-6.54L7.09 10h5.81L10 3.46z\"],\n \"compressed\": [\"M19.89 6.56l-2.99-6h-.01C16.72.23 16.39 0 16 0H4c-.39 0-.72.23-.89.56H3.1l-3 6h.01C.05 6.69 0 6.84 0 7v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7c0-.16-.05-.31-.11-.44zM11 2h4.38l2 4H11V2zM4.62 2H9v4H2.62l2-4zM18 18H2V8h7v4.59L6.71 10.3A.965.965 0 006 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l4-4a1.003 1.003 0 00-1.42-1.42L11 12.59V8h7v10z\"],\n \"confirm\": [\"M9.71 5.29a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7a1.003 1.003 0 00-1.42-1.42L12 7.59l-2.29-2.3zm7.93 2.32c.23.75.36 1.56.36 2.39 0 4.42-3.58 8-8 8s-8-3.58-8-8a7.998 7.998 0 0111.8-7.04l1.46-1.46C13.73.56 11.93 0 10 0 4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-1.4-.29-2.73-.81-3.95l-1.55 1.56z\"],\n \"console\": [\"M19 19H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h18c.55 0 1 .45 1 1v16c0 .55-.45 1-1 1zM18 6H2v11h16V6zM4 8c.28 0 .53.11.71.29l2 2c.18.18.29.43.29.71s-.11.53-.29.71l-2 2a1.003 1.003 0 01-1.42-1.42L4.59 11l-1.3-1.29A1.003 1.003 0 014 8zm5 4h3c.55 0 1 .45 1 1s-.45 1-1 1H9c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"contrast\": [\"M19 8h-1.26c-.19-.73-.48-1.42-.85-2.06l.94-.94a.996.996 0 000-1.41l-1.41-1.41a.996.996 0 00-1.41 0l-.94.94c-.65-.38-1.34-.67-2.07-.86V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v1.26c-.76.2-1.47.5-2.13.89L5 2.28a.972.972 0 00-1.36 0L2.28 3.64c-.37.38-.37.98 0 1.36l.87.87c-.39.66-.69 1.37-.89 2.13H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h1.26c.19.73.48 1.42.85 2.06l-.94.94a.996.996 0 000 1.41l1.41 1.41c.39.39 1.02.39 1.41 0l.94-.94c.64.38 1.33.66 2.06.85V19c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-1.26c.76-.2 1.47-.5 2.13-.89l.88.87c.37.37.98.37 1.36 0l1.36-1.36c.37-.38.37-.98 0-1.36l-.87-.87c.4-.65.7-1.37.89-2.13H19c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-9 7c-2.76 0-5-2.24-5-5s2.24-5 5-5v10z\"],\n \"control\": [\"M17 10h-7v7h7v-7zm0-7h-7v6h7V3zM9 3H3v14h6V3zm10-3H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V2h16v16z\"],\n \"credit-card\": [\"M19 3H1c-.55 0-1 .45-1 1v2h20V4c0-.55-.45-1-1-1zM0 16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V8H0v8zm6.5-2h7c.28 0 .5.22.5.5s-.22.5-.5.5h-7c-.28 0-.5-.22-.5-.5s.22-.5.5-.5zm-4 0h2c.28 0 .5.22.5.5s-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5s.22-.5.5-.5z\"],\n \"cross\": [\"M11.41 10l4.29-4.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L10 8.59l-4.29-4.3a1.003 1.003 0 00-1.42 1.42L8.59 10 4.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4.29-4.3 4.29 4.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10z\"],\n \"crown\": [\"M2 8l4 2 4-5 4 5 4-2-1 7H3L2 8zm8-6a1 1 0 110 2 1 1 0 010-2zM1 5a1 1 0 110 2 1 1 0 010-2zm18 0a1 1 0 110 2 1 1 0 010-2zM3 16h14v2H3v-2z\"],\n \"cube\": [\"M1.953 4.481l7.41-4.02c.394-.215.88-.215 1.275 0l7.409 4.02L10 9.22 1.953 4.48zm-.817.68L9.5 10.085v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547zm17.728 0c.088.166.136.353.136.546v8.35c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281l8.364-4.926z\"],\n \"cube-add\": [\"M17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2zm-3.969 4.435L10 9.22 1.953 4.48l7.41-4.02c.394-.215.88-.215 1.275 0l1.33.721A3.001 3.001 0 0013 7c0 .148.01.293.031.435zm.319.972A3 3 0 0019 7v7.057c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281l2.85-1.679zM1.136 5.16L9.5 10.086v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547z\"],\n \"cube-remove\": [\"M11.968 1.182A3.001 3.001 0 0013 7h.77L10 9.22 1.953 4.48l7.41-4.02c.394-.215.88-.215 1.275 0l1.33.721zM19 7v7.057c0 .438-.247.842-.648 1.06l-7.714 4.186c-.045.024-.091.046-.138.064v-9.281L15.74 7H19zM1.136 5.16L9.5 10.086v9.281a1.316 1.316 0 01-.138-.064l-7.714-4.186A1.211 1.211 0 011 14.057v-8.35c0-.193.048-.38.136-.547zM13 3h6a1 1 0 010 2h-6a1 1 0 010-2z\"],\n \"curved-range-chart\": [\"M19 16H3.02l2.14-1.74c2.25 1.7 7.33.46 11.83-2.99l-1.29-1.5c-3.56 2.74-7.31 4.03-8.93 3.19l10.55-8.57-.63-.78-10.59 8.6c-.64-1.64 1.46-4.91 5.09-7.7L9.9 3.01c-4.6 3.54-6.91 8.12-5.41 10.51L2 15.54V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"cut\": [\"M16 2s.72-1.28 0-2l-5.29 6.25 1.28 1.54L16 2zm.08 10c-.55 0-1.07.12-1.54.32L4.31 0c-.7.72 0 2 0 2l4.45 6.56-3.19 3.77C5.09 12.12 4.56 12 4 12c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.65-.17-1.26-.45-1.8l2.54-3.67 2.49 3.67c-.27.54-.44 1.15-.44 1.8 0 2.21 1.76 4 3.92 4 2.17 0 3.92-1.79 3.92-4 .02-2.21-1.74-4-3.9-4zM4 18c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm12.08 0c-1.08 0-1.96-.9-1.96-2s.88-2 1.96-2 1.96.9 1.96 2-.88 2-1.96 2z\"],\n \"cycle\": [\"M16 10a4 4 0 110 8 4 4 0 010-8zM4 10a4 4 0 110 8 4 4 0 010-8zm7.299-5.543l.087.089 1.93 2.232 2.048.708a1 1 0 01.65 1.16l-.031.112a1 1 0 01-1.16.65l-.112-.031-2.302-.796a1 1 0 01-.337-.197l-.092-.094-1.387-1.603-1.891 1.982 2.046 2.274a1 1 0 01.25.547l.007.122v4.24a1 1 0 01-1.993.117l-.007-.117-.001-3.857-2.408-2.676a1 1 0 01-.063-1.26l.082-.099 3.29-3.45a1 1 0 011.394-.053zM16 12a2 2 0 100 4 2 2 0 000-4zM4 12a2 2 0 100 4 2 2 0 000-4zm9.5-10a1.5 1.5 0 110 3 1.5 1.5 0 010-3z\"],\n \"dashboard\": [\"M6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM4 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6-4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-5C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm6-9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-8 5c0 1.1.9 2 2 2s2-.9 2-2c0-.33-2-8-2-8s-2 7.67-2 8zm6-9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\"],\n \"data-lineage\": [\"M1.053 0C.47 0 0 .471 0 1.053V4.21c0 .58.471 1.052 1.053 1.052h3.275a6.332 6.332 0 003.728 4.738 6.33 6.33 0 00-3.728 4.737l-3.275-.001C.47 14.737 0 15.208 0 15.789v3.158C0 19.53.471 20 1.053 20h7.435c.581 0 1.053-.471 1.053-1.053V15.79c0-.58-.472-1.052-1.053-1.052H5.406a5.293 5.293 0 015.195-4.21v2.105c0 .58.471 1.052 1.052 1.052h7.294c.582 0 1.053-.471 1.053-1.052V7.368c0-.58-.471-1.052-1.053-1.052h-7.294c-.581 0-1.052.471-1.052 1.052v2.106a5.293 5.293 0 01-5.194-4.21h3.081c.581 0 1.053-.472 1.053-1.053V1.053C9.54.47 9.069 0 8.488 0H1.053z\"],\n \"database\": [\"M2.01 5.1v5.4c0 1.38 3.58 2.5 8 2.5s8-1.12 8-2.5V5.1c-1.49 1.13-4.51 1.9-8 1.9-3.48 0-6.5-.77-8-1.9zm8 .9c4.42 0 8-1.12 8-2.5s-3.58-2.5-8-2.5-8 1.12-8 2.5S5.6 6 10.01 6zm-8 6.1v5.4c0 1.38 3.58 2.5 8 2.5s8-1.12 8-2.5v-5.4c-1.49 1.13-4.51 1.9-8 1.9-3.48 0-6.5-.77-8-1.9z\"],\n \"delete\": [\"M15 6a1.003 1.003 0 00-1.71-.71L10 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L8.59 10 5.3 13.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3.29-3.3 3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10l3.29-3.29c.19-.18.3-.43.3-.71zm-5-6C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"],\n \"delta\": [\"M10 0L0 20h20L10 0zM9 6l6 12H3L9 6z\"],\n \"derive-column\": [\"M7.1 8.2h-.99c.28-1.11.66-1.92 1.12-2.43.28-.32.56-.48.83-.48.05 0 .1.02.13.05.03.03.05.07.05.12 0 .04-.04.13-.11.25a.64.64 0 00-.12.35c0 .15.06.28.18.39.12.11.27.16.45.16.2 0 .36-.07.49-.2s.2-.31.2-.54c0-.26-.1-.47-.3-.63-.19-.16-.51-.24-.95-.24-.68 0-1.3.19-1.85.58-.56.38-1.09 1.02-1.59 1.91-.17.3-.34.5-.49.59-.15.08-.4.13-.74.12l-.23.77h.95l-1.39 5.24c-.23.86-.39 1.39-.47 1.59-.12.29-.3.54-.54.75-.1.08-.21.12-.35.12-.04 0-.07-.01-.1-.03l-.03-.04c0-.02.03-.07.1-.13.07-.07.1-.17.1-.31 0-.15-.05-.28-.16-.38-.11-.1-.27-.15-.47-.15-.25 0-.44.07-.59.2-.15.12-.23.28-.23.46 0 .19.09.36.27.5.19.14.47.21.86.21.61 0 1.16-.15 1.63-.46.48-.31.89-.78 1.25-1.43.35-.64.72-1.68 1.09-3.11l.8-3.03h.96l.24-.77zM19 0h-9c-.55 0-1 .45-1 1v3h2V2h7v16h-7v-2H9v3c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-8.79 13.49c.15.28.32.49.52.61.19.12.44.19.73.19.28 0 .57-.1.86-.3.38-.25.77-.69 1.17-1.31l-.25-.14c-.27.37-.48.6-.61.69-.09.06-.19.09-.31.09-.14 0-.28-.09-.42-.26-.23-.29-.54-1.09-.93-2.4.35-.59.64-.97.87-1.15.17-.13.35-.2.55-.2.07 0 .2.03.39.08s.36.08.5.08c.2 0 .37-.07.5-.2.15-.14.22-.31.22-.52 0-.22-.07-.4-.2-.53s-.33-.2-.58-.2c-.22 0-.43.05-.63.15-.2.1-.45.32-.75.67-.23.25-.56.7-1.01 1.33a6.52 6.52 0 00-.91-2.15l-2.39.39-.05.25c.18-.03.33-.05.45-.05.24 0 .43.1.59.3.25.31.59 1.24 1.02 2.8-.34.44-.58.73-.7.87-.21.22-.38.36-.52.43-.1.05-.22.08-.35.08-.1 0-.26-.05-.49-.16a1.01 1.01 0 00-.42-.11c-.23 0-.42.07-.57.22-.15.14-.23.33-.23.55 0 .21.07.38.21.51.14.13.33.2.56.2.23 0 .44-.05.64-.14.2-.09.45-.29.75-.59s.72-.78 1.25-1.43c.21.61.39 1.06.54 1.35z\"],\n \"desktop\": [\"M19 0H1C.45 0 0 .45 0 1v13c0 .55.45 1 1 1h5.67l-.5 3H5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1h-1.17l-.5-3H19c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 13H2V2h16v11z\"],\n \"diagnosis\": [\"M4 2a1 1 0 01.117 1.993L4 4v5a2 2 0 001.85 1.995L6 11a2 2 0 001.995-1.85L8 9V4a1 1 0 01-.117-1.993L8 2h1a1 1 0 01.993.883L10 3v6a4.002 4.002 0 01-3 3.874V13a3 3 0 003 3 4 4 0 003.995-3.8L14 12V8.792a2.5 2.5 0 112 0V12a6 6 0 01-6 6 5 5 0 01-4.995-4.783L5 13v-.126A4.002 4.002 0 012.005 9.2L2 9V3a1 1 0 01.883-.993L3 2h1z\"],\n \"diagram-tree\": [\"M19 10v5h-2v-4h-6v4H9v-4H3v4H1v-5a1 1 0 011-1h7V5h2v4h7a1 1 0 011 1zM1 16h2a1 1 0 011 1v2a1 1 0 01-1 1H1a1 1 0 01-1-1v-2a1 1 0 011-1zm16 0h2a1 1 0 011 1v2a1 1 0 01-1 1h-2a1 1 0 01-1-1v-2a1 1 0 011-1zm-8 0h2a1 1 0 011 1v2a1 1 0 01-1 1H9a1 1 0 01-1-1v-2a1 1 0 011-1zM9 0h2a1 1 0 011 1v2a1 1 0 01-1 1H9a1 1 0 01-1-1V1a1 1 0 011-1z\"],\n \"direction-left\": [\"M20 3.02l-20 7 20 7-5-7z\"],\n \"direction-right\": [\"M20 10.02l-20-7 5 7-5 7z\"],\n \"disable\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM2 10c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L3.69 14.9A7.902 7.902 0 012 10zm8 8c-1.85 0-3.55-.63-4.9-1.69L16.31 5.1A7.902 7.902 0 0118 10c0 4.42-3.58 8-8 8z\"],\n \"document\": [\"M11.98 0h-8c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V6l-6-6zm4 18h-11V2h6v5h5v11z\"],\n \"document-open\": [\"M8 15c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1h2.59L1.3 16.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 12.41V15zm5-15H5c-.55 0-1 .45-1 1v6h2V2h6v5h5v11H6v-.76L4.04 19.2c.1.45.48.8.96.8h13c.55 0 1-.45 1-1V6l-6-6z\"],\n \"document-share\": [\"M14.09 10.09c-.31.31-.67.57-1.09.72V18H2V2h6v5h1.18c.15-.42.39-.8.7-1.11v-.01l2.45-2.45c-.42-.29-.78-.65-1.01-1.11L9 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V9.24l-.88.88-.03-.03zM19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"dollar\": [\"M15.57 11.19c-.27-.51-.63-.93-1.07-1.26-.44-.33-.95-.6-1.51-.79-.56-.2-1.14-.36-1.72-.5-.6-.14-1.19-.26-1.75-.38-.57-.13-1.07-.27-1.51-.44-.44-.17-.8-.38-1.07-.63s-.41-.59-.41-1c0-.33.09-.6.28-.81.19-.21.42-.36.69-.47.27-.11.57-.18.88-.22.31-.04.58-.06.8-.06.71 0 1.35.14 1.9.41.55.27.91.81 1.06 1.62h3.36c-.09-.84-.32-1.56-.69-2.16-.37-.6-.83-1.08-1.38-1.45-.56-.37-1.18-.64-1.86-.81-.19-.05-.38-.07-.57-.1V1c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v1.1c-.22.03-.43.05-.66.1-.73.13-1.39.37-1.98.71-.6.34-1.09.8-1.47 1.35-.39.56-.58 1.25-.58 2.08 0 .76.13 1.41.4 1.93.26.52.62.95 1.06 1.28.44.33.94.6 1.5.79.55.2 1.13.36 1.74.5.58.14 1.16.26 1.72.38s1.07.26 1.51.43c.44.17.8.39 1.09.66.28.27.43.63.45 1.06.02.43-.08.78-.3 1.04-.22.26-.49.47-.83.6-.34.14-.7.23-1.09.28-.39.05-.73.07-1.03.07-.87 0-1.61-.2-2.23-.59-.62-.39-.98-1.08-1.07-2.06H3c.02.9.19 1.68.52 2.34.33.66.78 1.21 1.35 1.65.57.44 1.25.77 2.03.98.35.1.71.16 1.08.21V19c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1.13c.25-.04.5-.07.76-.13.77-.18 1.47-.46 2.1-.85.63-.39 1.14-.9 1.54-1.53.4-.63.59-1.39.59-2.29.01-.75-.13-1.37-.4-1.88z\"],\n \"dot\": [\"M10 6a4 4 0 100 8 4 4 0 100-8z\"],\n \"double-caret-horizontal\": [\"M8 4c-.24 0-.46.1-.63.24l-.01-.01-6 5 .01.01c-.22.19-.37.45-.37.76s.15.57.37.76l-.01.01 6 5 .01-.01c.17.14.39.24.63.24.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm11 6c0-.31-.15-.57-.37-.76l.01-.01-6-5-.01.01C12.46 4.1 12.24 4 12 4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1 .24 0 .46-.1.63-.24l.01.01 6-5-.01-.01c.22-.19.37-.45.37-.76z\"],\n \"double-caret-vertical\": [\"M5 9h10c.55 0 1-.45 1-1 0-.24-.1-.46-.24-.63l.01-.01-5-6-.01.01C10.57 1.15 10.31 1 10 1s-.57.15-.76.37l-.01-.01-5 6 .01.01C4.1 7.54 4 7.76 4 8c0 .55.45 1 1 1zm10 2H5c-.55 0-1 .45-1 1 0 .24.1.46.24.63l-.01.01 5 6 .01-.01c.19.22.45.37.76.37s.57-.15.76-.37l.01.01 5-6-.01-.01c.14-.17.24-.39.24-.63 0-.55-.45-1-1-1z\"],\n \"double-chevron-down\": [\"M9.29 10.71c.18.18.43.29.71.29s.53-.11.71-.29l6-6a1.003 1.003 0 00-1.42-1.42L10 8.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6zM16 9c-.28 0-.53.11-.71.29L10 14.59l-5.29-5.3a1.003 1.003 0 00-1.42 1.42l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 9z\"],\n \"double-chevron-left\": [\"M5.41 10l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L5.41 10zm6 0l5.29-5.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-6 6c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l6 6a1.003 1.003 0 001.42-1.42L11.41 10z\"],\n \"double-chevron-right\": [\"M11 10c0-.28-.11-.53-.29-.71l-6-6a1.003 1.003 0 00-1.42 1.42L8.59 10 3.3 15.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71zm5.71-.71l-6-6a1.003 1.003 0 00-1.42 1.42l5.3 5.29-5.29 5.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"double-chevron-up\": [\"M4 11c.28 0 .53-.11.71-.29L10 5.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6A.997.997 0 0010 3c-.28 0-.53.11-.71.29l-6 6A1.003 1.003 0 004 11zm6.71-1.71A.997.997 0 0010 9c-.28 0-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42l5.29-5.3 5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6z\"],\n \"doughnut-chart\": [\"M16 10c0 3.31-2.69 6-6 6s-6-2.69-6-6 2.69-6 6-6V0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10h-4zm-.09-1h4.04C19.48 4.28 15.72.52 11 .05V4.1A5.98 5.98 0 0115.91 9z\"],\n \"download\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm4.71 11.71l-4 4c-.18.18-.43.29-.71.29s-.53-.11-.71-.29l-4-4a1.003 1.003 0 011.42-1.42L9 12.59V5c0-.55.45-1 1-1s1 .45 1 1v7.59l2.29-2.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71z\"],\n \"drag-handle-horizontal\": [\"M7.5 11c-.83 0-1.5.67-1.5 1.5S6.67 14 7.5 14 9 13.33 9 12.5 8.33 11 7.5 11zm-5-5C1.67 6 1 6.67 1 7.5S1.67 9 2.5 9 4 8.33 4 7.5 3.33 6 2.5 6zm0 5c-.83 0-1.5.67-1.5 1.5S1.67 14 2.5 14 4 13.33 4 12.5 3.33 11 2.5 11zm15-2c.83 0 1.5-.67 1.5-1.5S18.33 6 17.5 6 16 6.67 16 7.5 16.67 9 17.5 9zm-5 2c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm5 0c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm-10-5C6.67 6 6 6.67 6 7.5S6.67 9 7.5 9 9 8.33 9 7.5 8.33 6 7.5 6zm5 0c-.83 0-1.5.67-1.5 1.5S11.67 9 12.5 9 14 8.33 14 7.5 13.33 6 12.5 6z\"],\n \"drag-handle-vertical\": [\"M7.5 6C6.67 6 6 6.67 6 7.5S6.67 9 7.5 9 9 8.33 9 7.5 8.33 6 7.5 6zm0 5c-.83 0-1.5.67-1.5 1.5S6.67 14 7.5 14 9 13.33 9 12.5 8.33 11 7.5 11zm0 5c-.83 0-1.5.67-1.5 1.5S6.67 19 7.5 19 9 18.33 9 17.5 8.33 16 7.5 16zm5-12c.83 0 1.5-.67 1.5-1.5S13.33 1 12.5 1 11 1.67 11 2.5 11.67 4 12.5 4zm-5-3C6.67 1 6 1.67 6 2.5S6.67 4 7.5 4 9 3.33 9 2.5 8.33 1 7.5 1zm5 10c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-10c-.83 0-1.5.67-1.5 1.5S11.67 9 12.5 9 14 8.33 14 7.5 13.33 6 12.5 6z\"],\n \"draw\": [\"M17.7 12.7c0-.1 0-.2-.1-.3l-2-7c-.1-.3-.3-.6-.6-.7L1.8 0l-.6.5L7.7 7c.3-.2.6-.3 1-.3 1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2c0-.4.1-.7.3-1L.5 1.2l-.5.6L4.7 15c.1.3.4.5.7.6l7 2c.1 0 .2.1.3.1.3 0 .5-.1.7-.3l4-4c.2-.2.3-.5.3-.7zm1 1c-.3 0-.5.1-.7.3l-4 4c-.2.2-.3.4-.3.7 0 .5.4 1 1 1 .3 0 .5-.1.7-.3l4-4c.2-.2.3-.4.3-.7 0-.6-.5-1-1-1z\"],\n \"drawer-left\": [\"M9 0a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1h8zM8 2H2v16h6V2zm2 7h6.59L14.3 6.71A.965.965 0 0114 6a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10V9z\"],\n \"drawer-left-filled\": [\"M1 0h8a1 1 0 011 1v18a1 1 0 01-1 1H1a1 1 0 01-1-1V1a1 1 0 011-1zm9 9h6.59L14.3 6.71A.965.965 0 0114 6a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10V9z\"],\n \"drawer-right\": [\"M19 0a1 1 0 011 1v18a1 1 0 01-1 1h-8a1 1 0 01-1-1V1a1 1 0 011-1h8zm-1 2h-6v16h6V2zm-8 7H3.41L5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 11H10V9z\"],\n \"drawer-right-filled\": [\"M11 0h8a1 1 0 011 1v18a1 1 0 01-1 1h-8a1 1 0 01-1-1V1a1 1 0 011-1zm-1 9H3.41L5.7 6.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 11H10V9z\"],\n \"drive-time\": [\"M20.01 7.7c0-.63-.5-1.14-1.1-1.14h-1.32l-.95-2.57c-.24-.64-.95-1.31-1.59-1.5 0 0-1.65-.49-5.05-.49s-5.04.49-5.04.49c-.63.19-1.35.86-1.59 1.5l-.95 2.57H1.1C.5 6.56 0 7.07 0 7.7c0 .63.5 1.14 1.1 1.14h.47l-.34.91c-.24.64-.43 1.72-.43 2.4v5.39c0 .8.63 1.45 1.4 1.45.77 0 1.4-.65 1.4-1.45v-.83h12.8v.83c0 .8.63 1.45 1.4 1.45s1.4-.65 1.4-1.45v-5.39c0-.68-.19-1.77-.43-2.4l-.34-.91h.47c.61 0 1.11-.51 1.11-1.14zm-16.47.34l1.12-3.16c.08-.22.32-.39.54-.39h9.6c.22 0 .46.17.54.39l1.12 3.16c.08.21-.04.39-.26.39H3.8c-.22-.01-.34-.18-.26-.39zm.96 4.94c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.68 1.5 1.5c0 .83-.67 1.5-1.5 1.5zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"],\n \"duplicate\": [\"M15 4H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-1 14H2V6h12v12zm5-18H5c-.55 0-1 .45-1 1v2h2V2h12v12h-1v2h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"edit\": [\"M4.59 12.59l2.83 2.83 7.65-7.65-2.83-2.83-7.65 7.65zM2 18l4.41-1.59-2.81-2.79L2 18zM16 2c-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.83 1.65-1.65A2.006 2.006 0 0016 2z\"],\n \"eject\": [\"M4 12h12c.55 0 1-.45 1-1 0-.25-.1-.47-.25-.64l.01-.01-6-7-.01.01C10.57 3.14 10.3 3 10 3s-.57.14-.75.36l-.01-.01-6 7 .01.01c-.15.17-.25.39-.25.64 0 .55.45 1 1 1zm12 1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z\"],\n \"endorsed\": [\"M19.83 9.38L18.81 7.6V5.62c0-.45-.23-.85-.61-1.08l-1.71-1-1.02-1.76a1.25 1.25 0 00-1.08-.61h-2.03l-1.74-1c-.38-.23-.87-.23-1.25 0l-1.74 1H5.65c-.44 0-.85.23-1.08.61L3.58 3.5l-1.8 1.04c-.38.24-.62.64-.62 1.08v2.06L.17 9.4c-.11.19-.17.4-.17.61s.06.42.17.61l.99 1.72v2.06c0 .45.23.85.61 1.08l1.78 1.02.99 1.72c.23.38.63.61 1.08.61h1.99l1.74 1c.19.11.41.17.62.17.21 0 .42-.06.61-.17l1.74-1h2.03c.44 0 .85-.23 1.08-.61l1.02-1.76 1.71-1c.38-.23.61-.64.61-1.08v-1.97l1.02-1.78c.27-.38.27-.85.04-1.25zm-5.08-.71l-5.01 5.01c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.29l-3.01-3.01a1.003 1.003 0 011.42-1.42l2.3 2.3 4.31-4.3a1.003 1.003 0 011.71.71c0 .28-.12.53-.3.71z\"],\n \"envelope\": [\"M0 4.01v11.91l6.27-6.27L0 4.01zm18.91-1.03H1.09L10 10.97l8.91-7.99zm-5.18 6.66L20 15.92V4.01l-6.27 5.63zm-3.23 2.9c-.13.12-.31.19-.5.19s-.37-.07-.5-.19l-2.11-1.89-6.33 6.33h17.88l-6.33-6.33-2.11 1.89z\"],\n \"equals\": [\"M4 7h12a1 1 0 010 2H4a1 1 0 110-2zm0 4h12a1 1 0 010 2H4a1 1 0 010-2z\"],\n \"eraser\": [\"M18.71 8.43c.39-.4.39-1.05 0-1.45l-5.53-5.72a.967.967 0 00-1.4 0L1.29 12.1c-.39.4-.39 1.05 0 1.45l4.25 4.39 2.13 2.05h9.27c.02 0 .03.01.05.01.55 0 1-.45 1-1s-.45-1-1-1H9.46l.05-.05h.01l.81-.84 8.38-8.68zM7.52 17.94l-4.95-5.12 4.46-4.61 4.95 5.12-4.46 4.61z\"],\n \"error\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm1 16H9v-2h2v2zm0-3H9V4h2v9z\"],\n \"euro\": [\"M8.89 4.47c.56-.31 1.23-.47 2.03-.47.44 0 .85.07 1.25.22.4.14.76.35 1.07.6.17.14.33.3.47.47l2.32-2.32c-.16-.15-.3-.32-.47-.46-.62-.49-1.33-.87-2.12-1.13-.8-.25-1.64-.38-2.52-.38-1.24 0-2.35.22-3.33.66-.99.44-1.82 1.05-2.49 1.82-.68.78-1.2 1.68-1.56 2.72-.09.26-.13.54-.2.8H2c-.55 0-1 .45-1 1s.45 1 1 1h1.04c-.01.2-.04.38-.04.58 0 .15.03.28.03.42H2c-.55 0-1 .45-1 1s.45 1 1 1h1.31c.07.3.13.6.23.89.36 1.02.88 1.92 1.56 2.67.68.76 1.51 1.35 2.49 1.79.98.43 2.09.65 3.33.65.99 0 1.9-.15 2.73-.46.83-.3 1.55-.74 2.17-1.32.03-.03.05-.06.08-.09l-2.41-2.15c-.01.01-.02.02-.02.03-.61.67-1.46 1-2.54 1-.8 0-1.47-.16-2.03-.47-.56-.31-1.01-.72-1.35-1.24-.28-.38-.47-.83-.63-1.3H12c.55 0 1-.45 1-1s-.45-1-1-1H6.56c0-.14-.02-.28-.02-.42 0-.2.02-.39.03-.58H13c.55 0 1-.45 1-1s-.45-1-1-1H6.94c.15-.46.34-.9.59-1.28.35-.52.8-.94 1.36-1.25zM18 11.38v0z\"],\n \"exchange\": [\"M2.5 8a2.5 2.5 0 000 5 2.5 2.5 0 000-5zm10.35 3.15a.495.495 0 10-.7.7L13.3 13H5.5c-.28 0-.5.22-.5.5s.22.5.5.5h7.79l-1.15 1.15c-.08.09-.14.21-.14.35a.495.495 0 00.85.35l2-2c.09-.09.15-.21.15-.35s-.06-.26-.15-.35l-2-2zM17.5 8a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM7.15 9.85a.495.495 0 10.7-.7L6.71 8h7.79c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H6.71l1.15-1.15c.08-.09.14-.21.14-.35a.495.495 0 00-.85-.35l-2 2c-.09.09-.15.21-.15.35s.06.26.15.35l2 2z\"],\n \"exclude-row\": [\"M1 3h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zM0 13a1.003 1.003 0 001.71.71L4 11.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L5.41 10 7.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L4 8.59l-2.29-2.3A1.003 1.003 0 00.29 7.71L2.59 10 .3 12.29c-.19.18-.3.43-.3.71zm18-5h-7c-1.1 0-2 .9-2 2s.9 2 2 2h7c1.1 0 2-.9 2-2s-.9-2-2-2zm1 9H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"expand-all\": [\"M4 9c.28 0 .53-.11.71-.29L10 3.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-6-6C10.53 1.11 10.28 1 10 1s-.53.11-.71.29l-6 6A1.003 1.003 0 004 9zm12 2c-.28 0-.53.11-.71.29L10 16.59 4.71 11.3A.965.965 0 004 11a1.003 1.003 0 00-.71 1.71l6 6c.18.18.43.29.71.29s.53-.11.71-.29l6-6A1.003 1.003 0 0016 11z\"],\n \"export\": [\"M5 7c.28 0 .53-.11.71-.29L9 3.41V15c0 .55.45 1 1 1s1-.45 1-1V3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-5-5C10.53.11 10.28 0 10 0s-.53.11-.71.29l-5 5A1.003 1.003 0 005 7zm14 7c-.55 0-1 .45-1 1v3H2v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z\"],\n \"eye-off\": [\"M20 9.96v-.03-.01-.02-.02a.794.794 0 00-.21-.43c-.55-.69-1.19-1.3-1.85-1.87l-3.93 2.62a3.966 3.966 0 01-3.96 3.77c-.47 0-.91-.1-1.33-.24l-2.24 1.49c.52.21 1.05.39 1.6.51 1.21.27 2.43.28 3.64.05 1.11-.21 2.17-.64 3.17-1.18 1.56-.84 2.99-2 4.23-3.3.23-.24.46-.49.67-.75a.87.87 0 00.21-.43v-.02-.02-.01-.03V10v-.04zm-.46-5.14c.27-.18.46-.47.46-.82 0-.55-.45-1-1-1-.21 0-.39.08-.54.18l-.01-.02L15 5.46c-.95-.53-1.95-.96-3.01-1.2a9.158 9.158 0 00-3.65-.04c-1.11.21-2.17.64-3.17 1.18-1.56.84-2.99 2-4.23 3.3-.23.24-.46.48-.67.75-.27.34-.27.76 0 1.1.64.79 1.39 1.5 2.16 2.15.26.21.52.41.79.61L.44 15.16l.01.02A1 1 0 000 16c0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 18-12-.01-.02zm-8.67 3.4c-.25-.12-.53-.2-.83-.2-1.1 0-1.99.89-1.99 1.99 0 .03.02.06.02.09l-1.78 1.19c-.14-.4-.22-.83-.22-1.28 0-2.19 1.78-3.97 3.98-3.97 1.01 0 1.91.38 2.61 1l-1.79 1.18z\"],\n \"eye-on\": [\"M13.3 8.71c.18.18.43.29.71.29s.53-.11.71-.29l4.99-5a1.003 1.003 0 00-1.42-1.42L14 6.58l-2.29-2.29a.956.956 0 00-.7-.29 1.003 1.003 0 00-.71 1.71l3 3zM20 9.96v-.03-.01-.02-.02a.823.823 0 00-.21-.44c-.44-.55-.94-1.05-1.46-1.52l-2.2 2.2c-.55.54-1.3.88-2.12.88-.05 0-.09-.01-.14-.01a3.978 3.978 0 01-3.86 3.02 4.007 4.007 0 01-1.66-7.65A2.97 2.97 0 018.02 5c0-.28.05-.54.12-.8-1.05.22-2.07.64-3.02 1.15-1.57.85-3 2.02-4.24 3.33-.23.25-.46.5-.67.76-.28.35-.28.77 0 1.12.64.8 1.4 1.52 2.17 2.17 1.66 1.41 3.56 2.58 5.66 3.06 1.21.27 2.43.29 3.65.05 1.11-.21 2.18-.65 3.18-1.19 1.57-.85 3-2.02 4.24-3.33.23-.24.46-.49.67-.76.11-.12.18-.27.21-.44v-.02-.02-.01-.03V10c.01-.01.01-.03.01-.04zm-9.99 2.05c1.03 0 1.87-.79 1.98-1.8l-.09-.09-.01.01-2.1-2.11c-1 .11-1.77.95-1.77 1.98-.01 1.11.89 2.01 1.99 2.01z\"],\n \"eye-open\": [\"M10.01 7.984A2.008 2.008 0 008.012 9.99c0 1.103.9 2.006 1.998 2.006a2.008 2.008 0 001.998-2.006c0-1.103-.9-2.006-1.998-2.006zM20 9.96v-.03-.01-.02-.02a.827.827 0 00-.21-.442c-.64-.802-1.398-1.514-2.168-2.166-1.658-1.404-3.566-2.587-5.664-3.058a8.982 8.982 0 00-3.656-.05c-1.11.2-2.178.641-3.177 1.183-1.569.852-2.997 2.016-4.246 3.33-.23.25-.46.49-.67.761-.279.351-.279.773 0 1.124.64.802 1.4 1.514 2.169 2.166 1.658 1.404 3.566 2.577 5.664 3.058 1.209.271 2.438.281 3.656.05 1.11-.21 2.178-.651 3.177-1.193 1.569-.852 2.997-2.016 4.246-3.33.23-.24.46-.49.67-.751.11-.12.179-.271.209-.442v-.02-.02-.01-.03V10v-.04zM10.01 14A4.003 4.003 0 016.014 9.99a4.003 4.003 0 013.996-4.011 4.003 4.003 0 013.996 4.011 4.003 4.003 0 01-3.996 4.011z\"],\n \"fast-backward\": [\"M18 3c-.23 0-.42.09-.59.21l-.01-.01L11 8V4c0-.55-.45-1-1-1-.23 0-.42.09-.59.21L9.4 3.2l-8 6 .01.01C1.17 9.4 1 9.67 1 10s.17.6.41.79l-.01.01 8 6 .01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1v-4l6.4 4.8.01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"fast-forward\": [\"M19 10c0-.33-.17-.6-.41-.79l.01-.01-8-6-.01.01C10.42 3.09 10.23 3 10 3c-.55 0-1 .45-1 1v4L2.6 3.2l-.01.01C2.42 3.09 2.23 3 2 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01L9 12v4c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01 8-6-.01-.01c.24-.19.41-.46.41-.79z\"],\n \"feed\": [\"M2.5 15a2.5 2.5 0 000 5 2.5 2.5 0 000-5zm.5-5c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5 2.24 5 5 0 .55.45 1 1 1s1-.45 1-1c0-3.87-3.13-7-7-7zM3 0c-.55 0-1 .45-1 1s.45 1 1 1c8.28 0 15 6.72 15 15 0 .55.45 1 1 1s1-.45 1-1C20 7.61 12.39 0 3 0zm0 5c-.55 0-1 .45-1 1s.45 1 1 1c5.52 0 10 4.48 10 10 0 .55.45 1 1 1s1-.45 1-1C15 10.37 9.63 5 3 5z\"],\n \"feed-subscribed\": [\"M2.5 15a2.5 2.5 0 000 5 2.5 2.5 0 000-5zM3 2c1.76 0 3.44.31 5.01.87.03-.71.31-1.35.75-1.85C6.96.37 5.03 0 3 0c-.55 0-1 .45-1 1s.45 1 1 1zm10.32 4.67a.99.99 0 001.4 0l4.98-4.98c.19-.17.3-.42.3-.7 0-.55-.45-1-1-1a.99.99 0 00-.7.29l-4.27 4.27-2.28-2.28a.99.99 0 00-.7-.29c-.55 0-.99.45-.99 1 0 .28.11.52.29.7l2.97 2.99zM3 10c-.55 0-1 .45-1 1s.45 1 1 1c2.76 0 5 2.24 5 5 0 .55.45 1 1 1s1-.45 1-1c0-3.87-3.13-7-7-7zm13.94-2.69l-.82.82-.02-.02c-.2.2-.42.37-.67.51A14.8 14.8 0 0118 17c0 .55.45 1 1 1s1-.45 1-1c0-3.61-1.14-6.94-3.06-9.69zM3 5c-.55 0-1 .45-1 1s.45 1 1 1c5.52 0 10 4.48 10 10 0 .55.45 1 1 1s1-.45 1-1C15 10.37 9.63 5 3 5z\"],\n \"film\": [\"M19 2h-5v3H6V2H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h5v-3h8v3h5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM4 17H2v-2h2v2zm0-3H2v-2h2v2zm0-3H2V9h2v2zm0-3H2V6h2v2zm0-3H2V3h2v2zm10 8H6V7h8v6zm4 4h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm0-3h-2V6h2v2zm0-3h-2V3h2v2z\"],\n \"filter\": [\"M18 1H2a1.003 1.003 0 00-.71 1.71L7 8.41V18a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71V8.41l5.71-5.71c.18-.17.29-.42.29-.7 0-.55-.45-1-1-1z\"],\n \"filter-keep\": [\"M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm4 11c-.28 0-.53.11-.71.29L15 16.59l-1.29-1.29A.965.965 0 0013 15a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l4-4A1.003 1.003 0 0019 13z\"],\n \"filter-list\": [\"M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm-4 8c0 .55.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7c-.55 0-1 .45-1 1zm8 7h-7c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1zm0-4h-7c-.55 0-1 .45-1 1s.45 1 1 1h7c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"filter-open\": [\"M15 2c0 .28-.11.53-.29.7L10 7.41V13c0 .28-.11.53-.29.71l-3 3A1.003 1.003 0 015 16V7.41L.29 2.71A1.003 1.003 0 011 1h13c.55 0 1 .45 1 1zm4.707 11.293a1 1 0 010 1.414l-4 4c-.63.63-1.707.184-1.707-.707v-8c0-.89 1.077-1.337 1.707-.707l4 4z\"],\n \"filter-remove\": [\"M15 2c0-.55-.45-1-1-1H1a1.003 1.003 0 00-.71 1.71L5 7.41V16a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71V7.41l4.71-4.71c.18-.17.29-.42.29-.7zm2.91 13.5l1.79-1.79c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-1.79 1.79-1.79-1.79a1.003 1.003 0 00-1.42 1.42l1.79 1.79-1.79 1.79a1.003 1.003 0 001.42 1.42l1.79-1.79 1.79 1.79a1.003 1.003 0 001.42-1.42l-1.8-1.79z\"],\n \"flag\": [\"M3 3c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1zm0-3c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm2 4.08v8.28c3.01-2.41 8.67 2.64 13 0V4.08C13.61 7.14 8.01 1 5 4.08z\"],\n \"flame\": [\"M11.622 0c0 1.71.49 3.077 1.472 4.103C16.364 6.496 18 9.23 18 12.308c0 3.418-1.962 5.983-5.887 7.692 2.887-3 2.453-4.23-.49-8C8.5 13.5 9 14.5 9.5 16.5c-1.048 0-2 0-2.5-.5 0 .684 1.197 2.5 1.952 4-3.924-1.026-8.123-7.18-6.651-7.692.981-.342 2.126-.171 3.434.513C4.1 6.667 6.062 2.393 11.622 0z\"],\n \"flash\": [\"M4.96 6.37a1.003 1.003 0 001.42-1.42l-2-2a1.07 1.07 0 00-.71-.28 1.003 1.003 0 00-.71 1.71l2 1.99zm9.37.3c.28 0 .53-.11.71-.29l2-2a1.003 1.003 0 00-1.42-1.42l-2 2a1.003 1.003 0 00.71 1.71zM10 5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S9 .45 9 1v3c0 .55.45 1 1 1zm-5 5c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1zm14-1h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm-9-3c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm5.04 1.63a1.003 1.003 0 00-1.42 1.42l2 2a1.003 1.003 0 001.42-1.42l-2-2zM10 15c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1s1-.45 1-1v-3c0-.55-.45-1-1-1zm-4.33-1.67c-.28 0-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l2-2a1.003 1.003 0 00-.71-1.71z\"],\n \"floppy-disk\": [\"M14 1h-3v5h3V1zm5.71 2.29l-3-3A.997.997 0 0016 0h-1v7H5V0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V4c0-.28-.11-.53-.29-.71zM17 19H3v-8c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v8z\"],\n \"flow-branch\": [\"M14.425 7.953a3.98 3.98 0 01.562 2.045 3.98 3.98 0 01-.583 2.08L18 15.671V12.98c0-.248.097-.496.29-.689.379-.379 1.047-.38 1.426 0a.94.94 0 01.283.696l-.001 5.049a.957.957 0 01-.276.69.955.955 0 01-.69.273h-5.059a.971.971 0 01-.689-.289 1.026 1.026 0 010-1.417.972.972 0 01.69-.29h2.702l-3.634-3.573a3.998 3.998 0 01-5.924-2.431H1a1 1 0 010-2h6.12a3.998 3.998 0 015.96-2.409L16.665 3l-2.694-.001a.972.972 0 01-.689-.29 1.035 1.035 0 010-1.425.94.94 0 01.696-.283l5.05.001c.248 0 .497.083.69.276a.954.954 0 01.272.69l.001 5.052a.971.971 0 01-.29.689 1.028 1.028 0 01-1.419 0 .972.972 0 01-.29-.69V4.323l-3.567 3.63z\"],\n \"flow-end\": [\"M12 9.919a3.998 3.998 0 014-3.92c2.21 0 4 1.79 4 3.997a3.998 3.998 0 01-4 3.996 3.998 3.998 0 01-4-3.916.967.967 0 01-.28.612L7.685 14.71a.958.958 0 01-.686.285c-.536 0-.994-.461-.994-.997 0-.273.107-.528.283-.704l2.379-2.302H.98c-.537 0-.976-.46-.976-.996s.44-.992.976-.992h7.676L6.287 6.687a.957.957 0 01-.283-.686c0-.536.458-.996.994-.996.274 0 .51.1.686.285l4.027 4.024c.159.158.27.365.29.605z\"],\n \"flow-linear\": [\"M5.125 10.997H.976C.439 10.997 0 10.537 0 10c0-.536.44-.993.976-.993h4.148a4.002 4.002 0 017.752 0h3.776L14.293 6.69a.962.962 0 01-.285-.687c0-.537.46-1.001.996-1.001a.96.96 0 01.698.3l4.005 4.015c.176.176.293.41.293.683a.972.972 0 01-.283.693L15.702 14.7a.997.997 0 01-.698.297c-.537 0-.996-.453-.996-.99 0-.273.107-.517.283-.692l2.371-2.318h-3.787a4.002 4.002 0 01-7.75 0z\"],\n \"flow-review\": [\"M6.13 9.004A4.005 4.005 0 0110.012 6c1.87 0 3.44 1.278 3.881 3.005h2.768l-2.354-2.317a.97.97 0 01-.283-.691c0-.536.462-.995 1-.995.273 0 .517.107.693.283l4 4.041a.97.97 0 01.284.692.956.956 0 01-.293.682l-3.991 3.997a.944.944 0 01-.694.292c-.537 0-1-.46-1-.997a.97.97 0 01.284-.692l2.345-2.29h-2.765a4.005 4.005 0 01-3.875 2.981 4.005 4.005 0 01-3.874-2.981H3.349l2.376 2.308a.97.97 0 01.283.691 1 1 0 01-.994.983.989.989 0 01-.713-.291L.293 10.699A.956.956 0 010 10.017a.97.97 0 01.283-.692l4.03-4.037a.996.996 0 01.701-.283c.537 0 .994.464.994 1a.97.97 0 01-.283.691L3.34 9.004h2.79z\"],\n \"flow-review-branch\": [\"M13.04 13.424c-.6.36-1.302.568-2.052.568a4 4 0 01-3.868-2.999H3.342l2.372 2.31c.176.176.283.42.283.694 0 .537-.452.998-.988.998a.935.935 0 01-.691-.289L.292 10.683A.96.96 0 010 9.999c0-.274.107-.518.283-.694l4.035-4.04a.973.973 0 01.691-.288c.536 0 .988.47.988 1.007a.975.975 0 01-.283.694L3.332 8.984h3.786a4 4 0 013.87-3.006c.771 0 1.492.22 2.102.599l3.565-3.57-2.538-.003a.974.974 0 01-.69-.29c-.38-.38-.38-1.052-.002-1.431A.94.94 0 0114.122 1l4.896.005a.96.96 0 01.69.277c.193.193.27.442.27.69l.005 4.9a.971.971 0 01-.289.69 1.023 1.023 0 01-1.416 0 .975.975 0 01-.29-.691l-.003-2.54-3.554 3.62c.351.596.553 1.291.553 2.034 0 .763-.213 1.477-.583 2.084l3.595 3.595.003-2.54c0-.249.097-.497.29-.69.38-.38 1.05-.381 1.429-.002a.94.94 0 01.282.697l-.005 4.9a.927.927 0 01-.277.675.974.974 0 01-.69.291L13.974 19a.97.97 0 01-.69-.29 1.03 1.03 0 01.002-1.42.974.974 0 01.69-.29l2.696-.003-3.632-3.573z\"],\n \"flows\": [\"M17.5 7.93a2.5 2.5 0 00-2.45 2h-2.3l-4.01-4-.75.75 3.26 3.25h-6.3a2.5 2.5 0 100 1h6.3l-3.26 3.25.75.75 4.01-4h2.3a2.5 2.5 0 102.45-3z\"],\n \"folder-close\": [\"M0 17c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V7H0v10zM19 4H9.41l-1.7-1.71A.997.997 0 007 2H1c-.55 0-1 .45-1 1v3h20V5c0-.55-.45-1-1-1z\"],\n \"folder-new\": [\"M12.994 7c0 1.655 1.344 3 2.998 3a3.002 3.002 0 002.999-3H20v10c0 .55-.45 1-1 1H1.01c-.55 0-1-.45-1-1V7h12.984zM10.76 6H0V3c0-.55.45-1 1-1h3.998c.28 0 .53.11.71.29L7.415 4h2.579c0 .768.29 1.469.765 2zm8.23-3c.55 0 1 .45 1 1s-.45 1-1 1h-1.998v2c0 .55-.45 1-1 1s-1-.45-1-1V5h-1.998c-.55 0-1-.45-1-1s.45-1 1-1h1.999V1c0-.55.45-1 .999-1 .55 0 1 .45 1 1v2h1.999z\"],\n \"folder-open\": [\"M20 9c0-.55-.45-1-1-1H5c-.43 0-.79.27-.93.65h-.01l-3 8h.01c-.04.11-.07.23-.07.35 0 .55.45 1 1 1h14c.43 0 .79-.27.93-.65h.01l3-8h-.01c.04-.11.07-.23.07-.35zM3.07 7.63C3.22 7.26 3.58 7 4 7h14V5c0-.55-.45-1-1-1H8.41l-1.7-1.71A.997.997 0 006 2H1c-.55 0-1 .45-1 1v12.31l3.07-7.68z\"],\n \"folder-shared\": [\"M11 4H9.41l-1.7-1.71A.997.997 0 007 2H1c-.55 0-1 .45-1 1v3h11.78C11.3 5.47 11 4.77 11 4zm8-1h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L12.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1zm-2.46 7.7l-1.42 1.42a2.996 2.996 0 11-4.24-4.24l.88-.88H0v10c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-5.18c-.31.11-.65.18-1 .18-1.02 0-1.92-.52-2.46-1.3z\"],\n \"folder-shared-open\": [\"M3.07 7.63C3.22 7.26 3.58 7 4 7h7.76l.54-.54A2.97 2.97 0 0111 4H8.41l-1.7-1.71A.997.997 0 006 2H1c-.55 0-1 .45-1 1v12.31l3.07-7.68zm13.47 3.07l-1.42 1.42A2.996 2.996 0 0110 10c0-.77.3-1.47.78-2H5c-.43 0-.79.27-.93.65h-.01l-3 8h.01c-.04.11-.07.23-.07.35 0 .55.45 1 1 1h14c.43 0 .79-.27.93-.65h.01l2.01-5.36c-1-.01-1.88-.52-2.41-1.29zM19 3h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L12.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"follower\": [\"M11.54 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.69 3.69 0 00-1.29-1.86C9.69 4.25 8.8 4 8.01 4c-.8 0-1.69.25-2.32.73-.61.47-1.06 1.13-1.28 1.86-.05.17-.09.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.44.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59-1.48.65-3.71 1.35-4.16 2.4C-.16 19.38.02 20 .02 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.68-1.75-4.16-2.41zm8.15-12.63l-3-3a.956.956 0 00-.7-.29 1.003 1.003 0 00-.71 1.71L16.58 3H13c-.55 0-1 .45-1 1s.45 1 1 1h3.58l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.3-.71z\"],\n \"following\": [\"M11.55 15.92c-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.69 3.69 0 00-1.29-1.86C9.7 4.25 8.81 4 8.02 4c-.79 0-1.68.25-2.31.73-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.44.32-.48.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59C3 16.56.77 17.26.32 18.31-.15 19.38.04 20 .04 20h15.95s.18-.62-.27-1.67c-.46-1.06-2.69-1.75-4.17-2.41zM19 3h-3.58l1.29-1.29A1.003 1.003 0 0015.29.29l-3 3c-.17.18-.28.43-.28.71 0 .28.11.53.29.71l3 3c.18.18.43.29.7.29a1.003 1.003 0 00.71-1.71L15.42 5H19c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"font\": [\"M17.93 18.64l-7-18C10.78.27 10.42 0 10 0s-.78.27-.93.64l-7 18c-.04.11-.07.23-.07.36 0 .55.45 1 1 1 .42 0 .78-.27.93-.64L6.41 13h7.19l2.47 6.36c.15.37.51.64.93.64.55 0 1-.45 1-1 0-.13-.03-.25-.07-.36zM7.18 11L10 3.76 12.82 11H7.18z\"],\n \"fork\": [\"M16.71 11.29a1.003 1.003 0 00-1.42 1.42l1.3 1.29h-2.17l-8-8h10.17L15.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 4H1c-.55 0-1 .45-1 1s.45 1 1 1h2.59l9.71 9.71c.17.18.42.29.7.29h2.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3z\"],\n \"form\": [\"M2 13v4h4v-4H2zm-1-2h6c.55 0 1 .45 1 1v6c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6c0-.55.45-1 1-1zm11-7h7c.55 0 1 .45 1 1s-.45 1-1 1h-7c-.55 0-1-.45-1-1s.45-1 1-1zM8 1a1.003 1.003 0 01.71 1.71l-5 6C3.53 8.89 3.28 9 3 9s-.53-.11-.71-.29l-2-2a1.003 1.003 0 011.42-1.42L3 6.59l4.29-5.3C7.47 1.11 7.72 1 8 1zm4 13h7c.55 0 1 .45 1 1s-.45 1-1 1h-7c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"full-circle\": [\"M9.96 0a10 10 0 100 20 10 10 0 100-20z\"],\n \"full-stacked-chart\": [\"M15 16h2c.55 0 1-.45 1-1v-5h-4v5c0 .55.45 1 1 1zM12 2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v4h4V2zm6 4h-4v3h4V6zm0-4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h4V2zm-6 5H8v5h4V7zm-9 9h2c.55 0 1-.45 1-1v-3H2v3c0 .55.45 1 1 1zm6 0h2c.55 0 1-.45 1-1v-2H8v2c0 .55.45 1 1 1zm10 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM6 2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v3h4V2zm0 4H2v5h4V6z\"],\n \"fullscreen\": [\"M3.41 2H6c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1s1-.45 1-1V3.41L7.29 8.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L3.41 2zM8 11c-.28 0-.53.11-.71.29L2 16.59V14c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1H3.41l5.29-5.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1zM19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm0 13c-.55 0-1 .45-1 1v2.59l-5.29-5.29A.965.965 0 0012 11a1.003 1.003 0 00-.71 1.71l5.3 5.29H14c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1z\"],\n \"function\": [\"M10.14 5.82H8.73c.4-1.66.94-2.87 1.6-3.64.4-.48.8-.72 1.18-.72.08 0 .14.02.19.07.05.05.07.1.07.18 0 .07-.05.19-.16.37s-.16.36-.16.52c0 .23.08.43.25.59a.9.9 0 00.64.25c.28 0 .51-.1.7-.3.19-.2.28-.47.28-.81 0-.39-.14-.7-.42-.94-.28-.24-.74-.36-1.36-.36-.97 0-1.86.29-2.65.87-.79.56-1.54 1.52-2.26 2.85-.24.46-.48.75-.7.88-.22.13-.57.19-1.06.19l-.32 1.15H5.9l-1.99 7.85c-.33 1.29-.56 2.09-.67 2.39-.17.44-.43.81-.77 1.12a.74.74 0 01-.5.19c-.05 0-.1-.02-.14-.05l-.04-.07c0-.03.05-.1.15-.2.1-.1.15-.26.15-.47 0-.23-.08-.42-.23-.57-.16-.15-.38-.23-.67-.23-.35 0-.63.1-.85.29-.21.2-.32.43-.32.7 0 .29.13.54.39.75.25.22.65.33 1.2.33.88 0 1.66-.23 2.33-.69.68-.46 1.27-1.17 1.78-2.14.51-.96 1.03-2.52 1.56-4.66l1.14-4.54H9.8l.34-1.15zm6.8 1.95c.25-.2.51-.29.78-.29.1 0 .29.04.56.11.27.08.51.11.72.11.29 0 .52-.1.72-.3.18-.19.28-.45.28-.77 0-.33-.1-.6-.29-.8-.19-.2-.47-.29-.82-.29-.32 0-.62.08-.9.23-.28.15-.64.49-1.08 1-.33.38-.81 1.05-1.44 2a9.712 9.712 0 00-1.31-3.22l-3.4.59-.07.37c.25-.05.47-.08.64-.08.34 0 .62.15.84.44.35.46.84 1.85 1.46 4.19-.49.66-.82 1.09-1 1.3-.3.33-.55.54-.74.64-.15.08-.32.12-.51.12-.14 0-.38-.08-.7-.24-.22-.1-.42-.16-.59-.16-.33 0-.6.11-.82.32-.21.22-.32.49-.32.83 0 .31.1.57.3.77.2.2.47.29.8.29.32 0 .63-.07.92-.21.29-.14.64-.43 1.08-.88.43-.45 1.03-1.16 1.79-2.14.29.93.55 1.61.76 2.03.21.42.46.73.74.91.28.19.62.28 1.04.28.4 0 .81-.15 1.23-.44.55-.38 1.1-1.04 1.68-1.97l-.35-.21c-.39.55-.68.89-.87 1.03-.12.09-.27.13-.44.13-.2 0-.4-.13-.59-.38-.33-.43-.77-1.63-1.33-3.6.47-.86.89-1.44 1.23-1.71z\"],\n \"gantt-chart\": [\"M4 7h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm3 2v1c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1zm12 3h-6c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0 4H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"geofence\": [\"M8 11l.075.003.126.017.111.03.111.044.098.052.096.067.09.08c.036.035.068.073.097.112l.071.11.054.114.035.105.03.148L9 12V18a1 1 0 01-1.993.117L7 18v-3.586l-5.293 5.293a1 1 0 01-1.497-1.32l.083-.094L5.584 13h-3.58a1 1 0 01-.117-1.993L2.004 11H8zm3.018-11a1.003 1.003 0 01.39.087l.12.063.031.02.1.078 8.027 7.026.062.064.068.086.044.068.064.128.04.117.024.113.011.108v.1l-.007.073-.019.103-.037.121-.039.09-.05.087-4.996 7.994c-.06.097-.137.183-.226.254l-.093.067-.095.053-.087.037-.125.037a1.018 1.018 0 01-.218.026H11v-5a3 3 0 00-2.824-2.995L8 9H3V6a1 1 0 01.321-.734l.098-.08 7-5a1.01 1.01 0 01.45-.178L11.018 0z\"],\n \"geolocation\": [\"M0 8.33l9.17 2.5 2.5 9.17L20 0z\"],\n \"geosearch\": [\"M8 18.88c-3.79 0-6.88-3.09-6.88-6.88 0-.61.08-1.22.23-1.79.03.01.06-.01.1-.01h.09v.55c0 .23.21.42.44.42.04 0 .09-.01.12-.02l.9.88c.09.09.23.09.32 0s.09-.23 0-.32l-.86-.9c0-.02.05-.04.05-.07v-.13c0-.18.1-.25.29-.41h.53c.1 0 .19-.01.27-.05.01-.01.02 0 .03-.01.02-.01.03-.02.05-.04.01-.01.02-.01.02-.02l.02-.02 1.13-1.13c-.16-.32-.3-.65-.42-.99h-.64v-.53c0-.01.06.06.06-.1h.38c-.04-.16-.08-.32-.1-.48h-.71c.2-.16.42-.31.64-.45C4.02 6.09 4 5.8 4 5.5c0-.14.01-.28.02-.43C1.62 6.46 0 9.04 0 12c0 4.41 3.59 8 8 8 3.87 0 7.09-2.77 7.82-6.44l-.97-1.1c-.26 3.57-3.23 6.42-6.85 6.42zm-2.12-3.67v-.35h.15c.29 0 .49-.23.49-.53v-.68c0-.01.01-.01 0-.02L4.71 11.8h-.77c-.29 0-.47.24-.47.53v2c0 .29.18.53.47.53h.33v2.02c0 .28.28.51.56.51s.56-.23.56-.51v-1.22h-.01c.29 0 .5-.16.5-.45zm13.83-2.92l-3.68-3.68c.14-.21.27-.42.38-.65.02-.04.04-.07.05-.11.11-.22.2-.45.28-.69v-.01c.07-.24.13-.48.17-.73l.03-.17c.04-.24.06-.49.06-.75C17 2.46 14.54 0 11.5 0S6 2.46 6 5.5 8.46 11 11.5 11c.26 0 .51-.02.76-.06l.17-.03c.25-.04.49-.1.73-.17h.01c.24-.08.47-.17.69-.28.04-.02.07-.04.11-.05.23-.11.44-.24.65-.38l3.68 3.68c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71zM11.5 9.5c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm1.93 5.33v-.65c0-.11-.13-.21-.24-.21-.11 0-.24.09-.24.21v.65c0 .11.13.21.24.21.11 0 .24-.1.24-.21zm-2.41.67h.83c.29 0 .46-.21.46-.5v-1.86l.23-.22c-.34.05-.69.08-1.04.08-.36 0-.7-.03-1.05-.08.03.05.06.1.08.16V15c.01.29.2.5.49.5z\"],\n \"git-branch\": [\"M15 2c-1.66 0-3 1.34-3 3 0 1.3.84 2.4 2 2.82V9c0 1.1-.9 2-2 2H8c-.73 0-1.41.21-2 .55V5.82C7.16 5.4 8 4.3 8 3c0-1.66-1.34-3-3-3S2 1.34 2 3c0 1.3.84 2.4 2 2.82v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.25-.77-2.3-1.85-2.75C6.45 13.52 7.16 13 8 13h4c2.21 0 4-1.79 4-4V7.82C17.16 7.4 18 6.3 18 5c0-1.66-1.34-3-3-3zM5 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 16c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM15 6c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-commit\": [\"M19 9h-4.1a5 5 0 00-9.8 0H1c-.55 0-1 .45-1 1s.45 1 1 1h4.1a5 5 0 009.8 0H19c.55 0 1-.45 1-1s-.45-1-1-1zm-9 4c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"],\n \"git-merge\": [\"M15 8c-1.3 0-2.4.84-2.82 2H11c-2.49 0-4.54-1.83-4.92-4.21A2.995 2.995 0 005 0C3.34 0 2 1.34 2 3c0 1.3.84 2.4 2 2.81v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V9.86C7.27 11.17 9.03 12 11 12h1.18A2.996 2.996 0 0018 11c0-1.66-1.34-3-3-3zM5 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM5 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm10 8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-new-branch\": [\"M17 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1V5h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3 4.86V9c0 1.1-.9 2-2 2H8c-.73 0-1.41.21-2 .55V5.82C7.16 5.4 8 4.3 8 3c0-1.66-1.34-3-3-3S2 1.34 2 3c0 1.3.84 2.4 2 2.82v8.37C2.84 14.6 2 15.7 2 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.25-.77-2.3-1.85-2.75C6.45 13.52 7.16 13 8 13h4c2.21 0 4-1.79 4-4V7.86c-.32.08-.65.14-1 .14s-.68-.06-1-.14zM5 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 16c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-pull\": [\"M17 14.18V7c0-2.21-1.79-4-4-4h-2.59l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C7.11 3.47 7 3.72 7 4c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L10.41 5H13c1.1 0 2 .9 2 2v7.18A2.996 2.996 0 0016 20c1.66 0 3-1.34 3-3 0-1.3-.84-2.4-2-2.82zM16 18c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 1C2.34 1 1 2.34 1 4c0 1.3.84 2.4 2 2.82v7.37C1.84 14.6 1 15.7 1 17c0 1.66 1.34 3 3 3s3-1.34 3-3c0-1.3-.84-2.4-2-2.82V6.82C6.16 6.4 7 5.3 7 4c0-1.66-1.34-3-3-3zm0 17c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM4 5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"git-push\": [\"M15 11c0-.28-.11-.53-.29-.71l-3-3C11.53 7.11 11.28 7 11 7s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42l1.29-1.3V19c0 .55.45 1 1 1s1-.45 1-1v-8.59l1.29 1.29c.18.19.43.3.71.3.55 0 1-.45 1-1zm4-11H1C.45 0 0 .45 0 1v16c0 .55.45 1 1 1h7v-2H2v-2h6v-1H4V2h14v11h-4v1h4v2h-4v2h5c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 8h2V6H5v2zm2-5H5v2h2V3z\"],\n \"git-repo\": [\"M7 3H5v2h2V3zm0 6H5v2h2V9zm0-3H5v2h2V6zm12-6H1C.45 0 0 .45 0 1v16c0 .55.45 1 1 1h4v2l2-1 2 1v-2h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 16H9v-1H5v1H2v-2h16v2zm0-3H4V2h14v11z\"],\n \"glass\": [\"M17 6V0H3v6c0 3.53 2.61 6.43 6 6.92V18H6c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1h-3v-5.08c3.39-.49 6-3.39 6-6.92z\"],\n \"globe\": [\"M7.53 4.37c.1-.1.1-.26 0-.35l-.68-.68c-.1-.1-.25-.1-.35 0-.1.1-.1.26 0 .35l.68.68c.1.1.25.1.35 0zm3.17.06h.3c.09 0 .16-.01.16-.1 0-.09-.07-.1-.16-.1h-.3c-.09 0-.16.01-.16.1s.07.1.16.1zm.98 1.15c.09 0 .19-.08.19-.17v-.42c0-.09-.1-.17-.19-.17s-.19.08-.19.17v.42c0 .09.1.17.19.17zm-6.5 4.19c-.35 0-.56.28-.56.63v2.37c0 .35.21.62.56.62h.39v2.4c0 .34.33.61.67.61s.67-.27.67-.61v-1.44h-.02c.35 0 .6-.19.6-.54v-.41h.18c.35 0 .58-.28.58-.62v-.81c0-.01.01-.01 0-.02L6.1 9.77h-.92zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8 0-.74.11-1.46.3-2.14h.03v.65c0 .28.25.5.53.5.05 0 .1-.01.15-.02l1.05 1.05c.1.11.28.11.38 0 .1-.1.11-.27 0-.38L3.42 8.59c0-.03.05-.05.05-.08v-.16c0-.22.12-.3.34-.49h.63c.12 0 .23-.01.32-.07.01-.01.02 0 .03-.01.02-.02.04-.03.06-.04.01-.01.02-.01.03-.02l.02-.02 2.15-2.15c.24-.24.24-.63 0-.86-.23-.24-.62-.19-.86.04l-.41.46H5v-.64c0-.01.07.07.07-.12h.87c.17 0 .3-.12.3-.29 0-.17-.13-.29-.3-.29H4.88C6.27 2.7 8.05 2 10 2s3.73.7 5.12 1.86h-1.58l-.01-.04c-.06 0-.12 0-.17.04l-.71.7c-.09.09-.09.23 0 .31.09.09.23.09.32 0l.56-.6.01-.03h.34c0 .19-.1.13-.1.16v.1c0 .29-.2.5-.49.5h-.51c-.25 0-.52.28-.52.54v.23h-.12c-.16 0-.27.08-.27.24v.33h-.32c-.23 0-.41.15-.41.38 0 .22.18.35.41.35.1 0 .19.04.26-.16l.06.01.66-.59h.23l.53.5c.04.04.11.03.16-.01.04-.04.04-.16 0-.2L13 6.15h.32l.12.16c.25.25.65.23.89-.02l.12-.14H15c.02 0 .11.07.11.07v.33s-.06-.01-.07-.01h-.49c-.16 0-.28.13-.28.29 0 .16.13.29.28.29h.49c.01 0 .07-.01.07-.01v.2c-.19.28-.33.57-.62.57h-1.28s0-.01-.01-.01l-.58-.58a.622.622 0 00-.89 0l-.58.58s0 .01-.01.01h-.34c-.35 0-.67.28-.67.63v1.25c0 .35.32.61.67.61h1.22c.46.19.78.48.97.94v2.28c0 .35.23.6.58.6h.98c.35 0 .54-.25.54-.6v-2.2l1.21-1.17.04-.02.02-.01h.04c.1-.11.2-.26.2-.42V8.49c0-.25-.22-.44-.42-.63h.58c.02.38.29.57.63.57h.43c.13.51.18 1.03.18 1.57 0 4.42-3.58 8-8 8zm6.16-5.65c-.14 0-.29.11-.29.25v.77c0 .14.15.25.29.25.14 0 .29-.11.29-.25v-.77c0-.14-.15-.25-.29-.25zM10.5 3.48c0-.34-.28-.57-.62-.57h-.74c-.34 0-.57.25-.57.59 0 .05-.13.06.06.1v.64c0 .2.09.36.29.36.2 0 .29-.16.29-.36v-.19h.68c.33 0 .61-.23.61-.57z\"],\n \"globe-network\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm7.39 7h-3.63c-.31-1.99-.92-3.66-1.72-4.73 2.45.65 4.41 2.42 5.35 4.73zM13 10c0 .69-.04 1.36-.11 2H7.11a18.419 18.419 0 010-4h5.77c.08.64.12 1.31.12 2zm-3-8c1.07 0 2.25 2.05 2.75 5h-5.5c.5-2.95 1.68-5 2.75-5zm-2.04.27C7.16 3.34 6.55 5.01 6.24 7H2.61c.94-2.31 2.9-4.08 5.35-4.73zM2 10c0-.69.11-1.36.28-2h3.83a18.419 18.419 0 000 4H2.28c-.17-.64-.28-1.31-.28-2zm.61 3h3.63c.31 1.99.92 3.66 1.72 4.73A7.996 7.996 0 012.61 13zM10 18c-1.07 0-2.25-2.05-2.75-5h5.5c-.5 2.95-1.68 5-2.75 5zm2.04-.27c.79-1.07 1.4-2.74 1.72-4.73h3.63a7.996 7.996 0 01-5.35 4.73zM13.89 12a18.419 18.419 0 000-4h3.83c.17.64.28 1.31.28 2s-.11 1.36-.28 2h-3.83z\"],\n \"graph\": [\"M17.5 4A2.5 2.5 0 0015 6.5c0 .06.01.12.02.18l-1.9.84C12.38 6.6 11.27 6 10 6c-.83 0-1.59.25-2.23.68L4.91 4.14c.05-.21.09-.42.09-.64a2.5 2.5 0 00-5 0A2.5 2.5 0 002.5 6c.42 0 .81-.11 1.16-.3l2.79 2.48C6.17 8.73 6 9.34 6 10c0 1.41.73 2.64 1.83 3.35l-.56 1.67A2.498 2.498 0 005 17.5a2.5 2.5 0 005 0c0-.74-.32-1.39-.83-1.85l.56-1.68c.09.01.18.03.27.03 2.21 0 4-1.79 4-4 0-.22-.03-.44-.07-.65l2.02-.9c.43.34.96.55 1.55.55a2.5 2.5 0 000-5z\"],\n \"graph-remove\": [\"M17.41 4l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L16 2.59 13.71.3A.965.965 0 0013 0a1.003 1.003 0 00-.71 1.71L14.59 4 12.3 6.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L16 5.41l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L17.41 4zM19 10c-.83 0-1.55-.36-2.09-.91l-.03.03-.88-.88-.88.88a2.996 2.996 0 11-4.24-4.24l.88-.88-.88-.88.03-.03C10.36 2.55 10 1.83 10 1c0-.35.07-.68.18-.99-.06 0-.12-.01-.18-.01C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-.06-.01-.12-.01-.18-.31.11-.64.18-.99.18z\"],\n \"greater-than\": [\"M12.838 10l-9.154 3.051a1 1 0 00.632 1.898l12-4c.912-.304.912-1.594 0-1.898l-12-4a1 1 0 00-.632 1.898L12.838 10z\"],\n \"greater-than-or-equal-to\": [\"M3.684 11.051a1 1 0 00.632 1.898l12-4c.912-.304.912-1.594 0-1.898l-12-4a1 1 0 00-.632 1.898L12.838 8l-9.154 3.051zM4 15h12a1 1 0 110 2H4a1 1 0 010-2z\"],\n \"grid\": [\"M19 11c.55 0 1-.45 1-1s-.45-1-1-1h-2V5h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-4V1c0-.55-.45-1-1-1S9 .45 9 1v2H5V1c0-.55-.45-1-1-1S3 .45 3 1v2H1c-.55 0-1 .45-1 1s.45 1 1 1h2v4H1c-.55 0-1 .45-1 1s.45 1 1 1h2v4H1c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h4v2c0 .55.45 1 1 1s1-.45 1-1v-2h4v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2v-4h2zM9 15H5v-4h4v4zm0-6H5V5h4v4zm6 6h-4v-4h4v4zm0-6h-4V5h4v4z\"],\n \"grid-view\": [\"M0 19c0 .55.45 1 1 1h8v-9H0v8zM0 1v8h9V0H1C.45 0 0 .45 0 1zm19-1h-8v9h9V1c0-.55-.45-1-1-1zm-8 20h8c.55 0 1-.45 1-1v-8h-9v9z\"],\n \"group-objects\": [\"M6 7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm8-3H6c-3.31 0-6 2.69-6 6s2.69 6 6 6h8c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 11H6c-2.76 0-5-2.24-5-5s2.24-5 5-5h8c2.76 0 5 2.24 5 5s-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"],\n \"grouped-bar-chart\": [\"M12 16h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1zm7 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-3-1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1h-1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1zm-9 0h1c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1zm-4 0h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1z\"],\n \"hand\": [\"M17 5c-.42 0-.79.27-.93.64L14.38 10h-.77l1.34-6.67c.03-.1.05-.21.05-.33a.998.998 0 00-1.98-.19h-.01L11.57 10H11V1c0-.55-.45-1-1-1S9 .45 9 1v9h-.2L6.97 2.76a.997.997 0 00-1.73-.41l-.03.03c-.01.02-.02.03-.03.04-.01.02-.01.03-.02.04v.01c-.01.01-.02.02-.02.03v.01c-.02.01-.02.02-.03.03 0 0 0 .01-.01.01 0 .01 0 .02-.01.03 0 0 0 .01-.01.01 0 .01-.01.02-.01.03 0 0 0 .01-.01.01 0 .01-.01.02-.01.03 0 .01 0 .01-.01.02 0 .01-.01.02-.01.03 0 .01 0 .01-.01.02 0 .01-.01.02-.01.03v.02c0 .01 0 .02-.01.03V3c0 .05 0 .09.01.14l1.45 10.25L6 12.7v.01L3.84 9.45h-.01A.98.98 0 003 9c-.55 0-1 .45-1 1 0 .2.06.39.17.55L6 18.44C7.06 19.4 8.46 20 10 20c3.31 0 6-2.69 6-6v-1.84l.01-.03v-.06l1.94-5.75A1.003 1.003 0 0017 5z\"],\n \"hand-down\": [\"M17.68 9.84C15.91 9 14.27 6.49 13.45 4.9 12.41 2.43 12.21 0 7.87 0 5.49 0 3.95.76 3.05 2.65 2.31 4.2 2 5.48 2 9.79v.99c0 .82.69 1.48 1.54 1.48.38 0 .73-.14 1-.36.19.6.78 1.05 1.47 1.05.47 0 .89-.2 1.17-.52.26.47.77.79 1.36.79.65 0 1.2-.39 1.43-.93l.03.77v5.44c0 .48.23.91.59 1.18.21.19.5.32.85.32h.06c.83 0 1.5-.67 1.5-1.5v-8.24l.01-.67c.85.98 1.92 1.76 3.24 1.89 1.79.19 2.09-1.33 1.43-1.64z\"],\n \"hand-left\": [\"M15.1 6.54c-1.58-.81-4.09-2.46-4.94-4.23-.31-.65-1.82-.35-1.64 1.43.13 1.33.91 2.4 1.89 3.24L9.74 7H1.5C.67 7 0 7.67 0 8.5v.06c0 .36.13.64.32.85.27.36.7.59 1.18.59h5.44l.78.01c-.54.23-.93.78-.93 1.43 0 .59.32 1.1.79 1.36-.32.28-.52.7-.52 1.17 0 .69.44 1.28 1.05 1.47-.22.27-.36.62-.36 1 0 .85.66 1.54 1.48 1.54h.99c4.31 0 5.59-.31 7.14-1.05 1.89-.9 2.65-2.44 2.65-4.82-.01-4.32-2.44-4.52-4.91-5.57z\"],\n \"hand-right\": [\"M20 8.5c0-.83-.67-1.5-1.5-1.5h-8.24l-.67-.01c.98-.85 1.76-1.92 1.89-3.24.18-1.79-1.33-2.08-1.65-1.43-.84 1.76-3.35 3.41-4.93 4.23C2.43 7.59 0 7.79 0 12.13c0 2.38.76 3.92 2.65 4.82C4.2 17.69 5.48 18 9.79 18h.99c.82 0 1.48-.69 1.48-1.54 0-.38-.14-.73-.36-1 .6-.19 1.05-.78 1.05-1.47 0-.47-.2-.89-.52-1.17.47-.26.79-.77.79-1.36 0-.65-.39-1.2-.93-1.43l.77-.03h5.44c.48 0 .91-.23 1.18-.59.19-.21.32-.49.32-.85v-.03-.03z\"],\n \"hand-up\": [\"M16.46 7.74c-.38 0-.73.14-1 .36-.19-.6-.78-1.05-1.47-1.05-.47 0-.89.2-1.17.52-.26-.47-.77-.79-1.36-.79-.65 0-1.2.39-1.43.93L10 6.94V1.5c0-.48-.23-.91-.59-1.18C9.2.13 8.92 0 8.56 0H8.5C7.67 0 7 .67 7 1.5v8.24l-.01.67c-.84-.98-1.92-1.76-3.24-1.89-1.79-.18-2.08 1.33-1.43 1.65 1.77.84 3.41 3.35 4.23 4.94 1.05 2.47 1.25 4.9 5.58 4.9 2.38 0 3.92-.76 4.82-2.65.74-1.56 1.05-2.84 1.05-7.15v-.99c0-.81-.69-1.48-1.54-1.48z\"],\n \"hat\": [\"M18.5 13c1.118 0 1.466.534 1.498 1.366L20 14.5v.5c0 1.945-5.69 3-10 3S0 16.945 0 15v-.5c0-.908.323-1.5 1.5-1.5.895 0 3.5 1.2 8.5 1.2l.411-.003C15.143 14.134 17.631 13 18.5 13zm-5-10c1.725 0 2.954 2.729 3.688 8.186-1.455.263-3.805.72-6.392.801l-.434.01L10 12c-2.896 0-5.585-.524-7.189-.814C3.546 5.73 4.775 3 6.5 3 8.6 3 8.329 5.5 10 5.5S11.5 3 13.5 3z\"],\n \"header\": [\"M16 1c-.55 0-1 .45-1 1v7H5V2c0-.55-.45-1-1-1s-1 .45-1 1v16c0 .55.45 1 1 1s1-.45 1-1v-7h10v7c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"header-one\": [\"M10 0c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1s-1-.45-1-1V9H2v6c0 .55-.45 1-1 1s-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v6h7V1c0-.55.45-1 1-1zm7.4 10.77c.17-.2.29-.46.34-.77H19v10h-1.5v-7.11H15v-1.24c.32 0 .63-.03.93-.08.31-.06.58-.16.83-.29.26-.12.47-.3.64-.51z\"],\n \"header-two\": [\"M16.6 17.41c-.22.17-.4.36-.56.55-.16.19-.27.4-.33.61h4.28V20H14c.01-.81.18-1.52.53-2.13.35-.6.81-1.13 1.41-1.58.28-.23.58-.46.89-.68.31-.22.59-.46.85-.71.26-.26.48-.53.63-.83.16-.3.25-.64.26-1.02 0-.18-.02-.37-.06-.57-.04-.2-.11-.39-.22-.56s-.26-.31-.45-.43-.44-.18-.75-.18c-.28 0-.52.06-.71.19s-.34.3-.45.52c-.11.22-.2.48-.25.78-.05.3-.08.62-.09.97h-1.43c0-.54.07-1.04.2-1.5.13-.47.32-.87.58-1.2.26-.34.58-.6.95-.78.37-.19.81-.29 1.3-.29.54 0 .99.09 1.35.29.36.19.65.44.87.74.22.29.38.62.47.97.09.35.14.68.14 1 0 .4-.05.75-.16 1.07-.11.32-.26.61-.44.88-.19.27-.4.52-.63.74-.24.22-.48.43-.73.63s-.5.38-.75.56c-.26.17-.5.35-.71.53zM10 0c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1s-1-.45-1-1V9H2v6c0 .55-.45 1-1 1s-1-.45-1-1V1c0-.55.45-1 1-1s1 .45 1 1v6h7V1c0-.55.45-1 1-1z\"],\n \"headset\": [\"M18.97 9H19A9 9 0 001 9h.03C.41 9.73 0 10.8 0 12c0 1.74.84 3.2 2 3.76V16c0 1.66 1.34 3 3 3h3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1H5c-.55 0-1-.45-1-1 .55 0 1-.45 1-1V9c0-.55-.45-1-1-1h-.92C3.57 4.61 6.47 2 10 2s6.43 2.61 6.92 6H16c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1c1.66 0 3-1.79 3-4 0-1.2-.41-2.27-1.03-3z\"],\n \"heart\": [\"M20 6.25C20 3.35 17.65 1 14.75 1c-1.02 0-1.95.31-2.75.82v-.04c-.09.06-.17.12-.26.19-.04.03-.09.06-.14.1-.68.51-1.24 1.18-1.6 1.96-.4-.86-1.04-1.57-1.8-2.1-.04-.02-.07-.05-.1-.08a7 7 0 00-.6-.33c-.13-.04-.23-.1-.35-.15-.05-.02-.1-.05-.15-.07v.02C6.45 1.13 5.87 1 5.25 1A5.25 5.25 0 000 6.25c0 .09.01.17.01.25H0c0 .06.01.12.02.18s.01.12.02.18C.13 7.89.44 9 1.07 10.17 2.23 12.33 4.1 14.11 7 16.53v.01c.9.75 1.89 1.55 3 2.46.71-.58 1.38-1.12 2-1.63 3.48-2.86 5.64-4.78 6.93-7.18.63-1.17.94-2.27 1.03-3.3.01-.07.01-.14.02-.21 0-.06.01-.11.02-.17h-.01c0-.09.01-.17.01-.26z\"],\n \"heart-broken\": [\"M8.11 7.45C8.05 7.31 8 7.16 8 7c0-.07.03-.13.04-.19h-.02l.86-4.32A5.159 5.159 0 005.25 1 5.25 5.25 0 000 6.25c0 .09.01.17.01.25H0c0 .06.01.12.02.18s.01.12.02.18C.13 7.89.44 9 1.07 10.17c1.38 2.58 3.76 4.6 7.71 7.83l-.76-3.8h.02c-.01-.07-.04-.13-.04-.2 0-.21.08-.39.18-.54l-.02-.01 1.68-2.52-1.73-3.48zM20 6.25C20 3.35 17.65 1 14.75 1c-1.54 0-2.92.67-3.88 1.73l-.83 4.13 1.85 3.69h-.01c.07.14.12.29.12.45 0 .21-.08.39-.18.54l.02.01-1.77 2.66.81 4.07c4.16-3.39 6.63-5.45 8.05-8.1.63-1.17.94-2.27 1.03-3.3.01-.07.01-.14.02-.21 0-.06.01-.11.02-.17h-.01c0-.08.01-.16.01-.25z\"],\n \"heat-grid\": [\"M14 12h6V8h-6v4zM0 12h6V8H0v4zm1-3h4v2H1V9zm-1 7c0 .55.45 1 1 1h5v-4H0v3zM19 3h-5v4h6V4c0-.55-.45-1-1-1zm0 3h-4V4h4v2zM0 4v3h6V3H1c-.55 0-1 .45-1 1zm7 3h6V3H7v4zm7 10h5c.55 0 1-.45 1-1v-3h-6v4zm-7 0h6v-4H7v4zm1-3h4v2H8v-2zm-1-2h6V8H7v4z\"],\n \"heatmap\": [\"M6 0a6 6 0 100 12A6 6 0 106 0z\",\n \"M10.5 8a4.5 4.5 0 100 9 4.5 4.5 0 100-9z\",\n \"M16.5 7a3.5 3.5 0 100 7 3.5 3.5 0 100-7zM18 16a2 2 0 100 4 2 2 0 100-4zM2.5 14a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM16.5 0a2.5 2.5 0 100 5 2.5 2.5 0 100-5z\"],\n \"help\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM7.41 4.62c.65-.54 1.51-.82 2.56-.82.54 0 1.03.08 1.48.25.44.17.83.39 1.14.68.32.29.56.63.74 1.02.17.39.26.82.26 1.27s-.08.87-.24 1.23c-.16.37-.4.73-.71 1.11l-1.21 1.58c-.14.17-.28.33-.32.48-.05.15-.11.35-.11.6v.97H9v-2s.06-.58.24-.81l1.21-1.64c.25-.3.41-.56.51-.77s.14-.44.14-.67c0-.35-.11-.63-.32-.85s-.5-.33-.88-.33c-.37 0-.67.11-.89.33-.22.23-.37.54-.46.94-.03.12-.11.17-.23.16l-1.95-.29c-.12-.01-.16-.08-.14-.22.13-.93.52-1.67 1.18-2.22zM9 14h2.02L11 16H9v-2z\"],\n \"helper-management\": [\"M17 10h-3v3h3v-3zm0 4h-3v3h3v-3zm0-8h-3v3h3V6zm2-6H1C.4 0 0 .4 0 1v18c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V1c0-.6-.5-1-1-1zm-1 18H2V2h16v16zm-9-4H6v3h3v-3zm4 0h-3v3h3v-3z\"],\n \"highlight\": [\"M11.22 14.09l3.03-3.03.71.71L20 6.73l-5.71-5.71-5.04 5.04.71.71-3.02 3.04 4.28 4.28zm6.8 3.91h-16c-.55 0-1 .45-1 1s.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1zm-15-1h4.04c.28 0 .53-.11.71-.3l2.02-2.02-3.44-3.45-4.04 4.04c-.18.18-.3.44-.3.71.01.57.46 1.02 1.01 1.02z\"],\n \"history\": [\"M10 0C6.71 0 3.82 1.6 2 4.05V2c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.76C5.23 3.17 7.47 2 10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8c0-.55-.45-1-1-1s-1 .45-1 1c0 5.52 4.48 10 10 10s10-4.48 10-10S15.52 0 10 0zm0 3c-.55 0-1 .45-1 1v6c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L11 9.59V4c0-.55-.45-1-1-1z\"],\n \"home\": [\"M2 12v7c0 .55.45 1 1 1h5v-7h4v7h5c.55 0 1-.45 1-1v-7l-8-8-8 8zm17.71-2.71L17 6.59V3c0-.55-.45-1-1-1s-1 .45-1 1v1.59L10.71.3C10.53.11 10.28 0 10 0s-.53.11-.71.29l-9 9a1.003 1.003 0 001.42 1.42L10 2.41l8.29 8.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"horizontal-bar-chart\": [\"M1 1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1zm3 5h11c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1zm8 8H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm7-6H4c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h15c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1z\"],\n \"horizontal-bar-chart-asc\": [\"M1 9h11c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0-5h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm18 12H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM1 14h14c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1z\"],\n \"horizontal-bar-chart-desc\": [\"M10 16H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm2-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h11c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm3-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm4-5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"horizontal-distribution\": [\"M12 2H8c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM1 0C.45 0 0 .45 0 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm18 0c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"id-number\": [\"M2 5v10h16V5H2zm0-2h16c1.1 0 2 .9 2 2v10c0 1.1-.9 2-2 2H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2z\",\n \"M8.88 12.38c-.17-.39-1.01-.66-1.56-.9-.56-.24-.48-.39-.5-.6v-.09c.19-.17.35-.4.45-.67 0 0 0-.02.01-.02l.06-.18c.13-.03.2-.17.23-.29.03-.05.09-.18.08-.33-.04-.18-.11-.27-.2-.3v-.03c0-.24-.02-.58-.06-.81-.01-.06-.02-.12-.04-.19-.08-.27-.25-.52-.48-.7C6.63 7.09 6.3 7 6 7s-.63.09-.87.27c-.23.17-.4.42-.48.7-.02.06-.03.13-.04.19-.04.22-.06.57-.06.81V9c-.09.03-.17.12-.19.31-.01.14.05.27.08.32.03.14.1.27.23.3.02.06.03.12.06.18v.01c.11.27.27.51.47.68v.08c-.02.2.04.35-.51.6-.56.24-1.39.51-1.56.9-.19.39-.12.62-.12.62h5.98c-.01 0 .06-.23-.11-.62zM12 7h4c.55 0 1 .45 1 1s-.45 1-1 1h-4c-.55 0-1-.45-1-1s.45-1 1-1zM12 11h4c.55 0 1 .45 1 1s-.45 1-1 1h-4c-.55 0-1-.45-1-1s.45-1 1-1z\"],\n \"image-rotate-left\": [\"M10.5 13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM14 7H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 10l-5-3-1 2-2-4-3 4.5V9h11v8zm3-15h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H16c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4z\"],\n \"image-rotate-right\": [\"M5.29 4.29a1.003 1.003 0 001.42 1.42l2-2C8.89 3.53 9 3.28 9 3c0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H4C1.79 2 0 3.79 0 6v3c0 .55.45 1 1 1s1-.45 1-1V6c0-1.1.9-2 2-2h1.59l-.3.29zM15.5 13c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM19 7H6c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 10l-5-3-1 2-2-4-3 4.5V9h11v8z\"],\n \"import\": [\"M9.29 15.71c.18.18.43.29.71.29s.53-.11.71-.29l5-5a1.003 1.003 0 00-1.42-1.42L11 12.59V1c0-.55-.45-1-1-1S9 .45 9 1v11.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42l5 5zM19 14c-.55 0-1 .45-1 1v3H2v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z\"],\n \"inbox\": [\"M16.92 3.56l-.01-.02c-.16-.35-.5-.6-.91-.6H4c-.41 0-.76.25-.91.6l-.01.02L0 10.49v6.46c0 .55.45 1 1 1h18c.55 0 1-.45 1-1v-6.46l-3.08-6.93zM15 10.95c-.55 0-1 .45-1 1v1H6v-1c0-.55-.45-1-1-1H1.98l2.67-6h10.7l2.67 6H15z\"],\n \"inbox-filtered\": [\"M10.262 3l1.958 1.958v.05H4.65l-2.67 5.997H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h3.02l-.635-1.426.625-.63c.354-.353.598-.8.707-1.289L20 10.545v6.456c0 .55-.45.999-1 .999H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h6.262zm9.088-3a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V4.13L11.19 1.1a.642.642 0 01.45-1.1h7.71z\"],\n \"inbox-geo\": [\"M7.427 3a7.467 7.467 0 00-.411 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8V13c.165.01.332 0 .5 0a7.48 7.48 0 005.5-2.4V17c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h3.427zm5.715-.596a.133.133 0 01-.193 0l-.374-.374a.133.133 0 010-.193.133.133 0 01.193 0l.373.374a.133.133 0 010 .193zm1.743.033c-.05 0-.088-.006-.088-.055 0-.05.038-.056.088-.056h.165c.05 0 .088.006.088.055 0 .05-.038.056-.088.056h-.165zm.539.632c-.05 0-.104-.044-.104-.094v-.23c0-.05.054-.094.104-.094.05 0 .104.044.104.094v.23c0 .05-.055.094-.104.094zm-3.575 2.304h.506l1.182 1.2c.006.005 0 .005 0 .01v.446c0 .187-.126.341-.319.341h-.098v.226c0 .192-.138.296-.33.296h.01v.792c0 .188-.181.336-.368.336s-.369-.149-.369-.335v-1.32h-.214c-.193 0-.308-.149-.308-.341V5.72c0-.192.115-.346.308-.346zM14.5 0C17.536 0 20 2.464 20 5.5S17.536 11 14.5 11A5.502 5.502 0 019 5.5C9 2.464 11.464 0 14.5 0zm0 9.9c2.431 0 4.4-1.969 4.4-4.4 0-.297-.027-.583-.099-.864h-.236c-.188 0-.336-.104-.347-.313h-.319c.11.104.231.209.231.346v.705c0 .088-.055.17-.11.23h-.022l-.011.006-.022.011-.666.643v1.21c0 .193-.104.33-.296.33h-.54c-.192 0-.319-.137-.319-.33V6.221a.915.915 0 00-.533-.518h-.671c-.192 0-.368-.143-.368-.335V4.68c0-.192.176-.346.368-.346l.193-.005.319-.32a.342.342 0 01.489 0l.319.32c.005 0 .005.005.005.005h.704c.16 0 .237-.16.341-.313v-.11l-.038.005h-.27a.159.159 0 01-.153-.16c0-.087.066-.159.154-.159h.269l.039.006V3.42s-.05-.038-.061-.038h-.302l-.067.076a.342.342 0 01-.489.011l-.066-.088h-.176l.248.259c.021.022.021.088 0 .11-.028.022-.067.028-.088.006l-.292-.276h-.127l-.363.325-.033-.006c-.038.11-.087.089-.143.089-.126 0-.225-.072-.225-.193 0-.127.099-.209.225-.209h.176v-.182c0-.088.061-.131.149-.131h.066v-.127c0-.143.149-.297.286-.297h.28c.16 0 .27-.115.27-.275V2.42c0-.016.055.017.055-.088h-.187l-.005.017-.308.33a.123.123 0 01-.177 0c-.049-.044-.049-.121 0-.171l.391-.385c.027-.022.06-.022.094-.022l.005.022h.869A4.376 4.376 0 0014.5 1.1a4.402 4.402 0 00-2.816 1.018h.583c.094 0 .165.066.165.159s-.072.16-.165.16h-.478c0 .104-.039.06-.039.066v.351h.429l.226-.252c.132-.127.346-.155.473-.022a.332.332 0 010 .473l-1.183 1.182-.011.011c-.005.005-.011.005-.016.011a.115.115 0 00-.034.022c-.005.006-.01 0-.016.006a.309.309 0 01-.176.038h-.347c-.12.104-.187.148-.187.27v.088c0 .016-.027.027-.027.043l.561.589c.06.06.055.154 0 .209a.143.143 0 01-.209 0l-.578-.578a.425.425 0 01-.082.011c-.154 0-.292-.12-.292-.274v-.358h-.016c-.104.374-.165.77-.165 1.177 0 2.431 1.969 4.4 4.4 4.4zm3.388-3.107c.077 0 .16.06.16.137v.424c0 .077-.083.137-.16.137s-.16-.06-.16-.137V6.93c0-.077.083-.137.16-.137zm-3.113-4.879c0 .187-.154.314-.335.314h-.374v.104c0 .11-.05.198-.16.198s-.16-.088-.16-.198V1.98c-.104-.022-.033-.028-.033-.055 0-.187.127-.325.314-.325h.407c.187 0 .341.127.341.314z\"],\n \"inbox-search\": [\"M7.136 3a6.327 6.327 0 00-.098 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h1.076l1.14 1.14a2.767 2.767 0 001.974.806c.282 0 .554-.042.81-.12V17c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h3.136zm3.244 1.33c0 1.62 1.31 2.93 2.93 2.93s2.93-1.31 2.93-2.93-1.31-2.93-2.93-2.93-2.93 1.31-2.93 2.93zm6.47 2.43l2.89 2.85c.13.15.22.35.23.56 0 .43-.35.78-.78.78-.23 0-.42-.08-.56-.22l-2.87-2.87c-.17.1-.33.2-.51.29-.03.01-.06.03-.09.04-.18.07-.35.15-.55.21-.19.06-.37.11-.57.14-.05.01-.1.02-.14.02-.2.03-.39.05-.6.05A4.3 4.3 0 019 4.31C9 1.93 10.93.01 13.3 0c2.37 0 4.3 1.93 4.3 4.3 0 .21-.02.4-.05.6-.01.05-.01.09-.02.14-.04.2-.08.38-.14.58-.05.19-.13.36-.21.54-.01.03-.03.06-.04.09-.08.18-.18.34-.29.51z\"],\n \"inbox-update\": [\"M10.083 3a6.04 6.04 0 00.001 2.009H4.65l-2.67 5.996H5c.55 0 1 .45 1 .999v1h8v-1c0-.55.45-1 1-1h3.02l-.53-1.19a5.97 5.97 0 001.824-.811L20 10.545v6.456c0 .55-.45.999-1 .999H1c-.55 0-1-.45-1-1v-6.455L3.08 3.62l.01-.02c.15-.35.5-.6.91-.6h6.083zM16 8a4 4 0 110-8 4 4 0 010 8z\"],\n \"info-sign\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM9 4h2v2H9V4zm4 12H7v-1h2V8H8V7h3v8h2v1z\"],\n \"inheritance\": [\"M6 10c0 2.21 1.79 4 4 4h6.59l-2.29-2.29A.965.965 0 0114 11a1.003 1.003 0 011.71-.71l4 4c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-4 4a1.003 1.003 0 01-1.42-1.42l2.3-2.29H10c-3.31 0-6-2.69-6-6H1a1 1 0 01-1-1V1a1 1 0 011-1h8a1 1 0 011 1v8a1 1 0 01-1 1H6zM2 2v6h6V2H2z\"],\n \"inherited-group\": [\"M1 9c.55 0 1 .45 1 1v4c0 1.1.9 2 2 2h2.59l-.3-.29a1.003 1.003 0 011.42-1.42l2 2c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2 2A1.003 1.003 0 016 19c0-.28.11-.53.3-.71l.29-.29H4c-2.21 0-4-1.79-4-4v-4c0-.55.45-1 1-1zm6.996-9c.79 0 1.68.25 2.309.73a3.63 3.63 0 011.4 2.36c.11.6.17 1.52.17 2.15v.09c.22.09.42.32.47.82.03.39-.12.73-.2.87-.07.34-.27.71-.61.78-.04.16-.09.33-.15.48-.01.01-.02.05-.02.05-.27.71-.68 1.33-1.19 1.78 0 .08 0 .16.01.23.05.55-.15.95 1.33 1.6 1.469.66 3.698 1.35 4.178 2.39.45 1.05.27 1.67.27 1.67h-5.227a1.982 1.982 0 00-.319-.417l-2-2A2.003 2.003 0 005 15H4c-.548 0-1-.452-1-1v-1.462c.511-.213 1.023-.413 1.468-.608 1.479-.65 1.329-1.05 1.379-1.59l.01-.21c-.52-.45-.95-1.08-1.22-1.8l-.01-.01-.01-.03c-.07-.15-.12-.32-.16-.49-.34-.06-.54-.43-.62-.78-.08-.14-.24-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.64.05-1.55.17-2.15a3.648 3.648 0 011.4-2.36C6.317.25 7.207 0 7.996 0zm5.997 3c.59 0 1.26.19 1.73.55.46.35.8.85.97 1.4.04.13.07.25.08.38.08.45.13 1.14.13 1.61v.07c.16.07.31.24.35.62.02.29-.09.55-.15.65-.05.26-.2.53-.46.59-.03.12-.07.25-.11.36-.01.01-.01.04-.01.04-.2.53-.51 1-.89 1.34 0 .06 0 .12.01.17.04.41-.11.71 1 1.19 1.099.5 2.768 1.01 3.128 1.79.34.79.2 1.25.2 1.25h-3.039V15c-.06-.33-.17-.69-.33-1.06-.45-.97-1.37-1.52-3.238-2.3-.17-.07-.76-.31-.77-.32-.1-.04-.2-.08-.28-.12.05-.14.04-.29.06-.45l.01-.16c-.25-.21-.47-.48-.65-.79.22-.34.41-.71.56-1.12l.028-.078-.002.013-.006.035.06-.15c.36-.26.6-.67.72-1.13.18-.37.29-.82.25-1.3-.05-.5-.21-.92-.47-1.22-.02-.53-.06-1.11-.12-1.59.38-.17.83-.26 1.24-.26z\"],\n \"inner-join\": [\"M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zm-3.34 9.25c-.55-1.2-.86-2.54-.86-3.95s.31-2.75.86-3.95a4.001 4.001 0 000 7.9zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm.6 2.05c.55 1.2.86 2.54.86 3.95s-.31 2.75-.86 3.95c1.9-.31 3.36-1.96 3.36-3.95S16.5 6.36 14.6 6.05zM10 5.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z\"],\n \"insert\": [\"M19 0H1C.4 0 0 .4 0 1v18c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V1c0-.6-.5-1-1-1zm-1 18H2V2h16v16zM5 11h4v4c0 .6.4 1 1 1s1-.4 1-1v-4h4c.6 0 1-.4 1-1s-.4-1-1-1h-4V5c0-.6-.4-1-1-1s-1 .4-1 1v4H5c-.6 0-1 .4-1 1s.4 1 1 1z\"],\n \"intersection\": [\"M13 4c-1.31 0-2.51.43-3.5 1.14A5.977 5.977 0 006 4c-3.31 0-6 2.69-6 6s2.69 6 6 6c1.31 0 2.51-.43 3.5-1.14.99.71 2.19 1.14 3.5 1.14 3.31 0 6-2.69 6-6s-2.69-6-6-6zm-4.93 9.41c-.61.37-1.31.59-2.07.59-2.21 0-4-1.79-4-4s1.79-4 4-4c.76 0 1.46.22 2.07.59C7.4 7.56 7 8.73 7 10s.4 2.44 1.07 3.41zM13 14c-.76 0-1.46-.22-2.07-.59C11.6 12.44 12 11.27 12 10s-.4-2.44-1.07-3.41C11.54 6.22 12.24 6 13 6c2.21 0 4 1.79 4 4s-1.79 4-4 4z\"],\n \"ip-address\": [\"M6 3.66C6 5.69 10 11 10 11s4-5.31 4-7.34C13.99 1.64 12.21 0 10 0S6 1.64 6 3.66zM8 4c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2zM14 13.5V13h-4v1h3v2h-2v1h3v-3.5zM3 12h14c.55 0 1 .45 1 1v6c0 .55-.45 1-1 1H3c-.55 0-1-.45-1-1v-6c0-.55.45-1 1-1zm4 1v6h1v-6H7zm3 1v5h1v-5h-1z\"],\n \"issue\": [\"M10 20C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 100-16 8 8 0 000 16zm1-2H9v-2h2v2zm0-3H9V4h2v9z\"],\n \"issue-closed\": [\"M15.364 5.9a.997.997 0 01-.707-.293l-2.121-2.122a1 1 0 111.414-1.414l1.414 1.414L18.192.657a1 1 0 011.414 1.414l-3.535 3.536a.997.997 0 01-.707.292zM11.78.157a3.002 3.002 0 00-1.437 1.85 8 8 0 107.1 5.055l.042-.042 1.472-1.472A9.959 9.959 0 0120 10c0 5.523-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0c.608 0 1.202.054 1.78.158zM11 16H9v-2h2v2zm0-3H9V4h2v9z\"],\n \"issue-new\": [\"M13.167.512a2.98 2.98 0 00-.131.524c-.74.115-1.39.5-1.848 1.052a8 8 0 106.724 6.724 2.997 2.997 0 001.052-1.848 2.98 2.98 0 00.524-.13A9.99 9.99 0 0120 10c0 5.523-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0a9.99 9.99 0 013.167.512zM11 16H9v-2h2v2zm0-3H9V4h2v9zm6-10h1.5a1 1 0 010 2H17v1.5a1 1 0 01-2 0V5h-1.5a1 1 0 010-2H15V1.5a1 1 0 012 0V3z\"],\n \"italic\": [\"M11.7 4H14c.6 0 1-.4 1-1s-.4-1-1-1H7c-.6 0-1 .4-1 1s.4 1 1 1h2.2L7.3 15H5c-.6 0-1 .4-1 1s.4 1 1 1h7c.6 0 1-.4 1-1s-.4-1-1-1H9.8l1.9-11z\"],\n \"join-table\": [\"M19 6h-4V2c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h4v4c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM6 12H2V9h4v3zm0-4H2V5h4v3zm7 9H7v-3h6v3zm0-4H7V9h6v4zm0-5H7V5h6v3zm5 9h-4v-3h4v3zm0-4h-4v-3h4v3z\"],\n \"key\": [\"M14 0c-3.31 0-6 2.69-6 6 0 1.11.32 2.14.85 3.03L.44 17.44a1.498 1.498 0 102.12 2.12l.79-.79.94.94c.18.18.43.29.71.29s.53-.11.71-.29l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-.94-.94 3.2-3.2A5.9 5.9 0 0014 12c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 9c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"],\n \"key-backspace\": [\"M19 3H7c-.28 0-.53.11-.71.29l-6 6C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l6 6c.18.18.43.29.71.29h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-2.29 9.29a1.003 1.003 0 01-1.42 1.42L13 11.41l-2.29 2.29c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71l2.3-2.29-2.3-2.29a1.003 1.003 0 011.42-1.42L13 8.59l2.29-2.29c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L14.41 10l2.3 2.29z\"],\n \"key-command\": [\"M15.5 12H14V8h1.5C17.43 8 19 6.43 19 4.5S17.43 1 15.5 1 12 2.57 12 4.5V6H8V4.5C8 2.57 6.43 1 4.5 1S1 2.57 1 4.5 2.57 8 4.5 8H6v4H4.5C2.57 12 1 13.57 1 15.5S2.57 19 4.5 19 8 17.43 8 15.5V14h4v1.5c0 1.93 1.57 3.5 3.5 3.5s3.5-1.57 3.5-3.5-1.57-3.5-3.5-3.5zm0-9c.83 0 1.5.67 1.5 1.5S16.33 6 15.5 6 14 5.33 14 4.5 14.67 3 15.5 3zm-11 14c-.83 0-1.5-.67-1.5-1.5S3.67 14 4.5 14s1.5.67 1.5 1.5S5.33 17 4.5 17zm0-11C3.67 6 3 5.33 3 4.5S3.67 3 4.5 3 6 3.67 6 4.5 5.33 6 4.5 6zm7.5 6H8V8h4v4zm3.5 5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\"],\n \"key-control\": [\"M16.71 7.29l-6-6C10.53 1.11 10.28 1 10 1s-.53.11-.71.29l-6 6a1.003 1.003 0 001.42 1.42L10 3.41l5.29 5.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\"],\n \"key-delete\": [\"M19.71 9.29l-6-6A.997.997 0 0013 3H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.28 0 .53-.11.71-.29l6-6c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zm-9 3a1.003 1.003 0 01-1.42 1.42L7 11.41 4.71 13.7c-.18.19-.43.3-.71.3a1.003 1.003 0 01-.71-1.71L5.59 10l-2.3-2.29a1.003 1.003 0 011.42-1.42L7 8.59 9.29 6.3c.18-.19.43-.3.71-.3a1.003 1.003 0 01.71 1.71L8.41 10l2.3 2.29z\"],\n \"key-enter\": [\"M18 2c-.55 0-1 .45-1 1v5c0 2.21-1.79 4-4 4H4.41L6.7 9.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.41 14H13c3.31 0 6-2.69 6-6V3c0-.55-.45-1-1-1z\"],\n \"key-escape\": [\"M2 8c.55 0 1-.45 1-1V4.41l6.29 6.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 3H7c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1v5c0 .55.45 1 1 1zm9-6.94V3.1c3.39.49 6 3.38 6 6.9 0 3.87-3.13 7-7 7-3.52 0-6.41-2.61-6.9-6H1.06c.5 4.5 4.31 8 8.94 8a9 9 0 009-9c0-4.63-3.5-8.44-8-8.94z\"],\n \"key-option\": [\"M13 4h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm6 12h-4.42L6.87 2.5l-.02.01A.977.977 0 006 2H1c-.55 0-1 .45-1 1s.45 1 1 1h4.42l7.71 13.5.01-.01c.18.3.49.51.86.51h5c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"key-shift\": [\"M17.74 10.35l-6.99-8.01-.01.01C10.56 2.14 10.3 2 10 2s-.56.14-.74.35l-.01-.01-7 8 .01.01A.95.95 0 002 11c0 .55.45 1 1 1h3v5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-5h3c.55 0 1-.45 1-1 0-.25-.1-.48-.26-.65z\"],\n \"key-tab\": [\"M19 13H4.41l2.29-2.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L2 12.59V10c0-.55-.45-1-1-1s-1 .45-1 1v8c0 .55.45 1 1 1s1-.45 1-1v-2.59l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L4.41 15H19c.55 0 1-.45 1-1s-.45-1-1-1zm0-12c-.55 0-1 .45-1 1v2.59L14.71 1.3A.965.965 0 0014 1a1.003 1.003 0 00-.71 1.71L15.59 5H1c-.55 0-1 .45-1 1s.45 1 1 1h14.59L13.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 7.41V10c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"known-vehicle\": [\"M19 4a.997.997 0 00-.707.293L14 8.586l-2.293-2.293a1 1 0 00-1.414 1.414l3 3a.997.997 0 001.414 0l5-5A1 1 0 0019 4zm-2.048 7.291c.011.072.048.134.048.209a1.5 1.5 0 01-1.5 1.5c-.225 0-.433-.057-.624-.145-.279.085-.57.145-.876.145a2.99 2.99 0 01-2.121-.879l-3-3 .007-.007A3.027 3.027 0 018.184 8H4V7l1-3h10l.19.568 1.307-1.308c-.336-.356-.758-.658-1.165-.772 0 0-1.74-.488-5.332-.488s-5.332.488-5.332.488c-.67.188-1.424.864-1.674 1.502L2.99 4H3L2 7H1a1 1 0 000 2h.333l-.28.84L1 10v7.5a1.5 1.5 0 103 0V17h12v.5a1.5 1.5 0 003 0V10l-.19-.568-1.858 1.86zM4.5 13a1.5 1.5 0 110-3 1.5 1.5 0 010 3z\"],\n \"lab-test\": [\"M13 2a1 1 0 010 2v4l4 8v1a1 1 0 01-1 1H4a1 1 0 01-1-1v-1l4-8V4a1 1 0 110-2h6zm-2 2H9v4l-2 4h6l-2-4V4z\"],\n \"label\": [\"M3 12h14v-1H3v1zm11-9H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V9l-6-6zm4 12H2V5h11v3H3v1h10v1h5v5zm-4-6V5l4 4h-4z\"],\n \"layer\": [\"M19.5 9.1l-9-5c-.2-.1-.3-.1-.5-.1s-.3 0-.5.1l-9 5c-.3.2-.5.5-.5.9s.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9s-.2-.7-.5-.9z\"],\n \"layers\": [\"M.5 6.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9s-.2-.7-.5-.9l-9-5c-.2-.1-.3-.1-.5-.1s-.3 0-.5.1l-9 5c-.3.2-.5.5-.5.9s.2.7.5.9z\",\n \"M19 9c-.2 0-.3 0-.5.1L10 13.9 1.5 9.1C1.3 9 1.2 9 1 9c-.6 0-1 .4-1 1 0 .4.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9 0-.6-.4-1-1-1z\",\n \"M19 13c-.2 0-.3 0-.5.1L10 17.9l-8.5-4.7c-.2-.2-.3-.2-.5-.2-.6 0-1 .4-1 1 0 .4.2.7.5.9l9 5c.2.1.3.1.5.1s.3 0 .5-.1l9-5c.3-.2.5-.5.5-.9 0-.6-.4-1-1-1z\"],\n \"layout\": [\"M18 6c-1.1 0-2 .9-2 2 0 .37.11.71.28 1.01l-2.27 2.27c-.3-.17-.64-.28-1.01-.28-.93 0-1.71.64-1.93 1.5H8.93c-.22-.86-1-1.5-1.93-1.5-.37 0-.71.11-1.01.28L3.72 9.01C3.89 8.71 4 8.37 4 8c0-.34-.09-.66-.24-.94l3.66-3.38c.31.2.68.32 1.08.32 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .34.09.66.24.94L3.08 6.32C2.77 6.12 2.4 6 2 6 .9 6 0 6.9 0 8s.9 2 2 2c.37 0 .71-.11 1.01-.28l2.27 2.27c-.17.3-.28.64-.28 1.01s.11.71.28 1.01l-2.27 2.27C2.71 16.11 2.37 16 2 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28.93 0 1.71-.64 1.93-1.5h2.14c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2 0-.37-.11-.71-.28-1.01l2.27-2.27c.3.17.64.28 1.01.28 1.1 0 2-.9 2-2s-.9-2-2-2z\"],\n \"layout-auto\": [\"M18 13c-.53 0-1.01.21-1.37.55L11.9 10.6c.06-.19.1-.39.1-.6s-.04-.41-.1-.6l4.72-2.95c.37.34.85.55 1.38.55 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .21.04.41.1.6l-4.73 2.96c-.24-.23-.54-.4-.87-.48V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.33.09-.63.26-.87.48L3.9 5.6c.06-.19.1-.39.1-.6 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.53 0 1.01-.21 1.37-.55L8.1 9.4c-.06.19-.1.39-.1.6s.04.41.1.6l-4.72 2.95C3.01 13.21 2.53 13 2 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.21-.04-.41-.1-.6l4.73-2.96c.24.23.54.4.87.48v4.14C8.64 16.29 8 17.07 8 18c0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.33-.09.63-.26.87-.48l4.73 2.96c-.06.18-.1.38-.1.59 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\"],\n \"layout-balloon\": [\"M18 16c-.14 0-.28.02-.42.05l-1.73-3.45c.69-.45 1.14-1.22 1.14-2.1s-.46-1.65-1.14-2.1l1.73-3.45c.14.03.28.05.42.05 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .6.27 1.13.69 1.5l-1.77 3.54c-.14-.02-.28-.04-.42-.04a2.5 2.5 0 00-2.45 2h-4.1A2.5 2.5 0 005.5 8c-.14 0-.28.02-.42.04L3.31 4.5C3.73 4.13 4 3.6 4 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.14 0 .28-.02.42-.05L4.14 8.4C3.46 8.85 3 9.62 3 10.5s.46 1.65 1.14 2.1l-1.73 3.45A1.84 1.84 0 002 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2c0-.6-.27-1.13-.69-1.5l1.77-3.54c.14.02.28.04.42.04a2.5 2.5 0 002.45-2h4.1a2.5 2.5 0 002.45 2c.14 0 .28-.02.42-.04l1.77 3.54c-.42.37-.69.9-.69 1.5 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\"],\n \"layout-circle\": [\"M18.3 8c-.2-.9-.6-1.7-1.1-2.5.2-.3.3-.7.3-1 0-1.1-.9-2-2-2-.4 0-.7.1-1 .3-.8-.5-1.6-.8-2.5-1.1-.1-1-1-1.7-2-1.7S8.2.8 8 1.7c-.9.3-1.7.6-2.5 1.1-.3-.2-.7-.3-1-.3-1.1 0-2 .9-2 2 0 .4.1.7.3 1-.5.8-.8 1.6-1.1 2.5C.8 8.2 0 9 0 10s.8 1.8 1.7 2c.2.9.6 1.7 1.1 2.5-.2.3-.3.7-.3 1 0 1.1.9 2 2 2 .4 0 .7-.1 1-.3.8.5 1.6.8 2.5 1.1.1 1 1 1.7 2 1.7s1.8-.8 2-1.7c.9-.2 1.7-.6 2.5-1.1.3.2.7.3 1 .3 1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1 .5-.8.8-1.6 1.1-2.5 1-.1 1.7-1 1.7-2s-.8-1.8-1.7-2zm-1.8 5.8c-.3-.2-.6-.3-1-.3-1.1 0-2 .9-2 2 0 .4.1.7.3 1-.6.3-1.2.6-1.9.8-.3-.7-1-1.3-1.9-1.3-.8 0-1.6.5-1.9 1.3-.7-.2-1.3-.4-1.9-.8.2-.3.3-.6.3-1 0-1.1-.9-2-2-2-.4 0-.7.1-1 .3-.3-.6-.6-1.2-.8-1.9.8-.3 1.3-1.1 1.3-1.9s-.5-1.6-1.2-1.8c.2-.7.4-1.3.8-1.9.3.2.6.3 1 .3 1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1 .6-.3 1.2-.6 1.9-.8.2.7 1 1.2 1.8 1.2s1.6-.5 1.9-1.3c.7.2 1.3.4 1.9.8-.2.3-.3.6-.3 1 0 1.1.9 2 2 2 .4 0 .7-.1 1-.3.3.6.6 1.2.8 1.9-.8.3-1.3 1.1-1.3 1.9s.5 1.6 1.2 1.8c-.1.7-.4 1.4-.7 2z\"],\n \"layout-grid\": [\"M2 0a2 2 0 100 4 2 2 0 100-4zM10 0a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM10 16a2 2 0 100 4 2 2 0 100-4zM2 16a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM10 8a2 2 0 100 4 2 2 0 100-4z\"],\n \"layout-group-by\": [\"M2 2a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM2 14a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM13 12a2 2 0 100 4 2 2 0 100-4zM13 4a2 2 0 100 4 2 2 0 100-4z\"],\n \"layout-hierarchy\": [\"M18.5 16.07v-4.14c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2-.93 0-1.71.64-1.93 1.5h-4.14c-.18-.7-.73-1.25-1.43-1.43V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.7.18-1.25.73-1.43 1.43H3.93C3.71 8.64 2.93 8 2 8c-1.1 0-2 .9-2 2 0 .93.64 1.71 1.5 1.93v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.7-.18 1.25-.73 1.43-1.43h4.14c.18.7.73 1.25 1.43 1.43v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-4.14c.7-.18 1.25-.73 1.43-1.43h4.14c.18.7.73 1.25 1.43 1.43v4.14c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93z\"],\n \"layout-linear\": [\"M16.5 7a2.5 2.5 0 00-2.45 2h-2.1a2.5 2.5 0 00-4.9 0h-2.1a2.5 2.5 0 100 1h2.1a2.5 2.5 0 004.9 0h2.1a2.5 2.5 0 102.45-3z\"],\n \"layout-skew-grid\": [\"M2 0a2 2 0 100 4 2 2 0 100-4zM18 0a2 2 0 100 4 2 2 0 100-4zM18 8a2 2 0 100 4 2 2 0 100-4zM18 16a2 2 0 100 4 2 2 0 100-4zM2 16a2 2 0 100 4 2 2 0 100-4zM2 8a2 2 0 100 4 2 2 0 100-4zM10 12a2 2 0 100 4 2 2 0 100-4zM10 4a2 2 0 100 4 2 2 0 100-4z\"],\n \"layout-sorted-clusters\": [\"M2 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm16 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-8 4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"learning\": [\"M10.551 1.127a1.256 1.256 0 00-1.102 0L.456 5.89c-.608.309-.608.913 0 1.222l8.993 4.762c.334.17.767.17 1.102 0l8.992-4.762c.61-.309.61-.913 0-1.222l-8.992-4.762z\",\n \"M18 6.5l.016 4.514c.002.548.447.99.994.99a.99.99 0 00.99-.99V6.5h-2zM3.366 10.033l6.401 3.358a.5.5 0 00.465 0l6.406-3.358a.25.25 0 01.366.221v5.109a.25.25 0 01-.139.224l-6.64 3.302a.5.5 0 01-.446 0l-6.64-3.302A.25.25 0 013 15.363v-5.108a.25.25 0 01.366-.222z\"],\n \"left-join\": [\"M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm.6 2.05c.55 1.2.86 2.54.86 3.95s-.31 2.75-.86 3.95c1.9-.31 3.36-1.96 3.36-3.95S16.5 6.36 14.6 6.05zM10 5.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z\"],\n \"less-than\": [\"M7.162 10l9.154 3.052a1 1 0 01-.632 1.897l-12-4c-.912-.304-.912-1.594 0-1.897l12-4a1 1 0 01.632 1.897L7.162 10z\"],\n \"less-than-or-equal-to\": [\"M16.316 11.051L7.162 8l9.154-3.051a1 1 0 10-.632-1.898l-12 4c-.912.304-.912 1.594 0 1.898l12 4a1 1 0 10.632-1.898zM16 15H4a1 1 0 100 2h12a1 1 0 100-2z\"],\n \"lifesaver\": [\"M8.143 14.644L7.028 17.43c.919.368 1.922.57 2.972.57s2.053-.202 2.972-.57l-1.115-2.786A4.986 4.986 0 0110 15a4.986 4.986 0 01-1.857-.356zm-2.787-2.787A4.986 4.986 0 015 10c0-.656.126-1.283.356-1.857L2.57 7.028A7.978 7.978 0 002 10c0 1.05.202 2.053.57 2.972l2.786-1.115zm2.787-6.5A4.986 4.986 0 0110 5c.656 0 1.283.126 1.857.356l1.115-2.786A7.978 7.978 0 0010 2c-1.05 0-2.053.202-2.972.57l1.115 2.786zm6.5 2.786c.23.574.357 1.2.357 1.857 0 .656-.126 1.283-.356 1.857l2.786 1.115c.368-.919.57-1.922.57-2.972s-.202-2.053-.57-2.972l-2.786 1.115zM10 13a3 3 0 100-6 3 3 0 000 6zm0 7C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10z\"],\n \"lightbulb\": [\"M6.33 13.39c0 .34.27.61.6.61h6.13c.33 0 .6-.27.6-.61C14.03 9.78 16 9.4 16 6.09 16 2.72 13.31 0 10 0S4 2.72 4 6.09c0 3.31 1.97 3.69 2.33 7.3zM13 15H7c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-1 3H8c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"link\": [\"M10.85 11.98l-4.44 4.44-1 1c-.36.36-.86.58-1.41.58-1.1 0-2-.9-2-2 0-.55.22-1.05.59-1.41l5.44-5.44C7.69 9.06 7.36 9 7 9c-1.11 0-2.09.46-2.82 1.18l-.01-.01-3 3 .01.01C.46 13.91 0 14.89 0 16c0 2.21 1.79 4 4 4 1.11 0 2.09-.46 2.82-1.18l.01.01 3-3-.01-.01C10.54 15.09 11 14.11 11 13c0-.36-.06-.69-.15-1.02zM20 4c0-2.21-1.79-4-4-4-1.11 0-2.09.46-2.82 1.18l-.01-.01-3 3 .01.01C9.46 4.91 9 5.89 9 7c0 .36.06.69.15 1.02l4.44-4.44 1-1c.36-.36.86-.58 1.41-.58 1.1 0 2 .9 2 2 0 .55-.22 1.05-.59 1.41l-5.44 5.44c.34.09.67.15 1.03.15 1.11 0 2.09-.46 2.82-1.18l.01.01 3-3-.01-.01C19.54 6.09 20 5.11 20 4zM5 14a1.003 1.003 0 001.71.71l8-8a1.003 1.003 0 00-1.42-1.42l-2 2-2 2-2 2-2 2c-.18.18-.29.43-.29.71z\"],\n \"list\": [\"M1.03 1C.46 1 0 1.46 0 2.03v.95C0 3.54.46 4 1.03 4h17.95C19.54 4 20 3.54 20 2.97v-.94C20 1.46 19.54 1 18.97 1H1.03zM0 17.97C0 18.54.46 19 1.03 19h17.95c.56 0 1.03-.46 1.03-1.03v-.95c0-.56-.46-1.03-1.03-1.03H1.03C.46 16 0 16.46 0 17.03v.94zM0 12.97C0 13.54.46 14 1.03 14h17.95c.56 0 1.03-.46 1.03-1.03v-.95c0-.56-.46-1.03-1.03-1.03H1.03C.46 11 0 11.46 0 12.03v.94zM0 7.97C0 8.54.46 9 1.03 9h17.95C19.54 9 20 8.54 20 7.97v-.94C20 6.46 19.54 6 18.97 6H1.03C.46 6 0 6.46 0 7.03v.94z\"],\n \"list-columns\": [\"M0 2.973v-.936C0 1.468.46 1.01 1.029 1H7.97C8.541 1 9 1.468 9 2.027v.946C9 3.542 8.53 4 7.971 4H1.03C.459 4 0 3.542 0 2.973zm0 5v-.936C0 6.468.46 6.01 1.029 6H7.97C8.541 6 9 6.468 9 7.027v.946C9 8.542 8.53 9 7.971 9H1.03C.459 9 0 8.542 0 7.973zm0 5v-.936C0 11.468.46 11.01 1.029 11H7.97C8.541 11 9 11.468 9 12.027v.946C9 13.542 8.53 14 7.971 14H1.03C.459 14 0 13.542 0 12.973zm0 5v-.936C0 16.468.46 16.01 1.029 16H7.97C8.541 16 9 16.468 9 17.027v.946C9 18.542 8.53 19 7.971 19H1.03C.459 19 0 18.542 0 17.973zm11-15v-.936c0-.569.46-1.027 1.029-1.037h6.942C19.541 1 20 1.468 20 2.027v.946C20 3.542 19.53 4 18.971 4H12.03C11.459 4 11 3.542 11 2.973zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942C19.541 6 20 6.468 20 7.027v.946C20 8.542 19.53 9 18.971 9H12.03C11.459 9 11 8.542 11 7.973zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942c.57 0 1.029.468 1.029 1.027v.946c0 .569-.47 1.027-1.029 1.027H12.03c-.57 0-1.029-.458-1.029-1.027zm0 5v-.936c0-.569.46-1.027 1.029-1.037h6.942c.57 0 1.029.468 1.029 1.027v.946c0 .569-.47 1.027-1.029 1.027H12.03c-.57 0-1.029-.458-1.029-1.027z\"],\n \"list-detail-view\": [\"M8 6H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM8 1H1c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm11 0h-7c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z\"],\n \"locate\": [\"M10 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm9 1h-1.07c-.45-3.61-3.32-6.45-6.93-6.91V1c0-.55-.45-1-1-1S9 .45 9 1v1.09C5.39 2.55 2.52 5.39 2.07 9H1c-.55 0-1 .45-1 1s.45 1 1 1h1.07c.45 3.61 3.32 6.45 6.93 6.91V19c0 .55.45 1 1 1s1-.45 1-1v-1.09c3.61-.46 6.48-3.29 6.93-6.91H19c.55 0 1-.45 1-1s-.45-1-1-1zm-4 2h.9a5.98 5.98 0 01-4.9 4.91V15c0-.55-.45-1-1-1s-1 .45-1 1v.91A5.98 5.98 0 014.1 11H5c.55 0 1-.45 1-1s-.45-1-1-1h-.9A5.98 5.98 0 019 4.09V5c0 .55.45 1 1 1s1-.45 1-1v-.91A5.98 5.98 0 0115.9 9H15c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"lock\": [\"M15.93 9H14V4.99c0-2.21-1.79-4-4-4s-4 1.79-4 4V9H3.93c-.55 0-.93.44-.93.99v8c0 .55.38 1.01.93 1.01h12c.55 0 1.07-.46 1.07-1.01v-8c0-.55-.52-.99-1.07-.99zM8 9V4.99c0-1.1.9-2 2-2s2 .9 2 2V9H8z\"],\n \"log-in\": [\"M19 0h-8c-.55 0-1 .45-1 1s.45 1 1 1h7v16h-7c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 10c0-.28-.11-.53-.29-.71l-5-5a1.003 1.003 0 00-1.42 1.42L11.59 9H1c-.55 0-1 .45-1 1s.45 1 1 1h10.59L8.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5-5c.18-.18.29-.43.29-.71z\"],\n \"log-out\": [\"M19.71 9.29l-5-5a1.003 1.003 0 00-1.42 1.42L16.59 9H6c-.55 0-1 .45-1 1s.45 1 1 1h10.59l-3.29 3.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l5-5c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM9 18H2V2h7c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"manual\": [\"M20 1.1a.976.976 0 00-.83-.88C15.15-.43 12.07.34 10 2.5 7.93.34 4.85-.43.84.22.37.3.03.67 0 1.1v15.01c0 .07 0 .14.01.21.09.52.61.88 1.15.79 3.85-.62 6.4.16 8 2.46.02.02.03.04.05.07.02.02.04.04.06.07l.01.01a1.07 1.07 0 00.28.19c.01 0 .01.01.02.01.03.01.07.03.1.04.01 0 .02.01.04.01.03.01.07.02.1.02.01 0 .02 0 .04.01H10c.04 0 .09 0 .13-.01.01 0 .03 0 .04-.01.03-.01.06-.01.1-.02.01 0 .03-.01.04-.01.03-.01.07-.02.1-.04.01 0 .02-.01.03-.01.07-.03.13-.07.19-.11.01 0 .01-.01.02-.01.02-.02.04-.03.06-.05.01-.01.02-.02.03-.02l.05-.05c.01-.01.02-.02.02-.03.01-.02.02-.03.04-.05 1.61-2.3 4.15-3.09 8-2.46.54.09 1.06-.26 1.15-.79-.01-.05 0-.09 0-.13V1.1zM9 16.63c-1.78-1.31-4.12-1.83-7-1.55V2c3.26-.37 5.51.39 7 2.35v12.28zm9-1.56c-2.88-.28-5.22.24-7 1.55V4.34c1.49-1.96 3.74-2.71 7-2.35v13.08z\"],\n \"manually-entered-data\": [\"M1 12h4.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm16.77-3.94l1.65-1.65c.36-.36.58-.86.58-1.41 0-1.1-.9-2-2-2-.55 0-1.05.22-1.41.59l-1.65 1.65 2.83 2.82zM1 4h12.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zM0 15c0 .55.45 1 1 1h.34l2-2H1c-.55 0-1 .45-1 1zm1-7h8.34l2-2H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 2h-.34l-2 2H19c.55 0 1-.45 1-1s-.45-1-1-1zm0 4h-4.34l-2 2H19c.55 0 1-.45 1-1s-.45-1-1-1zM4 19l4.41-1.59-2.81-2.79L4 19zM14.23 5.94l-7.65 7.65 2.83 2.83 7.65-7.65-2.83-2.83z\"],\n \"map\": [\"M19.54 4.18l.01-.02-6-4-.01.02C13.39.08 13.21 0 13 0s-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v14c0 .35.19.64.46.82l-.01.02 6 4 .01-.02c.15.1.33.18.54.18s.39-.08.54-.18l.01.02L13 16.2l5.45 3.63.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1V5c0-.35-.19-.64-.46-.82zM6 17.13l-4-2.67V2.87l4 2.67v11.59zm6-2.67l-4 2.67V5.54l4-2.67v11.59zm6 2.67l-4-2.67V2.87l4 2.67v11.59z\"],\n \"map-create\": [\"M18 9.22v7.91l-4-2.67V9.22c-.61-.55-1-1.33-1-2.22-.35 0-.69-.07-1-.18v7.65l-4 2.67V5.54l2.02-1.35c0-.06-.02-.13-.02-.19 0-1.66 1.34-3 3-3 0-.34.07-.66.17-.97C13.12.02 13.06 0 13 0c-.21 0-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v14c0 .35.19.64.46.82l-.01.02 6 4 .01-.02c.15.1.33.18.54.18s.39-.08.54-.18l.01.02L13 16.2l5.45 3.63.01-.02c.15.11.33.19.54.19.55 0 1-.45 1-1V6.82c-.31.11-.65.18-1 .18 0 .89-.39 1.67-1 2.22zM6 17.13l-4-2.67V2.87l4 2.67v11.59zM12 4c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1z\"],\n \"map-marker\": [\"M9.98 0c-3.87 0-7 2.98-7 6.67 0 3.68 7 13.33 7 13.33s7-9.65 7-13.33c0-3.68-3.14-6.67-7-6.67zm0 10c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"],\n \"maximize\": [\"M19 0h-5c-.55 0-1 .45-1 1s.45 1 1 1h2.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L18 3.41V6c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zM8 11c-.28 0-.53.11-.71.29L2 16.59V14c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1H3.41l5.29-5.29c.19-.18.3-.43.3-.71 0-.55-.45-1-1-1z\"],\n \"media\": [\"M15 9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-7H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 13l-6-5-2 2-4-5-4 8V4h16v11z\"],\n \"menu\": [\"M1 6h18c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1s.45 1 1 1zm18 3H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"menu-closed\": [\"M8 6h11c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM4 6c-.28 0-.53.11-.71.29l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3A1.003 1.003 0 005 13V7c0-.55-.45-1-1-1zm15 8H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0-5H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"menu-open\": [\"M12 9H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0 5H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm0-10H1c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm7.71 5.29l-3-3A1.003 1.003 0 0015 7v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"merge-columns\": [\"M6.71 6.29a1.003 1.003 0 00-1.42 1.42L6.59 9H2V2h5v2.18c.42.15.8.39 1.11.7l.01-.01.88.89V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-4.76l-.88.88-.01-.01c-.31.31-.69.56-1.11.71V18H2v-7h4.59L5.3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM19 0h-7c-.55 0-1 .45-1 1v4.76l.88-.88.01.01c.31-.31.69-.55 1.11-.7V2h5v7h-4.59l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L13.41 11H18v7h-5v-2.18c-.42-.15-.8-.39-1.11-.7l-.01.01-.88-.89V19c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"merge-links\": [\"M10 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm8-5c-.93 0-1.71.64-1.93 1.5H14V4c0-2.21-1.79-4-4-4S6 1.79 6 4v5.5H3.93C3.71 8.64 2.93 8 2 8c-1.1 0-2 .9-2 2s.9 2 2 2c.93 0 1.71-.64 1.93-1.5H6V16c0 2.21 1.79 4 4 4s4-1.79 4-4v-5.5h2.07c.22.86 1 1.5 1.93 1.5 1.1 0 2-.9 2-2s-.9-2-2-2zm-5 8c0 1.66-1.34 3-3 3s-3-1.34-3-3V4c0-1.66 1.34-3 3-3s3 1.34 3 3v12zM10 3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"minimize\": [\"M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zM20 1a1.003 1.003 0 00-1.71-.71L13 5.59V3c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1h-2.59l5.29-5.29c.19-.18.3-.43.3-.71z\"],\n \"minus\": [\"M16 9H4c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"mobile-phone\": [\"M15 0H5c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 19c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4-3H6V3h8v13z\"],\n \"mobile-video\": [\"M19 5c-.28 0-.53.11-.71.29L15 8.59V5c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h13c.55 0 1-.45 1-1v-3.59l3.29 3.29c.18.19.43.3.71.3.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z\"],\n \"modal\": [\"M19 1a1 1 0 011 1v16a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h18zm-1 4H2v12h16V5zm-3-3h-2v2h2V2zm3 0h-2v2h2V2z\"],\n \"modal-filled\": [\"M20 5v13a1 1 0 01-1 1H1a1 1 0 01-1-1V5h20zm-3-4h2a1 1 0 011 1v1h-3V1zm-2 2H0V2a1 1 0 011-1h14v2z\"],\n \"moon\": [\"M19 14.15A9.94 9.94 0 019.94 20C4.45 20 0 15.55 0 10.06 0 6.03 2.4 2.56 5.85 1a9.811 9.811 0 00-.88 4.09c0 5.49 4.45 9.94 9.94 9.94 1.46 0 2.84-.31 4.09-.88z\"],\n \"more\": [\"M3.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM17.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5zM10.5 8a2.5 2.5 0 100 5 2.5 2.5 0 100-5z\"],\n \"mountain\": [\"M20 16H4l7-11h1l2 2h1l5 9zm-4-5l-1.5-3h-1l-1-1-1-1L8 11.5l3-1.5 1 1 1-1 3 1zM8.055 8L2.79 16H0l7-8h1.055z\"],\n \"move\": [\"M19.71 9.29l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 9H11V3.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3C10.53.11 10.28 0 10 0s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 3.41V9H3.41L4.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 11H9v5.59L7.71 15.3A.965.965 0 007 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3a1.003 1.003 0 00-1.42-1.42L11 16.59V11h5.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\"],\n \"mugshot\": [\"M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18h-.07c-.05-.2-.12-.42-.22-.67-.46-1.05-2.68-1.75-4.16-2.4-1.48-.65-1.28-1.05-1.33-1.59-.01-.07-.01-.15-.01-.23.51-.45.92-1.07 1.19-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.34-.07.54-.44.61-.78.08-.14.23-.48.2-.87-.05-.5-.25-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5a3.67 3.67 0 00-1.29-1.86C11.7 3.25 10.81 3 10.02 3s-1.68.25-2.31.73c-.61.47-1.07 1.13-1.29 1.86-.05.16-.09.33-.11.5-.12.6-.17 1.51-.17 2.14v.08c-.24.09-.44.32-.49.83-.04.39.12.73.2.87.08.35.28.72.63.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.7 1.35 1.22 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.38 1.59-1.48.65-3.7 1.35-4.16 2.4-.12.27-.18.49-.23.69H2V2h16v16z\"],\n \"multi-select\": [\"M19 3H7c-.55 0-1 .45-1 1v1h12v6h1c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-6 6H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm-1 6H2v-4h10v4zm4-9H4c-.55 0-1 .45-1 1v1h12v6h1c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z\"],\n \"music\": [\"M19 0c-.08 0-.16.03-.24.05V.03l-12 3v.02C6.33 3.16 6 3.53 6 4v11.35c-.59-.22-1.27-.35-2-.35-2.21 0-4 1.12-4 2.5S1.79 20 4 20c1.94 0 3.55-.86 3.92-2H8V7.78l10-2.5v7.07c-.59-.22-1.27-.35-2-.35-2.21 0-4 1.12-4 2.5s1.79 2.5 4 2.5c1.94 0 3.55-.86 3.92-2H20V1c0-.55-.45-1-1-1z\"],\n \"new-drawing\": [\"M18.7 13.7c.5 0 1 .4 1 1 0 .257-.073.44-.22.614l-.08.086-4 4c-.2.2-.4.3-.7.3-.6 0-1-.5-1-1 0-.257.073-.44.22-.614L14 18l4-4c.2-.2.4-.3.7-.3zM1.8 0l8.378 2.982A3.003 3.003 0 0013 7a3.003 3.003 0 003.877 2.87l.723 2.53.049.06a.41.41 0 01.051.24c0 .167-.07.403-.208.593l-.092.107-4 4c-.2.2-.4.3-.7.3-.075 0-.15-.056-.225-.084L12.4 17.6l-7-2-.112-.042c-.223-.094-.431-.244-.542-.45L4.7 15 0 1.8l.5-.6L7 7.7c-.2.3-.3.6-.3 1 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2a1.68 1.68 0 00-.871.22L7.7 7 1.2.5l.6-.5zM16 0c.55 0 1 .45 1 1v2h2c.55 0 1 .45 1 1s-.45 1-1 1h-2v2c0 .432-.278.803-.664.941l-.01.004A.989.989 0 0116 8c-.55 0-1-.45-1-1V5h-2c-.55 0-1-.45-1-1l.007-.116C12.065 3.388 12.489 3 13 3h2V1c0-.55.45-1 1-1z\"],\n \"new-grid-item\": [\"M8 0H1C.45 0 0 .45 0 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm0 11H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1zm6 7h-1v-1c0-.55-.45-1-1-1s-1 .45-1 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1s-.45-1-1-1zm5-7h-2c-.55 0-1 .45-1 1s.45 1 1 1h1v1c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1zm0-11h-7c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-5 11h-2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1s1-.45 1-1v-1h1c.55 0 1-.45 1-1s-.45-1-1-1zm5 5c-.55 0-1 .45-1 1v1h-1c-.55 0-1 .45-1 1s.45 1 1 1h2c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1z\"],\n \"new-layer\": [\"M11.513 2.663A2 2 0 0013 6h1v1a2 2 0 104 0v-.733l1.5.833c.3.2.5.5.5.9s-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5C.2 8.7 0 8.4 0 8s.2-.7.5-.9l9-5c.2-.1.3-.1.5-.1s.3 0 .5.1l1.013.563zM17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2z\"],\n \"new-layers\": [\"M17 3h2a1 1 0 010 2h-2v2a1 1 0 01-2 0V5h-2a1 1 0 010-2h2V1a1 1 0 012 0v2zm-1.252 5.984L10.5 11.9c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5C.2 6.7 0 6.4 0 6s.2-.7.5-.9l9-5c.2-.1.3-.1.5-.1s.3 0 .5.1L13.92 2H13a2 2 0 100 4h1v1a2 2 0 001.748 1.984zm2.07-1.15C17.935 7.58 18 7.298 18 7V6h1c.353 0 .684-.091.972-.251.018.078.028.162.028.251 0 .4-.2.7-.5.9l-1.682.934zM19 9c.6 0 1 .4 1 1 0 .4-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5c-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .2 0 .3 0 .5.1l8.5 4.8 8.5-4.8c.2-.1.3-.1.5-.1zm0 4c.6 0 1 .4 1 1 0 .4-.2.7-.5.9l-9 5c-.2.1-.3.1-.5.1s-.3 0-.5-.1l-9-5c-.3-.2-.5-.5-.5-.9 0-.6.4-1 1-1 .2 0 .3 0 .5.2l8.5 4.7 8.5-4.8c.2-.1.3-.1.5-.1z\"],\n \"new-link\": [\"M14.5 12a2.5 2.5 0 00-2.45 2h-7.1a2.5 2.5 0 100 1h7.1a2.5 2.5 0 102.45-3zM19 5h-2V3c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V7h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"new-object\": [\"M12 4c0 .6.4 1 1 1h2v2c0 .6.4 1 1 1 .5 0 1-.4 1-1V5h2c.5 0 1-.4 1-1s-.5-1-1-1h-2V1c0-.6-.5-1-1-1-.6 0-1 .4-1 1v2h-2c-.6 0-1 .5-1 1zm7 3c0 1.7-1.3 3-3 3s-3-1.3-3-3c-1.7 0-3-1.3-3-3s1.3-3 3-3c0-.2 0-.4.1-.5-1-.3-2-.5-3.1-.5C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10c0-1.1-.2-2.1-.5-3H19z\"],\n \"new-person\": [\"M11.41 15.92c-1.46-.65-1.26-1.05-1.31-1.59-.01-.07-.01-.15-.01-.23.5-.45.91-1.07 1.18-1.78 0 0 .01-.04.02-.05.06-.15.11-.32.15-.48.33-.07.53-.44.6-.78.08-.14.23-.48.2-.87-.05-.5-.24-.73-.47-.82v-.09c0-.63-.06-1.55-.17-2.15-.02-.17-.06-.33-.11-.5-.22-.73-.67-1.4-1.27-1.86C9.58 4.25 8.7 4 7.92 4c-.78 0-1.66.25-2.28.73-.61.47-1.06 1.13-1.27 1.86-.05.16-.08.33-.11.5-.12.6-.18 1.51-.18 2.14v.08c-.23.09-.43.32-.48.83-.04.39.12.73.2.87.08.35.28.72.62.78.04.17.09.33.15.48 0 .01.01.02.01.03l.01.01c.27.72.69 1.35 1.21 1.8 0 .07-.01.14-.01.21-.05.54.1.94-1.36 1.59-1.46.65-3.66 1.35-4.11 2.4C-.14 19.38.04 20 .04 20h15.75s.18-.62-.27-1.67c-.45-1.06-2.65-1.75-4.11-2.41zM18.87 3h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"new-prescription\": [\"M11.95 10.23c.16-.18.22-.22.46-.22h1.48c.25 0 .47.08.59.33.1.2.09.41-.05.66l-2.71 3.58L14.88 19c.13.21.16.46.03.69-.12.21-.34.31-.57.31H12.7c-.31 0-.56-.17-.7-.44l-1.9-2.67-1.93 2.68c-.15.27-.42.43-.73.43H5.98c-.25 0-.47-.08-.59-.33-.1-.2-.09-.41.05-.66l3.09-4.35L4.26 9H3v4.32c0 .41-.3.69-.7.69H.7c-.41 0-.7-.28-.7-.69V.69C0 .28.3 0 .7 0h4.42c.71 0 1.36.1 1.94.3.59.2 1.11.49 1.54.87.44.38.78.84 1.02 1.39.25.54.37 1.13.37 1.77 0 1.01-.28 1.88-.84 2.6-.43.54-1.35 1.29-2 1.59l3.09 3.94 1.71-2.23zM4.71 6.04c.71 0 1.45-.16 1.81-.46.33-.28.5-.69.5-1.25s-.17-.97-.5-1.25c-.35-.3-1.1-.46-1.81-.46h-1.7v3.42h1.7zM19 3c.55 0 1 .45 1 1s-.45 1-1 1h-2v2c0 .55-.45 1-1 1s-1-.45-1-1V5h-2c-.55 0-1-.45-1-1s.45-1 1-1h2V1c0-.55.45-1 1-1s1 .45 1 1v2h2z\"],\n \"new-text-box\": [\"M19 3h-2V1c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V5h2c.55 0 1-.45 1-1s-.45-1-1-1zM5 7.5v1c0 .28.22.5.5.5s.5-.22.5-.5V8h2v7h-.5c-.28 0-.5.22-.5.5s.22.5.5.5h2c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H9V8h2v.5c0 .28.22.5.5.5s.5-.22.5-.5v-1c0-.28-.22-.5-.5-.5h-6c-.28 0-.5.22-.5.5zM16 9c-.55 0-1 .45-1 1v8H2V5h8c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1h15c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1z\"],\n \"ninja\": [\"M20 6s-2.98 2.43-6.12 2.19C13.52 5.31 12.05 0 6 0c0 0 2.41 2.99 2.16 6.12C5.27 6.49 0 7.97 0 14c0 0 2.98-2.43 6.11-2.19C6.47 14.69 7.94 20 14 20c0 0-2.42-2.99-2.16-6.13C14.73 13.51 20 12.02 20 6zm-10 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"],\n \"not-equal-to\": [\"M9.487 7l.532-3.196a1 1 0 011.962.392L11.513 7H16a1 1 0 010 2h-4.82l-.333 2H16a1 1 0 010 2h-5.487l-.532 3.196a1 1 0 01-1.962-.392L8.487 13H4a1 1 0 010-2h4.82l.333-2H4a1 1 0 110-2h5.487z\"],\n \"notifications\": [\"M10 20c1.1 0 2-.9 2-2H8c0 1.1.9 2 2 2zm7-5c-.55 0-1-.45-1-1V8c0-2.61-1.67-4.81-4-5.63V2c0-1.1-.9-2-2-2S8 .9 8 2v.37C5.67 3.19 4 5.39 4 8v6c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"notifications-updated\": [\"M10 20c1.1 0 2-.9 2-2H8c0 1.1.9 2 2 2zm2-17.834A2.994 2.994 0 008 4.99c0 .808.319 1.557.876 2.114l2.97 2.99a2.99 2.99 0 004.154.072V14c0 .55.45 1 1 1s1 .45 1 1-.45 1-1 1H3c-.55 0-1-.45-1-1s.45-1 1-1 1-.45 1-1V8c0-2.61 1.67-4.81 4-5.63V2c0-1.1.9-2 2-2s2 .9 2 2v.166zm1.26 6.514l-2.97-2.99a.973.973 0 01-.29-.7c0-.55.44-1 .99-1 .27 0 .52.11.7.29l2.28 2.28 4.27-4.27a.99.99 0 01.7-.29c.55 0 1 .45 1 1 0 .28-.11.53-.3.7l-4.98 4.98a.99.99 0 01-1.4 0z\"],\n \"numbered-list\": [\"M1.74 9.01h1.27V1h-.95c-.04.24-.12.45-.26.62-.13.17-.29.3-.47.41-.19.11-.4.18-.63.23-.23.04-.46.07-.71.07v1.03h1.75v5.65zm.43 7.93c.18-.14.37-.28.58-.43.21-.14.42-.29.63-.45.21-.16.41-.33.61-.5.2-.18.37-.38.52-.59.15-.21.28-.45.37-.7.09-.25.14-.54.14-.85 0-.25-.04-.52-.12-.8-.08-.28-.21-.54-.39-.78-.19-.24-.43-.44-.73-.59-.3-.17-.68-.25-1.12-.25-.41 0-.77.08-1.08.23-.32.16-.58.37-.8.64-.22.27-.38.59-.49.96-.11.37-.16.77-.16 1.21h1.19c.01-.28.03-.53.08-.77s.12-.45.21-.62c.09-.18.22-.31.38-.42.16-.1.35-.15.59-.15.26 0 .47.05.63.14.16.09.29.21.38.35.09.14.15.29.18.45.03.16.05.31.05.45-.01.31-.08.58-.22.81-.14.24-.32.45-.53.66-.22.2-.45.39-.71.57-.26.18-.51.36-.74.54-.5.36-.89.78-1.17 1.27-.3.47-.45 1.04-.46 1.69H5v-1.14H1.43c.05-.17.14-.33.27-.49.13-.15.29-.3.47-.44zM18 4.02H8c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-1c0-.56-.45-1-1-1zm0 9H8c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-1c0-.56-.45-1-1-1z\"],\n \"numerical\": [\"M2.39 5.75c-.17.21-.38.39-.63.52s-.52.23-.83.29c-.3.05-.61.08-.93.08v1.24h2.49V15h1.49V4.98H2.73c-.05.31-.17.57-.34.77zm17.2 4.71c-.27-.44-.65-.71-1.14-.82v-.02c.42-.16.72-.43.92-.79.2-.36.29-.79.29-1.27 0-.42-.08-.8-.23-1.12-.15-.33-.36-.59-.62-.8-.26-.21-.55-.37-.87-.48-.32-.11-.65-.16-.98-.16-.43 0-.82.08-1.16.25-.34.16-.63.39-.87.69-.24.29-.43.64-.57 1.04-.14.4-.22.83-.23 1.3h1.39c-.01-.25.02-.49.07-.72.06-.23.14-.44.26-.63s.27-.34.45-.45c.18-.11.39-.17.63-.17.39 0 .71.12.96.37s.37.58.37.99c0 .29-.05.54-.16.74-.11.2-.25.36-.43.47-.18.11-.38.19-.61.24-.23.05-.46.06-.68.05v1.17c.28-.01.55 0 .81.03s.5.1.71.21c.21.11.38.28.51.5.13.22.2.52.2.89 0 .55-.16.97-.47 1.27-.31.3-.7.45-1.17.45-.55 0-.95-.19-1.23-.58-.27-.39-.4-.88-.38-1.46h-1.39c.01.5.08.96.21 1.38.13.41.32.77.57 1.06.25.29.56.52.93.68.37.16.8.24 1.3.24.41 0 .79-.07 1.16-.21.37-.14.69-.33.96-.58.28-.25.5-.56.66-.92a3 3 0 00.24-1.23c0-.64-.14-1.17-.41-1.61zM8.58 12.41c.21-.18.45-.36.7-.53.25-.18.5-.36.75-.56.25-.2.49-.41.73-.63.23-.22.44-.47.63-.74.18-.27.33-.56.44-.88.11-.32.16-.67.16-1.07 0-.32-.05-.65-.14-1-.09-.35-.25-.68-.47-.97-.22-.3-.51-.55-.87-.74-.36-.2-.81-.29-1.35-.29-.49 0-.93.1-1.3.29-.37.18-.69.44-.95.78-.26.33-.45.73-.58 1.2-.13.46-.2.96-.2 1.5h1.43c.01-.35.04-.67.09-.97.05-.3.14-.56.25-.78.11-.22.26-.39.45-.52s.43-.19.71-.19c.31 0 .56.06.75.18.19.12.34.26.45.43.11.17.18.36.22.56.04.2.06.39.06.57-.01.38-.1.72-.26 1.02-.15.3-.37.57-.63.83-.26.25-.54.49-.85.71-.31.22-.61.45-.89.68-.6.45-1.06.98-1.41 1.58-.35.61-.52 1.32-.53 2.13h6.01v-1.43H7.69c.06-.21.17-.42.33-.61s.34-.38.56-.55z\"],\n \"office\": [\"M19 6h-5V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h4v-6h4v6h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM6 12H2V8h4v4zm0-6H2V2h4v4zm6 6H8V8h4v4zm0-6H8V2h4v4zm6 11h-4v-3h4v3zm0-5h-4V8h4v4z\"],\n \"offline\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zM7 18l2-7H5l8-9-2 7h4l-8 9z\"],\n \"oil-field\": [\"M19 17.99h-1.36l-4.35-9.57 2.91-.86 1.66 4.1c.11.27.43.4.72.31.12-.04.22-.11.28-.2.06-.11 1.47-2.08 1.05-5.6C19.79 5.12 19.3 0 16.01 0 14.89.01 13.99.83 14 1.84c0 .19.04.38.1.56l1.34 3.31L.72 10.03v.02c-.41.12-.72.49-.72.94 0 .55.45 1 1 1 .1 0 .19-.03.28-.06v.02l2-.59 1.47 6.63H3c-.55 0-1 .45-1 1s.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1zM5.2 10.8l3.95-1.16-2.83 6.22L5.2 10.8zm2.35 7.19l3.95-8.68 3.95 8.68h-7.9z\"],\n \"one-column\": [\"M14.94 0h-4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-8 6c-.28 0-.53.11-.71.29l-3 3c-.18.18-.29.43-.29.71s.11.53.29.71l3 3A1.003 1.003 0 007.94 13V7c0-.55-.45-1-1-1z\"],\n \"outdated\": [\"M10 0c5.52 0 10 4.48 10 10s-4.48 10-10 10S0 15.52 0 10c0-.55.45-1 1-1s1 .45 1 1c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8C7.47 2 5.22 3.17 3.76 5H5c.55 0 1 .45 1 1s-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1s1 .45 1 1v2.05C3.82 1.6 6.71 0 10 0zm1 16H9v-2h2v2zm0-3H9V4h2v9z\"],\n \"page-layout\": [\"M19 1H1c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM7 17H2V8h5v9zm11 0H8V8h10v9zm0-10H2V3h16v4z\"],\n \"panel-stats\": [\"M1 1h18a1 1 0 011 1v15a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm1 2v13h16V3H2zm9 0h1v13h-1V3zm2 7h3.952v1H13v-1zm0 2h3.952v1H13v-1zm0 2h3.952v1H13v-1zm0-6h3.952v1H13V8zm0-2h3.952v1H13V6zm0-2h3.952v1H13V4z\"],\n \"panel-table\": [\"M19 1H1c-.6 0-1 .4-1 1v15c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zm-9 11H7V9h3v3zm0-4H7V5h3v3zm-8 8V3h4v13H2zm5 0v-3h3v3H7zm11 0h-7v-3h7v3zm0-4h-7V9h7v3zm0-4h-7V5h7v3z\"],\n \"paperclip\": [\"M18.35 2.67A5.664 5.664 0 0014.33 1c-1.44 0-2.89.56-3.99 1.67l-9.16 9.27C.4 12.73 0 13.78 0 14.83s.39 2.1 1.18 2.9c.78.79 1.82 1.18 2.85 1.18 1.04 0 2.07-.39 2.87-1.2l9.14-9.27c.96-.96.96-2.5.02-3.45-.94-.95-2.49-.96-3.44 0l-7.59 7.69c-.31.32-.3.83.01 1.14.31.31.81.31 1.13.02l7.59-7.69c.31-.31.84-.31 1.13-.02.31.31.31.85 0 1.16l-9.14 9.27c-.93.95-2.54.93-3.45.02-.94-.95-.92-2.55.02-3.49l9.16-9.25c1.55-1.56 4.18-1.59 5.72-.03 1.56 1.57 1.55 4.26 0 5.82l-8.89 9.02c-.3.31-.3.81.01 1.11.3.3.79.31 1.1.01v.01l8.91-9.02A5.645 5.645 0 0020 6.73c0-1.48-.55-2.94-1.65-4.06z\"],\n \"paragraph\": [\"M16.5 1H7C4.2 1 2 3.2 2 6s2.2 5 5 5v6.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V4h2v13.5c0 .8.7 1.5 1.5 1.5s1.5-.7 1.5-1.5V4h1.5c.8 0 1.5-.7 1.5-1.5S17.3 1 16.5 1z\"],\n \"path\": [\"M18 0H2C.9 0 0 .9 0 2s.9 2 2 2h7v4H4c-1.1 0-2 .9-2 2s.9 2 2 2h5v4H6c-1.1 0-2 .9-2 2s.9 2 2 2h8c1.1 0 2-.9 2-2s-.9-2-2-2h-3v-4h5c1.1 0 2-.9 2-2s-.9-2-2-2h-5V4h7c1.1 0 2-.9 2-2s-.9-2-2-2z\"],\n \"path-search\": [\"M4 7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 11.69l-5-2.5v-3.63c-.32.11-.66.22-1 .29v3.32l-6 2.57v-7.25c-.36-.27-.69-.57-1-.9v8.1l-5-2.5V10c.55 0 1-.45 1-1s-.45-1-1-1V1.31l3.43 1.71c.11-.31.24-.62.39-.92L.72.05A.545.545 0 00.5 0C.22 0 0 .22 0 .5v16c0 .2.12.36.28.44l6 3c.07.04.14.06.22.06.07 0 .14-.01.2-.04l6.79-2.91 5.79 2.9c.07.03.14.05.22.05.28 0 .5-.22.5-.5v-4.21c-.31.13-.64.21-1 .21v3.19zM10 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3-1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6.72-.94l-1.43-.72c.2.43.36.89.48 1.36l.23.11V5.5c-.55 0-1 .45-1 1s.45 1 1 1v1.96l1 1V3.5c0-.2-.12-.36-.28-.44zm-3.69 5.56c.14-.21.27-.42.38-.65.02-.04.04-.07.05-.11.11-.22.2-.45.28-.69v-.01c.07-.24.13-.48.17-.73l.03-.17c.04-.25.06-.5.06-.76C17 2.46 14.54 0 11.5 0S6 2.46 6 5.5 8.46 11 11.5 11c.26 0 .51-.02.76-.06l.17-.03c.25-.04.49-.1.73-.17h.01c.24-.08.47-.17.69-.28.04-.02.07-.03.11-.05.23-.11.44-.24.65-.38l.18.18 3.5 3.5c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71l-3.68-3.67zm-4.53.88c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\"],\n \"pause\": [\"M7 3H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm9 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"people\": [\"M16.94 17a4.92 4.92 0 00-.33-1.06c-.45-.97-1.37-1.52-3.24-2.3-.17-.07-.76-.31-.77-.32-.1-.04-.2-.08-.28-.12.05-.14.04-.29.06-.45 0-.05.01-.11.01-.16-.25-.21-.47-.48-.65-.79.22-.34.41-.71.56-1.12l.04-.11c-.01.02-.01.02-.02.08l.06-.15c.36-.26.6-.67.72-1.13.18-.37.29-.82.25-1.3-.05-.5-.21-.92-.47-1.22-.02-.53-.06-1.11-.12-1.59.38-.17.83-.26 1.24-.26.59 0 1.26.19 1.73.55.46.35.8.85.97 1.4.04.13.07.25.08.38.08.45.13 1.14.13 1.61v.07c.16.07.31.24.35.62.02.29-.09.55-.15.65-.05.26-.2.53-.46.59-.03.12-.07.25-.11.36-.01.01-.01.04-.01.04-.2.53-.51 1-.89 1.34 0 .06 0 .12.01.17.04.41-.11.71 1 1.19 1.1.5 2.77 1.01 3.13 1.79.34.79.2 1.25.2 1.25h-3.04zm-5.42-3.06c1.47.66 3.7 1.35 4.18 2.39.45 1.05.27 1.67.27 1.67H.04s-.19-.62.27-1.67c.46-1.05 2.68-1.75 4.16-2.4 1.48-.65 1.33-1.05 1.38-1.59 0-.07.01-.14.01-.21-.52-.45-.95-1.08-1.22-1.8l-.01-.01c0-.01-.01-.02-.01-.03-.07-.15-.12-.32-.16-.49-.34-.06-.54-.43-.62-.78-.08-.14-.24-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.64.05-1.55.17-2.15a3.648 3.648 0 011.4-2.36C6.32 2.25 7.21 2 8 2s1.68.25 2.31.73a3.63 3.63 0 011.4 2.36c.11.6.17 1.52.17 2.15v.09c.22.09.42.32.47.82.03.39-.12.73-.2.87-.07.34-.27.71-.61.78-.04.16-.09.33-.15.48-.01.01-.02.05-.02.05-.27.71-.68 1.33-1.19 1.78 0 .08 0 .16.01.23.05.55-.15.95 1.33 1.6z\"],\n \"percentage\": [\"M15 10c-1.66 0-3 1.34-3 3v2c0 1.66 1.34 3 3 3s3-1.34 3-3v-2c0-1.66-1.34-3-3-3zm1 5c0 .55-.45 1-1 1s-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2zM8 7V5c0-1.66-1.34-3-3-3S2 3.34 2 5v2c0 1.66 1.34 3 3 3s3-1.34 3-3zM4 7V5c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1zm11-4a1.003 1.003 0 00-1.88-.48L5.14 16.49a1.003 1.003 0 101.74.99l7.99-13.97c.08-.15.13-.32.13-.51z\"],\n \"person\": [\"M19.61 17.91c-.57-1.32-3.35-2.19-5.19-3.01-1.85-.82-1.59-1.31-1.66-1.99-.01-.09-.01-.19-.02-.29.63-.56 1.15-1.33 1.49-2.22 0 0 .02-.05.02-.06.07-.19.13-.39.19-.6.42-.09.67-.55.76-.98.1-.17.29-.6.25-1.08-.06-.62-.31-.91-.59-1.03v-.11c0-.79-.07-1.93-.22-2.68A4.55 4.55 0 0012.9.92C12.11.32 11 0 10.01 0s-2.1.32-2.89.92a4.55 4.55 0 00-1.74 2.94c-.14.75-.22 1.89-.22 2.68v.1c-.29.11-.55.4-.61 1.04-.04.48.15.91.25 1.08.1.44.35.91.79.98.05.21.12.41.19.6 0 .01.01.03.01.04l.01.02c.34.91.87 1.69 1.52 2.25 0 .09-.01.18-.02.26-.07.68.13 1.17-1.72 1.99S.96 16.59.39 17.91C-.18 19.23.05 20 .05 20h19.9s.23-.77-.34-2.09z\"],\n \"phone\": [\"M19.91 15.51c-.08-.08-4.21-2.5-4.35-2.57a.876.876 0 00-.4-.1c-.19 0-.42.13-.71.4-.28.27-1.17 1.49-1.43 1.76s-.48.4-.65.4c-.08 0-.19-.02-.32-.07s-1.45-.73-4.2-3.15-3.11-4-3.13-4.44c0-.17.13-.39.4-.65.28-.25.57-.51.89-.74.32-.24.61-.5.88-.78s.4-.52.4-.71c0-.13-.03-.27-.1-.4C7.12 4.32 4.62.19 4.53.1c-.19-.18-.92-.1-1.29.1C.25 1.82 0 4 .05 4.86c.05.89.61 5.58 5.2 9.93 5.7 5.41 9.66 5.2 9.92 5.2.87 0 3.52-.48 4.65-3.19.16-.38.31-1.07.09-1.29z\"],\n \"pie-chart\": [\"M9 .98c-4.5.5-8 4.31-8 8.94 0 4.97 4.03 9.04 9 9.04 4.63 0 8.44-3.96 8.94-7.96H9V.98z\",\n \"M10-.08V10h10C20 4 15.52-.08 10-.08z\"],\n \"pin\": [\"M11.77 1.16c-.81.81-.74 2.28.02 3.76L6.1 8.71c-2.17-1.46-4.12-2-4.94-1.18l4.95 4.95-4.95 6.36 6.36-4.95 4.95 4.95c.82-.82.27-2.77-1.19-4.94l3.8-5.69c1.47.76 2.94.84 3.76.02l-7.07-7.07z\"],\n \"pivot\": [\"M5.83 9.75L.29 15.29a1.003 1.003 0 001.42 1.42l5.54-5.54c-.57-.37-1.05-.85-1.42-1.42zM19 11c-.55 0-1 .45-1 1v1.59l-3.83-3.83c-.37.56-.85 1.04-1.41 1.41L16.59 15H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm-5-4c0-2.21-1.79-4-4-4S6 4.79 6 7s1.79 4 4 4 4-1.79 4-4zm-4 2c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"],\n \"pivot-table\": [\"M3 5H1c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm0-5H1C.45 0 0 .45 0 1v2c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm13.71 5.29C16.53 5.11 16.28 5 16 5s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L15 8.41V11c0 2.21-1.79 4-4 4H8.41l1.29-1.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L8.41 17H11c3.31 0 6-2.69 6-6V8.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zM19 0H6c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"play\": [\"M16 10c0-.36-.2-.67-.49-.84l.01-.01-10-6-.01.01A.991.991 0 005 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .19 0 .36-.07.51-.16l.01.01 10-6-.01-.01c.29-.17.49-.48.49-.84z\"],\n \"plus\": [\"M16 9h-5V4c0-.55-.45-1-1-1s-1 .45-1 1v5H4c-.55 0-1 .45-1 1s.45 1 1 1h5v5c0 .55.45 1 1 1s1-.45 1-1v-5h5c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"polygon-filter\": [\"M18 7c-.27 0-.52.05-.75.15l-6.28-4.88c.01-.09.03-.18.03-.27 0-1.1-.9-2-2-2S7 .9 7 2c0 .06.01.12.02.19l-4.19 3C2.57 5.07 2.29 5 2 5 .9 5 0 5.9 0 7c0 .74.4 1.38 1 1.72v7.55c-.6.35-1 .99-1 1.73 0 1.1.9 2 2 2 .74 0 1.38-.4 1.72-1h7.55c.35.6.98 1 1.72 1 1.1 0 2-.9 2-2 0-.37-.11-.72-.29-1.02L18.03 11A2 2 0 0018 7zm-5.03 9c-.72.01-1.35.41-1.69 1H3.72c-.17-.3-.42-.55-.72-.72V8.72c.6-.34 1-.98 1-1.72 0-.06-.01-.12-.02-.19l4.19-3c.26.12.54.19.83.19.27 0 .52-.05.75-.15l6.28 4.88c-.01.09-.03.18-.03.27 0 .37.11.72.29 1.02L12.97 16z\"],\n \"power\": [\"M10 10c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1S9 .45 9 1v8c0 .55.45 1 1 1zm3-7.45v2.16c2.36 1.12 4 3.5 4 6.29 0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.79 1.64-5.17 4-6.29V2.55C3.51 3.79 1 7.09 1 11a9 9 0 0018 0c0-3.91-2.51-7.21-6-8.45z\"],\n \"predictive-analysis\": [\"M20 8.01c0-1.26-.61-2.43-1.61-3.12C17.86 2.5 15.8.79 13.4.79c-.58 0-1.14.1-1.69.29A3.533 3.533 0 009.17 0C8.05 0 7 .55 6.32 1.45c-.15-.02-.3-.03-.45-.03-1.63 0-3.03 1.12-3.46 2.71C.97 4.65 0 6.05 0 7.66c0 .48.09.95.26 1.4-.17.44-.26.91-.26 1.39 0 1.38.72 2.64 1.89 3.29.67.7 1.59 1.09 2.54 1.09.61 0 1.19-.15 1.71-.45.68.82 1.68 1.3 2.73 1.3.66 0 1.28-.18 1.83-.52.61.49 1.34.81 2.11.91 1.3 1.43 2.3 3.28 2.31 3.3 0 0 .35.61.33.61.96-.01 1.77-.2 1.64-1.3.01.02-.92-2.89-.92-2.89.52-.26.94-.69 1.21-1.23 1.12-.66 1.84-1.91 1.84-3.26 0-.3-.03-.6-.1-.89.57-.64.88-1.51.88-2.4zm-1.54 1.28l-.18-.2-.77-.84c-.33-.37-.67-1.17-.73-1.73 0 0-.13-1.25-.13-1.26-.06-.74-1.17-.73-1.13.14 0 .02.13 1.26.13 1.26.04.36.15.77.3 1.17-.08-.01-.15-.02-.22-.02 0 0-2.57-.12-2.57-.13-.73-.03-.89 1.22-.05 1.25l2.57.13c.53.03 1.29.37 1.61.72l.61.67.02.06c.1.27.14.55.14.83 0 .93-.51 1.77-1.34 2.18l-.2.1-.09.23c-.19.48-.6.82-1.1.93l-.67.14.87 2.75c-.48-.76-1.19-1.79-2.02-2.67l-.15-.16-.21-.02c-.51-.04-.99-.21-1.42-.48l1.7-1.48c.44-.39 1.04-.55 1.24-.49 0 0 .78.22.78.23.78.2 1.03-.92.29-1.21l-.78-.23c-.69-.2-1.67.22-2.24.72l-1.91 1.66-.39.32c-.44.36-.93.55-1.5.55-.8 0-1.54-.41-1.97-1.07v-1.88c0-.5.21-.98.34-1.07 0 0 .65-.43.64-.43.87-.69.21-1.57-.64-1.14 0-.01-.65.43-.65.43-.31.2-.54.56-.7.97-.13-.13-.28-.25-.43-.35 0 0-1.91-1.26-1.91-1.28-.81-.56-1.5.63-.61 1.11 0-.02 1.89 1.28 1.89 1.28.46.31.77.97.77 1.36v.84c-.43.24-.78.36-1.24.36-.67 0-1.31-.29-1.77-.79l-.07-.08-.09-.05a2.425 2.425 0 01-1.31-2.16c0-.38.09-.74.25-1.08l.15-.31-.14-.33c-.17-.34-.25-.7-.25-1.08 0-1.13.76-2.1 1.85-2.37l.39-.09.07-.43a2.41 2.41 0 012.39-2.05c.19 0 .39.02.58.07l.4.1.22-.38A2.41 2.41 0 019.17 1.3c.55 0 1.08.19 1.5.53l-.44.45-.01-.01-.31.31c-.41.35-.92.53-1.11.5 0 0-.84-.13-.84-.14-.83-.15-1.09 1.08-.18 1.29.01 0 .84.14.84.14.03 0 .06 0 .09.01-.14.46-.18.96-.12 1.4 0 0 .21 1.24.19 1.23.13.65 1.32.44 1.16-.22 0-.01-.19-1.23-.19-1.23-.07-.48.15-1.19.45-1.5l.48-.5c.07-.06.13-.12.19-.18l.93-.95c.5-.23 1.04-.34 1.59-.34 1.93 0 3.57 1.4 3.89 3.34l.05.31.26.15a2.445 2.445 0 01.87 3.4z\"],\n \"prescription\": [\"M13.95 10.23c.16-.18.22-.22.46-.22h1.48c.25 0 .47.08.59.33.1.2.09.41-.05.66l-2.71 3.58L16.88 19c.13.21.16.46.03.69-.12.21-.34.31-.57.31H14.7c-.31 0-.56-.17-.7-.44l-1.9-2.67-1.93 2.68c-.15.27-.42.43-.73.43H7.98c-.25 0-.47-.08-.59-.33-.1-.2-.09-.41.05-.66l3.09-4.35L6.26 9H5v4.32c0 .41-.3.69-.7.69H2.7c-.41 0-.7-.28-.7-.69V.69c0-.41.3-.69.7-.69h4.42c.71 0 1.36.1 1.94.3.59.2 1.11.49 1.54.87.44.38.78.84 1.02 1.39.24.54.36 1.14.36 1.78 0 1.01-.28 1.88-.84 2.6-.43.54-1.35 1.29-2 1.59l3.09 3.94 1.72-2.24zM6.71 6.04c.71 0 1.45-.16 1.81-.46.33-.28.5-.69.5-1.25s-.17-.97-.5-1.25c-.35-.3-1.1-.46-1.81-.46h-1.7v3.42h1.7z\"],\n \"presentation\": [\"M19 1h-8c0-.55-.45-1-1-1S9 .45 9 1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v11c0 .55.45 1 1 1h4.59L4.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L9 16.41V19c0 .55.45 1 1 1s1-.45 1-1v-2.59l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L12.41 15H17c.55 0 1-.45 1-1V3h1c.55 0 1-.45 1-1s-.45-1-1-1zm-3 12H4V3h12v10z\"],\n \"print\": [\"M14 16H6v-4H4v5c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-5h-2v4zm2-13c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h12V3zm3 2H1c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h2v-3h14v3h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 4h-2V7h2v2z\"],\n \"projects\": [\"M18 4c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h16V4zm-2-3c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v1h12V1zm3 6H1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-5 7c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-2h1v2h6v-2h1v2z\"],\n \"properties\": [\"M2 15c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5-4h12c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zM2 1C.9 1 0 1.9 0 3s.9 2 2 2 2-.9 2-2-.9-2-2-2zm17 8H7c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm0 7H7c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"property\": [\"M3 5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm5-1h11c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM3 15c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm16 1H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm-1-8H9c-1.1 0-2 .9-2 2s.9 2 2 2h9c1.1 0 2-.9 2-2s-.9-2-2-2zM3 7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"],\n \"publish-function\": [\"M7.01 10.11c.35-.64.72-1.68 1.09-3.11l.8-3.03h.96l.24-.77h-.99c.28-1.11.66-1.92 1.12-2.43.28-.32.56-.48.83-.48.05 0 .1.02.13.05.03.03.05.07.05.12 0 .04-.04.13-.11.25-.08.12-.11.24-.11.35 0 .15.06.28.18.39.12.11.27.16.45.16.2 0 .36-.07.49-.2s.2-.31.2-.54c0-.26-.1-.47-.3-.63-.2-.16-.52-.24-.96-.24-.68 0-1.3.19-1.86.58-.55.38-1.08 1.02-1.58 1.91-.17.3-.34.5-.49.59-.15.08-.4.13-.74.12l-.23.77h.95L5.74 9.21c-.23.86-.39 1.39-.47 1.59-.12.29-.3.54-.54.75-.1.08-.21.12-.35.12-.04 0-.07-.01-.1-.03l-.03-.04c0-.02.03-.07.1-.13.07-.07.1-.17.1-.31 0-.15-.05-.28-.16-.38-.11-.1-.27-.15-.47-.15-.25 0-.44.07-.59.2-.15.12-.23.28-.23.46 0 .19.09.36.27.5.19.14.47.21.86.21.61 0 1.16-.15 1.63-.46.48-.31.89-.79 1.25-1.43zm3.7 1.18c-.18-.18-.43-.29-.71-.29s-.53.11-.71.29l-3 3a1.003 1.003 0 001.42 1.42L9 14.41V19c0 .55.45 1 1 1s1-.45 1-1v-4.59l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-3-3zm4.15-6.78c.17-.13.36-.2.55-.2.07 0 .2.03.39.08s.36.08.5.08c.2 0 .37-.07.5-.2.13-.14.2-.31.2-.52 0-.22-.07-.4-.2-.53s-.33-.2-.58-.2c-.22 0-.43.05-.63.15-.2.1-.45.32-.75.67-.23.25-.56.7-1.01 1.33a6.52 6.52 0 00-.91-2.15l-2.38.39-.05.25c.18-.03.33-.05.45-.05.24 0 .43.1.59.3.25.31.59 1.24 1.02 2.79-.34.44-.58.73-.7.87-.21.22-.38.36-.52.43-.1.05-.22.08-.35.08-.1 0-.26-.05-.49-.16a1.01 1.01 0 00-.42-.11c-.23 0-.42.07-.57.22-.17.14-.24.32-.24.55 0 .21.07.38.21.51.14.13.33.2.56.2.23 0 .44-.05.64-.14.2-.09.45-.29.75-.59s.72-.78 1.25-1.43c.2.62.38 1.07.53 1.35.15.28.32.49.52.61.19.12.44.19.73.19.28 0 .57-.1.86-.3.38-.25.77-.69 1.17-1.31l-.25-.14c-.27.37-.48.6-.61.69-.09.06-.19.09-.31.09-.14 0-.28-.09-.42-.26-.23-.29-.54-1.09-.93-2.4.37-.58.66-.96.9-1.14z\"],\n \"pulse\": [\"M19 10h-2.38L14.9 6.55h-.01c-.17-.32-.5-.55-.89-.55-.43 0-.79.28-.93.66h-.01l-2.75 7.57L7.98 1.82h-.02A.978.978 0 007 1c-.44 0-.8.29-.94.69h-.01L3.28 10H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.44 0 .8-.29.94-.69h.01l1.78-5.34 2.29 12.21h.02c.08.46.47.82.96.82.43 0 .79-.28.93-.66h.01l3.21-8.82.96 1.92h.01c.16.33.49.56.88.56h3c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"random\": [\"M14.47 5h2.12L15.3 6.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 3H14c-.31 0-.57.15-.76.37l-.01-.01-2.93 3.52 1.3 1.56L14.47 5zm2.24 7.29a1.003 1.003 0 00-1.42 1.42l1.3 1.29h-2.12L4.77 3.36l-.01.01A.998.998 0 004 3H1c-.55 0-1 .45-1 1s.45 1 1 1h2.53l9.7 11.64.01-.01c.19.22.45.37.76.37h2.59l-1.29 1.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3zM3.53 15H1c-.55 0-1 .45-1 1s.45 1 1 1h3c.31 0 .57-.15.76-.37l.01.01 2.93-3.52-1.3-1.56L3.53 15z\"],\n \"record\": [\"M10 3a7 7 0 100 14 7 7 0 100-14z\"],\n \"redo\": [\"M19.71 5.29l-4-4a1.003 1.003 0 00-1.42 1.42L16.59 5H6c-3.31 0-6 2.69-6 6s2.69 6 6 6h5v-2H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h10.59L14.3 9.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM15 14c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"],\n \"refresh\": [\"M19 1c-.55 0-1 .45-1 1v2.06C16.18 1.61 13.29 0 10 0 4.48 0 0 4.48 0 10c0 .55.45 1 1 1s1-.45 1-1c0-4.42 3.58-8 8-8 2.52 0 4.76 1.18 6.22 3H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 8c-.55 0-1 .45-1 1 0 4.42-3.58 8-8 8-2.52 0-4.76-1.18-6.22-3H5c.55 0 1-.45 1-1s-.45-1-1-1H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1v-2.06C3.82 18.39 6.71 20 10 20c5.52 0 10-4.48 10-10 0-.55-.45-1-1-1z\"],\n \"regression-chart\": [\"M19 16H3.1L19.31 3.39l-.61-.79L2 15.59V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm-9-9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-5 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm10-2c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-5 4c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z\"],\n \"remove\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm5-9H5c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"remove-column\": [\"M19 0H5c-.55 0-1 .45-1 1v4h2V2h5v16H6v-3H4v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18h-5V2h5v16zM6.29 13.71a1.003 1.003 0 001.42-1.42L5.41 10 7.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L4 8.59l-2.29-2.3A1.003 1.003 0 00.29 7.71L2.59 10 .3 12.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L4 11.41l2.29 2.3z\"],\n \"remove-column-left\": [\"M4 11h6c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-7 18H2V2h10v16zm6 0h-5V2h5v16z\"],\n \"remove-column-right\": [\"M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM7 18H2V2h5v16zm11 0H8V2h10v16zm-8-7h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1z\"],\n \"remove-row-bottom\": [\"M7 14h6c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zM19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V8h16v10zm0-11H2V2h16v5z\"],\n \"remove-row-top\": [\"M7 8h6c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1zm12-8H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2v-5h16v5zm0-6H2V2h16v10z\"],\n \"repeat\": [\"M14 6c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1v2.05C16.18 1.6 13.29 0 10 0 4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10c0-.55-.45-1-1-1s-1 .45-1 1c0 4.42-3.58 8-8 8s-8-3.58-8-8 3.58-8 8-8c2.53 0 4.77 1.17 6.24 3H15c-.55 0-1 .45-1 1z\"],\n \"reset\": [\"M6 6c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1s1 .45 1 1v2.05C3.82 1.6 6.71 0 10 0c5.52 0 10 4.48 10 10s-4.48 10-10 10S0 15.52 0 10c0-.55.45-1 1-1s1 .45 1 1c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8C7.47 2 5.23 3.17 3.76 5H5c.55 0 1 .45 1 1z\"],\n \"resolve\": [\"M8.7 4.7C7.9 4.2 7 4 6 4c-3.3 0-6 2.7-6 6s2.7 6 6 6c1 0 1.9-.2 2.7-.7C7.3 14 6.5 12.1 6.5 10s.9-4 2.2-5.3zM14 4c-1 0-1.9.2-2.7.7 1.4 1.4 2.2 3.2 2.2 5.3s-.9 4-2.2 5.3c.8.5 1.7.7 2.7.7 3.3 0 6-2.7 6-6s-2.7-6-6-6zm-4 1.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z\"],\n \"rig\": [\"M7 4.2C7 5.75 8.34 7 10 7s3-1.46 3-2.8C13 1.45 10.94 0 10 0H6c0 2.74 3.76 1.96 1 4.2zm11.71 14.09L13 12.59V9.01c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v3.58l-5.71 5.7a1.003 1.003 0 001.42 1.42L7 15.42V19c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-3.58l4.29 4.29a1.003 1.003 0 001.42-1.42zM10.21 8c.01 0 .01.01 0 0 .01.01.01 0 0 0z\"],\n \"right-join\": [\"M8.7 4.7C7.4 6 6.5 7.9 6.5 10s.8 4 2.2 5.3c-.8.5-1.7.7-2.7.7-3.3 0-6-2.7-6-6s2.7-6 6-6c1 0 1.9.2 2.7.7zm-3.34 9.25c-.55-1.2-.86-2.54-.86-3.95s.31-2.75.86-3.95a4.001 4.001 0 000 7.9zM14 4c3.3 0 6 2.7 6 6s-2.7 6-6 6c-1 0-1.9-.2-2.7-.7 1.3-1.3 2.2-3.2 2.2-5.3s-.8-3.9-2.2-5.3C12.1 4.2 13 4 14 4zm-4 1.5C8.8 6.7 8 8.2 8 10s.8 3.3 2 4.4c1.2-1.1 2-2.7 2-4.5s-.8-3.3-2-4.4z\"],\n \"ring\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"],\n \"rotate-document\": [\"M8.71 6.29A.997.997 0 008 6H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-8c0-.28-.11-.53-.29-.71l-4-4zM11 18H4V8h3v3c0 .55.45 1 1 1h3v6zm3-16h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C9.11 2.47 9 2.72 9 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4z\"],\n \"rotate-page\": [\"M14 2h-1.59l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C9.11 2.47 9 2.72 9 3c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42l-.3-.29H14c1.1 0 2 .9 2 2v3c0 .55.45 1 1 1s1-.45 1-1V6c0-2.21-1.79-4-4-4zm-2 5H3c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm-1 11H4V9h7v9z\"],\n \"route\": [\"M14.028 6.016c.146.275.31.57.485.872.304.524.628 1.047.952 1.545l.118.178-.208-.006-.577-.005c-2.093.004-2.841.303-2.841.895 0 .069.271.248 1.245.567l1.008.313c2.671.831 3.99 1.827 3.99 4.167 0 2.76-1.928 4.059-4.832 4.376-.782.085-1.52.098-2.452.066l-1.15-.046H6.221l.535-.811a67.46 67.46 0 001.122-1.787h2.04l.686.03c1.028.046 1.77.043 2.523-.039 1.832-.2 2.673-.767 2.673-1.789 0-.69-.483-1.09-1.992-1.585l-.83-.257c-1.192-.364-2.037-.7-2.59-1.165.399-1 .612-1.844.612-2.538a6.018 6.018 0 00-.382-2.098c.745-.573 1.884-.822 3.41-.883zM5 4.2c2.648 0 4.791 2.151 4.8 4.797C9.8 11.652 5 18.6 5 18.6l-.5-.744C3.273 15.993.2 11.121.2 8.997A4.802 4.802 0 015 4.2zm0 2.4a2.4 2.4 0 10.002 4.802A2.4 2.4 0 005 6.6zM17 .333a2.671 2.671 0 012.667 2.665C19.667 4.473 17 8.333 17 8.333l-.391-.587c-.741-1.137-2.276-3.629-2.276-4.748A2.668 2.668 0 0117 .333z\"],\n \"satellite\": [\"M9 18c.6 0 1 .4 1 1s-.4 1-1 1c-5 0-9-4-9-9 0-.6.4-1 1-1s1 .4 1 1c0 3.9 3.1 7 7 7zm0-4c.6 0 1 .4 1 1s-.4 1-1 1c-2.8 0-5-2.2-5-5 0-.6.4-1 1-1s1 .4 1 1c0 1.7 1.3 3 3 3zm5.7-3.7c.4-.4 1-.4 1.4 0l3.6 3.6c.4.4.4 1 0 1.4l-1.4 1.4c-.4.4-1 .4-1.4 0l-3.6-3.6c-.4-.4-.4-1 0-1.4l1.4-1.4zM4.7.3c.4-.4 1-.4 1.4 0l3.6 3.6c.4.4.4 1 0 1.4L8.3 6.7c-.4.4-1 .4-1.4 0L3.3 3.1c-.4-.4-.4-1 0-1.4L4.7.3zm11.1 1c.4-.4 1-.4 1.4 0l1.6 1.6c.4.4.4 1 0 1.4l-6.5 6.5c-.4.4-1 .4-1.4 0L9.3 9.2c-.4-.4-.4-1 0-1.4l6.5-6.5zM9 12c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z\"],\n \"saved\": [\"M12 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h13c.55 0 1-.45 1-1V6l-6-6zm4 18H5V2h6v5h5v11zm-8.29-6.71a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.32 0 .59-.16.77-.38l.01.01 4-5-.01-.01c.14-.18.23-.38.23-.62 0-.55-.45-1-1-1-.32 0-.59.16-.77.38l-.01-.01-3.3 4.13-2.21-2.21z\"],\n \"scatter-plot\": [\"M9 9c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm5 2c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4-5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm1 10H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM5 15c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z\"],\n \"search\": [\"M19.56 17.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"search-around\": [\"M9.9 6.9a3 3 0 100 6 3 3 0 100-6zM3 14c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM17 14c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM17 0c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM10 10L5 5\",\n \"M5.379 4.671l5.02 5.02-.707.708-5.02-5.02zM10 10l5-5\",\n \"M14.621 4.671l.707.708-5.02 5.02-.707-.707z\",\n \"M10 10l5 5M10.379 9.671l5.02 5.02-.707.708-5.02-5.02z\",\n \"M10 10l-5 5M9.621 9.671l.707.708-5.02 5.02-.707-.707z\"],\n \"search-template\": [\"M13 8H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0 3H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm0-6H5c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1zm6.56 12.44l-3.23-3.23A8.939 8.939 0 0018 9a9 9 0 10-9 9c1.94 0 3.74-.62 5.21-1.67l3.23 3.23a1.498 1.498 0 102.12-2.12zM9 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z\"],\n \"search-text\": [\"M19.56 17.44l-3.23-3.23A8.939 8.939 0 0018 9a9 9 0 10-9 9c1.94 0 3.74-.62 5.21-1.67l3.23 3.23a1.498 1.498 0 102.12-2.12zM9 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm3.5-11h-7c-.28 0-.5.22-.5.5v2c0 .28.22.5.5.5s.5-.22.5-.5V7h2v6h-.5c-.28 0-.5.22-.5.5s.22.5.5.5h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H10V7h2v.5c0 .28.22.5.5.5s.5-.22.5-.5v-2c0-.28-.22-.5-.5-.5z\"],\n \"segmented-control\": [\"M19 5H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-1 8h-8V7h8v6z\"],\n \"select\": [\"M19.71 18.29l-4.25-4.25L20 12.91 9.93 9.33c.04-.1.07-.21.07-.33V3c0-.55-.45-1-1-1H4V1c0-.55-.45-1-1-1S2 .45 2 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 .55.45 1 1 1h6c.12 0 .23-.03.34-.07L12.91 20l1.14-4.54 4.25 4.25c.17.18.42.29.7.29a1.003 1.003 0 00.71-1.71zM8 8H4V4h4v4z\"],\n \"selection\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\",\n \"M10 6a4 4 0 100 8 4 4 0 100-8z\"],\n \"send-message\": [\"M1.754.135L19.393 9.06c.57.288.775.943.458 1.462-.107.176-.266.32-.458.418l-17.64 8.924c-.57.289-1.288.102-1.604-.417A1.001 1.001 0 010 18.925v-6.851L11.021 10 0 7.938V1.075C0 .481.529 0 1.18 0c.201 0 .399.047.574.135z\"],\n \"send-to\": [\"M19 0h-5c-.6 0-1 .4-1 1s.4 1 1 1h2.6l-4.3 4.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3L18 3.4V6c0 .5.5 1 1 1s1-.5 1-1V1c0-.6-.5-1-1-1zm0 9c-1 0-1.9-.5-2.5-1.3l-1.4 1.4c-.5.6-1.3.9-2.1.9-1.7 0-3-1.3-3-3 0-.8.3-1.6.9-2.1l1.4-1.4C11.5 2.9 11 2 11 1c0-.3.1-.6.2-.9-.4-.1-.8-.1-1.2-.1C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10c0-.4 0-.8-.1-1.2-.3.1-.6.2-.9.2z\"],\n \"send-to-graph\": [\"M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm10 2c-.53 0-1.01.21-1.37.55L11.9 10.6c.06-.19.1-.39.1-.6 0-.21-.04-.41-.1-.6l4.72-2.95c.37.34.85.55 1.38.55 1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2c0 .21.04.41.1.6l-4.73 2.96c-.24-.23-.54-.4-.87-.48V3.93c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S8 .9 8 2c0 .93.64 1.71 1.5 1.93v4.14c-.33.09-.63.26-.87.48L7.6 7.91 5.42 6.55 3.9 5.6c.06-.19.1-.39.1-.6 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.53 0 1.01-.21 1.37-.55L9 9.96V10h.06L12 11.84l.4.25 1.51.94 2.19 1.37c-.06.19-.1.39-.1.6 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zm-7-2.96l-.06-.04H11v.04z\"],\n \"send-to-map\": [\"M8 11H3c-.55 0-1 .45-1 1s.45 1 1 1h2.59L.3 18.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 14.41V17c0 .55.45 1 1 1s1-.45 1-1v-5c0-.55-.45-1-1-1zm11.54-6.82l.01-.02-6-4-.01.02C13.39.08 13.21 0 13 0s-.39.08-.54.18l-.01-.02L7 3.8 1.55.17l-.01.01A.969.969 0 001 0C.45 0 0 .45 0 1v9c0-.55.45-1 1-1h1V2.87l4 2.67V9h2V5.54l4-2.67v11.6l-1 .67v2.4l2-1.33 5.45 3.63.01-.02c.15.1.33.18.54.18.55 0 1-.45 1-1V5c0-.35-.19-.64-.46-.82zM18 17.13l-4-2.67V2.87l4 2.67v11.59z\"],\n \"series-add\": [\"M13.29 9.29c.3.62.8 1.12 1.42 1.42l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 2.29-2.3zM12 5c0-.5.4-1 1-1h2V2c0-.6.4-1 1-1 .5 0 1 .4 1 1v2h2c.5 0 1 .4 1 1s-.5 1-1 1h-2v2c0 .6-.5 1-1 1-.6 0-1-.4-1-1V6h-2c-.6 0-1-.4-1-1z\"],\n \"series-configuration\": [\"M11.91 10.67c.52.45 1.13.8 1.8 1.03l-2.01 2.01c-.18.18-.43.29-.71.29-.28 0-.53-.11-.71-.3L7 10.41l-5 5V17h16.99c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8c.28 0 .53.11.71.29l3.29 3.3.91-.92zM18.5 4.6h1.04c.25 0 .45.2.46.44v.9c0 .25-.2.45-.45.45h-1.04c-.07.22-.16.42-.27.62l.73.73c.17.17.17.44 0 .61l-.61.61c-.17.17-.44.17-.61 0l-.73-.73c-.2.11-.4.2-.62.26v1.05c0 .25-.2.45-.45.45h-.9c-.25 0-.45-.2-.45-.45V8.51c-.21-.06-.4-.15-.58-.25l-.76.77c-.17.17-.46.17-.64 0l-.64-.64a.465.465 0 010-.64l.76-.77c-.1-.19-.19-.38-.25-.59h-1.04c-.25 0-.45-.2-.45-.45v-.9c0-.25.2-.45.45-.45h1.04c.07-.22.16-.42.27-.61l-.73-.73a.429.429 0 010-.61l.61-.61c.17-.17.44-.17.61 0l.73.73c.2-.11.4-.2.62-.26V1.45a.44.44 0 01.44-.45h.9c.25 0 .45.2.45.45V2.5c.21.06.4.15.58.25l.76-.77c.17-.17.46-.17.64 0l.64.64c.17.17.17.46 0 .64l-.76.77c.1.17.19.36.25.57zm-4.69.9c0 .93.75 1.69 1.69 1.69.93 0 1.69-.75 1.69-1.69s-.75-1.69-1.69-1.69-1.69.76-1.69 1.69z\"],\n \"series-derived\": [\"M18.82 6.58c-.03.05-.07.09-.11.13 0 0 0-.01-.01-.01l-2 2c-.2.2-.4.3-.7.3-.6 0-1-.4-1-1 0-.3.1-.5.3-.7L16.6 6H11c-.6 0-1-.4-1-1s.4-1 1-1h5.6l-1.3-1.3c-.2-.2-.3-.4-.3-.7 0-.6.4-1 1-1 .3 0 .5.1.7.3l3 3c.2.2.3.4.3.7s-.1.5-.3.7l-.88.88zm-5.53 2.71c.3.62.8 1.12 1.42 1.42l-3 3c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 2.29-2.3z\"],\n \"series-filtered\": [\"M12.14 10.45c.21.67.65 1.23 1.22 1.61l-1.65 1.65c-.18.18-.43.29-.71.29s-.53-.11-.71-.3L7 10.41l-5 5V17h17c.55 0 1 .45 1 1s-.45 1-1 1H1a.998.998 0 01-1-1V4c0-.55.45-1 1-1s1 .45 1 1v8.59l4.29-4.3C6.47 8.11 6.72 8 7 8s.53.11.71.29l3.29 3.3 1.14-1.14zM19.35 1a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V5.13L11.19 2.1a.642.642 0 01.45-1.1h7.71z\"],\n \"series-search\": [\"M11.28 11.31l-.28.28-3.29-3.3C7.53 8.11 7.28 8 7 8s-.53.11-.71.29L2 12.59V4c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1H2v-1.59l5-5 3.29 3.29c.18.19.43.3.71.3s.53-.11.71-.29l2.09-2.09c-.17.02-.34.02-.51.02-.7 0-1.38-.12-2.01-.33zm-.93-6c0-1.62 1.31-2.93 2.93-2.93s2.93 1.31 2.93 2.93-1.31 2.93-2.93 2.93-2.93-1.31-2.93-2.93zm6.47 2.43c.11-.17.21-.33.29-.51.01-.03.03-.06.04-.09.08-.18.16-.35.21-.54.06-.2.1-.38.14-.58.01-.05.01-.09.02-.14.03-.2.05-.39.05-.6 0-2.37-1.93-4.3-4.3-4.3-2.37.01-4.3 1.93-4.3 4.31s1.93 4.3 4.3 4.3c.21 0 .4-.02.6-.05.04 0 .09-.01.14-.02.2-.03.38-.08.57-.14.2-.06.37-.14.55-.21.03-.01.06-.03.09-.04.18-.09.34-.19.51-.29l2.87 2.87c.14.14.33.22.56.22.43 0 .78-.35.78-.78a.938.938 0 00-.23-.56l-2.89-2.85z\"],\n \"settings\": [\"M4 1c0-.55-.45-1-1-1S2 .45 2 1v5h2V1zM2 19c0 .55.45 1 1 1s1-.45 1-1v-6H2v6zm9-18c0-.55-.45-1-1-1S9 .45 9 1v8h2V1zm7 0c0-.55-.45-1-1-1s-1 .45-1 1v3h2V1zM9 19c0 .55.45 1 1 1s1-.45 1-1v-3H9v3zm9-14h-2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-2 14c0 .55.45 1 1 1s1-.45 1-1v-8h-2v8zM4 7H2c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm7 3H9c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1z\"],\n \"share\": [\"M15 18H2V5h8.76l2-2H1c-.55 0-1 .45-1 1v15c0 .55.45 1 1 1h15c.55 0 1-.45 1-1V7.24l-2 2V18zm4-18h-7c-.55 0-1 .45-1 1s.45 1 1 1h4.59l-7.3 7.29a1.003 1.003 0 001.42 1.42L18 3.41V8c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"shield\": [\"M10 20c6-3.81 9-9.048 9-15.714-2 0-5-1.429-9-4.286-4 2.857-7 4.286-9 4.286C1 10.952 4 16.19 10 20zm0-17.348c2.577 1.734 4.776 2.88 6.667 3.419-.44 4.627-2.636 8.353-6.667 11.297V2.652z\"],\n \"shop\": [\"M17.94 3.63c-.01-.02-.01-.03-.02-.04l-.03-.09h-.01c-.18-.3-.49-.5-.86-.5h-14c-.42 0-.77.25-.92.61L0 8.5h.02a2.5 2.5 0 005 0 2.5 2.5 0 005 0 2.5 2.5 0 005 0 2.5 2.5 0 005 0l-2.08-4.87zM3.02 2h14c.55 0 1-.45 1-1s-.45-1-1-1h-14c-.55 0-1 .45-1 1s.44 1 1 1zm13 14h-12v-4h-2v7c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-7h-2v4z\"],\n \"shopping-cart\": [\"M18 14H8.72l-.67-2H17c.44 0 .8-.29.94-.69h.01l2-6h-.01c.03-.1.06-.2.06-.31 0-.55-.45-1-1-1H5.39l-.44-1.32h-.01C4.8 2.29 4.44 2 4 2H1c-.55 0-1 .45-1 1s.45 1 1 1h2.28l3.33 10H5c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2h9c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2zM6.05 6h11.56l-1.33 4H7.39L6.05 6z\"],\n \"signal-search\": [\"M7.15 10.33c.888.8 1.999 1.36 3.228 1.574l2.326 6.98a.846.846 0 01-.535 1.07.844.844 0 01-1.072-.535l-1.225-3.671H7.125L5.9 19.419a.85.85 0 01-1.072.536.85.85 0 01-.536-1.071l2.857-8.555zm1.353 1.305l-.808 2.413h1.607l-.8-2.413zM5 5.5c0 .76.13 1.49.37 2.17-.496 1.056-.313 2.356.704 3.29.385.353.404.94.038 1.311a.982.982 0 01-1.356.038c-2.183-2.01-2-5.125.01-6.94a.95.95 0 01.24-.156A6.421 6.421 0 005 5.5z\",\n \"M3.874 13.185c-1.346-.918-2.187-2.67-2.187-4.34 0-1.752.757-3.254 2.187-4.339.42-.25.42-.834.168-1.168-.252-.418-.84-.418-1.177-.167C1.014 4.59-.08 6.509.005 8.846c.084 2.253 1.177 4.423 2.86 5.675.168.083.336.166.504.166.253 0 .505-.083.673-.333.337-.418.253-.918-.168-1.169zM12.246 12.309a.98.98 0 01-1.354-.037.917.917 0 01-.206-.324 6.54 6.54 0 001.959-.049 5.125 5.125 0 01-.399.41zM14.631 11.476l1.228 1.229a6.6 6.6 0 01-1.723 1.816c-.169.083-.337.166-.505.166-.253 0-.505-.083-.673-.333-.337-.418-.253-.918.168-1.169.62-.422 1.133-1.022 1.505-1.709z\",\n \"M11.5 0C14.54 0 17 2.46 17 5.5c0 .26-.02.51-.06.75l-.03.17c-.04.25-.1.49-.17.73v.01c-.08.24-.17.47-.28.69-.01.04-.03.07-.05.11-.11.23-.24.44-.38.65l3.68 3.68A1.003 1.003 0 0119 14c-.28 0-.53-.11-.7-.29l-3.68-3.68c-.21.14-.42.27-.65.38-.04.01-.07.03-.11.05-.22.11-.45.2-.69.28h-.01c-.24.07-.48.13-.73.17l-.17.03c-.25.04-.5.06-.76.06C8.46 11 6 8.54 6 5.5S8.46 0 11.5 0zm0 1.5c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z\"],\n \"sim-card\": [\"M16.71 5.29l-5-5A.997.997 0 0011 0H4c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6c0-.28-.11-.53-.29-.71zM9 7h2v3H9V7zM6 7h2v3H6V7zm2 11H6v-3h2v3zm3 0H9v-3h2v3zm3 0h-2v-3h2v3zm0-4H6v-3h8v3zm0-4h-2V7h2v3z\"],\n \"slash\": [\"M12 2c-.46 0-.85.32-.97.74L7.04 16.7c-.02.1-.04.2-.04.3 0 .55.45 1 1 1 .46 0 .85-.32.97-.74L12.96 3.3c.02-.1.04-.2.04-.3 0-.55-.45-1-1-1z\"],\n \"small-cross\": [\"M11.41 10l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L10 8.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L8.59 10 5.3 13.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3.29-3.3 3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L11.41 10z\"],\n \"small-minus\": [\"M14 9H6c-.55 0-1 .45-1 1s.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"small-plus\": [\"M14 9h-3V6c0-.55-.45-1-1-1s-1 .45-1 1v3H6c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45 1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"small-tick\": [\"M15 5c-.28 0-.53.11-.71.29L8 11.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l7-7A1.003 1.003 0 0015 5z\"],\n \"snowflake\": [\"M11 11.776v2.81l2.31 2.242a.987.987 0 010 1.415c-.399.39-1.044.39-1.442 0L11 17.414V19a.99.99 0 01-.996 1A.996.996 0 019 19v-1.636l-.912.879c-.398.39-1.043.39-1.441 0a.987.987 0 010-1.415L9 14.536v-2.79l-2.548 1.435-.837 3.063c-.146.534-.705.85-1.248.707a.998.998 0 01-.721-1.224l.309-1.132-1.4.793a1.03 1.03 0 01-1.393-.366.99.99 0 01.373-1.366l1.445-.818-1.224-.322a.998.998 0 01-.72-1.225c.145-.533.704-.85 1.248-.707l3.193.84 2.462-1.395-2.532-1.434-3.123.82a1.022 1.022 0 01-1.249-.706.998.998 0 01.721-1.225L2.91 7.18l-1.4-.793a.99.99 0 01-.373-1.366 1.03 1.03 0 011.392-.366l1.445.818-.328-1.2a.998.998 0 01.72-1.225 1.022 1.022 0 011.25.707l.855 3.132L9 8.311V5.414L6.647 3.121a.987.987 0 010-1.414 1.033 1.033 0 011.441 0L9 2.586V1c0-.552.44-1 1.004-1A.99.99 0 0111 1l-.007 1.536.875-.829a1.033 1.033 0 011.441 0 .987.987 0 010 1.414L11 5.364v2.918l2.53-1.42.855-3.131c.146-.534.705-.85 1.249-.707a.998.998 0 01.72 1.224l-.327 1.2 1.4-.792a1.03 1.03 0 011.392.366.99.99 0 01-.373 1.366l-1.355.768 1.153.303a.998.998 0 01.721 1.225c-.146.533-.705.85-1.249.707l-3.123-.821-2.576 1.459 2.506 1.42 3.193-.84a1.022 1.022 0 011.249.707.998.998 0 01-.72 1.225l-1.224.322 1.4.793a.99.99 0 01.373 1.366 1.03 1.03 0 01-1.393.366l-1.356-.768.31 1.132a.998.998 0 01-.721 1.224 1.022 1.022 0 01-1.249-.707l-.837-3.063L11 11.776z\"],\n \"social-media\": [\"M11.5 5c.8 0 1.6-.4 2-1 2 1.2 3.3 3.3 3.5 5.7 0 .5.5.9 1 .9.6 0 1-.5 1-1v-.1c-.2-3.3-2.2-6.2-5.1-7.6C13.7.8 12.7 0 11.5 0 10.1 0 9 1.1 9 2.5S10.1 5 11.5 5zm5 7c-1.4 0-2.5 1.1-2.5 2.5 0 .4.1.7.2 1.1-1.1.9-2.6 1.4-4.2 1.4-1.9 0-3.6-.8-4.9-2-.2-.2-.5-.4-.8-.4-.5 0-1 .5-1 1 0 .3.1.5.3.7C5.3 18 7.5 19 10 19c2.2 0 4.2-.8 5.8-2.1.2.1.5.1.7.1 1.4 0 2.5-1.1 2.5-2.5S17.9 12 16.5 12zM5 10.5c0-1.1-.7-2.1-1.7-2.4.5-1.9 1.9-3.5 3.6-4.4.3-.2.6-.5.6-.9 0-.5-.4-1-1-1-.2 0-.4.1-.6.2-2.4 1.2-4.2 3.6-4.7 6.4C.5 8.9 0 9.6 0 10.5 0 11.9 1.1 13 2.5 13S5 11.9 5 10.5z\"],\n \"sort\": [\"M19 16h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM7 15c-.28 0-.53.11-.71.29L5 16.59V11c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 15.3A.965.965 0 001 15a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 15zM19 1h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 5h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1z\"],\n \"sort-alphabetical\": [\"M8 15c-.28 0-.53.11-.71.29L6 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L2.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 008 15zm8.89-.79v-1.22H11.3v1.3h3.51L11 18.78V20h5.99v-1.3h-3.91l3.81-4.49zM14.97 0h-1.95L9.01 11.01h1.89l.98-2.92h4.17l.98 2.92h1.96L14.97 0zm-2.59 6.63l1.58-4.74H14l1.57 4.74h-3.19z\"],\n \"sort-alphabetical-desc\": [\"M8.01 15c-.28 0-.53.11-.71.29L6 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L2.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3a1.014 1.014 0 001.42 0l3-3c.18-.18.29-.43.29-.71.01-.55-.44-1-.99-1zm4.44-5.65l6.4-7.88V0H10.5v1.67h5.91L10 9.44v1.57h9V9.35h-6.55zm1.27 3.64L11 20h1.59l.56-1.56h2.68l.55 1.56h1.64l-2.68-7.01h-1.62zm-.16 4.3l.93-2.57h.02l.9 2.57h-1.85z\"],\n \"sort-asc\": [\"M10 8h5c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0 5h7c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm0-10h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm9 12h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zM7 14c-.28 0-.53.11-.71.29L5 15.59V10c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 14.3A.965.965 0 001 14a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 14z\"],\n \"sort-desc\": [\"M13 15h-3c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm-6-1c-.28 0-.53.11-.71.29L5 15.59V10c0-.55-.45-1-1-1s-1 .45-1 1v5.59L1.71 14.3A.965.965 0 001 14a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29s.53-.11.71-.29l3-3A1.003 1.003 0 007 14zM19 0h-9c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 10h-5c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-1c0-.55-.45-1-1-1zm2-5h-7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z\"],\n \"sort-numerical\": [\"M9 14.99c-.28 0-.53.11-.71.29L7 16.58v-5.59c0-.55-.45-1-1-1s-1 .45-1 1v5.59l-1.29-1.29a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-3c.18-.18.29-.43.29-.71a.99.99 0 00-1-1zm8.88.23c-.08-.42-.22-.79-.42-1.12-.2-.33-.47-.6-.8-.8-.33-.2-.76-.3-1.28-.3a2.333 2.333 0 00-1.72.71c-.21.22-.37.48-.49.78-.11.3-.17.62-.17.97 0 .27.04.54.13.8.08.26.22.5.4.7.19.21.43.38.71.5a2.142 2.142 0 001.72.02c.25-.12.47-.31.66-.58l.02.02c-.01.19-.04.4-.08.63-.04.24-.11.46-.21.67-.1.21-.23.38-.39.53a.92.92 0 01-.62.22c-.24 0-.44-.08-.6-.25-.16-.17-.27-.36-.31-.59h-1.31c.04.29.12.56.24.79.12.23.28.43.48.59.19.16.42.28.67.36.25.08.52.12.82.12.49 0 .9-.1 1.23-.31.34-.21.61-.48.82-.82.21-.34.37-.71.47-1.13.1-.42.15-.83.15-1.25 0-.43-.04-.85-.12-1.26zm-1.42.63c-.05.15-.11.28-.2.4-.09.12-.2.21-.34.27s-.3.1-.49.1c-.17 0-.33-.04-.46-.11s-.24-.17-.33-.29c-.08-.12-.15-.25-.19-.4-.04-.15-.06-.31-.06-.47 0-.15.02-.3.07-.45.05-.15.11-.28.2-.39.09-.12.2-.21.33-.28.13-.07.27-.11.44-.11.17 0 .33.04.47.11.14.07.25.17.34.28a1.387 1.387 0 01.28.86c.01.17-.02.33-.06.48zM15.32 11H17V0h-1.25c-.05.34-.17.62-.34.85-.17.23-.39.42-.63.57-.25.15-.52.25-.83.31-.3.06-.62.09-.94.09v1.41h2.31V11z\"],\n \"sort-numerical-desc\": [\"M9 15c-.28 0-.53.11-.71.29L7 16.59v-5.58c0-.55-.45-1-1-1s-1 .45-1 1v5.58L3.71 15.3c-.18-.18-.43-.3-.71-.3a1.003 1.003 0 00-.71 1.71l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l3-3A1.003 1.003 0 009 15zm6.7-1.33a1.5 1.5 0 01-.44.43c-.17.11-.37.19-.58.23-.22.04-.44.06-.67.05v1.07h1.66V20H17v-6.99h-1.06c-.04.26-.12.48-.24.66zm3.15-10.3c-.11-.68-.29-1.26-.55-1.76-.26-.5-.62-.89-1.08-1.18C16.75.14 16.17 0 15.46 0c-.54 0-1.03.09-1.46.27-.43.18-.79.44-1.09.76-.3.33-.52.71-.67 1.15-.16.44-.24.92-.24 1.43 0 .54.08 1.04.23 1.47.15.44.37.81.65 1.12.28.31.61.55 1 .72.39.17.82.26 1.3.26.46 0 .88-.11 1.26-.33.38-.22.68-.53.9-.94l.03.03c-.03.35-.07.74-.12 1.16-.05.42-.15.81-.29 1.18-.14.37-.35.68-.61.92-.26.25-.62.37-1.06.37-.43 0-.77-.13-1.03-.4-.25-.27-.4-.62-.44-1.05h-1.64c.02.43.11.83.29 1.18.17.35.39.66.67.91a3.027 3.027 0 002.07.8c.71 0 1.3-.17 1.79-.5.48-.33.87-.76 1.17-1.29.3-.53.51-1.12.64-1.76.13-.64.19-1.28.19-1.92.01-.77-.05-1.49-.15-2.17zM17.1 4.44c-.08.27-.19.5-.34.71-.15.21-.34.37-.57.49-.23.12-.5.18-.8.18-.3 0-.56-.06-.78-.19-.22-.13-.4-.29-.55-.49-.14-.2-.25-.44-.32-.7-.07-.27-.11-.55-.11-.84 0-.28.04-.55.11-.82.07-.26.18-.49.32-.7.14-.2.33-.36.55-.48.22-.12.48-.17.78-.17.31 0 .57.06.8.18.23.12.42.28.57.48.15.2.26.43.34.69.08.26.11.53.11.82 0 .29-.04.57-.11.84z\"],\n \"split-columns\": [\"M15 13a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-3-3a1.003 1.003 0 00-1.42 1.42L16.59 9H11V2h5v2c.77 0 1.47.3 2 .78V1c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v3.78C2.53 4.3 3.23 4 4 4V2h5v7H3.41L4.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 9.47 0 9.72 0 10c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 11H9v7H4v-2c-.77 0-1.47-.3-2-.78V19c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3.78c-.53.48-1.23.78-2 .78v2h-5v-7h5.59l-1.29 1.29c-.19.18-.3.43-.3.71z\"],\n \"square\": [\"M19 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H2V2h16v16z\"],\n \"stacked-chart\": [\"M12 2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v4h4V2zm3 14h2c.55 0 1-.45 1-1v-5h-4v5c0 .55.45 1 1 1zm3-10c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v3h4V6zm-6 1H8v5h4V7zm-9 9h2c.55 0 1-.45 1-1v-3H2v3c0 .55.45 1 1 1zm16 1H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM6 9c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v2h4V9zm3 7h2c.55 0 1-.45 1-1v-2H8v2c0 .55.45 1 1 1z\"],\n \"star\": [\"M10 0l3.1 6.6 6.9 1-5 5.1 1.2 7.3-6.2-3.4L3.8 20 5 12.7 0 7.6l6.9-1z\"],\n \"star-empty\": [\"M20 7.6l-6.9-1.1L10 0 6.9 6.6 0 7.6l5 5.1L3.8 20l6.2-3.4 6.2 3.4-1.2-7.2 5-5.2zM10 15l-4.5 2.4.9-5.2-3.6-3.6 5-.8L10 3.1l2.2 4.7 5 .8-3.6 3.7.9 5.2L10 15z\"],\n \"step-backward\": [\"M15 3c-.23 0-.42.09-.59.21l-.01-.01L8 8V4c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-4l6.4 4.8.01-.01c.17.12.36.21.59.21.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"step-chart\": [\"M19 16H2v-3h4c.55 0 1-.45 1-1V8h3v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V6h2c.55 0 1-.45 1-1s-.45-1-1-1h-3c-.55 0-1 .45-1 1v4h-3V7c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v4H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"step-forward\": [\"M15 3h-2c-.55 0-1 .45-1 1v4L5.6 3.2l-.01.01C5.42 3.09 5.23 3 5 3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1 .23 0 .42-.09.59-.21l.01.01L12 12v4c0 .55.45 1 1 1h2c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"stop\": [\"M16 3H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"stopwatch\": [\"M10 6a6 6 0 106 6h-6V6zm-.998-1.938A1.015 1.015 0 019 4V2H7a1 1 0 110-2h6a1 1 0 010 2h-2v2c0 .02 0 .041-.002.062A8.001 8.001 0 0110 20a8 8 0 01-.998-15.938z\"],\n \"strikethrough\": [\"M18 9h-4.46a4.7 4.7 0 00-.4-.14c-.19-.05-.51-.14-.96-.25-.45-.11-.9-.23-1.37-.35-.47-.12-.89-.23-1.27-.33s-.6-.16-.65-.17c-.53-.15-.95-.37-1.27-.66-.32-.28-.49-.68-.49-1.19 0-.36.09-.66.26-.9s.39-.43.65-.57c.26-.14.55-.24.87-.3s.63-.09.93-.09c.89 0 1.63.19 2.21.57.45.3.75.76.89 1.38h2.63c-.06-.52-.2-.98-.42-1.4-.3-.57-.71-1.05-1.23-1.43a5.33 5.33 0 00-1.79-.87c-.7-.2-1.42-.3-2.19-.3-.66 0-1.31.08-1.96.25s-1.22.43-1.73.77-.92.79-1.23 1.32c-.31.52-.46 1.15-.46 1.87 0 .37.05.74.15 1.1.1.36.28.7.53 1.02.18.24.41.47.69.67H2c-.55 0-1 .45-1 1s.45 1 1 1h10.14c.02.01.05.02.07.02.3.11.58.29.84.55.25.26.38.67.38 1.21 0 .27-.06.53-.17.79-.11.26-.29.49-.54.69-.25.2-.57.36-.97.49s-.88.19-1.44.19c-.52 0-1.01-.06-1.45-.17-.45-.11-.84-.29-1.19-.54s-.61-.56-.8-.95c-.05-.08-.09-.18-.12-.28H4.11c.09.43.22.82.4 1.18.33.65.77 1.18 1.32 1.59.55.41 1.2.72 1.94.92.74.2 1.53.3 2.37.3.73 0 1.44-.08 2.14-.25.7-.17 1.33-.43 1.88-.79.55-.36.99-.83 1.33-1.39.34-.56.51-1.25.51-2.05 0-.37-.06-.75-.18-1.12a3.12 3.12 0 00-.15-.39H18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"style\": [\"M18 18H2V2h12.3l2-2H1C.4 0 0 .4 0 1v18c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V7.7l-2 2V18zm1.2-18l-7.6 7.6 2.8 2.8L20 4.8V0h-.8zM4 15.9c3.1.2 5.9.2 8.2-2 1.1-1.1 1.1-3 0-4.1-.6-.5-1.3-.8-2-.8s-1.4.3-1.9.8C7.2 11 6.6 14.3 4 15.9z\"],\n \"swap-horizontal\": [\"M16.02 10c-.01 0-.01 0 0 0H16h.02zM2 6h13.58l-2.29 2.29a1 1 0 00-.3.71 1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-4-4a1.003 1.003 0 00-1.42 1.42L15.58 4H2c-.55 0-1 .45-1 1s.45 1 1 1zm2 4h-.02H4zm14 4H4.42l2.29-2.29a1 1 0 00.3-.71 1.003 1.003 0 00-1.71-.71l-4 4c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L4.42 16H18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"swap-vertical\": [\"M9.71 5.3l-4-4A.997.997 0 005 1.01c-.28 0-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L4 4.42V18c0 .55.45 1 1 1s1-.45 1-1V4.42l2.29 2.29a1 1 0 00.71.3 1.003 1.003 0 00.71-1.71zM10 3.98c0 .01 0 .01 0 0V4v-.02zm0 12.04c0-.01 0-.01 0 0V16v.02zm9-3.03c-.28 0-.53.11-.71.29L16 15.58V2c0-.55-.45-1-1-1s-1 .45-1 1v13.58l-2.29-2.29a1.003 1.003 0 00-1.42 1.42l4 4c.18.18.43.29.71.29.28 0 .53-.11.71-.29l4-4c.18-.18.29-.43.29-.71 0-.56-.45-1.01-1-1.01z\"],\n \"symbol-circle\": [\"M10 4.01a6 6 0 100 12 6 6 0 100-12z\"],\n \"symbol-cross\": [\"M15 8.01h-3v-3c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v3H5c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h3v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-3h3c.55 0 1-.45 1-1v-2c0-.56-.45-1-1-1z\"],\n \"symbol-diamond\": [\"M15 10.01c0-.21-.08-.39-.18-.54l.02-.01-4-6-.02.01c-.18-.28-.47-.46-.82-.46s-.64.18-.82.45l-.01-.01-4 6 .02.01c-.11.16-.19.34-.19.55s.08.39.18.54l-.02.01 4 6 .02-.01c.18.27.47.46.82.46s.64-.19.82-.46l.02.01 4-6-.02-.01c.1-.16.18-.34.18-.54z\"],\n \"symbol-square\": [\"M15 4.01H5c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10c0-.56-.45-1-1-1z\"],\n \"symbol-triangle-down\": [\"M16 5c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1 0 .16.05.31.11.44H4.1l5 10h.01c.17.33.5.56.89.56s.72-.23.89-.56h.01l5-10h-.01c.06-.13.11-.28.11-.44z\"],\n \"symbol-triangle-up\": [\"M15.89 14.56l-4.99-10h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56H9.1l-5 10h.01c-.06.13-.11.28-.11.44 0 .55.45 1 1 1h10c.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44z\"],\n \"tag\": [\"M2 4a2 2 0 012-2h4.588a2 2 0 011.414.586l7.41 7.41a2 2 0 010 2.828l-4.588 4.588a2 2 0 01-2.829 0l-7.41-7.41A2 2 0 012 8.588V4zm3.489-.006a1.495 1.495 0 100 2.99 1.495 1.495 0 000-2.99z\"],\n \"take-action\": [\"M5 7c.28 0 .53-.11.71-.29l5-5A1.003 1.003 0 009.29.29l-5 5A1.003 1.003 0 005 7zm6 6a1.003 1.003 0 001.71.71l5-5a1.003 1.003 0 00-1.42-1.42l-5 5c-.18.18-.29.43-.29.71zm8 5h-1c0-.55-.45-1-1-1h-7c-.55 0-1 .45-1 1H8c-.55 0-1 .45-1 1s.45 1 1 1h11c.55 0 1-.45 1-1s-.45-1-1-1zm-9-6l6-6-1.29-1.29a1.003 1.003 0 00-1.42-1.42L12 2 6 8l1.29 1.29-7 7a1.003 1.003 0 001.42 1.42l7-7L10 12z\"],\n \"taxi\": [\"M19 9h-.33l.33 1v.5c0 .15-.03.3-.07.44h.01L17 17.23v.27c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5V17H6v.5c0 .83-.67 1.5-1.5 1.5S3 18.33 3 17.5v-.27l-1.93-6.28h.01c-.05-.15-.08-.3-.08-.45V10s.02-.06.05-.16c.06-.17.16-.47.28-.84H1c-.55 0-1-.45-1-1s.45-1 1-1h1l1-3h-.01v-.01c.25-.64 1-1.31 1.67-1.5 0 0 .78-.21 2.33-.36V1c0-.55.45-1 1-1h4c.55 0 1 .45 1 1v1.13c1.55.14 2.33.36 2.33.36.67.19 1.42.86 1.67 1.5V4H17l1 3h1c.55 0 1 .45 1 1s-.45 1-1 1zM3 11.5c0 .83.67 1.5 1.5 1.5S6 12.33 6 11.5 5.33 10 4.5 10 3 10.67 3 11.5zM16 7l-1-3H5L4 7v1h12V7zm-.5 3c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"],\n \"text-highlight\": [\"M16 17c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1s1-.45 1-1-.45-1-1-1c-.77 0-1.47.3-2 .78-.53-.48-1.23-.78-2-.78-.55 0-1 .45-1 1s.45 1 1 1 1 .45 1 1v12c0 .55-.45 1-1 1s-1 .45-1 1 .45 1 1 1c.77 0 1.47-.3 2-.78.53.48 1.23.78 2 .78.55 0 1-.45 1-1s-.45-1-1-1zm-4-4H2V7h10V5H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h11v-2zm7-8h-3v2h2v6h-2v2h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z\"],\n \"th\": [\"M19 1H1c-.6 0-1 .5-1 1v16c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V2c0-.5-.5-1-1-1zM7 17H2v-3h5v3zm0-4H2v-3h5v3zm0-4H2V6h5v3zm11 8H8v-3h10v3zm0-4H8v-3h10v3zm0-4H8V6h10v3z\"],\n \"th-derived\": [\"M5.3 13.3c-.2.2-.3.4-.3.7 0 .6.4 1 1 1 .3 0 .5-.1.7-.3l3-3c.2-.2.3-.4.3-.7s-.1-.5-.3-.7l-3-3C6.5 7.1 6.3 7 6 7c-.6 0-1 .4-1 1 0 .3.1.5.3.7L6.6 10H1c-.6 0-1 .4-1 1s.4 1 1 1h5.6l-1.3 1.3zM19 1H3c-.5 0-1 .5-1 1v6h1c0-1.7 1.3-3 3-3 .8 0 1.6.3 2.1.9l.1.1H9v.8l1 1V6h8v3h-6.8c.3.3.5.6.6 1H18v3h-6.8l-.1.1-.9.9H18v3h-8v-2.8l-1 1V17H4v-.8c-.6-.5-1-1.3-1-2.2H2v4c0 .5.5 1 1 1h16c.6 0 1-.5 1-1V2c0-.5-.5-1-1-1z\"],\n \"th-disconnect\": [\"M14.25 1H19c.5 0 1 .5 1 1v16c0 .5-.5 1-1 1h-7.221l.278-2H18v-3h-5.527l.14-1H18v-3h-4.971l.139-1H18V6h-4.416l.637-4.587c.02-.139.03-.277.03-.413zM8.221 1l-.694 5H2v3h5.11l-.139 1H2v3h4.555l-.14 1H2v3h3.999l-.22 1.587c-.02.139-.03.277-.03.413H1c-.6 0-1-.5-1-1V2c0-.5.4-1 1-1h7.221zM10.26.862a1 1 0 011.98.276l-2.5 18a1 1 0 01-1.98-.276l2.5-18z\"],\n \"th-filtered\": [\"M17.333 10l1.435-1.722a1 1 0 00.232-.64V4.85l1-.9V18c0 .5-.5 1-1 1H1c-.6 0-1-.5-1-1V2c0-.5.4-1 1-1h6.722L12 4.85V6H8v3h4v1H8v3h10v-3h-.667zM7 17v-3H2v3h5zm0-4v-3H2v3h5zm0-4V6H2v3h5zm11 8v-3H8v3h10z\",\n \"M19.35 0a.642.642 0 01.46 1.1l-3.03 3.03v2.95c0 .18-.07.34-.19.46l-1.28 1.29c-.11.1-.27.17-.45.17-.35 0-.64-.29-.64-.64V4.13L11.19 1.1a.642.642 0 01.45-1.1h7.71z\"],\n \"th-list\": [\"M19 1H1c-.6 0-1 .5-1 1v16c0 .5.4 1 1 1h18c.5 0 1-.5 1-1V2c0-.5-.5-1-1-1zm-1 16H2v-3h16v3zm0-4H2v-3h16v3zm0-4H2V6h16v3z\"],\n \"thumbs-down\": [\"M18.55 6.56c-.31-.01-.65-.03-1.02-.06.03 0 .06-.01.09-.01.88-.12 1.68-.63 1.76-1.37.08-.75-.58-1.25-1.46-1.33-.32-.03-.65-.05-.99-.08.59-.19 1.05-.54 1.09-1.2.05-.75-.99-1.32-1.87-1.41-.34-.03-.64-.05-.91-.07h-.11c-.28-.02-.54-.02-.77-.02-3.92-.08-7.29.6-9.36 1.93v7.72c2.67 1.66 5.95 4.61 5.26 7.08-.21.76.39 1.35 1.23 1.26 1.01-.11 1.71-1.18 1.75-2.28.05-1.29-.19-2.59-.62-3.74-.05-.32.01-.65.47-.68.61-.04 1.39-.08 1.99-.1.32 0 .64-.01.94-.03h.01c.52-.03 1-.07 1.42-.12.88-.11 1.69-.6 1.79-1.35.1-.75-.55-1.25-1.44-1.35-.07-.01-.13-.02-.2-.02.21-.02.42-.04.61-.06.88-.11 1.69-.6 1.79-1.35.09-.75-.56-1.31-1.45-1.36zM3 3H0v8h3c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"thumbs-up\": [\"M3 9H0v8h3c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm16.99 3.09c-.1-.75-.91-1.24-1.79-1.35-.19-.02-.4-.05-.61-.06.07-.01.14-.01.2-.02.88-.1 1.53-.61 1.44-1.35-.1-.74-.91-1.24-1.79-1.35-.42-.05-.9-.09-1.42-.12h-.01l-.94-.03c-.6-.02-1.39-.05-1.99-.1-.45-.03-.51-.36-.47-.68.43-1.15.67-2.45.62-3.74-.04-1.11-.74-2.17-1.75-2.28-.84-.09-1.45.5-1.23 1.26.7 2.47-2.58 5.43-5.25 7.08v7.72c2.08 1.33 5.44 2.01 9.35 1.93.24 0 .49-.01.77-.02h.11c.27-.02.57-.04.91-.07.88-.08 1.92-.66 1.87-1.41-.04-.65-.5-1.01-1.09-1.2.34-.03.67-.05.99-.08.89-.08 1.55-.58 1.46-1.33-.08-.75-.88-1.25-1.76-1.37-.03 0-.06-.01-.09-.01.37-.02.71-.04 1.02-.06.91-.05 1.55-.61 1.45-1.36z\"],\n \"tick\": [\"M17 4c-.28 0-.53.11-.71.29L7 13.59 3.71 10.3A.965.965 0 003 10a1.003 1.003 0 00-.71 1.71l4 4c.18.18.43.29.71.29s.53-.11.71-.29l10-10A1.003 1.003 0 0017 4z\"],\n \"tick-circle\": [\"M10 20C4.48 20 0 15.52 0 10S4.48 0 10 0s10 4.48 10 10-4.48 10-10 10zm5-14c-.28 0-.53.11-.71.29L8 12.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l7-7A1.003 1.003 0 0015 6z\"],\n \"time\": [\"M11 9.59V4c0-.55-.45-1-1-1s-1 .45-1 1v6c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L11 9.59zM10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"],\n \"timeline-area-chart\": [\"M19 16H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zm0-13.41l-7.07 7.07-4.3-3.44-.01.01A.987.987 0 007 6c-.24 0-.46.1-.63.24l-.01-.01L3 9.03V15h16V2.59z\"],\n \"timeline-bar-chart\": [\"M19 17H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1zM9 16h2c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1zm6 0h2c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1zM3 16h2c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1z\"],\n \"timeline-events\": [\"M5 5c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm10 0c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1s-1 .5-1 1v2c0 .6.4 1 1 1zm-9 9H4v2h2v-2zM17 3v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H7v1c0 1.1-.9 2-2 2s-2-.9-2-2V3H2c-.5 0-1 .5-1 1v14c0 .5.5 1 1 1h16c.5 0 1-.5 1-1V4c0-.5-.5-1-1-1h-1zM7 17H3v-4h4v4zm0-5H3V8h4v4zm5 5H8v-4h4v4zm0-5H8V8h4v4zm5 5h-4v-4h4v4zm0-5h-4V8h4v4zm-6 2H9v2h2v-2zm5-5h-2v2h2V9z\"],\n \"timeline-line-chart\": [\"M19 16H2v-1.59l5-5 3.29 3.29c.18.19.43.3.71.3s.53-.11.71-.29l7-7a1.003 1.003 0 00-1.42-1.42L11 10.59l-3.29-3.3C7.53 7.11 7.28 7 7 7s-.53.11-.71.29L2 11.59V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"tint\": [\"M9.86 2S3.98 9.18 3.98 12.17C3.99 15.4 6.78 18 9.96 18c3.18-.01 6.04-2.63 6.03-5.86C15.99 9.05 9.86 2 9.86 2z\"],\n \"torch\": [\"M6.97 19c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-2h-6v2zm-3-15l3 4v8h6V8l3-4h-12zm5 5c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1s-1-.45-1-1V9zm6-9h-10c-.55 0-1 .45-1 1v2h12V1c0-.55-.45-1-1-1z\"],\n \"tractor\": [\"M4.5 11a4.5 4.5 0 110 9 4.5 4.5 0 010-9zm11.499 1a4 4 0 110 8 4 4 0 010-8zm-11.5 1.571a1.928 1.928 0 100 3.857 1.928 1.928 0 000-3.857zM16 14.667a1.333 1.333 0 100 2.666 1.333 1.333 0 000-2.666zM5.999 0C7.46 0 8.527.668 9 2l.851 4.256c1.433.096 2.82.217 4.147.362V2h2L16 6.862c.962.13 1.886.275 2.767.435.779.141 1.232.614 1.232 1.284L20 13a4.995 4.995 0 00-4-1.997A5.001 5.001 0 0011.099 15h-1.12a5.499 5.499 0 00-5.478-4.994 5.482 5.482 0 00-3.377 1.157H.004v-1.18L0 7.327c-.002-.597.37-1.18.999-1.302V1a1 1 0 011-1h4zm1 2H3v4h.75c1.386.027 2.749.073 4.079.139L6.999 2z\"],\n \"train\": [\"M16 18h-2l2 2H4l.12-.12L6 18H4c-1.1 0-2-.9-2-2V2c0-1.1 3.58-2 8-2s8 .9 8 2v14c0 1.1-.9 2-2 2zM5.5 15c.83 0 1.5-.67 1.5-1.5S6.33 12 5.5 12 4 12.67 4 13.5 4.67 15 5.5 15zM9 3H4v6h5V3zm7 0h-5v6h5V3zm-1.5 9c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\"],\n \"translate\": [\"M19.89 18.56l-4.99-10h-.01c-.17-.33-.5-.56-.89-.56s-.72.23-.89.56h-.01l-1.73 3.46-2.8-2.3 1.99-1.64C11.44 7.34 12 6.23 12 5V4h1c.55 0 1-.45 1-1s-.45-1-1-1H8V1c0-.55-.45-1-1-1S6 .45 6 1v1H1c-.55 0-1 .45-1 1s.45 1 1 1h9v1c0 .62-.28 1.18-.73 1.54L7 8.42 4.73 6.54C4.28 6.18 4 5.62 4 5H2c0 1.23.56 2.34 1.44 3.07l1.99 1.64-3.06 2.52.01.01c-.23.18-.38.45-.38.76 0 .55.45 1 1 1 .24 0 .45-.1.63-.24l.01.01L7 11l3.36 2.77.01-.01c.02.02.05.03.08.05.01 0 .01.01.02.02l-2.36 4.73h.01c-.07.13-.12.28-.12.44 0 .55.45 1 1 1 .39 0 .72-.23.89-.56h.01L11.12 17h5.76l1.22 2.45h.01c.17.32.5.55.89.55.55 0 1-.45 1-1 0-.16-.05-.31-.11-.44zM12.12 15L14 11.24 15.88 15h-3.76z\"],\n \"trash\": [\"M17 1h-5c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1H3c-.55 0-1 .45-1 1v1h16V2c0-.55-.45-1-1-1zm.5 3h-15c-.28 0-.5.22-.5.5s.22.5.5.5H3v14c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zM7 16c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8zm4 0c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8zm4 0c0 .55-.45 1-1 1s-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v8z\"],\n \"tree\": [\"M11 15.542V20H9v-4.458L2 17l4.5-5.625L4 12l3.655-5.483L6 7l4-7 4 7-1.655-.483L16 12l-2.5-.625L18 17l-7-1.458z\"],\n \"trending-down\": [\"M19 10c-.55 0-1 .45-1 1v1.37l-6.25-7.03-.01.01A.971.971 0 0011 5c-.23 0-.42.09-.59.21l-.01-.01-3.43 2.58-5.42-3.61-.01.01A.969.969 0 001 4c-.55 0-1 .45-1 1 0 .35.19.64.46.82l-.01.01 6 4 .01-.02c.15.11.33.19.54.19.23 0 .42-.09.59-.21l.01.01 3.26-2.45L16.77 14H15c-.55 0-1 .45-1 1s.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1z\"],\n \"trending-up\": [\"M19 4h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.77l-5.91 6.65L7.6 10.2l-.01.01C7.42 10.09 7.23 10 7 10c-.21 0-.39.08-.54.18l-.01-.02-6 4 .01.02c-.27.18-.46.47-.46.82 0 .55.45 1 1 1 .21 0 .39-.08.54-.18l.01.02 5.41-3.61 3.43 2.58.01-.01c.18.11.37.2.6.2.3 0 .56-.14.74-.34l.01.01L18 7.63V9c0 .55.45 1 1 1s1-.45 1-1V5c0-.55-.45-1-1-1z\"],\n \"truck\": [\"M16 0a1 1 0 011 1v11a1 1 0 011 1v3h.5a.5.5 0 01.5.5v1a.5.5 0 01-.5.5H17v1a1 1 0 01-1 1h-1a1 1 0 01-1-1v-1H6v1a1 1 0 01-1 1H4a1 1 0 01-1-1v-1H1.5a.5.5 0 01-.5-.5v-1a.5.5 0 01.5-.5H2v-3a1 1 0 011-1V1a1 1 0 112 0v3a2 2 0 012-2h6a2 2 0 012 2V1a1 1 0 011-1zm-4 10H8a1 1 0 00-1 1v4a1 1 0 001 1h4a1 1 0 001-1v-4a1 1 0 00-1-1zm-7 4H4a1 1 0 000 2h1a1 1 0 000-2zm11 0h-1a1 1 0 000 2h1a1 1 0 000-2zm-4.5 0a.5.5 0 110 1h-3l-.09-.008A.5.5 0 018.5 14zm0-1.5a.5.5 0 110 1h-3l-.09-.008a.5.5 0 01.09-.992zm0-1.5a.5.5 0 110 1h-3l-.09-.008A.5.5 0 018.5 11zM14 5H6v3h8V5z\"],\n \"two-columns\": [\"M5 0H1C.45 0 0 .45 0 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm14.71 9.29l-3-3A1.003 1.003 0 0015 7v6a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71zM12 0H8c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h4c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"unarchive\": [\"M16.434 0a1 1 0 01.857.486L20 5v14a1 1 0 01-1 1H1a1 1 0 01-1-1V5L2.709.486A1 1 0 013.566 0h12.868zM10 8c-.28 0-.53.11-.71.29l-3 3-.084.096A1.003 1.003 0 007.71 12.71L9 11.41v4.58l.007.116c.058.496.482.884.993.884.55 0 1-.45 1-1v-4.58l1.29 1.29.081.073c.171.139.389.227.629.227a1.003 1.003 0 00.71-1.71l-3-3-.096-.084A1.002 1.002 0 0010 8zm6-6H4L2 5.002h16L16 2z\"],\n \"underline\": [\"M10 17c3.3 0 6-2.7 6-6V3.5c0-.8-.7-1.5-1.5-1.5S13 2.7 13 3.5V11c0 1.7-1.3 3-3 3s-3-1.3-3-3V3.5C7 2.7 6.3 2 5.5 2S4 2.7 4 3.5V11c0 3.3 2.7 6 6 6zM16.5 19h-13c-.3 0-.5.2-.5.5s.2.5.5.5h13c.3 0 .5-.2.5-.5s-.2-.5-.5-.5z\"],\n \"undo\": [\"M5 14c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm9-9H3.41L5.7 2.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-4 4C.11 5.47 0 5.72 0 6c0 .28.11.53.29.71l4 4a1.003 1.003 0 001.42-1.42L3.41 7H14c2.21 0 4 1.79 4 4s-1.79 4-4 4H9v2h5c3.31 0 6-2.69 6-6s-2.69-6-6-6z\"],\n \"ungroup-objects\": [\"M4.5 6C2.01 6 0 8.01 0 10.5S2.01 15 4.5 15 9 12.99 9 10.5 6.99 6 4.5 6zm11 0C13.01 6 11 8.01 11 10.5s2.01 4.5 4.5 4.5 4.5-2.01 4.5-4.5S17.99 6 15.5 6z\"],\n \"unknown-vehicle\": [\"M13 11.988v-4H4v-1l1-3h6V2.003a35.867 35.867 0 00-1-.015c-3.593 0-5.332.488-5.332.488-.67.188-1.424.864-1.674 1.503l-.004.009H3l-1 3H1a1 1 0 100 2h.333l-.28.84-.053.16v7.5a1.5 1.5 0 103 0v-.5h12v.5a1.5 1.5 0 103 0v-4.5h-5a1 1 0 01-1-1zm-8.5 1a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM19.83 2.782a2.392 2.392 0 00-.592-.853c-.276-.264-.64-.485-1.09-.663C17.695 1.09 17.132 1 16.457 1c-.523 0-.996.084-1.418.253a3.157 3.157 0 00-1.084.703c-.299.3-.532.656-.698 1.065-.166.41-.254.861-.264 1.353h2.096c0-.246.028-.476.085-.69.057-.214.145-.4.264-.56.119-.16.27-.287.456-.383.185-.095.406-.143.663-.143.38 0 .677.1.89.3.215.2.321.51.321.93.01.245-.035.45-.135.614-.1.164-.23.314-.392.45a8.598 8.598 0 01-.527.41 3.53 3.53 0 00-.542.485c-.171.187-.32.412-.45.676-.127.265-.206.592-.234.984v.614h1.924v-.519c.038-.273.13-.5.278-.683.147-.182.316-.343.506-.484a13.5 13.5 0 01.606-.424c.214-.14.408-.312.584-.512s.323-.442.442-.724.178-.642.178-1.079c0-.264-.059-.548-.178-.854zm-4.54 6.099v2.103h2.237V8.881H15.29z\"],\n \"unlock\": [\"M14 1c-2.21 0-4 1.79-4 4v4H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-8c0-.55-.45-1-1-1h-2V5c0-1.1.9-2 2-2s2 .9 2 2v2c0 .55.45 1 1 1s1-.45 1-1V5c0-2.21-1.79-4-4-4z\"],\n \"unpin\": [\"M11.77 1.16c-.81.81-.74 2.28.02 3.76L6.1 8.71c-2.17-1.46-4.12-2-4.94-1.18l4.95 4.95-2.12 3.54 3.54-2.12 4.95 4.95c.82-.82.27-2.77-1.19-4.94l3.8-5.69c1.47.76 2.94.84 3.76.02l-7.08-7.08z\"],\n \"unresolve\": [\"M11.47 12.46c.16-.36.29-.74.38-1.14 0-.02.01-.04.01-.06.09-.4.14-.82.14-1.26 0-.44-.05-.86-.14-1.27 0-.02-.01-.04-.01-.06-.09-.4-.22-.78-.38-1.14-.01-.02-.02-.03-.02-.05a5.94 5.94 0 00-.61-1.03c0-.01-.01-.01-.01-.02a6.308 6.308 0 00-2.1-1.77c-.19-.1-.39-.18-.59-.26-.03-.01-.06-.02-.1-.03-.17-.07-.34-.12-.52-.17-.05-.01-.1-.03-.15-.04a4.34 4.34 0 00-.52-.09c-.05-.01-.11-.02-.17-.03C6.46 4.02 6.23 4 6 4c-3.31 0-6 2.69-6 6s2.69 6 6 6c.23 0 .46-.02.68-.04l.17-.03c.17-.02.34-.06.51-.09.05-.01.1-.03.15-.04.18-.05.36-.1.53-.17l.09-.03a5.973 5.973 0 002.68-2.04c0-.01.01-.01.01-.02.24-.32.44-.66.61-1.03.02-.01.03-.03.04-.05zM14 4c-.99 0-1.91.24-2.73.66a7.51 7.51 0 010 10.68c.82.42 1.74.66 2.73.66 3.31 0 6-2.69 6-6s-2.69-6-6-6z\"],\n \"updated\": [\"M10 0C6.71 0 3.82 1.6 2 4.05V2c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1s-.45-1-1-1H3.76C5.22 3.17 7.47 2 10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8c0-.55-.45-1-1-1s-1 .45-1 1c0 5.52 4.48 10 10 10s10-4.48 10-10S15.52 0 10 0zm4 7c-.28 0-.53.11-.71.29L9 11.58 6.71 9.29a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l5-5A1.003 1.003 0 0014 7z\"],\n \"upload\": [\"M10 0C4.48 0 0 4.48 0 10s4.48 10 10 10 10-4.48 10-10S15.52 0 10 0zm4 10c-.28 0-.53-.11-.71-.29L11 7.41V15c0 .55-.45 1-1 1s-1-.45-1-1V7.41l-2.29 2.3a1.003 1.003 0 01-1.42-1.42l4-4c.18-.18.43-.29.71-.29s.53.11.71.29l4 4A1.003 1.003 0 0114 10z\"],\n \"user\": [\"M10 0C4.48 0 0 4.48 0 10c0 .33.02.65.05.97.01.12.03.23.05.35.03.2.05.4.09.59.03.14.06.28.1.42l.12.48c.05.16.1.31.15.46.05.13.09.27.15.4.06.16.13.32.21.48.05.11.1.22.16.33.09.17.17.34.27.5.05.09.1.17.15.25.11.18.22.35.34.52.04.06.08.11.12.17 1.19 1.62 2.85 2.86 4.78 3.53l.09.03c.46.15.93.27 1.42.36.08.01.17.03.25.04.49.07.99.12 1.5.12s1.01-.05 1.5-.12c.08-.01.17-.02.25-.04.49-.09.96-.21 1.42-.36l.09-.03c1.93-.67 3.59-1.91 4.78-3.53.04-.05.08-.1.12-.16.12-.17.23-.35.34-.53.05-.08.1-.16.15-.25.1-.17.19-.34.27-.51.05-.11.1-.21.15-.32.07-.16.14-.32.21-.49.05-.13.1-.26.14-.39.05-.15.11-.31.15-.46.05-.16.08-.32.12-.48.03-.14.07-.28.1-.42.04-.19.06-.39.09-.59.02-.12.04-.23.05-.35.05-.32.07-.64.07-.97 0-5.52-4.48-10-10-10zm0 18a7.94 7.94 0 01-6.15-2.89c.84-.44 1.86-.82 2.67-1.19 1.45-.65 1.3-1.05 1.35-1.59.01-.07.01-.14.01-.21-.51-.45-.93-1.08-1.2-1.8l-.01-.01c0-.01-.01-.02-.01-.03a4.42 4.42 0 01-.15-.48c-.33-.07-.53-.44-.61-.79-.08-.14-.23-.48-.2-.87.05-.51.26-.74.49-.83v-.08c0-.63.06-1.55.17-2.15.02-.17.06-.33.11-.5.21-.73.66-1.4 1.26-1.86.62-.47 1.5-.72 2.28-.72.78 0 1.65.25 2.27.73.6.46 1.05 1.12 1.26 1.86.05.16.08.33.11.5.11.6.17 1.51.17 2.15v.09c.22.1.42.33.46.82.04.39-.12.73-.2.87-.07.34-.27.71-.6.78-.04.16-.09.33-.15.48 0 .01-.02.05-.02.05-.26.71-.67 1.33-1.17 1.78 0 .08.01.16.01.23.05.54-.15.94 1.31 1.59.81.36 1.84.74 2.68 1.19A7.958 7.958 0 0110 18z\"],\n \"variable\": [\"M4.93 3.79a9.1 9.1 0 012.2-2.27L7.29 1c-1.38.59-2.57 1.33-3.55 2.22C2.46 4.39 1.49 5.72.83 7.23.28 8.51 0 9.81 0 11.12c0 2.28.83 4.57 2.49 6.86l.16-.55c-.49-1.23-.73-2.38-.73-3.44 0-1.67.28-3.46.84-5.36.55-1.9 1.28-3.51 2.17-4.84zm9.38 8.39l-.33-.2c-.37.54-.65.87-.82 1a.74.74 0 01-.42.12c-.19 0-.38-.12-.57-.37-.31-.42-.73-1.59-1.26-3.5.47-.85.86-1.41 1.19-1.67.23-.19.48-.29.74-.29.1 0 .28.04.53.11.26.07.48.11.68.11.27 0 .5-.1.68-.29.18-.19.27-.44.27-.75 0-.33-.09-.58-.27-.77-.18-.19-.44-.29-.78-.29-.3 0-.59.07-.86.22s-.61.47-1.02.97c-.31.37-.77 1.02-1.37 1.94a9.683 9.683 0 00-1.24-3.14l-3.24.59-.06.36c.24-.05.44-.07.61-.07.32 0 .59.14.8.43.33.45.8 1.8 1.39 4.07-.47.64-.78 1.06-.96 1.26-.28.32-.52.53-.7.62-.14.08-.3.11-.48.11-.14 0-.36-.08-.67-.23-.21-.1-.4-.15-.57-.15-.31 0-.57.11-.78.32s-.31.48-.31.8c0 .31.09.55.28.75.19.19.44.29.76.29.31 0 .6-.07.87-.2s.61-.42 1.02-.86c.41-.44.98-1.13 1.7-2.08.28.9.52 1.56.72 1.97.2.41.44.71.7.89.26.18.59.27.99.27.38 0 .77-.14 1.17-.43.54-.36 1.07-1 1.61-1.91zM17.51 1l-.15.54c.49 1.24.73 2.39.73 3.45 0 1.43-.21 2.96-.63 4.6-.33 1.26-.75 2.45-1.27 3.55-.52 1.11-1.02 1.97-1.51 2.6-.49.62-1.09 1.2-1.8 1.72l-.17.53c1.38-.59 2.57-1.34 3.55-2.23 1.29-1.17 2.26-2.5 2.91-4 .55-1.28.83-2.59.83-3.91 0-2.27-.83-4.56-2.49-6.85z\"],\n \"vertical-bar-chart-asc\": [\"M8 7H7c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zM3 9H2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1zm10-5h-1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm5-4h-1c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"],\n \"vertical-bar-chart-desc\": [\"M3 0H2c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm5 4H7c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm5 3h-1c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm5 2h-1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1z\"],\n \"vertical-distribution\": [\"M1 2h18c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1s.45 1 1 1zm2 5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1H3zm16 11H1c-.55 0-1 .45-1 1s.45 1 1 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"video\": [\"M19 2H1c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h18c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zM7 14V6l6 4-6 4z\"],\n \"virus\": [\"M15.249 13.835l1.251 1.251.354-.354.087-.077a1 1 0 011.327 1.491l-2.122 2.122-.087.077a1 1 0 01-1.327-1.491l.354-.354-1.251-1.251A6.466 6.466 0 0111 16.424L10.999 18h.501a1 1 0 01.117 1.993L11.5 20h-3a1 1 0 01-.117-1.993L8.5 18h.499v-1.577a6.46 6.46 0 01-2.538-.97L5.414 16.5l.354.354a1 1 0 01-1.327 1.491l-.087-.077-2.122-2.122a1 1 0 011.327-1.491l.087.077.354.354.97-.97a6.472 6.472 0 01-1.384-3.057l-.025.002L2 11.06v.44a1 1 0 01-1.993.117L0 11.5v-3a1 1 0 011.993-.117L2 8.5v.56h1.567A6.471 6.471 0 014.97 5.883l-.971-.969-.353.354-.087.077a1 1 0 01-1.327-1.491l2.122-2.122.087-.077a1 1 0 011.327 1.491l-.354.353 1.047 1.048A6.46 6.46 0 019 3.577L9 2h-.5A1 1 0 018.383.007L8.5 0h3a1 1 0 01.117 1.993L11.5 2H11v1.577a6.466 6.466 0 012.838 1.176l.04-.046L15.086 3.5l-.353-.353a1 1 0 011.327-1.491l.087.077 2.122 2.122a1 1 0 01-1.327 1.491l-.087-.077-.354-.354-1.207 1.207-.046.041a6.467 6.467 0 011.16 2.733H18V8.5a1 1 0 011.993-.117L20 8.5v3a1 1 0 01-1.993.117L18 11.5v-.605h-1.561a6.466 6.466 0 01-1.19 2.94zM12.5 11a1.5 1.5 0 100 3 1.5 1.5 0 000-3zM8 6a2 2 0 100 4 2 2 0 000-4z\"],\n \"volume-down\": [\"M15.92 3.93l-1.6 1.18A7.948 7.948 0 0116 10c0 1.84-.63 3.54-1.68 4.89l1.6 1.18A9.878 9.878 0 0018 10c0-2.29-.78-4.39-2.08-6.07zM11 3c-.28 0-.53.11-.71.29L7.59 6H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"volume-off\": [\"M14 3c-.28 0-.53.11-.71.29L10.59 6H6c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71c.17.18.42.29.7.29.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z\"],\n \"volume-up\": [\"M9 3.43c-.28 0-.53.11-.71.29l-2.7 2.71H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h4.59l2.71 2.71a1.003 1.003 0 001.71-.71v-12c-.01-.55-.46-1-1.01-1zm8.31-1.56l-1.62 1.2C17.14 5.16 18 7.69 18 10.43s-.86 5.27-2.31 7.37l1.62 1.2C19 16.57 20 13.62 20 10.43c0-3.18-1-6.13-2.69-8.56zm-3.39 2.49l-1.6 1.18A7.948 7.948 0 0114 10.43c0 1.84-.63 3.54-1.68 4.89l1.6 1.18A9.94 9.94 0 0016 10.43c0-2.28-.78-4.38-2.08-6.07z\"],\n \"walk\": [\"M16 10h-2c-.23 0-.42-.09-.59-.21l-.01.01-1.69-1.27-.63 3.14 2.62 2.62c.19.18.3.43.3.71v4c0 .55-.45 1-1 1s-1-.45-1-1v-3.59L9.39 12.8l-2.45 6.55h-.01c-.14.38-.5.65-.93.65-.55 0-1-.45-1-1 0-.12.03-.24.07-.35h-.01L9.43 7h-2.9l-1.7 2.55-.01-.01c-.18.27-.47.46-.82.46-.55 0-1-.45-1-1 0-.21.08-.39.18-.54l-.01-.01 2-3 .02.01C5.36 5.19 5.65 5 6 5h4.18l.36-.96c-.33-.43-.54-.96-.54-1.54a2.5 2.5 0 015 0A2.5 2.5 0 0112.5 5c-.06 0-.12-.01-.18-.02l-.44 1.18L14.33 8H16c.55 0 1 .45 1 1s-.45 1-1 1z\"],\n \"warning-sign\": [\"M19.86 17.52l.01-.01-9-16-.01.01C10.69 1.21 10.37 1 10 1s-.69.21-.86.52l-.01-.01-9 16 .01.01c-.08.14-.14.3-.14.48 0 .55.45 1 1 1h18c.55 0 1-.45 1-1 0-.18-.06-.34-.14-.48zM11 17H9v-2h2v2zm0-3H9V6h2v8z\"],\n \"waterfall-chart\": [\"M13 7h2c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1zm-9 8h1c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm4-6h2c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm11-5h-1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h1c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm0 12H2V3c0-.55-.45-1-1-1s-1 .45-1 1v14a.998.998 0 001 1h18c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"widget\": [\"M18 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM2 16c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm15-1h2V5h-2v10zM3 5H1v10h2V5zM2 0C.9 0 0 .9 0 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3 3h10V1H5v2zm13 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM5 19h10v-2H5v2z\"],\n \"widget-button\": [\"M1 4h18c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1zm1 2v8h16V6H2zm4 5c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm4 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\"],\n \"widget-footer\": [\"M17 0H3c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H4v-4h12v4zm0-5H4V2h12v11z\"],\n \"widget-header\": [\"M17 0H3c-.55 0-1 .45-1 1v18c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-1 18H4V7h12v11zm0-12H4V2h12v4z\"],\n \"wrench\": [\"M19.8 4.44L16.13 8.1l-3.55-.71-.71-3.53L15.54.21c-2.01-.53-4.23-.03-5.8 1.53-1.86 1.85-2.23 4.6-1.14 6.83L.59 16.59C.22 16.95 0 17.45 0 18a2 2 0 002 2c.55 0 1.05-.22 1.41-.59l8.03-8.04c2.23 1.05 4.97.67 6.82-1.16 1.57-1.56 2.07-3.77 1.54-5.77z\"],\n \"zoom-in\": [\"M19.56 17.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm3-7H9V5c0-.55-.45-1-1-1s-1 .45-1 1v2H5c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V9h2c.55 0 1-.45 1-1s-.45-1-1-1z\"],\n \"zoom-out\": [\"M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm8.56 10.44l-4.94-4.94A8.004 8.004 0 0016 8c0-4.42-3.58-8-8-8S0 3.58 0 8s3.58 8 8 8c1.67 0 3.21-.51 4.5-1.38l4.94 4.94a1.498 1.498 0 102.12-2.12zM8 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z\"],\n \"zoom-to-fit\": [\"M1 7c.55 0 1-.45 1-1V2h4c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v5c0 .55.45 1 1 1zm5 1a1.003 1.003 0 00-1.71-.71l-2 2c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L4.41 10 5.7 8.71c.19-.18.3-.43.3-.71zm2-2c.28 0 .53-.11.71-.29L10 4.41l1.29 1.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C10.53 2.11 10.28 2 10 2s-.53.11-.71.29l-2 2A1.003 1.003 0 008 6zM6 18H2v-4c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55.45 1 1 1h5c.55 0 1-.45 1-1s-.45-1-1-1zm8-6a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42l1.3 1.29-1.29 1.29c-.19.18-.3.43-.3.71zm5-12h-5c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zm-7 14c-.28 0-.53.11-.71.29L10 15.59 8.71 14.3A.965.965 0 008 14a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 0012 14zm7-1c-.55 0-1 .45-1 1v4h-4c-.55 0-1 .45-1 1s.45 1 1 1h5c.55 0 1-.45 1-1v-5c0-.55-.45-1-1-1z\"],\n};\n//# sourceMappingURL=iconSvgPaths.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\n// we need some empty interfaces to show up in docs\n// HACKHACK: these components should go in separate files\n/* eslint-disable max-classes-per-file, @typescript-eslint/no-empty-interface */\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke } from \"../../common/utils\";\n/**\n * Renders common control elements, with additional props to customize appearance.\n * This component is not exported and is only used in this file for `Checkbox`, `Radio`, and `Switch` below.\n */\nvar Control = function (_a) {\n var _b;\n var alignIndicator = _a.alignIndicator, children = _a.children, className = _a.className, indicatorChildren = _a.indicatorChildren, inline = _a.inline, inputRef = _a.inputRef, label = _a.label, labelElement = _a.labelElement, large = _a.large, style = _a.style, type = _a.type, typeClassName = _a.typeClassName, _c = _a.tagName, tagName = _c === void 0 ? \"label\" : _c, htmlProps = __rest(_a, [\"alignIndicator\", \"children\", \"className\", \"indicatorChildren\", \"inline\", \"inputRef\", \"label\", \"labelElement\", \"large\", \"style\", \"type\", \"typeClassName\", \"tagName\"]);\n var classes = classNames(Classes.CONTROL, typeClassName, (_b = {},\n _b[Classes.DISABLED] = htmlProps.disabled,\n _b[Classes.INLINE] = inline,\n _b[Classes.LARGE] = large,\n _b), Classes.alignmentClass(alignIndicator), className);\n return React.createElement(tagName, { className: classes, style: style }, React.createElement(\"input\", __assign({}, htmlProps, { ref: inputRef, type: type })), React.createElement(\"span\", { className: Classes.CONTROL_INDICATOR }, indicatorChildren), label, labelElement, children);\n};\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n function Switch() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Switch.prototype.render = function () {\n var _a = this.props, innerLabelChecked = _a.innerLabelChecked, innerLabel = _a.innerLabel, controlProps = __rest(_a, [\"innerLabelChecked\", \"innerLabel\"]);\n var switchLabels = innerLabel || innerLabelChecked\n ? [\n React.createElement(\"div\", { key: \"checked\", className: Classes.CONTROL_INDICATOR_CHILD },\n React.createElement(\"div\", { className: Classes.SWITCH_INNER_TEXT }, innerLabelChecked ? innerLabelChecked : innerLabel)),\n React.createElement(\"div\", { key: \"unchecked\", className: Classes.CONTROL_INDICATOR_CHILD },\n React.createElement(\"div\", { className: Classes.SWITCH_INNER_TEXT }, innerLabel)),\n ]\n : null;\n return (React.createElement(Control, __assign({}, controlProps, { type: \"checkbox\", typeClassName: Classes.SWITCH, indicatorChildren: switchLabels })));\n };\n Switch.displayName = DISPLAYNAME_PREFIX + \".Switch\";\n Switch = __decorate([\n polyfill\n ], Switch);\n return Switch;\n}(AbstractPureComponent2));\nexport { Switch };\nvar Radio = /** @class */ (function (_super) {\n __extends(Radio, _super);\n function Radio() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Radio.prototype.render = function () {\n return React.createElement(Control, __assign({}, this.props, { type: \"radio\", typeClassName: Classes.RADIO }));\n };\n Radio.displayName = DISPLAYNAME_PREFIX + \".Radio\";\n Radio = __decorate([\n polyfill\n ], Radio);\n return Radio;\n}(AbstractPureComponent2));\nexport { Radio };\nvar Checkbox = /** @class */ (function (_super) {\n __extends(Checkbox, _super);\n function Checkbox() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n indeterminate: _this.props.indeterminate || _this.props.defaultIndeterminate || false,\n };\n _this.handleChange = function (evt) {\n var indeterminate = evt.target.indeterminate;\n // update state immediately only if uncontrolled\n if (_this.props.indeterminate == null) {\n _this.setState({ indeterminate: indeterminate });\n }\n // otherwise wait for props change. always invoke handler.\n safeInvoke(_this.props.onChange, evt);\n };\n _this.handleInputRef = function (ref) {\n _this.input = ref;\n safeInvoke(_this.props.inputRef, ref);\n };\n return _this;\n }\n Checkbox.getDerivedStateFromProps = function (_a) {\n var indeterminate = _a.indeterminate;\n // put props into state if controlled by props\n if (indeterminate != null) {\n return { indeterminate: indeterminate };\n }\n return null;\n };\n Checkbox.prototype.render = function () {\n var _a = this.props, defaultIndeterminate = _a.defaultIndeterminate, indeterminate = _a.indeterminate, controlProps = __rest(_a, [\"defaultIndeterminate\", \"indeterminate\"]);\n return (React.createElement(Control, __assign({}, controlProps, { inputRef: this.handleInputRef, onChange: this.handleChange, type: \"checkbox\", typeClassName: Classes.CHECKBOX })));\n };\n Checkbox.prototype.componentDidMount = function () {\n this.updateIndeterminate();\n };\n Checkbox.prototype.componentDidUpdate = function () {\n this.updateIndeterminate();\n };\n Checkbox.prototype.updateIndeterminate = function () {\n if (this.input != null) {\n this.input.indeterminate = this.state.indeterminate;\n }\n };\n Checkbox.displayName = DISPLAYNAME_PREFIX + \".Checkbox\";\n Checkbox = __decorate([\n polyfill\n ], Checkbox);\n return Checkbox;\n}(AbstractPureComponent2));\nexport { Checkbox };\n//# sourceMappingURL=controls.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n function Tab() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // this component is never rendered directly; see Tabs#renderTabPanel()\n /* istanbul ignore next */\n Tab.prototype.render = function () {\n var _a = this.props, className = _a.className, panel = _a.panel;\n return (React.createElement(\"div\", { className: classNames(Classes.TAB_PANEL, className), role: \"tablist\" }, panel));\n };\n Tab.defaultProps = {\n disabled: false,\n id: undefined,\n };\n Tab.displayName = DISPLAYNAME_PREFIX + \".Tab\";\n Tab = __decorate([\n polyfill\n ], Tab);\n return Tab;\n}(AbstractPureComponent2));\nexport { Tab };\n//# sourceMappingURL=tab.js.map","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { DISPLAYNAME_PREFIX, Icon, Popover, Position } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { Utils } from \"../../common/utils\";\nimport { Locator } from \"../../locator\";\n// amount in pixels that the content div width changes when truncated vs when\n// not truncated. Note: could be modified by styles\n// Note 2: this doesn't come from the width of the popover element, but the \"right\" style\n// on the div, which comes from styles\nvar CONTENT_DIV_WIDTH_DELTA = 25;\nexport var TruncatedPopoverMode;\n(function (TruncatedPopoverMode) {\n TruncatedPopoverMode[\"ALWAYS\"] = \"always\";\n TruncatedPopoverMode[\"NEVER\"] = \"never\";\n TruncatedPopoverMode[\"WHEN_TRUNCATED\"] = \"when-truncated\";\n TruncatedPopoverMode[\"WHEN_TRUNCATED_APPROX\"] = \"when-truncated-approx\";\n})(TruncatedPopoverMode || (TruncatedPopoverMode = {}));\nvar TruncatedFormat = /** @class */ (function (_super) {\n __extends(TruncatedFormat, _super);\n function TruncatedFormat() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isPopoverOpen: false,\n isTruncated: false,\n };\n _this.handleContentDivRef = function (ref) { return (_this.contentDiv = ref); };\n _this.handlePopoverOpen = function () {\n _this.setState({ isPopoverOpen: true });\n };\n _this.handlePopoverClose = function () {\n _this.setState({ isPopoverOpen: false });\n };\n return _this;\n }\n TruncatedFormat.prototype.componentDidMount = function () {\n this.setTruncationState();\n };\n TruncatedFormat.prototype.componentDidUpdate = function () {\n this.setTruncationState();\n };\n TruncatedFormat.prototype.render = function () {\n var _a = this.props, children = _a.children, detectTruncation = _a.detectTruncation, truncateLength = _a.truncateLength, truncationSuffix = _a.truncationSuffix;\n var content = \"\" + children;\n var cellContent = content;\n if (!detectTruncation && truncateLength > 0 && cellContent.length > truncateLength) {\n cellContent = cellContent.substring(0, truncateLength) + truncationSuffix;\n }\n if (this.shouldShowPopover(content)) {\n var className = classNames(this.props.className, Classes.TABLE_TRUNCATED_FORMAT);\n return (React.createElement(\"div\", { className: className },\n React.createElement(\"div\", { className: Classes.TABLE_TRUNCATED_VALUE, ref: this.handleContentDivRef }, cellContent),\n this.renderPopover()));\n }\n else {\n var className = classNames(this.props.className, Classes.TABLE_TRUNCATED_FORMAT_TEXT);\n return (React.createElement(\"div\", { className: className, ref: this.handleContentDivRef }, cellContent));\n }\n };\n TruncatedFormat.prototype.renderPopover = function () {\n var _a = this.props, children = _a.children, preformatted = _a.preformatted;\n // `<Popover>` will always check the content's position on update\n // regardless if it is open or not. This negatively affects perf due to\n // layout thrashing. So instead we manage the popover state ourselves\n // and mimic its popover target\n if (this.state.isPopoverOpen) {\n var popoverClasses = classNames(Classes.TABLE_TRUNCATED_POPOVER, preformatted ? Classes.TABLE_POPOVER_WHITESPACE_PRE : Classes.TABLE_POPOVER_WHITESPACE_NORMAL);\n var popoverContent = React.createElement(\"div\", { className: popoverClasses }, children);\n return (React.createElement(Popover, { className: Classes.TABLE_TRUNCATED_POPOVER_TARGET, modifiers: { preventOverflow: { boundariesElement: \"window\" } }, content: popoverContent, position: Position.BOTTOM, isOpen: true, onClose: this.handlePopoverClose },\n React.createElement(Icon, { icon: \"more\" })));\n }\n else {\n // NOTE: This structure matches what `<Popover>` does internally. If\n // `<Popover>` changes, this must be updated.\n return (React.createElement(\"span\", { className: Classes.TABLE_TRUNCATED_POPOVER_TARGET, onClick: this.handlePopoverOpen },\n React.createElement(Icon, { icon: \"more\" })));\n }\n };\n TruncatedFormat.prototype.shouldShowPopover = function (content) {\n var _a = this.props, detectTruncation = _a.detectTruncation, measureByApproxOptions = _a.measureByApproxOptions, showPopover = _a.showPopover, truncateLength = _a.truncateLength;\n switch (showPopover) {\n case TruncatedPopoverMode.ALWAYS:\n return true;\n case TruncatedPopoverMode.NEVER:\n return false;\n case TruncatedPopoverMode.WHEN_TRUNCATED:\n return detectTruncation\n ? this.state.isTruncated\n : truncateLength > 0 && content.length > truncateLength;\n case TruncatedPopoverMode.WHEN_TRUNCATED_APPROX:\n if (!detectTruncation) {\n return truncateLength > 0 && content.length > truncateLength;\n }\n if (this.props.parentCellHeight == null || this.props.parentCellWidth == null) {\n return false;\n }\n var approximateCharWidth = measureByApproxOptions.approximateCharWidth, approximateLineHeight = measureByApproxOptions.approximateLineHeight, cellHorizontalPadding = measureByApproxOptions.cellHorizontalPadding, numBufferLines = measureByApproxOptions.numBufferLines;\n var cellWidth = this.props.parentCellWidth;\n var approxCellHeight = Utils.getApproxCellHeight(content, cellWidth, approximateCharWidth, approximateLineHeight, cellHorizontalPadding, numBufferLines);\n var shouldTruncate = approxCellHeight > this.props.parentCellHeight;\n return shouldTruncate;\n default:\n return false;\n }\n };\n TruncatedFormat.prototype.setTruncationState = function () {\n if (!this.props.detectTruncation || this.props.showPopover !== TruncatedPopoverMode.WHEN_TRUNCATED) {\n return;\n }\n if (this.contentDiv === undefined) {\n this.setState({ isTruncated: false });\n return;\n }\n var isTruncated = this.state.isTruncated;\n // take all measurements at once to avoid excessive DOM reflows.\n var _a = this.contentDiv, containerHeight = _a.clientHeight, containerWidth = _a.clientWidth, actualContentHeight = _a.scrollHeight, contentWidth = _a.scrollWidth;\n // if the content is truncated, then a popover handle will be present as a\n // sibling of the content. we don't want to consider that handle when\n // calculating the width of the actual content, so subtract it.\n var actualContentWidth = isTruncated ? contentWidth - CONTENT_DIV_WIDTH_DELTA : contentWidth;\n // we of course truncate the content if it doesn't fit in the container. but we\n // also aggressively truncate if they're the same size with truncation enabled;\n // this addresses browser-crashing stack-overflow bugs at various zoom levels.\n // (see: https://github.com/palantir/blueprint/pull/1519)\n var shouldTruncate = (isTruncated && actualContentWidth === containerWidth) ||\n actualContentWidth > containerWidth ||\n actualContentHeight > containerHeight;\n this.setState({ isTruncated: shouldTruncate });\n };\n TruncatedFormat.displayName = DISPLAYNAME_PREFIX + \".TruncatedFormat\";\n TruncatedFormat.defaultProps = {\n detectTruncation: false,\n measureByApproxOptions: {\n approximateCharWidth: 8,\n approximateLineHeight: 18,\n cellHorizontalPadding: 2 * Locator.CELL_HORIZONTAL_PADDING,\n numBufferLines: 0,\n },\n preformatted: false,\n showPopover: TruncatedPopoverMode.WHEN_TRUNCATED,\n truncateLength: 2000,\n truncationSuffix: \"...\",\n };\n return TruncatedFormat;\n}(React.PureComponent));\nexport { TruncatedFormat };\n//# sourceMappingURL=truncatedFormat.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Classes from \"./common/classes\";\nimport { Rect } from \"./common/rect\";\nimport { Utils } from \"./common/utils\";\nvar Locator = /** @class */ (function () {\n function Locator(\n /* The root table element within which a click is deemed valid and relevant. */\n tableElement, \n /* The scrollable element that wraps the cell container. */\n scrollContainerElement, \n /* The element containing all body cells in the grid (excluding headers). */\n cellContainerElement) {\n var _this = this;\n this.tableElement = tableElement;\n this.scrollContainerElement = scrollContainerElement;\n this.cellContainerElement = cellContainerElement;\n this.convertCellIndexToClientX = function (index) {\n return _this.grid.getCumulativeWidthAt(index);\n };\n this.convertCellMidpointToClientX = function (index) {\n var cellLeft = _this.grid.getCumulativeWidthBefore(index);\n var cellRight = _this.grid.getCumulativeWidthAt(index);\n return (cellLeft + cellRight) / 2;\n };\n this.convertCellIndexToClientY = function (index) {\n return _this.grid.getCumulativeHeightAt(index);\n };\n this.convertCellMidpointToClientY = function (index) {\n var cellTop = _this.grid.getCumulativeHeightBefore(index);\n var cellBottom = _this.grid.getCumulativeHeightAt(index);\n return (cellTop + cellBottom) / 2;\n };\n this.toGridX = function (clientX) {\n var gridOffsetFromPageLeft = _this.cellContainerElement.getBoundingClientRect().left;\n var scrollOffsetFromGridLeft = _this.scrollContainerElement.scrollLeft;\n var cursorOffsetFromGridLeft = clientX - (gridOffsetFromPageLeft + scrollOffsetFromGridLeft);\n var isCursorWithinFrozenColumns = _this.numFrozenColumns != null &&\n _this.numFrozenColumns > 0 &&\n cursorOffsetFromGridLeft <= _this.grid.getCumulativeWidthBefore(_this.numFrozenColumns);\n // the frozen-column region doesn't scroll, so ignore the scroll distance in that case\n return isCursorWithinFrozenColumns\n ? cursorOffsetFromGridLeft\n : cursorOffsetFromGridLeft + scrollOffsetFromGridLeft;\n };\n this.toGridY = function (clientY) {\n var gridOffsetFromPageTop = _this.cellContainerElement.getBoundingClientRect().top;\n var scrollOffsetFromGridTop = _this.scrollContainerElement.scrollTop;\n var cursorOffsetFromGridTop = clientY - (gridOffsetFromPageTop + scrollOffsetFromGridTop);\n var isCursorWithinFrozenRows = _this.numFrozenRows != null &&\n _this.numFrozenRows > 0 &&\n cursorOffsetFromGridTop <= _this.grid.getCumulativeHeightBefore(_this.numFrozenRows);\n return isCursorWithinFrozenRows ? cursorOffsetFromGridTop : cursorOffsetFromGridTop + scrollOffsetFromGridTop;\n };\n this.numFrozenRows = 0;\n this.numFrozenColumns = 0;\n }\n // Setters\n // =======\n Locator.prototype.setGrid = function (grid) {\n this.grid = grid;\n return this;\n };\n Locator.prototype.setNumFrozenRows = function (numFrozenRows) {\n this.numFrozenRows = numFrozenRows;\n return this;\n };\n Locator.prototype.setNumFrozenColumns = function (numFrozenColumns) {\n this.numFrozenColumns = numFrozenColumns;\n return this;\n };\n // Getters\n // =======\n Locator.prototype.getViewportRect = function () {\n return new Rect(this.scrollContainerElement.scrollLeft, this.scrollContainerElement.scrollTop, this.scrollContainerElement.clientWidth, this.scrollContainerElement.clientHeight);\n };\n Locator.prototype.getWidestVisibleCellInColumn = function (columnIndex) {\n var columnCellSelector = this.getColumnCellSelector(columnIndex);\n var columnHeaderAndBodyCells = this.tableElement.querySelectorAll(columnCellSelector);\n var maxWidth = 0;\n for (var i = 0; i < columnHeaderAndBodyCells.length; i++) {\n var contentWidth = Utils.measureElementTextContent(columnHeaderAndBodyCells.item(i)).width;\n var cellWidth = Math.ceil(contentWidth) + Locator.CELL_HORIZONTAL_PADDING * 2;\n if (cellWidth > maxWidth) {\n maxWidth = cellWidth;\n }\n }\n return maxWidth;\n };\n Locator.prototype.getTallestVisibleCellInColumn = function (columnIndex) {\n // consider only body cells, hence the extra Classes.TABLE_CELL specificity\n var columnCellSelector = this.getColumnCellSelector(columnIndex);\n var columnBodyCells = this.tableElement.querySelectorAll(columnCellSelector + \".\" + Classes.TABLE_CELL);\n var maxHeight = 0;\n for (var i = 0; i < columnBodyCells.length; i++) {\n var cell = columnBodyCells.item(i);\n var cellValue = cell.querySelector(\".\" + Classes.TABLE_TRUNCATED_VALUE);\n var cellTruncatedFormatText = cell.querySelector(\".\" + Classes.TABLE_TRUNCATED_FORMAT_TEXT);\n var cellTruncatedText = cell.querySelector(\".\" + Classes.TABLE_TRUNCATED_TEXT);\n var height = 0;\n if (cellValue != null) {\n height = cellValue.scrollHeight;\n }\n else if (cellTruncatedFormatText != null) {\n height = cellTruncatedFormatText.scrollHeight;\n }\n else if (cellTruncatedText != null) {\n height = cellTruncatedText.scrollHeight;\n }\n else {\n // it's not anything we recognize, just use the current height of the cell\n height = cell.scrollHeight;\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return maxHeight;\n };\n // Converters\n // ==========\n Locator.prototype.convertPointToColumn = function (clientX, useMidpoint) {\n var tableRect = this.getTableRect();\n if (!tableRect.containsX(clientX)) {\n return -1;\n }\n var gridX = this.toGridX(clientX);\n var limit = useMidpoint ? this.grid.numCols : this.grid.numCols - 1;\n var lookupFn = useMidpoint ? this.convertCellMidpointToClientX : this.convertCellIndexToClientX;\n return Utils.binarySearch(gridX, limit, lookupFn);\n };\n Locator.prototype.convertPointToRow = function (clientY, useMidpoint) {\n var tableRect = this.getTableRect();\n if (!tableRect.containsY(clientY)) {\n return -1;\n }\n var gridY = this.toGridY(clientY);\n var limit = useMidpoint ? this.grid.numRows : this.grid.numRows - 1;\n var lookupFn = useMidpoint ? this.convertCellMidpointToClientY : this.convertCellIndexToClientY;\n return Utils.binarySearch(gridY, limit, lookupFn);\n };\n Locator.prototype.convertPointToCell = function (clientX, clientY) {\n var gridX = this.toGridX(clientX);\n var gridY = this.toGridY(clientY);\n var col = Utils.binarySearch(gridX, this.grid.numCols - 1, this.convertCellIndexToClientX);\n var row = Utils.binarySearch(gridY, this.grid.numRows - 1, this.convertCellIndexToClientY);\n return { col: col, row: row };\n };\n // Private helpers\n // ===============\n Locator.prototype.getColumnCellSelector = function (columnIndex) {\n // measure frozen columns in the LEFT quadrant; otherwise, they might\n // have been scrolled out of view, leading to wonky measurements (#1561)\n var isFrozenColumnIndex = columnIndex < this.numFrozenColumns;\n var quadrantClass = isFrozenColumnIndex ? Classes.TABLE_QUADRANT_LEFT : Classes.TABLE_QUADRANT_MAIN;\n var cellClass = Classes.columnCellIndexClass(columnIndex);\n return \".\" + quadrantClass + \" .\" + cellClass;\n };\n Locator.prototype.getTableRect = function () {\n return Rect.wrap(this.tableElement.getBoundingClientRect());\n };\n Locator.CELL_HORIZONTAL_PADDING = 10;\n return Locator;\n}());\nexport { Locator };\n//# sourceMappingURL=locator.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport { DISPLAYNAME_PREFIX } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { TruncatedFormat, TruncatedPopoverMode } from \"./truncatedFormat\";\nvar JSONFormat = /** @class */ (function (_super) {\n __extends(JSONFormat, _super);\n function JSONFormat() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n JSONFormat.prototype.render = function () {\n var _a;\n var _b = this.props, children = _b.children, omitQuotesOnStrings = _b.omitQuotesOnStrings, stringify = _b.stringify;\n var showPopover = this.props.showPopover;\n // always hide popover if value is nully\n var isNully = children == null;\n if (isNully) {\n showPopover = TruncatedPopoverMode.NEVER;\n }\n var className = classNames(this.props.className, (_a = {},\n _a[Classes.TABLE_NULL] = isNully,\n _a));\n var displayValue = \"\";\n if (omitQuotesOnStrings && typeof children === \"string\") {\n displayValue = children;\n }\n else {\n displayValue = stringify(children);\n }\n return (React.createElement(TruncatedFormat, __assign({}, this.props, { className: className, showPopover: showPopover }), displayValue));\n };\n JSONFormat.displayName = DISPLAYNAME_PREFIX + \".JSONFormat\";\n JSONFormat.defaultProps = {\n omitQuotesOnStrings: true,\n stringify: function (obj) { return JSON.stringify(obj, null, 2); },\n };\n return JSONFormat;\n}(React.Component));\nexport { JSONFormat };\n//# sourceMappingURL=jsonFormat.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { Classes as CoreClasses, DISPLAYNAME_PREFIX, Utils as CoreUtils, } from \"@blueprintjs/core\";\nimport { LoadableContent } from \"../common/loadableContent\";\nimport { JSONFormat } from \"./formats/jsonFormat\";\nimport { TruncatedFormat } from \"./formats/truncatedFormat\";\nexport var emptyCellRenderer = function () { return React.createElement(Cell, null); };\nvar Cell = /** @class */ (function (_super) {\n __extends(Cell, _super);\n function Cell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Cell.prototype.shouldComponentUpdate = function (nextProps) {\n // deeply compare \"style,\" because a new but identical object might have been provided.\n return (!CoreUtils.shallowCompareKeys(this.props, nextProps, { exclude: [\"style\"] }) ||\n !CoreUtils.deepCompareKeys(this.props.style, nextProps.style));\n };\n Cell.prototype.render = function () {\n var _a, _b;\n var _c = this.props, cellRef = _c.cellRef, tabIndex = _c.tabIndex, onKeyDown = _c.onKeyDown, onKeyUp = _c.onKeyUp, onKeyPress = _c.onKeyPress, style = _c.style, intent = _c.intent, interactive = _c.interactive, loading = _c.loading, tooltip = _c.tooltip, truncated = _c.truncated, className = _c.className, wrapText = _c.wrapText;\n var classes = classNames(Classes.TABLE_CELL, CoreClasses.intentClass(intent), (_a = {},\n _a[Classes.TABLE_CELL_INTERACTIVE] = interactive,\n _a[CoreClasses.LOADING] = loading,\n _a[Classes.TABLE_TRUNCATED_CELL] = truncated,\n _a), className);\n var textClasses = classNames((_b = {},\n _b[Classes.TABLE_TRUNCATED_TEXT] = truncated,\n _b[Classes.TABLE_NO_WRAP_TEXT] = !wrapText,\n _b));\n // add width and height to the children, for use in shouldComponentUpdate in truncatedFormat\n // note: these aren't actually used by truncated format, just in shouldComponentUpdate\n var modifiedChildren = React.Children.map(this.props.children, function (child) {\n var isFormatElement = CoreUtils.isElementOfType(child, TruncatedFormat) || CoreUtils.isElementOfType(child, JSONFormat);\n if (style != null && React.isValidElement(child) && isFormatElement) {\n return React.cloneElement(child, {\n parentCellHeight: parseInt(style.height.toString(), 10),\n parentCellWidth: parseInt(style.width.toString(), 10),\n });\n }\n return child;\n });\n var content = React.createElement(\"div\", { className: textClasses }, modifiedChildren);\n return (React.createElement(\"div\", __assign({ className: classes, title: tooltip, ref: cellRef }, { style: style, tabIndex: tabIndex, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onKeyPress: onKeyPress }),\n React.createElement(LoadableContent, { loading: loading, variableLength: true }, content)));\n };\n Cell.displayName = DISPLAYNAME_PREFIX + \".Cell\";\n Cell.defaultProps = {\n truncated: true,\n wrapText: false,\n };\n return Cell;\n}(React.Component));\nexport { Cell };\n//# sourceMappingURL=cell.js.map","module.exports = require(\"regenerator-runtime\");\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports);\n global.index = mod.exports;\n }\n})(this, function (exports) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n var isDate = exports.isDate = function isDate(d) {\n return d instanceof Date;\n };\n var isEmpty = exports.isEmpty = function isEmpty(o) {\n return Object.keys(o).length === 0;\n };\n var isObject = exports.isObject = function isObject(o) {\n return o != null && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object';\n };\n var properObject = exports.properObject = function properObject(o) {\n return isObject(o) && !o.hasOwnProperty ? _extends({}, o) : o;\n };\n});","'use strict'\n\nvar fromCharCode = String.fromCharCode\n\nmodule.exports = fromCharCode\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('./factory-space.js')\n\nvar partialBlankLine = {\n tokenize: tokenizePartialBlankLine,\n partial: true\n}\n\nfunction tokenizePartialBlankLine(effects, ok, nok) {\n return factorySpace(effects, afterWhitespace, 'linePrefix')\n\n function afterWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n\nmodule.exports = partialBlankLine\n","'use strict'\n\nfunction resolveAll(constructs, events, context) {\n var called = []\n var index = -1\n var resolve\n\n while (++index < constructs.length) {\n resolve = constructs[index].resolveAll\n\n if (resolve && called.indexOf(resolve) < 0) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n\nmodule.exports = resolveAll\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAlpha = regexCheck(/[A-Za-z]/)\n\nmodule.exports = asciiAlpha\n","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","'use strict'\n\nvar powers = 0\n\nexports.boolean = increment()\nexports.booleanish = increment()\nexports.overloadedBoolean = increment()\nexports.number = increment()\nexports.spaceSeparated = increment()\nexports.commaSeparated = increment()\nexports.commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return Math.pow(2, ++powers)\n}\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/**\n * @private\n */\nfunction appendForwardSlash(url) {\n if (url.length === 0 || url[url.length - 1] !== \"/\") {\n url = url + \"/\";\n }\n return url;\n}\nexport default appendForwardSlash;\n","import Uri from \"../ThirdParty/Uri.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the base path of the URI.\n * @function\n *\n * @param {String} uri The Uri.\n * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\n * @returns {String} The base path of the Uri.\n *\n * @example\n * // basePath will be \"/Gallery/\";\n * var basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false');\n *\n * // basePath will be \"/Gallery/?value=true&example=false\";\n * var basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false', true);\n */\nfunction getBaseUri(uri, includeQuery) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(uri)) {\n throw new DeveloperError(\"uri is required.\");\n }\n //>>includeEnd('debug');\n\n var basePath = \"\";\n var i = uri.lastIndexOf(\"/\");\n if (i !== -1) {\n basePath = uri.substring(0, i + 1);\n }\n\n if (!includeQuery) {\n return basePath;\n }\n\n uri = new Uri(uri);\n if (defined(uri.query)) {\n basePath += \"?\" + uri.query;\n }\n if (defined(uri.fragment)) {\n basePath += \"#\" + uri.fragment;\n }\n\n return basePath;\n}\nexport default getBaseUri;\n","/**\n * Parses the result of XMLHttpRequest's getAllResponseHeaders() method into\n * a dictionary.\n *\n * @function parseResponseHeaders\n *\n * @param {String} headerString The header string returned by getAllResponseHeaders(). The format is\n * described here: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\n * @returns {Object} A dictionary of key/value pairs, where each key is the name of a header and the corresponding value\n * is that header's value.\n *\n * @private\n */\nfunction parseResponseHeaders(headerString) {\n var headers = {};\n\n if (!headerString) {\n return headers;\n }\n\n var headerPairs = headerString.split(\"\\u000d\\u000a\");\n\n for (var i = 0; i < headerPairs.length; ++i) {\n var headerPair = headerPairs[i];\n // Can't use split() here because it does the wrong thing\n // if the header value has the string \": \" in it.\n var index = headerPair.indexOf(\"\\u003a\\u0020\");\n if (index > 0) {\n var key = headerPair.substring(0, index);\n var val = headerPair.substring(index + 2);\n headers[key] = val;\n }\n }\n\n return headers;\n}\nexport default parseResponseHeaders;\n","import Check from \"./Check.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Array implementation of a heap.\n *\n * @alias Heap\n * @constructor\n * @private\n *\n * @param {Object} options Object with the following properties:\n * @param {Heap.ComparatorCallback} options.comparator The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n */\nfunction Heap(options) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.object(\"options\", options);\n Check.defined(\"options.comparator\", options.comparator);\n //>>includeEnd('debug');\n\n this._comparator = options.comparator;\n this._array = [];\n this._length = 0;\n this._maximumLength = undefined;\n}\n\nObject.defineProperties(Heap.prototype, {\n /**\n * Gets the length of the heap.\n *\n * @memberof Heap.prototype\n *\n * @type {Number}\n * @readonly\n */\n length: {\n get: function () {\n return this._length;\n },\n },\n\n /**\n * Gets the internal array.\n *\n * @memberof Heap.prototype\n *\n * @type {Array}\n * @readonly\n */\n internalArray: {\n get: function () {\n return this._array;\n },\n },\n\n /**\n * Gets and sets the maximum length of the heap.\n *\n * @memberof Heap.prototype\n *\n * @type {Number}\n */\n maximumLength: {\n get: function () {\n return this._maximumLength;\n },\n set: function (value) {\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.greaterThanOrEquals(\"maximumLength\", value, 0);\n //>>includeEnd('debug');\n var originalLength = this._length;\n if (value < originalLength) {\n var array = this._array;\n // Remove trailing references\n for (var i = value; i < originalLength; ++i) {\n array[i] = undefined;\n }\n this._length = value;\n array.length = value;\n }\n this._maximumLength = value;\n },\n },\n\n /**\n * The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n *\n * @memberof Heap.prototype\n *\n * @type {Heap.ComparatorCallback}\n */\n comparator: {\n get: function () {\n return this._comparator;\n },\n },\n});\n\nfunction swap(array, a, b) {\n var temp = array[a];\n array[a] = array[b];\n array[b] = temp;\n}\n\n/**\n * Resizes the internal array of the heap.\n *\n * @param {Number} [length] The length to resize internal array to. Defaults to the current length of the heap.\n */\nHeap.prototype.reserve = function (length) {\n length = defaultValue(length, this._length);\n this._array.length = length;\n};\n\n/**\n * Update the heap so that index and all descendants satisfy the heap property.\n *\n * @param {Number} [index=0] The starting index to heapify from.\n */\nHeap.prototype.heapify = function (index) {\n index = defaultValue(index, 0);\n var length = this._length;\n var comparator = this._comparator;\n var array = this._array;\n var candidate = -1;\n var inserting = true;\n\n while (inserting) {\n var right = 2 * (index + 1);\n var left = right - 1;\n\n if (left < length && comparator(array[left], array[index]) < 0) {\n candidate = left;\n } else {\n candidate = index;\n }\n\n if (right < length && comparator(array[right], array[candidate]) < 0) {\n candidate = right;\n }\n if (candidate !== index) {\n swap(array, candidate, index);\n index = candidate;\n } else {\n inserting = false;\n }\n }\n};\n\n/**\n * Resort the heap.\n */\nHeap.prototype.resort = function () {\n var length = this._length;\n for (var i = Math.ceil(length / 2); i >= 0; --i) {\n this.heapify(i);\n }\n};\n\n/**\n * Insert an element into the heap. If the length would grow greater than maximumLength\n * of the heap, extra elements are removed.\n *\n * @param {*} element The element to insert\n *\n * @return {*} The element that was removed from the heap if the heap is at full capacity.\n */\nHeap.prototype.insert = function (element) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"element\", element);\n //>>includeEnd('debug');\n\n var array = this._array;\n var comparator = this._comparator;\n var maximumLength = this._maximumLength;\n\n var index = this._length++;\n if (index < array.length) {\n array[index] = element;\n } else {\n array.push(element);\n }\n\n while (index !== 0) {\n var parent = Math.floor((index - 1) / 2);\n if (comparator(array[index], array[parent]) < 0) {\n swap(array, index, parent);\n index = parent;\n } else {\n break;\n }\n }\n\n var removedElement;\n\n if (defined(maximumLength) && this._length > maximumLength) {\n removedElement = array[maximumLength];\n this._length = maximumLength;\n }\n\n return removedElement;\n};\n\n/**\n * Remove the element specified by index from the heap and return it.\n *\n * @param {Number} [index=0] The index to remove.\n * @returns {*} The specified element of the heap.\n */\nHeap.prototype.pop = function (index) {\n index = defaultValue(index, 0);\n if (this._length === 0) {\n return undefined;\n }\n //>>includeStart('debug', pragmas.debug);\n Check.typeOf.number.lessThan(\"index\", index, this._length);\n //>>includeEnd('debug');\n\n var array = this._array;\n var root = array[index];\n swap(array, index, --this._length);\n this.heapify(index);\n array[this._length] = undefined; // Remove trailing reference\n return root;\n};\n\n/**\n * The comparator to use for the heap.\n * @callback Heap.ComparatorCallback\n * @param {*} a An element in the heap.\n * @param {*} b An element in the heap.\n * @returns {Number} If the result of the comparison is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n */\nexport default Heap;\n","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var BACKSPACE = 8;\nexport var TAB = 9;\nexport var ENTER = 13;\nexport var SHIFT = 16;\nexport var ESCAPE = 27;\nexport var SPACE = 32;\nexport var ARROW_LEFT = 37;\nexport var ARROW_UP = 38;\nexport var ARROW_RIGHT = 39;\nexport var ARROW_DOWN = 40;\nexport var DELETE = 46;\n/** Returns whether the key code is `enter` or `space`, the two keys that can click a button. */\nexport function isKeyboardClick(keyCode) {\n return keyCode === ENTER || keyCode === SPACE;\n}\n//# sourceMappingURL=keys.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport \"../common/configureDom4\";\nimport * as contextMenu from \"./context-menu/contextMenu\";\nexport var ContextMenu = contextMenu;\nexport * from \"./alert/alert\";\nexport * from \"./breadcrumbs/breadcrumb\";\nexport * from \"./breadcrumbs/breadcrumbs\";\nexport * from \"./button/buttons\";\nexport * from \"./button/buttonGroup\";\nexport * from \"./callout/callout\";\nexport * from \"./card/card\";\nexport * from \"./collapse/collapse\";\nexport * from \"./collapsible-list/collapsibleList\";\nexport * from \"./context-menu/contextMenuTarget\";\nexport * from \"./dialog/dialog\";\nexport * from \"./divider/divider\";\nexport * from \"./drawer/drawer\";\nexport * from \"./editable-text/editableText\";\nexport * from \"./forms/controlGroup\";\nexport * from \"./forms/controls\";\nexport * from \"./forms/fileInput\";\nexport * from \"./forms/formGroup\";\nexport * from \"./forms/inputGroup\";\nexport * from \"./forms/numericInput\";\nexport * from \"./forms/radioGroup\";\nexport * from \"./forms/textArea\";\nexport * from \"./html/html\";\nexport * from \"./html-select/htmlSelect\";\nexport * from \"./html-table/htmlTable\";\nexport * from \"./hotkeys/index\";\nexport * from \"./icon/icon\";\nexport * from \"./menu/menu\";\nexport * from \"./menu/menuDivider\";\nexport * from \"./menu/menuItem\";\nexport * from \"./navbar/navbar\";\nexport * from \"./navbar/navbarDivider\";\nexport * from \"./navbar/navbarGroup\";\nexport * from \"./navbar/navbarHeading\";\nexport * from \"./non-ideal-state/nonIdealState\";\nexport * from \"./overflow-list/overflowList\";\nexport * from \"./overlay/overlay\";\nexport * from \"./text/text\";\nexport * from \"./panel-stack/panelProps\";\nexport * from \"./panel-stack/panelStack\";\nexport * from \"./popover/popover\";\nexport * from \"./popover/popoverSharedProps\";\nexport * from \"./portal/portal\";\nexport * from \"./progress-bar/progressBar\";\nexport * from \"./resize-sensor/resizeSensor\";\nexport * from \"./slider/handleProps\";\nexport * from \"./slider/multiSlider\";\nexport * from \"./slider/rangeSlider\";\nexport * from \"./slider/slider\";\nexport * from \"./spinner/spinner\";\nexport * from \"./tabs/tab\";\nexport * from \"./tabs/tabs\";\nexport * from \"./tag/tag\";\nexport * from \"./tag-input/tagInput\";\nexport * from \"./toast/toast\";\nexport * from \"./toast/toaster\";\nexport * from \"./tooltip/tooltip\";\nexport * from \"./tree/tree\";\nexport * from \"./tree/treeNode\";\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// eslint-disable-next-line import/no-cycle\nimport { Popover, PopoverInteractionKind } from \"../popover/popover\";\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n function Tooltip() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.popover = null;\n return _this;\n }\n Tooltip.prototype.render = function () {\n var _this = this;\n var _a = this.props, children = _a.children, intent = _a.intent, popoverClassName = _a.popoverClassName, restProps = __rest(_a, [\"children\", \"intent\", \"popoverClassName\"]);\n var classes = classNames(Classes.TOOLTIP, Classes.intentClass(intent), popoverClassName);\n return (React.createElement(Popover, __assign({ interactionKind: PopoverInteractionKind.HOVER_TARGET_ONLY }, restProps, { autoFocus: false, canEscapeKeyClose: false, enforceFocus: false, lazy: true, popoverClassName: classes, portalContainer: this.props.portalContainer, ref: function (ref) { return (_this.popover = ref); } }), children));\n };\n Tooltip.prototype.reposition = function () {\n if (this.popover != null) {\n this.popover.reposition();\n }\n };\n Tooltip.displayName = DISPLAYNAME_PREFIX + \".Tooltip\";\n Tooltip.defaultProps = {\n hoverCloseDelay: 0,\n hoverOpenDelay: 100,\n transitionDuration: 100,\n };\n Tooltip = __decorate([\n polyfill\n ], Tooltip);\n return Tooltip;\n}(AbstractPureComponent2));\nexport { Tooltip };\n//# sourceMappingURL=tooltip.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as Classes from \"../../common/classes\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { isFunction } from \"../../common/utils\";\n/** Detect if `React.createPortal()` API method does not exist. */\nvar cannotCreatePortal = !isFunction(ReactDOM.createPortal);\nvar REACT_CONTEXT_TYPES = {\n blueprintPortalClassName: function (obj, key) {\n if (obj[key] != null && typeof obj[key] !== \"string\") {\n return new Error(Errors.PORTAL_CONTEXT_CLASS_NAME_STRING);\n }\n return undefined;\n },\n};\n/**\n * This component detaches its contents and re-attaches them to document.body.\n * Use it when you need to circumvent DOM z-stacking (for dialogs, popovers, etc.).\n * Any class names passed to this element will be propagated to the new container element on document.body.\n */\nvar Portal = /** @class */ (function (_super) {\n __extends(Portal, _super);\n function Portal() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = { hasMounted: false };\n return _this;\n }\n Portal.prototype.render = function () {\n // Only render `children` once this component has mounted in a browser environment, so they are\n // immediately attached to the DOM tree and can do DOM things like measuring or `autoFocus`.\n // See long comment on componentDidMount in https://reactjs.org/docs/portals.html#event-bubbling-through-portals\n if (cannotCreatePortal || typeof document === \"undefined\" || !this.state.hasMounted) {\n return null;\n }\n else {\n return ReactDOM.createPortal(this.props.children, this.portalElement);\n }\n };\n Portal.prototype.componentDidMount = function () {\n if (!this.props.container) {\n return;\n }\n this.portalElement = this.createContainerElement();\n this.props.container.appendChild(this.portalElement);\n this.setState({ hasMounted: true }, this.props.onChildrenMount);\n if (cannotCreatePortal) {\n this.unstableRenderNoPortal();\n }\n };\n Portal.prototype.componentDidUpdate = function (prevProps) {\n // update className prop on portal DOM element\n if (this.portalElement != null && prevProps.className !== this.props.className) {\n this.portalElement.classList.remove(prevProps.className);\n maybeAddClass(this.portalElement.classList, this.props.className);\n }\n if (cannotCreatePortal) {\n this.unstableRenderNoPortal();\n }\n };\n Portal.prototype.componentWillUnmount = function () {\n if (this.portalElement != null) {\n if (cannotCreatePortal) {\n ReactDOM.unmountComponentAtNode(this.portalElement);\n }\n this.portalElement.remove();\n }\n };\n Portal.prototype.createContainerElement = function () {\n var container = document.createElement(\"div\");\n container.classList.add(Classes.PORTAL);\n maybeAddClass(container.classList, this.props.className);\n if (this.context != null) {\n maybeAddClass(container.classList, this.context.blueprintPortalClassName);\n }\n return container;\n };\n Portal.prototype.unstableRenderNoPortal = function () {\n ReactDOM.unstable_renderSubtreeIntoContainer(\n /* parentComponent */ this, React.createElement(\"div\", null, this.props.children), this.portalElement);\n };\n Portal.displayName = DISPLAYNAME_PREFIX + \".Portal\";\n Portal.contextTypes = REACT_CONTEXT_TYPES;\n Portal.defaultProps = {\n container: typeof document !== \"undefined\" ? document.body : null,\n };\n return Portal;\n}(React.Component));\nexport { Portal };\nfunction maybeAddClass(classList, className) {\n if (className != null && className !== \"\") {\n classList.add.apply(classList, className.split(\" \"));\n }\n}\n//# sourceMappingURL=portal.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { H6 } from \"../html/html\";\nvar MenuDivider = /** @class */ (function (_super) {\n __extends(MenuDivider, _super);\n function MenuDivider() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MenuDivider.prototype.render = function () {\n var _a = this.props, className = _a.className, title = _a.title;\n if (title == null) {\n // simple divider\n return React.createElement(\"li\", { className: classNames(Classes.MENU_DIVIDER, className) });\n }\n else {\n // section header with title\n return (React.createElement(\"li\", { className: classNames(Classes.MENU_HEADER, className) },\n React.createElement(H6, null, title)));\n }\n };\n MenuDivider.displayName = DISPLAYNAME_PREFIX + \".MenuDivider\";\n return MenuDivider;\n}(React.Component));\nexport { MenuDivider };\n//# sourceMappingURL=menuDivider.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends, __spreadArrays } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { Boundary } from \"../../common/boundary\";\nimport * as Classes from \"../../common/classes\";\nimport { OVERFLOW_LIST_OBSERVE_PARENTS_CHANGED } from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke, shallowCompareKeys } from \"../../common/utils\";\nimport { ResizeSensor } from \"../resize-sensor/resizeSensor\";\n/** @internal - do not expose this type */\nexport var OverflowDirection;\n(function (OverflowDirection) {\n OverflowDirection[OverflowDirection[\"NONE\"] = 0] = \"NONE\";\n OverflowDirection[OverflowDirection[\"GROW\"] = 1] = \"GROW\";\n OverflowDirection[OverflowDirection[\"SHRINK\"] = 2] = \"SHRINK\";\n})(OverflowDirection || (OverflowDirection = {}));\nvar OverflowList = /** @class */ (function (_super) {\n __extends(OverflowList, _super);\n function OverflowList() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n direction: OverflowDirection.NONE,\n lastOverflowCount: 0,\n overflow: [],\n visible: _this.props.items,\n };\n /** A cache containing the widths of all elements being observed to detect growing/shrinking */\n _this.previousWidths = new Map();\n _this.spacer = null;\n _this.resize = function (entries) {\n // if any parent is growing, assume we have more room than before\n var growing = entries.some(function (entry) {\n var previousWidth = _this.previousWidths.get(entry.target) || 0;\n return entry.contentRect.width > previousWidth;\n });\n _this.repartition(growing);\n entries.forEach(function (entry) { return _this.previousWidths.set(entry.target, entry.contentRect.width); });\n };\n return _this;\n }\n OverflowList.ofType = function () {\n return OverflowList;\n };\n OverflowList.prototype.componentDidMount = function () {\n this.repartition(false);\n };\n OverflowList.prototype.shouldComponentUpdate = function (_nextProps, nextState) {\n // We want this component to always re-render, even when props haven't changed, so that\n // changes in the renderers' behavior can be reflected.\n // The following statement prevents re-rendering only in the case where the state changes\n // identity (i.e. setState was called), but the state is still the same when\n // shallow-compared to the previous state.\n return !(this.state !== nextState && shallowCompareKeys(this.state, nextState));\n };\n OverflowList.prototype.componentDidUpdate = function (prevProps, prevState) {\n if (prevProps.observeParents !== this.props.observeParents) {\n console.warn(OVERFLOW_LIST_OBSERVE_PARENTS_CHANGED);\n }\n if (prevProps.collapseFrom !== this.props.collapseFrom ||\n prevProps.items !== this.props.items ||\n prevProps.minVisibleItems !== this.props.minVisibleItems ||\n prevProps.overflowRenderer !== this.props.overflowRenderer ||\n prevProps.visibleItemRenderer !== this.props.visibleItemRenderer) {\n // reset visible state if the above props change.\n this.setState({\n direction: OverflowDirection.GROW,\n lastOverflowCount: 0,\n overflow: [],\n visible: this.props.items,\n });\n }\n if (!shallowCompareKeys(prevState, this.state)) {\n this.repartition(false);\n }\n var _a = this.state, direction = _a.direction, overflow = _a.overflow, lastOverflowCount = _a.lastOverflowCount;\n if (\n // if a resize operation has just completed (transition to NONE)\n direction === OverflowDirection.NONE &&\n direction !== prevState.direction &&\n overflow.length !== lastOverflowCount) {\n safeInvoke(this.props.onOverflow, overflow);\n }\n };\n OverflowList.prototype.render = function () {\n var _this = this;\n var _a = this.props, className = _a.className, collapseFrom = _a.collapseFrom, observeParents = _a.observeParents, style = _a.style, _b = _a.tagName, tagName = _b === void 0 ? \"div\" : _b, visibleItemRenderer = _a.visibleItemRenderer;\n var overflow = this.maybeRenderOverflow();\n var list = React.createElement(tagName, {\n className: classNames(Classes.OVERFLOW_LIST, className),\n style: style,\n }, collapseFrom === Boundary.START ? overflow : null, this.state.visible.map(visibleItemRenderer), collapseFrom === Boundary.END ? overflow : null, React.createElement(\"div\", { className: Classes.OVERFLOW_LIST_SPACER, ref: function (ref) { return (_this.spacer = ref); } }));\n return (React.createElement(ResizeSensor, { onResize: this.resize, observeParents: observeParents }, list));\n };\n OverflowList.prototype.maybeRenderOverflow = function () {\n var overflow = this.state.overflow;\n if (overflow.length === 0) {\n return null;\n }\n return this.props.overflowRenderer(overflow);\n };\n OverflowList.prototype.repartition = function (growing) {\n var _this = this;\n if (this.spacer == null) {\n return;\n }\n if (growing) {\n this.setState(function (state) { return ({\n direction: OverflowDirection.GROW,\n // store last overflow if this is the beginning of a resize (for check in componentDidUpdate).\n lastOverflowCount: state.direction === OverflowDirection.NONE ? state.overflow.length : state.lastOverflowCount,\n overflow: [],\n visible: _this.props.items,\n }); });\n }\n else if (this.spacer.getBoundingClientRect().width < 0.9) {\n // spacer has flex-shrink and width 1px so if it's much smaller then we know to shrink\n this.setState(function (state) {\n if (state.visible.length <= _this.props.minVisibleItems) {\n return null;\n }\n var collapseFromStart = _this.props.collapseFrom === Boundary.START;\n var visible = state.visible.slice();\n var next = collapseFromStart ? visible.shift() : visible.pop();\n if (next === undefined) {\n return null;\n }\n var overflow = collapseFromStart ? __spreadArrays(state.overflow, [next]) : __spreadArrays([next], state.overflow);\n return {\n // set SHRINK mode unless a GROW is already in progress.\n // GROW shows all items then shrinks until it settles, so we\n // preserve the fact that the original trigger was a GROW.\n direction: state.direction === OverflowDirection.NONE ? OverflowDirection.SHRINK : state.direction,\n overflow: overflow,\n visible: visible,\n };\n });\n }\n else {\n // repartition complete!\n this.setState({ direction: OverflowDirection.NONE });\n }\n };\n OverflowList.displayName = DISPLAYNAME_PREFIX + \".OverflowList\";\n OverflowList.defaultProps = {\n collapseFrom: Boundary.START,\n minVisibleItems: 0,\n };\n return OverflowList;\n}(React.Component));\nexport { OverflowList };\n//# sourceMappingURL=overflowList.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { Icon } from \"../icon/icon\";\nexport var Breadcrumb = function (breadcrumbProps) {\n var _a;\n var classes = classNames(Classes.BREADCRUMB, (_a = {},\n _a[Classes.BREADCRUMB_CURRENT] = breadcrumbProps.current,\n _a[Classes.DISABLED] = breadcrumbProps.disabled,\n _a), breadcrumbProps.className);\n var icon = breadcrumbProps.icon != null ? React.createElement(Icon, { icon: breadcrumbProps.icon }) : undefined;\n if (breadcrumbProps.href == null && breadcrumbProps.onClick == null) {\n return (React.createElement(\"span\", { className: classes },\n icon,\n breadcrumbProps.text,\n breadcrumbProps.children));\n }\n return (React.createElement(\"a\", { className: classes, href: breadcrumbProps.href, onClick: breadcrumbProps.disabled ? null : breadcrumbProps.onClick, tabIndex: breadcrumbProps.disabled ? null : 0, target: breadcrumbProps.target },\n icon,\n breadcrumbProps.text,\n breadcrumbProps.children));\n};\n//# sourceMappingURL=breadcrumb.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { SPINNER_WARN_CLASSES_SIZE } from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { clamp } from \"../../common/utils\";\n// see http://stackoverflow.com/a/18473154/3124288 for calculating arc path\nvar R = 45;\nvar SPINNER_TRACK = \"M 50,50 m 0,-\" + R + \" a \" + R + \",\" + R + \" 0 1 1 0,\" + R * 2 + \" a \" + R + \",\" + R + \" 0 1 1 0,-\" + R * 2;\n// unitless total length of SVG path, to which stroke-dash* properties are relative.\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pathLength\n// this value is the result of `<path d={SPINNER_TRACK} />.getTotalLength()` and works in all browsers:\nvar PATH_LENGTH = 280;\nvar MIN_SIZE = 10;\nvar STROKE_WIDTH = 4;\nvar MIN_STROKE_WIDTH = 16;\nvar Spinner = /** @class */ (function (_super) {\n __extends(Spinner, _super);\n function Spinner() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Spinner_1 = Spinner;\n Spinner.prototype.componentDidUpdate = function (prevProps) {\n if (prevProps.value !== this.props.value) {\n // IE/Edge: re-render after changing value to force SVG update\n this.forceUpdate();\n }\n };\n Spinner.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, intent = _b.intent, value = _b.value, _c = _b.tagName, tagName = _c === void 0 ? \"div\" : _c;\n var size = this.getSize();\n var classes = classNames(Classes.SPINNER, Classes.intentClass(intent), (_a = {}, _a[Classes.SPINNER_NO_SPIN] = value != null, _a), className);\n // keep spinner track width consistent at all sizes (down to about 10px).\n var strokeWidth = Math.min(MIN_STROKE_WIDTH, (STROKE_WIDTH * Spinner_1.SIZE_LARGE) / size);\n var strokeOffset = PATH_LENGTH - PATH_LENGTH * (value == null ? 0.25 : clamp(value, 0, 1));\n // multiple DOM elements around SVG are necessary to properly isolate animation:\n // - SVG elements in IE do not support anim/trans so they must be set on a parent HTML element.\n // - SPINNER_ANIMATION isolates svg from parent display and is always centered inside root element.\n return React.createElement(tagName, { className: classes }, React.createElement(tagName, { className: Classes.SPINNER_ANIMATION }, React.createElement(\"svg\", { width: size, height: size, strokeWidth: strokeWidth.toFixed(2), viewBox: this.getViewBox(strokeWidth) },\n React.createElement(\"path\", { className: Classes.SPINNER_TRACK, d: SPINNER_TRACK }),\n React.createElement(\"path\", { className: Classes.SPINNER_HEAD, d: SPINNER_TRACK, pathLength: PATH_LENGTH, strokeDasharray: PATH_LENGTH + \" \" + PATH_LENGTH, strokeDashoffset: strokeOffset }))));\n };\n Spinner.prototype.validateProps = function (_a) {\n var _b = _a.className, className = _b === void 0 ? \"\" : _b, size = _a.size;\n if (size != null && (className.indexOf(Classes.SMALL) >= 0 || className.indexOf(Classes.LARGE) >= 0)) {\n console.warn(SPINNER_WARN_CLASSES_SIZE);\n }\n };\n /**\n * Resolve size to a pixel value.\n * Size can be set by className, props, default, or minimum constant.\n */\n Spinner.prototype.getSize = function () {\n var _a = this.props, _b = _a.className, className = _b === void 0 ? \"\" : _b, size = _a.size;\n if (size == null) {\n // allow Classes constants to determine default size.\n if (className.indexOf(Classes.SMALL) >= 0) {\n return Spinner_1.SIZE_SMALL;\n }\n else if (className.indexOf(Classes.LARGE) >= 0) {\n return Spinner_1.SIZE_LARGE;\n }\n return Spinner_1.SIZE_STANDARD;\n }\n return Math.max(MIN_SIZE, size);\n };\n /** Compute viewbox such that stroked track sits exactly at edge of image frame. */\n Spinner.prototype.getViewBox = function (strokeWidth) {\n var radius = R + strokeWidth / 2;\n var viewBoxX = (50 - radius).toFixed(2);\n var viewBoxWidth = (radius * 2).toFixed(2);\n return viewBoxX + \" \" + viewBoxX + \" \" + viewBoxWidth + \" \" + viewBoxWidth;\n };\n var Spinner_1;\n Spinner.displayName = DISPLAYNAME_PREFIX + \".Spinner\";\n Spinner.SIZE_SMALL = 20;\n Spinner.SIZE_STANDARD = 50;\n Spinner.SIZE_LARGE = 100;\n Spinner = Spinner_1 = __decorate([\n polyfill\n ], Spinner);\n return Spinner;\n}(AbstractPureComponent2));\nexport { Spinner };\n//# sourceMappingURL=spinner.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n/**\n * `Collapse` can be in one of six states, enumerated here.\n * When changing the `isOpen` prop, the following happens to the states:\n * isOpen={true} : CLOSED -> OPEN_START -> OPENING -> OPEN\n * isOpen={false} : OPEN -> CLOSING_START -> CLOSING -> CLOSED\n */\nexport var AnimationStates;\n(function (AnimationStates) {\n /**\n * The body is re-rendered, height is set to the measured body height and\n * the body Y is set to 0.\n */\n AnimationStates[AnimationStates[\"OPEN_START\"] = 0] = \"OPEN_START\";\n /**\n * Animation begins, height is set to auto. This is all animated, and on\n * complete, the state changes to OPEN.\n */\n AnimationStates[AnimationStates[\"OPENING\"] = 1] = \"OPENING\";\n /**\n * The collapse height is set to auto, and the body Y is set to 0 (so the\n * element can be seen as normal).\n */\n AnimationStates[AnimationStates[\"OPEN\"] = 2] = \"OPEN\";\n /**\n * Height has been changed from auto to the measured height of the body to\n * prepare for the closing animation in CLOSING.\n */\n AnimationStates[AnimationStates[\"CLOSING_START\"] = 3] = \"CLOSING_START\";\n /**\n * Height is set to 0 and the body Y is at -height. Both of these properties\n * are transformed, and then after the animation is complete, the state\n * changes to CLOSED.\n */\n AnimationStates[AnimationStates[\"CLOSING\"] = 4] = \"CLOSING\";\n /**\n * The contents of the collapse is not rendered, the collapse height is 0,\n * and the body Y is at -height (so that the bottom of the body is at Y=0).\n */\n AnimationStates[AnimationStates[\"CLOSED\"] = 5] = \"CLOSED\";\n})(AnimationStates || (AnimationStates = {}));\nvar Collapse = /** @class */ (function (_super) {\n __extends(Collapse, _super);\n function Collapse() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n animationState: _this.props.isOpen ? AnimationStates.OPEN : AnimationStates.CLOSED,\n height: undefined,\n heightWhenOpen: undefined,\n };\n _this.contentsRefHandler = function (el) {\n _this.contents = el;\n if (_this.contents != null) {\n var height = _this.contents.clientHeight;\n _this.setState({\n animationState: _this.props.isOpen ? AnimationStates.OPEN : AnimationStates.CLOSED,\n height: height === 0 ? undefined : height + \"px\",\n heightWhenOpen: height === 0 ? undefined : height,\n });\n }\n };\n return _this;\n }\n Collapse.getDerivedStateFromProps = function (props, state) {\n var isOpen = props.isOpen;\n var animationState = state.animationState;\n if (isOpen) {\n switch (animationState) {\n case AnimationStates.OPEN:\n // no-op\n break;\n case AnimationStates.OPENING:\n // allow Collapse#onDelayedStateChange() to handle the transition here\n break;\n default:\n return { animationState: AnimationStates.OPEN_START };\n }\n }\n else {\n switch (animationState) {\n case AnimationStates.CLOSED:\n // no-op\n break;\n case AnimationStates.CLOSING:\n // allow Collapse#onDelayedStateChange() to handle the transition here\n break;\n default:\n // need to set an explicit height so that transition can work\n return {\n animationState: AnimationStates.CLOSING_START,\n height: state.heightWhenOpen + \"px\",\n };\n }\n }\n return null;\n };\n Collapse.prototype.render = function () {\n var isContentVisible = this.state.animationState !== AnimationStates.CLOSED;\n var shouldRenderChildren = isContentVisible || this.props.keepChildrenMounted;\n var displayWithTransform = isContentVisible && this.state.animationState !== AnimationStates.CLOSING;\n var isAutoHeight = this.state.height === \"auto\";\n var containerStyle = {\n height: isContentVisible ? this.state.height : undefined,\n overflowY: isAutoHeight ? \"visible\" : undefined,\n // transitions don't work with height: auto\n transition: isAutoHeight ? \"none\" : undefined,\n };\n var contentsStyle = {\n // only use heightWhenOpen while closing\n transform: displayWithTransform ? \"translateY(0)\" : \"translateY(-\" + this.state.heightWhenOpen + \"px)\",\n // transitions don't work with height: auto\n transition: isAutoHeight ? \"none\" : undefined,\n };\n return React.createElement(this.props.component, {\n className: classNames(Classes.COLLAPSE, this.props.className),\n style: containerStyle,\n }, React.createElement(\"div\", { className: Classes.COLLAPSE_BODY, ref: this.contentsRefHandler, style: contentsStyle, \"aria-hidden\": !isContentVisible && this.props.keepChildrenMounted }, shouldRenderChildren ? this.props.children : null));\n };\n Collapse.prototype.componentDidMount = function () {\n this.forceUpdate();\n if (this.props.isOpen) {\n this.setState({ animationState: AnimationStates.OPEN, height: \"auto\" });\n }\n else {\n this.setState({ animationState: AnimationStates.CLOSED, height: \"0px\" });\n }\n };\n Collapse.prototype.componentDidUpdate = function () {\n var _this = this;\n var transitionDuration = this.props.transitionDuration;\n var animationState = this.state.animationState;\n if (animationState === AnimationStates.OPEN_START) {\n var clientHeight = this.contents.clientHeight;\n this.setState({\n animationState: AnimationStates.OPENING,\n height: clientHeight + \"px\",\n heightWhenOpen: clientHeight,\n });\n this.setTimeout(function () { return _this.onDelayedStateChange(); }, transitionDuration);\n }\n else if (animationState === AnimationStates.CLOSING_START) {\n var clientHeight_1 = this.contents.clientHeight;\n this.setTimeout(function () {\n return _this.setState({\n animationState: AnimationStates.CLOSING,\n height: \"0px\",\n heightWhenOpen: clientHeight_1,\n });\n });\n this.setTimeout(function () { return _this.onDelayedStateChange(); }, transitionDuration);\n }\n };\n Collapse.prototype.onDelayedStateChange = function () {\n switch (this.state.animationState) {\n case AnimationStates.OPENING:\n this.setState({ animationState: AnimationStates.OPEN, height: \"auto\" });\n break;\n case AnimationStates.CLOSING:\n this.setState({ animationState: AnimationStates.CLOSED });\n break;\n default:\n break;\n }\n };\n Collapse.displayName = DISPLAYNAME_PREFIX + \".Collapse\";\n Collapse.defaultProps = {\n component: \"div\",\n isOpen: false,\n keepChildrenMounted: false,\n transitionDuration: 200,\n };\n Collapse = __decorate([\n polyfill\n ], Collapse);\n return Collapse;\n}(AbstractPureComponent2));\nexport { Collapse };\n//# sourceMappingURL=collapse.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar ControlGroup = /** @class */ (function (_super) {\n __extends(ControlGroup, _super);\n function ControlGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ControlGroup.prototype.render = function () {\n var _a;\n var _b = this.props, children = _b.children, className = _b.className, fill = _b.fill, vertical = _b.vertical, htmlProps = __rest(_b, [\"children\", \"className\", \"fill\", \"vertical\"]);\n var rootClasses = classNames(Classes.CONTROL_GROUP, (_a = {},\n _a[Classes.FILL] = fill,\n _a[Classes.VERTICAL] = vertical,\n _a), className);\n return (React.createElement(\"div\", __assign({}, htmlProps, { className: rootClasses }), children));\n };\n ControlGroup.displayName = DISPLAYNAME_PREFIX + \".ControlGroup\";\n ControlGroup = __decorate([\n polyfill\n ], ControlGroup);\n return ControlGroup;\n}(AbstractPureComponent2));\nexport { ControlGroup };\n//# sourceMappingURL=controlGroup.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX, removeNonHTMLProps, } from \"../../common/props\";\nimport { Icon } from \"../icon/icon\";\nvar InputGroup = /** @class */ (function (_super) {\n __extends(InputGroup, _super);\n function InputGroup() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {};\n _this.refHandlers = {\n leftElement: function (ref) { return (_this.leftElement = ref); },\n rightElement: function (ref) { return (_this.rightElement = ref); },\n };\n return _this;\n }\n InputGroup.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, disabled = _b.disabled, fill = _b.fill, intent = _b.intent, large = _b.large, small = _b.small, round = _b.round;\n var classes = classNames(Classes.INPUT_GROUP, Classes.intentClass(intent), (_a = {},\n _a[Classes.DISABLED] = disabled,\n _a[Classes.FILL] = fill,\n _a[Classes.LARGE] = large,\n _a[Classes.SMALL] = small,\n _a[Classes.ROUND] = round,\n _a), className);\n var style = __assign(__assign({}, this.props.style), { paddingLeft: this.state.leftElementWidth, paddingRight: this.state.rightElementWidth });\n return (React.createElement(\"div\", { className: classes },\n this.maybeRenderLeftElement(),\n React.createElement(\"input\", __assign({ type: \"text\" }, removeNonHTMLProps(this.props), { className: Classes.INPUT, ref: this.props.inputRef, style: style })),\n this.maybeRenderRightElement()));\n };\n InputGroup.prototype.componentDidMount = function () {\n this.updateInputWidth();\n };\n InputGroup.prototype.componentDidUpdate = function (prevProps) {\n var _a = this.props, leftElement = _a.leftElement, rightElement = _a.rightElement;\n if (prevProps.leftElement !== leftElement || prevProps.rightElement !== rightElement) {\n this.updateInputWidth();\n }\n };\n InputGroup.prototype.validateProps = function (props) {\n if (props.leftElement != null && props.leftIcon != null) {\n console.warn(Errors.INPUT_WARN_LEFT_ELEMENT_LEFT_ICON_MUTEX);\n }\n };\n InputGroup.prototype.maybeRenderLeftElement = function () {\n var _a = this.props, leftElement = _a.leftElement, leftIcon = _a.leftIcon;\n if (leftElement != null) {\n return (React.createElement(\"span\", { className: Classes.INPUT_LEFT_CONTAINER, ref: this.refHandlers.leftElement }, leftElement));\n }\n else if (leftIcon != null) {\n return React.createElement(Icon, { icon: leftIcon });\n }\n return undefined;\n };\n InputGroup.prototype.maybeRenderRightElement = function () {\n var rightElement = this.props.rightElement;\n if (rightElement == null) {\n return undefined;\n }\n return (React.createElement(\"span\", { className: Classes.INPUT_ACTION, ref: this.refHandlers.rightElement }, rightElement));\n };\n InputGroup.prototype.updateInputWidth = function () {\n var _a = this.state, leftElementWidth = _a.leftElementWidth, rightElementWidth = _a.rightElementWidth;\n if (this.leftElement != null) {\n var clientWidth = this.leftElement.clientWidth;\n // small threshold to prevent infinite loops\n if (leftElementWidth === undefined || Math.abs(clientWidth - leftElementWidth) > 2) {\n this.setState({ leftElementWidth: clientWidth });\n }\n }\n else {\n this.setState({ leftElementWidth: undefined });\n }\n if (this.rightElement != null) {\n var clientWidth = this.rightElement.clientWidth;\n // small threshold to prevent infinite loops\n if (rightElementWidth === undefined || Math.abs(clientWidth - rightElementWidth) > 2) {\n this.setState({ rightElementWidth: clientWidth });\n }\n }\n else {\n this.setState({ rightElementWidth: undefined });\n }\n };\n InputGroup.displayName = DISPLAYNAME_PREFIX + \".InputGroup\";\n InputGroup = __decorate([\n polyfill\n ], InputGroup);\n return InputGroup;\n}(AbstractPureComponent2));\nexport { InputGroup };\n//# sourceMappingURL=inputGroup.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX } from \"../../common\";\nimport { HOTKEYS_HOTKEY_CHILDREN } from \"../../common/errors\";\nimport { isElementOfType } from \"../../common/utils\";\nimport { H4 } from \"../html/html\";\nimport { Hotkey } from \"./hotkey\";\nvar Hotkeys = /** @class */ (function (_super) {\n __extends(Hotkeys, _super);\n function Hotkeys() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Hotkeys.prototype.render = function () {\n var hotkeys = React.Children.map(this.props.children, function (child) { return child.props; });\n // sort by group label alphabetically, prioritize globals\n hotkeys.sort(function (a, b) {\n if (a.global === b.global) {\n return a.group.localeCompare(b.group);\n }\n return a.global ? -1 : 1;\n });\n var lastGroup = null;\n var elems = [];\n for (var _i = 0, hotkeys_1 = hotkeys; _i < hotkeys_1.length; _i++) {\n var hotkey = hotkeys_1[_i];\n var groupLabel = hotkey.group;\n if (groupLabel !== lastGroup) {\n elems.push(React.createElement(H4, { key: \"group-\" + elems.length }, groupLabel));\n lastGroup = groupLabel;\n }\n elems.push(React.createElement(Hotkey, __assign({ key: elems.length }, hotkey)));\n }\n var rootClasses = classNames(Classes.HOTKEY_COLUMN, this.props.className);\n return React.createElement(\"div\", { className: rootClasses }, elems);\n };\n Hotkeys.prototype.validateProps = function (props) {\n React.Children.forEach(props.children, function (child) {\n if (!isElementOfType(child, Hotkey)) {\n throw new Error(HOTKEYS_HOTKEY_CHILDREN);\n }\n });\n };\n Hotkeys.displayName = DISPLAYNAME_PREFIX + \".Hotkeys\";\n Hotkeys.defaultProps = {\n tabIndex: 0,\n };\n Hotkeys = __decorate([\n polyfill\n ], Hotkeys);\n return Hotkeys;\n}(AbstractPureComponent2));\nexport { Hotkeys };\n//# sourceMappingURL=hotkeys.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX } from \"../../common\";\nimport { Icon } from \"../icon/icon\";\nimport { normalizeKeyCombo } from \"./hotkeyParser\";\nvar KeyIcons = {\n alt: \"key-option\",\n cmd: \"key-command\",\n ctrl: \"key-control\",\n delete: \"key-delete\",\n down: \"arrow-down\",\n enter: \"key-enter\",\n left: \"arrow-left\",\n meta: \"key-command\",\n right: \"arrow-right\",\n shift: \"key-shift\",\n up: \"arrow-up\",\n};\nvar KeyCombo = /** @class */ (function (_super) {\n __extends(KeyCombo, _super);\n function KeyCombo() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderKey = function (key, index) {\n var icon = KeyIcons[key];\n var reactKey = \"key-\" + index;\n return icon == null ? (React.createElement(\"kbd\", { className: Classes.KEY, key: reactKey }, key)) : (React.createElement(\"kbd\", { className: classNames(Classes.KEY, Classes.MODIFIER_KEY), key: reactKey },\n React.createElement(Icon, { icon: icon }),\n \" \",\n key));\n };\n _this.renderMinimalKey = function (key, index) {\n var icon = KeyIcons[key];\n return icon == null ? key : React.createElement(Icon, { icon: icon, key: \"key-\" + index });\n };\n return _this;\n }\n KeyCombo.prototype.render = function () {\n var _a = this.props, className = _a.className, combo = _a.combo, minimal = _a.minimal;\n var keys = normalizeKeyCombo(combo)\n .map(function (key) { return (key.length === 1 ? key.toUpperCase() : key); })\n .map(minimal ? this.renderMinimalKey : this.renderKey);\n return React.createElement(\"span\", { className: classNames(Classes.KEY_COMBO, className) }, keys);\n };\n KeyCombo.displayName = DISPLAYNAME_PREFIX + \".KeyCombo\";\n KeyCombo = __decorate([\n polyfill\n ], KeyCombo);\n return KeyCombo;\n}(AbstractPureComponent2));\nexport { KeyCombo };\n//# sourceMappingURL=keyCombo.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar NavbarDivider = /** @class */ (function (_super) {\n __extends(NavbarDivider, _super);\n function NavbarDivider() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NavbarDivider.prototype.render = function () {\n var _a = this.props, className = _a.className, htmlProps = __rest(_a, [\"className\"]);\n return React.createElement(\"div\", __assign({ className: classNames(Classes.NAVBAR_DIVIDER, className) }, htmlProps));\n };\n NavbarDivider.displayName = DISPLAYNAME_PREFIX + \".NavbarDivider\";\n NavbarDivider = __decorate([\n polyfill\n ], NavbarDivider);\n return NavbarDivider;\n}(AbstractPureComponent2));\nexport { NavbarDivider };\n//# sourceMappingURL=navbarDivider.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Alignment, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar NavbarGroup = /** @class */ (function (_super) {\n __extends(NavbarGroup, _super);\n function NavbarGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NavbarGroup.prototype.render = function () {\n var _a = this.props, align = _a.align, children = _a.children, className = _a.className, htmlProps = __rest(_a, [\"align\", \"children\", \"className\"]);\n var classes = classNames(Classes.NAVBAR_GROUP, Classes.alignmentClass(align), className);\n return (React.createElement(\"div\", __assign({ className: classes }, htmlProps), children));\n };\n NavbarGroup.displayName = DISPLAYNAME_PREFIX + \".NavbarGroup\";\n NavbarGroup.defaultProps = {\n align: Alignment.LEFT,\n };\n NavbarGroup = __decorate([\n polyfill\n ], NavbarGroup);\n return NavbarGroup;\n}(AbstractPureComponent2));\nexport { NavbarGroup };\n//# sourceMappingURL=navbarGroup.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar NavbarHeading = /** @class */ (function (_super) {\n __extends(NavbarHeading, _super);\n function NavbarHeading() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NavbarHeading.prototype.render = function () {\n var _a = this.props, children = _a.children, className = _a.className, htmlProps = __rest(_a, [\"children\", \"className\"]);\n return (React.createElement(\"div\", __assign({ className: classNames(Classes.NAVBAR_HEADING, className) }, htmlProps), children));\n };\n NavbarHeading.displayName = DISPLAYNAME_PREFIX + \".NavbarHeading\";\n NavbarHeading = __decorate([\n polyfill\n ], NavbarHeading);\n return NavbarHeading;\n}(AbstractPureComponent2));\nexport { NavbarHeading };\n//# sourceMappingURL=navbarHeading.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke } from \"../../common/utils\";\nimport { ButtonGroup } from \"../button/buttonGroup\";\nimport { AnchorButton, Button } from \"../button/buttons\";\nimport { Icon } from \"../icon/icon\";\nvar Toast = /** @class */ (function (_super) {\n __extends(Toast, _super);\n function Toast() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleActionClick = function (e) {\n safeInvoke(_this.props.action.onClick, e);\n _this.triggerDismiss(false);\n };\n _this.handleCloseClick = function () { return _this.triggerDismiss(false); };\n _this.startTimeout = function () {\n _this.clearTimeouts();\n if (_this.props.timeout > 0) {\n _this.setTimeout(function () { return _this.triggerDismiss(true); }, _this.props.timeout);\n }\n };\n return _this;\n }\n Toast.prototype.render = function () {\n var _a = this.props, className = _a.className, icon = _a.icon, intent = _a.intent, message = _a.message;\n return (React.createElement(\"div\", { className: classNames(Classes.TOAST, Classes.intentClass(intent), className), onBlur: this.startTimeout, onFocus: this.clearTimeouts, onMouseEnter: this.clearTimeouts, onMouseLeave: this.startTimeout, tabIndex: 0 },\n React.createElement(Icon, { icon: icon }),\n React.createElement(\"span\", { className: Classes.TOAST_MESSAGE }, message),\n React.createElement(ButtonGroup, { minimal: true },\n this.maybeRenderActionButton(),\n React.createElement(Button, { icon: \"cross\", onClick: this.handleCloseClick }))));\n };\n Toast.prototype.componentDidMount = function () {\n this.startTimeout();\n };\n Toast.prototype.componentDidUpdate = function (prevProps) {\n if (prevProps.timeout !== this.props.timeout) {\n if (this.props.timeout > 0) {\n this.startTimeout();\n }\n else {\n this.clearTimeouts();\n }\n }\n };\n Toast.prototype.componentWillUnmount = function () {\n this.clearTimeouts();\n };\n Toast.prototype.maybeRenderActionButton = function () {\n var action = this.props.action;\n if (action == null) {\n return undefined;\n }\n else {\n return React.createElement(AnchorButton, __assign({}, action, { intent: undefined, onClick: this.handleActionClick }));\n }\n };\n Toast.prototype.triggerDismiss = function (didTimeoutExpire) {\n this.clearTimeouts();\n safeInvoke(this.props.onDismiss, didTimeoutExpire);\n };\n Toast.defaultProps = {\n className: \"\",\n message: \"\",\n timeout: 5000,\n };\n Toast.displayName = DISPLAYNAME_PREFIX + \".Toast\";\n Toast = __decorate([\n polyfill\n ], Toast);\n return Toast;\n}(AbstractPureComponent2));\nexport { Toast };\n//# sourceMappingURL=toast.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { safeInvoke } from \"../../common/utils\";\nimport { Collapse } from \"../collapse/collapse\";\nimport { Icon } from \"../icon/icon\";\n// eslint-disable-next-line @typescript-eslint/ban-types\nvar TreeNode = /** @class */ (function (_super) {\n __extends(TreeNode, _super);\n function TreeNode() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleCaretClick = function (e) {\n e.stopPropagation();\n var _a = _this.props, isExpanded = _a.isExpanded, onCollapse = _a.onCollapse, onExpand = _a.onExpand;\n safeInvoke(isExpanded ? onCollapse : onExpand, _this, e);\n };\n _this.handleClick = function (e) {\n safeInvoke(_this.props.onClick, _this, e);\n };\n _this.handleContentRef = function (element) {\n safeInvoke(_this.props.contentRef, _this, element);\n };\n _this.handleContextMenu = function (e) {\n safeInvoke(_this.props.onContextMenu, _this, e);\n };\n _this.handleDoubleClick = function (e) {\n safeInvoke(_this.props.onDoubleClick, _this, e);\n };\n _this.handleMouseEnter = function (e) {\n safeInvoke(_this.props.onMouseEnter, _this, e);\n };\n _this.handleMouseLeave = function (e) {\n safeInvoke(_this.props.onMouseLeave, _this, e);\n };\n return _this;\n }\n TreeNode.ofType = function () {\n return TreeNode;\n };\n TreeNode.prototype.render = function () {\n var _a;\n var _b = this.props, children = _b.children, className = _b.className, disabled = _b.disabled, icon = _b.icon, isExpanded = _b.isExpanded, isSelected = _b.isSelected, label = _b.label;\n var classes = classNames(Classes.TREE_NODE, (_a = {},\n _a[Classes.DISABLED] = disabled,\n _a[Classes.TREE_NODE_SELECTED] = isSelected,\n _a[Classes.TREE_NODE_EXPANDED] = isExpanded,\n _a), className);\n var contentClasses = classNames(Classes.TREE_NODE_CONTENT, Classes.TREE_NODE_CONTENT + \"-\" + this.props.depth);\n var eventHandlers = disabled === true\n ? {}\n : {\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n };\n return (React.createElement(\"li\", { className: classes },\n React.createElement(\"div\", __assign({ className: contentClasses, ref: this.handleContentRef }, eventHandlers),\n this.maybeRenderCaret(),\n React.createElement(Icon, { className: Classes.TREE_NODE_ICON, icon: icon }),\n React.createElement(\"span\", { className: Classes.TREE_NODE_LABEL }, label),\n this.maybeRenderSecondaryLabel()),\n React.createElement(Collapse, { isOpen: isExpanded }, children)));\n };\n TreeNode.prototype.maybeRenderCaret = function () {\n var _a = this.props, children = _a.children, isExpanded = _a.isExpanded, disabled = _a.disabled, _b = _a.hasCaret, hasCaret = _b === void 0 ? React.Children.count(children) > 0 : _b;\n if (hasCaret) {\n var caretClasses = classNames(Classes.TREE_NODE_CARET, isExpanded ? Classes.TREE_NODE_CARET_OPEN : Classes.TREE_NODE_CARET_CLOSED);\n var onClick = disabled === true ? undefined : this.handleCaretClick;\n return React.createElement(Icon, { className: caretClasses, onClick: onClick, icon: \"chevron-right\" });\n }\n return React.createElement(\"span\", { className: Classes.TREE_NODE_CARET_NONE });\n };\n TreeNode.prototype.maybeRenderSecondaryLabel = function () {\n if (this.props.secondaryLabel != null) {\n return React.createElement(\"span\", { className: Classes.TREE_NODE_SECONDARY_LABEL }, this.props.secondaryLabel);\n }\n else {\n return undefined;\n }\n };\n TreeNode.displayName = DISPLAYNAME_PREFIX + \".TreeNode\";\n return TreeNode;\n}(React.Component));\nexport { TreeNode };\n//# sourceMappingURL=treeNode.js.map","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns true if the arrays are equal. Elements will be shallowly compared by\n * default, or they will be compared using the custom `compare` function if one\n * is provided.\n */\nexport function arraysEqual(arrA, arrB, compare) {\n if (compare === void 0) { compare = function (a, b) { return a === b; }; }\n // treat `null` and `undefined` as the same\n if (arrA == null && arrB == null) {\n return true;\n }\n else if (arrA == null || arrB == null || arrA.length !== arrB.length) {\n return false;\n }\n else {\n return arrA.every(function (a, i) { return compare(a, arrB[i]); });\n }\n}\n/**\n * Shallow comparison between objects. If `keys` is provided, just that subset\n * of keys will be compared; otherwise, all keys will be compared.\n * @returns true if items are equal.\n */\nexport function shallowCompareKeys(objA, objB, keys) {\n // treat `null` and `undefined` as the same\n if (objA == null && objB == null) {\n return true;\n }\n else if (objA == null || objB == null) {\n return false;\n }\n else if (Array.isArray(objA) || Array.isArray(objB)) {\n return false;\n }\n else if (keys != null) {\n return shallowCompareKeysImpl(objA, objB, keys);\n }\n else {\n // shallowly compare all keys from both objects\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n return (shallowCompareKeysImpl(objA, objB, { include: keysA }) &&\n shallowCompareKeysImpl(objA, objB, { include: keysB }));\n }\n}\n/**\n * Deep comparison between objects. If `keys` is provided, just that subset of\n * keys will be compared; otherwise, all keys will be compared.\n * @returns true if items are equal.\n */\nexport function deepCompareKeys(objA, objB, keys) {\n if (objA === objB) {\n return true;\n }\n else if (objA == null && objB == null) {\n // treat `null` and `undefined` as the same\n return true;\n }\n else if (objA == null || objB == null) {\n return false;\n }\n else if (Array.isArray(objA) || Array.isArray(objB)) {\n return arraysEqual(objA, objB, deepCompareKeys);\n }\n else if (isSimplePrimitiveType(objA) || isSimplePrimitiveType(objB)) {\n return objA === objB;\n }\n else if (keys != null) {\n return deepCompareKeysImpl(objA, objB, keys);\n }\n else if (objA.constructor !== objB.constructor) {\n return false;\n }\n else {\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA == null || keysB == null) {\n return false;\n }\n if (keysA.length === 0 && keysB.length === 0) {\n return true;\n }\n return arraysEqual(keysA, keysB) && deepCompareKeysImpl(objA, objB, keysA);\n }\n}\n/**\n * Returns a descriptive object for each key whose values are deeply unequal\n * between two provided objects. Useful for debugging shouldComponentUpdate.\n */\nexport function getDeepUnequalKeyValues(objA, objB, keys) {\n if (objA === void 0) { objA = {}; }\n if (objB === void 0) { objB = {}; }\n var filteredKeys = keys == null ? unionKeys(objA, objB) : keys;\n return getUnequalKeyValues(objA, objB, filteredKeys, function (a, b, key) {\n return deepCompareKeys(a, b, [key]);\n });\n}\n// Private helpers\n// ===============\n/**\n * Partial shallow comparison between objects using the given list of keys.\n */\nfunction shallowCompareKeysImpl(objA, objB, keys) {\n return filterKeys(objA, objB, keys).every(function (key) {\n return objA.hasOwnProperty(key) === objB.hasOwnProperty(key) && objA[key] === objB[key];\n });\n}\n/**\n * Partial deep comparison between objects using the given list of keys.\n */\nfunction deepCompareKeysImpl(objA, objB, keys) {\n return keys.every(function (key) {\n return objA.hasOwnProperty(key) === objB.hasOwnProperty(key) && deepCompareKeys(objA[key], objB[key]);\n });\n}\nfunction isSimplePrimitiveType(value) {\n return typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\";\n}\nfunction filterKeys(objA, objB, keys) {\n if (isAllowlist(keys)) {\n return keys.include;\n }\n else if (isDenylist(keys)) {\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n // merge keys from both objects into a big set for quick access\n var keySet_1 = arrayToObject(keysA.concat(keysB));\n // delete denied keys from the key set\n keys.exclude.forEach(function (key) { return delete keySet_1[key]; });\n // return the remaining keys as an array\n return Object.keys(keySet_1);\n }\n return [];\n}\nfunction isAllowlist(keys) {\n return keys != null && keys.include != null;\n}\nfunction isDenylist(keys) {\n return keys != null && keys.exclude != null;\n}\nfunction arrayToObject(arr) {\n return arr.reduce(function (obj, element) {\n obj[element] = true;\n return obj;\n }, {});\n}\nfunction getUnequalKeyValues(objA, objB, keys, compareFn) {\n var unequalKeys = keys.filter(function (key) { return !compareFn(objA, objB, key); });\n var unequalKeyValues = unequalKeys.map(function (key) { return ({\n key: key,\n valueA: objA[key],\n valueB: objB[key],\n }); });\n return unequalKeyValues;\n}\nfunction unionKeys(objA, objB) {\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n var concatKeys = keysA.concat(keysB);\n var keySet = arrayToObject(concatKeys);\n return Object.keys(keySet);\n}\n//# sourceMappingURL=compareUtils.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Position } from \"../../common\";\nimport { safeInvoke } from \"../../common/utils\";\nimport { Popover } from \"../popover/popover\";\nvar POPPER_MODIFIERS = {\n preventOverflow: { boundariesElement: \"viewport\" },\n};\nvar TRANSITION_DURATION = 100;\n/* istanbul ignore next */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n function ContextMenu() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isDarkTheme: false,\n isOpen: false,\n menu: null,\n offset: null,\n };\n _this.cancelContextMenu = function (e) { return e.preventDefault(); };\n _this.handleBackdropContextMenu = function (e) {\n // React function to remove from the event pool, useful when using a event within a callback\n e.persist();\n e.preventDefault();\n // wait for backdrop to disappear so we can find the \"real\" element at event coordinates.\n // timeout duration is equivalent to transition duration so we know it's animated out.\n _this.setTimeout(function () {\n // retrigger context menu event at the element beneath the backdrop.\n // if it has a `contextmenu` event handler then it'll be invoked.\n // if it doesn't, no native menu will show (at least on OSX) :(\n var newTarget = document.elementFromPoint(e.clientX, e.clientY);\n var view = e.view, newEventInit = __rest(e, [\"view\"]);\n newTarget.dispatchEvent(new MouseEvent(\"contextmenu\", newEventInit));\n }, TRANSITION_DURATION);\n };\n _this.handlePopoverInteraction = function (nextOpenState) {\n if (!nextOpenState) {\n // delay the actual hiding till the event queue clears\n // to avoid flicker of opening twice\n requestAnimationFrame(function () { return _this.hide(); });\n }\n };\n return _this;\n }\n ContextMenu.prototype.render = function () {\n var _a;\n // prevent right-clicking in a context menu\n var content = React.createElement(\"div\", { onContextMenu: this.cancelContextMenu }, this.state.menu);\n var popoverClassName = classNames((_a = {}, _a[Classes.DARK] = this.state.isDarkTheme, _a));\n // HACKHACK: workaround until we have access to Popper#scheduleUpdate().\n // https://github.com/palantir/blueprint/issues/692\n // Generate key based on offset so a new Popover instance is created\n // when offset changes, to force recomputing position.\n var key = this.state.offset == null ? \"\" : this.state.offset.left + \"x\" + this.state.offset.top;\n // wrap the popover in a positioned div to make sure it is properly\n // offset on the screen.\n return (React.createElement(\"div\", { className: Classes.CONTEXT_MENU_POPOVER_TARGET, style: this.state.offset },\n React.createElement(Popover, __assign({}, this.props, { backdropProps: { onContextMenu: this.handleBackdropContextMenu }, content: content, enforceFocus: false, key: key, hasBackdrop: true, isOpen: this.state.isOpen, minimal: true, modifiers: POPPER_MODIFIERS, onInteraction: this.handlePopoverInteraction, position: Position.RIGHT_TOP, popoverClassName: popoverClassName, target: React.createElement(\"div\", null), transitionDuration: TRANSITION_DURATION }))));\n };\n ContextMenu.prototype.show = function (menu, offset, onClose, isDarkTheme) {\n this.setState({ isOpen: true, menu: menu, offset: offset, onClose: onClose, isDarkTheme: isDarkTheme });\n };\n ContextMenu.prototype.hide = function () {\n safeInvoke(this.state.onClose);\n this.setState({ isOpen: false, onClose: undefined });\n };\n ContextMenu = __decorate([\n polyfill\n ], ContextMenu);\n return ContextMenu;\n}(AbstractPureComponent2));\nvar contextMenuElement;\nvar contextMenu;\n/**\n * Show the given menu element at the given offset from the top-left corner of the viewport.\n * The menu will appear below-right of this point and will flip to below-left if there is not enough\n * room onscreen. The optional callback will be invoked when this menu closes.\n */\nexport function show(menu, offset, onClose, isDarkTheme) {\n if (contextMenuElement == null) {\n contextMenuElement = document.createElement(\"div\");\n contextMenuElement.classList.add(Classes.CONTEXT_MENU);\n document.body.appendChild(contextMenuElement);\n contextMenu = ReactDOM.render(React.createElement(ContextMenu, { onClosed: remove }), contextMenuElement);\n }\n contextMenu.show(menu, offset, onClose, isDarkTheme);\n}\n/** Hide the open context menu. */\nexport function hide() {\n if (contextMenu != null) {\n contextMenu.hide();\n }\n}\n/** Return whether a context menu is currently open. */\nexport function isOpen() {\n return contextMenu != null && contextMenu.state.isOpen;\n}\nfunction remove() {\n if (contextMenuElement != null) {\n ReactDOM.unmountComponentAtNode(contextMenuElement);\n contextMenuElement.remove();\n contextMenuElement = null;\n contextMenu = null;\n }\n}\n//# sourceMappingURL=contextMenu.js.map","import { createContext } from 'react';\nconst MatomoContext = createContext(null);\nexport default MatomoContext;\n//# sourceMappingURL=MatomoContext.js.map","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","\"use strict\";\n\nvar _CSSTransition = _interopRequireDefault(require(\"./CSSTransition\"));\n\nvar _ReplaceTransition = _interopRequireDefault(require(\"./ReplaceTransition\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n Transition: _Transition.default,\n TransitionGroup: _TransitionGroup.default,\n ReplaceTransition: _ReplaceTransition.default,\n CSSTransition: _CSSTransition.default\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Sketch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _common = require('../common');\n\nvar _SketchFields = require('./SketchFields');\n\nvar _SketchFields2 = _interopRequireDefault(_SketchFields);\n\nvar _SketchPresetColors = require('./SketchPresetColors');\n\nvar _SketchPresetColors2 = _interopRequireDefault(_SketchPresetColors);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Sketch = exports.Sketch = function Sketch(_ref) {\n var width = _ref.width,\n rgb = _ref.rgb,\n hex = _ref.hex,\n hsv = _ref.hsv,\n hsl = _ref.hsl,\n onChange = _ref.onChange,\n onSwatchHover = _ref.onSwatchHover,\n disableAlpha = _ref.disableAlpha,\n presetColors = _ref.presetColors,\n renderers = _ref.renderers,\n _ref$styles = _ref.styles,\n passedStyles = _ref$styles === undefined ? {} : _ref$styles,\n _ref$className = _ref.className,\n className = _ref$className === undefined ? '' : _ref$className;\n\n var styles = (0, _reactcss2.default)((0, _merge2.default)({\n 'default': _extends({\n picker: {\n width: width,\n padding: '10px 10px 0',\n boxSizing: 'initial',\n background: '#fff',\n borderRadius: '4px',\n boxShadow: '0 0 0 1px rgba(0,0,0,.15), 0 8px 16px rgba(0,0,0,.15)'\n },\n saturation: {\n width: '100%',\n paddingBottom: '75%',\n position: 'relative',\n overflow: 'hidden'\n },\n Saturation: {\n radius: '3px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n controls: {\n display: 'flex'\n },\n sliders: {\n padding: '4px 0',\n flex: '1'\n },\n color: {\n width: '24px',\n height: '24px',\n position: 'relative',\n marginTop: '4px',\n marginLeft: '4px',\n borderRadius: '3px'\n },\n activeColor: {\n absolute: '0px 0px 0px 0px',\n borderRadius: '2px',\n background: 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')',\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n hue: {\n position: 'relative',\n height: '10px',\n overflow: 'hidden'\n },\n Hue: {\n radius: '2px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n },\n\n alpha: {\n position: 'relative',\n height: '10px',\n marginTop: '4px',\n overflow: 'hidden'\n },\n Alpha: {\n radius: '2px',\n shadow: 'inset 0 0 0 1px rgba(0,0,0,.15), inset 0 0 4px rgba(0,0,0,.25)'\n }\n }, passedStyles),\n 'disableAlpha': {\n color: {\n height: '10px'\n },\n hue: {\n height: '10px'\n },\n alpha: {\n display: 'none'\n }\n }\n }, passedStyles), { disableAlpha: disableAlpha });\n\n return _react2.default.createElement(\n 'div',\n { style: styles.picker, className: 'sketch-picker ' + className },\n _react2.default.createElement(\n 'div',\n { style: styles.saturation },\n _react2.default.createElement(_common.Saturation, {\n style: styles.Saturation,\n hsl: hsl,\n hsv: hsv,\n onChange: onChange\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.controls, className: 'flexbox-fix' },\n _react2.default.createElement(\n 'div',\n { style: styles.sliders },\n _react2.default.createElement(\n 'div',\n { style: styles.hue },\n _react2.default.createElement(_common.Hue, {\n style: styles.Hue,\n hsl: hsl,\n onChange: onChange\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.alpha },\n _react2.default.createElement(_common.Alpha, {\n style: styles.Alpha,\n rgb: rgb,\n hsl: hsl,\n renderers: renderers,\n onChange: onChange\n })\n )\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.color },\n _react2.default.createElement(_common.Checkboard, null),\n _react2.default.createElement('div', { style: styles.activeColor })\n )\n ),\n _react2.default.createElement(_SketchFields2.default, {\n rgb: rgb,\n hsl: hsl,\n hex: hex,\n onChange: onChange,\n disableAlpha: disableAlpha\n }),\n _react2.default.createElement(_SketchPresetColors2.default, {\n colors: presetColors,\n onClick: onChange,\n onSwatchHover: onSwatchHover\n })\n );\n};\n\nSketch.propTypes = {\n disableAlpha: _propTypes2.default.bool,\n width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n styles: _propTypes2.default.object\n};\n\nSketch.defaultProps = {\n disableAlpha: false,\n width: 200,\n styles: {},\n presetColors: ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF']\n};\n\nexports.default = (0, _common.ColorWrap)(Sketch);","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict'\n\nfunction normalizeIdentifier(value) {\n return (\n value // Collapse Markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no object method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n\nmodule.exports = normalizeIdentifier\n","'use strict'\n\nfunction miniflat(value) {\n return value === null || value === undefined\n ? []\n : 'length' in value\n ? value\n : [value]\n}\n\nmodule.exports = miniflat\n","'use strict'\n\nvar chunkedSplice = require('./chunked-splice.js')\n\nfunction chunkedPush(list, items) {\n if (list.length) {\n chunkedSplice(list, list.length, 0, items)\n return list\n }\n\n return items\n}\n\nmodule.exports = chunkedPush\n","'use strict'\n\nvar unicodePunctuationRegex = require('../constant/unicode-punctuation-regex.js')\nvar regexCheck = require('../util/regex-check.js')\n\n// In fact adds to the bundle size.\n\nvar unicodePunctuation = regexCheck(unicodePunctuationRegex)\n\nmodule.exports = unicodePunctuation\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar unicodeWhitespace = regexCheck(/\\s/)\n\nmodule.exports = unicodeWhitespace\n","'use strict'\n\n// Note: EOF is seen as ASCII control here, because `null < 32 == true`.\nfunction asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code < 32 || code === 127\n )\n}\n\nmodule.exports = asciiControl\n","'use strict'\n\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar chunkedPush = require('../util/chunked-push.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar normalizeIdentifier = require('../util/normalize-identifier.js')\nvar resolveAll = require('../util/resolve-all.js')\nvar shallow = require('../util/shallow.js')\nvar factoryDestination = require('./factory-destination.js')\nvar factoryLabel = require('./factory-label.js')\nvar factoryTitle = require('./factory-title.js')\nvar factoryWhitespace = require('./factory-whitespace.js')\n\nvar labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\nvar resourceConstruct = {\n tokenize: tokenizeResource\n}\nvar fullReferenceConstruct = {\n tokenize: tokenizeFullReference\n}\nvar collapsedReferenceConstruct = {\n tokenize: tokenizeCollapsedReference\n}\n\nfunction resolveAllLabelEnd(events) {\n var index = -1\n var token\n\n while (++index < events.length) {\n token = events[index][1]\n\n if (\n !token._used &&\n (token.type === 'labelImage' ||\n token.type === 'labelLink' ||\n token.type === 'labelEnd')\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n token.type = 'data'\n index++\n }\n }\n\n return events\n}\n\nfunction resolveToLabelEnd(events, context) {\n var index = events.length\n var offset = 0\n var group\n var label\n var text\n var token\n var open\n var close\n var media // Find an opening.\n\n while (index--) {\n token = events[index][1]\n\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (\n token.type === 'link' ||\n (token.type === 'labelLink' && token._inactive)\n ) {\n break\n } // Mark other link openings as inactive, as we can’t have links in\n // links.\n\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === 'labelImage' || token.type === 'labelLink') &&\n !token._balanced\n ) {\n open = index\n\n if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\n }\n }\n\n group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: shallow(events[open][1].start),\n end: shallow(events[events.length - 1][1].end)\n }\n label = {\n type: 'label',\n start: shallow(events[open][1].start),\n end: shallow(events[close][1].end)\n }\n text = {\n type: 'labelText',\n start: shallow(events[open + offset + 2][1].end),\n end: shallow(events[close - 2][1].start)\n }\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ] // Opening marker.\n\n media = chunkedPush(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n media = chunkedPush(media, [['enter', text, context]]) // Between.\n\n media = chunkedPush(\n media,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n ) // Text close, marker close, label close.\n\n media = chunkedPush(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ]) // Reference, resource, or so.\n\n media = chunkedPush(media, events.slice(close + 1)) // Media close.\n\n media = chunkedPush(media, [['exit', group, context]])\n chunkedSplice(events, open, events.length, media)\n return events\n}\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n var self = this\n var index = self.events.length\n var labelStart\n var defined // Find an opening.\n\n while (index--) {\n if (\n (self.events[index][1].type === 'labelImage' ||\n self.events[index][1].type === 'labelLink') &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n\n return start\n\n function start(code) {\n if (!labelStart) {\n return nok(code)\n } // It’s a balanced bracket, but contains a link.\n\n if (labelStart._inactive) return balanced(code)\n defined =\n self.parser.defined.indexOf(\n normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n ) > -1\n effects.enter('labelEnd')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelEnd')\n return afterLabelEnd\n }\n\n function afterLabelEnd(code) {\n // Resource: `[asd](fgh)`.\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n ok,\n defined ? ok : balanced\n )(code)\n } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n if (code === 91) {\n return effects.attempt(\n fullReferenceConstruct,\n ok,\n defined\n ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n : balanced\n )(code)\n } // Shortcut reference: `[asd]`?\n\n return defined ? ok(code) : balanced(code)\n }\n\n function balanced(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n\nfunction tokenizeResource(effects, ok, nok) {\n return start\n\n function start(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return factoryWhitespace(effects, open)\n }\n\n function open(code) {\n if (code === 41) {\n return end(code)\n }\n\n return factoryDestination(\n effects,\n destinationAfter,\n nok,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 3\n )(code)\n }\n\n function destinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, between)(code)\n : end(code)\n }\n\n function between(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factoryWhitespace(effects, end),\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n\n return end(code)\n }\n\n function end(code) {\n if (code === 41) {\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n effects.exit('resource')\n return ok\n }\n\n return nok(code)\n }\n}\n\nfunction tokenizeFullReference(effects, ok, nok) {\n var self = this\n return start\n\n function start(code) {\n return factoryLabel.call(\n self,\n effects,\n afterLabel,\n nok,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n\n function afterLabel(code) {\n return self.parser.defined.indexOf(\n normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n ) < 0\n ? nok(code)\n : ok(code)\n }\n}\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n return start\n\n function start(code) {\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return open\n }\n\n function open(code) {\n if (code === 93) {\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n effects.exit('reference')\n return ok\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = labelEnd\n","'use strict'\n\nmodule.exports = visit\n\nvar visitParents = require('unist-util-visit-parents')\n\nvar CONTINUE = visitParents.CONTINUE\nvar SKIP = visitParents.SKIP\nvar EXIT = visitParents.EXIT\n\nvisit.CONTINUE = CONTINUE\nvisit.SKIP = SKIP\nvisit.EXIT = EXIT\n\nfunction visit(tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n visitor = test\n test = null\n }\n\n visitParents(tree, test, overload, reverse)\n\n function overload(node, parents) {\n var parent = parents[parents.length - 1]\n var index = parent ? parent.children.indexOf(node) : null\n return visitor(node, index, parent)\n }\n}\n","/*!\n * repeat-string <https://github.com/jonschlinkert/repeat-string>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n/**\n * Results cache\n */\n\nvar res = '';\nvar cache;\n\n/**\n * Expose `repeat`\n */\n\nmodule.exports = repeat;\n\n/**\n * Repeat the given `string` the specified `number`\n * of times.\n *\n * **Example:**\n *\n * ```js\n * var repeat = require('repeat-string');\n * repeat('A', 5);\n * //=> AAAAA\n * ```\n *\n * @param {String} `string` The string to repeat\n * @param {Number} `number` The number of times to repeat the string\n * @return {String} Repeated string\n * @api public\n */\n\nfunction repeat(str, num) {\n if (typeof str !== 'string') {\n throw new TypeError('expected a string');\n }\n\n // cover common, quick use cases\n if (num === 1) return str;\n if (num === 2) return str + str;\n\n var max = str.length * num;\n if (cache !== str || typeof cache === 'undefined') {\n cache = str;\n res = '';\n } else if (res.length >= max) {\n return res.substr(0, max);\n }\n\n while (max > res.length && num > 1) {\n if (num & 1) {\n res += str;\n }\n\n num >>= 1;\n str += str;\n }\n\n res += str;\n res = res.substr(0, max);\n return res;\n}\n","var baseForOwn = require('./_baseForOwn'),\n castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Alpha = require('./Alpha');\n\nObject.defineProperty(exports, 'Alpha', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Alpha).default;\n }\n});\n\nvar _Checkboard = require('./Checkboard');\n\nObject.defineProperty(exports, 'Checkboard', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Checkboard).default;\n }\n});\n\nvar _EditableInput = require('./EditableInput');\n\nObject.defineProperty(exports, 'EditableInput', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_EditableInput).default;\n }\n});\n\nvar _Hue = require('./Hue');\n\nObject.defineProperty(exports, 'Hue', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Hue).default;\n }\n});\n\nvar _Raised = require('./Raised');\n\nObject.defineProperty(exports, 'Raised', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Raised).default;\n }\n});\n\nvar _Saturation = require('./Saturation');\n\nObject.defineProperty(exports, 'Saturation', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Saturation).default;\n }\n});\n\nvar _ColorWrap = require('./ColorWrap');\n\nObject.defineProperty(exports, 'ColorWrap', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_ColorWrap).default;\n }\n});\n\nvar _Swatch = require('./Swatch');\n\nObject.defineProperty(exports, 'Swatch', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Swatch).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Checkboard = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _checkboard = require('../../helpers/checkboard');\n\nvar checkboard = _interopRequireWildcard(_checkboard);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Checkboard = exports.Checkboard = function Checkboard(_ref) {\n var white = _ref.white,\n grey = _ref.grey,\n size = _ref.size,\n renderers = _ref.renderers,\n borderRadius = _ref.borderRadius,\n boxShadow = _ref.boxShadow,\n children = _ref.children;\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n grid: {\n borderRadius: borderRadius,\n boxShadow: boxShadow,\n absolute: '0px 0px 0px 0px',\n background: 'url(' + checkboard.get(white, grey, size, renderers.canvas) + ') center left'\n }\n }\n });\n return (0, _react.isValidElement)(children) ? _react2.default.cloneElement(children, _extends({}, children.props, { style: _extends({}, children.props.style, styles.grid) })) : _react2.default.createElement('div', { style: styles.grid });\n};\n\nCheckboard.defaultProps = {\n size: 8,\n white: 'transparent',\n grey: 'rgba(0,0,0,.08)',\n renderers: {}\n};\n\nexports.default = Checkboard;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _implementation = require('./implementation');\n\nvar _implementation2 = _interopRequireDefault(_implementation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _react2.default.createContext || _implementation2.default;\nmodule.exports = exports['default'];","export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n","import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n","import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n","import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n","/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n const isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n","/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n","import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n","import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n","import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n","/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n","import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false,\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n","import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n","import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['exports', './diff', './added', './deleted', './updated', './detailed'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require('./diff'), require('./added'), require('./deleted'), require('./updated'), require('./detailed'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports, global.diff, global.added, global.deleted, global.updated, global.detailed);\n global.index = mod.exports;\n }\n})(this, function (exports, _diff, _added, _deleted, _updated, _detailed) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.detailedDiff = exports.updatedDiff = exports.deletedDiff = exports.diff = exports.addedDiff = undefined;\n\n var _diff2 = _interopRequireDefault(_diff);\n\n var _added2 = _interopRequireDefault(_added);\n\n var _deleted2 = _interopRequireDefault(_deleted);\n\n var _updated2 = _interopRequireDefault(_updated);\n\n var _detailed2 = _interopRequireDefault(_detailed);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n exports.addedDiff = _added2.default;\n exports.diff = _diff2.default;\n exports.deletedDiff = _deleted2.default;\n exports.updatedDiff = _updated2.default;\n exports.detailedDiff = _detailed2.default;\n});","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","/*\n * Copyright 2019 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { isNodeEnv } from \"./utils\";\n/**\n * An abstract component that Blueprint components can extend\n * in order to add some common functionality like runtime props validation.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nvar AbstractComponent2 = /** @class */ (function (_super) {\n __extends(AbstractComponent2, _super);\n function AbstractComponent2(props, context) {\n var _this = _super.call(this, props, context) || this;\n // Not bothering to remove entries when their timeouts finish because clearing invalid ID is a no-op\n _this.timeoutIds = [];\n /**\n * Clear all known timeouts.\n */\n _this.clearTimeouts = function () {\n if (_this.timeoutIds.length > 0) {\n for (var _i = 0, _a = _this.timeoutIds; _i < _a.length; _i++) {\n var timeoutId = _a[_i];\n window.clearTimeout(timeoutId);\n }\n _this.timeoutIds = [];\n }\n };\n if (!isNodeEnv(\"production\")) {\n _this.validateProps(_this.props);\n }\n return _this;\n }\n AbstractComponent2.prototype.componentDidUpdate = function (_prevProps, _prevState, _snapshot) {\n if (!isNodeEnv(\"production\")) {\n this.validateProps(this.props);\n }\n };\n AbstractComponent2.prototype.componentWillUnmount = function () {\n this.clearTimeouts();\n };\n /**\n * Set a timeout and remember its ID.\n * All stored timeouts will be cleared when component unmounts.\n * @returns a \"cancel\" function that will clear timeout when invoked.\n */\n AbstractComponent2.prototype.setTimeout = function (callback, timeout) {\n var handle = window.setTimeout(callback, timeout);\n this.timeoutIds.push(handle);\n return function () { return window.clearTimeout(handle); };\n };\n /**\n * Ensures that the props specified for a component are valid.\n * Implementations should check that props are valid and usually throw an Error if they are not.\n * Implementations should not duplicate checks that the type system already guarantees.\n *\n * This method should be used instead of React's\n * [propTypes](https://facebook.github.io/react/docs/reusable-components.html#prop-validation) feature.\n * Like propTypes, these runtime checks run only in development mode.\n */\n AbstractComponent2.prototype.validateProps = function (_props) {\n // implement in subclass\n };\n return AbstractComponent2;\n}(React.Component));\nexport { AbstractComponent2 };\n//# sourceMappingURL=abstractComponent2.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var Colors = {\n BLACK: \"#10161A\",\n BLUE1: \"#0E5A8A\",\n BLUE2: \"#106BA3\",\n BLUE3: \"#137CBD\",\n BLUE4: \"#2B95D6\",\n BLUE5: \"#48AFF0\",\n COBALT1: \"#1F4B99\",\n COBALT2: \"#2458B3\",\n COBALT3: \"#2965CC\",\n COBALT4: \"#4580E6\",\n COBALT5: \"#669EFF\",\n DARK_GRAY1: \"#182026\",\n DARK_GRAY2: \"#202B33\",\n DARK_GRAY3: \"#293742\",\n DARK_GRAY4: \"#30404D\",\n DARK_GRAY5: \"#394B59\",\n FOREST1: \"#1D7324\",\n FOREST2: \"#238C2C\",\n FOREST3: \"#29A634\",\n FOREST4: \"#43BF4D\",\n FOREST5: \"#62D96B\",\n GOLD1: \"#A67908\",\n GOLD2: \"#BF8C0A\",\n GOLD3: \"#D99E0B\",\n GOLD4: \"#F2B824\",\n GOLD5: \"#FFC940\",\n GRAY1: \"#5C7080\",\n GRAY2: \"#738694\",\n GRAY3: \"#8A9BA8\",\n GRAY4: \"#A7B6C2\",\n GRAY5: \"#BFCCD6\",\n GREEN1: \"#0A6640\",\n GREEN2: \"#0D8050\",\n GREEN3: \"#0F9960\",\n GREEN4: \"#15B371\",\n GREEN5: \"#3DCC91\",\n INDIGO1: \"#5642A6\",\n INDIGO2: \"#634DBF\",\n INDIGO3: \"#7157D9\",\n INDIGO4: \"#9179F2\",\n INDIGO5: \"#AD99FF\",\n LIGHT_GRAY1: \"#CED9E0\",\n LIGHT_GRAY2: \"#D8E1E8\",\n LIGHT_GRAY3: \"#E1E8ED\",\n LIGHT_GRAY4: \"#EBF1F5\",\n LIGHT_GRAY5: \"#F5F8FA\",\n LIME1: \"#728C23\",\n LIME2: \"#87A629\",\n LIME3: \"#9BBF30\",\n LIME4: \"#B6D94C\",\n LIME5: \"#D1F26D\",\n ORANGE1: \"#A66321\",\n ORANGE2: \"#BF7326\",\n ORANGE3: \"#D9822B\",\n ORANGE4: \"#F29D49\",\n ORANGE5: \"#FFB366\",\n RED1: \"#A82A2A\",\n RED2: \"#C23030\",\n RED3: \"#DB3737\",\n RED4: \"#F55656\",\n RED5: \"#FF7373\",\n ROSE1: \"#A82255\",\n ROSE2: \"#C22762\",\n ROSE3: \"#DB2C6F\",\n ROSE4: \"#F5498B\",\n ROSE5: \"#FF66A1\",\n SEPIA1: \"#63411E\",\n SEPIA2: \"#7D5125\",\n SEPIA3: \"#96622D\",\n SEPIA4: \"#B07B46\",\n SEPIA5: \"#C99765\",\n TURQUOISE1: \"#008075\",\n TURQUOISE2: \"#00998C\",\n TURQUOISE3: \"#00B3A4\",\n TURQUOISE4: \"#14CCBD\",\n TURQUOISE5: \"#2EE6D6\",\n VERMILION1: \"#9E2B0E\",\n VERMILION2: \"#B83211\",\n VERMILION3: \"#D13913\",\n VERMILION4: \"#EB532D\",\n VERMILION5: \"#FF6E4A\",\n VIOLET1: \"#5C255C\",\n VIOLET2: \"#752F75\",\n VIOLET3: \"#8F398F\",\n VIOLET4: \"#A854A8\",\n VIOLET5: \"#C274C2\",\n WHITE: \"#FFFFFF\",\n};\n//# sourceMappingURL=colors.js.map","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { isFunction } from \"./functionUtils\";\nexport function elementIsOrContains(element, testElement) {\n return element === testElement || element.contains(testElement);\n}\n/**\n * Throttle an event on an EventTarget by wrapping it in a\n * `requestAnimationFrame` call. Returns the event handler that was bound to\n * given eventName so you can clean up after yourself.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events/scroll\n */\nexport function throttleEvent(target, eventName, newEventName) {\n var throttledFunc = throttleImpl(function (event) {\n target.dispatchEvent(new CustomEvent(newEventName, event));\n });\n target.addEventListener(eventName, throttledFunc);\n return throttledFunc;\n}\n/**\n * Throttle a callback by wrapping it in a `requestAnimationFrame` call. Returns\n * the throttled function.\n * @see https://www.html5rocks.com/en/tutorials/speed/animations/\n */\nexport function throttleReactEventCallback(callback, options) {\n if (options === void 0) { options = {}; }\n var throttledFunc = throttleImpl(callback, function (event2) {\n if (options.preventDefault) {\n event2.preventDefault();\n }\n }, \n // prevent React from reclaiming the event object before we reference it\n function (event2) { return event2.persist(); });\n return throttledFunc;\n}\n/**\n * Throttle a method by wrapping it in a `requestAnimationFrame` call. Returns\n * the throttled function.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function throttle(method) {\n return throttleImpl(method);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction throttleImpl(onAnimationFrameRequested, onBeforeIsRunningCheck, onAfterIsRunningCheck) {\n var isRunning = false;\n var func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // don't use safeInvoke, because we might have more than its max number\n // of typed params\n if (isFunction(onBeforeIsRunningCheck)) {\n onBeforeIsRunningCheck.apply(void 0, args);\n }\n if (isRunning) {\n return;\n }\n isRunning = true;\n if (isFunction(onAfterIsRunningCheck)) {\n onAfterIsRunningCheck.apply(void 0, args);\n }\n requestAnimationFrame(function () {\n onAnimationFrameRequested.apply(void 0, args);\n isRunning = false;\n });\n };\n return func;\n}\n//# sourceMappingURL=domUtils.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { isFunction } from \"./functionUtils\";\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function safeInvokeMember(obj, key) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (obj != null) {\n var member = obj[key];\n if (isFunction(member)) {\n return member.apply(void 0, args);\n }\n }\n return undefined;\n}\n//# sourceMappingURL=safeInvokeMember.js.map","/*\n * Copyright 2019 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nif (typeof require !== \"undefined\" && typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n // we're in browser\n require(\"dom4\"); // only import actual dom4 if we're in the browser (not server-compatible)\n // we'll still need dom4 types for the TypeScript to compile, these are included in package.json\n}\n//# sourceMappingURL=configureDom4.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`, `'unmounted'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `<Transition>` component mounts.\n * If you want to transition on the first mount set `appear` to `true`, and the\n * component will transition in as soon as the `<Transition>` mounts.\n *\n * > Note: there are no specific \"appear\" states. `appear` only adds an additional `enter` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = _PropTypes.timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `<TransitionGroup>` renders a `<div>` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `<div>` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of `<Transition>` components, that are toggled `in` and out as they\n * leave. the `<TransitionGroup>` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `<Transition>` as\n * with our `<Fade>` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar GetIntrinsic = require('../GetIntrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nmodule.exports = function callBind() {\n\treturn $reflectApply(bind, $call, arguments);\n};\n\nmodule.exports.apply = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar origSymbol = global.Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Boundary, Classes, Position, removeNonHTMLProps } from \"../../common\";\nimport { Menu } from \"../menu/menu\";\nimport { MenuItem } from \"../menu/menuItem\";\nimport { OverflowList } from \"../overflow-list/overflowList\";\nimport { Popover } from \"../popover/popover\";\nimport { Breadcrumb } from \"./breadcrumb\";\nvar Breadcrumbs = /** @class */ (function (_super) {\n __extends(Breadcrumbs, _super);\n function Breadcrumbs() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderOverflow = function (items) {\n var collapseFrom = _this.props.collapseFrom;\n var position = collapseFrom === Boundary.END ? Position.BOTTOM_RIGHT : Position.BOTTOM_LEFT;\n var orderedItems = items;\n if (collapseFrom === Boundary.START) {\n // If we're collapsing from the start, the menu should be read from the bottom to the\n // top, continuing with the breadcrumbs to the right. Since this means the first\n // breadcrumb in the props must be the last in the menu, we need to reverse the overlow\n // order.\n orderedItems = items.slice().reverse();\n }\n return (React.createElement(\"li\", null,\n React.createElement(Popover, __assign({ position: position }, _this.props.popoverProps),\n React.createElement(\"span\", { className: Classes.BREADCRUMBS_COLLAPSED }),\n React.createElement(Menu, null, orderedItems.map(_this.renderOverflowBreadcrumb)))));\n };\n _this.renderOverflowBreadcrumb = function (props, index) {\n var isClickable = props.href != null || props.onClick != null;\n var htmlProps = removeNonHTMLProps(props);\n return React.createElement(MenuItem, __assign({ disabled: !isClickable }, htmlProps, { text: props.text, key: index }));\n };\n _this.renderBreadcrumbWrapper = function (props, index) {\n var isCurrent = _this.props.items[_this.props.items.length - 1] === props;\n return React.createElement(\"li\", { key: index }, _this.renderBreadcrumb(props, isCurrent));\n };\n return _this;\n }\n Breadcrumbs.prototype.render = function () {\n var _a = this.props, className = _a.className, collapseFrom = _a.collapseFrom, items = _a.items, minVisibleItems = _a.minVisibleItems, _b = _a.overflowListProps, overflowListProps = _b === void 0 ? {} : _b;\n return (React.createElement(OverflowList, __assign({ collapseFrom: collapseFrom, minVisibleItems: minVisibleItems, tagName: \"ul\" }, overflowListProps, { className: classNames(Classes.BREADCRUMBS, overflowListProps.className, className), items: items, overflowRenderer: this.renderOverflow, visibleItemRenderer: this.renderBreadcrumbWrapper })));\n };\n Breadcrumbs.prototype.renderBreadcrumb = function (props, isCurrent) {\n if (isCurrent && this.props.currentBreadcrumbRenderer != null) {\n return this.props.currentBreadcrumbRenderer(props);\n }\n else if (this.props.breadcrumbRenderer != null) {\n return this.props.breadcrumbRenderer(props);\n }\n else {\n // allow user to override 'current' prop\n return React.createElement(Breadcrumb, __assign({ current: isCurrent }, props));\n }\n };\n Breadcrumbs.defaultProps = {\n collapseFrom: Boundary.START,\n };\n Breadcrumbs = __decorate([\n polyfill\n ], Breadcrumbs);\n return Breadcrumbs;\n}(AbstractPureComponent2));\nexport { Breadcrumbs };\n//# sourceMappingURL=breadcrumbs.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX, Intent, } from \"../../common\";\nimport { H4 } from \"../html/html\";\nimport { Icon } from \"../icon/icon\";\nvar Callout = /** @class */ (function (_super) {\n __extends(Callout, _super);\n function Callout() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Callout.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, children = _b.children, icon = _b.icon, intent = _b.intent, title = _b.title, htmlProps = __rest(_b, [\"className\", \"children\", \"icon\", \"intent\", \"title\"]);\n var iconName = this.getIconName(icon, intent);\n var classes = classNames(Classes.CALLOUT, Classes.intentClass(intent), (_a = {}, _a[Classes.CALLOUT_ICON] = iconName != null, _a), className);\n return (React.createElement(\"div\", __assign({ className: classes }, htmlProps),\n iconName && React.createElement(Icon, { icon: iconName, iconSize: Icon.SIZE_LARGE }),\n title && React.createElement(H4, null, title),\n children));\n };\n Callout.prototype.getIconName = function (icon, intent) {\n // 1. no icon\n if (icon === null) {\n return undefined;\n }\n // 2. defined iconName prop\n if (icon !== undefined) {\n return icon;\n }\n // 3. default intent icon\n switch (intent) {\n case Intent.DANGER:\n return \"error\";\n case Intent.PRIMARY:\n return \"info-sign\";\n case Intent.WARNING:\n return \"warning-sign\";\n case Intent.SUCCESS:\n return \"tick\";\n default:\n return undefined;\n }\n };\n Callout.displayName = DISPLAYNAME_PREFIX + \".Callout\";\n Callout = __decorate([\n polyfill\n ], Callout);\n return Callout;\n}(AbstractPureComponent2));\nexport { Callout };\n//# sourceMappingURL=callout.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Elevation } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nvar Card = /** @class */ (function (_super) {\n __extends(Card, _super);\n function Card() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Card.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, elevation = _b.elevation, interactive = _b.interactive, htmlProps = __rest(_b, [\"className\", \"elevation\", \"interactive\"]);\n var classes = classNames(Classes.CARD, (_a = {}, _a[Classes.INTERACTIVE] = interactive, _a), Classes.elevationClass(elevation), className);\n return React.createElement(\"div\", __assign({ className: classes }, htmlProps));\n };\n Card.displayName = DISPLAYNAME_PREFIX + \".Card\";\n Card.defaultProps = {\n elevation: Elevation.ZERO,\n interactive: false,\n };\n Card = __decorate([\n polyfill\n ], Card);\n return Card;\n}(AbstractPureComponent2));\nexport { Card };\n//# sourceMappingURL=card.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { Button } from \"../button/buttons\";\nimport { H4 } from \"../html/html\";\nimport { Icon } from \"../icon/icon\";\nimport { Overlay } from \"../overlay/overlay\";\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n function Dialog() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Dialog.prototype.render = function () {\n return (React.createElement(Overlay, __assign({}, this.props, { className: Classes.OVERLAY_SCROLL_CONTAINER, hasBackdrop: true }),\n React.createElement(\"div\", { className: Classes.DIALOG_CONTAINER },\n React.createElement(\"div\", { className: classNames(Classes.DIALOG, this.props.className), style: this.props.style },\n this.maybeRenderHeader(),\n this.props.children))));\n };\n Dialog.prototype.validateProps = function (props) {\n if (props.title == null) {\n if (props.icon != null) {\n console.warn(Errors.DIALOG_WARN_NO_HEADER_ICON);\n }\n if (props.isCloseButtonShown != null) {\n console.warn(Errors.DIALOG_WARN_NO_HEADER_CLOSE_BUTTON);\n }\n }\n };\n Dialog.prototype.maybeRenderCloseButton = function () {\n // show close button if prop is undefined or null\n // this gives us a behavior as if the default value were `true`\n if (this.props.isCloseButtonShown !== false) {\n return (React.createElement(Button, { \"aria-label\": \"Close\", className: Classes.DIALOG_CLOSE_BUTTON, icon: React.createElement(Icon, { icon: \"small-cross\", iconSize: Icon.SIZE_LARGE }), minimal: true, onClick: this.props.onClose }));\n }\n else {\n return undefined;\n }\n };\n Dialog.prototype.maybeRenderHeader = function () {\n var _a = this.props, icon = _a.icon, title = _a.title;\n if (title == null) {\n return undefined;\n }\n return (React.createElement(\"div\", { className: Classes.DIALOG_HEADER },\n React.createElement(Icon, { icon: icon, iconSize: Icon.SIZE_LARGE }),\n React.createElement(H4, null, title),\n this.maybeRenderCloseButton()));\n };\n Dialog.defaultProps = {\n canOutsideClickClose: true,\n isOpen: false,\n };\n Dialog.displayName = DISPLAYNAME_PREFIX + \".Dialog\";\n Dialog = __decorate([\n polyfill\n ], Dialog);\n return Dialog;\n}(AbstractPureComponent2));\nexport { Dialog };\n//# sourceMappingURL=dialog.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { getPositionIgnoreAngles, isPositionHorizontal } from \"../../common/position\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { Button } from \"../button/buttons\";\nimport { H4 } from \"../html/html\";\nimport { Icon } from \"../icon/icon\";\nimport { Overlay } from \"../overlay/overlay\";\nvar Drawer = /** @class */ (function (_super) {\n __extends(Drawer, _super);\n function Drawer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Drawer.prototype.render = function () {\n var _a, _b;\n // eslint-disable-next-line deprecation/deprecation\n var _c = this.props, size = _c.size, style = _c.style, position = _c.position, vertical = _c.vertical;\n var realPosition = position ? getPositionIgnoreAngles(position) : null;\n var classes = classNames(Classes.DRAWER, (_a = {},\n _a[Classes.VERTICAL] = !realPosition && vertical,\n _a[realPosition ? Classes.positionClass(realPosition) : \"\"] = true,\n _a), this.props.className);\n var styleProp = size == null\n ? style\n : __assign(__assign({}, style), (_b = {}, _b[(realPosition ? isPositionHorizontal(realPosition) : vertical) ? \"height\" : \"width\"] = size, _b));\n return (React.createElement(Overlay, __assign({}, this.props, { className: Classes.OVERLAY_CONTAINER }),\n React.createElement(\"div\", { className: classes, style: styleProp },\n this.maybeRenderHeader(),\n this.props.children)));\n };\n Drawer.prototype.validateProps = function (props) {\n if (props.title == null) {\n if (props.icon != null) {\n console.warn(Errors.DIALOG_WARN_NO_HEADER_ICON);\n }\n if (props.isCloseButtonShown != null) {\n console.warn(Errors.DIALOG_WARN_NO_HEADER_CLOSE_BUTTON);\n }\n }\n if (props.position != null) {\n // eslint-disable-next-line deprecation/deprecation\n if (props.vertical) {\n console.warn(Errors.DRAWER_VERTICAL_IS_IGNORED);\n }\n if (props.position !== getPositionIgnoreAngles(props.position)) {\n console.warn(Errors.DRAWER_ANGLE_POSITIONS_ARE_CASTED);\n }\n }\n };\n Drawer.prototype.maybeRenderCloseButton = function () {\n // `isCloseButtonShown` can't be defaulted through default props because of props validation\n // so this check actually defaults it to true (fails only if directly set to false)\n if (this.props.isCloseButtonShown !== false) {\n return (React.createElement(Button, { \"aria-label\": \"Close\", className: Classes.DIALOG_CLOSE_BUTTON, icon: React.createElement(Icon, { icon: \"small-cross\", iconSize: Icon.SIZE_LARGE }), minimal: true, onClick: this.props.onClose }));\n }\n else {\n return null;\n }\n };\n Drawer.prototype.maybeRenderHeader = function () {\n var _a = this.props, icon = _a.icon, title = _a.title;\n if (title == null) {\n return null;\n }\n return (React.createElement(\"div\", { className: Classes.DRAWER_HEADER },\n React.createElement(Icon, { icon: icon, iconSize: Icon.SIZE_LARGE }),\n React.createElement(H4, null, title),\n this.maybeRenderCloseButton()));\n };\n Drawer.displayName = DISPLAYNAME_PREFIX + \".Drawer\";\n Drawer.defaultProps = {\n canOutsideClickClose: true,\n isOpen: false,\n position: null,\n style: {},\n vertical: false,\n };\n Drawer.SIZE_SMALL = \"360px\";\n Drawer.SIZE_STANDARD = \"50%\";\n Drawer.SIZE_LARGE = \"90%\";\n Drawer = __decorate([\n polyfill\n ], Drawer);\n return Drawer;\n}(AbstractPureComponent2));\nexport { Drawer };\n//# sourceMappingURL=drawer.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nvar FormGroup = /** @class */ (function (_super) {\n __extends(FormGroup, _super);\n function FormGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FormGroup.prototype.render = function () {\n var _a = this.props, children = _a.children, contentClassName = _a.contentClassName, helperText = _a.helperText, label = _a.label, labelFor = _a.labelFor, labelInfo = _a.labelInfo, style = _a.style;\n return (React.createElement(\"div\", { className: this.getClassName(), style: style },\n label && (React.createElement(\"label\", { className: Classes.LABEL, htmlFor: labelFor },\n label,\n \" \",\n React.createElement(\"span\", { className: Classes.TEXT_MUTED }, labelInfo))),\n React.createElement(\"div\", { className: classNames(Classes.FORM_CONTENT, contentClassName) },\n children,\n helperText && React.createElement(\"div\", { className: Classes.FORM_HELPER_TEXT }, helperText))));\n };\n FormGroup.prototype.getClassName = function () {\n var _a;\n var _b = this.props, className = _b.className, disabled = _b.disabled, inline = _b.inline, intent = _b.intent;\n return classNames(Classes.FORM_GROUP, Classes.intentClass(intent), (_a = {},\n _a[Classes.DISABLED] = disabled,\n _a[Classes.INLINE] = inline,\n _a), className);\n };\n FormGroup.displayName = DISPLAYNAME_PREFIX + \".FormGroup\";\n FormGroup = __decorate([\n polyfill\n ], FormGroup);\n return FormGroup;\n}(AbstractPureComponent2));\nexport { FormGroup };\n//# sourceMappingURL=formGroup.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { isElementOfType } from \"../../common/utils\";\nimport { Radio } from \"./controls\";\nvar counter = 0;\nfunction nextName() {\n return RadioGroup.displayName + \"-\" + counter++;\n}\nvar RadioGroup = /** @class */ (function (_super) {\n __extends(RadioGroup, _super);\n function RadioGroup() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // a unique name for this group, which can be overridden by `name` prop.\n _this.autoGroupName = nextName();\n return _this;\n }\n RadioGroup.prototype.render = function () {\n var label = this.props.label;\n return (React.createElement(\"div\", { className: this.props.className },\n label == null ? null : React.createElement(\"label\", { className: Classes.LABEL }, label),\n Array.isArray(this.props.options) ? this.renderOptions() : this.renderChildren()));\n };\n RadioGroup.prototype.validateProps = function () {\n if (this.props.children != null && this.props.options != null) {\n console.warn(Errors.RADIOGROUP_WARN_CHILDREN_OPTIONS_MUTEX);\n }\n };\n RadioGroup.prototype.renderChildren = function () {\n var _this = this;\n return React.Children.map(this.props.children, function (child) {\n if (isElementOfType(child, Radio)) {\n return React.cloneElement(child, _this.getRadioProps(child.props));\n }\n else {\n return child;\n }\n });\n };\n RadioGroup.prototype.renderOptions = function () {\n var _this = this;\n return this.props.options.map(function (option) { return (React.createElement(Radio, __assign({}, _this.getRadioProps(option), { key: option.value, labelElement: option.label || option.value }))); });\n };\n RadioGroup.prototype.getRadioProps = function (optionProps) {\n var name = this.props.name;\n var className = optionProps.className, disabled = optionProps.disabled, value = optionProps.value;\n return {\n checked: value === this.props.selectedValue,\n className: className,\n disabled: disabled || this.props.disabled,\n inline: this.props.inline,\n name: name == null ? this.autoGroupName : name,\n onChange: this.props.onChange,\n value: value,\n };\n };\n RadioGroup.displayName = DISPLAYNAME_PREFIX + \".RadioGroup\";\n RadioGroup = __decorate([\n polyfill\n ], RadioGroup);\n return RadioGroup;\n}(AbstractPureComponent2));\nexport { RadioGroup };\n//# sourceMappingURL=radioGroup.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2 } from \"../../common\";\nimport { DISABLED, FILL, HTML_SELECT, LARGE, MINIMAL } from \"../../common/classes\";\nimport { Icon } from \"../icon/icon\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar HTMLSelect = /** @class */ (function (_super) {\n __extends(HTMLSelect, _super);\n function HTMLSelect() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n HTMLSelect.prototype.render = function () {\n var _a;\n var _b = this.props, className = _b.className, disabled = _b.disabled, elementRef = _b.elementRef, fill = _b.fill, iconProps = _b.iconProps, large = _b.large, minimal = _b.minimal, _c = _b.options, options = _c === void 0 ? [] : _c, htmlProps = __rest(_b, [\"className\", \"disabled\", \"elementRef\", \"fill\", \"iconProps\", \"large\", \"minimal\", \"options\"]);\n var classes = classNames(HTML_SELECT, (_a = {},\n _a[DISABLED] = disabled,\n _a[FILL] = fill,\n _a[LARGE] = large,\n _a[MINIMAL] = minimal,\n _a), className);\n var optionChildren = options.map(function (option) {\n var props = typeof option === \"object\" ? option : { value: option };\n return React.createElement(\"option\", __assign({}, props, { key: props.value, children: props.label || props.value }));\n });\n return (React.createElement(\"div\", { className: classes },\n React.createElement(\"select\", __assign({ disabled: disabled, ref: elementRef }, htmlProps, { multiple: false }),\n optionChildren,\n htmlProps.children),\n React.createElement(Icon, __assign({ icon: \"double-caret-vertical\" }, iconProps))));\n };\n HTMLSelect = __decorate([\n polyfill\n ], HTMLSelect);\n return HTMLSelect;\n}(AbstractPureComponent2));\nexport { HTMLSelect };\n//# sourceMappingURL=htmlSelect.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar HTMLTable = /** @class */ (function (_super) {\n __extends(HTMLTable, _super);\n function HTMLTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n HTMLTable.prototype.render = function () {\n var _a;\n // eslint-disable-next-line deprecation/deprecation\n var _b = this.props, bordered = _b.bordered, className = _b.className, condensed = _b.condensed, elementRef = _b.elementRef, interactive = _b.interactive, small = _b.small, striped = _b.striped, htmlProps = __rest(_b, [\"bordered\", \"className\", \"condensed\", \"elementRef\", \"interactive\", \"small\", \"striped\"]);\n var classes = classNames(Classes.HTML_TABLE, (_a = {},\n _a[Classes.HTML_TABLE_BORDERED] = bordered,\n _a[Classes.HTML_TABLE_CONDENSED] = condensed,\n _a[Classes.HTML_TABLE_STRIPED] = striped,\n _a[Classes.INTERACTIVE] = interactive,\n _a[Classes.SMALL] = small,\n _a), className);\n // eslint-disable-next-line @blueprintjs/html-components\n return React.createElement(\"table\", __assign({}, htmlProps, { ref: elementRef, className: classes }));\n };\n HTMLTable = __decorate([\n polyfill\n ], HTMLTable);\n return HTMLTable;\n}(AbstractPureComponent2));\nexport { HTMLTable };\n//# sourceMappingURL=htmlTable.js.map","/*\n * Copyright 2020 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport * from \"./hotkeysTypes\";\nexport * from \"./hotkeys\";\nexport { Hotkey } from \"./hotkey\";\nexport { KeyCombo } from \"./keyCombo\";\n// eslint-disable-next-line import/no-cycle\nexport { HotkeysTarget } from \"./hotkeysTarget\";\nexport { comboMatches, getKeyCombo, getKeyComboString, parseKeyCombo } from \"./hotkeyParser\";\n// eslint-disable-next-line import/no-cycle\nexport { hideHotkeysDialog, setHotkeysDialogProps } from \"./hotkeysDialog\";\n//# sourceMappingURL=index.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { NavbarDivider } from \"./navbarDivider\";\nimport { NavbarGroup } from \"./navbarGroup\";\nimport { NavbarHeading } from \"./navbarHeading\";\n// this component is simple enough that tests would be purely tautological.\n/* istanbul ignore next */\nvar Navbar = /** @class */ (function (_super) {\n __extends(Navbar, _super);\n function Navbar() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Navbar.prototype.render = function () {\n var _a;\n var _b = this.props, children = _b.children, className = _b.className, fixedToTop = _b.fixedToTop, htmlProps = __rest(_b, [\"children\", \"className\", \"fixedToTop\"]);\n var classes = classNames(Classes.NAVBAR, (_a = {}, _a[Classes.FIXED_TOP] = fixedToTop, _a), className);\n return (React.createElement(\"div\", __assign({ className: classes }, htmlProps), children));\n };\n Navbar.displayName = DISPLAYNAME_PREFIX + \".Navbar\";\n Navbar.Divider = NavbarDivider;\n Navbar.Group = NavbarGroup;\n Navbar.Heading = NavbarHeading;\n Navbar = __decorate([\n polyfill\n ], Navbar);\n return Navbar;\n}(AbstractPureComponent2));\nexport { Navbar };\n//# sourceMappingURL=navbar.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2 } from \"../../common\";\nimport * as Classes from \"../../common/classes\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { ensureElement } from \"../../common/utils\";\nimport { H4 } from \"../html/html\";\nimport { Icon } from \"../icon/icon\";\nvar NonIdealState = /** @class */ (function (_super) {\n __extends(NonIdealState, _super);\n function NonIdealState() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NonIdealState.prototype.render = function () {\n var _a = this.props, action = _a.action, children = _a.children, className = _a.className, description = _a.description, title = _a.title;\n return (React.createElement(\"div\", { className: classNames(Classes.NON_IDEAL_STATE, className) },\n this.maybeRenderVisual(),\n title && React.createElement(H4, null, title),\n description && ensureElement(description, \"div\"),\n action,\n children));\n };\n NonIdealState.prototype.maybeRenderVisual = function () {\n var icon = this.props.icon;\n if (icon == null) {\n return null;\n }\n else {\n return (React.createElement(\"div\", { className: Classes.NON_IDEAL_STATE_VISUAL },\n React.createElement(Icon, { icon: icon, iconSize: Icon.SIZE_LARGE * 3 })));\n }\n };\n NonIdealState.displayName = DISPLAYNAME_PREFIX + \".NonIdealState\";\n NonIdealState = __decorate([\n polyfill\n ], NonIdealState);\n return NonIdealState;\n}(AbstractPureComponent2));\nexport { NonIdealState };\n//# sourceMappingURL=nonIdealState.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nimport { Position } from \"../../common/position\";\n/** `Position` with `\"auto\"` values, used by `Popover` and `Tooltip`. */\nexport var PopoverPosition = __assign(__assign({}, Position), { AUTO: \"auto\", AUTO_END: \"auto-end\", AUTO_START: \"auto-start\" });\n//# sourceMappingURL=popoverSharedProps.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { clamp } from \"../../common/utils\";\nvar ProgressBar = /** @class */ (function (_super) {\n __extends(ProgressBar, _super);\n function ProgressBar() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ProgressBar.prototype.render = function () {\n var _a;\n var _b = this.props, _c = _b.animate, animate = _c === void 0 ? true : _c, className = _b.className, intent = _b.intent, _d = _b.stripes, stripes = _d === void 0 ? true : _d, value = _b.value;\n var classes = classNames(Classes.PROGRESS_BAR, Classes.intentClass(intent), (_a = {}, _a[Classes.PROGRESS_NO_ANIMATION] = !animate, _a[Classes.PROGRESS_NO_STRIPES] = !stripes, _a), className);\n // don't set width if value is null (rely on default CSS value)\n var width = value == null ? null : 100 * clamp(value, 0, 1) + \"%\";\n return (React.createElement(\"div\", { className: classes },\n React.createElement(\"div\", { className: Classes.PROGRESS_METER, style: { width: width } })));\n };\n ProgressBar.displayName = DISPLAYNAME_PREFIX + \".ProgressBar\";\n ProgressBar = __decorate([\n polyfill\n ], ProgressBar);\n return ProgressBar;\n}(AbstractPureComponent2));\nexport { ProgressBar };\n//# sourceMappingURL=progressBar.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Intent } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { MultiSlider } from \"./multiSlider\";\nvar RangeIndex;\n(function (RangeIndex) {\n RangeIndex[RangeIndex[\"START\"] = 0] = \"START\";\n RangeIndex[RangeIndex[\"END\"] = 1] = \"END\";\n})(RangeIndex || (RangeIndex = {}));\nvar RangeSlider = /** @class */ (function (_super) {\n __extends(RangeSlider, _super);\n function RangeSlider() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RangeSlider.prototype.render = function () {\n var _a = this.props, value = _a.value, props = __rest(_a, [\"value\"]);\n return (React.createElement(MultiSlider, __assign({}, props),\n React.createElement(MultiSlider.Handle, { value: value[RangeIndex.START], type: \"start\", intentAfter: props.intent }),\n React.createElement(MultiSlider.Handle, { value: value[RangeIndex.END], type: \"end\" })));\n };\n RangeSlider.prototype.validateProps = function (props) {\n var value = props.value;\n if (value == null || value[RangeIndex.START] == null || value[RangeIndex.END] == null) {\n throw new Error(Errors.RANGESLIDER_NULL_VALUE);\n }\n };\n RangeSlider.defaultProps = __assign(__assign({}, MultiSlider.defaultSliderProps), { intent: Intent.PRIMARY, value: [0, 10] });\n RangeSlider.displayName = DISPLAYNAME_PREFIX + \".RangeSlider\";\n RangeSlider = __decorate([\n polyfill\n ], RangeSlider);\n return RangeSlider;\n}(AbstractPureComponent2));\nexport { RangeSlider };\n//# sourceMappingURL=rangeSlider.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Intent } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { MultiSlider } from \"./multiSlider\";\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Slider.prototype.render = function () {\n var _a = this.props, initialValue = _a.initialValue, intent = _a.intent, value = _a.value, onChange = _a.onChange, onRelease = _a.onRelease, props = __rest(_a, [\"initialValue\", \"intent\", \"value\", \"onChange\", \"onRelease\"]);\n return (React.createElement(MultiSlider, __assign({}, props),\n React.createElement(MultiSlider.Handle, { value: value, intentAfter: value < initialValue ? intent : undefined, intentBefore: value >= initialValue ? intent : undefined, onChange: onChange, onRelease: onRelease }),\n React.createElement(MultiSlider.Handle, { value: initialValue, interactionKind: \"none\" })));\n };\n Slider.defaultProps = __assign(__assign({}, MultiSlider.defaultSliderProps), { initialValue: 0, intent: Intent.PRIMARY, value: 0 });\n Slider.displayName = DISPLAYNAME_PREFIX + \".Slider\";\n Slider = __decorate([\n polyfill\n ], Slider);\n return Slider;\n}(AbstractPureComponent2));\nexport { Slider };\n//# sourceMappingURL=slider.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX, Utils, } from \"../../common\";\nimport { isReactNodeEmpty } from \"../../common/utils\";\nimport { Icon } from \"../icon/icon\";\nimport { Text } from \"../text/text\";\nvar Tag = /** @class */ (function (_super) {\n __extends(Tag, _super);\n function Tag() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onRemoveClick = function (e) {\n Utils.safeInvoke(_this.props.onRemove, e, _this.props);\n };\n return _this;\n }\n Tag.prototype.render = function () {\n var _a;\n var _b = this.props, active = _b.active, children = _b.children, className = _b.className, fill = _b.fill, icon = _b.icon, intent = _b.intent, interactive = _b.interactive, large = _b.large, minimal = _b.minimal, multiline = _b.multiline, onRemove = _b.onRemove, rightIcon = _b.rightIcon, round = _b.round, _c = _b.tabIndex, tabIndex = _c === void 0 ? 0 : _c, htmlProps = __rest(_b, [\"active\", \"children\", \"className\", \"fill\", \"icon\", \"intent\", \"interactive\", \"large\", \"minimal\", \"multiline\", \"onRemove\", \"rightIcon\", \"round\", \"tabIndex\"]);\n var isRemovable = Utils.isFunction(onRemove);\n var tagClasses = classNames(Classes.TAG, Classes.intentClass(intent), (_a = {},\n _a[Classes.ACTIVE] = active,\n _a[Classes.FILL] = fill,\n _a[Classes.INTERACTIVE] = interactive,\n _a[Classes.LARGE] = large,\n _a[Classes.MINIMAL] = minimal,\n _a[Classes.ROUND] = round,\n _a), className);\n var isLarge = large || tagClasses.indexOf(Classes.LARGE) >= 0;\n var removeButton = isRemovable ? (React.createElement(\"button\", { type: \"button\", className: Classes.TAG_REMOVE, onClick: this.onRemoveClick },\n React.createElement(Icon, { icon: \"small-cross\", iconSize: isLarge ? Icon.SIZE_LARGE : Icon.SIZE_STANDARD }))) : null;\n return (React.createElement(\"span\", __assign({}, htmlProps, { className: tagClasses, tabIndex: interactive ? tabIndex : undefined }),\n React.createElement(Icon, { icon: icon }),\n !isReactNodeEmpty(children) && (React.createElement(Text, { className: Classes.FILL, ellipsize: !multiline, tagName: \"span\" }, children)),\n React.createElement(Icon, { icon: rightIcon }),\n removeButton));\n };\n Tag.displayName = DISPLAYNAME_PREFIX + \".Tag\";\n Tag = __decorate([\n polyfill\n ], Tag);\n return Tag;\n}(AbstractPureComponent2));\nexport { Tag };\n//# sourceMappingURL=tag.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __spreadArrays } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Position } from \"../../common\";\nimport { TOASTER_CREATE_NULL, TOASTER_MAX_TOASTS_INVALID, TOASTER_WARN_INLINE } from \"../../common/errors\";\nimport { ESCAPE } from \"../../common/keys\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { isNodeEnv, safeInvoke } from \"../../common/utils\";\nimport { Overlay } from \"../overlay/overlay\";\nimport { Toast } from \"./toast\";\nvar Toaster = /** @class */ (function (_super) {\n __extends(Toaster, _super);\n function Toaster() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n toasts: [],\n };\n // auto-incrementing identifier for un-keyed toasts\n _this.toastId = 0;\n _this.getDismissHandler = function (toast) { return function (timeoutExpired) {\n _this.dismiss(toast.key, timeoutExpired);\n }; };\n _this.handleClose = function (e) {\n // NOTE that `e` isn't always a KeyboardEvent but that's the only type we care about\n if (e.which === ESCAPE) {\n _this.clear();\n }\n };\n return _this;\n }\n Toaster_1 = Toaster;\n /**\n * Create a new `Toaster` instance that can be shared around your application.\n * The `Toaster` will be rendered into a new element appended to the given container.\n */\n Toaster.create = function (props, container) {\n if (container === void 0) { container = document.body; }\n if (props != null && props.usePortal != null && !isNodeEnv(\"production\")) {\n console.warn(TOASTER_WARN_INLINE);\n }\n var containerElement = document.createElement(\"div\");\n container.appendChild(containerElement);\n var toaster = ReactDOM.render(React.createElement(Toaster_1, __assign({}, props, { usePortal: false })), containerElement);\n if (toaster == null) {\n throw new Error(TOASTER_CREATE_NULL);\n }\n return toaster;\n };\n Toaster.prototype.show = function (props, key) {\n if (this.props.maxToasts) {\n // check if active number of toasts are at the maxToasts limit\n this.dismissIfAtLimit();\n }\n var options = this.createToastOptions(props, key);\n if (key === undefined || this.isNewToastKey(key)) {\n this.setState(function (prevState) { return ({\n toasts: __spreadArrays([options], prevState.toasts),\n }); });\n }\n else {\n this.setState(function (prevState) { return ({\n toasts: prevState.toasts.map(function (t) { return (t.key === key ? options : t); }),\n }); });\n }\n return options.key;\n };\n Toaster.prototype.dismiss = function (key, timeoutExpired) {\n if (timeoutExpired === void 0) { timeoutExpired = false; }\n this.setState(function (_a) {\n var toasts = _a.toasts;\n return ({\n toasts: toasts.filter(function (t) {\n var matchesKey = t.key === key;\n if (matchesKey) {\n safeInvoke(t.onDismiss, timeoutExpired);\n }\n return !matchesKey;\n }),\n });\n });\n };\n Toaster.prototype.clear = function () {\n this.state.toasts.map(function (t) { return safeInvoke(t.onDismiss, false); });\n this.setState({ toasts: [] });\n };\n Toaster.prototype.getToasts = function () {\n return this.state.toasts;\n };\n Toaster.prototype.render = function () {\n // $pt-transition-duration * 3 + $pt-transition-duration / 2\n var classes = classNames(Classes.TOAST_CONTAINER, this.getPositionClasses(), this.props.className);\n return (React.createElement(Overlay, { autoFocus: this.props.autoFocus, canEscapeKeyClose: this.props.canEscapeKeyClear, canOutsideClickClose: false, className: classes, enforceFocus: false, hasBackdrop: false, isOpen: this.state.toasts.length > 0 || this.props.children != null, onClose: this.handleClose, transitionDuration: 350, transitionName: Classes.TOAST, usePortal: this.props.usePortal },\n this.state.toasts.map(this.renderToast, this),\n this.props.children));\n };\n Toaster.prototype.validateProps = function (props) {\n // maximum number of toasts should not be a number less than 1\n if (props.maxToasts < 1) {\n throw new Error(TOASTER_MAX_TOASTS_INVALID);\n }\n };\n Toaster.prototype.isNewToastKey = function (key) {\n return this.state.toasts.every(function (toast) { return toast.key !== key; });\n };\n Toaster.prototype.dismissIfAtLimit = function () {\n if (this.state.toasts.length === this.props.maxToasts) {\n // dismiss the oldest toast to stay within the maxToasts limit\n this.dismiss(this.state.toasts[this.state.toasts.length - 1].key);\n }\n };\n Toaster.prototype.renderToast = function (toast) {\n return React.createElement(Toast, __assign({}, toast, { onDismiss: this.getDismissHandler(toast) }));\n };\n Toaster.prototype.createToastOptions = function (props, key) {\n if (key === void 0) { key = \"toast-\" + this.toastId++; }\n // clone the object before adding the key prop to avoid leaking the mutation\n return __assign(__assign({}, props), { key: key });\n };\n Toaster.prototype.getPositionClasses = function () {\n var positions = this.props.position.split(\"-\");\n // NOTE that there is no -center class because that's the default style\n return positions.map(function (p) { return Classes.TOAST_CONTAINER + \"-\" + p.toLowerCase(); });\n };\n var Toaster_1;\n Toaster.displayName = DISPLAYNAME_PREFIX + \".Toaster\";\n Toaster.defaultProps = {\n autoFocus: false,\n canEscapeKeyClear: true,\n position: Position.TOP,\n usePortal: true,\n };\n Toaster = Toaster_1 = __decorate([\n polyfill\n ], Toaster);\n return Toaster;\n}(AbstractPureComponent2));\nexport { Toaster };\n//# sourceMappingURL=toaster.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../../common/classes\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport { isFunction } from \"../../common/utils\";\nimport { TreeNode } from \"./treeNode\";\n// eslint-disable-next-line @typescript-eslint/ban-types\nvar Tree = /** @class */ (function (_super) {\n __extends(Tree, _super);\n function Tree() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.nodeRefs = {};\n _this.handleNodeCollapse = function (node, e) {\n _this.handlerHelper(_this.props.onNodeCollapse, node, e);\n };\n _this.handleNodeClick = function (node, e) {\n _this.handlerHelper(_this.props.onNodeClick, node, e);\n };\n _this.handleContentRef = function (node, element) {\n if (element != null) {\n _this.nodeRefs[node.props.id] = element;\n }\n else {\n // don't want our object to get bloated with old keys\n delete _this.nodeRefs[node.props.id];\n }\n };\n _this.handleNodeContextMenu = function (node, e) {\n _this.handlerHelper(_this.props.onNodeContextMenu, node, e);\n };\n _this.handleNodeDoubleClick = function (node, e) {\n _this.handlerHelper(_this.props.onNodeDoubleClick, node, e);\n };\n _this.handleNodeExpand = function (node, e) {\n _this.handlerHelper(_this.props.onNodeExpand, node, e);\n };\n _this.handleNodeMouseEnter = function (node, e) {\n _this.handlerHelper(_this.props.onNodeMouseEnter, node, e);\n };\n _this.handleNodeMouseLeave = function (node, e) {\n _this.handlerHelper(_this.props.onNodeMouseLeave, node, e);\n };\n return _this;\n }\n Tree.ofType = function () {\n return Tree;\n };\n Tree.nodeFromPath = function (path, treeNodes) {\n if (path.length === 1) {\n return treeNodes[path[0]];\n }\n else {\n return Tree.nodeFromPath(path.slice(1), treeNodes[path[0]].childNodes);\n }\n };\n Tree.prototype.render = function () {\n return (React.createElement(\"div\", { className: classNames(Classes.TREE, this.props.className) }, this.renderNodes(this.props.contents, [], Classes.TREE_ROOT)));\n };\n /**\n * Returns the underlying HTML element of the `Tree` node with an id of `nodeId`.\n * This element does not contain the children of the node, only its label and controls.\n * If the node is not currently mounted, `undefined` is returned.\n */\n Tree.prototype.getNodeContentElement = function (nodeId) {\n return this.nodeRefs[nodeId];\n };\n Tree.prototype.renderNodes = function (treeNodes, currentPath, className) {\n var _this = this;\n if (treeNodes == null) {\n return null;\n }\n var nodeItems = treeNodes.map(function (node, i) {\n var elementPath = currentPath.concat(i);\n var TypedTreeNode = TreeNode.ofType();\n return (React.createElement(TypedTreeNode, __assign({}, node, { key: node.id, contentRef: _this.handleContentRef, depth: elementPath.length - 1, onClick: _this.handleNodeClick, onContextMenu: _this.handleNodeContextMenu, onCollapse: _this.handleNodeCollapse, onDoubleClick: _this.handleNodeDoubleClick, onExpand: _this.handleNodeExpand, onMouseEnter: _this.handleNodeMouseEnter, onMouseLeave: _this.handleNodeMouseLeave, path: elementPath }), _this.renderNodes(node.childNodes, elementPath)));\n });\n return React.createElement(\"ul\", { className: classNames(Classes.TREE_NODE_LIST, className) }, nodeItems);\n };\n Tree.prototype.handlerHelper = function (handlerFromProps, node, e) {\n if (isFunction(handlerFromProps)) {\n var nodeData = Tree.nodeFromPath(node.props.path, this.props.contents);\n handlerFromProps(nodeData, node.props.path, e);\n }\n };\n Tree.displayName = DISPLAYNAME_PREFIX + \".Tree\";\n return Tree;\n}(React.Component));\nexport { Tree };\n//# sourceMappingURL=tree.js.map","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'exports', '../utils'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, exports, require('../utils'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, mod.exports, global.utils);\n global.index = mod.exports;\n }\n})(this, function (module, exports, _utils) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var addedDiff = function addedDiff(lhs, rhs) {\n\n if (lhs === rhs || !(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return {};\n\n var l = (0, _utils.properObject)(lhs);\n var r = (0, _utils.properObject)(rhs);\n\n return Object.keys(r).reduce(function (acc, key) {\n if (l.hasOwnProperty(key)) {\n var difference = addedDiff(l[key], r[key]);\n\n if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;\n\n return _extends({}, acc, _defineProperty({}, key, difference));\n }\n\n return _extends({}, acc, _defineProperty({}, key, r[key]));\n }, {});\n };\n\n exports.default = addedDiff;\n module.exports = exports['default'];\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'exports', '../utils'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, exports, require('../utils'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, mod.exports, global.utils);\n global.index = mod.exports;\n }\n})(this, function (module, exports, _utils) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var deletedDiff = function deletedDiff(lhs, rhs) {\n if (lhs === rhs || !(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return {};\n\n var l = (0, _utils.properObject)(lhs);\n var r = (0, _utils.properObject)(rhs);\n\n return Object.keys(l).reduce(function (acc, key) {\n if (r.hasOwnProperty(key)) {\n var difference = deletedDiff(l[key], r[key]);\n\n if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference)) return acc;\n\n return _extends({}, acc, _defineProperty({}, key, difference));\n }\n\n return _extends({}, acc, _defineProperty({}, key, undefined));\n }, {});\n };\n\n exports.default = deletedDiff;\n module.exports = exports['default'];\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'exports', '../utils'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, exports, require('../utils'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, mod.exports, global.utils);\n global.index = mod.exports;\n }\n})(this, function (module, exports, _utils) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var updatedDiff = function updatedDiff(lhs, rhs) {\n\n if (lhs === rhs) return {};\n\n if (!(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return rhs;\n\n var l = (0, _utils.properObject)(lhs);\n var r = (0, _utils.properObject)(rhs);\n\n if ((0, _utils.isDate)(l) || (0, _utils.isDate)(r)) {\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce(function (acc, key) {\n\n if (l.hasOwnProperty(key)) {\n var difference = updatedDiff(l[key], r[key]);\n\n if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference) && !(0, _utils.isDate)(difference)) return acc;\n\n return _extends({}, acc, _defineProperty({}, key, difference));\n }\n\n return acc;\n }, {});\n };\n\n exports.default = updatedDiff;\n module.exports = exports['default'];\n});","'use strict'\n\nmodule.exports = require('./lib')\n","'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = stringify\n\nfunction stringify(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if (own.call(value, 'position') || own.call(value, 'type')) {\n return position(value.position)\n }\n\n // Position.\n if (own.call(value, 'start') || own.call(value, 'end')) {\n return position(value)\n }\n\n // Point.\n if (own.call(value, 'line') || own.call(value, 'column')) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\nfunction point(point) {\n if (!point || typeof point !== 'object') {\n point = {}\n }\n\n return index(point.line) + ':' + index(point.column)\n}\n\nfunction position(pos) {\n if (!pos || typeof pos !== 'object') {\n pos = {}\n }\n\n return point(pos.start) + '-' + point(pos.end)\n}\n\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = own\n","'use strict'\n\n// Counts tabs based on their expanded size, and CR+LF as one character.\n\nfunction sizeChunks(chunks) {\n var index = -1\n var size = 0\n\n while (++index < chunks.length) {\n size += typeof chunks[index] === 'string' ? chunks[index].length : 1\n }\n\n return size\n}\n\nmodule.exports = sizeChunks\n","'use strict'\n\nvar assign = require('../constant/assign.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar shallow = require('./shallow.js')\n\nfunction subtokenize(events) {\n var jumps = {}\n var index = -1\n var event\n var lineIndex\n var otherIndex\n var otherEvent\n var parameters\n var subevents\n var more\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n\n event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n\n if (\n index &&\n event[1].type === 'chunkFlow' &&\n events[index - 1][1].type === 'listItemPrefix'\n ) {\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'lineEndingBlank'\n ) {\n otherIndex += 2\n }\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'content'\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break\n }\n\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1].isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n } // Enter.\n\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n } // Exit.\n else if (event[1]._container || event[1]._movePreviousLineEndings) {\n otherIndex = index\n lineIndex = undefined\n\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n\n if (\n otherEvent[1].type === 'lineEnding' ||\n otherEvent[1].type === 'lineEndingBlank'\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n }\n\n otherEvent[1].type = 'lineEnding'\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = shallow(events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n chunkedSplice(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n\n return !more\n}\n\nfunction subcontent(events, eventIndex) {\n var token = events[eventIndex][1]\n var context = events[eventIndex][2]\n var startPosition = eventIndex - 1\n var startPositions = []\n var tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n var childEvents = tokenizer.events\n var jumps = []\n var gaps = {}\n var stream\n var previous\n var index\n var entered\n var end\n var adjust // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n\n while (token) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== token) {\n // Empty.\n }\n\n startPositions.push(startPosition)\n\n if (!token._tokenizer) {\n stream = context.sliceStream(token)\n\n if (!token.next) {\n stream.push(null)\n }\n\n if (previous) {\n tokenizer.defineSkip(token.start)\n }\n\n if (token.isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n\n tokenizer.write(stream)\n\n if (token.isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n } // Unravel the next token.\n\n previous = token\n token = token.next\n } // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n\n token = previous\n index = childEvents.length\n\n while (index--) {\n // Make sure we’ve at least seen something (final eol is part of the last\n // token).\n if (childEvents[index][0] === 'enter') {\n entered = true\n } else if (\n // Find a void token that includes a break.\n entered &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n add(childEvents.slice(index + 1, end))\n // Help GC.\n token._tokenizer = token.next = undefined\n token = token.previous\n end = index + 1\n }\n }\n\n // Help GC.\n tokenizer.events = token._tokenizer = token.next = undefined // Do head:\n\n add(childEvents.slice(0, end))\n index = -1\n adjust = 0\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n\n return gaps\n\n function add(slice) {\n var start = startPositions.pop()\n jumps.unshift([start, start + slice.length - 1])\n chunkedSplice(events, start, 2, slice)\n }\n}\n\nmodule.exports = subtokenize\n","'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar assign = require('../constant/assign.js')\nvar shallow = require('../util/shallow.js')\n\nvar text = initializeFactory('text')\nvar string = initializeFactory('string')\nvar resolver = {\n resolveAll: createResolver()\n}\n\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n\n function initializeText(effects) {\n var self = this\n var constructs = this.parser.constructs[field]\n var text = effects.attempt(constructs, start, notText)\n return start\n\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('data')\n effects.consume(code)\n return data\n }\n\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n\n function atBreak(code) {\n var list = constructs[code]\n var index = -1\n\n if (code === null) {\n return true\n }\n\n if (list) {\n while (++index < list.length) {\n if (\n !list[index].previous ||\n list[index].previous.call(self, self.previous)\n ) {\n return true\n }\n }\n }\n }\n }\n}\n\nfunction createResolver(extraResolver) {\n return resolveAllText\n\n function resolveAllText(events, context) {\n var index = -1\n var enter // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events\n }\n} // A rather ugly set of instructions which again looks at chunks in the input\n// stream.\n// The reason to do this here is that it is *much* faster to parse in reverse.\n// And that we can’t hook into `null` to split the line suffix before an EOF.\n// To do: figure out if we can make this into a clean utility, or even in core.\n// As it will be useful for GFMs literal autolink extension (and maybe even\n// tables?)\n\nfunction resolveAllLineSuffixes(events, context) {\n var eventIndex = -1\n var chunks\n var data\n var chunk\n var index\n var bufferIndex\n var size\n var tabs\n var token\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n data = events[eventIndex - 1][1]\n chunks = context.sliceStream(data)\n index = chunks.length\n bufferIndex = -1\n size = 0\n tabs = undefined\n\n while (index--) {\n chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n\n if (bufferIndex) break\n bufferIndex = -1\n } // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1);\n else {\n // Replacement character, exit.\n index++\n break\n }\n }\n\n if (size) {\n token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: shallow(data.end)\n }\n data.end = shallow(token.start)\n\n if (data.start.offset === data.end.offset) {\n assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n\n eventIndex++\n }\n }\n\n return events\n}\n\nexports.resolver = resolver\nexports.string = string\nexports.text = text\n","'use strict'\n\nvar hasOwnProperty = require('../constant/has-own-property.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar miniflat = require('./miniflat.js')\n\nfunction combineExtensions(extensions) {\n var all = {}\n var index = -1\n\n while (++index < extensions.length) {\n extension(all, extensions[index])\n }\n\n return all\n}\n\nfunction extension(all, extension) {\n var hook\n var left\n var right\n var code\n\n for (hook in extension) {\n left = hasOwnProperty.call(all, hook) ? all[hook] : (all[hook] = {})\n right = extension[hook]\n\n for (code in right) {\n left[code] = constructs(\n miniflat(right[code]),\n hasOwnProperty.call(left, code) ? left[code] : []\n )\n }\n }\n}\n\nfunction constructs(list, existing) {\n var index = -1\n var before = []\n\n while (++index < list.length) {\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n chunkedSplice(existing, 0, 0, before)\n return existing\n}\n\nmodule.exports = combineExtensions\n","'use strict'\n\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar unicodePunctuation = require('../character/unicode-punctuation.js')\nvar unicodeWhitespace = require('../character/unicode-whitespace.js')\n\n// Classify whether a character is unicode whitespace, unicode punctuation, or\n// anything else.\n// Used for attention (emphasis, strong), whose sequences can open or close\n// based on the class of surrounding characters.\nfunction classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n\nmodule.exports = classifyCharacter\n","'use strict'\n\n/* eslint-env browser */\n\nvar el\n\nvar semicolon = 59 // ';'\n\nmodule.exports = decodeEntity\n\nfunction decodeEntity(characters) {\n var entity = '&' + characters + ';'\n var char\n\n el = el || document.createElement('i')\n el.innerHTML = entity\n char = el.textContent\n\n // Some entities do not require the closing semicolon (`¬` - for instance),\n // which leads to situations where parsing the assumed entity of ¬it; will\n // result in the string `¬it;`. When we encounter a trailing semicolon after\n // parsing and the entity to decode was not a semicolon (`;`), we can\n // assume that the matching was incomplete\n if (char.charCodeAt(char.length - 1) === semicolon && characters !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the entity was not valid\n return char === entity ? false : char\n}\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiDigit = regexCheck(/\\d/)\n\nmodule.exports = asciiDigit\n","'use strict'\n\nvar asciiControl = require('../character/ascii-control.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\n// eslint-disable-next-line max-params\nfunction destinationFactory(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n var limit = max || Infinity\n var balance = 0\n return start\n\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return destinationEnclosedBefore\n }\n\n if (asciiControl(code) || code === 41) {\n return nok(code)\n }\n\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationRaw(code)\n }\n\n function destinationEnclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationEnclosed(code)\n }\n\n function destinationEnclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return destinationEnclosedBefore(code)\n }\n\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n }\n\n function destinationEnclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return destinationEnclosed\n }\n\n return destinationEnclosed(code)\n }\n\n function destinationRaw(code) {\n if (code === 40) {\n if (++balance > limit) return nok(code)\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === 41) {\n if (!balance--) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n if (balance) return nok(code)\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n if (asciiControl(code)) return nok(code)\n effects.consume(code)\n return code === 92 ? destinationRawEscape : destinationRaw\n }\n\n function destinationRawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return destinationRaw\n }\n\n return destinationRaw(code)\n }\n}\n\nmodule.exports = destinationFactory\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\n\n// eslint-disable-next-line max-params\nfunction labelFactory(effects, ok, nok, type, markerType, stringType) {\n var self = this\n var size = 0\n var data\n return start\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n\n function atBreak(code) {\n if (\n code === null ||\n code === 91 ||\n (code === 93 && !data) ||\n /* c8 ignore next */\n (code === 94 &&\n /* c8 ignore next */\n !size &&\n /* c8 ignore next */\n '_hiddenFootnoteSupport' in self.parser.constructs) ||\n size > 999\n ) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return label(code)\n }\n\n function label(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n\n effects.consume(code)\n data = data || !markdownSpace(code)\n return code === 92 ? labelEscape : label\n }\n\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return label\n }\n\n return label(code)\n }\n}\n\nmodule.exports = labelFactory\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nfunction whitespaceFactory(effects, ok) {\n var seen\n return start\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n\n return ok(code)\n }\n}\n\nmodule.exports = whitespaceFactory\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('./factory-space.js')\n\nfunction titleFactory(effects, ok, nok, type, markerType, stringType) {\n var marker\n return start\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return atFirstTitleBreak\n }\n\n function atFirstTitleBreak(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n return atTitleBreak(code)\n }\n\n function atTitleBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return atFirstTitleBreak(marker)\n }\n\n if (code === null) {\n return nok(code)\n } // Note: blank lines can’t exist in content.\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atTitleBreak, 'linePrefix')\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return title(code)\n }\n\n function title(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atTitleBreak(code)\n }\n\n effects.consume(code)\n return code === 92 ? titleEscape : title\n }\n\n function titleEscape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return title\n }\n\n return title(code)\n }\n}\n\nmodule.exports = titleFactory\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n var size = 0\n var marker\n return start\n\n function start(code) {\n effects.enter('thematicBreak')\n marker = code\n return atBreak(code)\n }\n\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n return nok(code)\n }\n\n effects.exit('thematicBreak')\n return ok(code)\n }\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n\n effects.exit('thematicBreakSequence')\n return atBreak(code)\n }\n}\n\nmodule.exports = thematicBreak\n","'use strict'\n\nmodule.exports = visitParents\n\nvar convert = require('unist-util-is/convert')\nvar color = require('./color')\n\nvar CONTINUE = true\nvar SKIP = 'skip'\nvar EXIT = false\n\nvisitParents.CONTINUE = CONTINUE\nvisitParents.SKIP = SKIP\nvisitParents.EXIT = EXIT\n\nfunction visitParents(tree, test, visitor, reverse) {\n var step\n var is\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n visitor = test\n test = null\n }\n\n is = convert(test)\n step = reverse ? -1 : 1\n\n factory(tree, null, [])()\n\n function factory(node, index, parents) {\n var value = typeof node === 'object' && node !== null ? node : {}\n var name\n\n if (typeof value.type === 'string') {\n name =\n typeof value.tagName === 'string'\n ? value.tagName\n : typeof value.name === 'string'\n ? value.name\n : undefined\n\n visit.displayName =\n 'node (' + color(value.type + (name ? '<' + name + '>' : '')) + ')'\n }\n\n return visit\n\n function visit() {\n var grandparents = parents.concat(node)\n var result = []\n var subresult\n var offset\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if (node.children && result[0] !== SKIP) {\n offset = (reverse ? node.children.length : -1) + step\n\n while (offset > -1 && offset < node.children.length) {\n subresult = factory(node.children[offset], offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n\n return result\n }\n }\n}\n\nfunction toResult(value) {\n if (value !== null && typeof value === 'object' && 'length' in value) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return [value]\n}\n","'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n if (test == null) {\n return ok\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n if (typeof test === 'object') {\n return 'length' in test ? anyFactory(test) : allFactory(test)\n }\n\n if (typeof test === 'function') {\n return test\n }\n\n throw new Error('Expected function, string, or object as test')\n}\n\n// Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\nfunction allFactory(test) {\n return all\n\n function all(node) {\n var key\n\n for (key in test) {\n if (node[key] !== test[key]) return false\n }\n\n return true\n }\n}\n\nfunction anyFactory(tests) {\n var checks = []\n var index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return any\n\n function any() {\n var index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, arguments)) {\n return true\n }\n }\n\n return false\n }\n}\n\n// Utility to convert a string into a function which checks a given node’s type\n// for said string.\nfunction typeFactory(test) {\n return type\n\n function type(node) {\n return Boolean(node && node.type === test)\n }\n}\n\n// Utility to return true.\nfunction ok() {\n return true\n}\n","'use strict'\n\nvar start = factory('start')\nvar end = factory('end')\n\nmodule.exports = position\n\nposition.start = start\nposition.end = end\n\nfunction position(node) {\n return {start: start(node), end: end(node)}\n}\n\nfunction factory(type) {\n point.displayName = type\n\n return point\n\n function point(node) {\n var point = (node && node.position && node.position[type]) || {}\n\n return {\n line: point.line || null,\n column: point.column || null,\n offset: isNaN(point.offset) ? null : point.offset\n }\n }\n}\n","'use strict'\n\nmodule.exports = one\n\nvar u = require('unist-builder')\nvar all = require('./all')\n\nvar own = {}.hasOwnProperty\n\n// Transform an unknown node.\nfunction unknown(h, node) {\n if (text(node)) {\n return h.augment(node, u('text', node.value))\n }\n\n return h(node, 'div', all(h, node))\n}\n\n// Visit a node.\nfunction one(h, node, parent) {\n var type = node && node.type\n var fn\n\n // Fail on non-nodes.\n if (!type) {\n throw new Error('Expected node, got `' + node + '`')\n }\n\n if (own.call(h.handlers, type)) {\n fn = h.handlers[type]\n } else if (h.passThrough && h.passThrough.indexOf(type) > -1) {\n fn = returnNode\n } else {\n fn = h.unknownHandler\n }\n\n return (typeof fn === 'function' ? fn : unknown)(h, node, parent)\n}\n\n// Check if the node should be renderered as a text node.\nfunction text(node) {\n var data = node.data || {}\n\n if (\n own.call(data, 'hName') ||\n own.call(data, 'hProperties') ||\n own.call(data, 'hChildren')\n ) {\n return false\n }\n\n return 'value' in node\n}\n\nfunction returnNode(h, node) {\n var clone\n\n if (node.children) {\n clone = Object.assign({}, node)\n clone.children = all(h, node)\n return clone\n }\n\n return node\n}\n","'use strict'\n\nmodule.exports = thematicBreak\n\nfunction thematicBreak(h, node) {\n return h(node, 'hr')\n}\n","'use strict'\n\nmodule.exports = list\n\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction list(h, node) {\n var props = {}\n var name = node.ordered ? 'ol' : 'ul'\n var items\n var index = -1\n var length\n\n if (typeof node.start === 'number' && node.start !== 1) {\n props.start = node.start\n }\n\n items = all(h, node)\n length = items.length\n\n // Like GitHub, add a class for custom styling.\n while (++index < length) {\n if (\n items[index].properties.className &&\n items[index].properties.className.indexOf('task-list-item') !== -1\n ) {\n props.className = ['contains-task-list']\n break\n }\n }\n\n return h(node, name, props, wrap(items, true))\n}\n","'use strict'\n\nmodule.exports = footnoteReference\n\nvar u = require('unist-builder')\n\nfunction footnoteReference(h, node) {\n var footnoteOrder = h.footnoteOrder\n var identifier = String(node.identifier)\n\n if (footnoteOrder.indexOf(identifier) === -1) {\n footnoteOrder.push(identifier)\n }\n\n return h(node.position, 'sup', {id: 'fnref-' + identifier}, [\n h(node, 'a', {href: '#fn-' + identifier, className: ['footnote-ref']}, [\n u('text', node.label || identifier)\n ])\n ])\n}\n","'use strict'\n\nmodule.exports = revert\n\nvar u = require('unist-builder')\nvar all = require('./all')\n\n// Return the content of a reference without definition as Markdown.\nfunction revert(h, node) {\n var subtype = node.referenceType\n var suffix = ']'\n var contents\n var head\n var tail\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return u('text', '![' + node.alt + suffix)\n }\n\n contents = all(h, node)\n head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift(u('text', '['))\n }\n\n tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push(u('text', suffix))\n }\n\n return contents\n}\n","'use strict'\n\nvar xtend = require('xtend')\nvar Schema = require('./schema')\n\nmodule.exports = merge\n\nfunction merge(definitions) {\n var length = definitions.length\n var property = []\n var normal = []\n var index = -1\n var info\n var space\n\n while (++index < length) {\n info = definitions[index]\n property.push(info.property)\n normal.push(info.normal)\n space = info.space\n }\n\n return new Schema(\n xtend.apply(null, property),\n xtend.apply(null, normal),\n space\n )\n}\n","'use strict'\n\nmodule.exports = Schema\n\nvar proto = Schema.prototype\n\nproto.space = null\nproto.normal = {}\nproto.property = {}\n\nfunction Schema(property, normal, space) {\n this.property = property\n this.normal = normal\n\n if (space) {\n this.space = space\n }\n}\n","'use strict'\n\nvar create = require('./util/create')\n\nmodule.exports = create({\n space: 'xlink',\n transform: xlinkTransform,\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n }\n})\n\nfunction xlinkTransform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase()\n}\n","'use strict'\n\nmodule.exports = normalize\n\nfunction normalize(value) {\n return value.toLowerCase()\n}\n","'use strict'\n\nvar Info = require('./info')\nvar types = require('./types')\n\nmodule.exports = DefinedInfo\n\nDefinedInfo.prototype = new Info()\nDefinedInfo.prototype.defined = true\n\nvar checks = [\n 'boolean',\n 'booleanish',\n 'overloadedBoolean',\n 'number',\n 'commaSeparated',\n 'spaceSeparated',\n 'commaOrSpaceSeparated'\n]\nvar checksLength = checks.length\n\nfunction DefinedInfo(property, attribute, mask, space) {\n var index = -1\n var check\n\n mark(this, 'space', space)\n\n Info.call(this, property, attribute)\n\n while (++index < checksLength) {\n check = checks[index]\n mark(this, check, (mask & types[check]) === types[check])\n }\n}\n\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","'use strict'\n\nmodule.exports = Info\n\nvar proto = Info.prototype\n\nproto.space = null\nproto.attribute = null\nproto.property = null\nproto.boolean = false\nproto.booleanish = false\nproto.overloadedBoolean = false\nproto.number = false\nproto.commaSeparated = false\nproto.spaceSeparated = false\nproto.commaOrSpaceSeparated = false\nproto.mustUseProperty = false\nproto.defined = false\n\nfunction Info(property, attribute) {\n this.property = property\n this.attribute = attribute\n}\n","'use strict'\n\nvar create = require('./util/create')\n\nmodule.exports = create({\n space: 'xml',\n transform: xmlTransform,\n properties: {\n xmlLang: null,\n xmlBase: null,\n xmlSpace: null\n }\n})\n\nfunction xmlTransform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase()\n}\n","'use strict'\n\nvar create = require('./util/create')\nvar caseInsensitiveTransform = require('./util/case-insensitive-transform')\n\nmodule.exports = create({\n space: 'xmlns',\n attributes: {\n xmlnsxlink: 'xmlns:xlink'\n },\n transform: caseInsensitiveTransform,\n properties: {\n xmlns: null,\n xmlnsXLink: null\n }\n})\n","'use strict'\n\nvar caseSensitiveTransform = require('./case-sensitive-transform')\n\nmodule.exports = caseInsensitiveTransform\n\nfunction caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","'use strict'\n\nmodule.exports = caseSensitiveTransform\n\nfunction caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\n\nvar booleanish = types.booleanish\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\n\nmodule.exports = create({\n transform: ariaTransform,\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n }\n})\n\nfunction ariaTransform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n}\n","module.exports = phrasing\n\nfunction phrasing(parent, context, safeOptions) {\n var children = parent.children || []\n var results = []\n var index = -1\n var before = safeOptions.before\n var after\n var handle\n var child\n\n while (++index < children.length) {\n child = children[index]\n\n if (index + 1 < children.length) {\n handle = context.handle.handlers[children[index + 1].type]\n if (handle && handle.peek) handle = handle.peek\n after = handle\n ? handle(children[index + 1], parent, context, {\n before: '',\n after: ''\n }).charAt(0)\n : ''\n } else {\n after = safeOptions.after\n }\n\n // In some cases, html (text) can be found in phrasing right after an eol.\n // When we’d serialize that, in most cases that would be seen as html\n // (flow).\n // As we can’t escape or so to prevent it from happening, we take a somewhat\n // reasonable approach: replace that eol with a space.\n // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n if (\n results.length > 0 &&\n (before === '\\r' || before === '\\n') &&\n child.type === 'html'\n ) {\n results[results.length - 1] = results[results.length - 1].replace(\n /(\\r?\\n|\\r)$/,\n ' '\n )\n before = ' '\n }\n\n results.push(\n context.handle(child, parent, context, {\n before: before,\n after: after\n })\n )\n\n before = results[results.length - 1].slice(-1)\n }\n\n return results.join('')\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (acequire, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _acequire = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar acequire = function(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n if (packagedModule == undefined && acequire.original)\n return acequire.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative acequires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, r2;\n if ( typeof(str) == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined)\n match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\n\n };\n if(target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n if(function() { // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l+2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\n }\n }()) {//IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function(start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\n var removed = this.slice(pos, pos+removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length; \n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // case B\n for (i = tailCount; i--; ) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos+i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result, i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\")\n throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {\n }\n }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\n Object.freeze(function () {});\n} catch (exception) {\n Object.freeze = (function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n\n}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n}\n\nfunction toInteger(n) {\n n = +n;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./regexp\");\nacequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length)\n if (sheets[index++].owningElement.id === id) return true;\n } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id) return true;\n }\n\n return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc))\n return null;\n \n var style;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id)\n style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n exports.getDocumentHead(doc).appendChild(style);\n }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n\n exports.getDocumentHead(doc).appendChild(link);\n }\n};\n\nexports.getInnerWidth = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n element.clientWidth\n );\n};\n\nexports.getInnerHeight = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n element.clientHeight\n );\n};\n\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n return;\n}\n\nif (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function() {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function() {\n return window.pageXOffset;\n };\n}\nelse {\n exports.getPageScrollTop = function() {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function() {\n return document.body.scrollLeft;\n };\n}\n\nif (window.getComputedStyle)\n exports.computedStyle = function(element, style) {\n if (style)\n return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };\nelse\n exports.computedStyle = function(element, style) {\n if (style)\n return element.currentStyle[style];\n return element.currentStyle;\n };\nexports.setInnerHtml = function(el, innerHtml) {\n var element = el.cloneNode(false);//document.createElement(\"div\");\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n exports.setInnerText = function(el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.textContent;\n };\n}\nelse {\n exports.setInnerText = function(el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.innerText;\n };\n}\n\nexports.getParentWindow = function(document) {\n return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./fixoldbrowsers\");\n\nvar oop = acequire(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nif (typeof navigator != \"object\")\n return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keys = acequire(\"./keys\");\nvar useragent = acequire(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n if (elem.attachEvent) {\n var wrapper = function() {\n callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n};\n\nexports.removeListener = function(elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n else\n e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n else\n e.returnValue = false;\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n if (e.preventDefault) {\n return e.button;\n }\n else {\n return {1:0, 2:2, 4:1}[e.button];\n }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n \n return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n\n var touchObj = touches[0];\n\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n\n callback(e);\n });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n });\n } else {\n exports.addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n });\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE)\n exports.addListener(el, \"dblclick\", onDblclick);\n });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n ? function(e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n }\n : function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n });\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i<l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else \n copy[i] = array[i];\n }\n return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n \n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\nexports.arrayToMap = function(arr) {\n var map = {};\n for (var i=0; i<arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n\n};\n\nexports.createMap = function(props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function(array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\n\nexports.escapeRegExp = function(str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n var matches = [];\n\n string.replace(regExp, function(str) {\n matches.push({\n offset: arguments[arguments.length-2],\n length: str.length\n });\n });\n\n return matches;\n};\nexports.deferredCall = function(fcn) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var deferred = function(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function() {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function() {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n \n deferred.isPending = function() {\n return timer;\n };\n\n return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var _self = function(timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function(timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n\n _self.call = function() {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function() {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function() {\n return timer;\n };\n\n return _self;\n};\n});\n\nace.define(\"ace/keyboard/textinput_ios\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar KEYS = acequire(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInput = function(parentNode, host) {\n var self = this;\n var text = dom.createElement(\"textarea\");\n text.className = useragent.isIOS ? \"ace_text-input ace_text-input-ios\" : \"ace_text-input\";\n\n if (useragent.isTouchPad)\n text.setAttribute(\"x-palm-disable-auto-cap\", true);\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\n aaaa a\\n\";\n\n var copied = false;\n var cut = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n\n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n text.style.position = \"fixed\";\n text.focus();\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n\n if (inputHandler) {\n selectionStart = 0;\n selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = 4;\n var selectionEnd = 5;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e) {}\n\n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function(e) {\n if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n\n var sendText = function(data) {\n if (text.selectionStart === 4 && text.selectionEnd === 5) {\n return;\n }\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.substr(0) && text.selectionStart === 4) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else if (!copied) {\n if (data.substring(0, 9) == PLACEHOLDER && data.length > PLACEHOLDER.length)\n data = data.substr(9);\n else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4))\n data = data.substr(4, data.length - PLACEHOLDER.length + 1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data == PLACEHOLDER.charAt(0)) {\n } else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n\n if (data)\n host.onTextInput(data);\n }\n if (copied) {\n copied = false;\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function(e) {\n doCopy(e, true);\n };\n\n var onCopy = function(e) {\n doCopy(e, false);\n };\n\n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n\n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0: host.onCommandKey(null, 0, KEYS.up); break;\n case 1: host.onCommandKey(null, 0, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.option, KEYS.left); break;\n case 4: host.onCommandKey(null, 0, KEYS.left); break;\n case 5: host.onCommandKey(null, 0, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, 0, KEYS.end); break;\n case 9: host.onCommandKey(null, 0, KEYS.down); break;\n }\n } else {\n switch (selectionEnd) {\n case 6: host.onCommandKey(null, MODS.shift, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, MODS.shift, KEYS.end); break;\n case 9: host.onCommandKey(null, MODS.shift, KEYS.down); break;\n }\n switch (selectionStart) {\n case 0: host.onCommandKey(null, MODS.shift, KEYS.up); break;\n case 1: host.onCommandKey(null, MODS.shift, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left); break;\n case 3: host.onCommandKey(null, MODS.shift, KEYS.left); break;\n }\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/keyboard/textinput_ios\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInputIOS = acequire(\"./textinput_ios\").TextInput;\nvar TextInput = function(parentNode, host) {\n if (useragent.isIOS)\n return TextInputIOS.call(this, parentNode, host);\n\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\u2028\\u2028\";\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function(e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function() {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function() {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function() {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n \n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch(e){}\n \n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n host.onTextInput(data);\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n });\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n \n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function() {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n \n \n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 250; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n this.onTouchMove = function(ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n dom.setInnerText(this.getElement(), text);\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar event = acequire(\"../lib/event\");\nvar Tooltip = acequire(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal)\n editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n \n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i=0; i<listeners.length; i++)\n listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n var _self = this;\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n callback.apply(null, arguments);\n });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = {_disabled_: {}};\n \n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) \n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n \n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar oop = acequire(\"./oop\");\nvar EventEmitter = acequire(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n setOptions: function(optList) {\n Object.keys(optList).forEach(function(key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function(optionNames) {\n var result = {};\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function(key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function(name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function(name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\n\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n this.$defaultOptions = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n this.defineOptions = function(obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n\n Object.keys(options).forEach(function(key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = {forwardTo: opt};\n\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n\n return this;\n };\n\n this.resetOptions = function(obj) {\n Object.keys(obj.$options).forEach(function(key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function(path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function(path, optionHash) {\n Object.keys(optionHash).forEach(function(key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n \n this.warn = warn;\n this.reportError = reportError;\n \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(acequire, exports, module) {\n\"no use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar net = acequire(\"./lib/net\");\nvar AppConfig = acequire(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n};\n\nexports.get = function(key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n return options[key];\n};\n\nexports.set = function(key, value) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n\n options[key] = value;\n};\n\nexports.all = function() {\n return lang.copyObject(options);\n};\nexports.moduleUrl = function(name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n acequire([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = acequire(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\nvar config = acequire(\"../config\");\n\nvar MouseHandler = function(editor) {\n var _self = this;\n this.editor = editor;\n\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function(e){\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n};\n\n(function() {\n this.onMouseEvent = function(name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function(name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function(name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n \n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function(state) {\n this.state = state;\n };\n\n this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$keepTextAreaAtCursor = null;\n\n var self = this;\n var onMouseMove = function(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function(e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n\n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function() {onCaptureEnd(ev);});\n }\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function() {\n var stop = function(e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {initialValue: 2},\n dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n dragEnabled: {initialValue: true},\n focusTimout: {initialValue: 0},\n tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction FoldHandler(editor) {\n\n editor.on(\"click\", function(e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n\n e.stop();\n }\n });\n\n editor.on(\"gutterclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n\n editor.on(\"gutterdblclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n }\n }\n e.stop();\n }\n });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar event = acequire(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n this.$editor = editor;\n this.$data = {editor: editor};\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n this.setDefaultHandler = function(kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function(kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function(kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function(kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function() {\n return this.$handlers[this.$handlers.length - 1];\n };\n \n this.getStatusText = function() {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function(h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e\n );\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 && \n toExecute.passEvent != true && toExecute.command.passEvent != true\n ) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n \n if (!success && hashId == -1) {\n toExecute = {command: \"insertstring\"};\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n \n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n \n return success;\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function(text) {\n this.$callKeyboardHandlers(-1, text);\n };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\n\tif (hi == 0) {\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\n\treturn ON;\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = [];\n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar bidiUtil = acequire(\"./lib/bidiutil\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n\n this.wrapIndent = 0;\n this.isLastRow = (docRow === this.session.getLength() - 1);\n this.line = this.session.getLine(docRow);\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n };\n\n this.updateBidiMap = function() {\n var textCharTypes = [], endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (!this.seenBidi)\n return;\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function() {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar;\n };\n\n this.setTextDir = function(isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (col === 0 && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0)\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.wrapIndent * this.charWidths[bidiUtil.L];\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, offset = this.wrapIndent * this.charWidths[bidiUtil.L], selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n return selections;\n };\n this.offsetToCol = function(posX) {\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n var self = this;\n this.lead.on(\"change\", function(e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.selectionAnchor.on(\"change\", function() {\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return (this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n ));\n };\n this.isMultiLine = function() {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n else\n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.shiftSelection = function(columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n\n var isBackwards = this.isBackwards();\n\n if (!isBackwards || anchor.column !== 0)\n this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function() {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.isEmpty())\n return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n }\n else {\n return Range.fromPoints(anchor, lead);\n }\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n if (this.getRange().isEmpty())\n this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var match, index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0)\n docPos.row++;\n }\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start,end);\n } catch(e) {\n return Range.fromPoints(start,start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else\n data = data[0];\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar config = acequire(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n\n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\nvar lang = acequire(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n\nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n});\n\nfunction addUnicodePackage (pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack)\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = acequire(\"../unicode\");\nvar lang = acequire(\"../lib/lang\");\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n );\n\n this.nonTokenRe = new RegExp(\"^(?:[^\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n );\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\")\n state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar applyDelta = acequire(\"./apply_delta\").applyDelta;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i<deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function(deltas) {\n for (var i=deltas.length-1; i>=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000)\n this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row; \n var column = delta.start.column;\n var from = 0, to = 0;\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while(true);\n };\n this.revertDelta = function(delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: lines[l-1].length};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar Range = acequire(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n if (delta.action == \"insert\"){\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow)\n continue;\n if (r.start.row > startRow)\n break;\n\n if (r.start.row == startRow && r.start.column >= start.column ) {\n if (r.start.column == start.column && this.$insertRight) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) { \n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar RangeList = acequire(\"../range_list\").RangeList;\nvar oop = acequire(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n\n if (!this.range.containsRange(fold))\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n\n if (cmp == 0)\n return afterStart.addSubFold(fold);\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterEnd = this.subFolds[j];\n\n if (cmp == 0)\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar FoldLine = acequire(\"./fold_line\").FoldLine;\nvar Fold = acequire(\"./fold\").Fold;\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n return fold;\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || \n startRow == endRow && startColumn <= endColumn - 2))\n throw new Error(\"The range has to be at least 2 characters width\");\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n fold.collapseChildren = depth;\n } catch(e) {}\n }\n }\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column-1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar BidiHandler = acequire(\"./bidihandler\").BidiHandler;\nvar config = acequire(\"./config\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Selection = acequire(\"./selection\").Selection;\nvar TextMode = acequire(\"./mode/text\").Mode;\nvar Range = acequire(\"./range\").Range;\nvar Document = acequire(\"./document\").Document;\nvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n reset: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i<rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function() {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function(row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function(row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function(range, clazz, type, inFront) {\n var id = this.$markerId++;\n\n var marker = {\n range : range,\n type : type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz : clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n this.addDynamicMarker = function(marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n this.removeMarker = function(markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n if (marker) {\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n this.getMarkers = function(inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function(re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function(startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function(annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function() {\n return this.$annotations || [];\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function(row, column) {\n var line = this.getLine(row);\n\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.addEventListener(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function(foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange =\n this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n lastDeltaIsInsert = false;\n }\n }\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\")\n .replace(/12/g, function() {\n len -= 1;\n })\n .replace(/2/g, function() {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n if (this.lineWidgets)\n var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: { initialValue: true },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; }\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar useragent = acequire(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\nvar config = acequire(\"../config\");\nvar Range = acequire(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n exec: function(editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar Search = acequire(\"./search\").Search;\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = acequire(\"./commands/default_commands\").commands;\nvar config = acequire(\"./config\");\nvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n function last(a) {return a[a.length - 1];}\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n this.on(\"change\", function() {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n\n this.on(\"changeSelection\", function() {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\n this.$blockScrolling++;\n };\n\n this.endOperation = function(e) {\n if (this.curOp) {\n if (e && e.returnValue === false)\n return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0)\n this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n \n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n\n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function() {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n if (range)\n session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<'){\n depth++;\n } else if (prevToken.value === '</'){\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (range && !session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.onFocus = function(e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function(e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n };\n this.onDocumentChange = function(delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n\n if (!this.$blockScrolling) {\n config.warn(\"Automatically scrolling cursor into view after selection change\",\n \"this will be disabled in the next version\",\n \"set editor.$blockScrolling = Infinity to disable this message\"\n );\n this.renderer.scrollCursorIntoView();\n }\n\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\n var highlight;\n if (this.$highlightActiveLine) {\n if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\n highlight = this.getCursorPosition();\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0),\n Math.min(endOuter, lineCols));\n if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n return;\n\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n\n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n this._signal(\"copy\", text);\n return text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n this.session.remove(range);\n \n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function(text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n this.$blockScrolling++;\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n this.$blockScrolling--;\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n \n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1\n );\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) \n var tag = token.value;\n else\n return;\n\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2\n );\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n }\n else if (prevToken.value === '</') {\n depth[tag]--;\n }\n \n if (depth[tag] === 0)\n found = true;\n }\n }\n } while (prevToken && !found);\n }\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.gotoLine = function(lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({row: lineNumber - 1, column: column || 0});\n\n this.$blockScrolling += 1;\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n this.$blockScrolling -= 1;\n\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function(row, column) {\n this.selection.moveTo(row, column);\n };\n this.navigateUp = function(times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n this.navigateDown = function(times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n this.navigateLeft = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n this.navigateRight = function(times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n this.navigateLineStart = function() {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function() {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function() {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function() {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function() {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function() {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function(replacement, options) {\n if (options)\n this.$search.set(options);\n\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n if (range !== null) {\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n }\n\n return replaced;\n };\n this.replaceAll = function(replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n\n this.$blockScrolling += 1;\n\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session) {\n this.session.destroy();\n }\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.keybindingId; },\n handlesSet: true\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.reset();\n};\n\n(function() {\n this.execute = function(options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n if (options.merge && this.hasUndo()){\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n this.dirtyCounter++;\n };\n this.undo = function(dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n this.redo = function(dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange =\n this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n return redoSelectionRange;\n };\n this.reset = function() {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n this.hasUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.hasRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.markClean = function() {\n this.dirtyCounter = 0;\n };\n this.isClean = function() {\n return this.dirtyCounter === 0;\n };\n this.$serializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n this.$deserializeDeltas = function(deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n \n function $serializeDelta(delta){\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n \n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n \n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\n \n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n \n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n this.$cells = [];\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function(annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = {text: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n } else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function(config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n break;\n }\n\n cell = this.$cells[++index];\n if (!cell) {\n cell = {element: null, textNode: null, foldWidget: null};\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (cell.element.className != className)\n cell.element.className = className;\n\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height)\n cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (cell.foldWidget.className != className)\n cell.foldWidget.className = className;\n\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height)\n cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n \n var text = lastLineNumber = gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber;\n if (text !== cell.textNode.data)\n cell.textNode.data = text;\n\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineNumber = session.getLength() + firstLineNumber;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineNumber, config)\n : lastLineNumber.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return \"\";},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar dom = acequire(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row)\n ? this.session.$bidiHandler.getPosLeft(range.start.column)\n : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var clazzModified = null;\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle, \"'></div>\"\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n var width = range.end.column * config.characterWidth;\n height = config.lineHeight;\n top = this.$getTop(range.end.row, config);\n stringBuilder.push(\n \"<div class='\", clazz, \" ace_br12' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n stringBuilder.push(\n \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\n \"height:\", height, \"px;\",\n \"right:0;\",\n \"top:\", top, \"px;\",\n \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"width:\", width, \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"width:\", selection.width + (extraLength || 0), \"px;\",\n \"top:\", top, \"px;\",\n \"left:\", padding + selection.left, \"px;\", extraStyle || \"\", \"'></div>\"\n );\n });\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n stringBuilder.push(\n \"<div class='\", clazz, \"' style='\",\n \"height:\", height, \"px;\",\n \"top:\", top, \"px;\",\n \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n\n this.$updateEolChar = function() {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n ? this.EOL_CHAR_LF\n : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\n + lang.stringRepeat(this.TAB_CHAR, i)\n + \"</span>\");\n } else {\n tabStr.push(lang.stringRepeat(\" \", i));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else{\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n\n this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\n this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(\n html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n );\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n el.removeChild(el.firstChild);\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n el.removeChild(el.lastChild);\n\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild)\n el.insertBefore(fragment, el.firstChild);\n else\n el.appendChild(fragment);\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n el.appendChild(fragment);\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = this.element.ownerDocument.createDocumentFragment();\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var container = dom.createElement(\"div\");\n\n var html = [];\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n container.innerHTML = html.join(\"\");\n if (this.$useLineGroups()) {\n container.className = 'ace_line_group';\n fragment.appendChild(container);\n container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n } else {\n while(container.firstChild)\n fragment.appendChild(container.firstChild);\n }\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var html = [];\n var firstRow = config.firstRow, lastRow = config.lastRow;\n\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > lastRow)\n break;\n\n if (this.$useLineGroups())\n html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\");\n\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups())\n html.push(\"</div>\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n var self = this;\n var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var replaceFunc = function(c, a, b, tabIdx, idx4) {\n if (a) {\n return self.showInvisibles\n ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\n : c;\n } else if (c == \"&\") {\n return \"&\";\n } else if (c == \"<\") {\n return \"<\";\n } else if (c == \">\") {\n return \">\";\n } else if (c == \"\\t\") {\n var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n screenColumn += tabSize - 1;\n return self.$tabStrings[tabSize];\n } else if (c == \"\\u3000\") {\n var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n screenColumn += 1;\n return \"<span class='\" + classToUse + \"' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + space + \"</span>\";\n } else if (b) {\n return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\n } else {\n screenColumn += 1;\n return \"<span class='ace_cjk' style='width:\" +\n (self.config.characterWidth * 2) +\n \"px'>\" + c + \"</span>\";\n }\n };\n\n var output = value.replace(replaceReg, replaceFunc);\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\")\n style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\n }\n else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n return value.substr(cols);\n }\n return value;\n };\n\n this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n if (!onlyContents) {\n stringBuilder.push(\"</div>\",\n \"<div class='ace_line' style='height:\",\n this.config.lineHeight, \"px'>\"\n );\n }\n\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn, token, value\n );\n }\n }\n }\n };\n\n this.$renderSimpleLine = function(stringBuilder, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(stringBuilder, value);\n if (value)\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n }\n };\n this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n\n if (!onlyContents) {\n stringBuilder.push(\n \"<div class='ace_line' style='height:\", \n this.config.lineHeight * (\n this.$useLineGroups() ? 1 :this.session.getRowLength(row)\n ), \"px'>\"\n );\n }\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length)\n this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n else\n this.$renderSimpleLine(stringBuilder, tokens);\n }\n\n if (this.showInvisibles) {\n if (foldLine)\n row = foldLine.end.row;\n\n stringBuilder.push(\n \"<span class='ace_invisible ace_invisible_eol'>\",\n row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n \"</span>\"\n );\n }\n if (!onlyContents)\n stringBuilder.push(\"</div>\");\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode)\n this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n if (isIE8 === undefined)\n isIE8 = !(\"opacity\" in this.element.style);\n\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8\n ? this.$updateVisibility\n : this.$updateOpacity).bind(this);\n};\n\n(function() {\n \n this.$updateVisibility = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n \n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking){\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval){\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !isIE8) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.$updateCursors = (this.$updateOpacity).bind(this);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n return;\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n\n blink();\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n \n if (!this.drawCursor) {\n style.left = pixelPos.left + \"px\";\n style.top = pixelPos.top + \"px\";\n style.width = config.characterWidth + \"px\";\n style.height = config.lineHeight + \"px\";\n } else {\n this.drawCursor(style, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n};\n\n(function() {\n\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (!this.pending && this.changes) {\n this.pending = true;\n var _self = this;\n event.nextFrame(function() {\n _self.pending = false;\n var changes;\n while (changes = _self.changes) {\n _self.changes = 0;\n _self.onRender(changes);\n }\n }, this.window);\n }\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n if (!CHAR_COUNT)\n this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$testFractionalRect = function() {\n var el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(el.style);\n el.style.width = \"0.2px\";\n document.documentElement.appendChild(el);\n var w = el.getBoundingClientRect().width;\n if (w > 0 && w < 1)\n CHAR_COUNT = 50;\n else\n CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\n };\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function() {\n var size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function() {\n self.checkForSizeChanges();\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function() {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try { \n rect = this.$measureNode.getBoundingClientRect();\n } catch(e) {\n rect = {width: 0, height:0 };\n }\n var size = {\n height: rect.height,\n width: rect.width / CHAR_COUNT\n };\n } else {\n var size = {\n height: this.$measureNode.clientHeight,\n width: this.$measureNode.clientWidth / CHAR_COUNT\n };\n }\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar config = acequire(\"./config\");\nvar useragent = acequire(\"./lib/useragent\");\nvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\nvar MarkerLayer = acequire(\"./layer/marker\").Marker;\nvar TextLayer = acequire(\"./layer/text\").Text;\nvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\nvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\nvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\nvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\nvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ntext-indent: -1em;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_text-input-ios {\\\nposition: absolute !important;\\\ntop: -100000px !important;\\\nleft: -100000px !important;\\\n}\\\n\";\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n dom.addCssClass(this.container, \"ace_editor\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n \n this.scrollBarH.element.style.right = \n this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes |= this.CHANGE_FULL;\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function() {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n this.$loop.schedule(this.CHANGE_MARKER);\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updateGutterLineHighlight = function() {\n var pos = this.$cursorLayer.$pixelPos;\n var height = this.layerConfig.lineHeight;\n if (this.session.getUseWrapMode()) {\n var cursor = this.session.selection.getCursor();\n cursor.column = 0;\n pos = this.$cursorLayer.getPixelPosition(cursor, true);\n height *= this.session.getRowLength(cursor.row);\n }\n this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n this.$gutterLineHighlight.style.height = height + \"px\";\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (!this.$keepTextAreaAtCursor)\n return;\n var config = this.layerConfig;\n var posTop = this.$cursorLayer.$pixelPos.top;\n var posLeft = this.$cursorLayer.$pixelPos.left;\n posTop -= config.offset;\n\n var style = this.textarea.style;\n var h = this.lineHeight;\n if (posTop < 0 || posTop > config.height - h) {\n style.top = style.left = \"0\";\n return;\n }\n\n var w = this.characterWidth;\n if (this.$composition) {\n var val = this.textarea.value.replace(/^\\x01+/, \"\");\n w *= (this.session.$getStringScreenWidth(val)[0]+2);\n h += 2;\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth;\n style.height = h + \"px\";\n style.width = w + \"px\";\n style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\");\n\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n this.content.style.marginTop = (-config.offset) + \"px\";\n this.content.style.width = config.width + 2 * this.$padding + \"px\";\n this.content.style.height = config.minHeight + \"px\";\n }\n if (changes & this.CHANGE_H_SCROLL) {\n this.content.style.marginLeft = -this.scrollLeft + \"px\";\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight,\n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(y);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n\n var col = Math.round(offsetX / this.characterWidth);\n\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n\n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(position) {\n if (!this.$composition)\n this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\n\n this.$keepTextAreaAtCursor = true;\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n };\n this.setCompositionText = function(text) {\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container.ownerDocument\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n if (this.scroller.style.cursor != style)\n this.scroller.style.cursor = style;\n };\n this.setMouseCursor = function(cursorStyle) {\n this.scroller.style.cursor = cursorStyle;\n };\n this.destroy = function() {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {this.$gutterLayer.setShowFoldWidgets(show);},\n initialValue: true\n },\n showLineNumbers: {\n set: function(show) {\n this.$gutterLayer.setShowLineNumbers(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n if (!this.$gutterLineHighlight) {\n this.$gutterLineHighlight = dom.createElement(\"div\");\n this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n this.$gutter.appendChild(this.$gutterLineHighlight);\n return;\n }\n\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos)\n this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar net = acequire(\"../lib/net\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\nvar config = acequire(\"../config\");\n\nfunction $workerBlob(workerUrl, mod) {\n var script = mod.src;\"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl, mod) {\n var blob = $workerBlob(workerUrl, mod);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n}\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n if (acequire.nameToUrl && !acequire.toUrl)\n acequire.toUrl = acequire.nameToUrl;\n \n if (config.get(\"packaged\") || !acequire.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl, mod);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod.id,\n classname : classname\n });\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n\n this.$worker = {};\n this.$worker.terminate = function() {};\n this.$worker.postMessage = function(e) {\n _self.messageBuffer.push(e);\n if (main) {\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n };\n this.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = _self.messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n _self.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length)\n processNext();\n });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar oop = acequire(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n \n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n editor.$blockScrolling--;\n };\n editor.$blockScrolling++;\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n editor.$blockScrolling--;\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n editor.$blockScrolling++;\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"splitIntoLines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"alignCursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\nvar RangeList = acequire(\"./range_list\").RangeList;\nvar Range = acequire(\"./range\").Range;\nvar Selection = acequire(\"./selection\").Selection;\nvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar commands = acequire(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = acequire(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = acequire(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n else if(this.ranges[0])\n this.fromOrientedRange(this.ranges[0]);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n if (startRow == endRow) {\n if (isBackwards)\n var start = range.end, end = range.start;\n else\n var start = range.start, end = range.end;\n \n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++)\n rectSel.push(this.getLineRange(i, true));\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n\n rectSel.forEach(this.addRange, this);\n }\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.selectionLead);\n var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n this.$blockScrolling -= 1;\n\n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$blockScrolling += 1;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.$blockScrolling -= 1;\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW, \" \")\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n });\n\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel)\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar Range = acequire(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n \n w.session = this.session;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\nvar dom = acequire(\"../lib/dom\");\nvar Range = acequire(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\n\nvar Editor = acequire(\"./editor\").Editor;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar UndoManager = acequire(\"./undomanager\").UndoManager;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nacequire(\"./worker/worker_client\");\nacequire(\"./keyboard/hash_handler\");\nacequire(\"./placeholder\");\nacequire(\"./multi_select\");\nacequire(\"./mode/folding/fold_mode\");\nacequire(\"./theme/textmate\");\nacequire(\"./ext/error_marker\");\n\nexports.config = acequire(\"./config\");\nexports.acequire = acequire;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.9\";\n});\n (function() {\n ace.acequire([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n \nmodule.exports = window.ace.acequire(\"ace/ace\");","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar editorOptions = ['minLines', 'maxLines', 'readOnly', 'highlightActiveLine', 'tabSize', 'enableBasicAutocompletion', 'enableLiveAutocompletion', 'enableSnippets'];\n\nvar editorEvents = ['onChange', 'onFocus', 'onInput', 'onBlur', 'onCopy', 'onPaste', 'onSelectionChange', 'onCursorChange', 'onScroll', 'handleOptions', 'updateRef'];\n\nexports.editorOptions = editorOptions;\nexports.editorEvents = editorEvents;","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.red = exports.getContrastingColor = exports.isValidHex = exports.toState = exports.simpleCheckForValidColor = undefined;\n\nvar _each = require('lodash/each');\n\nvar _each2 = _interopRequireDefault(_each);\n\nvar _tinycolor = require('tinycolor2');\n\nvar _tinycolor2 = _interopRequireDefault(_tinycolor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar simpleCheckForValidColor = exports.simpleCheckForValidColor = function simpleCheckForValidColor(data) {\n var keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n var checked = 0;\n var passed = 0;\n (0, _each2.default)(keysToCheck, function (letter) {\n if (data[letter]) {\n checked += 1;\n if (!isNaN(data[letter])) {\n passed += 1;\n }\n if (letter === 's' || letter === 'l') {\n var percentPatt = /^\\d+%$/;\n if (percentPatt.test(data[letter])) {\n passed += 1;\n }\n }\n }\n });\n return checked === passed ? data : false;\n};\n\nvar toState = exports.toState = function toState(data, oldHue) {\n var color = data.hex ? (0, _tinycolor2.default)(data.hex) : (0, _tinycolor2.default)(data);\n var hsl = color.toHsl();\n var hsv = color.toHsv();\n var rgb = color.toRgb();\n var hex = color.toHex();\n if (hsl.s === 0) {\n hsl.h = oldHue || 0;\n hsv.h = oldHue || 0;\n }\n var transparent = hex === '000000' && rgb.a === 0;\n\n return {\n hsl: hsl,\n hex: transparent ? 'transparent' : '#' + hex,\n rgb: rgb,\n hsv: hsv,\n oldHue: data.h || oldHue || hsl.h,\n source: data.source\n };\n};\n\nvar isValidHex = exports.isValidHex = function isValidHex(hex) {\n // disable hex4 and hex8\n var lh = String(hex).charAt(0) === '#' ? 1 : 0;\n return hex.length !== 4 + lh && hex.length < 7 + lh && (0, _tinycolor2.default)(hex).isValid();\n};\n\nvar getContrastingColor = exports.getContrastingColor = function getContrastingColor(data) {\n if (!data) {\n return '#fff';\n }\n var col = toState(data);\n if (col.hex === 'transparent') {\n return 'rgba(0,0,0,0.4)';\n }\n var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000' : '#fff';\n};\n\nvar red = exports.red = {\n hsl: { a: 1, h: 0, l: 0.5, s: 1 },\n hex: '#ff0000',\n rgb: { r: 255, g: 0, b: 0, a: 1 },\n hsv: { h: 0, s: 1, v: 1, a: 1 }\n};\n\nexports.default = exports;","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * `ItemListRenderer` helper method for rendering each item in `filteredItems`,\n * with optional support for `noResults` (when filtered items is empty)\n * and `initialContent` (when query is empty).\n */\nexport function renderFilteredItems(props, noResults, initialContent) {\n if (props.query.length === 0 && initialContent !== undefined) {\n return initialContent;\n }\n var items = props.filteredItems.map(props.renderItem).filter(function (item) { return item != null; });\n return items.length > 0 ? items : noResults;\n}\n//# sourceMappingURL=itemListRenderer.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Utils } from \"@blueprintjs/core\";\n/**\n * Utility function for executing the {@link IListItemsProps#itemsEqual} prop to test\n * for equality between two items.\n * @return `true` if the two items are equivalent according to `itemsEqualProp`.\n */\nexport function executeItemsEqual(itemsEqualProp, itemA, itemB) {\n // Use strict equality if:\n // A) Default equality check is necessary because itemsEqualProp is undefined.\n // OR\n // B) Either item is null/undefined. Note that null represents \"no item\", while\n // undefined represents an uncontrolled prop. This strict equality check ensures\n // nothing will ever be considered equivalent to an uncontrolled prop.\n if (itemsEqualProp === undefined || itemA == null || itemB == null) {\n return itemA === itemB;\n }\n if (Utils.isFunction(itemsEqualProp)) {\n // itemsEqualProp is an equality comparator function, so use it\n return itemsEqualProp(itemA, itemB);\n }\n else {\n // itemsEqualProp is a property name, so strictly compare the values of the property.\n return itemA[itemsEqualProp] === itemB[itemsEqualProp];\n }\n}\n//# sourceMappingURL=listItemsProps.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns an instance of a \"Create Item\" object. */\nexport function getCreateNewItem() {\n return { __blueprintCreateNewItemBrand: \"blueprint-create-new-item\" };\n}\n/**\n * Type guard returning `true` if the provided item (e.g. the current\n * `activeItem`) is a \"Create Item\" option.\n */\nexport function isCreateNewItem(item) {\n if (item == null) {\n return false;\n }\n // see if the provided item exactly matches the `ICreateNewItem` object,\n // with no superfluous keys.\n var keys = Object.keys(item);\n if (keys.length !== 1 || keys[0] !== \"__blueprintCreateNewItemBrand\") {\n return false;\n }\n return item.__blueprintCreateNewItemBrand === \"blueprint-create-new-item\";\n}\n/**\n * Returns the type of the the current active item. This will be a no-op unless\n * the `activeItem` is `undefined` or a \"Create Item\" option, in which case\n * `null` will be returned instead.\n */\nexport function getActiveItem(activeItem) {\n return activeItem == null || isCreateNewItem(activeItem) ? null : activeItem;\n}\n//# sourceMappingURL=listItemsUtils.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { CONTEXTMENU_WARN_DECORATOR_NEEDS_REACT_ELEMENT, CONTEXTMENU_WARN_DECORATOR_NO_METHOD, } from \"../../common/errors\";\nimport { getDisplayName, isFunction, safeInvoke } from \"../../common/utils\";\nimport { isDarkTheme } from \"../../common/utils/isDarkTheme\";\nimport * as ContextMenu from \"./contextMenu\";\nexport function ContextMenuTarget(WrappedComponent) {\n var _a;\n if (!isFunction(WrappedComponent.prototype.renderContextMenu)) {\n console.warn(CONTEXTMENU_WARN_DECORATOR_NO_METHOD);\n }\n return _a = /** @class */ (function (_super) {\n __extends(ContextMenuTargetClass, _super);\n function ContextMenuTargetClass() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ContextMenuTargetClass.prototype.render = function () {\n var _this = this;\n var element = _super.prototype.render.call(this);\n if (element == null) {\n // always return `element` in case caller is distinguishing between `null` and `undefined`\n return element;\n }\n if (!React.isValidElement(element)) {\n console.warn(CONTEXTMENU_WARN_DECORATOR_NEEDS_REACT_ELEMENT);\n return element;\n }\n var oldOnContextMenu = element.props.onContextMenu;\n var onContextMenu = function (e) {\n // support nested menus (inner menu target would have called preventDefault())\n if (e.defaultPrevented) {\n return;\n }\n if (isFunction(_this.renderContextMenu)) {\n var menu = _this.renderContextMenu(e);\n if (menu != null) {\n var darkTheme = isDarkTheme(ReactDOM.findDOMNode(_this));\n e.preventDefault();\n ContextMenu.show(menu, { left: e.clientX, top: e.clientY }, _this.onContextMenuClose, darkTheme);\n }\n }\n safeInvoke(oldOnContextMenu, e);\n };\n return React.cloneElement(element, { onContextMenu: onContextMenu });\n };\n return ContextMenuTargetClass;\n }(WrappedComponent)),\n _a.displayName = \"ContextMenuTarget(\" + getDisplayName(WrappedComponent) + \")\",\n _a;\n}\n//# sourceMappingURL=contextMenuTarget.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport \"../configureDom4\";\nimport { Classes } from \"../\";\nexport function isDarkTheme(element) {\n return element instanceof Element && element.closest(\".\" + Classes.DARK) != null;\n}\n//# sourceMappingURL=isDarkTheme.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { clamp } from \"../../common/utils\";\nexport function clampValue(value, min, max) {\n // defaultProps won't work if the user passes in null, so just default\n // to +/- infinity here instead, as a catch-all.\n var adjustedMin = min != null ? min : -Infinity;\n var adjustedMax = max != null ? max : Infinity;\n return clamp(value, adjustedMin, adjustedMax);\n}\nexport function getValueOrEmptyValue(value) {\n if (value === void 0) { value = \"\"; }\n return value.toString();\n}\n/** Returns `true` if the string represents a valid numeric value, like \"1e6\". */\nexport function isValueNumeric(value) {\n // checking if a string is numeric in Typescript is a big pain, because\n // we can't simply toss a string parameter to isFinite. below is the\n // essential approach that jQuery uses, which involves subtracting a\n // parsed numeric value from the string representation of the value. we\n // need to cast the value to the `any` type to allow this operation\n // between dissimilar types.\n return value != null && value - parseFloat(value) + 1 >= 0;\n}\nexport function isValidNumericKeyboardEvent(e) {\n // unit tests may not include e.key. don't bother disabling those events.\n if (e.key == null) {\n return true;\n }\n // allow modified key strokes that may involve letters and other\n // non-numeric/invalid characters (Cmd + A, Cmd + C, Cmd + V, Cmd + X).\n if (e.ctrlKey || e.altKey || e.metaKey) {\n return true;\n }\n // keys that print a single character when pressed have a `key` name of\n // length 1. every other key has a longer `key` name (e.g. \"Backspace\",\n // \"ArrowUp\", \"Shift\"). since none of those keys can print a character\n // to the field--and since they may have important native behaviors\n // beyond printing a character--we don't want to disable their effects.\n var isSingleCharKey = e.key.length === 1;\n if (!isSingleCharKey) {\n return true;\n }\n // now we can simply check that the single character that wants to be printed\n // is a floating-point number character that we're allowed to print.\n return isFloatingPointNumericCharacter(e.key);\n}\n/**\n * A regex that matches a string of length 1 (i.e. a standalone character)\n * if and only if it is a floating-point number character as defined by W3C:\n * https://www.w3.org/TR/2012/WD-html-markup-20120329/datatypes.html#common.data.float\n *\n * Floating-point number characters are the only characters that can be\n * printed within a default input[type=\"number\"]. This component should\n * behave the same way when this.props.allowNumericCharactersOnly = true.\n * See here for the input[type=\"number\"].value spec:\n * https://www.w3.org/TR/2012/WD-html-markup-20120329/input.number.html#input.number.attrs.value\n */\nvar FLOATING_POINT_NUMBER_CHARACTER_REGEX = /^[Ee0-9\\+\\-\\.]$/;\nfunction isFloatingPointNumericCharacter(character) {\n return FLOATING_POINT_NUMBER_CHARACTER_REGEX.test(character);\n}\n/**\n * Round the value to have _up to_ the specified maximum precision.\n *\n * This differs from `toFixed(5)` in that trailing zeroes are not added on\n * more precise values, resulting in shorter strings.\n */\nexport function toMaxPrecision(value, maxPrecision) {\n // round the value to have the specified maximum precision (toFixed is the wrong choice,\n // because it would show trailing zeros in the decimal part out to the specified precision)\n // source: http://stackoverflow.com/a/18358056/5199574\n var scaleFactor = Math.pow(10, maxPrecision);\n return Math.round(value * scaleFactor) / scaleFactor;\n}\n/**\n * Convert Japanese full-width numbers, e.g. '5', to ASCII, e.g. '5'\n * This should be called before performing any other numeric string input validation.\n */\nfunction convertFullWidthNumbersToAscii(value) {\n return value.replace(/[\\uFF10-\\uFF19]/g, function (m) { return String.fromCharCode(m.charCodeAt(0) - 0xfee0); });\n}\n/**\n * Convert full-width (Japanese) numbers to ASCII, and strip all characters that are not valid floating-point numeric characters\n */\nexport function sanitizeNumericInput(value) {\n var valueChars = convertFullWidthNumbersToAscii(value).split(\"\");\n var sanitizedValueChars = valueChars.filter(isFloatingPointNumericCharacter);\n return sanitizedValueChars.join(\"\");\n}\n//# sourceMappingURL=numericInputUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, DISPLAYNAME_PREFIX, Intent, Keys, Position, removeNonHTMLProps, Utils, } from \"../../common\";\nimport * as Errors from \"../../common/errors\";\nimport { ButtonGroup } from \"../button/buttonGroup\";\nimport { AnchorButton } from \"../button/buttons\";\nimport { ControlGroup } from \"./controlGroup\";\nimport { InputGroup } from \"./inputGroup\";\nimport { clampValue, getValueOrEmptyValue, isValidNumericKeyboardEvent, isValueNumeric, sanitizeNumericInput, toMaxPrecision, } from \"./numericInputUtils\";\nvar IncrementDirection;\n(function (IncrementDirection) {\n IncrementDirection[IncrementDirection[\"DOWN\"] = -1] = \"DOWN\";\n IncrementDirection[IncrementDirection[\"UP\"] = 1] = \"UP\";\n})(IncrementDirection || (IncrementDirection = {}));\nvar NON_HTML_PROPS = [\n \"allowNumericCharactersOnly\",\n \"buttonPosition\",\n \"clampValueOnBlur\",\n \"className\",\n \"defaultValue\",\n \"majorStepSize\",\n \"minorStepSize\",\n \"onButtonClick\",\n \"onValueChange\",\n \"selectAllOnFocus\",\n \"selectAllOnIncrement\",\n \"stepSize\",\n];\nvar NumericInput = /** @class */ (function (_super) {\n __extends(NumericInput, _super);\n function NumericInput() {\n var _a;\n var _this = _super.apply(this, arguments) || this;\n _this.state = {\n currentImeInputInvalid: false,\n shouldSelectAfterUpdate: false,\n stepMaxPrecision: NumericInput_1.getStepMaxPrecision(_this.props),\n value: getValueOrEmptyValue((_a = _this.props.value) !== null && _a !== void 0 ? _a : _this.props.defaultValue),\n };\n // updating these flags need not trigger re-renders, so don't include them in this.state.\n _this.didPasteEventJustOccur = false;\n _this.delta = 0;\n _this.inputElement = null;\n _this.intervalId = null;\n _this.incrementButtonHandlers = _this.getButtonEventHandlers(IncrementDirection.UP);\n _this.decrementButtonHandlers = _this.getButtonEventHandlers(IncrementDirection.DOWN);\n _this.inputRef = function (input) {\n _this.inputElement = input;\n Utils.safeInvoke(_this.props.inputRef, input);\n };\n _this.handleButtonClick = function (e, direction) {\n var _a, _b;\n var delta = _this.updateDelta(direction, e);\n var nextValue = _this.incrementValue(delta);\n (_b = (_a = _this.props).onButtonClick) === null || _b === void 0 ? void 0 : _b.call(_a, +nextValue, nextValue);\n };\n _this.stopContinuousChange = function () {\n _this.delta = 0;\n _this.clearTimeouts();\n clearInterval(_this.intervalId);\n document.removeEventListener(\"mouseup\", _this.stopContinuousChange);\n };\n _this.handleContinuousChange = function () {\n var _a, _b;\n var nextValue = _this.incrementValue(_this.delta);\n (_b = (_a = _this.props).onButtonClick) === null || _b === void 0 ? void 0 : _b.call(_a, +nextValue, nextValue);\n };\n // Callbacks - Input\n // =================\n _this.handleInputFocus = function (e) {\n // update this state flag to trigger update for input selection (see componentDidUpdate)\n _this.setState({ shouldSelectAfterUpdate: _this.props.selectAllOnFocus });\n Utils.safeInvoke(_this.props.onFocus, e);\n };\n _this.handleInputBlur = function (e) {\n // always disable this flag on blur so it's ready for next time.\n _this.setState({ shouldSelectAfterUpdate: false });\n if (_this.props.clampValueOnBlur) {\n var value = e.target.value;\n _this.handleNextValue(_this.roundAndClampValue(value));\n }\n Utils.safeInvoke(_this.props.onBlur, e);\n };\n _this.handleInputKeyDown = function (e) {\n if (_this.props.disabled || _this.props.readOnly) {\n return;\n }\n var keyCode = e.keyCode;\n var direction;\n if (keyCode === Keys.ARROW_UP) {\n direction = IncrementDirection.UP;\n }\n else if (keyCode === Keys.ARROW_DOWN) {\n direction = IncrementDirection.DOWN;\n }\n if (direction != null) {\n // when the input field has focus, some key combinations will modify\n // the field's selection range. we'll actually want to select all\n // text in the field after we modify the value on the following\n // lines. preventing the default selection behavior lets us do that\n // without interference.\n e.preventDefault();\n var delta = _this.updateDelta(direction, e);\n _this.incrementValue(delta);\n }\n Utils.safeInvoke(_this.props.onKeyDown, e);\n };\n _this.handleCompositionEnd = function (e) {\n if (_this.props.allowNumericCharactersOnly) {\n _this.handleNextValue(sanitizeNumericInput(e.data));\n _this.setState({ currentImeInputInvalid: false });\n }\n };\n _this.handleCompositionUpdate = function (e) {\n if (_this.props.allowNumericCharactersOnly) {\n var data = e.data;\n var sanitizedValue = sanitizeNumericInput(data);\n if (sanitizedValue.length === 0 && data.length > 0) {\n _this.setState({ currentImeInputInvalid: true });\n }\n else {\n _this.setState({ currentImeInputInvalid: false });\n }\n }\n };\n _this.handleInputKeyPress = function (e) {\n // we prohibit keystrokes in onKeyPress instead of onKeyDown, because\n // e.key is not trustworthy in onKeyDown in all browsers.\n if (_this.props.allowNumericCharactersOnly && !isValidNumericKeyboardEvent(e)) {\n e.preventDefault();\n }\n Utils.safeInvoke(_this.props.onKeyPress, e);\n };\n _this.handleInputPaste = function (e) {\n _this.didPasteEventJustOccur = true;\n Utils.safeInvoke(_this.props.onPaste, e);\n };\n _this.handleInputChange = function (e) {\n var value = e.target.value;\n var nextValue = value;\n if (_this.props.allowNumericCharactersOnly && _this.didPasteEventJustOccur) {\n _this.didPasteEventJustOccur = false;\n nextValue = sanitizeNumericInput(value);\n }\n _this.handleNextValue(nextValue);\n _this.setState({ shouldSelectAfterUpdate: false });\n };\n return _this;\n }\n NumericInput_1 = NumericInput;\n NumericInput.getDerivedStateFromProps = function (props, state) {\n var _a, _b;\n var nextState = {\n prevMaxProp: props.max,\n prevMinProp: props.min,\n prevValueProp: props.value,\n };\n var didMinChange = props.min !== state.prevMinProp;\n var didMaxChange = props.max !== state.prevMaxProp;\n var didBoundsChange = didMinChange || didMaxChange;\n // in controlled mode, use props.value\n // in uncontrolled mode, if state.value has not been assigned yet (upon initial mount), use props.defaultValue\n var value = (_b = (_a = props.value) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : state.value;\n var stepMaxPrecision = NumericInput_1.getStepMaxPrecision(props);\n var sanitizedValue = value !== NumericInput_1.VALUE_EMPTY\n ? NumericInput_1.roundAndClampValue(value, stepMaxPrecision, props.min, props.max)\n : NumericInput_1.VALUE_EMPTY;\n // if a new min and max were provided that cause the existing value to fall\n // outside of the new bounds, then clamp the value to the new valid range.\n if (didBoundsChange && sanitizedValue !== state.value) {\n return __assign(__assign({}, nextState), { stepMaxPrecision: stepMaxPrecision, value: sanitizedValue });\n }\n return __assign(__assign({}, nextState), { stepMaxPrecision: stepMaxPrecision, value: value });\n };\n // Value Helpers\n // =============\n NumericInput.getStepMaxPrecision = function (props) {\n if (props.minorStepSize != null) {\n return Utils.countDecimalPlaces(props.minorStepSize);\n }\n else {\n return Utils.countDecimalPlaces(props.stepSize);\n }\n };\n NumericInput.roundAndClampValue = function (value, stepMaxPrecision, min, max, delta) {\n if (delta === void 0) { delta = 0; }\n if (!isValueNumeric(value)) {\n return NumericInput_1.VALUE_EMPTY;\n }\n var nextValue = toMaxPrecision(parseFloat(value) + delta, stepMaxPrecision);\n return clampValue(nextValue, min, max).toString();\n };\n NumericInput.prototype.render = function () {\n var _a;\n var _b = this.props, buttonPosition = _b.buttonPosition, className = _b.className, fill = _b.fill, large = _b.large;\n var containerClasses = classNames(Classes.NUMERIC_INPUT, (_a = {}, _a[Classes.LARGE] = large, _a), className);\n var buttons = this.renderButtons();\n return (React.createElement(ControlGroup, { className: containerClasses, fill: fill },\n buttonPosition === Position.LEFT && buttons,\n this.renderInput(),\n buttonPosition === Position.RIGHT && buttons));\n };\n NumericInput.prototype.componentDidUpdate = function (prevProps, prevState) {\n var _a, _b;\n _super.prototype.componentDidUpdate.call(this, prevProps, prevState);\n if (this.state.shouldSelectAfterUpdate) {\n this.inputElement.setSelectionRange(0, this.state.value.length);\n }\n var didMinChange = this.props.min !== prevProps.min;\n var didMaxChange = this.props.max !== prevProps.max;\n var didBoundsChange = didMinChange || didMaxChange;\n if (didBoundsChange && this.state.value !== prevState.value) {\n // we clamped the value due to a bounds change, so we should fire the change callback\n (_b = (_a = this.props).onValueChange) === null || _b === void 0 ? void 0 : _b.call(_a, +this.state.value, this.state.value, this.inputElement);\n }\n };\n NumericInput.prototype.validateProps = function (nextProps) {\n var majorStepSize = nextProps.majorStepSize, max = nextProps.max, min = nextProps.min, minorStepSize = nextProps.minorStepSize, stepSize = nextProps.stepSize, value = nextProps.value;\n if (min != null && max != null && min > max) {\n throw new Error(Errors.NUMERIC_INPUT_MIN_MAX);\n }\n if (stepSize == null) {\n throw new Error(Errors.NUMERIC_INPUT_STEP_SIZE_NULL);\n }\n if (stepSize <= 0) {\n throw new Error(Errors.NUMERIC_INPUT_STEP_SIZE_NON_POSITIVE);\n }\n if (minorStepSize && minorStepSize <= 0) {\n throw new Error(Errors.NUMERIC_INPUT_MINOR_STEP_SIZE_NON_POSITIVE);\n }\n if (majorStepSize && majorStepSize <= 0) {\n throw new Error(Errors.NUMERIC_INPUT_MAJOR_STEP_SIZE_NON_POSITIVE);\n }\n if (minorStepSize && minorStepSize > stepSize) {\n throw new Error(Errors.NUMERIC_INPUT_MINOR_STEP_SIZE_BOUND);\n }\n if (majorStepSize && majorStepSize < stepSize) {\n throw new Error(Errors.NUMERIC_INPUT_MAJOR_STEP_SIZE_BOUND);\n }\n // controlled mode\n if (value != null) {\n var stepMaxPrecision = NumericInput_1.getStepMaxPrecision(nextProps);\n var sanitizedValue = NumericInput_1.roundAndClampValue(value.toString(), stepMaxPrecision, min, max);\n if (sanitizedValue !== value.toString()) {\n console.warn(Errors.NUMERIC_INPUT_CONTROLLED_VALUE_INVALID);\n }\n }\n };\n // Render Helpers\n // ==============\n NumericInput.prototype.renderButtons = function () {\n var _a = this.props, intent = _a.intent, max = _a.max, min = _a.min;\n var value = this.state.value;\n var disabled = this.props.disabled || this.props.readOnly;\n return (React.createElement(ButtonGroup, { className: Classes.FIXED, key: \"button-group\", vertical: true },\n React.createElement(AnchorButton, __assign({ disabled: disabled || (value !== \"\" && +value >= max), icon: \"chevron-up\", intent: intent }, this.incrementButtonHandlers)),\n React.createElement(AnchorButton, __assign({ disabled: disabled || (value !== \"\" && +value <= min), icon: \"chevron-down\", intent: intent }, this.decrementButtonHandlers))));\n };\n NumericInput.prototype.renderInput = function () {\n var inputGroupHtmlProps = removeNonHTMLProps(this.props, NON_HTML_PROPS, true);\n return (React.createElement(InputGroup, __assign({ autoComplete: \"off\" }, inputGroupHtmlProps, { intent: this.state.currentImeInputInvalid ? Intent.DANGER : this.props.intent, inputRef: this.inputRef, large: this.props.large, leftIcon: this.props.leftIcon, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, onChange: this.handleInputChange, onCompositionEnd: this.handleCompositionEnd, onCompositionUpdate: this.handleCompositionUpdate, onKeyDown: this.handleInputKeyDown, onKeyPress: this.handleInputKeyPress, onPaste: this.handleInputPaste, rightElement: this.props.rightElement, value: this.state.value })));\n };\n // Callbacks - Buttons\n // ===================\n NumericInput.prototype.getButtonEventHandlers = function (direction) {\n var _this = this;\n return {\n // keydown is fired repeatedly when held so it's implicitly continuous\n onKeyDown: function (evt) {\n if (!_this.props.disabled && Keys.isKeyboardClick(evt.keyCode)) {\n _this.handleButtonClick(evt, direction);\n }\n },\n onMouseDown: function (evt) {\n if (!_this.props.disabled) {\n _this.handleButtonClick(evt, direction);\n _this.startContinuousChange();\n }\n },\n };\n };\n NumericInput.prototype.startContinuousChange = function () {\n var _this = this;\n // The button's onMouseUp event handler doesn't fire if the user\n // releases outside of the button, so we need to watch all the way\n // from the top.\n document.addEventListener(\"mouseup\", this.stopContinuousChange);\n // Initial delay is slightly longer to prevent the user from\n // accidentally triggering the continuous increment/decrement.\n this.setTimeout(function () {\n _this.intervalId = window.setInterval(_this.handleContinuousChange, NumericInput_1.CONTINUOUS_CHANGE_INTERVAL);\n }, NumericInput_1.CONTINUOUS_CHANGE_DELAY);\n };\n // Data logic\n // ==========\n NumericInput.prototype.handleNextValue = function (valueAsString) {\n var _a, _b;\n if (this.props.value == null) {\n this.setState({ value: valueAsString });\n }\n (_b = (_a = this.props).onValueChange) === null || _b === void 0 ? void 0 : _b.call(_a, +valueAsString, valueAsString, this.inputElement);\n };\n NumericInput.prototype.incrementValue = function (delta) {\n // pretend we're incrementing from 0 if currValue is empty\n var currValue = this.state.value === NumericInput_1.VALUE_EMPTY ? NumericInput_1.VALUE_ZERO : this.state.value;\n var nextValue = this.roundAndClampValue(currValue, delta);\n if (nextValue !== this.state.value) {\n this.handleNextValue(nextValue);\n this.setState({ shouldSelectAfterUpdate: this.props.selectAllOnIncrement });\n }\n // return value used in continuous change updates\n return nextValue;\n };\n NumericInput.prototype.getIncrementDelta = function (direction, isShiftKeyPressed, isAltKeyPressed) {\n var _a = this.props, majorStepSize = _a.majorStepSize, minorStepSize = _a.minorStepSize, stepSize = _a.stepSize;\n if (isShiftKeyPressed && majorStepSize != null) {\n return direction * majorStepSize;\n }\n else if (isAltKeyPressed && minorStepSize != null) {\n return direction * minorStepSize;\n }\n else {\n return direction * stepSize;\n }\n };\n NumericInput.prototype.roundAndClampValue = function (value, delta) {\n if (delta === void 0) { delta = 0; }\n return NumericInput_1.roundAndClampValue(value, this.state.stepMaxPrecision, this.props.min, this.props.max, delta);\n };\n NumericInput.prototype.updateDelta = function (direction, e) {\n this.delta = this.getIncrementDelta(direction, e.shiftKey, e.altKey);\n return this.delta;\n };\n var NumericInput_1;\n NumericInput.displayName = DISPLAYNAME_PREFIX + \".NumericInput\";\n NumericInput.VALUE_EMPTY = \"\";\n NumericInput.VALUE_ZERO = \"0\";\n NumericInput.defaultProps = {\n allowNumericCharactersOnly: true,\n buttonPosition: Position.RIGHT,\n clampValueOnBlur: false,\n defaultValue: NumericInput_1.VALUE_EMPTY,\n large: false,\n majorStepSize: 10,\n minorStepSize: 0.1,\n selectAllOnFocus: false,\n selectAllOnIncrement: false,\n stepSize: 1,\n };\n NumericInput.CONTINUOUS_CHANGE_DELAY = 300;\n NumericInput.CONTINUOUS_CHANGE_INTERVAL = 100;\n NumericInput = NumericInput_1 = __decorate([\n polyfill\n ], NumericInput);\n return NumericInput;\n}(AbstractPureComponent2));\nexport { NumericInput };\n//# sourceMappingURL=numericInput.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes } from \"../../common\";\nimport { DISPLAYNAME_PREFIX, removeNonHTMLProps } from \"../../common/props\";\nvar TabTitle = /** @class */ (function (_super) {\n __extends(TabTitle, _super);\n function TabTitle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleClick = function (e) { return _this.props.onClick(_this.props.id, e); };\n return _this;\n }\n TabTitle.prototype.render = function () {\n var _a = this.props, className = _a.className, children = _a.children, disabled = _a.disabled, id = _a.id, parentId = _a.parentId, selected = _a.selected, title = _a.title, htmlProps = __rest(_a, [\"className\", \"children\", \"disabled\", \"id\", \"parentId\", \"selected\", \"title\"]);\n return (React.createElement(\"div\", __assign({}, removeNonHTMLProps(htmlProps), { \"aria-controls\": generateTabPanelId(parentId, id), \"aria-disabled\": disabled, \"aria-expanded\": selected, \"aria-selected\": selected, className: classNames(Classes.TAB, className), \"data-tab-id\": id, id: generateTabTitleId(parentId, id), onClick: disabled ? undefined : this.handleClick, role: \"tab\", tabIndex: disabled ? undefined : 0 }),\n title,\n children));\n };\n TabTitle.displayName = DISPLAYNAME_PREFIX + \".TabTitle\";\n TabTitle = __decorate([\n polyfill\n ], TabTitle);\n return TabTitle;\n}(AbstractPureComponent2));\nexport { TabTitle };\nexport function generateTabPanelId(parentId, tabId) {\n return Classes.TAB_PANEL + \"_\" + parentId + \"_\" + tabId;\n}\nexport function generateTabTitleId(parentId, tabId) {\n return Classes.TAB + \"-title_\" + parentId + \"_\" + tabId;\n}\n//# sourceMappingURL=tabTitle.js.map","/*\n * Copyright 2015 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Classes, Keys } from \"../../common\";\nimport { DISPLAYNAME_PREFIX } from \"../../common/props\";\nimport * as Utils from \"../../common/utils\";\nimport { Tab } from \"./tab\";\nimport { generateTabPanelId, generateTabTitleId, TabTitle } from \"./tabTitle\";\nexport var Expander = function () { return React.createElement(\"div\", { className: Classes.FLEX_EXPANDER }); };\nvar TAB_SELECTOR = \".\" + Classes.TAB;\nvar Tabs = /** @class */ (function (_super) {\n __extends(Tabs, _super);\n function Tabs(props) {\n var _this = _super.call(this, props) || this;\n _this.refHandlers = {\n tablist: function (tabElement) { return (_this.tablistElement = tabElement); },\n };\n _this.handleKeyDown = function (e) {\n var focusedElement = document.activeElement.closest(TAB_SELECTOR);\n // rest of this is potentially expensive and futile, so bail if no tab is focused\n if (focusedElement == null) {\n return;\n }\n // must rely on DOM state because we have no way of mapping `focusedElement` to a JSX.Element\n var enabledTabElements = _this.getTabElements().filter(function (el) { return el.getAttribute(\"aria-disabled\") === \"false\"; });\n var focusedIndex = enabledTabElements.indexOf(focusedElement);\n var direction = _this.getKeyCodeDirection(e);\n if (focusedIndex >= 0 && direction !== undefined) {\n e.preventDefault();\n var length_1 = enabledTabElements.length;\n // auto-wrapping at 0 and `length`\n var nextFocusedIndex = (focusedIndex + direction + length_1) % length_1;\n enabledTabElements[nextFocusedIndex].focus();\n }\n };\n _this.handleKeyPress = function (e) {\n var targetTabElement = e.target.closest(TAB_SELECTOR);\n if (targetTabElement != null && Keys.isKeyboardClick(e.which)) {\n e.preventDefault();\n targetTabElement.click();\n }\n };\n _this.handleTabClick = function (newTabId, event) {\n Utils.safeInvoke(_this.props.onChange, newTabId, _this.state.selectedTabId, event);\n if (_this.props.selectedTabId === undefined) {\n _this.setState({ selectedTabId: newTabId });\n }\n };\n _this.renderTabPanel = function (tab) {\n var _a = tab.props, className = _a.className, panel = _a.panel, id = _a.id, panelClassName = _a.panelClassName;\n if (panel === undefined) {\n return undefined;\n }\n return (React.createElement(\"div\", { \"aria-labelledby\": generateTabTitleId(_this.props.id, id), \"aria-hidden\": id !== _this.state.selectedTabId, className: classNames(Classes.TAB_PANEL, className, panelClassName), id: generateTabPanelId(_this.props.id, id), key: id, role: \"tabpanel\" }, panel));\n };\n _this.renderTabTitle = function (child) {\n if (isTabElement(child)) {\n var id = child.props.id;\n return (React.createElement(TabTitle, __assign({}, child.props, { parentId: _this.props.id, onClick: _this.handleTabClick, selected: id === _this.state.selectedTabId })));\n }\n return child;\n };\n var selectedTabId = _this.getInitialSelectedTabId();\n _this.state = { selectedTabId: selectedTabId };\n return _this;\n }\n Tabs.getDerivedStateFromProps = function (_a) {\n var selectedTabId = _a.selectedTabId;\n if (selectedTabId !== undefined) {\n // keep state in sync with controlled prop, so state is canonical source of truth\n return { selectedTabId: selectedTabId };\n }\n return null;\n };\n Tabs.prototype.render = function () {\n var _a, _b;\n var _c = this.state, indicatorWrapperStyle = _c.indicatorWrapperStyle, selectedTabId = _c.selectedTabId;\n var tabTitles = React.Children.map(this.props.children, this.renderTabTitle);\n var tabPanels = this.getTabChildren()\n .filter(this.props.renderActiveTabPanelOnly ? function (tab) { return tab.props.id === selectedTabId; } : function () { return true; })\n .map(this.renderTabPanel);\n var tabIndicator = this.props.animate ? (React.createElement(\"div\", { className: Classes.TAB_INDICATOR_WRAPPER, style: indicatorWrapperStyle },\n React.createElement(\"div\", { className: Classes.TAB_INDICATOR }))) : null;\n var classes = classNames(Classes.TABS, (_a = {}, _a[Classes.VERTICAL] = this.props.vertical, _a), this.props.className);\n var tabListClasses = classNames(Classes.TAB_LIST, (_b = {},\n _b[Classes.LARGE] = this.props.large,\n _b));\n return (React.createElement(\"div\", { className: classes },\n React.createElement(\"div\", { className: tabListClasses, onKeyDown: this.handleKeyDown, onKeyPress: this.handleKeyPress, ref: this.refHandlers.tablist, role: \"tablist\" },\n tabIndicator,\n tabTitles),\n tabPanels));\n };\n Tabs.prototype.componentDidMount = function () {\n this.moveSelectionIndicator();\n };\n Tabs.prototype.componentDidUpdate = function (prevProps, prevState) {\n if (this.state.selectedTabId !== prevState.selectedTabId) {\n this.moveSelectionIndicator();\n }\n else if (prevState.selectedTabId != null) {\n // comparing React nodes is difficult to do with simple logic, so\n // shallowly compare just their props as a workaround.\n var didChildrenChange = !Utils.arraysEqual(this.getTabChildrenProps(prevProps), this.getTabChildrenProps(), Utils.shallowCompareKeys);\n if (didChildrenChange) {\n this.moveSelectionIndicator();\n }\n }\n };\n Tabs.prototype.getInitialSelectedTabId = function () {\n // NOTE: providing an unknown ID will hide the selection\n var _a = this.props, defaultSelectedTabId = _a.defaultSelectedTabId, selectedTabId = _a.selectedTabId;\n if (selectedTabId !== undefined) {\n return selectedTabId;\n }\n else if (defaultSelectedTabId !== undefined) {\n return defaultSelectedTabId;\n }\n else {\n // select first tab in absence of user input\n var tabs = this.getTabChildren();\n return tabs.length === 0 ? undefined : tabs[0].props.id;\n }\n };\n Tabs.prototype.getKeyCodeDirection = function (e) {\n if (isEventKeyCode(e, Keys.ARROW_LEFT, Keys.ARROW_UP)) {\n return -1;\n }\n else if (isEventKeyCode(e, Keys.ARROW_RIGHT, Keys.ARROW_DOWN)) {\n return 1;\n }\n return undefined;\n };\n Tabs.prototype.getTabChildrenProps = function (props) {\n if (props === void 0) { props = this.props; }\n return this.getTabChildren(props).map(function (child) { return child.props; });\n };\n /** Filters children to only `<Tab>`s */\n Tabs.prototype.getTabChildren = function (props) {\n if (props === void 0) { props = this.props; }\n return React.Children.toArray(props.children).filter(isTabElement);\n };\n /** Queries root HTML element for all tabs with optional filter selector */\n Tabs.prototype.getTabElements = function (subselector) {\n if (subselector === void 0) { subselector = \"\"; }\n if (this.tablistElement == null) {\n return [];\n }\n return Array.from(this.tablistElement.querySelectorAll(TAB_SELECTOR + subselector));\n };\n /**\n * Calculate the new height, width, and position of the tab indicator.\n * Store the CSS values so the transition animation can start.\n */\n Tabs.prototype.moveSelectionIndicator = function () {\n if (this.tablistElement == null || !this.props.animate) {\n return;\n }\n var tabIdSelector = TAB_SELECTOR + \"[data-tab-id=\\\"\" + this.state.selectedTabId + \"\\\"]\";\n var selectedTabElement = this.tablistElement.querySelector(tabIdSelector);\n var indicatorWrapperStyle = { display: \"none\" };\n if (selectedTabElement != null) {\n var clientHeight = selectedTabElement.clientHeight, clientWidth = selectedTabElement.clientWidth, offsetLeft = selectedTabElement.offsetLeft, offsetTop = selectedTabElement.offsetTop;\n indicatorWrapperStyle = {\n height: clientHeight,\n transform: \"translateX(\" + Math.floor(offsetLeft) + \"px) translateY(\" + Math.floor(offsetTop) + \"px)\",\n width: clientWidth,\n };\n }\n this.setState({ indicatorWrapperStyle: indicatorWrapperStyle });\n };\n /** Insert a `Tabs.Expander` between any two children to right-align all subsequent children. */\n Tabs.Expander = Expander;\n Tabs.Tab = Tab;\n Tabs.defaultProps = {\n animate: true,\n large: false,\n renderActiveTabPanelOnly: false,\n vertical: false,\n };\n Tabs.displayName = DISPLAYNAME_PREFIX + \".Tabs\";\n Tabs = __decorate([\n polyfill\n ], Tabs);\n return Tabs;\n}(AbstractPureComponent2));\nexport { Tabs };\nfunction isEventKeyCode(e) {\n var codes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n codes[_i - 1] = arguments[_i];\n }\n return codes.indexOf(e.which) >= 0;\n}\nfunction isTabElement(child) {\n return Utils.isElementOfType(child, Tab);\n}\n//# sourceMappingURL=tabs.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Children } from \"react\";\nimport { isElementOfType, safeInvoke } from \"../../common/utils\";\nimport { Hotkey } from \"./hotkey\";\nimport { comboMatches, getKeyCombo, parseKeyCombo } from \"./hotkeyParser\";\nimport { hideHotkeysDialogAfterDelay, isHotkeysDialogShowing, showHotkeysDialog } from \"./hotkeysDialog\";\nvar SHOW_DIALOG_KEY = \"?\";\nexport var HotkeyScope;\n(function (HotkeyScope) {\n HotkeyScope[\"LOCAL\"] = \"local\";\n HotkeyScope[\"GLOBAL\"] = \"global\";\n})(HotkeyScope || (HotkeyScope = {}));\nvar HotkeysEvents = /** @class */ (function () {\n function HotkeysEvents(scope) {\n var _this = this;\n this.scope = scope;\n this.actions = [];\n this.handleKeyDown = function (e) {\n var combo = getKeyCombo(e);\n var isTextInput = _this.isTextInput(e);\n if (!isTextInput && comboMatches(parseKeyCombo(SHOW_DIALOG_KEY), combo)) {\n if (isHotkeysDialogShowing()) {\n hideHotkeysDialogAfterDelay();\n }\n else {\n showHotkeysDialog(_this.actions.map(function (action) { return action.props; }));\n }\n return;\n }\n else if (isHotkeysDialogShowing()) {\n return;\n }\n _this.invokeNamedCallbackIfComboRecognized(combo, \"onKeyDown\", e);\n };\n this.handleKeyUp = function (e) {\n if (isHotkeysDialogShowing()) {\n return;\n }\n _this.invokeNamedCallbackIfComboRecognized(getKeyCombo(e), \"onKeyUp\", e);\n };\n }\n HotkeysEvents.prototype.count = function () {\n return this.actions.length;\n };\n HotkeysEvents.prototype.clear = function () {\n this.actions = [];\n };\n HotkeysEvents.prototype.setHotkeys = function (props) {\n var _this = this;\n var actions = [];\n Children.forEach(props.children, function (child) {\n if (isElementOfType(child, Hotkey) && _this.isScope(child.props)) {\n actions.push({\n combo: parseKeyCombo(child.props.combo),\n props: child.props,\n });\n }\n });\n this.actions = actions;\n };\n HotkeysEvents.prototype.invokeNamedCallbackIfComboRecognized = function (combo, callbackName, e) {\n var isTextInput = this.isTextInput(e);\n for (var _i = 0, _a = this.actions; _i < _a.length; _i++) {\n var action = _a[_i];\n var shouldIgnore = (isTextInput && !action.props.allowInInput) || action.props.disabled;\n if (!shouldIgnore && comboMatches(action.combo, combo)) {\n if (action.props.preventDefault) {\n e.preventDefault();\n }\n if (action.props.stopPropagation) {\n // set a flag just for unit testing. not meant to be referenced in feature work.\n e.isPropagationStopped = true;\n e.stopPropagation();\n }\n safeInvoke(action.props[callbackName], e);\n }\n }\n };\n HotkeysEvents.prototype.isScope = function (props) {\n return (props.global ? HotkeyScope.GLOBAL : HotkeyScope.LOCAL) === this.scope;\n };\n HotkeysEvents.prototype.isTextInput = function (e) {\n var elem = e.target;\n // we check these cases for unit testing, but this should not happen\n // during normal operation\n if (elem == null || elem.closest == null) {\n return false;\n }\n var editable = elem.closest(\"input, textarea, [contenteditable=true]\");\n if (editable == null) {\n return false;\n }\n // don't let checkboxes, switches, and radio buttons prevent hotkey behavior\n if (editable.tagName.toLowerCase() === \"input\") {\n var inputType = editable.type;\n if (inputType === \"checkbox\" || inputType === \"radio\") {\n return false;\n }\n }\n // don't let read-only fields prevent hotkey behavior\n if (editable.readOnly) {\n return false;\n }\n return true;\n };\n return HotkeysEvents;\n}());\nexport { HotkeysEvents };\n//# sourceMappingURL=hotkeysEvents.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport * as React from \"react\";\nimport { HOTKEYS_WARN_DECORATOR_NEEDS_REACT_ELEMENT, HOTKEYS_WARN_DECORATOR_NO_METHOD } from \"../../common/errors\";\nimport { getDisplayName, isFunction, safeInvoke } from \"../../common/utils\";\nimport { HotkeyScope, HotkeysEvents } from \"./hotkeysEvents\";\nexport function HotkeysTarget(WrappedComponent) {\n var _a;\n if (!isFunction(WrappedComponent.prototype.renderHotkeys)) {\n console.warn(HOTKEYS_WARN_DECORATOR_NO_METHOD);\n }\n return _a = /** @class */ (function (_super) {\n __extends(HotkeysTargetClass, _super);\n function HotkeysTargetClass() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @internal */\n _this.globalHotkeysEvents = new HotkeysEvents(HotkeyScope.GLOBAL);\n /** @internal */\n _this.localHotkeysEvents = new HotkeysEvents(HotkeyScope.LOCAL);\n return _this;\n }\n HotkeysTargetClass.prototype.componentDidMount = function () {\n if (_super.prototype.componentDidMount != null) {\n _super.prototype.componentDidMount.call(this);\n }\n // attach global key event listeners\n document.addEventListener(\"keydown\", this.globalHotkeysEvents.handleKeyDown);\n document.addEventListener(\"keyup\", this.globalHotkeysEvents.handleKeyUp);\n };\n HotkeysTargetClass.prototype.componentWillUnmount = function () {\n if (_super.prototype.componentWillUnmount != null) {\n _super.prototype.componentWillUnmount.call(this);\n }\n document.removeEventListener(\"keydown\", this.globalHotkeysEvents.handleKeyDown);\n document.removeEventListener(\"keyup\", this.globalHotkeysEvents.handleKeyUp);\n this.globalHotkeysEvents.clear();\n this.localHotkeysEvents.clear();\n };\n HotkeysTargetClass.prototype.render = function () {\n var _this = this;\n var element = _super.prototype.render.call(this);\n if (element == null) {\n // always return `element` in case caller is distinguishing between `null` and `undefined`\n return element;\n }\n if (!React.isValidElement(element)) {\n console.warn(HOTKEYS_WARN_DECORATOR_NEEDS_REACT_ELEMENT);\n return element;\n }\n if (isFunction(this.renderHotkeys)) {\n var hotkeys = this.renderHotkeys();\n if (this.localHotkeysEvents) {\n this.localHotkeysEvents.setHotkeys(hotkeys.props);\n }\n if (this.globalHotkeysEvents) {\n this.globalHotkeysEvents.setHotkeys(hotkeys.props);\n }\n if (this.localHotkeysEvents.count() > 0) {\n var tabIndex = hotkeys.props.tabIndex === undefined ? 0 : hotkeys.props.tabIndex;\n var _a = element.props, existingKeyDown_1 = _a.onKeyDown, existingKeyUp_1 = _a.onKeyUp;\n var handleKeyDownWrapper = function (e) {\n _this.localHotkeysEvents.handleKeyDown(e.nativeEvent);\n safeInvoke(existingKeyDown_1, e);\n };\n var handleKeyUpWrapper = function (e) {\n _this.localHotkeysEvents.handleKeyUp(e.nativeEvent);\n safeInvoke(existingKeyUp_1, e);\n };\n return React.cloneElement(element, {\n onKeyDown: handleKeyDownWrapper,\n onKeyUp: handleKeyUpWrapper,\n tabIndex: tabIndex,\n });\n }\n }\n return element;\n };\n return HotkeysTargetClass;\n }(WrappedComponent)),\n _a.displayName = \"HotkeysTarget(\" + getDisplayName(WrappedComponent) + \")\",\n _a;\n}\n//# sourceMappingURL=hotkeysTarget.js.map","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","function createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (typeof action === 'function') {\n return action(dispatch, getState, extraArgument);\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n if (file && acceptedFiles) {\n var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n var fileName = file.name || '';\n var mimeType = file.type || '';\n var baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptedFilesArray.some(function (type) {\n var validType = type.trim();\n\n if (validType.charAt(0) === '.') {\n return fileName.toLowerCase().endsWith(validType.toLowerCase());\n } else if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '');\n }\n\n return mimeType === validType;\n });\n }\n\n return true;\n};","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { DISPLAYNAME_PREFIX } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport { emptyCellRenderer } from \"./cell/cell\";\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Column.displayName = DISPLAYNAME_PREFIX + \".Column\";\n Column.defaultProps = {\n cellRenderer: emptyCellRenderer,\n };\n return Column;\n}(React.PureComponent));\nexport { Column };\n//# sourceMappingURL=column.js.map","'use strict'\n\nconst React = require('react')\nconst vfile = require('vfile')\nconst unified = require('unified')\nconst parse = require('remark-parse')\nconst remarkRehype = require('remark-rehype')\nconst PropTypes = require('prop-types')\n// @ts-ignore remove when typed\nconst html = require('property-information/html')\nconst filter = require('./rehype-filter')\nconst uriTransformer = require('./uri-transformer')\nconst childrenToReact = require('./ast-to-react.js').hastChildrenToReact\n\n/**\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('react').ReactElement<{}>} ReactElement\n * @typedef {import('unified').PluggableList} PluggableList\n * @typedef {import('hast').Root} Root\n * @typedef {import('./rehype-filter.js').RehypeFilterOptions} FilterOptions\n * @typedef {import('./ast-to-react.js').TransformOptions} TransformOptions\n *\n * @typedef {Object} CoreOptions\n * @property {string} children\n *\n * @typedef {Object} PluginOptions\n * @property {PluggableList} [plugins=[]] **deprecated**: use `remarkPlugins` instead\n * @property {PluggableList} [remarkPlugins=[]]\n * @property {PluggableList} [rehypePlugins=[]]\n *\n * @typedef {Object} LayoutOptions\n * @property {string} [className]\n *\n * @typedef {CoreOptions & PluginOptions & LayoutOptions & FilterOptions & TransformOptions} ReactMarkdownOptions\n */\n\nmodule.exports = ReactMarkdown\n\nconst own = {}.hasOwnProperty\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/**\n * @typedef {Object} Deprecation\n * @property {string} id\n * @property {string} [to]\n */\n\n/**\n * @type {Object.<string, Deprecation>}\n */\nconst deprecated = {\n renderers: {to: 'components', id: 'change-renderers-to-components'},\n astPlugins: {id: 'remove-buggy-html-in-markdown-parser'},\n allowDangerousHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n escapeHtml: {id: 'remove-buggy-html-in-markdown-parser'},\n source: {to: 'children', id: 'change-source-to-children'},\n allowNode: {\n to: 'allowElement',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n },\n allowedTypes: {\n to: 'allowedElements',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n },\n disallowedTypes: {\n to: 'disallowedElements',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes'\n },\n includeNodeIndex: {\n to: 'includeElementIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n }\n}\n\n/**\n * @param {ReactMarkdownOptions} options\n * @returns {ReactElement}\n */\nfunction ReactMarkdown(options) {\n for (const key in deprecated) {\n if (own.call(deprecated, key) && own.call(options, key)) {\n /** @type {Deprecation} */\n const deprecation = deprecated[key]\n console.warn(\n `[react-markdown] Warning: please ${\n deprecation.to ? `use \\`${deprecation.to}\\` instead of` : 'remove'\n } \\`${key}\\` (see <${changelog}#${deprecation.id}> for more info)`\n )\n delete deprecated[key]\n }\n }\n\n const processor = unified()\n .use(parse)\n // TODO: deprecate `plugins` in v7.0.0.\n .use(options.remarkPlugins || options.plugins || [])\n .use(remarkRehype, {allowDangerousHtml: true})\n .use(options.rehypePlugins || [])\n .use(filter, options)\n\n /** @type {vfile} */\n let file\n\n if (typeof options.children === 'string') {\n file = vfile(options.children)\n } else {\n if (options.children !== undefined && options.children !== null) {\n console.warn(\n `[react-markdown] Warning: please pass a string as \\`children\\` (not: \\`${options.children}\\`)`\n )\n }\n\n file = vfile()\n }\n\n /** @type {Root} */\n // @ts-ignore we’ll throw if it isn’t a root next.\n const hastNode = processor.runSync(processor.parse(file), file)\n\n if (hastNode.type !== 'root') {\n throw new TypeError('Expected a `root` node')\n }\n\n /** @type {ReactElement} */\n let result = React.createElement(\n React.Fragment,\n {},\n childrenToReact({options: options, schema: html, listDepth: 0}, hastNode)\n )\n\n if (options.className) {\n result = React.createElement('div', {className: options.className}, result)\n }\n\n return result\n}\n\nReactMarkdown.defaultProps = {transformLinkUri: uriTransformer}\n\nReactMarkdown.propTypes = {\n // Core options:\n children: PropTypes.string,\n // Layout options:\n className: PropTypes.string,\n // Filter options:\n allowElement: PropTypes.func,\n allowedElements: PropTypes.arrayOf(PropTypes.string),\n disallowedElements: PropTypes.arrayOf(PropTypes.string),\n unwrapDisallowed: PropTypes.bool,\n // Plugin options:\n // type-coverage:ignore-next-line\n remarkPlugins: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.func,\n PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.func]))\n ])\n ),\n // type-coverage:ignore-next-line\n rehypePlugins: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.func,\n PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.object, PropTypes.func]))\n ])\n ),\n // Transform options:\n sourcePos: PropTypes.bool,\n rawSourcePos: PropTypes.bool,\n skipHtml: PropTypes.bool,\n includeElementIndex: PropTypes.bool,\n transformLinkUri: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n linkTarget: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n transformImageUri: PropTypes.func,\n components: PropTypes.object\n}\n\nReactMarkdown.uriTransformer = uriTransformer\n","'use strict'\n\nvar syntax = require('micromark-extension-gfm')\nvar fromMarkdown = require('mdast-util-gfm/from-markdown')\nvar toMarkdown = require('mdast-util-gfm/to-markdown')\n\nvar warningIssued\n\nmodule.exports = gfm\n\nfunction gfm(options) {\n var data = this.data()\n\n /* istanbul ignore next - old remark. */\n if (\n !warningIssued &&\n ((this.Parser &&\n this.Parser.prototype &&\n this.Parser.prototype.blockTokenizers) ||\n (this.Compiler &&\n this.Compiler.prototype &&\n this.Compiler.prototype.visitors))\n ) {\n warningIssued = true\n console.warn(\n '[remark-gfm] Warning: please upgrade to remark 13 to use this plugin'\n )\n }\n\n add('micromarkExtensions', syntax(options))\n add('fromMarkdownExtensions', fromMarkdown)\n add('toMarkdownExtensions', toMarkdown(options))\n\n function add(field, value) {\n /* istanbul ignore if - other extensions. */\n if (data[field]) data[field].push(value)\n else data[field] = [value]\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.split = undefined;\n\nvar _ace = require('./ace.js');\n\nvar _ace2 = _interopRequireDefault(_ace);\n\nvar _split = require('./split.js');\n\nvar _split2 = _interopRequireDefault(_split);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.split = _split2.default;\nexports.default = _ace2.default;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export var COMMON_MIME_TYPES = new Map([\n ['avi', 'video/avi'],\n ['gif', 'image/gif'],\n ['ico', 'image/x-icon'],\n ['jpeg', 'image/jpeg'],\n ['jpg', 'image/jpeg'],\n ['mkv', 'video/x-matroska'],\n ['mov', 'video/quicktime'],\n ['mp4', 'video/mp4'],\n ['pdf', 'application/pdf'],\n ['png', 'image/png'],\n ['zip', 'application/zip'],\n ['doc', 'application/msword'],\n ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']\n]);\nexport function toFileWithPath(file, path) {\n var f = withMimeType(file);\n if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n var webkitRelativePath = file.webkitRelativePath;\n Object.defineProperty(f, 'path', {\n value: typeof path === 'string'\n ? path\n // If <input webkitdirectory> is set,\n // the File will have a {webkitRelativePath} property\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n ? webkitRelativePath\n : file.name,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n return f;\n}\nfunction withMimeType(file) {\n var name = file.name;\n var hasExtension = name && name.lastIndexOf('.') !== -1;\n if (hasExtension && !file.type) {\n var ext = name.split('.')\n .pop().toLowerCase();\n var type = COMMON_MIME_TYPES.get(ext);\n if (type) {\n Object.defineProperty(file, 'type', {\n value: type,\n writable: false,\n configurable: false,\n enumerable: true\n });\n }\n }\n return file;\n}\n//# sourceMappingURL=file.js.map","import * as tslib_1 from \"tslib\";\nimport { toFileWithPath } from './file';\nvar FILES_TO_IGNORE = [\n // Thumbnail cache files for macOS and Windows\n '.DS_Store',\n 'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n * @param evt\n */\nexport function fromEvent(evt) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, isDragEvt(evt) && evt.dataTransfer\n ? getDataTransferFiles(evt.dataTransfer, evt.type)\n : getInputFiles(evt)];\n });\n });\n}\nfunction isDragEvt(value) {\n return !!value.dataTransfer;\n}\nfunction getInputFiles(evt) {\n var files = isInput(evt.target)\n ? evt.target.files\n ? fromList(evt.target.files)\n : []\n : [];\n return files.map(function (file) { return toFileWithPath(file); });\n}\nfunction isInput(value) {\n return value !== null;\n}\nfunction getDataTransferFiles(dt, type) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var items, files;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!dt.items) return [3 /*break*/, 2];\n items = fromList(dt.items)\n .filter(function (item) { return item.kind === 'file'; });\n // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n // only 'dragstart' and 'drop' has access to the data (source node)\n if (type !== 'drop') {\n return [2 /*return*/, items];\n }\n return [4 /*yield*/, Promise.all(items.map(toFilePromises))];\n case 1:\n files = _a.sent();\n return [2 /*return*/, noIgnoredFiles(flatten(files))];\n case 2: return [2 /*return*/, noIgnoredFiles(fromList(dt.files)\n .map(function (file) { return toFileWithPath(file); }))];\n }\n });\n });\n}\nfunction noIgnoredFiles(files) {\n return files.filter(function (file) { return FILES_TO_IGNORE.indexOf(file.name) === -1; });\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n var files = [];\n // tslint:disable: prefer-for-of\n for (var i = 0; i < items.length; i++) {\n var file = items[i];\n files.push(file);\n }\n return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n if (typeof item.webkitGetAsEntry !== 'function') {\n return fromDataTransferItem(item);\n }\n var entry = item.webkitGetAsEntry();\n // Safari supports dropping an image node from a different window and can be retrieved using\n // the DataTransferItem.getAsFile() API\n // NOTE: FileSystemEntry.file() throws if trying to get the file\n if (entry && entry.isDirectory) {\n return fromDirEntry(entry);\n }\n return fromDataTransferItem(item);\n}\nfunction flatten(items) {\n return items.reduce(function (acc, files) { return tslib_1.__spread(acc, (Array.isArray(files) ? flatten(files) : [files])); }, []);\n}\nfunction fromDataTransferItem(item) {\n var file = item.getAsFile();\n if (!file) {\n return Promise.reject(item + \" is not a File\");\n }\n var fwp = toFileWithPath(file);\n return Promise.resolve(fwp);\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry)];\n });\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n var reader = entry.createReader();\n return new Promise(function (resolve, reject) {\n var entries = [];\n function readEntries() {\n var _this = this;\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n reader.readEntries(function (batch) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n var files, err_1, items;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!batch.length) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, Promise.all(entries)];\n case 2:\n files = _a.sent();\n resolve(files);\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n reject(err_1);\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n items = Promise.all(batch.map(fromEntry));\n entries.push(items);\n // Continue reading\n readEntries();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n }); }, function (err) {\n reject(err);\n });\n }\n readEntries();\n });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n entry.file(function (file) {\n var fwp = toFileWithPath(file, entry.fullPath);\n resolve(fwp);\n }, function (err) {\n reject(err);\n });\n })];\n });\n });\n}\n//# sourceMappingURL=file-selector.js.map","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport accepts from 'attr-accept'; // Error codes\n\nexport var FILE_INVALID_TYPE = 'file-invalid-type';\nexport var FILE_TOO_LARGE = 'file-too-large';\nexport var FILE_TOO_SMALL = 'file-too-small';\nexport var TOO_MANY_FILES = 'too-many-files'; // File Errors\n\nexport var getInvalidTypeRejectionErr = function getInvalidTypeRejectionErr(accept) {\n accept = Array.isArray(accept) && accept.length === 1 ? accept[0] : accept;\n var messageSuffix = Array.isArray(accept) ? \"one of \".concat(accept.join(', ')) : accept;\n return {\n code: FILE_INVALID_TYPE,\n message: \"File type must be \".concat(messageSuffix)\n };\n};\nexport var getTooLargeRejectionErr = function getTooLargeRejectionErr(maxSize) {\n return {\n code: FILE_TOO_LARGE,\n message: \"File is larger than \".concat(maxSize, \" bytes\")\n };\n};\nexport var getTooSmallRejectionErr = function getTooSmallRejectionErr(minSize) {\n return {\n code: FILE_TOO_SMALL,\n message: \"File is smaller than \".concat(minSize, \" bytes\")\n };\n};\nexport var TOO_MANY_FILES_REJECTION = {\n code: TOO_MANY_FILES,\n message: 'Too many files'\n}; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n var isAcceptable = file.type === 'application/x-moz-file' || accepts(file, accept);\n return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) {\n if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n } else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];else if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n }\n\n return [true, null];\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n var files = _ref.files,\n accept = _ref.accept,\n minSize = _ref.minSize,\n maxSize = _ref.maxSize,\n multiple = _ref.multiple;\n\n if (!multiple && files.length > 1) {\n return false;\n }\n\n return files.every(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 1),\n accepted = _fileAccepted2[0];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 1),\n sizeMatch = _fileMatchSize2[0];\n\n return accepted && sizeMatch;\n });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n if (typeof event.isPropagationStopped === 'function') {\n return event.isPropagationStopped();\n } else if (typeof event.cancelBubble !== 'undefined') {\n return event.cancelBubble;\n }\n\n return false;\n}\nexport function isEvtWithFiles(event) {\n if (!event.dataTransfer) {\n return !!event.target && !!event.target.files;\n } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n return type === 'Files' || type === 'application/x-moz-file';\n });\n}\nexport function isKindFile(item) {\n return _typeof(item) === 'object' && item !== null && item.kind === 'file';\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n return userAgent.indexOf('MSIE') !== -1 || userAgent.indexOf('Trident/') !== -1;\n}\n\nfunction isEdge(userAgent) {\n return userAgent.indexOf('Edge/') !== -1;\n}\n\nexport function isIeOrEdge() {\n var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (!isPropagationStopped(event) && fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return isPropagationStopped(event);\n });\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { fromEvent } from 'file-selector';\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, isEvtWithFiles, isIeOrEdge, isPropagationStopped, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from './utils/index';\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * <Dropzone>\n * {({getRootProps, getInputProps}) => (\n * <div {...getRootProps()}>\n * <input {...getInputProps()} />\n * <p>Drag 'n' drop some files here, or click to select files</p>\n * </div>\n * )}\n * </Dropzone>\n * ```\n */\n\nvar Dropzone = forwardRef(function (_ref, ref) {\n var children = _ref.children,\n params = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useDropzone = useDropzone(params),\n open = _useDropzone.open,\n props = _objectWithoutProperties(_useDropzone, [\"open\"]);\n\n useImperativeHandle(ref, function () {\n return {\n open: open\n };\n }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n return React.createElement(Fragment, null, children(_objectSpread({}, props, {\n open: open\n })));\n});\nDropzone.displayName = 'Dropzone';\nDropzone.propTypes = {\n /**\n * Render function that exposes the dropzone state and prop getter fns\n *\n * @param {object} params\n * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n * @param {Function} params.open Open the native file selection dialog\n * @param {boolean} params.isFocused Dropzone area is in focus\n * @param {boolean} params.isFileDialogActive File dialog is opened\n * @param {boolean} params.isDragActive Active drag is in progress\n * @param {boolean} params.isDragAccept Dragged files are accepted\n * @param {boolean} params.isDragReject Some dragged files are rejected\n * @param {File[]} params.draggedFiles Files in active drag\n * @param {File[]} params.acceptedFiles Accepted files\n * @param {FileRejection[]} params.fileRejections Rejected files and why they were rejected\n */\n children: PropTypes.func,\n\n /**\n * Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n */\n multiple: PropTypes.bool,\n\n /**\n * If false, allow dropped items to take over the current browser window\n */\n preventDropOnDocument: PropTypes.bool,\n\n /**\n * If true, disables click to open the native file selection dialog\n */\n noClick: PropTypes.bool,\n\n /**\n * If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n */\n noKeyboard: PropTypes.bool,\n\n /**\n * If true, disables drag 'n' drop\n */\n noDrag: PropTypes.bool,\n\n /**\n * If true, stops drag event propagation to parents\n */\n noDragEventsBubbling: PropTypes.bool,\n\n /**\n * Minimum file size (in bytes)\n */\n minSize: PropTypes.number,\n\n /**\n * Maximum file size (in bytes)\n */\n maxSize: PropTypes.number,\n\n /**\n * Enable/disable the dropzone\n */\n disabled: PropTypes.bool,\n\n /**\n * Use this to provide a custom file aggregator\n *\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n getFilesFromEvent: PropTypes.func,\n\n /**\n * Cb for when closing the file dialog with no selection\n */\n onFileDialogCancel: PropTypes.func,\n\n /**\n * Cb for when the `dragenter` event occurs.\n *\n * @param {DragEvent} event\n */\n onDragEnter: PropTypes.func,\n\n /**\n * Cb for when the `dragleave` event occurs\n *\n * @param {DragEvent} event\n */\n onDragLeave: PropTypes.func,\n\n /**\n * Cb for when the `dragover` event occurs\n *\n * @param {DragEvent} event\n */\n onDragOver: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n *\n * @param {File[]} acceptedFiles\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n onDrop: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are accepted, this callback is not invoked.\n *\n * @param {File[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropAccepted: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are rejected, this callback is not invoked.\n *\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event\n */\n onDropRejected: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {FileRejection[]} fileRejections List of rejected files and why they were rejected\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise<File[]>)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {FileRejection[]} fileRejections Rejected files and why they were rejected\n */\n\nvar initialState = {\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n draggedFiles: [],\n acceptedFiles: [],\n fileRejections: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n * const {getRootProps, getInputProps} = useDropzone({\n * onDrop: acceptedFiles => {\n * // do something with the File objects, e.g. upload to some server\n * }\n * });\n * return (\n * <div {...getRootProps()}>\n * <input {...getInputProps()} />\n * <p>Drag and drop some files here, or click to select files</p>\n * </div>\n * )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are droppped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n accept = _ref2.accept,\n _ref2$disabled = _ref2.disabled,\n disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,\n _ref2$getFilesFromEve = _ref2.getFilesFromEvent,\n getFilesFromEvent = _ref2$getFilesFromEve === void 0 ? fromEvent : _ref2$getFilesFromEve,\n _ref2$maxSize = _ref2.maxSize,\n maxSize = _ref2$maxSize === void 0 ? Infinity : _ref2$maxSize,\n _ref2$minSize = _ref2.minSize,\n minSize = _ref2$minSize === void 0 ? 0 : _ref2$minSize,\n _ref2$multiple = _ref2.multiple,\n multiple = _ref2$multiple === void 0 ? true : _ref2$multiple,\n onDragEnter = _ref2.onDragEnter,\n onDragLeave = _ref2.onDragLeave,\n onDragOver = _ref2.onDragOver,\n onDrop = _ref2.onDrop,\n onDropAccepted = _ref2.onDropAccepted,\n onDropRejected = _ref2.onDropRejected,\n onFileDialogCancel = _ref2.onFileDialogCancel,\n _ref2$preventDropOnDo = _ref2.preventDropOnDocument,\n preventDropOnDocument = _ref2$preventDropOnDo === void 0 ? true : _ref2$preventDropOnDo,\n _ref2$noClick = _ref2.noClick,\n noClick = _ref2$noClick === void 0 ? false : _ref2$noClick,\n _ref2$noKeyboard = _ref2.noKeyboard,\n noKeyboard = _ref2$noKeyboard === void 0 ? false : _ref2$noKeyboard,\n _ref2$noDrag = _ref2.noDrag,\n noDrag = _ref2$noDrag === void 0 ? false : _ref2$noDrag,\n _ref2$noDragEventsBub = _ref2.noDragEventsBubbling,\n noDragEventsBubbling = _ref2$noDragEventsBub === void 0 ? false : _ref2$noDragEventsBub;\n\n var rootRef = useRef(null);\n var inputRef = useRef(null);\n\n var _useReducer = useReducer(reducer, initialState),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n dispatch = _useReducer2[1];\n\n var isFocused = state.isFocused,\n isFileDialogActive = state.isFileDialogActive,\n draggedFiles = state.draggedFiles; // Fn for opening the file dialog programmatically\n\n var openFileDialog = useCallback(function () {\n if (inputRef.current) {\n dispatch({\n type: 'openDialog'\n });\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }, [dispatch]); // Update file dialog active state when the window is focused on\n\n var onWindowFocus = function onWindowFocus() {\n // Execute the timeout only if the file dialog is opened in the browser\n if (isFileDialogActive) {\n setTimeout(function () {\n if (inputRef.current) {\n var files = inputRef.current.files;\n\n if (!files.length) {\n dispatch({\n type: 'closeDialog'\n });\n\n if (typeof onFileDialogCancel === 'function') {\n onFileDialogCancel();\n }\n }\n }\n }, 300);\n }\n };\n\n useEffect(function () {\n window.addEventListener('focus', onWindowFocus, false);\n return function () {\n window.removeEventListener('focus', onWindowFocus, false);\n };\n }, [inputRef, isFileDialogActive, onFileDialogCancel]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n var onKeyDownCb = useCallback(function (event) {\n // Ignore keyboard events bubbling up the DOM tree\n if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n return;\n }\n\n if (event.keyCode === 32 || event.keyCode === 13) {\n event.preventDefault();\n openFileDialog();\n }\n }, [rootRef, inputRef]); // Update focus state for the dropzone\n\n var onFocusCb = useCallback(function () {\n dispatch({\n type: 'focus'\n });\n }, []);\n var onBlurCb = useCallback(function () {\n dispatch({\n type: 'blur'\n });\n }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n var onClickCb = useCallback(function () {\n if (noClick) {\n return;\n } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n // to ensure React can handle state changes\n // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n if (isIeOrEdge()) {\n setTimeout(openFileDialog, 0);\n } else {\n openFileDialog();\n }\n }, [inputRef, noClick]);\n var dragTargetsRef = useRef([]);\n\n var onDocumentDrop = function onDocumentDrop(event) {\n if (rootRef.current && rootRef.current.contains(event.target)) {\n // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n return;\n }\n\n event.preventDefault();\n dragTargetsRef.current = [];\n };\n\n useEffect(function () {\n if (preventDropOnDocument) {\n document.addEventListener('dragover', onDocumentDragOver, false);\n document.addEventListener('drop', onDocumentDrop, false);\n }\n\n return function () {\n if (preventDropOnDocument) {\n document.removeEventListener('dragover', onDocumentDragOver);\n document.removeEventListener('drop', onDocumentDrop);\n }\n };\n }, [rootRef, preventDropOnDocument]);\n var onDragEnterCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n dispatch({\n draggedFiles: draggedFiles,\n isDragActive: true,\n type: 'setDraggedFiles'\n });\n\n if (onDragEnter) {\n onDragEnter(event);\n }\n });\n }\n }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n var onDragOverCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event);\n\n if (event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = 'copy';\n } catch (_unused) {}\n /* eslint-disable-line no-empty */\n\n }\n\n if (isEvtWithFiles(event) && onDragOver) {\n onDragOver(event);\n }\n\n return false;\n }, [onDragOver, noDragEventsBubbling]);\n var onDragLeaveCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n var targets = dragTargetsRef.current.filter(function (target) {\n return rootRef.current && rootRef.current.contains(target);\n }); // Make sure to remove a target present multiple times only once\n // (Firefox may fire dragenter/dragleave multiple times on the same element)\n\n var targetIdx = targets.indexOf(event.target);\n\n if (targetIdx !== -1) {\n targets.splice(targetIdx, 1);\n }\n\n dragTargetsRef.current = targets;\n\n if (targets.length > 0) {\n return;\n }\n\n dispatch({\n isDragActive: false,\n type: 'setDraggedFiles',\n draggedFiles: []\n });\n\n if (isEvtWithFiles(event) && onDragLeave) {\n onDragLeave(event);\n }\n }, [rootRef, onDragLeave, noDragEventsBubbling]);\n var onDropCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [];\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n var acceptedFiles = [];\n var fileRejections = [];\n files.forEach(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 2),\n accepted = _fileAccepted2[0],\n acceptError = _fileAccepted2[1];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),\n sizeMatch = _fileMatchSize2[0],\n sizeError = _fileMatchSize2[1];\n\n if (accepted && sizeMatch) {\n acceptedFiles.push(file);\n } else {\n var errors = [acceptError, sizeError].filter(function (e) {\n return e;\n });\n fileRejections.push({\n file: file,\n errors: errors\n });\n }\n });\n\n if (!multiple && acceptedFiles.length > 1) {\n // Reject everything and empty accepted files\n acceptedFiles.forEach(function (file) {\n fileRejections.push({\n file: file,\n errors: [TOO_MANY_FILES_REJECTION]\n });\n });\n acceptedFiles.splice(0);\n }\n\n dispatch({\n acceptedFiles: acceptedFiles,\n fileRejections: fileRejections,\n type: 'setFiles'\n });\n\n if (onDrop) {\n onDrop(acceptedFiles, fileRejections, event);\n }\n\n if (fileRejections.length > 0 && onDropRejected) {\n onDropRejected(fileRejections, event);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted(acceptedFiles, event);\n }\n });\n }\n\n dispatch({\n type: 'reset'\n });\n }, [multiple, accept, minSize, maxSize, getFilesFromEvent, onDrop, onDropAccepted, onDropRejected, noDragEventsBubbling]);\n\n var composeHandler = function composeHandler(fn) {\n return disabled ? null : fn;\n };\n\n var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n return noKeyboard ? null : composeHandler(fn);\n };\n\n var composeDragHandler = function composeDragHandler(fn) {\n return noDrag ? null : composeHandler(fn);\n };\n\n var stopPropagation = function stopPropagation(event) {\n if (noDragEventsBubbling) {\n event.stopPropagation();\n }\n };\n\n var getRootProps = useMemo(function () {\n return function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$refKey = _ref3.refKey,\n refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,\n onKeyDown = _ref3.onKeyDown,\n onFocus = _ref3.onFocus,\n onBlur = _ref3.onBlur,\n onClick = _ref3.onClick,\n onDragEnter = _ref3.onDragEnter,\n onDragOver = _ref3.onDragOver,\n onDragLeave = _ref3.onDragLeave,\n onDrop = _ref3.onDrop,\n rest = _objectWithoutProperties(_ref3, [\"refKey\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"]);\n\n return _objectSpread(_defineProperty({\n onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb))\n }, refKey, rootRef), !disabled && !noKeyboard ? {\n tabIndex: 0\n } : {}, {}, rest);\n };\n }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n var onInputElementClick = useCallback(function (event) {\n event.stopPropagation();\n }, []);\n var getInputProps = useMemo(function () {\n return function () {\n var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref4$refKey = _ref4.refKey,\n refKey = _ref4$refKey === void 0 ? 'ref' : _ref4$refKey,\n onChange = _ref4.onChange,\n onClick = _ref4.onClick,\n rest = _objectWithoutProperties(_ref4, [\"refKey\", \"onChange\", \"onClick\"]);\n\n var inputProps = _defineProperty({\n accept: accept,\n multiple: multiple,\n type: 'file',\n style: {\n display: 'none'\n },\n onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n autoComplete: 'off',\n tabIndex: -1\n }, refKey, inputRef);\n\n return _objectSpread({}, inputProps, {}, rest);\n };\n }, [inputRef, accept, multiple, onDropCb, disabled]);\n var fileCount = draggedFiles.length;\n var isDragAccept = fileCount > 0 && allFilesAccepted({\n files: draggedFiles,\n accept: accept,\n minSize: minSize,\n maxSize: maxSize,\n multiple: multiple\n });\n var isDragReject = fileCount > 0 && !isDragAccept;\n return _objectSpread({}, state, {\n isDragAccept: isDragAccept,\n isDragReject: isDragReject,\n isFocused: isFocused && !disabled,\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n rootRef: rootRef,\n inputRef: inputRef,\n open: composeHandler(openFileDialog)\n });\n}\n\nfunction reducer(state, action) {\n /* istanbul ignore next */\n switch (action.type) {\n case 'focus':\n return _objectSpread({}, state, {\n isFocused: true\n });\n\n case 'blur':\n return _objectSpread({}, state, {\n isFocused: false\n });\n\n case 'openDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: true\n });\n\n case 'closeDialog':\n return _objectSpread({}, state, {\n isFileDialogActive: false\n });\n\n case 'setDraggedFiles':\n /* eslint no-case-declarations: 0 */\n var isDragActive = action.isDragActive,\n draggedFiles = action.draggedFiles;\n return _objectSpread({}, state, {\n draggedFiles: draggedFiles,\n isDragActive: isDragActive\n });\n\n case 'setFiles':\n return _objectSpread({}, state, {\n acceptedFiles: action.acceptedFiles,\n fileRejections: action.fileRejections\n });\n\n case 'reset':\n return _objectSpread({}, state, {\n isFileDialogActive: false,\n isDragActive: false,\n draggedFiles: [],\n acceptedFiles: [],\n fileRejections: []\n });\n\n default:\n return state;\n }\n}","import setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport setPrototypeOf from \"./setPrototypeOf\";\nimport isNativeFunction from \"./isNativeFunction\";\nimport construct from \"./construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.14.0\";\n","/** @license React v16.14.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.14.0\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.14.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.reduxLogger=e.reduxLogger||{})}(this,function(e){\"use strict\";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,\"kind\",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,\"path\",{value:t,enumerable:!0})}function n(e,t,r){n.super_.call(this,\"E\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0}),Object.defineProperty(this,\"rhs\",{value:r,enumerable:!0})}function o(e,t){o.super_.call(this,\"N\",e),Object.defineProperty(this,\"rhs\",{value:t,enumerable:!0})}function i(e,t){i.super_.call(this,\"D\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0})}function a(e,t,r){a.super_.call(this,\"A\",e),Object.defineProperty(this,\"index\",{value:t,enumerable:!0}),Object.defineProperty(this,\"item\",{value:r,enumerable:!0})}function f(e,t,r){var n=e.slice((r||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,n),e}function u(e){var t=\"undefined\"==typeof e?\"undefined\":N(e);return\"object\"!==t?t:e===Math?\"math\":null===e?\"null\":Array.isArray(e)?\"array\":\"[object Date]\"===Object.prototype.toString.call(e)?\"date\":\"function\"==typeof e.toString&&/^\\/.*\\//.test(e.toString())?\"regexp\":\"object\"}function l(e,t,r,c,s,d,p){s=s||[],p=p||[];var g=s.slice(0);if(\"undefined\"!=typeof d){if(c){if(\"function\"==typeof c&&c(g,d))return;if(\"object\"===(\"undefined\"==typeof c?\"undefined\":N(c))){if(c.prefilter&&c.prefilter(g,d))return;if(c.normalize){var h=c.normalize(g,d,e,t);h&&(e=h[0],t=h[1])}}}g.push(d)}\"regexp\"===u(e)&&\"regexp\"===u(t)&&(e=e.toString(),t=t.toString());var y=\"undefined\"==typeof e?\"undefined\":N(e),v=\"undefined\"==typeof t?\"undefined\":N(t),b=\"undefined\"!==y||p&&p[p.length-1].lhs&&p[p.length-1].lhs.hasOwnProperty(d),m=\"undefined\"!==v||p&&p[p.length-1].rhs&&p[p.length-1].rhs.hasOwnProperty(d);if(!b&&m)r(new o(g,t));else if(!m&&b)r(new i(g,e));else if(u(e)!==u(t))r(new n(g,e,t));else if(\"date\"===u(e)&&e-t!==0)r(new n(g,e,t));else if(\"object\"===y&&null!==e&&null!==t)if(p.filter(function(t){return t.lhs===e}).length)e!==t&&r(new n(g,e,t));else{if(p.push({lhs:e,rhs:t}),Array.isArray(e)){var w;e.length;for(w=0;w<e.length;w++)w>=t.length?r(new a(g,w,new i(void 0,e[w]))):l(e[w],t[w],r,c,g,w,p);for(;w<t.length;)r(new a(g,w,new o(void 0,t[w++])))}else{var x=Object.keys(e),S=Object.keys(t);x.forEach(function(n,o){var i=S.indexOf(n);i>=0?(l(e[n],t[n],r,c,g,n,p),S=f(S,i)):l(e[n],void 0,r,c,g,n,p)}),S.forEach(function(e){l(void 0,t[e],r,c,g,e,p)})}p.length=p.length-1}else e!==t&&(\"number\"===y&&isNaN(e)&&isNaN(t)||r(new n(g,e,t)))}function c(e,t,r,n){return n=n||[],l(e,t,function(e){e&&n.push(e)},r),n.length?n:void 0}function s(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":s(o[r.path[n]],r.index,r.item);break;case\"D\":delete o[r.path[n]];break;case\"E\":case\"N\":o[r.path[n]]=r.rhs}}else switch(r.kind){case\"A\":s(e[t],r.index,r.item);break;case\"D\":e=f(e,t);break;case\"E\":case\"N\":e[t]=r.rhs}return e}function d(e,t,r){if(e&&t&&r&&r.kind){for(var n=e,o=-1,i=r.path?r.path.length-1:0;++o<i;)\"undefined\"==typeof n[r.path[o]]&&(n[r.path[o]]=\"number\"==typeof r.path[o]?[]:{}),n=n[r.path[o]];switch(r.kind){case\"A\":s(r.path?n[r.path[o]]:n,r.index,r.item);break;case\"D\":delete n[r.path[o]];break;case\"E\":case\"N\":n[r.path[o]]=r.rhs}}}function p(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":p(o[r.path[n]],r.index,r.item);break;case\"D\":o[r.path[n]]=r.lhs;break;case\"E\":o[r.path[n]]=r.lhs;break;case\"N\":delete o[r.path[n]]}}else switch(r.kind){case\"A\":p(e[t],r.index,r.item);break;case\"D\":e[t]=r.lhs;break;case\"E\":e[t]=r.lhs;break;case\"N\":e=f(e,t)}return e}function g(e,t,r){if(e&&t&&r&&r.kind){var n,o,i=e;for(o=r.path.length-1,n=0;n<o;n++)\"undefined\"==typeof i[r.path[n]]&&(i[r.path[n]]={}),i=i[r.path[n]];switch(r.kind){case\"A\":p(i[r.path[n]],r.index,r.item);break;case\"D\":i[r.path[n]]=r.lhs;break;case\"E\":i[r.path[n]]=r.lhs;break;case\"N\":delete i[r.path[n]]}}}function h(e,t,r){if(e&&t){var n=function(n){r&&!r(e,t,n)||d(e,t,n)};l(e,t,n)}}function y(e){return\"color: \"+F[e].color+\"; font-weight: bold\"}function v(e){var t=e.kind,r=e.path,n=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case\"E\":return[r.join(\".\"),n,\"→\",o];case\"N\":return[r.join(\".\"),o];case\"D\":return[r.join(\".\")];case\"A\":return[r.join(\".\")+\"[\"+i+\"]\",a];default:return[]}}function b(e,t,r,n){var o=c(e,t);try{n?r.groupCollapsed(\"diff\"):r.group(\"diff\")}catch(e){r.log(\"diff\")}o?o.forEach(function(e){var t=e.kind,n=v(e);r.log.apply(r,[\"%c \"+F[t].text,y(t)].concat(P(n)))}):r.log(\"—— no diff ——\");try{r.groupEnd()}catch(e){r.log(\"—— diff end —— \")}}function m(e,t,r,n){switch(\"undefined\"==typeof e?\"undefined\":N(e)){case\"object\":return\"function\"==typeof e[n]?e[n].apply(e,P(r)):e[n];case\"function\":return e(t);default:return e}}function w(e){var t=e.timestamp,r=e.duration;return function(e,n,o){var i=[\"action\"];return i.push(\"%c\"+String(e.type)),t&&i.push(\"%c@ \"+n),r&&i.push(\"%c(in \"+o.toFixed(2)+\" ms)\"),i.join(\" \")}}function x(e,t){var r=t.logger,n=t.actionTransformer,o=t.titleFormatter,i=void 0===o?w(t):o,a=t.collapsed,f=t.colors,u=t.level,l=t.diff,c=\"undefined\"==typeof t.titleFormatter;e.forEach(function(o,s){var d=o.started,p=o.startedTime,g=o.action,h=o.prevState,y=o.error,v=o.took,w=o.nextState,x=e[s+1];x&&(w=x.prevState,v=x.started-d);var S=n(g),k=\"function\"==typeof a?a(function(){return w},g,o):a,j=D(p),E=f.title?\"color: \"+f.title(S)+\";\":\"\",A=[\"color: gray; font-weight: lighter;\"];A.push(E),t.timestamp&&A.push(\"color: gray; font-weight: lighter;\"),t.duration&&A.push(\"color: gray; font-weight: lighter;\");var O=i(S,j,v);try{k?f.title&&c?r.groupCollapsed.apply(r,[\"%c \"+O].concat(A)):r.groupCollapsed(O):f.title&&c?r.group.apply(r,[\"%c \"+O].concat(A)):r.group(O)}catch(e){r.log(O)}var N=m(u,S,[h],\"prevState\"),P=m(u,S,[S],\"action\"),C=m(u,S,[y,h],\"error\"),F=m(u,S,[w],\"nextState\");if(N)if(f.prevState){var L=\"color: \"+f.prevState(h)+\"; font-weight: bold\";r[N](\"%c prev state\",L,h)}else r[N](\"prev state\",h);if(P)if(f.action){var T=\"color: \"+f.action(S)+\"; font-weight: bold\";r[P](\"%c action \",T,S)}else r[P](\"action \",S);if(y&&C)if(f.error){var M=\"color: \"+f.error(y,h)+\"; font-weight: bold;\";r[C](\"%c error \",M,y)}else r[C](\"error \",y);if(F)if(f.nextState){var _=\"color: \"+f.nextState(w)+\"; font-weight: bold\";r[F](\"%c next state\",_,w)}else r[F](\"next state\",w);l&&b(h,w,r,k);try{r.groupEnd()}catch(e){r.log(\"—— log end ——\")}})}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},L,e),r=t.logger,n=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,f=t.diffPredicate;if(\"undefined\"==typeof r)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error(\"[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\\n// Logger with default options\\nimport { logger } from 'redux-logger'\\nconst store = createStore(\\n reducer,\\n applyMiddleware(logger)\\n)\\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\\nimport createLogger from 'redux-logger'\\nconst logger = createLogger({\\n // ...options\\n});\\nconst store = createStore(\\n reducer,\\n applyMiddleware(logger)\\n)\\n\"),function(){return function(e){return function(t){return e(t)}}};var u=[];return function(e){var r=e.getState;return function(e){return function(l){if(\"function\"==typeof i&&!i(r,l))return e(l);var c={};u.push(c),c.started=O.now(),c.startedTime=new Date,c.prevState=n(r()),c.action=l;var s=void 0;if(a)try{s=e(l)}catch(e){c.error=o(e)}else s=e(l);c.took=O.now()-c.started,c.nextState=n(r());var d=t.diff&&\"function\"==typeof f?f(r,l):t.diff;if(x(u,Object.assign({},t,{diff:d})),u.length=0,c.error)throw c.error;return s}}}}var k,j,E=function(e,t){return new Array(t+1).join(e)},A=function(e,t){return E(\"0\",t-e.toString().length)+e},D=function(e){return A(e.getHours(),2)+\":\"+A(e.getMinutes(),2)+\":\"+A(e.getSeconds(),2)+\".\"+A(e.getMilliseconds(),3)},O=\"undefined\"!=typeof performance&&null!==performance&&\"function\"==typeof performance.now?performance:Date,N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},P=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)},C=[];k=\"object\"===(\"undefined\"==typeof global?\"undefined\":N(global))&&global?global:\"undefined\"!=typeof window?window:{},j=k.DeepDiff,j&&C.push(function(){\"undefined\"!=typeof j&&k.DeepDiff===c&&(k.DeepDiff=j,j=void 0)}),t(n,r),t(o,r),t(i,r),t(a,r),Object.defineProperties(c,{diff:{value:c,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:h,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:g,enumerable:!0},isConflict:{value:function(){return\"undefined\"!=typeof j},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach(function(e){e()}),C=null),c},enumerable:!0}});var F={E:{color:\"#2196F3\",text:\"CHANGED:\"},N:{color:\"#4CAF50\",text:\"ADDED:\"},D:{color:\"#F44336\",text:\"DELETED:\"},A:{color:\"#2196F3\",text:\"ARRAY:\"}},L={level:\"log\",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return\"inherit\"},prevState:function(){return\"#9E9E9E\"},action:function(){return\"#03A9F4\"},nextState:function(){return\"#4CAF50\"},error:function(){return\"#F20404\"}},diff:!1,diffPredicate:void 0,transformer:void 0},T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,r=e.getState;return\"function\"==typeof t||\"function\"==typeof r?S()({dispatch:t,getState:r}):void console.error(\"\\n[redux-logger v3] BREAKING CHANGE\\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\\n[redux-logger v3] Change\\n[redux-logger v3] import createLogger from 'redux-logger'\\n[redux-logger v3] to\\n[redux-logger v3] import { createLogger } from 'redux-logger'\\n\")};e.defaults=L,e.createLogger=S,e.logger=T,e.default=T,Object.defineProperty(e,\"__esModule\",{value:!0})});\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","var http = require('http')\nvar url = require('url')\n\nvar https = module.exports\n\nfor (var key in http) {\n if (http.hasOwnProperty(key)) https[key] = http[key]\n}\n\nhttps.request = function (params, cb) {\n params = validateParams(params)\n return http.request.call(this, params, cb)\n}\n\nhttps.get = function (params, cb) {\n params = validateParams(params)\n return http.get.call(this, params, cb)\n}\n\nfunction validateParams (params) {\n if (typeof params === 'string') {\n params = url.parse(params)\n }\n if (!params.protocol) {\n params.protocol = 'https:'\n }\n if (params.protocol !== 'https:') {\n throw new Error('Protocol \"' + params.protocol + '\" not supported. Expected \"https:\"')\n }\n return params\n}\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n\t\tif (capability.arraybuffer) {\n\t\t\tbody = toArrayBuffer(Buffer.concat(self._body))\n\t\t} else if (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tvar fetchTimer = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tglobal.clearTimeout(self._fetchTimer)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tglobal.clearTimeout(self._fetchTimer)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","var Buffer = require('buffer').Buffer\n\nmodule.exports = function (buf) {\n\t// If the buffer is backed by a Uint8Array, a faster version will work\n\tif (buf instanceof Uint8Array) {\n\t\t// If the buffer isn't a subarray, return the underlying ArrayBuffer\n\t\tif (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n\t\t\treturn buf.buffer\n\t\t} else if (typeof buf.buffer.slice === 'function') {\n\t\t\t// Otherwise we need to get a proper copy\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)\n\t\t}\n\t}\n\n\tif (Buffer.isBuffer(buf)) {\n\t\t// This is the slow version that will work with any Buffer\n\t\t// implementation (even in old browsers)\n\t\tvar arrayCopy = new Uint8Array(buf.length)\n\t\tvar len = buf.length\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tarrayCopy[i] = buf[i]\n\t\t}\n\t\treturn arrayCopy.buffer\n\t} else {\n\t\tthrow new Error('Argument must be a Buffer')\n\t}\n}\n","module.exports = {\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","'use strict';\n\nvar Buffer = require('buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar binding = require('./binding');\nvar util = require('util');\nvar assert = require('assert').ok;\nvar kMaxLength = require('buffer').kMaxLength;\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low. Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n var bkey = bkeys[bk];\n if (bkey.match(/^Z/)) {\n Object.defineProperty(exports, bkey, {\n enumerable: true, value: binding[bkey], writable: false\n });\n }\n}\n\n// translation table for return codes.\nvar codes = {\n Z_OK: binding.Z_OK,\n Z_STREAM_END: binding.Z_STREAM_END,\n Z_NEED_DICT: binding.Z_NEED_DICT,\n Z_ERRNO: binding.Z_ERRNO,\n Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n Z_DATA_ERROR: binding.Z_DATA_ERROR,\n Z_MEM_ERROR: binding.Z_MEM_ERROR,\n Z_BUF_ERROR: binding.Z_BUF_ERROR,\n Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n var ckey = ckeys[ck];\n codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, 'codes', {\n enumerable: true, value: Object.freeze(codes), writable: false\n});\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n var buffers = [];\n var nread = 0;\n\n engine.on('error', onError);\n engine.on('end', onEnd);\n\n engine.end(buffer);\n flow();\n\n function flow() {\n var chunk;\n while (null !== (chunk = engine.read())) {\n buffers.push(chunk);\n nread += chunk.length;\n }\n engine.once('readable', flow);\n }\n\n function onError(err) {\n engine.removeListener('end', onEnd);\n engine.removeListener('readable', flow);\n callback(err);\n }\n\n function onEnd() {\n var buf;\n var err = null;\n\n if (nread >= kMaxLength) {\n err = new RangeError(kRangeErrorMessage);\n } else {\n buf = Buffer.concat(buffers, nread);\n }\n\n buffers = [];\n engine.close();\n callback(err, buf);\n }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n var flushFlag = engine._finishFlushFlag;\n\n return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n if (!(this instanceof Deflate)) return new Deflate(opts);\n Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) return new Inflate(opts);\n Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n if (!(this instanceof Gzip)) return new Gzip(opts);\n Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n if (!(this instanceof Gunzip)) return new Gunzip(opts);\n Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n if (!(this instanceof Unzip)) return new Unzip(opts);\n Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n var _this = this;\n\n this._opts = opts = opts || {};\n this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n Transform.call(this, opts);\n\n if (opts.flush && !isValidFlushFlag(opts.flush)) {\n throw new Error('Invalid flush flag: ' + opts.flush);\n }\n if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n throw new Error('Invalid flush flag: ' + opts.finishFlush);\n }\n\n this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n if (opts.chunkSize) {\n if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n throw new Error('Invalid chunk size: ' + opts.chunkSize);\n }\n }\n\n if (opts.windowBits) {\n if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n throw new Error('Invalid windowBits: ' + opts.windowBits);\n }\n }\n\n if (opts.level) {\n if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n throw new Error('Invalid compression level: ' + opts.level);\n }\n }\n\n if (opts.memLevel) {\n if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n throw new Error('Invalid memLevel: ' + opts.memLevel);\n }\n }\n\n if (opts.strategy) {\n if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new Error('Invalid strategy: ' + opts.strategy);\n }\n }\n\n if (opts.dictionary) {\n if (!Buffer.isBuffer(opts.dictionary)) {\n throw new Error('Invalid dictionary: it should be a Buffer instance');\n }\n }\n\n this._handle = new binding.Zlib(mode);\n\n var self = this;\n this._hadError = false;\n this._handle.onerror = function (message, errno) {\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n _close(self);\n self._hadError = true;\n\n var error = new Error(message);\n error.errno = errno;\n error.code = exports.codes[errno];\n self.emit('error', error);\n };\n\n var level = exports.Z_DEFAULT_COMPRESSION;\n if (typeof opts.level === 'number') level = opts.level;\n\n var strategy = exports.Z_DEFAULT_STRATEGY;\n if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n this._buffer = Buffer.allocUnsafe(this._chunkSize);\n this._offset = 0;\n this._level = level;\n this._strategy = strategy;\n\n this.once('end', this.close);\n\n Object.defineProperty(this, '_closed', {\n get: function () {\n return !_this._handle;\n },\n configurable: true,\n enumerable: true\n });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n throw new RangeError('Invalid compression level: ' + level);\n }\n if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new TypeError('Invalid strategy: ' + strategy);\n }\n\n if (this._level !== level || this._strategy !== strategy) {\n var self = this;\n this.flush(binding.Z_SYNC_FLUSH, function () {\n assert(self._handle, 'zlib binding closed');\n self._handle.params(level, strategy);\n if (!self._hadError) {\n self._level = level;\n self._strategy = strategy;\n if (callback) callback();\n }\n });\n } else {\n process.nextTick(callback);\n }\n};\n\nZlib.prototype.reset = function () {\n assert(this._handle, 'zlib binding closed');\n return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n var _this2 = this;\n\n var ws = this._writableState;\n\n if (typeof kind === 'function' || kind === undefined && !callback) {\n callback = kind;\n kind = binding.Z_FULL_FLUSH;\n }\n\n if (ws.ended) {\n if (callback) process.nextTick(callback);\n } else if (ws.ending) {\n if (callback) this.once('end', callback);\n } else if (ws.needDrain) {\n if (callback) {\n this.once('drain', function () {\n return _this2.flush(kind, callback);\n });\n }\n } else {\n this._flushFlag = kind;\n this.write(Buffer.alloc(0), '', callback);\n }\n};\n\nZlib.prototype.close = function (callback) {\n _close(this, callback);\n process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n if (callback) process.nextTick(callback);\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) return;\n\n engine._handle.close();\n engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n var flushFlag;\n var ws = this._writableState;\n var ending = ws.ending || ws.ended;\n var last = ending && (!chunk || ws.length === chunk.length);\n\n if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n if (!this._handle) return cb(new Error('zlib binding closed'));\n\n // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n // (or whatever flag was provided using opts.finishFlush).\n // If it's explicitly flushing at some other time, then we use\n // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n // goodness.\n if (last) flushFlag = this._finishFlushFlag;else {\n flushFlag = this._flushFlag;\n // once we've flushed the last of the queue, stop flushing and\n // go back to the normal behavior.\n if (chunk.length >= ws.length) {\n this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n }\n }\n\n this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n var availInBefore = chunk && chunk.length;\n var availOutBefore = this._chunkSize - this._offset;\n var inOff = 0;\n\n var self = this;\n\n var async = typeof cb === 'function';\n\n if (!async) {\n var buffers = [];\n var nread = 0;\n\n var error;\n this.on('error', function (er) {\n error = er;\n });\n\n assert(this._handle, 'zlib binding closed');\n do {\n var res = this._handle.writeSync(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n } while (!this._hadError && callback(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(kRangeErrorMessage);\n }\n\n var buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n }\n\n assert(this._handle, 'zlib binding closed');\n var req = this._handle.write(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n\n req.buffer = chunk;\n req.callback = callback;\n\n function callback(availInAfter, availOutAfter) {\n // When the callback is used in an async write, the callback's\n // context is the `req` object that was created. The req object\n // is === this._handle, and that's why it's important to null\n // out the values after they are done being used. `this._handle`\n // can stay in memory longer than the callback and buffer are needed.\n if (this) {\n this.buffer = null;\n this.callback = null;\n }\n\n if (self._hadError) return;\n\n var have = availOutBefore - availOutAfter;\n assert(have >= 0, 'have should not go down');\n\n if (have > 0) {\n var out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n // serve some output to the consumer.\n if (async) {\n self.push(out);\n } else {\n buffers.push(out);\n nread += out.length;\n }\n }\n\n // exhausted the output buffer, or used all the input create a new one.\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n // Not actually done. Need to reprocess.\n // Also, update the availInBefore to the availInAfter value,\n // so that if we have to hit it a third (fourth, etc.) time,\n // it'll have the correct byte counts.\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n if (!async) return true;\n\n var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n newReq.callback = callback; // this same function\n newReq.buffer = chunk;\n return;\n }\n\n if (!async) return false;\n\n // finished with the chunk.\n cb();\n }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\n","'use strict';\n/* eslint camelcase: \"off\" */\n\nvar assert = require('assert');\n\nvar Zstream = require('pako/lib/zlib/zstream');\nvar zlib_deflate = require('pako/lib/zlib/deflate.js');\nvar zlib_inflate = require('pako/lib/zlib/inflate.js');\nvar constants = require('pako/lib/zlib/constants');\n\nfor (var key in constants) {\n exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n throw new TypeError('Bad argument');\n }\n\n this.dictionary = null;\n this.err = 0;\n this.flush = 0;\n this.init_done = false;\n this.level = 0;\n this.memLevel = 0;\n this.mode = mode;\n this.strategy = 0;\n this.windowBits = 0;\n this.write_in_progress = false;\n this.pending_close = false;\n this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n if (this.write_in_progress) {\n this.pending_close = true;\n return;\n }\n\n this.pending_close = false;\n\n assert(this.init_done, 'close before init');\n assert(this.mode <= exports.UNZIP);\n\n if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n zlib_deflate.deflateEnd(this.strm);\n } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n zlib_inflate.inflateEnd(this.strm);\n }\n\n this.mode = exports.NONE;\n\n this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n assert.equal(arguments.length, 8);\n\n assert(this.init_done, 'write before init');\n assert(this.mode !== exports.NONE, 'already finalized');\n assert.equal(false, this.write_in_progress, 'write already in progress');\n assert.equal(false, this.pending_close, 'close is pending');\n\n this.write_in_progress = true;\n\n assert.equal(false, flush === undefined, 'must provide flush value');\n\n this.write_in_progress = true;\n\n if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n throw new Error('Invalid flush value');\n }\n\n if (input == null) {\n input = Buffer.alloc(0);\n in_len = 0;\n in_off = 0;\n }\n\n this.strm.avail_in = in_len;\n this.strm.input = input;\n this.strm.next_in = in_off;\n this.strm.avail_out = out_len;\n this.strm.output = out;\n this.strm.next_out = out_off;\n this.flush = flush;\n\n if (!async) {\n // sync version\n this._process();\n\n if (this._checkError()) {\n return this._afterSync();\n }\n return;\n }\n\n // async version\n var self = this;\n process.nextTick(function () {\n self._process();\n self._after();\n });\n\n return this;\n};\n\nZlib.prototype._afterSync = function () {\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n var next_expected_header_byte = null;\n\n // If the avail_out is left at 0, then it means that it ran out\n // of room. If there was avail_out left over, then it means\n // that all of the input was consumed.\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflate(this.strm, this.flush);\n break;\n case exports.UNZIP:\n if (this.strm.avail_in > 0) {\n next_expected_header_byte = this.strm.next_in;\n }\n\n switch (this.gzip_id_bytes_read) {\n case 0:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n this.gzip_id_bytes_read = 1;\n next_expected_header_byte++;\n\n if (this.strm.avail_in === 1) {\n // The only available byte was already read.\n break;\n }\n } else {\n this.mode = exports.INFLATE;\n break;\n }\n\n // fallthrough\n case 1:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n this.gzip_id_bytes_read = 2;\n this.mode = exports.GUNZIP;\n } else {\n // There is no actual difference between INFLATE and INFLATERAW\n // (after initialization).\n this.mode = exports.INFLATE;\n }\n\n break;\n default:\n throw new Error('invalid number of gzip magic number bytes read');\n }\n\n // fallthrough\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n this.err = zlib_inflate.inflate(this.strm, this.flush\n\n // If data was encoded with dictionary\n );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n // Load it\n this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n if (this.err === exports.Z_OK) {\n // And try to decode again\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n } else if (this.err === exports.Z_DATA_ERROR) {\n // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n // Make it possible for After() to tell a bad dictionary from bad\n // input.\n this.err = exports.Z_NEED_DICT;\n }\n }\n while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n // Bytes remain in input buffer. Perhaps this is another compressed\n // member in the same archive, or just trailing garbage.\n // Trailing zero bytes are okay, though, since they are frequently\n // used for padding.\n\n this.reset();\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n }\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n};\n\nZlib.prototype._checkError = function () {\n // Acceptable error states depend on the type of zlib stream.\n switch (this.err) {\n case exports.Z_OK:\n case exports.Z_BUF_ERROR:\n if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n this._error('unexpected end of file');\n return false;\n }\n break;\n case exports.Z_STREAM_END:\n // normal statuses, not fatal\n break;\n case exports.Z_NEED_DICT:\n if (this.dictionary == null) {\n this._error('Missing dictionary');\n } else {\n this._error('Bad dictionary');\n }\n return false;\n default:\n // something else.\n this._error('Zlib error');\n return false;\n }\n\n return true;\n};\n\nZlib.prototype._after = function () {\n if (!this._checkError()) {\n return;\n }\n\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n // call the write() cb\n this.callback(avail_in, avail_out);\n\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype._error = function (message) {\n if (this.strm.msg) {\n message = this.strm.msg;\n }\n this.onerror(message, this.err\n\n // no hope of rescue.\n );this.write_in_progress = false;\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n assert(level >= -1 && level <= 9, 'invalid compression level');\n\n assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n this._init(level, windowBits, memLevel, strategy, dictionary);\n this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n this._reset();\n this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n this.level = level;\n this.windowBits = windowBits;\n this.memLevel = memLevel;\n this.strategy = strategy;\n\n this.flush = exports.Z_NO_FLUSH;\n\n this.err = exports.Z_OK;\n\n if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n this.windowBits += 16;\n }\n\n if (this.mode === exports.UNZIP) {\n this.windowBits += 32;\n }\n\n if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n this.windowBits = -1 * this.windowBits;\n }\n\n this.strm = new Zstream();\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n break;\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n case exports.UNZIP:\n this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Init error');\n }\n\n this.dictionary = dictionary;\n\n this.write_in_progress = false;\n this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n if (this.dictionary == null) {\n return;\n }\n\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to set dictionary');\n }\n};\n\nZlib.prototype._reset = function () {\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n case exports.GZIP:\n this.err = zlib_deflate.deflateReset(this.strm);\n break;\n case exports.INFLATE:\n case exports.INFLATERAW:\n case exports.GUNZIP:\n this.err = zlib_inflate.inflateReset(this.strm);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to reset stream');\n }\n};\n\nexports.Zlib = Zlib;","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","/*!\nCopyright (C) 2013-2015 by Andrea Giammarchi - @WebReflection\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n(function(window){'use strict';\n /* jshint loopfunc: true, noempty: false*/\n // http://www.w3.org/TR/dom/#element\n\n function createDocumentFragment() {\n return document.createDocumentFragment();\n }\n\n function createElement(nodeName) {\n return document.createElement(nodeName);\n }\n\n function enoughArguments(length, name) {\n if (!length) throw new Error(\n 'Failed to construct ' +\n name +\n ': 1 argument required, but only 0 present.'\n );\n }\n\n function mutationMacro(nodes) {\n if (nodes.length === 1) {\n return textNodeIfPrimitive(nodes[0]);\n }\n for (var\n fragment = createDocumentFragment(),\n list = slice.call(nodes),\n i = 0; i < nodes.length; i++\n ) {\n fragment.appendChild(textNodeIfPrimitive(list[i]));\n }\n return fragment;\n }\n\n function textNodeIfPrimitive(node) {\n return typeof node === 'object' ? node : document.createTextNode(node);\n }\n\n for(var\n head,\n property,\n TemporaryPrototype,\n TemporaryTokenList,\n wrapVerifyToken,\n document = window.document,\n hOP = Object.prototype.hasOwnProperty,\n defineProperty = Object.defineProperty || function (object, property, descriptor) {\n if (hOP.call(descriptor, 'value')) {\n object[property] = descriptor.value;\n } else {\n if (hOP.call(descriptor, 'get'))\n object.__defineGetter__(property, descriptor.get);\n if (hOP.call(descriptor, 'set'))\n object.__defineSetter__(property, descriptor.set);\n }\n return object;\n },\n indexOf = [].indexOf || function indexOf(value){\n var length = this.length;\n while(length--) {\n if (this[length] === value) {\n break;\n }\n }\n return length;\n },\n // http://www.w3.org/TR/domcore/#domtokenlist\n verifyToken = function (token) {\n if (!token) {\n throw 'SyntaxError';\n } else if (spaces.test(token)) {\n throw 'InvalidCharacterError';\n }\n return token;\n },\n DOMTokenList = function (node) {\n var\n noClassName = typeof node.className === 'undefined',\n className = noClassName ?\n (node.getAttribute('class') || '') : node.className,\n isSVG = noClassName || typeof className === 'object',\n value = (isSVG ?\n (noClassName ? className : className.baseVal) :\n className\n ).replace(trim, '')\n ;\n if (value.length) {\n properties.push.apply(\n this,\n value.split(spaces)\n );\n }\n this._isSVG = isSVG;\n this._ = node;\n },\n classListDescriptor = {\n get: function get() {\n return new DOMTokenList(this);\n },\n set: function(){}\n },\n trim = /^\\s+|\\s+$/g,\n spaces = /\\s+/,\n SPACE = '\\x20',\n CLASS_LIST = 'classList',\n toggle = function toggle(token, force) {\n if (this.contains(token)) {\n if (!force) {\n // force is not true (either false or omitted)\n this.remove(token);\n }\n } else if(force === undefined || force) {\n force = true;\n this.add(token);\n }\n return !!force;\n },\n DocumentFragmentPrototype = window.DocumentFragment && DocumentFragment.prototype,\n Node = window.Node,\n NodePrototype = (Node || Element).prototype,\n CharacterData = window.CharacterData || Node,\n CharacterDataPrototype = CharacterData && CharacterData.prototype,\n DocumentType = window.DocumentType,\n DocumentTypePrototype = DocumentType && DocumentType.prototype,\n ElementPrototype = (window.Element || Node || window.HTMLElement).prototype,\n HTMLSelectElement = window.HTMLSelectElement || createElement('select').constructor,\n selectRemove = HTMLSelectElement.prototype.remove,\n SVGElement = window.SVGElement,\n properties = [\n 'matches', (\n ElementPrototype.matchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.khtmlMatchesSelector ||\n ElementPrototype.mozMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n ElementPrototype.oMatchesSelector ||\n function matches(selector) {\n var parentNode = this.parentNode;\n return !!parentNode && -1 < indexOf.call(\n parentNode.querySelectorAll(selector),\n this\n );\n }\n ),\n 'closest', function closest(selector) {\n var parentNode = this, matches;\n while (\n // document has no .matches\n (matches = parentNode && parentNode.matches) &&\n !parentNode.matches(selector)\n ) {\n parentNode = parentNode.parentNode;\n }\n return matches ? parentNode : null;\n },\n 'prepend', function prepend() {\n var firstChild = this.firstChild,\n node = mutationMacro(arguments);\n if (firstChild) {\n this.insertBefore(node, firstChild);\n } else {\n this.appendChild(node);\n }\n },\n 'append', function append() {\n this.appendChild(mutationMacro(arguments));\n },\n 'before', function before() {\n var parentNode = this.parentNode;\n if (parentNode) {\n parentNode.insertBefore(\n mutationMacro(arguments), this\n );\n }\n },\n 'after', function after() {\n var parentNode = this.parentNode,\n nextSibling = this.nextSibling,\n node = mutationMacro(arguments);\n if (parentNode) {\n if (nextSibling) {\n parentNode.insertBefore(node, nextSibling);\n } else {\n parentNode.appendChild(node);\n }\n }\n },\n // https://dom.spec.whatwg.org/#dom-element-toggleattribute\n 'toggleAttribute', function toggleAttribute(name, force) {\n var had = this.hasAttribute(name);\n if (1 < arguments.length) {\n if (had && !force)\n this.removeAttribute(name);\n else if (force && !had)\n this.setAttribute(name, \"\");\n }\n else if (had)\n this.removeAttribute(name);\n else\n this.setAttribute(name, \"\");\n return this.hasAttribute(name);\n },\n // WARNING - DEPRECATED - use .replaceWith() instead\n 'replace', function replace() {\n this.replaceWith.apply(this, arguments);\n },\n 'replaceWith', function replaceWith() {\n var parentNode = this.parentNode;\n if (parentNode) {\n parentNode.replaceChild(\n mutationMacro(arguments),\n this\n );\n }\n },\n 'remove', function remove() {\n var parentNode = this.parentNode;\n if (parentNode) {\n parentNode.removeChild(this);\n }\n }\n ],\n slice = properties.slice,\n i = properties.length; i; i -= 2\n ) {\n property = properties[i - 2];\n if (!(property in ElementPrototype)) {\n ElementPrototype[property] = properties[i - 1];\n }\n // avoid unnecessary re-patch when the script is included\n // gazillion times without any reason whatsoever\n // https://github.com/WebReflection/dom4/pull/48\n if (property === 'remove' && !selectRemove._dom4) {\n // see https://github.com/WebReflection/dom4/issues/19\n (HTMLSelectElement.prototype[property] = function () {\n return 0 < arguments.length ?\n selectRemove.apply(this, arguments) :\n ElementPrototype.remove.call(this);\n })._dom4 = true;\n }\n // see https://github.com/WebReflection/dom4/issues/18\n if (/^(?:before|after|replace|replaceWith|remove)$/.test(property)) {\n if (CharacterData && !(property in CharacterDataPrototype)) {\n CharacterDataPrototype[property] = properties[i - 1];\n }\n if (DocumentType && !(property in DocumentTypePrototype)) {\n DocumentTypePrototype[property] = properties[i - 1];\n }\n }\n // see https://github.com/WebReflection/dom4/pull/26\n if (/^(?:append|prepend)$/.test(property)) {\n if (DocumentFragmentPrototype) {\n if (!(property in DocumentFragmentPrototype)) {\n DocumentFragmentPrototype[property] = properties[i - 1];\n }\n } else {\n try {\n createDocumentFragment().constructor.prototype[property] = properties[i - 1];\n } catch(o_O) {}\n }\n }\n }\n\n // most likely an IE9 only issue\n // see https://github.com/WebReflection/dom4/issues/6\n if (!createElement('a').matches('a')) {\n ElementPrototype[property] = function(matches){\n return function (selector) {\n return matches.call(\n this.parentNode ?\n this :\n createDocumentFragment().appendChild(this),\n selector\n );\n };\n }(ElementPrototype[property]);\n }\n\n // used to fix both old webkit and SVG\n DOMTokenList.prototype = {\n length: 0,\n add: function add() {\n for(var j = 0, token; j < arguments.length; j++) {\n token = arguments[j];\n if(!this.contains(token)) {\n properties.push.call(this, property);\n }\n }\n if (this._isSVG) {\n this._.setAttribute('class', '' + this);\n } else {\n this._.className = '' + this;\n }\n },\n contains: (function(indexOf){\n return function contains(token) {\n i = indexOf.call(this, property = verifyToken(token));\n return -1 < i;\n };\n }([].indexOf || function (token) {\n i = this.length;\n while(i-- && this[i] !== token){}\n return i;\n })),\n item: function item(i) {\n return this[i] || null;\n },\n remove: function remove() {\n for(var j = 0, token; j < arguments.length; j++) {\n token = arguments[j];\n if(this.contains(token)) {\n properties.splice.call(this, i, 1);\n }\n }\n if (this._isSVG) {\n this._.setAttribute('class', '' + this);\n } else {\n this._.className = '' + this;\n }\n },\n toggle: toggle,\n toString: function toString() {\n return properties.join.call(this, SPACE);\n }\n };\n\n if (SVGElement && !(CLASS_LIST in SVGElement.prototype)) {\n defineProperty(SVGElement.prototype, CLASS_LIST, classListDescriptor);\n }\n\n // http://www.w3.org/TR/dom/#domtokenlist\n // iOS 5.1 has completely screwed this property\n // classList in ElementPrototype is false\n // but it's actually there as getter\n if (!(CLASS_LIST in document.documentElement)) {\n defineProperty(ElementPrototype, CLASS_LIST, classListDescriptor);\n } else {\n // iOS 5.1 and Nokia ASHA do not support multiple add or remove\n // trying to detect and fix that in here\n TemporaryTokenList = createElement('div')[CLASS_LIST];\n TemporaryTokenList.add('a', 'b', 'a');\n if ('a\\x20b' != TemporaryTokenList) {\n // no other way to reach original methods in iOS 5.1\n TemporaryPrototype = TemporaryTokenList.constructor.prototype;\n if (!('add' in TemporaryPrototype)) {\n // ASHA double fails in here\n TemporaryPrototype = window.TemporaryTokenList.prototype;\n }\n wrapVerifyToken = function (original) {\n return function () {\n var i = 0;\n while (i < arguments.length) {\n original.call(this, arguments[i++]);\n }\n };\n };\n TemporaryPrototype.add = wrapVerifyToken(TemporaryPrototype.add);\n TemporaryPrototype.remove = wrapVerifyToken(TemporaryPrototype.remove);\n // toggle is broken too ^_^ ... let's fix it\n TemporaryPrototype.toggle = toggle;\n }\n }\n\n if (!('contains' in NodePrototype)) {\n defineProperty(NodePrototype, 'contains', {\n value: function (el) {\n while (el && el !== this) el = el.parentNode;\n return this === el;\n }\n });\n }\n\n if (!('head' in document)) {\n defineProperty(document, 'head', {\n get: function () {\n return head || (\n head = document.getElementsByTagName('head')[0]\n );\n }\n });\n }\n\n // requestAnimationFrame partial polyfill\n (function () {\n for (var\n raf,\n rAF = window.requestAnimationFrame,\n cAF = window.cancelAnimationFrame,\n prefixes = ['o', 'ms', 'moz', 'webkit'],\n i = prefixes.length;\n !cAF && i--;\n ) {\n rAF = rAF || window[prefixes[i] + 'RequestAnimationFrame'];\n cAF = window[prefixes[i] + 'CancelAnimationFrame'] ||\n window[prefixes[i] + 'CancelRequestAnimationFrame'];\n }\n if (!cAF) {\n // some FF apparently implemented rAF but no cAF \n if (rAF) {\n raf = rAF;\n rAF = function (callback) {\n var goOn = true;\n raf(function () {\n if (goOn) callback.apply(this, arguments);\n });\n return function () {\n goOn = false;\n };\n };\n cAF = function (id) {\n id();\n };\n } else {\n rAF = function (callback) {\n return setTimeout(callback, 15, 15);\n };\n cAF = function (id) {\n clearTimeout(id);\n };\n }\n }\n window.requestAnimationFrame = rAF;\n window.cancelAnimationFrame = cAF;\n }());\n\n // http://www.w3.org/TR/dom/#customevent\n try{new window.CustomEvent('?');}catch(o_O){\n window.CustomEvent = function(\n eventName,\n defaultInitDict\n ){\n\n // the infamous substitute\n function CustomEvent(type, eventInitDict) {\n /*jshint eqnull:true */\n var event = document.createEvent(eventName);\n if (typeof type != 'string') {\n throw new Error('An event name must be provided');\n }\n if (eventName == 'Event') {\n event.initCustomEvent = initCustomEvent;\n }\n if (eventInitDict == null) {\n eventInitDict = defaultInitDict;\n }\n event.initCustomEvent(\n type,\n eventInitDict.bubbles,\n eventInitDict.cancelable,\n eventInitDict.detail\n );\n return event;\n }\n\n // attached at runtime\n function initCustomEvent(\n type, bubbles, cancelable, detail\n ) {\n /*jshint validthis:true*/\n this.initEvent(type, bubbles, cancelable);\n this.detail = detail;\n }\n\n // that's it\n return CustomEvent;\n }(\n // is this IE9 or IE10 ?\n // where CustomEvent is there\n // but not usable as construtor ?\n window.CustomEvent ?\n // use the CustomEvent interface in such case\n 'CustomEvent' : 'Event',\n // otherwise the common compatible one\n {\n bubbles: false,\n cancelable: false,\n detail: null\n }\n );\n }\n\n // window.Event as constructor\n try { new Event('_'); } catch (o_O) {\n /* jshint -W022 */\n o_O = (function ($Event) {\n function Event(type, init) {\n enoughArguments(arguments.length, 'Event');\n var out = document.createEvent('Event');\n if (!init) init = {};\n out.initEvent(\n type,\n !!init.bubbles,\n !!init.cancelable\n );\n return out;\n }\n Event.prototype = $Event.prototype;\n return Event;\n }(window.Event || function Event() {}));\n defineProperty(window, 'Event', {value: o_O});\n // Android 4 gotcha\n if (Event !== o_O) Event = o_O;\n }\n\n // window.KeyboardEvent as constructor\n try { new KeyboardEvent('_', {}); } catch (o_O) {\n /* jshint -W022 */\n o_O = (function ($KeyboardEvent) {\n // code inspired by https://gist.github.com/termi/4654819\n var\n initType = 0,\n defaults = {\n char: '',\n key: '',\n location: 0,\n ctrlKey: false,\n shiftKey: false,\n altKey: false,\n metaKey: false,\n altGraphKey: false,\n repeat: false,\n locale: navigator.language,\n detail: 0,\n bubbles: false,\n cancelable: false,\n keyCode: 0,\n charCode: 0,\n which: 0\n },\n eventType\n ;\n try {\n var e = document.createEvent('KeyboardEvent');\n e.initKeyboardEvent(\n 'keyup', false, false, window, '+', 3,\n true, false, true, false, false\n );\n initType = (\n (e.keyIdentifier || e.key) == '+' &&\n (e.keyLocation || e.location) == 3\n ) && (\n e.ctrlKey ? e.altKey ? 1 : 3 : e.shiftKey ? 2 : 4\n ) || 9;\n } catch(o_O) {}\n eventType = 0 < initType ? 'KeyboardEvent' : 'Event';\n\n function getModifier(init) {\n for (var\n out = [],\n keys = [\n 'ctrlKey',\n 'Control',\n 'shiftKey',\n 'Shift',\n 'altKey',\n 'Alt',\n 'metaKey',\n 'Meta',\n 'altGraphKey',\n 'AltGraph'\n ],\n i = 0; i < keys.length; i += 2\n ) {\n if (init[keys[i]])\n out.push(keys[i + 1]);\n }\n return out.join(' ');\n }\n\n function withDefaults(target, source) {\n for (var key in source) {\n if (\n source.hasOwnProperty(key) &&\n !source.hasOwnProperty.call(target, key)\n ) target[key] = source[key];\n }\n return target;\n }\n\n function withInitValues(key, out, init) {\n try {\n out[key] = init[key];\n } catch(o_O) {}\n }\n\n function KeyboardEvent(type, init) {\n enoughArguments(arguments.length, 'KeyboardEvent');\n init = withDefaults(init || {}, defaults);\n var\n out = document.createEvent(eventType),\n ctrlKey = init.ctrlKey,\n shiftKey = init.shiftKey,\n altKey = init.altKey,\n metaKey = init.metaKey,\n altGraphKey = init.altGraphKey,\n modifiers = initType > 3 ? getModifier(init) : null,\n key = String(init.key),\n chr = String(init.char),\n location = init.location,\n keyCode = init.keyCode || (\n (init.keyCode = key) &&\n key.charCodeAt(0)\n ) || 0,\n charCode = init.charCode || (\n (init.charCode = chr) &&\n chr.charCodeAt(0)\n ) || 0,\n bubbles = init.bubbles,\n cancelable = init.cancelable,\n repeat = init.repeat,\n locale = init.locale,\n view = init.view || window,\n args\n ;\n if (!init.which) init.which = init.keyCode;\n if ('initKeyEvent' in out) {\n out.initKeyEvent(\n type, bubbles, cancelable, view,\n ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode\n );\n } else if (0 < initType && 'initKeyboardEvent' in out) {\n args = [type, bubbles, cancelable, view];\n switch (initType) {\n case 1:\n args.push(key, location, ctrlKey, shiftKey, altKey, metaKey, altGraphKey);\n break;\n case 2:\n args.push(ctrlKey, altKey, shiftKey, metaKey, keyCode, charCode);\n break;\n case 3:\n args.push(key, location, ctrlKey, altKey, shiftKey, metaKey, altGraphKey);\n break;\n case 4:\n args.push(key, location, modifiers, repeat, locale);\n break;\n default:\n args.push(char, key, location, modifiers, repeat, locale);\n }\n out.initKeyboardEvent.apply(out, args);\n } else {\n out.initEvent(type, bubbles, cancelable);\n }\n for (key in out) {\n if (defaults.hasOwnProperty(key) && out[key] !== init[key]) {\n withInitValues(key, out, init);\n }\n }\n return out;\n }\n KeyboardEvent.prototype = $KeyboardEvent.prototype;\n return KeyboardEvent;\n }(window.KeyboardEvent || function KeyboardEvent() {}));\n defineProperty(window, 'KeyboardEvent', {value: o_O});\n // Android 4 gotcha\n if (KeyboardEvent !== o_O) KeyboardEvent = o_O;\n }\n\n // window.MouseEvent as constructor\n try { new MouseEvent('_', {}); } catch (o_O) {\n /* jshint -W022 */\n o_O = (function ($MouseEvent) {\n function MouseEvent(type, init) {\n enoughArguments(arguments.length, 'MouseEvent');\n var out = document.createEvent('MouseEvent');\n if (!init) init = {};\n out.initMouseEvent(\n type,\n !!init.bubbles,\n !!init.cancelable,\n init.view || window,\n init.detail || 1,\n init.screenX || 0,\n init.screenY || 0,\n init.clientX || 0,\n init.clientY || 0,\n !!init.ctrlKey,\n !!init.altKey,\n !!init.shiftKey,\n !!init.metaKey,\n init.button || 0,\n init.relatedTarget || null\n );\n return out;\n }\n MouseEvent.prototype = $MouseEvent.prototype;\n return MouseEvent;\n }(window.MouseEvent || function MouseEvent() {}));\n defineProperty(window, 'MouseEvent', {value: o_O});\n // Android 4 gotcha\n if (MouseEvent !== o_O) MouseEvent = o_O;\n }\n\n if (!document.querySelectorAll('*').forEach) {\n (function () {\n function patch(what) {\n var querySelectorAll = what.querySelectorAll;\n what.querySelectorAll = function qSA(css) {\n var result = querySelectorAll.call(this, css);\n result.forEach = Array.prototype.forEach;\n return result;\n };\n }\n patch(document);\n patch(Element.prototype);\n }());\n }\n\n try {\n // https://drafts.csswg.org/selectors-4/#the-scope-pseudo\n document.querySelector(':scope *');\n } catch(o_O) {\n (function () {\n var dataScope = 'data-scope-' + (Math.random() * 1e9 >>> 0);\n var proto = Element.prototype;\n var querySelector = proto.querySelector;\n var querySelectorAll = proto.querySelectorAll;\n proto.querySelector = function qS(css) {\n return find(this, querySelector, css);\n };\n proto.querySelectorAll = function qSA(css) {\n return find(this, querySelectorAll, css);\n };\n function find(node, method, css) {\n node.setAttribute(dataScope, null);\n var result = method.call(\n node,\n String(css).replace(\n /(^|,\\s*)(:scope([ >]|$))/g,\n function ($0, $1, $2, $3) {\n return $1 + '[' + dataScope + ']' + ($3 || ' ');\n }\n )\n );\n node.removeAttribute(dataScope);\n return result;\n }\n }());\n }\n}(window));\n(function (global){'use strict';\n\n // a WeakMap fallback for DOM nodes only used as key\n var DOMMap = global.WeakMap || (function () {\n\n var\n counter = 0,\n dispatched = false,\n drop = false,\n value\n ;\n\n function dispatch(key, ce, shouldDrop) {\n drop = shouldDrop;\n dispatched = false;\n value = undefined;\n key.dispatchEvent(ce);\n }\n\n function Handler(value) {\n this.value = value;\n }\n\n Handler.prototype.handleEvent = function handleEvent(e) {\n dispatched = true;\n if (drop) {\n e.currentTarget.removeEventListener(e.type, this, false);\n } else {\n value = this.value;\n }\n };\n\n function DOMMap() {\n counter++; // make id clashing highly improbable\n this.__ce__ = new Event(('@DOMMap:' + counter) + Math.random());\n }\n\n DOMMap.prototype = {\n 'constructor': DOMMap,\n 'delete': function del(key) {\n return dispatch(key, this.__ce__, true), dispatched;\n },\n 'get': function get(key) {\n dispatch(key, this.__ce__, false);\n var v = value;\n value = undefined;\n return v;\n },\n 'has': function has(key) {\n return dispatch(key, this.__ce__, false), dispatched;\n },\n 'set': function set(key, value) {\n dispatch(key, this.__ce__, true);\n key.addEventListener(this.__ce__.type, new Handler(value), false);\n return this;\n },\n };\n\n return DOMMap;\n\n }());\n\n function Dict() {}\n Dict.prototype = (Object.create || Object)(null);\n\n // https://dom.spec.whatwg.org/#interface-eventtarget\n\n function createEventListener(type, callback, options) {\n function eventListener(e) {\n if (eventListener.once) {\n e.currentTarget.removeEventListener(\n e.type,\n callback,\n eventListener\n );\n eventListener.removed = true;\n }\n if (eventListener.passive) {\n e.preventDefault = createEventListener.preventDefault;\n }\n if (typeof eventListener.callback === 'function') {\n /* jshint validthis: true */\n eventListener.callback.call(this, e);\n } else if (eventListener.callback) {\n eventListener.callback.handleEvent(e);\n }\n if (eventListener.passive) {\n delete e.preventDefault;\n }\n }\n eventListener.type = type;\n eventListener.callback = callback;\n eventListener.capture = !!options.capture;\n eventListener.passive = !!options.passive;\n eventListener.once = !!options.once;\n // currently pointless but specs say to use it, so ...\n eventListener.removed = false;\n return eventListener;\n }\n\n createEventListener.preventDefault = function preventDefault() {};\n\n var\n Event = global.CustomEvent,\n dE = global.dispatchEvent,\n aEL = global.addEventListener,\n rEL = global.removeEventListener,\n counter = 0,\n increment = function () { counter++; },\n indexOf = [].indexOf || function indexOf(value){\n var length = this.length;\n while(length--) {\n if (this[length] === value) {\n break;\n }\n }\n return length;\n },\n getListenerKey = function (options) {\n return ''.concat(\n options.capture ? '1' : '0',\n options.passive ? '1' : '0',\n options.once ? '1' : '0'\n );\n },\n augment\n ;\n\n try {\n aEL('_', increment, {once: true});\n dE(new Event('_'));\n dE(new Event('_'));\n rEL('_', increment, {once: true});\n } catch(o_O) {}\n\n if (counter !== 1) {\n (function () {\n var dm = new DOMMap();\n function createAEL(aEL) {\n return function addEventListener(type, handler, options) {\n if (options && typeof options !== 'boolean') {\n var\n info = dm.get(this),\n key = getListenerKey(options),\n i, tmp, wrap\n ;\n if (!info) dm.set(this, (info = new Dict()));\n if (!(type in info)) info[type] = {\n handler: [],\n wrap: []\n };\n tmp = info[type];\n i = indexOf.call(tmp.handler, handler);\n if (i < 0) {\n i = tmp.handler.push(handler) - 1;\n tmp.wrap[i] = (wrap = new Dict());\n } else {\n wrap = tmp.wrap[i];\n }\n if (!(key in wrap)) {\n wrap[key] = createEventListener(type, handler, options);\n aEL.call(this, type, wrap[key], wrap[key].capture);\n }\n } else {\n aEL.call(this, type, handler, options);\n }\n };\n }\n function createREL(rEL) {\n return function removeEventListener(type, handler, options) {\n if (options && typeof options !== 'boolean') {\n var\n info = dm.get(this),\n key, i, tmp, wrap\n ;\n if (info && (type in info)) {\n tmp = info[type];\n i = indexOf.call(tmp.handler, handler);\n if (-1 < i) {\n key = getListenerKey(options);\n wrap = tmp.wrap[i];\n if (key in wrap) {\n rEL.call(this, type, wrap[key], wrap[key].capture);\n delete wrap[key];\n // return if there are other wraps\n for (key in wrap) return;\n // otherwise remove all the things\n tmp.handler.splice(i, 1);\n tmp.wrap.splice(i, 1);\n // if there are no other handlers\n if (tmp.handler.length === 0)\n // drop the info[type] entirely\n delete info[type];\n }\n }\n }\n } else {\n rEL.call(this, type, handler, options);\n }\n };\n }\n\n augment = function (Constructor) {\n if (!Constructor) return;\n var proto = Constructor.prototype;\n proto.addEventListener = createAEL(proto.addEventListener);\n proto.removeEventListener = createREL(proto.removeEventListener);\n };\n\n if (global.EventTarget) {\n augment(EventTarget);\n } else {\n augment(global.Text);\n augment(global.Element || global.HTMLElement);\n augment(global.HTMLDocument);\n augment(global.Window || {prototype:global});\n augment(global.XMLHttpRequest);\n }\n\n }());\n }\n\n}(self));\n","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _gud = require('gud');\n\nvar _gud2 = _interopRequireDefault(_gud);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\n// Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + (0, _gud2.default)() + '__';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n function Provider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Provider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n Provider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits = void 0;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0; // No change\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n if (process.env.NODE_ENV !== 'production') {\n (0, _warning2.default)((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n Provider.prototype.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(_react.Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes2.default.object.isRequired, _Provider$childContex);\n\n var Consumer = function (_Component2) {\n _inherits(Consumer, _Component2);\n\n function Consumer() {\n var _temp2, _this2, _ret2;\n\n _classCallCheck(this, Consumer);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = {\n value: _this2.getValue()\n }, _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({ value: _this2.getValue() });\n }\n }, _temp2), _possibleConstructorReturn(_this2, _ret2);\n }\n\n Consumer.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n var observedBits = this.props.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n Consumer.prototype.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n Consumer.prototype.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(_react.Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes2.default.object, _Consumer$contextType);\n\n\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nexports.default = createReactContext;\nmodule.exports = exports['default'];","// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _addClass = _interopRequireDefault(require(\"dom-helpers/class/addClass\"));\n\nvar _removeClass = _interopRequireDefault(require(\"dom-helpers/class/removeClass\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _addClass.default)(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _removeClass.default)(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](http://www.nganimate.org/) library, you should use it if you're\n * using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n * <div>\n * {\"I'll receive my-node-* classes\"}\n * </div>\n * </CSSTransition>\n * <button type=\"button\" onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity: 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**.\n */\n\n\nvar CSSTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.onEnter = function (node, appearing) {\n var _this$getClassNames = _this.getClassNames(appearing ? 'appear' : 'enter'),\n className = _this$getClassNames.className;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, className);\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node, appearing);\n }\n };\n\n _this.onEntering = function (node, appearing) {\n var _this$getClassNames2 = _this.getClassNames(appearing ? 'appear' : 'enter'),\n activeClassName = _this$getClassNames2.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onEntering) {\n _this.props.onEntering(node, appearing);\n }\n };\n\n _this.onEntered = function (node, appearing) {\n var appearClassName = _this.getClassNames('appear').doneClassName;\n\n var enterClassName = _this.getClassNames('enter').doneClassName;\n\n var doneClassName = appearing ? appearClassName + \" \" + enterClassName : enterClassName;\n\n _this.removeClasses(node, appearing ? 'appear' : 'enter');\n\n addClass(node, doneClassName);\n\n if (_this.props.onEntered) {\n _this.props.onEntered(node, appearing);\n }\n };\n\n _this.onExit = function (node) {\n var _this$getClassNames3 = _this.getClassNames('exit'),\n className = _this$getClassNames3.className;\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n addClass(node, className);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n _this.onExiting = function (node) {\n var _this$getClassNames4 = _this.getClassNames('exit'),\n activeClassName = _this$getClassNames4.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onExiting) {\n _this.props.onExiting(node);\n }\n };\n\n _this.onExited = function (node) {\n var _this$getClassNames5 = _this.getClassNames('exit'),\n doneClassName = _this$getClassNames5.doneClassName;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, doneClassName);\n\n if (_this.props.onExited) {\n _this.props.onExited(node);\n }\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + '-' : '';\n var className = isStringClassNames ? prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? className + '-active' : classNames[type + 'Active'];\n var doneClassName = isStringClassNames ? className + '-done' : classNames[type + 'Done'];\n return {\n className: className,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$getClassNames6 = this.getClassNames(type),\n className = _this$getClassNames6.className,\n activeClassName = _this$getClassNames6.activeClassName,\n doneClassName = _this$getClassNames6.doneClassName;\n\n className && removeClass(node, className);\n activeClassName && removeClass(node, activeClassName);\n doneClassName && removeClass(node, doneClassName);\n };\n\n _proto.reflowAndAddClass = function reflowAndAddClass(node, className) {\n // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n if (className) {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n /* eslint-enable no-unused-expressions */\n\n addClass(node, className);\n }\n };\n\n _proto.render = function render() {\n var props = _extends({}, this.props);\n\n delete props.classNames;\n return _react.default.createElement(_Transition.default, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(_react.default.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, _Transition.default.propTypes, {\n /**\n * The animation classNames applied to the component as it enters, exits or\n * has finished the transition. A single name can be provided and it will be\n * suffixed for each stage: e.g.\n *\n * `classNames=\"fade\"` applies `fade-enter`, `fade-enter-active`,\n * `fade-enter-done`, `fade-exit`, `fade-exit-active`, `fade-exit-done`,\n * `fade-appear`, `fade-appear-active`, and `fade-appear-done`.\n *\n * **Note**: `fade-appear-done` and `fade-enter-done` will _both_ be applied.\n * This allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply an\n * epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: _PropTypes.classNamesShape,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' class is\n * applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nvar _default = CSSTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = addClass;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nfunction addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className);\n}\n\nmodule.exports = exports[\"default\"];","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hasClass;\n\nfunction hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);else return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\nmodule.exports = exports[\"default\"];","'use strict';\n\nfunction replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp('(^|\\\\s)' + classToRemove + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/**\n * The `<ReplaceTransition>` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * <ReplaceTransition in>\n * <Fade><div>I appear first</div></Fade>\n * <Fade><div>I replace the above</div></Fade>\n * </ReplaceTransition>\n * ```\n */\nvar ReplaceTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReplaceTransition, _React$Component);\n\n function ReplaceTransition() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n _this.handleEnter = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _this.handleLifecycle('onEnter', 0, args);\n };\n\n _this.handleEntering = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return _this.handleLifecycle('onEntering', 0, args);\n };\n\n _this.handleEntered = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return _this.handleLifecycle('onEntered', 0, args);\n };\n\n _this.handleExit = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n return _this.handleLifecycle('onExit', 1, args);\n };\n\n _this.handleExiting = function () {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n return _this.handleLifecycle('onExiting', 1, args);\n };\n\n _this.handleExited = function () {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n return _this.handleLifecycle('onExited', 1, args);\n };\n\n return _this;\n }\n\n var _proto = ReplaceTransition.prototype;\n\n _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n var _child$props;\n\n var children = this.props.children;\n\n var child = _react.default.Children.toArray(children)[idx];\n\n if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n if (this.props[handler]) this.props[handler]((0, _reactDom.findDOMNode)(this));\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n inProp = _this$props.in,\n props = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\"]);\n\n var _React$Children$toArr = _react.default.Children.toArray(children),\n first = _React$Children$toArr[0],\n second = _React$Children$toArr[1];\n\n delete props.onEnter;\n delete props.onEntering;\n delete props.onEntered;\n delete props.onExit;\n delete props.onExiting;\n delete props.onExited;\n return _react.default.createElement(_TransitionGroup.default, props, inProp ? _react.default.cloneElement(first, {\n key: 'first',\n onEnter: this.handleEnter,\n onEntering: this.handleEntering,\n onEntered: this.handleEntered\n }) : _react.default.cloneElement(second, {\n key: 'second',\n onEnter: this.handleExit,\n onEntering: this.handleExiting,\n onEntered: this.handleExited\n }));\n };\n\n return ReplaceTransition;\n}(_react.default.Component);\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n in: _propTypes.default.bool.isRequired,\n children: function children(props, propName) {\n if (_react.default.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n return null;\n }\n} : {};\nvar _default = ReplaceTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar toStr = Object.prototype.toString;\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn toStr.call(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\ttoStr.call(value) !== '[object Array]' &&\n\t\ttoStr.call(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('es-abstract/helpers/callBind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\n/* globals\n\tAtomics,\n\tSharedArrayBuffer,\n*/\n\nvar undefined;\n\nvar $TypeError = TypeError;\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () { throw new $TypeError(); };\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar generator; // = function * () {};\nvar generatorFunction = generator ? getProto(generator) : undefined;\nvar asyncFn; // async function() {};\nvar asyncFunction = asyncFn ? asyncFn.constructor : undefined;\nvar asyncGen; // async function * () {};\nvar asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;\nvar asyncGenIterator = asyncGen ? asyncGen() : undefined;\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%ArrayPrototype%': Array.prototype,\n\t'%ArrayProto_entries%': Array.prototype.entries,\n\t'%ArrayProto_forEach%': Array.prototype.forEach,\n\t'%ArrayProto_keys%': Array.prototype.keys,\n\t'%ArrayProto_values%': Array.prototype.values,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': asyncFunction,\n\t'%AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,\n\t'%AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,\n\t'%AsyncGeneratorFunction%': asyncGenFunction,\n\t'%AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,\n\t'%AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%Boolean%': Boolean,\n\t'%BooleanPrototype%': Boolean.prototype,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,\n\t'%Date%': Date,\n\t'%DatePrototype%': Date.prototype,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%ErrorPrototype%': Error.prototype,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%EvalErrorPrototype%': EvalError.prototype,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,\n\t'%Function%': Function,\n\t'%FunctionPrototype%': Function.prototype,\n\t'%Generator%': generator ? getProto(generator()) : undefined,\n\t'%GeneratorFunction%': generatorFunction,\n\t'%GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%NumberPrototype%': Number.prototype,\n\t'%Object%': Object,\n\t'%ObjectPrototype%': Object.prototype,\n\t'%ObjProto_toString%': Object.prototype.toString,\n\t'%ObjProto_valueOf%': Object.prototype.valueOf,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,\n\t'%PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,\n\t'%Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,\n\t'%Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,\n\t'%Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%RangeErrorPrototype%': RangeError.prototype,\n\t'%ReferenceError%': ReferenceError,\n\t'%ReferenceErrorPrototype%': ReferenceError.prototype,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%RegExpPrototype%': RegExp.prototype,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%StringPrototype%': String.prototype,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,\n\t'%SyntaxError%': SyntaxError,\n\t'%SyntaxErrorPrototype%': SyntaxError.prototype,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,\n\t'%TypeError%': $TypeError,\n\t'%TypeErrorPrototype%': $TypeError.prototype,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,\n\t'%URIError%': URIError,\n\t'%URIErrorPrototype%': URIError.prototype,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\t'%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype\n};\n\nvar bind = require('function-bind');\nvar $replace = bind.call(Function.call, String.prototype.replace);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tif (!(name in INTRINSICS)) {\n\t\tthrow new SyntaxError('intrinsic ' + name + ' does not exist!');\n\t}\n\n\t// istanbul ignore if // hopefully this is impossible to test :-)\n\tif (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {\n\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t}\n\n\treturn INTRINSICS[name];\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\n\tvar value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);\n\tfor (var i = 1; i < parts.length; i += 1) {\n\t\tif (value != null) {\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, parts[i]);\n\t\t\t\tif (!allowMissing && !(parts[i] in value)) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\tvalue = desc ? (desc.get || desc.value) : value[parts[i]];\n\t\t\t} else {\n\t\t\t\tvalue = value[parts[i]];\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\nvar hasOwnProperty;\nvar regexExec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\tregexExec = Function.call.bind(RegExp.prototype.exec);\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar toStr = Object.prototype.toString;\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwnProperty(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tregexExec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn toStr.call(value) === regexClass;\n\t};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('es-abstract/helpers/callBind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'exports', '../utils'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, exports, require('../utils'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, mod.exports, global.utils);\n global.index = mod.exports;\n }\n})(this, function (module, exports, _utils) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n var diff = function diff(lhs, rhs) {\n if (lhs === rhs) return {}; // equal return no diff\n\n if (!(0, _utils.isObject)(lhs) || !(0, _utils.isObject)(rhs)) return rhs; // return updated rhs\n\n var l = (0, _utils.properObject)(lhs);\n var r = (0, _utils.properObject)(rhs);\n\n var deletedValues = Object.keys(l).reduce(function (acc, key) {\n return r.hasOwnProperty(key) ? acc : _extends({}, acc, _defineProperty({}, key, undefined));\n }, {});\n\n if ((0, _utils.isDate)(l) || (0, _utils.isDate)(r)) {\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce(function (acc, key) {\n if (!l.hasOwnProperty(key)) return _extends({}, acc, _defineProperty({}, key, r[key])); // return added r key\n\n var difference = diff(l[key], r[key]);\n\n if ((0, _utils.isObject)(difference) && (0, _utils.isEmpty)(difference) && !(0, _utils.isDate)(difference)) return acc; // return no diff\n\n return _extends({}, acc, _defineProperty({}, key, difference)); // return updated key\n }, deletedValues);\n };\n\n exports.default = diff;\n module.exports = exports['default'];\n});","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'exports', '../added', '../deleted', '../updated'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, exports, require('../added'), require('../deleted'), require('../updated'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, mod.exports, global.added, global.deleted, global.updated);\n global.index = mod.exports;\n }\n})(this, function (module, exports, _added, _deleted, _updated) {\n 'use strict';\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n\n var _added2 = _interopRequireDefault(_added);\n\n var _deleted2 = _interopRequireDefault(_deleted);\n\n var _updated2 = _interopRequireDefault(_updated);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var detailedDiff = function detailedDiff(lhs, rhs) {\n return {\n added: (0, _added2.default)(lhs, rhs),\n deleted: (0, _deleted2.default)(lhs, rhs),\n updated: (0, _updated2.default)(lhs, rhs)\n };\n };\n\n exports.default = detailedDiff;\n module.exports = exports['default'];\n});","'use strict'\n\nvar VMessage = require('vfile-message')\nvar VFile = require('./core.js')\n\nmodule.exports = VFile\n\nVFile.prototype.message = message\nVFile.prototype.info = info\nVFile.prototype.fail = fail\n\n// Create a message with `reason` at `position`.\n// When an error is passed in as `reason`, copies the stack.\nfunction message(reason, position, origin) {\n var message = new VMessage(reason, position, origin)\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n}\n\n// Fail: creates a vmessage, associates it with the file, and throws it.\nfunction fail() {\n var message = this.message.apply(this, arguments)\n\n message.fatal = true\n\n throw message\n}\n\n// Info: creates a vmessage, associates it with the file, and marks the fatality\n// as null.\nfunction info() {\n var message = this.message.apply(this, arguments)\n\n message.fatal = null\n\n return message\n}\n","'use strict'\n\nvar stringify = require('unist-util-stringify-position')\n\nmodule.exports = VMessage\n\n// Inherit from `Error#`.\nfunction VMessagePrototype() {}\nVMessagePrototype.prototype = Error.prototype\nVMessage.prototype = new VMessagePrototype()\n\n// Message properties.\nvar proto = VMessage.prototype\n\nproto.file = ''\nproto.name = ''\nproto.reason = ''\nproto.message = ''\nproto.stack = ''\nproto.fatal = null\nproto.column = null\nproto.line = null\n\n// Construct a new VMessage.\n//\n// Note: We cannot invoke `Error` on the created context, as that adds readonly\n// `line` and `column` attributes on Safari 9, thus throwing and failing the\n// data.\nfunction VMessage(reason, position, origin) {\n var parts\n var range\n var location\n\n if (typeof position === 'string') {\n origin = position\n position = null\n }\n\n parts = parseOrigin(origin)\n range = stringify(position) || '1:1'\n\n location = {\n start: {line: null, column: null},\n end: {line: null, column: null}\n }\n\n // Node.\n if (position && position.position) {\n position = position.position\n }\n\n if (position) {\n // Position.\n if (position.start) {\n location = position\n position = position.start\n } else {\n // Point.\n location.start = position\n }\n }\n\n if (reason.stack) {\n this.stack = reason.stack\n reason = reason.message\n }\n\n this.message = reason\n this.name = range\n this.reason = reason\n this.line = position ? position.line : null\n this.column = position ? position.column : null\n this.location = location\n this.source = parts[0]\n this.ruleId = parts[1]\n}\n\nfunction parseOrigin(origin) {\n var result = [null, null]\n var index\n\n if (typeof origin === 'string') {\n index = origin.indexOf(':')\n\n if (index === -1) {\n result[1] = origin\n } else {\n result[0] = origin.slice(0, index)\n result[1] = origin.slice(index + 1)\n }\n }\n\n return result\n}\n","'use strict'\n\nvar p = require('./minpath')\nvar proc = require('./minproc')\nvar buffer = require('is-buffer')\n\nmodule.exports = VFile\n\nvar own = {}.hasOwnProperty\n\n// Order of setting (least specific to most), we need this because otherwise\n// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n// stem can be set.\nvar order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nVFile.prototype.toString = toString\n\n// Access full path (`~/index.min.js`).\nObject.defineProperty(VFile.prototype, 'path', {get: getPath, set: setPath})\n\n// Access parent path (`~`).\nObject.defineProperty(VFile.prototype, 'dirname', {\n get: getDirname,\n set: setDirname\n})\n\n// Access basename (`index.min.js`).\nObject.defineProperty(VFile.prototype, 'basename', {\n get: getBasename,\n set: setBasename\n})\n\n// Access extname (`.js`).\nObject.defineProperty(VFile.prototype, 'extname', {\n get: getExtname,\n set: setExtname\n})\n\n// Access stem (`index.min`).\nObject.defineProperty(VFile.prototype, 'stem', {get: getStem, set: setStem})\n\n// Construct a new file.\nfunction VFile(options) {\n var prop\n var index\n\n if (!options) {\n options = {}\n } else if (typeof options === 'string' || buffer(options)) {\n options = {contents: options}\n } else if ('message' in options && 'messages' in options) {\n return options\n }\n\n if (!(this instanceof VFile)) {\n return new VFile(options)\n }\n\n this.data = {}\n this.messages = []\n this.history = []\n this.cwd = proc.cwd()\n\n // Set path related properties in the correct order.\n index = -1\n\n while (++index < order.length) {\n prop = order[index]\n\n if (own.call(options, prop)) {\n this[prop] = options[prop]\n }\n }\n\n // Set non-path related properties.\n for (prop in options) {\n if (order.indexOf(prop) < 0) {\n this[prop] = options[prop]\n }\n }\n}\n\nfunction getPath() {\n return this.history[this.history.length - 1]\n}\n\nfunction setPath(path) {\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n}\n\nfunction getDirname() {\n return typeof this.path === 'string' ? p.dirname(this.path) : undefined\n}\n\nfunction setDirname(dirname) {\n assertPath(this.path, 'dirname')\n this.path = p.join(dirname || '', this.basename)\n}\n\nfunction getBasename() {\n return typeof this.path === 'string' ? p.basename(this.path) : undefined\n}\n\nfunction setBasename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = p.join(this.dirname || '', basename)\n}\n\nfunction getExtname() {\n return typeof this.path === 'string' ? p.extname(this.path) : undefined\n}\n\nfunction setExtname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.path, 'extname')\n\n if (extname) {\n if (extname.charCodeAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.indexOf('.', 1) > -1) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = p.join(this.dirname, this.stem + (extname || ''))\n}\n\nfunction getStem() {\n return typeof this.path === 'string'\n ? p.basename(this.path, this.extname)\n : undefined\n}\n\nfunction setStem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = p.join(this.dirname || '', stem + (this.extname || ''))\n}\n\n// Get the value of the file.\nfunction toString(encoding) {\n return (this.contents || '').toString(encoding)\n}\n\n// Assert that `part` is not a path (i.e., does not contain `p.sep`).\nfunction assertPart(part, name) {\n if (part && part.indexOf(p.sep) > -1) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + p.sep + '`'\n )\n }\n}\n\n// Assert that `part` is not empty.\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n// Assert `path` exists.\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n","'use strict'\n\n// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexports.basename = basename\nexports.dirname = dirname\nexports.extname = extname\nexports.join = join\nexports.sep = '/'\n\nfunction basename(path, ext) {\n var start = 0\n var end = -1\n var index\n var firstNonSlashEnd\n var seenNonSlash\n var extIndex\n\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n index = path.length\n\n if (ext === undefined || !ext.length || ext.length > path.length) {\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (ext === path) {\n return ''\n }\n\n firstNonSlashEnd = -1\n extIndex = ext.length - 1\n\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\nfunction dirname(path) {\n var end\n var unmatchedSlash\n var index\n\n assertPath(path)\n\n if (!path.length) {\n return '.'\n }\n\n end = -1\n index = path.length\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.charCodeAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\nfunction extname(path) {\n var startDot = -1\n var startPart = 0\n var end = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n var preDotState = 0\n var unmatchedSlash\n var code\n var index\n\n assertPath(path)\n\n index = path.length\n\n while (index--) {\n code = path.charCodeAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\nfunction join() {\n var index = -1\n var joined\n\n while (++index < arguments.length) {\n assertPath(arguments[index])\n\n if (arguments[index]) {\n joined =\n joined === undefined\n ? arguments[index]\n : joined + '/' + arguments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n var absolute\n var value\n\n assertPath(path)\n\n absolute = path.charCodeAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n value = normalizeString(path, !absolute)\n\n if (!value.length && !absolute) {\n value = '.'\n }\n\n if (value.length && path.charCodeAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n// Resolve `.` and `..` elements in a path with directory names.\nfunction normalizeString(path, allowAboveRoot) {\n var result = ''\n var lastSegmentLength = 0\n var lastSlash = -1\n var dots = 0\n var index = -1\n var code\n var lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.charCodeAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n result.charCodeAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n /* istanbul ignore else - No clue how to cover it. */\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n","'use strict'\n\n// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexports.cwd = cwd\n\nfunction cwd() {\n return '/'\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict'\n\nvar bail = require('bail')\nvar buffer = require('is-buffer')\nvar extend = require('extend')\nvar plain = require('is-plain-obj')\nvar trough = require('trough')\nvar vfile = require('vfile')\n\n// Expose a frozen processor.\nmodule.exports = unified().freeze()\n\nvar slice = [].slice\nvar own = {}.hasOwnProperty\n\n// Process pipeline.\nvar pipeline = trough()\n .use(pipelineParse)\n .use(pipelineRun)\n .use(pipelineStringify)\n\nfunction pipelineParse(p, ctx) {\n ctx.tree = p.parse(ctx.file)\n}\n\nfunction pipelineRun(p, ctx, next) {\n p.run(ctx.tree, ctx.file, done)\n\n function done(error, tree, file) {\n if (error) {\n next(error)\n } else {\n ctx.tree = tree\n ctx.file = file\n next()\n }\n }\n}\n\nfunction pipelineStringify(p, ctx) {\n var result = p.stringify(ctx.tree, ctx.file)\n\n if (result === undefined || result === null) {\n // Empty.\n } else if (typeof result === 'string' || buffer(result)) {\n ctx.file.contents = result\n } else {\n ctx.file.result = result\n }\n}\n\n// Function to create the first processor.\nfunction unified() {\n var attachers = []\n var transformers = trough()\n var namespace = {}\n var freezeIndex = -1\n var frozen\n\n // Data management.\n processor.data = data\n\n // Lock.\n processor.freeze = freeze\n\n // Plugins.\n processor.attachers = attachers\n processor.use = use\n\n // API.\n processor.parse = parse\n processor.stringify = stringify\n processor.run = run\n processor.runSync = runSync\n processor.process = process\n processor.processSync = processSync\n\n // Expose.\n return processor\n\n // Create a new processor based on the processor in the current scope.\n function processor() {\n var destination = unified()\n var index = -1\n\n while (++index < attachers.length) {\n destination.use.apply(null, attachers[index])\n }\n\n destination.data(extend(true, {}, namespace))\n\n return destination\n }\n\n // Freeze: used to signal a processor that has finished configuration.\n //\n // For example, take unified itself: it’s frozen.\n // Plugins should not be added to it.\n // Rather, it should be extended, by invoking it, before modifying it.\n //\n // In essence, always invoke this when exporting a processor.\n function freeze() {\n var values\n var transformer\n\n if (frozen) {\n return processor\n }\n\n while (++freezeIndex < attachers.length) {\n values = attachers[freezeIndex]\n\n if (values[1] === false) {\n continue\n }\n\n if (values[1] === true) {\n values[1] = undefined\n }\n\n transformer = values[0].apply(processor, values.slice(1))\n\n if (typeof transformer === 'function') {\n transformers.use(transformer)\n }\n }\n\n frozen = true\n freezeIndex = Infinity\n\n return processor\n }\n\n // Data management.\n // Getter / setter for processor-specific informtion.\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen)\n namespace[key] = value\n return processor\n }\n\n // Get `key`.\n return (own.call(namespace, key) && namespace[key]) || null\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', frozen)\n namespace = key\n return processor\n }\n\n // Get space.\n return namespace\n }\n\n // Plugin management.\n //\n // Pass it:\n // * an attacher and options,\n // * a preset,\n // * a list of presets, attachers, and arguments (list of attachers and\n // options).\n function use(value) {\n var settings\n\n assertUnfrozen('use', frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin.apply(null, arguments)\n } else if (typeof value === 'object') {\n if ('length' in value) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`')\n }\n\n if (settings) {\n namespace.settings = extend(namespace.settings || {}, settings)\n }\n\n return processor\n\n function addPreset(result) {\n addList(result.plugins)\n\n if (result.settings) {\n settings = extend(settings || {}, result.settings)\n }\n }\n\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value)\n } else if (typeof value === 'object') {\n if ('length' in value) {\n addPlugin.apply(null, value)\n } else {\n addPreset(value)\n }\n } else {\n throw new Error('Expected usable value, not `' + value + '`')\n }\n }\n\n function addList(plugins) {\n var index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (typeof plugins === 'object' && 'length' in plugins) {\n while (++index < plugins.length) {\n add(plugins[index])\n }\n } else {\n throw new Error('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n function addPlugin(plugin, value) {\n var entry = find(plugin)\n\n if (entry) {\n if (plain(entry[1]) && plain(value)) {\n value = extend(true, entry[1], value)\n }\n\n entry[1] = value\n } else {\n attachers.push(slice.call(arguments))\n }\n }\n }\n\n function find(plugin) {\n var index = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n return attachers[index]\n }\n }\n }\n\n // Parse a file (in string or vfile representation) into a unist node using\n // the `Parser` on the processor.\n function parse(doc) {\n var file = vfile(doc)\n var Parser\n\n freeze()\n Parser = processor.Parser\n assertParser('parse', Parser)\n\n if (newable(Parser, 'parse')) {\n return new Parser(String(file), file).parse()\n }\n\n return Parser(String(file), file) // eslint-disable-line new-cap\n }\n\n // Run transforms on a unist node representation of a file (in string or\n // vfile representation), async.\n function run(node, file, cb) {\n assertNode(node)\n freeze()\n\n if (!cb && typeof file === 'function') {\n cb = file\n file = null\n }\n\n if (!cb) {\n return new Promise(executor)\n }\n\n executor(null, cb)\n\n function executor(resolve, reject) {\n transformers.run(node, vfile(file), done)\n\n function done(error, tree, file) {\n tree = tree || node\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(tree)\n } else {\n cb(null, tree, file)\n }\n }\n }\n }\n\n // Run transforms on a unist node representation of a file (in string or\n // vfile representation), sync.\n function runSync(node, file) {\n var result\n var complete\n\n run(node, file, done)\n\n assertDone('runSync', 'run', complete)\n\n return result\n\n function done(error, tree) {\n complete = true\n result = tree\n bail(error)\n }\n }\n\n // Stringify a unist node representation of a file (in string or vfile\n // representation) into a string using the `Compiler` on the processor.\n function stringify(node, doc) {\n var file = vfile(doc)\n var Compiler\n\n freeze()\n Compiler = processor.Compiler\n assertCompiler('stringify', Compiler)\n assertNode(node)\n\n if (newable(Compiler, 'compile')) {\n return new Compiler(node, file).compile()\n }\n\n return Compiler(node, file) // eslint-disable-line new-cap\n }\n\n // Parse a file (in string or vfile representation) into a unist node using\n // the `Parser` on the processor, then run transforms on that node, and\n // compile the resulting node using the `Compiler` on the processor, and\n // store that result on the vfile.\n function process(doc, cb) {\n freeze()\n assertParser('process', processor.Parser)\n assertCompiler('process', processor.Compiler)\n\n if (!cb) {\n return new Promise(executor)\n }\n\n executor(null, cb)\n\n function executor(resolve, reject) {\n var file = vfile(doc)\n\n pipeline.run(processor, {file: file}, done)\n\n function done(error) {\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n cb(null, file)\n }\n }\n }\n }\n\n // Process the given document (in string or vfile representation), sync.\n function processSync(doc) {\n var file\n var complete\n\n freeze()\n assertParser('processSync', processor.Parser)\n assertCompiler('processSync', processor.Compiler)\n file = vfile(doc)\n\n process(file, done)\n\n assertDone('processSync', 'process', complete)\n\n return file\n\n function done(error) {\n complete = true\n bail(error)\n }\n }\n}\n\n// Check if `value` is a constructor.\nfunction newable(value, name) {\n return (\n typeof value === 'function' &&\n value.prototype &&\n // A function with keys in its prototype is probably a constructor.\n // Classes’ prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n (keys(value.prototype) || name in value.prototype)\n )\n}\n\n// Check if `value` is an object with keys.\nfunction keys(value) {\n var key\n for (key in value) {\n return true\n }\n\n return false\n}\n\n// Assert a parser is available.\nfunction assertParser(name, Parser) {\n if (typeof Parser !== 'function') {\n throw new Error('Cannot `' + name + '` without `Parser`')\n }\n}\n\n// Assert a compiler is available.\nfunction assertCompiler(name, Compiler) {\n if (typeof Compiler !== 'function') {\n throw new Error('Cannot `' + name + '` without `Compiler`')\n }\n}\n\n// Assert the processor is not frozen.\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot invoke `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n// Assert `node` is a unist node.\nfunction assertNode(node) {\n if (!node || typeof node.type !== 'string') {\n throw new Error('Expected node, got `' + node + '`')\n }\n}\n\n// Assert that `complete` is `true`.\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n","'use strict'\n\nmodule.exports = bail\n\nfunction bail(err) {\n if (err) {\n throw err\n }\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","'use strict'\n\nvar wrap = require('./wrap.js')\n\nmodule.exports = trough\n\ntrough.wrap = wrap\n\nvar slice = [].slice\n\n// Create new middleware.\nfunction trough() {\n var fns = []\n var middleware = {}\n\n middleware.run = run\n middleware.use = use\n\n return middleware\n\n // Run `fns`. Last argument must be a completion handler.\n function run() {\n var index = -1\n var input = slice.call(arguments, 0, -1)\n var done = arguments[arguments.length - 1]\n\n if (typeof done !== 'function') {\n throw new Error('Expected function as last argument, not ' + done)\n }\n\n next.apply(null, [null].concat(input))\n\n // Run the next `fn`, if any.\n function next(err) {\n var fn = fns[++index]\n var params = slice.call(arguments, 0)\n var values = params.slice(1)\n var length = input.length\n var pos = -1\n\n if (err) {\n done(err)\n return\n }\n\n // Copy non-nully input into values.\n while (++pos < length) {\n if (values[pos] === null || values[pos] === undefined) {\n values[pos] = input[pos]\n }\n }\n\n input = values\n\n // Next or done.\n if (fn) {\n wrap(fn, next).apply(null, input)\n } else {\n done.apply(null, [null].concat(input))\n }\n }\n }\n\n // Add `fn` to the list.\n function use(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Expected `fn` to be a function, not ' + fn)\n }\n\n fns.push(fn)\n\n return middleware\n }\n}\n","'use strict'\n\nvar slice = [].slice\n\nmodule.exports = wrap\n\n// Wrap `fn`.\n// Can be sync or async; return a promise, receive a completion handler, return\n// new values and errors.\nfunction wrap(fn, callback) {\n var invoked\n\n return wrapped\n\n function wrapped() {\n var params = slice.call(arguments, 0)\n var callback = fn.length > params.length\n var result\n\n if (callback) {\n params.push(done)\n }\n\n try {\n result = fn.apply(null, params)\n } catch (error) {\n // Well, this is quite the pickle.\n // `fn` received a callback and invoked it (thus continuing the pipeline),\n // but later also threw an error.\n // We’re not about to restart the pipeline again, so the only thing left\n // to do is to throw the thing instead.\n if (callback && invoked) {\n throw error\n }\n\n return done(error)\n }\n\n if (!callback) {\n if (result && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n // Invoke `next`, only once.\n function done() {\n if (!invoked) {\n invoked = true\n\n callback.apply(null, arguments)\n }\n }\n\n // Invoke `done` with one value.\n // Tracks if an error is passed, too.\n function then(value) {\n done(null, value)\n }\n}\n","'use strict'\n\nmodule.exports = parse\n\nvar fromMarkdown = require('mdast-util-from-markdown')\n\nfunction parse(options) {\n var self = this\n\n this.Parser = parse\n\n function parse(doc) {\n return fromMarkdown(\n doc,\n Object.assign({}, self.data('settings'), options, {\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n )\n }\n}\n","'use strict'\n\nmodule.exports = require('./dist')\n","'use strict'\n\nmodule.exports = fromMarkdown\n\n// These three are compiled away in the `dist/`\n\nvar toString = require('mdast-util-to-string')\nvar assign = require('micromark/dist/constant/assign')\nvar own = require('micromark/dist/constant/has-own-property')\nvar normalizeIdentifier = require('micromark/dist/util/normalize-identifier')\nvar safeFromInt = require('micromark/dist/util/safe-from-int')\nvar parser = require('micromark/dist/parse')\nvar preprocessor = require('micromark/dist/preprocess')\nvar postprocess = require('micromark/dist/postprocess')\nvar decode = require('parse-entities/decode-entity')\nvar stringifyPosition = require('unist-util-stringify-position')\n\nfunction fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n\n return compiler(options)(\n postprocess(\n parser(options).document().write(preprocessor()(value, encoding, true))\n )\n )\n}\n\n// Note this compiler only understand complete buffering, not streaming.\nfunction compiler(options) {\n var settings = options || {}\n var config = configure(\n {\n transforms: [],\n canContainEols: [\n 'emphasis',\n 'fragment',\n 'heading',\n 'paragraph',\n 'strong'\n ],\n\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n },\n\n settings.mdastExtensions || []\n )\n\n var data = {}\n\n return compile\n\n function compile(events) {\n var tree = {type: 'root', children: []}\n var stack = [tree]\n var tokenStack = []\n var listStack = []\n var index = -1\n var handler\n var listStart\n\n var context = {\n stack: stack,\n tokenStack: tokenStack,\n config: config,\n enter: enter,\n exit: exit,\n buffer: buffer,\n resume: resume,\n setData: setData,\n getData: getData\n }\n\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n listStart = listStack.pop(index)\n index = prepareList(events, listStart, index)\n }\n }\n }\n\n index = -1\n\n while (++index < events.length) {\n handler = config[events[index][0]]\n\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n assign({sliceSerialize: events[index][2].sliceSerialize}, context),\n events[index][1]\n )\n }\n }\n\n if (tokenStack.length) {\n throw new Error(\n 'Cannot close document, a token (`' +\n tokenStack[tokenStack.length - 1].type +\n '`, ' +\n stringifyPosition({\n start: tokenStack[tokenStack.length - 1].start,\n end: tokenStack[tokenStack.length - 1].end\n }) +\n ') is still open'\n )\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length ? events[0][1].start : {line: 1, column: 1, offset: 0}\n ),\n\n end: point(\n events.length\n ? events[events.length - 2][1].end\n : {line: 1, column: 1, offset: 0}\n )\n }\n\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n\n return tree\n }\n\n function prepareList(events, start, length) {\n var index = start - 1\n var containerBalance = -1\n var listSpread = false\n var listItem\n var tailIndex\n var lineIndex\n var tailEvent\n var event\n var firstBlankLineIndex\n var atMarker\n\n while (++index <= length) {\n event = events[index]\n\n if (\n event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered' ||\n event[1].type === 'blockQuote'\n ) {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n\n atMarker = undefined\n } else if (event[1].type === 'lineEndingBlank') {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n\n atMarker = undefined\n }\n } else if (\n event[1].type === 'linePrefix' ||\n event[1].type === 'listItemValue' ||\n event[1].type === 'listItemMarker' ||\n event[1].type === 'listItemPrefix' ||\n event[1].type === 'listItemPrefixWhitespace'\n ) {\n // Empty.\n } else {\n atMarker = undefined\n }\n\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n tailIndex = index\n lineIndex = undefined\n\n while (tailIndex--) {\n tailEvent = events[tailIndex]\n\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = point(\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n listItem = {\n type: 'listItem',\n _spread: false,\n start: point(event[1].start)\n }\n\n events.splice(index, 0, ['enter', listItem, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n\n events[start][1]._spread = listSpread\n return length\n }\n\n function setData(key, value) {\n data[key] = value\n }\n\n function getData(key) {\n return data[key]\n }\n\n function point(d) {\n return {line: d.line, column: d.column, offset: d.offset}\n }\n\n function opener(create, and) {\n return open\n\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n function buffer() {\n this.stack.push({type: 'fragment', children: []})\n }\n\n function enter(node, token) {\n this.stack[this.stack.length - 1].children.push(node)\n this.stack.push(node)\n this.tokenStack.push(token)\n node.position = {start: point(token.start)}\n return node\n }\n\n function closer(and) {\n return close\n\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n function exit(token) {\n var node = this.stack.pop()\n var open = this.tokenStack.pop()\n\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({start: token.start, end: token.end}) +\n '): it’s not open'\n )\n } else if (open.type !== token.type) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({start: token.start, end: token.end}) +\n '): a different token (`' +\n open.type +\n '`, ' +\n stringifyPosition({start: open.start, end: open.end}) +\n ') is open'\n )\n }\n\n node.position.end = point(token.end)\n return node\n }\n\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true)\n }\n\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n this.stack[this.stack.length - 2].start = parseInt(\n this.sliceSerialize(token),\n 10\n )\n\n setData('expectingFirstListItemValue')\n }\n }\n\n function onexitcodefencedfenceinfo() {\n var data = this.resume()\n this.stack[this.stack.length - 1].lang = data\n }\n\n function onexitcodefencedfencemeta() {\n var data = this.resume()\n this.stack[this.stack.length - 1].meta = data\n }\n\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return\n this.buffer()\n setData('flowCodeInside', true)\n }\n\n function onexitcodefenced() {\n var data = this.resume()\n this.stack[this.stack.length - 1].value = data.replace(\n /^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g,\n ''\n )\n\n setData('flowCodeInside')\n }\n\n function onexitcodeindented() {\n var data = this.resume()\n this.stack[this.stack.length - 1].value = data\n }\n\n function onexitdefinitionlabelstring(token) {\n // Discard label, use the source content instead.\n var label = this.resume()\n this.stack[this.stack.length - 1].label = label\n this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n function onexitdefinitiontitlestring() {\n var data = this.resume()\n this.stack[this.stack.length - 1].title = data\n }\n\n function onexitdefinitiondestinationstring() {\n var data = this.resume()\n this.stack[this.stack.length - 1].url = data\n }\n\n function onexitatxheadingsequence(token) {\n if (!this.stack[this.stack.length - 1].depth) {\n this.stack[this.stack.length - 1].depth = this.sliceSerialize(\n token\n ).length\n }\n }\n\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true)\n }\n\n function onexitsetextheadinglinesequence(token) {\n this.stack[this.stack.length - 1].depth =\n this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n }\n\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding')\n }\n\n function onenterdata(token) {\n var siblings = this.stack[this.stack.length - 1].children\n var tail = siblings[siblings.length - 1]\n\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n tail.position = {start: point(token.start)}\n this.stack[this.stack.length - 1].children.push(tail)\n }\n\n this.stack.push(tail)\n }\n\n function onexitdata(token) {\n var tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n function onexitlineending(token) {\n var context = this.stack[this.stack.length - 1]\n\n // If we’re at a hard break, include the line ending in there.\n if (getData('atHardBreak')) {\n context.children[context.children.length - 1].position.end = point(\n token.end\n )\n\n setData('atHardBreak')\n return\n }\n\n if (\n !getData('setextHeadingSlurpLineEnding') &&\n config.canContainEols.indexOf(context.type) > -1\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n function onexithardbreak() {\n setData('atHardBreak', true)\n }\n\n function onexithtmlflow() {\n var data = this.resume()\n this.stack[this.stack.length - 1].value = data\n }\n\n function onexithtmltext() {\n var data = this.resume()\n this.stack[this.stack.length - 1].value = data\n }\n\n function onexitcodetext() {\n var data = this.resume()\n this.stack[this.stack.length - 1].value = data\n }\n\n function onexitlink() {\n var context = this.stack[this.stack.length - 1]\n\n // To do: clean.\n if (getData('inReference')) {\n context.type += 'Reference'\n context.referenceType = getData('referenceType') || 'shortcut'\n delete context.url\n delete context.title\n } else {\n delete context.identifier\n delete context.label\n delete context.referenceType\n }\n\n setData('referenceType')\n }\n\n function onexitimage() {\n var context = this.stack[this.stack.length - 1]\n\n // To do: clean.\n if (getData('inReference')) {\n context.type += 'Reference'\n context.referenceType = getData('referenceType') || 'shortcut'\n delete context.url\n delete context.title\n } else {\n delete context.identifier\n delete context.label\n delete context.referenceType\n }\n\n setData('referenceType')\n }\n\n function onexitlabeltext(token) {\n this.stack[this.stack.length - 2].identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n function onexitlabel() {\n var fragment = this.stack[this.stack.length - 1]\n var value = this.resume()\n\n this.stack[this.stack.length - 1].label = value\n\n // Assume a reference.\n setData('inReference', true)\n\n if (this.stack[this.stack.length - 1].type === 'link') {\n this.stack[this.stack.length - 1].children = fragment.children\n } else {\n this.stack[this.stack.length - 1].alt = value\n }\n }\n\n function onexitresourcedestinationstring() {\n var data = this.resume()\n this.stack[this.stack.length - 1].url = data\n }\n\n function onexitresourcetitlestring() {\n var data = this.resume()\n this.stack[this.stack.length - 1].title = data\n }\n\n function onexitresource() {\n setData('inReference')\n }\n\n function onenterreference() {\n setData('referenceType', 'collapsed')\n }\n\n function onexitreferencestring(token) {\n var label = this.resume()\n this.stack[this.stack.length - 1].label = label\n this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n setData('referenceType', 'full')\n }\n\n function onexitcharacterreferencemarker(token) {\n setData('characterReferenceType', token.type)\n }\n\n function onexitcharacterreferencevalue(token) {\n var data = this.sliceSerialize(token)\n var type = getData('characterReferenceType')\n var value\n var tail\n\n if (type) {\n value = safeFromInt(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n\n setData('characterReferenceType')\n } else {\n value = decode(data)\n }\n\n tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n this.stack[this.stack.length - 1].url = this.sliceSerialize(token)\n }\n\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n this.stack[this.stack.length - 1].url =\n 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n function blockQuote() {\n return {type: 'blockquote', children: []}\n }\n\n function codeFlow() {\n return {type: 'code', lang: null, meta: null, value: ''}\n }\n\n function codeText() {\n return {type: 'inlineCode', value: ''}\n }\n\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n function emphasis() {\n return {type: 'emphasis', children: []}\n }\n\n function heading() {\n return {type: 'heading', depth: undefined, children: []}\n }\n\n function hardBreak() {\n return {type: 'break'}\n }\n\n function html() {\n return {type: 'html', value: ''}\n }\n\n function image() {\n return {type: 'image', title: null, url: '', alt: null}\n }\n\n function link() {\n return {type: 'link', title: null, url: '', children: []}\n }\n\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n function paragraph() {\n return {type: 'paragraph', children: []}\n }\n\n function strong() {\n return {type: 'strong', children: []}\n }\n\n function text() {\n return {type: 'text', value: ''}\n }\n\n function thematicBreak() {\n return {type: 'thematicBreak'}\n }\n}\n\nfunction configure(config, extensions) {\n var index = -1\n\n while (++index < extensions.length) {\n extension(config, extensions[index])\n }\n\n return config\n}\n\nfunction extension(config, extension) {\n var key\n var left\n\n for (key in extension) {\n left = own.call(config, key) ? config[key] : (config[key] = {})\n\n if (key === 'canContainEols' || key === 'transforms') {\n config[key] = [].concat(left, extension[key])\n } else {\n Object.assign(left, extension[key])\n }\n }\n}\n","'use strict'\n\nmodule.exports = toString\n\n// Get the text content of a node.\n// Prefer the node’s plain-text fields, otherwise serialize its children,\n// and if the given value is an array, serialize the nodes in it.\nfunction toString(node) {\n return (\n (node &&\n (node.value ||\n node.alt ||\n node.title ||\n ('children' in node && all(node.children)) ||\n ('length' in node && all(node)))) ||\n ''\n )\n}\n\nfunction all(values) {\n var result = []\n var index = -1\n\n while (++index < values.length) {\n result[index] = toString(values[index])\n }\n\n return result.join('')\n}\n","'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction safeFromInt(value, base) {\n var code = parseInt(value, base)\n\n if (\n // C0 except for HT, LF, FF, CR, space\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) || // Noncharacters.\n (code > 64975 && code < 65008) ||\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 || // Out of range\n code > 1114111\n ) {\n return '\\uFFFD'\n }\n\n return fromCharCode(code)\n}\n\nmodule.exports = safeFromInt\n","'use strict'\n\nvar content = require('./initialize/content.js')\nvar document = require('./initialize/document.js')\nvar flow = require('./initialize/flow.js')\nvar text = require('./initialize/text.js')\nvar combineExtensions = require('./util/combine-extensions.js')\nvar createTokenizer = require('./util/create-tokenizer.js')\nvar miniflat = require('./util/miniflat.js')\nvar constructs = require('./constructs.js')\n\nfunction parse(options) {\n var settings = options || {}\n var parser = {\n defined: [],\n constructs: combineExtensions(\n [constructs].concat(miniflat(settings.extensions))\n ),\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(text.string),\n text: create(text.text)\n }\n return parser\n\n function create(initializer) {\n return creator\n\n function creator(from) {\n return createTokenizer(parser, initializer, from)\n }\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('../tokenize/factory-space.js')\n\nvar tokenize = initializeContent\n\nfunction initializeContent(effects) {\n var contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n var previous\n return contentStart\n\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, contentStart, 'linePrefix')\n }\n\n function paragraphInitial(code) {\n effects.enter('paragraph')\n return lineStart(code)\n }\n\n function lineStart(code) {\n var token = effects.enter('chunkText', {\n contentType: 'text',\n previous: previous\n })\n\n if (previous) {\n previous.next = token\n }\n\n previous = token\n return data(code)\n }\n\n function data(code) {\n if (code === null) {\n effects.exit('chunkText')\n effects.exit('paragraph')\n effects.consume(code)\n return\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n effects.exit('chunkText')\n return lineStart\n } // Data.\n\n effects.consume(code)\n return data\n }\n}\n\nexports.tokenize = tokenize\n","'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('../tokenize/factory-space.js')\nvar partialBlankLine = require('../tokenize/partial-blank-line.js')\n\nvar tokenize = initializeDocument\nvar containerConstruct = {\n tokenize: tokenizeContainer\n}\nvar lazyFlowConstruct = {\n tokenize: tokenizeLazyFlow\n}\n\nfunction initializeDocument(effects) {\n var self = this\n var stack = []\n var continued = 0\n var inspectConstruct = {\n tokenize: tokenizeInspect,\n partial: true\n }\n var inspectResult\n var childFlow\n var childToken\n return start\n\n function start(code) {\n if (continued < stack.length) {\n self.containerState = stack[continued][1]\n return effects.attempt(\n stack[continued][0].continuation,\n documentContinue,\n documentContinued\n )(code)\n }\n\n return documentContinued(code)\n }\n\n function documentContinue(code) {\n continued++\n return start(code)\n }\n\n function documentContinued(code) {\n // If we’re in a concrete construct (such as when expecting another line of\n // HTML, or we resulted in lazy content), we can immediately start flow.\n if (inspectResult && inspectResult.flowContinue) {\n return flowStart(code)\n }\n\n self.interrupt =\n childFlow &&\n childFlow.currentConstruct &&\n childFlow.currentConstruct.interruptible\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n\n function containerContinue(code) {\n stack.push([self.currentConstruct, self.containerState])\n self.containerState = undefined\n return documentContinued(code)\n }\n\n function flowStart(code) {\n if (code === null) {\n exitContainers(0, true)\n effects.consume(code)\n return\n }\n\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n })\n return flowContinue(code)\n }\n\n function flowContinue(code) {\n if (code === null) {\n continueFlow(effects.exit('chunkFlow'))\n return flowStart(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n continueFlow(effects.exit('chunkFlow'))\n return effects.check(inspectConstruct, documentAfterPeek)\n }\n\n effects.consume(code)\n return flowContinue\n }\n\n function documentAfterPeek(code) {\n exitContainers(\n inspectResult.continued,\n inspectResult && inspectResult.flowEnd\n )\n continued = 0\n return start(code)\n }\n\n function continueFlow(token) {\n if (childToken) childToken.next = token\n childToken = token\n childFlow.lazy = inspectResult && inspectResult.lazy\n childFlow.defineSkip(token.start)\n childFlow.write(self.sliceStream(token))\n }\n\n function exitContainers(size, end) {\n var index = stack.length // Close the flow.\n\n if (childFlow && end) {\n childFlow.write([null])\n childToken = childFlow = undefined\n } // Exit open containers.\n\n while (index-- > size) {\n self.containerState = stack[index][1]\n stack[index][0].exit.call(self, effects)\n }\n\n stack.length = size\n }\n\n function tokenizeInspect(effects, ok) {\n var subcontinued = 0\n inspectResult = {}\n return inspectStart\n\n function inspectStart(code) {\n if (subcontinued < stack.length) {\n self.containerState = stack[subcontinued][1]\n return effects.attempt(\n stack[subcontinued][0].continuation,\n inspectContinue,\n inspectLess\n )(code)\n } // If we’re continued but in a concrete flow, we can’t have more\n // containers.\n\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n inspectResult.flowContinue = true\n return inspectDone(code)\n }\n\n self.interrupt =\n childFlow.currentConstruct && childFlow.currentConstruct.interruptible\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n inspectFlowEnd,\n inspectDone\n )(code)\n }\n\n function inspectContinue(code) {\n subcontinued++\n return self.containerState._closeFlow\n ? inspectFlowEnd(code)\n : inspectStart(code)\n }\n\n function inspectLess(code) {\n if (childFlow.currentConstruct && childFlow.currentConstruct.lazy) {\n // Maybe another container?\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n inspectFlowEnd, // Maybe flow, or a blank line?\n effects.attempt(\n lazyFlowConstruct,\n inspectFlowEnd,\n effects.check(partialBlankLine, inspectFlowEnd, inspectLazy)\n )\n )(code)\n } // Otherwise we’re interrupting.\n\n return inspectFlowEnd(code)\n }\n\n function inspectLazy(code) {\n // Act as if all containers are continued.\n subcontinued = stack.length\n inspectResult.lazy = true\n inspectResult.flowContinue = true\n return inspectDone(code)\n } // We’re done with flow if we have more containers, or an interruption.\n\n function inspectFlowEnd(code) {\n inspectResult.flowEnd = true\n return inspectDone(code)\n }\n\n function inspectDone(code) {\n inspectResult.continued = subcontinued\n self.interrupt = self.containerState = undefined\n return ok(code)\n }\n }\n}\n\nfunction tokenizeContainer(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )\n}\n\nfunction tokenizeLazyFlow(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.lazy(this.parser.constructs.flow, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )\n}\n\nexports.tokenize = tokenize\n","'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar content = require('../tokenize/content.js')\nvar factorySpace = require('../tokenize/factory-space.js')\nvar partialBlankLine = require('../tokenize/partial-blank-line.js')\n\nvar tokenize = initializeFlow\n\nfunction initializeFlow(effects) {\n var self = this\n var initial = effects.attempt(\n // Try to parse a blank line.\n partialBlankLine,\n atBlankEnding, // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n\nexports.tokenize = tokenize\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar subtokenize = require('../util/subtokenize.js')\nvar factorySpace = require('./factory-space.js')\n\n// No name because it must not be turned off.\nvar content = {\n tokenize: tokenizeContent,\n resolve: resolveContent,\n interruptible: true,\n lazy: true\n}\nvar continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n} // Content is transparent: it’s parsed right now. That way, definitions are also\n// parsed right now: before text in paragraphs (specifically, media) are parsed.\n\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n\nfunction tokenizeContent(effects, ok) {\n var previous\n return start\n\n function start(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return data(code)\n }\n\n function data(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n\n function contentContinue(code) {\n effects.consume(code)\n effects.exit('chunkContent')\n previous = previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous: previous\n })\n return data\n }\n}\n\nfunction tokenizeContinuation(effects, ok, nok) {\n var self = this\n return startLookahead\n\n function startLookahead(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, prefixed, 'linePrefix')\n }\n\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n if (\n self.parser.constructs.disable.null.indexOf('codeIndented') > -1 ||\n prefixSize(self.events, 'linePrefix') < 4\n ) {\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n\n return ok(code)\n }\n}\n\nmodule.exports = content\n","'use strict'\n\nvar splice = [].splice\n\nmodule.exports = splice\n","'use strict'\n\nvar assign = require('../constant/assign.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar chunkedPush = require('./chunked-push.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar miniflat = require('./miniflat.js')\nvar resolveAll = require('./resolve-all.js')\nvar serializeChunks = require('./serialize-chunks.js')\nvar shallow = require('./shallow.js')\nvar sliceChunks = require('./slice-chunks.js')\n\n// Create a tokenizer.\n// Tokenizers deal with one type of data (e.g., containers, flow, text).\n// The parser is the object dealing with it all.\n// `initialize` works like other constructs, except that only its `tokenize`\n// function is used, in which case it doesn’t receive an `ok` or `nok`.\n// `from` can be given to set the point before the first character, although\n// when further lines are indented, they must be set with `defineSkip`.\nfunction createTokenizer(parser, initialize, from) {\n var point = from\n ? shallow(from)\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n var columnStart = {}\n var resolveAllConstructs = []\n var chunks = []\n var stack = []\n\n var effects = {\n consume: consume,\n enter: enter,\n exit: exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n }),\n lazy: constructFactory(onsuccessfulcheck, {\n lazy: true\n })\n } // State and tools for resolving and serializing.\n\n var context = {\n previous: null,\n events: [],\n parser: parser,\n sliceStream: sliceStream,\n sliceSerialize: sliceSerialize,\n now: now,\n defineSkip: skip,\n write: write\n } // The state function.\n\n var state = initialize.tokenize.call(context, effects) // Track which character we expect to be consumed, to catch bugs.\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n } // Store where we are in the input stream.\n\n point._index = 0\n point._bufferIndex = -1\n return context\n\n function write(slice) {\n chunks = chunkedPush(chunks, slice)\n main() // Exit if we’re not done, resolve might change stuff.\n\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n\n addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n } //\n // Tools.\n //\n\n function sliceSerialize(token) {\n return serializeChunks(sliceStream(token))\n }\n\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n\n function now() {\n return shallow(point)\n }\n\n function skip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n } //\n // State management.\n //\n // Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n // `consume`).\n // Here is where we walk through the chunks, which either include strings of\n // several characters, or numerical character codes.\n // The reason to do this in a loop instead of a call is so the stack can\n // drain.\n\n function main() {\n var chunkIndex\n var chunk\n\n while (point._index < chunks.length) {\n chunk = chunks[point._index] // If we’re in a buffer chunk, loop through it.\n\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n } // Deal with one code.\n\n function go(code) {\n state = state(code)\n } // Move a character forward.\n\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n } // Not in a string chunk.\n\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++ // At end of string chunk.\n\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n } // Expose the previous character.\n\n context.previous = code // Mark as consumed.\n } // Start a token.\n\n function enter(type, fields) {\n var token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n } // Stop a token.\n\n function exit(type) {\n var token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n } // Use results.\n\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n } // Discard results.\n\n function onsuccessfulcheck(construct, info) {\n info.restore()\n } // Factory to attempt/check/interrupt.\n\n function constructFactory(onreturn, fields) {\n return hook // Handle either an object mapping codes to constructs, a list of\n // constructs, or a single construct.\n\n function hook(constructs, returnState, bogusState) {\n var listOfConstructs\n var constructIndex\n var currentConstruct\n var info\n return constructs.tokenize || 'length' in constructs\n ? handleListOfConstructs(miniflat(constructs))\n : handleMapOfConstructs\n\n function handleMapOfConstructs(code) {\n if (code in constructs || null in constructs) {\n return handleListOfConstructs(\n constructs.null\n ? /* c8 ignore next */\n miniflat(constructs[code]).concat(miniflat(constructs.null))\n : constructs[code]\n )(code)\n }\n\n return bogusState(code)\n }\n\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n return handleConstruct(list[constructIndex])\n }\n\n function handleConstruct(construct) {\n return start\n\n function start(code) {\n // To do: not nede to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.indexOf(construct.name) > -1\n ) {\n return nok()\n }\n\n return construct.tokenize.call(\n fields ? assign({}, context, fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n\n function ok(code) {\n onreturn(currentConstruct, info)\n return returnState\n }\n\n function nok(code) {\n info.restore()\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n\n return bogusState\n }\n }\n }\n\n function addResult(construct, from) {\n if (construct.resolveAll && resolveAllConstructs.indexOf(construct) < 0) {\n resolveAllConstructs.push(construct)\n }\n\n if (construct.resolve) {\n chunkedSplice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n\n function store() {\n var startPoint = now()\n var startPrevious = context.previous\n var startCurrentConstruct = context.currentConstruct\n var startEventsIndex = context.events.length\n var startStack = Array.from(stack)\n return {\n restore: restore,\n from: startEventsIndex\n }\n\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n\nmodule.exports = createTokenizer\n","'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction serializeChunks(chunks) {\n var index = -1\n var result = []\n var chunk\n var value\n var atTab\n\n while (++index < chunks.length) {\n chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n value = chunk\n } else if (chunk === -5) {\n value = '\\r'\n } else if (chunk === -4) {\n value = '\\n'\n } else if (chunk === -3) {\n value = '\\r' + '\\n'\n } else if (chunk === -2) {\n value = '\\t'\n } else if (chunk === -1) {\n if (atTab) continue\n value = ' '\n } else {\n // Currently only replacement character.\n value = fromCharCode(chunk)\n }\n\n atTab = chunk === -2\n result.push(value)\n }\n\n return result.join('')\n}\n\nmodule.exports = serializeChunks\n","'use strict'\n\nfunction sliceChunks(chunks, token) {\n var startIndex = token.start._index\n var startBufferIndex = token.start._bufferIndex\n var endIndex = token.end._index\n var endBufferIndex = token.end._bufferIndex\n var view\n\n if (startIndex === endIndex) {\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n\n if (startBufferIndex > -1) {\n view[0] = view[0].slice(startBufferIndex)\n }\n\n if (endBufferIndex > 0) {\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n\n return view\n}\n\nmodule.exports = sliceChunks\n","'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar text$1 = require('./initialize/text.js')\nvar attention = require('./tokenize/attention.js')\nvar autolink = require('./tokenize/autolink.js')\nvar blockQuote = require('./tokenize/block-quote.js')\nvar characterEscape = require('./tokenize/character-escape.js')\nvar characterReference = require('./tokenize/character-reference.js')\nvar codeFenced = require('./tokenize/code-fenced.js')\nvar codeIndented = require('./tokenize/code-indented.js')\nvar codeText = require('./tokenize/code-text.js')\nvar definition = require('./tokenize/definition.js')\nvar hardBreakEscape = require('./tokenize/hard-break-escape.js')\nvar headingAtx = require('./tokenize/heading-atx.js')\nvar htmlFlow = require('./tokenize/html-flow.js')\nvar htmlText = require('./tokenize/html-text.js')\nvar labelEnd = require('./tokenize/label-end.js')\nvar labelStartImage = require('./tokenize/label-start-image.js')\nvar labelStartLink = require('./tokenize/label-start-link.js')\nvar lineEnding = require('./tokenize/line-ending.js')\nvar list = require('./tokenize/list.js')\nvar setextUnderline = require('./tokenize/setext-underline.js')\nvar thematicBreak = require('./tokenize/thematic-break.js')\n\nvar document = {\n 42: list,\n // Asterisk\n 43: list,\n // Plus sign\n 45: list,\n // Dash\n 48: list,\n // 0\n 49: list,\n // 1\n 50: list,\n // 2\n 51: list,\n // 3\n 52: list,\n // 4\n 53: list,\n // 5\n 54: list,\n // 6\n 55: list,\n // 7\n 56: list,\n // 8\n 57: list,\n // 9\n 62: blockQuote // Greater than\n}\nvar contentInitial = {\n 91: definition // Left square bracket\n}\nvar flowInitial = {\n '-2': codeIndented,\n // Horizontal tab\n '-1': codeIndented,\n // Virtual space\n 32: codeIndented // Space\n}\nvar flow = {\n 35: headingAtx,\n // Number sign\n 42: thematicBreak,\n // Asterisk\n 45: [setextUnderline, thematicBreak],\n // Dash\n 60: htmlFlow,\n // Less than\n 61: setextUnderline,\n // Equals to\n 95: thematicBreak,\n // Underscore\n 96: codeFenced,\n // Grave accent\n 126: codeFenced // Tilde\n}\nvar string = {\n 38: characterReference,\n // Ampersand\n 92: characterEscape // Backslash\n}\nvar text = {\n '-5': lineEnding,\n // Carriage return\n '-4': lineEnding,\n // Line feed\n '-3': lineEnding,\n // Carriage return + line feed\n 33: labelStartImage,\n // Exclamation mark\n 38: characterReference,\n // Ampersand\n 42: attention,\n // Asterisk\n 60: [autolink, htmlText],\n // Less than\n 91: labelStartLink,\n // Left square bracket\n 92: [hardBreakEscape, characterEscape],\n // Backslash\n 93: labelEnd,\n // Right square bracket\n 95: attention,\n // Underscore\n 96: codeText // Grave accent\n}\nvar insideSpan = {\n null: [attention, text$1.resolver]\n}\nvar disable = {\n null: []\n}\n\nexports.contentInitial = contentInitial\nexports.disable = disable\nexports.document = document\nexports.flow = flow\nexports.flowInitial = flowInitial\nexports.insideSpan = insideSpan\nexports.string = string\nexports.text = text\n","'use strict'\n\nvar chunkedPush = require('../util/chunked-push.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar classifyCharacter = require('../util/classify-character.js')\nvar movePoint = require('../util/move-point.js')\nvar resolveAll = require('../util/resolve-all.js')\nvar shallow = require('../util/shallow.js')\n\nvar attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n\nfunction resolveAllAttention(events, context) {\n var index = -1\n var open\n var group\n var text\n var openingSequence\n var closingSequence\n var use\n var nextEvents\n var offset // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'attentionSequence' &&\n events[index][1]._close\n ) {\n open = index // Now walk back to find an opener.\n\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'attentionSequence' &&\n events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n context.sliceSerialize(events[index][1]).charCodeAt(0)\n ) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if (\n (events[open][1]._close || events[index][1]._open) &&\n (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n !(\n (events[open][1].end.offset -\n events[open][1].start.offset +\n events[index][1].end.offset -\n events[index][1].start.offset) %\n 3\n )\n ) {\n continue\n } // Number of markers to use from the sequence.\n\n use =\n events[open][1].end.offset - events[open][1].start.offset > 1 &&\n events[index][1].end.offset - events[index][1].start.offset > 1\n ? 2\n : 1\n openingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: movePoint(shallow(events[open][1].end), -use),\n end: shallow(events[open][1].end)\n }\n closingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: shallow(events[index][1].start),\n end: movePoint(shallow(events[index][1].start), use)\n }\n text = {\n type: use > 1 ? 'strongText' : 'emphasisText',\n start: shallow(events[open][1].end),\n end: shallow(events[index][1].start)\n }\n group = {\n type: use > 1 ? 'strong' : 'emphasis',\n start: shallow(openingSequence.start),\n end: shallow(closingSequence.end)\n }\n events[open][1].end = shallow(openingSequence.start)\n events[index][1].start = shallow(closingSequence.end)\n nextEvents = [] // If there are more markers in the opening, add them before.\n\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = chunkedPush(nextEvents, [\n ['enter', events[open][1], context],\n ['exit', events[open][1], context]\n ])\n } // Opening.\n\n nextEvents = chunkedPush(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ]) // Between.\n\n nextEvents = chunkedPush(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n ) // Closing.\n\n nextEvents = chunkedPush(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ]) // If there are more markers in the closing, add them after.\n\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2\n nextEvents = chunkedPush(nextEvents, [\n ['enter', events[index][1], context],\n ['exit', events[index][1], context]\n ])\n } else {\n offset = 0\n }\n\n chunkedSplice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n } // Remove remaining sequences.\n\n index = -1\n\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n\n return events\n}\n\nfunction tokenizeAttention(effects, ok) {\n var before = classifyCharacter(this.previous)\n var marker\n return start\n\n function start(code) {\n effects.enter('attentionSequence')\n marker = code\n return sequence(code)\n }\n\n function sequence(code) {\n var token\n var after\n var open\n var close\n\n if (code === marker) {\n effects.consume(code)\n return sequence\n }\n\n token = effects.exit('attentionSequence')\n after = classifyCharacter(code)\n open = !after || (after === 2 && before)\n close = !before || (before === 2 && after)\n token._open = marker === 42 ? open : open && (before || !close)\n token._close = marker === 42 ? close : close && (after || !open)\n return ok(code)\n }\n}\n\nmodule.exports = attention\n","'use strict'\n\n// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\nvar unicodePunctuation = /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n\nmodule.exports = unicodePunctuation\n","'use strict'\n\n// chunks (replacement characters, tabs, or line endings).\n\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n return point\n}\n\nmodule.exports = movePoint\n","'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar asciiAtext = require('../character/ascii-atext.js')\nvar asciiControl = require('../character/ascii-control.js')\n\nvar autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n\nfunction tokenizeAutolink(effects, ok, nok) {\n var size = 1\n return start\n\n function start(code) {\n effects.enter('autolink')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.enter('autolinkProtocol')\n return open\n }\n\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n\n return asciiAtext(code) ? emailAtext(code) : nok(code)\n }\n\n function schemeOrEmailAtext(code) {\n return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n ? schemeInsideOrEmailAtext(code)\n : emailAtext(code)\n }\n\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n return urlInside\n }\n\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n\n return emailAtext(code)\n }\n\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n return end(code)\n }\n\n if (code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return urlInside\n }\n\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n\n return nok(code)\n }\n\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (code === 62) {\n // Exit, then change the type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n return end(code)\n }\n\n return emailValue(code)\n }\n\n function emailValue(code) {\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n effects.consume(code)\n return code === 45 ? emailValue : emailLabel\n }\n\n return nok(code)\n }\n\n function end(code) {\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n}\n\nmodule.exports = autolink\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\nmodule.exports = asciiAtext\n","'use strict'\n\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit: exit\n}\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n var self = this\n return start\n\n function start(code) {\n if (code === 62) {\n if (!self.containerState.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n self.containerState.open = true\n }\n\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n\n return nok(code)\n }\n\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace')\n effects.consume(code)\n effects.exit('blockQuotePrefixWhitespace')\n effects.exit('blockQuotePrefix')\n return ok\n }\n\n effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(blockQuote, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )\n}\n\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n\nmodule.exports = blockQuote\n","'use strict'\n\nvar asciiPunctuation = require('../character/ascii-punctuation.js')\n\nvar characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n\n function start(code) {\n effects.enter('characterEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n effects.exit('escapeMarker')\n return open\n }\n\n function open(code) {\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue')\n effects.consume(code)\n effects.exit('characterEscapeValue')\n effects.exit('characterEscape')\n return ok\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = characterEscape\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\nmodule.exports = asciiPunctuation\n","'use strict'\n\nvar decodeEntity = require('parse-entities/decode-entity.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar asciiDigit = require('../character/ascii-digit.js')\nvar asciiHexDigit = require('../character/ascii-hex-digit.js')\n\nfunction _interopDefaultLegacy(e) {\n return e && typeof e === 'object' && 'default' in e ? e : {default: e}\n}\n\nvar decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy(decodeEntity)\n\nvar characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n var self = this\n var size = 0\n var max\n var test\n return start\n\n function start(code) {\n effects.enter('characterReference')\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n return open\n }\n\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric')\n effects.consume(code)\n effects.exit('characterReferenceMarkerNumeric')\n return numeric\n }\n\n effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal')\n effects.consume(code)\n effects.exit('characterReferenceMarkerHexadecimal')\n effects.enter('characterReferenceValue')\n max = 6\n test = asciiHexDigit\n return value\n }\n\n effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n\n function value(code) {\n var token\n\n if (code === 59 && size) {\n token = effects.exit('characterReferenceValue')\n\n if (\n test === asciiAlphanumeric &&\n !decodeEntity__default['default'](self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = characterReference\n","'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\nmodule.exports = asciiHexDigit\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar factorySpace = require('./factory-space.js')\n\nvar codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n var self = this\n var closingFenceConstruct = {\n tokenize: tokenizeClosingFence,\n partial: true\n }\n var initialPrefix = prefixSize(this.events, 'linePrefix')\n var sizeOpen = 0\n var marker\n return start\n\n function start(code) {\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n marker = code\n return sequenceOpen(code)\n }\n\n function sequenceOpen(code) {\n if (code === marker) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n effects.exit('codeFencedFenceSequence')\n return sizeOpen < 3\n ? nok(code)\n : factorySpace(effects, infoOpen, 'whitespace')(code)\n }\n\n function infoOpen(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n\n function info(code) {\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, infoAfter, 'whitespace')(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return info\n }\n\n function infoAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceMeta')\n return openAfter(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return meta\n }\n\n function openAfter(code) {\n effects.exit('codeFencedFence')\n return self.interrupt ? ok(code) : content(code)\n }\n\n function content(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return effects.attempt(\n closingFenceConstruct,\n after,\n initialPrefix\n ? factorySpace(effects, content, 'linePrefix', initialPrefix + 1)\n : content\n )\n }\n\n effects.enter('codeFlowValue')\n return contentContinue(code)\n }\n\n function contentContinue(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return content(code)\n }\n\n effects.consume(code)\n return contentContinue\n }\n\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n\n function tokenizeClosingFence(effects, ok, nok) {\n var size = 0\n return factorySpace(\n effects,\n closingSequenceStart,\n 'linePrefix',\n this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )\n\n function closingSequenceStart(code) {\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return closingSequence(code)\n }\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return closingSequence\n }\n\n if (size < sizeOpen) return nok(code)\n effects.exit('codeFencedFenceSequence')\n return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n }\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n\n return nok(code)\n }\n }\n}\n\nmodule.exports = codeFenced\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar factorySpace = require('./factory-space.js')\n\nvar codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented,\n resolve: resolveCodeIndented\n}\nvar indentedContentConstruct = {\n tokenize: tokenizeIndentedContent,\n partial: true\n}\n\nfunction resolveCodeIndented(events, context) {\n var code = {\n type: 'codeIndented',\n start: events[0][1].start,\n end: events[events.length - 1][1].end\n }\n chunkedSplice(events, 0, 0, [['enter', code, context]])\n chunkedSplice(events, events.length, 0, [['exit', code, context]])\n return events\n}\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n return effects.attempt(indentedContentConstruct, afterPrefix, nok)\n\n function afterPrefix(code) {\n if (code === null) {\n return ok(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(indentedContentConstruct, afterPrefix, ok)(code)\n }\n\n effects.enter('codeFlowValue')\n return content(code)\n }\n\n function content(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return afterPrefix(code)\n }\n\n effects.consume(code)\n return content\n }\n}\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n var self = this\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)\n\n function afterPrefix(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)\n }\n\n return prefixSize(self.events, 'linePrefix') < 4 ? nok(code) : ok(code)\n }\n}\n\nmodule.exports = codeIndented\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\nvar codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous: previous\n}\n\nfunction resolveCodeText(events) {\n var tailExitIndex = events.length - 4\n var headEnterIndex = 3\n var index\n var enter // If we start and end with an EOL or a space.\n\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex // And we have data.\n\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[tailExitIndex][1].type = events[headEnterIndex][1].type =\n 'codeTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n } // Merge adjacent spaces and data.\n\n index = headEnterIndex - 1\n tailExitIndex++\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'codeTextData'\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return events\n}\n\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 96 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n\nfunction tokenizeCodeText(effects, ok, nok) {\n var sizeOpen = 0\n var size\n var token\n return start\n\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return openingSequence(code)\n }\n\n function openingSequence(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return openingSequence\n }\n\n effects.exit('codeTextSequence')\n return gap(code)\n }\n\n function gap(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n } // Closing fence?\n // Could also be data.\n\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return closingSequence(code)\n } // Tabs don’t work, and virtual spaces don’t make sense.\n\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return gap\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return gap\n } // Data.\n\n effects.enter('codeTextData')\n return data(code)\n } // In code.\n\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 96 ||\n markdownLineEnding(code)\n ) {\n effects.exit('codeTextData')\n return gap(code)\n }\n\n effects.consume(code)\n return data\n } // Closing fence.\n\n function closingSequence(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return closingSequence\n } // Done!\n\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n } // More or less accents: mark as data.\n\n token.type = 'codeTextData'\n return data(code)\n }\n}\n\nmodule.exports = codeText\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar normalizeIdentifier = require('../util/normalize-identifier.js')\nvar factoryDestination = require('./factory-destination.js')\nvar factoryLabel = require('./factory-label.js')\nvar factorySpace = require('./factory-space.js')\nvar factoryWhitespace = require('./factory-whitespace.js')\nvar factoryTitle = require('./factory-title.js')\n\nvar definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\nvar titleConstruct = {\n tokenize: tokenizeTitle,\n partial: true\n}\n\nfunction tokenizeDefinition(effects, ok, nok) {\n var self = this\n var identifier\n return start\n\n function start(code) {\n effects.enter('definition')\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n\n function labelAfter(code) {\n identifier = normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker') // Note: blank lines can’t exist in content.\n\n return factoryWhitespace(\n effects,\n factoryDestination(\n effects,\n effects.attempt(\n titleConstruct,\n factorySpace(effects, after, 'whitespace'),\n factorySpace(effects, after, 'whitespace')\n ),\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )\n )\n }\n\n return nok(code)\n }\n\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n if (self.parser.defined.indexOf(identifier) < 0) {\n self.parser.defined.push(identifier)\n }\n\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nfunction tokenizeTitle(effects, ok, nok) {\n return start\n\n function start(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, before)(code)\n : nok(code)\n }\n\n function before(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factorySpace(effects, after, 'whitespace'),\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n return nok(code)\n }\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n\nmodule.exports = definition\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\nvar hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n return open\n }\n\n function open(code) {\n if (markdownLineEnding(code)) {\n effects.exit('escapeMarker')\n effects.exit('hardBreakEscape')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = hardBreakEscape\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar factorySpace = require('./factory-space.js')\n\nvar headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n\nfunction resolveHeadingAtx(events, context) {\n var contentEnd = events.length - 2\n var contentStart = 3\n var content\n var text // Prefix whitespace, part of the opening.\n\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n } // Suffix whitespace, part of the closing.\n\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\n }\n\n if (\n events[contentEnd][1].type === 'atxHeadingSequence' &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === 'whitespace'))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: 'text'\n }\n chunkedSplice(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n\n return events\n}\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n var self = this\n var size = 0\n return start\n\n function start(code) {\n effects.enter('atxHeading')\n effects.enter('atxHeadingSequence')\n return fenceOpenInside(code)\n }\n\n function fenceOpenInside(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return fenceOpenInside\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return self.interrupt ? ok(code) : headingBreak(code)\n }\n\n return nok(code)\n }\n\n function headingBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequence(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n return ok(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, headingBreak, 'whitespace')(code)\n }\n\n effects.enter('atxHeadingText')\n return data(code)\n }\n\n function sequence(code) {\n if (code === 35) {\n effects.consume(code)\n return sequence\n }\n\n effects.exit('atxHeadingSequence')\n return headingBreak(code)\n }\n\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return headingBreak(code)\n }\n\n effects.consume(code)\n return data\n }\n}\n\nmodule.exports = headingAtx\n","'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar fromCharCode = require('../constant/from-char-code.js')\nvar htmlBlockNames = require('../constant/html-block-names.js')\nvar htmlRawNames = require('../constant/html-raw-names.js')\nvar partialBlankLine = require('./partial-blank-line.js')\n\nvar htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\nvar nextBlankConstruct = {\n tokenize: tokenizeNextBlank,\n partial: true\n}\n\nfunction resolveToHtmlFlow(events) {\n var index = events.length\n\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\n }\n }\n\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n events.splice(index - 2, 2)\n }\n\n return events\n}\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n var self = this\n var kind\n var startTag\n var buffer\n var index\n var marker\n return start\n\n function start(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationStart\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n kind = 3 // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = fromCharCode(code)\n startTag = true\n return tagName\n }\n\n return nok(code)\n }\n\n function declarationStart(code) {\n if (code === 45) {\n effects.consume(code)\n kind = 2\n return commentOpenInside\n }\n\n if (code === 91) {\n effects.consume(code)\n kind = 5\n buffer = 'CDATA['\n index = 0\n return cdataOpenInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n kind = 4\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n\n function cdataOpenInside(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length\n ? self.interrupt\n ? ok\n : continuation\n : cdataOpenInside\n }\n\n return nok(code)\n }\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n\n function tagName(code) {\n if (\n code === null ||\n code === 47 ||\n code === 62 ||\n markdownLineEndingOrSpace(code)\n ) {\n if (\n code !== 47 &&\n startTag &&\n htmlRawNames.indexOf(buffer.toLowerCase()) > -1\n ) {\n kind = 1\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n if (htmlBlockNames.indexOf(buffer.toLowerCase()) > -1) {\n kind = 6\n\n if (code === 47) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n kind = 7 // Do not support complete HTML when interrupting.\n\n return self.interrupt\n ? nok(code)\n : startTag\n ? completeAttributeNameBefore(code)\n : completeClosingTagAfter(code)\n }\n\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n return self.interrupt ? ok : continuation\n }\n\n return nok(code)\n }\n\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n\n return completeEnd(code)\n }\n\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n\n return completeEnd(code)\n }\n\n function completeAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n\n return completeAttributeNameAfter(code)\n }\n\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n\n return completeAttributeNameBefore(code)\n }\n\n function completeAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return completeAttributeValueQuoted\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n marker = undefined\n return completeAttributeValueUnquoted(code)\n }\n\n function completeAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n return completeAttributeValueQuotedAfter\n }\n\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n\n return nok(code)\n }\n\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n\n function completeAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n\n return code === null || markdownLineEnding(code)\n ? continuation(code)\n : nok(code)\n }\n\n function continuation(code) {\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n\n if (code === 60 && kind === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n\n if (code === 62 && kind === 4) {\n effects.consume(code)\n return continuationClose\n }\n\n if (code === 63 && kind === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n if (code === 93 && kind === 5) {\n effects.consume(code)\n return continuationCharacterDataInside\n }\n\n if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n return effects.check(\n nextBlankConstruct,\n continuationClose,\n continuationAtLineEnding\n )(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n return continuationAtLineEnding(code)\n }\n\n effects.consume(code)\n return continuation\n }\n\n function continuationAtLineEnding(code) {\n effects.exit('htmlFlowData')\n return htmlContinueStart(code)\n }\n\n function htmlContinueStart(code) {\n if (code === null) {\n return done(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return htmlContinueStart\n }\n\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n\n function continuationRawEndTag(code) {\n if (code === 62 && htmlRawNames.indexOf(buffer.toLowerCase()) > -1) {\n effects.consume(code)\n return continuationClose\n }\n\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n buffer += fromCharCode(code)\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n\n function continuationCharacterDataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n }\n\n return continuation(code)\n }\n\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return done(code)\n }\n\n effects.consume(code)\n return continuationClose\n }\n\n function done(code) {\n effects.exit('htmlFlow')\n return ok(code)\n }\n}\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n return start\n\n function start(code) {\n effects.exit('htmlFlowData')\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n return effects.attempt(partialBlankLine, ok, nok)\n }\n}\n\nmodule.exports = htmlFlow\n","'use strict'\n\n// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.\nvar basics = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'source',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\nmodule.exports = basics\n","'use strict'\n\n// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.\nvar raws = ['pre', 'script', 'style', 'textarea']\n\nmodule.exports = raws\n","'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n var self = this\n var marker\n var buffer\n var index\n var returnState\n return start\n\n function start(code) {\n effects.enter('htmlText')\n effects.enter('htmlTextData')\n effects.consume(code)\n return open\n }\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n return nok(code)\n }\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpen\n }\n\n if (code === 91) {\n effects.consume(code)\n buffer = 'CDATA['\n index = 0\n return cdataOpen\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n\n return nok(code)\n }\n\n function commentOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentStart\n }\n\n return nok(code)\n }\n\n function commentStart(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentStartDash\n }\n\n return comment(code)\n }\n\n function commentStartDash(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n return comment(code)\n }\n\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = comment\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return comment\n }\n\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return end\n }\n\n return comment(code)\n }\n\n function cdataOpen(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length ? cdata : cdataOpen\n }\n\n return nok(code)\n }\n\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = cdata\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return cdata\n }\n\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = declaration\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return declaration\n }\n\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = instruction\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return instruction\n }\n\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return nok(code)\n }\n\n function tagClose(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return tagCloseBetween(code)\n }\n\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n\n return end(code)\n }\n\n function tagOpen(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n\n return end(code)\n }\n\n function tagOpenAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n return tagOpenAttributeNameAfter(code)\n }\n\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n\n return tagOpenBetween(code)\n }\n\n function tagOpenAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueUnquoted\n }\n\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n return tagOpenAttributeValueQuotedAfter\n }\n\n if (code === null) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n } // We can’t have blank lines in content, so no need to worry about empty\n // tokens.\n\n function atLineEnding(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(\n effects,\n afterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )\n }\n\n function afterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n\n function end(code) {\n if (code === 62) {\n effects.consume(code)\n effects.exit('htmlTextData')\n effects.exit('htmlText')\n return ok\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = htmlText\n","'use strict'\n\nvar labelEnd = require('./label-end.js')\n\nvar labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n var self = this\n return start\n\n function start(code) {\n effects.enter('labelImage')\n effects.enter('labelImageMarker')\n effects.consume(code)\n effects.exit('labelImageMarker')\n return open\n }\n\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelImage')\n return after\n }\n\n return nok(code)\n }\n\n function after(code) {\n /* c8 ignore next */\n return code === 94 &&\n /* c8 ignore next */\n '_hiddenFootnoteSupport' in self.parser.constructs\n ? /* c8 ignore next */\n nok(code)\n : ok(code)\n }\n}\n\nmodule.exports = labelStartImage\n","'use strict'\n\nvar labelEnd = require('./label-end.js')\n\nvar labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n var self = this\n return start\n\n function start(code) {\n effects.enter('labelLink')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelLink')\n return after\n }\n\n function after(code) {\n /* c8 ignore next */\n return code === 94 &&\n /* c8 ignore next */\n '_hiddenFootnoteSupport' in self.parser.constructs\n ? /* c8 ignore next */\n nok(code)\n : ok(code)\n }\n}\n\nmodule.exports = labelStartLink\n","'use strict'\n\nvar factorySpace = require('./factory-space.js')\n\nvar lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n\nfunction tokenizeLineEnding(effects, ok) {\n return start\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, ok, 'linePrefix')\n }\n}\n\nmodule.exports = lineEnding\n","'use strict'\n\nvar asciiDigit = require('../character/ascii-digit.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar sizeChunks = require('../util/size-chunks.js')\nvar factorySpace = require('./factory-space.js')\nvar partialBlankLine = require('./partial-blank-line.js')\nvar thematicBreak = require('./thematic-break.js')\n\nvar list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\nvar listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\nvar indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n\nfunction tokenizeListStart(effects, ok, nok) {\n var self = this\n var initialSize = prefixSize(self.events, 'linePrefix')\n var size = 0\n return start\n\n function start(code) {\n var kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\n\n if (\n kind === 'listUnordered'\n ? !self.containerState.marker || code === self.containerState.marker\n : asciiDigit(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {\n _container: true\n })\n }\n\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix')\n return code === 42 || code === 45\n ? effects.check(thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n\n return nok(code)\n }\n\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\n }\n\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === 41 || code === 46)\n ) {\n effects.exit('listItemValue')\n return atMarker(code)\n }\n\n return nok(code)\n }\n\n function atMarker(code) {\n effects.enter('listItemMarker')\n effects.consume(code)\n effects.exit('listItemMarker')\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n partialBlankLine, // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace')\n effects.consume(code)\n effects.exit('listItemPrefixWhitespace')\n return endOfPrefix\n }\n\n return nok(code)\n }\n\n function endOfPrefix(code) {\n self.containerState.size =\n initialSize + sizeChunks(self.sliceStream(effects.exit('listItemPrefix')))\n return ok(code)\n }\n}\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n var self = this\n self.containerState._closeFlow = undefined\n return effects.check(partialBlankLine, onBlank, notBlank)\n\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine // We have a blank line.\n // Still, try to consume at most the items size.\n\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n\n self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true // As we’re closing flow, we’re no longer interrupting.\n\n self.interrupt = undefined\n return factorySpace(\n effects,\n effects.attempt(list, ok, nok),\n 'linePrefix',\n self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4\n )(code)\n }\n}\n\nfunction tokenizeIndent(effects, ok, nok) {\n var self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemIndent',\n self.containerState.size + 1\n )\n\n function afterPrefix(code) {\n return prefixSize(self.events, 'listItemIndent') ===\n self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n var self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n ? undefined\n : 4 + 1\n )\n\n function afterPrefix(code) {\n return markdownSpace(code) ||\n !prefixSize(self.events, 'listItemPrefixWhitespace')\n ? nok(code)\n : ok(code)\n }\n}\n\nmodule.exports = list\n","'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar shallow = require('../util/shallow.js')\nvar factorySpace = require('./factory-space.js')\n\nvar setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n\nfunction resolveToSetextUnderline(events, context) {\n var index = events.length\n var content\n var text\n var definition\n var heading // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n\n if (events[index][1].type === 'paragraph') {\n text = index\n }\n } // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1)\n }\n\n if (!definition && events[index][1].type === 'definition') {\n definition = index\n }\n }\n }\n\n heading = {\n type: 'setextHeading',\n start: shallow(events[text][1].start),\n end: shallow(events[events.length - 1][1].end)\n } // Change the paragraph to setext heading text.\n\n events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = shallow(events[definition][1].end)\n } else {\n events[content][1] = heading\n } // Add the heading exit at the end.\n\n events.push(['exit', heading, context])\n return events\n}\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n var self = this\n var index = self.events.length\n var marker\n var paragraph // Find an opening.\n\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== 'lineEnding' &&\n self.events[index][1].type !== 'linePrefix' &&\n self.events[index][1].type !== 'content'\n ) {\n paragraph = self.events[index][1].type === 'paragraph'\n break\n }\n }\n\n return start\n\n function start(code) {\n if (!self.lazy && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n effects.enter('setextHeadingLineSequence')\n marker = code\n return closingSequence(code)\n }\n\n return nok(code)\n }\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n return closingSequence\n }\n\n effects.exit('setextHeadingLineSequence')\n return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n }\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nmodule.exports = setextUnderline\n","'use strict'\n\nvar search = /[\\0\\t\\n\\r]/g\n\nfunction preprocess() {\n var start = true\n var column = 1\n var buffer = ''\n var atCarriageReturn\n return preprocessor\n\n function preprocessor(value, encoding, end) {\n var chunks = []\n var match\n var next\n var startPosition\n var endPosition\n var code\n value = buffer + value.toString(encoding)\n startPosition = 0\n buffer = ''\n\n if (start) {\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n\n start = undefined\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition = match ? match.index : value.length\n code = value.charCodeAt(endPosition)\n\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n\n if (code === 0) {\n chunks.push(65533)\n column++\n } else if (code === 9) {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n\n while (column++ < next) chunks.push(-1)\n } else if (code === 10) {\n chunks.push(-4)\n column = 1\n } // Must be carriage return.\n else {\n atCarriageReturn = true\n column = 1\n }\n }\n\n startPosition = endPosition + 1\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n\n return chunks\n }\n}\n\nmodule.exports = preprocess\n","'use strict'\n\nvar subtokenize = require('./util/subtokenize.js')\n\nfunction postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n\n return events\n}\n\nmodule.exports = postprocess\n","'use strict'\n\nvar mdast2hast = require('mdast-util-to-hast')\n\nmodule.exports = remark2rehype\n\n// Attacher.\n// If a destination is given, runs the destination with the new hast tree\n// (bridge mode).\n// Without destination, returns the tree: further plugins run on that tree\n// (mutate mode).\nfunction remark2rehype(destination, options) {\n if (destination && !destination.process) {\n options = destination\n destination = null\n }\n\n return destination ? bridge(destination, options) : mutate(options)\n}\n\n// Bridge mode.\n// Runs the destination with the new hast tree.\nfunction bridge(destination, options) {\n return transformer\n\n function transformer(node, file, next) {\n destination.run(mdast2hast(node, options), file, done)\n\n function done(error) {\n next(error)\n }\n }\n}\n\n// Mutate-mode.\n// Further transformers run on the hast tree.\nfunction mutate(options) {\n return transformer\n\n function transformer(node) {\n return mdast2hast(node, options)\n }\n}\n","'use strict'\nmodule.exports = require('./lib')\n","'use strict'\n\nmodule.exports = toHast\n\nvar u = require('unist-builder')\nvar visit = require('unist-util-visit')\nvar position = require('unist-util-position')\nvar generated = require('unist-util-generated')\nvar definitions = require('mdast-util-definitions')\nvar one = require('./one')\nvar footer = require('./footer')\nvar handlers = require('./handlers')\n\nvar own = {}.hasOwnProperty\n\nvar deprecationWarningIssued = false\n\n// Factory to transform.\nfunction factory(tree, options) {\n var settings = options || {}\n\n // Issue a warning if the deprecated tag 'allowDangerousHTML' is used\n if (settings.allowDangerousHTML !== undefined && !deprecationWarningIssued) {\n deprecationWarningIssued = true\n console.warn(\n 'mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead'\n )\n }\n\n var dangerous = settings.allowDangerousHtml || settings.allowDangerousHTML\n var footnoteById = {}\n\n h.dangerous = dangerous\n h.definition = definitions(tree)\n h.footnoteById = footnoteById\n h.footnoteOrder = []\n h.augment = augment\n h.handlers = Object.assign({}, handlers, settings.handlers)\n h.unknownHandler = settings.unknownHandler\n h.passThrough = settings.passThrough\n\n visit(tree, 'footnoteDefinition', onfootnotedefinition)\n\n return h\n\n // Finalise the created `right`, a hast node, from `left`, an mdast node.\n function augment(left, right) {\n var data\n var ctx\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (left && left.data) {\n data = left.data\n\n if (data.hName) {\n if (right.type !== 'element') {\n right = {\n type: 'element',\n tagName: '',\n properties: {},\n children: []\n }\n }\n\n right.tagName = data.hName\n }\n\n if (right.type === 'element' && data.hProperties) {\n right.properties = Object.assign({}, right.properties, data.hProperties)\n }\n\n if (right.children && data.hChildren) {\n right.children = data.hChildren\n }\n }\n\n ctx = left && left.position ? left : {position: left}\n\n if (!generated(ctx)) {\n right.position = {\n start: position.start(ctx),\n end: position.end(ctx)\n }\n }\n\n return right\n }\n\n // Create an element for `node`.\n function h(node, tagName, props, children) {\n if (\n (children === undefined || children === null) &&\n typeof props === 'object' &&\n 'length' in props\n ) {\n children = props\n props = {}\n }\n\n return augment(node, {\n type: 'element',\n tagName: tagName,\n properties: props || {},\n children: children || []\n })\n }\n\n function onfootnotedefinition(definition) {\n var id = String(definition.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/8290999/index.js#L26>.\n if (!own.call(footnoteById, id)) {\n footnoteById[id] = definition\n }\n }\n}\n\n// Transform `tree`, which is an mdast node, to a hast node.\nfunction toHast(tree, options) {\n var h = factory(tree, options)\n var node = one(h, tree)\n var foot = footer(h)\n\n if (foot) {\n node.children = node.children.concat(u('text', '\\n'), foot)\n }\n\n return node\n}\n","module.exports = identity\nfunction identity(d) {\n return d\n}\n","'use strict'\n\nmodule.exports = generated\n\nfunction generated(node) {\n return (\n !node ||\n !node.position ||\n !node.position.start ||\n !node.position.start.line ||\n !node.position.start.column ||\n !node.position.end ||\n !node.position.end.line ||\n !node.position.end.column\n )\n}\n","'use strict'\n\nvar visit = require('unist-util-visit')\n\nmodule.exports = getDefinitionFactory\n\nvar own = {}.hasOwnProperty\n\n// Get a definition in `node` by `identifier`.\nfunction getDefinitionFactory(node, options) {\n return getterFactory(gather(node, options))\n}\n\n// Gather all definitions in `node`\nfunction gather(node) {\n var cache = {}\n\n if (!node || !node.type) {\n throw new Error('mdast-util-definitions expected node')\n }\n\n visit(node, 'definition', ondefinition)\n\n return cache\n\n function ondefinition(definition) {\n var id = normalise(definition.identifier)\n if (!own.call(cache, id)) {\n cache[id] = definition\n }\n }\n}\n\n// Factory to get a node from the given definition-cache.\nfunction getterFactory(cache) {\n return getter\n\n // Get a node from the bound definition-cache.\n function getter(identifier) {\n var id = identifier && normalise(identifier)\n return id && own.call(cache, id) ? cache[id] : null\n }\n}\n\nfunction normalise(identifier) {\n return identifier.toUpperCase()\n}\n","'use strict'\n\nmodule.exports = generateFootnotes\n\nvar thematicBreak = require('./handlers/thematic-break')\nvar list = require('./handlers/list')\nvar wrap = require('./wrap')\n\nfunction generateFootnotes(h) {\n var footnoteById = h.footnoteById\n var footnoteOrder = h.footnoteOrder\n var length = footnoteOrder.length\n var index = -1\n var listItems = []\n var def\n var backReference\n var content\n var tail\n\n while (++index < length) {\n def = footnoteById[footnoteOrder[index].toUpperCase()]\n\n if (!def) {\n continue\n }\n\n content = def.children.concat()\n tail = content[content.length - 1]\n backReference = {\n type: 'link',\n url: '#fnref-' + def.identifier,\n data: {hProperties: {className: ['footnote-backref']}},\n children: [{type: 'text', value: '↩'}]\n }\n\n if (!tail || tail.type !== 'paragraph') {\n tail = {type: 'paragraph', children: []}\n content.push(tail)\n }\n\n tail.children.push(backReference)\n\n listItems.push({\n type: 'listItem',\n data: {hProperties: {id: 'fn-' + def.identifier}},\n children: content,\n position: def.position\n })\n }\n\n if (listItems.length === 0) {\n return null\n }\n\n return h(\n null,\n 'div',\n {className: ['footnotes']},\n wrap(\n [\n thematicBreak(h),\n list(h, {type: 'list', ordered: true, children: listItems})\n ],\n true\n )\n )\n}\n","'use strict'\n\nmodule.exports = {\n blockquote: require('./blockquote'),\n break: require('./break'),\n code: require('./code'),\n delete: require('./delete'),\n emphasis: require('./emphasis'),\n footnoteReference: require('./footnote-reference'),\n footnote: require('./footnote'),\n heading: require('./heading'),\n html: require('./html'),\n imageReference: require('./image-reference'),\n image: require('./image'),\n inlineCode: require('./inline-code'),\n linkReference: require('./link-reference'),\n link: require('./link'),\n listItem: require('./list-item'),\n list: require('./list'),\n paragraph: require('./paragraph'),\n root: require('./root'),\n strong: require('./strong'),\n table: require('./table'),\n text: require('./text'),\n thematicBreak: require('./thematic-break'),\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return null\n}\n","'use strict'\n\nmodule.exports = blockquote\n\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction blockquote(h, node) {\n return h(node, 'blockquote', wrap(all(h, node), true))\n}\n","'use strict'\n\nmodule.exports = hardBreak\n\nvar u = require('unist-builder')\n\nfunction hardBreak(h, node) {\n return [h(node, 'br'), u('text', '\\n')]\n}\n","'use strict'\n\nmodule.exports = code\n\nvar u = require('unist-builder')\n\nfunction code(h, node) {\n var value = node.value ? node.value + '\\n' : ''\n // To do: next major, use `node.lang` w/o regex, the splitting’s been going\n // on for years in remark now.\n var lang = node.lang && node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/)\n var props = {}\n var code\n\n if (lang) {\n props.className = ['language-' + lang]\n }\n\n code = h(node, 'code', props, [u('text', value)])\n\n if (node.meta) {\n code.data = {meta: node.meta}\n }\n\n return h(node.position, 'pre', [code])\n}\n","'use strict'\n\nmodule.exports = strikethrough\n\nvar all = require('../all')\n\nfunction strikethrough(h, node) {\n return h(node, 'del', all(h, node))\n}\n","'use strict'\n\nmodule.exports = emphasis\n\nvar all = require('../all')\n\nfunction emphasis(h, node) {\n return h(node, 'em', all(h, node))\n}\n","'use strict'\n\nmodule.exports = footnote\n\nvar footnoteReference = require('./footnote-reference')\n\nfunction footnote(h, node) {\n var footnoteById = h.footnoteById\n var footnoteOrder = h.footnoteOrder\n var identifier = 1\n\n while (identifier in footnoteById) {\n identifier++\n }\n\n identifier = String(identifier)\n\n // No need to check if `identifier` exists in `footnoteOrder`, it’s guaranteed\n // to not exist because we just generated it.\n footnoteOrder.push(identifier)\n\n footnoteById[identifier] = {\n type: 'footnoteDefinition',\n identifier: identifier,\n children: [{type: 'paragraph', children: node.children}],\n position: node.position\n }\n\n return footnoteReference(h, {\n type: 'footnoteReference',\n identifier: identifier,\n position: node.position\n })\n}\n","'use strict'\n\nmodule.exports = heading\n\nvar all = require('../all')\n\nfunction heading(h, node) {\n return h(node, 'h' + node.depth, all(h, node))\n}\n","'use strict'\n\nmodule.exports = html\n\nvar u = require('unist-builder')\n\n// Return either a `raw` node in dangerous mode, otherwise nothing.\nfunction html(h, node) {\n return h.dangerous ? h.augment(node, u('raw', node.value)) : null\n}\n","'use strict'\n\nmodule.exports = imageReference\n\nvar normalize = require('mdurl/encode')\nvar revert = require('../revert')\n\nfunction imageReference(h, node) {\n var def = h.definition(node.identifier)\n var props\n\n if (!def) {\n return revert(h, node)\n }\n\n props = {src: normalize(def.url || ''), alt: node.alt}\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title\n }\n\n return h(node, 'img', props)\n}\n","'use strict'\n\nvar normalize = require('mdurl/encode')\n\nmodule.exports = image\n\nfunction image(h, node) {\n var props = {src: normalize(node.url), alt: node.alt}\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title\n }\n\n return h(node, 'img', props)\n}\n","'use strict'\n\nmodule.exports = inlineCode\n\nvar u = require('unist-builder')\n\nfunction inlineCode(h, node) {\n var value = node.value.replace(/\\r?\\n|\\r/g, ' ')\n return h(node, 'code', [u('text', value)])\n}\n","'use strict'\n\nmodule.exports = linkReference\n\nvar normalize = require('mdurl/encode')\nvar revert = require('../revert')\nvar all = require('../all')\n\nfunction linkReference(h, node) {\n var def = h.definition(node.identifier)\n var props\n\n if (!def) {\n return revert(h, node)\n }\n\n props = {href: normalize(def.url || '')}\n\n if (def.title !== null && def.title !== undefined) {\n props.title = def.title\n }\n\n return h(node, 'a', props, all(h, node))\n}\n","'use strict'\n\nvar normalize = require('mdurl/encode')\nvar all = require('../all')\n\nmodule.exports = link\n\nfunction link(h, node) {\n var props = {href: normalize(node.url)}\n\n if (node.title !== null && node.title !== undefined) {\n props.title = node.title\n }\n\n return h(node, 'a', props, all(h, node))\n}\n","'use strict'\n\nmodule.exports = listItem\n\nvar u = require('unist-builder')\nvar all = require('../all')\n\nfunction listItem(h, node, parent) {\n var result = all(h, node)\n var head = result[0]\n var loose = parent ? listLoose(parent) : listItemLoose(node)\n var props = {}\n var wrapped = []\n var length\n var index\n var child\n\n if (typeof node.checked === 'boolean') {\n if (!head || head.tagName !== 'p') {\n head = h(null, 'p', [])\n result.unshift(head)\n }\n\n if (head.children.length > 0) {\n head.children.unshift(u('text', ' '))\n }\n\n head.children.unshift(\n h(null, 'input', {\n type: 'checkbox',\n checked: node.checked,\n disabled: true\n })\n )\n\n // According to github-markdown-css, this class hides bullet.\n // See: <https://github.com/sindresorhus/github-markdown-css>.\n props.className = ['task-list-item']\n }\n\n length = result.length\n index = -1\n\n while (++index < length) {\n child = result[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (loose || index !== 0 || child.tagName !== 'p') {\n wrapped.push(u('text', '\\n'))\n }\n\n if (child.tagName === 'p' && !loose) {\n wrapped = wrapped.concat(child.children)\n } else {\n wrapped.push(child)\n }\n }\n\n // Add a final eol.\n if (length && (loose || child.tagName !== 'p')) {\n wrapped.push(u('text', '\\n'))\n }\n\n return h(node, 'li', props, wrapped)\n}\n\nfunction listLoose(node) {\n var loose = node.spread\n var children = node.children\n var length = children.length\n var index = -1\n\n while (!loose && ++index < length) {\n loose = listItemLoose(children[index])\n }\n\n return loose\n}\n\nfunction listItemLoose(node) {\n var spread = node.spread\n\n return spread === undefined || spread === null\n ? node.children.length > 1\n : spread\n}\n","'use strict'\n\nmodule.exports = paragraph\n\nvar all = require('../all')\n\nfunction paragraph(h, node) {\n return h(node, 'p', all(h, node))\n}\n","'use strict'\n\nmodule.exports = root\n\nvar u = require('unist-builder')\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction root(h, node) {\n return h.augment(node, u('root', wrap(all(h, node))))\n}\n","'use strict'\n\nmodule.exports = strong\n\nvar all = require('../all')\n\nfunction strong(h, node) {\n return h(node, 'strong', all(h, node))\n}\n","'use strict'\n\nmodule.exports = table\n\nvar position = require('unist-util-position')\nvar wrap = require('../wrap')\nvar all = require('../all')\n\nfunction table(h, node) {\n var rows = node.children\n var index = rows.length\n var align = node.align || []\n var alignLength = align.length\n var result = []\n var pos\n var row\n var out\n var name\n var cell\n\n while (index--) {\n row = rows[index].children\n name = index === 0 ? 'th' : 'td'\n pos = alignLength || row.length\n out = []\n\n while (pos--) {\n cell = row[pos]\n out[pos] = h(cell, name, {align: align[pos]}, cell ? all(h, cell) : [])\n }\n\n result[index] = h(rows[index], 'tr', wrap(out, true))\n }\n\n return h(\n node,\n 'table',\n wrap(\n [h(result[0].position, 'thead', wrap([result[0]], true))].concat(\n result[1]\n ? h(\n {\n start: position.start(result[1]),\n end: position.end(result[result.length - 1])\n },\n 'tbody',\n wrap(result.slice(1), true)\n )\n : []\n ),\n true\n )\n )\n}\n","'use strict'\n\nmodule.exports = text\n\nvar u = require('unist-builder')\n\nfunction text(h, node) {\n return h.augment(\n node,\n u('text', String(node.value).replace(/[ \\t]*(\\r?\\n|\\r)[ \\t]*/g, '$1'))\n )\n}\n","'use strict'\n\nvar merge = require('./lib/util/merge')\nvar xlink = require('./lib/xlink')\nvar xml = require('./lib/xml')\nvar xmlns = require('./lib/xmlns')\nvar aria = require('./lib/aria')\nvar html = require('./lib/html')\n\nmodule.exports = merge([xml, xlink, xmlns, aria, html])\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\nvar caseInsensitiveTransform = require('./util/case-insensitive-transform')\n\nvar boolean = types.boolean\nvar overloadedBoolean = types.overloadedBoolean\nvar booleanish = types.booleanish\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\nvar commaSeparated = types.commaSeparated\n\nmodule.exports = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n capture: boolean,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: boolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: commaSeparated,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforePrint: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextMenu: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: commaSeparated,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n }\n})\n","const visit = require('unist-util-visit')\n\nconst splice = [].splice\n\nmodule.exports = rehypeFilter\n\n/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Element} Element\n *\n * @callback AllowElement\n * @param {Element} element\n * @param {number} index\n * @param {Element|Root} parent\n * @returns {boolean}\n *\n * @typedef {Object} RehypeFilterOptions\n * @property {Array.<string>} [allowedElements]\n * @property {Array.<string>} [disallowedElements=[]]\n * @property {AllowElement} [allowElement]\n * @property {boolean} [unwrapDisallowed=false]\n */\n\n/**\n * @param {RehypeFilterOptions} options\n */\nfunction rehypeFilter(options) {\n if (options.allowedElements && options.disallowedElements) {\n throw new TypeError(\n 'Only one of `allowedElements` and `disallowedElements` should be defined'\n )\n }\n\n return options.allowedElements ||\n options.disallowedElements ||\n options.allowElement\n ? transform\n : undefined\n\n /**\n * @param {Root} tree\n */\n function transform(tree) {\n visit(tree, 'element', onelement)\n }\n\n /**\n * @param {Element} node\n * @param {number} index\n * @param {Element|Root} parent\n * @returns {number|void}\n */\n function onelement(node, index, parent) {\n /** @type {boolean} */\n let remove\n\n if (options.allowedElements) {\n remove = !options.allowedElements.includes(node.tagName)\n } else if (options.disallowedElements) {\n remove = options.disallowedElements.includes(node.tagName)\n }\n\n if (!remove && options.allowElement) {\n remove = !options.allowElement(node, index, parent)\n }\n\n if (remove) {\n /** @type {Array.<unknown>} */\n let parameters = [index, 1]\n\n if (options.unwrapDisallowed && node.children) {\n parameters = parameters.concat(node.children)\n }\n\n splice.apply(parent.children, parameters)\n return index\n }\n\n return undefined\n }\n}\n","const protocols = ['http', 'https', 'mailto', 'tel']\n\nmodule.exports = uriTransformer\n\n/**\n * @param {string} uri\n * @returns {string}\n */\nfunction uriTransformer(uri) {\n const url = (uri || '').trim()\n const first = url.charAt(0)\n\n if (first === '#' || first === '/') {\n return url\n }\n\n const colon = url.indexOf(':')\n if (colon === -1) {\n return url\n }\n\n let index = -1\n\n while (++index < protocols.length) {\n const protocol = protocols[index]\n\n if (\n colon === protocol.length &&\n url.slice(0, protocol.length).toLowerCase() === protocol\n ) {\n return url\n }\n }\n\n index = url.indexOf('?')\n if (index !== -1 && colon > index) {\n return url\n }\n\n index = url.indexOf('#')\n if (index !== -1 && colon > index) {\n return url\n }\n\n // eslint-disable-next-line no-script-url\n return 'javascript:void(0)'\n}\n","'use strict'\n\nconst React = require('react')\nconst ReactIs = require('react-is')\n// @ts-ignore remove when typed\nconst svg = require('property-information/svg')\n// @ts-ignore remove when typed\nconst find = require('property-information/find')\n// @ts-ignore remove when typed\nconst hastToReact = require('property-information/hast-to-react.json')\n// @ts-ignore remove when typed\nconst spaces = require('space-separated-tokens')\n// @ts-ignore remove when typed\nconst commas = require('comma-separated-tokens')\nconst style = require('style-to-object')\n\nexports.hastToReact = toReact\nexports.hastChildrenToReact = childrenToReact\n\n/**\n * @typedef {JSX.IntrinsicElements} IntrinsicElements\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('unist').Position} Position\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Text} Text\n * @typedef {import('hast').Comment} Comment\n * @typedef {import('hast').DocType} Doctype\n */\n\n/**\n * @typedef {Object} Info\n * @property {string?} space\n * @property {string?} attribute\n * @property {string?} property\n * @property {boolean} boolean\n * @property {boolean} booleanish\n * @property {boolean} overloadedBoolean\n * @property {boolean} number\n * @property {boolean} commaSeparated\n * @property {boolean} spaceSeparated\n * @property {boolean} commaOrSpaceSeparated\n * @property {boolean} mustUseProperty\n * @property {boolean} defined\n *\n * @typedef {Object} Schema\n * @property {Object.<string, Info>} property\n * @property {Object.<string, string>} normal\n * @property {string?} space\n *\n * @typedef {Object} Raw\n * @property {'raw'} type\n * @property {string} value\n *\n * @typedef {Object} Context\n * @property {TransformOptions} options\n * @property {Schema} schema\n * @property {number} listDepth\n *\n * @callback TransformLink\n * @param {string} href\n * @param {Array.<Comment|Element|Text>} children\n * @param {string?} title\n * @returns {string}\n *\n * @callback TransformImage\n * @param {string} src\n * @param {string} alt\n * @param {string?} title\n * @returns {string}\n *\n * @callback TransformLinkTarget\n * @param {string} href\n * @param {Array.<Comment|Element|Text>} children\n * @param {string?} title\n * @returns {string}\n *\n * @typedef {keyof IntrinsicElements} ReactMarkdownNames\n *\n * @typedef {{ [key: string]: unknown, className?: string }} ReactBaseProps\n *\n * To do: is `data-sourcepos` typeable?\n *\n * @typedef {Object} ReactMarkdownProps\n * @property {Element} node\n * @property {string} key\n * @property {ReactNode[]} children\n * @property {Position?} [sourcePosition] Passed when `options.rawSourcePos` is given\n * @property {number} [index] Passed when `options.includeElementIndex` is given\n * @property {number} [siblingCount] Passed when `options.includeElementIndex` is given\n *\n * @callback NormalComponent\n * @param {ReactBaseProps & ReactMarkdownProps} props\n * @returns {ReactNode}\n *\n * @callback CodeComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {inline?: boolean}} props\n * @returns {ReactNode}\n *\n * @callback HeadingComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {level: number}} props\n * @returns {ReactNode}\n *\n * @callback LiComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {checked: boolean|null, index: number, ordered: boolean}} props\n * @returns {ReactNode}\n *\n * @callback OrderedListComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {depth: number, ordered: true}} props\n * @returns {ReactNode}\n *\n * @callback TableCellComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {style?: Object.<string, unknown>, isHeader: boolean}} props\n * @returns {ReactNode}\n *\n * @callback TableRowComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {isHeader: boolean}} props\n * @returns {ReactNode}\n *\n * @callback UnorderedListComponent\n * @param {ReactBaseProps & ReactMarkdownProps & {depth: number, ordered: false}} props\n * @returns {ReactNode}\n *\n * @typedef {Object} SpecialComponents\n * @property {CodeComponent|ReactMarkdownNames} code\n * @property {HeadingComponent|ReactMarkdownNames} h1\n * @property {HeadingComponent|ReactMarkdownNames} h2\n * @property {HeadingComponent|ReactMarkdownNames} h3\n * @property {HeadingComponent|ReactMarkdownNames} h4\n * @property {HeadingComponent|ReactMarkdownNames} h5\n * @property {HeadingComponent|ReactMarkdownNames} h6\n * @property {LiComponent|ReactMarkdownNames} li\n * @property {OrderedListComponent|ReactMarkdownNames} ol\n * @property {TableCellComponent|ReactMarkdownNames} td\n * @property {TableCellComponent|ReactMarkdownNames} th\n * @property {TableRowComponent|ReactMarkdownNames} tr\n * @property {UnorderedListComponent|ReactMarkdownNames} ul\n *\n * @typedef {Record<Exclude<ReactMarkdownNames, keyof SpecialComponents>, NormalComponent|ReactMarkdownNames>} NormalComponents\n * @typedef {Partial<NormalComponents & SpecialComponents>} Components\n */\n\n/**\n * @typedef {Object} TransformOptions\n * @property {boolean} [sourcePos=false]\n * @property {boolean} [rawSourcePos=false]\n * @property {boolean} [skipHtml=false]\n * @property {boolean} [includeElementIndex=false]\n * @property {false|TransformLink} [transformLinkUri]\n * @property {TransformImage} [transformImageUri]\n * @property {string|TransformLinkTarget} [linkTarget]\n * @property {Components} [components]\n */\n\nconst own = {}.hasOwnProperty\n\n// The table-related elements that must not contain whitespace text according\n// to React.\nconst tableElements = new Set(['table', 'thead', 'tbody', 'tfoot', 'tr'])\n\n/**\n * @param {Context} context\n * @param {Element|Root} node\n */\nfunction childrenToReact(context, node) {\n /** @type {Array.<ReactNode>} */\n const children = []\n let childIndex = -1\n /** @type {Comment|Doctype|Element|Raw|Text} */\n let child\n\n while (++childIndex < node.children.length) {\n child = node.children[childIndex]\n\n if (child.type === 'element') {\n children.push(toReact(context, child, childIndex, node))\n } else if (child.type === 'text') {\n // React does not permit whitespace text elements as children of table:\n // cf. https://github.com/remarkjs/react-markdown/issues/576\n if (\n node.type !== 'element' ||\n !tableElements.has(node.tagName) ||\n child.value !== '\\n'\n ) {\n children.push(child.value)\n }\n }\n // @ts-ignore `raw` nodes are non-standard\n else if (child.type === 'raw' && !context.options.skipHtml) {\n // Default behavior is to show (encoded) HTML.\n // @ts-ignore `raw` nodes are non-standard\n children.push(child.value)\n }\n }\n\n return children\n}\n\n/**\n * @param {Context} context\n * @param {Element} node\n * @param {number} index\n * @param {Element|Root} parent\n */\nfunction toReact(context, node, index, parent) {\n const options = context.options\n const parentSchema = context.schema\n /** @type {ReactMarkdownNames} */\n // @ts-ignore assume a known HTML/SVG element.\n const name = node.tagName\n /** @type {Object.<string, unknown>} */\n const properties = {}\n let schema = parentSchema\n /** @type {string} */\n let property\n\n if (parentSchema.space === 'html' && name === 'svg') {\n schema = svg\n context.schema = schema\n }\n\n for (property in node.properties) {\n /* istanbul ignore else - prototype polution. */\n if (own.call(node.properties, property)) {\n addProperty(properties, property, node.properties[property], context)\n }\n }\n\n if (name === 'ol' || name === 'ul') {\n context.listDepth++\n }\n\n const children = childrenToReact(context, node)\n\n if (name === 'ol' || name === 'ul') {\n context.listDepth--\n }\n\n // Restore parent schema.\n context.schema = parentSchema\n\n // Nodes created by plugins do not have positional info, in which case we use\n // an object that matches the positon interface.\n const position = node.position || {\n start: {line: null, column: null, offset: null},\n end: {line: null, column: null, offset: null}\n }\n /** @type {NormalComponent|SpecialComponents[keyof SpecialComponents]|ReactMarkdownNames} */\n const component =\n options.components && own.call(options.components, name)\n ? options.components[name]\n : name\n const basic = typeof component === 'string' || component === React.Fragment\n\n if (!ReactIs.isValidElementType(component)) {\n throw new TypeError(\n `Component for name \\`${name}\\` not defined or is not renderable`\n )\n }\n\n properties.key = [\n name,\n position.start.line,\n position.start.column,\n index\n ].join('-')\n\n if (name === 'a' && options.linkTarget) {\n properties.target =\n typeof options.linkTarget === 'function'\n ? // @ts-ignore assume `href` is a string\n options.linkTarget(properties.href, node.children, properties.title)\n : options.linkTarget\n }\n\n if (name === 'a' && options.transformLinkUri) {\n properties.href = options.transformLinkUri(\n // @ts-ignore assume `href` is a string\n properties.href,\n node.children,\n properties.title\n )\n }\n\n if (!basic && name === 'code' && parent.tagName !== 'pre') {\n properties.inline = true\n }\n\n if (\n !basic &&\n (name === 'h1' ||\n name === 'h2' ||\n name === 'h3' ||\n name === 'h4' ||\n name === 'h5' ||\n name === 'h6')\n ) {\n properties.level = parseInt(name.charAt(1), 10)\n }\n\n if (name === 'img' && options.transformImageUri) {\n properties.src = options.transformImageUri(\n // @ts-ignore assume `src` is a string\n properties.src,\n properties.alt,\n properties.title\n )\n }\n\n if (!basic && name === 'li') {\n const input = getInputElement(node)\n properties.checked = input ? Boolean(input.properties.checked) : null\n properties.index = getElementsBeforeCount(parent, node)\n properties.ordered = parent.tagName === 'ol'\n }\n\n if (!basic && (name === 'ol' || name === 'ul')) {\n properties.ordered = name === 'ol'\n properties.depth = context.listDepth\n }\n\n if (name === 'td' || name === 'th') {\n if (properties.align) {\n if (!properties.style) properties.style = {}\n // @ts-ignore assume `style` is an object\n properties.style.textAlign = properties.align\n delete properties.align\n }\n\n if (!basic) {\n properties.isHeader = name === 'th'\n }\n }\n\n if (!basic && name === 'tr') {\n properties.isHeader = Boolean(parent.tagName === 'thead')\n }\n\n // If `sourcePos` is given, pass source information (line/column info from markdown source).\n if (options.sourcePos) {\n properties['data-sourcepos'] = flattenPosition(position)\n }\n\n if (!basic && options.rawSourcePos) {\n properties.sourcePosition = node.position\n }\n\n // If `includeElementIndex` is given, pass node index info to components.\n if (!basic && options.includeElementIndex) {\n properties.index = getElementsBeforeCount(parent, node)\n properties.siblingCount = getElementsBeforeCount(parent)\n }\n\n if (!basic) {\n properties.node = node\n }\n\n // Ensure no React warnings are emitted for void elements w/ children.\n return children.length > 0\n ? React.createElement(component, properties, children)\n : React.createElement(component, properties)\n}\n\n/**\n * @param {Element|Root} node\n * @returns {Element?}\n */\nfunction getInputElement(node) {\n let index = -1\n\n while (++index < node.children.length) {\n const child = node.children[index]\n\n if (child.type === 'element' && child.tagName === 'input') {\n return child\n }\n }\n\n return null\n}\n\n/**\n * @param {Element|Root} parent\n * @param {Element} [node]\n * @returns {number}\n */\nfunction getElementsBeforeCount(parent, node) {\n let index = -1\n let count = 0\n\n while (++index < parent.children.length) {\n if (parent.children[index] === node) break\n if (parent.children[index].type === 'element') count++\n }\n\n return count\n}\n\n/**\n * @param {Object.<string, unknown>} props\n * @param {string} prop\n * @param {unknown} value\n * @param {Context} ctx\n */\nfunction addProperty(props, prop, value, ctx) {\n /** @type {Info} */\n const info = find(ctx.schema, prop)\n let result = value\n\n // Ignore nullish and `NaN` values.\n // eslint-disable-next-line no-self-compare\n if (result === null || result === undefined || result !== result) {\n return\n }\n\n // Accept `array`.\n // Most props are space-separated.\n if (result && typeof result === 'object' && 'length' in result) {\n // type-coverage:ignore-next-line remove when typed.\n result = (info.commaSeparated ? commas : spaces).stringify(result)\n }\n\n if (info.property === 'style' && typeof result === 'string') {\n result = parseStyle(result)\n }\n\n if (info.space) {\n props[\n own.call(hastToReact, info.property)\n ? hastToReact[info.property]\n : info.property\n ] = result\n } else {\n props[info.attribute] = result\n }\n}\n\n/**\n * @param {string} value\n * @returns {Object.<string, string>}\n */\nfunction parseStyle(value) {\n /** @type {Object.<string, string>} */\n const result = {}\n\n try {\n style(value, iterator)\n } catch (/** @type {Error} */ _) {\n // Silent.\n }\n\n return result\n\n /**\n * @param {string} name\n * @param {string} v\n */\n function iterator(name, v) {\n const k = name.slice(0, 4) === '-ms-' ? `ms-${name.slice(4)}` : name\n result[k.replace(/-([a-z])/g, styleReplacer)] = v\n }\n}\n\n/**\n * @param {unknown} _\n * @param {string} $1\n */\nfunction styleReplacer(_, $1) {\n return $1.toUpperCase()\n}\n\n/**\n * @param {Position} pos\n * @returns {string}\n */\nfunction flattenPosition(pos) {\n return [\n pos.start.line,\n ':',\n pos.start.column,\n '-',\n pos.end.line,\n ':',\n pos.end.column\n ]\n .map((d) => String(d))\n .join('')\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n","'use strict'\n\nvar merge = require('./lib/util/merge')\nvar xlink = require('./lib/xlink')\nvar xml = require('./lib/xml')\nvar xmlns = require('./lib/xmlns')\nvar aria = require('./lib/aria')\nvar svg = require('./lib/svg')\n\nmodule.exports = merge([xml, xlink, xmlns, aria, svg])\n","'use strict'\n\nvar types = require('./util/types')\nvar create = require('./util/create')\nvar caseSensitiveTransform = require('./util/case-sensitive-transform')\n\nvar boolean = types.boolean\nvar number = types.number\nvar spaceSeparated = types.spaceSeparated\nvar commaSeparated = types.commaSeparated\nvar commaOrSpaceSeparated = types.commaOrSpaceSeparated\n\nmodule.exports = create({\n space: 'svg',\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n transform: caseSensitiveTransform,\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n }\n})\n","'use strict'\n\nvar normalize = require('./normalize')\nvar DefinedInfo = require('./lib/util/defined-info')\nvar Info = require('./lib/util/info')\n\nvar data = 'data'\n\nmodule.exports = find\n\nvar valid = /^data[-\\w.:]+$/i\nvar dash = /-[a-z]/g\nvar cap = /[A-Z]/g\n\nfunction find(schema, value) {\n var normal = normalize(value)\n var prop = value\n var Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === data && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n prop = datasetToProperty(value)\n } else {\n value = datasetToAttribute(value)\n }\n\n Type = DefinedInfo\n }\n\n return new Type(prop, value)\n}\n\nfunction datasetToProperty(attribute) {\n var value = attribute.slice(5).replace(dash, camelcase)\n return data + value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction datasetToAttribute(property) {\n var value = property.slice(4)\n\n if (dash.test(value)) {\n return property\n }\n\n value = value.replace(cap, kebab)\n\n if (value.charAt(0) !== '-') {\n value = '-' + value\n }\n\n return data + value\n}\n\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","'use strict'\n\nexports.parse = parse\nexports.stringify = stringify\n\nvar empty = ''\nvar space = ' '\nvar whiteSpace = /[ \\t\\n\\r\\f]+/g\n\nfunction parse(value) {\n var input = String(value || empty).trim()\n return input === empty ? [] : input.split(whiteSpace)\n}\n\nfunction stringify(values) {\n return values.join(space).trim()\n}\n","'use strict'\n\nexports.parse = parse\nexports.stringify = stringify\n\nvar comma = ','\nvar space = ' '\nvar empty = ''\n\n// Parse comma-separated tokens to an array.\nfunction parse(value) {\n var values = []\n var input = String(value || empty)\n var index = input.indexOf(comma)\n var lastIndex = 0\n var end = false\n var val\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n val = input.slice(lastIndex, index).trim()\n\n if (val || !end) {\n values.push(val)\n }\n\n lastIndex = index + 1\n index = input.indexOf(comma, lastIndex)\n }\n\n return values\n}\n\n// Compile an array to comma-separated tokens.\n// `options.padLeft` (default: `true`) pads a space left of each token, and\n// `options.padRight` (default: `false`) pads a space to the right of each token.\nfunction stringify(values, options) {\n var settings = options || {}\n var left = settings.padLeft === false ? empty : space\n var right = settings.padRight ? space : empty\n\n // Ensure the last empty entry is seen.\n if (values[values.length - 1] === empty) {\n values = values.concat(empty)\n }\n\n return values.join(right + comma + left).trim()\n}\n","var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param {String} style - The inline style.\n * @param {Function} [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n var output = null;\n if (!style || typeof style !== 'string') {\n return output;\n }\n\n var declaration;\n var declarations = parse(style);\n var hasIterator = typeof iterator === 'function';\n var property;\n var value;\n\n for (var i = 0, len = declarations.length; i < len; i++) {\n declaration = declarations[i];\n property = declaration.property;\n value = declaration.value;\n\n if (hasIterator) {\n iterator(property, value, declaration);\n } else if (value) {\n output || (output = {});\n output[property] = value;\n }\n }\n\n return output;\n}\n\nmodule.exports = StyleToObject;\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function(node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","module.exports = require('./syntax')\n","var combine = require('micromark/dist/util/combine-extensions')\nvar autolink = require('micromark-extension-gfm-autolink-literal')\nvar strikethrough = require('micromark-extension-gfm-strikethrough')\nvar table = require('micromark-extension-gfm-table')\nvar tasklist = require('micromark-extension-gfm-task-list-item')\n\nmodule.exports = create\n\nfunction create(options) {\n return combine([autolink, strikethrough(options), table, tasklist])\n}\n","module.exports = require('./syntax')\n","var asciiAlpha = require('micromark/dist/character/ascii-alpha')\nvar asciiAlphanumeric = require('micromark/dist/character/ascii-alphanumeric')\nvar asciiControl = require('micromark/dist/character/ascii-control')\nvar markdownLineEnding = require('micromark/dist/character/markdown-line-ending')\nvar unicodePunctuation = require('micromark/dist/character/unicode-punctuation')\nvar unicodeWhitespace = require('micromark/dist/character/unicode-whitespace')\n\nvar www = {tokenize: tokenizeWww, partial: true}\nvar domain = {tokenize: tokenizeDomain, partial: true}\nvar path = {tokenize: tokenizePath, partial: true}\nvar punctuation = {tokenize: tokenizePunctuation, partial: true}\nvar namedCharacterReference = {\n tokenize: tokenizeNamedCharacterReference,\n partial: true\n}\n\nvar wwwAutolink = {tokenize: tokenizeWwwAutolink, previous: previousWww}\nvar httpAutolink = {tokenize: tokenizeHttpAutolink, previous: previousHttp}\nvar emailAutolink = {tokenize: tokenizeEmailAutolink, previous: previousEmail}\n\nvar text = {}\n\n// Export hooked constructs.\nexports.text = text\n\n// `0`\nvar code = 48\n\n// While the code is smaller than `{`.\nwhile (code < 123) {\n text[code] = emailAutolink\n code++\n // Jump from `:` -> `A`\n if (code === 58) code = 65\n // Jump from `[` -> `a`\n else if (code === 91) code = 97\n}\n\n// `+`\ntext[43] = emailAutolink\n// `-`\ntext[45] = emailAutolink\n// `.`\ntext[46] = emailAutolink\n// `_`\ntext[95] = emailAutolink\n// `h`.\ntext[72] = [emailAutolink, httpAutolink]\ntext[104] = [emailAutolink, httpAutolink]\n// `w`.\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n var self = this\n var hasDot\n\n return start\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (\n !gfmAtext(code) ||\n !previousEmail(self.previous) ||\n previous(self.events)\n ) {\n return nok(code)\n }\n\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkEmail')\n return atext(code)\n }\n\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code)\n return atext\n }\n\n // `@`\n if (code === 64) {\n effects.consume(code)\n return label\n }\n\n return nok(code)\n }\n\n function label(code) {\n // `.`\n if (code === 46) {\n return effects.check(punctuation, done, dotContinuation)(code)\n }\n\n if (\n // `-`\n code === 45 ||\n // `_`\n code === 95\n ) {\n return effects.check(punctuation, nok, dashOrUnderscoreContinuation)(code)\n }\n\n if (asciiAlphanumeric(code)) {\n effects.consume(code)\n return label\n }\n\n return done(code)\n }\n\n function dotContinuation(code) {\n effects.consume(code)\n hasDot = true\n return label\n }\n\n function dashOrUnderscoreContinuation(code) {\n effects.consume(code)\n return afterDashOrUnderscore\n }\n\n function afterDashOrUnderscore(code) {\n // `.`\n if (code === 46) {\n return effects.check(punctuation, nok, dotContinuation)(code)\n }\n\n return label(code)\n }\n\n function done(code) {\n if (hasDot) {\n effects.exit('literalAutolinkEmail')\n effects.exit('literalAutolink')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n var self = this\n\n return start\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (\n (code !== 87 && code - 32 !== 87) ||\n !previousWww(self.previous) ||\n previous(self.events)\n ) {\n return nok(code)\n }\n\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkWww')\n // For `www.` we check instead of attempt, because when it matches, GH\n // treats it as part of a domain (yes, it says a valid domain must come\n // after `www.`, but that’s not how it’s implemented by them).\n return effects.check(\n www,\n effects.attempt(domain, effects.attempt(path, done), nok),\n nok\n )(code)\n }\n\n function done(code) {\n effects.exit('literalAutolinkWww')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\nfunction tokenizeHttpAutolink(effects, ok, nok) {\n var self = this\n\n return start\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (\n (code !== 72 && code - 32 !== 72) ||\n !previousHttp(self.previous) ||\n previous(self.events)\n ) {\n return nok(code)\n }\n\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkHttp')\n effects.consume(code)\n return t1\n }\n\n function t1(code) {\n // `t`\n if (code === 84 || code - 32 === 84) {\n effects.consume(code)\n return t2\n }\n\n return nok(code)\n }\n\n function t2(code) {\n // `t`\n if (code === 84 || code - 32 === 84) {\n effects.consume(code)\n return p\n }\n\n return nok(code)\n }\n\n function p(code) {\n // `p`\n if (code === 80 || code - 32 === 80) {\n effects.consume(code)\n return s\n }\n\n return nok(code)\n }\n\n function s(code) {\n // `s`\n if (code === 83 || code - 32 === 83) {\n effects.consume(code)\n return colon\n }\n\n return colon(code)\n }\n\n function colon(code) {\n // `:`\n if (code === 58) {\n effects.consume(code)\n return slash1\n }\n\n return nok(code)\n }\n\n function slash1(code) {\n // `/`\n if (code === 47) {\n effects.consume(code)\n return slash2\n }\n\n return nok(code)\n }\n\n function slash2(code) {\n // `/`\n if (code === 47) {\n effects.consume(code)\n return after\n }\n\n return nok(code)\n }\n\n function after(code) {\n return asciiControl(code) ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)\n ? nok(code)\n : effects.attempt(domain, effects.attempt(path, done), nok)(code)\n }\n\n function done(code) {\n effects.exit('literalAutolinkHttp')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\nfunction tokenizeWww(effects, ok, nok) {\n return start\n\n function start(code) {\n // Assume a `w`.\n effects.consume(code)\n return w2\n }\n\n function w2(code) {\n // `w`\n if (code === 87 || code - 32 === 87) {\n effects.consume(code)\n return w3\n }\n\n return nok(code)\n }\n\n function w3(code) {\n // `w`\n if (code === 87 || code - 32 === 87) {\n effects.consume(code)\n return dot\n }\n\n return nok(code)\n }\n\n function dot(code) {\n // `.`\n if (code === 46) {\n effects.consume(code)\n return after\n }\n\n return nok(code)\n }\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? nok(code) : ok(code)\n }\n}\n\nfunction tokenizeDomain(effects, ok, nok) {\n var hasUnderscoreInLastSegment\n var hasUnderscoreInLastLastSegment\n\n return domain\n\n function domain(code) {\n // `&`\n if (code === 38) {\n return effects.check(\n namedCharacterReference,\n done,\n punctuationContinuation\n )(code)\n }\n\n if (code === 46 /* `.` */ || code === 95 /* `_` */) {\n return effects.check(punctuation, done, punctuationContinuation)(code)\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n if (\n asciiControl(code) ||\n unicodeWhitespace(code) ||\n (code !== 45 /* `-` */ && unicodePunctuation(code))\n ) {\n return done(code)\n }\n\n effects.consume(code)\n return domain\n }\n\n function punctuationContinuation(code) {\n // `.`\n if (code === 46) {\n hasUnderscoreInLastLastSegment = hasUnderscoreInLastSegment\n hasUnderscoreInLastSegment = undefined\n effects.consume(code)\n return domain\n }\n\n // `_`\n if (code === 95) hasUnderscoreInLastSegment = true\n\n effects.consume(code)\n return domain\n }\n\n function done(code) {\n if (!hasUnderscoreInLastLastSegment && !hasUnderscoreInLastSegment) {\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nfunction tokenizePath(effects, ok) {\n var balance = 0\n\n return inPath\n\n function inPath(code) {\n // `&`\n if (code === 38) {\n return effects.check(\n namedCharacterReference,\n ok,\n continuedPunctuation\n )(code)\n }\n\n // `(`\n if (code === 40) {\n balance++\n }\n\n // `)`\n if (code === 41) {\n return effects.check(\n punctuation,\n parenAtPathEnd,\n continuedPunctuation\n )(code)\n }\n\n if (pathEnd(code)) {\n return ok(code)\n }\n\n if (trailingPunctuation(code)) {\n return effects.check(punctuation, ok, continuedPunctuation)(code)\n }\n\n effects.consume(code)\n return inPath\n }\n\n function continuedPunctuation(code) {\n effects.consume(code)\n return inPath\n }\n\n function parenAtPathEnd(code) {\n balance--\n return balance < 0 ? ok(code) : continuedPunctuation(code)\n }\n}\n\nfunction tokenizeNamedCharacterReference(effects, ok, nok) {\n return start\n\n function start(code) {\n // Assume an ampersand.\n effects.consume(code)\n return inside\n }\n\n function inside(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return inside\n }\n\n // `;`\n if (code === 59) {\n effects.consume(code)\n return after\n }\n\n return nok(code)\n }\n\n function after(code) {\n // If the named character reference is followed by the end of the path, it’s\n // not continued punctuation.\n return pathEnd(code) ? ok(code) : nok(code)\n }\n}\n\nfunction tokenizePunctuation(effects, ok, nok) {\n return start\n\n function start(code) {\n // Always a valid trailing punctuation marker.\n effects.consume(code)\n return after\n }\n\n function after(code) {\n // Check the next.\n if (trailingPunctuation(code)) {\n effects.consume(code)\n return after\n }\n\n // If the punctuation marker is followed by the end of the path, it’s not\n // continued punctuation.\n return pathEnd(code) ? ok(code) : nok(code)\n }\n}\n\nfunction trailingPunctuation(code) {\n return (\n // `!`\n code === 33 ||\n // `\"`\n code === 34 ||\n // `'`\n code === 39 ||\n // `)`\n code === 41 ||\n // `*`\n code === 42 ||\n // `,`\n code === 44 ||\n // `.`\n code === 46 ||\n // `:`\n code === 58 ||\n // `;`\n code === 59 ||\n // `<`\n code === 60 ||\n // `?`\n code === 63 ||\n // `_`.\n code === 95 ||\n // `~`\n code === 126\n )\n}\n\nfunction pathEnd(code) {\n return (\n // EOF.\n code === null ||\n // CR, LF, CRLF, HT, VS.\n code < 0 ||\n // Space.\n code === 32 ||\n // `<`\n code === 60\n )\n}\n\nfunction gfmAtext(code) {\n return (\n code === 43 /* `+` */ ||\n code === 45 /* `-` */ ||\n code === 46 /* `.` */ ||\n code === 95 /* `_` */ ||\n asciiAlphanumeric(code)\n )\n}\n\nfunction previousWww(code) {\n return (\n code === null ||\n code < 0 ||\n code === 32 /* ` ` */ ||\n code === 40 /* `(` */ ||\n code === 42 /* `*` */ ||\n code === 95 /* `_` */ ||\n code === 126 /* `~` */\n )\n}\n\nfunction previousHttp(code) {\n return code === null || !asciiAlpha(code)\n}\n\nfunction previousEmail(code) {\n return code !== 47 /* `/` */ && previousHttp(code)\n}\n\nfunction previous(events) {\n var index = events.length\n\n while (index--) {\n if (\n (events[index][1].type === 'labelLink' ||\n events[index][1].type === 'labelImage') &&\n !events[index][1]._balanced\n ) {\n return true\n }\n }\n}\n","module.exports = create\n\nvar classifyCharacter = require('micromark/dist/util/classify-character')\nvar chunkedSplice = require('micromark/dist/util/chunked-splice')\nvar resolveAll = require('micromark/dist/util/resolve-all')\nvar shallow = require('micromark/dist/util/shallow')\n\nfunction create(options) {\n var settings = options || {}\n var single = settings.singleTilde\n var tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n }\n\n if (single === null || single === undefined) {\n single = true\n }\n\n return {text: {126: tokenizer}, insideSpan: {null: tokenizer}}\n\n // Take events and resolve strikethrough.\n function resolveAllStrikethrough(events, context) {\n var index = -1\n var strikethrough\n var text\n var open\n var nextEvents\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'strikethroughSequenceTemporary' &&\n events[index][1]._close\n ) {\n open = index\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'strikethroughSequenceTemporary' &&\n events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset ===\n events[open][1].end.offset - events[open][1].start.offset\n ) {\n events[index][1].type = 'strikethroughSequence'\n events[open][1].type = 'strikethroughSequence'\n\n strikethrough = {\n type: 'strikethrough',\n start: shallow(events[open][1].start),\n end: shallow(events[index][1].end)\n }\n\n text = {\n type: 'strikethroughText',\n start: shallow(events[open][1].end),\n end: shallow(events[index][1].start)\n }\n\n // Opening.\n nextEvents = [\n ['enter', strikethrough, context],\n ['enter', events[open][1], context],\n ['exit', events[open][1], context],\n ['enter', text, context]\n ]\n\n // Between.\n chunkedSplice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n )\n\n // Closing.\n chunkedSplice(nextEvents, nextEvents.length, 0, [\n ['exit', text, context],\n ['enter', events[index][1], context],\n ['exit', events[index][1], context],\n ['exit', strikethrough, context]\n ])\n\n chunkedSplice(events, open - 1, index - open + 3, nextEvents)\n\n index = open + nextEvents.length - 2\n break\n }\n }\n }\n }\n\n return removeRemainingSequences(events)\n }\n\n function removeRemainingSequences(events) {\n var index = -1\n var length = events.length\n\n while (++index < length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = 'data'\n }\n }\n\n return events\n }\n\n function tokenizeStrikethrough(effects, ok, nok) {\n var previous = this.previous\n var events = this.events\n var size = 0\n\n return start\n\n function start(code) {\n if (\n code !== 126 ||\n (previous === 126 &&\n events[events.length - 1][1].type !== 'characterEscape')\n ) {\n return nok(code)\n }\n\n effects.enter('strikethroughSequenceTemporary')\n return more(code)\n }\n\n function more(code) {\n var before = classifyCharacter(previous)\n var token\n var after\n\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code)\n effects.consume(code)\n size++\n return more\n }\n\n if (size < 2 && !single) return nok(code)\n token = effects.exit('strikethroughSequenceTemporary')\n after = classifyCharacter(code)\n token._open = !after || (after === 2 && before)\n token._close = !before || (before === 2 && after)\n return ok(code)\n }\n }\n}\n","module.exports = require('./syntax')\n","exports.flow = {\n null: {tokenize: tokenizeTable, resolve: resolveTable, interruptible: true}\n}\n\nvar createSpace = require('micromark/dist/tokenize/factory-space')\n\nvar setextUnderlineMini = {tokenize: tokenizeSetextUnderlineMini, partial: true}\nvar nextPrefixedOrBlank = {tokenize: tokenizeNextPrefixedOrBlank, partial: true}\n\nfunction resolveTable(events, context) {\n var length = events.length\n var index = -1\n var token\n var inHead\n var inDelimiterRow\n var inRow\n var cell\n var content\n var text\n var contentStart\n var contentEnd\n var cellStart\n\n while (++index < length) {\n token = events[index][1]\n\n if (inRow) {\n if (token.type === 'temporaryTableCellContent') {\n contentStart = contentStart || index\n contentEnd = index\n }\n\n if (\n // Combine separate content parts into one.\n (token.type === 'tableCellDivider' || token.type === 'tableRow') &&\n contentEnd\n ) {\n content = {\n type: 'tableContent',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: content.start,\n end: content.end,\n contentType: 'text'\n }\n\n events.splice(\n contentStart,\n contentEnd - contentStart + 1,\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n )\n index -= contentEnd - contentStart - 3\n length = events.length\n contentStart = undefined\n contentEnd = undefined\n }\n }\n\n if (\n events[index][0] === 'exit' &&\n cellStart &&\n cellStart + 1 < index &&\n (token.type === 'tableCellDivider' ||\n (token.type === 'tableRow' &&\n (cellStart + 3 < index ||\n events[cellStart][1].type !== 'whitespace')))\n ) {\n cell = {\n type: inDelimiterRow\n ? 'tableDelimiter'\n : inHead\n ? 'tableHeader'\n : 'tableData',\n start: events[cellStart][1].start,\n end: events[index][1].end\n }\n events.splice(index + (token.type === 'tableCellDivider' ? 1 : 0), 0, [\n 'exit',\n cell,\n context\n ])\n events.splice(cellStart, 0, ['enter', cell, context])\n index += 2\n length = events.length\n cellStart = index + 1\n }\n\n if (token.type === 'tableRow') {\n inRow = events[index][0] === 'enter'\n\n if (inRow) {\n cellStart = index + 1\n }\n }\n\n if (token.type === 'tableDelimiterRow') {\n inDelimiterRow = events[index][0] === 'enter'\n\n if (inDelimiterRow) {\n cellStart = index + 1\n }\n }\n\n if (token.type === 'tableHead') {\n inHead = events[index][0] === 'enter'\n }\n }\n\n return events\n}\n\nfunction tokenizeTable(effects, ok, nok) {\n var align = []\n var tableHeaderCount = 0\n var seenDelimiter\n var hasDash\n\n return start\n\n function start(code) {\n /* istanbul ignore if - used to be passed in beta micromark versions. */\n if (code === null || code === -5 || code === -4 || code === -3) {\n return nok(code)\n }\n\n effects.enter('table')._align = align\n effects.enter('tableHead')\n effects.enter('tableRow')\n\n // If we start with a pipe, we open a cell marker.\n if (code === 124) {\n return cellDividerHead(code)\n }\n\n tableHeaderCount++\n effects.enter('temporaryTableCellContent')\n // Can’t be space or eols at the start of a construct, so we’re in a cell.\n return inCellContentHead(code)\n }\n\n function cellDividerHead(code) {\n // Always a pipe.\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n seenDelimiter = true\n return cellBreakHead\n }\n\n function cellBreakHead(code) {\n // EOF, CR, LF, CRLF.\n if (code === null || code === -5 || code === -4 || code === -3) {\n return atRowEndHead(code)\n }\n\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.enter('whitespace')\n effects.consume(code)\n return inWhitespaceHead\n }\n\n if (seenDelimiter) {\n seenDelimiter = undefined\n tableHeaderCount++\n }\n\n // `|`\n if (code === 124) {\n return cellDividerHead(code)\n }\n\n // Anything else is cell content.\n effects.enter('temporaryTableCellContent')\n return inCellContentHead(code)\n }\n\n function inWhitespaceHead(code) {\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.consume(code)\n return inWhitespaceHead\n }\n\n effects.exit('whitespace')\n return cellBreakHead(code)\n }\n\n function inCellContentHead(code) {\n // EOF, whitespace, pipe\n if (code === null || code < 0 || code === 32 || code === 124) {\n effects.exit('temporaryTableCellContent')\n return cellBreakHead(code)\n }\n\n effects.consume(code)\n // `\\`\n return code === 92 ? inCellContentEscapeHead : inCellContentHead\n }\n\n function inCellContentEscapeHead(code) {\n // `\\` or `|`\n if (code === 92 || code === 124) {\n effects.consume(code)\n return inCellContentHead\n }\n\n // Anything else.\n return inCellContentHead(code)\n }\n\n function atRowEndHead(code) {\n if (code === null) {\n return nok(code)\n }\n\n effects.exit('tableRow')\n effects.exit('tableHead')\n\n // Always a line ending.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n\n // If a setext heading, exit.\n return effects.check(\n setextUnderlineMini,\n nok,\n // Support an indent before the delimiter row.\n createSpace(effects, rowStartDelimiter, 'linePrefix', 4)\n )\n }\n\n function rowStartDelimiter(code) {\n // If there’s another space, or we’re at the EOL/EOF, exit.\n if (code === null || code < 0 || code === 32) {\n return nok(code)\n }\n\n effects.enter('tableDelimiterRow')\n return atDelimiterRowBreak(code)\n }\n\n function atDelimiterRowBreak(code) {\n // EOF, CR, LF, CRLF.\n if (code === null || code === -5 || code === -4 || code === -3) {\n return rowEndDelimiter(code)\n }\n\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.enter('whitespace')\n effects.consume(code)\n return inWhitespaceDelimiter\n }\n\n // `-`\n if (code === 45) {\n effects.enter('tableDelimiterFiller')\n effects.consume(code)\n hasDash = true\n align.push(null)\n return inFillerDelimiter\n }\n\n // `:`\n if (code === 58) {\n effects.enter('tableDelimiterAlignment')\n effects.consume(code)\n effects.exit('tableDelimiterAlignment')\n align.push('left')\n return afterLeftAlignment\n }\n\n // If we start with a pipe, we open a cell marker.\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return atDelimiterRowBreak\n }\n\n return nok(code)\n }\n\n function inWhitespaceDelimiter(code) {\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.consume(code)\n return inWhitespaceDelimiter\n }\n\n effects.exit('whitespace')\n return atDelimiterRowBreak(code)\n }\n\n function inFillerDelimiter(code) {\n // `-`\n if (code === 45) {\n effects.consume(code)\n return inFillerDelimiter\n }\n\n effects.exit('tableDelimiterFiller')\n\n // `:`\n if (code === 58) {\n effects.enter('tableDelimiterAlignment')\n effects.consume(code)\n effects.exit('tableDelimiterAlignment')\n\n align[align.length - 1] =\n align[align.length - 1] === 'left' ? 'center' : 'right'\n\n return afterRightAlignment\n }\n\n return atDelimiterRowBreak(code)\n }\n\n function afterLeftAlignment(code) {\n // `-`\n if (code === 45) {\n effects.enter('tableDelimiterFiller')\n effects.consume(code)\n hasDash = true\n return inFillerDelimiter\n }\n\n // Anything else is not ok.\n return nok(code)\n }\n\n function afterRightAlignment(code) {\n // EOF, CR, LF, CRLF.\n if (code === null || code === -5 || code === -4 || code === -3) {\n return rowEndDelimiter(code)\n }\n\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.enter('whitespace')\n effects.consume(code)\n return inWhitespaceDelimiter\n }\n\n // `|`\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return atDelimiterRowBreak\n }\n\n return nok(code)\n }\n\n function rowEndDelimiter(code) {\n effects.exit('tableDelimiterRow')\n\n // Exit if there was no dash at all, or if the header cell count is not the\n // delimiter cell count.\n if (!hasDash || tableHeaderCount !== align.length) {\n return nok(code)\n }\n\n if (code === null) {\n return tableClose(code)\n }\n\n return effects.check(nextPrefixedOrBlank, tableClose, tableContinue)(code)\n }\n\n function tableClose(code) {\n effects.exit('table')\n return ok(code)\n }\n\n function tableContinue(code) {\n // Always a line ending.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n // We checked that it’s not a prefixed or blank line, so we’re certain a\n // body is coming, though it may be indented.\n return createSpace(effects, bodyStart, 'linePrefix', 4)\n }\n\n function bodyStart(code) {\n effects.enter('tableBody')\n return rowStartBody(code)\n }\n\n function rowStartBody(code) {\n effects.enter('tableRow')\n\n // If we start with a pipe, we open a cell marker.\n if (code === 124) {\n return cellDividerBody(code)\n }\n\n effects.enter('temporaryTableCellContent')\n // Can’t be space or eols at the start of a construct, so we’re in a cell.\n return inCellContentBody(code)\n }\n\n function cellDividerBody(code) {\n // Always a pipe.\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return cellBreakBody\n }\n\n function cellBreakBody(code) {\n // EOF, CR, LF, CRLF.\n if (code === null || code === -5 || code === -4 || code === -3) {\n return atRowEndBody(code)\n }\n\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.enter('whitespace')\n effects.consume(code)\n return inWhitespaceBody\n }\n\n // `|`\n if (code === 124) {\n return cellDividerBody(code)\n }\n\n // Anything else is cell content.\n effects.enter('temporaryTableCellContent')\n return inCellContentBody(code)\n }\n\n function inWhitespaceBody(code) {\n // HT, VS, SP.\n if (code === -2 || code === -1 || code === 32) {\n effects.consume(code)\n return inWhitespaceBody\n }\n\n effects.exit('whitespace')\n return cellBreakBody(code)\n }\n\n function inCellContentBody(code) {\n // EOF, whitespace, pipe\n if (code === null || code < 0 || code === 32 || code === 124) {\n effects.exit('temporaryTableCellContent')\n return cellBreakBody(code)\n }\n\n effects.consume(code)\n // `\\`\n return code === 92 ? inCellContentEscapeBody : inCellContentBody\n }\n\n function inCellContentEscapeBody(code) {\n // `\\` or `|`\n if (code === 92 || code === 124) {\n effects.consume(code)\n return inCellContentBody\n }\n\n // Anything else.\n return inCellContentBody(code)\n }\n\n function atRowEndBody(code) {\n effects.exit('tableRow')\n\n if (code === null) {\n return tableBodyClose(code)\n }\n\n return effects.check(\n nextPrefixedOrBlank,\n tableBodyClose,\n tableBodyContinue\n )(code)\n }\n\n function tableBodyClose(code) {\n effects.exit('tableBody')\n return tableClose(code)\n }\n\n function tableBodyContinue(code) {\n // Always a line ending.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n // Support an optional prefix, then start a body row.\n return createSpace(effects, rowStartBody, 'linePrefix', 4)\n }\n}\n\n// Based on micromark, but that won’t work as we’re in a table, and that expects\n// content.\n// <https://github.com/micromark/micromark/blob/main/lib/tokenize/setext-underline.js>\nfunction tokenizeSetextUnderlineMini(effects, ok, nok) {\n return start\n\n function start(code) {\n // `-`\n if (code !== 45) {\n return nok(code)\n }\n\n effects.enter('setextUnderline')\n return sequence(code)\n }\n\n function sequence(code) {\n if (code === 45) {\n effects.consume(code)\n return sequence\n }\n\n return whitespace(code)\n }\n\n function whitespace(code) {\n if (code === -2 || code === -1 || code === 32) {\n effects.consume(code)\n return whitespace\n }\n\n if (code === null || code === -5 || code === -4 || code === -3) {\n return ok(code)\n }\n\n return nok(code)\n }\n}\n\nfunction tokenizeNextPrefixedOrBlank(effects, ok, nok) {\n var size = 0\n\n return start\n\n function start(code) {\n // This is a check, so we don’t care about tokens, but we open a bogus one\n // so we’re valid.\n effects.enter('check')\n // EOL.\n effects.consume(code)\n return whitespace\n }\n\n function whitespace(code) {\n // VS or SP.\n if (code === -1 || code === 32) {\n effects.consume(code)\n size++\n return size === 4 ? ok : whitespace\n }\n\n // EOF or whitespace\n if (code === null || code < 0) {\n return ok(code)\n }\n\n // Anything else.\n return nok(code)\n }\n}\n","module.exports = require('./syntax')\n","var markdownLineEndingOrSpace = require('micromark/dist/character/markdown-line-ending-or-space')\nvar spaceFactory = require('micromark/dist/tokenize/factory-space')\nvar prefixSize = require('micromark/dist/util/prefix-size')\n\nvar tasklistCheck = {tokenize: tokenizeTasklistCheck}\n\nexports.text = {91: tasklistCheck}\n\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n var self = this\n\n return open\n\n function open(code) {\n if (\n // Exit if not `[`.\n code !== 91 ||\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code)\n }\n\n effects.enter('taskListCheck')\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n return inside\n }\n\n function inside(code) {\n // Tab or space.\n if (code === -2 || code === 32) {\n effects.enter('taskListCheckValueUnchecked')\n effects.consume(code)\n effects.exit('taskListCheckValueUnchecked')\n return close\n }\n\n // Upper- and lower `x`.\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked')\n effects.consume(code)\n effects.exit('taskListCheckValueChecked')\n return close\n }\n\n return nok(code)\n }\n\n function close(code) {\n // `]`\n if (code === 93) {\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n effects.exit('taskListCheck')\n return effects.check({tokenize: spaceThenNonSpace}, ok, nok)\n }\n\n return nok(code)\n }\n}\n\nfunction spaceThenNonSpace(effects, ok, nok) {\n var self = this\n\n return spaceFactory(effects, after, 'whitespace')\n\n function after(code) {\n return prefixSize(self.events, 'whitespace') &&\n code !== null &&\n !markdownLineEndingOrSpace(code)\n ? ok(code)\n : nok(code)\n }\n}\n","var autolinkLiteral = require('mdast-util-gfm-autolink-literal/from-markdown')\nvar strikethrough = require('mdast-util-gfm-strikethrough/from-markdown')\nvar table = require('mdast-util-gfm-table/from-markdown')\nvar taskListItem = require('mdast-util-gfm-task-list-item/from-markdown')\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = configure([\n autolinkLiteral,\n strikethrough,\n table,\n taskListItem\n])\n\nfunction configure(extensions) {\n var config = {transforms: [], canContainEols: []}\n var length = extensions.length\n var index = -1\n\n while (++index < length) {\n extension(config, extensions[index])\n }\n\n return config\n}\n\nfunction extension(config, extension) {\n var key\n var left\n var right\n\n for (key in extension) {\n left = own.call(config, key) ? config[key] : (config[key] = {})\n right = extension[key]\n\n if (key === 'canContainEols' || key === 'transforms') {\n config[key] = [].concat(left, right)\n } else {\n Object.assign(left, right)\n }\n }\n}\n","var ccount = require('ccount')\nvar findAndReplace = require('mdast-util-find-and-replace')\nvar unicodePunctuation = require('micromark/dist/character/unicode-punctuation')\nvar unicodeWhitespace = require('micromark/dist/character/unicode-whitespace')\n\nexports.transforms = [transformGfmAutolinkLiterals]\nexports.enter = {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n}\nexports.exit = {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n}\n\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n this.stack[this.stack.length - 1].url = 'http://' + this.sliceSerialize(token)\n}\n\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/i, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\nfunction findUrl($0, protocol, domain, path, match) {\n var prefix = ''\n var parts\n var result\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n result = [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\nfunction findEmail($0, atext, label, match) {\n // Not an expected previous character.\n if (!previous(match, true) || /[_-]$/.test(label)) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\nfunction isCorrectDomain(domain) {\n var parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\nfunction splitUrl(url) {\n var trail = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n var closingParenIndex\n var openingParens\n var closingParens\n\n if (trail) {\n url = url.slice(0, trail.index)\n trail = trail[0]\n closingParenIndex = trail.indexOf(')')\n openingParens = ccount(url, '(')\n closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n }\n\n return [url, trail]\n}\n\nfunction previous(match, email) {\n var code = match.input.charCodeAt(match.index - 1)\n return (\n (code !== code || unicodeWhitespace(code) || unicodePunctuation(code)) &&\n (!email || code !== 47)\n )\n}\n","'use strict'\n\nmodule.exports = ccount\n\nfunction ccount(source, character) {\n var value = String(source)\n var count = 0\n var index\n\n if (typeof character !== 'string') {\n throw new Error('Expected character')\n }\n\n index = value.indexOf(character)\n\n while (index !== -1) {\n count++\n index = value.indexOf(character, index + character.length)\n }\n\n return count\n}\n","'use strict'\n\nmodule.exports = findAndReplace\n\nvar visit = require('unist-util-visit-parents')\nvar convert = require('unist-util-is/convert')\nvar escape = require('escape-string-regexp')\n\nvar splice = [].splice\n\nfunction findAndReplace(tree, find, replace, options) {\n var settings\n var schema\n\n if (typeof find === 'string' || (find && typeof find.exec === 'function')) {\n schema = [[find, replace]]\n } else {\n schema = find\n options = replace\n }\n\n settings = options || {}\n\n search(tree, settings, handlerFactory(toPairs(schema)))\n\n return tree\n\n function handlerFactory(pairs) {\n var pair = pairs[0]\n\n return handler\n\n function handler(node, parent) {\n var find = pair[0]\n var replace = pair[1]\n var nodes = []\n var start = 0\n var index = parent.children.indexOf(node)\n var position\n var match\n var subhandler\n var value\n\n find.lastIndex = 0\n\n match = find.exec(node.value)\n\n while (match) {\n position = match.index\n value = replace.apply(\n null,\n [].concat(match, {index: match.index, input: match.input})\n )\n\n if (value !== false) {\n if (start !== position) {\n nodes.push({type: 'text', value: node.value.slice(start, position)})\n }\n\n if (typeof value === 'string' && value.length > 0) {\n value = {type: 'text', value: value}\n }\n\n if (value) {\n nodes = [].concat(nodes, value)\n }\n\n start = position + match[0].length\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (position === undefined) {\n nodes = [node]\n index--\n } else {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n nodes.unshift(index, 1)\n splice.apply(parent.children, nodes)\n }\n\n if (pairs.length > 1) {\n subhandler = handlerFactory(pairs.slice(1))\n position = -1\n\n while (++position < nodes.length) {\n node = nodes[position]\n\n if (node.type === 'text') {\n subhandler(node, parent)\n } else {\n search(node, settings, subhandler)\n }\n }\n }\n\n return index + nodes.length + 1\n }\n }\n}\n\nfunction search(tree, settings, handler) {\n var ignored = convert(settings.ignore || [])\n var result = []\n\n visit(tree, 'text', visitor)\n\n return result\n\n function visitor(node, parents) {\n var index = -1\n var parent\n var grandparent\n\n while (++index < parents.length) {\n parent = parents[index]\n\n if (\n ignored(\n parent,\n grandparent ? grandparent.children.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n return handler(node, grandparent)\n }\n}\n\nfunction toPairs(schema) {\n var result = []\n var key\n var index\n\n if (typeof schema !== 'object') {\n throw new Error('Expected array or object as schema')\n }\n\n if ('length' in schema) {\n index = -1\n\n while (++index < schema.length) {\n result.push([\n toExpression(schema[index][0]),\n toFunction(schema[index][1])\n ])\n }\n } else {\n for (key in schema) {\n result.push([toExpression(key), toFunction(schema[key])])\n }\n }\n\n return result\n}\n\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\nfunction toFunction(replace) {\n return typeof replace === 'function' ? replace : returner\n\n function returner() {\n return replace\n }\n}\n","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","exports.canContainEols = ['delete']\nexports.enter = {strikethrough: enterStrikethrough}\nexports.exit = {strikethrough: exitStrikethrough}\n\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n","exports.enter = {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n}\nexports.exit = {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n}\n\nfunction enterTable(token) {\n this.enter({type: 'table', align: token._align, children: []}, token)\n this.setData('inTable', true)\n}\n\nfunction exitTable(token) {\n this.exit(token)\n this.setData('inTable')\n}\n\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\nfunction exit(token) {\n this.exit(token)\n}\n\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\nfunction exitCodeText(token) {\n var value = this.resume()\n\n if (this.getData('inTable')) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n this.stack[this.stack.length - 1].value = value\n this.exit(token)\n}\n\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n","exports.exit = {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n}\n\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n this.stack[this.stack.length - 2].checked =\n token.type === 'taskListCheckValueChecked'\n}\n\nfunction exitParagraphWithTaskListItem(token) {\n var parent = this.stack[this.stack.length - 2]\n var node = this.stack[this.stack.length - 1]\n var siblings = parent.children\n var head = node.children[0]\n var index = -1\n var firstParaghraph\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean' &&\n head &&\n head.type === 'text'\n ) {\n while (++index < siblings.length) {\n if (siblings[index].type === 'paragraph') {\n firstParaghraph = siblings[index]\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n\n this.exit(token)\n}\n","var autolinkLiteral = require('mdast-util-gfm-autolink-literal/to-markdown')\nvar strikethrough = require('mdast-util-gfm-strikethrough/to-markdown')\nvar table = require('mdast-util-gfm-table/to-markdown')\nvar taskListItem = require('mdast-util-gfm-task-list-item/to-markdown')\nvar configure = require('mdast-util-to-markdown/lib/configure')\n\nmodule.exports = toMarkdown\n\nfunction toMarkdown(options) {\n var config = configure(\n {handlers: {}, join: [], unsafe: [], options: {}},\n {\n extensions: [autolinkLiteral, strikethrough, table(options), taskListItem]\n }\n )\n\n return Object.assign(config.options, {\n handlers: config.handlers,\n join: config.join,\n unsafe: config.unsafe\n })\n}\n","var inConstruct = 'phrasing'\nvar notInConstruct = ['autolink', 'link', 'image', 'label']\n\nexports.unsafe = [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct: inConstruct,\n notInConstruct: notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct: inConstruct,\n notInConstruct: notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct: inConstruct,\n notInConstruct: notInConstruct\n }\n]\n","var phrasing = require('mdast-util-to-markdown/lib/util/container-phrasing')\n\nexports.unsafe = [{character: '~', inConstruct: 'phrasing'}]\nexports.handlers = {delete: handleDelete}\n\nhandleDelete.peek = peekDelete\n\nfunction handleDelete(node, _, context) {\n var exit = context.enter('emphasis')\n var value = phrasing(node, context, {before: '~', after: '~'})\n exit()\n return '~~' + value + '~~'\n}\n\nfunction peekDelete() {\n return '~'\n}\n","var phrasing = require('mdast-util-to-markdown/lib/util/container-phrasing')\nvar defaultInlineCode = require('mdast-util-to-markdown/lib/handle/inline-code')\nvar markdownTable = require('markdown-table')\n\nmodule.exports = toMarkdown\n\nfunction toMarkdown(options) {\n var settings = options || {}\n var padding = settings.tableCellPadding\n var alignDelimiters = settings.tablePipeAlign\n var stringLength = settings.stringLength\n var around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n table: handleTable,\n tableRow: handleTableRow,\n tableCell: handleTableCell,\n inlineCode: inlineCodeWithTable\n }\n }\n\n function handleTable(node, _, context) {\n return serializeData(handleTableAsData(node, context), node.align)\n }\n\n // This function isn’t really used normally, because we handle rows at the\n // table level.\n // But, if someone passes in a table row, this ensures we make somewhat sense.\n function handleTableRow(node, _, context) {\n var row = handleTableRowAsData(node, context)\n // `markdown-table` will always add an align row\n var value = serializeData([row])\n return value.slice(0, value.indexOf('\\n'))\n }\n\n function handleTableCell(node, _, context) {\n var exit = context.enter('tableCell')\n var value = phrasing(node, context, {before: around, after: around})\n exit()\n return value\n }\n\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align: align,\n alignDelimiters: alignDelimiters,\n padding: padding,\n stringLength: stringLength\n })\n }\n\n function handleTableAsData(node, context) {\n var children = node.children\n var index = -1\n var length = children.length\n var result = []\n var subexit = context.enter('table')\n\n while (++index < length) {\n result[index] = handleTableRowAsData(children[index], context)\n }\n\n subexit()\n\n return result\n }\n\n function handleTableRowAsData(node, context) {\n var children = node.children\n var index = -1\n var length = children.length\n var result = []\n var subexit = context.enter('tableRow')\n\n while (++index < length) {\n result[index] = handleTableCell(children[index], node, context)\n }\n\n subexit()\n\n return result\n }\n\n function inlineCodeWithTable(node, parent, context) {\n var value = defaultInlineCode(node, parent, context)\n\n if (context.stack.indexOf('tableCell') !== -1) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","module.exports = inlineCode\ninlineCode.peek = inlineCodePeek\n\nvar patternCompile = require('../util/pattern-compile')\n\nfunction inlineCode(node, parent, context) {\n var value = node.value || ''\n var sequence = '`'\n var index = -1\n var pattern\n var expression\n var match\n var position\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n (/[ \\r\\n`]/.test(value.charAt(0)) ||\n /[ \\r\\n`]/.test(value.charAt(value.length - 1)))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < context.unsafe.length) {\n pattern = context.unsafe[index]\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n expression = patternCompile(pattern)\n\n while ((match = expression.exec(value))) {\n position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\nfunction inlineCodePeek() {\n return '`'\n}\n","module.exports = patternCompile\n\nfunction patternCompile(pattern) {\n var before\n var after\n\n if (!pattern._compiled) {\n before = pattern.before ? '(?:' + pattern.before + ')' : ''\n after = pattern.after ? '(?:' + pattern.after + ')' : ''\n\n if (pattern.atBreak) {\n before = '[\\\\r\\\\n][\\\\t ]*' + before\n }\n\n pattern._compiled = new RegExp(\n (before ? '(' + before + ')' : '') +\n (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n pattern.character +\n (after || ''),\n 'g'\n )\n }\n\n return pattern._compiled\n}\n","'use strict'\n\nvar repeat = require('repeat-string')\n\nmodule.exports = markdownTable\n\nvar trailingWhitespace = / +$/\n\n// Characters.\nvar space = ' '\nvar lineFeed = '\\n'\nvar dash = '-'\nvar colon = ':'\nvar verticalBar = '|'\n\nvar x = 0\nvar C = 67\nvar L = 76\nvar R = 82\nvar c = 99\nvar l = 108\nvar r = 114\n\n// Create a table from a matrix of strings.\nfunction markdownTable(table, options) {\n var settings = options || {}\n var padding = settings.padding !== false\n var start = settings.delimiterStart !== false\n var end = settings.delimiterEnd !== false\n var align = (settings.align || []).concat()\n var alignDelimiters = settings.alignDelimiters !== false\n var alignments = []\n var stringLength = settings.stringLength || defaultStringLength\n var rowIndex = -1\n var rowLength = table.length\n var cellMatrix = []\n var sizeMatrix = []\n var row = []\n var sizes = []\n var longestCellByColumn = []\n var mostCellsPerRow = 0\n var cells\n var columnIndex\n var columnLength\n var largest\n var size\n var cell\n var lines\n var line\n var before\n var after\n var code\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < rowLength) {\n cells = table[rowIndex]\n columnIndex = -1\n columnLength = cells.length\n row = []\n sizes = []\n\n if (columnLength > mostCellsPerRow) {\n mostCellsPerRow = columnLength\n }\n\n while (++columnIndex < columnLength) {\n cell = serialize(cells[columnIndex])\n\n if (alignDelimiters === true) {\n size = stringLength(cell)\n sizes[columnIndex] = size\n\n largest = longestCellByColumn[columnIndex]\n\n if (largest === undefined || size > largest) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n columnIndex = -1\n columnLength = mostCellsPerRow\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < columnLength) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n code = toAlignment(align)\n\n while (++columnIndex < columnLength) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n columnLength = mostCellsPerRow\n row = []\n sizes = []\n\n while (++columnIndex < columnLength) {\n code = alignments[columnIndex]\n before = ''\n after = ''\n\n if (code === l) {\n before = colon\n } else if (code === r) {\n after = colon\n } else if (code === c) {\n before = colon\n after = colon\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n size = alignDelimiters\n ? Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n : 1\n\n cell = before + repeat(dash, size) + after\n\n if (alignDelimiters === true) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n rowLength = cellMatrix.length\n lines = []\n\n while (++rowIndex < rowLength) {\n row = cellMatrix[rowIndex]\n sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n columnLength = mostCellsPerRow\n line = []\n\n while (++columnIndex < columnLength) {\n cell = row[columnIndex] || ''\n before = ''\n after = ''\n\n if (alignDelimiters === true) {\n size = longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n code = alignments[columnIndex]\n\n if (code === r) {\n before = repeat(space, size)\n } else if (code === c) {\n if (size % 2 === 0) {\n before = repeat(space, size / 2)\n after = before\n } else {\n before = repeat(space, size / 2 + 0.5)\n after = repeat(space, size / 2 - 0.5)\n }\n } else {\n after = repeat(space, size)\n }\n }\n\n if (start === true && columnIndex === 0) {\n line.push(verticalBar)\n }\n\n if (\n padding === true &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(alignDelimiters === false && cell === '') &&\n (start === true || columnIndex !== 0)\n ) {\n line.push(space)\n }\n\n if (alignDelimiters === true) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (alignDelimiters === true) {\n line.push(after)\n }\n\n if (padding === true) {\n line.push(space)\n }\n\n if (end === true || columnIndex !== columnLength - 1) {\n line.push(verticalBar)\n }\n }\n\n line = line.join('')\n\n if (end === false) {\n line = line.replace(trailingWhitespace, '')\n }\n\n lines.push(line)\n }\n\n return lines.join(lineFeed)\n}\n\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\nfunction defaultStringLength(value) {\n return value.length\n}\n\nfunction toAlignment(value) {\n var code = typeof value === 'string' ? value.charCodeAt(0) : x\n\n return code === L || code === l\n ? l\n : code === R || code === r\n ? r\n : code === C || code === c\n ? c\n : x\n}\n","var defaultListItem = require('mdast-util-to-markdown/lib/handle/list-item')\n\nexports.unsafe = [{atBreak: true, character: '-', after: '[:|-]'}]\n\nexports.handlers = {\n listItem: listItemWithTaskListItem\n}\n\nfunction listItemWithTaskListItem(node, parent, context) {\n var value = defaultListItem(node, parent, context)\n var head = node.children[0]\n\n if (typeof node.checked === 'boolean' && head && head.type === 'paragraph') {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n function check($0) {\n return $0 + '[' + (node.checked ? 'x' : ' ') + '] '\n }\n}\n","module.exports = listItem\n\nvar repeat = require('repeat-string')\nvar checkBullet = require('../util/check-bullet')\nvar checkListItemIndent = require('../util/check-list-item-indent')\nvar flow = require('../util/container-flow')\nvar indentLines = require('../util/indent-lines')\n\nfunction listItem(node, parent, context) {\n var bullet = checkBullet(context)\n var listItemIndent = checkListItemIndent(context)\n var size\n var value\n var exit\n\n if (parent && parent.ordered) {\n bullet =\n (parent.start > -1 ? parent.start : 1) +\n (context.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n '.'\n }\n\n size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' && ((parent && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n exit = context.enter('listItem')\n value = indentLines(flow(node, context), map)\n exit()\n\n return value\n\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : repeat(' ', size)) + line\n }\n\n return (blank ? bullet : bullet + repeat(' ', size - bullet.length)) + line\n }\n}\n","module.exports = checkBullet\n\nfunction checkBullet(context) {\n var marker = context.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","module.exports = checkListItemIndent\n\nfunction checkListItemIndent(context) {\n var style = context.options.listItemIndent || 'tab'\n\n if (style === 1 || style === '1') {\n return 'one'\n }\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","module.exports = flow\n\nvar repeat = require('repeat-string')\n\nfunction flow(parent, context) {\n var children = parent.children || []\n var results = []\n var index = -1\n var child\n\n while (++index < children.length) {\n child = children[index]\n\n results.push(\n context.handle(child, parent, context, {before: '\\n', after: '\\n'})\n )\n\n if (index + 1 < children.length) {\n results.push(between(child, children[index + 1]))\n }\n }\n\n return results.join('')\n\n function between(left, right) {\n var index = -1\n var result\n\n while (++index < context.join.length) {\n result = context.join[index](left, right, parent, context)\n\n if (result === true || result === 1) {\n break\n }\n\n if (typeof result === 'number') {\n return repeat('\\n', 1 + Number(result))\n }\n\n if (result === false) {\n return '\\n\\n<!---->\\n\\n'\n }\n }\n\n return '\\n\\n'\n }\n}\n","module.exports = indentLines\n\nvar eol = /\\r?\\n|\\r/g\n\nfunction indentLines(value, map) {\n var result = []\n var start = 0\n var line = 0\n var match\n\n while ((match = eol.exec(value))) {\n one(value.slice(start, match.index))\n result.push(match[0])\n start = match.index + match[0].length\n line++\n }\n\n one(value.slice(start))\n\n return result.join('')\n\n function one(value) {\n result.push(map(value, line, !value))\n }\n}\n","module.exports = configure\n\nfunction configure(base, extension) {\n var index = -1\n var key\n\n // First do subextensions.\n if (extension.extensions) {\n while (++index < extension.extensions.length) {\n configure(base, extension.extensions[index])\n }\n }\n\n for (key in extension) {\n if (key === 'extensions') {\n // Empty.\n } else if (key === 'unsafe' || key === 'join') {\n base[key] = base[key].concat(extension[key] || [])\n } else if (key === 'handlers') {\n base[key] = Object.assign(base[key], extension[key] || {})\n } else {\n base.options[key] = extension[key]\n }\n }\n\n return base\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _brace = require('brace');\n\nvar _brace2 = _interopRequireDefault(_brace);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _lodash = require('lodash.isequal');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _editorOptions = require('./editorOptions.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _ace$acequire = _brace2.default.acequire('ace/range'),\n Range = _ace$acequire.Range;\n\nvar ReactAce = function (_Component) {\n _inherits(ReactAce, _Component);\n\n function ReactAce(props) {\n _classCallCheck(this, ReactAce);\n\n var _this = _possibleConstructorReturn(this, (ReactAce.__proto__ || Object.getPrototypeOf(ReactAce)).call(this, props));\n\n _editorOptions.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n return _this;\n }\n\n _createClass(ReactAce, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _this2 = this;\n\n var _props = this.props,\n className = _props.className,\n onBeforeLoad = _props.onBeforeLoad,\n onValidate = _props.onValidate,\n mode = _props.mode,\n focus = _props.focus,\n theme = _props.theme,\n fontSize = _props.fontSize,\n value = _props.value,\n defaultValue = _props.defaultValue,\n cursorStart = _props.cursorStart,\n showGutter = _props.showGutter,\n wrapEnabled = _props.wrapEnabled,\n showPrintMargin = _props.showPrintMargin,\n _props$scrollMargin = _props.scrollMargin,\n scrollMargin = _props$scrollMargin === undefined ? [0, 0, 0, 0] : _props$scrollMargin,\n keyboardHandler = _props.keyboardHandler,\n onLoad = _props.onLoad,\n commands = _props.commands,\n annotations = _props.annotations,\n markers = _props.markers;\n\n\n this.editor = _brace2.default.edit(this.refEditor);\n\n if (onBeforeLoad) {\n onBeforeLoad(_brace2.default);\n }\n\n var editorProps = Object.keys(this.props.editorProps);\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n this.editor.getSession().setMode('ace/mode/' + mode);\n this.editor.setTheme('ace/theme/' + theme);\n this.editor.setFontSize(fontSize);\n this.editor.getSession().setValue(!defaultValue ? value : defaultValue, cursorStart);\n this.editor.navigateFileEnd();\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on('focus', this.onFocus);\n this.editor.on('blur', this.onBlur);\n this.editor.on('copy', this.onCopy);\n this.editor.on('paste', this.onPaste);\n this.editor.on('change', this.onChange);\n this.editor.on('input', this.onInput);\n this.editor.getSession().selection.on('changeSelection', this.onSelectionChange);\n this.editor.getSession().selection.on('changeCursor', this.onCursorChange);\n if (onValidate) {\n this.editor.getSession().on('changeAnnotation', function () {\n var annotations = _this2.editor.getSession().getAnnotations();\n _this2.props.onValidate(annotations);\n });\n }\n this.editor.session.on('changeScrollTop', this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n }\n\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.editor.$options;\n for (var _i = 0; _i < _editorOptions.editorOptions.length; _i++) {\n var option = _editorOptions.editorOptions[_i];\n if (availableOptions.hasOwnProperty(option)) {\n this.editor.setOption(option, this.props[option]);\n } else if (this.props[option]) {\n console.warn('ReaceAce: editor option ' + option + ' was activated but not found. Did you need to import a related tool or did you possibly mispell the option?');\n }\n }\n this.handleOptions(this.props);\n\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec == 'string') {\n _this2.editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n _this2.editor.commands.addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + keyboardHandler);\n }\n\n if (className) {\n this.refEditor.className += ' ' + className;\n }\n\n if (focus) {\n this.editor.focus();\n }\n\n if (onLoad) {\n onLoad(this.editor);\n }\n\n this.editor.resize();\n }\n }, {\n key: 'debounce',\n value: function debounce(fn, delay) {\n var timer = null;\n return function () {\n var context = this,\n args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n var oldProps = this.props;\n\n for (var i = 0; i < _editorOptions.editorOptions.length; i++) {\n var option = _editorOptions.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n this.editor.setOption(option, nextProps[option]);\n }\n }\n\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray = appliedClasses.trim().split(' ');\n var oldClassesArray = oldProps.className.trim().split(' ');\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className = ' ' + nextProps.className + ' ' + appliedClassesArray.join(' ');\n }\n\n if (nextProps.mode !== oldProps.mode) {\n this.editor.getSession().setMode('ace/mode/' + nextProps.mode);\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme('ace/theme/' + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler('ace/keyboard/' + nextProps.keyboardHandler);\n } else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!(0, _lodash2.default)(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n if (!(0, _lodash2.default)(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (!(0, _lodash2.default)(nextProps.markers, oldProps.markers) && Array.isArray(nextProps.markers)) {\n this.handleMarkers(nextProps.markers);\n }\n\n // this doesn't look like it works at all....\n if (!(0, _lodash2.default)(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n if (this.editor && this.editor.getValue() !== nextProps.value) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n\n if (nextProps.focus && !oldProps.focus) {\n this.editor.focus();\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (prevProps.height !== this.props.height || prevProps.width !== this.props.width) {\n this.editor.resize();\n }\n }\n }, {\n key: 'handleScrollMargins',\n value: function handleScrollMargins() {\n var margins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0, 0, 0];\n\n this.editor.renderer.setScrollMargins(margins[0], margins[1], margins[2], margins[3]);\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n }, {\n key: 'onChange',\n value: function onChange(event) {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n }\n }, {\n key: 'onSelectionChange',\n value: function onSelectionChange(event) {\n if (this.props.onSelectionChange) {\n var value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n }\n }, {\n key: 'onCursorChange',\n value: function onCursorChange(event) {\n if (this.props.onCursorChange) {\n var value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n }\n }, {\n key: 'onInput',\n value: function onInput(event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n }\n }, {\n key: 'onFocus',\n value: function onFocus(event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n }\n }, {\n key: 'onBlur',\n value: function onBlur(event) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n }\n }, {\n key: 'onCopy',\n value: function onCopy(text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n }, {\n key: 'onPaste',\n value: function onPaste(text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n }, {\n key: 'onScroll',\n value: function onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n }, {\n key: 'handleOptions',\n value: function handleOptions(props) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n }, {\n key: 'handleMarkers',\n value: function handleMarkers(markers) {\n var _this3 = this;\n\n // remove foreground markers\n var currentMarkers = this.editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (var _i2 in currentMarkers) {\n if (currentMarkers.hasOwnProperty(_i2)) {\n this.editor.getSession().removeMarker(currentMarkers[_i2].id);\n }\n }\n // add new markers\n markers.forEach(function (_ref) {\n var startRow = _ref.startRow,\n startCol = _ref.startCol,\n endRow = _ref.endRow,\n endCol = _ref.endCol,\n className = _ref.className,\n type = _ref.type,\n _ref$inFront = _ref.inFront,\n inFront = _ref$inFront === undefined ? false : _ref$inFront;\n\n var range = new Range(startRow, startCol, endRow, endCol);\n _this3.editor.getSession().addMarker(range, className, type, inFront);\n });\n }\n }, {\n key: 'updateRef',\n value: function updateRef(item) {\n this.refEditor = item;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n name = _props2.name,\n width = _props2.width,\n height = _props2.height,\n style = _props2.style;\n\n var divStyle = _extends({ width: width, height: height }, style);\n return _react2.default.createElement('div', { ref: this.updateRef,\n id: name,\n style: divStyle\n });\n }\n }]);\n\n return ReactAce;\n}(_react.Component);\n\nexports.default = ReactAce;\n\n\nReactAce.propTypes = {\n mode: _propTypes2.default.string,\n focus: _propTypes2.default.bool,\n theme: _propTypes2.default.string,\n name: _propTypes2.default.string,\n className: _propTypes2.default.string,\n height: _propTypes2.default.string,\n width: _propTypes2.default.string,\n fontSize: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n showGutter: _propTypes2.default.bool,\n onChange: _propTypes2.default.func,\n onCopy: _propTypes2.default.func,\n onPaste: _propTypes2.default.func,\n onFocus: _propTypes2.default.func,\n onInput: _propTypes2.default.func,\n onBlur: _propTypes2.default.func,\n onScroll: _propTypes2.default.func,\n value: _propTypes2.default.string,\n defaultValue: _propTypes2.default.string,\n onLoad: _propTypes2.default.func,\n onSelectionChange: _propTypes2.default.func,\n onCursorChange: _propTypes2.default.func,\n onBeforeLoad: _propTypes2.default.func,\n onValidate: _propTypes2.default.func,\n minLines: _propTypes2.default.number,\n maxLines: _propTypes2.default.number,\n readOnly: _propTypes2.default.bool,\n highlightActiveLine: _propTypes2.default.bool,\n tabSize: _propTypes2.default.number,\n showPrintMargin: _propTypes2.default.bool,\n cursorStart: _propTypes2.default.number,\n debounceChangePeriod: _propTypes2.default.number,\n editorProps: _propTypes2.default.object,\n setOptions: _propTypes2.default.object,\n style: _propTypes2.default.object,\n scrollMargin: _propTypes2.default.array,\n annotations: _propTypes2.default.array,\n markers: _propTypes2.default.array,\n keyboardHandler: _propTypes2.default.string,\n wrapEnabled: _propTypes2.default.bool,\n enableBasicAutocompletion: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.array]),\n enableLiveAutocompletion: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.array]),\n commands: _propTypes2.default.array\n};\n\nReactAce.defaultProps = {\n name: 'brace-editor',\n focus: false,\n mode: '',\n theme: '',\n height: '500px',\n width: '500px',\n value: '',\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _brace = require('brace');\n\nvar _brace2 = _interopRequireDefault(_brace);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _lodash = require('lodash.isequal');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _lodash3 = require('lodash.get');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _editorOptions = require('./editorOptions.js');\n\nrequire('brace/ext/split');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _ace$acequire = _brace2.default.acequire('ace/range'),\n Range = _ace$acequire.Range;\n\nvar _ace$acequire2 = _brace2.default.acequire('ace/split'),\n Split = _ace$acequire2.Split;\n\nvar SplitComponent = function (_Component) {\n _inherits(SplitComponent, _Component);\n\n function SplitComponent(props) {\n _classCallCheck(this, SplitComponent);\n\n var _this = _possibleConstructorReturn(this, (SplitComponent.__proto__ || Object.getPrototypeOf(SplitComponent)).call(this, props));\n\n _editorOptions.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n return _this;\n }\n\n _createClass(SplitComponent, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _this2 = this;\n\n var _props = this.props,\n className = _props.className,\n onBeforeLoad = _props.onBeforeLoad,\n mode = _props.mode,\n focus = _props.focus,\n theme = _props.theme,\n fontSize = _props.fontSize,\n value = _props.value,\n defaultValue = _props.defaultValue,\n cursorStart = _props.cursorStart,\n showGutter = _props.showGutter,\n wrapEnabled = _props.wrapEnabled,\n showPrintMargin = _props.showPrintMargin,\n _props$scrollMargin = _props.scrollMargin,\n scrollMargin = _props$scrollMargin === undefined ? [0, 0, 0, 0] : _props$scrollMargin,\n keyboardHandler = _props.keyboardHandler,\n onLoad = _props.onLoad,\n commands = _props.commands,\n annotations = _props.annotations,\n markers = _props.markers,\n splits = _props.splits;\n\n\n this.editor = _brace2.default.edit(this.refEditor);\n\n if (onBeforeLoad) {\n onBeforeLoad(_brace2.default);\n }\n\n var editorProps = Object.keys(this.props.editorProps);\n\n var split = new Split(this.editor.container, 'ace/theme/' + theme, splits);\n this.editor.env.split = split;\n\n this.splitEditor = split.getEditor(0);\n this.split = split;\n // in a split scenario we don't want a print margin for the entire application\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false);\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.splitEditor.$options;\n split.forEach(function (editor, index) {\n for (var i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = _this2.props.editorProps[editorProps[i]];\n }\n var defaultValueForEditor = (0, _lodash4.default)(defaultValue, index);\n var valueForEditor = (0, _lodash4.default)(value, index, '');\n editor.session.setUndoManager(new _brace.UndoManager());\n editor.setTheme('ace/theme/' + theme);\n editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n editor.getSession().setMode('ace/mode/' + mode);\n editor.setFontSize(fontSize);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on('focus', _this2.onFocus);\n editor.on('blur', _this2.onBlur);\n editor.on('input', _this2.onInput);\n editor.on('copy', _this2.onCopy);\n editor.on('paste', _this2.onPaste);\n editor.on('change', _this2.onChange);\n editor.getSession().selection.on('changeSelection', _this2.onSelectionChange);\n editor.getSession().selection.on('changeCursor', _this2.onCursorChange);\n editor.session.on('changeScrollTop', _this2.onScroll);\n editor.setValue(defaultValueForEditor === undefined ? valueForEditor : defaultValueForEditor, cursorStart);\n var newAnnotations = (0, _lodash4.default)(annotations, index, []);\n var newMarkers = (0, _lodash4.default)(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n if (newMarkers && newMarkers.length > 0) {\n _this2.handleMarkers(newMarkers, editor);\n }\n\n for (var _i = 0; _i < _editorOptions.editorOptions.length; _i++) {\n var option = _editorOptions.editorOptions[_i];\n if (availableOptions.hasOwnProperty(option)) {\n editor.setOption(option, _this2.props[option]);\n } else if (_this2.props[option]) {\n console.warn('ReaceAce: editor option ' + option + ' was activated but not found. Did you need to import a related tool or did you possibly mispell the option?');\n }\n }\n _this2.handleOptions(_this2.props, editor);\n\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec == 'string') {\n editor.commands.bindKey(command.bindKey, command.exec);\n } else {\n editor.commands.addCommand(command);\n }\n });\n }\n\n if (keyboardHandler) {\n editor.setKeyboardHandler('ace/keyboard/' + keyboardHandler);\n }\n });\n\n if (className) {\n this.refEditor.className += ' ' + className;\n }\n\n if (focus) {\n this.splitEditor.focus();\n }\n\n var sp = this.editor.env.split;\n sp.setOrientation(this.props.orientation === 'below' ? sp.BELOW : sp.BESIDE);\n sp.resize(true);\n if (onLoad) {\n onLoad(sp);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n var _this3 = this;\n\n var oldProps = this.props;\n\n var split = this.editor.env.split;\n\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(nextProps.orientation === 'below' ? split.BELOW : split.BESIDE);\n }\n\n split.forEach(function (editor, index) {\n\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode('ace/mode/' + nextProps.mode);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler('ace/keyboard/' + nextProps.keyboardHandler);\n } else {\n editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n\n for (var i = 0; i < _editorOptions.editorOptions.length; i++) {\n var option = _editorOptions.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option, nextProps[option]);\n }\n }\n if (!(0, _lodash2.default)(nextProps.setOptions, oldProps.setOptions)) {\n _this3.handleOptions(nextProps, editor);\n }\n var nextValue = (0, _lodash4.default)(nextProps.value, index, '');\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n _this3.silent = true;\n var pos = editor.session.selection.toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n editor.session.selection.fromJSON(pos);\n _this3.silent = false;\n }\n var newAnnotations = (0, _lodash4.default)(nextProps.annotations, index, []);\n var oldAnnotations = (0, _lodash4.default)(oldProps.annotations, index, []);\n if (!(0, _lodash2.default)(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n\n var newMarkers = (0, _lodash4.default)(nextProps.markers, index, []);\n var oldMarkers = (0, _lodash4.default)(oldProps.markers, index, []);\n if (!(0, _lodash2.default)(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n _this3.handleMarkers(newMarkers, editor);\n }\n });\n\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray = appliedClasses.trim().split(' ');\n var oldClassesArray = oldProps.className.trim().split(' ');\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray.indexOf(oldClass);\n appliedClassesArray.splice(index, 1);\n });\n this.refEditor.className = ' ' + nextProps.className + ' ' + appliedClassesArray.join(' ');\n }\n\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme('ace/theme/' + nextProps.theme);\n }\n\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n if (nextProps.height !== this.props.height || nextProps.width !== this.props.width) {\n this.editor.resize();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.editor.destroy();\n this.editor = null;\n }\n }, {\n key: 'onChange',\n value: function onChange(event) {\n if (this.props.onChange && !this.silent) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getValue());\n });\n this.props.onChange(value, event);\n }\n }\n }, {\n key: 'onSelectionChange',\n value: function onSelectionChange(event) {\n if (this.props.onSelectionChange) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getSelection());\n });\n this.props.onSelectionChange(value, event);\n }\n }\n }, {\n key: 'onCursorChange',\n value: function onCursorChange(event) {\n if (this.props.onCursorChange) {\n var value = [];\n this.editor.env.split.forEach(function (editor) {\n value.push(editor.getSelection());\n });\n this.props.onCursorChange(value, event);\n }\n }\n }, {\n key: 'onFocus',\n value: function onFocus(event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n }\n }, {\n key: 'onInput',\n value: function onInput(event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n }\n }, {\n key: 'onBlur',\n value: function onBlur(event) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n }\n }, {\n key: 'onCopy',\n value: function onCopy(text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n }\n }, {\n key: 'onPaste',\n value: function onPaste(text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n }\n }, {\n key: 'onScroll',\n value: function onScroll() {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n }\n }, {\n key: 'handleOptions',\n value: function handleOptions(props, editor) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n }\n }, {\n key: 'handleMarkers',\n value: function handleMarkers(markers, editor) {\n // remove foreground markers\n var currentMarkers = editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = editor.getSession().getMarkers(false);\n for (var _i2 in currentMarkers) {\n if (currentMarkers.hasOwnProperty(_i2)) {\n editor.getSession().removeMarker(currentMarkers[_i2].id);\n }\n }\n // add new markers\n markers.forEach(function (_ref) {\n var startRow = _ref.startRow,\n startCol = _ref.startCol,\n endRow = _ref.endRow,\n endCol = _ref.endCol,\n className = _ref.className,\n type = _ref.type,\n _ref$inFront = _ref.inFront,\n inFront = _ref$inFront === undefined ? false : _ref$inFront;\n\n var range = new Range(startRow, startCol, endRow, endCol);\n editor.getSession().addMarker(range, className, type, inFront);\n });\n }\n }, {\n key: 'updateRef',\n value: function updateRef(item) {\n this.refEditor = item;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n name = _props2.name,\n width = _props2.width,\n height = _props2.height,\n style = _props2.style;\n\n var divStyle = _extends({ width: width, height: height }, style);\n return _react2.default.createElement('div', { ref: this.updateRef,\n id: name,\n style: divStyle\n });\n }\n }]);\n\n return SplitComponent;\n}(_react.Component);\n\nexports.default = SplitComponent;\n\n\nSplitComponent.propTypes = {\n mode: _propTypes2.default.string,\n splits: _propTypes2.default.number,\n orientation: _propTypes2.default.string,\n focus: _propTypes2.default.bool,\n theme: _propTypes2.default.string,\n name: _propTypes2.default.string,\n className: _propTypes2.default.string,\n height: _propTypes2.default.string,\n width: _propTypes2.default.string,\n fontSize: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n showGutter: _propTypes2.default.bool,\n onChange: _propTypes2.default.func,\n onCopy: _propTypes2.default.func,\n onPaste: _propTypes2.default.func,\n onFocus: _propTypes2.default.func,\n onInput: _propTypes2.default.func,\n onBlur: _propTypes2.default.func,\n onScroll: _propTypes2.default.func,\n value: _propTypes2.default.arrayOf(_propTypes2.default.string),\n defaultValue: _propTypes2.default.arrayOf(_propTypes2.default.string),\n onLoad: _propTypes2.default.func,\n onSelectionChange: _propTypes2.default.func,\n onCursorChange: _propTypes2.default.func,\n onBeforeLoad: _propTypes2.default.func,\n minLines: _propTypes2.default.number,\n maxLines: _propTypes2.default.number,\n readOnly: _propTypes2.default.bool,\n highlightActiveLine: _propTypes2.default.bool,\n tabSize: _propTypes2.default.number,\n showPrintMargin: _propTypes2.default.bool,\n cursorStart: _propTypes2.default.number,\n editorProps: _propTypes2.default.object,\n setOptions: _propTypes2.default.object,\n style: _propTypes2.default.object,\n scrollMargin: _propTypes2.default.array,\n annotations: _propTypes2.default.array,\n markers: _propTypes2.default.array,\n keyboardHandler: _propTypes2.default.string,\n wrapEnabled: _propTypes2.default.bool,\n enableBasicAutocompletion: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.array]),\n enableLiveAutocompletion: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.array]),\n commands: _propTypes2.default.array\n};\n\nSplitComponent.defaultProps = {\n name: 'brace-editor',\n focus: false,\n orientation: 'beside',\n splits: 2,\n mode: '',\n theme: '',\n height: '500px',\n width: '500px',\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n};","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Editor = acequire(\"./editor\").Editor;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = acequire(\"./edit_session\").EditSession;\n\n\nvar Split = function(container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n\n\n this.on(\"focus\", function(editor) {\n this.$cEditor = editor;\n }.bind(this));\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createEditor = function() {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n\n editor.on(\"focus\", function() {\n this._emit(\"focus\", editor);\n }.bind(this));\n\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n\n this.setSplits = function(splits) {\n var editor;\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n\n if (splits == this.$splits) {\n return;\n } else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits ++;\n }\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits ++;\n }\n } else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits --;\n }\n }\n this.resize();\n };\n this.getSplits = function() {\n return this.$splits;\n };\n this.getEditor = function(idx) {\n return this.$editors[idx];\n };\n this.getCurrentEditor = function() {\n return this.$cEditor;\n };\n this.focus = function() {\n this.$cEditor.focus();\n };\n this.blur = function() {\n this.$cEditor.blur();\n };\n this.setTheme = function(theme) {\n this.$editors.forEach(function(editor) {\n editor.setTheme(theme);\n });\n };\n this.setKeyboardHandler = function(keybinding) {\n this.$editors.forEach(function(editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n this.forEach = function(callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n\n\n this.$fontSize = \"\";\n this.setFontSize = function(size) {\n this.$fontSize = size;\n this.forEach(function(editor) {\n editor.setFontSize(size);\n });\n };\n\n this.$cloneSession = function(session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n\n var undoManager = session.getUndoManager();\n if (undoManager) {\n var undoManagerProxy = new UndoManagerProxy(undoManager, s);\n s.setUndoManager(undoManagerProxy);\n }\n s.$informUndoManager = lang.delayedCall(function() { s.$deltas = []; });\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min,\n session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n\n return s;\n };\n this.setSession = function(session, idx) {\n var editor;\n if (idx == null) {\n editor = this.$cEditor;\n } else {\n editor = this.$editors[idx];\n }\n var isUsed = this.$editors.some(function(editor) {\n return editor.session === session;\n });\n\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n editor.setSession(session);\n return session;\n };\n this.getOrientation = function() {\n return this.$orientation;\n };\n this.setOrientation = function(orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n this.$orientation = orientation;\n this.resize();\n };\n this.resize = function() {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n } else {\n var editorHeight = height / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n\n}).call(Split.prototype);\n\n \nfunction UndoManagerProxy(undoManager, session) {\n this.$u = undoManager;\n this.$doc = session;\n}\n\n(function() {\n this.execute = function(options) {\n this.$u.execute(options);\n };\n\n this.undo = function() {\n var selectionRange = this.$u.undo(true);\n if (selectionRange) {\n this.$doc.selection.setSelectionRange(selectionRange);\n }\n };\n\n this.redo = function() {\n var selectionRange = this.$u.redo(true);\n if (selectionRange) {\n this.$doc.selection.setSelectionRange(selectionRange);\n }\n };\n\n this.reset = function() {\n this.$u.reset();\n };\n\n this.hasUndo = function() {\n return this.$u.hasUndo();\n };\n\n this.hasRedo = function() {\n return this.$u.hasRedo();\n };\n}).call(UndoManagerProxy.prototype);\n\nexports.Split = Split;\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(acequire, exports, module) {\n\"use strict\";\nmodule.exports = acequire(\"../split\");\n\n});\n (function() {\n ace.acequire([\"ace/ext/split\"], function() {});\n })();\n ","ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n var keywords = (\n \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n \"raise|return|try|while|with|yield|async|await\"\n );\n\n var builtinConstants = (\n \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n );\n\n var builtinFunctions = (\n \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n \"binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n \"__import__|complex|hash|min|set|apply|delattr|help|next|setattr|\" +\n \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern\"\n );\n var keywordMapper = this.createKeywordMapper({\n \"invalid.deprecated\": \"debugger\",\n \"support.function\": builtinFunctions,\n \"constant.language\": builtinConstants,\n \"keyword\": keywords\n }, \"identifier\");\n\n var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n var octInteger = \"(?:0[oO]?[0-7]+)\";\n var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n var binInteger = \"(?:0[bB][01]+)\";\n var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n var exponent = \"(?:[eE][+-]?\\\\d+)\";\n var fraction = \"(?:\\\\.\\\\d+)\";\n var intPart = \"(?:\\\\d+)\";\n var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n this.$rules = {\n \"start\" : [ {\n token : \"comment\",\n regex : \"#.*$\"\n }, {\n token : \"string\", // multi line \"\"\" string start\n regex : strPre + '\"{3}',\n next : \"qqstring3\"\n }, {\n token : \"string\", // \" string\n regex : strPre + '\"(?=.)',\n next : \"qqstring\"\n }, {\n token : \"string\", // multi line ''' string start\n regex : strPre + \"'{3}\",\n next : \"qstring3\"\n }, {\n token : \"string\", // ' string\n regex : strPre + \"'(?=.)\",\n next : \"qstring\"\n }, {\n token : \"constant.numeric\", // imaginary\n regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : floatNumber\n }, {\n token : \"constant.numeric\", // long integer\n regex : integer + \"[lL]\\\\b\"\n }, {\n token : \"constant.numeric\", // integer\n regex : integer + \"\\\\b\"\n }, {\n token : keywordMapper,\n regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token : \"keyword.operator\",\n regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token : \"paren.lparen\",\n regex : \"[\\\\[\\\\(\\\\{]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\]\\\\)\\\\}]\"\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n } ],\n \"qqstring3\" : [ {\n token : \"constant.language.escape\",\n regex : stringEscape\n }, {\n token : \"string\", // multi line \"\"\" string end\n regex : '\"{3}',\n next : \"start\"\n }, {\n defaultToken : \"string\"\n } ],\n \"qstring3\" : [ {\n token : \"constant.language.escape\",\n regex : stringEscape\n }, {\n token : \"string\", // multi line ''' string end\n regex : \"'{3}\",\n next : \"start\"\n }, {\n defaultToken : \"string\"\n } ],\n \"qqstring\" : [{\n token : \"constant.language.escape\",\n regex : stringEscape\n }, {\n token : \"string\",\n regex : \"\\\\\\\\$\",\n next : \"qqstring\"\n }, {\n token : \"string\",\n regex : '\"|$',\n next : \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"qstring\" : [{\n token : \"constant.language.escape\",\n regex : stringEscape\n }, {\n token : \"string\",\n regex : \"\\\\\\\\$\",\n next : \"qstring\"\n }, {\n token : \"string\",\n regex : \"'|$\",\n next : \"start\"\n }, {\n defaultToken: \"string\"\n }]\n };\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n var line = session.getLine(row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, match.index);\n if (match[2])\n return this.indentationBlock(session, row, match.index + match[2].length);\n return this.indentationBlock(session, row);\n }\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar PythonHighlightRules = acequire(\"./python_highlight_rules\").PythonHighlightRules;\nvar PythonFoldMode = acequire(\"./folding/pythonic\").FoldMode;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = PythonHighlightRules;\n this.foldingRules = new PythonFoldMode(\"\\\\:\");\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.lineCommentStart = \"#\";\n\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n\n if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n return indent;\n }\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n var outdents = {\n \"pass\": 1,\n \"return\": 1,\n \"raise\": 1,\n \"break\": 1,\n \"continue\": 1\n };\n \n this.checkOutdent = function(state, line, input) {\n if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n return false;\n\n var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n \n if (!tokens)\n return false;\n do {\n var last = tokens.pop();\n } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n \n if (!last)\n return false;\n \n return (last.type == \"keyword\" && outdents[last.value]);\n };\n\n this.autoOutdent = function(state, doc, row) {\n \n row += 1;\n var indent = this.$getIndent(doc.getLine(row));\n var tab = doc.getTabString();\n if (indent.slice(-tab.length) == tab)\n doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n };\n\n this.$id = \"ace/mode/python\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.flattenNames = undefined;\n\nvar _isString2 = require('lodash/isString');\n\nvar _isString3 = _interopRequireDefault(_isString2);\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _isPlainObject2 = require('lodash/isPlainObject');\n\nvar _isPlainObject3 = _interopRequireDefault(_isPlainObject2);\n\nvar _map2 = require('lodash/map');\n\nvar _map3 = _interopRequireDefault(_map2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar flattenNames = exports.flattenNames = function flattenNames() {\n var things = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var names = [];\n\n (0, _map3.default)(things, function (thing) {\n if (Array.isArray(thing)) {\n flattenNames(thing).map(function (name) {\n return names.push(name);\n });\n } else if ((0, _isPlainObject3.default)(thing)) {\n (0, _forOwn3.default)(thing, function (value, key) {\n value === true && names.push(key);\n names.push(key + '-' + value);\n });\n } else if ((0, _isString3.default)(thing)) {\n names.push(thing);\n }\n });\n\n return names;\n};\n\nexports.default = flattenNames;","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.mergeClasses = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _cloneDeep2 = require('lodash/cloneDeep');\n\nvar _cloneDeep3 = _interopRequireDefault(_cloneDeep2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mergeClasses = exports.mergeClasses = function mergeClasses(classes) {\n var activeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var styles = classes.default && (0, _cloneDeep3.default)(classes.default) || {};\n activeNames.map(function (name) {\n var toMerge = classes[name];\n if (toMerge) {\n (0, _forOwn3.default)(toMerge, function (value, key) {\n if (!styles[key]) {\n styles[key] = {};\n }\n\n styles[key] = _extends({}, styles[key], toMerge[key]);\n });\n }\n\n return name;\n });\n return styles;\n};\n\nexports.default = mergeClasses;","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.autoprefix = undefined;\n\nvar _forOwn2 = require('lodash/forOwn');\n\nvar _forOwn3 = _interopRequireDefault(_forOwn2);\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar transforms = {\n borderRadius: function borderRadius(value) {\n return {\n msBorderRadius: value,\n MozBorderRadius: value,\n OBorderRadius: value,\n WebkitBorderRadius: value,\n borderRadius: value\n };\n },\n boxShadow: function boxShadow(value) {\n return {\n msBoxShadow: value,\n MozBoxShadow: value,\n OBoxShadow: value,\n WebkitBoxShadow: value,\n boxShadow: value\n };\n },\n userSelect: function userSelect(value) {\n return {\n WebkitTouchCallout: value,\n KhtmlUserSelect: value,\n MozUserSelect: value,\n msUserSelect: value,\n WebkitUserSelect: value,\n userSelect: value\n };\n },\n\n flex: function flex(value) {\n return {\n WebkitBoxFlex: value,\n MozBoxFlex: value,\n WebkitFlex: value,\n msFlex: value,\n flex: value\n };\n },\n flexBasis: function flexBasis(value) {\n return {\n WebkitFlexBasis: value,\n flexBasis: value\n };\n },\n justifyContent: function justifyContent(value) {\n return {\n WebkitJustifyContent: value,\n justifyContent: value\n };\n },\n\n transition: function transition(value) {\n return {\n msTransition: value,\n MozTransition: value,\n OTransition: value,\n WebkitTransition: value,\n transition: value\n };\n },\n\n transform: function transform(value) {\n return {\n msTransform: value,\n MozTransform: value,\n OTransform: value,\n WebkitTransform: value,\n transform: value\n };\n },\n absolute: function absolute(value) {\n var direction = value && value.split(' ');\n return {\n position: 'absolute',\n top: direction && direction[0],\n right: direction && direction[1],\n bottom: direction && direction[2],\n left: direction && direction[3]\n };\n },\n extend: function extend(name, otherElementStyles) {\n var otherStyle = otherElementStyles[name];\n if (otherStyle) {\n return otherStyle;\n }\n return {\n 'extend': name\n };\n }\n};\n\nvar autoprefix = exports.autoprefix = function autoprefix(elements) {\n var prefixed = {};\n (0, _forOwn3.default)(elements, function (styles, element) {\n var expanded = {};\n (0, _forOwn3.default)(styles, function (value, key) {\n var transform = transforms[key];\n if (transform) {\n expanded = _extends({}, expanded, transform(value));\n } else {\n expanded[key] = value;\n }\n });\n prefixed[element] = expanded;\n });\n return prefixed;\n};\n\nexports.default = autoprefix;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.hover = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar hover = exports.hover = function hover(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Hover, _React$Component);\n\n function Hover() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Hover);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Hover.__proto__ || Object.getPrototypeOf(Hover)).call.apply(_ref, [this].concat(args))), _this), _this.state = { hover: false }, _this.handleMouseOver = function () {\n return _this.setState({ hover: true });\n }, _this.handleMouseOut = function () {\n return _this.setState({ hover: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseOver: _this.handleMouseOver, onMouseOut: _this.handleMouseOut },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Hover;\n }(_react2.default.Component);\n};\n\nexports.default = hover;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.active = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar active = exports.active = function active(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n\n return function (_React$Component) {\n _inherits(Active, _React$Component);\n\n function Active() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Active);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Active.__proto__ || Object.getPrototypeOf(Active)).call.apply(_ref, [this].concat(args))), _this), _this.state = { active: false }, _this.handleMouseDown = function () {\n return _this.setState({ active: true });\n }, _this.handleMouseUp = function () {\n return _this.setState({ active: false });\n }, _this.render = function () {\n return _react2.default.createElement(\n Span,\n { onMouseDown: _this.handleMouseDown, onMouseUp: _this.handleMouseUp },\n _react2.default.createElement(Component, _extends({}, _this.props, _this.state))\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return Active;\n }(_react2.default.Component);\n};\n\nexports.default = active;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar loopable = function loopable(i, length) {\n var props = {};\n var setProp = function setProp(name) {\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n props[name] = value;\n };\n\n i === 0 && setProp('first-child');\n i === length - 1 && setProp('last-child');\n (i === 0 || i % 2 === 0) && setProp('even');\n Math.abs(i % 2) === 1 && setProp('odd');\n setProp('nth-child', i);\n\n return props;\n};\n\nexports.default = loopable;","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Alpha = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _alpha = require('../../helpers/alpha');\n\nvar alpha = _interopRequireWildcard(_alpha);\n\nvar _Checkboard = require('./Checkboard');\n\nvar _Checkboard2 = _interopRequireDefault(_Checkboard);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Alpha = exports.Alpha = function (_ref) {\n _inherits(Alpha, _ref);\n\n function Alpha() {\n var _ref2;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Alpha);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Alpha.__proto__ || Object.getPrototypeOf(Alpha)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e) {\n var change = alpha.calculateChange(e, _this.props.hsl, _this.props.direction, _this.props.a, _this.container);\n change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n }, _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n window.addEventListener('mousemove', _this.handleChange);\n window.addEventListener('mouseup', _this.handleMouseUp);\n }, _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n }, _this.unbindEventListeners = function () {\n window.removeEventListener('mousemove', _this.handleChange);\n window.removeEventListener('mouseup', _this.handleMouseUp);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Alpha, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rgb = this.props.rgb;\n var styles = (0, _reactcss2.default)({\n 'default': {\n alpha: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius\n },\n checkboard: {\n absolute: '0px 0px 0px 0px',\n overflow: 'hidden',\n borderRadius: this.props.radius\n },\n gradient: {\n absolute: '0px 0px 0px 0px',\n background: 'linear-gradient(to right, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\\n rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)',\n boxShadow: this.props.shadow,\n borderRadius: this.props.radius\n },\n container: {\n position: 'relative',\n height: '100%',\n margin: '0 3px'\n },\n pointer: {\n position: 'absolute',\n left: rgb.a * 100 + '%'\n },\n slider: {\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n marginTop: '1px',\n transform: 'translateX(-2px)'\n }\n },\n 'vertical': {\n gradient: {\n background: 'linear-gradient(to bottom, rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 0) 0%,\\n rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ', 1) 100%)'\n },\n pointer: {\n left: 0,\n top: rgb.a * 100 + '%'\n }\n },\n 'overwrite': _extends({}, this.props.style)\n }, {\n vertical: this.props.direction === 'vertical',\n overwrite: true\n });\n\n return _react2.default.createElement(\n 'div',\n { style: styles.alpha },\n _react2.default.createElement(\n 'div',\n { style: styles.checkboard },\n _react2.default.createElement(_Checkboard2.default, { renderers: this.props.renderers })\n ),\n _react2.default.createElement('div', { style: styles.gradient }),\n _react2.default.createElement(\n 'div',\n {\n style: styles.container,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n },\n _react2.default.createElement(\n 'div',\n { style: styles.pointer },\n this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })\n )\n )\n );\n }\n }]);\n\n return Alpha;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Alpha;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, hsl, direction, initialA, container) {\n var containerWidth = container.clientWidth;\n var containerHeight = container.clientHeight;\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n if (direction === 'vertical') {\n var a = void 0;\n if (top < 0) {\n a = 0;\n } else if (top > containerHeight) {\n a = 1;\n } else {\n a = Math.round(top * 100 / containerHeight) / 100;\n }\n\n if (hsl.a !== a) {\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: a,\n source: 'rgb'\n };\n }\n } else {\n var _a = void 0;\n if (left < 0) {\n _a = 0;\n } else if (left > containerWidth) {\n _a = 1;\n } else {\n _a = Math.round(left * 100 / containerWidth) / 100;\n }\n\n if (initialA !== _a) {\n return {\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: _a,\n source: 'rgb'\n };\n }\n }\n return null;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar checkboardCache = {};\n\nvar render = exports.render = function render(c1, c2, size, serverCanvas) {\n if (typeof document === 'undefined' && !serverCanvas) {\n return null;\n }\n var canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas');\n canvas.width = size * 2;\n canvas.height = size * 2;\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return null;\n } // If no context can be found, return early.\n ctx.fillStyle = c1;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = c2;\n ctx.fillRect(0, 0, size, size);\n ctx.translate(size, size);\n ctx.fillRect(0, 0, size, size);\n return canvas.toDataURL();\n};\n\nvar get = exports.get = function get(c1, c2, size, serverCanvas) {\n var key = c1 + '-' + c2 + '-' + size + (serverCanvas ? '-server' : '');\n\n if (checkboardCache[key]) {\n return checkboardCache[key];\n }\n\n var checkboard = render(c1, c2, size, serverCanvas);\n checkboardCache[key] = checkboard;\n return checkboard;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.EditableInput = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DEFAULT_ARROW_OFFSET = 1;\n\nvar UP_KEY_CODE = 38;\nvar DOWN_KEY_CODE = 40;\nvar VALID_KEY_CODES = [UP_KEY_CODE, DOWN_KEY_CODE];\nvar isValidKeyCode = function isValidKeyCode(keyCode) {\n return VALID_KEY_CODES.indexOf(keyCode) > -1;\n};\nvar getNumberValue = function getNumberValue(value) {\n return Number(String(value).replace(/%/g, ''));\n};\n\nvar EditableInput = exports.EditableInput = function (_ref) {\n _inherits(EditableInput, _ref);\n\n function EditableInput(props) {\n _classCallCheck(this, EditableInput);\n\n var _this = _possibleConstructorReturn(this, (EditableInput.__proto__ || Object.getPrototypeOf(EditableInput)).call(this));\n\n _this.handleBlur = function () {\n if (_this.state.blurValue) {\n _this.setState({ value: _this.state.blurValue, blurValue: null });\n }\n };\n\n _this.handleChange = function (e) {\n _this.setUpdatedValue(e.target.value, e);\n };\n\n _this.handleKeyDown = function (e) {\n // In case `e.target.value` is a percentage remove the `%` character\n // and update accordingly with a percentage\n // https://github.com/casesandberg/react-color/issues/383\n var value = getNumberValue(e.target.value);\n if (!isNaN(value) && isValidKeyCode(e.keyCode)) {\n var offset = _this.getArrowOffset();\n var updatedValue = e.keyCode === UP_KEY_CODE ? value + offset : value - offset;\n\n _this.setUpdatedValue(updatedValue, e);\n }\n };\n\n _this.handleDrag = function (e) {\n if (_this.props.dragLabel) {\n var newValue = Math.round(_this.props.value + e.movementX);\n if (newValue >= 0 && newValue <= _this.props.dragMax) {\n _this.props.onChange && _this.props.onChange(_this.getValueObjectWithLabel(newValue), e);\n }\n }\n };\n\n _this.handleMouseDown = function (e) {\n if (_this.props.dragLabel) {\n e.preventDefault();\n _this.handleDrag(e);\n window.addEventListener('mousemove', _this.handleDrag);\n window.addEventListener('mouseup', _this.handleMouseUp);\n }\n };\n\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n\n _this.unbindEventListeners = function () {\n window.removeEventListener('mousemove', _this.handleDrag);\n window.removeEventListener('mouseup', _this.handleMouseUp);\n };\n\n _this.state = {\n value: String(props.value).toUpperCase(),\n blurValue: String(props.value).toUpperCase()\n };\n return _this;\n }\n\n _createClass(EditableInput, [{\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.value !== this.state.value && (prevProps.value !== this.props.value || prevState.value !== this.state.value)) {\n if (this.input === document.activeElement) {\n this.setState({ blurValue: String(this.props.value).toUpperCase() });\n } else {\n this.setState({ value: String(this.props.value).toUpperCase(), blurValue: !this.state.blurValue && String(this.props.value).toUpperCase() });\n }\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: 'getValueObjectWithLabel',\n value: function getValueObjectWithLabel(value) {\n return _defineProperty({}, this.props.label, value);\n }\n }, {\n key: 'getArrowOffset',\n value: function getArrowOffset() {\n return this.props.arrowOffset || DEFAULT_ARROW_OFFSET;\n }\n }, {\n key: 'setUpdatedValue',\n value: function setUpdatedValue(value, e) {\n var onChangeValue = this.props.label ? this.getValueObjectWithLabel(value) : value;\n this.props.onChange && this.props.onChange(onChangeValue, e);\n\n this.setState({ value: value });\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n wrap: {\n position: 'relative'\n }\n },\n 'user-override': {\n wrap: this.props.style && this.props.style.wrap ? this.props.style.wrap : {},\n input: this.props.style && this.props.style.input ? this.props.style.input : {},\n label: this.props.style && this.props.style.label ? this.props.style.label : {}\n },\n 'dragLabel-true': {\n label: {\n cursor: 'ew-resize'\n }\n }\n }, {\n 'user-override': true\n }, this.props);\n\n return _react2.default.createElement(\n 'div',\n { style: styles.wrap },\n _react2.default.createElement('input', {\n style: styles.input,\n ref: function ref(input) {\n return _this2.input = input;\n },\n value: this.state.value,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleChange,\n onBlur: this.handleBlur,\n placeholder: this.props.placeholder,\n spellCheck: 'false'\n }),\n this.props.label && !this.props.hideLabel ? _react2.default.createElement(\n 'span',\n { style: styles.label, onMouseDown: this.handleMouseDown },\n this.props.label\n ) : null\n );\n }\n }]);\n\n return EditableInput;\n}(_react.PureComponent || _react.Component);\n\nexports.default = EditableInput;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Hue = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _hue = require('../../helpers/hue');\n\nvar hue = _interopRequireWildcard(_hue);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Hue = exports.Hue = function (_ref) {\n _inherits(Hue, _ref);\n\n function Hue() {\n var _ref2;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Hue);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Hue.__proto__ || Object.getPrototypeOf(Hue)).call.apply(_ref2, [this].concat(args))), _this), _this.handleChange = function (e) {\n var change = hue.calculateChange(e, _this.props.direction, _this.props.hsl, _this.container);\n change && typeof _this.props.onChange === 'function' && _this.props.onChange(change, e);\n }, _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n window.addEventListener('mousemove', _this.handleChange);\n window.addEventListener('mouseup', _this.handleMouseUp);\n }, _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Hue, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.unbindEventListeners();\n }\n }, {\n key: 'unbindEventListeners',\n value: function unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _props$direction = this.props.direction,\n direction = _props$direction === undefined ? 'horizontal' : _props$direction;\n\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n hue: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius,\n boxShadow: this.props.shadow\n },\n container: {\n padding: '0 2px',\n position: 'relative',\n height: '100%',\n borderRadius: this.props.radius\n },\n pointer: {\n position: 'absolute',\n left: this.props.hsl.h * 100 / 360 + '%'\n },\n slider: {\n marginTop: '1px',\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n transform: 'translateX(-2px)'\n }\n },\n 'vertical': {\n pointer: {\n left: '0px',\n top: -(this.props.hsl.h * 100 / 360) + 100 + '%'\n }\n }\n }, { vertical: direction === 'vertical' });\n\n return _react2.default.createElement(\n 'div',\n { style: styles.hue },\n _react2.default.createElement(\n 'div',\n {\n className: 'hue-' + direction,\n style: styles.container,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n },\n _react2.default.createElement(\n 'style',\n null,\n '\\n .hue-horizontal {\\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\\n 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n background: -webkit-linear-gradient(to right, #f00 0%, #ff0\\n 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n }\\n\\n .hue-vertical {\\n background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\\n #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\\n #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\\n }\\n '\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.pointer },\n this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.slider })\n )\n )\n );\n }\n }]);\n\n return Hue;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Hue;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, direction, hsl, container) {\n var containerWidth = container.clientWidth;\n var containerHeight = container.clientHeight;\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n if (direction === 'vertical') {\n var h = void 0;\n if (top < 0) {\n h = 359;\n } else if (top > containerHeight) {\n h = 0;\n } else {\n var percent = -(top * 100 / containerHeight) + 100;\n h = 360 * percent / 100;\n }\n\n if (hsl.h !== h) {\n return {\n h: h,\n s: hsl.s,\n l: hsl.l,\n a: hsl.a,\n source: 'hsl'\n };\n }\n } else {\n var _h = void 0;\n if (left < 0) {\n _h = 0;\n } else if (left > containerWidth) {\n _h = 359;\n } else {\n var _percent = left * 100 / containerWidth;\n _h = 360 * _percent / 100;\n }\n\n if (hsl.h !== _h) {\n return {\n h: _h,\n s: hsl.s,\n l: hsl.l,\n a: hsl.a,\n source: 'hsl'\n };\n }\n }\n return null;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Raised = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _merge = require('lodash/merge');\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Raised = exports.Raised = function Raised(_ref) {\n var zDepth = _ref.zDepth,\n radius = _ref.radius,\n background = _ref.background,\n children = _ref.children,\n _ref$styles = _ref.styles,\n passedStyles = _ref$styles === undefined ? {} : _ref$styles;\n\n var styles = (0, _reactcss2.default)((0, _merge2.default)({\n 'default': {\n wrap: {\n position: 'relative',\n display: 'inline-block'\n },\n content: {\n position: 'relative'\n },\n bg: {\n absolute: '0px 0px 0px 0px',\n boxShadow: '0 ' + zDepth + 'px ' + zDepth * 4 + 'px rgba(0,0,0,.24)',\n borderRadius: radius,\n background: background\n }\n },\n 'zDepth-0': {\n bg: {\n boxShadow: 'none'\n }\n },\n\n 'zDepth-1': {\n bg: {\n boxShadow: '0 2px 10px rgba(0,0,0,.12), 0 2px 5px rgba(0,0,0,.16)'\n }\n },\n 'zDepth-2': {\n bg: {\n boxShadow: '0 6px 20px rgba(0,0,0,.19), 0 8px 17px rgba(0,0,0,.2)'\n }\n },\n 'zDepth-3': {\n bg: {\n boxShadow: '0 17px 50px rgba(0,0,0,.19), 0 12px 15px rgba(0,0,0,.24)'\n }\n },\n 'zDepth-4': {\n bg: {\n boxShadow: '0 25px 55px rgba(0,0,0,.21), 0 16px 28px rgba(0,0,0,.22)'\n }\n },\n 'zDepth-5': {\n bg: {\n boxShadow: '0 40px 77px rgba(0,0,0,.22), 0 27px 24px rgba(0,0,0,.2)'\n }\n },\n 'square': {\n bg: {\n borderRadius: '0'\n }\n },\n 'circle': {\n bg: {\n borderRadius: '50%'\n }\n }\n }, passedStyles), { 'zDepth-1': zDepth === 1 });\n\n return _react2.default.createElement(\n 'div',\n { style: styles.wrap },\n _react2.default.createElement('div', { style: styles.bg }),\n _react2.default.createElement(\n 'div',\n { style: styles.content },\n children\n )\n );\n};\n\nRaised.propTypes = {\n background: _propTypes2.default.string,\n zDepth: _propTypes2.default.oneOf([0, 1, 2, 3, 4, 5]),\n radius: _propTypes2.default.number,\n styles: _propTypes2.default.object\n};\n\nRaised.defaultProps = {\n background: '#fff',\n zDepth: 1,\n radius: 2,\n styles: {}\n};\n\nexports.default = Raised;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Saturation = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _throttle = require('lodash/throttle');\n\nvar _throttle2 = _interopRequireDefault(_throttle);\n\nvar _saturation = require('../../helpers/saturation');\n\nvar saturation = _interopRequireWildcard(_saturation);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Saturation = exports.Saturation = function (_ref) {\n _inherits(Saturation, _ref);\n\n function Saturation(props) {\n _classCallCheck(this, Saturation);\n\n var _this = _possibleConstructorReturn(this, (Saturation.__proto__ || Object.getPrototypeOf(Saturation)).call(this, props));\n\n _this.handleChange = function (e) {\n typeof _this.props.onChange === 'function' && _this.throttle(_this.props.onChange, saturation.calculateChange(e, _this.props.hsl, _this.container), e);\n };\n\n _this.handleMouseDown = function (e) {\n _this.handleChange(e);\n window.addEventListener('mousemove', _this.handleChange);\n window.addEventListener('mouseup', _this.handleMouseUp);\n };\n\n _this.handleMouseUp = function () {\n _this.unbindEventListeners();\n };\n\n _this.throttle = (0, _throttle2.default)(function (fn, data, e) {\n fn(data, e);\n }, 50);\n return _this;\n }\n\n _createClass(Saturation, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.throttle.cancel();\n this.unbindEventListeners();\n }\n }, {\n key: 'unbindEventListeners',\n value: function unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var _ref2 = this.props.style || {},\n color = _ref2.color,\n white = _ref2.white,\n black = _ref2.black,\n pointer = _ref2.pointer,\n circle = _ref2.circle;\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n color: {\n absolute: '0px 0px 0px 0px',\n background: 'hsl(' + this.props.hsl.h + ',100%, 50%)',\n borderRadius: this.props.radius\n },\n white: {\n absolute: '0px 0px 0px 0px',\n borderRadius: this.props.radius\n },\n black: {\n absolute: '0px 0px 0px 0px',\n boxShadow: this.props.shadow,\n borderRadius: this.props.radius\n },\n pointer: {\n position: 'absolute',\n top: -(this.props.hsv.v * 100) + 100 + '%',\n left: this.props.hsv.s * 100 + '%',\n cursor: 'default'\n },\n circle: {\n width: '4px',\n height: '4px',\n boxShadow: '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\\n 0 0 1px 2px rgba(0,0,0,.4)',\n borderRadius: '50%',\n cursor: 'hand',\n transform: 'translate(-2px, -2px)'\n }\n },\n 'custom': {\n color: color,\n white: white,\n black: black,\n pointer: pointer,\n circle: circle\n }\n }, { 'custom': !!this.props.style });\n\n return _react2.default.createElement(\n 'div',\n {\n style: styles.color,\n ref: function ref(container) {\n return _this2.container = container;\n },\n onMouseDown: this.handleMouseDown,\n onTouchMove: this.handleChange,\n onTouchStart: this.handleChange\n },\n _react2.default.createElement(\n 'style',\n null,\n '\\n .saturation-white {\\n background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\\n background: linear-gradient(to right, #fff, rgba(255,255,255,0));\\n }\\n .saturation-black {\\n background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\\n background: linear-gradient(to top, #000, rgba(0,0,0,0));\\n }\\n '\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.white, className: 'saturation-white' },\n _react2.default.createElement('div', { style: styles.black, className: 'saturation-black' }),\n _react2.default.createElement(\n 'div',\n { style: styles.pointer },\n this.props.pointer ? _react2.default.createElement(this.props.pointer, this.props) : _react2.default.createElement('div', { style: styles.circle })\n )\n )\n );\n }\n }]);\n\n return Saturation;\n}(_react.PureComponent || _react.Component);\n\nexports.default = Saturation;","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar calculateChange = exports.calculateChange = function calculateChange(e, hsl, container) {\n var _container$getBoundin = container.getBoundingClientRect(),\n containerWidth = _container$getBoundin.width,\n containerHeight = _container$getBoundin.height;\n\n var x = typeof e.pageX === 'number' ? e.pageX : e.touches[0].pageX;\n var y = typeof e.pageY === 'number' ? e.pageY : e.touches[0].pageY;\n var left = x - (container.getBoundingClientRect().left + window.pageXOffset);\n var top = y - (container.getBoundingClientRect().top + window.pageYOffset);\n\n if (left < 0) {\n left = 0;\n } else if (left > containerWidth) {\n left = containerWidth;\n }\n\n if (top < 0) {\n top = 0;\n } else if (top > containerHeight) {\n top = containerHeight;\n }\n\n var saturation = left / containerWidth;\n var bright = 1 - top / containerHeight;\n\n return {\n h: hsl.h,\n s: saturation,\n v: bright,\n a: hsl.a,\n source: 'hsv'\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColorWrap = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _debounce = require('lodash/debounce');\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorWrap = exports.ColorWrap = function ColorWrap(Picker) {\n var ColorPicker = function (_ref) {\n _inherits(ColorPicker, _ref);\n\n function ColorPicker(props) {\n _classCallCheck(this, ColorPicker);\n\n var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this));\n\n _this.handleChange = function (data, event) {\n var isValidColor = _color2.default.simpleCheckForValidColor(data);\n if (isValidColor) {\n var colors = _color2.default.toState(data, data.h || _this.state.oldHue);\n _this.setState(colors);\n _this.props.onChangeComplete && _this.debounce(_this.props.onChangeComplete, colors, event);\n _this.props.onChange && _this.props.onChange(colors, event);\n }\n };\n\n _this.handleSwatchHover = function (data, event) {\n var isValidColor = _color2.default.simpleCheckForValidColor(data);\n if (isValidColor) {\n var colors = _color2.default.toState(data, data.h || _this.state.oldHue);\n _this.props.onSwatchHover && _this.props.onSwatchHover(colors, event);\n }\n };\n\n _this.state = _extends({}, _color2.default.toState(props.color, 0));\n\n _this.debounce = (0, _debounce2.default)(function (fn, data, event) {\n fn(data, event);\n }, 100);\n return _this;\n }\n\n _createClass(ColorPicker, [{\n key: 'render',\n value: function render() {\n var optionalEvents = {};\n if (this.props.onSwatchHover) {\n optionalEvents.onSwatchHover = this.handleSwatchHover;\n }\n\n return _react2.default.createElement(Picker, _extends({}, this.props, this.state, {\n onChange: this.handleChange\n }, optionalEvents));\n }\n }], [{\n key: 'getDerivedStateFromProps',\n value: function getDerivedStateFromProps(nextProps, state) {\n return _extends({}, _color2.default.toState(nextProps.color, state.oldHue));\n }\n }]);\n\n return ColorPicker;\n }(_react.PureComponent || _react.Component);\n\n ColorPicker.propTypes = _extends({}, Picker.propTypes);\n\n ColorPicker.defaultProps = _extends({}, Picker.defaultProps, {\n color: {\n h: 250,\n s: 0.50,\n l: 0.20,\n a: 1\n }\n });\n\n return ColorPicker;\n};\n\nexports.default = ColorWrap;","module.exports = require('./forEach');\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function(color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n// tinycolor.isReadable(\"#000\", \"#111\") => false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// <http://www.w3.org/TR/css3-color/#svg-color>\nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Swatch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _interaction = require('../../helpers/interaction');\n\nvar _Checkboard = require('./Checkboard');\n\nvar _Checkboard2 = _interopRequireDefault(_Checkboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ENTER = 13;\n\nvar Swatch = exports.Swatch = function Swatch(_ref) {\n var color = _ref.color,\n style = _ref.style,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n onHover = _ref.onHover,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? color : _ref$title,\n children = _ref.children,\n focus = _ref.focus,\n _ref$focusStyle = _ref.focusStyle,\n focusStyle = _ref$focusStyle === undefined ? {} : _ref$focusStyle;\n\n var transparent = color === 'transparent';\n var styles = (0, _reactcss2.default)({\n default: {\n swatch: _extends({\n background: color,\n height: '100%',\n width: '100%',\n cursor: 'pointer',\n position: 'relative',\n outline: 'none'\n }, style, focus ? focusStyle : {})\n }\n });\n\n var handleClick = function handleClick(e) {\n return onClick(color, e);\n };\n var handleKeyDown = function handleKeyDown(e) {\n return e.keyCode === ENTER && onClick(color, e);\n };\n var handleHover = function handleHover(e) {\n return onHover(color, e);\n };\n\n var optionalEvents = {};\n if (onHover) {\n optionalEvents.onMouseOver = handleHover;\n }\n\n return _react2.default.createElement(\n 'div',\n _extends({\n style: styles.swatch,\n onClick: handleClick,\n title: title,\n tabIndex: 0,\n onKeyDown: handleKeyDown\n }, optionalEvents),\n children,\n transparent && _react2.default.createElement(_Checkboard2.default, {\n borderRadius: styles.swatch.borderRadius,\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,0.1)'\n })\n );\n};\n\nexports.default = (0, _interaction.handleFocus)(Swatch);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleFocus = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable no-invalid-this */\n\n\nvar handleFocus = exports.handleFocus = function handleFocus(Component) {\n var Span = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'span';\n return function (_React$Component) {\n _inherits(Focus, _React$Component);\n\n function Focus() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Focus);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Focus.__proto__ || Object.getPrototypeOf(Focus)).call.apply(_ref, [this].concat(args))), _this), _this.state = { focus: false }, _this.handleFocus = function () {\n return _this.setState({ focus: true });\n }, _this.handleBlur = function () {\n return _this.setState({ focus: false });\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Focus, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n Span,\n { onFocus: this.handleFocus, onBlur: this.handleBlur },\n _react2.default.createElement(Component, _extends({}, this.props, this.state))\n );\n }\n }]);\n\n return Focus;\n }(_react2.default.Component);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SketchFields = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _color = require('../../helpers/color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable no-param-reassign */\n\nvar SketchFields = exports.SketchFields = function SketchFields(_ref) {\n var onChange = _ref.onChange,\n rgb = _ref.rgb,\n hsl = _ref.hsl,\n hex = _ref.hex,\n disableAlpha = _ref.disableAlpha;\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n fields: {\n display: 'flex',\n paddingTop: '4px'\n },\n single: {\n flex: '1',\n paddingLeft: '6px'\n },\n alpha: {\n flex: '1',\n paddingLeft: '6px'\n },\n double: {\n flex: '2'\n },\n input: {\n width: '80%',\n padding: '4px 10% 3px',\n border: 'none',\n boxShadow: 'inset 0 0 0 1px #ccc',\n fontSize: '11px'\n },\n label: {\n display: 'block',\n textAlign: 'center',\n fontSize: '11px',\n color: '#222',\n paddingTop: '3px',\n paddingBottom: '4px',\n textTransform: 'capitalize'\n }\n },\n 'disableAlpha': {\n alpha: {\n display: 'none'\n }\n }\n }, { disableAlpha: disableAlpha });\n\n var handleChange = function handleChange(data, e) {\n if (data.hex) {\n _color2.default.isValidHex(data.hex) && onChange({\n hex: data.hex,\n source: 'hex'\n }, e);\n } else if (data.r || data.g || data.b) {\n onChange({\n r: data.r || rgb.r,\n g: data.g || rgb.g,\n b: data.b || rgb.b,\n a: rgb.a,\n source: 'rgb'\n }, e);\n } else if (data.a) {\n if (data.a < 0) {\n data.a = 0;\n } else if (data.a > 100) {\n data.a = 100;\n }\n\n data.a /= 100;\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: data.a,\n source: 'rgb'\n }, e);\n }\n };\n\n return _react2.default.createElement(\n 'div',\n { style: styles.fields, className: 'flexbox-fix' },\n _react2.default.createElement(\n 'div',\n { style: styles.double },\n _react2.default.createElement(_common.EditableInput, {\n style: { input: styles.input, label: styles.label },\n label: 'hex',\n value: hex.replace('#', ''),\n onChange: handleChange\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.single },\n _react2.default.createElement(_common.EditableInput, {\n style: { input: styles.input, label: styles.label },\n label: 'r',\n value: rgb.r,\n onChange: handleChange,\n dragLabel: 'true',\n dragMax: '255'\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.single },\n _react2.default.createElement(_common.EditableInput, {\n style: { input: styles.input, label: styles.label },\n label: 'g',\n value: rgb.g,\n onChange: handleChange,\n dragLabel: 'true',\n dragMax: '255'\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.single },\n _react2.default.createElement(_common.EditableInput, {\n style: { input: styles.input, label: styles.label },\n label: 'b',\n value: rgb.b,\n onChange: handleChange,\n dragLabel: 'true',\n dragMax: '255'\n })\n ),\n _react2.default.createElement(\n 'div',\n { style: styles.alpha },\n _react2.default.createElement(_common.EditableInput, {\n style: { input: styles.input, label: styles.label },\n label: 'a',\n value: Math.round(rgb.a * 100),\n onChange: handleChange,\n dragLabel: 'true',\n dragMax: '100'\n })\n )\n );\n};\n\nexports.default = SketchFields;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SketchPresetColors = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactcss = require('reactcss');\n\nvar _reactcss2 = _interopRequireDefault(_reactcss);\n\nvar _common = require('../common');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SketchPresetColors = exports.SketchPresetColors = function SketchPresetColors(_ref) {\n var colors = _ref.colors,\n _ref$onClick = _ref.onClick,\n onClick = _ref$onClick === undefined ? function () {} : _ref$onClick,\n onSwatchHover = _ref.onSwatchHover;\n\n var styles = (0, _reactcss2.default)({\n 'default': {\n colors: {\n margin: '0 -10px',\n padding: '10px 0 0 10px',\n borderTop: '1px solid #eee',\n display: 'flex',\n flexWrap: 'wrap',\n position: 'relative'\n },\n swatchWrap: {\n width: '16px',\n height: '16px',\n margin: '0 10px 10px 0'\n },\n swatch: {\n borderRadius: '3px',\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15)'\n }\n },\n 'no-presets': {\n colors: {\n display: 'none'\n }\n }\n }, {\n 'no-presets': !colors || !colors.length\n });\n\n var handleClick = function handleClick(hex, e) {\n onClick({\n hex: hex,\n source: 'hex'\n }, e);\n };\n\n return _react2.default.createElement(\n 'div',\n { style: styles.colors, className: 'flexbox-fix' },\n colors.map(function (colorObjOrString) {\n var c = typeof colorObjOrString === 'string' ? { color: colorObjOrString } : colorObjOrString;\n var key = '' + c.color + (c.title || '');\n return _react2.default.createElement(\n 'div',\n { key: key, style: styles.swatchWrap },\n _react2.default.createElement(_common.Swatch, _extends({}, c, {\n style: styles.swatch,\n onClick: handleClick,\n onHover: onSwatchHover,\n focusStyle: {\n boxShadow: 'inset 0 0 0 1px rgba(0,0,0,.15), 0 0 4px ' + c.color\n }\n }))\n );\n })\n );\n};\n\nSketchPresetColors.propTypes = {\n colors: _propTypes2.default.arrayOf(_propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n color: _propTypes2.default.string,\n title: _propTypes2.default.string\n })])).isRequired\n};\n\nexports.default = SketchPresetColors;","import React from 'react';\nimport MatomoContext from './MatomoContext';\nconst MatomoProvider = ({ children, value }) => {\n const Context = MatomoContext;\n return React.createElement(Context.Provider, { value: value }, children);\n};\nexport default MatomoProvider;\n//# sourceMappingURL=MatomoProvider.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var Direction;\n(function (Direction) {\n Direction[\"UP\"] = \"up\";\n Direction[\"DOWN\"] = \"down\";\n Direction[\"LEFT\"] = \"left\";\n Direction[\"RIGHT\"] = \"right\";\n})(Direction || (Direction = {}));\n//# sourceMappingURL=direction.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* istanbul ignore next */\nexport var Clipboard = {\n /**\n * Overrides the inherited CSS of the element to make sure it is\n * selectable. This method also makes the element pseudo-invisible.\n */\n applySelectableStyles: function (elem) {\n elem.style.overflow = \"hidden\";\n elem.style.height = \"0px\";\n elem.style.setProperty(\"-webkit-user-select\", \"all\");\n elem.style.setProperty(\"-moz-user-select\", \"all\");\n elem.style.setProperty(\"-ms-user-select\", \"all\");\n elem.style.setProperty(\"user-select\", \"all\");\n return elem;\n },\n /**\n * Copies table cells to the clipboard. The parameter is a row-major\n * 2-dimensional `Array` of strings and can contain nulls. We assume all\n * rows are the same length. If not, the cells will still be copied, but\n * the columns may not align. Returns a boolean indicating whether the\n * copy succeeded.\n *\n * See `Clipboard.copy`\n */\n copyCells: function (cells) {\n var table = document.createElement(\"table\");\n Clipboard.applySelectableStyles(table);\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n var tr = table.appendChild(document.createElement(\"tr\"));\n for (var _a = 0, row_1 = row; _a < row_1.length; _a++) {\n var cell = row_1[_a];\n var td = tr.appendChild(document.createElement(\"td\"));\n td.textContent = cell;\n }\n }\n var tsv = cells.map(function (row) { return row.join(\"\\t\"); }).join(\"\\n\");\n return Clipboard.copyElement(table, tsv);\n },\n /**\n * Copies the text to the clipboard. Returns a boolean\n * indicating whether the copy succeeded.\n *\n * See `Clipboard.copy`\n */\n copyString: function (value) {\n var text = document.createElement(\"textarea\");\n Clipboard.applySelectableStyles(text);\n text.value = value;\n return Clipboard.copyElement(text, value);\n },\n /**\n * Copies the element and its children to the clipboard. Returns a boolean\n * indicating whether the copy succeeded.\n *\n * If a plaintext argument is supplied, we add both the text/html and\n * text/plain mime types to the clipboard. This preserves the built in\n * semantics of copying elements to the clipboard while allowing custom\n * plaintext output for programs that can't cope with HTML data in the\n * clipboard.\n *\n * Verified on Firefox 47, Chrome 51.\n *\n * Note: Sometimes the copy does not succeed. Presumably, in order to\n * prevent memory issues, browsers will limit the total amount of data you\n * can copy to the clipboard. Based on ad hoc testing, we found an\n * inconsistent limit at about 300KB or 40,000 cells. Depending on the on\n * the content of cells, your limits may vary.\n */\n copyElement: function (elem, plaintext) {\n if (!Clipboard.isCopySupported()) {\n return false;\n }\n // must be document.body instead of document.documentElement for firefox\n document.body.appendChild(elem);\n try {\n window.getSelection().selectAllChildren(elem);\n if (plaintext != null) {\n // add plaintext fallback\n // http://stackoverflow.com/questions/23211018/copy-to-clipboard-with-jquery-js-in-chrome\n elem.addEventListener(\"copy\", function (e) {\n e.preventDefault();\n var clipboardData = e.clipboardData || window.clipboardData;\n if (clipboardData != null) {\n clipboardData.setData(\"text\", plaintext);\n }\n });\n }\n return document.execCommand(\"copy\");\n }\n catch (err) {\n return false;\n }\n finally {\n document.body.removeChild(elem);\n }\n },\n /**\n * Returns a boolean indicating whether the current browser nominally\n * supports the `copy` operation using the `execCommand` API.\n */\n isCopySupported: function () {\n return document.queryCommandSupported != null && document.queryCommandSupported(\"copy\");\n },\n};\n//# sourceMappingURL=clipboard.js.map","/*\n * Copyright 2018 Palantir Technologies, Inc. All rights reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as PropTypes from \"prop-types\";\nexport var columnInteractionBarContextTypes = {\n enableColumnInteractionBar: PropTypes.bool,\n};\n//# sourceMappingURL=context.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Classes from \"./common/classes\";\nimport { Utils } from \"./common/utils\";\n/**\n * `Region`s contain sets of cells. Additionally, a distinction is drawn, for\n * example, between all cells within a column and the whole column itself.\n * The `RegionCardinality` enum represents these distinct types of `Region`s.\n */\nexport var RegionCardinality;\n(function (RegionCardinality) {\n /**\n * A region that contains a finite rectangular group of table cells\n */\n RegionCardinality[\"CELLS\"] = \"cells\";\n /**\n * A region that represents all cells within 1 or more rows.\n */\n RegionCardinality[\"FULL_ROWS\"] = \"full-rows\";\n /**\n * A region that represents all cells within 1 or more columns.\n */\n RegionCardinality[\"FULL_COLUMNS\"] = \"full-columns\";\n /**\n * A region that represents all cells in the table.\n */\n RegionCardinality[\"FULL_TABLE\"] = \"full-table\";\n})(RegionCardinality || (RegionCardinality = {}));\n/**\n * A convenience object for subsets of `RegionCardinality` that are commonly\n * used as the `selectionMode` prop of the `<Table>`.\n */\nexport var SelectionModes = {\n ALL: [\n RegionCardinality.FULL_TABLE,\n RegionCardinality.FULL_COLUMNS,\n RegionCardinality.FULL_ROWS,\n RegionCardinality.CELLS,\n ],\n COLUMNS_AND_CELLS: [RegionCardinality.FULL_COLUMNS, RegionCardinality.CELLS],\n COLUMNS_ONLY: [RegionCardinality.FULL_COLUMNS],\n NONE: [],\n ROWS_AND_CELLS: [RegionCardinality.FULL_ROWS, RegionCardinality.CELLS],\n ROWS_ONLY: [RegionCardinality.FULL_ROWS],\n};\nexport var ColumnLoadingOption;\n(function (ColumnLoadingOption) {\n ColumnLoadingOption[\"CELLS\"] = \"cells\";\n ColumnLoadingOption[\"HEADER\"] = \"column-header\";\n})(ColumnLoadingOption || (ColumnLoadingOption = {}));\nexport var RowLoadingOption;\n(function (RowLoadingOption) {\n RowLoadingOption[\"CELLS\"] = \"cells\";\n RowLoadingOption[\"HEADER\"] = \"row-header\";\n})(RowLoadingOption || (RowLoadingOption = {}));\nexport var TableLoadingOption;\n(function (TableLoadingOption) {\n TableLoadingOption[\"CELLS\"] = \"cells\";\n TableLoadingOption[\"COLUMN_HEADERS\"] = \"column-header\";\n TableLoadingOption[\"ROW_HEADERS\"] = \"row-header\";\n})(TableLoadingOption || (TableLoadingOption = {}));\nvar Regions = /** @class */ (function () {\n function Regions() {\n }\n /**\n * Determines the cardinality of a region. We use null values to indicate\n * an unbounded interval. Therefore, an example of a region containing the\n * second and third columns would be:\n *\n * ```js\n * { rows: null, cols: [1, 2] }\n * ```\n *\n * In this case, this method would return `RegionCardinality.FULL_COLUMNS`.\n *\n * If both rows and columns are unbounded, then the region covers the\n * entire table. Therefore, a region like this:\n *\n * ```js\n * { rows: null, cols: null }\n * ```\n *\n * will return `RegionCardinality.FULL_TABLE`.\n *\n * An example of a region containing a single cell in the table would be:\n *\n * ```js\n * { rows: [5, 5], cols: [2, 2] }\n * ```\n *\n * In this case, this method would return `RegionCardinality.CELLS`.\n */\n Regions.getRegionCardinality = function (region) {\n if (region.cols != null && region.rows != null) {\n return RegionCardinality.CELLS;\n }\n else if (region.cols != null) {\n return RegionCardinality.FULL_COLUMNS;\n }\n else if (region.rows != null) {\n return RegionCardinality.FULL_ROWS;\n }\n else {\n return RegionCardinality.FULL_TABLE;\n }\n };\n Regions.getFocusCellCoordinatesFromRegion = function (region) {\n var regionCardinality = Regions.getRegionCardinality(region);\n switch (regionCardinality) {\n case RegionCardinality.FULL_TABLE:\n return { col: 0, row: 0 };\n case RegionCardinality.FULL_COLUMNS:\n return { col: region.cols[0], row: 0 };\n case RegionCardinality.FULL_ROWS:\n return { col: 0, row: region.rows[0] };\n case RegionCardinality.CELLS:\n return { col: region.cols[0], row: region.rows[0] };\n default:\n return null;\n }\n };\n /**\n * Returns a deep copy of the provided region.\n */\n Regions.copy = function (region) {\n var cardinality = Regions.getRegionCardinality(region);\n // we need to be careful not to explicitly spell out `rows: undefined`\n // (e.g.) if the \"rows\" key is completely absent, otherwise\n // deep-equality checks will fail.\n if (cardinality === RegionCardinality.CELLS) {\n return Regions.cell(region.rows[0], region.cols[0], region.rows[1], region.cols[1]);\n }\n else if (cardinality === RegionCardinality.FULL_COLUMNS) {\n return Regions.column(region.cols[0], region.cols[1]);\n }\n else if (cardinality === RegionCardinality.FULL_ROWS) {\n return Regions.row(region.rows[0], region.rows[1]);\n }\n else {\n return Regions.table();\n }\n };\n /**\n * Returns a region containing one or more cells.\n */\n Regions.cell = function (row, col, row2, col2) {\n return {\n cols: this.normalizeInterval(col, col2),\n rows: this.normalizeInterval(row, row2),\n };\n };\n /**\n * Returns a region containing one or more full rows.\n */\n Regions.row = function (row, row2) {\n return { rows: this.normalizeInterval(row, row2) };\n };\n /**\n * Returns a region containing one or more full columns.\n */\n Regions.column = function (col, col2) {\n return { cols: this.normalizeInterval(col, col2) };\n };\n /**\n * Returns a region containing the entire table.\n */\n Regions.table = function () {\n return {};\n };\n /**\n * Adds the region to the end of a cloned copy of the supplied region\n * array.\n */\n Regions.add = function (regions, region) {\n var copy = regions.slice();\n copy.push(region);\n return copy;\n };\n /**\n * Replaces the region at the end of a cloned copy of the supplied region\n * array, or at the specific index if one is provided.\n */\n Regions.update = function (regions, region, index) {\n var copy = regions.slice();\n if (index != null) {\n copy.splice(index, 1, region);\n }\n else {\n copy.pop();\n copy.push(region);\n }\n return copy;\n };\n /**\n * Clamps the region's start and end indices between 0 and the provided\n * maximum values.\n */\n Regions.clampRegion = function (region, maxRowIndex, maxColumnIndex) {\n var nextRegion = Regions.copy(region);\n if (region.rows != null) {\n nextRegion.rows[0] = Utils.clamp(region.rows[0], 0, maxRowIndex);\n nextRegion.rows[1] = Utils.clamp(region.rows[1], 0, maxRowIndex);\n }\n if (region.cols != null) {\n nextRegion.cols[0] = Utils.clamp(region.cols[0], 0, maxColumnIndex);\n nextRegion.cols[1] = Utils.clamp(region.cols[1], 0, maxColumnIndex);\n }\n return nextRegion;\n };\n /**\n * Returns true iff the specified region is equal to the last region in\n * the region list. This allows us to avoid immediate additive re-selection.\n */\n Regions.lastRegionIsEqual = function (regions, region) {\n if (regions == null || regions.length === 0) {\n return false;\n }\n var lastRegion = regions[regions.length - 1];\n return Regions.regionsEqual(lastRegion, region);\n };\n /**\n * Returns the index of the region that is equal to the supplied\n * parameter. Returns -1 if no such region is found.\n */\n Regions.findMatchingRegion = function (regions, region) {\n if (regions == null) {\n return -1;\n }\n for (var i = 0; i < regions.length; i++) {\n if (Regions.regionsEqual(regions[i], region)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Returns the index of the region that wholly contains the supplied\n * parameter. Returns -1 if no such region is found.\n */\n Regions.findContainingRegion = function (regions, region) {\n if (regions == null) {\n return -1;\n }\n for (var i = 0; i < regions.length; i++) {\n if (Regions.regionContains(regions[i], region)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Returns true if the regions contain a region that has FULL_COLUMNS\n * cardinality and contains the specified column index.\n */\n Regions.hasFullColumn = function (regions, col) {\n if (regions == null) {\n return false;\n }\n for (var _i = 0, regions_1 = regions; _i < regions_1.length; _i++) {\n var region = regions_1[_i];\n var cardinality = Regions.getRegionCardinality(region);\n if (cardinality === RegionCardinality.FULL_TABLE) {\n return true;\n }\n if (cardinality === RegionCardinality.FULL_COLUMNS && Regions.intervalContainsIndex(region.cols, col)) {\n return true;\n }\n }\n return false;\n };\n /**\n * Returns true if the regions contain a region that has FULL_ROWS\n * cardinality and contains the specified row index.\n */\n Regions.hasFullRow = function (regions, row) {\n if (regions == null) {\n return false;\n }\n for (var _i = 0, regions_2 = regions; _i < regions_2.length; _i++) {\n var region = regions_2[_i];\n var cardinality = Regions.getRegionCardinality(region);\n if (cardinality === RegionCardinality.FULL_TABLE) {\n return true;\n }\n if (cardinality === RegionCardinality.FULL_ROWS && Regions.intervalContainsIndex(region.rows, row)) {\n return true;\n }\n }\n return false;\n };\n /**\n * Returns true if the regions contain a region that has FULL_TABLE cardinality\n */\n Regions.hasFullTable = function (regions) {\n if (regions == null) {\n return false;\n }\n for (var _i = 0, regions_3 = regions; _i < regions_3.length; _i++) {\n var region = regions_3[_i];\n var cardinality = Regions.getRegionCardinality(region);\n if (cardinality === RegionCardinality.FULL_TABLE) {\n return true;\n }\n }\n return false;\n };\n /**\n * Returns true if the regions fully contain the query region.\n */\n Regions.containsRegion = function (regions, query) {\n return Regions.overlapsRegion(regions, query, false);\n };\n /**\n * Returns true if the regions at least partially overlap the query region.\n */\n Regions.overlapsRegion = function (regions, query, allowPartialOverlap) {\n if (allowPartialOverlap === void 0) { allowPartialOverlap = false; }\n var intervalCompareFn = allowPartialOverlap ? Regions.intervalOverlaps : Regions.intervalContains;\n if (regions == null || query == null) {\n return false;\n }\n for (var _i = 0, regions_4 = regions; _i < regions_4.length; _i++) {\n var region = regions_4[_i];\n var cardinality = Regions.getRegionCardinality(region);\n switch (cardinality) {\n case RegionCardinality.FULL_TABLE:\n return true;\n case RegionCardinality.FULL_COLUMNS:\n if (intervalCompareFn(region.cols, query.cols)) {\n return true;\n }\n continue;\n case RegionCardinality.FULL_ROWS:\n if (intervalCompareFn(region.rows, query.rows)) {\n return true;\n }\n continue;\n case RegionCardinality.CELLS:\n if (intervalCompareFn(region.cols, query.cols) && intervalCompareFn(region.rows, query.rows)) {\n return true;\n }\n continue;\n default:\n break;\n }\n }\n return false;\n };\n Regions.eachUniqueFullColumn = function (regions, iteratee) {\n if (regions == null || regions.length === 0 || iteratee == null) {\n return;\n }\n var seen = {};\n regions.forEach(function (region) {\n if (Regions.getRegionCardinality(region) === RegionCardinality.FULL_COLUMNS) {\n var _a = region.cols, start = _a[0], end = _a[1];\n for (var col = start; col <= end; col++) {\n if (!seen[col]) {\n seen[col] = true;\n iteratee(col);\n }\n }\n }\n });\n };\n Regions.eachUniqueFullRow = function (regions, iteratee) {\n if (regions == null || regions.length === 0 || iteratee == null) {\n return;\n }\n var seen = {};\n regions.forEach(function (region) {\n if (Regions.getRegionCardinality(region) === RegionCardinality.FULL_ROWS) {\n var _a = region.rows, start = _a[0], end = _a[1];\n for (var row = start; row <= end; row++) {\n if (!seen[row]) {\n seen[row] = true;\n iteratee(row);\n }\n }\n }\n });\n };\n /**\n * Using the supplied array of non-contiguous `IRegion`s, this method\n * returns an ordered array of every unique cell that exists in those\n * regions.\n */\n Regions.enumerateUniqueCells = function (regions, numRows, numCols) {\n if (regions == null || regions.length === 0) {\n return [];\n }\n var seen = {};\n var list = [];\n for (var _i = 0, regions_5 = regions; _i < regions_5.length; _i++) {\n var region = regions_5[_i];\n Regions.eachCellInRegion(region, numRows, numCols, function (row, col) {\n // add to list if not seen\n var key = row + \"-\" + col;\n if (seen[key] !== true) {\n seen[key] = true;\n list.push([row, col]);\n }\n });\n }\n // sort list by rows then columns\n list.sort(Regions.rowFirstComparator);\n return list;\n };\n /**\n * Using the supplied region, returns an \"equivalent\" region of\n * type CELLS that define the bounds of the given region\n */\n Regions.getCellRegionFromRegion = function (region, numRows, numCols) {\n var regionCardinality = Regions.getRegionCardinality(region);\n switch (regionCardinality) {\n case RegionCardinality.FULL_TABLE:\n return Regions.cell(0, 0, numRows - 1, numCols - 1);\n case RegionCardinality.FULL_COLUMNS:\n return Regions.cell(0, region.cols[0], numRows - 1, region.cols[1]);\n case RegionCardinality.FULL_ROWS:\n return Regions.cell(region.rows[0], 0, region.rows[1], numCols - 1);\n case RegionCardinality.CELLS:\n return Regions.cell(region.rows[0], region.cols[0], region.rows[1], region.cols[1]);\n default:\n return null;\n }\n };\n /**\n * Maps a dense array of cell coordinates to a sparse 2-dimensional array\n * of cell values.\n *\n * We create a new 2-dimensional array representing the smallest single\n * contiguous `IRegion` that contains all cells in the supplied array. We\n * invoke the mapper callback only on the cells in the supplied coordinate\n * array and store the result. Returns the resulting 2-dimensional array.\n */\n Regions.sparseMapCells = function (cells, mapper) {\n var bounds = Regions.getBoundingRegion(cells);\n if (bounds == null) {\n return null;\n }\n var numRows = bounds.rows[1] + 1 - bounds.rows[0];\n var numCols = bounds.cols[1] + 1 - bounds.cols[0];\n var result = Utils.times(numRows, function () { return new Array(numCols); });\n cells.forEach(function (_a) {\n var row = _a[0], col = _a[1];\n result[row - bounds.rows[0]][col - bounds.cols[0]] = mapper(row, col);\n });\n return result;\n };\n /**\n * Returns the smallest single contiguous `IRegion` that contains all cells in the\n * supplied array.\n */\n Regions.getBoundingRegion = function (cells) {\n var minRow;\n var maxRow;\n var minCol;\n var maxCol;\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var _a = cells_1[_i], row = _a[0], col = _a[1];\n minRow = minRow == null || row < minRow ? row : minRow;\n maxRow = maxRow == null || row > maxRow ? row : maxRow;\n minCol = minCol == null || col < minCol ? col : minCol;\n maxCol = maxCol == null || col > maxCol ? col : maxCol;\n }\n if (minRow == null) {\n return null;\n }\n return {\n cols: [minCol, maxCol],\n rows: [minRow, maxRow],\n };\n };\n Regions.isValid = function (region) {\n if (region == null) {\n return false;\n }\n if (region.rows != null && (region.rows[0] < 0 || region.rows[1] < 0)) {\n return false;\n }\n if (region.cols != null && (region.cols[0] < 0 || region.cols[1] < 0)) {\n return false;\n }\n return true;\n };\n Regions.isRegionValidForTable = function (region, numRows, numCols) {\n if (numRows === 0 || numCols === 0) {\n return false;\n }\n else if (region.rows != null && !intervalInRangeInclusive(region.rows, 0, numRows - 1)) {\n return false;\n }\n else if (region.cols != null && !intervalInRangeInclusive(region.cols, 0, numCols - 1)) {\n return false;\n }\n return true;\n };\n Regions.joinStyledRegionGroups = function (selectedRegions, otherRegions, focusedCell) {\n var regionGroups = [];\n if (otherRegions != null) {\n regionGroups = regionGroups.concat(otherRegions);\n }\n if (selectedRegions != null && selectedRegions.length > 0) {\n regionGroups.push({\n className: Classes.TABLE_SELECTION_REGION,\n regions: selectedRegions,\n });\n }\n if (focusedCell != null) {\n regionGroups.push({\n className: Classes.TABLE_FOCUS_REGION,\n regions: [Regions.cell(focusedCell.row, focusedCell.col)],\n });\n }\n return regionGroups;\n };\n Regions.regionsEqual = function (regionA, regionB) {\n return Regions.intervalsEqual(regionA.rows, regionB.rows) && Regions.intervalsEqual(regionA.cols, regionB.cols);\n };\n /**\n * Expands an old region to the minimal bounding region that also contains\n * the new region. If the regions have different cardinalities, then the new\n * region is returned. Useful for expanding a selected region on\n * shift+click, for instance.\n */\n Regions.expandRegion = function (oldRegion, newRegion) {\n var oldRegionCardinality = Regions.getRegionCardinality(oldRegion);\n var newRegionCardinality = Regions.getRegionCardinality(newRegion);\n if (newRegionCardinality !== oldRegionCardinality) {\n return newRegion;\n }\n switch (newRegionCardinality) {\n case RegionCardinality.FULL_ROWS: {\n var rowStart = Math.min(oldRegion.rows[0], newRegion.rows[0]);\n var rowEnd = Math.max(oldRegion.rows[1], newRegion.rows[1]);\n return Regions.row(rowStart, rowEnd);\n }\n case RegionCardinality.FULL_COLUMNS: {\n var colStart = Math.min(oldRegion.cols[0], newRegion.cols[0]);\n var colEnd = Math.max(oldRegion.cols[1], newRegion.cols[1]);\n return Regions.column(colStart, colEnd);\n }\n case RegionCardinality.CELLS: {\n var rowStart = Math.min(oldRegion.rows[0], newRegion.rows[0]);\n var colStart = Math.min(oldRegion.cols[0], newRegion.cols[0]);\n var rowEnd = Math.max(oldRegion.rows[1], newRegion.rows[1]);\n var colEnd = Math.max(oldRegion.cols[1], newRegion.cols[1]);\n return Regions.cell(rowStart, colStart, rowEnd, colEnd);\n }\n default:\n return Regions.table();\n }\n };\n /**\n * Iterates over the cells within an `IRegion`, invoking the callback with\n * each cell's coordinates.\n */\n Regions.eachCellInRegion = function (region, numRows, numCols, iteratee) {\n var cardinality = Regions.getRegionCardinality(region);\n switch (cardinality) {\n case RegionCardinality.FULL_TABLE:\n for (var row = 0; row < numRows; row++) {\n for (var col = 0; col < numCols; col++) {\n iteratee(row, col);\n }\n }\n break;\n case RegionCardinality.FULL_COLUMNS:\n for (var row = 0; row < numRows; row++) {\n for (var col = region.cols[0]; col <= region.cols[1]; col++) {\n iteratee(row, col);\n }\n }\n break;\n case RegionCardinality.FULL_ROWS:\n for (var row = region.rows[0]; row <= region.rows[1]; row++) {\n for (var col = 0; col < numCols; col++) {\n iteratee(row, col);\n }\n }\n break;\n case RegionCardinality.CELLS:\n for (var row = region.rows[0]; row <= region.rows[1]; row++) {\n for (var col = region.cols[0]; col <= region.cols[1]; col++) {\n iteratee(row, col);\n }\n }\n break;\n default:\n break;\n }\n };\n Regions.regionContains = function (regionA, regionB) {\n // containsRegion expects an array of regions as the first param\n return Regions.overlapsRegion([regionA], regionB, false);\n };\n Regions.intervalsEqual = function (ivalA, ivalB) {\n if (ivalA == null) {\n return ivalB == null;\n }\n else if (ivalB == null) {\n return false;\n }\n else {\n return ivalA[0] === ivalB[0] && ivalA[1] === ivalB[1];\n }\n };\n Regions.intervalContainsIndex = function (interval, index) {\n if (interval == null) {\n return false;\n }\n return interval[0] <= index && interval[1] >= index;\n };\n Regions.intervalContains = function (ivalA, ivalB) {\n if (ivalA == null || ivalB == null) {\n return false;\n }\n return ivalA[0] <= ivalB[0] && ivalB[1] <= ivalA[1];\n };\n Regions.intervalOverlaps = function (ivalA, ivalB) {\n if (ivalA == null || ivalB == null) {\n return false;\n }\n if (ivalA[1] < ivalB[0] || ivalA[0] > ivalB[1]) {\n return false;\n }\n return true;\n };\n Regions.rowFirstComparator = function (a, b) {\n var rowDiff = a[0] - b[0];\n return rowDiff === 0 ? a[1] - b[1] : rowDiff;\n };\n Regions.numericalComparator = function (a, b) {\n return a - b;\n };\n Regions.normalizeInterval = function (coord, coord2) {\n if (coord2 == null) {\n coord2 = coord;\n }\n var interval = [coord, coord2];\n interval.sort(Regions.numericalComparator);\n return interval;\n };\n return Regions;\n}());\nexport { Regions };\nfunction intervalInRangeInclusive(interval, minInclusive, maxInclusive) {\n return (inRangeInclusive(interval[0], minInclusive, maxInclusive) &&\n inRangeInclusive(interval[1], minInclusive, maxInclusive));\n}\nfunction inRangeInclusive(value, minInclusive, maxInclusive) {\n return value >= minInclusive && value <= maxInclusive;\n}\n//# sourceMappingURL=regions.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var RenderMode;\n(function (RenderMode) {\n /**\n * Renders cells in batches across multiple animation frames. This improves\n * performance by spreading out work to keep a high FPS and avoid blocking\n * the UI, but it also introduces a noticeable scan-line rendering artifact\n * as successive batches of cells finish rendering.\n */\n RenderMode[\"BATCH\"] = \"batch\";\n /**\n * Renders all cells synchronously on initial mount, then renders cells in\n * batches on successive updates (e.g. during scrolling). This helps to\n * remove visual rendering artifacts when the table is first rendered,\n * wihout slowing scrolling performance to a crawl.\n */\n RenderMode[\"BATCH_ON_UPDATE\"] = \"batch-on-update\";\n /**\n * Disables the batch-rendering behavior, rendering all cells synchronously\n * at once. This may result in degraded performance on large tables and/or\n * on tables with complex cells.\n */\n RenderMode[\"NONE\"] = \"none\";\n})(RenderMode || (RenderMode = {}));\n//# sourceMappingURL=renderMode.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nimport { RegionCardinality, Regions } from \"../regions\";\nimport * as Classes from \"./classes\";\nimport { Rect } from \"./rect\";\nimport { Utils } from \"./utils\";\n/**\n * This class manages the sizes of grid cells using arrays of individual row/column sizes.\n */\nvar Grid = /** @class */ (function () {\n /**\n * This constructor accumulates the heights and widths in `O(n)`, saving\n * time in later calculations.\n *\n * @param bleed - The number of rows/cols that we expand beyond the\n * viewport (on all sides). This helps avoid displaying an empty\n * viewport when the user scrolls quickly.\n */\n function Grid(rowHeights, columnWidths, bleed, ghostHeight, ghostWidth) {\n var _this = this;\n if (bleed === void 0) { bleed = Grid.DEFAULT_BLEED; }\n if (ghostHeight === void 0) { ghostHeight = Grid.DEFAULT_GHOST_HEIGHT; }\n if (ghostWidth === void 0) { ghostWidth = Grid.DEFAULT_GHOST_WIDTH; }\n this.getCumulativeWidthBefore = function (index) {\n return index === 0 ? 0 : _this.getCumulativeWidthAt(index - 1);\n };\n this.getCumulativeWidthAt = function (index) {\n if (_this.numCols === 0) {\n return _this.ghostWidth * index;\n }\n else if (index >= _this.numCols) {\n return _this.cumulativeColumnWidths[_this.numCols - 1] + _this.ghostWidth * (index - _this.numCols + 1);\n }\n else {\n return _this.cumulativeColumnWidths[index];\n }\n };\n this.getCumulativeHeightBefore = function (index) {\n return index === 0 ? 0 : _this.getCumulativeHeightAt(index - 1);\n };\n this.getCumulativeHeightAt = function (index) {\n if (_this.numRows === 0) {\n return _this.ghostHeight * index;\n }\n else if (index >= _this.numRows) {\n return _this.cumulativeRowHeights[_this.numRows - 1] + _this.ghostHeight * (index - _this.numRows + 1);\n }\n else {\n return _this.cumulativeRowHeights[index];\n }\n };\n this.columnWidths = columnWidths;\n this.rowHeights = rowHeights;\n this.cumulativeColumnWidths = Utils.accumulate(columnWidths);\n this.cumulativeRowHeights = Utils.accumulate(rowHeights);\n this.numCols = columnWidths.length;\n this.numRows = rowHeights.length;\n this.bleed = bleed;\n this.ghostHeight = ghostHeight;\n this.ghostWidth = ghostWidth;\n }\n /**\n * Returns the `Rect` bounds of a cell in scrollpane client space.\n *\n * Scrollpane client coordinate space uses the origin of the scrollpane\n * client (the inside part that you're moving around).\n *\n * For example, let's say you're scrolling around a block of 1000 x 1000\n * cells. Regardless where you've scrolled, the first cell is always at\n * 0,0 in scrollpane client space. the cell to the right of it is always\n * at, e.g., 100,0.\n */\n Grid.prototype.getCellRect = function (rowIndex, columnIndex) {\n var height = this.rowHeights[rowIndex];\n var top = this.cumulativeRowHeights[rowIndex] - height;\n var width = this.columnWidths[columnIndex];\n var left = this.cumulativeColumnWidths[columnIndex] - width;\n return new Rect(left, top, width, height);\n };\n /**\n * Returns the `Rect` bounds of a cell in scrollpane client space.\n *\n * If the cell is beyond the bounds of the user-defined table cells, it is\n * considered a \"ghost\" cell. If a width/height is not defined for that\n * row/column, we use the default width/height.\n */\n Grid.prototype.getGhostCellRect = function (rowIndex, columnIndex) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n if (rowIndex >= this.rowHeights.length) {\n height = this.ghostHeight;\n top = this.getHeight() + this.ghostHeight * (rowIndex - this.numRows);\n }\n else {\n height = this.rowHeights[rowIndex];\n top = this.cumulativeRowHeights[rowIndex] - height;\n }\n if (columnIndex >= this.columnWidths.length) {\n width = this.ghostWidth;\n left = this.getWidth() + this.ghostWidth * (columnIndex - this.numCols);\n }\n else {\n width = this.columnWidths[columnIndex];\n left = this.cumulativeColumnWidths[columnIndex] - width;\n }\n return new Rect(left, top, width, height);\n };\n /**\n * Returns the `Rect` with the base coordinate and height of the specified row.\n */\n Grid.prototype.getRowRect = function (rowIndex) {\n var height = this.rowHeights[rowIndex];\n var top = this.cumulativeRowHeights[rowIndex] - height;\n return new Rect(0, top, this.getWidth(), height);\n };\n /**\n * Returns the `Rect` with the base coordinate and width of the specified column.\n */\n Grid.prototype.getColumnRect = function (columnIndex) {\n var width = this.columnWidths[columnIndex];\n var left = this.cumulativeColumnWidths[columnIndex] - width;\n return new Rect(left, 0, width, this.getHeight());\n };\n /**\n * Returns the total width of the entire grid\n */\n Grid.prototype.getWidth = function () {\n return this.numCols === 0 ? 0 : this.cumulativeColumnWidths[this.numCols - 1];\n };\n /**\n * Returns the total width of the entire grid\n */\n Grid.prototype.getHeight = function () {\n return this.numRows === 0 ? 0 : this.cumulativeRowHeights[this.numRows - 1];\n };\n /**\n * Returns the `Rect` bounds of entire grid\n */\n Grid.prototype.getRect = function () {\n return new Rect(0, 0, this.getWidth(), this.getHeight());\n };\n /**\n * Maps each cell that intersects with the given `Rect` argument. The\n * indices of iteration are extended in both directions by the integer\n * `bleed` class property, then are clamped between 0 and the number of\n * rows/columns.\n *\n * Uses a binary search for each of the 4 edges of the bounds, resulting\n * in a runtime of `O(log(rows) + log(cols))` plus the `O(irows * icols)`\n * iteration of intersecting cells.\n */\n Grid.prototype.mapCellsInRect = function (rect, callback) {\n var results = [];\n if (rect == null) {\n return results;\n }\n var _a = this.getRowIndicesInRect(rect), rowIndexStart = _a.rowIndexStart, rowIndexEnd = _a.rowIndexEnd;\n var _b = this.getColumnIndicesInRect(rect), columnIndexStart = _b.columnIndexStart, columnIndexEnd = _b.columnIndexEnd;\n for (var rowIndex = rowIndexStart; rowIndex <= rowIndexEnd; rowIndex++) {\n for (var columnIndex = columnIndexStart; columnIndex <= columnIndexEnd; columnIndex++) {\n results.push(callback(rowIndex, columnIndex));\n }\n }\n return results;\n };\n /**\n * Maps each row that intersects with the given `Rect` argument.\n *\n * See Grid.mapCellsInRect for more details.\n */\n Grid.prototype.mapRowsInRect = function (rect, callback) {\n var results = [];\n if (rect == null) {\n return results;\n }\n var _a = this.getRowIndicesInRect(rect), rowIndexStart = _a.rowIndexStart, rowIndexEnd = _a.rowIndexEnd;\n for (var rowIndex = rowIndexStart; rowIndex <= rowIndexEnd; rowIndex++) {\n results.push(callback(rowIndex));\n }\n return results;\n };\n /**\n * Maps each column that intersects with the given `Rect` argument.\n *\n * See Grid.mapCellsInRect for more details.\n */\n Grid.prototype.mapColumnsInRect = function (rect, callback) {\n var results = [];\n if (rect == null) {\n return results;\n }\n var _a = this.getColumnIndicesInRect(rect), columnIndexStart = _a.columnIndexStart, columnIndexEnd = _a.columnIndexEnd;\n for (var columnIndex = columnIndexStart; columnIndex <= columnIndexEnd; columnIndex++) {\n results.push(callback(columnIndex));\n }\n return results;\n };\n /**\n * Returns the start and end indices of rows that intersect with the given\n * `Rect` argument.\n */\n Grid.prototype.getRowIndicesInRect = function (rect, includeGhostCells, limit) {\n if (includeGhostCells === void 0) { includeGhostCells = false; }\n if (limit === void 0) { limit = Grid.DEFAULT_MAX_ROWS; }\n if (rect == null) {\n return { rowIndexEnd: 0, rowIndexStart: 0 };\n }\n var searchEnd = includeGhostCells ? Math.max(this.numRows, Grid.DEFAULT_MAX_ROWS) : this.numRows;\n var _a = this.getIndicesInInterval(rect.top, rect.top + rect.height, searchEnd, !includeGhostCells, this.getCumulativeHeightAt), start = _a.start, end = _a.end;\n var rowIndexEnd = limit > 0 && end - start > limit ? start + limit : end;\n return {\n rowIndexEnd: rowIndexEnd,\n rowIndexStart: start,\n };\n };\n /**\n * Returns the start and end indices of columns that intersect with the\n * given `Rect` argument.\n */\n Grid.prototype.getColumnIndicesInRect = function (rect, includeGhostCells, limit) {\n if (includeGhostCells === void 0) { includeGhostCells = false; }\n if (limit === void 0) { limit = Grid.DEFAULT_MAX_COLUMNS; }\n if (rect == null) {\n return { columnIndexEnd: 0, columnIndexStart: 0 };\n }\n var searchEnd = includeGhostCells ? Math.max(this.numCols, Grid.DEFAULT_MAX_COLUMNS) : this.numCols;\n var _a = this.getIndicesInInterval(rect.left, rect.left + rect.width, searchEnd, !includeGhostCells, this.getCumulativeWidthAt), start = _a.start, end = _a.end;\n var columnIndexEnd = limit > 0 && end - start > limit ? start + limit : end;\n return {\n columnIndexEnd: columnIndexEnd,\n columnIndexStart: start,\n };\n };\n Grid.prototype.isGhostIndex = function (rowIndex, columnIndex) {\n return rowIndex >= this.numRows || columnIndex >= this.numCols;\n };\n Grid.prototype.isGhostColumn = function (columnIndex) {\n return columnIndex >= this.numCols;\n };\n Grid.prototype.getExtremaClasses = function (rowIndex, columnIndex, rowEnd, columnEnd) {\n if (rowIndex === rowEnd && columnIndex === columnEnd) {\n return [Classes.TABLE_LAST_IN_COLUMN, Classes.TABLE_LAST_IN_ROW];\n }\n if (rowIndex === rowEnd) {\n return [Classes.TABLE_LAST_IN_COLUMN];\n }\n if (columnIndex === columnEnd) {\n return [Classes.TABLE_LAST_IN_ROW];\n }\n return [];\n };\n Grid.prototype.getRegionStyle = function (region) {\n var cardinality = Regions.getRegionCardinality(region);\n switch (cardinality) {\n case RegionCardinality.CELLS: {\n var _a = region.rows, rowStart = _a[0], rowEnd = _a[1];\n var _b = region.cols, colStart = _b[0], colEnd = _b[1];\n // if the region is outside the bounds of the table, don't display it\n if (this.isGhostIndex(rowStart, colStart) || this.isGhostIndex(rowEnd, colEnd)) {\n return { display: \"none\" };\n }\n var cellRect0 = this.getCellRect(rowStart, colStart);\n var cellRect1 = this.getCellRect(rowEnd, colEnd);\n var offsetLeft = colStart === 0 ? 0 : 1;\n var offsetTop = rowStart === 0 ? 0 : 1;\n var rect = cellRect0.union(cellRect1);\n rect.height += offsetTop;\n rect.left -= offsetLeft;\n rect.width += offsetLeft;\n rect.top -= offsetTop;\n return __assign(__assign({}, rect.style()), { display: \"block\" });\n }\n case RegionCardinality.FULL_COLUMNS: {\n var _c = region.cols, colStart = _c[0], colEnd = _c[1];\n // if the region is outside the bounds of the table, don't display it\n if (this.isGhostIndex(0, colStart) || this.isGhostIndex(0, colEnd)) {\n return { display: \"none\" };\n }\n var cellRect0 = this.getCellRect(0, colStart);\n var cellRect1 = this.getCellRect(0, colEnd);\n var rect = cellRect0.union(cellRect1);\n var offsetLeft = colStart === 0 ? 0 : 1;\n return {\n bottom: 0,\n display: \"block\",\n left: rect.left - offsetLeft,\n top: 0,\n width: rect.width + offsetLeft,\n };\n }\n case RegionCardinality.FULL_ROWS: {\n var _d = region.rows, rowStart = _d[0], rowEnd = _d[1];\n // if the region is outside the bounds of the table, don't display it\n if (this.isGhostIndex(rowStart, 0) || this.isGhostIndex(rowEnd, 0)) {\n return { display: \"none\" };\n }\n var cellRect0 = this.getCellRect(rowStart, 0);\n var cellRect1 = this.getCellRect(rowEnd, 0);\n var rect = cellRect0.union(cellRect1);\n var offsetTop = rowStart === 0 ? 0 : 1;\n return {\n display: \"block\",\n height: rect.height + offsetTop,\n left: 0,\n right: 0,\n top: rect.top - offsetTop,\n };\n }\n case RegionCardinality.FULL_TABLE:\n return {\n bottom: 0,\n display: \"block\",\n left: 0,\n right: 0,\n top: 0,\n };\n default:\n return { display: \"none\" };\n }\n };\n Grid.prototype.getIndicesInInterval = function (min, max, count, useEndBleed, lookup) {\n var start = Utils.binarySearch(min, count - 1, lookup);\n var end = Utils.binarySearch(max, count - 1, lookup);\n // correct exact pixel alignment\n if (start >= 0 && min === lookup(start)) {\n start += 1;\n }\n // apply bounded bleeds\n start = Math.max(0, start - this.bleed);\n if (useEndBleed) {\n end = Math.min(count - 1, end + this.bleed);\n }\n else {\n end = Math.min(count - 1, end);\n }\n return { start: start, end: end };\n };\n Grid.DEFAULT_BLEED = 3;\n Grid.DEFAULT_MAX_COLUMNS = 50;\n Grid.DEFAULT_MAX_ROWS = 200;\n Grid.DEFAULT_GHOST_HEIGHT = 20;\n Grid.DEFAULT_GHOST_WIDTH = 150;\n return Grid;\n}());\nexport { Grid };\n//# sourceMappingURL=grid.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign } from \"tslib\";\nimport { RegionCardinality, Regions } from \"../../regions\";\nimport * as Errors from \"../errors\";\n/**\n * Returns the `focusedSelectionIndex` if both the focused cell and that\n * property are defined, or the last index of `selectedRegions` otherwise. If\n * `selectedRegions` is empty, the function always returns `undefined`.\n */\nexport function getFocusedOrLastSelectedIndex(selectedRegions, focusedCell) {\n if (selectedRegions.length === 0) {\n return undefined;\n }\n else if (focusedCell != null) {\n return focusedCell.focusSelectionIndex;\n }\n else {\n return selectedRegions.length - 1;\n }\n}\n/**\n * Returns the proper focused cell for the given set of initial conditions.\n */\nexport function getInitialFocusedCell(enableFocusedCell, focusedCellFromProps, focusedCellFromState, selectedRegions) {\n if (!enableFocusedCell) {\n return undefined;\n }\n else if (focusedCellFromProps != null) {\n // controlled mode\n return focusedCellFromProps;\n }\n else if (focusedCellFromState != null) {\n // use the current focused cell from state\n return focusedCellFromState;\n }\n else if (selectedRegions.length > 0) {\n // focus the top-left cell of the last selection\n var lastIndex = selectedRegions.length - 1;\n return __assign(__assign({}, Regions.getFocusCellCoordinatesFromRegion(selectedRegions[lastIndex])), { focusSelectionIndex: lastIndex });\n }\n else {\n // focus the top-left cell of the table\n return { col: 0, row: 0, focusSelectionIndex: 0 };\n }\n}\n/**\n * Returns `true` if the focused cell is located along the top boundary of the\n * provided region, or `false` otherwise.\n */\nexport function isFocusedCellAtRegionTop(region, focusedCell) {\n return region.rows != null && focusedCell.row === region.rows[0];\n}\n/**\n * Returns `true` if the focused cell is located along the bottom boundary of\n * the provided region, or `false` otherwise.\n */\nexport function isFocusedCellAtRegionBottom(region, focusedCell) {\n return region.rows != null && focusedCell.row === region.rows[1];\n}\n/**\n * Returns `true` if the focused cell is located along the left boundary of the\n * provided region, or `false` otherwise.\n */\nexport function isFocusedCellAtRegionLeft(region, focusedCell) {\n return region.cols != null && focusedCell.col === region.cols[0];\n}\n/**\n * Returns `true` if the focused cell is located along the right boundary of the\n * provided region, or `false` otherwise.\n */\nexport function isFocusedCellAtRegionRight(region, focusedCell) {\n return region.cols != null && focusedCell.col === region.cols[1];\n}\n/**\n * Returns a new cell-coordinates object that includes a focusSelectionIndex property.\n * The returned object will have the proper IFocusedCellCoordinates type.\n */\nexport function toFullCoordinates(cellCoords, focusSelectionIndex) {\n if (focusSelectionIndex === void 0) { focusSelectionIndex = 0; }\n return __assign(__assign({}, cellCoords), { focusSelectionIndex: focusSelectionIndex });\n}\n/**\n * Expands an existing region to new region based on the current focused cell.\n * The focused cell is an invariant and should not move as a result of this\n * operation. This function is used, for instance, to expand a selected region\n * on shift+click.\n */\nexport function expandFocusedRegion(focusedCell, newRegion) {\n switch (Regions.getRegionCardinality(newRegion)) {\n case RegionCardinality.FULL_COLUMNS: {\n var _a = getExpandedRegionIndices(focusedCell, newRegion, \"col\", \"cols\"), indexStart = _a[0], indexEnd = _a[1];\n return Regions.column(indexStart, indexEnd);\n }\n case RegionCardinality.FULL_ROWS: {\n var _b = getExpandedRegionIndices(focusedCell, newRegion, \"row\", \"rows\"), indexStart = _b[0], indexEnd = _b[1];\n return Regions.row(indexStart, indexEnd);\n }\n case RegionCardinality.CELLS:\n var _c = getExpandedRegionIndices(focusedCell, newRegion, \"row\", \"rows\"), rowIndexStart = _c[0], rowIndexEnd = _c[1];\n var _d = getExpandedRegionIndices(focusedCell, newRegion, \"col\", \"cols\"), colIndexStart = _d[0], colIndexEnd = _d[1];\n return Regions.cell(rowIndexStart, colIndexStart, rowIndexEnd, colIndexEnd);\n default:\n // i.e. `case RegionCardinality.FULL_TABLE:`\n return Regions.table();\n }\n}\nfunction getExpandedRegionIndices(focusedCell, newRegion, focusedCellDimension, regionDimension) {\n var sourceIndex = focusedCell[focusedCellDimension];\n var _a = newRegion[regionDimension], destinationIndex = _a[0], destinationIndexEnd = _a[1];\n if (destinationIndex !== destinationIndexEnd) {\n if (regionDimension === \"rows\") {\n throw new Error(Errors.TABLE_EXPAND_FOCUSED_REGION_MULTI_ROW_REGION);\n }\n else if (regionDimension === \"cols\") {\n throw new Error(Errors.TABLE_EXPAND_FOCUSED_REGION_MULTI_COLUMN_REGION);\n }\n }\n return sourceIndex <= destinationIndex ? [sourceIndex, destinationIndex] : [destinationIndex, sourceIndex];\n}\n//# sourceMappingURL=focusedCellUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RegionCardinality, Regions } from \"../../regions\";\n/**\n * Returns the scroll{Left,Top} offsets of the provided region based on its\n * cardinality.\n */\nexport function getScrollPositionForRegion(region, currScrollLeft, currScrollTop, getLeftOffset, getTopOffset, numFrozenRows, numFrozenColumns) {\n if (numFrozenRows === void 0) { numFrozenRows = 0; }\n if (numFrozenColumns === void 0) { numFrozenColumns = 0; }\n var cardinality = Regions.getRegionCardinality(region);\n var scrollTop = currScrollTop;\n var scrollLeft = currScrollLeft;\n // if these were max-frozen-index values, we would have added 1 before passing to the get*Offset\n // functions, but the counts are already 1-indexed, so we can just pass those.\n var frozenColumnsCumulativeWidth = getLeftOffset(numFrozenColumns);\n var frozenRowsCumulativeHeight = getTopOffset(numFrozenRows);\n switch (cardinality) {\n case RegionCardinality.CELLS: {\n // scroll to the top-left corner of the block of cells\n var topOffset = getTopOffset(region.rows[0]);\n var leftOffset = getLeftOffset(region.cols[0]);\n scrollTop = getClampedScrollPosition(topOffset, frozenRowsCumulativeHeight);\n scrollLeft = getClampedScrollPosition(leftOffset, frozenColumnsCumulativeWidth);\n break;\n }\n case RegionCardinality.FULL_ROWS: {\n // scroll to the top of the row block\n var topOffset = getTopOffset(region.rows[0]);\n scrollTop = getClampedScrollPosition(topOffset, frozenRowsCumulativeHeight);\n break;\n }\n case RegionCardinality.FULL_COLUMNS: {\n // scroll to the left side of the column block\n var leftOffset = getLeftOffset(region.cols[0]);\n scrollLeft = getClampedScrollPosition(leftOffset, frozenColumnsCumulativeWidth);\n break;\n }\n default: {\n // if it's a FULL_TABLE region, scroll back to the top-left cell of the table\n scrollTop = 0;\n scrollLeft = 0;\n break;\n }\n }\n return { scrollLeft: scrollLeft, scrollTop: scrollTop };\n}\n/**\n * Returns the thickness of the target scroll bar in pixels.\n * If the target scroll bar is not present, 0 is returned.\n */\nexport function measureScrollBarThickness(element, direction) {\n // offset size includes the scroll bar. client size does not.\n // the difference gives the thickness of the scroll bar.\n return direction === \"horizontal\"\n ? element.offsetHeight - element.clientHeight\n : element.offsetWidth - element.clientWidth;\n}\n/**\n * Adjust the scroll position to align content just beyond the frozen region, if necessary.\n */\nfunction getClampedScrollPosition(scrollOffset, frozenRegionCumulativeSize) {\n // if the new scroll offset falls within the frozen region, clamp it to 0\n return Math.max(scrollOffset - frozenRegionCumulativeSize, 0);\n}\n//# sourceMappingURL=scrollUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RegionCardinality, Regions } from \"../../regions\";\nimport { Direction } from \"../direction\";\nimport * as DirectionUtils from \"./directionUtils\";\nimport * as FocusedCellUtils from \"./focusedCellUtils\";\n/**\n * Resizes the provided region by 1 row/column in the specified direction,\n * returning a new region instance. The region may either expand *or* contract\n * depending on the presence and location of the focused cell.\n *\n * If no focused cell is provided, the region will always be *expanded* in the\n * specified direction.\n *\n * If a focused cell *is* provided, the behavior will change depending on where\n * the focused cell is within the region:\n *\n * 1. If along a top/bottom boundary while resizing UP/DOWN, the resize will\n * expand from or shrink to the focused cell (same if along a left/right\n * boundary while moving LEFT/RIGHT).\n * 2. If *not* along a top/bottom boundary while resizing UP/DOWN (or if *not*\n * along a left/right boundary while moving LEFT/RIGHT), the region will\n * simply expand in the specified direction.\n *\n * Other notes:\n * - A CELLS region can be resized vertically or horizontally.\n * - A FULL_ROWS region can be resized only vertically.\n * - A FULL_COLUMNS region can be resized only horizontally.\n * - A FULL_TABLE region cannot be resized.\n *\n * This function does not clamp the indices of the returned region; that is the\n * responsibility of the caller.\n */\nexport function resizeRegion(region, direction, focusedCell) {\n if (Regions.getRegionCardinality(region) === RegionCardinality.FULL_TABLE) {\n // return the same instance to maintain referential integrity and\n // possibly avoid unnecessary update lifecycles.\n return region;\n }\n var nextRegion = Regions.copy(region);\n var affectedRowIndex = 0;\n var affectedColumnIndex = 0;\n if (focusedCell != null) {\n var isAtTop = FocusedCellUtils.isFocusedCellAtRegionTop(nextRegion, focusedCell);\n var isAtBottom = FocusedCellUtils.isFocusedCellAtRegionBottom(nextRegion, focusedCell);\n var isAtLeft = FocusedCellUtils.isFocusedCellAtRegionLeft(nextRegion, focusedCell);\n var isAtRight = FocusedCellUtils.isFocusedCellAtRegionRight(nextRegion, focusedCell);\n // the focused cell is found along the top and bottom boundary\n // simultaneously when the region is 1 row tall. check for this and\n // similar special cases.\n if (direction === Direction.UP) {\n affectedRowIndex = isAtTop && !isAtBottom ? 1 : 0;\n }\n else if (direction === Direction.DOWN) {\n affectedRowIndex = isAtBottom && !isAtTop ? 0 : 1;\n }\n else if (direction === Direction.LEFT) {\n affectedColumnIndex = isAtLeft && !isAtRight ? 1 : 0;\n }\n else {\n // i.e. `Direction.RIGHT:`\n affectedColumnIndex = isAtRight && !isAtLeft ? 0 : 1;\n }\n }\n else {\n // when there is no focused cell, expand in the specified direction.\n affectedRowIndex = direction === Direction.DOWN ? 1 : 0;\n affectedColumnIndex = direction === Direction.RIGHT ? 1 : 0;\n }\n var delta = DirectionUtils.directionToDelta(direction);\n if (nextRegion.rows != null) {\n nextRegion.rows[affectedRowIndex] += delta.rows;\n }\n if (nextRegion.cols != null) {\n nextRegion.cols[affectedColumnIndex] += delta.cols;\n }\n // the new coordinates might be out of bounds. the caller is responsible for\n // sanitizing the result.\n return nextRegion;\n}\n//# sourceMappingURL=selectionUtils.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Direction } from \"../direction\";\nexport function directionToDelta(direction) {\n switch (direction) {\n case Direction.UP:\n return { rows: -1, cols: 0 };\n case Direction.DOWN:\n return { rows: +1, cols: 0 };\n case Direction.LEFT:\n return { rows: 0, cols: -1 };\n case Direction.RIGHT:\n return { rows: 0, cols: +1 };\n default:\n return undefined;\n }\n}\n//# sourceMappingURL=directionUtils.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { Draggable } from \"./draggable\";\nexport var Orientation;\n(function (Orientation) {\n Orientation[Orientation[\"HORIZONTAL\"] = 1] = \"HORIZONTAL\";\n Orientation[Orientation[\"VERTICAL\"] = 0] = \"VERTICAL\";\n})(Orientation || (Orientation = {}));\nvar ResizeHandle = /** @class */ (function (_super) {\n __extends(ResizeHandle, _super);\n function ResizeHandle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isDragging: false,\n };\n _this.handleActivate = function (event) {\n _this.setState({ isDragging: true });\n _this.props.onLayoutLock(true);\n event.stopPropagation();\n event.stopImmediatePropagation();\n return true;\n };\n _this.handleDragMove = function (_event, coords) {\n var orientationIndex = _this.props.orientation;\n if (_this.props.onResizeMove != null) {\n _this.props.onResizeMove(coords.offset[orientationIndex], coords.delta[orientationIndex]);\n }\n };\n _this.handleDragEnd = function (_event, coords) {\n var orientationIndex = _this.props.orientation;\n _this.setState({ isDragging: false });\n _this.props.onLayoutLock(false);\n if (_this.props.onResizeMove != null) {\n _this.props.onResizeMove(coords.offset[orientationIndex], coords.delta[orientationIndex]);\n }\n if (_this.props.onResizeEnd != null) {\n _this.props.onResizeEnd(coords.offset[orientationIndex]);\n }\n };\n _this.handleClick = function (_event) {\n _this.setState({ isDragging: false });\n _this.props.onLayoutLock(false);\n };\n _this.handleDoubleClick = function (_event) {\n _this.setState({ isDragging: false });\n _this.props.onLayoutLock(false);\n if (_this.props.onDoubleClick != null) {\n _this.props.onDoubleClick();\n }\n };\n return _this;\n }\n ResizeHandle.prototype.render = function () {\n var _a, _b;\n var _c = this.props, onResizeMove = _c.onResizeMove, onResizeEnd = _c.onResizeEnd, onDoubleClick = _c.onDoubleClick, orientation = _c.orientation;\n if (onResizeMove == null && onResizeEnd == null && onDoubleClick == null) {\n return undefined;\n }\n var targetClasses = classNames(Classes.TABLE_RESIZE_HANDLE_TARGET, (_a = {},\n _a[Classes.TABLE_DRAGGING] = this.state.isDragging,\n _a[Classes.TABLE_RESIZE_HORIZONTAL] = orientation === Orientation.HORIZONTAL,\n _a[Classes.TABLE_RESIZE_VERTICAL] = orientation === Orientation.VERTICAL,\n _a), this.props.className);\n var handleClasses = classNames(Classes.TABLE_RESIZE_HANDLE, (_b = {},\n _b[Classes.TABLE_DRAGGING] = this.state.isDragging,\n _b));\n return (React.createElement(Draggable, { onActivate: this.handleActivate, onClick: this.handleClick, onDoubleClick: this.handleDoubleClick, onDragEnd: this.handleDragEnd, onDragMove: this.handleDragMove },\n React.createElement(\"div\", { className: targetClasses },\n React.createElement(\"div\", { className: handleClasses }))));\n };\n return ResizeHandle;\n}(React.PureComponent));\nexport { ResizeHandle };\n//# sourceMappingURL=resizeHandle.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar DragEvents = /** @class */ (function () {\n function DragEvents() {\n var _this = this;\n this.handleMouseDown = function (event) {\n _this.initCoordinateData(event);\n if (_this.handler != null && _this.handler.onActivate != null) {\n var exitCode = _this.handler.onActivate(event);\n if (exitCode === false) {\n return;\n }\n }\n _this.isActivated = true;\n _this.maybeAlterEventChain(event);\n // It is possible that the mouseup would not be called after the initial\n // mousedown (for example if the mouse is moved out of the window). So,\n // we preemptively detach to avoid duplicate listeners.\n _this.detachDocumentEventListeners();\n _this.attachDocumentEventListeners();\n };\n this.handleMouseMove = function (event) {\n _this.maybeAlterEventChain(event);\n if (_this.isActivated) {\n _this.isDragging = true;\n }\n if (_this.isDragging) {\n var coords = _this.updateCoordinateData(event);\n if (_this.handler != null && _this.handler.onDragMove != null) {\n _this.handler.onDragMove(event, coords);\n }\n }\n };\n this.handleMouseUp = function (event) {\n _this.maybeAlterEventChain(event);\n if (_this.handler != null) {\n if (_this.isDragging) {\n var coords = _this.updateCoordinateData(event);\n if (_this.handler.onDragMove != null) {\n _this.handler.onDragMove(event, coords);\n }\n if (_this.handler.onDragEnd != null) {\n _this.handler.onDragEnd(event, coords);\n }\n }\n else if (_this.isActivated) {\n if (_this.handler.onDoubleClick != null) {\n if (_this.doubleClickTimeoutToken == null) {\n // if this the first click of a possible double-click,\n // we delay the firing of the click event by the\n // timeout.\n _this.doubleClickTimeoutToken = window.setTimeout(function () {\n delete _this.doubleClickTimeoutToken;\n if (_this.handler.onClick != null) {\n _this.handler.onClick(event);\n }\n }, DragEvents.DOUBLE_CLICK_TIMEOUT_MSEC);\n }\n else {\n // otherwise, this is the second click in the double-\n // click so we cancel the single-click timeout and\n // fire the double-click event.\n window.clearTimeout(_this.doubleClickTimeoutToken);\n delete _this.doubleClickTimeoutToken;\n _this.handler.onDoubleClick(event);\n }\n }\n else if (_this.handler.onClick != null) {\n _this.handler.onClick(event);\n }\n }\n }\n _this.isActivated = false;\n _this.isDragging = false;\n _this.detachDocumentEventListeners();\n };\n }\n /**\n * Returns true if the event includes a modifier key that often adds the result of the drag\n * event to any existing state. For example, holding CTRL before dragging may select another\n * region in addition to an existing one, while the absence of a modifier key may clear the\n * existing selection first.\n * @param event the mouse event for the drag interaction\n */\n DragEvents.isAdditive = function (event) {\n return event.ctrlKey || event.metaKey;\n };\n DragEvents.prototype.attach = function (element, handler) {\n this.detach();\n this.handler = handler;\n this.element = element;\n if (this.isValidDragHandler(handler)) {\n this.element.addEventListener(\"mousedown\", this.handleMouseDown);\n }\n return this;\n };\n DragEvents.prototype.detach = function () {\n if (this.element != null) {\n this.element.removeEventListener(\"mousedown\", this.handleMouseDown);\n this.detachDocumentEventListeners();\n }\n };\n DragEvents.prototype.isValidDragHandler = function (handler) {\n return (handler != null &&\n (handler.onActivate != null ||\n handler.onDragMove != null ||\n handler.onDragEnd != null ||\n handler.onClick != null ||\n handler.onDoubleClick != null));\n };\n DragEvents.prototype.attachDocumentEventListeners = function () {\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n };\n DragEvents.prototype.detachDocumentEventListeners = function () {\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n };\n DragEvents.prototype.initCoordinateData = function (event) {\n this.activationCoordinates = [event.clientX, event.clientY];\n this.lastCoordinates = this.activationCoordinates;\n };\n DragEvents.prototype.updateCoordinateData = function (event) {\n var currentCoordinates = [event.clientX, event.clientY];\n var deltaCoordinates = [\n currentCoordinates[0] - this.lastCoordinates[0],\n currentCoordinates[1] - this.lastCoordinates[1],\n ];\n var offsetCoordinates = [\n currentCoordinates[0] - this.activationCoordinates[0],\n currentCoordinates[1] - this.activationCoordinates[1],\n ];\n var data = {\n activation: this.activationCoordinates,\n current: currentCoordinates,\n delta: deltaCoordinates,\n last: this.lastCoordinates,\n offset: offsetCoordinates,\n };\n this.lastCoordinates = [event.clientX, event.clientY];\n return data;\n };\n DragEvents.prototype.maybeAlterEventChain = function (event) {\n if (this.handler.preventDefault) {\n event.preventDefault();\n }\n if (this.handler.stopPropagation) {\n event.stopPropagation();\n }\n };\n DragEvents.DOUBLE_CLICK_TIMEOUT_MSEC = 500;\n return DragEvents;\n}());\nexport { DragEvents };\n//# sourceMappingURL=dragEvents.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { DragEvents } from \"./dragEvents\";\nvar REATTACH_PROPS_KEYS = [\"stopPropagation\", \"preventDefault\"];\n/**\n * This component provides a simple interface for combined drag and/or click\n * events.\n *\n * Since the mouse interactions for drag and click are overloaded, here are\n * the events that will fire in these cases:\n *\n * A Click Interaction\n * 1. The user presses down on the render element, triggering the onActivate\n * callback.\n * 2. The user releases the mouse button without moving it, triggering the\n * onClick callback.\n *\n * A Drag Interaction\n * 1. The user presses down on the render element, triggering the onActivate\n * callback.\n * 2. The user moves the mouse, triggering the onDragMove callback.\n * 3. The user moves the mouse, triggering the onDragMove callback.\n * 4. The user moves the mouse, triggering the onDragMove callback.\n * 5. The user releases the mouse button, triggering a final onDragMove\n * callback as well as an onDragEnd callback.\n *\n * If `false` is returned from the onActivate callback, no further events\n * will be fired until the next activation.\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Draggable.prototype.render = function () {\n return React.Children.only(this.props.children);\n };\n Draggable.prototype.componentDidUpdate = function (prevProps) {\n var propsWhitelist = { include: REATTACH_PROPS_KEYS };\n if (this.events && !CoreUtils.shallowCompareKeys(prevProps, this.props, propsWhitelist)) {\n this.events.attach(ReactDOM.findDOMNode(this), this.props);\n }\n };\n Draggable.prototype.componentDidMount = function () {\n this.events = new DragEvents();\n this.events.attach(ReactDOM.findDOMNode(this), this.props);\n };\n Draggable.prototype.componentWillUnmount = function () {\n this.events.detach();\n delete this.events;\n };\n Draggable.defaultProps = {\n preventDefault: true,\n stopPropagation: false,\n };\n return Draggable;\n}(React.PureComponent));\nexport { Draggable };\n//# sourceMappingURL=draggable.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { Classes as CoreClasses, ContextMenuTarget, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as Classes from \"../common/classes\";\nvar HeaderCell = /** @class */ (function (_super) {\n __extends(HeaderCell, _super);\n function HeaderCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isActive: false,\n };\n return _this;\n }\n HeaderCell.prototype.shouldComponentUpdate = function (nextProps) {\n return (!CoreUtils.shallowCompareKeys(this.props, nextProps, { exclude: [\"style\"] }) ||\n !CoreUtils.deepCompareKeys(this.props, nextProps, [\"style\"]));\n };\n HeaderCell.prototype.renderContextMenu = function (_event) {\n var menuRenderer = this.props.menuRenderer;\n if (CoreUtils.isFunction(menuRenderer)) {\n // the preferred way (a consistent function instance that won't cause as many re-renders)\n return menuRenderer(this.props.index);\n }\n else {\n return undefined;\n }\n };\n HeaderCell.prototype.render = function () {\n var _a;\n var classes = classNames(Classes.TABLE_HEADER, (_a = {},\n _a[Classes.TABLE_HEADER_ACTIVE] = this.props.isActive || this.state.isActive,\n _a[Classes.TABLE_HEADER_SELECTED] = this.props.isSelected,\n _a[CoreClasses.LOADING] = this.props.loading,\n _a), this.props.className);\n return (React.createElement(\"div\", { className: classes, style: this.props.style }, this.props.children));\n };\n HeaderCell = __decorate([\n ContextMenuTarget\n ], HeaderCell);\n return HeaderCell;\n}(React.Component));\nexport { HeaderCell };\n//# sourceMappingURL=headerCell.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2, Icon, Popover, Position, Utils as CoreUtils, } from \"@blueprintjs/core\";\nimport * as Classes from \"../common/classes\";\nimport { columnInteractionBarContextTypes } from \"../common/context\";\nimport { LoadableContent } from \"../common/loadableContent\";\nimport { CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT } from \"../common/utils\";\nimport { HeaderCell } from \"./headerCell\";\nexport function HorizontalCellDivider() {\n return React.createElement(\"div\", { className: Classes.TABLE_HORIZONTAL_CELL_DIVIDER });\n}\nvar ColumnHeaderCell = /** @class */ (function (_super) {\n __extends(ColumnHeaderCell, _super);\n function ColumnHeaderCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n isActive: false,\n };\n _this.handlePopoverOpened = function () { return _this.setState({ isActive: true }); };\n _this.handlePopoverClosing = function () { return _this.setState({ isActive: false }); };\n return _this;\n }\n /**\n * This method determines if a `MouseEvent` was triggered on a target that\n * should be used as the header click/drag target. This enables users of\n * this component to render fully interactive components in their header\n * cells without worry of selection or resize operations from capturing\n * their mouse events.\n */\n ColumnHeaderCell.isHeaderMouseTarget = function (target) {\n return (target.classList.contains(Classes.TABLE_HEADER) ||\n target.classList.contains(Classes.TABLE_COLUMN_NAME) ||\n target.classList.contains(Classes.TABLE_INTERACTION_BAR) ||\n target.classList.contains(Classes.TABLE_HEADER_CONTENT));\n };\n ColumnHeaderCell.prototype.render = function () {\n var _a;\n var _b = this.props, \n // from IColumnHeaderCellProps\n enableColumnReordering = _b.enableColumnReordering, isColumnSelected = _b.isColumnSelected, menuIcon = _b.menuIcon, \n // from IColumnNameProps\n name = _b.name, nameRenderer = _b.nameRenderer, \n // from IHeaderProps\n spreadableProps = __rest(_b, [\"enableColumnReordering\", \"isColumnSelected\", \"menuIcon\", \"name\", \"nameRenderer\"]);\n var classes = classNames(spreadableProps.className, Classes.TABLE_COLUMN_HEADER_CELL, (_a = {},\n _a[Classes.TABLE_HAS_INTERACTION_BAR] = this.context.enableColumnInteractionBar,\n _a[Classes.TABLE_HAS_REORDER_HANDLE] = this.props.reorderHandle != null,\n _a));\n return (React.createElement(HeaderCell, __assign({ isReorderable: this.props.enableColumnReordering, isSelected: this.props.isColumnSelected }, spreadableProps, { className: classes }),\n this.renderName(),\n this.maybeRenderContent(),\n this.props.loading ? undefined : this.props.resizeHandle));\n };\n ColumnHeaderCell.prototype.renderName = function () {\n var _a = this.props, index = _a.index, loading = _a.loading, name = _a.name, nameRenderer = _a.nameRenderer, reorderHandle = _a.reorderHandle;\n var dropdownMenu = this.maybeRenderDropdownMenu();\n var defaultName = React.createElement(\"div\", { className: Classes.TABLE_TRUNCATED_TEXT }, name);\n var nameComponent = (React.createElement(LoadableContent, { loading: loading, variableLength: true }, nameRenderer == null ? defaultName : nameRenderer(name, index)));\n if (this.context.enableColumnInteractionBar) {\n return (React.createElement(\"div\", { className: Classes.TABLE_COLUMN_NAME, title: name },\n React.createElement(\"div\", { className: Classes.TABLE_INTERACTION_BAR },\n reorderHandle,\n dropdownMenu),\n React.createElement(HorizontalCellDivider, null),\n React.createElement(\"div\", { className: Classes.TABLE_COLUMN_NAME_TEXT }, nameComponent)));\n }\n else {\n return (React.createElement(\"div\", { className: Classes.TABLE_COLUMN_NAME, title: name },\n reorderHandle,\n dropdownMenu,\n React.createElement(\"div\", { className: Classes.TABLE_COLUMN_NAME_TEXT }, nameComponent)));\n }\n };\n ColumnHeaderCell.prototype.maybeRenderContent = function () {\n if (this.props.children === null) {\n return undefined;\n }\n return React.createElement(\"div\", { className: Classes.TABLE_HEADER_CONTENT }, this.props.children);\n };\n ColumnHeaderCell.prototype.maybeRenderDropdownMenu = function () {\n var _a;\n var _b = this.props, index = _b.index, menuIcon = _b.menuIcon, menuRenderer = _b.menuRenderer;\n if (!CoreUtils.isFunction(menuRenderer)) {\n return undefined;\n }\n var classes = classNames(Classes.TABLE_TH_MENU_CONTAINER, CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT, (_a = {},\n _a[Classes.TABLE_TH_MENU_OPEN] = this.state.isActive,\n _a));\n return (React.createElement(\"div\", { className: classes },\n React.createElement(\"div\", { className: Classes.TABLE_TH_MENU_CONTAINER_BACKGROUND }),\n React.createElement(Popover, { content: menuRenderer(index), position: Position.BOTTOM, className: Classes.TABLE_TH_MENU, modifiers: { preventOverflow: { boundariesElement: \"window\" } }, onOpened: this.handlePopoverOpened, onClosing: this.handlePopoverClosing },\n React.createElement(Icon, { icon: menuIcon }))));\n };\n ColumnHeaderCell.defaultProps = {\n isActive: false,\n menuIcon: \"chevron-down\",\n };\n ColumnHeaderCell.contextTypes = columnInteractionBarContextTypes;\n ColumnHeaderCell = __decorate([\n polyfill\n ], ColumnHeaderCell);\n return ColumnHeaderCell;\n}(AbstractPureComponent2));\nexport { ColumnHeaderCell };\n//# sourceMappingURL=columnHeaderCell.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport { Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport { Utils } from \"../common/utils\";\nimport { RegionCardinality, Regions } from \"../regions\";\nimport { Draggable } from \"./draggable\";\nvar DragReorderable = /** @class */ (function (_super) {\n __extends(DragReorderable, _super);\n function DragReorderable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleActivate = function (event) {\n if (_this.shouldIgnoreMouseDown(event)) {\n return false;\n }\n var region = _this.props.locateClick(event);\n if (!Regions.isValid(region)) {\n return false;\n }\n var cardinality = Regions.getRegionCardinality(region);\n var isColumnHeader = cardinality === RegionCardinality.FULL_COLUMNS;\n var isRowHeader = cardinality === RegionCardinality.FULL_ROWS;\n if (!isColumnHeader && !isRowHeader) {\n return false;\n }\n var selectedRegions = _this.props.selectedRegions;\n var selectedRegionIndex = Regions.findContainingRegion(selectedRegions, region);\n if (selectedRegionIndex >= 0) {\n var selectedRegion = selectedRegions[selectedRegionIndex];\n if (Regions.getRegionCardinality(selectedRegion) !== cardinality) {\n // ignore FULL_TABLE selections\n return false;\n }\n // cache for easy access later in the lifecycle\n var selectedInterval = isRowHeader ? selectedRegion.rows : selectedRegion.cols;\n _this.selectedRegionStartIndex = selectedInterval[0];\n // add 1 because the selected interval is inclusive, which simple subtraction doesn't\n // account for (e.g. in a FULL_COLUMNS range from 3 to 6, 6 - 3 = 3, but the selection\n // actually includes four columns: 3, 4, 5, and 6)\n _this.selectedRegionLength = selectedInterval[1] - selectedInterval[0] + 1;\n }\n else {\n // select the new region to avoid complex and unintuitive UX w/r/t the existing selection\n _this.maybeSelectRegion(region);\n var regionRange = isRowHeader ? region.rows : region.cols;\n _this.selectedRegionStartIndex = regionRange[0];\n _this.selectedRegionLength = regionRange[1] - regionRange[0] + 1;\n }\n return true;\n };\n _this.handleDragMove = function (event, coords) {\n var oldIndex = _this.selectedRegionStartIndex;\n var guideIndex = _this.props.locateDrag(event, coords);\n var length = _this.selectedRegionLength;\n var reorderedIndex = Utils.guideIndexToReorderedIndex(oldIndex, guideIndex, length);\n _this.props.onReordering(oldIndex, reorderedIndex, length);\n };\n _this.handleDragEnd = function (event, coords) {\n var oldIndex = _this.selectedRegionStartIndex;\n var guideIndex = _this.props.locateDrag(event, coords);\n var length = _this.selectedRegionLength;\n var reorderedIndex = Utils.guideIndexToReorderedIndex(oldIndex, guideIndex, length);\n _this.props.onReordered(oldIndex, reorderedIndex, length);\n // the newly reordered region becomes the only selection\n var newRegion = _this.props.toRegion(reorderedIndex, reorderedIndex + length - 1);\n _this.maybeSelectRegion(newRegion);\n // resetting is not strictly required, but it's cleaner\n _this.selectedRegionStartIndex = undefined;\n _this.selectedRegionLength = undefined;\n };\n return _this;\n }\n DragReorderable.prototype.render = function () {\n var draggableProps = this.getDraggableProps();\n return (React.createElement(Draggable, __assign({}, draggableProps, { preventDefault: false }), this.props.children));\n };\n DragReorderable.prototype.getDraggableProps = function () {\n return this.props.onReordered == null\n ? {}\n : {\n onActivate: this.handleActivate,\n onDragEnd: this.handleDragEnd,\n onDragMove: this.handleDragMove,\n };\n };\n DragReorderable.prototype.shouldIgnoreMouseDown = function (event) {\n var disabled = this.props.disabled;\n var isDisabled = CoreUtils.isFunction(disabled) ? CoreUtils.safeInvoke(disabled, event) : disabled;\n return !Utils.isLeftClick(event) || isDisabled;\n };\n DragReorderable.prototype.maybeSelectRegion = function (region) {\n var nextSelectedRegions = [region];\n if (!CoreUtils.deepCompareKeys(nextSelectedRegions, this.props.selectedRegions)) {\n this.props.onSelection(nextSelectedRegions);\n // move the focused cell into the newly selected region\n this.props.onFocusedCell(__assign(__assign({}, Regions.getFocusCellCoordinatesFromRegion(region)), { focusSelectionIndex: 0 }));\n }\n };\n DragReorderable.defaultProps = {\n selectedRegions: [],\n };\n return DragReorderable;\n}(React.PureComponent));\nexport { DragReorderable };\n//# sourceMappingURL=reorderable.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport { AbstractPureComponent2 } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { Utils } from \"../common/index\";\nimport { Orientation, ResizeHandle } from \"./resizeHandle\";\nvar Resizable = /** @class */ (function (_super) {\n __extends(Resizable, _super);\n function Resizable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = Resizable_1.getDerivedStateFromProps(_this.props, null);\n _this.onResizeMove = function (_offset, delta) {\n _this.offsetSize(delta);\n if (_this.props.onSizeChanged != null) {\n _this.props.onSizeChanged(_this.state.size);\n }\n };\n _this.onResizeEnd = function (_offset) {\n // reset \"unclamped\" size on end\n _this.setState({ unclampedSize: _this.state.size });\n if (_this.props.onResizeEnd != null) {\n _this.props.onResizeEnd(_this.state.size);\n }\n };\n return _this;\n }\n Resizable_1 = Resizable;\n Resizable.getDerivedStateFromProps = function (_a, prevState) {\n var size = _a.size;\n if (prevState == null) {\n return {\n size: size,\n unclampedSize: size,\n };\n }\n return null;\n };\n Resizable.prototype.componentDidUpdate = function (prevProps) {\n if (prevProps.size !== this.props.size) {\n this.setState(Resizable_1.getDerivedStateFromProps(this.props, null));\n }\n };\n Resizable.prototype.render = function () {\n var child = React.Children.only(this.props.children);\n var style = __assign(__assign({}, child.props.style), this.getStyle());\n if (this.props.isResizable === false) {\n return React.cloneElement(child, { style: style });\n }\n var resizeHandle = this.renderResizeHandle();\n return React.cloneElement(child, { style: style, resizeHandle: resizeHandle });\n };\n Resizable.prototype.renderResizeHandle = function () {\n var _a = this.props, onLayoutLock = _a.onLayoutLock, onDoubleClick = _a.onDoubleClick, orientation = _a.orientation;\n return (React.createElement(ResizeHandle, { key: \"resize-handle\", onDoubleClick: onDoubleClick, onLayoutLock: onLayoutLock, onResizeEnd: this.onResizeEnd, onResizeMove: this.onResizeMove, orientation: orientation }));\n };\n /**\n * Returns the CSS style to apply to the child element given the state's\n * size value.\n */\n Resizable.prototype.getStyle = function () {\n if (this.props.orientation === Orientation.VERTICAL) {\n return {\n flexBasis: this.state.size + \"px\",\n minWidth: \"0px\",\n width: this.state.size + \"px\",\n };\n }\n else {\n return {\n flexBasis: this.state.size + \"px\",\n height: this.state.size + \"px\",\n minHeight: \"0px\",\n };\n }\n };\n Resizable.prototype.offsetSize = function (offset) {\n var unclampedSize = this.state.unclampedSize + offset;\n this.setState({\n size: Utils.clamp(unclampedSize, this.props.minSize, this.props.maxSize),\n unclampedSize: unclampedSize,\n });\n };\n var Resizable_1;\n Resizable.defaultProps = {\n isResizable: true,\n minSize: 0,\n };\n Resizable = Resizable_1 = __decorate([\n polyfill\n ], Resizable);\n return Resizable;\n}(AbstractPureComponent2));\nexport { Resizable };\n//# sourceMappingURL=resizable.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns `true` if `navigator.platform` matches a known Mac platform, or\n * `false` otherwise.\n */\nexport function isMac(platformOverride) {\n var platformActual = typeof navigator !== \"undefined\" ? navigator.platform : undefined;\n var platform = platformOverride != null ? platformOverride : platformActual;\n return platform == null ? false : /Mac|iPod|iPhone|iPad/.test(platform);\n}\n/**\n * Returns `true` if (1) the platform is Mac and the keypress includes the `cmd`\n * key, or (2) the platform is non-Mac and the keypress includes the `ctrl` key.\n */\nexport var isModKeyPressed = function (event, platformOverride) {\n var isMacPlatform = isMac(platformOverride);\n return (isMacPlatform && event.metaKey) || (!isMacPlatform && event.ctrlKey);\n};\n//# sourceMappingURL=platformUtils.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport { Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport * as FocusedCellUtils from \"../common/internal/focusedCellUtils\";\nimport * as PlatformUtils from \"../common/internal/platformUtils\";\nimport { Utils } from \"../common/utils\";\nimport { Regions } from \"../regions\";\nimport { DragEvents } from \"./dragEvents\";\nimport { Draggable } from \"./draggable\";\nvar DragSelectable = /** @class */ (function (_super) {\n __extends(DragSelectable, _super);\n function DragSelectable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.didExpandSelectionOnActivate = false;\n _this.handleActivate = function (event) {\n var _a = _this.props, locateClick = _a.locateClick, selectedRegions = _a.selectedRegions, selectedRegionTransform = _a.selectedRegionTransform;\n if (_this.shouldIgnoreMouseDown(event)) {\n return false;\n }\n var region = locateClick(event);\n if (!Regions.isValid(region)) {\n return false;\n }\n if (selectedRegionTransform != null) {\n region = selectedRegionTransform(region, event);\n }\n var foundIndex = Regions.findMatchingRegion(selectedRegions, region);\n var matchesExistingSelection = foundIndex !== -1;\n if (matchesExistingSelection && DragEvents.isAdditive(event)) {\n _this.handleClearSelectionAtIndex(foundIndex);\n // if we just deselected a selected region, a subsequent drag-move\n // could reselect it again and *also* clear other selections. that's\n // quite unintuitive, so ignore subsequent drag-move's.\n return false;\n }\n // we want to listen to subsequent drag-move's in all following cases,\n // so this mousedown can be the start of a new selection if desired.\n if (matchesExistingSelection) {\n _this.handleClearAllSelectionsNotAtIndex(foundIndex);\n }\n else if (_this.shouldExpandSelection(event)) {\n _this.handleExpandSelection(region);\n }\n else if (_this.shouldAddDisjointSelection(event)) {\n _this.handleAddDisjointSelection(region);\n }\n else {\n _this.handleReplaceSelection(region);\n }\n return true;\n };\n _this.handleDragMove = function (event, coords) {\n var _a = _this.props, enableMultipleSelection = _a.enableMultipleSelection, focusedCell = _a.focusedCell, locateClick = _a.locateClick, locateDrag = _a.locateDrag, selectedRegions = _a.selectedRegions, selectedRegionTransform = _a.selectedRegionTransform;\n var region = enableMultipleSelection\n ? locateDrag(event, coords, /* returnEndOnly? */ _this.didExpandSelectionOnActivate)\n : locateClick(event);\n if (!Regions.isValid(region)) {\n return;\n }\n else if (selectedRegionTransform != null) {\n region = selectedRegionTransform(region, event, coords);\n }\n var nextSelectedRegions = _this.didExpandSelectionOnActivate\n ? _this.expandSelectedRegions(selectedRegions, region, focusedCell)\n : Regions.update(selectedRegions, region);\n _this.maybeInvokeSelectionCallback(nextSelectedRegions);\n if (!enableMultipleSelection) {\n // move the focused cell with the selected region\n var lastIndex = nextSelectedRegions.length - 1;\n var mostRecentRegion = nextSelectedRegions[lastIndex];\n _this.invokeOnFocusCallbackForRegion(mostRecentRegion, lastIndex);\n }\n };\n _this.handleDragEnd = function () {\n _this.finishInteraction();\n };\n _this.handleClick = function () {\n _this.finishInteraction();\n };\n // Boolean checks\n // ==============\n _this.shouldExpandSelection = function (event) {\n var enableMultipleSelection = _this.props.enableMultipleSelection;\n return enableMultipleSelection && event.shiftKey;\n };\n _this.shouldAddDisjointSelection = function (event) {\n var enableMultipleSelection = _this.props.enableMultipleSelection;\n return enableMultipleSelection && DragEvents.isAdditive(event);\n };\n // Update logic\n // ============\n _this.handleClearSelectionAtIndex = function (selectedRegionIndex) {\n var selectedRegions = _this.props.selectedRegions;\n // remove just the clicked region, leaving other selected regions in place\n var nextSelectedRegions = selectedRegions.slice();\n nextSelectedRegions.splice(selectedRegionIndex, 1);\n _this.maybeInvokeSelectionCallback(nextSelectedRegions);\n // if there are still any selections, move the focused cell to the\n // most recent selection. otherwise, don't update it.\n if (nextSelectedRegions.length > 0) {\n var lastIndex = nextSelectedRegions.length - 1;\n _this.invokeOnFocusCallbackForRegion(nextSelectedRegions[lastIndex], lastIndex);\n }\n };\n _this.handleClearAllSelectionsNotAtIndex = function (selectedRegionIndex) {\n var selectedRegions = _this.props.selectedRegions;\n var nextSelectedRegion = selectedRegions[selectedRegionIndex];\n _this.maybeInvokeSelectionCallback([nextSelectedRegion]);\n _this.invokeOnFocusCallbackForRegion(nextSelectedRegion, 0);\n };\n _this.handleExpandSelection = function (region) {\n var _a = _this.props, focusedCell = _a.focusedCell, selectedRegions = _a.selectedRegions;\n _this.didExpandSelectionOnActivate = true;\n // there should be only one selected region after expanding. do not\n // update the focused cell.\n var nextSelectedRegions = _this.expandSelectedRegions(selectedRegions, region, focusedCell);\n _this.maybeInvokeSelectionCallback(nextSelectedRegions);\n // move the focused cell into the new region if there were no selections before\n if (selectedRegions == null || selectedRegions.length === 0) {\n _this.invokeOnFocusCallbackForRegion(region);\n }\n };\n _this.handleAddDisjointSelection = function (region) {\n var selectedRegions = _this.props.selectedRegions;\n // add the new region to the existing selections\n var nextSelectedRegions = Regions.add(selectedRegions, region);\n _this.maybeInvokeSelectionCallback(nextSelectedRegions);\n // put the focused cell in the new region\n _this.invokeOnFocusCallbackForRegion(region, nextSelectedRegions.length - 1);\n };\n _this.handleReplaceSelection = function (region) {\n // clear all selections and retain only the new one\n var nextSelectedRegions = [region];\n _this.maybeInvokeSelectionCallback(nextSelectedRegions);\n // move the focused cell into the new selection\n _this.invokeOnFocusCallbackForRegion(region);\n };\n _this.invokeOnFocusCallbackForRegion = function (focusRegion, focusSelectionIndex) {\n if (focusSelectionIndex === void 0) { focusSelectionIndex = 0; }\n var onFocusedCell = _this.props.onFocusedCell;\n var focusedCellCoords = Regions.getFocusCellCoordinatesFromRegion(focusRegion);\n onFocusedCell(FocusedCellUtils.toFullCoordinates(focusedCellCoords, focusSelectionIndex));\n };\n // Other\n // =====\n _this.finishInteraction = function () {\n CoreUtils.safeInvoke(_this.props.onSelectionEnd, _this.props.selectedRegions);\n _this.didExpandSelectionOnActivate = false;\n _this.lastEmittedSelectedRegions = null;\n };\n return _this;\n }\n DragSelectable.prototype.render = function () {\n var draggableProps = this.getDraggableProps();\n return (React.createElement(Draggable, __assign({}, draggableProps, { preventDefault: false }), this.props.children));\n };\n DragSelectable.prototype.getDraggableProps = function () {\n return this.props.onSelection == null\n ? {}\n : {\n onActivate: this.handleActivate,\n onClick: this.handleClick,\n onDragEnd: this.handleDragEnd,\n onDragMove: this.handleDragMove,\n };\n };\n DragSelectable.prototype.shouldIgnoreMouseDown = function (event) {\n var _a = this.props, disabled = _a.disabled, _b = _a.ignoredSelectors, ignoredSelectors = _b === void 0 ? [] : _b;\n var element = event.target;\n var isLeftClick = Utils.isLeftClick(event);\n var isContextMenuTrigger = isLeftClick && event.ctrlKey && PlatformUtils.isMac();\n var isDisabled = CoreUtils.safeInvokeOrValue(disabled, event);\n return (!isLeftClick ||\n isContextMenuTrigger ||\n isDisabled ||\n ignoredSelectors.some(function (selector) { return element.closest(selector) != null; }));\n };\n // Callbacks\n // =========\n DragSelectable.prototype.maybeInvokeSelectionCallback = function (nextSelectedRegions) {\n var onSelection = this.props.onSelection;\n // invoke only if the selection changed. this is useful only on\n // mousemove; there's special handling for mousedown interactions that\n // target an already-selected region.\n if (this.lastEmittedSelectedRegions == null ||\n !CoreUtils.deepCompareKeys(this.lastEmittedSelectedRegions, nextSelectedRegions)) {\n onSelection(nextSelectedRegions);\n this.lastEmittedSelectedRegions = nextSelectedRegions;\n }\n };\n /**\n * Expands the last-selected region to the new region, and replaces the\n * last-selected region with the expanded region. If a focused cell is provided,\n * the focused cell will serve as an anchor for the expansion.\n */\n DragSelectable.prototype.expandSelectedRegions = function (regions, region, focusedCell) {\n if (regions.length === 0) {\n return [region];\n }\n else if (focusedCell != null) {\n var expandedRegion = FocusedCellUtils.expandFocusedRegion(focusedCell, region);\n return Regions.update(regions, expandedRegion);\n }\n else {\n var expandedRegion = Regions.expandRegion(regions[regions.length - 1], region);\n return Regions.update(regions, expandedRegion);\n }\n };\n DragSelectable.defaultProps = {\n disabled: false,\n enableMultipleSelection: false,\n selectedRegions: [],\n };\n return DragSelectable;\n}(React.PureComponent));\nexport { DragSelectable };\n//# sourceMappingURL=selectable.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { Icon, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT } from \"../common/utils\";\nimport { DragEvents } from \"../interactions/dragEvents\";\nimport { DragReorderable } from \"../interactions/reorderable\";\nimport { Resizable } from \"../interactions/resizable\";\nimport { DragSelectable } from \"../interactions/selectable\";\nimport { RegionCardinality, Regions } from \"../regions\";\nvar SHALLOW_COMPARE_PROP_KEYS_DENYLIST = [\"focusedCell\", \"selectedRegions\"];\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header(props, context) {\n var _this = _super.call(this, props, context) || this;\n _this.convertEventToIndex = function (event) {\n var coord = _this.props.getMouseCoordinate(event);\n return _this.props.convertPointToIndex(coord);\n };\n _this.locateClick = function (event) {\n _this.activationIndex = _this.convertEventToIndex(event);\n return _this.props.toRegion(_this.activationIndex);\n };\n _this.locateDragForSelection = function (_event, coords, returnEndOnly) {\n if (returnEndOnly === void 0) { returnEndOnly = false; }\n var coord = _this.props.getDragCoordinate(coords.current);\n var indexStart = _this.activationIndex;\n var indexEnd = _this.props.convertPointToIndex(coord);\n return returnEndOnly ? _this.props.toRegion(indexEnd) : _this.props.toRegion(indexStart, indexEnd);\n };\n _this.locateDragForReordering = function (_event, coords) {\n var coord = _this.props.getDragCoordinate(coords.current);\n var guideIndex = _this.props.convertPointToIndex(coord, true);\n return guideIndex < 0 ? undefined : guideIndex;\n };\n _this.renderCells = function () {\n var _a = _this.props, indexStart = _a.indexStart, indexEnd = _a.indexEnd;\n var cells = [];\n for (var index = indexStart; index <= indexEnd; index++) {\n cells.push(_this.renderNewCell(index));\n }\n return cells;\n };\n _this.renderNewCell = function (index) {\n var extremaClasses = _this.props.getCellExtremaClasses(index, _this.props.indexEnd);\n var renderer = _this.props.isGhostIndex(index) ? _this.props.ghostCellRenderer : _this.renderCell;\n return renderer(index, extremaClasses);\n };\n _this.renderCell = function (index, extremaClasses) {\n var _a, _b;\n var _c = _this.props, getIndexClass = _c.getIndexClass, selectedRegions = _c.selectedRegions;\n var cell = _this.props.headerCellRenderer(index);\n if (cell == null) {\n return null;\n }\n var isLoading = cell.props.loading != null ? cell.props.loading : _this.props.loading;\n var isSelected = _this.props.isCellSelected(index);\n var isEntireCellTargetReorderable = _this.isEntireCellTargetReorderable(index);\n var className = classNames(extremaClasses, (_a = {},\n _a[Classes.TABLE_HEADER_REORDERABLE] = isEntireCellTargetReorderable,\n _a), _this.props.getCellIndexClass(index), cell.props.className);\n var cellProps = (_b = {\n className: className,\n index: index\n },\n _b[_this.props.headerCellIsSelectedPropName] = isSelected,\n _b[_this.props.headerCellIsReorderablePropName] = isEntireCellTargetReorderable,\n _b.loading = isLoading,\n _b.reorderHandle = _this.maybeRenderReorderHandle(index),\n _b);\n var modifiedHandleSizeChanged = function (size) { return _this.props.handleSizeChanged(index, size); };\n var modifiedHandleResizeEnd = function (size) { return _this.props.handleResizeEnd(index, size); };\n var modifiedHandleResizeHandleDoubleClick = function () {\n return CoreUtils.safeInvoke(_this.props.handleResizeDoubleClick, index);\n };\n var baseChildren = (React.createElement(DragSelectable, { enableMultipleSelection: _this.props.enableMultipleSelection, disabled: _this.isDragSelectableDisabled, focusedCell: _this.props.focusedCell, ignoredSelectors: [\".\" + Classes.TABLE_REORDER_HANDLE_TARGET], key: getIndexClass(index), locateClick: _this.locateClick, locateDrag: _this.locateDragForSelection, onFocusedCell: _this.props.onFocusedCell, onSelection: _this.handleDragSelectableSelection, onSelectionEnd: _this.handleDragSelectableSelectionEnd, selectedRegions: selectedRegions, selectedRegionTransform: _this.props.selectedRegionTransform },\n React.createElement(Resizable, { isResizable: _this.props.isResizable, maxSize: _this.props.maxSize, minSize: _this.props.minSize, onDoubleClick: modifiedHandleResizeHandleDoubleClick, onLayoutLock: _this.props.onLayoutLock, onResizeEnd: modifiedHandleResizeEnd, onSizeChanged: modifiedHandleSizeChanged, orientation: _this.props.resizeOrientation, size: _this.props.getCellSize(index) }, React.cloneElement(cell, cellProps))));\n return _this.isReorderHandleEnabled()\n ? baseChildren // reordering will be handled by interacting with the reorder handle\n : _this.wrapInDragReorderable(index, baseChildren, _this.isDragReorderableDisabled);\n };\n _this.handleDragSelectableSelection = function (selectedRegions) {\n _this.props.onSelection(selectedRegions);\n _this.setState({ hasValidSelection: false });\n };\n _this.handleDragSelectableSelectionEnd = function () {\n _this.activationIndex = null; // not strictly required, but good practice\n _this.setState({ hasValidSelection: true });\n };\n _this.isDragSelectableDisabled = function (event) {\n if (DragEvents.isAdditive(event)) {\n // if the meta/ctrl key was pressed, we want to forcefully ignore\n // reordering interactions and prioritize drag-selection\n // interactions (e.g. to make it possible to deselect a row).\n return false;\n }\n var cellIndex = _this.convertEventToIndex(event);\n return _this.isEntireCellTargetReorderable(cellIndex);\n };\n _this.isDragReorderableDisabled = function (event) {\n var isSelectionEnabled = !_this.isDragSelectableDisabled(event);\n if (isSelectionEnabled) {\n // if drag-selection is enabled, we don't want drag-reordering\n // interactions to compete. otherwise, a mouse-drag might both expand a\n // selection and reorder the same selection simultaneously - confusing!\n return true;\n }\n var cellIndex = _this.convertEventToIndex(event);\n return !_this.isEntireCellTargetReorderable(cellIndex);\n };\n _this.isEntireCellTargetReorderable = function (index) {\n var selectedRegions = _this.props.selectedRegions;\n // although reordering may be generally enabled for this row/column (via props.isReorderable), the\n // row/column shouldn't actually become reorderable from a user perspective until a few other\n // conditions are true:\n return (_this.props.isReorderable &&\n // the row/column should be the only selection (or it should be part of the only selection),\n // because reordering multiple disjoint row/column selections is a UX morass with no clear best\n // behavior.\n _this.props.isCellSelected(index) &&\n _this.state.hasValidSelection &&\n Regions.getRegionCardinality(selectedRegions[0]) === _this.props.fullRegionCardinality &&\n // selected regions can be updated during mousedown+drag and before mouseup; thus, we\n // add a final check to make sure we don't enable reordering until the selection\n // interaction is complete. this prevents one click+drag interaction from triggering\n // both selection and reordering behavior.\n selectedRegions.length === 1 &&\n // columns are reordered via a reorder handle, so drag-selection needn't be disabled\n !_this.isReorderHandleEnabled());\n };\n _this.state = { hasValidSelection: _this.isSelectedRegionsControlledAndNonEmpty(props) };\n return _this;\n }\n Header.prototype.componentDidUpdate = function (_, prevState) {\n var nextHasValidSection = this.isSelectedRegionsControlledAndNonEmpty(this.props);\n if (prevState.hasValidSelection !== nextHasValidSection) {\n this.setState({ hasValidSelection: nextHasValidSection });\n }\n };\n Header.prototype.shouldComponentUpdate = function (nextProps, nextState) {\n return (!CoreUtils.shallowCompareKeys(this.state, nextState) ||\n !CoreUtils.shallowCompareKeys(this.props, nextProps, {\n exclude: SHALLOW_COMPARE_PROP_KEYS_DENYLIST,\n }) ||\n !CoreUtils.deepCompareKeys(this.props, nextProps, SHALLOW_COMPARE_PROP_KEYS_DENYLIST));\n };\n Header.prototype.render = function () {\n return this.props.wrapCells(this.renderCells());\n };\n Header.prototype.isSelectedRegionsControlledAndNonEmpty = function (props) {\n if (props === void 0) { props = this.props; }\n return props.selectedRegions != null && props.selectedRegions.length > 0;\n };\n Header.prototype.isReorderHandleEnabled = function () {\n // the reorder handle can only appear in the column interaction bar\n return this.isColumnHeader() && this.props.isReorderable;\n };\n Header.prototype.maybeRenderReorderHandle = function (index) {\n return !this.isReorderHandleEnabled()\n ? undefined\n : this.wrapInDragReorderable(index, React.createElement(\"div\", { className: Classes.TABLE_REORDER_HANDLE_TARGET },\n React.createElement(\"div\", { className: classNames(Classes.TABLE_REORDER_HANDLE, CLASSNAME_EXCLUDED_FROM_TEXT_MEASUREMENT) },\n React.createElement(Icon, { icon: \"drag-handle-vertical\" }))), false);\n };\n Header.prototype.isColumnHeader = function () {\n return this.props.fullRegionCardinality === RegionCardinality.FULL_COLUMNS;\n };\n Header.prototype.wrapInDragReorderable = function (index, children, disabled) {\n return (React.createElement(DragReorderable, { disabled: disabled, key: this.props.getIndexClass(index), locateClick: this.locateClick, locateDrag: this.locateDragForReordering, onReordered: this.props.onReordered, onReordering: this.props.onReordering, onSelection: this.props.onSelection, onFocusedCell: this.props.onFocusedCell, selectedRegions: this.props.selectedRegions, toRegion: this.props.toRegion }, children));\n };\n return Header;\n}(React.Component));\nexport { Header };\n//# sourceMappingURL=header.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { Utils } from \"../common/index\";\nimport { Orientation } from \"../interactions/resizeHandle\";\nimport { RegionCardinality, Regions } from \"../regions\";\nimport { ColumnHeaderCell } from \"./columnHeaderCell\";\nimport { Header } from \"./header\";\nvar ColumnHeader = /** @class */ (function (_super) {\n __extends(ColumnHeader, _super);\n function ColumnHeader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.wrapCells = function (cells) {\n var _a = _this.props, columnIndexStart = _a.columnIndexStart, grid = _a.grid;\n var tableWidth = grid.getRect().width;\n var scrollLeftCorrection = _this.props.grid.getCumulativeWidthBefore(columnIndexStart);\n var style = {\n // only header cells in view will render, but we need to reposition them to stay in view\n // as we scroll horizontally.\n transform: \"translateX(\" + (scrollLeftCorrection || 0) + \"px)\",\n // reduce the width to clamp the sliding window as we approach the final headers; otherwise,\n // we'll have tons of useless whitespace at the end.\n width: tableWidth - scrollLeftCorrection,\n };\n var classes = classNames(Classes.TABLE_THEAD, Classes.TABLE_COLUMN_HEADER_TR);\n // add a wrapper set to the full-table width to ensure container styles stretch from the first\n // cell all the way to the last\n return (React.createElement(\"div\", { style: { width: tableWidth } },\n React.createElement(\"div\", { style: style, className: classes, ref: _this.props.measurableElementRef }, cells)));\n };\n _this.convertPointToColumn = function (clientXOrY, useMidpoint) {\n var locator = _this.props.locator;\n return locator != null ? locator.convertPointToColumn(clientXOrY, useMidpoint) : null;\n };\n _this.getCellExtremaClasses = function (index, indexEnd) {\n return _this.props.grid.getExtremaClasses(0, index, 1, indexEnd);\n };\n _this.getColumnWidth = function (index) {\n return _this.props.grid.getColumnRect(index).width;\n };\n _this.getDragCoordinate = function (clientCoords) {\n return clientCoords[0]; // x-coordinate\n };\n _this.getMouseCoordinate = function (event) {\n return event.clientX;\n };\n _this.handleResizeEnd = function (index, size) {\n _this.props.onResizeGuide(null);\n _this.props.onColumnWidthChanged(index, size);\n };\n _this.handleResizeDoubleClick = function (index) {\n var _a = _this.props, minColumnWidth = _a.minColumnWidth, maxColumnWidth = _a.maxColumnWidth;\n var width = _this.props.locator.getWidestVisibleCellInColumn(index);\n var clampedWidth = Utils.clamp(width, minColumnWidth, maxColumnWidth);\n _this.props.onResizeGuide(null);\n _this.props.onColumnWidthChanged(index, clampedWidth);\n };\n _this.handleSizeChanged = function (index, size) {\n var rect = _this.props.grid.getColumnRect(index);\n _this.props.onResizeGuide([rect.left + size]);\n };\n _this.isCellSelected = function (index) {\n return Regions.hasFullColumn(_this.props.selectedRegions, index);\n };\n _this.isGhostIndex = function (index) {\n return _this.props.grid.isGhostIndex(-1, index);\n };\n _this.renderGhostCell = function (index, extremaClasses) {\n var _a = _this.props, grid = _a.grid, loading = _a.loading;\n var rect = grid.getGhostCellRect(0, index);\n var style = {\n flexBasis: rect.width + \"px\",\n width: rect.width + \"px\",\n };\n return (React.createElement(ColumnHeaderCell, { className: classNames(extremaClasses), index: index, key: Classes.columnIndexClass(index), loading: loading, style: style }));\n };\n _this.toRegion = function (index1, index2) {\n return Regions.column(index1, index2);\n };\n return _this;\n }\n ColumnHeader.prototype.render = function () {\n var _a = this.props, \n // from IColumnHeaderProps\n renderHeaderCell = _a.cellRenderer, onColumnWidthChanged = _a.onColumnWidthChanged, \n // from IColumnWidths\n minSize = _a.minColumnWidth, maxSize = _a.maxColumnWidth, defaultColumnWidth = _a.defaultColumnWidth, \n // from IColumnIndices\n indexStart = _a.columnIndexStart, indexEnd = _a.columnIndexEnd, \n // from IHeaderProps\n spreadableProps = __rest(_a, [\"cellRenderer\", \"onColumnWidthChanged\", \"minColumnWidth\", \"maxColumnWidth\", \"defaultColumnWidth\", \"columnIndexStart\", \"columnIndexEnd\"]);\n return (React.createElement(Header, __assign({ convertPointToIndex: this.convertPointToColumn, fullRegionCardinality: RegionCardinality.FULL_COLUMNS, getCellExtremaClasses: this.getCellExtremaClasses, getCellIndexClass: Classes.columnCellIndexClass, getCellSize: this.getColumnWidth, getDragCoordinate: this.getDragCoordinate, getIndexClass: Classes.columnIndexClass, getMouseCoordinate: this.getMouseCoordinate, ghostCellRenderer: this.renderGhostCell, handleResizeDoubleClick: this.handleResizeDoubleClick, handleResizeEnd: this.handleResizeEnd, handleSizeChanged: this.handleSizeChanged, headerCellIsReorderablePropName: \"enableColumnReordering\", headerCellIsSelectedPropName: \"isColumnSelected\", headerCellRenderer: renderHeaderCell, indexEnd: indexEnd, indexStart: indexStart, isCellSelected: this.isCellSelected, isGhostIndex: this.isGhostIndex, maxSize: maxSize, minSize: minSize, resizeOrientation: Orientation.VERTICAL, selectedRegions: [], toRegion: this.toRegion, wrapCells: this.wrapCells }, spreadableProps)));\n };\n ColumnHeader.defaultProps = {\n isReorderable: false,\n isResizable: true,\n loading: false,\n };\n return ColumnHeader;\n}(React.Component));\nexport { ColumnHeader };\n//# sourceMappingURL=columnHeader.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractPureComponent2 } from \"@blueprintjs/core\";\nimport * as Classes from \"../common/classes\";\nimport { LoadableContent } from \"../common/loadableContent\";\nimport { HeaderCell } from \"./headerCell\";\nvar RowHeaderCell = /** @class */ (function (_super) {\n __extends(RowHeaderCell, _super);\n function RowHeaderCell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RowHeaderCell.prototype.render = function () {\n var _a = this.props, \n // from IRowHeaderCellProps\n enableRowReordering = _a.enableRowReordering, isRowSelected = _a.isRowSelected, name = _a.name, nameRenderer = _a.nameRenderer, \n // from IHeaderProps\n spreadableProps = __rest(_a, [\"enableRowReordering\", \"isRowSelected\", \"name\", \"nameRenderer\"]);\n var defaultName = React.createElement(\"div\", { className: Classes.TABLE_ROW_NAME_TEXT }, name);\n var nameComponent = (React.createElement(LoadableContent, { loading: spreadableProps.loading }, nameRenderer == null ? defaultName : nameRenderer(name, spreadableProps.index)));\n return (React.createElement(HeaderCell, __assign({ isReorderable: this.props.enableRowReordering, isSelected: this.props.isRowSelected }, spreadableProps),\n React.createElement(\"div\", { className: Classes.TABLE_ROW_NAME }, nameComponent),\n this.props.children,\n spreadableProps.loading ? undefined : spreadableProps.resizeHandle));\n };\n RowHeaderCell = __decorate([\n polyfill\n ], RowHeaderCell);\n return RowHeaderCell;\n}(AbstractPureComponent2));\nexport { RowHeaderCell };\n//# sourceMappingURL=rowHeaderCell.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { Orientation } from \"../interactions/resizeHandle\";\nimport { RegionCardinality, Regions } from \"../regions\";\nimport { Header } from \"./header\";\nimport { RowHeaderCell } from \"./rowHeaderCell\";\nvar RowHeader = /** @class */ (function (_super) {\n __extends(RowHeader, _super);\n function RowHeader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.wrapCells = function (cells) {\n var _a = _this.props, rowIndexStart = _a.rowIndexStart, grid = _a.grid;\n var tableHeight = grid.getRect().height;\n var scrollTopCorrection = _this.props.grid.getCumulativeHeightBefore(rowIndexStart);\n var style = {\n // reduce the height to clamp the sliding window as we approach the final headers; otherwise,\n // we'll have tons of useless whitespace at the end.\n height: tableHeight - scrollTopCorrection,\n // only header cells in view will render, but we need to reposition them to stay in view\n // as we scroll vertically.\n transform: \"translateY(\" + (scrollTopCorrection || 0) + \"px)\",\n };\n // add a wrapper set to the full-table height to ensure container styles stretch from the first\n // cell all the way to the last\n return (React.createElement(\"div\", { style: { height: tableHeight } },\n React.createElement(\"div\", { className: Classes.TABLE_ROW_HEADERS_CELLS_CONTAINER, style: style }, cells)));\n };\n _this.convertPointToRow = function (clientXOrY, useMidpoint) {\n var locator = _this.props.locator;\n return locator != null ? locator.convertPointToRow(clientXOrY, useMidpoint) : null;\n };\n _this.getCellExtremaClasses = function (index, indexEnd) {\n return _this.props.grid.getExtremaClasses(index, 0, indexEnd, 1);\n };\n _this.getRowHeight = function (index) {\n return _this.props.grid.getRowRect(index).height;\n };\n _this.getDragCoordinate = function (clientCoords) {\n return clientCoords[1]; // y-coordinate\n };\n _this.getMouseCoordinate = function (event) {\n return event.clientY;\n };\n _this.handleResizeEnd = function (index, size) {\n _this.props.onResizeGuide(null);\n _this.props.onRowHeightChanged(index, size);\n };\n _this.handleSizeChanged = function (index, size) {\n var rect = _this.props.grid.getRowRect(index);\n _this.props.onResizeGuide([rect.top + size]);\n };\n _this.isCellSelected = function (index) {\n return Regions.hasFullRow(_this.props.selectedRegions, index);\n };\n _this.isGhostIndex = function (index) {\n return _this.props.grid.isGhostIndex(index, -1);\n };\n _this.renderGhostCell = function (index, extremaClasses) {\n var rect = _this.props.grid.getGhostCellRect(index, 0);\n return (React.createElement(RowHeaderCell, { className: classNames(extremaClasses), index: index, key: Classes.rowIndexClass(index), loading: _this.props.loading, style: { height: rect.height + \"px\" } }));\n };\n _this.toRegion = function (index1, index2) {\n // the `this` value is messed up for Regions.row, so we have to have a wrapper function here\n return Regions.row(index1, index2);\n };\n return _this;\n }\n RowHeader.prototype.render = function () {\n var _a = this.props, \n // from IRowHeaderProps\n onRowHeightChanged = _a.onRowHeightChanged, renderHeaderCell = _a.rowHeaderCellRenderer, \n // from IRowHeights\n minSize = _a.minRowHeight, maxSize = _a.maxRowHeight, defaultRowHeight = _a.defaultRowHeight, \n // from IRowIndices\n indexStart = _a.rowIndexStart, indexEnd = _a.rowIndexEnd, \n // from IHeaderProps\n spreadableProps = __rest(_a, [\"onRowHeightChanged\", \"rowHeaderCellRenderer\", \"minRowHeight\", \"maxRowHeight\", \"defaultRowHeight\", \"rowIndexStart\", \"rowIndexEnd\"]);\n return (React.createElement(Header, __assign({ convertPointToIndex: this.convertPointToRow, fullRegionCardinality: RegionCardinality.FULL_ROWS, getCellExtremaClasses: this.getCellExtremaClasses, getCellIndexClass: Classes.rowCellIndexClass, getCellSize: this.getRowHeight, getDragCoordinate: this.getDragCoordinate, getIndexClass: Classes.rowIndexClass, getMouseCoordinate: this.getMouseCoordinate, ghostCellRenderer: this.renderGhostCell, handleResizeEnd: this.handleResizeEnd, handleSizeChanged: this.handleSizeChanged, headerCellIsReorderablePropName: \"enableRowReordering\", headerCellIsSelectedPropName: \"isRowSelected\", headerCellRenderer: renderHeaderCell, indexEnd: indexEnd, indexStart: indexStart, isCellSelected: this.isCellSelected, isGhostIndex: this.isGhostIndex, maxSize: maxSize, minSize: minSize, resizeOrientation: Orientation.HORIZONTAL, selectedRegions: [], toRegion: this.toRegion, wrapCells: this.wrapCells }, spreadableProps)));\n };\n RowHeader.defaultProps = {\n rowHeaderCellRenderer: renderDefaultRowHeader,\n };\n return RowHeader;\n}(React.Component));\nexport { RowHeader };\n/**\n * A default implementation of `IRowHeaderRenderer` that displays 1-indexed\n * numbers for each row.\n */\nexport function renderDefaultRowHeader(rowIndex) {\n return React.createElement(RowHeaderCell, { index: rowIndex, name: \"\" + (rowIndex + 1) });\n}\n//# sourceMappingURL=rowHeader.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as Classes from \"../common/classes\";\n/**\n * Efficiently detect when an HTMLElement is resized.\n *\n * Attaches an invisible \"resize-sensor\" div to the element. Then it checks\n * the element's offsetWidth and offsetHeight whenever a scroll event is\n * triggered on the \"resize-sensor\" children. These events are further\n * debounced using requestAnimationFrame.\n *\n * Inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\nvar ResizeSensor = /** @class */ (function () {\n function ResizeSensor() {\n }\n ResizeSensor.attach = function (element, callback) {\n var lifecycle = ResizeSensor.debounce(callback);\n var resizeSensor = document.createElement(\"div\");\n resizeSensor.className = Classes.TABLE_RESIZE_SENSOR;\n resizeSensor.style.cssText = ResizeSensor.RESIZE_SENSOR_STYLE;\n resizeSensor.innerHTML = ResizeSensor.RESIZE_SENSOR_HTML;\n element.appendChild(resizeSensor);\n if (getComputedStyle(element, null).getPropertyValue(\"position\") === \"static\") {\n element.style.position = \"relative\";\n }\n var expand = resizeSensor.childNodes[0];\n var expandChild = expand.childNodes[0];\n var shrink = resizeSensor.childNodes[1];\n var reset = function () {\n expandChild.style.width = \"100000px\";\n expandChild.style.height = \"100000px\";\n expand.scrollLeft = 100000;\n expand.scrollTop = 100000;\n shrink.scrollLeft = 100000;\n shrink.scrollTop = 100000;\n };\n reset();\n var lastWidth;\n var lastHeight;\n var onScroll = function () {\n var currentWidth = element.offsetWidth;\n var currentHeight = element.offsetHeight;\n if (currentWidth !== lastWidth || currentHeight !== lastHeight) {\n lastWidth = currentWidth;\n lastHeight = currentHeight;\n lifecycle.trigger();\n }\n reset();\n };\n expand.addEventListener(\"scroll\", onScroll);\n shrink.addEventListener(\"scroll\", onScroll);\n return function () {\n element.removeChild(resizeSensor);\n lifecycle.cancelled = true;\n };\n };\n ResizeSensor.debounce = function (callback) {\n var scope = {\n cancelled: false,\n trigger: function () {\n if (scope.triggered || scope.cancelled) {\n return;\n }\n scope.triggered = true;\n requestAnimationFrame(function () {\n scope.triggered = false;\n if (!scope.cancelled) {\n callback();\n }\n });\n },\n triggered: false,\n };\n return scope;\n };\n ResizeSensor.RESIZE_SENSOR_STYLE = \"position: absolute; left: 0; top: 0; right: 0; \" +\n \"bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;\";\n ResizeSensor.RESIZE_SENSOR_HTML = \"<div class=\\\"\" + Classes.TABLE_RESIZE_SENSOR_EXPAND + \"\\\"\\n style=\\\"\" + ResizeSensor.RESIZE_SENSOR_STYLE + \"\\\"><div style=\\\"position: absolute; left: 0; top: 0; transition: 0s;\\\"\\n ></div></div><div class=\\\"\" + Classes.TABLE_RESIZE_SENSOR_SHRINK + \"\\\" style=\\\"\" + ResizeSensor.RESIZE_SENSOR_STYLE + \"\\\"\\n ><div style=\\\"position: absolute; left: 0; top: 0; transition: 0s; width: 200%; height: 200%;\\\"></div></div>\";\n return ResizeSensor;\n}());\nexport { ResizeSensor };\n//# sourceMappingURL=resizeSensor.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { AbstractComponent2, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as Classes from \"../common/classes\";\nimport * as Errors from \"../common/errors\";\nexport var QuadrantType;\n(function (QuadrantType) {\n /**\n * The main quadrant beneath any frozen rows or columns.\n */\n QuadrantType[\"MAIN\"] = \"main\";\n /**\n * The top quadrant, containing column headers and frozen rows.\n */\n QuadrantType[\"TOP\"] = \"top\";\n /**\n * The left quadrant, containing row headers and frozen columns.\n */\n QuadrantType[\"LEFT\"] = \"left\";\n /**\n * The top-left quadrant, containing the headers and cells common to both\n * the frozen columns and frozen rows.\n */\n QuadrantType[\"TOP_LEFT\"] = \"top-left\";\n})(QuadrantType || (QuadrantType = {}));\nvar TableQuadrant = /** @class */ (function (_super) {\n __extends(TableQuadrant, _super);\n function TableQuadrant() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TableQuadrant.prototype.render = function () {\n var _a = this.props, grid = _a.grid, enableRowHeader = _a.enableRowHeader, quadrantType = _a.quadrantType, bodyRenderer = _a.bodyRenderer;\n var showFrozenRowsOnly = quadrantType === QuadrantType.TOP || quadrantType === QuadrantType.TOP_LEFT;\n var showFrozenColumnsOnly = quadrantType === QuadrantType.LEFT || quadrantType === QuadrantType.TOP_LEFT;\n var className = classNames(Classes.TABLE_QUADRANT, this.getQuadrantCssClass(), this.props.className);\n var maybeMenu = enableRowHeader && CoreUtils.safeInvoke(this.props.menuRenderer);\n var maybeRowHeader = enableRowHeader && CoreUtils.safeInvoke(this.props.rowHeaderCellRenderer, showFrozenRowsOnly);\n var maybeColumnHeader = CoreUtils.safeInvoke(this.props.columnHeaderCellRenderer, showFrozenColumnsOnly);\n var body = quadrantType != null\n ? bodyRenderer(quadrantType, showFrozenRowsOnly, showFrozenColumnsOnly)\n : bodyRenderer();\n // need to set bottom container size to prevent overlay clipping on scroll\n var bottomContainerStyle = {\n height: grid.getHeight(),\n width: grid.getWidth(),\n };\n return (React.createElement(\"div\", { className: className, style: this.props.style, ref: this.props.quadrantRef },\n React.createElement(\"div\", { className: Classes.TABLE_QUADRANT_SCROLL_CONTAINER, ref: this.props.scrollContainerRef, onScroll: this.props.onScroll, onWheel: this.props.onWheel },\n React.createElement(\"div\", { className: Classes.TABLE_TOP_CONTAINER },\n maybeMenu,\n maybeColumnHeader),\n React.createElement(\"div\", { className: Classes.TABLE_BOTTOM_CONTAINER, style: bottomContainerStyle },\n maybeRowHeader,\n React.createElement(\"div\", { className: Classes.TABLE_QUADRANT_BODY_CONTAINER, ref: this.props.bodyRef }, body)))));\n };\n TableQuadrant.prototype.validateProps = function (nextProps) {\n var quadrantType = nextProps.quadrantType;\n if (nextProps.onScroll != null && quadrantType != null && quadrantType !== QuadrantType.MAIN) {\n console.warn(Errors.QUADRANT_ON_SCROLL_UNNECESSARILY_DEFINED);\n }\n };\n TableQuadrant.prototype.getQuadrantCssClass = function () {\n switch (this.props.quadrantType) {\n case QuadrantType.MAIN:\n return Classes.TABLE_QUADRANT_MAIN;\n case QuadrantType.TOP:\n return Classes.TABLE_QUADRANT_TOP;\n case QuadrantType.LEFT:\n return Classes.TABLE_QUADRANT_LEFT;\n case QuadrantType.TOP_LEFT:\n return Classes.TABLE_QUADRANT_TOP_LEFT;\n default:\n return undefined;\n }\n };\n // we want the user to explicitly pass a quadrantType. define defaultProps as a Partial to avoid\n // declaring that and other required props here.\n TableQuadrant.defaultProps = {\n enableRowHeader: true,\n };\n TableQuadrant = __decorate([\n polyfill\n ], TableQuadrant);\n return TableQuadrant;\n}(AbstractComponent2));\nexport { TableQuadrant };\n//# sourceMappingURL=tableQuadrant.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { Utils as CoreUtils } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nvar GuideLayer = /** @class */ (function (_super) {\n __extends(GuideLayer, _super);\n function GuideLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderVerticalGuide = function (offset, index) {\n var _a;\n var style = {\n left: offset + \"px\",\n };\n var className = classNames(Classes.TABLE_OVERLAY, Classes.TABLE_VERTICAL_GUIDE, (_a = {},\n _a[Classes.TABLE_VERTICAL_GUIDE + \"-flush-left\"] = offset === 0,\n _a));\n return React.createElement(\"div\", { className: className, key: index, style: style });\n };\n _this.renderHorizontalGuide = function (offset, index) {\n var _a;\n var style = {\n top: offset + \"px\",\n };\n var className = classNames(Classes.TABLE_OVERLAY, Classes.TABLE_HORIZONTAL_GUIDE, (_a = {},\n _a[Classes.TABLE_HORIZONTAL_GUIDE + \"-flush-top\"] = offset === 0,\n _a));\n return React.createElement(\"div\", { className: className, key: index, style: style });\n };\n return _this;\n }\n GuideLayer.prototype.shouldComponentUpdate = function (nextProps) {\n if (this.props.className !== nextProps.className) {\n return true;\n }\n // shallow-comparing guide arrays leads to tons of unnecessary re-renders, so we check the\n // array contents explicitly.\n return (!CoreUtils.arraysEqual(this.props.verticalGuides, nextProps.verticalGuides) ||\n !CoreUtils.arraysEqual(this.props.horizontalGuides, nextProps.horizontalGuides));\n };\n GuideLayer.prototype.render = function () {\n var _a = this.props, verticalGuides = _a.verticalGuides, horizontalGuides = _a.horizontalGuides, className = _a.className;\n var verticals = verticalGuides == null ? undefined : verticalGuides.map(this.renderVerticalGuide);\n var horizontals = horizontalGuides == null ? undefined : horizontalGuides.map(this.renderHorizontalGuide);\n return (React.createElement(\"div\", { className: classNames(className, Classes.TABLE_OVERLAY_LAYER) },\n verticals,\n horizontals));\n };\n return GuideLayer;\n}(React.Component));\nexport { GuideLayer };\n//# sourceMappingURL=guides.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __extends } from \"tslib\";\nimport { Utils as CoreUtils } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"../common/classes\";\nimport { Regions } from \"../regions\";\n// don't include \"regions\" or \"regionStyles\" in here, because they can't be shallowly compared\nvar UPDATE_PROPS_KEYS = [\"className\"];\nvar RegionLayer = /** @class */ (function (_super) {\n __extends(RegionLayer, _super);\n function RegionLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderRegion = function (_region, index) {\n var _a = _this.props, className = _a.className, regionStyles = _a.regionStyles;\n return (React.createElement(\"div\", { className: classNames(Classes.TABLE_OVERLAY, Classes.TABLE_REGION, className), key: index, style: regionStyles[index] }));\n };\n return _this;\n }\n RegionLayer.prototype.shouldComponentUpdate = function (nextProps) {\n // shallowly comparable props like \"className\" tend not to change in the default table\n // implementation, so do that check last with hope that we return earlier and avoid it\n // altogether.\n return (!CoreUtils.arraysEqual(this.props.regions, nextProps.regions, Regions.regionsEqual) ||\n !CoreUtils.arraysEqual(this.props.regionStyles, nextProps.regionStyles, CoreUtils.shallowCompareKeys) ||\n !CoreUtils.shallowCompareKeys(this.props, nextProps, { include: UPDATE_PROPS_KEYS }));\n };\n RegionLayer.prototype.render = function () {\n return React.createElement(\"div\", { className: Classes.TABLE_OVERLAY_LAYER }, this.renderRegionChildren());\n };\n RegionLayer.prototype.renderRegionChildren = function () {\n var regions = this.props.regions;\n if (regions == null) {\n return undefined;\n }\n return regions.map(this.renderRegion);\n };\n return RegionLayer;\n}(React.Component));\nexport { RegionLayer };\n//# sourceMappingURL=regions.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar TableQuadrantStackCache = /** @class */ (function () {\n function TableQuadrantStackCache() {\n this.reset();\n }\n TableQuadrantStackCache.prototype.reset = function () {\n this.cachedRowHeaderWidth = 0;\n this.cachedColumnHeaderHeight = 0;\n this.cachedScrollLeft = 0;\n this.cachedScrollTop = 0;\n };\n // Getters\n // =======\n TableQuadrantStackCache.prototype.getScrollOffset = function (scrollKey) {\n return scrollKey === \"scrollLeft\" ? this.cachedScrollLeft : this.cachedScrollTop;\n };\n TableQuadrantStackCache.prototype.getRowHeaderWidth = function () {\n return this.cachedRowHeaderWidth;\n };\n TableQuadrantStackCache.prototype.getColumnHeaderHeight = function () {\n return this.cachedColumnHeaderHeight;\n };\n TableQuadrantStackCache.prototype.getScrollContainerClientWidth = function () {\n return this.cachedScrollContainerClientWidth;\n };\n TableQuadrantStackCache.prototype.getScrollContainerClientHeight = function () {\n return this.cachedScrollContainerClientHeight;\n };\n // Setters\n // =======\n TableQuadrantStackCache.prototype.setColumnHeaderHeight = function (height) {\n this.cachedColumnHeaderHeight = height;\n };\n TableQuadrantStackCache.prototype.setRowHeaderWidth = function (width) {\n this.cachedRowHeaderWidth = width;\n };\n TableQuadrantStackCache.prototype.setScrollOffset = function (scrollKey, offset) {\n if (scrollKey === \"scrollLeft\") {\n this.cachedScrollLeft = offset;\n }\n else {\n this.cachedScrollTop = offset;\n }\n };\n TableQuadrantStackCache.prototype.setScrollContainerClientWidth = function (clientWidth) {\n this.cachedScrollContainerClientWidth = clientWidth;\n };\n TableQuadrantStackCache.prototype.setScrollContainerClientHeight = function (clientHeight) {\n this.cachedScrollContainerClientHeight = clientHeight;\n };\n return TableQuadrantStackCache;\n}());\nexport { TableQuadrantStackCache };\n//# sourceMappingURL=tableQuadrantStackCache.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends } from \"tslib\";\nimport { AbstractComponent2, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport * as Classes from \"../common/classes\";\nimport * as ScrollUtils from \"../common/internal/scrollUtils\";\nimport { Utils } from \"../common/utils\";\nimport { QuadrantType, TableQuadrant } from \"./tableQuadrant\";\nimport { TableQuadrantStackCache } from \"./tableQuadrantStackCache\";\n// when there are no column headers, the header and menu element will\n// confusingly collapse to zero height unless we establish this default.\nvar DEFAULT_COLUMN_HEADER_HEIGHT = 30;\n// the debounce delay for updating the view on scroll. elements will be resized\n// and rejiggered once scroll has ceased for at least this long, but not before.\nvar DEFAULT_VIEW_SYNC_DELAY = 500;\n// if there are no frozen rows or columns, we still want the quadrant to be 1px\n// bigger to reveal the header border. this border leaks into the cell grid to\n// ensure that selection overlay borders (e.g.) will be perfectly flush with it.\nvar QUADRANT_MIN_SIZE = 1;\n// a list of props that trigger layout changes. when these props change,\n// quadrant views need to be explicitly resynchronized.\nvar SYNC_TRIGGER_PROP_KEYS = [\n \"enableRowHeader\",\n \"loadingOptions\",\n \"numFrozenColumns\",\n \"numFrozenRows\",\n \"numColumns\",\n \"numRows\",\n \"enableColumnInteractionBar\",\n];\nvar TableQuadrantStack = /** @class */ (function (_super) {\n __extends(TableQuadrantStack, _super);\n // Public\n // ======\n function TableQuadrantStack(props, context) {\n var _a, _b;\n var _this = _super.call(this, props, context) || this;\n // Instance variables\n // ==================\n _this.quadrantRefs = (_a = {},\n _a[QuadrantType.MAIN] = {},\n _a[QuadrantType.TOP] = {},\n _a[QuadrantType.LEFT] = {},\n _a[QuadrantType.TOP_LEFT] = {},\n _a);\n _this.quadrantRefHandlers = (_b = {},\n _b[QuadrantType.MAIN] = _this.generateQuadrantRefHandlers(QuadrantType.MAIN),\n _b[QuadrantType.TOP] = _this.generateQuadrantRefHandlers(QuadrantType.TOP),\n _b[QuadrantType.LEFT] = _this.generateQuadrantRefHandlers(QuadrantType.LEFT),\n _b[QuadrantType.TOP_LEFT] = _this.generateQuadrantRefHandlers(QuadrantType.TOP_LEFT),\n _b);\n // this flag helps us avoid redundant work in the MAIN quadrant's onScroll callback, if the\n // callback was triggered from a manual scrollTop/scrollLeft update within an onWheel.\n _this.wasMainQuadrantScrollTriggeredByWheelEvent = false;\n // Quadrant-specific renderers\n // ===========================\n // Menu\n _this.renderMainQuadrantMenu = function () {\n return CoreUtils.safeInvoke(_this.props.menuRenderer, _this.quadrantRefHandlers[QuadrantType.MAIN].menu);\n };\n _this.renderTopQuadrantMenu = function () {\n return CoreUtils.safeInvoke(_this.props.menuRenderer, _this.quadrantRefHandlers[QuadrantType.TOP].menu);\n };\n _this.renderLeftQuadrantMenu = function () {\n return CoreUtils.safeInvoke(_this.props.menuRenderer, _this.quadrantRefHandlers[QuadrantType.LEFT].menu);\n };\n _this.renderTopLeftQuadrantMenu = function () {\n return CoreUtils.safeInvoke(_this.props.menuRenderer, _this.quadrantRefHandlers[QuadrantType.TOP_LEFT].menu);\n };\n // Column header\n _this.renderMainQuadrantColumnHeader = function (showFrozenColumnsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.MAIN].columnHeader;\n var resizeHandler = _this.handleColumnResizeGuideMain;\n var reorderingHandler = _this.handleColumnsReordering;\n return CoreUtils.safeInvoke(_this.props.columnHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenColumnsOnly);\n };\n _this.renderTopQuadrantColumnHeader = function (showFrozenColumnsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.TOP].columnHeader;\n var resizeHandler = _this.handleColumnResizeGuideTop;\n var reorderingHandler = _this.handleColumnsReordering;\n return CoreUtils.safeInvoke(_this.props.columnHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenColumnsOnly);\n };\n _this.renderLeftQuadrantColumnHeader = function (showFrozenColumnsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.LEFT].columnHeader;\n var resizeHandler = _this.handleColumnResizeGuideLeft;\n var reorderingHandler = _this.handleColumnsReordering;\n return CoreUtils.safeInvoke(_this.props.columnHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenColumnsOnly);\n };\n _this.renderTopLeftQuadrantColumnHeader = function (showFrozenColumnsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.TOP_LEFT].columnHeader;\n var resizeHandler = _this.handleColumnResizeGuideTopLeft;\n var reorderingHandler = _this.handleColumnsReordering;\n return CoreUtils.safeInvoke(_this.props.columnHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenColumnsOnly);\n };\n // Row header\n _this.renderMainQuadrantRowHeader = function (showFrozenRowsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.MAIN].rowHeader;\n var resizeHandler = _this.handleRowResizeGuideMain;\n var reorderingHandler = _this.handleRowsReordering;\n return CoreUtils.safeInvoke(_this.props.rowHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenRowsOnly);\n };\n _this.renderTopQuadrantRowHeader = function (showFrozenRowsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.TOP].rowHeader;\n var resizeHandler = _this.handleRowResizeGuideTop;\n var reorderingHandler = _this.handleRowsReordering;\n return CoreUtils.safeInvoke(_this.props.rowHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenRowsOnly);\n };\n _this.renderLeftQuadrantRowHeader = function (showFrozenRowsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.LEFT].rowHeader;\n var resizeHandler = _this.handleRowResizeGuideLeft;\n var reorderingHandler = _this.handleRowsReordering;\n return CoreUtils.safeInvoke(_this.props.rowHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenRowsOnly);\n };\n _this.renderTopLeftQuadrantRowHeader = function (showFrozenRowsOnly) {\n var refHandler = _this.quadrantRefHandlers[QuadrantType.TOP_LEFT].rowHeader;\n var resizeHandler = _this.handleRowResizeGuideTopLeft;\n var reorderingHandler = _this.handleRowsReordering;\n return CoreUtils.safeInvoke(_this.props.rowHeaderCellRenderer, refHandler, resizeHandler, reorderingHandler, showFrozenRowsOnly);\n };\n // Event handlers\n // ==============\n // Scrolling\n // ---------\n _this.handleMainQuadrantScroll = function (event) {\n if (_this.wasMainQuadrantScrollTriggeredByWheelEvent) {\n _this.wasMainQuadrantScrollTriggeredByWheelEvent = false;\n return;\n }\n // invoke onScroll - which may read current scroll position - before\n // forcing a reflow with upcoming .scroll{Top,Left} setters.\n CoreUtils.safeInvoke(_this.props.onScroll, event);\n // batch DOM reads here. note that onScroll events don't include deltas\n // like onWheel events do, so we have to read from the DOM directly.\n var mainScrollContainer = _this.quadrantRefs[QuadrantType.MAIN].scrollContainer;\n var nextScrollLeft = mainScrollContainer.scrollLeft;\n var nextScrollTop = mainScrollContainer.scrollTop;\n // with the \"scroll\" event, scroll offsets are updated prior to the\n // event's firing, so no explicit update needed.\n _this.handleScrollOffsetChange(\"scrollLeft\", nextScrollLeft);\n _this.handleScrollOffsetChange(\"scrollTop\", nextScrollTop);\n // sync less important view stuff when scrolling/wheeling stops.\n _this.syncQuadrantViewsDebounced();\n };\n _this.handleWheel = function (event) {\n // again, let the listener read the current scroll position before we\n // force a reflow by resizing or repositioning stuff.\n CoreUtils.safeInvoke(_this.props.onScroll, event);\n // this helper performs DOM reads, so do them together before the writes below.\n var nextScrollLeft = _this.getNextScrollOffset(\"horizontal\", event.deltaX);\n var nextScrollTop = _this.getNextScrollOffset(\"vertical\", event.deltaY);\n // update this flag before updating the main quadrant scroll offsets,\n // since we need this set before onScroll fires.\n if (nextScrollLeft != null || nextScrollTop != null) {\n _this.wasMainQuadrantScrollTriggeredByWheelEvent = true;\n }\n // manually update the affected quadrant's scroll position to make sure\n // it stays perfectly in sync with dependent quadrants in each frame.\n // note: these DOM writes are batched together after the reads above.\n _this.quadrantRefs[QuadrantType.MAIN].scrollContainer.scrollLeft = nextScrollLeft;\n _this.quadrantRefs[QuadrantType.MAIN].scrollContainer.scrollTop = nextScrollTop;\n _this.handleScrollOffsetChange(\"scrollLeft\", nextScrollLeft);\n _this.handleScrollOffsetChange(\"scrollTop\", nextScrollTop);\n // sync less important view stuff when scrolling/wheeling stops.\n _this.syncQuadrantViewsDebounced();\n };\n _this.getNextScrollOffset = function (direction, delta) {\n var _a = _this.props, grid = _a.grid, isHorizontalScrollDisabled = _a.isHorizontalScrollDisabled, isVerticalScrollDisabled = _a.isVerticalScrollDisabled;\n var isHorizontal = direction === \"horizontal\";\n var scrollKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n var isScrollDisabled = isHorizontal ? isHorizontalScrollDisabled : isVerticalScrollDisabled;\n if (isScrollDisabled) {\n return undefined;\n }\n // measure client size on the first event of the current wheel gesture,\n // then grab cached values on successive events to eliminate DOM reads.\n // requires clearing the cached values in the debounced view-update at\n // the end of the wheel event.\n // ASSUMPTION: the client size won't change during the wheel event.\n var clientSize = isHorizontal\n ? _this.cache.getScrollContainerClientWidth()\n : _this.cache.getScrollContainerClientHeight();\n if (clientSize == null) {\n // should trigger only on the first scroll of the wheel gesture.\n // will save client width and height sizes in the cache.\n clientSize = _this.updateScrollContainerClientSize(isHorizontal);\n }\n // by now, the client width and height will have been saved in cache, so\n // they can't be nully anymore. also, events can only happen after\n // mount, so we're guaranteed to have measured the header sizes in\n // syncQuadrantViews() by now too, as it's invoked on mount.\n var containerSize = isHorizontal\n ? _this.cache.getScrollContainerClientWidth() - _this.cache.getRowHeaderWidth()\n : _this.cache.getScrollContainerClientHeight() - _this.cache.getColumnHeaderHeight();\n var gridSize = isHorizontal ? grid.getWidth() : grid.getHeight();\n var maxScrollOffset = Math.max(0, gridSize - containerSize);\n var currScrollOffset = _this.cache.getScrollOffset(scrollKey);\n var nextScrollOffset = CoreUtils.clamp(currScrollOffset + delta, 0, maxScrollOffset);\n return nextScrollOffset;\n };\n // Resizing\n // --------\n // Columns\n _this.handleColumnResizeGuideMain = function (verticalGuides) {\n _this.invokeColumnResizeHandler(verticalGuides, QuadrantType.MAIN);\n };\n _this.handleColumnResizeGuideTop = function (verticalGuides) {\n _this.invokeColumnResizeHandler(verticalGuides, QuadrantType.TOP);\n };\n _this.handleColumnResizeGuideLeft = function (verticalGuides) {\n _this.invokeColumnResizeHandler(verticalGuides, QuadrantType.LEFT);\n };\n _this.handleColumnResizeGuideTopLeft = function (verticalGuides) {\n _this.invokeColumnResizeHandler(verticalGuides, QuadrantType.TOP_LEFT);\n };\n _this.invokeColumnResizeHandler = function (verticalGuides, quadrantType) {\n var adjustedGuides = _this.adjustVerticalGuides(verticalGuides, quadrantType);\n CoreUtils.safeInvoke(_this.props.handleColumnResizeGuide, adjustedGuides);\n };\n // Rows\n _this.handleRowResizeGuideMain = function (horizontalGuides) {\n _this.invokeRowResizeHandler(horizontalGuides, QuadrantType.MAIN);\n };\n _this.handleRowResizeGuideTop = function (horizontalGuides) {\n _this.invokeRowResizeHandler(horizontalGuides, QuadrantType.TOP);\n };\n _this.handleRowResizeGuideLeft = function (horizontalGuides) {\n _this.invokeRowResizeHandler(horizontalGuides, QuadrantType.LEFT);\n };\n _this.handleRowResizeGuideTopLeft = function (horizontalGuides) {\n _this.invokeRowResizeHandler(horizontalGuides, QuadrantType.TOP_LEFT);\n };\n _this.invokeRowResizeHandler = function (horizontalGuides, quadrantType) {\n var adjustedGuides = _this.adjustHorizontalGuides(horizontalGuides, quadrantType);\n CoreUtils.safeInvoke(_this.props.handleRowResizeGuide, adjustedGuides);\n };\n // Reordering\n // ----------\n // Columns\n _this.handleColumnsReordering = function (oldIndex, newIndex, length) {\n var guideIndex = Utils.reorderedIndexToGuideIndex(oldIndex, newIndex, length);\n var leftOffset = _this.props.grid.getCumulativeWidthBefore(guideIndex);\n var quadrantType = guideIndex <= _this.props.numFrozenColumns ? QuadrantType.TOP_LEFT : QuadrantType.TOP;\n var verticalGuides = _this.adjustVerticalGuides([leftOffset], quadrantType);\n CoreUtils.safeInvoke(_this.props.handleColumnsReordering, verticalGuides);\n };\n // Rows\n _this.handleRowsReordering = function (oldIndex, newIndex, length) {\n var guideIndex = Utils.reorderedIndexToGuideIndex(oldIndex, newIndex, length);\n var topOffset = _this.props.grid.getCumulativeHeightBefore(guideIndex);\n var quadrantType = guideIndex <= _this.props.numFrozenRows ? QuadrantType.TOP_LEFT : QuadrantType.LEFT;\n var horizontalGuides = _this.adjustHorizontalGuides([topOffset], quadrantType);\n CoreUtils.safeInvoke(_this.props.handleRowsReordering, horizontalGuides);\n };\n // Size syncing\n // ============\n _this.syncQuadrantViewsDebounced = function () {\n var viewSyncDelay = _this.props.viewSyncDelay;\n if (viewSyncDelay < 0) {\n // update synchronously\n _this.syncQuadrantViews();\n }\n else {\n // update asynchronously after a debounced delay\n clearInterval(_this.debouncedViewSyncInterval);\n _this.debouncedViewSyncInterval = window.setTimeout(_this.syncQuadrantViews, viewSyncDelay);\n }\n };\n _this.syncQuadrantViews = function () {\n var mainRefs = _this.quadrantRefs[QuadrantType.MAIN];\n var mainScrollContainer = mainRefs.scrollContainer;\n //\n // Reads (batched to avoid DOM thrashing)\n //\n var rowHeaderWidth = _this.measureDesiredRowHeaderWidth();\n var columnHeaderHeight = _this.measureDesiredColumnHeaderHeight();\n var leftQuadrantGridWidth = _this.getSecondaryQuadrantGridSize(\"width\");\n var topQuadrantGridHeight = _this.getSecondaryQuadrantGridSize(\"height\");\n var leftQuadrantWidth = rowHeaderWidth + leftQuadrantGridWidth;\n var topQuadrantHeight = columnHeaderHeight + topQuadrantGridHeight;\n var rightScrollBarWidth = ScrollUtils.measureScrollBarThickness(mainScrollContainer, \"vertical\");\n var bottomScrollBarHeight = ScrollUtils.measureScrollBarThickness(mainScrollContainer, \"horizontal\");\n // ensure neither of these measurements confusingly clamps to zero height.\n var adjustedColumnHeaderHeight = _this.maybeIncreaseToDefaultColumnHeaderHeight(columnHeaderHeight);\n var adjustedTopQuadrantHeight = _this.maybeIncreaseToDefaultColumnHeaderHeight(topQuadrantHeight);\n // Update cache: let's read now whatever values we might need later.\n // prevents unnecessary reflows in the future.\n _this.cache.setRowHeaderWidth(rowHeaderWidth);\n _this.cache.setColumnHeaderHeight(columnHeaderHeight);\n // ...however, we also clear the cached client size, so we can read it\n // again when a new scroll begins. not safe to assume this won't change.\n // TODO: maybe use the ResizeSensor?\n _this.cache.setScrollContainerClientWidth(undefined);\n _this.cache.setScrollContainerClientHeight(undefined);\n //\n // Writes (batched to avoid DOM thrashing)\n //\n // Quadrant-size sync'ing: make the quadrants precisely as big as they\n // need to be to fit their variable-sized headers and/or frozen areas.\n _this.maybesSetQuadrantRowHeaderSizes(rowHeaderWidth);\n _this.maybeSetQuadrantMenuElementSizes(rowHeaderWidth, adjustedColumnHeaderHeight);\n _this.maybeSetQuadrantSizes(leftQuadrantWidth, adjustedTopQuadrantHeight);\n // Scrollbar clearance: tweak the quadrant bottom/right offsets to\n // reveal the MAIN-quadrant scrollbars if they're visible.\n _this.maybeSetQuadrantPositionOffset(QuadrantType.TOP, \"right\", rightScrollBarWidth);\n _this.maybeSetQuadrantPositionOffset(QuadrantType.LEFT, \"bottom\", bottomScrollBarHeight);\n // Scroll syncing: sync the scroll offsets of quadrants that may or may\n // not have been around prior to this update.\n _this.maybeSetQuadrantScrollOffset(QuadrantType.LEFT, \"scrollTop\");\n _this.maybeSetQuadrantScrollOffset(QuadrantType.TOP, \"scrollLeft\");\n };\n _this.maybeSetQuadrantSizes = function (width, height) {\n _this.maybesSetQuadrantSize(QuadrantType.LEFT, \"width\", width);\n _this.maybesSetQuadrantSize(QuadrantType.TOP, \"height\", height);\n _this.maybesSetQuadrantSize(QuadrantType.TOP_LEFT, \"width\", width);\n _this.maybesSetQuadrantSize(QuadrantType.TOP_LEFT, \"height\", height);\n };\n _this.maybesSetQuadrantSize = function (quadrantType, dimension, value) {\n var quadrant = _this.quadrantRefs[quadrantType].quadrant;\n if (quadrant != null) {\n quadrant.style[dimension] = value + \"px\";\n }\n };\n _this.maybeSetQuadrantPositionOffset = function (quadrantType, side, value) {\n var quadrant = _this.quadrantRefs[quadrantType].quadrant;\n if (quadrant != null) {\n quadrant.style[side] = value + \"px\";\n }\n };\n _this.maybesSetQuadrantRowHeaderSizes = function (width) {\n _this.maybeSetQuadrantRowHeaderSize(QuadrantType.MAIN, width);\n _this.maybeSetQuadrantRowHeaderSize(QuadrantType.TOP, width);\n _this.maybeSetQuadrantRowHeaderSize(QuadrantType.LEFT, width);\n _this.maybeSetQuadrantRowHeaderSize(QuadrantType.TOP_LEFT, width);\n };\n _this.maybeSetQuadrantRowHeaderSize = function (quadrantType, width) {\n var rowHeader = _this.quadrantRefs[quadrantType].rowHeader;\n if (rowHeader != null) {\n rowHeader.style.width = width + \"px\";\n }\n };\n _this.maybeSetQuadrantMenuElementSizes = function (width, height) {\n _this.maybeSetQuadrantMenuElementSize(QuadrantType.MAIN, width, height);\n _this.maybeSetQuadrantMenuElementSize(QuadrantType.TOP, width, height);\n _this.maybeSetQuadrantMenuElementSize(QuadrantType.LEFT, width, height);\n _this.maybeSetQuadrantMenuElementSize(QuadrantType.TOP_LEFT, width, height);\n };\n _this.maybeSetQuadrantMenuElementSize = function (quadrantType, width, height) {\n var menu = _this.quadrantRefs[quadrantType].menu;\n if (menu != null) {\n menu.style.width = width + \"px\";\n menu.style.height = height + \"px\";\n }\n };\n _this.maybeSetQuadrantScrollOffset = function (quadrantType, scrollKey, newOffset) {\n var scrollContainer = _this.quadrantRefs[quadrantType].scrollContainer;\n var scrollOffset = newOffset != null ? newOffset : _this.cache.getScrollOffset(scrollKey);\n if (scrollContainer != null) {\n scrollContainer[scrollKey] = scrollOffset;\n }\n };\n _this.handleScrollOffsetChange = function (scrollKey, offset) {\n _this.cache.setScrollOffset(scrollKey, offset);\n var dependentQuadrantType = scrollKey === \"scrollLeft\" ? QuadrantType.TOP : QuadrantType.LEFT;\n _this.maybeSetQuadrantScrollOffset(dependentQuadrantType, scrollKey);\n };\n // callbacks trigger too frequently unless we throttle scroll and wheel\n // events. declare these functions on the component instance since\n // they're stateful.\n _this.throttledHandleMainQuadrantScroll = CoreUtils.throttleReactEventCallback(_this.handleMainQuadrantScroll);\n _this.throttledHandleWheel = CoreUtils.throttleReactEventCallback(_this.handleWheel);\n _this.cache = new TableQuadrantStackCache();\n return _this;\n }\n /**\n * Scroll the main quadrant to the specified scroll offset, keeping all other quadrants in sync.\n */\n TableQuadrantStack.prototype.scrollToPosition = function (scrollLeft, scrollTop) {\n var scrollContainer = this.quadrantRefs[QuadrantType.MAIN].scrollContainer;\n this.wasMainQuadrantScrollTriggeredByWheelEvent = false;\n // this will trigger the main quadrant's scroll callback below\n scrollContainer.scrollLeft = scrollLeft;\n scrollContainer.scrollTop = scrollTop;\n this.syncQuadrantViews();\n };\n /**\n * Synchronizes quadrant sizes and scroll offsets based on the current\n * column, row, and header sizes. Useful for correcting quadrant sizes after\n * explicitly resizing columns and rows, for instance.\n *\n * Invoking this method imperatively is cheaper than providing columnWidths\n * or rowHeights array props to TableQuadrantStack and forcing it to run\n * expensive array diffs upon every update.\n */\n TableQuadrantStack.prototype.synchronizeQuadrantViews = function () {\n this.syncQuadrantViews();\n };\n TableQuadrantStack.prototype.componentDidMount = function () {\n this.emitRefs();\n this.syncQuadrantViews();\n };\n TableQuadrantStack.prototype.componentDidUpdate = function (prevProps) {\n // sync'ing quadrant views triggers expensive reflows, so we only call\n // it when layout-affecting props change.\n if (!CoreUtils.shallowCompareKeys(this.props, prevProps, {\n include: SYNC_TRIGGER_PROP_KEYS,\n })) {\n this.emitRefs();\n this.syncQuadrantViews();\n }\n };\n TableQuadrantStack.prototype.render = function () {\n var _a = this.props, grid = _a.grid, enableRowHeader = _a.enableRowHeader, bodyRenderer = _a.bodyRenderer, throttleScrolling = _a.throttleScrolling;\n // use the more generic \"scroll\" event for the main quadrant to capture\n // *both* scrollbar interactions and trackpad/mousewheel gestures.\n var onMainQuadrantScroll = throttleScrolling\n ? this.throttledHandleMainQuadrantScroll\n : this.handleMainQuadrantScroll;\n var onWheel = throttleScrolling ? this.throttledHandleWheel : this.handleWheel;\n var baseProps = {\n bodyRenderer: bodyRenderer,\n enableRowHeader: enableRowHeader,\n grid: grid,\n onWheel: onWheel,\n };\n var shouldRenderLeftQuadrants = this.shouldRenderLeftQuadrants();\n var maybeLeftQuadrant = shouldRenderLeftQuadrants ? (React.createElement(TableQuadrant, __assign({}, baseProps, { quadrantRef: this.quadrantRefHandlers[QuadrantType.LEFT].quadrant, quadrantType: QuadrantType.LEFT, columnHeaderCellRenderer: this.renderLeftQuadrantColumnHeader, menuRenderer: this.renderLeftQuadrantMenu, rowHeaderCellRenderer: this.renderLeftQuadrantRowHeader, scrollContainerRef: this.quadrantRefHandlers[QuadrantType.LEFT].scrollContainer }))) : undefined;\n var maybeTopLeftQuadrant = shouldRenderLeftQuadrants ? (React.createElement(TableQuadrant, __assign({}, baseProps, { quadrantRef: this.quadrantRefHandlers[QuadrantType.TOP_LEFT].quadrant, quadrantType: QuadrantType.TOP_LEFT, columnHeaderCellRenderer: this.renderTopLeftQuadrantColumnHeader, menuRenderer: this.renderTopLeftQuadrantMenu, rowHeaderCellRenderer: this.renderTopLeftQuadrantRowHeader, scrollContainerRef: this.quadrantRefHandlers[QuadrantType.TOP_LEFT].scrollContainer }))) : undefined;\n return (React.createElement(\"div\", { className: Classes.TABLE_QUADRANT_STACK },\n React.createElement(TableQuadrant, __assign({}, baseProps, { bodyRef: this.props.bodyRef, onScroll: onMainQuadrantScroll, quadrantRef: this.quadrantRefHandlers[QuadrantType.MAIN].quadrant, quadrantType: QuadrantType.MAIN, columnHeaderCellRenderer: this.renderMainQuadrantColumnHeader, menuRenderer: this.renderMainQuadrantMenu, rowHeaderCellRenderer: this.renderMainQuadrantRowHeader, scrollContainerRef: this.quadrantRefHandlers[QuadrantType.MAIN].scrollContainer })),\n React.createElement(TableQuadrant, __assign({}, baseProps, { quadrantRef: this.quadrantRefHandlers[QuadrantType.TOP].quadrant, quadrantType: QuadrantType.TOP, columnHeaderCellRenderer: this.renderTopQuadrantColumnHeader, menuRenderer: this.renderTopQuadrantMenu, rowHeaderCellRenderer: this.renderTopQuadrantRowHeader, scrollContainerRef: this.quadrantRefHandlers[QuadrantType.TOP].scrollContainer })),\n maybeLeftQuadrant,\n maybeTopLeftQuadrant));\n };\n // Ref handlers\n // ============\n TableQuadrantStack.prototype.generateQuadrantRefHandlers = function (quadrantType) {\n var _this = this;\n var reducer = function (agg, key) {\n agg[key] = function (ref) { return (_this.quadrantRefs[quadrantType][key] = ref); };\n return agg;\n };\n return [\"columnHeader\", \"menu\", \"quadrant\", \"rowHeader\", \"scrollContainer\"].reduce(reducer, {});\n };\n // Emitters\n // ========\n TableQuadrantStack.prototype.emitRefs = function () {\n CoreUtils.safeInvoke(this.props.quadrantRef, this.quadrantRefs[QuadrantType.MAIN].quadrant);\n CoreUtils.safeInvoke(this.props.rowHeaderRef, this.quadrantRefs[QuadrantType.MAIN].rowHeader);\n CoreUtils.safeInvoke(this.props.columnHeaderRef, this.quadrantRefs[QuadrantType.MAIN].columnHeader);\n CoreUtils.safeInvoke(this.props.scrollContainerRef, this.quadrantRefs[QuadrantType.MAIN].scrollContainer);\n };\n // this function is named 'update' instead of 'set', because a 'set'\n // function typically takes the new value as a parameter. we avoid that to\n // keep the isHorizontal logic tree contained within this function.\n TableQuadrantStack.prototype.updateScrollContainerClientSize = function (isHorizontal) {\n var mainScrollContainer = this.quadrantRefs[QuadrantType.MAIN].scrollContainer;\n if (isHorizontal) {\n this.cache.setScrollContainerClientWidth(mainScrollContainer.clientWidth);\n return this.cache.getScrollContainerClientWidth();\n }\n else {\n this.cache.setScrollContainerClientHeight(mainScrollContainer.clientHeight);\n return this.cache.getScrollContainerClientHeight();\n }\n };\n TableQuadrantStack.prototype.maybeIncreaseToDefaultColumnHeaderHeight = function (height) {\n return height <= QUADRANT_MIN_SIZE ? DEFAULT_COLUMN_HEADER_HEIGHT : height;\n };\n // Helpers\n // =======\n /**\n * Returns the width or height of *only the grid* in the secondary quadrants\n * (TOP, LEFT, TOP_LEFT), based on the number of frozen rows and columns.\n */\n TableQuadrantStack.prototype.getSecondaryQuadrantGridSize = function (dimension) {\n var _a = this.props, grid = _a.grid, numFrozenColumns = _a.numFrozenColumns, numFrozenRows = _a.numFrozenRows;\n var numFrozen = dimension === \"width\" ? numFrozenColumns : numFrozenRows;\n var getterFn = dimension === \"width\" ? grid.getCumulativeWidthAt : grid.getCumulativeHeightAt;\n // both getter functions do O(1) lookups.\n return numFrozen > 0 ? getterFn(numFrozen - 1) : QUADRANT_MIN_SIZE;\n };\n /**\n * Measures the desired width of the row header based on its tallest\n * contents.\n */\n TableQuadrantStack.prototype.measureDesiredRowHeaderWidth = function () {\n // the MAIN row header serves as the source of truth\n var mainRowHeader = this.quadrantRefs[QuadrantType.MAIN].rowHeader;\n if (mainRowHeader == null) {\n return 0;\n }\n else {\n // (alas, we must force a reflow to measure the row header's \"desired\" width)\n mainRowHeader.style.width = \"auto\";\n var desiredRowHeaderWidth = mainRowHeader.clientWidth;\n return desiredRowHeaderWidth;\n }\n };\n /**\n * Measures the desired height of the column header based on its tallest\n * contents.\n */\n TableQuadrantStack.prototype.measureDesiredColumnHeaderHeight = function () {\n // unlike the row headers, the column headers are in a display-flex\n // layout and are not actually bound by any fixed `height` that we set,\n // so they'll grow freely to their necessary size. makes measuring easy!\n var mainColumnHeader = this.quadrantRefs[QuadrantType.MAIN].columnHeader;\n return mainColumnHeader == null ? 0 : mainColumnHeader.clientHeight;\n };\n TableQuadrantStack.prototype.shouldRenderLeftQuadrants = function (props) {\n if (props === void 0) { props = this.props; }\n var enableRowHeader = props.enableRowHeader, numFrozenColumns = props.numFrozenColumns;\n return enableRowHeader || (numFrozenColumns != null && numFrozenColumns > 0);\n };\n // Resizing\n TableQuadrantStack.prototype.adjustVerticalGuides = function (verticalGuides, quadrantType) {\n var isFrozenQuadrant = quadrantType === QuadrantType.LEFT || quadrantType === QuadrantType.TOP_LEFT;\n var scrollAmount = isFrozenQuadrant ? 0 : this.cache.getScrollOffset(\"scrollLeft\");\n var rowHeaderWidth = this.cache.getRowHeaderWidth();\n var adjustedVerticalGuides = verticalGuides != null\n ? verticalGuides.map(function (verticalGuide) { return verticalGuide - scrollAmount + rowHeaderWidth; })\n : verticalGuides;\n return adjustedVerticalGuides;\n };\n TableQuadrantStack.prototype.adjustHorizontalGuides = function (horizontalGuides, quadrantType) {\n var isFrozenQuadrant = quadrantType === QuadrantType.TOP || quadrantType === QuadrantType.TOP_LEFT;\n var scrollAmount = isFrozenQuadrant ? 0 : this.cache.getScrollOffset(\"scrollTop\");\n var columnHeaderHeight = this.cache.getColumnHeaderHeight();\n var adjustedHorizontalGuides = horizontalGuides != null\n ? horizontalGuides.map(function (horizontalGuide) { return horizontalGuide - scrollAmount + columnHeaderHeight; })\n : horizontalGuides;\n return adjustedHorizontalGuides;\n };\n // we want the user to explicitly pass a quadrantType. define defaultProps as a Partial to avoid\n // declaring that and other required props here.\n TableQuadrantStack.defaultProps = {\n enableColumnInteractionBar: undefined,\n enableRowHeader: true,\n isHorizontalScrollDisabled: false,\n isVerticalScrollDisabled: false,\n throttleScrolling: true,\n viewSyncDelay: DEFAULT_VIEW_SYNC_DELAY,\n };\n TableQuadrantStack = __decorate([\n polyfill\n ], TableQuadrantStack);\n return TableQuadrantStack;\n}(AbstractComponent2));\nexport { TableQuadrantStack };\n//# sourceMappingURL=tableQuadrantStack.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __decorate, __extends } from \"tslib\";\nimport { ContextMenuTarget } from \"@blueprintjs/core\";\nimport * as React from \"react\";\n/**\n * Since the ContextMenuTarget uses the `onContextMenu` prop instead\n * `element.addEventListener`, the prop can be lost. This wrapper helps us\n * maintain context menu fuctionality when doing fancy React.cloneElement\n * chains.\n */\nvar ContextMenuTargetWrapper = /** @class */ (function (_super) {\n __extends(ContextMenuTargetWrapper, _super);\n function ContextMenuTargetWrapper() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ContextMenuTargetWrapper.prototype.render = function () {\n var _a = this.props, className = _a.className, children = _a.children, style = _a.style;\n return (React.createElement(\"div\", { className: className, style: style }, children));\n };\n ContextMenuTargetWrapper.prototype.renderContextMenu = function (e) {\n return this.props.renderContextMenu(e);\n };\n ContextMenuTargetWrapper = __decorate([\n ContextMenuTarget\n ], ContextMenuTargetWrapper);\n return ContextMenuTargetWrapper;\n}(React.PureComponent));\nexport { ContextMenuTargetWrapper };\n//# sourceMappingURL=contextMenuTargetWrapper.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Regions } from \"../../regions\";\nvar MenuContext = /** @class */ (function () {\n function MenuContext(target, selectedRegions, numRows, numCols) {\n this.target = target;\n this.selectedRegions = selectedRegions;\n this.numRows = numRows;\n this.numCols = numCols;\n this.regions = Regions.overlapsRegion(selectedRegions, target) ? selectedRegions : [target];\n }\n MenuContext.prototype.getTarget = function () {\n return this.target;\n };\n MenuContext.prototype.getSelectedRegions = function () {\n return this.selectedRegions;\n };\n MenuContext.prototype.getRegions = function () {\n return this.regions;\n };\n MenuContext.prototype.getUniqueCells = function () {\n return Regions.enumerateUniqueCells(this.regions, this.numRows, this.numCols);\n };\n return MenuContext;\n}());\nexport { MenuContext };\n//# sourceMappingURL=menuContext.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Event name for `postMessage`\n */\nvar MESSAGE_EVENT_DATA = \"blueprint-table-post-message\";\n/**\n * Object that holds state for managing idle callbacks\n */\nvar IDLE_STATE = {\n callbacks: [],\n triggered: false,\n};\nvar handleIdle = function (event) {\n if (event.source !== window || event.data !== MESSAGE_EVENT_DATA) {\n return;\n }\n IDLE_STATE.triggered = false;\n var callback = null;\n if (IDLE_STATE.callbacks.length > 0) {\n callback = IDLE_STATE.callbacks.shift();\n }\n if (IDLE_STATE.callbacks.length > 0) {\n triggerIdleFrame();\n }\n // finally, invoke the callback. exceptions will be propagated\n if (callback) {\n callback();\n }\n};\n// check for window since we might be in a headless server environment\nif (typeof window !== \"undefined\") {\n if (window.addEventListener != null) {\n window.addEventListener(\"message\", handleIdle, false);\n }\n}\nvar triggerIdleFrame = function () {\n if (IDLE_STATE.triggered) {\n return;\n }\n IDLE_STATE.triggered = true;\n /**\n * This is the magic that will wait for the browser to be \"idle\" before\n * invoking the callback.\n *\n * First, we use nested calls to `requestAnimationFrame` which will cause\n * the inner callback to be invoked on the NEXT FRAME.\n *\n * Then, we call to `postMessage` to invoke the `handleIdle` method only\n * once the current stack frame is empty.\n *\n * With this approach, the idle callback will be invoked at most once per\n * frame and only after the stack frame is empty.\n */\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n postMessage(MESSAGE_EVENT_DATA, \"*\");\n });\n });\n};\n/**\n * Invokes the provided callback on the next available frame after the stack\n * frame is empty.\n *\n * At most one callback per frame is invoked, and the callback may be delayed\n * multiple frames until the page is idle.\n *\n * TODO: return a token from this method that allows you to cancel the callback\n * (otherwise the callback list may increase without bound).\n */\nexport var requestIdleCallback = function (callback) {\n IDLE_STATE.callbacks.push(callback);\n triggerIdleFrame();\n};\n//# sourceMappingURL=requestIdleCallback.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Utils } from \"@blueprintjs/core\";\nimport { requestIdleCallback } from \"./requestIdleCallback\";\n/**\n * This class helps batch updates to large lists.\n *\n * For example, if your React component has many children, updating them all at\n * once may cause jank when reconciling the DOM. This class helps you update\n * only a few children per frame.\n *\n * A typical usage would be:\n *\n * ```tsx\n * public renderChildren = (allChildrenKeys: string[]) => {\n *\n * batcher.startNewBatch();\n *\n * allChildrenKeys.forEach((prop1: string, index: number) => {\n * batcher.addArgsToBatch(prop1, \"prop2\", index);\n * });\n *\n * batcher.removeOldAddNew((prop1: string, prop2: string, other: number) => {\n * return <Child prop1={prop1} prop2={prop2} other={other} />;\n * });\n *\n * if (!batcher.isDone()) {\n * batcher.idleCallback(this.forceUpdate());\n * }\n *\n * const currentChildren = batcher.getList();\n * return currentChildren;\n * }\n *\n * ```\n */\nvar Batcher = /** @class */ (function () {\n function Batcher() {\n var _this = this;\n this.currentObjects = {};\n this.oldObjects = {};\n this.batchArgs = {};\n this.done = true;\n this.handleIdleCallback = function () {\n var callback = _this.callback;\n delete _this.callback;\n Utils.safeInvoke(callback);\n };\n this.mapCurrentObjectKey = function (key) {\n return _this.currentObjects[key];\n };\n }\n /**\n * Resets the \"batch\" and \"current\" sets. This essentially clears the cache\n * and prevents accidental re-use of \"current\" objects.\n */\n Batcher.prototype.reset = function () {\n this.batchArgs = {};\n this.oldObjects = this.currentObjects;\n this.currentObjects = {};\n };\n /**\n * Starts a new \"batch\" argument set\n */\n Batcher.prototype.startNewBatch = function () {\n this.batchArgs = {};\n };\n /**\n * Stores the variadic arguments to be later batched together.\n *\n * The arguments must be simple stringifyable objects.\n */\n Batcher.prototype.addArgsToBatch = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n this.batchArgs[this.getKey(args)] = args;\n };\n /**\n * Compares the set of \"batch\" arguments to the \"current\" set. Creates any\n * new objects using the callback as a factory. Removes old objects.\n *\n * Arguments that are in the \"current\" set but were not part of the last\n * \"batch\" set are considered candidates for removal. Similarly, Arguments\n * that are part of the \"batch\" set but not the \"current\" set are candidates\n * for addition.\n *\n * The number of objects added and removed may be limited with the\n * `...Limit` parameters.\n *\n * Finally, the batcher determines if the batching is complete if the\n * \"current\" arguments match the \"batch\" arguments.\n */\n Batcher.prototype.removeOldAddNew = function (callback, addNewLimit, removeOldLimit, updateLimit) {\n var _this = this;\n if (addNewLimit === void 0) { addNewLimit = Batcher.DEFAULT_ADD_LIMIT; }\n if (removeOldLimit === void 0) { removeOldLimit = Batcher.DEFAULT_REMOVE_LIMIT; }\n if (updateLimit === void 0) { updateLimit = Batcher.DEFAULT_UPDATE_LIMIT; }\n // remove old\n var keysToRemove = this.setKeysDifference(this.currentObjects, this.batchArgs, removeOldLimit);\n keysToRemove.forEach(function (key) { return delete _this.currentObjects[key]; });\n // remove ALL old objects not in batch\n var keysToRemoveOld = this.setKeysDifference(this.oldObjects, this.batchArgs, -1);\n keysToRemoveOld.forEach(function (key) { return delete _this.oldObjects[key]; });\n // copy ALL old objects into current objects if not defined\n var keysToShallowCopy = Object.keys(this.oldObjects);\n keysToShallowCopy.forEach(function (key) {\n if (_this.currentObjects[key] == null) {\n _this.currentObjects[key] = _this.oldObjects[key];\n }\n });\n // update old objects with factory\n var keysToUpdate = this.setKeysIntersection(this.oldObjects, this.currentObjects, updateLimit);\n keysToUpdate.forEach(function (key) {\n delete _this.oldObjects[key];\n _this.currentObjects[key] = callback.apply(undefined, _this.batchArgs[key]);\n });\n // add new objects with factory\n var keysToAdd = this.setKeysDifference(this.batchArgs, this.currentObjects, addNewLimit);\n keysToAdd.forEach(function (key) { return (_this.currentObjects[key] = callback.apply(undefined, _this.batchArgs[key])); });\n // set `done` to true if sets match exactly after add/remove and there\n // are no \"old objects\" remaining\n this.done =\n this.setHasSameKeys(this.batchArgs, this.currentObjects) && Object.keys(this.oldObjects).length === 0;\n };\n /**\n * Returns true if the \"current\" set matches the \"batch\" set.\n */\n Batcher.prototype.isDone = function () {\n return this.done;\n };\n /**\n * Returns all the objects in the \"current\" set.\n */\n Batcher.prototype.getList = function () {\n return Object.keys(this.currentObjects).map(this.mapCurrentObjectKey);\n };\n /**\n * Registers a callback to be invoked on the next idle frame. If a callback\n * has already been registered, we do not register a new one.\n */\n Batcher.prototype.idleCallback = function (callback) {\n if (!this.callback) {\n this.callback = callback;\n requestIdleCallback(this.handleIdleCallback);\n }\n };\n Batcher.prototype.cancelOutstandingCallback = function () {\n delete this.callback;\n };\n /**\n * Forcibly overwrites the current list of batched objects. Not recommended\n * for normal usage.\n */\n Batcher.prototype.setList = function (objectsArgs, objects) {\n var _this = this;\n this.reset();\n objectsArgs.forEach(function (args, i) {\n _this.addArgsToBatch.apply(_this, args);\n _this.currentObjects[_this.getKey(args)] = objects[i];\n });\n this.done = true;\n };\n Batcher.prototype.getKey = function (args) {\n return args.join(Batcher.ARG_DELIMITER);\n };\n Batcher.prototype.setKeysDifference = function (a, b, limit) {\n return this.setKeysOperation(a, b, \"difference\", limit);\n };\n Batcher.prototype.setKeysIntersection = function (a, b, limit) {\n return this.setKeysOperation(a, b, \"intersect\", limit);\n };\n /**\n * Compares the keys of A from B -- and performs an \"intersection\" or\n * \"difference\" operation on the keys.\n *\n * Note that the order of operands A and B matters for the \"difference\"\n * operation.\n *\n * Returns an array of at most `limit` keys.\n */\n Batcher.prototype.setKeysOperation = function (a, b, operation, limit) {\n var result = [];\n var aKeys = Object.keys(a);\n for (var i = 0; i < aKeys.length && (limit < 0 || result.length < limit); i++) {\n var key = aKeys[i];\n if ((operation === \"difference\" && a[key] && !b[key]) || (operation === \"intersect\" && a[key] && b[key])) {\n result.push(key);\n }\n }\n return result;\n };\n /**\n * Returns true of objects `a` and `b` have exactly the same keys.\n */\n Batcher.prototype.setHasSameKeys = function (a, b) {\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (var _i = 0, aKeys_1 = aKeys; _i < aKeys_1.length; _i++) {\n var aKey = aKeys_1[_i];\n if (b[aKey] === undefined) {\n return false;\n }\n }\n return true;\n };\n Batcher.DEFAULT_ADD_LIMIT = 20;\n Batcher.DEFAULT_UPDATE_LIMIT = 20;\n Batcher.DEFAULT_REMOVE_LIMIT = 20;\n Batcher.ARG_DELIMITER = \"|\";\n return Batcher;\n}());\nexport { Batcher };\n//# sourceMappingURL=batcher.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport { AbstractComponent2, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { emptyCellRenderer } from \"./cell/cell\";\nimport { Batcher } from \"./common/batcher\";\nimport * as Classes from \"./common/classes\";\nimport { Rect } from \"./common/rect\";\nimport { RenderMode } from \"./common/renderMode\";\nvar SHALLOW_COMPARE_DENYLIST = [\"viewportRect\"];\n/**\n * We don't want to reset the batcher when this set of keys changes. Any other\n * changes should reset the batcher's internal cache.\n */\nvar BATCHER_RESET_PROP_KEYS_DENYLIST = [\n \"columnIndexEnd\",\n \"columnIndexStart\",\n \"rowIndexEnd\",\n \"rowIndexStart\",\n];\nvar TableBodyCells = /** @class */ (function (_super) {\n __extends(TableBodyCells, _super);\n function TableBodyCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.batcher = new Batcher();\n // Cell renderers\n // ==============\n _this.renderNewCell = function (rowIndex, columnIndex) {\n var _a = _this.props, columnIndexEnd = _a.columnIndexEnd, grid = _a.grid, rowIndexEnd = _a.rowIndexEnd;\n var extremaClasses = grid.getExtremaClasses(rowIndex, columnIndex, rowIndexEnd, columnIndexEnd);\n var isGhost = grid.isGhostIndex(rowIndex, columnIndex);\n return _this.renderCell(rowIndex, columnIndex, extremaClasses, isGhost);\n };\n _this.renderCell = function (rowIndex, columnIndex, extremaClasses, isGhost) {\n var _a;\n var _b = _this.props, cellRenderer = _b.cellRenderer, focusedCell = _b.focusedCell, loading = _b.loading, grid = _b.grid;\n var baseCell = isGhost ? emptyCellRenderer() : cellRenderer(rowIndex, columnIndex);\n // cellRenderer still may return null\n baseCell = baseCell == null ? emptyCellRenderer() : baseCell;\n var className = classNames(cellClassNames(rowIndex, columnIndex), extremaClasses, (_a = {},\n _a[Classes.TABLE_CELL_GHOST] = isGhost,\n _a[Classes.TABLE_CELL_LEDGER_ODD] = rowIndex % 2 === 1,\n _a[Classes.TABLE_CELL_LEDGER_EVEN] = rowIndex % 2 === 0,\n _a), baseCell.props.className);\n var key = TableBodyCells.cellReactKey(rowIndex, columnIndex);\n var rect = isGhost ? grid.getGhostCellRect(rowIndex, columnIndex) : grid.getCellRect(rowIndex, columnIndex);\n var cellLoading = baseCell.props.loading != null ? baseCell.props.loading : loading;\n var style = __assign(__assign({}, baseCell.props.style), Rect.style(rect));\n var isFocused = focusedCell != null && focusedCell.row === rowIndex && focusedCell.col === columnIndex;\n return React.cloneElement(baseCell, {\n className: className,\n isFocused: isFocused,\n key: key,\n loading: cellLoading,\n style: style,\n });\n };\n // Other\n // =====\n _this.didViewportRectChange = function (nextViewportRect, currViewportRect) {\n if (nextViewportRect == null && currViewportRect == null) {\n return false;\n }\n else if (nextViewportRect == null || currViewportRect == null) {\n return true;\n }\n else {\n return !nextViewportRect.equals(currViewportRect);\n }\n };\n return _this;\n }\n TableBodyCells.cellReactKey = function (rowIndex, columnIndex) {\n return \"cell-\" + rowIndex + \"-\" + columnIndex;\n };\n TableBodyCells.prototype.componentDidMount = function () {\n this.maybeInvokeOnCompleteRender();\n };\n TableBodyCells.prototype.shouldComponentUpdate = function (nextProps) {\n return (!CoreUtils.shallowCompareKeys(nextProps, this.props, {\n exclude: SHALLOW_COMPARE_DENYLIST,\n }) ||\n // \"viewportRect\" is not a plain object, so we can't just deep\n // compare; we need custom logic.\n this.didViewportRectChange(nextProps.viewportRect, this.props.viewportRect));\n };\n TableBodyCells.prototype.componentDidUpdate = function (prevProps) {\n var shouldResetBatcher = !CoreUtils.shallowCompareKeys(prevProps, this.props, {\n exclude: BATCHER_RESET_PROP_KEYS_DENYLIST,\n });\n if (shouldResetBatcher) {\n this.batcher.reset();\n }\n this.maybeInvokeOnCompleteRender();\n };\n TableBodyCells.prototype.componentWillUnmount = function () {\n this.batcher.cancelOutstandingCallback();\n };\n TableBodyCells.prototype.render = function () {\n var renderMode = this.props.renderMode;\n var cells = renderMode === RenderMode.BATCH ? this.renderBatchedCells() : this.renderAllCells();\n return React.createElement(\"div\", { className: Classes.TABLE_BODY_CELLS }, cells);\n };\n // Render modes\n // ============\n TableBodyCells.prototype.renderBatchedCells = function () {\n var _this = this;\n var _a = this.props, columnIndexEnd = _a.columnIndexEnd, columnIndexStart = _a.columnIndexStart, rowIndexEnd = _a.rowIndexEnd, rowIndexStart = _a.rowIndexStart;\n // render cells in batches\n this.batcher.startNewBatch();\n for (var rowIndex = rowIndexStart; rowIndex <= rowIndexEnd; rowIndex++) {\n for (var columnIndex = columnIndexStart; columnIndex <= columnIndexEnd; columnIndex++) {\n this.batcher.addArgsToBatch(rowIndex, columnIndex);\n }\n }\n this.batcher.removeOldAddNew(this.renderNewCell);\n if (!this.batcher.isDone()) {\n this.batcher.idleCallback(function () { return _this.forceUpdate(); });\n }\n return this.batcher.getList();\n };\n TableBodyCells.prototype.renderAllCells = function () {\n var _a = this.props, columnIndexEnd = _a.columnIndexEnd, columnIndexStart = _a.columnIndexStart, rowIndexEnd = _a.rowIndexEnd, rowIndexStart = _a.rowIndexStart;\n var cells = [];\n var cellsArgs = [];\n for (var rowIndex = rowIndexStart; rowIndex <= rowIndexEnd; rowIndex++) {\n for (var columnIndex = columnIndexStart; columnIndex <= columnIndexEnd; columnIndex++) {\n cells.push(this.renderNewCell(rowIndex, columnIndex));\n cellsArgs.push([rowIndex, columnIndex]);\n }\n }\n // pretend we did an entire rendering pass using the batcher. that way,\n // if we switch from `RenderMode.NONE` to `RenderMode.BATCH`, we don't\n // have to re-paint every cell still in view.\n this.batcher.setList(cellsArgs, cells);\n return cells;\n };\n // Callbacks\n // =========\n TableBodyCells.prototype.maybeInvokeOnCompleteRender = function () {\n var _a = this.props, onCompleteRender = _a.onCompleteRender, renderMode = _a.renderMode;\n if (renderMode === RenderMode.NONE || (renderMode === RenderMode.BATCH && this.batcher.isDone())) {\n CoreUtils.safeInvoke(onCompleteRender);\n }\n };\n TableBodyCells.defaultProps = {\n renderMode: RenderMode.BATCH,\n };\n return TableBodyCells;\n}(AbstractComponent2));\nexport { TableBodyCells };\n/**\n * Returns the array of class names that must be applied to each table\n * cell so that we can locate any cell based on its coordinate.\n */\nexport function cellClassNames(rowIndex, columnIndex) {\n return [Classes.rowCellIndexClass(rowIndex), Classes.columnCellIndexClass(columnIndex)];\n}\n//# sourceMappingURL=tableBodyCells.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends } from \"tslib\";\nimport { AbstractComponent2, Utils as CoreUtils } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport * as Classes from \"./common/classes\";\nimport { ContextMenuTargetWrapper } from \"./common/contextMenuTargetWrapper\";\nimport { RenderMode } from \"./common/renderMode\";\nimport { MenuContext } from \"./interactions/menus\";\nimport { DragSelectable } from \"./interactions/selectable\";\nimport { Regions } from \"./regions\";\nimport { cellClassNames, TableBodyCells } from \"./tableBodyCells\";\nvar DEEP_COMPARE_KEYS = [\"selectedRegions\"];\nvar TableBody = /** @class */ (function (_super) {\n __extends(TableBody, _super);\n function TableBody() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.renderContextMenu = function (e) {\n var _a = _this.props, grid = _a.grid, onFocusedCell = _a.onFocusedCell, onSelection = _a.onSelection, bodyContextMenuRenderer = _a.bodyContextMenuRenderer, selectedRegions = _a.selectedRegions;\n var numRows = grid.numRows, numCols = grid.numCols;\n if (bodyContextMenuRenderer == null) {\n return undefined;\n }\n var targetRegion = _this.locateClick(e.nativeEvent);\n var nextSelectedRegions = selectedRegions;\n // if the event did not happen within a selected region, clear all\n // selections and select the right-clicked cell.\n var foundIndex = Regions.findContainingRegion(selectedRegions, targetRegion);\n if (foundIndex < 0) {\n nextSelectedRegions = [targetRegion];\n onSelection(nextSelectedRegions);\n // move the focused cell to the new region.\n var nextFocusedCell = __assign(__assign({}, Regions.getFocusCellCoordinatesFromRegion(targetRegion)), { focusSelectionIndex: 0 });\n onFocusedCell(nextFocusedCell);\n }\n var menuContext = new MenuContext(targetRegion, nextSelectedRegions, numRows, numCols);\n var contextMenu = bodyContextMenuRenderer(menuContext);\n return contextMenu == null ? undefined : contextMenu;\n };\n // Callbacks\n // =========\n _this.handleSelectionEnd = function () {\n _this.activationCell = null; // not strictly required, but good practice\n };\n _this.locateClick = function (event) {\n _this.activationCell = _this.props.locator.convertPointToCell(event.clientX, event.clientY);\n return Regions.cell(_this.activationCell.row, _this.activationCell.col);\n };\n _this.locateDrag = function (_event, coords, returnEndOnly) {\n if (returnEndOnly === void 0) { returnEndOnly = false; }\n var start = _this.activationCell;\n var end = _this.props.locator.convertPointToCell(coords.current[0], coords.current[1]);\n return returnEndOnly ? Regions.cell(end.row, end.col) : Regions.cell(start.row, start.col, end.row, end.col);\n };\n return _this;\n }\n // TODO: Does this method need to be public?\n // (see: https://github.com/palantir/blueprint/issues/1617)\n TableBody.cellClassNames = function (rowIndex, columnIndex) {\n return cellClassNames(rowIndex, columnIndex);\n };\n TableBody.prototype.shouldComponentUpdate = function (nextProps) {\n return (!CoreUtils.shallowCompareKeys(this.props, nextProps, { exclude: DEEP_COMPARE_KEYS }) ||\n !CoreUtils.deepCompareKeys(this.props, nextProps, DEEP_COMPARE_KEYS));\n };\n TableBody.prototype.render = function () {\n var _a = this.props, grid = _a.grid, numFrozenColumns = _a.numFrozenColumns, numFrozenRows = _a.numFrozenRows;\n var defaultStyle = grid.getRect().sizeStyle();\n var style = {\n height: numFrozenRows != null ? grid.getCumulativeHeightAt(numFrozenRows - 1) : defaultStyle.height,\n width: numFrozenColumns != null ? grid.getCumulativeWidthAt(numFrozenColumns - 1) : defaultStyle.width,\n };\n return (React.createElement(DragSelectable, { enableMultipleSelection: this.props.enableMultipleSelection, focusedCell: this.props.focusedCell, locateClick: this.locateClick, locateDrag: this.locateDrag, onFocusedCell: this.props.onFocusedCell, onSelection: this.props.onSelection, onSelectionEnd: this.handleSelectionEnd, selectedRegions: this.props.selectedRegions, selectedRegionTransform: this.props.selectedRegionTransform },\n React.createElement(ContextMenuTargetWrapper, { className: classNames(Classes.TABLE_BODY_VIRTUAL_CLIENT, Classes.TABLE_CELL_CLIENT), renderContextMenu: this.renderContextMenu, style: style },\n React.createElement(TableBodyCells, { cellRenderer: this.props.cellRenderer, focusedCell: this.props.focusedCell, grid: grid, loading: this.props.loading, onCompleteRender: this.props.onCompleteRender, renderMode: this.props.renderMode, columnIndexStart: this.props.columnIndexStart, columnIndexEnd: this.props.columnIndexEnd, rowIndexStart: this.props.rowIndexStart, rowIndexEnd: this.props.rowIndexEnd, viewportRect: this.props.viewportRect }))));\n };\n TableBody.defaultProps = {\n loading: false,\n renderMode: RenderMode.BATCH,\n };\n return TableBody;\n}(AbstractComponent2));\nexport { TableBody };\n//# sourceMappingURL=tableBody.js.map","/*\n * Copyright 2016 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __decorate, __extends, __rest } from \"tslib\";\nimport { AbstractComponent2, DISPLAYNAME_PREFIX, Hotkey, Hotkeys, HotkeysTarget, Utils as CoreUtils, } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { Column } from \"./column\";\nimport * as Classes from \"./common/classes\";\nimport { Clipboard } from \"./common/clipboard\";\nimport { columnInteractionBarContextTypes } from \"./common/context\";\nimport { Direction } from \"./common/direction\";\nimport * as Errors from \"./common/errors\";\nimport { Grid } from \"./common/grid\";\nimport * as FocusedCellUtils from \"./common/internal/focusedCellUtils\";\nimport * as ScrollUtils from \"./common/internal/scrollUtils\";\nimport * as SelectionUtils from \"./common/internal/selectionUtils\";\nimport { Rect } from \"./common/rect\";\nimport { RenderMode } from \"./common/renderMode\";\nimport { Utils } from \"./common/utils\";\nimport { ColumnHeader } from \"./headers/columnHeader\";\nimport { ColumnHeaderCell } from \"./headers/columnHeaderCell\";\nimport { renderDefaultRowHeader, RowHeader } from \"./headers/rowHeader\";\nimport { ResizeSensor } from \"./interactions/resizeSensor\";\nimport { GuideLayer } from \"./layers/guides\";\nimport { RegionLayer } from \"./layers/regions\";\nimport { Locator } from \"./locator\";\nimport { QuadrantType } from \"./quadrants/tableQuadrant\";\nimport { TableQuadrantStack } from \"./quadrants/tableQuadrantStack\";\nimport { ColumnLoadingOption, RegionCardinality, Regions, SelectionModes, TableLoadingOption, } from \"./regions\";\nimport { TableBody } from \"./tableBody\";\nvar Table = /** @class */ (function (_super) {\n __extends(Table, _super);\n function Table(props, context) {\n var _this = _super.call(this, props, context) || this;\n _this.refHandlers = {\n cellContainer: function (ref) { return (_this.cellContainerElement = ref); },\n columnHeader: function (ref) { return (_this.columnHeaderElement = ref); },\n quadrantStack: function (ref) { return (_this.quadrantStackInstance = ref); },\n rootTable: function (ref) { return (_this.rootTableElement = ref); },\n rowHeader: function (ref) { return (_this.rowHeaderElement = ref); },\n scrollContainer: function (ref) { return (_this.scrollContainerElement = ref); },\n };\n /*\n * This value is set to `true` when all cells finish mounting for the first\n * time. It serves as a signal that we can switch to batch rendering.\n */\n _this.didCompletelyMount = false;\n // Selection resize\n // ----------------\n _this.handleSelectionResizeUp = function (e) { return _this.handleSelectionResize(e, Direction.UP); };\n _this.handleSelectionResizeDown = function (e) { return _this.handleSelectionResize(e, Direction.DOWN); };\n _this.handleSelectionResizeLeft = function (e) { return _this.handleSelectionResize(e, Direction.LEFT); };\n _this.handleSelectionResizeRight = function (e) { return _this.handleSelectionResize(e, Direction.RIGHT); };\n _this.handleSelectionResize = function (e, direction) {\n e.preventDefault();\n e.stopPropagation();\n var _a = _this.state, focusedCell = _a.focusedCell, selectedRegions = _a.selectedRegions;\n if (selectedRegions.length === 0) {\n return;\n }\n var index = FocusedCellUtils.getFocusedOrLastSelectedIndex(selectedRegions, focusedCell);\n var region = selectedRegions[index];\n var nextRegion = SelectionUtils.resizeRegion(region, direction, focusedCell);\n _this.updateSelectedRegionAtIndex(nextRegion, index);\n };\n _this.handleCopy = function (e) {\n var _a = _this.props, getCellClipboardData = _a.getCellClipboardData, onCopy = _a.onCopy;\n var selectedRegions = _this.state.selectedRegions;\n if (getCellClipboardData == null) {\n return;\n }\n // prevent \"real\" copy from being called\n e.preventDefault();\n e.stopPropagation();\n var cells = Regions.enumerateUniqueCells(selectedRegions, _this.grid.numRows, _this.grid.numCols);\n var sparse = Regions.sparseMapCells(cells, getCellClipboardData);\n if (sparse != null) {\n var success = Clipboard.copyCells(sparse);\n CoreUtils.safeInvoke(onCopy, success);\n }\n };\n _this.renderMenu = function (refHandler) {\n var _a;\n var classes = classNames(Classes.TABLE_MENU, (_a = {},\n _a[Classes.TABLE_SELECTION_ENABLED] = Table_1.isSelectionModeEnabled(_this.props, RegionCardinality.FULL_TABLE),\n _a));\n return (React.createElement(\"div\", { className: classes, ref: refHandler, onMouseDown: _this.handleMenuMouseDown }, _this.maybeRenderRegions(_this.styleMenuRegion)));\n };\n _this.handleMenuMouseDown = function (e) {\n // the shift+click interaction expands the region from the focused cell.\n // thus, if shift is pressed we shouldn't move the focused cell.\n _this.selectAll(!e.shiftKey);\n };\n _this.selectAll = function (shouldUpdateFocusedCell) {\n var selectionHandler = _this.getEnabledSelectionHandler(RegionCardinality.FULL_TABLE);\n // clicking on upper left hand corner sets selection to \"all\"\n // regardless of current selection state (clicking twice does not deselect table)\n selectionHandler([Regions.table()]);\n if (shouldUpdateFocusedCell) {\n var newFocusedCellCoordinates = Regions.getFocusCellCoordinatesFromRegion(Regions.table());\n _this.handleFocus(FocusedCellUtils.toFullCoordinates(newFocusedCellCoordinates));\n }\n };\n _this.handleSelectAllHotkey = function (e) {\n // prevent \"real\" select all from happening as well\n e.preventDefault();\n e.stopPropagation();\n // selecting-all via the keyboard should not move the focused cell.\n _this.selectAll(false);\n };\n _this.columnHeaderCellRenderer = function (columnIndex) {\n var props = _this.getColumnProps(columnIndex);\n if (props === undefined) {\n return null;\n }\n var id = props.id, loadingOptions = props.loadingOptions, cellRenderer = props.cellRenderer, columnHeaderCellRenderer = props.columnHeaderCellRenderer, spreadableProps = __rest(props, [\"id\", \"loadingOptions\", \"cellRenderer\", \"columnHeaderCellRenderer\"]);\n var columnLoading = _this.hasLoadingOption(loadingOptions, ColumnLoadingOption.HEADER);\n if (columnHeaderCellRenderer != null) {\n var columnHeaderCell = columnHeaderCellRenderer(columnIndex);\n var columnHeaderCellLoading = columnHeaderCell.props.loading;\n var columnHeaderCellProps = {\n loading: columnHeaderCellLoading != null ? columnHeaderCellLoading : columnLoading,\n };\n return React.cloneElement(columnHeaderCell, columnHeaderCellProps);\n }\n var baseProps = __assign({ index: columnIndex, loading: columnLoading }, spreadableProps);\n if (props.name != null) {\n return React.createElement(ColumnHeaderCell, __assign({}, baseProps));\n }\n else {\n return React.createElement(ColumnHeaderCell, __assign({}, baseProps, { name: Utils.toBase26Alpha(columnIndex) }));\n }\n };\n _this.renderColumnHeader = function (refHandler, resizeHandler, reorderingHandler, showFrozenColumnsOnly) {\n var _a;\n if (showFrozenColumnsOnly === void 0) { showFrozenColumnsOnly = false; }\n var _b = _this.state, focusedCell = _b.focusedCell, selectedRegions = _b.selectedRegions, viewportRect = _b.viewportRect;\n var _c = _this.props, enableMultipleSelection = _c.enableMultipleSelection, enableGhostCells = _c.enableGhostCells, enableColumnReordering = _c.enableColumnReordering, enableColumnResizing = _c.enableColumnResizing, loadingOptions = _c.loadingOptions, maxColumnWidth = _c.maxColumnWidth, minColumnWidth = _c.minColumnWidth, selectedRegionTransform = _c.selectedRegionTransform;\n var classes = classNames(Classes.TABLE_COLUMN_HEADERS, (_a = {},\n _a[Classes.TABLE_SELECTION_ENABLED] = Table_1.isSelectionModeEnabled(_this.props, RegionCardinality.FULL_COLUMNS),\n _a));\n var columnIndices = _this.grid.getColumnIndicesInRect(viewportRect, enableGhostCells);\n var columnIndexStart = showFrozenColumnsOnly ? 0 : columnIndices.columnIndexStart;\n var columnIndexEnd = showFrozenColumnsOnly ? _this.getMaxFrozenColumnIndex() : columnIndices.columnIndexEnd;\n return (React.createElement(\"div\", { className: classes },\n React.createElement(ColumnHeader, { enableMultipleSelection: enableMultipleSelection, cellRenderer: _this.columnHeaderCellRenderer, focusedCell: focusedCell, grid: _this.grid, isReorderable: enableColumnReordering, isResizable: enableColumnResizing, loading: _this.hasLoadingOption(loadingOptions, TableLoadingOption.COLUMN_HEADERS), locator: _this.locator, maxColumnWidth: maxColumnWidth, measurableElementRef: refHandler, minColumnWidth: minColumnWidth, onColumnWidthChanged: _this.handleColumnWidthChanged, onFocusedCell: _this.handleFocus, onLayoutLock: _this.handleLayoutLock, onReordered: _this.handleColumnsReordered, onReordering: reorderingHandler, onResizeGuide: resizeHandler, onSelection: _this.getEnabledSelectionHandler(RegionCardinality.FULL_COLUMNS), selectedRegions: selectedRegions, selectedRegionTransform: selectedRegionTransform, columnIndexStart: columnIndexStart, columnIndexEnd: columnIndexEnd }, _this.props.children),\n _this.maybeRenderRegions(_this.styleColumnHeaderRegion)));\n };\n _this.renderRowHeader = function (refHandler, resizeHandler, reorderingHandler, showFrozenRowsOnly) {\n var _a;\n if (showFrozenRowsOnly === void 0) { showFrozenRowsOnly = false; }\n var _b = _this.state, focusedCell = _b.focusedCell, selectedRegions = _b.selectedRegions, viewportRect = _b.viewportRect;\n var _c = _this.props, enableMultipleSelection = _c.enableMultipleSelection, enableGhostCells = _c.enableGhostCells, enableRowReordering = _c.enableRowReordering, enableRowResizing = _c.enableRowResizing, loadingOptions = _c.loadingOptions, maxRowHeight = _c.maxRowHeight, minRowHeight = _c.minRowHeight, rowHeaderCellRenderer = _c.rowHeaderCellRenderer, selectedRegionTransform = _c.selectedRegionTransform;\n var classes = classNames(Classes.TABLE_ROW_HEADERS, (_a = {},\n _a[Classes.TABLE_SELECTION_ENABLED] = Table_1.isSelectionModeEnabled(_this.props, RegionCardinality.FULL_ROWS),\n _a));\n var rowIndices = _this.grid.getRowIndicesInRect(viewportRect, enableGhostCells);\n var rowIndexStart = showFrozenRowsOnly ? 0 : rowIndices.rowIndexStart;\n var rowIndexEnd = showFrozenRowsOnly ? _this.getMaxFrozenRowIndex() : rowIndices.rowIndexEnd;\n return (React.createElement(\"div\", { className: classes, ref: refHandler },\n React.createElement(RowHeader, { enableMultipleSelection: enableMultipleSelection, focusedCell: focusedCell, grid: _this.grid, locator: _this.locator, isReorderable: enableRowReordering, isResizable: enableRowResizing, loading: _this.hasLoadingOption(loadingOptions, TableLoadingOption.ROW_HEADERS), maxRowHeight: maxRowHeight, minRowHeight: minRowHeight, onFocusedCell: _this.handleFocus, onLayoutLock: _this.handleLayoutLock, onResizeGuide: resizeHandler, onReordered: _this.handleRowsReordered, onReordering: reorderingHandler, onRowHeightChanged: _this.handleRowHeightChanged, onSelection: _this.getEnabledSelectionHandler(RegionCardinality.FULL_ROWS), rowHeaderCellRenderer: rowHeaderCellRenderer, selectedRegions: selectedRegions, selectedRegionTransform: selectedRegionTransform, rowIndexStart: rowIndexStart, rowIndexEnd: rowIndexEnd }),\n _this.maybeRenderRegions(_this.styleRowHeaderRegion)));\n };\n _this.bodyCellRenderer = function (rowIndex, columnIndex) {\n var columnProps = _this.getColumnProps(columnIndex);\n if (columnProps === undefined) {\n return null;\n }\n var id = columnProps.id, loadingOptions = columnProps.loadingOptions, cellRenderer = columnProps.cellRenderer, columnHeaderCellRenderer = columnProps.columnHeaderCellRenderer, name = columnProps.name, nameRenderer = columnProps.nameRenderer, restColumnProps = __rest(columnProps, [\"id\", \"loadingOptions\", \"cellRenderer\", \"columnHeaderCellRenderer\", \"name\", \"nameRenderer\"]);\n var cell = cellRenderer(rowIndex, columnIndex);\n var _a = cell.props.loading, loading = _a === void 0 ? _this.hasLoadingOption(loadingOptions, ColumnLoadingOption.CELLS) : _a;\n var cellProps = __assign(__assign({}, restColumnProps), { loading: loading });\n return React.cloneElement(cell, cellProps);\n };\n _this.renderBody = function (quadrantType, showFrozenRowsOnly, showFrozenColumnsOnly) {\n if (showFrozenRowsOnly === void 0) { showFrozenRowsOnly = false; }\n if (showFrozenColumnsOnly === void 0) { showFrozenColumnsOnly = false; }\n var _a = _this.state, focusedCell = _a.focusedCell, numFrozenColumns = _a.numFrozenColumnsClamped, numFrozenRows = _a.numFrozenRowsClamped, selectedRegions = _a.selectedRegions, viewportRect = _a.viewportRect;\n var _b = _this.props, enableMultipleSelection = _b.enableMultipleSelection, enableGhostCells = _b.enableGhostCells, loadingOptions = _b.loadingOptions, bodyContextMenuRenderer = _b.bodyContextMenuRenderer, selectedRegionTransform = _b.selectedRegionTransform;\n var rowIndices = _this.grid.getRowIndicesInRect(viewportRect, enableGhostCells);\n var columnIndices = _this.grid.getColumnIndicesInRect(viewportRect, enableGhostCells);\n // start beyond the frozen area if rendering unrelated quadrants, so we\n // don't render duplicate cells underneath the frozen ones.\n var columnIndexStart = showFrozenColumnsOnly ? 0 : columnIndices.columnIndexStart + numFrozenColumns;\n var rowIndexStart = showFrozenRowsOnly ? 0 : rowIndices.rowIndexStart + numFrozenRows;\n // if rendering frozen rows/columns, subtract one to convert to\n // 0-indexing. if the 1-indexed value is 0, this sets the end index\n // to -1, which avoids rendering absent frozen rows/columns at all.\n var columnIndexEnd = showFrozenColumnsOnly ? numFrozenColumns - 1 : columnIndices.columnIndexEnd;\n var rowIndexEnd = showFrozenRowsOnly ? numFrozenRows - 1 : rowIndices.rowIndexEnd;\n // the main quadrant contains all cells in the table, so listen only to that quadrant\n var onCompleteRender = quadrantType === QuadrantType.MAIN ? _this.handleCompleteRender : undefined;\n return (React.createElement(\"div\", null,\n React.createElement(TableBody, { enableMultipleSelection: enableMultipleSelection, cellRenderer: _this.bodyCellRenderer, focusedCell: focusedCell, grid: _this.grid, loading: _this.hasLoadingOption(loadingOptions, TableLoadingOption.CELLS), locator: _this.locator, onCompleteRender: onCompleteRender, onFocusedCell: _this.handleFocus, onSelection: _this.getEnabledSelectionHandler(RegionCardinality.CELLS), bodyContextMenuRenderer: bodyContextMenuRenderer, renderMode: _this.getNormalizedRenderMode(), selectedRegions: selectedRegions, selectedRegionTransform: selectedRegionTransform, viewportRect: viewportRect, columnIndexStart: columnIndexStart, columnIndexEnd: columnIndexEnd, rowIndexStart: rowIndexStart, rowIndexEnd: rowIndexEnd, numFrozenColumns: showFrozenColumnsOnly ? numFrozenColumns : undefined, numFrozenRows: showFrozenRowsOnly ? numFrozenRows : undefined }),\n _this.maybeRenderRegions(_this.styleBodyRegion, quadrantType)));\n };\n _this.handleCompleteRender = function () {\n // the first onCompleteRender is triggered before the viewportRect is\n // defined and the second after the viewportRect has been set. the cells\n // will only actually render once the viewportRect is defined though, so\n // we defer invoking onCompleteRender until that check passes.\n if (_this.state.viewportRect != null) {\n CoreUtils.safeInvoke(_this.props.onCompleteRender);\n _this.didCompletelyMount = true;\n }\n };\n _this.handleFocusMoveLeft = function (e) { return _this.handleFocusMove(e, \"left\"); };\n _this.handleFocusMoveLeftInternal = function (e) { return _this.handleFocusMoveInternal(e, \"left\"); };\n _this.handleFocusMoveRight = function (e) { return _this.handleFocusMove(e, \"right\"); };\n _this.handleFocusMoveRightInternal = function (e) { return _this.handleFocusMoveInternal(e, \"right\"); };\n _this.handleFocusMoveUp = function (e) { return _this.handleFocusMove(e, \"up\"); };\n _this.handleFocusMoveUpInternal = function (e) { return _this.handleFocusMoveInternal(e, \"up\"); };\n _this.handleFocusMoveDown = function (e) { return _this.handleFocusMove(e, \"down\"); };\n _this.handleFocusMoveDownInternal = function (e) { return _this.handleFocusMoveInternal(e, \"down\"); };\n _this.styleBodyRegion = function (region, quadrantType) {\n var numFrozenColumns = _this.props.numFrozenColumns;\n var cardinality = Regions.getRegionCardinality(region);\n var style = _this.grid.getRegionStyle(region);\n // ensure we're not showing borders at the boundary of the frozen-columns area\n var canHideRightBorder = (quadrantType === QuadrantType.TOP_LEFT || quadrantType === QuadrantType.LEFT) &&\n numFrozenColumns != null &&\n numFrozenColumns > 0;\n var fixedHeight = _this.grid.getHeight();\n var fixedWidth = _this.grid.getWidth();\n // include a correction in some cases to hide borders along quadrant boundaries\n var alignmentCorrection = 1;\n var alignmentCorrectionString = \"-\" + alignmentCorrection + \"px\";\n switch (cardinality) {\n case RegionCardinality.CELLS:\n return style;\n case RegionCardinality.FULL_COLUMNS:\n style.top = alignmentCorrectionString;\n style.height = fixedHeight + alignmentCorrection;\n return style;\n case RegionCardinality.FULL_ROWS:\n style.left = alignmentCorrectionString;\n style.width = fixedWidth + alignmentCorrection;\n if (canHideRightBorder) {\n style.right = alignmentCorrectionString;\n }\n return style;\n case RegionCardinality.FULL_TABLE:\n style.left = alignmentCorrectionString;\n style.top = alignmentCorrectionString;\n style.width = fixedWidth + alignmentCorrection;\n style.height = fixedHeight + alignmentCorrection;\n if (canHideRightBorder) {\n style.right = alignmentCorrectionString;\n }\n return style;\n default:\n return { display: \"none\" };\n }\n };\n _this.styleMenuRegion = function (region) {\n var viewportRect = _this.state.viewportRect;\n if (viewportRect == null) {\n return {};\n }\n var cardinality = Regions.getRegionCardinality(region);\n var style = _this.grid.getRegionStyle(region);\n switch (cardinality) {\n case RegionCardinality.FULL_TABLE:\n style.right = \"0px\";\n style.bottom = \"0px\";\n style.top = \"0px\";\n style.left = \"0px\";\n style.borderBottom = \"none\";\n style.borderRight = \"none\";\n return style;\n default:\n return { display: \"none\" };\n }\n };\n _this.styleColumnHeaderRegion = function (region) {\n var viewportRect = _this.state.viewportRect;\n if (viewportRect == null) {\n return {};\n }\n var cardinality = Regions.getRegionCardinality(region);\n var style = _this.grid.getRegionStyle(region);\n switch (cardinality) {\n case RegionCardinality.FULL_TABLE:\n style.left = \"-1px\";\n style.borderLeft = \"none\";\n style.bottom = \"-1px\";\n return style;\n case RegionCardinality.FULL_COLUMNS:\n style.bottom = \"-1px\";\n return style;\n default:\n return { display: \"none\" };\n }\n };\n _this.styleRowHeaderRegion = function (region) {\n var viewportRect = _this.state.viewportRect;\n if (viewportRect == null) {\n return {};\n }\n var cardinality = Regions.getRegionCardinality(region);\n var style = _this.grid.getRegionStyle(region);\n switch (cardinality) {\n case RegionCardinality.FULL_TABLE:\n style.top = \"-1px\";\n style.borderTop = \"none\";\n style.right = \"-1px\";\n return style;\n case RegionCardinality.FULL_ROWS:\n style.right = \"-1px\";\n return style;\n default:\n return { display: \"none\" };\n }\n };\n _this.handleColumnWidthChanged = function (columnIndex, width) {\n var selectedRegions = _this.state.selectedRegions;\n var columnWidths = _this.state.columnWidths.slice();\n if (Regions.hasFullTable(selectedRegions)) {\n for (var col = 0; col < columnWidths.length; col++) {\n columnWidths[col] = width;\n }\n }\n if (Regions.hasFullColumn(selectedRegions, columnIndex)) {\n Regions.eachUniqueFullColumn(selectedRegions, function (col) {\n columnWidths[col] = width;\n });\n }\n else {\n columnWidths[columnIndex] = width;\n }\n _this.invalidateGrid();\n _this.setState({ columnWidths: columnWidths });\n var onColumnWidthChanged = _this.props.onColumnWidthChanged;\n if (onColumnWidthChanged != null) {\n onColumnWidthChanged(columnIndex, width);\n }\n };\n _this.handleRowHeightChanged = function (rowIndex, height) {\n var selectedRegions = _this.state.selectedRegions;\n var rowHeights = _this.state.rowHeights.slice();\n if (Regions.hasFullTable(selectedRegions)) {\n for (var row = 0; row < rowHeights.length; row++) {\n rowHeights[row] = height;\n }\n }\n if (Regions.hasFullRow(selectedRegions, rowIndex)) {\n Regions.eachUniqueFullRow(selectedRegions, function (row) {\n rowHeights[row] = height;\n });\n }\n else {\n rowHeights[rowIndex] = height;\n }\n _this.invalidateGrid();\n _this.setState({ rowHeights: rowHeights });\n var onRowHeightChanged = _this.props.onRowHeightChanged;\n if (onRowHeightChanged != null) {\n onRowHeightChanged(rowIndex, height);\n }\n };\n _this.handleRootScroll = function (_event) {\n // Bug #211 - Native browser text selection events can cause the root\n // element to scroll even though it has a overflow:hidden style. The\n // only viable solution to this is to unscroll the element after the\n // browser scrolls it.\n if (_this.rootTableElement != null) {\n _this.rootTableElement.scrollLeft = 0;\n _this.rootTableElement.scrollTop = 0;\n }\n };\n _this.handleBodyScroll = function (event) {\n // Prevent the event from propagating to avoid a resize event on the\n // resize sensor.\n event.stopPropagation();\n if (_this.locator != null && !_this.state.isLayoutLocked) {\n var viewportRect = _this.locator.getViewportRect();\n _this.updateViewportRect(viewportRect);\n }\n };\n _this.clearSelection = function (_selectedRegions) {\n _this.handleSelection([]);\n };\n // no good way to call arrow-key keyboard events from tests\n /* istanbul ignore next */\n _this.handleFocusMove = function (e, direction) {\n e.preventDefault();\n e.stopPropagation();\n var focusedCell = _this.state.focusedCell;\n if (focusedCell == null) {\n // halt early if we have a selectedRegionTransform or something else in play that nixes\n // the focused cell.\n return;\n }\n var newFocusedCell = {\n col: focusedCell.col,\n focusSelectionIndex: 0,\n row: focusedCell.row,\n };\n switch (direction) {\n case \"up\":\n newFocusedCell.row -= 1;\n break;\n case \"down\":\n newFocusedCell.row += 1;\n break;\n case \"left\":\n newFocusedCell.col -= 1;\n break;\n case \"right\":\n newFocusedCell.col += 1;\n break;\n default:\n break;\n }\n if (newFocusedCell.row < 0 ||\n newFocusedCell.row >= _this.grid.numRows ||\n newFocusedCell.col < 0 ||\n newFocusedCell.col >= _this.grid.numCols) {\n return;\n }\n // change selection to match new focus cell location\n var newSelectionRegions = [Regions.cell(newFocusedCell.row, newFocusedCell.col)];\n var selectedRegionTransform = _this.props.selectedRegionTransform;\n var transformedSelectionRegions = selectedRegionTransform != null\n ? newSelectionRegions.map(function (region) { return selectedRegionTransform(region, e); })\n : newSelectionRegions;\n _this.handleSelection(transformedSelectionRegions);\n _this.handleFocus(newFocusedCell);\n // keep the focused cell in view\n _this.scrollBodyToFocusedCell(newFocusedCell);\n };\n // no good way to call arrow-key keyboard events from tests\n /* istanbul ignore next */\n _this.handleFocusMoveInternal = function (e, direction) {\n e.preventDefault();\n e.stopPropagation();\n var _a = _this.state, focusedCell = _a.focusedCell, selectedRegions = _a.selectedRegions;\n if (focusedCell == null) {\n // halt early if we have a selectedRegionTransform or something else in play that nixes\n // the focused cell.\n return;\n }\n var newFocusedCell = {\n col: focusedCell.col,\n focusSelectionIndex: focusedCell.focusSelectionIndex,\n row: focusedCell.row,\n };\n // if we're not in any particular focus cell region, and one exists, go to the first cell of the first one\n if (focusedCell.focusSelectionIndex == null && selectedRegions.length > 0) {\n var focusCellRegion = Regions.getCellRegionFromRegion(selectedRegions[0], _this.grid.numRows, _this.grid.numCols);\n newFocusedCell = {\n col: focusCellRegion.cols[0],\n focusSelectionIndex: 0,\n row: focusCellRegion.rows[0],\n };\n }\n else {\n if (selectedRegions.length === 0) {\n _this.handleFocusMove(e, direction);\n return;\n }\n var focusCellRegion = Regions.getCellRegionFromRegion(selectedRegions[focusedCell.focusSelectionIndex], _this.grid.numRows, _this.grid.numCols);\n if (focusCellRegion.cols[0] === focusCellRegion.cols[1] &&\n focusCellRegion.rows[0] === focusCellRegion.rows[1] &&\n selectedRegions.length === 1) {\n _this.handleFocusMove(e, direction);\n return;\n }\n switch (direction) {\n case \"up\":\n newFocusedCell = _this.moveFocusCell(\"row\", \"col\", true, newFocusedCell, focusCellRegion);\n break;\n case \"left\":\n newFocusedCell = _this.moveFocusCell(\"col\", \"row\", true, newFocusedCell, focusCellRegion);\n break;\n case \"down\":\n newFocusedCell = _this.moveFocusCell(\"row\", \"col\", false, newFocusedCell, focusCellRegion);\n break;\n case \"right\":\n newFocusedCell = _this.moveFocusCell(\"col\", \"row\", false, newFocusedCell, focusCellRegion);\n break;\n default:\n break;\n }\n }\n if (newFocusedCell.row < 0 ||\n newFocusedCell.row >= _this.grid.numRows ||\n newFocusedCell.col < 0 ||\n newFocusedCell.col >= _this.grid.numCols) {\n return;\n }\n _this.handleFocus(newFocusedCell);\n // keep the focused cell in view\n _this.scrollBodyToFocusedCell(newFocusedCell);\n };\n _this.scrollBodyToFocusedCell = function (focusedCell) {\n var row = focusedCell.row, col = focusedCell.col;\n var viewportRect = _this.state.viewportRect;\n // sort keys in normal CSS position order (per the trusty TRBL/\"trouble\" acronym)\n // tslint:disable:object-literal-sort-keys\n var viewportBounds = {\n top: viewportRect.top,\n right: viewportRect.left + viewportRect.width,\n bottom: viewportRect.top + viewportRect.height,\n left: viewportRect.left,\n };\n var focusedCellBounds = {\n top: _this.grid.getCumulativeHeightBefore(row),\n right: _this.grid.getCumulativeWidthAt(col),\n bottom: _this.grid.getCumulativeHeightAt(row),\n left: _this.grid.getCumulativeWidthBefore(col),\n };\n // tslint:enable:object-literal-sort-keys\n var focusedCellWidth = focusedCellBounds.right - focusedCellBounds.left;\n var focusedCellHeight = focusedCellBounds.bottom - focusedCellBounds.top;\n var isFocusedCellWiderThanViewport = focusedCellWidth > viewportRect.width;\n var isFocusedCellTallerThanViewport = focusedCellHeight > viewportRect.height;\n var ss = {};\n // keep the top end of an overly tall focused cell in view when moving left and right\n // (without this OR check, the body seesaws to fit the top end, then the bottom end, etc.)\n if (focusedCellBounds.top < viewportBounds.top || isFocusedCellTallerThanViewport) {\n // scroll up (minus one pixel to avoid clipping the focused-cell border)\n ss.nextScrollTop = Math.max(0, focusedCellBounds.top - 1);\n }\n else if (focusedCellBounds.bottom > viewportBounds.bottom) {\n // scroll down\n var scrollDelta = focusedCellBounds.bottom - viewportBounds.bottom;\n ss.nextScrollTop = viewportBounds.top + scrollDelta;\n }\n // keep the left end of an overly wide focused cell in view when moving up and down\n if (focusedCellBounds.left < viewportBounds.left || isFocusedCellWiderThanViewport) {\n // scroll left (again minus one additional pixel)\n ss.nextScrollLeft = Math.max(0, focusedCellBounds.left - 1);\n }\n else if (focusedCellBounds.right > viewportBounds.right) {\n // scroll right\n var scrollDelta = focusedCellBounds.right - viewportBounds.right;\n ss.nextScrollLeft = viewportBounds.left + scrollDelta;\n }\n _this.syncViewportPosition(ss);\n };\n _this.handleFocus = function (focusedCell) {\n if (!_this.props.enableFocusedCell) {\n // don't set focus state if focus is not allowed\n return;\n }\n // only set focused cell state if not specified in props\n if (_this.props.focusedCell == null) {\n _this.setState({ focusedCell: focusedCell });\n }\n CoreUtils.safeInvoke(_this.props.onFocusedCell, focusedCell);\n };\n _this.handleSelection = function (selectedRegions) {\n // only set selectedRegions state if not specified in props\n if (_this.props.selectedRegions == null) {\n _this.setState({ selectedRegions: selectedRegions });\n }\n var onSelection = _this.props.onSelection;\n if (onSelection != null) {\n onSelection(selectedRegions);\n }\n };\n _this.handleColumnsReordering = function (verticalGuides) {\n _this.setState({ isReordering: true, verticalGuides: verticalGuides });\n };\n _this.handleColumnsReordered = function (oldIndex, newIndex, length) {\n _this.setState({ isReordering: false, verticalGuides: undefined });\n CoreUtils.safeInvoke(_this.props.onColumnsReordered, oldIndex, newIndex, length);\n };\n _this.handleRowsReordering = function (horizontalGuides) {\n _this.setState({ isReordering: true, horizontalGuides: horizontalGuides });\n };\n _this.handleRowsReordered = function (oldIndex, newIndex, length) {\n _this.setState({ isReordering: false, horizontalGuides: undefined });\n CoreUtils.safeInvoke(_this.props.onRowsReordered, oldIndex, newIndex, length);\n };\n _this.handleLayoutLock = function (isLayoutLocked) {\n if (isLayoutLocked === void 0) { isLayoutLocked = false; }\n _this.setState({ isLayoutLocked: isLayoutLocked });\n };\n _this.hasLoadingOption = function (loadingOptions, loadingOption) {\n if (loadingOptions == null) {\n return undefined;\n }\n return loadingOptions.indexOf(loadingOption) >= 0;\n };\n _this.updateViewportRect = function (nextViewportRect) {\n var viewportRect = _this.state.viewportRect;\n _this.setState({ viewportRect: nextViewportRect });\n var didViewportChange = (viewportRect != null && !viewportRect.equals(nextViewportRect)) ||\n (viewportRect == null && nextViewportRect != null);\n if (didViewportChange) {\n _this.invokeOnVisibleCellsChangeCallback(nextViewportRect);\n }\n };\n _this.getMaxFrozenColumnIndex = function () {\n var numFrozenColumns = _this.state.numFrozenColumnsClamped;\n return numFrozenColumns != null ? numFrozenColumns - 1 : undefined;\n };\n _this.getMaxFrozenRowIndex = function () {\n var numFrozenRows = _this.state.numFrozenRowsClamped;\n return numFrozenRows != null ? numFrozenRows - 1 : undefined;\n };\n _this.handleColumnResizeGuide = function (verticalGuides) {\n _this.setState({ verticalGuides: verticalGuides });\n };\n _this.handleRowResizeGuide = function (horizontalGuides) {\n _this.setState({ horizontalGuides: horizontalGuides });\n };\n var _a = _this.props, children = _a.children, columnWidths = _a.columnWidths, defaultRowHeight = _a.defaultRowHeight, defaultColumnWidth = _a.defaultColumnWidth, numRows = _a.numRows, rowHeights = _a.rowHeights;\n var childrenArray = React.Children.toArray(children);\n var columnIdToIndex = Table_1.createColumnIdIndex(childrenArray);\n // Create height/width arrays using the lengths from props and\n // children, the default values from props, and finally any sparse\n // arrays passed into props.\n var newColumnWidths = childrenArray.map(function () { return defaultColumnWidth; });\n newColumnWidths = Utils.assignSparseValues(newColumnWidths, columnWidths);\n var newRowHeights = Utils.times(numRows, function () { return defaultRowHeight; });\n newRowHeights = Utils.assignSparseValues(newRowHeights, rowHeights);\n var selectedRegions = props.selectedRegions == null ? [] : props.selectedRegions;\n var focusedCell = FocusedCellUtils.getInitialFocusedCell(props.enableFocusedCell, props.focusedCell, undefined, selectedRegions);\n _this.state = {\n childrenArray: childrenArray,\n columnIdToIndex: columnIdToIndex,\n columnWidths: newColumnWidths,\n focusedCell: focusedCell,\n isLayoutLocked: false,\n isReordering: false,\n numFrozenColumnsClamped: clampNumFrozenColumns(props),\n numFrozenRowsClamped: clampNumFrozenRows(props),\n rowHeights: newRowHeights,\n selectedRegions: selectedRegions,\n };\n return _this;\n }\n Table_1 = Table;\n Table.getDerivedStateFromProps = function (props, state) {\n var children = props.children, defaultColumnWidth = props.defaultColumnWidth, defaultRowHeight = props.defaultRowHeight, enableFocusedCell = props.enableFocusedCell, focusedCell = props.focusedCell, numRows = props.numRows, selectedRegions = props.selectedRegions, selectionModes = props.selectionModes;\n // assign values from state if uncontrolled\n var columnWidths = props.columnWidths, rowHeights = props.rowHeights;\n if (columnWidths == null) {\n columnWidths = state.columnWidths;\n }\n if (rowHeights == null) {\n rowHeights = state.rowHeights;\n }\n var newChildrenArray = React.Children.toArray(children);\n var didChildrenChange = newChildrenArray !== state.childrenArray;\n var numCols = newChildrenArray.length;\n var newColumnWidths = columnWidths;\n if (columnWidths !== state.columnWidths || didChildrenChange) {\n // Try to maintain widths of columns by looking up the width of the\n // column that had the same `ID` prop. If none is found, use the\n // previous width at the same index.\n var previousColumnWidths = newChildrenArray.map(function (child, index) {\n var mappedIndex = state.columnIdToIndex[child.props.id];\n return state.columnWidths[mappedIndex != null ? mappedIndex : index];\n });\n // Make sure the width/height arrays have the correct length, but keep\n // as many existing widths/heights as possible. Also, apply the\n // sparse width/heights from props.\n newColumnWidths = Utils.arrayOfLength(newColumnWidths, numCols, defaultColumnWidth);\n newColumnWidths = Utils.assignSparseValues(newColumnWidths, previousColumnWidths);\n newColumnWidths = Utils.assignSparseValues(newColumnWidths, columnWidths);\n }\n var newRowHeights = rowHeights;\n if (rowHeights !== state.rowHeights || numRows !== state.rowHeights.length) {\n newRowHeights = Utils.arrayOfLength(newRowHeights, numRows, defaultRowHeight);\n newRowHeights = Utils.assignSparseValues(newRowHeights, rowHeights);\n }\n var newSelectedRegions = selectedRegions;\n if (selectedRegions == null) {\n // if we're in uncontrolled mode, filter out all selected regions that don't\n // fit in the current new table dimensions\n newSelectedRegions = state.selectedRegions.filter(function (region) {\n var regionCardinality = Regions.getRegionCardinality(region);\n return (Table_1.isSelectionModeEnabled(props, regionCardinality, selectionModes) &&\n Regions.isRegionValidForTable(region, numRows, numCols));\n });\n }\n var newFocusedCell = FocusedCellUtils.getInitialFocusedCell(enableFocusedCell, focusedCell, state.focusedCell, newSelectedRegions);\n var nextState = {\n childrenArray: newChildrenArray,\n columnIdToIndex: didChildrenChange ? Table_1.createColumnIdIndex(newChildrenArray) : state.columnIdToIndex,\n columnWidths: newColumnWidths,\n focusedCell: newFocusedCell,\n numFrozenColumnsClamped: clampNumFrozenColumns(props),\n numFrozenRowsClamped: clampNumFrozenRows(props),\n rowHeights: newRowHeights,\n selectedRegions: newSelectedRegions,\n };\n if (!CoreUtils.deepCompareKeys(state, nextState, Table_1.SHALLOW_COMPARE_STATE_KEYS_DENYLIST)) {\n return nextState;\n }\n return null;\n };\n Table.createColumnIdIndex = function (children) {\n var columnIdToIndex = {};\n for (var i = 0; i < children.length; i++) {\n var key = children[i].props.id;\n if (key != null) {\n columnIdToIndex[String(key)] = i;\n }\n }\n return columnIdToIndex;\n };\n Table.isSelectionModeEnabled = function (props, selectionMode, selectionModes) {\n if (selectionModes === void 0) { selectionModes = props.selectionModes; }\n var children = props.children, numRows = props.numRows;\n var numColumns = React.Children.count(children);\n return selectionModes.indexOf(selectionMode) >= 0 && numRows > 0 && numColumns > 0;\n };\n // Instance methods\n // ================\n /**\n * __Experimental!__ Resizes all rows in the table to the approximate\n * maximum height of wrapped cell content in each row. Works best when each\n * cell contains plain text of a consistent font style (though font style\n * may vary between cells). Since this function uses approximate\n * measurements, results may not be perfect.\n *\n * Approximation parameters can be configured for the entire table or on a\n * per-cell basis. Default values are fine-tuned to work well with default\n * Table font styles.\n */\n Table.prototype.resizeRowsByApproximateHeight = function (getCellText, options) {\n var numRows = this.props.numRows;\n var columnWidths = this.state.columnWidths;\n var numColumns = columnWidths.length;\n var rowHeights = [];\n for (var rowIndex = 0; rowIndex < numRows; rowIndex++) {\n var maxCellHeightInRow = 0;\n // iterate through each cell in the row\n for (var columnIndex = 0; columnIndex < numColumns; columnIndex++) {\n // resolve all parameters to raw values\n var _a = this.resolveResizeRowsByApproximateHeightOptions(options, rowIndex, columnIndex), approxCharWidth = _a.getApproximateCharWidth, approxLineHeight = _a.getApproximateLineHeight, horizontalPadding = _a.getCellHorizontalPadding, numBufferLines = _a.getNumBufferLines;\n var cellText = getCellText(rowIndex, columnIndex);\n var approxCellHeight = Utils.getApproxCellHeight(cellText, columnWidths[columnIndex], approxCharWidth, approxLineHeight, horizontalPadding, numBufferLines);\n if (approxCellHeight > maxCellHeightInRow) {\n maxCellHeightInRow = approxCellHeight;\n }\n }\n rowHeights.push(maxCellHeightInRow);\n }\n this.invalidateGrid();\n this.setState({ rowHeights: rowHeights });\n };\n /**\n * Resize all rows in the table to the height of the tallest visible cell in the specified columns.\n * If no indices are provided, default to using the tallest visible cell from all columns in view.\n */\n Table.prototype.resizeRowsByTallestCell = function (columnIndices) {\n var _this = this;\n var tallest = 0;\n if (columnIndices == null) {\n // Consider all columns currently in viewport\n var viewportColumnIndices = this.grid.getColumnIndicesInRect(this.state.viewportRect);\n for (var col = viewportColumnIndices.columnIndexStart; col <= viewportColumnIndices.columnIndexEnd; col++) {\n tallest = Math.max(tallest, this.locator.getTallestVisibleCellInColumn(col));\n }\n }\n else {\n var columnIndicesArray = Array.isArray(columnIndices) ? columnIndices : [columnIndices];\n var tallestByColumns = columnIndicesArray.map(function (col) { return _this.locator.getTallestVisibleCellInColumn(col); });\n tallest = Math.max.apply(Math, tallestByColumns);\n }\n var rowHeights = Array(this.state.rowHeights.length).fill(tallest);\n this.invalidateGrid();\n this.setState({ rowHeights: rowHeights });\n };\n /**\n * Scrolls the table to the target region in a fashion appropriate to the target region's\n * cardinality:\n *\n * - CELLS: Scroll the top-left cell in the target region to the top-left corner of the viewport.\n * - FULL_ROWS: Scroll the top-most row in the target region to the top of the viewport.\n * - FULL_COLUMNS: Scroll the left-most column in the target region to the left side of the viewport.\n * - FULL_TABLE: Scroll the top-left cell in the table to the top-left corner of the viewport.\n *\n * If there are active frozen rows and/or columns, the target region will be positioned in the\n * top-left corner of the non-frozen area (unless the target region itself is in the frozen\n * area).\n *\n * If the target region is close to the bottom-right corner of the table, this function will\n * simply scroll the target region as close to the top-left as possible until the bottom-right\n * corner is reached.\n */\n Table.prototype.scrollToRegion = function (region) {\n var _a = this.state, numFrozenColumns = _a.numFrozenColumnsClamped, numFrozenRows = _a.numFrozenRowsClamped;\n var _b = this.state.viewportRect, currScrollLeft = _b.left, currScrollTop = _b.top;\n var _c = ScrollUtils.getScrollPositionForRegion(region, currScrollLeft, currScrollTop, this.grid.getCumulativeWidthBefore, this.grid.getCumulativeHeightBefore, numFrozenRows, numFrozenColumns), scrollLeft = _c.scrollLeft, scrollTop = _c.scrollTop;\n var correctedScrollLeft = this.shouldDisableHorizontalScroll() ? 0 : scrollLeft;\n var correctedScrollTop = this.shouldDisableVerticalScroll() ? 0 : scrollTop;\n // defer to the quadrant stack to keep all quadrant positions in sync\n this.quadrantStackInstance.scrollToPosition(correctedScrollLeft, correctedScrollTop);\n };\n // React lifecycle\n // ===============\n Table.prototype.getChildContext = function () {\n return {\n enableColumnInteractionBar: this.props.enableColumnInteractionBar,\n };\n };\n Table.prototype.shouldComponentUpdate = function (nextProps, nextState) {\n var propKeysDenylist = { exclude: Table_1.SHALLOW_COMPARE_PROP_KEYS_DENYLIST };\n var stateKeysDenylist = { exclude: Table_1.SHALLOW_COMPARE_STATE_KEYS_DENYLIST };\n return (!CoreUtils.shallowCompareKeys(this.props, nextProps, propKeysDenylist) ||\n !CoreUtils.shallowCompareKeys(this.state, nextState, stateKeysDenylist) ||\n !CoreUtils.deepCompareKeys(this.props, nextProps, Table_1.SHALLOW_COMPARE_PROP_KEYS_DENYLIST) ||\n !CoreUtils.deepCompareKeys(this.state, nextState, Table_1.SHALLOW_COMPARE_STATE_KEYS_DENYLIST));\n };\n Table.prototype.render = function () {\n var _a;\n var _b = this.props, children = _b.children, className = _b.className, enableRowHeader = _b.enableRowHeader, loadingOptions = _b.loadingOptions, numRows = _b.numRows, enableColumnInteractionBar = _b.enableColumnInteractionBar;\n var _c = this.state, horizontalGuides = _c.horizontalGuides, numFrozenColumnsClamped = _c.numFrozenColumnsClamped, numFrozenRowsClamped = _c.numFrozenRowsClamped, verticalGuides = _c.verticalGuides;\n if (!this.gridDimensionsMatchProps()) {\n // Ensure we're rendering the correct number of rows & columns\n this.invalidateGrid();\n }\n this.validateGrid();\n var classes = classNames(Classes.TABLE_CONTAINER, (_a = {},\n _a[Classes.TABLE_REORDERING] = this.state.isReordering,\n _a[Classes.TABLE_NO_VERTICAL_SCROLL] = this.shouldDisableVerticalScroll(),\n _a[Classes.TABLE_NO_HORIZONTAL_SCROLL] = this.shouldDisableHorizontalScroll(),\n _a[Classes.TABLE_SELECTION_ENABLED] = Table_1.isSelectionModeEnabled(this.props, RegionCardinality.CELLS),\n _a[Classes.TABLE_NO_ROWS] = numRows === 0,\n _a), className);\n return (React.createElement(\"div\", { className: classes, ref: this.refHandlers.rootTable, onScroll: this.handleRootScroll },\n React.createElement(TableQuadrantStack, { bodyRef: this.refHandlers.cellContainer, bodyRenderer: this.renderBody, columnHeaderCellRenderer: this.renderColumnHeader, columnHeaderRef: this.refHandlers.columnHeader, enableColumnInteractionBar: enableColumnInteractionBar, enableRowHeader: enableRowHeader, grid: this.grid, handleColumnResizeGuide: this.handleColumnResizeGuide, handleColumnsReordering: this.handleColumnsReordering, handleRowResizeGuide: this.handleRowResizeGuide, handleRowsReordering: this.handleRowsReordering, isHorizontalScrollDisabled: this.shouldDisableHorizontalScroll(), isVerticalScrollDisabled: this.shouldDisableVerticalScroll(), loadingOptions: loadingOptions, numColumns: React.Children.count(children), numFrozenColumns: numFrozenColumnsClamped, numFrozenRows: numFrozenRowsClamped, numRows: numRows, onScroll: this.handleBodyScroll, ref: this.refHandlers.quadrantStack, menuRenderer: this.renderMenu, rowHeaderCellRenderer: this.renderRowHeader, rowHeaderRef: this.refHandlers.rowHeader, scrollContainerRef: this.refHandlers.scrollContainer }),\n React.createElement(\"div\", { className: classNames(Classes.TABLE_OVERLAY_LAYER, Classes.TABLE_OVERLAY_REORDERING_CURSOR) }),\n React.createElement(GuideLayer, { className: Classes.TABLE_RESIZE_GUIDES, verticalGuides: verticalGuides, horizontalGuides: horizontalGuides })));\n };\n Table.prototype.renderHotkeys = function () {\n var hotkeys = [\n this.maybeRenderCopyHotkey(),\n this.maybeRenderSelectAllHotkey(),\n this.maybeRenderFocusHotkeys(),\n this.maybeRenderSelectionResizeHotkeys(),\n ];\n return React.createElement(Hotkeys, null, hotkeys.filter(function (element) { return element !== undefined; }));\n };\n /**\n * When the component mounts, the HTML Element refs will be available, so\n * we constructor the Locator, which queries the elements' bounding\n * ClientRects.\n */\n Table.prototype.componentDidMount = function () {\n var _this = this;\n this.validateGrid();\n this.locator = new Locator(this.rootTableElement, this.scrollContainerElement, this.cellContainerElement);\n this.updateLocator();\n this.updateViewportRect(this.locator.getViewportRect());\n this.resizeSensorDetach = ResizeSensor.attach(this.rootTableElement, function () {\n if (!_this.state.isLayoutLocked) {\n _this.updateViewportRect(_this.locator.getViewportRect());\n }\n });\n };\n Table.prototype.componentWillUnmount = function () {\n if (this.resizeSensorDetach != null) {\n this.resizeSensorDetach();\n delete this.resizeSensorDetach;\n }\n this.didCompletelyMount = false;\n };\n Table.prototype.getSnapshotBeforeUpdate = function () {\n var viewportRect = this.state.viewportRect;\n this.validateGrid();\n var tableBottom = this.grid.getCumulativeHeightAt(this.grid.numRows - 1);\n var tableRight = this.grid.getCumulativeWidthAt(this.grid.numCols - 1);\n var nextScrollTop = tableBottom < viewportRect.top + viewportRect.height\n ? // scroll the last row into view\n Math.max(0, tableBottom - viewportRect.height)\n : undefined;\n var nextScrollLeft = tableRight < viewportRect.left + viewportRect.width\n ? // scroll the last column into view\n Math.max(0, tableRight - viewportRect.width)\n : undefined;\n // these will only be defined if they differ from viewportRect\n return { nextScrollLeft: nextScrollLeft, nextScrollTop: nextScrollTop };\n };\n Table.prototype.componentDidUpdate = function (prevProps, prevState, snapshot) {\n _super.prototype.componentDidUpdate.call(this, prevProps, prevState, snapshot);\n var didChildrenChange = React.Children.toArray(this.props.children) !==\n this.state.childrenArray;\n var shouldInvalidateGrid = didChildrenChange ||\n this.props.columnWidths !== prevState.columnWidths ||\n this.props.rowHeights !== prevState.rowHeights ||\n this.props.numRows !== prevProps.numRows ||\n (this.props.forceRerenderOnSelectionChange && this.props.selectedRegions !== prevProps.selectedRegions);\n if (shouldInvalidateGrid) {\n this.invalidateGrid();\n }\n if (this.locator != null) {\n this.validateGrid();\n this.updateLocator();\n }\n // When true, we'll need to imperatively synchronize quadrant views after\n // the update. This check lets us avoid expensively diff'ing columnWidths\n // and rowHeights in <TableQuadrantStack> on each update.\n var didUpdateColumnOrRowSizes = !CoreUtils.arraysEqual(this.state.columnWidths, prevState.columnWidths) ||\n !CoreUtils.arraysEqual(this.state.rowHeights, prevState.rowHeights);\n if (didUpdateColumnOrRowSizes) {\n this.quadrantStackInstance.synchronizeQuadrantViews();\n this.syncViewportPosition(snapshot);\n }\n };\n Table.prototype.validateProps = function (props) {\n var children = props.children, columnWidths = props.columnWidths, numFrozenColumns = props.numFrozenColumns, numFrozenRows = props.numFrozenRows, numRows = props.numRows, rowHeights = props.rowHeights;\n var numColumns = React.Children.count(children);\n // do cheap error-checking first.\n if (numRows != null && numRows < 0) {\n throw new Error(Errors.TABLE_NUM_ROWS_NEGATIVE);\n }\n if (numFrozenRows != null && numFrozenRows < 0) {\n throw new Error(Errors.TABLE_NUM_FROZEN_ROWS_NEGATIVE);\n }\n if (numFrozenColumns != null && numFrozenColumns < 0) {\n throw new Error(Errors.TABLE_NUM_FROZEN_COLUMNS_NEGATIVE);\n }\n if (numRows != null && rowHeights != null && rowHeights.length !== numRows) {\n throw new Error(Errors.TABLE_NUM_ROWS_ROW_HEIGHTS_MISMATCH);\n }\n if (numColumns != null && columnWidths != null && columnWidths.length !== numColumns) {\n throw new Error(Errors.TABLE_NUM_COLUMNS_COLUMN_WIDTHS_MISMATCH);\n }\n React.Children.forEach(children, function (child) {\n if (!CoreUtils.isElementOfType(child, Column)) {\n throw new Error(Errors.TABLE_NON_COLUMN_CHILDREN_WARNING);\n }\n });\n // these are recoverable scenarios, so just print a warning.\n if (numFrozenRows != null && numRows != null && numFrozenRows > numRows) {\n console.warn(Errors.TABLE_NUM_FROZEN_ROWS_BOUND_WARNING);\n }\n if (numFrozenColumns != null && numFrozenColumns > numColumns) {\n console.warn(Errors.TABLE_NUM_FROZEN_COLUMNS_BOUND_WARNING);\n }\n };\n Table.prototype.gridDimensionsMatchProps = function () {\n var _a = this.props, children = _a.children, numRows = _a.numRows;\n return (this.grid != null && this.grid.numCols === React.Children.count(children) && this.grid.numRows === numRows);\n };\n // Hotkeys\n // =======\n Table.prototype.maybeRenderCopyHotkey = function () {\n var getCellClipboardData = this.props.getCellClipboardData;\n if (getCellClipboardData != null) {\n return (React.createElement(Hotkey, { key: \"copy-hotkey\", label: \"Copy selected table cells\", group: \"Table\", combo: \"mod+c\", onKeyDown: this.handleCopy }));\n }\n else {\n return undefined;\n }\n };\n Table.prototype.maybeRenderSelectionResizeHotkeys = function () {\n var _a = this.props, enableMultipleSelection = _a.enableMultipleSelection, selectionModes = _a.selectionModes;\n var isSomeSelectionModeEnabled = selectionModes.length > 0;\n if (enableMultipleSelection && isSomeSelectionModeEnabled) {\n return [\n React.createElement(Hotkey, { key: \"resize-selection-up\", label: \"Resize selection upward\", group: \"Table\", combo: \"shift+up\", onKeyDown: this.handleSelectionResizeUp }),\n React.createElement(Hotkey, { key: \"resize-selection-down\", label: \"Resize selection downward\", group: \"Table\", combo: \"shift+down\", onKeyDown: this.handleSelectionResizeDown }),\n React.createElement(Hotkey, { key: \"resize-selection-left\", label: \"Resize selection leftward\", group: \"Table\", combo: \"shift+left\", onKeyDown: this.handleSelectionResizeLeft }),\n React.createElement(Hotkey, { key: \"resize-selection-right\", label: \"Resize selection rightward\", group: \"Table\", combo: \"shift+right\", onKeyDown: this.handleSelectionResizeRight }),\n ];\n }\n else {\n return undefined;\n }\n };\n Table.prototype.maybeRenderFocusHotkeys = function () {\n var enableFocusedCell = this.props.enableFocusedCell;\n if (enableFocusedCell != null) {\n return [\n React.createElement(Hotkey, { key: \"move left\", label: \"Move focus cell left\", group: \"Table\", combo: \"left\", onKeyDown: this.handleFocusMoveLeft }),\n React.createElement(Hotkey, { key: \"move right\", label: \"Move focus cell right\", group: \"Table\", combo: \"right\", onKeyDown: this.handleFocusMoveRight }),\n React.createElement(Hotkey, { key: \"move up\", label: \"Move focus cell up\", group: \"Table\", combo: \"up\", onKeyDown: this.handleFocusMoveUp }),\n React.createElement(Hotkey, { key: \"move down\", label: \"Move focus cell down\", group: \"Table\", combo: \"down\", onKeyDown: this.handleFocusMoveDown }),\n React.createElement(Hotkey, { key: \"move tab\", label: \"Move focus cell tab\", group: \"Table\", combo: \"tab\", onKeyDown: this.handleFocusMoveRightInternal, allowInInput: true }),\n React.createElement(Hotkey, { key: \"move shift-tab\", label: \"Move focus cell shift tab\", group: \"Table\", combo: \"shift+tab\", onKeyDown: this.handleFocusMoveLeftInternal, allowInInput: true }),\n React.createElement(Hotkey, { key: \"move enter\", label: \"Move focus cell enter\", group: \"Table\", combo: \"enter\", onKeyDown: this.handleFocusMoveDownInternal, allowInInput: true }),\n React.createElement(Hotkey, { key: \"move shift-enter\", label: \"Move focus cell shift enter\", group: \"Table\", combo: \"shift+enter\", onKeyDown: this.handleFocusMoveUpInternal, allowInInput: true }),\n ];\n }\n else {\n return [];\n }\n };\n Table.prototype.maybeRenderSelectAllHotkey = function () {\n if (Table_1.isSelectionModeEnabled(this.props, RegionCardinality.FULL_TABLE)) {\n return (React.createElement(Hotkey, { key: \"select-all-hotkey\", label: \"Select all\", group: \"Table\", combo: \"mod+a\", onKeyDown: this.handleSelectAllHotkey }));\n }\n else {\n return undefined;\n }\n };\n /**\n * Replaces the selected region at the specified array index, with the\n * region provided.\n */\n Table.prototype.updateSelectedRegionAtIndex = function (region, index) {\n var _a = this.props, children = _a.children, numRows = _a.numRows;\n var selectedRegions = this.state.selectedRegions;\n var numColumns = React.Children.count(children);\n var maxRowIndex = Math.max(0, numRows - 1);\n var maxColumnIndex = Math.max(0, numColumns - 1);\n var clampedNextRegion = Regions.clampRegion(region, maxRowIndex, maxColumnIndex);\n var nextSelectedRegions = Regions.update(selectedRegions, clampedNextRegion, index);\n this.handleSelection(nextSelectedRegions);\n };\n // Quadrant refs\n // =============\n Table.prototype.moveFocusCell = function (primaryAxis, secondaryAxis, isUpOrLeft, newFocusedCell, focusCellRegion) {\n var selectedRegions = this.state.selectedRegions;\n var primaryAxisPlural = primaryAxis === \"row\" ? \"rows\" : \"cols\";\n var secondaryAxisPlural = secondaryAxis === \"row\" ? \"rows\" : \"cols\";\n var movementDirection = isUpOrLeft ? -1 : +1;\n var regionIntervalIndex = isUpOrLeft ? 1 : 0;\n // try moving the cell in the direction along the primary axis\n newFocusedCell[primaryAxis] += movementDirection;\n var isPrimaryIndexOutOfBounds = isUpOrLeft\n ? newFocusedCell[primaryAxis] < focusCellRegion[primaryAxisPlural][0]\n : newFocusedCell[primaryAxis] > focusCellRegion[primaryAxisPlural][1];\n if (isPrimaryIndexOutOfBounds) {\n // if we moved outside the bounds of selection region,\n // move to the start (or end) of the primary axis, and move one along the secondary\n newFocusedCell[primaryAxis] = focusCellRegion[primaryAxisPlural][regionIntervalIndex];\n newFocusedCell[secondaryAxis] += movementDirection;\n var isSecondaryIndexOutOfBounds = isUpOrLeft\n ? newFocusedCell[secondaryAxis] < focusCellRegion[secondaryAxisPlural][0]\n : newFocusedCell[secondaryAxis] > focusCellRegion[secondaryAxisPlural][1];\n if (isSecondaryIndexOutOfBounds) {\n // if moving along the secondary also moves us outside\n // go to the start (or end) of the next (or previous region)\n // (note that if there's only one region you'll be moving to the opposite corner, which is fine)\n var newFocusCellSelectionIndex = newFocusedCell.focusSelectionIndex + movementDirection;\n // newFocusCellSelectionIndex should be one more (or less), unless we need to wrap around\n if (isUpOrLeft ? newFocusCellSelectionIndex < 0 : newFocusCellSelectionIndex >= selectedRegions.length) {\n newFocusCellSelectionIndex = isUpOrLeft ? selectedRegions.length - 1 : 0;\n }\n var newFocusCellRegion = Regions.getCellRegionFromRegion(selectedRegions[newFocusCellSelectionIndex], this.grid.numRows, this.grid.numCols);\n newFocusedCell = {\n col: newFocusCellRegion.cols[regionIntervalIndex],\n focusSelectionIndex: newFocusCellSelectionIndex,\n row: newFocusCellRegion.rows[regionIntervalIndex],\n };\n }\n }\n return newFocusedCell;\n };\n Table.prototype.shouldDisableVerticalScroll = function () {\n var enableGhostCells = this.props.enableGhostCells;\n var viewportRect = this.state.viewportRect;\n var rowIndices = this.grid.getRowIndicesInRect(viewportRect, enableGhostCells);\n var isViewportUnscrolledVertically = viewportRect != null && viewportRect.top === 0;\n var areRowHeadersLoading = this.hasLoadingOption(this.props.loadingOptions, TableLoadingOption.ROW_HEADERS);\n var areGhostRowsVisible = enableGhostCells && this.grid.isGhostIndex(rowIndices.rowIndexEnd, 0);\n return areGhostRowsVisible && (isViewportUnscrolledVertically || areRowHeadersLoading);\n };\n Table.prototype.shouldDisableHorizontalScroll = function () {\n var enableGhostCells = this.props.enableGhostCells;\n var viewportRect = this.state.viewportRect;\n var columnIndices = this.grid.getColumnIndicesInRect(viewportRect, enableGhostCells);\n var isViewportUnscrolledHorizontally = viewportRect != null && viewportRect.left === 0;\n var areGhostColumnsVisible = enableGhostCells && this.grid.isGhostColumn(columnIndices.columnIndexEnd);\n var areColumnHeadersLoading = this.hasLoadingOption(this.props.loadingOptions, TableLoadingOption.COLUMN_HEADERS);\n return areGhostColumnsVisible && (isViewportUnscrolledHorizontally || areColumnHeadersLoading);\n };\n Table.prototype.getColumnProps = function (columnIndex) {\n var column = this.state.childrenArray[columnIndex];\n return column === undefined ? undefined : column.props;\n };\n Table.prototype.isGuidesShowing = function () {\n return this.state.verticalGuides != null || this.state.horizontalGuides != null;\n };\n Table.prototype.getEnabledSelectionHandler = function (selectionMode) {\n if (!Table_1.isSelectionModeEnabled(this.props, selectionMode)) {\n // If the selection mode isn't enabled, return a callback that\n // will clear the selection. For example, if row selection is\n // disabled, clicking on the row header will clear the table's\n // selection. If all selection modes are enabled, clicking on the\n // same region twice will clear the selection.\n return this.clearSelection;\n }\n else {\n return this.handleSelection;\n }\n };\n Table.prototype.invalidateGrid = function () {\n this.grid = null;\n };\n Table.prototype.validateGrid = function () {\n if (this.grid == null) {\n var _a = this.props, defaultRowHeight = _a.defaultRowHeight, defaultColumnWidth = _a.defaultColumnWidth;\n var _b = this.state, rowHeights = _b.rowHeights, columnWidths = _b.columnWidths;\n this.grid = new Grid(rowHeights, columnWidths, Grid.DEFAULT_BLEED, defaultRowHeight, defaultColumnWidth);\n this.invokeOnVisibleCellsChangeCallback(this.state.viewportRect);\n }\n };\n /**\n * Renders a `RegionLayer`, applying styles to the regions using the\n * supplied `IRegionStyler`. `RegionLayer` is a `PureRender` component, so\n * the `IRegionStyler` should be a new instance on every render if we\n * intend to redraw the region layer.\n */\n Table.prototype.maybeRenderRegions = function (getRegionStyle, quadrantType) {\n if (this.isGuidesShowing() && !this.state.isReordering) {\n // we want to show guides *and* the selection styles when reordering rows or columns\n return undefined;\n }\n var regionGroups = Regions.joinStyledRegionGroups(this.state.selectedRegions, this.props.styledRegionGroups, this.state.focusedCell);\n return regionGroups.map(function (regionGroup, index) {\n var regionStyles = regionGroup.regions.map(function (region) { return getRegionStyle(region, quadrantType); });\n return (React.createElement(RegionLayer, { className: classNames(regionGroup.className), key: index, regions: regionGroup.regions, regionStyles: regionStyles }));\n });\n };\n Table.prototype.syncViewportPosition = function (_a) {\n var nextScrollLeft = _a.nextScrollLeft, nextScrollTop = _a.nextScrollTop;\n var viewportRect = this.state.viewportRect;\n if (nextScrollLeft !== undefined || nextScrollTop !== undefined) {\n // we need to modify the scroll container explicitly for the viewport to shift. in so\n // doing, we add the size of the header elements, which are not technically part of the\n // \"grid\" concept (the grid only consists of body cells at present).\n if (nextScrollTop !== undefined) {\n var topCorrection = this.shouldDisableVerticalScroll() ? 0 : this.columnHeaderElement.clientHeight;\n this.scrollContainerElement.scrollTop = nextScrollTop + topCorrection;\n }\n if (nextScrollLeft !== undefined) {\n var leftCorrection = this.shouldDisableHorizontalScroll() || this.rowHeaderElement == null\n ? 0\n : this.rowHeaderElement.clientWidth;\n this.scrollContainerElement.scrollLeft = nextScrollLeft + leftCorrection;\n }\n var nextViewportRect = new Rect(nextScrollLeft, nextScrollTop, viewportRect.width, viewportRect.height);\n this.updateViewportRect(nextViewportRect);\n }\n };\n Table.prototype.updateLocator = function () {\n this.locator\n .setGrid(this.grid)\n .setNumFrozenRows(this.state.numFrozenRowsClamped)\n .setNumFrozenColumns(this.state.numFrozenColumnsClamped);\n };\n Table.prototype.invokeOnVisibleCellsChangeCallback = function (viewportRect) {\n var columnIndices = this.grid.getColumnIndicesInRect(viewportRect);\n var rowIndices = this.grid.getRowIndicesInRect(viewportRect);\n CoreUtils.safeInvoke(this.props.onVisibleCellsChange, rowIndices, columnIndices);\n };\n /**\n * Normalizes RenderMode.BATCH_ON_UPDATE into RenderMode.{BATCH,NONE}. We do\n * this because there are actually multiple updates required before the\n * <Table> is considered fully \"mounted,\" and adding that knowledge to child\n * components would lead to tight coupling. Thus, keep it simple for them.\n */\n Table.prototype.getNormalizedRenderMode = function () {\n var renderMode = this.props.renderMode;\n var shouldBatchRender = renderMode === RenderMode.BATCH || (renderMode === RenderMode.BATCH_ON_UPDATE && this.didCompletelyMount);\n return shouldBatchRender ? RenderMode.BATCH : RenderMode.NONE;\n };\n /**\n * Returns an object with option keys mapped to their resolved values\n * (falling back to default values as necessary).\n */\n Table.prototype.resolveResizeRowsByApproximateHeightOptions = function (options, rowIndex, columnIndex) {\n var optionKeys = Object.keys(Table_1.resizeRowsByApproximateHeightDefaults);\n var optionReducer = function (agg, key) {\n agg[key] =\n options != null && options[key] != null\n ? CoreUtils.safeInvokeOrValue(options[key], rowIndex, columnIndex)\n : Table_1.resizeRowsByApproximateHeightDefaults[key];\n return agg;\n };\n var resolvedOptions = optionKeys.reduce(optionReducer, {});\n return resolvedOptions;\n };\n var Table_1;\n Table.displayName = DISPLAYNAME_PREFIX + \".Table\";\n Table.defaultProps = {\n defaultColumnWidth: 150,\n defaultRowHeight: 20,\n enableFocusedCell: false,\n enableGhostCells: false,\n enableMultipleSelection: true,\n enableRowHeader: true,\n forceRerenderOnSelectionChange: false,\n loadingOptions: [],\n minColumnWidth: 50,\n minRowHeight: 20,\n numFrozenColumns: 0,\n numFrozenRows: 0,\n numRows: 0,\n renderMode: RenderMode.BATCH_ON_UPDATE,\n rowHeaderCellRenderer: renderDefaultRowHeader,\n selectionModes: SelectionModes.ALL,\n };\n Table.childContextTypes = columnInteractionBarContextTypes;\n // these default values for `resizeRowsByApproximateHeight` have been\n // fine-tuned to work well with default Table font styles.\n Table.resizeRowsByApproximateHeightDefaults = {\n getApproximateCharWidth: 8,\n getApproximateLineHeight: 18,\n getCellHorizontalPadding: 2 * Locator.CELL_HORIZONTAL_PADDING,\n getNumBufferLines: 1,\n };\n Table.SHALLOW_COMPARE_PROP_KEYS_DENYLIST = [\n \"selectedRegions\",\n ];\n Table.SHALLOW_COMPARE_STATE_KEYS_DENYLIST = [\n \"selectedRegions\",\n \"viewportRect\",\n ];\n Table = Table_1 = __decorate([\n HotkeysTarget,\n polyfill\n ], Table);\n return Table;\n}(AbstractComponent2));\nexport { Table };\nfunction clampNumFrozenColumns(props) {\n var numFrozenColumns = props.numFrozenColumns;\n var numColumns = React.Children.count(props.children);\n return clampPotentiallyNullValue(numFrozenColumns, numColumns);\n}\nfunction clampNumFrozenRows(props) {\n var numFrozenRows = props.numFrozenRows, numRows = props.numRows;\n return clampPotentiallyNullValue(numFrozenRows, numRows);\n}\n// add explicit `| null | undefined`, because the params make more sense in this\n// order, and you can't have an optional param precede a required param.\nfunction clampPotentiallyNullValue(value, max) {\n return value == null ? 0 : Utils.clamp(value, 0, max);\n}\n//# sourceMappingURL=table.js.map","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n// find the complete implementation of crypto (msCrypto) on IE11.\nvar getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// eslint-disable-next-line import/prefer-default-export\nexport const TRACK_TYPES = {\n TRACK_EVENT: 'trackEvent',\n TRACK_LINK: 'trackLink',\n TRACK_SEARCH: 'trackSiteSearch',\n TRACK_VIEW: 'trackPageView',\n TRACK_ECOMMERCE_ORDER: 'trackEcommerceOrder',\n TRACK_ECOMMERCE_CART_UPDATE: 'trackEcommerceCartUpdate',\n};\n//# sourceMappingURL=constants.js.map","import MatomoTracker from './MatomoTracker';\nimport * as types from './types';\nexport default MatomoTracker;\nexport { types };\n//# sourceMappingURL=index.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { TRACK_TYPES } from './constants';\nclass MatomoTracker {\n constructor(userOptions) {\n if (!userOptions.urlBase) {\n throw new Error('Matomo urlBase is required.');\n }\n if (!userOptions.siteId) {\n throw new Error('Matomo siteId is required.');\n }\n this.initialize(userOptions);\n }\n initialize({ urlBase, siteId, userId, trackerUrl, srcUrl, disabled, heartBeat, linkTracking = true, configurations = {}, }) {\n var _a;\n const normalizedUrlBase = urlBase[urlBase.length - 1] !== '/' ? `${urlBase}/` : urlBase;\n if (typeof window === 'undefined') {\n return;\n }\n window._paq = window._paq || [];\n if (window._paq.length !== 0) {\n return;\n }\n if (disabled) {\n return;\n }\n this.pushInstruction('setTrackerUrl', trackerUrl !== null && trackerUrl !== void 0 ? trackerUrl : `${normalizedUrlBase}matomo.php`);\n this.pushInstruction('setSiteId', siteId);\n if (userId) {\n this.pushInstruction('setUserId', userId);\n }\n Object.entries(configurations).forEach((entry) => {\n this.pushInstruction(entry[0], entry[1]);\n });\n // accurately measure the time spent on the last pageview of a visit\n if (!heartBeat || (heartBeat && heartBeat.active)) {\n this.enableHeartBeatTimer((_a = (heartBeat && heartBeat.seconds)) !== null && _a !== void 0 ? _a : 15);\n }\n // // measure outbound links and downloads\n // // might not work accurately on SPAs because new links (dom elements) are created dynamically without a server-side page reload.\n this.enableLinkTracking(linkTracking);\n const doc = document;\n const scriptElement = doc.createElement('script');\n const scripts = doc.getElementsByTagName('script')[0];\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.defer = true;\n scriptElement.src = srcUrl || `${normalizedUrlBase}matomo.js`;\n if (scripts && scripts.parentNode) {\n scripts.parentNode.insertBefore(scriptElement, scripts);\n }\n }\n enableHeartBeatTimer(seconds) {\n this.pushInstruction('enableHeartBeatTimer', seconds);\n }\n enableLinkTracking(active) {\n this.pushInstruction('enableLinkTracking', active);\n }\n trackEventsForElements(elements) {\n if (elements.length) {\n elements.forEach((element) => {\n element.addEventListener('click', () => {\n const { matomoCategory, matomoAction, matomoName, matomoValue, } = element.dataset;\n if (matomoCategory && matomoAction) {\n this.trackEvent({\n category: matomoCategory,\n action: matomoAction,\n name: matomoName,\n value: Number(matomoValue),\n });\n }\n else {\n throw new Error(`Error: data-matomo-category and data-matomo-action are required.`);\n }\n });\n });\n }\n }\n // Tracks events based on data attributes\n trackEvents() {\n const matchString = '[data-matomo-event=\"click\"]';\n let firstTime = false;\n if (!this.mutationObserver) {\n firstTime = true;\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n // only track HTML elements\n if (!(node instanceof HTMLElement))\n return;\n // check the inserted element for being a code snippet\n if (node.matches(matchString)) {\n this.trackEventsForElements([node]);\n }\n const elements = Array.from(node.querySelectorAll(matchString));\n this.trackEventsForElements(elements);\n });\n });\n });\n }\n this.mutationObserver.observe(document, { childList: true, subtree: true });\n // Now track all already existing elements\n if (firstTime) {\n const elements = Array.from(document.querySelectorAll(matchString));\n this.trackEventsForElements(elements);\n }\n }\n stopObserving() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n // Tracks events\n // https://matomo.org/docs/event-tracking/#tracking-events\n trackEvent(_a) {\n var { category, action, name, value } = _a, otherParams = __rest(_a, [\"category\", \"action\", \"name\", \"value\"]);\n if (category && action) {\n this.track(Object.assign({ data: [TRACK_TYPES.TRACK_EVENT, category, action, name, value] }, otherParams));\n }\n else {\n throw new Error(`Error: category and action are required.`);\n }\n }\n // Tracks site search\n // https://developer.matomo.org/guides/tracking-javascript-guide#internal-search-tracking\n trackSiteSearch(_a) {\n var { keyword, category, count } = _a, otherParams = __rest(_a, [\"keyword\", \"category\", \"count\"]);\n if (keyword) {\n this.track(Object.assign({ data: [TRACK_TYPES.TRACK_SEARCH, keyword, category, count] }, otherParams));\n }\n else {\n throw new Error(`Error: keyword is required.`);\n }\n }\n // Tracks outgoing links to other sites and downloads\n // https://developer.matomo.org/guides/tracking-javascript-guide#enabling-download-outlink-tracking\n trackLink({ href, linkType = 'link' }) {\n this.pushInstruction(TRACK_TYPES.TRACK_LINK, href, linkType);\n }\n // Tracks page views\n // https://developer.matomo.org/guides/spa-tracking#tracking-a-new-page-view\n trackPageView(params) {\n this.track(Object.assign({ data: [TRACK_TYPES.TRACK_VIEW] }, params));\n }\n // Adds a product to an Ecommerce order to be tracked via trackEcommerceOrder.\n // https://matomo.org/docs/ecommerce-analytics\n // https://matomo.org/docs/ecommerce-analytics/#1-addecommerceitemproductsku-productname-productcategory-price-quantity\n addEcommerceItem({ sku, productName, productCategory, productPrice = 0.0, productQuantity = 1, }) {\n this.pushInstruction('addEcommerceItem', sku, productName, productCategory, productPrice, productQuantity);\n }\n // Tracks an Ecommerce order containing items added via addEcommerceItem.\n // https://matomo.org/docs/ecommerce-analytics/#2-trackecommerceorderorderid-revenue-subtotal-tax-shipping-discount\n trackEcommerceOrder({ orderId, orderRevenue, orderSubTotal, taxAmount, shippingAmount, discountOffered = false, }) {\n this.track({\n data: [\n TRACK_TYPES.TRACK_ECOMMERCE_ORDER,\n orderId,\n orderRevenue,\n orderSubTotal,\n taxAmount,\n shippingAmount,\n discountOffered,\n ],\n });\n }\n // Tracks updates to an Ecommerce Cart before an actual purchase.\n // This will replace currently tracked information of the cart. Always include all items of the updated cart!\n // https://matomo.org/docs/ecommerce-analytics/#example-tracking-an-ecommerce-cart-update-containing-two-products\n trackEcommerceCartUpdate(amount) {\n this.pushInstruction(TRACK_TYPES.TRACK_ECOMMERCE_CART_UPDATE, amount);\n }\n // Marks the next page view as an Ecommerce product page.\n // https://matomo.org/docs/ecommerce-analytics/#example-tracking-a-product-page-view\n setEcommerceView({ sku, productName, productCategory, productPrice, }) {\n this.pushInstruction('setEcommerceView', sku, productName, productCategory, productPrice);\n }\n // Marks the next tracked page view as an Ecommerce category page.\n // https://matomo.org/docs/ecommerce-analytics/#example-tracking-a-category-page-view\n setEcommerceCategoryView(productCategory) {\n this.setEcommerceView({ productCategory, productName: false, sku: false });\n }\n // Sends the tracked page/view/search to Matomo\n track({ data = [], documentTitle = window.document.title, href = window.location.href, customDimensions = false, }) {\n if (data.length) {\n if (customDimensions &&\n Array.isArray(customDimensions) &&\n customDimensions.length) {\n customDimensions.map((customDimension) => this.pushInstruction('setCustomDimension', customDimension.id, customDimension.value));\n }\n this.pushInstruction('setCustomUrl', href);\n this.pushInstruction('setDocumentTitle', documentTitle);\n this.pushInstruction(...data);\n }\n }\n /**\n * Pushes an instruction to Matomo for execution, this is equivalent to pushing entries into the `_paq` array.\n *\n * For example:\n *\n * ```ts\n * pushInstruction('setDocumentTitle', document.title)\n * ```\n * Is the equivalent of:\n *\n * ```ts\n * _paq.push(['setDocumentTitle', document.title]);\n * ```\n *\n * @param name The name of the instruction to be executed.\n * @param args The arguments to pass along with the instruction.\n */\n pushInstruction(name, ...args) {\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line\n window._paq.push([name, ...args]);\n }\n return this;\n }\n}\nexport default MatomoTracker;\n//# sourceMappingURL=MatomoTracker.js.map","import MatomoTracker from '@datapunt/matomo-tracker-js';\nfunction createInstance(params) {\n return new MatomoTracker(params);\n}\nexport default createInstance;\n//# sourceMappingURL=instance.js.map","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends, __rest } from \"tslib\";\nimport * as React from \"react\";\nimport { AbstractComponent2, DISPLAYNAME_PREFIX, Keys, Menu, Utils } from \"@blueprintjs/core\";\nimport { executeItemsEqual, getActiveItem, getCreateNewItem, isCreateNewItem, renderFilteredItems, } from \"../../common\";\nvar QueryList = /** @class */ (function (_super) {\n __extends(QueryList, _super);\n function QueryList(props, context) {\n var _a;\n var _this = _super.call(this, props, context) || this;\n _this.refHandlers = {\n itemsParent: function (ref) { return (_this.itemsParentRef = ref); },\n };\n /**\n * Flag indicating that we should check whether selected item is in viewport\n * after rendering, typically because of keyboard change. Set to `true` when\n * manipulating state in a way that may cause active item to scroll away.\n */\n _this.shouldCheckActiveItemInViewport = false;\n /**\n * The item that we expect to be the next selected active item (based on click\n * or key interactions). When scrollToActiveItem = false, used to detect if\n * an unexpected external change to the active item has been made.\n */\n _this.expectedNextActiveItem = null;\n /**\n * Flag which is set to true while in between an ENTER \"keydown\" event and its\n * corresponding \"keyup\" event.\n *\n * When entering text via an IME (https://en.wikipedia.org/wiki/Input_method),\n * the ENTER key is pressed to confirm the character(s) to be input from a list\n * of options. The operating system intercepts the ENTER \"keydown\" event and\n * prevents it from propagating to the application, but \"keyup\" is still\n * fired, triggering a spurious event which this component does not expect.\n *\n * To work around this quirk, we keep track of \"real\" key presses by setting\n * this flag in handleKeyDown.\n */\n _this.isEnterKeyPressed = false;\n /** default `itemListRenderer` implementation */\n _this.renderItemList = function (listProps) {\n var _a = _this.props, initialContent = _a.initialContent, noResults = _a.noResults;\n // omit noResults if createNewItemFromQuery and createNewItemRenderer are both supplied, and query is not empty\n var maybeNoResults = _this.isCreateItemRendered() ? null : noResults;\n var menuContent = renderFilteredItems(listProps, maybeNoResults, initialContent);\n var createItemView = _this.isCreateItemRendered()\n ? _this.renderCreateItemMenuItem(_this.state.query.trim())\n : null;\n if (menuContent == null && createItemView == null) {\n return null;\n }\n return (React.createElement(Menu, { ulRef: listProps.itemsParentRef },\n menuContent,\n createItemView));\n };\n /** wrapper around `itemRenderer` to inject props */\n _this.renderItem = function (item, index) {\n if (_this.props.disabled !== true) {\n var _a = _this.state, activeItem = _a.activeItem, query = _a.query;\n var matchesPredicate = _this.state.filteredItems.indexOf(item) >= 0;\n var modifiers = {\n active: executeItemsEqual(_this.props.itemsEqual, getActiveItem(activeItem), item),\n disabled: isItemDisabled(item, index, _this.props.itemDisabled),\n matchesPredicate: matchesPredicate,\n };\n return _this.props.itemRenderer(item, {\n handleClick: function (e) { return _this.handleItemSelect(item, e); },\n index: index,\n modifiers: modifiers,\n query: query,\n });\n }\n return null;\n };\n _this.renderCreateItemMenuItem = function (query) {\n var activeItem = _this.state.activeItem;\n var handleClick = function (evt) {\n _this.handleItemCreate(query, evt);\n };\n var isActive = isCreateNewItem(activeItem);\n return Utils.safeInvoke(_this.props.createNewItemRenderer, query, isActive, handleClick);\n };\n _this.handleItemCreate = function (query, evt) {\n // we keep a cached createNewItem in state, but might as well recompute\n // the result just to be sure it's perfectly in sync with the query.\n var item = Utils.safeInvoke(_this.props.createNewItemFromQuery, query);\n if (item != null) {\n Utils.safeInvoke(_this.props.onItemSelect, item, evt);\n _this.maybeResetQuery();\n }\n };\n _this.handleItemSelect = function (item, event) {\n _this.setActiveItem(item);\n Utils.safeInvoke(_this.props.onItemSelect, item, event);\n _this.maybeResetQuery();\n };\n _this.handlePaste = function (queries) {\n var _a = _this.props, createNewItemFromQuery = _a.createNewItemFromQuery, onItemsPaste = _a.onItemsPaste;\n var nextActiveItem;\n var nextQueries = [];\n // Find an exising item that exactly matches each pasted value, or\n // create a new item if possible. Ignore unmatched values if creating\n // items is disabled.\n var pastedItemsToEmit = [];\n for (var _i = 0, queries_1 = queries; _i < queries_1.length; _i++) {\n var query = queries_1[_i];\n var equalItem = getMatchingItem(query, _this.props);\n if (equalItem !== undefined) {\n nextActiveItem = equalItem;\n pastedItemsToEmit.push(equalItem);\n }\n else if (_this.canCreateItems()) {\n var newItem = Utils.safeInvoke(createNewItemFromQuery, query);\n if (newItem !== undefined) {\n pastedItemsToEmit.push(newItem);\n }\n }\n else {\n nextQueries.push(query);\n }\n }\n // UX nicety: combine all unmatched queries into a single\n // comma-separated query in the input, so we don't lose any information.\n // And don't reset the active item; we'll do that ourselves below.\n _this.setQuery(nextQueries.join(\", \"), false);\n // UX nicety: update the active item if we matched with at least one\n // existing item.\n if (nextActiveItem !== undefined) {\n _this.setActiveItem(nextActiveItem);\n }\n Utils.safeInvoke(onItemsPaste, pastedItemsToEmit);\n };\n _this.handleKeyDown = function (event) {\n var keyCode = event.keyCode;\n if (keyCode === Keys.ARROW_UP || keyCode === Keys.ARROW_DOWN) {\n event.preventDefault();\n var nextActiveItem = _this.getNextActiveItem(keyCode === Keys.ARROW_UP ? -1 : 1);\n if (nextActiveItem != null) {\n _this.setActiveItem(nextActiveItem);\n }\n }\n else if (keyCode === Keys.ENTER) {\n _this.isEnterKeyPressed = true;\n }\n Utils.safeInvoke(_this.props.onKeyDown, event);\n };\n _this.handleKeyUp = function (event) {\n var onKeyUp = _this.props.onKeyUp;\n var activeItem = _this.state.activeItem;\n if (event.keyCode === Keys.ENTER && _this.isEnterKeyPressed) {\n // We handle ENTER in keyup here to play nice with the Button component's keyboard\n // clicking. Button is commonly used as the only child of Select. If we were to\n // instead process ENTER on keydown, then Button would click itself on keyup and\n // the Select popover would re-open.\n event.preventDefault();\n if (activeItem == null || isCreateNewItem(activeItem)) {\n _this.handleItemCreate(_this.state.query, event);\n }\n else {\n _this.handleItemSelect(activeItem, event);\n }\n _this.isEnterKeyPressed = false;\n }\n Utils.safeInvoke(onKeyUp, event);\n };\n _this.handleInputQueryChange = function (event) {\n var query = event == null ? \"\" : event.target.value;\n _this.setQuery(query);\n Utils.safeInvoke(_this.props.onQueryChange, query, event);\n };\n var _b = props.query, query = _b === void 0 ? \"\" : _b;\n var createNewItem = Utils.safeInvoke(props.createNewItemFromQuery, query);\n var filteredItems = getFilteredItems(query, props);\n _this.state = {\n activeItem: props.activeItem !== undefined\n ? props.activeItem\n : (_a = props.initialActiveItem) !== null && _a !== void 0 ? _a : getFirstEnabledItem(filteredItems, props.itemDisabled),\n createNewItem: createNewItem,\n filteredItems: filteredItems,\n query: query,\n };\n return _this;\n }\n QueryList.ofType = function () {\n return QueryList;\n };\n QueryList.prototype.render = function () {\n var _a = this.props, className = _a.className, items = _a.items, renderer = _a.renderer, _b = _a.itemListRenderer, itemListRenderer = _b === void 0 ? this.renderItemList : _b;\n var _c = this.state, createNewItem = _c.createNewItem, spreadableState = __rest(_c, [\"createNewItem\"]);\n return renderer(__assign(__assign({}, spreadableState), { className: className, handleItemSelect: this.handleItemSelect, handleKeyDown: this.handleKeyDown, handleKeyUp: this.handleKeyUp, handlePaste: this.handlePaste, handleQueryChange: this.handleInputQueryChange, itemList: itemListRenderer(__assign(__assign({}, spreadableState), { items: items, itemsParentRef: this.refHandlers.itemsParent, renderItem: this.renderItem })) }));\n };\n QueryList.prototype.componentDidUpdate = function (prevProps) {\n var _this = this;\n if (this.props.activeItem !== undefined && this.props.activeItem !== this.state.activeItem) {\n this.shouldCheckActiveItemInViewport = true;\n this.setState({ activeItem: this.props.activeItem });\n }\n if (this.props.query != null && this.props.query !== prevProps.query) {\n // new query\n this.setQuery(this.props.query, this.props.resetOnQuery, this.props);\n }\n else if (\n // same query (or uncontrolled query), but items in the list changed\n !Utils.shallowCompareKeys(this.props, prevProps, {\n include: [\"items\", \"itemListPredicate\", \"itemPredicate\"],\n })) {\n this.setQuery(this.state.query);\n }\n if (this.shouldCheckActiveItemInViewport) {\n // update scroll position immediately before repaint so DOM is accurate\n // (latest filteredItems) and to avoid flicker.\n requestAnimationFrame(function () { return _this.scrollActiveItemIntoView(); });\n // reset the flag\n this.shouldCheckActiveItemInViewport = false;\n }\n };\n QueryList.prototype.scrollActiveItemIntoView = function () {\n var scrollToActiveItem = this.props.scrollToActiveItem !== false;\n var externalChangeToActiveItem = !executeItemsEqual(this.props.itemsEqual, getActiveItem(this.expectedNextActiveItem), getActiveItem(this.props.activeItem));\n this.expectedNextActiveItem = null;\n if (!scrollToActiveItem && externalChangeToActiveItem) {\n return;\n }\n var activeElement = this.getActiveElement();\n if (this.itemsParentRef != null && activeElement != null) {\n var activeTop = activeElement.offsetTop, activeHeight = activeElement.offsetHeight;\n var _a = this.itemsParentRef, parentOffsetTop = _a.offsetTop, parentScrollTop = _a.scrollTop, parentHeight = _a.clientHeight;\n // compute padding on parent element to ensure we always leave space\n var _b = this.getItemsParentPadding(), paddingTop = _b.paddingTop, paddingBottom = _b.paddingBottom;\n // compute the two edges of the active item for comparison, including parent padding\n var activeBottomEdge = activeTop + activeHeight + paddingBottom - parentOffsetTop;\n var activeTopEdge = activeTop - paddingTop - parentOffsetTop;\n if (activeBottomEdge >= parentScrollTop + parentHeight) {\n // offscreen bottom: align bottom of item with bottom of viewport\n this.itemsParentRef.scrollTop = activeBottomEdge + activeHeight - parentHeight;\n }\n else if (activeTopEdge <= parentScrollTop) {\n // offscreen top: align top of item with top of viewport\n this.itemsParentRef.scrollTop = activeTopEdge - activeHeight;\n }\n }\n };\n QueryList.prototype.setQuery = function (query, resetActiveItem, props) {\n if (resetActiveItem === void 0) { resetActiveItem = this.props.resetOnQuery; }\n if (props === void 0) { props = this.props; }\n var createNewItemFromQuery = props.createNewItemFromQuery;\n this.shouldCheckActiveItemInViewport = true;\n var hasQueryChanged = query !== this.state.query;\n if (hasQueryChanged) {\n Utils.safeInvoke(props.onQueryChange, query);\n }\n // Leading and trailing whitespace can be confusing to display, so we remove it when passing it\n // to functions dealing with data, like createNewItemFromQuery. But we need the unaltered user-typed\n // query to remain in state to be able to render controlled text inputs properly.\n var trimmedQuery = query.trim();\n var filteredItems = getFilteredItems(trimmedQuery, props);\n var createNewItem = createNewItemFromQuery != null && trimmedQuery !== \"\" ? createNewItemFromQuery(trimmedQuery) : undefined;\n this.setState({ createNewItem: createNewItem, filteredItems: filteredItems, query: query });\n // always reset active item if it's now filtered or disabled\n var activeIndex = this.getActiveIndex(filteredItems);\n var shouldUpdateActiveItem = resetActiveItem ||\n activeIndex < 0 ||\n isItemDisabled(getActiveItem(this.state.activeItem), activeIndex, props.itemDisabled);\n if (shouldUpdateActiveItem) {\n this.setActiveItem(getFirstEnabledItem(filteredItems, props.itemDisabled));\n }\n };\n QueryList.prototype.setActiveItem = function (activeItem) {\n this.expectedNextActiveItem = activeItem;\n if (this.props.activeItem === undefined) {\n // indicate that the active item may need to be scrolled into view after update.\n this.shouldCheckActiveItemInViewport = true;\n this.setState({ activeItem: activeItem });\n }\n if (isCreateNewItem(activeItem)) {\n Utils.safeInvoke(this.props.onActiveItemChange, null, true);\n }\n else {\n Utils.safeInvoke(this.props.onActiveItemChange, activeItem, false);\n }\n };\n QueryList.prototype.getActiveElement = function () {\n var activeItem = this.state.activeItem;\n if (this.itemsParentRef != null) {\n if (isCreateNewItem(activeItem)) {\n return this.itemsParentRef.children.item(this.state.filteredItems.length);\n }\n else {\n var activeIndex = this.getActiveIndex();\n return this.itemsParentRef.children.item(activeIndex);\n }\n }\n return undefined;\n };\n QueryList.prototype.getActiveIndex = function (items) {\n if (items === void 0) { items = this.state.filteredItems; }\n var activeItem = this.state.activeItem;\n if (activeItem == null || isCreateNewItem(activeItem)) {\n return -1;\n }\n // NOTE: this operation is O(n) so it should be avoided in render(). safe for events though.\n for (var i = 0; i < items.length; ++i) {\n if (executeItemsEqual(this.props.itemsEqual, items[i], activeItem)) {\n return i;\n }\n }\n return -1;\n };\n QueryList.prototype.getItemsParentPadding = function () {\n // assert ref exists because it was checked before calling\n var _a = getComputedStyle(this.itemsParentRef), paddingTop = _a.paddingTop, paddingBottom = _a.paddingBottom;\n return {\n paddingBottom: pxToNumber(paddingBottom),\n paddingTop: pxToNumber(paddingTop),\n };\n };\n /**\n * Get the next enabled item, moving in the given direction from the start\n * index. A `null` return value means no suitable item was found.\n * @param direction amount to move in each iteration, typically +/-1\n * @param startIndex item to start iteration\n */\n QueryList.prototype.getNextActiveItem = function (direction, startIndex) {\n if (startIndex === void 0) { startIndex = this.getActiveIndex(); }\n if (this.isCreateItemRendered()) {\n var reachedCreate = (startIndex === 0 && direction === -1) ||\n (startIndex === this.state.filteredItems.length - 1 && direction === 1);\n if (reachedCreate) {\n return getCreateNewItem();\n }\n }\n return getFirstEnabledItem(this.state.filteredItems, this.props.itemDisabled, direction, startIndex);\n };\n QueryList.prototype.isCreateItemRendered = function () {\n return (this.canCreateItems() &&\n this.state.query !== \"\" &&\n // this check is unfortunately O(N) on the number of items, but\n // alas, hiding the \"Create Item\" option when it exactly matches an\n // existing item is much clearer.\n !this.wouldCreatedItemMatchSomeExistingItem());\n };\n QueryList.prototype.canCreateItems = function () {\n return this.props.createNewItemFromQuery != null && this.props.createNewItemRenderer != null;\n };\n QueryList.prototype.wouldCreatedItemMatchSomeExistingItem = function () {\n var _this = this;\n // search only the filtered items, not the full items list, because we\n // only need to check items that match the current query.\n return this.state.filteredItems.some(function (item) {\n return executeItemsEqual(_this.props.itemsEqual, item, _this.state.createNewItem);\n });\n };\n QueryList.prototype.maybeResetQuery = function () {\n if (this.props.resetOnSelect) {\n this.setQuery(\"\", true);\n }\n };\n QueryList.displayName = DISPLAYNAME_PREFIX + \".QueryList\";\n QueryList.defaultProps = {\n disabled: false,\n resetOnQuery: true,\n };\n return QueryList;\n}(AbstractComponent2));\nexport { QueryList };\nfunction pxToNumber(value) {\n return value == null ? 0 : parseInt(value.slice(0, -2), 10);\n}\nfunction getMatchingItem(query, _a) {\n var items = _a.items, itemPredicate = _a.itemPredicate;\n if (Utils.isFunction(itemPredicate)) {\n // .find() doesn't exist in ES5. Alternative: use a for loop instead of\n // .filter() so that we can return as soon as we find the first match.\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (itemPredicate(query, item, i, true)) {\n return item;\n }\n }\n }\n return undefined;\n}\nfunction getFilteredItems(query, _a) {\n var items = _a.items, itemPredicate = _a.itemPredicate, itemListPredicate = _a.itemListPredicate;\n if (Utils.isFunction(itemListPredicate)) {\n // note that implementations can reorder the items here\n return itemListPredicate(query, items);\n }\n else if (Utils.isFunction(itemPredicate)) {\n return items.filter(function (item, index) { return itemPredicate(query, item, index); });\n }\n return items;\n}\n/** Wrap number around min/max values: if it exceeds one bound, return the other. */\nfunction wrapNumber(value, min, max) {\n if (value < min) {\n return max;\n }\n else if (value > max) {\n return min;\n }\n return value;\n}\nfunction isItemDisabled(item, index, itemDisabled) {\n if (itemDisabled == null || item == null) {\n return false;\n }\n else if (Utils.isFunction(itemDisabled)) {\n return itemDisabled(item, index);\n }\n return !!item[itemDisabled];\n}\n/**\n * Get the next enabled item, moving in the given direction from the start\n * index. A `null` return value means no suitable item was found.\n * @param items the list of items\n * @param itemDisabled callback to determine if a given item is disabled\n * @param direction amount to move in each iteration, typically +/-1\n * @param startIndex which index to begin moving from\n */\nexport function getFirstEnabledItem(items, itemDisabled, direction, startIndex) {\n if (direction === void 0) { direction = 1; }\n if (startIndex === void 0) { startIndex = items.length - 1; }\n if (items.length === 0) {\n return null;\n }\n // remember where we started to prevent an infinite loop\n var index = startIndex;\n var maxIndex = items.length - 1;\n do {\n // find first non-disabled item\n index = wrapNumber(index + direction, 0, maxIndex);\n if (!isItemDisabled(items[index], index, itemDisabled)) {\n return items[index];\n }\n } while (index !== startIndex && startIndex !== -1);\n return null;\n}\n//# sourceMappingURL=queryList.js.map","/*\n * Copyright 2017 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { __assign, __extends, __rest } from \"tslib\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { Button, DISPLAYNAME_PREFIX, getRef, InputGroup, isRefObject, Keys, Popover, Position, Utils, } from \"@blueprintjs/core\";\nimport { Classes } from \"../../common\";\nimport { QueryList } from \"../query-list/queryList\";\nvar Select = /** @class */ (function (_super) {\n __extends(Select, _super);\n function Select() {\n var _a;\n var _this = _super.apply(this, arguments) || this;\n _this.state = { isOpen: false };\n _this.TypedQueryList = QueryList.ofType();\n _this.inputEl = null;\n _this.queryList = null;\n _this.refHandlers = {\n input: isRefObject((_a = _this.props.inputProps) === null || _a === void 0 ? void 0 : _a.inputRef)\n ? (_this.inputEl = _this.props.inputProps.inputRef)\n : function (ref) {\n var _a, _b;\n _this.inputEl = ref;\n (_b = (_a = _this.props.inputProps) === null || _a === void 0 ? void 0 : _a.inputRef) === null || _b === void 0 ? void 0 : _b(ref);\n },\n queryList: function (ref) { return (_this.queryList = ref); },\n };\n _this.renderQueryList = function (listProps) {\n // not using defaultProps cuz they're hard to type with generics (can't use <T> on static members)\n var _a = _this.props, _b = _a.filterable, filterable = _b === void 0 ? true : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.inputProps, inputProps = _d === void 0 ? {} : _d, _e = _a.popoverProps, popoverProps = _e === void 0 ? {} : _e;\n var input = (React.createElement(InputGroup, __assign({ leftIcon: \"search\", placeholder: \"Filter...\", rightElement: _this.maybeRenderClearButton(listProps.query) }, inputProps, { inputRef: _this.refHandlers.input, onChange: listProps.handleQueryChange, value: listProps.query })));\n var handleKeyDown = listProps.handleKeyDown, handleKeyUp = listProps.handleKeyUp;\n return (React.createElement(Popover, __assign({ autoFocus: false, enforceFocus: false, isOpen: _this.state.isOpen, disabled: disabled, position: Position.BOTTOM_LEFT }, popoverProps, { className: classNames(listProps.className, popoverProps.className), onInteraction: _this.handlePopoverInteraction, popoverClassName: classNames(Classes.SELECT_POPOVER, popoverProps.popoverClassName), onOpening: _this.handlePopoverOpening, onOpened: _this.handlePopoverOpened, onClosing: _this.handlePopoverClosing }),\n React.createElement(\"div\", { onKeyDown: _this.state.isOpen ? handleKeyDown : _this.handleTargetKeyDown, onKeyUp: _this.state.isOpen ? handleKeyUp : undefined }, _this.props.children),\n React.createElement(\"div\", { onKeyDown: handleKeyDown, onKeyUp: handleKeyUp },\n filterable ? input : undefined,\n listProps.itemList)));\n };\n _this.handleTargetKeyDown = function (event) {\n // open popover when arrow key pressed on target while closed\n if (event.which === Keys.ARROW_UP || event.which === Keys.ARROW_DOWN) {\n event.preventDefault();\n _this.setState({ isOpen: true });\n }\n };\n _this.handleItemSelect = function (item, event) {\n _this.setState({ isOpen: false });\n Utils.safeInvoke(_this.props.onItemSelect, item, event);\n };\n _this.handlePopoverInteraction = function (isOpen) {\n _this.setState({ isOpen: isOpen });\n Utils.safeInvokeMember(_this.props.popoverProps, \"onInteraction\", isOpen);\n };\n _this.handlePopoverOpening = function (node) {\n // save currently focused element before popover steals focus, so we can restore it when closing.\n _this.previousFocusedElement = document.activeElement;\n if (_this.props.resetOnClose) {\n _this.resetQuery();\n }\n Utils.safeInvokeMember(_this.props.popoverProps, \"onOpening\", node);\n };\n _this.handlePopoverOpened = function (node) {\n // scroll active item into view after popover transition completes and all dimensions are stable.\n if (_this.queryList != null) {\n _this.queryList.scrollActiveItemIntoView();\n }\n requestAnimationFrame(function () {\n var _a = _this.props.inputProps, inputProps = _a === void 0 ? {} : _a;\n // autofocus is enabled by default\n if (inputProps.autoFocus !== false && _this.inputEl != null) {\n getRef(_this.inputEl).focus();\n }\n });\n Utils.safeInvokeMember(_this.props.popoverProps, \"onOpened\", node);\n };\n _this.handlePopoverClosing = function (node) {\n // restore focus to saved element.\n // timeout allows popover to begin closing and remove focus handlers beforehand.\n requestAnimationFrame(function () {\n if (_this.previousFocusedElement !== undefined) {\n _this.previousFocusedElement.focus();\n _this.previousFocusedElement = undefined;\n }\n });\n Utils.safeInvokeMember(_this.props.popoverProps, \"onClosing\", node);\n };\n _this.resetQuery = function () { return _this.queryList && _this.queryList.setQuery(\"\", true); };\n return _this;\n }\n Select.ofType = function () {\n return Select;\n };\n Select.prototype.render = function () {\n // omit props specific to this component, spread the rest.\n var _a = this.props, filterable = _a.filterable, inputProps = _a.inputProps, popoverProps = _a.popoverProps, restProps = __rest(_a, [\"filterable\", \"inputProps\", \"popoverProps\"]);\n return (React.createElement(this.TypedQueryList, __assign({}, restProps, { onItemSelect: this.handleItemSelect, ref: this.refHandlers.queryList, renderer: this.renderQueryList })));\n };\n Select.prototype.componentDidUpdate = function (_prevProps, prevState) {\n if (this.state.isOpen && !prevState.isOpen && this.queryList != null) {\n this.queryList.scrollActiveItemIntoView();\n }\n };\n Select.prototype.maybeRenderClearButton = function (query) {\n return query.length > 0 ? React.createElement(Button, { icon: \"cross\", minimal: true, onClick: this.resetQuery }) : undefined;\n };\n Select.displayName = DISPLAYNAME_PREFIX + \".Select\";\n return Select;\n}(React.PureComponent));\nexport { Select };\n//# sourceMappingURL=select.js.map","import { useEffect } from 'react';\nconst useOutboundClickListener = (matomoInstance) => {\n const handleOutboundClick = (event) => {\n const { target } = event;\n if (!(target instanceof HTMLAnchorElement)) {\n return;\n }\n const { href } = target;\n // Check if the click target differs from the current hostname, meaning it's external\n if (\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n !href.match(new RegExp(`^(http://www.|https://www.|http://|https://)+(${window.location.hostname})`))) {\n matomoInstance.trackLink({ href });\n }\n };\n useEffect(() => {\n window.document.addEventListener('click', handleOutboundClick);\n return () => window.document.removeEventListener('click', handleOutboundClick);\n }, []);\n};\nexport default useOutboundClickListener;\n//# sourceMappingURL=useOutboundClickListener.js.map","import { useCallback, useContext } from 'react';\nimport MatomoContext from './MatomoContext';\nimport useOutboundClickListener from './utils/useOutboundClickListener';\nfunction useMatomo() {\n const instance = useContext(MatomoContext);\n const trackPageView = useCallback((params) => instance === null || instance === void 0 ? void 0 : instance.trackPageView(params), [instance]);\n const trackEvent = useCallback((params) => instance === null || instance === void 0 ? void 0 : instance.trackEvent(params), [instance]);\n const trackEvents = useCallback(() => instance === null || instance === void 0 ? void 0 : instance.trackEvents(), [instance]);\n const trackSiteSearch = useCallback((params) => instance === null || instance === void 0 ? void 0 : instance.trackSiteSearch(params), [instance]);\n const trackLink = useCallback((params) => instance === null || instance === void 0 ? void 0 : instance.trackLink(params), [instance]);\n const enableLinkTracking = useCallback(() => {\n if (instance) {\n useOutboundClickListener(instance);\n }\n }, [instance]);\n const pushInstruction = useCallback((name, ...args) => {\n instance === null || instance === void 0 ? void 0 : instance.pushInstruction(name, ...args);\n }, [instance]);\n return {\n trackEvent,\n trackEvents,\n trackPageView,\n trackSiteSearch,\n trackLink,\n enableLinkTracking,\n pushInstruction,\n };\n}\nexport default useMatomo;\n//# sourceMappingURL=useMatomo.js.map"],"sourceRoot":""} \ No newline at end of file diff --git a/cate/webapi/app/static/js/main.52d53f34.chunk.js b/cate/webapi/app/static/js/main.52d53f34.chunk.js new file mode 100644 index 000000000..da2fb9071 --- /dev/null +++ b/cate/webapi/app/static/js/main.52d53f34.chunk.js @@ -0,0 +1,2 @@ +(this["webpackJsonpcate-app"]=this["webpackJsonpcate-app"]||[]).push([[0],{10:function(e,t,n){"use strict";n.d(t,"b",(function(){return C})),n.d(t,"a",(function(){return k})),n.d(t,"P",(function(){return w})),n.d(t,"gc",(function(){return S})),n.d(t,"ec",(function(){return j})),n.d(t,"hc",(function(){return I})),n.d(t,"I",(function(){return P})),n.d(t,"fc",(function(){return D})),n.d(t,"h",(function(){return L})),n.d(t,"N",(function(){return T})),n.d(t,"i",(function(){return N})),n.d(t,"v",(function(){return R})),n.d(t,"Q",(function(){return x})),n.d(t,"jc",(function(){return M})),n.d(t,"X",(function(){return V})),n.d(t,"r",(function(){return B})),n.d(t,"B",(function(){return W})),n.d(t,"c",(function(){return F})),n.d(t,"x",(function(){return Y})),n.d(t,"H",(function(){return H})),n.d(t,"V",(function(){return K})),n.d(t,"M",(function(){return z})),n.d(t,"cb",(function(){return q})),n.d(t,"ub",(function(){return J})),n.d(t,"tb",(function(){return X})),n.d(t,"Fb",(function(){return Z})),n.d(t,"Eb",(function(){return Q})),n.d(t,"O",(function(){return $})),n.d(t,"W",(function(){return ee})),n.d(t,"xb",(function(){return te})),n.d(t,"Wb",(function(){return ne})),n.d(t,"w",(function(){return ae})),n.d(t,"yb",(function(){return re})),n.d(t,"E",(function(){return oe})),n.d(t,"F",(function(){return ie})),n.d(t,"T",(function(){return le})),n.d(t,"S",(function(){return ce})),n.d(t,"R",(function(){return se})),n.d(t,"vb",(function(){return ue})),n.d(t,"wb",(function(){return de})),n.d(t,"fb",(function(){return pe})),n.d(t,"D",(function(){return he})),n.d(t,"U",(function(){return fe})),n.d(t,"u",(function(){return me})),n.d(t,"kb",(function(){return be})),n.d(t,"gb",(function(){return ve})),n.d(t,"s",(function(){return ye})),n.d(t,"t",(function(){return ge})),n.d(t,"Sb",(function(){return Oe})),n.d(t,"Rb",(function(){return Ee})),n.d(t,"Tb",(function(){return _e})),n.d(t,"Ub",(function(){return Ce})),n.d(t,"Vb",(function(){return ke})),n.d(t,"lb",(function(){return we})),n.d(t,"jb",(function(){return Se})),n.d(t,"C",(function(){return je})),n.d(t,"hb",(function(){return Ie})),n.d(t,"ib",(function(){return Pe})),n.d(t,"m",(function(){return De})),n.d(t,"o",(function(){return Le})),n.d(t,"n",(function(){return Te})),n.d(t,"p",(function(){return Ae})),n.d(t,"oc",(function(){return Ne})),n.d(t,"J",(function(){return Re})),n.d(t,"kc",(function(){return xe})),n.d(t,"bb",(function(){return Me})),n.d(t,"Y",(function(){return Be})),n.d(t,"Xb",(function(){return We})),n.d(t,"Ab",(function(){return Fe})),n.d(t,"ic",(function(){return Ue})),n.d(t,"Yb",(function(){return Ge})),n.d(t,"Mb",(function(){return Ye})),n.d(t,"Jb",(function(){return He})),n.d(t,"mc",(function(){return Ke})),n.d(t,"nc",(function(){return ze})),n.d(t,"lc",(function(){return qe})),n.d(t,"K",(function(){return Je})),n.d(t,"ab",(function(){return Ze})),n.d(t,"Z",(function(){return Qe})),n.d(t,"Bb",(function(){return $e})),n.d(t,"zb",(function(){return et})),n.d(t,"Ob",(function(){return tt})),n.d(t,"Pb",(function(){return nt})),n.d(t,"Db",(function(){return at})),n.d(t,"Nb",(function(){return rt})),n.d(t,"z",(function(){return ot})),n.d(t,"g",(function(){return it})),n.d(t,"ac",(function(){return lt})),n.d(t,"Kb",(function(){return ct})),n.d(t,"Gb",(function(){return st})),n.d(t,"cc",(function(){return ut})),n.d(t,"dc",(function(){return dt})),n.d(t,"d",(function(){return pt})),n.d(t,"e",(function(){return ht})),n.d(t,"f",(function(){return ft})),n.d(t,"mb",(function(){return bt})),n.d(t,"Qb",(function(){return vt})),n.d(t,"nb",(function(){return yt})),n.d(t,"y",(function(){return gt})),n.d(t,"db",(function(){return Ot})),n.d(t,"pb",(function(){return Et})),n.d(t,"l",(function(){return _t})),n.d(t,"j",(function(){return Ct})),n.d(t,"k",(function(){return wt})),n.d(t,"L",(function(){return St})),n.d(t,"rb",(function(){return jt})),n.d(t,"qb",(function(){return It})),n.d(t,"ob",(function(){return Pt})),n.d(t,"Ib",(function(){return Dt})),n.d(t,"Hb",(function(){return Lt})),n.d(t,"Lb",(function(){return Tt})),n.d(t,"Zb",(function(){return At})),n.d(t,"bc",(function(){return Nt})),n.d(t,"Cb",(function(){return Rt})),n.d(t,"sb",(function(){return xt})),n.d(t,"G",(function(){return Mt})),n.d(t,"q",(function(){return Vt})),n.d(t,"eb",(function(){return Bt})),n.d(t,"A",(function(){return Wt}));var a=n(30),r=n(6),o=n(32),i=n(135),l=n(25),c=n(64),s=n(37),u=n(18),d=n(53),p=n(61),h=n(15),f=n(16),m=function(){function e(t){Object(h.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(f.a)(e,[{key:"loadPreferences",value:function(){return this.webAPIClient.call("get_preferences",[])}},{key:"updatePreferences",value:function(e){return this.webAPIClient.call("set_preferences",[e])}}]),e}(),b=n(784),v=n(136);function y(e,t,n){var a=function(e,t){return t&&t.length>0&&(e+="?"+t.map((function(e){return e.map(encodeURIComponent).join("=")})).join("&")),e}(e,t);return console.debug("Calling API: ",a),fetch(a,n).then((function(e){if(!e.ok)throw console.log(e),new v.a(e.status,e.statusText);return e})).catch((function(e){throw e}))}function g(e,t,n,a){return y(e,t,n).then((function(e){return e.blob()})).then((function(e){return function(e,t){t||(t="cate_"+Object(b.a)()+".zip");var n=URL.createObjectURL(e),a=document.createElement("a");a.href=n,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(n)}(e,a),e}))}function O(e,t,n){return y(e,t,n).then((function(e){return e.json()}))}var E=function(){function e(t){Object(h.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(f.a)(e,[{key:"monitorProcess",value:function(e,t){return this.webAPIClient.call("monitor_download_files",[e],t,(function(){}))}},{key:"registerProcess",value:function(e){return O(e+"/files/download",void 0,{mode:"cors",method:"PUT",body:JSON.stringify({})})}},{key:"uploadFiles",value:function(e,t,n){var a=new FormData;return a.append("dir",e),a.append("files",t,t.name),O(n+"/files/upload",void 0,{mode:"cors",method:"POST",body:a})}},{key:"downloadFiles",value:function(e,t,n){var a={target_files:e,process_id:t};return g(n+"/files/download",void 0,{mode:"cors",method:"POST",body:JSON.stringify(a)})}}]),e}(),_=Object(i.b)(),C={},k=[],w=function(e){return e.session.offlineMode},S=function(e){return e.communication.webAPIServiceInfo},j=function(e){return e.communication.webAPIClient},I=function(e){return e.communication.webAPIServiceURL},P=function(e){return!!_&&!!_.ipcRenderer&&!!e.communication.webAPIServiceInfo&&!e.communication.webAPIServiceInfo.userRootMode},D=Object(o.createSelector)(I,(function(e){return function(e){return A(e,!1,"/")}(e)})),L=Object(o.createSelector)(I,(function(e){return function(e){return A(e,!0,"api")}(e)})),T=Object(o.createSelector)(I,(function(e){return function(e){return A(e,!0,"mpl/figures/")}(e)}));function A(e,t,n){var a=new URL(e),r=t?"https:"===a.protocol?"wss:":"ws:":a.protocol,o=a.pathname,i="".concat(r,"//").concat(a.host);return o&&"/"!==o&&(i+=o),n&&(n.startsWith("/")||i.endsWith("/")||(i+="/"),i+=n),i}var N=Object(o.createSelector)(j,(function(e){return new s.a(e)})),R=Object(o.createSelector)(j,(function(e){return new s.c(e)})),x=Object(o.createSelector)(j,(function(e){return new s.h(e)})),M=Object(o.createSelector)(j,(function(e){return new s.j(e)})),V=Object(o.createSelector)(j,(function(e){return new m(e)})),B=Object(o.createSelector)(j,(function(e){return new s.b(e)})),W=Object(o.createSelector)(j,(function(e){return null!==e?new s.f(e):null})),F=function(e){var t=new Set;for(var n in e.communication.tasks){var a=e.communication.tasks[n];a.status!==s.g.NEW&&a.status!==s.g.SUBMITTED&&a.status!==s.g.IN_PROGRESS||t.add(a.requestLock)}return t},U={},G=function(e){return e.control.dialogs},Y=function(e){return U[e]||(U[e]=Object(o.createSelector)(G,(function(t){return t[e]||C}))),U[e]},H=Object(o.createSelector)(G,(function(e){return Object.getOwnPropertyNames(e).some((function(t){return e[t].isOpen}))})),K=function(e){return e.session.panelContainerUndockedMode},z=function(e){return e.session.leftPanelContainerLayout},q=function(e){return e.session.rightPanelContainerLayout},J=function(e){return e.session.selectedLeftTopPanelId},X=function(e){return e.session.selectedLeftBottomPanelId},Z=function(e){return e.session.selectedRightTopPanelId},Q=function(e){return e.session.selectedRightBottomPanelId},$=function(e){return e.control.newPlacemarkToolType},ee=function(e){return e.session.placemarkCollection},te=function(e){return e.session.selectedPlacemarkId},ne=function(e){return e.session.showPlacemarkDetails},ae=function(e){return e.session.defaultPlacemarkStyle},re=Object(o.createSelector)((function(e){return e.session.placemarkCollection.features}),te,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),oe=function(e){return e.location.globeMousePosition},ie=function(e){return e.location.globeViewPosition},le=function(e){return e.data.operations},ce=function(e){return e.session.operationFilterTags},se=function(e){return e.session.operationFilterExpr},ue=function(e){return e.session.selectedOperationName},de=Object(o.createSelector)(le,ue,(function(e,t){return e&&e.length&&t?e.find((function(e){return e.name===t})):null})),pe=Object(o.createSelector)(le,(function(e){return e.control.selectedCtxOperationName}),(function(e,t){return e&&e.length&&t?e.find((function(e){return e.name===t})):null})),he=Object(o.createSelector)(le,ce,se,(function(e,t,n){var a=e&&e.length,r=n&&""!==n,o=t&&t.length;if(a&&(r||o)){var i,l;if(r){var c=n.toLowerCase().split(" ");i=function(e){return c.every((function(t){return e.name.toLowerCase().includes(t)}))}}else i=function(e){return!0};return l=o?function(e){return!t.length||t.every((function(t){return new Set(e.tags).has(t)}))}:function(e){return!0},e.filter((function(e){return i(e)&&l(e)}))}return e||k})),fe=Object(o.createSelector)(le,(function(e){var t=new Map;return(e||k).forEach((function(e){return(e.tags||k).forEach((function(e){t.set(e,(t.get(e)||0)+1)}))})),t})),me=function(e){return e.data.dataStores},be=function(e){return e.session.selectedDataStoreId},ve=function(e){return e.session.selectedDataSourceId},ye=function(e){return e.session.dataSourceFilterExpr},ge=function(e){return e.session.dataSourceListHeight},Oe=function(e){return e.session.showDataSourceDetails},Ee=function(e){return e.session.showAllDataSources},_e=function(e){return e.session.showDataSourceIDs},Ce=function(e){return e.session.showDataStoreDescription},ke=function(e){return e.session.showDataStoreNotices},we=Object(o.createSelector)(me,be,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),Se=Object(o.createSelector)(we,(function(e){return e&&e.dataSources||null})),je=Object(o.createSelector)(Se,ye,Ee,(function(e,t,n){if(e&&e.length&&(t&&""!==t||!n)){var a=t.toLowerCase().split(" ");return e.filter((function(e){return function(e,t,n){if(!t&&!Object(l.o)(e))return!1;var a=e.id.toLowerCase();if(n.every((function(e){return a.includes(e)})))return!0;var r=e.title||(e.metaInfo?e.metaInfo.title:null);if(!r||""===r)return!1;return r=r.toLowerCase(),n.every((function(e){return r.includes(e)}))}(e,n,a)}))}return e}));var Ie=Object(o.createSelector)(Se,ve,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),Pe=Object(o.createSelector)(Ie,(function(e){return e&&e.metaInfo&&e.metaInfo.time_range||null})),De=Object(o.createSelector)(be,Ie,(function(e,t){return null!==e&&"local"!==e&&"cci-zarr-store"!==e&&(!!t&&Object(l.j)(t))})),Le=(Object(o.createSelector)(Ie,(function(e){return!!e&&Object(l.n)(e)})),Object(o.createSelector)(Ie,(function(e){return e&&Object(l.l)(e)}))),Te=Object(o.createSelector)(Ie,(function(e){return e&&Object(l.k)(e)})),Ae=Object(o.createSelector)(Ie,(function(e){return e&&Object(l.m)(e)})),Ne=function(e){return e.data.workspace},Re=function(e){return e.data.workspace&&e.data.workspace.isScratch},xe=function(e){return e.data.workspace&&e.data.workspace.baseDir},Me=function(e){return e.data.workspace?e.data.workspace.resources:k},Ve=function(e){return e.data.workspace?e.data.workspace.workflow.steps:k},Be=function(e){return e.session.resourceListHeight},We=function(e){return e.session.showResourceDetails},Fe=function(e){return e.control.selectedWorkspaceResourceName},Ue=function(e){return e.session.workflowStepListHeight},Ge=function(e){return e.session.showWorkflowStepDetails},Ye=function(e){return e.control.selectedWorkflowStepId||Fe(e)},He=function(e){return e.control.selectedVariableName},Ke=Object(o.createSelector)(Ne,(function(e){return null!==e?Object(l.N)(e):null})),ze=Object(o.createSelector)(xe,(function(e){return function(e){if(!e)return null;var t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.substring(t+1):e}(e)})),qe=Object(o.createSelector)(xe,(function(e){return Xe(e)})),Je=Object(o.createSelector)((function(e){return e.session.lastWorkspacePath}),(function(e){return Xe(e)}));function Xe(e){if(!e)return null;var t=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return t>=0?e.substring(0,t):""}var Ze=Object(o.createSelector)(Me,(function(e){return e.map((function(e){return e.name}))})),Qe=Object(o.createSelector)(Me,(function(e){var t={};return e.forEach((function(e){t[e.name]=e})),t})),$e=Object(o.createSelector)(Me,Fe,(function(e,t){return Ft(e,t)?e.find((function(e){return e.name===t})):null})),et=Object(o.createSelector)($e,(function(e){if(!e||!e.attributes)return k;var t=[],n=e.attributes;for(var a in n)n.hasOwnProperty(a)&&t.push([a,n[a]]);return t})),tt=Object(o.createSelector)(Me,Ye,(function(e,t){return Ft(e,t)?e.find((function(e){return e.name===t})):null})),nt=Object(o.createSelector)(Ve,Ye,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),at=Object(o.createSelector)(Ve,Fe,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),rt=Object(o.createSelector)(le,nt,(function(e,t){return e&&t&&t.op?Object(l.r)(e,t.op):null})),ot=Object(o.createSelector)(Me,(function(e){return e.filter((function(e){return Object(l.V)(e)}))})),it=(Object(o.createSelector)($e,(function(e){return e&&Object(l.V)(e)?e:null})),Object(o.createSelector)(Me,(function(e){return e.filter((function(e){return Object(l.T)(e)}))}))),lt=Object(o.createSelector)($e,(function(e){return e&&e.variables||null})),ct=Object(o.createSelector)(lt,He,(function(e,t){return Ft(e,t)?(e||k).find((function(e){return e.name===t})):null})),st=Object(o.createSelector)(ct,(function(e){if(!e)return null;var t=[["Data type",e.dataType],["Units",e.units||""],["Valid minimum",e.validMin],["Valid maximum",e.validMax],["Dimension names",e.dimNames&&e.dimNames.join(", ")],["Array shape",e.shape&&e.shape.join(", ")],["Chunk sizes",e.chunkSizes&&e.chunkSizes.join(", ")],[" ",""]],n=e.attributes;return n&&Object.getOwnPropertyNames(n).forEach((function(e){t.push([e,n[e]])})),t})),ut=function(e){return e.control.viewLayout},dt=function(e){return e.control.views},pt=function(e){return e.control.activeViewId},ht=(Object(o.createSelector)(dt,(function(e){return e?e.filter((function(e){return"figure"===e.type})):k})),Object(o.createSelector)(dt,pt,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null}))),ft=Object(o.createSelector)(ht,(function(e){return e?e.type:null})),mt=Object(o.createSelector)(ht,(function(e){return e&&"world"===e.type?e.data.selectedEntityId:null})),bt=Object(o.createSelector)(ht,mt,(function(e,t){return Object(l.O)(e)})),vt=Object(o.createSelector)(ht,(function(e){return e?Object(l.R)(e):null})),yt=Object(o.createSelector)(ht,l.P),gt=function(e){return l.f},Ot=function(e){return e.session.savedLayers},Et=Object(o.createSelector)(ht,(function(e){return e&&e.data.selectedLayerId||null})),_t=function(e){return e.data.baseMaps},Ct=Object(o.createSelector)(_t,ht,(function(e,t){return t&&t.data.baseMapId||l.e})),kt=Object(o.createSelector)(_t,ht,(function(e,t){return t&&t.data.baseMapId&&e.find((function(e){return e.id===t.data.baseMapId}))||l.d})),wt=Object(o.createSelector)(kt,(function(e){return e.options})),St=Object(o.createSelector)(ht,(function(e){return e&&e.data.layers||null})),jt=Object(o.createSelector)(St,Et,(function(e,t){return Ft(e,t)?e.find((function(e){return e.id===t})):null})),It=Object(o.createSelector)(St,Et,(function(e,t){return Ft(e,t)?e.findIndex((function(e){return e.id===t})):-1})),Pt=Object(o.createSelector)(jt,(function(e){return!e||"Image"!==e.type&&"VariableImage"!==e.type?null:e})),Dt=Object(o.createSelector)(jt,(function(e){return e&&"VariableImage"===e.type?e:null})),Lt=Object(o.createSelector)(Dt,(function(e){if(e){var t=Object(u.d)(e.displayMin)?e.displayMin:0;return[t,Object(u.d)(e.displayMax)?e.displayMax:t+1]}return null})),Tt=Object(o.createSelector)(jt,(function(e){return!e||"Vector"!==e.type&&"ResourceVector"!==e.type?null:e})),At=function(e){return e.session.styleContext},Nt=Object(o.createSelector)(ht,At,Tt,re,bt,(function(e){return e.control.entityUpdateCount}),(function(e,t,n,a,o,i){var s,u=n&&n.style;if(t===c.e)s=u;else if(t===c.d)if(a){var h=Object(p.c)(a.properties);s=Object(r.a)(Object(r.a)({},u),h)}else if(o){var f=Object(d.g)(o),m=Object(l.Q)(e,o),b=m&&m.style,v=m&&m.entityStyles&&m.entityStyles[o.id];s=Object(r.a)(Object(r.a)(Object(r.a)(Object(r.a)({},u),b),f),v)}return Object(r.a)(Object(r.a)({},p.a),s)})),Rt=Object(o.createSelector)(jt,(function(e){return e&&"ResourceVector"===e.type?e:null})),xt=Object(o.createSelector)(Me,(function(e){var t,n=[],r=Object(a.a)(e);try{for(r.s();!(t=r.n()).done;){var o=t.value;if(o.variables){var i,c=Object(a.a)(o.variables);try{for(c.s();!(i=c.n()).done;){var s=i.value;(Object(l.Z)(s)||Object(l.ab)(s))&&n.push({resource:o,variable:s})}}catch(u){c.e(u)}finally{c.f()}}}}catch(u){r.e(u)}finally{r.f()}return n})),Mt=Object(o.createSelector)($e,ct,Dt,F,(function(e,t,n,a){var r=n;if(!e||!t||!r)return!1;var o=Object(l.G)(e.name,t.name,r.varIndex);return a.has(o)})),Vt=function(e){return e.data.colorMaps},Bt=Object(o.createSelector)(Vt,Dt,(function(e,t){var n=t?t.colorMapName:null;if(Ft(e,n)){var r,o=Object(a.a)(e);try{for(o.s();!(r=o.n()).done;){var i=r.value.colorMaps.find((function(e){return e.name===n}));if(i)return i}}catch(l){o.e(l)}finally{o.f()}}return null})),Wt=Object(o.createSelector)(j,(function(e){return new E(e)}));function Ft(e,t){return e&&e.length&&!!t}},101:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return o}));n(6);var a=n(44);n(18);function r(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return Object.assign.apply(Object,[{},e].concat(n))}function o(e,t,n){var o=e[t];return r(e,Object(a.a)({},t,r(o,n)))}},106:function(e,t,n){"use strict";n.d(t,"b",(function(){return b})),n.d(t,"a",(function(){return v}));var a=n(15),r=n(16),o=n(7),i=n(19),l=n(20),c=n(68),s=n(2),u=n(28),d=n(5),p=n(41),h=n(8),f=n(10),m=n(46),b="openWorkspaceDialog",v="deleteWorkspaceDialog";var y=function(e){Object(i.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(a.a)(this,n),(r=t.call(this,e)).renderItem=function(e){return s.createElement("span",null,e)},r.state={workspaceDir:"",currentWorkspaceName:"",selectedWorkspaceName:"",deleteEntireWorkspace:!0},r.onCancel=r.onCancel.bind(Object(o.a)(r)),r.onConfirm=r.onConfirm.bind(Object(o.a)(r)),r.canConfirm=r.canConfirm.bind(Object(o.a)(r)),r.renderBody=r.renderBody.bind(Object(o.a)(r)),r.onWorkspaceNameChange=r.onWorkspaceNameChange.bind(Object(o.a)(r)),r.onWorkspaceDirChange=r.onWorkspaceDirChange.bind(Object(o.a)(r)),r}return Object(r.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({workspaceDir:e.workspaceDir,currentWorkspaceName:e.currentWorkspaceName})}},{key:"onCancel",value:function(){this.props.dispatch(h.Nb(this.props.dialogId)),this.resetSelectedWorkspaceName()}},{key:"canConfirm",value:function(){return!("undefined"===this.state.selectedWorkspaceName||!this.state.selectedWorkspaceName)&&/^([A-Za-z_\-\s0-9.]+)$/.test(this.state.selectedWorkspaceName)}},{key:"composeWorkspacePath",value:function(){var e=this.state.workspaceDir,t=this.state.selectedWorkspaceName;return null===e?t:e+"/"+t}},{key:"onConfirm",value:function(){this.props.dispatch(h.Nb(this.props.dialogId,this.state)),this.props.dialogId===v?this.props.dispatch(h.Jb(this.composeWorkspacePath(),this.state.deleteEntireWorkspace)):this.props.dispatch(h.fc(this.composeWorkspacePath())),this.resetSelectedWorkspaceName()}},{key:"resetSelectedWorkspaceName",value:function(){this.setState({selectedWorkspaceName:""})}},{key:"setSelectedWorkspace",value:function(e){this.setState({selectedWorkspaceName:e})}},{key:"handleCheckboxChange",value:function(e){this.setState({deleteEntireWorkspace:e.target.checked})}},{key:"onWorkspaceDirChange",value:function(e){this.setState({workspaceDir:e.target.value})}},{key:"onWorkspaceNameChange",value:function(e){this.setState({currentWorkspaceName:e.target.value})}},{key:"render",value:function(){var e,t,n=this.props.isOpen;return n?(this.props.dialogId===v?(e="Delete Workspace",t="Delete"):(e="Open Workspace",t="Open"),s.createElement(p.a,{isOpen:n,title:e,confirmTitle:t,onCancel:this.onCancel,canConfirm:this.canConfirm,onConfirm:this.onConfirm,renderBody:this.renderBody})):null}},{key:"renderBody",value:function(){var e,t=this;return this.props.isOpen?0===this.props.workspaceNames.length?s.createElement("div",null,s.createElement("p",{style:{marginTop:"1em"}},"No saved workspaces found.")):(this.props.dialogId===v&&(e=s.createElement(d.Tooltip,{content:"Also delete other files in the workspace folder"},s.createElement(d.Checkbox,{style:{marginTop:"1em"},label:"Delete entire workspace",checked:this.state.deleteEntireWorkspace,onChange:this.handleCheckboxChange.bind(this)}))),s.createElement("div",null,s.createElement("p",{style:{marginTop:"1em"}},"Saved workspaces:"),s.createElement(m.a,{items:this.props.workspaceNames,selectionMode:m.b.SINGLE,getItemKey:function(e,t){return e},renderItem:this.renderItem,onSelection:function(e){return t.setSelectedWorkspace(""+e[0])},selection:this.state.selectedWorkspaceName}),e)):null}}]),n}(s.Component);t.c=Object(u.b)((function(e,t){var n,a=f.x(t.dialogId)(e),r=a.isOpen,o=t.dialogId,i=f.I(e),l=a.workspaceDir,s=a.workspaceName;if(r&&(f.J(e)||(l=l||f.lc(e),s=s||f.nc(e)),l=l||f.K(e)),l=i?l||"":null,s=s||"",e.data.workspace&&e.data.workspaceNames){var u=(n=Object(c.a)(e.data.workspaceNames)).indexOf(s);u>-1&&n.splice(u,1)}return{workspaceDir:l,currentWorkspaceName:s,selectedWorkspaceName:"",dialogId:o,isOpen:r,isLocalFSAllowed:i,workspaceNames:n,deleteEntireWorkspace:this.deleteEntireWorkspace}}))(y)},135:function(e,t,n){"use strict";function a(){return Boolean(window.electron)}function r(){return window.electron||null}n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return r})),a()&&console.debug("We are running on Electron :)")},136:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n(15),r=n(16),o=n(19),i=n(20),l=n(412),c=function(e){Object(o.a)(n,e);var t=Object(i.a)(n);function n(e,r){var o;return Object(a.a)(this,n),(o=t.call(this,r))._status=void 0,o._status=e,o}return Object(r.a)(n,[{key:"status",get:function(){return this._status}},{key:"statusText",get:function(){return this.message}}],[{key:"fromResponse",value:function(e){return new n(e.status,e.statusText)}}]),n}(Object(l.a)(Error))},18:function(e,t,n){"use strict";function a(e){return"undefined"!==typeof e}function r(e){return"undefined"===typeof e}function o(e){return null!==e&&"undefined"!==typeof e}function i(e){return null===e||"undefined"===typeof e}function l(e){return"number"===typeof e}function c(e){return"string"===typeof e}function s(e){return"boolean"===typeof e}n.d(t,"b",(function(){return a})),n.d(t,"f",(function(){return r})),n.d(t,"c",(function(){return o})),n.d(t,"g",(function(){return i})),n.d(t,"d",(function(){return l})),n.d(t,"e",(function(){return c})),n.d(t,"a",(function(){return s}))},208:function(e,t,n){"use strict";n.d(t,"a",(function(){return C}));var a=n(30),r=n(6),o=n(15),i=n(16),l=n(7),c=n(19),s=n(20),u=n(2),d=n(28),p=n(5),h=n(411),f=n(41),m=n(8),b=n(10),v=n(52),y={width:"100%",marginBottom:"2em",display:"flex",flexGrow:1},g={flexGrow:1},O={flex:"none"},E={flex:1,display:"flex",flexDirection:"column",alignItems:"center",padding:"20px",border:"2px dashed #137cbd",borderRadius:"5px",background:"rgba(16, 22, 26, 0.3)",color:"#f5f8fa",transition:"border .24s ease-in-out"};var _=function(e){Object(c.a)(n,e);var t=Object(s.a)(n);function n(e){var a;return Object(o.a)(this,n),(a=t.call(this,e)).handleOnDrop=function(e){a.setState(Object(r.a)(Object(r.a)({},a.state),{},{files:e}))},a.handleOpenDirectoryOnClose=function(e){a.setState(Object(r.a)(Object(r.a)({},a.state),{},{dir:e})),console.log(e)},a.handleOpenDirectoryOpen=function(){a.props.dispatch(Object(m.Wc)({title:"Select Target Directory"},a.handleOpenDirectoryOnClose))},a.state={files:[],dir:"./"},a.onCancel=a.onCancel.bind(Object(l.a)(a)),a.onConfirm=a.onConfirm.bind(Object(l.a)(a)),a.canConfirm=a.canConfirm.bind(Object(l.a)(a)),a.renderBody=a.renderBody.bind(Object(l.a)(a)),a}return Object(i.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({files:[],dir:"./"})}},{key:"onCancel",value:function(){this.props.dispatch(m.Nb(n.DIALOG_ID))}},{key:"canConfirm",value:function(){return this.state.files.length>0}},{key:"onConfirm",value:function(){this.props.dispatch(m.Nb(n.DIALOG_ID,this.state));var e,t=Object(a.a)(this.state.files);try{for(t.s();!(e=t.n()).done;){var r=e.value;this.props.dispatch(m.sd(this.state.dir,r))}}catch(o){t.e(o)}finally{t.f()}}},{key:"render",value:function(){var e=this.props.isOpen;return e?u.createElement(f.a,{isOpen:e,title:"Upload files",icon:"upload",confirmTitle:"Upload",confirmIconName:"upload",confirmTooltip:"Upload files.",onCancel:this.onCancel,canConfirm:this.canConfirm,onConfirm:this.onConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){var e=this.state.files.map((function(e){return u.createElement("li",{key:e.name},e.name," - ",e.size," bytes")}));return this.state.files?u.createElement("div",null,u.createElement("div",null,"Remote target directory:",u.createElement(p.ControlGroup,{style:y,fill:!0},u.createElement(v.a,{style:g,value:this.state.dir,onChange:function(e){console.log(e)},nullable:!1}),u.createElement(p.AnchorButton,{intent:p.Intent.PRIMARY,style:O,onClick:this.handleOpenDirectoryOpen},"..."))),u.createElement("div",null,"Files to upload:",u.createElement(p.ControlGroup,{style:y,fill:!0},u.createElement(h.a,{onDrop:this.handleOnDrop},(function(t){var n=t.getRootProps,a=t.getInputProps;return u.createElement("section",{className:"container"},u.createElement("div",n({style:E}),u.createElement("input",a()),u.createElement("p",null,"Drag 'n' drop files here, or click to select files")),u.createElement("aside",null,e.length>0?u.createElement("h4",null,"Files"):"",u.createElement("ul",null,e)))}))))):null}}]),n}(u.Component);_.DIALOG_ID="fileUploadDialog";var C=_.DIALOG_ID;t.b=Object(d.b)((function(e){return{isOpen:b.x(_.DIALOG_ID)(e).isOpen,dialogId:_.DIALOG_ID}}))(_)},209:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(15),r=n(16),o=n(136),i=function(){function e(){Object(a.a)(this,e)}return Object(r.a)(e,[{key:"getServiceInfo",value:function(e){var t=new URL(e+"/");return fetch(t.toString()).then((function(e){if(!e.ok)throw o.a.fromResponse(e);return e.json()})).then((function(e){var t=e.content;return{name:t.name,version:t.version,timestamp:t.timestamp,userRootMode:t.user_root_mode,hostOS:t.host_os,dependencies:t.dependencies}}))}}]),e}()},211:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return g}));var a=n(6),r=n(30),o=n(25),i=n(18);var l=n(10),c=n(23),s=n(53);function u(e,t,n,a,i){if(!e||!e.length)return l.b;var c,s,u,f=Object(r.a)(e);try{for(f.s();!(u=f.n()).done;){var m=u.value,b=void 0,v=void 0;switch(m.type){case"VariableImage":b=d(m,a,i,t);break;case"ResourceVector":v=p(m,a,i,t);break;case"Vector":v=h(m,a,n)}b?c?c.push(b):c=[b]:v?s?s.push(v):s=[v]:m.id!==o.a&&console.warn('GlobeView: layer with ID "'.concat(m.id,'" will not be rendered'))}}catch(y){f.e(y)}finally{f.f()}return{imageLayerDescriptors:c,vectorLayerDescriptors:s}}function d(e,t,n,a){var r=Object(o.u)(a,e);if(!r)return console.warn('GlobeView: variable "'.concat(e.varName,'" not found in resource "').concat(e.resId,'"')),null;var i=r.imageLayout;if(!r.imageLayout)return console.warn('GlobeView: variable "'.concat(e.varName,'" of resource "').concat(e.resId,'" has no imageLayout')),null;var l=Object(o.M)(t,n,e),s=c.u.MAX_VALUE;if(i.extent){var u=i.extent;s=c.u.fromDegrees(u.west,u.south,u.east,u.north)}return Object.assign({},e,{imageryProvider:f,imageryProviderOptions:{url:l,rectangle:s,minimumLevel:0,maximumLevel:i.numLevels-1,tileWidth:i.tileWidth,tileHeight:i.tileHeight,tilingScheme:new c.k({rectangle:s,numberOfLevelZeroTilesX:i.numLevelZeroTilesX,numberOfLevelZeroTilesY:i.numLevelZeroTilesY})}})}function p(e,t,n,r){var i=Object(o.s)(r,e);return i?Object(a.a)(Object(a.a)({},e),{},{dataSource:b,dataSourceOptions:{data:Object(o.z)(t,n,e),resId:i.id,style:e.style}}):(console.warn('globe-view-layers: resource "'.concat(e.resId,'" not found"')),null)}function h(e,t,n){var r=e.data,i=e.style;return e.id===o.c?r=Object(o.C)(t):e.id===o.h&&(r=n),Object(a.a)(Object(a.a)({},e),{},{dataSource:m,dataSourceOptions:{data:r,style:i}})}function f(e,t){var n=new c.z(t);return n.errorEvent.addEventListener((function(e){console.error("GlobeView:",e)})),n}function m(e,t){var n=Object(s.k)(t.style||l.b);return c.j.load(t.data,n)}function b(e,t){return v(t.data,t.resId,t.style)}var v=function(e,t){var n={},a=0,r=function(){for(var r=arguments.length,o=new Array(r),l=0;l<r;l++)o[l]=arguments[l];var c=o.map((function(e){return"(".concat(e,":").concat(typeof e,")")})).join();if(c in n)return n[c];var s=e.apply(void 0,o);return(Object(i.g)(t)||t>0&&a<t)&&(n[c]=s,a++),s};return r.getMaxSize=function(){return t},r.getSize=function(){return a},r.clearCache=function(){n={},a=0},r}((function(e,t,n){var a=new c.g("Cate Resource #"+t),o=Object(s.k)(n),l=new Worker("".concat(".","/stream-geojson.js"));return l.postMessage(e),l.onmessage=function(e){var t=e.data;if(t){var n=c.d.fromAlpha(o.fill,.9),l=c.d.fromAlpha(o.fill,.5),s={type:"FeatureCollection",features:t};c.j.load(s,o).then((function(e){var o=new Map;t.forEach((function(e){return o.set(e.id,e)}));var s=new c.r(200,1,1e7,.1),u=new c.r(200,1,1e7,.5);a.entities.suspendEvents();var d,p=Object(r.a)(e.entities.values);try{for(p.s();!(d=p.n()).done;){var h=d.value,f=o.get(h.id);if(f&&Object(i.d)(f._simp)&&Object(i.d)(f._resId)&&Object(i.d)(f._idx)&&(h.point||h.billboard||h.label)){var m=.2;if(f.properties){var b=f.properties.area_npl43;b&&((m=(b-20)/480)<0&&(m=0),m>1&&(m=1))}var v=10+90*m;(h=new c.i({id:h.id,position:h.position,description:h.description,properties:h.properties,point:{color:n,outlineColor:l,outlineWidth:10,pixelSize:v,scaleByDistance:s,translucencyByDistance:u}}))._simp=f._simp,h._resId=f._resId,h._idx=f._idx}try{a.entities.add(h)}catch(y){console.error("failed to add entity: ",h,y)}}}catch(g){p.e(g)}finally{p.f()}e.entities.removeAll(),a.entities.resumeEvents(),a.changedEvent.raiseEvent()}))}},a})),y=["billboard","label","point","corridor","polyline","polygon"];function g(e,t,n){var a=Object(s.k)(n);c.j.load(t,a).then((function(t){var n=t.entities.values;n&&n.length&&function(e,t){var n=y.find((function(t){return c.E(e[t])})),a=y.find((function(e){return c.E(t[e])}));a&&n&&a!==n&&(t[a]=void 0);n&&(t[n]=e[n],Object(i.d)(t._simp)&&(t._simp&=-2))}(n[0],e)}))}},221:function(e,t){function n(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}n.keys=function(){return[]},n.resolve=n,e.exports=n,n.id=221},25:function(e,t,n){"use strict";n.d(t,"a",(function(){return f})),n.d(t,"c",(function(){return m})),n.d(t,"h",(function(){return b})),n.d(t,"g",(function(){return g})),n.d(t,"i",(function(){return O})),n.d(t,"N",(function(){return E})),n.d(t,"X",(function(){return _})),n.d(t,"Y",(function(){return C})),n.d(t,"y",(function(){return k})),n.d(t,"p",(function(){return w})),n.d(t,"o",(function(){return j})),n.d(t,"j",(function(){return I})),n.d(t,"l",(function(){return P})),n.d(t,"k",(function(){return D})),n.d(t,"n",(function(){return L})),n.d(t,"m",(function(){return T})),n.d(t,"M",(function(){return N})),n.d(t,"z",(function(){return R})),n.d(t,"A",(function(){return x})),n.d(t,"x",(function(){return M})),n.d(t,"D",(function(){return V})),n.d(t,"C",(function(){return B})),n.d(t,"J",(function(){return W})),n.d(t,"I",(function(){return F})),n.d(t,"Z",(function(){return U})),n.d(t,"ab",(function(){return G})),n.d(t,"w",(function(){return Y})),n.d(t,"V",(function(){return K})),n.d(t,"T",(function(){return z})),n.d(t,"U",(function(){return q})),n.d(t,"E",(function(){return J})),n.d(t,"F",(function(){return X})),n.d(t,"s",(function(){return Z})),n.d(t,"t",(function(){return Q})),n.d(t,"u",(function(){return ee})),n.d(t,"r",(function(){return te})),n.d(t,"q",(function(){return ne})),n.d(t,"v",(function(){return ae})),n.d(t,"K",(function(){return re})),n.d(t,"b",(function(){return ie})),n.d(t,"e",(function(){return le})),n.d(t,"d",(function(){return ce})),n.d(t,"gb",(function(){return pe})),n.d(t,"db",(function(){return he})),n.d(t,"B",(function(){return fe})),n.d(t,"cb",(function(){return me})),n.d(t,"eb",(function(){return be})),n.d(t,"f",(function(){return ve})),n.d(t,"R",(function(){return ge})),n.d(t,"O",(function(){return Oe})),n.d(t,"Q",(function(){return Ee})),n.d(t,"P",(function(){return _e})),n.d(t,"bb",(function(){return Ce})),n.d(t,"W",(function(){return ke})),n.d(t,"fb",(function(){return je})),n.d(t,"hb",(function(){return Ie})),n.d(t,"H",(function(){return De})),n.d(t,"G",(function(){return Le})),n.d(t,"S",(function(){return Ne})),n.d(t,"L",(function(){return Re}));var a=n(30),r=n(6),o=n(15),i=n(16),l=function(){function e(){Object(o.a)(this,e)}return Object(i.a)(e,null,[{key:"encode",value:function(e){for(var t="",n=0;n<e.length;n++){var a=e.codePointAt(n).toString(16);if(1===a.length)t+="0"+a;else{if(2!==a.length)throw new Error("string value must comprise utf-8 values only");t+=a}}return t.toUpperCase()}},{key:"decode",value:function(e){if(e.length%2!==0)throw new Error("string value length must be a multiple of two");for(var t="",n=0;n<e.length;n+=2){var a=parseInt(e.substr(n,2),16);if(Number.isNaN(a))throw new Error("string value must comprise hexadecimal values only");t+=String.fromCharCode(a)}return t}}]),e}(),c=n(64),s=n(29),u=n(18),d=n(10),p=n(53),h=n(61),f="auto",m="countries",b="myPlaces",v={id:f,type:"Unknown",visible:!0},y={id:m,name:"Countries",type:"Vector",visible:!1,style:Object(r.a)(Object(r.a)({},h.a),{},{stroke:"#ffff00",fill:"#FFFFFF",fillOpacity:.2,strokeWidth:1.5})},g={id:b,name:"My Places",type:"Vector",visible:!0,style:{markerSize:"small",markerColor:"#ff0000",markerSymbol:"",fill:"#0000ff",fillOpacity:.5,stroke:"#ffff00",strokeOpacity:.5,strokeWidth:1}},O="placemark-";function E(e){return l.encode(e.baseDir)}function _(e){return e&&("local"===e.id||e.isLocal)}function C(e){return e&&"local"!==e.id&&!e.isLocal}function k(e){var t,n,a=e.metaInfo;return a&&(!(t=a.catalog_url||a.catalogue_url)&&e.id.includes("esacci")&&a.uuid&&(t="https://catalogue.ceda.ac.uk/uuid/".concat(a.uuid)),n=a.info_url),{catalogUrl:t,infoUrl:n}}function w(e){var t=e.metaInfo;if(t){var n=S(t,"time"),a=S(t,"lon")&&S(t,"lat");if(n&&a)return["open","constrain_time","constrain_region"];if(n)return["open","constrain_time"];if(a)return["open","constrain_region"];if(Object(u.e)(t.data_type)&&"dataset"===t.data_type)return["open"]}}function S(e,t){return!(!e.coords||!e.coords.find((function(e){return function(e,t){return e.name===t&&!!e.dims&&1===e.dims.length&&!!e.dims.find((function(e){return e===t}))}(e,t)})))}function j(e){return A(e,"open","constrain_region","constrain_time","write_zarr")}function I(e){return A(e,"write_zarr")}function P(e){return A(e,"constrain_time")}function D(e){return A(e,"constrain_region")}function L(e){return A(e,"constrain_region")}function T(e){return e.metaInfo&&e.metaInfo.data_vars&&e.metaInfo.data_vars.length>1}function A(e){var t=e.capabilities;if(t||(e.dataType&&"dataset"===e.dataType||e.id.endsWith(".zarr"))&&(t=["open"]),Array.isArray(t)){for(var n=new Set(t),a=arguments.length,r=new Array(a>1?a-1:0),o=1;o<a;o++)r[o-1]=arguments[o];for(var i=0,l=r;i<l.length;i++){var c=l[i];if(n.has(c))return!0}return!1}}function N(e,t,n){return e+"ws/res/tile/".concat(t,"/").concat(n.resId,"/{z}/{y}/{x}.png?")+"&var=".concat(encodeURIComponent(n.varName))+"&index=".concat(encodeURIComponent((n.varIndex||[]).join()))+"&cmap=".concat(encodeURIComponent(n.colorMapName)+(n.alphaBlending?"_alpha":""))+"&min=".concat(encodeURIComponent(n.displayMin+""))+"&max=".concat(encodeURIComponent(n.displayMax+""))}function R(e,t,n){return e+"ws/res/geojson/".concat(t,"/").concat(n.resId)}function x(e,t,n,a){return e+"ws/res/geojson/".concat(t,"/").concat(n.resId,"/").concat(a)}function M(e,t,n,a){var r="";return a&&(r="?var=".concat(encodeURIComponent(a))),e+"ws/res/csv/".concat(t,"/").concat(n.resId).concat(r)}function V(e,t,n){return e+"ws/res/html/".concat(t,"/").concat(n)}function B(e){return e+"ws/countries"}function W(e,t,n){return"".concat(e).concat(t,"/").concat(n)}function F(e,t,n){return"".concat(e,"mpl/download/").concat(t,"/").concat(n)}function U(e){return e.numDims&&e.numDims>=2&&!!e.imageLayout}function G(e){return e.isFeatureAttribute}function Y(e){return e+Math.floor(4294967296*(1+Math.random())).toString(16)+"-"+Math.floor(Date.now()).toString(16)}function H(){return Y("layer-")}function K(e){return e&&Object(u.d)(e.id)&&e.dataType.endsWith(".Figure")}function z(e){return e&&Object(u.d)(e.id)&&e.dataType.endsWith(".HTML")}function q(e){return e&&(e.dataType.endsWith(".DataFrame")||e.dataType.endsWith(".GeoDataFrame"))}function J(e){if(e.name)return e.name;var t=e.varName,n=e.resName;return e.id===f?n&&t?"Selected Variable (".concat(n," / ").concat(t,")"):"Selected Variable (none)":n&&t?"".concat(n," / ").concat(t):e.id}function X(e){return Ce(e)?"map-marker":"Image"===e.type||"VariableImage"===e.type?"layout-grid":"layer"}function Z(e,t){return $(e,t.resId)}function Q(e,t){return e.find((function(e){return e.name===t}))}function $(e,t){return e.find((function(e){return e.id===t}))}function ee(e,t){var n=Z(e,t);return n&&n.variables&&n.variables.find((function(e){return e.name===t.varName}))}function te(e,t){return e&&e.find((function(e){return e.qualifiedName===t||e.name===t}))}function ne(e,t,n){var a=e&&e.find((function(e){return e.id===t}));if(a){var r=a.dataSources&&a.dataSources.find((function(e){return e.id===n}));if(r)return r}return null}function ae(e,t){var n=$(e,t.resId);if(!n)return d.a;var a=n.coordVariables;if(!a)return d.a;var r=n&&n.variables.find((function(e){return e.name===t.varName}));if(!r)return d.a;var o=t.varIndex;if(!o||!o.length)return d.a;var i=r.dimNames;if(!i||!i.length)return d.a;var l={};a.forEach((function(e){l[e.name]=e.data}));for(var c=[],s=0;s<o.length;s++){var u=o[s],p=s<i.length?i[s]:null,h=void 0;if(p){var f=l[p];h=f&&f.length&&u<f.length?f[u]:"-"}else h="?";c.push([p,h])}return c}function re(e,t){var n=e.coordVariables;if(!n)return d.b;var a=e&&e.variables.find((function(e){return e.name===t.varName}));if(!a)return d.b;var r=t.varIndex;if(!r||!r.length)return d.b;var o=a.dimNames;if(!o||!o.length)return d.b;var i={};n.forEach((function(e){i[e.name]=e.data}));for(var l={},c=0;c<r.length;c++){var s=r[c],u=c<o.length?o[c]:null;if(u){var p=i[u];p&&p.length&&s<p.length&&(l[u]=p[s])}}return l}var oe=function(e){return{id:e,title:e[0].toUpperCase()+e.substring(1),options:{url:"https://storage.googleapis.com/esa-cfs-tiles/0.7.0/basemaps/".concat(e,"/{z}/{x}/{reverseY}.png"),tilingScheme:"Geographic",maximumLevel:4}}},ie=[{id:"natural",title:"Natural",options:null},{id:"natural_offline",title:"Natural (offline)",options:{url:"./Cesium/Assets/Textures/NaturalEarthII/{z}/{x}/{reverseY}.jpg",credit:"\xa9 Analytical Graphics, Inc.",tilingScheme:"Geographic",maximumLevel:2}},oe("atmosphere"),oe("blue"),oe("dark"),oe("land"),oe("ocean")],le="atmosphere",ce=ie.find((function(e){return"atmosphere"===e.id}));function se(e){return{viewMode:"3D",projectionCode:"EPSG:4326",baseMapId:e||le,layers:[Object(r.a)({},v),Object(r.a)({},y),Object(r.a)({},g)],selectedLayerId:f,selectedEntityId:null,layerSplitPosition:.5}}function ue(e,t){return{resName:e,varName:t,dataRows:null}}var de=0;function pe(e){var t=++de;return{title:"World (".concat(t,")"),id:Y("world-"),type:"world",icon:"globe",data:se(e)}}function he(e){return{title:fe(e.name),id:"fig-".concat(e.id),type:"figure",icon:"timeline-area-chart",data:(t=e.id,{resourceId:t,fixedSize:!1})};var t}function fe(e){return"Figure - ".concat(e)}function me(e){return{title:(n=e.name,"Animation - ".concat(n)),id:"anim-".concat(e.id),type:"animation",icon:"play",data:(t=e.id,{resourceId:t,fixedSize:!1})};var t,n}function be(e,t){return{title:t?"".concat(e,".").concat(t):e,id:Y("table-"),type:"table",icon:"th",data:ue(e,t)}}var ve={id:"global_external_object_store"};function ye(e){if(e&&"world"===e.type)return ve["CesiumGlobe-"+e.id]}function ge(e){var t=ye(e);return t?t.object:null}function Oe(e){var t=ge(e);return t&&t.selectedEntity?t.selectedEntity:null}function Ee(e,t){var n=ye(e);if(!t||!n)return null;var r=n.object;s.a(r);var o=n.state.dataSourceMap;s.a(o);for(var i=r.dataSources,l=0;l<i.length;l++){var c=i.get(l);if(c.entities.contains(t)){var u,d=Object(a.a)(Object.getOwnPropertyNames(o));try{for(d.s();!(u=d.n()).done;){var p=u.value;if(c===o[p]){var h,f=Object(a.a)(e.data.layers);try{for(f.s();!(h=f.n()).done;){var m=h.value;if(m.id===p)return s.a(Ce(m)),m}}catch(b){f.e(b)}finally{f.f()}}}}catch(b){d.e(b)}finally{d.f()}}}return null}function _e(e){var t=Oe(e);return t?function(){return Object(p.f)(t)}:null}function Ce(e){return"Vector"===e.type||"ResourceVector"===e.type}function ke(e){return"Image"===e.type||"VariableImage"===e.type}var we=["#550000","#005500","#000055","#555555"],Se=["#FF0000","#FFA500","#FFFF00","#00FF00","#0000FF","#FF00FF","#00FFFF"];function je(e,t,n){s.a(e),s.a(t);var a=t&&U(t),o=t&&G(t);if(s.a(a||o,"geo-spatial variable expected"),a){var i=n&&n[t.name],l=Te(t,i);return Object(r.a)(Object(r.a)({},i),{},{id:H(),type:"VariableImage",name:"".concat(e.name,".").concat(t.name),visible:!0,resId:e.id,resName:e.name,varName:t.name},l)}var c=n&&n[t.name],u=c&&c.style;return Object(r.a)(Object(r.a)({},c),{},{id:H(),type:"ResourceVector",name:"".concat(e.name),visible:!0,resId:e.id,resName:e.name,style:Pe(e.id,u)})}function Ie(e,t,n,a){s.a(e),s.a(e.id===f);var o=n&&U(n),i=n&&G(n);if(o){var l=a&&a[n.name],c=Te(n,l);return Object(r.a)(Object(r.a)(Object(r.a)(Object(r.a)({},e),l),{},{type:"VariableImage",name:"Auto ".concat(t.name,".").concat(n.name),resId:t.id,resName:t.name,varName:n.name},c),{},{id:f})}if(i){var u=a&&a[t.name],d=u&&u.style;return Object(r.a)(Object(r.a)(Object(r.a)({},e),u),{},{type:"ResourceVector",name:"Auto ".concat(t.name),resId:t.id,resName:t.name,style:Pe(t.id,d),id:f})}return{type:"Unknown",name:n?"Auto ".concat(n.name," (geo-ref not found or recognized)"):"Auto (no selection)",visible:e.visible,id:f}}function Pe(e,t){return Object(r.a)(Object(r.a)({},h.a),{},{stroke:we[e%we.length],fill:Se[e%Se.length]},t)}function De(e){return'loadDataSources("'.concat(e,'")')}function Le(e,t,n){return function(e,t,n,a){return a&&a.length?"".concat(e,'("').concat(t,'", "').concat(n,'", [').concat(a,"])"):"".concat(e,'("').concat(t,'", "').concat(n,'")')}("getWorkspaceVariableStatistics",e,t,n)}function Te(e,t){var n,a;return t?a=t.varIndex&&t.varIndex.slice():e&&(n=function(e){var t=Object(u.d)(e.validMin)?e.validMin:0,n=Object(u.d)(e.validMax)?e.validMax:t+1;return{colorMapName:Object(u.e)(e.colorMapName)?e.colorMapName:"inferno",displayMin:Object(u.d)(e.displayMin)?e.displayMin:t,displayMax:Object(u.d)(e.displayMax)?e.displayMax:n,alphaBlending:!1,opacity:1,brightness:1,contrast:1,hue:0,saturation:1,gamma:1,splitMode:c.b}}(e)),e&&(a=function(e,t){if(e.numDims&&e.numDims>=2&&(!t||t.length!==e.numDims-2))return Array(e.numDims-2).fill(0);return t}(e,a)),Object(r.a)(Object(r.a)({},n),{},{varIndex:a})}var Ae=null;function Ne(){var e,t;if(null===Ae)try{e=document.createElement("canvas"),Ae=!0,t=(e.getContext("webgl")||e.getContext("experimental-webgl")).getSupportedExtensions(),console.debug("WebGL supported extensions:",t)}catch(n){return Ae=!1,console.warn("WebGL not supported but required by world view"),!1}return e=null,null,Ae}function Re(e,t){var n,r,o,i,l=e.geometry.type,c=t.features,s=new Set,u=Object(a.a)(c);try{for(u.s();!(n=u.n()).done;){var d=n.value.properties;d&&d.title&&d.title.startsWith(l)&&s.add(d.title)}}catch(p){u.e(p)}finally{u.f()}for(o=1;o<=c.length+1;o++)if(i="".concat(l," ").concat(o),!s.has(i)){r=i;break}return{title:r,index:o}}},29:function(e,t,n){"use strict";function a(e,t){if(!e)throw new Error("assertion failed"+(t?": ".concat(t):""))}n.d(t,"a",(function(){return a}))},310:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"b",(function(){return ERROR_CODE_INVALID_PARAMS})),__webpack_require__.d(__webpack_exports__,"a",(function(){return ERROR_CODE_CANCELLED})),__webpack_require__.d(__webpack_exports__,"h",(function(){return newWebAPIClient})),__webpack_require__.d(__webpack_exports__,"d",(function(){return getJobFailureIntentName})),__webpack_require__.d(__webpack_exports__,"c",(function(){return getJobFailureIconName})),__webpack_require__.d(__webpack_exports__,"e",(function(){return getJobFailureTitle})),__webpack_require__.d(__webpack_exports__,"f",(function(){return isDeveloperError})),__webpack_require__.d(__webpack_exports__,"g",(function(){return isUserError}));var D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(15),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(16),_blueprintjs_core__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(5),_Job__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(91),ERROR_CODE_INVALID_REQUEST=-32600,ERROR_CODE_METHOD_NOT_FOUND=-32601,ERROR_CODE_INVALID_PARAMS=-32602,ERROR_CODE_OS_ERROR=-32001,ERROR_CODE_OUT_OF_MEMORY=-32002,ERROR_CODE_METHOD_ERROR=-32003,ERROR_CODE_INVALID_RESPONSE=-32004,ERROR_CODE_CANCELLED=999,CANCEL_METHOD="__cancel__",DEBUG=!1;function newWebAPIClient(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0;return new WebAPIClientImpl(e,t,n)}var WebAPIClientImpl=function(){function WebAPIClientImpl(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments.length>2?arguments[2]:void 0;Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,WebAPIClientImpl),this.url=void 0,this.onOpen=void 0,this.onClose=void 0,this.onError=void 0,this.onWarning=void 0,this.socket=void 0,this.currentMessageId=0,this.activeJobs=void 0,this.url=e,this.currentMessageId=n,this.activeJobs=[],this.socket=a||new WebSocket(e),this.socket.onopen=function(e){t.onOpen&&t.onOpen(e)},this.socket.onclose=function(e){t.onClose&&t.onClose(e)},this.socket.onerror=function(e){t.onError&&t.onError(e)},this.socket.onmessage=function(e){t.processMessage(e.data)}}return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(WebAPIClientImpl,[{key:"call",value:function(e,t,n,a){var r={id:this.newId(),method:e,params:t},o=new JobImpl(this,r,a);return this.activeJobs[r.id]=o,o.invoke(n)}},{key:"cancel",value:function(e){var t=this.activeJobs[e];t?t.cancel():this.warn('Job with "id"='.concat(e," does not exist"))}},{key:"close",value:function(){this.socket.close()}},{key:"sendMessage",value:function(e){var t=Object.assign({},{jsonrpc:"2.0"},e),n=JSON.stringify(t);this.socket.send(n)}},{key:"processMessage",value:function processMessage(messageText){var message;try{message=eval("(".concat(messageText,")"))}catch(err){return void this.warnInvalidJsonRcpMessage("Message is no valid JSON",messageText)}if("2.0"===message.jsonrpc&&"number"===typeof message.id){var job=this.activeJobs[message.id];if(job)if(message.response||null===message.response)job.notifyDone(message.response),delete this.activeJobs[message.id];else if(message.progress)message.progress.id=message.id,job.notifyInProgress(message.progress);else{if(!message.error)return void this.warnInvalidJsonRcpMessage('Method is neither a "response", "progress", nor "error"',messageText);job.notifyFailed(message.error),delete this.activeJobs[message.id]}else this.warnInvalidJsonRcpMessage('Method with "id"='.concat(message.id," has no associated job"),messageText)}else this.warnInvalidJsonRcpMessage("Message is not JSON-RCP 2.0 compliant",messageText)}},{key:"warnInvalidJsonRcpMessage",value:function(e,t){if(this.onWarning){var n="Received invalid JSON-RCP message from Cate service. ".concat(e,". Ignoring it.\n--------------------\n").concat(t,"\n--------------------");this.onWarning({type:"warning",message:n})}}},{key:"warn",value:function(e){this.onWarning&&this.onWarning({type:"warning",message:e})}},{key:"newId",value:function(){return this.currentMessageId++}},{key:"isOpen",get:function(){return this.socket.readyState===WebSocket.OPEN}}]),WebAPIClientImpl}(),JobImpl=function(){function e(t,n,a){Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,e),this.webAPIClient=void 0,this.request=void 0,this.status=void 0,this.onProgress=void 0,this.onResolve=void 0,this.onReject=void 0,this.transformer=void 0,this.webAPIClient=t,this.request=n,this.status=_Job__WEBPACK_IMPORTED_MODULE_3__.a.NEW,this.transformer=a}return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(e,[{key:"getRequest",value:function(){return this.request}},{key:"getStatus",value:function(){return this.status}},{key:"isCancelled",value:function(){return this.status===_Job__WEBPACK_IMPORTED_MODULE_3__.a.CANCELLED}},{key:"cancel",value:function(e,t){this.webAPIClient.call(CANCEL_METHOD,{id:this.request.id}).then(e||function(){},t||function(){})}},{key:"invoke",value:function(e){var t=this,n=new Promise(function(n,a){t.setHandlers(e,n,a),t.sendMessage(),t.setStatus(_Job__WEBPACK_IMPORTED_MODULE_3__.a.SUBMITTED)}.bind(this));return n.getJob=this.getJob.bind(this),n.getJobId=this.getJobId.bind(this),n}},{key:"notifyInProgress",value:function(e){this.setStatus(_Job__WEBPACK_IMPORTED_MODULE_3__.a.IN_PROGRESS),this.onProgress&&this.onProgress(e)}},{key:"notifyDone",value:function(e){this.setStatus(_Job__WEBPACK_IMPORTED_MODULE_3__.a.DONE),this.onResolve&&this.onResolve(this.transformer?this.transformer(e):e)}},{key:"notifyFailed",value:function(e){this.setStatus(e.code===ERROR_CODE_CANCELLED?_Job__WEBPACK_IMPORTED_MODULE_3__.a.CANCELLED:_Job__WEBPACK_IMPORTED_MODULE_3__.a.FAILED),this.onReject&&this.onReject(e)}},{key:"getJob",value:function(){return this}},{key:"getJobId",value:function(){return this.getRequest().id}},{key:"setHandlers",value:function(e,t,n){this.onProgress=e,this.onResolve=t,this.onReject=n}},{key:"sendMessage",value:function(){this.webAPIClient.sendMessage(this.request)}},{key:"setStatus",value:function(e){this.status=e}}]),e}();function getJobFailureIntentName(e){if(e)switch(e.code){case ERROR_CODE_INVALID_PARAMS:case ERROR_CODE_CANCELLED:return _blueprintjs_core__WEBPACK_IMPORTED_MODULE_2__.Intent.PRIMARY;case ERROR_CODE_OS_ERROR:default:return _blueprintjs_core__WEBPACK_IMPORTED_MODULE_2__.Intent.WARNING}return _blueprintjs_core__WEBPACK_IMPORTED_MODULE_2__.Intent.WARNING}function getJobFailureIconName(e){if(e){if(e.data){if("cate.core.ds.NetworkError"===e.data.exception)return"offline";if("cate.core.ds.DataAccessError"===e.data.exception)return"database"}switch(e.code){case ERROR_CODE_INVALID_PARAMS:return"manually-entered-data";case ERROR_CODE_CANCELLED:return"hand";default:return"error"}}return"warning-sign"}function getJobFailureTitle(e){if(e){if(console.log(e),e.data){if("cate.core.ds.NetworkError"===e.data.exception)return"Network Problem";if("cate.core.ds.DataAccessError"===e.data.exception)return"Data Access Error"}switch(e.code){case ERROR_CODE_INVALID_PARAMS:return"Invalid Input";case ERROR_CODE_OUT_OF_MEMORY:return"Out-Of-Memory Error";case ERROR_CODE_OS_ERROR:return"External Problem";case ERROR_CODE_CANCELLED:return"Task Cancelled";case ERROR_CODE_METHOD_NOT_FOUND:return"Internal Error (Method Not Found)";case ERROR_CODE_INVALID_REQUEST:return"Internal Error (Invalid Request)";case ERROR_CODE_INVALID_RESPONSE:return"Internal Error (Invalid Response)";case ERROR_CODE_METHOD_ERROR:return"Operation Error"}}return"Unknown Error"}var NON_DEVELOPER_ERRORS=[ERROR_CODE_INVALID_PARAMS,ERROR_CODE_CANCELLED,ERROR_CODE_OS_ERROR,ERROR_CODE_OUT_OF_MEMORY];function isDeveloperError(e){return NON_DEVELOPER_ERRORS.indexOf(e.code)<0}var USER_ERRORS=[ERROR_CODE_INVALID_PARAMS,ERROR_CODE_CANCELLED];function isUserError(e){return USER_ERRORS.indexOf(e.code)>=0}},37:function(e,t,n){"use strict";n.d(t,"g",(function(){return a.a})),n.d(t,"e",(function(){return r.b})),n.d(t,"d",(function(){return r.a})),n.d(t,"p",(function(){return r.h})),n.d(t,"l",(function(){return r.d})),n.d(t,"k",(function(){return r.c})),n.d(t,"m",(function(){return r.e})),n.d(t,"n",(function(){return r.f})),n.d(t,"o",(function(){return r.g})),n.d(t,"c",(function(){return l})),n.d(t,"h",(function(){return p})),n.d(t,"j",(function(){return y})),n.d(t,"a",(function(){return O})),n.d(t,"b",(function(){return _})),n.d(t,"f",(function(){return C})),n.d(t,"i",(function(){return k}));var a=n(91),r=n(310),o=n(15),i=n(16),l=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"getDataStores",value:function(){return this.webAPIClient.call("get_data_stores",[])}},{key:"getDataSources",value:function(t,n){return this.webAPIClient.call("get_data_sources",[t],n,e.responseToDataSources)}},{key:"getDataSourceMetaInfo",value:function(t,n,a){return this.webAPIClient.call("get_data_source_meta_info",[t,n],a,e.responseToMetaInfo)}},{key:"addLocalDataSource",value:function(e,t,n){return this.webAPIClient.call("add_local_data_source",[e,t],n)}},{key:"removeLocalDataSource",value:function(e,t,n){return this.webAPIClient.call("remove_local_data_source",[e,t],n)}},{key:"extractPixelValues",value:function(e,t,n,a){return this.webAPIClient.call("extract_pixel_values",[e,t,n,a])}}],[{key:"responseToDataSources",value:function(e){return e.map((function(e,t){return console.debug("dataSources[".concat(t,"]:"),e),{id:e.id,title:e.title,dataType:e.data_type||"dataset",capabilities:e.verification_flags,metaInfoStatus:"init"}}))}},{key:"responseToMetaInfo",value:function(e){return e}}]),e}();function c(e){return e?e.map(s):null}function s(e){return{qualifiedName:e.qualified_name,name:e.name||e.qualified_name,description:e.header&&e.header.description||null,tags:e.header&&e.header.tags||[],hasMonitor:e.has_monitor||!1,inputs:e.inputs.map(u),outputs:e.outputs.map(d)}}function u(e){return{name:e.name,dataType:e.data_type,description:e.description||null,units:e.units,password:e.password,defaultValue:e.default_value,nullable:e.nullable||null===e.default_value,valueSet:e.value_set,valueSetSource:e.value_set_source,valueRange:e.value_range,scriptLang:e.script_lang,fileOpenMode:e.file_open_mode,fileFilters:e.file_filters,fileProps:e.file_props,noUI:e.no_ui||e.step_id}}function d(e){return{name:e.name,dataType:e.data_type,description:e.description||null}}var p=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"getOperations",value:function(){return this.webAPIClient.call("get_operations",[],null,c)}}]),e}(),h=n(6),f=n(18),m=n(10);function b(e){return e?{baseDir:e.base_dir,description:e.description,isScratch:e.is_scratch,isModified:e.is_modified,isSaved:e.is_saved,workflow:e.workflow,resources:(t=e.resources,(t||m.a).map((function(e){return e.variables?Object(h.a)(Object(h.a)({},e),{},{variables:(t=e.variables,(t||m.a).map((function(e){var t=e.attributes||m.b,n=t.valid_min,a=t.valid_max,r=t.valid_range,o=Object(f.b)(r)&&2===r.length;n=!Object(f.d)(n)&&o&&Object(f.d)(r[0])?r[0]:n,a=!Object(f.d)(a)&&o&&Object(f.d)(r[1])?r[1]:a;var i=t.units;return"kelvin"!==i&&"Kelvin"!==i||((!Object(f.d)(n)||n<270)&&(n=270),(!Object(f.d)(a)||a>310)&&(a=310)),Object(h.a)(Object(h.a)({},e),{},{units:i,validMin:n,validMax:a})})))}):e;var t})))}:null;var t}function v(e){return[b(e[0]),e[1]]}var y=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"listWorkspaces",value:function(){return this.webAPIClient.call("list_workspace_names",[])}},{key:"newWorkspace",value:function(e){return this.webAPIClient.call("new_workspace",[e],null,b)}},{key:"openWorkspace",value:function(e,t){return this.webAPIClient.call("open_workspace",[e],t,b)}},{key:"closeWorkspace",value:function(e){return this.webAPIClient.call("close_workspace",[e])}},{key:"saveWorkspace",value:function(e,t){return this.webAPIClient.call("save_workspace",[e],t,b)}},{key:"saveWorkspaceAs",value:function(e,t,n){return this.webAPIClient.call("save_workspace_as",[e,t],n,b)}},{key:"cleanWorkspace",value:function(e){return this.webAPIClient.call("clean_workspace",[e],null,b)}},{key:"setWorkspaceResource",value:function(e,t,n,a,r,o){return this.webAPIClient.call("set_workspace_resource",[e,t,n,a,r],o,v)}},{key:"setWorkspaceResourcePersistence",value:function(e,t,n){return this.webAPIClient.call("set_workspace_resource_persistence",[e,t,n],null,b)}},{key:"runOpInWorkspace",value:function(e,t,n,a){return this.webAPIClient.call("run_op_in_workspace",[e,t,n],a)}},{key:"renameWorkspaceResource",value:function(e,t,n){return this.webAPIClient.call("rename_workspace_resource",[e,t,n],null,b)}},{key:"deleteWorkspace",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return this.webAPIClient.call("delete_workspace",[e,t],null,b)}},{key:"deleteWorkspaceResource",value:function(e,t){return this.webAPIClient.call("delete_workspace_resource",[e,t],null,b)}},{key:"getWorkspaceVariableStatistics",value:function(e,t,n,a,r){return this.webAPIClient.call("get_workspace_variable_statistics",[e,t,n,a],r)}}]),e}();function g(e){return e?{dataStoresPath:e.data_stores_path,useWorkspaceImageryCache:e.use_workspace_imagery_cache,resourceNamePattern:e.default_res_pattern,proxyUrl:e.http_proxy}:null}var O=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"getBackendConfig",value:function(){return this.webAPIClient.call("get_config",[],null,g)}},{key:"setBackendConfig",value:function(e){return this.webAPIClient.call("set_config",[(t=e,t?{data_stores_path:t.dataStoresPath,use_workspace_imagery_cache:t.useWorkspaceImageryCache,default_res_pattern:t.resourceNamePattern,http_proxy:t.proxyUrl}:{})]);var t}}]),e}();function E(e){return e?e.map((function(e){return{name:e[0],description:e[1],colorMaps:e[2].map((function(e){return{name:e[0],imageData:e[1]}}))}})):null}var _=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"getColorMaps",value:function(){return this.webAPIClient.call("get_color_maps",[],null,E)}}]),e}(),C=function(){function e(t){Object(o.a)(this,e),this.webAPIClient=void 0,this.webAPIClient=t}return Object(i.a)(e,[{key:"updateFileNode",value:function(e){return this.webAPIClient.call("update_file_node",[e])}}]),e}(),k=function(){function e(){Object(o.a)(this,e)}return Object(i.a)(e,[{key:"shutdown",value:function(e){return fetch(e+"/exit").then((function(){return null}))}}]),e}()},402:function(e,t,n){e.exports=n.p+"static/media/cate-icon-128.4edcc198.png"},406:function(e){e.exports=JSON.parse('{"ecvs":{"aerosol":{"group":"atmosphere","color":"ecv_blue","label":"AER"},"cloud":{"group":"atmosphere","color":"ecv_blue","label":"CL"},"ghg":{"group":"atmosphere","color":"ecv_blue","label":"GHG"},"ozone":{"group":"atmosphere","color":"ecv_blue","label":"OZ"},"biomass":{"group":"terrestrial","color":"ecv_orange","label":"BIO"},"fire":{"group":"terrestrial","color":"ecv_orange","label":"FIR"},"glaciers":{"group":"terrestrial","color":"ecv_orange","label":"GLA"},"lc":{"group":"terrestrial","color":"ecv_orange","label":"LC"},"permafrost":{"group":"terrestrial","color":"ecv_orange","label":"PF"},"soilmoisture":{"group":"terrestrial","color":"ecv_orange","label":"SM"},"snow":{"group":"terrestrial","color":"ecv_orange","label":"SNW"},"ghrsst":{"group":"ocean","color":"ecv_green","label":"SST"},"icesheats":{"group":"ocean","color":"ecv_green","label":"IS"},"oc":{"group":"ocean","color":"ecv_green","label":"OC"},"seaice":{"group":"ocean","color":"ecv_green","label":"SI"},"sealevel":{"group":"ocean","color":"ecv_green","label":"SL"},"seasurfacesalinity":{"group":"ocean","color":"ecv_green","label":"SAL"},"sst":{"group":"ocean","color":"ecv_green","label":"SST"}},"colors":{"ecv_deep_space":"#002B40","ecv_deep_space_1":"#2F5D6F","ecv_green":"#248A90","ecv_orange":"#FF902B","ecv_blue":"#32A6DC","esa_teal":"#0BB7A0","esa_teal_55":"#78D4C7","default":"#0BB7A0"},"mappings":{"icesheets_antarctica_gmb":"icesheets","icesheets_greenland_gmb":"icesheets","l3c_cloud":"cloud","l3c_snow":"snow","l4_ghrsst":"sst"}}')},407:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return DictValueEditor}));var D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(15),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(16),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(19),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(20),react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(2),react__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__),_components_field_Field__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(51),_components_field_TextField__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(52),DictValueEditor=function(e){Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__.a)(n,e);var t=Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__.a)(n);function n(e){var a;return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__.a)(a)),a}return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"render",value:function(){var e=Object(_components_field_Field__WEBPACK_IMPORTED_MODULE_6__.c)(this.props.value);return react__WEBPACK_IMPORTED_MODULE_5__.createElement(_components_field_TextField__WEBPACK_IMPORTED_MODULE_7__.a,{value:e,validator:validateDictText,size:36,placeholder:"Enter key-value pairs (Python), separated by comma",onChange:this.onChange,style:n.TEXT_FIELD_STYLE,nullable:this.props.input.nullable})}}]),n}(react__WEBPACK_IMPORTED_MODULE_5__.Component);function validateDictText(value){if(value&&""!==value.trim()){var None=null,True=!0,False=!1;eval("var ".concat(value,";"))}}DictValueEditor.TEXT_FIELD_STYLE={flexGrow:1}},408:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return LiteralValueEditor}));var D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(15),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(16),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(19),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(20),react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(2),react__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__),_components_field_Field__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(51),_components_field_TextField__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(52),LiteralValueEditor=function(e){Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__.a)(n,e);var t=Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__.a)(n);function n(e){var a;return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__.a)(a)),a}return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"render",value:function(){var e=Object(_components_field_Field__WEBPACK_IMPORTED_MODULE_6__.c)(this.props.value);return react__WEBPACK_IMPORTED_MODULE_5__.createElement(_components_field_TextField__WEBPACK_IMPORTED_MODULE_7__.a,{value:e,validator:this.props.validator||validatePythonLiteralText,size:36,placeholder:this.props.placeholder||"Enter constant (Python) literal",onChange:this.onChange,style:n.TEXT_FIELD_STYLE})}}]),n}(react__WEBPACK_IMPORTED_MODULE_5__.Component);function validatePythonLiteralText(value){if(value&&""!==value.trim()){var None=null,True=!0,False=!1;eval(value)}}LiteralValueEditor.TEXT_FIELD_STYLE={flexGrow:1}},41:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var a=n(68),r=n(15),o=n(16),i=n(19),l=n(20),c=n(2),s=n(5),u=function(e){Object(i.a)(n,e);var t=Object(l.a)(n);function n(){return Object(r.a)(this,n),t.apply(this,arguments)}return Object(o.a)(n,[{key:"render",value:function(){return this.props.isOpen?c.createElement(s.Dialog,{isOpen:this.props.isOpen,title:this.props.title,icon:this.props.icon,onClose:this.props.onCancel,autoFocus:!0,canEscapeKeyClose:!0,canOutsideClickClose:!1,enforceFocus:!0,style:this.props.style},this.renderDialogContent(),this.renderDialogFooter()):null}},{key:"renderDialogContent",value:function(){return c.createElement("div",{className:s.Classes.DIALOG_BODY},this.props.renderBody?this.props.renderBody():this.props.children)}},{key:"renderDialogFooter",value:function(){return c.createElement("div",{className:s.Classes.DIALOG_FOOTER},c.createElement("div",{className:s.Classes.DIALOG_FOOTER_ACTIONS},this.props.renderActions?this.props.renderActions():this.renderActions()))}},{key:"renderActions",value:function(){var e,t=!this.props.canConfirm||this.props.canConfirm();this.props.noCancelButton||(e=c.createElement(s.AnchorButton,{key:"cancel",onClick:this.props.onCancel},"Cancel"));var n,r=c.createElement(s.AnchorButton,{key:"confirm",onClick:this.props.onConfirm,intent:s.Intent.PRIMARY,disabled:!t,icon:this.props.confirmIconName},this.props.confirmTitle||"OK");return this.props.confirmTooltip&&(r=c.createElement(s.Tooltip,{key:"confirmTooltip",content:this.props.confirmTooltip},r)),this.props.renderExtraActions&&(n=this.props.renderExtraActions()),n?[e].concat(Object(a.a)(n),[r]):[e,r]}}]),n}(c.Component)},410:function(module,__webpack_exports__,__webpack_require__){"use strict";var D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(15),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(16),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(19),D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(20),react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(2),react__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__),react_redux__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(28),_actions__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(8),_selectors__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(10),_blueprintjs_core__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(5),_common_types__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(18);function mapStateToProps(e,t){return{view:t.view,baseUrl:_selectors__WEBPACK_IMPORTED_MODULE_8__.fc(e),baseDir:_selectors__WEBPACK_IMPORTED_MODULE_8__.kc(e),animationResources:_selectors__WEBPACK_IMPORTED_MODULE_8__.g(e),mplWebSocketUrl:_selectors__WEBPACK_IMPORTED_MODULE_8__.N(e)}}var AnimationView=function(_React$Component){Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_3__.a)(AnimationView,_React$Component);var _super=Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_4__.a)(AnimationView);function AnimationView(e){var t;return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__.a)(this,AnimationView),(t=_super.call(this,e)).divElement=void 0,t.state={},t.divElement=null,t.onRef=t.onRef.bind(Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__.a)(t)),t}return Object(D_Projects_cate_webui_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__.a)(AnimationView,[{key:"componentWillMount",value:function(){var e=this;this.props.view.data.innerHTML||this.state.loading||this.setState({loading:!0},(function(){e.props.dispatch(_actions__WEBPACK_IMPORTED_MODULE_7__.Tb(e.props.view.id,e.props.view.data.resourceId))}))}},{key:"onRef",value:function onRef(divElement){if(this.divElement=divElement,divElement&&this.props.view.data.innerHTML)for(var elements=divElement.getElementsByTagName("script"),i=0;i<elements.length;i++){var script=elements[i].innerHTML;try{eval("eval")(script)}catch(e){console.error(e)}}}},{key:"render",value:function(){if(!this.getAnimationResource())return react__WEBPACK_IMPORTED_MODULE_5__.createElement(_blueprintjs_core__WEBPACK_IMPORTED_MODULE_9__.Card,null,"Animation not found.");var e=this.props.view.data,t=e.innerHTML,n=e.status;return t?react__WEBPACK_IMPORTED_MODULE_5__.createElement("div",{style:AnimationView.DIV_STYLE,dangerouslySetInnerHTML:{__html:t},ref:this.onRef}):Object(_common_types__WEBPACK_IMPORTED_MODULE_10__.d)(n)&&(n<200||n>=300)?react__WEBPACK_IMPORTED_MODULE_5__.createElement(_blueprintjs_core__WEBPACK_IMPORTED_MODULE_9__.Card,null,"`Error loading animation (status $",e.status,"`)"):this.state.loading?react__WEBPACK_IMPORTED_MODULE_5__.createElement(_blueprintjs_core__WEBPACK_IMPORTED_MODULE_9__.Card,null,"Loading animation..."):react__WEBPACK_IMPORTED_MODULE_5__.createElement(_blueprintjs_core__WEBPACK_IMPORTED_MODULE_9__.Card,null,"???")}},{key:"getAnimationResource",value:function(){var e=this.props.view.data;return this.props.animationResources.find((function(t){return t.id===e.resourceId}))}}]),AnimationView}(react__WEBPACK_IMPORTED_MODULE_5__.Component);AnimationView.DIV_STYLE={width:"100%",height:"100%",overflowX:"hidden",overflowY:"auto"},__webpack_exports__.a=Object(react_redux__WEBPACK_IMPORTED_MODULE_6__.b)(mapStateToProps)(AnimationView)},430:function(e,t,n){e.exports=n(774)},45:function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"m",(function(){return r})),n.d(t,"k",(function(){return o})),n.d(t,"s",(function(){return i})),n.d(t,"o",(function(){return l})),n.d(t,"c",(function(){return c})),n.d(t,"d",(function(){return s})),n.d(t,"f",(function(){return u})),n.d(t,"r",(function(){return d})),n.d(t,"b",(function(){return p})),n.d(t,"e",(function(){return h})),n.d(t,"p",(function(){return f})),n.d(t,"q",(function(){return m})),n.d(t,"l",(function(){return b})),n.d(t,"t",(function(){return v})),n.d(t,"u",(function(){return y})),n.d(t,"w",(function(){return g})),n.d(t,"v",(function(){return O})),n.d(t,"i",(function(){return E})),n.d(t,"h",(function(){return _})),n.d(t,"g",(function(){return C})),n.d(t,"j",(function(){return k})),n.d(t,"n",(function(){return w})),n.d(t,"x",(function(){return S}));var a="bool",r="int",o="float",i="str",l="numpy.ndarray",c="xarray.core.dataset.Dataset",s="xarray.core.dataarray.DataArray",u="pandas.core.frame.DataFrame",d="pandas.core.series.Series",p="cate.core.types.DatasetLike",h="cate.core.types.DataFrameLike",f="cate.core.types.PointLike",m="cate.core.types.PolygonLike",b="cate.core.types.GeometryLike",v="cate.core.types.TimeLike",y="cate.core.types.TimeRangeLike",g="cate.core.types.VarName",O="cate.core.types.VarNamesLike",E="cate.core.types.DimName",_="cate.core.types.DimNamesLike",C="cate.core.types.DictLike",k="cate.core.types.FileLike",w="cate.core.types.Literal";function S(e,t){if(!e||!t)return!1;if(e===t)return!0;switch(e){case"object":case"cate.core.types.Arbitrary":return!0;case w:return t===i;case a:return t===r||t===o;case r:return t===a;case o:return t===a||t===r;case l:return t===s;case u:return t===h||"geopandas.geodataframe.GeoDataFrame"===t||"cate.core.types.GeoDataFrame"===t;case h:return t===u||"geopandas.geodataframe.GeoDataFrame"===t||"cate.core.types.GeoDataFrame"===t||t===c||t===p;case"geopandas.geodataframe.GeoDataFrame":return"cate.core.types.GeoDataFrame"===t;case c:return t===p;case p:return t===c||t===u;case d:return"geopandas.geoseries.GeoSeries"===t;case g:case O:case E:case _:case C:case k:case v:case y:return t===i;case f:return t===i||"shapely.geometry.point.Point"===t;case m:return t===i||"shapely.geometry.polygon.Polygon"===t;case b:return t===i||t===f||t===m||"shapely.geometry.base.BaseGeometry"===t||"shapely.geometry.point.Point"===t||"shapely.geometry.multipoint.MultiPoint"===t||"shapely.geometry.linestring.LineString"===t||"shapely.geometry.multilinestring.MultiLineString"===t||"shapely.geometry.polygon.Polygon"===t||"shapely.geometry.multipolygon.multiPolygon"===t||"shapely.geometry.collection.GeometryCollection"===t}return!1}},450:function(e,t){},452:function(e,t){},46:function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return s}));var a,r=n(15),o=n(16),i=n(19),l=n(20),c=n(2);!function(e){e[e.SINGLE=0]="SINGLE",e[e.MULTIPLE=1]="MULTIPLE"}(a||(a={}));var s=function(e){Object(i.a)(n,e);var t=Object(l.a)(n);function n(){return Object(r.a)(this,n),t.apply(this,arguments)}return Object(o.a)(n,[{key:"handleClick",value:function(e,t,n){if(2!==e.detail){if(this.props.onSelection){var r,o=d(this.props.selection);if(this.props.selection){var i=this.props.selectionMode||a.SINGLE,l=o.findIndex((function(e){return e===n}));l>=0?(r=o.slice()).splice(l,1):i===a.SINGLE?r=[n]:i===a.MULTIPLE&&(r=o.slice()).push(n)}else r=[n];this.props.onSelection(r,o)}this.props.onItemClick&&this.props.onItemClick(this.props.items[t],t)}}},{key:"handleDoubleClick",value:function(e,t){this.props.onItemDoubleClick&&this.props.onItemDoubleClick(this.props.items[t],t)}},{key:"render",value:function(){var e=this,t=this.props.items;if(!t)return null;for(var n=new Set(d(this.props.selection)),a=this.props.getItemKey||function(e,t){return t},r=this.props.renderItem,o=[],i=function(i){var l=t[i],s=a(l,i),u=r(l,i),d=n.has(s)?"cate-selected":null;o.push(c.createElement("li",{key:s,onClick:function(t){return e.handleClick(t,i,s)},onDoubleClick:function(t){return e.handleDoubleClick(t,i)},className:d,style:e.props.itemStyle},u))},l=0;l<t.length;l++)i(l);return c.createElement("ul",{className:"cate-list-box",style:this.props.style},o)}}]),n}(c.PureComponent),u=[];function d(e){return null===e||"undefined"===typeof e?u:e.constructor===Array?e:[e]}},48:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"m",(function(){return l})),n.d(t,"i",(function(){return c})),n.d(t,"g",(function(){return u})),n.d(t,"h",(function(){return d})),n.d(t,"d",(function(){return p})),n.d(t,"b",(function(){return h})),n.d(t,"k",(function(){return f})),n.d(t,"j",(function(){return m})),n.d(t,"c",(function(){return b})),n.d(t,"f",(function(){return v})),n.d(t,"e",(function(){return y})),n.d(t,"l",(function(){return g}));var a=n(68),r=n(6),o=n(62),i=(n(18),{name:"All files",extensions:["*"]});function l(e,t,n){return""===t?Object(r.a)(Object(r.a)(Object(r.a)({},e),n),{},{status:"ready"}):function(e,t,n){if(!e.childNodes)return console.error("_updateFileNode: root node without child nodes"),e;n=n.status?n:Object(r.a)(Object(r.a)({},n),{},{status:"ready"});for(var o=Object(r.a)(Object(r.a)({},e),{},{childNodes:Object(a.a)(e.childNodes)}),i=o,l=function(o){if(!i.childNodes)return console.error("_updateFileNode: no child nodes at index ".concat(o,' in "').concat(t.join("/"),'"')),{v:e};var l=t[o],c=i.childNodes.findIndex((function(e){return 0===l.localeCompare(e.name)}));if(c<0)return console.error('_updateFileNode: invalid path component "'.concat(l,'" at index ').concat(o,' in "').concat(t.join("/"),'"')),{v:e};if(o===t.length-1)i.childNodes[c]=n;else{var s,u=i.childNodes[c];s=u.childNodes?Object(r.a)(Object(r.a)({},u),{},{childNodes:Object(a.a)(u.childNodes)}):Object(r.a)({},u),i.childNodes[c]=s,i=s}},c=0;c<t.length;c++){var s=l(c);if("object"===typeof s)return s.v}return o}(e,t.split("/"),n)}function c(e,t){if(""===t)return[];var n=t.split("/"),a=s(e.childNodes,n);return n.length===a.length?a:null}function s(e,t){for(var n=e,a=[],r=function(e){if(!n)return{v:a};var r=t[e],o=n.find((function(e){return 0===e.name.localeCompare(r)}));if(!o)return{v:a};a.push(o),n=o.childNodes},o=0;o<t.length;o++){var i=r(o);if("object"===typeof i)return i.v}return a}function u(e,t){if(""===t)return e;var n=c(e,t);return n?0===n.length?e:n[n.length-1]:null}function d(e){return e.isDir?"folder-close":"document"}function p(e,t){if(e.isDir){if(!t.isDir)return-1}else if(t.isDir)return 1;return e.name.localeCompare(t.name)}function h(e,t){var n=Object(o.c)(t),r=e.filter((function(e){return!(e===t||e===n||t.startsWith(e+"/"))}));return[].concat(Object(a.a)(r),[t])}function f(e,t){var n=Object(o.c)(t),r=e.filter((function(e){return!(e===t||e===n||e.startsWith(t+"/"))}));return""!==n?[].concat(Object(a.a)(r),[n]):r}function m(e,t,n){return t<e.length&&e[t]===n}function b(e,t){var n=new Set(t.extensions);return n.has("*")?e:e.filter((function(e){if(e.isDir)return!0;var t=Object(o.b)(e.name);return n.has(t)}))}function v(e,t,n,a){if(""===(e=e.trim()))return[];var r;if(n){var i="Windows"===a;r=[];for(var l=null,c="",s=0;s<e.length;s++){var u=e[s];'"'===u||"'"===u?null===l?(l=u,c=""):l===u?l=null:c+=u:" "===u?null===l?""!==c&&(r.push(c),c=""):c+=u:(i||"\\"!==u)&&(c+=u)}""!==c&&r.push(c)}else r=[e];return r.map((function(e){return function(e,t,n){var a=Object(o.d)(e,n);if(e=function(e,t){var n;if("Windows"===t){for(;e.indexOf("\\")>=0;)e=e.replace("\\","/");e.startsWith("//")&&(n="//",e=e.substring(2))}else for(;e.indexOf("\\")>=0;)e=e.replace("\\","");for(;e.startsWith("/");)e=e.substring(1);for(;e.endsWith("/");)e=e.substring(0,e.length-1);for(;e.indexOf("//")>0;)e=e.replace("//","/");return n?n+e:e}(e,n),a)return e;if(""===t)return e;return t+"/"+e}(e,t,a)}))}function y(e,t){return"Windows"===t?(e=e.split("/").join("\\"),Object(o.e)(e)?e:"\\"+e):"/"+e}function g(e,t){return 0===e.length?"":t?e.map((function(e){return function(e){if(e.indexOf(" ")>=0)return e.indexOf('"')>=0?"'".concat(e,"'"):'"'.concat(e,'"');return e}(Object(o.a)(e))})).join(" "):Object(o.a)(e[0])}},51:function(e,t,n){"use strict";n.d(t,"c",(function(){return p})),n.d(t,"a",(function(){return h})),n.d(t,"b",(function(){return f}));var a=n(6),r=n(15),o=n(16),i=n(7),l=n(19),c=n(20),s=n(5),u=n(2),d=n(18);function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return f(e)?Object(d.c)(e.textValue)?e.textValue:"".concat(e.value):Object(d.e)(e)?e:Object(d.c)(e)?"".concat(e):t}var h=function(e){Object(l.a)(n,e);var t=Object(c.a)(n);function n(e){var a;return Object(r.a)(this,n),(a=t.call(this,e))._fieldValue=void 0,a._fieldValue=a.toFieldValue(e.value),a.props.uncontrolled&&(a.state=a._fieldValue),a.handleKeyPress=a.handleKeyPress.bind(Object(i.a)(a)),a.handleBlur=a.handleBlur.bind(Object(i.a)(a)),a.handleInputChange=a.handleInputChange.bind(Object(i.a)(a)),a}return Object(o.a)(n,[{key:"getValue",value:function(){return this._fieldValue.value}},{key:"setValue",value:function(e){this.setFieldValue(this.newFieldValueFromValue(e))}},{key:"setValueAndTextValue",value:function(e,t){this.setFieldValue(this.newFieldValueFromValueAndTextValue(e,t))}},{key:"getTextValue",value:function(){return this._fieldValue.textValue||""}},{key:"setTextValue",value:function(e){this.setFieldValue(this.newFieldValueFromTextValue(e))}},{key:"getError",value:function(){return this._fieldValue.error}},{key:"setError",value:function(e){this.setFieldValue(Object(a.a)(Object(a.a)({},this._fieldValue),{},{error:e}))}},{key:"componentWillReceiveProps",value:function(e){this._fieldValue=this.toFieldValue(e.value),this.props.uncontrolled&&this.setState(this._fieldValue)}},{key:"parseValue",value:function(e){return e&&""!==e?e:null}},{key:"formatValue",value:function(e){return Object(d.g)(e)?"":Object(d.e)(e)?e:"".concat(e)}},{key:"validateValue",value:function(e){this.props.validator&&this.props.validator(e)}},{key:"handleKeyPress",value:function(e){this.props.uncontrolled&&13===e.charCode&&this.props.onChange(this.state)}},{key:"handleBlur",value:function(){this.props.uncontrolled&&this.props.onChange(this.state)}},{key:"handleInputChange",value:function(e){var t=e.target.value;this.setTextValue(t||"")}},{key:"newFieldValueFromTextValue",value:function(e){var t,n=null;try{n=this.parseValue(e),this.validateValue(n)}catch(a){n=this._fieldValue?this._fieldValue.value:n,t=a}return{textValue:e,value:n,error:t}}},{key:"newFieldValueFromValue",value:function(e){if(f(e))return Object(a.a)({},e);var t,n;try{t=this.formatValue(e)}catch(r){t="",n=r}try{this.validateValue(e)}catch(r){n=r}return{textValue:t,value:e,error:n}}},{key:"newFieldValueFromValueAndTextValue",value:function(e,t){var n;try{this.validateValue(e)}catch(a){n=a}return{textValue:t,value:e,error:n}}},{key:"toFieldValue",value:function(e){return f(e)?e:Object(d.e)(e)?this.newFieldValueFromTextValue(e):this.newFieldValueFromValue(e)}},{key:"setFieldValue",value:function(e){this._fieldValue=e,this.props.uncontrolled?this.setState(e):this.props.onChange(e)}},{key:"render",value:function(){var e=this.getError(),t=n.ERROR_CLASS+" "+this.props.className,a=n.NOMINAL_CLASS+" "+this.props.className;return u.createElement(s.InputGroup,{value:this.getTextValue(),onChange:this.handleInputChange,onBlur:this.handleBlur,onKeyPress:this.handleKeyPress,type:this.props.type||"text",className:e?t:a,style:this.props.style,size:this.props.size,placeholder:this.props.placeholder,disabled:this.props.disabled})}}]),n}(u.PureComponent);function f(e){return Object(d.c)(e)&&(Object(d.b)(e.textValue)||Object(d.b)(e.value))}h.NOMINAL_CLASS="",h.ERROR_CLASS=s.Classes.INTENT_DANGER},52:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(15),r=n(16),o=n(89),i=n(66),l=n(19),c=n(20),s=function(e){Object(l.a)(n,e);var t=Object(c.a)(n);function n(){return Object(a.a)(this,n),t.apply(this,arguments)}return Object(r.a)(n,[{key:"validateValue",value:function(e){if(Object(o.a)(Object(i.a)(n.prototype),"validateValue",this).call(this,e),!e&&!this.props.nullable)throw new Error("Text value expected.")}}]),n}(n(51).a)},53:function(e,t,n){"use strict";n.d(t,"k",(function(){return c})),n.d(t,"g",(function(){return s})),n.d(t,"b",(function(){return u})),n.d(t,"a",(function(){return d})),n.d(t,"e",(function(){return f})),n.d(t,"f",(function(){return b})),n.d(t,"c",(function(){return v})),n.d(t,"d",(function(){return y})),n.d(t,"i",(function(){return g})),n.d(t,"j",(function(){return O})),n.d(t,"h",(function(){return E}));var a=n(30),r=n(23),o=n(18),i=n(61),l={small:24,medium:48,large:64};function c(e,t){var n={};if(Object(o.e)(e.stroke)||Object(o.d)(e.strokeOpacity)||Object(o.d)(e.strokeWidth)){var a=j("stroke",e,t,i.a),c=r.d.fromCssColorString(a),s=S("strokeWidth",e,t,i.a),u=S("strokeOpacity",e,t,i.a);u>=0&&u<1&&(c=r.d.fromAlpha(c,u)),n.stroke=c,n.strokeWidth=s}if(Object(o.e)(e.fill)||Object(o.d)(e.fillOpacity)){var d=j("fill",e,t,i.a),p=r.d.fromCssColorString(d),h=S("fillOpacity",e,t,i.a);h>=0&&h<1&&(p=r.d.fromAlpha(p,h)),n.fill=p}if(Object(o.e)(e.markerSymbol)||Object(o.e)(e.markerColor)||Object(o.e)(e.markerSize)){var f=j("markerSymbol",e,t,i.a),m=j("markerColor",e,t,i.a),b=j("markerSize",e,t,i.a),v=r.d.fromCssColorString(m),y=l[b]||48,g=new r.s;""===f?n.markerCanvas=g.fromColor(v,y):1===f.length?(n.markerSymbol=f,n.markerCanvas=g.fromText(f,v,y)):(n.markerSymbol=f,Promise.resolve(g.fromMakiIconId(f,v,y)).then((function(e){n.markerCanvas=e}))),n.markerSize=y,n.markerColor=v}return Object(o.e)(e.title)&&(n.title=e.title),Object(o.e)(e.description)&&(n.description=e.description),n}function s(e){return e?e.point?function(e){var t,n,a,i,l=r.p.now(),c=e.outlineColor,s=e.outlineWidth,u=e.pixelSize,d=e.color;if(Object(o.b)(u)){var p=u.getValue(l);t=p<=24?"small":p<=48?"medium":"large"}if(Object(o.b)(d)){var f=d.getValue(l);n=h(f.red,f.green,f.blue)}if(Object(o.b)(c)){var m=c.getValue(l);a=h(m.red,m.green,m.blue)}Object(o.b)(s)&&(i=s.getValue(l));return{markerSize:t,markerColor:n,markerSymbol:void 0,stroke:a,strokeWidth:i}}(e.point):e.billboard?function(e){var t,n,a,i=r.p.now(),l=e.image,c=e.scale,s=e.color;if(Object(o.b)(l)){var u=l.getValue(i);Object(o.e)(u)&&(t=u)}if(Object(o.b)(c)){var d=c.getValue(i);n=d<1?"small":d<2?"medium":"large"}if(Object(o.b)(s)){var p=s.getValue(i);a=h(p.red,p.green,p.blue)}return{markerSymbol:t,markerSize:n,markerColor:a}}(e.billboard):e.label?function(e){var t,n,a,i=r.p.now(),l=e.text&&e.text.getValue(i),c=e.scale&&e.scale.getValue(i),s=e.fillColor&&e.fillColor.getValue(i);Object(o.e)(l)&&(t=l);Object(o.d)(c)&&(n=c<1?"small":c<2?"medium":"large");Object(o.b)(s)&&(a=h(s.red,s.green,s.blue));return{title:t,markerSize:n,markerColor:a}}(e.label):e.polyline?function(e){var t,n,a,i=r.p.now(),l=e.width&&e.width.getValue(i),c=e.material&&e.material.getValue(i),s=c&&c.color;Object(o.b)(l)&&(a=l);Object(o.b)(s)&&(t=h(s.red,s.green,s.blue),n=s.alpha);return{stroke:t,strokeOpacity:n,strokeWidth:a}}(e.polyline):e.polygon?function(e){var t,n,a,l,c,s=r.p.now(),u=e.fill&&e.fill.getValue(s),d=e.material&&e.material.getValue(s),p=d&&d.color,f=e.outline&&e.outline.getValue(s),m=e.outlineColor&&e.outlineColor.getValue(s),b=e.outlineWidth&&e.outlineWidth.getValue(s);Object(o.b)(p)?(l=h(p.red,p.green,p.blue),c=p.alpha):(l=i.a.fill,c=i.a.fillOpacity);Object(o.a)(u)&&!Boolean(u)&&(c=0);Object(o.b)(m)&&(t=h(m.red,m.green,m.blue),n=m.alpha);Object(o.b)(f)&&!m&&(n=0);Object(o.b)(b)&&(a=b);return{fill:l,fillOpacity:c,stroke:t,strokeOpacity:n,strokeWidth:a}}(e.polygon):null:null}function u(e,t){var n,r=Object(a.a)(t);try{for(r.s();!(n=r.n()).done;){d(e,n.value)}}catch(o){r.e(o)}finally{r.f()}}function d(e,t){if(t.point){var n=t.point;Object(o.b)(e.markerColor)&&(n.color=new r.f(e.markerColor)),Object(o.d)(e.markerSize)&&(n.pixelSize=new r.f(e.markerSize/24*16))}else if(t.billboard){var a=t.billboard;Object(o.b)(e.markerCanvas)?a.image=new r.f(e.markerCanvas):(Object(o.b)(e.markerColor)&&(a.color=new r.f(e.markerColor)),Object(o.d)(e.markerSize)&&(a.scale=new r.f(e.markerSize/48)))}else if(t.label){var i=t.label;Object(o.b)(e.title)&&(i.text=new r.f(e.title)),Object(o.b)(e.markerColor)&&(i.fillColor=new r.f(e.markerColor)),Object(o.d)(e.markerSize)&&(i.scale=new r.f(e.markerSize/48))}else if(t.polyline){var l=t.polyline;Object(o.b)(e.stroke)&&(l.material=new r.e(e.stroke)),Object(o.d)(e.strokeWidth)&&(l.width=new r.f(e.strokeWidth))}else if(t.polygon){var c=t.polygon;Object(o.b)(e.fill)&&(c.material=new r.e(e.fill)),Object(o.b)(e.stroke)&&(c.outlineColor=new r.f(e.stroke)),Object(o.d)(e.strokeWidth)&&(c.outlineWidth=new r.f(e.strokeWidth))}}function p(e){if(e<=0)return"00";if(e>=1)return"ff";var t=Math.floor(255.9999*e);return t<=0?"00":t>=255?"ff":t<16?"0"+t.toString(16):t.toString(16)}function h(e,t,n){return"#"+p(e)+p(t)+p(n)}function f(e,t,n){if(!e)return null;if(e.position){var o=r.c.fromCartesian(e.position.getValue(r.p.now()));return m(e,t,n,{type:"Point",coordinates:[r.q.toDegrees(o.longitude),r.q.toDegrees(o.latitude)]})}if(e.polyline){var i,l=e.polyline.positions.getValue(r.p.now()),c=[],s=Object(a.a)(l);try{for(s.s();!(i=s.n()).done;){var u=i.value,d=r.c.fromCartesian(u);c.push([r.q.toDegrees(d.longitude),r.q.toDegrees(d.latitude)])}}catch(E){s.e(E)}finally{s.f()}return m(e,t,n,{type:"LineString",coordinates:c})}if(e.polygon){var p=e.polygon.hierarchy.getValue(r.p.now()),h=p.positions||p,f=p.holes;if(f&&f.length)throw new Error("entityToGeoJson() does not yet support polygons with holes");var b,v=[],y=Object(a.a)(h);try{for(y.s();!(b=y.n()).done;){var g=b.value,O=r.c.fromCartesian(g);v.push([r.q.toDegrees(O.longitude),r.q.toDegrees(O.latitude)])}}catch(E){y.e(E)}finally{y.f()}return v.push([v[0][0],v[0][1]]),m(e,t,n,{type:"Polygon",coordinates:[v]})}throw new Error("entityToGeoJson() called with unsupported entity: ".concat(e.toString()))}function m(e,t,n,a){return{type:"Feature",id:t=t||e.id.toString(),geometry:a,properties:n}}function b(e){if(e.polyline){var t=e.polyline.positions.getValue(r.p.now());return"LINESTRING (".concat(function(e){return _(e).join(", ")}(t),")")}if(e.polygon){var n=e.polygon.hierarchy.getValue(r.p.now()),o=n.positions,i=n.holes,l=_(o);l.length>2&&l.push(l[0]);var c=["(".concat(l.join(", "),")")];if(i&&i.length){var s,u=Object(a.a)(i);try{for(u.s();!(s=u.n()).done;){var d=_(s.value.positions);d.length>2&&d.push(d[0]),c.push("(".concat(d.join(", "),")"))}}catch(y){u.e(y)}finally{u.f()}}return"POLYGON (".concat(c.join(", "),")")}if(e.rectangle){var p=e.rectangle.coordinates.getValue(r.p.now()),h=k(p.west),f=k(p.south),m=k(p.east),b=k(p.north);return"POLYGON ((".concat(h," ").concat(f,", ").concat(m," ").concat(f,", ").concat(m," ").concat(b,", ").concat(h," ").concat(b,", ").concat(h," ").concat(f,"))")}if(e.position){var v=e.position.getValue(r.p.now());return"POINT (".concat(C(v),")")}throw new TypeError("can't understand geometry of selected entity")}function v(e,t,n){var a;if(t){var o=e.scene.globe.ellipsoid,i=e.camera.pickEllipsoid(t,o);if(i&&(a=o.cartesianToCartographic(i))&&n){a={longitude:Math.round(1e4*r.q.toDegrees(a.longitude))/1e4,latitude:Math.round(1e4*r.q.toDegrees(a.latitude))/1e4,height:a.height}}}return a}function y(e,t){var n;if(t){var a=e.canvas.getBoundingClientRect(),o=t.x,i=t.y;o>=a.left&&o<=a.right&&i>=a.top&&i<=a.bottom&&(n=new r.b(o-a.left,i-a.top))}return n}function g(e,t){if(t){var n=e.scene.pick(t);return n&&n.id}}function O(e,t){var n;if(null===t)n=r.D();else{var a="Geographic"===t.tilingScheme?new r.k:new r.B,o=t.ellipsoid&&new r.h(t.ellipsoid.x,t.ellipsoid.y,t.ellipsoid.z);n=new r.z({url:t.url,tilingScheme:a,ellipsoid:o,credit:t.credit,minimumLevel:t.minimumLevel,maximumLevel:t.maximumLevel})}if(e.imageryLayers.length>0){var i=e.imageryLayers.get(0);e.imageryLayers.remove(i)}e.imageryLayers.add(new r.m(n),0)}function E(e,t){for(var n=0;n<e.dataSources.length;n++){var a=e.dataSources.get(n).entities.getById(t);if(a)return a}return null}function _(e){return e.map((function(e){return C(e)}))}function C(e){var t=r.c.fromCartesian(e);return"".concat(k(t.longitude)," ").concat(k(t.latitude))}function k(e){return e*(180/Math.PI)}function w(e,t,n){var r,o=Object(a.a)(n);try{for(o.s();!(r=o.n()).done;){var i=r.value;if(i){var l=i[e];if(t(l))return l}}}catch(c){o.e(c)}finally{o.f()}}function S(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return w(e,o.d,n)}function j(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return w(e,o.e,n)}},61:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"c",(function(){return i})),n.d(t,"b",(function(){return l}));var a=n(30),r=n(18),o={title:"",description:"",markerSize:"medium",markerSymbol:"",markerColor:"#7e7e7e",stroke:"#555555",strokeOpacity:1,strokeWidth:2,fill:"#555555",fillOpacity:.6};function i(e){var t,n={title:e.title,description:e.description,markerSymbol:e["marker-symbol"],markerSize:e["marker-size"],markerColor:e["marker-color"],stroke:e.stroke,strokeOpacity:e["stroke-opacity"],strokeWidth:e["stroke-width"],fill:e.fill,fillOpacity:e["fill-opacity"]},o={},i=Object(a.a)(Object.getOwnPropertyNames(n));try{for(i.s();!(t=i.n()).done;){var l=t.value;Object(r.b)(n[l])&&(o[l]=n[l])}}catch(c){i.e(c)}finally{i.f()}return o}function l(e){var t,n={title:e.title,description:e.description,"marker-symbol":e.markerSymbol,"marker-size":e.markerSize,"marker-color":e.markerColor,stroke:e.stroke,"stroke-opacity":e.strokeOpacity,"stroke-width":e.strokeWidth,fill:e.fill,"fill-opacity":e.fillOpacity},o={},i=Object(a.a)(Object.getOwnPropertyNames(n));try{for(i.s();!(t=i.n()).done;){var l=t.value;Object(r.b)(n[l])&&(o[l]=n[l])}}catch(c){i.e(c)}finally{i.f()}return o}},62:function(e,t,n){"use strict";function a(e,t){return"Windows"===t&&o(e)||r(e)}function r(e){return e.startsWith("/")}function o(e){return i(e)||l(e)}function i(e){return e.startsWith("//")||e.startsWith("\\\\")}function l(e){return e.length>=2&&/^[a-z]+$/i.test(e[0])&&":"===e[1]&&(2===e.length||"/"===e[2]||"\\"===e[2])}function c(e,t,n){var a=p(e,n),r=p(t,n);return a.length>0&&""===a[a.length-1]&&(a=a.slice(0,a.length-1)),r.length>0&&""===r[0]&&(r=r.slice(1)),d(u(a.concat(r)),n)}function s(e,t,n){if(""===e||e===t)return"";for(var a,r=p(e,n),o=p(t,n),i=r.length,l=o.length,c=Math.max(i,l),s=Math.min(i,l),u=0;u<c;u++){if(u<i&&u<l)if(r[u]!==o[u]){s=u;break}}return s===c?"":(a=l>s?new Array(l-s).fill(".."):[],i>s&&(a=a.concat(r.slice(s))),a.join("/"))}function u(e,t){for(var n=Array(e.length),a=0,r=0;r<e.length;r++){var o=e[r];if("."===o);else if(".."===o)a--;else{if(a<0)return e;n[a]=o,a++}}return a<0?e:n.slice(0,a)}function d(e,t){return e.join("Windows"===t?"\\":"/")}function p(e,t){if("Windows"===t){if(i(e)||l(e)){var n=p(e.substring(2));return 0===n.length?n:[e.substr(0,2)+n[0]].concat(n.slice(1))}return e.split(/[/\\]/)}return e.split("/")}function h(e,t){var n=p(e,t);return n.length>0?d(n.slice(0,n.length-1),t):""}function f(e,t){var n=p(e,t);return n.length>0?n[n.length-1]:e}function m(e){var t=e.lastIndexOf(".");return t>0?e.substring(t+1):""}n.d(t,"d",(function(){return a})),n.d(t,"e",(function(){return o})),n.d(t,"f",(function(){return c})),n.d(t,"g",(function(){return s})),n.d(t,"c",(function(){return h})),n.d(t,"a",(function(){return f})),n.d(t,"b",(function(){return m}))},64:function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return o})),n.d(t,"d",(function(){return i})),n.d(t,"e",(function(){return l}));n(15);var a="off",r="left",o="right",i="entity",l="layer"},67:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(5),r=null;function o(e,t){var n,o,i;r||(r=a.Toaster.create({className:"cate-toaster",position:a.Position.BOTTOM})),"info"===e.type?(n="info-sign",o=a.Intent.NONE,t=t||2500):"success"===e.type?(n="tick",o=a.Intent.SUCCESS,t=t||2500):"notification"===e.type?(n="notifications",o=a.Intent.PRIMARY,t=t||2500):"warning"===e.type?(n="warning-sign",o=a.Intent.WARNING,t=t||6e3):"error"===e.type?(n="error",o=a.Intent.DANGER,t=t||1e4):t=t||5e3,e.action&&(i={onClick:e.action.onClick,text:e.action.text,icon:e.action.icon,href:e.action.href,target:e.action.href?"_blank":void 0}),r.show({message:e.text,icon:n,intent:o,action:i,timeout:t})}},772:function(e,t,n){},773:function(e,t,n){},774:function(e,t,n){"use strict";n.r(t);var a=n(2),r=n(54),o=n(28),i=n(115),l=(n(439),n(398)),c=n(8),s=n(44),u=n(68),d=n(6),p=n(99),h=n.n(p),f=n(29),m=n(61),b=n(101),v=n(18),y=n(48),g=n(30);function O(e){return"layouts"in e}function E(e){return"viewIds"in e}function _(e,t){return function e(t,n,a){if(E(t))return t;if(a<n.length){f.a(O(t),"ViewSplitState expected");var r=t,o=n[a];return e(r.layouts[o],n,a+1)}return null}(e,t,0)}function C(e,t){if(E(e)){var n=e;return t&&t(n)?n:null}f.a(O(e),"ViewSplitState expected");var a=e;return C(a.layouts[0],t)||C(a.layouts[1],t)}function k(e,t){var n={before:[],after:[]};return function e(t,n,a){var r=t.viewIds;if(r)for(var o=null,i=0;i<r.length;i++){var l=r[i];if(l!==n){var c=i<r.length+1?r[i+1]:null;null!==c&&c===n||a.after.push(l),null!==o&&o===n||a.before.push(l)}o=l}var s=t.layouts;if(s){var u,d=Object(g.a)(s);try{for(d.s();!(u=d.n()).done;){var p=u.value;e(p,n,a)}}catch(h){d.e(h)}finally{d.f()}}}(e,t,n),n}function w(e,t,n,a){return function e(t,n,a,r){if(O(t)){var o=t,i=o.layouts[0],l=o.layouts[1],c=e(i,n,a,r),s=e(l,n,a,r);return i===c&&l===s?o:null===c?(f.a(s),s):null===s?c:Object(d.a)(Object(d.a)({},o),{},{layouts:[c,s]})}var u=t,p=u.viewIds,h=u.selectedViewId,m=p.findIndex((function(e){return e===n}));if(m>=0){if((p=p.slice()).splice(m,1),0===p.length)return null;if(h===n&&p.length){var b=m<p.length?m:p.length-1;h=p[b]}}var v=p.findIndex((function(e){return e===r}));if(v>=0&&(p="before"===a?p.slice(0,v).concat([n].concat(p.slice(v))):p.slice(0,v+1).concat([n].concat(p.slice(v+1))),h=n),p!==u.viewIds)return{viewIds:p,selectedViewId:h};return t}(e,t,n,a)}function S(e,t,n){return function e(t,n,a){if(O(t)){var r,o=t,i=o.layouts[0],l=o.layouts[1],c=e(i,n,a);if(r=i===c?e(l,n,a):l,i===c&&l===r)return o;var s=[c,r];return Object(d.a)(Object(d.a)({},o),{},{layouts:s})}var u=t,p=u.viewIds,h=p.findIndex((function(e){return e===n}));if(h<0)return u;var f=h+1;return{viewIds:p.slice(0,f).concat([a].concat(p.slice(f))),selectedViewId:a}}(e,t,n)}function j(e,t){return function e(t,n){if(O(t)){var a=t,r=a.layouts[0],o=[e(r,n),a.layouts[1]];return Object(d.a)(Object(d.a)({},a),{},{layouts:o})}return{viewIds:t.viewIds.concat([n]),selectedViewId:n}}(e,t)}function I(e,t,n,a){return function e(t,n,a,r,o){if(f.a(o<=n.length,"illegal path index"),o<n.length){f.a(O(t),"ViewSplitState expected");var i,l=t,c=n.charCodeAt(o)-48,s=l.layouts[c],u=e(s,n,a,r,o+1);return i=0===c?[u,l.layouts[1]]:[l.layouts[0],u],Object(d.a)(Object(d.a)({},l),{},{layouts:i})}f.a(E(t),"ViewPanelState expected");var p=t,h=p.viewIds;f.a(h.length>1,"ViewPanelState must have more than one view to be split");var m=p.selectedViewId,b=h.findIndex((function(e){return e===m}));b===h.length-1&&(b-=1),f.a(b>=0);var v=h.slice(0,b+1),y=h.slice(b+1);return{dir:a,pos:r,layouts:[{viewIds:v,selectedViewId:v[v.length-1]},{viewIds:y,selectedViewId:y[0]}]}}(e,t,n,a,0)}function P(e,t,n){return function e(t,n,a,r){if(f.a(r<=n.length,"illegal path index"),r<n.length){f.a(O(t),"ViewSplitState expected");var o,i=t,l=n.charCodeAt(r)-48,c=i.layouts[l],s=e(c,n,a,r+1);return o=0===l?[s,i.layouts[1]]:[i.layouts[0],s],Object(d.a)(Object(d.a)({},i),{},{layouts:o})}f.a(O(t),"ViewSplitState expected");var u=t;return Object(d.a)(Object(d.a)({},u),{},{pos:u.pos+a})}(e,t,n,0)}function D(e,t,n){return function e(t,n,a,r){if(f.a(r<=n.length,"illegal path index"),r<n.length){f.a(O(t),"ViewSplitState expected");var o,i=t,l=n.charCodeAt(r)-48,c=i.layouts[l],s=e(c,n,a,r+1);return c===s?i:(o=0===l?[s,i.layouts[1]]:[i.layouts[0],s],Object(d.a)(Object(d.a)({},i),{},{layouts:o}))}f.a(E(t),"ViewPanelState expected");var u=t,p=u.viewIds;return a===u.selectedViewId?u:(f.a(p.indexOf(a)>=0,"viewId not found"),{viewIds:p,selectedViewId:a})}(e,t,n,0)}function L(e,t,n){return N(e,t,n,0)}function T(e,t){for(;;){var n=e.findIndex((function(e){return e.id===t}));if(!(n>=0))break;e=e.slice(0,n).concat(e.slice(n+1))}return e}function A(e,t){if(O(e)){var n=e,a=n.layouts[0],r=n.layouts[1],o=A(a,t),i=A(r,t);if(a!==o||r!==i)return Object(d.a)(Object(d.a)({},n),{},{layouts:[o,i]})}else{var l=e;if(t!==l.selectedViewId){var c=l.viewIds;if(c.findIndex((function(e){return e===t}))>=0)return{viewIds:c,selectedViewId:t}}}return e}function N(e,t,n,a){if(f.a(a<=t.length,"illegal path index"),a<t.length){f.a(O(e),"ViewSplitState expected");var r,o=e,i=t.charCodeAt(a)-48,l=o.layouts[i],c=N(l,t,n,a+1);return l===c?o:E(c)&&0===c.viewIds.length?0===i?o.layouts[1]:o.layouts[0]:(r=0===i?[c,o.layouts[1]]:[o.layouts[0],c],Object(d.a)(Object(d.a)({},o),{},{layouts:r}))}f.a(E(e),"ViewPanelState expected");var s=e;if(n){var u=s.viewIds,p=u.indexOf(n);if(p<0)return s;u=u.slice(0,p).concat(u.slice(p+1));var h=s.selectedViewId;return h===n&&(h=p>0?u[p-1]:p<u.length?u[p]:null),{viewIds:u,selectedViewId:h}}return{viewIds:[],selectedViewId:null}}var R=n(161),x={expires:365};function M(e){R.set("cookieConsentObtained","1",x),R.set("trackingConsentObtained",e?"1":"0",x)}var V=n(64),B=n(25),W={dataStores:null,operations:null,workspace:null,colorMaps:null,baseMaps:B.b,fsRootNode:{name:"",isDir:!0,lastModified:"",size:0},workspaceNames:null,hasWebGL:Object(B.S)()},F=Object(B.gb)(),U={selectedWorkflowStepId:null,selectedWorkspaceResourceName:null,selectedVariableName:null,dialogs:{},directorySelectDialog:{onClose:function(){}},fileOpenDialog:{onClose:function(){}},fileSaveDialog:{onClose:function(){}},fileBrowseDialog:{onClose:function(){}},messageBox:{},selectedCtxOperationName:null,views:[F],viewLayout:{viewIds:[F.id],selectedViewId:F.id},activeViewId:F.id,newPlacemarkToolType:"NoTool",entityUpdateCount:0},G={reopenLastWorkspace:!1,lastWorkspacePath:null,autoUpdateSoftware:!0,autoShowNewFigures:!0,offlineMode:!1,showSelectedVariableLayer:!0,savedLayers:{},selectedDataStoreId:null,selectedDataSourceId:null,dataSourceFilterExpr:"",selectedOperationName:null,operationFilterTags:[],operationFilterExpr:"",dataSourceListHeight:200,showDataSourceDetails:!0,resourceListHeight:100,showResourceDetails:!0,workflowStepListHeight:100,showWorkflowStepDetails:!0,operationListHeight:200,showOperationDetails:!0,variableListHeight:200,showVariableDetails:!0,layerListHeight:160,showLayerDetails:!0,lastBaseMapId:B.e,panelContainerUndockedMode:!1,leftPanelContainerLayout:{horPos:300,verPos:400},rightPanelContainerLayout:{horPos:300,verPos:400},selectedLeftTopPanelId:"dataSources",selectedLeftBottomPanelId:"operations",selectedRightTopPanelId:"workspace",selectedRightBottomPanelId:"variables",placemarkCollection:{type:"FeatureCollection",features:[]},selectedPlacemarkId:null,placemarkListHeight:160,showPlacemarkDetails:!0,defaultPlacemarkStyle:Object(d.a)({},B.g.style),workspacePanelMode:"steps",showDataStoreDescription:!1,showDataStoreNotices:!0,showDataSourceIDs:!0,showAllDataSources:!1,showLayerTextOverlay:!0,debugWorldView:!1,styleContext:V.d,backendConfig:{dataStoresPath:null,useWorkspaceImageryCache:!1,resourceNamePattern:"res_{index}",proxyUrl:null},cookieConsentObtained:"1"===R.get("cookieConsentObtained"),trackingConsentObtained:"1"===R.get("trackingConsentObtained")},Y={webAPIServiceURL:"http://localhost:9090",webAPIStatus:null,webAPIServiceInfo:null,webAPIClient:null,tasks:{}},H={globeMousePosition:null,globeViewPosition:null,positionData:null},K=function(e,t,n){var a=t.payload.dataStoreId,r=e.dataStores.findIndex((function(e){return e.id===a}));if(r<0)throw Error("illegal data store ID: "+a);var o=e.dataStores[r],i=Object(d.a)(Object(d.a)({},o),{},{dataSources:n(o)}),l=Object(u.a)(e.dataStores);return l[r]=i,Object(d.a)(Object(d.a)({},e),{},{dataStores:l})};function z(e,t,n){var a,r=t.id,o=function(e,t){return e.concat([t])}(e.views,t),i=e.viewLayout;return n&&(a=S(i,n,r)),a&&a!==i||(a=j(i,r)),Object(d.a)(Object(d.a)({},e),{},{viewLayout:a,views:o,activeViewId:r})}var q=function(e,t,n){for(var a=null,r=0;r<e.length;r++){var o=e[r],i=J(o,t,n);o!==i&&(a||(a=e.slice(0,r))),a&&i&&a.push(i)}return a||e},J=function(e,t,n){var a=e.id===n;switch(t.type){case c.A:if("world"===e.type){var r=X(e.data.layers,t,a);if(r!==e.data.layers)return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:r})})}else if("figure"===e.type){var o=Object(B.B)(t.payload.resName);if(e.title===o)return o=Object(B.B)(t.payload.newResName),Object(d.a)(Object(d.a)({},e),{},{title:o})}break;case c.fb:var i=t.payload.viewId;if(e.id===i&&"world"===e.type){var l=X(e.data.layers,t,a);if(l!==e.data.layers)return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:l})})}break;case c.N:if("world"===e.type){var s=X(e.data.layers,t,a);if(s!==e.data.layers)return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:s})})}break;case c.L:if(t.payload.viewId===e.id&&"world"===e.type){var u=t.payload.selectedLayerId;return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{selectedLayerId:u})})}break;case c.K:if(t.payload.viewId===e.id&&"world"===e.type){var p=t.payload.selectedEntityId;return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{selectedEntityId:p})})}break;case c.O:if(t.payload.viewId===e.id){f.a("world"===e.type);var h=t.payload.viewMode;return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{viewMode:h})})}break;case c.I:var m=t.payload,v=m.viewId,y=m.layerSplitPosition;if(v===e.id)return f.a("world"===e.type),Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layerSplitPosition:y})});break;case c.D:if(t.payload.viewId===e.id){f.a("world"===e.type);var g=t.payload.baseMapId;return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{baseMapId:g})})}break;case c.J:if(t.payload.viewId===e.id){f.a("world"===e.type);var O=t.payload.projectionCode;return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{projectionCode:O})})}break;case c.b:if(t.payload.viewId===e.id){f.a("world"===e.type);var E=t.payload.layer,_=t.payload.selectLayer?E.id:e.data.selectedLayerId,C=e.data.layers.concat([E]);return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:C,selectedLayerId:_})})}break;case c.x:if(t.payload.viewId===e.id){f.a("world"===e.type);var k=t.payload.id,w=e.data.layers.slice(),S=e.data.selectedLayerId;k===S&&(S=null);var j=w.findIndex((function(e){return e.id===k}));if(j>=0)return w.splice(j,1),Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:w,selectedLayerId:S})})}break;case c.p:if(t.payload.viewId===e.id){f.a("world"===e.type);var I=t.payload.id,P=e.data.layers.slice(),D=P.findIndex((function(e){return e.id===I}));if(f.a(D>=0,"layerIndex >= 0"),D>0){var L=P[D-1];return P[D-1]=P[D],P[D]=L,Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:P})})}}break;case c.o:if(t.payload.viewId===e.id){f.a("world"===e.type);var T=t.payload.id,A=e.data.layers.slice(),N=A.findIndex((function(e){return e.id===T}));if(f.a(N>=0,"layerIndex >= 0"),N>=0&&N<A.length-1){var R=A[N+1];return A[N+1]=A[N],A[N]=R,Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:A})})}}break;case c.jb:if(t.payload.viewId===e.id){f.a("world"===e.type);var x=t.payload.layer,M=e.data.layers.slice(),V=M.findIndex((function(e){return e.id===x.id}));return f.a(V>=0,"layerIndex >= 0"),M[V]=Object(b.a)(M[V],x),Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:M})})}break;case c.kb:if(t.payload.viewId===e.id){f.a("world"===e.type);var W=t.payload,F=W.layerId,U=W.style,G=e.data.layers.slice(),Y=G.findIndex((function(e){return e.id===F}));f.a(Y>=0,"layerIndex >= 0");var H=G[Y];return G[Y]=Object(d.a)(Object(d.a)({},H),{},{style:Object(d.a)(Object(d.a)({},H.style),U)}),Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:G})})}break;case c.rb:if(t.payload.viewId===e.id){f.a("table"===e.type);var K=Object(d.a)(Object(d.a)({},e.data),t.payload);return Object(d.a)(Object(d.a)({},e),{},{data:K})}break;case c.Y:if(t.payload.viewId===e.id){f.a("animation"===e.type);var z=Object(d.a)(Object(d.a)({},e.data),t.payload);return Object(d.a)(Object(d.a)({},e),{},{data:z})}break;default:if("world"===e.type){var q=X(e.data.layers,t,a);if(q!==e.data.layers)return Object(d.a)(Object(d.a)({},e),{},{data:Object(d.a)(Object(d.a)({},e.data),{},{layers:q})})}}return e},X=function(e,t,n){for(var a,r=0;r<e.length;r++){var o=e[r],i=Z(o,t,n);o!==i&&(a||(a=e.slice(0,r))),a&&i&&a.push(i)}return a||e},Z=function(e,t,n){switch(t.type){case c.A:var a=t.payload.resName,r=t.payload.newResName;if(e.resName===a)return Object(d.a)(Object(d.a)({},e),{},{resName:r});break;case c.fb:var o=t.payload,i=o.layerId,l=o.entityId,u=o.style;if(e.id===i&&Object(B.bb)(e)){var p=e.entityStyles,f=p&&p[l],m=Object(d.a)(Object(d.a)({},f),u);if(!h()(f,m))return Object(d.a)(Object(d.a)({},e),{},{entityStyles:Object(d.a)(Object(d.a)({},p),{},Object(s.a)({},l,m))})}break;case c.N:if(e.id===B.a){var b=t.payload.showSelectedVariableLayer;return Object(d.a)(Object(d.a)({},e),{},{visible:b})}break;case c.M:if(e.id===B.a&&n){var v=t.payload.resource,y=t.payload.selectedVariable,g=t.payload.savedLayers;return Object(B.hb)(e,v,y,g)}break;case c.H:var O=t.payload,E=O.layerId,_=O.splitMode;if(e.id===E&&Object(B.W)(e))return Object(d.a)(Object(d.a)({},e),{},{splitMode:_})}return e},Q=function(e,t,n){var a=e.placemarkCollection.features.slice(),r=a.findIndex((function(e){return e.id===t})),o=r>=0&&a[r];f.a(o);var i=o&&o.properties,l=Object(d.a)(Object(d.a)({},i),n),c=Object(d.a)(Object(d.a)({},o),{},{properties:l});r>=0?a[r]=c:a.push(c);var s=Object(d.a)(Object(d.a)({},e.placemarkCollection),{},{features:a});return Object(d.a)(Object(d.a)({},e),{},{placemarkCollection:s})},$=function(e,t,n){var a=e.placemarkCollection.features.slice(),r=a.findIndex((function(e){return e.id===t})),o=r>=0&&a[r];f.a(o);var i=o&&o.geometry,l=Object(d.a)(Object(d.a)({},i),n),c=Object(d.a)(Object(d.a)({},o),{},{geometry:l});r>=0?a[r]=c:a.push(c);var s=Object(d.a)(Object(d.a)({},e.placemarkCollection),{},{features:a});return Object(d.a)(Object(d.a)({},e),{},{placemarkCollection:s})},ee=Object(i.c)({data:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:W,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.tb:var n=t.payload.workspaceNames||null;return Object(d.a)(Object(d.a)({},e),{},{workspaceNames:n});case c.mb:var a=t.payload.operations;return Object(d.a)(Object(d.a)({},e),{},{operations:a});case c.E:var r=t.payload.workspace;return Object(d.a)(Object(d.a)({},e),{},{workspace:r});case c.gb:var o=t.payload,i=o.path,l=o.updatedFileNode,s=Object(y.m)(e.fsRootNode,i,l);return Object(d.a)(Object(d.a)({},e),{},{fsRootNode:s});case c.Z:var p=t.payload.colorMaps;return Object(d.a)(Object(d.a)({},e),{},{colorMaps:p});case c.db:var h=t.payload.dataStores.slice();return Object(d.a)(Object(d.a)({},e),{},{dataStores:h});case c.bb:return K(e,t,(function(){return t.payload.dataSources.slice()}));case c.cb:return K(e,t,(function(e){var n=Object(u.a)(e.dataSources),a=t.payload,r=a.dataSourceId,o=a.metaInfo,i=a.metaInfoStatus,l=n.findIndex((function(e){return e.id===r}));if(l<0)throw Error("illegal data source ID: "+r);var c=n[l],s=Object(d.a)(Object(d.a)({},c),{},{metaInfo:o,metaInfoStatus:i}),p=s.capabilities;return!p&&o&&"ok"===i&&(p=Object(B.p)(s)),p!==s.capabilities&&(s=Object(d.a)(Object(d.a)({},s),{},{capabilities:p})),n[l]=s,n}))}return e},control:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:U,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.A:var n=t.payload.resName,a=t.payload.newResName,r=e.selectedWorkspaceResourceName;r===n&&(r=a);var o=q(e.views,t,e.activeViewId);return r!==e.selectedWorkspaceResourceName||o!==e.views?Object(d.a)(Object(d.a)({},e),{},{selectedWorkspaceResourceName:r,views:o}):e;case c.fb:var i=q(e.views,t,e.activeViewId);return i!==e.views?Object(d.a)(Object(d.a)({},e),{},{views:i}):e;case c.bb:var l=t.payload.dataSources,u=l&&l.length?l[0].id:null;return Object(d.a)(Object(d.a)({},e),{},{selectedDataSourceId:u});case c.mb:var p=t.payload.operations,h=p&&p.length?p[0].name:null;return Object(d.a)(Object(d.a)({},e),{},{selectedOperationName:h});case c.M:var f=t.payload.selectedVariable,m=f?f.name:null,v=e.views,y=q(e.views,t,e.activeViewId);return y!==v&&(v=y),Object(d.a)(Object(d.a)({},e),{},{selectedVariableName:m,views:v});case c.ab:return Object(d.a)(Object(d.a)({},e),t.payload);case c.c:return Object(d.a)(Object(d.a)({},e),{},{newPlacemarkToolType:"NoTool"});case c.a:var g=t.payload.newPlacemarkToolType;return g===e.newPlacemarkToolType&&(g="NoTool"),Object(d.a)(Object(d.a)({},e),{},{newPlacemarkToolType:g});case c.eb:var O=Object(b.b)(e.dialogs,t.payload.dialogId,t.payload.dialogState);return Object(d.a)(Object(d.a)({},e),{},{dialogs:O});case c.e:var E=Object(B.gb)(t.payload.baseMapId);return z(e,E,t.payload.placeAfterViewId);case c.V:var k=t.payload,S=k.resource,j=k.placeAfterViewId,N=e.views.find((function(e){return"figure"===e.type&&S.id===e.data.resourceId}));if(N){var R=A(e.viewLayout,N.id);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:R})}var x=Object(B.db)(S);return z(e,x,j);case c.U:var M=t.payload,V=M.resource,W=M.placeAfterViewId,F=e.views.find((function(e){return"animation"===e.type&&V.id===e.data.resourceId}));if(F){var G=A(e.viewLayout,F.id);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:G})}var Y=Object(B.cb)(V);return z(e,Y,W);case c.W:var H=t.payload,K=H.resName,J=H.varName,X=H.placeAfterViewId,Z=e.views.find((function(e){return"table"===e.type&&e.data.resName===K&&e.data.varName===J}));if(Z){var Q=A(e.viewLayout,Z.id);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:Q})}var $=Object(B.eb)(K,J);return z(e,$,X);case c.d:var ee=t.payload,te=ee.placeAfterViewId,ne=ee.resName,ae=ee.varName,re=Object(B.eb)(ne,ae);return z(e,re,te);case c.C:var oe=t.payload,ie=oe.viewPath,le=oe.viewId,ce=D(e.viewLayout,ie,le);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:ce,activeViewId:le});case c.q:var se=t.payload,ue=se.sourceViewId,de=se.placement,pe=se.targetViewId,he=w(e.viewLayout,ue,de,pe),fe=e.activeViewId;if(fe){var me=function(e){return e.viewIds.indexOf(fe)>=0},be=C(he,me);be&&be.selectedViewId!==fe&&(fe=be.selectedViewId)}return Object(d.a)(Object(d.a)({},e),{},{viewLayout:he,activeViewId:fe});case c.l:var ve=t.payload.viewPath,ye=t.payload.viewId,ge=T(e.views,ye),Oe=L(e.viewLayout,ve,ye),Ee=e.activeViewId;if(Ee===ye){Ee=null;var _e=_(Oe,ve);(_e&&_e.selectedViewId||(_e=C(Oe,(function(e){return!!e.selectedViewId}))))&&(Ee=_e.selectedViewId)}return Object(d.a)(Object(d.a)({},e),{},{viewLayout:Oe,views:ge,activeViewId:Ee});case c.X:var Ce=t.payload.viewPath,ke=t.payload.dir,we=t.payload.pos,Se=I(e.viewLayout,Ce,ke,we);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:Se});case c.f:var je=t.payload.viewPath,Ie=t.payload.delta,Pe=P(e.viewLayout,je,Ie);return Object(d.a)(Object(d.a)({},e),{},{viewLayout:Pe});case c.m:var De=e.entityUpdateCount+1;return Object(d.a)(Object(d.a)({},e),{},{entityUpdateCount:De});case c.n:var Le=t.payload,Te=Le.selectedCtxOperationName,Ae=Le.inputAssignments,Ne=e.dialogs.newCtxOperationStepDialog;return Ne=Object(d.a)(Object(d.a)({},Ne),{},{isOpen:!0,inputAssignments:Ae}),Object(d.a)(Object(d.a)({},e),{},{selectedCtxOperationName:Te,dialogs:Object(d.a)(Object(d.a)({},e.dialogs),{},Object(s.a)({},"newCtxOperationStepDialog",Ne))});case c.lb:return Object(d.a)(Object(d.a)({},e),t.payload);case c.w:return Object(d.a)(Object(d.a)({},e),{},{messageBox:Object(d.a)(Object(d.a)(Object(d.a)({},e.messageBox),t.payload),{},{isOpen:!0})});case c.k:return Object(d.a)(Object(d.a)({},e),{},{messageBox:Object(d.a)(Object(d.a)(Object(d.a)({},e.messageBox),t.payload),{},{isOpen:!1})});case c.s:return Object(d.a)(Object(d.a)({},e),{},{directorySelectDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.directorySelectDialog),t.payload),{},{isOpen:!0})});case c.g:return Object(d.a)(Object(d.a)({},e),{},{directorySelectDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.directorySelectDialog),t.payload),{},{isOpen:!1})});case c.u:return Object(d.a)(Object(d.a)({},e),{},{fileOpenDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileOpenDialog),t.payload),{},{isOpen:!0})});case c.i:return Object(d.a)(Object(d.a)({},e),{},{fileOpenDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileOpenDialog),t.payload),{},{isOpen:!1})});case c.v:return Object(d.a)(Object(d.a)({},e),{},{fileSaveDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileSaveDialog),t.payload),{},{isOpen:!0})});case c.j:return Object(d.a)(Object(d.a)({},e),{},{fileSaveDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileSaveDialog),t.payload),{},{isOpen:!1})});case c.t:return Object(d.a)(Object(d.a)({},e),{},{fileBrowseDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileBrowseDialog),t.payload),{},{isOpen:!0})});case c.h:return Object(d.a)(Object(d.a)({},e),{},{fileBrowseDialog:Object(d.a)(Object(d.a)(Object(d.a)({},e.fileBrowseDialog),t.payload),{},{isOpen:!1})});default:var Re=q(e.views,t,e.activeViewId);if(Re!==e.views)return Object(d.a)(Object(d.a)({},e),{},{views:Re})}return e},session:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:G,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.K:var n=t.payload.selectedEntityId||null,a=null;if(Object(v.e)(n)&&n.startsWith(B.i)&&(a=n),a!==e.selectedPlacemarkId)return Object(d.a)(Object(d.a)({},e),{},{selectedPlacemarkId:a});break;case c.ib:return Object(d.a)(Object(d.a)({},e),t.payload.session);case c.qb:case c.N:return Object(d.a)(Object(d.a)({},e),t.payload);case c.D:return Object(d.a)(Object(d.a)({},e),{},{lastBaseMapId:t.payload.baseMapId});case c.B:var r=t.payload,o=r.key,i=r.layer,l=Object(b.a)(e.savedLayers,Object(s.a)({},o,i));return Object(d.a)(Object(d.a)({},e),{},{savedLayers:l});case c.c:var u=t.payload.placemark,p=e.placemarkCollection.features,h=Object(d.a)({},u.properties),f=Object(B.L)(u,e.placemarkCollection),y=f.title,g=f.index;y&&(h=Object(d.a)(Object(d.a)({},h),{},{title:y}),"Point"===u.geometry.type&&(h["marker-symbol"]=g.toString(16).slice(-1)),u=Object(d.a)(Object(d.a)({},u),{},{properties:h})),p=p.concat([u]);var O=Object(d.a)(Object(d.a)({},e.placemarkCollection),{},{features:p});return Object(d.a)(Object(d.a)({},e),{},{placemarkCollection:O,selectedPlacemarkId:u.id});case c.y:var E=t.payload.placemarkId,_=e.placemarkCollection.features,C=_.findIndex((function(e){return e.id===E}));if(C>=0){(_=_.slice()).splice(C,1);var k=null;C<_.length?k=_[C].id:_.length>0&&(k=_[_.length-1].id);var w=Object(d.a)(Object(d.a)({},e.placemarkCollection),{},{features:_});return Object(d.a)(Object(d.a)({},e),{},{placemarkCollection:w,selectedPlacemarkId:k})}break;case c.nb:var S=t.payload,j=S.placemarkId,I=S.geometry;return $(e,j,I);case c.ob:var P=t.payload,D=P.placemarkId,L=P.properties;return Q(e,D,L);case c.pb:var T=t.payload,A=T.placemarkId,N=T.style,R=Object(m.b)(N),x=Object(d.a)(Object(d.a)({},e.defaultPlacemarkStyle),N);return Object(d.a)(Object(d.a)({},Q(e,A,R)),{},{defaultPlacemarkStyle:x});case c.r:var V=t.payload.trackingConsentObtained;return M(V),Object(d.a)(Object(d.a)({},e),{},{cookieConsentObtained:!0,trackingConsentObtained:V})}return e},communication:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Y,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case c.S:var n=t.payload.webAPIServiceURL;return Object(d.a)(Object(d.a)({},e),{},{webAPIServiceURL:n});case c.T:var a=t.payload.webAPIStatus;return Object(d.a)(Object(d.a)({},e),{},{webAPIStatus:a});case c.Q:var r=t.payload.webAPIClient;return Object(d.a)(Object(d.a)({},e),{},{webAPIClient:r,webAPIStatus:"open"});case c.R:var o=t.payload.webAPIServiceInfo;return Object(d.a)(Object(d.a)({},e),{},{webAPIServiceInfo:Object(d.a)(Object(d.a)({},e.webAPIServiceInfo),o)});case c.P:var i=t.payload.webAPIAutoStopInfo;return Object(d.a)(Object(d.a)({},e),{},{webAPIServiceInfo:Object(d.a)(Object(d.a)({},e.webAPIServiceInfo),{},{autoStopInfo:i})});case c.hb:return Object(d.a)(Object(d.a)({},e),{},{hubStatus:t.payload});case c.sb:return Object(d.a)(Object(d.a)({},e),{},{tasks:Object(b.b)(e.tasks,t.payload.jobId,t.payload.taskState)});case c.z:var l=Object(d.a)({},e.tasks);return delete l[t.payload.jobId],Object(d.a)(Object(d.a)({},e),{},{tasks:l})}return e},location:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:H,t=arguments.length>1?arguments[1]:void 0;if(t.type===c.F){var n=t.payload.position;if(e.globeMousePosition!==n)return Object(d.a)(Object(d.a)({},e),{},{globeMousePosition:n})}else if(t.type===c.G){var a=t.payload.position,r=t.payload.positionData;if(e.globeViewPosition!==a||e.positionData!==r)return Object(d.a)(Object(d.a)({},e),{},{globeViewPosition:a,positionData:r})}return e}}),te=n(60),ne=n(785),ae=n(781),re=n(15),oe=n(16),ie=n(7),le=n(19),ce=n(20),se=n(787),ue=n(5);var de=Object(o.b)((function(e){return{cookieConsentObtained:e.session.cookieConsentObtained,trackingConsentObtained:e.session.trackingConsentObtained}}))((function(e){var t=e.cookieConsentObtained,n=e.trackingConsentObtained,r=e.dispatch,o=a.useState(!1),i=Object(te.a)(o,2),l=i[0],s=i[1],u=a.useState(n),d=Object(te.a)(u,2),p=d[0],h=d[1];if(t)return null;return a.createElement(ue.Drawer,{title:"Data Protection Notice",icon:"info-sign",position:ue.Position.BOTTOM,isOpen:!0,isCloseButtonShown:!1,canOutsideClickClose:!1,canEscapeKeyClose:!1,size:240},a.createElement("div",{className:ue.Classes.DRAWER_BODY},a.createElement("div",{className:ue.Classes.DIALOG_BODY},"We use cookies so you can optimally use this website. Some cookies that are necessary for the operation of Cate App. In addition, we use cookies for statistical purposes. You can adjust the data protection settings or agree to all cookies directly. ",a.createElement("a",{href:"https://climate.esa.int/en/privacy/"},"Privacy Statement")),a.createElement("div",{className:ue.Classes.DIALOG_FOOTER},a.createElement("div",{className:ue.Classes.DIALOG_FOOTER_ACTIONS},a.createElement(ue.Button,{intent:ue.Intent.PRIMARY,onClick:function(){r(Object(c.dc)(!l||p))}},l?"I agree to selected Cookies":"I agree to all Cookies"),a.createElement(ue.Button,{rightIcon:l?"caret-up":"caret-down",onClick:function(){return s(!l)}},"Settings"))),a.createElement(ue.Collapse,{isOpen:l},a.createElement("div",{className:ue.Classes.DIALOG_BODY},a.createElement(ue.Checkbox,{checked:!0},a.createElement("strong",null,"Functional"),": Cate does not work without functional cookies. We'll just save your consent with this notice and possibly auto-login information if you use the Cate cloud services."),a.createElement(ue.Checkbox,{checked:p,onChange:function(e){h(e.currentTarget.checked)}},a.createElement("strong",null,"Tracking"),": Cate uses the open source software tool ",a.createElement("a",{href:"https://matomo.org/"},"Matomo"),", which uses cookies. With these cookies we count Cate App visits - of course anonymously. Matomo fully complies to the EU General Data Protection Regulation (GDPR).")))))})),pe=n(135),he=n(402),fe=n.n(he);var me=Object(o.b)((function(e){return{}}))((function(e){return a.createElement(ue.Menu,null,a.createElement(ue.MenuItem,{text:"New Workspace",icon:"folder-new",onClick:function(){e.dispatch(Object(c.bc)())}}),a.createElement(ue.MenuItem,{text:"Open Workspace",icon:"folder-shared-open",onClick:function(){e.dispatch(Object(c.gc)())}}),a.createElement(ue.MenuItem,{text:"Close Workspace",icon:"folder-close",onClick:function(){e.dispatch(Object(c.Fb)())}}),a.createElement(ue.MenuDivider,null),a.createElement(ue.MenuItem,{text:"Save Workspace",icon:"add-to-folder",onClick:function(){e.dispatch(Object(c.qc)())}}),a.createElement(ue.MenuItem,{text:"Save Workspace As...",onClick:function(){e.dispatch(Object(c.pc)())}}),a.createElement(ue.MenuDivider,null),a.createElement(ue.MenuItem,{text:"Delete Workspace",icon:"trash",onClick:function(){e.dispatch(Object(c.Kb)())}}))}));var be=Object(o.b)((function(e){return{}}))((function(){var e=function(e){window.open(e,"_blank")};return a.createElement("div",null,a.createElement(ue.Menu,null,a.createElement(ue.MenuItem,{text:"Cate Documentation",onClick:function(){return e("http://cate.readthedocs.io")}}),a.createElement(ue.MenuItem,{text:"Cate Website",onClick:function(){return e("https://climate.esa.int/en/explore/analyse-climate-data")}}),a.createElement(ue.MenuItem,{text:"Cate on GitHub",onClick:function(){return e("https://github.com/CCI-Tools/cate")}}),a.createElement(ue.MenuItem,{text:"ESA Climate Office Helpdesk",onClick:function(){return e("https://climate.esa.int/en/helpdesk")}})))})),ve={marginLeft:10};var ye=Object(o.b)((function(e){return{}}))((function(e){var t=e.dispatch;return a.createElement(ue.Navbar,null,a.createElement(ue.NavbarGroup,null,a.createElement("img",{src:fe.a,width:32,height:32,alt:"Cate icon"}),a.createElement("h2",{style:ve},"Cate - ESA CCI Toolbox")),a.createElement(ue.NavbarGroup,{align:"right"},a.createElement(ue.Popover,{content:a.createElement(me,null),position:ue.PopoverPosition.BOTTOM},a.createElement(ue.Button,{className:"bp3-minimal",rightIcon:"caret-down"},"Workspaces")),a.createElement(ue.Popover,{content:a.createElement(be,null),position:ue.PopoverPosition.BOTTOM},a.createElement(ue.Button,{className:"bp3-minimal",rightIcon:"caret-down"},"Help")),a.createElement(ue.NavbarDivider,null),function(){try{return window.self!==window.top}catch(e){return!0}}()&&a.createElement(ue.Button,{className:"bp3-minimal",icon:"share",onClick:function(){window.open(window.location.href,"_blank")}}),a.createElement(ue.Button,{className:"bp3-minimal",icon:"offline",onClick:function(){t(c.fd())}}),a.createElement(ue.Button,{className:"bp3-minimal",icon:"cog",onClick:function(){t(c.ed())}})))}));var ge=n(106),Oe=n(10),Ee=a.createElement("span",null,"This is very likely a configuration error."),_e=a.createElement(ue.NonIdealState,{title:"No workspace",description:a.createElement("span",null,"Try ",a.createElement("strong",null,"File / New")," or ",a.createElement("strong",null,"File / Open")," from the main menu."),icon:"circle"}),Ce=a.createElement(ue.NonIdealState,{title:"No workspace resources",icon:"database",description:a.createElement("span",null,"Open a dataset in DATA SOURCES panel or add a ",a.createElement("code",null,"read_")," operation step from the OPERATIONS panel.")}),ke=a.createElement(ue.NonIdealState,{title:"No workflow steps",icon:"flows",description:a.createElement("span",null,"Open a dataset in DATA SOURCES panel or add a ",a.createElement("code",null,"read_")," operation step from the OPERATIONS panel.")}),we=a.createElement(ue.NonIdealState,{title:"No data stores found",icon:"offline",description:Ee}),Se=a.createElement(ue.NonIdealState,{title:"No data sources",icon:"circle",description:a.createElement("span",null,'You can add a new data source using the "+" button below.')}),je=a.createElement(ue.NonIdealState,{title:"Loading data sources...",icon:a.createElement("div",{style:{marginTop:14}},a.createElement(ue.Spinner,{intent:ue.Intent.PRIMARY})),description:a.createElement("div",{className:"bp3-text-small bp3-text-muted"},"Note: If loading seems to take forever, try switching to another data store in between, then come back to the desired one.")}),Ie=a.createElement(ue.NonIdealState,{title:"No data sources found",icon:"circle",description:Ee}),Pe=a.createElement(ue.NonIdealState,{title:"No operations found",description:Ee,icon:"circle"}),De=a.createElement(ue.NonIdealState,{title:"No variables",icon:"circle",description:"Select a resource in the WORKSPACE panel first."}),Le=a.createElement(ue.NonIdealState,{title:"No active view",description:"Add a new view first.",icon:"circle"}),Te=a.createElement(ue.NonIdealState,{title:"Can't open world view",description:"Cate's world view component requires WebGL, which doesn't seem to be supported by your environment. This is likely on virtualized HW with low graphics capabilities. Sorry!",icon:"disable"}),Ae=a.createElement(ue.NonIdealState,{title:"No places",description:a.createElement("span",null,"Press the tool buttons below to add a new place."),icon:"circle"}),Ne=a.createElement(ue.NonIdealState,{title:"No place selected",description:"Select a place to show and edit its details.",icon:"circle"}),Re=a.createElement(ue.NonIdealState,{title:"No layers",description:"To show layers, activate a world view",icon:"circle"}),xe=a.createElement(ue.NonIdealState,{title:"No layers",description:a.createElement("span",null,"Press the ",a.createElement(ue.Icon,{icon:"add"})," button to add a layer."),icon:"circle"}),Me=a.createElement(ue.NonIdealState,{title:"No layer selected",description:"Select a layer to browse and edit its details.",icon:"circle"}),Ve=a.createElement(ue.NonIdealState,{title:"Styles unavailable",description:"Select a layer in the LAYERS panel to modify its style.",icon:"circle"}),Be=a.createElement(ue.NonIdealState,{title:"Styles unavailable",description:"Select an entity in the World View to modify its style.",icon:"circle"}),We=(ue.NonIdealState,ue.Icon,a.createElement(ue.NonIdealState,{title:"No table data",description:a.createElement("span",null,"The resource seems to be empty or an error occurred."),icon:"circle"})),Fe=n(23),Ue=n(256);var Ge=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).parentContainer=void 0,n.checkProps(e),a.parentContainer=null,a.onRef=a.onRef.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"getExternalObjectRef",value:function(){return this.externalObjectStore[this.props.id]||null}},{key:"propsToExternalObjectState",value:function(e,t){return Object(d.a)(Object(d.a)({},t),e)}},{key:"externalObjectMounted",value:function(e,t,n,a){}},{key:"externalObjectUnmounted",value:function(e,t,n,a){}},{key:"componentWillUpdate",value:function(e){this.props.debug&&console.log("ExternalObjectComponent.componentWillUpdate nextProps.id =",e.id),n.checkProps(e),this.props.id===e.id?this.updateExternalComponentAndSaveProps(e):this.parentContainer&&this.remountExternalObject(this.parentContainer,e)}},{key:"onRef",value:function(e){this.props.debug&&console.log("ExternalObjectComponent.onRef: this.props =",this.props),this.remountExternalObject(e,this.props)}},{key:"render",value:function(){return a.createElement("div",{id:this.props.id,className:this.props.className,style:this.props.style,ref:this.onRef},this.renderChildren())}},{key:"renderChildren",value:function(){return null}},{key:"forceRegeneration",value:function(){var e=this.externalObjectStore,t=e[this.props.id];t&&(delete e[this.props.id],this.parentContainer&&t.container&&this.parentContainer.removeChild(t.container),this.remountExternalObject(this.parentContainer,this.props))}},{key:"remountExternalObject",value:function(e,t){t.debug&&console.log("ExternalObjectComponent.remountExternalObject: props.id =",t.id),e?(e.id!==t.id&&this.unmountExternalObject(e,this.props),t.id in this.externalObjectStore?this.mountExistingExternalObject(e,t):this.mountNewExternalObject(e,t)):this.parentContainer&&this.unmountExternalObject(this.parentContainer,t)}},{key:"mountNewExternalObject",value:function(e,t){t.debug&&console.log("ExternalObjectComponent.mountNewExternalObject: props.id =",t.id);var n=this.newContainer(t.id);n&&(t.debug&&console.log("ExternalObjectComponent: attaching new external object with id =",t.id),e.appendChild(n));var a=this.newExternalObject(e,n);this.externalObjectStore[t.id]={object:a,container:n},this.parentContainer=e,this.externalObjectMounted(a,t,e,n),this.updateExternalComponentAndSaveProps(t)}},{key:"mountExistingExternalObject",value:function(e,t){t.debug&&console.log("ExternalObjectComponent.mountExistingExternalObject: props.id =",t.id);var n=this.externalObjectStore[t.id];f.a(n);var a=n.container;a&&!e.contains(a)&&(t.debug&&console.log("ExternalObjectComponent: attaching existing external object with id =",t.id),e.appendChild(a)),this.parentContainer=e,this.externalObjectMounted(n.object,t,e,a),this.updateExternalComponentAndSaveProps(t)}},{key:"unmountExternalObject",value:function(e,t){this.props.debug&&console.log("ExternalObjectComponent.unmountExternalObject: parentContainer.id =",e.id);var n=this.externalObjectStore[e.id];f.a(n);var a=n.container;a&&e.contains(a)&&(t.debug&&console.log("ExternalObjectComponent: detaching external object with id =",a.id),e.removeChild(a)),this.parentContainer=null,this.externalObjectUnmounted(n.object,t,e,a)}},{key:"updateExternalComponentAndSaveProps",value:function(e){var t=this.externalObjectStore[e.id];f.a(t);var n=t.state,a=this.propsToExternalObjectState(e,n);this.props.debug&&(console.log("ExternalObjectComponent: updating existing external object"),console.log(" this.props.id =",this.props.id),console.log(" nextProps.id =",e.id),console.log(" prevState =",n),console.log(" nextState =",a)),this.shouldExternalObjectUpdate(n,a)&&this.updateExternalObject(t.object,n,a,this.parentContainer,t.container),t.state=a}},{key:"shouldExternalObjectUpdate",value:function(e,t){return!function(e,t){if(e===t)return!0;if(e&&t){var n=typeof e;if(n!==typeof t)return!1;if("Array"===n){if(!e.length!==!t.length)return!1;if(!e.length&&!t.length)return!0;for(var a=0;a<e.length;a++)if(e[a]!==t[a])return!1;return!0}if("object"===n){var r=Object.getOwnPropertyNames(e),o=Object.getOwnPropertyNames(t);if(!r.length!==!o.length)return!1;if(!r.length&&!o.length)return!0;var i,l=Object(g.a)(r);try{for(l.s();!(i=l.n()).done;){var c=i.value;if(e[c]!==t[c])return!1}}catch(p){l.e(p)}finally{l.f()}var s,u=Object(g.a)(o);try{for(u.s();!(s=u.n()).done;){var d=s.value;if(e[d]!==t[d])return!1}}catch(p){u.e(p)}finally{u.f()}return!0}}return!1}(e,t)}},{key:"externalObjectStore",get:function(){return this.props.externalObjectStore||n.DEFAULT_EXTERNAL_OBJECT_STORE}}],[{key:"checkProps",value:function(e){if(!e.id)throw new Error("cannot construct ExternalObjectComponent without id")}}]),n}(a.PureComponent);function Ye(e,t,n){for(var a=[],r=e.slice(),o=new Set(t.map((function(e){return e.id}))),i=e.length-1;i>=0;i--){var l=e[i];o.has(l.id)||(a.push({type:"REMOVE",index:i,oldElement:l}),r.splice(i,1))}f.a(r.length<=t.length);for(var c=0;c<t.length;c++){var s=t[c];f.a(!!s);var u=r[c];if(u)if(s.id!==u.id){for(var d=-1,p=c+1;p<r.length;p++)if(r[p].id===s.id){d=p;break}if(-1===d)a.push({type:"ADD",index:c,newElement:s}),r.splice(c,0,s);else{a.push({type:"MOVE",index:d,numSteps:c-d});var m=r[d];r.splice(d,1),r.splice(c,0,m),c-=1}}else if(n){var b=n(u,s);null!==b&&"undefined"!==typeof b&&a.push({type:"UPDATE",index:c,oldElement:u,newElement:s,change:b})}else h()(u,s)||a.push({type:"UPDATE",index:c,oldElement:u,newElement:s});else a.push({type:"ADD",index:c,newElement:s}),r.push(s)}return a}Ge.DEFAULT_EXTERNAL_OBJECT_STORE={};var He=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).sliderElement=void 0,a.dragStartX=void 0,a.handleRef=a.handleRef.bind(Object(ie.a)(a)),a.mouseDown=a.mouseDown.bind(Object(ie.a)(a)),a.mouseUp=a.mouseUp.bind(Object(ie.a)(a)),a.sliderMove=a.sliderMove.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"mouseDown",value:function(e){this.dragStartX=e.clientX-this.sliderElement.offsetLeft,window.addEventListener("mousemove",this.sliderMove,!0)}},{key:"mouseUp",value:function(){window.removeEventListener("mousemove",this.sliderMove,!0)}},{key:"sliderMove",value:function(e){var t=(e.clientX-this.dragStartX)/this.sliderElement.parentElement.offsetWidth;this.props.onChange(t)}},{key:"handleRef",value:function(e){e?(e.addEventListener("mousedown",this.mouseDown,!1),window.addEventListener("mouseup",this.mouseUp,!1),this.dragStartX=0):this.sliderElement&&this.sliderElement.removeEventListener("mousedown",this.mouseDown,!1),this.sliderElement=e}},{key:"render",value:function(){var e=100*this.props.splitPos+"%";return a.createElement("div",{style:Object(d.a)(Object(d.a)({},n.DIV_STYLE),{},{left:e}),ref:this.handleRef})}}]),n}(a.PureComponent);He.DIV_STYLE={position:"absolute",left:"50%",top:"0px",backgroundColor:"rgba(255, 255, 0, 0.5)",width:"2px",height:"100%",zIndex:5,cursor:"col-resize"};var Ke=n(53),ze=new Fe.e(Fe.d.CHARTREUSE.withAlpha(.9)),qe=new Fe.e(Fe.d.YELLOW.withAlpha(.9)),Je=new Fe.e(Fe.d.AQUA.withAlpha(.7)),Xe=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e,a){var r;Object(re.a)(this,n),(r=t.call(this))._viewer=void 0,r._ellipsoid=void 0,r._toolDataSource=void 0,r._handler=void 0,r._onNewEntity=void 0,r._viewer=e,r._ellipsoid=e.scene.globe.ellipsoid,r._toolDataSource=new Fe.g("Tool Data Source"),e.dataSources.add(r._toolDataSource);var o=new Fe.v(e.scene.canvas);return o.setInputAction((function(e){r.tool.isActive()&&(r.onLeftClick(e),r._viewer.scene.requestRender())}),Fe.w.LEFT_CLICK),o.setInputAction((function(e){r.tool.isActive()&&(r.onLeftDoubleClick(e),r._viewer.scene.requestRender())}),Fe.w.LEFT_DOUBLE_CLICK),o.setInputAction((function(e){r.tool.isActive()&&(r.onMouseMove(e),r._viewer.scene.requestRender())}),Fe.w.MOUSE_MOVE),r._handler=o,r._onNewEntity=a,r}return Object(oe.a)(n,[{key:"newEntity",value:function(e){this._onNewEntity?this._onNewEntity(new Fe.i(e)):this._viewer.entities.add(e)}},{key:"addToolEntity",value:function(e){this._toolDataSource.entities.add(e)}},{key:"removeAllToolEntities",value:function(){this._toolDataSource.entities.removeAll()}},{key:"pickEllipsoid",value:function(e){return this._viewer.camera.pickEllipsoid(e,this._ellipsoid)}},{key:"cartesianWithHeightDelta",value:function(e,t){var n=this._ellipsoid.cartesianToCartographic(e);return n.height+=t,this._ellipsoid.cartographicToCartesian(n)}},{key:"cartesianToCartographic",value:function(e){return this._ellipsoid.cartesianToCartographic(e)}},{key:"cartographicToCartesian",value:function(e){return this._ellipsoid.cartographicToCartesian(e)}},{key:"destroy",value:function(){this._handler.destroy()}}]),n}(function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){var e;return Object(re.a)(this,n),(e=t.call(this))._tool=void 0,e._tool=Qe,e}return Object(oe.a)(n,[{key:"onLeftClick",value:function(e){this._tool.handleLeftClick(e)}},{key:"onLeftDoubleClick",value:function(e){this._tool.handleLeftDoubleClick(e)}},{key:"onMouseMove",value:function(e){this._tool.handleMouseMove(e)}},{key:"tool",set:function(e){e!==this._tool&&(this._tool.deactivate(),this._tool.context=null,this._tool=e,this._tool.context=this,this._tool.activate())},get:function(){return this._tool}}]),n}((function e(){Object(re.a)(this,e)}))),Ze=function(){function e(t){Object(re.a)(this,e),this.type=void 0,this._context=null,this.type=t}return Object(oe.a)(e,[{key:"isActive",value:function(){return null!==this._context}},{key:"activate",value:function(){}},{key:"deactivate",value:function(){}},{key:"handleLeftClick",value:function(e){}},{key:"handleLeftDoubleClick",value:function(e){}},{key:"handleMouseMove",value:function(e){}},{key:"context",set:function(e){this._context=e},get:function(){return this._context}}]),e}(),Qe=new(function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.call(this,"NoTool")}return n}(Ze)),$e=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.call(this,"PointTool")}return Object(oe.a)(n,[{key:"handleLeftClick",value:function(e){var t=this.context.pickEllipsoid(e.position);Object(v.b)(t)&&this.context.newEntity(new Fe.i({position:t,point:{pixelSize:6,outlineWidth:1}}))}}]),n}(Ze),et=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e,a){var r;return Object(re.a)(this,n),(r=t.call(this,e)).genPolygon=void 0,r.polylinePositions=null,r.polygonPositions=null,r.polylineEntity=null,r.polygonEntity=null,r.hasRubberband=!1,r.genPolygon=a,r}return Object(oe.a)(n,[{key:"deactivate",value:function(){this.reset()}},{key:"handleLeftClick",value:function(e){this.addPoint(e.position)}},{key:"handleMouseMove",value:function(e){this.moveLastPoint(e.endPosition)}},{key:"handleLeftDoubleClick",value:function(e){this.endInteraction()}},{key:"addPoint",value:function(e){var t=this.context.pickEllipsoid(e);Object(v.b)(t)&&(t=this.context.cartesianWithHeightDelta(t,10),this.updatePositions(t)&&this.context.addToolEntity(new Fe.i({position:t,point:{show:!0,outlineColor:Fe.d.BLACK,outlineWidth:1,color:ze,pixelSize:10}})),this.hasRubberband=!1)}},{key:"endInteraction",value:function(){null!==this.polygonEntity?this.context.newEntity(new Fe.i({polygon:{hierarchy:new Fe.t(this.polygonPositions),material:Je}})):null!==this.polylineEntity&&this.context.newEntity(new Fe.i({polyline:{positions:this.polylinePositions,material:qe}})),this.reset()}},{key:"moveLastPoint",value:function(e){if(this.polylinePositions){var t=this.context.pickEllipsoid(e);Object(v.b)(t)&&(this.updatePositions(t),this.hasRubberband=!0)}}},{key:"updatePositions",value:function(e){var t=this.context.cartesianWithHeightDelta(e,5),n=!0;if(null===this.polylinePositions)this.polylinePositions=[t];else{var a=this.polylinePositions.length;this.hasRubberband?this.polylinePositions[a-1]=t:t.equals(this.polylinePositions[a-1])?n=!1:this.polylinePositions.push(t)}if(this.polylinePositions.length>1){var r=this.polylinePositions.slice();this.polylineEntity?n&&(this.polylineEntity.polyline.positions=new Fe.f(r)):(this.polylineEntity=new Fe.i({polyline:{positions:r,width:2,material:qe}}),this.context.addToolEntity(this.polylineEntity))}if(n&&this.genPolygon){var o=this.context.cartesianWithHeightDelta(e,0);if(this.polygonPositions){var i=this.polygonPositions.length;this.hasRubberband?this.polygonPositions[i-1]=o:this.polygonPositions.push(o)}else this.polygonPositions=[o];if(this.polygonPositions.length>2){var l=this.polygonPositions.slice();this.polygonEntity?this.polygonEntity.polygon.hierarchy=new Fe.f(new Fe.t(l)):(this.polygonEntity=new Fe.i({polygon:{hierarchy:new Fe.t(l),material:Je}}),this.context.addToolEntity(this.polygonEntity))}}return n}},{key:"reset",value:function(){this.polylinePositions=null,this.polygonPositions=null,this.polylineEntity=null,this.polygonEntity=null,this.hasRubberband=!1,null!==this.context&&this.context.removeAllToolEntities()}}]),n}(Ze),tt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.call(this,"PolylineTool",!1)}return n}(et),nt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.call(this,"PolygonTool",!0)}return n}(et),at=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){var e;return Object(re.a)(this,n),(e=t.call(this,"BoxTool")).position1=null,e.position2=null,e.polygonEntity=null,e}return Object(oe.a)(n,[{key:"deactivate",value:function(){this.reset()}},{key:"handleLeftClick",value:function(e){this.setPosition(e.position,!0)}},{key:"handleLeftDoubleClick",value:function(e){this.setPosition(e.position,!0)}},{key:"handleMouseMove",value:function(e){this.position1&&this.setPosition(e.endPosition,!1)}},{key:"setPosition",value:function(e,t){var n=this.context.pickEllipsoid(e);if(Object(v.b)(n))if(null===this.position1)this.position1=n;else{this.position2=n;var a=this.getPositions();if(t)return this.context.newEntity(new Fe.i({polygon:{hierarchy:new Fe.t(a),material:Je}})),void this.reset();null===this.polygonEntity?(this.polygonEntity=new Fe.i({polygon:{hierarchy:new Fe.t(a),material:Je}}),this.context.addToolEntity(this.polygonEntity)):this.polygonEntity.polygon.hierarchy=new Fe.f(new Fe.t(a))}}},{key:"getPositions",value:function(){var e=this.context.cartesianToCartographic(this.position1),t=this.context.cartesianToCartographic(this.position2),n=e.longitude,a=e.latitude,r=t.longitude,o=t.latitude,i=.5*(e.height+t.height);return[this.context.cartographicToCartesian(new Fe.c(n,a,i)),this.context.cartographicToCartesian(new Fe.c(r,a,i)),this.context.cartographicToCartesian(new Fe.c(r,o,i)),this.context.cartographicToCartesian(new Fe.c(n,o,i))]}},{key:"reset",value:function(){this.position1=null,this.position2=null,this.polygonEntity=null,null!==this.context&&this.context.removeAllToolEntities()}}]),n}(Ze);Fe.o.defaultAccessToken="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhNzYzYzJjYS00YzY5LTQzN2ItOWQzNy03NWZmZTQyMjU1ZDgiLCJpZCI6MjAwNTAsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NzY2NjU5ODN9.f-uN5Ocljn77-O2aDNEGPSr8HRHym5RA0aqSWKMgYYk";var rt=Fe.u.fromDegrees(-30,20,40,80),ot=[];Fe.a.DEFAULT_VIEW_RECTANGLE=rt,Fe.a.DEFAULT_VIEW_FACTOR=0;var it=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).cesiumEventHandler=void 0,a.selectedEntityChangeHandler=void 0,a.toolContext=void 0,a.handleRemoteBaseLayerError=a.handleRemoteBaseLayerError.bind(Object(ie.a)(a)),a.state={isContextMenuOpen:!1},a}return Object(oe.a)(n,[{key:"renderChildren",value:function(){return Object(v.d)(this.props.splitLayerPosition)?a.createElement(He,{splitPos:this.props.splitLayerPosition,onChange:this.props.onLayerSplitPosChange}):null}},{key:"newContainer",value:function(e){var t=document.createElement("div");return t.setAttribute("id","cesium-container-"+e),t.setAttribute("style","width: 100%; height: 100%; overflow: hidden;"),t}},{key:"newExternalObject",value:function(e,t){var a,r=this;this.props.offlineMode&&(a=n.getStaticNaturalEarthImageryProvider());var o={animation:!1,baseLayerPicker:!1,selectionIndicator:!0,fullscreenButton:!1,geocoder:!1,homeButton:!1,infoBox:!1,sceneModePicker:!0,timeline:!1,navigationHelpButton:!1,navigationInstructionsInitiallyVisible:!1,automaticallyTrackDataSourceClocks:!1,imageryProvider:a,requestRenderMode:!0,maximumRenderTimeChange:1/0},i=new Fe.A(t,o);t.oncontextmenu=function(e){return r.handleContextMenu(i,e)},this.props.debug&&(i.scene.debugShowFramesPerSecond=!0),this.props.offlineMode||Object(Ke.j)(i,this.props.baseMapOptions);var l=i.selectionIndicator.viewModel,c=l.update;return l.update=function(){var e=l;c.apply(this);var t="top : ".concat(e._screenPositionY,"; left : ").concat(e._screenPositionX,";");e._selectionIndicatorElement.setAttribute("style",t)},i}},{key:"handleRemoteBaseLayerError",value:function(e){console.error("CesiumGlobe: error: ",e.message,e.timesRetried,e.error);var t=this.getExternalObjectRef();if(t){var a=t.object,r=a.imageryLayers.get(0);a.imageryLayers.remove(r,!0);var o=n.getStaticNaturalEarthImageryProvider();a.imageryLayers.addImageryProvider(o,0)}}},{key:"handleContextMenu",value:function(e,t){var n=this,a=this.props.renderContextMenu;if(a){var r=new Fe.b(t.clientX,t.clientY),o=Object(Ke.d)(e,r),i=a(Object(Ke.c)(e,o,!0),o,Object(Ke.i)(e,o));i&&(t.preventDefault(),ue.ContextMenu.show(i,{left:t.clientX,top:t.clientY},(function(){return n.setState({isContextMenuOpen:!1})})),this.setState({isContextMenuOpen:!0}))}}},{key:"propsToExternalObjectState",value:function(e,t){return{selectedPlacemarkId:e.selectedPlacemarkId,baseMapOptions:e.baseMapOptions,imageLayerDescriptors:e.imageLayerDescriptors||ot,vectorLayerDescriptors:e.vectorLayerDescriptors||ot,overlayHtml:e.overlayHtml||null,geometryToolType:e.geometryToolType,splitLayerPosition:e.splitLayerPosition,dataSourceMap:t&&t.dataSourceMap||{}}}},{key:"updateExternalObject",value:function(e,t,a){var r=t&&t.baseMapOptions||null,o=t&&t.selectedPlacemarkId||null,i=t&&t.imageLayerDescriptors||ot,l=t&&t.vectorLayerDescriptors||ot,c=t&&t.overlayHtml||null,s=t&&t.splitLayerPosition,u=t&&t.geometryToolType||"NoTool",d=a.baseMapOptions,p=a.selectedPlacemarkId||null,h=a.imageLayerDescriptors||ot,f=a.vectorLayerDescriptors||ot,m=a.overlayHtml,b=a.splitLayerPosition,y=a.geometryToolType||"NoTool",g=!1;r===d||this.props.offlineMode||Object(Ke.j)(e,d),i!==h&&(this.updateImageLayers(e,i,h),g=!0),l!==f&&(this.updateVectorLayers(e,l,f,a.dataSourceMap,p),g=!0),o!==p&&(this.updatePlacemarkSelection(e,p),g=!0),c!==m&&(n.updateOverlayHtml(e,c,m),g=!0),s!==b&&(Object(v.d)(b)&&(e.scene.imagerySplitPosition=b),g=!0),u!==y&&this.activateGeometryTool(e,y),g&&e.scene.requestRender()}},{key:"externalObjectMounted",value:function(e,t){function n(t,n,a){if(a){var r=Object(Ke.c)(e,t,!0);n?a(r,t,Object(Ke.i)(e,t)):a(r,t)}}this.cesiumEventHandler=new Fe.v(e.scene.canvas),this.cesiumEventHandler.setInputAction((function(e){return n(e.position,!0,t.onLeftUp)}),Fe.w.LEFT_UP),this.cesiumEventHandler.setInputAction((function(e){return n(e.position,!0,t.onLeftClick)}),Fe.w.LEFT_CLICK),this.cesiumEventHandler.setInputAction((function(e){return n(e.position,!0,t.onRightClick)}),Fe.w.RIGHT_CLICK),this.cesiumEventHandler.setInputAction((function(e){return n(e.endPosition,!1,t.onMouseMove)}),Fe.w.MOUSE_MOVE),this.selectedEntityChangeHandler=function(e){t.onSelectedEntityChanged&&t.onSelectedEntityChanged(e)},e.selectedEntityChanged.addEventListener(this.selectedEntityChangeHandler),this.toolContext=new Xe(e,t.onNewEntityAdded),this.activateGeometryTool(e,t.geometryToolType),e.scene.requestRender(),t.onViewerMounted&&t.onViewerMounted(t.id,e)}},{key:"externalObjectUnmounted",value:function(e,t){this.cesiumEventHandler&&(this.cesiumEventHandler.destroy(),this.cesiumEventHandler=null),this.selectedEntityChangeHandler&&(e.selectedEntityChanged.removeEventListener(this.selectedEntityChangeHandler),this.selectedEntityChangeHandler=null),this.toolContext&&(this.toolContext.destroy(),this.toolContext=null),t.onViewerUnmounted&&t.onViewerUnmounted(t.id,e)}},{key:"updatePlacemarkSelection",value:function(e,t){var n=t&&Object(Ke.h)(e,t)||null,a=e.selectedEntity||null;this.props.debug&&console.log("CesiumGlobe: updating selected placemark: ",a,n),a!==n&&(e.selectedEntity=n)}},{key:"updatePlacemarks",value:function(e,t,a,r){this.props.debug&&console.log("CesiumGlobe: updating placemarks");var o,i=Ye(t&&t.features||ot,a&&a.features||ot),l=[],c=Object(g.a)(i);try{for(c.s();!(o=c.n()).done;){var s=o.value;this.props.debug&&console.log("CesiumGlobe: next placemark action",s),function(){switch(s.type){case"ADD":var t=s.newElement,a=t.properties.visible,o=Fe.j.load(t,Object(Ke.k)(r));l.push(o.then((function(t){return n.moveEntities(t.entities,e,!Object(v.a)(a)||a),t})));break;case"REMOVE":var i=s.oldElement;e.removeById(i.id);break;case"UPDATE":var c=s.oldElement,u=s.newElement,d=u.properties.visible,p=Fe.j.load(u,Object(Ke.k)(r));l.push(p.then((function(t){return e.removeById(c.id),n.moveEntities(t.entities,e,!Object(v.a)(d)||d),t})));break;default:console.error('CesiumGlobe: unhandled placemark action type "'.concat(s.type,'"'))}}()}}catch(u){c.e(u)}finally{c.f()}return Promise.all(l)}},{key:"updateImageLayers",value:function(e,t,a){this.props.debug&&console.log("CesiumGlobe: updating image layers");var r,o,i,l,c=Ye(t,a),s=Object(g.a)(c);try{for(s.s();!(l=s.n()).done;){var u=l.value;this.props.debug&&console.log("CesiumGlobe: next image layer action",u);var d=u.index+1;switch(u.type){case"ADD":if(!(r=this.addLayer(e,u.newElement,d))){console.error("CesiumGlobe: no imageryLayer at index "+d);break}n.setLayerProps(r,u.newElement);break;case"REMOVE":if(!(r=e.imageryLayers.get(d))){console.error("CesiumGlobe: no imageryLayer at index "+d);break}this.removeLayer(e,r,d);break;case"UPDATE":if(!(r=e.imageryLayers.get(d))){console.error("CesiumGlobe: no imageryLayer at index "+d);break}i=u.oldElement,o=u.newElement,i.imageryProviderOptions.url!==o.imageryProviderOptions.url&&(this.removeLayer(e,r,d),(r=this.addLayer(e,o,d)).minificationFilter=Fe.y.NEAREST,r.magnificationFilter=Fe.x.NEAREST),n.setLayerProps(r,o);break;case"MOVE":if(!(r=e.imageryLayers.get(d))){console.error("CesiumGlobe: no imageryLayer at index "+d);break}if(u.numSteps<0)for(var p=0;p<-u.numSteps;p++)e.imageryLayers.lower(r);else for(var h=0;h<u.numSteps;h++)e.imageryLayers.raise(r);break;default:console.error('CesiumGlobe: unhandled layer action type "'.concat(u.type,'"'))}}}catch(f){s.e(f)}finally{s.f()}}},{key:"updateVectorLayers",value:function(e,t,n,a,r){this.props.debug&&console.log("CesiumGlobe: updating vector layers");var o,i=Ye(t,n),l=Object(g.a)(i);try{for(l.s();!(o=l.n()).done;){var c=o.value;switch(this.props.debug&&console.log("CesiumGlobe: next vector layer action",c),c.type){case"ADD":this.addDataSource(e,c.newElement,a);break;case"REMOVE":this.removeDataSource(e,c.oldElement,a);break;case"UPDATE":this.updateDataSource(e,c.oldElement,c.newElement,a,r);break;case"MOVE":break;default:console.error('CesiumGlobe: unhandled layer action type "'.concat(c.type,'"'))}}}catch(s){l.e(s)}finally{l.f()}}},{key:"addDataSource",value:function(e,t,a){var r=this,o=n.getDataSource(e,t);e.dataSources.add(o).then((function(n){r.props.debug&&console.log("CesiumGlobe: added data source: ".concat(t.name)),a[t.id]=n,r.setDataSourceProps(e,n,t)}))}},{key:"removeDataSource",value:function(e,t,n){var a=n[t.id];a&&(delete n[t.id],e.dataSources.remove(a,!0),this.props.debug&&console.log("CesiumGlobe: removed data source: ".concat(t.name)),e.scene.requestRender())}},{key:"updateDataSource",value:function(e,t,n,a,r){var o=n.id,i=a[o];if(i){var l=t.dataSourceOptions.data,c=n.dataSourceOptions.data;l!==c&&(Object(v.e)(c)?(this.removeDataSource(e,t,a),this.addDataSource(e,n,a)):this.updatePlacemarks(i.entities,l,c,n.style).then((function(){if(r){var t=i.entities.getById(r);t&&t!==e.selectedEntity&&(e.selectedEntity=t)}})));var s=t.style,u=n.style;if(s!==u){var d=Object(Ue.diff)(s,u);if(Object.getOwnPropertyNames(d).length>0){var p=Object(Ke.k)(d,u);Object(Ke.b)(p,i.entities.values)}}var h=t.entityStyles,f=n.entityStyles;if(h!==f){var m,b=Object(Ue.diff)(h,f),y=Object(g.a)(Object.getOwnPropertyNames(b));try{for(y.s();!(m=y.n()).done;){var O=m.value,E=i.entities.getById(O);if(E){var _=b[O];if(Object.getOwnPropertyNames(_).length>0){var C=Object(Ke.k)(_,f[O]);Object(Ke.a)(C,E)}}}}catch(k){y.e(k)}finally{y.f()}}this.setDataSourceProps(e,i,n)}else console.warn("CesiumGlobe: dataSource for vector layer not ready yet, layerId =",o)}},{key:"addLayer",value:function(e,t,a){var r=n.getImageryProvider(e,t),o=e.imageryLayers.addImageryProvider(r,a);return this.props.debug&&console.log("CesiumGlobe: added imagery layer #".concat(a,": ").concat(t.name)),o}},{key:"removeLayer",value:function(e,t,n){e.imageryLayers.remove(t,!0),this.props.debug&&console.log("CesiumGlobe: removed imagery layer #".concat(n))}},{key:"setDataSourceProps",value:function(e,t,n){Promise.resolve(t).then((function(t){t.show=n.visible,e.scene.requestRender()}))}},{key:"activateGeometryTool",value:function(e,t){t!==this.toolContext.tool.type&&("NoTool"===t?this.toolContext.tool=Qe:"PointTool"===t?this.toolContext.tool=new $e:"PolylineTool"===t?this.toolContext.tool=new tt:"PolygonTool"===t?this.toolContext.tool=new nt:"BoxTool"===t&&(this.toolContext.tool=new at))}},{key:"viewer",get:function(){var e=this.getExternalObjectRef();return e?e.object:null}}],[{key:"getStaticNaturalEarthImageryProvider",value:function(){var e={url:Fe.C("")+"Assets/Textures/NaturalEarthII/{z}/{x}/{reverseY}.jpg",tilingScheme:new Fe.k,minimumLevel:0,maximumLevel:2,credit:"Natural Earth II: Tileset Copyright \xa9 2012-2014 Analytical Graphics, Inc. (AGI). Original data courtesy Natural Earth and in the public domain."};return new Fe.z(e)}},{key:"updateOverlayHtml",value:function(e,t,n){if(n)if(t){if(!e.container.contains(t))return void console.warn("CesiumGlobe: previous HTML element is not a child",t);e.container.replaceChild(n,t)}else e.container.appendChild(n);else if(t){if(!e.container.contains(t))return void console.warn("CesiumGlobe: previous HTML element is not a child",t);e.container.removeChild(t)}}},{key:"getImageryProvider",value:function(e,t){return t.imageryProvider?"function"===typeof t.imageryProvider?t.imageryProvider(e,t.imageryProviderOptions):t.imageryProvider:null}},{key:"getDataSource",value:function(e,t){return"function"===typeof t.dataSource?t.dataSource(e,t.dataSourceOptions):t.dataSource}},{key:"setLayerProps",value:function(e,t){e.show=t.visible,e.alpha=t.opacity,e.brightness=t.brightness,e.contrast=t.contrast,e.hue=t.hue,e.saturation=t.saturation,e.gamma=t.gamma,e.minificationFilter=Fe.y.NEAREST,e.magnificationFilter=Fe.x.NEAREST,"left"===t.splitMode?e.splitDirection=Fe.n.LEFT:"right"===t.splitMode?e.splitDirection=Fe.n.RIGHT:e.splitDirection=Fe.n.NONE}},{key:"moveEntities",value:function(e,t,n){var a,r=Object(g.a)(e.values.slice());try{for(r.s();!(a=r.n()).done;){var o=a.value;o.show=n,t.add(o),e.remove(o)}}catch(i){r.e(i)}finally{r.f()}}}]),n}(Ge),lt=n(211),ct=n(45),st=new Set(["POINT","LINESTRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION"]),ut=new Array(st.values()).map((function(e){return'"'.concat(e,'"')})).join(", ");function dt(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"}function pt(e,t){var n=parseFloat(e);if(isNaN(n)&&"nan"!==e.toLowerCase())throw new Error(t||"Value must be a number.");return n}function ht(e,t){if(e&&""!==(e=e.trim())){var n=!1;if(dt(e)){n=!0;for(var a=1;a<e.length&&dt(e[a]);a++);var r=e.substr(0,a).toUpperCase();e=e.substr(a),function(e,t){var n=t.toUpperCase();if("Geometry"===t){if(!st.has(e))throw new Error("".concat(t," WKT must start with one of ").concat(ut,"."))}else if(!e.startsWith(n))throw new Error("".concat(t,' WKT must start with "').concat(n,'".'))}(r,t),function(e,t){var n,a,r;"POINT"===t?(n=0,a=1,r=1):"LINESTRING"===t?(n=1,a=1,r=1):"POLYGON"===t?(n=3,a=2,r=2):"MULTIPOINT"===t?(n=1,a=1,r=2):"MULTILINESTRING"===t?(n=1,a=2,r=2):"MULTIPOLYGON"===t?(n=3,a=3,r=3):"GEOMETRYCOLLECTION"===t&&(n=0,a=1,r=3);for(var o=0,i=0,l=0,c=0;c<e.length;c++){var s=e[c];if("("===s){if(++i>r)throw new Error('Invalid WKT, too many "(".');l=Math.max(l,i)}else if(")"===s){if(--i<0)throw new Error('Invalid WKT, too many ")".');if(0===i){if(o<n)throw new Error("Invalid WKT, too few coordinates.");o=0}}else","===s&&o++}if(0!==i)throw new Error('Invalid WKT, too many "(".');if(l<a)throw new Error('Invalid WKT, too few "(".')}(e,r)}var o,i,l=e.split(/[\s,()]+/);if(l.length&&""===l[0]&&(o=1),l.length&&""===l[l.length-1]&&(i=l.length-1),o>0&&i>0?l=l.slice(o,i):o>0?l=l.slice(o):i>0&&(l=l.slice(0,i)),l.length%2!==0)throw new Error("Illegal number of coordinates.");if(!n)if("Point"===t){if(2!==l.length)throw new Error('Point must have "<Longitude>, <Latitude>" syntax.')}else{if("Polygon"!==t)throw new Error("Invalid WKT.");if(4!==l.length)throw new Error('Bounding box must have "<E>, <S>, <W>, <N>" syntax.')}for(var c=0;c<l.length;c+=2){ft(pt(l[c],"Longitude value must be a number."),pt(l[c+1],"Latitude value must be a number."))}}}function ft(e,t){if(e<-180||e>180)throw new Error("Longitude must be in the range -180 to +180 degrees.");if(t<-90||t>90)throw new Error("Latitude must be in the range -90 to +90 degrees.")}function mt(e){if("Polygon"===e.type&&1===e.coordinates.length){var t=e.coordinates[0];if(5===t.length){var n=t[0][0],a=t[0][1],r=t[1][0],o=t[1][1],i=t[2][0],l=t[2][1],c=t[3][0],s=t[3][1],u=t[4][0],d=t[4][1];return 0===r-n&&0===l-o&&0===c-i&&0===d-s||0===o-a&&0===i-r&&0===s-l&&0===u-c}}return!1}function bt(e){if("Point"===e.type){var t=e.coordinates;return"POINT (".concat(t[0]," ").concat(t[1],")")}if("LineString"===e.type){var n,a=e.coordinates,r=[],o=Object(g.a)(a);try{for(o.s();!(n=o.n()).done;){var i=n.value;r.push("".concat(i[0]," ").concat(i[1]))}}catch(b){o.e(b)}finally{o.f()}return"LINESTRING (".concat(r.join(", "),")")}if("Polygon"===e.type){var l,c=e.coordinates,s=[],u=Object(g.a)(c);try{for(u.s();!(l=u.n()).done;){var d,p=l.value,h=[],f=Object(g.a)(p);try{for(f.s();!(d=f.n()).done;){var m=d.value;h.push("".concat(m[0]," ").concat(m[1]))}}catch(b){f.e(b)}finally{f.f()}s.push("(".concat(h.join(", "),")"))}}catch(b){u.e(b)}finally{u.f()}return"POLYGON (".concat(s.join(", "),")")}return""}var vt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).intervalHandle=void 0,a.lastPosition=void 0,a.positionChanged=void 0,a.intervalHandle=null,a.lastPosition=null,a.positionChanged=!1,a.handleMouseMove=a.handleMouseMove.bind(Object(ie.a)(a)),a.handleSelectedEntityChanged=a.handleSelectedEntityChanged.bind(Object(ie.a)(a)),a.handleNewEntityAdded=a.handleNewEntityAdded.bind(Object(ie.a)(a)),a.handleSplitLayerPosChange=a.handleSplitLayerPosChange.bind(Object(ie.a)(a)),a.handlePosDataUpdate=a.handlePosDataUpdate.bind(Object(ie.a)(a)),a.renderContextMenu=a.renderContextMenu.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentDidMount",value:function(){this.intervalHandle=window.setInterval(this.handlePosDataUpdate,n.POS_UPDATE_PERIOD)}},{key:"componentWillUnmount",value:function(){window.clearInterval(this.intervalHandle)}},{key:"handlePosDataUpdate",value:function(){this.positionChanged&&(this.props.dispatch(c.wc(this.lastPosition)),this.positionChanged=!1)}},{key:"handleMouseMove",value:function(e){var t=this.lastPosition;e!==t&&(e&&t&&e.longitude===t.longitude&&e.latitude===t.latitude||(this.props.dispatch(c.vc(e)),this.lastPosition=e,this.positionChanged=!0))}},{key:"handleSelectedEntityChanged",value:function(e){this.props.dispatch(c.cc(this.props.view.id,this.props.selectedLayer,e))}},{key:"handleNewEntityAdded",value:function(e){var t=this.newPlacemarkProperties(),n=Object(Ke.e)(e,"".concat(B.i).concat(e.id),t);this.props.dispatch(c.wb(n))}},{key:"handleSplitLayerPosChange",value:function(e){this.props.dispatch(c.yc(this.props.view.id,e))}},{key:"renderContextMenu",value:function(e,t,n){var r=this;if(!e&&!n)return null;var o,i,l=n&&n.id;l&&l.startsWith(B.i)&&this.props.placemarks&&(o=this.props.placemarks.features.find((function(e){return e.id===l}))),o?i=bt(o.geometry):n?i=Object(Ke.f)(n):e&&(i="POINT (".concat(e.longitude," ").concat(e.latitude,")"));var u=0,d=[];if(e){var p=this.newPlacemarkProperties(),h=c.xb(e.longitude,e.latitude,p);d.push(a.createElement(ue.MenuItem,{key:u,icon:"map-marker",text:"Place point marker here",onClick:function(){return r.props.dispatch(h)}})),u++}i&&(d.push(a.createElement(ue.MenuItem,{key:u,icon:"clipboard",text:"Copy geometry WKT",onClick:function(){return c.Hb(i)}})),u++);var f,m=this.props.operations;if(n&&m&&(i.startsWith("POINT ")?f=ct.p:i.startsWith("POLYGON ")&&(f=ct.q),f)){var b,v=!1,y=Object(g.a)(m);try{for(y.s();!(b=y.n()).done;){var O,E=b.value,_=void 0,C=Object(g.a)(E.inputs);try{for(C.s();!(O=C.n()).done;){var k=O.value,w=k.dataType;if(w===f||w===ct.l){_=k;break}}}catch(S){C.e(S)}finally{C.f()}_&&function(){v||(d.push(a.createElement(ue.MenuDivider,{key:u})),v=!0,u++);var e=Object(s.a)({},_.name,{isValueUsed:!0,constantValue:i,resourceName:null}),t=c.Sb(E,e),n="".concat(E.name,"()");d.push(a.createElement(ue.MenuItem,{key:u,icon:"function",text:n,onClick:function(){return r.props.dispatch(t)}})),u++}()}}catch(S){y.e(S)}finally{y.f()}}return a.createElement(ue.Menu,null,d)}},{key:"newPlacemarkProperties",value:function(){return Object(d.a)({visible:!0},Object(m.b)(this.props.defaultPlacemarkStyle))}},{key:"render",value:function(){if(!this.props.hasWebGL)return Te;var e,t=this.props.view,r=this.props.view.id,o=t.data.layers,i=this.props.placemarks,l=this.props.showLayerTextOverlay,c=this.props.workspace,s=c&&c.resources||Oe.a,u=null;if(c){var d=this.props.baseUrl,p=Object(B.N)(c);e=Object(lt.a)(o,s,i,d,p),u=this.props.selectedPlacemarkId}else e=Oe.b;var h,f=e.imageLayerDescriptors||Oe.a,m=e.vectorLayerDescriptors||Oe.a;(function(e){var t,n=Object(g.a)(e);try{for(n.s();!(t=n.n()).done;){if((t.value.splitMode||V.b)!==V.b)return!0}}catch(a){n.e(a)}finally{n.f()}return!1})(f)&&(h=t.data.layerSplitPosition);var b=function(e,t,n,a){var r=null;if(!t)return r;for(var o=0;o<e.length;o++){var i=e[o];if("VariableImage"===i.type&&i.visible){var l=Object(B.v)(a,i);r||((r=document.createElement("div")).id="CesiumGlobeOverlay-"+n,r.style.position="absolute",r.style["z-index"]=10,r.style["pointer-events"]="none",r.style.padding="1em",r.style["background-color"]="rgba(0, 0, 0, 0.25)");var c=void 0;c=l&&l.length?i.name+" at "+l.map((function(e){return e.join(" = ")})).join(", "):i.name;var s=document.createElement("div");s.style["font-size"]="1.4em",s.innerText=c,r.appendChild(s),r.style.top="0",r.style.width="100%"}}return r}(o,l,r,s);return a.createElement(it,{id:"CesiumGlobe-"+t.id,debug:this.props.debugWorldView,externalObjectStore:this.props.externalObjectStore,selectedPlacemarkId:u,baseMapOptions:this.props.baseMapOptions,imageLayerDescriptors:f,vectorLayerDescriptors:m,splitLayerPosition:h,overlayHtml:b,onLayerSplitPosChange:this.handleSplitLayerPosChange,offlineMode:this.props.offlineMode,style:n.CESIUM_GLOBE_STYLE,onMouseMove:this.props.isDialogOpen?null:this.handleMouseMove,onSelectedEntityChanged:this.handleSelectedEntityChanged,onNewEntityAdded:this.handleNewEntityAdded,geometryToolType:this.props.newPlacemarkToolType,renderContextMenu:this.renderContextMenu})}}]),n}(a.Component);vt.CESIUM_GLOBE_STYLE={position:"relative",width:"100%",height:"100%",overflow:"hidden"},vt.POS_UPDATE_PERIOD=500;var yt=Object(o.b)((function(e,t){return{view:t.view,baseUrl:Oe.fc(e),operations:Oe.T(e),workspace:Oe.oc(e),offlineMode:Oe.P(e),placemarks:Oe.W(e),selectedLayer:Oe.rb(e),selectedLayerId:Oe.pb(e),selectedPlacemarkId:Oe.xb(e),baseMapOptions:Oe.k(e),isDialogOpen:Oe.H(e),showLayerTextOverlay:e.session.showLayerTextOverlay,debugWorldView:e.session.debugWorldView,hasWebGL:e.data.hasWebGL,externalObjectStore:Oe.y(e),newPlacemarkToolType:Oe.O(e),defaultPlacemarkStyle:Oe.w(e)}}))(vt);var gt=function(){function e(){Object(re.a)(this,e),this.listenersMap=void 0,this.listenersMap={},this.dispatchCommand=this.dispatchCommand.bind(this)}return Object(oe.a)(e,[{key:"addCommandListener",value:function(e,t){var n=this.listenersMap[e];n||(n=new Set,this.listenersMap[e]=n),n.add(t)}},{key:"removeCommandListener",value:function(e,t){var n=this.listenersMap[e];n&&(n.delete(t),0===n.size&&delete this.listenersMap[e])}},{key:"removeCommandListeners",value:function(e){delete this.listenersMap[e]}},{key:"dispatchCommand",value:function(e,t){var n=this.listenersMap[e];n&&n.forEach((function(n){n(e,t)}))}}]),e}(),Ot=function(){function e(t,n,a,r,o){var i=this;Object(re.a)(this,e),this.id=void 0,this.webSocket=void 0,this.commandSource=void 0,this.onMessage=void 0,this.parentElement=void 0,this.figureImageCanvas=void 0,this.rubberBandCanvas=void 0,this.imageObj=void 0,this.imageMode=void 0,this.waiting=void 0,this.lastKey=void 0,this.resizeTimer=void 0,this.lastSize=void 0,this.id=t,this.parentElement=a,this.commandSource=r,this.onMessage=o,this.imageMode="full",this.imageObj=new Image,this.lastSize={width:0,height:0},this.handleCommand=this.handleCommand.bind(this),this.processMessage=this.processMessage.bind(this),this.initCanvas(),this.waiting=!1,this.imageObj.onload=function(){var e=i.figureImageCanvas.getContext("2d");"full"===i.imageMode&&e.clearRect(0,0,i.figureImageCanvas.width,i.figureImageCanvas.height),e.drawImage(i.imageObj,0,0)},this.imageObj.onunload=function(){this.webSocket.removeEventListener("message",this.processMessage)},this.webSocket=new WebSocket(n),this.webSocket.onopen=function(){i.commandSource&&i.commandSource.addCommandListener(i.id,i.handleCommand),i.webSocket.addEventListener("message",i.processMessage);var e=!!i.webSocket.binaryType;e||console.warn("This browser does not support binary websocket messages. Figure update performance may be slow."),i.sendMessage("supports_binary",{value:e}),i.sendMessage("send_image_mode"),i.sendRefresh(),i.sendResize(),i.resizeTimer=window.setInterval((function(){var e=i.parentElement.clientWidth,t=i.parentElement.clientHeight,n=e>0&&t>0,a=i.lastSize.width!==e||i.lastSize.height!==t;n&&a&&(i.lastSize={width:e,height:t},i.sendResize(e,t))}),500)},this.webSocket.onclose=function(){i.commandSource&&i.commandSource.removeCommandListener(i.id,i.handleCommand),i.resizeTimer&&window.clearInterval(i.resizeTimer)}}return Object(oe.a)(e,[{key:"handleCommand",value:function(e,t){e===this.id?this.sendMessage("toolbar_button",t):console.warn("received invalid figure ID: expected #".concat(this.id,", got #").concat(e," for data ").concat(t))}},{key:"initCanvas",value:function(){var e=this,t=this.handleKeyboardEvent.bind(this);this.parentElement.onkeydown=Et("key_press",t),this.parentElement.onkeyup=Et("key_release",t),this.parentElement.onwheel=function(t){var n=t.deltaY<0?1:-1;e.handleMouseEvent(t,{name:"scroll",step:n})};var n=document.createElement("canvas");n.id="mpl-figure-image-"+this.id,n.setAttribute("style","left: 0; top: 0; z-index: 0; outline: 0"),this.figureImageCanvas=n;var a=document.createElement("canvas");a.id="mpl-rubber-band-"+this.id,a.setAttribute("style","position: absolute; left: 0; top: 0; z-index: 1;");var r=this.handleMouseEvent.bind(this);a.onmousedown=Et("button_press",r),a.onmouseup=Et("button_release",r),a.onmousemove=Et("motion_notify",r),a.onmouseenter=Et("figure_enter",r),a.onmouseleave=Et("figure_leave",r),a.getContext("2d").strokeStyle="#000000",this.rubberBandCanvas=a,this.parentElement.appendChild(n),this.parentElement.appendChild(a)}},{key:"resizeCanvas",value:function(e,t){this.figureImageCanvas.setAttribute("width",e),this.figureImageCanvas.setAttribute("height",t),this.rubberBandCanvas.setAttribute("width",e),this.rubberBandCanvas.setAttribute("height",t)}},{key:"sendResize",value:function(e,t){e=e||this.parentElement.clientWidth,t=t||this.parentElement.clientHeight,this.sendMessage("resize",{width:e,height:t})}},{key:"sendDrawMessage",value:function(){this.waiting||(this.waiting=!0,this.sendMessage("draw"))}},{key:"sendRefresh",value:function(){this.sendMessage("refresh")}},{key:"sendCanvasUpdated",value:function(){this.sendMessage("ack")}},{key:"sendMessage",value:function(e,t){var n=JSON.stringify(Object(d.a)(Object(d.a)({},t),{},{type:e,figure_id:this.id}));this.webSocket.send(n)}},{key:"processMessage",value:function(e){if(e.data instanceof Blob){var t=e.data;return this.imageObj.src&&(window.URL||window.webkitURL).revokeObjectURL(this.imageObj.src),this.imageObj.src=(window.URL||window.webkitURL).createObjectURL(t),this.sendCanvasUpdated(),void(this.waiting=!1)}if("string"===typeof e.data&&"data:image/png;base64"===e.data.slice(0,21))return this.imageObj.src=e.data,this.sendCanvasUpdated(),void(this.waiting=!1);var n=e.data,a=JSON.parse(n),r=a.type;try{var o=this["handle_"+r];if(o)try{o.bind(this)(a)}catch(i){console.error("Exception inside the 'handler_"+r+"' callback:",i,i.stack,a)}}catch(i){console.error("No handler for the '"+r+"' message type: ",a)}}},{key:"handle_resize",value:function(e){var t=e.size;t[0]===this.figureImageCanvas.width&&t[1]===this.figureImageCanvas.height||(this.resizeCanvas(t[0],t[1]),this.sendRefresh())}},{key:"handle_rubberband",value:function(e){var t=e.x0,n=this.figureImageCanvas.height-e.y0,a=e.x1,r=this.figureImageCanvas.height-e.y1;t=Math.floor(t)+.5,n=Math.floor(n)+.5,a=Math.floor(a)+.5,r=Math.floor(r)+.5;var o=Math.min(t,a),i=Math.min(n,r),l=Math.abs(a-t),c=Math.abs(r-n),s=this.rubberBandCanvas.getContext("2d");s.clearRect(0,0,this.figureImageCanvas.width,this.figureImageCanvas.height),s.strokeRect(o,i,l,c)}},{key:"handle_figure_label",value:function(e){}},{key:"handle_message",value:function(e){this.onMessage&&this.onMessage(e.message)}},{key:"handle_cursor",value:function(e){var t=e.cursor;this.rubberBandCanvas.style.cursor={0:"pointer",1:"default",2:"crosshair",3:"move"}[t]}},{key:"handle_draw",value:function(){this.sendDrawMessage()}},{key:"handle_image_mode",value:function(e){this.imageMode=e.mode}},{key:"handleMouseEvent",value:function(e,t){var n=t.name,a=t.step,r=function(e){var t;e.target?t=e.target:e.srcElement&&(t=e.srcElement);3===t.nodeType&&(t=t.parentNode);var n=document.body.getBoundingClientRect(),a=t.getBoundingClientRect(),r=a.left-n.left,o=a.top-n.top,i=e.pageX-r,l=e.pageY-o;return{x:i,y:l}}(e);"button_press"===n&&(this.figureImageCanvas.focus(),this.parentElement.focus());var o=r.x,i=r.y;return this.sendMessage(n,{x:o,y:i,button:e.button,step:a,guiEvent:_t(e)}),e.preventDefault(),!1}},{key:"handleKeyboardEvent",value:function(e,t){var n=t.name;if("key_press"===n){if(e.which===this.lastKey)return;this.lastKey=e.which}"key_release"===n&&(this.lastKey=null);var a="";e.ctrlKey&&17!==e.which&&(a+="ctrl+"),e.altKey&&18!==e.which&&(a+="alt+"),e.shiftKey&&16!==e.which&&(a+="shift+"),a+="k",a+=e.which.toString(),this.sendMessage(n,{key:a,guiEvent:_t(e)})}}]),e}();function Et(e,t){return function(n){t(n,{name:e})}}function _t(e){return Object.keys(e).reduce((function(t,n){return"object"!==typeof e[n]&&(t[n]=e[n]),t}),{})}var Ct=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"propsToExternalObjectState",value:function(e,t){return{figureUpdateCount:e.figureUpdateCount}}},{key:"newContainer",value:function(e){var t=document.createElement("div");return t.setAttribute("id","mpl-figure-container-"+e),t.setAttribute("style","width: 100%; position: relative;"),this.props.figureHeight&&(t.style.height=this.props.figureHeight),this.props.debug&&console.log("MplFigureContainer.newContainer:",t),t}},{key:"newExternalObject",value:function(e,t){return new Ot(this.props.figureId,this.props.webSocketUrl,t,this.props.commandSource,this.props.onMessage)}},{key:"updateExternalObject",value:function(e,t,n,a,r){this.props.debug&&console.log("MplFigureContainer.updateExternalObject: ",e,t,n),t&&t.figureUpdateCount!==n.figureUpdateCount&&(e.sendRefresh(),e.sendResize())}}]),n}(Ge);function kt(e){var t;e.large||(t="bp3-small"),e.className&&""!==e.className&&(t="".concat(t," ").concat(e.className));var n=a.createElement(ue.AnchorButton,{className:t,onClick:e.onClick,disabled:e.disabled,icon:e.icon,intent:e.intent,style:e.style,text:e.text,active:e.active});return e.tooltipContent?a.createElement(ue.Tooltip,{content:e.tooltipContent,position:e.tooltipPosition||ue.PopoverPosition.AUTO},n):n}var wt=new gt,St=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).state={},a.handleFigureMessage=a.handleFigureMessage.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleFigureMessage",value:function(e){this.setState({message:e})}},{key:"render",value:function(){return a.createElement("div",{style:n.DIV_STYLE},a.createElement(Ct,{figureId:this.props.figureId,figureUpdateCount:this.props.figureUpdateCount,figureHeight:this.props.figureHeight||"30em",id:this.props.id,debug:!1,webSocketUrl:this.props.webSocketUrl,style:n.CONTAINER_DIV_STYLE,commandSource:wt,onMessage:this.handleFigureMessage}),a.createElement(jt,{figureId:this.props.figureId,message:this.state.message,onCommand:wt.dispatchCommand,onDownload:this.props.onDownload}))}}],[{key:"handleClose",value:function(e){wt.removeCommandListeners(e)}}]),n}(a.Component);St.DIV_STYLE={width:"100%",overflow:"auto"},St.CONTAINER_DIV_STYLE={width:"100%",overflow:"hidden",padding:"0.2em 0.2em 0 0.2em"};var jt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;Object(re.a)(this,n),(a=t.call(this,e)).commands=void 0,a.commands=[{label:"Home",tooltip:"Reset original view",icon:"home",name:"home"},{label:"Back",tooltip:"Back to previous view",icon:"chevron-left",name:"back"},{label:"Forward",tooltip:"Forward to next view",icon:"chevron-right",name:"forward"},{label:"Pan",tooltip:"Pan axes with left mouse, zoom with right",icon:"move",name:"pan"},{label:"Zoom",tooltip:"Zoom to rectangle",icon:"zoom-in",name:"zoom"},{label:"Save As",tooltip:"Save as image",icon:"download",name:"download"}];var r,o=Object(g.a)(a.commands);try{var i=function(){var e=r.value,t=e.name,n=void 0;n="download"===t?function(){a.props.onDownload(a.props.figureId,{name:t})}:function(){a.props.onCommand(a.props.figureId,{name:t})},e.callback=n};for(o.s();!(r=o.n()).done;)i()}catch(l){o.e(l)}finally{o.f()}return a}return Object(oe.a)(n,[{key:"render",value:function(){var e,t=[];for(var r in this.commands){var o=this.commands[r];if(o.name){var i=o.tooltip,l=o.icon,c=o.callback;t.push(a.createElement(kt,{key:r,tooltipContent:i,icon:l,onClick:c}))}}return this.props.message&&(e=a.createElement(ue.Tag,{className:"bp3-minimal"},this.props.message)),a.createElement("div",{style:n.DIV_STYLE},e,a.createElement("span",{style:{flex:"auto"}}),a.createElement(ue.ButtonGroup,null,t))}}]),n}(a.PureComponent);jt.DIV_STYLE={display:"flex",alignItems:"center",padding:"0.2em"};var It=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onDownload=a.onDownload.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onDownload",value:function(e){var t=Object(B.I)(this.props.baseUrl,this.props.workspaceId,e);this.props.dispatch(c.nc(t,e))}},{key:"render",value:function(){var e=this.props.view,t=this.props.workspaceId,n=this.getFigureResource();if(null===t||!n)return a.createElement(ue.Card,null,"Figure not found.");var r="MplFigurePanel-".concat(n.id,"-").concat(e.id);return a.createElement(St,{key:r,id:r,figureId:n.id,figureUpdateCount:n.updateCount,figureName:n.name,webSocketUrl:Object(B.J)(this.props.mplWebSocketUrl,t,n.id),onDownload:this.onDownload})}},{key:"getFigureResource",value:function(){var e=this.props.view.data;return this.props.figureResources.find((function(t){return t.id===e.resourceId}))}}]),n}(a.Component);It.DIV_STYLE={width:"100%",height:"100%",overflowX:"hidden",overflowY:"auto"};var Pt=Object(o.b)((function(e,t){return{view:t.view,baseUrl:Oe.fc(e),workspaceId:Oe.mc(e),figureResources:Oe.z(e),mplWebSocketUrl:Oe.N(e)}}))(It),Dt=n(41),Lt=n(209);var Tt=Object(o.b)((function(e){return{webAPIServiceInfo:Oe.gc(e),webAPIServiceURL:Oe.hc(e)}}))((function(e){var t=e.webAPIServiceInfo,n=e.webAPIServiceURL;if(!t)return null;var r=t.autoStopInfo;if(!r)return null;var o=r.availableTime,i=r.remainingTime,l=r.inactivityTime;if(!o||!i||!l)return null;var c=Math.max(900,.75*o);if(!(i>1&&i<c))return null;var s=function(){try{(new Lt.a).getServiceInfo(n)}catch(e){console.error(e)}};return a.createElement(Dt.a,{isOpen:!0,title:"Service Shutdown Ahead",icon:"offline",noCancelButton:!0,confirmTitle:"Keep Alive",confirmIconName:"link",confirmTooltip:"Requests keeping the service available.",onCancel:s,onConfirm:s,canConfirm:function(){return!0},renderBody:function(){return a.createElement("div",null,a.createElement("p",null,"The Cate service will shut down soon due to inactivity since ",At(l),". After the shutdown you will need to reconnect/login first. Unsaved changes will be lost."),a.createElement("p",null,"The remaining time is ",a.createElement("strong",null,At(i)),"."),a.createElement("p",null,'Press "Keep Alive" to prevent the shutdown.'))}})}));function At(e){var t=Math.floor(e/3600),n=e-3600*t,a=Math.floor(n/60),r=Math.round(n-60*a),o=[];return t>0&&o.push("".concat(t," hour").concat(1!==t?"s":"")),a>0&&o.push("".concat(a," minute").concat(1!==a?"s":"")),o.push("".concat(r," second").concat(1!==r?"s":"")),o.join(", ")}var Nt=n(37);var Rt=Object(o.b)((function(e){return{isOpen:Oe.x("shutdownDialog")(e).isOpen,webAPIServiceURL:Oe.hc(e)}}))((function(e){var t=e.isOpen,n=e.webAPIServiceURL,r=e.dispatch,o=a.useState(!1),i=Object(te.a)(o,2),l=i[0],s=i[1];if(!t)return null;return a.createElement(Dt.a,{isOpen:!0,title:"Service Shutdown",icon:"offline",noCancelButton:!1,confirmTitle:"Shutdown",confirmIconName:"offline",canConfirm:function(){return!l},onConfirm:function(){try{s(!0),(new Nt.i).shutdown(n).then((function(){r(Object(c.Qb)())}))}catch(e){s(!1)}},onCancel:function(){r(Object(c.Qb)())},renderBody:function(){return a.createElement("p",null,"This will shut down the Cate service. Unsaved changes will be lost.")}})})),xt=n(159),Mt=n(403),Vt=n(782);var Bt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"componentWillMount",value:function(){var e=this.props.viewData;e.dataRows||e.isLoading||e.error||this.props.dispatch(c.Vb(this.props.viewId,e.resName,e.varName))}},{key:"render",value:function(){return a.createElement("div",{style:n.TABLE_CONTAINER_STYLE},this.renderDataTable())}},{key:"renderDataTable",value:function(){var e,t=this.props.viewData;if(f.a(t),t.isLoading)return a.createElement("div",{style:n.LOADING_CONTAINER_STYLE},a.createElement(ue.Spinner,{className:"bp3-large"}),a.createElement("p",null,"Loading table data..."));if(t.error)return e=t.error,a.createElement(ue.NonIdealState,{title:"Loading table data failed",description:a.createElement("span",null,"".concat(e)),icon:"circle"});var r=t.dataRows;if(!r||!r.length)return We;var o=r[0],i=Object.getOwnPropertyNames(o).filter((function(e){return""!==e})),l=function(e,t){return r[e][i[t]]},c=[];for(var s in i){c.push(a.createElement(Mt.a,{key:s,name:i[s],cellRenderer:function(e,t){return a.createElement(xt.a,null,l(e,t))}}))}return a.createElement(Vt.a,{numRows:r.length,enableRowHeader:!0,getCellClipboardData:l,children:c})}}]),n}(a.PureComponent);Bt.TABLE_CONTAINER_STYLE={width:"100%",height:"100%",overflow:"hidden",display:"flex",flexDirection:"column"},Bt.LOADING_CONTAINER_STYLE={width:"100%",height:"100%",overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"};var Wt=Object(o.b)((function(e,t){return{viewId:t.view.id,viewData:t.view.data,resources:Oe.bb(e),resNames:Oe.ab(e)}}))(Bt),Ft=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;if(Object(re.a)(this,n),(a=t.call(this,e)).lastPosition=null,a.bodyEventListeners=void 0,!e.onChange)throw Error("onChange property must be provided");return a.bodyEventListeners=[["mousemove",a.onBodyMouseMove.bind(Object(ie.a)(a))],["mouseup",a.onBodyMouseUp.bind(Object(ie.a)(a))],["onmouseenter",a.onBodyMouseEnter.bind(Object(ie.a)(a))],["onmouseleave",a.onBodyMouseLeave.bind(Object(ie.a)(a))]],a}return Object(oe.a)(n,[{key:"onMouseDown",value:function(e){this.isButton1Pressed(e)?(this.lastPosition=this.getCurrentPosition(e),this.removeBodyMouseListeners(),this.addBodyMouseListeners()):this.lastPosition=null}},{key:"onBodyMouseMove",value:function(e){if(null!==this.lastPosition&&this.isButton1Pressed(e)){var t=this.getCurrentPosition(e),n=t-this.lastPosition;this.lastPosition=t,0!==n&&this.props.onChange(n)}}},{key:"onBodyMouseUp",value:function(e){this.endDragging()}},{key:"onBodyMouseEnter",value:function(e){this.endDragging()}},{key:"onBodyMouseLeave",value:function(e){this.endDragging()}},{key:"isButton1Pressed",value:function(e){return 0===e.button&&1===e.buttons}},{key:"getCurrentPosition",value:function(e){return"hor"===this.props.dir?e.screenX:e.screenY}},{key:"endDragging",value:function(){this.removeBodyMouseListeners(),this.lastPosition=null}},{key:"addBodyMouseListeners",value:function(){this.bodyEventListeners.forEach((function(e){return document.body.addEventListener(e[0],e[1])}))}},{key:"removeBodyMouseListeners",value:function(){this.bodyEventListeners.forEach((function(e){return document.body.removeEventListener(e[0],e[1])}))}},{key:"componentWillUnmount",value:function(){this.removeBodyMouseListeners()}},{key:"render",value:function(){var e="hor"===this.props.dir?"cate-splitter-hor":"cate-splitter-ver";return a.createElement("div",{className:e,onMouseDown:this.onMouseDown.bind(this)})}}]),n}(a.PureComponent),Ut=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleSplitDelta=a.handleSplitDelta.bind(Object(ie.a)(a)),a.state={size:e.initialSize},a}return Object(oe.a)(n,[{key:"handleSplitDelta",value:function(e){var t=this;this.setState((function(n){var a=n.size,r=a+e;return t.props.onChange&&t.props.onChange(r,a),{size:r}}))}},{key:"render",value:function(){var e,t,n;if("hor"===this.props.dir){var r=this.state.size;e="cate-split-pane-hor",t={flex:"none",width:r,height:"100%"},n={flex:"auto",width:"calc(100% - ".concat(r+4,"px)"),height:"100%"}}else{var o=this.state.size;e="cate-split-pane-ver",t={flex:"none",width:"100%",height:o},n={flex:"auto",width:"100%",height:"calc(100% - ".concat(o+4,"px)")}}return a.createElement("div",{className:e},a.createElement("div",{style:t},this.props.children[0]),a.createElement(Ft,{dir:this.props.dir,onChange:this.handleSplitDelta}),a.createElement("div",{style:n},this.props.children[1]))}}]),n}(a.PureComponent),Gt=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleSwitchChange=a.handleSwitchChange.bind(Object(ie.a)(a)),a.handleContentHeightChange=a.handleContentHeightChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleSwitchChange",value:function(e){this.props.onShowDetailsChange(e.target.checked)}},{key:"handleContentHeightChange",value:function(e,t){this.props.onContentHeightChange&&this.props.onContentHeightChange(e)}},{key:"render",value:function(){var e,t=this.props.children[0],n=this.props.children[1],r=a.createElement(ue.Switch,{checked:this.props.showDetails,style:{alignSelf:"flex-end",marginBottom:0},label:"Details",disabled:!n,onChange:this.handleSwitchChange}),o=this.props.showDetails?n:null;e=this.props.actionComponent?a.createElement("div",{style:{display:"flex",alignItems:"flex-end"}},r,a.createElement("span",{style:{flex:"auto"}}),this.props.actionComponent):r;var i=a.createElement("div",null,e,o);return this.props.isSplitPanel?a.createElement(Ut,{dir:"ver",initialSize:this.props.contentHeight||300,onChange:this.handleContentHeightChange},t,i):a.createElement("div",null,t,i)}}]),n}(a.PureComponent),Yt=n(157),Ht=function(e){var t=e.dataSource,n=e.style,r=Object(B.y)(t),o=r.catalogUrl,i=r.infoUrl;return o||i?a.createElement("div",{style:Object(d.a)({display:"flex",justifyContent:"flex-end"},n)},o&&a.createElement(ue.AnchorButton,{href:o,target:"_blank",style:{float:"right",margin:4}},"Catalogue"),i&&a.createElement(ue.AnchorButton,{href:i,target:"_blank",style:{float:"right",margin:4}},"More Info")):null},Kt=n(93),zt=n(404),qt=n.n(zt),Jt=n(405),Xt=n.n(Jt),Zt={fontFamily:"Source Code Pro, Consolas, monospace",color:ue.Colors.LIGHT_GRAY1},Qt={em:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("em",Object.assign({className:"user-selectable"},t))},li:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("li",Object.assign({className:"user-selectable"},t))},p:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("p",Object.assign({className:"user-selectable"},t))},span:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("span",Object.assign({className:"user-selectable"},t))},div:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("div",Object.assign({className:"user-selectable"},t))},code:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("code",Object.assign({className:"user-selectable",style:Zt},t))},pre:function(e){e.node;var t=Object(Kt.a)(e,["node"]);return a.createElement("pre",Object.assign({className:"user-selectable",style:Zt},t))}},$t=function(e){var t=e.source;return a.createElement(qt.a,{remarkPlugins:[Xt.a],components:Qt,linkTarget:"_blank"},t)},en={width:"100%",height:"100%",overflow:"auto"};function tn(e){return a.createElement("div",{style:en},e.children)}var nn={display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"space-around"},an=function(e){var t,n,r=e.dataSource;if(!r)return null;var o=r.metaInfo;o&&(t=Object.keys(o).filter((function(e){return"data_vars"!==e&&"coords"!==e})),o.data_vars&&(n=o.data_vars));var i=[rn(r),on(n),ln(o,t),cn(o)];return a.createElement(ue.Tabs,{id:"dsDetails",renderActiveTabPanelOnly:!0},i.map((function(e){return a.createElement(ue.Tab,{key:e.id,id:e.id,title:e.title,panel:e.element})})))};function rn(e){var t,n,r,o=e.metaInfo;if(o){if(Array.isArray(o.bbox)){var i=Object(te.a)(o.bbox,4),l=i[0],c=i[1],s=i[2],u=i[3];t=a.createElement("div",null,a.createElement("h5",null,"Spatial coverage"),a.createElement("table",null,a.createElement("tbody",null,a.createElement("tr",null,a.createElement("td",null),a.createElement("td",{className:"user-selectable"},u,"\xb0"),a.createElement("td",null)),a.createElement("tr",null,a.createElement("td",{className:"user-selectable"},l,"\xb0"),a.createElement("td",null),a.createElement("td",{className:"user-selectable"},s,"\xb0")),a.createElement("tr",null,a.createElement("td",null),a.createElement("td",{className:"user-selectable"},c,"\xb0"),a.createElement("td",null)))),a.createElement("br",null))}if(e.metaInfo&&e.metaInfo.time_range){var d=Object(te.a)(e.metaInfo.time_range,2),p=d[0],h=d[1];p||h?p?h||(h="today"):p="unknown":p=h="unknown",n=a.createElement("div",null,a.createElement("h5",null,"Temporal coverage"),a.createElement("table",null,a.createElement("tbody",null,a.createElement("tr",null,a.createElement("td",null,"Start"),a.createElement("td",{className:"user-selectable"},p)),a.createElement("tr",null,a.createElement("td",null,"End"),a.createElement("td",{className:"user-selectable"},h)))),a.createElement("br",null))}o.abstract&&(r=a.createElement("div",null,a.createElement("h5",null,"Summary"),a.createElement($t,{source:o.abstract})))}return{title:"Abstract",id:"abstract",element:t||n||r?a.createElement(tn,null,a.createElement(ue.Card,null,a.createElement(Ht,{dataSource:e}),a.createElement("div",{style:nn},t,n),r)):a.createElement(ue.Card,null,a.createElement(Ht,{dataSource:e}),a.createElement("p",null,"No abstract available."))}}function on(e){var t;if(e&&e.length>0){t=a.createElement(Vt.a,{numRows:e.length,enableRowHeader:!1,getCellClipboardData:function(e,t){console.error("not implemented: getCellClipboardData: ",e,t)}},a.createElement(Mt.a,{name:"Name",cellRenderer:function(t){var n=e[t];return a.createElement(xt.a,{tooltip:n.long_name},a.createElement(Yt.a,{className:"user-selectable"},n.name))}}),a.createElement(Mt.a,{name:"Units",cellRenderer:function(t){var n=e[t];return a.createElement(xt.a,null,a.createElement(Yt.a,{className:"user-selectable"},n.units||"-"))}}))}else t=a.createElement(ue.Card,null,"No information about variables available.");return{title:"Variables",id:"var",element:t}}function ln(e,t){var n;if(e&&t){n=a.createElement(Vt.a,{numRows:t.length,enableRowHeader:!1,getCellClipboardData:function(e,t){console.error("not implemented: getCellClipboardData: ",e,t)}},a.createElement(Mt.a,{name:"Key",cellRenderer:function(e){var n=t[e];return a.createElement(xt.a,null,a.createElement(Yt.a,null,n))}}),a.createElement(Mt.a,{name:"Value",cellRenderer:function(n){var r=t[n];return a.createElement(xt.a,null,a.createElement(Yt.a,null,e[r]))}}))}else n=a.createElement(ue.Card,null,"No global meta-information available.");return{title:"Meta-Info",id:"meta",element:n}}function cn(e){return{title:"Licences",id:"licences",element:e&&e.licences?a.createElement("div",null,a.createElement($t,{source:e.licences})):a.createElement(ue.Card,null,"No license information available.")}}var sn=n(406),un={display:"flex",alignItems:"flex-start"},dn={color:ue.Colors.BLUE5,fontSize:"0.8em"},pn={marginRight:4},hn={color:ue.Colors.GREEN4,fontSize:"0.8em",marginLeft:4},fn={width:32,height:32,flex:"none",marginRight:6,borderRadius:16,textAlign:"center",color:"white",display:"flex",justifyContent:"center",alignItems:"center"},mn=function(e){var t,n,r=e.dataSource,o=e.showDataSourceIDs,i=r.metaInfo,l=function(e){var t,n,a=e.id.toLowerCase();if(a.startsWith("esacci.")){var r=a.split(".",2);r.length>1&&(t=r[1])}if(!t&&a.startsWith("esacci-")){var o=a.split("-",2);o.length>1&&(t=o[1])}t||(t=a);var i=sn.mappings[t];i&&(t=i);var l,c=t&&sn.ecvs[t];c&&(l=sn.colors[c.color]||c.color,n=c.label||n);l||(l=sn.colors.default||"#0BB7A0");n||(n=t&&t.substr(0,3).toUpperCase()||"?");return{backgroundColor:l,label:n}}(r),c=l.backgroundColor,s=l.label,u=a.createElement("div",{style:Object(d.a)(Object(d.a)({},fn),{},{backgroundColor:c})},s),p=r.title||i&&i.title;return p&&p!==r.id||(p=function(e){var t=e.id.replace(/-/g," ").replace(/_/g," "),n=t.lastIndexOf("/");n>=0&&n<t.length-1&&(t=t.substring(n+1));var a,r=Object(g.a)(bn);try{for(r.s();!(a=r.n()).done;){var o=a.value;if(t.startsWith(o)||t.startsWith(o.toUpperCase())){t=t.substring(o.length);break}}}catch(s){r.e(s)}finally{r.f()}var i,l=Object(g.a)(vn);try{for(l.s();!(i=l.n()).done;){var c=i.value;if(t.endsWith(c)||t.endsWith(c.toUpperCase())){t=t.substring(0,t.length-c.length);break}}}catch(s){l.e(s)}finally{l.f()}return t}(r)),!Object(B.o)(r)&&(t=a.createElement(ue.Icon,{icon:"warning-sign",intent:ue.Intent.WARNING,iconSize:16,style:pn})),r.dataType&&(n=a.createElement("span",{style:hn},r.dataType)),a.createElement("div",{style:un},u,o?a.createElement("div",null,a.createElement("div",{className:"user-selectable"},t,p,n),a.createElement("div",{className:"user-selectable",style:dn},r.id)):a.createElement("div",{className:"user-selectable"},t,p,n))},bn=["esacci "],vn=[".zarr",".levels",".nc",".tif"];var yn=n(46),gn=function(e){var t=e.dataSources,n=e.selectedDataSourceId,r=e.setSelectedDataSourceId,o=e.showDataSourceIDs,i=e.doubleClickAction;return a.createElement(tn,null,a.createElement(yn.a,{key:"DataSourcesList-"+o,items:t,getItemKey:function(e){return e.id},renderItem:function(e){return a.createElement(mn,{dataSource:e,showDataSourceIDs:o})},selectionMode:yn.b.SINGLE,selection:n,onItemDoubleClick:i,onSelection:function(e){e.length>0?r(e[0]):r(null)}}))},On=function(e){var t,n=e.dataSource;return t=e.isSandboxedMode?a.createElement("p",null,"This data source cannot be opened directly from its data store. You may",a.createElement("ol",null,a.createElement("li",null,"Download it manually to your computer;"),a.createElement("li",null,"Upload it using ",a.createElement("strong",null,"Files / Upload Files"),";"),a.createElement("li",null,"Use one of the available ",a.createElement("code",null,"read_xxx()"),' operations to open the uploaded data. "xxx" is determined by the type and format of the data.'))):a.createElement("p",null,"This data source cannot be opened directly from its data store. You may",a.createElement("ol",null,a.createElement("li",null,"Download it manually to your computer;"),a.createElement("li",null,"Use one of the available ",a.createElement("code",null,"read_xxx()"),' operations to open the downloaded data. "xxx" is determined by the type and format of the data.'))),a.createElement("div",null,a.createElement(ue.H5,null,"Manual intervention required"),t,a.createElement(Ht,{dataSource:n,style:{marginTop:8}}))},En=n(62);var _n=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).state={dataSourceName:"",filePathPattern:""},a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onDataSourceNameChange=a.onDataSourceNameChange.bind(Object(ie.a)(a)),a.onFilePathPatternChange=a.onFilePathPatternChange.bind(Object(ie.a)(a)),a.showSelectDirectoryDialog=a.showSelectDirectoryDialog.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({dataSourceName:"",filePathPattern:""})}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"canConfirm",value:function(){return!!this.state.dataSourceName&&!!this.state.filePathPattern}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID,this.state)),this.props.dispatch(c.vb(this.state.dataSourceName,this.state.filePathPattern))}},{key:"onDataSourceNameChange",value:function(e){this.setState({dataSourceName:e.target.value})}},{key:"onFilePathPatternChange",value:function(e){this.setState({filePathPattern:e.target.value})}},{key:"showSelectDirectoryDialog",value:function(){var e=this,t={title:"Select Directory",buttonLabel:"Select",defaultPath:""!==this.state.filePathPattern?Object(En.c)(this.state.filePathPattern):void 0};this.props.dispatch(c.Wc(t,(function(t){t&&e.setState({filePathPattern:t+"/*.nc"})})))}},{key:"render",value:function(){var e=this.props.isOpen;return e?a.createElement(Dt.a,{isOpen:e,title:"Add file data source",icon:"add",confirmTitle:"Add",confirmIconName:"add",confirmTooltip:"Add file data source.",onCancel:this.onCancel,canConfirm:this.canConfirm,onConfirm:this.onConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){return this.props.isOpen?a.createElement("div",null,a.createElement("p",null,"Define a new file data source using a file path pattern."),a.createElement("p",{style:{marginTop:"1em"}},"Name:"),a.createElement(ue.InputGroup,{type:"text",style:{width:"100%"},value:this.state.dataSourceName,onChange:this.onDataSourceNameChange}),a.createElement("p",{style:{marginTop:"1em"}},"Path pattern",a.createElement("span",{className:"bp3-text-muted"},' (can contain wildcards like "*" or "?")'),":"),a.createElement(ue.ControlGroup,{style:{flexGrow:1,width:"100%"}},a.createElement(ue.InputGroup,{type:"text",fill:!0,value:this.state.filePathPattern,onChange:this.onFilePathPatternChange}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:{flex:"none"},onClick:this.showSelectDirectoryDialog},"..."))):null}}]),n}(a.Component);_n.DIALOG_ID="addDatasetDialog";var Cn=Object(o.b)((function(e){return{isOpen:Oe.x(_n.DIALOG_ID)(e).isOpen}}))(_n),kn=n(92);function wn(e){return new Date(e.getTime()-6e4*e.getTimezoneOffset()).toISOString().slice(0,10)}function Sn(e,t){if(e&&!t){var n=e.lastIndexOf(":");n>=1&&(e=e.substr(0,n));var a=e.lastIndexOf(".");a>=0&&(e=e.substr(a+1))}return e}var jn=n(89),In=n(66),Pn=n(51),Dn=[new Date("1980-01-01"),new Date(Date.now())],Ln=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"parseValue",value:function(e){return Tn(e,this.props.nullable)}},{key:"formatValue",value:function(e){return An(e)}},{key:"validateValue",value:function(e){Object(jn.a)(Object(In.a)(n.prototype),"validateValue",this).call(this,e),Nn(e,this.props.nullable,this.props.min,this.props.max)}}]),n}(Pn.a);function Tn(e,t,n){if(!e||""===e.trim()){if(t)return null;throw new Error("Date must be given.")}var a;if(!/^\d\d\d\d-\d\d-\d\d$/.test(e.trim()))throw new Error("Date not valid: >"+e+"<");try{a=Date.parse(e.trim())}catch(r){throw new Error("Invalid ".concat(n||"date","."))}return new Date(a)}function An(e){return Object(v.g)(e)?"":wn(e)}function Nn(e,t,n,a,r){if(e){if(n&&e.valueOf()<n.valueOf())throw new Error("".concat(r||"Date"," must not be before ").concat(An(n),"."));if(a&&e.valueOf()>a.valueOf())throw new Error("".concat(r||"Date"," must not be after ").concat(An(a),"."))}else if(!t)throw Error("Date value expected.")}Ln.defaultProps={uncontrolled:!0,placeholder:"YYYY-MM-DD"};var Rn=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"parseValue",value:function(e){return function(e,t){if(!e||""===e.trim()){if(t)return null;throw new Error("Date range must be given.")}var n=e.split(",");if(2!==n.length||""===n[0].trim()||""===n[1].trim())throw new Error("Invalid date range.");var a=Tn(n[0],!0,"first date"),r=Tn(n[1],!0,"second date");if(!a&&!r)return null;return[a,r]}(e,this.props.nullable)}},{key:"formatValue",value:function(e){return function(e){if(Object(v.g)(e))return"";var t=e[0],n=e[1];if(!t&&!n)return"";return An(t)+","+An(n)}(e)}},{key:"validateValue",value:function(e){Object(jn.a)(Object(In.a)(n.prototype),"validateValue",this).call(this,e),xn(e,this.props.nullable,this.props.min,this.props.max)}}]),n}(Pn.a);function xn(e,t,n,a){if(e){var r=e[0],o=e[1];if(Nn(r,t,n,a,"First date"),Nn(o,t,n,a,"Second date"),r&&o&&r.valueOf()>o.valueOf())throw new Error("First date must not be after second date.")}else if(!t)throw Error("Date range value expected.")}Rn.defaultProps={uncontrolled:!0,placeholder:"YYYY-MM-DD, YYYY-MM-DD",size:24};var Mn={wordWrap:"break-word"},Vn=function(e){var t=e.label,n=e.longId;return a.createElement(a.Fragment,null,a.createElement("p",null,t),a.createElement("div",{style:Mn},a.createElement("strong",null,n)))},Bn=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleNumericInputChange=a.handleNumericInputChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"parseValue",value:function(e){if(!e||""===e.trim())return null;var t=parseFloat(e);if(isNaN(t)&&"nan"!==e.toLowerCase())throw new Error("Please enter a valid number.");return t}},{key:"formatValue",value:function(e){return Object(v.g)(e)?"":e.toString()}},{key:"validateValue",value:function(e){Object(jn.a)(Object(In.a)(n.prototype),"validateValue",this).call(this,e),Wn(e,this.props.nullable,this.props.min,this.props.max,this.props.isInt)}},{key:"handleNumericInputChange",value:function(e,t){this.setValueAndTextValue(e,t)}},{key:"render",value:function(){return a.createElement(ue.NumericInput,{value:this.getTextValue(),onValueChange:this.handleNumericInputChange,onBlur:this.handleBlur,onKeyPress:this.handleKeyPress,style:this.props.style,intent:this.getError()?ue.Intent.DANGER:ue.Intent.NONE,min:this.props.min,max:this.props.max,size:this.props.size,minorStepSize:this.props.isInt?1:.1,selectAllOnFocus:!0})}}]),n}(Pn.a);function Wn(e,t,n,a,r){if(Object(v.g)(e)){if(!t)throw Error("Numeric value expected")}else{if(!Object(v.d)(e))throw new Error("Value must be a number.");if(r&&e!==Math.floor(e))throw new Error("Value must be an integer.");if(Object(v.d)(n)&&e<n)throw new Error("Value must be >= ".concat(this.props.min,"."));if(Object(v.d)(a)&&e>a)throw new Error("Value must be <= ".concat(this.props.max,"."))}}var Fn={west:{value:-180},south:{value:-90},east:{value:180},north:{value:90}},Un=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onEastChange=a.onEastChange.bind(Object(ie.a)(a)),a.onSouthChange=a.onSouthChange.bind(Object(ie.a)(a)),a.onWestChange=a.onWestChange.bind(Object(ie.a)(a)),a.onNorthChange=a.onNorthChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onWestChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.value),{},{west:e}))}},{key:"onEastChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.value),{},{east:e}))}},{key:"onNorthChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.value),{},{north:e}))}},{key:"onSouthChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.value),{},{south:e}))}},{key:"render",value:function(){var e=this.props.value;return a.createElement("div",null,a.createElement("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"flex-start",padding:2}},a.createElement("div",{style:{flexGrow:0,width:"14em"}},"Lon. from"),a.createElement("div",{style:{flexGrow:1,width:"100%"}},this.renderField(e&&e.west||null,-180,180,this.onWestChange)),a.createElement("div",{style:{flexGrow:0,width:"4em"}}," to"),a.createElement("div",{style:{flexGrow:1,width:"100%"}},this.renderField(e&&e.east||null,-180,180,this.onEastChange))),a.createElement("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"flex-start",padding:2}},a.createElement("div",{style:{flexGrow:0,width:"14em"}},"Lat. from"),a.createElement("div",{style:{flexGrow:1,width:"100%"}},this.renderField(e&&e.south||null,-90,90,this.onSouthChange)),a.createElement("div",{style:{flexGrow:0,width:"4em"}},"to"),a.createElement("div",{style:{flexGrow:1,width:"100%"}},this.renderField(e&&e.north||null,-90,90,this.onNorthChange))))}},{key:"renderField",value:function(e,t,r,o){return a.createElement(Bn,{value:e,style:n.NUMBER_FIELD_STYLE,min:t,max:r,size:10,onChange:o,disabled:this.props.disabled,nullable:!0,uncontrolled:this.props.uncontrolled})}}]),n}(a.PureComponent);Un.NUMBER_FIELD_STYLE={textAlign:"right"};var Gn=n(52),Yn={color:"rgba(0,255,0,0.8)",fontSize:"0.8em"},Hn={width:"15em"},Kn=function(e){var t=e.label,n=e.units,r=e.dataType,o=e.fullyQualified,i=e.tooltipText,l=e.em,c=e.style,s=t,u=Sn(r,o),d=n&&""!==n?" (".concat(n,")"):"",p=a.createElement("span",null,l?a.createElement("em",null,s):s," ",d," ",a.createElement("span",{style:Yn},u," "));return i&&""!==i&&(p=a.createElement(ue.Tooltip,{content:a.createElement("div",{style:Hn},i),position:"top"},p)),a.createElement("span",{style:c},p)},zn=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onSelection=a.onSelection.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.state={value:a.props.value},a}return Object(oe.a)(n,[{key:"onSelection",value:function(e){this.setState({value:e})}},{key:"onConfirm",value:function(){this.props.onConfirm(this.state.value)}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:this.props.multiSelect?"Select Variables":"Select Variable",icon:"variable",onConfirm:this.onConfirm,onCancel:this.props.onCancel,renderBody:this.renderBody})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.props.resource.variables;return e?a.createElement(tn,null,a.createElement("p",null,this.props.multiSelect?"Select one or more the variables:":"Select variable:"),a.createElement(yn.a,{items:e,getItemKey:n.getVariableItemKey,renderItem:n.renderVariableItem,selectionMode:this.props.multiSelect?yn.b.MULTIPLE:yn.b.SINGLE,selection:this.state.value,style:{height:"20em"},onSelection:this.onSelection,onItemDoubleClick:this.state.value?this.onConfirm:null})):a.createElement("p",null,'Resource "'.concat(this.props.resource.name,'" does not seem to have any variables.'))}}],[{key:"getVariableItemKey",value:function(e){return e.name}},{key:"renderVariableItem",value:function(e){var t=e.dimNames?"".concat(e.dataType,"[").concat(e.dimNames,"]"):"".concat(e.dataType);return a.createElement("div",null,a.createElement(Kn,{label:e.name,dataType:t,units:e.units,tooltipText:e.attributes&&e.attributes.long_name}))}}]),n}(a.Component),qn=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a.validate=a.validate.bind(Object(ie.a)(a)),a.state={isDetailsEditorOpen:!1},a}return Object(oe.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"validate",value:function(e){!function(e,t,n,a){if(!e||""===e.trim()){if(!t)throw new Error(n?"One or more variable names expected.":"Variable name expected.");return}var r=e.split(",");if(n){var o,i=Object(g.a)(r);try{for(i.s();!(o=i.n()).done;){if(""===o.value.trim())throw new Error("Value must be a comma-separated list of variable names.")}}catch(d){i.e(d)}finally{i.f()}}else{if(1!==r.length)throw new Error("Value must be a single variable name.");if(""===r[0].trim())throw new Error("Value must be a variable name.")}if(a&&a.variables){var l,c=new Set(a.variables.map((function(e){return e.name}))),s=Object(g.a)(r);try{for(s.s();!(l=s.n()).done;){var u=l.value;if(!c.has(u))throw new Error('"'.concat(u,'" is not a name of any variable in resource ').concat(a.name,"."))}}catch(d){s.e(d)}finally{s.f()}}}(e,this.props.input.nullable,this.props.multi,this.props.resource)}},{key:"render",value:function(){var e=this,t=Object(Pn.c)(this.props.value),r=""!==t?t.split(",").map((function(e){return e.trim()})):[],o=this.props.resource&&this.props.resource.variables&&this.props.resource.variables.length;return a.createElement(ue.ControlGroup,{fill:!0,style:n.DIV_STYLE},a.createElement(Gn.a,{value:this.props.value,validator:this.validate,placeholder:this.props.multi?"Enter variable names, separated by comma":"Enter variable name",onChange:this.onChange,nullable:this.props.input.nullable,style:n.TEXT_FIELD_STYLE}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,onClick:function(){return e.setState({isDetailsEditorOpen:!0})},disabled:!o,style:n.BUTTON_STYLE},"..."),a.createElement(zn,{isOpen:this.state.isDetailsEditorOpen,resource:this.props.resource,multiSelect:this.props.multi,value:r,onConfirm:function(t){var n=t?t.join(", "):null;e.setState({isDetailsEditorOpen:!1}),e.onChange({textValue:n,value:n})},onCancel:function(){e.setState({isDetailsEditorOpen:!1})}}))}}]),n}(a.Component);qn.DIV_STYLE={display:"flex",justifySelf:"stretch"},qn.TEXT_FIELD_STYLE={flexGrow:1},qn.BUTTON_STYLE={flexGrow:0};var Jn={marginTop:8,marginBottom:8},Xn=a.createElement(ue.Icon,{icon:kn.a.WARNING_SIGN,intent:ue.Intent.WARNING}),Zn=a.createElement(ue.Icon,{icon:kn.a.ERROR,intent:ue.Intent.DANGER}),Qn=a.createElement(ue.Icon,{icon:kn.a.ISSUE,intent:ue.Intent.PRIMARY}),$n={marginTop:4,marginBottom:4},ea=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onHasTimeConstraintChange=a.onHasTimeConstraintChange.bind(Object(ie.a)(a)),a.onDateRangeChange=a.onDateRangeChange.bind(Object(ie.a)(a)),a.onHasRegionConstraintChange=a.onHasRegionConstraintChange.bind(Object(ie.a)(a)),a.onRegionChange=a.onRegionChange.bind(Object(ie.a)(a)),a.onHasVariablesConstraintChange=a.onHasVariablesConstraintChange.bind(Object(ie.a)(a)),a.onVariableNamesChange=a.onVariableNamesChange.bind(Object(ie.a)(a)),a.onMakeLocalSelectedChange=a.onMakeLocalSelectedChange.bind(Object(ie.a)(a)),a.onMakeLocalDataSourceIdChange=a.onMakeLocalDataSourceIdChange.bind(Object(ie.a)(a)),a.onOpenDatasetResourceNameChange=a.onOpenDatasetResourceNameChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onDateRangeChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{dateRange:e}))}},{key:"onRegionChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{region:e}))}},{key:"onHasTimeConstraintChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{hasTimeConstraint:e.target.checked}))}},{key:"onHasRegionConstraintChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{hasRegionConstraint:e.target.checked}))}},{key:"onHasVariablesConstraintChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{hasVariablesConstraint:e.target.checked}))}},{key:"onVariableNamesChange",value:function(e,t){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{variableNames:t}))}},{key:"onMakeLocalSelectedChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{isCacheDataSourceSelected:e.target.checked}))}},{key:"onMakeLocalDataSourceIdChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{cachedDataSourceId:e.target.value}))}},{key:"onOpenDatasetResourceNameChange",value:function(e){this.props.onChange(Object(d.a)(Object(d.a)({},this.props.options),{},{openDatasetResourceName:e.target.value}))}},{key:"render",value:function(){if(!this.props.dataSource)return null;var e=this.props.options,t=new Date("1970-01-01"),r=new Date(Date.now()),o=this.props.temporalCoverage;o&&(o[0]&&(t=new Date(o[0])),o[1]&&(r=new Date(o[1])));var i,l=o&&a.createElement("div",{style:$n},"Available time range: ".concat(o.join(", "))),c=e.hasTimeConstraint,s=c?e.dateRange:null,u=a.createElement("div",{style:n.SUB_PANEL_STYLE},a.createElement(ue.Checkbox,{disabled:!o||!this.props.canConstrainTime,checked:c,label:"Time constraint",onChange:this.onHasTimeConstraintChange}),a.createElement(ue.Collapse,{isOpen:c},a.createElement("div",{style:n.OPTION_DIV_STYLE},a.createElement(Rn,{nullable:!0,min:t,max:r,value:s,onChange:this.onDateRangeChange}),l))),d=e.hasRegionConstraint,p=d?e.region||Fn:e.region,h=a.createElement("div",{style:n.SUB_PANEL_STYLE},a.createElement(ue.Checkbox,{disabled:!this.props.canConstrainRegion,checked:d,label:"Region constraint",onChange:this.onHasRegionConstraintChange}),a.createElement(ue.Collapse,{isOpen:this.props.canConstrainRegion&&d},a.createElement("div",{style:n.OPTION_DIV_STYLE},a.createElement(Un,{value:p,disabled:!d,onChange:this.onRegionChange})))),f=e.hasVariablesConstraint,m=n.dataSourceToResource(this.props.dataSource),b=a.createElement("div",{style:n.SUB_PANEL_STYLE},a.createElement(ue.Checkbox,{disabled:!this.props.canConstrainVariables,checked:f,label:"Variables constraint",onChange:this.onHasVariablesConstraintChange}),a.createElement(ue.Collapse,{isOpen:f},a.createElement("div",{style:n.OPTION_DIV_STYLE},a.createElement(qn,{input:n.VAR_NAMES_INPUT,value:e.variableNames,onChange:this.onVariableNamesChange,resource:m,multi:!0}))));if(this.props.canCache&&!this.props.isLocalDataSource){var v=e.isCacheDataSourceSelected;i=a.createElement("div",{style:n.SUB_PANEL_STYLE},a.createElement(ue.Tooltip,{content:"If unchecked, remote data will be accessed using an available protocol, e.g. OPeNDAP."},a.createElement(ue.Checkbox,{checked:v,label:"Cache data source (allocates space on disk)",onChange:this.onMakeLocalSelectedChange})),a.createElement(ue.Collapse,{isOpen:v},a.createElement("div",{style:n.OPTION_DIV_STYLE},a.createElement(ue.Label,null,"Unique identifier for the new local data source",a.createElement("span",{className:"bp3-text-muted"}," (optional)"),a.createElement(ue.InputGroup,{style:{width:"100%"},type:"text",value:e.cachedDataSourceId,onChange:this.onMakeLocalDataSourceIdChange})))))}var y,g=[];return"ok"===this.props.dataSource.metaInfoStatus?(this.props.canConstrainTime||g.push([Xn,"This dataset has no (recognised) temporal coverage."]),this.props.canConstrainRegion||g.push([Xn,a.createElement("span",null,"This dataset has no (recognised) spatial coverage and hence it will not show up in the ",a.createElement("strong",null,"World View"),".")]),this.props.canConstrainVariables||g.push([Xn,"This datasets has no (recognised) variables."])):"loading"===this.props.dataSource.metaInfoStatus?g.push([Qn,"Please wait while dataset metadata is loaded..."]):"error"===this.props.dataSource.metaInfoStatus&&g.push([Zn,"Failed to load dataset metadata."]),g.length>0&&(y=a.createElement(ue.Card,{style:Jn},g.map((function(e){var t=Object(te.a)(e,2),n=t[0],r=t[1];return a.createElement("div",null,n,"\xa0\xa0",r)})))),a.createElement("div",null,a.createElement(Vn,{label:this.props.isLocalDataSource?"Data source (local):":"Data source:",longId:this.props.dataSource.title}),u,h,b,i,y)}}],[{key:"dataSourceVarToVariable",value:function(e){return{name:e.name,units:e.units||"-",dataType:ct.d}}},{key:"dataSourceToResource",value:function(e){if(e){var t=e.metaInfo;if(t&&t.data_vars&&t.data_vars.length)return{name:e.id,dataType:ct.c,variables:t.data_vars.map((function(e){return n.dataSourceVarToVariable(e)}))}}return null}},{key:"validateOptions",value:function(e,t){if(!t)return!1;var n=!0;t.hasTimeConstraint&&t.dateRange&&(n=!t.dateRange.error);var a=!0;if(t.hasRegionConstraint&&t.region){var r=t.region.west.value,o=t.region.east.value,i=t.region.south.value,l=t.region.north.value,c=l>=-90&&l<=90,s=i>=-90&&i<=90;a=r>=-180&&r<=180&&(o>=-180&&o<=180)&&Math.abs(r-o)>=.009&&(s&&c&&l-i>=.009)}var u=!0;t.hasVariablesConstraint&&t.variableNames&&(u=!t.variableNames.error);var d=!0;if(!e&&t.isCacheDataSourceSelected){var p=t.cachedDataSourceId;p&&!/[^\\/:*?"<>|\r\n]+$/im.test(p)&&(d=!1)}return n&&a&&u&&d}},{key:"optionsToErrors",value:function(e){var t={};return e.hasTimeConstraint&&e.dateRange&&e.dateRange.error&&(t["Time constraint"]=e.dateRange.error),e.hasVariablesConstraint&&e.variableNames&&e.variableNames.error&&(t["Variables constraint"]=e.variableNames.error),t}},{key:"optionsToOperationArguments",value:function(e){var t={};if(e.hasTimeConstraint&&e.dateRange&&e.dateRange.value){var n=wn(e.dateRange.value[0]),a=wn(e.dateRange.value[1]);t={time_range:"".concat(n,",").concat(a)}}if(e.hasRegionConstraint&&e.region){var r=e.region;t=Object(d.a)(Object(d.a)({},t),{},{region:"".concat(r.west.value,",").concat(r.south.value,",").concat(r.east.value,",").concat(r.north.value)})}if(e.hasVariablesConstraint&&e.variableNames){var o=e.variableNames.value;t=Object(d.a)(Object(d.a)({},t),{},{var_names:o})}return e.isCacheDataSourceSelected&&(t=Object(d.a)(Object(d.a)({},t),{},{force_local:!0}),e.cachedDataSourceId&&(t=Object(d.a)(Object(d.a)({},t),{},{local_ds_id:e.cachedDataSourceId}))),t}},{key:"defaultOptions",value:function(e,t){var n=null,a=null;if(t&&t[0])try{n=new Date(t[0])}catch(r){}if(t&&t[1])try{a=new Date(t[1])}catch(r){}return{hasTimeConstraint:!1,dateRange:{value:[n,a]},hasRegionConstraint:!1,region:null,hasVariablesConstraint:!1,variableNames:null,isCacheDataSourceSelected:!e,cachedDataSourceId:"",openDatasetResourceName:""}}},{key:"ensureDateRangeIsValidated",value:function(e,t){if(e.hasTimeConstraint&&e.dateRange&&t)try{var n=t[0]?new Date(t[0]):new Date("1980-01-01"),a=t[1]?new Date(t[1]):new Date(Date.now());return xn(e.dateRange.value,!0,n,a),Object(d.a)(Object(d.a)({},e),{},{dateRange:Object(d.a)(Object(d.a)({},e.dateRange),{},{error:null})})}catch(r){return Object(d.a)(Object(d.a)({},e),{},{dateRange:Object(d.a)(Object(d.a)({},e.dateRange),{},{error:r})})}return e}}]),n}(a.Component);ea.VAR_NAMES_INPUT={name:"varNames",dataType:"string",description:null,nullable:!0},ea.SUB_PANEL_STYLE={marginTop:"1em"},ea.OPTION_CHECK_STYLE={marginTop:"1em"},ea.OPTION_DIV_STYLE={marginLeft:"2em"};var ta=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"render",value:function(){var e;e=this.isValueEditorShown()?this.props.valueEditor:this.renderResourceNameEditor();var t=this.renderEditorSwitch();return a.createElement(a.Fragment,{key:this.props.name},a.createElement(Kn,{style:n.LABEL_STYLE,label:this.props.name,units:this.props.units,dataType:this.props.dataType,tooltipText:this.props.tooltipText}),e,t)}},{key:"handleChange",value:function(e,t){this.props.onChange&&this.props.onChange(e,t)}},{key:"renderResourceNameEditor",value:function(){var e=this,t=a.createElement("option",{key:"__first__",value:"__null__"},"Select resource"),r=(this.props.resources||[]).filter((function(t){return e.isDataTypeCompatible(t)})).map((function(e){return a.createElement("option",{key:e.name,value:e.name},e.name)})),o=[t].concat(r),i=a.createElement("div",{className:"bp3-intent-primary",style:n.RESOURCE_NAME_STYLE},a.createElement(ue.HTMLSelect,{fill:!0,style:n.RESOURCE_NAME_STYLE,value:this.props.resourceName||"__null__",disabled:0===r.length,onChange:function(t){return e.handleChange("__null__"===t.target.value?null:t.target.value,!1)}},o));return 0===r.length&&(i=a.createElement(ue.Popover,{interactionKind:ue.PopoverInteractionKind.HOVER,hoverOpenDelay:0,hoverCloseDelay:0,position:ue.PopoverPosition.TOP,fill:!0},i,a.createElement("div",{style:{padding:8}},"This parameter requires a resource of type ",a.createElement("span",{style:{color:"rgba(0,255,0,0.8)"}},Sn(this.props.dataType,!1)),".",a.createElement("br",null),"Currently, no resources of this type are available.",a.createElement("br",null),function(e){switch(e){case ct.c:return a.createElement("span",null,"Datasets can be opened from the ",a.createElement("b",null,"DATA SOURCES")," panel.",a.createElement("br",null),"You can also use operations like ",a.createElement("code",null,"open_dataset")," or ",a.createElement("br",null),a.createElement("code",null,"read_netcdf")," to produce resources of this type.");case ct.b:return a.createElement("span",null,"Datasets can be opened from the ",a.createElement("b",null,"DATA SOURCES")," panel.",a.createElement("br",null),"You can also use operations like ",a.createElement("code",null,"open_dataset"),", ",a.createElement("br",null),"or ",a.createElement("code",null,"read_netcdf")," to produce resources of this type.");case ct.f:return a.createElement("span",null,"You can use operations like ",a.createElement("code",null,"read_csv"),", ",a.createElement("code",null,"read_geo_data"),a.createElement("br",null),"to produce resources of this type.");case ct.e:return a.createElement("span",null,"You can use operations like ",a.createElement("code",null,"read_csv"),", ",a.createElement("code",null,"read_geo_data"),",",a.createElement("br",null),"or ",a.createElement("code",null,"open_dataset")," to produce resources of this type.");case ct.o:case ct.r:return""}return""}(this.props.dataType)))),i}},{key:"renderEditorSwitch",value:function(){var e=this,t=this.isValueEditorShown(),r=this.isValueEditorDisabled(),o=!this.hasCompatibleResources(),i=r||o;return a.createElement("span",null,a.createElement(ue.Tooltip,{content:(t?"Switch to resource selection":"Switch to value entry")+(i?" (disabled)":"")},a.createElement(ue.Switch,{checked:t,disabled:i,alignIndicator:ue.Alignment.LEFT,style:n.EDITOR_SWITCH_STYLE,onChange:function(t){return e.handleChange(e.props.resourceName,t.target.checked)}})))}},{key:"isDataTypeCompatible",value:function(e){return Object(ct.x)(this.props.dataType,e.dataType)}},{key:"hasCompatibleResources",value:function(){var e=this;return(this.props.resources||[]).some((function(t){return e.isDataTypeCompatible(t)}))}},{key:"isValueEditorDisabled",value:function(){return!this.props.valueEditor}},{key:"isValueEditorShown",value:function(){return!(!this.props.isValueEditorShown||!this.props.valueEditor)}}]),n}(a.PureComponent);function na(e){return a.createElement(ue.Checkbox,{className:"bp3-large",checked:e.value||!1,indeterminate:null===e.value,style:{marginTop:"0",marginBottom:"0"},onChange:function(t){return e.onChange(e.input,t.target.checked)}})}ta.LABEL_STYLE={justifySelf:"end",justifyContent:"end"},ta.EDITOR_SWITCH_STYLE={margin:0},ta.RESOURCE_NAME_STYLE={justifySelf:"stretch"};var aa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e===n.NULL_VALUE?null:e)}},{key:"render",value:function(){var e=this,t=this.props.input.valueSet;if(!(t&&t.length))return null;var r,o=t.map((function(e,t){return a.createElement("option",{key:t,value:e},e)}));this.props.input.nullable&&(o=(r=[a.createElement("option",{key:-1,value:n.NULL_VALUE})]).concat.apply(r,Object(u.a)(o)));var i=this.props.value||n.NULL_VALUE;return a.createElement("div",{className:"bp3-select"},a.createElement(ue.HTMLSelect,{fill:!0,style:n.VALUE_SELECTOR_STYLE,value:i,onChange:function(t){return e.onChange(t.target.value)}},o))}}],[{key:"isValueSetGiven",value:function(e){return e.valueSet&&e.valueSet.length}}]),n}(a.PureComponent);function ra(e){return aa.isValueSetGiven(e.input)?a.createElement(aa,{input:e.input,value:e.value,onChange:e.onChange}):a.createElement(Bn,{isInt:!0,size:10,value:e.value,nullable:e.input.nullable,onChange:function(t){return e.onChange(e.input,t)}})}function oa(e){return aa.isValueSetGiven(e.input)?a.createElement(aa,{input:e.input,value:e.value,onChange:e.onChange}):a.createElement(Bn,{isInt:!1,size:10,value:e.value,nullable:e.input.nullable,onChange:function(t){return e.onChange(e.input,t)}})}function ia(e){if(aa.isValueSetGiven(e.input))return a.createElement(aa,{input:e.input,value:e.value,onChange:e.onChange});var t=e.input.password?"password":"text";return a.createElement(Gn.a,{size:24,value:e.value,nullable:e.input.nullable,onChange:function(t){return e.onChange(e.input,t)},type:t})}aa.NULL_VALUE="__null__",aa.VALUE_SELECTOR_STYLE={justifySelf:"stretch"};var la={display:"flex",justifySelf:"stretch"},ca={flexGrow:1},sa={flexGrow:0};var ua=Object(o.b)((function(e,t){return Object(d.a)(Object(d.a)({},t),{},{hostOS:e.communication.webAPIServiceInfo.hostOS,workspaceDir:e.data.workspace?e.data.workspace.baseDir:null})}))((function(e){var t=e.input,n=e.value,r=e.onChange,o=e.hostOS,i=e.workspaceDir,l=e.dispatch;n=n||"";var s,u=function(e){return null!==i?Object(En.g)(e,i,o):e},d=function(e){return null!==i?Object(En.f)(i,e,o):e};return s="w"===t.fileOpenMode?function(e,t,n){var a={defaultPath:d(Object(Pn.c)(t,void 0)),filters:e.fileFilters};l(c.Zc(a,(function(t){var a=t.filePath;!t.canceled&&a&&(a=u(a),n(e,a))})))}:function(e,t,n){var a=e.fileProps,r=new Set(a);r.has("openFile")||r.has("openDirectory")||(r.add("openFile"),a=Array.from(r));var o={defaultPath:d(Object(Pn.c)(t,void 0)),filters:e.fileFilters,properties:a};l(c.Yc(o,(function(t){var r=t.filePaths;!t.canceled&&r.length>0&&(r=r.map(u),a&&a.find((function(e){return"multiSelection"===e}))&&console.error("multi-file selection is not yet implemented, returning first entry only"),n(e,r[0]))})))},a.createElement(ue.ControlGroup,{fill:!0,style:la},a.createElement(Gn.a,{style:ca,value:n,placeholder:"Enter file path",onChange:function(e){return r(t,e)},nullable:t.nullable}),a.createElement(ue.Button,{intent:ue.Intent.PRIMARY,style:sa,onClick:function(){return s(t,n,r)}},"..."))})),da=a.createElement("a",{href:"https://en.wikipedia.org/wiki/Well-known_text",target:"_blank",rel:"noopener noreferrer"},"Well-Known Text (WKT)"),pa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.onChange=a.onChange.bind(Object(ie.a)(a)),a.state=a.toState(a.props.value),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(this.toState(e.value))}},{key:"onConfirm",value:function(){this.props.onConfirm(this.state.value)}},{key:"onChange",value:function(e){this.setState(this.toState(e.target.value))}},{key:"canConfirm",value:function(){return!this.state.error}},{key:"toState",value:function(e){var t;try{ht(e,this.props.geometryType)}catch(n){t=n}return{value:e,error:t}}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:"Geometry Editor",onCancel:this.props.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.state.value,t=!!this.state.error;return a.createElement(ue.FormGroup,null,a.createElement(ue.Label,{htmlFor:"wkt"},"Enter Geometry of type ".concat(this.props.geometryType),a.createElement("span",{className:"bp3-text-muted"}," (WGS84 coordinates in degree)")),a.createElement("div",{className:"bp3-form-content",style:{width:"100%"}},a.createElement("textarea",{id:"wkt",className:t?n.ERROR_CLASS:n.NOMINAL_CLASS,rows:10,dir:"auto",value:e,onChange:this.onChange}),this.getHelpText()))}},{key:"getHelpText",value:function(){var e,t;return this.state.error&&(e=a.createElement("p",null,"Error: ".concat(this.state.error.message))),t="Point"===this.props.geometryType?a.createElement("p",null,"Use ",a.createElement("code",null,"lon, lat")," or use ",this.props.geometryType," ",da," syntax."):"Polygon"===this.props.geometryType?a.createElement("p",null,"Use ",a.createElement("code",null,"west, south, east, north")," or use ",this.props.geometryType," ",da," syntax."):a.createElement("p",null,"Use ",this.props.geometryType," ",da," syntax."),a.createElement("div",{className:"bp3-form-helper-text"},e,t)}}]),n}(a.Component);pa.NOMINAL_CLASS="bp3-input bp3-fill",pa.ERROR_CLASS="bp3-input bp3-fill bp3-intent-danger";var ha=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).validateGeometryText=a.validateGeometryText.bind(Object(ie.a)(a)),a.state={isEditorOpen:!1},a.setGeometryWKT=a.setGeometryWKT.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"validateGeometryText",value:function(e){ht(e,this.props.geometryType)}},{key:"setGeometryWKT",value:function(){var e;try{e=this.props.geometryWKTGetter&&this.props.geometryWKTGetter()}catch(t){console.error(t),e="Error: "+t}this.props.onChange({textValue:e,value:e})}},{key:"render",value:function(){var e=this,t=this.props.placeholder;return t||(t="Point"===this.props.geometryType?"<lon>,<lat> or Point WKT":"Polygon"===this.props.geometryType?"<lon1>,<lat1>,<lon2>,<lat2> or Polygon WKT":"Enter ".concat(this.props.geometryType," WKT")),a.createElement(ue.ControlGroup,{style:n.DIV_STYLE,fill:!0},a.createElement(Gn.a,{value:this.props.value,onChange:this.props.onChange,placeholder:t,validator:this.validateGeometryText,nullable:this.props.nullable,style:n.TEXT_FIELD_STYLE}),a.createElement(ue.AnchorButton,{icon:"selection",style:n.BUTTON_STYLE,disabled:!this.props.geometryWKTGetter,onClick:this.setGeometryWKT}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:n.BUTTON_STYLE,onClick:function(){return e.setState({isEditorOpen:!0})}},"..."),a.createElement(pa,{isOpen:this.state.isEditorOpen,value:Object(Pn.c)(this.props.value),onConfirm:function(t){e.setState({isEditorOpen:!1}),e.props.onChange({textValue:t,value:t})},onCancel:function(){e.setState({isEditorOpen:!1})},geometryType:this.props.geometryType}))}}]),n}(a.Component);ha.DIV_STYLE={display:"flex",justifySelf:"stretch"},ha.TEXT_FIELD_STYLE={flexGrow:1},ha.BUTTON_STYLE={flexGrow:0};var fa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"render",value:function(){return a.createElement(ha,{value:this.props.value,onChange:this.onChange,placeholder:this.props.placeholder,size:this.props.size,geometryType:this.props.geometryType,nullable:this.props.input.nullable,geometryWKTGetter:this.props.geometryWKTGetter})}}]),n}(a.Component),ma=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onChange",value:function(e){var t=e.textValue,n=e.error;this.props.onChange(this.props.input,{textValue:t,value:t,error:n})}},{key:"render",value:function(){var e=this.getValueMinMax();return a.createElement(Rn,{nullable:this.props.input.nullable,min:e[0],max:e[1],value:this.props.value,onChange:this.onChange})}},{key:"getValueMinMax",value:function(){var e,t,n=this.props.input.valueRange;if(n)try{e=Tn(n[0],!0),t=Tn(n[1],!0)}catch(a){}return[e,t]}}]),n}(a.PureComponent),ba=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onSelection=a.onSelection.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.state={value:a.props.value},a}return Object(oe.a)(n,[{key:"onSelection",value:function(e){this.setState({value:e})}},{key:"onConfirm",value:function(){this.props.onConfirm(this.state.value)}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:this.props.multiSelect?"Select Dimensions":"Select Dimension",icon:"variable",onConfirm:this.onConfirm,onCancel:this.props.onCancel,renderBody:this.renderBody})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.props.dimNames;return e?a.createElement(tn,null,a.createElement("p",null,this.props.multiSelect?"Select one or more dimensions:":"Select dimension:"),a.createElement(yn.a,{items:e,getItemKey:n.getDimItemKey,renderItem:n.renderDimItem,selectionMode:this.props.multiSelect?yn.b.MULTIPLE:yn.b.SINGLE,selection:this.state.value,style:{height:"20em"},onSelection:this.onSelection,onItemDoubleClick:this.state.value?this.onConfirm:null})):a.createElement("p",null,"No dimensions names found for the given source.")}}],[{key:"getDimItemKey",value:function(e){return e}},{key:"renderDimItem",value:function(e){return a.createElement("div",null,e)}}]),n}(a.Component),va=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a.validate=a.validate.bind(Object(ie.a)(a)),a.state={isDetailsEditorOpen:!1},a}return Object(oe.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"validate",value:function(e){!function(e,t,n,a){if(!e||""===e.trim()){if(!t)throw new Error(n?"One or more dimension names expected.":"Dimension name expected.");return}var r=e.split(",");if(n){var o,i=Object(g.a)(r);try{for(i.s();!(o=i.n()).done;){if(""===o.value.trim())throw new Error("Value must be a comma-separated list of dimension names.")}}catch(u){i.e(u)}finally{i.f()}}else{if(1!==r.length)throw new Error("Value must be a single dimension name.");if(""===r[0].trim())throw new Error("Value must be a dimension name.")}if(a){var l,c=Object(g.a)(r);try{for(c.s();!(l=c.n()).done;){var s=l.value;if(!new Set(a).has(s))throw new Error('"'.concat(s,'" is not a valid dimension. Valid dimensions are: "').concat(a,'"'))}}catch(u){c.e(u)}finally{c.f()}}}(e,this.props.input.nullable,this.props.multi,this.props.dimNames)}},{key:"render",value:function(){var e=this,t=Object(Pn.c)(this.props.value),r=""!==t?t.split(",").map((function(e){return e.trim()})):[],o=this.props.dimNames&&this.props.dimNames.length;return a.createElement(ue.ControlGroup,{style:n.DIV_STYLE},a.createElement(Gn.a,{value:this.props.value,validator:this.validate,size:this.props.multi?36:24,placeholder:this.props.multi?"Enter dimension names, separated by comma":"Enter dimension name",onChange:this.onChange,nullable:this.props.input.nullable,style:n.TEXT_FIELD_STYLE}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,onClick:function(){return e.setState({isDetailsEditorOpen:!0})},disabled:!o,style:n.BUTTON_STYLE},"..."),a.createElement(ba,{isOpen:this.state.isDetailsEditorOpen,dimNames:this.props.dimNames,multiSelect:this.props.multi,value:r,onConfirm:function(t){var n=t?t.join(", "):null;e.setState({isDetailsEditorOpen:!1}),e.onChange({textValue:n,value:n})},onCancel:function(){e.setState({isDetailsEditorOpen:!1})}}))}}]),n}(a.Component);va.DIV_STYLE={width:"24em",display:"flex",flexGrow:1},va.TEXT_FIELD_STYLE={flexGrow:1},va.BUTTON_STYLE={flex:"none"};var ya=n(407),ga=n(408),Oa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onChange",value:function(e){var t=e.textValue,n=e.error;this.props.onChange(this.props.input,{textValue:t,value:t,error:n})}},{key:"render",value:function(){var e=this.getValueMinMax();return a.createElement(Ln,{nullable:this.props.input.nullable,min:e[0],max:e[1],value:this.props.value,onChange:this.onChange})}},{key:"getValueMinMax",value:function(){var e,t,n=this.props.input.valueRange;if(n)try{e=Tn(n[0],!0),t=Tn(n[1],!0)}catch(a){e=Dn[0],t=Dn[1]}return[e,t]}}]),n}(a.PureComponent),Ea=n(409),_a=n.n(Ea),Ca=(n(633),n(634),[{href:"http://xarray.pydata.org/en/stable/api.html#top-level-functions",module:"xr",name:"xarray"},{href:"http://xarray.pydata.org/en/stable/api.html#universal-functions",module:"xu",name:"xarray u-funcs"},{href:"http://pandas.pydata.org/pandas-docs/stable/basics.html",module:"pd",name:"Pandas"},{href:"http://pandas.pydata.org/pandas-docs/stable/basics.html",module:"np",name:"numpy"}]),ka=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.onChange=a.onChange.bind(Object(ie.a)(a)),a.state=a.toState(a.props.value),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(this.toState(e.value))}},{key:"onConfirm",value:function(){this.props.onConfirm(this.state.value)}},{key:"onChange",value:function(e){this.setState(this.toState(e))}},{key:"canConfirm",value:function(){return!this.state.error}},{key:"toState",value:function(e){var t;return{value:e,error:t}}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:"Script Editor",onCancel:this.props.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody,style:n.DIALOG_STYLE})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.state.value;return a.createElement(a.Fragment,null,a.createElement(_a.a,{mode:this.props.scriptLang,theme:"monokai",width:"100%",fontSize:14,showGutter:!0,highlightActiveLine:!0,value:e,onChange:this.onChange}),this.getHelpText())}},{key:"getHelpText",value:function(){var e=Ca.map((function(e,t){return a.createElement("span",null,a.createElement("code",null,e.module),"\xa0(",a.createElement("a",{href:e.href,rel:"noopener noreferrer",target:"_blank"},e.name),")",t<Ca.length-1?", ":"")}));return a.createElement("div",{className:"bp3-form-helper-text",style:{marginTop:"0.5em"}},"Please use Python 3.6+ syntax. The following modules are imported by default: ",e,". Other modules can be imported: ",a.createElement("code",null,"dask"),", ",a.createElement("code",null,"gdal"),", ",a.createElement("code",null,"geos")," ",a.createElement("code",null,"pyshp"),",",a.createElement("code",null,"scipy"),", ",a.createElement("code",null,"shapely"),".")}}]),n}(a.Component);ka.DIALOG_STYLE={width:"54em"};var wa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).validateScript=a.validateScript.bind(Object(ie.a)(a)),a.state={isEditorOpen:!1},a}return Object(oe.a)(n,[{key:"validateScript",value:function(e){}},{key:"render",value:function(){var e=this,t=this.props.placeholder;return a.createElement(ue.ControlGroup,{style:n.DIV_STYLE,fill:!0},a.createElement(Gn.a,{value:this.props.value,onChange:this.props.onChange,size:this.props.size,placeholder:t,validator:this.validateScript,nullable:this.props.nullable,style:n.TEXT_FIELD_STYLE}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:n.BUTTON_STYLE,onClick:function(){return e.setState({isEditorOpen:!0})}},"..."),a.createElement(ka,{isOpen:this.state.isEditorOpen,value:Object(Pn.c)(this.props.value),onConfirm:function(t){e.setState({isEditorOpen:!1}),e.props.onChange({textValue:t,value:t})},onCancel:function(){e.setState({isEditorOpen:!1})},scriptLang:this.props.scriptLang}))}}]),n}(a.Component);wa.DIV_STYLE={display:"flex"},wa.TEXT_FIELD_STYLE={flexGrow:1},wa.BUTTON_STYLE={flexGrow:0};var Sa,ja=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onChange=a.onChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onChange",value:function(e){this.props.onChange(this.props.input,e)}},{key:"render",value:function(){return a.createElement(wa,{value:this.props.value,onChange:this.onChange,placeholder:this.props.placeholder,size:this.props.size,scriptLang:this.props.input.scriptLang,nullable:this.props.input.nullable})}}]),n}(a.Component);function Ia(e){var t=Pa(e.input.dataType);return t?t(e):null}function Pa(e){return e?La[e]:null}function Da(e){return a.createElement(ua,{input:e.input,value:e.value,onChange:e.onChange})}var La=(Sa={},Object(s.a)(Sa,ct.a,(function(e){return a.createElement(na,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.m,(function(e){return a.createElement(ra,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.k,(function(e){return a.createElement(oa,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.s,(function(e){return e.input.fileOpenMode?Da(e):e.input.scriptLang?function(e){return a.createElement(ja,{input:e.input,value:e.value,onChange:e.onChange})}(e):function(e){return a.createElement(ia,{input:e.input,value:e.value,onChange:e.onChange})}(e)})),Object(s.a)(Sa,ct.p,(function(e){return a.createElement(fa,{input:e.input,value:e.value,onChange:e.onChange,geometryType:"Point",size:16,geometryWKTGetter:e.geometryWKTGetter})})),Object(s.a)(Sa,ct.q,(function(e){return a.createElement(fa,{input:e.input,value:e.value,onChange:e.onChange,geometryType:"Polygon",size:32,geometryWKTGetter:e.geometryWKTGetter})})),Object(s.a)(Sa,ct.l,(function(e){return a.createElement(fa,{input:e.input,value:e.value,onChange:e.onChange,geometryType:"Geometry",size:32,geometryWKTGetter:e.geometryWKTGetter})})),Object(s.a)(Sa,ct.t,(function(e){return a.createElement(Oa,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.u,(function(e){return a.createElement(ma,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.w,(function(e){return a.createElement(qn,{input:e.input,value:e.value,onChange:e.onChange,resource:Ta(e),multi:!1})})),Object(s.a)(Sa,ct.v,(function(e){return a.createElement(qn,{input:e.input,value:e.value,onChange:e.onChange,resource:Ta(e),multi:!0})})),Object(s.a)(Sa,ct.i,(function(e){return a.createElement(va,{input:e.input,value:e.value,onChange:e.onChange,dimNames:Aa(e),multi:!1})})),Object(s.a)(Sa,ct.h,(function(e){return a.createElement(va,{input:e.input,value:e.value,onChange:e.onChange,dimNames:Aa(e),multi:!0})})),Object(s.a)(Sa,ct.g,(function(e){return a.createElement(ya.a,{input:e.input,value:e.value,onChange:e.onChange})})),Object(s.a)(Sa,ct.j,Da),Object(s.a)(Sa,ct.n,(function(e){return a.createElement(ga.a,{input:e.input,value:e.value,onChange:e.onChange})})),Sa);function Ta(e){var t,n=e.input.valueSetSource,a=e.resources,r=e.inputAssignments;if(n&&a&&r){var o=r[n],i=o.resourceName;o&&i&&!o.isValueUsed&&(t=a.find((function(e){return e.name===i})))}return t}function Aa(e){var t,n,a,r=e.input.valueSetSource.split("."),o=e.resources,i=e.inputAssignments;if(r[0]&&o&&i){var l=i[r[0]],c=l.resourceName;l&&c&&!l.isValueUsed&&(t=o.find((function(e){return e.name===c})))}if(t){var s=t.variables;if(r[1]&&s&&i){var u=i[r[1]];if(u&&u.constantValue){var d=u.constantValue.textValue;n=s.find((function(e){return e.name===d}))}}}return r[0]&&r[1]&&n?a=n.dimNames:r[0]&&!r[1]&&t&&(a=t.coordVariables.map((function(e){return e.name}))),a}var Na=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onConstantValueChange=a.onConstantValueChange.bind(Object(ie.a)(a)),a.onResourceNameChange=a.onResourceNameChange.bind(Object(ie.a)(a)),a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onValidate=a.onValidate.bind(Object(ie.a)(a)),a.onDefaults=a.onDefaults.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.hideValidationDialog=a.hideValidationDialog.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.renderExtraActions=a.renderExtraActions.bind(Object(ie.a)(a)),a.state=n.mapPropsToState(e),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(n.mapPropsToState(e))}},{key:"onConfirm",value:function(){var e,t="editOperationStepDialog"===this.props.id,n=!t,a=this.props.operation;n&&(e=Object(s.a)({},a.qualifiedName,this.state.inputAssignments)),this.props.dispatch(c.Ob(this.props.id,e)),this.props.dispatch(c.Tc(a.qualifiedName,this.getInputArguments(),this.props.resName,t,'Executing operation "'.concat(a.name,'"')))}},{key:"canConfirm",value:function(){return!this.getInputErrors()}},{key:"onCancel",value:function(){this.props.dispatch(c.Ob(this.props.id))}},{key:"onValidate",value:function(){var e=this.getInputErrors();this.setState({isValidationDialogOpen:!0,inputErrors:e})}},{key:"hideValidationDialog",value:function(){this.setState({isValidationDialogOpen:!1})}},{key:"getInputArguments",value:function(){return function(e,t){var n={};return e.forEach((function(e){var a=t[e.name];if(a){var r;if(a.isValueUsed){var o=a.constantValue;r={value:Object(Pn.b)(o)?o.value:o}}else r={source:a.resourceName};n[e.name]=r}})),n}(this.props.operation.inputs,this.state.inputAssignments)}},{key:"getInputErrors",value:function(){return function(e,t){var n={},a=!1;return e.forEach((function(e){var r=t[e.name];if(r)if(r.isValueUsed){var o=r.constantValue,i=Object(Pn.b)(o)&&o.error;i?(n[e.name]=i,a=!0):Object(v.g)(o)&&!e.nullable&&(n[e.name]=new Error("Value must be given."),a=!0)}else{var l=r.resourceName;Object(v.g)(l)&&!e.nullable&&(n[e.name]=new Error("Resource must be specified."),a=!0)}else n[e.name]=new Error("Value must be specified."),a=!0})),a?n:null}(this.props.operation.inputs,this.state.inputAssignments)}},{key:"onDefaults",value:function(){var e=xa(this.props.operation.inputs,this.state.inputAssignments,!0);this.setState({inputAssignments:e})}},{key:"setInputAssignment",value:function(e,t){var n=Object(b.b)(this.state.inputAssignments,e.name,t);this.setState({inputAssignments:n})}},{key:"onResourceNameChange",value:function(e,t,n){""===t&&e.nullable&&(t=null),this.setInputAssignment(e,{resourceName:t,isValueUsed:n})}},{key:"onConstantValueChange",value:function(e,t){this.setInputAssignment(e,{constantValue:t,isValueUsed:!0})}},{key:"render",value:function(){if(!this.props.isOpen)return null;var e,t,r,o=this.props.operation;return"editOperationStepDialog"===this.props.id?(e="Edit Step",t="Edit Operation Step - ".concat(o.name),r="Edit operation step inputs and recompute output."):(e="Add Step",t="Add Operation Step - ".concat(o.name),r="Add a new operation step to the workspace\u2019s workflow."),a.createElement(Dt.a,{isOpen:!0,icon:"function",title:t,confirmTooltip:r,confirmTitle:e,confirmIconName:"play",onConfirm:this.onConfirm,onCancel:this.onCancel,canConfirm:this.canConfirm,renderBody:this.renderBody,renderExtraActions:this.renderExtraActions,style:n.DIALOG_STYLE})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.props.operation,t=a.createElement("p",{key:"header",style:{marginBottom:"1em"}},"Adjustable parameter(s) for operation ",a.createElement("code",null,e.name),":"),n=a.createElement("p",{key:"footer",style:{marginTop:"1em"}},"Pressing ",a.createElement(ue.Icon,{icon:"play"})," will add operation ",a.createElement("code",null,e.name)," as a new workflow step to the current workspace. The result of the step is a new ",a.createElement("em",null,"resource")," which can be used as input for other operations. You can remove the step or change its parameters later."),r=this.renderParameterPanel();return a.createElement(ue.FormGroup,null,t,a.createElement("div",null,r,a.createElement("div",{className:"bp3-form-helper-text"},n)),a.createElement(Ma,{isOpen:this.state.isValidationDialogOpen,inputErrors:this.state.inputErrors,onConfirm:this.hideValidationDialog}))}},{key:"renderExtraActions",value:function(){return this.props.isOpen?[a.createElement(ue.Tooltip,{key:"validate",content:"Validate current input values"},a.createElement(ue.AnchorButton,{onClick:this.onValidate},"Validate")),a.createElement(ue.Tooltip,{key:"defaults",content:"Set all inputs back to default values"},a.createElement(ue.AnchorButton,{onClick:this.onDefaults},"Defaults"))]:null}},{key:"renderParameterPanel",value:function(){var e=this.props.operation;if(!e.inputs||!e.inputs.length)return null;var t,r,o,i,l,c,s=(t=e.inputs,r=this.state.inputAssignments,o=this.props.workspace.resources,i=this.props.geometryWKTGetter,l=this.onConstantValueChange,c=this.onResourceNameChange,t.filter((function(e){return!e.noUI})).map((function(e){var t=r[e.name],n=t.constantValue,s=Ia({input:e,inputAssignments:r,resources:o,geometryWKTGetter:i,value:n,onChange:l});return a.createElement(ta,{key:e.name,resources:o,name:e.name,dataType:e.dataType,units:e.units,tooltipText:e.description,onChange:function(t,n){return c(e,t,n)},isValueEditorShown:t.isValueUsed,resourceName:t.resourceName,valueEditor:s})})));return a.createElement("div",{key:"parameterPanel",style:n.PARAMETER_PANEL_STYLE},s)}}],[{key:"mapPropsToState",value:function(e){return e.isOpen?{inputAssignments:xa(e.operation.inputs,e.inputAssignments,!1)}:n.NO_STATE}}]),n}(a.Component);Na.DIALOG_STYLE={width:"42em"},Na.NO_STATE={inputAssignments:{}},Na.PARAMETER_PANEL_STYLE={display:"grid",gridTemplateColumns:"auto auto 28px",alignItems:"center",justifyItems:"stretch",rowGap:"1ex",columnGap:"0.5em"};var Ra=Object(o.b)((function(e,t){var n=t.id,a=Oe.x(n)(e),r=a.isOpen;if(!r)return{id:n,isOpen:!1};var o,i,l=null;if("newOperationStepDialog"===n){if(!(o=Oe.wb(e)))return console.error("OperationStepDialog: operation is undefined: dialog id =",n),{id:n,isOpen:!1};var c=a.inputAssignments;i=c&&c[o.qualifiedName]}else if("newCtxOperationStepDialog"===n){if(!(o=Oe.fb(e)))return console.error("OperationStepDialog: operation is undefined: dialog id =",n),{id:n,isOpen:!1};i=a.inputAssignments}else{if("editOperationStepDialog"!==n)return console.error("OperationStepDialog: unknown dialog id =",n),{id:n,isOpen:!1};var s=t.operationStep;if(!(o=(Oe.T(e)||[]).find((function(e){return e.name===s.op||e.qualifiedName===s.op}))))return console.error("OperationStepDialog: operation is undefined: dialog id =",n),{id:n,isOpen:!1};i=function(e,t){var n,a={},r=Object(g.a)(e.inputs);try{for(r.s();!(n=r.n()).done;){var o=n.value,i=t.inputs[o.name];if(i){var l=Object(v.e)(i)?i:i.source;if(l)a[o.name]={resourceName:l,isValueUsed:!1};else if(!Object(v.f)(i.value)){var c=i.value;a[o.name]={constantValue:c,isValueUsed:!0}}}}}catch(s){r.e(s)}finally{r.f()}return a}(o,s),l=s.id}return{id:n,isOpen:r,workspace:Oe.oc(e),geometryWKTGetter:Oe.nb(e),resName:l,operation:o,inputAssignments:i}}))(Na);function xa(e,t,n){var a={};return e.forEach((function(e){var r,o=!!Pa(e.dataType),i={constantValue:Object(v.b)(e.defaultValue)?e.defaultValue:null,isValueUsed:o,resourceName:null},l=t&&t[e.name];r=!l||n?i:l||i,a[e.name]=r})),a}var Ma=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onConfirm",value:function(){this.props.onConfirm()}},{key:"countResourceProblems",value:function(){var e=this.props.inputErrors,t=0;return Object.getOwnPropertyNames(e).forEach((function(n){var a=e[n];a.message&&(a.message.includes("resource")||a.message.includes("Resource"))&&t++})),t}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:"Input Validation",onConfirm:this.onConfirm,noCancelButton:!0,onCancel:this.onConfirm,renderBody:this.renderBody})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.props.inputErrors;if(!e)return a.createElement("p",null,"No problems encountered.");var t=Va(e,this.countResourceProblems());return t||a.createElement("p",null,"No problems encountered.")}}]),n}(a.Component);function Va(e,t){var n,r=[];if(Object.getOwnPropertyNames(e).forEach((function(t){var n=e[t];r.push(a.createElement("li",{key:t},t,": ",n.message))})),0===r.length)return null;n=1===r.length?"The following problem has been encountered:":"The following ".concat(r.length," problems have been encountered:");var o=t&&t>0?a.createElement("p",null,"This operation has parameter(s) which require specifying a ",a.createElement("em",null,"resource"),". When there are no compatible resources yet, you may consider opening a data source or use one of the ",a.createElement("code",null,"read_...")," operations first."):null;return a.createElement(ue.FormGroup,null,n,a.createElement("div",{className:"bp3-form-content"},r,a.createElement("div",{className:"bp3-form-helper-text"},o)))}var Ba=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onOptionsChange=a.onOptionsChange.bind(Object(ie.a)(a)),a.state=n.mapPropsToState(e),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(n.mapPropsToState(e))}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"canConfirm",value:function(){return ea.validateOptions(this.isLocalDataStore,this.state.options)}},{key:"onConfirm",value:function(){var e=this.props.canCache&&this.state.options.isCacheDataSourceSelected,t=Object(d.a)(Object(d.a)({},this.state.options),{},{isCacheDataSourceSelected:e}),a=this.isRemoteDataStore?"":void 0,r={options:Object(d.a)(Object(d.a)({},t),{},{makeLocalDataSourceId:a,makeLocalDataSourceTitle:a,hasVariablesConstraint:!1,variableNames:null})};this.props.dispatch(c.Nb(n.DIALOG_ID,r)),this.props.dispatch(c.ec(this.props.dataStore.id,this.props.dataSource.id,ea.optionsToOperationArguments(this.state.options),this.isRemoteDataStore&&e)),this.setState(r)}},{key:"onOptionsChange",value:function(e){this.setState({options:e})}},{key:"render",value:function(){var e=this.props.isOpen;if(!e)return null;var t=this.isRemoteDataStore&&this.state.options.isCacheDataSourceSelected,n=Va(ea.optionsToErrors(this.state.options));return a.createElement(Dt.a,{isOpen:e,title:"Open Dataset",icon:"database",confirmTitle:t?"Cache and Open":"Open",confirmIconName:"folder-shared-open",confirmTooltip:n,onCancel:this.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody})}},{key:"renderBody",value:function(){return this.props.isOpen?a.createElement(ea,{options:this.state.options,onChange:this.onOptionsChange,dataSource:this.props.dataSource,isLocalDataSource:this.isLocalDataStore,temporalCoverage:this.props.temporalCoverage,canConstrainTime:this.props.canConstrainTime,canConstrainRegion:this.props.canConstrainRegion,canConstrainVariables:this.props.canConstrainVariables,canCache:this.props.canCache}):null}},{key:"isRemoteDataStore",get:function(){return Object(B.Y)(this.props.dataStore)}},{key:"isLocalDataStore",get:function(){return Object(B.X)(this.props.dataStore)}}],[{key:"mapPropsToState",value:function(e){var t=e.options||ea.defaultOptions(Object(B.X)(e.dataStore),e.temporalCoverage),n=e.canCache&&t.isCacheDataSourceSelected;return t=ea.ensureDateRangeIsValidated(t,e.temporalCoverage),{options:t=Object(d.a)(Object(d.a)({},t),{},{isCacheDataSourceSelected:n})}}}]),n}(a.Component);Ba.DIALOG_ID="openDatasetDialog";var Wa=Object(o.b)((function(e){var t=Oe.x(Ba.DIALOG_ID)(e);return{isOpen:t.isOpen,dataStore:Oe.lb(e),dataSource:Oe.hb(e),temporalCoverage:Oe.ib(e),canConstrainTime:Oe.o(e),canConstrainRegion:Oe.n(e),canConstrainVariables:Oe.p(e),canCache:Oe.m(e),options:t.options}}))(Ba);var Fa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).state={removeFiles:!1},a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onRemoveFilesChange=a.onRemoveFilesChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({removeFiles:!1})}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID,this.state)),this.props.dispatch(c.jc(this.props.dataSource.id,this.state.removeFiles))}},{key:"onRemoveFilesChange",value:function(e){this.setState({removeFiles:e.target.checked})}},{key:"render",value:function(){var e=this.props.isOpen;return e&&this.props.dataSource?a.createElement(Dt.a,{isOpen:e,title:"Remove Data Source",icon:"trash",confirmTitle:"Remove",confirmIconName:"delete",confirmTooltip:"Remove the file data source.",onCancel:this.onCancel,onConfirm:this.onConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){return this.props.isOpen?a.createElement("div",null,a.createElement(Vn,{label:"You are about to remove the definition for the file data source",longId:this.props.dataSource.id}),a.createElement(ue.Checkbox,{style:{marginTop:"1em"},checked:this.state.removeFiles,label:"Remove data files from disk too",onChange:this.onRemoveFilesChange})):null}}]),n}(a.Component);Fa.DIALOG_ID="removeDatasetDialog";var Ua=Object(o.b)((function(e){return{isOpen:Oe.x(Fa.DIALOG_ID)(e).isOpen,dataSource:Oe.hb(e)}}))(Fa),Ga={default:ue.Intent.NONE,primary:ue.Intent.PRIMARY,success:ue.Intent.SUCCESS,warning:ue.Intent.WARNING,danger:ue.Intent.DANGER};var Ya={setSelectedDataStoreId:c.Ec,setSelectedDataSourceId:c.Dc,setDataSourceFilterExpr:c.uc,setSessionState:c.Pc,setControlState:c.tc,updateSessionState:c.rd,refreshLocalDataStore:c.hc,showDialog:c.Vc,hideDialog:c.Nb},Ha=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleAddDatasetDialog=a.handleAddDatasetDialog.bind(Object(ie.a)(a)),a.handleRemoveDatasetDialog=a.handleRemoveDatasetDialog.bind(Object(ie.a)(a)),a.handleShowOpenDatasetDialog=a.handleShowOpenDatasetDialog.bind(Object(ie.a)(a)),a.handleRefreshLocalDataStore=a.handleRefreshLocalDataStore.bind(Object(ie.a)(a)),a.handleListHeightChanged=a.handleListHeightChanged.bind(Object(ie.a)(a)),a.handleShowDetailsChanged=a.handleShowDetailsChanged.bind(Object(ie.a)(a)),a.handleDataStoreSelected=a.handleDataStoreSelected.bind(Object(ie.a)(a)),a.handleShowDataStoreDescriptionChanged=a.handleShowDataStoreDescriptionChanged.bind(Object(ie.a)(a)),a.handleShowDataStoreNoticesChanged=a.handleShowDataStoreNoticesChanged.bind(Object(ie.a)(a)),a.handleShowAllDataSourcesChanged=a.handleShowAllDataSourcesChanged.bind(Object(ie.a)(a)),a.handleShowDataSourceIDsChanged=a.handleShowDataSourceIDsChanged.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"render",value:function(){if(!(this.props.dataStores&&this.props.dataStores.length))return this.renderNoDataStoreMessage();var e=this.props.selectedDataSources&&this.props.selectedDataSources.length,t=this.props.selectedDataSource,r=Object(B.X)(this.props.selectedDataStore),o=!!t&&!Object(B.o)(t),i=t&&this.props.hasWorkspace&&!o,l=a.createElement(ue.ButtonGroup,null,r&&a.createElement(kt,{tooltipContent:"Refresh local data store",onClick:this.handleRefreshLocalDataStore,icon:"refresh",tooltipPosition:"top"}),o&&a.createElement(ue.Popover,{popoverClassName:ue.Classes.POPOVER_CONTENT_SIZING,enforceFocus:!1,interactionKind:ue.PopoverInteractionKind.HOVER,position:ue.Position.TOP},a.createElement(kt,{icon:"warning-sign",intent:ue.Intent.WARNING}),a.createElement(On,{isSandboxedMode:this.props.isSandboxedMode,dataSource:t})),a.createElement(kt,{tooltipContent:"Open data source",intent:ue.Intent.PRIMARY,onClick:this.handleShowOpenDatasetDialog,disabled:!i,icon:"folder-shared-open",tooltipPosition:"top"}),a.createElement(Cn,null),a.createElement(Ua,null),a.createElement(Wa,null));return a.createElement("div",null,this.renderDataStoreSelector(),a.createElement("div",{style:n.FLEX_ROW_STYLE},a.createElement("span",{style:n.SPACER_STYLE}),a.createElement(ue.Tooltip,{content:a.createElement("div",null,"List also datasets that cannot be opened directly.",a.createElement("br",null),"Usually they can be downloaded manually, then",a.createElement("br",null),"opened by one of the ",a.createElement("code",null,"read_xxx()")," operations.")},a.createElement(ue.Checkbox,{label:"All data sources",checked:this.props.showAllDataSources,onChange:this.handleShowAllDataSourcesChanged,style:{marginBottom:2,marginTop:6,marginRight:6}})),a.createElement(ue.Checkbox,{label:"Show identifiers",checked:this.props.showDataSourceIDs,onChange:this.handleShowDataSourceIDsChanged,style:{marginBottom:2,marginTop:6}})),this.renderDataSourceFilterExprInput(),a.createElement(Gt,{showDetails:this.props.showDataSourceDetails,onShowDetailsChange:this.handleShowDetailsChanged,isSplitPanel:!0,contentHeight:this.props.dataSourceListHeight,onContentHeightChange:this.handleListHeightChanged,actionComponent:l},e?a.createElement(gn,{dataSources:this.props.filteredDataSources,selectedDataSourceId:this.props.selectedDataSource?this.props.selectedDataSource.id:null,setSelectedDataSourceId:this.props.setSelectedDataSourceId,showDataSourceIDs:this.props.showDataSourceIDs,doubleClickAction:i?this.handleShowOpenDatasetDialog:void 0}):this.renderNoDataSourcesMessage(),a.createElement(an,{dataSource:this.props.selectedDataSource})))}},{key:"handleAddDatasetDialog",value:function(){this.props.showDialog("addDatasetDialog")}},{key:"handleRemoveDatasetDialog",value:function(){this.props.showDialog("removeDatasetDialog")}},{key:"handleRefreshLocalDataStore",value:function(){this.props.refreshLocalDataStore()}},{key:"handleShowOpenDatasetDialog",value:function(){this.props.showDialog("openDatasetDialog")}},{key:"handleDataStoreSelected",value:function(e){var t=e.target.value;this.props.setSelectedDataStoreId(t)}},{key:"handleListHeightChanged",value:function(e){this.props.setSessionState("dataSourceListHeight",e)}},{key:"handleShowDetailsChanged",value:function(e){this.props.setSessionState("showDataSourceDetails",e)}},{key:"handleShowDataStoreDescriptionChanged",value:function(){this.props.updateSessionState({showDataStoreDescription:!this.props.showDataStoreDescription})}},{key:"handleShowDataStoreNoticesChanged",value:function(){this.props.updateSessionState({showDataStoreNotices:!this.props.showDataStoreNotices})}},{key:"handleShowAllDataSourcesChanged",value:function(e){this.props.updateSessionState({showAllDataSources:e.target.checked})}},{key:"handleShowDataSourceIDsChanged",value:function(e){this.props.updateSessionState({showDataSourceIDs:e.target.checked})}},{key:"renderDataSourceFilterExprInput",value:function(){var e=this,t=a.createElement(ue.Tag,{className:ue.Classes.MINIMAL,onRemove:function(){return e.props.setDataSourceFilterExpr("")}},this.props.filteredDataSources&&this.props.filteredDataSources.length);return a.createElement("div",{style:{paddingBottom:2}},a.createElement(ue.InputGroup,{disabled:!1,leftIcon:"filter",onChange:function(t){return e.props.setDataSourceFilterExpr(t.target.value)},placeholder:"Find data source",rightElement:t,value:this.props.dataSourceFilterExpr}))}},{key:"renderDataStoreSelector",value:function(){if(!this.props.dataStores||!this.props.dataStores.length)return null;var e,t=[],r=Object(g.a)(this.props.dataStores);try{for(r.s();!(e=r.n()).done;){var o=e.value;t.push(a.createElement("option",{key:o.id,value:o.id},o.title||o.id))}}catch(h){r.e(h)}finally{r.f()}var i,l=this.props,c=l.selectedDataStore,s=l.showDataStoreDescription,u=c&&c.description,d=c&&c.notices&&c.notices.length;if(u&&(i=a.createElement(ue.Collapse,{isOpen:s},a.createElement(ue.Card,null,a.createElement($t,{source:c.description})))),d){var p=[];c.notices.forEach((function(e){p.push(a.createElement("div",{key:e.id,style:{margin:"0 4px 4px 4px"}},a.createElement(ue.Callout,{title:e.title,icon:e.icon,intent:e.intent in Ga?Ga[e.intent]:ue.Intent.NONE},a.createElement($t,{source:e.content}))))}))}return a.createElement(a.Fragment,null,a.createElement("div",{style:n.FLEX_ROW_STYLE},a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_STYLE},a.createElement("span",{style:n.LABEL_TEXT_STYLE},"Data store:"),a.createElement(ue.HTMLSelect,{fill:!0,style:n.SELECT_STYLE,value:c?c.id:"",onChange:this.handleDataStoreSelected},t)),a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:"Show/hide data store description",onClick:this.handleShowDataStoreDescriptionChanged,disabled:!u,active:s,icon:"help",tooltipPosition:"top"}))),i)}},{key:"renderNoDataStoreMessage",value:function(){return we}},{key:"renderNoDataSourcesMessage",value:function(){var e=this.props.selectedDataStore;return Object(B.X)(e)?Se:null===this.props.selectedDataSources?je:Ie}}]),n}(a.Component);Ha.FLEX_ROW_STYLE={display:"flex",alignItems:"center",marginBottom:1},Ha.SPACER_STYLE={flex:1},Ha.LABEL_STYLE={margin:"0 0.5em 0 0",display:"flex",flexGrow:1},Ha.LABEL_TEXT_STYLE={minWidth:"5em",overflow:"hidden",whiteSpace:"nowrap"},Ha.SELECT_STYLE={flexGrow:1};var Ka=Object(o.b)((function(e){return{hasWorkspace:!!Oe.oc(e),dataStores:Oe.u(e),dataSourceFilterExpr:Oe.s(e),selectedDataStore:Oe.lb(e),selectedDataSource:Oe.hb(e),selectedDataSources:Oe.jb(e),filteredDataSources:Oe.C(e),dataSourceListHeight:Oe.t(e),showDataSourceDetails:Oe.Sb(e),showAllDataSources:Oe.Rb(e),showDataSourceIDs:Oe.Tb(e),showDataStoreDescription:Oe.Ub(e),showDataStoreNotices:Oe.Vb(e),offlineMode:Oe.P(e),isSandboxedMode:!Oe.I(e)}}),Ya)(Ha);var za={margin:6,padding:10},qa=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleOperationSelection=a.handleOperationSelection.bind(Object(ie.a)(a)),a.handleOperationFilterExprCleared=a.handleOperationFilterExprCleared.bind(Object(ie.a)(a)),a.handleOperationFilterExprChange=a.handleOperationFilterExprChange.bind(Object(ie.a)(a)),a.handleListHeightChanged=a.handleListHeightChanged.bind(Object(ie.a)(a)),a.handleShowDetailsChanged=a.handleShowDetailsChanged.bind(Object(ie.a)(a)),a.handleAddOperationStepButtonClicked=a.handleAddOperationStepButtonClicked.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"render",value:function(){var e,t=this.props.operations;if(t&&t.length){var n=this.props.operationFilterExpr,r=this.renderOperationTagFilterPanel(),o=this.renderOperationsList(),i=this.renderOperationDetailsCard(),l=a.createElement(ue.Tag,{className:ue.Classes.MINIMAL,onRemove:this.handleOperationFilterExprCleared},this.props.filteredOperations.length),c=a.createElement(ue.InputGroup,{disabled:!1,leftIcon:"filter",onChange:this.handleOperationFilterExprChange,placeholder:"Find operation",rightElement:l,value:n}),s=this.props.selectedOperation&&this.props.workspace,u=a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:a.createElement("span",null,"Add a new operation step to",a.createElement("br",null),"the workspace's workflow"),intent:ue.Intent.PRIMARY,onClick:this.handleAddOperationStepButtonClicked,disabled:!s,text:"Add Step...",icon:"play",tooltipPosition:"top"}),s?a.createElement(Ra,{id:"newOperationStepDialog"}):null);e=a.createElement("div",null,c,r,a.createElement(Gt,{showDetails:this.props.showOperationDetails,onShowDetailsChange:this.handleShowDetailsChanged,isSplitPanel:!0,contentHeight:this.props.operationListHeight,onContentHeightChange:this.handleListHeightChanged,actionComponent:u},o,i))}else e=this.renderNoOperationsMessage();return e}},{key:"handleListHeightChanged",value:function(e){this.props.dispatch(c.Pc("operationListHeight",e))}},{key:"handleShowDetailsChanged",value:function(e){this.props.dispatch(c.Pc("showOperationDetails",e))}},{key:"handleOperationSelection",value:function(e){e.length>0?this.props.dispatch(c.Ic(e[0])):this.props.dispatch(c.Ic(null))}},{key:"handleOperationFilterExprCleared",value:function(){this.props.dispatch(c.Ac(""))}},{key:"handleOperationFilterExprChange",value:function(e){this.props.dispatch(c.Ac(e.target.value))}},{key:"handleAddOperationStepButtonClicked",value:function(){this.props.dispatch(c.dd("newOperationStepDialog"))}},{key:"renderOperationsList",value:function(){return a.createElement(tn,null,a.createElement(yn.a,{items:this.props.filteredOperations,getItemKey:n.getItemKey,renderItem:n.renderItem,selectionMode:yn.b.SINGLE,selection:this.props.selectedOperationName,onSelection:this.handleOperationSelection,onItemDoubleClick:this.handleAddOperationStepButtonClicked}))}},{key:"renderOperationTagFilterPanel",value:function(){var e=this,t=new Set(this.props.operationFilterTags),n=this.props.operationsTagCounts,r={marginRight:"0.2em",marginTop:"0",marginBottom:"0",paddingTop:"0",paddingBottom:"0",height:"4ex"},o=[];t.forEach((function(t){o.push(a.createElement(ue.Tag,{intent:ue.Intent.PRIMARY,minimal:!0,style:r,onRemove:function(){return e.removeTagName(t)}},"".concat(t)))}));var i=[];n.forEach((function(n,r){t.has(r)||i.push(a.createElement(ue.MenuItem,{key:r,text:"".concat(r," (").concat(n,")"),onClick:function(){return e.addTagName(r)}}))}));var l=null;if(i.length){var c=a.createElement(ue.Menu,null,i);l=a.createElement(ue.Popover,{content:c,interactionKind:ue.PopoverInteractionKind.CLICK},a.createElement(ue.Tag,{intent:ue.Intent.SUCCESS,minimal:!0,icon:"small-plus",style:r}))}return a.createElement("div",{style:{padding:"0.2em",display:"flex",alignItems:"center"}},l,o)}},{key:"addTagName",value:function(e){var t=new Set(this.props.operationFilterTags);t.add(e),this.props.dispatch(c.Bc(Array.from(t)))}},{key:"removeTagName",value:function(e){var t=new Set(this.props.operationFilterTags);t.delete(e),this.props.dispatch(c.Bc(Array.from(t)))}},{key:"renderOperationDetailsCard",value:function(){var e=this.props.selectedOperation,t="No selection",r=null,o=null,i=null,l=null;if(e){if(t=e.name,e.description&&(r=a.createElement("p",{className:"user-selectable"},a.createElement($t,{source:e.description}))),e.tags&&(o=a.createElement("p",null,a.createElement("strong",null,"Tags:")," ",e.tags.join(", "))),e.outputs&&e.outputs.length){var c=e.outputs.map((function(e){return a.createElement("li",{key:e.name},a.createElement(Kn,{label:e.name,em:!0,dataType:e.dataType,units:e.units}),a.createElement($t,{source:n.getOutputDescriptionText(e)}))}));l=a.createElement("div",null,a.createElement("p",null,a.createElement("strong",null,n.getMultiplicityText(e.outputs.length,"Output")+":")),a.createElement("ul",null,c))}if(e.inputs&&e.inputs.length){var s=e.inputs.map((function(e){return a.createElement("li",{key:e.name},a.createElement(Kn,{label:e.name,em:!0,dataType:e.dataType,units:e.units}),a.createElement($t,{source:n.getInputDescriptionText(e)}))}));i=a.createElement("div",null,a.createElement("p",null,a.createElement("strong",null,n.getMultiplicityText(e.outputs.length,"Input")+":")),a.createElement("ul",null,s))}}return a.createElement(tn,null,a.createElement(ue.Card,{elevation:2,style:za},a.createElement("h3",{className:"user-selectable"},t),r,o,l,i))}},{key:"renderNoOperationsMessage",value:function(){return Pe}}],[{key:"getItemKey",value:function(e){return e.name}},{key:"renderItem",value:function(e){var t,n=e.name;return t=e.outputs.length?1===e.outputs.length?e.outputs[0].dataType:"".concat(e.outputs.length," types"):"",a.createElement(Kn,{label:n,dataType:t})}},{key:"formatPortDescriptionText",value:function(e){return e&&""!==e?((e=e.trim()).endsWith(".")||(e+=".")," - "+e):e}},{key:"getInputDescriptionText",value:function(e){var t=n.formatPortDescriptionText(e.description);return"undefined"===typeof e.defaultValue?t+=" Mandatory value.":t+=' Default value is "'.concat(e.defaultValue,'".'),t}},{key:"getOutputDescriptionText",value:function(e){return n.formatPortDescriptionText(e.description)}},{key:"getMultiplicityText",value:function(e,t,n){return 1===e?t:n||t+"s"}}]),n}(a.Component),Ja=Object(o.b)((function(e){return{workspace:e.data.workspace,operations:Oe.T(e),selectedOperation:Oe.wb(e),filteredOperations:Oe.D(e),selectedOperationName:Oe.vb(e),operationFilterTags:Oe.S(e)||Oe.a,operationFilterExpr:Oe.R(e),operationsTagCounts:Oe.U(e),operationListHeight:e.session.operationListHeight,showOperationDetails:e.session.showOperationDetails}}))(qa);var Xa=Object(o.b)((function(e){return{webAPIStatus:e.communication.webAPIStatus,webAPIServiceInfo:e.communication.webAPIServiceInfo}}))((function(e){var t=e.webAPIStatus,n=e.webAPIServiceInfo,r=function(){window.location.reload()};switch(t){case"open":return null;case"login":return a.createElement($a,{message:"Logging in...",icon:"log-in",isWaiting:!0});case"launching":return a.createElement($a,{message:"Launching Cate service...",icon:"log-in",isWaiting:!0});case"connecting":return a.createElement($a,{message:"Connecting to Cate service...",icon:"log-in",isWaiting:!0});case"shuttingDown":return a.createElement($a,{message:"Shutting down Cate service...",icon:"log-out",isWaiting:!0});case"loggingOut":return a.createElement($a,{message:"Logging out...",icon:"log-out",isWaiting:!0});case"closed":var o,i=n.autoStopInfo;return i&&i.inactivityTime>=i.availableTime-5?(o='Cate service has been shut down due to inactivity. Press "Retry" to try reconnecting.',a.createElement($a,{message:o,icon:"offline",isWaiting:!1,onRetry:r})):(o="The connection to the Cate service has been closed unexpectedly.",a.createElement(er,{message:o,icon:"offline",onRetry:r}));case"error":return a.createElement(er,{message:"Oops! An error occurred while launching or connecting the Cate service.",icon:"offline",onRetry:r});default:return a.createElement(er,{message:"Oops! No service available.",icon:"offline"})}})),Za={marginTop:12},Qa={marginTop:6,textAlign:"center",width:"100%"},$a=function(e){var t,n,r=e.message,o=e.icon,i=e.isWaiting,l=e.onRetry,c=e.onCancel;if(i&&(t=a.createElement("div",{style:Za},a.createElement(ue.ProgressBar,{intent:ue.Intent.SUCCESS}))),l||c){var s=c?a.createElement(ue.Button,{onClick:c,intent:ue.Intent.PRIMARY},"Cancel"):null,u=l?a.createElement(ue.Button,{onClick:l},"Retry"):null;n=a.createElement("div",{className:ue.Classes.DIALOG_FOOTER},a.createElement("div",{className:ue.Classes.DIALOG_FOOTER_ACTIONS},s,u))}return a.createElement(ue.Dialog,{isOpen:!0,canEscapeKeyClose:!1,canOutsideClickClose:!1},a.createElement("div",{className:ue.Classes.DIALOG_BODY},a.createElement("div",{style:Qa},a.createElement(ue.Icon,{icon:o,iconSize:32})),a.createElement("div",{style:Za},r),t),n)},er=function(e){var t=e.message,n=e.icon,r=e.isWaiting,o=e.onRetry,i=e.onCancel;return a.createElement($a,{message:t,icon:n,isWaiting:r,onRetry:o,onCancel:i})};var tr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.state=n.mapPropsToState(e),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(n.mapPropsToState(e))}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb("workflowStepPropertiesDialog"));var e=this.props.selectedWorkflowStep.id||"",t=this.state.stepId?this.state.stepId.trim():"",n=this.props.selectedWorkflowStep.persistent||!1,a=this.state.stepPersistent||!1;n!==a&&this.props.dispatch(c.Uc(e,a)),e!==t&&this.props.dispatch(c.mc(e,t))}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb("workflowStepPropertiesDialog"))}},{key:"canConfirm",value:function(){var e=this.props.selectedWorkflowStep.id||"",t=this.state.stepId?this.state.stepId.trim():"",n=this.props.selectedWorkflowStep.persistent||!1,a=this.state.stepPersistent||!1,r=/^[a-zA-z_][a-zA-z0-9_]*$/.test(t);return""!==t&&(t!==e||a!==n)&&r}},{key:"render",value:function(){return this.props.isOpen?a.createElement(Dt.a,{isOpen:this.props.isOpen,title:"Workflow Step & Resource Properties",icon:"edit",onCancel:this.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){var e=this;return this.props.isOpen?a.createElement("div",{style:{width:"100%",padding:6}},a.createElement(ue.Label,null,"Resource name",a.createElement("span",{className:"bp3-text-muted"}," (must be unique within the workspace)"),a.createElement(ue.InputGroup,{style:{width:"100%"},type:"text",value:this.state.stepId,onChange:function(t){return e.setState({stepId:t.target.value})}}),a.createElement("span",{className:"bp3-text-muted"},"The Resource name must only contain the uppercase and lowercase letters A through Z, the underscore _ and, except for the first character, the digits 0 through 9.")),a.createElement("div",{style:{paddingTop:10}},a.createElement(ue.Checkbox,{checked:this.state.stepPersistent,onChange:function(t){return e.setState({stepPersistent:t.target.checked})},label:"Persist resulting resource"}),a.createElement("span",{className:"bp3-text-muted"},"If checked, the resource will be read from a file in the workspac next time the workspace is opened. This usually speeds up the loading of workspace, but requires extra disk space."))):null}}],[{key:"mapPropsToState",value:function(e){var t=e.selectedWorkflowStep;return f.a(t),{stepId:t.id||"",stepPersistent:t.persistent||!1}}}]),n}(a.Component),nr=Object(o.b)((function(e,t){return{selectedWorkflowStep:t.selectedWorkflowStep,isOpen:Oe.x("workflowStepPropertiesDialog")(e).isOpen,resources:Oe.bb(e)}}))(tr);var ar=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleResourceListHeightChanged=a.handleResourceListHeightChanged.bind(Object(ie.a)(a)),a.handleShowResourceDetailsChanged=a.handleShowResourceDetailsChanged.bind(Object(ie.a)(a)),a.handleResourceNameSelected=a.handleResourceNameSelected.bind(Object(ie.a)(a)),a.handleStepListHeightChanged=a.handleStepListHeightChanged.bind(Object(ie.a)(a)),a.handleShowWorkflowStepDetailsChanged=a.handleShowWorkflowStepDetailsChanged.bind(Object(ie.a)(a)),a.handleWorkflowStepIdSelected=a.handleWorkflowStepIdSelected.bind(Object(ie.a)(a)),a.handleShowFigureButtonClicked=a.handleShowFigureButtonClicked.bind(Object(ie.a)(a)),a.handleWorkflowStepPropertiesButtonClicked=a.handleWorkflowStepPropertiesButtonClicked.bind(Object(ie.a)(a)),a.handleOpenWorkspaceDirectoryClicked=a.handleOpenWorkspaceDirectoryClicked.bind(Object(ie.a)(a)),a.handleEditOperationStepButtonClicked=a.handleEditOperationStepButtonClicked.bind(Object(ie.a)(a)),a.renderStepItem=a.renderStepItem.bind(Object(ie.a)(a)),a.renderResourceAttrName=a.renderResourceAttrName.bind(Object(ie.a)(a)),a.renderResourceAttrValue=a.renderResourceAttrValue.bind(Object(ie.a)(a)),a.renderOperationStepInputName=a.renderOperationStepInputName.bind(Object(ie.a)(a)),a.renderOperationStepInputValue=a.renderOperationStepInputValue.bind(Object(ie.a)(a)),a.renderOperationStepOutputName=a.renderOperationStepOutputName.bind(Object(ie.a)(a)),a.renderOperationStepOutputValue=a.renderOperationStepOutputValue.bind(Object(ie.a)(a)),a.handleWorkspacePanelModeChanged=a.handleWorkspacePanelModeChanged.bind(Object(ie.a)(a)),a.handleRemoveOperationStepButtonClicked=a.handleRemoveOperationStepButtonClicked.bind(Object(ie.a)(a)),a.handleCleanWorkflowButtonClicked=a.handleCleanWorkflowButtonClicked.bind(Object(ie.a)(a)),a.handleShowResourceTableView=a.handleShowResourceTableView.bind(Object(ie.a)(a)),a.handleCopyWorkflowAsPythonScript=a.handleCopyWorkflowAsPythonScript.bind(Object(ie.a)(a)),a.handleCopyWorkflowAsShellScript=a.handleCopyWorkflowAsShellScript.bind(Object(ie.a)(a)),a.handleCopyWorkflowAsJSON=a.handleCopyWorkflowAsJSON.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleResourceNameSelected",value:function(e){e&&e.length?this.props.dispatch(c.Oc(e[0])):this.props.dispatch(c.Oc(null))}},{key:"handleWorkflowStepIdSelected",value:function(e){e&&e.length?this.props.dispatch(c.Nc(e[0])):this.props.dispatch(c.Nc(null))}},{key:"handleResourceListHeightChanged",value:function(e){this.props.dispatch(c.Pc("resourceListHeight",e))}},{key:"handleShowResourceDetailsChanged",value:function(e){this.props.dispatch(c.Pc("showResourceDetails",e))}},{key:"handleStepListHeightChanged",value:function(e){this.props.dispatch(c.Pc("workflowStepListHeight",e))}},{key:"handleShowWorkflowStepDetailsChanged",value:function(e){this.props.dispatch(c.Pc("showWorkflowStepDetails",e))}},{key:"handleShowFigureButtonClicked",value:function(){this.props.dispatch(c.Xc(this.getEffectiveResource(),this.props.activeViewId))}},{key:"handleShowResourceTableView",value:function(){this.props.dispatch(c.gd(this.getEffectiveResource().name,null,this.props.activeViewId))}},{key:"handleWorkflowStepPropertiesButtonClicked",value:function(){this.props.dispatch(c.Vc("workflowStepPropertiesDialog"))}},{key:"handleOpenWorkspaceDirectoryClicked",value:function(){this.props.dispatch(c.ad(this.props.workspace.baseDir))}},{key:"handleCopyWorkflowAsPythonScript",value:function(){var e=or(this.props.operations,this.props.workspace.workflow.steps,"python");c.Hb(e)}},{key:"handleCopyWorkflowAsShellScript",value:function(){var e=or(this.props.operations,this.props.workspace.workflow.steps,"shell");c.Hb(e)}},{key:"handleCopyWorkflowAsJSON",value:function(){c.Hb(JSON.stringify(this.props.workspace.workflow,null,4))}},{key:"handleEditOperationStepButtonClicked",value:function(){this.props.dispatch(c.dd("editOperationStepDialog"))}},{key:"handleRemoveOperationStepButtonClicked",value:function(){var e=this.getEffectiveResourceName();e&&this.props.dispatch(c.Ib(e))}},{key:"handleCleanWorkflowButtonClicked",value:function(){this.props.dispatch(c.Cb())}},{key:"handleWorkspacePanelModeChanged",value:function(e){this.props.dispatch(c.rd({workspacePanelMode:e}))}},{key:"getEffectiveWorkflowStep",value:function(){return"steps"===this.props.workspacePanelMode?this.props.selectedWorkflowStep:this.props.selectedResourceWorkflowStep}},{key:"getEffectiveResource",value:function(){return"resources"===this.props.workspacePanelMode?this.props.selectedResource:this.props.selectedWorkflowStepResource}},{key:"getEffectiveResourceName",value:function(){var e=this.getEffectiveResource(),t=this.getEffectiveWorkflowStep();return e?e.name:t?t.id:null}},{key:"renderStepItem",value:function(e){return a.createElement("span",null,this.getWorkflowStepLabel(e))}},{key:"render",value:function(){var e=this.props.workspace;if(!e)return _e;f.a(e.workflow);var t=e.workflow.steps;f.a(t);var r=e.resources;f.a(r);var o=e.isScratch||!e.baseDir?"<unnamed>":e.baseDir.split(/[\\/]/).pop(),i=a.createElement(ue.Tooltip,{content:e.baseDir,position:ue.PopoverPosition.AUTO_START},a.createElement("strong",null,o)),l=null;e.isModified?l=a.createElement("span",{key:0,style:n.STATE_TAG_STYLE,className:"bp3-tag bp3-intent-warning bp3-minimal"},"Modified"):e.isSaved||(l=a.createElement("span",{key:1,style:n.STATE_TAG_STYLE,className:"bp3-tag bp3-intent-success bp3-minimal"},"Not saved"));var c=a.createElement(kt,{tooltipContent:"Show workspace directory in file system",onClick:this.handleOpenWorkspaceDirectoryClicked,icon:"folder-open",tooltipPosition:"top"}),s=a.createElement(ue.Popover,{position:ue.PopoverPosition.LEFT},a.createElement(kt,{tooltipContent:"Copy workflow",disabled:!t.length,icon:"clipboard",tooltipPosition:"top"}),a.createElement(ue.Menu,null,a.createElement(ue.MenuItem,{onClick:this.handleCopyWorkflowAsPythonScript,text:"Copy workflow as Python Script"}),a.createElement(ue.MenuItem,{onClick:this.handleCopyWorkflowAsShellScript,text:"Copy workflow as Shell Script"}),a.createElement(ue.MenuItem,{onClick:this.handleCopyWorkflowAsJSON,text:"Copy workflow as JSON"})));return a.createElement(tn,null,a.createElement("div",{style:n.FLEX_ROW_STYLE},i,a.createElement("span",{style:n.SPACER_STYLE}),l,a.createElement(ue.ButtonGroup,null,c,s)),a.createElement(ue.Tabs,{id:"workflow",renderActiveTabPanelOnly:!0,selectedTabId:this.props.workspacePanelMode,onChange:this.handleWorkspacePanelModeChanged},a.createElement(ue.Tab,{id:"steps",title:"Workflow (".concat(t.length,")"),panel:this.renderWorkflowStepsPanel()}),a.createElement(ue.Tab,{id:"resources",title:"Resources (".concat(r.length,")"),panel:this.renderResourcesPanel()})))}},{key:"renderWorkspaceActions",value:function(){var e=this.getEffectiveResource(),t=this.getEffectiveWorkflowStep(),n=Object(B.V)(e),r=t&&t.op,o=this.props.workspace&&this.props.workspace.workflow.steps.length,i=Object(B.U)(e);return a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:"Show figure",disabled:!n,icon:"eye-open",tooltipPosition:"top",onClick:this.handleShowFigureButtonClicked}),a.createElement(kt,{tooltipContent:"Show data in table",disabled:!i,icon:"th",tooltipPosition:"top",onClick:this.handleShowResourceTableView}),a.createElement(kt,{tooltipContent:"Resource/step properties",disabled:!e,icon:"label",tooltipPosition:"top",onClick:this.handleWorkflowStepPropertiesButtonClicked}),a.createElement(kt,{tooltipContent:"Edit workflow step",intent:ue.Intent.PRIMARY,disabled:!t,icon:"edit",tooltipPosition:"top",onClick:this.handleEditOperationStepButtonClicked}),a.createElement(kt,{tooltipContent:"Remove workflow step and its resource",disabled:!t,icon:"remove",tooltipPosition:"top",onClick:this.handleRemoveOperationStepButtonClicked}),a.createElement(kt,{tooltipContent:"Clean workspace, remove all steps and resources",disabled:!o,icon:"delete",tooltipPosition:"top",onClick:this.handleCleanWorkflowButtonClicked}),t?a.createElement(nr,{selectedWorkflowStep:t}):null,r?a.createElement(Ra,{id:"editOperationStepDialog",operationStep:t}):null)}},{key:"renderResourcesPanel",value:function(){var e=this.props.workspace.resources;return e&&e.length?a.createElement(Gt,{showDetails:this.props.showResourceDetails,onShowDetailsChange:this.handleShowResourceDetailsChanged,isSplitPanel:!0,contentHeight:this.props.resourceListHeight,onContentHeightChange:this.handleResourceListHeightChanged,actionComponent:this.renderWorkspaceActions()},this.renderResourcesList(),this.renderResourceDetails()):Ce}},{key:"renderResourcesList",value:function(){var e=this.props.workspace.resources;return a.createElement(tn,null,a.createElement(yn.a,{items:e,getItemKey:n.getResourceItemKey,renderItem:n.renderResourceItem,selection:this.props.selectedResourceName,onSelection:this.handleResourceNameSelected,onItemDoubleClick:this.handleEditOperationStepButtonClicked}))}},{key:"renderResourceDetails",value:function(){var e=this.props.selectedResourceAttributes;return e&&e.length?a.createElement(tn,null,a.createElement("span",null,"Attributes:"),a.createElement(Vt.a,{numRows:e.length,enableRowHeader:!1},a.createElement(Mt.a,{name:"Name",cellRenderer:this.renderResourceAttrName}),a.createElement(Mt.a,{name:"Value",cellRenderer:this.renderResourceAttrValue}))):null}},{key:"renderWorkflowStepsPanel",value:function(){var e=this.props.workspace.workflow.steps;return e&&e.length?a.createElement(Gt,{showDetails:this.props.showWorkflowStepDetails,onShowDetailsChange:this.handleShowWorkflowStepDetailsChanged,isSplitPanel:!0,contentHeight:this.props.workflowStepListHeight,onContentHeightChange:this.handleStepListHeightChanged,actionComponent:this.renderWorkspaceActions()},this.renderWorkflowStepsList(),this.renderWorkflowStepDetails()):ke}},{key:"renderWorkflowStepsList",value:function(){var e=this.props.workspace.workflow.steps;return a.createElement(tn,null,a.createElement(yn.a,{items:e,getItemKey:n.getStepItemKey,renderItem:this.renderStepItem,selection:this.props.selectedWorkflowStepId,onSelection:this.handleWorkflowStepIdSelected,onItemDoubleClick:this.handleEditOperationStepButtonClicked}))}},{key:"renderWorkflowStepDetails",value:function(){var e=this.props.selectedWorkflowStepOp;if(!e)return null;var t=n.renderWorkflowStepPorts(e.inputs,"Step inputs:","No step inputs.",this.renderOperationStepInputName,this.renderOperationStepInputValue);return a.createElement(tn,null,t,null)}},{key:"renderResourceAttrName",value:function(e){return a.createElement(xt.a,null,a.createElement(Yt.a,null,this.props.selectedResourceAttributes[e][0]))}},{key:"renderResourceAttrValue",value:function(e){return a.createElement(xt.a,null,a.createElement(Yt.a,{showPopover:Yt.b.WHEN_TRUNCATED,detectTruncation:!0},"".concat(this.props.selectedResourceAttributes[e][1])))}},{key:"renderOperationStepInputName",value:function(e){var t=this.props.selectedWorkflowStepOp.inputs[e],a=this.props.selectedWorkflowStep.inputs[t.name];return n.renderWorkflowPortName(t,a)}},{key:"renderOperationStepInputValue",value:function(e){var t=this.props.selectedWorkflowStepOp.inputs[e],a=this.props.selectedWorkflowStep.inputs[t.name];return n.renderWorkflowPortValue(t,a)}},{key:"renderOperationStepOutputName",value:function(e){var t=this.props.selectedWorkflowStepOp.outputs[e],a=this.props.selectedWorkflowStep.outputs[t.name];return n.renderWorkflowPortName(t,a)}},{key:"renderOperationStepOutputValue",value:function(e){var t=this.props.selectedWorkflowStepOp.outputs[e],a=this.props.selectedWorkflowStep.outputs[t.name];return n.renderWorkflowPortValue(t,a)}},{key:"getWorkflowStepLabel",value:function(e){var t=[];if(e&&e.op){var n=e.op,r=n.lastIndexOf(".");r>0&&(n=n.slice(r+1)),t.push(a.createElement("code",{key:0},n,"()"))}else t.push(a.createElement("code",{key:0},"?()"));var o=this.props.resourcesMap[e.id];return o&&(t.push(a.createElement("span",{key:1}," \u2192 ")),t.push(a.createElement(Kn,{key:2,label:o.name,dataType:o.dataType}))),e&&e.persistent&&(t.push(a.createElement("span",{key:3}," ")),t.push(a.createElement(ue.Icon,{key:4,icon:"database"}))),a.createElement("span",null,t)}}],[{key:"getResourceItemKey",value:function(e){return e.name}},{key:"renderResourceItem",value:function(e){return a.createElement(Kn,{label:e.name,dataType:e.dataType})}},{key:"getStepItemKey",value:function(e){return e.id}},{key:"renderWorkflowStepPorts",value:function(e,t,n,r,o){return e&&e.length?a.createElement("div",null,a.createElement("p",null,t),a.createElement(Vt.a,{numRows:e.length,enableRowHeader:!1},a.createElement(Mt.a,{name:"Name",cellRenderer:r}),a.createElement(Mt.a,{name:"Value",cellRenderer:o}))):a.createElement("div",null,a.createElement("p",null,n))}},{key:"renderWorkflowPortName",value:function(e,t){return a.createElement(xt.a,null,a.createElement(Yt.a,{showPopover:Yt.b.ALWAYS},e.name))}},{key:"renderWorkflowPortValue",value:function(e,t){var n;if(t){var r;e.units&&(r=a.createElement("span",{className:"bp3-text-muted"}," (".concat(e.units,")")));var o=Object(v.e)(t)?t:t.source;if(o)n=a.createElement("span",null,"\u2197 ",a.createElement("em",null,o));else{var i=t.value;Object(v.e)(i)&&i.length>128&&(i=i.substr(0,128)+"..."),n=a.createElement("span",null,i,r)}}else{var l=e.defaultValue;n=Object(v.b)(l)?a.createElement("span",null,"".concat(l)," ",a.createElement("span",{className:"bp3-text-muted"},"(default value)")):a.createElement("span",{className:"bp3-text-muted"},"Not given.")}return a.createElement(xt.a,null,n)}}]),n}(a.PureComponent);ar.STATE_TAG_STYLE={margin:2},ar.FLEX_ROW_STYLE={display:"flex",alignItems:"center"},ar.SPACER_STYLE={flex:1};var rr=Object(o.b)((function(e){return{workspace:Oe.oc(e),resourcesMap:Oe.Z(e),resourceListHeight:Oe.Y(e),showResourceDetails:Oe.Xb(e),selectedResource:Oe.Bb(e),selectedResourceAttributes:Oe.zb(e),selectedResourceName:Oe.Ab(e),selectedResourceWorkflowStep:Oe.Db(e),workflowStepListHeight:Oe.ic(e),showWorkflowStepDetails:Oe.Yb(e),selectedWorkflowStep:Oe.Pb(e),selectedWorkflowStepId:Oe.Mb(e),selectedWorkflowStepOp:Oe.Nb(e),selectedWorkflowStepResource:Oe.Ob(e),activeViewId:Oe.d(e),workspacePanelMode:e.session.workspacePanelMode,operations:Oe.T(e)}}))(ar);function or(e,t,n){var a=[];"python"===n?a.push("import cate.ops"):a.push("cate ws new");for(var r=0;r<t.length;r++){var o=t[r],i=Object(B.r)(e,o.op);if(i&&i.inputs){"python"===n&&(a.push(""),a.push("# Step ".concat(r+1)));var l,c=[],s=Object(g.a)(i.inputs);try{for(s.s();!(l=s.n()).done;){var u=l.value,d=o.inputs[u.name];if(d){var p=Object(v.e)(d)?d:d.source;if(d&&p)"python"===n?c.push("".concat(u.name,"=").concat(p)):c.push("".concat(u.name,"=@").concat(p));else if(d){var h=d.value;Object(v.f)(h)&&(h=null);var f=u.defaultValue;Object(v.f)(f)&&(f=null),h!==f&&(Object(v.g)(h)?c.push("".concat(u.name,"=None")):Object(v.e)(h)?c.push("".concat(u.name,'="').concat(h,'"')):Object(v.a)(h)?c.push("".concat(u.name,"=").concat(h?"True":"False")):Object(v.a)(h)&&c.push("".concat(u.name,"=").concat(h)))}}}}catch(y){s.e(y)}finally{s.f()}var m=o.id,b=i.name;"python"===n?a.push("".concat(m," = cate.ops.").concat(b,"(").concat(c.join(", "),")")):a.push("cate res set ".concat(m," ").concat(b," ").concat(c.join(" ")))}}return"shell"===n&&a.push("cate ws exit"),a.push(""),a.join("\n")}var ir=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleSelectedVariableNameChanged=a.handleSelectedVariableNameChanged.bind(Object(ie.a)(a)),a.handleListHeightChanged=a.handleListHeightChanged.bind(Object(ie.a)(a)),a.handleShowDetailsChanged=a.handleShowDetailsChanged.bind(Object(ie.a)(a)),a.handleShowSelectedVariableLayer=a.handleShowSelectedVariableLayer.bind(Object(ie.a)(a)),a.handleAddVariableLayer=a.handleAddVariableLayer.bind(Object(ie.a)(a)),a.handleAddVariableTimeSeriesPlot=a.handleAddVariableTimeSeriesPlot.bind(Object(ie.a)(a)),a.handleAddVariableHistogramPlot=a.handleAddVariableHistogramPlot.bind(Object(ie.a)(a)),a.handleShowVariableTableView=a.handleShowVariableTableView.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleSelectedVariableNameChanged",value:function(e){var t=this.props.selectedResource;if(f.a(t),e&&e.length){var n=e[0],a=this.props.variables.find((function(e){return e.name===n}));f.a(a),this.props.dispatch(c.Mc(t,a,this.props.savedLayers))}else this.props.dispatch(c.Mc(t,null))}},{key:"handleListHeightChanged",value:function(e){this.props.dispatch(c.Pc("variableListHeight",e))}},{key:"handleShowDetailsChanged",value:function(e){this.props.dispatch(c.Pc("showVariableDetails",e))}},{key:"handleShowSelectedVariableLayer",value:function(){var e=this.props.showSelectedVariableLayer;this.props.dispatch(c.Qc(!e))}},{key:"handleAddVariableLayer",value:function(){var e=this.props.selectedResource,t=this.props.selectedVariable,n=this.props.activeViewId,a=this.props.savedLayers;f.a(e),f.a(t&&t.imageLayout),f.a(n),this.props.dispatch(c.yb(n,e,t,!0,a))}},{key:"handleAddVariableTimeSeriesPlot",value:function(){var e=this.props.selectedResource,t=this.props.selectedVariable,n=this.props.selectedPlacemark,a=n.properties.name||"placemark",r=n.geometry.coordinates,o={ds:{source:e.name},var:{value:t.name},indexers:{value:"lon=".concat(r[0],", lat=").concat(r[1])},properties:{value:null},file:{value:null}};this.props.dispatch(c.Tc("cate.ops.plot.plot",o,null,!1,"Creating time series plot for placemark ".concat(a)))}},{key:"handleAddVariableHistogramPlot",value:function(){var e=this.props.selectedResource,t=this.props.selectedVariable,n={ds:{source:e.name},var:{value:t.name},indexers:{value:null},properties:{value:"bins=250"},file:{value:null}};this.props.dispatch(c.Tc("cate.ops.plot.plot_hist",n,null,!1,"Creating histogram plot"))}},{key:"handleShowVariableTableView",value:function(){var e=this.props.selectedResource,t=this.props.selectedVariable;f.a(e),f.a(t),this.props.dispatch(c.gd(e.name,t.name,this.props.activeViewId))}},{key:"render",value:function(){var e,t=this.props.selectedResource,n=this.props.variables;return n&&n.length?a.createElement(Gt,{showDetails:this.props.showVariableDetails,onShowDetailsChange:this.handleShowDetailsChanged,isSplitPanel:!0,contentHeight:this.props.variableListHeight,onContentHeightChange:this.handleListHeightChanged,actionComponent:this.renderVariableActionRow()},a.createElement(cr,{selectedEntity:this.props.selectedEntity,globeViewPosition:this.props.globeViewPosition,positionData:this.props.positionData,selectedVariableName:this.props.selectedVariableName,onSelectedVariableNameChanged:this.handleSelectedVariableNameChanged,variables:this.props.variables}),a.createElement(sr,{tableData:this.props.selectedVariableAttributesTableData})):t?(e=t.name,a.createElement(ue.NonIdealState,{title:"No variables",icon:"circle",description:'Selected resource "'.concat(e,"\" doesn't contain any variables.")})):De}},{key:"renderVariableActionRow",value:function(){var e=this.props.selectedVariable,t=e&&e.numDims>=2&&e.imageLayout,n=this.props.selectedPlacemark,r=this.props.activeViewType&&"world"===this.props.activeViewType,o=t&&r,i=t&&n,l=e&&e.numDims>0;return a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:"Toggle image layer visibility",icon:this.props.showSelectedVariableLayer?"eye-open":"eye-off",tooltipPosition:"top",onClick:this.handleShowSelectedVariableLayer}),a.createElement(kt,{tooltipContent:"Add a new image layer",disabled:!o,icon:"layer",tooltipPosition:"top",onClick:this.handleAddVariableLayer}),a.createElement(kt,{tooltipContent:"Create a time series plot from selected placemark",disabled:!i,icon:"timeline-line-chart",tooltipPosition:"top",onClick:this.handleAddVariableTimeSeriesPlot}),a.createElement(kt,{tooltipContent:"Create a histogram plot",disabled:!l,icon:"timeline-bar-chart",tooltipPosition:"top",onClick:this.handleAddVariableHistogramPlot}),a.createElement(kt,{tooltipContent:"Show data in table (only first ".concat(1e4," values)"),icon:"th",tooltipPosition:"top",onClick:this.handleShowVariableTableView}))}}]),n}(a.Component);ir.VALUE_STYLE={float:"right",color:ue.Colors.BLUE5};var lr=Object(o.b)((function(e){return{variables:Oe.ac(e)||Oe.a,selectedResource:Oe.Bb(e),selectedVariableName:Oe.Jb(e),selectedVariable:Oe.Kb(e),selectedVariableAttributesTableData:Oe.Gb(e),variableListHeight:e.session.variableListHeight,showVariableDetails:e.session.showVariableDetails,showSelectedVariableLayer:e.session.showSelectedVariableLayer,activeViewId:Oe.d(e),activeViewType:Oe.f(e),savedLayers:Oe.db(e),selectedPlacemark:Oe.yb(e),selectedEntity:Oe.mb(e),globeViewPosition:e.location.globeViewPosition,positionData:e.location.positionData}}))(ir),cr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){var e;Object(re.a)(this,n);for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];return(e=t.call.apply(t,[this].concat(o))).getItemKey=function(e){return e.name},e.getItemValue=function(t){var n;if(Object(B.ab)(t)){var a=e.props.selectedEntity;if(a&&a.properties){var r=a.properties[t.name];Object(v.c)(r)&&(n=r.getValue())}}else if(Object(B.Z)(t)){var o=e.props.positionData;o&&(n=o[t.name])}return Object(v.b)(n)?n:t.value},e.renderItem=function(t){var n=a.createElement(Kn,{label:t.name,dataType:t.dataType,tooltipText:t.attributes&&t.attributes.long_name}),r=e.getItemValue(t);return Object(v.b)(r)?a.createElement("div",null,n,a.createElement("span",{style:ir.VALUE_STYLE},"".concat(r))):n},e.handleVariableNameSelection=function(t){e.props.onSelectedVariableNameChanged(t)},e}return Object(oe.a)(n,[{key:"render",value:function(){var e="vlb",t=this.props.selectedEntity&&this.props.selectedEntity.id;t&&(e+="_".concat(t));var n=this.props.globeViewPosition;return n&&(e+="_".concat(n.longitude,",").concat(n.latitude)),a.createElement(tn,null,a.createElement(yn.a,{key:e,items:this.props.variables,getItemKey:this.getItemKey,renderItem:this.renderItem,selection:this.props.selectedVariableName,selectionMode:yn.b.SINGLE,onSelection:this.handleVariableNameSelection}))}}]),n}(a.PureComponent),sr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){var e;Object(re.a)(this,n);for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];return(e=t.call.apply(t,[this].concat(o))).renderAttributeName=function(t){return a.createElement(xt.a,null,e.props.tableData[t][0])},e.renderAttributeValue=function(t){return a.createElement(xt.a,null,a.createElement(Yt.a,null,e.props.tableData[t][1]))},e}return Object(oe.a)(n,[{key:"render",value:function(){var e=this.props.tableData;return e&&e.length?a.createElement("div",{style:n.DIV_STYLE},a.createElement(Vt.a,{numRows:e.length,enableRowHeader:!1},a.createElement(Mt.a,{name:"Name",cellRenderer:this.renderAttributeName}),a.createElement(Mt.a,{name:"Value",cellRenderer:this.renderAttributeValue}))):null}}]),n}(a.PureComponent);sr.DIV_STYLE={paddingTop:4,width:"100%"};var ur=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.handleChangedVariableSelection=a.handleChangedVariableSelection.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.state={selectedIndices:null},a}return Object(oe.a)(n,[{key:"onCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID));var e,t=!0,a=Object(g.a)(this.state.selectedIndices);try{for(a.s();!(e=a.n()).done;){var r=e.value,o=this.props.layerVariables[r];this.props.dispatch(c.yb(this.props.activeViewId,o.resource,o.variable,t,this.props.savedLayers)),t=!1}}catch(i){a.e(i)}finally{a.f()}}},{key:"canConfirm",value:function(){return!!this.state.selectedIndices&&this.state.selectedIndices.length>0}},{key:"handleChangedVariableSelection",value:function(e){this.setState({selectedIndices:e.slice()})}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:n.DIALOG_TITLE,icon:"layers",onCancel:this.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody})}},{key:"renderBody",value:function(){return this.props.isOpen?this.props.layerVariables.length?a.createElement(tn,null,a.createElement("p",null,"Select the variables you wish to add as a layer:"),a.createElement(yn.a,{items:this.props.layerVariables,getItemKey:n.getVariableItemKey,renderItem:n.renderVariableItem,selectionMode:yn.b.MULTIPLE,selection:this.state.selectedIndices,onSelection:this.handleChangedVariableSelection})):a.createElement("p",null,"There are currently no resource or variables that could be added as layers."):null}}],[{key:"getVariableItemKey",value:function(e,t){return t}},{key:"renderVariableItem",value:function(e){var t=e.variable;return a.createElement("div",null,a.createElement("span",null,e.resource.name),a.createElement("span",null," / "),a.createElement(Kn,{label:t.name,dataType:"".concat(t.dataType,"[").concat(t.dimNames,"]"),units:t.units}))}}]),n}(a.Component);ur.DIALOG_ID="layerSourcesDialog",ur.DIALOG_TITLE="Add Layer";var dr=Object(o.b)((function(e){return{isOpen:Oe.x(ur.DIALOG_ID)(e).isOpen,layers:Oe.L(e),savedLayers:Oe.db(e),activeViewId:Oe.d(e),resources:Oe.bb(e),layerVariables:Oe.sb(e)}}))(ur);var pr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleCopyGeometryAsCsv=function(e){c.Hb(function(e,t){var n="longitude".concat(t=t||",","latitude\n");if("Point"===e.type){var a=e.coordinates;return"".concat(n).concat(a[0]).concat(t).concat(a[1],"\n")}if("LineString"===e.type){var r,o=e.coordinates,i=[],l=Object(g.a)(o);try{for(l.s();!(r=l.n()).done;){var c=r.value;i.push("".concat(c[0]).concat(t).concat(c[1],"\n"))}}catch(v){l.e(v)}finally{l.f()}return"".concat(n).concat(i.join(""))}if("Polygon"===e.type){var s,u=e.coordinates,d=[],p=Object(g.a)(u);try{for(p.s();!(s=p.n()).done;){var h=s.value;d.length>0&&d.push("# hole:\n");var f,m=Object(g.a)(h);try{for(m.s();!(f=m.n()).done;){var b=f.value;d.push("".concat(b[0]).concat(t).concat(b[1],"\n"))}}catch(v){m.e(v)}finally{m.f()}}}catch(v){p.e(v)}finally{p.f()}return"".concat(n).concat(d.join(""))}return""}(e.geometry))},a.handleCopyGeometryAsWkt=function(e){c.Hb(bt(e.geometry))},a.handleCopyGeometryAsGeoJson=function(e){var t;c.Hb((t=e,JSON.stringify(t,null,2)))},a.handleListHeightChanged=a.handleListHeightChanged.bind(Object(ie.a)(a)),a.handleShowDetailsChanged=a.handleShowDetailsChanged.bind(Object(ie.a)(a)),a.handleNewPointToolButtonClicked=a.handleNewPointToolButtonClicked.bind(Object(ie.a)(a)),a.handleNewPolygonToolButtonClicked=a.handleNewPolygonToolButtonClicked.bind(Object(ie.a)(a)),a.handleNewPolylineToolButtonClicked=a.handleNewPolylineToolButtonClicked.bind(Object(ie.a)(a)),a.handleNewBoxToolButtonClicked=a.handleNewBoxToolButtonClicked.bind(Object(ie.a)(a)),a.handleRemovePlacemarkButtonClicked=a.handleRemovePlacemarkButtonClicked.bind(Object(ie.a)(a)),a.handleLocatePlacemarkButtonClicked=a.handleLocatePlacemarkButtonClicked.bind(Object(ie.a)(a)),a.handleChangedPlacemarkVisibility=a.handleChangedPlacemarkVisibility.bind(Object(ie.a)(a)),a.handleChangedPlacemarkSelection=a.handleChangedPlacemarkSelection.bind(Object(ie.a)(a)),a.handleChangedPlacemarkName=a.handleChangedPlacemarkName.bind(Object(ie.a)(a)),a.handleChangedPointLongitude=a.handleChangedPointLongitude.bind(Object(ie.a)(a)),a.handleChangedPointLatitude=a.handleChangedPointLatitude.bind(Object(ie.a)(a)),a.handleCopySelectedPlacemarkAsCsv=a.handleCopySelectedPlacemarkAsCsv.bind(Object(ie.a)(a)),a.handleCopySelectedPlacemarkAsWkt=a.handleCopySelectedPlacemarkAsWkt.bind(Object(ie.a)(a)),a.handleCopySelectedPlacemarkAsGeoJSON=a.handleCopySelectedPlacemarkAsGeoJSON.bind(Object(ie.a)(a)),a.handlePlacemarkDoubleClick=a.handlePlacemarkDoubleClick.bind(Object(ie.a)(a)),a.renderPlacemarkItem=a.renderPlacemarkItem.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleListHeightChanged",value:function(e){this.props.dispatch(c.rd({placemarkListHeight:e}))}},{key:"handleNewPointToolButtonClicked",value:function(){this.props.dispatch(c.ub("PointTool"))}},{key:"handleNewPolygonToolButtonClicked",value:function(){this.props.dispatch(c.ub("PolygonTool"))}},{key:"handleNewPolylineToolButtonClicked",value:function(){this.props.dispatch(c.ub("PolylineTool"))}},{key:"handleNewBoxToolButtonClicked",value:function(){this.props.dispatch(c.ub("BoxTool"))}},{key:"handleShowDetailsChanged",value:function(e){this.props.dispatch(c.rd({showPlacemarkDetails:e}))}},{key:"handleRemovePlacemarkButtonClicked",value:function(){this.props.dispatch(c.kc(this.props.selectedPlacemarkId))}},{key:"handleLocatePlacemarkButtonClicked",value:function(){this.props.dispatch(c.Wb(this.props.selectedPlacemarkId))}},{key:"handlePlacemarkDoubleClick",value:function(e){this.props.dispatch(c.Wb(e.id))}},{key:"handleChangedPlacemarkVisibility",value:function(e,t){this.props.dispatch(c.od(e.id,{visible:t}))}},{key:"handleChangedPlacemarkName",value:function(e){var t=this.props.selectedPlacemark,n=e.value;this.props.dispatch(c.pd(t.id,{title:n}))}},{key:"handleChangedPointLongitude",value:function(e){var t=this.props.selectedPlacemark,n=t.geometry;n=Object(d.a)(Object(d.a)({},n),{},{coordinates:[e.value,n.coordinates[1]]}),this.props.dispatch(c.nd(t.id,n))}},{key:"handleChangedPointLatitude",value:function(e){var t=this.props.selectedPlacemark,n=t.geometry;n=Object(d.a)(Object(d.a)({},n),{},{coordinates:[n.coordinates[0],e.value]}),this.props.dispatch(c.nd(t.id,n))}},{key:"handleChangedPlacemarkSelection",value:function(e){var t=e.length?e[0]:null;this.props.dispatch(c.Jc(t))}},{key:"handleCopySelectedPlacemarkAsCsv",value:function(){this.handleCopyGeometryAsCsv(this.props.selectedPlacemark)}},{key:"handleCopySelectedPlacemarkAsWkt",value:function(){this.handleCopyGeometryAsWkt(this.props.selectedPlacemark)}},{key:"handleCopySelectedPlacemarkAsGeoJSON",value:function(){this.handleCopyGeometryAsGeoJson(this.props.selectedPlacemark)}},{key:"render",value:function(){return a.createElement("div",{style:{width:"100%"}},a.createElement(Gt,{showDetails:this.props.showPlacemarkDetails,onShowDetailsChange:this.handleShowDetailsChanged,isSplitPanel:!0,contentHeight:this.props.placemarkListHeight,onContentHeightChange:this.handleListHeightChanged,actionComponent:this.renderActionButtonRow()},this.renderPlacemarksList(),this.renderPlacemarkDetails()))}},{key:"renderActionButtonRow",value:function(){var e="PointTool"===this.props.geometryToolType,t="PolylineTool"===this.props.geometryToolType,n="PolygonTool"===this.props.geometryToolType,r="BoxTool"===this.props.geometryToolType;return a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:"New marker",onClick:this.handleNewPointToolButtonClicked,icon:"dot",tooltipPosition:"top",active:e,disabled:!1}),a.createElement(kt,{tooltipContent:"New polyline",onClick:this.handleNewPolylineToolButtonClicked,icon:"slash",tooltipPosition:"top",active:t,disabled:!1}),a.createElement(kt,{tooltipContent:"New polygon",onClick:this.handleNewPolygonToolButtonClicked,icon:"polygon-filter",tooltipPosition:"top",active:n,disabled:!1}),a.createElement(kt,{tooltipContent:"New box",onClick:this.handleNewBoxToolButtonClicked,icon:"widget",tooltipPosition:"top",active:r,disabled:!1}),a.createElement(kt,{tooltipContent:"Remove selected place",disabled:!this.props.selectedPlacemarkId,onClick:this.handleRemovePlacemarkButtonClicked,icon:"remove",tooltipPosition:"top"}),a.createElement(kt,{tooltipContent:"Locate selected place in view",disabled:!this.props.selectedPlacemarkId,onClick:this.handleLocatePlacemarkButtonClicked,icon:"locate",tooltipPosition:"top"}),a.createElement(ue.Popover,{disabled:!this.props.selectedPlacemark,position:ue.Position.LEFT},a.createElement(kt,{tooltipContent:this.props.selectedPlacemark?"Copy selected place.":"Copy selected place: Please select a place first.",disabled:!this.props.selectedPlacemark,icon:"clipboard",tooltipPosition:"top"}),a.createElement(ue.Menu,null,a.createElement(ue.MenuItem,{onClick:this.handleCopySelectedPlacemarkAsCsv,text:"Copy as CSV"}),a.createElement(ue.MenuItem,{onClick:this.handleCopySelectedPlacemarkAsWkt,text:"Copy as WKT"}),a.createElement(ue.MenuItem,{onClick:this.handleCopySelectedPlacemarkAsGeoJSON,text:"Copy as GeoJSON"}))),a.createElement(dr,null))}},{key:"renderPlacemarksList",value:function(){var e=this.props.placemarkCollection.features;return e&&e.length?a.createElement(tn,null,a.createElement(yn.a,{items:e,getItemKey:n.getPlacemarkItemKey,renderItem:this.renderPlacemarkItem,selectionMode:yn.b.SINGLE,selection:this.props.selectedPlacemarkId,onSelection:this.handleChangedPlacemarkSelection})):Ae}},{key:"renderPlacemarkItem",value:function(e){return a.createElement(fr,{placemark:e,onDoubleClick:this.handlePlacemarkDoubleClick,onVisibilityChange:this.handleChangedPlacemarkVisibility,onCopyPlacemarkCsv:this.handleCopyGeometryAsCsv,onCopyPlacemarkWkt:this.handleCopyGeometryAsWkt,onCopyPlacemarkGeoJSON:this.handleCopyGeometryAsGeoJson})}},{key:"renderPlacemarkDetails",value:function(){var e=this.props.placemarkCollection.features;return e&&e.length?this.props.selectedPlacemark?a.createElement("div",{style:{width:"100%"}},a.createElement(ue.Label,{key:"spacer"}," "),this.renderPlacemarkTitle(),this.renderPlacemarkGeometry()):Ne:null}},{key:"renderPlacemarkTitle",value:function(){var e=this.props.selectedPlacemark.properties.title;return a.createElement(ue.Label,{className:"bp3-inline"},"Name",a.createElement("span",{className:"bp3-text-muted"}," (optional)"),a.createElement(Gn.a,{value:{textValue:e,value:e},onChange:this.handleChangedPlacemarkName,size:16,uncontrolled:!0,placeholder:"Placemark name"}))}},{key:"renderPlacemarkGeometry",value:function(){var e=this.props.selectedPlacemark.geometry;if("Point"===e.type){var t=e.coordinates;return a.createElement("div",null,a.createElement(ue.Label,{className:"bp3-inline"},"Longitude",a.createElement("span",{className:"bp3-text-muted"}," (in degrees)"),a.createElement(Bn,{value:t[0],onChange:this.handleChangedPointLongitude,size:12,uncontrolled:!0,min:-180,max:180,placeholder:"Longitude in degrees"})),a.createElement(ue.Label,{className:"bp3-inline"},"Latitude",a.createElement("span",{className:"bp3-text-muted"}," (in degrees)"),a.createElement(Bn,{value:t[1],onChange:this.handleChangedPointLatitude,size:12,uncontrolled:!0,min:-90,max:90,placeholder:"Latitude in degrees"})))}return mt(e),null}}],[{key:"getPlacemarkItemKey",value:function(e){return e.id}}]),n}(a.Component),hr=Object(o.b)((function(e){return{placemarkCollection:Oe.W(e),selectedPlacemarkId:Oe.xb(e),selectedPlacemark:Oe.yb(e),placemarkListHeight:e.session.placemarkListHeight,showPlacemarkDetails:Oe.Wb(e),activeView:Oe.e(e),geometryToolType:Oe.O(e)}}))(pr),fr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var r;return Object(re.a)(this,n),(r=t.call(this,e)).placemarkItemRef=Object(a.createRef)(),r.handleVisibilityChanged=r.handleVisibilityChanged.bind(Object(ie.a)(r)),r.handleCopyPlacemarkCsv=r.handleCopyPlacemarkCsv.bind(Object(ie.a)(r)),r.handleCopyPlacemarkWkt=r.handleCopyPlacemarkWkt.bind(Object(ie.a)(r)),r.handleCopyPlacemarksGeoJSON=r.handleCopyPlacemarksGeoJSON.bind(Object(ie.a)(r)),r.handleDoubleClick=r.handleDoubleClick.bind(Object(ie.a)(r)),r}return Object(oe.a)(n,[{key:"handleDoubleClick",value:function(){this.props.onDoubleClick(this.props.placemark)}},{key:"handleCopyPlacemarkCsv",value:function(){this.props.onCopyPlacemarkCsv(this.props.placemark)}},{key:"handleCopyPlacemarkWkt",value:function(){this.props.onCopyPlacemarkWkt(this.props.placemark)}},{key:"handleCopyPlacemarksGeoJSON",value:function(){this.props.onCopyPlacemarkGeoJSON(this.props.placemark)}},{key:"handleVisibilityChanged",value:function(e){this.props.onVisibilityChange(this.props.placemark,e.target.checked)}},{key:"componentDidMount",value:function(){var e=this,t=this.placemarkItemRef.current;t&&(t.oncontextmenu=function(t){t.preventDefault();var n=a.createElement(ue.Menu,{},a.createElement(ue.MenuItem,{onClick:e.handleCopyPlacemarkCsv,text:"Copy as CSV"}),a.createElement(ue.MenuItem,{onClick:e.handleCopyPlacemarkWkt,text:"Copy as WKT"}),a.createElement(ue.MenuItem,{onClick:e.handleCopyPlacemarksGeoJSON,text:"Copy as GeoJSON"}));ue.ContextMenu.show(n,{left:t.clientX,top:t.clientY},(function(){}))})}},{key:"render",value:function(){var e,t,r=this.props.placemark,o=r.properties.visible,i=r.properties.title,l=r.geometry;if("Point"===l.type){var c=l.coordinates;t=" ".concat(c[0].toFixed(3),", ").concat(c[1].toFixed(3)),e="dot"}else if("LineString"===l.type){var s=l.coordinates;t=" ".concat(s.length," positions"),e="slash"}else if("Polygon"===l.type){var u=l.coordinates[0];t=" ".concat(u.length-1," positions"),e=mt(l)?"widget":"polygon-filter"}return a.createElement("div",{ref:this.placemarkItemRef,style:n.DIV_STYLE},a.createElement(ue.Icon,{style:{marginRight:"4px"},icon:o?"eye-open":"eye-off"}),a.createElement(ue.Checkbox,{style:n.CHECK_STYLE,checked:!Object(v.a)(o)||o,onChange:this.handleVisibilityChanged}),a.createElement("div",{onDoubleClick:this.handleDoubleClick,style:n.LABEL_STYLE},a.createElement("span",{style:n.ICON_STYLE},a.createElement(ue.Icon,{icon:e})),a.createElement("span",{style:n.NAME_STYLE},i),a.createElement("span",{style:n.INFO_STYLE},t)))}}]),n}(a.PureComponent);fr.DIV_STYLE={display:"flex",alignItems:"center"},fr.CHECK_STYLE={flexGrow:0,margin:0},fr.LABEL_STYLE={flexGrow:1},fr.ICON_STYLE={marginLeft:"0.5em"},fr.NAME_STYLE={marginLeft:"0.5em"},fr.INFO_STYLE={float:"right",color:ue.Colors.BLUE5};var mr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onViewModeChange=a.onViewModeChange.bind(Object(ie.a)(a)),a.onAddWorldView=a.onAddWorldView.bind(Object(ie.a)(a)),a.onShowLayerTextOverlayChange=a.onShowLayerTextOverlayChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onViewModeChange",value:function(e){this.props.dispatch(c.Sc(this.props.activeViewId,e.target.value))}},{key:"onShowLayerTextOverlayChange",value:function(e){var t=e.target.checked;this.props.dispatch(c.rd({showLayerTextOverlay:t}))}},{key:"onAddWorldView",value:function(){this.props.dispatch(c.zb(this.props.activeViewId,this.props.lastBaseMapId))}},{key:"render",value:function(){return a.createElement("div",{style:{margin:"0.2em 0.2em 0.2em 0.2em"}},a.createElement(ue.AnchorButton,{icon:"globe",style:n.ACTION_ITEM_STYLE,onClick:this.onAddWorldView},"New World View"),this.renderActiveViewPanel())}},{key:"renderActiveViewPanel",value:function(){var e=this.props.activeView;if(!e)return Le;var t=a.createElement(ue.Label,{style:n.PROPERTY_ITEM_STYLE},"Active view:",a.createElement(ue.ControlGroup,{style:n.PROPERTY_ITEM_CONTROL_GROUP_STYLE},a.createElement(ue.Icon,{icon:e.icon,style:n.PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE}),a.createElement(ue.InputGroup,{style:n.PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE,type:"text",value:e.title,dir:"auto",disabled:!0})));return"world"===e.type?a.createElement("div",null,t,a.createElement(ue.Checkbox,{label:"Show layer text overlay",style:n.PROPERTY_ITEM_STYLE,checked:this.props.showLayerTextOverlay,onChange:this.onShowLayerTextOverlayChange})):t}}]),n}(a.Component);mr.ACTION_ITEM_STYLE={margin:"0.1em 0em 2em 0em"},mr.PROPERTY_ITEM_STYLE={margin:"0.1em 0em 0.6em 0em"},mr.PROPERTY_ITEM_CONTROL_GROUP_STYLE={display:"flex",alignItems:"center"},mr.PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE={marginBlock:0};var br=Object(o.b)((function(e){return{activeView:Oe.e(e),activeViewId:Oe.d(e),lastBaseMapId:e.session.lastBaseMapId,showLayerTextOverlay:e.session.showLayerTextOverlay}}))(mr);var vr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleShowDetails=a.handleShowDetails.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"handleShowDetails",value:function(){this.props.dispatch(c.bd(this.props.task.title,this.props.task.failure))}},{key:"render",value:function(){var e=this,t=this.props.task,r=this.props.jobId,o=a.createElement("p",null,t.title||"Task #".concat(r),":"),i=null;if(n.isRunning(t))if(n.isMakingProgress(t)){var l=0;t.progress.total>0&&t.progress.worked>0&&(l=t.progress.worked/t.progress.total);var c=a.createElement(ue.ProgressBar,{intent:ue.Intent.SUCCESS,value:l}),s=a.createElement(ue.AnchorButton,{type:"button",onClick:function(){return e.props.onCancelJob(r)},text:"Cancel"}),u=a.createElement("div",{style:n.FLEX_ROW_STYLE},a.createElement("div",{style:n.PROGRESS_STYLE},c),a.createElement("div",{style:{flex:"0 1 auto"}},s)),d=null;t.progress&&t.progress.message&&(d=a.createElement("div",{className:"bp3-text-muted"},t.progress.message)),i=a.createElement("div",null,u,d)}else i=a.createElement(ue.ProgressBar,null);else if(t.status===Nt.g.CANCELLED||t.status===Nt.g.FAILED){var p,h;t.status===Nt.g.CANCELLED?h=a.createElement("div",null,n.renderIcon(t.failure),"Task has been cancelled."):(p=a.createElement(ue.AnchorButton,{onClick:this.handleShowDetails},"Details"),h=a.createElement("div",null,n.renderIcon(t.failure),Object(Nt.m)(t.failure),a.createElement("br",null),a.createElement("div",{className:"bp3-text-muted",style:{paddingTop:"0.4em"}},t.failure.message))),i=a.createElement("div",null,a.createElement(ue.ButtonGroup,{className:"bp3-minimal",style:{float:"right"}},p,a.createElement(ue.AnchorButton,{icon:"cross",onClick:function(){return e.props.onRemoveJob(r)}})),h)}return a.createElement(ue.Card,null,o,i)}}],[{key:"isRunning",value:function(e){return e.status===Nt.g.NEW||e.status===Nt.g.SUBMITTED||e.status===Nt.g.IN_PROGRESS}},{key:"isMakingProgress",value:function(e){return e.status===Nt.g.IN_PROGRESS&&!!e.progress}},{key:"renderIcon",value:function(e){var t=Object(Nt.k)(e),n=Object(Nt.l)(e);return a.createElement(ue.Icon,{icon:t,intent:n,style:{paddingRight:"0.4em"}})}}]),n}(a.Component);vr.FLEX_ROW_STYLE={display:"flex",flexFlow:"row nowrap",width:"100%"},vr.PROGRESS_STYLE={flex:"3 1 auto",display:"flex",flexFlow:"column",justifyContent:"center",paddingRight:10};var yr=Object(o.b)((function(e,t){return t}))(vr);var gr={cancelJob:c.Ab,removeJob:c.lc},Or=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"render",value:function(){var e=this.props.tasks,t=[];for(var n in e)e[n].status!==Nt.g.DONE&&t.push(a.createElement(yr,{key:n,jobId:n,task:e[n],onRemoveJob:this.props.removeJob,onCancelJob:this.props.cancelJob}));return t.length?a.createElement(tn,null,t):a.createElement(ue.Card,null,a.createElement("p",null,a.createElement("strong",null,"There are currently no active tasks.")))}}]),n}(a.Component),Er=Object(o.b)((function(e){return{tasks:e.communication.tasks}}),gr)(Or);function _r(e){var t=e.className,n=e.style;return a.createElement("a",{className:t,style:n,href:"https://climate.esa.int/en/terms-and-conditions/",target:"_blank",rel:"noopener noreferrer"},"Terms & Conditions")}var Cr=Object(o.b)((function(e,t){var n=e.communication.webAPIServiceInfo;return{uiVersion:"4.0.0-dev.5",apiVersion:n?n.version:null,minimal:t.minimal}}))((function(e){var t=e.uiVersion,n=e.apiVersion,r=e.minimal;return a.createElement("div",null,a.createElement(kr,{label:"Cate UI",version:t,minimal:r}),n&&a.createElement(a.Fragment,null,"\xa0",a.createElement(kr,{label:"Cate API",version:n,minimal:r})))})),kr=function(e){var t=e.label,n=e.version,r=e.minimal,o=n.includes("dev")?ue.Intent.WARNING:ue.Intent.NONE;return a.createElement(ue.Tag,{intent:o,round:!0,minimal:r},t,"\xa0",n)};var wr={cancelJob:c.Ab,removeJob:c.lc},Sr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"render",value:function(){var e,t=this.props.globePosition;return e=t?"lon=".concat(t.longitude.toFixed(2),", lat=").concat(t.latitude.toFixed(2)):"",a.createElement("div",{style:n.DIV_STYLE},a.createElement("div",{style:n.DIV_MESSAGE_STYLE},"Ready."),a.createElement("div",{style:n.DIV_TASKS_STYLE},this.renderTasks()),a.createElement("div",{style:n.DIV_CURSOR_STYLE},e),a.createElement("div",{style:n.DIV_TAC_STYLE},a.createElement(_r,null)),a.createElement(Cr,{minimal:!0}),a.createElement("div",{style:n.DIV_STATUS_STYLE},this.renderBackendStatus()))}},{key:"renderTasks",value:function(){var e=this.props.tasks,t=0,n=0,r=[];for(var o in e){var i=e[o],l=!1;i.status===Nt.g.SUBMITTED||i.status===Nt.g.IN_PROGRESS?(t++,l=!0):i.status!==Nt.g.CANCELLED&&i.status!==Nt.g.FAILED||(n++,l=!0),l&&r.push(a.createElement(yr,{key:o,jobId:o,task:this.props.tasks[o],onRemoveJob:this.props.removeJob,onCancelJob:this.props.cancelJob}))}if(r.length>0){var c,s=null;t>0&&n>0?c="".concat(t," running / ").concat(n," failed task(s)"):t>0?c="".concat(t," running task(s)"):n>0&&(c="".concat(n," failed task(s)")),t>0&&(s=a.createElement("div",{style:{display:"flex",flexFlow:"column",justifyContent:"center",width:"12em",height:"1.5em"}},a.createElement(ue.ProgressBar,{intent:ue.Intent.SUCCESS})));var u=a.createElement("div",{style:{width:"300px"}},r);return a.createElement(ue.Popover,{content:u,position:ue.Position.TOP,interactionKind:ue.PopoverInteractionKind.HOVER},a.createElement("div",{style:{display:"flex",flexFlow:"row nowrap"}},s,a.createElement("div",{style:{display:"flex",flexFlow:"column",justifyContent:"center",paddingLeft:"5px"}},c)))}return null}},{key:"renderBackendStatus",value:function(){var e,t,n=" (".concat(this.props.webAPIServiceURL,")");return"connecting"===this.props.webAPIStatus?(e="link",t="Connecting"+n):"open"===this.props.webAPIStatus?(e="link",t="Connected"+n):"error"===this.props.webAPIStatus?(e="offline",t="Error"+n):"closed"===this.props.webAPIStatus?(e="offline",t="Closed"+n):(e="help",t="Unknown"+n),a.createElement(ue.Tooltip,{content:t,hoverOpenDelay:1500,position:ue.Position.LEFT_TOP},a.createElement(ue.Icon,{icon:e,iconSize:12}))}}]),n}(a.Component);Sr.DIV_STYLE={flex:"none",display:"flex",flexFlow:"row nowrap",height:"1.5em",fontSize:"small",backgroundColor:"#2B95D6",overflow:"hidden"},Sr.DIV_MARGIN={margin:"2px 4px 2px 4px"},Sr.DIV_MESSAGE_STYLE=Object(d.a)({flex:"60 1 auto"},Sr.DIV_MARGIN),Sr.DIV_TAC_STYLE=Object(d.a)({flex:"0 1 auto"},Sr.DIV_MARGIN),Sr.DIV_TASKS_STYLE=Object(d.a)({flex:"20 1 auto"},Sr.DIV_MARGIN),Sr.DIV_CURSOR_STYLE=Object(d.a)({flex:"20 1 auto"},Sr.DIV_MARGIN),Sr.DIV_STATUS_STYLE={flex:"0 1 auto",margin:"0px 4px 0px 4px"};var jr=Object(o.b)((function(e){return{webAPIStatus:e.communication.webAPIStatus,webAPIServiceURL:e.communication.webAPIServiceURL,tasks:e.communication.tasks,globePosition:Oe.E(e)||Oe.F(e)}}),wr)(Sr),Ir=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"render",value:function(){var e=this.props.divStyle?Object(d.a)(Object(d.a)({},n.DIV_STYLE),this.props.divStyle):n.DIV_STYLE,t=this.props.titleStyle?Object(d.a)(Object(d.a)({},n.SPAN_STYLE),this.props.titleStyle):n.SPAN_STYLE;return a.createElement("div",{style:e},a.createElement("span",{style:t},this.props.title))}}]),n}(a.PureComponent);Ir.DIV_STYLE={margin:"12px 0 6px 0",padding:"2px 6px",backgroundColor:"#3c5161"},Ir.SPAN_STYLE={color:"#aaafaf",fontSize:"0.9em",fontWeight:100};var Pr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleShowDetailsChanged=a.handleShowDetailsChanged.bind(Object(ie.a)(a)),a.handleListHeightChanged=a.handleListHeightChanged.bind(Object(ie.a)(a)),a.handleAddLayerButtonClicked=a.handleAddLayerButtonClicked.bind(Object(ie.a)(a)),a.handleRemoveLayerButtonClicked=a.handleRemoveLayerButtonClicked.bind(Object(ie.a)(a)),a.handleMoveLayerUpButtonClicked=a.handleMoveLayerUpButtonClicked.bind(Object(ie.a)(a)),a.handleMoveLayerDownButtonClicked=a.handleMoveLayerDownButtonClicked.bind(Object(ie.a)(a)),a.handleChangedLayerSelection=a.handleChangedLayerSelection.bind(Object(ie.a)(a)),a.handleChangedLayerVisibility=a.handleChangedLayerVisibility.bind(Object(ie.a)(a)),a.handleChangedLayerSplitMode=a.handleChangedLayerSplitMode.bind(Object(ie.a)(a)),a.handleChangedBaseMap=a.handleChangedBaseMap.bind(Object(ie.a)(a)),a.renderLayerItem=a.renderLayerItem.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentDidMount",value:function(){this.props.colorMapCategories||this.props.dispatch(c.Ub())}},{key:"render",value:function(){var e=this.props.activeView;return e&&"world"===e.type?a.createElement("div",{style:{width:"100%"}},a.createElement(Gt,{showDetails:this.props.showLayerDetails,onShowDetailsChange:this.handleShowDetailsChanged,isSplitPanel:!0,contentHeight:this.props.layerListHeight,onContentHeightChange:this.handleListHeightChanged,actionComponent:this.renderActionButtonRow()},a.createElement("div",null,this.renderBackgroundMapSelector(),this.renderLayersList()),this.renderLayerDetails())):Re}},{key:"handleShowDetailsChanged",value:function(e){this.props.dispatch(c.Pc("showLayerDetails",e))}},{key:"handleListHeightChanged",value:function(e){this.props.dispatch(c.Pc("layerListHeight",e))}},{key:"handleAddLayerButtonClicked",value:function(){this.props.dispatch(c.Vc("layerSourcesDialog"))}},{key:"handleRemoveLayerButtonClicked",value:function(){this.props.dispatch(c.ic(this.props.activeView.id,this.props.selectedLayerId))}},{key:"handleMoveLayerUpButtonClicked",value:function(){this.props.dispatch(c.Yb(this.props.activeView.id,this.props.selectedLayerId))}},{key:"handleMoveLayerDownButtonClicked",value:function(){this.props.dispatch(c.Xb(this.props.activeView.id,this.props.selectedLayerId))}},{key:"handleChangedLayerVisibility",value:function(e,t){this.props.dispatch(c.ld(this.props.activeView.id,e,{visible:t}))}},{key:"handleChangedLayerSplitMode",value:function(e){this.props.dispatch(c.xc(this.props.activeView.id,this.props.selectedLayerId,e.target.value))}},{key:"handleChangedLayerSelection",value:function(e){var t=e.length?e[0]:null;this.props.dispatch(c.Fc(this.props.activeView.id,t))}},{key:"handleChangedBaseMap",value:function(e){this.props.dispatch(c.sc(this.props.activeView.id,e.target.value))}},{key:"renderLayerItem",value:function(e){var t=this;return a.createElement("div",{style:n.LAYER_DIV_STYLE},a.createElement(ue.Icon,{style:{marginRight:"4px"},icon:e.visible?"eye-open":"eye-off"}),a.createElement(ue.Checkbox,{style:n.LAYER_CHECKBOX_STYLE,checked:e.visible,onClick:n.stopPropagation,onChange:function(n){t.handleChangedLayerVisibility(e,n.target.checked)}}),a.createElement(ue.Icon,{style:n.LAYER_LABEL_ELEMENT_STYLE,icon:Object(B.F)(e),iconSize:12}),a.createElement("span",{style:n.LAYER_LABEL_ELEMENT_STYLE},Object(B.E)(e)))}},{key:"renderActionButtonRow",value:function(){var e=this.props.layers?this.props.layers.length:0,t=this.props.selectedLayerIndex,n=this.props.selectedLayer,r=n&&n.id!==B.a,o=t>0,i=t>=0&&t<e-1;return a.createElement(ue.ButtonGroup,null,a.createElement(kt,{tooltipContent:"Add a new layer",intent:ue.Intent.PRIMARY,onClick:this.handleAddLayerButtonClicked,icon:"add",tooltipPosition:"top"}),a.createElement(kt,{tooltipContent:"Remove selected layer",disabled:!r,onClick:this.handleRemoveLayerButtonClicked,icon:"remove",tooltipPosition:"top"}),a.createElement(kt,{tooltipContent:"Move layer up",disabled:!o,onClick:this.handleMoveLayerUpButtonClicked,icon:"arrow-up",tooltipPosition:"top"}),a.createElement(kt,{tooltipContent:"Move layer down",disabled:!i,onClick:this.handleMoveLayerDownButtonClicked,icon:"arrow-down",tooltipPosition:"top"}),a.createElement(dr,null))}},{key:"renderBackgroundMapSelector",value:function(){return a.createElement("div",{style:n.BG_MAP_CONTAINER_STYLE},a.createElement("div",{style:n.BG_MAP_LABEL_STYLE},"Base map:"),a.createElement("div",{style:n.BG_MAP_VALUE_STYLE},a.createElement(ue.HTMLSelect,{disabled:this.props.offlineMode,value:this.props.offlineMode?"natural_offline":this.props.baseMapId,onChange:this.handleChangedBaseMap},this.props.baseMaps.map((function(e){return a.createElement("option",{key:e.id,value:e.id},e.title)})))))}},{key:"renderLayersList",value:function(){var e=this.props.layers;return e&&e.length?a.createElement(tn,null,a.createElement(yn.a,{items:e,getItemKey:n.getLayerItemKey,renderItem:this.renderLayerItem,selectionMode:yn.b.SINGLE,selection:this.props.selectedLayerId,onSelection:this.handleChangedLayerSelection})):null}},{key:"renderLayerDetails",value:function(){var e=this.props.layers;return e&&e.length?this.props.selectedLayer?this.props.selectedImageLayer?a.createElement("div",null,this.renderDataSelectionSection(),this.renderSplitModeSection()):void 0:a.createElement(a.Fragment,null,a.createElement(ue.Label,{style:{height:"20px"}}," "),Me):xe}},{key:"renderDataSelectionSection",value:function(){var e=this,t=this.props.selectedVariableImageLayer,r=this.props.selectedVariable;if(!t||!r||r.numDims<=2)return null;for(var o=r.numDims-2,i=[],l=function(o){var l=r.dimNames[o],s=r.shape[o]-1;if(s>0){var u=t.varIndex[o];i.push(a.createElement(ue.Label,{key:l+"_index",className:"bp3-inline",style:{display:"flex"}},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},n.capitalizeFirstLetter(l)+" index"),a.createElement("div",{style:Object(d.a)(Object(d.a)({},n.SLIDER_DIV_STYLE_10),{},{width:void 0,flex:"auto 1",margin:"auto 0"})},a.createElement(ue.Slider,{min:0,max:s,stepSize:1,labelStepSize:s,value:u,onChange:function(n){return function(n,a){var r=t.varIndex.slice();r[n]=a,e.props.dispatch(c.ld(e.props.activeView.id,t,{varIndex:r}))}(o,n)}}))))}},s=0;s<o;s++)l(s);return 0===i.length?null:a.createElement(a.Fragment,null,a.createElement(Ir,{title:"DATA SELECTION"}),i)}},{key:"renderSplitModeSection",value:function(){var e=this.props.selectedImageLayer.splitMode||V.b;return a.createElement(a.Fragment,null,a.createElement(Ir,{title:"LAYER SPLIT"}),a.createElement(ue.RadioGroup,{key:"layerSplit",inline:!0,onChange:this.handleChangedLayerSplitMode,selectedValue:e},a.createElement(ue.Radio,{label:"Show left",value:V.a}),a.createElement(ue.Radio,{label:"Show right",value:V.c}),a.createElement(ue.Radio,{label:"Off",value:V.b})))}}],[{key:"getLayerItemKey",value:function(e){return e.id}},{key:"stopPropagation",value:function(e){e.stopPropagation()}},{key:"capitalizeFirstLetter",value:function(e){return e.charAt(0).toUpperCase()+e.slice(1)}}]),n}(a.Component);Pr.SLIDER_DIV_STYLE_10={width:"100%",paddingLeft:"1em",paddingRight:"1em"},Pr.LABEL_SPAN_STYLE_100={flexBasis:"100px",paddingLeft:"5px"},Pr.LAYER_DIV_STYLE={display:"flex",alignItems:"center",justifyContent:"flex-start",height:"100%"},Pr.LAYER_LABEL_ELEMENT_STYLE={marginLeft:"0.5em"},Pr.LAYER_CHECKBOX_STYLE={flexGrow:0,margin:0},Pr.BG_MAP_CONTAINER_STYLE={display:"flex",alignItems:"center",marginTop:3,marginBottom:3},Pr.BG_MAP_LABEL_STYLE={flexGrow:0,marginRight:3},Pr.BG_MAP_VALUE_STYLE={flexGrow:1,marginRight:1,display:"flex",justifyContent:"flex-end"};var Dr=Object(o.b)((function(e){return{offlineMode:Oe.P(e),selectedVariable:Oe.Kb(e),activeView:Oe.e(e),layers:Oe.L(e),selectedLayerId:Oe.pb(e),selectedLayerIndex:Oe.qb(e),selectedLayer:Oe.rb(e),selectedImageLayer:Oe.ob(e),selectedVariableImageLayer:Oe.Ib(e),baseMaps:Oe.l(e),baseMapId:Oe.j(e),layerListHeight:e.session.layerListHeight,showLayerDetails:e.session.showLayerDetails,colorMapCategories:Oe.q(e)}}))(Pr),Lr=n(214),Tr=n.n(Lr),Ar=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"parseValue",value:function(e){var t=function(e){if(!e||""===e.trim())return null;var t=e.split(",");if(2===t.length){var n=parseFloat(t[0]),a=parseFloat(t[1]);return[n,a]}throw new Error("Value must be a pair of numbers.")}(e);if(!t)return null;var n=t[0],a=t[1];return a<n?[a,n]:t}},{key:"validateValue",value:function(e){if(Object(jn.a)(Object(In.a)(n.prototype),"validateValue",this).call(this,e),Object(v.g)(e)){if(!this.props.nullable)throw new Error("Numeric range value expected.")}else Wn(e[0],this.props.nullable,this.props.min,this.props.max,this.props.isInt),Wn(e[1],this.props.nullable,this.props.min,this.props.max,this.props.isInt)}},{key:"formatValue",value:function(e){return!e||e.length<2?"":"".concat(e[0],", ").concat(e[1])}}]),n}(Pn.a);var Nr={display:"grid",gridTemplateColumns:"auto auto auto",justifyItems:"stretch",alignItems:"center",columnGap:"0.7em"},Rr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleUpdateDisplayStatistics=a.handleUpdateDisplayStatistics.bind(Object(ie.a)(a)),a.handleChangedDisplayMinMax=a.handleChangedDisplayMinMax.bind(Object(ie.a)(a)),a.handleChangedDisplayRange=a.handleChangedDisplayRange.bind(Object(ie.a)(a)),a.handleChangedDisplayAlphaBlend=a.handleChangedDisplayAlphaBlend.bind(Object(ie.a)(a)),a.handleChangedColorMapName=a.handleChangedColorMapName.bind(Object(ie.a)(a)),a.handleChangedStyleContext=a.handleChangedStyleContext.bind(Object(ie.a)(a)),a.handleChangedFillColor=a.handleChangedFillColor.bind(Object(ie.a)(a)),a.handleChangedFillColorFromPicker=a.handleChangedFillColorFromPicker.bind(Object(ie.a)(a)),a.handleChangedFillOpacity=a.handleChangedFillOpacity.bind(Object(ie.a)(a)),a.handleChangedStrokeWidth=a.handleChangedStrokeWidth.bind(Object(ie.a)(a)),a.handleChangedStrokeColor=a.handleChangedStrokeColor.bind(Object(ie.a)(a)),a.handleChangedStrokeColorFromPicker=a.handleChangedStrokeColorFromPicker.bind(Object(ie.a)(a)),a.handleChangedStrokeOpacity=a.handleChangedStrokeOpacity.bind(Object(ie.a)(a)),a.handleChangedMarkerColor=a.handleChangedMarkerColor.bind(Object(ie.a)(a)),a.handleChangedMarkerColorFromPicker=a.handleChangedMarkerColorFromPicker.bind(Object(ie.a)(a)),a.handleChangedMarkerSize=a.handleChangedMarkerSize.bind(Object(ie.a)(a)),a.handleChangedMarkerSymbol=a.handleChangedMarkerSymbol.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentDidMount",value:function(){this.props.colorMapCategories||this.props.dispatch(c.Ub())}},{key:"render",value:function(){return a.createElement(a.Fragment,null,this.renderLayerDetails())}},{key:"renderLayerDetails",value:function(){var e;return e=this.props.styleContext===V.d?this.props.selectedEntity?this.renderVectorLayerDetails():Be:this.props.selectedVectorLayer?this.renderVectorLayerDetails():this.props.selectedImageLayer?this.renderImageLayerDetails():Ve,a.createElement("div",{style:{width:"100%"}},this.renderStyleContext(),e)}},{key:"renderImageLayerDetails",value:function(){return a.createElement(a.Fragment,null,a.createElement(Ir,{title:"COLOUR MAPPING"}),this.renderFormAlphaBlending(),this.renderFormDisplayMinMax(),this.renderFormDisplayColorBar(),a.createElement(Ir,{title:"IMAGE ENHANCEMENTS"}),this.renderFormImageEnhancement("opacity","Opacity",0,1),this.renderFormImageEnhancement("brightness","Brightness",0,2),this.renderFormImageEnhancement("contrast","Contrast",0,2),this.renderFormImageEnhancement("hue","Hue",0,1),this.renderFormImageEnhancement("saturation","Saturation",0,2),this.renderFormImageEnhancement("gamma","Gamma",1,2))}},{key:"renderFormAlphaBlending",value:function(){var e=this.props.selectedVariableImageLayer;return e?a.createElement(ue.Switch,{key:"alpha",checked:e.alphaBlending,label:"Alpha blending",onChange:this.handleChangedDisplayAlphaBlend}):null}},{key:"renderFormDisplayMinMax",value:function(){return this.props.selectedVariableImageLayer||this.props.selectedResourceVectorLayer?a.createElement("div",{style:{width:"100%",marginBottom:"20px"}},a.createElement(ue.Label,{key:"drange",style:{display:"flex"}},a.createElement("span",{style:Object(d.a)(Object(d.a)({},n.LABEL_SPAN_STYLE_100),{},{margin:"auto 0"})},"Display range"),a.createElement("div",{style:Nr},a.createElement(Ar,{value:this.props.displayMinMax,style:{flex:"auto"},onChange:this.handleChangedDisplayMinMax,uncontrolled:!0}),a.createElement(kt,{tooltipContent:"Compute valid min/max",intent:ue.Intent.PRIMARY,icon:"arrows-horizontal",tooltipPosition:"top",style:{flexGrow:0,margin:0},disabled:this.props.isComputingVariableStatistics,onClick:this.handleUpdateDisplayStatistics}))),a.createElement("div",{style:n.SLIDER_DIV_STYLE_15},this.renderDisplayRangeSlider())):null}},{key:"renderFormDisplayColorBar",value:function(){var e,t=this.props.selectedVariableImageLayer;if(!t)return null;if(this.props.colorMapCategories){var r=this.renderColorBarBox(t);e=a.createElement(ue.Popover,{content:r,interactionKind:ue.PopoverInteractionKind.CLICK,popoverClassName:"bp3-popover-content-sizing cate-color-bars-popover",position:ue.PopoverPosition.LEFT},this.renderColorBarButton(t,!1))}else e=this.renderColorBarButton(t,!0);return a.createElement(ue.Label,{key:"cmap",className:"bp3-inline",style:{display:"flex"}},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Colour bar"),e)}},{key:"renderFormImageEnhancement",value:function(e,t,r,o){var i=this,l=this.props.selectedVariableImageLayer||this.props.selectedResourceVectorLayer;if(!l||l===this.props.selectedResourceVectorLayer&&"opacity"!==e)return null;return a.createElement(ue.Label,{key:e,style:{display:"flex"}},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},t),a.createElement("div",{style:Object(d.a)(Object(d.a)({},n.SLIDER_DIV_STYLE_10),{},{width:void 0,flex:"auto 1",margin:"auto 0"})},a.createElement(ue.Slider,{min:r,max:o,stepSize:(o-r)/10,labelRenderer:!1,value:l[e],onChange:function(t){return function(e,t){i.props.dispatch(c.ld(i.props.activeView.id,l,Object(s.a)({},e,t)))}(e,t)}})))}},{key:"renderVectorLayerDetails",value:function(){return a.createElement(a.Fragment,null,a.createElement(Ir,{title:"FILL"}),this.renderFillColor(),this.renderFillOpacity(),a.createElement(Ir,{title:"STROKE"}),this.renderStrokeWidth(),this.renderStrokeColor(),this.renderStrokeOpacity(),a.createElement(Ir,{title:"MARKER"}),this.renderMarkerColor(),this.renderMarkerSize(),this.renderMarkerSymbol())}},{key:"renderStyleContext",value:function(){var e,t,n=this.props.selectedEntity,r=this.props.selectedPlacemark,o=this.props.selectedLayer;if(r){var i=r.properties&&r.properties.title;e=i&&""!==i?"My place ".concat(i):"Selected place"}else e=n?"Selected entity":"Selected entity (none)";return t=o?"Layer ".concat(Object(B.E)(o)):"Selected layer",a.createElement(ue.RadioGroup,{key:"styleContext",label:"Style context",onChange:this.handleChangedStyleContext,selectedValue:this.props.styleContext},a.createElement(ue.Radio,{label:e,value:V.d}),a.createElement(ue.Radio,{label:t,value:V.e}))}},{key:"renderFillColor",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Colour"),a.createElement(ue.ControlGroup,{style:{lineHeight:"0",flex:"auto 1"}},a.createElement(Gn.a,{value:this.props.vectorStyle.fill,style:{flex:"auto",fontFamily:"courier",textAlign:"right",paddingRight:"40px"},size:8,uncontrolled:!0,onChange:this.handleChangedFillColor}),a.createElement(ue.Popover,{interactionKind:ue.PopoverInteractionKind.CLICK,popoverClassName:"bp3-minimal",position:ue.PopoverPosition.LEFT,className:"bp3-input-action"},a.createElement(ue.Button,{style:{backgroundColor:this.props.vectorStyle.fill}}),a.createElement(Tr.a,{color:this.props.vectorStyle.fill,onChange:this.handleChangedFillColorFromPicker,disableAlpha:!0}))))}},{key:"renderFillOpacity",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Opacity"),a.createElement("div",{style:Object(d.a)(Object(d.a)({},n.SLIDER_DIV_STYLE_05),{},{width:void 0,flex:"auto 1",margin:"auto 0"})},a.createElement(ue.Slider,{min:0,max:1,stepSize:.05,labelRenderer:!1,value:this.props.vectorStyle.fillOpacity,onChange:this.handleChangedFillOpacity})))}},{key:"renderStrokeWidth",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Width"),a.createElement(Bn,{value:this.props.vectorStyle.strokeWidth,style:{flex:"auto 1",fontFamily:"courier"},size:8,min:0,uncontrolled:!0,onChange:this.handleChangedStrokeWidth}))}},{key:"renderStrokeColor",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Colour"),a.createElement(ue.ControlGroup,{style:{lineHeight:"0",flex:"auto 1"}},a.createElement(Gn.a,{value:this.props.vectorStyle.stroke,style:{flex:"auto",fontFamily:"courier",textAlign:"right",paddingRight:"40px"},size:8,uncontrolled:!0,onChange:this.handleChangedStrokeColor}),a.createElement(ue.Popover,{interactionKind:ue.PopoverInteractionKind.CLICK,popoverClassName:"bp3-minimal",position:ue.PopoverPosition.LEFT,className:"bp3-input-action"},a.createElement(ue.Button,{style:{backgroundColor:this.props.vectorStyle.stroke}}),a.createElement(Tr.a,{color:this.props.vectorStyle.stroke,onChange:this.handleChangedStrokeColorFromPicker,disableAlpha:!0}))))}},{key:"renderStrokeOpacity",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Opacity"),a.createElement("div",{style:Object(d.a)(Object(d.a)({},n.SLIDER_DIV_STYLE_05),{},{width:void 0,flex:"auto 1",margin:"auto 0"})},a.createElement(ue.Slider,{min:0,max:1,stepSize:.05,labelRenderer:!1,value:this.props.vectorStyle.strokeOpacity,onChange:this.handleChangedStrokeOpacity})))}},{key:"renderMarkerColor",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Colour"),a.createElement(ue.ControlGroup,{style:{lineHeight:"0",flex:"auto 1"}},a.createElement(Gn.a,{value:this.props.vectorStyle.markerColor,style:{flex:"auto",fontFamily:"courier",textAlign:"right",paddingRight:"40px"},size:8,uncontrolled:!0,onChange:this.handleChangedMarkerColor}),a.createElement(ue.Popover,{interactionKind:ue.PopoverInteractionKind.CLICK,popoverClassName:"bp3-minimal",position:ue.PopoverPosition.LEFT,className:"bp3-input-action"},a.createElement(ue.Button,{style:{backgroundColor:this.props.vectorStyle.markerColor}}),a.createElement(Tr.a,{color:this.props.vectorStyle.markerColor,onChange:this.handleChangedMarkerColorFromPicker,disableAlpha:!0}))))}},{key:"renderMarkerSize",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Size"),a.createElement(ue.HTMLSelect,{style:{flex:"auto 1"},value:this.props.vectorStyle.markerSize,onChange:this.handleChangedMarkerSize},a.createElement("option",{value:"small"},"Small"),a.createElement("option",{value:"medium"},"Medium"),a.createElement("option",{value:"large"},"Large")))}},{key:"renderMarkerSymbol",value:function(){return a.createElement(ue.Label,{className:"bp3-inline",style:n.LABEL_BOTTOM_MARGIN},a.createElement("span",{style:n.LABEL_SPAN_STYLE_100},"Symbol"),a.createElement(Gn.a,{value:this.props.vectorStyle.markerSymbol,style:{flex:"auto",fontFamily:"courier",textAlign:"right"},size:8,uncontrolled:!0,onChange:this.handleChangedMarkerSymbol}))}},{key:"renderDisplayRangeSlider",value:function(){var e=this.props.selectedVariableImageLayer;if(!e)return null;var t=e.statistics;if(!t)return a.createElement("span",{style:{color:ue.Colors.ORANGE3}},"Missing data min/max");var n=t.min,r=t.max;if(isNaN(n)||isNaN(r))return a.createElement("span",{style:{color:ue.Colors.ORANGE3}},"All values are NaN");if(n===r)return a.createElement("span",{style:{color:ue.Colors.ORANGE3}},"All values are ",n);var o=function(e,t){var n=Math.round(Math.log10(t-e));return n<0?1-n:n<=2?2:n<=3?1:0}(n,r);return a.createElement(ue.RangeSlider,{min:n,max:r,stepSize:(r-n)/100,labelStepSize:r-n,labelRenderer:function(e){return function(e,t){return t<3?e.toFixed(t):e.toExponential(1)}(e,o)},onChange:this.handleChangedDisplayRange,value:[e.displayMin,e.displayMax]})}},{key:"renderColorBarButton",value:function(e,t){var n=e.colorMapName,r=this.renderColorMapImage(this.props.selectedColorMap)||n||"Select Color Bar";return a.createElement(ue.AnchorButton,{className:"bp3-minimal",style:{width:"100%"},disabled:t},r)}},{key:"renderColorBarBox",value:function(e){var t,n=this,r=[],o=Object(g.a)(this.props.colorMapCategories);try{for(o.s();!(t=o.n()).done;){var i=t.value,l=i.colorMaps;r.push(a.createElement("p",{key:i.name+"_head",style:{marginTop:2,marginBottom:2}},a.createElement(ue.Tooltip,{content:a.createElement("div",{style:{width:"19em"}},i.description),position:"top"},i.name))),r.push(a.createElement(yn.a,{key:i.name+"_list",items:l,getItemKey:function(e){return e.name},renderItem:function(e){return n.renderColorMapImage(e)},selectionMode:yn.b.SINGLE,selection:e.colorMapName?[e.colorMapName]:[],onSelection:this.handleChangedColorMapName}))}}catch(c){o.e(c)}finally{o.f()}return a.createElement("div",{style:{padding:5,overflowY:"auto",height:"87vh"}},r)}},{key:"renderColorMapImage",value:function(e){return e?a.createElement(ue.Tooltip,{content:e.name},a.createElement("img",{src:"data:image/png;base64,".concat(e.imageData),alt:e.name,style:{width:"100%",height:"1em"}})):null}},{key:"handleChangedDisplayAlphaBlend",value:function(e){var t=e.target.checked,n=this.props.selectedVariableImageLayer;this.props.dispatch(c.ld(this.props.activeView.id,n,{alphaBlending:t}))}},{key:"handleChangedDisplayMinMax",value:function(e){var t=this.props.selectedVariableImageLayer||this.props.selectedResourceVectorLayer;if(!e.error){var n=e.value[0],a=e.value[1];this.props.dispatch(c.ld(this.props.activeView.id,t,{displayMin:n,displayMax:a}))}}},{key:"handleUpdateDisplayStatistics",value:function(){var e=this,t=this.props.selectedResource,n=this.props.selectedVariable,a=this.props.selectedVariableImageLayer;t&&n&&a&&this.props.dispatch(c.Mb(t.name,n.name,a.varIndex,(function(t){return c.ld(e.props.activeView.id,a,{displayMin:t.min,displayMax:t.max,statistics:t})})))}},{key:"handleChangedDisplayRange",value:function(e){var t=this.props.selectedVariableImageLayer||this.props.selectedResourceVectorLayer;this.props.dispatch(c.ld(this.props.activeView.id,t,{displayMin:e[0],displayMax:e[1]}))}},{key:"handleChangedColorMapName",value:function(e){var t=this.props.selectedVariableImageLayer||this.props.selectedResourceVectorLayer,n=e&&e.length&&e[0];n&&this.props.dispatch(c.ld(this.props.activeView.id,t,{colorMapName:n}))}},{key:"handleChangedStyleContext",value:function(e){this.props.dispatch(c.Rc(e.target.value))}},{key:"handleChangedFillColor",value:function(e){this.handleChangedVectorStyle({fill:e.value})}},{key:"handleChangedFillColorFromPicker",value:function(e){this.handleChangedVectorStyle({fill:e.hex})}},{key:"handleChangedFillOpacity",value:function(e){this.handleChangedVectorStyle({fillOpacity:e})}},{key:"handleChangedStrokeWidth",value:function(e){this.handleChangedVectorStyle({strokeWidth:e.value})}},{key:"handleChangedStrokeColor",value:function(e){this.handleChangedVectorStyle({stroke:e.value})}},{key:"handleChangedStrokeColorFromPicker",value:function(e){this.handleChangedVectorStyle({stroke:e.hex})}},{key:"handleChangedStrokeOpacity",value:function(e){this.handleChangedVectorStyle({strokeOpacity:e})}},{key:"handleChangedMarkerSize",value:function(e){this.handleChangedVectorStyle({markerSize:e.target.value})}},{key:"handleChangedMarkerColor",value:function(e){this.handleChangedVectorStyle({markerColor:e.value})}},{key:"handleChangedMarkerColorFromPicker",value:function(e){this.handleChangedVectorStyle({markerColor:e.hex})}},{key:"handleChangedMarkerSymbol",value:function(e){this.handleChangedVectorStyle({markerSymbol:e.value})}},{key:"handleChangedVectorStyle",value:function(e){this.props.styleContext===V.d?this.props.dispatch(c.jd(this.props.activeView,this.props.selectedEntity,e)):this.props.dispatch(c.md(this.props.activeView.id,this.props.selectedVectorLayer.id,e))}}]),n}(a.Component);Rr.SLIDER_DIV_STYLE_05={width:"100%",paddingLeft:"0.5em",paddingRight:"0.5em"},Rr.SLIDER_DIV_STYLE_10={width:"100%",paddingLeft:"1em",paddingRight:"1em"},Rr.SLIDER_DIV_STYLE_15={width:"100%",paddingLeft:"1.5em",paddingRight:"1.5em"},Rr.LABEL_SPAN_STYLE_100={flexBasis:"100px",paddingLeft:"5px"},Rr.LABEL_BOTTOM_MARGIN={display:"flex",margin:"0 0 5px"};var xr=Object(o.b)((function(e){return{selectedResource:Oe.Bb(e),selectedVariable:Oe.Kb(e),activeView:Oe.e(e),layers:Oe.L(e),selectedLayer:Oe.rb(e),selectedImageLayer:Oe.ob(e),selectedVariableImageLayer:Oe.Ib(e),selectedVectorLayer:Oe.Lb(e),selectedResourceVectorLayer:Oe.Cb(e),selectedEntity:Oe.mb(e),selectedPlacemark:Oe.yb(e),styleContext:Oe.Zb(e),showLayerDetails:e.session.showLayerDetails,colorMapCategories:Oe.q(e),selectedColorMap:Oe.eb(e),displayMinMax:Oe.Hb(e),isComputingVariableStatistics:Oe.G(e),vectorStyle:Oe.bc(e)}}))(Rr);var Mr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).localWebAPI=void 0,a.state={workspaceDir:"",workspaceName:""},a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.onWorkspaceNameChange=a.onWorkspaceNameChange.bind(Object(ie.a)(a)),a.onWorkspaceDirChange=a.onWorkspaceDirChange.bind(Object(ie.a)(a)),a.showDirectorySelectDialog=a.showDirectorySelectDialog.bind(Object(ie.a)(a)),a.localWebAPI=e.isLocalFSAllowed,a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({workspaceDir:e.workspaceDir,workspaceName:e.workspaceName})}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb(this.props.dialogId))}},{key:"canConfirm",value:function(){return!(this.localWebAPI&&!this.state.workspaceDir||!this.state.workspaceName)&&/^([A-Za-z_\-\s0-9.]+)$/.test(this.state.workspaceName)}},{key:"composeWorkspacePath",value:function(){var e=this.state.workspaceDir,t=this.state.workspaceName;return null===e?t:e+"/"+t}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb(this.props.dialogId,this.state)),this.props.isNewDialog?this.props.dispatch(c.ac(this.composeWorkspacePath())):this.props.dispatch(c.oc(this.composeWorkspacePath()))}},{key:"onWorkspaceDirChange",value:function(e){this.setState({workspaceDir:e.target.value})}},{key:"onWorkspaceNameChange",value:function(e){this.setState({workspaceName:e.target.value})}},{key:"showDirectorySelectDialog",value:function(){var e=this;this.props.dispatch(c.Wc({defaultPath:this.state.workspaceDir},(function(t){t&&e.setState({workspaceDir:t})})))}},{key:"render",value:function(){var e=this.props.isOpen;return e?a.createElement(Dt.a,{isOpen:e,title:this.props.isNewDialog?"New Workspace":"Save Workspace As",confirmTitle:this.props.isNewDialog?"New":"Save As",onCancel:this.onCancel,canConfirm:this.canConfirm,onConfirm:this.onConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=null;return this.props.isLocalFSAllowed&&(e=a.createElement(a.Fragment,null,a.createElement("p",{style:{marginTop:"1em"}},"Workspace parent directory:"),a.createElement(ue.ControlGroup,{style:{flexGrow:1,display:"flex",marginLeft:"1em",width:"100%"}},a.createElement(ue.InputGroup,{type:"text",style:{flex:"auto"},value:this.state.workspaceDir,onChange:this.onWorkspaceDirChange}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:{flex:"none"},onClick:this.showDirectorySelectDialog},"...")))),a.createElement("div",null,e,a.createElement("p",{style:{marginTop:"1em"}},"Workspace name:"),a.createElement(ue.InputGroup,{type:"text",style:{width:"100%"},value:this.state.workspaceName,onChange:this.onWorkspaceNameChange}))}}]),n}(a.Component),Vr=Object(o.b)((function(e,t){var n=Oe.x(t.dialogId)(e),a=n.isOpen,r=t.dialogId,o="newWorkspaceDialog"===t.dialogId,i=Oe.I(e),l=n.workspaceDir,c=n.workspaceName;return a&&(Oe.J(e)||(l=l||Oe.lc(e),c=c||Oe.nc(e)),l=l||Oe.K(e)),{workspaceDir:l=i?l||"":null,workspaceName:c=c||"",dialogId:r,isNewDialog:o,isOpen:a,isLocalFSAllowed:i}}))(Mr);function Br(){return a.createElement(Vr,{dialogId:"newWorkspaceDialog"})}function Wr(){return a.createElement(Vr,{dialogId:"saveWorkspaceAsDialog"})}var Fr=n(67);var Ur={width:"40%"},Gr={width:"100%",marginBottom:"1em"},Yr={width:"100%",marginTop:"1em"},Hr={width:"60%",wordWrap:"break-word"},Kr=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a.state=e.preferences,a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(e.preferences)}},{key:"onConfirm",value:function(){if(this.props.dispatch(c.Pb()),h()(this.props.preferences,this.state))Object(Fr.a)({type:"info",text:"No changes detected."});else{var e=this.state.backendConfig,t=this.props.preferences.autoUpdateSoftware!==this.state.autoUpdateSoftware,a=!h()(this.props.preferences.backendConfig,e);this.props.dispatch(c.rd(this.state)),this.props.dispatch(c.qd(this.state)),(t||a)&&(this.props.dispatch(c.id(e)),this.props.dispatch(Object(c.cd)({type:"info",title:n.DIALOG_TITLE,message:"Some changes will be effective only after restart."})))}}},{key:"onCancel",value:function(){this.props.dispatch(c.Pb())}},{key:"canConfirm",value:function(){return!0}},{key:"render",value:function(){return a.createElement(Dt.a,{isOpen:this.props.isOpen,title:n.DIALOG_TITLE,style:{minWidth:"30em"},icon:"confirm",onCancel:this.onCancel,onConfirm:this.onConfirm,canConfirm:this.canConfirm,renderBody:this.renderBody})}},{key:"renderBody",value:function(){return this.props.isOpen?a.createElement(ue.Tabs,{id:"preferences"},a.createElement(ue.Tab,{id:"g",title:"General",panel:this.renderGeneralPanel()}),a.createElement(ue.Tab,{id:"dm",title:"Data Management",panel:this.renderDataManagementPanel()}),a.createElement(ue.Tab,{id:"a",title:"System",panel:this.renderSystemPanel()})):null}},{key:"renderGeneralPanel",value:function(){return a.createElement("div",{style:{width:"100%",marginTop:"1em"}},this.renderReopenLastWorkspace(),this.renderAutoShowNewFigures())}},{key:"renderDataManagementPanel",value:function(){var e=this.props.serviceInfo.userRootMode;return a.createElement("div",{style:{width:"100%",marginTop:"1em"}},!e&&this.renderDataStoresPath(),!e&&this.renderCacheWorkspaceImagery(),this.renderResourceNamePrefix())}},{key:"renderSystemPanel",value:function(){var e=this,t=this.getStateValue("showProperties",!1),n=this.getChangeHandler("showProperties",!1);return a.createElement("div",{style:Yr},a.createElement(ue.ControlGroup,{style:Gr},a.createElement("span",{style:Ur},"Cate UI version:"),a.createElement("span",{style:Hr},a.createElement("code",null,"4.0.0-dev.5"))),a.createElement(ue.ControlGroup,{style:Gr},a.createElement("span",{style:Ur},"Cate API URL:"),a.createElement("span",{style:Hr},a.createElement("code",null,this.props.serviceURL))),a.createElement(ue.ControlGroup,{style:Gr},a.createElement("span",{style:Ur},"Cate API version:"),a.createElement("span",{style:Hr},a.createElement("code",null,this.props.serviceInfo.version))),this.props.serviceInfo.dependencies&&a.createElement(ue.ControlGroup,{style:Gr},a.createElement("span",{style:Ur},"Cate dependencies:"),a.createElement("div",null,a.createElement(ue.Button,{onClick:function(){return n(!t)},small:!0,style:{marginBottom:2}},"Click to "+(t?"collapse":"expand")),a.createElement(ue.Collapse,{isOpen:t},a.createElement(ue.Card,null,a.createElement(ue.HTMLTable,{condensed:!0,small:!0,bordered:!0},a.createElement("thead",null,a.createElement("tr",null,a.createElement("th",null,"Package"),a.createElement("th",null,"Version"))),a.createElement("tbody",null,Object.getOwnPropertyNames(this.props.serviceInfo.dependencies).map((function(t){var n=e.props.serviceInfo.dependencies[t];return a.createElement("tr",null,a.createElement("td",null,t),a.createElement("td",null,n))})))))))),a.createElement(ue.ControlGroup,{style:Gr},a.createElement("span",{style:Ur},"Filesystem access:"),a.createElement("span",{style:Hr},this.props.serviceInfo.userRootMode?"restricted":"unrestricted")))}},{key:"renderReopenLastWorkspace",value:function(){return this.renderBooleanValue("reopenLastWorkspace",!1,"Reopen last workspace on startup")}},{key:"renderAutoShowNewFigures",value:function(){return this.renderBooleanValue("autoShowNewFigures",!1,"Open plot view for new Figure resources")}},{key:"renderDataStoresPath",value:function(){return this.renderDirectoryPath("dataStoresPath",!0,"Synchronisation directory for remote data store files")}},{key:"renderCacheWorkspaceImagery",value:function(){return this.renderBooleanValue("useWorkspaceImageryCache",!0,"Use per-workspace imagery cache (may accelerate image display)")}},{key:"renderResourceNamePrefix",value:function(){return this.renderStringValue("resourceNamePattern",!0,"Default resource name pattern")}},{key:"renderDirectoryPath",value:function(e,t,n){var r=this,o=this.getStateValue(e,t),i=this.getChangeHandler(e,t);return a.createElement("div",{style:{width:"100%",marginBottom:"1em"}},a.createElement("p",null,n,":"),a.createElement(ue.ControlGroup,{style:{display:"flex",alignItems:"center"}},a.createElement(Gn.a,{style:{flexGrow:1},value:o,placeholder:"Enter directory path",onChange:i}),a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:{flex:"none"},onClick:function(){return r.showOpenDirectoryDialog(o,i)}},"...")))}},{key:"renderStringValue",value:function(e,t,n){var r=this.getStateValue(e,t),o=this.getChangeHandler(e,t);return a.createElement(ue.ControlGroup,{style:{width:"100%",marginBottom:"1em",display:"flex",alignItems:"center"}},a.createElement("span",{style:{flexGrow:.8}},n,":"),a.createElement(Gn.a,{style:{flexGrow:.2},value:r,onChange:o}))}},{key:"renderBooleanValue",value:function(e,t,n){var r=this.getStateValue(e,t),o=this.getChangeHandler(e,t);return a.createElement("div",{style:{width:"100%",marginBottom:"1em"}},a.createElement(ue.Switch,{checked:r,label:n,onChange:function(e){return o(e.target.checked)}}))}},{key:"getChangeHandler",value:function(e,t){var n=this;return function(a){var r={};r[e]=Object(v.b)(a)?Object(v.b)(a.value)?a.value:a:null,t?n.setBackendConfig(r):n.setState(r)}}},{key:"getStateValue",value:function(e,t){return t?this.state.backendConfig[e]:this.state[e]}},{key:"setBackendConfig",value:function(e){var t=Object.assign({},this.state.backendConfig,e);this.setState({backendConfig:t})}},{key:"showOpenDirectoryDialog",value:function(e,t){this.props.dispatch(c.Wc({defaultPath:e},(function(e){e&&t(e)})))}}]),n}(a.Component);Kr.DIALOG_ID="preferencesDialog",Kr.DIALOG_TITLE="Preferences";var zr=Object(o.b)((function(e){return{isOpen:Oe.x(Kr.DIALOG_ID)(e).isOpen,preferences:e.session,serviceURL:e.communication.webAPIServiceURL,serviceInfo:e.communication.webAPIServiceInfo}}))(Kr),qr=n(786),Jr={display:"flex",flexFlow:"row nowrap",alignItems:"center"},Xr={marginRight:5},Zr={width:"100%",textAlign:"right"},Qr={},$r=Object(d.a)(Object(d.a)({},Qr),{},{backgroundColor:ue.Colors.BLUE3}),eo={width:"100%",height:"100%",overflow:"auto",borderColor:ue.Colors.DARK_GRAY2,borderStyle:"solid",borderWidth:1},to={width:"100%"},no=function(e){var t=e.rootNode,n=e.fileFilter,r=e.multiSelections,o=e.openDirectory,i=e.currentDirPath,l=e.onCurrentDirPathChange,c=e.selectedPaths,s=e.onSelectedPathsChange,u=function(e,t,n){var a=e.childNodes;if(t){var r=Object(y.i)(e,t);r&&r.length>0&&(a=r[r.length-1].childNodes)}a&&(n&&(a=Object(y.c)(a,n)),a=a.sort(y.d));return a}(t,i,n),d=new Set(c),p=function(e){return u[e]},h=function(e){var t=p(e),n=t.name;return i&&(n=i+"/"+t.name),n},f=function(e){return d.has(h(e))};return a.createElement("div",{style:eo},a.createElement(ue.HTMLTable,{className:"bp3-html-table-condensed bp3-interactive",style:to},a.createElement("thead",null,a.createElement("tr",null,a.createElement("th",null,"Name"),a.createElement("th",null,"Last modified"),a.createElement("th",null,"Size"))),a.createElement("tbody",null,u&&u.map((function(e,t){return a.createElement("tr",{key:t,style:f(t)?$r:Qr,onClick:function(e){return function(e,t,n){var a=p(t);if(!(!o&&a.isDir||o&&!a.isDir)){var i=h(t),l=new Set(d);l.has(i)?l.delete(i):(r&&n.ctrlKey||l.clear(),l.add(i)),s&&s(Array.from(l))}}(0,t,e)},onDoubleClick:function(){return function(e,t){l&&(p(t).isDir&&l(h(t)))}(0,t)}},a.createElement("td",null,function(e){var t=p(e);return a.createElement("div",{style:Jr},a.createElement(ue.Icon,{style:Xr,icon:Object(y.h)(t)}),a.createElement("span",null,t.name))}(t)),a.createElement("td",null,function(e){return p(e).lastModified}(t)),a.createElement("td",null,function(e){var t=p(e);return a.createElement("div",{style:Zr},t.size)}(t)))})))))};var ao=function(e){return e.rootNode.childNodes?null:a.createElement("div",{style:{width:"100%",height:"100%"}},a.createElement(ue.Spinner,{size:32}))},ro={width:"100%",height:"100%",overflow:"auto",borderColor:ue.Colors.DARK_GRAY2,borderStyle:"solid",borderWidth:1},oo=function(e){var t=e.rootNode,n=e.selectedPath,r=e.onSelectedPathChange,o=e.expandedPaths,i=e.onExpandedPathsChange,l=e.showFiles;if(!t.childNodes)return a.createElement(ao,{rootNode:t});var c=function(e,t,n,r){if(!e.childNodes)return[];return function e(t,n,r,o,i,l){o||(t=t.filter((function(e){return e.isDir})));return t.map((function(t){var c=n,s=!1;c&&Object(y.j)(c,i,t.name)?s=i===c.length-1:c=null;var u=r,d=!1;u?d=null!==(u=(u=u.filter((function(e){return Object(y.j)(e,i,t.name)}))).length>0?u:null):u=null;var p,h,f,m=l[0];return l[0]=m+1,t.childNodes&&(p=e(t.childNodes,c,u,o,i+1,l)),h=o?t.isDir&&(!p||Boolean(p.find((function(e){return e.nodeData.isDir})))):t.isDir&&(!p||p.length>0),"updating"===t.status?f=a.createElement(ue.Spinner,{size:16}):"error"===t.status&&(f=a.createElement(ue.Icon,{icon:"error",iconSize:16})),{id:m,icon:Object(y.h)(t),label:t.name,secondaryLabel:f,hasCaret:h,isSelected:s,isExpanded:d,childNodes:p,nodeData:t}}))}(e.childNodes,t?t.split("/"):[],n?n.map((function(e){return e.split("/")})):[],r,0,[0])}(t,n||null,o&&o.length>0?o:null,Boolean(l));return a.createElement("div",{style:ro},a.createElement(ue.Tree,{contents:c,onNodeClick:function(e,t){if(r&&e.nodeData.isDir){var a=io(c,t);r(a!==n?a:null)}},onNodeExpand:function(e,t){if(i&&e.nodeData.isDir){var n=io(c,t);i(Object(y.b)(o||[],n))}},onNodeCollapse:function(e,t){if(i&&e.nodeData.isDir){var n=io(c,t);i(Object(y.k)(o||[],n))}}}))};function io(e,t){for(var n=null,a=e,r=0;r<t.length;r++){if(!a)throw new Error("internal error: missing childNodes at index ".concat(r," in node path ").concat(t.join()));var o=a[t[r]];null===n?n=o.nodeData.name:n+="/"+o.nodeData.name,a=o.childNodes}return n}var lo={width:"52vw"},co={width:"100%",display:"flex",flexFlow:"column nowrap"},so={flexGrow:0,display:"flex",flexFlow:"row nowrap",marginBottom:6},uo={height:"40vh",flexGrow:0},po={flexGrow:0,display:"flex",flexFlow:"row nowrap",alignItems:"center",marginTop:10},ho={flexGrow:1,marginLeft:10,overflow:"hidden"},fo=Object(d.a)(Object(d.a)({},ho),{},{color:"#ffaaaa"}),mo={flexGrow:0,display:"flex",flexFlow:"row nowrap",marginBottom:6},bo={flexGrow:1,backgroundColor:ue.Colors.DARK_GRAY5,paddingLeft:10,paddingRight:10},vo=qr.a.ofType(),yo=function(e){var t=e.isOpen,n=e.onClose,r=e.rootNode,o=e.updateFileNode,i=e.createFileNode,l=e.renameFileNode,c=e.deleteFileNodes,s=e.title,u=e.defaultPath,p=e.buttonLabel,h=e.filters,f=e.saveFile,m=e.openFile,b=e.openDirectory,v=e.multiSelections,g=e.showHiddenFiles,O=e.hostOS;if(f&&m||f&&b||f&&v)throw new Error("saveFile flag cannot be used with openFile, openDirectory, multiSelections flags");g&&console.warn("showHiddenFiles flag ignored (not implemented yet))");var E=u&&Object(y.f)(u,"",v,O)||[],_=[];E.forEach((function(e){_=Object(y.b)(_,Object(En.c)(e,O))}));var C=_.length>0?_[0]:null,k=C||"",w=a.useReducer((function(e,t){return Object(d.a)(Object(d.a)({},e),t)}),{selectedPaths:E,expandedPaths:_,selectedDirPath:C,currentDirPath:k}),S=Object(te.a)(w,2),j=S[0],I=S[1],P=a.useReducer((function(e,t){return Object(d.a)(Object(d.a)({},e),t)}),{value:u||"",isValid:!0}),D=Object(te.a)(P,2),L=D[0],T=D[1],A=a.useState(300),N=Object(te.a)(A,2),R=N[0],x=N[1],M=a.useState(h&&h.length?h[0]:null),V=Object(te.a)(M,2),B=V[0],W=V[1],F=a.useMemo((function(){return function(e){o(e,!1)}}),[o]);if(a.useEffect((function(){u&&F(u)}),[u,F]),a.useEffect((function(){j.expandedPaths.forEach((function(e){return F(e)}))}),[j.expandedPaths,F]),a.useEffect((function(){F(j.currentDirPath)}),[j.currentDirPath,F]),!t)return null;var U,G=function(){return""!==j.currentDirPath},Y=function(){return Boolean(i)},H=function(){return Boolean(l)&&1===j.selectedPaths.length},K=function(){return Boolean(c)&&j.selectedPaths.length>0},z=function(e){if(b)if(null!==e){var t=[e],n=Object(y.l)([Object(En.a)(e)],v);I({selectedDirPath:e,currentDirPath:e,selectedPaths:t}),T({value:n,isValid:!0})}else I({selectedDirPath:null,selectedPaths:[]}),T({value:"",isValid:!0});else I(null!==e?{selectedDirPath:e,currentDirPath:e}:{selectedDirPath:null})};return m||b||f||(U=function(){return null}),a.createElement(Dt.a,{isOpen:t,title:s||Eo(f,b,m),confirmTitle:p||Eo(f,b,m),onConfirm:function(){n&&n({filePaths:j.selectedPaths.map((function(e){return Object(y.e)(e,O)})),canceled:!1})},onCancel:function(){n&&n({filePaths:[],canceled:!0})},canConfirm:function(){return j.selectedPaths.length>0&&L.isValid},style:lo,renderActions:U},a.createElement("div",{style:co},a.createElement("div",{style:mo},a.createElement(ue.ButtonGroup,{minimal:!0},a.createElement(ue.Button,{disabled:!0,onClick:function(){0},icon:"arrow-left"}),a.createElement(ue.Button,{disabled:!0,onClick:function(){0},icon:"arrow-right"}),a.createElement(ue.Button,{disabled:!G(),onClick:function(){if(G()){var e=Object(En.c)(j.currentDirPath);I({selectedDirPath:""!==e?e:null,currentDirPath:e})}},icon:"arrow-up"})),a.createElement("div",{style:bo},a.createElement(ue.Breadcrumbs,{className:"bp3-small",items:function(){if(""===j.currentDirPath)return[];var e=j.currentDirPath.split("/");return e.map((function(t,n){var a;if(n<e.length-1){var r=e.slice(0,n+1).join("/");a=function(){z(r)}}return{text:t,onClick:a}}))}()})),a.createElement(ue.ButtonGroup,{minimal:!0},a.createElement(ue.Button,{disabled:!0,onClick:function(){0},icon:"caret-down"}),a.createElement(ue.Button,{onClick:function(){o(j.currentDirPath,!0)},icon:"refresh"}))),(Boolean(i)||Boolean(l)||Boolean(c))&&a.createElement("div",{style:so},a.createElement(ue.ButtonGroup,{minimal:!0},Boolean(i)&&a.createElement(ue.Tooltip,{content:Y()?"Create new directory in ".concat(j.currentDirPath):null},a.createElement(ue.Button,{disabled:!Y(),onClick:function(){Y()},icon:"folder-new",text:"Create Directory"})),Boolean(l)&&a.createElement(ue.Tooltip,{content:H()?"Rename ".concat(j.selectedPaths[0]):null},a.createElement(ue.Button,{disabled:!H(),onClick:function(){H()},icon:"edit",text:"Rename"})),Boolean(c)&&a.createElement(ue.Tooltip,{content:K()?"Delete ".concat(j.selectedPaths[0])+(j.selectedPaths.length>0?", ...":""):null},a.createElement(ue.Button,{disabled:!K(),onClick:function(){K()&&c(j.selectedPaths)},icon:"trash",text:"Delete Directory"})))),a.createElement("div",{style:uo},a.createElement(Ut,{dir:"hor",initialSize:R,onChange:function(e){x(e)}},a.createElement(oo,{rootNode:r,selectedPath:j.selectedDirPath,onSelectedPathChange:z,expandedPaths:j.expandedPaths,onExpandedPathsChange:function(e){I({expandedPaths:e})}}),a.createElement(no,{rootNode:r,currentDirPath:j.currentDirPath,onCurrentDirPathChange:function(e){!b||m||v?I({expandedPaths:Object(y.b)(j.expandedPaths,e),selectedDirPath:e,currentDirPath:e}):(I({expandedPaths:Object(y.b)(j.expandedPaths,e),selectedDirPath:e,currentDirPath:e,selectedPaths:[e]}),T({value:Object(y.l)([Object(En.a)(e)],v),isValid:!0}))},selectedPaths:j.selectedPaths,onSelectedPathsChange:function(e){I({selectedPaths:e}),T({value:Object(y.l)(e.map((function(e){return Object(En.a)(e)})),v),isValid:!0})},fileFilter:B,multiSelections:v,openDirectory:b}))),a.createElement("div",{style:po},a.createElement("span",null,b&&!m?"Directory:":"Filename:"),a.createElement("input",{className:ue.Classes.INPUT,style:L.isValid?ho:fo,type:"text",value:L.value,onChange:function(e){var t=e.target.value||"",n=!0,a=Object(y.f)(t,j.currentDirPath,v,O);if(a.length){var o=j.expandedPaths;a.forEach((function(e){var t=Object(En.c)(e);o=Object(y.b)(o,t)}));var i=a.length>0?Object(En.c)(a[0]):null;null!==i&&null===Object(y.g)(r,i)&&(i=null),null!==i?(I({selectedDirPath:i,currentDirPath:i,expandedPaths:o,selectedPaths:a}),(m||b)&&(n=!a.find((function(e){return null===Object(y.g)(r,e)})))):(I({selectedPaths:a,expandedPaths:o}),n=!1)}else I({selectedPaths:a});T({value:t,isValid:n})}}),a.createElement(ue.ButtonGroup,null,a.createElement(ue.Button,{disabled:!0,onClick:function(){0},icon:"caret-down",minimal:!0}),h&&a.createElement(vo,{popoverProps:{minimal:!0},items:h,filterable:!1,itemRenderer:go,onItemSelect:function(e){return W(e)}},a.createElement(ue.Button,{text:Oo(B),rightIcon:"caret-down"}))))))},go=function(e,t){var n=t.modifiers,r=t.handleClick;return a.createElement(ue.MenuItem,{active:n.active,disabled:n.disabled,key:e.name,text:e.name,label:"(".concat(e.extensions.map((function(e){return"*."+e})).join(", "),")"),onClick:r})};function Oo(e){return e=e||y.a,"".concat(e.name," (").concat(e.extensions.map((function(e){return"*."+e})).join(", "),")")}function Eo(e,t,n){return e?"Save File":t&&!n?"Select Directory":"Open File"}var _o=function(e){var t=new Set(e.properties);return a.createElement(yo,Object.assign({},e,{saveFile:!1,openFile:t.has("openFile"),openDirectory:t.has("openDirectory"),multiSelections:t.has("multiSelections"),showHiddenFiles:t.has("showHiddenFiles")}))};var Co={updateFileNode:c.kd},ko=Object(o.b)((function(e){return Object(d.a)(Object(d.a)({},e.control.directorySelectDialog.options),{},{isOpen:e.control.directorySelectDialog.isOpen,onClose:e.control.directorySelectDialog.onClose,rootNode:e.data.fsRootNode,hostOS:e.communication.webAPIServiceInfo.hostOS})}),Co)((function(e){return e.isOpen?a.createElement(_o,e):null}));var wo={updateFileNode:c.kd},So=Object(o.b)((function(e){return Object(d.a)(Object(d.a)({},e.control.fileOpenDialog.options),{},{isOpen:e.control.fileOpenDialog.isOpen,onClose:e.control.fileOpenDialog.onClose,rootNode:e.data.fsRootNode,hostOS:e.communication.webAPIServiceInfo.hostOS})}),wo)((function(e){return e.isOpen?a.createElement(_o,e):null})),jo=function(e){var t=e.onClose,n=Object(Kt.a)(e,["onClose"]),r=new Set(n.properties);return a.createElement(yo,Object.assign({},n,{onClose:function(e){t({canceled:e.canceled,filePath:!e.canceled&&e.filePaths.length>0?e.filePaths[0]:null})},saveFile:!0,openFile:!1,openDirectory:!1,multiSelections:!1,showHiddenFiles:r.has("showHiddenFiles")}))};var Io={updateFileNode:c.kd},Po=Object(o.b)((function(e){return Object(d.a)(Object(d.a)({},e.control.fileSaveDialog.options),{},{isOpen:e.control.fileSaveDialog.isOpen,onClose:e.control.fileSaveDialog.onClose,rootNode:e.data.fsRootNode,hostOS:e.communication.webAPIServiceInfo.hostOS})}),Io)((function(e){return e.isOpen?a.createElement(jo,e):null}));var Do={updateFileNode:c.kd},Lo=Object(o.b)((function(e){return Object(d.a)(Object(d.a)({},e.control.fileBrowseDialog.options),{},{isOpen:e.control.fileBrowseDialog.isOpen,onClose:e.control.fileBrowseDialog.onClose,rootNode:e.data.fsRootNode,hostOS:e.communication.webAPIServiceInfo.hostOS})}),Do)((function(e){var t=e.properties;if(t){var n=new Set(t);n.delete("openFile"),n.delete("openDirectory"),t=Array.from(n)}else t=[];return e.isOpen?a.createElement(_o,Object.assign({title:"Browse Files"},e,{properties:t})):null})),To={none:void 0,info:kn.a.INFO_SIGN,error:kn.a.ERROR,question:kn.a.CONFIRM,warning:kn.a.WARNING_SIGN},Ao=function(e){var t=e.isOpen,n=e.onClose,r=e.type,o=e.title,i=e.message,l=e.detail,c=e.buttons,s=e.checkboxLabel,u=e.checkboxChecked,d=e.defaultId,p=e.cancelId,h=a.useState(Object(v.b)(u)&&u),f=Object(te.a)(h,2),m=f[0],b=f[1],y=Boolean(s);if(!t)return null;var g=function(){n&&n(null)};return a.createElement(Dt.a,{isOpen:t,title:o,icon:To[r],onCancel:g,renderActions:function(){return(c||["OK"]).map((function(e,t){var r=t===d?ue.Intent.PRIMARY:ue.Intent.NONE;return t===p?a.createElement(ue.Button,{intent:r,onClick:g},e):a.createElement(ue.Button,{intent:r,onClick:function(){return function(e){n&&n({buttonIndex:e,checkboxChecked:m})}(t)}},e)}))}},a.createElement("p",null,i),a.createElement("p",{className:"bp3-text-muted"},l),y&&a.createElement("p",null,a.createElement(ue.Checkbox,{label:s,onChange:function(e){b(e.target.checked)}})))};var No=Object(o.b)((function(e){return e.control.messageBox?Object(d.a)({isOpen:e.control.messageBox.isOpen,onClose:e.control.messageBox.onClose},e.control.messageBox.options):{isOpen:!1,message:""}}))((function(e){return a.createElement(Ao,e)})),Ro=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onTopPanelSelected=a.onTopPanelSelected.bind(Object(ie.a)(a)),a.onBottomPanelSelected=a.onBottomPanelSelected.bind(Object(ie.a)(a)),a.onTopPanelClose=a.onTopPanelClose.bind(Object(ie.a)(a)),a.onBottomPanelClose=a.onBottomPanelClose.bind(Object(ie.a)(a)),a.onVerSplitterPosChange=a.onVerSplitterPosChange.bind(Object(ie.a)(a)),a.onHorSplitterPosChange=a.onHorSplitterPosChange.bind(Object(ie.a)(a)),a.state=n.mapPropsToState(e),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState(n.mapPropsToState(e))}},{key:"onTopPanelSelected",value:function(e){var t=this,n=this.state.selectedTopPanelId===e;this.setState({selectedTopPanelId:n?null:e},(function(){t.props.onSelectedTopPanelChange&&t.props.onSelectedTopPanelChange(t.state.selectedTopPanelId)}))}},{key:"onBottomPanelSelected",value:function(e){var t=this,n=this.state.selectedBottomPanelId===e;this.setState({selectedBottomPanelId:n?null:e},(function(){t.props.onSelectedBottomPanelChange&&t.props.onSelectedBottomPanelChange(t.state.selectedBottomPanelId)}))}},{key:"onTopPanelClose",value:function(){this.onTopPanelSelected(null)}},{key:"onBottomPanelClose",value:function(){this.onBottomPanelSelected(null)}},{key:"onVerSplitterPosChange",value:function(e){var t=this.state.layout.verPos+e;this.setLayout(Object(d.a)(Object(d.a)({},this.state.layout),{},{verPos:t}))}},{key:"onHorSplitterPosChange",value:function(e){var t=this.state.layout.horPos;"left"===(this.props.position||"left")?t+=e:t-=e,this.setLayout(Object(d.a)(Object(d.a)({},this.state.layout),{},{horPos:t}))}},{key:"setLayout",value:function(e){var t=this;this.setState({layout:e},(function(){t.props.onLayoutChange&&t.props.onLayoutChange(e)}))}},{key:"getSelectedTopPanel",value:function(){return this.findPanel(this.state.selectedTopPanelId)}},{key:"getSelectedBottomPanel",value:function(){return this.findPanel(this.state.selectedBottomPanelId)}},{key:"findPanel",value:function(e){if(!e)return null;var t=null;return a.Children.forEach(this.props.children,(function(n){var a=n;a.props&&a.props.id===e&&(t=a)})),t}},{key:"render",value:function(){var e,t,n,r,o=a.createElement(zo,{panels:a.Children.toArray(this.props.children),position:this.props.position,selectedTopPanelId:this.state.selectedTopPanelId,selectedBottomPanelId:this.state.selectedBottomPanelId,onTopPanelSelected:this.onTopPanelSelected,onBottomPanelSelected:this.onBottomPanelSelected}),i=this.getSelectedTopPanel(),l=this.getSelectedBottomPanel(),c=this.state.layout.horPos,s="100%";if(i){i&&l&&(s=this.state.layout.verPos);var u={width:c,height:s};e=this.renderPanelPane(i,u,this.onTopPanelClose)}if(l){i&&l&&(s="calc(100% - ".concat(this.state.layout.verPos+4,"px)"));var d={width:c,height:s};t=this.renderPanelPane(l,d,this.onBottomPanelClose)}e&&t?n=this.renderTwoPanelsPane(e,t):e?n=e:t&&(n=t),n&&(r=this.renderResizablePanelPane(n));var p={display:"flex",flexFlow:"row nowrap",flex:"none",maxHeight:"100%"};return"left"===(this.props.position||"left")?a.createElement("div",{style:p},o,r):a.createElement("div",{style:p},r,o)}},{key:"renderPanelPane",value:function(e,t,n){return a.createElement(qo,{panel:e,onClose:n,position:this.props.position,style:t})}},{key:"renderTwoPanelsPane",value:function(e,t){var n=a.createElement(Ft,{dir:"ver",onChange:this.onVerSplitterPosChange});return a.createElement("div",{style:{display:"flex",flexDirection:"column"}},e,n,t)}},{key:"renderResizablePanelPane",value:function(e){var t,r=this.props.undockedMode||!1,o=this.props.position||"left";r&&(t="left"===o?{position:"absolute",top:0,left:n.PANEL_BAR_SIZE,backgroundColor:Wo,zIndex:5}:{position:"absolute",top:0,right:n.PANEL_BAR_SIZE,backgroundColor:Wo,zIndex:5});var i=Object(d.a)({paddingTop:n.PANEL_PANE_PADDING,paddingLeft:"left"===o?n.PANEL_PANE_PADDING:0,paddingRight:"left"===o?0:n.PANEL_PANE_PADDING,flex:"auto",display:"flex",flexFlow:"row nowrap",maxHeight:"100%"},t),l=a.createElement(Ft,{dir:"hor",onChange:this.onHorSplitterPosChange});return"left"===o?a.createElement("div",{style:i},e,l):a.createElement("div",{style:i},l,e)}}],[{key:"mapPropsToState",value:function(e){return{selectedTopPanelId:e.selectedTopPanelId,selectedBottomPanelId:e.selectedBottomPanelId,layout:e.layout}}}]),n}(a.PureComponent);function xo(e){var t=a.createElement(ue.Icon,{icon:e.icon,className:"cate-panel-header-item"}),n=a.createElement("span",{className:"cate-panel-text cate-panel-header-item"},e.title.toUpperCase()),r=a.createElement(ue.Icon,{icon:"cross",className:"cate-icon-small cate-panel-header-item",onClick:e.onClose});return a.createElement("div",{className:"cate-panel-header",style:{flex:"none"}},t,n,r)}Ro.PANEL_ICON_SIZE=20,Ro.PANEL_ICON_PADDING=8,Ro.PANEL_BAR_SIZE=2*Ro.PANEL_ICON_PADDING+Ro.PANEL_ICON_SIZE,Ro.PANEL_BAR_PADDING=8,Ro.PANEL_PANE_PADDING=4,Ro.PANEL_BODY_PADDING=2;var Mo={padding:Ro.PANEL_ICON_PADDING},Vo=Object(d.a)(Object(d.a)({},Mo),{},{color:ue.Colors.GRAY4}),Bo=Object(d.a)(Object(d.a)({},Mo),{},{color:ue.Colors.WHITE,backgroundColor:ue.Colors.DARK_GRAY5}),Wo="rgba(57, 75, 89, 0.5)",Fo={flex:"none",listStyleType:"none",padding:0,margin:0,border:"none"},Uo={flex:"none",listStyleType:"none",padding:0,margin:0,border:"none"},Go={flex:"auto"},Yo={display:"flex",flexDirection:"column",flex:"none",maxHeight:"100%",minWidth:Ro.PANEL_BAR_SIZE,overflow:"hidden",backgroundColor:ue.Colors.DARK_GRAY2,paddingTop:Ro.PANEL_BAR_PADDING,paddingBottom:Ro.PANEL_BAR_PADDING},Ho={textAlign:"center",verticalAlign:"middle"},Ko={flex:1,padding:Ro.PANEL_BODY_PADDING,overflow:"auto"};function zo(e){var t="left"===(e.position||"left")?ue.PopoverPosition.RIGHT:ue.PopoverPosition.LEFT,n=e.panels||[];function r(n,r){var o=n.props.id,i=n.props.title,l=n.props.icon,c=o===r?Bo:Vo,s=n.props.position||"top";return a.createElement("li",{key:o,onClick:function(){return"top"===s?e.onTopPanelSelected(o):e.onBottomPanelSelected(o)},style:c},a.createElement(ue.Tooltip,{content:i,position:t,hoverOpenDelay:1500},a.createElement("span",{style:Ho},a.createElement(ue.Icon,{icon:l,iconSize:Ro.PANEL_ICON_SIZE}))))}var o,i=[],l=[],c=Object(g.a)(n);try{for(c.s();!(o=c.n()).done;){var s=o.value;if(s.props&&s.props.id)"top"===(s.props.position||"top")?i.push(r(s,e.selectedTopPanelId)):l.push(r(s,e.selectedBottomPanelId));else console.error("PanelBar children must be of type Panel")}}catch(u){c.e(u)}finally{c.f()}return a.createElement("div",{style:Yo},a.createElement("ul",{style:Fo},i),a.createElement("div",{style:Go}),a.createElement("ul",{style:Uo},l))}function qo(e){var t=e.panel;if(!t||!t.props||!t.props.body)return null;var n=t.props.id,r=t.props.body,o=Object(d.a)({display:"flex",flexDirection:"column",alignItems:"stretch"},e.style);return a.createElement("div",{style:o},a.createElement(xo,{id:n,title:t.props.title,icon:t.props.icon,onClose:function(){return e.onClose(n)}}),a.createElement("div",{style:Ko},r))}var Jo=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(){return Object(re.a)(this,n),t.apply(this,arguments)}return Object(oe.a)(n,[{key:"shouldComponentUpdate",value:function(){return!1}},{key:"render",value:function(){return null}}]),n}(a.PureComponent),Xo=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).viewMap=void 0,a.viewMap=n.createViewMap(a.props.views),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.viewMap=n.createViewMap(e.views)}},{key:"render",value:function(){return this.props.views.length?O(this.props.viewLayout)?this.renderViewSplit(this.props.viewLayout,""):this.renderViewPanel(this.props.viewLayout,""):this.renderNoViews()}},{key:"renderNoViews",value:function(){return a.createElement("div",{style:n.NO_VIEW_CONTAINER_STYLE},a.createElement(ue.NonIdealState,{title:"No views",description:this.props.noViewsDescription,action:this.props.noViewsAction,icon:this.props.noViewsVisual}))}},{key:"renderViewSplit",value:function(e,t){var r,o,i=this,l=e.layouts[0];r=O(l)?this.renderViewSplit(l,t+"0"):this.renderViewPanel(l,t+"0");var c=e.layouts[1];if(o=O(c)?this.renderViewSplit(c,t+"1"):this.renderViewPanel(c,t+"1"),r&&o){var s,u,d;if("hor"===e.dir){s=n.HOR_SPLIT_CONTAINER_STYLE;var p=e.pos;u={flex:"none",width:p,height:"100%"},d={flex:"auto",width:"calc(100% - ".concat(p+4,"px)"),height:"100%"}}else{s=n.VER_SPLIT_CONTAINER_STYLE;var h=e.pos;u={flex:"none",width:"100%",height:h},d={flex:"auto",width:"100%",height:"calc(100% - ".concat(h+4,"px)")}}return a.createElement("div",{style:s},a.createElement("div",{style:u},r),a.createElement(Ft,{dir:e.dir,onChange:function(e){return i.props.onChangeViewSplitPos(t,e)}}),a.createElement("div",{style:d},o))}return r||(o||null)}},{key:"renderViewPanel",value:function(e,t){return a.createElement(Zo,{viewLayout:this.props.viewLayout,viewRenderMap:this.props.viewRenderMap,viewMap:this.viewMap,activeView:this.props.activeView,viewPath:t,viewIds:e.viewIds,selectedViewId:e.selectedViewId,onSelectView:this.props.onSelectView,onCloseView:this.props.onCloseView,onCloseAllViews:this.props.onCloseAllViews,onMoveView:this.props.onMoveView,onSplitViewPanel:this.props.onSplitViewPanel})}}],[{key:"createViewMap",value:function(e){var t={};return e.forEach((function(e){t[e.id]=e})),t}}]),n}(a.PureComponent);Xo.NO_VIEW_CONTAINER_STYLE={width:"100%",height:"100%",flex:"auto"},Xo.HOR_SPLIT_CONTAINER_STYLE={width:"100%",height:"100%",display:"flex",flexFlow:"row nowrap",flex:"auto",boxSizing:"border-box"},Xo.VER_SPLIT_CONTAINER_STYLE={width:"100%",height:"100%",display:"flex",flexFlow:"column nowrap",flex:"auto",boxSizing:"border-box"};var Zo=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).contentElement=void 0,a.onSplitHor=a.onSplitHor.bind(Object(ie.a)(a)),a.onSplitVer=a.onSplitVer.bind(Object(ie.a)(a)),a.onContentDivRef=a.onContentDivRef.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onSplitHor",value:function(){this.props.onSplitViewPanel(this.props.viewPath,"hor",.5*this.contentElement.clientWidth)}},{key:"onSplitVer",value:function(){this.props.onSplitViewPanel(this.props.viewPath,"ver",.5*this.contentElement.clientHeight)}},{key:"onContentDivRef",value:function(e){this.contentElement=e}},{key:"render",value:function(){var e=this,t=this.props.viewIds;if(!t||!t.length)return null;var r,o=this.props.selectedViewId,i=[],l=null;t.forEach((function(t){var n=e.props.viewMap[t];n&&(o&&t===o&&(l=n),i.push(n))}));for(var c=[],s=function(t){var o=i[t],s=o.id,u=o.title,d=o.icon,p=void 0,h=void 0,f=void 0;if(l&&l.id===s){var m=e.props.viewRenderMap[o.type];r=m(o),p=n.TAB_STYLE_SELECTED,h=l===e.props.activeView?n.TITLE_STYLE_ACTIVE:n.TITLE_STYLE_SELECTED,f=n.CLOSE_ICON_STYLE_SELECTED}else p=n.TAB_STYLE_NORMAL,h=n.TITLE_STYLE_NORMAL,f=n.CLOSE_ICON_STYLE_NORMAL;var b=function(){e.props.onSelectView(e.props.viewPath,s)},v=void 0;d&&""!==d&&(v=a.createElement(ue.Icon,{icon:d,style:h,onClick:b})),c.push(a.createElement("div",{key:s,style:p},v,a.createElement("span",{style:h,onClick:b},u),a.createElement(ue.Icon,{style:f,icon:"cross",onClick:function(){e.props.onCloseView(e.props.viewPath,s)}})))},u=0;u<i.length;u++)s(u);var d,p,h,f=a.createElement("div",{style:n.TABS_STYLE},c),m=a.createElement("div",{key:"spacer",style:n.SPACER_STYLE}),b=n.MENU_ICON_STYLE;if(i.length>1&&(d=a.createElement(ue.Icon,{key:"splitHor",style:b,icon:"add-column-right",onClick:this.onSplitHor}),p=a.createElement(ue.Icon,{key:"splitVer",style:b,icon:"add-row-bottom",onClick:this.onSplitVer})),l){var v,y,g=k(this.props.viewLayout,o),O=this.props.viewMap,E=g.before.map((function(t){var n=O[t];return a.createElement(ue.MenuItem,{key:t,onClick:function(){return e.props.onMoveView(o,"before",n.id)},text:n.title})})),_=g.after.map((function(t){var n=O[t];return a.createElement(ue.MenuItem,{key:t,onClick:function(){return e.props.onMoveView(o,"after",n.id)},text:n.title})}));if(E.length&&(v=a.createElement(ue.MenuItem,{key:"before",text:"Move Before"},E)),_.length&&(y=a.createElement(ue.MenuItem,{key:"after",text:"Move After"},_)),v||y){var C=a.createElement(ue.Menu,null,v,y);h=a.createElement(ue.Popover,{content:C,position:ue.PopoverPosition.BOTTOM},a.createElement(ue.Icon,{key:"more",style:b,icon:"more"}))}}var w=a.createElement("div",{style:n.MENU_STYLE},d,p,h);return a.createElement("div",{style:n.CONTAINER_STYLE},a.createElement("div",{style:n.VIEW_HEADER_STYLE},f,m,w),a.createElement("div",{style:n.VIEW_BODY_STYLE,ref:this.onContentDivRef},r))}}]),n}(a.PureComponent);Zo.SELECTED_BG_COLOR=ue.Colors.DARK_GRAY1,Zo.TAB_STYLE_SELECTED={padding:2,flex:"none",color:ue.Colors.WHITE,backgroundColor:Zo.SELECTED_BG_COLOR},Zo.TAB_STYLE_NORMAL={padding:2,color:ue.Colors.LIGHT_GRAY1},Zo.TITLE_STYLE_BASE={paddingLeft:4,paddingRight:4},Zo.TITLE_STYLE_ACTIVE=Object(d.a)(Object(d.a)({},Zo.TITLE_STYLE_BASE),{},{color:ue.Colors.BLUE5}),Zo.TITLE_STYLE_SELECTED=Zo.TITLE_STYLE_BASE,Zo.TITLE_STYLE_NORMAL=Zo.TITLE_STYLE_BASE,Zo.CLOSE_ICON_STYLE_SELECTED={marginLeft:6,fontSize:12},Zo.CLOSE_ICON_STYLE_NORMAL={marginLeft:6,fontSize:12},Zo.MENU_ICON_STYLE={color:ue.Colors.GRAY5,marginLeft:5,fontSize:12},Zo.TABS_STYLE={flex:"none",display:"flex",flexDirection:"row"},Zo.SPACER_STYLE={flex:"auto"},Zo.MENU_STYLE={flex:"none",height:"100%"},Zo.VIEW_HEADER_STYLE={display:"flex",flexDirection:"row",flex:"none",width:"100%",marginTop:2,borderBottomStyle:"solid",borderBottomWidth:2,borderBottomColor:Zo.SELECTED_BG_COLOR,boxSizing:"border-box",overflow:"hidden"},Zo.VIEW_BODY_STYLE={display:"flex",flexDirection:"column",flex:"auto",width:"100%",height:"100%",overflow:"hidden"},Zo.CONTAINER_STYLE={display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"hidden"};var Qo=n(410),$o={marginTop:"0.75em",display:"flex",flexDirection:"column",alignItems:"flex-end"},ei={overflow:"auto"},ti=function(e){var t=e.details,n=e.onCopyDetails,r=e.width,o=e.height,i=a.useState(!1),l=Object(te.a)(i,2),c=l[0],s=l[1];return a.createElement("div",{style:$o},a.createElement("div",null,n&&a.createElement(ue.Button,{onClick:function(){return n(t)},icon:"clipboard",small:!0,style:{marginRight:6}}),a.createElement(ue.Button,{onClick:function(){return s(!c)},rightIcon:c?"chevron-up":"chevron-down",small:!0},c?"Hide Details":"Show Details")),a.createElement(ue.Collapse,{isOpen:c},a.createElement("pre",{className:"user-selectable",style:Object(d.a)(Object(d.a)({},ei),{},{width:r||"32em",height:o||"20em"})},t)))};var ni={wordBreak:"break-all"},ai=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).renderBody=a.renderBody.bind(Object(ie.a)(a)),a.handleConfirm=a.handleConfirm.bind(Object(ie.a)(a)),a.handleCancel=a.handleCancel.bind(Object(ie.a)(a)),a.handleCopyReport=a.handleCopyReport.bind(Object(ie.a)(a)),a.state={copyReport:!1},a}return Object(oe.a)(n,[{key:"handleConfirm",value:function(){if(this.state.copyReport){var e=this.props.jobTitle,t=this.props.jobFailure,a="Job: ".concat(e,"\nMessage: ").concat(t.message,"\n");a+="Code: ".concat(t.code,"\n"),t.data&&(t.data.method&&(a+="Method: ".concat(t.data.method,"\n")),t.data.exception&&(a+="Exception: ".concat(t.data.exception,"\n")),t.data.traceback&&(a+="\n".concat(t.data.traceback,"\n"))),c.Hb(a)}this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"handleCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"handleCopyReport",value:function(e){this.setState({copyReport:e.target.checked})}},{key:"render",value:function(){if(!this.props.isOpen||!this.props.jobFailure)return null;var e=Object(Nt.m)(this.props.jobFailure);return a.createElement(Dt.a,{isOpen:this.props.isOpen,icon:"error",title:e,onConfirm:this.handleConfirm,onCancel:this.handleCancel,noCancelButton:!0,renderBody:this.renderBody,style:n.DIALOG_STYLE})}},{key:"renderBody",value:function(){if(!this.props.isOpen)return null;var e=this.props.jobFailure.message;e||(e="An unknown error occurred (code ".concat(this.props.jobFailure.code,")."));var t,n,r=a.createElement("div",{style:ni},a.createElement("p",null,"Oops, Cate couldn't carry out the request"),a.createElement("em",null,a.createElement("p",{className:"user-selectable"},this.props.jobTitle)),a.createElement("div",null,"Reason:"),a.createElement("div",{className:"user-selectable"},e));!Object(Nt.o)(this.props.jobFailure)&&this.props.jobFailure.data&&this.props.jobFailure.data.traceback&&(t=a.createElement(ti,{details:this.props.jobFailure.data.traceback,width:"36em"})),Object(Nt.n)(this.props.jobFailure)&&(n=a.createElement("div",{style:{marginTop:"1em"}},a.createElement("span",{className:"bp3-text-muted"},"Please consider reporting this issue in Cate's ",a.createElement("a",{href:"https://github.com/CCI-Tools/cate/issues",target:"_blank",rel:"noopener noreferrer"},"issue tracker"),"."),a.createElement(ue.Checkbox,{label:"Copy error report to clipboard",checked:this.state.copyReport,onChange:this.handleCopyReport})));var o,i=Object(Nt.k)(this.props.jobFailure);return o=Object(Nt.o)(this.props.jobFailure)?ue.Intent.PRIMARY:ue.Intent.WARNING,a.createElement("div",{style:{display:"flex"}},a.createElement("div",{style:{fontSize:"4em",flex:"0 1 1em"}},a.createElement(ue.Icon,{icon:i,intent:o,iconSize:48})),a.createElement("div",{style:{flex:"1 1 90%",marginLeft:"1em"}},r,t,n))}}]),n}(a.Component);ai.DIALOG_ID="jobFailureDialog",ai.DIALOG_STYLE={width:"600px"};var ri=Object(o.b)((function(e){var t=Oe.x(ai.DIALOG_ID)(e);return{isOpen:t.isOpen,jobTitle:t.jobTitle,jobFailure:t.jobFailure}}))(ai),oi=n(81),ii=n(208),li={width:"100%",marginBottom:"2em",display:"flex",flexGrow:1},ci={flex:"none"};var si=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).handleOpenFilesOnClose=function(e){e.canceled||a.setState(Object(d.a)(Object(d.a)({},a.state),{},{filePaths:e.filePaths}))},a.handleOpenFilesOpen=function(){a.props.dispatch(Object(c.Yc)({title:"Select Files",properties:["openFile","multiSelections"]},a.handleOpenFilesOnClose))},a.state={filePaths:[]},a.onCancel=a.onCancel.bind(Object(ie.a)(a)),a.onConfirm=a.onConfirm.bind(Object(ie.a)(a)),a.canConfirm=a.canConfirm.bind(Object(ie.a)(a)),a.renderBody=a.renderBody.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"componentWillReceiveProps",value:function(e){this.setState({filePaths:[]})}},{key:"onCancel",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID))}},{key:"canConfirm",value:function(){return this.state.filePaths.length>0}},{key:"onConfirm",value:function(){this.props.dispatch(c.Nb(n.DIALOG_ID,this.state)),this.props.dispatch(c.Lb(this.state.filePaths))}},{key:"render",value:function(){var e=this.props.isOpen;return e?a.createElement(Dt.a,{isOpen:e,title:"Download Files",icon:"download",confirmTitle:"Download",confirmIconName:"download",confirmTooltip:"Download files.",onCancel:this.onCancel,canConfirm:this.canConfirm,onConfirm:this.onConfirm,renderBody:this.renderBody}):null}},{key:"renderBody",value:function(){if(!this.state.filePaths)return null;var e=this.state.filePaths.map((function(e){return a.createElement("li",{key:e},e)}));return a.createElement("div",null,"File download:",a.createElement(ue.ControlGroup,{style:li,fill:!0},a.createElement(ue.AnchorButton,{intent:ue.Intent.PRIMARY,style:ci,onClick:this.handleOpenFilesOpen},"Select Remote Files...")),a.createElement("aside",null,e.length>0?a.createElement("h4",null,"Files"):"",a.createElement("ul",null,e)))}}]),n}(a.Component);si.DIALOG_ID="fileDownloadDialog";var ui=Object(o.b)((function(e){return{isOpen:Oe.x(si.DIALOG_ID)(e).isOpen,dialogId:"fileDownloadDialog"}}))(si);var di={world:function(e){return a.createElement(yt,{view:e})},figure:function(e){return a.createElement(Pt,{view:e})},animation:function(e){return a.createElement(Qo.a,{view:e})},table:function(e){return a.createElement(Wt,{view:e})}};var pi={display:"flex",flexFlow:"column nowrap",width:"100%",height:"100%",overflow:"hidden"},hi={display:"flex",flexFlow:"row nowrap",flex:"auto",height:"100%",overflow:"hidden"},fi=Object(o.b)((function(e){return{forceAppBar:e.session.forceAppBar,fileSystemAPI:Oe.B(e),appServiceMode:window.location.pathname.indexOf("/proxy/")>0?"cloud":"local",appServiceURL:e.communication.webAPIServiceURL,appServiceHostOS:e.communication.webAPIServiceInfo&&e.communication.webAPIServiceInfo.hostOS,appServiceVersion:e.communication.webAPIServiceInfo&&e.communication.webAPIServiceInfo.version}}))((function(e){var t,n=e.forceAppBar,r=e.fileSystemAPI,o=e.appServiceMode,i=e.appServiceURL,l=e.appServiceHostOS,s=e.appServiceVersion,u=e.dispatch,d=Object(se.a)().trackPageView;return a.useEffect((function(){var e=[{id:1,value:o},{id:2,value:i},{id:3,value:l},{id:4,value:s}];console.log("Tracking:",e),d({customDimensions:e})}),[d,o,i,l,s]),a.useEffect((function(){u(c.Rb())}),[u]),Object(pe.a)()&&!n||(t=a.createElement(ye,null)),a.createElement("div",{className:"bp3-dark",style:pi},a.createElement(de,null),a.createElement(Xa,null),t,a.createElement("div",{style:hi},a.createElement(bi,null),a.createElement(Oi,null),a.createElement(yi,null)),a.createElement(jr,null),a.createElement(zr,null),a.createElement(Br,null),a.createElement(ii.b,null),a.createElement(ui,null),a.createElement(Wr,null),a.createElement(Rt,null),a.createElement(Tt,null),a.createElement(ge.c,{dialogId:ge.b}),a.createElement(ge.c,{dialogId:ge.a}),a.createElement(Ra,{id:"newCtxOperationStepDialog"}),a.createElement(ri,null),!oi.a.isNativeUI&&null!==r&&a.createElement(ko,null),!oi.a.isNativeUI&&null!==r&&a.createElement(So,null),!oi.a.isNativeUI&&null!==r&&a.createElement(Po,null),!oi.a.isNativeUI&&null!==r&&a.createElement(Lo,null),!oi.a.isNativeUI&&a.createElement(No,null))}));var mi=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onLeftPanelContainerLayoutChange=a.onLeftPanelContainerLayoutChange.bind(Object(ie.a)(a)),a.onRightPanelContainerLayoutChange=a.onRightPanelContainerLayoutChange.bind(Object(ie.a)(a)),a.onSelectedLeftTopPanelChange=a.onSelectedLeftTopPanelChange.bind(Object(ie.a)(a)),a.onSelectedLeftBottomPanelChange=a.onSelectedLeftBottomPanelChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onLeftPanelContainerLayoutChange",value:function(e){this.props.dispatch(c.zc(e))}},{key:"onRightPanelContainerLayoutChange",value:function(e){this.props.dispatch(c.Cc(e))}},{key:"onSelectedLeftTopPanelChange",value:function(e){this.props.dispatch(c.Hc(e))}},{key:"onSelectedLeftBottomPanelChange",value:function(e){this.props.dispatch(c.Gc(e))}},{key:"render",value:function(){return a.createElement(Ro,{position:"left",undockedMode:this.props.panelContainerUndockedMode,layout:this.props.leftPanelContainerLayout,onLayoutChange:this.onLeftPanelContainerLayoutChange,selectedTopPanelId:this.props.selectedLeftTopPanelId,selectedBottomPanelId:this.props.selectedLeftBottomPanelId,onSelectedTopPanelChange:this.onSelectedLeftTopPanelChange,onSelectedBottomPanelChange:this.onSelectedLeftBottomPanelChange},a.createElement(Jo,{id:"dataSources",position:"top",icon:"database",title:"Data Sources",body:a.createElement(Ka,null)}),a.createElement(Jo,{id:"operations",position:"bottom",icon:"function",title:"Operations",body:a.createElement(Ja,null)}))}}]),n}(a.PureComponent),bi=Object(o.b)((function(e){return{panelContainerUndockedMode:Oe.V(e),leftPanelContainerLayout:Oe.M(e),selectedLeftTopPanelId:Oe.ub(e),selectedLeftBottomPanelId:Oe.tb(e)}}))(mi);var vi=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onRightPanelContainerLayoutChange=a.onRightPanelContainerLayoutChange.bind(Object(ie.a)(a)),a.onSelectedRightTopPanelChange=a.onSelectedRightTopPanelChange.bind(Object(ie.a)(a)),a.onSelectedRightBottomPanelChange=a.onSelectedRightBottomPanelChange.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onRightPanelContainerLayoutChange",value:function(e){this.props.dispatch(c.Cc(e))}},{key:"onSelectedRightTopPanelChange",value:function(e){this.props.dispatch(c.Lc(e))}},{key:"onSelectedRightBottomPanelChange",value:function(e){this.props.dispatch(c.Kc(e))}},{key:"render",value:function(){return a.createElement(Ro,{position:"right",undockedMode:this.props.panelContainerUndockedMode,layout:this.props.rightPanelContainerLayout,onLayoutChange:this.onRightPanelContainerLayoutChange,selectedTopPanelId:this.props.selectedRightTopPanelId,selectedBottomPanelId:this.props.selectedRightBottomPanelId,onSelectedTopPanelChange:this.onSelectedRightTopPanelChange,onSelectedBottomPanelChange:this.onSelectedRightBottomPanelChange},a.createElement(Jo,{id:"workspace",position:"top",icon:"flows",title:"Workspace",body:a.createElement(rr,null)}),a.createElement(Jo,{id:"layers",position:"top",icon:"layers",title:"Layers",body:a.createElement(Dr,null)}),a.createElement(Jo,{id:"placemarks",position:"top",icon:"map-marker",title:"Places",body:a.createElement(hr,null)}),a.createElement(Jo,{id:"variables",position:"bottom",icon:"variable",title:"Variables",body:a.createElement(lr,null)}),a.createElement(Jo,{id:"style",position:"bottom",icon:"style",title:"Styles",body:a.createElement(xr,null)}),a.createElement(Jo,{id:"view",position:"bottom",icon:"eye-open",title:"View",body:a.createElement(br,null)}),a.createElement(Jo,{id:"tasks",position:"bottom",icon:"play",title:"Tasks",body:a.createElement(Er,null)}))}}]),n}(a.PureComponent),yi=Object(o.b)((function(e){return{panelContainerUndockedMode:Oe.V(e),rightPanelContainerLayout:Oe.cb(e),selectedRightTopPanelId:Oe.Fb(e),selectedRightBottomPanelId:Oe.Eb(e)}}))(vi);var gi=function(e){Object(le.a)(n,e);var t=Object(ce.a)(n);function n(e){var a;return Object(re.a)(this,n),(a=t.call(this,e)).onSelectView=a.onSelectView.bind(Object(ie.a)(a)),a.onCloseView=a.onCloseView.bind(Object(ie.a)(a)),a.onCloseAllViews=a.onCloseAllViews.bind(Object(ie.a)(a)),a.onMoveView=a.onMoveView.bind(Object(ie.a)(a)),a.onChangeViewSplitPos=a.onChangeViewSplitPos.bind(Object(ie.a)(a)),a.onSplitViewPanel=a.onSplitViewPanel.bind(Object(ie.a)(a)),a}return Object(oe.a)(n,[{key:"onSelectView",value:function(e,t){this.props.dispatch(c.rc(e,t))}},{key:"onCloseView",value:function(e,t){this.props.dispatch(c.Eb(e,t))}},{key:"onCloseAllViews",value:function(e){this.props.dispatch(c.Db(e))}},{key:"onMoveView",value:function(e,t,n){this.props.dispatch(c.Zb(e,t,n))}},{key:"onSplitViewPanel",value:function(e,t,n){this.props.dispatch(c.hd(e,t,n))}},{key:"onChangeViewSplitPos",value:function(e,t){this.props.dispatch(c.Bb(e,t))}},{key:"render",value:function(){return a.createElement("div",{style:n.DIV_STYLE},a.createElement(Xo,{viewRenderMap:di,viewLayout:this.props.viewLayout,views:this.props.views,activeView:this.props.activeView,noViewsDescription:"You can create new views from the VIEW panel.",noViewsVisual:"eye-open",onSelectView:this.onSelectView,onCloseView:this.onCloseView,onCloseAllViews:this.onCloseAllViews,onMoveView:this.onMoveView,onChangeViewSplitPos:this.onChangeViewSplitPos,onSplitViewPanel:this.onSplitViewPanel}))}}]),n}(a.PureComponent);gi.DIV_STYLE={flex:"auto",height:"100%",overflow:"hidden"};var Oi=Object(o.b)((function(e){return{viewLayout:Oe.cc(e),views:Oe.dc(e),activeView:Oe.e(e)}}))(gi);var Ei=Object(o.b)((function(e){return{trackingConsentObtained:e.session.trackingConsentObtained}}))((function(e){var t=e.trackingConsentObtained,n=a.useState(null),r=Object(te.a)(n,2),o=r[0],i=r[1];return a.useEffect((function(){if(null===o){var e=Object(ne.a)({urlBase:"https://matomo-ext.esa.int/",siteId:8,disabled:!t,heartBeat:{active:!0,seconds:10},linkTracking:!1,configurations:{disableCookies:!t,setSecureCookie:!0,setRequestMethod:"POST"}});i(e)}}),[t,o]),a.createElement(ae.a,{value:o},a.createElement(fi,null))}));n(766),n(767),n(768),n(769),n(770),n(771),n(772),n(773);window.CESIUM_BASE_URL="./cesium",function(){var e=[l.a],t=i.a.apply(void 0,e),n=Object(i.d)(ee,t);n.dispatch(Object(c.Gb)(function(){var e="http://localhost:9090",t=new URLSearchParams(window.location.search);if(t.has("serviceUrl"))e=t.get("serviceUrl");else{var n=window.location.origin,a=window.location.pathname;a.endsWith("/app")?e=n+a.substring(0,a.length-4):a.endsWith("/app/")&&(e=n+a.substring(0,a.length-5))}return e}())),r.render(a.createElement(o.a,{store:n},a.createElement(Ei,null)),document.getElementById("root"))}()},8:function(e,t,n){"use strict";n.d(t,"ib",(function(){return N})),n.d(t,"T",(function(){return R})),n.d(t,"P",(function(){return x})),n.d(t,"Q",(function(){return M})),n.d(t,"S",(function(){return V})),n.d(t,"R",(function(){return B})),n.d(t,"hb",(function(){return W})),n.d(t,"eb",(function(){return F})),n.d(t,"sb",(function(){return U})),n.d(t,"z",(function(){return G})),n.d(t,"ab",(function(){return Y})),n.d(t,"qb",(function(){return H})),n.d(t,"n",(function(){return K})),n.d(t,"Gb",(function(){return X})),n.d(t,"Vc",(function(){return Q})),n.d(t,"Nb",(function(){return $})),n.d(t,"lc",(function(){return te})),n.d(t,"tc",(function(){return ne})),n.d(t,"Sb",(function(){return ae})),n.d(t,"qd",(function(){return ie})),n.d(t,"Pc",(function(){return le})),n.d(t,"rd",(function(){return ce})),n.d(t,"id",(function(){return se})),n.d(t,"Ab",(function(){return ue})),n.d(t,"bd",(function(){return de})),n.d(t,"F",(function(){return he})),n.d(t,"G",(function(){return fe})),n.d(t,"vc",(function(){return me})),n.d(t,"wc",(function(){return ve})),n.d(t,"gb",(function(){return ye})),n.d(t,"kd",(function(){return Oe})),n.d(t,"a",(function(){return Ee})),n.d(t,"c",(function(){return _e})),n.d(t,"y",(function(){return Ce})),n.d(t,"nb",(function(){return ke})),n.d(t,"ob",(function(){return we})),n.d(t,"pb",(function(){return Se})),n.d(t,"ub",(function(){return je})),n.d(t,"wb",(function(){return Ie})),n.d(t,"xb",(function(){return Pe})),n.d(t,"kc",(function(){return De})),n.d(t,"nd",(function(){return Le})),n.d(t,"od",(function(){return Te})),n.d(t,"pd",(function(){return Ae})),n.d(t,"Wb",(function(){return Ne})),n.d(t,"Jc",(function(){return Re})),n.d(t,"db",(function(){return xe})),n.d(t,"bb",(function(){return Me})),n.d(t,"cb",(function(){return Ve})),n.d(t,"Ec",(function(){return Ue})),n.d(t,"hc",(function(){return Ge})),n.d(t,"Dc",(function(){return He})),n.d(t,"uc",(function(){return Ke})),n.d(t,"ec",(function(){return qe})),n.d(t,"vb",(function(){return Je})),n.d(t,"jc",(function(){return Xe})),n.d(t,"mb",(function(){return Ze})),n.d(t,"Ic",(function(){return Qe})),n.d(t,"Bc",(function(){return $e})),n.d(t,"Ac",(function(){return et})),n.d(t,"dd",(function(){return tt})),n.d(t,"Ob",(function(){return nt})),n.d(t,"E",(function(){return at})),n.d(t,"tb",(function(){return rt})),n.d(t,"A",(function(){return ot})),n.d(t,"V",(function(){return it})),n.d(t,"U",(function(){return lt})),n.d(t,"W",(function(){return ct})),n.d(t,"ac",(function(){return ut})),n.d(t,"fc",(function(){return dt})),n.d(t,"oc",(function(){return ht})),n.d(t,"Jb",(function(){return ft})),n.d(t,"bc",(function(){return mt})),n.d(t,"gc",(function(){return vt})),n.d(t,"Kb",(function(){return yt})),n.d(t,"Fb",(function(){return gt})),n.d(t,"Cb",(function(){return Ot})),n.d(t,"Ib",(function(){return Et})),n.d(t,"qc",(function(){return _t})),n.d(t,"pc",(function(){return Ct})),n.d(t,"Oc",(function(){return St})),n.d(t,"Nc",(function(){return jt})),n.d(t,"Tc",(function(){return It})),n.d(t,"Uc",(function(){return Pt})),n.d(t,"mc",(function(){return Dt})),n.d(t,"Mb",(function(){return Lt})),n.d(t,"gd",(function(){return Tt})),n.d(t,"Xc",(function(){return At})),n.d(t,"nc",(function(){return Nt})),n.d(t,"N",(function(){return Rt})),n.d(t,"M",(function(){return xt})),n.d(t,"Qc",(function(){return Mt})),n.d(t,"Mc",(function(){return Vt})),n.d(t,"yb",(function(){return Bt})),n.d(t,"zc",(function(){return Wt})),n.d(t,"Cc",(function(){return Ft})),n.d(t,"Hc",(function(){return Ut})),n.d(t,"Gc",(function(){return Gt})),n.d(t,"Lc",(function(){return Yt})),n.d(t,"Kc",(function(){return Ht})),n.d(t,"e",(function(){return Kt})),n.d(t,"d",(function(){return zt})),n.d(t,"C",(function(){return qt})),n.d(t,"l",(function(){return Jt})),n.d(t,"X",(function(){return Xt})),n.d(t,"f",(function(){return Zt})),n.d(t,"q",(function(){return Qt})),n.d(t,"zb",(function(){return $t})),n.d(t,"rc",(function(){return en})),n.d(t,"Eb",(function(){return tn})),n.d(t,"Db",(function(){return nn})),n.d(t,"hd",(function(){return an})),n.d(t,"Bb",(function(){return rn})),n.d(t,"Zb",(function(){return on})),n.d(t,"O",(function(){return ln})),n.d(t,"J",(function(){return cn})),n.d(t,"H",(function(){return sn})),n.d(t,"I",(function(){return un})),n.d(t,"K",(function(){return dn})),n.d(t,"m",(function(){return pn})),n.d(t,"fb",(function(){return hn})),n.d(t,"lb",(function(){return fn})),n.d(t,"Sc",(function(){return mn})),n.d(t,"xc",(function(){return bn})),n.d(t,"yc",(function(){return vn})),n.d(t,"cc",(function(){return yn})),n.d(t,"jd",(function(){return gn})),n.d(t,"rb",(function(){return On})),n.d(t,"Vb",(function(){return _n})),n.d(t,"Y",(function(){return Cn})),n.d(t,"Tb",(function(){return kn})),n.d(t,"L",(function(){return wn})),n.d(t,"b",(function(){return Sn})),n.d(t,"x",(function(){return jn})),n.d(t,"jb",(function(){return In})),n.d(t,"kb",(function(){return Pn})),n.d(t,"p",(function(){return Dn})),n.d(t,"o",(function(){return Ln})),n.d(t,"B",(function(){return Tn})),n.d(t,"D",(function(){return An})),n.d(t,"Fc",(function(){return Nn})),n.d(t,"ic",(function(){return Rn})),n.d(t,"Yb",(function(){return xn})),n.d(t,"Xb",(function(){return Mn})),n.d(t,"ld",(function(){return Vn})),n.d(t,"md",(function(){return Wn})),n.d(t,"Rc",(function(){return Un})),n.d(t,"sc",(function(){return Gn})),n.d(t,"Z",(function(){return Yn})),n.d(t,"Ub",(function(){return Hn})),n.d(t,"ed",(function(){return Kn})),n.d(t,"Pb",(function(){return zn})),n.d(t,"fd",(function(){return qn})),n.d(t,"Qb",(function(){return Jn})),n.d(t,"r",(function(){return Xn})),n.d(t,"dc",(function(){return Zn})),n.d(t,"s",(function(){return Qn})),n.d(t,"g",(function(){return $n})),n.d(t,"Wc",(function(){return ea})),n.d(t,"u",(function(){return ta})),n.d(t,"i",(function(){return na})),n.d(t,"Yc",(function(){return aa})),n.d(t,"v",(function(){return ra})),n.d(t,"j",(function(){return oa})),n.d(t,"Zc",(function(){return ia})),n.d(t,"w",(function(){return la})),n.d(t,"k",(function(){return ca})),n.d(t,"cd",(function(){return sa})),n.d(t,"t",(function(){return ua})),n.d(t,"h",(function(){return da})),n.d(t,"ad",(function(){return pa})),n.d(t,"Hb",(function(){return ha})),n.d(t,"sd",(function(){return fa})),n.d(t,"Lb",(function(){return ma})),n.d(t,"Rb",(function(){return ga}));var a=n(6),r=n(30),o=n(44),i=n(160),l=n.n(i),c=n(253),s=n(23),u=n(204),d=n.n(u),p=n(783),h=n(29),f=n(45),m=n(101),b=n(18),v=n(53),y=n(81),g=n(48),O=n(106);function E(e,t){return!!e[t]}function _(e,t,n){return Object(a.a)(Object(a.a)({},e),{},Object(o.a)({},t,{isValueUsed:!0,constantValue:n,resourceName:null}))}function C(e,t,n){return Object(a.a)(Object(a.a)({},e),{},Object(o.a)({},t,{isValueUsed:!1,constantValue:null,resourceName:n}))}var k=n(208),w=n(211),S=n(135),j=n(10),I=n(25),P=n(67),D=n(37),L=n(209),T=n(136),A=Object(S.b)(),N="UPDATE_INITIAL_STATE",R="SET_WEBAPI_STATUS",x="SET_WEBAPI_AUTO_STOP_INFO",M="SET_WEBAPI_CLIENT",V="SET_WEBAPI_SERVICE_URL",B="SET_WEBAPI_SERVICE_INFO",W="UPDATE_HUB_STATUS",F="UPDATE_DIALOG_STATE",U="UPDATE_TASK_STATE",G="REMOVE_TASK_STATE",Y="UPDATE_CONTROL_STATE",H="UPDATE_SESSION_STATE",K="INVOKE_CTX_OPERATION";function z(e){return{type:R,payload:{webAPIStatus:e}}}function q(e){return{type:M,payload:{webAPIClient:e}}}function J(e){return{type:V,payload:{webAPIServiceURL:e}}}function X(e){return function(){var t=Object(c.a)(l.a.mark((function t(n,a){var r,o,i,c,s;return l.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return console.debug("webAPIServiceURL =",e),n(J(e)),n(z("connecting")),t.prev=3,t.next=6,(new L.a).getServiceInfo(e);case 6:r=t.sent,t.next=14;break;case 9:return t.prev=9,t.t0=t.catch(3),va(t.t0,"Failed to retrieve service information"),n(z("error")),t.abrupt("return");case 14:console.log("Cate WebAPI server version ".concat(r.version)),n({type:B,payload:{webAPIServiceInfo:r}}),o=Object(D.p)(j.h(a())),i=function(e,t){return t.message?"".concat(e," (").concat(t.message,")"):e},c=function(){o.isOpen&&o.call("keep_alive",[]).then((function(e){if(e){var t={availableTime:e.available_time,inactivityTime:e.inactivity_time,remainingTime:e.remaining_time};n({type:x,payload:{webAPIAutoStopInfo:t}})}}))},s=null,5,o.onOpen=function(){n(q(o)),n((function(e,t){pe({title:"Load configuration",dispatch:e,call:function(){return j.i(t()).getBackendConfig()},action:function(t){e(function(e){return ce({backendConfig:e})}(t))}})})),n(Hn()),n((function(e,t){pe({title:"Loading Preferences",dispatch:e,call:function(){return j.X(t()).loadPreferences()},action:function(n){e(ce(n)),e(Be()),e((a=t().session.reopenLastWorkspace,r=t().session.lastWorkspacePath,function(e){e(a&&r?dt(r):ut(null))}));var a,r},planB:function(t){e(sa({type:"error",title:"Loading Preferences",message:"Failed to load preferences.",detail:t.message}))},requireDoneNotification:!0})})),n((function(e,t){pe({title:"Load operations",dispatch:e,call:function(){return j.Q(t()).getOperations()},action:function(t){e(function(e){return{type:Ze,payload:{operations:e}}}(t))}})})),s=setInterval(c,5e3)},o.onClose=function(e){null!==s&&clearInterval(s);var t=a().communication.webAPIStatus;if("shuttingDown"!==t&&"loggingOut"!==t){console.error("webAPIClient.onClose:",e);var r="reason=".concat(e.reason,", code=").concat(e.code,", clean=").concat(e.wasClean);Object(P.a)({type:"notification",text:i("Connection to Cate service closed: ".concat(r),e)},12e4),n(z("closed"))}},o.onError=function(e){console.error("webAPIClient.onError:",e),n(z("error")),Object(P.a)({type:"error",text:i("Error connecting to Cate service",e)})},o.onWarning=function(e){console.warn("webAPIClient.onWarning:",e),Object(P.a)({type:"warning",text:i("Warning from Cate service",e)})};case 25:case"end":return t.stop()}}),t,null,[[3,9]])})));return function(e,n){return t.apply(this,arguments)}}()}function Z(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return{type:F,payload:{dialogId:e,dialogState:Object.assign.apply(Object,[{}].concat(n))}}}function Q(e,t){return Z(e,t,{isOpen:!0})}function $(e,t){return Z(e,t,{isOpen:!1})}function ee(e,t){return{type:U,payload:{jobId:e,taskState:t}}}function te(e){return{type:G,payload:{jobId:e}}}function ne(e,t){return re(Object(o.a)({},e,t))}function ae(e,t){return function(n,a){var o=j.Bb(a());if(o){var i,l=Object(r.a)(e.inputs);try{for(l.s();!(i=l.n()).done;){var c=i.value;if(!E(t,c.name)&&Object(f.x)(c.dataType,o.dataType)){t=C(t,c.name,o.name);break}}}catch(h){l.e(h)}finally{l.f()}}var s=j.Kb(a());if(s){var u,d=Object(r.a)(e.inputs);try{for(d.s();!(u=d.n()).done;){var p=u.value;if(!E(t,p.name)&&(p.dataType===f.w||p.dataType===f.v)){t=_(t,p.name,s.name);break}}}catch(h){d.e(h)}finally{d.f()}}n(function(e,t){return{type:K,payload:{selectedCtxOperationName:e,inputAssignments:t}}}(e.name,t))}}function re(e){return{type:Y,payload:e}}function oe(e){return function(t,n){t(ie(n().session,e))}}function ie(e,t){return function(n,a){pe({title:"Update Preferences",dispatch:n,call:function(){return j.X(a()).updatePreferences(e)},action:function(){t&&n(t)},planB:function(e){n(sa({type:"error",title:"Update Preferences",message:"Failed to update preferences.",detail:e.message})),t&&n(t)},requireDoneNotification:!0})}}function le(e,t){return ce(Object(o.a)({},e,t))}function ce(e){return{type:H,payload:e}}function se(e){return function(t,n){pe({title:"Store configuration",dispatch:t,call:function(){return j.i(n()).setBackendConfig(e)}})}}function ue(e){return function(t,n){j.ec(n()).cancel(e)}}function de(e,t){return Q("jobFailureDialog",{jobTitle:e,jobFailure:t})}function pe(e){var t,n=e.call,a=e.title,r=e.dispatch,o=e.action,i=e.requestLock,l=e.planB,c=e.disableNotifications,s=void 0!==c&&c,u=e.requireDoneNotification,d=void 0!==u&&u,p=e.startToastDelay,h=void 0===p?500:p,f=n((function(e){s||r(function(e){return ee(e.id,{status:D.g.IN_PROGRESS,progress:e})}(e))})),m=!1;s||(t=setTimeout((function(){Object(P.a)({type:"notification",text:"Started: "+a}),m=!0}),h),r(function(e,t,n){return ee(e,{status:D.g.SUBMITTED,title:t,requestLock:n})}(f.getJobId(),a,i)));f.then((function(e){s||(clearTimeout(t),(m||d)&&Object(P.a)({type:"success",text:"Done: "+a}),r(ee(f.getJobId(),{status:D.g.DONE}))),o&&o(e)}),(function(e){s||m||clearTimeout(t),function(e,t,n,a,r){var o,i,l,c=n.code===D.d?D.g.CANCELLED:D.g.FAILED;c===D.g.CANCELLED?(o="notification",i="Cancelled: ".concat(t)):(o="error",i=n.message||"Failed: ".concat(t),l={text:"Details",onClick:function(){a(de(t,n))}}),a(ee(e,{status:c,failure:n})),r||(n.code===D.e?a(de(t,n)):Object(P.a)({type:o,text:i,action:l}))}(f.getJobId(),a,e,r,s),l&&l(e)}))}var he="SET_GLOBE_MOUSE_POSITION",fe="SET_GLOBE_VIEW_POSITION";function me(e){return{type:he,payload:{position:e}}}function be(e,t){return{type:fe,payload:{position:e,positionData:t}}}function ve(e){return function(t,n){if(e){if("variables"===j.Eb(n())){var a=j.kc(n());if(!a)return;var r=j.Bb(n()),o=j.Ib(n());if(o&&r){var i=Object(I.K)(r,o);return void pe({title:"Load cell values",dispatch:t,call:function(){return j.v(n()).extractPixelValues(a,r.name,[e.longitude,e.latitude],i)},action:function(n){t(be(e,n))},disableNotifications:!0})}}}else t(be(null,null))}}var ye="UPDATE_FS_ROOT_NODE";function ge(e,t){return{type:ye,payload:{path:e,updatedFileNode:t}}}function Oe(e,t){var n=e.split("/");return function(e,r){if(null!==j.B(r())){var o=[];n.forEach((function(e,a){var i=n.slice(0,a+1).join("/");if(0===o.length){var l=Object(g.g)(r().data.fsRootNode,i);l?l.status&&!t||o.push(i):(o.push(""),o.push(i))}else o.push(i)})),e(function e(t,n){return function(r,o){if(0!==t.length){var i=j.B(o());if(null!==i){var l=t[0],c=Object(g.g)(o().data.fsRootNode,l);if(c){if(!c.status||n){r(ge(l,Object(a.a)(Object(a.a)({},c),{},{status:"updating"})));var s=function(a){r(ge(l,a)),t.length>1&&r(e(t.slice(1),n))};pe({title:"Updating Files",dispatch:r,call:function(){return i.updateFileNode(l)},action:s,planB:function(e){r(sa({type:"error",title:"File System Update",message:"Failed updating file in file system.",detail:e.message}))},requireDoneNotification:!1})}}else console.error('sub-path not found in file system root node: "'.concat(l,'"'))}else console.error("fileSystemAPI not ready")}}}(o,t))}else console.error("fileSystemAPI not ready")}}var Ee="ACTIVATE_NEW_PLACEMARK_TOOL",_e="ADD_PLACEMARK",Ce="REMOVE_PLACEMARK",ke="UPDATE_PLACEMARK_GEOMETRY",we="UPDATE_PLACEMARK_PROPERTIES",Se="UPDATE_PLACEMARK_STYLE";function je(e){return{type:Ee,payload:{newPlacemarkToolType:e}}}function Ie(e){return{type:_e,payload:{placemark:e}}}function Pe(e,t,n){return Ie({id:Object(I.w)(I.i),type:"Feature",geometry:{type:"Point",coordinates:[e,t]},properties:n})}function De(e){return{type:Ce,payload:{placemarkId:e}}}function Le(e,t){return{type:ke,payload:{placemarkId:e,geometry:t}}}function Te(e,t){return{type:we,payload:{placemarkId:e,properties:t}}}function Ae(e,t){return{type:Se,payload:{placemarkId:e,style:t}}}function Ne(e){return function(){var t=Object(c.a)(l.a.mark((function t(n,a){var r,o,i;return l.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(r=j.Qb(a()))){t.next=7;break}if(!(o=Object(v.h)(r,e))){t.next=7;break}return o.position&&(0,-1.570795,25e5,i=new s.l(0,-1.570795,25e5)),t.next=7,r.zoomTo(o,i);case 7:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}()}function Re(e){return ce({selectedPlacemarkId:e})}var xe="UPDATE_DATA_STORES",Me="UPDATE_DATA_SOURCES",Ve="UPDATE_DATA_SOURCE_META_INFO";function Be(){return function(e,t){pe({title:"Loading data stores",dispatch:e,call:function(){return j.v(t()).getDataStores()},action:function(n){if(j.P(t())&&(n=n.filter((function(e){return e.isLocal}))),e(function(e){return{type:xe,payload:{dataStores:e}}}(n)),n&&n.length){var a=j.kb(t()),r=n.find((function(e){return e.id===a}));a=r?r.id:n[0].id,e(Ue(a))}}})}}function We(e,t){return function(n,a){var r=Object(I.H)(e);if(!j.c(a()).has(r)){var o=a().data.dataStores.find((function(t){return t.id===e}));pe({title:'Load data sources for store "'.concat(o?o.id:"?",'"'),dispatch:n,call:function(t){return j.v(a()).getDataSources(e,t)},action:function(r){if(n(Fe(e,r)),t){var o=j.gb(a());if(r&&r.length){var i=r.find((function(e){return e.id===o}));o=i?i.id:o}n(He(o))}},requestLock:r})}}}function Fe(e,t){return{type:Me,payload:{dataStoreId:e,dataSources:t}}}function Ue(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(n,a){if(n(Ye(e)),null!==e){var r=a().data.dataStores.find((function(t){return t.id===e}));!t&&r.dataSources||n(We(e,!0))}}}function Ge(){return function(e){e(Ue("local",!0))}}function Ye(e){return ce({selectedDataStoreId:e})}function He(e){return function(t,n){t(ce({selectedDataSourceId:e}));var a=n().session.selectedDataStoreId;a&&e&&t(function(e,t){return function(n,a){var r=a().data.dataStores;if(r){var o=Object(I.q)(r,e,t);o&&"init"===o.metaInfoStatus&&(n(ze(e,t,void 0,"loading")),pe({title:"Loading metadata for ".concat(t),dispatch:n,call:function(n){return j.v(a()).getDataSourceMetaInfo(e,t,n)},action:function(a){n(ze(e,t,a,"ok"))},planB:function(){n(ze(e,t,void 0,"error"))}}))}}}(a,e))}}function Ke(e){return ce({dataSourceFilterExpr:e})}function ze(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"ok";return{type:Ve,payload:{dataStoreId:e,dataSourceId:t,metaInfo:n,metaInfoStatus:a}}}function qe(e,t,n,r){return function(o){var i,l=Object(a.a)({ds_id:t,data_store_id:e},n),c={};Object.keys(l).forEach((function(e){c[e]={value:l[e]}})),r&&(i=function(e){e(We("local",!1))}),o(It("open_dataset",c,null,!1,'Opening data source "'.concat(t,'"'),i))}}function Je(e,t){return function(n,a){pe({title:'Add file data source "'.concat(e,'"'),dispatch:n,call:function(n){return j.v(a()).addLocalDataSource(e,t,n)},action:function(e){n(Fe("local",e))},requireDoneNotification:!0})}}function Xe(e,t){return function(n,a){pe({title:'Remove copy of file data source "'.concat(e,'"'),dispatch:n,call:function(n){return j.v(a()).removeLocalDataSource(e,t,n)},action:function(e){n(Fe("local",e))},requireDoneNotification:!0})}}var Ze="UPDATE_OPERATIONS";function Qe(e){return ce({selectedOperationName:e})}function $e(e){return ce({operationFilterTags:e})}function et(e){return ce({operationFilterExpr:e})}function tt(e){return Q(e)}function nt(e,t){return function(n,r){if(t){var o=r().control.dialogs[e];t=Object(a.a)(Object(a.a)({},o.inputAssignments),t)}n($(e,{inputAssignments:t}))}}var at="SET_CURRENT_WORKSPACE",rt="UPDATE_WORKSPACE_NAMES",ot="RENAME_RESOURCE",it="SHOW_FIGURE_VIEW",lt="SHOW_ANIMATION_VIEW",ct="SHOW_TABLE_VIEW";function st(e){return{type:rt,payload:{workspaceNames:e}}}function ut(e){return function(t,n){pe({title:"New workspace"+(e?' "'.concat(e,'"'):""),dispatch:t,call:function(){return j.jc(n()).newWorkspace(e)},action:function(e){t(wt(e)),t(pt()),e&&e.workflow.steps.length>0?t(St(e.workflow.steps[0].id)):t(St(null)),t(oe())},planB:function(e){t(sa({type:"error",title:"New Workspace",message:"Failed to create new workspace.",detail:e.message}))},requireDoneNotification:!0})}}function dt(e){return function(t,n){pe({title:'Open workspace "'.concat(e,'"'),dispatch:t,call:function(t){return j.jc(n()).openWorkspace(e,t)},action:function(e){t(wt(e)),e&&e.workflow.steps.length>0?t(St(e.workflow.steps[0].id)):t(St(null)),t(oe())},planB:function(){n().data.workspace||t(ut(null))},requireDoneNotification:!0})}}function pt(){return function(e,t){var n=t().data.workspace;if(h.a(n),n.isScratch)return ht;var a=n.baseDir;pe({title:"Save workspace",dispatch:e,call:function(e){return j.jc(t()).saveWorkspace(a,e)},action:function(t){e(wt(t)),e(oe())},planB:function(t){e(sa({type:"error",title:"Save Workspace",message:"Failed to save workspace.",detail:t.message}))},requireDoneNotification:!0})}}function ht(e){return function(t,n){var a=j.kc(n());h.a(a),pe({title:'Save workspace as "'.concat(e,'"'),dispatch:t,call:function(t){return j.jc(n()).saveWorkspaceAs(a,e,t)},action:function(e){t(wt(e)),t(oe())},planB:function(e){t(sa({type:"error",title:"Save Workspace As",message:"Failed to save workspace.",detail:e.message}))},requireDoneNotification:!0})}}function ft(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function(n,a){pe({title:'Delete step/workspace "'.concat(e,'"'),dispatch:n,call:function(){return j.jc(a()).deleteWorkspace(e,t)},requireDoneNotification:!0})}}function mt(){return Q("newWorkspaceDialog")}function bt(e,t){e(function(e,t){var n=new Set(e.properties);return n.delete("multiSelections"),aa(e=Object(a.a)(Object(a.a)({},e),{},{properties:Array.from(n)}),(function(e){t(!e.canceled&&e.filePaths.length>0?e.filePaths[0]:null)}))}({title:"Open Workspace - Select Directory",buttonLabel:"Open",properties:["openDirectory"]},(function(n){if(n){var a=t().data.workspace,r=!0;if(a){if(a.baseDir===n)return void Object(P.a)({type:"warning",text:"Workspace is already open."});r=kt(e,t,"Open Workspace","Would you like to save the current workspace before opening the new one?",'Press "Cancel" to cancel opening a new workspace.')}r&&e(dt(n))}})))}function vt(){return function(e,t){j.I(t())?bt(e,t):function(e,t){j.jc(t()).listWorkspaces().then((function(t){e(st(t)),e(Q(O.b))}))}(e,t)}}function yt(){return function(e,t){j.I(t())||function(e,t){j.jc(t()).listWorkspaces().then((function(t){e(st(t)),e(Q(O.a))}))}(e,t)}}function gt(){return function(e,t){kt(e,t,"Close Workspace","Would you like to save the current workspace before closing it?",'Press "Cancel" to cancel closing the workspace.')&&e((function(e,t){var n=j.kc(t());h.a(n),pe({title:"Close workspace",dispatch:e,call:function(){return j.jc(t()).closeWorkspace(n)},action:function(){e(ut(null))},requireDoneNotification:!0})}))}}function Ot(){return function(e){e(sa({type:"question",title:"Clean Workspace",message:"Do you really want to clean this workspace?",detail:"This will delete all resources and workflow steps.\nYou will not be able to undo this operation.",buttons:["Yes","No"],defaultId:1,cancelId:1},(function(t){t&&0===t.buttonIndex&&e((function(e,t){var n=t().data.workspace;h.a(n);var a=n.baseDir;pe({title:'Clean workspace "'.concat(a,'"'),dispatch:e,call:function(){return j.jc(t()).cleanWorkspace(a)},action:function(t){e(wt(t))},requireDoneNotification:!0})}))})))}}function Et(e){return function(t){t(sa({type:"question",title:"Remove Resource and Workflow Step",message:'Do you really want to delete resource and step "'.concat(e,'"?'),detail:"This will also delete the workflow step that created it.\nYou will not be able to undo this operation.",buttons:["Yes","No"],defaultId:1,cancelId:1},(function(n){n&&0===n.buttonIndex&&t(function(e){return function(t,n){var a=n().data.workspace;h.a(a);var r=a.baseDir;pe({title:'Delete step/resource "'.concat(e,'"'),dispatch:t,call:function(){return j.jc(n()).deleteWorkspaceResource(r,e)},action:function(e){t(wt(e))},requireDoneNotification:!0})}}(e))})))}}function _t(){return function(e,t){t().data.workspace.isScratch?e(Ct()):e(pt())}}function Ct(){return Q("saveWorkspaceAsDialog")}function kt(e,t,n,a,r){var o=t().data.workspace;o&&(o.workflow.steps.length&&(o.isModified||!o.isSaved)&&e(sa({type:"question",title:n,message:a,detail:r,buttons:["Yes","No","Cancel"],defaultId:0,cancelId:2},(function(t){if(!t)return!1;if(0===t.buttonIndex)o.isScratch?e(Ct()):e(pt());else if(2===t.buttonIndex)return!1}))));return!0}function wt(e){return function(t,n){t(function(e){return{type:at,payload:{workspace:e}}}(e));var a=e.baseDir;n().session.lastWorkspacePath!==a&&(e.isScratch?t(ce({lastWorkspacePath:null})):t(ce({lastWorkspacePath:a})))}}function St(e){return function(t,n){if(t(function(e){return re({selectedWorkspaceResourceName:e})}(e)),e&&n().data.workspace){var a=n().data.workspace.resources;if(a){var r=a.find((function(t){return t.name===e}));if(r&&r.variables&&r.variables.length){var o=r.variables.find((function(e){return!!e.isDefault}));t(Vt(r,o||r.variables[0],j.db(n())))}}}}}function jt(e){return function(t,n){if(e){var a=j.Z(n())[e];a&&t(St(a.name))}t(function(e){return re({selectedWorkflowStepId:e})}(e))}}function It(e,t,n,a,r,o){return function(i,l){var c=j.kc(l());h.a(c),pe({dispatch:i,title:r,call:function(r){return j.jc(l()).setWorkspaceResource(c,e,t,n,a,r)},action:function(e){var t=e[0],n=e[1];i(wt(t));var a=Object(I.t)(j.bb(l()),n),r=Object(I.V)(a),c=Object(I.T)(a);r||c||i(St(n)),(r||c)&&l().session.autoShowNewFigures&&(r?i(At(a,j.d(l()))):c&&i(function(e,t){return{type:lt,payload:{resource:e,placeAfterViewId:t}}}(a,j.d(l())))),o&&i(o)},requireDoneNotification:!0})}}function Pt(e,t){return function(n,a){var r=j.kc(a());h.a(r),pe({title:"Change resource persistence",dispatch:n,call:function(){return j.jc(a()).setWorkspaceResourcePersistence(r,e,t)},action:function(e){n(wt(e))}})}}function Dt(e,t){return function(n,a){var r=j.kc(a());h.a(r),pe({title:"Rename resource",dispatch:n,call:function(){return j.jc(a()).renameWorkspaceResource(r,e,t)},action:function(a){n(wt(a)),n(function(e,t){return{type:ot,payload:{resName:e,newResName:t}}}(e,t))}})}}function Lt(e,t,n,a){return function(r,o){var i=j.kc(o());h.a(i);var l='Computing statistics for variable "'.concat(t,'"'),c=Object(I.G)(e,t,n);pe({title:l,dispatch:r,call:function(a){return j.jc(o()).getWorkspaceVariableStatistics(i,e,t,n,a)},action:function(e){r(a(e))},requestLock:c})}}function Tt(e,t,n){return{type:ct,payload:{resName:e,varName:t,placeAfterViewId:n}}}function At(e,t){return{type:it,payload:{resource:e,placeAfterViewId:t}}}function Nt(e,t){return function(){A&&A.shell.openExternal(e+"/png")}}var Rt="SET_SHOW_SELECTED_VARIABLE_LAYER",xt="SET_SELECTED_VARIABLE";function Mt(e){return{type:Rt,payload:{showSelectedVariableLayer:e}}}function Vt(e,t,n){return{type:xt,payload:{resource:e,selectedVariable:t,savedLayers:n}}}function Bt(e,t,n,a,r){return function(e,t,n){return{type:Sn,payload:{viewId:e,layer:t,selectLayer:n}}}(e,Object(I.fb)(t,n,r),a)}function Wt(e){return ce({leftPanelContainerLayout:e})}function Ft(e){return ce({rightPanelContainerLayout:e})}function Ut(e){return ce({selectedLeftTopPanelId:e})}function Gt(e){return ce({selectedLeftBottomPanelId:e})}function Yt(e){return ce({selectedRightTopPanelId:e})}function Ht(e){return ce({selectedRightBottomPanelId:e})}var Kt="ADD_WORLD_VIEW",zt="ADD_TABLE_VIEW",qt="SELECT_VIEW",Jt="CLOSE_VIEW",Xt="SPLIT_VIEW_PANEL",Zt="CHANGE_VIEW_SPLIT_POS",Qt="MOVE_VIEW";function $t(e,t){return{type:Kt,payload:{placeAfterViewId:e,baseMapId:t}}}function en(e,t){return{type:qt,payload:{viewPath:e,viewId:t}}}function tn(e,t){return{type:Jt,payload:{viewPath:e,viewId:t}}}function nn(e){return{type:"CLOSE_ALL_VIEWS",payload:{viewPath:e}}}function an(e,t,n){return{type:Xt,payload:{viewPath:e,dir:t,pos:n}}}function rn(e,t){return{type:Zt,payload:{viewPath:e,delta:t}}}function on(e,t,n){return{type:Qt,payload:{sourceViewId:e,placement:t,targetViewId:n}}}var ln="SET_VIEW_MODE",cn="SET_PROJECTION_CODE",sn="SET_LAYER_SPLIT_MODE",un="SET_LAYER_SPLIT_POSITION",dn="SET_SELECTED_ENTITY_ID",pn="INC_ENTITY_UPDATE_COUNT",hn="UPDATE_ENTITY_STYLE",fn="UPDATE_MOUSE_IDLE_STATE";function mn(e,t){return{type:ln,payload:{viewId:e,viewMode:t}}}function bn(e,t,n){return{type:sn,payload:{viewId:e,layerId:t,splitMode:n}}}function vn(e,t){return{type:un,payload:{viewId:e,layerSplitPosition:t}}}function yn(e,t,n){return function(a,r){var o=n&&n.id;if((a(function(e,t){return{type:dn,payload:{viewId:e,selectedEntityId:t}}}(e,Object(b.b)(o)?o:null)),n&&Object(b.d)(n._simp)&&Object(b.d)(n._resId)&&Object(b.d)(n._idx))&&(0!==(1&n._simp)&&j.oc(r()))){var i=n._resId,l=+n._idx,c=j.fc(r()),s=j.mc(r()),u=Object(I.A)(c,s,{resId:i},l);Object(w.b)(n,u,t.style)}}}function gn(e,t,n){return function(a){var r=Object(I.Q)(e,t);r&&(r.id===I.h?a(Ae(t.id,n)):a(function(e,t,n,a){return{type:hn,payload:{viewId:e,layerId:t,entityId:n,style:a}}}(e.id,r.id,t.id,n))),a({type:pn})}}var On="UPDATE_TABLE_VIEW_DATA";function En(e,t,n,a,r,o){return{type:On,payload:{viewId:e,resName:t,varName:n,dataRows:a=a||null,error:r=r||null,isLoading:o=o||!1}}}function _n(e,t,n){return function(a,r){var o=j.fc(r()),i=j.mc(r()),l=j.bb(r()).find((function(e){return e.name===t}));if(l){var c=Object(I.x)(o,i,{resId:l.id},n);a(En(e,t,n,null,null,!0)),p.a(c).then((function(r){a(En(e,t,n,r,null,!1))})).catch((function(r){a(En(e,t,n,null,r,!1))}))}}}var Cn="UPDATE_ANIMATION_VIEW_DATA";function kn(e,t){return function(n,a){var r=j.fc(a()),o=j.mc(a()),i=Object(I.D)(r,o,t),l=new XMLHttpRequest;l.onreadystatechange=function(){4===l.readyState&&n(function(e,t,n){return{type:Cn,payload:{viewId:e,innerHTML:t,status:n}}}(e,l.responseText,l.status))},l.open("GET",i,!0),l.send(null)}}var wn="SET_SELECTED_LAYER_ID",Sn="ADD_LAYER",jn="REMOVE_LAYER",In="UPDATE_LAYER",Pn="UPDATE_LAYER_STYLE",Dn="MOVE_LAYER_UP",Ln="MOVE_LAYER_DOWN",Tn="SAVE_LAYER",An="SET_BASE_MAP_ID";function Nn(e,t){return{type:wn,payload:{viewId:e,selectedLayerId:t}}}function Rn(e,t){return{type:jn,payload:{viewId:e,id:t}}}function xn(e,t){return{type:Dn,payload:{viewId:e,id:t}}}function Mn(e,t){return{type:Ln,payload:{viewId:e,id:t}}}function Vn(e,t){for(var n=arguments.length,a=new Array(n>2?n-2:0),r=2;r<n;r++)a[r-2]=arguments[r];return function(n){if(a.length&&(t=m.a.apply(void 0,[{},t].concat(a))),n(Bn(e,t)),t.id===I.a){var r=t.varName;r&&n(Fn(r,t))}}}function Bn(e,t){return{type:In,payload:{viewId:e,layer:t}}}function Wn(e,t,n){return{type:Pn,payload:{viewId:e,layerId:t,style:n}}}function Fn(e,t){return{type:Tn,payload:{key:e,layer:t}}}function Un(e){return ce({styleContext:e})}function Gn(e,t){return{type:An,payload:{viewId:e,baseMapId:t}}}var Yn="UPDATE_COLOR_MAPS";function Hn(){return function(e,t){pe({title:"Load color maps",dispatch:e,call:function(){return j.r(t()).getColorMaps()},action:function(t){e(function(e){return{type:Yn,payload:{colorMaps:e}}}(t))}})}}function Kn(){return Q("preferencesDialog")}function zn(){return $("preferencesDialog")}function qn(){return Q("shutdownDialog")}function Jn(){return $("shutdownDialog")}var Xn="OBTAIN_COOKIE_CONSENT";function Zn(e){return{type:Xn,payload:{trackingConsentObtained:e}}}var Qn="OPEN_DIRECTORY_SELECT_DIALOG",$n="CLOSE_DIRECTORY_SELECT_DIALOG";function ea(e,t){var n=new Set(e.properties);return n.delete("openFile"),n.delete("multiSelections"),n.add("openDirectory"),e=Object(a.a)(Object(a.a)({},e),{},{title:e.title||"Select Directory",buttonLabel:e.buttonLabel||"Select",properties:Array.from(n)}),function(n){var a=function(e){n(function(e){return{type:$n,payload:{result:e}}}(e)),t(!e.canceled&&e.filePaths&&e.filePaths.length>0?e.filePaths[0]:null)};n(function(e,t){return{type:Qn,payload:{options:e,onClose:t}}}(e,a)),y.a.showFileOpenDialog(e,a)}}var ta="OPEN_FILE_OPEN_DIALOG",na="CLOSE_FILE_OPEN_DIALOG";function aa(e,t){return function(n){var a=function(e){n(function(e){return{type:na,payload:{result:e}}}(e)),t(e)};n(function(e,t){return{type:ta,payload:{options:e,onClose:t}}}(e,a)),y.a.showFileOpenDialog(e,a)}}var ra="OPEN_FILE_SAVE_DIALOG",oa="CLOSE_FILE_SAVE_DIALOG";function ia(e,t){return function(n){var a=function(e){n(function(e){return{type:oa,payload:{result:e}}}(e)),t(e)};n(function(e,t){return{type:ra,payload:{options:e,onClose:t}}}(e,a)),y.a.showFileSaveDialog(e,a)}}var la="OPEN_MESSAGE_BOX",ca="CLOSE_MESSAGE_BOX";function sa(e,t){return function(n){var a=function(e){n(function(e){return{type:ca,payload:{result:e}}}(e)),t&&t(e)};n(function(e,t){return{type:la,payload:{options:e,onClose:t}}}(e,a)),y.a.showMessageBox(e,a)}}var ua="OPEN_FILE_BROWSE_DIALOG",da="CLOSE_FILE_BROWSE_DIALOG";function pa(e){return function(t){t({type:ua,payload:{options:{defaultPath:e},onClose:function(){t({type:da})}}}),y.a.showItemInFolder(e)}}function ha(e){ba("copyTextToClipboard")?A.clipboard.writeText(e):d()(e)}function fa(e,t){return function(n,a){var r=a(),o=r.communication.webAPIServiceURL;j.A(r).uploadFiles(e,t,o).then((function(a){n(Oe(e+"/"+t.name,!0)),Object(P.a)({type:a.status,text:"Upload finished: "+a.message})})).catch((function(e){Object(P.a)({type:"error",text:e.toString()}),console.error(e)}))}}function ma(e){return function(t,n){var a=n(),r=a.communication.webAPIServiceURL;j.A(a).downloadFiles(e,"ignore",r).then((function(){Object(P.a)({type:"success",text:"Zip ready for download."})})).catch((function(e){Object(P.a)({type:"error",text:e.toString()}),console.error(e)}))}}function ba(e){return A?!!A.ipcRenderer||(console.warn("".concat(e,"() cannot be executed, module electron.ipcRenderer not available")),!1):(console.warn("".concat(e,"() cannot be executed, module electron not available")),!1)}function va(e,t){console.info("fetch error: ",t,e);var n="";e instanceof T.a?n=e.statusText?" (HTTP status ".concat(e.status,": ").concat(e.statusText,")"):" (HTTP status ".concat(e.status,")"):e instanceof TypeError?n=" (wrong URL or no internet)":e instanceof Error&&e.message&&(n=" (".concat(e.message,")")),Object(P.a)({type:"error",text:t+n})}var ya=!1;function ga(){return function(e,t){if(!ya){if(A&&A.ipcRenderer){var n=A.ipcRenderer;n.on("update-initial-state",(function(t,n){e(function(e){return{type:N,payload:e}}(n))})),n.on("new-workspace",(function(){e(mt())})),n.on("open-workspace",(function(){e(vt())})),n.on("close-workspace",(function(){e(gt())})),n.on("save-workspace",(function(){e(_t())})),n.on("save-workspace-as",(function(){e(Ct())})),n.on("delete-workspace",(function(){e(yt())})),n.on("show-preferences-dialog",(function(){e(Kn())})),n.on("logout",(function(){}))}document.addEventListener("drop",(function(t){t.preventDefault(),t.stopPropagation();var n,a=Object(r.a)(t.dataTransfer.files);try{for(a.s();!(n=a.n()).done;){Oa(n.value,e)}}catch(o){a.e(o)}finally{a.f()}})),document.addEventListener("dragover",(function(e){e.preventDefault(),e.stopPropagation()})),window.addEventListener("beforeunload",(function(n){return n.preventDefault(),t().communication.webAPIClient&&e(oe()),null})),ya=!0}}}function Oa(e,t){var n,a;e.name.endsWith(".nc")?n="read_netcdf":e.name.endsWith(".txt")?n="read_text":e.name.endsWith(".json")?n="read_json":e.name.endsWith(".csv")?n="read_csv":(e.name.endsWith(".geojson")||e.name.endsWith(".shp")||e.name.endsWith(".gml"))&&(n="read_geo_data_frame"),a||(a={file:{value:e.name}}),n?t(function(e,t,n,a,r,o,i){return function(l,c){var s=c(),u=j.x(k.a)(s),d=s.communication.webAPIServiceURL,p=j.kc(c());u.isOpen||j.A(s).uploadFiles(p,t,d).then((function(t){Object(P.a)({type:t.status,text:"Upload finished: "+t.message}),l(It(e,n,a,r,o,i))})).catch((function(e){Object(P.a)({type:"error",text:e.toString()}),console.error(e)}))}}(n,e,a,null,!1,"Reading dropped file ".concat(e.name))):console.warn("Dropped file of unrecognized type: ",e.name)}},81:function(e,t,n){"use strict";var a=n(6),r=n(204),o=n.n(r),i=window.electron||null;t.a=i?{isNativeUI:!0,showFileOpenDialog:function(e,t){i.ipcRenderer.send("show-open-dialog",e,!1),i.ipcRenderer.once("show-open-dialog-reply",(function(e,n){t(n)}))},showFileSaveDialog:function(e,t){i.ipcRenderer.send("show-save-dialog",e,!1),i.ipcRenderer.once("show-save-dialog-reply",(function(e,n){t(n)}))},showMessageBox:function(e,t){e.buttons||(e=Object(a.a)(Object(a.a)({},e),{},{buttons:["OK"]})),i.ipcRenderer.send("show-message-box",e,!1),i.ipcRenderer.once("show-message-box-reply",(function(e,n,a){t({buttonIndex:n,checkboxChecked:a})}))},showItemInFolder:function(e){return Promise.resolve(i.shell.showItemInFolder(e))},openItem:function(e){return Promise.resolve(i.shell.openItem(e))},openExternal:function(e){return Promise.resolve(i.shell.openExternal(e))},copyTextToClipboard:function(e){return i.clipboard.writeText(e)}}:{isNativeUI:!1,showFileOpenDialog:function(e,t){},showFileSaveDialog:function(e,t){},showMessageBox:function(e,t){},showItemInFolder:function(e){return Promise.resolve(!0)},copyTextToClipboard:function(e){return new Promise((function(t){o()(e,{onCopy:function(){return t(!0)}})}))}}},91:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n(15),r=function e(){Object(a.a)(this,e)};r.NEW="NEW",r.SUBMITTED="SUBMITTED",r.IN_PROGRESS="IN_PROGRESS",r.DONE="DONE",r.FAILED="FAILED",r.CANCELLED="CANCELLED"}},[[430,1,2]]]); +//# sourceMappingURL=main.52d53f34.chunk.js.map \ No newline at end of file diff --git a/cate/webapi/app/static/js/main.52d53f34.chunk.js.map b/cate/webapi/app/static/js/main.52d53f34.chunk.js.map new file mode 100644 index 000000000..3ead379ab --- /dev/null +++ b/cate/webapi/app/static/js/main.52d53f34.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["renderer/remoteStorageAPI.ts","renderer/webapi/apis/callHttpApi.ts","renderer/webapi/apis/FilesApi.ts","renderer/selectors.ts","common/objutil.ts","renderer/containers/ChooseWorkspaceDialog.tsx","renderer/electron.ts","renderer/webapi/HttpError.ts","common/types.ts","renderer/containers/FileUploadDialog.tsx","renderer/webapi/apis/ServiceInfoAPI.ts","renderer/containers/globe-view-layers.ts","common/memoize.ts","../node_modules/cesium/Source/Core sync","common/base16codec.ts","renderer/state-util.ts","common/assert.ts","renderer/webapi/WebAPIClient.ts","renderer/webapi/apis/DatasetAPI.ts","renderer/webapi/apis/OperationAPI.ts","renderer/webapi/apis/WorkspaceAPI.ts","renderer/webapi/apis/BackendConfigAPI.ts","renderer/webapi/apis/ColorMapsAPI.ts","renderer/webapi/apis/FileSystemAPI.ts","renderer/webapi/apis/ServiceShutdownAPI.ts","renderer/resources/cate-icon-128.png","renderer/containers/editor/DictValueEditor.tsx","renderer/containers/editor/LiteralValueEditor.tsx","renderer/components/ModalDialog.tsx","renderer/containers/AnimationView.tsx","common/cate-types.ts","renderer/components/ListBox.tsx","renderer/components/desktop/fs/FileNode.ts","renderer/components/field/Field.tsx","renderer/components/field/TextField.tsx","renderer/components/cesium/cesium-util.ts","common/geojson-simple-style.ts","common/paths.ts","renderer/state.ts","renderer/toast.ts","renderer/components/ViewState.ts","renderer/containers/operation-step-dialog-ids.ts","renderer/cookies.ts","renderer/initial-state.ts","renderer/reducers.ts","renderer/containers/GdprBanner.tsx","renderer/containers/WorkspacesMenu.tsx","renderer/containers/HelpMenu.tsx","renderer/containers/AppBar.tsx","renderer/messages.tsx","renderer/components/ExternalObjectComponent.tsx","common/shallow-equal.ts","common/array-diff.ts","renderer/components/cesium/SplitSlider.tsx","renderer/components/cesium/geometry-tool.ts","renderer/components/cesium/CesiumGlobe.tsx","common/geometry-util.ts","renderer/containers/GlobeView.tsx","renderer/components/matplotlib/MplFigure.ts","renderer/components/matplotlib/MplFigureContainer.tsx","renderer/components/ToolButton.tsx","renderer/components/matplotlib/MplFigurePanel.tsx","renderer/containers/FigureView.tsx","renderer/containers/ServiceAutoShutdownDialog.tsx","renderer/containers/ServiceShutdownDialog.tsx","renderer/containers/TableView.tsx","renderer/components/Splitter.tsx","renderer/components/SplitPane.tsx","renderer/components/ContentWithDetailsPanel.tsx","renderer/components/DataSourceLinks.tsx","renderer/components/Markdown.tsx","renderer/components/ScrollableContent.tsx","renderer/components/DataSourceDetails.tsx","renderer/components/DataSourceItem.tsx","renderer/components/DataSourcesList.tsx","renderer/components/DataSourceOpenHint.tsx","renderer/containers/AddDatasetDialog.tsx","common/format.ts","renderer/components/field/DateField.tsx","renderer/components/field/DateRangeField.tsx","renderer/components/LongIdLabel.tsx","renderer/components/field/NumericField.tsx","renderer/components/Region.tsx","renderer/components/LabelWithType.tsx","renderer/containers/VariablesDialog.tsx","renderer/containers/editor/VarNameValueEditor.tsx","renderer/containers/DataAccessComponent.tsx","renderer/containers/editor/InputEditor.tsx","renderer/containers/editor/BooleanValueEditor.tsx","renderer/containers/editor/ValueSetValueEditor.tsx","renderer/containers/editor/IntegerValueEditor.tsx","renderer/containers/editor/FloatValueEditor.tsx","renderer/containers/editor/TextValueEditor.tsx","renderer/containers/editor/FileValueEditor.tsx","renderer/components/GeometryDialog.tsx","renderer/components/field/GeometryField.tsx","renderer/containers/editor/GeometryValueEditor.tsx","renderer/containers/editor/TimeRangeValueEditor.tsx","renderer/containers/DimensionsDialog.tsx","renderer/containers/editor/DimNameValueEditor.tsx","renderer/containers/editor/TimeValueEditor.tsx","renderer/components/ScriptDialog.tsx","renderer/components/field/ScriptField.tsx","renderer/containers/editor/ScriptValueEditor.tsx","renderer/containers/editor/ValueEditor.tsx","renderer/containers/OperationStepDialog.tsx","renderer/containers/OpenDatasetDialog.tsx","renderer/containers/RemoveDatasetDialog.tsx","renderer/containers/DataSourcesPanel.tsx","renderer/containers/OperationsPanel.tsx","renderer/containers/WebAPIStatusBox.tsx","renderer/containers/WorkflowStepPropertiesDialog.tsx","renderer/containers/WorkspacePanel.tsx","renderer/containers/VariablesPanel.tsx","renderer/containers/LayerSourcesDialog.tsx","renderer/containers/PlacemarksPanel.tsx","renderer/containers/ViewPanel.tsx","renderer/containers/TaskComponent.tsx","renderer/containers/TasksPanel.tsx","renderer/components/TermsAndConditions.tsx","renderer/containers/VersionTags.tsx","version.ts","renderer/containers/StatusBar.tsx","renderer/components/SubPanelHeader.tsx","renderer/containers/LayersPanel.tsx","renderer/components/field/NumericRangeField.tsx","renderer/containers/StylesPanel.tsx","renderer/containers/SelectWorkspaceDialog.tsx","renderer/containers/NewWorkspaceDialog.tsx","renderer/containers/SaveWorkspaceAsDialog.tsx","renderer/containers/PreferencesDialog.tsx","renderer/components/desktop/fs/FileList.tsx","renderer/components/desktop/fs/RootNodeLoading.tsx","renderer/components/desktop/fs/FileTree.tsx","renderer/components/desktop/fs/FileDialog.tsx","renderer/components/desktop/fs/OpenDialog.tsx","renderer/containers/DirectorySelectDialog.tsx","renderer/containers/FileOpenDialog.tsx","renderer/components/desktop/fs/SaveDialog.tsx","renderer/containers/FileSaveDialog.tsx","renderer/containers/FileBrowseDialog.tsx","renderer/components/desktop/MessageBox.tsx","renderer/containers/MessageBox.tsx","renderer/components/PanelContainer.tsx","renderer/components/Panel.tsx","renderer/components/ViewManager.tsx","renderer/components/MessageDetails.tsx","renderer/containers/JobFailureDialog.tsx","renderer/containers/FileDownloadDialog.tsx","renderer/containers/AppMainPage.tsx","renderer/containers/AppMainPageWrapper.tsx","index.tsx","renderer/main.tsx","renderer/containers/editor/value-editor-assign.ts","renderer/actions.ts","renderer/components/desktop/electron.ts","renderer/components/desktop/actions.tsx","renderer/webapi/Job.ts"],"names":["RemoteStorageAPI","webAPIClient","this","call","session","callApi","endpointUrl","queryComponents","init","url","length","map","kv","encodeURIComponent","join","makeUrl","console","debug","fetch","then","response","ok","log","HttpError","status","statusText","catch","error","callBlobApi","fileName","blob","uuidv4","objectUrl","URL","createObjectURL","a","document","createElement","href","download","body","appendChild","click","removeChild","revokeObjectURL","callJsonApi","json","FilesAPI","processId","onProgress","serviceUrl","undefined","mode","method","JSON","stringify","dir","file","formData","FormData","append","name","filePaths","target_files","electron","requireElectron","EMPTY_OBJECT","EMPTY_ARRAY","offlineModeSelector","state","offlineMode","webAPIServiceInfoSelector","communication","webAPIServiceInfo","webAPIClientSelector","webAPIServiceURLSelector","webAPIServiceURL","isLocalFSAccessAllowedSelector","ipcRenderer","userRootMode","webAPIRestUrlSelector","createSelector","makeURL","getRestUrl","apiWebSocketsUrlSelector","getAPIWebSocketsUrl","mplWebSocketUrlSelector","getMPLWebSocketsUrl","ws","path","_url","protocol","pathname","newUrl","host","startsWith","endsWith","backendConfigAPISelector","BackendConfigAPI","datasetAPISelector","DatasetAPI","operationAPISelector","OperationAPI","workspaceAPISelector","WorkspaceAPI","remoteStorageAPISelector","colorMapsAPISelector","ColorMapsAPI","fileSystemAPISelector","FileSystemAPI","activeRequestLocksSelector","activeRequestLocks","Set","jobId","tasks","task","JobStatusEnum","NEW","SUBMITTED","IN_PROGRESS","add","requestLock","DIALOG_STATE_SELECTORS","dialogStatesSelector","control","dialogs","dialogStateSelector","dialogId","dialogStates","isDialogOpenSelector","Object","getOwnPropertyNames","some","isOpen","panelContainerUndockedModeSelector","panelContainerUndockedMode","leftPanelContainerLayoutSelector","leftPanelContainerLayout","rightPanelContainerLayoutSelector","rightPanelContainerLayout","selectedLeftTopPanelIdSelector","selectedLeftTopPanelId","selectedLeftBottomPanelIdSelector","selectedLeftBottomPanelId","selectedRightTopPanelIdSelector","selectedRightTopPanelId","selectedRightBottomPanelIdSelector","selectedRightBottomPanelId","newPlacemarkToolTypeSelector","newPlacemarkToolType","placemarkCollectionSelector","placemarkCollection","selectedPlacemarkIdSelector","selectedPlacemarkId","showPlacemarkDetailsSelector","showPlacemarkDetails","defaultPlacemarkStyleSelector","defaultPlacemarkStyle","selectedPlacemarkSelector","features","placemarks","canFind","find","placemark","id","globeMousePositionSelector","location","globeMousePosition","globeViewPositionSelector","globeViewPosition","operationsSelector","data","operations","operationFilterTagsSelector","operationFilterTags","operationFilterExprSelector","operationFilterExpr","selectedOperationNameSelector","selectedOperationName","selectedOperationSelector","op","selectedCtxOperationSelector","selectedCtxOperationName","filteredOperationsSelector","hasOperations","hasFilterExpr","hasFilterTags","nameMatches","hasTag","parts","toLowerCase","split","every","part","includes","tag","tags","has","filter","operationsTagCountsSelector","tagCounts","Map","forEach","set","get","dataStoresSelector","dataStores","selectedDataStoreIdSelector","selectedDataStoreId","selectedDataSourceIdSelector","selectedDataSourceId","dataSourceFilterExprSelector","dataSourceFilterExpr","dataSourceListHeightSelector","dataSourceListHeight","showDataSourceDetailsSelector","showDataSourceDetails","showAllDataSourcesSelector","showAllDataSources","showDataSourceIDsSelector","showDataSourceIDs","showDataStoreDescriptionSelector","showDataStoreDescription","showDataStoreNoticesSelector","showDataStoreNotices","selectedDataStoreSelector","dataStore","selectedDataSourcesSelector","selectedDataStore","dataSources","filteredDataSourcesSelector","selectedDataSources","ds","searchWords","canOpenDataSource","word","title","metaInfo","matchesIdOrTitle","selectedDataSourceSelector","dataSource","selectedDataSourceTemporalCoverageSelector","selectedDataSource","time_range","canCacheDataSourceSelector","canCacheDataSource","canConstrainDataSourceTimeSelector","canMapDataSource","canConstrainDataSourceTime","canConstrainDataSourceRegionSelector","canConstrainDataSourceRegion","canConstrainDataSourceVariablesSelector","canConstrainDataSourceVariables","workspaceSelector","workspace","isScratchWorkspaceSelector","isScratch","workspaceBaseDirSelector","baseDir","resourcesSelector","resources","workflowStepsSelector","workflow","steps","resourceListHeightSelector","resourceListHeight","showResourceDetailsSelector","showResourceDetails","selectedResourceNameSelector","selectedWorkspaceResourceName","workflowStepListHeightSelector","workflowStepListHeight","showWorkflowStepDetailsSelector","showWorkflowStepDetails","selectedWorkflowStepIdSelector","selectedWorkflowStepId","selectedVariableNameSelector","selectedVariableName","workspaceIdSelector","getWorkspaceId","workspaceNameSelector","index","Math","max","lastIndexOf","substring","getFileName","workspaceDirSelector","getParentDir","lastWorkspaceDirSelector","lastWorkspacePath","resourceNamesSelector","r","resourceMapSelector","resourceMap","resource","selectedResourceSelector","selectedResourceName","selectedResourceAttributesSelector","selectedResource","attributes","array","attrName","hasOwnProperty","push","selectedWorkflowStepResourceSelector","selectedWorkflowStepSelector","workflowSteps","selectedResourceWorkflowStepSelector","selectedWorkflowStepOpSelector","selectedWorkflowStep","findOperation","figureResourcesSelector","isFigureResource","animationResourcesSelector","isAnimationResource","variablesSelector","variables","selectedVariableSelector","selectedVariables","v","selectedVariableAttributesTableDataSelector","selectedVariable","tableData","dataType","units","validMin","validMax","dimNames","shape","chunkSizes","viewLayoutSelector","viewLayout","viewsSelector","views","activeViewIdSelector","activeViewId","activeViewSelector","view","type","activeViewTypeSelector","selectedEntityIdSelector","selectedEntityId","selectedEntitySelector","unusedEntityId","getWorldViewSelectedEntity","selectedWorldViewViewerSelector","getWorldViewViewer","selectedGeometryWKTGetterSelector","getWorldViewSelectedGeometryWKTGetter","externalObjectStoreSelector","EXTERNAL_OBJECT_STORE","savedLayersSelector","savedLayers","selectedLayerIdSelector","selectedLayerId","baseMapsSelector","baseMaps","baseMapIdSelector","baseMapId","DEFAULT_BASE_MAP_ID","baseMapSelector","bm","DEFAULT_BASE_MAP","baseMapOptionsSelector","baseMap","options","layersSelector","layers","selectedLayerSelector","l","selectedLayerIndexSelector","findIndex","selectedImageLayerSelector","selectedLayer","selectedVariableImageLayerSelector","selectedVariableImageLayerDisplayMinMaxSelector","displayMin","isNumber","displayMax","selectedVectorLayerSelector","styleContextSelector","styleContext","vectorStyleSelector","entityUpdateCount","selectedVectorLayer","selectedPlacemark","selectedEntity","style","selectedLayerStyle","STYLE_CONTEXT_LAYER","STYLE_CONTEXT_ENTITY","placemarkStyle","simpleStyleFromFeatureProperties","properties","entityStyle","entityToSimpleStyle","entityVectorLayer","getWorldViewVectorLayerForEntity","entityVectorLayerStyle","savedEntityStyle","entityStyles","SIMPLE_STYLE_DEFAULTS","selectedResourceVectorLayerSelector","selectedLayerVariablesSelector","layerVariables","variable","isSpatialImageVariable","isSpatialVectorVariable","isComputingVariableStatistics","selectedVariableImageLayer","imageLayer","getLockForGetWorkspaceVariableStatistics","varIndex","colorMapCategoriesSelector","colorMaps","selectedColorMapSelector","colorMapCategories","selectedImageLayer","selectedColorMapName","colorMapName","selectedColorMap","cm","fileAPISelector","updateObject","target","sources","assign","updatePropertyObject","propertyName","newValue","oldValue","OPEN_WORKSPACE_DIALOG_ID","DELETE_WORKSPACE_DIALOG_ID","ChooseWorkspaceDialog","props","renderItem","workspaceDir","currentWorkspaceName","selectedWorkspaceName","deleteEntireWorkspace","onCancel","bind","onConfirm","canConfirm","renderBody","onWorkspaceNameChange","onWorkspaceDirChange","nextProps","setState","dispatch","actions","resetSelectedWorkspaceName","test","workspaceName","composeWorkspacePath","event","checked","ev","value","confirmTitle","checkbox","workspaceNames","marginTop","content","label","onChange","handleCheckboxChange","items","selectionMode","ListBoxSelectionMode","SINGLE","getItemKey","item","itemIndex","onSelection","newSelection","setSelectedWorkspace","selection","React","connect","ownProps","dialogState","selectors","isLocalFSAllowed","indexOf","splice","isElectron","Boolean","window","_status","message","Error","isDefined","isUndefined","isDefinedAndNotNull","isUndefinedOrNull","isString","isBoolean","DIV_STYLE","width","marginBottom","display","flexGrow","TEXT_FIELD_STYLE","BUTTON_STYLE","flex","baseStyle","flexDirection","alignItems","padding","border","borderRadius","background","color","transition","FileUploadDialog","handleOnDrop","files","handleOpenDirectoryOnClose","handleOpenDirectoryOpen","showDirectorySelectDialog","DIALOG_ID","icon","confirmIconName","confirmTooltip","key","size","fill","nullable","intent","Intent","PRIMARY","onClick","onDrop","getRootProps","getInputProps","className","FILE_UPLOAD_DIALOG_ID","ServiceInfoAPI","serviceURL","toString","fromResponse","version","timestamp","user_root_mode","hostOS","host_os","dependencies","convertLayersToLayerDescriptors","baseUrl","workspaceId","imageLayerDescriptors","vectorLayerDescriptors","layer","imageLayerDescriptor","vectorLayerDescriptor","convertVariableImageLayerToDescriptor","convertResourceVectorLayerToDescriptor","convertVectorLayerToDescriptor","AUTO_LAYER_ID","warn","findVariable","varName","resId","imageLayout","getTileUrl","rectangle","Cesium","MAX_VALUE","extent","fromDegrees","west","south","east","north","imageryProvider","createImageryProvider","imageryProviderOptions","minimumLevel","maximumLevel","numLevels","tileWidth","tileHeight","tilingScheme","numberOfLevelZeroTilesX","numLevelZeroTilesX","numberOfLevelZeroTilesY","numLevelZeroTilesY","findResource","createResourceGeoJSONDataSource","dataSourceOptions","getFeatureCollectionUrl","COUNTRIES_LAYER_ID","getGeoJSONCountriesUrl","MY_PLACES_LAYER_ID","createGeoJsonDataSource","viewer","errorEvent","addEventListener","simpleStyleToCesium","load","createResourceGeoJSONDataSourceImpl","func","maxSize","memo","memoized","args","memoize","customDataSource","cStyle","worker","Worker","process","postMessage","onmessage","pointColor","fromAlpha","pointOutlineColor","featureCollection","geoJsonDataSource","featureMap","f","scaleByDistance","translucencyByDistance","entities","suspendEvents","values","entity","feature","_simp","_resId","_idx","point","billboard","ratio","area","pixelSize","position","description","outlineColor","outlineWidth","e","removeAll","resumeEvents","changedEvent","raiseEvent","entityGeometryPropertyNames","reloadEntityWithOriginalGeometry","oldEntity","featureUrl","fromEntity","toEntity","newGeomPropertyName","oldGeomPropertyName","transferEntityGeometry","webpackEmptyContext","req","code","keys","resolve","module","exports","Base16","result","i","codePointAt","toUpperCase","parseInt","substr","Number","isNaN","String","fromCharCode","AUTO_LAYER","visible","COUNTRIES_LAYER","stroke","fillOpacity","strokeWidth","MY_PLACES_LAYER","markerSize","markerColor","markerSymbol","strokeOpacity","PLACEMARK_ID_PREFIX","encode","isLocalDataStore","isLocal","isRemoteDataStore","getDataSourceUrls","catalogUrl","infoUrl","catalog_url","catalogue_url","uuid","info_url","computeDataSourceCapabilities","dsd","canConstrainTime","isCoord1DInDataset","canConstrainRegion","data_type","coords","c","dims","d","isCoord1D","_checkDataSourceCapability","data_vars","capabilities","Array","isArray","availableCapabilities","requiredCapabilities","requiredCapability","alphaBlending","ref","getFeatureUrl","getCsvUrl","varPart","getHtmlUrl","getMPLWebSocketUrl","figureId","getMPLDownloadUrl","numDims","isFeatureAttribute","genSimpleId","prefix","floor","random","Date","now","genLayerId","isDataFrameResource","getLayerDisplayName","resName","getLayerTypeIconName","isVectorLayer","findResourceById","findResourceByName","qualifiedName","findDataSource","dataStoreId","dataSourceId","findVariableIndexCoordinates","coordVariables","coordDataMap","cv","coordIndex","dimName","coord","coordData","getNonSpatialIndexers","dimIndexers","newCfSBaseMap","BASE_MAPS","credit","newInitialWorldViewData","viewMode","projectionCode","layerSplitPosition","newInitialTableViewData","dataRows","WORLD_VIEW_COUNTER","newWorldView","viewNumber","newFigureView","getFigureViewTitle","resourceId","fixedSize","resourceName","newAnimationView","newTableView","getWorldViewExternalObject","externalObject","object","assert","dataSourceMap","dataSourceCollection","contains","layerId","entityToGeometryWkt","isImageLayer","STROKE_COLORS","FILL_COLORS","newVariableLayer","spatialImageVariable","spatialVectorVariable","restoredLayer","layerDisplayProperties","updateVariableLayerVarIndex","restoredStyle","getResourceVectorStyle","updateAutoLayer","getLockForLoadDataSources","getVariableLock","slice","defaultDisplayMin","defaultDisplayMax","opacity","brightness","contrast","hue","saturation","gamma","splitMode","SPLIT_MODE_OFF","newVariableLayerDisplayProperties","newVarIndex","_hasWebGL","hasWebGL","canvas","extensions","getContext","getSupportedExtensions","getPlacemarkTitleAndIndex","t","geometry","titles","condition","ERROR_CODE_INVALID_REQUEST","ERROR_CODE_METHOD_NOT_FOUND","ERROR_CODE_INVALID_PARAMS","ERROR_CODE_OS_ERROR","ERROR_CODE_OUT_OF_MEMORY","ERROR_CODE_METHOD_ERROR","ERROR_CODE_INVALID_RESPONSE","ERROR_CODE_CANCELLED","CANCEL_METHOD","DEBUG","newWebAPIClient","firstMessageId","socket","WebAPIClientImpl","onOpen","onClose","onError","onWarning","currentMessageId","activeJobs","WebSocket","onopen","onclose","onerror","processMessage","params","transformer","request","newId","job","JobImpl","invoke","cancel","close","jsonrpc","messageText","send","eval","err","warnInvalidJsonRcpMessage","notifyDone","progress","notifyInProgress","notifyFailed","detailsMessage","jsonRcpMessage","readyState","OPEN","onResolve","onReject","CANCELLED","promise","Promise","setHandlers","sendMessage","setStatus","getJob","getJobId","DONE","failure","FAILED","getRequest","getJobFailureIntentName","WARNING","getJobFailureIconName","exception","getJobFailureTitle","NON_DEVELOPER_ERRORS","isDeveloperError","USER_ERRORS","isUserError","responseToDataSources","responseToMetaInfo","filePathPattern","removeFiles","source","indexers","metaInfoStatus","responseToOperations","operationsResponse","responseOperationToOperation","qualified_name","header","hasMonitor","has_monitor","inputs","responseInputToOperationInput","outputs","responseOutputToOperationOutput","input","password","defaultValue","default_value","valueSet","value_set","valueSetSource","value_set_source","valueRange","value_range","scriptLang","script_lang","fileOpenMode","file_open_mode","fileFilters","file_filters","fileProps","file_props","noUI","no_ui","step_id","output","webAPI","responseToWorkspace","workspaceResponse","base_dir","is_scratch","isModified","is_modified","isSaved","is_saved","resourcesResponse","variablesResponse","validRange","rangeOk","validMinMin","responseToWorkspaceAndResName","workspaceAndResNameResponse","toDir","opName","opArgs","overwrite","persistent","newResName","fromPythonConfig","configResponse","dataStoresPath","data_stores_path","useWorkspaceImageryCache","use_workspace_imagery_cache","resourceNamePattern","default_res_pattern","proxyUrl","http_proxy","config","backendConfig","responseToColorMaps","colorMapsResponse","v1","v2","imageData","ServiceShutdownAPI","DictValueEditor","textValue","toTextValue","validator","validateDictText","placeholder","trim","None","True","False","LiteralValueEditor","validatePythonLiteralText","ModalDialog","autoFocus","canEscapeKeyClose","canOutsideClickClose","enforceFocus","renderDialogContent","renderDialogFooter","Classes","DIALOG_BODY","children","DIALOG_FOOTER","DIALOG_FOOTER_ACTIONS","renderActions","cancelButton","noCancelButton","extraActions","confirmButton","disabled","renderExtraActions","mapStateToProps","animationResources","mplWebSocketUrl","AnimationView","divElement","onRef","innerHTML","loading","elements","getElementsByTagName","script","getAnimationResource","animationViewData","dangerouslySetInnerHTML","__html","height","overflowX","overflowY","BOOL_TYPE","INT_TYPE","FLOAT_TYPE","STR_TYPE","ND_ARRAY_TYPE","DATASET_TYPE","DATA_ARRAY_TYPE","DATA_FRAME_TYPE","SERIES_TYPE","DATASET_LIKE_TYPE","DATA_FRAME_LIKE_TYPE","POINT_LIKE_TYPE","POLYGON_LIKE_TYPE","GEOMETRY_LIKE_TYPE","TIME_LIKE_TYPE","TIME_RANGE_LIKE_TYPE","VAR_NAME_LIKE_TYPE","VAR_NAMES_LIKE_TYPE","DIM_NAME_LIKE_TYPE","DIM_NAMES_LIKE_TYPE","DICT_LIKE_TYPE","FILE_LIKE_TYPE","LITERAL_TYPE","isAssignableFrom","targetDataType","sourceDataType","ListBox","detail","oldSelection","toSelectionArray","k","MULTIPLE","onItemClick","onItemDoubleClick","renderedItems","renderedItem","handleClick","onDoubleClick","handleDoubleClick","itemStyle","obj","constructor","ALL_FILES_FILTER","updateFileNode","rootNode","updatedFileNode","childNodes","newRootNode","currentNode","depth","childIndex","n","localeCompare","newChildNode","childNode","_updateFileNode","getFileNodePath","pathNames","fileNodePath","_getValidSubFileNodePath","rootNodes","node","getFileNode","getFileNodeIcon","isDir","compareFileNames","b","addExpandedDirPath","expandedPaths","parentDir","getParentPath","cleanedPaths","p","removeExpandedDirPath","isPathValidAtIndex","applyFileFilter","nodes","fileFilter","extSet","ext","getBasenameExtension","fromPathInputValue","inputValue","currentDirPath","multiSelection","paths","isWindows","escChar","token","char","abs","isAbsolutePath","replace","normalizePath","toAbsolutePath","denormalizePath","isWindowsRootPath","toPathInputValue","selectedPaths","escapePath","getBasename","isFieldValue","Field","_fieldValue","toFieldValue","uncontrolled","handleKeyPress","handleBlur","handleInputChange","setFieldValue","newFieldValueFromValue","newFieldValueFromValueAndTextValue","newFieldValueFromTextValue","charCode","setTextValue","parseValue","validateValue","formatValue","fieldValue","getError","errorClassName","ERROR_CLASS","nominalClassName","NOMINAL_CLASS","getTextValue","onBlur","onKeyPress","INTENT_DANGER","TextField","MARKER_SIZES","small","medium","large","defaults","getString","fromCssColorString","getNumber","pinBuilder","markerCanvas","fromColor","fromText","fromMakiIconId","pixelSizeValue","getValue","colorValue","rgbToCssColor","red","green","blue","pointGraphicsToSimpleStyle","image","scale","imageValue","scaleValue","billboardGraphicsToSimpleStyle","text","fillColor","labelGraphicsToSimpleStyle","polyline","material","alpha","polylineGraphicsToSimpleStyle","polygon","isFilled","isOutlined","outline","polygonGraphicsToSimpleStyle","applyStyleToEntityCollection","applyStyleToEntity","colorToHexString","g","entityToGeoJson","fromCartesian","_entityToGeoJson","coordinates","toDegrees","longitude","latitude","positions","hierarchy","holes","ring","cartesian3ArrayToWktArray","cartesian3ArrayToWkt","exterior","linearRings","interior","x1","toDeg","y1","x2","y2","cartesian3ToWkt","TypeError","canvasToCartographic","canvasPos","degrees","cartographic","ellipsoid","scene","globe","cartesian","camera","pickEllipsoid","cartesianToCartographic","round","clientToCanvas","clientPos","rect","getBoundingClientRect","x","y","left","right","top","bottom","pickEntity","pickedObject","pick","setViewerBaseMap","baseMapOptions","bgMapImageryProvider","z","imageryLayers","oldLayer","remove","getEntityByEntityId","entityId","getById","PI","_getValue","predicate","objects","o","styleProperties","simpleStyle","featurePropertiesFromSimpleStyle","isLinuxRootPath","isWindowsNetworkDevicePath","isWindowsDrivePath","makeAbsolutePath","path1","path2","comps1","splitPath","comps2","joinPathComponents","normPathComponents","concat","makeRelativePath","relPathComps","n1","n2","iFirstDiff","min","components","newComponents","insPos","component","basename","SPLIT_MODE_LEFT","SPLIT_MODE_RIGHT","MessageToaster","showToast","timeout","action","Toaster","create","Position","BOTTOM","NONE","SUCCESS","DANGER","show","isViewSplitState","isViewPanelState","getViewPanel","viewPath","_getViewPanel","pathIndex","viewSplit","layoutIndex","layouts","findViewPanel","viewPanel","findMoveTargetViewIds","sourceViewId","before","after","_collectMoveTargetViewIds","viewIds","lastViewId","viewId","nextViewId","layout","moveView","placement","targetViewId","_moveView","oldLayout1","oldLayout2","newLayout1","newLayout2","selectedViewId","sourceViewIndex","selectedViewIndex","targetViewIndex","addViewToPanel","placeAfterViewId","_addViewToPanel","oldViewIds","placeAfterIndex","insertionIndex","addViewToLayout","_addViewToLayout","oldLayout","splitViewPanel","pos","_splitViewPanel","charCodeAt","newLayout","viewIds1","viewIds2","changeViewSplitPos","delta","_changeViewSplitPos","selectViewInLayout","_selectViewInLayout","removeViewFromLayout","_removeViewFromLayout","removeViewFromViewArray","w","selectView","viewIndex","C_OPTIONS","expires","storeCookieConsent","trackingConsentObtained","Cookies","INITIAL_DATA_STATE","fsRootNode","lastModified","INITIAL_WORLD_VIEW","INITIAL_CONTROL_STATE","directorySelectDialog","fileOpenDialog","fileSaveDialog","fileBrowseDialog","messageBox","INITIAL_SESSION_STATE","reopenLastWorkspace","autoUpdateSoftware","autoShowNewFigures","showSelectedVariableLayer","operationListHeight","showOperationDetails","variableListHeight","showVariableDetails","layerListHeight","showLayerDetails","lastBaseMapId","horPos","verPos","placemarkListHeight","workspacePanelMode","showLayerTextOverlay","debugWorldView","cookieConsentObtained","INITIAL_COMMUNICATION_STATE","webAPIStatus","INITIAL_LOCATION_STATE","positionData","updateDataStores","createDataSources","payload","dataStoreIndex","oldDataStore","newDataStore","newDataStores","addView","newViewLayout","newViews","addViewToViewArray","oldViewLayout","viewsReducer","oldView","newView","viewReducer","isActiveView","layersReducer","selectLayer","layerIndex","temp","newLayers","newLayer","layerReducer","oldStyle","newStyle","deepEqual","updatePlacemarkProperties","placemarkId","featureIndex","oldFeature","oldProperties","newProperties","newFeature","updatePlacemarkGeometry","oldGeometry","newGeometry","stateReducer","combineReducers","UPDATE_FS_ROOT_NODE","newDataSources","dataSourceIndex","oldDataSource","newDataSource","figureView","animationView","tableView","containsActiveId","activeViewPanel","inputAssignments","removedFeatureIndex","OBTAIN_COOKIE_CONSENT","autoStopInfo","webAPIAutoStopInfo","hubStatus","taskState","customizeMode","setCustomizeMode","trackingAllowed","setTrackingAllowed","isCloseButtonShown","DRAWER_BODY","obtainCookieConsent","rightIcon","currentTarget","WorkspacesMenu","newWorkspaceInteractive","openWorkspaceInteractive","closeWorkspaceInteractive","saveWorkspaceInteractive","saveWorkspaceAsInteractive","deleteWorkspaceInteractive","HelpMenu","openUrl","open","TITLE_STYLE","marginLeft","AppBar","src","cateIcon","alt","align","PopoverPosition","self","isRunningInIFrame","CONFIG_ERROR_MESSAGE","NO_WORKSPACE","NO_WORKSPACE_RESOURCES","NO_WORKFLOW_STEPS","NO_DATA_STORES_FOUND","NO_LOCAL_DATA_SOURCES","DATA_SOURCES_LOADING","NO_DATA_SOURCES_FOUND","NO_OPERATIONS_FOUND","NO_VARIABLES","NO_ACTIVE_VIEW","NO_WEB_GL","NO_PLACES","NO_PLACE_SELECTED","NO_LAYERS_NO_VIEW","NO_LAYERS_EMPTY_VIEW","NO_LAYER_SELECTED","NO_LAYER_FOR_STYLE","NO_ENTITY_FOR_STYLE","NO_TABLE_DATA","ExternalObjectComponent","parentContainer","checkProps","externalObjectStore","prevState","container","updateExternalComponentAndSaveProps","remountExternalObject","renderChildren","externalObjectRef","unmountExternalObject","mountExistingExternalObject","mountNewExternalObject","newContainer","newExternalObject","externalObjectMounted","externalObjectUnmounted","nextState","propsToExternalObjectState","shouldExternalObjectUpdate","updateExternalObject","t1","names1","names2","shallowEqual","DEFAULT_EXTERNAL_OBJECT_STORE","arrayDiff","oldArray","newArray","computeChange","currentArray","newIds","oldIndex","oldElement","newIndex","newElement","currentElement","currentIndex","numSteps","change","SplitSlider","sliderElement","dragStartX","handleRef","mouseDown","mouseUp","sliderMove","clientX","offsetLeft","removeEventListener","splitPosition","parentElement","offsetWidth","splitPos","backgroundColor","zIndex","cursor","CHARTREUSE","withAlpha","polylineColor","YELLOW","polygonColor","AQUA","CesiumToolContext","onNewEntity","_viewer","_ellipsoid","_toolDataSource","_handler","_onNewEntity","handler","setInputAction","leftClick","tool","isActive","onLeftClick","requestRender","LEFT_CLICK","doubleClick","onLeftDoubleClick","LEFT_DOUBLE_CLICK","movement","onMouseMove","MOUSE_MOVE","cartographicToCartesian","destroy","_tool","NO_TOOL","handleLeftClick","handleLeftDoubleClick","handleMouseMove","deactivate","context","activate","ToolBase","_context","PointTool","newEntity","PolyTool","genPolygon","polylinePositions","polygonPositions","polylineEntity","polygonEntity","hasRubberband","reset","addPoint","moveLastPoint","endPosition","endInteraction","screenPosition","cartesianWithHeightDelta","updatePositions","addToolEntity","BLACK","polylinePoint","newPointAdded","numPoints","equals","polygonPoint","removeAllToolEntities","PolylineTool","PolygonTool","BoxTool","position1","position2","setPosition","doAdd","getPositions","carto1","carto2","lon1","lat1","lon2","lat2","defaultAccessToken","CENTRAL_EUROPE_BOX","DEFAULT_VIEW_RECTANGLE","DEFAULT_VIEW_FACTOR","CesiumGlobe","cesiumEventHandler","selectedEntityChangeHandler","toolContext","handleRemoteBaseLayerError","isContextMenuOpen","splitLayerPosition","onLayerSplitPosChange","div","setAttribute","baseLayerImageryProvider","getStaticNaturalEarthImageryProvider","cesiumViewerOptions","animation","baseLayerPicker","selectionIndicator","fullscreenButton","geocoder","homeButton","infoBox","sceneModePicker","timeline","navigationHelpButton","navigationInstructionsInitiallyVisible","automaticallyTrackDataSourceClocks","requestRenderMode","maximumRenderTimeChange","Infinity","oncontextmenu","handleContextMenu","debugShowFramesPerSecond","viewModel","originalUpdate","update","vm","apply","styleValue","_screenPositionY","_screenPositionX","_selectionIndicatorElement","timesRetried","getExternalObjectRef","imageryLayer","staticNaturalEarthImageryProvider","addImageryProvider","renderContextMenu","screenPos","clientY","contextMenu","preventDefault","ContextMenu","overlayHtml","geometryToolType","prevBaseMapOptions","prevSelectedPlacemarkId","prevImageLayerDescriptors","prevVectorLayerDescriptors","prevOverlayHtml","prevSplitLayerPosition","prevGeometryToolType","nextBaseMapOptions","nextSelectedPlacemarkId","nextImageLayerDescriptors","nextVectorLayerDescriptors","nextOverlayHtml","nextSplitLayerPosition","nextGeometryToolType","shouldRequestRender","updateImageLayers","updateVectorLayers","updatePlacemarkSelection","updateOverlayHtml","imagerySplitPosition","activateGeometryTool","handleInputAction","canvasPosition","shouldPickEntity","callback","onLeftUp","LEFT_UP","onRightClick","RIGHT_CLICK","onSelectedEntityChanged","selectedEntityChanged","onNewEntityAdded","onViewerMounted","onViewerUnmounted","selectedEntityInViewer","currentPlacemarks","nextPlacemarks","promises","dataSourcePromise","moveEntities","removeById","oldPlacemark","newPlacemark","all","currentLayers","nextLayers","cesiumIndex","addLayer","setLayerProps","removeLayer","minificationFilter","NEAREST","magnificationFilter","lower","raise","addDataSource","removeDataSource","updateDataSource","getDataSource","resolvedDataSource","setDataSourceProps","oldData","newData","updatePlacemarks","styleDelta","diff","oldEntityStyles","newEntityStyles","entityStylesDelta","entityStyleDelta","layerDescriptor","getImageryProvider","dataSourceDescriptor","replaceChild","splitDirection","LEFT","RIGHT","from","to","WKT_GEOMETRY_TYPES","WKT_GEOMETRIES_TEXT","s","isAlpha","parseFloatWithError","errorText","parseFloat","validateGeometryValue","geometryType","isWKT","geometryName","geometryTypeUC","validateWKTGeometryType","expectedMinCommaCount","expectedMinDepthCount","expectedMaxDepthCount","commaCount","depthCount","maxDepthCount","validateWKTBody","i1","i2","coordParts","validateGeoCoordinate","lon","lat","isBox","x0","y0","x3","y3","x4","y4","geometryGeoJsonToGeometryWkt","a1","a2","GlobeView","intervalHandle","lastPosition","positionChanged","handleSelectedEntityChanged","handleNewEntityAdded","handleSplitLayerPosChange","handlePosDataUpdate","setInterval","POS_UPDATE_PERIOD","clearInterval","newPosition","newPlacemarkProperties","geoPos","wkt","menuItems","expectedInputType","dividerAdded","operation","geometryInput","isValueUsed","constantValue","descriptors","layerDescriptors","hasSplitLayer","indexCoords","varText","textDivElement","innerText","getOverlayHtml","CESIUM_GLOBE_STYLE","isDialogOpen","overflow","MplFigureCommandSourceImpl","listenersMap","dispatchCommand","listener","listeners","delete","commandData","MplFigure","webSocketUrl","commandSource","onMessage","webSocket","figureImageCanvas","rubberBandCanvas","imageObj","imageMode","waiting","lastKey","resizeTimer","lastSize","Image","handleCommand","initCanvas","onload","canvasContext","clearRect","drawImage","onunload","addCommandListener","supportsBinary","binaryType","sendRefresh","sendResize","clientWidth","clientHeight","validSize","sizeChange","removeCommandListener","handleKeyboardEvent","onkeydown","wrapEvent","onkeyup","onwheel","step","deltaY","handleMouseEvent","onmousedown","onmouseup","onmousemove","onmouseenter","onmouseleave","strokeStyle","jsonText","figure_id","evt","Blob","blobData","sendCanvasUpdated","msg","parse","msgType","stack","resizeCanvas","xMin","yMin","rubberBandCanvasContext","strokeRect","0","1","2","3","sendDrawMessage","extraData","canvas_pos","targ","srcElement","nodeType","parentNode","bodyRect","elemRect","offsetX","offsetY","pageX","pageY","findpos","focus","button","guiEvent","simpleKeys","which","ctrlKey","altKey","shiftKey","original","reduce","MplFigureContainer","figureUpdateCount","figureDiv","figureHeight","figure","ToolButton","active","tooltipContent","tooltipPosition","AUTO","FIGURE_COMMAND_SOURCE","MplFigurePanel","handleFigureMessage","CONTAINER_DIV_STYLE","onCommand","onDownload","removeCommandListeners","MplFigureToolbar","commands","tooltip","command","messageTag","buttons","tooltipText","FigureView","imageBaseUrl","figureResource","getFigureResource","compId","updateCount","figureName","figureViewData","figureResources","availableTime","remainingTime","inactivityTime","remainingTimeMax","handleClose","getServiceInfo","formatSeconds","hours","remainder","minutes","seconds","setWaiting","shutdown","hideShutdownDialog","TableView","viewData","isLoading","TABLE_CONTAINER_STYLE","renderDataTable","LOADING_CONTAINER_STYLE","firstRow","columnNames","getData","row","col","cellRenderer","numRows","enableRowHeader","getCellClipboardData","justifyContent","resNames","Splitter","bodyEventListeners","onBodyMouseMove","onBodyMouseUp","onBodyMouseEnter","onBodyMouseLeave","isButton1Pressed","getCurrentPosition","removeBodyMouseListeners","addBodyMouseListeners","currentPosition","positionDelta","endDragging","screenX","screenY","pair","onMouseDown","SplitPane","handleSplitDelta","initialSize","oldSize","newSize","containerClass","childContainer1Style","childContainer2Style","width1","height1","ContentWithDetailsPanel","handleSwitchChange","handleContentHeightChange","onShowDetailsChange","onContentHeightChange","detailsControlPanel","contentChild","detailsChild","detailsSwitch","showDetails","alignSelf","detailsContentPanel","actionComponent","detailsPanel","isSplitPanel","contentHeight","DataSourceLinks","float","margin","CODE_STYLE","fontFamily","Colors","LIGHT_GRAY1","MARKDOWN_COMPONENTS","em","li","span","pre","Markdown","remarkPlugins","remarkGFM","linkTarget","STYLE","ScrollablePanelContent","COVERAGE_PANEL_STYLE","flexWrap","DataSourceDetails","metaInfoKeys","details","renderAbstract","renderVariablesTable","renderMetaInfoTable","renderMetaInfoLicences","renderActiveTabPanelOnly","panel","element","spatialCoverage","temporalCoverage","summary","bbox","x_min","y_min","x_max","y_max","start","end","abstract","rowIndex","long_name","licences","ECV_META","ITEM_STYLE","ID_STYLE","BLUE5","fontSize","WARN_ICON_STYLE","marginRight","DATA_TYPE_STYLE","GREEN4","TEXT_ICON_STYLE","textAlign","DataSourceItem","warnIcon","typeSpec","ecvId","idParts","actualEcvId","mappings","ecvMetaItem","ecvs","colors","dataSourceToTextIconProps","lastSlashPos","SKIPPED_PREFIXES","SKIPPED_SUFFIXES","suffix","dataSourceToTitle","iconSize","DataSourcesList","setSelectedDataSourceId","doubleClickAction","DataSourceOpenHint","manualInterventionNotice","isSandboxedMode","AddDatasetDialog","dataSourceName","onDataSourceNameChange","onFilePathPatternChange","showSelectDirectoryDialog","openDialogOptions","buttonLabel","defaultPath","dirPath","formatDateAsISODateString","date","getTime","getTimezoneOffset","toISOString","formatDataTypeName","fullyQualified","indexColon","indexDot","DEFAULT_DATE_RANGE","DateField","parseDate","formatDate","validateDate","millis","valueOf","defaultProps","DateRangeField","dateStrings","date1","date2","parseDateRange","formatDateRange","validateDateRange","LONG_ID_STYLE","wordWrap","LongIdLabel","longId","NumericField","handleNumericInputChange","validateNumber","isInt","setValueAndTextValue","onValueChange","minorStepSize","selectAllOnFocus","GLOBAL","Region","onEastChange","onSouthChange","onWestChange","onNorthChange","renderField","NUMBER_FIELD_STYLE","TOOLTIP_STYLE","LabelWithType","labelText","dataTypeText","unitsText","VariablesDialog","multiSelect","getVariableItemKey","renderVariableItem","VarNameValueEditor","validate","isDetailsEditorOpen","multi","varNames","validNames","validateVarNamesText","hasSelectableVariables","justifySelf","WARNINGS_PANEL_STYLE","WARNING_ICON","IconNames","WARNING_SIGN","ERROR_ICON","ERROR","ISSUE_ICON","ISSUE","TIME_RANGE_STYLE","DataAccessComponent","onHasTimeConstraintChange","onDateRangeChange","onHasRegionConstraintChange","onRegionChange","onHasVariablesConstraintChange","onVariableNamesChange","onMakeLocalSelectedChange","onMakeLocalDataSourceIdChange","onOpenDatasetResourceNameChange","dateRange","region","hasTimeConstraint","hasRegionConstraint","hasVariablesConstraint","unused","variableNames","isCacheDataSourceSelected","cachedDataSourceId","openDatasetResourceName","minDate","maxDate","cacheConfigPanel","temporalCoverageText","timeConstraintsPanel","SUB_PANEL_STYLE","OPTION_DIV_STYLE","regionConstraintsPanel","res","dataSourceToResource","variablesConstraintPanel","canConstrainVariables","VAR_NAMES_INPUT","canCache","isLocalDataSource","isMakeLocalSelected","messagesPanel","messages","dsVar","types","dataSourceVarToVariable","validTimeConstraint","validRegion","validNorth","validSouth","validVariableNames","validDataSourceId","makeLocalDataSourceId","inputErrors","t0","var_names","force_local","local_ds_id","OPTION_CHECK_STYLE","InputEditor","editor","isValueEditorShown","valueEditor","renderResourceNameEditor","editorSwitch","renderEditorSwitch","LABEL_STYLE","firstResourceOption","otherResourceOptions","isDataTypeCompatible","resourceOptions","RESOURCE_NAME_STYLE","handleChange","interactionKind","PopoverInteractionKind","HOVER","hoverOpenDelay","hoverCloseDelay","TOP","cateTypes","renderTypeInstanceHintText","valueEditorShown","valueEditorDisabled","isValueEditorDisabled","resourceSelectorDisabled","hasCompatibleResources","switchDisabled","alignIndicator","Alignment","EDITOR_SWITCH_STYLE","BooleanValueEditor","indeterminate","ValueSetValueEditor","NULL_VALUE","VALUE_SELECTOR_STYLE","IntegerValueEditor","isValueSetGiven","FloatValueEditor","TextValueEditor","FileValueEditor","showFileDialogCallback","toRelativePath","saveDialogOptions","filters","filePath","canceled","propsSet","WKT_LINK","rel","GeometryDialog","toState","hasError","htmlFor","rows","getHelpText","helpText","GeometryField","validateGeometryText","isEditorOpen","setGeometryWKT","geometryWKTGetter","GeometryValueEditor","TimeRangeValueEditor","valueMinMax","getValueMinMax","DimensionsDialog","dimensions","getDimItemKey","renderDimItem","dimension","DimNameValueEditor","valueDims","validateDimNamesText","hasSelectableDims","TimeValueEditor","LIBS","ScriptDialog","DIALOG_STYLE","theme","showGutter","highlightActiveLine","libText","ScriptField","validateScript","ScriptValueEditor","renderValueEditor","factory","getValueEditorFactory","VALUE_EDITOR_FACTORIES","renderFileValueEditor","renderScriptValueEditor","renderTextValueEditor","findDims","inputAssignment","OperationStepDialog","onConstantValueChange","onResourceNameChange","onValidate","onDefaults","hideValidationDialog","mapPropsToState","inputAssignmentsMap","isEditMode","isNewMode","getInputArguments","getInputErrors","isValidationDialogOpen","inputArguments","inputArgument","hasInputErrors","getInitialInputAssignments","setInputAssignment","dialogTitle","bodyHeaderText","bodyFooterText","parameterPanel","renderParameterPanel","inputEditors","PARAMETER_PANEL_STYLE","NO_STATE","gridTemplateColumns","justifyItems","rowGap","columnGap","operationStep","inputPort","getInputAssignmentsFromOperationStep","lastInputAssignments","forceDefaults","defaultInputAssignment","lastInputAssignment","ValidationDialog","count","inputName","renderInputErrors","countResourceProblems","resourceProblems","introText","problems","footerText","OpenDatasetDialog","onOptionsChange","validateOptions","dsDefault","makeLocalDataSourceTitle","optionsToOperationArguments","cacheSelected","optionsToErrors","defaultOptions","ensureDateRangeIsValidated","RemoveDatasetDialog","onRemoveFilesChange","INTENTS","mapDispatchToProps","setSelectedDataStoreId","setDataSourceFilterExpr","setSessionState","setControlState","updateSessionState","refreshLocalDataStore","showDialog","hideDialog","DataSourcesPanel","handleAddDatasetDialog","handleRemoveDatasetDialog","handleShowOpenDatasetDialog","handleRefreshLocalDataStore","handleListHeightChanged","handleShowDetailsChanged","handleDataStoreSelected","handleShowDataStoreDescriptionChanged","handleShowDataStoreNoticesChanged","handleShowAllDataSourcesChanged","handleShowDataSourceIDsChanged","renderNoDataStoreMessage","hasDataSources","isLocalStore","isNotVerified","canOpen","hasWorkspace","popoverClassName","POPOVER_CONTENT_SIZING","renderDataStoreSelector","FLEX_ROW_STYLE","SPACER_STYLE","renderDataSourceFilterExprInput","filteredDataSources","renderNoDataSourcesMessage","resultsTag","MINIMAL","onRemove","paddingBottom","leftIcon","rightElement","dataStoreOptions","dataStoreDescriptionElement","hasDataStoreDescription","hasDataStoreNotices","notices","callouts","notice","LABEL_TEXT_STYLE","SELECT_STYLE","minWidth","whiteSpace","OP_CARD_STYLE","OperationsPanel","handleOperationSelection","handleOperationFilterExprCleared","handleOperationFilterExprChange","handleAddOperationStepButtonClicked","operationTagFilterPanel","renderOperationTagFilterPanel","operationsList","renderOperationsList","operationDetailsCard","renderOperationDetailsCard","filteredOperations","operationFilterExprInput","canAddStepOperation","selectedOperation","renderNoOperationsMessage","selectedOperationTags","operationsTagCounts","tagStyle","paddingTop","selectedTagItems","tagName","minimal","removeTagName","tagMenuItems","tagCount","addTagName","addTagButton","tagMenu","CLICK","outputElems","getOutputDescriptionText","getMultiplicityText","inputElems","getInputDescriptionText","elevation","formatPortDescriptionText","singularText","pluralText","WebAPIStatusBox","reload","isWaiting","onRetry","DIALOG_P_STYLE","DIALOG_ICON_STYLE","StatusBox","footer","retryButton","ErrorBox","WorkflowStepPropertiesDialog","oldStepId","newStepId","stepId","oldStepPersistent","newStepPersistent","stepPersistent","newStepIdIsValid","WorkspacePanel","handleResourceListHeightChanged","handleShowResourceDetailsChanged","handleResourceNameSelected","handleStepListHeightChanged","handleShowWorkflowStepDetailsChanged","handleWorkflowStepIdSelected","handleShowFigureButtonClicked","handleWorkflowStepPropertiesButtonClicked","handleOpenWorkspaceDirectoryClicked","handleEditOperationStepButtonClicked","renderStepItem","renderResourceAttrName","renderResourceAttrValue","renderOperationStepInputName","renderOperationStepInputValue","renderOperationStepOutputName","renderOperationStepOutputValue","handleWorkspacePanelModeChanged","handleRemoveOperationStepButtonClicked","handleCleanWorkflowButtonClicked","handleShowResourceTableView","handleCopyWorkflowAsPythonScript","handleCopyWorkflowAsShellScript","handleCopyWorkflowAsJSON","getEffectiveResource","convertSteps","getEffectiveResourceName","selectedResourceWorkflowStep","selectedWorkflowStepResource","workflowStep","getEffectiveWorkflowStep","getWorkflowStepLabel","pop","workspaceLabel","AUTO_START","workspaceState","STATE_TAG_STYLE","openItemButton","copyItemButton","selectedTabId","renderWorkflowStepsPanel","renderResourcesPanel","canShowFigure","isOperationStepSelected","hasSteps","canShowTableView","renderWorkspaceActions","renderResourcesList","renderResourceDetails","getResourceItemKey","renderResourceItem","selectedResourceAttributes","renderWorkflowStepsList","renderWorkflowStepDetails","getStepItemKey","selectedWorkflowStepOp","stepInputPanel","renderWorkflowStepPorts","showPopover","TruncatedPopoverMode","WHEN_TRUNCATED","detectTruncation","inputProps","renderWorkflowPortName","renderWorkflowPortValue","outputProps","outputPort","resourcesMap","ports","itemsTitle","noItemsTitle","renderName","renderValue","portProps","port","ALWAYS","cellValue","lines","VariablesPanel","handleSelectedVariableNameChanged","handleShowSelectedVariableLayer","handleAddVariableLayer","handleAddVariableTimeSeriesPlot","handleAddVariableHistogramPlot","handleShowVariableTableView","placemarkName","placemarkPosition","renderVariableActionRow","onSelectedVariableNameChanged","selectedVariableAttributesTableData","isSpatialVariable","hasWorldView","activeViewType","canAddLayer","canAddTimeSeriesPlot","canAddHistogramPlot","VALUE_STYLE","VariablesListPanel","getItemValue","property","handleVariableNameSelection","VariableDetailsPanel","renderAttributeName","renderAttributeValue","LayerSourcesDialog","handleChangedVariableSelection","selectedIndices","layerVariable","DIALOG_TITLE","PlacemarksPanel","handleCopyGeometryAsCsv","sep","geometryGeoJsonToCsv","handleCopyGeometryAsWkt","handleCopyGeometryAsGeoJson","geoJson","handleNewPointToolButtonClicked","handleNewPolygonToolButtonClicked","handleNewPolylineToolButtonClicked","handleNewBoxToolButtonClicked","handleRemovePlacemarkButtonClicked","handleLocatePlacemarkButtonClicked","handleChangedPlacemarkVisibility","handleChangedPlacemarkSelection","handleChangedPlacemarkName","handleChangedPointLongitude","handleChangedPointLatitude","handleCopySelectedPlacemarkAsCsv","handleCopySelectedPlacemarkAsWkt","handleCopySelectedPlacemarkAsGeoJSON","handlePlacemarkDoubleClick","renderPlacemarkItem","nameField","renderActionButtonRow","renderPlacemarksList","renderPlacemarkDetails","isPointToolActive","isPolylineToolActive","isPolygonToolActive","isBoxToolActive","getPlacemarkItemKey","onVisibilityChange","onCopyPlacemarkCsv","onCopyPlacemarkWkt","onCopyPlacemarkGeoJSON","renderPlacemarkTitle","renderPlacemarkGeometry","activeView","PlacemarkItem","placemarkItemRef","createRef","handleVisibilityChanged","handleCopyPlacemarkCsv","handleCopyPlacemarkWkt","handleCopyPlacemarksGeoJSON","rightClickMe","current","menu","Menu","MenuItem","info","toFixed","CHECK_STYLE","ICON_STYLE","NAME_STYLE","INFO_STYLE","ViewPanel","onViewModeChange","onAddWorldView","onShowLayerTextOverlayChange","ACTION_ITEM_STYLE","renderActiveViewPanel","titleField","PROPERTY_ITEM_STYLE","PROPERTY_ITEM_CONTROL_GROUP_STYLE","PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE","marginBlock","TaskComponent","handleShowDetails","isRunning","isMakingProgress","progressValue","total","worked","progressBar","onCancelJob","cancelableProgress","PROGRESS_STYLE","progressMag","detailsButton","renderIcon","onRemoveJob","jobFailure","paddingRight","flexFlow","cancelJob","removeJob","TasksPanel","taskComponents","TermsAndConditions","serviceInfo","uiVersion","apiVersion","VersionTag","StatusBar","globePosition","DIV_MESSAGE_STYLE","DIV_TASKS_STYLE","renderTasks","DIV_CURSOR_STYLE","DIV_TAC_STYLE","DIV_STATUS_STYLE","renderBackendStatus","numRunningTasks","numFailedTasks","render","spinner","tasksInPopover","paddingLeft","LEFT_TOP","DIV_MARGIN","SubPanelHeader","divStyle","titleStyle","SPAN_STYLE","fontWeight","LayersPanel","handleAddLayerButtonClicked","handleRemoveLayerButtonClicked","handleMoveLayerUpButtonClicked","handleMoveLayerDownButtonClicked","handleChangedLayerSelection","handleChangedLayerVisibility","handleChangedLayerSplitMode","handleChangedBaseMap","renderLayerItem","renderBackgroundMapSelector","renderLayersList","renderLayerDetails","LAYER_DIV_STYLE","LAYER_CHECKBOX_STYLE","stopPropagation","LAYER_LABEL_ELEMENT_STYLE","layerCount","selectedLayerIndex","canRemoveLayer","canMoveLayerUp","canMoveLayerDown","BG_MAP_CONTAINER_STYLE","BG_MAP_LABEL_STYLE","BG_MAP_VALUE_STYLE","bgMap","getLayerItemKey","renderDataSelectionSection","renderSplitModeSection","dimensionRows","LABEL_SPAN_STYLE_100","capitalizeFirstLetter","SLIDER_DIV_STYLE_10","stepSize","labelStepSize","handleChangedLayerVarIndex","inline","selectedValue","string","charAt","flexBasis","NumericRangeField","parseNumericPair","DISPLAY_RANGE_STYLE","StylesPanel","handleUpdateDisplayStatistics","handleChangedDisplayMinMax","handleChangedDisplayRange","handleChangedDisplayAlphaBlend","handleChangedColorMapName","handleChangedStyleContext","handleChangedFillColor","handleChangedFillColorFromPicker","handleChangedFillOpacity","handleChangedStrokeWidth","handleChangedStrokeColor","handleChangedStrokeColorFromPicker","handleChangedStrokeOpacity","handleChangedMarkerColor","handleChangedMarkerColorFromPicker","handleChangedMarkerSize","handleChangedMarkerSymbol","renderVectorLayerDetails","renderImageLayerDetails","renderStyleContext","renderFormAlphaBlending","renderFormDisplayMinMax","renderFormDisplayColorBar","renderFormImageEnhancement","selectedResourceVectorLayer","displayMinMax","SLIDER_DIV_STYLE_15","renderDisplayRangeSlider","colorBarButton","popoverContent","renderColorBarBox","renderColorBarButton","labelRenderer","handleChangedImageEnhancement","renderFillColor","renderFillOpacity","renderStrokeWidth","renderStrokeColor","renderStrokeOpacity","renderMarkerColor","renderMarkerSize","renderMarkerSymbol","entityDisplayName","layerDisplayName","LABEL_BOTTOM_MARGIN","lineHeight","vectorStyle","disableAlpha","SLIDER_DIV_STYLE_05","statistics","ORANGE3","fractionDigits","log10","getDisplayFractionDigits","toExponential","formatNumber","buttonContent","renderColorMapImage","cat","colorMap","displayRange","handleChangedVectorStyle","hex","SelectWorkspaceDialog","localWebAPI","isNewDialog","directoryChooser","NewWorkspaceDialog","SaveWorkspaceAsDialog","SYSTEM_LABEL_STYLE","SYSTEM_CONTROL_GROUP_STYLE","SYSTEM_DIV_STYLE","SYSTEM_ITEM_STYLE","PreferencesDialog","preferences","autoUpdateSoftwareChangeDetected","backendChangesDetected","showMessageBox","renderGeneralPanel","renderDataManagementPanel","renderSystemPanel","renderReopenLastWorkspace","renderAutoShowNewFigures","renderDataStoresPath","renderCacheWorkspaceImagery","renderResourceNamePrefix","showProperties","getStateValue","onShowPropertiesChange","getChangeHandler","condensed","bordered","packageName","packageVersion","renderBooleanValue","renderDirectoryPath","renderStringValue","isBackend","initialValue","showOpenDirectoryDialog","setBackendConfig","backendConfigDelta","NAME_CELL_STYLE","NAME_ICON_STYLE","SIZE_CELL_STYLE","ROW_DEFAULT_STYLE","ROW_SELECTED_STYLE","BLUE3","borderColor","DARK_GRAY2","borderStyle","borderWidth","TABLE_STYLE","FileList","multiSelections","openDirectory","onCurrentDirPathChange","onSelectedPathsChange","currentFileNodes","currentFileNodesPath","sort","getCurrentFileNodes","selectedPathSet","getRowFileNode","getRowPath","isRowSelected","fileNode","newSelectedPathSet","clear","handleRowClick","handleRowDoubleClick","renderFileNodeName","renderFileNodeLastModified","renderFileNodeSize","RootNodeLoading","TREE_CONTAINER_STYLE","FileTree","selectedPath","onSelectedPathChange","onExpandedPathsChange","showFiles","treeNodes","includeFiles","_getTreeNodes","fileNodes","idGen","_selectedPath","isSelected","_expandedPaths","isExpanded","childTreeNodes","hasCaret","secondaryLabel","treeNode","nodeData","getTreeNodes","contents","onNodeClick","nodePath","onNodeExpand","onNodeCollapse","FILE_DIALOG_STYLE","FILE_CONTAINER_STYLE","FILE_MGT_ROW_STYLE","FILE_LIST_ROW_STYLE","FILE_INPUT_ROW_STYLE","FILE_INPUT_STYLE","INVALID_FILE_INPUT_STYLE","FILE_NAV_ROW_STYLE","FILE_NAV_BC_STYLE","DARK_GRAY5","FileFilterSelect","Select","ofType","FileDialog","createFileNode","renameFileNode","deleteFileNodes","saveFile","openFile","showHiddenFiles","initSelectedPaths","initExpandedPaths","initSelectedDirPath","initCurrentDirPath","stateUpdate","selectedDirPath","pathState","dispatchPathState","isValid","inputState","dispatchInputState","fileTreeWidth","setFileTreeWidth","selectedFileFilter","setSelectedFileFilter","updateCallback","canNavigateUp","canCreateDirectory","canRename","canDelete","handleSelectedDirChangeInTree","getDefaultFileActionText","pathComponents","dirName","getBreadcrumbs","INPUT","isInputValid","expandedPath","popoverProps","filterable","itemRenderer","fileFilterItemRenderer","onItemSelect","getFileFilterText","itemProps","modifiers","OpenDialog","SaveDialog","propSet","icons","none","INFO_SIGN","question","CONFIRM","warning","MessageBox","checkboxLabel","checkboxChecked","defaultId","cancelId","_checkboxChecked","setCheckboxChecked","hasCheckbox","handleCancel","buttonText","buttonIndex","handleButtonClick","PanelContainer","onTopPanelSelected","onBottomPanelSelected","onTopPanelClose","onBottomPanelClose","onVerSplitterPosChange","onHorSplitterPosChange","panelId","isCurrent","selectedTopPanelId","onSelectedTopPanelChange","selectedBottomPanelId","onSelectedBottomPanelChange","setLayout","onLayoutChange","findPanel","selectedPanel","child","topPanelPane","bottomPanelPane","panelPane","resizablePanelPane","panelBar","PanelBar","panels","toArray","selectedTopPanel","getSelectedTopPanel","selectedBottomPanel","getSelectedBottomPanel","panelPaneWidth","panelPaneHeight","topPanelPaneStyle","renderPanelPane","bottomPanelPaneStyle","renderTwoPanelsPane","renderResizablePanelPane","panelContainerStyle","maxHeight","PanelPane","verSplitter","undockedModeStyle","undockedMode","PANEL_BAR_SIZE","PANEL_UNDOCKED_BACKGROUND_COLOR","resizablePanelPaneStyle","PANEL_PANE_PADDING","horSplitter","PanelHeader","panelIcon","panelTitle","panelCloseIcon","PANEL_ICON_SIZE","PANEL_ICON_PADDING","PANEL_BAR_PADDING","PANEL_BODY_PADDING","PANEL_BAR_ITEM_BASE_STYLE","PANEL_BAR_ITEM_NORMAL_STYLE","GRAY4","PANEL_BAR_ITEM_SELECTED_STYLE","WHITE","TOP_PANEL_BAR_STYLE","listStyleType","BOTTOM_PANEL_BAR_STYLE","CONTAINER_STYLE","PANEL_BUTTON_STYLE","verticalAlign","PANEL_BODY_CONTAINER_STYLE","tooltipPos","renderPanelButton","selectedPanelId","panelPosition","topPanelButtons","bottomPanelButtons","panelBody","panelParentStyle","Panel","ViewManager","viewMap","createViewMap","renderViewSplit","renderViewPanel","renderNoViews","NO_VIEW_CONTAINER_STYLE","noViewsDescription","noViewsAction","noViewsVisual","renderedLayout1","renderedLayout2","layout1","layout2","containerStyle","HOR_SPLIT_CONTAINER_STYLE","VER_SPLIT_CONTAINER_STYLE","onChangeViewSplitPos","viewRenderMap","onSelectView","onCloseView","onCloseAllViews","onMoveView","onSplitViewPanel","boxSizing","contentElement","onSplitHor","onSplitVer","onContentDivRef","renderedViewContent","selectedView","tabItems","viewTitle","viewIconName","tabStyle","closeIconStyle","viewRenderer","TAB_STYLE_SELECTED","TITLE_STYLE_ACTIVE","TITLE_STYLE_SELECTED","CLOSE_ICON_STYLE_SELECTED","TAB_STYLE_NORMAL","TITLE_STYLE_NORMAL","CLOSE_ICON_STYLE_NORMAL","onSelect","iconSpan","splitHorEntry","splitVerEntry","moreMenuEntry","tabs","TABS_STYLE","spacer","menuIconStyle","MENU_ICON_STYLE","moveBeforeMenuItem","moveAfterMenuItem","moveBeforeMenuItems","moveAfterMenuItems","moreMenu","MENU_STYLE","VIEW_HEADER_STYLE","VIEW_BODY_STYLE","SELECTED_BG_COLOR","DARK_GRAY1","TITLE_STYLE_BASE","GRAY5","borderBottomStyle","borderBottomWidth","borderBottomColor","DETAILS_STYLE","MessageDetails","onCopyDetails","setShowDetails","ERROR_MESSAGE_STYLE","wordBreak","JobFailureDialog","handleConfirm","handleCopyReport","copyReport","jobTitle","report","traceback","reporting","messageDiv","iconIntent","FileDownloadDialog","handleOpenFilesOnClose","handleOpenFilesOpen","showFileOpenDialog","VIEW_TYPE_RENDERERS","world","table","ROOT_DIV_STYLE","MAIN_DIV_STYLE","AppMainPage","forceAppBar","fileSystemAPI","appServiceMode","appServiceURL","appServiceHostOS","appServiceVersion","appBar","trackPageView","useMatomo","customDimensions","LeftPanel","CenterPanel","RightPanel","desktopActions","isNativeUI","_LeftPanel","onLeftPanelContainerLayoutChange","onRightPanelContainerLayoutChange","onSelectedLeftTopPanelChange","onSelectedLeftBottomPanelChange","_RightPanel","onSelectedRightTopPanelChange","onSelectedRightBottomPanelChange","_CenterPanel","matomoInstance","setMatomoInstance","instance","createInstance","urlBase","siteId","heartBeat","linkTracking","configurations","disableCookies","setSecureCookie","setRequestMethod","MatomoProvider","CESIUM_BASE_URL","middlewares","thunkMiddleware","middleware","applyMiddleware","store","createStore","connectWebAPIService","search","URLSearchParams","origin","getServiceUrl","ReactDOM","getElementById","main","isInputAssigned","assignConstantValueInput","assignResourceNameInput","UPDATE_INITIAL_STATE","SET_WEBAPI_STATUS","SET_WEBAPI_AUTO_STOP_INFO","SET_WEBAPI_CLIENT","SET_WEBAPI_SERVICE_URL","SET_WEBAPI_SERVICE_INFO","UPDATE_HUB_STATUS","UPDATE_DIALOG_STATE","UPDATE_TASK_STATE","REMOVE_TASK_STATE","UPDATE_CONTROL_STATE","UPDATE_SESSION_STATE","INVOKE_CTX_OPERATION","setWebAPIStatus","setWebAPIClient","setWebAPIServiceURL","getState","handleFetchError","formatMessage","keepAlive","available_time","inactivity_time","remaining_time","keepAliveTimer","callAPI","getBackendConfig","updateBackendConfig","loadColorMaps","loadPreferences","loadDataStores","openWorkspace","newWorkspace","planB","requireDoneNotification","getOperations","UPDATE_OPERATIONS","updateOperations","keepAliveSeconds","closeDetails","reason","wasClean","updateDialogState","updateTaskState","removeTaskState","setControlProperty","updateControlState","invokeCtxOperation","invokeCtxOperationImpl","controlState","savePreferences","postAction","updatePreferences","setSessionProperty","sessionState","storeBackendConfig","showJobFailureDetails","startToastTimeoutHandler","disableNotifications","startToastDelay","jobPromise","jobProgress","startToastShown","setTimeout","jobSubmitted","jobResult","clearTimeout","notificationDisabled","jobFailed","SET_GLOBE_MOUSE_POSITION","SET_GLOBE_VIEW_POSITION","setGlobeMousePosition","setGlobeViewPositionImpl","setGlobeViewPosition","extractPixelValues","updateFsRootNode","force","subPathsToBeUpdated","subPath","subNode","updateSubPathFileNode","subPaths","api","ACTIVATE_NEW_PLACEMARK_TOOL","ADD_PLACEMARK","REMOVE_PLACEMARK","UPDATE_PLACEMARK_GEOMETRY","UPDATE_PLACEMARK_PROPERTIES","UPDATE_PLACEMARK_STYLE","activateNewPlacemarkTool","addPlacemark","addPointPlacemark","removePlacemark","updatePlacemarkStyle","locatePlacemark","headingPitchRange","zoomTo","setSelectedPlacemarkId","UPDATE_DATA_STORES","UPDATE_DATA_SOURCES","UPDATE_DATA_SOURCE_META_INFO","getDataStores","loadDataSources","setSelection","getDataSources","updateDataSources","setSelectedDataStoreIdImpl","updateDataSourceMetaInfo","getDataSourceMetaInfo","loadDataSourceMetaInfo","openDataset","updateLocalDataSources","ds_id","data_store_id","wrappedOpArgs","setWorkspaceResource","addLocalDataset","addLocalDataSource","removeLocalDataset","removeLocalDataSource","setSelectedOperationName","setOperationFilterTags","setOperationFilterExpr","showOperationStepDialog","hideOperationStepDialog","SET_CURRENT_WORKSPACE","UPDATE_WORKSPACE_NAMES","RENAME_RESOURCE","SHOW_FIGURE_VIEW","SHOW_ANIMATION_VIEW","SHOW_TABLE_VIEW","updateWorkspaceNames","workspacePath","setCurrentWorkspace","saveWorkspace","setSelectedWorkspaceResourceName","saveWorkspaceAs","deleteWorkspace","openLocalWorkspace","showSingleFileOpenDialog","maybeSaveCurrentWorkspace","listWorkspaces","openRemoteWorkspace","deleteRemoteWorkspace","closeWorkspace","cleanWorkspaceInteractive","answer","cleanWorkspace","deleteResourceInteractive","deleteWorkspaceResource","deleteResource","setCurrentWorkspaceImpl","setSelectedWorkspaceResourceNameImpl","isDefault","setSelectedVariable","setSelectedWorkflowStepId","setSelectedWorkflowStepIdImpl","isFigure","isAnimation","showFigureView","showAnimationView","setWorkspaceResourcePersistence","renameWorkspaceResource","renameWorkspaceResourceImpl","getWorkspaceVariableStatistics","showTableView","saveFigureImageAs","imageUrl","shell","openExternal","SET_SHOW_SELECTED_VARIABLE_LAYER","SET_SELECTED_VARIABLE","setShowSelectedVariableLayer","addVariableLayer","ADD_LAYER","setLeftPanelContainerLayout","setRightPanelContainerLayout","setSelectedLeftTopPanelId","setSelectedLeftBottomPanelId","setSelectedRightTopPanelId","setSelectedRightBottomPanelId","ADD_WORLD_VIEW","ADD_TABLE_VIEW","SELECT_VIEW","CLOSE_VIEW","SPLIT_VIEW_PANEL","CHANGE_VIEW_SPLIT_POS","MOVE_VIEW","addWorldView","closeView","closeAllViews","SET_VIEW_MODE","SET_PROJECTION_CODE","SET_LAYER_SPLIT_MODE","SET_LAYER_SPLIT_POSITION","SET_SELECTED_ENTITY_ID","INC_ENTITY_UPDATE_COUNT","UPDATE_ENTITY_STYLE","UPDATE_MOUSE_IDLE_STATE","setViewMode","setLayerSplitMode","setLayerSplitPosition","notifySelectedEntityChange","setSelectedEntityId","updateEntityStyle","updateEntityStyleImpl","UPDATE_TABLE_VIEW_DATA","updateTableViewData","loadTableViewData","restUrl","csvUrl","d3","UPDATE_ANIMATION_VIEW_DATA","loadAnimationViewData","htmlUrl","xmlHttp","XMLHttpRequest","onreadystatechange","setAnimationResult","responseText","SET_SELECTED_LAYER_ID","REMOVE_LAYER","UPDATE_LAYER","UPDATE_LAYER_STYLE","MOVE_LAYER_UP","MOVE_LAYER_DOWN","SAVE_LAYER","SET_BASE_MAP_ID","setSelectedLayerId","moveLayerUp","moveLayerDown","updateLayer","layerProperties","updateLayerImpl","saveLayer","updateLayerStyle","setStyleContext","setBaseMap","UPDATE_COLOR_MAPS","getColorMaps","updateColorMaps","showPreferencesDialog","hidePreferencesDialog","showShutdownDialog","OPEN_DIRECTORY_SELECT_DIALOG","CLOSE_DIRECTORY_SELECT_DIALOG","closeDirectorySelectDialog","openDirectorySelectDialog","OPEN_FILE_OPEN_DIALOG","CLOSE_FILE_OPEN_DIALOG","closeFileOpenDialog","openFileOpenDialog","OPEN_FILE_SAVE_DIALOG","CLOSE_FILE_SAVE_DIALOG","showFileSaveDialog","closeFileSaveDialog","openFileSaveDialog","OPEN_MESSAGE_BOX","CLOSE_MESSAGE_BOX","messageBoxOptions","closeMessageBox","openMessageBox","OPEN_FILE_BROWSE_DIALOG","CLOSE_FILE_BROWSE_DIALOG","showItemInFolder","fullPath","copyTextToClipboard","hasElectron","clipboard","writeText","copyToClipboard","uploadFiles","downloadFiles","functionName","_handlersInstalled","installGlobalHandlers","on","initialState","updateInitialState","dataTransfer","readDroppedFile","dropWorkspaceResource","newDesktopActions","once","actionName","openItem","onCopy"],"mappings":"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","file":"static/js/main.52d53f34.chunk.js","sourcesContent":["import { SessionState } from \"./state\";\nimport { JobPromise, WebAPIClient } from \"./webapi\";\n\n\n/**\n * This interface provides access to a particular domain's session or local storage.\n * It allows, for example, the addition, modification, or deletion of stored data items.\n */\nexport class RemoteStorageAPI {\n private readonly webAPIClient: WebAPIClient;\n\n constructor(webAPIClient: WebAPIClient) {\n this.webAPIClient = webAPIClient;\n }\n\n loadPreferences(): JobPromise<Partial<SessionState>> {\n return this.webAPIClient.call('get_preferences', []);\n }\n\n updatePreferences(session: Partial<SessionState>): JobPromise<Partial<SessionState>> {\n return this.webAPIClient.call('set_preferences', [session]);\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { HttpError } from '../HttpError';\n\nexport type QueryComponent = [string, string];\n\nexport function makeUrl(url: string, queryComponents?: QueryComponent[]) {\n if (queryComponents && queryComponents.length > 0) {\n const queryString = queryComponents.map(kv => kv.map(encodeURIComponent).join('=')).join('&');\n url += '?' + queryString;\n }\n return url;\n}\n\nexport function callApi(endpointUrl: string, queryComponents?: QueryComponent[], init?: RequestInit): Promise<Response> {\n const url = makeUrl(endpointUrl, queryComponents);\n\n console.debug('Calling API: ', url);\n\n return fetch(url, init)\n .then(response => {\n if (!response.ok) {\n console.log(response);\n throw new HttpError(response.status, response.statusText);\n }\n return response;\n })\n .catch(error => {\n throw error;\n });\n}\n\n\nfunction download(blob: Blob, fileName?: string) {\n if (!fileName) {\n const suffix = uuidv4();\n fileName = 'cate_' + suffix + '.zip';\n }\n const objectUrl: string = URL.createObjectURL(blob);\n const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;\n\n a.href = objectUrl;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n\n document.body.removeChild(a);\n URL.revokeObjectURL(objectUrl);\n}\n\n\nexport function callBlobApi(endpointUrl: string, queryComponents?: QueryComponent[], init?: RequestInit, fileName?: string)\n : Promise<Blob> {\n return callApi(endpointUrl, queryComponents, init).then(response => response.blob())\n .then((blob: Blob) => {\n download(blob, fileName);\n\n return blob;\n });\n}\n\n\nexport function callJsonApi<T>(endpointUrl: string, queryComponents?: QueryComponent[], init?: RequestInit): Promise<T> {\n return callApi(endpointUrl, queryComponents, init).then(response => response.json());\n}","import { callBlobApi, callJsonApi } from \"./callHttpApi\";\nimport { WebAPIClient } from \"../WebAPIClient\";\nimport { JobProgress, JobPromise } from \"../Job\";\n\n\ninterface ResponseStatus {\n status: 'info' | 'success' | 'notification' | 'warning' | 'error';\n message?: string;\n}\n\n\nexport interface ProcessState {\n process_id: string;\n}\n\nexport class FilesAPI {\n private readonly webAPIClient: WebAPIClient;\n\n constructor(webAPIClient: WebAPIClient) {\n this.webAPIClient = webAPIClient;\n }\n\n monitorProcess(processId: string,\n onProgress: (progress: JobProgress) => void): JobPromise<void> {\n return this.webAPIClient.call('monitor_download_files',\n [processId],\n onProgress,\n () => {\n });\n }\n\n registerProcess(serviceUrl: string) {\n return callJsonApi<ProcessState>(\n serviceUrl + '/files/download',\n undefined,\n {\n mode: 'cors',\n method: 'PUT',\n body: JSON.stringify({}),\n });\n }\n\n uploadFiles(dir: string, file: File, serviceUrl: string) {\n let formData = new FormData();\n\n formData.append('dir', dir);\n formData.append('files', file, file.name);\n\n return callJsonApi<ResponseStatus>(serviceUrl + '/files/upload',\n undefined,\n {\n mode: 'cors',\n method: 'POST',\n body: formData,\n });\n }\n\n downloadFiles(filePaths: string[], processId: string, serviceUrl: string) {\n const target_files = {'target_files': filePaths, 'process_id': processId};\n\n return callBlobApi(serviceUrl + '/files/download',\n undefined,\n {\n mode: 'cors',\n method: 'POST',\n body: JSON.stringify(target_files)\n }\n );\n }\n}\n","import { createSelector, Selector } from 'reselect';\nimport * as Cesium from 'cesium';\n\nimport { requireElectron } from './electron';\nimport {\n canOpenDataSource,\n canCacheDataSource,\n canMapDataSource,\n canConstrainDataSourceRegion,\n canConstrainDataSourceTime,\n canConstrainDataSourceVariables,\n DEFAULT_BASE_MAP,\n DEFAULT_BASE_MAP_ID, getWorkspaceId,\n} from './state-util';\nimport {\n BaseMapState,\n ColorMapCategoryState,\n ColorMapState,\n DataSourceState,\n DataStoreState,\n DialogState,\n FigureViewDataState,\n GeographicPosition,\n ImageLayerState,\n LayerState,\n LayerVariableState,\n OperationState,\n Placemark,\n PlacemarkCollection,\n ResourceState,\n ResourceVectorLayerState,\n SavedLayers,\n State,\n STYLE_CONTEXT_ENTITY,\n STYLE_CONTEXT_LAYER,\n VariableImageLayerState,\n VariableLayerBase,\n VariableState,\n VectorLayerState, \n WebAPIServiceInfo, \n WebAPIStatus,\n WorkflowStepState,\n WorkspaceState,\n WorldViewDataState\n} from './state';\nimport { JobStatusEnum, WebAPIClient } from './webapi';\nimport { BackendConfigAPI, ColorMapsAPI, DatasetAPI, OperationAPI, WorkspaceAPI, FileSystemAPI } from './webapi';\nimport { PanelContainerLayout } from './components/PanelContainer';\nimport {\n EXTERNAL_OBJECT_STORE,\n findOperation,\n getLockForGetWorkspaceVariableStatistics,\n getWorldViewSelectedEntity,\n getWorldViewSelectedGeometryWKTGetter,\n getWorldViewVectorLayerForEntity,\n getWorldViewViewer,\n isAnimationResource,\n isFigureResource,\n isSpatialImageVariable,\n isSpatialVectorVariable,\n} from './state-util';\nimport { ViewLayoutState, ViewState } from './components/ViewState';\nimport { isNumber } from '../common/types';\nimport { GeometryWKTGetter } from './containers/editor/ValueEditor';\nimport { BaseMapOptions, entityToSimpleStyle } from './components/cesium/cesium-util';\nimport { SIMPLE_STYLE_DEFAULTS, SimpleStyle, simpleStyleFromFeatureProperties } from '../common/geojson-simple-style';\nimport { GeometryToolType } from './components/cesium/geometry-tool';\nimport { RemoteStorageAPI } from \"./remoteStorageAPI\";\nimport { FilesAPI } from \"./webapi/apis/FilesApi\";\n\n\nconst electron = requireElectron();\n\nexport const EMPTY_OBJECT = {};\nexport const EMPTY_ARRAY = [];\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Application selectors\n\nexport const offlineModeSelector = (state: State): boolean => state.session.offlineMode;\n\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Remote API selectors\n\nexport const webAPIServiceInfoSelector = (state: State): WebAPIServiceInfo | null => state.communication.webAPIServiceInfo;\nexport const webAPIStatusSelector = (state: State): WebAPIStatus | null => state.communication.webAPIStatus;\nexport const webAPIClientSelector = (state: State): WebAPIClient | null => state.communication.webAPIClient;\nexport const webAPIServiceURLSelector = (state: State): string => state.communication.webAPIServiceURL;\n\nexport const isLocalFSAccessAllowedSelector = (state: State): boolean => {\n // Note that once we have ChooseWorkspaceDialog and SelectWorkspaceDialog with directory choosers,\n // we can get rid of the electron requirement here.\n return !!electron\n && !!electron.ipcRenderer\n && !!state.communication.webAPIServiceInfo\n && !state.communication.webAPIServiceInfo.userRootMode;\n};\n\nexport const webAPIRestUrlSelector = createSelector(\n webAPIServiceURLSelector,\n (webAPIServiceURL: string) => {\n return getRestUrl(webAPIServiceURL);\n }\n);\n\nexport const apiWebSocketsUrlSelector = createSelector(\n webAPIServiceURLSelector,\n (webAPIServiceURL: string) => {\n return getAPIWebSocketsUrl(webAPIServiceURL);\n }\n);\n\nexport const mplWebSocketUrlSelector = createSelector(\n webAPIServiceURLSelector,\n (webAPIServiceURL: string) => {\n return getMPLWebSocketsUrl(webAPIServiceURL);\n }\n);\n\nfunction getRestUrl(webAPIServiceURL: string): string {\n return makeURL(webAPIServiceURL, false, '/');\n}\n\nfunction getAPIWebSocketsUrl(webAPIServiceURL: string): string {\n return makeURL(webAPIServiceURL, true, 'api');\n}\n\nfunction getMPLWebSocketsUrl(webAPIServiceURL: string): string {\n return makeURL(webAPIServiceURL, true, 'mpl/figures/');\n}\n\nfunction makeURL(url: string, ws: boolean, path: string): string {\n // console.log(`>> makeUrl: [${url}] [${ws}] [${path}]`);\n const _url = new URL(url);\n const protocol = ws ? (_url.protocol === 'https:' ? 'wss:' : 'ws:') : _url.protocol;\n const pathname = _url.pathname;\n let newUrl = `${protocol}//${_url.host}`;\n if (pathname && pathname !== '/') {\n newUrl += pathname\n }\n if (path) {\n if (!(path.startsWith('/') || newUrl.endsWith('/'))) {\n newUrl += '/';\n }\n newUrl += path\n }\n // console.log(`<< makeUrl: [${newUrl}]`);\n return newUrl;\n}\n\nexport const backendConfigAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new BackendConfigAPI(webAPIClient);\n }\n);\n\n\nexport const datasetAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new DatasetAPI(webAPIClient);\n }\n);\n\nexport const operationAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new OperationAPI(webAPIClient);\n }\n);\n\n\nexport const workspaceAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new WorkspaceAPI(webAPIClient);\n }\n);\n\n\nexport const remoteStorageAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new RemoteStorageAPI(webAPIClient);\n }\n);\n\n\nexport const colorMapsAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new ColorMapsAPI(webAPIClient);\n }\n);\n\nexport const fileSystemAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return webAPIClient !== null ? new FileSystemAPI(webAPIClient) : null;\n }\n);\n\nexport const activeRequestLocksSelector = (state: State): Set<string> => {\n const activeRequestLocks = new Set<string>();\n for (let jobId in state.communication.tasks) {\n const task = state.communication.tasks[jobId];\n if (task.status === JobStatusEnum.NEW ||\n task.status === JobStatusEnum.SUBMITTED ||\n task.status === JobStatusEnum.IN_PROGRESS) {\n activeRequestLocks.add(task.requestLock);\n }\n }\n return activeRequestLocks;\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Dialog state selectors\n\nconst DIALOG_STATE_SELECTORS: { [dialogId: string]: Selector<State, DialogState> } = {};\n\nexport const dialogStatesSelector = (state: State): { [dialogId: string]: DialogState } => state.control.dialogs;\n\nexport const dialogStateSelector = (dialogId: string) => {\n if (!DIALOG_STATE_SELECTORS[dialogId]) {\n DIALOG_STATE_SELECTORS[dialogId] = createSelector<State, DialogState, { [dialogId: string]: DialogState }>(\n dialogStatesSelector,\n (dialogStates: { [dialogId: string]: DialogState }) => dialogStates[dialogId] || EMPTY_OBJECT\n );\n }\n return DIALOG_STATE_SELECTORS[dialogId];\n};\n\nexport const isDialogOpenSelector = createSelector(\n dialogStatesSelector,\n (dialogStates: { [dialogId: string]: DialogState }) => {\n return Object.getOwnPropertyNames(dialogStates).some(dialogId => dialogStates[dialogId].isOpen);\n }\n);\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// AppMainPage layout selectors\n\nexport const panelContainerUndockedModeSelector = (state: State): boolean => state.session.panelContainerUndockedMode;\n\nexport const leftPanelContainerLayoutSelector = (state: State): PanelContainerLayout => state.session.leftPanelContainerLayout;\nexport const rightPanelContainerLayoutSelector = (state: State): PanelContainerLayout => state.session.rightPanelContainerLayout;\n\nexport const selectedLeftTopPanelIdSelector = (state: State): string | null => state.session.selectedLeftTopPanelId;\nexport const selectedLeftBottomPanelIdSelector = (state: State): string\n | null => state.session.selectedLeftBottomPanelId;\nexport const selectedRightTopPanelIdSelector = (state: State): string | null => state.session.selectedRightTopPanelId;\nexport const selectedRightBottomPanelIdSelector = (state: State): string\n | null => state.session.selectedRightBottomPanelId;\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Placemark selectors\n\nexport const newPlacemarkToolTypeSelector = (state: State): GeometryToolType => state.control.newPlacemarkToolType;\nexport const placemarkCollectionSelector = (state: State): PlacemarkCollection => state.session.placemarkCollection;\nexport const placemarksSelector = (state: State): Placemark[] => state.session.placemarkCollection.features;\nexport const selectedPlacemarkIdSelector = (state: State): string | null => state.session.selectedPlacemarkId;\nexport const showPlacemarkDetailsSelector = (state: State): boolean => state.session.showPlacemarkDetails;\nexport const defaultPlacemarkStyleSelector = (state: State): SimpleStyle => state.session.defaultPlacemarkStyle;\n\nexport const selectedPlacemarkSelector = createSelector<State,\n Placemark | null,\n Placemark[],\n string | null>(\n placemarksSelector,\n selectedPlacemarkIdSelector,\n (placemarks: Placemark[], selectedPlacemarkId: string | null) => {\n if (canFind(placemarks, selectedPlacemarkId)) {\n return placemarks.find(placemark => placemark.id === selectedPlacemarkId);\n }\n return null;\n }\n);\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Location selectors\n\nexport const globeMousePositionSelector = (state: State): GeographicPosition | null => state.location.globeMousePosition;\nexport const globeViewPositionSelector = (state: State): GeographicPosition | null => state.location.globeViewPosition;\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Operation selectors\n\nexport const operationsSelector = (state: State): OperationState[] | null => state.data.operations;\nexport const operationFilterTagsSelector = (state: State): string[] | null => state.session.operationFilterTags;\nexport const operationFilterExprSelector = (state: State): string | null => state.session.operationFilterExpr;\nexport const selectedOperationNameSelector = (state: State): string | null => state.session.selectedOperationName;\nexport const selectedCtxOperationNameSelector = (state: State): string | null => state.control.selectedCtxOperationName;\n\nexport const selectedOperationSelector = createSelector<State, OperationState | null, OperationState[] | null,\n string | null>(\n operationsSelector,\n selectedOperationNameSelector,\n (operations, selectedOperationName) => {\n if (operations && operations.length && selectedOperationName) {\n return operations.find(op => op.name === selectedOperationName);\n }\n return null;\n }\n);\n\nexport const selectedCtxOperationSelector = createSelector<State, OperationState | null, OperationState[] | null,\n string | null>(\n operationsSelector,\n selectedCtxOperationNameSelector,\n (operations, selectedOperationName) => {\n if (operations && operations.length && selectedOperationName) {\n return operations.find(op => op.name === selectedOperationName);\n }\n return null;\n }\n);\n\nexport const filteredOperationsSelector = createSelector<State, OperationState[], OperationState[] | null,\n string[]\n | null, string | null>(\n operationsSelector,\n operationFilterTagsSelector,\n operationFilterExprSelector,\n (operations, operationFilterTags, operationFilterExpr) => {\n const hasOperations = operations && operations.length;\n const hasFilterExpr = operationFilterExpr && operationFilterExpr !== '';\n const hasFilterTags = operationFilterTags && operationFilterTags.length;\n if (hasOperations && (hasFilterExpr || hasFilterTags)) {\n let nameMatches;\n if (hasFilterExpr) {\n const filterExprLC = operationFilterExpr.toLowerCase();\n const parts = filterExprLC.split(' ');\n nameMatches = op => {\n return parts.every(part => op.name.toLowerCase().includes(part));\n };\n } else {\n // noinspection JSUnusedLocalSymbols\n nameMatches = op => true;\n }\n let hasTag;\n if (hasFilterTags) {\n hasTag = op => !operationFilterTags.length || operationFilterTags.every(tag => new Set(op.tags).has(tag));\n } else {\n // noinspection JSUnusedLocalSymbols\n hasTag = op => true;\n }\n return operations.filter(op => nameMatches(op) && hasTag(op));\n }\n return operations || EMPTY_ARRAY;\n }\n);\n\nexport const operationsTagCountsSelector = createSelector<State, Map<string, number>, OperationState[] | null>(\n operationsSelector,\n (operations) => {\n let tagCounts = new Map<string, number>();\n (operations || EMPTY_ARRAY).forEach((op: OperationState) => (op.tags || EMPTY_ARRAY).forEach((tag: string) => {\n tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);\n }));\n return tagCounts;\n }\n);\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Data store and data source selectors\n\nexport const dataStoresSelector = (state: State) => state.data.dataStores;\nexport const selectedDataStoreIdSelector = (state: State) => state.session.selectedDataStoreId;\nexport const selectedDataSourceIdSelector = (state: State) => state.session.selectedDataSourceId;\nexport const dataSourceFilterExprSelector = (state: State) => state.session.dataSourceFilterExpr;\nexport const dataSourceListHeightSelector = (state: State) => state.session.dataSourceListHeight;\nexport const showDataSourceDetailsSelector = (state: State) => state.session.showDataSourceDetails;\nexport const showAllDataSourcesSelector = (state: State): boolean => state.session.showAllDataSources;\nexport const showDataSourceIDsSelector = (state: State): boolean => state.session.showDataSourceIDs;\nexport const showDataStoreDescriptionSelector = (state: State): boolean => state.session.showDataStoreDescription;\nexport const showDataStoreNoticesSelector = (state: State): boolean => state.session.showDataStoreNotices;\n\nexport const selectedDataStoreSelector = createSelector<State, DataStoreState | null,\n DataStoreState[] | null,\n string | null>(\n dataStoresSelector,\n selectedDataStoreIdSelector,\n (dataStores, selectedDataStoreId) => {\n if (canFind(dataStores, selectedDataStoreId)) {\n return dataStores.find(dataStore => dataStore.id === selectedDataStoreId);\n }\n return null;\n }\n);\n\nexport const selectedDataSourcesSelector = createSelector<State, DataSourceState[] | null,\n DataStoreState | null>(\n selectedDataStoreSelector,\n (selectedDataStore) => {\n return (selectedDataStore && selectedDataStore.dataSources) || null;\n }\n);\n\nexport const filteredDataSourcesSelector = createSelector<State, DataSourceState[] | null,\n DataSourceState[] | null,\n string | null,\n boolean>(\n selectedDataSourcesSelector,\n dataSourceFilterExprSelector,\n showAllDataSourcesSelector,\n (selectedDataSources, dataSourceFilterExpr, showAllDataSources) => {\n const hasDataSources = selectedDataSources && selectedDataSources.length;\n const hasFilterExpr = dataSourceFilterExpr && dataSourceFilterExpr !== '';\n if (hasDataSources && (hasFilterExpr || !showAllDataSources)) {\n const dataSourceFilterExprLC = dataSourceFilterExpr.toLowerCase();\n const parts = dataSourceFilterExprLC.split(' ');\n return selectedDataSources.filter(ds => matchesIdOrTitle(ds, showAllDataSources, parts));\n }\n return selectedDataSources;\n }\n);\n\nfunction matchesIdOrTitle(ds: DataSourceState, showAllDataSources: boolean, searchWords: string[]) {\n let isCandidate = showAllDataSources || canOpenDataSource(ds);\n if (!isCandidate) {\n return false;\n }\n const id = ds.id.toLowerCase();\n if (searchWords.every(word => id.includes(word))) {\n return true;\n }\n let title = ds.title || (ds.metaInfo ? ds.metaInfo.title : null);\n if (!title || title === '') {\n return false;\n }\n title = title.toLowerCase();\n return searchWords.every(word => title.includes(word));\n}\n\nexport const selectedDataSourceSelector = createSelector<State, DataSourceState | null, DataSourceState[] | null,\n string\n | null>(\n selectedDataSourcesSelector,\n selectedDataSourceIdSelector,\n (selectedDataSources, selectedDataSourceId) => {\n if (canFind(selectedDataSources, selectedDataSourceId)) {\n return selectedDataSources.find(dataSource => dataSource.id === selectedDataSourceId);\n }\n return null;\n }\n);\n\nexport const selectedDataSourceTemporalCoverageSelector = createSelector<State,\n [string | null, string | null] | null,\n DataSourceState\n | null>(\n selectedDataSourceSelector,\n (selectedDataSource: DataSourceState): [string | null, string | null] | null => {\n return (selectedDataSource\n && selectedDataSource.metaInfo\n && selectedDataSource.metaInfo.time_range) || null;\n }\n);\n\nexport const canCacheDataSourceSelector = createSelector<State, boolean, string | null, DataSourceState | null>(\n selectedDataStoreIdSelector,\n selectedDataSourceSelector,\n (selectedDataStoreId, selectedDataSource): boolean => {\n if (selectedDataStoreId === null\n || selectedDataStoreId === 'local'\n || selectedDataStoreId === 'cci-zarr-store') {\n return false;\n }\n return selectedDataSource ? canCacheDataSource(selectedDataSource) : false;\n }\n);\n\nexport const canMapDataSourceSelector = createSelector<State, boolean, DataSourceState | null>(\n selectedDataSourceSelector,\n (selectedDataSource: DataSourceState | null): boolean => {\n return selectedDataSource ? canMapDataSource(selectedDataSource) : false;\n }\n);\n\nexport const canConstrainDataSourceTimeSelector = createSelector<State, boolean, DataSourceState | null>(\n selectedDataSourceSelector,\n (selectedDataSource: DataSourceState | null): boolean => {\n return selectedDataSource && canConstrainDataSourceTime(selectedDataSource);\n }\n);\n\nexport const canConstrainDataSourceRegionSelector = createSelector<State, boolean, DataSourceState | null>(\n selectedDataSourceSelector,\n (selectedDataSource: DataSourceState | null): boolean => {\n return selectedDataSource && canConstrainDataSourceRegion(selectedDataSource);\n }\n);\n\nexport const canConstrainDataSourceVariablesSelector = createSelector<State, boolean, DataSourceState | null>(\n selectedDataSourceSelector,\n (selectedDataSource: DataSourceState | null): boolean => {\n return selectedDataSource && canConstrainDataSourceVariables(selectedDataSource);\n }\n);\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Workspace, resource, step, and variable selectors\n\nexport const workspaceSelector = (state: State): WorkspaceState | null => {\n return state.data.workspace;\n};\nexport const isScratchWorkspaceSelector = (state: State): boolean => {\n return state.data.workspace && state.data.workspace.isScratch;\n};\nexport const workspaceBaseDirSelector = (state: State): string | null => {\n return state.data.workspace && state.data.workspace.baseDir;\n};\nexport const resourcesSelector = (state: State): ResourceState[] => {\n return state.data.workspace ? state.data.workspace.resources : EMPTY_ARRAY;\n};\nexport const workflowStepsSelector = (state: State): WorkflowStepState[] => {\n return state.data.workspace ? state.data.workspace.workflow.steps : EMPTY_ARRAY;\n};\nexport const lastWorkspacePathSelector = (state: State): string | null => {\n return state.session.lastWorkspacePath;\n};\nexport const resourceListHeightSelector = (state: State): number => {\n return state.session.resourceListHeight;\n};\nexport const showResourceDetailsSelector = (state: State): boolean => {\n return state.session.showResourceDetails;\n};\nexport const selectedResourceNameSelector = (state: State): string | null => {\n return state.control.selectedWorkspaceResourceName;\n};\nexport const workflowStepListHeightSelector = (state: State): number => {\n return state.session.workflowStepListHeight;\n};\nexport const showWorkflowStepDetailsSelector = (state: State): boolean => {\n return state.session.showWorkflowStepDetails;\n};\nexport const selectedWorkflowStepIdSelector = (state: State): string | null => {\n return state.control.selectedWorkflowStepId || selectedResourceNameSelector(state);\n};\nexport const selectedVariableNameSelector = (state: State): string | null => {\n return state.control.selectedVariableName;\n};\n\nexport const workspaceIdSelector = createSelector<State, string | null, WorkspaceState | null>(\n workspaceSelector,\n (workspace: WorkspaceState | null) => {\n return workspace !== null ? getWorkspaceId(workspace) : null;\n }\n);\n\nexport const workspaceNameSelector = createSelector<State, string | null, string | null>(\n workspaceBaseDirSelector,\n (baseDir: string | null) => {\n return getFileName(baseDir);\n }\n);\n\nexport const workspaceDirSelector = createSelector<State, string | null, string | null>(\n workspaceBaseDirSelector,\n (baseDir: string | null) => {\n return getParentDir(baseDir);\n }\n);\n\nexport const lastWorkspaceDirSelector = createSelector<State, string | null, string | null>(\n lastWorkspacePathSelector,\n (baseDir: string | null) => {\n return getParentDir(baseDir);\n }\n);\n\nfunction getFileName(path: string | null): string | null {\n if (!path) {\n return null;\n }\n let index = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n return index >= 0 ? path.substring(index + 1) : path;\n}\n\nfunction getParentDir(path: string | null): string | null {\n if (!path) {\n return null;\n }\n let index = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n return index >= 0 ? path.substring(0, index) : '';\n}\n\nexport const resourceNamesSelector = createSelector<State, string[], ResourceState[]>(\n resourcesSelector,\n (resources: ResourceState[]) => {\n return resources.map(r => r.name)\n }\n);\n\nexport const resourceMapSelector = createSelector<State, { [name: string]: ResourceState }, ResourceState[]>(\n resourcesSelector,\n (resources: ResourceState[]) => {\n const resourceMap = {};\n resources.forEach((resource => {\n resourceMap[resource.name] = resource;\n }));\n return resourceMap;\n }\n);\n\nexport const selectedResourceSelector = createSelector<State, ResourceState | null, ResourceState[], string>(\n resourcesSelector,\n selectedResourceNameSelector,\n (resources: ResourceState[], selectedResourceName: string) => {\n if (canFind(resources, selectedResourceName)) {\n return resources.find(r => r.name === selectedResourceName);\n }\n return null;\n }\n);\n\nexport const selectedResourceAttributesSelector = createSelector<State, string[][], ResourceState | null>(\n selectedResourceSelector,\n (selectedResource: ResourceState | null) => {\n if (!selectedResource || !selectedResource.attributes) {\n return EMPTY_ARRAY;\n }\n const array = [];\n const attributes = selectedResource.attributes;\n for (let attrName in attributes) {\n if (attributes.hasOwnProperty(attrName)) {\n array.push([attrName, attributes[attrName]])\n }\n }\n return array;\n }\n);\n\nexport const selectedWorkflowStepResourceSelector = createSelector<State, ResourceState | null, ResourceState[], string>(\n resourcesSelector,\n selectedWorkflowStepIdSelector,\n (resources: ResourceState[], selectedWorkflowStepId: string) => {\n if (canFind(resources, selectedWorkflowStepId)) {\n return resources.find(r => r.name === selectedWorkflowStepId);\n }\n return null;\n }\n);\n\nexport const selectedWorkflowStepSelector = createSelector<State,\n WorkflowStepState | null,\n WorkflowStepState[],\n string>(\n workflowStepsSelector,\n selectedWorkflowStepIdSelector,\n (workflowSteps: WorkflowStepState[], selectedWorkflowStepId: string) => {\n if (canFind(workflowSteps, selectedWorkflowStepId)) {\n return workflowSteps.find(r => r.id === selectedWorkflowStepId);\n }\n return null;\n }\n);\n\nexport const selectedResourceWorkflowStepSelector = createSelector<State,\n WorkflowStepState | null,\n WorkflowStepState[],\n string>(\n workflowStepsSelector,\n selectedResourceNameSelector,\n (workflowSteps: WorkflowStepState[], selectedResourceName: string) => {\n if (canFind(workflowSteps, selectedResourceName)) {\n return workflowSteps.find(r => r.id === selectedResourceName);\n }\n return null;\n }\n);\n\nexport const selectedWorkflowStepOpSelector = createSelector<State, OperationState | null, OperationState[] | null,\n WorkflowStepState\n | null>(\n operationsSelector,\n selectedWorkflowStepSelector,\n (operations: OperationState[] | null, selectedWorkflowStep: WorkflowStepState | null) => {\n if (operations && selectedWorkflowStep && selectedWorkflowStep.op) {\n return findOperation(operations, selectedWorkflowStep.op);\n }\n return null;\n }\n);\n\nexport const figureResourcesSelector = createSelector<State, ResourceState[], ResourceState[]>(\n resourcesSelector,\n (resources: ResourceState[]) => {\n return resources.filter(r => isFigureResource(r))\n }\n);\n\nexport const selectedFigureResourceSelector = createSelector<State, ResourceState | null, ResourceState | null>(\n selectedResourceSelector,\n (resource: ResourceState | null) => {\n return resource && isFigureResource(resource) ? resource : null;\n }\n);\n\nexport const animationResourcesSelector = createSelector<State, ResourceState[], ResourceState[]>(\n resourcesSelector,\n (resources: ResourceState[]) => {\n return resources.filter(r => isAnimationResource(r))\n }\n);\n\nexport const variablesSelector = createSelector<State, VariableState[] | null, ResourceState | null>(\n selectedResourceSelector,\n (selectedResource: ResourceState | null) => {\n return selectedResource ? (selectedResource.variables || null) : null;\n }\n);\n\n\nexport const selectedVariableSelector = createSelector<State, VariableState | null, VariableState[] | null,\n string\n | null>(\n variablesSelector,\n selectedVariableNameSelector,\n (selectedVariables: VariableState[] | null, selectedVariableName: string | null) => {\n if (canFind(selectedVariables, selectedVariableName)) {\n return (selectedVariables || EMPTY_ARRAY).find(v => v.name === selectedVariableName);\n }\n return null;\n }\n);\n\nexport const selectedVariableAttributesTableDataSelector = createSelector<State, [string, any][] | null, VariableState | null>(\n selectedVariableSelector,\n (selectedVariable: VariableState | null) => {\n if (!selectedVariable) {\n return null;\n }\n const tableData: [string, any][] = [\n ['Data type', selectedVariable.dataType],\n ['Units', selectedVariable.units || ''],\n ['Valid minimum', selectedVariable.validMin],\n ['Valid maximum', selectedVariable.validMax],\n ['Dimension names', selectedVariable.dimNames && selectedVariable.dimNames.join(', ')],\n ['Array shape', selectedVariable.shape && selectedVariable.shape.join(', ')],\n ['Chunk sizes', selectedVariable.chunkSizes && selectedVariable.chunkSizes.join(', ')],\n [' ', ''],\n ];\n let attributes = selectedVariable.attributes;\n if (attributes) {\n Object.getOwnPropertyNames(attributes).forEach(name => {\n tableData.push([name, attributes[name]]);\n });\n }\n return tableData;\n }\n);\n\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// View selectors\n\nexport const viewLayoutSelector = (state: State): ViewLayoutState => state.control.viewLayout;\nexport const viewsSelector = (state: State): ViewState<any>[] => state.control.views;\nexport const activeViewIdSelector = (state: State): string | null => state.control.activeViewId;\n\nexport const figureViewsSelector = createSelector<State, ViewState<FigureViewDataState>[], ViewState<any>[]>(\n viewsSelector,\n (views: ViewState<any>[]) => {\n return (views ? views.filter(view => view.type === 'figure') : EMPTY_ARRAY) as ViewState<FigureViewDataState>[];\n }\n);\n\nexport const activeViewSelector = createSelector<State, ViewState<any> | null, ViewState<any>[], string | null>(\n viewsSelector,\n activeViewIdSelector,\n (views: ViewState<any>[], activeViewId) => {\n if (canFind(views, activeViewId)) {\n return views.find(view => view.id === activeViewId);\n }\n return null;\n }\n);\n\nexport const activeViewTypeSelector = createSelector<State, string | null, ViewState<any> | null>(\n activeViewSelector,\n (view: ViewState<any>) => {\n return view ? view.type : null\n }\n);\n\nexport const selectedEntityIdSelector = createSelector<State, string | null, ViewState<any> | null>(\n activeViewSelector,\n (view: ViewState<any>) => {\n if (view && view.type === 'world') {\n const data = view.data as WorldViewDataState;\n return data.selectedEntityId;\n }\n return null;\n }\n);\n\n// noinspection JSUnusedLocalSymbols\nexport const selectedEntitySelector = createSelector<State, Cesium.Entity | null, ViewState<any> | null, any>(\n activeViewSelector,\n selectedEntityIdSelector, // we need this to invalidate selector on selection changes in Cesium\n (view: ViewState<any>, unusedEntityId: any) => {\n return getWorldViewSelectedEntity(view);\n }\n);\n\nexport const selectedWorldViewViewerSelector = createSelector<State, Cesium.Viewer | null, ViewState<any> | null>(\n activeViewSelector,\n (view: ViewState<any>) => {\n return view ? getWorldViewViewer(view) : null;\n }\n);\n\nexport const selectedGeometryWKTGetterSelector = createSelector<State, GeometryWKTGetter, ViewState<any> | null>(\n activeViewSelector,\n getWorldViewSelectedGeometryWKTGetter\n);\n\n// noinspection JSUnusedLocalSymbols\nexport const externalObjectStoreSelector = (state: State) => EXTERNAL_OBJECT_STORE;\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Layer selectors\n\nexport const savedLayersSelector = (state: State): SavedLayers => state.session.savedLayers;\n\nexport const selectedLayerIdSelector = createSelector<State, string | null, ViewState<any> | null>(\n activeViewSelector,\n (view: ViewState<any> | null) => {\n return (view && view.data.selectedLayerId) || null;\n }\n);\n\nexport const baseMapsSelector = (state: State) => state.data.baseMaps;\n\nexport const baseMapIdSelector = createSelector<State, string, BaseMapState[], ViewState<any> | null>(\n baseMapsSelector,\n activeViewSelector,\n (baseMaps: BaseMapState[], view: ViewState<any> | null) => {\n return (view\n && view.data.baseMapId) || DEFAULT_BASE_MAP_ID;\n }\n);\n\nexport const baseMapSelector = createSelector<State, BaseMapState, BaseMapState[], ViewState<any> | null>(\n baseMapsSelector,\n activeViewSelector,\n (baseMaps: BaseMapState[], view: ViewState<any> | null) => {\n return (view\n && view.data.baseMapId\n && baseMaps.find(bm => bm.id === view.data.baseMapId)) || DEFAULT_BASE_MAP;\n }\n);\n\nexport const baseMapOptionsSelector = createSelector<State, BaseMapOptions | null, BaseMapState>(\n baseMapSelector,\n (baseMap: BaseMapState) => {\n return baseMap.options;\n }\n);\n\nexport const layersSelector = createSelector<State, LayerState[] | null, ViewState<any> | null>(\n activeViewSelector,\n (view: ViewState<any> | null) => {\n return (view && view.data.layers) || null;\n }\n);\n\nexport const selectedLayerSelector = createSelector<State, LayerState | null, LayerState[], string | null>(\n layersSelector,\n selectedLayerIdSelector,\n (layers: LayerState[] | null, selectedLayerId: string | null): LayerState | null => {\n if (canFind(layers, selectedLayerId)) {\n return layers.find(l => l.id === selectedLayerId);\n }\n return null;\n }\n);\n\nexport const selectedLayerIndexSelector = createSelector<State, number, LayerState[], string>(\n layersSelector,\n selectedLayerIdSelector,\n (layers: LayerState[] | null, selectedLayerId: string | null): number => {\n if (canFind(layers, selectedLayerId)) {\n return layers.findIndex(l => l.id === selectedLayerId);\n }\n return -1;\n }\n);\n\nexport const selectedImageLayerSelector = createSelector<State, ImageLayerState | null, LayerState | null>(\n selectedLayerSelector,\n (selectedLayer: LayerState | null) => {\n if (selectedLayer && (selectedLayer.type === 'Image' || selectedLayer.type === 'VariableImage')) {\n return selectedLayer as ImageLayerState;\n }\n return null;\n }\n);\n\nexport const selectedVariableImageLayerSelector = createSelector<State, VariableImageLayerState | null,\n LayerState | null>(\n selectedLayerSelector,\n (selectedLayer: LayerState | null) => {\n if (selectedLayer && selectedLayer.type === 'VariableImage') {\n return selectedLayer as VariableImageLayerState;\n }\n return null;\n }\n);\n\nexport const selectedVariableImageLayerDisplayMinMaxSelector = createSelector<State,\n [number, number] | null, VariableImageLayerState | null>(\n selectedVariableImageLayerSelector,\n (selectedLayer: VariableImageLayerState | null) => {\n if (selectedLayer) {\n const displayMin = isNumber(selectedLayer.displayMin) ? selectedLayer.displayMin : 0;\n const displayMax = isNumber(selectedLayer.displayMax) ? selectedLayer.displayMax : displayMin + 1;\n return [displayMin, displayMax];\n }\n return null;\n }\n);\n\nexport const selectedVectorLayerSelector = createSelector<State, VectorLayerState | null,\n LayerState | null>(\n selectedLayerSelector,\n (selectedLayer: LayerState | null) => {\n if (selectedLayer && (selectedLayer.type === 'Vector' || selectedLayer.type === 'ResourceVector')) {\n return selectedLayer as VectorLayerState;\n }\n return null;\n }\n);\n\nexport const entityUpdateCountSelector = (state: State) => state.control.entityUpdateCount;\n\nexport const styleContextSelector = (state: State) => state.session.styleContext;\n\n// noinspection JSUnusedLocalSymbols\nexport const vectorStyleSelector = createSelector<State, SimpleStyle, ViewState<any>, string, VectorLayerState | null, Placemark | null, Cesium.Entity | null, number>(\n activeViewSelector,\n styleContextSelector,\n selectedVectorLayerSelector,\n selectedPlacemarkSelector,\n selectedEntitySelector,\n entityUpdateCountSelector,\n (view: ViewState<any>, styleContext, selectedVectorLayer, selectedPlacemark, selectedEntity, entityUpdateCount) => {\n const selectedLayerStyle = selectedVectorLayer && selectedVectorLayer.style;\n let style;\n if (styleContext === STYLE_CONTEXT_LAYER) {\n style = selectedLayerStyle;\n } else if (styleContext === STYLE_CONTEXT_ENTITY) {\n if (selectedPlacemark) {\n const placemarkStyle = simpleStyleFromFeatureProperties(selectedPlacemark.properties);\n style = {...selectedLayerStyle, ...placemarkStyle};\n } else if (selectedEntity) {\n const entityStyle = entityToSimpleStyle(selectedEntity);\n const entityVectorLayer = getWorldViewVectorLayerForEntity(view, selectedEntity);\n const entityVectorLayerStyle = entityVectorLayer && entityVectorLayer.style;\n const savedEntityStyle = entityVectorLayer\n && entityVectorLayer.entityStyles\n && entityVectorLayer.entityStyles[selectedEntity.id];\n style = {...selectedLayerStyle, ...entityVectorLayerStyle, ...entityStyle, ...savedEntityStyle};\n }\n }\n return {...SIMPLE_STYLE_DEFAULTS, ...style};\n }\n);\n\nexport const selectedResourceVectorLayerSelector = createSelector<State, ResourceVectorLayerState | null,\n LayerState | null>(\n selectedLayerSelector,\n (selectedLayer: LayerState | null) => {\n if (selectedLayer && selectedLayer.type === 'ResourceVector') {\n return selectedLayer as ResourceVectorLayerState;\n }\n return null;\n }\n);\n\nexport const selectedLayerVariablesSelector = createSelector<State, LayerVariableState[] | null, ResourceState[]>(\n resourcesSelector,\n (resources: ResourceState[]) => {\n const layerVariables = [];\n for (let resource of resources) {\n if (resource.variables) {\n for (let variable of resource.variables) {\n if (isSpatialImageVariable(variable) || isSpatialVectorVariable(variable)) {\n layerVariables.push({resource, variable});\n }\n }\n }\n }\n return layerVariables;\n }\n);\n\nexport const isComputingVariableStatistics = createSelector<State, boolean,\n ResourceState | null, VariableState | null, VariableLayerBase | null, Set<string>>(\n selectedResourceSelector,\n selectedVariableSelector,\n selectedVariableImageLayerSelector,\n activeRequestLocksSelector,\n (selectedResource: ResourceState | null,\n selectedVariable: VariableState | null,\n selectedVariableImageLayer: VariableLayerBase | null,\n activeRequestLocks: Set<string>) => {\n const imageLayer = selectedVariableImageLayer;\n if (!selectedResource || !selectedVariable || !imageLayer) {\n return false;\n }\n const requestLock = getLockForGetWorkspaceVariableStatistics(selectedResource.name,\n selectedVariable.name,\n imageLayer.varIndex);\n return activeRequestLocks.has(requestLock);\n }\n);\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Color map selectors\n\nexport const colorMapCategoriesSelector = (state: State): Array<ColorMapCategoryState> => state.data.colorMaps;\n\nexport const selectedColorMapSelector = createSelector<State, ColorMapState, ColorMapCategoryState[] | null,\n VariableImageLayerState\n | null>(\n colorMapCategoriesSelector,\n selectedVariableImageLayerSelector,\n (colorMapCategories: ColorMapCategoryState[] | null, selectedImageLayer: VariableImageLayerState | null) => {\n const selectedColorMapName = selectedImageLayer ? selectedImageLayer.colorMapName : null;\n if (canFind(colorMapCategories, selectedColorMapName)) {\n for (let cat of colorMapCategories) {\n const selectedColorMap = cat.colorMaps.find(cm => cm.name === selectedColorMapName);\n if (selectedColorMap) {\n return selectedColorMap;\n }\n }\n }\n return null;\n }\n);\n\nexport const fileAPISelector = createSelector(\n webAPIClientSelector,\n (webAPIClient) => {\n return new FilesAPI(webAPIClient);\n }\n);\n\n\n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Utilities\n\nfunction canFind(array: any[], id: string): boolean {\n return array && array.length && !!id;\n}\n\n\n","/**\n * Object functions used to improve readability of Redux reducer code.\n *\n * @author Norman Fomferra\n */\n\nimport { isDefined, isUndefined } from './types';\n\n/**\n * Encapsulate the idea of passing a new object as the first parameter\n * to <code>Object.assign</code> to ensure we correctly copy data instead of mutating.\n *\n * @param target The target object\n * @param sources The source objects\n * @returns a new {Object}\n */\nexport function updateObject(target, ...sources) {\n return Object.assign({}, target, ...sources);\n}\n\n/**\n * Similar to <code>updateObject()</code> but updates just the given property in *target*.\n *\n * @param target The target object\n * @param propertyName The property's name.\n * @param newValue The property's new value.\n * @returns a new {Object}\n */\nexport function updatePropertyObject(target, propertyName: string, newValue) {\n const oldValue = target[propertyName];\n return updateObject(target, {[propertyName]: updateObject(oldValue, newValue)});\n}\n\n/**\n * Similar to <code>updateObject()</code> but will only assign a property if\n * a given *source* property is undefined in *target*.\n *\n * @param target The target object\n * @param sources The source objects\n * @returns a new {Object}\n */\nexport function updateConditionally(target, ...sources) {\n target = {...target};\n for (let source of sources) {\n if (isDefined(source)) {\n for (let name of Object.keys(source)) {\n if (isUndefined(target[name])) {\n target[name] = source[name];\n }\n }\n }\n }\n return target;\n}\n\n// TODO (nf): test & find better name\nexport function updateConditionally2(target, ...sources) {\n target = {...target};\n for (let source of sources) {\n if (isDefined(source)) {\n for (let name of Object.keys(source)) {\n if (isDefined(source[name])) {\n target[name] = source[name];\n }\n }\n }\n }\n return target;\n}\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { Checkbox, Tooltip } from '@blueprintjs/core';\n\nimport { DialogState, State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\n\n\ninterface IChooseWorkspaceDialogState extends DialogState {\n workspaceDir: string | null;\n currentWorkspaceName: string;\n selectedWorkspaceName: string;\n deleteEntireWorkspace: boolean;\n}\n\ninterface IChooseWorkspaceDialogOwnProps {\n dialogId: string;\n}\n\ninterface IChooseWorkspaceDialogProps extends IChooseWorkspaceDialogState, IChooseWorkspaceDialogOwnProps {\n isOpen: boolean;\n isLocalFSAllowed: boolean;\n workspaceNames: string[];\n}\n\nexport const OPEN_WORKSPACE_DIALOG_ID = 'openWorkspaceDialog';\nexport const DELETE_WORKSPACE_DIALOG_ID = 'deleteWorkspaceDialog';\n\nfunction mapStateToProps(state: State, ownProps: IChooseWorkspaceDialogOwnProps): IChooseWorkspaceDialogProps {\n const dialogState = selectors.dialogStateSelector(ownProps.dialogId)(state) as any;\n const isOpen = dialogState.isOpen;\n const dialogId = ownProps.dialogId;\n const isLocalFSAllowed = selectors.isLocalFSAccessAllowedSelector(state);\n let workspaceDir = dialogState.workspaceDir;\n let currentWorkspaceName = dialogState.workspaceName;\n let selectedWorkspaceName = '';\n // TODO (forman): Fix code duplication with SelectWorkspaceDialog\n if (isOpen) {\n if (!selectors.isScratchWorkspaceSelector(state)) {\n workspaceDir = workspaceDir || selectors.workspaceDirSelector(state);\n currentWorkspaceName = currentWorkspaceName || selectors.workspaceNameSelector(state);\n }\n workspaceDir = workspaceDir || selectors.lastWorkspaceDirSelector(state);\n }\n workspaceDir = isLocalFSAllowed ? workspaceDir || '' : null;\n currentWorkspaceName = currentWorkspaceName || '';\n let workspaceNames: string[];\n if (state.data.workspace && state.data.workspaceNames) {\n workspaceNames = [...state.data.workspaceNames];\n let indexOf = workspaceNames.indexOf(currentWorkspaceName);\n if (indexOf > -1) {\n workspaceNames.splice(indexOf, 1);\n }\n }\n return {\n workspaceDir,\n currentWorkspaceName,\n selectedWorkspaceName,\n dialogId,\n isOpen,\n isLocalFSAllowed: isLocalFSAllowed,\n workspaceNames: workspaceNames,\n deleteEntireWorkspace: this.deleteEntireWorkspace\n };\n}\n\nclass ChooseWorkspaceDialog extends React.Component<IChooseWorkspaceDialogProps & IChooseWorkspaceDialogOwnProps & DispatchProp<State>, IChooseWorkspaceDialogState> {\n\n constructor(props: IChooseWorkspaceDialogProps & DispatchProp<State>) {\n super(props);\n this.state = {\n workspaceDir: '',\n currentWorkspaceName: '',\n selectedWorkspaceName: '',\n deleteEntireWorkspace: true\n };\n // TODO (forman): Fix code duplication with SelectWorkspaceDialog\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.onWorkspaceNameChange = this.onWorkspaceNameChange.bind(this);\n this.onWorkspaceDirChange = this.onWorkspaceDirChange.bind(this);\n }\n\n componentWillReceiveProps(nextProps: IChooseWorkspaceDialogProps) {\n this.setState({workspaceDir: nextProps.workspaceDir, currentWorkspaceName: nextProps.currentWorkspaceName});\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(this.props.dialogId));\n this.resetSelectedWorkspaceName();\n }\n\n private canConfirm(): boolean {\n if (this.state.selectedWorkspaceName === 'undefined' || !this.state.selectedWorkspaceName) {\n return false;\n }\n return /^([A-Za-z_\\-\\s0-9.]+)$/.test(this.state.selectedWorkspaceName);\n }\n\n private composeWorkspacePath(): string {\n let workspaceDir = this.state.workspaceDir;\n let workspaceName = this.state.selectedWorkspaceName;\n if (workspaceDir === null) {\n return workspaceName;\n }\n return workspaceDir + '/' + workspaceName;\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(this.props.dialogId, this.state));\n if (this.props.dialogId === DELETE_WORKSPACE_DIALOG_ID) {\n this.props.dispatch(actions.deleteWorkspace(this.composeWorkspacePath(), this.state.deleteEntireWorkspace) as any);\n } else {\n this.props.dispatch(actions.openWorkspace(this.composeWorkspacePath()) as any);\n }\n this.resetSelectedWorkspaceName();\n }\n\n private resetSelectedWorkspaceName() {\n this.setState({selectedWorkspaceName: ''});\n }\n\n private setSelectedWorkspace(workspaceName: string) {\n this.setState({selectedWorkspaceName: workspaceName});\n }\n\n private handleCheckboxChange(event) {\n this.setState({deleteEntireWorkspace: event.target.checked});\n }\n\n private onWorkspaceDirChange(ev: any) {\n this.setState({workspaceDir: ev.target.value} as IChooseWorkspaceDialogState);\n }\n\n private onWorkspaceNameChange(ev: any) {\n this.setState({currentWorkspaceName: ev.target.value} as IChooseWorkspaceDialogState);\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n let title: string;\n let confirmTitle: string;\n if (this.props.dialogId === DELETE_WORKSPACE_DIALOG_ID) {\n title = 'Delete Workspace';\n confirmTitle = 'Delete';\n } else {\n title = 'Open Workspace';\n confirmTitle = 'Open';\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title={title}\n confirmTitle={confirmTitle}\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n onConfirm={this.onConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n renderItem = (path: string) => {\n return (<span>{path}</span>);\n };\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n if (this.props.workspaceNames.length === 0) {\n return (\n <div>\n <p style={{marginTop: '1em'}}>No saved workspaces found.</p>\n </div>\n );\n }\n\n let checkbox;\n if (this.props.dialogId === DELETE_WORKSPACE_DIALOG_ID) {\n checkbox =\n <Tooltip content={\"Also delete other files in the workspace folder\"}>\n <Checkbox\n style={{marginTop: '1em'}}\n label={'Delete entire workspace'}\n checked={this.state.deleteEntireWorkspace}\n onChange={this.handleCheckboxChange.bind(this)}\n />\n </Tooltip>\n }\n\n return (\n <div>\n <p style={{marginTop: '1em'}}>Saved workspaces:</p>\n <ListBox items={this.props.workspaceNames}\n selectionMode={ListBoxSelectionMode.SINGLE}\n getItemKey={(item: any, itemIndex: number) => item}\n renderItem={this.renderItem}\n onSelection={newSelection => this.setSelectedWorkspace('' + newSelection[0])}\n selection={this.state.selectedWorkspaceName}\n />\n {checkbox}\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(ChooseWorkspaceDialog);\n","declare global {\n // noinspection JSUnusedGlobalSymbols\n interface Window {\n electron?: any;\n }\n}\n\nexport function isElectron() {\n return Boolean(window.electron);\n}\n\nexport function requireElectron(): any | null {\n return window.electron || null;\n}\n\nif (isElectron()) {\n console.debug('We are running on Electron :)');\n}\n","export class HttpError extends Error {\n constructor(status: number, statusText: string) {\n super(statusText);\n this._status = status;\n }\n\n private _status: number;\n\n get status(): number {\n return this._status;\n }\n\n get statusText(): string {\n return this.message;\n }\n\n static fromResponse(response: Response): HttpError {\n return new HttpError(response.status, response.statusText);\n }\n}\n","/**\n * Created by Norman on 22.03.2017.\n */\n\n\nexport function isDefined(value: any): boolean {\n return typeof (value) !== 'undefined';\n}\n\nexport function isUndefined(value: any): boolean {\n return typeof (value) === 'undefined';\n}\n\nexport function isDefinedAndNotNull(value: any): boolean {\n return value !== null && typeof (value) !== 'undefined';\n}\n\nexport function isUndefinedOrNull(value: any): boolean {\n return value === null || typeof (value) === 'undefined';\n}\n\nexport function isNumber(value: any): boolean {\n return typeof (value) === 'number';\n}\n\nexport function isString(value: any): boolean {\n return typeof (value) === 'string';\n}\n\nexport function isBoolean(value: any): boolean {\n return typeof (value) === 'boolean';\n}\n","import * as React from 'react';\nimport { CSSProperties } from \"react\";\nimport { connect, DispatchProp } from 'react-redux';\nimport { AnchorButton, ControlGroup, Intent } from \"@blueprintjs/core\";\nimport Dropzone from 'react-dropzone';\n\nimport { DialogState, State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { showDirectorySelectDialog } from \"../actions\";\nimport { TextField } from \"../components/field/TextField\";\n\n\nconst DIV_STYLE = {width: '100%', marginBottom: '2em', display: 'flex', flexGrow: 1};\nconst TEXT_FIELD_STYLE = {flexGrow: 1};\nconst BUTTON_STYLE = {flex: 'none'};\n\n\nconst baseStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '20px',\n border: '2px dashed #137cbd',\n borderRadius: '5px',\n background: 'rgba(16, 22, 26, 0.3)',\n color: '#f5f8fa',\n transition: 'border .24s ease-in-out'\n};\n\ninterface IFileUploadDialogProps {\n dialogId: string;\n isOpen: boolean;\n}\n\ninterface IFileUploadDialogState extends DialogState {\n files: File[];\n dir: string;\n}\n\nfunction mapStateToProps(state: State): IFileUploadDialogProps {\n const dialogState = selectors.dialogStateSelector(FileUploadDialog.DIALOG_ID)(state);\n return {\n isOpen: dialogState.isOpen,\n dialogId: FileUploadDialog.DIALOG_ID\n };\n}\n\nclass FileUploadDialog extends React.Component<IFileUploadDialogProps & DispatchProp<State>, IFileUploadDialogState> {\n static readonly DIALOG_ID = 'fileUploadDialog';\n\n constructor(props: IFileUploadDialogProps & DispatchProp<State>) {\n super(props);\n this.state = {files: [], dir: './'};\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n }\n\n componentWillReceiveProps(nextProps: IFileUploadDialogProps) {\n this.setState({files: [], dir: './'});\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(FileUploadDialog.DIALOG_ID));\n }\n\n private canConfirm(): boolean {\n return this.state.files.length > 0;\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(FileUploadDialog.DIALOG_ID, this.state));\n for (let file of this.state.files) {\n this.props.dispatch(actions.uploadFiles(this.state.dir, file) as any);\n }\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title=\"Upload files\"\n icon=\"upload\"\n confirmTitle=\"Upload\"\n confirmIconName=\"upload\"\n confirmTooltip=\"Upload files.\"\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n onConfirm={this.onConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n handleOnDrop = (files: File[]) => {\n this.setState({...this.state, files: files});\n };\n\n handleOpenDirectoryOnClose = (dir: string) => {\n this.setState({...this.state, dir: dir});\n console.log(dir);\n };\n\n handleOpenDirectoryOpen = () => {\n this.props.dispatch(\n showDirectorySelectDialog({title: 'Select Target Directory'}, this.handleOpenDirectoryOnClose) as any);\n };\n\n private renderBody() {\n const files = this.state.files.map(file => (\n <li key={file.name}>\n {file.name} - {file.size} bytes\n </li>\n ));\n\n if (!this.state.files) {\n return null;\n }\n return (\n <div>\n <div>\n Remote target directory:\n <ControlGroup style={DIV_STYLE} fill={true}>\n <TextField style={TEXT_FIELD_STYLE}\n value={this.state.dir}\n onChange={value => {\n console.log(value);\n }}\n nullable={false}\n />\n <AnchorButton intent={Intent.PRIMARY} style={BUTTON_STYLE}\n onClick={this.handleOpenDirectoryOpen}>...</AnchorButton>\n\n </ControlGroup>\n </div>\n\n <div>Files to upload:\n <ControlGroup style={DIV_STYLE} fill={true}>\n <Dropzone onDrop={this.handleOnDrop}>\n {({getRootProps, getInputProps}) => (\n <section className=\"container\">\n <div {...getRootProps({style: baseStyle})}>\n <input {...getInputProps()} />\n <p>Drag 'n' drop files here, or click to select files</p>\n </div>\n <aside>\n {files.length > 0 ? (<h4>Files</h4>) : ''}\n <ul>{files}</ul>\n </aside>\n </section>\n )}\n </Dropzone>\n </ControlGroup>\n </div>\n </div>\n );\n }\n}\n\nexport const FILE_UPLOAD_DIALOG_ID = FileUploadDialog.DIALOG_ID;\n\nexport default connect(mapStateToProps)(FileUploadDialog);\n","import { WebAPIServiceInfo } from '../../state';\nimport { HttpError } from '../HttpError';\n\n\nexport class ServiceInfoAPI {\n\n getServiceInfo(serviceURL: string): Promise<WebAPIServiceInfo> {\n const url = new URL(serviceURL + \"/\");\n // console.log('GET: ', url);\n return fetch(url.toString())\n .then((response: Response) => {\n if (!response.ok) {\n throw HttpError.fromResponse(response);\n }\n return response.json() as Promise<any>;\n })\n .then((response: any) => {\n const webAPIServiceInfo = response.content;\n return {\n name: webAPIServiceInfo.name,\n version: webAPIServiceInfo.version,\n timestamp: webAPIServiceInfo.timestamp,\n userRootMode: webAPIServiceInfo.user_root_mode,\n hostOS: webAPIServiceInfo.host_os,\n dependencies: webAPIServiceInfo.dependencies\n };\n });\n }\n}\n","import {\n LayerState,\n PlacemarkCollection,\n ResourceState,\n ResourceVectorLayerState,\n VariableImageLayerState,\n VectorLayerState\n} from '../state';\nimport { ImageLayerDescriptor, LayerDescriptors, VectorLayerDescriptor, } from '../components/cesium/CesiumGlobe';\nimport {\n AUTO_LAYER_ID,\n COUNTRIES_LAYER_ID,\n findResource,\n findVariable,\n getFeatureCollectionUrl,\n getGeoJSONCountriesUrl,\n getTileUrl,\n MY_PLACES_LAYER_ID,\n} from '../state-util';\nimport { memoize } from '../../common/memoize';\nimport { EMPTY_OBJECT } from '../selectors';\nimport * as Cesium from 'cesium';\nimport { isNumber } from '../../common/types';\nimport { SimpleStyle } from '../../common/geojson-simple-style';\nimport { simpleStyleToCesium } from '../components/cesium/cesium-util';\n\n\nexport function convertLayersToLayerDescriptors(layers: LayerState[],\n resources: ResourceState[],\n placemarkCollection: PlacemarkCollection,\n baseUrl: string,\n workspaceId: string): LayerDescriptors {\n if (!layers || !layers.length) {\n return EMPTY_OBJECT;\n }\n let imageLayerDescriptors: ImageLayerDescriptor[];\n let vectorLayerDescriptors: VectorLayerDescriptor[];\n for (let layer of layers) {\n let imageLayerDescriptor: ImageLayerDescriptor;\n let vectorLayerDescriptor: VectorLayerDescriptor;\n switch (layer.type) {\n case 'VariableImage': {\n imageLayerDescriptor = convertVariableImageLayerToDescriptor(layer as VariableImageLayerState,\n baseUrl, workspaceId, resources);\n break;\n }\n case 'ResourceVector': {\n vectorLayerDescriptor = convertResourceVectorLayerToDescriptor(layer as ResourceVectorLayerState,\n baseUrl, workspaceId, resources);\n break;\n }\n case 'Vector': {\n vectorLayerDescriptor = convertVectorLayerToDescriptor(layer as VectorLayerState,\n baseUrl, placemarkCollection);\n break;\n }\n }\n if (imageLayerDescriptor) {\n if (!imageLayerDescriptors) {\n imageLayerDescriptors = [imageLayerDescriptor];\n } else {\n // noinspection JSUnusedAssignment\n imageLayerDescriptors.push(imageLayerDescriptor);\n }\n } else if (vectorLayerDescriptor) {\n if (!vectorLayerDescriptors) {\n vectorLayerDescriptors = [vectorLayerDescriptor];\n } else {\n // noinspection JSUnusedAssignment\n vectorLayerDescriptors.push(vectorLayerDescriptor);\n }\n } else if (layer.id !== AUTO_LAYER_ID) {\n console.warn(`GlobeView: layer with ID \"${layer.id}\" will not be rendered`);\n }\n }\n\n return {imageLayerDescriptors, vectorLayerDescriptors};\n}\n\n\nfunction convertVariableImageLayerToDescriptor(layer: VariableImageLayerState,\n baseUrl: string,\n workspaceId: string,\n resources: ResourceState[]): ImageLayerDescriptor | null {\n const variable = findVariable(resources, layer);\n if (!variable) {\n console.warn(`GlobeView: variable \"${layer.varName}\" not found in resource \"${layer.resId}\"`);\n return null;\n }\n const imageLayout = variable.imageLayout;\n if (!variable.imageLayout) {\n console.warn(`GlobeView: variable \"${layer.varName}\" of resource \"${layer.resId}\" has no imageLayout`);\n return null;\n }\n const url = getTileUrl(baseUrl, workspaceId, layer);\n let rectangle = Cesium.Rectangle.MAX_VALUE;\n if (imageLayout.extent) {\n const extent = imageLayout.extent;\n rectangle = Cesium.Rectangle.fromDegrees(extent.west, extent.south, extent.east, extent.north);\n }\n return Object.assign({}, layer, {\n imageryProvider: createImageryProvider,\n imageryProviderOptions: {\n url,\n rectangle,\n minimumLevel: 0,\n maximumLevel: imageLayout.numLevels - 1,\n tileWidth: imageLayout.tileWidth,\n tileHeight: imageLayout.tileHeight,\n tilingScheme: new Cesium.GeographicTilingScheme({\n rectangle,\n numberOfLevelZeroTilesX: imageLayout.numLevelZeroTilesX,\n numberOfLevelZeroTilesY: imageLayout.numLevelZeroTilesY\n }),\n },\n });\n}\n\nfunction convertResourceVectorLayerToDescriptor(layer: ResourceVectorLayerState,\n baseUrl: string,\n workspaceId: string,\n resources: ResourceState[]): VectorLayerDescriptor | null {\n const resource = findResource(resources, layer);\n if (!resource) {\n console.warn(`globe-view-layers: resource \"${layer.resId}\" not found\"`);\n return null;\n }\n return {\n ...layer,\n dataSource: createResourceGeoJSONDataSource,\n dataSourceOptions: {\n data: getFeatureCollectionUrl(baseUrl, workspaceId, layer),\n resId: resource.id,\n style: layer.style,\n },\n } as VectorLayerDescriptor;\n}\n\nfunction convertVectorLayerToDescriptor(layer: VectorLayerState,\n baseUrl: string,\n placemarkCollection: PlacemarkCollection): VectorLayerDescriptor {\n let data = layer.data;\n let style = layer.style;\n if (layer.id === COUNTRIES_LAYER_ID) {\n data = getGeoJSONCountriesUrl(baseUrl);\n } else if (layer.id === MY_PLACES_LAYER_ID) {\n data = placemarkCollection;\n }\n return {\n ...layer,\n dataSource: createGeoJsonDataSource,\n dataSourceOptions: {data, style},\n } as VectorLayerDescriptor;\n}\n\n/**\n * Creates a Cesium.UrlTemplateImageryProvider instance.\n *\n * @param viewer the Cesium viewer\n * @param imageryProviderOptions see https://cesiumjs.org/Cesium/Build/Documentation/UrlTemplateImageryProvider.html\n */\nfunction createImageryProvider(viewer: Cesium.Viewer, imageryProviderOptions): Cesium.ImageryProvider {\n const imageryProvider = new Cesium.UrlTemplateImageryProvider(imageryProviderOptions);\n imageryProvider.errorEvent.addEventListener((event) => {\n console.error('GlobeView:', event);\n });\n return imageryProvider;\n}\n\n/**\n * Creates a Cesium.GeoJsonDataSource instance.\n *\n * @param viewer the Cesium viewer\n * @param dataSourceOptions see https://cesiumjs.org/Cesium/Build/Documentation/GeoJsonDataSource.html\n */\nfunction createGeoJsonDataSource(viewer: Cesium.Viewer, dataSourceOptions): Promise<Cesium.DataSource> {\n const style = simpleStyleToCesium(dataSourceOptions.style || EMPTY_OBJECT);\n return Cesium.GeoJsonDataSource.load(dataSourceOptions.data, style);\n}\n\n/**\n * Creates a Cesium.GeoJsonDataSource instance that loads GeoJSON features from Cate WebAPI REST call.\n *\n * @param viewer the Cesium viewer\n * @param dataSourceOptions see https://cesiumjs.org/Cesium/Build/Documentation/GeoJsonDataSource.html\n */\nfunction createResourceGeoJSONDataSource(viewer: Cesium.Viewer, dataSourceOptions): Cesium.DataSource {\n return createResourceGeoJSONDataSourceImpl(dataSourceOptions.data, dataSourceOptions.resId, dataSourceOptions.style);\n}\n\ntype ResourceGeoJSONDataSourceFactory = (url: string, resId: number, style: SimpleStyle) => Cesium.DataSource;\n\nconst createResourceGeoJSONDataSourceImpl: ResourceGeoJSONDataSourceFactory =\n memoize((url: string, resId: number, style: SimpleStyle) => {\n const customDataSource: Cesium.DataSource = new Cesium.CustomDataSource('Cate Resource #' + resId);\n const cStyle = simpleStyleToCesium(style);\n // let numFeatures = 0;\n // const worker = new Worker();\n const worker = new Worker(`${process.env.PUBLIC_URL}/stream-geojson.js`);\n worker.postMessage(url);\n worker.onmessage = function (event: MessageEvent) {\n\n const features = event.data;\n if (!features) {\n // console.log(`Received ${numFeatures} feature(s) in total from ${url}`);\n return;\n }\n\n // numFeatures += features.length;\n // console.log(`Received another ${features.length} feature(s) from ${url}`);\n\n // Style for points symbolizing a more complex geometry\n const pixelSizeMin = 10;\n const pixelSizeMax = 100;\n const areaMin = 20.;\n const areaMax = 500.;\n const defaultRatio = 0.2;\n const pointColor = Cesium.Color.fromAlpha(cStyle.fill, 0.9);\n const pointOutlineColor = Cesium.Color.fromAlpha(cStyle.fill, 0.5);\n const featureCollection = {\n type: 'FeatureCollection',\n features: features\n };\n Cesium.GeoJsonDataSource.load(featureCollection, cStyle)\n .then((geoJsonDataSource: Cesium.GeoJsonDataSource) => {\n\n const featureMap = new Map();\n features.forEach(f => featureMap.set(f.id, f));\n\n // Style for points symbolizing a more complex geometry\n const scaleByDistance = new Cesium.NearFarScalar(2e2, 1.0, 1e7, 0.1);\n const translucencyByDistance = new Cesium.NearFarScalar(2e2, 1.0, 1e7, 0.5);\n\n customDataSource.entities.suspendEvents();\n\n for (let entity of geoJsonDataSource.entities.values) {\n // console.log(\"entity: \", entity);\n // TODO #477 (nf): Use of the following featureMap is probably wrong\n // as there is no unconditional 1:1 mapping between GeoJSON features and generated entities.\n const feature = featureMap.get(entity.id);\n // console.log(\"feature: \", feature);\n if (feature\n && isNumber(feature._simp)\n && isNumber(feature._resId)\n && isNumber(feature._idx)\n && !!(entity.point || entity.billboard || entity.label)) {\n\n // TODO #477 (nf): Generalize this code. This is for Glaciers CCI.\n // See #491: use a special style for feature geometries that are expandable/collapsible.\n let ratio = defaultRatio;\n\n if (feature.properties) {\n let area = feature.properties['area_npl43'];\n if (area) {\n ratio = (area - areaMin) / (areaMax - areaMin);\n if (ratio < 0.) {\n ratio = 0.;\n }\n if (ratio > 1.) {\n ratio = 1.;\n }\n }\n }\n\n const pixelSize = pixelSizeMin + ratio * (pixelSizeMax - pixelSizeMin);\n\n entity = new Cesium.Entity({\n id: entity.id,\n position: entity.position,\n description: entity.description,\n properties: entity.properties,\n point: {\n // Style for points symbolizing a more complex geometry\n color: pointColor,\n outlineColor: pointOutlineColor,\n outlineWidth: 10,\n // pixelSize will multiply by the scale factor, so in this\n // example the size will range from pixelSize (near) to 0.1*pixelSize (far).\n pixelSize,\n scaleByDistance,\n translucencyByDistance,\n }\n });\n\n entity['_simp'] = feature._simp;\n entity['_resId'] = feature._resId;\n entity['_idx'] = feature._idx;\n }\n\n try {\n customDataSource.entities.add(entity);\n // console.log(\"added entity: \", entity);\n } catch (e) {\n console.error('failed to add entity: ', entity, e);\n }\n }\n\n geoJsonDataSource.entities.removeAll();\n customDataSource.entities.resumeEvents();\n customDataSource.changedEvent.raiseEvent();\n // console.log(`Added another ${features.length} feature(s) to Cesium custom data source`);\n });\n };\n return customDataSource;\n });\n\nconst entityGeometryPropertyNames = ['billboard', 'label', 'point', 'corridor', 'polyline', 'polygon'];\n\nexport function reloadEntityWithOriginalGeometry(oldEntity: Cesium.Entity, featureUrl: string, style: SimpleStyle) {\n // TODO #477 (nf): We don't correctly handle multi-geometries here.\n const cStyle = simpleStyleToCesium(style);\n Cesium.GeoJsonDataSource.load(featureUrl, cStyle)\n .then((geoJsonDataSource: Cesium.GeoJsonDataSource) => {\n const entities = geoJsonDataSource.entities.values;\n if (entities && entities.length) {\n const entity = entities[0];\n transferEntityGeometry(entity, oldEntity);\n }\n });\n}\n\nexport function transferEntityGeometry(fromEntity: Cesium.Entity, toEntity: Cesium.Entity): void {\n const newGeomPropertyName = entityGeometryPropertyNames.find(name => Cesium.defined(fromEntity[name]));\n const oldGeomPropertyName = entityGeometryPropertyNames.find(name => Cesium.defined(toEntity[name]));\n if (oldGeomPropertyName && newGeomPropertyName && oldGeomPropertyName !== newGeomPropertyName) {\n toEntity[oldGeomPropertyName] = undefined;\n }\n if (newGeomPropertyName) {\n toEntity[newGeomPropertyName] = fromEntity[newGeomPropertyName];\n if (isNumber(toEntity['_simp'])) {\n // clear geometry simplification flag\n toEntity['_simp'] &= ~0x01;\n }\n }\n}\n","import { isUndefinedOrNull } from './types';\n\nexport interface MemoizedFunction {\n (...args): any;\n\n getMaxSize();\n\n getSize();\n\n clearCache();\n}\n\n/**\n * Wrap a function with a memoizing function that saves up to the maxSize most recent calls.\n *\n * @param func The function to wrap.\n * @param maxSize Number of most recent calls to be memoized.\n * @returns A memoized version of func.\n */\nexport function memoize(func: Function, maxSize?: number): MemoizedFunction {\n\n let memo = {};\n let size = 0;\n\n const memoized = (...args) => {\n //console.log('memoized: totalSize =', size)\n const key = args.map(a => `(${a}:${typeof a})`).join();\n if (key in memo) {\n return memo[key];\n } else {\n const value = func(...args);\n if (isUndefinedOrNull(maxSize) || (maxSize > 0 && size < maxSize)) {\n memo[key] = value;\n size++;\n }\n return value;\n }\n };\n\n memoized['getMaxSize'] = () => maxSize;\n memoized['getSize'] = () => size;\n memoized['clearCache'] = () => {\n memo = {};\n size = 0;\n };\n\n return memoized as MemoizedFunction;\n}\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 221;","/**\n * Encodes UTF-8 strings into lowercase hexadecimal representation and\n * decodes hexadecimal representation into UTF-8.\n */\nclass Base16 {\n static encode(value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n let part = value.codePointAt(i).toString(16);\n if (part.length === 1) {\n result += '0' + part;\n } else if (part.length === 2) {\n result += part;\n } else {\n throw new Error('string value must comprise utf-8 values only');\n }\n }\n return result.toUpperCase();\n }\n\n static decode(value: string): string {\n if (value.length % 2 !== 0) {\n throw new Error('string value length must be a multiple of two');\n }\n let result = '';\n for (let i = 0; i < value.length; i += 2) {\n let code = parseInt(value.substr(i, 2), 16);\n if (Number.isNaN(code)) {\n throw new Error('string value must comprise hexadecimal values only');\n }\n result += String.fromCharCode(code);\n }\n return result;\n }\n}\n\nexport default Base16;","import * as Cesium from 'cesium';\nimport { IconName } from '@blueprintjs/core';\nimport Base16 from '../common/base16codec';\n\nimport {\n AnimationViewDataState,\n BaseMapState,\n DatasetDescriptor,\n DataSourceState,\n DataSourceCapability,\n DataStoreState,\n DimSizes,\n FigureViewDataState,\n LayerState,\n OperationState,\n Placemark,\n PlacemarkCollection,\n ResourceRefState,\n ResourceState,\n ResourceVectorLayerState,\n SavedLayers,\n SPLIT_MODE_OFF,\n TableViewDataState,\n VariableDataRefState, VariableDescriptor,\n VariableImageLayerState,\n VariableRefState,\n VariableState,\n VectorLayerBase,\n WorldViewDataState, WorkspaceState\n} from './state';\nimport { ViewState } from './components/ViewState';\nimport * as assert from '../common/assert';\nimport { isNumber, isString } from '../common/types';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from './selectors';\nimport { GeometryWKTGetter } from './containers/editor/ValueEditor';\nimport { entityToGeometryWkt } from './components/cesium/cesium-util';\nimport { SIMPLE_STYLE_DEFAULTS, SimpleStyle } from '../common/geojson-simple-style';\n\n\nexport const AUTO_LAYER_ID = 'auto';\nexport const COUNTRIES_LAYER_ID = 'countries';\nexport const MY_PLACES_LAYER_ID = 'myPlaces';\n\nexport const AUTO_LAYER = {\n id: AUTO_LAYER_ID,\n type: 'Unknown',\n visible: true,\n};\n\nexport const COUNTRIES_LAYER = {\n id: COUNTRIES_LAYER_ID,\n name: 'Countries',\n type: 'Vector',\n visible: false,\n style: {\n ...SIMPLE_STYLE_DEFAULTS,\n stroke: '#ffff00',\n fill: '#FFFFFF',\n fillOpacity: 0.2,\n strokeWidth: 1.5,\n },\n};\n\nexport const MY_PLACES_LAYER = {\n id: MY_PLACES_LAYER_ID,\n name: 'My Places',\n type: 'Vector',\n visible: true,\n style: {\n markerSize: 'small',\n markerColor: '#ff0000',\n markerSymbol: '',\n fill: '#0000ff',\n fillOpacity: 0.5,\n stroke: '#ffff00',\n strokeOpacity: 0.5,\n strokeWidth: 1,\n },\n};\n\nexport const PLACEMARK_ID_PREFIX = 'placemark-';\n\nexport function getWorkspaceId(workspace: WorkspaceState): string {\n return Base16.encode(workspace.baseDir);\n}\n\nexport function isLocalDataStore(dataStore: DataStoreState | null) {\n return dataStore && (dataStore.id === 'local' || dataStore.isLocal);\n}\n\nexport function isRemoteDataStore(dataStore: DataStoreState | null) {\n return dataStore && dataStore.id !== 'local' && !dataStore.isLocal;\n}\n\nexport interface DataSourceUrls {\n catalogUrl?: string;\n infoUrl?: string;\n}\n\nexport function getDataSourceUrls(dataSource: DataSourceState): DataSourceUrls {\n const metaInfo = dataSource.metaInfo;\n let catalogUrl;\n let infoUrl;\n if (metaInfo) {\n catalogUrl = metaInfo.catalog_url || metaInfo.catalogue_url;\n if (!catalogUrl && dataSource.id.includes(\"esacci\") && metaInfo.uuid) {\n catalogUrl = `https://catalogue.ceda.ac.uk/uuid/${metaInfo.uuid}`;\n }\n infoUrl = metaInfo.info_url;\n }\n return {catalogUrl, infoUrl};\n}\n\n/**\n * Compute capabilities for data source.\n * This function is actually invoked for any data source NOT originating from CCI ODP data store.\n * @param dataSource a data source\n */\nexport function computeDataSourceCapabilities(dataSource: DataSourceState): DataSourceCapability[] | undefined {\n const dsd = dataSource.metaInfo;\n if (dsd) {\n const canConstrainTime = isCoord1DInDataset(dsd, 'time');\n const canConstrainRegion = isCoord1DInDataset(dsd, 'lon')\n && isCoord1DInDataset(dsd, 'lat');\n if (canConstrainTime && canConstrainRegion) {\n return [\"open\", \"constrain_time\", \"constrain_region\"];\n } else if (canConstrainTime) {\n return [\"open\", \"constrain_time\"];\n } else if (canConstrainRegion) {\n return [\"open\", \"constrain_region\"];\n }\n if (isString(dsd.data_type)) {\n if (dsd.data_type === \"dataset\") {\n return [\"open\"];\n }\n }\n }\n}\n\nfunction isCoord1DInDataset(dsd: DatasetDescriptor, name: string): boolean {\n return !!(dsd.coords && dsd.coords.find(c => isCoord1D(c, name)));\n}\n\nfunction isCoord1D(c: VariableDescriptor, name: string): boolean {\n return c.name === name\n && !!c.dims\n && c.dims.length === 1\n && !!c.dims.find(d => d === name);\n}\n\nexport function canOpenDataSource(dataSource: DataSourceState) {\n return _checkDataSourceCapability(dataSource,\n 'open', 'constrain_region', 'constrain_time', 'write_zarr');\n}\n\nexport function canCacheDataSource(dataSource: DataSourceState) {\n return _checkDataSourceCapability(dataSource,\n 'write_zarr');\n}\n\nexport function canConstrainDataSourceTime(dataSource: DataSourceState) {\n return _checkDataSourceCapability(dataSource,\n 'constrain_time');\n}\n\nexport function canConstrainDataSourceRegion(dataSource: DataSourceState) {\n return _checkDataSourceCapability(dataSource,\n 'constrain_region');\n}\n\nexport function canMapDataSource(dataSource: DataSourceState) {\n return _checkDataSourceCapability(dataSource,\n 'constrain_region');\n}\n\nexport function canConstrainDataSourceVariables(dataSource: DataSourceState) {\n return dataSource.metaInfo\n && dataSource.metaInfo.data_vars\n && dataSource.metaInfo.data_vars.length > 1;\n}\n\nfunction _checkDataSourceCapability(dataSource: DataSourceState,\n ...requiredCapabilities: DataSourceCapability[]): boolean | undefined {\n let capabilities = dataSource.capabilities;\n if (!capabilities) {\n if ((dataSource.dataType && dataSource.dataType === 'dataset')\n || dataSource.id.endsWith('.zarr')) {\n // dataSource.capabilities have been introduced for ESA CCI datasets only\n capabilities = [\"open\"];\n }\n }\n if (Array.isArray(capabilities)) {\n const availableCapabilities = new Set<string>(capabilities);\n for (let requiredCapability of requiredCapabilities) {\n if (availableCapabilities.has(requiredCapability)) {\n return true;\n }\n }\n return false;\n }\n}\n\nexport function getTileUrl(baseUrl: string,\n workspaceId: string,\n layer: VariableImageLayerState): string {\n return baseUrl + `ws/res/tile/${workspaceId}/${layer.resId}/{z}/{y}/{x}.png?`\n + `&var=${encodeURIComponent(layer.varName)}`\n + `&index=${encodeURIComponent((layer.varIndex || []).join())}`\n + `&cmap=${encodeURIComponent(layer.colorMapName) + (layer.alphaBlending ? '_alpha' : '')}`\n + `&min=${encodeURIComponent(layer.displayMin + '')}`\n + `&max=${encodeURIComponent(layer.displayMax + '')}`;\n}\n\nexport function getFeatureCollectionUrl(baseUrl: string,\n workspaceId: string,\n ref: ResourceRefState): string {\n return baseUrl + `ws/res/geojson/${workspaceId}/${ref.resId}`;\n}\n\nexport function getFeatureUrl(baseUrl: string,\n workspaceId: string,\n ref: ResourceRefState,\n index: number): string {\n return baseUrl + `ws/res/geojson/${workspaceId}/${ref.resId}/${index}`;\n}\n\nexport function getCsvUrl(baseUrl: string,\n workspaceId: string,\n ref: ResourceRefState, varName?: string | null): string {\n let varPart = '';\n if (varName) {\n varPart = `?var=${encodeURIComponent(varName)}`;\n }\n return baseUrl + `ws/res/csv/${workspaceId}/${ref.resId}${varPart}`;\n}\n\nexport function getHtmlUrl(baseUrl: string, workspaceId: string, resId: number): string {\n return baseUrl + `ws/res/html/${workspaceId}/${resId}`;\n}\n\nexport function getGeoJSONCountriesUrl(baseUrl: string): string {\n return baseUrl + 'ws/countries';\n}\n\nexport function getMPLWebSocketUrl(baseUrl: string, workspaceId: string, figureId: number): string {\n return `${baseUrl}${workspaceId}/${figureId}`;\n}\n\nexport function getMPLDownloadUrl(baseUrl: string, workspaceId: string, figureId: number): string {\n return `${baseUrl}mpl/download/${workspaceId}/${figureId}`;\n}\n\nexport function isSpatialImageVariable(variable: VariableState): boolean {\n return variable.numDims && variable.numDims >= 2 && !!variable.imageLayout;\n}\n\nexport function isSpatialVectorVariable(variable: VariableState): boolean {\n return variable.isFeatureAttribute;\n}\n\nexport function genSimpleId(prefix: string): string {\n return prefix + Math.floor((1 + Math.random()) * 0x100000000).toString(16) + '-' + Math.floor(Date.now()).toString(16);\n}\n\nexport function genLayerId() {\n return genSimpleId('layer-');\n}\n\nexport function isFigureResource(resource: ResourceState | null): boolean {\n return resource && isNumber(resource.id) && resource.dataType.endsWith('.Figure');\n}\n\nexport function isAnimationResource(resource: ResourceState | null): boolean {\n return resource && isNumber(resource.id) && resource.dataType.endsWith('.HTML');\n}\n\nexport function isDataFrameResource(resource: ResourceState | null): boolean {\n return resource && (resource.dataType.endsWith('.DataFrame') || resource.dataType.endsWith('.GeoDataFrame'));\n}\n\nexport function getLayerDisplayName(layer: LayerState): string {\n if (layer.name) {\n return layer.name;\n }\n const varName = (layer as any).varName;\n const resName = (layer as any).resName;\n if (layer.id === AUTO_LAYER_ID) {\n if (resName && varName) {\n return `Selected Variable (${resName} / ${varName})`;\n }\n return `Selected Variable (none)`;\n } else {\n if (resName && varName) {\n return `${resName} / ${varName}`;\n }\n }\n return layer.id;\n}\n\nexport function getLayerTypeIconName(layer: LayerState): IconName {\n if (isVectorLayer(layer)) {\n return 'map-marker';\n } else if (layer.type === 'Image' || layer.type === 'VariableImage') {\n return 'layout-grid';\n }\n return 'layer';\n}\n\nexport function findResource(resources: ResourceState[],\n ref: ResourceRefState): ResourceState | null {\n return findResourceById(resources, ref.resId);\n}\n\nexport function findResourceByName(resources: ResourceState[],\n name: string): ResourceState | null {\n return resources.find(r => r.name === name);\n}\n\nexport function findResourceById(resources: ResourceState[],\n id: number): ResourceState | null {\n return resources.find(r => r.id === id);\n}\n\nexport function findVariable(resources: ResourceState[],\n ref: VariableRefState): VariableState | null {\n const resource = findResource(resources, ref);\n return resource && resource.variables && resource.variables.find(v => v.name === ref.varName);\n}\n\nexport function findOperation(operations: OperationState[],\n name: string): OperationState | null {\n return operations && operations.find(op => op.qualifiedName === name || op.name === name);\n}\n\nexport function findDataSource(dataStores: DataStoreState[],\n dataStoreId: string,\n dataSourceId: string): DataSourceState | null {\n const dataStore = dataStores && dataStores.find(dataStore => dataStore.id === dataStoreId);\n if (dataStore) {\n const dataSource = dataStore.dataSources\n && dataStore.dataSources.find(dataSource => dataSource.id === dataSourceId);\n if (dataSource) {\n return dataSource;\n }\n }\n return null;\n}\n\nexport function findVariableIndexCoordinates(resources: ResourceState[],\n ref: VariableDataRefState): any[] {\n const resource = findResourceById(resources, ref.resId);\n if (!resource) {\n return EMPTY_ARRAY;\n }\n const coordVariables = resource.coordVariables;\n if (!coordVariables) {\n return EMPTY_ARRAY;\n }\n const variable = resource && resource.variables.find(v => v.name === ref.varName);\n if (!variable) {\n return EMPTY_ARRAY;\n }\n const varIndex = ref.varIndex;\n if (!varIndex || !varIndex.length) {\n return EMPTY_ARRAY;\n }\n const dimNames = variable.dimNames;\n if (!dimNames || !dimNames.length) {\n return EMPTY_ARRAY;\n }\n\n const coordDataMap = {};\n coordVariables.forEach(cv => {\n coordDataMap[cv.name] = cv.data;\n });\n\n let coords = [];\n for (let i = 0; i < varIndex.length; i++) {\n const coordIndex = varIndex[i];\n const dimName = i < dimNames.length ? dimNames[i] : null;\n let coord;\n if (dimName) {\n const coordData = coordDataMap[dimName];\n if (coordData && coordData.length && coordIndex < coordData.length) {\n coord = coordData[coordIndex];\n } else {\n coord = '-';\n }\n } else {\n coord = '?';\n }\n coords.push([dimName, coord]);\n }\n return coords;\n}\n\nexport function getNonSpatialIndexers(resource: ResourceState,\n ref: VariableDataRefState): DimSizes {\n const coordVariables = resource.coordVariables;\n if (!coordVariables) {\n return EMPTY_OBJECT;\n }\n const variable = resource && resource.variables.find(v => v.name === ref.varName);\n if (!variable) {\n return EMPTY_OBJECT;\n }\n const varIndex = ref.varIndex;\n if (!varIndex || !varIndex.length) {\n return EMPTY_OBJECT;\n }\n const dimNames = variable.dimNames;\n if (!dimNames || !dimNames.length) {\n return EMPTY_OBJECT;\n }\n\n const coordDataMap = {};\n coordVariables.forEach(cv => {\n coordDataMap[cv.name] = cv.data;\n });\n\n let dimIndexers = {};\n for (let i = 0; i < varIndex.length; i++) {\n const coordIndex = varIndex[i];\n const dimName = i < dimNames.length ? dimNames[i] : null;\n if (dimName) {\n const coordData = coordDataMap[dimName];\n if (coordData && coordData.length && coordIndex < coordData.length) {\n dimIndexers[dimName] = coordData[coordIndex];\n }\n }\n }\n return dimIndexers;\n}\n\nconst newCfSBaseMap = (id: string): BaseMapState => {\n return {\n id,\n title: id[0].toUpperCase() + id.substring(1),\n options: {\n url: `https://storage.googleapis.com/esa-cfs-tiles/0.7.0/basemaps/${id}/{z}/{x}/{reverseY}.png`,\n tilingScheme: 'Geographic',\n maximumLevel: 4,\n }\n };\n};\n\nexport const BASE_MAPS: BaseMapState[] = [\n // Note, the first entry will be used as default: \"natural\" in this case.\n {\n id: 'natural',\n title: 'Natural',\n options: null,\n },\n {\n id: 'natural_offline',\n title: 'Natural (offline)',\n options: {\n url: './Cesium/Assets/Textures/NaturalEarthII/{z}/{x}/{reverseY}.jpg',\n credit: '© Analytical Graphics, Inc.',\n tilingScheme: 'Geographic',\n maximumLevel: 2\n }\n },\n newCfSBaseMap('atmosphere'),\n newCfSBaseMap('blue'),\n newCfSBaseMap('dark'),\n newCfSBaseMap('land'),\n newCfSBaseMap('ocean'),\n];\n\nexport const DEFAULT_BASE_MAP_ID = 'atmosphere';\nexport const DEFAULT_BASE_MAP = BASE_MAPS.find(bm => bm.id === 'atmosphere');\n\nfunction newInitialWorldViewData(baseMapId?: string): WorldViewDataState {\n return {\n viewMode: '3D',\n projectionCode: 'EPSG:4326',\n baseMapId: baseMapId || DEFAULT_BASE_MAP_ID,\n layers: [\n {...AUTO_LAYER} as LayerState,\n {...COUNTRIES_LAYER} as LayerState,\n {...MY_PLACES_LAYER} as LayerState,\n ],\n selectedLayerId: AUTO_LAYER_ID,\n selectedEntityId: null,\n layerSplitPosition: 0.5,\n };\n}\n\nfunction newInitialFigureViewData(resourceId: number): FigureViewDataState {\n return {\n resourceId: resourceId,\n fixedSize: false,\n };\n}\n\nfunction newInitialAnimationViewData(resourceId: number): AnimationViewDataState {\n return {\n resourceId: resourceId,\n fixedSize: false,\n };\n}\n\nfunction newInitialTableViewData(resName: string, varName: string): TableViewDataState {\n return {resName, varName, dataRows: null};\n}\n\nlet WORLD_VIEW_COUNTER = 0;\n\nexport function newWorldView(baseMapId?: string): ViewState<WorldViewDataState> {\n const viewNumber = ++WORLD_VIEW_COUNTER;\n return {\n title: `World (${viewNumber})`,\n id: genSimpleId('world-'),\n type: 'world',\n icon: 'globe',\n data: newInitialWorldViewData(baseMapId),\n };\n}\n\nexport function newFigureView(resource: ResourceState): ViewState<FigureViewDataState> {\n return {\n title: getFigureViewTitle(resource.name),\n id: `fig-${resource.id}`,\n type: 'figure',\n icon: 'timeline-area-chart',\n data: newInitialFigureViewData(resource.id),\n };\n}\n\nexport function getFigureViewTitle(resourceName: string): string {\n return `Figure - ${resourceName}`;\n}\n\nexport function newAnimationView(resource: ResourceState): ViewState<AnimationViewDataState> {\n return {\n title: getAnimationViewTitle(resource.name),\n id: `anim-${resource.id}`,\n type: 'animation',\n icon: 'play',\n data: newInitialAnimationViewData(resource.id),\n };\n}\n\nexport function getAnimationViewTitle(resourceName: string): string {\n return `Animation - ${resourceName}`;\n}\n\nexport function newTableView(resName: string, varName: string): ViewState<TableViewDataState> {\n return {\n title: varName ? `${resName}.${varName}` : resName,\n id: genSimpleId('table-'),\n type: 'table',\n icon: 'th',\n data: newInitialTableViewData(resName, varName),\n };\n}\n\n/**\n * An object that is used by CesiumGlobe to store the Cesium.Viewer instances.\n * It can't be a part of our global state object.\n */\nexport const EXTERNAL_OBJECT_STORE = {id: 'global_external_object_store'};\n\nfunction getWorldViewExternalObject(view: ViewState<any>): any {\n if (view && view.type === 'world') {\n return EXTERNAL_OBJECT_STORE['CesiumGlobe-' + view.id];\n }\n}\n\nexport function getWorldViewViewer(view: ViewState<any>): Cesium.Viewer | null {\n const externalObject = getWorldViewExternalObject(view);\n if (externalObject) {\n return externalObject.object as Cesium.Viewer;\n }\n return null;\n}\n\nexport function getWorldViewSelectedEntity(view: ViewState<any>): Cesium.Entity | null {\n const viewer = getWorldViewViewer(view);\n if (viewer && viewer.selectedEntity) {\n return viewer.selectedEntity;\n }\n return null;\n}\n\nexport function getWorldViewVectorLayerForEntity(view: ViewState<any>,\n entity: Cesium.Entity | null): VectorLayerBase | null {\n const externalObject = getWorldViewExternalObject(view);\n if (!entity || !externalObject) {\n return null;\n }\n\n const viewer = externalObject.object as Cesium.Viewer;\n assert.ok(viewer);\n\n const dataSourceMap = externalObject.state.dataSourceMap;\n assert.ok(dataSourceMap);\n\n const dataSourceCollection = viewer.dataSources;\n // Find entity in viewer's dataSourceCollection\n for (let index = 0; index < dataSourceCollection.length; index++) {\n const dataSource: Cesium.DataSource = dataSourceCollection.get(index);\n if (dataSource.entities.contains(entity)) {\n // Find dataSource in dataSourceMap of CesiumGlobe --> layerId\n for (let layerId of Object.getOwnPropertyNames(dataSourceMap)) {\n if (dataSource === dataSourceMap[layerId]) {\n // Find layer for layerId in views's layer list\n for (let layer of view.data.layers) {\n if (layer.id === layerId) {\n assert.ok(isVectorLayer(layer));\n return layer;\n }\n }\n\n }\n }\n }\n }\n\n return null;\n}\n\nexport function getWorldViewSelectedGeometryWKTGetter(view: ViewState<any>): GeometryWKTGetter {\n const selectedEntity = getWorldViewSelectedEntity(view);\n if (selectedEntity) {\n return () => entityToGeometryWkt(selectedEntity);\n }\n return null;\n}\n\nexport function isVectorLayer(layer: LayerState) {\n return layer.type === 'Vector' || layer.type === 'ResourceVector';\n}\n\nexport function isImageLayer(layer: LayerState) {\n return layer.type === 'Image' || layer.type === 'VariableImage';\n}\n\n\nconst STROKE_COLORS = [\n '#550000',\n '#005500',\n '#000055',\n '#555555',\n];\n\nconst FILL_COLORS = [\n '#FF0000',\n '#FFA500',\n '#FFFF00',\n '#00FF00',\n '#0000FF',\n '#FF00FF',\n '#00FFFF',\n];\n\nexport function newVariableLayer(resource: ResourceState,\n variable: VariableState,\n savedLayers?: { [name: string]: LayerState }): LayerState {\n assert.ok(resource);\n assert.ok(variable);\n const spatialImageVariable = variable && isSpatialImageVariable(variable);\n const spatialVectorVariable = variable && isSpatialVectorVariable(variable);\n assert.ok(spatialImageVariable || spatialVectorVariable, 'geo-spatial variable expected');\n if (spatialImageVariable) {\n const restoredLayer = (savedLayers && savedLayers[variable.name]) as VariableImageLayerState;\n const layerDisplayProperties = updateVariableLayerVarIndex(variable, restoredLayer);\n return {\n ...restoredLayer,\n id: genLayerId(),\n type: 'VariableImage',\n name: `${resource.name}.${variable.name}`,\n visible: true,\n resId: resource.id,\n resName: resource.name,\n varName: variable.name,\n ...layerDisplayProperties\n } as VariableImageLayerState;\n } else {\n const restoredLayer = (savedLayers && savedLayers[variable.name]) as ResourceVectorLayerState;\n const restoredStyle = restoredLayer && restoredLayer.style;\n return {\n ...restoredLayer,\n id: genLayerId(),\n type: 'ResourceVector',\n name: `${resource.name}`,\n visible: true,\n resId: resource.id,\n resName: resource.name,\n style: getResourceVectorStyle(resource.id, restoredStyle)\n } as ResourceVectorLayerState;\n }\n}\n\nexport function updateAutoLayer(layer: LayerState,\n resource: ResourceState,\n variable: VariableState,\n savedLayers?: SavedLayers): LayerState {\n assert.ok(layer);\n assert.ok(layer.id === AUTO_LAYER_ID);\n const spatialImageVariable = variable && isSpatialImageVariable(variable);\n const spatialVectorVariable = variable && isSpatialVectorVariable(variable);\n if (spatialImageVariable) {\n const restoredLayer = (savedLayers && savedLayers[variable.name]) as VariableImageLayerState;\n const layerDisplayProperties = updateVariableLayerVarIndex(variable, restoredLayer);\n return {\n ...layer,\n ...restoredLayer,\n type: 'VariableImage',\n name: `Auto ${resource.name}.${variable.name}`,\n resId: resource.id,\n resName: resource.name,\n varName: variable.name,\n ...layerDisplayProperties,\n id: AUTO_LAYER_ID,\n };\n } else if (spatialVectorVariable) {\n const restoredLayer = (savedLayers && savedLayers[resource.name]) as ResourceVectorLayerState;\n const restoredStyle = restoredLayer && restoredLayer.style;\n return {\n ...layer,\n ...restoredLayer,\n type: 'ResourceVector',\n name: `Auto ${resource.name}`,\n resId: resource.id,\n resName: resource.name,\n style: getResourceVectorStyle(resource.id, restoredStyle),\n id: AUTO_LAYER_ID,\n } as ResourceVectorLayerState;\n } else {\n return {\n type: 'Unknown' as any,\n name: variable ? `Auto ${variable.name} (geo-ref not found or recognized)` : 'Auto (no selection)',\n visible: layer.visible,\n id: AUTO_LAYER_ID,\n } as any;\n }\n}\n\nfunction getResourceVectorStyle(resourceId: number, restoredStyle: SimpleStyle) {\n return {\n ...SIMPLE_STYLE_DEFAULTS,\n stroke: STROKE_COLORS[resourceId % STROKE_COLORS.length],\n fill: FILL_COLORS[resourceId % FILL_COLORS.length],\n ...restoredStyle,\n };\n}\n\nexport function getLockForLoadDataSources(dataStoreId: string) {\n return `loadDataSources(\"${dataStoreId}\")`;\n}\n\nexport function getLockForGetWorkspaceVariableStatistics(resName: string, varName: string, varIndex?: number[]) {\n return getVariableLock('getWorkspaceVariableStatistics', resName, varName, varIndex);\n}\n\nfunction getVariableLock(op: string, resName: string, varName: string, varIndex: number[]) {\n if (varIndex && varIndex.length) {\n return `${op}(\"${resName}\", \"${varName}\", [${varIndex}])`;\n } else {\n return `${op}(\"${resName}\", \"${varName}\")`;\n }\n}\n\n/**\n * If there is a restoredLayer try reusing its varIndex, otherwise generate new variable display properties with\n * new varIndex.\n *\n * @param variable\n * @param restoredLayer\n * @returns {{varIndex: any}}\n */\nfunction updateVariableLayerVarIndex(variable: VariableState | null,\n restoredLayer: VariableImageLayerState | null) {\n let layerDisplayProperties;\n let varIndex;\n if (restoredLayer) {\n varIndex = restoredLayer.varIndex && restoredLayer.varIndex.slice();\n } else if (variable) {\n layerDisplayProperties = newVariableLayerDisplayProperties(variable);\n }\n if (variable) {\n varIndex = newVarIndex(variable, varIndex);\n }\n return {...layerDisplayProperties, varIndex};\n}\n\nfunction newVarIndex(variable: VariableState, varIndex) {\n const numSpatialDims = 2;\n if (variable.numDims\n && variable.numDims >= numSpatialDims\n && (!varIndex || varIndex.length !== variable.numDims - numSpatialDims)) {\n return Array(variable.numDims - numSpatialDims).fill(0);\n }\n return varIndex;\n}\n\n\nfunction newVariableLayerDisplayProperties(variable: VariableState) {\n const defaultColorMapName = 'inferno';\n const defaultDisplayMin = isNumber(variable.validMin) ? variable.validMin : 0.;\n const defaultDisplayMax = isNumber(variable.validMax) ? variable.validMax : defaultDisplayMin + 1.;\n return {\n colorMapName: isString(variable.colorMapName) ? variable.colorMapName : defaultColorMapName,\n displayMin: isNumber(variable.displayMin) ? variable.displayMin : defaultDisplayMin,\n displayMax: isNumber(variable.displayMax) ? variable.displayMax : defaultDisplayMax,\n alphaBlending: false,\n opacity: 1.0,\n brightness: 1.0,\n contrast: 1.0,\n hue: 0.0,\n saturation: 1.0,\n gamma: 1.0,\n splitMode: SPLIT_MODE_OFF,\n };\n}\n\nlet _hasWebGL = null;\n\n// from https://stackoverflow.com/questions/11871077/proper-way-to-detect-webgl-support\nexport function hasWebGL(): boolean {\n let canvas;\n let context;\n let extensions;\n\n if (_hasWebGL === null) {\n try {\n canvas = document.createElement('canvas');\n _hasWebGL = true;\n context = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n extensions = context.getSupportedExtensions();\n console.debug('WebGL supported extensions:', extensions);\n } catch (e) {\n _hasWebGL = false;\n console.warn('WebGL not supported but required by world view');\n return false;\n }\n }\n\n canvas = null;\n context = null;\n return _hasWebGL;\n}\n\n\nexport function getPlacemarkTitleAndIndex(placemark: Placemark, placemarks: PlacemarkCollection): { title: string | undefined, index: number | undefined } {\n const type = placemark.geometry.type;\n const features = placemarks.features;\n const titles = new Set<string>();\n for (let f of features) {\n const props = f.properties;\n if (props && props.title && props.title.startsWith(type)) {\n titles.add(props.title);\n }\n }\n let title, index, t;\n for (index = 1; index <= features.length + 1; index++) {\n t = `${type} ${index}`;\n if (!titles.has(t)) {\n title = t;\n break;\n }\n }\n return {title, index};\n}\n","export function ok(condition: any, message?: string) {\n if (!condition) {\n throw new Error('assertion failed' + (message ? `: ${message}` : ''));\n }\n}\n","/**\n * A web API client and related type definitions.\n *\n * The implementation is based on WebSockets with a JSON-RPC-based protocol.\n * For JSON-RPC details see http://www.jsonrpc.org/specification.\n *\n * A WebAPI server must implement a general method \"__cancel__(id: number): void\"\n * which cancels the method for the given *id*. The method call must either succeed with any \"response\" value\n * or fail by returning an \"error\" object.\n *\n * If the WebAPI server has successfully cancelled a running job, an \"error\" object with code 999\n * must be returned.\n *\n * To report progress, the WebAPI server can send \"progress\" objects:\n *\n * {\n * work?: number,\n * total?: number,\n * message?: string\n * }\n *\n * This is non JSON-RCP, which only allows for either the \"response\" or an \"error\" object.\n *\n * @author Norman Fomferra\n */\n\nimport { IconName, Intent } from '@blueprintjs/core';\nimport {\n Job,\n JobFailure,\n JobFailureHandler,\n JobProgress,\n JobProgressHandler,\n JobPromise,\n JobRequest,\n JobResponseHandler,\n JobStatus,\n JobStatusEnum\n} from './Job'\nimport { WebSocketMin } from './WebSocketMock'\n\n// IMPORTANT NOTE: The following error codes MUST BE COPIED from cate/util/web/jsonrpchandler.py\n//\n// See http://www.jsonrpc.org/specification#error_object\n// The error codes from and including -32768 to -32000 are reserved for pre-defined errors.\nexport const ERROR_CODE_INVALID_REQUEST = -32600;\nexport const ERROR_CODE_METHOD_NOT_FOUND = -32601;\nexport const ERROR_CODE_INVALID_PARAMS = -32602;\n// The error codes from and including -32000 to -32099 are reserved for implementation-defined server-errors.\nexport const ERROR_CODE_OS_ERROR = -32001;\nexport const ERROR_CODE_OUT_OF_MEMORY = -32002;\nexport const ERROR_CODE_METHOD_ERROR = -32003;\nexport const ERROR_CODE_INVALID_RESPONSE = -32004;\n// The remainder of the space is available for application defined errors.\nexport const ERROR_CODE_CANCELLED = 999;\n\nconst CANCEL_METHOD = '__cancel__';\nconst DEBUG = false;\n\n\nexport type JobResponseTransformer<JobResponse> = (any) => JobResponse;\n\n/**\n * The web API's call interface.\n *\n * The WebAPIClient class is used to perform remote calls to server-side methods and to observe\n * their progress, success, failure, or cancellation in an asynchronous fashion.\n *\n * A WebAPI server must implement a general method \"__cancel__(id: number): void\"\n * which cancels the method for the given *id*. The method call must either succeed with any \"response\" value\n * or fail by returning an \"error\" object.\n *\n * If the WebAPIClient server has successfully cancelled a running job, an \"error\" object with the code\n * given by the CANCELLED_CODE constant (999) must be returned.\n *\n * To report progress, the WebAPIClient server can send \"progress\" objects:\n *\n * {\n * id: number;\n * label?: string;\n * message?: string;\n * worked?: number;\n * total?: number;\n * }\n *\n * This is non JSON-RCP, which only allows for either the \"response\" or an \"error\" object.\n */\nexport interface WebAPIClient {\n /**\n * Test if the connection is open and active.\n */\n readonly isOpen: boolean;\n readonly url: string;\n\n onOpen: (event) => void;\n onClose: (event) => void;\n onError: (event) => void;\n onWarning: (event) => void;\n\n /**\n * Perform a JSON-RPC call.\n *\n * @param method The method name.\n * @param params The method parameters, either a list with positional arguments or an object\n * providing keyword arguments.\n * @param onProgress An optional handler that is notified while the Job progresses.\n * Note that not all server-side methods provide progress notifications.\n * @param transformer Optional transformer for the returned responses\n */\n call<JobResponse>(method: string,\n params: Array<any> | Object,\n onProgress?: (progress: JobProgress) => void,\n transformer?: JobResponseTransformer<JobResponse>): JobPromise<JobResponse>;\n\n /**\n * Cancels the job with the given ID.\n *\n * @param jobId the job ID\n */\n cancel(jobId: number);\n\n /**\n * Closes this client and the underlying connection, if any.\n */\n close(): void;\n}\n\n/**\n * Creates a new WebAPIClient.\n *\n * The implementation uses WebSockets with a JSON-RPC-based protocol.\n * For JSON-RPC details see http://www.jsonrpc.org/specification.\n *\n * @param url The WebSocket URL. WebSocket URL must start with \"ws://\".\n * @param firstMessageId The ID of the first JSON-RPC method call.\n * @param socket Alternative WebSocket instance for testing.\n * @returns {WebAPIClient} instance.\n */\nexport function newWebAPIClient(url: string, firstMessageId = 0, socket?: WebSocketMin): WebAPIClient {\n return new WebAPIClientImpl(url, firstMessageId, socket);\n}\n\nclass WebAPIClientImpl implements WebAPIClient {\n\n readonly url: string;\n onOpen: (event: Event) => void;\n onClose: (event: CloseEvent) => void;\n onError: (event: ErrorEvent) => void;\n onWarning: (event) => void;\n\n private readonly socket: WebSocketMin;\n private currentMessageId = 0;\n private readonly activeJobs: JobImpl<any>[];\n\n constructor(url: string, firstMessageId = 0, socket?: WebSocketMin) {\n this.url = url;\n this.currentMessageId = firstMessageId;\n this.activeJobs = [];\n this.socket = socket ? socket : new WebSocket(url);\n this.socket.onopen = (event: Event) => {\n if (DEBUG && process.env.NODE_ENV === 'development') {\n console.debug(\"WebSocket.onopen:\", event);\n }\n if (this.onOpen) {\n this.onOpen(event);\n }\n };\n this.socket.onclose = (event: CloseEvent) => {\n if (DEBUG && process.env.NODE_ENV === 'development') {\n console.debug(\"WebSocket.onclose:\", event);\n }\n if (this.onClose) {\n this.onClose(event);\n }\n };\n this.socket.onerror = (event: ErrorEvent) => {\n if (DEBUG && process.env.NODE_ENV === 'development') {\n console.debug(\"WebSocket.onerror:\", event);\n }\n if (this.onError) {\n this.onError(event);\n }\n };\n this.socket.onmessage = (event: MessageEvent) => {\n if (DEBUG && process.env.NODE_ENV === 'development') {\n console.debug(\"WebSocket.onmessage:\", event);\n }\n this.processMessage(event.data);\n }\n }\n\n get isOpen(): boolean {\n return this.socket.readyState === WebSocket.OPEN;\n }\n\n call<JobResponse>(method: string,\n params: Array<any> | Object,\n onProgress?: (progress: JobProgress) => void,\n transformer?: JobResponseTransformer<JobResponse>): JobPromise<JobResponse> {\n const request = {\n 'id': this.newId(),\n 'method': method,\n 'params': params,\n };\n const job = new JobImpl(this, request, transformer);\n this.activeJobs[request.id] = job;\n return job.invoke(onProgress);\n }\n\n cancel(jobId: number): void {\n const job = this.activeJobs[jobId];\n if (!job) {\n this.warn(`Job with \"id\"=${jobId} does not exist`);\n return;\n } else {\n job.cancel();\n }\n }\n\n close(): void {\n this.socket.close();\n }\n\n sendMessage(request: JobRequest) {\n // console.log('WebAPIClient.sendMessage: request=', request)\n const message = Object.assign({}, {jsonrpc: '2.0'}, request);\n const messageText = JSON.stringify(message);\n this.socket.send(messageText);\n }\n\n private processMessage(messageText: string): void {\n let message;\n try {\n // JSON does not recognise NaN\n // See https://stackoverflow.com/questions/15228651/how-to-parse-json-string-containing-nan-in-node-js\n // message = JSON.parse(messageText);\n // So we use evil eval() because JSON is valid JavaScript:\n // eslint-disable-next-line\n message = eval(`(${messageText})`);\n // We cannot use the following naive approach, because \"NaN\" appears as word in operation doc strings\n // const TEMP_NAN_STR = '[[<<~~***NaN***~~>>]]';\n // const TEMP_NAN_JSON_STR = `\"${TEMP_NAN_STR}\"`;\n // message = JSON.parse(messageText.replace(/\\bNaN\\b/g, TEMP_NAN_JSON_STR),\n // (key, value) => value === TEMP_NAN_STR ? NaN : value);\n } catch (err) {\n this.warnInvalidJsonRcpMessage('Message is no valid JSON', messageText);\n return;\n }\n if (message.jsonrpc !== '2.0' || typeof message.id !== 'number') {\n this.warnInvalidJsonRcpMessage('Message is not JSON-RCP 2.0 compliant', messageText);\n return;\n }\n\n const job = this.activeJobs[message.id];\n if (!job) {\n this.warnInvalidJsonRcpMessage(`Method with \"id\"=${message.id} has no associated job`, messageText);\n return;\n }\n\n if (message.response || message.response === null) {\n job.notifyDone(message.response);\n delete this.activeJobs[message.id];\n } else if (message.progress) {\n message.progress.id = message.id;\n job.notifyInProgress(message.progress)\n } else if (message.error) {\n job.notifyFailed(message.error);\n delete this.activeJobs[message.id];\n } else {\n this.warnInvalidJsonRcpMessage(`Method is neither a \"response\", \"progress\", nor \"error\"`, messageText);\n return;\n }\n }\n\n private warnInvalidJsonRcpMessage(detailsMessage: string, jsonRcpMessage: string) {\n if (this.onWarning) {\n const message = `Received invalid JSON-RCP message from Cate service. ${detailsMessage}. Ignoring it.\\n--------------------\\n${jsonRcpMessage}\\n--------------------`;\n this.onWarning({type: 'warning', message});\n }\n }\n\n private warn(message: string) {\n if (this.onWarning) {\n this.onWarning({type: 'warning', message});\n }\n }\n\n private newId(): number {\n return this.currentMessageId++;\n }\n}\n\n/**\n * Default implementation of the Job interface which uses the default WebAPI implementation.\n */\nclass JobImpl<JobResponse> implements Job {\n\n private webAPIClient: WebAPIClientImpl;\n private request: JobRequest;\n private status: JobStatus;\n private onProgress: JobProgressHandler;\n private onResolve: JobResponseHandler<JobResponse>;\n private onReject: JobFailureHandler;\n private transformer: JobResponseTransformer<JobResponse>;\n\n constructor(webAPIClient: WebAPIClientImpl, request: JobRequest, transformer: JobResponseTransformer<JobResponse>) {\n this.webAPIClient = webAPIClient;\n this.request = request;\n this.status = JobStatusEnum.NEW;\n this.transformer = transformer;\n }\n\n getRequest() {\n return this.request;\n }\n\n getStatus(): JobStatus {\n return this.status;\n }\n\n isCancelled(): boolean {\n return this.status === JobStatusEnum.CANCELLED;\n }\n\n cancel(onResolve?: JobResponseHandler<void>,\n onReject?: JobFailureHandler): void {\n this.webAPIClient.call<void>(CANCEL_METHOD, {id: this.request.id})\n .then(onResolve || (() => {\n }), onReject || (() => {\n }));\n }\n\n ////////////////////////////////////////////////////////////\n // Implementation details\n\n invoke(onProgress?: JobProgressHandler): JobPromise<JobResponse> {\n\n const executor = (onResolve: JobResponseHandler<JobResponse>, onReject: JobFailureHandler) => {\n this.setHandlers(onProgress, onResolve, onReject);\n this.sendMessage();\n this.setStatus(JobStatusEnum.SUBMITTED);\n };\n\n const promise = new Promise<JobResponse>(executor.bind(this));\n // Convert the plain promise into a JobPromise\n promise['getJob'] = this.getJob.bind(this);\n promise['getJobId'] = this.getJobId.bind(this);\n return promise as JobPromise<JobResponse>;\n }\n\n notifyInProgress(progress: JobProgress) {\n this.setStatus(JobStatusEnum.IN_PROGRESS);\n if (this.onProgress) {\n this.onProgress(progress);\n }\n }\n\n notifyDone(response: JobResponse) {\n this.setStatus(JobStatusEnum.DONE);\n if (this.onResolve) {\n this.onResolve(this.transformer ? this.transformer(response) : response);\n }\n }\n\n notifyFailed(failure: JobFailure) {\n this.setStatus(failure.code === ERROR_CODE_CANCELLED ? JobStatusEnum.CANCELLED : JobStatusEnum.FAILED);\n if (this.onReject) {\n this.onReject(failure);\n }\n }\n\n private getJob(): Job {\n return this;\n }\n\n private getJobId(): number {\n return this.getRequest().id;\n }\n\n private setHandlers(onProgress, onResolve, onReject) {\n this.onProgress = onProgress;\n this.onResolve = onResolve;\n this.onReject = onReject;\n }\n\n private sendMessage() {\n this.webAPIClient.sendMessage(this.request);\n }\n\n private setStatus(status: JobStatus) {\n this.status = status;\n }\n}\n\nexport function getJobFailureIntentName(failure: JobFailure): Intent {\n if (failure) {\n switch (failure.code) {\n case ERROR_CODE_INVALID_PARAMS:\n case ERROR_CODE_CANCELLED:\n return Intent.PRIMARY;\n case ERROR_CODE_OS_ERROR:\n return Intent.WARNING;\n default:\n return Intent.WARNING;\n }\n }\n return Intent.WARNING;\n}\n\nexport function getJobFailureIconName(failure: JobFailure): IconName {\n if (failure) {\n if (failure.data) {\n if (failure.data.exception === 'cate.core.ds.NetworkError') {\n return 'offline';\n }\n if (failure.data.exception === 'cate.core.ds.DataAccessError') {\n return 'database';\n }\n }\n switch (failure.code) {\n case ERROR_CODE_INVALID_PARAMS:\n return 'manually-entered-data';\n case ERROR_CODE_CANCELLED:\n return 'hand';\n default:\n return 'error';\n }\n }\n return 'warning-sign';\n}\n\nexport function getJobFailureTitle(failure: JobFailure): string {\n\n if (failure) {\n console.log(failure);\n if (failure.data) {\n if (failure.data.exception === 'cate.core.ds.NetworkError') {\n return 'Network Problem';\n }\n if (failure.data.exception === 'cate.core.ds.DataAccessError') {\n return 'Data Access Error';\n }\n }\n switch (failure.code) {\n case ERROR_CODE_INVALID_PARAMS:\n return 'Invalid Input';\n case ERROR_CODE_OUT_OF_MEMORY:\n return 'Out-Of-Memory Error';\n case ERROR_CODE_OS_ERROR:\n return 'External Problem';\n case ERROR_CODE_CANCELLED:\n return 'Task Cancelled';\n case ERROR_CODE_METHOD_NOT_FOUND:\n return 'Internal Error (Method Not Found)';\n case ERROR_CODE_INVALID_REQUEST:\n return 'Internal Error (Invalid Request)';\n case ERROR_CODE_INVALID_RESPONSE:\n return 'Internal Error (Invalid Response)';\n case ERROR_CODE_METHOD_ERROR:\n return 'Operation Error';\n }\n }\n\n return 'Unknown Error';\n}\n\nconst NON_DEVELOPER_ERRORS = [\n ERROR_CODE_INVALID_PARAMS,\n ERROR_CODE_CANCELLED,\n ERROR_CODE_OS_ERROR,\n ERROR_CODE_OUT_OF_MEMORY,\n];\n\nexport function isDeveloperError(failure: JobFailure): boolean {\n return NON_DEVELOPER_ERRORS.indexOf(failure.code) < 0;\n}\n\n\nconst USER_ERRORS = [\n ERROR_CODE_INVALID_PARAMS,\n ERROR_CODE_CANCELLED,\n];\n\nexport function isUserError(failure: JobFailure): boolean {\n return USER_ERRORS.indexOf(failure.code) >= 0;\n}\n","import { DatasetDescriptor, DataSourceState, DataStoreState, DimSizes } from '../../state';\nimport { JobProgress, JobPromise } from '../Job';\nimport { WebAPIClient } from '../WebAPIClient';\n\n\nexport class DatasetAPI {\n private readonly webAPIClient: WebAPIClient;\n\n constructor(webAPIClient: WebAPIClient) {\n this.webAPIClient = webAPIClient;\n }\n\n getDataStores(): JobPromise<DataStoreState[]> {\n return this.webAPIClient.call('get_data_stores', []);\n }\n\n getDataSources(dataStoreId: string,\n onProgress: (progress: JobProgress) => void): JobPromise<DataSourceState[]> {\n return this.webAPIClient.call('get_data_sources',\n [dataStoreId],\n onProgress,\n DatasetAPI.responseToDataSources);\n }\n\n getDataSourceMetaInfo(dataStoreId: string, dataSourceId: string,\n onProgress: (progress: JobProgress) => void): JobPromise<DatasetDescriptor> {\n return this.webAPIClient.call('get_data_source_meta_info',\n [dataStoreId, dataSourceId],\n onProgress,\n DatasetAPI.responseToMetaInfo);\n }\n\n addLocalDataSource(dataSourceId: string, filePathPattern: string,\n onProgress: (progress: JobProgress) => void): JobPromise<DataSourceState[]> {\n return this.webAPIClient.call('add_local_data_source',\n [dataSourceId, filePathPattern],\n onProgress);\n }\n\n removeLocalDataSource(dataSourceId: string, removeFiles: boolean,\n onProgress: (progress: JobProgress) => void): JobPromise<DataSourceState[]> {\n return this.webAPIClient.call('remove_local_data_source',\n [dataSourceId, removeFiles],\n onProgress);\n }\n\n extractPixelValues(baseDir: string,\n source: string,\n point: [number, number],\n indexers: DimSizes): JobPromise<{ [varName: string]: number } | null> {\n return this.webAPIClient.call('extract_pixel_values', [baseDir, source, point, indexers]);\n }\n\n static responseToDataSources(dataSources: any[]): DataSourceState[] {\n // noinspection JSUnusedLocalSymbols\n return dataSources.map((dataSource, i): DataSourceState => {\n console.debug(`dataSources[${i}]:`, dataSource);\n return {\n id: dataSource['id'],\n title: dataSource['title'],\n dataType: dataSource['data_type'] || 'dataset',\n capabilities: dataSource['verification_flags'],\n metaInfoStatus: 'init',\n };\n });\n }\n\n static responseToMetaInfo(response: any): DatasetDescriptor {\n return response as DatasetDescriptor;\n }\n}\n\n","import { OperationInputState, OperationOutputState, OperationState } from '../../state';\nimport { JobPromise } from '../Job';\nimport { WebAPIClient } from '../WebAPIClient';\n\nfunction responseToOperations(operationsResponse: any): OperationState[] {\n return operationsResponse ? operationsResponse.map(responseOperationToOperation) : null;\n}\n\nfunction responseOperationToOperation(op: any): OperationState {\n return {\n qualifiedName: op.qualified_name,\n name: op.name || op.qualified_name,\n description: (op.header && op.header.description) || null,\n tags: (op.header && op.header.tags) || [],\n hasMonitor: (op.has_monitor || false),\n inputs: op.inputs.map(responseInputToOperationInput),\n outputs: op.outputs.map(responseOutputToOperationOutput),\n }\n}\n\nfunction responseInputToOperationInput(input: any): OperationInputState {\n return {\n name: input.name,\n dataType: input.data_type,\n description: (input.description || null),\n units: input.units,\n password: input.password,\n /* optional properties used mainly for validation */\n defaultValue: input.default_value,\n nullable: (input.nullable || input.default_value === null),\n valueSet: input.value_set,\n valueSetSource: input.value_set_source,\n valueRange: input.value_range,\n scriptLang: input.script_lang,\n fileOpenMode: input.file_open_mode,\n fileFilters: input.file_filters,\n fileProps: input.file_props,\n noUI: input.no_ui || input.step_id,\n };\n}\n\nfunction responseOutputToOperationOutput(output: any): OperationOutputState {\n return {\n name: output.name,\n dataType: output.data_type,\n description: (output.description || null),\n };\n}\n\nexport class OperationAPI {\n private webAPIClient: WebAPIClient;\n\n constructor(webAPI: WebAPIClient) {\n this.webAPIClient = webAPI;\n }\n\n getOperations(): JobPromise<OperationState[]> {\n return this.webAPIClient.call('get_operations', [], null, responseToOperations);\n }\n\n /*\n callOperation(opName: string, opParams: any, onProgress: (progress: JobProgress) => void): JobPromise<any> {\n return this.webAPIClient.call('call_operation', [opName, opParams], onProgress);\n }\n */\n}\n","import { isDefined, isNumber } from '../../../common/types';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from '../../selectors';\nimport { ImageStatisticsState, OperationKWArgs, ResourceState, VariableState, WorkspaceState } from '../../state';\nimport { JobProgress, JobPromise } from '../Job';\nimport { WebAPIClient } from '../WebAPIClient';\n\nfunction responseToVariables(variablesResponse: any): VariableState[] {\n return (variablesResponse || EMPTY_ARRAY).map(v => {\n const attributes = v.attributes || EMPTY_OBJECT;\n let validMin = attributes['valid_min'];\n let validMax = attributes['valid_max'];\n const validRange = attributes['valid_range'];\n const rangeOk = isDefined(validRange) && validRange.length === 2;\n validMin = (!isNumber(validMin) && rangeOk && isNumber(validRange[0])) ? validRange[0] : validMin;\n validMax = (!isNumber(validMax) && rangeOk && isNumber(validRange[1])) ? validRange[1] : validMax;\n const units = attributes['units'];\n if (units === 'kelvin' || units === 'Kelvin') {\n const validMinMin = 270;\n const validMaxMax = validMinMin + 40;\n if (!isNumber(validMin) || validMin < validMinMin) {\n validMin = validMinMin;\n }\n if (!isNumber(validMax) || validMax > validMaxMax) {\n validMax = validMaxMax;\n }\n }\n return {\n ...v,\n units,\n validMin,\n validMax,\n };\n });\n}\n\nfunction responseToResources(resourcesResponse: any): ResourceState[] {\n return (resourcesResponse || EMPTY_ARRAY).map(r => {\n if (r.variables) {\n return {...r, variables: responseToVariables(r.variables)};\n }\n return r;\n });\n}\n\nfunction responseToWorkspace(workspaceResponse: any): WorkspaceState {\n if (!workspaceResponse) {\n return null;\n }\n return {\n baseDir: workspaceResponse.base_dir,\n description: workspaceResponse.description,\n isScratch: workspaceResponse.is_scratch,\n isModified: workspaceResponse.is_modified,\n isSaved: workspaceResponse.is_saved,\n workflow: workspaceResponse.workflow,\n resources: responseToResources(workspaceResponse.resources),\n };\n}\n\nfunction responseToWorkspaceAndResName(workspaceAndResNameResponse: any): [WorkspaceState, string] {\n return [responseToWorkspace(workspaceAndResNameResponse[0]), workspaceAndResNameResponse[1]];\n}\n\nexport class WorkspaceAPI {\n private webAPIClient: WebAPIClient;\n\n constructor(webAPI: WebAPIClient) {\n this.webAPIClient = webAPI;\n }\n\n listWorkspaces(): JobPromise<string[]> {\n return this.webAPIClient.call('list_workspace_names', []);\n }\n\n newWorkspace(baseDir: string | null): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('new_workspace',\n [baseDir],\n null,\n responseToWorkspace);\n }\n\n openWorkspace(baseDir: string,\n onProgress: (progress: JobProgress) => void): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('open_workspace',\n [baseDir],\n onProgress,\n responseToWorkspace);\n }\n\n closeWorkspace(baseDir: string): JobPromise<null> {\n return this.webAPIClient.call('close_workspace',\n [baseDir]);\n }\n\n saveWorkspace(baseDir: string,\n onProgress: (progress: JobProgress) => void): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('save_workspace',\n [baseDir],\n onProgress,\n responseToWorkspace);\n }\n\n saveWorkspaceAs(baseDir: string, toDir: string,\n onProgress: (progress: JobProgress) => void): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('save_workspace_as',\n [baseDir, toDir],\n onProgress,\n responseToWorkspace);\n }\n\n cleanWorkspace(baseDir: string): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('clean_workspace',\n [baseDir],\n null, responseToWorkspace);\n }\n\n setWorkspaceResource(baseDir: string,\n opName: string,\n opArgs: OperationKWArgs,\n resName: string | null,\n overwrite: boolean,\n onProgress: (progress: JobProgress) => void): JobPromise<[WorkspaceState, string]> {\n return this.webAPIClient.call('set_workspace_resource',\n [baseDir, opName, opArgs, resName, overwrite],\n onProgress,\n responseToWorkspaceAndResName);\n }\n\n setWorkspaceResourcePersistence(baseDir: string, resName: string, persistent: boolean): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('set_workspace_resource_persistence',\n [baseDir, resName, persistent],\n null,\n responseToWorkspace);\n }\n\n runOpInWorkspace(baseDir: string,\n opName: string,\n opArgs: OperationKWArgs,\n onProgress: (progress: JobProgress) => void): JobPromise<any> {\n return this.webAPIClient.call('run_op_in_workspace',\n [baseDir, opName, opArgs], onProgress);\n }\n\n renameWorkspaceResource(baseDir: string, resName: string, newResName: string): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('rename_workspace_resource',\n [baseDir, resName, newResName],\n null,\n responseToWorkspace);\n }\n\n deleteWorkspace(baseDir: string, deleteEntireWorkspace = true): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('delete_workspace',\n [baseDir, deleteEntireWorkspace],\n null,\n responseToWorkspace);\n }\n\n deleteWorkspaceResource(baseDir: string, resName: string): JobPromise<WorkspaceState> {\n return this.webAPIClient.call('delete_workspace_resource',\n [baseDir, resName],\n null,\n responseToWorkspace);\n }\n\n getWorkspaceVariableStatistics(baseDir: string, resName: string, varName: string, varIndex: Array<number> | null,\n onProgress: (progress: JobProgress) => void): JobPromise<ImageStatisticsState> {\n return this.webAPIClient.call('get_workspace_variable_statistics',\n [baseDir, resName, varName, varIndex],\n onProgress);\n }\n}\n","import { BackendConfigState } from '../../state';\nimport { JobPromise } from '../Job';\nimport { WebAPIClient } from '../WebAPIClient';\n\n\nfunction fromPythonConfig(configResponse: any): BackendConfigState | null {\n if (!configResponse) {\n return null;\n }\n return {\n dataStoresPath: configResponse.data_stores_path,\n useWorkspaceImageryCache: configResponse.use_workspace_imagery_cache,\n resourceNamePattern: configResponse.default_res_pattern,\n proxyUrl: configResponse.http_proxy\n };\n}\n\nfunction toPythonConfig(backendConfig: BackendConfigState): any {\n if (!backendConfig) {\n return {};\n }\n return {\n data_stores_path: backendConfig.dataStoresPath,\n use_workspace_imagery_cache: backendConfig.useWorkspaceImageryCache,\n default_res_pattern: backendConfig.resourceNamePattern,\n http_proxy: backendConfig.proxyUrl\n };\n}\n\nexport class BackendConfigAPI {\n private webAPIClient: WebAPIClient;\n\n constructor(webAPI: WebAPIClient) {\n this.webAPIClient = webAPI;\n }\n\n getBackendConfig(): JobPromise<BackendConfigState> {\n return this.webAPIClient.call('get_config', [], null, fromPythonConfig);\n }\n\n setBackendConfig(config: BackendConfigState): JobPromise<null> {\n return this.webAPIClient.call('set_config', [toPythonConfig(config)]);\n }\n}\n","import { ColorMapCategoryState } from '../../state';\nimport { JobPromise } from '../Job';\nimport { WebAPIClient } from '../WebAPIClient';\n\n\nfunction responseToColorMaps(colorMapsResponse: any[][]): ColorMapCategoryState[] {\n if (!colorMapsResponse) {\n return null;\n }\n return colorMapsResponse.map((v1: any[]) => {\n return {\n name: v1[0],\n description: v1[1],\n colorMaps: v1[2].map((v2) => {\n return {\n name: v2[0],\n imageData: v2[1]\n };\n })\n };\n });\n}\n\nexport class ColorMapsAPI {\n private readonly webAPIClient: WebAPIClient;\n\n constructor(webAPIClient: WebAPIClient) {\n this.webAPIClient = webAPIClient;\n }\n\n getColorMaps(): JobPromise<ColorMapCategoryState[]> {\n return this.webAPIClient.call('get_color_maps', [], null, responseToColorMaps);\n }\n}\n","import { WebAPIClient } from '../WebAPIClient';\nimport { JobPromise } from '../Job';\nimport { FileNode } from '../../components/desktop/fs/FileNode';\n\n\nexport class FileSystemAPI {\n private webAPIClient: WebAPIClient;\n\n constructor(webAPI: WebAPIClient) {\n this.webAPIClient = webAPI;\n }\n\n updateFileNode(path: string): JobPromise<FileNode> {\n return this.webAPIClient.call<FileNode>('update_file_node', [path]);\n }\n}\n","\nexport class ServiceShutdownAPI {\n shutdown(serviceURL: string): Promise<null> {\n return fetch(serviceURL + \"/exit\")\n .then(() => null);\n }\n}\n","module.exports = __webpack_public_path__ + \"static/media/cate-icon-128.4edcc198.png\";","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { FieldValue, toTextValue } from '../../components/field/Field';\nimport { TextField } from '../../components/field/TextField';\n\n// Note: DictValueEditor and ArbitraryValueEditor are almost the same - use the React HLC pattern\n\ninterface IDictValueEditorProps extends IValueEditorProps<string> {\n}\n\nexport class DictValueEditor extends React.Component<IDictValueEditorProps, null> {\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n\n constructor(props: IDictValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n render() {\n const textValue = toTextValue(this.props.value);\n return (\n <TextField\n value={textValue}\n validator={validateDictText}\n size={36}\n placeholder='Enter key-value pairs (Python), separated by comma'\n onChange={this.onChange}\n style={DictValueEditor.TEXT_FIELD_STYLE}\n nullable={this.props.input.nullable}\n />\n );\n }\n}\n\nexport function validateDictText(value: string | null) {\n if (!value || value.trim() === '') {\n return;\n }\n // Define Python eval context:\n //\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const None = null;\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const True = true;\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const False = false;\n //\n // To validate, e.g. \"layers=3, time=19\", try eval(\"var layers=3, time=19;\")\n // which should succeed if value is fine\n // eslint-disable-next-line\n eval(`var ${value};`);\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { FieldValue, toTextValue } from '../../components/field/Field';\nimport { TextField } from '../../components/field/TextField';\n\n// Note: DictValueEditor and LiteralValueEditor are almost the same - use the React HLC pattern\n\ninterface ILiteralValueEditorProps extends IValueEditorProps<string> {\n placeholder?: string;\n validator?: (value: any) => void;\n}\n\nexport class LiteralValueEditor extends React.Component<ILiteralValueEditorProps, null> {\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n\n constructor(props: ILiteralValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n render() {\n const textValue = toTextValue(this.props.value);\n return (\n <TextField\n value={textValue}\n validator={this.props.validator || validatePythonLiteralText}\n size={36}\n placeholder={this.props.placeholder || 'Enter constant (Python) literal'}\n onChange={this.onChange}\n style={LiteralValueEditor.TEXT_FIELD_STYLE}\n />\n );\n }\n}\n\nexport function validatePythonLiteralText(value: string | null) {\n if (!value || value.trim() === '') {\n return;\n }\n // Define Python eval context:\n //\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const None = null;\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const True = true;\n //noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n const False = false;\n //\n // Use JavaScript's eval() to validate Python literals.\n // This is not exact, but works for most literals.\n // eslint-disable-next-line\n eval(value);\n}\n","import * as React from 'react';\nimport { AnchorButton, Classes, Dialog, IconName, Intent, Tooltip } from '@blueprintjs/core';\n\ninterface IModalDialogProps {\n isOpen: boolean;\n title?: string;\n confirmIconName?: IconName;\n confirmTitle?: string;\n confirmTooltip?: JSX.Element | string;\n icon?: IconName;\n renderBody?: () => JSX.Element | JSX.Element[];\n renderActions?: () => JSX.Element[];\n renderExtraActions?: () => JSX.Element[];\n onConfirm?: () => void;\n onCancel?: () => void;\n canConfirm?: () => boolean;\n noCancelButton?: boolean;\n style?: React.CSSProperties;\n}\n\ntype IModalDialogState = any;\n\nexport class ModalDialog extends React.Component<IModalDialogProps, IModalDialogState> {\n\n render() {\n if (!this.props.isOpen) {\n return null;\n }\n return (\n <Dialog\n isOpen={this.props.isOpen}\n title={this.props.title}\n icon={this.props.icon}\n onClose={this.props.onCancel}\n autoFocus={true}\n canEscapeKeyClose={true}\n canOutsideClickClose={false}\n enforceFocus={true}\n style={this.props.style}\n >\n {this.renderDialogContent()}\n {this.renderDialogFooter()}\n </Dialog>\n );\n }\n\n private renderDialogContent() {\n return (\n <div className={Classes.DIALOG_BODY}>\n {this.props.renderBody ? this.props.renderBody() : this.props.children}\n </div>\n );\n }\n\n private renderDialogFooter() {\n return (\n <div className={Classes.DIALOG_FOOTER}>\n <div className={Classes.DIALOG_FOOTER_ACTIONS}>\n {this.props.renderActions ? this.props.renderActions() : this.renderActions()}\n </div>\n </div>\n );\n }\n\n private renderActions() {\n const canConfirm = this.props.canConfirm ? this.props.canConfirm() : true;\n\n let cancelButton;\n if (!this.props.noCancelButton) {\n cancelButton = (<AnchorButton key=\"cancel\"\n onClick={this.props.onCancel}>Cancel</AnchorButton>);\n }\n\n let confirmButton = (<AnchorButton key=\"confirm\"\n onClick={this.props.onConfirm}\n intent={Intent.PRIMARY}\n disabled={!canConfirm}\n icon={this.props.confirmIconName}>{this.props.confirmTitle || 'OK'}</AnchorButton>);\n\n if (this.props.confirmTooltip) {\n confirmButton = (\n <Tooltip key=\"confirmTooltip\" content={this.props.confirmTooltip}>{confirmButton}</Tooltip>);\n }\n\n let extraActions;\n if (this.props.renderExtraActions) {\n extraActions = this.props.renderExtraActions();\n }\n\n return extraActions ? [cancelButton, ...extraActions, confirmButton] : [cancelButton, confirmButton];\n }\n}\n\n","import * as React from 'react';\nimport { AnimationViewDataState, ResourceState, State } from '../state';\nimport { connect, DispatchProp } from 'react-redux';\nimport { ViewState } from '../components/ViewState';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { Card } from '@blueprintjs/core';\nimport { isNumber } from '../../common/types';\n\n\ninterface IAnimationViewOwnProps {\n view: ViewState<AnimationViewDataState>;\n}\n\ninterface IAnimationViewProps extends IAnimationViewOwnProps {\n baseUrl: string;\n baseDir: string | null;\n animationResources: ResourceState[];\n mplWebSocketUrl: string;\n}\n\ninterface IAnimationViewState {\n loading?: boolean;\n}\n\nfunction mapStateToProps(state: State, ownProps: IAnimationViewOwnProps): IAnimationViewProps {\n return {\n view: ownProps.view,\n baseUrl: selectors.webAPIRestUrlSelector(state),\n baseDir: selectors.workspaceBaseDirSelector(state),\n animationResources: selectors.animationResourcesSelector(state),\n mplWebSocketUrl: selectors.mplWebSocketUrlSelector(state),\n };\n}\n\n/**\n * This component displays a 2D map with a number of layers.\n */\nclass AnimationView extends React.Component<IAnimationViewProps & DispatchProp<State>, IAnimationViewState> {\n static readonly DIV_STYLE: React.CSSProperties = {\n width: '100%',\n height: '100%',\n //height: 400,\n overflowX: 'hidden',\n overflowY: 'auto'\n };\n\n constructor(props: IAnimationViewProps & DispatchProp<State>) {\n super(props);\n this.state = {};\n this.divElement = null;\n this.onRef = this.onRef.bind(this)\n }\n\n private divElement;\n\n componentWillMount(): void {\n if (!this.props.view.data.innerHTML && !this.state.loading) {\n this.setState({loading: true}, () => {\n this.props.dispatch(actions.loadAnimationViewData(this.props.view.id, this.props.view.data.resourceId) as any);\n });\n }\n }\n\n private onRef(divElement: HTMLDivElement) {\n this.divElement = divElement;\n\n if (divElement && this.props.view.data.innerHTML) {\n const elements = divElement.getElementsByTagName('script');\n for (let i = 0; i < elements.length; i++) {\n const script = elements[i].innerHTML;\n try {\n // indirect eval call evaluates in global scope\n // eslint-disable-next-line\n eval('eval')(script);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n render() {\n const animationResource = this.getAnimationResource();\n if (!animationResource) {\n return (<Card>Animation not found.</Card>);\n }\n\n const animationViewData = this.props.view.data;\n let innerHTML = animationViewData.innerHTML;\n let status = animationViewData.status;\n if (innerHTML) {\n //console.log(\"AnimationView: \", innerHTML);\n return (\n <div style={AnimationView.DIV_STYLE}\n dangerouslySetInnerHTML={{__html: innerHTML}}\n ref={this.onRef}\n />\n );\n } else if (isNumber(status) && (status < 200 || status >= 300)) {\n return (<Card>`Error loading animation (status ${animationViewData.status}`)</Card>);\n } else if (this.state.loading) {\n return (<Card>Loading animation...</Card>);\n } else {\n return (<Card>???</Card>);\n }\n }\n\n getAnimationResource(): ResourceState | null {\n const animationViewData = this.props.view.data;\n return this.props.animationResources.find(r => r.id === animationViewData.resourceId);\n }\n}\n\nexport default connect(mapStateToProps)(AnimationView);\n\n\n","export const OBJECT_TYPE = 'object';\nexport const BOOL_TYPE = 'bool';\nexport const INT_TYPE = 'int';\nexport const FLOAT_TYPE = 'float';\nexport const STR_TYPE = 'str';\nexport const PASSWD_TYPE = 'cate.core.types.Password';\n\nexport const ND_ARRAY_TYPE = 'numpy.ndarray';\n\nexport const DATASET_TYPE = 'xarray.core.dataset.Dataset';\nexport const DATA_ARRAY_TYPE = 'xarray.core.dataarray.DataArray';\nexport const DATA_FRAME_TYPE = 'pandas.core.frame.DataFrame';\nexport const GEO_DATA_FRAME_TYPE = 'geopandas.geodataframe.GeoDataFrame';\nexport const GEO_SERIES_TYPE = 'geopandas.geoseries.GeoSeries';\nexport const SERIES_TYPE = 'pandas.core.series.Series';\n\nexport const DATASET_LIKE_TYPE = 'cate.core.types.DatasetLike';\nexport const DATA_FRAME_LIKE_TYPE = 'cate.core.types.DataFrameLike';\nexport const POINT_LIKE_TYPE = 'cate.core.types.PointLike';\nexport const POLYGON_LIKE_TYPE = 'cate.core.types.PolygonLike';\nexport const GEOMETRY_LIKE_TYPE = 'cate.core.types.GeometryLike';\nexport const GEO_DATA_FRAME_PROXY_TYPE = 'cate.core.types.GeoDataFrame';\nexport const TIME_LIKE_TYPE = 'cate.core.types.TimeLike';\nexport const TIME_RANGE_LIKE_TYPE = 'cate.core.types.TimeRangeLike';\nexport const VAR_NAME_LIKE_TYPE = 'cate.core.types.VarName';\nexport const VAR_NAMES_LIKE_TYPE = 'cate.core.types.VarNamesLike';\nexport const DIM_NAME_LIKE_TYPE = 'cate.core.types.DimName';\nexport const DIM_NAMES_LIKE_TYPE = 'cate.core.types.DimNamesLike';\nexport const DICT_LIKE_TYPE = 'cate.core.types.DictLike';\nexport const FILE_LIKE_TYPE = 'cate.core.types.FileLike';\nexport const ARBITRARY_TYPE = 'cate.core.types.Arbitrary';\nexport const LITERAL_TYPE = 'cate.core.types.Literal';\n\nexport const GEOMETRY_TYPE = 'shapely.geometry.base.BaseGeometry';\nexport const POINT_TYPE = 'shapely.geometry.point.Point';\nexport const MULTI_POINT_TYPE = 'shapely.geometry.multipoint.MultiPoint';\nexport const LINE_STRING_TYPE = 'shapely.geometry.linestring.LineString';\nexport const MULTI_LINE_STRING_TYPE = 'shapely.geometry.multilinestring.MultiLineString';\nexport const POLYGON_TYPE = 'shapely.geometry.polygon.Polygon';\nexport const MULTI_POLYGON_TYPE = 'shapely.geometry.multipolygon.multiPolygon';\nexport const GEOMETRY_COLLECTION_TYPE = 'shapely.geometry.collection.GeometryCollection';\n\n\n/**\n * Naive test if a targetDataType is assignable from a given sourceDataType.\n *\n * @param targetDataType The name of the target data type used in Cate's Python API\n * @param sourceDataType The name of the source data type used in Cate's Python API\n * @returns {boolean} true, if so.\n */\nexport function isAssignableFrom(targetDataType: string, sourceDataType: string) {\n if (!targetDataType || !sourceDataType) {\n return false;\n }\n if (targetDataType === sourceDataType) {\n return true;\n }\n switch (targetDataType) {\n case OBJECT_TYPE:\n case ARBITRARY_TYPE:\n return true;\n case LITERAL_TYPE:\n return sourceDataType === STR_TYPE;\n case BOOL_TYPE:\n return sourceDataType === INT_TYPE || sourceDataType === FLOAT_TYPE;\n case INT_TYPE:\n return sourceDataType === BOOL_TYPE;\n case FLOAT_TYPE:\n return sourceDataType === BOOL_TYPE || sourceDataType === INT_TYPE;\n case ND_ARRAY_TYPE:\n return sourceDataType === DATA_ARRAY_TYPE;\n case DATA_FRAME_TYPE:\n return sourceDataType === DATA_FRAME_LIKE_TYPE || sourceDataType === GEO_DATA_FRAME_TYPE\n || sourceDataType === GEO_DATA_FRAME_PROXY_TYPE;\n case DATA_FRAME_LIKE_TYPE:\n return sourceDataType === DATA_FRAME_TYPE\n || sourceDataType === GEO_DATA_FRAME_TYPE || sourceDataType === GEO_DATA_FRAME_PROXY_TYPE\n || sourceDataType === DATASET_TYPE || sourceDataType === DATASET_LIKE_TYPE;\n case GEO_DATA_FRAME_TYPE:\n return sourceDataType === GEO_DATA_FRAME_PROXY_TYPE;\n case DATASET_TYPE:\n return sourceDataType === DATASET_LIKE_TYPE;\n case DATASET_LIKE_TYPE:\n return sourceDataType === DATASET_TYPE || sourceDataType === DATA_FRAME_TYPE;\n case SERIES_TYPE:\n return sourceDataType === GEO_SERIES_TYPE;\n case VAR_NAME_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case VAR_NAMES_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case DIM_NAME_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case DIM_NAMES_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case DICT_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case FILE_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case TIME_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case TIME_RANGE_LIKE_TYPE:\n return sourceDataType === STR_TYPE;\n case POINT_LIKE_TYPE:\n return sourceDataType === STR_TYPE || sourceDataType === POINT_TYPE;\n case POLYGON_LIKE_TYPE:\n return sourceDataType === STR_TYPE || sourceDataType === POLYGON_TYPE;\n case GEOMETRY_LIKE_TYPE:\n return sourceDataType === STR_TYPE\n || sourceDataType === POINT_LIKE_TYPE\n || sourceDataType === POLYGON_LIKE_TYPE\n || sourceDataType === GEOMETRY_TYPE\n || sourceDataType === POINT_TYPE\n || sourceDataType === MULTI_POINT_TYPE\n || sourceDataType === LINE_STRING_TYPE\n || sourceDataType === MULTI_LINE_STRING_TYPE\n || sourceDataType === POLYGON_TYPE\n || sourceDataType === MULTI_POLYGON_TYPE\n || sourceDataType === GEOMETRY_COLLECTION_TYPE;\n }\n return false;\n}\n","import * as React from 'react'\n\n//import './ListBox.css'\n\nexport enum ListBoxSelectionMode {\n SINGLE,\n MULTIPLE\n}\n\n\nexport interface IListBoxProps {\n items: any[];\n renderItem: (item: any, itemIndex: number) => JSX.Element;\n getItemKey?: (item: any, itemIndex: number) => React.Key;\n onItemClick?: (item: any, itemIndex: number) => void;\n onItemDoubleClick?: (item: any, itemIndex: number) => void;\n onSelection?: (newSelection: React.Key[], oldSelection: React.Key[]) => void;\n selectionMode?: ListBoxSelectionMode;\n selection?: React.Key[] | React.Key | null;\n style?: Object;\n itemStyle?: Object;\n}\n\n/**\n * A ListBox is used similar to Blueprint's `Table` component.\n *\n * @author Norman Fomferra\n */\nexport class ListBox extends React.PureComponent<IListBoxProps, any> {\n\n handleClick(event: MouseEvent, itemIndex, key: string | number) {\n // console.log('handleClick', event.button, event.buttons,event.bubbles, event.detail);\n if (event.detail === 2) {\n return;\n }\n if (this.props.onSelection) {\n const oldSelection = toSelectionArray(this.props.selection);\n let newSelection;\n if (this.props.selection) {\n const selectionMode = this.props.selectionMode || ListBoxSelectionMode.SINGLE;\n const itemIndex = oldSelection.findIndex(k => k === key);\n if (itemIndex >= 0) {\n newSelection = oldSelection.slice();\n newSelection.splice(itemIndex, 1);\n } else {\n if (selectionMode === ListBoxSelectionMode.SINGLE) {\n newSelection = [key];\n } else if (selectionMode === ListBoxSelectionMode.MULTIPLE) {\n newSelection = oldSelection.slice();\n newSelection.push(key);\n }\n }\n } else {\n newSelection = [key];\n }\n this.props.onSelection(newSelection, oldSelection);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(this.props.items[itemIndex], itemIndex);\n }\n }\n\n handleDoubleClick(event, itemIndex) {\n // console.log('handleDoubleClick', event.button, event.buttons,event.bubbles, event.detail);\n if (this.props.onItemDoubleClick) {\n this.props.onItemDoubleClick(this.props.items[itemIndex], itemIndex);\n }\n }\n\n render() {\n const items = this.props.items;\n if (!items) {\n return null;\n }\n\n const selection = new Set<any>(toSelectionArray(this.props.selection));\n const getItemKey = this.props.getItemKey || ((item: any, itemIndex: number) => itemIndex);\n const renderItem = this.props.renderItem;\n //noinspection JSMismatchedCollectionQueryUpdate\n let renderedItems: Array<JSX.Element> = [];\n for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n const item = items[itemIndex];\n const key = getItemKey(item, itemIndex);\n const renderedItem = renderItem(item, itemIndex);\n const selected = selection.has(key);\n const className = selected ? 'cate-selected' : null;\n renderedItems.push(\n <li key={key}\n onClick={(event) => this.handleClick(event as any, itemIndex, key)}\n onDoubleClick={(event) => this.handleDoubleClick(event as any, itemIndex)}\n className={className}\n style={this.props.itemStyle}>\n {renderedItem}\n </li>\n );\n }\n\n return (\n <ul className=\"cate-list-box\" style={this.props.style}>\n {renderedItems}\n </ul>\n );\n }\n}\n\nconst EMPTY_ARRAY = [];\n\nfunction toSelectionArray(obj): any[] {\n if (obj === null || typeof obj === 'undefined') {\n return EMPTY_ARRAY;\n }\n if (obj.constructor === Array) {\n return obj;\n }\n return [obj];\n}\n","import { IconName } from '@blueprintjs/core';\n\nimport {\n getBasename,\n getBasenameExtension,\n getParentPath,\n HostOS,\n isAbsolutePath,\n isWindowsRootPath\n} from '../../../../common/paths';\nimport { isNumber, isString } from '../../../../common/types';\nimport { FileFilter } from '../types';\n\n\n/**\n * Represents the current update status of a file node.\n */\nexport type FileNodeStatus = 'updating' | 'ready' | 'error';\n\n/**\n * A file node represent a file or directory in a file system.\n * When we create path strings from file node paths (hence FileNode[]),\n * we concatenate always by forward slashes (\"/\"), even if the server file system\n * is Windows OS. Therefore path strings ever start with a \"/\", even absolute paths.\n */\nexport interface FileNode {\n /**\n * Name of the file or directory. The root node's name is the empty string.\n */\n name: string;\n /**\n * Date-time of last modification.\n */\n lastModified?: string;\n /**\n * Size in bytes\n */\n size?: number;\n /**\n * True, if this node represents a directory\n */\n isDir: boolean;\n /**\n * Child nodes of the directory\n */\n childNodes?: FileNode[];\n /**\n * The node's update status.\n * If status === undefined means, we have not updated this node yet (i.e. children not fetched)\n */\n status?: FileNodeStatus;\n /**\n * Detail message if status === \"error\"\n */\n message?: string;\n}\n\nexport const ALL_FILES_FILTER = {name: \"All files\", extensions: [\"*\"]};\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// FileNode operations\n\n/**\n * Returns a new `rootNode` where `updatedFileNode` is inserted at position given by `path`.\n * @param rootNode the root node\n * @param path normalized path\n * @param updatedFileNode the file node update that will replace the old one\n */\nexport function updateFileNode(rootNode: FileNode, path: string, updatedFileNode: FileNode): FileNode {\n if (path === '') {\n return {...rootNode, ...updatedFileNode, status: 'ready'};\n }\n return _updateFileNode(rootNode, path.split('/'), updatedFileNode);\n}\n\nfunction _updateFileNode(rootNode: FileNode, path: string[], updatedFileNode: FileNode): FileNode {\n if (!rootNode.childNodes) {\n // can't work without child nodes\n console.error('_updateFileNode: root node without child nodes');\n return rootNode;\n }\n updatedFileNode = !updatedFileNode.status ? {...updatedFileNode, status: 'ready'} : updatedFileNode;\n const newRootNode: FileNode = {...rootNode, childNodes: [...rootNode.childNodes]};\n let currentNode: FileNode = newRootNode;\n for (let depth = 0; depth < path.length; depth++) {\n if (!currentNode.childNodes) {\n console.error(`_updateFileNode: no child nodes at index ${depth} in \"${path.join('/')}\"`);\n return rootNode;\n }\n const name = path[depth];\n const childIndex = currentNode.childNodes.findIndex(n => name.localeCompare(n.name) === 0);\n if (childIndex < 0) {\n console.error(`_updateFileNode: invalid path component \"${name}\" at index ${depth} in \"${path.join('/')}\"`);\n return rootNode;\n }\n if (depth === path.length - 1) {\n currentNode.childNodes[childIndex] = updatedFileNode;\n } else {\n const childNode = currentNode.childNodes[childIndex];\n let newChildNode;\n if (childNode.childNodes) {\n newChildNode = {...childNode, childNodes: [...childNode.childNodes]};\n } else {\n newChildNode = {...childNode};\n }\n currentNode.childNodes[childIndex] = newChildNode;\n currentNode = newChildNode;\n }\n }\n return newRootNode;\n}\n\n/**\n * Get file node path excluding the `rootNode`.\n * @param rootNode the root node\n * @param path normalized path\n */\nexport function getFileNodePath(rootNode: FileNode, path: string): FileNode[] | null {\n if (path === '') {\n return [];\n }\n const pathNames = path.split('/');\n const fileNodePath = _getValidSubFileNodePath(rootNode.childNodes, pathNames);\n return pathNames.length === fileNodePath.length ? fileNodePath : null;\n}\n\n/**\n * Get valid sub file node path excluding the `rootNode`.\n * @param rootNode the root node\n * @param path normalized path\n */\nexport function getValidSubFileNodePath(rootNode: FileNode, path: string): FileNode[] {\n return _getValidSubFileNodePath(rootNode.childNodes, path.split('/'));\n}\n\nfunction _getValidSubFileNodePath(rootNodes: FileNode[] | undefined, pathNames: string[]): FileNode[] {\n let childNodes = rootNodes;\n let fileNodePath: FileNode[] = [];\n for (let depth = 0; depth < pathNames.length; depth++) {\n if (!childNodes) {\n return fileNodePath;\n }\n const name = pathNames[depth];\n const node = childNodes.find(n => n.name.localeCompare(name) === 0);\n if (!node) {\n return fileNodePath;\n }\n fileNodePath.push(node);\n childNodes = node.childNodes;\n }\n return fileNodePath;\n}\n\n/**\n * Get the file node in `rootNode` for given `path`.\n * @param rootNode the root node\n * @param path normalized path\n */\nexport function getFileNode(rootNode: FileNode, path: string): FileNode | null {\n if (path === \"\") {\n return rootNode;\n }\n const fileNodePath = getFileNodePath(rootNode, path);\n if (fileNodePath) {\n if (fileNodePath.length === 0) {\n return rootNode;\n } else {\n return fileNodePath[fileNodePath.length - 1];\n }\n }\n return null;\n}\n\n/**\n * Get an icon name for given file node.\n * @param node the file node\n */\nexport function getFileNodeIcon(node: FileNode): IconName {\n return node.isDir ? \"folder-close\" : \"document\";\n}\n\nexport function compareFileNames(a: FileNode, b: FileNode) {\n if (a.isDir) {\n if (!b.isDir) {\n return -1;\n }\n } else if (b.isDir) {\n return 1;\n }\n return a.name.localeCompare(b.name);\n}\n\nexport function compareFileLastModified(a: FileNode, b: FileNode) {\n if (a.isDir) {\n if (!b.isDir) {\n return -1;\n }\n } else if (b.isDir) {\n return 1;\n }\n if (isString(a.lastModified)) {\n if (isString(b.lastModified)) {\n const compValue = a.lastModified.localeCompare(b.lastModified);\n if (compValue !== 0) {\n return compValue;\n }\n }\n } else if (isString(b.lastModified)) {\n return -1;\n }\n return a.name.localeCompare(b.name);\n}\n\nexport function compareFileSize(a: FileNode, b: FileNode) {\n if (a.isDir) {\n if (!b.isDir) {\n return -1;\n }\n } else if (b.isDir) {\n return 1;\n }\n if (isNumber(a.size)) {\n if (isNumber(b.size)) {\n const compValue = a.size - b.size;\n if (compValue !== 0) {\n return compValue;\n }\n }\n } else if (isNumber(b.size)) {\n return -1;\n }\n return a.name.localeCompare(b.name);\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// FileDialog-internal path operations\n\n/**\n * Add `path` to the expanded paths `expandedPaths`. Return a new, updated array of expanded paths.\n * @param expandedPaths array of expanded paths\n * @param path normalized path\n * @returns a new array of expanded paths\n */\nexport function addExpandedDirPath(expandedPaths: string[], path: string): string[] {\n const parentDir = getParentPath(path);\n const cleanedPaths = expandedPaths.filter(p => !(p === path || p === parentDir || path.startsWith(p + '/')));\n return [...cleanedPaths, path];\n}\n\n/**\n * Remove `path` from the expanded paths `expandedPaths`. Return new, updated array of expanded paths.\n * @param expandedPaths array of expanded paths\n * @param path normalized path\n * @returns a new array of expanded paths\n */\nexport function removeExpandedDirPath(expandedPaths: string[], path: string): string[] {\n const parentDir = getParentPath(path);\n const cleanedPaths = expandedPaths.filter(p => !(p === path || p === parentDir || p.startsWith(path + '/')));\n return parentDir !== '' ? [...cleanedPaths, parentDir] : cleanedPaths;\n}\n\nexport function isPathValidAtIndex(path: string[], index: number, name: string): boolean {\n return index < path.length && path[index] === name;\n}\n\nexport function applyFileFilter(nodes: FileNode[], fileFilter: FileFilter): FileNode[] {\n const extSet = new Set<string>(fileFilter.extensions);\n if (extSet.has('*')) {\n return nodes;\n }\n return nodes.filter(node => {\n if (node.isDir) {\n return true;\n }\n const ext = getBasenameExtension(node.name);\n return extSet.has(ext);\n });\n}\n\n/**\n * Parse a text value entered by the user into an array of normalized paths.\n * @param inputValue text value entered by the user, note this is an un-normalized path\n * @param currentDirPath the current, normalized directory\n * @param multiSelection if multiple selections are allowed\n * @param hostOS host OS name\n * @returns an array of normalized paths\n */\nexport function fromPathInputValue(inputValue: string,\n currentDirPath: string,\n multiSelection: boolean,\n hostOS?: HostOS): string[] {\n inputValue = inputValue.trim()\n if (inputValue === '') {\n return [];\n }\n let paths;\n if (!multiSelection) {\n paths = [inputValue];\n } else {\n const isWindows = hostOS === 'Windows';\n paths = [];\n let escChar = null;\n let token = '';\n for (let i = 0; i < inputValue.length; i++) {\n const char = inputValue[i];\n if (char === '\"' || char === \"'\") {\n if (escChar === null) {\n escChar = char;\n token = '';\n } else if (escChar === char) {\n escChar = null;\n } else {\n token += char;\n }\n } else if (char === ' ') {\n if (escChar === null) {\n if (token !== '') {\n paths.push(token);\n token = '';\n }\n } else {\n token += char;\n }\n } else if (!isWindows && char === '\\\\') {\n // escape char\n } else {\n token += char;\n }\n }\n if (token !== '') {\n paths.push(token);\n }\n }\n return paths.map(p => toAbsolutePath(p, currentDirPath, hostOS));\n}\n\n/**\n * Convert path into internal normalized form used in the FileDialog UI.\n * @param path a non-normalized path, e.g. from user input\n * @param hostOS host OS name\n */\nfunction normalizePath(path: string, hostOS?: HostOS): string {\n let prefix;\n\n if (hostOS === 'Windows') {\n // Normalize back-slashes into forward slashes\n while (path.indexOf('\\\\') >= 0) {\n path = path.replace('\\\\', '/');\n }\n if (path.startsWith('//')) {\n // Note special case on Windows, where '//' are prefixes for network devices\n prefix = '//';\n path = path.substring(2);\n }\n } else {\n // Remove back-slashes, because they escape special characters on non-Windows hosts\n while (path.indexOf('\\\\') >= 0) {\n path = path.replace('\\\\', '');\n }\n }\n\n // Normalize by trimming leading '/'\n while (path.startsWith('/')) {\n path = path.substring(1);\n }\n // Normalize by trimming trailing '/'\n while (path.endsWith('/')) {\n path = path.substring(0, path.length - 1);\n }\n // Normalize by trimming double slashes '//'\n while (path.indexOf('//') > 0) {\n path = path.replace('//', '/')\n }\n\n return prefix ? prefix + path : path;\n}\n\nexport function denormalizePath(path: string, hostOS?: HostOS) {\n if (hostOS === 'Windows') {\n path = path.split('/').join('\\\\');\n if (!isWindowsRootPath(path)) {\n return '\\\\' + path;\n }\n return path;\n } else {\n return '/' + path;\n }\n}\n\n/**\n * Return an absolute path for given `path`. Note that the returned absolute path are normalized and\n * *never* start with a slash ('/').\n * @param path an absolute or relative path\n * @param currentDirPath current, normalized path\n * @param hostOS host OS name\n */\nexport function toAbsolutePath(path: string, currentDirPath: string, hostOS?: HostOS): string {\n const abs = isAbsolutePath(path, hostOS);\n path = normalizePath(path, hostOS);\n if (abs) {\n return path;\n }\n if (currentDirPath === '') {\n return path;\n }\n return currentDirPath + '/' + path;\n}\n\n/**\n * Format an array of selected paths into a text value that the user can edit.\n * @param selectedPaths array of selected paths\n * @param multiSelection if multiple selections are allowed\n * @returns a text value that the user can edit\n */\nexport function toPathInputValue(selectedPaths: string[], multiSelection: boolean): string {\n if (selectedPaths.length === 0) {\n return '';\n }\n if (!multiSelection) {\n return getBasename(selectedPaths[0]);\n }\n return selectedPaths.map(p => escapePath(getBasename((p)))).join(' ');\n}\n\nfunction escapePath(path: string): string {\n if (path.indexOf(' ') >= 0) {\n if (path.indexOf('\"') >= 0) {\n return `'${path}'`;\n } else {\n return `\"${path}\"`;\n }\n }\n return path;\n}\n","import { Classes, InputGroup } from '@blueprintjs/core';\nimport * as React from 'react'\nimport { isDefined, isDefinedAndNotNull, isString, isUndefinedOrNull } from '../../../common/types';\n\nexport type FieldType<T> = T | null;\n\nexport interface FieldValue<T> {\n textValue?: string;\n value?: FieldType<T>;\n error?: Error | any;\n}\n\ntype AnyFieldType = FieldType<any>;\ntype AnyFieldValue = FieldValue<any>;\n\nexport type FieldValidator = (value: AnyFieldType) => any;\n\nexport interface IFieldProps {\n value: AnyFieldValue | any;\n onChange: (value: AnyFieldValue) => void;\n validator?: FieldValidator;\n placeholder?: string;\n size?: number;\n className?: string;\n style?: { [key: string]: any };\n disabled?: boolean;\n uncontrolled?: boolean;\n type?: string;\n}\n\ntype IFieldState = AnyFieldValue | null;\n\n\nexport function toTextValue(value: AnyFieldValue | any, defaultValue: any = '') {\n if (isFieldValue(value)) {\n return isDefinedAndNotNull(value.textValue) ? value.textValue : `${value.value}`;\n } else if (isString(value)) {\n return value;\n }\n return isDefinedAndNotNull(value) ? `${value}` : defaultValue;\n}\n\nexport function toValue(value: any) {\n if (isFieldValue(value)) {\n return value.value;\n }\n return value;\n}\n\n\n/**\n * A Field represents a text input field that provides a value of some type\n * characterised by the \"valueHandler\" property.\n *\n * @author Norman Fomferra\n */\nexport class Field<P extends IFieldProps> extends React.PureComponent<P, IFieldState> {\n\n static readonly NOMINAL_CLASS = '';\n static readonly ERROR_CLASS = Classes.INTENT_DANGER;\n\n protected _fieldValue: AnyFieldValue;\n\n constructor(props: Readonly<P>) {\n super(props);\n this._fieldValue = this.toFieldValue(props.value);\n if (this.props.uncontrolled) {\n this.state = this._fieldValue;\n }\n\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n }\n\n getValue(): AnyFieldType {\n return this._fieldValue.value;\n }\n\n setValue(value: AnyFieldValue | any | null) {\n this.setFieldValue(this.newFieldValueFromValue(value));\n }\n\n setValueAndTextValue(value: any | null, textValue: string) {\n this.setFieldValue(this.newFieldValueFromValueAndTextValue(value, textValue));\n }\n\n getTextValue(): string {\n return this._fieldValue.textValue || '';\n }\n\n setTextValue(textValue: string) {\n this.setFieldValue(this.newFieldValueFromTextValue(textValue));\n }\n\n getError(): Error | any {\n return this._fieldValue.error;\n }\n\n setError(error: Error | null) {\n this.setFieldValue({...this._fieldValue, error});\n }\n\n componentWillReceiveProps(nextProps: Readonly<P>): void {\n this._fieldValue = this.toFieldValue(nextProps.value);\n if (this.props.uncontrolled) {\n this.setState(this._fieldValue);\n }\n }\n\n parseValue(textValue: string): AnyFieldType {\n if (!textValue || textValue === '') {\n return null;\n }\n return textValue;\n }\n\n formatValue(value: AnyFieldType): string {\n if (isUndefinedOrNull(value)) {\n return '';\n } else if (isString(value)) {\n return value;\n }\n return `${value}`;\n }\n\n validateValue(value: AnyFieldType): void {\n if (this.props.validator) {\n this.props.validator(value);\n }\n }\n\n protected handleKeyPress(event: any) {\n if (this.props.uncontrolled && event.charCode === 13) {\n this.props.onChange(this.state);\n }\n }\n\n protected handleBlur() {\n if (this.props.uncontrolled) {\n this.props.onChange(this.state);\n }\n }\n\n protected handleInputChange(event: any) {\n const textValue = event.target.value;\n this.setTextValue(textValue || '');\n }\n\n private newFieldValueFromTextValue(textValue: string): AnyFieldValue {\n let value = null;\n let error;\n try {\n value = this.parseValue(textValue);\n this.validateValue(value);\n } catch (e) {\n value = this._fieldValue ? this._fieldValue.value : value;\n error = e;\n }\n return {textValue, value, error};\n }\n\n private newFieldValueFromValue(value: AnyFieldValue | any | null): AnyFieldValue {\n if (isFieldValue(value)) {\n return {...value as AnyFieldValue};\n }\n let textValue;\n let error;\n try {\n textValue = this.formatValue(value);\n } catch (e) {\n textValue = '';\n error = e;\n }\n try {\n this.validateValue(value);\n } catch (e) {\n error = e;\n }\n return {textValue, value, error};\n }\n\n private newFieldValueFromValueAndTextValue(value: any, textValue: string): AnyFieldValue {\n let error;\n try {\n this.validateValue(value);\n } catch (e) {\n error = e;\n }\n return {textValue, value, error};\n }\n\n private toFieldValue(value: any): AnyFieldValue {\n if (isFieldValue(value)) {\n return value;\n } else if (isString(value)) {\n return this.newFieldValueFromTextValue(value as string);\n } else {\n return this.newFieldValueFromValue(value);\n }\n }\n\n private setFieldValue(fieldValue: AnyFieldValue) {\n this._fieldValue = fieldValue;\n if (this.props.uncontrolled) {\n this.setState(fieldValue);\n } else {\n this.props.onChange(fieldValue);\n }\n }\n\n render() {\n const error = this.getError();\n // console.log(\"Field.render: fieldValue = \", this._fieldValue);\n const errorClassName = Field.ERROR_CLASS + ' ' + this.props.className;\n const nominalClassName = Field.NOMINAL_CLASS + ' ' + this.props.className;\n\n return (\n <InputGroup\n value={this.getTextValue()}\n onChange={this.handleInputChange}\n onBlur={this.handleBlur}\n onKeyPress={this.handleKeyPress}\n type={this.props.type || \"text\"}\n className={error ? errorClassName : nominalClassName}\n style={this.props.style}\n size={this.props.size}\n placeholder={this.props.placeholder}\n disabled={this.props.disabled}\n />\n );\n }\n}\n\nexport function isFieldValue(value: any): boolean {\n return isDefinedAndNotNull(value) && (isDefined(value.textValue) || isDefined(value.value));\n}\n\n","import { Field, FieldType, FieldValue, IFieldProps } from './Field';\n\nexport type TextFieldType = FieldType<string>;\nexport type TextFieldValue = FieldValue<string>;\n\nexport interface ITextFieldProps extends IFieldProps {\n nullable?: boolean;\n}\n\n/**\n * A TextField represents a text input field providing values of type string.\n *\n * @author Norman Fomferra\n */\nexport class TextField extends Field<ITextFieldProps> {\n\n validateValue(value: TextFieldType): void {\n super.validateValue(value);\n if (!value && !this.props.nullable) {\n throw new Error('Text value expected.');\n }\n }\n}\n\n","import * as Cesium from 'cesium';\nimport { DirectGeometryObject, Feature } from 'geojson';\n\nimport { isBoolean, isDefined, isNumber, isString } from '../../../common/types';\nimport { SIMPLE_STYLE_DEFAULTS, SimpleStyle } from '../../../common/geojson-simple-style';\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SimpleStyle\n\nexport interface CesiumSimpleStyle {\n markerSymbol?: string;\n markerColor?: Cesium.Color;\n markerSize?: number;\n markerCanvas?: HTMLCanvasElement;\n stroke?: Cesium.Color;\n strokeWidth?: number;\n fill?: Cesium.Color;\n title?: string;\n description?: string;\n}\n\nconst MARKER_SIZE_SMALL = 24;\nconst MARKER_SIZE_MEDIUM = 48;\nconst MARKER_SIZE_LARGE = 64;\n\nconst MARKER_SIZES = {\n small: MARKER_SIZE_SMALL,\n medium: MARKER_SIZE_MEDIUM,\n large: MARKER_SIZE_LARGE,\n};\n\nexport function simpleStyleToCesium(style: SimpleStyle, defaults?: SimpleStyle): CesiumSimpleStyle {\n const cStyle: CesiumSimpleStyle = {};\n\n if (isString(style.stroke) || isNumber(style.strokeOpacity) || isNumber(style.strokeWidth)) {\n const stroke = getString('stroke', style, defaults, SIMPLE_STYLE_DEFAULTS);\n let color = Cesium.Color.fromCssColorString(stroke);\n const strokeWidth = getNumber('strokeWidth', style, defaults, SIMPLE_STYLE_DEFAULTS);\n const strokeOpacity = getNumber('strokeOpacity', style, defaults, SIMPLE_STYLE_DEFAULTS);\n if (strokeOpacity >= 0.0 && strokeOpacity < 1.0) {\n color = Cesium.Color.fromAlpha(color, strokeOpacity);\n }\n cStyle.stroke = color;\n cStyle.strokeWidth = strokeWidth;\n }\n\n if (isString(style.fill) || isNumber(style.fillOpacity)) {\n const fill = getString('fill', style, defaults, SIMPLE_STYLE_DEFAULTS);\n let color = Cesium.Color.fromCssColorString(fill);\n const fillOpacity = getNumber('fillOpacity', style, defaults, SIMPLE_STYLE_DEFAULTS);\n if (fillOpacity >= 0.0 && fillOpacity < 1.0) {\n color = Cesium.Color.fromAlpha(color, fillOpacity);\n }\n cStyle.fill = color;\n }\n\n if (isString(style.markerSymbol) || isString(style.markerColor) || isString(style.markerSize)) {\n const markerSymbol = getString('markerSymbol', style, defaults, SIMPLE_STYLE_DEFAULTS);\n const markerColor = getString('markerColor', style, defaults, SIMPLE_STYLE_DEFAULTS);\n const markerSize = getString('markerSize', style, defaults, SIMPLE_STYLE_DEFAULTS);\n const color = Cesium.Color.fromCssColorString(markerColor);\n const size = MARKER_SIZES[markerSize] || MARKER_SIZE_MEDIUM;\n const pinBuilder = new Cesium.PinBuilder();\n if (markerSymbol === '') {\n cStyle.markerCanvas = pinBuilder.fromColor(color, size);\n } else if (markerSymbol.length === 1) {\n cStyle.markerSymbol = markerSymbol;\n cStyle.markerCanvas = pinBuilder.fromText(markerSymbol, color, size);\n } else {\n cStyle.markerSymbol = markerSymbol;\n Promise.resolve(pinBuilder.fromMakiIconId(markerSymbol, color, size)).then((markerCanvas) => {\n cStyle.markerCanvas = markerCanvas;\n });\n }\n cStyle.markerSize = size;\n cStyle.markerColor = color;\n }\n\n if (isString(style.title)) {\n cStyle.title = style.title;\n }\n\n if (isString(style.description)) {\n cStyle.description = style.description;\n }\n\n return cStyle;\n}\n\nexport function entityToSimpleStyle(entity: Cesium.Entity | null): SimpleStyle | null {\n if (!entity) {\n return null;\n } else if (entity.point) {\n return pointGraphicsToSimpleStyle(entity.point);\n } else if (entity.billboard) {\n return billboardGraphicsToSimpleStyle(entity.billboard);\n } else if (entity.label) {\n return labelGraphicsToSimpleStyle(entity.label);\n } else if (entity.polyline) {\n return polylineGraphicsToSimpleStyle(entity.polyline);\n } else if (entity.polygon) {\n return polygonGraphicsToSimpleStyle(entity.polygon);\n }\n return null;\n}\n\nexport function applyStyleToEntityCollection(style: CesiumSimpleStyle, entities: Cesium.Entity[]): void {\n for (let entity of entities) {\n applyStyleToEntity(style, entity);\n }\n}\n\nexport function applyStyleToEntity(style: CesiumSimpleStyle, entity: Cesium.Entity): void {\n if (entity.point) {\n const point = entity.point;\n if (isDefined(style.markerColor)) {\n point.color = new Cesium.ConstantProperty(style.markerColor);\n }\n if (isNumber(style.markerSize)) {\n point.pixelSize = new Cesium.ConstantProperty(16 * (style.markerSize / MARKER_SIZE_SMALL));\n }\n } else if (entity.billboard) {\n const billboard = entity.billboard;\n if (isDefined(style.markerCanvas)) {\n billboard.image = new Cesium.ConstantProperty(style.markerCanvas);\n } else {\n if (isDefined(style.markerColor)) {\n billboard.color = new Cesium.ConstantProperty(style.markerColor);\n }\n if (isNumber(style.markerSize)) {\n billboard.scale = new Cesium.ConstantProperty(style.markerSize / MARKER_SIZE_MEDIUM);\n }\n }\n } else if (entity.label) {\n const label = entity.label;\n if (isDefined(style.title)) {\n label.text = new Cesium.ConstantProperty(style.title);\n }\n if (isDefined(style.markerColor)) {\n label.fillColor = new Cesium.ConstantProperty(style.markerColor);\n }\n if (isNumber(style.markerSize)) {\n label.scale = new Cesium.ConstantProperty(style.markerSize / MARKER_SIZE_MEDIUM);\n }\n } else if (entity.polyline) {\n const polyline = entity.polyline;\n if (isDefined(style.stroke)) {\n polyline.material = new Cesium.ColorMaterialProperty(style.stroke);\n }\n if (isNumber(style.strokeWidth)) {\n polyline.width = new Cesium.ConstantProperty(style.strokeWidth);\n }\n } else if (entity.polygon) {\n const polygon = entity.polygon;\n if (isDefined(style.fill)) {\n polygon.material = new Cesium.ColorMaterialProperty(style.fill);\n }\n if (isDefined(style.stroke)) {\n polygon.outlineColor = new Cesium.ConstantProperty(style.stroke);\n }\n if (isNumber(style.strokeWidth)) {\n polygon.outlineWidth = new Cesium.ConstantProperty(style.strokeWidth);\n }\n }\n}\n\nfunction colorToHexString(value: number): string {\n if (value <= 0) {\n return '00';\n } else if (value >= 1) {\n return 'ff';\n } else {\n const v = Math.floor(255.9999 * value);\n if (v <= 0) {\n return '00';\n } else if (v >= 255) {\n return 'ff';\n } else if (v < 16) {\n return '0' + v.toString(16);\n } else {\n return v.toString(16);\n }\n }\n}\n\nfunction rgbToCssColor(r: number, g: number, b: number): string {\n const rs = colorToHexString(r);\n const gs = colorToHexString(g);\n const bs = colorToHexString(b);\n return '#' + rs + gs + bs;\n}\n\nfunction pointGraphicsToSimpleStyle(point: Cesium.PointGraphics): SimpleStyle {\n const now = Cesium.JulianDate.now();\n const outlineColor = point.outlineColor;\n const outlineWidth = point.outlineWidth;\n const pixelSize = point.pixelSize;\n const color = point.color;\n let markerSize: 'small' | 'medium' | 'large';\n let markerColor: string;\n let markerSymbol: string;\n let stroke: string;\n let strokeWidth: number;\n if (isDefined(pixelSize)) {\n const pixelSizeValue = pixelSize.getValue(now);\n if (pixelSizeValue <= MARKER_SIZE_SMALL) {\n markerSize = 'small';\n } else if (pixelSizeValue <= MARKER_SIZE_MEDIUM) {\n markerSize = 'medium';\n } else {\n markerSize = 'large';\n }\n }\n if (isDefined(color)) {\n const colorValue = color.getValue(now);\n markerColor = rgbToCssColor(colorValue.red, colorValue.green, colorValue.blue);\n }\n if (isDefined(outlineColor)) {\n const colorValue = outlineColor.getValue(now);\n stroke = rgbToCssColor(colorValue.red, colorValue.green, colorValue.blue);\n }\n if (isDefined(outlineWidth)) {\n strokeWidth = outlineWidth.getValue(now);\n }\n return {\n markerSize,\n markerColor,\n markerSymbol,\n stroke,\n strokeWidth,\n };\n}\n\nfunction billboardGraphicsToSimpleStyle(point: Cesium.BillboardGraphics): SimpleStyle {\n const now = Cesium.JulianDate.now();\n const image = point.image;\n const scale = point.scale;\n const color = point.color;\n let markerSymbol: string;\n let markerSize: 'small' | 'medium' | 'large';\n let markerColor: string;\n if (isDefined(image)) {\n const imageValue = image.getValue(now);\n if (isString(imageValue)) {\n markerSymbol = imageValue;\n }\n }\n if (isDefined(scale)) {\n const scaleValue = scale.getValue(now);\n if (scaleValue < 1) {\n markerSize = 'small';\n } else if (scaleValue < 2) {\n markerSize = 'medium';\n } else {\n markerSize = 'large';\n }\n }\n if (isDefined(color)) {\n const colorValue = color.getValue(now);\n markerColor = rgbToCssColor(colorValue.red, colorValue.green, colorValue.blue);\n }\n return {\n markerSymbol,\n markerSize,\n markerColor,\n };\n}\n\nfunction labelGraphicsToSimpleStyle(point: Cesium.LabelGraphics): SimpleStyle {\n const now = Cesium.JulianDate.now();\n const text = point.text && point.text.getValue(now);\n const scale = point.scale && point.scale.getValue(now);\n const fillColor = point.fillColor && point.fillColor.getValue(now);\n let title: string;\n let markerSize: 'small' | 'medium' | 'large';\n let markerColor: string;\n if (isString(text)) {\n title = text;\n }\n if (isNumber(scale)) {\n if (scale < 1) {\n markerSize = 'small';\n } else if (scale < 2) {\n markerSize = 'medium';\n } else {\n markerSize = 'large';\n }\n }\n if (isDefined(fillColor)) {\n markerColor = rgbToCssColor(fillColor.red, fillColor.green, fillColor.blue);\n }\n return {\n title,\n markerSize,\n markerColor,\n };\n}\n\nfunction polylineGraphicsToSimpleStyle(polyline: Cesium.PolylineGraphics): SimpleStyle {\n const now = Cesium.JulianDate.now();\n const width = polyline.width && polyline.width.getValue(now);\n const material = polyline.material && polyline.material.getValue(now);\n const color = material && material.color;\n let stroke: string;\n let strokeOpacity: number;\n let strokeWidth: number;\n\n if (isDefined(width)) {\n strokeWidth = width;\n }\n if (isDefined(color)) {\n stroke = rgbToCssColor(color.red, color.green, color.blue);\n strokeOpacity = color.alpha;\n }\n return {\n stroke,\n strokeOpacity,\n strokeWidth\n };\n}\n\nfunction polygonGraphicsToSimpleStyle(polygon: Cesium.PolygonGraphics): SimpleStyle {\n const now = Cesium.JulianDate.now();\n const isFilled = polygon.fill && polygon.fill.getValue(now);\n const material = polygon.material && polygon.material.getValue(now);\n const color = material && material.color;\n const isOutlined = polygon.outline && polygon.outline.getValue(now);\n const outlineColor = polygon.outlineColor && polygon.outlineColor.getValue(now);\n const outlineWidth = polygon.outlineWidth && polygon.outlineWidth.getValue(now);\n let stroke: string;\n let strokeOpacity: number;\n let strokeWidth: number;\n let fill: string;\n let fillOpacity: number;\n\n if (isDefined(color)) {\n fill = rgbToCssColor(color.red, color.green, color.blue);\n fillOpacity = color.alpha;\n } else {\n fill = SIMPLE_STYLE_DEFAULTS.fill;\n fillOpacity = SIMPLE_STYLE_DEFAULTS.fillOpacity;\n }\n if (isBoolean(isFilled) && !Boolean(isFilled)) {\n fillOpacity = 0;\n }\n\n if (isDefined(outlineColor)) {\n stroke = rgbToCssColor(outlineColor.red, outlineColor.green, outlineColor.blue);\n strokeOpacity = outlineColor.alpha;\n }\n if (isDefined(isOutlined) && !outlineColor) {\n strokeOpacity = 0;\n }\n if (isDefined(outlineWidth)) {\n strokeWidth = outlineWidth;\n }\n\n return {\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n strokeWidth\n };\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Geometry WKT\n\nexport function entityToGeoJson(entity: Cesium.Entity | null, id: string, properties: any): Feature<any> | null {\n if (!entity) {\n return null;\n }\n\n if (entity.position) {\n const p = Cesium.Cartographic.fromCartesian(entity.position.getValue(Cesium.JulianDate.now()));\n const coordinates = [Cesium.Math.toDegrees(p.longitude), Cesium.Math.toDegrees(p.latitude)];\n return _entityToGeoJson(entity, id, properties, {\n type: 'Point',\n coordinates\n });\n }\n\n if (entity.polyline) {\n const positions = entity.polyline.positions.getValue(Cesium.JulianDate.now());\n let coordinates = [];\n for (let position of positions) {\n const p = Cesium.Cartographic.fromCartesian(position);\n coordinates.push([Cesium.Math.toDegrees(p.longitude), Cesium.Math.toDegrees(p.latitude)]);\n }\n return _entityToGeoJson(entity, id, properties, {\n type: 'LineString',\n coordinates\n });\n }\n\n if (entity.polygon) {\n const hierarchy = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now());\n const positions = hierarchy.positions || hierarchy;\n const holes = hierarchy.holes;\n if (holes && holes.length) {\n throw new Error('entityToGeoJson() does not yet support polygons with holes');\n }\n let ring = [];\n for (let position of positions) {\n const p = Cesium.Cartographic.fromCartesian(position);\n ring.push([Cesium.Math.toDegrees(p.longitude), Cesium.Math.toDegrees(p.latitude)]);\n }\n ring.push([ring[0][0], ring[0][1]]);\n const coordinates = [ring];\n return _entityToGeoJson(entity, id, properties, {\n type: 'Polygon',\n coordinates\n });\n }\n\n throw new Error(`entityToGeoJson() called with unsupported entity: ${entity.toString()}`);\n}\n\nexport function _entityToGeoJson(entity: Cesium.Entity, id: string | undefined, properties: any, geometry: DirectGeometryObject): Feature<any> | null {\n id = id || entity.id.toString();\n //const properties = {...featurePropertiesFromSimpleStyle(entityToSimpleStyle(entity))};\n return {type: 'Feature', id, geometry, properties};\n}\n\n\nexport function entityToGeometryWkt(entity: Cesium.Entity): string {\n\n if (entity.polyline) {\n const positions = entity.polyline.positions.getValue(Cesium.JulianDate.now());\n return `LINESTRING (${cartesian3ArrayToWkt(positions)})`;\n }\n\n if (entity.polygon) {\n const hierarchy = entity.polygon.hierarchy.getValue(Cesium.JulianDate.now());\n const positions = hierarchy.positions;\n const holes = hierarchy.holes;\n const exterior = cartesian3ArrayToWktArray(positions);\n if (exterior.length > 2) {\n exterior.push(exterior[0]);\n }\n const linearRings = [`(${exterior.join(', ')})`];\n if (holes && holes.length) {\n for (let hole of holes) {\n const interior = cartesian3ArrayToWktArray(hole.positions);\n if (interior.length > 2) {\n interior.push(interior[0]);\n }\n linearRings.push(`(${interior.join(', ')})`);\n }\n }\n return `POLYGON (${linearRings.join(', ')})`;\n }\n\n if (entity.rectangle) {\n const coordinates = entity.rectangle.coordinates.getValue(Cesium.JulianDate.now());\n const x1 = toDeg(coordinates.west);\n const y1 = toDeg(coordinates.south);\n const x2 = toDeg(coordinates.east);\n const y2 = toDeg(coordinates.north);\n return `POLYGON ((${x1} ${y1}, ${x2} ${y1}, ${x2} ${y2}, ${x1} ${y2}, ${x1} ${y1}))`;\n }\n\n if (entity.position) {\n const position = entity.position.getValue(Cesium.JulianDate.now());\n return `POINT (${cartesian3ToWkt(position)})`\n }\n\n throw new TypeError('can\\'t understand geometry of selected entity');\n}\n\nexport function canvasToCartographic(viewer: Cesium.Viewer,\n canvasPos: Cesium.Cartesian2 | undefined,\n degrees: boolean): Cesium.Cartographic | undefined {\n let cartographic;\n if (canvasPos) {\n const ellipsoid = viewer.scene.globe.ellipsoid;\n const cartesian = viewer.camera.pickEllipsoid(canvasPos, ellipsoid);\n if (cartesian) {\n cartographic = ellipsoid.cartesianToCartographic(cartesian);\n if (cartographic && degrees) {\n const factor = 10000.;\n const longitude = Math.round(factor * Cesium.Math.toDegrees(cartographic.longitude)) / factor;\n const latitude = Math.round(factor * Cesium.Math.toDegrees(cartographic.latitude)) / factor;\n cartographic = {longitude, latitude, height: cartographic.height};\n }\n }\n }\n return cartographic;\n}\n\nexport function clientToCanvas(viewer: Cesium.Viewer,\n clientPos: Cesium.Cartesian2 | undefined): Cesium.Cartesian2 | undefined {\n let canvasPos;\n if (clientPos) {\n const rect = viewer.canvas.getBoundingClientRect();\n const x = clientPos.x;\n const y = clientPos.y;\n if ((x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom)) {\n canvasPos = new Cesium.Cartesian2(x - rect.left, y - rect.top);\n }\n }\n return canvasPos;\n}\n\nexport function pickEntity(viewer: Cesium.Viewer,\n canvasPos: Cesium.Cartesian2 | undefined): Cesium.Entity | undefined {\n if (canvasPos) {\n const pickedObject = viewer.scene.pick(canvasPos);\n return pickedObject && pickedObject.id;\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Base maps\n\n/**\n * BaseMapOptions consists basically of properties to create an instance of Cesium.UrlTemplateImageryProvider.\n * See https://cesium.com/docs/cesiumjs-ref-doc/UrlTemplateImageryProvider.html.\n */\nexport interface BaseMapOptions {\n url: string;\n tilingScheme?: 'Geographic' | 'WebMercator';\n credit?: string;\n minimumLevel?: number;\n maximumLevel?: number;\n ellipsoid?: { x?: number, y?: number, z?: number };\n}\n\nexport function setViewerBaseMap(viewer: Cesium.Viewer, baseMapOptions: BaseMapOptions | null) {\n let bgMapImageryProvider;\n if (baseMapOptions === null) {\n bgMapImageryProvider = Cesium.createWorldImagery();\n } else {\n const tilingScheme = baseMapOptions.tilingScheme === 'Geographic'\n ? new Cesium.GeographicTilingScheme()\n : new Cesium.WebMercatorTilingScheme();\n const ellipsoid = baseMapOptions.ellipsoid && new Cesium.Ellipsoid(baseMapOptions.ellipsoid.x,\n baseMapOptions.ellipsoid.y,\n baseMapOptions.ellipsoid.z);\n bgMapImageryProvider = new Cesium.UrlTemplateImageryProvider(\n {\n url: baseMapOptions.url,\n tilingScheme,\n ellipsoid,\n credit: baseMapOptions.credit,\n minimumLevel: baseMapOptions.minimumLevel,\n maximumLevel: baseMapOptions.maximumLevel,\n });\n }\n if (viewer.imageryLayers.length > 0) {\n const oldLayer = viewer.imageryLayers.get(0);\n viewer.imageryLayers.remove(oldLayer);\n }\n viewer.imageryLayers.add(new Cesium.ImageryLayer(bgMapImageryProvider), 0);\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\nexport function getEntityByEntityId(viewer: Cesium.Viewer, entityId: string): Cesium.Entity | null {\n for (let i = 0; i < viewer.dataSources.length; i++) {\n const dataSource = viewer.dataSources.get(i);\n const entity = dataSource.entities.getById(entityId);\n if (entity) {\n return entity;\n }\n }\n return null;\n}\n\nfunction cartesian3ArrayToWktArray(positions: Cesium.Cartesian3[]): string[] {\n return positions.map(p => cartesian3ToWkt(p));\n}\n\nfunction cartesian3ArrayToWkt(positions: Cesium.Cartesian3[]): string {\n return cartesian3ArrayToWktArray(positions).join(', ');\n}\n\nfunction cartesian3ToWkt(position: Cesium.Cartesian3): string {\n const cartographic = Cesium.Cartographic.fromCartesian(position);\n return `${toDeg(cartographic.longitude)} ${toDeg(cartographic.latitude)}`;\n}\n\nfunction toDeg(x: number): number {\n return x * (180. / Math.PI);\n}\n\nfunction _getValue(key: string, predicate: (object: any) => boolean, objects: any[]) {\n for (let o of objects) {\n if (o) {\n const v = o[key];\n if (predicate(v)) {\n return v;\n }\n }\n }\n}\n\nfunction getNumber(key, ...objects) {\n return _getValue(key, isNumber, objects);\n}\n\nfunction getString(key, ...objects) {\n return _getValue(key, isString, objects);\n}\n","import { isDefined } from './types';\n\n/**\n * GeoJSON \"standard\" for styling geospatial data that can be shared across clients.\n * See https://github.com/mapbox/simplestyle-spec/tree/master/1.1.0\n */\nexport interface SimpleStyle {\n // OPTIONAL: default \"\"\n // A title to show when this item is clicked or\n // hovered over\n readonly title?: string;\n\n // OPTIONAL: default \"\"\n // A description to show when this item is clicked or\n // hovered over\n readonly description?: string;\n\n // OPTIONAL: default \"medium\"\n // specify the size of the marker. sizes\n // can be different pixel sizes in different\n // implementations\n // Value must be one of\n // \"small\"\n // \"medium\"\n // \"large\"\n readonly markerSize?: 'small' | 'medium' | 'large';\n\n // OPTIONAL: default \"\"\n // a symbol to position in the center of this icon\n // if not provided or \"\"; no symbol is overlaid\n // and only the marker is shown\n // Allowed values include\n // - Icon ID\n // - An integer 0 through 9\n // - A lowercase character \"a\" through \"z\"\n readonly markerSymbol?: string;\n\n // OPTIONAL: default \"7e7e7e\"\n // the marker's color\n //\n // value must follow COLOR RULES\n readonly markerColor?: string;\n\n // OPTIONAL: default \"555555\"\n // the color of a line as part of a polygon; polyline; or\n // multigeometry\n //\n // value must follow COLOR RULES\n readonly stroke?: string;\n\n // OPTIONAL: default 1.0\n // the opacity of the line component of a polygon; polyline; or\n // multigeometry\n //\n // value must be a floating point number greater than or equal to\n // zero and less or equal to than one\n readonly strokeOpacity?: number;\n\n // OPTIONAL: default 2\n // the width of the line component of a polygon; polyline; or\n // multigeometry\n //\n // value must be a floating point number greater than or equal to 0\n readonly strokeWidth?: number;\n\n // OPTIONAL: default \"555555\"\n // the color of the interior of a polygon\n //\n // value must follow COLOR RULES\n readonly fill?: string;\n\n // OPTIONAL: default 0.6\n // the opacity of the interior of a polygon. Implementations\n // may choose to set this to 0 for line features.\n //\n // value must be a floating point number greater than or equal to\n // zero and less or equal to than one\n readonly fillOpacity?: number;\n}\n\n/**\n * GeoJSON \"standard\" for styling geospatial data that can be shared across clients.\n * See https://github.com/mapbox/simplestyle-spec/tree/master/1.1.0\n */\nexport const SIMPLE_STYLE_DEFAULTS: SimpleStyle = {\n title: '',\n description: '',\n markerSize: 'medium',\n markerSymbol: '',\n markerColor: '#7e7e7e',\n stroke: '#555555',\n strokeOpacity: 1,\n strokeWidth: 2,\n fill: '#555555',\n fillOpacity: 0.6\n};\n\nexport function simpleStyleFromFeatureProperties(properties: any): SimpleStyle {\n const styleProperties = {\n title: properties['title'],\n description: properties['description'],\n markerSymbol: properties['marker-symbol'],\n markerSize: properties['marker-size'],\n markerColor: properties['marker-color'],\n stroke: properties['stroke'],\n strokeOpacity: properties['stroke-opacity'],\n strokeWidth: properties['stroke-width'],\n fill: properties['fill'],\n fillOpacity: properties['fill-opacity'],\n };\n\n const simpleStyle = {};\n for (let p of Object.getOwnPropertyNames(styleProperties)) {\n if (isDefined(styleProperties[p])) {\n simpleStyle[p] = styleProperties[p];\n }\n }\n\n return simpleStyle;\n}\n\nexport function featurePropertiesFromSimpleStyle(style: SimpleStyle): any {\n const styleProperties = {\n 'title': style.title,\n 'description': style.description,\n 'marker-symbol': style.markerSymbol,\n 'marker-size': style.markerSize,\n 'marker-color': style.markerColor,\n 'stroke': style.stroke,\n 'stroke-opacity': style.strokeOpacity,\n 'stroke-width': style.strokeWidth,\n 'fill': style.fill,\n 'fill-opacity': style.fillOpacity,\n };\n\n const properties = {};\n for (let p of Object.getOwnPropertyNames(styleProperties)) {\n if (isDefined(styleProperties[p])) {\n properties[p] = styleProperties[p];\n }\n }\n\n return properties;\n}\n","/**\n * Used to parse users' text inputs into normalized paths and to format normalized paths into user text outputs.\n * Values are according to output of Python's platform.system() call.\n */\nexport type HostOS = 'Windows' | 'Linux' | 'Java';\n\n\nexport function isAbsolutePath(path: string, hostOS?: HostOS) {\n if (hostOS === 'Windows') {\n return isWindowsRootPath(path) || isLinuxRootPath(path);\n } else {\n return isLinuxRootPath(path);\n }\n}\n\nexport function isLinuxRootPath(path: string): boolean {\n return path.startsWith('/');\n}\n\nexport function isWindowsRootPath(path: string): boolean {\n return isWindowsNetworkDevicePath(path) || isWindowsDrivePath(path);\n}\n\nexport function isWindowsNetworkDevicePath(path: string): boolean {\n return path.startsWith('//') || path.startsWith('\\\\\\\\');\n}\n\nexport function isWindowsDrivePath(path: string): boolean {\n return path.length >= 2\n && /^[a-z]+$/i.test(path[0])\n && path[1] === ':'\n && (path.length === 2 || path[2] === '/' || path[2] === '\\\\');\n}\n\n/**\n * Make `path2` absolute with respect to absolute (directory) path `path1`.\n * `path1` must be absolute and `path2` must be relative, otherwise the\n * result is not defined.\n *\n * @param path1 first absolute path\n * @param path2 second relative path\n * @param hostOS host OS identifier\n * @returns `path1` relative to `path2`.\n */\nexport function makeAbsolutePath(path1: string, path2: string, hostOS?: HostOS): string {\n let comps1 = splitPath(path1, hostOS);\n let comps2 = splitPath(path2, hostOS);\n if (comps1.length > 0 && comps1[comps1.length - 1] === '') {\n comps1 = comps1.slice(0, comps1.length - 1);\n }\n if (comps2.length > 0 && comps2[0] === '') {\n comps2 = comps2.slice(1);\n }\n return joinPathComponents(normPathComponents(comps1.concat(comps2)), hostOS);\n}\n\n/**\n * Make `path1` relative to another (directory) path `path2`.\n * Both paths must be either relative or absolute, otherwise the\n * result is not defined.\n *\n * @param path1 first path\n * @param path2 second path\n * @param hostOS host OS identifier\n * @returns `path1` relative to `path2`.\n */\nexport function makeRelativePath(path1: string, path2: string, hostOS?: HostOS): string {\n if (path1 === '' || path1 === path2) {\n return \"\";\n }\n const comps1 = splitPath(path1, hostOS);\n const comps2 = splitPath(path2, hostOS);\n let n1 = comps1.length;\n let n2 = comps2.length;\n let n = Math.max(n1, n2);\n let iFirstDiff = Math.min(n1, n2);\n for (let i = 0; i < n; i++) {\n if (i < n1 && i < n2) {\n let comp1 = comps1[i];\n let comp2 = comps2[i];\n if (comp1 !== comp2) {\n iFirstDiff = i;\n break;\n }\n }\n }\n if (iFirstDiff === n) {\n return '';\n }\n let relPathComps: string[];\n if (n2 > iFirstDiff) {\n relPathComps = new Array<string>(n2 - iFirstDiff).fill('..');\n } else {\n relPathComps = [];\n }\n if (n1 > iFirstDiff) {\n relPathComps = relPathComps.concat(comps1.slice(iFirstDiff));\n }\n return relPathComps.join('/');\n}\n\n/**\n * Normalizes `path`. Removes '.', '..', end trailing file separators.\n * @param path the path\n * @param hostOS host OS identifier\n * @returns a normalized path\n */\nexport function normPath(path: string, hostOS?: HostOS): string {\n return joinPathComponents(normPathComponents(splitPath(path, hostOS), hostOS));\n}\n\n// noinspection JSUnusedLocalSymbols\n/**\n * Normalizes path `components`. Removes '.', '..', end trailing empty strings.\n * @param components the path components\n * @param hostOS host OS identifier\n * @returns a normalized path components\n */\nexport function normPathComponents(components: string[], hostOS?: HostOS): string[] {\n const newComponents = Array<string>(components.length);\n let insPos = 0;\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n if (component === '.') {\n // No-op\n } else if (component === '..') {\n insPos--;\n } else {\n if (insPos < 0) {\n // Cannot normalize\n return components;\n }\n newComponents[insPos] = component;\n insPos++;\n }\n }\n if (insPos < 0) {\n // Cannot normalize\n return components;\n }\n return newComponents.slice(0, insPos);\n}\n\n/**\n * Join path components.\n * @param components the path components\n * @param hostOS host OS identifier\n * @returns a path\n */\nexport function joinPathComponents(components: string[], hostOS?: HostOS): string {\n return components.join(hostOS === 'Windows' ? '\\\\' : '/');\n}\n\n/**\n * Split path into path components.\n * @param path a path\n * @param hostOS host OS identifier\n * @returns the path's components\n */\nexport function splitPath(path: string, hostOS?: HostOS): string[] {\n if (hostOS === 'Windows') {\n if (isWindowsNetworkDevicePath(path) || isWindowsDrivePath(path)) {\n const components = splitPath(path.substring(2));\n if (components.length === 0) {\n return components;\n }\n return [path.substr(0, 2) + components[0]].concat(components.slice(1));\n }\n return path.split(/[/\\\\]/);\n }\n return path.split('/');\n}\n\n/**\n * Get the parent dir of path `path`.\n * @param path a path\n * @param hostOS host OS identifier\n * @returns the path's parent path\n */\nexport function getParentPath(path: string, hostOS?: HostOS): string {\n const components = splitPath(path, hostOS);\n return components.length > 0\n ? joinPathComponents(components.slice(0, components.length - 1), hostOS)\n : '';\n}\n\n/**\n * Get the basename of `path`.\n * @param path a path\n * @param hostOS host OS identifier\n * @returns the path's basename\n */\nexport function getBasename(path: string, hostOS?: HostOS): string {\n const components = splitPath(path, hostOS);\n return components.length > 0\n ? components[components.length - 1]\n : path;\n}\n\n/**\n * Get filename extension\n * @param basename the filename (a name, not a path!)\n */\nexport function getBasenameExtension(basename: string): string {\n const index = basename.lastIndexOf('.');\n if (index > 0) {\n return basename.substring(index + 1);\n }\n return '';\n}","import { IconName } from '@blueprintjs/core';\nimport { Feature, FeatureCollection, GeoJsonObject, Point } from 'geojson';\nimport { JSONSchema7 } from 'json-schema';\n\nimport { SimpleStyle } from '../common/geojson-simple-style';\nimport { HostOS } from '../common/paths';\nimport { BaseMapOptions } from './components/cesium/cesium-util';\nimport { GeometryToolType } from './components/cesium/geometry-tool';\nimport { FileNode } from './components/desktop/fs/FileNode';\nimport {\n FileFilter,\n MessageBoxOptions,\n MessageBoxResult, OpenDialogOptions, OpenDialogProperty,\n OpenDialogResult,\n SaveDialogOptions, SaveDialogProperty,\n SaveDialogResult\n} from './components/desktop/types';\nimport { PanelContainerLayout } from './components/PanelContainer';\nimport { ViewLayoutState, ViewState } from './components/ViewState';\nimport { JobFailure, JobProgress, JobStatus, WebAPIClient } from './webapi';\n\n\n/**\n * Interface describing Cate's application state structure.\n * Cate's application state is a giant, structured, plain JavaScript object.\n *\n * It is modelled after the principles explained in http://jamesknelson.com/5-types-react-application-state/.\n *\n * @author Norman Fomferra\n */\n\nexport interface State {\n data: DataState;\n communication: CommunicationState;\n control: ControlState;\n session: SessionState;\n location: LocationState;\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// DataState\n\n/**\n * Cate's domain data which is usually received from the Cate WebAPI service.\n */\nexport interface DataState {\n dataStores: DataStoreState[] | null;\n operations: OperationState[] | null;\n workspace: WorkspaceState | null;\n fsRootNode: FileNode;\n colorMaps: ColorMapCategoryState[] | null;\n baseMaps: BaseMapState[];\n workspaceNames: string[] | null;\n hasWebGL: boolean;\n}\n\nexport type WebAPIStatus = 'login' | 'launching' | 'connecting' | 'open' |\n 'error' | 'closed' | 'shuttingDown' | 'loggingOut';\n\nexport interface WebAPIServiceInfo {\n name: string;\n version: string;\n timestamp: string;\n userRootMode: boolean;\n hostOS?: HostOS;\n dependencies?: {[packageName: string]: string};\n autoStopInfo?: WebAPIAutoStopInfo;\n}\n\nexport interface WebAPIAutoStopInfo {\n // Configured auto-stop time in seconds\n availableTime: number;\n // Duration in seconds of service inactivity\n inactivityTime: number;\n // Duration in seconds remaining until service auto-stop\n remainingTime: number;\n}\n\nexport interface HubStatus {\n status: \"ok\" | \"offline\";\n message?: string;\n deployment: \"development\" | \"production\";\n}\n\nexport interface DataStoreNotice {\n id: string;\n title: string;\n content: string;\n icon: IconName | null;\n intent: string | null;\n}\n\nexport interface DataStoreState {\n id: string;\n title: string | null;\n isLocal: boolean;\n description: string | null;\n notices: DataStoreNotice[] | null;\n dataSources?: DataSourceState[] | null;\n}\n\nexport type DataSourceCapability =\n \"open\"\n | \"write_zarr\"\n | \"constrain_time\"\n | \"constrain_region\";\n\n\nexport interface DatasetDescriptor {\n data_id: string;\n data_type: string;\n crs?: string;\n bbox?: [number, number, number, number];\n spatial_res?: number;\n time_range?: [string | null, string | null];\n time_period?: string;\n data_vars?: VariableDescriptor[];\n coords?: VariableDescriptor[];\n abstract?: string;\n catalog_url?: string;\n catalogue_url?: string;\n cci_project?: string;\n info_url?: string;\n licences?: [string];\n title?: string;\n uuid?: string;\n // Anything else:\n // [attr_name: string]: any;\n}\n\nexport interface VariableDescriptor {\n name: string;\n units?: string;\n long_name?: string;\n standard_name?: string;\n dims?: string[];\n}\n\n// TODO: (forman) use this in the future instead of DatasetDescriptor/VariableDescriptor\n// {{{{{{{{{{{{\n\nexport interface DataDescriptor2 {\n data_id: string;\n data_type: string;\n crs?: string | null;\n bbox?: [number, number, number, number] | null;\n time_range?: [string | null, string | null] | null;\n time_period?: string | null;\n open_params_schema?: JSONSchema7 | null;\n}\n\nexport interface GeoDataFrameDescriptor2 extends DataDescriptor2 {\n}\n\nexport interface DatasetDescriptor2 extends DataDescriptor2 {\n spatial_res?: number | null;\n dims?: { [dim_name: string]: number } | null;\n coords?: { [var_name: string]: VariableDescriptor2 } | null;\n data_vars?: { [var_name: string]: VariableDescriptor2 } | null;\n attrs?: { [attr_name: string]: any } | null;\n}\n\nexport interface VariableDescriptor2 {\n name: string;\n dtype: string;\n dims: string[];\n chunks?: number[] | null;\n attrs?: { [attr_name: string]: any } | null;\n}\n\n// }}}}}}}}}}}}\n\n\nexport interface DataSourceState {\n id: string;\n title?: string;\n // TODO: (forman) replace by descriptor in the future\n metaInfo?: DatasetDescriptor;\n metaInfoStatus: 'init' | 'loading' | 'ok' | 'error';\n // TODO: (forman) use this in the future instead of metaInfo\n // descriptor?: DatasetDescriptor2 | GeoDataFrameDescriptor2;\n // descriptorStatus: 'init' | 'loading' | 'ok' | 'error';\n dataType?: string | null;\n capabilities?: DataSourceCapability[] | null;\n temporalCoverage?: [string, string] | null;\n}\n\nexport interface OperationState {\n name: string;\n qualifiedName: string;\n hasMonitor: boolean;\n description: string | null;\n tags: Array<string>;\n inputs: OperationInputState[];\n outputs: OperationOutputState[];\n}\n\nexport interface OperationIOBaseState {\n name: string;\n dataType: string;\n description: string | null;\n units?: string | null;\n}\n\nexport interface OperationInputState extends OperationIOBaseState {\n /* optional properties used mainly for validation */\n defaultValue?: any;\n nullable?: boolean;\n valueSet?: any[];\n valueSetSource?: string;\n valueRange?: [number, number] | [string, string];\n scriptLang?: string;\n fileOpenMode?: 'w' | 'r' | 'rw';\n fileFilters?: FileFilter[];\n fileProps?: OpenDialogProperty[] | SaveDialogProperty[];\n noUI?: boolean;\n password?: boolean;\n}\n\nexport interface OperationOutputState extends OperationIOBaseState {\n}\n\n/**\n * An operation argument that refers to a constant value.\n */\nexport interface OperationArgumentValue {\n value: any;\n}\n\n/**\n * An operation argument that refers to another resource.\n */\nexport interface OperationArgumentSource {\n /**\n * Resource name. May later also use syntax \"<resource>.<outputName>\" or \"<resource>[<variableName>]\".\n */\n source: string;\n}\n\n/**\n * Operation argument.\n */\nexport type OperationArg = OperationArgumentValue | OperationArgumentSource;\n\n/**\n * Positional operation argument list.\n */\n//export type OperationArgs = OperationArg[];\n\n/**\n * Non-positional operation keyword-arguments.\n */\nexport type OperationKWArgs = { [name: string]: OperationArg };\n\n/**\n * IMPORTANT: WorkspaceState must reflect what is returned by cate.core.workspace.Workspace.to_json_dict()\n */\nexport interface WorkspaceState {\n /**\n * The workspace' base directory path.\n */\n baseDir: string;\n /**\n * The workspace' description.\n */\n description: string | null;\n /**\n * Is it a scratch workspace? Scratch workspaces must be saved-as to some real location.\n */\n isScratch: boolean;\n /**\n * Has it been modified since it has been created, opened, or saved?\n */\n isModified: boolean;\n /**\n * Has it been saved before?\n */\n isSaved: boolean;\n /**\n * The workflow and its steps.\n */\n workflow: WorkflowState;\n /**\n * Information about the resources\n */\n resources: ResourceState[];\n}\n\n/**\n * IMPORTANT: WorkflowState must reflect what is returned by cate.core.workflow.Workflow.to_json_dict()\n */\nexport interface WorkflowState {\n steps: WorkflowStepState[];\n}\n\n/**\n * IMPORTANT: WorkflowStepState must reflect what is returned by cate.core.workflow.Step.to_json_dict()\n */\nexport interface WorkflowStepState {\n /**\n * Step ID. The ID will be used as Workspace's resource name.\n */\n id: string;\n\n /**\n * Step type (not used yet).\n */\n type: 'operation' | 'workflow' | 'python-expression' | 'python-script' | 'executable';\n\n /**\n * The actual action to be performed. Allowed values depend on 'type'.\n * For example, 'op' is the operation's name, if type===\"operation\".\n */\n op: string;\n\n /**\n * Whether the step stores resource files for faster opening of workspaces.\n */\n persistent?: boolean;\n\n inputs: { [name: string]: WorkflowPortState & string };\n outputs: { [name: string]: WorkflowPortState & string };\n}\n\n/**\n * IMPORTANT: WorkflowStepState must reflect what is returned by cate.core.workflow.NodePort.to_json_dict()\n */\nexport interface WorkflowPortState {\n /**\n * A constant value.\n * Constraint: value!==undefined, if sourceRef===null.\n */\n value: any | undefined;\n /**\n * Reference to a step which provides the value of this port.\n * Constraint: sourceRef!==null, if value===undefined.\n *\n * Source reference can either be the ID of another (single-output) step or it can have the form\n * \"stepId.outputPort\" if it refers to specific output of a (multi-output) step.\n */\n source: string | null;\n}\n\nexport type DimSizes = { [dimName: string]: number };\nexport type Attributes = { [attrName: string]: any };\n\n// TODO (forman): harmonize ResourceState + VariableState, in the end\n// 1. ResourceState is-a VariableState\n// 2. ResourceState has-zero-or-more VariableStates\n// 3. VariableState also has a path name\n\n/**\n * IMPORTANT: ResourceState must reflect what is returned by cate.core.workspace.Workspace.to_json_dict()\n */\nexport interface ResourceState {\n id: number;\n updateCount: number;\n name: string;\n dataType: string;\n dimSizes?: DimSizes;\n units?: string;\n validMin?: number;\n validMax?: number;\n attributes?: Attributes;\n variables?: VariableState[];\n coordVariables?: VariableState[];\n}\n\n/**\n * IMPORTANT: VariableState must reflect what is returned by cate.core.workspace.Workspace.to_json_dict()\n */\nexport interface VariableState {\n name: string;\n dataType: string;\n numDims?: number;\n dimNames?: string[];\n shape?: number[];\n chunkSizes?: number[];\n units?: string;\n validMin?: number;\n validMax?: number;\n data?: any[];\n attributes?: Attributes;\n isCoord?: boolean;\n isDefault?: boolean;\n imageLayout?: ImageLayout;\n isFeatureAttribute?: boolean;\n isYFlipped?: boolean;\n colorMapName?: string;\n displayMin?: number;\n displayMax?: number;\n // Only given, if variable is scalar, see issue #702\n value?: number | string | boolean;\n}\n\n/**\n * Image layout for use with Cesium and OpenLayers.\n */\nexport interface ImageLayout {\n extent?: {\n /** The westernmost longitude, in radians, in the range [-Pi, Pi]. */\n west: number,\n /** The southernmost latitude, in radians, in the range [-Pi/2, Pi/2]. */\n south: number,\n /** The easternmost longitude, in radians, in the range [-Pi, Pi]. */\n east: number,\n /** The northernmost latitude, in radians, in the range [-Pi/2, Pi/2]. */\n north: number\n };\n ellipsoid?: {\n /** The radius in the x direction. */\n x: number;\n /** The radius in the y direction. */\n y: number;\n /** The radius in the z direction. */\n z: number;\n };\n numLevels: number;\n numLevelZeroTilesX: number;\n numLevelZeroTilesY: number;\n tileWidth: number;\n tileHeight: number;\n}\n\nexport type WorldViewMode = '2D' | '3D';\n\n/**\n * Data object for view type \"world\".\n */\nexport interface WorldViewDataState {\n /**\n * 2D map or 3D globe?\n */\n viewMode: WorldViewMode;\n\n /**\n * ID of the base map, see state.data.baseMaps.\n */\n baseMapId: string;\n\n /**\n * Code of the projection used by the 2D map.\n */\n projectionCode: string;\n\n /**\n * The layers in a viewer.\n */\n layers: LayerState[];\n\n /**\n * The ID of the selected layer.\n */\n selectedLayerId: string | null;\n\n /**\n * The ID of the selected entity in Cesium 3D globe.\n */\n selectedEntityId: string | null;\n\n /**\n * The position of a layer split. Must be in the range 0 to 1.\n */\n layerSplitPosition;\n}\n\nexport interface FigureViewDataState {\n /**\n * The resource identifier.\n */\n resourceId: number;\n /**\n * Whether the figure has a fixed size or it adapts to the current container size.\n */\n fixedSize: boolean;\n}\n\nexport interface AnimationViewDataState extends FigureViewDataState {\n /**\n * The HTML representing the animation.\n */\n innerHTML?: string;\n /**\n * The response status.\n */\n status?: number;\n}\n\n\nexport interface TableViewDataState {\n resName: string;\n varName: string | null;\n dataRows: any[] | null;\n error?: any;\n isLoading?: boolean;\n}\n\n\n/**\n * State of a layer.\n */\nexport interface LayerState {\n /**\n * Layer ID.\n */\n id: string;\n\n /**\n * Layer type\n */\n type: 'VariableImage' | 'ResourceVector' | 'Image' | 'Vector' | 'Unknown';\n\n /**\n * Layer name.\n */\n name?: string | null;\n\n /**\n * True if the layer is visible and shown; otherwise, false.\n */\n visible: boolean;\n\n /**\n * The layer's opacity.\n */\n opacity?: number;\n}\n\nexport interface ImageStatisticsState {\n /**\n * The true minimum value in the current data subset.\n */\n min: number;\n\n /**\n * The true maximum value in the current data subset.\n */\n max: number;\n}\n\nexport const SPLIT_MODE_OFF = 'off';\nexport const SPLIT_MODE_LEFT = 'left';\nexport const SPLIT_MODE_RIGHT = 'right';\nexport type SplitMode = 'off' | 'left' | 'right';\n\n\n/**\n * Base of image layers.\n */\nexport interface ImageLayerBase extends LayerState {\n /**\n * The brightness of this layer. 1.0 uses the unmodified imagery color.\n * Less than 1.0 makes the imagery darker while greater than 1.0 makes it brighter.\n */\n brightness: number;\n\n /**\n * The contrast of this layer. 1.0 uses the unmodified imagery color.\n * Less than 1.0 reduces the contrast while greater than 1.0 increases it.\n */\n contrast: number;\n\n /**\n * The hue of this layer. 0.0 uses the unmodified imagery color.\n */\n hue: number;\n\n /**\n * The saturation of this layer. 1.0 uses the unmodified imagery color.\n * Less than 1.0 reduces the saturation while greater than 1.0 increases it.\n */\n saturation: number;\n\n /**\n * The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color.\n */\n gamma: number;\n\n /**\n * Split mode.\n */\n splitMode: SplitMode;\n}\n\n/**\n * State of an image layer.\n */\nexport interface ImageLayerState extends ImageLayerBase {\n /**\n * The layer type.\n */\n type: 'Image';\n}\n\n/**\n * Base of vector layers.\n */\nexport interface VectorLayerBase extends LayerState {\n /**\n * Stores the default style for all entities of the layer.\n */\n style?: SimpleStyle;\n\n /**\n * Stores the style and any edited entities.\n * This object will only contain keys, if an entities style has changed.\n * Default styles come from the SimpleStyle interface of VectorLayerBase.\n */\n entityStyles?: { [entityId: string]: SimpleStyle };\n}\n\n\n/**\n * State of a vector layer.\n */\nexport interface VectorLayerState extends VectorLayerBase {\n /**\n * The layer type.\n */\n type: 'Vector';\n\n /**\n * The (GeoJSON-providing) URL or GeoJSON object.\n */\n data: string | GeoJsonObject;\n}\n\n/**\n * Resource reference\n */\nexport interface ResourceRefState {\n /**\n * The id of the resource that contains the variable.\n */\n resId: number;\n}\n\n/**\n * Variable reference\n */\nexport interface VariableRefState extends ResourceRefState {\n /**\n * The name of the variable.\n */\n varName: string;\n}\n\n/**\n * Variable data reference\n */\nexport interface VariableDataRefState extends VariableRefState {\n /**\n * The current index into the variable that results in a 2D-subset (i.e. with dimensions ['lat', 'lon']).\n */\n varIndex: number[];\n}\n\n/**\n * State of an image layer that displays a variable.\n */\nexport interface VariableLayerBase extends LayerState, VariableDataRefState {\n /**\n * Image layer minimum display value.\n */\n displayMin: number;\n /**\n * Image layer maximum display value.\n */\n displayMax: number;\n /**\n * Image layer color map name.\n */\n colorMapName: string;\n /**\n * Whether to blend alpha 0...1 at bottom value range.\n */\n alphaBlending: boolean;\n /**\n * Image enhancement attributes.\n */\n statistics?: ImageStatisticsState;\n}\n\n/**\n * State of an image layer that displays a variable.\n */\nexport interface VariableImageLayerState extends ImageLayerBase, VariableLayerBase {\n /**\n * The layer type.\n */\n type: 'VariableImage';\n}\n\n/**\n * State of an image layer that displays a variable.\n */\nexport interface ResourceVectorLayerState extends VectorLayerBase, ResourceRefState {\n /**\n * The layer type.\n */\n type: 'ResourceVector';\n}\n\n/**\n * An object comprising the resource and one of its variables which can be represented as a spatial 2D layer.\n */\nexport class LayerVariableState {\n /**\n * The resource.\n */\n resource: ResourceState;\n /**\n * A spatial 2D variable within the resource.\n */\n variable: VariableState;\n}\n\nexport interface BaseMapState {\n id: string;\n title: string;\n options: BaseMapOptions | null;\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ColorMapState\n\n\nexport interface ColorMapState {\n name: string;\n imageData: string;\n}\n\nexport interface ColorMapCategoryState {\n name: string;\n description: string;\n colorMaps: ColorMapState[];\n}\n\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// CommunicationState\n\n/**\n * Communication state is the status of any not-yet-complete requests to other services.\n */\nexport interface CommunicationState {\n webAPIServiceURL: string;\n webAPIServiceInfo: WebAPIServiceInfo | null;\n webAPIStatus: WebAPIStatus | null;\n webAPIClient: WebAPIClient | null;\n // A map that stores the current state of any tasks (e.g. data fetch jobs from remote API) given a jobId\n tasks: { [jobId: number]: TaskState; };\n}\n\nexport interface TaskState {\n title?: string;\n status: JobStatus;\n failure?: JobFailure;\n progress?: JobProgress;\n requestLock?: string;\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ControlState\n\n\n/**\n * Control State is state which is specific to a given container component, and which is not stored in the screen’s\n * URL or in the HTML5 History API.\n */\nexport interface ControlState {\n\n // TODO (forman): Move following selection properties into SessionState so they can be stored.\n // WorkspacePanel\n selectedWorkspaceResourceName: string | null;\n selectedWorkflowStepId: string | null;\n // VariablesPanel\n selectedVariableName: string | null;\n\n selectedCtxOperationName: string | null;\n\n // A map that stores the last state of any dialog given a dialogId\n dialogs: { [dialogId: string]: DialogState };\n\n // Select directory dialog\n directorySelectDialog: OpenDialogState;\n // Open file dialog\n fileOpenDialog: OpenDialogState;\n // Save file dialog\n fileSaveDialog: SaveDialogState;\n // Browse file dialog\n fileBrowseDialog: BrowseDialogState;\n // Message box\n messageBox: MessageBoxState;\n\n // Take care, workspace objects come from Python back-end, therefore must preserve view settings.\n viewLayout: ViewLayoutState;\n views: ViewState<any>[];\n activeViewId: string | null;\n\n newPlacemarkToolType: GeometryToolType;\n\n // Used to force component update after an entity's properties have changed\n entityUpdateCount: number;\n}\n\nexport interface DialogState {\n isOpen?: boolean;\n}\n\nexport interface OpenDialogState extends DialogState {\n onClose: (result: OpenDialogResult) => any;\n options?: OpenDialogOptions;\n result?: OpenDialogResult;\n}\n\nexport interface SaveDialogState extends DialogState {\n onClose: (result: SaveDialogResult) => any;\n options?: SaveDialogOptions;\n result?: SaveDialogResult;\n}\n\nexport interface BrowseDialogState extends DialogState {\n onClose: (result: OpenDialogResult) => any;\n options?: OpenDialogOptions;\n}\n\nexport interface MessageBoxState extends DialogState {\n onClose?: (result: MessageBoxResult | null) => any;\n options?: MessageBoxOptions;\n result?: MessageBoxResult | null;\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// SessionState\n\nexport type SavedLayers = { [key: string]: LayerState };\n\n/**\n * Backend-configuration settings.\n */\nexport interface BackendConfigState {\n dataStoresPath: string;\n useWorkspaceImageryCache: boolean;\n resourceNamePattern: string;\n proxyUrl: string;\n}\n\nexport interface Placemark extends Feature<Point> {\n id: string;\n}\n\nexport interface PlacemarkCollection extends FeatureCollection<Point> {\n features: Placemark[];\n}\n\nexport const STYLE_CONTEXT_ENTITY = 'entity';\nexport const STYLE_CONTEXT_LAYER = 'layer';\n\nexport type StyleContext = 'entity' | 'layer';\nexport type WorkspacePanelMode = 'resources' | 'steps';\n\n/**\n * Session state contains information about the human being which is currently using Cate.\n * Session state is only ever read when a component is mounted.\n * Session state can be used to save preferences.\n */\nexport interface SessionState {\n mainWindowBounds?: { x: number; y: number; width: number; height: number };\n devToolsOpened?: boolean;\n forceAppBar?: boolean;\n /**\n * lastWorkspacePath != null, only if it is not a scratch-workspace\n */\n lastWorkspacePath?: string | null;\n reopenLastWorkspace?: boolean;\n offlineMode: boolean;\n autoUpdateSoftware: boolean;\n autoShowNewFigures: boolean;\n\n // AppMainPage\n panelContainerUndockedMode: boolean;\n leftPanelContainerLayout: PanelContainerLayout;\n rightPanelContainerLayout: PanelContainerLayout;\n selectedLeftTopPanelId: string | null;\n selectedLeftBottomPanelId: string | null;\n selectedRightTopPanelId: string | null;\n selectedRightBottomPanelId: string | null;\n\n showLayerTextOverlay: boolean;\n debugWorldView: boolean;\n\n /**\n * backendConfig settings are applied on restart (of the WebAPI) only.\n */\n backendConfig: BackendConfigState;\n\n // DataSourcesPanel\n selectedDataStoreId: string | null;\n selectedDataSourceId: string | null;\n dataSourceFilterExpr: string;\n dataSourceListHeight: number;\n showDataSourceDetails: boolean;\n showAllDataSources: boolean;\n showDataSourceIDs: boolean;\n showDataStoreDescription: boolean;\n showDataStoreNotices: boolean;\n\n // OperationsPanel\n selectedOperationName: string | null;\n operationFilterTags: string[];\n operationFilterExpr: string;\n operationListHeight: number;\n showOperationDetails: boolean;\n\n // WorkspacePanel\n workspacePanelMode: WorkspacePanelMode;\n resourceListHeight: number;\n showResourceDetails: boolean;\n workflowStepListHeight: number;\n showWorkflowStepDetails: boolean;\n\n // VariablePanel\n variableListHeight: number;\n showVariableDetails: boolean;\n\n // LayersPanel\n showSelectedVariableLayer: boolean;\n layerListHeight: number;\n showLayerDetails: boolean;\n lastBaseMapId: string;\n savedLayers: SavedLayers;\n styleContext: StyleContext;\n\n // PlacemarksPanel\n placemarkCollection: PlacemarkCollection;\n selectedPlacemarkId: string | null;\n placemarkListHeight: number;\n showPlacemarkDetails: boolean;\n defaultPlacemarkStyle: SimpleStyle;\n\n // Preferences\n showDependencies?: boolean;\n\n // EU GDPR\n cookieConsentObtained: boolean;\n trackingConsentObtained: boolean;\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// LocationState\n\nexport class GeographicPosition {\n longitude: number;\n latitude: number;\n height?: number;\n}\n\n/**\n * Location state stores information about the current location in space and time.\n * Information in this object may change frequently, e.g. due to mouse moves on a Globe.\n */\nexport interface LocationState {\n globeMousePosition: GeographicPosition | null;\n globeViewPosition: GeographicPosition | null;\n positionData: { [varName: string]: number } | null\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// MessageState\n\nexport interface MessageActionState {\n text: string;\n onClick?: (...actionArgs) => void;\n href?: string;\n icon?: IconName;\n}\n\nexport interface MessageState {\n type: 'info' | 'success' | 'notification' | 'warning' | 'error';\n text: string | JSX.Element;\n action?: MessageActionState;\n}\n\n","import { IActionProps, ILinkProps, Intent, IToaster, Position, Toaster } from '@blueprintjs/core';\nimport { MessageState } from './state';\n\nlet MessageToaster: IToaster | null = null;\n\nexport function showToast(message: MessageState, timeout?: number) {\n\n if (!MessageToaster) {\n MessageToaster = Toaster.create({\n className: 'cate-toaster',\n position: Position.BOTTOM,\n });\n }\n\n let icon;\n let intent;\n if (message.type === 'info') {\n icon = 'info-sign';\n intent = Intent.NONE;\n timeout = timeout || 2500;\n } else if (message.type === 'success') {\n icon = 'tick';\n intent = Intent.SUCCESS;\n timeout = timeout || 2500;\n } else if (message.type === 'notification') {\n icon = 'notifications';\n intent = Intent.PRIMARY;\n timeout = timeout || 2500;\n } else if (message.type === 'warning') {\n icon = 'warning-sign';\n intent = Intent.WARNING;\n timeout = timeout || 6000;\n } else if (message.type === 'error') {\n icon = 'error';\n intent = Intent.DANGER;\n timeout = timeout || 10000;\n } else {\n timeout = timeout || 5000;\n }\n\n let action: IActionProps & ILinkProps;\n if (message.action) {\n action = {\n onClick: message.action.onClick,\n text: message.action.text,\n icon: message.action.icon,\n href: message.action.href,\n target: message.action.href ? '_blank' : undefined,\n }\n }\n\n MessageToaster.show({\n message: message.text,\n icon,\n intent,\n action,\n timeout,\n });\n}\n","import { IconName } from '@blueprintjs/icons';\nimport * as assert from '../../common/assert';\n\n\nexport type SplitDir = 'hor' | 'ver';\n\nexport type ViewPath = string;\n\n\nexport interface ViewState<T> {\n id: string;\n title: string;\n icon?: IconName;\n /**\n * The view type is used to lookup the renderer for this kind of view, e.g. \"world\".\n */\n type: string;\n /**\n * Type T of 'data' property depends on 'type' property, e.g. if type is \"world\",\n * data may contains a layer list, the selected layer, and a projection code.\n */\n data: T;\n}\n\nexport type ViewRenderer<T> = (view: ViewState<T>) => JSX.Element;\n\n\n/**\n * Definition for a panel of views with one visible at a time.\n */\nexport interface ViewPanelState {\n viewIds: string[];\n selectedViewId: string | null;\n}\n\n/**\n * JSON-serializable view viewLayout\n */\nexport interface ViewSplitState {\n /**\n * First and second panel is either a view panel given by view IDs or another ViewSplitState.\n */\n layouts: [ViewLayoutState, ViewLayoutState];\n\n /**\n * Direction is horizontal/vertical.\n */\n dir: SplitDir;\n\n /**\n * Horizontal/vertical position of 1st panel in pixels.\n */\n pos: number;\n}\n\nexport type ViewLayoutState = ViewSplitState | ViewPanelState;\n\n\nexport function isViewSplitState(obj: any) {\n return 'layouts' in obj;\n}\n\nexport function isViewPanelState(obj: any) {\n return 'viewIds' in obj;\n}\n\nexport function getViewPanel(viewLayout: ViewLayoutState, viewPath: ViewPath): ViewPanelState {\n return _getViewPanel(viewLayout, viewPath, 0);\n}\n\nexport function findViewPanel(viewLayout: ViewLayoutState,\n filter: (viewPanel: ViewPanelState) => boolean): ViewPanelState | null {\n if (isViewPanelState(viewLayout)) {\n const viewPanel = viewLayout as ViewPanelState;\n return filter && filter(viewPanel) ? viewPanel : null;\n }\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n return findViewPanel(viewSplit.layouts[0], filter) || findViewPanel(viewSplit.layouts[1], filter);\n}\n\nexport function findMoveTargetViewIds(viewLayout: ViewLayoutState, sourceViewId: string): { after: string[]; before: string[] } {\n const result = {before: [], after: []};\n _collectMoveTargetViewIds(viewLayout, sourceViewId, result);\n return result;\n}\n\nexport function moveView(viewLayout: ViewLayoutState,\n sourceViewId: string,\n placement: 'before' | 'after',\n targetViewId: string): ViewLayoutState {\n return _moveView(viewLayout, sourceViewId, placement, targetViewId);\n}\n\nexport function addViewToPanel(viewLayout: ViewLayoutState,\n placeAfterViewId: string,\n viewId: string): ViewLayoutState {\n return _addViewToPanel(viewLayout, placeAfterViewId, viewId);\n}\n\nexport function addViewToLayout(viewLayout: ViewLayoutState,\n viewId: string): ViewLayoutState {\n return _addViewToLayout(viewLayout, viewId);\n}\n\nexport function splitViewPanel(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n dir: SplitDir,\n pos: number): ViewLayoutState {\n return _splitViewPanel(viewLayout, viewPath, dir, pos, 0);\n}\n\nexport function changeViewSplitPos(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n delta: number): ViewLayoutState {\n return _changeViewSplitPos(viewLayout, viewPath, delta, 0);\n}\n\nexport function selectViewInLayout(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n viewId: string): ViewLayoutState {\n return _selectViewInLayout(viewLayout, viewPath, viewId, 0);\n}\n\nexport function removeViewFromLayout(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n viewId: string): ViewLayoutState {\n return _removeViewFromLayout(viewLayout, viewPath, viewId, 0);\n}\n\nexport function removeAllViewsFromLayout(viewLayout: ViewLayoutState,\n viewPath: ViewPath) {\n return _removeViewFromLayout(viewLayout, viewPath, null, 0);\n}\n\n// function removeViewFromViewIds(viewIds: string[], viewId: string): string[] {\n// while (true) {\n// const i = viewIds.indexOf(viewId);\n// if (i >= 0) {\n// viewIds = viewIds.slice(0, i).concat(viewIds.slice(i + 1));\n// } else {\n// break;\n// }\n// }\n// return viewIds;\n// }\n\nexport function addViewToViewArray(views: ViewState<any>[], view: ViewState<any>): ViewState<any>[] {\n return views.concat([view]);\n}\n\nexport function removeViewFromViewArray(views: ViewState<any>[], viewId: string): ViewState<any>[] {\n while (true) {\n const i = views.findIndex(w => w.id === viewId);\n if (i >= 0) {\n views = views.slice(0, i).concat(views.slice(i + 1));\n } else {\n break;\n }\n }\n return views;\n}\n\n\nfunction _getViewPanel(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n pathIndex: number): ViewPanelState {\n if (isViewPanelState(viewLayout)) {\n return viewLayout as ViewPanelState;\n }\n if (pathIndex < viewPath.length) {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n const layoutIndex = viewPath[pathIndex];\n return _getViewPanel(viewSplit.layouts[layoutIndex], viewPath, pathIndex + 1);\n } else {\n return null;\n }\n}\n\n\nexport function _moveView(viewLayout: ViewLayoutState,\n sourceViewId: string,\n placement: 'before' | 'after',\n targetViewId: string): ViewLayoutState {\n if (isViewSplitState(viewLayout)) {\n const viewSplit = viewLayout as ViewSplitState;\n let oldLayout1 = viewSplit.layouts[0];\n let oldLayout2 = viewSplit.layouts[1];\n let newLayout1 = _moveView(oldLayout1, sourceViewId, placement, targetViewId);\n let newLayout2 = _moveView(oldLayout2, sourceViewId, placement, targetViewId);\n if (oldLayout1 === newLayout1 && oldLayout2 === newLayout2) {\n // no change!\n return viewSplit;\n }\n if (newLayout1 === null) {\n assert.ok(newLayout2);\n return newLayout2;\n }\n if (newLayout2 === null) {\n return newLayout1;\n }\n return {...viewSplit, layouts: [newLayout1, newLayout2]} as ViewSplitState;\n } else {\n const viewPanel = viewLayout as ViewPanelState;\n let viewIds = viewPanel.viewIds;\n let selectedViewId = viewPanel.selectedViewId;\n\n const sourceViewIndex = viewIds.findIndex(id => id === sourceViewId);\n if (sourceViewIndex >= 0) {\n // remove sourceViewId\n viewIds = viewIds.slice();\n viewIds.splice(sourceViewIndex, 1);\n if (viewIds.length === 0) {\n // sourceViewId was the last one, so close this panel\n return null;\n }\n if (selectedViewId === sourceViewId && viewIds.length) {\n // the removed view was the selected view, select some other view now\n const selectedViewIndex = sourceViewIndex < viewIds.length ? sourceViewIndex : viewIds.length - 1;\n selectedViewId = viewIds[selectedViewIndex];\n }\n }\n\n const targetViewIndex = viewIds.findIndex(id => id === targetViewId);\n if (targetViewIndex >= 0) {\n if (placement === 'before') {\n // insert sourceViewId before\n viewIds = viewIds.slice(0, targetViewIndex).concat([sourceViewId].concat(viewIds.slice(targetViewIndex)));\n } else {\n // insert sourceViewId after\n viewIds = viewIds.slice(0, targetViewIndex + 1).concat([sourceViewId].concat(viewIds.slice(targetViewIndex + 1)));\n }\n selectedViewId = sourceViewId;\n }\n if (viewIds !== viewPanel.viewIds) {\n return {viewIds, selectedViewId};\n }\n }\n // no change!\n return viewLayout;\n}\n\n\n// TODO (forman): refactor out similar code with _moveViewToPanel()\nfunction _addViewToPanel(viewLayout: ViewLayoutState,\n placeAfterViewId: string,\n viewId: string): ViewLayoutState {\n if (isViewSplitState(viewLayout)) {\n const viewSplit = viewLayout as ViewSplitState;\n let oldLayout1 = viewSplit.layouts[0];\n let oldLayout2 = viewSplit.layouts[1];\n let newLayout1 = _addViewToPanel(oldLayout1, placeAfterViewId, viewId);\n let newLayout2;\n if (oldLayout1 === newLayout1) {\n newLayout2 = _addViewToPanel(oldLayout2, placeAfterViewId, viewId);\n } else {\n newLayout2 = oldLayout2;\n }\n if (oldLayout1 === newLayout1 && oldLayout2 === newLayout2) {\n // no change!\n return viewSplit;\n }\n const layouts = [newLayout1, newLayout2];\n return {...viewSplit, layouts} as ViewSplitState;\n } else {\n const viewPanel = viewLayout as ViewPanelState;\n let oldViewIds = viewPanel.viewIds;\n const placeAfterIndex = oldViewIds.findIndex(id => id === placeAfterViewId);\n if (placeAfterIndex < 0) {\n // no change!\n return viewPanel;\n }\n const insertionIndex = placeAfterIndex + 1;\n const viewIds = oldViewIds.slice(0, insertionIndex).concat([viewId].concat(oldViewIds.slice(insertionIndex)));\n return {viewIds, selectedViewId: viewId};\n }\n}\n\n\nfunction _addViewToLayout(viewLayout: ViewLayoutState,\n viewId: string): ViewLayoutState {\n if (isViewSplitState(viewLayout)) {\n const viewSplit = viewLayout as ViewSplitState;\n const oldLayout = viewSplit.layouts[0];\n const newLayout = _addViewToLayout(oldLayout, viewId);\n const layouts = [newLayout, viewSplit.layouts[1]];\n return {...viewSplit, layouts} as ViewSplitState;\n } else {\n const viewPanel = viewLayout as ViewPanelState;\n const viewIds = viewPanel.viewIds.concat([viewId]);\n return {viewIds, selectedViewId: viewId};\n }\n}\n\n\nfunction _splitViewPanel(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n dir: SplitDir,\n pos: number,\n pathIndex: number): ViewLayoutState {\n assert.ok(pathIndex <= viewPath.length, 'illegal path index');\n if (pathIndex < viewPath.length) {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n const layoutIndex = viewPath.charCodeAt(pathIndex) - 48; // 48 = ascii('0')\n const oldLayout = viewSplit.layouts[layoutIndex];\n const newLayout = _splitViewPanel(oldLayout, viewPath, dir, pos, pathIndex + 1);\n let layouts;\n if (layoutIndex === 0) {\n layouts = [newLayout, viewSplit.layouts[1]];\n } else {\n layouts = [viewSplit.layouts[0], newLayout];\n }\n return {...viewSplit, layouts};\n } else {\n assert.ok(isViewPanelState(viewLayout), 'ViewPanelState expected');\n const viewPanel = viewLayout as ViewPanelState;\n let viewIds = viewPanel.viewIds;\n assert.ok(viewIds.length > 1, 'ViewPanelState must have more than one view to be split');\n const selectedViewId = viewPanel.selectedViewId;\n let index = viewIds.findIndex(id => id === selectedViewId);\n if (index === viewIds.length - 1) {\n index -= 1;\n }\n assert.ok(index >= 0);\n const viewIds1 = viewIds.slice(0, index + 1);\n const viewIds2 = viewIds.slice(index + 1);\n return {\n dir, pos,\n layouts: [\n {\n viewIds: viewIds1,\n selectedViewId: viewIds1[viewIds1.length - 1],\n },\n {\n viewIds: viewIds2,\n selectedViewId: viewIds2[0],\n }\n ],\n };\n }\n}\n\nfunction _changeViewSplitPos(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n delta: number,\n pathIndex: number): ViewLayoutState {\n assert.ok(pathIndex <= viewPath.length, 'illegal path index');\n if (pathIndex < viewPath.length) {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n const layoutIndex = viewPath.charCodeAt(pathIndex) - 48; // 48 = ascii('0')\n const oldLayout = viewSplit.layouts[layoutIndex];\n const newLayout = _changeViewSplitPos(oldLayout, viewPath, delta, pathIndex + 1);\n let layouts;\n if (layoutIndex === 0) {\n layouts = [newLayout, viewSplit.layouts[1]];\n } else {\n layouts = [viewSplit.layouts[0], newLayout];\n }\n return {...viewSplit, layouts};\n } else {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n return {...viewSplit, pos: viewSplit.pos + delta};\n }\n}\n\nfunction _selectViewInLayout(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n viewId: string,\n pathIndex: number): ViewLayoutState {\n assert.ok(pathIndex <= viewPath.length, 'illegal path index');\n if (pathIndex < viewPath.length) {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n const layoutIndex = viewPath.charCodeAt(pathIndex) - 48; // 48 = ascii('0')\n const oldLayout = viewSplit.layouts[layoutIndex];\n const newLayout = _selectViewInLayout(oldLayout, viewPath, viewId, pathIndex + 1);\n if (oldLayout === newLayout) {\n // No change!\n return viewSplit;\n }\n let layouts;\n if (layoutIndex === 0) {\n layouts = [newLayout, viewSplit.layouts[1]];\n } else {\n layouts = [viewSplit.layouts[0], newLayout];\n }\n return {...viewSplit, layouts};\n } else {\n assert.ok(isViewPanelState(viewLayout), 'ViewPanelState expected');\n const viewPanel = viewLayout as ViewPanelState;\n let viewIds = viewPanel.viewIds;\n if (viewId === viewPanel.selectedViewId) {\n // No change!\n return viewPanel;\n }\n assert.ok(viewIds.indexOf(viewId) >= 0, 'viewId not found');\n return {viewIds: viewIds, selectedViewId: viewId};\n }\n}\n\nexport function selectView(viewLayout: ViewLayoutState, viewId: string): ViewLayoutState {\n if (isViewSplitState(viewLayout)) {\n const viewSplit = viewLayout as ViewSplitState;\n const oldLayout1 = viewSplit.layouts[0];\n const oldLayout2 = viewSplit.layouts[1];\n const newLayout1 = selectView(oldLayout1, viewId);\n const newLayout2 = selectView(oldLayout2, viewId);\n if (oldLayout1 !== newLayout1 || oldLayout2 !== newLayout2) {\n return {...viewSplit, layouts: [newLayout1, newLayout2]} as ViewSplitState;\n }\n } else {\n const viewPanel = viewLayout as ViewPanelState;\n if (viewId !== viewPanel.selectedViewId) {\n const viewIds = viewPanel.viewIds;\n const selectedViewIndex = viewIds.findIndex(id => id === viewId);\n if (selectedViewIndex >= 0) {\n return {viewIds, selectedViewId: viewId};\n }\n }\n }\n // no change\n return viewLayout;\n}\n\n\nfunction _removeViewFromLayout(viewLayout: ViewLayoutState,\n viewPath: ViewPath,\n viewId: string | null,\n pathIndex: number): ViewLayoutState {\n assert.ok(pathIndex <= viewPath.length, 'illegal path index');\n if (pathIndex < viewPath.length) {\n assert.ok(isViewSplitState(viewLayout), 'ViewSplitState expected');\n const viewSplit = viewLayout as ViewSplitState;\n const layoutIndex = viewPath.charCodeAt(pathIndex) - 48; // 48 = ascii('0')\n const oldLayout = viewSplit.layouts[layoutIndex];\n const newLayout = _removeViewFromLayout(oldLayout, viewPath, viewId, pathIndex + 1);\n if (oldLayout === newLayout) {\n // No change!\n return viewSplit;\n }\n if (isViewPanelState(newLayout) && (newLayout as ViewPanelState).viewIds.length === 0) {\n // A panel has been returned which is now empty, so return the other panel that is left.\n if (layoutIndex === 0) {\n return viewSplit.layouts[1];\n } else {\n return viewSplit.layouts[0];\n }\n }\n\n let layouts;\n if (layoutIndex === 0) {\n layouts = [newLayout, viewSplit.layouts[1]];\n } else {\n layouts = [viewSplit.layouts[0], newLayout];\n }\n\n return {...viewSplit, layouts};\n } else {\n assert.ok(isViewPanelState(viewLayout), 'ViewPanelState expected');\n const viewPanel = viewLayout as ViewPanelState;\n if (viewId) {\n let viewIds = viewPanel.viewIds;\n const viewIndex = viewIds.indexOf(viewId);\n if (viewIndex < 0) {\n // No change!\n return viewPanel;\n }\n viewIds = viewIds.slice(0, viewIndex).concat(viewIds.slice(viewIndex + 1));\n let selectedViewId = viewPanel.selectedViewId;\n if (selectedViewId === viewId) {\n selectedViewId = viewIndex > 0 ? viewIds[viewIndex - 1] : viewIndex < viewIds.length ? viewIds[viewIndex] : null;\n }\n return {viewIds, selectedViewId};\n } else {\n return {viewIds: [], selectedViewId: null};\n }\n }\n}\n\nfunction _collectMoveTargetViewIds(viewLayout: ViewLayoutState, sourceViewId: string, result: { after: string[]; before: string[] }) {\n const viewIds = (viewLayout as ViewPanelState).viewIds;\n if (viewIds) {\n let lastViewId = null;\n for (let i = 0; i < viewIds.length; i++) {\n const viewId = viewIds[i];\n if (viewId !== sourceViewId) {\n const nextViewId = i < viewIds.length + 1 ? viewIds[i + 1] : null;\n if (nextViewId === null || nextViewId !== sourceViewId) {\n result.after.push(viewId);\n }\n if (lastViewId === null || lastViewId !== sourceViewId) {\n result.before.push(viewId);\n }\n }\n lastViewId = viewId;\n }\n }\n const layouts = (viewLayout as ViewSplitState).layouts;\n if (layouts) {\n for (let layout of layouts) {\n _collectMoveTargetViewIds(layout, sourceViewId, result);\n }\n }\n}\n","export const NEW_OPERATION_STEP_DIALOG_ID = 'newOperationStepDialog';\nexport const NEW_CTX_OPERATION_STEP_DIALOG_ID = 'newCtxOperationStepDialog';\nexport const EDIT_OPERATION_STEP_DIALOG_ID = 'editOperationStepDialog';\n\n","import * as Cookies from 'js-cookie';\n\nconst C_COOKIE_CONSENT_OBTAINED = 'cookieConsentObtained';\nconst C_TRACKING_CONSENT_OBTAINED = 'trackingConsentObtained';\n\nconst C_ON = '1';\nconst C_OFF = '0';\nconst C_OPTIONS: Cookies.CookieAttributes = {expires: 365};\n\n\nexport function isCookieConsentObtained() : boolean {\n return Cookies.get(C_COOKIE_CONSENT_OBTAINED) === C_ON;\n}\n\nexport function isTrackingConsentObtained() : boolean {\n return Cookies.get(C_TRACKING_CONSENT_OBTAINED) === C_ON;\n}\n\nexport function storeCookieConsent(trackingConsentObtained: boolean) {\n Cookies.set(C_COOKIE_CONSENT_OBTAINED, C_ON, C_OPTIONS);\n Cookies.set(C_TRACKING_CONSENT_OBTAINED, trackingConsentObtained ? C_ON : C_OFF, C_OPTIONS);\n}\n","import { isCookieConsentObtained, isTrackingConsentObtained } from './cookies';\nimport {\n CommunicationState,\n ControlState,\n DataState,\n LocationState,\n SessionState,\n STYLE_CONTEXT_ENTITY,\n WorldViewDataState\n} from './state';\nimport { BASE_MAPS, DEFAULT_BASE_MAP_ID, hasWebGL, MY_PLACES_LAYER, newWorldView } from './state-util';\nimport { SimpleStyle } from '../common/geojson-simple-style';\nimport { ViewState } from './components/ViewState';\n\n\nexport const DEFAULT_SERVICE_URL = 'http://localhost:9090';\n\nexport const INITIAL_DATA_STATE: DataState = {\n dataStores: null,\n operations: null,\n workspace: null,\n colorMaps: null,\n baseMaps: BASE_MAPS,\n fsRootNode: {name: '', isDir: true, lastModified: '', size: 0},\n workspaceNames: null,\n hasWebGL: hasWebGL(),\n};\n\nconst INITIAL_WORLD_VIEW: ViewState<WorldViewDataState> = newWorldView();\n\nexport const INITIAL_CONTROL_STATE: ControlState = {\n selectedWorkflowStepId: null,\n selectedWorkspaceResourceName: null,\n selectedVariableName: null,\n\n dialogs: {},\n directorySelectDialog: {\n onClose: () => {\n }\n },\n fileOpenDialog: {\n onClose: () => {\n }\n },\n fileSaveDialog: {\n onClose: () => {\n }\n },\n fileBrowseDialog: {\n onClose: () => {\n }\n },\n messageBox: {},\n\n selectedCtxOperationName: null,\n\n views: [INITIAL_WORLD_VIEW],\n viewLayout: {\n viewIds: [INITIAL_WORLD_VIEW.id],\n selectedViewId: INITIAL_WORLD_VIEW.id,\n },\n activeViewId: INITIAL_WORLD_VIEW.id,\n\n newPlacemarkToolType: 'NoTool',\n entityUpdateCount: 0,\n};\n\n\nexport const INITIAL_SESSION_STATE: SessionState = {\n reopenLastWorkspace: false,\n lastWorkspacePath: null,\n autoUpdateSoftware: true,\n autoShowNewFigures: true,\n offlineMode: false,\n showSelectedVariableLayer: true,\n savedLayers: {},\n\n selectedDataStoreId: null,\n selectedDataSourceId: null,\n dataSourceFilterExpr: '',\n selectedOperationName: null,\n operationFilterTags: [],\n operationFilterExpr: '',\n\n dataSourceListHeight: 200,\n showDataSourceDetails: true,\n resourceListHeight: 100,\n showResourceDetails: true,\n workflowStepListHeight: 100,\n showWorkflowStepDetails: true,\n operationListHeight: 200,\n showOperationDetails: true,\n variableListHeight: 200,\n showVariableDetails: true,\n layerListHeight: 160,\n showLayerDetails: true,\n lastBaseMapId: DEFAULT_BASE_MAP_ID,\n\n panelContainerUndockedMode: false,\n leftPanelContainerLayout: {horPos: 300, verPos: 400},\n rightPanelContainerLayout: {horPos: 300, verPos: 400},\n selectedLeftTopPanelId: 'dataSources',\n selectedLeftBottomPanelId: 'operations',\n selectedRightTopPanelId: 'workspace',\n selectedRightBottomPanelId: 'variables',\n placemarkCollection: {\n type: 'FeatureCollection',\n features: []\n },\n selectedPlacemarkId: null,\n placemarkListHeight: 160,\n showPlacemarkDetails: true,\n defaultPlacemarkStyle: {...MY_PLACES_LAYER.style} as SimpleStyle,\n\n workspacePanelMode: 'steps',\n\n showDataStoreDescription: false,\n showDataStoreNotices: true,\n showDataSourceIDs: true,\n showAllDataSources: false,\n\n showLayerTextOverlay: true,\n debugWorldView: false,\n styleContext: STYLE_CONTEXT_ENTITY,\n\n backendConfig: {\n dataStoresPath: null,\n useWorkspaceImageryCache: false,\n resourceNamePattern: 'res_{index}',\n proxyUrl: null,\n },\n\n cookieConsentObtained: isCookieConsentObtained(),\n trackingConsentObtained: isTrackingConsentObtained(),\n};\n\n\nexport const INITIAL_COMMUNICATION_STATE: CommunicationState = {\n webAPIServiceURL: DEFAULT_SERVICE_URL,\n webAPIStatus: null,\n webAPIServiceInfo: null,\n webAPIClient: null,\n tasks: {},\n};\n\nexport const INITIAL_LOCATION_STATE: LocationState = {\n globeMousePosition: null,\n globeViewPosition: null,\n positionData: null,\n};\n\n","import { combineReducers, Reducer } from 'redux';\nimport deepEqual from 'deep-equal';\n\nimport * as assert from '../common/assert';\nimport { featurePropertiesFromSimpleStyle } from '../common/geojson-simple-style';\nimport { updateObject, updatePropertyObject } from '../common/objutil';\nimport { isString } from '../common/types';\nimport * as actions from './actions';\nimport { Action, OBTAIN_COOKIE_CONSENT, UPDATE_FS_ROOT_NODE } from './actions';\nimport { updateFileNode } from './components/desktop/fs/FileNode';\nimport {\n addViewToLayout,\n addViewToPanel,\n addViewToViewArray,\n changeViewSplitPos,\n findViewPanel,\n getViewPanel,\n moveView,\n removeViewFromLayout,\n removeViewFromViewArray,\n selectView,\n selectViewInLayout,\n splitViewPanel,\n ViewState\n} from './components/ViewState';\nimport { NEW_CTX_OPERATION_STEP_DIALOG_ID } from './containers/operation-step-dialog-ids';\nimport { storeCookieConsent } from './cookies';\nimport {\n INITIAL_COMMUNICATION_STATE,\n INITIAL_CONTROL_STATE,\n INITIAL_DATA_STATE,\n INITIAL_LOCATION_STATE,\n INITIAL_SESSION_STATE\n} from './initial-state';\nimport {\n CommunicationState,\n ControlState, DataSourceState,\n DataState,\n DataStoreState,\n LayerState,\n LocationState,\n SessionState,\n State,\n VectorLayerBase\n} from './state';\nimport {\n AUTO_LAYER_ID,\n computeDataSourceCapabilities,\n getFigureViewTitle,\n getPlacemarkTitleAndIndex,\n isImageLayer,\n isVectorLayer,\n newAnimationView,\n newFigureView,\n newTableView,\n newWorldView,\n PLACEMARK_ID_PREFIX,\n updateAutoLayer,\n} from './state-util';\n\n\n// Note: reducers are unit-tested through actions.spec.ts\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// state.data reducers\n\nconst updateDataStores = (state: DataState,\n action: Action,\n createDataSources: (dataStore: DataStoreState) => DataSourceState[]): DataState => {\n const dataStoreId = action.payload.dataStoreId;\n const dataStoreIndex = state.dataStores.findIndex(dataStore => dataStore.id === dataStoreId);\n if (dataStoreIndex < 0) {\n throw Error('illegal data store ID: ' + dataStoreId);\n }\n const oldDataStore = state.dataStores[dataStoreIndex];\n const newDataStore = {...oldDataStore, dataSources: createDataSources(oldDataStore)};\n const newDataStores = [...state.dataStores];\n newDataStores[dataStoreIndex] = newDataStore;\n return {...state, dataStores: newDataStores};\n};\n\nconst dataReducer = (state: DataState = INITIAL_DATA_STATE, action: Action): DataState => {\n switch (action.type) {\n case actions.UPDATE_WORKSPACE_NAMES: {\n const workspaceNames = action.payload.workspaceNames || null;\n return {...state, workspaceNames};\n }\n case actions.UPDATE_OPERATIONS: {\n const operations = action.payload.operations;\n return {...state, operations};\n }\n case actions.SET_CURRENT_WORKSPACE: {\n const workspace = action.payload.workspace;\n return {...state, workspace};\n }\n case UPDATE_FS_ROOT_NODE: {\n const {path, updatedFileNode} = action.payload;\n const fsRootNode = updateFileNode(state.fsRootNode, path, updatedFileNode);\n return {...state, fsRootNode};\n }\n case actions.UPDATE_COLOR_MAPS: {\n const colorMaps = action.payload.colorMaps;\n return {...state, colorMaps};\n }\n case actions.UPDATE_DATA_STORES: {\n const dataStores = action.payload.dataStores.slice();\n return {...state, dataStores};\n }\n case actions.UPDATE_DATA_SOURCES: {\n return updateDataStores(state, action, () => {\n return action.payload.dataSources.slice();\n });\n }\n case actions.UPDATE_DATA_SOURCE_META_INFO: {\n return updateDataStores(state, action, dataStore => {\n const newDataSources = [...dataStore.dataSources];\n const {dataSourceId, metaInfo, metaInfoStatus} = action.payload;\n const dataSourceIndex = newDataSources.findIndex(dataSource => dataSource.id === dataSourceId);\n if (dataSourceIndex < 0) {\n throw Error('illegal data source ID: ' + dataSourceId);\n }\n const oldDataSource = newDataSources[dataSourceIndex];\n let newDataSource = {\n ...oldDataSource,\n metaInfo,\n metaInfoStatus,\n };\n let capabilities = newDataSource.capabilities;\n if (!capabilities && metaInfo && metaInfoStatus === 'ok') {\n capabilities = computeDataSourceCapabilities(newDataSource);\n }\n if (capabilities !== newDataSource.capabilities) {\n newDataSource = {...newDataSource, capabilities}\n }\n newDataSources[dataSourceIndex] = newDataSource;\n return newDataSources;\n });\n }\n }\n return state;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// state.control reducers\n\nconst controlReducer = (state: ControlState = INITIAL_CONTROL_STATE, action: Action) => {\n switch (action.type) {\n case actions.RENAME_RESOURCE: {\n const resName = action.payload.resName;\n const newResName = action.payload.newResName;\n\n // Rename resName in selectedWorkspaceResourceName\n let selectedWorkspaceResourceName = state.selectedWorkspaceResourceName;\n if (selectedWorkspaceResourceName === resName) {\n selectedWorkspaceResourceName = newResName;\n }\n\n // Rename resName in views and their layers\n const views = viewsReducer(state.views, action, state.activeViewId);\n\n if (selectedWorkspaceResourceName !== state.selectedWorkspaceResourceName\n || views !== state.views) {\n return {...state, selectedWorkspaceResourceName, views};\n }\n return state;\n }\n case actions.UPDATE_ENTITY_STYLE: {\n const views = viewsReducer(state.views, action, state.activeViewId);\n if (views !== state.views) {\n return {...state, views};\n }\n return state;\n }\n case actions.UPDATE_DATA_SOURCES: {\n const dataSources = action.payload.dataSources;\n const selectedDataSourceId = (dataSources && dataSources.length) ? dataSources[0].id : null;\n return {...state, selectedDataSourceId};\n }\n case actions.UPDATE_OPERATIONS: {\n const operations = action.payload.operations;\n const selectedOperationName = (operations && operations.length) ? operations[0].name : null;\n return {...state, selectedOperationName};\n }\n case actions.SET_SELECTED_VARIABLE: {\n const selectedVariable = action.payload.selectedVariable;\n const selectedVariableName = selectedVariable ? selectedVariable.name : null;\n let views = state.views;\n const newViews = viewsReducer(state.views, action, state.activeViewId);\n if (newViews !== views) {\n views = newViews;\n }\n return {...state, selectedVariableName, views};\n }\n case actions.UPDATE_CONTROL_STATE:\n return {...state, ...action.payload};\n case actions.ADD_PLACEMARK:\n return {...state, newPlacemarkToolType: 'NoTool'};\n case actions.ACTIVATE_NEW_PLACEMARK_TOOL: {\n let newPlacemarkToolType = action.payload.newPlacemarkToolType;\n if (newPlacemarkToolType === state.newPlacemarkToolType) {\n newPlacemarkToolType = 'NoTool';\n }\n return {...state, newPlacemarkToolType};\n }\n case actions.UPDATE_DIALOG_STATE: {\n const dialogs = updatePropertyObject(state.dialogs, action.payload.dialogId, action.payload.dialogState);\n return {...state, dialogs};\n }\n case actions.ADD_WORLD_VIEW: {\n const view = newWorldView(action.payload.baseMapId);\n return addView(state, view, action.payload.placeAfterViewId);\n }\n case actions.SHOW_FIGURE_VIEW: {\n const {resource, placeAfterViewId} = action.payload;\n const figureView = state.views.find(v => v.type === 'figure' && resource.id === v.data.resourceId);\n if (figureView) {\n const viewLayout = selectView(state.viewLayout, figureView.id);\n return {...state, viewLayout};\n } else {\n const view = newFigureView(resource);\n return addView(state, view, placeAfterViewId);\n }\n }\n case actions.SHOW_ANIMATION_VIEW: {\n const {resource, placeAfterViewId} = action.payload;\n const animationView = state.views.find(v => v.type === 'animation' && resource.id === v.data.resourceId);\n if (animationView) {\n const viewLayout = selectView(state.viewLayout, animationView.id);\n return {...state, viewLayout};\n } else {\n const view = newAnimationView(resource);\n return addView(state, view, placeAfterViewId);\n }\n }\n case actions.SHOW_TABLE_VIEW: {\n const {resName, varName, placeAfterViewId} = action.payload;\n // TODO: use resource.id, not .name!!!\n const tableView = state.views.find(v => v.type === 'table' && v.data.resName === resName && v.data.varName === varName);\n if (tableView) {\n const viewLayout = selectView(state.viewLayout, tableView.id);\n return {...state, viewLayout};\n } else {\n const view = newTableView(resName, varName);\n return addView(state, view, placeAfterViewId);\n }\n }\n case actions.ADD_TABLE_VIEW: {\n const {placeAfterViewId, resName, varName} = action.payload;\n const view = newTableView(resName, varName);\n return addView(state, view, placeAfterViewId);\n }\n case actions.SELECT_VIEW: {\n const {viewPath, viewId} = action.payload;\n const viewLayout = selectViewInLayout(state.viewLayout, viewPath, viewId);\n return {...state, viewLayout, activeViewId: viewId};\n }\n case actions.MOVE_VIEW: {\n const {sourceViewId, placement, targetViewId} = action.payload;\n const viewLayout = moveView(state.viewLayout, sourceViewId, placement, targetViewId);\n let activeViewId = state.activeViewId;\n if (activeViewId) {\n const containsActiveId = viewPanel => viewPanel.viewIds.indexOf(activeViewId) >= 0;\n const activeViewPanel = findViewPanel(viewLayout, containsActiveId);\n if (activeViewPanel && activeViewPanel.selectedViewId !== activeViewId) {\n activeViewId = activeViewPanel.selectedViewId;\n }\n }\n return {...state, viewLayout, activeViewId};\n }\n case actions.CLOSE_VIEW: {\n const viewPath = action.payload.viewPath;\n const viewId = action.payload.viewId;\n const views = removeViewFromViewArray(state.views, viewId);\n const viewLayout = removeViewFromLayout(state.viewLayout, viewPath, viewId);\n let activeViewId = state.activeViewId;\n if (activeViewId === viewId) {\n activeViewId = null;\n let viewPanel = getViewPanel(viewLayout, viewPath);\n if (viewPanel && viewPanel.selectedViewId) {\n activeViewId = viewPanel.selectedViewId;\n } else {\n viewPanel = findViewPanel(viewLayout, viewPanel => !!viewPanel.selectedViewId);\n if (viewPanel) {\n activeViewId = viewPanel.selectedViewId;\n }\n }\n }\n return {...state, viewLayout, views, activeViewId};\n }\n case actions.SPLIT_VIEW_PANEL: {\n const viewPath = action.payload.viewPath;\n const dir = action.payload.dir;\n const pos = action.payload.pos;\n const viewLayout = splitViewPanel(state.viewLayout, viewPath, dir, pos);\n return {...state, viewLayout};\n }\n case actions.CHANGE_VIEW_SPLIT_POS: {\n const viewPath = action.payload.viewPath;\n const delta = action.payload.delta;\n const viewLayout = changeViewSplitPos(state.viewLayout, viewPath, delta);\n return {...state, viewLayout};\n }\n case actions.INC_ENTITY_UPDATE_COUNT: {\n const entityUpdateCount = state.entityUpdateCount + 1;\n return {...state, entityUpdateCount};\n }\n case actions.INVOKE_CTX_OPERATION: {\n const {selectedCtxOperationName, inputAssignments} = action.payload;\n let dialogState: any = state.dialogs[NEW_CTX_OPERATION_STEP_DIALOG_ID];\n dialogState = {...dialogState, isOpen: true, inputAssignments};\n return {\n ...state,\n selectedCtxOperationName,\n dialogs: {...state.dialogs, [NEW_CTX_OPERATION_STEP_DIALOG_ID]: dialogState}\n };\n }\n case actions.UPDATE_MOUSE_IDLE_STATE: {\n return {...state, ...action.payload};\n }\n case actions.OPEN_MESSAGE_BOX: {\n return {\n ...state, messageBox: {...state.messageBox, ...action.payload, isOpen: true}\n };\n }\n case actions.CLOSE_MESSAGE_BOX: {\n return {\n ...state, messageBox: {...state.messageBox, ...action.payload, isOpen: false}\n };\n }\n case actions.OPEN_DIRECTORY_SELECT_DIALOG: {\n return {\n ...state, directorySelectDialog: {...state.directorySelectDialog, ...action.payload, isOpen: true}\n };\n }\n case actions.CLOSE_DIRECTORY_SELECT_DIALOG: {\n return {\n ...state,\n directorySelectDialog: {...state.directorySelectDialog, ...action.payload, isOpen: false}\n };\n }\n case actions.OPEN_FILE_OPEN_DIALOG: {\n return {\n ...state, fileOpenDialog: {...state.fileOpenDialog, ...action.payload, isOpen: true}\n };\n }\n case actions.CLOSE_FILE_OPEN_DIALOG: {\n return {\n ...state, fileOpenDialog: {...state.fileOpenDialog, ...action.payload, isOpen: false}\n };\n }\n case actions.OPEN_FILE_SAVE_DIALOG: {\n return {\n ...state, fileSaveDialog: {...state.fileSaveDialog, ...action.payload, isOpen: true}\n };\n }\n case actions.CLOSE_FILE_SAVE_DIALOG: {\n return {\n ...state, fileSaveDialog: {...state.fileSaveDialog, ...action.payload, isOpen: false}\n };\n }\n case actions.OPEN_FILE_BROWSE_DIALOG: {\n return {\n ...state, fileBrowseDialog: {...state.fileBrowseDialog, ...action.payload, isOpen: true}\n };\n }\n case actions.CLOSE_FILE_BROWSE_DIALOG: {\n return {\n ...state, fileBrowseDialog: {...state.fileBrowseDialog, ...action.payload, isOpen: false}\n };\n }\n default: {\n const newViews = viewsReducer(state.views, action, state.activeViewId);\n if (newViews !== state.views) {\n return {...state, views: newViews};\n }\n }\n }\n\n return state;\n};\n\n\nfunction addView(state: ControlState, view: ViewState<any>, placeAfterViewId: string | null) {\n const newId = view.id;\n const newViews = addViewToViewArray(state.views, view);\n const oldViewLayout = state.viewLayout;\n let newViewLayout;\n if (placeAfterViewId) {\n newViewLayout = addViewToPanel(oldViewLayout, placeAfterViewId, newId);\n }\n if (!newViewLayout || newViewLayout === oldViewLayout) {\n // Could not be inserted, so use following call which will always succeed.\n newViewLayout = addViewToLayout(oldViewLayout, newId);\n }\n return {...state, viewLayout: newViewLayout, views: newViews, activeViewId: newId};\n}\n\n\nconst viewsReducer = (state: ViewState<any>[], action: Action, activeViewId: string) => {\n // delegate action to all children\n let newViews = null;\n for (let i = 0; i < state.length; i++) {\n const oldView = state[i];\n const newView = viewReducer(oldView, action, activeViewId);\n if (oldView !== newView) {\n if (!newViews) {\n newViews = state.slice(0, i);\n }\n }\n if (newViews && newView) {\n newViews.push(newView);\n }\n }\n return newViews || state;\n};\n\n\nconst viewReducer = (state: ViewState<any>, action: Action, activeViewId: string) => {\n const isActiveView = state.id === activeViewId;\n switch (action.type) {\n case actions.RENAME_RESOURCE: {\n if (state.type === 'world') {\n const layers = layersReducer(state.data.layers, action, isActiveView);\n if (layers !== state.data.layers) {\n return {...state, data: {...state.data, layers}};\n }\n } else if (state.type === 'figure') {\n let title = getFigureViewTitle(action.payload.resName);\n if (state.title === title) {\n title = getFigureViewTitle(action.payload.newResName);\n return {...state, title};\n }\n }\n break;\n }\n case actions.UPDATE_ENTITY_STYLE: {\n const viewId = action.payload.viewId;\n if (state.id === viewId && state.type === 'world') {\n const layers = layersReducer(state.data.layers, action, isActiveView);\n if (layers !== state.data.layers) {\n return {...state, data: {...state.data, layers}};\n }\n }\n break;\n }\n case actions.SET_SHOW_SELECTED_VARIABLE_LAYER: {\n if (state.type === 'world') {\n const layers = layersReducer(state.data.layers, action, isActiveView);\n if (layers !== state.data.layers) {\n return {...state, data: {...state.data, layers}};\n }\n }\n break;\n }\n // TODO (forman): clean up code duplication here, following actions are basically all the same\n // SET_SELECTED_ENTITY_ID,\n // SET_SELECTED_LAYER_ID,\n // SET_VIEW_MODE,\n // SET_PROJECTION_CODE,\n // SET_SPLIT_LAYER_ID,\n // SET_SPLIT_LAYER_POS\n //\n case actions.SET_SELECTED_LAYER_ID: {\n const viewId = action.payload.viewId;\n if (viewId === state.id && state.type === 'world') {\n const selectedLayerId = action.payload.selectedLayerId;\n return {...state, data: {...state.data, selectedLayerId}};\n }\n break;\n }\n case actions.SET_SELECTED_ENTITY_ID: {\n const viewId = action.payload.viewId;\n if (viewId === state.id && state.type === 'world') {\n const selectedEntityId = action.payload.selectedEntityId;\n return {...state, data: {...state.data, selectedEntityId}};\n }\n break;\n }\n case actions.SET_VIEW_MODE: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const viewMode = action.payload.viewMode;\n return {...state, data: {...state.data, viewMode}};\n }\n break;\n }\n case actions.SET_LAYER_SPLIT_POSITION: {\n const {viewId, layerSplitPosition} = action.payload;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n return {...state, data: {...state.data, layerSplitPosition}};\n }\n break;\n }\n case actions.SET_BASE_MAP_ID: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const baseMapId = action.payload.baseMapId;\n return {...state, data: {...state.data, baseMapId}};\n }\n break;\n }\n case actions.SET_PROJECTION_CODE: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const projectionCode = action.payload.projectionCode;\n return {...state, data: {...state.data, projectionCode}};\n }\n break;\n }\n case actions.ADD_LAYER: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const layer = action.payload.layer;\n const selectLayer = action.payload.selectLayer;\n const selectedLayerId = selectLayer ? layer.id : state.data.selectedLayerId;\n const layers = state.data.layers.concat([layer]);\n return {...state, data: {...state.data, layers, selectedLayerId}};\n }\n break;\n }\n case actions.REMOVE_LAYER: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const layerId = action.payload.id;\n const layers = state.data.layers.slice();\n let selectedLayerId = state.data.selectedLayerId;\n if (layerId === selectedLayerId) {\n selectedLayerId = null;\n }\n const layerIndex = layers.findIndex(l => l.id === layerId);\n if (layerIndex >= 0) {\n layers.splice(layerIndex, 1);\n return {...state, data: {...state.data, layers, selectedLayerId}};\n }\n }\n break;\n }\n case actions.MOVE_LAYER_UP: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const layerId = action.payload.id;\n const layers = state.data.layers.slice();\n const layerIndex = layers.findIndex(l => l.id === layerId);\n assert.ok(layerIndex >= 0, 'layerIndex >= 0');\n if (layerIndex > 0) {\n const temp = layers[layerIndex - 1];\n layers[layerIndex - 1] = layers[layerIndex];\n layers[layerIndex] = temp;\n return {...state, data: {...state.data, layers}};\n }\n }\n break;\n }\n case actions.MOVE_LAYER_DOWN: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const layerId = action.payload.id;\n const layers = state.data.layers.slice();\n const layerIndex = layers.findIndex(l => l.id === layerId);\n assert.ok(layerIndex >= 0, 'layerIndex >= 0');\n if (layerIndex >= 0 && layerIndex < layers.length - 1) {\n const temp = layers[layerIndex + 1];\n layers[layerIndex + 1] = layers[layerIndex];\n layers[layerIndex] = temp;\n return {...state, data: {...state.data, layers}};\n }\n }\n break;\n }\n case actions.UPDATE_LAYER: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const layer = action.payload.layer;\n const layers = state.data.layers.slice();\n const layerIndex = layers.findIndex(l => l.id === layer.id);\n assert.ok(layerIndex >= 0, 'layerIndex >= 0');\n // layers[layerIndex] = {...layers[layerIndex], ...layer};\n layers[layerIndex] = updateObject(layers[layerIndex], layer);\n return {...state, data: {...state.data, layers}};\n }\n break;\n }\n case actions.UPDATE_LAYER_STYLE: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'world');\n const {layerId, style} = action.payload;\n const layers = state.data.layers.slice();\n const layerIndex = layers.findIndex(l => l.id === layerId);\n assert.ok(layerIndex >= 0, 'layerIndex >= 0');\n let layer = layers[layerIndex];\n layers[layerIndex] = {...layer, style: {...layer.style, ...style}};\n return {...state, data: {...state.data, layers}};\n }\n break;\n }\n case actions.UPDATE_TABLE_VIEW_DATA: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'table');\n const data = {...state.data, ...action.payload};\n return {...state, data};\n }\n break;\n }\n case actions.UPDATE_ANIMATION_VIEW_DATA: {\n const viewId = action.payload.viewId;\n if (viewId === state.id) {\n assert.ok(state.type === 'animation');\n const data = {...state.data, ...action.payload};\n return {...state, data};\n }\n break;\n }\n default: {\n if (state.type === 'world') {\n const layers = layersReducer(state.data.layers, action, isActiveView);\n if (layers !== state.data.layers) {\n return {...state, data: {...state.data, layers}};\n }\n }\n }\n }\n return state;\n};\n\nconst layersReducer = (state: LayerState[], action: Action, isActiveView: boolean) => {\n // delegate action to all children\n let newLayers;\n for (let i = 0; i < state.length; i++) {\n const oldLayer = state[i];\n const newLayer = layerReducer(oldLayer, action, isActiveView);\n if (oldLayer !== newLayer) {\n if (!newLayers) {\n newLayers = state.slice(0, i);\n }\n }\n if (newLayers && newLayer) {\n newLayers.push(newLayer);\n }\n }\n return newLayers || state;\n};\n\nconst layerReducer = (state: LayerState, action: Action, isActiveView: boolean) => {\n switch (action.type) {\n case actions.RENAME_RESOURCE: {\n const resName = action.payload.resName;\n const newResName = action.payload.newResName;\n if ((state as any).resName === resName) {\n return {...state, resName: newResName};\n }\n break;\n }\n case actions.UPDATE_ENTITY_STYLE: {\n const {layerId, entityId, style} = action.payload;\n if (state.id === layerId && isVectorLayer(state)) {\n const vectorLayer = state as VectorLayerBase;\n const entityStyles = vectorLayer.entityStyles;\n const oldStyle = entityStyles && entityStyles[entityId];\n const newStyle = {...oldStyle, ...style};\n if (!deepEqual(oldStyle, newStyle)) {\n return {...state, entityStyles: {...entityStyles, [entityId]: newStyle}};\n }\n }\n break;\n }\n case actions.SET_SHOW_SELECTED_VARIABLE_LAYER: {\n if (state.id === AUTO_LAYER_ID) {\n const showSelectedVariableLayer = action.payload.showSelectedVariableLayer;\n return {...state, visible: showSelectedVariableLayer};\n }\n break;\n }\n case actions.SET_SELECTED_VARIABLE: {\n if (state.id === AUTO_LAYER_ID && isActiveView) {\n const resource = action.payload.resource;\n const selectedVariable = action.payload.selectedVariable;\n const savedLayers = action.payload.savedLayers;\n return updateAutoLayer(state, resource, selectedVariable, savedLayers);\n }\n break;\n }\n case actions.SET_LAYER_SPLIT_MODE: {\n const {layerId, splitMode} = action.payload;\n if (state.id === layerId && isImageLayer(state)) {\n return {...state, splitMode};\n }\n break;\n }\n }\n return state;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// state.session reducers\n\nlet updatePlacemarkProperties = function (state: SessionState, placemarkId: any, properties: any) {\n const features = state.placemarkCollection.features.slice();\n const featureIndex = features.findIndex(f => f.id === placemarkId);\n const oldFeature = featureIndex >= 0 && features[featureIndex];\n assert.ok(oldFeature);\n const oldProperties = oldFeature && oldFeature.properties;\n const newProperties = {...oldProperties, ...properties};\n const newFeature = {...oldFeature, properties: newProperties};\n if (featureIndex >= 0) {\n features[featureIndex] = newFeature;\n } else {\n features.push(newFeature);\n }\n const placemarkCollection = {...state.placemarkCollection, features};\n return {...state, placemarkCollection};\n};\n\nlet updatePlacemarkGeometry = function (state: SessionState, placemarkId: any, geometry: any) {\n const features = state.placemarkCollection.features.slice();\n const featureIndex = features.findIndex(f => f.id === placemarkId);\n const oldFeature = featureIndex >= 0 && features[featureIndex];\n assert.ok(oldFeature);\n const oldGeometry = oldFeature && oldFeature.geometry;\n const newGeometry = {...oldGeometry, ...geometry};\n const newFeature = {...oldFeature, geometry: newGeometry};\n if (featureIndex >= 0) {\n features[featureIndex] = newFeature;\n } else {\n features.push(newFeature);\n }\n const placemarkCollection = {...state.placemarkCollection, features};\n return {...state, placemarkCollection};\n};\n\nconst sessionReducer = (state: SessionState = INITIAL_SESSION_STATE, action: Action): SessionState => {\n switch (action.type) {\n case actions.SET_SELECTED_ENTITY_ID: {\n const selectedEntityId = action.payload.selectedEntityId || null;\n let selectedPlacemarkId = null;\n if (isString(selectedEntityId) && selectedEntityId.startsWith(PLACEMARK_ID_PREFIX)) {\n selectedPlacemarkId = selectedEntityId;\n }\n if (selectedPlacemarkId !== state.selectedPlacemarkId) {\n return {...state, selectedPlacemarkId};\n }\n break;\n }\n case actions.UPDATE_INITIAL_STATE:\n return {...state, ...action.payload.session};\n case actions.UPDATE_SESSION_STATE:\n return {...state, ...action.payload};\n case actions.SET_SHOW_SELECTED_VARIABLE_LAYER:\n return {...state, ...action.payload};\n case actions.SET_BASE_MAP_ID:\n return {...state, lastBaseMapId: action.payload.baseMapId};\n case actions.SAVE_LAYER: {\n const {key, layer} = action.payload;\n // const savedLayers = {...state.savedLayers, [key]: layer};\n const savedLayers = updateObject(state.savedLayers, {[key]: layer});\n return {...state, savedLayers};\n }\n case actions.ADD_PLACEMARK: {\n let placemark = action.payload.placemark;\n let features = state.placemarkCollection.features;\n let properties = {...placemark.properties};\n // Set initial title\n const {title, index} = getPlacemarkTitleAndIndex(placemark, state.placemarkCollection);\n if (title) {\n properties = {...properties, title};\n if (placemark.geometry.type === 'Point') {\n properties['marker-symbol'] = index.toString(16).slice(-1);\n }\n placemark = {...placemark, properties}\n }\n features = features.concat([placemark]);\n const placemarkCollection = {...state.placemarkCollection, features};\n return {...state, placemarkCollection, selectedPlacemarkId: placemark.id};\n }\n case actions.REMOVE_PLACEMARK: {\n const placemarkId = action.payload.placemarkId;\n let features = state.placemarkCollection.features;\n const removedFeatureIndex = features.findIndex(f => f.id === placemarkId);\n if (removedFeatureIndex >= 0) {\n features = features.slice();\n features.splice(removedFeatureIndex, 1);\n let selectedPlacemarkId = null;\n if (removedFeatureIndex < features.length) {\n selectedPlacemarkId = features[removedFeatureIndex].id;\n } else if (features.length > 0) {\n selectedPlacemarkId = features[features.length - 1].id;\n }\n const placemarkCollection = {...state.placemarkCollection, features};\n return {...state, placemarkCollection, selectedPlacemarkId};\n }\n break;\n }\n case actions.UPDATE_PLACEMARK_GEOMETRY: {\n const {placemarkId, geometry} = action.payload;\n return updatePlacemarkGeometry(state, placemarkId, geometry);\n }\n case actions.UPDATE_PLACEMARK_PROPERTIES: {\n const {placemarkId, properties} = action.payload;\n return updatePlacemarkProperties(state, placemarkId, properties);\n }\n case actions.UPDATE_PLACEMARK_STYLE: {\n const {placemarkId, style} = action.payload;\n const properties = featurePropertiesFromSimpleStyle(style);\n const defaultPlacemarkStyle = {...state.defaultPlacemarkStyle, ...style};\n return {...updatePlacemarkProperties(state, placemarkId, properties), defaultPlacemarkStyle};\n }\n case OBTAIN_COOKIE_CONSENT: {\n const {trackingConsentObtained} = action.payload;\n storeCookieConsent(trackingConsentObtained)\n return {...state, cookieConsentObtained: true, trackingConsentObtained};\n }\n }\n return state;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// state.communication reducers\n\nconst communicationReducer = (state: CommunicationState = INITIAL_COMMUNICATION_STATE, action: Action) => {\n switch (action.type) {\n case actions.SET_WEBAPI_SERVICE_URL: {\n const webAPIServiceURL = action.payload.webAPIServiceURL;\n return {...state, webAPIServiceURL};\n }\n case actions.SET_WEBAPI_STATUS: {\n const webAPIStatus = action.payload.webAPIStatus;\n return {...state, webAPIStatus};\n }\n case actions.SET_WEBAPI_CLIENT: {\n const webAPIClient = action.payload.webAPIClient;\n return {...state, webAPIClient, webAPIStatus: 'open'};\n }\n case actions.SET_WEBAPI_SERVICE_INFO: {\n const webAPIServiceInfo = action.payload.webAPIServiceInfo;\n return {\n ...state,\n webAPIServiceInfo: {\n ...state.webAPIServiceInfo,\n ...webAPIServiceInfo\n }\n };\n }\n case actions.SET_WEBAPI_AUTO_STOP_INFO: {\n const autoStopInfo = action.payload.webAPIAutoStopInfo;\n return {\n ...state,\n webAPIServiceInfo: {\n ...state.webAPIServiceInfo,\n autoStopInfo\n }\n };\n }\n case actions.UPDATE_HUB_STATUS: {\n return {\n ...state,\n hubStatus: action.payload\n }\n }\n case actions.UPDATE_TASK_STATE:\n return {\n ...state,\n tasks: updatePropertyObject(state.tasks, action.payload.jobId, action.payload.taskState)\n };\n case actions.REMOVE_TASK_STATE: {\n const tasks = {...state.tasks};\n delete tasks[action.payload.jobId];\n return {...state, tasks};\n }\n }\n return state;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// state.location reducers\n\n//noinspection JSUnusedLocalSymbols\nconst locationReducer = (state: LocationState = INITIAL_LOCATION_STATE, action: Action) => {\n if (action.type === actions.SET_GLOBE_MOUSE_POSITION) {\n const globeMousePosition = action.payload.position;\n if (state.globeMousePosition !== globeMousePosition) {\n return {...state, globeMousePosition};\n }\n } else if (action.type === actions.SET_GLOBE_VIEW_POSITION) {\n const globeViewPosition = action.payload.position;\n const positionData = action.payload.positionData;\n if (state.globeViewPosition !== globeViewPosition || state.positionData !== positionData) {\n return {...state, globeViewPosition, positionData};\n }\n }\n return state;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Combined State reducer\n\nexport const stateReducer = combineReducers<State>({\n data: dataReducer as Reducer<DataState>,\n control: controlReducer as Reducer<ControlState>,\n session: sessionReducer as Reducer<SessionState>,\n communication: communicationReducer as Reducer<CommunicationState>,\n location: locationReducer as Reducer<LocationState>,\n });\n\n\n\n\n\n","import * as React from 'react';\nimport { Button, Checkbox, Classes, Collapse, Drawer, Intent, Position } from '@blueprintjs/core';\nimport { connect, Dispatch } from 'react-redux';\nimport { State } from '../state';\nimport { obtainCookieConsent } from '../actions';\n\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IGdprBannerProps {\n cookieConsentObtained: boolean;\n trackingConsentObtained: boolean;\n}\n\n// noinspection JSUnusedLocalSymbols\nfunction mapStateToProps(state: State): IGdprBannerProps {\n return {\n cookieConsentObtained: state.session.cookieConsentObtained,\n trackingConsentObtained: state.session.trackingConsentObtained,\n };\n}\n\nconst GdprBanner: React.FC<IGdprBannerProps & IDispatch> = (\n {\n cookieConsentObtained,\n trackingConsentObtained,\n dispatch,\n }\n) => {\n const [customizeMode, setCustomizeMode] = React.useState(false);\n const [trackingAllowed, setTrackingAllowed] = React.useState(trackingConsentObtained);\n\n if (cookieConsentObtained) {\n return null;\n }\n\n const handleConsent = () => {\n dispatch(obtainCookieConsent(customizeMode ? trackingAllowed : true));\n };\n\n const handleTrackingAllowed = (e: React.FormEvent<HTMLInputElement>) => {\n setTrackingAllowed(e.currentTarget.checked);\n };\n\n return (\n <Drawer\n title=\"Data Protection Notice\"\n icon=\"info-sign\"\n position={Position.BOTTOM}\n isOpen={true}\n isCloseButtonShown={false}\n canOutsideClickClose={false}\n canEscapeKeyClose={false}\n size={240}\n >\n <div className={Classes.DRAWER_BODY}>\n <div className={Classes.DIALOG_BODY}>\n We use cookies so you can optimally use this website.\n Some cookies that are necessary for the operation of Cate App.\n In addition, we use cookies for statistical purposes.\n You can adjust the data protection settings or agree to all cookies\n directly. <a href='https://climate.esa.int/en/privacy/'>Privacy Statement</a>\n </div>\n\n <div className={Classes.DIALOG_FOOTER}>\n <div className={Classes.DIALOG_FOOTER_ACTIONS}>\n <Button\n intent={Intent.PRIMARY}\n onClick={handleConsent}\n >\n {customizeMode ? \"I agree to selected Cookies\" : \"I agree to all Cookies\"}\n </Button>\n <Button\n rightIcon={customizeMode ? 'caret-up' : 'caret-down'}\n onClick={() => setCustomizeMode(!customizeMode)}\n >\n Settings\n </Button>\n </div>\n </div>\n\n <Collapse isOpen={customizeMode}>\n <div className={Classes.DIALOG_BODY}>\n <Checkbox\n checked={true}\n >\n <strong>Functional</strong>: Cate does not work without functional cookies.\n We'll just save your consent with this notice and possibly auto-login information\n if you use the Cate cloud services.\n </Checkbox>\n <Checkbox\n checked={trackingAllowed}\n onChange={handleTrackingAllowed}\n >\n <strong>Tracking</strong>: Cate uses the open source software\n tool <a href=\"https://matomo.org/\">Matomo</a>, which uses cookies.\n With these cookies we count Cate App visits - of course anonymously.\n Matomo fully complies to the EU General Data Protection Regulation (GDPR).\n </Checkbox>\n </div>\n </Collapse>\n </div>\n </Drawer>\n );\n}\n\nexport default connect(mapStateToProps)(GdprBanner);\n","import * as React from 'react';\nimport { connect, Dispatch } from 'react-redux';\nimport { Menu, MenuDivider, MenuItem } from '@blueprintjs/core';\nimport {\n closeWorkspaceInteractive,\n deleteWorkspaceInteractive,\n newWorkspaceInteractive,\n openWorkspaceInteractive,\n saveWorkspaceAsInteractive,\n saveWorkspaceInteractive\n} from '../actions';\nimport { State } from '../state';\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IWorkspacesMenuProps {\n}\n\n// noinspection JSUnusedLocalSymbols\nfunction mapStateToProps(state: State): IWorkspacesMenuProps {\n return {};\n}\n\nconst _WorkspacesMenu: React.FC<IWorkspacesMenuProps & IDispatch> = (props) => {\n\n const handleNew = () => {\n props.dispatch(newWorkspaceInteractive());\n };\n\n const handleOpen = () => {\n props.dispatch(openWorkspaceInteractive() as any);\n };\n\n const handleClose = () => {\n props.dispatch(closeWorkspaceInteractive() as any);\n };\n\n const handleSave = () => {\n props.dispatch(saveWorkspaceInteractive() as any);\n };\n\n const handleSaveAs = () => {\n props.dispatch(saveWorkspaceAsInteractive());\n };\n\n const handleDelete = () => {\n props.dispatch(deleteWorkspaceInteractive() as any);\n };\n\n return (\n <Menu>\n <MenuItem\n text=\"New Workspace\"\n icon=\"folder-new\"\n onClick={handleNew}\n />\n <MenuItem\n text=\"Open Workspace\"\n icon=\"folder-shared-open\"\n onClick={handleOpen}\n />\n <MenuItem\n text=\"Close Workspace\"\n icon=\"folder-close\"\n onClick={handleClose}\n />\n <MenuDivider/>\n <MenuItem\n text=\"Save Workspace\"\n icon=\"add-to-folder\"\n onClick={handleSave}\n />\n <MenuItem\n text=\"Save Workspace As...\"\n onClick={handleSaveAs}\n />\n <MenuDivider/>\n <MenuItem\n text=\"Delete Workspace\"\n icon=\"trash\"\n onClick={handleDelete}\n />\n </Menu>\n );\n};\n\nconst WorkspacesMenu = connect(mapStateToProps)(_WorkspacesMenu);\nexport default WorkspacesMenu;","import { Menu, MenuItem } from '@blueprintjs/core';\nimport * as React from 'react';\nimport { connect, Dispatch } from \"react-redux\";\n\nimport { State } from '../state';\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IHelpMenuProps {\n}\n\n// noinspection JSUnusedLocalSymbols\nfunction mapStateToProps(state: State): IHelpMenuProps {\n return {};\n}\n\nconst _HelpMenu: React.FC<IHelpMenuProps & IDispatch> = () => {\n\n const openUrl = (url: string) => {\n window.open(url, '_blank');\n };\n\n return (\n <div>\n <Menu>\n <MenuItem\n text=\"Cate Documentation\"\n onClick={() => openUrl(\"http://cate.readthedocs.io\")}\n />\n <MenuItem\n text=\"Cate Website\"\n onClick={() => openUrl(\"https://climate.esa.int/en/explore/analyse-climate-data\")}\n />\n <MenuItem\n text=\"Cate on GitHub\"\n onClick={() => openUrl(\"https://github.com/CCI-Tools/cate\")}\n />\n <MenuItem\n text=\"ESA Climate Office Helpdesk\"\n onClick={() => openUrl(\"https://climate.esa.int/en/helpdesk\")}\n />\n </Menu>\n </div>\n )\n}\n\nconst HelpMenu = connect(mapStateToProps)(_HelpMenu)\nexport default HelpMenu\n","import * as React from 'react';\nimport { connect, Dispatch } from 'react-redux';\nimport {\n Button,\n Navbar,\n NavbarDivider,\n NavbarGroup,\n Popover,\n PopoverPosition,\n} from '@blueprintjs/core';\n\nimport * as actions from '../actions';\nimport { State } from '../state';\nimport cateIcon from '../resources/cate-icon-128.png';\nimport WorkspacesMenu from './WorkspacesMenu';\n// import FilesMenu from './FilesMenu';\nimport HelpMenu from './HelpMenu';\n\n\nconst TITLE_STYLE = {marginLeft: 10};\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IAppBarProps {\n}\n\n// noinspection JSUnusedLocalSymbols\nfunction mapStateToProps(state: State): IAppBarProps {\n return {\n };\n}\n\n\nconst _AppBar: React.FC<IAppBarProps & IDispatch> = (\n {\n dispatch,\n }\n) => {\n\n const handleOpenInBrowser = () => {\n window.open(window.location.href, \"_blank\");\n };\n\n const handleShutdownServer = () => {\n dispatch(actions.showShutdownDialog());\n };\n\n const handlePreferencesClick = () => {\n dispatch(actions.showPreferencesDialog());\n };\n\n return (\n <Navbar>\n <NavbarGroup>\n <img src={cateIcon} width={32} height={32} alt={'Cate icon'}/>\n <h2 style={TITLE_STYLE}>Cate - ESA CCI Toolbox</h2>\n </NavbarGroup>\n <NavbarGroup align=\"right\">\n <Popover content={<WorkspacesMenu/>} position={PopoverPosition.BOTTOM}>\n <Button className=\"bp3-minimal\" rightIcon={'caret-down'}>Workspaces</Button>\n </Popover>\n {/*<Popover content={<FilesMenu/>} position={PopoverPosition.BOTTOM}>*/}\n {/* <Button className=\"bp3-minimal\" rightIcon={'caret-down'}>Files</Button>*/}\n {/*</Popover>*/}\n <Popover content={<HelpMenu/>} position={PopoverPosition.BOTTOM}>\n <Button className=\"bp3-minimal\" rightIcon={'caret-down'}>Help</Button>\n </Popover>\n <NavbarDivider/>\n {isRunningInIFrame() &&\n <Button\n className=\"bp3-minimal\"\n icon='share'\n onClick={handleOpenInBrowser}\n />\n }\n <Button\n className=\"bp3-minimal\"\n icon='offline'\n onClick={handleShutdownServer}\n />\n <Button\n className=\"bp3-minimal\"\n icon='cog'\n onClick={handlePreferencesClick}\n />\n </NavbarGroup>\n </Navbar>\n );\n}\n\nconst AppBar = connect(mapStateToProps)(_AppBar);\nexport default AppBar;\n\n\n// https://stackoverflow.com/questions/326069/how-to-identify-if-a-webpage-is-being-loaded-inside-an-iframe-or-directly-into-t\nfunction isRunningInIFrame(): boolean {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n}\n","import * as React from 'react';\nimport { Icon, Intent, NonIdealState, Spinner } from '@blueprintjs/core';\nimport { IconName } from '@blueprintjs/icons';\n\nexport const ICON_CIRCLE: IconName = 'circle';\nexport const ICON_DISABLE: IconName = 'disable';\n\nexport const CONFIG_ERROR_MESSAGE = (\n <span>This is very likely a configuration error.</span>\n);\n\nexport const NO_WORKSPACE = (\n <NonIdealState\n title=\"No workspace\"\n description={<span>Try <strong>File / New</strong> or <strong>File / Open</strong> from the main menu.</span>}\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_WORKSPACE_RESOURCES = (\n <NonIdealState\n title=\"No workspace resources\"\n icon=\"database\"\n description={<span>Open a dataset in DATA SOURCES panel or add a <code>read_</code> operation step from the OPERATIONS panel.</span>}\n />\n);\n\nexport const NO_WORKFLOW_STEPS = (\n <NonIdealState\n title=\"No workflow steps\"\n icon=\"flows\"\n description={<span>Open a dataset in DATA SOURCES panel or add a <code>read_</code> operation step from the OPERATIONS panel.</span>}\n />\n);\n\nexport const NO_DATA_STORES_FOUND = (\n <NonIdealState\n title=\"No data stores found\"\n icon=\"offline\"\n description={CONFIG_ERROR_MESSAGE}/>\n);\n\nexport const NO_LOCAL_DATA_SOURCES = (\n <NonIdealState\n title=\"No data sources\"\n icon={ICON_CIRCLE}\n description={<span>You can add a new data source using the \"+\" button below.</span>}/>\n);\n\nexport const DATA_SOURCES_LOADING = (\n <NonIdealState\n title=\"Loading data sources...\"\n icon={<div style={{marginTop: 14}}><Spinner intent={Intent.PRIMARY}/></div>}\n description={\n <div className=\"bp3-text-small bp3-text-muted\">\n Note: If loading seems to take forever,\n try switching to another data store in between,\n then come back to the desired one.\n </div>\n }/>\n);\n\nexport const NO_DATA_SOURCES_FOUND = (\n <NonIdealState\n title=\"No data sources found\"\n icon={ICON_CIRCLE}\n description={CONFIG_ERROR_MESSAGE}/>\n);\n\nexport const NO_OPERATIONS_FOUND = (\n <NonIdealState\n title=\"No operations found\"\n description={CONFIG_ERROR_MESSAGE}\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_VARIABLES = (\n <NonIdealState\n title=\"No variables\"\n icon={ICON_CIRCLE}\n description={`Select a resource in the WORKSPACE panel first.`}/>\n);\n\nexport const NO_VARIABLES_EMPTY_RESOURCE = (resourceName) => (\n <NonIdealState\n title=\"No variables\"\n icon={ICON_CIRCLE}\n description={`Selected resource \"${resourceName}\" doesn't contain any variables.`}/>\n);\n\nexport const NO_ACTIVE_VIEW = (\n <NonIdealState\n title=\"No active view\"\n description=\"Add a new view first.\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_WEB_GL = (\n <NonIdealState\n title=\"Can't open world view\"\n description=\"Cate's world view component requires WebGL, which doesn't seem to be supported by your environment. This is likely on virtualized HW with low graphics capabilities. Sorry!\"\n icon={ICON_DISABLE}/>\n);\n\nexport const NO_PLACES = (\n <NonIdealState\n title=\"No places\"\n description={<span>Press the tool buttons below to add a new place.</span>}\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_PLACE_SELECTED = (\n <NonIdealState\n title=\"No place selected\"\n description=\"Select a place to show and edit its details.\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_LAYERS_NO_VIEW = (\n <NonIdealState\n title=\"No layers\"\n description=\"To show layers, activate a world view\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_LAYERS_EMPTY_VIEW = (\n <NonIdealState\n title=\"No layers\"\n description={<span>Press the <Icon icon=\"add\"/> button to add a layer.</span>}\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_LAYER_SELECTED = (\n <NonIdealState\n title=\"No layer selected\"\n description=\"Select a layer to browse and edit its details.\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_LAYER_FOR_STYLE = (\n <NonIdealState\n title=\"Styles unavailable\"\n description=\"Select a layer in the LAYERS panel to modify its style.\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_ENTITY_FOR_STYLE = (\n <NonIdealState\n title=\"Styles unavailable\"\n description=\"Select an entity in the World View to modify its style.\"\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_CHARTS = (\n <NonIdealState\n title=\"No charts\"\n description={<span>Press the <Icon icon=\"add\"/> button to add a new chart.</span>}\n icon={ICON_CIRCLE}/>\n);\n\nexport const NO_TABLE_DATA = (\n <NonIdealState\n title=\"No table data\"\n description={<span>The resource seems to be empty or an error occurred.</span>}\n icon={ICON_CIRCLE}/>\n);\n\nexport const LOADING_TABLE_DATA_FAILED = (error: any) => (\n <NonIdealState\n title=\"Loading table data failed\"\n description={<span>{`${error}`}</span>}\n icon={ICON_CIRCLE}/>\n);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport * as assert from '../../common/assert';\nimport { shallowEqual } from '../../common/shallow-equal';\n\nexport interface IExternalObjectComponentProps<E, ES> {\n id: string;\n externalObjectStore?: ExternalObjectStore<E, ES>;\n style?: CSSProperties;\n className?: string;\n debug?: boolean;\n}\n\nexport interface ExternalObjectRef<E, ES> {\n /**\n * The reference to the external object.\n */\n object: E;\n\n /**\n * The current state of the external object.\n */\n state?: ES;\n\n /**\n * The HTML element that contains the external object.\n */\n container: HTMLElement;\n}\n\nexport type ExternalObjectStore<E, S> = { [id: string]: ExternalObjectRef<E, S> };\n\n/**\n * A React component that lets the *container* DOM element of a \"external object\" hook into the\n * real DOM created by React once this component is mounted. When we say external object, we refer to the fact that\n * such objects are kept in an in-memory store to let them survive unmounting from the real DOM through React.\n * The *container* DOM element of a external object is the root of a DOM tree that shall not be controlled by React\n * directly.\n *\n * Furthermore:\n *\n * - The child elements of the *container* (often a \"canvas\" element) are usually controlled by a dedicated\n * JavaScript API provided by a 3rd party library.\n * - The *container* is associated with a complex JavaScript state which is manipulated by that JavaScript API.\n * - Both the displayed content in the DOM child elements and associated JavaScript state are expensive to regenerate\n * from the virtual DOM when implemented as a pure React component.\n *\n * Examples for native components are the *Cesium.Viewer* of the CesiumJS library or the *ol.Map* object of the\n * OpenLayers 3 library.\n *\n * Note that this is different from React's notion of an \"uncontrolled component\", where form data is handled\n * by the DOM itself. While this is also true for a PermanentComponent, we still consider the React component's\n * props to be the single source of truth. Therefore changes in this component's props must be reflected in\n * the \"external object\" so that it stays in snc with the current props.\n *\n * When the parent container of a PermanentComponent is mounted, the following steps are performed\n * 1. lookup the external object from the store using this component's *id* property;\n * 2. if such external object cannot be found, we will create the external object by calling\n * *createPermanentObject()* and put the external object into this component's *store* using this component's *id*\n * property so it will survive unmounting;\n * 3. append the *container* element of the external object to the \"div\" element controlled by this PermanentComponent;\n * 4. call *externalObjectMounted()*;\n * 5. get the previous props using the *id*;\n * 6. call *updatePermanentObject()* with the previous and current props so a delta can be computed and applied to\n * the external component.\n *\n * When a PermanentComponent is unmounted, the following steps are performed:\n * 1. lookup the external object from the store using this component's *id* property;\n * 2. remove the external object's *container* element from the \"div\" element controlled by this PermanentComponent;\n * 3. it will call \"externalObjectUnmounted\".\n *\n * Note that the external object is removed from the store only if the \"dispose()\" method is called.\n *\n * @author Norman Fomferra\n * @version 0.5\n */\nexport abstract class ExternalObjectComponent<E, ES, P extends IExternalObjectComponentProps<E, ES>, S>\n extends React.PureComponent<P, S> {\n private static readonly DEFAULT_EXTERNAL_OBJECT_STORE: Object = {};\n\n private parentContainer: HTMLElement | null;\n\n constructor(props: P) {\n super(props);\n ExternalObjectComponent.checkProps(props);\n this.parentContainer = null;\n this.onRef = this.onRef.bind(this);\n }\n\n private static checkProps(props: any) {\n if (!props.id) {\n throw new Error('cannot construct ExternalObjectComponent without id');\n }\n }\n\n /**\n * Gets the external object reference.\n *\n * Think twice, before using this method.\n * The single source of truth should be your app's state.\n *\n * @returns the external object reference or null.\n */\n getExternalObjectRef(): ExternalObjectRef<E, ES> | null {\n return this.externalObjectStore[this.props.id] || null;\n }\n\n // TODO (forman): we can probably simplify ExternalObjectComponent by getting rid of the intermediate container\n // created by newContainer(id), if we add the following methods to be overidden by clients,\n // in case this is needed. The default impls would do nothing:\n // attachExternalObject(parentContainer, object)\n // detachExternalObject(parentContainer, object)\n\n /**\n * Create a new container for the external object.\n *\n * @param id The id.\n */\n abstract newContainer(id: string): HTMLElement;\n\n /**\n * Create a new external object.\n *\n * @param parentContainer The parent container HTML element which either holds *container* or the *object*.\n * @param container The HTML element created by *newContainer()*, if any.\n */\n abstract newExternalObject(parentContainer: HTMLElement, container: HTMLElement): E;\n\n /**\n * Called when the props of this component change and the delta between the external component's\n * state (given by *prevState*) and this components props (given by *nextState*) must be reflected in\n * the external object state.\n *\n * Clients must implement this method by computing the delta between *prevState* and *nextState* and update their\n * external object accordingly.\n *\n * @param object The external object.\n * @param prevState The previous state, may be null or undefined.\n * @param nextState The next state, never null, always defined.\n * @param parentContainer The parent container HTML element which either holds *container* or the *object*.\n * @param container The HTML element created by *newContainer()*, if any.\n */\n abstract updateExternalObject(object: E, prevState: ES, nextState: ES,\n parentContainer: HTMLElement, container: HTMLElement): void;\n\n //noinspection JSMethodCanBeStatic\n /**\n * Extract the state of the external object encoded in the given props.\n * The default implementation simply returns a shallow copy of the previous state\n * overwritten by the given props.\n *\n * @param props The props which take precedence over the previous state.\n * @param prevState The previous state.\n * @returns {{}} State of the external object extracted from props.\n */\n propsToExternalObjectState(props: Readonly<P>, prevState?: Readonly<ES>): ES {\n return {...prevState as any, ...props as any};\n }\n\n /**\n * Called if the *externalObject* has been mounted and is now a child of the *parentContainer*.\n *\n * @param object The external object.\n * @param props The props for the external object to be mounted.\n * @param parentContainer The parent container HTML element which either holds *container* or the *object*.\n * @param container The HTML element created by *newContainer()*, if any.\n */\n externalObjectMounted(object: E, props: Readonly<P>, parentContainer: HTMLElement, container: HTMLElement): void {\n }\n\n /**\n * Called if the *externalObject* has been unmounted and is no longer a child of *parentContainer*.\n *\n * @param object The external object.\n * @param props The props for the external object to be unmounted.\n * @param parentContainer The parent container HTML element which either holds *container* or the *object*.\n * @param container The HTML element created by *newContainer()*, if any.\n */\n externalObjectUnmounted(object: E, props: Readonly<P>, parentContainer: HTMLElement, container: HTMLElement): void {\n }\n\n\n // TODO (forman): optimize me: don't override componentWillUpdate(), instead override...\n // - componentWillReceiveProps() to do what componentWillUpdate() currently does AND set whether render() does need to be called\n // - shouldComponentUpdate() to return whether render() need to be called\n /**\n * Invoked by React immediately before rendering when new props or state are being received.\n * This method is not called for the initial render.\n *\n * We use this as an opportunity to synchronize the external object's state with the next props being received.\n *\n * @param nextProps the next props\n */\n componentWillUpdate(nextProps: Readonly<P & ES>) {\n if (this.props.debug) {\n console.log('ExternalObjectComponent.componentWillUpdate nextProps.id =', nextProps.id);\n }\n ExternalObjectComponent.checkProps(nextProps);\n if (this.props.id === nextProps.id) {\n this.updateExternalComponentAndSaveProps(nextProps);\n } else if (this.parentContainer) {\n this.remountExternalObject(this.parentContainer, nextProps);\n }\n }\n\n private onRef(parentContainer: HTMLElement | null) {\n if (this.props.debug) {\n console.log('ExternalObjectComponent.onRef: this.props =', this.props);\n }\n this.remountExternalObject(parentContainer, this.props as Readonly<P & ES>);\n }\n\n /**\n * Renders a \"div\" element which serves as the parent container for this component's external object.\n * The \"div\" element will have the \"id\" attribute set to this.props.id.\n *\n * @returns {JSX.Element}\n */\n render(): JSX.Element {\n return (\n <div id={this.props.id}\n className={this.props.className}\n style={this.props.style}\n ref={this.onRef}\n >\n {this.renderChildren()}\n </div>\n );\n }\n\n //noinspection JSMethodCanBeStatic\n protected renderChildren() {\n return null;\n }\n\n /**\n * Removes the current external object from cache and creates a new one with the current props.\n * Clients may call this method to force a regeneration of their external component.\n */\n forceRegeneration() {\n let externalObjectStore = this.externalObjectStore;\n let externalObjectRef = externalObjectStore[this.props.id];\n if (externalObjectRef) {\n delete externalObjectStore[this.props.id];\n if (this.parentContainer && externalObjectRef.container) {\n this.parentContainer.removeChild(externalObjectRef.container);\n }\n this.remountExternalObject(this.parentContainer, this.props as Readonly<P & ES>);\n }\n }\n\n protected remountExternalObject(parentContainer: HTMLElement | null, props: Readonly<P & ES>) {\n if (props.debug) {\n console.log('ExternalObjectComponent.remountExternalObject: props.id =', props.id);\n }\n if (parentContainer) {\n if (parentContainer.id !== props.id) {\n this.unmountExternalObject(parentContainer, this.props as Readonly<P & ES>);\n }\n if (props.id in this.externalObjectStore) {\n this.mountExistingExternalObject(parentContainer, props);\n } else {\n this.mountNewExternalObject(parentContainer, props);\n }\n } else if (this.parentContainer) {\n this.unmountExternalObject(this.parentContainer, props);\n }\n }\n\n private mountNewExternalObject(parentContainer: HTMLElement, props: Readonly<P & ES>) {\n if (props.debug) {\n console.log('ExternalObjectComponent.mountNewExternalObject: props.id =', props.id);\n }\n const container = this.newContainer(props.id);\n if (container) {\n if (props.debug) {\n console.log('ExternalObjectComponent: attaching new external object with id =', props.id);\n }\n parentContainer.appendChild(container);\n }\n const object = this.newExternalObject(parentContainer, container);\n this.externalObjectStore[props.id] = {object, container};\n this.parentContainer = parentContainer;\n this.externalObjectMounted(object, props, parentContainer, container);\n this.updateExternalComponentAndSaveProps(props);\n }\n\n private mountExistingExternalObject(parentContainer: HTMLElement, props: Readonly<P & ES>) {\n if (props.debug) {\n console.log('ExternalObjectComponent.mountExistingExternalObject: props.id =', props.id);\n }\n const externalObjectRef = this.externalObjectStore[props.id];\n assert.ok(externalObjectRef);\n const container = externalObjectRef.container;\n if (container && !parentContainer.contains(container)) {\n if (props.debug) {\n console.log('ExternalObjectComponent: attaching existing external object with id =', props.id);\n }\n parentContainer.appendChild(container);\n }\n this.parentContainer = parentContainer;\n this.externalObjectMounted(externalObjectRef.object, props, parentContainer, container);\n this.updateExternalComponentAndSaveProps(props);\n }\n\n private unmountExternalObject(parentContainer: HTMLElement, props: Readonly<P & ES>) {\n if (this.props.debug) {\n console.log('ExternalObjectComponent.unmountExternalObject: parentContainer.id =', parentContainer.id);\n }\n const externalObjectRef = this.externalObjectStore[parentContainer.id];\n assert.ok(externalObjectRef);\n const container = externalObjectRef.container;\n if (container && parentContainer.contains(container)) {\n if (props.debug) {\n console.log('ExternalObjectComponent: detaching external object with id =', container.id);\n }\n parentContainer.removeChild(container);\n }\n this.parentContainer = null;\n this.externalObjectUnmounted(externalObjectRef.object, props, parentContainer, container);\n }\n\n private updateExternalComponentAndSaveProps(nextProps: Readonly<P>): void {\n const externalObjectRef = this.externalObjectStore[nextProps.id];\n assert.ok(externalObjectRef);\n // Get previous props\n const prevState = externalObjectRef.state;\n const nextState = this.propsToExternalObjectState(nextProps, prevState);\n if (this.props.debug) {\n console.log('ExternalObjectComponent: updating existing external object');\n console.log(' this.props.id =', this.props.id);\n console.log(' nextProps.id =', nextProps.id);\n console.log(' prevState =', prevState);\n console.log(' nextState =', nextState);\n }\n if (this.shouldExternalObjectUpdate(prevState, nextState)) {\n this.updateExternalObject(\n externalObjectRef.object,\n prevState, nextState,\n this.parentContainer,\n externalObjectRef.container\n );\n }\n // Remember new state\n externalObjectRef.state = nextState;\n }\n\n //noinspection JSMethodCanBeStatic\n protected shouldExternalObjectUpdate(prevState: ES, nextState: ES): boolean {\n return !shallowEqual(prevState, nextState);\n }\n\n private get externalObjectStore(): ExternalObjectStore<E, ES> {\n return (this.props.externalObjectStore || ExternalObjectComponent.DEFAULT_EXTERNAL_OBJECT_STORE) as ExternalObjectStore<E, ES>;\n }\n}\n","export function shallowEqual(v1: any, v2: any): boolean {\n if (v1 === v2) {\n return true;\n }\n if (v1 && v2) {\n const t1: string = typeof v1;\n const t2: string = typeof v2;\n if (t1 !== t2) {\n return false;\n }\n if (t1 === 'Array') {\n if (!v1.length !== !v2.length) {\n return false;\n }\n if (!v1.length && !v2.length) {\n return true;\n }\n for (let i = 0; i < v1.length; i++) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n } else if (t1 === 'object') {\n const names1 = Object.getOwnPropertyNames(v1);\n const names2 = Object.getOwnPropertyNames(v2);\n if (!names1.length !== !names2.length) {\n return false;\n }\n if (!names1.length && !names2.length) {\n return true;\n }\n for (let propertyName of names1) {\n if (v1[propertyName] !== v2[propertyName]) {\n return false;\n }\n }\n for (let propertyName of names2) {\n if (v1[propertyName] !== v2[propertyName]) {\n return false;\n }\n }\n return true;\n }\n }\n return false;\n}\n","import deepEqual from 'deep-equal';\nimport * as assert from './assert';\n\ntype ObjectWithId = { id: any; }\n\n/**\n * An action on an array of objects.\n */\nexport interface ArrayAction<T extends ObjectWithId> {\n /**\n * Action type, must be one of: 'ADD', 'REMOVE', 'UPDATE', 'MOVE'\n */\n type: 'ADD' | 'REMOVE' | 'UPDATE' | 'MOVE';\n /**\n * For type 'ADD': the insertion index.\n * For type 'UPDATE': the index of the element to be updated.\n * For type 'MOVE': the index from where to move.\n */\n index: number;\n /**\n * For type 'ADD' and 'UPDATE': the new element.\n */\n newElement?: T;\n /**\n * For type 'REMOVE' and 'UPDATE': the old element.\n */\n oldElement?: T;\n /**\n * For type 'UPDATE': the object containing change information.\n */\n change?: any;\n /**\n * For type 'MOVE': number of steps to move. May be negative to move an element down.\n */\n numSteps?: number;\n}\n\n/**\n * A diff for arrays whose elements are unique objects with an \"id\" property of any type.\n * An \"id\" property is considered equal to another if it shallow-equals the other i.e. element.id === other.id.\n *\n * By default, if the computeChange function is not provided, the \"change\" object between two elements\n * with same \"id\" property is computed by deepEqual from the \"deep-equal\" package.\n *\n * @param oldArray The first array, whose elements are all defined an non-null.\n * @param newArray The second array, whose elements are all defined an non-null.\n * @param computeChange An optional function used to compute an application-specific \"change\"\n * between two elements with equal \"id\" properties.\n * Signature: (element1, element2) => any\n * @returns {ArrayAction<T>[]} An array of actions to be performed to make oldArray equal to newArray.\n */\nexport function arrayDiff<T extends ObjectWithId>(oldArray: T[], newArray: T[], computeChange?: (e1: any, e2: any) => any): ArrayAction<T>[] {\n\n const actions = [] as ArrayAction<T>[];\n const currentArray = oldArray.slice();\n\n // REMOVE first, so we have less actions afterwards\n const newIds = new Set<string>(newArray.map(l => l.id));\n for (let oldIndex = oldArray.length - 1; oldIndex >= 0; oldIndex--) {\n const oldElement = oldArray[oldIndex];\n if (!newIds.has(oldElement.id)) {\n actions.push({type: 'REMOVE', index: oldIndex, oldElement});\n currentArray.splice(oldIndex, 1);\n }\n }\n\n assert.ok(currentArray.length <= newArray.length);\n\n for (let newIndex = 0; newIndex < newArray.length; newIndex++) {\n const newElement = newArray[newIndex];\n assert.ok(!!newElement);\n const currentElement = currentArray[newIndex];\n if (!currentElement) {\n actions.push({type: 'ADD', index: newIndex, newElement});\n currentArray.push(newElement);\n } else if (newElement.id !== currentElement.id) {\n let currentIndex = -1;\n for (let i = newIndex + 1; i < currentArray.length; i++) {\n if (currentArray[i].id === newElement.id) {\n currentIndex = i;\n break;\n }\n }\n if (currentIndex === -1) {\n actions.push({type: 'ADD', index: newIndex, newElement});\n currentArray.splice(newIndex, 0, newElement);\n } else {\n // Note: the current algorithm will only produce negative values for numSteps (= MOVE down)\n actions.push({type: 'MOVE', index: currentIndex, numSteps: newIndex - currentIndex});\n const layer = currentArray[currentIndex];\n currentArray.splice(currentIndex, 1);\n currentArray.splice(newIndex, 0, layer);\n newIndex = newIndex - 1;\n }\n } else {\n if (computeChange) {\n const change = computeChange(currentElement, newElement);\n if (change !== null && typeof change !== 'undefined') {\n actions.push({type: 'UPDATE', index: newIndex, oldElement: currentElement, newElement, change});\n }\n } else if (!deepEqual(currentElement, newElement)) {\n actions.push({type: 'UPDATE', index: newIndex, oldElement: currentElement, newElement});\n }\n }\n }\n\n return actions;\n}\n\n","import * as React from 'react';\n\nexport interface ISliderProps {\n splitPos: number;\n onChange: (splitPosition: number) => void;\n}\n\nexport class SplitSlider extends React.PureComponent<ISliderProps, null> {\n static readonly DIV_STYLE: React.CSSProperties = {\n position: 'absolute',\n left: '50%',\n top: '0px',\n backgroundColor: 'rgba(255, 255, 0, 0.5)',\n width: '2px',\n height: '100%',\n zIndex: 5,\n cursor: 'col-resize',\n };\n\n sliderElement: HTMLDivElement | null;\n dragStartX: number;\n\n constructor(props: ISliderProps) {\n super(props);\n this.handleRef = this.handleRef.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.sliderMove = this.sliderMove.bind(this);\n }\n\n mouseDown(e) {\n this.dragStartX = e.clientX - this.sliderElement.offsetLeft;\n window.addEventListener('mousemove', this.sliderMove, true);\n }\n\n mouseUp() {\n window.removeEventListener('mousemove', this.sliderMove, true);\n }\n\n sliderMove(e) {\n const splitPosition = (e.clientX - this.dragStartX) / this.sliderElement.parentElement.offsetWidth;\n this.props.onChange(splitPosition);\n }\n\n handleRef(sliderElement: HTMLDivElement) {\n if (sliderElement) {\n sliderElement.addEventListener('mousedown', this.mouseDown, false);\n window.addEventListener('mouseup', this.mouseUp, false);\n this.dragStartX = 0;\n } else if (this.sliderElement) {\n this.sliderElement.removeEventListener('mousedown', this.mouseDown, false);\n }\n this.sliderElement = sliderElement;\n }\n\n render() {\n const left = (100 * this.props.splitPos) + '%';\n return (<div style={{...SplitSlider.DIV_STYLE, left}}\n ref={this.handleRef}/>);\n }\n}\n\n\n","import * as Cesium from 'cesium'\nimport { isDefined } from '../../../common/types';\n\n\nexport const pointHeight = 10;\nexport const polylineHeight = 5;\nexport const polygonHeight = 0;\n\nexport const pointColor = new Cesium.ColorMaterialProperty(Cesium.Color.CHARTREUSE.withAlpha(0.9));\nexport const polylineColor = new Cesium.ColorMaterialProperty(Cesium.Color.YELLOW.withAlpha(0.9));\nexport const polylineWidth = 2;\nexport const polygonColor = new Cesium.ColorMaterialProperty(Cesium.Color.AQUA.withAlpha(0.7));\n\nexport type GeometryToolType = 'PointTool' | 'PolylineTool' | 'PolygonTool' | 'BoxTool' | 'NoTool';\n\nclass Click {\n position: Cesium.Cartesian2;\n}\n\nclass Movement {\n // noinspection JSUnusedGlobalSymbols\n startPosition?: Cesium.Cartesian2;\n endPosition: Cesium.Cartesian2;\n}\n\nexport abstract class ToolContext {\n\n abstract newEntity(entity: Cesium.Entity): void;\n\n abstract addToolEntity(entityT: Cesium.Entity): void;\n\n abstract removeAllToolEntities(): void;\n\n abstract pickEllipsoid(position: Cesium.Cartesian2): Cesium.Cartesian3 | undefined;\n\n abstract cartesianWithHeightDelta(cartesian: Cesium.Cartesian3, height: number): Cesium.Cartesian3;\n\n abstract cartesianToCartographic(cartesian: Cesium.Cartesian3): Cesium.Cartographic;\n\n abstract cartographicToCartesian(cartographic: Cesium.Cartographic): Cesium.Cartesian3;\n}\n\nexport abstract class ToolContextBase extends ToolContext {\n private _tool: Tool;\n\n protected constructor() {\n super();\n this._tool = NO_TOOL;\n }\n\n set tool(tool: Tool) {\n if (tool !== this._tool) {\n this._tool.deactivate();\n this._tool.context = null;\n this._tool = tool;\n this._tool.context = this;\n this._tool.activate();\n }\n }\n\n get tool(): Tool {\n return this._tool;\n }\n\n onLeftClick(leftClick: Click): void {\n this._tool.handleLeftClick(leftClick);\n }\n\n onLeftDoubleClick(leftClick: Click): void {\n this._tool.handleLeftDoubleClick(leftClick);\n }\n\n onMouseMove(movement: Movement): void {\n this._tool.handleMouseMove(movement);\n }\n}\n\n\nexport class CesiumToolContext extends ToolContextBase {\n private _viewer: Cesium.Viewer;\n private _ellipsoid: Cesium.Ellipsoid;\n private _toolDataSource: Cesium.CustomDataSource;\n private _handler: Cesium.ScreenSpaceEventHandler;\n private _onNewEntity?: (entity: Cesium.Entity) => void;\n\n constructor(viewer: Cesium.Viewer, onNewEntity?: (entity: Cesium.Entity) => void) {\n super();\n this._viewer = viewer;\n this._ellipsoid = viewer.scene.globe.ellipsoid;\n this._toolDataSource = new Cesium.CustomDataSource('Tool Data Source');\n viewer.dataSources.add(this._toolDataSource);\n const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);\n handler.setInputAction(leftClick => {\n if (this.tool.isActive()) {\n this.onLeftClick(leftClick);\n this._viewer.scene.requestRender();\n }\n }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n handler.setInputAction(doubleClick => {\n if (this.tool.isActive()) {\n this.onLeftDoubleClick(doubleClick);\n this._viewer.scene.requestRender();\n }\n }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n handler.setInputAction(movement => {\n if (this.tool.isActive()) {\n this.onMouseMove(movement);\n this._viewer.scene.requestRender();\n }\n }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n this._handler = handler;\n this._onNewEntity = onNewEntity;\n }\n\n newEntity(entity: Cesium.Entity): void {\n if (this._onNewEntity) {\n this._onNewEntity(new Cesium.Entity(entity));\n } else {\n this._viewer.entities.add(entity);\n }\n }\n\n addToolEntity(entity: Cesium.Entity): void {\n this._toolDataSource.entities.add(entity);\n }\n\n removeAllToolEntities(): void {\n this._toolDataSource.entities.removeAll();\n }\n\n pickEllipsoid(position: Cesium.Cartesian2): Cesium.Cartesian3 {\n return this._viewer.camera.pickEllipsoid(position, this._ellipsoid);\n }\n\n cartesianWithHeightDelta(cartesian: Cesium.Cartesian3, height: number): Cesium.Cartesian3 {\n const cartographic = this._ellipsoid.cartesianToCartographic(cartesian);\n cartographic.height += height;\n return this._ellipsoid.cartographicToCartesian(cartographic);\n }\n\n cartesianToCartographic(cartesian: Cesium.Cartesian3): Cesium.Cartographic {\n return this._ellipsoid.cartesianToCartographic(cartesian);\n }\n\n cartographicToCartesian(cartographic: Cesium.Cartographic): Cesium.Cartesian3 {\n return this._ellipsoid.cartographicToCartesian(cartographic);\n }\n\n destroy() {\n this._handler.destroy();\n }\n}\n\nexport interface Tool {\n readonly type: string;\n\n context: ToolContext | null;\n\n isActive(): boolean;\n\n activate(): void;\n\n deactivate(): void;\n\n handleLeftClick(leftClick: Click): void;\n\n handleLeftDoubleClick(leftClick: Click): void;\n\n handleMouseMove(movement: Movement): void;\n}\n\n\nabstract class ToolBase implements Tool {\n readonly type: string;\n private _context: ToolContext | null = null;\n\n constructor(type: string) {\n this.type = type;\n }\n\n set context(context: ToolContext | null) {\n this._context = context;\n }\n\n get context(): ToolContext | null {\n return this._context;\n }\n\n isActive(): boolean {\n return this._context !== null;\n }\n\n activate() {\n }\n\n deactivate() {\n }\n\n handleLeftClick(leftClick: Click) {\n }\n\n handleLeftDoubleClick(leftClick: Click) {\n }\n\n handleMouseMove(movement: Movement) {\n }\n}\n\nexport class NoTool extends ToolBase {\n constructor() {\n super('NoTool');\n }\n}\n\nexport const NO_TOOL = new NoTool();\n\nexport class PointTool extends ToolBase {\n\n constructor() {\n super('PointTool');\n }\n\n handleLeftClick(leftClick) {\n const position = this.context.pickEllipsoid(leftClick.position);\n if (isDefined(position)) {\n this.context.newEntity(new Cesium.Entity({\n position,\n point: {\n pixelSize: 6,\n //color: Cesium.Color.RED,\n //outlineColor: Cesium.Color.WHITE,\n outlineWidth: 1\n },\n }));\n }\n }\n}\n\nclass PolyTool extends ToolBase {\n\n private readonly genPolygon: boolean;\n\n // Note polylinePositions and polygonPositions differ in height\n private polylinePositions: Cesium.Cartesian3[] | null = null;\n private polygonPositions: Cesium.Cartesian3[] | null = null;\n\n private polylineEntity: Cesium.Entity | null = null;\n private polygonEntity: Cesium.Entity | null = null;\n\n private hasRubberband: boolean = false;\n\n constructor(type: string, genPolygon: boolean) {\n super(type);\n this.genPolygon = genPolygon;\n }\n\n deactivate() {\n this.reset();\n }\n\n handleLeftClick(leftClick: Click) {\n this.addPoint(leftClick.position);\n }\n\n handleMouseMove(movement: Movement) {\n this.moveLastPoint(movement.endPosition);\n }\n\n handleLeftDoubleClick(leftClick: Click) {\n this.endInteraction();\n }\n\n private addPoint(screenPosition: Cesium.Cartesian2) {\n let position = this.context.pickEllipsoid(screenPosition);\n if (isDefined(position)) {\n position = this.context.cartesianWithHeightDelta(position, pointHeight);\n // Add point graphics\n if (this.updatePositions(position)) {\n this.context.addToolEntity(new Cesium.Entity({\n position,\n //allowPicking: false,\n point: {\n show: true,\n outlineColor: Cesium.Color.BLACK,\n outlineWidth: 1,\n color: pointColor,\n pixelSize: 10,\n }\n }));\n }\n this.hasRubberband = false;\n }\n }\n\n private endInteraction() {\n if (this.polygonEntity !== null) {\n this.context.newEntity(new Cesium.Entity({\n polygon: {\n // check: why doesn't this work?\n // hierarchy: this.polygonEntity.hierarchy,\n hierarchy: new Cesium.PolygonHierarchy(this.polygonPositions),\n material: polygonColor,\n }\n }));\n } else if (this.polylineEntity !== null) {\n this.context.newEntity(new Cesium.Entity({\n polyline: {\n // check: why doesn't this work?\n // positions: this.polylinePositions.positions,\n positions: this.polylinePositions,\n material: polylineColor,\n }\n }));\n }\n this.reset();\n }\n\n private moveLastPoint(screenPosition: Cesium.Cartesian2) {\n if (!this.polylinePositions) {\n return;\n }\n const position = this.context.pickEllipsoid(screenPosition);\n if (isDefined(position)) {\n this.updatePositions(position);\n this.hasRubberband = true;\n }\n }\n\n private updatePositions(position: Cesium.Cartesian3): boolean {\n const polylinePoint = this.context.cartesianWithHeightDelta(position, polylineHeight);\n let newPointAdded = true;\n if (this.polylinePositions === null) {\n this.polylinePositions = [polylinePoint];\n } else {\n const numPoints = this.polylinePositions.length;\n if (this.hasRubberband) {\n this.polylinePositions[numPoints - 1] = polylinePoint;\n } else {\n if (polylinePoint.equals(this.polylinePositions[numPoints - 1])) {\n newPointAdded = false;\n } else {\n this.polylinePositions.push(polylinePoint);\n }\n }\n }\n if (this.polylinePositions.length > 1) {\n let positions = this.polylinePositions.slice();\n if (!this.polylineEntity) {\n this.polylineEntity = new Cesium.Entity({\n //allowPicking: false,\n polyline: {\n positions: positions,\n width: polylineWidth,\n //followSurface: true,\n material: polylineColor,\n }\n })\n this.context.addToolEntity(this.polylineEntity);\n } else if (newPointAdded) {\n this.polylineEntity.polyline.positions = new Cesium.ConstantProperty(positions);\n }\n }\n\n if (newPointAdded && this.genPolygon) {\n const polygonPoint = this.context.cartesianWithHeightDelta(position, polygonHeight);\n if (!this.polygonPositions) {\n this.polygonPositions = [polygonPoint];\n } else {\n const numPoints = this.polygonPositions.length;\n if (this.hasRubberband) {\n this.polygonPositions[numPoints - 1] = polygonPoint;\n } else {\n this.polygonPositions.push(polygonPoint);\n }\n }\n if (this.polygonPositions.length > 2) {\n let positions = this.polygonPositions.slice();\n if (!this.polygonEntity) {\n this.polygonEntity = new Cesium.Entity({\n //allowPicking: false,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(positions),\n material: polygonColor,\n }\n });\n this.context.addToolEntity(this.polygonEntity);\n } else {\n this.polygonEntity.polygon.hierarchy = new Cesium.ConstantProperty(new Cesium.PolygonHierarchy(positions));\n }\n }\n }\n\n return newPointAdded;\n }\n\n private reset() {\n this.polylinePositions = null;\n this.polygonPositions = null;\n this.polylineEntity = null;\n this.polygonEntity = null;\n this.hasRubberband = false;\n if (this.context !== null) {\n this.context.removeAllToolEntities();\n }\n }\n\n}\n\nexport class PolylineTool extends PolyTool {\n\n constructor() {\n super('PolylineTool', false);\n }\n}\n\nexport class PolygonTool extends PolyTool {\n\n constructor() {\n super('PolygonTool', true);\n }\n}\n\nexport class BoxTool extends ToolBase {\n\n private position1: Cesium.Cartesian3 | null = null;\n private position2: Cesium.Cartesian3 | null = null;\n private polygonEntity: Cesium.Entity | null = null;\n\n constructor() {\n super('BoxTool');\n }\n\n deactivate() {\n this.reset();\n }\n\n handleLeftClick(leftClick: Click) {\n this.setPosition(leftClick.position, true);\n }\n\n handleLeftDoubleClick(leftClick: Click) {\n this.setPosition(leftClick.position, true);\n }\n\n handleMouseMove(movement: Movement) {\n if (this.position1) {\n this.setPosition(movement.endPosition, false);\n }\n }\n\n private setPosition(screenPosition: Cesium.Cartesian2, doAdd: boolean) {\n const position = this.context.pickEllipsoid(screenPosition);\n if (isDefined(position)) {\n if (this.position1 === null) {\n this.position1 = position;\n } else {\n this.position2 = position;\n const positions = this.getPositions();\n if (doAdd) {\n this.context.newEntity(new Cesium.Entity({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(positions),\n material: polygonColor,\n }\n }));\n this.reset();\n return;\n }\n if (this.polygonEntity === null) {\n this.polygonEntity = new Cesium.Entity({\n // allowPicking: false,\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(positions),\n material: polygonColor,\n }\n });\n this.context.addToolEntity(this.polygonEntity);\n } else {\n this.polygonEntity.polygon.hierarchy = new Cesium.ConstantProperty(new Cesium.PolygonHierarchy(positions));\n }\n }\n }\n }\n\n private getPositions(): Cesium.Cartesian3[] {\n const carto1 = this.context.cartesianToCartographic(this.position1);\n const carto2 = this.context.cartesianToCartographic(this.position2);\n const lon1 = carto1.longitude;\n const lat1 = carto1.latitude;\n const lon2 = carto2.longitude;\n const lat2 = carto2.latitude;\n const height = 0.5 * (carto1.height + carto2.height);\n return [\n this.context.cartographicToCartesian(new Cesium.Cartographic(lon1, lat1, height)),\n this.context.cartographicToCartesian(new Cesium.Cartographic(lon2, lat1, height)),\n this.context.cartographicToCartesian(new Cesium.Cartographic(lon2, lat2, height)),\n this.context.cartographicToCartesian(new Cesium.Cartographic(lon1, lat2, height)),\n ];\n }\n\n reset() {\n this.position1 = null;\n this.position2 = null;\n this.polygonEntity = null;\n if (this.context !== null) {\n this.context.removeAllToolEntities();\n }\n }\n}\n\n","import * as React from 'react';\nimport * as Cesium from 'cesium';\nimport { diff } from 'deep-object-diff'\nimport { Feature, FeatureCollection, Point } from 'geojson';\nimport { ContextMenu } from '@blueprintjs/core';\n\nimport { ExternalObjectComponent, IExternalObjectComponentProps } from '../ExternalObjectComponent'\nimport { isBoolean, isNumber, isString } from '../../../common/types';\nimport { arrayDiff } from '../../../common/array-diff';\nimport { SimpleStyle } from '../../../common/geojson-simple-style';\nimport { SplitSlider } from './SplitSlider';\nimport {\n applyStyleToEntity,\n applyStyleToEntityCollection,\n BaseMapOptions,\n canvasToCartographic,\n clientToCanvas,\n getEntityByEntityId,\n pickEntity, setViewerBaseMap,\n simpleStyleToCesium\n} from './cesium-util';\nimport {\n BoxTool,\n CesiumToolContext,\n GeometryToolType,\n NO_TOOL,\n PointTool,\n PolygonTool,\n PolylineTool\n} from './geometry-tool';\n\n\ninterface Placemark extends Feature<Point> {\n id: string;\n}\n\ninterface PlacemarkCollection extends FeatureCollection<Point> {\n features: Placemark[];\n}\n\n/**\n * Describes a layer to be displayed on the Cesium globe.\n */\nexport interface LayerDescriptor {\n id: string;\n name?: string | null;\n visible: boolean;\n}\n\n/**\n * Describes an image layer (imagery provider) to be displayed on the Cesium globe.\n */\nexport interface ImageLayerDescriptor extends LayerDescriptor {\n opacity?: number;\n brightness?: number;\n contrast?: number;\n hue?: number;\n saturation?: number;\n gamma?: number;\n splitMode: 'right' | 'left' | 'off';\n\n imageryProvider: ((viewer: Cesium.Viewer, options: any) => Cesium.ImageryProvider) | Cesium.ImageryProvider;\n imageryProviderOptions: any;\n}\n\n/**\n * Describes a vector data layer (entity data source) to be displayed on the Cesium globe.\n */\nexport interface VectorLayerDescriptor extends LayerDescriptor {\n style?: SimpleStyle;\n entityStyles?: { [entityId: string]: SimpleStyle };\n dataSource: ((viewer: Cesium.Viewer, options: any) => Cesium.DataSource | Promise<Cesium.DataSource>) | Cesium.DataSource | Promise<Cesium.DataSource>;\n dataSourceOptions?: any;\n}\n\nexport interface LayerDescriptors {\n vectorLayerDescriptors?: VectorLayerDescriptor[];\n imageLayerDescriptors?: ImageLayerDescriptor[];\n}\n\n// Bing Maps Key associated with Account Id 1441410 (= norman.fomferra@brockmann-consult.de)\n// * Application Name: CCI Toolbox\n// * Key / Application Type: Basic / Dev/Test\n// * Application URL: http://cci.esa.int/\n//\n\nCesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhNzYzYzJjYS00YzY5LTQzN2ItOWQzNy03NWZmZTQyMjU1ZDgiLCJpZCI6MjAwNTAsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1NzY2NjU5ODN9.f-uN5Ocljn77-O2aDNEGPSr8HRHym5RA0aqSWKMgYYk';\n\ninterface CesiumGlobeStateBase {\n selectedPlacemarkId?: string;\n baseMapOptions: BaseMapOptions | null;\n imageLayerDescriptors?: ImageLayerDescriptor[];\n vectorLayerDescriptors?: VectorLayerDescriptor[];\n overlayHtml?: HTMLElement | null;\n splitLayerPosition?: number;\n geometryToolType?: GeometryToolType;\n}\n\ntype DataSourceMap = { [layerId: string]: Cesium.DataSource };\n\ninterface CesiumGlobeState extends CesiumGlobeStateBase {\n dataSourceMap: DataSourceMap;\n}\n\nexport type GeographicPosition = { latitude: number, longitude: number, height?: number };\nexport type CanvasPosition = { x: number, y: number };\n\nexport interface ICesiumGlobeProps extends IExternalObjectComponentProps<Cesium.Viewer, CesiumGlobeState>, CesiumGlobeStateBase {\n offlineMode?: boolean;\n onLeftUp?: (geoPos: GeographicPosition, canvasPos: CanvasPosition, entity?: Cesium.Entity) => void;\n onLeftClick?: (geoPos: GeographicPosition, canvasPos: CanvasPosition, entity?: Cesium.Entity) => void;\n onRightClick?: (geoPos: GeographicPosition, canvasPos: CanvasPosition, entity?: Cesium.Entity) => void;\n onMouseMove?: (geoPos: GeographicPosition, canvasPos: CanvasPosition) => void;\n renderContextMenu?: (geoPos: GeographicPosition, canvasPos: CanvasPosition, entity?: Cesium.Entity) => JSX.Element | null;\n onSelectedEntityChanged?: (selectedEntity: Cesium.Entity | null) => void;\n onNewEntityAdded?: (newEntity: Cesium.Entity) => void;\n onViewerMounted?: (id: string, viewer: Cesium.Viewer) => void;\n onViewerUnmounted?: (id: string, viewer: Cesium.Viewer) => void;\n onLayerSplitPosChange?: (splitLayerPos: number) => void;\n}\n\nconst CENTRAL_EUROPE_BOX = Cesium.Rectangle.fromDegrees(-30, 20, 40, 80);\nconst EMPTY_ARRAY = [];\nCesium.Camera.DEFAULT_VIEW_RECTANGLE = CENTRAL_EUROPE_BOX;\nCesium.Camera.DEFAULT_VIEW_FACTOR = 0;\n\ninterface ICesiumGlobeState {\n isContextMenuOpen: boolean;\n}\n\n/**\n * A component that wraps a Cesium 3D Globe.\n *\n * @author Norman Fomferra\n */\nexport class CesiumGlobe extends ExternalObjectComponent<Cesium.Viewer, CesiumGlobeState, ICesiumGlobeProps, ICesiumGlobeState> {\n private cesiumEventHandler: any;\n private selectedEntityChangeHandler: any;\n private toolContext: CesiumToolContext;\n\n constructor(props: ICesiumGlobeProps) {\n super(props);\n this.handleRemoteBaseLayerError = this.handleRemoteBaseLayerError.bind(this);\n this.state = {isContextMenuOpen: false};\n }\n\n get viewer(): Cesium.Viewer | null {\n const externalObjectRef = this.getExternalObjectRef();\n return !!externalObjectRef ? externalObjectRef.object : null;\n }\n\n protected renderChildren() {\n if (isNumber(this.props.splitLayerPosition)) {\n return (<SplitSlider splitPos={this.props.splitLayerPosition}\n onChange={this.props.onLayerSplitPosChange}/>);\n }\n return null;\n }\n\n newContainer(id: string): HTMLElement {\n const div = document.createElement('div');\n div.setAttribute('id', 'cesium-container-' + id);\n div.setAttribute('style', 'width: 100%; height: 100%; overflow: hidden;');\n return div;\n }\n\n newExternalObject(parentContainer: HTMLElement, container: HTMLElement): Cesium.Viewer {\n\n let baseLayerImageryProvider;\n if (this.props.offlineMode) {\n baseLayerImageryProvider = CesiumGlobe.getStaticNaturalEarthImageryProvider();\n }\n\n const cesiumViewerOptions: Cesium.Viewer.ConstructorOptions = {\n animation: false,\n baseLayerPicker: false,\n selectionIndicator: true,\n fullscreenButton: false,\n geocoder: false,\n homeButton: false,\n infoBox: false,\n sceneModePicker: true,\n timeline: false,\n navigationHelpButton: false,\n navigationInstructionsInitiallyVisible: false,\n automaticallyTrackDataSourceClocks: false,\n imageryProvider: baseLayerImageryProvider,\n // Create a viewer that will not render frames based on changes in simulation time.\n // https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/\n requestRenderMode: true,\n maximumRenderTimeChange: Infinity,\n };\n\n // Create the CesiumCesium.Viewer\n //noinspection UnnecessaryLocalVariableJS\n const viewer = new Cesium.Viewer(container, cesiumViewerOptions);\n\n // Register context mnenu\n // Note, for some reason we cannot use BlueprintJS' @ContextMenuTarget interface here\n container.oncontextmenu = (event: PointerEvent) => this.handleContextMenu(viewer, event);\n\n if (this.props.debug) {\n // Show a little overlay panel with FPS. Useful for optimisations.\n viewer.scene.debugShowFramesPerSecond = true;\n }\n\n if (!this.props.offlineMode) {\n setViewerBaseMap(viewer, this.props.baseMapOptions);\n }\n\n // knockout is used by Cesium to update the style attributes of the selectionIndicator\n // when using multiple views this breaks, for unknown reason\n // to get this working we update the 'style' attribute of the selectionIndicatorElement manually\n // https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/SelectionIndicator/SelectionIndicatorViewModel.js\n\n const viewModel = viewer.selectionIndicator.viewModel;\n\n const originalUpdate = viewModel.update;\n viewModel.update = function () {\n // TODO (forman): Note viewModel.update() is called all over the time.\n // Check if this is cause for OOM-Error on Firefox.\n // console.log(\"newExternalObject: viewModel.update()!\");\n const vm = viewModel as any;\n originalUpdate.apply(this);\n const styleValue = `top : ${vm._screenPositionY}; left : ${vm._screenPositionX};`;\n vm._selectionIndicatorElement.setAttribute('style', styleValue);\n };\n\n return viewer;\n }\n\n private handleRemoteBaseLayerError(event) {\n console.error('CesiumGlobe: error: ', event.message, event.timesRetried, event.error);\n let ref = this.getExternalObjectRef();\n if (ref) {\n const viewer: Cesium.Viewer = ref.object;\n // On error, exchange the remote base layer with a static one.\n let imageryLayer = viewer.imageryLayers.get(0);\n viewer.imageryLayers.remove(imageryLayer, true);\n let staticNaturalEarthImageryProvider = CesiumGlobe.getStaticNaturalEarthImageryProvider();\n viewer.imageryLayers.addImageryProvider(staticNaturalEarthImageryProvider, 0);\n }\n }\n\n private handleContextMenu(viewer: Cesium.Viewer, event: PointerEvent) {\n const renderContextMenu = this.props.renderContextMenu;\n if (renderContextMenu) {\n const screenPos = new Cesium.Cartesian2(event.clientX, event.clientY);\n const canvasPos = clientToCanvas(viewer, screenPos);\n const cartographic = canvasToCartographic(viewer, canvasPos, true);\n const entity = pickEntity(viewer, canvasPos);\n const contextMenu = renderContextMenu(cartographic, canvasPos, entity);\n if (contextMenu) {\n event.preventDefault();\n // invoke static API, getting coordinates from mouse event\n ContextMenu.show(\n contextMenu,\n {left: event.clientX, top: event.clientY},\n () => this.setState({isContextMenuOpen: false}),\n );\n this.setState({isContextMenuOpen: true});\n }\n }\n }\n\n private static getStaticNaturalEarthImageryProvider() {\n // Cesium.buildModuleUrl.setBaseUrl('./');\n const baseUrl = Cesium.buildModuleUrl('');\n const imageryProviderOptions = {\n url: baseUrl + 'Assets/Textures/NaturalEarthII/{z}/{x}/{reverseY}.jpg',\n tilingScheme: new Cesium.GeographicTilingScheme(),\n minimumLevel: 0,\n maximumLevel: 2,\n credit: 'Natural Earth II: Tileset Copyright © 2012-2014 Analytical Graphics, Inc. (AGI). Original data courtesy Natural Earth and in the public domain.'\n };\n return new Cesium.UrlTemplateImageryProvider(imageryProviderOptions);\n }\n\n propsToExternalObjectState(props: ICesiumGlobeProps & CesiumGlobeState, prevState?: CesiumGlobeState): CesiumGlobeState {\n const selectedPlacemarkId = props.selectedPlacemarkId;\n const baseMapOptions = props.baseMapOptions;\n const imageLayerDescriptors = props.imageLayerDescriptors || EMPTY_ARRAY;\n const vectorLayerDescriptors = props.vectorLayerDescriptors || EMPTY_ARRAY;\n const overlayHtml = props.overlayHtml || null;\n const geometryToolType = props.geometryToolType;\n const splitLayerPosition = props.splitLayerPosition;\n const dataSourceMap = (prevState && prevState.dataSourceMap) || {};\n return {\n selectedPlacemarkId,\n baseMapOptions,\n imageLayerDescriptors,\n vectorLayerDescriptors,\n overlayHtml,\n geometryToolType,\n splitLayerPosition,\n dataSourceMap,\n };\n }\n\n updateExternalObject(viewer: Cesium.Viewer, prevState: CesiumGlobeState, nextState: CesiumGlobeState): void {\n\n const prevBaseMapOptions = (prevState && prevState.baseMapOptions) || null;\n const prevSelectedPlacemarkId = (prevState && prevState.selectedPlacemarkId) || null;\n const prevImageLayerDescriptors = (prevState && prevState.imageLayerDescriptors) || EMPTY_ARRAY;\n const prevVectorLayerDescriptors = (prevState && prevState.vectorLayerDescriptors) || EMPTY_ARRAY;\n const prevOverlayHtml = (prevState && prevState.overlayHtml) || null;\n const prevSplitLayerPosition = (prevState && prevState.splitLayerPosition);\n const prevGeometryToolType = (prevState && prevState.geometryToolType) || 'NoTool';\n\n const nextBaseMapOptions = nextState.baseMapOptions;\n const nextSelectedPlacemarkId = nextState.selectedPlacemarkId || null;\n const nextImageLayerDescriptors = nextState.imageLayerDescriptors || EMPTY_ARRAY;\n const nextVectorLayerDescriptors = nextState.vectorLayerDescriptors || EMPTY_ARRAY;\n const nextOverlayHtml = nextState.overlayHtml;\n const nextSplitLayerPosition = nextState.splitLayerPosition;\n const nextGeometryToolType = nextState.geometryToolType || 'NoTool';\n\n let shouldRequestRender = false;\n\n if (prevBaseMapOptions !== nextBaseMapOptions && !this.props.offlineMode) {\n setViewerBaseMap(viewer, nextBaseMapOptions);\n }\n\n if (prevImageLayerDescriptors !== nextImageLayerDescriptors) {\n this.updateImageLayers(viewer,\n prevImageLayerDescriptors,\n nextImageLayerDescriptors);\n shouldRequestRender = true;\n }\n if (prevVectorLayerDescriptors !== nextVectorLayerDescriptors) {\n this.updateVectorLayers(viewer,\n prevVectorLayerDescriptors,\n nextVectorLayerDescriptors,\n nextState.dataSourceMap,\n nextSelectedPlacemarkId);\n shouldRequestRender = true;\n }\n if (prevSelectedPlacemarkId !== nextSelectedPlacemarkId) {\n this.updatePlacemarkSelection(viewer, nextSelectedPlacemarkId);\n shouldRequestRender = true;\n }\n if (prevOverlayHtml !== nextOverlayHtml) {\n CesiumGlobe.updateOverlayHtml(viewer, prevOverlayHtml, nextOverlayHtml);\n shouldRequestRender = true;\n }\n if (prevSplitLayerPosition !== nextSplitLayerPosition) {\n if (isNumber(nextSplitLayerPosition)) {\n viewer.scene.imagerySplitPosition = nextSplitLayerPosition;\n }\n shouldRequestRender = true;\n }\n if (prevGeometryToolType !== nextGeometryToolType) {\n this.activateGeometryTool(viewer, nextGeometryToolType);\n }\n if (shouldRequestRender) {\n // Explicitly render a new frame\n viewer.scene.requestRender();\n }\n }\n\n externalObjectMounted(viewer: Cesium.Viewer, props: Readonly<ICesiumGlobeProps>): void {\n\n function handleInputAction(canvasPosition, shouldPickEntity: boolean, callback) {\n if (callback) {\n // Check: Maybe we should disable events while a tool is active\n // if (this.props.geometryToolType !== \"NoTool\") {\n // return;\n // }\n const cartographic = canvasToCartographic(viewer, canvasPosition, true);\n if (shouldPickEntity) {\n callback(cartographic, canvasPosition, pickEntity(viewer, canvasPosition));\n } else {\n callback(cartographic, canvasPosition);\n }\n }\n }\n\n this.cesiumEventHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);\n this.cesiumEventHandler.setInputAction(\n (event) => handleInputAction(event.position, true, props.onLeftUp),\n Cesium.ScreenSpaceEventType.LEFT_UP\n );\n this.cesiumEventHandler.setInputAction(\n (event) => handleInputAction(event.position, true, props.onLeftClick),\n Cesium.ScreenSpaceEventType.LEFT_CLICK\n );\n this.cesiumEventHandler.setInputAction(\n (event) => handleInputAction(event.position, true, props.onRightClick),\n Cesium.ScreenSpaceEventType.RIGHT_CLICK\n );\n this.cesiumEventHandler.setInputAction(\n (event) => handleInputAction(event.endPosition, false, props.onMouseMove),\n Cesium.ScreenSpaceEventType.MOUSE_MOVE\n );\n\n this.selectedEntityChangeHandler = (selectedEntity: Cesium.Entity | null) => {\n if (props.onSelectedEntityChanged) {\n props.onSelectedEntityChanged(selectedEntity);\n }\n };\n viewer.selectedEntityChanged.addEventListener(this.selectedEntityChangeHandler);\n\n this.toolContext = new CesiumToolContext(viewer, props.onNewEntityAdded);\n this.activateGeometryTool(viewer, props.geometryToolType);\n\n viewer.scene.requestRender();\n\n if (props.onViewerMounted) {\n props.onViewerMounted(props.id, viewer);\n }\n }\n\n externalObjectUnmounted(viewer: Cesium.Viewer, props: Readonly<ICesiumGlobeProps>): void {\n if (this.cesiumEventHandler) {\n this.cesiumEventHandler.destroy();\n this.cesiumEventHandler = null;\n }\n\n if (this.selectedEntityChangeHandler) {\n viewer.selectedEntityChanged.removeEventListener(this.selectedEntityChangeHandler);\n this.selectedEntityChangeHandler = null;\n }\n\n if (this.toolContext) {\n this.toolContext.destroy();\n this.toolContext = null;\n }\n\n if (props.onViewerUnmounted) {\n props.onViewerUnmounted(props.id, viewer);\n }\n }\n\n //noinspection JSMethodCanBeStatic\n private updatePlacemarkSelection(viewer: Cesium.Viewer, selectedPlacemarkId: string | null) {\n const selectedEntity = (selectedPlacemarkId && getEntityByEntityId(viewer, selectedPlacemarkId)) || null;\n const selectedEntityInViewer = viewer.selectedEntity || null;\n if (this.props.debug) {\n console.log('CesiumGlobe: updating selected placemark: ', selectedEntityInViewer, selectedEntity);\n }\n if (selectedEntityInViewer !== selectedEntity) {\n viewer.selectedEntity = selectedEntity;\n }\n }\n\n private updatePlacemarks(entities: Cesium.EntityCollection,\n currentPlacemarks: PlacemarkCollection,\n nextPlacemarks: PlacemarkCollection,\n style: SimpleStyle): Promise<Cesium.GeoJsonDataSource[]> {\n if (this.props.debug) {\n console.log('CesiumGlobe: updating placemarks');\n }\n const actions = arrayDiff<Placemark>((currentPlacemarks && currentPlacemarks.features) || EMPTY_ARRAY,\n (nextPlacemarks && nextPlacemarks.features) || EMPTY_ARRAY);\n const promises: Promise<Cesium.GeoJsonDataSource>[] = [];\n for (let action of actions) {\n if (this.props.debug) {\n console.log('CesiumGlobe: next placemark action', action);\n }\n switch (action.type) {\n case 'ADD': {\n const placemark = action.newElement;\n const visible = placemark.properties['visible'];\n const dataSourcePromise = Cesium.GeoJsonDataSource.load(placemark, simpleStyleToCesium(style));\n promises.push(dataSourcePromise.then(dataSource => {\n CesiumGlobe.moveEntities(dataSource.entities, entities, isBoolean(visible) ? visible : true);\n return dataSource;\n }));\n break;\n }\n case 'REMOVE': {\n let placemark = action.oldElement;\n entities.removeById(placemark.id);\n break;\n }\n case 'UPDATE':\n const oldPlacemark = action.oldElement;\n const newPlacemark = action.newElement;\n const visible = newPlacemark.properties['visible'];\n const dataSourcePromise = Cesium.GeoJsonDataSource.load(newPlacemark, simpleStyleToCesium(style));\n promises.push(dataSourcePromise.then(dataSource => {\n entities.removeById(oldPlacemark.id);\n CesiumGlobe.moveEntities(dataSource.entities, entities, isBoolean(visible) ? visible : true);\n return dataSource;\n }));\n break;\n default:\n console.error(`CesiumGlobe: unhandled placemark action type \"${action.type}\"`);\n }\n }\n return Promise.all(promises);\n }\n\n private updateImageLayers(viewer: Cesium.Viewer,\n currentLayers: ImageLayerDescriptor[],\n nextLayers: ImageLayerDescriptor[]) {\n if (this.props.debug) {\n console.log('CesiumGlobe: updating image layers');\n }\n const actions = arrayDiff<ImageLayerDescriptor>(currentLayers, nextLayers);\n let imageryLayer: Cesium.ImageryLayer;\n let newLayer: ImageLayerDescriptor;\n let oldLayer: ImageLayerDescriptor;\n for (let action of actions) {\n if (this.props.debug) {\n console.log('CesiumGlobe: next image layer action', action);\n }\n // cesiumIndex is +1 because of its base layer at cesiumIndex=0\n const cesiumIndex = action.index + 1;\n switch (action.type) {\n case 'ADD':\n imageryLayer = this.addLayer(viewer, action.newElement, cesiumIndex);\n if (!imageryLayer) {\n // TODO (forman): Check, if we still get here.\n // Possible reason, new globe views may not have their\n // 'selectedVariable' layer correctly initialized.\n console.error('CesiumGlobe: no imageryLayer at index ' + cesiumIndex);\n break;\n }\n CesiumGlobe.setLayerProps(imageryLayer, action.newElement);\n break;\n case 'REMOVE':\n imageryLayer = viewer.imageryLayers.get(cesiumIndex);\n //assert.ok(imageryLayer);\n if (!imageryLayer) {\n console.error('CesiumGlobe: no imageryLayer at index ' + cesiumIndex);\n break;\n }\n this.removeLayer(viewer, imageryLayer, cesiumIndex);\n break;\n case 'UPDATE':\n imageryLayer = viewer.imageryLayers.get(cesiumIndex);\n //assert.ok(imageryLayer);\n if (!imageryLayer) {\n console.error('CesiumGlobe: no imageryLayer at index ' + cesiumIndex);\n break;\n }\n oldLayer = action.oldElement;\n newLayer = action.newElement;\n if (oldLayer.imageryProviderOptions.url !== newLayer.imageryProviderOptions.url) {\n // It is a pitty that Cesium API does not allow for changing the\n // URL in place. The current approach, namely remove/add, causes flickering.\n this.removeLayer(viewer, imageryLayer, cesiumIndex);\n imageryLayer = this.addLayer(viewer, newLayer, cesiumIndex);\n imageryLayer.minificationFilter = Cesium.TextureMinificationFilter.NEAREST;\n imageryLayer.magnificationFilter = Cesium.TextureMagnificationFilter.NEAREST;\n }\n // update imageryLayer\n CesiumGlobe.setLayerProps(imageryLayer, newLayer);\n break;\n case 'MOVE':\n imageryLayer = viewer.imageryLayers.get(cesiumIndex);\n //assert.ok(imageryLayer);\n if (!imageryLayer) {\n console.error('CesiumGlobe: no imageryLayer at index ' + cesiumIndex);\n break;\n }\n if (action.numSteps < 0) {\n for (let i = 0; i < -action.numSteps; i++) {\n viewer.imageryLayers.lower(imageryLayer);\n }\n } else {\n for (let i = 0; i < action.numSteps; i++) {\n viewer.imageryLayers.raise(imageryLayer);\n }\n }\n break;\n default:\n console.error(`CesiumGlobe: unhandled layer action type \"${action.type}\"`);\n }\n }\n }\n\n private updateVectorLayers(viewer: Cesium.Viewer,\n currentLayers: VectorLayerDescriptor[],\n nextLayers: VectorLayerDescriptor[],\n dataSourceMap: DataSourceMap,\n selectedPlacemarkId: string | null) {\n if (this.props.debug) {\n console.log('CesiumGlobe: updating vector layers');\n }\n const actions = arrayDiff<VectorLayerDescriptor>(currentLayers, nextLayers);\n for (let action of actions) {\n if (this.props.debug) {\n console.log('CesiumGlobe: next vector layer action', action);\n }\n //const index = action.index;\n switch (action.type) {\n case 'ADD': {\n this.addDataSource(viewer, action.newElement, dataSourceMap);\n break;\n }\n case 'REMOVE': {\n this.removeDataSource(viewer, action.oldElement, dataSourceMap);\n break;\n }\n case 'UPDATE': {\n this.updateDataSource(viewer, action.oldElement, action.newElement, dataSourceMap, selectedPlacemarkId);\n break;\n }\n case 'MOVE': {\n // order of dataSources seems to have no effect in Cesium\n break;\n }\n default:\n console.error(`CesiumGlobe: unhandled layer action type \"${action.type}\"`);\n }\n }\n }\n\n private static updateOverlayHtml(viewer: Cesium.Viewer, prevOverlayHtml: HTMLElement, nextOverlayHtml: HTMLElement) {\n // console.log('updateOverlayHtml', prevOverlayHtml, nextOverlayHtml);\n if (nextOverlayHtml) {\n if (prevOverlayHtml) {\n if (!viewer.container.contains(prevOverlayHtml)) {\n // TODO (forman): Check, if we still get here.\n console.warn('CesiumGlobe: previous HTML element is not a child', prevOverlayHtml);\n return;\n }\n viewer.container.replaceChild(nextOverlayHtml, prevOverlayHtml);\n } else {\n viewer.container.appendChild(nextOverlayHtml);\n }\n } else if (prevOverlayHtml) {\n if (!viewer.container.contains(prevOverlayHtml)) {\n // TODO (forman): Check, if we still get here.\n console.warn('CesiumGlobe: previous HTML element is not a child', prevOverlayHtml);\n return;\n }\n viewer.container.removeChild(prevOverlayHtml);\n }\n }\n\n private static getImageryProvider(viewer: Cesium.Viewer, layerDescriptor: ImageLayerDescriptor): Cesium.ImageryProvider {\n if (layerDescriptor.imageryProvider) {\n if (typeof layerDescriptor.imageryProvider === 'function') {\n return layerDescriptor.imageryProvider(viewer, layerDescriptor.imageryProviderOptions);\n } else {\n return layerDescriptor.imageryProvider;\n }\n }\n return null;\n }\n\n // https://cesiumjs.org/Cesium/Build/Documentation/GeoJsonDataSource.html\n private static getDataSource(viewer: Cesium.Viewer, dataSourceDescriptor: VectorLayerDescriptor): Cesium.DataSource | Promise<Cesium.DataSource> {\n if (typeof dataSourceDescriptor.dataSource === 'function') {\n return dataSourceDescriptor.dataSource(viewer, dataSourceDescriptor.dataSourceOptions);\n } else {\n return dataSourceDescriptor.dataSource;\n }\n }\n\n private addDataSource(viewer: Cesium.Viewer,\n layer: VectorLayerDescriptor,\n dataSourceMap: DataSourceMap): void {\n const dataSource = CesiumGlobe.getDataSource(viewer, layer);\n viewer.dataSources.add(dataSource).then((resolvedDataSource) => {\n if (this.props.debug) {\n console.log(`CesiumGlobe: added data source: ${layer.name}`);\n }\n dataSourceMap[layer.id] = resolvedDataSource;\n this.setDataSourceProps(viewer, resolvedDataSource, layer);\n });\n }\n\n private removeDataSource(viewer: Cesium.Viewer,\n layer: VectorLayerDescriptor,\n dataSourceMap: DataSourceMap) {\n const dataSource = dataSourceMap[layer.id];\n if (dataSource) {\n delete dataSourceMap[layer.id];\n viewer.dataSources.remove(dataSource, true);\n if (this.props.debug) {\n console.log(`CesiumGlobe: removed data source: ${layer.name}`);\n }\n viewer.scene.requestRender();\n }\n }\n\n private updateDataSource(viewer: Cesium.Viewer,\n oldLayer: VectorLayerDescriptor,\n newLayer: VectorLayerDescriptor,\n dataSourceMap: DataSourceMap,\n selectedPlacemarkId: string | null) {\n const layerId = newLayer.id;\n const dataSource = dataSourceMap[layerId];\n if (!dataSource) {\n console.warn('CesiumGlobe: dataSource for vector layer not ready yet, layerId =', layerId);\n return;\n }\n const oldData = oldLayer.dataSourceOptions.data;\n const newData = newLayer.dataSourceOptions.data;\n if (oldData !== newData) {\n if (isString(newData)) {\n // URL change: must load new dataSource\n this.removeDataSource(viewer, oldLayer, dataSourceMap);\n this.addDataSource(viewer, newLayer, dataSourceMap);\n } else {\n // Change of placemarks (a GeoJSON FeatureCollection)\n this.updatePlacemarks(dataSource.entities, oldData, newData, newLayer.style).then(() => {\n if (selectedPlacemarkId) {\n const selectedEntity = dataSource.entities.getById(selectedPlacemarkId);\n if (selectedEntity && selectedEntity !== viewer.selectedEntity) {\n viewer.selectedEntity = selectedEntity;\n }\n }\n });\n }\n }\n const oldStyle = oldLayer.style;\n const newStyle = newLayer.style;\n if (oldStyle !== newStyle) {\n const styleDelta = diff(oldStyle, newStyle);\n if (Object.getOwnPropertyNames(styleDelta).length > 0) {\n const cStyle = simpleStyleToCesium(styleDelta, newStyle);\n applyStyleToEntityCollection(cStyle, dataSource.entities.values);\n }\n }\n const oldEntityStyles = oldLayer.entityStyles;\n const newEntityStyles = newLayer.entityStyles;\n if (oldEntityStyles !== newEntityStyles) {\n const entityStylesDelta = diff(oldEntityStyles, newEntityStyles);\n for (let entityId of Object.getOwnPropertyNames(entityStylesDelta)) {\n const entity = dataSource.entities.getById(entityId);\n if (entity) {\n const entityStyleDelta = entityStylesDelta[entityId];\n if (Object.getOwnPropertyNames(entityStyleDelta).length > 0) {\n const cStyle = simpleStyleToCesium(entityStyleDelta, newEntityStyles[entityId]);\n applyStyleToEntity(cStyle, entity)\n }\n }\n }\n }\n this.setDataSourceProps(viewer, dataSource, newLayer);\n }\n\n private addLayer(viewer: Cesium.Viewer, layerDescriptor: ImageLayerDescriptor, layerIndex: number): Cesium.ImageryLayer {\n const imageryProvider = CesiumGlobe.getImageryProvider(viewer, layerDescriptor);\n const imageryLayer = viewer.imageryLayers.addImageryProvider(imageryProvider, layerIndex);\n if (this.props.debug) {\n console.log(`CesiumGlobe: added imagery layer #${layerIndex}: ${layerDescriptor.name}`);\n }\n return imageryLayer;\n }\n\n private removeLayer(viewer: Cesium.Viewer, imageryLayer: Cesium.ImageryLayer, layerIndex: number): void {\n viewer.imageryLayers.remove(imageryLayer, true);\n if (this.props.debug) {\n console.log(`CesiumGlobe: removed imagery layer #${layerIndex}`);\n }\n }\n\n private static setLayerProps(imageryLayer: Cesium.ImageryLayer,\n layerDescriptor: ImageLayerDescriptor) {\n //imageryLayer.name = layerDescriptor.name;\n imageryLayer.show = layerDescriptor.visible;\n imageryLayer.alpha = layerDescriptor.opacity;\n imageryLayer.brightness = layerDescriptor.brightness;\n imageryLayer.contrast = layerDescriptor.contrast;\n imageryLayer.hue = layerDescriptor.hue;\n imageryLayer.saturation = layerDescriptor.saturation;\n imageryLayer.gamma = layerDescriptor.gamma;\n imageryLayer.minificationFilter = Cesium.TextureMinificationFilter.NEAREST;\n imageryLayer.magnificationFilter = Cesium.TextureMagnificationFilter.NEAREST;\n\n if (layerDescriptor.splitMode === 'left') {\n imageryLayer.splitDirection = Cesium.ImagerySplitDirection.LEFT;\n } else if (layerDescriptor.splitMode === 'right') {\n imageryLayer.splitDirection = Cesium.ImagerySplitDirection.RIGHT;\n } else {\n imageryLayer.splitDirection = Cesium.ImagerySplitDirection.NONE;\n }\n }\n\n private setDataSourceProps(viewer: Cesium.Viewer,\n dataSource: Cesium.DataSource | Promise<Cesium.DataSource>,\n dataSourceDescriptor: VectorLayerDescriptor) {\n Promise.resolve(dataSource).then((resolvedDataSource: Cesium.DataSource) => {\n //resolvedDataSource.name = dataSourceDescriptor.name;\n resolvedDataSource.show = dataSourceDescriptor.visible;\n viewer.scene.requestRender();\n });\n }\n\n private static moveEntities(from: Cesium.EntityCollection, to: Cesium.EntityCollection, show: boolean) {\n for (let entity of from.values.slice()) {\n entity.show = show;\n to.add(entity);\n from.remove(entity);\n }\n }\n\n activateGeometryTool(viewer: Cesium.Viewer, geometryToolType: GeometryToolType) {\n const tool = this.toolContext.tool;\n if (geometryToolType !== tool.type) {\n if (geometryToolType === 'NoTool') {\n this.toolContext.tool = NO_TOOL;\n } else if (geometryToolType === 'PointTool') {\n this.toolContext.tool = new PointTool();\n } else if (geometryToolType === 'PolylineTool') {\n this.toolContext.tool = new PolylineTool();\n } else if (geometryToolType === 'PolygonTool') {\n this.toolContext.tool = new PolygonTool();\n } else if (geometryToolType === 'BoxTool') {\n this.toolContext.tool = new BoxTool();\n }\n }\n }\n}\n","import { DirectGeometryObject, GeoJsonObject, Position } from 'geojson';\n\nexport type GeometryType =\n 'Point'\n | 'LineString'\n | 'Polygon'\n | 'Geometry'\n | 'MultiPoint'\n | 'MultiLineString'\n | 'MultiPolygon'\n | 'Geometry'\n | 'GeometryCollection';\n\nconst WKT_GEOMETRY_TYPES = new Set([\n 'POINT',\n 'LINESTRING',\n 'POLYGON',\n 'MULTIPOINT',\n 'MULTILINESTRING',\n 'MULTIPOLYGON',\n 'GEOMETRYCOLLECTION',\n ]);\n\nconst WKT_GEOMETRIES_TEXT = new Array(WKT_GEOMETRY_TYPES.values()).map(s => `\"${s}\"`).join(', ');\n\nfunction isAlpha(c: string) {\n return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\n\nfunction parseFloatWithError(textValue: string, errorText?: string) {\n const value = parseFloat(textValue);\n if (isNaN(value) && textValue.toLowerCase() !== 'nan') {\n throw new Error(errorText || 'Value must be a number.');\n }\n return value;\n}\n\nexport function validateGeometryValue(value: string, geometryType: GeometryType) {\n if (!value) {\n return;\n }\n value = value.trim();\n if (value === '') {\n return;\n }\n\n let isWKT = false;\n if (isAlpha(value)) {\n isWKT = true;\n // Quick and dirty WKT validation\n let i = 1;\n for (; i < value.length && isAlpha(value[i]); i++) {\n }\n\n const geometryName = value.substr(0, i).toUpperCase();\n value = value.substr(i);\n\n validateWKTGeometryType(geometryName, geometryType);\n validateWKTBody(value, geometryName);\n }\n\n let coordParts = value.split(/[\\s,()]+/);\n let i1;\n let i2;\n if (coordParts.length && coordParts[0] === '') {\n i1 = 1;\n }\n if (coordParts.length && coordParts[coordParts.length - 1] === '') {\n i2 = coordParts.length - 1;\n }\n\n if (i1 > 0 && i2 > 0) {\n coordParts = coordParts.slice(i1, i2);\n } else if (i1 > 0) {\n coordParts = coordParts.slice(i1);\n } else if (i2 > 0) {\n coordParts = coordParts.slice(0, i2);\n }\n if (coordParts.length % 2 !== 0) {\n throw new Error('Illegal number of coordinates.');\n }\n if (!isWKT) {\n if (geometryType === 'Point') {\n if (coordParts.length !== 2) {\n throw new Error('Point must have \"<Longitude>, <Latitude>\" syntax.');\n }\n } else if (geometryType === 'Polygon') {\n if (coordParts.length !== 4) {\n throw new Error('Bounding box must have \"<E>, <S>, <W>, <N>\" syntax.');\n }\n } else {\n throw new Error('Invalid WKT.');\n }\n }\n for (let i = 0; i < coordParts.length; i += 2) {\n const lon = parseFloatWithError(coordParts[i], 'Longitude value must be a number.');\n const lat = parseFloatWithError(coordParts[i + 1], 'Latitude value must be a number.');\n validateGeoCoordinate(lon, lat);\n }\n}\n\nfunction validateWKTGeometryType(value: string, geometryType: GeometryType) {\n const geometryTypeUC = geometryType.toUpperCase();\n\n if (geometryType === 'Geometry') {\n if (!WKT_GEOMETRY_TYPES.has(value)) {\n throw new Error(`${geometryType} WKT must start with one of ${WKT_GEOMETRIES_TEXT}.`)\n }\n } else {\n if (!value.startsWith(geometryTypeUC)) {\n throw new Error(`${geometryType} WKT must start with \"${geometryTypeUC}\".`)\n }\n }\n}\n\nfunction validateWKTBody(value: string, geometryType: string) {\n let expectedMinCommaCount;\n let expectedMinDepthCount;\n let expectedMaxDepthCount;\n if (geometryType === 'POINT') {\n expectedMinCommaCount = 0;\n expectedMinDepthCount = 1;\n expectedMaxDepthCount = 1;\n } else if (geometryType === 'LINESTRING') {\n expectedMinCommaCount = 1;\n expectedMinDepthCount = 1;\n expectedMaxDepthCount = 1;\n } else if (geometryType === 'POLYGON') {\n expectedMinCommaCount = 3;\n expectedMinDepthCount = 2;\n expectedMaxDepthCount = 2;\n } else if (geometryType === 'MULTIPOINT') {\n expectedMinCommaCount = 1;\n expectedMinDepthCount = 1;\n expectedMaxDepthCount = 2;\n } else if (geometryType === 'MULTILINESTRING') {\n expectedMinCommaCount = 1;\n expectedMinDepthCount = 2;\n expectedMaxDepthCount = 2;\n } else if (geometryType === 'MULTIPOLYGON') {\n expectedMinCommaCount = 3;\n expectedMinDepthCount = 3;\n expectedMaxDepthCount = 3;\n } else if (geometryType === 'GEOMETRYCOLLECTION') {\n expectedMinCommaCount = 0;\n expectedMinDepthCount = 1;\n expectedMaxDepthCount = 3;\n }\n let commaCount = 0;\n let depthCount = 0;\n let maxDepthCount = 0;\n for (let i = 0; i < value.length; i++) {\n let c = value[i];\n if (c === '(') {\n depthCount++;\n if (depthCount > expectedMaxDepthCount) {\n throw new Error('Invalid WKT, too many \"(\".');\n }\n maxDepthCount = Math.max(maxDepthCount, depthCount);\n } else if (c === ')') {\n depthCount--;\n if (depthCount < 0) {\n throw new Error('Invalid WKT, too many \")\".');\n }\n if (depthCount === 0) {\n if (commaCount < expectedMinCommaCount) {\n throw new Error('Invalid WKT, too few coordinates.');\n }\n commaCount = 0;\n }\n } else if (c === ',') {\n commaCount++;\n }\n }\n if (depthCount !== 0) {\n throw new Error('Invalid WKT, too many \"(\".');\n }\n if (maxDepthCount < expectedMinDepthCount) {\n throw new Error('Invalid WKT, too few \"(\".');\n }\n}\n\nexport function validateGeoCoordinate(lon: number, lat: number) {\n if (lon < -180 || lon > 180) {\n throw new Error('Longitude must be in the range -180 to +180 degrees.');\n }\n if (lat < -90 || lat > 90) {\n throw new Error('Latitude must be in the range -90 to +90 degrees.');\n }\n}\n\nexport function isBox(geometry: DirectGeometryObject) {\n if (geometry.type === 'Polygon' && geometry.coordinates.length === 1) {\n const positions = geometry.coordinates[0] as Position[];\n if (positions.length === 5) {\n const x0 = positions[0][0];\n const y0 = positions[0][1];\n const x1 = positions[1][0];\n const y1 = positions[1][1];\n const x2 = positions[2][0];\n const y2 = positions[2][1];\n const x3 = positions[3][0];\n const y3 = positions[3][1];\n const x4 = positions[4][0];\n const y4 = positions[4][1];\n const dx1 = x1 - x0;\n const dy1 = y1 - y0;\n const dx2 = x2 - x1;\n const dy2 = y2 - y1;\n const dx3 = x3 - x2;\n const dy3 = y3 - y2;\n const dx4 = x4 - x3;\n const dy4 = y4 - y3;\n return (dx1 === 0.0 && dy2 === 0 && dx3 === 0.0 && dy4 === 0)\n || (dy1 === 0 && dx2 === 0.0 && dy3 === 0 && dx4 === 0.0);\n }\n }\n return false;\n}\n\nexport function geometryGeoJsonToCsv(geometry: DirectGeometryObject, sep?: string) {\n sep = sep || ',';\n const header = `longitude${sep}latitude\\n`;\n if (geometry.type === 'Point') {\n const position = geometry.coordinates;\n return `${header}${position[0]}${sep}${position[1]}\\n`;\n } else if (geometry.type === 'LineString') {\n const coordinates = geometry.coordinates;\n let a = [];\n for (let position of coordinates) {\n a.push(`${position[0]}${sep}${position[1]}\\n`)\n }\n return `${header}${a.join('')}`;\n } else if (geometry.type === 'Polygon') {\n const coordinates = geometry.coordinates;\n let a = [];\n for (let ring of coordinates) {\n if (a.length > 0) {\n a.push(`# hole:\\n`)\n }\n for (let position of ring as any) {\n a.push(`${position[0]}${sep}${position[1]}\\n`)\n }\n }\n return `${header}${a.join('')}`;\n }\n return '';\n}\n\nexport function geometryGeoJsonToGeometryWkt(geometry: DirectGeometryObject): string {\n\n if (geometry.type === 'Point') {\n const position = geometry.coordinates;\n return `POINT (${position[0]} ${position[1]})`\n } else if (geometry.type === 'LineString') {\n const coordinates = geometry.coordinates;\n let a = [];\n for (let position of coordinates) {\n a.push(`${position[0]} ${position[1]}`)\n }\n return `LINESTRING (${a.join(', ')})`;\n } else if (geometry.type === 'Polygon') {\n const coordinates = geometry.coordinates;\n let a1 = [];\n for (let ring of coordinates) {\n let a2 = [];\n for (let position of ring as any) {\n a2.push(`${position[0]} ${position[1]}`)\n }\n a1.push(`(${a2.join(', ')})`)\n }\n return `POLYGON (${a1.join(', ')})`;\n }\n return '';\n}\n\n\nexport function geoJsonToText(geoJson: GeoJsonObject) {\n return JSON.stringify(geoJson, null, 2);\n}\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport {\n LayerState,\n OperationState,\n Placemark,\n PlacemarkCollection,\n ResourceState,\n SPLIT_MODE_OFF,\n State,\n VariableImageLayerState,\n WorkspaceState,\n WorldViewDataState,\n} from '../state';\nimport * as selectors from '../selectors';\nimport { EMPTY_ARRAY, EMPTY_OBJECT } from '../selectors';\nimport * as actions from '../actions';\nimport { NO_WEB_GL } from '../messages';\nimport {\n CanvasPosition,\n CesiumGlobe,\n GeographicPosition,\n ImageLayerDescriptor,\n LayerDescriptors\n} from '../components/cesium/CesiumGlobe';\nimport { findVariableIndexCoordinates, getWorkspaceId, PLACEMARK_ID_PREFIX } from '../state-util';\nimport { ViewState } from '../components/ViewState';\nimport { convertLayersToLayerDescriptors } from './globe-view-layers';\nimport * as Cesium from 'cesium';\nimport { GeometryToolType } from '../components/cesium/geometry-tool';\nimport { BaseMapOptions, entityToGeoJson, entityToGeometryWkt } from '../components/cesium/cesium-util';\nimport { featurePropertiesFromSimpleStyle, SimpleStyle } from '../../common/geojson-simple-style';\nimport { Menu, MenuDivider, MenuItem } from '@blueprintjs/core';\nimport { GEOMETRY_LIKE_TYPE, POINT_LIKE_TYPE, POLYGON_LIKE_TYPE } from '../../common/cate-types';\nimport { geometryGeoJsonToGeometryWkt } from '../../common/geometry-util';\n\ninterface IGlobeViewOwnProps {\n view: ViewState<WorldViewDataState>;\n}\n\ninterface IGlobeViewProps extends IGlobeViewOwnProps {\n baseUrl: string;\n operations: OperationState[] | null;\n workspace: WorkspaceState | null;\n offlineMode: boolean;\n placemarks: PlacemarkCollection;\n selectedLayer: LayerState | null;\n selectedLayerId: string | null;\n selectedPlacemarkId: string | null;\n baseMapOptions: BaseMapOptions | null,\n isDialogOpen: boolean;\n showLayerTextOverlay: boolean;\n debugWorldView: boolean;\n hasWebGL: boolean;\n externalObjectStore: any;\n newPlacemarkToolType: GeometryToolType;\n defaultPlacemarkStyle: SimpleStyle;\n}\n\nfunction mapStateToProps(state: State, ownProps: IGlobeViewOwnProps): IGlobeViewProps {\n return {\n view: ownProps.view,\n baseUrl: selectors.webAPIRestUrlSelector(state),\n operations: selectors.operationsSelector(state),\n workspace: selectors.workspaceSelector(state),\n offlineMode: selectors.offlineModeSelector(state),\n placemarks: selectors.placemarkCollectionSelector(state),\n selectedLayer: selectors.selectedLayerSelector(state),\n selectedLayerId: selectors.selectedLayerIdSelector(state),\n selectedPlacemarkId: selectors.selectedPlacemarkIdSelector(state),\n baseMapOptions: selectors.baseMapOptionsSelector(state),\n isDialogOpen: selectors.isDialogOpenSelector(state),\n showLayerTextOverlay: state.session.showLayerTextOverlay,\n debugWorldView: state.session.debugWorldView,\n hasWebGL: state.data.hasWebGL,\n externalObjectStore: selectors.externalObjectStoreSelector(state),\n newPlacemarkToolType: selectors.newPlacemarkToolTypeSelector(state),\n defaultPlacemarkStyle: selectors.defaultPlacemarkStyleSelector(state),\n };\n}\n\n/**\n * This component displays a 3D globe with a number of layers.\n */\nclass GlobeView extends React.Component<IGlobeViewProps & IGlobeViewOwnProps & DispatchProp<State>> {\n static readonly CESIUM_GLOBE_STYLE: CSSProperties = {\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n };\n static readonly POS_UPDATE_PERIOD: number = 500;\n\n intervalHandle: number | null;\n lastPosition: GeographicPosition | null;\n positionChanged: boolean;\n\n constructor(props: IGlobeViewProps & IGlobeViewOwnProps & DispatchProp<State>) {\n super(props);\n this.intervalHandle = null;\n this.lastPosition = null;\n this.positionChanged = false;\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleSelectedEntityChanged = this.handleSelectedEntityChanged.bind(this);\n this.handleNewEntityAdded = this.handleNewEntityAdded.bind(this);\n this.handleSplitLayerPosChange = this.handleSplitLayerPosChange.bind(this);\n this.handlePosDataUpdate = this.handlePosDataUpdate.bind(this);\n this.renderContextMenu = this.renderContextMenu.bind(this);\n }\n\n componentDidMount(): void {\n this.intervalHandle = window.setInterval(this.handlePosDataUpdate, GlobeView.POS_UPDATE_PERIOD);\n }\n\n componentWillUnmount(): void {\n window.clearInterval(this.intervalHandle);\n }\n\n handlePosDataUpdate() {\n if (this.positionChanged) {\n this.props.dispatch(actions.setGlobeViewPosition(this.lastPosition) as any);\n this.positionChanged = false;\n }\n }\n\n handleMouseMove(newPosition: GeographicPosition | undefined | null) {\n const lastPosition = this.lastPosition;\n if (newPosition !== lastPosition) {\n if (!newPosition || !lastPosition\n || newPosition.longitude !== lastPosition.longitude\n || newPosition.latitude !== lastPosition.latitude) {\n this.props.dispatch(actions.setGlobeMousePosition(newPosition));\n this.lastPosition = newPosition;\n this.positionChanged = true;\n }\n }\n }\n\n handleSelectedEntityChanged(selectedEntity: Cesium.Entity | null) {\n this.props.dispatch(actions.notifySelectedEntityChange(this.props.view.id, this.props.selectedLayer, selectedEntity) as any);\n }\n\n handleNewEntityAdded(newEntity: Cesium.Entity) {\n // Logic should actually go to actions.ts or reducers.ts, but newEntity:Cesium.Entity is not serializable.\n const properties = this.newPlacemarkProperties();\n const feature = entityToGeoJson(newEntity, `${PLACEMARK_ID_PREFIX}${newEntity.id}`, properties);\n this.props.dispatch(actions.addPlacemark(feature as Placemark));\n }\n\n handleSplitLayerPosChange(layerSplitPosition: number) {\n this.props.dispatch(actions.setLayerSplitPosition(this.props.view.id, layerSplitPosition));\n }\n\n renderContextMenu(geoPos: GeographicPosition, canvasPos: CanvasPosition, entity?: Cesium.Entity) {\n\n if (!geoPos && !entity) {\n return null;\n }\n\n const entityId = entity && entity.id;\n let placemark;\n if (entityId && entityId.startsWith(PLACEMARK_ID_PREFIX) && this.props.placemarks) {\n placemark = this.props.placemarks.features.find(p => p.id === entityId);\n }\n\n let wkt;\n if (placemark) {\n wkt = geometryGeoJsonToGeometryWkt(placemark.geometry);\n } else if (entity) {\n wkt = entityToGeometryWkt(entity);\n } else if (geoPos) {\n wkt = `POINT (${geoPos.longitude} ${geoPos.latitude})`;\n }\n\n let key = 0;\n\n const menuItems = [];\n if (geoPos) {\n const properties = this.newPlacemarkProperties();\n const action = actions.addPointPlacemark(geoPos.longitude, geoPos.latitude, properties);\n menuItems.push(<MenuItem key={key}\n icon=\"map-marker\"\n text=\"Place point marker here\"\n onClick={() => this.props.dispatch(action)}/>);\n key++;\n }\n\n if (wkt) {\n menuItems.push(<MenuItem key={key} icon=\"clipboard\" text=\"Copy geometry WKT\"\n onClick={() => actions.copyTextToClipboard(wkt)}/>);\n key++;\n }\n\n const operations = this.props.operations;\n if (entity && operations) {\n\n let expectedInputType;\n if (wkt.startsWith('POINT ')) {\n expectedInputType = POINT_LIKE_TYPE;\n } else if (wkt.startsWith('POLYGON ')) {\n expectedInputType = POLYGON_LIKE_TYPE;\n }\n\n if (expectedInputType) {\n let dividerAdded = false;\n for (let operation of operations) {\n let geometryInput;\n for (let input of operation.inputs) {\n const dataType = input.dataType;\n if (dataType === expectedInputType || dataType === GEOMETRY_LIKE_TYPE) {\n geometryInput = input;\n break;\n }\n }\n if (geometryInput) {\n if (!dividerAdded) {\n menuItems.push(<MenuDivider key={key}/>);\n dividerAdded = true;\n key++;\n }\n const inputAssignments = {\n [geometryInput.name]: {\n isValueUsed: true,\n constantValue: wkt,\n resourceName: null\n }\n };\n const action = actions.invokeCtxOperation(operation, inputAssignments);\n const text = `${operation.name}()`;\n menuItems.push(<MenuItem key={key}\n icon=\"function\" text={text}\n onClick={() => this.props.dispatch(action as any)}/>);\n key++;\n }\n }\n }\n }\n\n return (<Menu>{menuItems}</Menu>);\n }\n\n private newPlacemarkProperties() {\n return {visible: true, ...featurePropertiesFromSimpleStyle(this.props.defaultPlacemarkStyle)};\n }\n\n render() {\n if (!this.props.hasWebGL) {\n return NO_WEB_GL;\n }\n\n const view = this.props.view;\n const viewId = this.props.view.id;\n const layers = view.data.layers;\n const placemarks = this.props.placemarks;\n const showLayerTextOverlay = this.props.showLayerTextOverlay;\n const workspace = this.props.workspace;\n const resources = (workspace && workspace.resources) || EMPTY_ARRAY;\n\n // TODO (nf): Note that following local vars descriptors, splitLayerIndex, overlayHtml...\n // ...could be provided by selectors but there is a dependency on this.props.view which is\n // an own component property.\n // May be solved by\n // - https://github.com/reactjs/reselect/blob/master/README.md#accessing-react-props-in-selectors\n // - https://github.com/reactjs/reselect/blob/master/README.md#q-how-do-i-create-a-selector-that-takes-an-argument\n //\n let descriptors;\n let selectedPlacemarkId = null;\n if (workspace) {\n const baseUrl = this.props.baseUrl;\n const workspaceId = getWorkspaceId(workspace);\n descriptors = convertLayersToLayerDescriptors(layers, resources, placemarks, baseUrl, workspaceId);\n selectedPlacemarkId = this.props.selectedPlacemarkId;\n } else {\n descriptors = EMPTY_OBJECT as LayerDescriptors;\n }\n const imageLayerDescriptors = descriptors.imageLayerDescriptors || EMPTY_ARRAY;\n const vectorLayerDescriptors = descriptors.vectorLayerDescriptors || EMPTY_ARRAY;\n let splitLayerPosition;\n if (hasSplitLayer(imageLayerDescriptors)) {\n splitLayerPosition = view.data.layerSplitPosition;\n }\n const overlayHtml = getOverlayHtml(layers, showLayerTextOverlay, viewId, resources);\n\n return (\n <CesiumGlobe id={'CesiumGlobe-' + view.id}\n debug={this.props.debugWorldView}\n externalObjectStore={this.props.externalObjectStore}\n selectedPlacemarkId={selectedPlacemarkId}\n baseMapOptions={this.props.baseMapOptions}\n imageLayerDescriptors={imageLayerDescriptors}\n vectorLayerDescriptors={vectorLayerDescriptors}\n splitLayerPosition={splitLayerPosition}\n overlayHtml={overlayHtml}\n onLayerSplitPosChange={this.handleSplitLayerPosChange}\n offlineMode={this.props.offlineMode}\n style={GlobeView.CESIUM_GLOBE_STYLE}\n onMouseMove={this.props.isDialogOpen ? null : this.handleMouseMove}\n onSelectedEntityChanged={this.handleSelectedEntityChanged}\n onNewEntityAdded={this.handleNewEntityAdded}\n geometryToolType={this.props.newPlacemarkToolType}\n renderContextMenu={this.renderContextMenu}\n />\n );\n }\n}\n\nexport default connect(mapStateToProps)(GlobeView);\n\nfunction getOverlayHtml(layers: LayerState[],\n showLayerTextOverlay: boolean,\n viewId,\n resources: ResourceState[]): HTMLDivElement {\n let overlayHtml: HTMLDivElement = null;\n if (!showLayerTextOverlay) {\n return overlayHtml;\n }\n // let layerInfoCount = 0;\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n let layer = layers[layerIndex] as any as VariableImageLayerState;\n if (layer.type === 'VariableImage') {\n if (layer.visible) {\n const indexCoords = findVariableIndexCoordinates(resources, layer);\n if (!overlayHtml) {\n overlayHtml = document.createElement('div');\n overlayHtml.id = 'CesiumGlobeOverlay-' + viewId;\n overlayHtml.style.position = 'absolute';\n overlayHtml.style['z-index'] = 10;\n overlayHtml.style['pointer-events'] = 'none';\n overlayHtml.style['padding'] = '1em';\n overlayHtml.style['background-color'] = 'rgba(0, 0, 0, 0.25)';\n }\n let varText;\n if (indexCoords && indexCoords.length) {\n varText = layer.name + ' at ' + indexCoords.map(e => e.join(' = ')).join(', ');\n } else {\n varText = layer.name;\n }\n const textDivElement = document.createElement('div');\n textDivElement.style['font-size'] = '1.4em';\n textDivElement.innerText = varText;\n overlayHtml.appendChild(textDivElement);\n overlayHtml.style.top = '0';\n overlayHtml.style.width = '100%';\n // layerInfoCount++;\n }\n }\n }\n return overlayHtml;\n}\n\nfunction hasSplitLayer(layerDescriptors: ImageLayerDescriptor[]) {\n for (let ld of layerDescriptors) {\n const splitMode = ld.splitMode || SPLIT_MODE_OFF;\n if (splitMode !== SPLIT_MODE_OFF) {\n return true;\n }\n }\n return false;\n}\n\n\n","const _DEBUG_WEB_SOCKET_RPC = false;\n\nexport type MplFigureMessageCallback = (message: string) => any;\nexport type MplFigureCommandData = { name: string };\nexport type MplFigureCommandListener = (figureId: number, commandData: MplFigureCommandData) => void;\n\n/**\n * A source for figure commands.\n */\nexport interface MplFigureCommandSource {\n addCommandListener(figureId: number, listener: MplFigureCommandListener): void;\n\n removeCommandListener(figureId: number, listener: MplFigureCommandListener): void;\n\n removeCommandListeners(figureId: number): void;\n}\n\n/**\n * Default impl. of MplFigureCommandSource interface\n */\nexport class MplFigureCommandSourceImpl implements MplFigureCommandSource {\n private listenersMap: { [id: number]: Set<MplFigureCommandListener> };\n\n constructor() {\n this.listenersMap = {};\n this.dispatchCommand = this.dispatchCommand.bind(this);\n }\n\n addCommandListener(figureId: number, listener: MplFigureCommandListener): void {\n let listeners = this.listenersMap[figureId];\n if (!listeners) {\n listeners = new Set<MplFigureCommandListener>();\n this.listenersMap[figureId] = listeners;\n }\n listeners.add(listener);\n // console.log('MplFigureCommandSourceImpl.addCommandListener', figureId, listener);\n }\n\n removeCommandListener(figureId: number, listener: MplFigureCommandListener): void {\n // console.log('MplFigureCommandSourceImpl.removeCommandListener', figureId, listener);\n const listeners = this.listenersMap[figureId];\n if (listeners) {\n listeners.delete(listener);\n if (listeners.size === 0) {\n delete this.listenersMap[figureId];\n }\n }\n }\n\n removeCommandListeners(figureId: number): void {\n // console.log('MplFigureCommandSourceImpl.removeCommandListeners', figureId);\n delete this.listenersMap[figureId];\n }\n\n dispatchCommand(figureId: number, commandData: MplFigureCommandData) {\n const listeners = this.listenersMap[figureId];\n if (listeners) {\n listeners.forEach((listener: MplFigureCommandListener) => {\n listener(figureId, commandData);\n });\n }\n }\n}\n\n/**\n * Represents a figure in matplotlib's web backend.\n * This class is a port of \"mpl.js\" from matplotlib's web_agg.\n *\n * @author Norman Fomferra\n */\nexport class MplFigure {\n\n readonly id: number;\n private webSocket: WebSocket;\n private commandSource?: MplFigureCommandSource;\n private onMessage?: MplFigureMessageCallback;\n private parentElement: HTMLDivElement;\n private figureImageCanvas: HTMLCanvasElement;\n private rubberBandCanvas: HTMLCanvasElement;\n private imageObj: any;\n private imageMode: string;\n private waiting: boolean;\n private lastKey: number | null;\n private resizeTimer: number | null;\n private lastSize: { width: number; height: number };\n\n constructor(figureId: number,\n webSocketUrl: string,\n parentElement: HTMLDivElement,\n commandSource?: MplFigureCommandSource,\n onMessage?: MplFigureMessageCallback) {\n\n this.id = figureId;\n this.parentElement = parentElement;\n this.commandSource = commandSource;\n this.onMessage = onMessage;\n this.imageMode = 'full';\n this.imageObj = new Image();\n this.lastSize = {width: 0, height: 0};\n\n this.handleCommand = this.handleCommand.bind(this);\n this.processMessage = this.processMessage.bind(this);\n\n this.initCanvas();\n\n this.waiting = false;\n\n this.imageObj.onload = () => {\n const canvasContext = this.figureImageCanvas.getContext('2d');\n if (this.imageMode === 'full') {\n // Full resources could contain transparency (where diff resources\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n canvasContext.clearRect(0, 0, this.figureImageCanvas.width, this.figureImageCanvas.height);\n }\n canvasContext.drawImage(this.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n this.webSocket.removeEventListener('message', this.processMessage);\n };\n\n this.webSocket = new WebSocket(webSocketUrl);\n this.webSocket.onopen = () => {\n if (this.commandSource) {\n this.commandSource.addCommandListener(this.id, this.handleCommand);\n }\n\n this.webSocket.addEventListener('message', this.processMessage);\n const supportsBinary = !!this.webSocket.binaryType;\n if (!supportsBinary) {\n console.warn('This browser does not support binary websocket messages. ' +\n 'Figure update performance may be slow.');\n }\n this.sendMessage('supports_binary', {value: supportsBinary});\n this.sendMessage('send_image_mode');\n this.sendRefresh();\n this.sendResize();\n\n this.resizeTimer = window.setInterval(() => {\n const width = this.parentElement.clientWidth;\n const height = this.parentElement.clientHeight;\n const validSize = width > 0 && height > 0;\n const sizeChange = this.lastSize.width !== width || this.lastSize.height !== height;\n if (validSize && sizeChange) {\n this.lastSize = {width, height};\n this.sendResize(width, height);\n }\n }, 500);\n };\n\n this.webSocket.onclose = () => {\n if (this.commandSource) {\n this.commandSource.removeCommandListener(this.id, this.handleCommand);\n }\n if (this.resizeTimer) {\n window.clearInterval(this.resizeTimer);\n }\n };\n }\n\n /**\n * Calls a command on this figure.\n *\n * @param figureId An object that must have a property \"name\" of type string.\n * @param commandData An object that must have a property \"name\" of type string.\n */\n private handleCommand(figureId: number, commandData: MplFigureCommandData): void {\n if (figureId === this.id) {\n this.sendMessage('toolbar_button', commandData);\n } else {\n console.warn(`received invalid figure ID: expected #${this.id}, got #${figureId} for data ${commandData}`);\n }\n }\n\n private initCanvas() {\n const handleKeyboardEvent = this.handleKeyboardEvent.bind(this);\n this.parentElement.onkeydown = wrapEvent('key_press', handleKeyboardEvent);\n this.parentElement.onkeyup = wrapEvent('key_release', handleKeyboardEvent);\n this.parentElement.onwheel = (event: WheelEvent) => {\n const name = 'scroll';\n const step = (event.deltaY < 0) ? 1 : -1;\n this.handleMouseEvent(event, {name, step});\n };\n\n const figureImageCanvas = document.createElement('canvas');\n figureImageCanvas.id = 'mpl-figure-image-' + this.id;\n figureImageCanvas.setAttribute('style', 'left: 0; top: 0; z-index: 0; outline: 0');\n this.figureImageCanvas = figureImageCanvas;\n\n const rubberBandCanvas = document.createElement('canvas');\n rubberBandCanvas.id = 'mpl-rubber-band-' + this.id;\n rubberBandCanvas.setAttribute('style', 'position: absolute; left: 0; top: 0; z-index: 1;');\n const handleMouseEvent = this.handleMouseEvent.bind(this);\n rubberBandCanvas.onmousedown = wrapEvent('button_press', handleMouseEvent);\n rubberBandCanvas.onmouseup = wrapEvent('button_release', handleMouseEvent);\n rubberBandCanvas.onmousemove = wrapEvent('motion_notify', handleMouseEvent);\n rubberBandCanvas.onmouseenter = wrapEvent('figure_enter', handleMouseEvent);\n rubberBandCanvas.onmouseleave = wrapEvent('figure_leave', handleMouseEvent);\n const rubberBandContext = rubberBandCanvas.getContext('2d');\n rubberBandContext.strokeStyle = '#000000';\n this.rubberBandCanvas = rubberBandCanvas;\n\n this.parentElement.appendChild(figureImageCanvas);\n this.parentElement.appendChild(rubberBandCanvas);\n }\n\n private resizeCanvas(width, height) {\n // Keep the size of the figure image canvas and rubber band canvas in sync.\n this.figureImageCanvas.setAttribute('width', width);\n this.figureImageCanvas.setAttribute('height', height);\n this.rubberBandCanvas.setAttribute('width', width);\n this.rubberBandCanvas.setAttribute('height', height);\n };\n\n ///////////////////////////////////////////////////////////////////////////////\n // Outgoing messages\n\n sendResize(width?: number, height?: number) {\n width = width || this.parentElement.clientWidth;\n height = height || this.parentElement.clientHeight;\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.sendMessage('resize', {width, height});\n }\n\n sendDrawMessage() {\n if (!this.waiting) {\n this.waiting = true;\n this.sendMessage('draw');\n }\n }\n\n sendRefresh() {\n this.sendMessage('refresh');\n }\n\n sendCanvasUpdated() {\n // Called whenever the canvas gets updated.\n this.sendMessage('ack');\n }\n\n sendMessage(type: string, properties?: any) {\n const jsonText = JSON.stringify({...properties, type, figure_id: this.id});\n if (_DEBUG_WEB_SOCKET_RPC) {\n console.log(`MplFigure.sendMessage: ${jsonText}`);\n }\n this.webSocket.send(jsonText);\n }\n\n // Outgoing messages\n ///////////////////////////////////////////////////////////////////////////////\n\n /**\n * Process incoming WebSocket messages.\n *\n * @param evt The WebSocket message event\n */\n private processMessage(evt: MessageEvent) {\n // console.log(`MplFigure.processMessage: ${evt.data}`);\n if (evt.data instanceof Blob) {\n const blobData = evt.data as any;\n\n /* Free the memory for the previous frames */\n if (this.imageObj.src) {\n (window.URL || window['webkitURL']).revokeObjectURL(this.imageObj.src);\n }\n\n this.imageObj.src = (window.URL || window['webkitURL']).createObjectURL(blobData);\n this.sendCanvasUpdated();\n this.waiting = false;\n return;\n } else if (typeof evt.data === 'string' && evt.data.slice(0, 21) === 'data:image/png;base64') {\n this.imageObj.src = evt.data;\n this.sendCanvasUpdated();\n this.waiting = false;\n return;\n }\n\n const jsonText = evt.data;\n const msg = JSON.parse(jsonText);\n const msgType = msg['type'];\n\n // Call the \"handle_${msgType}\" callback, which takes\n // the JSON message as its only argument.\n try {\n const callback = this['handle_' + msgType];\n if (callback) {\n try {\n // console.log(`Calling: handle_${msg_type}(${jsonText})`);\n callback.bind(this)(msg);\n } catch (e) {\n console.error('Exception inside the \\'handler_' + msgType + '\\' callback:', e, e.stack, msg);\n }\n }\n } catch (e) {\n console.error('No handler for the \\'' + msgType + '\\' message type: ', msg);\n }\n }\n\n ///////////////////////////////////////////////////////////////////////////////\n // Handlers for incoming messages\n\n //noinspection JSUnusedLocalSymbols\n private handle_resize(msg) {\n const size = msg['size'];\n if (size[0] !== this.figureImageCanvas.width || size[1] !== this.figureImageCanvas.height) {\n this.resizeCanvas(size[0], size[1]);\n this.sendRefresh();\n }\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_rubberband(msg) {\n let x0 = msg['x0'];\n let y0 = this.figureImageCanvas.height - msg['y0'];\n let x1 = msg['x1'];\n let y1 = this.figureImageCanvas.height - msg['y1'];\n x0 = Math.floor(x0) + 0.5;\n //noinspection JSSuspiciousNameCombination\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n //noinspection JSSuspiciousNameCombination\n y1 = Math.floor(y1) + 0.5;\n const xMin = Math.min(x0, x1);\n const yMin = Math.min(y0, y1);\n const width = Math.abs(x1 - x0);\n const height = Math.abs(y1 - y0);\n\n const rubberBandCanvasContext = this.rubberBandCanvas.getContext('2d');\n rubberBandCanvasContext.clearRect(0, 0, this.figureImageCanvas.width, this.figureImageCanvas.height);\n rubberBandCanvasContext.strokeRect(xMin, yMin, width, height);\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_figure_label(msg) {\n // console.warn(`MplFigure.handle_figure_label() - unhandled, figure #${this.id}`, msg);\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_message(msg) {\n if (this.onMessage) {\n this.onMessage(msg['message']);\n }\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_cursor(msg) {\n const cursor = msg['cursor'];\n this.rubberBandCanvas.style.cursor = {0: 'pointer', 1: 'default', 2: 'crosshair', 3: 'move'}[cursor];\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_draw() {\n // Request the server to send over a new figure.\n this.sendDrawMessage();\n }\n\n //noinspection JSUnusedLocalSymbols\n private handle_image_mode(msg) {\n this.imageMode = msg['mode'];\n }\n\n // Handlers for incoming messages\n ///////////////////////////////////////////////////////////////////////////////\n\n private handleMouseEvent(event: MouseEvent, extraData) {\n const name = extraData.name;\n const step = extraData.step;\n const canvas_pos = findpos(event);\n\n if (name === 'button_press') {\n this.figureImageCanvas.focus();\n this.parentElement.focus();\n }\n\n const x = canvas_pos.x;\n const y = canvas_pos.y;\n\n this.sendMessage(name, {\n x, y,\n button: event.button,\n step,\n guiEvent: simpleKeys(event)\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n }\n\n private handleKeyboardEvent(event: KeyboardEvent, extraData) {\n const name = extraData.name;\n\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.which === this.lastKey)\n return;\n else\n this.lastKey = event.which;\n }\n if (name === 'key_release')\n this.lastKey = null;\n\n let value = '';\n if (event.ctrlKey && event.which !== 17)\n value += 'ctrl+';\n if (event.altKey && event.which !== 18)\n value += 'alt+';\n if (event.shiftKey && event.which !== 16)\n value += 'shift+';\n\n value += 'k';\n value += event.which.toString();\n\n this.sendMessage(name, {\n key: value,\n guiEvent: simpleKeys(event)\n });\n }\n}\n\n\nfunction wrapEvent<E extends Event>(name: string, callback: (event: E, userData: any) => void): (event: E) => void {\n return (event: E) => {\n callback(event, {name});\n };\n}\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nfunction findpos(e: MouseEvent) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n let targ;\n if (e.target)\n targ = e.target;\n else if (e.srcElement)\n targ = e.srcElement;\n if (targ.nodeType === 3) // defeat Safari bug\n targ = targ.parentNode;\n\n const bodyRect = document.body.getBoundingClientRect();\n const elemRect = targ.getBoundingClientRect();\n const offsetX = elemRect.left - bodyRect.left;\n const offsetY = elemRect.top - bodyRect.top;\n\n const x = e.pageX - offsetX;\n const y = e.pageY - offsetY;\n\n return {'x': x, 'y': y};\n}\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object')\n obj[key] = original[key];\n return obj;\n }, {});\n}\n","import { ExternalObjectComponent, IExternalObjectComponentProps } from '../ExternalObjectComponent'\nimport { MplFigure, MplFigureCommandSource, MplFigureMessageCallback } from './MplFigure';\n\n\nexport interface FigureState {\n figureUpdateCount: number;\n}\n\ninterface IFigureContainerProps extends IExternalObjectComponentProps<MplFigure, FigureState>, FigureState {\n figureId: number;\n figureUpdateCount: number;\n figureHeight?: any;\n webSocketUrl: string;\n commandSource?: MplFigureCommandSource;\n onMessage?: MplFigureMessageCallback;\n}\n\n/**\n * A component that wraps a div that holds a matplotlib figure.\n *\n * @author Norman Fomferra\n */\nexport class MplFigureContainer extends ExternalObjectComponent<MplFigure, FigureState, IFigureContainerProps, null> {\n\n propsToExternalObjectState(props: IFigureContainerProps & FigureState, prevState?: FigureState): FigureState {\n return {figureUpdateCount: props.figureUpdateCount};\n }\n\n newContainer(id: string): HTMLDivElement {\n const figureDiv = document.createElement('div');\n figureDiv.setAttribute('id', 'mpl-figure-container-' + id);\n figureDiv.setAttribute('style', 'width: 100%; position: relative;');\n if (this.props.figureHeight) {\n figureDiv.style.height = this.props.figureHeight;\n }\n if (this.props.debug) {\n console.log('MplFigureContainer.newContainer:', figureDiv);\n }\n return figureDiv;\n }\n\n newExternalObject(parentContainer: HTMLElement, figureDiv: HTMLDivElement): MplFigure {\n return new MplFigure(this.props.figureId,\n this.props.webSocketUrl,\n figureDiv,\n this.props.commandSource,\n this.props.onMessage);\n }\n\n updateExternalObject(figure: MplFigure,\n prevState: FigureState,\n nextState: FigureState,\n parentContainer: HTMLElement,\n container: HTMLElement): void {\n if (this.props.debug) {\n console.log('MplFigureContainer.updateExternalObject: ', figure, prevState, nextState);\n }\n if (prevState && prevState.figureUpdateCount !== nextState.figureUpdateCount) {\n figure.sendRefresh();\n figure.sendResize();\n }\n }\n}\n","import * as React from 'react';\r\nimport {CSSProperties} from 'react';\r\nimport {AnchorButton, IconName, Intent, PopoverPosition, Tooltip} from '@blueprintjs/core';\r\n\r\nexport interface IToolButtonProps {\r\n onClick?: () => void;\r\n className?: string;\r\n disabled?: boolean;\r\n icon?: IconName;\r\n intent?: Intent;\r\n tooltipContent?: JSX.Element | string;\r\n tooltipPosition?: PopoverPosition;\r\n style?: CSSProperties;\r\n text?: string;\r\n active?: boolean;\r\n large?: boolean;\r\n}\r\n\r\nexport function ToolButton(props: IToolButtonProps) {\r\n let className;\r\n if (!props.large) {\r\n className = 'bp3-small';\r\n }\r\n if (props.className && props.className !== '') {\r\n className = `${className} ${props.className}`;\r\n }\r\n const button = (\r\n <AnchorButton\r\n className={className}\r\n onClick={props.onClick}\r\n disabled={props.disabled}\r\n icon={props.icon}\r\n intent={props.intent}\r\n style={props.style}\r\n text={props.text}\r\n active={props.active}\r\n />\r\n );\r\n if (props.tooltipContent) {\r\n return (\r\n <Tooltip\r\n content={props.tooltipContent}\r\n position={props.tooltipPosition || PopoverPosition.AUTO}\r\n >\r\n {button}\r\n </Tooltip>\r\n );\r\n } else {\r\n return button;\r\n }\r\n}\r\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { MplFigureCommandListener, MplFigureCommandSourceImpl } from './MplFigure';\nimport { MplFigureContainer } from './MplFigureContainer';\nimport { ButtonGroup, Tag } from '@blueprintjs/core';\nimport { ToolButton } from '../ToolButton';\n\n\ninterface IFigurePanelProps {\n id: string;\n figureId: number;\n figureUpdateCount: number;\n figureName: string;\n figureHeight?: any;\n webSocketUrl: string;\n onDownload: MplFigureCommandListener;\n}\n\ninterface IFigurePanelState {\n message?: string;\n}\n\nconst FIGURE_COMMAND_SOURCE = new MplFigureCommandSourceImpl();\n\n\n/**\n * A component that wraps a div that holds a matplotlib figure.\n *\n * @author Norman Fomferra\n */\nexport class MplFigurePanel extends React.Component<IFigurePanelProps, IFigurePanelState> {\n static readonly DIV_STYLE: CSSProperties = {width: '100%', overflow: 'auto'};\n static readonly CONTAINER_DIV_STYLE: CSSProperties = {\n width: '100%',\n overflow: 'hidden',\n padding: '0.2em 0.2em 0 0.2em'\n };\n\n constructor(props: IFigurePanelProps) {\n super(props);\n this.state = {};\n this.handleFigureMessage = this.handleFigureMessage.bind(this);\n }\n\n // TODO (forman): inform MplFigurePanel if view is closed!\n static handleClose(figureId: number) {\n FIGURE_COMMAND_SOURCE.removeCommandListeners(figureId);\n }\n\n handleFigureMessage(message: string) {\n this.setState({message});\n }\n\n render() {\n return (\n <div style={MplFigurePanel.DIV_STYLE}>\n <MplFigureContainer figureId={this.props.figureId}\n figureUpdateCount={this.props.figureUpdateCount}\n figureHeight={this.props.figureHeight || '30em'}\n id={this.props.id}\n debug={false}\n webSocketUrl={this.props.webSocketUrl}\n style={MplFigurePanel.CONTAINER_DIV_STYLE}\n commandSource={FIGURE_COMMAND_SOURCE}\n onMessage={this.handleFigureMessage}/>\n <MplFigureToolbar figureId={this.props.figureId}\n message={this.state.message}\n onCommand={FIGURE_COMMAND_SOURCE.dispatchCommand}\n onDownload={this.props.onDownload}/>\n </div>\n );\n }\n}\n\ninterface IMplFigureToolbarProps {\n figureId: number;\n message: string;\n onCommand: MplFigureCommandListener;\n onDownload: MplFigureCommandListener;\n}\n\nclass MplFigureToolbar extends React.PureComponent<IMplFigureToolbarProps, null> {\n\n static readonly DIV_STYLE: CSSProperties = {display: 'flex', alignItems: 'center', padding: '0.2em'};\n\n commands: any[];\n\n constructor(props: IMplFigureToolbarProps) {\n super(props);\n\n this.commands = [\n {\n label: 'Home',\n tooltip: 'Reset original view',\n icon: 'home',\n name: 'home',\n },\n {\n label: 'Back',\n tooltip: 'Back to previous view',\n icon: 'chevron-left',\n name: 'back',\n },\n {\n label: 'Forward',\n tooltip: 'Forward to next view',\n icon: 'chevron-right',\n name: 'forward',\n },\n {\n label: 'Pan',\n tooltip: 'Pan axes with left mouse, zoom with right',\n icon: 'move',\n name: 'pan',\n },\n {\n label: 'Zoom',\n tooltip: 'Zoom to rectangle',\n icon: 'zoom-in',\n name: 'zoom',\n },\n {\n label: 'Save As',\n tooltip: 'Save as image',\n icon: 'download',\n name: 'download',\n }\n ];\n\n for (let command of this.commands) {\n const name = command['name'];\n let callback;\n if (name === 'download') {\n callback = () => {\n // console.log(`MplFigureToolbar: \"${name}\" clicked for figure #${this.props.figureId}!`);\n this.props.onDownload(this.props.figureId, {name});\n };\n } else {\n callback = () => {\n // console.log(`MplFigureToolbar: \"${name}\" clicked for figure #${this.props.figureId}!`);\n this.props.onCommand(this.props.figureId, {name});\n };\n }\n command['callback'] = callback;\n }\n }\n\n render() {\n const buttons = [];\n for (let i in this.commands) {\n const command = this.commands[i];\n const name = command['name'];\n if (name) {\n const tooltipText = command['tooltip'];\n const icon = command['icon'];\n const onClick = command['callback'];\n buttons.push(\n <ToolButton key={i}\n tooltipContent={tooltipText}\n icon={icon}\n onClick={onClick}/>\n );\n }\n }\n\n let messageTag;\n if (this.props.message) {\n messageTag = (<Tag className=\"bp3-minimal\">{this.props.message}</Tag>);\n }\n\n return (\n <div style={MplFigureToolbar.DIV_STYLE}>\n {messageTag}\n <span style={{flex: 'auto'}}/>\n <ButtonGroup>{buttons}</ButtonGroup>\n </div>\n );\n }\n}\n\n","import * as React from 'react';\nimport { FigureViewDataState, ResourceState, State } from '../state';\nimport { connect, DispatchProp } from 'react-redux';\nimport { ViewState } from '../components/ViewState';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { MplFigurePanel } from '../components/matplotlib/MplFigurePanel';\nimport { getMPLDownloadUrl, getMPLWebSocketUrl } from '../state-util';\nimport { Card } from '@blueprintjs/core';\n\n\ninterface IFigureViewOwnProps {\n view: ViewState<FigureViewDataState>;\n}\n\ninterface IFigureViewProps extends IFigureViewOwnProps {\n baseUrl: string;\n workspaceId: string | null;\n figureResources: ResourceState[];\n mplWebSocketUrl: string;\n}\n\nfunction mapStateToProps(state: State, ownProps: IFigureViewOwnProps): IFigureViewProps {\n return {\n view: ownProps.view,\n baseUrl: selectors.webAPIRestUrlSelector(state),\n workspaceId: selectors.workspaceIdSelector(state),\n figureResources: selectors.figureResourcesSelector(state),\n mplWebSocketUrl: selectors.mplWebSocketUrlSelector(state),\n };\n}\n\n/**\n * This component displays a 2D map with a number of layers.\n */\nclass FigureView extends React.Component<IFigureViewProps & DispatchProp<State>, null> {\n static readonly DIV_STYLE = {width: '100%', height: '100%', overflowX: 'hidden', overflowY: 'auto'};\n\n constructor(props: IFigureViewProps & DispatchProp<State>) {\n super(props);\n this.onDownload = this.onDownload.bind(this);\n }\n\n onDownload(figureId: number) {\n const imageBaseUrl = getMPLDownloadUrl(this.props.baseUrl, this.props.workspaceId, figureId);\n this.props.dispatch(actions.saveFigureImageAs(imageBaseUrl, figureId) as any);\n }\n\n render() {\n const view = this.props.view;\n const workspaceId = this.props.workspaceId;\n const figureResource = this.getFigureResource();\n if (workspaceId === null || !figureResource) {\n return (<Card>Figure not found.</Card>);\n }\n const compId = `MplFigurePanel-${figureResource.id}-${view.id}`;\n return (\n <MplFigurePanel\n key={compId}\n id={compId}\n figureId={figureResource.id}\n figureUpdateCount={figureResource.updateCount}\n figureName={figureResource.name}\n webSocketUrl={getMPLWebSocketUrl(\n this.props.mplWebSocketUrl,\n workspaceId,\n figureResource.id\n )}\n onDownload={this.onDownload}\n />\n );\n }\n\n getFigureResource(): ResourceState | null {\n const figureViewData = this.props.view.data;\n return this.props.figureResources.find(r => r.id === figureViewData.resourceId);\n }\n}\n\nexport default connect(mapStateToProps)(FigureView);\n\n\n","import * as React from 'react';\nimport { State, WebAPIServiceInfo } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as selectors from '../selectors';\nimport { ServiceInfoAPI } from '../webapi/apis/ServiceInfoAPI';\n\n// Duration in seconds the ServiceAutoCloseDialog is\n// shown before server auto-shutdown.\n//\nconst DIALOG_DURATION_MIN = (process.env.NODE_ENV === 'development' ? 1 : 15) * 60;\n\ninterface IServiceAutoShutdownDialogProps {\n webAPIServiceInfo: WebAPIServiceInfo | null;\n webAPIServiceURL: string;\n}\n\nfunction mapStateToProps(state: State): IServiceAutoShutdownDialogProps {\n return {\n webAPIServiceInfo: selectors.webAPIServiceInfoSelector(state),\n webAPIServiceURL: selectors.webAPIServiceURLSelector(state),\n };\n}\n\nconst ServiceAutoShutdownDialog: React.FC<IServiceAutoShutdownDialogProps & DispatchProp<State>> = (\n {\n webAPIServiceInfo,\n webAPIServiceURL,\n }\n) => {\n if (!webAPIServiceInfo) {\n return null;\n }\n\n const autoStopInfo = webAPIServiceInfo.autoStopInfo;\n if (!autoStopInfo) {\n return null;\n }\n\n const {availableTime, remainingTime, inactivityTime} = autoStopInfo;\n if (!availableTime || !remainingTime || !inactivityTime) {\n return null;\n }\n\n const remainingTimeMin = 1; // = dialog disappears 1s before shutdown\n const remainingTimeMax = Math.max(DIALOG_DURATION_MIN, 0.75 * availableTime);\n const shouldShow = remainingTime > remainingTimeMin\n && remainingTime < remainingTimeMax;\n if (!shouldShow) {\n return null;\n }\n\n const canConfirm = () => {\n return true;\n }\n\n const handleClose = () => {\n // Make any harmless REST call so the\n // server's inactivity timer is reset:\n try {\n // noinspection JSIgnoredPromiseFromCall\n new ServiceInfoAPI().getServiceInfo(webAPIServiceURL);\n } catch (error) {\n console.error(error);\n }\n }\n\n const renderBody = () => {\n return (\n <div>\n <p>\n The Cate service will shut down soon due to inactivity\n since {formatSeconds(inactivityTime)}. After the shutdown\n you will need to reconnect/login first. Unsaved changes will be lost.\n </p>\n <p>\n The remaining time is <strong>{formatSeconds(remainingTime)}</strong>.\n </p>\n <p>\n Press \"Keep Alive\" to prevent the shutdown.\n </p>\n </div>\n );\n }\n\n return (\n <ModalDialog\n isOpen={true}\n title=\"Service Shutdown Ahead\"\n icon=\"offline\"\n noCancelButton={true}\n confirmTitle=\"Keep Alive\"\n confirmIconName=\"link\"\n confirmTooltip=\"Requests keeping the service available.\"\n onCancel={handleClose}\n onConfirm={handleClose}\n canConfirm={canConfirm}\n renderBody={renderBody}\n />\n );\n}\n\nexport default connect(mapStateToProps)(ServiceAutoShutdownDialog);\n\n\nfunction formatSeconds(value: number): string {\n const hours = Math.floor(value / 3600);\n const remainder = value - hours * 3600;\n const minutes = Math.floor(remainder / 60);\n const seconds = Math.round(remainder - minutes * 60);\n const parts = [];\n if (hours > 0) {\n parts.push(`${hours} hour${hours !== 1 ? 's': ''}`);\n }\n if (minutes > 0) {\n parts.push(`${minutes} minute${minutes !== 1 ? 's': ''}`);\n }\n parts.push(`${seconds} second${seconds !== 1 ? 's': ''}`);\n return parts.join(', ');\n}","import * as React from 'react';\nimport { hideShutdownDialog } from '../actions';\nimport { State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as selectors from '../selectors';\nimport { ServiceShutdownAPI } from '../webapi';\n\n\nconst DIALOG_ID = \"shutdownDialog\";\n\ninterface IServiceShutdownDialogProps {\n isOpen: boolean;\n webAPIServiceURL: string;\n}\n\nfunction mapStateToProps(state: State): IServiceShutdownDialogProps {\n const dialogState = selectors.dialogStateSelector(DIALOG_ID)(state);\n\n return {\n isOpen: dialogState.isOpen,\n webAPIServiceURL: selectors.webAPIServiceURLSelector(state),\n };\n}\n\nconst ServiceShutdownDialog: React.FC<IServiceShutdownDialogProps & DispatchProp<State>> = (\n {\n isOpen,\n webAPIServiceURL,\n dispatch\n }\n) => {\n let [waiting, setWaiting] = React.useState(false);\n\n if (!isOpen) {\n return null;\n }\n\n const handleShutdown = () => {\n // Make any harmless REST call so the\n // server's inactivity timer is reset:\n try {\n setWaiting(true);\n // noinspection JSIgnoredPromiseFromCall\n new ServiceShutdownAPI().shutdown(webAPIServiceURL).then(() => {\n dispatch(hideShutdownDialog());\n });\n } catch (error) {\n setWaiting(false);\n }\n }\n\n const handleClose = () => {\n dispatch(hideShutdownDialog());\n }\n\n const renderBody = () => {\n return (\n <p>\n This will shut down the Cate service.\n Unsaved changes will be lost.\n </p>\n );\n }\n\n return (\n <ModalDialog\n isOpen={true}\n title=\"Service Shutdown\"\n icon=\"offline\"\n noCancelButton={false}\n confirmTitle=\"Shutdown\"\n confirmIconName=\"offline\"\n canConfirm={() => !waiting}\n onConfirm={handleShutdown}\n onCancel={handleClose}\n renderBody={renderBody}\n />\n );\n}\n\nexport default connect(mapStateToProps)(ServiceShutdownDialog);\n\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { ResourceState, State, TableViewDataState } from '../state';\nimport { connect, DispatchProp } from 'react-redux';\nimport { ViewState } from '../components/ViewState';\nimport { Spinner } from '@blueprintjs/core';\nimport { Cell, Column, Table } from '@blueprintjs/table';\nimport * as assert from '../../common/assert';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { LOADING_TABLE_DATA_FAILED, NO_TABLE_DATA } from '../messages';\n\ninterface ITableViewOwnProps {\n view: ViewState<TableViewDataState>;\n}\n\ninterface ITableViewProps {\n viewId: string;\n viewData: TableViewDataState,\n resources: ResourceState[];\n resNames: string[];\n}\n\nfunction mapStateToProps(state: State, ownProps: ITableViewOwnProps): ITableViewProps {\n return {\n viewId: ownProps.view.id,\n viewData: ownProps.view.data,\n resources: selectors.resourcesSelector(state),\n resNames: selectors.resourceNamesSelector(state),\n };\n}\n\n\n/**\n * This component displays a 2D map with a number of layers.\n */\nclass TableView extends React.PureComponent<ITableViewProps & ITableViewOwnProps & DispatchProp<State>, null> {\n static readonly TABLE_CONTAINER_STYLE: CSSProperties = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column'\n };\n static readonly LOADING_CONTAINER_STYLE: CSSProperties = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center' as any\n };\n\n componentWillMount(): void {\n const viewData = this.props.viewData;\n if (!viewData.dataRows && !viewData.isLoading && !viewData.error) {\n this.props.dispatch(actions.loadTableViewData(this.props.viewId, viewData.resName, viewData.varName) as any);\n }\n }\n\n render() {\n return (\n <div style={TableView.TABLE_CONTAINER_STYLE}>\n {this.renderDataTable()}\n </div>\n );\n }\n\n renderDataTable() {\n const viewData = this.props.viewData;\n assert.ok(viewData);\n\n if (viewData.isLoading) {\n return (\n <div style={TableView.LOADING_CONTAINER_STYLE}>\n <Spinner className=\"bp3-large\"/>\n <p>Loading table data...</p>\n </div>\n );\n }\n\n if (viewData.error) {\n return LOADING_TABLE_DATA_FAILED(viewData.error);\n }\n\n const dataRows = viewData.dataRows;\n if (!dataRows || !dataRows.length) {\n return NO_TABLE_DATA;\n }\n\n const firstRow = dataRows[0];\n const columnNames = Object.getOwnPropertyNames(firstRow).filter(name => name !== '');\n\n const getData = (row: number, col: number) => {\n return dataRows[row][columnNames[col]];\n };\n\n const children = [];\n for (let i in columnNames) {\n const renderCell = (row: number, col: number) => {\n return (<Cell>{getData(row, col)}</Cell>);\n };\n children.push(<Column key={i} name={columnNames[i]} cellRenderer={renderCell}/>);\n }\n\n return (<Table numRows={dataRows.length}\n enableRowHeader={true}\n getCellClipboardData={getData}\n children={children as any}/>);\n }\n}\n\nexport default connect(mapStateToProps)(TableView);\n\n","import * as React from 'react'\n\nexport type SplitDir = 'hor' | 'ver';\n\n// TODO (forman): add splitter width, color, handleIcon, etc. style props\ninterface ISplitterProps {\n dir?: SplitDir;\n onChange: (delta: number) => any;\n}\n\ninterface IButtonEvent {\n button: number;\n buttons: number;\n}\n\ninterface IScreenEvent {\n screenX: number;\n screenY: number;\n}\n\ntype EventListenerItem = [string, (any) => any];\n\n\n/**\n * A splitter component.\n * In order to work properly, clients must provide the onChange which is a callback that receives the delta position\n * either in x-direction if direction is \"hor\" or y-direction if direction is \"ver\". The callback must then\n * adjust either a container's width if direction is \"hor\" or its height if direction is \"ver\".\n *\n * @author Norman Fomferra\n */\nexport class Splitter extends React.PureComponent<ISplitterProps, any> {\n private lastPosition: null | number = null;\n private bodyEventListeners: Array<EventListenerItem>;\n\n constructor(props: ISplitterProps) {\n super(props);\n if (!props.onChange) {\n throw Error('onChange property must be provided');\n }\n this.bodyEventListeners = [\n ['mousemove', this.onBodyMouseMove.bind(this)],\n ['mouseup', this.onBodyMouseUp.bind(this)],\n ['onmouseenter', this.onBodyMouseEnter.bind(this)],\n ['onmouseleave', this.onBodyMouseLeave.bind(this)],\n ];\n }\n\n private onMouseDown(event: React.MouseEvent<HTMLDivElement>) {\n if (this.isButton1Pressed(event)) {\n this.lastPosition = this.getCurrentPosition(event);\n this.removeBodyMouseListeners();\n this.addBodyMouseListeners();\n } else {\n this.lastPosition = null;\n }\n }\n\n private onBodyMouseMove(event: MouseEvent) {\n if (this.lastPosition === null || !this.isButton1Pressed(event)) {\n return;\n }\n const currentPosition = this.getCurrentPosition(event);\n const positionDelta = currentPosition - this.lastPosition;\n this.lastPosition = currentPosition;\n if (positionDelta !== 0) {\n this.props.onChange(positionDelta);\n }\n }\n\n //noinspection JSUnusedLocalSymbols\n private onBodyMouseUp(event: MouseEvent) {\n // console.log(\"onBodyMouseUp: \", event, this);\n this.endDragging();\n }\n\n //noinspection JSUnusedLocalSymbols\n private onBodyMouseEnter(event: MouseEvent) {\n // console.log(\"onBodyMouseEnter: \", event, this);\n this.endDragging();\n }\n\n //noinspection JSUnusedLocalSymbols\n private onBodyMouseLeave(event: MouseEvent) {\n // console.log(\"onBodyMouseLeave: \", event, this);\n this.endDragging();\n }\n\n //noinspection JSMethodCanBeStatic\n private isButton1Pressed(event: IButtonEvent) {\n return event.button === 0 && event.buttons === 1;\n }\n\n private getCurrentPosition(event: IScreenEvent) {\n return this.props.dir === 'hor' ? event.screenX : event.screenY;\n }\n\n private endDragging() {\n this.removeBodyMouseListeners();\n this.lastPosition = null;\n }\n\n private addBodyMouseListeners() {\n this.bodyEventListeners.forEach((pair: EventListenerItem) =>\n document.body.addEventListener(pair[0], pair[1]));\n }\n\n private removeBodyMouseListeners() {\n this.bodyEventListeners.forEach((pair: EventListenerItem) =>\n document.body.removeEventListener(pair[0], pair[1]));\n }\n\n componentWillUnmount() {\n this.removeBodyMouseListeners();\n }\n\n render() {\n const className = this.props.dir === 'hor' ? 'cate-splitter-hor' : 'cate-splitter-ver';\n return (\n <div\n className={className}\n onMouseDown={this.onMouseDown.bind(this)}\n />\n );\n }\n}\n\n\n","import * as React from 'react'\nimport { SplitDir, Splitter } from './Splitter';\n\n\nexport interface ISplitPaneProps {\n dir: SplitDir;\n initialSize?: number;\n onChange?: (newSize: number, oldSize: number) => void;\n}\n\nexport interface ISplitPaneState {\n size: number;\n}\n\n/**\n * A simple SplitPane component which must have exactly two child elements.\n *\n * Properties:\n * - dir: the split direction, either \"hor\" or \"ver\"\n * - initialSize: the initial width (\"hor\") or height (\"ver\") of the first child's container\n *\n * @author Norman Fomferra\n */\nexport class SplitPane extends React.PureComponent<ISplitPaneProps, ISplitPaneState> {\n\n constructor(props: ISplitPaneProps) {\n super(props);\n this.handleSplitDelta = this.handleSplitDelta.bind(this);\n this.state = {size: props.initialSize};\n }\n\n private handleSplitDelta(delta: number) {\n this.setState((state: ISplitPaneState) => {\n const oldSize = state.size;\n const newSize = oldSize + delta;\n if (this.props.onChange) {\n this.props.onChange(newSize, oldSize);\n }\n return {size: newSize};\n });\n }\n\n render() {\n let containerClass;\n let childContainer1Style;\n let childContainer2Style;\n const splitterSize = 4; // px\n if (this.props.dir === 'hor') {\n const width1 = this.state.size;\n const width2 = `calc(100% - ${width1 + splitterSize}px)`;\n containerClass = 'cate-split-pane-hor';\n childContainer1Style = {flex: 'none', width: width1, height: '100%'};\n childContainer2Style = {flex: 'auto', width: width2, height: '100%'};\n } else {\n const height1 = this.state.size;\n const height2 = `calc(100% - ${height1 + splitterSize}px)`;\n containerClass = 'cate-split-pane-ver';\n childContainer1Style = {flex: 'none', width: '100%', height: height1};\n childContainer2Style = {flex: 'auto', width: '100%', height: height2};\n }\n return (\n <div className={containerClass}>\n <div style={childContainer1Style}>\n {this.props.children[0]}\n </div>\n <Splitter dir={this.props.dir} onChange={this.handleSplitDelta}/>\n <div style={childContainer2Style}>\n {this.props.children[1]}\n </div>\n </div>\n );\n }\n}\n\n","import * as React from 'react';\nimport { SplitPane } from './SplitPane';\nimport { Switch } from '@blueprintjs/core';\n\n\nexport interface IContentWithDetailsPanelProps {\n showDetails: boolean;\n onShowDetailsChange: (value: boolean) => void;\n contentHeight?: number;\n onContentHeightChange?: (value: number) => void;\n actionComponent?: JSX.Element | null;\n isSplitPanel?: boolean;\n}\n\n\nexport class ContentWithDetailsPanel extends React.PureComponent<IContentWithDetailsPanelProps, any> {\n\n constructor(props: IContentWithDetailsPanelProps) {\n super(props);\n this.handleSwitchChange = this.handleSwitchChange.bind(this);\n this.handleContentHeightChange = this.handleContentHeightChange.bind(this);\n }\n\n private handleSwitchChange(event) {\n this.props.onShowDetailsChange(event.target.checked);\n }\n\n private handleContentHeightChange(newSize: number, oldSize: number) {\n if (this.props.onContentHeightChange) {\n this.props.onContentHeightChange(newSize);\n }\n }\n\n render(): JSX.Element {\n const contentChild = this.props.children[0];\n const detailsChild = this.props.children[1];\n\n const detailsSwitch = (<Switch checked={this.props.showDetails}\n style={{alignSelf: 'flex-end', marginBottom: 0}}\n label=\"Details\"\n disabled={!detailsChild}\n onChange={this.handleSwitchChange}/>);\n\n const detailsContentPanel = this.props.showDetails ? detailsChild : null;\n\n let detailsControlPanel;\n if (this.props.actionComponent) {\n detailsControlPanel = (\n <div style={{display: 'flex', alignItems: 'flex-end'}}>\n {detailsSwitch}\n <span style={{flex: 'auto'}}/>\n {this.props.actionComponent}\n </div>\n );\n } else {\n detailsControlPanel = detailsSwitch;\n }\n\n const detailsPanel = (\n <div>\n {detailsControlPanel}\n {detailsContentPanel}\n </div>\n );\n\n let contentWithDetailsPanel;\n if (this.props.isSplitPanel) {\n contentWithDetailsPanel = (\n <SplitPane dir=\"ver\"\n initialSize={this.props.contentHeight || 300}\n onChange={this.handleContentHeightChange}>\n {contentChild}\n {detailsPanel}\n </SplitPane>);\n } else {\n contentWithDetailsPanel = (\n <div>\n {contentChild}\n {detailsPanel}\n </div>\n );\n }\n\n return contentWithDetailsPanel;\n }\n}\n\n","import * as React from 'react';\nimport { AnchorButton } from '@blueprintjs/core';\n\nimport { DataSourceState } from '../state';\nimport { getDataSourceUrls } from '../state-util';\n\n\ninterface DataSourceLinksProps {\n dataSource: DataSourceState;\n style?: React.CSSProperties;\n}\n\nconst DataSourceLinks: React.FC<DataSourceLinksProps> = (\n {\n dataSource,\n style,\n }) => {\n\n const {catalogUrl, infoUrl} = getDataSourceUrls(dataSource);\n if (!catalogUrl && !infoUrl) {\n return null;\n }\n\n return (\n <div style={{display: \"flex\", justifyContent: \"flex-end\", ...style}}>\n {catalogUrl &&\n <AnchorButton\n href={catalogUrl}\n target={\"_blank\"}\n style={{float: 'right', margin: 4}}>\n Catalogue\n </AnchorButton>}\n {infoUrl &&\n <AnchorButton\n href={infoUrl}\n target={\"_blank\"}\n style={{float: 'right', margin: 4}}>\n More Info\n </AnchorButton>}\n </div>\n );\n}\n\nexport default DataSourceLinks;\n","import * as React from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGFM from 'remark-gfm';\nimport { Colors } from '@blueprintjs/core';\n\nconst CODE_STYLE = {\n fontFamily: 'Source Code Pro, Consolas, monospace',\n color: Colors.LIGHT_GRAY1,\n};\n\nconst MARKDOWN_COMPONENTS = {\n em: ({node, ...props}) => <em className=\"user-selectable\" {...props}/>,\n li: ({node, ...props}) => <li className=\"user-selectable\" {...props}/>,\n p: ({node, ...props}) => <p className=\"user-selectable\" {...props}/>,\n span: ({node, ...props}) => <span className=\"user-selectable\" {...props}/>,\n div: ({node, ...props}) => <div className=\"user-selectable\" {...props}/>,\n code: ({node, ...props}) => <code className=\"user-selectable\" style={CODE_STYLE} {...props}/>,\n pre: ({node, ...props}) => <pre className=\"user-selectable\" style={CODE_STYLE} {...props}/>,\n};\n\ninterface IMarkdownProps {\n source: string;\n}\n\nconst Markdown: React.FC<IMarkdownProps> = ({source}) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGFM]}\n components={MARKDOWN_COMPONENTS}\n linkTarget='_blank'\n >\n {source}\n </ReactMarkdown>\n );\n}\n\n\nexport default Markdown;\n","import * as React from 'react'\nimport { CSSProperties, ReactNode } from 'react'\n\ninterface IScrollablePanelContentProps {\n children?: ReactNode;\n}\n\nconst STYLE: CSSProperties = {width: '100%', height: '100%', overflow: 'auto'};\n\nexport function ScrollablePanelContent(props: IScrollablePanelContentProps) {\n return (<div style={STYLE}>{props.children}</div>);\n}\n","import * as React from 'react';\nimport { Card, Tab, Tabs } from '@blueprintjs/core';\nimport { Cell, Column, Table, TruncatedFormat } from '@blueprintjs/table';\n\nimport { DataSourceState } from '../state';\nimport DataSourceLinks from './DataSourceLinks';\nimport Markdown from './Markdown';\nimport { ScrollablePanelContent } from './ScrollableContent';\n\n\nconst COVERAGE_PANEL_STYLE: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'space-around'\n};\n\ninterface DetailPart {\n title: string;\n id: string;\n element: JSX.Element;\n}\n\ninterface IDataSourceDetailsProps {\n dataSource: DataSourceState\n}\n\nconst DataSourceDetails: React.FC<IDataSourceDetailsProps> = ({dataSource}) => {\n\n if (!dataSource) {\n return null;\n }\n\n let metaInfoKeys;\n let variables;\n\n const metaInfo = dataSource.metaInfo;\n\n if (metaInfo) {\n metaInfoKeys = Object.keys(metaInfo).filter(key => key !== 'data_vars'\n && key !== 'coords');\n if (metaInfo.data_vars) {\n variables = metaInfo.data_vars;\n }\n }\n\n const details: DetailPart[] = [\n renderAbstract(dataSource),\n renderVariablesTable(variables),\n renderMetaInfoTable(metaInfo, metaInfoKeys),\n renderMetaInfoLicences(metaInfo),\n ];\n\n return (\n <Tabs id=\"dsDetails\" renderActiveTabPanelOnly={true}>\n {details.map(d => <Tab key={d.id} id={d.id} title={d.title} panel={d.element}/>)}\n </Tabs>\n );\n}\n\nexport default DataSourceDetails;\n\n\nfunction renderAbstract(dataSource: DataSourceState): DetailPart {\n\n const metaInfo = dataSource.metaInfo;\n\n let spatialCoverage;\n let temporalCoverage;\n let summary;\n if (metaInfo) {\n if (Array.isArray(metaInfo.bbox)) {\n const [x_min, y_min, x_max, y_max] = metaInfo.bbox;\n spatialCoverage = (\n <div>\n <h5>Spatial coverage</h5>\n <table>\n <tbody>\n <tr>\n <td/>\n <td className=\"user-selectable\">{y_max}°</td>\n <td/>\n </tr>\n <tr>\n <td className=\"user-selectable\">{x_min}°</td>\n <td/>\n <td className=\"user-selectable\">{x_max}°</td>\n </tr>\n <tr>\n <td/>\n <td className=\"user-selectable\">{y_min}°</td>\n <td/>\n </tr>\n </tbody>\n </table>\n <br/>\n </div>\n );\n }\n if (dataSource.metaInfo && dataSource.metaInfo.time_range) {\n let [start, end] = dataSource.metaInfo.time_range;\n if (!start && !end) {\n start = end = 'unknown';\n } else if (!start) {\n start = 'unknown';\n } else if (!end) {\n end = 'today';\n }\n temporalCoverage = (\n <div><h5>Temporal coverage</h5>\n <table>\n <tbody>\n <tr>\n <td>Start</td>\n <td className=\"user-selectable\">{start}</td>\n </tr>\n <tr>\n <td>End</td>\n <td className=\"user-selectable\">{end}</td>\n </tr>\n </tbody>\n </table>\n <br/>\n </div>\n );\n }\n if (metaInfo.abstract) {\n summary = (\n <div><h5>Summary</h5>\n <Markdown source={metaInfo.abstract}/>\n </div>\n );\n }\n }\n\n let element;\n if (spatialCoverage || temporalCoverage || summary) {\n element = (\n <ScrollablePanelContent>\n <Card>\n <DataSourceLinks dataSource={dataSource}/>\n <div style={COVERAGE_PANEL_STYLE}>\n {spatialCoverage}\n {temporalCoverage}\n </div>\n {summary}\n </Card>\n </ScrollablePanelContent>\n );\n } else {\n element = (\n <Card>\n <DataSourceLinks dataSource={dataSource}/>\n <p>No abstract available.</p>\n </Card>\n );\n }\n\n return {title: 'Abstract', id: 'abstract', element};\n}\n\nfunction renderVariablesTable(variables?: any[]): DetailPart {\n let element;\n if (variables && variables.length > 0) {\n const renderName = (rowIndex: number) => {\n const variable = variables[rowIndex];\n return (\n <Cell tooltip={variable.long_name}>\n <TruncatedFormat className=\"user-selectable\">{variable.name}</TruncatedFormat>\n </Cell>\n );\n };\n\n const renderUnit = (rowIndex: number) => {\n const variable = variables[rowIndex];\n return (\n <Cell>\n <TruncatedFormat className=\"user-selectable\">{variable.units || '-'}</TruncatedFormat>\n </Cell>\n );\n };\n\n const getCellClipboardData = (row: number, col: number) => {\n // TODO: implement me\n console.error('not implemented: getCellClipboardData: ', row, col);\n };\n\n element = (\n <Table numRows={variables.length}\n enableRowHeader={false}\n getCellClipboardData={getCellClipboardData}>\n <Column name=\"Name\" cellRenderer={renderName}/>\n <Column name=\"Units\" cellRenderer={renderUnit}/>\n </Table>\n );\n } else {\n element = <Card>No information about variables available.</Card>;\n }\n return {title: 'Variables', id: 'var', element};\n}\n\nfunction renderMetaInfoTable(metaInfo?: any, metaInfoKeys?: string[]): DetailPart {\n let element;\n if (metaInfo && metaInfoKeys) {\n\n const renderKey = (rowIndex: number) => {\n const key = metaInfoKeys[rowIndex];\n return <Cell><TruncatedFormat>{key}</TruncatedFormat></Cell>;\n };\n\n const renderValue = (rowIndex: number) => {\n const key = metaInfoKeys[rowIndex];\n return <Cell><TruncatedFormat>{metaInfo[key]}</TruncatedFormat></Cell>;\n };\n\n const getCellClipboardData = (row: number, col: number) => {\n // TODO: implement me\n console.error('not implemented: getCellClipboardData: ', row, col);\n };\n\n element = (\n <Table numRows={metaInfoKeys.length}\n enableRowHeader={false}\n getCellClipboardData={getCellClipboardData}>\n <Column name=\"Key\" cellRenderer={renderKey}/>\n <Column name=\"Value\" cellRenderer={renderValue}/>\n </Table>\n );\n } else {\n element = <Card>No global meta-information available.</Card>;\n }\n\n return {title: 'Meta-Info', id: 'meta', element};\n}\n\nfunction renderMetaInfoLicences(metaInfo: any): DetailPart {\n let element;\n if (metaInfo && metaInfo.licences) {\n element = (\n <div>\n <Markdown source={metaInfo.licences}/>\n </div>\n );\n } else {\n element = <Card>No license information available.</Card>;\n }\n return {title: 'Licences', id: 'licences', element};\n}\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { Colors, Icon, Intent } from '@blueprintjs/core';\n\nimport { DataSourceState } from '../state';\n\nimport { EcvMeta } from '../ecv-meta';\nimport _ecvMeta from '../resources/ecv-meta.json';\nimport { canOpenDataSource } from '../state-util';\n\nconst ECV_META: EcvMeta = _ecvMeta;\n\n\nconst ITEM_STYLE: CSSProperties = {display: 'flex', alignItems: 'flex-start'};\nconst ID_STYLE: CSSProperties = {color: Colors.BLUE5, fontSize: '0.8em'};\nconst WARN_ICON_STYLE: CSSProperties = {marginRight: 4};\nconst DATA_TYPE_STYLE: CSSProperties = {color: Colors.GREEN4, fontSize: '0.8em', marginLeft: 4};\nconst TEXT_ICON_STYLE: CSSProperties = {\n width: 32,\n height: 32,\n flex: 'none',\n marginRight: 6,\n borderRadius: 16,\n textAlign: 'center',\n color: 'white',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n};\n\ninterface DataSourceItemProps {\n dataSource: DataSourceState;\n showDataSourceIDs: boolean;\n}\n\nconst DataSourceItem: React.FC<DataSourceItemProps> = ({dataSource, showDataSourceIDs}) => {\n const metaInfo = dataSource.metaInfo;\n\n const {backgroundColor, label} = dataSourceToTextIconProps(dataSource);\n const icon = <div style={{...TEXT_ICON_STYLE, backgroundColor}}>{label}</div>;\n\n let title = dataSource.title || (metaInfo && metaInfo.title);\n if (!title || title === dataSource.id) {\n title = dataSourceToTitle(dataSource);\n }\n\n const isNotVerified = !canOpenDataSource(dataSource);\n let warnIcon;\n if (isNotVerified) {\n warnIcon = <Icon icon={\"warning-sign\"} intent={Intent.WARNING} iconSize={16} style={WARN_ICON_STYLE}/>\n }\n\n let typeSpec;\n if (dataSource.dataType) {\n typeSpec = <span style={DATA_TYPE_STYLE}>{dataSource.dataType}</span>;\n }\n\n return (\n <div style={ITEM_STYLE}>\n {icon}\n {showDataSourceIDs ? (\n <div>\n <div className=\"user-selectable\">{warnIcon}{title}{typeSpec}</div>\n <div className=\"user-selectable\" style={ID_STYLE}>{dataSource.id}</div>\n </div>\n ) : (\n <div className=\"user-selectable\">{warnIcon}{title}{typeSpec}</div>\n )}\n </div>\n );\n}\n\n\nexport default DataSourceItem;\n\nconst SKIPPED_PREFIXES: string[] = ['esacci '];\nconst SKIPPED_SUFFIXES: string[] = ['.zarr', '.levels', '.nc', '.tif'];\n\n\nfunction dataSourceToTitle(dataSource: DataSourceState) {\n let title = dataSource.id\n .replace(/-/g, ' ')\n .replace(/_/g, ' ');\n const lastSlashPos = title.lastIndexOf('/');\n if (lastSlashPos >= 0 && lastSlashPos < title.length - 1) {\n title = title.substring(lastSlashPos + 1)\n }\n for (let prefix of SKIPPED_PREFIXES) {\n if (title.startsWith(prefix) || title.startsWith(prefix.toUpperCase())) {\n title = title.substring(prefix.length);\n break;\n }\n }\n for (let suffix of SKIPPED_SUFFIXES) {\n if (title.endsWith(suffix) || title.endsWith(suffix.toUpperCase())) {\n title = title.substring(0, title.length - suffix.length);\n break;\n }\n }\n return title;\n}\n\nfunction dataSourceToTextIconProps(dataSource: DataSourceState) {\n let ecvId;\n let label;\n const id = dataSource.id.toLowerCase();\n\n // The following are CCI specific hacks\n if (id.startsWith('esacci.')) {\n const idParts = id.split('.', 2);\n if (idParts.length > 1) {\n ecvId = idParts[1];\n }\n }\n if (!ecvId && id.startsWith('esacci-')) {\n const idParts = id.split('-', 2);\n if (idParts.length > 1) {\n ecvId = idParts[1];\n }\n }\n if (!ecvId) {\n ecvId = id;\n }\n let actualEcvId = ECV_META.mappings[ecvId];\n if (actualEcvId) {\n ecvId = actualEcvId;\n }\n const ecvMetaItem = ecvId && ECV_META.ecvs[ecvId];\n let backgroundColor;\n if (ecvMetaItem) {\n backgroundColor = ECV_META.colors[ecvMetaItem.color] || ecvMetaItem.color;\n label = ecvMetaItem.label || label;\n }\n if (!backgroundColor) {\n backgroundColor = ECV_META.colors[\"default\"] || \"#0BB7A0\";\n }\n if (!label) {\n label = (ecvId && ecvId.substr(0, 3).toUpperCase()) || '?';\n }\n return {backgroundColor, label};\n}\n\n","import * as React from 'react';\n\nimport { DataSourceState } from '../state';\nimport DataSourceItem from './DataSourceItem';\nimport { ListBox, ListBoxSelectionMode } from './ListBox';\nimport { ScrollablePanelContent } from './ScrollableContent';\n\n\ninterface IDataSourcesListProps {\n dataSources: DataSourceState[];\n selectedDataSourceId: string | null;\n setSelectedDataSourceId: (selectedDataSourceId: string) => void;\n showDataSourceIDs: boolean;\n doubleClickAction: (dataSource: DataSourceState) => any;\n}\n\nconst DataSourcesList: React.FC<IDataSourcesListProps> = (\n {\n dataSources,\n selectedDataSourceId,\n setSelectedDataSourceId,\n showDataSourceIDs,\n doubleClickAction,\n }\n) => {\n const getItemKey = (dataSource: DataSourceState) => {\n return dataSource.id;\n };\n\n const renderDataSourceItem = (dataSource: DataSourceState) => {\n return <DataSourceItem dataSource={dataSource} showDataSourceIDs={showDataSourceIDs}/>;\n }\n\n const handleDataSourceSelected = (newSelection: Array<React.Key>) => {\n if (newSelection.length > 0) {\n setSelectedDataSourceId(newSelection[0] as string);\n } else {\n setSelectedDataSourceId(null);\n }\n }\n\n return (\n <ScrollablePanelContent>\n <ListBox\n // key is here to force re-render on change of showDataSourceIDs\n key={'DataSourcesList-' + showDataSourceIDs}\n items={dataSources}\n getItemKey={getItemKey}\n renderItem={renderDataSourceItem}\n selectionMode={ListBoxSelectionMode.SINGLE}\n selection={selectedDataSourceId}\n onItemDoubleClick={doubleClickAction}\n onSelection={handleDataSourceSelected}\n />\n </ScrollablePanelContent>\n );\n}\n\nexport default DataSourcesList;\n\n","import * as React from 'react';\nimport { H5 } from '@blueprintjs/core';\nimport { DataSourceState } from '../state';\nimport DataSourceLinks from '../components/DataSourceLinks';\n\ninterface DataSourceOpenHintProps {\n dataSource: DataSourceState;\n isSandboxedMode: boolean;\n}\n\nconst DataSourceOpenHint: React.FC<DataSourceOpenHintProps> = (\n {\n dataSource,\n isSandboxedMode,\n }\n) => {\n\n let manualInterventionNotice;\n if (isSandboxedMode) {\n manualInterventionNotice = (\n <p>This data source cannot be opened directly from its data store.\n You may\n <ol>\n <li>Download it manually to your computer;</li>\n <li>Upload it using <strong>Files / Upload Files</strong>;</li>\n <li>Use one of the available <code>read_xxx()</code> operations\n to open the uploaded data. \"xxx\" is determined by the type\n and format of the data.\n </li>\n </ol>\n </p>\n );\n } else {\n manualInterventionNotice = (\n <p>This data source cannot be opened directly from its data store.\n You may\n <ol>\n <li>Download it manually to your computer;</li>\n <li>Use one of the available <code>read_xxx()</code> operations\n to open the downloaded data. \"xxx\" is determined by the type\n and format of the data.\n </li>\n </ol>\n </p>\n );\n }\n\n return (\n <div>\n <H5>Manual intervention required</H5>\n {manualInterventionNotice}\n <DataSourceLinks dataSource={dataSource} style={{marginTop: 8}}/>\n </div>\n );\n}\n\nexport default DataSourceOpenHint;\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, InputGroup, Intent } from '@blueprintjs/core';\nimport { DialogState, State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { OpenDialogOptions } from \"../components/desktop/types\";\nimport { getParentPath } from \"../../common/paths\";\n\ninterface IAddDatasetDialogProps {\n isOpen: boolean;\n}\n\ninterface IAddDatasetDialogState extends DialogState {\n dataSourceName: string;\n filePathPattern: string;\n}\n\nfunction mapStateToProps(state: State): IAddDatasetDialogProps {\n const dialogState = selectors.dialogStateSelector(AddDatasetDialog.DIALOG_ID)(state);\n return {\n isOpen: dialogState.isOpen,\n };\n}\n\nclass AddDatasetDialog extends React.Component<IAddDatasetDialogProps & DispatchProp<State>, IAddDatasetDialogState> {\n static readonly DIALOG_ID = 'addDatasetDialog';\n\n constructor(props: IAddDatasetDialogProps & DispatchProp<State>) {\n super(props);\n this.state = {dataSourceName: '', filePathPattern: ''};\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.onDataSourceNameChange = this.onDataSourceNameChange.bind(this);\n this.onFilePathPatternChange = this.onFilePathPatternChange.bind(this);\n this.showSelectDirectoryDialog = this.showSelectDirectoryDialog.bind(this);\n }\n\n componentWillReceiveProps(nextProps: IAddDatasetDialogProps) {\n this.setState({dataSourceName: '', filePathPattern: ''});\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(AddDatasetDialog.DIALOG_ID));\n }\n\n private canConfirm(): boolean {\n return !!this.state.dataSourceName && !!this.state.filePathPattern;\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(AddDatasetDialog.DIALOG_ID, this.state));\n this.props.dispatch(actions.addLocalDataset(this.state.dataSourceName, this.state.filePathPattern) as any);\n }\n\n private onDataSourceNameChange(ev: any) {\n this.setState({dataSourceName: ev.target.value} as IAddDatasetDialogState);\n }\n\n private onFilePathPatternChange(ev: any) {\n this.setState({filePathPattern: ev.target.value} as IAddDatasetDialogState);\n }\n\n private showSelectDirectoryDialog() {\n const openDialogOptions: OpenDialogOptions = {\n title: 'Select Directory',\n buttonLabel: 'Select',\n defaultPath: this.state.filePathPattern !== '' ? getParentPath(this.state.filePathPattern) : undefined,\n };\n this.props.dispatch(actions.showDirectorySelectDialog(openDialogOptions, (dirPath: string | null) => {\n if (dirPath) {\n this.setState({filePathPattern: dirPath + '/*.nc'} as IAddDatasetDialogState);\n }\n }) as any);\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title=\"Add file data source\"\n icon=\"add\"\n confirmTitle=\"Add\"\n confirmIconName=\"add\"\n confirmTooltip=\"Add file data source.\"\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n onConfirm={this.onConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n return (\n <div>\n <p>Define a new file data source using a file path pattern.</p>\n\n <p style={{marginTop: '1em'}}>Name:</p>\n <InputGroup\n type=\"text\"\n style={{width: '100%'}}\n value={this.state.dataSourceName}\n onChange={this.onDataSourceNameChange}\n />\n <p style={{marginTop: '1em'}}>Path pattern<span className=\"bp3-text-muted\"> (can contain wildcards like \"*\" or \"?\")</span>:\n </p>\n <ControlGroup style={{flexGrow: 1, width: '100%'}}>\n <InputGroup\n type=\"text\"\n fill={true}\n value={this.state.filePathPattern}\n onChange={this.onFilePathPatternChange}\n />\n <AnchorButton intent={Intent.PRIMARY} style={{flex: 'none'}}\n onClick={this.showSelectDirectoryDialog}>...</AnchorButton>\n </ControlGroup>\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(AddDatasetDialog);\n","/**\n * Converts a milliseconds time value to an ISO date string.\n * @param millis Time in milliseconds\n * @returns {string} ISO date string\n */\nexport function formatMillisAsISODateString(millis: number) {\n return new Date(millis).toISOString().slice(0, 10);\n}\n\n/**\n * Converts a time value to an ISO date string.\n * @param date Time as date\n * @returns {string} ISO date string\n */\nexport function formatDateAsISODateString(date: Date) {\n const isoDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000));\n return isoDate.toISOString().slice(0, 10);\n}\n\n/**\n * Format a data type name for human readers.\n *\n * @param name fully qualified data type name\n * @param fullyQualified if the type name should be (kept) fully qualified\n * @returns {any}\n */\nexport function formatDataTypeName(name: string | null, fullyQualified: boolean): string {\n if (name && !fullyQualified) {\n const indexColon = name.lastIndexOf(':');\n if (indexColon >= 1) {\n name = name.substr(0, indexColon);\n }\n const indexDot = name.lastIndexOf('.');\n if (indexDot >= 0) {\n name = name.substr(indexDot + 1);\n }\n }\n return name;\n}\n","import { DateRange } from '@blueprintjs/datetime';\nimport { Field, FieldType, IFieldProps } from './Field';\nimport { formatDateAsISODateString } from '../../../common/format';\nimport { isUndefinedOrNull } from '../../../common/types';\n\nexport type DateFieldType = FieldType<Date>;\n\nexport interface IDateFieldProps extends IFieldProps {\n nullable?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport const DEFAULT_MIN_DATE = new Date('1980-01-01');\nexport const DEFAULT_MAX_DATE = new Date(Date.now());\nexport const DEFAULT_DATE_RANGE: DateRange = [DEFAULT_MIN_DATE, DEFAULT_MAX_DATE];\n\nexport class DateField extends Field<IDateFieldProps> {\n\n public static defaultProps: Partial<IFieldProps> = {\n uncontrolled: true,\n placeholder: 'YYYY-MM-DD'\n };\n\n parseValue(textValue: string): DateFieldType {\n return parseDate(textValue, this.props.nullable);\n }\n\n formatValue(value: DateFieldType): string {\n return formatDate(value);\n }\n\n validateValue(value: DateFieldType) {\n super.validateValue(value);\n validateDate(value, this.props.nullable, this.props.min, this.props.max);\n }\n}\n\nexport function parseDate(textValue: string, nullable: boolean, name?: string): Date | null {\n if (!textValue || textValue.trim() === '') {\n if (nullable) {\n return null;\n }\n throw new Error('Date must be given.');\n }\n const dateRegex = /^\\d\\d\\d\\d-\\d\\d-\\d\\d$/;\n if (!dateRegex.test(textValue.trim())) {\n throw new Error('Date not valid: >' + textValue + '<');\n }\n let millis;\n try {\n millis = Date.parse(textValue.trim());\n } catch (e) {\n throw new Error(`Invalid ${name || 'date'}.`);\n }\n return new Date(millis);\n}\n\nexport function formatDate(value: Date | null): string {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n return formatDateAsISODateString(value);\n}\n\nexport function validateDate(date: Date | null, nullable: boolean | null, min: Date | null, max: Date | null, name?: string) {\n if (!date) {\n if (!nullable) {\n throw Error('Date value expected.');\n }\n return;\n }\n if (min && date.valueOf() < min.valueOf()) {\n throw new Error(`${name || 'Date'} must not be before ${formatDate(min)}.`);\n }\n if (max && date.valueOf() > max.valueOf()) {\n throw new Error(`${name || 'Date'} must not be after ${formatDate(max)}.`);\n }\n}\n\n","import { DateRange } from '@blueprintjs/datetime';\nimport { Field, FieldType, FieldValue, IFieldProps } from './Field';\nimport { isUndefinedOrNull } from '../../../common/types';\nimport { formatDate, parseDate, validateDate } from './DateField';\n\nexport type DateRangeFieldType = FieldType<DateRange>;\nexport type DateRangeFieldValue = FieldValue<DateRange>;\n\ninterface IDateRangeFieldProps extends IFieldProps {\n nullable?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport class DateRangeField extends Field<IDateRangeFieldProps> {\n\n public static defaultProps: Partial<IFieldProps> = {\n uncontrolled: true,\n placeholder: 'YYYY-MM-DD, YYYY-MM-DD',\n size: 24\n };\n\n parseValue(textValue: string): DateRangeFieldType {\n return parseDateRange(textValue, this.props.nullable);\n }\n\n formatValue(value: DateRangeFieldType): string {\n return formatDateRange(value);\n }\n\n validateValue(value: DateRangeFieldType) {\n super.validateValue(value);\n validateDateRange(value, this.props.nullable, this.props.min, this.props.max);\n }\n}\n\n\nexport function parseDateRange(textValue: string, nullable: boolean): DateRange | null {\n if (!textValue || textValue.trim() === '') {\n if (nullable) {\n return null;\n }\n throw new Error('Date range must be given.');\n }\n const dateStrings = textValue.split(',');\n if (dateStrings.length !== 2 || dateStrings[0].trim() === '' || dateStrings[1].trim() === '') {\n throw new Error('Invalid date range.');\n }\n const date1 = parseDate(dateStrings[0], true, 'first date');\n const date2 = parseDate(dateStrings[1], true, 'second date');\n if (!date1 && !date2) {\n return null;\n }\n return [date1, date2];\n}\n\nexport function formatDateRange(value: DateRange | null): string {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n const date1 = value[0];\n const date2 = value[1];\n if (!date1 && !date2) {\n return '';\n }\n return formatDate(date1) + ',' + formatDate(date2);\n}\n\nexport function validateDateRange(value: DateRange | null, nullable: boolean | null, min: Date | null, max: Date | null) {\n if (!value) {\n if (!nullable) {\n throw Error('Date range value expected.');\n }\n return;\n }\n const date1 = value[0];\n const date2 = value[1];\n validateDate(date1, nullable, min, max, 'First date');\n validateDate(date2, nullable, min, max, 'Second date');\n if (date1 && date2 && date1.valueOf() > date2.valueOf()) {\n throw new Error('First date must not be after second date.');\n }\n}\n","import * as React from 'react';\r\n\r\n\r\nconst LONG_ID_STYLE: React.CSSProperties = {wordWrap: 'break-word'};\r\n\r\nexport interface ILongIdLabelProps {\r\n label: string;\r\n longId: string;\r\n}\r\n\r\nconst LongIdLabel = ({label, longId}: ILongIdLabelProps) => {\r\n return (\r\n <React.Fragment>\r\n <p>{label}</p>\r\n <div style={LONG_ID_STYLE}><strong>{longId}</strong></div>\r\n </React.Fragment>\r\n );\r\n};\r\n\r\nexport default LongIdLabel;","import * as React from 'react'\n\nimport { Field, FieldType, FieldValue, IFieldProps } from './Field';\nimport { Intent, NumericInput } from '@blueprintjs/core';\nimport { isNumber, isUndefinedOrNull } from '../../../common/types';\n\n\nexport type NumericFieldType = FieldType<number>;\nexport type NumericFieldValue = FieldValue<number>;\n\n\nexport interface INumericFieldProps extends IFieldProps {\n nullable?: boolean;\n min?: number;\n max?: number;\n cols?: number;\n isInt?: boolean;\n}\n\n\n/**\n * A NumberField is an input field that provides a floating point number.\n *\n * @author Norman Fomferra\n */\nexport class NumericField extends Field<INumericFieldProps> {\n\n constructor(props: INumericFieldProps) {\n super(props);\n this.handleNumericInputChange = this.handleNumericInputChange.bind(this);\n }\n\n parseValue(textValue: string): NumericFieldType {\n if (!textValue || textValue.trim() === '') {\n return null;\n }\n const value = parseFloat(textValue);\n if (isNaN(value) && textValue.toLowerCase() !== 'nan') {\n throw new Error('Please enter a valid number.');\n }\n return value;\n }\n\n formatValue(value: NumericFieldType): string {\n if (isUndefinedOrNull(value)) {\n return '';\n }\n return value.toString();\n }\n\n validateValue(value: NumericFieldType): void {\n super.validateValue(value);\n validateNumber(value, this.props.nullable, this.props.min, this.props.max, this.props.isInt);\n }\n\n private handleNumericInputChange(value: number, textValue: string) {\n this.setValueAndTextValue(value, textValue);\n }\n\n render() {\n return (<NumericInput value={this.getTextValue()}\n onValueChange={this.handleNumericInputChange}\n onBlur={this.handleBlur}\n onKeyPress={this.handleKeyPress}\n style={this.props.style}\n intent={this.getError() ? Intent.DANGER : Intent.NONE}\n min={this.props.min}\n max={this.props.max}\n // cols={this.props.cols}\n size={this.props.size}\n minorStepSize={this.props.isInt ? 1 : 0.1}\n selectAllOnFocus={true}\n />);\n }\n}\n\nexport function validateNumber(value: number | null, nullable?: boolean, min?: number | null, max?: number | null, isInt?: boolean): void {\n if (isUndefinedOrNull(value)) {\n if (!nullable) {\n throw Error('Numeric value expected');\n }\n return;\n }\n if (!isNumber(value)) {\n throw new Error(`Value must be a number.`);\n }\n if (isInt && value !== Math.floor(value)) {\n throw new Error('Value must be an integer.');\n }\n if (isNumber(min) && value < min) {\n throw new Error(`Value must be >= ${this.props.min}.`);\n }\n if (isNumber(max) && value > max) {\n throw new Error(`Value must be <= ${this.props.max}.`);\n }\n}\n","import * as React from 'react';\nimport { NumericField, NumericFieldValue } from './field/NumericField';\n\n// TODO (forman): rename west, south, east, north to lonMin, latMin, lonMax, latMax because we use negative values\n\nexport interface RegionValue {\n west: NumericFieldValue;\n south: NumericFieldValue;\n east: NumericFieldValue;\n north: NumericFieldValue;\n}\n\ninterface IRegionProps {\n value: RegionValue;\n onChange: (region: RegionValue) => void;\n disabled?: boolean;\n uncontrolled?: boolean;\n}\n\nexport const GLOBAL: RegionValue = {\n west: {value: -180},\n south: {value: -90},\n east: {value: 180},\n north: {value: 90},\n};\n\n/**\n * An editor for objects which have the properties west, east, south, north of type number.\n */\nexport class Region extends React.PureComponent<IRegionProps, null> {\n private static readonly NUMBER_FIELD_STYLE = {textAlign: 'right'};\n\n constructor(props: IRegionProps) {\n super(props);\n this.onEastChange = this.onEastChange.bind(this);\n this.onSouthChange = this.onSouthChange.bind(this);\n this.onWestChange = this.onWestChange.bind(this);\n this.onNorthChange = this.onNorthChange.bind(this);\n }\n\n onWestChange(value: NumericFieldValue) {\n this.props.onChange({...this.props.value, west: value});\n }\n\n onEastChange(value: NumericFieldValue) {\n this.props.onChange({...this.props.value, east: value});\n }\n\n onNorthChange(value: NumericFieldValue) {\n this.props.onChange({...this.props.value, north: value});\n }\n\n onSouthChange(value: NumericFieldValue) {\n this.props.onChange({...this.props.value, south: value});\n }\n\n render() {\n let value = this.props.value;\n return (\n <div>\n <div style={{display: 'flex', alignItems: 'baseline', justifyContent: 'flex-start', padding: 2}}>\n <div style={{flexGrow: 0, width: '14em'}}>Lon. from</div>\n <div\n style={{\n flexGrow: 1,\n width: '100%'\n }}>{this.renderField((value && value.west) || null, -180, 180, this.onWestChange)}</div>\n <div style={{flexGrow: 0, width: '4em'}}> to</div>\n <div\n style={{\n flexGrow: 1,\n width: '100%'\n }}>{this.renderField((value && value.east) || null, -180, 180, this.onEastChange)}</div>\n </div>\n <div style={{display: 'flex', alignItems: 'baseline', justifyContent: 'flex-start', padding: 2}}>\n <div style={{flexGrow: 0, width: '14em'}}>Lat. from</div>\n <div\n style={{\n flexGrow: 1,\n width: '100%'\n }}>{this.renderField((value && value.south) || null, -90, 90, this.onSouthChange)}</div>\n <div style={{flexGrow: 0, width: '4em'}}>to</div>\n <div\n style={{\n flexGrow: 1,\n width: '100%'\n }}>{this.renderField((value && value.north) || null, -90, 90, this.onNorthChange)}</div>\n </div>\n </div>\n );\n }\n\n renderField(value: NumericFieldValue, min: number, max: number, onChange: (number) => void) {\n return (<NumericField value={value}\n style={Region.NUMBER_FIELD_STYLE}\n min={min}\n max={max}\n size={10}\n onChange={onChange}\n disabled={this.props.disabled}\n nullable={true}\n uncontrolled={this.props.uncontrolled}\n />);\n }\n}\n\n\n","import * as React from 'react';\nimport { Tooltip } from '@blueprintjs/core';\nimport { formatDataTypeName } from '../../common/format';\n\nconst DATA_TYPE_STYLE: React.CSSProperties = {color: 'rgba(0,255,0,0.8)', fontSize: '0.8em'};\nconst TOOLTIP_STYLE: React.CSSProperties = {width: \"15em\"};\n\nexport interface ILabelWithTypeProps {\n label: string;\n dataType: string | null;\n fullyQualified?: boolean;\n units?: string;\n tooltipText?: string;\n em?: boolean;\n style?: { [cssProperty: string]: any; }\n}\n\n/**\n * A label with a data type and optional units and tooltip text.\n *\n * @author Norman Fomferra\n */\nexport const LabelWithType: React.FC<ILabelWithTypeProps> = (\n {\n label,\n units,\n dataType,\n fullyQualified,\n tooltipText,\n em,\n style,\n }) => {\n\n const labelText = label;\n const dataTypeText = formatDataTypeName(dataType, fullyQualified);\n const unitsText = units && units !== '' ? ` (${units})` : '';\n\n let content = (\n <span>{em ? <em>{labelText}</em> : labelText} {unitsText} <span\n style={DATA_TYPE_STYLE}>{dataTypeText} </span></span>\n );\n\n if (tooltipText && tooltipText !== '') {\n content = (\n <Tooltip\n content={<div style={TOOLTIP_STYLE}>{tooltipText}</div>}\n position={'top'}\n >\n {content}\n </Tooltip>\n );\n }\n\n return <span style={style}>{content}</span>;\n}\n\n\n","import * as React from 'react';\nimport { ResourceState, VariableState } from '../state';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport { LabelWithType } from '../components/LabelWithType';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\n\ninterface IVariablesDialogProps {\n isOpen: boolean;\n value: string[];\n resource: ResourceState;\n onConfirm: (value: string[]) => void;\n onCancel: () => void;\n multiSelect?: boolean;\n}\n\ninterface IVariablesDialogState {\n value: string[] | null;\n}\n\nexport class VariablesDialog extends React.Component<IVariablesDialogProps, IVariablesDialogState> {\n\n constructor(props: IVariablesDialogProps) {\n super(props);\n this.onSelection = this.onSelection.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.state = {value: this.props.value};\n }\n\n private onSelection(value: string[]) {\n this.setState({value});\n }\n\n private onConfirm() {\n this.props.onConfirm(this.state.value);\n }\n\n render() {\n return (\n <ModalDialog\n isOpen={this.props.isOpen}\n title={this.props.multiSelect ? 'Select Variables' : 'Select Variable'}\n icon=\"variable\"\n onConfirm={this.onConfirm}\n onCancel={this.props.onCancel}\n renderBody={this.renderBody}\n />\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const variables = this.props.resource.variables;\n if (!variables) {\n return (<p>{`Resource \"${this.props.resource.name}\" does not seem to have any variables.`}</p>);\n }\n return (\n <ScrollablePanelContent>\n <p>{this.props.multiSelect ? 'Select one or more the variables:' : 'Select variable:'}</p>\n <ListBox items={variables}\n getItemKey={VariablesDialog.getVariableItemKey}\n renderItem={VariablesDialog.renderVariableItem}\n selectionMode={this.props.multiSelect ? ListBoxSelectionMode.MULTIPLE : ListBoxSelectionMode.SINGLE}\n selection={this.state.value}\n style={{height: '20em'}}\n onSelection={this.onSelection}\n onItemDoubleClick={this.state.value ? this.onConfirm : null}/>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSUnusedLocalSymbols\n private static getVariableItemKey(variable: VariableState) {\n return variable.name;\n }\n\n private static renderVariableItem(variable: VariableState) {\n const dataType = variable.dimNames ? `${variable.dataType}[${variable.dimNames}]` : `${variable.dataType}`;\n return (\n <div>\n <LabelWithType label={variable.name}\n dataType={dataType}\n units={variable.units}\n tooltipText={variable.attributes && variable.attributes.long_name}\n />\n </div>\n );\n }\n}\n\n\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, Intent } from '@blueprintjs/core';\nimport { IValueEditorProps } from './ValueEditor';\nimport { FieldValue, toTextValue } from '../../components/field/Field';\nimport { TextField } from '../../components/field/TextField';\nimport { VariablesDialog } from '../VariablesDialog';\nimport { ResourceState } from '../../state';\n\ninterface IVariableNamesValueEditorProps extends IValueEditorProps<string> {\n resource: ResourceState;\n multi?: boolean;\n}\n\ninterface IVariableNamesValueEditorState {\n isDetailsEditorOpen: boolean;\n}\n\nexport class VarNameValueEditor extends React.Component<IVariableNamesValueEditorProps, IVariableNamesValueEditorState> {\n\n private static DIV_STYLE = {display: 'flex', justifySelf: 'stretch'};\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n private static BUTTON_STYLE = {flexGrow: 0};\n\n constructor(props: IVariableNamesValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.validate = this.validate.bind(this);\n this.state = {isDetailsEditorOpen: false};\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n validate(value: string) {\n validateVarNamesText(value, this.props.input.nullable, this.props.multi, this.props.resource);\n }\n\n render() {\n const textValue = toTextValue(this.props.value);\n const varNames = textValue !== '' ? textValue.split(',').map(name => name.trim()) : [];\n const hasSelectableVariables = this.props.resource && this.props.resource.variables && this.props.resource.variables.length;\n\n return (\n <ControlGroup fill={true} style={VarNameValueEditor.DIV_STYLE}>\n <TextField\n value={this.props.value}\n validator={this.validate}\n placeholder={this.props.multi ? 'Enter variable names, separated by comma' : 'Enter variable name'}\n onChange={this.onChange}\n nullable={this.props.input.nullable}\n style={VarNameValueEditor.TEXT_FIELD_STYLE}\n />\n\n <AnchorButton intent={Intent.PRIMARY}\n onClick={() => this.setState({isDetailsEditorOpen: true})}\n disabled={!hasSelectableVariables}\n style={VarNameValueEditor.BUTTON_STYLE}>...</AnchorButton>\n\n <VariablesDialog isOpen={this.state.isDetailsEditorOpen}\n resource={this.props.resource}\n multiSelect={this.props.multi}\n value={varNames}\n onConfirm={(value: string[]) => {\n const textValue = value ? value.join(', ') : null;\n this.setState({isDetailsEditorOpen: false});\n this.onChange({textValue, value: textValue});\n }}\n onCancel={() => {\n this.setState({isDetailsEditorOpen: false} as any);\n }}/>\n </ControlGroup>\n );\n }\n}\n\nexport function validateVarNamesText(value: string | null, nullable: boolean, multi: boolean, resource: ResourceState) {\n if (!value || value.trim() === '') {\n if (!nullable) {\n throw new Error(multi ? 'One or more variable names expected.' : 'Variable name expected.');\n }\n return;\n }\n const varNames = value.split(',');\n if (multi) {\n for (let varName of varNames) {\n if (varName.trim() === '') {\n throw new Error('Value must be a comma-separated list of variable names.');\n }\n }\n } else {\n if (varNames.length !== 1) {\n throw new Error('Value must be a single variable name.');\n }\n if (varNames[0].trim() === '') {\n throw new Error('Value must be a variable name.');\n }\n }\n if (resource && resource.variables) {\n const validNames = new Set(resource.variables.map(v => v.name));\n for (let varName of varNames) {\n if (!validNames.has(varName)) {\n throw new Error(`\"${varName}\" is not a name of any variable in resource ${resource.name}.`);\n }\n }\n }\n}\n","import {\r\n Card,\r\n Checkbox,\r\n Collapse,\r\n InputGroup,\r\n Intent,\r\n Label,\r\n Tooltip,\r\n Icon,\r\n} from '@blueprintjs/core';\r\nimport { IconNames } from '@blueprintjs/icons';\r\nimport * as React from 'react';\r\n\r\nimport * as types from '../../common/cate-types';\r\nimport { formatDateAsISODateString } from '../../common/format';\r\nimport { DateRangeField, DateRangeFieldValue, validateDateRange } from '../components/field/DateRangeField';\r\nimport { TextFieldValue } from '../components/field/TextField';\r\nimport LongIdLabel from '../components/LongIdLabel';\r\nimport { GLOBAL, Region, RegionValue } from '../components/Region';\r\nimport { DataSourceState, ResourceState, VariableState } from '../state';\r\nimport { VarNameValueEditor } from './editor/VarNameValueEditor';\r\n\r\ntype TimeRangeValue = [string, string];\r\n\r\nexport interface IDataAccessComponentOptions {\r\n\r\n hasTimeConstraint: boolean;\r\n dateRange: DateRangeFieldValue | null;\r\n\r\n hasRegionConstraint: boolean;\r\n region: RegionValue | null;\r\n\r\n hasVariablesConstraint: boolean;\r\n variableNames: TextFieldValue | null;\r\n\r\n isCacheDataSourceSelected?: boolean;\r\n cachedDataSourceId?: string;\r\n cachedDataSourceTitle?: string;\r\n\r\n openDatasetResourceName: string;\r\n}\r\n\r\nexport interface IDataAccessComponentProps {\r\n options: IDataAccessComponentOptions;\r\n onChange: (options: IDataAccessComponentOptions) => any;\r\n dataSource: DataSourceState | null;\r\n isLocalDataSource: boolean;\r\n temporalCoverage: TimeRangeValue | null;\r\n canConstrainRegion: boolean;\r\n canConstrainTime: boolean;\r\n canConstrainVariables: boolean;\r\n canCache: boolean;\r\n}\r\n\r\n\r\nconst WARNINGS_PANEL_STYLE: React.CSSProperties = {\r\n marginTop: 8,\r\n marginBottom: 8,\r\n};\r\n\r\n\r\nconst WARNING_ICON = (<Icon icon={IconNames.WARNING_SIGN} intent={Intent.WARNING}/>);\r\nconst ERROR_ICON = (<Icon icon={IconNames.ERROR} intent={Intent.DANGER}/>);\r\nconst ISSUE_ICON = (<Icon icon={IconNames.ISSUE} intent={Intent.PRIMARY}/>);\r\n\r\nconst TIME_RANGE_STYLE: React.CSSProperties = {\r\n marginTop: 4,\r\n marginBottom: 4,\r\n};\r\n\r\n/**\r\n * A components that yields IDataAccessComponentOptions as value.\r\n *\r\n * @author Norman Fomferra\r\n */\r\nexport class DataAccessComponent extends React.Component<IDataAccessComponentProps, null> {\r\n static readonly VAR_NAMES_INPUT = {name: 'varNames', dataType: 'string', description: null, nullable: true};\r\n static readonly SUB_PANEL_STYLE = {marginTop: '1em'};\r\n static readonly OPTION_CHECK_STYLE = {marginTop: '1em'};\r\n static readonly OPTION_DIV_STYLE = {marginLeft: '2em'};\r\n\r\n constructor(props: IDataAccessComponentProps) {\r\n super(props);\r\n this.onHasTimeConstraintChange = this.onHasTimeConstraintChange.bind(this);\r\n this.onDateRangeChange = this.onDateRangeChange.bind(this);\r\n this.onHasRegionConstraintChange = this.onHasRegionConstraintChange.bind(this);\r\n this.onRegionChange = this.onRegionChange.bind(this);\r\n this.onHasVariablesConstraintChange = this.onHasVariablesConstraintChange.bind(this);\r\n this.onVariableNamesChange = this.onVariableNamesChange.bind(this);\r\n this.onMakeLocalSelectedChange = this.onMakeLocalSelectedChange.bind(this);\r\n this.onMakeLocalDataSourceIdChange = this.onMakeLocalDataSourceIdChange.bind(this);\r\n this.onOpenDatasetResourceNameChange = this.onOpenDatasetResourceNameChange.bind(this);\r\n }\r\n\r\n private onDateRangeChange(dateRange: DateRangeFieldValue) {\r\n this.props.onChange({...this.props.options, dateRange});\r\n }\r\n\r\n private onRegionChange(region: RegionValue) {\r\n this.props.onChange({...this.props.options, region});\r\n }\r\n\r\n private onHasTimeConstraintChange(ev: any) {\r\n this.props.onChange({...this.props.options, hasTimeConstraint: ev.target.checked});\r\n }\r\n\r\n private onHasRegionConstraintChange(ev: any) {\r\n this.props.onChange({...this.props.options, hasRegionConstraint: ev.target.checked});\r\n }\r\n\r\n private onHasVariablesConstraintChange(ev: any) {\r\n this.props.onChange({...this.props.options, hasVariablesConstraint: ev.target.checked});\r\n }\r\n\r\n //noinspection JSUnusedLocalSymbols\r\n private onVariableNamesChange(unused: any, variableNames: TextFieldValue) {\r\n this.props.onChange({...this.props.options, variableNames});\r\n }\r\n\r\n private onMakeLocalSelectedChange(ev: any) {\r\n this.props.onChange({...this.props.options, isCacheDataSourceSelected: ev.target.checked});\r\n }\r\n\r\n private onMakeLocalDataSourceIdChange(ev: any) {\r\n this.props.onChange({...this.props.options, cachedDataSourceId: ev.target.value});\r\n }\r\n\r\n private onOpenDatasetResourceNameChange(ev: any) {\r\n this.props.onChange({...this.props.options, openDatasetResourceName: ev.target.value});\r\n }\r\n\r\n private static dataSourceVarToVariable(dsVar: any): VariableState {\r\n return {name: dsVar.name, units: dsVar.units || '-', dataType: types.DATA_ARRAY_TYPE};\r\n }\r\n\r\n private static dataSourceToResource(dataSource: DataSourceState): ResourceState {\r\n if (dataSource) {\r\n const metaInfo = dataSource.metaInfo;\r\n if (metaInfo && metaInfo.data_vars && metaInfo.data_vars.length) {\r\n return {\r\n name: dataSource.id,\r\n dataType: types.DATASET_TYPE,\r\n variables: metaInfo.data_vars.map(v => DataAccessComponent.dataSourceVarToVariable(v)),\r\n } as ResourceState;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n render() {\r\n if (!this.props.dataSource) {\r\n return null;\r\n }\r\n const options = this.props.options;\r\n\r\n // TODO (forman): turn timeConstraintsPanel,\r\n // regionConstraintsPanel,\r\n // variablesConstraintPanel into components\r\n\r\n let minDate = new Date('1970-01-01');\r\n let maxDate = new Date(Date.now());\r\n const temporalCoverage = this.props.temporalCoverage;\r\n if (temporalCoverage) {\r\n if (temporalCoverage[0]) {\r\n minDate = new Date(temporalCoverage[0]);\r\n }\r\n if (temporalCoverage[1]) {\r\n maxDate = new Date(temporalCoverage[1]);\r\n }\r\n }\r\n\r\n const temporalCoverageText = temporalCoverage && (\r\n <div style={TIME_RANGE_STYLE}>{`Available time range: ${temporalCoverage.join(', ')}`}</div>\r\n );\r\n\r\n const hasTimeConstraint = options.hasTimeConstraint;\r\n const dateRange = hasTimeConstraint ? options.dateRange : null;\r\n const timeConstraintsPanel = (<div style={DataAccessComponent.SUB_PANEL_STYLE}>\r\n <Checkbox\r\n disabled={!temporalCoverage || !this.props.canConstrainTime}\r\n checked={hasTimeConstraint}\r\n label=\"Time constraint\"\r\n onChange={this.onHasTimeConstraintChange}\r\n />\r\n <Collapse isOpen={hasTimeConstraint}>\r\n <div style={DataAccessComponent.OPTION_DIV_STYLE}>\r\n <DateRangeField\r\n nullable={true}\r\n min={minDate}\r\n max={maxDate}\r\n value={dateRange}\r\n onChange={this.onDateRangeChange}\r\n />\r\n {temporalCoverageText}\r\n </div>\r\n </Collapse>\r\n </div>);\r\n\r\n const hasRegionConstraint = options.hasRegionConstraint;\r\n const region = hasRegionConstraint ? options.region || GLOBAL : options.region;\r\n const regionConstraintsPanel = (\r\n <div style={DataAccessComponent.SUB_PANEL_STYLE}>\r\n <Checkbox\r\n disabled={!this.props.canConstrainRegion}\r\n checked={hasRegionConstraint}\r\n label=\"Region constraint\"\r\n onChange={this.onHasRegionConstraintChange}\r\n />\r\n <Collapse isOpen={this.props.canConstrainRegion && hasRegionConstraint}>\r\n <div style={DataAccessComponent.OPTION_DIV_STYLE}>\r\n <Region\r\n value={region}\r\n disabled={!hasRegionConstraint}\r\n onChange={this.onRegionChange}\r\n />\r\n </div>\r\n </Collapse>\r\n </div>\r\n );\r\n\r\n const hasVariablesConstraint = options.hasVariablesConstraint;\r\n const res = DataAccessComponent.dataSourceToResource(this.props.dataSource);\r\n const variablesConstraintPanel = (\r\n <div style={DataAccessComponent.SUB_PANEL_STYLE}>\r\n <Checkbox\r\n disabled={!this.props.canConstrainVariables}\r\n checked={hasVariablesConstraint}\r\n label=\"Variables constraint\"\r\n onChange={this.onHasVariablesConstraintChange}\r\n />\r\n <Collapse isOpen={hasVariablesConstraint}>\r\n <div style={DataAccessComponent.OPTION_DIV_STYLE}>\r\n <VarNameValueEditor input={DataAccessComponent.VAR_NAMES_INPUT}\r\n value={options.variableNames}\r\n onChange={this.onVariableNamesChange}\r\n resource={res}\r\n multi={true}/>\r\n </div>\r\n </Collapse>\r\n </div>\r\n );\r\n\r\n let cacheConfigPanel;\r\n if (this.props.canCache && !this.props.isLocalDataSource) {\r\n const isMakeLocalSelected = options.isCacheDataSourceSelected;\r\n cacheConfigPanel = (<div style={DataAccessComponent.SUB_PANEL_STYLE}>\r\n <Tooltip content={\"If unchecked, remote data will be accessed \" +\r\n \"using an available protocol, e.g. OPeNDAP.\"}>\r\n <Checkbox\r\n checked={isMakeLocalSelected}\r\n label=\"Cache data source (allocates space on disk)\"\r\n onChange={this.onMakeLocalSelectedChange}\r\n />\r\n </Tooltip>\r\n <Collapse isOpen={isMakeLocalSelected}>\r\n <div style={DataAccessComponent.OPTION_DIV_STYLE}>\r\n <Label>\r\n Unique identifier for the new local data source\r\n <span className=\"bp3-text-muted\"> (optional)</span>\r\n <InputGroup\r\n style={{width: '100%'}}\r\n type=\"text\"\r\n value={options.cachedDataSourceId}\r\n onChange={this.onMakeLocalDataSourceIdChange}\r\n />\r\n </Label>\r\n </div>\r\n </Collapse>\r\n </div>\r\n );\r\n }\r\n\r\n const messages: Array<[React.ReactNode, React.ReactNode]> = [];\r\n if (this.props.dataSource.metaInfoStatus === 'ok') {\r\n if (!this.props.canConstrainTime) {\r\n messages.push([WARNING_ICON, \"This dataset has no (recognised) temporal coverage.\"]);\r\n }\r\n if (!this.props.canConstrainRegion) {\r\n messages.push([WARNING_ICON,\r\n <span>This dataset has no (recognised) spatial coverage\r\n and hence it will not show up\r\n in the <strong>World View</strong>.</span>]);\r\n }\r\n if (!this.props.canConstrainVariables) {\r\n messages.push([WARNING_ICON, \"This datasets has no (recognised) variables.\"]);\r\n }\r\n } else if (this.props.dataSource.metaInfoStatus === 'loading') {\r\n messages.push([ISSUE_ICON, \"Please wait while dataset metadata is loaded...\"]);\r\n } else if (this.props.dataSource.metaInfoStatus === 'error') {\r\n messages.push([ERROR_ICON, \"Failed to load dataset metadata.\"]);\r\n }\r\n\r\n let messagesPanel;\r\n if (messages.length > 0) {\r\n messagesPanel = (\r\n <Card style={WARNINGS_PANEL_STYLE}>\r\n {\r\n messages.map(([i, t]) =>\r\n <div>{i}  {t}</div>)\r\n }\r\n </Card>);\r\n }\r\n\r\n return (\r\n <div>\r\n <LongIdLabel\r\n label={this.props.isLocalDataSource\r\n ? 'Data source (local):'\r\n : 'Data source:'}\r\n longId={this.props.dataSource.title}\r\n />\r\n {timeConstraintsPanel}\r\n {regionConstraintsPanel}\r\n {variablesConstraintPanel}\r\n {cacheConfigPanel}\r\n {/*{resourceNamePanel}*/}\r\n {messagesPanel}\r\n </div>\r\n );\r\n }\r\n\r\n static validateOptions(isLocalDataSource: boolean, options: IDataAccessComponentOptions): boolean {\r\n if (!options) {\r\n return false;\r\n }\r\n\r\n let validTimeConstraint = true;\r\n if (options.hasTimeConstraint && options.dateRange) {\r\n validTimeConstraint = !options.dateRange.error;\r\n }\r\n\r\n let validRegion = true;\r\n if (options.hasRegionConstraint && options.region) {\r\n const west = options.region.west.value;\r\n const east = options.region.east.value;\r\n const south = options.region.south.value;\r\n const north = options.region.north.value;\r\n const eps = 360. / 40000.; // 1km\r\n const validWest = west >= -180 && west <= 180;\r\n const validEast = east >= -180 && east <= 180;\r\n const validNorth = north >= -90 && north <= 90;\r\n const validSouth = south >= -90 && south <= 90;\r\n const validEastWest = validWest && validEast && Math.abs(west - east) >= eps;\r\n const validSouthNorth = validSouth && validNorth && (north - south) >= eps;\r\n validRegion = validEastWest && validSouthNorth;\r\n }\r\n\r\n let validVariableNames = true;\r\n if (options.hasVariablesConstraint && options.variableNames) {\r\n validVariableNames = !options.variableNames.error;\r\n }\r\n\r\n let validDataSourceId = true;\r\n if (!isLocalDataSource && options.isCacheDataSourceSelected) {\r\n const makeLocalDataSourceId = options.cachedDataSourceId;\r\n if (makeLocalDataSourceId && !/[^\\\\/:*?\"<>|\\r\\n]+$/im.test(makeLocalDataSourceId)) {\r\n validDataSourceId = false;\r\n }\r\n }\r\n\r\n return validTimeConstraint && validRegion && validVariableNames && validDataSourceId;\r\n }\r\n\r\n static optionsToErrors(options: IDataAccessComponentOptions) {\r\n const inputErrors = {};\r\n if (options.hasTimeConstraint && options.dateRange && options.dateRange.error) {\r\n inputErrors['Time constraint'] = options.dateRange.error\r\n }\r\n if (options.hasVariablesConstraint && options.variableNames && options.variableNames.error) {\r\n inputErrors['Variables constraint'] = options.variableNames.error\r\n }\r\n return inputErrors;\r\n }\r\n\r\n\r\n static optionsToOperationArguments(options: IDataAccessComponentOptions) {\r\n let args = {};\r\n if (options.hasTimeConstraint && options.dateRange && options.dateRange.value) {\r\n const t0 = formatDateAsISODateString(options.dateRange.value[0]);\r\n const t1 = formatDateAsISODateString(options.dateRange.value[1]);\r\n args = {\r\n time_range: `${t0},${t1}`,\r\n };\r\n }\r\n if (options.hasRegionConstraint && options.region) {\r\n const region = options.region;\r\n args = {\r\n ...args,\r\n region: `${region.west.value},${region.south.value},${region.east.value},${region.north.value}`\r\n };\r\n }\r\n if (options.hasVariablesConstraint && options.variableNames) {\r\n const variableNames = options.variableNames.value;\r\n args = {\r\n ...args,\r\n var_names: variableNames\r\n };\r\n }\r\n if (options.isCacheDataSourceSelected) {\r\n args = {\r\n ...args,\r\n force_local: true\r\n };\r\n if (options.cachedDataSourceId) {\r\n args = {\r\n ...args,\r\n local_ds_id: options.cachedDataSourceId\r\n };\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n static defaultOptions(isLocalDataSource: boolean, temporalCoverage: TimeRangeValue): IDataAccessComponentOptions {\r\n let minDate = null;\r\n let maxDate = null;\r\n if (temporalCoverage && temporalCoverage[0]) {\r\n try {\r\n minDate = new Date(temporalCoverage[0]);\r\n } catch (e) {\r\n // ok\r\n }\r\n }\r\n if (temporalCoverage && temporalCoverage[1]) {\r\n try {\r\n maxDate = new Date(temporalCoverage[1]);\r\n } catch (e) {\r\n // ok\r\n }\r\n }\r\n\r\n return {\r\n hasTimeConstraint: false,\r\n dateRange: {value: [minDate, maxDate]},\r\n\r\n hasRegionConstraint: false,\r\n region: null,\r\n\r\n hasVariablesConstraint: false,\r\n variableNames: null,\r\n\r\n isCacheDataSourceSelected: !isLocalDataSource,\r\n cachedDataSourceId: '',\r\n\r\n openDatasetResourceName: '',\r\n };\r\n }\r\n\r\n // static adjustLocalDataSourceName(options: IDataAccessComponentOptions, dataSource: DataSourceState): IDataAccessComponentOptions {\r\n // if (!options.cachedDataSourceId || options.cachedDataSourceId === '') {\r\n // let dataSourceId = dataSource && dataSource.id;\r\n // if (!dataSourceId) {\r\n // dataSourceId = 'unnamed';\r\n // }\r\n // return {...options, cachedDataSourceId: 'local.' + dataSourceId};\r\n // }\r\n // return options;\r\n // }\r\n\r\n static ensureDateRangeIsValidated(options: IDataAccessComponentOptions, temporalCoverage: TimeRangeValue): IDataAccessComponentOptions {\r\n if (options.hasTimeConstraint && options.dateRange && temporalCoverage) {\r\n try {\r\n const minDate = temporalCoverage[0] ? new Date(temporalCoverage[0]) : new Date('1980-01-01');\r\n const maxDate = temporalCoverage[1] ? new Date(temporalCoverage[1]) : new Date(Date.now());\r\n\r\n // re-validate, because min, max may have changed\r\n validateDateRange(options.dateRange.value, true, minDate, maxDate);\r\n return {...options, dateRange: {...options.dateRange, error: null}};\r\n } catch (e) {\r\n return {...options, dateRange: {...options.dateRange, error: e}};\r\n }\r\n }\r\n return options;\r\n }\r\n}\r\n\r\n\r\n","import * as React from 'react';\nimport { ReactChild } from 'react';\nimport { HTMLSelect, Popover, PopoverInteractionKind, PopoverPosition, Switch, Tooltip, Alignment } from '@blueprintjs/core';\nimport { LabelWithType } from '../../components/LabelWithType';\nimport { ResourceState } from '../../state';\nimport * as cateTypes from '../../../common/cate-types';\nimport { isAssignableFrom } from '../../../common/cate-types';\nimport { formatDataTypeName } from '../../../common/format';\n\nexport interface IInputEditorProps {\n name: string;\n dataType: string;\n valueEditor?: JSX.Element;\n tooltipText?: string;\n units?: string;\n resources: Array<ResourceState>;\n resourceName?: string | null;\n isValueEditorShown?: boolean;\n /**\n * Notified if a resource is selected or deselected.\n * @param resourceName The resource name or null\n * @param isValueEditorShown whether the value editor is shown and active\n */\n onChange?: (resourceName: string | null, isValueEditorShown: boolean) => void;\n}\n\n/**\n * A component that is used as editor for an input of some workflow step, e.g. operation.\n *\n * @author Norman Fomferra\n */\nexport class InputEditor extends React.PureComponent<IInputEditorProps, null> {\n\n private static readonly LABEL_STYLE = \n {justifySelf: 'end', justifyContent: 'end'};\n private static readonly EDITOR_SWITCH_STYLE = {margin: 0}\n private static readonly RESOURCE_NAME_STYLE = {justifySelf: 'stretch'};\n\n render() {\n\n let editor;\n if (this.isValueEditorShown()) {\n editor = this.props.valueEditor;\n } else {\n editor = this.renderResourceNameEditor();\n }\n\n const editorSwitch = this.renderEditorSwitch();\n return (\n <React.Fragment key={this.props.name}>\n <LabelWithType style={InputEditor.LABEL_STYLE}\n label={this.props.name}\n units={this.props.units}\n dataType={this.props.dataType}\n tooltipText={this.props.tooltipText}/>\n {editor}\n {editorSwitch}\n </React.Fragment>\n );\n }\n\n private handleChange(resourceName: string, isValueEditorShown: boolean) {\n // console.log('InputEditor: handleChange', resourceName, isValueEditorShown);\n if (this.props.onChange) {\n this.props.onChange(resourceName, isValueEditorShown);\n }\n }\n\n private renderResourceNameEditor() {\n const NULL_VALUE = '__null__';\n const firstResourceOption = (<option key='__first__' value={NULL_VALUE}>Select resource</option>);\n const otherResourceOptions = (this.props.resources || [])\n .filter(resource => this.isDataTypeCompatible(resource))\n .map(resource => <option key={resource.name} value={resource.name}>{resource.name}</option>);\n const resourceOptions = [firstResourceOption].concat(otherResourceOptions);\n\n let editor = (\n <div className=\"bp3-intent-primary\" style={InputEditor.RESOURCE_NAME_STYLE}>\n <HTMLSelect\n fill={true}\n style={InputEditor.RESOURCE_NAME_STYLE}\n value={this.props.resourceName || NULL_VALUE}\n disabled={otherResourceOptions.length === 0}\n onChange={(event: any) => this.handleChange(event.target.value === NULL_VALUE ? null : event.target.value, false)}\n >\n {resourceOptions}\n </HTMLSelect>\n </div>\n );\n\n if (otherResourceOptions.length === 0) {\n editor = (\n <Popover interactionKind={PopoverInteractionKind.HOVER} hoverOpenDelay={0} hoverCloseDelay={0}\n position={PopoverPosition.TOP}\n fill={true}\n >\n {editor}\n <div style={{padding: 8}}>\n This parameter requires a resource of type <span\n style={{color: 'rgba(0,255,0,0.8)'}}>{formatDataTypeName(this.props.dataType, false)}</span>.\n <br/>\n Currently, no resources of this type are available.<br/>\n {renderTypeInstanceHintText(this.props.dataType)}\n </div>\n </Popover>\n );\n }\n\n return editor;\n }\n\n private renderEditorSwitch() {\n const valueEditorShown = this.isValueEditorShown();\n const valueEditorDisabled = this.isValueEditorDisabled();\n const resourceSelectorDisabled = !this.hasCompatibleResources();\n const switchDisabled = valueEditorDisabled || resourceSelectorDisabled;\n return (\n <span>\n <Tooltip\n content={(valueEditorShown ? 'Switch to resource selection' : 'Switch to value entry')\n + (switchDisabled ? ' (disabled)' : '')}>\n <Switch checked={valueEditorShown}\n disabled={switchDisabled}\n alignIndicator={Alignment.LEFT}\n style={InputEditor.EDITOR_SWITCH_STYLE}\n onChange={(event: any) =>\n this.handleChange(this.props.resourceName, event.target.checked)}/>\n </Tooltip>\n </span>\n );\n }\n\n private isDataTypeCompatible(resource) {\n return isAssignableFrom(this.props.dataType, resource.dataType);\n }\n\n private hasCompatibleResources() {\n return (this.props.resources || []).some(resource => this.isDataTypeCompatible(resource));\n }\n\n private isValueEditorDisabled() {\n return !this.props.valueEditor;\n }\n\n private isValueEditorShown() {\n return !!(this.props.isValueEditorShown && this.props.valueEditor);\n }\n}\n\n/**\n * Render a hint text how to produce an instance of the desired target type.\n *\n * @param targetDataType The name of the target data type used in Cate's Python API\n * @returns {string} the hint text.\n */\nfunction renderTypeInstanceHintText(targetDataType: string): ReactChild {\n switch (targetDataType) {\n case cateTypes.DATASET_TYPE:\n return <span>Datasets can be opened from the <b>DATA SOURCES</b> panel.<br/>\n You can also use operations like <code>open_dataset</code> or <br/>\n <code>read_netcdf</code> to produce resources of this type.</span>;\n case cateTypes.DATASET_LIKE_TYPE:\n return <span>Datasets can be opened from the <b>DATA SOURCES</b> panel.<br/>\n You can also use operations like <code>open_dataset</code>, <br/>\n or <code>read_netcdf</code> to produce resources of this type.</span>;\n case cateTypes.DATA_FRAME_TYPE:\n return <span>You can use operations like <code>read_csv</code>, <code>read_geo_data</code><br/>\n to produce resources of this type.</span>;\n case cateTypes.DATA_FRAME_LIKE_TYPE:\n return <span>You can use operations like <code>read_csv</code>, <code>read_geo_data</code>,<br/>\n or <code>open_dataset</code> to produce resources of this type.</span>;\n case cateTypes.ND_ARRAY_TYPE:\n return '';\n case cateTypes.SERIES_TYPE:\n return '';\n }\n return '';\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { Checkbox } from '@blueprintjs/core';\n\nexport function BooleanValueEditor(props: IValueEditorProps<boolean>) {\n return (\n <Checkbox className=\"bp3-large\"\n checked={(props.value as any) || false}\n indeterminate={props.value === null}\n style={{marginTop: '0', marginBottom: '0'}}\n onChange={(event: any) => props.onChange(props.input, event.target.checked)}/>\n );\n}\n","import { HTMLSelect } from '@blueprintjs/core';\nimport * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { OperationInputState } from '../../state';\n\n\nexport class ValueSetValueEditor extends React.PureComponent<IValueEditorProps<any>, null> {\n static readonly NULL_VALUE = '__null__';\n private static readonly VALUE_SELECTOR_STYLE = {justifySelf: 'stretch'};\n\n private onChange(value: any) {\n this.props.onChange(this.props.input, value === ValueSetValueEditor.NULL_VALUE ? null : value);\n }\n\n static isValueSetGiven(input: OperationInputState) {\n return input.valueSet && input.valueSet.length;\n }\n\n render() {\n const valueSet = this.props.input.valueSet;\n const hasValueSet = valueSet && valueSet.length;\n if (!hasValueSet) {\n return null;\n }\n let options = valueSet.map((v, i) => (<option key={i} value={v}>{v}</option>));\n if (this.props.input.nullable) {\n options = [<option key={-1} value={ValueSetValueEditor.NULL_VALUE}/>].concat(...options);\n }\n const value = this.props.value || ValueSetValueEditor.NULL_VALUE;\n return (\n <div className=\"bp3-select\">\n <HTMLSelect\n fill={true}\n style={ValueSetValueEditor.VALUE_SELECTOR_STYLE}\n value={value}\n onChange={(event: any) => this.onChange(event.target.value)}\n >\n {options}\n </HTMLSelect>\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { ValueSetValueEditor } from './ValueSetValueEditor';\nimport { NumericField } from '../../components/field/NumericField';\n\n// TODO (forman): complete me, i.e. use input.valueRange!\n\nexport function IntegerValueEditor(props: IValueEditorProps<number>) {\n if (ValueSetValueEditor.isValueSetGiven(props.input)) {\n return (\n <ValueSetValueEditor input={props.input}\n value={props.value}\n onChange={props.onChange}/>);\n } else {\n return (\n <NumericField isInt={true}\n size={10}\n value={props.value}\n nullable={props.input.nullable}\n onChange={value => props.onChange(props.input, value)}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { ValueSetValueEditor } from './ValueSetValueEditor';\nimport { NumericField } from '../../components/field/NumericField';\n\n// TODO (forman): complete me, i.e. use input.valueRange!\n\nexport function FloatValueEditor(props: IValueEditorProps<number>) {\n if (ValueSetValueEditor.isValueSetGiven(props.input)) {\n return (\n <ValueSetValueEditor input={props.input}\n value={props.value}\n onChange={props.onChange}/>);\n } else {\n return (\n <NumericField isInt={false}\n size={10}\n value={props.value}\n nullable={props.input.nullable}\n onChange={value => props.onChange(props.input, value)}\n />\n );\n }\n}\n\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { ValueSetValueEditor } from './ValueSetValueEditor';\nimport { TextField } from '../../components/field/TextField';\n\n\nexport function TextValueEditor(props: IValueEditorProps<string>) {\n if (ValueSetValueEditor.isValueSetGiven(props.input)) {\n return (\n <ValueSetValueEditor input={props.input}\n value={props.value}\n onChange={props.onChange}/>);\n } else {\n const type = props.input.password ? \"password\" : \"text\";\n return (\n <TextField size={24}\n value={props.value}\n nullable={props.input.nullable}\n onChange={value => props.onChange(props.input, value)}\n type={type}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { Button, Intent, ControlGroup } from '@blueprintjs/core';\n\nimport { HostOS, makeAbsolutePath, makeRelativePath } from '../../../common/paths';\nimport { toTextValue } from '../../components/field/Field';\nimport { IValueEditorProps, ValueEditorCallback, ValueEditorValue } from './ValueEditor';\nimport * as actions from '../../actions';\nimport { OperationInputState, State } from '../../state';\nimport { TextField } from '../../components/field/TextField';\nimport { OpenDialogResult, SaveDialogResult } from \"../../components/desktop/types\";\n\n\nconst DIV_STYLE = {display: 'flex', justifySelf: 'stretch'};\nconst TEXT_FIELD_STYLE = {flexGrow: 1};\nconst BUTTON_STYLE = {flexGrow: 0};\n\ninterface IFileValueEditorOwnProps extends IValueEditorProps<string> {\n}\n\ninterface IFileValueEditorProps extends IFileValueEditorOwnProps {\n hostOS?: HostOS;\n workspaceDir: string | null;\n}\n\nfunction mapStateToProps(state: State, ownProps: IFileValueEditorOwnProps): IFileValueEditorProps {\n return {\n ...ownProps,\n hostOS: state.communication.webAPIServiceInfo.hostOS,\n workspaceDir: state.data.workspace ? state.data.workspace.baseDir : null\n };\n}\n\n// TODO (forman): complete me, i.e. validate file name\n\nconst _FileValueEditor: React.FC<IFileValueEditorProps & DispatchProp<State>> = (\n {\n input,\n value,\n onChange,\n hostOS,\n workspaceDir,\n dispatch\n }) => {\n\n value = (value as any) || '';\n\n const toRelativePath = (path: string) => {\n if (workspaceDir !== null) {\n return makeRelativePath(path, workspaceDir, hostOS);\n }\n return path\n };\n\n const toAbsolutePath = (path: string) => {\n if (workspaceDir !== null) {\n return makeAbsolutePath(workspaceDir, path, hostOS);\n }\n return path\n };\n\n let showFileDialogCallback;\n if (input.fileOpenMode === 'w') {\n showFileDialogCallback = (input: OperationInputState,\n value: ValueEditorValue<string>,\n onChange: ValueEditorCallback<string>) => {\n const saveDialogOptions = {\n defaultPath: toAbsolutePath(toTextValue(value, undefined)),\n filters: input.fileFilters,\n };\n dispatch(actions.showFileSaveDialog(saveDialogOptions, (result: SaveDialogResult) => {\n let filePath = result.filePath;\n if (!result.canceled && filePath) {\n filePath = toRelativePath(filePath);\n onChange(input, filePath);\n }\n }) as any);\n }\n } else {\n showFileDialogCallback = (input: OperationInputState,\n value: ValueEditorValue<string>,\n onChange: ValueEditorCallback<string>) => {\n let properties = input.fileProps as string[];\n const propsSet = new Set(properties);\n if (!propsSet.has('openFile') && !propsSet.has('openDirectory')) {\n propsSet.add('openFile');\n properties = Array.from(propsSet);\n }\n const openDialogOptions = {\n defaultPath: toAbsolutePath(toTextValue(value, undefined)),\n filters: input.fileFilters,\n properties: properties as any,\n };\n dispatch(actions.showFileOpenDialog(openDialogOptions, (result: OpenDialogResult) => {\n let filePaths = result.filePaths;\n if (!result.canceled && filePaths.length > 0) {\n filePaths = filePaths.map(toRelativePath);\n // TODO (forman): file choosers: handle properties=[\"multiSelection\", ...]\n // with result.filePaths.length > 0. In this case concatenate paths in a OS-compliant way,\n // i.e. path separator on Unix is ':', on Windows ';'\n if (properties && properties.find(p => p === 'multiSelection')) {\n console.error('multi-file selection is not yet implemented, returning first entry only');\n }\n onChange(input, filePaths[0]);\n }\n }) as any);\n }\n }\n\n return (\n <ControlGroup fill={true} style={DIV_STYLE}>\n <TextField style={TEXT_FIELD_STYLE}\n value={value}\n placeholder=\"Enter file path\"\n onChange={value => onChange(input, value)}\n nullable={input.nullable}\n />\n <Button intent={Intent.PRIMARY} style={BUTTON_STYLE}\n onClick={() => showFileDialogCallback(input, value, onChange)}>...</Button>\n </ControlGroup>\n );\n}\n\nexport const FileValueEditor = connect(mapStateToProps)(_FileValueEditor);\n","import * as React from 'react';\nimport { ModalDialog } from './ModalDialog';\nimport { GeometryType, validateGeometryValue } from '../../common/geometry-util';\nimport { FormGroup, Label } from '@blueprintjs/core';\n\ninterface IGeometryDialogProps {\n isOpen: boolean;\n value: string;\n onConfirm: (value: string) => void;\n onCancel: () => void;\n geometryType: GeometryType;\n}\n\ninterface IGeometryDialogState {\n value?: string;\n error?: Error;\n}\n\nconst WKT_LINK = (\n <a href=\"https://en.wikipedia.org/wiki/Well-known_text\" target=\"_blank\" rel=\"noopener noreferrer\">Well-Known Text\n (WKT)</a>);\n\nexport class GeometryDialog extends React.Component<IGeometryDialogProps, IGeometryDialogState> {\n static readonly NOMINAL_CLASS = 'bp3-input bp3-fill';\n static readonly ERROR_CLASS = 'bp3-input bp3-fill bp3-intent-danger';\n\n constructor(props: IGeometryDialogProps) {\n super(props);\n this.renderBody = this.renderBody.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.onChange = this.onChange.bind(this);\n this.state = this.toState(this.props.value);\n }\n\n componentWillReceiveProps(props: IGeometryDialogProps) {\n this.setState(this.toState(props.value));\n }\n\n onConfirm() {\n this.props.onConfirm(this.state.value);\n }\n\n onChange(ev: any) {\n this.setState(this.toState(ev.target.value));\n }\n\n canConfirm(): boolean {\n return !this.state.error;\n }\n\n private toState(value: any) {\n let error;\n try {\n validateGeometryValue(value, this.props.geometryType);\n } catch (e) {\n error = e;\n }\n return {value, error};\n }\n\n render() {\n return (\n <ModalDialog isOpen={this.props.isOpen}\n title=\"Geometry Editor\"\n onCancel={this.props.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}/>\n );\n }\n\n renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const value = this.state.value;\n const hasError = !!this.state.error;\n return (\n <FormGroup>\n <Label htmlFor=\"wkt\">\n {`Enter Geometry of type ${this.props.geometryType}`}\n <span className=\"bp3-text-muted\"> (WGS84 coordinates in degree)</span>\n </Label>\n <div className=\"bp3-form-content\" style={{width: '100%'}}>\n <textarea id=\"wkt\"\n className={hasError ? GeometryDialog.ERROR_CLASS : GeometryDialog.NOMINAL_CLASS}\n rows={10}\n dir=\"auto\"\n value={value}\n onChange={this.onChange}/>\n {this.getHelpText()}\n </div>\n </FormGroup>\n );\n }\n\n getHelpText() {\n let errorText;\n if (this.state.error) {\n errorText = (<p>{`Error: ${this.state.error.message}`}</p>);\n }\n\n let helpText;\n if (this.props.geometryType === 'Point') {\n helpText = (<p>Use <code>lon, lat</code> or use {this.props.geometryType} {WKT_LINK} syntax.</p>);\n } else if (this.props.geometryType === 'Polygon') {\n helpText = (\n <p>Use <code>west, south, east, north</code> or use {this.props.geometryType} {WKT_LINK} syntax.</p>);\n } else {\n helpText = (<p>Use {this.props.geometryType} {WKT_LINK} syntax.</p>);\n }\n\n return (<div className=\"bp3-form-helper-text\">{errorText}{helpText}</div>);\n }\n}\n\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, Intent } from '@blueprintjs/core';\nimport { toTextValue } from './Field';\nimport { TextField, TextFieldValue } from './TextField';\nimport { GeometryDialog } from '../GeometryDialog';\nimport { GeometryType, validateGeometryValue } from '../../../common/geometry-util';\nimport { GeometryWKTGetter } from '../../containers/editor/ValueEditor';\n\n\ninterface IGeometryFieldProps {\n value: TextFieldValue | any;\n onChange: (value: TextFieldValue) => void;\n geometryType: GeometryType;\n placeholder?: string;\n size?: number;\n nullable?: boolean;\n disabled?: boolean;\n geometryWKTGetter?: GeometryWKTGetter;\n}\n\ninterface IGeometryFieldState {\n isEditorOpen: boolean;\n}\n\nexport class GeometryField extends React.Component<IGeometryFieldProps, IGeometryFieldState> {\n private static DIV_STYLE = {display: 'flex', justifySelf: 'stretch'};\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n private static BUTTON_STYLE = {flexGrow: 0};\n\n constructor(props: IGeometryFieldProps) {\n super(props);\n this.validateGeometryText = this.validateGeometryText.bind(this);\n this.state = {isEditorOpen: false};\n this.setGeometryWKT = this.setGeometryWKT.bind(this);\n }\n\n validateGeometryText(value: string | null) {\n validateGeometryValue(value, this.props.geometryType);\n }\n\n setGeometryWKT() {\n let wkt;\n try {\n wkt = this.props.geometryWKTGetter && this.props.geometryWKTGetter();\n } catch (error) {\n console.error(error);\n wkt = 'Error: ' + error;\n }\n this.props.onChange({textValue: wkt, value: wkt});\n }\n\n render() {\n let placeholder = this.props.placeholder;\n if (!placeholder) {\n if (this.props.geometryType === 'Point') {\n placeholder = '<lon>,<lat> or Point WKT';\n } else if (this.props.geometryType === 'Polygon') {\n placeholder = '<lon1>,<lat1>,<lon2>,<lat2> or Polygon WKT';\n } else {\n placeholder = `Enter ${this.props.geometryType} WKT`;\n }\n }\n return (\n <ControlGroup style={GeometryField.DIV_STYLE} fill={true}>\n <TextField\n value={this.props.value}\n onChange={this.props.onChange}\n placeholder={placeholder}\n validator={this.validateGeometryText}\n nullable={this.props.nullable}\n style={GeometryField.TEXT_FIELD_STYLE}\n />\n\n <AnchorButton icon=\"selection\" style={GeometryField.BUTTON_STYLE}\n disabled={!this.props.geometryWKTGetter}\n onClick={this.setGeometryWKT}/>\n\n <AnchorButton intent={Intent.PRIMARY} style={GeometryField.BUTTON_STYLE}\n onClick={() => this.setState({isEditorOpen: true})}>...</AnchorButton>\n\n <GeometryDialog isOpen={this.state.isEditorOpen}\n value={toTextValue(this.props.value)}\n onConfirm={(value: string) => {\n this.setState({isEditorOpen: false});\n this.props.onChange({textValue: value, value: value});\n }}\n onCancel={() => {\n this.setState({isEditorOpen: false});\n }}\n geometryType={this.props.geometryType}/>\n </ControlGroup>\n );\n }\n}\n","import * as React from 'react';\nimport { GeometryWKTGetter, IValueEditorProps } from './ValueEditor';\nimport { FieldValue } from '../../components/field/Field';\nimport { GeometryField } from '../../components/field/GeometryField';\nimport { GeometryType } from '../../../common/geometry-util';\n\ninterface IGeometryValueEditorProps extends IValueEditorProps<string> {\n geometryType: GeometryType;\n placeholder?: string;\n size?: number;\n geometryWKTGetter?: GeometryWKTGetter;\n}\n\nexport class GeometryValueEditor extends React.Component<IGeometryValueEditorProps, null> {\n\n constructor(props: IGeometryValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n render() {\n return (\n <GeometryField\n value={this.props.value}\n onChange={this.onChange}\n placeholder={this.props.placeholder}\n size={this.props.size}\n geometryType={this.props.geometryType}\n nullable={this.props.input.nullable}\n geometryWKTGetter={this.props.geometryWKTGetter}/>\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { DateRange } from '@blueprintjs/datetime';\nimport { FieldValue } from '../../components/field/Field';\nimport { DateRangeField } from '../../components/field/DateRangeField';\nimport { parseDate } from '../../components/field/DateField';\n\ninterface ITimeRangeValueEditorProps extends IValueEditorProps<string> {\n}\n\nexport class TimeRangeValueEditor extends React.PureComponent<ITimeRangeValueEditorProps, null> {\n\n constructor(props: ITimeRangeValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<DateRange>) {\n const textValue = value.textValue;\n const error = value.error;\n this.props.onChange(this.props.input, {textValue, value: textValue, error});\n }\n\n render() {\n const valueMinMax = this.getValueMinMax();\n return (\n <DateRangeField\n nullable={this.props.input.nullable}\n min={valueMinMax[0]}\n max={valueMinMax[1]}\n value={this.props.value}\n onChange={this.onChange}\n />\n );\n }\n\n private getValueMinMax(): DateRange {\n let min, max;\n const valueRange = this.props.input.valueRange as [string, string];\n if (valueRange) {\n try {\n min = parseDate(valueRange[0], true);\n max = parseDate(valueRange[1], true);\n } catch (e) {\n // ok\n }\n }\n return [min, max];\n }\n}\n","import * as React from 'react';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\n\ninterface IDimensionsDialogProps {\n isOpen: boolean;\n value: string[];\n dimNames: string[];\n onConfirm: (value: string[]) => void;\n onCancel: () => void;\n multiSelect?: boolean;\n}\n\ninterface IDimensionssDialogState {\n value: string[] | null;\n}\n\nexport class DimensionsDialog extends React.Component<IDimensionsDialogProps, IDimensionssDialogState> {\n\n constructor(props: IDimensionsDialogProps) {\n super(props);\n this.onSelection = this.onSelection.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.state = {value: this.props.value};\n }\n\n private onSelection(value: string[]) {\n this.setState({value});\n }\n\n private onConfirm() {\n this.props.onConfirm(this.state.value);\n }\n\n render() {\n return (\n <ModalDialog\n isOpen={this.props.isOpen}\n title={this.props.multiSelect ? 'Select Dimensions' : 'Select Dimension'}\n icon=\"variable\"\n onConfirm={this.onConfirm}\n onCancel={this.props.onCancel}\n renderBody={this.renderBody}\n />\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const dimensions = this.props.dimNames;\n if (!dimensions) {\n return (<p>{`No dimensions names found for the given source.`}</p>);\n }\n return (\n <ScrollablePanelContent>\n <p>{this.props.multiSelect ? 'Select one or more dimensions:' : 'Select dimension:'}</p>\n <ListBox items={dimensions}\n getItemKey={DimensionsDialog.getDimItemKey}\n renderItem={DimensionsDialog.renderDimItem}\n selectionMode={this.props.multiSelect ? ListBoxSelectionMode.MULTIPLE : ListBoxSelectionMode.SINGLE}\n selection={this.state.value}\n style={{height: '20em'}}\n onSelection={this.onSelection}\n onItemDoubleClick={this.state.value ? this.onConfirm : null}/>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSUnusedLocalSymbols\n private static getDimItemKey(dimension: string) {\n return dimension;\n }\n\n private static renderDimItem(dimension: string) {\n return (\n <div>\n {dimension}\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, Intent } from '@blueprintjs/core';\nimport { IValueEditorProps } from './ValueEditor';\nimport { FieldValue, toTextValue } from '../../components/field/Field';\nimport { TextField } from '../../components/field/TextField';\nimport { DimensionsDialog } from '../DimensionsDialog';\n\ninterface IDimNamesValueEditorProps extends IValueEditorProps<string> {\n dimNames: string[];\n multi?: boolean;\n}\n\ninterface IDimNamesValueEditorState {\n isDetailsEditorOpen: boolean;\n}\n\nexport class DimNameValueEditor extends React.Component<IDimNamesValueEditorProps, IDimNamesValueEditorState> {\n\n private static DIV_STYLE = {width: '24em', display: 'flex', flexGrow: 1};\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n private static BUTTON_STYLE = {flex: 'none'};\n\n constructor(props: IDimNamesValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.validate = this.validate.bind(this);\n this.state = {isDetailsEditorOpen: false};\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n validate(value: string) {\n validateDimNamesText(value, this.props.input.nullable, this.props.multi, this.props.dimNames);\n }\n\n render() {\n const textValue = toTextValue(this.props.value);\n const valueDims = textValue !== '' ? textValue.split(',').map(name => name.trim()) : [];\n const hasSelectableDims = this.props.dimNames && this.props.dimNames.length;\n return (\n <ControlGroup style={DimNameValueEditor.DIV_STYLE}>\n <TextField\n value={this.props.value}\n validator={this.validate}\n size={this.props.multi ? 36 : 24}\n placeholder={this.props.multi ? 'Enter dimension names, separated by comma' : 'Enter dimension name'}\n onChange={this.onChange}\n nullable={this.props.input.nullable}\n style={DimNameValueEditor.TEXT_FIELD_STYLE}\n />\n\n <AnchorButton intent={Intent.PRIMARY}\n onClick={() => this.setState({isDetailsEditorOpen: true})}\n disabled={!hasSelectableDims}\n style={DimNameValueEditor.BUTTON_STYLE}>...</AnchorButton>\n\n <DimensionsDialog isOpen={this.state.isDetailsEditorOpen}\n dimNames={this.props.dimNames}\n multiSelect={this.props.multi}\n value={valueDims}\n onConfirm={(value: string[]) => {\n const textValue = value ? value.join(', ') : null;\n this.setState({isDetailsEditorOpen: false});\n this.onChange({textValue, value: textValue});\n }}\n onCancel={() => {\n this.setState({isDetailsEditorOpen: false} as any);\n }}/>\n </ControlGroup>\n );\n }\n}\n\nexport function validateDimNamesText(value: string | null, nullable: boolean, multi: boolean, dimNames: string[]) {\n if (!value || value.trim() === '') {\n if (!nullable) {\n throw new Error(multi ? 'One or more dimension names expected.' : 'Dimension name expected.');\n }\n return;\n }\n const valueDims = value.split(',');\n if (multi) {\n for (let dimName of valueDims) {\n if (dimName.trim() === '') {\n throw new Error('Value must be a comma-separated list of dimension names.');\n }\n }\n } else {\n if (valueDims.length !== 1) {\n throw new Error('Value must be a single dimension name.');\n }\n if (valueDims[0].trim() === '') {\n throw new Error('Value must be a dimension name.');\n }\n }\n if (dimNames) {\n for (let dimName of valueDims) {\n const dimSet = new Set(dimNames);\n if (!dimSet.has(dimName)) {\n throw new Error(`\"${dimName}\" is not a valid dimension. Valid dimensions are: \"${dimNames}\"`);\n }\n }\n }\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { DateRange } from '@blueprintjs/datetime';\nimport { FieldValue } from '../../components/field/Field';\nimport { DateField, DEFAULT_DATE_RANGE, parseDate } from '../../components/field/DateField';\n\ninterface ITimeValueEditorProps extends IValueEditorProps<string> {\n}\n\nexport class TimeValueEditor extends React.PureComponent<ITimeValueEditorProps, null> {\n\n constructor(props: ITimeValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<Date>) {\n const textValue = value.textValue;\n const error = value.error;\n this.props.onChange(this.props.input, {textValue, value: textValue, error});\n }\n\n render() {\n const valueMinMax = this.getValueMinMax();\n return (\n <DateField\n nullable={this.props.input.nullable}\n min={valueMinMax[0]}\n max={valueMinMax[1]}\n value={this.props.value}\n onChange={this.onChange}\n />\n );\n }\n\n private getValueMinMax(): DateRange {\n let min, max;\n const valueRange = this.props.input.valueRange as [string, string];\n if (valueRange) {\n try {\n min = parseDate(valueRange[0], true);\n max = parseDate(valueRange[1], true);\n } catch (e) {\n min = DEFAULT_DATE_RANGE[0];\n max = DEFAULT_DATE_RANGE[1];\n }\n }\n return [min, max];\n }\n}\n","import * as React from 'react';\nimport AceEditor from 'react-ace';\nimport { ModalDialog } from './ModalDialog';\n\nimport 'brace/mode/python';\nimport 'brace/theme/monokai';\n\ninterface IScriptDialogProps {\n isOpen: boolean;\n value: string;\n onConfirm: (value: string) => void;\n onCancel: () => void;\n scriptLang: string;\n}\n\ninterface IScriptDialogState {\n value?: string;\n error?: Error;\n}\n\n\nconst LIBS = [\n {href: 'http://xarray.pydata.org/en/stable/api.html#top-level-functions', module: 'xr', name: 'xarray'},\n {href: 'http://xarray.pydata.org/en/stable/api.html#universal-functions', module: 'xu', name: 'xarray u-funcs'},\n {href: 'http://pandas.pydata.org/pandas-docs/stable/basics.html', module: 'pd', name: 'Pandas'},\n {href: 'http://pandas.pydata.org/pandas-docs/stable/basics.html', module: 'np', name: 'numpy'},\n];\n\nexport class ScriptDialog extends React.Component<IScriptDialogProps, IScriptDialogState> {\n private static readonly DIALOG_STYLE: React.CSSProperties = {width: '54em'};\n\n constructor(props: IScriptDialogProps) {\n super(props);\n this.renderBody = this.renderBody.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.onChange = this.onChange.bind(this);\n this.state = this.toState(this.props.value);\n }\n\n componentWillReceiveProps(props: IScriptDialogProps) {\n this.setState(this.toState(props.value));\n }\n\n onConfirm() {\n this.props.onConfirm(this.state.value);\n }\n\n onChange(value: string) {\n this.setState(this.toState(value));\n }\n\n canConfirm(): boolean {\n return !this.state.error;\n }\n\n // noinspection JSMethodCanBeStatic\n private toState(value: any) {\n let error;\n try {\n // TODO (nf)\n // validateScriptValue(value, this.props.scriptLang);\n } catch (e) {\n error = e;\n }\n return {value, error};\n }\n\n render() {\n return (\n <ModalDialog isOpen={this.props.isOpen}\n title=\"Script Editor\"\n onCancel={this.props.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n style={ScriptDialog.DIALOG_STYLE}\n />\n );\n }\n\n renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const value = this.state.value;\n // const hasError = !!this.state.error;\n return (\n <React.Fragment>\n <AceEditor mode={this.props.scriptLang}\n theme=\"monokai\"\n width={'100%'}\n fontSize={14}\n showGutter={true}\n highlightActiveLine={true}\n value={value}\n onChange={this.onChange}\n />\n {this.getHelpText()}\n </React.Fragment>\n );\n }\n\n getHelpText() {\n\n const libText = LIBS.map((item, index) => (\n <span><code>{item.module}</code> (<a href={item.href}\n rel=\"noopener noreferrer\"\n target=\"_blank\">{item.name}</a>){index < LIBS.length - 1 ? ', ' : ''}</span>\n ));\n\n return (\n <div className=\"bp3-form-helper-text\" style={{marginTop: '0.5em'}}>\n Please use Python 3.6+ syntax. The following modules are imported by default: {libText}. Other\n modules can be imported: <code>dask</code>, <code>gdal</code>, <code>geos</code> <code>pyshp</code>,\n <code>scipy</code>, <code>shapely</code>.\n </div>\n );\n }\n}\n\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, Intent } from '@blueprintjs/core';\nimport { IFieldProps, toTextValue } from './Field';\nimport { TextField } from './TextField';\nimport { ScriptDialog } from '../ScriptDialog';\n\n\ninterface IScriptFieldProps extends IFieldProps {\n scriptLang: string;\n nullable?: boolean;\n}\n\ninterface IScriptFieldState {\n isEditorOpen: boolean;\n}\n\nexport class ScriptField extends React.Component<IScriptFieldProps, IScriptFieldState> {\n private static DIV_STYLE = {display: 'flex'};\n private static TEXT_FIELD_STYLE = {flexGrow: 1};\n private static BUTTON_STYLE = {flexGrow: 0};\n\n constructor(props: IScriptFieldProps) {\n super(props);\n this.validateScript = this.validateScript.bind(this);\n this.state = {isEditorOpen: false};\n }\n\n validateScript(value: string | null) {\n // TODO (nf)\n }\n\n render() {\n let placeholder = this.props.placeholder;\n return (\n <ControlGroup style={ScriptField.DIV_STYLE} fill={true}>\n <TextField\n value={this.props.value}\n onChange={this.props.onChange}\n size={this.props.size}\n placeholder={placeholder}\n validator={this.validateScript}\n nullable={this.props.nullable}\n style={ScriptField.TEXT_FIELD_STYLE}\n />\n\n <AnchorButton intent={Intent.PRIMARY} style={ScriptField.BUTTON_STYLE}\n onClick={() => this.setState({isEditorOpen: true})}>...</AnchorButton>\n\n <ScriptDialog isOpen={this.state.isEditorOpen}\n value={toTextValue(this.props.value)}\n onConfirm={(value: string) => {\n this.setState({isEditorOpen: false});\n this.props.onChange({textValue: value, value: value});\n }}\n onCancel={() => {\n this.setState({isEditorOpen: false});\n }}\n scriptLang={this.props.scriptLang}/>\n </ControlGroup>\n );\n }\n}\n","import * as React from 'react';\nimport { IValueEditorProps } from './ValueEditor';\nimport { FieldValue } from '../../components/field/Field';\nimport { ScriptField } from '../../components/field/ScriptField';\n\ninterface IScriptValueEditorProps extends IValueEditorProps<string> {\n placeholder?: string;\n size?: number;\n}\n\nexport class ScriptValueEditor extends React.Component<IScriptValueEditorProps, null> {\n\n constructor(props: IScriptValueEditorProps) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(value: FieldValue<string>) {\n this.props.onChange(this.props.input, value);\n }\n\n render() {\n return (\n <ScriptField\n value={this.props.value}\n onChange={this.onChange}\n placeholder={this.props.placeholder}\n size={this.props.size}\n scriptLang={this.props.input.scriptLang}\n nullable={this.props.input.nullable}/>\n );\n }\n}\n\n\n\n","import * as React from 'react';\nimport * as types from '../../../common/cate-types';\nimport { OperationInputState, ResourceState } from '../../state';\nimport { FieldValue } from '../../components/field/Field';\nimport { BooleanValueEditor } from './BooleanValueEditor';\nimport { IntegerValueEditor } from './IntegerValueEditor';\nimport { FloatValueEditor } from './FloatValueEditor';\nimport { TextValueEditor } from './TextValueEditor';\nimport { FileValueEditor } from './FileValueEditor';\nimport { GeometryValueEditor } from './GeometryValueEditor';\nimport { TimeRangeValueEditor } from './TimeRangeValueEditor';\nimport { VarNameValueEditor } from './VarNameValueEditor';\nimport { DimNameValueEditor } from './DimNameValueEditor';\nimport { DictValueEditor } from './DictValueEditor';\nimport { LiteralValueEditor } from './LiteralValueEditor';\nimport { TimeValueEditor } from './TimeValueEditor';\nimport { ScriptValueEditor } from './ScriptValueEditor';\nimport { InputAssignments } from './value-editor-assign';\n\nexport type ValueEditorValue<T> = FieldValue<T> | T | null;\nexport type ValueEditorCallback<T> = (input: OperationInputState, value: ValueEditorValue<T>) => void;\n\nexport type GeometryWKTGetter = (() => string) | null;\n\nexport interface IValueEditorProps<T> {\n input: OperationInputState;\n value: ValueEditorValue<T>;\n onChange: ValueEditorCallback<T>;\n inputAssignments?: InputAssignments;\n resources?: ResourceState[];\n geometryWKTGetter?: GeometryWKTGetter;\n}\n\nexport type ValueEditorFactory<T> = (props: IValueEditorProps<T>) => JSX.Element | null;\n\n/**\n * Provides an appropriate value editor widget for the given input (OperationInputState).\n */\nexport function ValueEditor(props: IValueEditorProps<any>) {\n return renderValueEditor(props);\n}\n\n/**\n * Provides an appropriate value editor widget for the given input (OperationInputState).\n */\nexport function renderValueEditor<T>(props: IValueEditorProps<T>) {\n const factory = getValueEditorFactory(props.input.dataType);\n return factory ? factory(props) : null;\n}\n\nexport function hasValueEditorFactory(dataType: string): boolean {\n return !!getValueEditorFactory(dataType);\n}\n\nexport function getValueEditorFactory(dataType: string): ValueEditorFactory<any> {\n return dataType ? VALUE_EDITOR_FACTORIES[dataType] : null;\n}\n\n//noinspection JSUnusedGlobalSymbols\nexport function registerValueEditorFactory(dataType: string, factory: ValueEditorFactory<any>) {\n VALUE_EDITOR_FACTORIES[dataType] = factory;\n}\n\n///////////////////////////////////////////////////////////////////////////////////////\n\nfunction renderBoolValueEditor(props: IValueEditorProps<boolean>) {\n return <BooleanValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderIntValueEditor(props: IValueEditorProps<number>) {\n return <IntegerValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderFloatValueEditor(props: IValueEditorProps<number>) {\n return <FloatValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderStrValueEditor(props: IValueEditorProps<string>) {\n if (props.input.fileOpenMode) {\n return renderFileValueEditor(props);\n } else if (props.input.scriptLang) {\n return renderScriptValueEditor(props);\n } else {\n return renderTextValueEditor(props);\n }\n}\n\nfunction renderFileValueEditor(props: IValueEditorProps<string>) {\n return <FileValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderScriptValueEditor(props: IValueEditorProps<string>) {\n return <ScriptValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderTextValueEditor(props: IValueEditorProps<string>) {\n return <TextValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderPointLikeValueEditor(props: IValueEditorProps<string>) {\n return <GeometryValueEditor input={props.input} value={props.value} onChange={props.onChange} geometryType=\"Point\"\n size={16} geometryWKTGetter={props.geometryWKTGetter}/>;\n}\n\nfunction renderPolygonLikeValueEditor(props: IValueEditorProps<string>) {\n return <GeometryValueEditor input={props.input} value={props.value} onChange={props.onChange} geometryType=\"Polygon\"\n size={32} geometryWKTGetter={props.geometryWKTGetter}/>;\n}\n\nfunction renderGeometryLikeValueEditor(props: IValueEditorProps<string>) {\n return <GeometryValueEditor input={props.input} value={props.value} onChange={props.onChange}\n geometryType=\"Geometry\" size={32} geometryWKTGetter={props.geometryWKTGetter}/>;\n}\n\nfunction renderTimeLikeValueEditor(props: IValueEditorProps<string>) {\n return <TimeValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderTimeRangeLikeValueEditor(props: IValueEditorProps<string>) {\n return <TimeRangeValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderVarNameLikeValueEditor(props: IValueEditorProps<string>) {\n return <VarNameValueEditor input={props.input} value={props.value} onChange={props.onChange}\n resource={findResource(props)} multi={false}/>;\n}\n\nfunction renderVarNamesLikeValueEditor(props: IValueEditorProps<string>) {\n return <VarNameValueEditor input={props.input} value={props.value} onChange={props.onChange}\n resource={findResource(props)} multi={true}/>;\n}\n\nfunction renderDimNameLikeValueEditor(props: IValueEditorProps<string>) {\n return <DimNameValueEditor input={props.input} value={props.value} onChange={props.onChange}\n dimNames={findDims(props)} multi={false}/>;\n}\n\nfunction renderDimNamesLikeValueEditor(props: IValueEditorProps<string>) {\n return <DimNameValueEditor input={props.input} value={props.value} onChange={props.onChange}\n dimNames={findDims(props)} multi={true}/>;\n}\n\nfunction renderDictLikeValueEditor(props: IValueEditorProps<string>) {\n return <DictValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nfunction renderLiteralValueEditor(props: IValueEditorProps<string>) {\n return <LiteralValueEditor input={props.input} value={props.value} onChange={props.onChange}/>;\n}\n\nconst VALUE_EDITOR_FACTORIES = {\n [types.BOOL_TYPE]: renderBoolValueEditor,\n [types.INT_TYPE]: renderIntValueEditor,\n [types.FLOAT_TYPE]: renderFloatValueEditor,\n [types.STR_TYPE]: renderStrValueEditor,\n [types.POINT_LIKE_TYPE]: renderPointLikeValueEditor,\n [types.POLYGON_LIKE_TYPE]: renderPolygonLikeValueEditor,\n [types.GEOMETRY_LIKE_TYPE]: renderGeometryLikeValueEditor,\n [types.TIME_LIKE_TYPE]: renderTimeLikeValueEditor,\n [types.TIME_RANGE_LIKE_TYPE]: renderTimeRangeLikeValueEditor,\n [types.VAR_NAME_LIKE_TYPE]: renderVarNameLikeValueEditor,\n [types.VAR_NAMES_LIKE_TYPE]: renderVarNamesLikeValueEditor,\n [types.DIM_NAME_LIKE_TYPE]: renderDimNameLikeValueEditor,\n [types.DIM_NAMES_LIKE_TYPE]: renderDimNamesLikeValueEditor,\n [types.DICT_LIKE_TYPE]: renderDictLikeValueEditor,\n [types.FILE_LIKE_TYPE]: renderFileValueEditor,\n [types.LITERAL_TYPE]: renderLiteralValueEditor,\n};\n\n///////////////////////////////////////////////////////////////////////////////////////\n\n\nfunction findResource(props: IValueEditorProps<any>) {\n const valueSetSource = props.input.valueSetSource;\n const resources = props.resources;\n const inputAssignments = props.inputAssignments;\n let resource;\n if (valueSetSource && resources && inputAssignments) {\n const inputAssignment = inputAssignments[valueSetSource];\n const resourceName = inputAssignment.resourceName;\n if (inputAssignment && resourceName && !inputAssignment.isValueUsed) {\n resource = resources.find(r => r.name === resourceName);\n }\n }\n return resource;\n}\n\n\nfunction findDims(props: IValueEditorProps<any>) {\n const valueSetSource = props.input.valueSetSource.split('.');\n const resources = props.resources;\n const inputAssignments = props.inputAssignments;\n\n let resource;\n let variable;\n let dimNames;\n\n if (valueSetSource[0] && resources && inputAssignments) {\n const inputAssignment = inputAssignments[valueSetSource[0]];\n const resourceName = inputAssignment.resourceName;\n if (inputAssignment && resourceName && !inputAssignment.isValueUsed) {\n resource = resources.find(r => r.name === resourceName);\n }\n }\n\n if (resource) {\n const variables = resource.variables;\n if (valueSetSource[1] && variables && inputAssignments) {\n const inputAssignment = inputAssignments[valueSetSource[1]];\n if (inputAssignment && inputAssignment.constantValue) {\n const varName = inputAssignment.constantValue.textValue;\n variable = variables.find(v => v.name === varName);\n }\n\n }\n }\n\n if (valueSetSource[0] && valueSetSource[1] && variable) {\n dimNames = variable.dimNames;\n } else if (valueSetSource[0] && !valueSetSource[1] && resource) {\n dimNames = resource.coordVariables.map(c => c.name);\n }\n\n return dimNames;\n}\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { AnchorButton, FormGroup, Icon, Tooltip } from '@blueprintjs/core';\nimport {\n DialogState,\n OperationInputState,\n OperationKWArgs,\n OperationState,\n ResourceState,\n State,\n WorkflowStepState,\n WorkspaceState\n} from '../state';\nimport { InputEditor } from './editor/InputEditor';\nimport { updatePropertyObject } from '../../common/objutil';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { isFieldValue } from '../components/field/Field';\nimport { GeometryWKTGetter, hasValueEditorFactory, renderValueEditor } from './editor/ValueEditor';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { isDefined, isString, isUndefined, isUndefinedOrNull } from '../../common/types';\nimport { InputAssignment, InputAssignments } from './editor/value-editor-assign';\nimport {\n EDIT_OPERATION_STEP_DIALOG_ID,\n NEW_CTX_OPERATION_STEP_DIALOG_ID,\n NEW_OPERATION_STEP_DIALOG_ID\n} from './operation-step-dialog-ids';\n\ntype InputErrors = { [inputName: string]: Error };\n\ninterface IOperationStepDialogOwnProps {\n id: string;\n operationStep?: WorkflowStepState | null;\n}\n\ninterface IOperationStepDialogProps extends DialogState, IOperationStepDialogOwnProps {\n operation?: OperationState;\n inputAssignments?: InputAssignments;\n workspace: WorkspaceState;\n resName: string;\n geometryWKTGetter: GeometryWKTGetter;\n}\n\ninterface IOperationStepDialogState {\n inputAssignments: InputAssignments;\n inputErrors?: InputErrors;\n isValidationDialogOpen?: boolean;\n}\n\nfunction mapStateToProps(state: State, ownProps: IOperationStepDialogOwnProps): IOperationStepDialogProps {\n const id = ownProps.id;\n const dialogState = selectors.dialogStateSelector(id)(state);\n const isOpen = dialogState.isOpen;\n\n if (!isOpen) {\n return {id, isOpen: false} as any;\n }\n\n let operation, inputAssignments, resName = null;\n if (id === NEW_OPERATION_STEP_DIALOG_ID) {\n operation = selectors.selectedOperationSelector(state);\n if (!operation) {\n console.error('OperationStepDialog: operation is undefined: dialog id =', id);\n return {id, isOpen: false} as any;\n }\n // Assign inputs from restored values\n const inputAssignmentsMap = (dialogState as any).inputAssignments;\n inputAssignments = inputAssignmentsMap && inputAssignmentsMap[operation.qualifiedName];\n } else if (id === NEW_CTX_OPERATION_STEP_DIALOG_ID) {\n operation = selectors.selectedCtxOperationSelector(state);\n if (!operation) {\n console.error('OperationStepDialog: operation is undefined: dialog id =', id);\n return {id, isOpen: false} as any;\n }\n // Assign inputs from context settings\n inputAssignments = (dialogState as any).inputAssignments;\n } else if (id === EDIT_OPERATION_STEP_DIALOG_ID) {\n const operationStep = ownProps.operationStep;\n operation = (selectors.operationsSelector(state) || [])\n .find(op => op.name === operationStep.op || op.qualifiedName === operationStep.op);\n if (!operation) {\n console.error('OperationStepDialog: operation is undefined: dialog id =', id);\n return {id, isOpen: false} as any;\n }\n inputAssignments = getInputAssignmentsFromOperationStep(operation, operationStep);\n resName = operationStep.id;\n } else {\n console.error('OperationStepDialog: unknown dialog id =', id);\n return {id, isOpen: false} as any;\n }\n\n const workspace = selectors.workspaceSelector(state);\n const geometryWKTGetter = selectors.selectedGeometryWKTGetterSelector(state);\n\n return {id, isOpen, workspace, geometryWKTGetter, resName, operation, inputAssignments};\n}\n\nclass OperationStepDialog extends React.Component<IOperationStepDialogProps & DispatchProp<State>, IOperationStepDialogState> {\n\n private static readonly DIALOG_STYLE: React.CSSProperties = {width: '42em'};\n private static readonly NO_STATE = {inputAssignments: {}};\n private static readonly PARAMETER_PANEL_STYLE = {\n display: 'grid',\n gridTemplateColumns: 'auto auto 28px',\n alignItems: 'center',\n justifyItems: 'stretch',\n rowGap: '1ex',\n columnGap: '0.5em'\n };\n\n constructor(props: IOperationStepDialogProps & DispatchProp<State>) {\n super(props);\n this.onConstantValueChange = this.onConstantValueChange.bind(this);\n this.onResourceNameChange = this.onResourceNameChange.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onValidate = this.onValidate.bind(this);\n this.onDefaults = this.onDefaults.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.hideValidationDialog = this.hideValidationDialog.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.renderExtraActions = this.renderExtraActions.bind(this);\n this.state = OperationStepDialog.mapPropsToState(props);\n }\n\n componentWillReceiveProps(nextProps: IOperationStepDialogProps) {\n this.setState(OperationStepDialog.mapPropsToState(nextProps));\n }\n\n static mapPropsToState(props: IOperationStepDialogProps): IOperationStepDialogState {\n if (!props.isOpen) {\n return OperationStepDialog.NO_STATE;\n }\n const operation = props.operation;\n const inputAssignments = getInitialInputAssignments(operation.inputs, props.inputAssignments, false);\n return {inputAssignments};\n }\n\n private onConfirm() {\n const isEditMode = this.props.id === EDIT_OPERATION_STEP_DIALOG_ID;\n const isNewMode = !isEditMode;\n const operation = this.props.operation;\n let inputAssignmentsMap;\n if (isNewMode) {\n // Only store input assignments when creating new operation steps\n inputAssignmentsMap = {[operation.qualifiedName]: this.state.inputAssignments};\n }\n this.props.dispatch(actions.hideOperationStepDialog(this.props.id, inputAssignmentsMap) as any);\n this.props.dispatch(actions.setWorkspaceResource(operation.qualifiedName,\n this.getInputArguments(),\n this.props.resName,\n isEditMode,\n `Executing operation \"${operation.name}\"`) as any);\n }\n\n private canConfirm() {\n return !this.getInputErrors();\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideOperationStepDialog(this.props.id) as any);\n }\n\n private onValidate() {\n let inputErrors = this.getInputErrors();\n this.setState({isValidationDialogOpen: true, inputErrors} as any);\n }\n\n private hideValidationDialog() {\n this.setState({isValidationDialogOpen: false} as any);\n }\n\n private getInputArguments(): OperationKWArgs {\n return getInputArguments(this.props.operation.inputs, this.state.inputAssignments);\n }\n\n private getInputErrors(): { [name: string]: Error } {\n return getInputErrors(this.props.operation.inputs, this.state.inputAssignments);\n }\n\n private onDefaults() {\n const inputAssignments = getInitialInputAssignments(this.props.operation.inputs,\n this.state.inputAssignments, true);\n this.setState({inputAssignments} as any);\n }\n\n private setInputAssignment(input: OperationInputState, inputAssignment: InputAssignment) {\n //console.log('OperationStepDialog: setInputAssignment: inputAssignment =', inputAssignment);\n const inputAssignments = updatePropertyObject(this.state.inputAssignments, input.name, inputAssignment);\n //console.log('OperationStepDialog: setInputAssignment: inputAssignments =', inputAssignments);\n this.setState({inputAssignments} as any);\n };\n\n private onResourceNameChange(input: OperationInputState, resourceName: string, isValueUsed: boolean) {\n if (resourceName === '' && input.nullable) {\n resourceName = null;\n }\n this.setInputAssignment(input, {resourceName, isValueUsed} as InputAssignment);\n }\n\n private onConstantValueChange(input: OperationInputState, value: any) {\n this.setInputAssignment(input, {constantValue: value, isValueUsed: true} as InputAssignment);\n }\n\n render() {\n const isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n const operation = this.props.operation;\n let confirmTitle, dialogTitle, tooltipText;\n if (this.props.id === EDIT_OPERATION_STEP_DIALOG_ID) {\n confirmTitle = 'Edit Step';\n dialogTitle = `Edit Operation Step - ${operation.name}`;\n tooltipText = 'Edit operation step inputs and recompute output.';\n } else {\n confirmTitle = 'Add Step';\n dialogTitle = `Add Operation Step - ${operation.name}`;\n tooltipText = 'Add a new operation step to the workspace’s workflow.';\n }\n\n return (\n <ModalDialog\n isOpen={true}\n icon=\"function\"\n title={dialogTitle}\n confirmTooltip={tooltipText}\n confirmTitle={confirmTitle}\n confirmIconName=\"play\"\n onConfirm={this.onConfirm}\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n renderExtraActions={this.renderExtraActions}\n style={OperationStepDialog.DIALOG_STYLE}\n />\n );\n }\n\n renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const operation = this.props.operation;\n\n const bodyHeaderText = (\n <p key='header' style={{marginBottom: '1em'}}>\n Adjustable parameter(s) for operation <code>{operation.name}</code>:\n </p>\n );\n\n const bodyFooterText = (\n <p key='footer' style={{marginTop: '1em'}}>\n Pressing <Icon icon=\"play\"/> will add operation <code>{operation.name}</code> as a new\n workflow step to the current workspace. The result of the step is a new <em>resource</em> which can\n be used as input for other operations. You can remove the step or change its parameters later.\n </p>\n );\n\n const parameterPanel = this.renderParameterPanel();\n\n return (\n <FormGroup>\n {bodyHeaderText}\n <div>\n {parameterPanel}\n <div className=\"bp3-form-helper-text\">{bodyFooterText}</div>\n </div>\n <ValidationDialog isOpen={this.state.isValidationDialogOpen}\n inputErrors={this.state.inputErrors}\n onConfirm={this.hideValidationDialog}\n />\n </FormGroup>\n );\n }\n\n renderExtraActions() {\n if (!this.props.isOpen) {\n return null;\n }\n\n return [\n <Tooltip key='validate' content=\"Validate current input values\">\n <AnchorButton onClick={this.onValidate}>Validate</AnchorButton>\n </Tooltip>,\n <Tooltip key='defaults' content=\"Set all inputs back to default values\">\n <AnchorButton onClick={this.onDefaults}>Defaults</AnchorButton>\n </Tooltip>,\n ];\n }\n\n renderParameterPanel(): JSX.Element {\n const operation = this.props.operation;\n if (!operation.inputs || !operation.inputs.length) {\n return null;\n }\n const inputEditors = renderInputEditors(\n operation.inputs,\n this.state.inputAssignments,\n this.props.workspace.resources,\n this.props.geometryWKTGetter,\n this.onConstantValueChange,\n this.onResourceNameChange\n );\n return (<div key='parameterPanel'\n style={OperationStepDialog.PARAMETER_PANEL_STYLE}>\n {inputEditors}\n </div>);\n }\n}\n\nexport default connect(mapStateToProps)(OperationStepDialog);\n\nfunction getInputAssignmentsFromOperationStep(operation: OperationState, operationStep: WorkflowStepState): InputAssignments {\n const inputAssignments = {};\n for (let input of operation.inputs) {\n const inputPort = operationStep.inputs[input.name];\n if (inputPort) {\n const resourceName = isString(inputPort) ? inputPort : inputPort.source;\n if (resourceName) {\n inputAssignments[input.name] = {resourceName, isValueUsed: false};\n } else if (!isUndefined(inputPort.value)) {\n let constantValue = inputPort.value;\n inputAssignments[input.name] = {constantValue, isValueUsed: true};\n }\n }\n }\n return inputAssignments;\n}\n\nfunction getInitialInputAssignments(inputs: OperationInputState[],\n lastInputAssignments?: InputAssignments,\n forceDefaults?: boolean): InputAssignments {\n const inputAssignments = {};\n inputs.forEach((input: OperationInputState) => {\n const isValueUsed = hasValueEditorFactory(input.dataType);\n const hasDefaultValue = isDefined(input.defaultValue);\n const constantValue = hasDefaultValue ? input.defaultValue : null;\n const resourceName = null;\n const defaultInputAssignment = {constantValue, isValueUsed, resourceName};\n const lastInputAssignment = lastInputAssignments && lastInputAssignments[input.name];\n let inputAssignment;\n if (!lastInputAssignment || forceDefaults) {\n inputAssignment = defaultInputAssignment;\n } else {\n inputAssignment = lastInputAssignment || defaultInputAssignment;\n }\n inputAssignments[input.name] = inputAssignment;\n });\n return inputAssignments;\n}\n\nfunction renderInputEditors(inputs: OperationInputState[],\n inputAssignments: InputAssignments,\n resources: ResourceState[],\n geometryWKTGetter: GeometryWKTGetter,\n onConstantValueChange,\n onResourceNameChange): JSX.Element[] {\n return inputs\n .filter(input => !input.noUI)\n .map((input: OperationInputState) => {\n const inputAssignment = inputAssignments[input.name];\n const constantValue = inputAssignment.constantValue;\n const valueEditor = renderValueEditor({\n input,\n inputAssignments,\n resources,\n geometryWKTGetter,\n value: constantValue,\n onChange: onConstantValueChange\n });\n return (\n <InputEditor key={input.name}\n resources={resources}\n name={input.name}\n dataType={input.dataType}\n units={input.units}\n tooltipText={input.description}\n onChange={(resourceName, isValueUsed) => onResourceNameChange(input, resourceName, isValueUsed)}\n isValueEditorShown={inputAssignment.isValueUsed}\n resourceName={inputAssignment.resourceName}\n valueEditor={valueEditor}/>\n );\n });\n}\n\nfunction getInputArguments(inputs: OperationInputState[],\n inputAssignments: InputAssignments): OperationKWArgs {\n const inputArguments = {};\n inputs.forEach((input) => {\n const inputAssignment = inputAssignments[input.name];\n if (inputAssignment) {\n let inputArgument;\n if (inputAssignment.isValueUsed) {\n const constantValue = inputAssignment.constantValue;\n const value = isFieldValue(constantValue) ? constantValue.value : constantValue;\n inputArgument = {value};\n } else {\n inputArgument = {source: inputAssignment.resourceName};\n }\n inputArguments[input.name] = inputArgument;\n }\n });\n return inputArguments;\n}\n\nfunction getInputErrors(inputs: OperationInputState[],\n inputAssignments: InputAssignments): InputErrors {\n let inputErrors = {};\n let hasInputErrors = false;\n inputs.forEach((input) => {\n const inputAssignment = inputAssignments[input.name];\n if (inputAssignment) {\n if (inputAssignment.isValueUsed) {\n const constantValue = inputAssignment.constantValue;\n const error = isFieldValue(constantValue) && constantValue.error;\n if (error) {\n inputErrors[input.name] = error;\n hasInputErrors = true;\n } else if (isUndefinedOrNull(constantValue) && !input.nullable) {\n inputErrors[input.name] = new Error('Value must be given.');\n hasInputErrors = true;\n }\n } else {\n const resourceName = inputAssignment.resourceName;\n if (isUndefinedOrNull(resourceName) && !input.nullable) {\n inputErrors[input.name] = new Error('Resource must be specified.');\n hasInputErrors = true;\n }\n }\n } else {\n inputErrors[input.name] = new Error('Value must be specified.');\n hasInputErrors = true;\n }\n\n });\n //console.log('getInputErrors: ', inputErrors);\n return hasInputErrors ? inputErrors : null;\n}\n\ninterface IValidationDialogProps {\n isOpen: boolean;\n inputErrors: InputErrors;\n onConfirm: () => void;\n}\n\nclass ValidationDialog extends React.Component<IValidationDialogProps, null> {\n\n constructor(props: IValidationDialogProps) {\n super(props);\n this.onConfirm = this.onConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n }\n\n private onConfirm() {\n this.props.onConfirm();\n }\n\n private countResourceProblems(): number {\n const inputErrors = this.props.inputErrors;\n let count = 0;\n Object.getOwnPropertyNames(inputErrors).forEach(inputName => {\n const error = inputErrors[inputName];\n if (error.message && (error.message.includes('resource') || error.message.includes('Resource'))) {\n count++;\n }\n });\n return count;\n }\n\n render() {\n return (\n <ModalDialog isOpen={this.props.isOpen}\n title=\"Input Validation\"\n onConfirm={this.onConfirm}\n noCancelButton={true}\n onCancel={this.onConfirm}\n renderBody={this.renderBody}/>\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n const inputErrors = this.props.inputErrors;\n if (!inputErrors) {\n return (<p>No problems encountered.</p>);\n }\n const resourceProblems = this.countResourceProblems();\n const body = renderInputErrors(inputErrors, resourceProblems);\n if (!body) {\n return (<p>No problems encountered.</p>);\n }\n return body;\n }\n}\n\nexport function renderInputErrors(inputErrors: InputErrors, resourceProblems?: number) {\n const problems = [];\n Object.getOwnPropertyNames(inputErrors).forEach(inputName => {\n let error = inputErrors[inputName];\n problems.push(<li key={inputName}>{inputName}: {error.message}</li>);\n });\n\n let introText;\n if (problems.length === 0) {\n return null;\n } else if (problems.length === 1) {\n introText = 'The following problem has been encountered:';\n } else {\n introText = `The following ${problems.length} problems have been encountered:`;\n }\n\n const footerText = resourceProblems && resourceProblems > 0 ? (<p>This operation has\n parameter(s) which require specifying a <em>resource</em>. When there are no compatible resources yet,\n you may consider opening a data source or use one of the <code>read_...</code> operations first.\n </p>) : null;\n\n return (\n <FormGroup>\n {introText}\n <div className=\"bp3-form-content\">\n {problems}\n <div className=\"bp3-form-helper-text\">{footerText}</div>\n </div>\n </FormGroup>\n );\n}\n\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { DataSourceState, DataStoreState, DialogState, State } from '../state';\nimport { isLocalDataStore, isRemoteDataStore } from '../state-util';\nimport { ModalDialog } from '../components/ModalDialog';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { DataAccessComponent, IDataAccessComponentOptions } from './DataAccessComponent';\nimport { renderInputErrors } from './OperationStepDialog';\n\ntype TimeRangeValue = [string, string];\n\n\ninterface IOpenDatasetDialogProps {\n isOpen: boolean;\n dataStore: DataStoreState | null;\n dataSource: DataSourceState | null;\n temporalCoverage: TimeRangeValue | null;\n canConstrainTime: boolean;\n canConstrainRegion: boolean;\n canConstrainVariables: boolean;\n canCache: boolean;\n options: IDataAccessComponentOptions;\n}\n\ninterface IOpenDatasetDialogState extends DialogState {\n options: IDataAccessComponentOptions;\n}\n\nfunction mapStateToProps(state: State): IOpenDatasetDialogProps {\n const dialogState = selectors.dialogStateSelector(OpenDatasetDialog.DIALOG_ID)(state);\n return {\n isOpen: dialogState.isOpen,\n dataStore: selectors.selectedDataStoreSelector(state),\n dataSource: selectors.selectedDataSourceSelector(state),\n temporalCoverage: selectors.selectedDataSourceTemporalCoverageSelector(state),\n canConstrainTime: selectors.canConstrainDataSourceTimeSelector(state),\n canConstrainRegion: selectors.canConstrainDataSourceRegionSelector(state),\n canConstrainVariables: selectors.canConstrainDataSourceVariablesSelector(state),\n canCache: selectors.canCacheDataSourceSelector(state),\n options: (dialogState as any).options as IDataAccessComponentOptions,\n };\n}\n\nclass OpenDatasetDialog extends React.Component<IOpenDatasetDialogProps & DispatchProp<State>, IOpenDatasetDialogState> {\n static readonly DIALOG_ID = 'openDatasetDialog';\n\n constructor(props: IOpenDatasetDialogProps & DispatchProp<State>) {\n super(props);\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.onOptionsChange = this.onOptionsChange.bind(this);\n this.state = OpenDatasetDialog.mapPropsToState(props);\n }\n\n componentWillReceiveProps(nextProps: IOpenDatasetDialogProps): void {\n this.setState(OpenDatasetDialog.mapPropsToState(nextProps));\n }\n\n static mapPropsToState(nextProps: IOpenDatasetDialogProps): IOpenDatasetDialogState {\n let options: IDataAccessComponentOptions = nextProps.options\n || DataAccessComponent.defaultOptions(isLocalDataStore(nextProps.dataStore),\n nextProps.temporalCoverage);\n const isCacheDataSourceSelected = nextProps.canCache && options.isCacheDataSourceSelected;\n options = DataAccessComponent.ensureDateRangeIsValidated(options, nextProps.temporalCoverage);\n options = {...options, isCacheDataSourceSelected}\n return {options};\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(OpenDatasetDialog.DIALOG_ID));\n }\n\n private canConfirm(): boolean {\n return DataAccessComponent.validateOptions(this.isLocalDataStore, this.state.options);\n }\n\n private onConfirm() {\n const isCacheDataSourceSelected = this.props.canCache && this.state.options.isCacheDataSourceSelected;\n const options: IDataAccessComponentOptions = {...this.state.options, isCacheDataSourceSelected};\n // Clear cachedDataSourceId, so on next props, we can create a new default from selected data source\n // clear cachedDataSourceTitle, hasVariablesConstraint, variableNames, too\n // keep time and geo constraint\n const dsDefault = this.isRemoteDataStore ? '' : undefined;\n const dialogState = {\n options:\n {\n ...options,\n makeLocalDataSourceId: dsDefault,\n makeLocalDataSourceTitle: dsDefault,\n hasVariablesConstraint: false,\n variableNames: null,\n }\n };\n this.props.dispatch(actions.hideDialog(OpenDatasetDialog.DIALOG_ID, dialogState));\n this.props.dispatch(actions.openDataset(\n this.props.dataStore.id,\n this.props.dataSource.id,\n DataAccessComponent.optionsToOperationArguments(this.state.options),\n this.isRemoteDataStore && isCacheDataSourceSelected\n ) as any);\n // Save modified state\n this.setState(dialogState);\n }\n\n private onOptionsChange(options: IDataAccessComponentOptions) {\n this.setState({options});\n }\n\n private get isRemoteDataStore() {\n return isRemoteDataStore(this.props.dataStore);\n }\n\n private get isLocalDataStore() {\n return isLocalDataStore(this.props.dataStore);\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n const cacheSelected = this.isRemoteDataStore && this.state.options.isCacheDataSourceSelected;\n const inputErrors = DataAccessComponent.optionsToErrors(this.state.options);\n const confirmTooltip = renderInputErrors(inputErrors);\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title={'Open Dataset'}\n icon=\"database\"\n confirmTitle={cacheSelected ? 'Cache and Open' : 'Open'}\n confirmIconName={\"folder-shared-open\"}\n confirmTooltip={confirmTooltip}\n onCancel={this.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n return (\n <DataAccessComponent\n options={this.state.options}\n onChange={this.onOptionsChange}\n dataSource={this.props.dataSource}\n isLocalDataSource={this.isLocalDataStore}\n temporalCoverage={this.props.temporalCoverage}\n canConstrainTime={this.props.canConstrainTime}\n canConstrainRegion={this.props.canConstrainRegion}\n canConstrainVariables={this.props.canConstrainVariables}\n canCache={this.props.canCache}\n />\n );\n }\n}\n\nexport default connect(mapStateToProps)(OpenDatasetDialog);\n\n","import * as React from 'react';\r\nimport { connect, DispatchProp } from 'react-redux';\r\nimport { Checkbox } from '@blueprintjs/core';\r\n\r\nimport * as actions from '../actions';\r\nimport LongIdLabel from '../components/LongIdLabel';\r\nimport { ModalDialog } from '../components/ModalDialog';\r\nimport * as selectors from '../selectors';\r\nimport { DataSourceState, DialogState, State } from '../state';\r\n\r\n\r\ninterface IRemoveDatasetDialogProps {\r\n isOpen: boolean;\r\n dataSource: DataSourceState | null;\r\n}\r\n\r\ninterface IRemoveDatasetDialogState extends DialogState {\r\n removeFiles: boolean;\r\n}\r\n\r\nfunction mapStateToProps(state: State): IRemoveDatasetDialogProps {\r\n const dialogState = selectors.dialogStateSelector(RemoveDatasetDialog.DIALOG_ID)(state);\r\n return {\r\n isOpen: dialogState.isOpen,\r\n dataSource: selectors.selectedDataSourceSelector(state),\r\n };\r\n}\r\n\r\nclass RemoveDatasetDialog extends React.Component<IRemoveDatasetDialogProps & DispatchProp<State>, IRemoveDatasetDialogState> {\r\n static readonly DIALOG_ID = 'removeDatasetDialog';\r\n\r\n constructor(props: IRemoveDatasetDialogProps & DispatchProp<State>) {\r\n super(props);\r\n this.state = {removeFiles: false};\r\n this.onCancel = this.onCancel.bind(this);\r\n this.onConfirm = this.onConfirm.bind(this);\r\n this.renderBody = this.renderBody.bind(this);\r\n this.onRemoveFilesChange = this.onRemoveFilesChange.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps: IRemoveDatasetDialogProps) {\r\n this.setState({removeFiles: false});\r\n }\r\n\r\n private onCancel() {\r\n this.props.dispatch(actions.hideDialog(RemoveDatasetDialog.DIALOG_ID));\r\n }\r\n\r\n private onConfirm() {\r\n this.props.dispatch(actions.hideDialog(RemoveDatasetDialog.DIALOG_ID, this.state));\r\n this.props.dispatch(actions.removeLocalDataset(this.props.dataSource.id, this.state.removeFiles) as any);\r\n }\r\n\r\n private onRemoveFilesChange(ev: any) {\r\n this.setState({removeFiles: ev.target.checked} as IRemoveDatasetDialogState);\r\n }\r\n\r\n render() {\r\n let isOpen = this.props.isOpen;\r\n if (!isOpen || !this.props.dataSource) {\r\n return null;\r\n }\r\n\r\n return (\r\n <ModalDialog\r\n isOpen={isOpen}\r\n title=\"Remove Data Source\"\r\n icon=\"trash\"\r\n confirmTitle=\"Remove\"\r\n confirmIconName=\"delete\"\r\n confirmTooltip=\"Remove the file data source.\"\r\n onCancel={this.onCancel}\r\n onConfirm={this.onConfirm}\r\n renderBody={this.renderBody}\r\n />);\r\n }\r\n\r\n private renderBody() {\r\n if (!this.props.isOpen) {\r\n return null;\r\n }\r\n return (\r\n <div>\r\n <LongIdLabel\r\n label='You are about to remove the definition for the file data source'\r\n longId={this.props.dataSource.id}\r\n />\r\n\r\n <Checkbox\r\n style={{marginTop: '1em'}} checked={this.state.removeFiles}\r\n label=\"Remove data files from disk too\"\r\n onChange={this.onRemoveFilesChange}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(RemoveDatasetDialog);\r\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect } from 'react-redux';\nimport {\n ButtonGroup,\n Callout,\n Card,\n Checkbox,\n Classes,\n Collapse,\n HTMLSelect,\n IconName,\n InputGroup,\n Intent,\n Label,\n Popover,\n PopoverInteractionKind,\n Position,\n Tag,\n Tooltip\n} from '@blueprintjs/core';\n\nimport * as actions from '../actions';\nimport { ContentWithDetailsPanel } from '../components/ContentWithDetailsPanel';\nimport DataSourceDetails from '../components/DataSourceDetails';\nimport DataSourcesList from '../components/DataSourcesList';\nimport DataSourceOpenHint from '../components/DataSourceOpenHint';\nimport Markdown from '../components/Markdown';\nimport { ToolButton } from '../components/ToolButton';\nimport { DATA_SOURCES_LOADING, NO_DATA_SOURCES_FOUND, NO_DATA_STORES_FOUND, NO_LOCAL_DATA_SOURCES } from '../messages';\n\nimport * as selectors from '../selectors';\nimport { DataSourceState, DataStoreNotice, DataStoreState, State } from '../state';\nimport { canOpenDataSource, isLocalDataStore } from '../state-util';\nimport AddDatasetDialog from './AddDatasetDialog';\nimport OpenDatasetDialog from './OpenDatasetDialog';\nimport RemoveDatasetDialog from './RemoveDatasetDialog';\n\n\nconst INTENTS = {\n 'default': Intent.NONE,\n 'primary': Intent.PRIMARY,\n 'success': Intent.SUCCESS,\n 'warning': Intent.WARNING,\n 'danger': Intent.DANGER,\n};\n\ninterface IDataSourcesPanelProps {\n hasWorkspace: boolean;\n dataStores: Array<DataStoreState>;\n dataSourceFilterExpr: string;\n selectedDataStore: DataStoreState | null;\n selectedDataSource: DataSourceState | null;\n selectedDataSources: DataSourceState[] | null;\n filteredDataSources: DataSourceState[] | null;\n dataSourceListHeight: number;\n showAllDataSources: boolean;\n showDataSourceIDs: boolean;\n showDataSourceDetails: boolean;\n showDataStoreDescription: boolean;\n showDataStoreNotices: boolean;\n offlineMode: boolean;\n isSandboxedMode: boolean;\n}\n\nfunction mapStateToProps(state: State): IDataSourcesPanelProps {\n return {\n hasWorkspace: !!selectors.workspaceSelector(state),\n dataStores: selectors.dataStoresSelector(state),\n dataSourceFilterExpr: selectors.dataSourceFilterExprSelector(state),\n selectedDataStore: selectors.selectedDataStoreSelector(state),\n selectedDataSource: selectors.selectedDataSourceSelector(state),\n selectedDataSources: selectors.selectedDataSourcesSelector(state),\n filteredDataSources: selectors.filteredDataSourcesSelector(state),\n dataSourceListHeight: selectors.dataSourceListHeightSelector(state),\n showDataSourceDetails: selectors.showDataSourceDetailsSelector(state),\n showAllDataSources: selectors.showAllDataSourcesSelector(state),\n showDataSourceIDs: selectors.showDataSourceIDsSelector(state),\n showDataStoreDescription: selectors.showDataStoreDescriptionSelector(state),\n showDataStoreNotices: selectors.showDataStoreNoticesSelector(state),\n offlineMode: selectors.offlineModeSelector(state),\n isSandboxedMode: !selectors.isLocalFSAccessAllowedSelector(state),\n };\n}\n\ninterface IDataSourcesPanelDispatch {\n setSelectedDataStoreId(selectedDataStoreId: string): void;\n\n setSelectedDataSourceId(selectedDataSourceId: string): void;\n\n setDataSourceFilterExpr(dataSourceFilterExpr: string): void;\n\n setControlState(propertyName: string, value: any): void;\n\n setSessionState(propertyName: string, value: any): void;\n\n updateSessionState(sessionState: any): void;\n\n refreshLocalDataStore(): void;\n\n loadDataSourceMetaInfo(dataStoreId: string, dataSourceId: string): void;\n\n showDialog(dialogId: string): void;\n\n hideDialog(dialogId: string): void;\n}\n\nconst mapDispatchToProps = {\n setSelectedDataStoreId: actions.setSelectedDataStoreId,\n setSelectedDataSourceId: actions.setSelectedDataSourceId,\n setDataSourceFilterExpr: actions.setDataSourceFilterExpr,\n setSessionState: actions.setSessionProperty,\n setControlState: actions.setControlProperty,\n updateSessionState: actions.updateSessionState,\n refreshLocalDataStore: actions.refreshLocalDataStore,\n showDialog: actions.showDialog,\n hideDialog: actions.hideDialog,\n};\n\n/**\n * The DataSourcesPanel is used browse and open data data sources originating from a selected data store.\n *\n * @author Norman Fomferra\n */\nclass DataSourcesPanel extends React.Component<IDataSourcesPanelProps & IDataSourcesPanelDispatch, null> {\n\n private static readonly FLEX_ROW_STYLE: CSSProperties = {display: 'flex', alignItems: 'center', marginBottom: 1};\n private static readonly SPACER_STYLE: CSSProperties = {flex: 1};\n private static readonly LABEL_STYLE: CSSProperties = {margin: '0 0.5em 0 0', display: 'flex', flexGrow: 1};\n private static readonly LABEL_TEXT_STYLE: CSSProperties =\n {minWidth: '5em', overflow: 'hidden', whiteSpace: 'nowrap'};\n private static readonly SELECT_STYLE: CSSProperties = {flexGrow: 1};\n\n constructor(props: IDataSourcesPanelProps & IDataSourcesPanelDispatch) {\n super(props);\n this.handleAddDatasetDialog = this.handleAddDatasetDialog.bind(this);\n this.handleRemoveDatasetDialog = this.handleRemoveDatasetDialog.bind(this);\n this.handleShowOpenDatasetDialog = this.handleShowOpenDatasetDialog.bind(this);\n this.handleRefreshLocalDataStore = this.handleRefreshLocalDataStore.bind(this);\n this.handleListHeightChanged = this.handleListHeightChanged.bind(this);\n this.handleShowDetailsChanged = this.handleShowDetailsChanged.bind(this);\n this.handleDataStoreSelected = this.handleDataStoreSelected.bind(this);\n this.handleShowDataStoreDescriptionChanged = this.handleShowDataStoreDescriptionChanged.bind(this);\n this.handleShowDataStoreNoticesChanged = this.handleShowDataStoreNoticesChanged.bind(this);\n this.handleShowAllDataSourcesChanged = this.handleShowAllDataSourcesChanged.bind(this);\n this.handleShowDataSourceIDsChanged = this.handleShowDataSourceIDsChanged.bind(this);\n }\n\n render() {\n const hasDataStores = this.props.dataStores && this.props.dataStores.length;\n if (!hasDataStores) {\n return this.renderNoDataStoreMessage();\n }\n const hasDataSources = this.props.selectedDataSources && this.props.selectedDataSources.length;\n const selectedDataSource = this.props.selectedDataSource;\n const isLocalStore = isLocalDataStore(this.props.selectedDataStore);\n // const canAdd = isLocalStore;\n // const canRemove = selectedDataSource && isLocalStore;\n const isNotVerified = selectedDataSource ? !canOpenDataSource(selectedDataSource) : false;\n const canOpen = selectedDataSource && this.props.hasWorkspace && !isNotVerified;\n const actionComponent = (\n <ButtonGroup>\n {/*{isLocalStore && <ToolButton*/}\n {/* tooltipContent=\"Add data source\"*/}\n {/* onClick={this.handleAddDatasetDialog}*/}\n {/* disabled={!canAdd}*/}\n {/* icon=\"add\"*/}\n {/* tooltipPosition={'top'}*/}\n {/*/>}*/}\n {/*{isLocalStore && <ToolButton*/}\n {/* tooltipContent=\"Remove data source\"*/}\n {/* onClick={this.handleRemoveDatasetDialog}*/}\n {/* disabled={!canRemove}*/}\n {/* icon=\"trash\"*/}\n {/* tooltipPosition={'top'}*/}\n {/*/>}*/}\n {isLocalStore && <ToolButton\n tooltipContent=\"Refresh local data store\"\n onClick={this.handleRefreshLocalDataStore}\n icon=\"refresh\"\n tooltipPosition={'top'}\n />}\n {isNotVerified && (\n <Popover\n popoverClassName={Classes.POPOVER_CONTENT_SIZING}\n enforceFocus={false}\n interactionKind={PopoverInteractionKind.HOVER}\n position={Position.TOP}\n >\n <ToolButton icon={\"warning-sign\"} intent={Intent.WARNING}/>\n <DataSourceOpenHint\n isSandboxedMode={this.props.isSandboxedMode}\n dataSource={selectedDataSource!}\n />\n </Popover>\n )}\n <ToolButton\n tooltipContent=\"Open data source\"\n intent={Intent.PRIMARY}\n onClick={this.handleShowOpenDatasetDialog}\n disabled={!canOpen}\n icon={\"folder-shared-open\"}\n tooltipPosition={'top'}\n />\n <AddDatasetDialog/>\n <RemoveDatasetDialog/>\n <OpenDatasetDialog/>\n </ButtonGroup>\n );\n return (\n <div>\n {this.renderDataStoreSelector()}\n <div style={DataSourcesPanel.FLEX_ROW_STYLE}>\n <span style={DataSourcesPanel.SPACER_STYLE}/>\n <Tooltip content={\n <div>\n List also datasets that cannot be opened directly.<br/>\n Usually they can be downloaded manually, then<br/>\n opened by one of the <code>read_xxx()</code> operations.\n </div>}>\n <Checkbox\n label=\"All data sources\"\n checked={this.props.showAllDataSources}\n onChange={this.handleShowAllDataSourcesChanged}\n style={{marginBottom: 2, marginTop: 6, marginRight: 6}}\n />\n </Tooltip>\n <Checkbox\n label=\"Show identifiers\"\n checked={this.props.showDataSourceIDs}\n onChange={this.handleShowDataSourceIDsChanged}\n style={{marginBottom: 2, marginTop: 6}}\n />\n </div>\n {this.renderDataSourceFilterExprInput()}\n <ContentWithDetailsPanel\n showDetails={this.props.showDataSourceDetails}\n onShowDetailsChange={this.handleShowDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.dataSourceListHeight}\n onContentHeightChange={this.handleListHeightChanged}\n actionComponent={actionComponent}\n >\n {hasDataSources\n ? (<DataSourcesList\n dataSources={this.props.filteredDataSources}\n selectedDataSourceId={this.props.selectedDataSource\n ? this.props.selectedDataSource.id\n : null}\n setSelectedDataSourceId={this.props.setSelectedDataSourceId}\n showDataSourceIDs={this.props.showDataSourceIDs}\n doubleClickAction={canOpen ? this.handleShowOpenDatasetDialog : undefined}\n />)\n : this.renderNoDataSourcesMessage()\n }\n <DataSourceDetails dataSource={this.props.selectedDataSource}/>\n </ContentWithDetailsPanel>\n </div>\n );\n }\n\n private handleAddDatasetDialog() {\n this.props.showDialog('addDatasetDialog');\n }\n\n private handleRemoveDatasetDialog() {\n this.props.showDialog('removeDatasetDialog');\n }\n\n private handleRefreshLocalDataStore() {\n this.props.refreshLocalDataStore();\n }\n\n private handleShowOpenDatasetDialog() {\n this.props.showDialog('openDatasetDialog');\n }\n\n private handleDataStoreSelected(event) {\n const dataStoreId = event.target.value;\n this.props.setSelectedDataStoreId(dataStoreId);\n }\n\n private handleListHeightChanged(value: number) {\n this.props.setSessionState('dataSourceListHeight', value);\n }\n\n private handleShowDetailsChanged(value: boolean) {\n this.props.setSessionState('showDataSourceDetails', value);\n }\n\n private handleShowDataStoreDescriptionChanged() {\n this.props.updateSessionState({showDataStoreDescription: !this.props.showDataStoreDescription});\n }\n\n private handleShowDataStoreNoticesChanged() {\n this.props.updateSessionState({showDataStoreNotices: !this.props.showDataStoreNotices});\n }\n\n private handleShowAllDataSourcesChanged(ev: any) {\n this.props.updateSessionState({showAllDataSources: ev.target.checked});\n }\n\n private handleShowDataSourceIDsChanged(ev: any) {\n this.props.updateSessionState({showDataSourceIDs: ev.target.checked});\n }\n\n private renderDataSourceFilterExprInput() {\n const resultsTag = (\n <Tag className={Classes.MINIMAL} onRemove={() => this.props.setDataSourceFilterExpr('')}>\n {this.props.filteredDataSources && this.props.filteredDataSources.length}\n </Tag>\n );\n\n return (\n <div style={{paddingBottom: 2}}>\n <InputGroup\n disabled={false}\n leftIcon=\"filter\"\n onChange={(event) => this.props.setDataSourceFilterExpr(event.target.value)}\n placeholder=\"Find data source\"\n rightElement={resultsTag}\n value={this.props.dataSourceFilterExpr}\n />\n </div>\n );\n }\n\n private renderDataStoreSelector() {\n if (!this.props.dataStores || !this.props.dataStores.length) {\n return null;\n }\n\n const dataStoreOptions = [];\n for (let dataStore of this.props.dataStores) {\n dataStoreOptions.push(\n <option key={dataStore.id} value={dataStore.id}>{dataStore.title || dataStore.id}</option>\n );\n }\n\n const {selectedDataStore, showDataStoreDescription, /*showDataStoreNotices*/} = this.props;\n\n const hasDataStoreDescription = selectedDataStore && selectedDataStore.description;\n const hasDataStoreNotices = selectedDataStore && selectedDataStore.notices && selectedDataStore.notices.length;\n\n let dataStoreDescriptionElement;\n if (hasDataStoreDescription) {\n dataStoreDescriptionElement = (\n <Collapse isOpen={showDataStoreDescription}>\n <Card>\n <Markdown source={selectedDataStore.description}/>\n </Card>\n </Collapse>\n );\n }\n\n // let dataStoreNoticesElement;\n if (hasDataStoreNotices) {\n const callouts = [];\n selectedDataStore.notices.forEach((notice: DataStoreNotice) => {\n callouts.push(\n <div key={notice.id} style={{margin: '0 4px 4px 4px'}}>\n <Callout\n title={notice.title}\n icon={notice.icon as IconName}\n intent={notice.intent in INTENTS ? INTENTS[notice.intent] : Intent.NONE}\n >\n <Markdown source={notice.content}/>\n </Callout>\n </div>\n );\n });\n // dataStoreNoticesElement = (<Collapse isOpen={showDataStoreNotices}>{callouts}</Collapse>);\n }\n\n // TODO (forman): BP3: use new Select component\n\n // a label has by default a 15px margin at the bottom\n return (\n <React.Fragment>\n <div style={DataSourcesPanel.FLEX_ROW_STYLE}>\n <Label className=\"bp3-inline\"\n style={DataSourcesPanel.LABEL_STYLE}>\n <span style={DataSourcesPanel.LABEL_TEXT_STYLE}>Data store:</span>\n <HTMLSelect\n fill={true}\n style={DataSourcesPanel.SELECT_STYLE}\n value={selectedDataStore ? selectedDataStore.id : ''}\n onChange={this.handleDataStoreSelected}\n >\n {dataStoreOptions}\n </HTMLSelect>\n </Label>\n <ButtonGroup>\n <ToolButton\n tooltipContent=\"Show/hide data store description\"\n onClick={this.handleShowDataStoreDescriptionChanged}\n disabled={!hasDataStoreDescription}\n active={showDataStoreDescription}\n icon=\"help\"\n tooltipPosition={'top'}\n />\n {/*This was an ESA requirement long time ago. It may no longer apply.*/}\n {/*<ToolButton*/}\n {/* tooltipContent=\"Show/hide data store notices\"*/}\n {/* onClick={this.handleShowDataStoreNoticesChanged}*/}\n {/* disabled={!hasDataStoreNotices}*/}\n {/* active={showDataStoreNotices}*/}\n {/* icon=\"notifications\"*/}\n {/* tooltipPosition={'top'}*/}\n {/*/>*/}\n </ButtonGroup>\n </div>\n\n {dataStoreDescriptionElement}\n\n {/*This was an ESA requirement long time ago. It may no longer apply.*/}\n {/*{dataStoreNoticesElement}*/}\n\n </React.Fragment>\n );\n }\n\n //noinspection JSMethodCanBeStatic\n private renderNoDataStoreMessage() {\n return NO_DATA_STORES_FOUND;\n }\n\n //noinspection JSMethodCanBeStatic\n private renderNoDataSourcesMessage() {\n const selectedDataStore = this.props.selectedDataStore;\n if (isLocalDataStore(selectedDataStore)) {\n return NO_LOCAL_DATA_SOURCES;\n } else {\n const selectedDataSources = this.props.selectedDataSources;\n if (selectedDataSources === null) {\n return DATA_SOURCES_LOADING;\n } else {\n return NO_DATA_SOURCES_FOUND;\n }\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DataSourcesPanel as any);\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport {\n ButtonGroup,\n Classes,\n InputGroup,\n Intent,\n Menu,\n MenuItem,\n Popover,\n PopoverInteractionKind,\n Tag\n} from '@blueprintjs/core';\nimport { ContentWithDetailsPanel } from '../components/ContentWithDetailsPanel';\nimport { LabelWithType } from '../components/LabelWithType';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport { Card } from '@blueprintjs/core';\nimport Markdown from '../components/Markdown';\nimport OperationStepDialog from './OperationStepDialog';\nimport { OperationInputState, OperationOutputState, OperationState, State, WorkspaceState } from '../state';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\nimport { NO_OPERATIONS_FOUND } from '../messages';\nimport { ToolButton } from '../components/ToolButton';\nimport { NEW_OPERATION_STEP_DIALOG_ID } from './operation-step-dialog-ids';\n\n\ninterface IOperationsPanelProps {\n workspace: WorkspaceState;\n operations: OperationState[] | null;\n selectedOperationName: string | null;\n selectedOperation: OperationState | null;\n filteredOperations: OperationState[];\n operationFilterTags: string[];\n operationFilterExpr: string | null;\n operationsTagCounts: Map<string, number>,\n operationListHeight: number;\n showOperationDetails: boolean;\n}\n\n\nfunction mapStateToProps(state: State): IOperationsPanelProps {\n return {\n workspace: state.data.workspace,\n operations: selectors.operationsSelector(state),\n selectedOperation: selectors.selectedOperationSelector(state),\n filteredOperations: selectors.filteredOperationsSelector(state),\n selectedOperationName: selectors.selectedOperationNameSelector(state),\n operationFilterTags: selectors.operationFilterTagsSelector(state) || selectors.EMPTY_ARRAY,\n operationFilterExpr: selectors.operationFilterExprSelector(state),\n operationsTagCounts: selectors.operationsTagCountsSelector(state),\n operationListHeight: state.session.operationListHeight,\n showOperationDetails: state.session.showOperationDetails,\n };\n}\n\nconst OP_CARD_STYLE = {margin: 6, padding: 10};\n\n/**\n * The OperationsPanel is used to select and browse available operations.\n *\n * @author Norman Fomferra\n */\nclass OperationsPanel extends React.Component<IOperationsPanelProps & DispatchProp<State>, any> {\n\n constructor(props: IOperationsPanelProps & DispatchProp<State>) {\n super(props);\n this.handleOperationSelection = this.handleOperationSelection.bind(this);\n this.handleOperationFilterExprCleared = this.handleOperationFilterExprCleared.bind(this);\n this.handleOperationFilterExprChange = this.handleOperationFilterExprChange.bind(this);\n this.handleListHeightChanged = this.handleListHeightChanged.bind(this);\n this.handleShowDetailsChanged = this.handleShowDetailsChanged.bind(this);\n this.handleAddOperationStepButtonClicked = this.handleAddOperationStepButtonClicked.bind(this);\n }\n\n private static getItemKey(operation: OperationState) {\n return operation.name;\n }\n\n private static renderItem(operation: OperationState) {\n const name = operation.name;\n let dataType;\n if (!operation.outputs.length) {\n dataType = '';\n } else if (operation.outputs.length === 1) {\n dataType = operation.outputs[0].dataType;\n } else {\n dataType = `${operation.outputs.length} types`;\n }\n return (<LabelWithType label={name} dataType={dataType}/>);\n }\n\n private static formatPortDescriptionText(description) {\n if (!description || description === '') {\n return description;\n }\n description = description.trim();\n if (!description.endsWith('.')) {\n description += '.';\n }\n return ' - ' + description;\n }\n\n private static getInputDescriptionText(input: OperationInputState) {\n let description = OperationsPanel.formatPortDescriptionText(input.description);\n if (typeof (input.defaultValue) === 'undefined') {\n description += ' Mandatory value.';\n } else {\n description += ` Default value is \"${input.defaultValue}\".`\n }\n return description;\n }\n\n private static getOutputDescriptionText(output: OperationOutputState) {\n return OperationsPanel.formatPortDescriptionText(output.description);\n }\n\n private static getMultiplicityText(n: number, singularText: string, pluralText?: string): string {\n return n === 1 ? singularText : (pluralText || singularText + 's');\n }\n\n render() {\n const operations = this.props.operations;\n let body;\n if (operations && operations.length) {\n const operationFilterExpr = this.props.operationFilterExpr;\n const operationTagFilterPanel = this.renderOperationTagFilterPanel();\n const operationsList = this.renderOperationsList();\n const operationDetailsCard = this.renderOperationDetailsCard();\n\n const resultsTag = (\n <Tag className={Classes.MINIMAL} onRemove={this.handleOperationFilterExprCleared}>\n {this.props.filteredOperations.length}\n </Tag>\n );\n\n const operationFilterExprInput = (\n <InputGroup\n disabled={false}\n leftIcon=\"filter\"\n onChange={this.handleOperationFilterExprChange}\n placeholder=\"Find operation\"\n rightElement={resultsTag}\n value={operationFilterExpr}\n />\n );\n\n const canAddStepOperation = this.props.selectedOperation && this.props.workspace;\n const actionComponent = (\n <ButtonGroup>\n <ToolButton\n tooltipContent={<span>Add a new operation step to<br/>the workspace's workflow</span>}\n intent={Intent.PRIMARY}\n onClick={this.handleAddOperationStepButtonClicked}\n disabled={!canAddStepOperation}\n text=\"Add Step...\"\n icon=\"play\"\n tooltipPosition={'top'}\n />\n {canAddStepOperation ? <OperationStepDialog id={NEW_OPERATION_STEP_DIALOG_ID}/> : null}\n </ButtonGroup>\n );\n\n body = (<div>\n {operationFilterExprInput}\n {operationTagFilterPanel}\n <ContentWithDetailsPanel showDetails={this.props.showOperationDetails}\n onShowDetailsChange={this.handleShowDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.operationListHeight}\n onContentHeightChange={this.handleListHeightChanged}\n actionComponent={actionComponent}>\n {operationsList}\n {operationDetailsCard}\n </ContentWithDetailsPanel>\n </div>);\n } else {\n body = this.renderNoOperationsMessage();\n }\n return body;\n }\n\n private handleListHeightChanged(value: number) {\n this.props.dispatch(actions.setSessionProperty('operationListHeight', value));\n }\n\n private handleShowDetailsChanged(value: boolean) {\n this.props.dispatch(actions.setSessionProperty('showOperationDetails', value));\n }\n\n private handleOperationSelection(newSelection: Array<React.Key>) {\n if (newSelection.length > 0) {\n this.props.dispatch(actions.setSelectedOperationName(newSelection[0] as string));\n } else {\n this.props.dispatch(actions.setSelectedOperationName(null));\n }\n }\n\n private handleOperationFilterExprCleared() {\n this.props.dispatch(actions.setOperationFilterExpr(''));\n }\n\n private handleOperationFilterExprChange(event) {\n this.props.dispatch(actions.setOperationFilterExpr(event.target.value));\n }\n\n private handleAddOperationStepButtonClicked() {\n this.props.dispatch(actions.showOperationStepDialog('newOperationStepDialog'));\n }\n\n private renderOperationsList() {\n return (\n <ScrollablePanelContent>\n <ListBox items={this.props.filteredOperations}\n getItemKey={OperationsPanel.getItemKey}\n renderItem={OperationsPanel.renderItem}\n selectionMode={ListBoxSelectionMode.SINGLE}\n selection={this.props.selectedOperationName}\n onSelection={this.handleOperationSelection}\n onItemDoubleClick={this.handleAddOperationStepButtonClicked}/>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSMethodCanBeStatic\n private renderOperationTagFilterPanel() {\n const selectedOperationTags = new Set(this.props.operationFilterTags);\n const tagCounts = this.props.operationsTagCounts;\n\n const tagContainerStyle = {padding: '0.2em', display: 'flex', alignItems: 'center'};\n const tagStyle = {\n marginRight: '0.2em', marginTop: '0',\n marginBottom: '0', paddingTop: '0', paddingBottom: '0',\n height: '4ex'\n };\n\n let selectedTagItems = [];\n selectedOperationTags.forEach(tagName => {\n selectedTagItems.push(\n <Tag intent={Intent.PRIMARY}\n minimal={true}\n style={tagStyle}\n onRemove={() => this.removeTagName(tagName)}>\n {`${tagName}`}\n </Tag>);\n });\n\n let tagMenuItems = [];\n tagCounts.forEach((tagCount, tagName) => {\n if (!selectedOperationTags.has(tagName)) {\n tagMenuItems.push(\n <MenuItem key={tagName} text={`${tagName} (${tagCount})`}\n onClick={() => this.addTagName(tagName)}/>);\n }\n });\n\n let addTagButton = null;\n if (tagMenuItems.length) {\n const tagMenu = (<Menu>{tagMenuItems}</Menu>);\n addTagButton = (\n <Popover content={tagMenu}\n interactionKind={PopoverInteractionKind.CLICK}>\n <Tag intent={Intent.SUCCESS} minimal={true} icon=\"small-plus\" style={tagStyle}/>\n </Popover>\n );\n }\n\n return (\n <div style={tagContainerStyle}>\n {addTagButton}{selectedTagItems}\n </div>\n );\n }\n\n private addTagName(tagName: string) {\n const tags = new Set<string>(this.props.operationFilterTags);\n tags.add(tagName);\n this.props.dispatch(actions.setOperationFilterTags(Array.from(tags)));\n }\n\n private removeTagName(tagName: string) {\n const tags = new Set<string>(this.props.operationFilterTags);\n tags.delete(tagName);\n this.props.dispatch(actions.setOperationFilterTags(Array.from(tags)));\n }\n\n private renderOperationDetailsCard() {\n const operation = this.props.selectedOperation;\n let title = 'No selection';\n let description = null;\n let tags = null;\n let inputs = null;\n let outputs = null;\n if (operation) {\n title = operation.name;\n\n if (operation.description) {\n description = (\n <p className=\"user-selectable\">\n <Markdown source={operation.description}/>\n </p>);\n }\n\n if (operation.tags) {\n tags = (<p><strong>Tags:</strong> {operation.tags.join(', ')}</p>);\n }\n\n if (operation.outputs && operation.outputs.length) {\n const outputElems = operation.outputs.map(output => (\n <li key={output.name}>\n <LabelWithType label={output.name} em dataType={output.dataType} units={output.units}/>\n <Markdown source={OperationsPanel.getOutputDescriptionText(output)}/>\n </li>\n ));\n outputs = (\n <div>\n <p>\n <strong>{OperationsPanel.getMultiplicityText(operation.outputs.length, 'Output') + ':'}</strong>\n </p>\n <ul>{outputElems}</ul>\n </div>\n );\n }\n\n\n if (operation.inputs && operation.inputs.length) {\n const inputElems = operation.inputs.map(input => (\n <li key={input.name}>\n <LabelWithType label={input.name} em dataType={input.dataType} units={input.units}/>\n <Markdown source={OperationsPanel.getInputDescriptionText(input)}/>\n </li>\n ));\n inputs = (\n <div>\n <p>\n <strong>{OperationsPanel.getMultiplicityText(operation.outputs.length, 'Input') + ':'}</strong>\n </p>\n <ul>{inputElems}</ul>\n </div>\n );\n }\n }\n\n return (\n <ScrollablePanelContent>\n <Card elevation={2} style={OP_CARD_STYLE}>\n <h3 className=\"user-selectable\">{title}</h3>\n {description}\n {tags}\n {outputs}\n {inputs}\n </Card>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSMethodCanBeStatic\n private renderNoOperationsMessage() {\n return NO_OPERATIONS_FOUND;\n }\n\n}\n\nexport default connect(mapStateToProps)(OperationsPanel);\n","import * as React from 'react';\nimport { connect, Dispatch } from 'react-redux';\nimport { Button, Classes, Dialog, Icon, IconName, Intent, ProgressBar } from '@blueprintjs/core';\n\nimport { State, WebAPIServiceInfo, WebAPIStatus } from '../state';\n\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IWebAPIStatusBoxProps {\n webAPIStatus: WebAPIStatus | null;\n webAPIServiceInfo: WebAPIServiceInfo | null;\n username?: string | null;\n}\n\nfunction mapStateToProps(state: State): IWebAPIStatusBoxProps {\n return {\n webAPIStatus: state.communication.webAPIStatus,\n webAPIServiceInfo: state.communication.webAPIServiceInfo,\n };\n}\n\nconst _WebAPIStatusBox: React.FC<IWebAPIStatusBoxProps & IDispatch> = (\n {\n webAPIStatus,\n webAPIServiceInfo,\n }) => {\n\n const reload = () => {\n window.location.reload();\n };\n\n switch (webAPIStatus) {\n case 'open':\n return null;\n case 'login':\n return (<StatusBox\n message={'Logging in...'}\n icon=\"log-in\"\n isWaiting={true}\n />);\n case 'launching':\n return (<StatusBox\n message={'Launching Cate service...'}\n icon=\"log-in\"\n isWaiting={true}\n />);\n case 'connecting':\n return (<StatusBox\n message={'Connecting to Cate service...'}\n icon=\"log-in\"\n isWaiting={true}\n />);\n case 'shuttingDown':\n return (<StatusBox\n message={'Shutting down Cate service...'}\n icon=\"log-out\"\n isWaiting={true}\n />);\n case 'loggingOut':\n return (<StatusBox\n message={'Logging out...'}\n icon=\"log-out\"\n isWaiting={true}\n />);\n case 'closed':\n const autoStopInfo = webAPIServiceInfo.autoStopInfo;\n let message: string;\n if (autoStopInfo\n && autoStopInfo.inactivityTime >= autoStopInfo.availableTime - 5) {\n message = 'Cate service has been shut down due to inactivity. ' +\n 'Press \"Retry\" to try reconnecting.';\n return (<StatusBox\n message={message}\n icon=\"offline\"\n isWaiting={false}\n onRetry={reload}\n />);\n } else {\n message = 'The connection to the Cate service has been closed unexpectedly.';\n return (<ErrorBox\n message={message}\n icon=\"offline\"\n onRetry={reload}\n />);\n }\n case 'error':\n return (<ErrorBox\n message={'Oops! An error occurred while launching or connecting the Cate service.'}\n icon=\"offline\"\n onRetry={reload}\n />);\n default:\n return (<ErrorBox\n message={'Oops! No service available.'}\n icon=\"offline\"\n />);\n }\n};\n\nconst WebAPIStatusBox = connect(mapStateToProps)(_WebAPIStatusBox);\nexport default WebAPIStatusBox;\n\n\n//////////////////////////////////////////////////////////////////////////////\n\ninterface IStatusBoxProps {\n message: React.ReactNode;\n icon: IconName;\n isWaiting?: boolean;\n onRetry?: () => void;\n onCancel?: () => void;\n}\n\nconst DIALOG_P_STYLE: React.CSSProperties = {marginTop: 12};\nconst DIALOG_ICON_STYLE: React.CSSProperties = {marginTop: 6, textAlign: 'center', width: '100%'};\n\nconst StatusBox: React.FC<IStatusBoxProps> = ({\n message,\n icon,\n isWaiting,\n onRetry,\n onCancel,\n }) => {\n\n let progress;\n if (isWaiting) {\n progress = (<div style={DIALOG_P_STYLE}><ProgressBar intent={Intent.SUCCESS}/></div>);\n }\n let footer;\n if (onRetry || onCancel) {\n let cancelButton = onCancel ? (<Button onClick={onCancel} intent={Intent.PRIMARY}>Cancel</Button>) : null;\n let retryButton = onRetry ? (<Button onClick={onRetry}>Retry</Button>) : null;\n footer = (\n <div className={Classes.DIALOG_FOOTER}>\n <div className={Classes.DIALOG_FOOTER_ACTIONS}>\n {cancelButton}\n {retryButton}\n </div>\n </div>\n );\n }\n return (\n <Dialog\n isOpen={true}\n canEscapeKeyClose={false}\n canOutsideClickClose={false}\n >\n <div className={Classes.DIALOG_BODY}>\n <div style={DIALOG_ICON_STYLE}><Icon icon={icon} iconSize={32}/></div>\n <div style={DIALOG_P_STYLE}>{message}</div>\n {progress}\n </div>\n {footer}\n </Dialog>\n );\n};\n\n//////////////////////////////////////////////////////////////////////////////\n\ninterface IErrorBoxProps extends IStatusBoxProps {\n username?: string;\n}\n\nconst ErrorBox: React.FC<IErrorBoxProps> = (\n {\n message,\n icon,\n isWaiting,\n onRetry,\n onCancel,\n }\n) => {\n return (<StatusBox\n message={message}\n icon={icon}\n isWaiting={isWaiting}\n onRetry={onRetry}\n onCancel={onCancel}\n />);\n};\n","import * as React from 'react';\nimport { DialogState, ResourceState, State, WorkflowStepState } from '../state';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport * as assert from '../../common/assert';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { Checkbox, InputGroup, Label } from '@blueprintjs/core';\n\nconst DIALOG_ID = 'workflowStepPropertiesDialog';\nconst DIALOG_TITLE = 'Workflow Step & Resource Properties';\n\ninterface IResourcePropertiesDialogOwnProps {\n selectedWorkflowStep: WorkflowStepState;\n}\n\ninterface IWorkflowStepPropertiesDialogProps extends IResourcePropertiesDialogOwnProps, DialogState {\n resources: ResourceState[];\n}\n\ninterface IWorkflowStepPropertiesDialogState {\n stepId: string;\n stepPersistent: boolean;\n}\n\nfunction mapStateToProps(state: State, ownProps: IResourcePropertiesDialogOwnProps): IWorkflowStepPropertiesDialogProps {\n return {\n selectedWorkflowStep: ownProps.selectedWorkflowStep,\n isOpen: selectors.dialogStateSelector(DIALOG_ID)(state).isOpen,\n resources: selectors.resourcesSelector(state),\n };\n}\n\nclass WorkflowStepPropertiesDialog extends React.Component<IWorkflowStepPropertiesDialogProps & DispatchProp<State>, IWorkflowStepPropertiesDialogState> {\n\n constructor(props: IWorkflowStepPropertiesDialogProps & DispatchProp<State>) {\n super(props);\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.state = WorkflowStepPropertiesDialog.mapPropsToState(props);\n }\n\n private static mapPropsToState(props: IWorkflowStepPropertiesDialogProps) {\n const step = props.selectedWorkflowStep;\n assert.ok(step);\n return {\n stepId: step.id || '',\n stepPersistent: step.persistent || false,\n };\n }\n\n componentWillReceiveProps(nextProps: IWorkflowStepPropertiesDialogProps): void {\n this.setState(WorkflowStepPropertiesDialog.mapPropsToState(nextProps));\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(DIALOG_ID));\n\n const oldStepId = this.props.selectedWorkflowStep.id || '';\n const newStepId = this.state.stepId ? this.state.stepId.trim() : '';\n const oldStepPersistent = this.props.selectedWorkflowStep.persistent || false;\n const newStepPersistent = this.state.stepPersistent || false;\n\n if (oldStepPersistent !== newStepPersistent) {\n this.props.dispatch(actions.setWorkspaceResourcePersistence(oldStepId, newStepPersistent) as any);\n }\n if (oldStepId !== newStepId) {\n this.props.dispatch(actions.renameWorkspaceResource(oldStepId, newStepId) as any);\n }\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(DIALOG_ID));\n }\n\n private canConfirm(): boolean {\n const oldStepId = this.props.selectedWorkflowStep.id || '';\n const newStepId = this.state.stepId ? this.state.stepId.trim() : '';\n const oldStepPersistent = this.props.selectedWorkflowStep.persistent || false;\n const newStepPersistent = this.state.stepPersistent || false;\n const newStepIdIsValid = /^[a-zA-z_][a-zA-z0-9_]*$/.test(newStepId);\n return newStepId !== '' && (newStepId !== oldStepId || newStepPersistent !== oldStepPersistent) && newStepIdIsValid;\n }\n\n render() {\n if (!this.props.isOpen) {\n return null;\n }\n return (\n <ModalDialog\n isOpen={this.props.isOpen}\n title={DIALOG_TITLE}\n icon=\"edit\"\n onCancel={this.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n />\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n return (\n <div style={{width: '100%', padding: 6}}>\n <Label>\n Resource name\n <span className=\"bp3-text-muted\"> (must be unique within the workspace)</span>\n <InputGroup\n style={{width: '100%'}}\n type=\"text\"\n value={this.state.stepId}\n onChange={(ev: any) => this.setState({stepId: ev.target.value})}\n />\n <span className=\"bp3-text-muted\">The Resource name must only contain the uppercase and lowercase letters A through Z,\n the underscore _ and, except for the first character, the digits 0 through 9.</span>\n </Label>\n\n <div style={{paddingTop: 10}}>\n <Checkbox checked={this.state.stepPersistent}\n onChange={(ev: any) => this.setState({stepPersistent: ev.target.checked})}\n label=\"Persist resulting resource\"\n />\n <span className=\"bp3-text-muted\">If checked, the resource will be read from a file in the workspac next time the workspace is opened.\n This usually speeds up the loading of workspace, but requires extra disk space.</span>\n </div>\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(WorkflowStepPropertiesDialog);\n\n","import * as React from 'react';\nimport {CSSProperties} from 'react';\nimport {connect, DispatchProp} from 'react-redux';\nimport {\n ButtonGroup,\n Icon,\n Intent,\n Menu,\n MenuItem,\n Popover,\n PopoverPosition,\n Tab,\n Tabs,\n Tooltip\n} from '@blueprintjs/core';\nimport {Cell, Column, Table, TruncatedFormat, TruncatedPopoverMode} from '@blueprintjs/table';\n\nimport {ListBox} from '../components/ListBox';\nimport {LabelWithType} from '../components/LabelWithType';\nimport WorkflowStepPropertiesDialog from './WorkflowStepPropertiesDialog';\nimport OperationStepDialog from './OperationStepDialog';\nimport {ContentWithDetailsPanel} from '../components/ContentWithDetailsPanel';\nimport * as assert from '../../common/assert';\nimport * as actions from '../actions'\nimport * as selectors from '../selectors'\nimport {\n OperationInputState,\n OperationIOBaseState,\n OperationState,\n ResourceState,\n State,\n WorkflowPortState,\n WorkflowStepState,\n WorkspacePanelMode,\n WorkspaceState\n} from '../state';\nimport {ScrollablePanelContent} from '../components/ScrollableContent';\nimport {NO_WORKFLOW_STEPS, NO_WORKSPACE, NO_WORKSPACE_RESOURCES} from '../messages';\nimport {findOperation, isDataFrameResource, isFigureResource} from '../state-util';\nimport {isBoolean, isDefined, isString, isUndefined, isUndefinedOrNull} from '../../common/types';\nimport {ToolButton} from '../components/ToolButton';\nimport {EDIT_OPERATION_STEP_DIALOG_ID} from './operation-step-dialog-ids';\n\n\ninterface IWorkspacePanelProps {\n workspace: WorkspaceState;\n resourcesMap: { [name: string]: ResourceState };\n resourceListHeight: number;\n showResourceDetails: boolean;\n selectedResource: ResourceState | null;\n selectedResourceAttributes: string[][];\n selectedResourceName: string | null;\n selectedResourceWorkflowStep: WorkflowStepState | null;\n workflowStepListHeight: number;\n showWorkflowStepDetails: boolean;\n selectedWorkflowStep: WorkflowStepState | null;\n selectedWorkflowStepId: string | null;\n selectedWorkflowStepOp: OperationState | null;\n selectedWorkflowStepResource: ResourceState | null;\n activeViewId: string | null;\n workspacePanelMode: 'resources' | 'steps';\n operations: OperationState[];\n}\n\nfunction mapStateToProps(state: State): IWorkspacePanelProps {\n return {\n workspace: selectors.workspaceSelector(state),\n resourcesMap: selectors.resourceMapSelector(state),\n resourceListHeight: selectors.resourceListHeightSelector(state),\n showResourceDetails: selectors.showResourceDetailsSelector(state),\n selectedResource: selectors.selectedResourceSelector(state),\n selectedResourceAttributes: selectors.selectedResourceAttributesSelector(state),\n selectedResourceName: selectors.selectedResourceNameSelector(state),\n selectedResourceWorkflowStep: selectors.selectedResourceWorkflowStepSelector(state),\n workflowStepListHeight: selectors.workflowStepListHeightSelector(state),\n showWorkflowStepDetails: selectors.showWorkflowStepDetailsSelector(state),\n selectedWorkflowStep: selectors.selectedWorkflowStepSelector(state),\n selectedWorkflowStepId: selectors.selectedWorkflowStepIdSelector(state),\n selectedWorkflowStepOp: selectors.selectedWorkflowStepOpSelector(state),\n selectedWorkflowStepResource: selectors.selectedWorkflowStepResourceSelector(state),\n activeViewId: selectors.activeViewIdSelector(state),\n workspacePanelMode: state.session.workspacePanelMode,\n operations: selectors.operationsSelector(state),\n };\n}\n\n/**\n * The WorkspacePanel lets user browse the currently opened workspace.\n * It comprises the workspace files, and the workflow which is subdivided into\n * workspace resources and workspace steps (operations).\n *\n * @author Norman Fomferra\n */\nclass WorkspacePanel extends React.PureComponent<IWorkspacePanelProps & DispatchProp<State>, any> {\n\n private static readonly STATE_TAG_STYLE: CSSProperties = {margin: 2};\n private static readonly FLEX_ROW_STYLE: CSSProperties = {display: 'flex', alignItems: 'center'};\n private static readonly SPACER_STYLE: CSSProperties = {flex: 1};\n\n constructor(props: IWorkspacePanelProps & DispatchProp<State>) {\n super(props);\n this.handleResourceListHeightChanged = this.handleResourceListHeightChanged.bind(this);\n this.handleShowResourceDetailsChanged = this.handleShowResourceDetailsChanged.bind(this);\n this.handleResourceNameSelected = this.handleResourceNameSelected.bind(this);\n this.handleStepListHeightChanged = this.handleStepListHeightChanged.bind(this);\n this.handleShowWorkflowStepDetailsChanged = this.handleShowWorkflowStepDetailsChanged.bind(this);\n this.handleWorkflowStepIdSelected = this.handleWorkflowStepIdSelected.bind(this);\n this.handleShowFigureButtonClicked = this.handleShowFigureButtonClicked.bind(this);\n this.handleWorkflowStepPropertiesButtonClicked = this.handleWorkflowStepPropertiesButtonClicked.bind(this);\n this.handleOpenWorkspaceDirectoryClicked = this.handleOpenWorkspaceDirectoryClicked.bind(this);\n this.handleEditOperationStepButtonClicked = this.handleEditOperationStepButtonClicked.bind(this);\n this.renderStepItem = this.renderStepItem.bind(this);\n this.renderResourceAttrName = this.renderResourceAttrName.bind(this);\n this.renderResourceAttrValue = this.renderResourceAttrValue.bind(this);\n this.renderOperationStepInputName = this.renderOperationStepInputName.bind(this);\n this.renderOperationStepInputValue = this.renderOperationStepInputValue.bind(this);\n this.renderOperationStepOutputName = this.renderOperationStepOutputName.bind(this);\n this.renderOperationStepOutputValue = this.renderOperationStepOutputValue.bind(this);\n this.handleWorkspacePanelModeChanged = this.handleWorkspacePanelModeChanged.bind(this);\n this.handleRemoveOperationStepButtonClicked = this.handleRemoveOperationStepButtonClicked.bind(this);\n this.handleCleanWorkflowButtonClicked = this.handleCleanWorkflowButtonClicked.bind(this);\n this.handleShowResourceTableView = this.handleShowResourceTableView.bind(this);\n this.handleCopyWorkflowAsPythonScript = this.handleCopyWorkflowAsPythonScript.bind(this);\n this.handleCopyWorkflowAsShellScript = this.handleCopyWorkflowAsShellScript.bind(this);\n this.handleCopyWorkflowAsJSON = this.handleCopyWorkflowAsJSON.bind(this);\n }\n\n private handleResourceNameSelected(newSelection: Array<React.Key>) {\n if (newSelection && newSelection.length) {\n this.props.dispatch(actions.setSelectedWorkspaceResourceName(newSelection[0] as string) as any);\n } else {\n this.props.dispatch(actions.setSelectedWorkspaceResourceName(null) as any);\n }\n }\n\n private handleWorkflowStepIdSelected(newSelection: Array<React.Key>) {\n if (newSelection && newSelection.length) {\n this.props.dispatch(actions.setSelectedWorkflowStepId(newSelection[0] as string) as any);\n } else {\n this.props.dispatch(actions.setSelectedWorkflowStepId(null) as any);\n }\n }\n\n private handleResourceListHeightChanged(value: number) {\n this.props.dispatch(actions.setSessionProperty('resourceListHeight', value));\n }\n\n private handleShowResourceDetailsChanged(value: boolean) {\n this.props.dispatch(actions.setSessionProperty('showResourceDetails', value));\n }\n\n private handleStepListHeightChanged(value: number) {\n this.props.dispatch(actions.setSessionProperty('workflowStepListHeight', value));\n }\n\n private handleShowWorkflowStepDetailsChanged(value: boolean) {\n this.props.dispatch(actions.setSessionProperty('showWorkflowStepDetails', value));\n }\n\n private handleShowFigureButtonClicked() {\n this.props.dispatch(actions.showFigureView(this.getEffectiveResource(), this.props.activeViewId));\n }\n\n private handleShowResourceTableView() {\n this.props.dispatch(actions.showTableView(this.getEffectiveResource().name, null, this.props.activeViewId));\n }\n\n private handleWorkflowStepPropertiesButtonClicked() {\n this.props.dispatch(actions.showDialog('workflowStepPropertiesDialog'));\n }\n\n private handleOpenWorkspaceDirectoryClicked() {\n this.props.dispatch(actions.showItemInFolder(this.props.workspace.baseDir) as any);\n }\n\n private handleCopyWorkflowAsPythonScript() {\n const text = convertSteps(this.props.operations, this.props.workspace.workflow.steps, 'python');\n actions.copyTextToClipboard(text);\n }\n\n private handleCopyWorkflowAsShellScript() {\n const text = convertSteps(this.props.operations, this.props.workspace.workflow.steps, 'shell');\n actions.copyTextToClipboard(text);\n }\n\n private handleCopyWorkflowAsJSON() {\n actions.copyTextToClipboard(JSON.stringify(this.props.workspace.workflow, null, 4));\n }\n\n private handleEditOperationStepButtonClicked() {\n this.props.dispatch(actions.showOperationStepDialog('editOperationStepDialog'));\n }\n\n private handleRemoveOperationStepButtonClicked() {\n const resName = this.getEffectiveResourceName();\n if (resName) {\n this.props.dispatch(actions.deleteResourceInteractive(resName) as any);\n }\n }\n\n private handleCleanWorkflowButtonClicked() {\n this.props.dispatch(actions.cleanWorkspaceInteractive() as any);\n }\n\n private handleWorkspacePanelModeChanged(workspacePanelMode: WorkspacePanelMode) {\n this.props.dispatch(actions.updateSessionState({workspacePanelMode}) as any);\n }\n\n private getEffectiveWorkflowStep() {\n return this.props.workspacePanelMode === 'steps'\n ? this.props.selectedWorkflowStep : this.props.selectedResourceWorkflowStep;\n }\n\n private getEffectiveResource() {\n return this.props.workspacePanelMode === 'resources'\n ? this.props.selectedResource : this.props.selectedWorkflowStepResource;\n }\n\n private getEffectiveResourceName() {\n let resource = this.getEffectiveResource();\n let workflowStep = this.getEffectiveWorkflowStep();\n return resource ? resource.name : workflowStep ? workflowStep.id : null;\n }\n\n private static getResourceItemKey(resource: ResourceState) {\n return resource.name;\n }\n\n private static renderResourceItem(resource: ResourceState) {\n return (<LabelWithType label={resource.name}\n dataType={resource.dataType}/>);\n }\n\n private static getStepItemKey(step: WorkflowStepState) {\n return step.id;\n }\n\n private renderStepItem(step: WorkflowStepState) {\n return (<span>{this.getWorkflowStepLabel(step)}</span>);\n }\n\n render() {\n const workspace = this.props.workspace;\n if (!workspace) {\n return NO_WORKSPACE;\n }\n\n assert.ok(workspace.workflow);\n const steps = workspace.workflow.steps;\n assert.ok(steps);\n const resources = workspace.resources;\n assert.ok(resources);\n\n const workspaceName = (workspace.isScratch || !workspace.baseDir)\n ? '<unnamed>'\n : workspace.baseDir.split(/[\\\\/]/).pop();\n const workspaceLabel = (\n <Tooltip content={workspace.baseDir} position={PopoverPosition.AUTO_START}>\n <strong>{workspaceName}</strong>\n </Tooltip>\n );\n let workspaceState = null;\n if (workspace.isModified) {\n workspaceState = (\n <span key={0} style={WorkspacePanel.STATE_TAG_STYLE}\n className=\"bp3-tag bp3-intent-warning bp3-minimal\">Modified</span>\n );\n } else if (!workspace.isSaved) {\n workspaceState = (\n <span key={1} style={WorkspacePanel.STATE_TAG_STYLE}\n className=\"bp3-tag bp3-intent-success bp3-minimal\">Not saved</span>\n );\n }\n const openItemButton = (\n <ToolButton\n tooltipContent=\"Show workspace directory in file system\"\n onClick={this.handleOpenWorkspaceDirectoryClicked}\n icon=\"folder-open\"\n tooltipPosition={'top'}\n />\n );\n const copyItemButton = (\n <Popover position={PopoverPosition.LEFT}>\n <ToolButton\n tooltipContent=\"Copy workflow\"\n disabled={!steps.length}\n icon=\"clipboard\"\n tooltipPosition={'top'}\n />\n <Menu>\n <MenuItem onClick={this.handleCopyWorkflowAsPythonScript} text=\"Copy workflow as Python Script\"/>\n <MenuItem onClick={this.handleCopyWorkflowAsShellScript} text=\"Copy workflow as Shell Script\"/>\n <MenuItem onClick={this.handleCopyWorkflowAsJSON} text=\"Copy workflow as JSON\"/>\n </Menu>\n </Popover>\n );\n\n //const resourcesTooltip = \"Workspace resources that result from workflow steps\";\n //const workflowTooltip = \"Workflow steps that generate workspace resources\";\n return (\n <ScrollablePanelContent>\n <div style={WorkspacePanel.FLEX_ROW_STYLE}>\n {workspaceLabel}\n <span style={WorkspacePanel.SPACER_STYLE}/>\n {workspaceState}\n <ButtonGroup>\n {openItemButton}\n {copyItemButton}\n </ButtonGroup>\n </div>\n <Tabs id=\"workflow\"\n renderActiveTabPanelOnly={true}\n selectedTabId={this.props.workspacePanelMode}\n onChange={this.handleWorkspacePanelModeChanged}>\n <Tab id=\"steps\" title={`Workflow (${steps.length})`} panel={this.renderWorkflowStepsPanel()}/>\n <Tab id=\"resources\" title={`Resources (${resources.length})`} panel={this.renderResourcesPanel()}/>\n </Tabs>\n </ScrollablePanelContent>\n );\n }\n\n private renderWorkspaceActions() {\n const resource = this.getEffectiveResource();\n const workflowStep = this.getEffectiveWorkflowStep();\n const canShowFigure = isFigureResource(resource);\n const isOperationStepSelected = workflowStep && workflowStep.op;\n const hasSteps = this.props.workspace && this.props.workspace.workflow.steps.length;\n const canShowTableView = isDataFrameResource(resource);\n return (\n <ButtonGroup>\n <ToolButton\n tooltipContent=\"Show figure\"\n disabled={!canShowFigure}\n icon=\"eye-open\"\n tooltipPosition={'top'}\n onClick={this.handleShowFigureButtonClicked}/>\n <ToolButton\n tooltipContent=\"Show data in table\"\n disabled={!canShowTableView}\n icon=\"th\"\n tooltipPosition={'top'}\n onClick={this.handleShowResourceTableView}\n />\n <ToolButton\n tooltipContent=\"Resource/step properties\"\n disabled={!resource}\n icon=\"label\"\n tooltipPosition={'top'}\n onClick={this.handleWorkflowStepPropertiesButtonClicked}\n />\n <ToolButton\n tooltipContent=\"Edit workflow step\"\n intent={Intent.PRIMARY}\n disabled={!workflowStep}\n icon=\"edit\"\n tooltipPosition={'top'}\n onClick={this.handleEditOperationStepButtonClicked}\n />\n <ToolButton\n tooltipContent=\"Remove workflow step and its resource\"\n disabled={!workflowStep}\n icon=\"remove\"\n tooltipPosition={'top'}\n onClick={this.handleRemoveOperationStepButtonClicked}\n />\n <ToolButton\n tooltipContent=\"Clean workspace, remove all steps and resources\"\n disabled={!hasSteps}\n icon=\"delete\"\n tooltipPosition={'top'}\n onClick={this.handleCleanWorkflowButtonClicked}\n />\n {workflowStep ? <WorkflowStepPropertiesDialog selectedWorkflowStep={workflowStep}/> : null}\n {isOperationStepSelected\n ? <OperationStepDialog id={EDIT_OPERATION_STEP_DIALOG_ID} operationStep={workflowStep}/>\n : null}\n </ButtonGroup>\n );\n }\n\n private renderResourcesPanel() {\n const resources = this.props.workspace.resources;\n if (!resources || !resources.length) {\n return NO_WORKSPACE_RESOURCES;\n }\n return (\n <ContentWithDetailsPanel showDetails={this.props.showResourceDetails}\n onShowDetailsChange={this.handleShowResourceDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.resourceListHeight}\n onContentHeightChange={this.handleResourceListHeightChanged}\n actionComponent={this.renderWorkspaceActions()}>\n {this.renderResourcesList()}\n {this.renderResourceDetails()}\n </ContentWithDetailsPanel>\n );\n }\n\n private renderResourcesList() {\n const resources = this.props.workspace.resources;\n return (\n <ScrollablePanelContent>\n <ListBox items={resources}\n getItemKey={WorkspacePanel.getResourceItemKey}\n renderItem={WorkspacePanel.renderResourceItem}\n selection={this.props.selectedResourceName}\n onSelection={this.handleResourceNameSelected}\n onItemDoubleClick={this.handleEditOperationStepButtonClicked}/>\n </ScrollablePanelContent>\n );\n }\n\n private renderResourceDetails() {\n const selectedResourceAttributes = this.props.selectedResourceAttributes;\n if (!selectedResourceAttributes || !selectedResourceAttributes.length) {\n return null;\n }\n\n return (\n <ScrollablePanelContent>\n <span>Attributes:</span>\n <Table numRows={selectedResourceAttributes.length} enableRowHeader={false}>\n <Column name=\"Name\" cellRenderer={this.renderResourceAttrName}/>\n <Column name=\"Value\" cellRenderer={this.renderResourceAttrValue}/>\n </Table>\n </ScrollablePanelContent>\n );\n }\n\n private renderWorkflowStepsPanel() {\n const workflowSteps = this.props.workspace.workflow.steps;\n if (!workflowSteps || !workflowSteps.length) {\n return NO_WORKFLOW_STEPS;\n }\n return (\n <ContentWithDetailsPanel showDetails={this.props.showWorkflowStepDetails}\n onShowDetailsChange={this.handleShowWorkflowStepDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.workflowStepListHeight}\n onContentHeightChange={this.handleStepListHeightChanged}\n actionComponent={this.renderWorkspaceActions()}>\n {this.renderWorkflowStepsList()}\n {this.renderWorkflowStepDetails()}\n </ContentWithDetailsPanel>\n );\n }\n\n private renderWorkflowStepsList() {\n const workflowSteps = this.props.workspace.workflow.steps;\n return (\n <ScrollablePanelContent>\n <ListBox items={workflowSteps}\n getItemKey={WorkspacePanel.getStepItemKey}\n renderItem={this.renderStepItem}\n selection={this.props.selectedWorkflowStepId}\n onSelection={this.handleWorkflowStepIdSelected}\n onItemDoubleClick={this.handleEditOperationStepButtonClicked}/>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSMethodCanBeStatic\n private renderWorkflowStepDetails() {\n\n const selectedWorkflowStepOp = this.props.selectedWorkflowStepOp;\n if (!selectedWorkflowStepOp) {\n return null;\n }\n\n let stepInputPanel = WorkspacePanel.renderWorkflowStepPorts(\n selectedWorkflowStepOp.inputs,\n 'Step inputs:', 'No step inputs.',\n this.renderOperationStepInputName,\n this.renderOperationStepInputValue\n );\n\n let stepOutputPanel = null;\n // let stepOutputPanel = WorkspacePanel.renderWorkflowStepPorts(selectedWorkflowStepOp.outputs,\n // \"Step outputs:\", \"No step outputs.\",\n // this.renderOperationStepOutputName,\n // this.renderOperationStepOutputValue);\n\n return (\n <ScrollablePanelContent>\n {stepInputPanel}\n {stepOutputPanel}\n </ScrollablePanelContent>\n );\n }\n\n static renderWorkflowStepPorts(ports: OperationIOBaseState[], itemsTitle: string, noItemsTitle: string, renderName, renderValue) {\n if (ports && ports.length) {\n return (\n <div>\n <p>{itemsTitle}</p>\n <Table numRows={ports.length} enableRowHeader={false}>\n <Column name=\"Name\" cellRenderer={renderName}/>\n <Column name=\"Value\" cellRenderer={renderValue}/>\n </Table>\n </div>\n );\n } else {\n return (\n <div>\n <p>{noItemsTitle}</p>\n </div>\n );\n }\n }\n\n renderResourceAttrName(row: number) {\n return <Cell><TruncatedFormat>{this.props.selectedResourceAttributes[row][0]}</TruncatedFormat></Cell>\n }\n\n renderResourceAttrValue(row: number): any {\n return (\n <Cell>\n <TruncatedFormat\n showPopover={TruncatedPopoverMode.WHEN_TRUNCATED}\n detectTruncation={true}\n >\n {`${this.props.selectedResourceAttributes[row][1]}`}\n </TruncatedFormat>\n </Cell>\n );\n }\n\n renderOperationStepInputName(row: number) {\n const inputProps = this.props.selectedWorkflowStepOp.inputs[row];\n const inputPort = this.props.selectedWorkflowStep.inputs[inputProps.name];\n return WorkspacePanel.renderWorkflowPortName(inputProps, inputPort);\n }\n\n renderOperationStepInputValue(row: number): any {\n const inputProps = this.props.selectedWorkflowStepOp.inputs[row];\n const inputPort = this.props.selectedWorkflowStep.inputs[inputProps.name];\n return WorkspacePanel.renderWorkflowPortValue(inputProps, inputPort);\n }\n\n renderOperationStepOutputName(row: number) {\n const outputProps = this.props.selectedWorkflowStepOp.outputs[row];\n const outputPort = this.props.selectedWorkflowStep.outputs[outputProps.name];\n return WorkspacePanel.renderWorkflowPortName(outputProps, outputPort);\n }\n\n renderOperationStepOutputValue(row: number): any {\n const outputProps = this.props.selectedWorkflowStepOp.outputs[row];\n const outputPort = this.props.selectedWorkflowStep.outputs[outputProps.name];\n return WorkspacePanel.renderWorkflowPortValue(outputProps, outputPort);\n }\n\n //noinspection JSUnusedLocalSymbols\n static renderWorkflowPortName(portProps: OperationIOBaseState, port: WorkflowPortState) {\n return (\n <Cell><TruncatedFormat showPopover={TruncatedPopoverMode.ALWAYS}>{portProps.name}</TruncatedFormat></Cell>);\n }\n\n static renderWorkflowPortValue(portProps: OperationIOBaseState, port: WorkflowPortState) {\n let cellValue;\n if (port) {\n let units;\n if (portProps.units) {\n units = (<span className=\"bp3-text-muted\">{` (${portProps.units})`}</span>);\n }\n const source = isString(port) ? port : port.source;\n if (source) {\n cellValue = (<span>↗ <em>{source}</em></span>);\n } else {\n let value = port.value;\n const maxTextLen = 128;\n if (isString(value) && value.length > maxTextLen) {\n // Note we do this for performance reasons. BlueprintJS renders very slowly\n // e.g. for large Geometry WKT values.\n value = value.substr(0, maxTextLen) + '...';\n }\n cellValue = (<span>{value}{units}</span>);\n }\n } else {\n let defaultValue = (portProps as OperationInputState).defaultValue;\n if (isDefined(defaultValue)) {\n cellValue = (<span>{`${defaultValue}`} <span className=\"bp3-text-muted\">(default value)</span></span>);\n } else {\n cellValue = (<span className=\"bp3-text-muted\">Not given.</span>);\n }\n }\n return (<Cell>{cellValue}</Cell>);\n }\n\n //noinspection JSMethodCanBeStatic\n private getWorkflowStepLabel(step: WorkflowStepState) {\n\n const items = [];\n\n if (step && step.op) {\n let opName = step.op;\n const index = opName.lastIndexOf('.');\n if (index > 0) {\n opName = opName.slice(index + 1);\n }\n items.push(<code key={0}>{opName}()</code>);\n } else {\n items.push(<code key={0}>?()</code>);\n }\n\n const resource = this.props.resourcesMap[step.id];\n if (resource) {\n items.push(<span key={1}> → </span>);\n items.push(<LabelWithType key={2} label={resource.name}\n dataType={resource.dataType}/>);\n }\n\n if (step && step.persistent) {\n items.push(<span key={3}> </span>);\n items.push(<Icon key={4} icon=\"database\"/>);\n }\n\n return <span>{items}</span>;\n }\n}\n\nexport default connect(mapStateToProps)(WorkspacePanel);\n\n\nfunction convertSteps(operations: OperationState[], steps: WorkflowStepState[], target: 'python' | 'shell'): string {\n // TODO (forman): move this to backend, as this is best done in Python\n let lines = [];\n if (target === 'python') {\n lines.push('import cate.ops');\n } else {\n lines.push('cate ws new');\n }\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const op = findOperation(operations, step.op);\n if (op && op.inputs) {\n if (target === 'python') {\n lines.push('');\n lines.push(`# Step ${i + 1}`);\n }\n const args = [];\n for (let input of op.inputs) {\n const inputPort = step.inputs[input.name];\n if (!inputPort) {\n // No value provided, which should be ok (default value applies)\n continue;\n }\n const source = isString(inputPort) ? inputPort : inputPort.source;\n if (inputPort && source) {\n if (target === 'python') {\n args.push(`${input.name}=${source}`);\n } else {\n args.push(`${input.name}=@${source}`);\n }\n } else if (inputPort) {\n let value = inputPort.value;\n if (isUndefined(value)) {\n value = null;\n }\n let defaultValue = input.defaultValue;\n if (isUndefined(defaultValue)) {\n defaultValue = null;\n }\n if (value !== defaultValue) {\n if (isUndefinedOrNull(value)) {\n args.push(`${input.name}=None`);\n } else if (isString(value)) {\n args.push(`${input.name}=\"${value}\"`);\n } else if (isBoolean(value)) {\n args.push(`${input.name}=${value ? 'True' : 'False'}`);\n } else if (isBoolean(value)) {\n args.push(`${input.name}=${value}`);\n }\n }\n }\n }\n let resName = step.id;\n const opName = op.name;\n if (target === 'python') {\n lines.push(`${resName} = cate.ops.${opName}(${args.join(', ')})`);\n } else {\n lines.push(`cate res set ${resName} ${opName} ${args.join(' ')}`);\n }\n }\n }\n if (target === 'shell') {\n lines.push('cate ws exit');\n }\n lines.push('');\n return lines.join('\\n');\n}\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { GeographicPosition, Placemark, ResourceState, SavedLayers, State, VariableState } from '../state';\nimport * as assert from '../../common/assert';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport { ContentWithDetailsPanel } from '../components/ContentWithDetailsPanel';\nimport { LabelWithType } from '../components/LabelWithType';\nimport { ButtonGroup, Colors } from '@blueprintjs/core';\nimport { Cell, Column, Table, TruncatedFormat } from '@blueprintjs/table';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\nimport { NO_VARIABLES, NO_VARIABLES_EMPTY_RESOURCE } from '../messages';\nimport * as Cesium from 'cesium';\nimport { ToolButton } from '../components/ToolButton';\nimport { isSpatialImageVariable, isSpatialVectorVariable } from '../state-util';\nimport { isDefined, isDefinedAndNotNull } from '../../common/types';\n\ninterface IVariablesPanelProps {\n variables: VariableState[];\n selectedResource: ResourceState | null;\n selectedVariableName: string | null;\n selectedVariable: VariableState | null;\n selectedVariableAttributesTableData: [string, any][];\n variableListHeight: number;\n showVariableDetails: boolean;\n showSelectedVariableLayer: boolean;\n activeViewId: string;\n activeViewType: string;\n savedLayers: SavedLayers;\n selectedPlacemark: Placemark | null;\n selectedEntity: Cesium.Entity | null;\n globeViewPosition: GeographicPosition | null;\n positionData: { [varName: string]: number } | null\n}\n\nfunction mapStateToProps(state: State): IVariablesPanelProps {\n return {\n variables: selectors.variablesSelector(state) || selectors.EMPTY_ARRAY,\n selectedResource: selectors.selectedResourceSelector(state),\n selectedVariableName: selectors.selectedVariableNameSelector(state),\n selectedVariable: selectors.selectedVariableSelector(state),\n selectedVariableAttributesTableData: selectors.selectedVariableAttributesTableDataSelector(state),\n variableListHeight: state.session.variableListHeight,\n showVariableDetails: state.session.showVariableDetails,\n showSelectedVariableLayer: state.session.showSelectedVariableLayer,\n activeViewId: selectors.activeViewIdSelector(state),\n activeViewType: selectors.activeViewTypeSelector(state),\n savedLayers: selectors.savedLayersSelector(state),\n selectedPlacemark: selectors.selectedPlacemarkSelector(state),\n selectedEntity: selectors.selectedEntitySelector(state),\n globeViewPosition: state.location.globeViewPosition,\n positionData: state.location.positionData,\n }\n}\n\n/**\n * The VariablesPanel list all variables of the selected workspace resource.\n *\n * @author Marco Zuehlke, Norman Fomferra\n */\nclass VariablesPanel extends React.Component<IVariablesPanelProps & DispatchProp<State>, null> {\n static readonly VALUE_STYLE: CSSProperties = {float: 'right', color: Colors.BLUE5};\n\n\n constructor(props: IVariablesPanelProps & DispatchProp<State>) {\n super(props);\n this.handleSelectedVariableNameChanged = this.handleSelectedVariableNameChanged.bind(this);\n this.handleListHeightChanged = this.handleListHeightChanged.bind(this);\n this.handleShowDetailsChanged = this.handleShowDetailsChanged.bind(this);\n this.handleShowSelectedVariableLayer = this.handleShowSelectedVariableLayer.bind(this);\n this.handleAddVariableLayer = this.handleAddVariableLayer.bind(this);\n this.handleAddVariableTimeSeriesPlot = this.handleAddVariableTimeSeriesPlot.bind(this);\n this.handleAddVariableHistogramPlot = this.handleAddVariableHistogramPlot.bind(this);\n this.handleShowVariableTableView = this.handleShowVariableTableView.bind(this);\n }\n\n private handleSelectedVariableNameChanged(newSelection: Array<React.Key>) {\n const resource = this.props.selectedResource;\n assert.ok(resource);\n if (newSelection && newSelection.length) {\n const selectedVariableName = newSelection[0] as string;\n const selectedVariable = this.props.variables.find(v => v.name === selectedVariableName);\n assert.ok(selectedVariable);\n this.props.dispatch(actions.setSelectedVariable(resource, selectedVariable, this.props.savedLayers));\n } else {\n this.props.dispatch(actions.setSelectedVariable(resource, null));\n }\n }\n\n private handleListHeightChanged(value: number) {\n this.props.dispatch(actions.setSessionProperty('variableListHeight', value));\n }\n\n private handleShowDetailsChanged(value: boolean) {\n this.props.dispatch(actions.setSessionProperty('showVariableDetails', value));\n }\n\n private handleShowSelectedVariableLayer() {\n const showSelectedVariableLayer = this.props.showSelectedVariableLayer;\n this.props.dispatch(actions.setShowSelectedVariableLayer(!showSelectedVariableLayer));\n }\n\n private handleAddVariableLayer() {\n const resource = this.props.selectedResource;\n const variable = this.props.selectedVariable;\n const activeViewId = this.props.activeViewId;\n const savedLayers = this.props.savedLayers;\n assert.ok(resource);\n assert.ok(variable && variable.imageLayout);\n assert.ok(activeViewId);\n this.props.dispatch(actions.addVariableLayer(activeViewId, resource, variable, true, savedLayers));\n }\n\n private handleAddVariableTimeSeriesPlot() {\n const resource = this.props.selectedResource;\n const variable = this.props.selectedVariable;\n const placemark = this.props.selectedPlacemark;\n const placemarkName = placemark.properties['name'] || 'placemark';\n const placemarkPosition = placemark.geometry.coordinates;\n const opArgs = {\n ds: {source: resource.name},\n 'var': {value: variable.name},\n indexers: {value: `lon=${placemarkPosition[0]}, lat=${placemarkPosition[1]}`},\n properties: {value: null},\n file: {value: null},\n };\n this.props.dispatch(actions.setWorkspaceResource('cate.ops.plot.plot', opArgs,\n null, false,\n `Creating time series plot for placemark ${placemarkName}`) as any);\n }\n\n private handleAddVariableHistogramPlot() {\n const resource = this.props.selectedResource;\n const variable = this.props.selectedVariable;\n const opArgs = {\n ds: {source: resource.name},\n 'var': {value: variable.name},\n indexers: {value: null},\n properties: {value: 'bins=250'},\n file: {value: null},\n };\n this.props.dispatch(actions.setWorkspaceResource('cate.ops.plot.plot_hist', opArgs,\n null, false,\n 'Creating histogram plot') as any);\n }\n\n private handleShowVariableTableView() {\n const resource = this.props.selectedResource;\n const variable = this.props.selectedVariable;\n assert.ok(resource);\n assert.ok(variable);\n this.props.dispatch(actions.showTableView(resource.name, variable.name, this.props.activeViewId));\n }\n\n render() {\n const resource = this.props.selectedResource;\n const variables = this.props.variables;\n if (variables && variables.length) {\n return (\n <ContentWithDetailsPanel showDetails={this.props.showVariableDetails}\n onShowDetailsChange={this.handleShowDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.variableListHeight}\n onContentHeightChange={this.handleListHeightChanged}\n actionComponent={this.renderVariableActionRow()}>\n <VariablesListPanel\n selectedEntity={this.props.selectedEntity}\n globeViewPosition={this.props.globeViewPosition}\n positionData={this.props.positionData}\n selectedVariableName={this.props.selectedVariableName}\n onSelectedVariableNameChanged={this.handleSelectedVariableNameChanged}\n variables={this.props.variables}\n />\n <VariableDetailsPanel\n tableData={this.props.selectedVariableAttributesTableData}\n />\n </ContentWithDetailsPanel>\n );\n } else if (resource) {\n return NO_VARIABLES_EMPTY_RESOURCE(resource.name);\n } else {\n return NO_VARIABLES;\n }\n }\n\n private renderVariableActionRow() {\n const selectedVariable = this.props.selectedVariable;\n const isSpatialVariable = selectedVariable && selectedVariable.numDims >= 2 && selectedVariable.imageLayout;\n const placemark = this.props.selectedPlacemark;\n const hasWorldView = this.props.activeViewType && this.props.activeViewType === 'world';\n const canAddLayer = isSpatialVariable && hasWorldView;\n const canAddTimeSeriesPlot = isSpatialVariable && placemark;\n const canAddHistogramPlot = selectedVariable && selectedVariable.numDims > 0;\n const maxSize = 10000;\n return (\n <ButtonGroup>\n <ToolButton tooltipContent=\"Toggle image layer visibility\"\n icon={this.props.showSelectedVariableLayer ? 'eye-open' : 'eye-off'}\n tooltipPosition={'top'}\n onClick={this.handleShowSelectedVariableLayer}/>\n <ToolButton tooltipContent=\"Add a new image layer\"\n disabled={!canAddLayer}\n icon=\"layer\"\n tooltipPosition={'top'}\n onClick={this.handleAddVariableLayer}/>\n <ToolButton tooltipContent=\"Create a time series plot from selected placemark\"\n disabled={!canAddTimeSeriesPlot}\n icon=\"timeline-line-chart\"\n tooltipPosition={'top'}\n onClick={this.handleAddVariableTimeSeriesPlot}/>\n <ToolButton tooltipContent=\"Create a histogram plot\"\n disabled={!canAddHistogramPlot}\n icon=\"timeline-bar-chart\"\n tooltipPosition={'top'}\n onClick={this.handleAddVariableHistogramPlot}/>\n <ToolButton tooltipContent={`Show data in table (only first ${maxSize} values)`}\n icon=\"th\"\n tooltipPosition={'top'}\n onClick={this.handleShowVariableTableView}/>\n </ButtonGroup>\n );\n }\n\n\n}\n\nexport default connect(mapStateToProps)(VariablesPanel);\n\n\ninterface VariablesListPanelProps {\n variables: VariableState[];\n selectedVariableName: string | null;\n onSelectedVariableNameChanged: (selectedVariableName: Array<React.Key>) => void;\n selectedEntity: Cesium.Entity | null;\n globeViewPosition: GeographicPosition | null;\n positionData: { [varName: string]: number } | null\n}\n\nclass VariablesListPanel extends React.PureComponent<VariablesListPanelProps> {\n private getItemKey = (variable: VariableState) => {\n return variable.name;\n };\n\n private getItemValue = (variable: VariableState) => {\n\n let value;\n\n if (isSpatialVectorVariable(variable)) {\n const selectedEntity = this.props.selectedEntity;\n if (selectedEntity && selectedEntity.properties) {\n const property = selectedEntity.properties[variable.name];\n if (isDefinedAndNotNull(property)) {\n value = property.getValue();\n }\n }\n } else if (isSpatialImageVariable(variable)) {\n const positionData = this.props.positionData;\n if (positionData) {\n value = positionData[variable.name];\n }\n }\n\n return isDefined(value) ? value : variable.value;\n };\n\n private renderItem = (variable: VariableState) => {\n\n const label = (\n <LabelWithType\n label={variable.name}\n dataType={variable.dataType}\n tooltipText={variable.attributes && variable.attributes.long_name}\n />\n );\n\n const value = this.getItemValue(variable);\n if (!isDefined(value)) {\n return label;\n }\n\n return (\n <div>\n {label}\n <span style={VariablesPanel.VALUE_STYLE}>{`${value}`}</span>\n </div>\n );\n };\n\n private handleVariableNameSelection = (selectedVariableName: Array<React.Key>) => {\n this.props.onSelectedVariableNameChanged(selectedVariableName);\n };\n\n render() {\n // We compute a new key here to force updates of the list box items either when the selected entity\n // changes or new position data may be available.\n let key = 'vlb';\n const selectedEntityId = this.props.selectedEntity && this.props.selectedEntity.id;\n if (selectedEntityId) {\n key += `_${selectedEntityId}`;\n }\n const geoPos = this.props.globeViewPosition;\n if (geoPos) {\n key += `_${geoPos.longitude},${geoPos.latitude}`;\n }\n return (\n <ScrollablePanelContent>\n <ListBox key={key}\n items={this.props.variables}\n getItemKey={this.getItemKey}\n renderItem={this.renderItem}\n selection={this.props.selectedVariableName}\n selectionMode={ListBoxSelectionMode.SINGLE}\n onSelection={this.handleVariableNameSelection}/>\n </ScrollablePanelContent>\n );\n }\n}\n\ninterface VariableDetailsPanelProps {\n tableData: [string, any][] | null;\n}\n\nclass VariableDetailsPanel extends React.PureComponent<VariableDetailsPanelProps> {\n static readonly DIV_STYLE: CSSProperties = {paddingTop: 4, width: '100%'};\n\n private renderAttributeName = (index: number): any => {\n return <Cell>{this.props.tableData[index][0]}</Cell>;\n };\n\n private renderAttributeValue = (index: number): any => {\n return <Cell><TruncatedFormat>{this.props.tableData[index][1]}</TruncatedFormat></Cell>;\n };\n\n render() {\n const tableData = this.props.tableData;\n if (!tableData || !tableData.length) {\n return null;\n }\n return (\n <div style={VariableDetailsPanel.DIV_STYLE}>\n <Table numRows={tableData.length} enableRowHeader={false}>\n <Column name=\"Name\" cellRenderer={this.renderAttributeName}/>\n <Column name=\"Value\" cellRenderer={this.renderAttributeValue}/>\n </Table>\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport { DialogState, LayerState, LayerVariableState, ResourceState, State } from '../state';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport { LabelWithType } from '../components/LabelWithType';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\n\ninterface ILayerSourcesDialogProps extends DialogState {\n resources: ResourceState[];\n layers: LayerState[];\n savedLayers: { [name: string]: LayerState };\n activeViewId: string;\n layerVariables: LayerVariableState[];\n}\n\ninterface ILayerSourcesDialogState {\n selectedIndices: number[] | null;\n}\n\nfunction mapStateToProps(state: State): ILayerSourcesDialogProps {\n return {\n isOpen: selectors.dialogStateSelector(LayerSourcesDialog.DIALOG_ID)(state).isOpen,\n layers: selectors.layersSelector(state),\n savedLayers: selectors.savedLayersSelector(state),\n activeViewId: selectors.activeViewIdSelector(state),\n resources: selectors.resourcesSelector(state),\n layerVariables: selectors.selectedLayerVariablesSelector(state),\n };\n}\n\nclass LayerSourcesDialog extends React.Component<DispatchProp<State> & ILayerSourcesDialogProps, ILayerSourcesDialogState> {\n static readonly DIALOG_ID = 'layerSourcesDialog';\n static readonly DIALOG_TITLE = 'Add Layer';\n\n constructor(props: DispatchProp<State> & ILayerSourcesDialogProps) {\n super(props);\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.handleChangedVariableSelection = this.handleChangedVariableSelection.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.state = {selectedIndices: null};\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(LayerSourcesDialog.DIALOG_ID));\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(LayerSourcesDialog.DIALOG_ID));\n let selectLayer = true;\n for (let index of this.state.selectedIndices) {\n const layerVariable = this.props.layerVariables[index];\n this.props.dispatch(\n actions.addVariableLayer(this.props.activeViewId,\n layerVariable.resource,\n layerVariable.variable,\n selectLayer,\n this.props.savedLayers\n ));\n selectLayer = false;\n }\n }\n\n private canConfirm(): boolean {\n return !!this.state.selectedIndices && this.state.selectedIndices.length > 0;\n }\n\n private handleChangedVariableSelection(newSelection: number[]) {\n this.setState({selectedIndices: newSelection.slice()});\n }\n\n render() {\n return (\n <ModalDialog\n isOpen={this.props.isOpen}\n title={LayerSourcesDialog.DIALOG_TITLE}\n icon=\"layers\"\n onCancel={this.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n />\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n if (!this.props.layerVariables.length) {\n return (<p>There are currently no resource or variables that could be added as layers.</p>);\n }\n return (\n <ScrollablePanelContent>\n <p>Select the variables you wish to add as a layer:</p>\n <ListBox items={this.props.layerVariables}\n getItemKey={LayerSourcesDialog.getVariableItemKey}\n renderItem={LayerSourcesDialog.renderVariableItem}\n selectionMode={ListBoxSelectionMode.MULTIPLE}\n selection={this.state.selectedIndices}\n onSelection={this.handleChangedVariableSelection}/>\n </ScrollablePanelContent>\n );\n }\n\n //noinspection JSUnusedLocalSymbols\n private static getVariableItemKey(variable: LayerVariableState, index: number) {\n return index;\n }\n\n private static renderVariableItem(layerVariable: LayerVariableState) {\n const variable = layerVariable.variable;\n return (\n <div>\n <span>{layerVariable.resource.name}</span>\n <span> / </span>\n <LabelWithType label={variable.name}\n dataType={`${variable.dataType}[${variable.dimNames}]`}\n units={variable.units}\n />\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(LayerSourcesDialog);\n","import * as React from 'react';\nimport {createRef, CSSProperties} from 'react';\nimport {\n ButtonGroup,\n Checkbox,\n Colors, ContextMenu,\n Icon,\n IconName,\n Label,\n Menu,\n MenuItem,\n Popover,\n Position\n} from '@blueprintjs/core';\nimport {connect, Dispatch} from 'react-redux';\nimport {Placemark, PlacemarkCollection, State} from '../state';\nimport {ListBox, ListBoxSelectionMode} from '../components/ListBox';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport {ContentWithDetailsPanel} from '../components/ContentWithDetailsPanel';\nimport LayerSourcesDialog from './LayerSourcesDialog';\nimport {ScrollablePanelContent} from '../components/ScrollableContent';\nimport {ViewState} from '../components/ViewState';\nimport {NO_PLACE_SELECTED, NO_PLACES} from '../messages';\nimport {FieldValue} from '../components/field/Field';\nimport {TextField} from '../components/field/TextField';\nimport {geoJsonToText, geometryGeoJsonToCsv, geometryGeoJsonToGeometryWkt, isBox} from '../../common/geometry-util';\nimport {GeometryToolType} from '../components/cesium/geometry-tool';\nimport {isBoolean} from '../../common/types';\nimport {NumericField, NumericFieldValue} from '../components/field/NumericField';\nimport {ToolButton} from '../components/ToolButton';\n\n\ninterface IPlacemarksPanelDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IPlacemarksPanelProps {\n placemarkCollection: PlacemarkCollection;\n selectedPlacemarkId: string | null,\n selectedPlacemark: Placemark | null,\n activeView: ViewState<any> | null;\n placemarkListHeight: number,\n showPlacemarkDetails: boolean,\n geometryToolType: GeometryToolType;\n}\n\nfunction mapStateToProps(state: State): IPlacemarksPanelProps {\n return {\n placemarkCollection: selectors.placemarkCollectionSelector(state),\n selectedPlacemarkId: selectors.selectedPlacemarkIdSelector(state),\n selectedPlacemark: selectors.selectedPlacemarkSelector(state),\n placemarkListHeight: state.session.placemarkListHeight,\n showPlacemarkDetails: selectors.showPlacemarkDetailsSelector(state),\n activeView: selectors.activeViewSelector(state),\n geometryToolType: selectors.newPlacemarkToolTypeSelector(state),\n };\n}\n\n\n/**\n * The PlacemarksPanel is used to display, select, and manage user geometries.\n *\n * @author Norman Fomferra\n */\nclass PlacemarksPanel extends React.Component<IPlacemarksPanelProps & IPlacemarksPanelDispatch, null> {\n\n constructor(props: IPlacemarksPanelProps & IPlacemarksPanelDispatch) {\n super(props);\n this.handleListHeightChanged = this.handleListHeightChanged.bind(this);\n this.handleShowDetailsChanged = this.handleShowDetailsChanged.bind(this);\n this.handleNewPointToolButtonClicked = this.handleNewPointToolButtonClicked.bind(this);\n this.handleNewPolygonToolButtonClicked = this.handleNewPolygonToolButtonClicked.bind(this);\n this.handleNewPolylineToolButtonClicked = this.handleNewPolylineToolButtonClicked.bind(this);\n this.handleNewBoxToolButtonClicked = this.handleNewBoxToolButtonClicked.bind(this);\n this.handleRemovePlacemarkButtonClicked = this.handleRemovePlacemarkButtonClicked.bind(this);\n this.handleLocatePlacemarkButtonClicked = this.handleLocatePlacemarkButtonClicked.bind(this);\n this.handleChangedPlacemarkVisibility = this.handleChangedPlacemarkVisibility.bind(this);\n this.handleChangedPlacemarkSelection = this.handleChangedPlacemarkSelection.bind(this);\n this.handleChangedPlacemarkName = this.handleChangedPlacemarkName.bind(this);\n this.handleChangedPointLongitude = this.handleChangedPointLongitude.bind(this);\n this.handleChangedPointLatitude = this.handleChangedPointLatitude.bind(this);\n this.handleCopySelectedPlacemarkAsCsv = this.handleCopySelectedPlacemarkAsCsv.bind(this);\n this.handleCopySelectedPlacemarkAsWkt = this.handleCopySelectedPlacemarkAsWkt.bind(this);\n this.handleCopySelectedPlacemarkAsGeoJSON = this.handleCopySelectedPlacemarkAsGeoJSON.bind(this);\n this.handlePlacemarkDoubleClick = this.handlePlacemarkDoubleClick.bind(this);\n this.renderPlacemarkItem = this.renderPlacemarkItem.bind(this);\n }\n\n private handleListHeightChanged(value: number) {\n this.props.dispatch(actions.updateSessionState({placemarkListHeight: value}));\n }\n\n private handleNewPointToolButtonClicked() {\n this.props.dispatch(actions.activateNewPlacemarkTool('PointTool'));\n }\n\n private handleNewPolygonToolButtonClicked() {\n this.props.dispatch(actions.activateNewPlacemarkTool('PolygonTool'));\n }\n\n private handleNewPolylineToolButtonClicked() {\n this.props.dispatch(actions.activateNewPlacemarkTool('PolylineTool'));\n }\n\n private handleNewBoxToolButtonClicked() {\n this.props.dispatch(actions.activateNewPlacemarkTool('BoxTool'));\n }\n\n private handleShowDetailsChanged(value: boolean) {\n this.props.dispatch(actions.updateSessionState({showPlacemarkDetails: value}));\n }\n\n private handleRemovePlacemarkButtonClicked() {\n this.props.dispatch(actions.removePlacemark(this.props.selectedPlacemarkId));\n }\n\n private handleLocatePlacemarkButtonClicked() {\n this.props.dispatch(actions.locatePlacemark(this.props.selectedPlacemarkId) as any);\n }\n\n private handlePlacemarkDoubleClick(placemark: Placemark) {\n this.props.dispatch(actions.locatePlacemark(placemark.id) as any);\n }\n\n private handleChangedPlacemarkVisibility(placemark: Placemark, visible: boolean) {\n this.props.dispatch(actions.updatePlacemarkProperties(placemark.id, {visible}));\n }\n\n private handleChangedPlacemarkName(nameField: FieldValue<string>) {\n const placemark = this.props.selectedPlacemark;\n const name = nameField.value;\n this.props.dispatch(actions.updatePlacemarkStyle(placemark.id, {title: name}));\n }\n\n private handleChangedPointLongitude(longitude: NumericFieldValue) {\n const placemark = this.props.selectedPlacemark;\n let geometry = placemark.geometry;\n geometry = {...geometry, coordinates: [longitude.value, geometry.coordinates[1]]};\n this.props.dispatch(actions.updatePlacemarkGeometry(placemark.id, geometry));\n }\n\n private handleChangedPointLatitude(latitude: NumericFieldValue) {\n const placemark = this.props.selectedPlacemark;\n let geometry = placemark.geometry;\n geometry = {...geometry, coordinates: [geometry.coordinates[0], latitude.value]};\n this.props.dispatch(actions.updatePlacemarkGeometry(placemark.id, geometry));\n }\n\n private handleChangedPlacemarkSelection(newSelection: string[]) {\n const selectedPlacemarkId = newSelection.length ? newSelection[0] : null;\n this.props.dispatch(actions.setSelectedPlacemarkId(selectedPlacemarkId));\n }\n\n private handleCopySelectedPlacemarkAsCsv() {\n this.handleCopyGeometryAsCsv(this.props.selectedPlacemark);\n }\n\n private handleCopySelectedPlacemarkAsWkt() {\n this.handleCopyGeometryAsWkt(this.props.selectedPlacemark);\n }\n\n private handleCopySelectedPlacemarkAsGeoJSON() {\n this.handleCopyGeometryAsGeoJson(this.props.selectedPlacemark);\n }\n\n private handleCopyGeometryAsCsv = (placemark: Placemark) => {\n actions.copyTextToClipboard(geometryGeoJsonToCsv(placemark.geometry));\n };\n\n private handleCopyGeometryAsWkt = (placemark: Placemark) => {\n actions.copyTextToClipboard(geometryGeoJsonToGeometryWkt(placemark.geometry));\n };\n\n private handleCopyGeometryAsGeoJson = (placemark: Placemark) => {\n actions.copyTextToClipboard(geoJsonToText(placemark));\n };\n\n private static getPlacemarkItemKey(placemark: Placemark) {\n return placemark.id;\n }\n\n render() {\n return (\n <div style={{width: '100%'}}>\n <ContentWithDetailsPanel showDetails={this.props.showPlacemarkDetails}\n onShowDetailsChange={this.handleShowDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.placemarkListHeight}\n onContentHeightChange={this.handleListHeightChanged}\n actionComponent={this.renderActionButtonRow()}>\n {this.renderPlacemarksList()}\n {this.renderPlacemarkDetails()}\n </ContentWithDetailsPanel>\n </div>\n );\n }\n\n private renderActionButtonRow() {\n const isPointToolActive = this.props.geometryToolType === 'PointTool';\n const isPolylineToolActive = this.props.geometryToolType === 'PolylineTool';\n const isPolygonToolActive = this.props.geometryToolType === 'PolygonTool';\n const isBoxToolActive = this.props.geometryToolType === 'BoxTool';\n return (\n <ButtonGroup>\n <ToolButton\n tooltipContent=\"New marker\"\n onClick={this.handleNewPointToolButtonClicked}\n icon=\"dot\"\n tooltipPosition={'top'}\n active={isPointToolActive}\n disabled={false}\n />\n <ToolButton\n tooltipContent=\"New polyline\"\n onClick={this.handleNewPolylineToolButtonClicked}\n icon=\"slash\"\n tooltipPosition={'top'}\n active={isPolylineToolActive}\n disabled={false}\n />\n <ToolButton\n tooltipContent=\"New polygon\"\n onClick={this.handleNewPolygonToolButtonClicked}\n icon=\"polygon-filter\"\n tooltipPosition={'top'}\n active={isPolygonToolActive}\n disabled={false}\n />\n <ToolButton\n tooltipContent=\"New box\"\n onClick={this.handleNewBoxToolButtonClicked}\n icon=\"widget\"\n tooltipPosition={'top'}\n active={isBoxToolActive}\n disabled={false}\n />\n <ToolButton\n tooltipContent=\"Remove selected place\"\n disabled={!this.props.selectedPlacemarkId}\n onClick={this.handleRemovePlacemarkButtonClicked}\n icon=\"remove\"\n tooltipPosition={'top'}\n />\n <ToolButton\n tooltipContent=\"Locate selected place in view\"\n disabled={!this.props.selectedPlacemarkId}\n onClick={this.handleLocatePlacemarkButtonClicked}\n icon=\"locate\"\n tooltipPosition={'top'}\n />\n <Popover disabled={!this.props.selectedPlacemark} position={Position.LEFT}>\n <ToolButton\n tooltipContent={!this.props.selectedPlacemark ?\n \"Copy selected place: Please select a place first.\" : \"Copy selected place.\"}\n disabled={!this.props.selectedPlacemark}\n icon=\"clipboard\"\n tooltipPosition={'top'}\n />\n <Menu>\n <MenuItem onClick={this.handleCopySelectedPlacemarkAsCsv} text=\"Copy as CSV\"/>\n <MenuItem onClick={this.handleCopySelectedPlacemarkAsWkt} text=\"Copy as WKT\"/>\n <MenuItem onClick={this.handleCopySelectedPlacemarkAsGeoJSON} text=\"Copy as GeoJSON\"/>\n </Menu>\n </Popover>\n <LayerSourcesDialog/>\n </ButtonGroup>\n );\n }\n\n private renderPlacemarksList() {\n const placemarks = this.props.placemarkCollection.features;\n if (!placemarks || !placemarks.length) {\n return NO_PLACES;\n }\n\n return (\n <ScrollablePanelContent>\n <ListBox items={placemarks}\n getItemKey={PlacemarksPanel.getPlacemarkItemKey}\n renderItem={this.renderPlacemarkItem}\n selectionMode={ListBoxSelectionMode.SINGLE}\n selection={this.props.selectedPlacemarkId}\n onSelection={this.handleChangedPlacemarkSelection}/>\n </ScrollablePanelContent>\n );\n }\n\n private renderPlacemarkItem(placemark: Placemark) {\n return <PlacemarkItem placemark={placemark}\n onDoubleClick={this.handlePlacemarkDoubleClick}\n onVisibilityChange={this.handleChangedPlacemarkVisibility}\n onCopyPlacemarkCsv={this.handleCopyGeometryAsCsv}\n onCopyPlacemarkWkt={this.handleCopyGeometryAsWkt}\n onCopyPlacemarkGeoJSON={this.handleCopyGeometryAsGeoJson}\n />;\n }\n\n private renderPlacemarkDetails() {\n const placemarks = this.props.placemarkCollection.features;\n if (!placemarks || !placemarks.length) {\n return null;\n }\n const placemark = this.props.selectedPlacemark;\n if (!placemark) {\n return NO_PLACE_SELECTED;\n }\n return (\n <div style={{width: '100%'}}>\n <Label key=\"spacer\"> </Label>\n {this.renderPlacemarkTitle()}\n {this.renderPlacemarkGeometry()}\n </div>\n );\n }\n\n private renderPlacemarkTitle() {\n const placemark = this.props.selectedPlacemark;\n const name = placemark.properties['title'];\n return (\n <Label className=\"bp3-inline\">\n Name\n <span className=\"bp3-text-muted\"> (optional)</span>\n <TextField value={{textValue: name, value: name}}\n onChange={this.handleChangedPlacemarkName}\n size={16}\n uncontrolled={true}\n placeholder=\"Placemark name\"\n />\n </Label>\n );\n }\n\n private renderPlacemarkGeometry() {\n const placemark = this.props.selectedPlacemark;\n const geometry = placemark.geometry;\n if (geometry.type === 'Point') {\n const position = geometry.coordinates;\n return (\n <div>\n <Label className=\"bp3-inline\">\n Longitude\n <span className=\"bp3-text-muted\"> (in degrees)</span>\n <NumericField value={position[0]}\n onChange={this.handleChangedPointLongitude}\n size={12}\n uncontrolled={true}\n min={-180}\n max={+180}\n placeholder=\"Longitude in degrees\"/>\n </Label>\n <Label className=\"bp3-inline\">\n Latitude\n <span className=\"bp3-text-muted\"> (in degrees)</span>\n <NumericField value={position[1]}\n onChange={this.handleChangedPointLatitude}\n size={12}\n uncontrolled={true}\n min={-90}\n max={+90}\n placeholder=\"Latitude in degrees\"/>\n </Label>\n </div>\n );\n } else if (isBox(geometry)) {\n // TODO (nf): allow editing box coordinates\n }\n return null;\n }\n}\n\nexport default connect(mapStateToProps)(PlacemarksPanel);\n\n\ninterface IPlacemarkItemProps {\n placemark: Placemark;\n onVisibilityChange: (placemark: Placemark, visible?) => void;\n onCopyPlacemarkCsv: (placemark: Placemark) => void;\n onCopyPlacemarkWkt: (placemark: Placemark) => void;\n onCopyPlacemarkGeoJSON: (placemark: Placemark) => void;\n onDoubleClick: (placemark: Placemark) => void;\n}\n\n\nclass PlacemarkItem extends React.PureComponent<IPlacemarkItemProps, {}> {\n\n static readonly DIV_STYLE: CSSProperties = {display: 'flex', alignItems: 'center'};\n static readonly CHECK_STYLE: CSSProperties = {flexGrow: 0, margin: 0};\n static readonly LABEL_STYLE: CSSProperties = {flexGrow: 1};\n static readonly ICON_STYLE: CSSProperties = {marginLeft: '0.5em'};\n static readonly NAME_STYLE: CSSProperties = {marginLeft: '0.5em'};\n static readonly INFO_STYLE: CSSProperties = {float: 'right', color: Colors.BLUE5};\n\n placemarkItemRef = createRef<HTMLDivElement>();\n\n constructor(props: IPlacemarkItemProps) {\n super(props);\n this.handleVisibilityChanged = this.handleVisibilityChanged.bind(this);\n this.handleCopyPlacemarkCsv = this.handleCopyPlacemarkCsv.bind(this);\n this.handleCopyPlacemarkWkt = this.handleCopyPlacemarkWkt.bind(this);\n this.handleCopyPlacemarksGeoJSON = this.handleCopyPlacemarksGeoJSON.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n handleDoubleClick() {\n this.props.onDoubleClick(this.props.placemark);\n }\n\n handleCopyPlacemarkCsv() {\n this.props.onCopyPlacemarkCsv(this.props.placemark);\n }\n\n handleCopyPlacemarkWkt() {\n this.props.onCopyPlacemarkWkt(this.props.placemark);\n }\n\n handleCopyPlacemarksGeoJSON() {\n this.props.onCopyPlacemarkGeoJSON(this.props.placemark);\n }\n\n handleVisibilityChanged(event) {\n this.props.onVisibilityChange(this.props.placemark, event.target.checked)\n }\n\n componentDidMount(): void {\n const rightClickMe = this.placemarkItemRef.current;\n\n if (rightClickMe) {\n rightClickMe.oncontextmenu = (e: MouseEvent) => {\n // prevent the browser's native context menu\n e.preventDefault();\n\n // render a Menu without JSX...\n const menu = React.createElement(\n Menu,\n {}, // empty props\n React.createElement(MenuItem, {onClick: this.handleCopyPlacemarkCsv, text: \"Copy as CSV\"}),\n React.createElement(MenuItem, {onClick: this.handleCopyPlacemarkWkt, text: \"Copy as WKT\"}),\n React.createElement(MenuItem, {\n onClick: this.handleCopyPlacemarksGeoJSON,\n text: \"Copy as GeoJSON\"\n }),\n );\n\n // mouse position is available on event\n ContextMenu.show(menu, {left: e.clientX, top: e.clientY}, () => {\n // menu was closed; callback optional\n });\n };\n }\n }\n\n public render() {\n const placemark = this.props.placemark;\n const visible = placemark.properties['visible'];\n const title = placemark.properties['title'];\n const geometry = placemark.geometry;\n let icon: IconName;\n let info;\n if (geometry.type === 'Point') {\n const position = geometry.coordinates;\n info = ` ${position[0].toFixed(3)}, ${position[1].toFixed(3)}`;\n icon = 'dot';\n } else if (geometry.type === 'LineString') {\n const coordinates = geometry.coordinates;\n info = ` ${coordinates.length} positions`;\n icon = 'slash';\n } else if (geometry.type === 'Polygon') {\n const ring = geometry.coordinates[0] as any;\n info = ` ${ring.length - 1} positions`;\n icon = isBox(geometry) ? 'widget' : 'polygon-filter';\n }\n\n\n return (\n <div ref={this.placemarkItemRef} style={PlacemarkItem.DIV_STYLE}>\n <Icon style={{marginRight: '4px'}} icon={visible ? 'eye-open': 'eye-off'} />\n <Checkbox\n style={PlacemarkItem.CHECK_STYLE}\n checked={isBoolean(visible) ? visible : true}\n onChange={this.handleVisibilityChanged} />\n <div onDoubleClick={this.handleDoubleClick} style={PlacemarkItem.LABEL_STYLE}>\n <span style={PlacemarkItem.ICON_STYLE}><Icon icon={icon}/></span>\n <span style={PlacemarkItem.NAME_STYLE}>{title}</span>\n <span style={PlacemarkItem.INFO_STYLE}>{info}</span>\n </div>\n </div>\n );\n }\n}\n\n","import * as React from 'react';\nimport { connect, Dispatch } from 'react-redux';\nimport { AnchorButton, Checkbox, ControlGroup, Icon, InputGroup, Label } from '@blueprintjs/core';\n\nimport { State } from '../state';\nimport * as selectors from '../selectors';\nimport * as actions from '../actions';\nimport { ViewState } from '../components/ViewState';\nimport { NO_ACTIVE_VIEW } from '../messages';\n\n\ninterface IViewPanelDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IViewPanelProps {\n activeView: ViewState<any> | null;\n activeViewId: string | null;\n lastBaseMapId: string;\n showLayerTextOverlay: boolean;\n}\n\nfunction mapStateToProps(state: State): IViewPanelProps {\n return {\n activeView: selectors.activeViewSelector(state),\n activeViewId: selectors.activeViewIdSelector(state),\n lastBaseMapId: state.session.lastBaseMapId,\n showLayerTextOverlay: state.session.showLayerTextOverlay,\n };\n}\n\n/**\n * The LayersPanel is used to select and browse available layers.\n *\n * @author Norman Fomferra\n */\nclass ViewPanel extends React.Component<IViewPanelProps & IViewPanelDispatch, null> {\n\n private static ACTION_ITEM_STYLE = {margin: '0.1em 0em 2em 0em'};\n private static PROPERTY_ITEM_STYLE = {margin: '0.1em 0em 0.6em 0em'};\n private static PROPERTY_ITEM_CONTROL_GROUP_STYLE = {display: 'flex', alignItems: 'center'};\n private static PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE = {marginBlock: 0};\n\n constructor(props: IViewPanelProps & IViewPanelDispatch) {\n super(props);\n this.onViewModeChange = this.onViewModeChange.bind(this);\n this.onAddWorldView = this.onAddWorldView.bind(this);\n this.onShowLayerTextOverlayChange = this.onShowLayerTextOverlayChange.bind(this);\n }\n\n onViewModeChange(ev: any) {\n this.props.dispatch(actions.setViewMode(this.props.activeViewId, ev.target.value));\n }\n\n onShowLayerTextOverlayChange(ev) {\n const showLayerTextOverlay = ev.target.checked;\n this.props.dispatch(actions.updateSessionState({showLayerTextOverlay}));\n }\n\n onAddWorldView() {\n this.props.dispatch(actions.addWorldView(this.props.activeViewId, this.props.lastBaseMapId));\n }\n\n render() {\n return (\n <div style={{margin: '0.2em 0.2em 0.2em 0.2em'}}>\n <AnchorButton icon=\"globe\"\n style={ViewPanel.ACTION_ITEM_STYLE}\n onClick={this.onAddWorldView}>New World View</AnchorButton>\n {this.renderActiveViewPanel()}\n </div>\n );\n }\n\n renderActiveViewPanel() {\n\n const activeView = this.props.activeView;\n if (!activeView) {\n return NO_ACTIVE_VIEW;\n }\n\n // TODO (forman): make title field editable\n const titleField = (\n <Label style={ViewPanel.PROPERTY_ITEM_STYLE}>\n Active view:\n <ControlGroup style={ViewPanel.PROPERTY_ITEM_CONTROL_GROUP_STYLE}>\n <Icon icon={activeView.icon}\n style={ViewPanel.PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE}/>\n <InputGroup\n style={ViewPanel.PROPERTY_ITEM_CONTROL_GROUP_MEMBER_STYLE}\n type=\"text\"\n value={activeView.title}\n dir=\"auto\"\n disabled={true}\n />\n </ControlGroup>\n </Label>\n );\n\n if (activeView.type === 'world') {\n\n return (\n <div>\n {titleField}\n\n <Checkbox label=\"Show layer text overlay\"\n style={ViewPanel.PROPERTY_ITEM_STYLE}\n checked={this.props.showLayerTextOverlay}\n onChange={this.onShowLayerTextOverlayChange}/>\n </div>\n );\n } else {\n return titleField;\n }\n }\n}\n\nexport default connect(mapStateToProps)(ViewPanel);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { AnchorButton, ButtonGroup, Icon, Intent, ProgressBar, Card } from '@blueprintjs/core';\nimport { State, TaskState } from '../state';\nimport * as actions from '../actions';\nimport {\n getJobFailureIconName,\n getJobFailureIntentName,\n getJobFailureTitle,\n JobFailure,\n JobStatusEnum\n} from '../webapi';\n\ninterface ITaskComponentProps {\n task: TaskState;\n jobId: string;\n\n onCancelJob(number): void;\n\n onRemoveJob(number): void;\n}\n\nfunction mapStateToProps(state: State, ownProps: ITaskComponentProps): ITaskComponentProps {\n return ownProps;\n}\n\nclass TaskComponent extends React.Component<DispatchProp<State> & ITaskComponentProps, null> {\n static readonly FLEX_ROW_STYLE: CSSProperties = {display: 'flex', flexFlow: 'row nowrap', width: '100%'};\n static readonly PROGRESS_STYLE: CSSProperties = {\n flex: '3 1 auto',\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'center',\n paddingRight: 10\n };\n\n constructor(props: ITaskComponentProps) {\n super(props);\n this.handleShowDetails = this.handleShowDetails.bind(this);\n }\n\n handleShowDetails() {\n this.props.dispatch(actions.showJobFailureDetails(this.props.task.title, this.props.task.failure));\n }\n\n private static isRunning(taskState: TaskState): boolean {\n return taskState.status === JobStatusEnum.NEW ||\n taskState.status === JobStatusEnum.SUBMITTED ||\n taskState.status === JobStatusEnum.IN_PROGRESS;\n }\n\n private static isMakingProgress(taskState: TaskState): boolean {\n return taskState.status === JobStatusEnum.IN_PROGRESS && !!taskState.progress;\n }\n\n private static renderIcon(jobFailure: JobFailure) {\n const icon = getJobFailureIconName(jobFailure);\n const intent = getJobFailureIntentName(jobFailure);\n return (\n <Icon icon={icon} intent={intent} style={{paddingRight: '0.4em'}}/>\n );\n }\n\n render() {\n const taskState = this.props.task;\n const jobId = this.props.jobId;\n\n let title = (<p>{taskState.title || `Task #${jobId}`}:</p>);\n let body = null;\n\n if (TaskComponent.isRunning(taskState)) {\n if (TaskComponent.isMakingProgress(taskState)) {\n // cancel is only possible, if we have a progress monitor\n let progressValue = 0;\n if (taskState.progress.total > 0 && taskState.progress.worked > 0) {\n progressValue = taskState.progress.worked / taskState.progress.total;\n }\n const progressBar = (<ProgressBar intent={Intent.SUCCESS} value={progressValue}/>);\n const cancelJob = () => this.props.onCancelJob(jobId);\n const cancelButton = (<AnchorButton type=\"button\" onClick={cancelJob} text=\"Cancel\"/>);\n\n const cancelableProgress = (\n <div style={TaskComponent.FLEX_ROW_STYLE}>\n <div style={TaskComponent.PROGRESS_STYLE}>{progressBar}</div>\n <div style={{flex: '0 1 auto'}}>{cancelButton}</div>\n </div>\n );\n\n let progressMag = null;\n if (taskState.progress && taskState.progress.message) {\n progressMag = (<div className=\"bp3-text-muted\">{taskState.progress.message}</div>);\n }\n body = (<div>{cancelableProgress}{progressMag}</div>);\n } else {\n body = (<ProgressBar/>);\n }\n } else if (taskState.status === JobStatusEnum.CANCELLED || taskState.status === JobStatusEnum.FAILED) {\n const removeJob = () => this.props.onRemoveJob(jobId);\n let detailsButton;\n let message;\n if (taskState.status === JobStatusEnum.CANCELLED) {\n message = <div>{TaskComponent.renderIcon(taskState.failure)}Task has been cancelled.</div>\n } else {\n detailsButton = (<AnchorButton onClick={this.handleShowDetails}>Details</AnchorButton>);\n message = (\n <div>{TaskComponent.renderIcon(taskState.failure)}{getJobFailureTitle(taskState.failure)}<br/>\n <div className=\"bp3-text-muted\" style={{paddingTop: '0.4em'}}>{taskState.failure.message}</div>\n </div>\n );\n }\n body = (\n <div>\n <ButtonGroup className=\"bp3-minimal\" style={{float: 'right'}}>\n {detailsButton}\n <AnchorButton icon=\"cross\" onClick={removeJob}/>\n </ButtonGroup>\n {message}\n </div>\n );\n }\n return (<Card>{title}{body}</Card>);\n };\n}\n\nexport default connect(mapStateToProps)(TaskComponent);\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { State, TaskState } from '../state';\nimport { JobStatusEnum } from '../webapi';\nimport * as actions from '../actions';\nimport { Card } from '@blueprintjs/core';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\nimport TaskComponent from './TaskComponent';\n\ninterface ITaskPanelProps {\n tasks: { [jobId: number]: TaskState };\n}\n\ninterface ITaskPanelDispatch {\n cancelJob(number): void;\n\n removeJob(number): void;\n}\n\nfunction mapStateToProps(state: State): ITaskPanelProps {\n return {\n tasks: state.communication.tasks\n };\n}\n\nconst mapDispatchToProps = {\n cancelJob: actions.cancelJob,\n removeJob: actions.removeTaskState\n};\n\n/**\n * The TasksPanel is used display all tasks originating from cate desktop,\n * this includes progress and error messages.\n *\n * @author Marco Zuehlke\n */\nclass TasksPanel extends React.Component<ITaskPanelProps & ITaskPanelDispatch & DispatchProp<State>, null> {\n\n render() {\n const tasks: { [jobId: number]: TaskState } = this.props.tasks;\n\n const taskComponents = [];\n for (let jobId in tasks) {\n if (tasks[jobId].status !== JobStatusEnum.DONE) {\n taskComponents.push(<TaskComponent\n key={jobId}\n jobId={jobId}\n task={tasks[jobId]}\n onRemoveJob={this.props.removeJob}\n onCancelJob={this.props.cancelJob}\n />);\n }\n }\n if (taskComponents.length) {\n return <ScrollablePanelContent>\n {taskComponents}\n </ScrollablePanelContent>;\n } else {\n return <Card>\n <p><strong>There are currently no active tasks.</strong></p>\n </Card>;\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TasksPanel as any);\n","import * as React from 'react';\n\nexport interface TermsAndConditionsProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function TermsAndConditions({className, style}: TermsAndConditionsProps) {\n return (\n <a\n className={className}\n style={style}\n href=\"https://climate.esa.int/en/terms-and-conditions/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Terms & Conditions\n </a>\n );\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { Intent, Tag } from '@blueprintjs/core';\nimport { CATE_APP_VERSION } from '../../version';\nimport { State } from '../state';\n\n\ninterface IVersionTagsOwnProps {\n minimal?: boolean;\n}\n\ninterface IVersionTagsProps extends IVersionTagsOwnProps {\n uiVersion: string;\n apiVersion: string | null;\n}\n\nfunction mapStateToProps(state: State, ownProps: IVersionTagsOwnProps): IVersionTagsProps {\n let serviceInfo = state.communication.webAPIServiceInfo;\n return {\n uiVersion: CATE_APP_VERSION,\n apiVersion: serviceInfo ? serviceInfo.version : null,\n minimal: ownProps.minimal,\n };\n}\n\nconst VersionTags: React.FC<IVersionTagsProps> = ({\n uiVersion,\n apiVersion,\n minimal,\n }) => {\n return (\n <div>\n <VersionTag\n label=\"Cate UI\"\n version={uiVersion}\n minimal={minimal}\n />\n {apiVersion &&\n <>\n  \n <VersionTag\n label=\"Cate API\"\n version={apiVersion}\n minimal={minimal}\n />\n </>}\n </div>\n );\n}\n\nexport default connect(mapStateToProps)(VersionTags);\n\n\ninterface IVersionTagProps {\n label: string;\n version: string;\n minimal?: boolean;\n}\n\n\nconst VersionTag: React.FC<IVersionTagProps> = (\n {\n label,\n version,\n minimal\n }\n) => {\n const isDevVersion = version.includes('dev');\n const intent = isDevVersion ? Intent.WARNING : Intent.NONE;\n return (\n <Tag\n intent={intent}\n round={true}\n minimal={minimal}\n >\n {label} {version}\n </Tag>\n );\n}\n\n","// IMPORTANT: Any changes of CATE_APP_VERSION must be synchronized\n// with the version field in \"../package.json\".\n//\nexport const CATE_APP_VERSION = \"4.0.0-dev.5\";\n\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport {\n Icon,\n IconName,\n Intent,\n Popover,\n PopoverInteractionKind,\n Position,\n ProgressBar,\n Tooltip\n} from '@blueprintjs/core';\n\nimport { TermsAndConditions } from '../components/TermsAndConditions';\nimport { GeographicPosition, State, TaskState, WebAPIStatus } from '../state';\nimport * as selectors from '../selectors';\nimport * as actions from '../actions';\nimport { JobStatusEnum } from '../webapi';\nimport TaskComponent from './TaskComponent';\nimport VersionTags from './VersionTags';\n\n\ninterface IStatusBarProps {\n webAPIStatus: WebAPIStatus | null;\n webAPIServiceURL: string;\n tasks: { [jobId: number]: TaskState };\n globePosition: GeographicPosition | null;\n}\n\ninterface IStatusBarDispatch {\n cancelJob(number): void;\n\n removeJob(number): void;\n}\n\nfunction mapStateToProps(state: State): IStatusBarProps {\n return {\n webAPIStatus: state.communication.webAPIStatus,\n webAPIServiceURL: state.communication.webAPIServiceURL,\n tasks: state.communication.tasks,\n globePosition: selectors.globeMousePositionSelector(state) || selectors.globeViewPositionSelector(state),\n };\n}\n\nconst mapDispatchToProps = {\n cancelJob: actions.cancelJob,\n removeJob: actions.removeTaskState\n};\n\n/**\n * The TasksPanel is used display all tasks originating from cate desktop,\n * this includes progress and error messages.\n */\nclass StatusBar extends React.Component<IStatusBarProps & IStatusBarDispatch & DispatchProp<State>, null> {\n\n static readonly DIV_STYLE: CSSProperties = {\n flex: 'none',\n display: 'flex',\n flexFlow: 'row nowrap',\n height: '1.5em',\n fontSize: 'small',\n backgroundColor: '#2B95D6',\n overflow: 'hidden',\n };\n\n static readonly DIV_MARGIN: CSSProperties = {margin: \"2px 4px 2px 4px\"};\n static readonly DIV_MESSAGE_STYLE: CSSProperties = {flex: '60 1 auto', ...StatusBar.DIV_MARGIN};\n static readonly DIV_TAC_STYLE: CSSProperties = {flex: '0 1 auto', ...StatusBar.DIV_MARGIN};\n static readonly DIV_TASKS_STYLE: CSSProperties = {flex: '20 1 auto', ...StatusBar.DIV_MARGIN};\n static readonly DIV_CURSOR_STYLE: CSSProperties = {flex: '20 1 auto', ...StatusBar.DIV_MARGIN};\n static readonly DIV_STATUS_STYLE: CSSProperties = {flex: '0 1 auto', margin: \"0px 4px 0px 4px\"};\n\n render() {\n // TODO dummy\n const message = 'Ready.';\n\n let cursor;\n let position = this.props.globePosition;\n if (position) {\n cursor = `lon=${position.longitude.toFixed(2)}, lat=${position.latitude.toFixed(2)}`\n } else {\n cursor = '';\n }\n\n return (\n <div style={StatusBar.DIV_STYLE}>\n <div style={StatusBar.DIV_MESSAGE_STYLE}>{message}</div>\n <div style={StatusBar.DIV_TASKS_STYLE}>{this.renderTasks()}</div>\n <div style={StatusBar.DIV_CURSOR_STYLE}>{cursor}</div>\n <div style={StatusBar.DIV_TAC_STYLE}>{<TermsAndConditions/>}</div>\n <VersionTags minimal={true}/>\n <div style={StatusBar.DIV_STATUS_STYLE}>{this.renderBackendStatus()}</div>\n </div>\n );\n }\n\n private renderTasks() {\n const tasks: { [jobId: number]: TaskState } = this.props.tasks;\n\n let numRunningTasks = 0;\n let numFailedTasks = 0;\n const taskComponents = [];\n for (let jobId in tasks) {\n const task = tasks[jobId];\n let render = false;\n if (task.status === JobStatusEnum.SUBMITTED || task.status === JobStatusEnum.IN_PROGRESS) {\n numRunningTasks++;\n render = true;\n } else if (task.status === JobStatusEnum.CANCELLED || task.status === JobStatusEnum.FAILED) {\n numFailedTasks++;\n render = true;\n }\n if (render) {\n taskComponents.push(\n <TaskComponent\n key={jobId}\n jobId={jobId}\n task={this.props.tasks[jobId]}\n onRemoveJob={this.props.removeJob}\n onCancelJob={this.props.cancelJob}\n />);\n }\n }\n\n if (taskComponents.length > 0) {\n let msg;\n let spinner = null;\n if (numRunningTasks > 0 && numFailedTasks > 0) {\n msg = `${numRunningTasks} running / ${numFailedTasks} failed task(s)`;\n } else if (numRunningTasks > 0) {\n msg = `${numRunningTasks} running task(s)`;\n } else if (numFailedTasks > 0) {\n msg = `${numFailedTasks} failed task(s)`;\n }\n if (numRunningTasks > 0) {\n spinner = (\n <div style={{\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'center',\n width: '12em',\n height: '1.5em'\n }}>\n <ProgressBar intent={Intent.SUCCESS}/>\n </div>);\n }\n const tasksInPopover = <div style={{width: '300px'}}>{taskComponents}</div>;\n return (\n <Popover\n content={tasksInPopover}\n position={Position.TOP}\n interactionKind={PopoverInteractionKind.HOVER}>\n <div style={{display: 'flex', flexFlow: 'row nowrap'}}>\n {spinner}\n <div\n style={{display: 'flex', flexFlow: 'column', justifyContent: 'center', paddingLeft: '5px'}}>\n {msg}\n </div>\n </div>\n </Popover>\n );\n } else {\n return null;\n }\n }\n\n private renderBackendStatus() {\n let icon: IconName;\n let tooltipText;\n const mode = ` (${this.props.webAPIServiceURL})`;\n if (this.props.webAPIStatus === 'connecting') {\n icon = 'link';\n tooltipText = 'Connecting' + mode;\n } else if (this.props.webAPIStatus === 'open') {\n icon = 'link';\n tooltipText = 'Connected' + mode;\n } else if (this.props.webAPIStatus === 'error') {\n icon = 'offline';\n tooltipText = 'Error' + mode;\n } else if (this.props.webAPIStatus === 'closed') {\n icon = 'offline';\n tooltipText = 'Closed' + mode;\n } else {\n icon = 'help';\n tooltipText = 'Unknown' + mode;\n }\n return (\n <Tooltip content={tooltipText} hoverOpenDelay={1500} position={Position.LEFT_TOP}>\n <Icon icon={icon} iconSize={12}/>\n </Tooltip>\n );\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StatusBar as any);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\n\nexport interface ISubPanelHeaderProps {\n title: string;\n divStyle?: React.CSSProperties;\n titleStyle?: React.CSSProperties;\n}\n\n/**\n * A header for a sub-panel component.\n *\n * @author Hans Permana\n */\nexport class SubPanelHeader extends React.PureComponent<ISubPanelHeaderProps, any> {\n static readonly DIV_STYLE: CSSProperties = {\n margin: '12px 0 6px 0', padding: '2px 6px', backgroundColor: '#3c5161'\n };\n\n static readonly SPAN_STYLE: CSSProperties = {\n color: '#aaafaf', fontSize: '0.9em', fontWeight: 100\n };\n\n render() {\n const divStyle = this.props.divStyle ? {...SubPanelHeader.DIV_STYLE, ...this.props.divStyle} : SubPanelHeader.DIV_STYLE;\n const titleStyle = this.props.titleStyle ? {...SubPanelHeader.SPAN_STYLE, ...this.props.titleStyle} : SubPanelHeader.SPAN_STYLE;\n return (\n <div style={divStyle}>\n <span style={titleStyle}>{this.props.title}</span>\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport { connect, DispatchProp } from 'react-redux';\nimport { ButtonGroup, Checkbox, HTMLSelect, Icon, Intent, Label, Radio, RadioGroup, Slider } from '@blueprintjs/core';\n\nimport {\n BaseMapState,\n ColorMapCategoryState,\n ImageLayerState,\n LayerState,\n SPLIT_MODE_LEFT,\n SPLIT_MODE_OFF,\n SPLIT_MODE_RIGHT,\n State,\n VariableImageLayerState,\n VariableState\n} from '../state';\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ContentWithDetailsPanel } from '../components/ContentWithDetailsPanel';\nimport LayerSourcesDialog from './LayerSourcesDialog';\nimport { AUTO_LAYER_ID, getLayerDisplayName, getLayerTypeIconName } from '../state-util';\nimport { ScrollablePanelContent } from '../components/ScrollableContent';\nimport { ViewState } from '../components/ViewState';\nimport { NO_LAYER_SELECTED, NO_LAYERS_EMPTY_VIEW, NO_LAYERS_NO_VIEW } from '../messages';\nimport { SubPanelHeader } from '../components/SubPanelHeader';\nimport { ToolButton } from '../components/ToolButton';\n\n\ninterface ILayersPanelProps {\n offlineMode: boolean;\n selectedVariable: VariableState | null;\n activeView: ViewState<any> | null;\n layers: Array<LayerState>;\n selectedLayerId: string | null;\n selectedLayerIndex: number;\n selectedLayer: LayerState | null;\n selectedImageLayer: ImageLayerState | null;\n selectedVariableImageLayer: VariableImageLayerState | null;\n baseMaps: BaseMapState[];\n baseMapId: string;\n layerListHeight: number;\n showLayerDetails: boolean;\n colorMapCategories: Array<ColorMapCategoryState>;\n}\n\nfunction mapStateToProps(state: State): ILayersPanelProps {\n return {\n offlineMode: selectors.offlineModeSelector(state),\n selectedVariable: selectors.selectedVariableSelector(state),\n activeView: selectors.activeViewSelector(state),\n layers: selectors.layersSelector(state),\n selectedLayerId: selectors.selectedLayerIdSelector(state),\n selectedLayerIndex: selectors.selectedLayerIndexSelector(state),\n selectedLayer: selectors.selectedLayerSelector(state),\n selectedImageLayer: selectors.selectedImageLayerSelector(state),\n selectedVariableImageLayer: selectors.selectedVariableImageLayerSelector(state),\n baseMaps: selectors.baseMapsSelector(state),\n baseMapId: selectors.baseMapIdSelector(state),\n layerListHeight: state.session.layerListHeight,\n showLayerDetails: state.session.showLayerDetails,\n colorMapCategories: selectors.colorMapCategoriesSelector(state)\n };\n}\n\n/**\n * The LayersPanel is used to select and browse available layers.\n *\n * @author Norman Fomferra\n */\nclass LayersPanel extends React.Component<ILayersPanelProps & DispatchProp<State>, null> {\n\n static readonly SLIDER_DIV_STYLE_10 = {width: '100%', paddingLeft: '1em', paddingRight: '1em'};\n static readonly LABEL_SPAN_STYLE_100 = {flexBasis: '100px', paddingLeft: '5px'};\n static readonly LAYER_DIV_STYLE = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n height: '100%'\n };\n static readonly LAYER_LABEL_ELEMENT_STYLE = {marginLeft: '0.5em'};\n static readonly LAYER_CHECKBOX_STYLE = {flexGrow: 0, margin: 0};\n static readonly BG_MAP_CONTAINER_STYLE = {display: 'flex', alignItems: 'center', marginTop: 3, marginBottom: 3};\n static readonly BG_MAP_LABEL_STYLE = {flexGrow: 0, marginRight: 3};\n static readonly BG_MAP_VALUE_STYLE = {flexGrow: 1, marginRight: 1, display: 'flex', justifyContent: 'flex-end'};\n\n constructor(props: ILayersPanelProps & DispatchProp<State>) {\n super(props);\n this.handleShowDetailsChanged = this.handleShowDetailsChanged.bind(this);\n this.handleListHeightChanged = this.handleListHeightChanged.bind(this);\n this.handleAddLayerButtonClicked = this.handleAddLayerButtonClicked.bind(this);\n this.handleRemoveLayerButtonClicked = this.handleRemoveLayerButtonClicked.bind(this);\n this.handleMoveLayerUpButtonClicked = this.handleMoveLayerUpButtonClicked.bind(this);\n this.handleMoveLayerDownButtonClicked = this.handleMoveLayerDownButtonClicked.bind(this);\n this.handleChangedLayerSelection = this.handleChangedLayerSelection.bind(this);\n this.handleChangedLayerVisibility = this.handleChangedLayerVisibility.bind(this);\n this.handleChangedLayerSplitMode = this.handleChangedLayerSplitMode.bind(this);\n this.handleChangedBaseMap = this.handleChangedBaseMap.bind(this);\n this.renderLayerItem = this.renderLayerItem.bind(this);\n }\n\n private static getLayerItemKey(layer: LayerState) {\n return layer.id;\n }\n\n private static stopPropagation(event) {\n event.stopPropagation();\n }\n\n private static capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n componentDidMount(): void {\n if (!this.props.colorMapCategories) {\n this.props.dispatch(actions.loadColorMaps() as any);\n }\n }\n\n render() {\n let activeView = this.props.activeView;\n if (!activeView || activeView.type !== 'world') {\n return NO_LAYERS_NO_VIEW;\n }\n\n return (\n <div style={{width: '100%'}}>\n <ContentWithDetailsPanel showDetails={this.props.showLayerDetails}\n onShowDetailsChange={this.handleShowDetailsChanged}\n isSplitPanel={true}\n contentHeight={this.props.layerListHeight}\n onContentHeightChange={this.handleListHeightChanged}\n actionComponent={this.renderActionButtonRow()}>\n <div>\n {this.renderBackgroundMapSelector()}\n {this.renderLayersList()}\n </div>\n {this.renderLayerDetails()}\n </ContentWithDetailsPanel>\n </div>\n );\n }\n\n private handleShowDetailsChanged(value: boolean) {\n this.props.dispatch(actions.setSessionProperty('showLayerDetails', value));\n }\n\n private handleListHeightChanged(value: number) {\n this.props.dispatch(actions.setSessionProperty('layerListHeight', value));\n }\n\n private handleAddLayerButtonClicked() {\n this.props.dispatch(actions.showDialog('layerSourcesDialog'));\n }\n\n private handleRemoveLayerButtonClicked() {\n this.props.dispatch(actions.removeLayer(this.props.activeView.id, this.props.selectedLayerId));\n }\n\n private handleMoveLayerUpButtonClicked() {\n this.props.dispatch(actions.moveLayerUp(this.props.activeView.id, this.props.selectedLayerId));\n }\n\n private handleMoveLayerDownButtonClicked() {\n this.props.dispatch(actions.moveLayerDown(this.props.activeView.id, this.props.selectedLayerId));\n }\n\n private handleChangedLayerVisibility(layer: LayerState, visible: boolean) {\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {visible}) as any);\n }\n\n private handleChangedLayerSplitMode(event) {\n this.props.dispatch(actions.setLayerSplitMode(this.props.activeView.id,\n this.props.selectedLayerId,\n event.target.value));\n }\n\n private handleChangedLayerSelection(newSelection: string[]) {\n const selectedLayerId = newSelection.length ? newSelection[0] : null;\n this.props.dispatch(actions.setSelectedLayerId(this.props.activeView.id, selectedLayerId));\n }\n\n private handleChangedBaseMap(event: React.ChangeEvent<HTMLSelectElement>) {\n this.props.dispatch(actions.setBaseMap(this.props.activeView.id, event.target.value) as any);\n }\n\n private renderLayerItem(layer: LayerState) {\n return (\n <div style={LayersPanel.LAYER_DIV_STYLE}>\n <Icon style={{marginRight: '4px'}} icon={layer.visible ? 'eye-open': 'eye-off'} />\n <Checkbox\n style={LayersPanel.LAYER_CHECKBOX_STYLE}\n checked={layer.visible}\n onClick={LayersPanel.stopPropagation}\n onChange={(event: any) => {\n this.handleChangedLayerVisibility(layer, event.target.checked)\n }}/>\n <Icon style={LayersPanel.LAYER_LABEL_ELEMENT_STYLE} icon={getLayerTypeIconName(layer)} iconSize={12}/>\n <span style={LayersPanel.LAYER_LABEL_ELEMENT_STYLE}>{getLayerDisplayName(layer)}</span>\n </div>\n );\n }\n\n private renderActionButtonRow() {\n const layerCount = this.props.layers ? this.props.layers.length : 0;\n const selectedLayerIndex = this.props.selectedLayerIndex;\n const selectedLayer = this.props.selectedLayer;\n const canRemoveLayer = selectedLayer && selectedLayer.id !== AUTO_LAYER_ID;\n const canMoveLayerUp = selectedLayerIndex > 0;\n const canMoveLayerDown = selectedLayerIndex >= 0 && selectedLayerIndex < layerCount - 1;\n return (\n <ButtonGroup>\n <ToolButton\n tooltipContent=\"Add a new layer\"\n intent={Intent.PRIMARY}\n onClick={this.handleAddLayerButtonClicked}\n icon=\"add\"\n tooltipPosition={'top'}\n />\n <ToolButton\n tooltipContent=\"Remove selected layer\"\n disabled={!canRemoveLayer}\n onClick={this.handleRemoveLayerButtonClicked}\n icon=\"remove\"\n tooltipPosition={'top'}\n />\n <ToolButton\n tooltipContent=\"Move layer up\"\n disabled={!canMoveLayerUp}\n onClick={this.handleMoveLayerUpButtonClicked}\n icon=\"arrow-up\"\n tooltipPosition={'top'}\n />\n <ToolButton\n tooltipContent=\"Move layer down\"\n disabled={!canMoveLayerDown}\n onClick={this.handleMoveLayerDownButtonClicked}\n icon=\"arrow-down\"\n tooltipPosition={'top'}\n />\n <LayerSourcesDialog/>\n </ButtonGroup>\n );\n }\n\n private renderBackgroundMapSelector() {\n return (\n <div style={LayersPanel.BG_MAP_CONTAINER_STYLE}>\n <div style={LayersPanel.BG_MAP_LABEL_STYLE}>Base map:</div>\n <div style={LayersPanel.BG_MAP_VALUE_STYLE}>\n <HTMLSelect\n disabled={this.props.offlineMode}\n value={this.props.offlineMode ? 'natural_offline' : this.props.baseMapId}\n onChange={this.handleChangedBaseMap}\n >\n {this.props.baseMaps.map(bgMap => (\n <option key={bgMap.id} value={bgMap.id}>\n {bgMap.title}\n </option>)\n )}\n </HTMLSelect>\n </div>\n </div>\n );\n }\n\n private renderLayersList() {\n const layers = this.props.layers;\n if (!layers || !layers.length) {\n return null;\n }\n\n return (\n <ScrollablePanelContent>\n <ListBox\n items={layers}\n getItemKey={LayersPanel.getLayerItemKey}\n renderItem={this.renderLayerItem}\n selectionMode={ListBoxSelectionMode.SINGLE}\n selection={this.props.selectedLayerId}\n onSelection={this.handleChangedLayerSelection}\n />\n </ScrollablePanelContent>\n );\n }\n\n private renderLayerDetails() {\n const layers = this.props.layers;\n if (!layers || !layers.length) {\n return NO_LAYERS_EMPTY_VIEW;\n }\n\n if (!this.props.selectedLayer) {\n return (\n <React.Fragment>\n <Label style={{height: '20px'}}> </Label>\n {NO_LAYER_SELECTED}\n </React.Fragment>\n )\n }\n\n if (this.props.selectedImageLayer) {\n return (\n <div>\n {this.renderDataSelectionSection()}\n {this.renderSplitModeSection()}\n </div>\n )\n }\n }\n\n private renderDataSelectionSection() {\n const layer = this.props.selectedVariableImageLayer;\n const variable = this.props.selectedVariable;\n if (!layer || !variable || variable.numDims <= 2) {\n return null;\n }\n\n const handleChangedLayerVarIndex = (i: number, value: number) => {\n const varIndex = layer.varIndex.slice();\n varIndex[i] = value;\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {varIndex}) as any);\n };\n\n const n = variable.numDims - 2;\n const dimensionRows = [];\n for (let i = 0; i < n; i++) {\n const dimension = variable.dimNames[i];\n const max = variable.shape[i] - 1;\n if (max > 0) {\n const value = layer.varIndex[i];\n dimensionRows.push(\n <Label key={dimension + '_index'} className=\"bp3-inline\" style={{display: 'flex'}}>\n <span\n style={LayersPanel.LABEL_SPAN_STYLE_100}>{LayersPanel.capitalizeFirstLetter(dimension) + ' index'}</span>\n <div style={{\n ...LayersPanel.SLIDER_DIV_STYLE_10,\n width: undefined,\n flex: 'auto 1',\n margin: 'auto 0'\n }}>\n <Slider min={0}\n max={max}\n stepSize={1}\n labelStepSize={max}\n value={value}\n onChange={(value: number) => handleChangedLayerVarIndex(i, value)}\n />\n </div>\n </Label>\n );\n }\n }\n\n if (dimensionRows.length === 0) {\n return null;\n }\n\n return (\n <React.Fragment>\n <SubPanelHeader title=\"DATA SELECTION\"/>\n {dimensionRows}\n </React.Fragment>\n );\n }\n\n private renderSplitModeSection() {\n const splitMode = this.props.selectedImageLayer.splitMode || SPLIT_MODE_OFF;\n return (\n <React.Fragment>\n <SubPanelHeader title=\"LAYER SPLIT\"/>\n <RadioGroup\n key=\"layerSplit\"\n inline={true}\n onChange={this.handleChangedLayerSplitMode}\n selectedValue={splitMode}\n >\n <Radio label=\"Show left\" value={SPLIT_MODE_LEFT}/>\n <Radio label=\"Show right\" value={SPLIT_MODE_RIGHT}/>\n <Radio label=\"Off\" value={SPLIT_MODE_OFF}/>\n </RadioGroup>\n </React.Fragment>\n );\n }\n}\n\nexport default connect(mapStateToProps)(LayersPanel);\n\n","import { Field, FieldType } from './Field';\nimport { INumericFieldProps, validateNumber } from './NumericField';\nimport { isUndefinedOrNull } from '../../../common/types';\n\nexport type NumericRange = [number, number];\nexport type NumericRangeFieldType = FieldType<NumericRange>;\n\nexport interface INumericRangeFieldProps extends INumericFieldProps {\n}\n\n/**\n * A NumericRangeField is an input field that provides a numeric range of two number values (x1 and x2 properties).\n *\n * @author Norman Fomferra\n */\nexport class NumericRangeField extends Field<INumericRangeFieldProps> {\n\n parseValue(textValue: string): NumericRangeFieldType {\n const pair = parseNumericPair(textValue);\n if (!pair) {\n return null;\n }\n const x1 = pair[0];\n const x2 = pair[1];\n if (x2 < x1) {\n return [x2, x1];\n }\n return pair;\n }\n\n validateValue(value: NumericRangeFieldType): void {\n super.validateValue(value);\n if (isUndefinedOrNull(value)) {\n if (!this.props.nullable) {\n throw new Error('Numeric range value expected.');\n }\n return;\n }\n validateNumber(value[0], this.props.nullable, this.props.min, this.props.max, this.props.isInt);\n validateNumber(value[1], this.props.nullable, this.props.min, this.props.max, this.props.isInt);\n }\n\n formatValue(value: NumericRangeFieldType | null): string {\n if (!value || value.length < 2) {\n return '';\n }\n return `${value[0]}, ${value[1]}`;\n }\n}\n\nexport function parseNumericPair(textValue: string): [number, number] {\n if (!textValue || textValue.trim() === '') {\n return null;\n }\n const pair = textValue.split(',');\n if (pair.length === 2) {\n let x1 = parseFloat(pair[0]);\n let x2 = parseFloat(pair[1]);\n return [x1, x2];\n } else {\n throw new Error('Value must be a pair of numbers.');\n }\n}\n","import * as React from 'react';\r\nimport { connect, DispatchProp } from 'react-redux';\r\nimport { ColorState } from 'react-color';\r\nimport SketchPicker from 'react-color/lib/components/sketch/Sketch';\r\nimport {\r\n AnchorButton,\r\n Button,\r\n Colors,\r\n ControlGroup,\r\n HTMLSelect,\r\n Intent,\r\n Label,\r\n NumberRange,\r\n Popover,\r\n PopoverInteractionKind,\r\n PopoverPosition,\r\n Radio,\r\n RadioGroup,\r\n RangeSlider,\r\n Slider,\r\n Switch,\r\n Tooltip\r\n} from '@blueprintjs/core';\r\nimport * as Cesium from 'cesium';\r\n\r\nimport { SimpleStyle } from '../../common/geojson-simple-style';\r\nimport * as actions from '../actions';\r\nimport { FieldValue } from '../components/field/Field';\r\nimport { NumericField } from '../components/field/NumericField';\r\nimport { NumericRangeField } from '../components/field/NumericRangeField';\r\nimport { TextField } from '../components/field/TextField';\r\nimport { ListBox, ListBoxSelectionMode } from '../components/ListBox';\r\nimport { SubPanelHeader } from '../components/SubPanelHeader';\r\nimport { ToolButton } from '../components/ToolButton';\r\nimport { ViewState } from '../components/ViewState';\r\nimport { NO_ENTITY_FOR_STYLE, NO_LAYER_FOR_STYLE } from '../messages';\r\nimport * as selectors from '../selectors';\r\nimport {\r\n ColorMapCategoryState,\r\n ColorMapState,\r\n ImageLayerState,\r\n LayerState,\r\n Placemark,\r\n ResourceState,\r\n ResourceVectorLayerState,\r\n State,\r\n STYLE_CONTEXT_ENTITY,\r\n STYLE_CONTEXT_LAYER,\r\n VariableImageLayerState,\r\n VariableState,\r\n VectorLayerState\r\n} from '../state';\r\nimport { getLayerDisplayName } from '../state-util';\r\n\r\n\r\nfunction getDisplayFractionDigits(min: number, max: number) {\r\n const n = Math.round(Math.log10(max - min));\r\n if (n < 0) {\r\n return 1 - n;\r\n } else if (n <= 2) {\r\n return 2;\r\n } else if (n <= 3) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction formatNumber(x: number, fractionDigits: number) {\r\n return fractionDigits < 3 ? x.toFixed(fractionDigits) : x.toExponential(1);\r\n}\r\n\r\ninterface IStylesPanelProps {\r\n selectedResource: ResourceState | null;\r\n selectedVariable: VariableState | null,\r\n activeView: ViewState<any> | null;\r\n layers: Array<LayerState>;\r\n selectedLayer: LayerState | null;\r\n selectedImageLayer: ImageLayerState | null;\r\n selectedVariableImageLayer: VariableImageLayerState | null;\r\n selectedVectorLayer: VectorLayerState | null;\r\n selectedResourceVectorLayer: ResourceVectorLayerState | null;\r\n selectedEntity: Cesium.Entity | null;\r\n selectedPlacemark: Placemark | null;\r\n styleContext: 'entity' | 'layer';\r\n showLayerDetails: boolean;\r\n colorMapCategories: Array<ColorMapCategoryState>;\r\n selectedColorMap: ColorMapState | null;\r\n displayMinMax: [number, number];\r\n isComputingVariableStatistics: boolean;\r\n vectorStyle: SimpleStyle;\r\n}\r\n\r\nfunction mapStateToProps(state: State) {\r\n return {\r\n selectedResource: selectors.selectedResourceSelector(state),\r\n selectedVariable: selectors.selectedVariableSelector(state),\r\n activeView: selectors.activeViewSelector(state),\r\n layers: selectors.layersSelector(state),\r\n selectedLayer: selectors.selectedLayerSelector(state),\r\n selectedImageLayer: selectors.selectedImageLayerSelector(state),\r\n selectedVariableImageLayer: selectors.selectedVariableImageLayerSelector(state),\r\n selectedVectorLayer: selectors.selectedVectorLayerSelector(state),\r\n selectedResourceVectorLayer: selectors.selectedResourceVectorLayerSelector(state),\r\n selectedEntity: selectors.selectedEntitySelector(state),\r\n selectedPlacemark: selectors.selectedPlacemarkSelector(state),\r\n styleContext: selectors.styleContextSelector(state),\r\n showLayerDetails: state.session.showLayerDetails,\r\n colorMapCategories: selectors.colorMapCategoriesSelector(state),\r\n selectedColorMap: selectors.selectedColorMapSelector(state),\r\n displayMinMax: selectors.selectedVariableImageLayerDisplayMinMaxSelector(state),\r\n isComputingVariableStatistics: selectors.isComputingVariableStatistics(state),\r\n vectorStyle: selectors.vectorStyleSelector(state),\r\n };\r\n}\r\n\r\nconst DISPLAY_RANGE_STYLE = {\r\n display: 'grid',\r\n gridTemplateColumns: 'auto auto auto',\r\n justifyItems: 'stretch',\r\n alignItems: 'center',\r\n columnGap: '0.7em'};\r\n\r\nclass StylesPanel extends React.Component<IStylesPanelProps & DispatchProp<State>, null> {\r\n static readonly SLIDER_DIV_STYLE_05 = {width: '100%', paddingLeft: '0.5em', paddingRight: '0.5em'};\r\n static readonly SLIDER_DIV_STYLE_10 = {width: '100%', paddingLeft: '1em', paddingRight: '1em'};\r\n static readonly SLIDER_DIV_STYLE_15 = {width: '100%', paddingLeft: '1.5em', paddingRight: '1.5em'};\r\n\r\n static readonly LABEL_SPAN_STYLE_100 = {flexBasis: '100px', paddingLeft: '5px'};\r\n\r\n static readonly LABEL_BOTTOM_MARGIN = {display: 'flex', margin: '0 0 5px'};\r\n\r\n constructor(props: IStylesPanelProps) {\r\n super(props);\r\n this.handleUpdateDisplayStatistics = this.handleUpdateDisplayStatistics.bind(this);\r\n this.handleChangedDisplayMinMax = this.handleChangedDisplayMinMax.bind(this);\r\n this.handleChangedDisplayRange = this.handleChangedDisplayRange.bind(this);\r\n this.handleChangedDisplayAlphaBlend = this.handleChangedDisplayAlphaBlend.bind(this);\r\n this.handleChangedColorMapName = this.handleChangedColorMapName.bind(this);\r\n this.handleChangedStyleContext = this.handleChangedStyleContext.bind(this);\r\n this.handleChangedFillColor = this.handleChangedFillColor.bind(this);\r\n this.handleChangedFillColorFromPicker = this.handleChangedFillColorFromPicker.bind(this);\r\n this.handleChangedFillOpacity = this.handleChangedFillOpacity.bind(this);\r\n this.handleChangedStrokeWidth = this.handleChangedStrokeWidth.bind(this);\r\n this.handleChangedStrokeColor = this.handleChangedStrokeColor.bind(this);\r\n this.handleChangedStrokeColorFromPicker = this.handleChangedStrokeColorFromPicker.bind(this);\r\n this.handleChangedStrokeOpacity = this.handleChangedStrokeOpacity.bind(this);\r\n this.handleChangedMarkerColor = this.handleChangedMarkerColor.bind(this);\r\n this.handleChangedMarkerColorFromPicker = this.handleChangedMarkerColorFromPicker.bind(this);\r\n this.handleChangedMarkerSize = this.handleChangedMarkerSize.bind(this);\r\n this.handleChangedMarkerSymbol = this.handleChangedMarkerSymbol.bind(this);\r\n }\r\n\r\n componentDidMount(): void {\r\n if (!this.props.colorMapCategories) {\r\n this.props.dispatch(actions.loadColorMaps() as any);\r\n }\r\n }\r\n\r\n public render() {\r\n return (\r\n <React.Fragment>\r\n {this.renderLayerDetails()}\r\n </React.Fragment>\r\n )\r\n }\r\n\r\n private renderLayerDetails() {\r\n let detailsPanel;\r\n if (this.props.styleContext === STYLE_CONTEXT_ENTITY) {\r\n if (this.props.selectedEntity) {\r\n detailsPanel = this.renderVectorLayerDetails();\r\n } else {\r\n detailsPanel = NO_ENTITY_FOR_STYLE;\r\n }\r\n } else /*if (this.props.styleContext === STYLE_CONTEXT_LAYER)*/ {\r\n if (this.props.selectedVectorLayer) {\r\n detailsPanel = this.renderVectorLayerDetails();\r\n } else if (this.props.selectedImageLayer) {\r\n detailsPanel = this.renderImageLayerDetails();\r\n } else {\r\n detailsPanel = NO_LAYER_FOR_STYLE;\r\n }\r\n }\r\n\r\n return (\r\n <div style={{width: '100%'}}>\r\n {this.renderStyleContext()}\r\n {detailsPanel}\r\n </div>\r\n );\r\n }\r\n\r\n private renderImageLayerDetails() {\r\n return (\r\n <React.Fragment>\r\n <SubPanelHeader title=\"COLOUR MAPPING\"/>\r\n {this.renderFormAlphaBlending()}\r\n {this.renderFormDisplayMinMax()}\r\n {this.renderFormDisplayColorBar()}\r\n <SubPanelHeader title=\"IMAGE ENHANCEMENTS\"/>\r\n {this.renderFormImageEnhancement('opacity', 'Opacity', 0., 1.)}\r\n {this.renderFormImageEnhancement('brightness', 'Brightness', 0., 2.)}\r\n {this.renderFormImageEnhancement('contrast', 'Contrast', 0., 2.)}\r\n {this.renderFormImageEnhancement('hue', 'Hue', 0., 1.)}\r\n {this.renderFormImageEnhancement('saturation', 'Saturation', 0., 2.)}\r\n {this.renderFormImageEnhancement('gamma', 'Gamma', 1., 2.)}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n private renderFormAlphaBlending() {\r\n const layer = this.props.selectedVariableImageLayer;\r\n if (!layer) {\r\n return null;\r\n }\r\n return (\r\n <Switch key=\"alpha\"\r\n checked={layer.alphaBlending}\r\n label=\"Alpha blending\"\r\n onChange={this.handleChangedDisplayAlphaBlend}/>\r\n );\r\n }\r\n\r\n private renderFormDisplayMinMax() {\r\n const layer = this.props.selectedVariableImageLayer || this.props.selectedResourceVectorLayer;\r\n if (!layer) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div style={{width: '100%', marginBottom: '20px'}}>\r\n <Label key=\"drange\" style={{display: 'flex'}}>\r\n <span style={{...StylesPanel.LABEL_SPAN_STYLE_100, margin: 'auto 0'}}>Display range</span>\r\n <div style={DISPLAY_RANGE_STYLE}>\r\n <NumericRangeField value={this.props.displayMinMax}\r\n style={{flex: 'auto'}}\r\n onChange={this.handleChangedDisplayMinMax}\r\n uncontrolled={true}\r\n />\r\n <ToolButton\r\n tooltipContent=\"Compute valid min/max\"\r\n intent={Intent.PRIMARY}\r\n icon=\"arrows-horizontal\"\r\n tooltipPosition={'top'}\r\n style={{flexGrow: 0, margin: 0}}\r\n disabled={this.props.isComputingVariableStatistics}\r\n onClick={this.handleUpdateDisplayStatistics}\r\n />\r\n </div>\r\n </Label>\r\n <div style={StylesPanel.SLIDER_DIV_STYLE_15}>\r\n {this.renderDisplayRangeSlider()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFormDisplayColorBar() {\r\n const layer = this.props.selectedVariableImageLayer;\r\n if (!layer) {\r\n return null;\r\n }\r\n\r\n let colorBarButton;\r\n if (this.props.colorMapCategories) {\r\n const popoverContent = this.renderColorBarBox(layer);\r\n colorBarButton = (\r\n <Popover content={popoverContent}\r\n interactionKind={PopoverInteractionKind.CLICK}\r\n popoverClassName=\"bp3-popover-content-sizing cate-color-bars-popover\"\r\n position={PopoverPosition.LEFT}>\r\n {this.renderColorBarButton(layer, false)}\r\n </Popover>\r\n );\r\n } else {\r\n colorBarButton = this.renderColorBarButton(layer, true);\r\n }\r\n\r\n return (\r\n <Label key=\"cmap\" className=\"bp3-inline\" style={{display: 'flex'}}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Colour bar</span>\r\n {colorBarButton}\r\n </Label>\r\n );\r\n }\r\n\r\n private renderFormImageEnhancement(key: string, label: string, min: number, max: number) {\r\n const layer = this.props.selectedVariableImageLayer || this.props.selectedResourceVectorLayer;\r\n if (!layer || (layer === this.props.selectedResourceVectorLayer && key !== 'opacity')) {\r\n return null;\r\n }\r\n\r\n const handleChangedImageEnhancement = (name: string, value: number) => {\r\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {[name]: value}) as any);\r\n };\r\n\r\n return (\r\n <Label key={key} style={{display: 'flex'}}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>{label}</span>\r\n <div style={{...StylesPanel.SLIDER_DIV_STYLE_10, width: undefined, flex: 'auto 1', margin: 'auto 0'}}>\r\n <Slider min={min}\r\n max={max}\r\n stepSize={(max - min) / 10.}\r\n labelRenderer={false}\r\n value={layer[key]}\r\n onChange={(value: number) => handleChangedImageEnhancement(key, value)}/>\r\n </div>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderVectorLayerDetails() {\r\n return (\r\n <React.Fragment>\r\n <SubPanelHeader title=\"FILL\"/>\r\n {this.renderFillColor()}\r\n {this.renderFillOpacity()}\r\n <SubPanelHeader title=\"STROKE\"/>\r\n {this.renderStrokeWidth()}\r\n {this.renderStrokeColor()}\r\n {this.renderStrokeOpacity()}\r\n <SubPanelHeader title=\"MARKER\"/>\r\n {this.renderMarkerColor()}\r\n {this.renderMarkerSize()}\r\n {this.renderMarkerSymbol()}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n private renderStyleContext() {\r\n const selectedEntity = this.props.selectedEntity;\r\n const selectedPlacemark = this.props.selectedPlacemark;\r\n const selectedLayer = this.props.selectedLayer;\r\n\r\n let entityDisplayName;\r\n let layerDisplayName;\r\n\r\n if (selectedPlacemark) {\r\n const title = selectedPlacemark.properties && selectedPlacemark.properties.title;\r\n if (title && title !== '') {\r\n entityDisplayName = `My place ${title}`;\r\n } else {\r\n entityDisplayName = 'Selected place';\r\n }\r\n } else if (selectedEntity) {\r\n entityDisplayName = 'Selected entity';\r\n } else {\r\n entityDisplayName = 'Selected entity (none)';\r\n }\r\n\r\n if (selectedLayer) {\r\n layerDisplayName = `Layer ${getLayerDisplayName(selectedLayer)}`;\r\n } else {\r\n layerDisplayName = 'Selected layer';\r\n }\r\n\r\n return (\r\n <RadioGroup\r\n key=\"styleContext\"\r\n label=\"Style context\"\r\n onChange={this.handleChangedStyleContext}\r\n selectedValue={this.props.styleContext}\r\n >\r\n <Radio label={entityDisplayName} value={STYLE_CONTEXT_ENTITY}/>\r\n <Radio label={layerDisplayName} value={STYLE_CONTEXT_LAYER}/>\r\n </RadioGroup>\r\n );\r\n }\r\n\r\n private renderFillColor() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Colour</span>\r\n <ControlGroup style={{lineHeight: '0', flex: 'auto 1'}}>\r\n <TextField value={this.props.vectorStyle.fill}\r\n style={{flex: 'auto', fontFamily: 'courier', textAlign: 'right', paddingRight: '40px'}}\r\n size={8}\r\n uncontrolled={true}\r\n onChange={this.handleChangedFillColor}\r\n />\r\n <Popover\r\n interactionKind={PopoverInteractionKind.CLICK}\r\n popoverClassName=\"bp3-minimal\"\r\n position={PopoverPosition.LEFT}\r\n className=\"bp3-input-action\"\r\n >\r\n <Button style={{backgroundColor: this.props.vectorStyle.fill}}/>\r\n <SketchPicker\r\n color={this.props.vectorStyle.fill}\r\n onChange={this.handleChangedFillColorFromPicker}\r\n disableAlpha={true}\r\n />\r\n </Popover>\r\n </ControlGroup>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderFillOpacity() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Opacity</span>\r\n <div style={{...StylesPanel.SLIDER_DIV_STYLE_05, width: undefined, flex: 'auto 1', margin: 'auto 0'}}>\r\n <Slider min={0.0}\r\n max={1.0}\r\n stepSize={0.05}\r\n labelRenderer={false}\r\n value={this.props.vectorStyle.fillOpacity}\r\n onChange={this.handleChangedFillOpacity}\r\n />\r\n </div>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderStrokeWidth() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Width</span>\r\n <NumericField value={this.props.vectorStyle.strokeWidth}\r\n style={{flex: 'auto 1', fontFamily: 'courier'}}\r\n size={8}\r\n min={0}\r\n uncontrolled={true}\r\n onChange={this.handleChangedStrokeWidth}\r\n />\r\n </Label>\r\n );\r\n }\r\n\r\n private renderStrokeColor() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Colour</span>\r\n <ControlGroup style={{lineHeight: '0', flex: 'auto 1'}}>\r\n <TextField value={this.props.vectorStyle.stroke}\r\n style={{flex: 'auto', fontFamily: 'courier', textAlign: 'right', paddingRight: '40px'}}\r\n size={8}\r\n uncontrolled={true}\r\n onChange={this.handleChangedStrokeColor}\r\n />\r\n <Popover\r\n interactionKind={PopoverInteractionKind.CLICK}\r\n popoverClassName=\"bp3-minimal\"\r\n position={PopoverPosition.LEFT}\r\n className=\"bp3-input-action\"\r\n >\r\n <Button style={{backgroundColor: this.props.vectorStyle.stroke}}/>\r\n <SketchPicker\r\n color={this.props.vectorStyle.stroke}\r\n onChange={this.handleChangedStrokeColorFromPicker}\r\n disableAlpha={true}\r\n />\r\n </Popover>\r\n </ControlGroup>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderStrokeOpacity() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Opacity</span>\r\n <div style={{...StylesPanel.SLIDER_DIV_STYLE_05, width: undefined, flex: 'auto 1', margin: 'auto 0'}}>\r\n <Slider min={0.0}\r\n max={1.0}\r\n stepSize={0.05}\r\n labelRenderer={false}\r\n value={this.props.vectorStyle.strokeOpacity}\r\n onChange={this.handleChangedStrokeOpacity}\r\n />\r\n </div>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderMarkerColor() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Colour</span>\r\n <ControlGroup style={{lineHeight: '0', flex: 'auto 1'}}>\r\n <TextField value={this.props.vectorStyle.markerColor}\r\n style={{flex: 'auto', fontFamily: 'courier', textAlign: 'right', paddingRight: '40px'}}\r\n size={8}\r\n uncontrolled={true}\r\n onChange={this.handleChangedMarkerColor}\r\n />\r\n <Popover\r\n interactionKind={PopoverInteractionKind.CLICK}\r\n popoverClassName=\"bp3-minimal\"\r\n position={PopoverPosition.LEFT}\r\n className=\"bp3-input-action\"\r\n >\r\n <Button style={{backgroundColor: this.props.vectorStyle.markerColor}}/>\r\n <SketchPicker\r\n color={this.props.vectorStyle.markerColor}\r\n onChange={this.handleChangedMarkerColorFromPicker}\r\n disableAlpha={true}\r\n />\r\n </Popover>\r\n </ControlGroup>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderMarkerSize() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Size</span>\r\n <HTMLSelect\r\n style={{flex: 'auto 1'}}\r\n value={this.props.vectorStyle.markerSize}\r\n onChange={this.handleChangedMarkerSize}\r\n >\r\n <option value=\"small\">Small</option>\r\n <option value=\"medium\">Medium</option>\r\n <option value=\"large\">Large</option>\r\n </HTMLSelect>\r\n </Label>\r\n );\r\n }\r\n\r\n private renderMarkerSymbol() {\r\n return (\r\n <Label className=\"bp3-inline\" style={StylesPanel.LABEL_BOTTOM_MARGIN}>\r\n <span style={StylesPanel.LABEL_SPAN_STYLE_100}>Symbol</span>\r\n <TextField value={this.props.vectorStyle.markerSymbol}\r\n style={{flex: 'auto', fontFamily: 'courier', textAlign: 'right'}}\r\n size={8}\r\n uncontrolled={true}\r\n onChange={this.handleChangedMarkerSymbol}\r\n />\r\n </Label>\r\n );\r\n }\r\n\r\n private renderDisplayRangeSlider() {\r\n const layer = this.props.selectedVariableImageLayer;\r\n if (!layer) {\r\n return null;\r\n }\r\n\r\n const statistics = layer.statistics;\r\n if (!statistics) {\r\n return <span style={{color: Colors.ORANGE3}}>Missing data min/max</span>;\r\n }\r\n\r\n let min = statistics.min;\r\n let max = statistics.max;\r\n\r\n if (isNaN(min) || isNaN(max)) {\r\n return <span style={{color: Colors.ORANGE3}}>All values are NaN</span>;\r\n }\r\n\r\n if (min === max) {\r\n return <span style={{color: Colors.ORANGE3}}>All values are {min}</span>;\r\n }\r\n\r\n const fractionDigits = getDisplayFractionDigits(min, max);\r\n\r\n return (\r\n <RangeSlider\r\n min={min}\r\n max={max}\r\n stepSize={(max - min) / 100.}\r\n labelStepSize={max - min}\r\n labelRenderer={(x: number) => formatNumber(x, fractionDigits)}\r\n onChange={this.handleChangedDisplayRange}\r\n value={[layer.displayMin, layer.displayMax]}\r\n />\r\n );\r\n }\r\n\r\n private renderColorBarButton(layer: VariableImageLayerState, disabled: boolean) {\r\n const selectedColorMapName = layer.colorMapName;\r\n const selectedColorMapImage = this.renderColorMapImage(this.props.selectedColorMap);\r\n const buttonContent = (selectedColorMapImage || (selectedColorMapName || 'Select Color Bar'));\r\n return (<AnchorButton className=\"bp3-minimal\" style={{width: '100%'}}\r\n disabled={disabled}>{buttonContent}</AnchorButton>);\r\n }\r\n\r\n private renderColorBarBox(layer: VariableImageLayerState) {\r\n const children = [];\r\n for (let cat of this.props.colorMapCategories) {\r\n const colorMaps = cat.colorMaps;\r\n children.push(\r\n <p key={cat.name + '_head'} style={{marginTop: 2, marginBottom: 2}}>\r\n <Tooltip content={<div style={{width: \"19em\"}}>{cat.description}</div>}\r\n position='top'>\r\n {cat.name}\r\n </Tooltip>\r\n </p>\r\n );\r\n children.push(\r\n <ListBox key={cat.name + '_list'}\r\n items={colorMaps}\r\n getItemKey={(item: ColorMapState) => item.name}\r\n renderItem={(item: ColorMapState) => this.renderColorMapImage(item)}\r\n selectionMode={ListBoxSelectionMode.SINGLE}\r\n selection={layer.colorMapName ? [layer.colorMapName] : []}\r\n onSelection={this.handleChangedColorMapName}\r\n />\r\n );\r\n }\r\n\r\n return <div style={{padding: 5, overflowY: 'auto', height: '87vh'}}>{children}</div>;\r\n }\r\n\r\n //noinspection JSMethodCanBeStatic\r\n private renderColorMapImage(colorMap: ColorMapState) {\r\n if (colorMap) {\r\n return (\r\n <Tooltip content={colorMap.name}>\r\n <img src={`data:image/png;base64,${colorMap.imageData}`}\r\n alt={colorMap.name}\r\n style={{width: '100%', height: '1em'}}/>\r\n </Tooltip>\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private handleChangedDisplayAlphaBlend(event: any) {\r\n const alphaBlending = event.target.checked;\r\n const layer = this.props.selectedVariableImageLayer;\r\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {alphaBlending}) as any);\r\n }\r\n\r\n private handleChangedDisplayMinMax(displayMinMax: FieldValue<NumberRange>) {\r\n const layer = this.props.selectedVariableImageLayer || this.props.selectedResourceVectorLayer;\r\n if (!displayMinMax.error) {\r\n const displayMin = displayMinMax.value[0];\r\n const displayMax = displayMinMax.value[1];\r\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {displayMin, displayMax}) as any);\r\n }\r\n }\r\n\r\n private handleUpdateDisplayStatistics() {\r\n const resource = this.props.selectedResource;\r\n const variable = this.props.selectedVariable;\r\n const imageLayer = this.props.selectedVariableImageLayer;\r\n if (!resource || !variable || !imageLayer) {\r\n return;\r\n }\r\n this.props.dispatch(actions.getWorkspaceVariableStatistics(resource.name, variable.name, imageLayer.varIndex,\r\n (statistics) => {\r\n return actions.updateLayer(this.props.activeView.id, imageLayer, {\r\n displayMin: statistics.min,\r\n displayMax: statistics.max,\r\n statistics\r\n });\r\n }\r\n ) as any);\r\n }\r\n\r\n private handleChangedDisplayRange(displayRange: NumberRange) {\r\n const layer = this.props.selectedVariableImageLayer || this.props.selectedResourceVectorLayer;\r\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {\r\n displayMin: displayRange[0],\r\n displayMax: displayRange[1]\r\n }) as any);\r\n }\r\n\r\n private handleChangedColorMapName(newSelection: string[]) {\r\n const layer = this.props.selectedVariableImageLayer || this.props.selectedResourceVectorLayer;\r\n const colorMapName = newSelection && newSelection.length && newSelection[0];\r\n if (colorMapName) {\r\n this.props.dispatch(actions.updateLayer(this.props.activeView.id, layer, {colorMapName}) as any);\r\n }\r\n }\r\n\r\n private handleChangedStyleContext(event: any) {\r\n this.props.dispatch(actions.setStyleContext(event.target.value));\r\n }\r\n\r\n private handleChangedFillColor(value: FieldValue<string>) {\r\n this.handleChangedVectorStyle({fill: value.value});\r\n }\r\n\r\n private handleChangedFillColorFromPicker(color: ColorState) {\r\n this.handleChangedVectorStyle({fill: color.hex});\r\n }\r\n\r\n private handleChangedFillOpacity(fillOpacity: number) {\r\n this.handleChangedVectorStyle({fillOpacity});\r\n }\r\n\r\n private handleChangedStrokeWidth(value: FieldValue<number>) {\r\n this.handleChangedVectorStyle({strokeWidth: value.value});\r\n }\r\n\r\n private handleChangedStrokeColor(value: FieldValue<string>) {\r\n this.handleChangedVectorStyle({stroke: value.value});\r\n }\r\n\r\n private handleChangedStrokeColorFromPicker(color: ColorState) {\r\n this.handleChangedVectorStyle({stroke: color.hex});\r\n }\r\n\r\n private handleChangedStrokeOpacity(strokeOpacity: number) {\r\n this.handleChangedVectorStyle({strokeOpacity});\r\n }\r\n\r\n private handleChangedMarkerSize(event) {\r\n this.handleChangedVectorStyle({markerSize: event.target.value});\r\n }\r\n\r\n private handleChangedMarkerColor(value: FieldValue<string>) {\r\n this.handleChangedVectorStyle({markerColor: value.value});\r\n }\r\n\r\n private handleChangedMarkerColorFromPicker(color: ColorState) {\r\n this.handleChangedVectorStyle({markerColor: color.hex});\r\n }\r\n\r\n private handleChangedMarkerSymbol(value: FieldValue<string>) {\r\n this.handleChangedVectorStyle({markerSymbol: value.value});\r\n }\r\n\r\n private handleChangedVectorStyle(style: SimpleStyle) {\r\n //style = {...this.props.vectorStyle, ...style};\r\n if (this.props.styleContext === STYLE_CONTEXT_ENTITY) {\r\n this.props.dispatch(actions.updateEntityStyle(this.props.activeView,\r\n this.props.selectedEntity,\r\n style) as any);\r\n } else {\r\n this.props.dispatch(actions.updateLayerStyle(this.props.activeView.id,\r\n this.props.selectedVectorLayer.id,\r\n style));\r\n }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(StylesPanel);\r\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, InputGroup, Intent } from '@blueprintjs/core';\nimport { DialogState, State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { connect, DispatchProp } from 'react-redux';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\n\n\ninterface ISelectWorkspaceDialogState extends DialogState {\n workspaceDir: string | null;\n workspaceName: string;\n}\n\ninterface ISelectWorkspaceDialogOwnProps {\n dialogId: string;\n}\n\ninterface ISelectWorkspaceDialogProps extends ISelectWorkspaceDialogState, ISelectWorkspaceDialogOwnProps {\n isOpen: boolean;\n isNewDialog: boolean;\n isLocalFSAllowed: boolean;\n}\n\nfunction mapStateToProps(state: State, ownProps: ISelectWorkspaceDialogOwnProps): ISelectWorkspaceDialogProps {\n const dialogState = selectors.dialogStateSelector(ownProps.dialogId)(state) as any;\n const isOpen = dialogState.isOpen;\n const dialogId = ownProps.dialogId;\n const isNewDialog = ownProps.dialogId === 'newWorkspaceDialog';\n const isLocalFSAllowed = selectors.isLocalFSAccessAllowedSelector(state);\n let workspaceDir = dialogState.workspaceDir;\n let workspaceName = dialogState.workspaceName;\n // TODO (forman): Fix code duplication with ChooseWorkspaceDialog\n if (isOpen) {\n if (!selectors.isScratchWorkspaceSelector(state)) {\n workspaceDir = workspaceDir || selectors.workspaceDirSelector(state);\n workspaceName = workspaceName || selectors.workspaceNameSelector(state);\n }\n workspaceDir = workspaceDir || selectors.lastWorkspaceDirSelector(state);\n }\n workspaceDir = isLocalFSAllowed ? workspaceDir || '' : null;\n workspaceName = workspaceName || '';\n return {\n workspaceDir,\n workspaceName,\n dialogId,\n isNewDialog,\n isOpen,\n isLocalFSAllowed,\n };\n}\n\n// TODO (forman): Rename to (Get)WorkspaceNameDialog\nclass SelectWorkspaceDialog extends React.Component<ISelectWorkspaceDialogProps & ISelectWorkspaceDialogOwnProps & DispatchProp<State>, ISelectWorkspaceDialogState> {\n\n // TODO (forman): Remove member\n private localWebAPI: boolean;\n\n constructor(props: ISelectWorkspaceDialogProps & DispatchProp<State>) {\n super(props);\n this.state = {workspaceDir: '', workspaceName: ''};\n // TODO (forman): Fix code duplication with ChooseWorkspaceDialog\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.onWorkspaceNameChange = this.onWorkspaceNameChange.bind(this);\n this.onWorkspaceDirChange = this.onWorkspaceDirChange.bind(this);\n this.showDirectorySelectDialog = this.showDirectorySelectDialog.bind(this);\n this.localWebAPI = props.isLocalFSAllowed;\n }\n\n componentWillReceiveProps(nextProps: ISelectWorkspaceDialogProps) {\n this.setState({workspaceDir: nextProps.workspaceDir, workspaceName: nextProps.workspaceName});\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(this.props.dialogId));\n }\n\n private canConfirm(): boolean {\n // TODO (SabineEmbacher) validate against existing workspace names\n if ((this.localWebAPI && !this.state.workspaceDir) || !this.state.workspaceName) {\n return false;\n }\n return /^([A-Za-z_\\-\\s0-9.]+)$/.test(this.state.workspaceName);\n }\n\n private composeWorkspacePath(): string {\n let workspaceDir = this.state.workspaceDir;\n let workspaceName = this.state.workspaceName;\n if (workspaceDir === null) {\n return workspaceName;\n }\n return workspaceDir + '/' + workspaceName;\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(this.props.dialogId, this.state));\n if (this.props.isNewDialog) {\n this.props.dispatch(actions.newWorkspace(this.composeWorkspacePath()) as any);\n } else {\n this.props.dispatch(actions.saveWorkspaceAs(this.composeWorkspacePath()) as any);\n }\n }\n\n private onWorkspaceDirChange(ev: any) {\n this.setState({workspaceDir: ev.target.value} as ISelectWorkspaceDialogState);\n }\n\n private onWorkspaceNameChange(ev: any) {\n this.setState({workspaceName: ev.target.value} as ISelectWorkspaceDialogState);\n }\n\n private showDirectorySelectDialog() {\n let handleClose = (dirPath: string | null) => {\n if (dirPath) {\n this.setState({workspaceDir: dirPath} as ISelectWorkspaceDialogState);\n }\n };\n this.props.dispatch(actions.showDirectorySelectDialog({defaultPath: this.state.workspaceDir},\n handleClose) as any);\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title={this.props.isNewDialog ? 'New Workspace' : 'Save Workspace As'}\n confirmTitle={this.props.isNewDialog ? 'New' : 'Save As'}\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n onConfirm={this.onConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n let directoryChooser = null;\n if (this.props.isLocalFSAllowed) {\n directoryChooser = (\n <React.Fragment>\n <p style={{marginTop: '1em'}}>Workspace parent directory:</p>\n <ControlGroup style={{flexGrow: 1, display: 'flex', marginLeft: '1em', width: '100%'}}>\n <InputGroup\n type=\"text\"\n style={{flex: 'auto'}}\n value={this.state.workspaceDir}\n onChange={this.onWorkspaceDirChange}\n />\n <AnchorButton intent={Intent.PRIMARY} style={{flex: 'none'}}\n onClick={this.showDirectorySelectDialog}>...</AnchorButton>\n </ControlGroup>\n </React.Fragment>\n );\n }\n\n return (\n <div>\n {directoryChooser}\n <p style={{marginTop: '1em'}}>Workspace name:</p>\n <InputGroup\n type=\"text\"\n style={{width: '100%'}}\n value={this.state.workspaceName}\n onChange={this.onWorkspaceNameChange}\n />\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(SelectWorkspaceDialog);\n","import * as React from 'react';\nimport SelectWorkspaceDialog from './SelectWorkspaceDialog';\n\n\nexport default function NewWorkspaceDialog() {\n return <SelectWorkspaceDialog dialogId='newWorkspaceDialog'/>\n}\n\n","import * as React from 'react';\nimport SelectWorkspaceDialog from './SelectWorkspaceDialog';\n\n\nexport default function SaveWorkspaceAsDialog() {\n return <SelectWorkspaceDialog dialogId='saveWorkspaceAsDialog'/>\n}\n\n","import * as React from 'react';\nimport {\n AnchorButton,\n Button,\n Card,\n Collapse,\n ControlGroup,\n HTMLTable,\n Intent,\n Switch,\n Tab,\n Tabs\n} from '@blueprintjs/core';\nimport { connect, DispatchProp } from 'react-redux';\n\nimport { SessionState, State, WebAPIServiceInfo } from '../state';\nimport * as actions from '../actions';\nimport { showMessageBox } from '../actions';\nimport * as selectors from '../selectors';\nimport { TextField } from '../components/field/TextField';\nimport deepEqual from 'deep-equal';\nimport { ModalDialog } from '../components/ModalDialog';\nimport { showToast } from '../toast';\nimport { isDefined } from '../../common/types';\nimport { CATE_APP_VERSION } from '../../version';\n\n\ninterface IPreferencesDialogProps {\n isOpen: boolean;\n preferences: SessionState;\n serviceInfo: WebAPIServiceInfo;\n serviceURL: string;\n}\n\nfunction mapStateToProps(state: State): IPreferencesDialogProps {\n return {\n isOpen: selectors.dialogStateSelector(PreferencesDialog.DIALOG_ID)(state).isOpen,\n preferences: state.session,\n serviceURL: state.communication.webAPIServiceURL,\n serviceInfo: state.communication.webAPIServiceInfo,\n };\n}\n\n\nconst SYSTEM_LABEL_STYLE = {width: '40%'};\nconst SYSTEM_CONTROL_GROUP_STYLE = {width: '100%', marginBottom: '1em'};\nconst SYSTEM_DIV_STYLE = {width: '100%', marginTop: '1em'};\nconst SYSTEM_ITEM_STYLE: React.CSSProperties = {width: '60%', wordWrap: 'break-word'};\n\nclass PreferencesDialog extends React.Component<IPreferencesDialogProps & DispatchProp<State>, SessionState> {\n static readonly DIALOG_ID = 'preferencesDialog';\n static readonly DIALOG_TITLE = 'Preferences';\n\n constructor(props: IPreferencesDialogProps & DispatchProp<State>) {\n super(props);\n this.onConfirm = this.onConfirm.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n this.state = props.preferences;\n }\n\n componentWillReceiveProps(nextProps: IPreferencesDialogProps) {\n this.setState(nextProps.preferences);\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hidePreferencesDialog());\n if (!deepEqual(this.props.preferences, this.state)) {\n const backendConfig = this.state.backendConfig;\n const autoUpdateSoftwareChangeDetected = this.props.preferences.autoUpdateSoftware !== this.state.autoUpdateSoftware;\n const backendChangesDetected = !deepEqual(this.props.preferences.backendConfig, backendConfig);\n this.props.dispatch(actions.updateSessionState(this.state));\n this.props.dispatch(actions.updatePreferences(this.state) as any);\n if (autoUpdateSoftwareChangeDetected || backendChangesDetected) {\n this.props.dispatch(actions.storeBackendConfig(backendConfig) as any);\n this.props.dispatch(showMessageBox({\n type: 'info',\n title: PreferencesDialog.DIALOG_TITLE,\n message: 'Some changes will be effective only after restart.'\n }) as any);\n }\n } else {\n showToast({\n type: 'info',\n text: 'No changes detected.'\n });\n }\n }\n\n private onCancel() {\n this.props.dispatch(actions.hidePreferencesDialog());\n }\n\n //noinspection JSMethodCanBeStatic\n private canConfirm() {\n // TODO (forman): add validation of preferences changes\n return true;\n }\n\n render() {\n return (\n <ModalDialog\n isOpen={this.props.isOpen}\n title={PreferencesDialog.DIALOG_TITLE}\n style={{minWidth: '30em'}}\n icon=\"confirm\"\n onCancel={this.onCancel}\n onConfirm={this.onConfirm}\n canConfirm={this.canConfirm}\n renderBody={this.renderBody}\n />\n );\n }\n\n private renderBody() {\n if (!this.props.isOpen) {\n return null;\n }\n\n return (\n <Tabs id=\"preferences\">\n <Tab id=\"g\" title=\"General\" panel={this.renderGeneralPanel()}/>\n <Tab id=\"dm\" title=\"Data Management\" panel={this.renderDataManagementPanel()}/>\n <Tab id=\"a\" title=\"System\" panel={this.renderSystemPanel()}/>\n </Tabs>\n );\n }\n\n private renderGeneralPanel() {\n // const userRootMode = this.props.serviceInfo.userRootMode;\n return (\n <div style={{width: '100%', marginTop: '1em'}}>\n {this.renderReopenLastWorkspace()}\n {this.renderAutoShowNewFigures()}\n {/*Does not work with blueprintjs 3+*//*{this.renderPanelContainerUndockedMode()}*/}\n {/*For Electron only*/ /*{!userRootMode && this.renderAutoUpdates()}*/}\n {/*For Electron only*/ /*{!userRootMode && this.renderOfflineMode()}*/}\n </div>\n );\n }\n\n private renderDataManagementPanel() {\n const userRootMode = this.props.serviceInfo.userRootMode;\n return (\n <div style={{width: '100%', marginTop: '1em'}}>\n {!userRootMode && this.renderDataStoresPath()}\n {!userRootMode && this.renderCacheWorkspaceImagery()}\n {this.renderResourceNamePrefix()}\n </div>\n );\n }\n\n private renderSystemPanel() {\n const showProperties = this.getStateValue('showProperties', false);\n const onShowPropertiesChange = this.getChangeHandler('showProperties', false);\n\n return (\n <div style={SYSTEM_DIV_STYLE}>\n <ControlGroup style={SYSTEM_CONTROL_GROUP_STYLE}>\n <span style={SYSTEM_LABEL_STYLE}>Cate UI version:</span>\n <span style={SYSTEM_ITEM_STYLE}><code>{CATE_APP_VERSION}</code></span>\n </ControlGroup>\n <ControlGroup style={SYSTEM_CONTROL_GROUP_STYLE}>\n <span style={SYSTEM_LABEL_STYLE}>Cate API URL:</span>\n <span style={SYSTEM_ITEM_STYLE}><code>{this.props.serviceURL}</code></span>\n </ControlGroup>\n <ControlGroup style={SYSTEM_CONTROL_GROUP_STYLE}>\n <span style={SYSTEM_LABEL_STYLE}>Cate API version:</span>\n <span style={SYSTEM_ITEM_STYLE}><code>{this.props.serviceInfo.version}</code></span>\n </ControlGroup>\n {this.props.serviceInfo.dependencies && (\n <ControlGroup style={SYSTEM_CONTROL_GROUP_STYLE}>\n <span style={SYSTEM_LABEL_STYLE}>Cate dependencies:</span>\n <div>\n <Button\n onClick={() => onShowPropertiesChange(!showProperties)}\n small={true}\n style={{marginBottom: 2}}\n >\n {\"Click to \" + (showProperties ? \"collapse\" : \"expand\")}\n </Button>\n <Collapse isOpen={showProperties}>\n <Card>\n <HTMLTable condensed={true} small={true} bordered={true}>\n <thead>\n <tr>\n <th>Package</th>\n <th>Version</th>\n </tr>\n </thead>\n <tbody>\n {\n Object.getOwnPropertyNames(this.props.serviceInfo.dependencies!).map(\n packageName => {\n const packageVersion = this.props.serviceInfo.dependencies[packageName];\n return (\n <tr>\n <td>{packageName}</td>\n <td>{packageVersion}</td>\n </tr>\n );\n }\n )\n }\n </tbody>\n </HTMLTable>\n </Card>\n </Collapse>\n </div>\n </ControlGroup>\n )}\n <ControlGroup style={SYSTEM_CONTROL_GROUP_STYLE}>\n <span style={SYSTEM_LABEL_STYLE}>Filesystem access:</span>\n <span style={SYSTEM_ITEM_STYLE}>\n {this.props.serviceInfo.userRootMode ? 'restricted' : 'unrestricted'}\n </span>\n </ControlGroup>\n </div>\n );\n }\n\n private renderReopenLastWorkspace() {\n return this.renderBooleanValue(\n 'reopenLastWorkspace',\n false,\n 'Reopen last workspace on startup'\n );\n }\n\n // private renderAutoUpdates() {\n // return this.renderBooleanValue(\n // 'autoUpdateSoftware',\n // false,\n // 'Automatic software updates'\n // );\n // }\n\n private renderAutoShowNewFigures() {\n return this.renderBooleanValue(\n 'autoShowNewFigures',\n false,\n 'Open plot view for new Figure resources'\n );\n }\n\n // private renderOfflineMode() {\n // return this.renderBooleanValue(\n // 'offlineMode',\n // false,\n // 'Force offline mode (requires restart)'\n // );\n // }\n\n // private renderPanelContainerUndockedMode() {\n // return this.renderBooleanValue(\n // 'panelContainerUndockedMode',\n // false,\n // 'Undocked tool panels (experimental)'\n // );\n // }\n\n private renderDataStoresPath() {\n return this.renderDirectoryPath(\n 'dataStoresPath',\n true,\n 'Synchronisation directory for remote data store files'\n );\n }\n\n private renderCacheWorkspaceImagery() {\n return this.renderBooleanValue(\n 'useWorkspaceImageryCache',\n true,\n 'Use per-workspace imagery cache (may accelerate image display)'\n );\n }\n\n private renderResourceNamePrefix() {\n return this.renderStringValue(\n 'resourceNamePattern',\n true,\n 'Default resource name pattern'\n );\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Components\n // Note (forman): could make this React component later\n\n private renderDirectoryPath(propertyName, isBackend: boolean, label: string) {\n const initialValue = this.getStateValue(propertyName, isBackend);\n const onChange = this.getChangeHandler(propertyName, isBackend);\n return (\n <div style={{width: '100%', marginBottom: '1em'}}>\n <p>{label}:</p>\n <ControlGroup style={{display: 'flex', alignItems: 'center'}}>\n <TextField style={{flexGrow: 1}}\n value={initialValue}\n placeholder=\"Enter directory path\"\n onChange={onChange}\n />\n <AnchorButton\n intent={Intent.PRIMARY} style={{flex: 'none'}}\n onClick={() => this.showOpenDirectoryDialog(initialValue, onChange)}>\n ...\n </AnchorButton>\n </ControlGroup>\n </div>\n );\n }\n\n private renderStringValue(propertyName: string, isBackend: boolean, label: string) {\n const value = this.getStateValue(propertyName, isBackend);\n const onChange = this.getChangeHandler(propertyName, isBackend);\n return (\n <ControlGroup style={{width: '100%', marginBottom: '1em', display: 'flex', alignItems: 'center'}}>\n <span style={{flexGrow: 0.8}}>{label}:</span>\n <TextField style={{flexGrow: 0.2}}\n value={value}\n onChange={onChange}\n />\n </ControlGroup>\n );\n }\n\n private renderBooleanValue(propertyName: string, isBackend: boolean, label: string) {\n const value = this.getStateValue(propertyName, isBackend);\n const onChange = this.getChangeHandler(propertyName, isBackend);\n return (\n <div style={{width: '100%', marginBottom: '1em'}}>\n <Switch checked={value}\n label={label}\n onChange={(event: any) => onChange(event.target.checked)}/>\n </div>\n );\n }\n\n private getChangeHandler(propertyName: string, isBackend: boolean) {\n return (value: any) => {\n const change = {};\n change[propertyName] = isDefined(value) ? (isDefined(value.value) ? value.value : value) : null;\n if (isBackend) {\n this.setBackendConfig(change);\n } else {\n this.setState(change as SessionState);\n }\n };\n }\n\n private getStateValue(propertyName: string, isBackend: boolean) {\n return isBackend ? this.state.backendConfig[propertyName] : this.state[propertyName];\n }\n\n private setBackendConfig(backendConfigDelta: any) {\n const backendConfig = Object.assign({}, this.state.backendConfig, backendConfigDelta);\n this.setState({backendConfig} as SessionState);\n }\n\n private showOpenDirectoryDialog(defaultPath: string, onChange: (value) => void) {\n this.props.dispatch(actions.showDirectorySelectDialog({defaultPath},\n (dirPath: string | null) => {\n if (dirPath) {\n onChange(dirPath);\n }\n }) as any);\n }\n}\n\nexport default connect(mapStateToProps)(PreferencesDialog);\n\n\n\n","import * as React from \"react\";\nimport { Colors, HTMLTable, Icon } from '@blueprintjs/core';\n\nimport { FileFilter } from '../types';\nimport { applyFileFilter, compareFileNames, FileNode, getFileNodeIcon, getFileNodePath } from './FileNode';\n\nconst NAME_CELL_STYLE: React.CSSProperties = {\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n};\nconst NAME_ICON_STYLE = {\n marginRight: 5,\n};\nconst SIZE_CELL_STYLE: React.CSSProperties = {\n width: '100%', textAlign: 'right'\n};\nconst ROW_DEFAULT_STYLE: React.CSSProperties = {};\nconst ROW_SELECTED_STYLE: React.CSSProperties = {\n ...ROW_DEFAULT_STYLE, backgroundColor: Colors.BLUE3\n};\nconst TABLE_CONTAINER_STYLE: React.CSSProperties = {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n borderColor: Colors.DARK_GRAY2,\n borderStyle: 'solid',\n borderWidth: 1\n};\nconst TABLE_STYLE: React.CSSProperties = {width: '100%'};\n\ninterface IFileListProps {\n rootNode: FileNode;\n\n fileFilter?: FileFilter | null;\n multiSelections?: boolean;\n openDirectory?: boolean;\n\n currentDirPath?: string | null;\n onCurrentDirPathChange?: (selectedDirPath: string) => any;\n selectedPaths?: string[];\n onSelectedPathsChange?: (selectedPaths: string[]) => any;\n}\n\nconst FileList: React.FC<IFileListProps> = (\n {\n rootNode,\n fileFilter,\n multiSelections,\n openDirectory,\n currentDirPath,\n onCurrentDirPathChange,\n selectedPaths,\n onSelectedPathsChange,\n }\n) => {\n // const [sortedIndexMap, setSortedIndexMap] = React.useState<number[]>([]);\n const currentFileNodes = getCurrentFileNodes(rootNode, currentDirPath, fileFilter);\n const selectedPathSet = new Set(selectedPaths);\n\n const getRowFileNode = (rowIndex: number): FileNode => {\n // TODO (forman): implement sorting\n /*\n const sortedRowIndex = sortedIndexMap[rowIndex];\n if (typeof sortedRowIndex === 'number') {\n rowIndex = sortedRowIndex;\n }\n */\n return currentFileNodes![rowIndex];\n };\n\n const getRowPath = (rowIndex: number): string => {\n let node = getRowFileNode(rowIndex);\n let path = node.name;\n if (currentDirPath) {\n path = currentDirPath + '/' + node.name;\n }\n return path;\n };\n\n const isRowSelected = (rowIndex: number): boolean => {\n return selectedPathSet.has(getRowPath(rowIndex));\n };\n\n const renderFileNodeName = (rowIndex: number) => {\n const node = getRowFileNode(rowIndex);\n return <div style={NAME_CELL_STYLE}><Icon style={NAME_ICON_STYLE} icon={getFileNodeIcon(node)}/><span>{node.name}</span></div>;\n };\n\n const renderFileNodeLastModified = (rowIndex: number) => {\n const node = getRowFileNode(rowIndex);\n return node.lastModified;\n };\n\n const renderFileNodeSize = (rowIndex: number) => {\n const node = getRowFileNode(rowIndex);\n return <div style={SIZE_CELL_STYLE}>{node.size}</div>;\n };\n\n const handleRowClick = (fileNode: FileNode, rowIndex: number, event: React.MouseEvent<HTMLTableRowElement>) => {\n // Disallow directory selection\n const node = getRowFileNode(rowIndex);\n if ((!openDirectory && node.isDir) || (openDirectory && !node.isDir)) {\n return;\n }\n const path = getRowPath(rowIndex);\n const newSelectedPathSet = new Set<string>(selectedPathSet);\n if (newSelectedPathSet.has(path)) {\n newSelectedPathSet.delete(path);\n } else {\n if (multiSelections && event.ctrlKey) {\n newSelectedPathSet.add(path);\n } else {\n newSelectedPathSet.clear();\n newSelectedPathSet.add(path);\n }\n }\n if (onSelectedPathsChange) {\n onSelectedPathsChange(Array.from(newSelectedPathSet));\n }\n };\n\n const handleRowDoubleClick = (fileNode: FileNode, rowIndex: number) => {\n if (onCurrentDirPathChange) {\n const node = getRowFileNode(rowIndex);\n if (node.isDir) {\n onCurrentDirPathChange(getRowPath(rowIndex));\n }\n }\n };\n\n return (\n <div style={TABLE_CONTAINER_STYLE}>\n <HTMLTable className=\"bp3-html-table-condensed bp3-interactive\" style={TABLE_STYLE}>\n <thead>\n <tr>\n <th>Name</th>\n <th>Last modified</th>\n <th>Size</th>\n </tr>\n </thead>\n <tbody>\n {\n currentFileNodes && currentFileNodes.map((node, rowIndex) => {\n return (\n <tr\n key={rowIndex}\n style={isRowSelected(rowIndex) ? ROW_SELECTED_STYLE : ROW_DEFAULT_STYLE}\n onClick={(e) => handleRowClick(node, rowIndex, e)}\n onDoubleClick={() => handleRowDoubleClick(node, rowIndex)}\n >\n <td>{renderFileNodeName(rowIndex)}</td>\n <td>{renderFileNodeLastModified(rowIndex)}</td>\n <td>{renderFileNodeSize(rowIndex)}</td>\n </tr>\n );\n })\n }\n </tbody>\n </HTMLTable>\n </div>\n );\n}\n\nexport default FileList;\n\n\nfunction getCurrentFileNodes(rootNode: FileNode,\n currentDirPath?: string | null,\n fileFilter?: FileFilter | null): FileNode[] | undefined {\n let currentFileNodes = rootNode.childNodes;\n if (currentDirPath) {\n const currentFileNodesPath = getFileNodePath(rootNode, currentDirPath);\n if (currentFileNodesPath) {\n if (currentFileNodesPath.length > 0) {\n currentFileNodes = currentFileNodesPath[currentFileNodesPath.length - 1].childNodes;\n }\n }\n }\n\n if (currentFileNodes) {\n if (fileFilter) {\n currentFileNodes = applyFileFilter(currentFileNodes, fileFilter);\n }\n currentFileNodes = currentFileNodes.sort(compareFileNames);\n }\n\n return currentFileNodes;\n}\n","import * as React from 'react';\nimport { Spinner } from \"@blueprintjs/core\";\n\nimport { FileNode } from './FileNode';\n\n\nexport interface IRootNodeLoadingProps {\n rootNode: FileNode;\n}\n\nconst RootNodeLoading: React.FC<IRootNodeLoadingProps> = ({rootNode}) => {\n if (!rootNode.childNodes) {\n return (\n <div style={{width: '100%', height: '100%'}}><Spinner size={32}/></div>\n );\n }\n return null;\n}\n\nexport default RootNodeLoading;\n\n\n\n","import * as React from 'react';\nimport { Colors, Icon, ITreeNode, Spinner, Tree } from \"@blueprintjs/core\";\n\nimport {\n addExpandedDirPath,\n FileNode,\n getFileNodeIcon,\n isPathValidAtIndex,\n removeExpandedDirPath\n} from './FileNode';\nimport RootNodeLoading from './RootNodeLoading';\n\nconst TREE_CONTAINER_STYLE: React.CSSProperties = {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n borderColor: Colors.DARK_GRAY2,\n borderStyle: 'solid',\n borderWidth: 1\n};\n\ntype IFileTreeNode = ITreeNode<FileNode>;\n\nexport interface IFileTreeProps {\n rootNode: FileNode;\n\n selectedPath?: string | null;\n onSelectedPathChange?: (selectedPath: string | null) => void;\n\n expandedPaths?: string[];\n onExpandedPathsChange?: (expandedPaths: string[]) => void;\n\n showFiles?: boolean;\n}\n\nconst FileTree: React.FC<IFileTreeProps> = (\n {\n rootNode,\n selectedPath,\n onSelectedPathChange,\n expandedPaths,\n onExpandedPathsChange,\n showFiles\n }\n) => {\n if (!rootNode.childNodes) {\n return <RootNodeLoading rootNode={rootNode}/>;\n }\n\n const treeNodes = getTreeNodes(rootNode,\n selectedPath || null,\n expandedPaths && expandedPaths.length > 0 ? expandedPaths : null,\n Boolean(showFiles));\n\n const handleNodeClick = (treeNode: IFileTreeNode, nodePath: number[]) => {\n if (onSelectedPathChange) {\n if (treeNode.nodeData!.isDir) {\n const path = getFileNodePath(treeNodes, nodePath);\n onSelectedPathChange(path !== selectedPath ? path : null);\n }\n }\n };\n\n const handleNodeExpand = (treeNode: IFileTreeNode, nodePath: number[]) => {\n if (onExpandedPathsChange) {\n if (treeNode.nodeData!.isDir) {\n const path = getFileNodePath(treeNodes, nodePath);\n onExpandedPathsChange(addExpandedDirPath(expandedPaths || [], path));\n }\n }\n };\n\n const handleNodeCollapse = (treeNode: IFileTreeNode, nodePath: number[]) => {\n if (onExpandedPathsChange) {\n if (treeNode.nodeData!.isDir) {\n const path = getFileNodePath(treeNodes, nodePath);\n onExpandedPathsChange(removeExpandedDirPath(expandedPaths || [], path));\n }\n }\n };\n\n return (\n <div style={TREE_CONTAINER_STYLE}>\n <Tree\n contents={treeNodes}\n onNodeClick={handleNodeClick}\n onNodeExpand={handleNodeExpand}\n onNodeCollapse={handleNodeCollapse}\n />\n </div>\n );\n}\n\nexport default FileTree;\n\n\nfunction getTreeNodes(rootNode: FileNode,\n selectedPath: string | null,\n expandedPaths: string[] | null,\n includeFiles: boolean): IFileTreeNode[] {\n if (!rootNode.childNodes) {\n return [];\n }\n const idGen: [number] = [0];\n return _getTreeNodes(rootNode.childNodes,\n selectedPath ? selectedPath.split('/') : [],\n expandedPaths ? expandedPaths.map(p => p.split('/')) : [],\n includeFiles,\n 0,\n idGen);\n}\n\nfunction _getTreeNodes(fileNodes: FileNode[],\n selectedPath: string[] | null,\n expandedPaths: string[][] | null,\n includeFiles: boolean,\n depth: number,\n idGen: [number]): IFileTreeNode[] {\n if (!includeFiles) {\n fileNodes = fileNodes.filter(node => node.isDir);\n }\n return fileNodes.map(node => {\n\n let _selectedPath = selectedPath;\n let isSelected = false;\n if (_selectedPath && isPathValidAtIndex(_selectedPath, depth, node.name)) {\n isSelected = depth === _selectedPath.length - 1;\n } else {\n _selectedPath = null;\n }\n\n let _expandedPaths = expandedPaths;\n let isExpanded = false;\n if (_expandedPaths) {\n _expandedPaths = _expandedPaths.filter(p => isPathValidAtIndex(p, depth, node.name));\n _expandedPaths = _expandedPaths.length > 0 ? _expandedPaths : null;\n isExpanded = _expandedPaths !== null;\n } else {\n _expandedPaths = null;\n }\n\n const id = idGen[0];\n idGen[0] = id + 1;\n let childTreeNodes;\n if (node.childNodes) {\n childTreeNodes = _getTreeNodes(node.childNodes,\n _selectedPath,\n _expandedPaths,\n includeFiles,\n depth + 1,\n idGen);\n }\n let hasCaret: boolean;\n if (includeFiles) {\n hasCaret = node.isDir\n && (!childTreeNodes || Boolean(childTreeNodes.find(treeNode => treeNode.nodeData!.isDir)));\n } else {\n hasCaret = node.isDir\n && (!childTreeNodes || childTreeNodes.length > 0);\n }\n let secondaryLabel;\n if (node.status === 'updating') {\n secondaryLabel = <Spinner size={16}/>;\n } else if (node.status === 'error') {\n secondaryLabel = <Icon icon='error' iconSize={16}/>;\n }\n return {\n id,\n icon: getFileNodeIcon(node),\n label: node.name,\n secondaryLabel,\n hasCaret,\n isSelected,\n isExpanded,\n childNodes: childTreeNodes,\n nodeData: node,\n };\n });\n}\n\nfunction getFileNodePath(rootNodes: IFileTreeNode[],\n nodePath: number[]): string {\n let fileNodePath = null;\n let childNodes = rootNodes;\n for (let depth = 0; depth < nodePath.length; depth++) {\n if (!childNodes) {\n // Weird!\n throw new Error(`internal error: missing childNodes at index ${depth} in node path ${nodePath.join()}`);\n }\n let childIndex = nodePath[depth];\n let childNode = childNodes[childIndex];\n\n if (fileNodePath === null) {\n fileNodePath = childNode.nodeData!.name;\n } else {\n fileNodePath += '/' + childNode.nodeData!.name;\n }\n\n childNodes = childNode.childNodes;\n }\n return fileNodePath;\n}\n","import * as React from 'react';\nimport {\n Breadcrumbs,\n Button,\n ButtonGroup,\n Classes,\n Colors,\n IBreadcrumbProps,\n MenuItem,\n Tooltip\n} from '@blueprintjs/core';\nimport { IItemRendererProps, ItemRenderer, Select } from '@blueprintjs/select';\n\nimport { getBasename, getParentPath, HostOS } from '../../../../common/paths';\nimport { ModalDialog } from '../../ModalDialog';\nimport { SplitPane } from '../../SplitPane';\nimport { FileDialogOptions, FileDialogResult, FileFilter } from '../types';\nimport FileList from './FileList';\nimport {\n addExpandedDirPath,\n ALL_FILES_FILTER, denormalizePath,\n FileNode,\n fromPathInputValue,\n getFileNode,\n toPathInputValue,\n} from './FileNode';\nimport FileTree from './FileTree';\n\n\nconst FILE_DIALOG_STYLE: React.CSSProperties = {\n width: '52vw'\n};\nconst FILE_CONTAINER_STYLE: React.CSSProperties = {\n width: '100%', display: 'flex', flexFlow: 'column nowrap'\n};\nconst FILE_MGT_ROW_STYLE: React.CSSProperties = {\n flexGrow: 0, display: 'flex', flexFlow: 'row nowrap', marginBottom: 6\n};\nconst FILE_LIST_ROW_STYLE: React.CSSProperties = {\n height: '40vh', flexGrow: 0\n};\nconst FILE_INPUT_ROW_STYLE: React.CSSProperties = {\n flexGrow: 0,\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n marginTop: 10\n};\nconst FILE_INPUT_STYLE: React.CSSProperties = {\n flexGrow: 1, marginLeft: 10, overflow: 'hidden'\n};\nconst INVALID_FILE_INPUT_STYLE: React.CSSProperties = {\n ...FILE_INPUT_STYLE,\n color: '#ffaaaa',\n};\nconst FILE_NAV_ROW_STYLE: React.CSSProperties = {\n flexGrow: 0, display: 'flex', flexFlow: 'row nowrap', marginBottom: 6\n};\nconst FILE_NAV_BC_STYLE: React.CSSProperties = {\n flexGrow: 1,\n backgroundColor: Colors.DARK_GRAY5,\n paddingLeft: 10,\n paddingRight: 10\n};\n\n/**\n * Various paths used in the UI. All paths have normalized from,\n * that is, backslashes on Windows host OS replaced by '/',\n * leading and trailing '/' removed, '//' replaced by single '/'.\n * All paths are meant absolute with respect to the fle system root `fsRootNode`,\n * even if the trailing '/' is removed.\n */\ninterface PathState {\n /**\n * The actually selected file or directory paths.\n */\n selectedPaths: string[];\n /**\n * Expanded directory paths in the FileTree component.\n */\n expandedPaths: string[];\n /**\n * Selected directory in the FileTree component.\n */\n selectedDirPath: string | null;\n /**\n * Current directory for children shown in FileList component.\n */\n currentDirPath: string;\n\n}\n\n/**\n * State of the file path input field.\n */\ninterface InputState {\n /**\n * Current value of the path input field. May not (yet) refer to any valid path at all.\n */\n value: string;\n /**\n * Whether current value is valid.\n */\n isValid: boolean;\n}\n\n\nconst FileFilterSelect = Select.ofType<FileFilter>();\n\n\nexport interface IFileDialogProps extends Omit<FileDialogOptions, 'properties'> {\n isOpen?: boolean;\n onClose?: (result: FileDialogResult) => any;\n rootNode: FileNode;\n updateFileNode: (path: string, force: boolean) => any;\n createFileNode?: (path: string, name: string) => any;\n renameFileNode?: (path: string, name: string) => any;\n deleteFileNodes?: (paths: string[]) => any;\n // dialog type\n saveFile?: boolean;\n // from properties\n openFile?: boolean;\n openDirectory?: boolean;\n multiSelections?: boolean;\n showHiddenFiles?: boolean;\n hostOS?: HostOS;\n}\n\nconst FileDialog: React.FC<IFileDialogProps> = (\n {\n isOpen,\n onClose,\n rootNode,\n updateFileNode,\n createFileNode,\n renameFileNode,\n deleteFileNodes,\n title,\n defaultPath,\n buttonLabel,\n filters,\n saveFile,\n openFile,\n openDirectory,\n multiSelections,\n showHiddenFiles,\n hostOS,\n }) => {\n\n if ((saveFile && openFile) || (saveFile && openDirectory) || (saveFile && multiSelections)) {\n throw new Error('saveFile flag cannot be used with openFile, openDirectory, multiSelections flags');\n }\n if (showHiddenFiles) {\n // TODO (forman): recognize showHiddenFiles\n console.warn('showHiddenFiles flag ignored (not implemented yet))');\n }\n\n // TODO (forman): avoid expensive computation of values, they are only needed initially\n const initSelectedPaths = (defaultPath && fromPathInputValue(defaultPath, '', multiSelections, hostOS)) || [];\n let initExpandedPaths = [];\n initSelectedPaths.forEach(p => {\n initExpandedPaths = addExpandedDirPath(initExpandedPaths, getParentPath(p, hostOS));\n });\n const initSelectedDirPath = initExpandedPaths.length > 0 ? initExpandedPaths[0] : null;\n const initCurrentDirPath = initSelectedDirPath || '';\n\n const [pathState, dispatchPathState] = React.useReducer(\n (state: PathState, stateUpdate: Partial<PathState>) => {\n return {...state, ...stateUpdate}\n },\n {\n selectedPaths: initSelectedPaths,\n expandedPaths: initExpandedPaths,\n selectedDirPath: initSelectedDirPath,\n currentDirPath: initCurrentDirPath,\n });\n const [inputState, dispatchInputState] = React.useReducer(\n (state: InputState, stateUpdate: Partial<InputState>) => {\n return {...state, ...stateUpdate}\n },\n {\n value: defaultPath || '',\n isValid: true\n });\n\n const [fileTreeWidth, setFileTreeWidth] = React.useState(300);\n const [selectedFileFilter, setSelectedFileFilter] = React.useState(\n filters && filters.length ? filters[0] : null\n );\n\n const updateCallback = React.useMemo(() => {\n return (path: string) => {\n updateFileNode(path, false);\n };\n }, [updateFileNode]);\n\n React.useEffect(() => {\n if (defaultPath) {\n updateCallback(defaultPath);\n }\n }, [defaultPath, updateCallback]);\n\n React.useEffect(() => {\n pathState.expandedPaths.forEach(p => updateCallback(p));\n }, [pathState.expandedPaths, updateCallback]);\n\n React.useEffect(() => {\n updateCallback(pathState.currentDirPath);\n }, [pathState.currentDirPath, updateCallback]);\n\n if (!isOpen) {\n return null;\n }\n\n // console.log(\"FileDialog: pathState=\", pathState);\n\n const canConfirm = () => {\n return pathState.selectedPaths.length > 0 && inputState.isValid;\n }\n\n const handleConfirm = () => {\n if (onClose) {\n onClose({\n // Make returned path absolute. Note that pathState.selectedPaths are always normalized.\n filePaths: pathState.selectedPaths.map(p => denormalizePath(p, hostOS)),\n canceled: false\n });\n }\n }\n\n const handleCancel = () => {\n if (onClose) {\n onClose({\n filePaths: [],\n canceled: true\n });\n }\n }\n\n const handleFileTreeWidthChange = (fileTreeWidth: number) => {\n setFileTreeWidth(fileTreeWidth);\n };\n\n const canNavigateBack = () => {\n // TODO (forman): implement me!\n return false;\n };\n\n const handleNavigateBack = () => {\n if (canNavigateBack()) {\n // TODO (forman): implement me!\n }\n };\n\n const canNavigateForward = () => {\n return false;\n };\n\n const handleNavigateForward = () => {\n if (canNavigateForward()) {\n // TODO (forman): implement me!\n }\n };\n\n const canNavigateUp = () => {\n return pathState.currentDirPath !== '';\n };\n\n const handleNavigateUp = () => {\n if (canNavigateUp()) {\n const parentDir = getParentPath(pathState.currentDirPath);\n dispatchPathState({\n selectedDirPath: parentDir !== '' ? parentDir : null,\n currentDirPath: parentDir,\n });\n }\n };\n\n const canShowRecentDirs = () => {\n // TODO (forman): implement me!\n return false;\n };\n\n const handleShowRecentDirs = () => {\n if (canShowRecentDirs()) {\n // TODO (forman): implement me!\n }\n };\n\n const canShowRecentPaths = () => {\n // TODO (forman): implement me!\n return false;\n };\n\n const handleShowRecentPaths = () => {\n if (canShowRecentPaths()) {\n // TODO (forman): implement me!\n }\n };\n\n const canCreateDirectory = () => {\n return Boolean(createFileNode);\n };\n\n const handleCreateDirectoryClick = () => {\n if (canCreateDirectory()) {\n // TODO (forman): enter create mode\n // createFileNode!(pathState.selectedDirPath!, name);\n }\n };\n\n const canRename = () => {\n return Boolean(renameFileNode) && pathState.selectedPaths.length === 1;\n };\n\n const handleRenameClick = () => {\n if (canRename()) {\n // TODO (forman): enter rename mode\n // renameFileNode!(pathState.selectedPaths[0], name);\n }\n };\n\n const canDelete = () => {\n return Boolean(deleteFileNodes) && pathState.selectedPaths.length > 0;\n };\n\n const handleDeleteClick = () => {\n if (canDelete()) {\n deleteFileNodes!(pathState.selectedPaths);\n }\n };\n\n const handleSyncCurrentDir = () => {\n updateFileNode(pathState.currentDirPath, true);\n };\n\n const handleSelectedDirChangeInBreadcrumb = (path: string) => {\n handleSelectedDirChangeInTree(path);\n };\n\n const handleSelectedDirChangeInTree = (path: string | null) => {\n if (openDirectory) {\n // change selectedPaths/inputValue too\n if (path !== null) {\n const selectedPaths = [path];\n const inputValue = toPathInputValue([getBasename(path)], multiSelections);\n dispatchPathState({\n selectedDirPath: path,\n currentDirPath: path,\n selectedPaths,\n });\n dispatchInputState({value: inputValue, isValid: true})\n } else {\n dispatchPathState({\n selectedDirPath: null,\n selectedPaths: [],\n });\n dispatchInputState({value: '', isValid: true})\n }\n } else {\n // do not change selectedPaths/inputValue\n if (path !== null) {\n dispatchPathState({\n selectedDirPath: path,\n currentDirPath: path\n });\n } else {\n dispatchPathState({selectedDirPath: null});\n }\n }\n };\n\n const handleExpandedPathsChangeInTree = (paths: string[]) => {\n dispatchPathState({expandedPaths: paths});\n };\n\n const handleSelectedPathsChangeInList = (paths: string[]) => {\n dispatchPathState({\n selectedPaths: paths,\n });\n dispatchInputState({\n value: toPathInputValue(paths.map(p => getBasename(p)), multiSelections),\n isValid: true\n })\n };\n\n const handleCurrentDirPathChangeInList = (path: string) => {\n if (openDirectory && !openFile && !multiSelections) {\n // change selectedPaths/inputValue too\n dispatchPathState({\n expandedPaths: addExpandedDirPath(pathState.expandedPaths, path),\n selectedDirPath: path,\n currentDirPath: path,\n selectedPaths: [path],\n });\n dispatchInputState({\n value: toPathInputValue([getBasename(path)], multiSelections),\n isValid: true\n })\n } else {\n dispatchPathState({\n expandedPaths: addExpandedDirPath(pathState.expandedPaths, path),\n selectedDirPath: path,\n currentDirPath: path,\n });\n }\n };\n\n const handleSelectedPathsChangeInTextField = (event: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = event.target.value || '';\n let isInputValid = true;\n const selectedPaths = fromPathInputValue(inputValue, pathState.currentDirPath, multiSelections, hostOS);\n if (selectedPaths.length) {\n // User entered files / directories\n\n // Add parents of selected files to expanded paths\n let expandedPaths = pathState.expandedPaths;\n selectedPaths.forEach(p => {\n const expandedPath = getParentPath(p);\n expandedPaths = addExpandedDirPath(expandedPaths, expandedPath);\n });\n // Check if we have a new current dir\n let currentDirPath = selectedPaths.length > 0 ? getParentPath(selectedPaths[0]) : null;\n if (currentDirPath !== null && getFileNode(rootNode, currentDirPath) === null) {\n currentDirPath = null;\n }\n if (currentDirPath !== null) {\n // New current directory exists\n\n dispatchPathState({\n selectedDirPath: currentDirPath,\n currentDirPath,\n expandedPaths,\n selectedPaths,\n });\n\n // Check if selected files / directories exist (yet)\n if (openFile || openDirectory) {\n isInputValid = !selectedPaths.find(p => getFileNode(rootNode, p) === null);\n }\n\n } else {\n // New current directory doe yet exist (yet). But we'll need to update expanded paths.\n dispatchPathState({selectedPaths, expandedPaths});\n isInputValid = false;\n }\n } else {\n // User entered nothing so far\n dispatchPathState({selectedPaths});\n }\n dispatchInputState({value: inputValue, isValid: isInputValid});\n }\n\n const getBreadcrumbs = (): IBreadcrumbProps[] => {\n if (pathState.currentDirPath === '') {\n return [];\n }\n let pathComponents = pathState.currentDirPath.split('/');\n return pathComponents.map((dirName, index) => {\n let onClick;\n if (index < pathComponents.length - 1) {\n const path = pathComponents.slice(0, index + 1).join('/');\n onClick = () => handleSelectedDirChangeInBreadcrumb(path);\n }\n return {text: dirName, onClick};\n });\n };\n\n let renderActions;\n if (!openFile && !openDirectory && !saveFile) {\n renderActions = () => null;\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title={title || getDefaultFileActionText(saveFile, openDirectory, openFile)}\n confirmTitle={buttonLabel || getDefaultFileActionText(saveFile, openDirectory, openFile)}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n canConfirm={canConfirm}\n style={FILE_DIALOG_STYLE}\n renderActions={renderActions}\n >\n <div style={FILE_CONTAINER_STYLE}>\n <div style={FILE_NAV_ROW_STYLE}>\n <ButtonGroup minimal={true}>\n <Button\n disabled={!canNavigateBack()}\n onClick={handleNavigateBack}\n icon=\"arrow-left\"\n />\n <Button\n disabled={!canNavigateForward()}\n onClick={handleNavigateForward}\n icon=\"arrow-right\"\n />\n <Button\n disabled={!canNavigateUp()}\n onClick={handleNavigateUp}\n icon=\"arrow-up\"\n />\n </ButtonGroup>\n <div style={FILE_NAV_BC_STYLE}>\n <Breadcrumbs className=\"bp3-small\" items={getBreadcrumbs()}/>\n </div>\n <ButtonGroup minimal={true}>\n <Button\n disabled={!canShowRecentDirs()}\n onClick={handleShowRecentDirs}\n icon=\"caret-down\"\n />\n <Button\n onClick={handleSyncCurrentDir}\n icon=\"refresh\"\n />\n </ButtonGroup>\n </div>\n {(Boolean(createFileNode) || Boolean(renameFileNode) || Boolean(deleteFileNodes)) && (\n <div style={FILE_MGT_ROW_STYLE}>\n <ButtonGroup minimal={true}>\n {Boolean(createFileNode) && (\n <Tooltip\n content={canCreateDirectory()\n ? `Create new directory in ${pathState.currentDirPath}` : null}>\n <Button\n disabled={!canCreateDirectory()}\n onClick={handleCreateDirectoryClick}\n icon=\"folder-new\"\n text=\"Create Directory\"\n />\n </Tooltip>\n )}\n {Boolean(renameFileNode) && (\n <Tooltip content={canRename() ? `Rename ${pathState.selectedPaths[0]}` : null}>\n <Button\n disabled={!canRename()}\n onClick={handleRenameClick}\n icon=\"edit\"\n text=\"Rename\"\n />\n </Tooltip>\n )}\n {Boolean(deleteFileNodes) && (\n <Tooltip content={canDelete()\n ? `Delete ${pathState.selectedPaths[0]}`\n + (pathState.selectedPaths.length > 0 ? ', ...' : '') : null}>\n <Button\n disabled={!canDelete()}\n onClick={handleDeleteClick}\n icon=\"trash\"\n text=\"Delete Directory\"\n />\n </Tooltip>\n )}\n </ButtonGroup>\n </div>)}\n <div style={FILE_LIST_ROW_STYLE}>\n <SplitPane dir=\"hor\" initialSize={fileTreeWidth} onChange={handleFileTreeWidthChange}>\n <FileTree\n rootNode={rootNode}\n selectedPath={pathState.selectedDirPath}\n onSelectedPathChange={handleSelectedDirChangeInTree}\n expandedPaths={pathState.expandedPaths}\n onExpandedPathsChange={handleExpandedPathsChangeInTree}\n />\n <FileList\n rootNode={rootNode}\n currentDirPath={pathState.currentDirPath}\n onCurrentDirPathChange={handleCurrentDirPathChangeInList}\n selectedPaths={pathState.selectedPaths}\n onSelectedPathsChange={handleSelectedPathsChangeInList}\n fileFilter={selectedFileFilter}\n multiSelections={multiSelections}\n openDirectory={openDirectory}\n />\n </SplitPane>\n </div>\n <div style={FILE_INPUT_ROW_STYLE}>\n <span>{openDirectory && !openFile ? 'Directory:' : 'Filename:'}</span>\n <input\n className={Classes.INPUT}\n style={inputState.isValid ? FILE_INPUT_STYLE : INVALID_FILE_INPUT_STYLE}\n type=\"text\"\n value={inputState.value}\n onChange={handleSelectedPathsChangeInTextField}\n />\n <ButtonGroup>\n <Button\n disabled={!canShowRecentPaths()}\n onClick={handleShowRecentPaths}\n icon=\"caret-down\"\n minimal={true}\n />\n {filters &&\n <FileFilterSelect\n popoverProps={{minimal: true}}\n items={filters}\n filterable={false}\n itemRenderer={fileFilterItemRenderer}\n onItemSelect={filter => setSelectedFileFilter(filter)}\n >\n <Button\n text={getFileFilterText(selectedFileFilter)}\n rightIcon=\"caret-down\"\n />\n </FileFilterSelect>\n }\n </ButtonGroup>\n </div>\n </div>\n </ModalDialog>\n );\n};\n\nexport default FileDialog;\n\nconst fileFilterItemRenderer: ItemRenderer<FileFilter> = (fileFilter: FileFilter, itemProps: IItemRendererProps) => {\n const {modifiers, handleClick} = itemProps;\n return (\n <MenuItem\n active={modifiers.active}\n disabled={modifiers.disabled}\n key={fileFilter.name}\n text={fileFilter.name}\n label={`(${fileFilter.extensions.map(e => \"*.\" + e).join(\", \")})`}\n onClick={handleClick}\n />\n );\n};\n\nfunction getFileFilterText(fileFilter: FileFilter | null): string {\n fileFilter = fileFilter || ALL_FILES_FILTER;\n return `${fileFilter.name} (${fileFilter.extensions.map(e => \"*.\" + e).join(\", \")})`;\n}\n\nfunction getDefaultFileActionText(saveFile?: boolean, openDirectory?: boolean, openFile?: boolean): string {\n if (saveFile) {\n return 'Save File';\n }\n if (openDirectory && !openFile) {\n return 'Select Directory';\n }\n return 'Open File';\n}\n","import * as React from 'react';\nimport { OpenDialogOptions, OpenDialogResult } from '../types';\n\nimport FileDialog from './FileDialog';\nimport { FileNode } from './FileNode';\n\n\nexport interface IOpenDialogProps extends OpenDialogOptions {\n isOpen?: boolean;\n onClose?: (result: OpenDialogResult) => any;\n rootNode: FileNode;\n updateFileNode: (path: string, force: boolean) => any;\n}\n\nconst OpenDialog: React.FC<IOpenDialogProps> = (props) => {\n const properties = new Set(props.properties);\n return (\n <FileDialog\n {...props}\n saveFile={false}\n // openFile={properties.has('openFile') || !properties.has('openDirectory')}\n openFile={properties.has('openFile')}\n openDirectory={properties.has('openDirectory')}\n multiSelections={properties.has('multiSelections')}\n showHiddenFiles={properties.has('showHiddenFiles')}\n />\n );\n};\n\nexport default OpenDialog;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { State } from '../state';\nimport OpenDialog, { IOpenDialogProps } from \"../components/desktop/fs/OpenDialog\";\nimport * as actions from \"../actions\";\n\n\nfunction mapStateToProps(state: State) {\n return {\n ...state.control.directorySelectDialog.options,\n isOpen: state.control.directorySelectDialog.isOpen,\n onClose: state.control.directorySelectDialog.onClose,\n rootNode: state.data.fsRootNode,\n hostOS: state.communication.webAPIServiceInfo.hostOS,\n };\n}\n\nconst mapDispatchToProps = {\n updateFileNode: actions.updateFileNode,\n};\n\nconst DirectorySelectDialog: React.FC<IOpenDialogProps> = (props) => {\n return (props.isOpen) ? (<OpenDialog {...props}/>) : null;\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DirectorySelectDialog);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { State } from '../state';\nimport OpenDialog, { IOpenDialogProps } from \"../components/desktop/fs/OpenDialog\";\nimport * as actions from \"../actions\";\n\n\nfunction mapStateToProps(state: State) {\n return {\n ...state.control.fileOpenDialog.options,\n isOpen: state.control.fileOpenDialog.isOpen,\n onClose: state.control.fileOpenDialog.onClose,\n rootNode: state.data.fsRootNode,\n hostOS: state.communication.webAPIServiceInfo.hostOS,\n };\n}\n\nconst mapDispatchToProps = {\n updateFileNode: actions.updateFileNode,\n};\n\nconst FileOpenDialog: React.FC<IOpenDialogProps> = (props) => {\n return (props.isOpen) ? (<OpenDialog {...props}/>) : null;\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FileOpenDialog);\n","import * as React from 'react';\nimport { FileNode } from './FileNode';\n\nimport FileDialog from './FileDialog';\nimport { FileDialogResult, SaveDialogOptions, SaveDialogResult } from '../types';\n\n\nexport interface ISaveDialogProps extends SaveDialogOptions {\n isOpen?: boolean;\n onClose?: (result: SaveDialogResult) => any;\n rootNode: FileNode;\n updateFileNode: (path: string, force: boolean) => any;\n}\n\nconst SaveDialog: React.FC<ISaveDialogProps> = ({onClose, ...props}) => {\n const properties = new Set(props.properties);\n const handleClose = (result: FileDialogResult) => {\n onClose({\n canceled: result.canceled,\n filePath: !result.canceled && result.filePaths.length > 0 ? result.filePaths[0] : null\n });\n };\n return (\n <FileDialog\n {...props}\n onClose={handleClose}\n saveFile={true}\n openFile={false}\n openDirectory={false}\n multiSelections={false}\n showHiddenFiles={properties.has(\"showHiddenFiles\")}\n />\n );\n};\n\nexport default SaveDialog;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { State } from '../state';\nimport SaveDialog, { ISaveDialogProps } from \"../components/desktop/fs/SaveDialog\";\nimport * as actions from \"../actions\";\n\n\nfunction mapStateToProps(state: State) {\n return {\n ...state.control.fileSaveDialog.options,\n isOpen: state.control.fileSaveDialog.isOpen,\n onClose: state.control.fileSaveDialog.onClose,\n rootNode: state.data.fsRootNode,\n hostOS: state.communication.webAPIServiceInfo.hostOS,\n };\n}\n\nconst mapDispatchToProps = {\n updateFileNode: actions.updateFileNode,\n};\n\nconst FileSaveDialog: React.FC<ISaveDialogProps> = (props) => {\n return (props.isOpen) ? (<SaveDialog {...props}/>) : null;\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FileSaveDialog);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { State } from '../state';\nimport OpenDialog, { IOpenDialogProps } from \"../components/desktop/fs/OpenDialog\";\nimport * as actions from \"../actions\";\n\n\nfunction mapStateToProps(state: State) {\n return {\n ...state.control.fileBrowseDialog.options,\n isOpen: state.control.fileBrowseDialog.isOpen,\n onClose: state.control.fileBrowseDialog.onClose,\n rootNode: state.data.fsRootNode,\n hostOS: state.communication.webAPIServiceInfo.hostOS,\n };\n}\n\nconst mapDispatchToProps = {\n updateFileNode: actions.updateFileNode,\n};\n\nconst FileBrowseDialog: React.FC<IOpenDialogProps> = (props) => {\n let properties = props.properties;\n if (properties) {\n const propSet = new Set(properties);\n propSet.delete(\"openFile\");\n propSet.delete(\"openDirectory\");\n properties = Array.from(propSet);\n } else {\n properties = [];\n }\n return (props.isOpen) ? (<OpenDialog title=\"Browse Files\" {...props} properties={properties}/>) : null;\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FileBrowseDialog);\n","import * as React from 'react';\nimport { Button, Checkbox, Intent } from '@blueprintjs/core';\nimport { IconNames } from '@blueprintjs/icons';\n\nimport { isDefined } from '../../../common/types';\nimport { ModalDialog } from '../ModalDialog';\nimport { MessageBoxOptions, MessageBoxResult } from './types';\n\n\nexport interface IMessageBoxProps extends MessageBoxOptions {\n isOpen?: boolean;\n onClose?: (result: MessageBoxResult | null) => any;\n}\n\nconst icons = {\n none: undefined,\n info: IconNames.INFO_SIGN,\n error: IconNames.ERROR,\n question: IconNames.CONFIRM,\n warning: IconNames.WARNING_SIGN,\n}\n\nexport const MessageBox: React.FC<IMessageBoxProps> = (\n {\n isOpen,\n onClose,\n type,\n title,\n message,\n detail,\n buttons,\n checkboxLabel,\n checkboxChecked,\n defaultId,\n cancelId,\n }) => {\n const [_checkboxChecked, setCheckboxChecked] = React.useState<boolean>((isDefined(checkboxChecked) && checkboxChecked));\n const hasCheckbox = Boolean(checkboxLabel);\n if (!isOpen) {\n return null;\n }\n const handleButtonClick = (buttonIndex: number) => {\n if (onClose) {\n onClose({buttonIndex, checkboxChecked: _checkboxChecked});\n }\n }\n const handleCancel = () => {\n if (onClose) {\n onClose(null);\n }\n }\n\n const renderActions = () => {\n const actions = (buttons || [\"OK\"]).map(\n (buttonText, buttonIndex) => {\n const intent = buttonIndex === defaultId ? Intent.PRIMARY : Intent.NONE;\n if (buttonIndex === cancelId) {\n return <Button intent={intent} onClick={handleCancel}>{buttonText}</Button>;\n } else {\n return <Button intent={intent} onClick={() => handleButtonClick(buttonIndex)}>{buttonText}</Button>;\n }\n }\n );\n return actions;\n }\n\n const handleCheckboxChange = (event) => {\n setCheckboxChecked(event.target.checked);\n }\n return (\n <ModalDialog\n isOpen={isOpen}\n title={title}\n icon={icons[type]}\n onCancel={handleCancel}\n renderActions={renderActions}\n >\n <p>{message}</p>\n <p className=\"bp3-text-muted\">{detail}</p>\n {hasCheckbox && <p><Checkbox label={checkboxLabel} onChange={handleCheckboxChange}/></p>}\n </ModalDialog>\n );\n};\n","import * as React from 'react';\nimport { connect, Dispatch } from 'react-redux';\n\nimport { State } from '../state';\nimport { IMessageBoxProps, MessageBox } from '../components/desktop/MessageBox';\n\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\nfunction mapStateToProps(state: State): IMessageBoxProps {\n if (state.control.messageBox) {\n return {\n isOpen: state.control.messageBox.isOpen,\n onClose: state.control.messageBox.onClose,\n ...state.control.messageBox.options,\n };\n } else {\n return {\n isOpen: false,\n message: '',\n };\n }\n}\n\nconst _MessageBox: React.FC<IMessageBoxProps & IDispatch> = (props) => {\n return (<MessageBox {...props}/>);\n};\n\nexport default connect(mapStateToProps)(_MessageBox);\n","import { IconName } from '@blueprintjs/icons';\nimport * as React from 'react'\nimport { CSSProperties } from 'react'\nimport { Colors, Icon, PopoverPosition, Tooltip, } from '@blueprintjs/core';\nimport { Splitter } from './Splitter';\n\n\nexport interface PanelContainerLayout {\n horPos: number;\n verPos: number;\n}\n\nexport interface IPanelContainerProps {\n position?: 'left' | 'right';\n selectedTopPanelId?: string | null;\n selectedBottomPanelId?: string | null;\n onSelectedTopPanelChange?: (panelId: string | null) => void;\n onSelectedBottomPanelChange?: (panelId: string | null) => void;\n layout: PanelContainerLayout;\n onLayoutChange?: (layout: PanelContainerLayout) => void;\n undockedMode?: boolean;\n}\n\nexport interface IPanelContainerState {\n selectedTopPanelId: string | null;\n selectedBottomPanelId: string | null;\n layout: PanelContainerLayout;\n}\n\n/**\n * A PanelContainer comprises Panels.\n *\n * @author Norman Fomferra\n */\nexport class PanelContainer extends React.PureComponent<IPanelContainerProps, IPanelContainerState> {\n\n static readonly PANEL_ICON_SIZE = 20; // ==> because bp3-icon-large = 20px\n static readonly PANEL_ICON_PADDING = 8;\n static readonly PANEL_BAR_SIZE = 2 * PanelContainer.PANEL_ICON_PADDING + PanelContainer.PANEL_ICON_SIZE;\n static readonly PANEL_BAR_PADDING = 8;\n static readonly PANEL_PANE_PADDING = 4;\n static readonly PANEL_BODY_PADDING = 2;\n\n\n constructor(props: IPanelContainerProps) {\n super(props);\n this.onTopPanelSelected = this.onTopPanelSelected.bind(this);\n this.onBottomPanelSelected = this.onBottomPanelSelected.bind(this);\n this.onTopPanelClose = this.onTopPanelClose.bind(this);\n this.onBottomPanelClose = this.onBottomPanelClose.bind(this);\n this.onVerSplitterPosChange = this.onVerSplitterPosChange.bind(this);\n this.onHorSplitterPosChange = this.onHorSplitterPosChange.bind(this);\n this.state = PanelContainer.mapPropsToState(props);\n }\n\n componentWillReceiveProps(props: IPanelContainerProps) {\n this.setState(PanelContainer.mapPropsToState(props));\n }\n\n static mapPropsToState(props: IPanelContainerProps): IPanelContainerState {\n return {\n selectedTopPanelId: props.selectedTopPanelId,\n selectedBottomPanelId: props.selectedBottomPanelId,\n layout: props.layout,\n };\n }\n\n private onTopPanelSelected(panelId: string) {\n const isCurrent = this.state.selectedTopPanelId === panelId;\n this.setState({selectedTopPanelId: isCurrent ? null : panelId} as any, () => {\n if (this.props.onSelectedTopPanelChange) {\n this.props.onSelectedTopPanelChange(this.state.selectedTopPanelId);\n }\n });\n }\n\n private onBottomPanelSelected(panelId: string) {\n const isCurrent = this.state.selectedBottomPanelId === panelId;\n this.setState({selectedBottomPanelId: isCurrent ? null : panelId} as any, () => {\n if (this.props.onSelectedBottomPanelChange) {\n this.props.onSelectedBottomPanelChange(this.state.selectedBottomPanelId);\n }\n });\n }\n\n private onTopPanelClose() {\n this.onTopPanelSelected(null);\n }\n\n private onBottomPanelClose() {\n this.onBottomPanelSelected(null);\n }\n\n private onVerSplitterPosChange(delta: number) {\n let verPos = this.state.layout.verPos + delta;\n this.setLayout({...this.state.layout, verPos});\n }\n\n private onHorSplitterPosChange(delta: number) {\n let horPos = this.state.layout.horPos;\n if ((this.props.position || 'left') === 'left') {\n horPos += delta;\n } else {\n horPos -= delta;\n }\n this.setLayout({...this.state.layout, horPos});\n }\n\n private setLayout(layout: PanelContainerLayout) {\n this.setState({layout} as any, () => {\n if (this.props.onLayoutChange) {\n this.props.onLayoutChange(layout);\n }\n });\n }\n\n private getSelectedTopPanel(): JSX.Element | null {\n return this.findPanel(this.state.selectedTopPanelId);\n }\n\n private getSelectedBottomPanel(): JSX.Element | null {\n return this.findPanel(this.state.selectedBottomPanelId);\n }\n\n private findPanel(id: string): JSX.Element | null {\n if (!id) {\n return null;\n }\n let selectedPanel: JSX.Element | null = null;\n React.Children.forEach(this.props.children, (child: React.ReactChild) => {\n const panel = child as JSX.Element;\n if (panel.props && panel.props.id === id) {\n selectedPanel = panel;\n }\n });\n return selectedPanel;\n }\n\n render() {\n const panelBar = <PanelBar panels={React.Children.toArray(this.props.children) as JSX.Element[]}\n position={this.props.position}\n selectedTopPanelId={this.state.selectedTopPanelId}\n selectedBottomPanelId={this.state.selectedBottomPanelId}\n onTopPanelSelected={this.onTopPanelSelected}\n onBottomPanelSelected={this.onBottomPanelSelected}/>;\n\n const selectedTopPanel = this.getSelectedTopPanel();\n const selectedBottomPanel = this.getSelectedBottomPanel();\n\n const panelPaneWidth = this.state.layout.horPos;\n let panelPaneHeight: string | number = '100%';\n\n let topPanelPane;\n if (selectedTopPanel) {\n if (selectedTopPanel && selectedBottomPanel) {\n panelPaneHeight = this.state.layout.verPos;\n }\n const topPanelPaneStyle = {\n width: panelPaneWidth,\n //maxWidth: panelPaneWidth,\n height: panelPaneHeight,\n //maxHeight: panelPaneHeight,\n };\n topPanelPane = this.renderPanelPane(selectedTopPanel, topPanelPaneStyle, this.onTopPanelClose);\n }\n\n let bottomPanelPane;\n if (selectedBottomPanel) {\n if (selectedTopPanel && selectedBottomPanel) {\n panelPaneHeight = `calc(100% - ${this.state.layout.verPos + 4}px)`;\n }\n const bottomPanelPaneStyle = {\n width: panelPaneWidth,\n //maxWidth: panelPaneWidth,\n height: panelPaneHeight,\n //maxHeight: panelPaneHeight,\n };\n bottomPanelPane = this.renderPanelPane(selectedBottomPanel, bottomPanelPaneStyle, this.onBottomPanelClose);\n }\n\n let panelPane;\n if (topPanelPane && bottomPanelPane) {\n panelPane = this.renderTwoPanelsPane(topPanelPane, bottomPanelPane);\n } else if (topPanelPane) {\n panelPane = topPanelPane;\n } else if (bottomPanelPane) {\n panelPane = bottomPanelPane;\n }\n\n let resizablePanelPane;\n if (panelPane) {\n resizablePanelPane = this.renderResizablePanelPane(panelPane);\n }\n\n // Important: panelContainerStyle must have flex=\"none\"\n const panelContainerStyle = {\n display: 'flex',\n flexFlow: 'row nowrap',\n flex: 'none',\n maxHeight: '100%',\n //opacity: .5,\n };\n\n const position = this.props.position || 'left';\n if (position === 'left') {\n return (\n <div style={panelContainerStyle}>\n {panelBar}\n {resizablePanelPane}\n </div>\n );\n } else {\n return (\n <div style={panelContainerStyle}>\n {resizablePanelPane}\n {panelBar}\n </div>\n );\n }\n }\n\n private renderPanelPane(panel: JSX.Element, style: any, onClose: (panelId: string) => void) {\n return (<PanelPane panel={panel}\n onClose={onClose}\n position={this.props.position}\n style={style}/>);\n }\n\n private renderTwoPanelsPane(topPanelPane, bottomPanelPane) {\n const verSplitter = <Splitter dir=\"ver\" onChange={this.onVerSplitterPosChange}/>;\n return (\n <div style={{display: 'flex', flexDirection: 'column'}}>\n {topPanelPane}\n {verSplitter}\n {bottomPanelPane}\n </div>\n );\n }\n\n private renderResizablePanelPane(panelPane) {\n const undockedMode = this.props.undockedMode || false;\n const position = this.props.position || 'left';\n\n let undockedModeStyle;\n if (undockedMode) {\n if (position === 'left') {\n undockedModeStyle = {\n position: 'absolute',\n top: 0,\n left: PanelContainer.PANEL_BAR_SIZE,\n backgroundColor: PANEL_UNDOCKED_BACKGROUND_COLOR,\n zIndex: 5,\n };\n } else {\n undockedModeStyle = {\n position: 'absolute',\n top: 0,\n right: PanelContainer.PANEL_BAR_SIZE,\n backgroundColor: PANEL_UNDOCKED_BACKGROUND_COLOR,\n zIndex: 5,\n };\n }\n }\n\n const resizablePanelPaneStyle = {\n paddingTop: PanelContainer.PANEL_PANE_PADDING,\n paddingLeft: position === 'left' ? PanelContainer.PANEL_PANE_PADDING : 0,\n paddingRight: position === 'left' ? 0 : PanelContainer.PANEL_PANE_PADDING,\n flex: 'auto',\n display: 'flex',\n flexFlow: 'row nowrap',\n maxHeight: '100%',\n ...undockedModeStyle\n };\n\n const horSplitter = <Splitter dir=\"hor\" onChange={this.onHorSplitterPosChange}/>;\n\n if (position === 'left') {\n return (\n <div style={resizablePanelPaneStyle}>\n {panelPane}\n {horSplitter}\n </div>\n );\n } else {\n return (\n <div style={resizablePanelPaneStyle}>\n {horSplitter}\n {panelPane}\n </div>\n );\n }\n }\n}\n\n\ninterface IPanelHeaderProps {\n id: string;\n icon: IconName;\n title: string;\n onClose: () => void;\n}\n\nfunction PanelHeader(props: IPanelHeaderProps): JSX.Element | null {\n const panelIcon = <Icon icon={props.icon} className={'cate-panel-header-item'}/>;\n const panelTitle = <span className={'cate-panel-text cate-panel-header-item'}>{props.title.toUpperCase()}</span>;\n\n const panelCloseIcon = (\n <Icon icon={'cross'} className={'cate-icon-small cate-panel-header-item'} onClick={props.onClose}/>\n );\n\n return (\n <div className=\"cate-panel-header\" style={{flex: 'none'}}>\n {panelIcon}\n {panelTitle}\n {/*{panelMenuIcon}*/}\n {panelCloseIcon}\n </div>\n );\n}\n\nconst PANEL_BAR_ITEM_BASE_STYLE = {padding: PanelContainer.PANEL_ICON_PADDING};\nconst PANEL_BAR_ITEM_NORMAL_STYLE = {...PANEL_BAR_ITEM_BASE_STYLE, color: Colors.GRAY4};\nconst PANEL_BAR_ITEM_SELECTED_STYLE = {\n ...PANEL_BAR_ITEM_BASE_STYLE,\n color: Colors.WHITE,\n backgroundColor: Colors.DARK_GRAY5\n};\n\n// This is Colors.DARK_GRAY5 with 0.5 opacity\nconst PANEL_UNDOCKED_BACKGROUND_COLOR = 'rgba(57, 75, 89, 0.5)';\n\nconst TOP_PANEL_BAR_STYLE = {flex: 'none', listStyleType: 'none', padding: 0, margin: 0, border: 'none'};\nconst BOTTOM_PANEL_BAR_STYLE = {flex: 'none', listStyleType: 'none', padding: 0, margin: 0, border: 'none'};\nconst SPACER_STYLE = {flex: 'auto'};\nconst CONTAINER_STYLE: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n flex: 'none',\n maxHeight: '100%',\n minWidth: PanelContainer.PANEL_BAR_SIZE,\n overflow: 'hidden',\n backgroundColor: Colors.DARK_GRAY2,\n paddingTop: PanelContainer.PANEL_BAR_PADDING,\n paddingBottom: PanelContainer.PANEL_BAR_PADDING,\n};\nconst PANEL_BUTTON_STYLE: CSSProperties = {textAlign: 'center', verticalAlign: 'middle'};\n\nconst PANEL_BODY_CONTAINER_STYLE: CSSProperties = {\n flex: 1,\n padding: PanelContainer.PANEL_BODY_PADDING,\n overflow: 'auto',\n};\n\n\ninterface IPanelBarProps {\n panels: JSX.Element[];\n selectedTopPanelId: string | null;\n selectedBottomPanelId: string | null;\n onTopPanelSelected: (panelId: string) => void;\n onBottomPanelSelected: (panelId: string) => void;\n position: 'left' | 'right';\n}\n\nfunction PanelBar(props: IPanelBarProps) {\n const position = props.position || 'left';\n const tooltipPos = position === 'left' ? PopoverPosition.RIGHT : PopoverPosition.LEFT;\n const panels = props.panels || [];\n\n function renderPanelButton(panel, selectedPanelId: string) {\n const panelId: string = panel.props.id;\n const panelTitle: string = panel.props.title;\n const panelIcon: IconName = panel.props.icon as IconName;\n const selected = panelId === selectedPanelId;\n const style = selected ? PANEL_BAR_ITEM_SELECTED_STYLE : PANEL_BAR_ITEM_NORMAL_STYLE;\n const panelPosition: string = panel.props.position || 'top';\n const onClick = () => panelPosition === 'top' ? props.onTopPanelSelected(panelId) : props.onBottomPanelSelected(panelId);\n return (\n <li key={panelId}\n onClick={onClick}\n style={style}>\n <Tooltip content={panelTitle} position={tooltipPos} hoverOpenDelay={1500}>\n <span style={PANEL_BUTTON_STYLE}><Icon icon={panelIcon} iconSize={PanelContainer.PANEL_ICON_SIZE}/></span>\n </Tooltip>\n </li>\n );\n }\n\n //noinspection JSMismatchedCollectionQueryUpdate\n const topPanelButtons: JSX.Element[] = [];\n //noinspection JSMismatchedCollectionQueryUpdate\n const bottomPanelButtons: JSX.Element[] = [];\n for (let panel of panels) {\n if (!panel.props || !panel.props.id) {\n console.error('PanelBar children must be of type Panel');\n continue;\n }\n const panelPosition: string = panel.props.position || 'top';\n if (panelPosition === 'top') {\n topPanelButtons.push(renderPanelButton(panel, props.selectedTopPanelId));\n } else {\n bottomPanelButtons.push(renderPanelButton(panel, props.selectedBottomPanelId));\n }\n }\n\n return (\n <div style={CONTAINER_STYLE}>\n <ul style={TOP_PANEL_BAR_STYLE}>\n {topPanelButtons}\n </ul>\n <div style={SPACER_STYLE}/>\n <ul style={BOTTOM_PANEL_BAR_STYLE}>\n {bottomPanelButtons}\n </ul>\n </div>\n );\n}\n\ninterface IPanelPaneProps {\n position: 'left' | 'right';\n style?: { [key: string]: any };\n panel: JSX.Element | null;\n onClose: (panelId: string) => void;\n}\n\nfunction PanelPane(props: IPanelPaneProps) {\n const panel = props.panel;\n if (!panel || !panel.props || !panel.props.body) {\n return null;\n }\n\n const panelId = panel.props.id;\n const panelBody = panel.props.body;\n\n let panelParentStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n ...props.style,\n };\n\n return (\n <div style={panelParentStyle}>\n <PanelHeader\n id={panelId}\n title={panel.props.title}\n icon={panel.props.icon}\n onClose={() => props.onClose(panelId)}\n />\n <div style={PANEL_BODY_CONTAINER_STYLE}>\n {panelBody}\n </div>\n </div>\n );\n}\n","import { IconName } from '@blueprintjs/icons';\nimport * as React from 'react'\n\nexport interface IPanelProps {\n id: string;\n title: string;\n icon: IconName;\n body?: JSX.Element | null;\n position?: 'top' | 'bottom';\n}\n\n/**\n * A Panel is a child element of a PanelContainer.\n *\n * @author Norman Fomferra\n */\nexport class Panel extends React.PureComponent<IPanelProps> {\n\n //noinspection JSMethodCanBeStatic\n shouldComponentUpdate() {\n return false;\n }\n\n render() {\n return null;\n }\n}\n\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { Colors, Icon, IconName, Menu, MenuItem, NonIdealState, Popover, PopoverPosition, } from '@blueprintjs/core';\nimport { SplitDir, Splitter } from './Splitter';\nimport {\n findMoveTargetViewIds,\n isViewSplitState,\n ViewLayoutState,\n ViewPanelState,\n ViewPath,\n ViewRenderer,\n ViewSplitState,\n ViewState\n} from './ViewState';\n\n/**\n * Mapping from view type name to ViewRenderer\n */\nexport type ViewRenderMap = { [viewType: string]: ViewRenderer<any> };\n/**\n * Mapping from view id to ViewState\n */\nexport type ViewMap = { [viewId: string]: ViewState<any> };\n\ninterface IViewManagerProps {\n viewRenderMap: ViewRenderMap;\n viewLayout: ViewLayoutState;\n views: ViewState<any>[];\n activeView: ViewState<any> | null;\n noViewsDescription?: string | null;\n noViewsAction?: JSX.Element | null;\n noViewsVisual?: IconName | JSX.Element;\n onSelectView: (viewPath: ViewPath, viewId: string) => void;\n onCloseView: (viewPath: ViewPath, viewId: string) => void;\n onCloseAllViews: (viewPath: ViewPath) => void;\n onMoveView: (sourceViewId: string, placement: 'before' | 'after', targetViewId: string) => void;\n onSplitViewPanel: (viewPath: ViewPath, dir: SplitDir, pos: number) => void;\n onChangeViewSplitPos: (viewPath: ViewPath, delta: number) => void;\n}\n\ninterface IViewManagerState {\n}\n\nexport class ViewManager extends React.PureComponent<IViewManagerProps, IViewManagerState> {\n static readonly NO_VIEW_CONTAINER_STYLE = {\n width: '100%',\n height: '100%',\n flex: 'auto'\n };\n static readonly HOR_SPLIT_CONTAINER_STYLE = {\n width: '100%',\n height: '100%',\n display: 'flex',\n flexFlow: 'row nowrap',\n flex: 'auto',\n boxSizing: 'border-box',\n };\n static readonly VER_SPLIT_CONTAINER_STYLE = {\n width: '100%',\n height: '100%',\n display: 'flex',\n flexFlow: 'column nowrap',\n flex: 'auto',\n boxSizing: 'border-box',\n };\n\n private viewMap: ViewMap;\n\n constructor(props: IViewManagerProps) {\n super(props);\n this.viewMap = ViewManager.createViewMap(this.props.views);\n }\n\n componentWillReceiveProps(nextProps: IViewManagerProps): void {\n this.viewMap = ViewManager.createViewMap(nextProps.views);\n }\n\n static createViewMap(views: ViewState<any>[]) {\n const map = {};\n views.forEach(view => {\n map[view.id] = view;\n });\n return map;\n }\n\n render() {\n if (!this.props.views.length) {\n return this.renderNoViews();\n }\n if (isViewSplitState(this.props.viewLayout)) {\n return this.renderViewSplit(this.props.viewLayout as ViewSplitState, '');\n } else {\n return this.renderViewPanel(this.props.viewLayout as ViewPanelState, '');\n }\n }\n\n renderNoViews() {\n return (\n <div style={ViewManager.NO_VIEW_CONTAINER_STYLE}>\n <NonIdealState\n title=\"No views\"\n description={this.props.noViewsDescription}\n action={this.props.noViewsAction}\n icon={this.props.noViewsVisual}\n />\n </div>\n );\n }\n\n renderViewSplit(viewSplit: ViewSplitState, viewPath: ViewPath) {\n\n let renderedLayout1;\n let layout1 = viewSplit.layouts[0];\n if (isViewSplitState(layout1)) {\n renderedLayout1 = this.renderViewSplit(layout1 as ViewSplitState, viewPath + '0');\n } else {\n renderedLayout1 = this.renderViewPanel(layout1 as ViewPanelState, viewPath + '0');\n }\n\n let renderedLayout2;\n let layout2 = viewSplit.layouts[1];\n if (isViewSplitState(layout2)) {\n renderedLayout2 = this.renderViewSplit(layout2 as ViewSplitState, viewPath + '1');\n } else {\n renderedLayout2 = this.renderViewPanel(layout2 as ViewPanelState, viewPath + '1');\n }\n\n if (renderedLayout1 && renderedLayout2) {\n let containerStyle;\n let childContainer1Style;\n let childContainer2Style;\n const splitterSize = 4; // px\n if (viewSplit.dir === 'hor') {\n containerStyle = ViewManager.HOR_SPLIT_CONTAINER_STYLE;\n let width1 = viewSplit.pos;\n let width2 = `calc(100% - ${width1 + splitterSize}px)`;\n childContainer1Style = {flex: 'none', width: width1, height: '100%'};\n childContainer2Style = {flex: 'auto', width: width2, height: '100%'};\n } else {\n containerStyle = ViewManager.VER_SPLIT_CONTAINER_STYLE;\n let height1 = viewSplit.pos;\n let height2 = `calc(100% - ${height1 + splitterSize}px)`;\n childContainer1Style = {flex: 'none', width: '100%', height: height1};\n childContainer2Style = {flex: 'auto', width: '100%', height: height2};\n }\n\n return (\n <div style={containerStyle}>\n <div style={childContainer1Style}>\n {renderedLayout1}\n </div>\n <Splitter dir={viewSplit.dir}\n onChange={(delta: number) => this.props.onChangeViewSplitPos(viewPath, delta)}/>\n <div style={childContainer2Style}>\n {renderedLayout2}\n </div>\n </div>\n );\n } else if (renderedLayout1) {\n return renderedLayout1;\n } else if (renderedLayout2) {\n return renderedLayout2;\n }\n return null;\n }\n\n renderViewPanel(viewPanel: ViewPanelState, viewPath: ViewPath) {\n return (\n <ViewPanel\n viewLayout={this.props.viewLayout}\n viewRenderMap={this.props.viewRenderMap}\n viewMap={this.viewMap}\n activeView={this.props.activeView}\n viewPath={viewPath}\n viewIds={viewPanel.viewIds}\n selectedViewId={viewPanel.selectedViewId}\n onSelectView={this.props.onSelectView}\n onCloseView={this.props.onCloseView}\n onCloseAllViews={this.props.onCloseAllViews}\n onMoveView={this.props.onMoveView}\n onSplitViewPanel={this.props.onSplitViewPanel}\n />\n );\n }\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ViewPanel\n\ninterface IViewPanelProps {\n viewLayout: ViewLayoutState;\n viewRenderMap: ViewRenderMap;\n viewMap: ViewMap;\n activeView: ViewState<any> | null;\n viewPath: ViewPath;\n viewIds: string[];\n selectedViewId: string | null;\n onSelectView: (viewPath: ViewPath, viewId: string) => void;\n onCloseView: (viewPath: ViewPath, viewId: string) => void;\n onCloseAllViews: (viewPath: ViewPath) => void;\n onMoveView: (sourceViewId: string, placement: 'before' | 'after', targetViewId: string) => void;\n onSplitViewPanel: (viewPath: ViewPath, dir: SplitDir, pos: number) => void;\n}\n\nclass ViewPanel extends React.PureComponent<IViewPanelProps, null> {\n\n static readonly SELECTED_BG_COLOR = Colors.DARK_GRAY1;\n static readonly TAB_STYLE_SELECTED: CSSProperties = {\n padding: 2,\n flex: 'none',\n color: Colors.WHITE,\n backgroundColor: ViewPanel.SELECTED_BG_COLOR\n };\n static readonly TAB_STYLE_NORMAL: CSSProperties = {padding: 2, color: Colors.LIGHT_GRAY1};\n\n static readonly TITLE_STYLE_BASE: CSSProperties = {paddingLeft: 4, paddingRight: 4};\n static readonly TITLE_STYLE_ACTIVE: CSSProperties = {...ViewPanel.TITLE_STYLE_BASE, color: Colors.BLUE5};\n static readonly TITLE_STYLE_SELECTED: CSSProperties = ViewPanel.TITLE_STYLE_BASE;\n static readonly TITLE_STYLE_NORMAL: CSSProperties = ViewPanel.TITLE_STYLE_BASE;\n\n static readonly CLOSE_ICON_STYLE_SELECTED: CSSProperties = {marginLeft: 6, fontSize: 12};\n static readonly CLOSE_ICON_STYLE_NORMAL: CSSProperties = {marginLeft: 6, fontSize: 12};\n\n static readonly MENU_ICON_STYLE: CSSProperties = {color: Colors.GRAY5, marginLeft: 5, fontSize: 12};\n\n static readonly TABS_STYLE: CSSProperties = {flex: 'none', display: 'flex', flexDirection: 'row'};\n static readonly SPACER_STYLE: CSSProperties = {flex: 'auto'};\n static readonly MENU_STYLE: CSSProperties = {flex: 'none', height: '100%'};\n\n static readonly VIEW_HEADER_STYLE: CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n flex: 'none',\n width: '100%',\n marginTop: 2,\n borderBottomStyle: 'solid',\n borderBottomWidth: 2,\n borderBottomColor: ViewPanel.SELECTED_BG_COLOR,\n boxSizing: 'border-box',\n overflow: 'hidden',\n };\n\n static readonly VIEW_BODY_STYLE: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n flex: 'auto',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n };\n\n static readonly CONTAINER_STYLE: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n };\n\n\n private contentElement: HTMLDivElement;\n\n constructor(props: IViewPanelProps) {\n super(props);\n this.onSplitHor = this.onSplitHor.bind(this);\n this.onSplitVer = this.onSplitVer.bind(this);\n this.onContentDivRef = this.onContentDivRef.bind(this);\n }\n\n onSplitHor() {\n this.props.onSplitViewPanel(this.props.viewPath, 'hor', 0.5 * this.contentElement.clientWidth);\n }\n\n onSplitVer() {\n this.props.onSplitViewPanel(this.props.viewPath, 'ver', 0.5 * this.contentElement.clientHeight);\n }\n\n onContentDivRef(contentElement: HTMLDivElement) {\n this.contentElement = contentElement;\n }\n\n render() {\n const viewIds = this.props.viewIds;\n if (!viewIds || !viewIds.length) {\n return null;\n }\n\n const selectedViewId = this.props.selectedViewId;\n const views = [];\n let selectedView = null;\n viewIds.forEach(id => {\n const view = this.props.viewMap[id];\n if (view) {\n if (selectedViewId && id === selectedViewId) {\n selectedView = view;\n }\n views.push(view);\n }\n });\n\n let renderedViewContent;\n const tabItems = [];\n for (let i = 0; i < views.length; i++) {\n let view = views[i];\n let viewId = view.id;\n let viewTitle = view.title;\n let viewIconName = view.icon;\n let tabStyle;\n let titleStyle;\n let closeIconStyle;\n if (selectedView && selectedView.id === viewId) {\n let viewRenderer = this.props.viewRenderMap[view.type];\n renderedViewContent = viewRenderer(view);\n tabStyle = ViewPanel.TAB_STYLE_SELECTED;\n titleStyle = (selectedView === this.props.activeView) ? ViewPanel.TITLE_STYLE_ACTIVE : ViewPanel.TITLE_STYLE_SELECTED;\n closeIconStyle = ViewPanel.CLOSE_ICON_STYLE_SELECTED;\n } else {\n tabStyle = ViewPanel.TAB_STYLE_NORMAL;\n titleStyle = ViewPanel.TITLE_STYLE_NORMAL;\n closeIconStyle = ViewPanel.CLOSE_ICON_STYLE_NORMAL;\n }\n\n const onClose = () => {\n this.props.onCloseView(this.props.viewPath, viewId);\n };\n const onSelect = () => {\n this.props.onSelectView(this.props.viewPath, viewId);\n };\n\n let iconSpan;\n if (viewIconName && viewIconName !== '') {\n iconSpan = <Icon icon={viewIconName} style={titleStyle} onClick={onSelect}/>;\n }\n tabItems.push(\n <div key={viewId} style={tabStyle}>\n {iconSpan}\n <span style={titleStyle} onClick={onSelect}>{viewTitle}</span>\n <Icon style={closeIconStyle} icon=\"cross\" onClick={onClose}/>\n </div>\n );\n }\n\n const tabs = (<div style={ViewPanel.TABS_STYLE}>{tabItems}</div>);\n const spacer = (<div key=\"spacer\" style={ViewPanel.SPACER_STYLE}/>);\n\n const menuIconStyle = ViewPanel.MENU_ICON_STYLE;\n\n let splitHorEntry;\n let splitVerEntry;\n\n if (views.length > 1) {\n splitHorEntry = (\n <Icon key=\"splitHor\" style={menuIconStyle} icon=\"add-column-right\"\n onClick={this.onSplitHor}/>\n );\n splitVerEntry = (\n <Icon key=\"splitVer\" style={menuIconStyle} icon=\"add-row-bottom\"\n onClick={this.onSplitVer}/>\n );\n }\n\n let moreMenuEntry;\n if (selectedView) {\n const result = findMoveTargetViewIds(this.props.viewLayout, selectedViewId);\n const viewMap = this.props.viewMap;\n const moveBeforeMenuItems = result.before.map(viewId => {\n const view = viewMap[viewId];\n const onClick = () => this.props.onMoveView(selectedViewId, 'before', view.id);\n return (<MenuItem key={viewId} onClick={onClick} text={view.title}/>);\n });\n const moveAfterMenuItems = result.after.map(viewId => {\n const view = viewMap[viewId];\n const onClick = () => this.props.onMoveView(selectedViewId, 'after', view.id);\n return (<MenuItem key={viewId} onClick={onClick} text={view.title}/>);\n });\n\n let moveBeforeMenuItem;\n if (moveBeforeMenuItems.length) {\n moveBeforeMenuItem = (\n <MenuItem key=\"before\" text=\"Move Before\">{moveBeforeMenuItems}</MenuItem>\n );\n }\n let moveAfterMenuItem;\n if (moveAfterMenuItems.length) {\n moveAfterMenuItem = (\n <MenuItem key=\"after\" text=\"Move After\">{moveAfterMenuItems}</MenuItem>\n );\n }\n if (moveBeforeMenuItem || moveAfterMenuItem) {\n const moreMenu = (<Menu>{moveBeforeMenuItem}{moveAfterMenuItem}</Menu>);\n moreMenuEntry = (\n <Popover content={moreMenu} position={PopoverPosition.BOTTOM}>\n <Icon key=\"more\" style={menuIconStyle} icon=\"more\"/>\n </Popover>\n );\n }\n }\n\n const menu = (\n <div style={ViewPanel.MENU_STYLE}>\n {splitHorEntry}\n {splitVerEntry}\n {moreMenuEntry}\n </div>\n );\n\n return (\n <div style={ViewPanel.CONTAINER_STYLE}>\n <div style={ViewPanel.VIEW_HEADER_STYLE}>\n {tabs}\n {spacer}\n {menu}\n </div>\n <div style={ViewPanel.VIEW_BODY_STYLE}\n ref={this.onContentDivRef}>\n {renderedViewContent}\n </div>\n </div>\n );\n }\n}\n\n\n\n\n\n","import * as React from 'react';\nimport { Button, Collapse } from '@blueprintjs/core';\n\nconst CONTAINER_STYLE: React.CSSProperties = {\n marginTop: '0.75em',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end'\n};\n\nconst DETAILS_STYLE: React.CSSProperties = {\n overflow: 'auto',\n};\n\n\ninterface IMessageDetailsProps {\n details: string;\n onCopyDetails?: (details: string) => any;\n width?: number | string;\n height?: number | string;\n}\n\nconst MessageDetails: React.FC<IMessageDetailsProps> = ({\n details,\n onCopyDetails,\n width,\n height\n }) => {\n\n const [showDetails, setShowDetails] = React.useState(false);\n return (\n <div style={CONTAINER_STYLE}>\n <div>\n {onCopyDetails && (\n <Button\n onClick={() => onCopyDetails(details)}\n icon={'clipboard'}\n small={true}\n style={{marginRight: 6}}\n />\n )}\n <Button\n onClick={() => setShowDetails(!showDetails)}\n rightIcon={showDetails ? 'chevron-up' : 'chevron-down'}\n small={true}\n >\n {showDetails ? 'Hide Details' : 'Show Details'}\n </Button>\n </div>\n <Collapse\n isOpen={showDetails}\n >\n <pre className=\"user-selectable\"\n style={{\n ...DETAILS_STYLE,\n width: width || '32em',\n height: height || '20em'\n }}\n >\n {details}\n </pre>\n </Collapse>\n </div>\n );\n};\n\nexport default MessageDetails;\n","import { Checkbox, Icon, IconName, Intent } from '@blueprintjs/core';\r\nimport * as React from 'react';\r\nimport { connect, DispatchProp } from 'react-redux';\r\nimport * as actions from '../actions';\r\nimport MessageDetails from '../components/MessageDetails';\r\n\r\nimport { ModalDialog } from '../components/ModalDialog';\r\nimport * as selectors from '../selectors';\r\nimport { State } from '../state';\r\nimport { getJobFailureIconName, getJobFailureTitle, isDeveloperError, isUserError, JobFailure } from '../webapi';\r\n\r\n\r\ninterface IJobFailureDialogProps {\r\n isOpen: boolean;\r\n jobTitle: string;\r\n jobFailure: JobFailure;\r\n}\r\n\r\ninterface IJobFailureDialogState {\r\n copyReport: boolean;\r\n}\r\n\r\nfunction mapStateToProps(state: State): IJobFailureDialogProps {\r\n const dialogState = selectors.dialogStateSelector(JobFailureDialog.DIALOG_ID)(state) as any;\r\n return {\r\n isOpen: dialogState.isOpen,\r\n jobTitle: dialogState.jobTitle,\r\n jobFailure: dialogState.jobFailure,\r\n };\r\n}\r\n\r\nconst ERROR_MESSAGE_STYLE: React.CSSProperties = {wordBreak: 'break-all'};\r\n\r\nclass JobFailureDialog extends React.Component<DispatchProp<State> & IJobFailureDialogProps, IJobFailureDialogState> {\r\n\r\n static readonly DIALOG_ID = 'jobFailureDialog';\r\n // BlueprintJS Dialog width is 500px by default\r\n private static readonly DIALOG_STYLE: React.CSSProperties = {width: '600px'};\r\n\r\n constructor(props: IJobFailureDialogProps) {\r\n super(props);\r\n this.renderBody = this.renderBody.bind(this);\r\n this.handleConfirm = this.handleConfirm.bind(this);\r\n this.handleCancel = this.handleCancel.bind(this);\r\n this.handleCopyReport = this.handleCopyReport.bind(this);\r\n this.state = {copyReport: false};\r\n }\r\n\r\n handleConfirm() {\r\n if (this.state.copyReport) {\r\n let title = this.props.jobTitle;\r\n let failure = this.props.jobFailure;\r\n let report = `Job: ${title}\\nMessage: ${failure.message}\\n`;\r\n report += `Code: ${failure.code}\\n`;\r\n if (failure.data) {\r\n if (failure.data.method) {\r\n report += `Method: ${failure.data.method}\\n`;\r\n }\r\n if (failure.data.exception) {\r\n report += `Exception: ${failure.data.exception}\\n`;\r\n }\r\n if (failure.data.traceback) {\r\n report += `\\n${failure.data.traceback}\\n`;\r\n }\r\n }\r\n actions.copyTextToClipboard(report);\r\n }\r\n this.props.dispatch(actions.hideDialog(JobFailureDialog.DIALOG_ID));\r\n }\r\n\r\n handleCancel() {\r\n this.props.dispatch(actions.hideDialog(JobFailureDialog.DIALOG_ID));\r\n }\r\n\r\n handleCopyReport(event) {\r\n this.setState({copyReport: event.target.checked});\r\n }\r\n\r\n render() {\r\n if (!this.props.isOpen || !this.props.jobFailure) {\r\n return null;\r\n }\r\n const title = getJobFailureTitle(this.props.jobFailure);\r\n return (\r\n <ModalDialog isOpen={this.props.isOpen}\r\n icon={'error'}\r\n title={title}\r\n onConfirm={this.handleConfirm}\r\n onCancel={this.handleCancel}\r\n noCancelButton={true}\r\n renderBody={this.renderBody}\r\n style={JobFailureDialog.DIALOG_STYLE}/>\r\n );\r\n }\r\n\r\n renderBody() {\r\n if (!this.props.isOpen) {\r\n return null;\r\n }\r\n\r\n let messageText = this.props.jobFailure.message;\r\n if (!messageText) {\r\n messageText = `An unknown error occurred (code ${this.props.jobFailure.code}).`;\r\n }\r\n let messageDiv = (\r\n <div style={ERROR_MESSAGE_STYLE}>\r\n <p>Oops, Cate couldn't carry out the request</p>\r\n <em><p className=\"user-selectable\">{this.props.jobTitle}</p></em>\r\n <div>Reason:</div>\r\n <div className=\"user-selectable\">{messageText}</div>\r\n </div>\r\n );\r\n\r\n let traceback;\r\n if (!isUserError(this.props.jobFailure)\r\n && this.props.jobFailure.data && this.props.jobFailure.data.traceback) {\r\n traceback = <MessageDetails details={this.props.jobFailure.data.traceback} width={'36em'}/>;\r\n }\r\n\r\n let reporting;\r\n if (isDeveloperError(this.props.jobFailure)) {\r\n reporting = (\r\n <div style={{marginTop: '1em'}}>\r\n <span className=\"bp3-text-muted\">Please consider reporting this issue in Cate's <a\r\n href=\"https://github.com/CCI-Tools/cate/issues\" target=\"_blank\" rel=\"noopener noreferrer\">issue tracker</a>.</span>\r\n <Checkbox label='Copy error report to clipboard'\r\n checked={this.state.copyReport}\r\n onChange={this.handleCopyReport}/>\r\n </div>\r\n );\r\n }\r\n\r\n const icon = getJobFailureIconName(this.props.jobFailure) as IconName;\r\n let iconIntent;\r\n if (isUserError(this.props.jobFailure)) {\r\n iconIntent = Intent.PRIMARY;\r\n } else {\r\n iconIntent = Intent.WARNING;\r\n }\r\n\r\n return (\r\n <div style={{display: 'flex'}}>\r\n <div style={{fontSize: '4em', flex: '0 1 1em'}}>\r\n <Icon icon={icon} intent={iconIntent} iconSize={48}/>\r\n </div>\r\n <div style={{flex: '1 1 90%', marginLeft: '1em'}}>\r\n {messageDiv}\r\n {traceback}\r\n {reporting}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(JobFailureDialog);\r\n","import * as React from 'react';\nimport { AnchorButton, ControlGroup, Intent } from \"@blueprintjs/core\";\nimport { connect, DispatchProp } from 'react-redux';\n\nimport { DialogState, State } from '../state';\nimport { ModalDialog } from '../components/ModalDialog';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { showFileOpenDialog } from \"../actions\";\nimport { OpenDialogResult } from \"../components/desktop/types\";\n\n\nconst DIV_STYLE = {width: '100%', marginBottom: '2em', display: 'flex', flexGrow: 1};\nconst BUTTON_STYLE = {flex: 'none'};\n\n\ninterface IFileDownloadDialogProps {\n dialogId: string;\n isOpen: boolean;\n}\n\ninterface IFileDownloadDialogState extends DialogState {\n filePaths?: string[];\n}\n\nfunction mapStateToProps(state: State): IFileDownloadDialogProps {\n const dialogState = selectors.dialogStateSelector(FileDownloadDialog.DIALOG_ID)(state);\n return {\n isOpen: dialogState.isOpen,\n dialogId: 'fileDownloadDialog'\n };\n}\n\nclass FileDownloadDialog extends React.Component<IFileDownloadDialogProps & DispatchProp<State>, IFileDownloadDialogState> {\n static readonly DIALOG_ID = 'fileDownloadDialog';\n\n constructor(props: IFileDownloadDialogProps & DispatchProp<State>) {\n super(props);\n this.state = {filePaths: []};\n this.onCancel = this.onCancel.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.canConfirm = this.canConfirm.bind(this);\n this.renderBody = this.renderBody.bind(this);\n }\n\n componentWillReceiveProps(nextProps: IFileDownloadDialogProps) {\n this.setState({filePaths: []});\n }\n\n private onCancel() {\n this.props.dispatch(actions.hideDialog(FileDownloadDialog.DIALOG_ID));\n }\n\n private canConfirm(): boolean {\n return this.state.filePaths.length > 0;\n }\n\n private onConfirm() {\n this.props.dispatch(actions.hideDialog(FileDownloadDialog.DIALOG_ID, this.state));\n this.props.dispatch(actions.downloadFiles(this.state.filePaths) as any);\n }\n\n render() {\n let isOpen = this.props.isOpen;\n if (!isOpen) {\n return null;\n }\n\n return (\n <ModalDialog\n isOpen={isOpen}\n title=\"Download Files\"\n icon=\"download\"\n confirmTitle=\"Download\"\n confirmIconName=\"download\"\n confirmTooltip=\"Download files.\"\n onCancel={this.onCancel}\n canConfirm={this.canConfirm}\n onConfirm={this.onConfirm}\n renderBody={this.renderBody}\n />);\n }\n\n handleOpenFilesOnClose = (result: OpenDialogResult) => {\n if (!result.canceled) {\n this.setState({...this.state, filePaths: result.filePaths});\n }\n };\n\n handleOpenFilesOpen = () => {\n this.props.dispatch(\n showFileOpenDialog({\n title: 'Select Files',\n properties: ['openFile', 'multiSelections']\n },\n\n this.handleOpenFilesOnClose) as any);\n };\n\n private renderBody() {\n if (!this.state.filePaths) {\n return null;\n }\n const files = this.state.filePaths.map(path => (\n <li key={path}>\n {path}\n </li>\n ));\n\n return (\n <div>\n File download:\n <ControlGroup style={DIV_STYLE} fill={true}>\n <AnchorButton intent={Intent.PRIMARY} style={BUTTON_STYLE}\n onClick={this.handleOpenFilesOpen}>Select Remote Files...</AnchorButton>\n\n </ControlGroup>\n <aside>\n {files.length > 0 ? (<h4>Files</h4>) : ''}\n <ul>{files}</ul>\n </aside>\n\n </div>\n );\n }\n}\n\nexport default connect(mapStateToProps)(FileDownloadDialog);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { connect, Dispatch } from 'react-redux';\nimport { useMatomo } from '@datapunt/matomo-tracker-react'\n\nimport GdprBanner from './GdprBanner';\nimport { isElectron } from '../electron';\nimport { FileSystemAPI } from '../webapi';\nimport AppBar from './AppBar';\nimport ChooseWorkspaceDialog, { DELETE_WORKSPACE_DIALOG_ID, OPEN_WORKSPACE_DIALOG_ID } from './ChooseWorkspaceDialog';\nimport GlobeView from './GlobeView'\nimport FigureView from './FigureView';\nimport ServiceAutoShutdownDialog from './ServiceAutoShutdownDialog';\nimport ServiceShutdownDialog from './ServiceShutdownDialog';\nimport TableView from './TableView';\nimport DataSourcesPanel from './DataSourcesPanel';\nimport OperationsPanel from './OperationsPanel';\nimport WebAPIStatusBox from './WebAPIStatusBox';\nimport WorkspacePanel from './WorkspacePanel';\nimport VariablePanel from './VariablesPanel';\nimport PlacemarksPanel from './PlacemarksPanel';\nimport ViewPanel from './ViewPanel';\nimport TaskPanel from './TasksPanel';\nimport StatusBar from './StatusBar';\nimport LayersPanel from './LayersPanel';\nimport StylesPanel from './StylesPanel';\nimport NewWorkspaceDialog from './NewWorkspaceDialog';\nimport SaveWorkspaceAsDialog from './SaveWorkspaceAsDialog';\nimport PreferencesDialog from './PreferencesDialog';\nimport DirectorySelectDialog from './DirectorySelectDialog';\nimport FileOpenDialog from './FileOpenDialog';\nimport FileSaveDialog from \"./FileSaveDialog\";\nimport FileBrowseDialog from \"./FileBrowseDialog\";\nimport MessageBox from './MessageBox';\nimport { PanelContainer, PanelContainerLayout } from '../components/PanelContainer';\nimport { Panel } from '../components/Panel';\nimport {\n AnimationViewDataState,\n FigureViewDataState,\n State,\n TableViewDataState,\n WorldViewDataState\n} from '../state';\nimport * as actions from '../actions';\nimport * as selectors from '../selectors';\nimport { ViewManager, ViewRenderMap } from '../components/ViewManager';\nimport { SplitDir, ViewLayoutState, ViewPath, ViewState } from '../components/ViewState';\nimport OperationStepDialog from './OperationStepDialog';\nimport { NEW_CTX_OPERATION_STEP_DIALOG_ID } from './operation-step-dialog-ids';\nimport AnimationView from './AnimationView';\nimport JobFailureDialog from './JobFailureDialog';\nimport desktopActions from '../components/desktop/actions';\nimport FileUploadDialog from \"./FileUploadDialog\";\nimport FileDownloadDialog from \"./FileDownloadDialog\";\n\ntype AppServiceMode = 'local' | 'cloud';\n\nfunction renderWorldView(view: ViewState<WorldViewDataState>) {\n // See #390, Drop 2D map view https://github.com/CCI-Tools/cate/issues/390.\n // See tag \"1.1.0.dev1-with-ol\".\n // return view.data.viewMode === \"3D\" ? (<GlobeView view={view}/>) : (<MapView view={view}/>);\n return <GlobeView view={view}/>;\n}\n\nfunction renderFigureView(view: ViewState<FigureViewDataState>) {\n return <FigureView view={view}/>;\n}\n\nfunction renderAnimationView(view: ViewState<AnimationViewDataState>) {\n return <AnimationView view={view}/>;\n}\n\nfunction renderTableView(view: ViewState<TableViewDataState>) {\n return <TableView view={view}/>;\n}\n\nconst VIEW_TYPE_RENDERERS: ViewRenderMap = {\n world: renderWorldView,\n figure: renderFigureView,\n animation: renderAnimationView,\n table: renderTableView,\n};\n\ninterface IDispatch {\n dispatch: Dispatch<State>;\n}\n\ninterface IApplicationPageProps {\n forceAppBar?: boolean;\n fileSystemAPI: FileSystemAPI | null;\n appServiceMode: AppServiceMode;\n appServiceURL: string;\n appServiceHostOS: string;\n appServiceVersion: string;\n}\n\nfunction mapStateToPropsApplication(state: State): IApplicationPageProps {\n return {\n forceAppBar: state.session.forceAppBar,\n fileSystemAPI: selectors.fileSystemAPISelector(state),\n appServiceMode: window.location.pathname.indexOf(\"/proxy/\") > 0 ? 'cloud' : 'local',\n appServiceURL: state.communication.webAPIServiceURL,\n appServiceHostOS: state.communication.webAPIServiceInfo && state.communication.webAPIServiceInfo.hostOS,\n appServiceVersion: state.communication.webAPIServiceInfo && state.communication.webAPIServiceInfo.version,\n };\n}\n\nconst ROOT_DIV_STYLE: CSSProperties = {\n display: 'flex',\n flexFlow: 'column nowrap',\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n};\n\nconst MAIN_DIV_STYLE: CSSProperties = {\n display: 'flex',\n flexFlow: 'row nowrap',\n flex: 'auto',\n height: '100%',\n overflow: 'hidden'\n};\n\nconst _AppMainPage: React.FC<IApplicationPageProps & IDispatch> = (\n {\n forceAppBar,\n fileSystemAPI,\n appServiceMode,\n appServiceURL,\n appServiceHostOS,\n appServiceVersion,\n dispatch\n }) => {\n\n const {trackPageView} = useMatomo();\n\n // Track page view\n React.useEffect(() => {\n const customDimensions = [\n {id: 1, value: appServiceMode},\n {id: 2, value: appServiceURL},\n {id: 3, value: appServiceHostOS},\n {id: 4, value: appServiceVersion},\n ];\n console.log(\"Tracking:\", customDimensions);\n trackPageView({customDimensions});\n }, [trackPageView, appServiceMode, appServiceURL, appServiceHostOS, appServiceVersion]);\n\n React.useEffect(() => {\n dispatch(actions.installGlobalHandlers() as any);\n }, [dispatch]);\n\n let appBar;\n if (!isElectron() || !!forceAppBar) {\n appBar = <AppBar/>;\n }\n\n return (\n <div className={'bp3-dark'} style={ROOT_DIV_STYLE}>\n <GdprBanner/>\n <WebAPIStatusBox/>\n {appBar}\n <div style={MAIN_DIV_STYLE}>\n <LeftPanel/>\n <CenterPanel/>\n <RightPanel/>\n </div>\n <StatusBar/>\n <PreferencesDialog/>\n <NewWorkspaceDialog/>\n <FileUploadDialog/>\n <FileDownloadDialog/>\n <SaveWorkspaceAsDialog/>\n <ServiceShutdownDialog/>\n <ServiceAutoShutdownDialog/>\n <ChooseWorkspaceDialog dialogId={OPEN_WORKSPACE_DIALOG_ID}/>\n <ChooseWorkspaceDialog dialogId={DELETE_WORKSPACE_DIALOG_ID}/>\n <OperationStepDialog id={NEW_CTX_OPERATION_STEP_DIALOG_ID}/>\n <JobFailureDialog/>\n {!desktopActions.isNativeUI && fileSystemAPI !== null && (<DirectorySelectDialog/>)}\n {!desktopActions.isNativeUI && fileSystemAPI !== null && (<FileOpenDialog/>)}\n {!desktopActions.isNativeUI && fileSystemAPI !== null && (<FileSaveDialog/>)}\n {!desktopActions.isNativeUI && fileSystemAPI !== null && (<FileBrowseDialog/>)}\n {!desktopActions.isNativeUI && <MessageBox/>}\n </div>\n );\n}\n\nconst AppMainPage = connect(mapStateToPropsApplication)(_AppMainPage);\nexport default AppMainPage;\n\ninterface ILeftPanelProps {\n panelContainerUndockedMode: boolean;\n leftPanelContainerLayout: PanelContainerLayout;\n selectedLeftTopPanelId?: string;\n selectedLeftBottomPanelId?: string;\n}\n\nfunction mapStateToPropsLeft(state: State): ILeftPanelProps {\n return {\n panelContainerUndockedMode: selectors.panelContainerUndockedModeSelector(state),\n leftPanelContainerLayout: selectors.leftPanelContainerLayoutSelector(state),\n selectedLeftTopPanelId: selectors.selectedLeftTopPanelIdSelector(state),\n selectedLeftBottomPanelId: selectors.selectedLeftBottomPanelIdSelector(state),\n };\n}\n\nclass _LeftPanel extends React.PureComponent<ILeftPanelProps & IDispatch, null> {\n\n constructor(props: ILeftPanelProps & IDispatch) {\n // noinspection DuplicatedCode\n super(props);\n this.onLeftPanelContainerLayoutChange = this.onLeftPanelContainerLayoutChange.bind(this);\n this.onRightPanelContainerLayoutChange = this.onRightPanelContainerLayoutChange.bind(this);\n this.onSelectedLeftTopPanelChange = this.onSelectedLeftTopPanelChange.bind(this);\n this.onSelectedLeftBottomPanelChange = this.onSelectedLeftBottomPanelChange.bind(this);\n }\n\n onLeftPanelContainerLayoutChange(layout: PanelContainerLayout) {\n this.props.dispatch(actions.setLeftPanelContainerLayout(layout));\n }\n\n onRightPanelContainerLayoutChange(layout: PanelContainerLayout) {\n this.props.dispatch(actions.setRightPanelContainerLayout(layout));\n }\n\n onSelectedLeftTopPanelChange(id: string | null) {\n this.props.dispatch(actions.setSelectedLeftTopPanelId(id));\n }\n\n onSelectedLeftBottomPanelChange(id: string | null) {\n this.props.dispatch(actions.setSelectedLeftBottomPanelId(id));\n }\n\n render() {\n return (\n <PanelContainer\n position=\"left\"\n undockedMode={this.props.panelContainerUndockedMode}\n layout={this.props.leftPanelContainerLayout}\n onLayoutChange={this.onLeftPanelContainerLayoutChange}\n selectedTopPanelId={this.props.selectedLeftTopPanelId}\n selectedBottomPanelId={this.props.selectedLeftBottomPanelId}\n onSelectedTopPanelChange={this.onSelectedLeftTopPanelChange}\n onSelectedBottomPanelChange={this.onSelectedLeftBottomPanelChange}\n >\n <Panel id=\"dataSources\" position=\"top\" icon=\"database\" title=\"Data Sources\"\n body={<DataSourcesPanel/>}/>\n <Panel id=\"operations\" position=\"bottom\" icon=\"function\" title=\"Operations\"\n body={<OperationsPanel/>}/>\n </PanelContainer>\n );\n }\n}\n\nconst LeftPanel = connect(mapStateToPropsLeft)(_LeftPanel);\n\ninterface IRightPanelProps {\n panelContainerUndockedMode: boolean;\n rightPanelContainerLayout: PanelContainerLayout;\n selectedRightTopPanelId?: string;\n selectedRightBottomPanelId?: string;\n}\n\nfunction mapStateToPropsRight(state: State): IRightPanelProps {\n return {\n panelContainerUndockedMode: selectors.panelContainerUndockedModeSelector(state),\n rightPanelContainerLayout: selectors.rightPanelContainerLayoutSelector(state),\n selectedRightTopPanelId: selectors.selectedRightTopPanelIdSelector(state),\n selectedRightBottomPanelId: selectors.selectedRightBottomPanelIdSelector(state),\n };\n}\n\nclass _RightPanel extends React.PureComponent<IRightPanelProps & IDispatch, null> {\n\n constructor(props: IRightPanelProps & IDispatch) {\n super(props);\n this.onRightPanelContainerLayoutChange = this.onRightPanelContainerLayoutChange.bind(this);\n this.onSelectedRightTopPanelChange = this.onSelectedRightTopPanelChange.bind(this);\n this.onSelectedRightBottomPanelChange = this.onSelectedRightBottomPanelChange.bind(this);\n }\n\n onRightPanelContainerLayoutChange(layout: PanelContainerLayout) {\n this.props.dispatch(actions.setRightPanelContainerLayout(layout));\n }\n\n onSelectedRightTopPanelChange(id: string | null) {\n this.props.dispatch(actions.setSelectedRightTopPanelId(id));\n }\n\n onSelectedRightBottomPanelChange(id: string | null) {\n this.props.dispatch(actions.setSelectedRightBottomPanelId(id));\n }\n\n render() {\n return (\n <PanelContainer\n position=\"right\"\n undockedMode={this.props.panelContainerUndockedMode}\n layout={this.props.rightPanelContainerLayout}\n onLayoutChange={this.onRightPanelContainerLayoutChange}\n selectedTopPanelId={this.props.selectedRightTopPanelId}\n selectedBottomPanelId={this.props.selectedRightBottomPanelId}\n onSelectedTopPanelChange={this.onSelectedRightTopPanelChange}\n onSelectedBottomPanelChange={this.onSelectedRightBottomPanelChange}\n >\n <Panel id=\"workspace\" position=\"top\" icon=\"flows\" title=\"Workspace\"\n body={<WorkspacePanel/>}/>\n <Panel id=\"layers\" position=\"top\" icon=\"layers\" title=\"Layers\"\n body={<LayersPanel/>}/>\n <Panel id=\"placemarks\" position=\"top\" icon=\"map-marker\" title=\"Places\"\n body={<PlacemarksPanel/>}/>\n <Panel id=\"variables\" position=\"bottom\" icon=\"variable\" title=\"Variables\"\n body={<VariablePanel/>}/>\n <Panel id=\"style\" position=\"bottom\" icon=\"style\" title=\"Styles\"\n body={<StylesPanel/>}/>\n <Panel id=\"view\" position=\"bottom\" icon=\"eye-open\" title=\"View\"\n body={<ViewPanel/>}/>\n <Panel id=\"tasks\" position=\"bottom\" icon=\"play\" title=\"Tasks\"\n body={<TaskPanel/>}/>\n </PanelContainer>\n );\n }\n}\n\nconst RightPanel = connect(mapStateToPropsRight)(_RightPanel);\n\ninterface IViewManagerPanelProps {\n viewLayout: ViewLayoutState;\n views: ViewState<any>[];\n activeView: ViewState<any> | null;\n}\n\nfunction mapStateToPropsView(state: State): IViewManagerPanelProps {\n return {\n viewLayout: selectors.viewLayoutSelector(state),\n views: selectors.viewsSelector(state),\n activeView: selectors.activeViewSelector(state),\n };\n}\n\nclass _CenterPanel extends React.PureComponent<IViewManagerPanelProps & IDispatch, null> {\n static readonly DIV_STYLE: CSSProperties = {flex: 'auto', height: '100%', overflow: 'hidden'};\n\n constructor(props: IViewManagerPanelProps & IDispatch) {\n super(props);\n this.onSelectView = this.onSelectView.bind(this);\n this.onCloseView = this.onCloseView.bind(this);\n this.onCloseAllViews = this.onCloseAllViews.bind(this);\n this.onMoveView = this.onMoveView.bind(this);\n this.onChangeViewSplitPos = this.onChangeViewSplitPos.bind(this);\n this.onSplitViewPanel = this.onSplitViewPanel.bind(this);\n }\n\n onSelectView(viewPath: ViewPath, viewId: string) {\n this.props.dispatch(actions.selectView(viewPath, viewId));\n }\n\n onCloseView(viewPath: ViewPath, viewId: string) {\n this.props.dispatch(actions.closeView(viewPath, viewId));\n }\n\n onCloseAllViews(viewPath: ViewPath) {\n this.props.dispatch(actions.closeAllViews(viewPath));\n }\n\n onMoveView(sourceViewId: string, placement: 'before' | 'after', targetViewId: string) {\n this.props.dispatch(actions.moveView(sourceViewId, placement, targetViewId));\n }\n\n onSplitViewPanel(viewPath: ViewPath, dir: SplitDir, pos: number) {\n this.props.dispatch(actions.splitViewPanel(viewPath, dir, pos));\n }\n\n onChangeViewSplitPos(viewPath: ViewPath, delta: number) {\n this.props.dispatch(actions.changeViewSplitPos(viewPath, delta));\n }\n\n render() {\n return (\n <div style={_CenterPanel.DIV_STYLE}>\n <ViewManager\n viewRenderMap={VIEW_TYPE_RENDERERS}\n viewLayout={this.props.viewLayout}\n views={this.props.views}\n activeView={this.props.activeView}\n noViewsDescription=\"You can create new views from the VIEW panel.\"\n noViewsVisual=\"eye-open\"\n onSelectView={this.onSelectView}\n onCloseView={this.onCloseView}\n onCloseAllViews={this.onCloseAllViews}\n onMoveView={this.onMoveView}\n onChangeViewSplitPos={this.onChangeViewSplitPos}\n onSplitViewPanel={this.onSplitViewPanel}\n />\n </div>\n );\n }\n}\n\nconst CenterPanel = connect(mapStateToPropsView)(_CenterPanel);\n\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { MatomoProvider, createInstance } from '@datapunt/matomo-tracker-react';\nimport MatomoTracker from '@datapunt/matomo-tracker-js';\n\nimport { State } from '../state';\nimport AppMainPage from './AppMainPage';\n\n\ninterface IAppMainPageWrapperProps {\n trackingConsentObtained: boolean;\n}\n\n// noinspection JSUnusedLocalSymbols\nfunction mapStateToProps(state: State): IAppMainPageWrapperProps {\n return {\n trackingConsentObtained: state.session.trackingConsentObtained,\n };\n}\n\nconst AppMainPageWrapper: React.FC<IAppMainPageWrapperProps> = (\n {\n trackingConsentObtained,\n }\n) => {\n\n const [matomoInstance, setMatomoInstance] = React.useState<MatomoTracker | null>(null);\n\n React.useEffect(() => {\n if (matomoInstance === null) {\n const instance = createInstance(\n {\n urlBase: 'https://matomo-ext.esa.int/',\n siteId: 8,\n // userId: userId, // optional, default value: `undefined`.\n // trackerUrl: 'https://LINK.TO.DOMAIN/tracking.php', // optional, default value: `${urlBase}matomo.php`\n // srcUrl: 'https://LINK.TO.DOMAIN/tracking.js', // optional, default value: `${urlBase}matomo.js`\n disabled: !trackingConsentObtained, // optional, false by default. Makes all tracking calls no-ops if set to true.\n heartBeat: { // optional, enabled by default\n active: true, // optional, default value: true\n seconds: 10 // optional, default value: `15\n },\n linkTracking: false, // optional, default value: true\n configurations: { // optional, default value: {}\n // any valid matomo configuration, all below are optional\n disableCookies: !trackingConsentObtained,\n setSecureCookie: true,\n setRequestMethod: 'POST'\n }\n }\n );\n setMatomoInstance(instance);\n }\n }, [trackingConsentObtained, matomoInstance]);\n\n return (\n <MatomoProvider value={matomoInstance}>\n <AppMainPage/>\n </MatomoProvider>\n );\n};\n\nexport default connect(mapStateToProps)(AppMainPageWrapper);\n","import { main } from './renderer/main';\n\nimport 'normalize.css/normalize.css';\nimport '@blueprintjs/core/lib/css/blueprint.css';\nimport '@blueprintjs/table/lib/css/table.css';\nimport '@blueprintjs/datetime/lib/css/blueprint-datetime.css';\nimport '@blueprintjs/icons/lib/css/blueprint-icons.css';\nimport '@blueprintjs/select/lib/css/blueprint-select.css';\nimport './renderer/resources/fonts/stylesheet.css';\nimport './index.css';\n\ndeclare global {\n // noinspection JSUnusedGlobalSymbols\n interface Window {\n CESIUM_BASE_URL?: string;\n }\n}\n\nwindow.CESIUM_BASE_URL = './cesium';\n\nmain();\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Provider as StoreProvider } from 'react-redux';\nimport { applyMiddleware, createStore, Middleware, Store } from 'redux';\nimport { createLogger } from 'redux-logger';\nimport thunkMiddleware from 'redux-thunk';\n\nimport * as actions from './actions'\nimport { stateReducer } from './reducers';\nimport { State } from './state';\nimport AppMainPageWrapper from './containers/AppMainPageWrapper';\nimport { connectWebAPIService } from './actions';\nimport { DEFAULT_SERVICE_URL } from './initial-state';\n\n\nfunction getServiceUrl() {\n let serviceUrl: string = DEFAULT_SERVICE_URL;\n const search = new URLSearchParams(window.location.search);\n if (search.has('serviceUrl')) {\n serviceUrl = search.get('serviceUrl');\n } else {\n const origin = window.location.origin;\n const path = window.location.pathname;\n if (path.endsWith('/app')) {\n serviceUrl = origin + path.substring(0, path.length - 4);\n } else if (path.endsWith('/app/')) {\n serviceUrl = origin + path.substring(0, path.length - 5);\n }\n }\n return serviceUrl;\n}\n\nexport function main() {\n const middlewares: Middleware[] = [thunkMiddleware];\n\n if (process.env.NODE_ENV === 'development') {\n const nonLoggedActionTypes = new Set([\n // Too much noise:\n actions.SET_GLOBE_MOUSE_POSITION,\n actions.SET_GLOBE_VIEW_POSITION,\n actions.SET_GLOBE_VIEW_POSITION,\n actions.UPDATE_MOUSE_IDLE_STATE,\n actions.UPDATE_SESSION_STATE,\n ]);\n const loggerOptions = {\n level: 'info',\n collapsed: true,\n diff: true,\n predicate: (getState, action) => !nonLoggedActionTypes.has(action.type)\n };\n middlewares.push(createLogger(loggerOptions));\n }\n\n const middleware = applyMiddleware(...middlewares);\n const store = createStore(stateReducer, middleware) as Store<State>;\n store.dispatch(connectWebAPIService(getServiceUrl()) as any);\n\n ReactDOM.render(\n (\n <StoreProvider store={store}>\n <AppMainPageWrapper/>\n </StoreProvider>\n ),\n document.getElementById('root')\n );\n}\n","import { FieldValue } from '../../components/field/Field';\n\n\nexport interface InputAssignment {\n constantValue: FieldValue<any> | any;\n resourceName: string;\n isValueUsed: boolean;\n}\n\nexport type InputAssignments = { [inputName: string]: InputAssignment };\nexport type InputAssignmentMap = { [dialogId: string]: InputAssignments };\n\nexport function isInputAssigned(inputAssignments: InputAssignments, inputName: string): boolean {\n return !!inputAssignments[inputName];\n}\n\nexport function assignConstantValueInput(inputAssignments: InputAssignments, inputName: string, constantValue: any): InputAssignments {\n return {...inputAssignments, [inputName]: {isValueUsed: true, constantValue, resourceName: null}};\n}\n\nexport function assignResourceNameInput(inputAssignments: InputAssignments, inputName: string, resourceName: string): InputAssignments {\n return {...inputAssignments, [inputName]: {isValueUsed: false, constantValue: null, resourceName}};\n}\n\n","import * as Cesium from 'cesium';\nimport copyToClipboard from 'copy-to-clipboard';\nimport * as d3 from 'd3-fetch';\nimport { DirectGeometryObject } from 'geojson';\nimport * as redux from 'redux';\n\nimport * as assert from '../common/assert';\nimport { isAssignableFrom, VAR_NAME_LIKE_TYPE, VAR_NAMES_LIKE_TYPE } from '../common/cate-types';\nimport { SimpleStyle } from '../common/geojson-simple-style';\nimport { updateObject } from '../common/objutil';\nimport { isDefined, isNumber } from '../common/types';\nimport { getEntityByEntityId } from './components/cesium/cesium-util';\nimport { GeometryToolType } from './components/cesium/geometry-tool';\nimport desktopActions from './components/desktop/actions';\nimport { FileNode, getFileNode } from './components/desktop/fs/FileNode';\nimport {\n MessageBoxOptions,\n MessageBoxResult,\n OpenDialogOptions,\n OpenDialogResult,\n SaveDialogOptions,\n SaveDialogResult\n} from './components/desktop/types';\nimport { PanelContainerLayout } from './components/PanelContainer';\nimport { SplitDir } from './components/Splitter';\nimport { ViewPath, ViewState } from './components/ViewState';\nimport { DELETE_WORKSPACE_DIALOG_ID, OPEN_WORKSPACE_DIALOG_ID } from './containers/ChooseWorkspaceDialog';\nimport {\n assignConstantValueInput,\n assignResourceNameInput,\n InputAssignments,\n isInputAssigned\n} from './containers/editor/value-editor-assign';\nimport { FILE_UPLOAD_DIALOG_ID } from './containers/FileUploadDialog';\nimport { reloadEntityWithOriginalGeometry } from './containers/globe-view-layers';\nimport { requireElectron } from './electron';\nimport * as selectors from './selectors';\nimport {\n BackendConfigState,\n ColorMapCategoryState,\n ControlState,\n DatasetDescriptor,\n DataSourceState,\n DataStoreState,\n GeographicPosition,\n HubStatus,\n ImageStatisticsState,\n LayerState,\n MessageState,\n OperationKWArgs,\n OperationState,\n Placemark,\n ResourceState,\n SavedLayers,\n SessionState,\n SplitMode,\n State,\n StyleContext,\n TaskState,\n VariableLayerBase,\n VariableState,\n WebAPIAutoStopInfo,\n WebAPIServiceInfo,\n WebAPIStatus,\n WorkspaceState,\n WorldViewMode\n} from './state';\nimport {\n AUTO_LAYER_ID,\n findDataSource,\n findResourceByName,\n genSimpleId,\n getCsvUrl,\n getFeatureUrl,\n getHtmlUrl,\n getLockForGetWorkspaceVariableStatistics,\n getLockForLoadDataSources,\n getNonSpatialIndexers,\n getWorldViewVectorLayerForEntity,\n isAnimationResource,\n isFigureResource,\n MY_PLACES_LAYER_ID,\n newVariableLayer,\n PLACEMARK_ID_PREFIX\n} from './state-util';\nimport { showToast } from './toast';\nimport {\n ERROR_CODE_CANCELLED,\n ERROR_CODE_INVALID_PARAMS,\n JobFailure,\n JobProgress,\n JobProgressHandler,\n JobPromise,\n JobStatusEnum,\n newWebAPIClient,\n WebAPIClient\n} from './webapi';\nimport { ServiceInfoAPI } from './webapi/apis/ServiceInfoAPI';\nimport { HttpError } from './webapi/HttpError';\n\n\nconst electron = requireElectron();\n\n/**\n * The fundamental Action type as it is used here.\n * All actions must have a \"type\" and a \"payload\" property.\n * Basic structure (i.e. the \"type\" property) is prescribed by \"redux\" module.\n */\nexport interface Action extends redux.Action {\n type: string;\n payload?: any;\n}\n\n/**\n * Signature of the Action dispatcher as used here.\n * Basic call interface is prescribed by \"redux\" module.\n */\nexport type Dispatch = (action: Action | ThunkAction) => void;\n\n/**\n * Signature of a function that returns the current application state object.\n * Call interface is prescribed by \"redux\" module.\n */\nexport type GetState = () => State;\n\n/**\n * Signature of a \"thunk\" action function as used here.\n * A thunk is piece of code that is executed later.\n * Basic call interface is prescribed by \"redux-thunk\" module.\n */\nexport type ThunkAction = (dispatch: Dispatch, getState: GetState) => any;\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Application-level actions\n\nexport const UPDATE_INITIAL_STATE = 'UPDATE_INITIAL_STATE';\nexport const SET_WEBAPI_STATUS = 'SET_WEBAPI_STATUS';\nexport const SET_WEBAPI_AUTO_STOP_INFO = 'SET_WEBAPI_AUTO_STOP_INFO';\nexport const SET_WEBAPI_CLIENT = 'SET_WEBAPI_CLIENT';\nexport const SET_WEBAPI_SERVICE_URL = 'SET_WEBAPI_SERVICE_URL';\nexport const SET_WEBAPI_SERVICE_INFO = 'SET_WEBAPI_SERVICE_INFO';\nexport const UPDATE_HUB_STATUS = 'UPDATE_HUB_STATUS';\nexport const UPDATE_DIALOG_STATE = 'UPDATE_DIALOG_STATE';\nexport const UPDATE_TASK_STATE = 'UPDATE_TASK_STATE';\nexport const REMOVE_TASK_STATE = 'REMOVE_TASK_STATE';\nexport const UPDATE_CONTROL_STATE = 'UPDATE_CONTROL_STATE';\nexport const UPDATE_SESSION_STATE = 'UPDATE_SESSION_STATE';\nexport const INVOKE_CTX_OPERATION = 'INVOKE_CTX_OPERATION';\nexport const SET_USER_PROFILE = 'SET_USER_PROFILE';\n\n\nexport function setWebAPIStatus(webAPIStatus: WebAPIStatus): Action {\n return {type: SET_WEBAPI_STATUS, payload: {webAPIStatus}};\n}\n\nexport function setWebAPIAutoStopInfo(webAPIAutoStopInfo: WebAPIAutoStopInfo): Action {\n return {type: SET_WEBAPI_AUTO_STOP_INFO, payload: {webAPIAutoStopInfo}};\n}\n\nexport function setWebAPIClient(webAPIClient: WebAPIClient): Action {\n return {type: SET_WEBAPI_CLIENT, payload: {webAPIClient}};\n}\n\nfunction setWebAPIServiceURL(webAPIServiceURL: string): Action {\n return {type: SET_WEBAPI_SERVICE_URL, payload: {webAPIServiceURL}};\n}\n\nexport function setWebAPIServiceInfo(webAPIServiceInfo: WebAPIServiceInfo): Action {\n return {type: SET_WEBAPI_SERVICE_INFO, payload: {webAPIServiceInfo}};\n}\n\nexport function connectWebAPIService(webAPIServiceURL: string): ThunkAction {\n return async (dispatch: Dispatch, getState: GetState) => {\n console.debug(\"webAPIServiceURL =\", webAPIServiceURL);\n\n dispatch(setWebAPIServiceURL(webAPIServiceURL));\n dispatch(setWebAPIStatus('connecting'));\n\n let serviceInfo: WebAPIServiceInfo;\n try {\n serviceInfo = await new ServiceInfoAPI().getServiceInfo(webAPIServiceURL);\n } catch (error) {\n handleFetchError(error, 'Failed to retrieve service information');\n dispatch(setWebAPIStatus('error'));\n return;\n }\n\n // TODO: check if serviceInfo.version is in expected version range (#30), otherwise error\n console.log(`Cate WebAPI server version ${serviceInfo.version}`);\n\n dispatch(setWebAPIServiceInfo(serviceInfo));\n\n const webAPIClient = newWebAPIClient(selectors.apiWebSocketsUrlSelector(getState()));\n\n const formatMessage = (message: string, event: any): string => {\n if (event.message) {\n return `${message} (${event.message})`;\n } else {\n return message;\n }\n };\n\n /**\n * Called to inform backend we are still alive.\n * Hopefully avoids closing WebSocket connection, see issue #150.\n */\n const keepAlive = () => {\n if (webAPIClient.isOpen) {\n webAPIClient\n .call('keep_alive', [])\n .then((result: any) => {\n if (result) {\n const info: WebAPIAutoStopInfo = {\n availableTime: result.available_time,\n inactivityTime: result.inactivity_time,\n remainingTime: result.remaining_time,\n }\n dispatch(setWebAPIAutoStopInfo(info));\n }\n });\n }\n };\n\n let keepAliveTimer = null;\n let keepAliveSeconds = (process.env.NODE_ENV === 'development') ? 1 : 5;\n\n webAPIClient.onOpen = () => {\n dispatch(setWebAPIClient(webAPIClient));\n dispatch(loadBackendConfig());\n dispatch(loadColorMaps());\n dispatch(loadPreferences());\n dispatch(loadOperations());\n keepAliveTimer = setInterval(keepAlive, keepAliveSeconds * 1000);\n };\n\n webAPIClient.onClose = (event: CloseEvent) => {\n if (keepAliveTimer !== null) {\n clearInterval(keepAliveTimer);\n }\n const webAPIStatus = getState().communication.webAPIStatus;\n if (webAPIStatus === 'shuttingDown' || webAPIStatus === 'loggingOut') {\n // When we are logging off, the webAPIClient is expected to close.\n return;\n }\n // When we end up here, the connection closed unintentionally.\n console.error('webAPIClient.onClose:', event);\n const closeDetails = `reason=${event.reason}, code=${event.code}, clean=${event.wasClean}`;\n showToast(\n {\n type: 'notification',\n text: formatMessage(`Connection to Cate service closed: ${closeDetails}`, event)\n },\n 120 * 1000\n );\n dispatch(setWebAPIStatus('closed'));\n };\n\n webAPIClient.onError = (event: ErrorEvent) => {\n console.error('webAPIClient.onError:', event);\n dispatch(setWebAPIStatus('error'));\n showToast(\n {\n type: 'error',\n text: formatMessage('Error connecting to Cate service', event)\n }\n );\n };\n\n webAPIClient.onWarning = (event: Event) => {\n console.warn('webAPIClient.onWarning:', event);\n showToast(\n {\n type: 'warning',\n text: formatMessage('Warning from Cate service', event)\n }\n );\n };\n };\n}\n\nexport function updateHubStatus(hubStatus: HubStatus): Action {\n return {type: UPDATE_HUB_STATUS, payload: hubStatus};\n}\n\nexport function updateInitialState(initialState: Object): Action {\n return {type: UPDATE_INITIAL_STATE, payload: initialState};\n}\n\nexport function updateDialogState(dialogId: string, ...dialogState: any): Action {\n return {type: UPDATE_DIALOG_STATE, payload: {dialogId, dialogState: Object.assign({}, ...dialogState)}};\n}\n\nexport function showDialog(dialogId: string, dialogState?: any): Action {\n return updateDialogState(dialogId, dialogState, {isOpen: true});\n}\n\nexport function hideDialog(dialogId: string, dialogState?: any): Action {\n return updateDialogState(dialogId, dialogState, {isOpen: false});\n}\n\nexport function updateTaskState(jobId: number, taskState: TaskState): Action {\n return {type: UPDATE_TASK_STATE, payload: {jobId, taskState}};\n}\n\nexport function removeTaskState(jobId: number): Action {\n return {type: REMOVE_TASK_STATE, payload: {jobId}};\n}\n\nexport function setControlProperty(propertyName: keyof ControlState, value: any): Action {\n return updateControlState({[propertyName]: value});\n}\n\nexport function invokeCtxOperation(operation: OperationState, inputAssignments: InputAssignments): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n\n const resource = selectors.selectedResourceSelector(getState());\n if (resource) {\n for (let input of operation.inputs) {\n if (!isInputAssigned(inputAssignments, input.name)\n && isAssignableFrom(input.dataType, resource.dataType)) {\n inputAssignments = assignResourceNameInput(inputAssignments, input.name, resource.name);\n break;\n }\n }\n }\n\n const variable = selectors.selectedVariableSelector(getState());\n if (variable) {\n for (let input of operation.inputs) {\n if (!isInputAssigned(inputAssignments, input.name)\n && (input.dataType === VAR_NAME_LIKE_TYPE || input.dataType === VAR_NAMES_LIKE_TYPE)) {\n inputAssignments = assignConstantValueInput(inputAssignments, input.name, variable.name);\n break;\n }\n }\n }\n\n dispatch(invokeCtxOperationImpl(operation.name, inputAssignments));\n };\n}\n\nexport function invokeCtxOperationImpl(selectedCtxOperationName: string, inputAssignments: InputAssignments): Action {\n return {type: INVOKE_CTX_OPERATION, payload: {selectedCtxOperationName, inputAssignments}};\n}\n\nexport function updateControlState(controlState: Partial<ControlState>): Action {\n return {type: UPDATE_CONTROL_STATE, payload: controlState};\n}\n\nexport function loadPreferences(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n return selectors.remoteStorageAPISelector(getState()).loadPreferences();\n }\n\n function action(session: Partial<SessionState>) {\n dispatch(updateSessionState(session));\n dispatch(loadDataStores());\n dispatch(loadInitialWorkspace(\n getState().session.reopenLastWorkspace,\n getState().session.lastWorkspacePath));\n }\n\n function planB(jobFailure: JobFailure) {\n dispatch(showMessageBox({\n type: 'error',\n title: 'Loading Preferences',\n message: 'Failed to load preferences.',\n detail: jobFailure.message\n }));\n }\n\n callAPI({\n title: `Loading Preferences`,\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n\nexport function savePreferences(postAction?: Action | ThunkAction): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n dispatch(updatePreferences(getState().session, postAction))\n }\n}\n\nexport function updatePreferences(session: Partial<SessionState>,\n postAction?: Action | ThunkAction): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n return selectors.remoteStorageAPISelector(getState()).updatePreferences(session);\n }\n\n function action() {\n if (postAction) {\n dispatch(postAction);\n }\n }\n\n function planB(jobFailure: JobFailure) {\n dispatch(showMessageBox({\n type: 'error',\n title: 'Update Preferences',\n message: 'Failed to update preferences.',\n detail: jobFailure.message\n }));\n if (postAction) {\n dispatch(postAction);\n }\n }\n\n callAPI({\n title: `Update Preferences`,\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n\nexport function setSessionProperty(propertyName: keyof SessionState, value: any): Action {\n return updateSessionState({[propertyName]: value});\n}\n\nexport function updateSessionState(sessionState: Partial<SessionState>): Action {\n return {type: UPDATE_SESSION_STATE, payload: sessionState};\n}\n\nexport function loadBackendConfig(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n // Get state from the Python back-end\n return selectors.backendConfigAPISelector(getState()).getBackendConfig();\n }\n\n function action(backendConfig: BackendConfigState) {\n dispatch(updateBackendConfig(backendConfig));\n }\n\n callAPI({title: 'Load configuration', dispatch, call, action});\n };\n}\n\nexport function updateBackendConfig(backendConfig: BackendConfigState): Action {\n return updateSessionState({backendConfig});\n}\n\nexport function storeBackendConfig(backendConfig: BackendConfigState): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n // Store state changes to the Python back-end\n return selectors.backendConfigAPISelector(getState()).setBackendConfig(backendConfig);\n }\n\n callAPI({title: 'Store configuration', dispatch, call});\n };\n}\n\nexport function cancelJob(jobId: number): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const webAPIClient = selectors.webAPIClientSelector(getState());\n webAPIClient.cancel(jobId);\n }\n}\n\nfunction jobSubmitted(jobId: number, jobTitle: string, requestLock?: string): Action {\n return updateTaskState(jobId, {status: JobStatusEnum.SUBMITTED, title: jobTitle, requestLock: requestLock});\n}\n\nfunction jobProgress(progress: JobProgress): Action {\n return updateTaskState(progress.id, {status: JobStatusEnum.IN_PROGRESS, progress});\n}\n\nfunction jobDone(jobId: number): Action {\n return updateTaskState(jobId, {status: JobStatusEnum.DONE});\n}\n\nfunction jobFailed(jobId: number,\n jobTitle: string,\n failure: JobFailure,\n dispatch: (action: Action) => void,\n notificationDisabled: boolean): void {\n const status = failure.code === ERROR_CODE_CANCELLED ? JobStatusEnum.CANCELLED : JobStatusEnum.FAILED;\n let type, text, action;\n if (status === JobStatusEnum.CANCELLED) {\n type = 'notification';\n text = `Cancelled: ${jobTitle}`;\n } else {\n type = 'error';\n text = failure.message || `Failed: ${jobTitle}`;\n action = {\n text: 'Details',\n onClick: () => {\n dispatch(showJobFailureDetails(jobTitle, failure));\n }\n };\n }\n dispatch(updateTaskState(jobId, {status, failure}));\n if (!notificationDisabled) {\n if (failure.code === ERROR_CODE_INVALID_PARAMS) {\n dispatch(showJobFailureDetails(jobTitle, failure));\n } else {\n showToast({type, text, action} as MessageState);\n }\n }\n}\n\nexport function showJobFailureDetails(jobTitle: string, jobFailure: JobFailure): Action {\n return showDialog('jobFailureDialog', {jobTitle, jobFailure});\n}\n\nexport type JobPromiseFactory<T> = (jobProgressHandler: JobProgressHandler) => JobPromise<T>;\nexport type JobPromiseAction<T> = (jobResult?: T) => void;\nexport type JobPromisePlanB = (jobFailure: JobFailure) => void;\n\ninterface CallAPIOptions<T> {\n /** The actual API call. */\n call: JobPromiseFactory<T>;\n /** A human-readable title for the job that is being created. */\n title: string;\n /** Redux' dispatch() function. */\n dispatch: (action: Action) => void;\n /** The action to be performed when the API call succeeds. */\n action?: JobPromiseAction<T>;\n /** A lock to prevent multiple invocations. */\n requestLock?: string;\n /** The action to be performed when the API call fails. */\n planB?: JobPromisePlanB;\n /** If true, no notifications about job status will be delivered, except errors. */\n disableNotifications?: boolean;\n /** If true, a notification is shown when done even when no start notification was shown (due to startToastDelay). */\n requireDoneNotification?: boolean;\n /** Delay in milliseconds before a toast is shown. */\n startToastDelay?: number;\n}\n\n/**\n * Call some (remote) API asynchronously.\n *\n * @param options Options that control the API call.\n */\nexport function callAPI<T>(options: CallAPIOptions<T>): void {\n const {\n call,\n title,\n dispatch,\n action,\n requestLock,\n planB,\n disableNotifications = false,\n requireDoneNotification = false,\n startToastDelay = 500,\n } = options;\n\n const onProgress = (progress: JobProgress) => {\n if (!disableNotifications) {\n dispatch(jobProgress(progress));\n }\n };\n const jobPromise = call(onProgress);\n\n let startToastShown = false;\n let startToastTimeoutHandler: any;\n if (!disableNotifications) {\n startToastTimeoutHandler = setTimeout(() => {\n showToast({type: 'notification', text: 'Started: ' + title});\n startToastShown = true;\n }, startToastDelay);\n dispatch(jobSubmitted(jobPromise.getJobId(), title, requestLock));\n }\n\n const onDone = (jobResult: T) => {\n if (!disableNotifications) {\n clearTimeout(startToastTimeoutHandler);\n if (startToastShown || requireDoneNotification) {\n showToast({type: 'success', text: 'Done: ' + title});\n }\n dispatch(jobDone(jobPromise.getJobId()));\n }\n if (action) {\n action(jobResult);\n }\n };\n const onFailure = (jobFailure: JobFailure) => {\n if (!disableNotifications) {\n if (!startToastShown) {\n clearTimeout(startToastTimeoutHandler);\n }\n }\n // Always show errors in TASKS panel\n jobFailed(jobPromise.getJobId(), title, jobFailure, dispatch, disableNotifications);\n if (planB) {\n planB(jobFailure);\n }\n };\n\n jobPromise.then(onDone, onFailure);\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Globe State\n\nexport const SET_GLOBE_MOUSE_POSITION = 'SET_GLOBE_MOUSE_POSITION';\nexport const SET_GLOBE_VIEW_POSITION = 'SET_GLOBE_VIEW_POSITION';\n\nexport function setGlobeMousePosition(position: GeographicPosition): Action {\n return {type: SET_GLOBE_MOUSE_POSITION, payload: {position}};\n}\n\n\nfunction setGlobeViewPositionImpl(position: GeographicPosition | null,\n positionData: { [varName: string]: number } | null): Action {\n return {type: SET_GLOBE_VIEW_POSITION, payload: {position, positionData}};\n}\n\nexport function setGlobeViewPosition(position: GeographicPosition): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n if (position) {\n // TODO: using selectedRightBottomPanelID is no good indicator for checking VARIABLES panel visibility.\n const selectedRightBottomPanelID = selectors.selectedRightBottomPanelIdSelector(getState());\n if (selectedRightBottomPanelID === 'variables') {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n if (!baseDir) {\n // Workspace not yet ready, that's ok.\n return;\n }\n const resource = selectors.selectedResourceSelector(getState());\n const layer = selectors.selectedVariableImageLayerSelector(getState());\n if (layer && resource) {\n const indexers = getNonSpatialIndexers(resource, layer);\n\n const call = () => {\n return selectors.datasetAPISelector(getState()).extractPixelValues(baseDir,\n resource.name,\n [position.longitude, position.latitude],\n indexers);\n };\n\n const action = (positionData: { [varName: string]: number }) => {\n dispatch(setGlobeViewPositionImpl(position, positionData));\n };\n\n callAPI({title: 'Load cell values', dispatch, call, action, disableNotifications: true});\n return;\n }\n }\n } else {\n dispatch(setGlobeViewPositionImpl(null, null));\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// File-system actions\n\nexport const UPDATE_FS_ROOT_NODE = 'UPDATE_FS_ROOT_NODE';\n\nfunction updateFsRootNode(path: string, updatedFileNode: FileNode): Action {\n return {type: UPDATE_FS_ROOT_NODE, payload: {path, updatedFileNode}};\n}\n\nexport function updateFileNode(path: string, force: boolean): ThunkAction {\n const pathComponents = path.split('/');\n\n return (dispatch: Dispatch, getState: GetState) => {\n const api = selectors.fileSystemAPISelector(getState());\n if (api === null) {\n console.error('fileSystemAPI not ready');\n return;\n }\n // Get all the subPaths of path that must be updated:\n const subPathsToBeUpdated: string[] = [];\n pathComponents.forEach((name, depth) => {\n const subPath = pathComponents.slice(0, depth + 1).join('/');\n if (subPathsToBeUpdated.length === 0) {\n const subNode = getFileNode(getState().data.fsRootNode, subPath);\n if (!subNode) {\n subPathsToBeUpdated.push('');\n subPathsToBeUpdated.push(subPath);\n } else if (!subNode.status || force) {\n subPathsToBeUpdated.push(subPath);\n }\n } else {\n // Also add all sub-paths\n subPathsToBeUpdated.push(subPath);\n }\n });\n dispatch(updateSubPathFileNode(subPathsToBeUpdated, force));\n }\n}\n\nfunction updateSubPathFileNode(subPaths: string[], force: boolean): ThunkAction {\n\n return (dispatch: Dispatch, getState: GetState) => {\n if (subPaths.length === 0) {\n return;\n }\n\n const api = selectors.fileSystemAPISelector(getState());\n if (api === null) {\n console.error('fileSystemAPI not ready');\n return;\n }\n\n const subPath = subPaths[0];\n const subNode = getFileNode(getState().data.fsRootNode, subPath);\n if (!subNode) {\n console.error(`sub-path not found in file system root node: \"${subPath}\"`);\n return;\n }\n\n if (subNode.status && !force) {\n return;\n }\n\n dispatch(updateFsRootNode(subPath, {...subNode, status: 'updating'}));\n\n const call = () => {\n return api.updateFileNode(subPath);\n };\n\n const action = (updatedFileNode: FileNode) => {\n dispatch(updateFsRootNode(subPath, updatedFileNode));\n if (subPaths.length > 1) {\n dispatch(updateSubPathFileNode(subPaths.slice(1), force));\n }\n };\n\n const planB = (jobFailure: JobFailure) => {\n dispatch(showMessageBox({\n type: 'error',\n title: 'File System Update',\n message: 'Failed updating file in file system.',\n detail: jobFailure.message\n }));\n };\n\n callAPI({\n title: `Updating Files`,\n dispatch, call, action, planB, requireDoneNotification: false\n });\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// (User) Placemark actions\n\nexport const ACTIVATE_NEW_PLACEMARK_TOOL = 'ACTIVATE_NEW_PLACEMARK_TOOL';\nexport const ADD_PLACEMARK = 'ADD_PLACEMARK';\nexport const REMOVE_PLACEMARK = 'REMOVE_PLACEMARK';\nexport const UPDATE_PLACEMARK_GEOMETRY = 'UPDATE_PLACEMARK_GEOMETRY';\nexport const UPDATE_PLACEMARK_PROPERTIES = 'UPDATE_PLACEMARK_PROPERTIES';\nexport const UPDATE_PLACEMARK_STYLE = 'UPDATE_PLACEMARK_STYLE';\n\nexport function activateNewPlacemarkTool(newPlacemarkToolType: GeometryToolType) {\n return {type: ACTIVATE_NEW_PLACEMARK_TOOL, payload: {newPlacemarkToolType}};\n}\n\nexport function addPlacemark(placemark: Placemark): Action {\n return {type: ADD_PLACEMARK, payload: {placemark}};\n}\n\nexport function addPointPlacemark(longitude: number, latitude: number, properties: any): Action {\n const placemark = {\n id: genSimpleId(PLACEMARK_ID_PREFIX),\n type: 'Feature',\n geometry: {\n type: 'Point',\n coordinates: [longitude, latitude]\n },\n properties,\n };\n return addPlacemark(placemark as any);\n}\n\nexport function removePlacemark(placemarkId: string): Action {\n return {type: REMOVE_PLACEMARK, payload: {placemarkId}};\n}\n\nexport function updatePlacemarkGeometry(placemarkId: string, geometry: DirectGeometryObject | any): Action {\n return {type: UPDATE_PLACEMARK_GEOMETRY, payload: {placemarkId, geometry}};\n}\n\nexport function updatePlacemarkProperties(placemarkId: string, properties: any): Action {\n return {type: UPDATE_PLACEMARK_PROPERTIES, payload: {placemarkId, properties}};\n}\n\nexport function updatePlacemarkStyle(placemarkId: string, style: SimpleStyle): Action {\n return {type: UPDATE_PLACEMARK_STYLE, payload: {placemarkId, style}};\n}\n\nexport function locatePlacemark(placemarkId: string): ThunkAction {\n return async (dispatch: Dispatch, getState: GetState) => {\n let viewer = selectors.selectedWorldViewViewerSelector(getState());\n if (viewer) {\n let selectedEntity = getEntityByEntityId(viewer, placemarkId);\n if (selectedEntity) {\n let headingPitchRange;\n if (selectedEntity.position) {\n let heading = 0, pitch = -3.14159 / 2, range = 2500000;\n headingPitchRange = new Cesium.HeadingPitchRange(heading, pitch, range);\n }\n await viewer.zoomTo(selectedEntity, headingPitchRange);\n }\n }\n };\n}\n\nexport function setSelectedPlacemarkId(selectedPlacemarkId: string | null): Action {\n return updateSessionState({selectedPlacemarkId});\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Data stores / data sources actions\n\nexport const UPDATE_DATA_STORES = 'UPDATE_DATA_STORES';\nexport const UPDATE_DATA_SOURCES = 'UPDATE_DATA_SOURCES';\nexport const UPDATE_DATA_SOURCE_META_INFO = 'UPDATE_DATA_SOURCE_META_INFO';\n\n/**\n * Asynchronously load the available Cate data stores.\n * Called only a single time on app initialisation.\n *\n * @returns a Redux thunk action\n */\nexport function loadDataStores(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n return selectors.datasetAPISelector(getState()).getDataStores();\n }\n\n function action(dataStores: DataStoreState[]) {\n const offlineMode = selectors.offlineModeSelector(getState());\n if (offlineMode) {\n dataStores = dataStores.filter(ds => ds.isLocal);\n }\n dispatch(updateDataStores(dataStores));\n\n if (dataStores && dataStores.length) {\n let selectedDataStoreId = selectors.selectedDataStoreIdSelector(getState());\n const selectedDataStore = dataStores.find(dataStore => dataStore.id === selectedDataStoreId);\n selectedDataStoreId = selectedDataStore ? selectedDataStore.id : dataStores[0].id;\n dispatch(setSelectedDataStoreId(selectedDataStoreId));\n }\n }\n\n callAPI({title: 'Loading data stores', dispatch, call, action});\n }\n}\n\n\nexport function updateDataStores(dataStores: Array<DataStoreState>): Action {\n return {type: UPDATE_DATA_STORES, payload: {dataStores}};\n}\n\n/**\n * Asynchronously load data sources for given data store ID.\n *\n * @param dataStoreId\n * @param setSelection\n * @returns a Redux thunk action\n */\nexport function loadDataSources(dataStoreId: string, setSelection: boolean): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const requestLock = getLockForLoadDataSources(dataStoreId);\n if (selectors.activeRequestLocksSelector(getState()).has(requestLock)) {\n return;\n }\n\n function call(onProgress) {\n return selectors.datasetAPISelector(getState()).getDataSources(dataStoreId, onProgress);\n }\n\n function action(dataSources: DataSourceState[]) {\n dispatch(updateDataSources(dataStoreId, dataSources));\n if (setSelection) {\n let selectedDataSourceId = selectors.selectedDataSourceIdSelector(getState());\n if (dataSources && dataSources.length) {\n const selectedDataSource = dataSources.find(dataSource => dataSource.id === selectedDataSourceId);\n selectedDataSourceId = selectedDataSource ? selectedDataSource.id : selectedDataSourceId;\n }\n dispatch(setSelectedDataSourceId(selectedDataSourceId));\n }\n }\n\n const dataStore = getState().data.dataStores.find(dataStore => dataStore.id === dataStoreId);\n callAPI({\n title: `Load data sources for store \"${dataStore ? dataStore.id : '?'}\"`,\n dispatch,\n call,\n action,\n requestLock\n });\n }\n}\n\nexport function updateDataSources(dataStoreId: string, dataSources): Action {\n return {type: UPDATE_DATA_SOURCES, payload: {dataStoreId, dataSources}};\n}\n\nexport function setSelectedDataStoreId(selectedDataStoreId: string | null, force: boolean = false): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n dispatch(setSelectedDataStoreIdImpl(selectedDataStoreId));\n if (selectedDataStoreId !== null) {\n const dataStore = getState().data.dataStores.find(dataStore => dataStore.id === selectedDataStoreId);\n if (force || !dataStore.dataSources) {\n dispatch(loadDataSources(selectedDataStoreId, true));\n }\n }\n }\n}\n\nexport function refreshLocalDataStore(): ThunkAction {\n return (dispatch: Dispatch) => {\n dispatch(setSelectedDataStoreId(\"local\", true));\n }\n}\n\nexport function setSelectedDataStoreIdImpl(selectedDataStoreId: string | null) {\n return updateSessionState({selectedDataStoreId});\n}\n\nexport function setSelectedDataSourceId(selectedDataSourceId: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n dispatch(updateSessionState({selectedDataSourceId}));\n const dataStoreId = getState().session.selectedDataStoreId;\n if (dataStoreId && selectedDataSourceId) {\n dispatch(loadDataSourceMetaInfo(dataStoreId, selectedDataSourceId));\n }\n }\n}\n\nexport function setDataSourceFilterExpr(dataSourceFilterExpr: string) {\n return updateSessionState({dataSourceFilterExpr});\n}\n\nexport function loadDataSourceMetaInfo(dataStoreId: string, dataSourceId: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const dataStores = getState().data.dataStores;\n if (!dataStores) {\n return;\n }\n const dataSource = findDataSource(dataStores, dataStoreId, dataSourceId);\n if (!dataSource || dataSource.metaInfoStatus !== 'init') {\n return;\n }\n\n dispatch(updateDataSourceMetaInfo(dataStoreId, dataSourceId, undefined, 'loading'));\n\n function call(onProgress) {\n return selectors.datasetAPISelector(getState()).getDataSourceMetaInfo(dataStoreId, dataSourceId, onProgress);\n }\n\n function action(metaInfo: DatasetDescriptor) {\n dispatch(updateDataSourceMetaInfo(dataStoreId, dataSourceId, metaInfo, 'ok'));\n }\n\n function planB() {\n dispatch(updateDataSourceMetaInfo(dataStoreId, dataSourceId, undefined, 'error'));\n }\n\n callAPI({title: `Loading metadata for ${dataSourceId}`, dispatch, call, action, planB});\n };\n}\n\nexport function updateDataSourceMetaInfo(dataStoreId: string,\n dataSourceId: string,\n metaInfo: DatasetDescriptor | undefined,\n metaInfoStatus: 'loading' | 'ok' | 'error' = 'ok'): Action {\n return {type: UPDATE_DATA_SOURCE_META_INFO, payload: {dataStoreId, dataSourceId, metaInfo, metaInfoStatus}};\n}\n\nexport function openDataset(dataStoreId: string, dataSourceId: string, args: any, updateLocalDataSources: boolean): ThunkAction {\n return (dispatch: Dispatch) => {\n\n const opName = 'open_dataset';\n const opArgs = {\n ds_id: dataSourceId,\n data_store_id: dataStoreId,\n ...args\n };\n\n // Wrap the opArgs into a new OpArgs object where each value is indicated by a \"value\" key.\n // The reason is that an opArg could also refer to a resource, the \"source\" key would be used instead.\n //\n const wrappedOpArgs = {};\n Object.keys(opArgs).forEach(name => {\n wrappedOpArgs[name] = {value: opArgs[name]};\n });\n let postAction;\n if (updateLocalDataSources) {\n postAction = (dispatch: Dispatch) => {\n dispatch(loadDataSources('local', false));\n }\n }\n\n dispatch(setWorkspaceResource(opName,\n wrappedOpArgs,\n null,\n false,\n `Opening data source \"${dataSourceId}\"`, postAction));\n }\n}\n\nexport function addLocalDataset(dataSourceId: string, filePathPattern: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call(onProgress) {\n return selectors.datasetAPISelector(getState()).addLocalDataSource(dataSourceId, filePathPattern, onProgress);\n }\n\n function action(dataSources: DataSourceState[]) {\n dispatch(updateDataSources('local', dataSources));\n }\n\n callAPI({\n title: `Add file data source \"${dataSourceId}\"`,\n dispatch, call, action, requireDoneNotification: true\n });\n }\n}\n\nexport function removeLocalDataset(dataSourceId: string, removeFiles: boolean): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call(onProgress) {\n return selectors.datasetAPISelector(getState()).removeLocalDataSource(dataSourceId, removeFiles, onProgress);\n }\n\n function action(dataSources: DataSourceState[]) {\n dispatch(updateDataSources('local', dataSources));\n }\n\n callAPI({\n title: `Remove copy of file data source \"${dataSourceId}\"`,\n dispatch, call, action, requireDoneNotification: true\n });\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Operation actions\n\nexport const UPDATE_OPERATIONS = 'UPDATE_OPERATIONS';\n\nexport function loadOperations(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n\n function call() {\n return selectors.operationAPISelector(getState()).getOperations();\n }\n\n function action(operations: OperationState[]) {\n dispatch(updateOperations(operations));\n }\n\n callAPI({title: 'Load operations', dispatch, call, action});\n };\n}\n\nexport function updateOperations(operations): Action {\n return {type: UPDATE_OPERATIONS, payload: {operations}};\n}\n\nexport function setSelectedOperationName(selectedOperationName: string | null) {\n return updateSessionState({selectedOperationName});\n}\n\nexport function setOperationFilterTags(operationFilterTags: string[]) {\n return updateSessionState({operationFilterTags});\n}\n\nexport function setOperationFilterExpr(operationFilterExpr: string) {\n return updateSessionState({operationFilterExpr});\n}\n\nexport function showOperationStepDialog(dialogId: string) {\n return showDialog(dialogId);\n}\n\nexport function hideOperationStepDialog(dialogId: string, inputAssignments?): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n if (inputAssignments) {\n const dialogState = getState().control.dialogs[dialogId] as any;\n inputAssignments = {...dialogState.inputAssignments, ...inputAssignments};\n }\n dispatch(hideDialog(dialogId, {inputAssignments}));\n };\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Workspace actions\n\nexport const SET_CURRENT_WORKSPACE = 'SET_CURRENT_WORKSPACE';\nexport const UPDATE_WORKSPACE_NAMES = 'UPDATE_WORKSPACE_NAMES';\nexport const RENAME_RESOURCE = 'RENAME_RESOURCE';\nexport const SHOW_FIGURE_VIEW = 'SHOW_FIGURE_VIEW';\nexport const SHOW_ANIMATION_VIEW = 'SHOW_ANIMATION_VIEW';\nexport const SHOW_TABLE_VIEW = 'SHOW_TABLE_VIEW';\n\nexport function updateWorkspaceNames(workspaceNames: string[]): Action {\n return {type: UPDATE_WORKSPACE_NAMES, payload: {workspaceNames}};\n}\n\n/**\n * Asynchronously load the initial workspace.\n * Called only a single time on app initialisation.\n *\n * @returns a Redux thunk action\n */\nexport function loadInitialWorkspace(reopenLastWorkspace?: boolean, lastWorkspacePath?: string): ThunkAction {\n return (dispatch: Dispatch) => {\n if (reopenLastWorkspace && lastWorkspacePath) {\n dispatch(openWorkspace(lastWorkspacePath));\n } else {\n dispatch(newWorkspace(null));\n }\n }\n}\n\n/**\n * Asynchronously create a new workspace.\n *\n * @param workspacePath workspace path, if null, a new scratch workspace will be created\n * @returns a Redux thunk action\n */\nexport function newWorkspace(workspacePath: string | null): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n return selectors.workspaceAPISelector(getState()).newWorkspace(workspacePath);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n dispatch(saveWorkspace());\n if (workspace && workspace.workflow.steps.length > 0) {\n dispatch(setSelectedWorkspaceResourceName(workspace.workflow.steps[0].id));\n } else {\n dispatch(setSelectedWorkspaceResourceName(null));\n }\n dispatch(savePreferences());\n }\n\n function planB(jobFailure: JobFailure) {\n dispatch(showMessageBox({\n type: 'error',\n title: 'New Workspace',\n message: 'Failed to create new workspace.',\n detail: jobFailure.message\n }));\n }\n\n callAPI({\n title: 'New workspace' + (workspacePath ? ` \"${workspacePath}\"` : ''),\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously open a workspace.\n *\n * @param workspacePath workspace path\n * @returns a Redux thunk action\n */\nexport function openWorkspace(workspacePath?: string | null): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call(onProgress) {\n return selectors.workspaceAPISelector(getState()).openWorkspace(workspacePath, onProgress);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n if (workspace && workspace.workflow.steps.length > 0) {\n dispatch(setSelectedWorkspaceResourceName(workspace.workflow.steps[0].id));\n } else {\n dispatch(setSelectedWorkspaceResourceName(null));\n }\n dispatch(savePreferences());\n }\n\n function planB() {\n let workspace = getState().data.workspace;\n if (!workspace) {\n dispatch(newWorkspace(null));\n }\n }\n\n callAPI({\n title: `Open workspace \"${workspacePath}\"`,\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously close the current workspace.\n *\n * @returns a Redux thunk action\n */\nexport function closeWorkspace(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call() {\n return selectors.workspaceAPISelector(getState()).closeWorkspace(baseDir);\n }\n\n function action() {\n dispatch(newWorkspace(null));\n }\n\n callAPI({\n title: 'Close workspace',\n dispatch, call, action, requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously close the current workspace.\n *\n * @returns a Redux thunk action\n */\nexport function saveWorkspace(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n let workspace = getState().data.workspace;\n assert.ok(workspace);\n\n if (workspace.isScratch) {\n return saveWorkspaceAs;\n }\n\n const baseDir = workspace.baseDir;\n\n function call(onProgress) {\n return selectors.workspaceAPISelector(getState()).saveWorkspace(baseDir, onProgress);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n dispatch(savePreferences());\n }\n\n function planB(jobFailure: JobFailure) {\n dispatch(showMessageBox({\n type: 'error',\n title: 'Save Workspace',\n message: 'Failed to save workspace.',\n detail: jobFailure.message\n }));\n }\n\n callAPI({\n title: 'Save workspace',\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously save the current workspace using a new name.\n *\n * @returns a Redux thunk action\n */\nexport function saveWorkspaceAs(workspacePath: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call(onProgress) {\n return selectors.workspaceAPISelector(getState()).saveWorkspaceAs(baseDir, workspacePath, onProgress);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n dispatch(savePreferences());\n }\n\n function planB(jobFailure: JobFailure) {\n dispatch(showMessageBox({\n type: 'error',\n title: 'Save Workspace As',\n message: 'Failed to save workspace.',\n detail: jobFailure.message\n }));\n }\n\n callAPI({\n title: `Save workspace as \"${workspacePath}\"`,\n dispatch, call, action, planB, requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously clean the current workspace.\n *\n * @returns a Redux thunk action\n */\nexport function cleanWorkspace(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n let workspace = getState().data.workspace;\n assert.ok(workspace);\n const baseDir = workspace.baseDir;\n\n function call() {\n return selectors.workspaceAPISelector(getState()).cleanWorkspace(baseDir);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n }\n\n callAPI({\n title: `Clean workspace \"${baseDir}\"`,\n dispatch, call, action, requireDoneNotification: true\n });\n }\n}\n\n\n/**\n * Asynchronously delete the given resource.\n *\n * @returns a Redux thunk action\n */\nexport function deleteResource(resName: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n let workspace = getState().data.workspace;\n assert.ok(workspace);\n const baseDir = workspace.baseDir;\n\n function call() {\n return selectors.workspaceAPISelector(getState()).deleteWorkspaceResource(baseDir, resName);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n }\n\n callAPI({\n title: `Delete step/resource \"${resName}\"`, dispatch, call, action,\n requireDoneNotification: true\n });\n }\n}\n\n/**\n * Asynchronously delete the workspace with the given name.\n *\n * @returns a Redux thunk action\n */\nexport function deleteWorkspace(workspaceName: string, deleteEntireWorkspace = true): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n\n function call() {\n return selectors.workspaceAPISelector(getState()).deleteWorkspace(workspaceName, deleteEntireWorkspace);\n }\n\n callAPI({\n title: `Delete step/workspace \"${workspaceName}\"`, dispatch, call,\n requireDoneNotification: true\n });\n }\n}\n\n\n/**\n * Bring up the \"New Workspace\" dialog.\n *\n * @returns a Redux action\n */\nexport function newWorkspaceInteractive() {\n return showDialog('newWorkspaceDialog');\n}\n\nfunction openRemoteWorkspace(dispatch: (action: (Action | ThunkAction)) => void,\n getState: () => State) {\n let jobPromise = selectors.workspaceAPISelector(getState()).listWorkspaces();\n jobPromise.then(workspaceNames => {\n dispatch(updateWorkspaceNames(workspaceNames));\n dispatch(showDialog(OPEN_WORKSPACE_DIALOG_ID));\n })\n}\n\nfunction deleteRemoteWorkspace(dispatch: (action: (Action | ThunkAction)) => void,\n getState: () => State) {\n let jobPromise = selectors.workspaceAPISelector(getState()).listWorkspaces();\n jobPromise.then(workspaceNames => {\n dispatch(updateWorkspaceNames(workspaceNames));\n dispatch(showDialog(DELETE_WORKSPACE_DIALOG_ID));\n })\n}\n\nfunction openLocalWorkspace(dispatch: (action: (Action | ThunkAction)) => void,\n getState: () => State) {\n const handleClose = (workspacePath: string | null) => {\n if (workspacePath) {\n const workspace = getState().data.workspace;\n let ok = true;\n if (workspace) {\n if (workspace.baseDir === workspacePath) {\n // showMessageBox({\n // title: 'Open Workspace',\n // message: 'Workspace is already open.'\n // }, MESSAGE_BOX_NO_REPLY);\n showToast({\n type: 'warning',\n text: 'Workspace is already open.',\n });\n return;\n }\n ok = maybeSaveCurrentWorkspace(dispatch, getState,\n 'Open Workspace',\n 'Would you like to save the current workspace before opening the new one?',\n 'Press \"Cancel\" to cancel opening a new workspace.'\n );\n }\n if (ok) {\n dispatch(openWorkspace(workspacePath));\n }\n }\n }\n dispatch(showSingleFileOpenDialog({\n title: 'Open Workspace - Select Directory',\n buttonLabel: 'Open',\n properties: ['openDirectory'],\n }, handleClose) as any);\n}\n\n/**\n * Let user select a workspace, then ask whether to save the existing workspace, then open new one.\n *\n * @returns a Redux thunk action\n */\nexport function openWorkspaceInteractive(): ThunkAction {\n\n return (dispatch: Dispatch, getState: GetState) => {\n if (selectors.isLocalFSAccessAllowedSelector(getState())) {\n openLocalWorkspace(dispatch, getState);\n } else {\n openRemoteWorkspace(dispatch, getState);\n }\n };\n}\n\n/**\n * Let user select a workspace, then ask whether to delete the selected workspace.\n *\n * @returns a Redux thunk action\n */\nexport function deleteWorkspaceInteractive(): ThunkAction {\n\n return (dispatch: Dispatch, getState: GetState) => {\n if (!selectors.isLocalFSAccessAllowedSelector(getState())) {\n deleteRemoteWorkspace(dispatch, getState);\n }\n };\n}\n\n/**\n * Ask user to whether to save workspace, then close it.\n *\n * @returns a Redux thunk action\n */\nexport function closeWorkspaceInteractive(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const ok = maybeSaveCurrentWorkspace(dispatch, getState,\n 'Close Workspace',\n 'Would you like to save the current workspace before closing it?',\n 'Press \"Cancel\" to cancel closing the workspace.'\n );\n if (ok) {\n dispatch(closeWorkspace())\n }\n };\n}\n\n/**\n * Ask user whether to clean workspace, then clean it.\n *\n * @returns a Redux thunk action\n */\nexport function cleanWorkspaceInteractive(): ThunkAction {\n return (dispatch: Dispatch) => {\n dispatch(showMessageBox({\n type: 'question',\n title: 'Clean Workspace',\n message: 'Do you really want to clean this workspace?',\n detail: 'This will delete all resources and workflow steps.\\nYou will not be able to undo this operation.',\n buttons: ['Yes', 'No'],\n defaultId: 1,\n cancelId: 1,\n }, (answer) => {\n if (answer && answer.buttonIndex === 0) {\n dispatch(cleanWorkspace());\n }\n }));\n };\n}\n\n/**\n * Ask user whether to delete a resource/step, then delete it.\n *\n * @returns a Redux thunk action\n */\nexport function deleteResourceInteractive(resName: string): ThunkAction {\n return (dispatch: Dispatch) => {\n dispatch(showMessageBox({\n type: 'question',\n title: 'Remove Resource and Workflow Step',\n message: `Do you really want to delete resource and step \"${resName}\"?`,\n detail: 'This will also delete the workflow step that created it.\\n' +\n 'You will not be able to undo this operation.',\n buttons: ['Yes', 'No'],\n defaultId: 1,\n cancelId: 1,\n }, answer => {\n if (answer && answer.buttonIndex === 0) {\n dispatch(deleteResource(resName));\n }\n }));\n };\n}\n\n/**\n * If current workspace is scratch workspace, delegate to \"save as\" action otherwise save it.\n *\n * @returns a Redux thunk action\n */\nexport function saveWorkspaceInteractive(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const workspace = getState().data.workspace;\n if (workspace.isScratch) {\n dispatch(saveWorkspaceAsInteractive());\n } else {\n dispatch(saveWorkspace())\n }\n };\n}\n\n/**\n * Bring up the \"Save Workspace As\" dialog.\n *\n * @returns a Redux action\n */\nexport function saveWorkspaceAsInteractive() {\n return showDialog('saveWorkspaceAsDialog');\n}\n\n/**\n * Save workspace after asking user whether to do so.\n *\n * @returns false, if action was cancelled, otherwise true\n */\nfunction maybeSaveCurrentWorkspace(dispatch, getState: GetState, title: string, message: string, detail?: string): boolean {\n const workspace = getState().data.workspace;\n if (workspace) {\n const maySave = workspace.workflow.steps.length && (workspace.isModified || !workspace.isSaved);\n if (maySave) {\n dispatch(showMessageBox({\n type: 'question',\n title,\n message,\n detail,\n buttons: ['Yes', 'No', 'Cancel'],\n defaultId: 0,\n cancelId: 2,\n }, answer => {\n\n if (answer) {\n if (answer.buttonIndex === 0) {\n if (workspace.isScratch) {\n dispatch(saveWorkspaceAsInteractive());\n } else {\n dispatch(saveWorkspace());\n }\n } else if (answer.buttonIndex === 2) {\n return false;\n }\n } else {\n return false;\n }\n }));\n }\n }\n return true;\n}\n\nexport function setCurrentWorkspace(workspace: WorkspaceState): ThunkAction {\n return (dispatch: Dispatch, getState) => {\n dispatch(setCurrentWorkspaceImpl(workspace));\n const lastWorkspacePath = workspace.baseDir;\n if (getState().session.lastWorkspacePath !== lastWorkspacePath) {\n if (workspace.isScratch) {\n dispatch(updateSessionState({'lastWorkspacePath': null}));\n } else {\n dispatch(updateSessionState({lastWorkspacePath}));\n }\n }\n }\n}\n\nfunction setCurrentWorkspaceImpl(workspace: WorkspaceState): Action {\n return {type: SET_CURRENT_WORKSPACE, payload: {workspace}};\n}\n\nexport function setSelectedWorkspaceResourceName(selectedWorkspaceResourceName: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n dispatch(setSelectedWorkspaceResourceNameImpl(selectedWorkspaceResourceName));\n if (selectedWorkspaceResourceName && getState().data.workspace) {\n const resources: Array<ResourceState> = getState().data.workspace.resources;\n if (resources) {\n const resource = resources.find(res => res.name === selectedWorkspaceResourceName);\n if (resource && resource.variables && resource.variables.length) {\n const variable = resource.variables.find(variable => !!variable.isDefault);\n dispatch(setSelectedVariable(resource,\n variable || resource.variables[0],\n selectors.savedLayersSelector(getState())));\n }\n }\n }\n }\n}\n\nfunction setSelectedWorkspaceResourceNameImpl(selectedWorkspaceResourceName: string): Action {\n return updateControlState({selectedWorkspaceResourceName});\n}\n\nexport function setSelectedWorkflowStepId(selectedWorkflowStepId: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n if (selectedWorkflowStepId) {\n const resourceMap = selectors.resourceMapSelector(getState());\n const resource = resourceMap[selectedWorkflowStepId];\n if (resource) {\n dispatch(setSelectedWorkspaceResourceName(resource.name));\n }\n }\n dispatch(setSelectedWorkflowStepIdImpl(selectedWorkflowStepId));\n };\n}\n\nfunction setSelectedWorkflowStepIdImpl(selectedWorkflowStepId: string): Action {\n return updateControlState({selectedWorkflowStepId});\n}\n\n\nexport function dropWorkspaceResource(opName: string,\n file: File,\n opArgs: OperationKWArgs,\n resName: string | null,\n overwrite: boolean,\n title: string,\n postAction?: Action | ThunkAction): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const state = getState();\n const dialogState = selectors.dialogStateSelector(FILE_UPLOAD_DIALOG_ID)(state);\n const webAPIServiceURL = state.communication.webAPIServiceURL;\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n\n // Do not fire action when the FileUploadDialog is open as the dialog also uses a drop like event.\n if (!dialogState.isOpen) {\n selectors.fileAPISelector(state).uploadFiles(baseDir, file, webAPIServiceURL)\n .then((res) => {\n showToast({type: res.status, text: 'Upload finished: ' + res.message});\n dispatch(setWorkspaceResource(opName, opArgs, resName, overwrite, title, postAction));\n })\n .catch((error) => {\n showToast({type: 'error', text: error.toString()});\n console.error(error);\n });\n }\n }\n}\n\nexport function setWorkspaceResource(opName: string,\n opArgs: OperationKWArgs,\n resName: string | null,\n overwrite: boolean,\n title: string,\n postAction?: Action | ThunkAction): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call(onProgress) {\n return selectors.workspaceAPISelector(getState()).setWorkspaceResource(baseDir,\n opName,\n opArgs,\n resName,\n overwrite,\n onProgress);\n }\n\n function action(result: [WorkspaceState, string]) {\n const workspace = result[0];\n const resName = result[1];\n dispatch(setCurrentWorkspace(workspace));\n\n const resource = findResourceByName(selectors.resourcesSelector(getState()), resName);\n const isFigure = isFigureResource(resource);\n const isAnimation = isAnimationResource(resource);\n if (!isFigure && !isAnimation) {\n dispatch(setSelectedWorkspaceResourceName(resName));\n }\n if ((isFigure || isAnimation) && getState().session.autoShowNewFigures) {\n if (isFigure) {\n dispatch(showFigureView(resource, selectors.activeViewIdSelector(getState())))\n } else if (isAnimation) {\n dispatch(showAnimationView(resource, selectors.activeViewIdSelector(getState())))\n }\n }\n if (postAction) {\n dispatch(postAction);\n }\n }\n\n callAPI({dispatch, title, call, action, requireDoneNotification: true});\n }\n}\n\nexport function setWorkspaceResourcePersistence(resName: string, persistent: boolean): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call() {\n return selectors.workspaceAPISelector(getState()).setWorkspaceResourcePersistence(baseDir, resName, persistent);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n }\n\n callAPI({title: 'Change resource persistence', dispatch, call, action});\n }\n}\n\nexport function renameWorkspaceResource(resName: string, newResName: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call() {\n return selectors.workspaceAPISelector(getState()).renameWorkspaceResource(baseDir, resName, newResName);\n }\n\n function action(workspace: WorkspaceState) {\n dispatch(setCurrentWorkspace(workspace));\n dispatch(renameWorkspaceResourceImpl(resName, newResName));\n }\n\n callAPI({title: 'Rename resource', dispatch, call, action});\n };\n}\n\nexport function renameWorkspaceResourceImpl(resName: string, newResName: string): Action {\n return {type: RENAME_RESOURCE, payload: {resName, newResName}};\n}\n\nexport function getWorkspaceVariableStatistics(resName: string,\n varName: string,\n varIndex: number[],\n action: (statistics: ImageStatisticsState) => any): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const baseDir = selectors.workspaceBaseDirSelector(getState());\n assert.ok(baseDir);\n\n function call(onProgress) {\n return selectors.workspaceAPISelector(getState()).getWorkspaceVariableStatistics(baseDir,\n resName,\n varName,\n varIndex,\n onProgress);\n }\n\n function action2(statistics: ImageStatisticsState) {\n dispatch(action(statistics));\n }\n\n const title = `Computing statistics for variable \"${varName}\"`;\n const requestLock = getLockForGetWorkspaceVariableStatistics(resName, varName, varIndex);\n callAPI({title, dispatch, call, action: action2, requestLock});\n }\n}\n\nexport function showTableView(resName: string, varName: string | null, placeAfterViewId: string | null): Action {\n return {type: SHOW_TABLE_VIEW, payload: {resName, varName, placeAfterViewId}};\n}\n\nexport function showFigureView(resource: ResourceState, placeAfterViewId: string | null): Action {\n return {type: SHOW_FIGURE_VIEW, payload: {resource, placeAfterViewId}};\n}\n\nexport function showAnimationView(resource: ResourceState, placeAfterViewId: string | null): Action {\n return {type: SHOW_ANIMATION_VIEW, payload: {resource, placeAfterViewId}};\n}\n\n// noinspection JSUnusedLocalSymbols\nexport function saveFigureImageAs(imageUrl: string, figureId: number): ThunkAction {\n return () => {\n if (!electron) {\n return;\n }\n // console.log(\"saveFigureImageAs: \", imageUrl, figureId);\n electron.shell.openExternal(imageUrl + '/png');\n\n // showFileSaveDialog({\n // title: \"Save Figure As\",\n // filters: [\n // {name: 'Images', extensions: [\"png\", \"jpeg\", \"tif\"]},\n // {name: 'Other', extensions: [\"eps\", \"pdf\", \"ps\", \"raw\", \"svg\"]},\n // ]\n // }, (filePath: string) => {\n // console.log(\"saveFigureImageAs:\", filePath);\n // });\n };\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Variable actions\n\nexport const SET_SHOW_SELECTED_VARIABLE_LAYER = 'SET_SHOW_SELECTED_VARIABLE_LAYER';\nexport const SET_SELECTED_VARIABLE = 'SET_SELECTED_VARIABLE';\n\nexport function setShowSelectedVariableLayer(showSelectedVariableLayer: boolean): Action {\n return {type: SET_SHOW_SELECTED_VARIABLE_LAYER, payload: {showSelectedVariableLayer}};\n}\n\nexport function setSelectedVariable(resource: ResourceState,\n selectedVariable: VariableState | null,\n savedLayers?: SavedLayers): Action {\n return {type: SET_SELECTED_VARIABLE, payload: {resource, selectedVariable, savedLayers}};\n}\n\nexport function addVariableLayer(viewId: string,\n resource: ResourceState,\n variable: VariableState,\n selectLayer: boolean,\n savedLayers?: { [name: string]: LayerState }) {\n let layer = newVariableLayer(resource, variable, savedLayers);\n return addLayer(viewId, layer, selectLayer);\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// AppMainPage actions\n\nexport function setLeftPanelContainerLayout(leftPanelContainerLayout: PanelContainerLayout) {\n return updateSessionState({leftPanelContainerLayout});\n}\n\nexport function setRightPanelContainerLayout(rightPanelContainerLayout: PanelContainerLayout) {\n return updateSessionState({rightPanelContainerLayout});\n}\n\nexport function setSelectedLeftTopPanelId(selectedLeftTopPanelId: string | null) {\n return updateSessionState({selectedLeftTopPanelId});\n}\n\nexport function setSelectedLeftBottomPanelId(selectedLeftBottomPanelId: string | null) {\n return updateSessionState({selectedLeftBottomPanelId});\n}\n\nexport function setSelectedRightTopPanelId(selectedRightTopPanelId: string | null) {\n return updateSessionState({selectedRightTopPanelId});\n}\n\nexport function setSelectedRightBottomPanelId(selectedRightBottomPanelId: string | null) {\n return updateSessionState({selectedRightBottomPanelId});\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ViewManager actions\n\nexport const ADD_WORLD_VIEW = 'ADD_WORLD_VIEW';\nexport const ADD_TABLE_VIEW = 'ADD_TABLE_VIEW';\nexport const SELECT_VIEW = 'SELECT_VIEW';\nexport const CLOSE_VIEW = 'CLOSE_VIEW';\nexport const CLOSE_ALL_VIEWS = 'CLOSE_ALL_VIEWS';\nexport const SPLIT_VIEW_PANEL = 'SPLIT_VIEW_PANEL';\nexport const CHANGE_VIEW_SPLIT_POS = 'CHANGE_VIEW_SPLIT_POS';\nexport const MOVE_VIEW = 'MOVE_VIEW';\n\n\nexport function addWorldView(placeAfterViewId: string | null, baseMapId: string): Action {\n return {type: ADD_WORLD_VIEW, payload: {placeAfterViewId, baseMapId}};\n}\n\nexport function selectView(viewPath: ViewPath, viewId: string): Action {\n return {type: SELECT_VIEW, payload: {viewPath, viewId}};\n}\n\nexport function closeView(viewPath: ViewPath, viewId: string): Action {\n return {type: CLOSE_VIEW, payload: {viewPath, viewId}};\n}\n\nexport function closeAllViews(viewPath: ViewPath): Action {\n return {type: CLOSE_ALL_VIEWS, payload: {viewPath}};\n}\n\nexport function splitViewPanel(viewPath: ViewPath, dir: SplitDir, pos: number): Action {\n return {type: SPLIT_VIEW_PANEL, payload: {viewPath, dir, pos}};\n}\n\nexport function changeViewSplitPos(viewPath: ViewPath, delta: number): Action {\n return {type: CHANGE_VIEW_SPLIT_POS, payload: {viewPath, delta}};\n}\n\nexport function moveView(sourceViewId: string, placement: 'before' | 'after', targetViewId: string): Action {\n return {type: MOVE_VIEW, payload: {sourceViewId, placement, targetViewId}};\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// World view actions\n\nexport const SET_VIEW_MODE = 'SET_VIEW_MODE';\nexport const SET_PROJECTION_CODE = 'SET_PROJECTION_CODE';\nexport const SET_LAYER_SPLIT_MODE = 'SET_LAYER_SPLIT_MODE';\nexport const SET_LAYER_SPLIT_POSITION = 'SET_LAYER_SPLIT_POSITION';\nexport const SET_SELECTED_ENTITY_ID = 'SET_SELECTED_ENTITY_ID';\nexport const INC_ENTITY_UPDATE_COUNT = 'INC_ENTITY_UPDATE_COUNT';\nexport const UPDATE_ENTITY_STYLE = 'UPDATE_ENTITY_STYLE';\nexport const UPDATE_MOUSE_IDLE_STATE = 'UPDATE_MOUSE_IDLE_STATE';\n\nexport function setViewMode(viewId: string, viewMode: WorldViewMode): Action {\n return {type: SET_VIEW_MODE, payload: {viewId, viewMode}};\n}\n\nexport function setLayerSplitMode(viewId: string, layerId: string, splitMode: SplitMode): Action {\n return {type: SET_LAYER_SPLIT_MODE, payload: {viewId, layerId, splitMode}};\n}\n\nexport function setLayerSplitPosition(viewId: string, layerSplitPosition: number): Action {\n return {type: SET_LAYER_SPLIT_POSITION, payload: {viewId, layerSplitPosition}};\n}\n\nexport function notifySelectedEntityChange(viewId: string, layer: LayerState | null, selectedEntity: Cesium.Entity | null): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n\n const selectedEntityId = selectedEntity && selectedEntity.id;\n dispatch(setSelectedEntityId(viewId, isDefined(selectedEntityId) ? selectedEntityId : null));\n\n if (selectedEntity\n && isNumber(selectedEntity['_simp'])\n && isNumber(selectedEntity['_resId'])\n && isNumber(selectedEntity['_idx'])) {\n const isGeometrySimplified = (selectedEntity['_simp'] & 0x01) !== 0;\n if (isGeometrySimplified) {\n const workspace = selectors.workspaceSelector(getState());\n if (workspace) {\n const resId = selectedEntity['_resId'];\n const featureIndex = +selectedEntity['_idx'];\n const baseUrl = selectors.webAPIRestUrlSelector(getState());\n const workspaceId = selectors.workspaceIdSelector(getState());\n const featureUrl = getFeatureUrl(baseUrl, workspaceId, {resId}, featureIndex);\n reloadEntityWithOriginalGeometry(selectedEntity, featureUrl, (layer as any).style);\n }\n }\n }\n }\n}\n\nfunction setSelectedEntityId(viewId: string, selectedEntityId: string | null): Action {\n return {type: SET_SELECTED_ENTITY_ID, payload: {viewId, selectedEntityId}};\n}\n\nexport function updateEntityStyle(view: ViewState<any>, entity: Cesium.Entity, style: SimpleStyle) {\n return (dispatch: Dispatch) => {\n const layer = getWorldViewVectorLayerForEntity(view, entity);\n // We cannot dispatch an action with an entity payload, because action logging will no longer work\n // (probably because Cesium Entities are not plain objects and contain numerous references\n // to other complex Cesium objects).\n // This is why we pass the entity ID as payload.\n // However, entity IDs are only unique within a Cesium Entity DataSource / Cate Vector Layer,\n // therefore must pass the layer ID and the entity ID to identify the entity.\n if (layer) {\n // We will only dispatch actions for entities belong to our own layers.\n if (layer.id === MY_PLACES_LAYER_ID) {\n // If this is the placemarks layer, we store the style change in the placemarks (= feature's)\n // properties: state.session.placemarkCollection.features[entityId].properties = ...style\n dispatch(updatePlacemarkStyle(entity.id, style));\n } else {\n // For all other layer we update the layer's entity styles:\n // properties: state.control.views[viewId].data.layers[layerId].entityStyles[entityId] = style\n dispatch(updateEntityStyleImpl(view.id, layer.id, entity.id, style));\n }\n }\n dispatch(incEntityUpdateCount());\n };\n}\n\nfunction updateEntityStyleImpl(viewId: string, layerId: string, entityId: string, style: SimpleStyle): Action {\n return {type: UPDATE_ENTITY_STYLE, payload: {viewId, layerId, entityId, style}};\n}\n\nfunction incEntityUpdateCount(): Action {\n return {type: INC_ENTITY_UPDATE_COUNT};\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Table view actions\n\nexport const UPDATE_TABLE_VIEW_DATA = 'UPDATE_TABLE_VIEW_DATA';\n\nexport function updateTableViewData(viewId: string,\n resName: string | null,\n varName: string | null,\n dataRows?: any[] | null,\n error?: any,\n isLoading?: boolean): Action {\n dataRows = dataRows || null;\n error = error || null;\n isLoading = isLoading || false;\n return {type: UPDATE_TABLE_VIEW_DATA, payload: {viewId, resName, varName, dataRows, error, isLoading}};\n}\n\nexport function loadTableViewData(viewId: string, resName: string, varName: string | null): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const restUrl = selectors.webAPIRestUrlSelector(getState());\n const workspaceId = selectors.workspaceIdSelector(getState());\n const resource = selectors.resourcesSelector(getState()).find(res => res.name === resName);\n if (resource) {\n const csvUrl = getCsvUrl(restUrl, workspaceId, {resId: resource.id}, varName);\n dispatch(updateTableViewData(viewId, resName, varName, null, null, true));\n d3.csv(csvUrl)\n .then((dataRows: any[]) => {\n dispatch(updateTableViewData(viewId, resName, varName, dataRows, null, false));\n })\n .catch((error: any) => {\n dispatch(updateTableViewData(viewId, resName, varName, null, error, false));\n });\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Animation view actions\n\nexport const UPDATE_ANIMATION_VIEW_DATA = 'UPDATE_ANIMATION_VIEW_DATA';\n\nexport function loadAnimationViewData(viewId: string, resId: number): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const restUrl = selectors.webAPIRestUrlSelector(getState());\n const workspaceId = selectors.workspaceIdSelector(getState());\n const htmlUrl = getHtmlUrl(restUrl, workspaceId, resId);\n\n const xmlHttp = new XMLHttpRequest();\n xmlHttp.onreadystatechange = () => {\n if (xmlHttp.readyState === 4) {\n dispatch(setAnimationResult(viewId, xmlHttp.responseText, xmlHttp.status));\n }\n };\n xmlHttp.open('GET', htmlUrl, true); // true for asynchronous\n xmlHttp.send(null);\n }\n}\n\nfunction setAnimationResult(viewId: string, innerHTML: string, status: number) {\n return {type: UPDATE_ANIMATION_VIEW_DATA, payload: {viewId, innerHTML, status}}\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// Layer actions\n\nexport const SET_SELECTED_LAYER_ID = 'SET_SELECTED_LAYER_ID';\nexport const ADD_LAYER = 'ADD_LAYER';\nexport const REMOVE_LAYER = 'REMOVE_LAYER';\nexport const UPDATE_LAYER = 'UPDATE_LAYER';\nexport const UPDATE_LAYER_STYLE = 'UPDATE_LAYER_STYLE';\nexport const MOVE_LAYER_UP = 'MOVE_LAYER_UP';\nexport const MOVE_LAYER_DOWN = 'MOVE_LAYER_DOWN';\nexport const SAVE_LAYER = 'SAVE_LAYER';\nexport const SET_BASE_MAP_ID = 'SET_BASE_MAP_ID';\n\nexport function setSelectedLayerId(viewId: string, selectedLayerId: string | null): Action {\n return {type: SET_SELECTED_LAYER_ID, payload: {viewId, selectedLayerId}};\n}\n\nexport function addLayer(viewId: string, layer: LayerState, selectLayer: boolean): Action {\n return {type: ADD_LAYER, payload: {viewId, layer, selectLayer}};\n}\n\nexport function removeLayer(viewId: string, id: string): Action {\n return {type: REMOVE_LAYER, payload: {viewId, id}};\n}\n\nexport function moveLayerUp(viewId: string, id: string): Action {\n return {type: MOVE_LAYER_UP, payload: {viewId, id}};\n}\n\nexport function moveLayerDown(viewId: string, id: string): Action {\n return {type: MOVE_LAYER_DOWN, payload: {viewId, id}};\n}\n\nexport function updateLayer(viewId: string, layer: LayerState, ...layerProperties): ThunkAction {\n return (dispatch: Dispatch) => {\n if (layerProperties.length) {\n // layer = {...layer, ...layerProperties};\n layer = updateObject({}, layer, ...layerProperties);\n }\n dispatch(updateLayerImpl(viewId, layer));\n if (layer.id === AUTO_LAYER_ID) {\n const varName = (layer as VariableLayerBase).varName;\n if (varName) {\n dispatch(saveLayer(varName, layer));\n }\n }\n };\n}\n\nfunction updateLayerImpl(viewId: string, layer: LayerState): Action {\n return {type: UPDATE_LAYER, payload: {viewId, layer}};\n}\n\nexport function updateLayerStyle(viewId: string, layerId: string, style: SimpleStyle): Action {\n return {type: UPDATE_LAYER_STYLE, payload: {viewId, layerId, style}};\n}\n\n/**\n * Save layer (in state.session), so it can later be restored.\n *\n * @param key a key\n * @param layer layer data\n * @returns {{type: string, payload: {key: string, layer: LayerState}}}\n */\nexport function saveLayer(key: string, layer: LayerState): Action {\n return {type: SAVE_LAYER, payload: {key, layer}};\n}\n\nexport function setStyleContext(styleContext: StyleContext) {\n return updateSessionState({styleContext});\n}\n\nexport function setBaseMap(viewId: string, baseMapId: string): Action {\n return {type: SET_BASE_MAP_ID, payload: {viewId, baseMapId}};\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// ColorMap actions\n\nexport const UPDATE_COLOR_MAPS = 'UPDATE_COLOR_MAPS';\n\n/**\n * Asynchronously load the initial workspace.\n * Called only a single time on app initialisation.\n *\n * @returns a Redux thunk action\n */\nexport function loadColorMaps(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call() {\n return selectors.colorMapsAPISelector(getState()).getColorMaps();\n }\n\n function action(colorMaps: Array<ColorMapCategoryState>) {\n dispatch(updateColorMaps(colorMaps));\n }\n\n callAPI({title: 'Load color maps', dispatch, call, action});\n }\n}\n\nfunction updateColorMaps(colorMaps: Array<ColorMapCategoryState>): Action {\n return {type: UPDATE_COLOR_MAPS, payload: {colorMaps}};\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// (User) Preferences actions\n\nexport function showPreferencesDialog() {\n return showDialog('preferencesDialog');\n}\n\nexport function hidePreferencesDialog() {\n return hideDialog('preferencesDialog');\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// (User) Preferences actions\n\nexport function showShutdownDialog() {\n return showDialog('shutdownDialog');\n}\n\nexport function hideShutdownDialog() {\n return hideDialog('shutdownDialog');\n}\n\n/////////////////////////////////////////////////////////////////////////////////////\n// EU GDPR actions\n\nexport const OBTAIN_COOKIE_CONSENT = 'OBTAIN_COOKIE_CONSENT';\n\nexport function obtainCookieConsent(trackingConsentObtained: boolean): Action {\n return {type: OBTAIN_COOKIE_CONSENT, payload: {trackingConsentObtained}};\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n// File choosers and message boxes\n\nexport const OPEN_DIRECTORY_SELECT_DIALOG = 'OPEN_DIRECTORY_SELECT_DIALOG';\nexport const CLOSE_DIRECTORY_SELECT_DIALOG = 'CLOSE_DIRECTORY_SELECT_DIALOG';\n\nfunction openDirectorySelectDialog(options: OpenDialogOptions,\n onClose: (result: OpenDialogResult) => any): Action {\n return {type: OPEN_DIRECTORY_SELECT_DIALOG, payload: {options, onClose}};\n}\n\nfunction closeDirectorySelectDialog(result: OpenDialogResult): Action {\n return {type: CLOSE_DIRECTORY_SELECT_DIALOG, payload: {result}};\n}\n\n/**\n * Shows a single-directory select dialog.\n * Similar to \"showFileOpenDialog\" but will always return a single directory path or null.\n *\n * @param openDialogOptions the file-open dialog options, see https://github.com/electron/electron/blob/master/docs/api/dialog.md\n * @param onClose a function which is called with the selected directory path or null if the dialog was canceled\n * @returns a thunk action\n */\nexport function showDirectorySelectDialog(openDialogOptions: OpenDialogOptions,\n onClose: (dirPath: string | null) => void): ThunkAction {\n const propsSet = new Set(openDialogOptions.properties);\n propsSet.delete('openFile');\n propsSet.delete('multiSelections');\n propsSet.add('openDirectory');\n openDialogOptions = {\n ...openDialogOptions,\n title: openDialogOptions.title || 'Select Directory',\n buttonLabel: openDialogOptions.buttonLabel || 'Select',\n properties: Array.from(propsSet)\n };\n return (dispatch: Dispatch) => {\n const handleClose = (result: OpenDialogResult) => {\n dispatch(closeDirectorySelectDialog(result));\n onClose(!result.canceled && result.filePaths && result.filePaths.length > 0 ? result.filePaths[0] : null);\n };\n dispatch(openDirectorySelectDialog(openDialogOptions, handleClose));\n desktopActions.showFileOpenDialog(openDialogOptions, handleClose);\n };\n}\n\nexport const OPEN_FILE_OPEN_DIALOG = 'OPEN_FILE_OPEN_DIALOG';\nexport const CLOSE_FILE_OPEN_DIALOG = 'CLOSE_FILE_OPEN_DIALOG';\n\nfunction openFileOpenDialog(options: OpenDialogOptions,\n onClose: (result: OpenDialogResult) => any): Action {\n return {type: OPEN_FILE_OPEN_DIALOG, payload: {options, onClose}};\n}\n\nfunction closeFileOpenDialog(result: OpenDialogResult): Action {\n return {type: CLOSE_FILE_OPEN_DIALOG, payload: {result}};\n}\n\n\n/**\n * Shows a file open dialog.\n *\n * @param openDialogOptions the file-save dialog options, see https://github.com/electron/electron/blob/master/docs/api/dialog.md\n * @param onClose a function which is called with the open dialog result\n * @returns a thunk action\n */\nexport function showFileOpenDialog(openDialogOptions: OpenDialogOptions,\n onClose: (result: OpenDialogResult) => void): ThunkAction {\n return (dispatch: Dispatch) => {\n const handleClose = (result: OpenDialogResult) => {\n dispatch(closeFileOpenDialog(result));\n onClose(result);\n };\n dispatch(openFileOpenDialog(openDialogOptions, handleClose));\n desktopActions.showFileOpenDialog(openDialogOptions, handleClose);\n };\n}\n\n/**\n * Shows a single-file open dialog.\n * Similar to \"showFileOpenDialog\" but will always return a single path or null.\n *\n * @param openDialogOptions the file-open dialog options, see https://github.com/electron/electron/blob/master/docs/api/dialog.md\n * @param onClose a function which is called with the selected file path or null if the dialog was canceled\n * @returns a thunk action\n */\nexport function showSingleFileOpenDialog(openDialogOptions: OpenDialogOptions,\n onClose: (filePath: string | null) => void): ThunkAction {\n const propsSet = new Set(openDialogOptions.properties);\n propsSet.delete('multiSelections')\n openDialogOptions = {...openDialogOptions, properties: Array.from(propsSet)};\n return showFileOpenDialog(openDialogOptions,\n (result => {\n onClose(!result.canceled && result.filePaths.length > 0 ? result.filePaths[0] : null);\n }));\n}\n\n/**\n * Shows a multi-file open dialog.\n * Similar to \"showFileOpenDialog\" but will always return a single path or null.\n *\n * @param openDialogOptions the file-open dialog options, see https://github.com/electron/electron/blob/master/docs/api/dialog.md\n * @param onClose a function which is called with the selected file paths\n * @returns a thunk action\n */\nexport function showMultiFileOpenDialog(openDialogOptions: OpenDialogOptions,\n onClose: (filePaths: string[]) => any): ThunkAction {\n const propsSet = new Set(openDialogOptions.properties);\n propsSet.add('multiSelections')\n openDialogOptions = {...openDialogOptions, properties: Array.from(propsSet)};\n return showFileOpenDialog(openDialogOptions,\n (result => {\n onClose(!result.canceled ? result.filePaths : []);\n }));\n}\n\nexport const OPEN_FILE_SAVE_DIALOG = 'OPEN_FILE_SAVE_DIALOG';\nexport const CLOSE_FILE_SAVE_DIALOG = 'CLOSE_FILE_SAVE_DIALOG';\n\nfunction openFileSaveDialog(options: SaveDialogOptions,\n onClose: (result: SaveDialogResult) => any): Action {\n return {type: OPEN_FILE_SAVE_DIALOG, payload: {options, onClose}};\n}\n\nfunction closeFileSaveDialog(result: SaveDialogResult): Action {\n return {type: CLOSE_FILE_SAVE_DIALOG, payload: {result}};\n}\n\n/**\n * Shows a file save dialog.\n *\n * @param saveDialogOptions the file-save dialog options, see https://github.com/electron/electron/blob/master/docs/api/dialog.md\n * @param onClose a function which is called with the selected file path\n * @returns a thunk action\n */\nexport function showFileSaveDialog(saveDialogOptions: SaveDialogOptions,\n onClose: (result: SaveDialogResult) => any): ThunkAction {\n return (dispatch: Dispatch) => {\n const handleClose = (result: SaveDialogResult) => {\n dispatch(closeFileSaveDialog(result));\n onClose(result);\n };\n dispatch(openFileSaveDialog(saveDialogOptions, handleClose));\n desktopActions.showFileSaveDialog(saveDialogOptions, handleClose);\n };\n}\n\nexport const OPEN_MESSAGE_BOX = 'OPEN_MESSAGE_BOX';\nexport const CLOSE_MESSAGE_BOX = 'CLOSE_MESSAGE_BOX';\n\n\nfunction openMessageBox(options: MessageBoxOptions,\n onClose: (result: MessageBoxResult | null) => void): Action {\n return {type: OPEN_MESSAGE_BOX, payload: {options, onClose}};\n}\n\nfunction closeMessageBox(result: MessageBoxResult | null): Action {\n return {type: CLOSE_MESSAGE_BOX, payload: {result}};\n}\n\nexport function showMessageBox(messageBoxOptions: MessageBoxOptions,\n onClose?: (result: MessageBoxResult | null) => void): ThunkAction {\n return (dispatch: Dispatch) => {\n const handleClose = (result: MessageBoxResult | null) => {\n dispatch(closeMessageBox(result));\n if (onClose) {\n onClose(result);\n }\n };\n dispatch(openMessageBox(messageBoxOptions, handleClose));\n desktopActions.showMessageBox(messageBoxOptions, handleClose);\n };\n}\n\nexport const OPEN_FILE_BROWSE_DIALOG = 'OPEN_FILE_BROWSE_DIALOG';\nexport const CLOSE_FILE_BROWSE_DIALOG = 'CLOSE_FILE_BROWSE_DIALOG';\n\nfunction openFileBrowseDialog(filePath: string,\n onClose: () => any): Action {\n return {type: OPEN_FILE_BROWSE_DIALOG, payload: {options: {defaultPath: filePath}, onClose}};\n}\n\nfunction closeFileBrowseDialog(): Action {\n return {type: CLOSE_FILE_BROWSE_DIALOG};\n}\n\n/**\n * Show the given file in a file manager. If possible, select the file.\n * @param fullPath\n */\nexport function showItemInFolder(fullPath: string): ThunkAction {\n return (dispatch: Dispatch) => {\n const handleClose = () => {\n dispatch(closeFileBrowseDialog());\n };\n dispatch(openFileBrowseDialog(fullPath, handleClose));\n desktopActions.showItemInFolder(fullPath);\n };\n}\n\n/**\n * Open the given URL in the desktop's default manner.\n *\n * @param url The URL.\n * @returns {boolean}\n */\nexport function openExternal(url: string): boolean {\n if (hasElectron('openExternal')) {\n return electron.shell.openExternal(url);\n }\n return false;\n}\n\n\n/**\n * Copies given text to clipboard.\n * @param text The text to be copied.\n */\nexport function copyTextToClipboard(text: string) {\n if (hasElectron('copyTextToClipboard')) {\n // noinspection JSIgnoredPromiseFromCall\n electron.clipboard.writeText(text);\n } else {\n copyToClipboard(text);\n }\n}\n\n/////////////////////////////////////////////////////////////////////////////////////\n// File upload/download\n\nexport function fileUploadInteractive() {\n return showDialog('fileUploadDialog');\n}\n\nexport function fileDownloadInteractive() {\n return showDialog('fileDownloadDialog');\n}\n\nexport function uploadFiles(dir: string, file: File): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const state = getState();\n const webAPIServiceURL = state.communication.webAPIServiceURL;\n\n selectors.fileAPISelector(state).uploadFiles(dir, file, webAPIServiceURL)\n .then((res) => {\n dispatch(updateFileNode(dir + '/' + file.name, true));\n showToast({type: res.status, text: 'Upload finished: ' + res.message});\n })\n .catch((error) => {\n showToast({type: 'error', text: error.toString()});\n console.error(error);\n });\n }\n}\n\nexport function monitorProcess(processId: string): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n function call(onProgress) {\n return selectors.fileAPISelector(getState()).monitorProcess(processId, onProgress);\n }\n\n function action() {\n console.info('testing');\n }\n\n callAPI({title: 'Monitoring Progress', dispatch, call, action});\n }\n}\n\nexport function downloadFiles(filePaths: string[]): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n const state = getState();\n const webAPIServiceURL = state.communication.webAPIServiceURL;\n const api = selectors.fileAPISelector(state);\n\n api.downloadFiles(filePaths, 'ignore', webAPIServiceURL)\n .then(() => {\n showToast({type: 'success', text: 'Zip ready for download.'});\n })\n .catch((error) => {\n showToast({type: 'error', text: error.toString()});\n console.error(error);\n });\n\n }\n}\n\nfunction hasElectron(functionName: string): boolean {\n if (!electron) {\n console.warn(`${functionName}() cannot be executed, module electron not available`);\n return false;\n } else if (!electron.ipcRenderer) {\n console.warn(`${functionName}() cannot be executed, module electron.ipcRenderer not available`);\n return false;\n }\n return true;\n}\n\nexport function handleFetchError(error: any, message: string) {\n console.info('fetch error: ', message, error);\n let suffix = '';\n if (error instanceof HttpError) {\n if (error.statusText) {\n suffix = ` (HTTP status ${error.status}: ${error.statusText})`;\n } else {\n suffix = ` (HTTP status ${error.status})`;\n }\n } else if (error instanceof TypeError) {\n suffix = ' (wrong URL or no internet)';\n } else if (error instanceof Error && error.message) {\n suffix = ` (${error.message})`;\n }\n showToast({type: 'error', text: message + suffix});\n}\n\n\nlet _handlersInstalled: boolean = false;\n\nexport function installGlobalHandlers(): ThunkAction {\n return (dispatch: Dispatch, getState: GetState) => {\n if (_handlersInstalled) {\n return;\n }\n\n if (electron && electron.ipcRenderer) {\n const ipcRenderer = electron.ipcRenderer;\n\n ipcRenderer.on('update-initial-state', (event, initialState) => {\n dispatch(updateInitialState(initialState));\n });\n\n ipcRenderer.on('new-workspace', () => {\n dispatch(newWorkspaceInteractive() as any);\n });\n\n ipcRenderer.on('open-workspace', () => {\n dispatch(openWorkspaceInteractive() as any);\n });\n\n ipcRenderer.on('close-workspace', () => {\n dispatch(closeWorkspaceInteractive() as any);\n });\n\n ipcRenderer.on('save-workspace', () => {\n dispatch(saveWorkspaceInteractive() as any);\n });\n\n ipcRenderer.on('save-workspace-as', () => {\n dispatch(saveWorkspaceAsInteractive());\n });\n\n ipcRenderer.on('delete-workspace', () => {\n dispatch(deleteWorkspaceInteractive() as any);\n });\n\n ipcRenderer.on('show-preferences-dialog', () => {\n dispatch(showPreferencesDialog());\n });\n\n ipcRenderer.on('logout', () => {\n // dispatch(logout() as any);\n });\n }\n\n document.addEventListener('drop', function (event: any) {\n event.preventDefault();\n event.stopPropagation();\n for (let file of event.dataTransfer.files) {\n readDroppedFile(file, dispatch);\n }\n });\n\n document.addEventListener('dragover', function (event: any) {\n event.preventDefault();\n event.stopPropagation();\n });\n\n window.addEventListener('beforeunload', (event: any) => {\n event.preventDefault();\n const state = getState();\n if (state.communication.webAPIClient) {\n dispatch(savePreferences() as any);\n }\n return null;\n });\n\n _handlersInstalled = true;\n }\n}\n\nfunction readDroppedFile(file: File, dispatch: Dispatch) {\n let opName, opArgs;\n if (file.name.endsWith('.nc')) {\n opName = 'read_netcdf';\n // opArgs = {file: {value: file.path}, normalize: {value: false}}\n } else if (file.name.endsWith('.txt')) {\n opName = 'read_text';\n } else if (file.name.endsWith('.json')) {\n opName = 'read_json';\n } else if (file.name.endsWith('.csv')) {\n opName = 'read_csv';\n } else if (file.name.endsWith('.geojson') || file.name.endsWith('.shp') || file.name.endsWith('.gml')) {\n opName = 'read_geo_data_frame';\n }\n if (!opArgs) {\n opArgs = {file: {value: file.name}};\n }\n if (opName) {\n dispatch(dropWorkspaceResource(opName,\n file,\n opArgs,\n null,\n false,\n `Reading dropped file ${file.name}`) as any);\n } else {\n console.warn('Dropped file of unrecognized type: ', file.name);\n }\n}\n","// Requires preload.js in cate-desktop:\n//\n// import * as electron from 'electron';\n// (window as any).electron = electron;\n//\nconst electron = (window as any).electron || null;\n\nexport default electron;","import copyToClipboard from 'copy-to-clipboard';\nimport {\n DesktopActions,\n MessageBoxOptions,\n MessageBoxResult,\n OpenDialogOptions,\n OpenDialogResult,\n SaveDialogOptions, SaveDialogResult\n} from './types';\nimport electron from './electron';\n\nconst newDesktopActions = (): DesktopActions => {\n\n if (electron) {\n return {\n isNativeUI: true,\n\n showFileOpenDialog: (openDialogOptions: OpenDialogOptions, onClose: (result: OpenDialogResult) => any): void => {\n const actionName = 'show-open-dialog';\n electron.ipcRenderer.send(actionName, openDialogOptions, false);\n electron.ipcRenderer.once(actionName + '-reply', (event, result: OpenDialogResult) => {\n onClose(result);\n });\n },\n\n showFileSaveDialog: (saveDialogOptions: SaveDialogOptions, onClose: (result: SaveDialogResult) => any): void => {\n const actionName = 'show-save-dialog';\n electron.ipcRenderer.send(actionName, saveDialogOptions, false);\n electron.ipcRenderer.once(actionName + '-reply', (event, result: SaveDialogResult) => {\n onClose(result);\n });\n },\n\n showMessageBox: (messageBoxOptions: MessageBoxOptions, onClose: (result: MessageBoxResult | null) => any): void => {\n const actionName = 'show-message-box';\n if (!messageBoxOptions.buttons) {\n messageBoxOptions = {...messageBoxOptions, buttons: ['OK']};\n }\n electron.ipcRenderer.send(actionName, messageBoxOptions, false);\n electron.ipcRenderer.once(actionName + '-reply', (event, buttonIndex: number, checkboxChecked: boolean) => {\n onClose({buttonIndex, checkboxChecked});\n });\n },\n\n showItemInFolder: (fullPath: string): Promise<boolean> => {\n return Promise.resolve(electron.shell.showItemInFolder(fullPath));\n },\n\n openItem: (fullPath: string): Promise<boolean> => {\n return Promise.resolve(electron.shell.openItem(fullPath));\n },\n\n openExternal: (url: string): Promise<boolean> => {\n return Promise.resolve(electron.shell.openExternal(url));\n },\n\n copyTextToClipboard: (text: string): Promise<boolean> => {\n return electron.clipboard.writeText(text);\n },\n }\n } else {\n // noinspection JSUnusedLocalSymbols\n return {\n isNativeUI: false,\n\n showFileOpenDialog: (openDialogOptions: OpenDialogOptions, onClose: (result: OpenDialogResult) => any): void => {\n // UI generated by React component MessageBox\n },\n\n\n showFileSaveDialog: (saveDialogOptions: SaveDialogOptions, onClose: (result: SaveDialogResult) => any): void => {\n // UI generated by React\n },\n\n showMessageBox: (messageBoxOptions: MessageBoxOptions, onClose: (result: MessageBoxResult | null) => any): void => {\n // UI generated by React\n },\n\n showItemInFolder: (fullPath: string): Promise<boolean> => {\n // UI generated by React\n return Promise.resolve(true);\n },\n\n copyTextToClipboard: (text: string): Promise<boolean> => {\n return new Promise((callback: (result: boolean) => any) => {\n copyToClipboard(text, {onCopy: () => callback(true)});\n });\n },\n }\n }\n};\n\nexport default newDesktopActions();","/**\n * Job-related interfaces and type definitions.\n *\n * @author Norman Fomferra\n */\n\n/**\n * A job represents the execution of a remote method.\n */\nexport interface Job {\n getRequest(): JobRequest;\n\n getStatus(): JobStatus;\n\n isCancelled(): boolean;\n\n cancel(): void;\n}\n\n/**\n * A promise representing a remote method call.\n */\nexport interface JobPromise<JobResponse> extends Promise<JobResponse> {\n getJob(): Job;\n\n getJobId(): number;\n}\n\n/**\n * All the possible job statuses.\n */\nexport type JobStatus = 'NEW' | 'SUBMITTED' | 'IN_PROGRESS' | 'FAILED' | 'CANCELLED' | 'DONE';\n\nexport class JobStatusEnum {\n static readonly NEW = 'NEW';\n static readonly SUBMITTED = 'SUBMITTED';\n static readonly IN_PROGRESS = 'IN_PROGRESS';\n static readonly DONE = 'DONE';\n static readonly FAILED = 'FAILED';\n static readonly CANCELLED = 'CANCELLED';\n}\n\n/**\n * Represents a job request using the JSON-RCP 2.0 style.\n */\nexport interface JobRequest {\n /** The JSON-RCP message identifier. */\n readonly id: number;\n readonly method: string;\n readonly params: Array<any> | Object;\n}\n\n/**\n * Job progress information, this is a Cate-specific extension to JSON-RCP 2.0.\n */\nexport interface JobProgress {\n /** The JSON-RCP message identifier. */\n readonly id: number;\n readonly label?: string;\n readonly message?: string;\n readonly total?: number;\n readonly worked?: number;\n}\n\n/**\n * Represents a job failure using the JSON-RCP 2.0 style.\n */\nexport interface JobFailure {\n\n /** A Number that indicates the error type that occurred. */\n readonly code: number;\n\n /** A the error message. */\n readonly message: string;\n\n /**\n * A Primitive or Structured value that contains additional information about the error.\n * This may be omitted.\n * The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.).\n */\n readonly data?: JobFailureInfo;\n}\n\n/**\n * Detailed error information.\n */\nexport interface JobFailureInfo {\n /** The name of the method which was called while the error occurred. */\n readonly method: string;\n\n /** The name of the exception type, e.g. \"OSError\", \"ValidationError\". */\n readonly exception: string;\n\n /** Stack trace */\n readonly traceback: string;\n}\n\n/**\n * A callback listening for job progress messages.\n */\nexport type JobProgressHandler = (progress: JobProgress) => void;\n\n/**\n * A callback listening for job responses.\n */\nexport type JobResponseHandler<JobResponse> = (response: JobResponse) => void;\n\n/**\n * A callback listening for job failures.\n */\nexport type JobFailureHandler = (failure: JobFailure) => void;\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/cate/webapi/app/static/js/runtime-main.25eafddd.js b/cate/webapi/app/static/js/runtime-main.25eafddd.js new file mode 100644 index 000000000..983cc34d8 --- /dev/null +++ b/cate/webapi/app/static/js/runtime-main.25eafddd.js @@ -0,0 +1,2 @@ +!function(e){function t(t){for(var n,a,p=t[0],l=t[1],f=t[2],c=0,s=[];c<p.length;c++)a=p[c],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(i&&i(t);s.length;)s.shift()();return u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,p=1;p<r.length;p++){var l=r[p];0!==o[l]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={1:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="./";var p=this["webpackJsonpcate-app"]=this["webpackJsonpcate-app"]||[],l=p.push.bind(p);p.push=t,p=p.slice();for(var f=0;f<p.length;f++)t(p[f]);var i=l;r()}([]); +//# sourceMappingURL=runtime-main.25eafddd.js.map \ No newline at end of file diff --git a/cate/webapi/app/static/js/runtime-main.25eafddd.js.map b/cate/webapi/app/static/js/runtime-main.25eafddd.js.map new file mode 100644 index 000000000..605697481 --- /dev/null +++ b/cate/webapi/app/static/js/runtime-main.25eafddd.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.25eafddd.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \tvar jsonpArray = this[\"webpackJsonpcate-app\"] = this[\"webpackJsonpcate-app\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/cate/webapi/app/static/media/cate-icon-128.4edcc198.png b/cate/webapi/app/static/media/cate-icon-128.4edcc198.png new file mode 100644 index 000000000..066a42e79 Binary files /dev/null and b/cate/webapi/app/static/media/cate-icon-128.4edcc198.png differ diff --git a/cate/webapi/app/static/media/icons-16.05f1cdad.eot b/cate/webapi/app/static/media/icons-16.05f1cdad.eot new file mode 100644 index 000000000..137fcb49d Binary files /dev/null and b/cate/webapi/app/static/media/icons-16.05f1cdad.eot differ diff --git a/cate/webapi/app/static/media/icons-16.3c1c220e.woff b/cate/webapi/app/static/media/icons-16.3c1c220e.woff new file mode 100644 index 000000000..05ea433d9 Binary files /dev/null and b/cate/webapi/app/static/media/icons-16.3c1c220e.woff differ diff --git a/cate/webapi/app/static/media/icons-16.3cde8748.ttf b/cate/webapi/app/static/media/icons-16.3cde8748.ttf new file mode 100644 index 000000000..ae572b3f1 Binary files /dev/null and b/cate/webapi/app/static/media/icons-16.3cde8748.ttf differ diff --git a/cate/webapi/app/static/media/icons-20.0a5c7651.eot b/cate/webapi/app/static/media/icons-20.0a5c7651.eot new file mode 100644 index 000000000..ab735db73 Binary files /dev/null and b/cate/webapi/app/static/media/icons-20.0a5c7651.eot differ diff --git a/cate/webapi/app/static/media/icons-20.51ec31f3.ttf b/cate/webapi/app/static/media/icons-20.51ec31f3.ttf new file mode 100644 index 000000000..fef7a847d Binary files /dev/null and b/cate/webapi/app/static/media/icons-20.51ec31f3.ttf differ diff --git a/cate/webapi/app/static/media/icons-20.cef8cdbb.woff b/cate/webapi/app/static/media/icons-20.cef8cdbb.woff new file mode 100644 index 000000000..5559f866f Binary files /dev/null and b/cate/webapi/app/static/media/icons-20.cef8cdbb.woff differ diff --git a/cate/webapi/app/static/media/notesesareg-webfont.3f6039de.woff b/cate/webapi/app/static/media/notesesareg-webfont.3f6039de.woff new file mode 100644 index 000000000..9e837e1c7 Binary files /dev/null and b/cate/webapi/app/static/media/notesesareg-webfont.3f6039de.woff differ diff --git a/cate/webapi/app/static/media/notesesareg-webfont.5c342a71.eot b/cate/webapi/app/static/media/notesesareg-webfont.5c342a71.eot new file mode 100644 index 000000000..f6beadba0 Binary files /dev/null and b/cate/webapi/app/static/media/notesesareg-webfont.5c342a71.eot differ diff --git a/cate/webapi/app/static/media/notesesareg-webfont.6a3ea7d4.ttf b/cate/webapi/app/static/media/notesesareg-webfont.6a3ea7d4.ttf new file mode 100644 index 000000000..600635583 Binary files /dev/null and b/cate/webapi/app/static/media/notesesareg-webfont.6a3ea7d4.ttf differ diff --git a/cate/webapi/app/static/media/notesesareg-webfont.9643bb60.woff2 b/cate/webapi/app/static/media/notesesareg-webfont.9643bb60.woff2 new file mode 100644 index 000000000..f46915744 Binary files /dev/null and b/cate/webapi/app/static/media/notesesareg-webfont.9643bb60.woff2 differ diff --git a/cate/webapi/app/static/media/notesesareg-webfont.d1cb9435.svg b/cate/webapi/app/static/media/notesesareg-webfont.d1cb9435.svg new file mode 100644 index 000000000..4e07f95e8 --- /dev/null +++ b/cate/webapi/app/static/media/notesesareg-webfont.d1cb9435.svg @@ -0,0 +1,3581 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> + <metadata></metadata> + <defs> + <font id="notesesaregular" horiz-adv-x="1024"> + <font-face units-per-em="2048" ascent="1651" descent="-397"/> + <missing-glyph horiz-adv-x="614"/> + <glyph unicode="fi" horiz-adv-x="1013" + d="M41 920v65q0 17 11 28t28 11h63v195q0 256 236 256q31 0 62.5 -3.5t46.5 -7.5l16 -4q39 -9 39 -43v-82q0 -33 -39 -30q-54 6 -105 6q-82 0 -82 -99v-188h514q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v842h-379v-842q0 -17 -10.5 -28 t-27.5 -11h-97q-17 0 -28 11t-11 28v842h-63q-17 0 -28 11t-11 28zM696 1319v96q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-96q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="fl" horiz-adv-x="1013" + d="M41 920v65q0 17 11 28t28 11h63v195q0 256 236 256q31 0 62.5 -3.5t46.5 -7.5l16 -4q39 -9 39 -43v-82q0 -33 -39 -30q-54 6 -105 6q-82 0 -82 -99v-188h166q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-166v-842q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28 v842h-63q-17 0 -28 11t-11 28zM696 39v1376q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-1376q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph horiz-adv-x="0"/> + <glyph horiz-adv-x="0"/> + <glyph horiz-adv-x="682"/> + <glyph unicode=" " horiz-adv-x="614"/> + <glyph unicode=" " horiz-adv-x="614"/> + <glyph unicode=" " horiz-adv-x="614"/> + <glyph unicode=" " horiz-adv-x="614"/> + <glyph unicode="!" horiz-adv-x="501" + d="M143 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM164 459v956q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-956q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode=""" horiz-adv-x="757" + d="M123 971v444q0 17 11 28t28 11h117q17 0 27.5 -11t10.5 -28v-444q0 -17 -10.5 -28t-27.5 -11h-117q-17 0 -28 11t-11 28zM440 971v444q0 17 11 28t28 11h117q17 0 28 -11t11 -28v-444q0 -17 -11 -28t-28 -11h-117q-17 0 -28 11t-11 28z"/> + <glyph unicode="#" + d="M41 387v66q0 17 11 28t28 11h115v471h-115q-17 0 -28 10.5t-11 27.5v66q0 17 11 28t28 11h115v309q0 17 10.5 28t27.5 11h97q17 0 28 -11t11 -28v-309h286v309q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-309h115q17 0 28 -11t11 -28v-66q0 -17 -11 -27.5t-28 -10.5 h-115v-471h115q17 0 28 -11t11 -28v-66q0 -17 -11 -28t-28 -11h-115v-309q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28v309h-286v-309q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v309h-115q-17 0 -28 11t-11 28zM369 492h286v471h-286v-471z"/> + <glyph unicode="$" + d="M123 63v95q0 36 39 30q178 -45 299 -45q124 0 195 55.5t71 174.5v61q0 95 -46 141t-149 82l-133 48q-57 20 -99.5 44t-83 62.5t-62 98.5t-21.5 139v51q0 154 82 247t225 119v195q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-188q56 -4 113 -12t86 -15l29 -6q39 -6 39 -41 v-90q0 -34 -39 -31q-156 33 -289 33q-119 0 -182.5 -52.5t-63.5 -158.5v-51q0 -70 43 -113t121 -70l131 -47q51 -18 89.5 -36.5t80 -50t68 -70t44 -97.5t17.5 -131v-61q0 -323 -287 -381v-199q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v187q-64 3 -133.5 13.5 t-106.5 20.5l-38 9q-39 6 -39 40z"/> + <glyph unicode="%" horiz-adv-x="2078" + d="M143 1044v62q0 174 95 271.5t270 97.5t268.5 -97.5t93.5 -271.5v-62q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM317 1044q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v62q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-62zM606 39 l670 1378q18 37 45 37h123q17 0 24.5 -13t1.5 -26l-669 -1378q-19 -37 -45 -37h-123q-17 0 -25 13t-2 26zM1208 348v62q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-62q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM1382 348q0 -96 46 -155.5t145 -59.5 q98 0 143 59.5t45 155.5v62q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-62z"/> + <glyph unicode="&" horiz-adv-x="1337" + d="M143 328v102q0 57 20 109.5t57.5 96.5t79 79.5t95.5 70.5q-50 51 -79 86.5t-54.5 92t-25.5 114.5v72q0 151 93.5 237.5t250.5 86.5q152 0 248 -87t96 -237v-61q0 -39 -7 -72.5t-26.5 -66t-34.5 -53.5t-53 -55t-57 -50t-70 -56l270 -284q27 105 27 243v105q0 17 11 28 t28 11h96q17 0 28 -11t11 -28v-105q0 -219 -70 -385l250 -262q10 -10 10 -22q0 -11 -8 -19t-22 -8h-152q-24 0 -61 37l-111 119q-151 -176 -401 -176q-91 0 -168.5 20t-139 60.5t-96.5 109t-35 158.5zM317 328q0 -94 75 -144.5t190 -50.5q185 0 288 146l-370 399 q-99 -71 -141 -124.5t-42 -123.5v-102zM410 1079q0 -16 4.5 -32.5t16 -36t19.5 -32.5t28.5 -35.5t28.5 -31t32.5 -33.5t29.5 -30q94 74 137.5 128t43.5 114v61q0 74 -49 117t-121 43q-79 0 -124.5 -42t-45.5 -118v-72z"/> + <glyph unicode="'" horiz-adv-x="440" + d="M123 971v444q0 17 11 28t28 11h117q17 0 27.5 -11t10.5 -28v-444q0 -17 -10.5 -28t-27.5 -11h-117q-17 0 -28 11t-11 28z"/> + <glyph unicode="(" horiz-adv-x="583" + d="M143 225v1004q0 100 17 170.5t58 126.5t117.5 84t188.5 28q18 0 28.5 -9.5t10.5 -26.5v-70q0 -17 -11 -27t-28 -10q-107 0 -157 -60.5t-50 -205.5v-1004q0 -144 50 -205t157 -61q17 0 28 -10t11 -27v-69q0 -17 -11 -27t-28 -10q-112 0 -188.5 28t-117.5 84t-58 126.5 t-17 170.5z"/> + <glyph unicode=")" horiz-adv-x="583" + d="M20 -78q0 17 11 27t28 10q107 0 157 61t50 205v1004q0 145 -50 205.5t-157 60.5q-17 0 -28 10t-11 27v70q0 17 10.5 26.5t28.5 9.5q112 0 188.5 -28t117.5 -84t58 -126.5t17 -170.5v-1004q0 -100 -17 -170.5t-58 -126.5t-117.5 -84t-188.5 -28q-17 0 -28 10t-11 27v69z "/> + <glyph unicode="*" horiz-adv-x="1026" + d="M138 1195.5q-4 15.5 5 29.5l47 73q9 14 24.5 18t29.5 -5l188 -117v221q0 17 11 28t28 11h86q17 0 28 -11t11 -28v-221l188 117q14 9 29.5 5t24.5 -18l45 -73q9 -14 5 -29.5t-18 -24.5l-231 -145l186 -201q25 -25 -4 -53l-63 -59q-12 -12 -28.5 -11t-27.5 13l-188 205 l-188 -205q-11 -12 -27.5 -14t-28.5 10l-63 59q-28 28 -6 53l186 203l-231 145q-14 9 -18 24.5z"/> + <glyph unicode="+" + d="M123 684v76q0 17 11 28t28 11h268v288q0 17 11 28t28 11h86q17 0 28 -11t11 -28v-288h268q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-268v-289q0 -17 -11 -28t-28 -11h-86q-17 0 -28 11t-11 28v289h-268q-17 0 -28 11t-11 28z"/> + <glyph unicode="," horiz-adv-x="460" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-156l-53 -286q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28z"/> + <glyph unicode="-" horiz-adv-x="696" + d="M123 684v76q0 17 11 28t28 11h373q17 0 27.5 -11t10.5 -28v-76q0 -17 -10.5 -28t-27.5 -11h-373q-17 0 -28 11t-11 28z"/> + <glyph unicode="." horiz-adv-x="460" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="/" horiz-adv-x="768" + d="M94 41l398 1376q10 37 47 37h106q17 0 25.5 -12t3.5 -29l-398 -1376q-10 -37 -47 -37h-106q-17 0 -25.5 12t-3.5 29z"/> + <glyph unicode="0" + d="M123 410v634q0 205 100.5 318t288.5 113t288.5 -113t100.5 -318v-634q0 -205 -100.5 -317.5t-288.5 -112.5t-288.5 112.5t-100.5 317.5zM297 410q0 -123 54.5 -195t160.5 -72t160.5 72t54.5 195v634q0 123 -54.5 195t-160.5 72t-160.5 -72t-54.5 -195v-634z"/> + <glyph unicode="1" + d="M115 1219v94q0 16 9.5 24t29.5 15l309 102h135q17 0 28 -11t11 -28v-1251h248q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h289v1102l-313 -76q-35 -9 -35 29z"/> + <glyph unicode="2" + d="M137 39v293q0 101 31.5 178t82.5 124t112 83.5t122 65.5t112 60t82.5 77.5t31.5 107.5v72q0 106 -63.5 158.5t-182.5 52.5q-59 0 -131.5 -8.5t-115.5 -16.5l-42 -8q-39 -3 -39 29v94q0 17 9 25.5t30 13.5q135 35 293 35q201 0 308.5 -95t107.5 -280v-72 q0 -73 -19.5 -131.5t-53 -97.5t-76.5 -71t-90.5 -56t-95 -46.5t-90.5 -49.5t-76.5 -59t-53 -79t-19.5 -106v-168h535q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-670q-17 0 -28 11t-11 28z"/> + <glyph unicode="3" + d="M127 59v93q0 29 39 26q178 -35 295 -35q126 0 193 61.5t67 170.5v88q0 106 -63.5 158.5t-182.5 52.5h-207q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h166q119 0 182.5 52.5t63.5 158.5v45q0 106 -60.5 161.5t-170.5 55.5q-52 0 -123 -8.5t-116 -17.5l-44 -9 q-39 -3 -39 29v92q0 34 39 39q121 39 287 39q401 0 401 -381v-45q0 -190 -141 -281q182 -87 182 -305v-88q0 -198 -110 -296.5t-320 -98.5q-72 0 -146.5 9.5t-113.5 18.5l-39 10q-39 9 -39 41z"/> + <glyph unicode="4" + d="M31 367v125l372 923q6 16 21.5 27.5t32.5 11.5h133q17 0 23 -13t-1 -28l-391 -921h404v493q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-493h155q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-155v-289q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v289h-555 q-17 0 -28 11t-11 28z"/> + <glyph unicode="5" + d="M133 57v90q0 34 39 31q172 -35 295 -35q126 0 193 61.5t67 170.5v176q0 88 -42.5 141t-131.5 53q-60 0 -132 -28t-113 -56l-42 -28h-94q-17 0 -28 11t-11 28v743q0 17 11 28t28 11h690q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-555v-471q129 90 266 90 q168 0 248 -94.5t80 -263.5v-176q0 -197 -111.5 -296t-318.5 -99q-70 0 -145 9.5t-114 18.5l-40 10q-21 5 -30 13.5t-9 25.5z"/> + <glyph unicode="6" + d="M123 369v635q0 232 119 351.5t331 119.5q46 0 108 -7.5t101 -14.5l39 -7q39 -3 39 -39v-96q0 -16 -11.5 -23.5t-27.5 -5.5q-162 29 -248 29q-74 0 -129 -25.5t-86 -70t-46 -97.5t-15 -114v-199q135 104 276 104q164 0 246 -91.5t82 -256.5v-192q0 -186 -101.5 -287.5 t-287.5 -101.5q-185 0 -287 101.5t-102 287.5zM297 375q0 -105 52.5 -168.5t162.5 -63.5q109 0 162 63.5t53 168.5v180q0 87 -42.5 138.5t-131.5 51.5q-106 0 -256 -88v-282z"/> + <glyph unicode="7" + d="M82 1329v86q0 17 11 28t28 11h772q17 0 28 -11t11 -28v-125l-502 -1253q-13 -37 -47 -37h-131q-17 0 -26 12t-3 29l525 1249h-627q-17 0 -28 11t-11 28z"/> + <glyph unicode="8" + d="M102 348v123q0 205 162 293q-141 84 -141 280v82q0 178 104.5 263.5t284.5 85.5q179 0 284 -85.5t105 -263.5v-82q0 -196 -141 -280q162 -88 162 -293v-123q0 -180 -112.5 -274t-297.5 -94t-297.5 94t-112.5 274zM276 348q0 -98 63.5 -156.5t172.5 -58.5t172.5 58.5 t63.5 156.5v123q0 99 -62.5 157t-173.5 58t-173.5 -58t-62.5 -157v-123zM297 1044q0 -99 54 -151.5t161 -52.5t161 52.5t54 151.5v82q0 195 -215 195t-215 -195v-82z"/> + <glyph unicode="9" + d="M123 913v172q0 186 101.5 288t287.5 102q185 0 287 -102t102 -288v-655q0 -231 -109 -340.5t-321 -109.5q-49 0 -111 7t-100 14l-37 7q-18 2 -28.5 12t-10.5 27v94q0 34 39 31q166 -29 248 -29q74 0 126 22t79.5 63.5t39 90t11.5 111.5v232q-139 -97 -276 -97 q-164 0 -246 91.5t-82 256.5zM297 920q0 -87 42.5 -139t131.5 -52q96 0 256 82v268q0 105 -52.5 168.5t-162.5 63.5q-109 0 -162 -63.5t-53 -168.5v-159z"/> + <glyph unicode=":" horiz-adv-x="460" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM123 848v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode=";" horiz-adv-x="460" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-156l-53 -286q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28zM123 848v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="<" + d="M123 674v96q0 28 35 45l702 324q15 8 28 0t13 -25v-100q0 -27 -39 -43l-567 -248l567 -250q39 -16 39 -43v-100q0 -17 -13 -25t-28 0l-702 324q-35 17 -35 45z"/> + <glyph unicode="=" + d="M123 530v76q0 17 11 28t28 11h700q17 0 28 -11t11 -28v-76q0 -17 -11 -27.5t-28 -10.5h-700q-17 0 -28 10.5t-11 27.5zM123 838v75q0 17 11 28t28 11h700q17 0 28 -11t11 -28v-75q0 -17 -11 -28t-28 -11h-700q-17 0 -28 11t-11 28z"/> + <glyph unicode=">" + d="M123 330v100q0 27 39 43l567 250l-567 248q-39 16 -39 43v100q0 17 13 25t28 0l702 -324q35 -17 35 -45v-96q0 -28 -35 -45l-702 -324q-15 -8 -28 0t-13 25z"/> + <glyph unicode="?" horiz-adv-x="849" + d="M82 1315v88q0 35 39 41q115 31 252 31q354 0 354 -332v-31q0 -98 -33 -159t-94 -115l-55 -50q-55 -50 -80 -100.5t-25 -134.5v-94q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v94q0 135 38 211.5t108 136.5l59 51q82 71 82 160v31q0 91 -45 129.5t-139 38.5 q-51 0 -114 -6.5t-101 -12.5l-37 -6q-35 -3 -35 29zM246 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="@" horiz-adv-x="1986" + d="M143 410v204q0 185 55 341t159.5 272.5t267.5 182t368 65.5q412 0 631 -212.5t219 -586.5v-103q0 -274 -105.5 -423.5t-307.5 -149.5q-102 0 -173 42.5t-108 117.5q-156 -140 -299 -140q-140 0 -210.5 73.5t-70.5 201.5q0 45 9 94l53 307q28 163 121.5 245.5t263.5 82.5 q68 0 151 -11t132 -21l49 -11q15 -3 24 -14t6 -27l-82 -489q-8 -41 -8 -95q0 -202 144 -202q105 0 161 112t56 307v103q0 96 -20 183t-68 169t-121.5 141t-188 95t-258.5 36t-259 -42.5t-187.5 -110.5t-121 -159.5t-68 -184t-19.5 -189.5v-204q0 -97 19.5 -185.5t68 -174 t121.5 -148t187.5 -100.5t258.5 -38h238q17 0 28 -10.5t11 -27.5v-97q0 -17 -11 -28t-28 -11h-238q-206 0 -368 59t-267 167.5t-160 259t-55 334.5zM741 309q0 -135 136 -135q98 0 241 92q-6 37 -6 76q0 44 10 109l68 399q-95 20 -170 20q-187 0 -219 -194l-53 -307 q-7 -35 -7 -60z"/> + <glyph unicode="A" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM344 451h449l-224 723z"/> + <glyph unicode="B" horiz-adv-x="1167" + d="M143 39v1376q0 17 11 28t28 11h371q451 0 451 -399q0 -217 -177 -310q217 -90 217 -335q0 -212 -112.5 -311t-337.5 -99h-412q-17 0 -28 11t-11 28zM317 164h277q138 0 207 60t69 186t-69 185.5t-207 59.5h-277v-491zM317 819h236q276 0 276 236q0 235 -276 235h-236 v-471z"/> + <glyph unicode="C" horiz-adv-x="911" + d="M143 451v553q0 214 109 342.5t326 128.5q49 0 103 -5.5t83 -11.5l29 -6q19 -5 27.5 -13.5t8.5 -25.5v-90q0 -34 -38 -31q-115 19 -207 19q-70 0 -123 -25.5t-83.5 -69.5t-45.5 -97t-15 -115v-553q0 -62 14.5 -115.5t45 -97.5t84 -69.5t123.5 -25.5q36 0 88 4.5t86 9.5 l33 5q38 3 38 -31v-92q0 -17 -8.5 -25.5t-27.5 -13.5q-113 -20 -215 -20q-110 0 -194 35t-136 98.5t-78.5 148.5t-26.5 189z"/> + <glyph unicode="D" horiz-adv-x="1187" + d="M143 39v1376q0 17 11 28t28 11h412q225 0 337.5 -128t112.5 -343v-512q0 -215 -112.5 -343t-337.5 -128h-412q-17 0 -28 11t-11 28zM317 164h277q73 0 128 25.5t86.5 69.5t46.5 97t15 115v512q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5h-277v-1126z"/> + <glyph unicode="E" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-491h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28z"/> + <glyph unicode="F" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-616q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="G" horiz-adv-x="1187" + d="M143 451v512q0 241 123.5 376.5t368.5 135.5q81 0 164 -12t125 -24l43 -12q20 -5 28.5 -13t8.5 -25v-93q0 -17 -10.5 -25t-28.5 -5q-185 45 -330 45q-162 0 -240 -95t-78 -253v-512q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5q76 0 145 14.5t100 28.5l31 15v434 h-268q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h404q17 0 27.5 -11t10.5 -28v-658q-6 -5 -17 -13t-51.5 -29t-88 -37.5t-126.5 -29.5t-167 -13q-115 0 -202 35t-141 99t-81 148.5t-27 188.5z"/> + <glyph unicode="H" horiz-adv-x="1187" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-596h553v596q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28v616h-553v-616q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="I" horiz-adv-x="911" + d="M61 39v65q0 17 11 28t28 11h269v1168h-269q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h711q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-268v-1168h268q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28z"/> + <glyph unicode="J" horiz-adv-x="727" + d="M61 39v86q0 17 11 28t28 11h43q134 0 200.5 80t66.5 207v964q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-964q0 -451 -430 -451h-54q-17 0 -28 11t-11 28z"/> + <glyph unicode="K" horiz-adv-x="1064" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM338 758l455 657q26 39 53 39h127q17 0 24 -14t-2 -27l-452 -655l475 -717q9 -13 1.5 -27t-24.5 -14h-127q-28 0 -53 37z"/> + <glyph unicode="L" horiz-adv-x="952" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1251h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28z"/> + <glyph unicode="M" horiz-adv-x="1505" + d="M143 39v1376q0 17 11 28t28 11h123q32 0 47 -37l402 -1042l399 1042q15 37 47 37h123q17 0 28 -11t11 -28v-1376q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v1024l-334 -860q-16 -39 -47 -39h-109q-31 0 -47 39l-334 860v-1024q0 -17 -10.5 -28t-27.5 -11h-97 q-17 0 -28 11t-11 28z"/> + <glyph unicode="N" horiz-adv-x="1187" + d="M143 39v1376q0 17 11 28t28 11h107q18 0 28 -8.5t19 -26.5l534 -1038v1034q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-109q-27 0 -47 39l-533 1034v-1034q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="O" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115 v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553z"/> + <glyph unicode="P" horiz-adv-x="1126" + d="M143 39v1376q0 17 11 28t28 11h371q221 0 336 -107.5t115 -312.5t-115 -312.5t-336 -107.5h-236v-575q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM317 778h236q134 0 205 67.5t71 188.5t-71 188.5t-205 67.5h-236v-512z"/> + <glyph unicode="Q" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -191 -89.5 -315.5t-268.5 -149.5v-123q0 -57 29 -88t80 -31q22 0 139 12q39 3 39 -28v-80q0 -35 -39 -41q-122 -17 -176 -17q-112 0 -179 65.5t-67 211.5v117 q-185 24 -277 148.5t-92 318.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553z"/> + <glyph unicode="R" horiz-adv-x="1126" + d="M143 39v1376q0 17 11 28t28 11h371q221 0 336 -107.5t115 -312.5q0 -170 -79 -273t-233 -134l350 -588q9 -13 0 -26t-26 -13h-127q-25 0 -51 39l-342 575h-179v-575q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM317 778h236q134 0 205 67.5t71 188.5t-71 188.5 t-205 67.5h-236v-512z"/> + <glyph unicode="S" horiz-adv-x="1013" + d="M113 63v95q0 36 39 30q178 -45 299 -45q124 0 195 55.5t71 174.5v61q0 95 -46 141t-149 82l-133 48q-46 16 -81 33.5t-71.5 46t-60 63t-38.5 86t-15 115.5v51q0 182 113.5 278.5t302.5 96.5q68 0 141 -8.5t112 -17.5l39 -9q39 -9 39 -41v-90q0 -34 -39 -31 q-155 33 -288 33q-119 0 -182.5 -52.5t-63.5 -158.5v-51q0 -70 43 -113t121 -70l131 -47q51 -18 89.5 -36.5t80 -50t68 -70t44 -97.5t17.5 -131v-61q0 -393 -424 -393q-70 0 -149 10.5t-122 21.5l-44 11q-39 9 -39 40z"/> + <glyph unicode="T" horiz-adv-x="1064" + d="M82 1329v86q0 17 11 28t28 11h823q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-323v-1251q0 -17 -11 -28t-28 -11h-97q-17 0 -28 11t-11 28v1251h-325q-17 0 -28 11t-11 28z"/> + <glyph unicode="U" horiz-adv-x="1187" + d="M143 451v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99 t-81 148.5t-27 188.5z"/> + <glyph unicode="V" horiz-adv-x="1085" + d="M33 1413q-5 17 4 29t26 12h111q31 0 41 -37l328 -1147l327 1147q10 37 41 37h111q17 0 26 -12t5 -29l-400 -1372q-11 -41 -45 -41h-131q-34 0 -45 41z"/> + <glyph unicode="W" horiz-adv-x="1863" + d="M72 1413q-5 17 3 29t25 12h113q32 0 41 -35l276 -1136l289 1132q10 39 45 39h135q35 0 45 -39l289 -1132l277 1136q9 35 41 35h110q17 0 26 -12t5 -29l-342 -1374q-10 -39 -45 -39h-127q-35 0 -45 39l-301 1128l-301 -1128q-10 -39 -45 -39h-127q-35 0 -45 39z"/> + <glyph unicode="X" horiz-adv-x="1146" + d="M42 12q-8 12 1 27l408 704l-388 672q-9 15 -1 27t26 12h127q32 0 49 -31l309 -530l310 530q17 31 49 31h127q17 0 25 -12t-1 -27l-387 -672l408 -704q9 -15 1 -27t-26 -12h-127q-32 0 -49 31l-330 565l-329 -565q-17 -31 -49 -31h-127q-18 0 -26 12z"/> + <glyph unicode="Y" horiz-adv-x="1075" + d="M39 1413q-7 15 1.5 28t25.5 13h116q33 0 49 -39l308 -708l305 708q16 39 49 39h117q17 0 25.5 -13t0.5 -28l-411 -911v-463q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v463z"/> + <glyph unicode="Z" horiz-adv-x="890" + d="M82 39v125l518 1126h-479q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-125l-518 -1126h479q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28z"/> + <glyph unicode="[" horiz-adv-x="583" + d="M143 -145v1744q0 17 11 28t28 11h342q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-207v-1536h207q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-342q-17 0 -28 11t-11 28z"/> + <glyph unicode="\" horiz-adv-x="768" + d="M94 1413q-5 17 3.5 29t25.5 12h106q37 0 47 -37l398 -1376q5 -17 -3.5 -29t-25.5 -12h-106q-37 0 -47 37z"/> + <glyph unicode="]" horiz-adv-x="583" + d="M20 -80q0 17 11 28t28 11h207v1536h-207q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h342q17 0 28 -11t11 -28v-1744q0 -17 -11 -28t-28 -11h-342q-17 0 -28 11t-11 28v65z"/> + <glyph unicode="^" horiz-adv-x="993" + d="M143 893q-8 12 0 27l256 495q19 39 45 39h103q27 0 47 -39l256 -495q8 -15 0 -27t-25 -12h-98q-25 0 -45 39l-186 372l-185 -372q-19 -39 -45 -39h-98q-17 0 -25 12z"/> + <glyph unicode="_" horiz-adv-x="983" + d="M0 -274q0 17 11 27.5t28 10.5h905q17 0 28 -10.5t11 -27.5v-76q0 -17 -11 -28t-28 -11h-905q-17 0 -28 11t-11 28v76z"/> + <glyph unicode="`" horiz-adv-x="622" + d="M139.5 1201q-5.5 13 3.5 26l136 209q26 39 55 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -55 -39h-117q-17 0 -22.5 13z"/> + <glyph unicode="a" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5t-41.5 -123.5z"/> + <glyph unicode="b" horiz-adv-x="1013" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-440q110 69 226 69q163 0 245 -91.5t82 -256.5v-368q0 -328 -348 -328h-340q-17 0 -28 11t-11 28zM317 154h185q194 0 194 174v368q0 88 -42.5 141.5t-131.5 53.5q-83 0 -205 -60v-677z"/> + <glyph unicode="c" horiz-adv-x="798" + d="M143 348v328q0 174 92 271t267 97q43 0 87 -4t67 -10l22 -4q39 -3 39 -43v-84q0 -34 -41 -31q-84 13 -164 13q-99 0 -147 -56t-48 -149v-328q0 -94 47 -149.5t148 -55.5q36 0 78 3.5t66 6.5l24 3q37 3 37 -31v-84q0 -35 -39 -43q-92 -18 -176 -18q-175 0 -267 97t-92 271 z"/> + <glyph unicode="d" horiz-adv-x="1013" + d="M143 328v368q0 165 82 256.5t246 91.5q116 0 225 -61v432q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-1376q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v10q-110 -69 -225 -69q-164 0 -246 91.5t-82 256.5zM317 328q0 -88 43 -141.5t132 -53.5q82 0 204 60v647 q-119 51 -204 51q-89 0 -132 -53.5t-43 -141.5v-368z"/> + <glyph unicode="e" horiz-adv-x="972" + d="M123 475v86q0 231 92.5 357t282.5 126q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41q-124 -26 -233 -26q-193 0 -303.5 120.5 t-110.5 374.5zM297 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100z"/> + <glyph unicode="f" horiz-adv-x="583" + d="M41 920v65q0 17 11 28t28 11h104v195q0 256 236 256q31 0 62.5 -3.5t47.5 -7.5l15 -4q39 -9 39 -43v-82q0 -33 -39 -30q-54 6 -105 6q-82 0 -82 -99v-188h146q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-146v-842q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28 v842h-104q-17 0 -28 11t-11 28z"/> + <glyph unicode="g" horiz-adv-x="1013" + d="M143 369v327q0 165 88 256.5t261 91.5q37 0 80.5 -3t85.5 -7.5t71.5 -8.5t64 -9.5t37.5 -5.5q39 -7 39 -39v-1022q0 -188 -80 -273.5t-262 -85.5q-71 0 -148 10t-118 20l-41 9q-20 5 -28.5 13.5t-8.5 25.5v86q0 17 10 26.5t27 8.5q170 -35 291 -35q99 0 141.5 49.5 t42.5 145.5v141q-112 -70 -225 -70q-163 0 -245.5 92t-82.5 257zM317 369q0 -88 43 -141.5t132 -53.5q84 0 204 59v639q-120 19 -184 19q-99 0 -147 -53.5t-48 -141.5v-327z"/> + <glyph unicode="h" horiz-adv-x="1013" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-463q117 92 263 92q156 0 223 -89t67 -259v-657q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v657q0 91 -32.5 137t-122.5 46q-95 0 -224 -76v-764q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="i" horiz-adv-x="460" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-946q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM143 1319v96q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-96q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="j" horiz-adv-x="460" + d="M-41 -281q0 34 39 31q33 -6 76 -6q37 0 53 21.5t16 76.5v1143q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1159q0 -120 -48 -178t-154 -58q-34 0 -63 3t-42 5l-12 3q-39 3 -39 39v79zM143 1319v96q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-96q0 -17 -10.5 -28 t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="k" horiz-adv-x="870" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM330 573l297 412q26 39 55 39h117q17 0 24 -13t-2 -26l-297 -412l324 -536q9 -13 0 -25t-27 -12h-116q-27 0 -52 37z"/> + <glyph unicode="l" horiz-adv-x="460" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="m" horiz-adv-x="1566" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-33q117 92 263 92q183 0 249 -129q124 129 304 129q155 0 222.5 -89t67.5 -259v-657q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v657q0 91 -32.5 137t-122.5 46q-105 0 -228 -95q4 -27 4 -88v-657 q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v657q0 91 -32.5 137t-122.5 46q-95 0 -224 -76v-764q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="n" horiz-adv-x="1013" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-33q117 92 263 92q156 0 223 -89t67 -259v-657q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v657q0 91 -32.5 137t-122.5 46q-95 0 -224 -76v-764q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="o" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM307 348q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328z"/> + <glyph unicode="p" horiz-adv-x="1013" + d="M143 -350v1335q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-10q110 69 226 69q163 0 245 -91.5t82 -256.5v-368q0 -328 -360 -328q-67 0 -193 14v-364q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM317 154h185q194 0 194 174v368q0 88 -42.5 141.5 t-131.5 53.5q-83 0 -205 -60v-677z"/> + <glyph unicode="q" horiz-adv-x="1013" + d="M143 328v368q0 165 88 256.5t261 91.5q37 0 80.5 -3t85.5 -7.5t71.5 -8.5t64 -9.5t37.5 -5.5q39 -7 39 -39v-1321q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v399q-110 -69 -225 -69q-164 0 -246 91.5t-82 256.5zM317 328q0 -88 43 -141.5t132 -53.5q82 0 204 60 v679q-120 19 -184 19q-99 0 -147 -53.5t-48 -141.5v-368z"/> + <glyph unicode="r" horiz-adv-x="645" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-94q69 153 218 153l34 -4q35 -3 35 -41v-110q0 -18 -9 -27t-26 -8q-1 2 -28 2q-71 0 -128 -47t-96 -117v-653q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="s" horiz-adv-x="890" + d="M92 59v88q0 34 39 31q176 -39 289 -39q194 0 194 142q0 66 -39 96t-116 51l-113 31q-53 15 -90.5 31.5t-75.5 47.5t-58 81.5t-20 119.5q0 305 355 305q59 0 122 -6.5t97 -13.5l33 -6q39 -9 39 -41v-82q0 -17 -11 -26.5t-28 -6.5q-133 23 -248 23q-185 0 -185 -131 q0 -56 36 -85t104 -46l110 -29q56 -14 96.5 -32t81.5 -51t62.5 -87t21.5 -127q0 -168 -86.5 -242.5t-265.5 -74.5q-67 0 -143 9t-119 18l-43 9q-39 9 -39 43z"/> + <glyph unicode="t" horiz-adv-x="686" + d="M41 920v65q0 17 11 28t28 11h104v227q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-227h248q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-248v-629q0 -57 29 -88t80 -31q29 0 65.5 3.5t57.5 7.5l22 3q33 3 33 -30v-82q0 -36 -39 -39q-102 -16 -176 -16q-112 0 -179 65 t-67 211v625h-104q-17 0 -28 11t-11 28z"/> + <glyph unicode="u" horiz-adv-x="1013" + d="M143 328v657q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-156 0 -223.5 89t-67.5 259z"/> + <glyph unicode="v" horiz-adv-x="921" + d="M35 983q-5 16 4 28.5t27 12.5h104q17 0 29.5 -11t17.5 -28l244 -756l244 756q5 17 17.5 28t29.5 11h104q18 0 27 -12.5t4 -28.5l-318 -946q-5 -15 -18.5 -26t-30.5 -11h-119q-17 0 -30.5 11t-18.5 26z"/> + <glyph unicode="w" horiz-adv-x="1536" + d="M72 985q-5 17 3 28t27 11h107q17 0 29.5 -11t17.5 -28l190 -739l213 741q10 37 43 37h132q33 0 43 -37l213 -741l190 739q10 39 45 39h109q18 0 25.5 -12.5t2.5 -30.5l-258 -942q-10 -39 -43 -39h-135q-30 0 -41 41l-217 735l-217 -735q-11 -41 -43 -41h-135 q-31 0 -41 39z"/> + <glyph unicode="x" horiz-adv-x="880" + d="M22 14q-7 14 3 27l290 487l-270 455q-9 13 -1 27t26 14h125q14 0 25.5 -7t14.5 -11.5t13 -18.5l192 -321l193 321q25 37 53 37h125q18 0 26 -14t-1 -27l-271 -455l291 -487q10 -13 4 -27t-24 -14h-129q-29 0 -54 37l-213 354l-213 -354q-18 -27 -30 -32q-11 -5 -23 -5 h-127q-18 0 -25 14z"/> + <glyph unicode="y" horiz-adv-x="921" + d="M35 983q-5 16 4 28.5t27 12.5h104q16 0 29 -11.5t18 -27.5l244 -733l244 733q5 16 18 27.5t29 11.5h104q18 0 27 -12.5t4 -28.5l-455 -1335q-11 -37 -43 -37h-110q-17 0 -26.5 11t-4.5 26l121 352z"/> + <glyph unicode="z" horiz-adv-x="849" + d="M82 39v115l469 716h-430q-17 0 -28 11t-11 28v76q0 17 11 28t28 11h608q17 0 28 -11t11 -28v-115l-469 -716h430q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-608q-17 0 -28 11t-11 28z"/> + <glyph unicode="{" horiz-adv-x="645" + d="M20 694v66q0 17 11 28t28 11h13q80 0 106.5 39.5t26.5 124.5v368q0 163 75 235t242 72h64q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-64q-82 0 -112.5 -40.5t-30.5 -123.5v-368q0 -97 -26 -155.5t-93 -80.5q67 -22 93 -80t26 -155v-369q0 -83 30.5 -123.5 t112.5 -40.5h64q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-64q-167 0 -242 72t-75 235v369q0 85 -26.5 124t-106.5 39h-13q-17 0 -28 11t-11 28z"/> + <glyph unicode="|" horiz-adv-x="460" + d="M143 -166v1786q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1786q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="}" horiz-adv-x="645" + d="M20 -80q0 17 11 28t28 11h64q82 0 112.5 40.5t30.5 123.5v369q0 96 26 154t93 81q-66 20 -92.5 79.5t-26.5 156.5v368q0 83 -30.5 123.5t-112.5 40.5h-64q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h64q167 0 242 -72t75 -235v-368q0 -85 26.5 -124.5t106.5 -39.5h13 q17 0 28 -11t11 -28v-66q0 -17 -11 -28t-28 -11h-13q-80 0 -106.5 -39t-26.5 -124v-369q0 -163 -75 -235t-242 -72h-64q-17 0 -28 11t-11 28v65z"/> + <glyph unicode="~" + d="M123 662v81q0 31 39 45q7 5 20.5 11.5t57 18t88.5 11.5q74 0 190 -30.5t182 -30.5q26 0 66.5 9t67.5 19l28 9q39 10 39 -23v-82q0 -31 -39 -45q-7 -5 -20.5 -11.5t-57 -18t-88.5 -11.5q-73 0 -188 31t-184 31q-26 0 -66.5 -9t-67.5 -19l-28 -9q-39 -10 -39 23z"/> + <glyph unicode="¡" horiz-adv-x="501" + d="M143 889v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM164 -350v956q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-956q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="¢" + d="M205 348v328q0 155 73.5 249.5t213.5 114.5v191q0 17 10.5 28t27.5 11h97q17 0 28 -11t11 -28v-193l114 -16q39 -6 39 -43v-84q0 -34 -41 -31q-125 17 -205 17q-99 0 -146.5 -55.5t-47.5 -149.5v-328q0 -94 47 -149.5t147 -55.5q36 0 88 4.5t87 8.5l34 4q37 3 37 -31v-84 q0 -38 -39 -43q-53 -10 -114 -16v-193q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v191q-140 20 -213.5 114.5t-73.5 249.5z"/> + <glyph unicode="£" + d="M16 694l11 86q2 18 12 28.5t27 10.5h170v199q0 219 105.5 338t299.5 119q69 0 140 -13t107 -26l36 -13q39 -6 39 -39v-90q0 -38 -39 -32q-146 49 -279 49q-235 0 -235 -293v-199h426q35 0 32 -39l-10 -86q-2 -18 -12 -28.5t-27 -10.5h-409v-491h514q17 0 28 -11t11 -28 v-86q0 -17 -11 -28t-28 -11h-650q-17 0 -27.5 11t-10.5 28v616h-187q-17 0 -26 10.5t-7 28.5z"/> + <glyph unicode="¤" + d="M76 384q0 16 12 28l105 104q-43 82 -43 201t43 201l-105 104q-12 12 -12 27.5t12 27.5l64 62q12 12 27.5 12t27.5 -12l102 -103q87 49 205 49q120 0 203 -47l100 103q12 12 27.5 12t27.5 -12l64 -64q12 -12 12 -27.5t-12 -27.5l-102 -102q43 -82 43 -203t-43 -203 l102 -102q12 -12 12 -28t-12 -28l-62 -61q-12 -12 -27.5 -12t-27.5 12l-100 100q-83 -47 -205 -47q-125 0 -207 49l-102 -102q-12 -12 -27.5 -12t-27.5 12l-62 61q-12 12 -12 28zM324 717q0 -96 45.5 -155.5t144.5 -59.5q98 0 143 59.5t45 155.5q0 97 -44.5 156t-143.5 59 q-98 0 -144 -59.5t-46 -155.5z"/> + <glyph unicode="¥" + d="M57 1413q-6 15 2 28t25 13h117q33 0 49 -39l262 -708l262 708q16 39 49 39h117q17 0 25 -13t2 -28l-238 -614h195q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-258l-64 -164h322q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-326v-268q0 -17 -11 -28t-28 -11h-96 q-17 0 -28 11t-11 28v268h-324q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h320l-64 164h-256q-17 0 -28 11t-11 28v86q0 17 11 28t28 11h193z"/> + <glyph unicode="¦" horiz-adv-x="460" + d="M143 -166v762q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-762q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM143 858v762q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-762q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="§" horiz-adv-x="972" + d="M133 -57q0 33 39 30q176 -39 289 -39q194 0 194 142v41q0 66 -39 96t-116 51l-113 31q-53 15 -90.5 31.5t-75.5 47.5t-58 81.5t-20 119.5v103q0 148 123 217q-123 70 -123 233v41q0 306 355 306q59 0 122 -6.5t96 -13.5l34 -7q38 -9 38 -41v-82q0 -17 -10.5 -26.5 t-27.5 -6.5q-133 23 -248 23q-185 0 -185 -131v-41q0 -56 36 -85t104 -46l110 -29q56 -14 96.5 -32t81.5 -51t62.5 -87t21.5 -127v-102q0 -84 -28 -134t-82 -81q110 -75 110 -236v-41q0 -168 -86.5 -242.5t-265.5 -74.5q-67 0 -143 9.5t-119 18.5l-43 9q-39 9 -39 43v88z M317 590q0 -56 36 -85t104 -46l108 -29q90 35 90 137v103q0 35 -11 59.5t-35 41t-47 26t-62 20.5l-82 23q-101 -43 -101 -148v-102z"/> + <glyph unicode="¨" horiz-adv-x="798" + d="M143 1298v97q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-97q0 -17 -10.5 -27.5t-27.5 -10.5h-97q-17 0 -28 10.5t-11 27.5zM481 1298v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="©" horiz-adv-x="1576" + d="M143 604v246q0 134 32 239.5t88.5 177t138 119t177.5 68.5t209 21q143 0 257.5 -34.5t203 -106.5t137 -195t48.5 -289v-246q0 -134 -32 -239.5t-89 -177t-138.5 -118.5t-177 -68t-209.5 -21q-143 0 -257.5 34.5t-203 106.5t-136.5 194.5t-48 288.5zM338 604 q0 -450 450 -450q451 0 451 450v246q0 450 -451 450q-450 0 -450 -450v-246zM471 666v122q0 174 92 271.5t266 97.5q36 0 75 -4t60 -8l21 -4q39 -8 39 -43v-88q0 -32 -39 -29q-65 12 -145 12q-99 0 -147 -56t-48 -149v-122q0 -94 47 -149.5t148 -55.5q28 0 64 3t58 6l23 3 q39 3 39 -29v-88q0 -35 -39 -43q-72 -16 -156 -16q-174 0 -266 97.5t-92 271.5z"/> + <glyph unicode="ª" horiz-adv-x="993" + d="M123 707q0 311 344 311q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126.5 -8.5t-105.5 -16.5l-37 -8q-39 -8 -39 33v78q0 34 39 43q13 5 37 12t98.5 19t149.5 12q179 0 260.5 -88.5t81.5 -270.5v-647q0 -17 -11 -28t-28 -11h-96 q-17 0 -28 11t-11 28v23q-120 -82 -246 -82q-148 0 -227.5 77t-79.5 220zM164 39v76q0 17 11 28t28 11h608q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-608q-17 0 -28 11t-11 28zM297 707q0 -69 39.5 -106.5t114.5 -37.5q89 0 225 70v237h-205q-92 0 -133 -40t-41 -123 z"/> + <glyph unicode="«" horiz-adv-x="1003" + d="M137 651q-15 26 2 54l166 280q9 14 12.5 20t13 12.5t21.5 6.5h123q18 0 26 -12t-1 -27l-183 -309l183 -309q9 -15 1 -27t-26 -12h-123q-12 0 -21.5 6.5t-13 12.5t-12.5 20zM496 651q-15 26 2 54l166 280q9 14 12.5 20t13 12.5t21.5 6.5h123q17 0 25 -12t-1 -27l-182 -309 l182 -309q9 -15 1 -27t-25 -12h-123q-12 0 -21.5 6.5t-13 12.5t-12.5 20z"/> + <glyph unicode="¬" + d="M123 684v76q0 17 11 28t28 11h700q17 0 28 -11t11 -28v-404q0 -17 -11 -28t-28 -11h-86q-17 0 -28 11t-11 28v289h-575q-17 0 -28 11t-11 28z"/> + <glyph unicode="­" horiz-adv-x="696" + d="M123 684v76q0 17 11 28t28 11h373q17 0 27.5 -11t10.5 -28v-76q0 -17 -10.5 -28t-27.5 -11h-373q-17 0 -28 11t-11 28z"/> + <glyph unicode="®" horiz-adv-x="1576" + d="M143 604v246q0 134 32 239.5t88.5 177t138 119t177.5 68.5t209 21q143 0 257.5 -34.5t203 -106.5t137 -195t48.5 -289v-246q0 -134 -32 -239.5t-89 -177t-138.5 -118.5t-177 -68t-209.5 -21q-143 0 -257.5 34.5t-203 106.5t-136.5 194.5t-48 288.5zM338 604 q0 -450 450 -450q451 0 451 450v246q0 450 -451 450q-450 0 -450 -450v-246zM502 356v742q0 17 11 28t28 11h288q287 0 287 -256q0 -214 -201 -250l195 -275q9 -14 1.5 -26.5t-24.5 -12.5h-126q-30 0 -52 33l-194 275h-39v-269q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11 t-11 28zM676 778h153q52 0 82.5 25.5t30.5 77.5q0 102 -113 102h-153v-205z"/> + <glyph unicode="¯" horiz-adv-x="768" + d="M143 1298v76q0 17 11 28t28 11h404q17 0 28 -11t11 -28v-76q0 -17 -11 -27.5t-28 -10.5h-404q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="°" horiz-adv-x="1013" + d="M143 1004v102q0 174 95 271.5t270 97.5t268.5 -97.5t93.5 -271.5v-102q0 -174 -93.5 -271.5t-268.5 -97.5t-270 97.5t-95 271.5zM317 1004q0 -96 46 -156t145 -60q98 0 143 60t45 156v102q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-102z"/> + <glyph unicode="±" + d="M123 39v76q0 17 11 28t28 11h700q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-700q-17 0 -28 11t-11 28zM123 684v76q0 17 11 28t28 11h268v288q0 17 11 28t28 11h86q17 0 28 -11t11 -28v-288h268q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-268v-289 q0 -17 -11 -28t-28 -11h-86q-17 0 -28 11t-11 28v289h-268q-17 0 -28 11t-11 28z"/> + <glyph unicode="²" horiz-adv-x="696" + d="M90 621v178q0 68 25.5 119.5t63.5 79.5t83 52t83 40t63.5 40.5t25.5 55.5v47q0 44 -26.5 65t-85.5 21q-35 0 -83 -5.5t-79 -11.5l-31 -6q-39 -3 -39 29v86q0 17 9 25.5t30 13.5q93 25 195 25q284 0 284 -238v-51q0 -55 -19 -97.5t-49.5 -68t-67 -45.5t-73 -36t-67 -33.5 t-49.5 -44.5t-19 -62v-62h305q17 0 28 -11t11 -28v-77q0 -17 -11 -28t-28 -11h-440q-17 0 -28 11t-11 28z"/> + <glyph unicode="³" horiz-adv-x="696" + d="M74 629v86q0 29 39 26q130 -24 196 -24q121 0 121 96v57q0 86 -119 86h-137q-17 0 -28 11t-11 28v78q0 17 11 28t28 11h113q119 0 119 84v35q0 88 -105 88q-29 0 -76 -6.5t-79 -12.5l-33 -6q-39 -3 -39 29v86q0 34 39 39q100 27 192 27q275 0 275 -238v-41 q0 -97 -78 -152q102 -57 102 -174v-63q0 -124 -76.5 -185t-216.5 -61q-45 0 -94.5 6.5t-76.5 13.5l-27 7q-39 9 -39 41z"/> + <glyph unicode="´" horiz-adv-x="622" + d="M139.5 1462.5q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5z"/> + <glyph unicode="µ" horiz-adv-x="1013" + d="M143 -350v1335q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-64 0 -117 16v-346q0 -17 -10.5 -28 t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="¶" horiz-adv-x="1290" + d="M102 1034q0 205 115 312.5t336 107.5h207q17 0 28 -11t11 -28v-1376q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v575h-72q-221 0 -336 107.5t-115 312.5zM276 1034q0 -120 71 -188t206 -68h72v512h-72q-135 0 -206 -68t-71 -188zM973 39v1376q0 17 11 28t28 11h96 q17 0 28 -11t11 -28v-1376q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="·" horiz-adv-x="460" + d="M143 684v96q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-96q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="¸" horiz-adv-x="593" + d="M143 -340q0 33 39 33h19q96 0 96 74q0 69 -84 69h-31q-35 0 -28 39l47 207h112l-34 -160h8q29 0 54 -6t52 -21.5t42.5 -48.5t15.5 -82q0 -50 -16 -86t-43.5 -54t-57 -26t-64.5 -8q-22 0 -44 3t-33 5l-11 3q-39 10 -39 37v22z"/> + <glyph unicode="¹" horiz-adv-x="696" + d="M113 1276v82q0 29 39 39l198 57h107q17 0 28 -11t11 -28v-794q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v663l-175 -37q-34 -6 -34 29z"/> + <glyph unicode="º" horiz-adv-x="1013" + d="M143 39v76q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28zM143 778v328q0 174 95 271.5t270 97.5t268.5 -97.5t93.5 -271.5v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM317 778q0 -96 46 -155.5t145 -59.5 q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328z"/> + <glyph unicode="»" horiz-adv-x="1003" + d="M144 340q-8 12 1 27l183 309l-183 309q-9 15 -1 27t26 12h123q12 0 21.5 -6.5t13 -12.5t12.5 -20l166 -280q17 -28 2 -54l-168 -284q-9 -14 -12.5 -20t-13 -12.5t-21.5 -6.5h-123q-18 0 -26 12zM503 340q-8 12 1 27l182 309l-182 309q-9 15 -1 27t25 12h123 q12 0 21.5 -6.5t13 -12.5t12.5 -20l166 -280q17 -28 2 -54l-168 -284q-9 -14 -12.5 -20t-13 -12.5t-21.5 -6.5h-123q-17 0 -25 12z"/> + <glyph unicode="¼" horiz-adv-x="1894" + d="M113 1276v82q0 29 39 39l198 57h107q17 0 28 -11t11 -28v-794q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v663l-175 -37q-34 -6 -34 29zM510 39l670 1376q20 39 47 39h131q17 0 25 -12t1 -27l-669 -1376q-19 -39 -47 -39h-131q-17 0 -25.5 12t-1.5 27zM1223 176 v94q143 200 143 457v107q0 17 11 27.5t28 10.5h96q17 0 28 -10.5t11 -27.5v-107q0 -136 -28 -239t-87 -195h185v301q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-301h47q17 0 28 -11t11 -28v-78q0 -17 -11 -28t-28 -11h-47v-98q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28 v98h-348q-17 0 -28 11t-11 28z"/> + <glyph unicode="½" horiz-adv-x="1894" + d="M113 1276v82q0 29 39 39l198 57h107q17 0 28 -11t11 -28v-794q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v663l-175 -37q-34 -6 -34 29zM510 39l670 1376q20 39 47 39h131q17 0 25 -12t1 -27l-669 -1376q-19 -39 -47 -39h-131q-17 0 -25.5 12t-1.5 27zM1288 39 v178q0 68 25.5 119.5t63.5 79.5t83 52t83 40t63.5 40.5t25.5 55.5v47q0 44 -26.5 65t-85.5 21q-35 0 -83 -5.5t-79 -11.5l-31 -5q-39 -3 -39 28v86q0 17 9 25.5t30 13.5q93 25 195 25q284 0 284 -238v-51q0 -55 -19 -97.5t-49.5 -68t-67 -45.5t-73 -36t-67 -33.5 t-49.5 -44.5t-19 -62v-61h305q17 0 28 -11t11 -28v-78q0 -17 -11 -28t-28 -11h-440q-17 0 -28 11t-11 28z"/> + <glyph unicode="¾" horiz-adv-x="1894" + d="M74 629v86q0 29 39 26q130 -24 196 -24q121 0 121 96v57q0 86 -119 86h-137q-17 0 -28 11t-11 28v78q0 17 11 28t28 11h113q119 0 119 84v35q0 88 -105 88q-29 0 -76 -6.5t-79 -12.5l-33 -6q-39 -3 -39 29v86q0 34 39 39q100 27 192 27q275 0 275 -238v-41 q0 -97 -78 -152q102 -57 102 -174v-63q0 -124 -76.5 -185t-216.5 -61q-45 0 -94.5 6.5t-76.5 13.5l-27 7q-39 9 -39 41zM510 39l670 1376q20 39 47 39h131q17 0 25 -12t1 -27l-669 -1376q-19 -39 -47 -39h-131q-17 0 -25.5 12t-1.5 27zM1223 176v94q143 200 143 457v107 q0 17 11 27.5t28 10.5h96q17 0 28 -10.5t11 -27.5v-107q0 -136 -28 -239t-87 -195h185v301q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-301h47q17 0 28 -11t11 -28v-78q0 -17 -11 -28t-28 -11h-47v-98q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v98h-348q-17 0 -28 11 t-11 28z"/> + <glyph unicode="¿" horiz-adv-x="849" + d="M123 -47q0 98 33 159t94 115l55 49q55 50 80 101t25 135v94q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-94q0 -135 -38 -211.5t-108 -136.5l-59 -51q-82 -71 -82 -160v-31q0 -91 45 -129.5t139 -38.5q51 0 114 6t101 12l37 7q35 3 35 -29v-88q0 -35 -39 -41 q-115 -31 -252 -31q-354 0 -354 332v31zM389 889v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="À" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM303.5 1830.5q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39 l-146 209q-9 14 -3.5 26.5zM344 451h449l-224 723z"/> + <glyph unicode="Á" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM344 451h449l-224 723zM492 1569q-5 13 4 26l135 209q26 39 55 39h127q17 0 22 -12.5t-4 -26.5 l-145 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="Â" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM272 1581v86q0 27 39 49l224 121q30 18 65 0l227 -121q39 -20 39 -49v-86q0 -16 -13 -20.5t-26 2.5 l-258 120l-258 -120q-13 -7 -26 -2.5t-13 20.5zM344 451h449l-224 723z"/> + <glyph unicode="Ã" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM272 1599v74q0 11 7 22t11.5 15.5t20.5 18.5q6 5 16 12.5t43.5 20t69.5 12.5q60 0 143.5 -37 t118.5 -37q25 0 56.5 13t49.5 25l19 13q15 7 27 1.5t12 -21.5v-74q0 -5 -1 -9t-3.5 -9t-4 -7.5t-7 -7.5t-7 -7t-8.5 -8t-8 -7q-6 -5 -16 -12.5t-43.5 -20.5t-69.5 -13q-46 0 -133.5 37t-128.5 37q-25 0 -56.5 -13t-49.5 -25l-19 -13q-15 -7 -27 -1.5t-12 21.5zM344 451h449 l-224 723z"/> + <glyph unicode="Ä" horiz-adv-x="1136" + d="M33 39l436 1376q10 39 45 39h109q35 0 45 -39l436 -1376q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM293 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11 t-11 28zM344 451h449l-224 723zM672 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="Å" horiz-adv-x="1136" + d="M33 39l407 1286q-106 48 -106 180q0 102 62.5 153.5t172.5 51.5q109 0 172.5 -52t63.5 -153q0 -132 -109 -182l408 -1284q4 -17 -4 -28t-25 -11h-112q-33 0 -43 39l-76 248h-551l-76 -248q-10 -39 -43 -39h-113q-17 0 -25 11t-3 28zM344 451h449l-224 723zM467 1505 q0 -92 102 -92q103 0 103 92t-103 92q-102 0 -102 -92z"/> + <glyph unicode="Æ" horiz-adv-x="1617" + d="M37 41l551 1374q16 39 47 39h842q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-473v-471h432q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-432v-491h473q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-609q-17 0 -28 11t-11 28v289h-481l-117 -289 q-16 -39 -43 -39h-125q-17 0 -24.5 13t-1.5 28zM414 492h415v798h-94z"/> + <glyph unicode="Ç" horiz-adv-x="911" + d="M143 451v553q0 214 109 342.5t326 128.5q49 0 103 -5.5t83 -11.5l29 -6q19 -5 27.5 -13.5t8.5 -25.5v-90q0 -34 -38 -31q-115 19 -207 19q-70 0 -123 -25.5t-83.5 -69.5t-45.5 -97t-15 -115v-553q0 -62 14.5 -115.5t45 -97.5t84 -69.5t123.5 -25.5q36 0 88 4.5t86 9.5 l33 5q38 3 38 -31v-92q0 -17 -8.5 -25.5t-27.5 -13.5q-113 -20 -215 -20h-21l-12 -58h8q29 0 54 -6t52 -21.5t42.5 -48.5t15.5 -82q0 -50 -16 -86t-43 -54t-56.5 -26t-64.5 -8q-22 0 -44 3t-33 5l-11 3q-39 10 -39 37v22q0 33 39 33h18q96 0 96 74q0 69 -84 69h-30 q-17 0 -24.5 10.5t-4.5 28.5l26 119q-152 37 -227.5 158t-75.5 299z"/> + <glyph unicode="È" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-491h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28zM307.5 1830.5 q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5z"/> + <glyph unicode="É" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-491h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28zM410 1569q-5 13 4 26 l135 209q26 39 55 39h127q17 0 22.5 -12.5t-3.5 -26.5l-146 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="Ê" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-491h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28zM211 1581v86 q0 27 39 49l223 121q30 18 66 0l227 -121q39 -20 39 -49v-86q0 -16 -12.5 -20.5t-26.5 2.5l-258 120l-258 -120q-14 -7 -26.5 -2.5t-12.5 20.5z"/> + <glyph unicode="Ë" horiz-adv-x="972" + d="M143 39v1376q0 17 11 28t28 11h649q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-514v-471h474q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-491h514q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-649q-17 0 -28 11t-11 28zM258 1595v97 q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28zM596 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="Ì" horiz-adv-x="911" + d="M61 39v65q0 17 11 28t28 11h269v1168h-269q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h711q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-268v-1168h268q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28zM197 1830.5q5 12.5 22 12.5h127 q29 0 55 -39l136 -209q9 -13 3.5 -26t-22.5 -13h-117q-29 0 -55 39l-145 209q-9 14 -4 26.5z"/> + <glyph unicode="Í" horiz-adv-x="911" + d="M61 39v65q0 17 11 28t28 11h269v1168h-269q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h711q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-268v-1168h268q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28zM389.5 1569q-5.5 13 3.5 26l135 209 q26 39 56 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -56 -39h-116q-17 0 -22.5 13z"/> + <glyph unicode="Î" horiz-adv-x="911" + d="M61 39v65q0 17 11 28t28 11h269v1168h-269q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h711q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-268v-1168h268q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28zM160 1581v86q0 27 39 49l223 121 q30 18 65 0l228 -121q39 -20 39 -49v-86q0 -16 -13 -20.5t-26 2.5l-258 120l-258 -120q-13 -7 -26 -2.5t-13 20.5z"/> + <glyph unicode="Ï" horiz-adv-x="911" + d="M61 39v65q0 17 11 28t28 11h269v1168h-269q-17 0 -28 11t-11 28v65q0 17 11 28t28 11h711q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-268v-1168h268q17 0 28 -11t11 -28v-65q0 -17 -11 -28t-28 -11h-711q-17 0 -28 11t-11 28zM201 1595v97q0 17 11 28t28 11h96 q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28zM539 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="Ð" horiz-adv-x="1187" + d="M143 39v1376q0 17 11 28t28 11h412q225 0 337.5 -128t112.5 -343v-512q0 -215 -112.5 -343t-337.5 -128h-412q-17 0 -28 11t-11 28zM317 164h277q73 0 128 25.5t86.5 69.5t46.5 97t15 115v512q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5h-277v-471h392q17 0 28 -11 t11 -28v-86q0 -17 -11 -28t-28 -11h-392v-491z"/> + <glyph unicode="Ñ" horiz-adv-x="1187" + d="M143 39v1376q0 17 11 28t28 11h107q18 0 28 -8.5t19 -26.5l534 -1038v1034q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-1376q0 -17 -10.5 -28t-27.5 -11h-109q-27 0 -47 39l-533 1034v-1034q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM297 1599v74 q0 11 7 22t11.5 15.5t20.5 18.5q6 5 16 12.5t43.5 20t69.5 12.5q60 0 143.5 -37t118.5 -37q25 0 56.5 13t50.5 25l18 13q15 7 27 1.5t12 -21.5v-74q0 -5 -1 -9t-3.5 -9t-4 -7.5t-7 -7.5t-7 -7t-8.5 -8t-8 -7q-6 -5 -16 -12.5t-43.5 -20.5t-69.5 -13q-46 0 -133.5 37 t-128.5 37q-25 0 -56.5 -13t-50.5 -25l-18 -13q-15 -7 -27 -1.5t-12 21.5z"/> + <glyph unicode="Ò" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115 v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553zM342.5 1830.5q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5z"/> + <glyph unicode="Ó" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115 v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553zM512.5 1569q-5.5 13 3.5 26l135 209q26 39 56 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -56 -39h-116q-17 0 -22.5 13z"/> + <glyph unicode="Ô" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM297 1581v86q0 27 39 49l223 121q30 18 66 0l227 -121q39 -20 39 -49v-86q0 -16 -12.5 -20.5 t-26.5 2.5l-258 120l-258 -120q-14 -7 -26.5 -2.5t-12.5 20.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553z"/> + <glyph unicode="Õ" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM297 1599v74q0 11 7 22t11.5 15.5t20.5 18.5q6 5 16 12.5t43.5 20t69.5 12.5q60 0 143.5 -37 t118.5 -37q25 0 56.5 13t50.5 25l18 13q15 7 27 1.5t12 -21.5v-74q0 -5 -1 -9t-3.5 -9t-4 -7.5t-7 -7.5t-7 -7t-8.5 -8t-8 -7q-6 -5 -16 -12.5t-43.5 -20.5t-69.5 -13q-46 0 -133.5 37t-128.5 37q-25 0 -56.5 -13t-50.5 -25l-18 -13q-15 -7 -27 -1.5t-12 21.5zM317 451 q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553z"/> + <glyph unicode="Ö" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q225 0 337.5 -128t112.5 -343v-553q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM293 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96 q-17 0 -28 11t-11 28zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553zM723 1595v97q0 17 11 28t28 11h96q17 0 28 -11 t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="×" horiz-adv-x="942" + d="M138 486.5q0 15.5 12 27.5l202 203l-202 203q-12 12 -12 27.5t12 27.5l63 61q12 12 27.5 12t27.5 -12l203 -202l203 204q12 12 27.5 12t27.5 -12l64 -63q12 -12 12 -27.5t-12 -27.5l-203 -203l203 -203q12 -12 12 -27.5t-12 -27.5l-62 -62q-12 -12 -27.5 -12t-27.5 12 l-205 203l-205 -203q-12 -12 -27.5 -12t-27.5 12l-61 62q-12 12 -12 27.5z"/> + <glyph unicode="Ø" horiz-adv-x="1187" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q84 0 164 -23l59 170q15 37 43 37h105q17 0 24.5 -11t1.5 -26l-86 -248q139 -122 139 -370v-553q0 -215 -112.5 -343t-337.5 -128q-87 0 -164 22l-59 -170q-15 -37 -43 -37h-105q-17 0 -24.5 11t-1.5 26l86 248 q-140 123 -140 371zM317 451q0 -101 35 -170l350 1011q-49 19 -108 19q-73 0 -128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553zM485 162q49 -19 109 -19q73 0 128 25.5t86.5 70t46.5 97.5t15 115v553q0 103 -34 170z"/> + <glyph unicode="Ù" horiz-adv-x="1187" + d="M143 451v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99 t-81 148.5t-27 188.5zM356.5 1830.5q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5z"/> + <glyph unicode="Ú" horiz-adv-x="1187" + d="M143 451v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99 t-81 148.5t-27 188.5zM533 1569q-5 13 4 26l135 209q26 39 55 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="Û" horiz-adv-x="1187" + d="M143 451v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99 t-81 148.5t-27 188.5zM297 1581v86q0 27 39 49l223 121q30 18 66 0l227 -121q39 -20 39 -49v-86q0 -16 -12.5 -20.5t-26.5 2.5l-258 120l-258 -120q-14 -7 -26.5 -2.5t-12.5 20.5z"/> + <glyph unicode="Ü" horiz-adv-x="1187" + d="M143 451v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v964q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-964q0 -215 -112.5 -343t-337.5 -128q-115 0 -202 35t-141 99 t-81 148.5t-27 188.5zM338 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28zM676 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="Ý" horiz-adv-x="1075" + d="M39 1413q-7 15 1.5 28t25.5 13h116q33 0 49 -39l308 -708l305 708q16 39 49 39h117q17 0 25.5 -13t0.5 -28l-411 -911v-463q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v463zM479.5 1569q-5.5 13 3.5 26l135 209q26 39 56 39h127q17 0 22 -12.5t-4 -26.5 l-145 -209q-26 -39 -56 -39h-116q-17 0 -22.5 13z"/> + <glyph unicode="Þ" horiz-adv-x="1126" + d="M143 39v1376q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-248h236q221 0 336 -107.5t115 -311.5q0 -205 -115 -312.5t-336 -107.5h-236v-289q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM317 492h236q134 0 205 67.5t71 188.5t-71 188.5t-205 67.5h-236v-512z "/> + <glyph unicode="ß" horiz-adv-x="1126" + d="M143 39v1098q0 157 92 247.5t252 90.5q146 0 239 -82t93 -236q0 -69 -25.5 -137t-56.5 -111t-56.5 -86.5t-25.5 -68.5q0 -32 19 -57.5t50 -44.5t68.5 -38.5t74.5 -46t68 -60.5t50 -88t19 -122q0 -166 -79.5 -241.5t-232.5 -75.5q-67 0 -125 4.5t-83 9.5l-25 4 q-39 9 -39 43v88q0 34 39 31q96 -21 217 -21q153 0 153 142q0 47 -19 82t-50 57t-68 40.5t-74 40t-68 49t-50 73t-19 106.5q0 48 17 95t41 85.5t48 76t41 82t17 89.5q0 73 -47.5 113.5t-110.5 40.5q-76 0 -123 -47.5t-47 -133.5v-1091q0 -17 -10.5 -28t-27.5 -11h-97 q-17 0 -28 11t-11 28z"/> + <glyph unicode="à" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM227.5 1462.5q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5 t-41.5 -123.5z"/> + <glyph unicode="á" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5t-41.5 -123.5zM412 1201q-5 13 4 26l135 209q26 39 55 39h127q17 0 22.5 -12.5t-3.5 -26.5l-146 -209q-26 -39 -55 -39h-117 q-17 0 -22 13z"/> + <glyph unicode="â" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM190 1190v86q0 27 39 49l224 121q30 18 65 0l227 -121q39 -19 39 -49v-86q0 -16 -13 -21t-26 2l-258 121l-258 -121q-13 -7 -26 -2t-13 21zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204 q-92 0 -133.5 -40.5t-41.5 -123.5z"/> + <glyph unicode="ã" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM190 1255v74q0 5 1 9t3.5 9t4 7.5t7 7.5t7 7t8.5 8t8 7q6 5 16 12.5t43.5 20.5t69.5 13q60 0 144 -37t119 -37q25 0 56 13t49 25l19 13q15 7 27 1.5t12 -22.5v-73q0 -11 -7 -22t-11.5 -15.5t-20.5 -18.5 q-6 -5 -16 -12.5t-43.5 -20t-69.5 -12.5q-46 0 -133.5 37t-128.5 37q-25 0 -56.5 -13t-49.5 -25l-19 -13q-15 -7 -27 -1.5t-12 21.5zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5t-41.5 -123.5z"/> + <glyph unicode="ä" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM231 1298v97q0 17 11 28t28 11h97q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-97q-17 0 -28 10.5t-11 27.5zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5t-41.5 -123.5z M569 1298v97q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-97q0 -17 -10.5 -27.5t-27.5 -10.5h-97q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="å" horiz-adv-x="972" + d="M102 276q0 312 344 312q32 0 84.5 -2.5t88.5 -5.5l36 -2v108q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q179 0 260.5 -88.5t81.5 -269.5v-647q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11 t-11 28v22q-119 -81 -245 -81q-148 0 -228 77t-80 219zM252 1311q0 102 62.5 153.5t172.5 51.5q109 0 172.5 -52t63.5 -153q0 -102 -63 -153.5t-173 -51.5q-109 0 -172 52t-63 153zM276 276q0 -68 39 -105.5t115 -37.5q89 0 225 70v237h-204q-92 0 -133.5 -40.5 t-41.5 -123.5zM385 1311q0 -92 102 -92q103 0 103 92t-103 92q-102 0 -102 -92z"/> + <glyph unicode="æ" horiz-adv-x="1505" + d="M102 276q0 312 344 312q120 0 209 -13v111q0 96 -42.5 145.5t-141.5 49.5q-59 0 -126 -8.5t-105 -16.5l-37 -8q-39 -8 -39 33v77q0 34 39 43q13 5 37 12t98 19t149 12q197 0 273 -110q93 110 270 110q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5 t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 101 6.5t92 13.5l35 7q38 3 38 -33v-86q0 -32 -38 -41q-125 -26 -234 -26q-221 0 -328 153q-59 -59 -144 -106t-187 -47q-148 0 -228 77t-80 219zM276 276q0 -68 39 -105.5t115 -37.5q102 0 264 92q-36 93 -39 215h-204 q-92 0 -133.5 -40.5t-41.5 -123.5zM829 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100z"/> + <glyph unicode="ç" horiz-adv-x="798" + d="M143 348v328q0 174 92 271t267 97q43 0 87 -4.5t67 -9.5l22 -4q39 -3 39 -43v-84q0 -34 -41 -31q-84 13 -164 13q-99 0 -147 -56t-48 -149v-328q0 -94 47 -149.5t148 -55.5q36 0 78 3.5t66 6.5l24 3q37 3 37 -31v-84q0 -35 -39 -43q-92 -18 -176 -18h-21l-12 -58h8 q29 0 54 -6t52 -21.5t42.5 -48.5t15.5 -82q0 -50 -16 -86t-43 -54t-56.5 -26t-64.5 -8q-22 0 -44 3t-33 5l-11 3q-39 10 -39 37v22q0 33 39 33h18q96 0 96 74q0 69 -84 69h-30q-17 0 -24.5 10.5t-4.5 28.5l27 121q-112 32 -170 122.5t-58 229.5z"/> + <glyph unicode="è" horiz-adv-x="972" + d="M123 475v86q0 231 92.5 357t282.5 126q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41q-124 -26 -233 -26q-193 0 -303.5 120.5 t-110.5 374.5zM234 1462.5q5 12.5 22 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-145 209q-9 14 -4 26.5zM297 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100z"/> + <glyph unicode="é" horiz-adv-x="972" + d="M123 475v86q0 231 92.5 357t282.5 126q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41q-124 -26 -233 -26q-193 0 -303.5 120.5 t-110.5 374.5zM297 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100zM420 1201q-5 13 4 26l135 209q26 39 55 39h127q17 0 22.5 -12.5t-3.5 -26.5l-146 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="ê" horiz-adv-x="972" + d="M123 475v86q0 231 92.5 357t282.5 126q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41q-124 -26 -233 -26q-193 0 -303.5 120.5 t-110.5 374.5zM190 1190v86q0 27 39 49l224 121q30 18 65 0l227 -121q39 -19 39 -49v-86q0 -16 -13 -21t-26 2l-258 121l-258 -121q-13 -7 -26 -2t-13 21zM297 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100z"/> + <glyph unicode="ë" horiz-adv-x="972" + d="M123 475v86q0 231 92.5 357t282.5 126q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41q-124 -26 -233 -26q-193 0 -303.5 120.5 t-110.5 374.5zM231 1298v97q0 17 11 28t28 11h97q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-97q-17 0 -28 10.5t-11 27.5zM297 588h385v39q0 270 -182 270q-48 0 -84 -15.5t-58 -42t-36 -67t-19 -84.5t-6 -100zM569 1298v97q0 17 11 28t28 11h97q17 0 27.5 -11 t10.5 -28v-97q0 -17 -10.5 -27.5t-27.5 -10.5h-97q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="ì" horiz-adv-x="460" + d="M-24 1462.5q5 12.5 22 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-145 209q-9 14 -4 26.5zM143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-946q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="í" horiz-adv-x="460" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-946q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM156 1201q-5 13 4 26l135 209q26 39 55 39h127q17 0 22.5 -12.5t-3.5 -26.5l-146 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="î" horiz-adv-x="460" + d="M-66 1190v86q0 27 39 49l224 121q30 18 65 0l227 -121q39 -19 39 -49v-86q0 -16 -13 -21t-26 2l-258 121l-258 -121q-13 -7 -26 -2t-13 21zM143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-946q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z"/> + <glyph unicode="ï" horiz-adv-x="460" + d="M-25 1298v97q0 17 11 28t28 11h97q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-97q-17 0 -28 10.5t-11 27.5zM143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-946q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM313 1298v97q0 17 11 28t28 11 h97q17 0 27.5 -11t10.5 -28v-97q0 -17 -10.5 -27.5t-27.5 -10.5h-97q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="ð" horiz-adv-x="1064" + d="M143 369v327q0 165 82 256.5t246 91.5q142 0 277 -104v104q0 16 -5 74l-131 -41q-17 -4 -28 4t-11 25v76q0 29 39 39l84 26q-58 74 -184 74q-36 0 -98 -7.5t-106 -14.5l-44 -7q-39 -3 -39 29v82q0 18 10.5 30t28.5 13q137 29 248 29q254 0 354 -175l119 39q15 5 27 -3 t12 -25v-76q0 -27 -39 -39l-74 -25q11 -54 11 -127v-675q0 -186 -102.5 -287.5t-287.5 -101.5q-186 0 -287.5 101.5t-101.5 287.5zM317 369q0 -105 53.5 -170.5t161.5 -65.5q110 0 163 65.5t53 170.5v434q-150 88 -256 88q-89 0 -132 -53.5t-43 -141.5v-327z"/> + <glyph unicode="ñ" horiz-adv-x="1013" + d="M143 39v946q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-33q117 92 263 92q156 0 223 -89t67 -259v-657q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v657q0 91 -32.5 137t-122.5 46q-95 0 -224 -76v-764q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28z M211 1255v74q0 5 1 9t3.5 9t4 7.5t7 7.5t7 7t8.5 8t8 7q6 5 16 12.5t43.5 20.5t69.5 13q60 0 143.5 -37t118.5 -37q25 0 56.5 13t50.5 25l18 13q15 7 27 1.5t12 -22.5v-73q0 -11 -7 -22t-11.5 -15.5t-20.5 -18.5q-6 -5 -16 -12.5t-43.5 -20t-69.5 -12.5q-46 0 -133.5 37 t-128.5 37q-25 0 -56.5 -13t-50.5 -25l-18 -13q-15 -7 -27 -1.5t-12 21.5z"/> + <glyph unicode="ò" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM240 1462.5q5 12.5 22 12.5h127q29 0 55 -39l136 -209q9 -13 3.5 -26t-22.5 -13h-117q-29 0 -55 39l-145 209q-9 14 -4 26.5zM307 348 q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328z"/> + <glyph unicode="ó" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM307 348q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328zM406 1201 q-5 13 4 26l135 209q26 39 55 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -55 -39h-117q-17 0 -22 13z"/> + <glyph unicode="ô" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM201 1190v86q0 27 39 49l223 121q30 18 65 0l228 -121q39 -19 39 -49v-86q0 -16 -12.5 -21t-26.5 2l-258 121l-258 -121q-14 -7 -26.5 -2t-12.5 21z M307 348q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328z"/> + <glyph unicode="õ" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM201 1255v74q0 5 1 9t3.5 9t4 7.5t7 7.5t7 7t8.5 8t8 7q6 5 16 12.5t43.5 20.5t69.5 13q60 0 143.5 -37t118.5 -37q25 0 56.5 13t50.5 25l18 13 q15 7 27 1.5t12 -22.5v-73q0 -11 -7 -22t-11.5 -15.5t-20.5 -18.5q-6 -5 -16 -12.5t-43.5 -20t-69.5 -12.5q-46 0 -133.5 37t-128.5 37q-25 0 -56.5 -13t-50.5 -25l-18 -13q-15 -7 -27 -1.5t-12 21.5zM307 348q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328 q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328z"/> + <glyph unicode="ö" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5t268.5 -97t93.5 -271v-328q0 -174 -93.5 -271t-268.5 -97t-270 97.5t-95 270.5zM242 1298v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5zM307 348q0 -96 46 -155.5 t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328zM580 1298v97q0 17 10.5 28t27.5 11h97q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-97q-17 0 -27.5 10.5t-10.5 27.5z"/> + <glyph unicode="÷" + d="M123 684v76q0 17 11 28t28 11h700q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-700q-17 0 -28 11t-11 28zM420 356v97q0 17 11 28t28 11h106q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-106q-17 0 -28 11t-11 28zM420 991v96q0 17 11 28t28 11h106q17 0 28 -11 t11 -28v-96q0 -17 -11 -28t-28 -11h-106q-17 0 -28 11t-11 28z"/> + <glyph unicode="ø" horiz-adv-x="993" + d="M133 348v328q0 173 95 270.5t270 97.5q48 0 100 -10l55 158q15 37 43 37h105q17 0 24.5 -11t1.5 -26l-82 -225q115 -95 115 -291v-328q0 -174 -93.5 -271t-268.5 -97q-49 0 -101 10l-57 -158q-15 -37 -43 -37h-104q-17 0 -25 11t-2 26l82 227q-115 98 -115 289zM307 348 q0 -63 23 -117l233 652q-24 8 -65 8q-99 0 -145 -59.5t-46 -155.5v-328zM430 141q27 -8 68 -8q98 0 143 59.5t45 155.5v328q0 62 -22 117z"/> + <glyph unicode="ù" horiz-adv-x="1013" + d="M143 328v657q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-156 0 -223.5 89t-67.5 259zM268.5 1462.5 q5.5 12.5 22.5 12.5h127q29 0 55 -39l135 -209q9 -13 4 -26t-22 -13h-117q-29 0 -55 39l-146 209q-9 14 -3.5 26.5z"/> + <glyph unicode="ú" horiz-adv-x="1013" + d="M143 328v657q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-156 0 -223.5 89t-67.5 259zM436.5 1201 q-5.5 13 3.5 26l135 209q26 39 56 39h127q17 0 22 -12.5t-4 -26.5l-145 -209q-26 -39 -56 -39h-116q-17 0 -22.5 13z"/> + <glyph unicode="û" horiz-adv-x="1013" + d="M143 328v657q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-156 0 -223.5 89t-67.5 259zM211 1190v86 q0 27 39 49l223 121q30 18 66 0l227 -121q39 -19 39 -49v-86q0 -16 -12.5 -21t-26.5 2l-258 121l-258 -121q-14 -7 -26.5 -2t-12.5 21z"/> + <glyph unicode="ü" horiz-adv-x="1013" + d="M143 328v657q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-657q0 -91 33 -137t123 -46q94 0 223 76v764q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-946q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v33q-117 -92 -262 -92q-156 0 -223.5 89t-67.5 259zM252 1298v97 q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5zM590 1298v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="ý" horiz-adv-x="921" + d="M35 983q-5 16 4 28.5t27 12.5h104q16 0 29 -11.5t18 -27.5l244 -733l244 733q5 16 18 27.5t29 11.5h104q18 0 27 -12.5t4 -28.5l-455 -1335q-11 -37 -43 -37h-110q-17 0 -26.5 11t-4.5 26l121 352zM395.5 1201q-5.5 13 3.5 26l136 209q26 39 55 39h127q17 0 22 -12.5 t-4 -26.5l-145 -209q-26 -39 -55 -39h-117q-17 0 -22.5 13z"/> + <glyph unicode="þ" horiz-adv-x="1013" + d="M143 -350v1765q0 17 11 28t28 11h97q17 0 27.5 -11t10.5 -28v-440q110 69 226 69q163 0 245 -91.5t82 -256.5v-368q0 -328 -360 -328q-67 0 -193 14v-364q0 -17 -10.5 -28t-27.5 -11h-97q-17 0 -28 11t-11 28zM317 154h185q194 0 194 174v368q0 88 -42.5 141.5 t-131.5 53.5q-83 0 -205 -60v-677z"/> + <glyph unicode="ÿ" horiz-adv-x="921" + d="M35 983q-5 16 4 28.5t27 12.5h104q16 0 29 -11.5t18 -27.5l244 -733l244 733q5 16 18 27.5t29 11.5h104q18 0 27 -12.5t4 -28.5l-455 -1335q-11 -37 -43 -37h-110q-17 0 -26.5 11t-4.5 26l121 352zM205 1298v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97 q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5zM543 1298v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -27.5t-28 -10.5h-96q-17 0 -28 10.5t-11 27.5z"/> + <glyph unicode="Œ" horiz-adv-x="1658" + d="M143 451v553q0 104 27 188.5t81 148.5t141 99t202 35q188 0 276 -101v41q0 17 11 28t28 11h609q17 0 27.5 -11t10.5 -28v-86q0 -17 -10.5 -28t-27.5 -11h-474v-471h433q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-433v-491h474q17 0 27.5 -11t10.5 -28v-86 q0 -17 -10.5 -28t-27.5 -11h-609q-17 0 -28 11t-11 28v41q-87 -100 -276 -100q-115 0 -202 35t-141 99t-81 148.5t-27 188.5zM317 451q0 -62 15 -115.5t46.5 -97.5t87 -69.5t128.5 -25.5t128 25.5t86.5 70t46.5 97.5t15 115v553q0 62 -15 115t-46.5 97t-86.5 69.5t-128 25.5 t-128.5 -25.5t-87 -69.5t-46.5 -97t-15 -115v-553z"/> + <glyph unicode="œ" horiz-adv-x="1536" + d="M133 348v328q0 173 95 270.5t270 97.5q191 0 286 -118q95 118 277 118q93 0 162 -32t110 -90t60.5 -133t19.5 -168v-132q0 -17 -11 -27.5t-28 -10.5h-514q3 -158 67 -235t179 -77q44 0 100.5 6.5t91.5 13.5l35 7q18 2 28.5 -7t10.5 -26v-86q0 -32 -39 -41 q-124 -26 -233 -26q-203 0 -309 126q-91 -126 -293 -126q-175 0 -270 97.5t-95 270.5zM307 348q0 -96 46 -155.5t145 -59.5q98 0 143 59.5t45 155.5v328q0 97 -44.5 156t-143.5 59q-98 0 -144.5 -59.5t-46.5 -155.5v-328zM860 588h385v39q0 270 -182 270q-48 0 -84 -15.5 t-58 -42t-36 -67t-19 -84.5t-6 -100z"/> + <glyph unicode="Ÿ" horiz-adv-x="1075" + d="M39 1413q-7 15 1.5 28t25.5 13h116q33 0 49 -39l308 -708l305 708q16 39 49 39h117q17 0 25.5 -13t0.5 -28l-411 -911v-463q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v463zM283 1595v97q0 17 11 28t28 11h96q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-96 q-17 0 -28 11t-11 28zM621 1595v97q0 17 10.5 28t27.5 11h97q17 0 28 -11t11 -28v-97q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28z"/> + <glyph unicode="ˆ" horiz-adv-x="880" + d="M143 1190v86q0 27 39 49l224 121q30 18 65 0l227 -121q39 -19 39 -49v-86q0 -16 -12.5 -21t-26.5 2l-258 121l-258 -121q-14 -7 -26.5 -2t-12.5 21z"/> + <glyph unicode="˜" horiz-adv-x="880" + d="M143 1255v74q0 5 1 9t3.5 9t4 7.5t7 7.5t7 7t8.5 8t8 7q6 5 16 12.5t43.5 20.5t69.5 13q60 0 143.5 -37t118.5 -37q25 0 56.5 13t50.5 25l18 13q15 7 27 1.5t12 -22.5v-73q0 -11 -7 -22t-11.5 -15.5t-20.5 -18.5q-6 -5 -16 -12.5t-43.5 -20t-69.5 -12.5q-46 0 -133.5 37 t-128.5 37q-25 0 -56.5 -13t-50.5 -25l-18 -13q-15 -7 -27 -1.5t-12 21.5z"/> + <glyph unicode=" " horiz-adv-x="923"/> + <glyph unicode=" " horiz-adv-x="1846"/> + <glyph unicode=" " horiz-adv-x="923"/> + <glyph unicode=" " horiz-adv-x="1846"/> + <glyph unicode=" " horiz-adv-x="615"/> + <glyph unicode=" " horiz-adv-x="461"/> + <glyph unicode=" " horiz-adv-x="307"/> + <glyph unicode=" " horiz-adv-x="307"/> + <glyph unicode=" " horiz-adv-x="230"/> + <glyph unicode=" " horiz-adv-x="369"/> + <glyph unicode=" " horiz-adv-x="102"/> + <glyph unicode="‐" horiz-adv-x="696" + d="M123 684v76q0 17 11 28t28 11h373q17 0 27.5 -11t10.5 -28v-76q0 -17 -10.5 -28t-27.5 -11h-373q-17 0 -28 11t-11 28z"/> + <glyph unicode="‑" horiz-adv-x="696" + d="M123 684v76q0 17 11 28t28 11h373q17 0 27.5 -11t10.5 -28v-76q0 -17 -10.5 -28t-27.5 -11h-373q-17 0 -28 11t-11 28z"/> + <glyph unicode="‒" horiz-adv-x="696" + d="M123 684v76q0 17 11 28t28 11h373q17 0 27.5 -11t10.5 -28v-76q0 -17 -10.5 -28t-27.5 -11h-373q-17 0 -28 11t-11 28z"/> + <glyph unicode="–" horiz-adv-x="1228" + d="M123 684v76q0 17 11 28t28 11h905q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-905q-17 0 -28 11t-11 28z"/> + <glyph unicode="—" horiz-adv-x="1433" + d="M123 684v76q0 17 11 28t28 11h1110q17 0 28 -11t11 -28v-76q0 -17 -11 -28t-28 -11h-1110q-17 0 -28 11t-11 28z"/> + <glyph unicode="‘" horiz-adv-x="460" + d="M123 971v155l53 287q7 41 41 41h64q17 0 25 -11t5 -30l-35 -266h23q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="’" horiz-adv-x="460" + d="M123 1278v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-155l-53 -287q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28z"/> + <glyph unicode="‚" horiz-adv-x="460" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-156l-53 -286q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28z"/> + <glyph unicode="“" horiz-adv-x="798" + d="M123 971v155l53 287q7 41 41 41h64q17 0 25 -11t5 -30l-35 -266h23q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM461 971v155l53 287q7 41 41 41h63q17 0 25.5 -11t5.5 -30l-35 -266h23q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11 h-137q-17 0 -28 11t-11 28z"/> + <glyph unicode="”" horiz-adv-x="798" + d="M123 1278v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-155l-53 -287q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28zM461 1278v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-155l-53 -287q-7 -41 -41 -41h-64q-17 0 -25.5 11t-5.5 30 l35 266h-22q-17 0 -28 11t-11 28z"/> + <glyph unicode="„" horiz-adv-x="798" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-156l-53 -286q-7 -41 -41 -41h-64q-17 0 -25 11t-5 30l34 266h-22q-17 0 -28 11t-11 28zM461 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-156l-53 -286q-7 -41 -41 -41h-64q-17 0 -25.5 11t-5.5 30l35 266 h-22q-17 0 -28 11t-11 28z"/> + <glyph unicode="•" horiz-adv-x="583" + d="M143 623v219q0 17 11 28t28 11h219q17 0 28 -11t11 -28v-219q0 -17 -11 -28t-28 -11h-219q-17 0 -28 11t-11 28z"/> + <glyph unicode="…" horiz-adv-x="1300" + d="M123 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM543 39v137q0 17 11 28t28 11h137q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-137q-17 0 -28 11t-11 28zM963 39v137q0 17 10.5 28t27.5 11h138 q17 0 28 -11t11 -28v-137q0 -17 -11 -28t-28 -11h-138q-17 0 -27.5 11t-10.5 28z"/> + <glyph unicode=" " horiz-adv-x="369"/> + <glyph unicode="‹" horiz-adv-x="645" + d="M137 651q-15 26 2 54l166 280q9 14 12.5 20t13 12.5t21.5 6.5h123q18 0 26 -12t-1 -27l-183 -309l183 -309q9 -15 1 -27t-26 -12h-123q-12 0 -21.5 6.5t-13 12.5t-12.5 20z"/> + <glyph unicode="›" horiz-adv-x="645" + d="M144 340q-8 12 1 27l183 309l-183 309q-9 15 -1 27t26 12h123q12 0 21.5 -6.5t13 -12.5t12.5 -20l168 -285q14 -26 -2 -53l-166 -280q-9 -14 -12.5 -20t-13 -12.5t-21.5 -6.5h-123q-18 0 -26 12z"/> + <glyph unicode=" " horiz-adv-x="461"/> + <glyph unicode="€" + d="M37 520l10 86q2 18 12 28.5t27 10.5h170v164h-166q-17 0 -26 10.5t-7 28.5l11 86q3 39 38 39h150v31q0 214 108.5 342.5t325.5 128.5q53 0 106.5 -5.5t81.5 -11.5l27 -6q37 -3 37 -39v-90q0 -34 -37 -31q-125 19 -209 19q-70 0 -122.5 -25.5t-83 -69.5t-45.5 -97 t-15 -115v-31h414q17 0 26 -10.5t7 -28.5l-11 -86q-2 -18 -12 -28.5t-27 -10.5h-397v-164h393q17 0 26 -10.5t7 -28.5l-10 -86q-2 -18 -12 -28.5t-27 -10.5h-377v-30q0 -62 14.5 -115.5t45 -97.5t83.5 -69.5t123 -25.5q41 0 98 5.5t94 10.5l36 5q39 3 39 -31v-92 q0 -36 -37 -39q-138 -22 -236 -22q-145 0 -244.5 62t-144.5 165.5t-45 243.5v30h-186q-17 0 -26 10.5t-7 28.5z"/> + <glyph unicode="™" horiz-adv-x="1812" + d="M41 1329v86q0 17 11 28t28 11h618q17 0 28 -11t11 -28v-86q0 -17 -11 -28t-28 -11h-221v-524q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28v524h-223q-17 0 -28 11t-11 28zM799 766v649q0 17 11 28t28 11h127q29 0 47 -37l233 -418l232 418q19 37 47 37h127 q17 0 28 -11t11 -28v-649q0 -17 -11 -28t-28 -11h-97q-17 0 -27.5 11t-10.5 28v399l-164 -297q-20 -39 -47 -39h-121q-28 0 -47 39l-164 297v-399q0 -17 -11 -28t-28 -11h-96q-17 0 -28 11t-11 28z"/> + <glyph unicode="◼" d="M0 0v1024h1024v-1024h-1024z"/> + <hkern u1=" " u2="x" k="20"/> + <hkern u1=" " u2="v" k="20"/> + <hkern u1=" " u2="q" k="10"/> + <hkern u1=" " u2="X" k="20"/> + <hkern u1=" " u2="V" k="20"/> + <hkern u1="(" u2="x" k="-20"/> + <hkern u1="(" u2="v" k="20"/> + <hkern u1="(" u2="q" k="20"/> + <hkern u1="(" u2="X" k="-20"/> + <hkern u1="(" u2="V" k="-20"/> + <hkern u1="-" u2="x" k="20"/> + <hkern u1="-" u2="X" k="123"/> + <hkern u1="-" u2="V" k="61"/> + <hkern u1="." u2="–" k="82"/> + <hkern u1="." u2="x" k="-20"/> + <hkern u1="." u2="v" k="164"/> + <hkern u1="." u2="q" k="41"/> + <hkern u1="." u2="X" k="-41"/> + <hkern u1="." u2="V" k="205"/> + <hkern u1="/" u2="w" k="82"/> + <hkern u1="/" u2="/" k="164"/> + <hkern u1="A" u2="v" k="41"/> + <hkern u1="A" u2="V" k="61"/> + <hkern u1="A" u2="Q" k="20"/> + <hkern u1="A" u2="?" k="61"/> + <hkern u1="A" u2="," k="-41"/> + <hkern u1="B" g2="uniFB02" k="41"/> + <hkern u1="B" g2="uniFB01" k="41"/> + <hkern u1="B" u2="›" k="61"/> + <hkern u1="B" u2="…" k="41"/> + <hkern u1="B" u2="”" k="41"/> + <hkern u1="B" u2="’" k="41"/> + <hkern u1="B" u2="—" k="20"/> + <hkern u1="B" u2="–" k="20"/> + <hkern u1="B" u2="Ÿ" k="61"/> + <hkern u1="B" u2="œ" k="10"/> + <hkern u1="B" u2="ÿ" k="41"/> + <hkern u1="B" u2="ý" k="41"/> + <hkern u1="B" u2="ø" k="10"/> + <hkern u1="B" u2="ö" k="10"/> + <hkern u1="B" u2="õ" k="10"/> + <hkern u1="B" u2="ô" k="10"/> + <hkern u1="B" u2="ó" k="10"/> + <hkern u1="B" u2="ò" k="10"/> + <hkern u1="B" u2="ë" k="10"/> + <hkern u1="B" u2="ê" k="10"/> + <hkern u1="B" u2="é" k="10"/> + <hkern u1="B" u2="è" k="10"/> + <hkern u1="B" u2="ç" k="20"/> + <hkern u1="B" u2="æ" k="31"/> + <hkern u1="B" u2="å" k="31"/> + <hkern u1="B" u2="ä" k="31"/> + <hkern u1="B" u2="ã" k="31"/> + <hkern u1="B" u2="â" k="31"/> + <hkern u1="B" u2="á" k="31"/> + <hkern u1="B" u2="à" k="31"/> + <hkern u1="B" u2="Ý" k="61"/> + <hkern u1="B" u2="Õ" k="20"/> + <hkern u1="B" u2="Ô" k="20"/> + <hkern u1="B" u2="Ó" k="20"/> + <hkern u1="B" u2="Ò" k="20"/> + <hkern u1="B" u2="Ï" k="82"/> + <hkern u1="B" u2="Î" k="82"/> + <hkern u1="B" u2="Í" k="82"/> + <hkern u1="B" u2="Ì" k="82"/> + <hkern u1="B" u2="Ç" k="10"/> + <hkern u1="B" u2="Å" k="20"/> + <hkern u1="B" u2="Ä" k="20"/> + <hkern u1="B" u2="Ã" k="20"/> + <hkern u1="B" u2="Â" k="20"/> + <hkern u1="B" u2="Á" k="20"/> + <hkern u1="B" u2="À" k="20"/> + <hkern u1="B" u2="»" k="61"/> + <hkern u1="B" u2="­" k="20"/> + <hkern u1="B" u2="}" k="20"/> + <hkern u1="B" u2="z" k="-20"/> + <hkern u1="B" u2="y" k="41"/> + <hkern u1="B" u2="w" k="20"/> + <hkern u1="B" u2="t" k="10"/> + <hkern u1="B" u2="s" k="10"/> + <hkern u1="B" u2="o" k="10"/> + <hkern u1="B" u2="l" k="10"/> + <hkern u1="B" u2="g" k="20"/> + <hkern u1="B" u2="f" k="41"/> + <hkern u1="B" u2="e" k="10"/> + <hkern u1="B" u2="d" k="20"/> + <hkern u1="B" u2="c" k="20"/> + <hkern u1="B" u2="a" k="31"/> + <hkern u1="B" u2="]" k="20"/> + <hkern u1="B" u2="Z" k="20"/> + <hkern u1="B" u2="Y" k="61"/> + <hkern u1="B" u2="W" k="41"/> + <hkern u1="B" u2="T" k="102"/> + <hkern u1="B" u2="S" k="31"/> + <hkern u1="B" u2="Q" k="20"/> + <hkern u1="B" u2="O" k="20"/> + <hkern u1="B" u2="J" k="82"/> + <hkern u1="B" u2="I" k="82"/> + <hkern u1="B" u2="G" k="10"/> + <hkern u1="B" u2="C" k="10"/> + <hkern u1="B" u2="A" k="20"/> + <hkern u1="B" u2="." k="41"/> + <hkern u1="B" u2="-" k="20"/> + <hkern u1="B" u2=")" k="20"/> + <hkern u1="B" u2="Œ" k="10"/> + <hkern u1="B" u2="ü" k="10"/> + <hkern u1="B" u2="Ø" k="10"/> + <hkern u1="B" u2="Ö" k="10"/> + <hkern u1="B" u2="Æ" k="61"/> + <hkern u1="B" u2="x" k="41"/> + <hkern u1="B" u2="v" k="20"/> + <hkern u1="B" u2="q" k="10"/> + <hkern u1="B" u2="X" k="61"/> + <hkern u1="B" u2="V" k="41"/> + <hkern u1="B" u2="?" k="41"/> + <hkern u1="B" u2="," k="41"/> + <hkern u1="C" u2="v" k="82"/> + <hkern u1="C" u2="q" k="61"/> + <hkern u1="C" u2="p" k="20"/> + <hkern u1="C" u2="m" k="20"/> + <hkern u1="C" u2="h" k="20"/> + <hkern u1="C" u2="b" k="20"/> + <hkern u1="C" u2="P" k="20"/> + <hkern u1="C" u2="M" k="20"/> + <hkern u1="C" u2="F" k="20"/> + <hkern u1="C" u2="B" k="20"/> + <hkern u1="C" u2="," k="-41"/> + <hkern u1="D" u2="ñ" k="10"/> + <hkern u1="D" u2="ï" k="10"/> + <hkern u1="D" u2="î" k="10"/> + <hkern u1="D" u2="í" k="10"/> + <hkern u1="D" u2="ì" k="10"/> + <hkern u1="D" u2="Æ" k="82"/> + <hkern u1="D" u2="x" k="41"/> + <hkern u1="D" u2="v" k="20"/> + <hkern u1="D" u2="q" k="20"/> + <hkern u1="D" u2="X" k="51"/> + <hkern u1="D" u2="V" k="20"/> + <hkern u1="D" u2="?" k="41"/> + <hkern u1="D" u2="," k="82"/> + <hkern u1="E" u2="ü" k="41"/> + <hkern u1="E" u2="x" k="20"/> + <hkern u1="E" u2="v" k="41"/> + <hkern u1="E" u2="q" k="41"/> + <hkern u1="E" u2="X" k="20"/> + <hkern u1="E" u2="V" k="20"/> + <hkern u1="E" u2="," k="-20"/> + <hkern u1="F" g2="uniFB02" k="20"/> + <hkern u1="F" g2="uniFB01" k="20"/> + <hkern u1="F" u2="›" k="82"/> + <hkern u1="F" u2="‹" k="41"/> + <hkern u1="F" u2="…" k="246"/> + <hkern u1="F" u2="”" k="20"/> + <hkern u1="F" u2="“" k="20"/> + <hkern u1="F" u2="’" k="20"/> + <hkern u1="F" u2="‘" k="20"/> + <hkern u1="F" u2="—" k="20"/> + <hkern u1="F" u2="–" k="20"/> + <hkern u1="F" u2="Ÿ" k="20"/> + <hkern u1="F" u2="œ" k="61"/> + <hkern u1="F" u2="Œ" k="41"/> + <hkern u1="F" u2="ÿ" k="41"/> + <hkern u1="F" u2="ý" k="41"/> + <hkern u1="F" u2="ü" k="41"/> + <hkern u1="F" u2="û" k="41"/> + <hkern u1="F" u2="ú" k="41"/> + <hkern u1="F" u2="ù" k="41"/> + <hkern u1="F" u2="ø" k="61"/> + <hkern u1="F" u2="ö" k="61"/> + <hkern u1="F" u2="õ" k="61"/> + <hkern u1="F" u2="ô" k="61"/> + <hkern u1="F" u2="ó" k="61"/> + <hkern u1="F" u2="ò" k="61"/> + <hkern u1="F" u2="ñ" k="41"/> + <hkern u1="F" u2="ï" k="41"/> + <hkern u1="F" u2="î" k="41"/> + <hkern u1="F" u2="í" k="41"/> + <hkern u1="F" u2="ì" k="41"/> + <hkern u1="F" u2="ë" k="51"/> + <hkern u1="F" u2="ê" k="51"/> + <hkern u1="F" u2="é" k="51"/> + <hkern u1="F" u2="è" k="51"/> + <hkern u1="F" u2="ç" k="61"/> + <hkern u1="F" u2="Ý" k="20"/> + <hkern u1="F" u2="Ü" k="20"/> + <hkern u1="F" u2="Û" k="20"/> + <hkern u1="F" u2="Ú" k="20"/> + <hkern u1="F" u2="Ù" k="20"/> + <hkern u1="F" u2="Ø" k="41"/> + <hkern u1="F" u2="Ö" k="41"/> + <hkern u1="F" u2="Õ" k="41"/> + <hkern u1="F" u2="Ô" k="41"/> + <hkern u1="F" u2="Ó" k="41"/> + <hkern u1="F" u2="Ò" k="41"/> + <hkern u1="F" u2="Ñ" k="20"/> + <hkern u1="F" u2="Ð" k="20"/> + <hkern u1="F" u2="Ï" k="20"/> + <hkern u1="F" u2="Î" k="20"/> + <hkern u1="F" u2="Í" k="20"/> + <hkern u1="F" u2="Ì" k="20"/> + <hkern u1="F" u2="Ë" k="20"/> + <hkern u1="F" u2="Ê" k="20"/> + <hkern u1="F" u2="É" k="20"/> + <hkern u1="F" u2="È" k="20"/> + <hkern u1="F" u2="Ç" k="41"/> + <hkern u1="F" u2="Å" k="143"/> + <hkern u1="F" u2="Ä" k="143"/> + <hkern u1="F" u2="Ã" k="143"/> + <hkern u1="F" u2="Â" k="143"/> + <hkern u1="F" u2="Á" k="143"/> + <hkern u1="F" u2="À" k="143"/> + <hkern u1="F" u2="»" k="82"/> + <hkern u1="F" u2="­" k="20"/> + <hkern u1="F" u2="«" k="41"/> + <hkern u1="F" u2=" " k="20"/> + <hkern u1="F" u2="z" k="41"/> + <hkern u1="F" u2="y" k="41"/> + <hkern u1="F" u2="w" k="41"/> + <hkern u1="F" u2="u" k="41"/> + <hkern u1="F" u2="t" k="20"/> + <hkern u1="F" u2="s" k="41"/> + <hkern u1="F" u2="r" k="41"/> + <hkern u1="F" u2="o" k="61"/> + <hkern u1="F" u2="n" k="41"/> + <hkern u1="F" u2="l" k="20"/> + <hkern u1="F" u2="k" k="20"/> + <hkern u1="F" u2="j" k="41"/> + <hkern u1="F" u2="i" k="41"/> + <hkern u1="F" u2="g" k="61"/> + <hkern u1="F" u2="f" k="20"/> + <hkern u1="F" u2="e" k="51"/> + <hkern u1="F" u2="d" k="61"/> + <hkern u1="F" u2="c" k="61"/> + <hkern u1="F" u2="a" k="133"/> + <hkern u1="F" u2="Z" k="20"/> + <hkern u1="F" u2="Y" k="20"/> + <hkern u1="F" u2="W" k="20"/> + <hkern u1="F" u2="U" k="20"/> + <hkern u1="F" u2="T" k="41"/> + <hkern u1="F" u2="S" k="41"/> + <hkern u1="F" u2="R" k="20"/> + <hkern u1="F" u2="Q" k="41"/> + <hkern u1="F" u2="O" k="41"/> + <hkern u1="F" u2="N" k="20"/> + <hkern u1="F" u2="L" k="20"/> + <hkern u1="F" u2="K" k="20"/> + <hkern u1="F" u2="J" k="246"/> + <hkern u1="F" u2="I" k="20"/> + <hkern u1="F" u2="H" k="20"/> + <hkern u1="F" u2="G" k="41"/> + <hkern u1="F" u2="E" k="20"/> + <hkern u1="F" u2="D" k="20"/> + <hkern u1="F" u2="C" k="41"/> + <hkern u1="F" u2="A" k="143"/> + <hkern u1="F" u2=";" k="20"/> + <hkern u1="F" u2=":" k="20"/> + <hkern u1="F" u2="." k="246"/> + <hkern u1="F" u2="-" k="20"/> + <hkern u1="F" u2=" " k="20"/> + <hkern u1="F" u2="æ" k="123"/> + <hkern u1="F" u2="å" k="123"/> + <hkern u1="F" u2="ä" k="123"/> + <hkern u1="F" u2="ã" k="123"/> + <hkern u1="F" u2="â" k="123"/> + <hkern u1="F" u2="á" k="123"/> + <hkern u1="F" u2="à" k="123"/> + <hkern u1="F" u2="Æ" k="164"/> + <hkern u1="F" u2="x" k="61"/> + <hkern u1="F" u2="v" k="41"/> + <hkern u1="F" u2="q" k="61"/> + <hkern u1="F" u2="p" k="41"/> + <hkern u1="F" u2="m" k="41"/> + <hkern u1="F" u2="h" k="20"/> + <hkern u1="F" u2="b" k="41"/> + <hkern u1="F" u2="X" k="41"/> + <hkern u1="F" u2="V" k="20"/> + <hkern u1="F" u2="P" k="20"/> + <hkern u1="F" u2="M" k="20"/> + <hkern u1="F" u2="F" k="20"/> + <hkern u1="F" u2="B" k="20"/> + <hkern u1="F" u2="," k="246"/> + <hkern u1="G" u2="ä" k="20"/> + <hkern u1="G" u2="x" k="31"/> + <hkern u1="G" u2="v" k="51"/> + <hkern u1="G" u2="q" k="10"/> + <hkern u1="G" u2="X" k="20"/> + <hkern u1="G" u2="V" k="41"/> + <hkern u1="G" u2="?" k="41"/> + <hkern u1="H" u2="x" k="20"/> + <hkern u1="H" u2="v" k="20"/> + <hkern u1="H" u2="q" k="10"/> + <hkern u1="I" u2="ü" k="82"/> + <hkern u1="I" u2="ö" k="82"/> + <hkern u1="I" u2="ä" k="41"/> + <hkern u1="I" u2="x" k="20"/> + <hkern u1="I" u2="v" k="123"/> + <hkern u1="I" u2="q" k="61"/> + <hkern u1="I" u2="p" k="20"/> + <hkern u1="I" u2="m" k="41"/> + <hkern u1="I" u2="h" k="20"/> + <hkern u1="I" u2="b" k="20"/> + <hkern u1="I" u2="," k="-20"/> + <hkern u1="J" u2="ä" k="20"/> + <hkern u1="J" u2="x" k="20"/> + <hkern u1="J" u2="v" k="20"/> + <hkern u1="J" u2="q" k="10"/> + <hkern u1="J" u2="X" k="20"/> + <hkern u1="J" u2="," k="82"/> + <hkern u1="K" u2="v" k="82"/> + <hkern u1="K" u2="q" k="61"/> + <hkern u1="K" u2="p" k="20"/> + <hkern u1="K" u2="m" k="20"/> + <hkern u1="K" u2="h" k="20"/> + <hkern u1="K" u2="b" k="20"/> + <hkern u1="K" u2="P" k="20"/> + <hkern u1="K" u2="M" k="20"/> + <hkern u1="K" u2="F" k="20"/> + <hkern u1="K" u2="B" k="20"/> + <hkern u1="K" u2="," k="-20"/> + <hkern u1="L" u2="v" k="123"/> + <hkern u1="L" u2="q" k="61"/> + <hkern u1="L" u2="p" k="20"/> + <hkern u1="L" u2="m" k="20"/> + <hkern u1="L" u2="h" k="20"/> + <hkern u1="L" u2="b" k="20"/> + <hkern u1="L" u2="X" k="20"/> + <hkern u1="L" u2="V" k="246"/> + <hkern u1="L" u2="P" k="20"/> + <hkern u1="L" u2="M" k="20"/> + <hkern u1="L" u2="F" k="20"/> + <hkern u1="L" u2="B" k="20"/> + <hkern u1="L" u2="?" k="82"/> + <hkern u1="L" u2="," k="-41"/> + <hkern u1="M" g2="uniFB02" k="10"/> + <hkern u1="M" g2="uniFB01" k="10"/> + <hkern u1="M" u2="›" k="41"/> + <hkern u1="M" u2="œ" k="10"/> + <hkern u1="M" u2="ÿ" k="20"/> + <hkern u1="M" u2="ý" k="20"/> + <hkern u1="M" u2="ø" k="10"/> + <hkern u1="M" u2="ö" k="10"/> + <hkern u1="M" u2="õ" k="10"/> + <hkern u1="M" u2="ô" k="10"/> + <hkern u1="M" u2="ó" k="10"/> + <hkern u1="M" u2="ò" k="10"/> + <hkern u1="M" u2="ë" k="10"/> + <hkern u1="M" u2="ê" k="10"/> + <hkern u1="M" u2="é" k="10"/> + <hkern u1="M" u2="è" k="10"/> + <hkern u1="M" u2="ç" k="10"/> + <hkern u1="M" u2="æ" k="20"/> + <hkern u1="M" u2="å" k="20"/> + <hkern u1="M" u2="ä" k="20"/> + <hkern u1="M" u2="ã" k="20"/> + <hkern u1="M" u2="â" k="20"/> + <hkern u1="M" u2="á" k="20"/> + <hkern u1="M" u2="à" k="20"/> + <hkern u1="M" u2="»" k="41"/> + <hkern u1="M" u2="y" k="20"/> + <hkern u1="M" u2="w" k="20"/> + <hkern u1="M" u2="s" k="10"/> + <hkern u1="M" u2="o" k="10"/> + <hkern u1="M" u2="g" k="20"/> + <hkern u1="M" u2="f" k="10"/> + <hkern u1="M" u2="e" k="10"/> + <hkern u1="M" u2="d" k="10"/> + <hkern u1="M" u2="c" k="10"/> + <hkern u1="M" u2="a" k="20"/> + <hkern u1="M" u2="x" k="20"/> + <hkern u1="M" u2="v" k="20"/> + <hkern u1="M" u2="q" k="10"/> + <hkern u1="N" u2="x" k="20"/> + <hkern u1="N" u2="v" k="20"/> + <hkern u1="N" u2="q" k="10"/> + <hkern u1="O" u2="ü" k="10"/> + <hkern u1="O" u2="ä" k="31"/> + <hkern u1="O" u2="x" k="41"/> + <hkern u1="O" u2="v" k="20"/> + <hkern u1="O" u2="q" k="20"/> + <hkern u1="O" u2="X" k="72"/> + <hkern u1="O" u2="V" k="31"/> + <hkern u1="O" u2="?" k="41"/> + <hkern u1="O" u2=";" k="20"/> + <hkern u1="O" u2="," k="82"/> + <hkern u1="P" g2="uniFB02" k="20"/> + <hkern u1="P" g2="uniFB01" k="20"/> + <hkern u1="P" u2="›" k="82"/> + <hkern u1="P" u2="‹" k="82"/> + <hkern u1="P" u2="…" k="328"/> + <hkern u1="P" u2="”" k="41"/> + <hkern u1="P" u2="’" k="41"/> + <hkern u1="P" u2="—" k="41"/> + <hkern u1="P" u2="–" k="41"/> + <hkern u1="P" u2="Ÿ" k="61"/> + <hkern u1="P" u2="œ" k="102"/> + <hkern u1="P" u2="Œ" k="20"/> + <hkern u1="P" u2="ÿ" k="41"/> + <hkern u1="P" u2="ý" k="41"/> + <hkern u1="P" u2="ü" k="82"/> + <hkern u1="P" u2="û" k="82"/> + <hkern u1="P" u2="ú" k="82"/> + <hkern u1="P" u2="ù" k="82"/> + <hkern u1="P" u2="ø" k="102"/> + <hkern u1="P" u2="ö" k="102"/> + <hkern u1="P" u2="õ" k="102"/> + <hkern u1="P" u2="ô" k="102"/> + <hkern u1="P" u2="ó" k="102"/> + <hkern u1="P" u2="ò" k="102"/> + <hkern u1="P" u2="ñ" k="41"/> + <hkern u1="P" u2="ï" k="20"/> + <hkern u1="P" u2="î" k="20"/> + <hkern u1="P" u2="í" k="20"/> + <hkern u1="P" u2="ì" k="20"/> + <hkern u1="P" u2="ë" k="102"/> + <hkern u1="P" u2="ê" k="102"/> + <hkern u1="P" u2="é" k="102"/> + <hkern u1="P" u2="è" k="102"/> + <hkern u1="P" u2="ç" k="123"/> + <hkern u1="P" u2="æ" k="123"/> + <hkern u1="P" u2="å" k="123"/> + <hkern u1="P" u2="ä" k="123"/> + <hkern u1="P" u2="ã" k="123"/> + <hkern u1="P" u2="â" k="123"/> + <hkern u1="P" u2="á" k="123"/> + <hkern u1="P" u2="à" k="123"/> + <hkern u1="P" u2="Ý" k="61"/> + <hkern u1="P" u2="Ø" k="20"/> + <hkern u1="P" u2="Ö" k="20"/> + <hkern u1="P" u2="Õ" k="20"/> + <hkern u1="P" u2="Ô" k="20"/> + <hkern u1="P" u2="Ó" k="20"/> + <hkern u1="P" u2="Ò" k="20"/> + <hkern u1="P" u2="Ï" k="102"/> + <hkern u1="P" u2="Î" k="102"/> + <hkern u1="P" u2="Í" k="102"/> + <hkern u1="P" u2="Ì" k="102"/> + <hkern u1="P" u2="Ç" k="20"/> + <hkern u1="P" u2="Å" k="143"/> + <hkern u1="P" u2="Ä" k="143"/> + <hkern u1="P" u2="Ã" k="143"/> + <hkern u1="P" u2="Â" k="143"/> + <hkern u1="P" u2="Á" k="143"/> + <hkern u1="P" u2="À" k="143"/> + <hkern u1="P" u2="»" k="82"/> + <hkern u1="P" u2="­" k="41"/> + <hkern u1="P" u2="«" k="82"/> + <hkern u1="P" u2=" " k="20"/> + <hkern u1="P" u2="}" k="41"/> + <hkern u1="P" u2="z" k="20"/> + <hkern u1="P" u2="y" k="41"/> + <hkern u1="P" u2="w" k="41"/> + <hkern u1="P" u2="u" k="82"/> + <hkern u1="P" u2="t" k="20"/> + <hkern u1="P" u2="s" k="82"/> + <hkern u1="P" u2="r" k="41"/> + <hkern u1="P" u2="o" k="102"/> + <hkern u1="P" u2="n" k="41"/> + <hkern u1="P" u2="l" k="20"/> + <hkern u1="P" u2="k" k="20"/> + <hkern u1="P" u2="j" k="20"/> + <hkern u1="P" u2="i" k="20"/> + <hkern u1="P" u2="g" k="102"/> + <hkern u1="P" u2="f" k="20"/> + <hkern u1="P" u2="e" k="102"/> + <hkern u1="P" u2="d" k="102"/> + <hkern u1="P" u2="c" k="123"/> + <hkern u1="P" u2="a" k="123"/> + <hkern u1="P" u2="]" k="41"/> + <hkern u1="P" u2="Z" k="82"/> + <hkern u1="P" u2="Y" k="61"/> + <hkern u1="P" u2="W" k="41"/> + <hkern u1="P" u2="T" k="82"/> + <hkern u1="P" u2="S" k="20"/> + <hkern u1="P" u2="Q" k="20"/> + <hkern u1="P" u2="O" k="20"/> + <hkern u1="P" u2="J" k="246"/> + <hkern u1="P" u2="I" k="102"/> + <hkern u1="P" u2="H" k="20"/> + <hkern u1="P" u2="G" k="20"/> + <hkern u1="P" u2="C" k="20"/> + <hkern u1="P" u2="A" k="143"/> + <hkern u1="P" u2=";" k="20"/> + <hkern u1="P" u2=":" k="20"/> + <hkern u1="P" u2="." k="328"/> + <hkern u1="P" u2="-" k="41"/> + <hkern u1="P" u2=")" k="41"/> + <hkern u1="P" u2=" " k="20"/> + <hkern u1="P" u2="Æ" k="184"/> + <hkern u1="P" u2="x" k="41"/> + <hkern u1="P" u2="v" k="41"/> + <hkern u1="P" u2="q" k="102"/> + <hkern u1="P" u2="p" k="41"/> + <hkern u1="P" u2="m" k="41"/> + <hkern u1="P" u2="h" k="20"/> + <hkern u1="P" u2="b" k="20"/> + <hkern u1="P" u2="X" k="102"/> + <hkern u1="P" u2="V" k="41"/> + <hkern u1="P" u2="?" k="41"/> + <hkern u1="P" u2="," k="328"/> + <hkern u1="Q" u2="›" k="41"/> + <hkern u1="Q" u2="…" k="82"/> + <hkern u1="Q" u2="”" k="41"/> + <hkern u1="Q" u2="’" k="41"/> + <hkern u1="Q" u2="Ÿ" k="51"/> + <hkern u1="Q" u2="ÿ" k="20"/> + <hkern u1="Q" u2="ý" k="20"/> + <hkern u1="Q" u2="ü" k="10"/> + <hkern u1="Q" u2="û" k="10"/> + <hkern u1="Q" u2="ú" k="10"/> + <hkern u1="Q" u2="ù" k="10"/> + <hkern u1="Q" u2="æ" k="41"/> + <hkern u1="Q" u2="å" k="41"/> + <hkern u1="Q" u2="ã" k="41"/> + <hkern u1="Q" u2="â" k="41"/> + <hkern u1="Q" u2="á" k="41"/> + <hkern u1="Q" u2="à" k="41"/> + <hkern u1="Q" u2="Ý" k="51"/> + <hkern u1="Q" u2="Ï" k="82"/> + <hkern u1="Q" u2="Î" k="82"/> + <hkern u1="Q" u2="Í" k="82"/> + <hkern u1="Q" u2="Ì" k="82"/> + <hkern u1="Q" u2="Æ" k="20"/> + <hkern u1="Q" u2="Å" k="20"/> + <hkern u1="Q" u2="Ä" k="20"/> + <hkern u1="Q" u2="Ã" k="20"/> + <hkern u1="Q" u2="Â" k="20"/> + <hkern u1="Q" u2="Á" k="20"/> + <hkern u1="Q" u2="À" k="20"/> + <hkern u1="Q" u2="»" k="41"/> + <hkern u1="Q" u2="}" k="20"/> + <hkern u1="Q" u2="z" k="20"/> + <hkern u1="Q" u2="y" k="20"/> + <hkern u1="Q" u2="w" k="20"/> + <hkern u1="Q" u2="u" k="10"/> + <hkern u1="Q" u2="t" k="10"/> + <hkern u1="Q" u2="s" k="10"/> + <hkern u1="Q" u2="a" k="41"/> + <hkern u1="Q" u2="]" k="20"/> + <hkern u1="Q" u2="Z" k="41"/> + <hkern u1="Q" u2="Y" k="51"/> + <hkern u1="Q" u2="W" k="41"/> + <hkern u1="Q" u2="T" k="102"/> + <hkern u1="Q" u2="J" k="82"/> + <hkern u1="Q" u2="I" k="82"/> + <hkern u1="Q" u2="A" k="20"/> + <hkern u1="Q" u2="." k="82"/> + <hkern u1="Q" u2=")" k="20"/> + <hkern u1="Q" u2="ö" k="10"/> + <hkern u1="Q" u2="ä" k="31"/> + <hkern u1="Q" u2="x" k="41"/> + <hkern u1="Q" u2="v" k="20"/> + <hkern u1="Q" u2="X" k="61"/> + <hkern u1="Q" u2="V" k="31"/> + <hkern u1="Q" u2="?" k="41"/> + <hkern u1="Q" u2="," k="82"/> + <hkern u1="R" u2="x" k="20"/> + <hkern u1="R" u2="v" k="41"/> + <hkern u1="R" u2="q" k="72"/> + <hkern u1="R" u2="p" k="41"/> + <hkern u1="R" u2="m" k="41"/> + <hkern u1="R" u2="h" k="20"/> + <hkern u1="R" u2="b" k="20"/> + <hkern u1="R" u2="X" k="41"/> + <hkern u1="R" u2="V" k="41"/> + <hkern u1="R" u2="?" k="41"/> + <hkern u1="S" u2="x" k="41"/> + <hkern u1="S" u2="v" k="41"/> + <hkern u1="S" u2="q" k="10"/> + <hkern u1="S" u2="X" k="41"/> + <hkern u1="S" u2="V" k="20"/> + <hkern u1="S" u2="?" k="20"/> + <hkern u1="S" u2="," k="20"/> + <hkern u1="T" u2="ü" k="164"/> + <hkern u1="T" u2="û" k="164"/> + <hkern u1="T" u2="ú" k="225"/> + <hkern u1="T" u2="ù" k="225"/> + <hkern u1="T" u2="ö" k="164"/> + <hkern u1="T" u2="õ" k="164"/> + <hkern u1="T" u2="ô" k="164"/> + <hkern u1="T" u2="ó" k="205"/> + <hkern u1="T" u2="ò" k="205"/> + <hkern u1="T" u2="ñ" k="164"/> + <hkern u1="T" u2="ë" k="164"/> + <hkern u1="T" u2="ê" k="164"/> + <hkern u1="T" u2="é" k="205"/> + <hkern u1="T" u2="è" k="205"/> + <hkern u1="T" u2="å" k="246"/> + <hkern u1="T" u2="ä" k="184"/> + <hkern u1="T" u2="ã" k="164"/> + <hkern u1="T" u2="â" k="164"/> + <hkern u1="T" u2="á" k="205"/> + <hkern u1="T" u2="à" k="205"/> + <hkern u1="T" u2="Æ" k="205"/> + <hkern u1="T" u2="x" k="266"/> + <hkern u1="T" u2="v" k="266"/> + <hkern u1="T" u2="q" k="287"/> + <hkern u1="T" u2="p" k="266"/> + <hkern u1="T" u2="m" k="266"/> + <hkern u1="T" u2="h" k="41"/> + <hkern u1="T" u2="b" k="41"/> + <hkern u1="T" u2="X" k="20"/> + <hkern u1="T" u2="," k="246"/> + <hkern u1="U" u2="x" k="41"/> + <hkern u1="U" u2="v" k="20"/> + <hkern u1="U" u2="q" k="10"/> + <hkern u1="U" u2="X" k="20"/> + <hkern u1="U" u2="," k="82"/> + <hkern u1="V" g2="uniFB02" k="41"/> + <hkern u1="V" g2="uniFB01" k="41"/> + <hkern u1="V" u2="›" k="123"/> + <hkern u1="V" u2="‹" k="123"/> + <hkern u1="V" u2="…" k="205"/> + <hkern u1="V" u2="—" k="61"/> + <hkern u1="V" u2="–" k="61"/> + <hkern u1="V" u2="œ" k="102"/> + <hkern u1="V" u2="Œ" k="31"/> + <hkern u1="V" u2="ÿ" k="61"/> + <hkern u1="V" u2="ý" k="61"/> + <hkern u1="V" u2="ü" k="82"/> + <hkern u1="V" u2="û" k="82"/> + <hkern u1="V" u2="ú" k="82"/> + <hkern u1="V" u2="ù" k="82"/> + <hkern u1="V" u2="ø" k="102"/> + <hkern u1="V" u2="ö" k="102"/> + <hkern u1="V" u2="õ" k="102"/> + <hkern u1="V" u2="ô" k="102"/> + <hkern u1="V" u2="ó" k="102"/> + <hkern u1="V" u2="ò" k="102"/> + <hkern u1="V" u2="ñ" k="82"/> + <hkern u1="V" u2="ï" k="20"/> + <hkern u1="V" u2="î" k="20"/> + <hkern u1="V" u2="í" k="20"/> + <hkern u1="V" u2="ì" k="20"/> + <hkern u1="V" u2="ë" k="92"/> + <hkern u1="V" u2="ê" k="92"/> + <hkern u1="V" u2="é" k="92"/> + <hkern u1="V" u2="è" k="92"/> + <hkern u1="V" u2="ç" k="113"/> + <hkern u1="V" u2="æ" k="123"/> + <hkern u1="V" u2="å" k="123"/> + <hkern u1="V" u2="á" k="123"/> + <hkern u1="V" u2="à" k="123"/> + <hkern u1="V" u2="Ø" k="31"/> + <hkern u1="V" u2="Ö" k="31"/> + <hkern u1="V" u2="Õ" k="31"/> + <hkern u1="V" u2="Ô" k="31"/> + <hkern u1="V" u2="Ó" k="31"/> + <hkern u1="V" u2="Ò" k="31"/> + <hkern u1="V" u2="Ç" k="20"/> + <hkern u1="V" u2="Å" k="61"/> + <hkern u1="V" u2="Ä" k="61"/> + <hkern u1="V" u2="Ã" k="61"/> + <hkern u1="V" u2="Â" k="61"/> + <hkern u1="V" u2="Á" k="61"/> + <hkern u1="V" u2="À" k="61"/> + <hkern u1="V" u2="»" k="123"/> + <hkern u1="V" u2="­" k="61"/> + <hkern u1="V" u2="«" k="123"/> + <hkern u1="V" u2=" " k="20"/> + <hkern u1="V" u2="}" k="-20"/> + <hkern u1="V" u2="z" k="61"/> + <hkern u1="V" u2="y" k="61"/> + <hkern u1="V" u2="w" k="61"/> + <hkern u1="V" u2="u" k="82"/> + <hkern u1="V" u2="t" k="20"/> + <hkern u1="V" u2="s" k="82"/> + <hkern u1="V" u2="r" k="82"/> + <hkern u1="V" u2="o" k="102"/> + <hkern u1="V" u2="n" k="82"/> + <hkern u1="V" u2="j" k="20"/> + <hkern u1="V" u2="i" k="20"/> + <hkern u1="V" u2="g" k="113"/> + <hkern u1="V" u2="f" k="41"/> + <hkern u1="V" u2="e" k="92"/> + <hkern u1="V" u2="d" k="113"/> + <hkern u1="V" u2="c" k="113"/> + <hkern u1="V" u2="a" k="123"/> + <hkern u1="V" u2="]" k="-20"/> + <hkern u1="V" u2="S" k="20"/> + <hkern u1="V" u2="Q" k="31"/> + <hkern u1="V" u2="O" k="31"/> + <hkern u1="V" u2="J" k="205"/> + <hkern u1="V" u2="G" k="20"/> + <hkern u1="V" u2="C" k="20"/> + <hkern u1="V" u2="A" k="61"/> + <hkern u1="V" u2=";" k="61"/> + <hkern u1="V" u2=":" k="61"/> + <hkern u1="V" u2="." k="205"/> + <hkern u1="V" u2="-" k="61"/> + <hkern u1="V" u2=")" k="-20"/> + <hkern u1="V" u2=" " k="20"/> + <hkern u1="V" u2="ä" k="82"/> + <hkern u1="V" u2="ã" k="82"/> + <hkern u1="V" u2="â" k="82"/> + <hkern u1="V" u2="Æ" k="102"/> + <hkern u1="V" u2="x" k="61"/> + <hkern u1="V" u2="v" k="61"/> + <hkern u1="V" u2="q" k="113"/> + <hkern u1="V" u2="p" k="82"/> + <hkern u1="V" u2="m" k="82"/> + <hkern u1="V" u2="," k="205"/> + <hkern u1="W" u2="ç" k="102"/> + <hkern u1="W" u2="ã" k="102"/> + <hkern u1="W" u2="â" k="102"/> + <hkern u1="W" u2="Æ" k="102"/> + <hkern u1="W" u2="x" k="61"/> + <hkern u1="W" u2="v" k="61"/> + <hkern u1="W" u2="q" k="113"/> + <hkern u1="W" u2="p" k="82"/> + <hkern u1="W" u2="m" k="82"/> + <hkern u1="W" u2="," k="205"/> + <hkern u1="X" g2="uniFB02" k="41"/> + <hkern u1="X" g2="uniFB01" k="41"/> + <hkern u1="X" u2="›" k="123"/> + <hkern u1="X" u2="‹" k="123"/> + <hkern u1="X" u2="…" k="-41"/> + <hkern u1="X" u2="“" k="41"/> + <hkern u1="X" u2="‘" k="41"/> + <hkern u1="X" u2="—" k="123"/> + <hkern u1="X" u2="–" k="123"/> + <hkern u1="X" u2="œ" k="61"/> + <hkern u1="X" u2="Œ" k="72"/> + <hkern u1="X" u2="ÿ" k="82"/> + <hkern u1="X" u2="ý" k="82"/> + <hkern u1="X" u2="ü" k="41"/> + <hkern u1="X" u2="û" k="41"/> + <hkern u1="X" u2="ú" k="41"/> + <hkern u1="X" u2="ù" k="41"/> + <hkern u1="X" u2="ø" k="61"/> + <hkern u1="X" u2="ö" k="61"/> + <hkern u1="X" u2="õ" k="61"/> + <hkern u1="X" u2="ô" k="61"/> + <hkern u1="X" u2="ó" k="61"/> + <hkern u1="X" u2="ò" k="61"/> + <hkern u1="X" u2="ñ" k="41"/> + <hkern u1="X" u2="ï" k="20"/> + <hkern u1="X" u2="î" k="20"/> + <hkern u1="X" u2="í" k="20"/> + <hkern u1="X" u2="ì" k="20"/> + <hkern u1="X" u2="ë" k="51"/> + <hkern u1="X" u2="ê" k="51"/> + <hkern u1="X" u2="é" k="51"/> + <hkern u1="X" u2="è" k="51"/> + <hkern u1="X" u2="ç" k="61"/> + <hkern u1="X" u2="æ" k="20"/> + <hkern u1="X" u2="å" k="20"/> + <hkern u1="X" u2="ä" k="20"/> + <hkern u1="X" u2="ã" k="20"/> + <hkern u1="X" u2="â" k="20"/> + <hkern u1="X" u2="á" k="20"/> + <hkern u1="X" u2="à" k="20"/> + <hkern u1="X" u2="Ü" k="20"/> + <hkern u1="X" u2="Û" k="20"/> + <hkern u1="X" u2="Ú" k="20"/> + <hkern u1="X" u2="Ù" k="20"/> + <hkern u1="X" u2="Ø" k="72"/> + <hkern u1="X" u2="Ö" k="72"/> + <hkern u1="X" u2="Õ" k="72"/> + <hkern u1="X" u2="Ô" k="72"/> + <hkern u1="X" u2="Ó" k="72"/> + <hkern u1="X" u2="Ò" k="72"/> + <hkern u1="X" u2="Ç" k="41"/> + <hkern u1="X" u2="»" k="123"/> + <hkern u1="X" u2="­" k="123"/> + <hkern u1="X" u2="«" k="123"/> + <hkern u1="X" u2=" " k="20"/> + <hkern u1="X" u2="}" k="-20"/> + <hkern u1="X" u2="y" k="82"/> + <hkern u1="X" u2="w" k="82"/> + <hkern u1="X" u2="u" k="41"/> + <hkern u1="X" u2="t" k="41"/> + <hkern u1="X" u2="s" k="20"/> + <hkern u1="X" u2="r" k="41"/> + <hkern u1="X" u2="o" k="61"/> + <hkern u1="X" u2="n" k="41"/> + <hkern u1="X" u2="l" k="20"/> + <hkern u1="X" u2="k" k="20"/> + <hkern u1="X" u2="j" k="20"/> + <hkern u1="X" u2="i" k="20"/> + <hkern u1="X" u2="g" k="61"/> + <hkern u1="X" u2="f" k="41"/> + <hkern u1="X" u2="e" k="51"/> + <hkern u1="X" u2="d" k="61"/> + <hkern u1="X" u2="c" k="61"/> + <hkern u1="X" u2="a" k="20"/> + <hkern u1="X" u2="]" k="-20"/> + <hkern u1="X" u2="U" k="20"/> + <hkern u1="X" u2="T" k="20"/> + <hkern u1="X" u2="S" k="20"/> + <hkern u1="X" u2="O" k="72"/> + <hkern u1="X" u2="G" k="41"/> + <hkern u1="X" u2="C" k="41"/> + <hkern u1="X" u2="." k="-41"/> + <hkern u1="X" u2="-" k="123"/> + <hkern u1="X" u2=")" k="-20"/> + <hkern u1="X" u2=" " k="20"/> + <hkern u1="X" u2="v" k="82"/> + <hkern u1="X" u2="q" k="61"/> + <hkern u1="X" u2="p" k="41"/> + <hkern u1="X" u2="m" k="41"/> + <hkern u1="X" u2="h" k="20"/> + <hkern u1="X" u2="b" k="20"/> + <hkern u1="X" u2="Q" k="61"/> + <hkern u1="X" u2="," k="-41"/> + <hkern u1="Y" u2="ü" k="123"/> + <hkern u1="Y" u2="û" k="123"/> + <hkern u1="Y" u2="ö" k="143"/> + <hkern u1="Y" u2="õ" k="123"/> + <hkern u1="Y" u2="ô" k="143"/> + <hkern u1="Y" u2="ë" k="133"/> + <hkern u1="Y" u2="ê" k="133"/> + <hkern u1="Y" u2="å" k="164"/> + <hkern u1="Y" u2="ä" k="123"/> + <hkern u1="Y" u2="ã" k="123"/> + <hkern u1="Y" u2="â" k="123"/> + <hkern u1="Y" u2="á" k="164"/> + <hkern u1="Y" u2="à" k="164"/> + <hkern u1="Y" u2="x" k="102"/> + <hkern u1="Y" u2="v" k="102"/> + <hkern u1="Y" u2="q" k="184"/> + <hkern u1="Y" u2="p" k="143"/> + <hkern u1="Y" u2="m" k="143"/> + <hkern u1="Y" u2="h" k="41"/> + <hkern u1="Y" u2="b" k="41"/> + <hkern u1="Y" u2="," k="246"/> + <hkern u1="Z" u2="ñ" k="20"/> + <hkern u1="Z" u2="v" k="61"/> + <hkern u1="Z" u2="q" k="61"/> + <hkern u1="Z" u2=";" k="-20"/> + <hkern u1="Z" u2="," k="-41"/> + <hkern u1="[" u2="x" k="-20"/> + <hkern u1="[" u2="v" k="20"/> + <hkern u1="[" u2="q" k="20"/> + <hkern u1="[" u2="X" k="-20"/> + <hkern u1="[" u2="V" k="-20"/> + <hkern u1="a" u2="ü" k="10"/> + <hkern u1="a" u2="x" k="20"/> + <hkern u1="a" u2="v" k="41"/> + <hkern u1="a" u2="q" k="10"/> + <hkern u1="a" u2="?" k="82"/> + <hkern u1="b" g2="uniFB02" k="20"/> + <hkern u1="b" g2="uniFB01" k="20"/> + <hkern u1="b" u2="›" k="41"/> + <hkern u1="b" u2="…" k="41"/> + <hkern u1="b" u2="”" k="82"/> + <hkern u1="b" u2="“" k="82"/> + <hkern u1="b" u2="’" k="82"/> + <hkern u1="b" u2="‘" k="82"/> + <hkern u1="b" u2="œ" k="20"/> + <hkern u1="b" u2="ÿ" k="41"/> + <hkern u1="b" u2="ý" k="41"/> + <hkern u1="b" u2="ü" k="10"/> + <hkern u1="b" u2="û" k="10"/> + <hkern u1="b" u2="ú" k="10"/> + <hkern u1="b" u2="ù" k="10"/> + <hkern u1="b" u2="ø" k="20"/> + <hkern u1="b" u2="ö" k="20"/> + <hkern u1="b" u2="õ" k="20"/> + <hkern u1="b" u2="ô" k="20"/> + <hkern u1="b" u2="ó" k="20"/> + <hkern u1="b" u2="ò" k="20"/> + <hkern u1="b" u2="ñ" k="10"/> + <hkern u1="b" u2="ï" k="10"/> + <hkern u1="b" u2="î" k="10"/> + <hkern u1="b" u2="í" k="10"/> + <hkern u1="b" u2="ì" k="10"/> + <hkern u1="b" u2="ë" k="10"/> + <hkern u1="b" u2="ê" k="10"/> + <hkern u1="b" u2="é" k="10"/> + <hkern u1="b" u2="è" k="10"/> + <hkern u1="b" u2="ç" k="20"/> + <hkern u1="b" u2="æ" k="31"/> + <hkern u1="b" u2="å" k="31"/> + <hkern u1="b" u2="ä" k="31"/> + <hkern u1="b" u2="ã" k="31"/> + <hkern u1="b" u2="â" k="31"/> + <hkern u1="b" u2="á" k="31"/> + <hkern u1="b" u2="à" k="31"/> + <hkern u1="b" u2="»" k="41"/> + <hkern u1="b" u2=" " k="20"/> + <hkern u1="b" u2="}" k="20"/> + <hkern u1="b" u2="z" k="31"/> + <hkern u1="b" u2="y" k="41"/> + <hkern u1="b" u2="w" k="41"/> + <hkern u1="b" u2="u" k="10"/> + <hkern u1="b" u2="t" k="10"/> + <hkern u1="b" u2="s" k="10"/> + <hkern u1="b" u2="o" k="20"/> + <hkern u1="b" u2="n" k="10"/> + <hkern u1="b" u2="l" k="10"/> + <hkern u1="b" u2="k" k="10"/> + <hkern u1="b" u2="j" k="10"/> + <hkern u1="b" u2="i" k="10"/> + <hkern u1="b" u2="g" k="20"/> + <hkern u1="b" u2="f" k="20"/> + <hkern u1="b" u2="e" k="10"/> + <hkern u1="b" u2="d" k="20"/> + <hkern u1="b" u2="c" k="20"/> + <hkern u1="b" u2="a" k="31"/> + <hkern u1="b" u2="]" k="20"/> + <hkern u1="b" u2=";" k="20"/> + <hkern u1="b" u2=":" k="20"/> + <hkern u1="b" u2="." k="41"/> + <hkern u1="b" u2=")" k="20"/> + <hkern u1="b" u2=" " k="20"/> + <hkern u1="b" u2="x" k="41"/> + <hkern u1="b" u2="v" k="41"/> + <hkern u1="b" u2="q" k="20"/> + <hkern u1="b" u2="p" k="10"/> + <hkern u1="b" u2="m" k="10"/> + <hkern u1="b" u2="h" k="10"/> + <hkern u1="b" u2="?" k="82"/> + <hkern u1="b" u2="," k="41"/> + <hkern u1="c" u2="v" k="20"/> + <hkern u1="c" u2="q" k="41"/> + <hkern u1="c" u2="h" k="20"/> + <hkern u1="c" u2="b" k="10"/> + <hkern u1="c" u2="?" k="41"/> + <hkern u1="d" u2="›" k="41"/> + <hkern u1="d" u2="œ" k="10"/> + <hkern u1="d" u2="ÿ" k="20"/> + <hkern u1="d" u2="ý" k="20"/> + <hkern u1="d" u2="ø" k="10"/> + <hkern u1="d" u2="ö" k="10"/> + <hkern u1="d" u2="õ" k="10"/> + <hkern u1="d" u2="ô" k="10"/> + <hkern u1="d" u2="ó" k="10"/> + <hkern u1="d" u2="ò" k="10"/> + <hkern u1="d" u2="ë" k="10"/> + <hkern u1="d" u2="ê" k="10"/> + <hkern u1="d" u2="é" k="10"/> + <hkern u1="d" u2="è" k="10"/> + <hkern u1="d" u2="ç" k="20"/> + <hkern u1="d" u2="æ" k="31"/> + <hkern u1="d" u2="å" k="31"/> + <hkern u1="d" u2="ä" k="31"/> + <hkern u1="d" u2="ã" k="31"/> + <hkern u1="d" u2="â" k="31"/> + <hkern u1="d" u2="á" k="31"/> + <hkern u1="d" u2="à" k="31"/> + <hkern u1="d" u2="»" k="41"/> + <hkern u1="d" u2="y" k="20"/> + <hkern u1="d" u2="w" k="20"/> + <hkern u1="d" u2="t" k="10"/> + <hkern u1="d" u2="s" k="10"/> + <hkern u1="d" u2="o" k="10"/> + <hkern u1="d" u2="g" k="20"/> + <hkern u1="d" u2="e" k="10"/> + <hkern u1="d" u2="d" k="10"/> + <hkern u1="d" u2="c" k="20"/> + <hkern u1="d" u2="a" k="31"/> + <hkern u1="d" u2="x" k="20"/> + <hkern u1="d" u2="v" k="20"/> + <hkern u1="d" u2="q" k="10"/> + <hkern u1="e" u2="x" k="31"/> + <hkern u1="e" u2="v" k="31"/> + <hkern u1="e" u2="q" k="10"/> + <hkern u1="e" u2="p" k="10"/> + <hkern u1="e" u2="m" k="10"/> + <hkern u1="e" u2="h" k="10"/> + <hkern u1="e" u2="b" k="10"/> + <hkern u1="e" u2="?" k="61"/> + <hkern u1="e" u2=";" k="10"/> + <hkern u1="e" u2="," k="20"/> + <hkern u1="f" u2="›" k="41"/> + <hkern u1="f" u2="‹" k="41"/> + <hkern u1="f" u2="…" k="82"/> + <hkern u1="f" u2="”" k="-61"/> + <hkern u1="f" u2="“" k="-20"/> + <hkern u1="f" u2="’" k="-61"/> + <hkern u1="f" u2="‘" k="-20"/> + <hkern u1="f" u2="—" k="61"/> + <hkern u1="f" u2="–" k="61"/> + <hkern u1="f" u2="œ" k="51"/> + <hkern u1="f" u2="ü" k="41"/> + <hkern u1="f" u2="û" k="41"/> + <hkern u1="f" u2="ú" k="41"/> + <hkern u1="f" u2="ù" k="41"/> + <hkern u1="f" u2="ø" k="51"/> + <hkern u1="f" u2="ö" k="51"/> + <hkern u1="f" u2="õ" k="51"/> + <hkern u1="f" u2="ô" k="51"/> + <hkern u1="f" u2="ó" k="51"/> + <hkern u1="f" u2="ò" k="51"/> + <hkern u1="f" u2="ñ" k="41"/> + <hkern u1="f" u2="ï" k="20"/> + <hkern u1="f" u2="î" k="20"/> + <hkern u1="f" u2="í" k="20"/> + <hkern u1="f" u2="ì" k="20"/> + <hkern u1="f" u2="ë" k="41"/> + <hkern u1="f" u2="ê" k="41"/> + <hkern u1="f" u2="é" k="41"/> + <hkern u1="f" u2="è" k="41"/> + <hkern u1="f" u2="ç" k="61"/> + <hkern u1="f" u2="æ" k="51"/> + <hkern u1="f" u2="å" k="51"/> + <hkern u1="f" u2="ä" k="51"/> + <hkern u1="f" u2="ã" k="51"/> + <hkern u1="f" u2="â" k="51"/> + <hkern u1="f" u2="á" k="51"/> + <hkern u1="f" u2="à" k="51"/> + <hkern u1="f" u2="»" k="41"/> + <hkern u1="f" u2="­" k="61"/> + <hkern u1="f" u2="«" k="41"/> + <hkern u1="f" u2=" " k="31"/> + <hkern u1="f" u2="}" k="-41"/> + <hkern u1="f" u2="w" k="10"/> + <hkern u1="f" u2="u" k="41"/> + <hkern u1="f" u2="s" k="20"/> + <hkern u1="f" u2="r" k="31"/> + <hkern u1="f" u2="o" k="51"/> + <hkern u1="f" u2="n" k="41"/> + <hkern u1="f" u2="l" k="10"/> + <hkern u1="f" u2="j" k="20"/> + <hkern u1="f" u2="i" k="20"/> + <hkern u1="f" u2="g" k="41"/> + <hkern u1="f" u2="e" k="41"/> + <hkern u1="f" u2="d" k="41"/> + <hkern u1="f" u2="c" k="61"/> + <hkern u1="f" u2="a" k="51"/> + <hkern u1="f" u2="]" k="-41"/> + <hkern u1="f" u2=";" k="20"/> + <hkern u1="f" u2=":" k="20"/> + <hkern u1="f" u2="." k="82"/> + <hkern u1="f" u2="-" k="61"/> + <hkern u1="f" u2=")" k="-41"/> + <hkern u1="f" u2=" " k="31"/> + <hkern u1="f" u2="ß" k="20"/> + <hkern u1="f" u2="q" k="41"/> + <hkern u1="f" u2="p" k="41"/> + <hkern u1="f" u2="m" k="41"/> + <hkern u1="f" u2="?" k="-41"/> + <hkern u1="f" u2="," k="61"/> + <hkern u1="g" u2="x" k="20"/> + <hkern u1="g" u2="v" k="20"/> + <hkern u1="g" u2="q" k="10"/> + <hkern u1="g" u2="?" k="61"/> + <hkern u1="h" u2="x" k="20"/> + <hkern u1="h" u2="v" k="41"/> + <hkern u1="h" u2="q" k="10"/> + <hkern u1="h" u2="?" k="61"/> + <hkern u1="i" u2="ä" k="20"/> + <hkern u1="i" u2="x" k="20"/> + <hkern u1="i" u2="v" k="20"/> + <hkern u1="i" u2="q" k="10"/> + <hkern u1="j" u2="x" k="20"/> + <hkern u1="j" u2="v" k="20"/> + <hkern u1="j" u2="q" k="10"/> + <hkern u1="k" u2="ß" k="20"/> + <hkern u1="k" u2="v" k="10"/> + <hkern u1="k" u2="q" k="41"/> + <hkern u1="k" u2="p" k="10"/> + <hkern u1="k" u2="m" k="10"/> + <hkern u1="k" u2="h" k="10"/> + <hkern u1="k" u2="b" k="10"/> + <hkern u1="k" u2="?" k="61"/> + <hkern u1="k" u2="," k="-20"/> + <hkern u1="l" u2="x" k="20"/> + <hkern u1="l" u2="v" k="20"/> + <hkern u1="l" u2="q" k="10"/> + <hkern u1="m" g2="uniFB02" k="20"/> + <hkern u1="m" g2="uniFB01" k="20"/> + <hkern u1="m" u2="›" k="41"/> + <hkern u1="m" u2="”" k="82"/> + <hkern u1="m" u2="“" k="82"/> + <hkern u1="m" u2="’" k="82"/> + <hkern u1="m" u2="‘" k="82"/> + <hkern u1="m" u2="œ" k="10"/> + <hkern u1="m" u2="ÿ" k="41"/> + <hkern u1="m" u2="ý" k="41"/> + <hkern u1="m" u2="ø" k="10"/> + <hkern u1="m" u2="ö" k="10"/> + <hkern u1="m" u2="õ" k="10"/> + <hkern u1="m" u2="ô" k="10"/> + <hkern u1="m" u2="ó" k="10"/> + <hkern u1="m" u2="ò" k="10"/> + <hkern u1="m" u2="ë" k="10"/> + <hkern u1="m" u2="ê" k="10"/> + <hkern u1="m" u2="é" k="10"/> + <hkern u1="m" u2="è" k="10"/> + <hkern u1="m" u2="ç" k="20"/> + <hkern u1="m" u2="æ" k="31"/> + <hkern u1="m" u2="å" k="31"/> + <hkern u1="m" u2="ä" k="31"/> + <hkern u1="m" u2="ã" k="31"/> + <hkern u1="m" u2="â" k="31"/> + <hkern u1="m" u2="á" k="31"/> + <hkern u1="m" u2="à" k="31"/> + <hkern u1="m" u2="»" k="41"/> + <hkern u1="m" u2="y" k="41"/> + <hkern u1="m" u2="w" k="41"/> + <hkern u1="m" u2="s" k="10"/> + <hkern u1="m" u2="o" k="10"/> + <hkern u1="m" u2="g" k="20"/> + <hkern u1="m" u2="f" k="20"/> + <hkern u1="m" u2="e" k="10"/> + <hkern u1="m" u2="d" k="10"/> + <hkern u1="m" u2="c" k="20"/> + <hkern u1="m" u2="a" k="31"/> + <hkern u1="m" u2="x" k="20"/> + <hkern u1="m" u2="v" k="41"/> + <hkern u1="m" u2="q" k="10"/> + <hkern u1="m" u2="?" k="61"/> + <hkern u1="n" u2="ä" k="20"/> + <hkern u1="n" u2="x" k="20"/> + <hkern u1="n" u2="v" k="41"/> + <hkern u1="n" u2="q" k="10"/> + <hkern u1="n" u2="?" k="61"/> + <hkern u1="o" u2="x" k="41"/> + <hkern u1="o" u2="v" k="41"/> + <hkern u1="o" u2="q" k="20"/> + <hkern u1="o" u2="p" k="10"/> + <hkern u1="o" u2="m" k="10"/> + <hkern u1="o" u2="h" k="10"/> + <hkern u1="o" u2="b" k="10"/> + <hkern u1="o" u2="?" k="61"/> + <hkern u1="o" u2="," k="41"/> + <hkern u1="p" u2="x" k="41"/> + <hkern u1="p" u2="v" k="41"/> + <hkern u1="p" u2="q" k="20"/> + <hkern u1="p" u2="p" k="10"/> + <hkern u1="p" u2="m" k="10"/> + <hkern u1="p" u2="h" k="10"/> + <hkern u1="p" u2="b" k="10"/> + <hkern u1="p" u2="?" k="61"/> + <hkern u1="p" u2="," k="41"/> + <hkern u1="q" u2="›" k="41"/> + <hkern u1="q" u2="”" k="41"/> + <hkern u1="q" u2="“" k="41"/> + <hkern u1="q" u2="’" k="41"/> + <hkern u1="q" u2="‘" k="41"/> + <hkern u1="q" u2="œ" k="10"/> + <hkern u1="q" u2="ÿ" k="20"/> + <hkern u1="q" u2="ý" k="20"/> + <hkern u1="q" u2="ø" k="10"/> + <hkern u1="q" u2="ö" k="10"/> + <hkern u1="q" u2="õ" k="10"/> + <hkern u1="q" u2="ô" k="10"/> + <hkern u1="q" u2="ó" k="10"/> + <hkern u1="q" u2="ò" k="10"/> + <hkern u1="q" u2="ë" k="10"/> + <hkern u1="q" u2="ê" k="10"/> + <hkern u1="q" u2="é" k="10"/> + <hkern u1="q" u2="è" k="10"/> + <hkern u1="q" u2="ç" k="20"/> + <hkern u1="q" u2="æ" k="31"/> + <hkern u1="q" u2="å" k="31"/> + <hkern u1="q" u2="ã" k="31"/> + <hkern u1="q" u2="â" k="31"/> + <hkern u1="q" u2="á" k="31"/> + <hkern u1="q" u2="à" k="31"/> + <hkern u1="q" u2="»" k="41"/> + <hkern u1="q" u2="y" k="20"/> + <hkern u1="q" u2="w" k="20"/> + <hkern u1="q" u2="t" k="10"/> + <hkern u1="q" u2="s" k="10"/> + <hkern u1="q" u2="o" k="10"/> + <hkern u1="q" u2="g" k="10"/> + <hkern u1="q" u2="e" k="10"/> + <hkern u1="q" u2="d" k="10"/> + <hkern u1="q" u2="c" k="20"/> + <hkern u1="q" u2="a" k="31"/> + <hkern u1="q" u2="ä" k="20"/> + <hkern u1="q" u2="x" k="20"/> + <hkern u1="q" u2="v" k="20"/> + <hkern u1="q" u2="q" k="10"/> + <hkern u1="q" u2="?" k="61"/> + <hkern u1="r" u2="v" k="-10"/> + <hkern u1="r" u2="q" k="41"/> + <hkern u1="r" u2="h" k="10"/> + <hkern u1="r" u2="b" k="10"/> + <hkern u1="r" u2="?" k="41"/> + <hkern u1="r" u2="," k="164"/> + <hkern u1="s" u2="ß" k="10"/> + <hkern u1="s" u2="x" k="20"/> + <hkern u1="s" u2="v" k="31"/> + <hkern u1="s" u2="q" k="10"/> + <hkern u1="s" u2="p" k="10"/> + <hkern u1="s" u2="m" k="10"/> + <hkern u1="s" u2="h" k="10"/> + <hkern u1="s" u2="b" k="10"/> + <hkern u1="s" u2="?" k="61"/> + <hkern u1="s" u2="," k="20"/> + <hkern u1="t" u2="ß" k="20"/> + <hkern u1="t" u2="q" k="41"/> + <hkern u1="t" u2="p" k="20"/> + <hkern u1="t" u2="m" k="20"/> + <hkern u1="t" u2="h" k="20"/> + <hkern u1="t" u2="b" k="10"/> + <hkern u1="t" u2="?" k="41"/> + <hkern u1="t" u2="," k="-20"/> + <hkern u1="u" u2="ä" k="20"/> + <hkern u1="u" u2="x" k="20"/> + <hkern u1="u" u2="v" k="20"/> + <hkern u1="u" u2="q" k="10"/> + <hkern u1="u" u2="?" k="61"/> + <hkern u1="v" u2="›" k="41"/> + <hkern u1="v" u2="‹" k="41"/> + <hkern u1="v" u2="…" k="164"/> + <hkern u1="v" u2="”" k="41"/> + <hkern u1="v" u2="’" k="41"/> + <hkern u1="v" u2="œ" k="41"/> + <hkern u1="v" u2="ü" k="20"/> + <hkern u1="v" u2="û" k="20"/> + <hkern u1="v" u2="ú" k="20"/> + <hkern u1="v" u2="ù" k="20"/> + <hkern u1="v" u2="ø" k="41"/> + <hkern u1="v" u2="ö" k="41"/> + <hkern u1="v" u2="õ" k="41"/> + <hkern u1="v" u2="ô" k="41"/> + <hkern u1="v" u2="ó" k="41"/> + <hkern u1="v" u2="ò" k="41"/> + <hkern u1="v" u2="ñ" k="20"/> + <hkern u1="v" u2="ï" k="20"/> + <hkern u1="v" u2="î" k="20"/> + <hkern u1="v" u2="í" k="20"/> + <hkern u1="v" u2="ì" k="20"/> + <hkern u1="v" u2="ë" k="31"/> + <hkern u1="v" u2="ê" k="31"/> + <hkern u1="v" u2="é" k="31"/> + <hkern u1="v" u2="è" k="31"/> + <hkern u1="v" u2="æ" k="41"/> + <hkern u1="v" u2="å" k="41"/> + <hkern u1="v" u2="ä" k="41"/> + <hkern u1="v" u2="ã" k="41"/> + <hkern u1="v" u2="â" k="41"/> + <hkern u1="v" u2="á" k="41"/> + <hkern u1="v" u2="à" k="41"/> + <hkern u1="v" u2="»" k="41"/> + <hkern u1="v" u2="«" k="41"/> + <hkern u1="v" u2=" " k="20"/> + <hkern u1="v" u2="}" k="20"/> + <hkern u1="v" u2="z" k="20"/> + <hkern u1="v" u2="u" k="20"/> + <hkern u1="v" u2="s" k="20"/> + <hkern u1="v" u2="r" k="20"/> + <hkern u1="v" u2="o" k="41"/> + <hkern u1="v" u2="n" k="20"/> + <hkern u1="v" u2="l" k="20"/> + <hkern u1="v" u2="k" k="20"/> + <hkern u1="v" u2="j" k="20"/> + <hkern u1="v" u2="i" k="20"/> + <hkern u1="v" u2="g" k="41"/> + <hkern u1="v" u2="e" k="31"/> + <hkern u1="v" u2="d" k="41"/> + <hkern u1="v" u2="c" k="41"/> + <hkern u1="v" u2="a" k="41"/> + <hkern u1="v" u2="]" k="20"/> + <hkern u1="v" u2="." k="164"/> + <hkern u1="v" u2=")" k="20"/> + <hkern u1="v" u2=" " k="20"/> + <hkern u1="v" u2="ç" k="31"/> + <hkern u1="v" u2="ß" k="20"/> + <hkern u1="v" u2="q" k="41"/> + <hkern u1="v" u2="p" k="20"/> + <hkern u1="v" u2="m" k="20"/> + <hkern u1="v" u2="h" k="20"/> + <hkern u1="v" u2="b" k="20"/> + <hkern u1="v" u2="?" k="41"/> + <hkern u1="v" u2="," k="143"/> + <hkern u1="w" u2="ß" k="20"/> + <hkern u1="w" u2="x" k="20"/> + <hkern u1="w" u2="q" k="41"/> + <hkern u1="w" u2="p" k="20"/> + <hkern u1="w" u2="m" k="20"/> + <hkern u1="w" u2="h" k="20"/> + <hkern u1="w" u2="b" k="20"/> + <hkern u1="w" u2="?" k="41"/> + <hkern u1="w" u2="," k="143"/> + <hkern u1="x" u2="›" k="41"/> + <hkern u1="x" u2="‹" k="61"/> + <hkern u1="x" u2="…" k="-20"/> + <hkern u1="x" u2="”" k="41"/> + <hkern u1="x" u2="’" k="41"/> + <hkern u1="x" u2="—" k="20"/> + <hkern u1="x" u2="–" k="20"/> + <hkern u1="x" u2="œ" k="41"/> + <hkern u1="x" u2="ü" k="20"/> + <hkern u1="x" u2="û" k="20"/> + <hkern u1="x" u2="ú" k="20"/> + <hkern u1="x" u2="ù" k="20"/> + <hkern u1="x" u2="ø" k="41"/> + <hkern u1="x" u2="ö" k="41"/> + <hkern u1="x" u2="õ" k="41"/> + <hkern u1="x" u2="ô" k="41"/> + <hkern u1="x" u2="ó" k="41"/> + <hkern u1="x" u2="ò" k="41"/> + <hkern u1="x" u2="ñ" k="20"/> + <hkern u1="x" u2="ï" k="20"/> + <hkern u1="x" u2="î" k="20"/> + <hkern u1="x" u2="í" k="20"/> + <hkern u1="x" u2="ì" k="20"/> + <hkern u1="x" u2="ë" k="31"/> + <hkern u1="x" u2="ê" k="31"/> + <hkern u1="x" u2="é" k="31"/> + <hkern u1="x" u2="è" k="31"/> + <hkern u1="x" u2="ç" k="41"/> + <hkern u1="x" u2="æ" k="20"/> + <hkern u1="x" u2="å" k="20"/> + <hkern u1="x" u2="ä" k="20"/> + <hkern u1="x" u2="ã" k="20"/> + <hkern u1="x" u2="â" k="20"/> + <hkern u1="x" u2="á" k="20"/> + <hkern u1="x" u2="à" k="20"/> + <hkern u1="x" u2="»" k="41"/> + <hkern u1="x" u2="­" k="20"/> + <hkern u1="x" u2="«" k="61"/> + <hkern u1="x" u2=" " k="20"/> + <hkern u1="x" u2="}" k="-20"/> + <hkern u1="x" u2="w" k="20"/> + <hkern u1="x" u2="u" k="20"/> + <hkern u1="x" u2="r" k="20"/> + <hkern u1="x" u2="o" k="41"/> + <hkern u1="x" u2="n" k="20"/> + <hkern u1="x" u2="l" k="20"/> + <hkern u1="x" u2="k" k="20"/> + <hkern u1="x" u2="j" k="20"/> + <hkern u1="x" u2="i" k="20"/> + <hkern u1="x" u2="g" k="41"/> + <hkern u1="x" u2="e" k="31"/> + <hkern u1="x" u2="d" k="41"/> + <hkern u1="x" u2="c" k="41"/> + <hkern u1="x" u2="a" k="20"/> + <hkern u1="x" u2="]" k="-20"/> + <hkern u1="x" u2="." k="-20"/> + <hkern u1="x" u2="-" k="20"/> + <hkern u1="x" u2=")" k="-20"/> + <hkern u1="x" u2=" " k="20"/> + <hkern u1="x" u2="ß" k="20"/> + <hkern u1="x" u2="q" k="41"/> + <hkern u1="x" u2="p" k="20"/> + <hkern u1="x" u2="m" k="20"/> + <hkern u1="x" u2="h" k="20"/> + <hkern u1="x" u2="b" k="20"/> + <hkern u1="x" u2="?" k="41"/> + <hkern u1="x" u2="," k="-20"/> + <hkern u1="y" u2="ç" k="20"/> + <hkern u1="y" u2="ß" k="20"/> + <hkern u1="y" u2="q" k="41"/> + <hkern u1="y" u2="p" k="20"/> + <hkern u1="y" u2="m" k="20"/> + <hkern u1="y" u2="h" k="20"/> + <hkern u1="y" u2="b" k="20"/> + <hkern u1="y" u2="?" k="41"/> + <hkern u1="y" u2="," k="143"/> + <hkern u1="z" u2="v" k="20"/> + <hkern u1="z" u2="q" k="41"/> + <hkern u1="z" u2="?" k="41"/> + <hkern u1="z" u2="," k="-20"/> + <hkern u1="{" u2="x" k="-20"/> + <hkern u1="{" u2="v" k="20"/> + <hkern u1="{" u2="q" k="20"/> + <hkern u1="{" u2="X" k="-20"/> + <hkern u1="{" u2="V" k="-20"/> + <hkern u1=" " u2="x" k="20"/> + <hkern u1=" " u2="v" k="20"/> + <hkern u1=" " u2="q" k="10"/> + <hkern u1=" " u2="X" k="20"/> + <hkern u1=" " u2="V" k="20"/> + <hkern u1="«" u2="x" k="41"/> + <hkern u1="«" u2="v" k="41"/> + <hkern u1="«" u2="q" k="41"/> + <hkern u1="«" u2="p" k="41"/> + <hkern u1="«" u2="m" k="41"/> + <hkern u1="«" u2="h" k="41"/> + <hkern u1="«" u2="b" k="41"/> + <hkern u1="«" u2="X" k="123"/> + <hkern u1="«" u2="V" k="123"/> + <hkern u1="«" u2="P" k="41"/> + <hkern u1="«" u2="M" k="41"/> + <hkern u1="«" u2="F" k="41"/> + <hkern u1="«" u2="B" k="41"/> + <hkern u1="­" u2="x" k="20"/> + <hkern u1="­" u2="X" k="123"/> + <hkern u1="­" u2="V" k="61"/> + <hkern u1="»" u2="x" k="61"/> + <hkern u1="»" u2="v" k="41"/> + <hkern u1="»" u2="X" k="123"/> + <hkern u1="»" u2="V" k="123"/> + <hkern u1="À" u2="v" k="41"/> + <hkern u1="À" u2="V" k="61"/> + <hkern u1="À" u2="Q" k="20"/> + <hkern u1="À" u2="?" k="61"/> + <hkern u1="À" u2="," k="-41"/> + <hkern u1="Á" u2="v" k="41"/> + <hkern u1="Á" u2="V" k="61"/> + <hkern u1="Á" u2="Q" k="20"/> + <hkern u1="Á" u2="?" k="61"/> + <hkern u1="Á" u2="," k="-41"/> + <hkern u1="Â" u2="v" k="41"/> + <hkern u1="Â" u2="V" k="61"/> + <hkern u1="Â" u2="Q" k="20"/> + <hkern u1="Â" u2="?" k="61"/> + <hkern u1="Â" u2="," k="-41"/> + <hkern u1="Ã" u2="v" k="41"/> + <hkern u1="Ã" u2="V" k="61"/> + <hkern u1="Ã" u2="Q" k="20"/> + <hkern u1="Ã" u2="?" k="61"/> + <hkern u1="Ã" u2="," k="-41"/> + <hkern u1="Ä" u2="v" k="41"/> + <hkern u1="Ä" u2="V" k="61"/> + <hkern u1="Ä" u2="Q" k="20"/> + <hkern u1="Ä" u2="?" k="61"/> + <hkern u1="Ä" u2="," k="-41"/> + <hkern u1="Å" u2="v" k="41"/> + <hkern u1="Å" u2="V" k="61"/> + <hkern u1="Å" u2="Q" k="20"/> + <hkern u1="Å" u2="?" k="61"/> + <hkern u1="Å" u2="," k="-41"/> + <hkern u1="Æ" u2="ë" k="41"/> + <hkern u1="Æ" u2="ê" k="41"/> + <hkern u1="Æ" u2="é" k="41"/> + <hkern u1="Æ" u2="è" k="41"/> + <hkern u1="Æ" u2="Ç" k="20"/> + <hkern u1="Æ" u2="g" k="51"/> + <hkern u1="Æ" u2="e" k="41"/> + <hkern u1="Æ" u2="T" k="20"/> + <hkern u1="Æ" u2="C" k="20"/> + <hkern u1="Æ" u2="ü" k="41"/> + <hkern u1="Æ" u2="x" k="20"/> + <hkern u1="Æ" u2="v" k="41"/> + <hkern u1="Æ" u2="q" k="41"/> + <hkern u1="Æ" u2="X" k="20"/> + <hkern u1="Æ" u2="V" k="20"/> + <hkern u1="Æ" u2="," k="-20"/> + <hkern u1="Ç" u2="v" k="82"/> + <hkern u1="Ç" u2="q" k="61"/> + <hkern u1="Ç" u2="p" k="20"/> + <hkern u1="Ç" u2="m" k="20"/> + <hkern u1="Ç" u2="h" k="20"/> + <hkern u1="Ç" u2="b" k="20"/> + <hkern u1="Ç" u2="P" k="20"/> + <hkern u1="Ç" u2="M" k="20"/> + <hkern u1="Ç" u2="F" k="20"/> + <hkern u1="Ç" u2="B" k="20"/> + <hkern u1="Ç" u2="," k="-41"/> + <hkern u1="È" u2="ü" k="41"/> + <hkern u1="È" u2="x" k="20"/> + <hkern u1="È" u2="v" k="41"/> + <hkern u1="È" u2="q" k="41"/> + <hkern u1="È" u2="X" k="20"/> + <hkern u1="È" u2="V" k="20"/> + <hkern u1="È" u2="," k="-20"/> + <hkern u1="É" u2="ü" k="41"/> + <hkern u1="É" u2="x" k="20"/> + <hkern u1="É" u2="v" k="41"/> + <hkern u1="É" u2="q" k="41"/> + <hkern u1="É" u2="X" k="20"/> + <hkern u1="É" u2="V" k="20"/> + <hkern u1="É" u2="," k="-20"/> + <hkern u1="Ê" u2="ü" k="41"/> + <hkern u1="Ê" u2="x" k="20"/> + <hkern u1="Ê" u2="v" k="41"/> + <hkern u1="Ê" u2="q" k="41"/> + <hkern u1="Ê" u2="X" k="20"/> + <hkern u1="Ê" u2="V" k="20"/> + <hkern u1="Ê" u2="," k="-20"/> + <hkern u1="Ë" u2="ü" k="41"/> + <hkern u1="Ë" u2="x" k="20"/> + <hkern u1="Ë" u2="v" k="41"/> + <hkern u1="Ë" u2="q" k="41"/> + <hkern u1="Ë" u2="X" k="20"/> + <hkern u1="Ë" u2="V" k="20"/> + <hkern u1="Ë" u2="," k="-20"/> + <hkern u1="Ì" u2="ü" k="82"/> + <hkern u1="Ì" u2="ö" k="82"/> + <hkern u1="Ì" u2="ä" k="41"/> + <hkern u1="Ì" u2="x" k="20"/> + <hkern u1="Ì" u2="v" k="123"/> + <hkern u1="Ì" u2="q" k="61"/> + <hkern u1="Ì" u2="p" k="20"/> + <hkern u1="Ì" u2="m" k="41"/> + <hkern u1="Ì" u2="h" k="20"/> + <hkern u1="Ì" u2="b" k="20"/> + <hkern u1="Ì" u2="," k="-20"/> + <hkern u1="Í" u2="ü" k="82"/> + <hkern u1="Í" u2="ö" k="82"/> + <hkern u1="Í" u2="ä" k="41"/> + <hkern u1="Í" u2="x" k="20"/> + <hkern u1="Í" u2="v" k="123"/> + <hkern u1="Í" u2="q" k="61"/> + <hkern u1="Í" u2="p" k="20"/> + <hkern u1="Í" u2="m" k="41"/> + <hkern u1="Í" u2="h" k="20"/> + <hkern u1="Í" u2="b" k="20"/> + <hkern u1="Í" u2="," k="-20"/> + <hkern u1="Î" u2="ü" k="82"/> + <hkern u1="Î" u2="ö" k="82"/> + <hkern u1="Î" u2="ä" k="41"/> + <hkern u1="Î" u2="x" k="20"/> + <hkern u1="Î" u2="v" k="123"/> + <hkern u1="Î" u2="q" k="61"/> + <hkern u1="Î" u2="p" k="20"/> + <hkern u1="Î" u2="m" k="41"/> + <hkern u1="Î" u2="h" k="20"/> + <hkern u1="Î" u2="b" k="20"/> + <hkern u1="Î" u2="," k="-20"/> + <hkern u1="Ï" u2="ü" k="82"/> + <hkern u1="Ï" u2="ö" k="82"/> + <hkern u1="Ï" u2="ä" k="41"/> + <hkern u1="Ï" u2="x" k="20"/> + <hkern u1="Ï" u2="v" k="123"/> + <hkern u1="Ï" u2="q" k="61"/> + <hkern u1="Ï" u2="p" k="20"/> + <hkern u1="Ï" u2="m" k="41"/> + <hkern u1="Ï" u2="h" k="20"/> + <hkern u1="Ï" u2="b" k="20"/> + <hkern u1="Ï" u2="," k="-20"/> + <hkern u1="Ð" u2="ñ" k="10"/> + <hkern u1="Ð" u2="ï" k="10"/> + <hkern u1="Ð" u2="î" k="10"/> + <hkern u1="Ð" u2="í" k="10"/> + <hkern u1="Ð" u2="ì" k="10"/> + <hkern u1="Ð" u2="Æ" k="82"/> + <hkern u1="Ð" u2="x" k="41"/> + <hkern u1="Ð" u2="v" k="20"/> + <hkern u1="Ð" u2="q" k="20"/> + <hkern u1="Ð" u2="X" k="51"/> + <hkern u1="Ð" u2="V" k="20"/> + <hkern u1="Ð" u2="?" k="41"/> + <hkern u1="Ð" u2="," k="82"/> + <hkern u1="Ñ" u2="x" k="20"/> + <hkern u1="Ñ" u2="v" k="20"/> + <hkern u1="Ñ" u2="q" k="10"/> + <hkern u1="Ò" u2="ü" k="10"/> + <hkern u1="Ò" u2="ä" k="31"/> + <hkern u1="Ò" u2="x" k="41"/> + <hkern u1="Ò" u2="v" k="20"/> + <hkern u1="Ò" u2="q" k="20"/> + <hkern u1="Ò" u2="X" k="72"/> + <hkern u1="Ò" u2="V" k="31"/> + <hkern u1="Ò" u2="?" k="41"/> + <hkern u1="Ò" u2=";" k="20"/> + <hkern u1="Ò" u2="," k="82"/> + <hkern u1="Ó" u2="ü" k="10"/> + <hkern u1="Ó" u2="ä" k="31"/> + <hkern u1="Ó" u2="x" k="41"/> + <hkern u1="Ó" u2="v" k="20"/> + <hkern u1="Ó" u2="q" k="20"/> + <hkern u1="Ó" u2="X" k="72"/> + <hkern u1="Ó" u2="V" k="31"/> + <hkern u1="Ó" u2="?" k="41"/> + <hkern u1="Ó" u2=";" k="20"/> + <hkern u1="Ó" u2="," k="82"/> + <hkern u1="Ô" u2="ü" k="10"/> + <hkern u1="Ô" u2="ä" k="31"/> + <hkern u1="Ô" u2="x" k="41"/> + <hkern u1="Ô" u2="v" k="20"/> + <hkern u1="Ô" u2="q" k="20"/> + <hkern u1="Ô" u2="X" k="72"/> + <hkern u1="Ô" u2="V" k="31"/> + <hkern u1="Ô" u2="?" k="41"/> + <hkern u1="Ô" u2=";" k="20"/> + <hkern u1="Ô" u2="," k="82"/> + <hkern u1="Õ" u2="ü" k="10"/> + <hkern u1="Õ" u2="ä" k="31"/> + <hkern u1="Õ" u2="x" k="41"/> + <hkern u1="Õ" u2="v" k="20"/> + <hkern u1="Õ" u2="q" k="20"/> + <hkern u1="Õ" u2="X" k="72"/> + <hkern u1="Õ" u2="V" k="31"/> + <hkern u1="Õ" u2="?" k="41"/> + <hkern u1="Õ" u2=";" k="20"/> + <hkern u1="Õ" u2="," k="82"/> + <hkern u1="Ö" u2="ü" k="10"/> + <hkern u1="Ö" u2="ä" k="31"/> + <hkern u1="Ö" u2="x" k="41"/> + <hkern u1="Ö" u2="v" k="20"/> + <hkern u1="Ö" u2="q" k="20"/> + <hkern u1="Ö" u2="X" k="72"/> + <hkern u1="Ö" u2="V" k="31"/> + <hkern u1="Ö" u2="?" k="41"/> + <hkern u1="Ö" u2=";" k="20"/> + <hkern u1="Ö" u2="," k="82"/> + <hkern u1="Ø" u2="ü" k="10"/> + <hkern u1="Ø" u2="ä" k="31"/> + <hkern u1="Ø" u2="x" k="41"/> + <hkern u1="Ø" u2="v" k="20"/> + <hkern u1="Ø" u2="q" k="20"/> + <hkern u1="Ø" u2="X" k="72"/> + <hkern u1="Ø" u2="V" k="31"/> + <hkern u1="Ø" u2="?" k="41"/> + <hkern u1="Ø" u2=";" k="20"/> + <hkern u1="Ø" u2="," k="82"/> + <hkern u1="Ù" u2="x" k="41"/> + <hkern u1="Ù" u2="v" k="20"/> + <hkern u1="Ù" u2="q" k="10"/> + <hkern u1="Ù" u2="X" k="20"/> + <hkern u1="Ù" u2="," k="82"/> + <hkern u1="Ú" u2="x" k="41"/> + <hkern u1="Ú" u2="v" k="20"/> + <hkern u1="Ú" u2="q" k="10"/> + <hkern u1="Ú" u2="X" k="20"/> + <hkern u1="Ú" u2="," k="82"/> + <hkern u1="Û" u2="x" k="41"/> + <hkern u1="Û" u2="v" k="20"/> + <hkern u1="Û" u2="q" k="10"/> + <hkern u1="Û" u2="X" k="20"/> + <hkern u1="Û" u2="," k="82"/> + <hkern u1="Ü" u2="æ" k="31"/> + <hkern u1="Ü" u2="å" k="31"/> + <hkern u1="Ü" u2="ä" k="31"/> + <hkern u1="Ü" u2="ã" k="31"/> + <hkern u1="Ü" u2="â" k="31"/> + <hkern u1="Ü" u2="á" k="31"/> + <hkern u1="Ü" u2="à" k="31"/> + <hkern u1="Ü" u2="a" k="31"/> + <hkern u1="Ü" u2="x" k="41"/> + <hkern u1="Ü" u2="v" k="20"/> + <hkern u1="Ü" u2="q" k="10"/> + <hkern u1="Ü" u2="X" k="20"/> + <hkern u1="Ü" u2="," k="82"/> + <hkern u1="Ý" u2="ÿ" k="123"/> + <hkern u1="Ý" u2="ý" k="123"/> + <hkern u1="Ý" u2="Ç" k="61"/> + <hkern u1="Ý" u2="y" k="123"/> + <hkern u1="Ý" u2="w" k="123"/> + <hkern u1="Ý" u2="C" k="61"/> + <hkern u1="Ý" u2="ü" k="123"/> + <hkern u1="Ý" u2="û" k="123"/> + <hkern u1="Ý" u2="ö" k="143"/> + <hkern u1="Ý" u2="õ" k="123"/> + <hkern u1="Ý" u2="ô" k="143"/> + <hkern u1="Ý" u2="ë" k="133"/> + <hkern u1="Ý" u2="ê" k="133"/> + <hkern u1="Ý" u2="å" k="164"/> + <hkern u1="Ý" u2="ä" k="123"/> + <hkern u1="Ý" u2="ã" k="123"/> + <hkern u1="Ý" u2="â" k="123"/> + <hkern u1="Ý" u2="á" k="164"/> + <hkern u1="Ý" u2="à" k="164"/> + <hkern u1="Ý" u2="x" k="102"/> + <hkern u1="Ý" u2="v" k="123"/> + <hkern u1="Ý" u2="q" k="184"/> + <hkern u1="Ý" u2="p" k="143"/> + <hkern u1="Ý" u2="m" k="143"/> + <hkern u1="Ý" u2="h" k="41"/> + <hkern u1="Ý" u2="b" k="41"/> + <hkern u1="Ý" u2="," k="246"/> + <hkern u1="ß" g2="uniFB02" k="61"/> + <hkern u1="ß" g2="uniFB01" k="61"/> + <hkern u1="ß" u2="…" k="41"/> + <hkern u1="ß" u2="—" k="102"/> + <hkern u1="ß" u2="–" k="102"/> + <hkern u1="ß" u2="œ" k="41"/> + <hkern u1="ß" u2="ÿ" k="82"/> + <hkern u1="ß" u2="ý" k="82"/> + <hkern u1="ß" u2="ü" k="41"/> + <hkern u1="ß" u2="û" k="41"/> + <hkern u1="ß" u2="ú" k="41"/> + <hkern u1="ß" u2="ù" k="41"/> + <hkern u1="ß" u2="ø" k="41"/> + <hkern u1="ß" u2="ö" k="41"/> + <hkern u1="ß" u2="õ" k="41"/> + <hkern u1="ß" u2="ô" k="41"/> + <hkern u1="ß" u2="ó" k="41"/> + <hkern u1="ß" u2="ò" k="41"/> + <hkern u1="ß" u2="ñ" k="41"/> + <hkern u1="ß" u2="ï" k="41"/> + <hkern u1="ß" u2="î" k="41"/> + <hkern u1="ß" u2="í" k="41"/> + <hkern u1="ß" u2="ì" k="41"/> + <hkern u1="ß" u2="ë" k="41"/> + <hkern u1="ß" u2="ê" k="41"/> + <hkern u1="ß" u2="é" k="41"/> + <hkern u1="ß" u2="è" k="41"/> + <hkern u1="ß" u2="ç" k="41"/> + <hkern u1="ß" u2="æ" k="41"/> + <hkern u1="ß" u2="å" k="41"/> + <hkern u1="ß" u2="ä" k="41"/> + <hkern u1="ß" u2="ã" k="41"/> + <hkern u1="ß" u2="â" k="41"/> + <hkern u1="ß" u2="á" k="41"/> + <hkern u1="ß" u2="à" k="41"/> + <hkern u1="ß" u2="­" k="102"/> + <hkern u1="ß" u2="z" k="41"/> + <hkern u1="ß" u2="y" k="82"/> + <hkern u1="ß" u2="w" k="82"/> + <hkern u1="ß" u2="u" k="41"/> + <hkern u1="ß" u2="t" k="51"/> + <hkern u1="ß" u2="s" k="61"/> + <hkern u1="ß" u2="r" k="20"/> + <hkern u1="ß" u2="o" k="41"/> + <hkern u1="ß" u2="n" k="41"/> + <hkern u1="ß" u2="l" k="41"/> + <hkern u1="ß" u2="k" k="41"/> + <hkern u1="ß" u2="j" k="41"/> + <hkern u1="ß" u2="i" k="41"/> + <hkern u1="ß" u2="g" k="41"/> + <hkern u1="ß" u2="f" k="61"/> + <hkern u1="ß" u2="e" k="41"/> + <hkern u1="ß" u2="d" k="41"/> + <hkern u1="ß" u2="c" k="41"/> + <hkern u1="ß" u2="a" k="41"/> + <hkern u1="ß" u2="." k="41"/> + <hkern u1="ß" u2="-" k="102"/> + <hkern u1="ß" u2="x" k="41"/> + <hkern u1="ß" u2="v" k="82"/> + <hkern u1="ß" u2="q" k="41"/> + <hkern u1="ß" u2="p" k="41"/> + <hkern u1="ß" u2="m" k="41"/> + <hkern u1="ß" u2="h" k="41"/> + <hkern u1="ß" u2="b" k="41"/> + <hkern u1="ß" u2="," k="41"/> + <hkern u1="à" u2="ü" k="10"/> + <hkern u1="à" u2="x" k="20"/> + <hkern u1="à" u2="v" k="41"/> + <hkern u1="à" u2="q" k="10"/> + <hkern u1="à" u2="?" k="82"/> + <hkern u1="á" u2="ü" k="10"/> + <hkern u1="á" u2="x" k="20"/> + <hkern u1="á" u2="v" k="41"/> + <hkern u1="á" u2="q" k="10"/> + <hkern u1="á" u2="?" k="82"/> + <hkern u1="â" u2="ü" k="10"/> + <hkern u1="â" u2="x" k="20"/> + <hkern u1="â" u2="v" k="41"/> + <hkern u1="â" u2="q" k="10"/> + <hkern u1="â" u2="?" k="82"/> + <hkern u1="ã" u2="ü" k="10"/> + <hkern u1="ã" u2="x" k="20"/> + <hkern u1="ã" u2="v" k="41"/> + <hkern u1="ã" u2="q" k="10"/> + <hkern u1="ã" u2="?" k="82"/> + <hkern u1="ä" u2="ü" k="10"/> + <hkern u1="ä" u2="x" k="20"/> + <hkern u1="ä" u2="v" k="41"/> + <hkern u1="ä" u2="q" k="10"/> + <hkern u1="ä" u2="?" k="82"/> + <hkern u1="å" u2="ü" k="10"/> + <hkern u1="å" u2="x" k="20"/> + <hkern u1="å" u2="v" k="41"/> + <hkern u1="å" u2="q" k="10"/> + <hkern u1="å" u2="?" k="82"/> + <hkern u1="æ" u2="ÿ" k="31"/> + <hkern u1="æ" u2="ý" k="31"/> + <hkern u1="æ" u2="y" k="31"/> + <hkern u1="æ" u2="x" k="31"/> + <hkern u1="æ" u2="v" k="31"/> + <hkern u1="æ" u2="q" k="10"/> + <hkern u1="æ" u2="p" k="10"/> + <hkern u1="æ" u2="m" k="10"/> + <hkern u1="æ" u2="h" k="10"/> + <hkern u1="æ" u2="b" k="10"/> + <hkern u1="æ" u2="?" k="61"/> + <hkern u1="æ" u2=";" k="10"/> + <hkern u1="æ" u2="," k="20"/> + <hkern u1="ç" u2="œ" k="41"/> + <hkern u1="ç" u2="ø" k="41"/> + <hkern u1="ç" u2="ö" k="41"/> + <hkern u1="ç" u2="õ" k="41"/> + <hkern u1="ç" u2="ô" k="41"/> + <hkern u1="ç" u2="ó" k="41"/> + <hkern u1="ç" u2="ò" k="41"/> + <hkern u1="ç" u2="o" k="41"/> + <hkern u1="ç" u2="v" k="20"/> + <hkern u1="ç" u2="q" k="41"/> + <hkern u1="ç" u2="p" k="10"/> + <hkern u1="ç" u2="h" k="20"/> + <hkern u1="ç" u2="b" k="20"/> + <hkern u1="ç" u2="?" k="41"/> + <hkern u1="è" u2="x" k="31"/> + <hkern u1="è" u2="v" k="31"/> + <hkern u1="è" u2="q" k="10"/> + <hkern u1="è" u2="p" k="10"/> + <hkern u1="è" u2="m" k="10"/> + <hkern u1="è" u2="h" k="10"/> + <hkern u1="è" u2="b" k="10"/> + <hkern u1="è" u2="?" k="61"/> + <hkern u1="è" u2=";" k="10"/> + <hkern u1="è" u2="," k="20"/> + <hkern u1="é" u2="x" k="31"/> + <hkern u1="é" u2="v" k="31"/> + <hkern u1="é" u2="q" k="10"/> + <hkern u1="é" u2="p" k="10"/> + <hkern u1="é" u2="m" k="10"/> + <hkern u1="é" u2="h" k="10"/> + <hkern u1="é" u2="b" k="10"/> + <hkern u1="é" u2="?" k="61"/> + <hkern u1="é" u2=";" k="10"/> + <hkern u1="é" u2="," k="20"/> + <hkern u1="ê" u2="x" k="31"/> + <hkern u1="ê" u2="v" k="31"/> + <hkern u1="ê" u2="q" k="10"/> + <hkern u1="ê" u2="p" k="10"/> + <hkern u1="ê" u2="m" k="10"/> + <hkern u1="ê" u2="h" k="10"/> + <hkern u1="ê" u2="b" k="10"/> + <hkern u1="ê" u2="?" k="61"/> + <hkern u1="ê" u2=";" k="10"/> + <hkern u1="ê" u2="," k="20"/> + <hkern u1="ë" u2="x" k="31"/> + <hkern u1="ë" u2="v" k="31"/> + <hkern u1="ë" u2="q" k="10"/> + <hkern u1="ë" u2="p" k="10"/> + <hkern u1="ë" u2="m" k="10"/> + <hkern u1="ë" u2="h" k="10"/> + <hkern u1="ë" u2="b" k="10"/> + <hkern u1="ë" u2="?" k="61"/> + <hkern u1="ë" u2=";" k="10"/> + <hkern u1="ë" u2="," k="20"/> + <hkern u1="ì" u2="ä" k="20"/> + <hkern u1="ì" u2="x" k="20"/> + <hkern u1="ì" u2="v" k="20"/> + <hkern u1="ì" u2="q" k="10"/> + <hkern u1="í" u2="ä" k="20"/> + <hkern u1="í" u2="x" k="20"/> + <hkern u1="í" u2="v" k="20"/> + <hkern u1="í" u2="q" k="10"/> + <hkern u1="î" u2="ä" k="20"/> + <hkern u1="î" u2="x" k="20"/> + <hkern u1="î" u2="v" k="20"/> + <hkern u1="î" u2="q" k="10"/> + <hkern u1="ï" u2="ä" k="20"/> + <hkern u1="ï" u2="x" k="20"/> + <hkern u1="ï" u2="v" k="20"/> + <hkern u1="ï" u2="q" k="10"/> + <hkern u1="ñ" u2="ä" k="20"/> + <hkern u1="ñ" u2="x" k="20"/> + <hkern u1="ñ" u2="v" k="41"/> + <hkern u1="ñ" u2="q" k="10"/> + <hkern u1="ñ" u2="?" k="61"/> + <hkern u1="ò" u2="x" k="41"/> + <hkern u1="ò" u2="v" k="41"/> + <hkern u1="ò" u2="q" k="20"/> + <hkern u1="ò" u2="p" k="10"/> + <hkern u1="ò" u2="m" k="10"/> + <hkern u1="ò" u2="h" k="10"/> + <hkern u1="ò" u2="b" k="10"/> + <hkern u1="ò" u2="?" k="61"/> + <hkern u1="ò" u2="," k="41"/> + <hkern u1="ó" u2="x" k="41"/> + <hkern u1="ó" u2="v" k="41"/> + <hkern u1="ó" u2="q" k="20"/> + <hkern u1="ó" u2="p" k="10"/> + <hkern u1="ó" u2="m" k="10"/> + <hkern u1="ó" u2="h" k="10"/> + <hkern u1="ó" u2="b" k="10"/> + <hkern u1="ó" u2="?" k="61"/> + <hkern u1="ó" u2="," k="41"/> + <hkern u1="ô" u2="x" k="41"/> + <hkern u1="ô" u2="v" k="41"/> + <hkern u1="ô" u2="q" k="20"/> + <hkern u1="ô" u2="p" k="10"/> + <hkern u1="ô" u2="m" k="10"/> + <hkern u1="ô" u2="h" k="10"/> + <hkern u1="ô" u2="b" k="10"/> + <hkern u1="ô" u2="?" k="61"/> + <hkern u1="ô" u2="," k="41"/> + <hkern u1="õ" u2="x" k="41"/> + <hkern u1="õ" u2="v" k="41"/> + <hkern u1="õ" u2="q" k="20"/> + <hkern u1="õ" u2="p" k="10"/> + <hkern u1="õ" u2="m" k="10"/> + <hkern u1="õ" u2="h" k="10"/> + <hkern u1="õ" u2="b" k="10"/> + <hkern u1="õ" u2="?" k="61"/> + <hkern u1="õ" u2="," k="41"/> + <hkern u1="ö" u2="s" k="10"/> + <hkern u1="ö" u2="x" k="41"/> + <hkern u1="ö" u2="v" k="41"/> + <hkern u1="ö" u2="q" k="20"/> + <hkern u1="ö" u2="p" k="10"/> + <hkern u1="ö" u2="m" k="10"/> + <hkern u1="ö" u2="h" k="10"/> + <hkern u1="ö" u2="b" k="10"/> + <hkern u1="ö" u2="?" k="61"/> + <hkern u1="ö" u2="," k="41"/> + <hkern u1="ø" u2="x" k="41"/> + <hkern u1="ø" u2="v" k="41"/> + <hkern u1="ø" u2="q" k="20"/> + <hkern u1="ø" u2="p" k="10"/> + <hkern u1="ø" u2="m" k="10"/> + <hkern u1="ø" u2="h" k="10"/> + <hkern u1="ø" u2="b" k="10"/> + <hkern u1="ø" u2="?" k="61"/> + <hkern u1="ø" u2="," k="41"/> + <hkern u1="ù" u2="ä" k="20"/> + <hkern u1="ù" u2="x" k="20"/> + <hkern u1="ù" u2="v" k="20"/> + <hkern u1="ù" u2="q" k="10"/> + <hkern u1="ù" u2="?" k="61"/> + <hkern u1="ú" u2="ä" k="20"/> + <hkern u1="ú" u2="x" k="20"/> + <hkern u1="ú" u2="v" k="20"/> + <hkern u1="ú" u2="q" k="10"/> + <hkern u1="ú" u2="?" k="61"/> + <hkern u1="û" u2="ä" k="20"/> + <hkern u1="û" u2="x" k="20"/> + <hkern u1="û" u2="v" k="20"/> + <hkern u1="û" u2="q" k="10"/> + <hkern u1="û" u2="?" k="61"/> + <hkern u1="ü" u2="ä" k="20"/> + <hkern u1="ü" u2="x" k="20"/> + <hkern u1="ü" u2="v" k="20"/> + <hkern u1="ü" u2="q" k="10"/> + <hkern u1="ü" u2="?" k="61"/> + <hkern u1="ý" u2="ç" k="20"/> + <hkern u1="ý" u2="ß" k="20"/> + <hkern u1="ý" u2="q" k="41"/> + <hkern u1="ý" u2="p" k="20"/> + <hkern u1="ý" u2="m" k="20"/> + <hkern u1="ý" u2="h" k="20"/> + <hkern u1="ý" u2="b" k="20"/> + <hkern u1="ý" u2="?" k="41"/> + <hkern u1="ý" u2="," k="143"/> + <hkern u1="þ" u2="x" k="41"/> + <hkern u1="þ" u2="v" k="41"/> + <hkern u1="þ" u2="q" k="20"/> + <hkern u1="þ" u2="p" k="10"/> + <hkern u1="þ" u2="m" k="10"/> + <hkern u1="þ" u2="h" k="10"/> + <hkern u1="þ" u2="b" k="10"/> + <hkern u1="þ" u2="?" k="61"/> + <hkern u1="þ" u2="," k="41"/> + <hkern u1="ÿ" u2="ç" k="20"/> + <hkern u1="ÿ" u2="ß" k="20"/> + <hkern u1="ÿ" u2="q" k="41"/> + <hkern u1="ÿ" u2="p" k="20"/> + <hkern u1="ÿ" u2="m" k="20"/> + <hkern u1="ÿ" u2="h" k="20"/> + <hkern u1="ÿ" u2="b" k="20"/> + <hkern u1="ÿ" u2="?" k="41"/> + <hkern u1="ÿ" u2="," k="143"/> + <hkern u1="Œ" u2="Ç" k="20"/> + <hkern u1="Œ" u2="C" k="20"/> + <hkern u1="Œ" u2="ü" k="41"/> + <hkern u1="Œ" u2="x" k="20"/> + <hkern u1="Œ" u2="v" k="41"/> + <hkern u1="Œ" u2="q" k="41"/> + <hkern u1="Œ" u2="X" k="20"/> + <hkern u1="Œ" u2="V" k="20"/> + <hkern u1="Œ" u2="," k="-20"/> + <hkern u1="œ" u2="ÿ" k="31"/> + <hkern u1="œ" u2="ý" k="31"/> + <hkern u1="œ" u2="y" k="31"/> + <hkern u1="œ" u2="x" k="31"/> + <hkern u1="œ" u2="v" k="31"/> + <hkern u1="œ" u2="q" k="10"/> + <hkern u1="œ" u2="p" k="10"/> + <hkern u1="œ" u2="m" k="10"/> + <hkern u1="œ" u2="h" k="10"/> + <hkern u1="œ" u2="b" k="10"/> + <hkern u1="œ" u2="?" k="61"/> + <hkern u1="œ" u2=";" k="10"/> + <hkern u1="œ" u2="," k="20"/> + <hkern u1="Ÿ" u2="ü" k="123"/> + <hkern u1="Ÿ" u2="û" k="123"/> + <hkern u1="Ÿ" u2="ö" k="143"/> + <hkern u1="Ÿ" u2="õ" k="123"/> + <hkern u1="Ÿ" u2="ô" k="143"/> + <hkern u1="Ÿ" u2="ë" k="133"/> + <hkern u1="Ÿ" u2="ê" k="133"/> + <hkern u1="Ÿ" u2="å" k="164"/> + <hkern u1="Ÿ" u2="ä" k="123"/> + <hkern u1="Ÿ" u2="ã" k="123"/> + <hkern u1="Ÿ" u2="â" k="123"/> + <hkern u1="Ÿ" u2="á" k="164"/> + <hkern u1="Ÿ" u2="à" k="164"/> + <hkern u1="Ÿ" u2="x" k="102"/> + <hkern u1="Ÿ" u2="v" k="102"/> + <hkern u1="Ÿ" u2="q" k="184"/> + <hkern u1="Ÿ" u2="p" k="143"/> + <hkern u1="Ÿ" u2="m" k="143"/> + <hkern u1="Ÿ" u2="h" k="41"/> + <hkern u1="Ÿ" u2="b" k="41"/> + <hkern u1="Ÿ" u2="," k="246"/> + <hkern u1="–" u2="x" k="20"/> + <hkern u1="–" u2="X" k="123"/> + <hkern u1="–" u2="V" k="61"/> + <hkern u1="—" u2="x" k="20"/> + <hkern u1="—" u2="X" k="123"/> + <hkern u1="—" u2="V" k="61"/> + <hkern u1="‘" u2="q" k="82"/> + <hkern u1="‘" u2="p" k="41"/> + <hkern u1="‘" u2="m" k="41"/> + <hkern u1="‘" u2="X" k="41"/> + <hkern u1="’" u2="x" k="41"/> + <hkern u1="’" u2="v" k="41"/> + <hkern u1="’" u2="q" k="123"/> + <hkern u1="’" u2="p" k="41"/> + <hkern u1="’" u2="m" k="41"/> + <hkern u1="‚" u2="x" k="-41"/> + <hkern u1="‚" u2="v" k="164"/> + <hkern u1="‚" u2="q" k="82"/> + <hkern u1="‚" u2="X" k="-41"/> + <hkern u1="‚" u2="V" k="205"/> + <hkern u1="“" u2="q" k="82"/> + <hkern u1="“" u2="p" k="41"/> + <hkern u1="“" u2="m" k="41"/> + <hkern u1="“" u2="X" k="41"/> + <hkern u1="”" u2="x" k="41"/> + <hkern u1="”" u2="v" k="41"/> + <hkern u1="”" u2="q" k="123"/> + <hkern u1="”" u2="p" k="41"/> + <hkern u1="”" u2="m" k="41"/> + <hkern u1="„" u2="x" k="-41"/> + <hkern u1="„" u2="v" k="164"/> + <hkern u1="„" u2="q" k="82"/> + <hkern u1="„" u2="X" k="-41"/> + <hkern u1="„" u2="V" k="205"/> + <hkern u1="…" u2="–" k="82"/> + <hkern u1="…" u2="x" k="-20"/> + <hkern u1="…" u2="v" k="164"/> + <hkern u1="…" u2="q" k="41"/> + <hkern u1="…" u2="X" k="-41"/> + <hkern u1="…" u2="V" k="205"/> + <hkern u1="‹" u2="x" k="41"/> + <hkern u1="‹" u2="v" k="41"/> + <hkern u1="‹" u2="q" k="41"/> + <hkern u1="‹" u2="p" k="41"/> + <hkern u1="‹" u2="m" k="41"/> + <hkern u1="‹" u2="h" k="41"/> + <hkern u1="‹" u2="b" k="41"/> + <hkern u1="‹" u2="X" k="123"/> + <hkern u1="‹" u2="V" k="123"/> + <hkern u1="‹" u2="P" k="41"/> + <hkern u1="‹" u2="M" k="41"/> + <hkern u1="‹" u2="F" k="41"/> + <hkern u1="‹" u2="B" k="41"/> + <hkern u1="›" u2="x" k="61"/> + <hkern u1="›" u2="v" k="41"/> + <hkern u1="›" u2="X" k="123"/> + <hkern u1="›" u2="V" k="123"/> + <hkern g1="uniFB01" u2="ä" k="20"/> + <hkern g1="uniFB01" u2="x" k="20"/> + <hkern g1="uniFB01" u2="v" k="20"/> + <hkern g1="uniFB01" u2="q" k="10"/> + <hkern g1="uniFB02" u2="x" k="20"/> + <hkern g1="uniFB02" u2="v" k="20"/> + <hkern g1="uniFB02" u2="q" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="c,ccedilla" k="20"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="d" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="e,egrave,eacute,ecircumflex,edieresis" + k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="g" k="20"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="s" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="t" k="10"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="w" k="41"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="quoteright,quotedblright" k="82"/> + <hkern g1="c,ccedilla" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="c,ccedilla" g2="c,ccedilla" k="41"/> + <hkern g1="c,ccedilla" g2="d" k="41"/> + <hkern g1="c,ccedilla" g2="e,egrave,eacute,ecircumflex,edieresis" k="41"/> + <hkern g1="c,ccedilla" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="c,ccedilla" g2="g" k="51"/> + <hkern g1="c,ccedilla" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="51"/> + <hkern g1="c,ccedilla" g2="s" k="10"/> + <hkern g1="c,ccedilla" g2="w" k="20"/> + <hkern g1="c,ccedilla" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="c,ccedilla" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="c,ccedilla" g2="quoteleft,quotedblleft" k="-20"/> + <hkern g1="c,ccedilla" g2="space,uni00A0" k="20"/> + <hkern g1="c,ccedilla" g2="hyphen,uni00AD,endash,emdash" k="41"/> + <hkern g1="c,ccedilla" g2="period,ellipsis" k="-31"/> + <hkern g1="c,ccedilla" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="c,ccedilla" g2="j" k="20"/> + <hkern g1="c,ccedilla" g2="k" k="20"/> + <hkern g1="c,ccedilla" g2="l" k="20"/> + <hkern g1="c,ccedilla" g2="r" k="10"/> + <hkern g1="c,ccedilla" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="c,ccedilla" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="c,ccedilla" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="d" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="g" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="t" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="w" k="31"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="quoteright,quotedblright" k="82"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="space,uni00A0" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="period,ellipsis" k="41"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="i,igrave,iacute,icircumflex,idieresis" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="j" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="k" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="l" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="r" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="parenright,bracketright,braceright" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="colon,semicolon" k="20"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="n,ntilde" k="10"/> + <hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="z" k="10"/> + <hkern g1="g" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="g" g2="c,ccedilla" k="20"/> + <hkern g1="g" g2="d" k="10"/> + <hkern g1="g" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="g" g2="g" k="10"/> + <hkern g1="g" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="g" g2="s" k="10"/> + <hkern g1="g" g2="t" k="10"/> + <hkern g1="g" g2="w" k="20"/> + <hkern g1="g" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="g" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="g" g2="quoteleft,quotedblleft" k="20"/> + <hkern g1="g" g2="quoteright,quotedblright" k="41"/> + <hkern g1="h" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="h" g2="c,ccedilla" k="20"/> + <hkern g1="h" g2="d" k="10"/> + <hkern g1="h" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="h" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="h" g2="g" k="20"/> + <hkern g1="h" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="h" g2="s" k="10"/> + <hkern g1="h" g2="w" k="41"/> + <hkern g1="h" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="h" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="h" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="h" g2="quoteright,quotedblright" k="82"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="c,ccedilla" k="20"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="d" k="10"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="e,egrave,eacute,ecircumflex,edieresis" + k="10"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="g" k="20"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="s" k="10"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="w" k="20"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="i,igrave,iacute,icircumflex,idieresis,uniFB01" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="j" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="j" g2="c,ccedilla" k="20"/> + <hkern g1="j" g2="d" k="10"/> + <hkern g1="j" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="j" g2="g" k="20"/> + <hkern g1="j" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="j" g2="s" k="10"/> + <hkern g1="j" g2="w" k="20"/> + <hkern g1="j" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="j" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="k" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="k" g2="c,ccedilla" k="51"/> + <hkern g1="k" g2="d" k="51"/> + <hkern g1="k" g2="e,egrave,eacute,ecircumflex,edieresis" k="41"/> + <hkern g1="k" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="k" g2="g" k="51"/> + <hkern g1="k" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="31"/> + <hkern g1="k" g2="s" k="10"/> + <hkern g1="k" g2="w" k="20"/> + <hkern g1="k" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="k" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="k" g2="quoteright,quotedblright" k="41"/> + <hkern g1="k" g2="space,uni00A0" k="20"/> + <hkern g1="k" g2="hyphen,uni00AD,endash,emdash" k="41"/> + <hkern g1="k" g2="period,ellipsis" k="-20"/> + <hkern g1="k" g2="i,igrave,iacute,icircumflex,idieresis" k="10"/> + <hkern g1="k" g2="j" k="10"/> + <hkern g1="k" g2="k" k="10"/> + <hkern g1="k" g2="l" k="10"/> + <hkern g1="k" g2="r" k="10"/> + <hkern g1="k" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="k" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="k" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="k" g2="n,ntilde" k="10"/> + <hkern g1="l,uniFB02" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="l,uniFB02" g2="c,ccedilla" k="20"/> + <hkern g1="l,uniFB02" g2="d" k="10"/> + <hkern g1="l,uniFB02" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="l,uniFB02" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="l,uniFB02" g2="g" k="20"/> + <hkern g1="l,uniFB02" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="l,uniFB02" g2="s" k="10"/> + <hkern g1="l,uniFB02" g2="w" k="20"/> + <hkern g1="l,uniFB02" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="l,uniFB02" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="n,ntilde" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="n,ntilde" g2="c,ccedilla" k="20"/> + <hkern g1="n,ntilde" g2="d" k="10"/> + <hkern g1="n,ntilde" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="n,ntilde" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="n,ntilde" g2="g" k="20"/> + <hkern g1="n,ntilde" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="n,ntilde" g2="s" k="10"/> + <hkern g1="n,ntilde" g2="w" k="41"/> + <hkern g1="n,ntilde" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="n,ntilde" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="n,ntilde" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="n,ntilde" g2="quoteright,quotedblright" k="82"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="c,ccedilla" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="d" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="e,egrave,eacute,ecircumflex,edieresis" + k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="f,uniFB01,uniFB02" k="31"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="g" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="t" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="w" k="41"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="quoteright,quotedblright" k="82"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="space,uni00A0" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="period,ellipsis" k="51"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="i,igrave,iacute,icircumflex,idieresis" + k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="j" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="k" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="l" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="r" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="u,ugrave,uacute,ucircumflex,udieresis" + k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="parenright,bracketright,braceright" + k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="colon,semicolon" k="20"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="n,ntilde" k="10"/> + <hkern g1="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash" g2="z" k="41"/> + <hkern g1="p,thorn" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="p,thorn" g2="c,ccedilla" k="20"/> + <hkern g1="p,thorn" g2="d" k="20"/> + <hkern g1="p,thorn" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="p,thorn" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="p,thorn" g2="g" k="20"/> + <hkern g1="p,thorn" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20"/> + <hkern g1="p,thorn" g2="s" k="10"/> + <hkern g1="p,thorn" g2="t" k="10"/> + <hkern g1="p,thorn" g2="w" k="41"/> + <hkern g1="p,thorn" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="p,thorn" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="p,thorn" g2="quoteleft,quotedblleft" k="82"/> + <hkern g1="p,thorn" g2="quoteright,quotedblright" k="82"/> + <hkern g1="p,thorn" g2="space,uni00A0" k="10"/> + <hkern g1="p,thorn" g2="period,ellipsis" k="41"/> + <hkern g1="p,thorn" g2="i,igrave,iacute,icircumflex,idieresis" k="10"/> + <hkern g1="p,thorn" g2="j" k="10"/> + <hkern g1="p,thorn" g2="k" k="10"/> + <hkern g1="p,thorn" g2="l" k="10"/> + <hkern g1="p,thorn" g2="r" k="10"/> + <hkern g1="p,thorn" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10"/> + <hkern g1="p,thorn" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="p,thorn" g2="colon,semicolon" k="20"/> + <hkern g1="p,thorn" g2="n,ntilde" k="10"/> + <hkern g1="p,thorn" g2="z" k="31"/> + <hkern g1="r" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="72"/> + <hkern g1="r" g2="c,ccedilla" k="51"/> + <hkern g1="r" g2="d" k="41"/> + <hkern g1="r" g2="e,egrave,eacute,ecircumflex,edieresis" k="51"/> + <hkern g1="r" g2="g" k="41"/> + <hkern g1="r" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="r" g2="y,yacute,ydieresis" k="-10"/> + <hkern g1="r" g2="guillemotright,guilsinglright" k="20"/> + <hkern g1="r" g2="space,uni00A0" k="20"/> + <hkern g1="r" g2="period,ellipsis" k="164"/> + <hkern g1="r" g2="k" k="10"/> + <hkern g1="r" g2="l" k="10"/> + <hkern g1="r" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="r" g2="parenright,bracketright,braceright" k="41"/> + <hkern g1="s" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="10"/> + <hkern g1="s" g2="c,ccedilla" k="10"/> + <hkern g1="s" g2="d" k="10"/> + <hkern g1="s" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="s" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="s" g2="g" k="20"/> + <hkern g1="s" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="s" g2="s" k="20"/> + <hkern g1="s" g2="t" k="20"/> + <hkern g1="s" g2="w" k="31"/> + <hkern g1="s" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="s" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="s" g2="quoteleft,quotedblleft" k="61"/> + <hkern g1="s" g2="quoteright,quotedblright" k="61"/> + <hkern g1="s" g2="space,uni00A0" k="10"/> + <hkern g1="s" g2="hyphen,uni00AD,endash,emdash" k="41"/> + <hkern g1="s" g2="period,ellipsis" k="10"/> + <hkern g1="s" g2="i,igrave,iacute,icircumflex,idieresis" k="10"/> + <hkern g1="s" g2="j" k="10"/> + <hkern g1="s" g2="k" k="10"/> + <hkern g1="s" g2="l" k="10"/> + <hkern g1="s" g2="r" k="10"/> + <hkern g1="s" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10"/> + <hkern g1="s" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="s" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="s" g2="colon,semicolon" k="20"/> + <hkern g1="s" g2="n,ntilde" k="10"/> + <hkern g1="s" g2="z" k="20"/> + <hkern g1="t" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="t" g2="c,ccedilla" k="41"/> + <hkern g1="t" g2="d" k="41"/> + <hkern g1="t" g2="e,egrave,eacute,ecircumflex,edieresis" k="51"/> + <hkern g1="t" g2="g" k="41"/> + <hkern g1="t" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="51"/> + <hkern g1="t" g2="s" k="10"/> + <hkern g1="t" g2="t" k="92"/> + <hkern g1="t" g2="w" k="20"/> + <hkern g1="t" g2="y,yacute,ydieresis" k="10"/> + <hkern g1="t" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="t" g2="quoteleft,quotedblleft" k="-20"/> + <hkern g1="t" g2="space,uni00A0" k="20"/> + <hkern g1="t" g2="hyphen,uni00AD,endash,emdash" k="41"/> + <hkern g1="t" g2="period,ellipsis" k="-41"/> + <hkern g1="t" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="t" g2="j" k="20"/> + <hkern g1="t" g2="k" k="10"/> + <hkern g1="t" g2="l" k="20"/> + <hkern g1="t" g2="r" k="10"/> + <hkern g1="t" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="t" g2="guillemotleft,guilsinglleft" k="61"/> + <hkern g1="t" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="t" g2="colon,semicolon" k="-20"/> + <hkern g1="t" g2="n,ntilde" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" + k="31"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="c,ccedilla" k="10"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="d" k="10"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="g" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="s" k="10"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="t" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="w" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="u,ugrave,uacute,ucircumflex,udieresis" g2="quoteright,quotedblright" k="41"/> + <hkern g1="w" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="w" g2="c,ccedilla" k="41"/> + <hkern g1="w" g2="d" k="41"/> + <hkern g1="w" g2="e,egrave,eacute,ecircumflex,edieresis" k="31"/> + <hkern g1="w" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="w" g2="g" k="41"/> + <hkern g1="w" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="w" g2="s" k="20"/> + <hkern g1="w" g2="t" k="20"/> + <hkern g1="w" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="w" g2="quoteright,quotedblright" k="41"/> + <hkern g1="w" g2="space,uni00A0" k="20"/> + <hkern g1="w" g2="period,ellipsis" k="164"/> + <hkern g1="w" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="w" g2="j" k="20"/> + <hkern g1="w" g2="k" k="20"/> + <hkern g1="w" g2="l" k="20"/> + <hkern g1="w" g2="r" k="20"/> + <hkern g1="w" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="w" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="w" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="w" g2="n,ntilde" k="20"/> + <hkern g1="w" g2="z" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="c,ccedilla" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="d" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="e,egrave,eacute,ecircumflex,edieresis" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="g" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="s" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="quoteright,quotedblright" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="space,uni00A0" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="period,ellipsis" k="164"/> + <hkern g1="y,yacute,ydieresis" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="k" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="l" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="r" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="y,yacute,ydieresis" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="n,ntilde" k="20"/> + <hkern g1="y,yacute,ydieresis" g2="z" k="20"/> + <hkern g1="z" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="z" g2="c,ccedilla" k="41"/> + <hkern g1="z" g2="d" k="41"/> + <hkern g1="z" g2="e,egrave,eacute,ecircumflex,edieresis" k="31"/> + <hkern g1="z" g2="g" k="41"/> + <hkern g1="z" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="z" g2="s" k="10"/> + <hkern g1="z" g2="w" k="20"/> + <hkern g1="z" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="z" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="z" g2="quoteright,quotedblright" k="41"/> + <hkern g1="z" g2="space,uni00A0" k="20"/> + <hkern g1="z" g2="hyphen,uni00AD,endash,emdash" k="20"/> + <hkern g1="z" g2="period,ellipsis" k="-20"/> + <hkern g1="z" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10"/> + <hkern g1="z" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="g" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="w" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="guillemotright,guilsinglright" k="123"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteleft,quotedblleft" k="164"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteright,quotedblright" k="205"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="hyphen,uni00AD,endash,emdash" k="61"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="period,ellipsis" k="-41"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="guillemotleft,guilsinglleft" k="123"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="colon,semicolon" k="-20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,Ccedilla" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="G" k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="J" k="-20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" + g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="31"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="164"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" + k="20"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="61"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="123"/> + <hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Z" k="-20"/> + <hkern g1="C,Ccedilla" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="51"/> + <hkern g1="C,Ccedilla" g2="c,ccedilla" k="61"/> + <hkern g1="C,Ccedilla" g2="d" k="61"/> + <hkern g1="C,Ccedilla" g2="e,egrave,eacute,ecircumflex,edieresis" k="61"/> + <hkern g1="C,Ccedilla" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="C,Ccedilla" g2="g" k="61"/> + <hkern g1="C,Ccedilla" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61"/> + <hkern g1="C,Ccedilla" g2="s" k="41"/> + <hkern g1="C,Ccedilla" g2="t" k="41"/> + <hkern g1="C,Ccedilla" g2="w" k="82"/> + <hkern g1="C,Ccedilla" g2="y,yacute,ydieresis" k="82"/> + <hkern g1="C,Ccedilla" g2="guillemotright,guilsinglright" k="82"/> + <hkern g1="C,Ccedilla" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="C,Ccedilla" g2="space,uni00A0" k="20"/> + <hkern g1="C,Ccedilla" g2="hyphen,uni00AD,endash,emdash" k="102"/> + <hkern g1="C,Ccedilla" g2="period,ellipsis" k="-20"/> + <hkern g1="C,Ccedilla" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="C,Ccedilla" g2="j" k="20"/> + <hkern g1="C,Ccedilla" g2="k" k="20"/> + <hkern g1="C,Ccedilla" g2="l" k="20"/> + <hkern g1="C,Ccedilla" g2="r" k="20"/> + <hkern g1="C,Ccedilla" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="C,Ccedilla" g2="guillemotleft,guilsinglleft" k="123"/> + <hkern g1="C,Ccedilla" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="C,Ccedilla" g2="colon,semicolon" k="-20"/> + <hkern g1="C,Ccedilla" g2="n,ntilde" k="20"/> + <hkern g1="C,Ccedilla" g2="C,Ccedilla" k="61"/> + <hkern g1="C,Ccedilla" g2="G" k="61"/> + <hkern g1="C,Ccedilla" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61"/> + <hkern g1="C,Ccedilla" g2="T" k="20"/> + <hkern g1="C,Ccedilla" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20"/> + <hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="C,Ccedilla" g2="D,Eth" k="20"/> + <hkern g1="C,Ccedilla" g2="E,Egrave,Eacute,Ecircumflex,Edieresis" k="20"/> + <hkern g1="C,Ccedilla" g2="H" k="20"/> + <hkern g1="C,Ccedilla" g2="K" k="20"/> + <hkern g1="C,Ccedilla" g2="L" k="20"/> + <hkern g1="C,Ccedilla" g2="N,Ntilde" k="20"/> + <hkern g1="C,Ccedilla" g2="R" k="20"/> + <hkern g1="C,Ccedilla" g2="S" k="20"/> + <hkern g1="D,Eth" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="D,Eth" g2="c,ccedilla" k="20"/> + <hkern g1="D,Eth" g2="d" k="20"/> + <hkern g1="D,Eth" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="D,Eth" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="D,Eth" g2="g" k="20"/> + <hkern g1="D,Eth" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20"/> + <hkern g1="D,Eth" g2="s" k="20"/> + <hkern g1="D,Eth" g2="t" k="20"/> + <hkern g1="D,Eth" g2="w" k="20"/> + <hkern g1="D,Eth" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="D,Eth" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="D,Eth" g2="quoteright,quotedblright" k="41"/> + <hkern g1="D,Eth" g2="period,ellipsis" k="82"/> + <hkern g1="D,Eth" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10"/> + <hkern g1="D,Eth" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="D,Eth" g2="colon,semicolon" k="20"/> + <hkern g1="D,Eth" g2="z" k="20"/> + <hkern g1="D,Eth" g2="J" k="82"/> + <hkern g1="D,Eth" g2="T" k="82"/> + <hkern g1="D,Eth" g2="W" k="20"/> + <hkern g1="D,Eth" g2="Y,Yacute,Ydieresis" k="61"/> + <hkern g1="D,Eth" g2="Z" k="20"/> + <hkern g1="D,Eth" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="41"/> + <hkern g1="D,Eth" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="82"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="c,ccedilla" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="d" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="e,egrave,eacute,ecircumflex,edieresis" k="31"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="g" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="s" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="t" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="w" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="guillemotright,guilsinglright" k="82"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="quoteleft,quotedblleft" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="quoteright,quotedblright" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="period,ellipsis" k="-20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="C,Ccedilla" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="G" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="J" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" + g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="T" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="W" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="Z" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="S" k="41"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" + g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="20"/> + <hkern g1="E,AE,Egrave,Eacute,Ecircumflex,Edieresis,OE" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="20"/> + <hkern g1="G" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="10"/> + <hkern g1="G" g2="c,ccedilla" k="10"/> + <hkern g1="G" g2="d" k="10"/> + <hkern g1="G" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="G" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="G" g2="g" k="10"/> + <hkern g1="G" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="G" g2="s" k="10"/> + <hkern g1="G" g2="t" k="10"/> + <hkern g1="G" g2="w" k="41"/> + <hkern g1="G" g2="y,yacute,ydieresis" k="51"/> + <hkern g1="G" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="G" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="G" g2="quoteright,quotedblright" k="41"/> + <hkern g1="G" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="G" g2="colon,semicolon" k="20"/> + <hkern g1="G" g2="G" k="10"/> + <hkern g1="G" g2="J" k="41"/> + <hkern g1="G" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="10"/> + <hkern g1="G" g2="T" k="82"/> + <hkern g1="G" g2="W" k="41"/> + <hkern g1="G" g2="Y,Yacute,Ydieresis" k="41"/> + <hkern g1="G" g2="S" k="20"/> + <hkern g1="G" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="10"/> + <hkern g1="G" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="H" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="H" g2="c,ccedilla" k="20"/> + <hkern g1="H" g2="d" k="10"/> + <hkern g1="H" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="H" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="H" g2="g" k="20"/> + <hkern g1="H" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="H" g2="s" k="10"/> + <hkern g1="H" g2="w" k="20"/> + <hkern g1="H" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="H" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" + k="51"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="c,ccedilla" k="82"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="d" k="61"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="e,egrave,eacute,ecircumflex,edieresis" k="61"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="f,uniFB01,uniFB02" k="61"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="g" k="82"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="72"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="s" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="t" k="61"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="w" k="123"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="y,yacute,ydieresis" k="123"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="guillemotright,guilsinglright" k="123"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="quoteright,quotedblright" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="space,uni00A0" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="hyphen,uni00AD,endash,emdash" k="123"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="period,ellipsis" k="-20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="j" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="k" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="l" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="r" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="guillemotleft,guilsinglleft" k="123"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="parenright,bracketright,braceright" k="-41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="n,ntilde" k="41"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="C,Ccedilla" k="82"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="G" k="82"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" + g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20"/> + <hkern g1="I,Igrave,Iacute,Icircumflex,Idieresis" g2="S" k="20"/> + <hkern g1="J" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="J" g2="c,ccedilla" k="10"/> + <hkern g1="J" g2="d" k="10"/> + <hkern g1="J" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="J" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="J" g2="g" k="10"/> + <hkern g1="J" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="J" g2="s" k="10"/> + <hkern g1="J" g2="t" k="10"/> + <hkern g1="J" g2="w" k="20"/> + <hkern g1="J" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="J" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="J" g2="period,ellipsis" k="82"/> + <hkern g1="J" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="J" g2="colon,semicolon" k="20"/> + <hkern g1="J" g2="z" k="20"/> + <hkern g1="J" g2="J" k="82"/> + <hkern g1="J" g2="T" k="20"/> + <hkern g1="J" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="J" g2="Z" k="20"/> + <hkern g1="J" g2="S" k="10"/> + <hkern g1="J" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="20"/> + <hkern g1="J" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="K" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="K" g2="c,ccedilla" k="72"/> + <hkern g1="K" g2="d" k="61"/> + <hkern g1="K" g2="e,egrave,eacute,ecircumflex,edieresis" k="61"/> + <hkern g1="K" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="K" g2="g" k="72"/> + <hkern g1="K" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="72"/> + <hkern g1="K" g2="s" k="20"/> + <hkern g1="K" g2="t" k="41"/> + <hkern g1="K" g2="w" k="61"/> + <hkern g1="K" g2="y,yacute,ydieresis" k="82"/> + <hkern g1="K" g2="guillemotright,guilsinglright" k="123"/> + <hkern g1="K" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="K" g2="quoteright,quotedblright" k="41"/> + <hkern g1="K" g2="space,uni00A0" k="20"/> + <hkern g1="K" g2="hyphen,uni00AD,endash,emdash" k="123"/> + <hkern g1="K" g2="period,ellipsis" k="-41"/> + <hkern g1="K" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="K" g2="j" k="20"/> + <hkern g1="K" g2="k" k="20"/> + <hkern g1="K" g2="l" k="20"/> + <hkern g1="K" g2="r" k="20"/> + <hkern g1="K" g2="u,ugrave,uacute,ucircumflex,udieresis" k="51"/> + <hkern g1="K" g2="guillemotleft,guilsinglleft" k="123"/> + <hkern g1="K" g2="parenright,bracketright,braceright" k="-41"/> + <hkern g1="K" g2="n,ntilde" k="20"/> + <hkern g1="K" g2="C,Ccedilla" k="61"/> + <hkern g1="K" g2="G" k="61"/> + <hkern g1="K" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="72"/> + <hkern g1="K" g2="T" k="20"/> + <hkern g1="K" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41"/> + <hkern g1="K" g2="W" k="20"/> + <hkern g1="K" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="K" g2="D,Eth" k="20"/> + <hkern g1="K" g2="E,Egrave,Eacute,Ecircumflex,Edieresis" k="20"/> + <hkern g1="K" g2="H" k="20"/> + <hkern g1="K" g2="K" k="20"/> + <hkern g1="K" g2="L" k="20"/> + <hkern g1="K" g2="N,Ntilde" k="20"/> + <hkern g1="K" g2="R" k="20"/> + <hkern g1="K" g2="S" k="20"/> + <hkern g1="L" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="L" g2="c,ccedilla" k="82"/> + <hkern g1="L" g2="d" k="61"/> + <hkern g1="L" g2="e,egrave,eacute,ecircumflex,edieresis" k="72"/> + <hkern g1="L" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="L" g2="g" k="82"/> + <hkern g1="L" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="82"/> + <hkern g1="L" g2="s" k="20"/> + <hkern g1="L" g2="t" k="41"/> + <hkern g1="L" g2="w" k="123"/> + <hkern g1="L" g2="y,yacute,ydieresis" k="123"/> + <hkern g1="L" g2="guillemotright,guilsinglright" k="123"/> + <hkern g1="L" g2="quoteleft,quotedblleft" k="205"/> + <hkern g1="L" g2="quoteright,quotedblright" k="205"/> + <hkern g1="L" g2="space,uni00A0" k="20"/> + <hkern g1="L" g2="hyphen,uni00AD,endash,emdash" k="123"/> + <hkern g1="L" g2="period,ellipsis" k="-41"/> + <hkern g1="L" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="L" g2="j" k="20"/> + <hkern g1="L" g2="k" k="20"/> + <hkern g1="L" g2="l" k="20"/> + <hkern g1="L" g2="r" k="20"/> + <hkern g1="L" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="L" g2="guillemotleft,guilsinglleft" k="164"/> + <hkern g1="L" g2="colon,semicolon" k="-20"/> + <hkern g1="L" g2="n,ntilde" k="20"/> + <hkern g1="L" g2="C,Ccedilla" k="82"/> + <hkern g1="L" g2="G" k="82"/> + <hkern g1="L" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82"/> + <hkern g1="L" g2="T" k="246"/> + <hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="82"/> + <hkern g1="L" g2="W" k="205"/> + <hkern g1="L" g2="Y,Yacute,Ydieresis" k="246"/> + <hkern g1="L" g2="D,Eth" k="20"/> + <hkern g1="L" g2="E,Egrave,Eacute,Ecircumflex,Edieresis" k="20"/> + <hkern g1="L" g2="H" k="20"/> + <hkern g1="L" g2="K" k="20"/> + <hkern g1="L" g2="L" k="20"/> + <hkern g1="L" g2="N,Ntilde" k="20"/> + <hkern g1="L" g2="R" k="20"/> + <hkern g1="L" g2="S" k="20"/> + <hkern g1="L" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="20"/> + <hkern g1="N,Ntilde" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="N,Ntilde" g2="c,ccedilla" k="10"/> + <hkern g1="N,Ntilde" g2="d" k="10"/> + <hkern g1="N,Ntilde" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="N,Ntilde" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="N,Ntilde" g2="g" k="20"/> + <hkern g1="N,Ntilde" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="N,Ntilde" g2="s" k="10"/> + <hkern g1="N,Ntilde" g2="w" k="20"/> + <hkern g1="N,Ntilde" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="N,Ntilde" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" + g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="c,ccedilla" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="d" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="e,egrave,eacute,ecircumflex,edieresis" + k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="g" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="s" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="t" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="w" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="quoteright,quotedblright" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="period,ellipsis" k="82"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="parenright,bracketright,braceright" + k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="z" k="20"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="J" k="82"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="T" k="102"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="W" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="Y,Yacute,Ydieresis" k="51"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="Z" k="41"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="S" k="10"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" + g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="31"/> + <hkern g1="O,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="I,Igrave,Iacute,Icircumflex,Idieresis" + k="82"/> + <hkern g1="R" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61"/> + <hkern g1="R" g2="c,ccedilla" k="82"/> + <hkern g1="R" g2="d" k="72"/> + <hkern g1="R" g2="e,egrave,eacute,ecircumflex,edieresis" k="51"/> + <hkern g1="R" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="R" g2="g" k="72"/> + <hkern g1="R" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="72"/> + <hkern g1="R" g2="s" k="41"/> + <hkern g1="R" g2="t" k="20"/> + <hkern g1="R" g2="w" k="41"/> + <hkern g1="R" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="R" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="R" g2="quoteleft,quotedblleft" k="20"/> + <hkern g1="R" g2="quoteright,quotedblright" k="41"/> + <hkern g1="R" g2="hyphen,uni00AD,endash,emdash" k="41"/> + <hkern g1="R" g2="i,igrave,iacute,icircumflex,idieresis" k="20"/> + <hkern g1="R" g2="j" k="20"/> + <hkern g1="R" g2="k" k="20"/> + <hkern g1="R" g2="l" k="20"/> + <hkern g1="R" g2="r" k="41"/> + <hkern g1="R" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="R" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="R" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="R" g2="n,ntilde" k="41"/> + <hkern g1="R" g2="z" k="20"/> + <hkern g1="R" g2="C,Ccedilla" k="20"/> + <hkern g1="R" g2="G" k="20"/> + <hkern g1="R" g2="J" k="20"/> + <hkern g1="R" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20"/> + <hkern g1="R" g2="T" k="82"/> + <hkern g1="R" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20"/> + <hkern g1="R" g2="W" k="41"/> + <hkern g1="R" g2="Y,Yacute,Ydieresis" k="41"/> + <hkern g1="R" g2="Z" k="20"/> + <hkern g1="R" g2="S" k="20"/> + <hkern g1="R" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="S" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="S" g2="c,ccedilla" k="10"/> + <hkern g1="S" g2="d" k="10"/> + <hkern g1="S" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="S" g2="g" k="10"/> + <hkern g1="S" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="S" g2="s" k="41"/> + <hkern g1="S" g2="t" k="20"/> + <hkern g1="S" g2="w" k="41"/> + <hkern g1="S" g2="y,yacute,ydieresis" k="51"/> + <hkern g1="S" g2="guillemotright,guilsinglright" k="20"/> + <hkern g1="S" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="S" g2="quoteright,quotedblright" k="41"/> + <hkern g1="S" g2="hyphen,uni00AD,endash,emdash" k="20"/> + <hkern g1="S" g2="period,ellipsis" k="20"/> + <hkern g1="S" g2="parenright,bracketright,braceright" k="20"/> + <hkern g1="S" g2="colon,semicolon" k="20"/> + <hkern g1="S" g2="z" k="20"/> + <hkern g1="S" g2="C,Ccedilla" k="20"/> + <hkern g1="S" g2="J" k="61"/> + <hkern g1="S" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="10"/> + <hkern g1="S" g2="T" k="41"/> + <hkern g1="S" g2="W" k="31"/> + <hkern g1="S" g2="Y,Yacute,Ydieresis" k="41"/> + <hkern g1="S" g2="Z" k="20"/> + <hkern g1="S" g2="S" k="61"/> + <hkern g1="S" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="T" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="287"/> + <hkern g1="T" g2="c,ccedilla" k="287"/> + <hkern g1="T" g2="d" k="287"/> + <hkern g1="T" g2="e,egrave,eacute,ecircumflex,edieresis" k="266"/> + <hkern g1="T" g2="f,uniFB01,uniFB02" k="61"/> + <hkern g1="T" g2="g" k="287"/> + <hkern g1="T" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="266"/> + <hkern g1="T" g2="s" k="266"/> + <hkern g1="T" g2="t" k="82"/> + <hkern g1="T" g2="w" k="266"/> + <hkern g1="T" g2="y,yacute,ydieresis" k="276"/> + <hkern g1="T" g2="guillemotright,guilsinglright" k="205"/> + <hkern g1="T" g2="quoteleft,quotedblleft" k="41"/> + <hkern g1="T" g2="hyphen,uni00AD,endash,emdash" k="246"/> + <hkern g1="T" g2="period,ellipsis" k="205"/> + <hkern g1="T" g2="i,igrave,iacute,icircumflex,idieresis" k="41"/> + <hkern g1="T" g2="j" k="41"/> + <hkern g1="T" g2="k" k="41"/> + <hkern g1="T" g2="l" k="41"/> + <hkern g1="T" g2="r" k="266"/> + <hkern g1="T" g2="u,ugrave,uacute,ucircumflex,udieresis" k="266"/> + <hkern g1="T" g2="guillemotleft,guilsinglleft" k="205"/> + <hkern g1="T" g2="colon,semicolon" k="164"/> + <hkern g1="T" g2="n,ntilde" k="266"/> + <hkern g1="T" g2="z" k="266"/> + <hkern g1="T" g2="C,Ccedilla" k="82"/> + <hkern g1="T" g2="G" k="82"/> + <hkern g1="T" g2="J" k="246"/> + <hkern g1="T" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="102"/> + <hkern g1="T" g2="S" k="41"/> + <hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="164"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" + k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="c,ccedilla" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="d" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="f,uniFB01,uniFB02" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="g" k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" + g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="s" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="t" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="w" k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="period,ellipsis" k="82"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="z" k="10"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="82"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="Z" k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" + k="20"/> + <hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="20"/> + <hkern g1="W" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="123"/> + <hkern g1="W" g2="c,ccedilla" k="113"/> + <hkern g1="W" g2="d" k="113"/> + <hkern g1="W" g2="e,egrave,eacute,ecircumflex,edieresis" k="92"/> + <hkern g1="W" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="W" g2="g" k="113"/> + <hkern g1="W" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="113"/> + <hkern g1="W" g2="s" k="82"/> + <hkern g1="W" g2="t" k="20"/> + <hkern g1="W" g2="w" k="61"/> + <hkern g1="W" g2="y,yacute,ydieresis" k="61"/> + <hkern g1="W" g2="guillemotright,guilsinglright" k="82"/> + <hkern g1="W" g2="space,uni00A0" k="20"/> + <hkern g1="W" g2="hyphen,uni00AD,endash,emdash" k="61"/> + <hkern g1="W" g2="period,ellipsis" k="205"/> + <hkern g1="W" g2="i,igrave,iacute,icircumflex,idieresis" k="41"/> + <hkern g1="W" g2="j" k="41"/> + <hkern g1="W" g2="r" k="82"/> + <hkern g1="W" g2="u,ugrave,uacute,ucircumflex,udieresis" k="82"/> + <hkern g1="W" g2="guillemotleft,guilsinglleft" k="82"/> + <hkern g1="W" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="W" g2="colon,semicolon" k="61"/> + <hkern g1="W" g2="n,ntilde" k="82"/> + <hkern g1="W" g2="z" k="61"/> + <hkern g1="W" g2="C,Ccedilla" k="20"/> + <hkern g1="W" g2="G" k="20"/> + <hkern g1="W" g2="J" k="205"/> + <hkern g1="W" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41"/> + <hkern g1="W" g2="S" k="20"/> + <hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="61"/> + <hkern g1="Y,Yacute,Ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="184"/> + <hkern g1="Y,Yacute,Ydieresis" g2="c,ccedilla" k="184"/> + <hkern g1="Y,Yacute,Ydieresis" g2="d" k="184"/> + <hkern g1="Y,Yacute,Ydieresis" g2="e,egrave,eacute,ecircumflex,edieresis" k="174"/> + <hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="g" k="184"/> + <hkern g1="Y,Yacute,Ydieresis" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="184"/> + <hkern g1="Y,Yacute,Ydieresis" g2="s" k="143"/> + <hkern g1="Y,Yacute,Ydieresis" g2="t" k="82"/> + <hkern g1="Y,Yacute,Ydieresis" g2="w" k="102"/> + <hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="102"/> + <hkern g1="Y,Yacute,Ydieresis" g2="guillemotright,guilsinglright" k="164"/> + <hkern g1="Y,Yacute,Ydieresis" g2="quoteleft,quotedblleft" k="20"/> + <hkern g1="Y,Yacute,Ydieresis" g2="space,uni00A0" k="20"/> + <hkern g1="Y,Yacute,Ydieresis" g2="hyphen,uni00AD,endash,emdash" k="123"/> + <hkern g1="Y,Yacute,Ydieresis" g2="period,ellipsis" k="246"/> + <hkern g1="Y,Yacute,Ydieresis" g2="i,igrave,iacute,icircumflex,idieresis" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="j" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="k" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="l" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="r" k="143"/> + <hkern g1="Y,Yacute,Ydieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="143"/> + <hkern g1="Y,Yacute,Ydieresis" g2="guillemotleft,guilsinglleft" k="164"/> + <hkern g1="Y,Yacute,Ydieresis" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="82"/> + <hkern g1="Y,Yacute,Ydieresis" g2="n,ntilde" k="143"/> + <hkern g1="Y,Yacute,Ydieresis" g2="z" k="123"/> + <hkern g1="Y,Yacute,Ydieresis" g2="C,Ccedilla" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="G" k="41"/> + <hkern g1="Y,Yacute,Ydieresis" g2="J" k="205"/> + <hkern g1="Y,Yacute,Ydieresis" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="51"/> + <hkern g1="Y,Yacute,Ydieresis" g2="S" k="20"/> + <hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="123"/> + <hkern g1="Z" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="Z" g2="c,ccedilla" k="61"/> + <hkern g1="Z" g2="d" k="61"/> + <hkern g1="Z" g2="e,egrave,eacute,ecircumflex,edieresis" k="61"/> + <hkern g1="Z" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="Z" g2="g" k="61"/> + <hkern g1="Z" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61"/> + <hkern g1="Z" g2="s" k="20"/> + <hkern g1="Z" g2="t" k="41"/> + <hkern g1="Z" g2="w" k="61"/> + <hkern g1="Z" g2="y,yacute,ydieresis" k="61"/> + <hkern g1="Z" g2="guillemotright,guilsinglright" k="41"/> + <hkern g1="Z" g2="quoteleft,quotedblleft" k="20"/> + <hkern g1="Z" g2="space,uni00A0" k="20"/> + <hkern g1="Z" g2="hyphen,uni00AD,endash,emdash" k="82"/> + <hkern g1="Z" g2="period,ellipsis" k="-41"/> + <hkern g1="Z" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="Z" g2="guillemotleft,guilsinglleft" k="41"/> + <hkern g1="Z" g2="parenright,bracketright,braceright" k="-20"/> + <hkern g1="Z" g2="C,Ccedilla" k="31"/> + <hkern g1="Z" g2="G" k="31"/> + <hkern g1="Z" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41"/> + <hkern g1="Z" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20"/> + <hkern g1="Z" g2="S" k="20"/> + <hkern g1="period,ellipsis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="period,ellipsis" g2="c,ccedilla" k="51"/> + <hkern g1="period,ellipsis" g2="d" k="41"/> + <hkern g1="period,ellipsis" g2="e,egrave,eacute,ecircumflex,edieresis" k="41"/> + <hkern g1="period,ellipsis" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="period,ellipsis" g2="g" k="61"/> + <hkern g1="period,ellipsis" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="51"/> + <hkern g1="period,ellipsis" g2="t" k="61"/> + <hkern g1="period,ellipsis" g2="w" k="164"/> + <hkern g1="period,ellipsis" g2="y,yacute,ydieresis" k="164"/> + <hkern g1="period,ellipsis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="period,ellipsis" g2="z" k="-20"/> + <hkern g1="period,ellipsis" g2="C,Ccedilla" k="82"/> + <hkern g1="period,ellipsis" g2="G" k="82"/> + <hkern g1="period,ellipsis" g2="J" k="-20"/> + <hkern g1="period,ellipsis" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="82"/> + <hkern g1="period,ellipsis" g2="T" k="205"/> + <hkern g1="period,ellipsis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="82"/> + <hkern g1="period,ellipsis" g2="W" k="205"/> + <hkern g1="period,ellipsis" g2="Y,Yacute,Ydieresis" k="246"/> + <hkern g1="period,ellipsis" g2="Z" k="-41"/> + <hkern g1="period,ellipsis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="-41"/> + <hkern g1="period,ellipsis" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="-20"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="z" k="20"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="J" k="123"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="T" k="246"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="W" k="61"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="Y,Yacute,Ydieresis" k="123"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="Z" k="82"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="S" k="82"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="61"/> + <hkern g1="hyphen,uni00AD,endash,emdash" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="123"/> + <hkern g1="quoteleft,quotedblleft" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="c,ccedilla" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="d" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="e,egrave,eacute,ecircumflex,edieresis" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="g" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="82"/> + <hkern g1="quoteleft,quotedblleft" g2="s" k="61"/> + <hkern g1="quoteleft,quotedblleft" g2="t" k="-20"/> + <hkern g1="quoteleft,quotedblleft" g2="r" k="41"/> + <hkern g1="quoteleft,quotedblleft" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="quoteleft,quotedblleft" g2="n,ntilde" k="41"/> + <hkern g1="quoteleft,quotedblleft" g2="J" k="164"/> + <hkern g1="quoteleft,quotedblleft" g2="T" k="41"/> + <hkern g1="quoteleft,quotedblleft" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="quoteleft,quotedblleft" g2="Z" k="20"/> + <hkern g1="quoteleft,quotedblleft" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="164"/> + <hkern g1="quoteleft,quotedblleft" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="quoteright,quotedblright" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="123"/> + <hkern g1="quoteright,quotedblright" g2="c,ccedilla" k="123"/> + <hkern g1="quoteright,quotedblright" g2="d" k="123"/> + <hkern g1="quoteright,quotedblright" g2="e,egrave,eacute,ecircumflex,edieresis" k="123"/> + <hkern g1="quoteright,quotedblright" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="quoteright,quotedblright" g2="g" k="123"/> + <hkern g1="quoteright,quotedblright" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="123"/> + <hkern g1="quoteright,quotedblright" g2="s" k="82"/> + <hkern g1="quoteright,quotedblright" g2="w" k="41"/> + <hkern g1="quoteright,quotedblright" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="quoteright,quotedblright" g2="r" k="41"/> + <hkern g1="quoteright,quotedblright" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="quoteright,quotedblright" g2="n,ntilde" k="41"/> + <hkern g1="quoteright,quotedblright" g2="z" k="41"/> + <hkern g1="quoteright,quotedblright" g2="C,Ccedilla" k="41"/> + <hkern g1="quoteright,quotedblright" g2="G" k="41"/> + <hkern g1="quoteright,quotedblright" g2="J" k="205"/> + <hkern g1="quoteright,quotedblright" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41"/> + <hkern g1="quoteright,quotedblright" g2="S" k="20"/> + <hkern g1="quoteright,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="205"/> + <hkern g1="quoteright,quotedblright" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="quotesinglbase,quotedblbase" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20"/> + <hkern g1="quotesinglbase,quotedblbase" g2="c,ccedilla" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="d" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="e,egrave,eacute,ecircumflex,edieresis" k="61"/> + <hkern g1="quotesinglbase,quotedblbase" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="quotesinglbase,quotedblbase" g2="g" k="61"/> + <hkern g1="quotesinglbase,quotedblbase" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="t" k="61"/> + <hkern g1="quotesinglbase,quotedblbase" g2="w" k="164"/> + <hkern g1="quotesinglbase,quotedblbase" g2="y,yacute,ydieresis" k="123"/> + <hkern g1="quotesinglbase,quotedblbase" g2="j" k="-20"/> + <hkern g1="quotesinglbase,quotedblbase" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20"/> + <hkern g1="quotesinglbase,quotedblbase" g2="z" k="-20"/> + <hkern g1="quotesinglbase,quotedblbase" g2="C,Ccedilla" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="G" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" + k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="T" k="246"/> + <hkern g1="quotesinglbase,quotedblbase" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="82"/> + <hkern g1="quotesinglbase,quotedblbase" g2="W" k="205"/> + <hkern g1="quotesinglbase,quotedblbase" g2="Y,Yacute,Ydieresis" k="246"/> + <hkern g1="quotesinglbase,quotedblbase" g2="Z" k="-41"/> + <hkern g1="quotesinglbase,quotedblbase" g2="S" k="20"/> + <hkern g1="quotesinglbase,quotedblbase" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="-41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="c,ccedilla" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="d" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="e,egrave,eacute,ecircumflex,edieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="g" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="s" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="t" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="w" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="i,igrave,iacute,icircumflex,idieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="j" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="k" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="l" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="r" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="n,ntilde" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="z" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="C,Ccedilla" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="G" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="J" k="205"/> + <hkern g1="guillemotleft,guilsinglleft" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" + k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="T" k="205"/> + <hkern g1="guillemotleft,guilsinglleft" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="W" k="82"/> + <hkern g1="guillemotleft,guilsinglleft" g2="Y,Yacute,Ydieresis" k="164"/> + <hkern g1="guillemotleft,guilsinglleft" g2="Z" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="D,Eth" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="E,Egrave,Eacute,Ecircumflex,Edieresis" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="K" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="L" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="N,Ntilde" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="R" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="S" k="41"/> + <hkern g1="guillemotleft,guilsinglleft" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" k="123"/> + <hkern g1="guillemotleft,guilsinglleft" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="123"/> + <hkern g1="guillemotright,guilsinglright" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" + k="82"/> + <hkern g1="guillemotright,guilsinglright" g2="c,ccedilla" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="f,uniFB01,uniFB02" k="61"/> + <hkern g1="guillemotright,guilsinglright" g2="s" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="t" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="w" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="y,yacute,ydieresis" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="z" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="J" k="205"/> + <hkern g1="guillemotright,guilsinglright" g2="T" k="205"/> + <hkern g1="guillemotright,guilsinglright" g2="W" k="82"/> + <hkern g1="guillemotright,guilsinglright" g2="Y,Yacute,Ydieresis" k="164"/> + <hkern g1="guillemotright,guilsinglright" g2="Z" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="S" k="41"/> + <hkern g1="guillemotright,guilsinglright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring,AE" + k="123"/> + <hkern g1="guillemotright,guilsinglright" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="123"/> + <hkern g1="space,uni00A0" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31"/> + <hkern g1="space,uni00A0" g2="c,ccedilla" k="20"/> + <hkern g1="space,uni00A0" g2="d" k="20"/> + <hkern g1="space,uni00A0" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="space,uni00A0" g2="f,uniFB01,uniFB02" k="20"/> + <hkern g1="space,uni00A0" g2="g" k="20"/> + <hkern g1="space,uni00A0" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="10"/> + <hkern g1="space,uni00A0" g2="s" k="10"/> + <hkern g1="space,uni00A0" g2="t" k="10"/> + <hkern g1="space,uni00A0" g2="w" k="20"/> + <hkern g1="space,uni00A0" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="space,uni00A0" g2="z" k="20"/> + <hkern g1="space,uni00A0" g2="J" k="20"/> + <hkern g1="space,uni00A0" g2="W" k="20"/> + <hkern g1="space,uni00A0" g2="Y,Yacute,Ydieresis" k="20"/> + <hkern g1="space,uni00A0" g2="Z" k="20"/> + <hkern g1="space,uni00A0" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" + k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="c,ccedilla" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="d" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="e,egrave,eacute,ecircumflex,edieresis" k="10"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="f,uniFB01,uniFB02" k="41"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="g" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="o,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" + k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="t" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="w" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="y,yacute,ydieresis" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="C,Ccedilla" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="G" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="J" k="-41"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="O,Q,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" + k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="W" k="-20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="Y,Yacute,Ydieresis" k="-20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="Z" k="-20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="S" k="20"/> + <hkern g1="parenleft,bracketleft,braceleft" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="-41"/> + </font> + </defs> +</svg> \ No newline at end of file diff --git a/cate/webapi/app/stream-geojson.js b/cate/webapi/app/stream-geojson.js new file mode 100644 index 000000000..780afc604 --- /dev/null +++ b/cate/webapi/app/stream-geojson.js @@ -0,0 +1,43 @@ +/* + * This modules allows for streaming GeoJSON through a new process. + * It is designed as a WebWorker (see https://developer.mozilla.org/en-US/docs/Web/API/Worker) + * and uses OboeJS for JSON streaming. + * + * @author Norman Fomferra + */ + +importScripts("oboe-browser.js"); + +const oboe = self.oboe; + +self.onmessage = function (event) { + // console.log('Message received from main script:', event); + streamFeatures(event.data); +}; + +function sendData(data) { + self.postMessage(data); +} + +function streamFeatures(url) { + const featurePackCount = 25; + let features = []; + + oboe(url) + .node('features.*', function (feature) { + if (features.length === featurePackCount) { + sendData(features); + features = []; + } + features.push(feature); + // returning oboe.drop means to oboe, it should forget the feature and thus save memory. + return oboe.drop; + }) + .done(function (featureCollection) { + if (features.length) { + sendData(features); + } + // Send sentinel + sendData(null); + }); +} \ No newline at end of file diff --git a/cate/webapi/mpl.py b/cate/webapi/mpl.py index 7d35cc136..74f30c53c 100644 --- a/cate/webapi/mpl.py +++ b/cate/webapi/mpl.py @@ -1,29 +1,30 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. """ -Implements the Tornado REST and WebSocket handlers for working with interactive ``matplotlib`` -figures in a web frontend. +Implements the Tornado REST and WebSocket handlers for working with +interactive ``matplotlib`` figures in a web frontend. -Code bases on an example taken from https://matplotlib.org/examples/user_interfaces/embedding_webagg.html +Code bases on an example taken from +https://matplotlib.org/examples/user_interfaces/embedding_webagg.html """ import io @@ -33,7 +34,8 @@ from matplotlib.backends.backend_webagg_core import FigureManagerWebAgg # noinspection PyUnresolvedReferences -from matplotlib.backends.backend_webagg_core import new_figure_manager_given_figure +from matplotlib.backends.backend_webagg_core import \ + new_figure_manager_given_figure from matplotlib.figure import Figure from tornado.web import RequestHandler from tornado.websocket import WebSocketHandler @@ -55,10 +57,10 @@ <!-- TODO: There should be a way to include all of the required javascript and CSS so matplotlib can add to the set in the future if it needs to. --> - <link rel="stylesheet" href="_static/css/page.css" type="text/css"> - <link rel="stylesheet" href="_static/css/boilerplate.css" type="text/css" /> - <link rel="stylesheet" href="_static/css/fbm.css" type="text/css" /> - <link rel="stylesheet" href="_static/jquery/css/themes/base/jquery-ui.min.css" > + <link rel="stylesheet" href="_static/css/page.css" type="text/css"/> + <link rel="stylesheet" href="_static/css/boilerplate.css" type="text/css"/> + <link rel="stylesheet" href="_static/css/fbm.css" type="text/css"/> + <link rel="stylesheet" href="_static/jquery/css/themes/base/jquery-ui.min.css"/> <script src="_static/jquery/js/jquery-1.11.3.min.js"></script> <script src="_static/jquery/js/jquery-ui.min.js"></script> <script src="mpl.js"></script> @@ -73,10 +75,12 @@ $(document).ready( function() { - /* It is up to the application to provide a websocket that the figure - will use to communicate to the server. This websocket object can - also be a "fake" websocket that underneath multiplexes messages - from multiple figures, if necessary. */ + /* It is up to the application to provide a websocket that the + figure will use to communicate to the server. + This websocket object can also be a "fake" websocket that + underneath multiplexes messages from multiple figures, + if necessary. + */ var websocket_type = mpl.get_websocket_type(); var websocket = new websocket_type("%(ws_uri)sws"); @@ -126,14 +130,16 @@ class MplDownloadHandler(WebAPIRequestHandler): Handles downloading of the figure in various file formats. """ - def get(self, base_dir: str, figure_id: str, format_name: str): + def get(self, workspace_id: str, figure_id: str, format_name: str): figure_id = int(figure_id) # noinspection PyUnresolvedReferences - workspace_manager: WorkspaceManager = self.application.workspace_manager + workspace_manager: WorkspaceManager = \ + self.application.workspace_manager assert workspace_manager + base_dir = Workspace.get_base_dir_from_id(workspace_id) base_dir = workspace_manager.resolve_path(base_dir) workspace = workspace_manager.get_workspace(base_dir) assert workspace @@ -184,22 +190,28 @@ class MplWebSocketHandler(WebSocketHandler): supports_binary = True def __init__(self, application, request, **kwargs): - super(MplWebSocketHandler, self).__init__(application, request, **kwargs) + super(MplWebSocketHandler, self).__init__(application, + request, + **kwargs) self.workspace = None + self.workspace_id = None self.figure_id = None self.figure_manager = None - def open(self, base_dir: str, figure_id: str): + def open(self, workspace_id: str, figure_id: str): if hasattr(self, 'set_nodelay'): self.set_nodelay(True) + self.workspace_id = int(workspace_id) self.figure_id = int(figure_id) - # print('MplWebSocketHandler.open', base_dir, figure_id) + # print('MplWebSocketHandler.open', workspace_id, figure_id) # noinspection PyUnresolvedReferences - workspace_manager: WorkspaceManager = self.application.workspace_manager + workspace_manager: WorkspaceManager = \ + self.application.workspace_manager assert workspace_manager + base_dir = Workspace.get_base_dir_from_id(workspace_id) base_dir = workspace_manager.resolve_path(base_dir) self.workspace = workspace_manager.get_workspace(base_dir) assert self.workspace @@ -207,7 +219,8 @@ def open(self, base_dir: str, figure_id: str): # print('got figure_manager for figure #%s' % figure_id) def on_close(self): - # print('MplWebSocketHandler.on_close', self.workspace.base_dir, self.figure_id) + # print('MplWebSocketHandler.on_close', + # self.workspace.base_dir, self.figure_id) self._remove_figure_manager() def on_message(self, message): @@ -225,7 +238,9 @@ def on_message(self, message): else: figure_id = message['figure_id'] if figure_id != self.figure_id: - message = "received figure_id={}, but expected figure_id={}".format(figure_id, self.figure_id) + message = "received figure_id={}," \ + " but expected figure_id={}".format(figure_id, + self.figure_id) self.send_json(dict(type='message', message=message)) return @@ -247,7 +262,9 @@ def send_binary(self, blob): if self.supports_binary: self.write_message(blob, binary=True) else: - data_uri = "data:image/png;base64,{0}".format(blob.encode('base64').replace('\n', '')) + data_uri = "data:image/png;base64,{0}".format( + blob.encode('base64').replace('\n', '') + ) self.write_message(data_uri) def check_origin(self, origin): @@ -269,15 +286,18 @@ def _get_or_create_figure_manager(self) -> Optional[FigureManagerWebAgg]: figure = workspace.resource_cache.get_value_by_id(figure_id) if isinstance(figure, Figure): figure_managers = workspace.user_data.get('figure_managers') - figure_manager = figure_managers and figure_managers.get(figure_id) + figure_manager = figure_managers \ + and figure_managers.get(figure_id) if figure_manager: if figure_manager.canvas.figure is figure: - # we have a figure_manager and it already manages our figure + # we have a figure_manager and it already + # manages our figure return figure_manager # forget this manager, we have a new figure figure_manager.remove_web_socket(self) # create a new figure_manager for our figure - figure_manager = new_figure_manager_given_figure(figure_id, figure) + figure_manager = new_figure_manager_given_figure(figure_id, + figure) figure_manager.add_web_socket(self) if not figure_managers: # store a new mapping of figure_id to figure_manager @@ -298,8 +318,10 @@ def _remove_figure_manager(self) -> None: del figure_managers[figure_id] -def _get_figure_manager(workspace: Workspace, figure_id: int) -> FigureManagerWebAgg: +def _get_figure_manager(workspace: Workspace, figure_id: int) \ + -> FigureManagerWebAgg: figure_managers = workspace.user_data.get('figure_managers') if figure_managers and figure_id in figure_managers: return figure_managers[figure_id] - raise ValueError("missing figure manager for figure_id={}".format(figure_id)) + raise ValueError("missing figure manager" + " for figure_id={}".format(figure_id)) diff --git a/cate/webapi/rest.py b/cate/webapi/rest.py index 61bcadd89..a1a260649 100644 --- a/cate/webapi/rest.py +++ b/cate/webapi/rest.py @@ -1,23 +1,24 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + __author__ = "Norman Fomferra (Brockmann Consult GmbH), " \ "Marco Zühlke (Brockmann Consult GmbH)" \ @@ -25,13 +26,15 @@ import concurrent.futures import datetime +import importlib.resources import json +import logging import os import sys import tempfile import time import zipfile -from typing import Sequence, Any +from typing import Sequence, Any, Optional import fiona import geopandas as gpd @@ -50,6 +53,7 @@ WEBAPI_USE_WORKSPACE_IMAGERY_CACHE from ..core.cdm import get_tiling_scheme from ..core.types import GeoDataFrame +from ..core.workspace import Workspace from ..core.wsmanag import WorkspaceManager from ..util.cache import Cache, MemoryCacheStore, FileCacheStore from ..util.im import ImagePyramid, TransformArrayImage, ColorMappedRgbaImage @@ -62,19 +66,26 @@ # TODO (forman): We must keep a MemoryCacheStore Cache for each workspace. # We can use the Workspace.user_data dict for this purpose. -# However, a global cache is fine as long as we have just one workspace open at a time. +# However, a global cache is fine as long as we have just +# one workspace open at a time. # MEM_TILE_CACHE = Cache(MemoryCacheStore(), capacity=WEBAPI_WORKSPACE_MEM_TILE_CACHE_CAPACITY, threshold=0.75) -# Note, the following "get_config()" call in the code will make sure "~/.cate/<version>" is created -USE_WORKSPACE_IMAGERY_CACHE = get_config().get('use_workspace_imagery_cache', WEBAPI_USE_WORKSPACE_IMAGERY_CACHE) +# Note, the following "get_config()" call in the code will +# make sure "~/.cate/<version>" is created +USE_WORKSPACE_IMAGERY_CACHE = get_config().get( + 'use_workspace_imagery_cache', + WEBAPI_USE_WORKSPACE_IMAGERY_CACHE +) TRACE_PERF = is_debug_mode() THREAD_POOL = concurrent.futures.ThreadPoolExecutor() +_LOG = logging.getLogger('cate') + _NUM_GEOM_SIMP_LEVELS = 8 _MAX_CSV_ROW_COUNT = 10000 @@ -97,10 +108,12 @@ def get(self, z, y, x): # noinspection PyAbstractClass class WorkspaceResourceHandler(WebAPIRequestHandler): - def get_workspace_resource(self, base_dir, res_id: str): + def get_workspace_resource(self, workspace_id: str, res_id: str): res_id = self.to_int("res_id", res_id) # noinspection PyUnresolvedReferences - workspace_manager: WorkspaceManager = self.application.workspace_manager + workspace_manager: WorkspaceManager = \ + self.application.workspace_manager + base_dir = Workspace.get_base_dir_from_id(workspace_id) base_dir = workspace_manager.resolve_path(base_dir) workspace = workspace_manager.get_workspace(base_dir) res_name = workspace.resource_cache.get_key(res_id) @@ -112,22 +125,27 @@ def get_workspace_resource(self, base_dir, res_id: str): class ResVarTileHandler(WorkspaceResourceHandler): PYRAMIDS = None - def get(self, base_dir, res_id, z, y, x): + def get(self, workspace_id, res_id, z, y, x): try: - workspace, res_id, res_name, dataset = self.get_workspace_resource(base_dir, res_id) + workspace, res_id, res_name, dataset = \ + self.get_workspace_resource(workspace_id, res_id) # GLOBAL_LOCK.acquire() if not isinstance(dataset, xr.Dataset): - self.write_status_error(message='Resource "%s" must be a Dataset' % res_name) + self.write_status_error( + message='Resource "%s" must be a Dataset' % res_name + ) self.finish() return var_name = self.get_query_argument('var') var_index = self.get_query_argument_int_tuple('index', ()) cmap_name = self.get_query_argument('cmap', default='jet') - cmap_min = self.get_query_argument_float('min', default=float('nan')) - cmap_max = self.get_query_argument_float('max', default=float('nan')) + cmap_min = self.get_query_argument_float('min', + default=float('nan')) + cmap_max = self.get_query_argument_float('max', + default=float('nan')) if ResVarTileHandler.PYRAMIDS is None: ResVarTileHandler.PYRAMIDS = dict() @@ -140,7 +158,7 @@ def get(self, base_dir, res_id, z, y, x): cmap_min, cmap_max) - pyramid_id = '%s-%s' % (base_dir, image_id) + pyramid_id = '%s-%s' % (workspace.base_dir, image_id) if pyramid_id in ResVarTileHandler.PYRAMIDS: pyramid = ResVarTileHandler.PYRAMIDS[pyramid_id] @@ -167,22 +185,34 @@ def get(self, base_dir, res_id, z, y, x): # print('var_index =', var_index) array = variable[var_index] else: - self.write_status_error(message='Variable must be an N-D Dataset with N >= 2, ' - 'but "%s" is only %d-D' % (var_name, variable.ndim)) + self.write_status_error( + message='Variable must be an N-D Dataset with N >= 2,' + ' but "%s" is only %d-D' + % (var_name, variable.ndim) + ) self.finish() return - cmap_min = np.nanmin(array.values) if np.isnan(cmap_min) else cmap_min - cmap_max = np.nanmax(array.values) if np.isnan(cmap_max) else cmap_max + cmap_min = np.nanmin(array.values) \ + if np.isnan(cmap_min) else cmap_min + cmap_max = np.nanmax(array.values) \ + if np.isnan(cmap_max) else cmap_max # print('cmap_min =', cmap_min) # print('cmap_max =', cmap_max) if USE_WORKSPACE_IMAGERY_CACHE: mem_tile_cache = MEM_TILE_CACHE - rgb_tile_cache_dir = os.path.join(base_dir, WORKSPACE_CACHE_DIR_NAME, 'v%s' % __version__, 'tiles') - rgb_tile_cache = Cache(FileCacheStore(rgb_tile_cache_dir, ".png"), - capacity=WEBAPI_WORKSPACE_FILE_TILE_CACHE_CAPACITY, - threshold=0.75) + rgb_tile_cache_dir = os.path.join( + workspace.base_dir, + WORKSPACE_CACHE_DIR_NAME, + 'v%s' % __version__, + 'tiles' + ) + rgb_tile_cache = Cache( + FileCacheStore(rgb_tile_cache_dir, ".png"), + capacity=WEBAPI_WORKSPACE_FILE_TILE_CACHE_CAPACITY, + threshold=0.75 + ) else: mem_tile_cache = MEM_TILE_CACHE rgb_tile_cache = None @@ -193,35 +223,49 @@ def array_image_id_factory(level): tiling_scheme = get_tiling_scheme(variable) if tiling_scheme is None: self.write_status_error( - message='Internal error: failed to compute tiling scheme for array_id="%s"' % array_id) + message='Internal error:' + ' failed to compute tiling scheme' + ' for array_id="%s"' % array_id) self.finish() return # print('tiling_scheme =', repr(tiling_scheme)) - pyramid = ImagePyramid.create_from_array(array, tiling_scheme, - level_image_id_factory=array_image_id_factory) - pyramid = pyramid.apply(lambda image, level: - TransformArrayImage(image, - image_id='tra-%s/%d' % (array_id, level), - flip_y=tiling_scheme.geo_extent.inv_y, - force_masked=True, - no_data_value=no_data_value, - valid_range=valid_range, - tile_cache=mem_tile_cache)) - pyramid = pyramid.apply(lambda image, level: - ColorMappedRgbaImage(image, - image_id='rgb-%s/%d' % (image_id, level), - value_range=(cmap_min, cmap_max), - cmap_name=cmap_name, - encode=True, - format='PNG', - tile_cache=rgb_tile_cache)) + pyramid = ImagePyramid.create_from_array( + array, + tiling_scheme, + level_image_id_factory=array_image_id_factory + ) + pyramid = pyramid.apply( + lambda image, level: + TransformArrayImage(image, + image_id='tra-%s/%d' + % (array_id, level), + flip_y=tiling_scheme.geo_extent.inv_y, + force_masked=True, + no_data_value=no_data_value, + valid_range=valid_range, + tile_cache=mem_tile_cache) + ) + pyramid = pyramid.apply( + lambda image, level: + ColorMappedRgbaImage(image, + image_id='rgb-%s/%d' + % (image_id, level), + value_range=(cmap_min, cmap_max), + cmap_name=cmap_name, + encode=True, + format='PNG', + tile_cache=rgb_tile_cache) + ) ResVarTileHandler.PYRAMIDS[pyramid_id] = pyramid if TRACE_PERF: print('Created pyramid "%s":' % pyramid_id) - print(' tile_size:', pyramid.tile_size) - print(' num_level_zero_tiles:', pyramid.num_level_zero_tiles) - print(' num_levels:', pyramid.num_levels) + print(' tile_size:', + pyramid.tile_size) + print(' num_level_zero_tiles:', + pyramid.num_level_zero_tiles) + print(' num_levels:', + pyramid.num_levels) if TRACE_PERF: print('PERF: >>> Tile:', image_id, z, y, x) @@ -234,7 +278,8 @@ def array_image_id_factory(level): self.write(tile) if TRACE_PERF: - print('PERF: <<< Tile:', image_id, z, y, x, 'took', t2 - t1, 'seconds') + print('PERF: <<< Tile:', image_id, z, y, x, + 'took', t2 - t1, 'seconds') # GLOBAL_LOCK.release() @@ -245,12 +290,14 @@ def array_image_id_factory(level): # noinspection PyAbstractClass,PyBroadException class ResourcePlotHandler(WorkspaceResourceHandler): - def get(self, base_dir, res_name): + def get(self, workspace_id: str, res_name: str): try: # noinspection PyUnresolvedReferences - workspace_manager: WorkspaceManager = self.application.workspace_manager + workspace_manager: WorkspaceManager = \ + self.application.workspace_manager var_name = self.get_query_argument('var_name', default=None) file_path = self.get_query_argument('file_path', default=None) + base_dir = Workspace.get_base_dir_from_id(workspace_id) with cwd(base_dir): workspace_manager.plot_workspace_resource(base_dir, res_name, var_name=var_name, @@ -268,19 +315,27 @@ def __init__(self, application, request, shapefile_path, **kwargs): super().__init__(application, request, **kwargs) self._shapefile_path = shapefile_path - # see http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks + # see + # http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks @tornado.gen.coroutine def get(self): try: - level = int(self.get_query_argument('level', default=str(_NUM_GEOM_SIMP_LEVELS))) + level = int(self.get_query_argument('level', + default=str( + _NUM_GEOM_SIMP_LEVELS))) collection = fiona.open(self._shapefile_path) self.set_header('Content-Type', 'application/json') def job(): - conservation_ratio = _level_to_conservation_ratio(level, _NUM_GEOM_SIMP_LEVELS) - write_feature_collection(collection, self, - num_features=len(collection), - conservation_ratio=conservation_ratio) + conservation_ratio = _level_to_conservation_ratio( + level, + _NUM_GEOM_SIMP_LEVELS + ) + write_feature_collection( + collection, self, + num_features=len(collection), + conservation_ratio=conservation_ratio + ) self.finish() yield [THREAD_POOL.submit(job)] @@ -296,9 +351,11 @@ def job(): class CountriesGeoJSONHandler(WebAPIRequestHandler): def get(self, resolution: str = DEFAULT_COUNTRIES_RESOLUTION): """ - :param resolution: '10m', '50m', or '110m' (default), refer to https://geojson-maps.ash.ms/ + :param resolution: '10m', '50m', or '110m' (default), + refer to https://geojson-maps.ash.ms/ """ - filename = f'countries-{resolution or DEFAULT_COUNTRIES_RESOLUTION}.geojson' + filename = f'countries' \ + f'-{resolution or DEFAULT_COUNTRIES_RESOLUTION}.geojson' try: path = os.path.join(os.path.dirname(__file__), '..', 'ds', 'data', 'countries', filename) @@ -311,12 +368,16 @@ def get(self, resolution: str = DEFAULT_COUNTRIES_RESOLUTION): # noinspection PyAbstractClass,PyBroadException class ResFeatureCollectionHandler(WorkspaceResourceHandler): - # see http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks + # see + # http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks @tornado.gen.coroutine - def get(self, base_dir, res_id): + def get(self, workspace_id, res_id): try: - _, res_id, res_name, resource = self.get_workspace_resource(base_dir, res_id) - level = self.get_query_argument_int('level', default=_NUM_GEOM_SIMP_LEVELS) + _, res_id, res_name, resource = self.get_workspace_resource( + workspace_id, res_id + ) + level = self.get_query_argument_int('level', + default=_NUM_GEOM_SIMP_LEVELS) if isinstance(resource, fiona.Collection): features = resource @@ -334,26 +395,38 @@ def get(self, base_dir, res_id): features = None crs = None num_features = 0 - self.write_status_error(message='Resource "%s" is not a GeoDataFrame' % res_name) + self.write_status_error( + message='Resource "%s" is not a GeoDataFrame' % res_name + ) if features is not None: if TRACE_PERF: print('ResFeatureCollectionHandler: features CRS:', crs) - print('ResFeatureCollectionHandler: streaming started at ', datetime.datetime.now()) + print( + 'ResFeatureCollectionHandler: streaming started at ', + datetime.datetime.now() + ) self.set_header('Content-Type', 'application/json') def job(): - conservation_ratio = _level_to_conservation_ratio(level, _NUM_GEOM_SIMP_LEVELS) - write_feature_collection(features, self, - crs=crs, - res_id=res_id, - num_features=num_features, - max_num_display_geometries=1000, - max_num_display_geometry_points=100, - conservation_ratio=conservation_ratio) + conservation_ratio = _level_to_conservation_ratio( + level, _NUM_GEOM_SIMP_LEVELS + ) + write_feature_collection( + features, + self, + crs=crs, + res_id=res_id, + num_features=num_features, + max_num_display_geometries=1000, + max_num_display_geometry_points=100, + conservation_ratio=conservation_ratio + ) self.finish() if TRACE_PERF: - print('ResFeatureCollectionHandler: streaming done at ', datetime.datetime.now()) + print('ResFeatureCollectionHandler:' + ' streaming done at ', + datetime.datetime.now()) yield [THREAD_POOL.submit(job)] except Exception: @@ -363,26 +436,33 @@ def job(): # noinspection PyAbstractClass,PyBroadException class ResFeatureHandler(WorkspaceResourceHandler): - # see http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks + # see + # http://stackoverflow.com/questions/20018684/tornado-streaming-http-response-as-asynchttpclient-receives-chunks @tornado.gen.coroutine - def get(self, base_dir, res_id, feature_index): + def get(self, workspace_id, res_id, feature_index): try: - _, res_id, res_name, resource = self.get_workspace_resource(base_dir, res_id) + _, res_id, res_name, resource = self.get_workspace_resource( + workspace_id, res_id + ) feature_index = self.to_int('feature_index', feature_index) - level = self.get_query_argument_int('level', default=_NUM_GEOM_SIMP_LEVELS) + level = self.get_query_argument_int('level', + default=_NUM_GEOM_SIMP_LEVELS) if isinstance(resource, fiona.Collection): - if not self._check_feature_index(feature_index, len(resource)): + if not self._check_feature_index(feature_index, + len(resource)): return feature = resource[feature_index] crs = resource.crs elif isinstance(resource, GeoDataFrame): - if not self._check_feature_index(feature_index, len(resource)): + if not self._check_feature_index(feature_index, + len(resource)): return feature = resource.features[feature_index] crs = resource.features.crs elif isinstance(resource, gpd.GeoDataFrame): - if not self._check_feature_index(feature_index, len(resource)): + if not self._check_feature_index(feature_index, + len(resource)): return row = resource.iloc[feature_index] geometry = None @@ -399,15 +479,21 @@ def get(self, base_dir, res_id, feature_index): else: feature = None crs = None - self.write_status_error(message='Resource "%s" is not a GeoDataFrame' % res_name) + self.write_status_error( + message='Resource "%s" is not a GeoDataFrame' % res_name + ) self.finish() if feature is not None: if TRACE_PERF: print('ResFeatureHandler: feature CRS:', crs) - print('ResFeatureHandler: streaming started at ', datetime.datetime.now()) + print('ResFeatureHandler: streaming started at ', + datetime.datetime.now()) self.set_header('Content-Type', 'application/json') - conservation_ratio = _level_to_conservation_ratio(level, _NUM_GEOM_SIMP_LEVELS) + conservation_ratio = _level_to_conservation_ratio( + level, + _NUM_GEOM_SIMP_LEVELS + ) def job(): try: @@ -421,7 +507,8 @@ def job(): self.write_status_error(exc_info=sys.exc_info()) self.finish() if TRACE_PERF: - print('ResFeatureHandler: streaming done at ', datetime.datetime.now()) + print('ResFeatureHandler: streaming done at ', + datetime.datetime.now()) yield [THREAD_POOL.submit(job)] except Exception: @@ -431,17 +518,21 @@ def job(): def _check_feature_index(self, feature_index, num_features): ok = feature_index < num_features if not ok: - self.write_status_error(message='feature_index {} out of bounds, num_features={}' - .format(feature_index, num_features)) + self.write_status_error( + message='feature_index {} out of bounds,' + ' num_features={}'.format(feature_index, num_features) + ) self.finish() return ok # noinspection PyAbstractClass,PyBroadException class ResVarCsvHandler(WorkspaceResourceHandler): - def get(self, base_dir, res_id): + def get(self, workspace_id, res_id): try: - _, _, _, resource = self.get_workspace_resource(base_dir, res_id) + _, _, _, resource = self.get_workspace_resource( + workspace_id, res_id + ) var_name = self.get_query_argument('var', default=None) var_data = resource @@ -484,9 +575,11 @@ def get(self, base_dir, res_id): # noinspection PyAbstractClass,PyBroadException class ResVarHtmlHandler(WorkspaceResourceHandler): - def get(self, base_dir, res_id): + def get(self, workspace_id, res_id): try: - _, _, _, resource = self.get_workspace_resource(base_dir, res_id) + _, _, _, resource = self.get_workspace_resource( + workspace_id, res_id + ) self.set_header('Content-Type', 'text/html') self.write(resource) self.finish() @@ -545,19 +638,25 @@ def get_receiver(self): def receiver(chunk): nonlocal index # noinspection PyUnresolvedReferences - workspace_manager: WorkspaceManager = self.application.workspace_manager - # Unfortunately we have to parse the header from the first chunk ourselves as we are streaming. + workspace_manager: WorkspaceManager = \ + self.application.workspace_manager + # Unfortunately we have to parse the header + # from the first chunk ourselves as we are streaming. if index == 0: index += 1 split_chunk = chunk.split(separate) - self.meta['boundary'] = separate + split_chunk[0] + b'--' + separate + self.meta['boundary'] = separate + split_chunk[ + 0] + b'--' + separate self.meta['header'] = separate.join(split_chunk[0:7]) self.meta['header'] += separate * 2 self.meta['dir'] = split_chunk[3].decode() - self.meta['filename'] = split_chunk[5].split(b'=')[-1].replace(b'"', b'').decode() + self.meta['filename'] = split_chunk[5].split(b'=')[ + -1].replace(b'"', b'').decode() chunk = chunk[len(self.meta['header']):] # Stream - fn = workspace_manager.resolve_path(os.path.join(self.meta['dir'])) + fn = workspace_manager.resolve_path( + os.path.join(self.meta['dir']) + ) if not os.path.isdir(fn): os.mkdir(fn) @@ -577,13 +676,15 @@ def truncate_fp(self): def post(self): # Stream - self.meta['content_length'] = int(self.request.headers.get('Content-Length')) - \ - len(self.meta['header']) - \ - len(self.meta['boundary']) + self.meta['content_length'] = \ + int(self.request.headers.get('Content-Length')) - \ + len(self.meta['header']) - \ + len(self.meta['boundary']) self.truncate_fp() megabytes = int(self.meta['content_length'] / 2 ** 20) - self.finish(json.dumps({'status': 'success', 'message': str(megabytes) + 'MBs uploaded.'})) + self.finish(json.dumps({'status': 'success', + 'message': str(megabytes) + 'MBs uploaded.'})) # noinspection PyAbstractClass @@ -606,7 +707,8 @@ def _return_zip_file(self, result, process_id): return self.set_header('Content-Type', 'application/zip') - # self.set_header("Content-Disposition", "attachment; filename=%s" % target_dir + '.zip') + # self.set_header("Content-Disposition", + # "attachment; filename=%s" % target_dir + '.zip') self._stream_file_content(result, process_id) os.remove(result.filename) @@ -629,7 +731,27 @@ def post(self): zip_file = self._zip_files(target_files) self._return_zip_file(zip_file, process_id) - self.finish(json.dumps({'status': 'success', 'error': '', 'message': 'Done'})) + self.finish( + json.dumps({'status': 'success', 'error': '', 'message': 'Done'})) + + +def get_app_resources_path() -> Optional[str]: + app_path = os.environ.get("CATE_APP_PATH") + if app_path: + _LOG.warning(f"Endpoint '/app' will be served from {app_path}") + return app_path + try: + with importlib.resources.files("cate.webapi") as path: + app_path = path / "app" + if (app_path / "index.html").is_file(): + return str(app_path) + except ImportError: + pass + _LOG.warning(f"Cannot find 'cate/webapi/app," + f" consider setting environment variable" + f" CATE_APP_PATH", + exc_info=True) + return None def _new_monitor() -> Monitor: diff --git a/cate/webapi/start.py b/cate/webapi/start.py index 83cea2127..8bc84d3d7 100644 --- a/cate/webapi/start.py +++ b/cate/webapi/start.py @@ -1,23 +1,23 @@ # The MIT License (MIT) -# Copyright (c) 2016, 2017 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. """ Description @@ -51,19 +51,33 @@ from datetime import date from matplotlib.backends.backend_webagg_core import FigureManagerWebAgg -from tornado.web import Application, StaticFileHandler +from tornado.web import Application, StaticFileHandler, RedirectHandler from cate.conf.defaults import WEBAPI_PROGRESS_DEFER_PERIOD from cate.core.types import ValidationError from cate.core.wsmanag import FSWorkspaceManager +from cate.ds.stores import configure_data_stores from cate.util.misc import get_dependencies from cate.util.web import JsonRpcWebSocketHandler -from cate.util.web.webapi import run_start, url_pattern, WebAPIRequestHandler, WebAPIExitHandler +from cate.util.web.webapi import (run_start, + url_pattern, + WebAPIRequestHandler, + WebAPIExitHandler) from cate.version import __version__ -from cate.webapi.mpl import MplJavaScriptHandler, MplDownloadHandler, MplWebSocketHandler -from cate.webapi.rest import ResourcePlotHandler, CountriesGeoJSONHandler, ResVarTileHandler, \ - ResFeatureCollectionHandler, ResFeatureHandler, ResVarCsvHandler, ResVarHtmlHandler, NE2Handler, \ - FilesUploadHandler, FilesDownloadHandler +from cate.webapi.mpl import (MplJavaScriptHandler, + MplDownloadHandler, + MplWebSocketHandler) +from cate.webapi.rest import (ResourcePlotHandler, + CountriesGeoJSONHandler, + ResVarTileHandler, + ResFeatureCollectionHandler, + ResFeatureHandler, + ResVarCsvHandler, + ResVarHtmlHandler, + NE2Handler, + FilesUploadHandler, + FilesDownloadHandler, + get_app_resources_path) from cate.webapi.service import SERVICE_NAME, SERVICE_TITLE from cate.webapi.websocket import WebSocketService @@ -81,8 +95,9 @@ class WebAPIInfoHandler(WebAPIRequestHandler): def get(self): # noinspection PyUnresolvedReferences - user_root_mode = isinstance(self.application.workspace_manager, FSWorkspaceManager) \ - and self.application.workspace_manager.root_path is not None + workspace_manager = self.application.workspace_manager + user_root_mode = isinstance(workspace_manager, FSWorkspaceManager) \ + and workspace_manager.root_path is not None self.write_status_ok(content={ 'name': SERVICE_NAME, @@ -103,7 +118,8 @@ def service_factory(application): ) -# All JSON REST responses should have same structure, namely a dictionary as follows: +# All JSON REST responses should have same structure, +# namely a dictionary as follows: # # { # "status": "ok" | "error", @@ -112,36 +128,62 @@ def service_factory(application): # } def create_application(user_root_path: str = None): - default_url_root = "/" - # replace default url_root with /user/username/ if running in Cate Hub context. - url_root = os.environ.get("JUPYTERHUB_SERVICE_PREFIX", default_url_root) - if url_root is not default_url_root: - _LOG.warning(f"detected environment variable" - f" JUPYTERHUB_SERVICE_PREFIX using {url_root}" - f" as default root URL for the API.") application = Application([ - (url_root + '_static/(.*)', StaticFileHandler, {'path': FigureManagerWebAgg.get_static_file_path()}), - (url_root + 'mpl.js', MplJavaScriptHandler), - (url_pattern(url_root + 'mpl/download/{{base_dir}}/{{figure_id}}/{{format_name}}'), MplDownloadHandler), - (url_pattern(url_root + 'mpl/figures/{{base_dir}}/{{figure_id}}'), MplWebSocketHandler), - (url_pattern(url_root + 'files/upload'), FilesUploadHandler), - (url_pattern(url_root + 'files/download'), FilesDownloadHandler), - (url_pattern(url_root), WebAPIInfoHandler), - (url_pattern(url_root + 'exit'), WebAPIExitHandler), - (url_pattern(url_root + 'api'), JsonRpcWebSocketHandler, dict( - service_factory=service_factory, - validation_exception_class=ValidationError, - report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD) + ('/app/(.*)', + StaticFileHandler, + { + 'path': get_app_resources_path(), + 'default_filename': 'index.html' + } ), - (url_pattern(url_root + 'ws/res/plot/{{base_dir}}/{{res_name}}'), ResourcePlotHandler), - (url_pattern(url_root + 'ws/res/geojson/{{base_dir}}/{{res_id}}'), ResFeatureCollectionHandler), - (url_pattern(url_root + 'ws/res/geojson/{{base_dir}}/{{res_id}}/{{feature_index}}'), ResFeatureHandler), - (url_pattern(url_root + 'ws/res/csv/{{base_dir}}/{{res_id}}'), ResVarCsvHandler), - (url_pattern(url_root + 'ws/res/html/{{base_dir}}/{{res_id}}'), ResVarHtmlHandler), - (url_pattern(url_root + 'ws/res/tile/{{base_dir}}/{{res_id}}/{{z}}/{{y}}/{{x}}.png'), ResVarTileHandler), - (url_pattern(url_root + 'ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), NE2Handler), - (url_pattern(url_root + 'ws/countries'), CountriesGeoJSONHandler), + ('/app', + RedirectHandler, + {'url': '/app/'} + ), + ('/_static/(.*)', + StaticFileHandler, + {'path': FigureManagerWebAgg.get_static_file_path()}), + ('/mpl.js', + MplJavaScriptHandler), + (url_pattern('/mpl/download/{{workspace_id}}/{{figure_id}}' + '/{{format_name}}'), + MplDownloadHandler), + (url_pattern('/mpl/figures/{{workspace_id}}/{{figure_id}}'), + MplWebSocketHandler), + (url_pattern('/files/upload'), + FilesUploadHandler), + (url_pattern('/files/download'), + FilesDownloadHandler), + (url_pattern('/'), + WebAPIInfoHandler), + (url_pattern('/exit'), + WebAPIExitHandler), + (url_pattern('/api'), + JsonRpcWebSocketHandler, + dict( + service_factory=service_factory, + validation_exception_class=ValidationError, + report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD) + ), + (url_pattern('/ws/res/plot/{{workspace_id}}/{{res_name}}'), + ResourcePlotHandler), + (url_pattern('/ws/res/geojson/{{workspace_id}}/{{res_id}}'), + ResFeatureCollectionHandler), + (url_pattern('/ws/res/geojson/{{workspace_id}}/{{res_id}}' + '/{{feature_index}}'), + ResFeatureHandler), + (url_pattern('/ws/res/csv/{{workspace_id}}/{{res_id}}'), + ResVarCsvHandler), + (url_pattern('/ws/res/html/{{workspace_id}}/{{res_id}}'), + ResVarHtmlHandler), + (url_pattern('/ws/res/tile/{{workspace_id}}/{{res_id}}' + '/{{z}}/{{y}}/{{x}}.png'), + ResVarTileHandler), + (url_pattern('/ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), + NE2Handler), + (url_pattern('/ws/countries'), + CountriesGeoJSONHandler), ]) default_user_root_path = os.environ.get('CATE_USER_ROOT') @@ -151,6 +193,8 @@ def create_application(user_root_path: str = None): _LOG.warning(f"user root path given by environment variable" f" CATE_USER_ROOT superseded by {user_root_path}") + if user_root_path is not None: + configure_data_stores(local_root_path=user_root_path) application.workspace_manager = FSWorkspaceManager(user_root_path) return application diff --git a/cate/webapi/wsmanag.py b/cate/webapi/wsmanag.py index 0235ead94..c0e2dc989 100644 --- a/cate/webapi/wsmanag.py +++ b/cate/webapi/wsmanag.py @@ -1,37 +1,38 @@ # The MIT License (MIT) -# Copyright (c) 2018 by the ESA CCI Toolbox development team and contributors +# Copyright (c) 2016-2023 by the ESA CCI Toolbox team and contributors # -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal in -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. import json -import requests import urllib.parse import urllib.request +from asyncio import Future from typing import List, Tuple, Optional, Any, Union +import requests from tornado import gen, ioloop, websocket -from cate.core.common import default_user_agent -from cate.conf.defaults import WEBAPI_WORKSPACE_TIMEOUT -from cate.conf.defaults import WEBAPI_RESOURCE_TIMEOUT from cate.conf.defaults import WEBAPI_PLOT_TIMEOUT +from cate.conf.defaults import WEBAPI_RESOURCE_TIMEOUT +from cate.conf.defaults import WEBAPI_WORKSPACE_TIMEOUT +from cate.core.common import default_user_agent from cate.core.workspace import Workspace, OpKwArgs from cate.core.wsmanag import WorkspaceManager from cate.util.misc import encode_url_path @@ -50,7 +51,10 @@ class WebAPIWorkspaceManager(WorkspaceManager): It is currently used for the Cate CLI only. """ - def __init__(self, service_info: dict, conn_timeout: float = 5, rpc_timeout: float = 120): + def __init__(self, + service_info: dict, + conn_timeout: float = 5, + rpc_timeout: float = 120): address = service_info.get('address', None) or 'localhost' port = service_info.get('port', None) if not port: @@ -61,22 +65,35 @@ def __init__(self, service_info: dict, conn_timeout: float = 5, rpc_timeout: flo self.ws_client.connect(conn_timeout) self.rpc_timeout = rpc_timeout - def _url(self, path_pattern: str, path_args: dict = None, query_args: dict = None) -> str: - return self.base_url + encode_url_path(path_pattern, path_args=path_args, query_args=query_args) - - def _invoke_method(self, method, params, timeout: float = None, + def _url(self, + path_pattern: str, + path_args: dict = None, + query_args: dict = None) -> str: + return self.base_url + encode_url_path(path_pattern, + path_args=path_args, + query_args=query_args) + + def _invoke_method(self, + method, + params, + timeout: float = None, monitor: Monitor = Monitor.NONE): - rpc_response = self.ws_client.invoke_method(method, params, timeout=timeout, monitor=monitor) + rpc_response = self.ws_client.invoke_method(method, + params, + timeout=timeout, + monitor=monitor) error_info = rpc_response.get('error') if error_info: WebAPIWorkspaceManager._raise_error(error_info) return rpc_response.get('response') def _fetch_json(self, url, data=None, timeout: float = None): - with requests.post(url, - data=data, - timeout=timeout or self.rpc_timeout, - headers={'User-Agent': default_user_agent()}) as response: + with requests.post( + url, + data=data, + timeout=timeout or self.rpc_timeout, + headers={'User-Agent': default_user_agent()} + ) as response: json_response = response.json() status = json_response.get('status') if status == 'error': @@ -97,7 +114,8 @@ def _raise_error(error_info): exc_type = safe_eval(exc_type_name) except Exception: pass - # TODO (forman): find out how can we preserve traceback without adding it to the message string + # TODO (forman): find out how can we preserve + # traceback without adding it to the message string # tb = error_ex_info.get('traceback') else: message = 'Unknown error from WebAPI service.' @@ -117,7 +135,9 @@ def _raise_error(error_info): # noinspection PyMethodMayBeStatic def _query(self, **kwargs): - return {key: value for key, value in kwargs.items() if value is not None} + return {key: value + for key, value in kwargs.items() + if value is not None} def _post_data(self, **kwargs): data = urllib.parse.urlencode(self._query(**kwargs)) @@ -127,141 +147,209 @@ def _post_data(self, **kwargs): def get_traceback_header(cls) -> str: traceback_title = 'Cate WebAPI service traceback' traceback_line = len(traceback_title) * '=' - return '\n' + traceback_line + '\n' + traceback_title + '\n' + traceback_line + '\n' + return '\n{0}\n{1}\n{2}\n'.format(traceback_line, + traceback_title, + traceback_line) @property def root_path(self) -> Optional[str]: return None - def resolve_path(self, path: str) -> str: - return path + def resolve_path(self, path_or_name: str) -> str: + return path_or_name def resolve_workspace_dir(self, path_or_name: str) -> str: return path_or_name def get_open_workspaces(self) -> List[Workspace]: - json_list = self._invoke_method("get_open_workspaces", dict(), timeout=WEBAPI_WORKSPACE_TIMEOUT) - return [Workspace.from_json_dict(ws_json_dict) for ws_json_dict in json_list] + json_list = self._invoke_method("get_open_workspaces", + dict(), + timeout=WEBAPI_WORKSPACE_TIMEOUT) + return [Workspace.from_json_dict(ws_json_dict) + for ws_json_dict in json_list] def list_workspace_names(self) -> List[str]: - json_list = self._invoke_method("list_workspace_names", dict(), timeout=WEBAPI_WORKSPACE_TIMEOUT) + json_list = self._invoke_method("list_workspace_names", + dict(), + timeout=WEBAPI_WORKSPACE_TIMEOUT) return json_list def get_workspace(self, base_dir: str) -> Workspace: - json_dict = self._invoke_method("get_workspace", dict(base_dir=base_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT) + json_dict = self._invoke_method("get_workspace", + dict(base_dir=base_dir), + timeout=WEBAPI_WORKSPACE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def new_workspace(self, base_dir: str, description: str = None) -> Workspace: - json_dict = self._invoke_method("new_workspace", dict(base_dir=base_dir, description=description), + def new_workspace(self, + base_dir: str, + description: str = None) -> Workspace: + json_dict = self._invoke_method("new_workspace", + dict(base_dir=base_dir, + description=description), timeout=WEBAPI_WORKSPACE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def open_workspace(self, base_dir: str, monitor: Monitor = Monitor.NONE) -> Workspace: - json_dict = self._invoke_method("open_workspace", dict(base_dir=base_dir), + def open_workspace(self, + base_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: + json_dict = self._invoke_method("open_workspace", + dict(base_dir=base_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) return Workspace.from_json_dict(json_dict) def close_workspace(self, base_dir: str) -> None: - self._invoke_method("close_workspace", dict(base_dir=base_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT) + self._invoke_method("close_workspace", + dict(base_dir=base_dir), + timeout=WEBAPI_WORKSPACE_TIMEOUT) def close_all_workspaces(self) -> None: - self._invoke_method("close_all_workspaces", dict(), timeout=WEBAPI_WORKSPACE_TIMEOUT) + self._invoke_method("close_all_workspaces", + dict(), + timeout=WEBAPI_WORKSPACE_TIMEOUT) - def save_workspace_as(self, base_dir: str, to_dir: str, monitor: Monitor = Monitor.NONE) -> Workspace: + def save_workspace_as(self, + base_dir: str, + to_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: json_dict = self._invoke_method("save_workspace_as", - dict(base_dir=base_dir, to_dir=to_dir), + dict(base_dir=base_dir, + to_dir=to_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) return Workspace.from_json_dict(json_dict) - def save_workspace(self, base_dir: str, monitor: Monitor = Monitor.NONE) -> Workspace: - json_dict = self._invoke_method("save_workspace", dict(base_dir=base_dir), + def save_workspace(self, + base_dir: str, + monitor: Monitor = Monitor.NONE) -> Workspace: + json_dict = self._invoke_method("save_workspace", + dict(base_dir=base_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) return Workspace.from_json_dict(json_dict) def save_all_workspaces(self, monitor: Monitor = Monitor.NONE) -> None: - self._invoke_method("save_all_workspaces", dict(), timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) + self._invoke_method("save_all_workspaces", + dict(), + timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) - def delete_workspace(self, base_dir: str, remove_completely: bool = False) -> None: + def delete_workspace(self, + base_dir: str, + remove_completely: bool = False) -> None: self._invoke_method("delete_workspace", - dict(base_dir=base_dir, remove_completely=remove_completely), + dict(base_dir=base_dir, + remove_completely=remove_completely), timeout=WEBAPI_WORKSPACE_TIMEOUT) def clean_workspace(self, base_dir: str) -> Workspace: - json_dict = self._invoke_method("clean_workspace", dict(base_dir=base_dir), timeout=WEBAPI_WORKSPACE_TIMEOUT) + json_dict = self._invoke_method("clean_workspace", + dict(base_dir=base_dir), + timeout=WEBAPI_WORKSPACE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def run_op_in_workspace(self, base_dir: str, op_name: str, op_args: OpKwArgs, - monitor: Monitor = Monitor.NONE) -> Union[Any, None]: + def run_op_in_workspace( + self, + base_dir: str, + op_name: str, + op_args: OpKwArgs, + monitor: Monitor = Monitor.NONE + ) -> Union[Any, None]: return self._invoke_method("run_op_in_workspace", - dict(base_dir=base_dir, op_name=op_name, op_args=op_args), + dict(base_dir=base_dir, + op_name=op_name, + op_args=op_args), timeout=WEBAPI_WORKSPACE_TIMEOUT, monitor=monitor) - def delete_workspace_resource(self, base_dir: str, res_name: str) -> Workspace: + def delete_workspace_resource(self, + base_dir: str, + res_name: str) -> Workspace: json_dict = self._invoke_method("delete_workspace_resource", - dict(base_dir=base_dir, res_name=res_name), + dict(base_dir=base_dir, + res_name=res_name), timeout=WEBAPI_RESOURCE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def set_workspace_resource_persistence(self, base_dir: str, res_name: str, persistent: bool) -> Workspace: + def set_workspace_resource_persistence(self, + base_dir: str, + res_name: str, + persistent: bool) -> Workspace: json_dict = self._invoke_method("set_workspace_resource_persistence", - dict(base_dir=base_dir, res_name=res_name, persistent=persistent), + dict(base_dir=base_dir, + res_name=res_name, + persistent=persistent), timeout=WEBAPI_RESOURCE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def set_workspace_resource(self, - base_dir: str, - op_name: str, - op_args: OpKwArgs, - res_name: Optional[str] = None, - overwrite: bool = False, - monitor: Monitor = Monitor.NONE) -> Tuple[Workspace, str]: + def set_workspace_resource( + self, + base_dir: str, + op_name: str, + op_args: OpKwArgs, + res_name: Optional[str] = None, + overwrite: bool = False, + monitor: Monitor = Monitor.NONE + ) -> Tuple[Workspace, str]: json_list = self._invoke_method("set_workspace_resource", - dict(base_dir=base_dir, res_name=res_name, op_name=op_name, - op_args=op_args, overwrite=overwrite), + dict(base_dir=base_dir, + res_name=res_name, + op_name=op_name, + op_args=op_args, + overwrite=overwrite), timeout=WEBAPI_RESOURCE_TIMEOUT, monitor=monitor) return Workspace.from_json_dict(json_list[0]), json_list[1] - def rename_workspace_resource(self, base_dir: str, - res_name: str, new_res_name: str) -> Workspace: + def rename_workspace_resource(self, + base_dir: str, + res_name: str, + new_res_name: str) -> Workspace: json_dict = self._invoke_method("rename_workspace_resource", - dict(base_dir=base_dir, res_name=res_name, new_res_name=new_res_name), + dict(base_dir=base_dir, + res_name=res_name, + new_res_name=new_res_name), timeout=WEBAPI_RESOURCE_TIMEOUT) return Workspace.from_json_dict(json_dict) - def write_workspace_resource(self, base_dir: str, res_name: str, - file_path: str, format_name: str = None, + def write_workspace_resource(self, + base_dir: str, + res_name: str, + file_path: str, + format_name: str = None, monitor: Monitor = Monitor.NONE) -> None: self._invoke_method("write_workspace_resource", - dict(base_dir=base_dir, res_name=res_name, - file_path=file_path, format_name=format_name), + dict(base_dir=base_dir, + res_name=res_name, + file_path=file_path, + format_name=format_name), timeout=WEBAPI_RESOURCE_TIMEOUT) - def plot_workspace_resource(self, base_dir: str, res_name: str, - var_name: str = None, file_path: str = None, + def plot_workspace_resource(self, + base_dir: str, + res_name: str, + var_name: str = None, + file_path: str = None, monitor: Monitor = Monitor.NONE) -> None: - url = self._url('/ws/res/plot/{base_dir}/{res_name}', - path_args=dict(base_dir=base_dir, res_name=res_name), - query_args=self._query(var_name=var_name, file_path=file_path)) - self._fetch_json(url, timeout=WEBAPI_RESOURCE_TIMEOUT + WEBAPI_PLOT_TIMEOUT) - - def print_workspace_resource(self, base_dir: str, res_name_or_expr: str = None, + url = self._url('/ws/res/plot/{workspace_id}/{res_name}', + path_args=dict(base_dir=base_dir, + res_name=res_name), + query_args=self._query(var_name=var_name, + file_path=file_path)) + self._fetch_json( + url, + timeout=WEBAPI_RESOURCE_TIMEOUT + WEBAPI_PLOT_TIMEOUT + ) + + def print_workspace_resource(self, + base_dir: str, + res_name_or_expr: str = None, monitor: Monitor = Monitor.NONE) -> None: self._invoke_method("print_workspace_resource", - dict(base_dir=base_dir, res_name_or_expr=res_name_or_expr), + dict(base_dir=base_dir, + res_name_or_expr=res_name_or_expr), timeout=WEBAPI_RESOURCE_TIMEOUT, monitor=monitor) - def _create_scratch_dir(self, scratch_dir_name: str) -> str: - return '' - - def _resolve_target_path(self, target_dir: str) -> str: - return '' - class WebSocketClient(object): def __init__(self, url): @@ -272,10 +360,13 @@ def __init__(self, url): def connect(self, timeout: float): ioloop.IOLoop.current().run_sync(self._connect, timeout=timeout) - def invoke_method(self, method, params, timeout, monitor: Monitor) -> dict: + def invoke_method(self, + method, + params, + timeout, monitor: Monitor) -> dict: json_rpc_request = self._new_rpc_request(method, params) - def do_json_rpc() -> dict: + def do_json_rpc() -> Future[dict]: return _do_json_rpc(self.connection, json_rpc_request, monitor) return ioloop.IOLoop.current().run_sync(do_json_rpc, timeout=timeout) @@ -331,7 +422,7 @@ def _do_json_rpc(web_socket, rpc_request: dict, monitor: Monitor) -> dict: work = None monitor.progress(work=work, msg=msg) else: - if monitor and started: + if monitor is not None and started: monitor.done() return rpc_response diff --git a/environment.yml b/environment.yml index c4afe0600..21c1ed6b1 100644 --- a/environment.yml +++ b/environment.yml @@ -28,14 +28,14 @@ dependencies: - numpy>=1.18.1,<1.24 - netcdf4>=1.5.1.2 - owslib>=0.19.1 - - pandas>=1.3 + - pandas>=1.3,<2 - pillow>=7.0.0 - pip - psutil>=5.7.0 - pyepsg>=0.4.0 - pyproj>=3.0 - pyshp>=2.1.0 - - python>=3.8,<3.10 + - python>=3.8 - python-dateutil>=2.8.1 - requests-file>=1.5 # needed because of fix https://s3fs.readthedocs.io/en/latest/changelog.html#id5 diff --git a/notebooks/cate-jl-integration.ipynb b/notebooks/cate-jl-integration.ipynb new file mode 100644 index 000000000..ed8bb027f --- /dev/null +++ b/notebooks/cate-jl-integration.ipynb @@ -0,0 +1,2339 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f4ef66d8-7be2-4a04-a341-1da91717ba92", + "metadata": {}, + "source": [ + "# Cate JupyterLab Integration\n", + "\n", + "This Notebook demonstrates how to use the features of the Cate JupyterLab integration.\n", + "The Notebook demonstrates two scenarios how Cate is utilized in JupyterLab.\n", + "\n", + "1. Run **Cate App** to open datasets persisted in this Notebooks's workspace;\n", + "2. Add in-memory datasets opened otherwise created in a Notebook to **Cate App**.\n", + "\n", + "The latter is demonstrated using the example of **xcube Viewer** because it is not \n", + "yet implemented in Cate.\n", + "\n", + "For this to work, the following requirements must be satisfied:\n", + "\n", + "* xcube version must be >= 1.0.2\n", + "* JupyterLab version must be >= 3.4\n", + "* The xcube JupyterLab extension [xcube-jl-ext](https://github.com/dcs4cop/xcube-jl-ext) \n", + " must be installed and enabled.\n", + "* The xcube JupyterLab extension [cate-jl-ext](https://github.com/CCI-Tools/cate-jl-ext) \n", + " must be installed and enabled.\n", + "* This example uses the xcube data store `ccizarr` which requires the\n", + " [xcube-cci](https://github.com/dcs4cop/xcube-cci) plugin to be installed too. \n", + " However, in priciple, you can use any other xcube data store, such as `cciodp`, `cmems`, \n", + " `sentinelhub`, `s3` or `file`.\n", + "\n", + "If you run JupyterLab remotely, e.g., with JupyterHub, then also\n", + "\n", + "* the [jupyter-proxy](https://jupyter-server-proxy.readthedocs.io/en/latest/#) \n", + " server extension must be installed and enabled." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "539dd106-ffb9-4ed7-99c4-7241a9798547", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR 1: PROJ: proj_create_from_database: Open of /opt/conda/share/proj failed\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import xarray as xr\n", + "\n", + "from xcube.webapi.viewer import Viewer\n", + "from xcube.core.store import new_data_store\n", + "from xcube.core.select import select_subset" + ] + }, + { + "cell_type": "markdown", + "id": "028285fc-7b3f-478f-98fe-17a2f8ed05ce", + "metadata": {}, + "source": [ + "We create some datasets so we have something to show. We use the xcube datastore framework here to open the dataset, but it could also be opened by other means, e.g., `xr.open_dataset()`, provided it has variables with dimensions [\"time\", \"y\", \"x\"] or [\"y\", \"x\"]. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "71a28392-d820-46df-9041-2f78d33113e7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['ESACCI-BIOMASS-L4-AGB-MERGED-100m-2010-2018-fv2.0.zarr',\n", + " 'ESACCI-GHG-L2-CH4-SCIAMACHY-WFMD-2002-2011-fv1.zarr',\n", + " 'ESACCI-GHG-L2-CO2-SCIAMACHY-WFMD-2002-2012-fv1.zarr',\n", + " 'ESACCI-ICESHEETS_Antarctica_GMB-2002-2016-v1.1.zarr',\n", + " 'ESACCI-ICESHEETS_Greenland_GMB-2003-2016-v1.1.zarr',\n", + " 'ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_NOAA-1982-2016-fv3.0.zarr',\n", + " 'ESACCI-L3C_SNOW-SWE-1979-2018-fv1.0.zarr',\n", + " 'ESACCI-L4_GHRSST-SST-GMPE-GLOB_CDR2.0-1981-2016-v02.0-fv01.0.zarr',\n", + " 'ESACCI-LAKES-L3S-LK_PRODUCTS-MERGED-1992-09-fv2.0.1.zarr',\n", + " 'ESACCI-LC-L4-LCCS-Map-300m-P1Y-1992-2015-v2.0.7b.zarr',\n", + " 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1DAILY_DAY-2002-2018-fv3.00.zarr',\n", + " 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1DAILY_NIGHT-2002-2018-fv3.00.zarr',\n", + " 'ESACCI-OC-L3S-IOP-MERGED-1M_MONTHLY_4km_GEO_PML_OCx_QAA-1997-2020-fv5.0.zarr',\n", + " 'ESACCI-PERMAFROST-L4-ALT-MODISLST-AREA4_PP-1997-2018-fv02.0.zarr',\n", + " 'ESACCI-SEAICE-L3C-SITHICK-RA2_ENVISAT-NH25KMEASE2-2002-2012-fv2.0.zarr',\n", + " 'ESACCI-SEAICE-L3C-SITHICK-SIRAL_CRYOSAT2-NH25KMEASE2-2010-2017-fv2.0.zarr',\n", + " 'ESACCI-SEAICE-L4-SICONC-AMSR_50.0kmEASE2-NH-2002-2017-fv2.1.zarr',\n", + " 'ESACCI-SEALEVEL-IND-MSLTR-MERGED-1993-2016-fv02.zarr',\n", + " 'ESACCI-SEALEVEL-L4-MSLA-MERGED-1993-2015-fv02.zarr',\n", + " 'ESACCI-SOILMOISTURE-L3S-SSMV-COMBINED-1978-2020-fv05.3.zarr']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "store = new_data_store(\"ccizarr\")\n", + "store.list_data_ids()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "24b7759f-44b2-4638-91f1-8d218c8fc527", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", + "Dimensions: (time: 12784, lat: 720, lon: 1440, fields: 16,\n", + " field_name_length: 50, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 -89.88 -89.62 -89.38 ... 89.38 89.62 89.88\n", + " * lon (lon) float32 -179.9 -179.6 -179.4 ... 179.4 179.6 179.9\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " analysis_number (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " anomaly_fields (time, fields, lat, lon) float32 dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray>\n", + " field_name (fields, field_name_length) |S1 dask.array<chunksize=(16, 50), meta=np.ndarray>\n", + " gradient_fields (time, fieldsp1, lat, lon) float32 dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray>\n", + " median_type (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: Global SST Ensemble, L4 GMPE\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-a36671e9-f27a-4015-a68a-20165f3e6d14' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-a36671e9-f27a-4015-a68a-20165f3e6d14' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 12784</li><li><span class='xr-has-index'>lat</span>: 720</li><li><span class='xr-has-index'>lon</span>: 1440</li><li><span class='xr-has-index'>fields</span>: 16</li><li><span class='xr-has-index'>field_name_length</span>: 50</li><li><span class='xr-has-index'>fieldsp1</span>: 17</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-f470ac9e-a614-4109-aab8-82faaf720fe3' class='xr-section-summary-in' type='checkbox' checked><label for='section-f470ac9e-a614-4109-aab8-82faaf720fe3' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>field_name_length</span></div><div class='xr-var-dims'>(field_name_length)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 45 46 47 48 49 50</div><input id='attrs-48a170ed-6ac6-4737-972a-6d2128ad8901' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-48a170ed-6ac6-4737-972a-6d2128ad8901' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3fbd0b4f-ff26-49e4-8ed6-20249e07c80f' class='xr-var-data-in' type='checkbox'><label for='data-3fbd0b4f-ff26-49e4-8ed6-20249e07c80f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Length of string array for names of inputs</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,\n", + " 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\n", + " 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fields</span></div><div class='xr-var-dims'>(fields)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 11 12 13 14 15 16</div><input id='attrs-7852d603-0373-4f78-9a29-fbcc8166f7c7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7852d603-0373-4f78-9a29-fbcc8166f7c7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7977e50f-06ad-49f0-9f0e-0894b66b9f65' class='xr-var-data-in' type='checkbox'><label for='data-7977e50f-06ad-49f0-9f0e-0894b66b9f65' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n", + " dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fieldsp1</span></div><div class='xr-var-dims'>(fieldsp1)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 12 13 14 15 16 17</div><input id='attrs-d1cf7b45-20f1-4963-8190-c3507e137120' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d1cf7b45-20f1-4963-8190-c3507e137120' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b6b27ca2-a001-4f3a-8494-c82764e32dd5' class='xr-var-data-in' type='checkbox'><label for='data-b6b27ca2-a001-4f3a-8494-c82764e32dd5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number plus one</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],\n", + " dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-89.88 -89.62 ... 89.62 89.88</div><input id='attrs-c268f9f9-82f4-4005-8eae-dbe482e9b5c5' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-c268f9f9-82f4-4005-8eae-dbe482e9b5c5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e6e4c67f-26c9-4430-8389-ff429548b070' class='xr-var-data-in' type='checkbox'><label for='data-e6e4c67f-26c9-4430-8389-ff429548b070' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>valid_max :</span></dt><dd>90.0</dd><dt><span>valid_min :</span></dt><dd>-90.0</dd></dl></div><div class='xr-var-data'><pre>array([-89.875, -89.625, -89.375, ..., 89.375, 89.625, 89.875],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-179.9 -179.6 ... 179.6 179.9</div><input id='attrs-0c310cce-b017-435c-bf95-44a57fcb984a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-0c310cce-b017-435c-bf95-44a57fcb984a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-82eeb84f-f9c7-4b68-8852-d10e0baf7c05' class='xr-var-data-in' type='checkbox'><label for='data-82eeb84f-f9c7-4b68-8852-d10e0baf7c05' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>X</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>valid_max :</span></dt><dd>180.0</dd><dt><span>valid_min :</span></dt><dd>-180.0</dd></dl></div><div class='xr-var-data'><pre>array([-179.875, -179.625, -179.375, ..., 179.375, 179.625, 179.875],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1982-01-01T12:00:00 ... 2016-12-...</div><input id='attrs-0c36c78a-effb-45bd-8066-75221da8f9ea' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-0c36c78a-effb-45bd-8066-75221da8f9ea' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e4cda083-1424-4626-9813-147c8268ae51' class='xr-var-data-in' type='checkbox'><label for='data-e4cda083-1424-4626-9813-147c8268ae51' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-526947d2-015c-4566-95a3-ba134d42dc6a' class='xr-section-summary-in' type='checkbox' checked><label for='section-526947d2-015c-4566-95a3-ba134d42dc6a' class='xr-section-summary' >Data variables: <span>(7)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>analysed_sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-96359c65-1a7a-497e-be3b-7331e783154e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-96359c65-1a7a-497e-be3b-7331e783154e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c0e74d92-9946-4f9e-889b-0b5d9ae5c319' class='xr-var-data-in' type='checkbox'><label for='data-c0e74d92-9946-4f9e-889b-0b5d9ae5c319' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>median SST from GMPE</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>standard_name :</span></dt><dd>sea_surface_foundation_temperature</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>4500</dd><dt><span>valid_min :</span></dt><dd>-300</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>analysis_number</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-14e307c6-c273-4518-8b9c-41a8e0aa4adf' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-14e307c6-c273-4518-8b9c-41a8e0aa4adf' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-33a9f881-05ef-4e11-b98b-f8a153640621' class='xr-var-data-in' type='checkbox'><label for='data-33a9f881-05ef-4e11-b98b-f8a153640621' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Number of contributing analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd></dd><dt><span>valid_max :</span></dt><dd>127</dd><dt><span>valid_min :</span></dt><dd>-127</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>anomaly_fields</span></div><div class='xr-var-dims'>(time, fields, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray></div><input id='attrs-a67e8b37-91db-47fd-8b9c-7d030033f325' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a67e8b37-91db-47fd-8b9c-7d030033f325' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-aaca1315-3ef0-4157-8b83-44fc5325c99a' class='xr-var-data-in' type='checkbox'><label for='data-aaca1315-3ef0-4157-8b83-44fc5325c99a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Anomaly of input analyses from the ensemble median</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 790.03 GiB </td>\n", + " <td> 506.25 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 16, 720, 1440) </td>\n", + " <td> (16, 16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"484\" height=\"100\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", + " <line x1=\"3\" y1=\"0\" x2=\"3\" y2=\"25\" />\n", + " <line x1=\"7\" y1=\"0\" x2=\"7\" y2=\"25\" />\n", + " <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", + " <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", + " <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", + " <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", + " <line x1=\"26\" y1=\"0\" x2=\"26\" y2=\"25\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"29\" y2=\"25\" />\n", + " <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n", + " <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", + " <line x1=\"41\" y1=\"0\" x2=\"41\" y2=\"25\" />\n", + " <line x1=\"44\" y1=\"0\" x2=\"44\" y2=\"25\" />\n", + " <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", + " <line x1=\"52\" y1=\"0\" x2=\"52\" y2=\"25\" />\n", + " <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", + " <line x1=\"59\" y1=\"0\" x2=\"59\" y2=\"25\" />\n", + " <line x1=\"63\" y1=\"0\" x2=\"63\" y2=\"25\" />\n", + " <line x1=\"67\" y1=\"0\" x2=\"67\" y2=\"25\" />\n", + " <line x1=\"71\" y1=\"0\" x2=\"71\" y2=\"25\" />\n", + " <line x1=\"74\" y1=\"0\" x2=\"74\" y2=\"25\" />\n", + " <line x1=\"78\" y1=\"0\" x2=\"78\" y2=\"25\" />\n", + " <line x1=\"82\" y1=\"0\" x2=\"82\" y2=\"25\" />\n", + " <line x1=\"86\" y1=\"0\" x2=\"86\" y2=\"25\" />\n", + " <line x1=\"89\" y1=\"0\" x2=\"89\" y2=\"25\" />\n", + " <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", + " <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"25\" />\n", + " <line x1=\"101\" y1=\"0\" x2=\"101\" y2=\"25\" />\n", + " <line x1=\"104\" y1=\"0\" x2=\"104\" y2=\"25\" />\n", + " <line x1=\"108\" y1=\"0\" x2=\"108\" y2=\"25\" />\n", + " <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", + " <line x1=\"116\" y1=\"0\" x2=\"116\" y2=\"25\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >12784</text>\n", + " <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", + "\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"190\" y1=\"35\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"190\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 204.9485979497544,14.948597949754403 204.9485979497544,50.176723267048196 190.0,35.228125317293795\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"229\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"209\" y1=\"0\" x2=\"224\" y2=\"14\" />\n", + " <line x1=\"229\" y1=\"0\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 229.24565621623074,0.0 244.19425416598514,14.948597949754403 204.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"50\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + " <line x1=\"224\" y1=\"14\" x2=\"224\" y2=\"50\" />\n", + " <line x1=\"244\" y1=\"14\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"204.9485979497544,14.948597949754403 244.19425416598514,14.948597949754403 244.19425416598514,50.176723267048196 204.9485979497544,50.176723267048196\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"224.571426\" y=\"70.176723\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"264.194254\" y=\"32.562661\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,264.194254,32.562661)\">720</text>\n", + " <text x=\"187.474299\" y=\"62.702424\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,187.474299,62.702424)\">16</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>field_name</span></div><div class='xr-var-dims'>(fields, field_name_length)</div><div class='xr-var-dtype'>|S1</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 50), meta=np.ndarray></div><input id='attrs-3e2cedb4-e1c3-4e5e-b546-c112747fb56e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3e2cedb4-e1c3-4e5e-b546-c112747fb56e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-08d1baae-d16c-4b8b-8db7-55d22c739b3f' class='xr-var-data-in' type='checkbox'><label for='data-08d1baae-d16c-4b8b-8db7-55d22c739b3f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>name of the contributing L4 analyses</dd><dt><span>units :</span></dt><dd></dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 800 B </td>\n", + " <td> 800 B </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (16, 50) </td>\n", + " <td> (16, 50) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> |S1 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"170\" height=\"93\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"43\" x2=\"120\" y2=\"43\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"43\" style=\"stroke-width:2\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"43\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,43.75646913247805 0.0,43.75646913247805\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"63.756469\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >50</text>\n", + " <text x=\"140.000000\" y=\"21.878235\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,21.878235)\">16</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>gradient_fields</span></div><div class='xr-var-dims'>(time, fieldsp1, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray></div><input id='attrs-cadab894-dd2b-49f6-8e36-c10cbd5bb612' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-cadab894-dd2b-49f6-8e36-c10cbd5bb612' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d8adc306-832c-409c-a3e2-c96466846b2e' class='xr-var-data-in' type='checkbox'><label for='data-d8adc306-832c-409c-a3e2-c96466846b2e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Horizontal SST gradients of input analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST, GMPE median</dd><dt><span>units :</span></dt><dd>kelvin m-1</dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 839.40 GiB </td>\n", + " <td> 537.89 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 17, 720, 1440) </td>\n", + " <td> (16, 17, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"484\" height=\"100\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", + " <line x1=\"3\" y1=\"0\" x2=\"3\" y2=\"25\" />\n", + " <line x1=\"7\" y1=\"0\" x2=\"7\" y2=\"25\" />\n", + " <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", + " <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", + " <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", + " <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", + " <line x1=\"26\" y1=\"0\" x2=\"26\" y2=\"25\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"29\" y2=\"25\" />\n", + " <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n", + " <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", + " <line x1=\"41\" y1=\"0\" x2=\"41\" y2=\"25\" />\n", + " <line x1=\"44\" y1=\"0\" x2=\"44\" y2=\"25\" />\n", + " <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", + " <line x1=\"52\" y1=\"0\" x2=\"52\" y2=\"25\" />\n", + " <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", + " <line x1=\"59\" y1=\"0\" x2=\"59\" y2=\"25\" />\n", + " <line x1=\"63\" y1=\"0\" x2=\"63\" y2=\"25\" />\n", + " <line x1=\"67\" y1=\"0\" x2=\"67\" y2=\"25\" />\n", + " <line x1=\"71\" y1=\"0\" x2=\"71\" y2=\"25\" />\n", + " <line x1=\"74\" y1=\"0\" x2=\"74\" y2=\"25\" />\n", + " <line x1=\"78\" y1=\"0\" x2=\"78\" y2=\"25\" />\n", + " <line x1=\"82\" y1=\"0\" x2=\"82\" y2=\"25\" />\n", + " <line x1=\"86\" y1=\"0\" x2=\"86\" y2=\"25\" />\n", + " <line x1=\"89\" y1=\"0\" x2=\"89\" y2=\"25\" />\n", + " <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", + " <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"25\" />\n", + " <line x1=\"101\" y1=\"0\" x2=\"101\" y2=\"25\" />\n", + " <line x1=\"104\" y1=\"0\" x2=\"104\" y2=\"25\" />\n", + " <line x1=\"108\" y1=\"0\" x2=\"108\" y2=\"25\" />\n", + " <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", + " <line x1=\"116\" y1=\"0\" x2=\"116\" y2=\"25\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >12784</text>\n", + " <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", + "\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"190\" y1=\"35\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"190\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 204.9485979497544,14.948597949754403 204.9485979497544,50.176723267048196 190.0,35.228125317293795\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"229\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"209\" y1=\"0\" x2=\"224\" y2=\"14\" />\n", + " <line x1=\"229\" y1=\"0\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 229.24565621623074,0.0 244.19425416598514,14.948597949754403 204.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"50\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + " <line x1=\"224\" y1=\"14\" x2=\"224\" y2=\"50\" />\n", + " <line x1=\"244\" y1=\"14\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"204.9485979497544,14.948597949754403 244.19425416598514,14.948597949754403 244.19425416598514,50.176723267048196 204.9485979497544,50.176723267048196\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"224.571426\" y=\"70.176723\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"264.194254\" y=\"32.562661\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,264.194254,32.562661)\">720</text>\n", + " <text x=\"187.474299\" y=\"62.702424\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,187.474299,62.702424)\">17</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>median_type</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-ffac09dc-af23-4733-a74e-04cc0ed685d1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ffac09dc-af23-4733-a74e-04cc0ed685d1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3adf4908-27b0-464c-804a-b8bf4e05d042' class='xr-var-data-in' type='checkbox'><label for='data-3adf4908-27b0-464c-804a-b8bf4e05d042' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Index of analysis which is the ensemble median</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd></dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>standard_deviation</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-3b7d4a9e-9d90-4e5c-9b03-9e015b826178' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3b7d4a9e-9d90-4e5c-9b03-9e015b826178' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ecb106cc-1e2d-46dc-83ad-1b23af392a44' class='xr-var-data-in' type='checkbox'><label for='data-ecb106cc-1e2d-46dc-83ad-1b23af392a44' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Standard deviation of input analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>32000</dd><dt><span>valid_min :</span></dt><dd>-32000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-227305af-67ce-4524-99b1-3f3bcca8aeca' class='xr-section-summary-in' type='checkbox' ><label for='section-227305af-67ce-4524-99b1-3f3bcca8aeca' class='xr-section-summary' >Indexes: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>field_name_length</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-e553e943-1c32-4ec0-8a83-f083843fa503' class='xr-index-data-in' type='checkbox'/><label for='index-e553e943-1c32-4ec0-8a83-f083843fa503' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n", + " 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50],\n", + " dtype='int64', name='field_name_length'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fields</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-67f870d7-b912-4d14-98ee-cacd976799fc' class='xr-index-data-in' type='checkbox'/><label for='index-67f870d7-b912-4d14-98ee-cacd976799fc' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], dtype='int64', name='fields'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fieldsp1</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-40ff84cb-62be-41da-9d1b-0012ae2a09a3' class='xr-index-data-in' type='checkbox'/><label for='index-40ff84cb-62be-41da-9d1b-0012ae2a09a3' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64', name='fieldsp1'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-f7acf826-eff9-438e-86db-8249bee34d4c' class='xr-index-data-in' type='checkbox'/><label for='index-f7acf826-eff9-438e-86db-8249bee34d4c' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([-89.875, -89.625, -89.375, -89.125, -88.875, -88.625, -88.375,\n", + " -88.125, -87.875, -87.625,\n", + " ...\n", + " 87.625, 87.875, 88.125, 88.375, 88.625, 88.875, 89.125,\n", + " 89.375, 89.625, 89.875],\n", + " dtype='float64', name='lat', length=720))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-f42d5850-d83f-4413-8a9f-ddeb3aeee0ea' class='xr-index-data-in' type='checkbox'/><label for='index-f42d5850-d83f-4413-8a9f-ddeb3aeee0ea' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([-179.875, -179.625, -179.375, -179.125, -178.875, -178.625,\n", + " -178.375, -178.125, -177.875, -177.625,\n", + " ...\n", + " 177.625, 177.875, 178.125, 178.375, 178.625, 178.875,\n", + " 179.125, 179.375, 179.625, 179.875],\n", + " dtype='float64', name='lon', length=1440))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-8b9c021d-c8bf-4757-a6d8-c6d05bac0bb8' class='xr-index-data-in' type='checkbox'/><label for='index-8b9c021d-c8bf-4757-a6d8-c6d05bac0bb8' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['1982-01-01 12:00:00', '1982-01-02 12:00:00',\n", + " '1982-01-03 12:00:00', '1982-01-04 12:00:00',\n", + " '1982-01-05 12:00:00', '1982-01-06 12:00:00',\n", + " '1982-01-07 12:00:00', '1982-01-08 12:00:00',\n", + " '1982-01-09 12:00:00', '1982-01-10 12:00:00',\n", + " ...\n", + " '2016-12-22 12:00:00', '2016-12-23 12:00:00',\n", + " '2016-12-24 12:00:00', '2016-12-25 12:00:00',\n", + " '2016-12-26 12:00:00', '2016-12-27 12:00:00',\n", + " '2016-12-28 12:00:00', '2016-12-29 12:00:00',\n", + " '2016-12-30 12:00:00', '2016-12-31 12:00:00'],\n", + " dtype='datetime64[ns]', name='time', length=12784, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-6ba706d4-d4b0-48da-b79f-464b68ceb27e' class='xr-section-summary-in' type='checkbox' ><label for='section-6ba706d4-d4b0-48da-b79f-464b68ceb27e' class='xr-section-summary' >Attributes: <span>(47)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.4</dd><dt><span>acknowledgment :</span></dt><dd>Funded by ESA</dd><dt><span>cdm_data_type :</span></dt><dd>grid</dd><dt><span>comment :</span></dt><dd></dd><dt><span>creator_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>creator_name :</span></dt><dd>SST_cci</dd><dt><span>creator_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>date_created :</span></dt><dd>20180711T172223Z</dd><dt><span>easternmost_longitude :</span></dt><dd>180.0</dd><dt><span>file_quality_level :</span></dt><dd>3</dd><dt><span>gds_version_id :</span></dt><dd>2.0</dd><dt><span>geospatial_lat_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees north</dd><dt><span>geospatial_lon_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees east</dd><dt><span>history :</span></dt><dd>NULL</dd><dt><span>id :</span></dt><dd>UKMO-L4LRens-GLOB-GMPE</dd><dt><span>institution :</span></dt><dd>UKMO</dd><dt><span>keywords :</span></dt><dd>Oceans > Ocean Temperature > Sea Surface Temperature</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>license :</span></dt><dd>Creative Commons Licence by attribution (https://creativecommons.org/licenses/by/4.0/</dd><dt><span>metadata_conventions :</span></dt><dd>Unidata Observation Dataset v1.0</dd><dt><span>metadata_link :</span></dt><dd>not available</dd><dt><span>naming_authority :</span></dt><dd>org.ghrsst</dd><dt><span>netcdf_version_id :</span></dt><dd>3.6</dd><dt><span>northernmost_latitude :</span></dt><dd>90.0</dd><dt><span>platform :</span></dt><dd></dd><dt><span>processing_level :</span></dt><dd>GMPE</dd><dt><span>product_version :</span></dt><dd>3.0</dd><dt><span>project :</span></dt><dd>Climate Change Initiative - European Space Agency</dd><dt><span>publisher_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>publisher_name :</span></dt><dd>ESACCI</dd><dt><span>publisher_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>references :</span></dt><dd>Martin et al., Deep Sea Research II, 2011</dd><dt><span>sensor :</span></dt><dd></dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>southernmost_latitude :</span></dt><dd>-90.0</dd><dt><span>spatial_resolution :</span></dt><dd>0.25 degree</dd><dt><span>standard_name_vocabulary :</span></dt><dd>NetCDF Climate and Forecast (CF) Metadata Convention</dd><dt><span>start_time :</span></dt><dd>20161231T000000Z</dd><dt><span>stop_time :</span></dt><dd>20170101T000000Z</dd><dt><span>summary :</span></dt><dd>An ensemble product with input from a number of L4 SST analyses</dd><dt><span>time_coverage_end :</span></dt><dd>20170101T000000Z</dd><dt><span>time_coverage_start :</span></dt><dd>20161231T000000Z</dd><dt><span>title :</span></dt><dd>Global SST Ensemble, L4 GMPE</dd><dt><span>uuid :</span></dt><dd>dc0c5b25-93bf-4943-aba1-7f0de9109620</dd><dt><span>westernmost_longitude :</span></dt><dd>-180.0</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset>\n", + "Dimensions: (time: 12784, lat: 720, lon: 1440, fields: 16,\n", + " field_name_length: 50, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 -89.88 -89.62 -89.38 ... 89.38 89.62 89.88\n", + " * lon (lon) float32 -179.9 -179.6 -179.4 ... 179.4 179.6 179.9\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " analysis_number (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " anomaly_fields (time, fields, lat, lon) float32 dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray>\n", + " field_name (fields, field_name_length) |S1 dask.array<chunksize=(16, 50), meta=np.ndarray>\n", + " gradient_fields (time, fieldsp1, lat, lon) float32 dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray>\n", + " median_type (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: Global SST Ensemble, L4 GMPE\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = store.open_data('ESACCI-L4_GHRSST-SST-GMPE-GLOB_CDR2.0-1981-2016-v02.0-fv01.0.zarr')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "243f088e-9bd8-4bef-8364-e08864d84554", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", + "Dimensions: (time: 61, lat: 45, lon: 60, field_name_length: 50,\n", + " fields: 16, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 52.62 52.88 53.12 ... 63.12 63.38 63.62\n", + " * lon (lon) float32 10.12 10.38 10.62 ... 24.38 24.62 24.88\n", + " * time (time) datetime64[ns] 2016-05-01T12:00:00 ... 2016-06...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: SST Baltic May/June 2016\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-367a72bf-7f58-41c7-8017-7aef8adda48d' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-367a72bf-7f58-41c7-8017-7aef8adda48d' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 61</li><li><span class='xr-has-index'>lat</span>: 45</li><li><span class='xr-has-index'>lon</span>: 60</li><li><span class='xr-has-index'>field_name_length</span>: 50</li><li><span class='xr-has-index'>fields</span>: 16</li><li><span class='xr-has-index'>fieldsp1</span>: 17</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-39e1ba0b-501a-4228-a3d1-5c9444cf92ac' class='xr-section-summary-in' type='checkbox' checked><label for='section-39e1ba0b-501a-4228-a3d1-5c9444cf92ac' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>field_name_length</span></div><div class='xr-var-dims'>(field_name_length)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 45 46 47 48 49 50</div><input id='attrs-174723ca-47d7-4cac-8e3a-752492a61308' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-174723ca-47d7-4cac-8e3a-752492a61308' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-12535a7f-358a-4c18-a9ff-c2a4a4e82421' class='xr-var-data-in' type='checkbox'><label for='data-12535a7f-358a-4c18-a9ff-c2a4a4e82421' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Length of string array for names of inputs</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,\n", + " 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\n", + " 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fields</span></div><div class='xr-var-dims'>(fields)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 11 12 13 14 15 16</div><input id='attrs-3f5e4d63-9be1-4ac0-96dc-b4655fd11c4a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3f5e4d63-9be1-4ac0-96dc-b4655fd11c4a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4f3d8857-ec4b-4056-b19e-31f0f6e2e050' class='xr-var-data-in' type='checkbox'><label for='data-4f3d8857-ec4b-4056-b19e-31f0f6e2e050' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n", + " dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fieldsp1</span></div><div class='xr-var-dims'>(fieldsp1)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 12 13 14 15 16 17</div><input id='attrs-2fe5eb51-07b7-484a-9869-0009ff8fb366' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-2fe5eb51-07b7-484a-9869-0009ff8fb366' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3feff291-d59f-4709-8322-74017794a801' class='xr-var-data-in' type='checkbox'><label for='data-3feff291-d59f-4709-8322-74017794a801' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number plus one</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],\n", + " dtype=int32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>52.62 52.88 53.12 ... 63.38 63.62</div><input id='attrs-8ffc94e6-4411-4225-be29-ef1795db3ac4' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8ffc94e6-4411-4225-be29-ef1795db3ac4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-420b0d10-3a05-4f58-a7c7-1499fcfef2de' class='xr-var-data-in' type='checkbox'><label for='data-420b0d10-3a05-4f58-a7c7-1499fcfef2de' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>valid_max :</span></dt><dd>90.0</dd><dt><span>valid_min :</span></dt><dd>-90.0</dd></dl></div><div class='xr-var-data'><pre>array([52.625, 52.875, 53.125, 53.375, 53.625, 53.875, 54.125, 54.375, 54.625,\n", + " 54.875, 55.125, 55.375, 55.625, 55.875, 56.125, 56.375, 56.625, 56.875,\n", + " 57.125, 57.375, 57.625, 57.875, 58.125, 58.375, 58.625, 58.875, 59.125,\n", + " 59.375, 59.625, 59.875, 60.125, 60.375, 60.625, 60.875, 61.125, 61.375,\n", + " 61.625, 61.875, 62.125, 62.375, 62.625, 62.875, 63.125, 63.375, 63.625],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>10.12 10.38 10.62 ... 24.62 24.88</div><input id='attrs-41b19977-8ee0-4230-896a-13e2c4ad2ec1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-41b19977-8ee0-4230-896a-13e2c4ad2ec1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2db9ff7b-3f1a-4bb1-81b0-864c120f4328' class='xr-var-data-in' type='checkbox'><label for='data-2db9ff7b-3f1a-4bb1-81b0-864c120f4328' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>X</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>valid_max :</span></dt><dd>180.0</dd><dt><span>valid_min :</span></dt><dd>-180.0</dd></dl></div><div class='xr-var-data'><pre>array([10.125, 10.375, 10.625, 10.875, 11.125, 11.375, 11.625, 11.875, 12.125,\n", + " 12.375, 12.625, 12.875, 13.125, 13.375, 13.625, 13.875, 14.125, 14.375,\n", + " 14.625, 14.875, 15.125, 15.375, 15.625, 15.875, 16.125, 16.375, 16.625,\n", + " 16.875, 17.125, 17.375, 17.625, 17.875, 18.125, 18.375, 18.625, 18.875,\n", + " 19.125, 19.375, 19.625, 19.875, 20.125, 20.375, 20.625, 20.875, 21.125,\n", + " 21.375, 21.625, 21.875, 22.125, 22.375, 22.625, 22.875, 23.125, 23.375,\n", + " 23.625, 23.875, 24.125, 24.375, 24.625, 24.875], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2016-05-01T12:00:00 ... 2016-06-...</div><input id='attrs-8b5af479-0fe4-4991-aef6-4c0f40a8defa' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8b5af479-0fe4-4991-aef6-4c0f40a8defa' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-41533c31-4d1e-43ce-a281-660707dbe08c' class='xr-var-data-in' type='checkbox'><label for='data-41533c31-4d1e-43ce-a281-660707dbe08c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['2016-05-01T12:00:00.000000000', '2016-05-02T12:00:00.000000000',\n", + " '2016-05-03T12:00:00.000000000', '2016-05-04T12:00:00.000000000',\n", + " '2016-05-05T12:00:00.000000000', '2016-05-06T12:00:00.000000000',\n", + " '2016-05-07T12:00:00.000000000', '2016-05-08T12:00:00.000000000',\n", + " '2016-05-09T12:00:00.000000000', '2016-05-10T12:00:00.000000000',\n", + " '2016-05-11T12:00:00.000000000', '2016-05-12T12:00:00.000000000',\n", + " '2016-05-13T12:00:00.000000000', '2016-05-14T12:00:00.000000000',\n", + " '2016-05-15T12:00:00.000000000', '2016-05-16T12:00:00.000000000',\n", + " '2016-05-17T12:00:00.000000000', '2016-05-18T12:00:00.000000000',\n", + " '2016-05-19T12:00:00.000000000', '2016-05-20T12:00:00.000000000',\n", + " '2016-05-21T12:00:00.000000000', '2016-05-22T12:00:00.000000000',\n", + " '2016-05-23T12:00:00.000000000', '2016-05-24T12:00:00.000000000',\n", + " '2016-05-25T12:00:00.000000000', '2016-05-26T12:00:00.000000000',\n", + " '2016-05-27T12:00:00.000000000', '2016-05-28T12:00:00.000000000',\n", + " '2016-05-29T12:00:00.000000000', '2016-05-30T12:00:00.000000000',\n", + " '2016-05-31T12:00:00.000000000', '2016-06-01T12:00:00.000000000',\n", + " '2016-06-02T12:00:00.000000000', '2016-06-03T12:00:00.000000000',\n", + " '2016-06-04T12:00:00.000000000', '2016-06-05T12:00:00.000000000',\n", + " '2016-06-06T12:00:00.000000000', '2016-06-07T12:00:00.000000000',\n", + " '2016-06-08T12:00:00.000000000', '2016-06-09T12:00:00.000000000',\n", + " '2016-06-10T12:00:00.000000000', '2016-06-11T12:00:00.000000000',\n", + " '2016-06-12T12:00:00.000000000', '2016-06-13T12:00:00.000000000',\n", + " '2016-06-14T12:00:00.000000000', '2016-06-15T12:00:00.000000000',\n", + " '2016-06-16T12:00:00.000000000', '2016-06-17T12:00:00.000000000',\n", + " '2016-06-18T12:00:00.000000000', '2016-06-19T12:00:00.000000000',\n", + " '2016-06-20T12:00:00.000000000', '2016-06-21T12:00:00.000000000',\n", + " '2016-06-22T12:00:00.000000000', '2016-06-23T12:00:00.000000000',\n", + " '2016-06-24T12:00:00.000000000', '2016-06-25T12:00:00.000000000',\n", + " '2016-06-26T12:00:00.000000000', '2016-06-27T12:00:00.000000000',\n", + " '2016-06-28T12:00:00.000000000', '2016-06-29T12:00:00.000000000',\n", + " '2016-06-30T12:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-238137f1-741e-47d2-9a9f-3a7f090bb6c5' class='xr-section-summary-in' type='checkbox' checked><label for='section-238137f1-741e-47d2-9a9f-3a7f090bb6c5' class='xr-section-summary' >Data variables: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>analysed_sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(5, 45, 60), meta=np.ndarray></div><input id='attrs-65c70955-0b0b-4eb7-9975-ec2382ba33a7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-65c70955-0b0b-4eb7-9975-ec2382ba33a7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-abf690d7-6e4b-4f21-8f93-fc573f7d5d91' class='xr-var-data-in' type='checkbox'><label for='data-abf690d7-6e4b-4f21-8f93-fc573f7d5d91' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>median SST from GMPE</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>standard_name :</span></dt><dd>sea_surface_foundation_temperature</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>4500</dd><dt><span>valid_min :</span></dt><dd>-300</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 643.36 kiB </td>\n", + " <td> 168.75 kiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (61, 45, 60) </td>\n", + " <td> (16, 45, 60) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 5 chunks in 4 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"248\" height=\"209\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"88\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"88\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"94\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"112\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"131\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"149\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,159.11282545805207 10.0,88.52459016393442\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"128\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"133\" y2=\"5\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"152\" y2=\"24\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"170\" y2=\"42\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"189\" y2=\"61\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"128\" y1=\"0\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 128.0327868852459,0.0 198.62102217936356,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"159\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + " <line x1=\"198\" y1=\"70\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 198.62102217936356,70.58823529411765 198.62102217936356,159.11282545805207 80.58823529411765,159.11282545805207\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"139.604629\" y=\"179.112825\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >60</text>\n", + " <text x=\"218.621022\" y=\"114.850530\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,218.621022,114.850530)\">45</text>\n", + " <text x=\"35.294118\" y=\"143.818708\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,143.818708)\">61</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>standard_deviation</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(5, 45, 60), meta=np.ndarray></div><input id='attrs-817b57e3-0cff-4a26-a787-e663507f770e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-817b57e3-0cff-4a26-a787-e663507f770e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bdf7cba4-4ea0-49ab-bf3c-0ed44e0b451a' class='xr-var-data-in' type='checkbox'><label for='data-bdf7cba4-4ea0-49ab-bf3c-0ed44e0b451a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Standard deviation of input analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>32000</dd><dt><span>valid_min :</span></dt><dd>-32000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 643.36 kiB </td>\n", + " <td> 168.75 kiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (61, 45, 60) </td>\n", + " <td> (16, 45, 60) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 5 chunks in 4 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"248\" height=\"209\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"88\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"88\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"94\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"112\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"131\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"149\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,159.11282545805207 10.0,88.52459016393442\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"128\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"133\" y2=\"5\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"152\" y2=\"24\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"170\" y2=\"42\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"189\" y2=\"61\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"128\" y1=\"0\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 128.0327868852459,0.0 198.62102217936356,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"159\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + " <line x1=\"198\" y1=\"70\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 198.62102217936356,70.58823529411765 198.62102217936356,159.11282545805207 80.58823529411765,159.11282545805207\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"139.604629\" y=\"179.112825\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >60</text>\n", + " <text x=\"218.621022\" y=\"114.850530\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,218.621022,114.850530)\">45</text>\n", + " <text x=\"35.294118\" y=\"143.818708\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,143.818708)\">61</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-46633afb-395d-4f7d-b049-0a5917ea3a3f' class='xr-section-summary-in' type='checkbox' ><label for='section-46633afb-395d-4f7d-b049-0a5917ea3a3f' class='xr-section-summary' >Indexes: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>field_name_length</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-fed0e6bf-34cb-4776-a4a6-7becff8d8292' class='xr-index-data-in' type='checkbox'/><label for='index-fed0e6bf-34cb-4776-a4a6-7becff8d8292' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n", + " 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50],\n", + " dtype='int64', name='field_name_length'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fields</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-692ed4af-385f-4fa2-a6da-d0a1d7e8070a' class='xr-index-data-in' type='checkbox'/><label for='index-692ed4af-385f-4fa2-a6da-d0a1d7e8070a' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], dtype='int64', name='fields'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fieldsp1</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-023fe7df-dad4-4d72-83c6-9622e8787735' class='xr-index-data-in' type='checkbox'/><label for='index-023fe7df-dad4-4d72-83c6-9622e8787735' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64', name='fieldsp1'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-14022e9b-3e2e-48fc-8015-963a41b09a3d' class='xr-index-data-in' type='checkbox'/><label for='index-14022e9b-3e2e-48fc-8015-963a41b09a3d' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([52.625, 52.875, 53.125, 53.375, 53.625, 53.875, 54.125, 54.375,\n", + " 54.625, 54.875, 55.125, 55.375, 55.625, 55.875, 56.125, 56.375,\n", + " 56.625, 56.875, 57.125, 57.375, 57.625, 57.875, 58.125, 58.375,\n", + " 58.625, 58.875, 59.125, 59.375, 59.625, 59.875, 60.125, 60.375,\n", + " 60.625, 60.875, 61.125, 61.375, 61.625, 61.875, 62.125, 62.375,\n", + " 62.625, 62.875, 63.125, 63.375, 63.625],\n", + " dtype='float64', name='lat'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-39bd5508-89c2-4f0e-80de-f91e66815bce' class='xr-index-data-in' type='checkbox'/><label for='index-39bd5508-89c2-4f0e-80de-f91e66815bce' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([10.125, 10.375, 10.625, 10.875, 11.125, 11.375, 11.625, 11.875,\n", + " 12.125, 12.375, 12.625, 12.875, 13.125, 13.375, 13.625, 13.875,\n", + " 14.125, 14.375, 14.625, 14.875, 15.125, 15.375, 15.625, 15.875,\n", + " 16.125, 16.375, 16.625, 16.875, 17.125, 17.375, 17.625, 17.875,\n", + " 18.125, 18.375, 18.625, 18.875, 19.125, 19.375, 19.625, 19.875,\n", + " 20.125, 20.375, 20.625, 20.875, 21.125, 21.375, 21.625, 21.875,\n", + " 22.125, 22.375, 22.625, 22.875, 23.125, 23.375, 23.625, 23.875,\n", + " 24.125, 24.375, 24.625, 24.875],\n", + " dtype='float64', name='lon'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-28c272b3-4f1c-4466-ba08-d0cee3d7e902' class='xr-index-data-in' type='checkbox'/><label for='index-28c272b3-4f1c-4466-ba08-d0cee3d7e902' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['2016-05-01 12:00:00', '2016-05-02 12:00:00',\n", + " '2016-05-03 12:00:00', '2016-05-04 12:00:00',\n", + " '2016-05-05 12:00:00', '2016-05-06 12:00:00',\n", + " '2016-05-07 12:00:00', '2016-05-08 12:00:00',\n", + " '2016-05-09 12:00:00', '2016-05-10 12:00:00',\n", + " '2016-05-11 12:00:00', '2016-05-12 12:00:00',\n", + " '2016-05-13 12:00:00', '2016-05-14 12:00:00',\n", + " '2016-05-15 12:00:00', '2016-05-16 12:00:00',\n", + " '2016-05-17 12:00:00', '2016-05-18 12:00:00',\n", + " '2016-05-19 12:00:00', '2016-05-20 12:00:00',\n", + " '2016-05-21 12:00:00', '2016-05-22 12:00:00',\n", + " '2016-05-23 12:00:00', '2016-05-24 12:00:00',\n", + " '2016-05-25 12:00:00', '2016-05-26 12:00:00',\n", + " '2016-05-27 12:00:00', '2016-05-28 12:00:00',\n", + " '2016-05-29 12:00:00', '2016-05-30 12:00:00',\n", + " '2016-05-31 12:00:00', '2016-06-01 12:00:00',\n", + " '2016-06-02 12:00:00', '2016-06-03 12:00:00',\n", + " '2016-06-04 12:00:00', '2016-06-05 12:00:00',\n", + " '2016-06-06 12:00:00', '2016-06-07 12:00:00',\n", + " '2016-06-08 12:00:00', '2016-06-09 12:00:00',\n", + " '2016-06-10 12:00:00', '2016-06-11 12:00:00',\n", + " '2016-06-12 12:00:00', '2016-06-13 12:00:00',\n", + " '2016-06-14 12:00:00', '2016-06-15 12:00:00',\n", + " '2016-06-16 12:00:00', '2016-06-17 12:00:00',\n", + " '2016-06-18 12:00:00', '2016-06-19 12:00:00',\n", + " '2016-06-20 12:00:00', '2016-06-21 12:00:00',\n", + " '2016-06-22 12:00:00', '2016-06-23 12:00:00',\n", + " '2016-06-24 12:00:00', '2016-06-25 12:00:00',\n", + " '2016-06-26 12:00:00', '2016-06-27 12:00:00',\n", + " '2016-06-28 12:00:00', '2016-06-29 12:00:00',\n", + " '2016-06-30 12:00:00'],\n", + " dtype='datetime64[ns]', name='time', freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-88bddfe7-65f1-4e03-a63d-b1b40d39c6fd' class='xr-section-summary-in' type='checkbox' ><label for='section-88bddfe7-65f1-4e03-a63d-b1b40d39c6fd' class='xr-section-summary' >Attributes: <span>(47)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.4</dd><dt><span>acknowledgment :</span></dt><dd>Funded by ESA</dd><dt><span>cdm_data_type :</span></dt><dd>grid</dd><dt><span>comment :</span></dt><dd></dd><dt><span>creator_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>creator_name :</span></dt><dd>SST_cci</dd><dt><span>creator_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>date_created :</span></dt><dd>20180711T172223Z</dd><dt><span>easternmost_longitude :</span></dt><dd>180.0</dd><dt><span>file_quality_level :</span></dt><dd>3</dd><dt><span>gds_version_id :</span></dt><dd>2.0</dd><dt><span>geospatial_lat_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees north</dd><dt><span>geospatial_lon_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees east</dd><dt><span>history :</span></dt><dd>NULL</dd><dt><span>id :</span></dt><dd>UKMO-L4LRens-GLOB-GMPE</dd><dt><span>institution :</span></dt><dd>UKMO</dd><dt><span>keywords :</span></dt><dd>Oceans > Ocean Temperature > Sea Surface Temperature</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>license :</span></dt><dd>Creative Commons Licence by attribution (https://creativecommons.org/licenses/by/4.0/</dd><dt><span>metadata_conventions :</span></dt><dd>Unidata Observation Dataset v1.0</dd><dt><span>metadata_link :</span></dt><dd>not available</dd><dt><span>naming_authority :</span></dt><dd>org.ghrsst</dd><dt><span>netcdf_version_id :</span></dt><dd>3.6</dd><dt><span>northernmost_latitude :</span></dt><dd>90.0</dd><dt><span>platform :</span></dt><dd></dd><dt><span>processing_level :</span></dt><dd>GMPE</dd><dt><span>product_version :</span></dt><dd>3.0</dd><dt><span>project :</span></dt><dd>Climate Change Initiative - European Space Agency</dd><dt><span>publisher_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>publisher_name :</span></dt><dd>ESACCI</dd><dt><span>publisher_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>references :</span></dt><dd>Martin et al., Deep Sea Research II, 2011</dd><dt><span>sensor :</span></dt><dd></dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>southernmost_latitude :</span></dt><dd>-90.0</dd><dt><span>spatial_resolution :</span></dt><dd>0.25 degree</dd><dt><span>standard_name_vocabulary :</span></dt><dd>NetCDF Climate and Forecast (CF) Metadata Convention</dd><dt><span>start_time :</span></dt><dd>20161231T000000Z</dd><dt><span>stop_time :</span></dt><dd>20170101T000000Z</dd><dt><span>summary :</span></dt><dd>An ensemble product with input from a number of L4 SST analyses</dd><dt><span>time_coverage_end :</span></dt><dd>20170101T000000Z</dd><dt><span>time_coverage_start :</span></dt><dd>20161231T000000Z</dd><dt><span>title :</span></dt><dd>SST Baltic May/June 2016</dd><dt><span>uuid :</span></dt><dd>dc0c5b25-93bf-4943-aba1-7f0de9109620</dd><dt><span>westernmost_longitude :</span></dt><dd>-180.0</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset>\n", + "Dimensions: (time: 61, lat: 45, lon: 60, field_name_length: 50,\n", + " fields: 16, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 52.62 52.88 53.12 ... 63.12 63.38 63.62\n", + " * lon (lon) float32 10.12 10.38 10.62 ... 24.38 24.62 24.88\n", + " * time (time) datetime64[ns] 2016-05-01T12:00:00 ... 2016-06...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: SST Baltic May/June 2016\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset_baltic = select_subset(\n", + " dataset,\n", + " bbox=[10, 52.5, 25, 63.8],\n", + " time_range=['2016-05-01', '2016-06-30'],\n", + " var_names=['analysed_sst', 'standard_deviation']\n", + ")\n", + "dataset_baltic.attrs[\"title\"] = \"SST Baltic May/June 2016\"\n", + "dataset_baltic" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d4c9a0e6-dbf2-43d9-bdab-d594d2986a19", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x7feb0c20ffd0>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "dataset_baltic.analysed_sst.isel(time=10).plot.imshow(vmin=270, vmax=290, cmap=\"inferno\")" + ] + }, + { + "cell_type": "markdown", + "id": "23ae6096-e7f0-4105-8a15-6aa90738dd52", + "metadata": {}, + "source": [ + "Save the subset in the workspace." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "041d65b5-156d-4e30-829b-6d9f05a9fded", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<xarray.backends.zarr.ZarrStore at 0x7feb0c801660>" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset_baltic.to_zarr(\"baltic-sst.zarr\", mode=\"w\", safe_chunks=False)" + ] + }, + { + "cell_type": "markdown", + "id": "ce6f5057-2e0c-4a76-bfd8-815bcc072882", + "metadata": { + "tags": [] + }, + "source": [ + "---\n", + "**Scenario 1**: Open **Cate App** for a dataset instances persisted in this Notebooks's workspace or from other sources (saved datasets)." + ] + }, + { + "cell_type": "markdown", + "id": "2f42c84b-0c09-474c-8a2d-236b831d8bb1", + "metadata": {}, + "source": [ + "Now, open the JupyterLab Launcher, and select **Cate App**. You should see the dataset titled \"SST Baltic May/June 2016\" in the *Local Data Store*. \n", + "\n", + "Due to a tiny issue in the Cate App as Jupyter widget, the layers won't appear on the globe. However, Cate App can also be opened as a browser tab. In this the layers are rendered. To open Cate App in a browser, click [here](https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/9090/app/)." + ] + }, + { + "cell_type": "markdown", + "id": "8c705bbb-4fbb-4078-88c9-45d5605d9005", + "metadata": {}, + "source": [ + "---\n", + "**Scenario 2**: Open **Cate App** for a dataset instances opened or otherwise created in this Notebook (in-memory datasets).\n", + "This is done by the example of **xcube Viewer**.\n", + "\n", + "We create the viewer with a configuration that defines the color mapping style `SST`." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "0958f695-4332-486a-b546-04c0938c1fd3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "viewer = Viewer(server_config={\n", + " \"Styles\": [\n", + " {\n", + " \"Identifier\": \"SST\",\n", + " \"ColorMappings\": {\n", + " \"analysed_sst\": {\n", + " \"ValueRange\": [270, 300],\n", + " \"ColorBar\": \"inferno\"\n", + " }\n", + " }\n", + " }\n", + " ]\n", + "})" + ] + }, + { + "cell_type": "markdown", + "id": "d98ed2dd-db96-4252-90bf-3a5979210a53", + "metadata": {}, + "source": [ + "Then we add our datasets using the style `SST`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "73136638-861e-491b-b079-de584a9c867b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'e1055e31-6ea0-44aa-91b3-43fce9b378c1'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viewer.add_dataset(dataset, style=\"SST\")\n", + "viewer.add_dataset(dataset_baltic, style=\"SST\")" + ] + }, + { + "cell_type": "markdown", + "id": "cb5252fa-8748-439f-ba1d-6c5cb7671d48", + "metadata": {}, + "source": [ + "You can click on the viewer link to open xcube Viewer in a new browser tab:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "903fce9a-5cd5-4452-873d-e4fa56b38367", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Server: https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/8000\n", + "Viewer: https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/8000/viewer/?serverUrl=https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/8000\n" + ] + } + ], + "source": [ + "viewer.info()" + ] + }, + { + "cell_type": "markdown", + "id": "45907b06-e3bd-49af-915d-a4cce82b14e3", + "metadata": {}, + "source": [ + "You can also open xcube Viewer inlined here:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c03a6912-9879-4b7e-a2c9-25c141a548fb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<iframe src=\"https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/8000/viewer/?serverUrl=https://bc.jupyter.dev.brockmann-consult.de/user/forman/proxy/8000&compact=1\" width=\"100%\" height=\"800\"/>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "404 GET /viewer/config/config.json (127.0.0.1): xcube viewer has not been been configured\n", + "404 GET /viewer/config/config.json (127.0.0.1) 4.48ms\n" + ] + } + ], + "source": [ + "viewer.show()" + ] + }, + { + "cell_type": "markdown", + "id": "9ec537d6-aec3-41fb-aa21-30e2edd95f12", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/xcube-viewer.ipynb b/notebooks/xcube-viewer.ipynb new file mode 100644 index 000000000..d700648e1 --- /dev/null +++ b/notebooks/xcube-viewer.ipynb @@ -0,0 +1,2647 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f4ef66d8-7be2-4a04-a341-1da91717ba92", + "metadata": {}, + "source": [ + "# xcube Jupyter Lab Integration\n", + "\n", + "This Notebook demonstrates how to use the features of the xcube JupyterLab integration.\n", + "The Notebook demonstrates two scenarios how xcube Viewer is utilized in JupyterLab.\n", + "In particular, we open xcube Viewer for any `xarray.Dataset` instances \n", + "\n", + "1. opened or otherwise created in this Notebook (in-memory datasets);\n", + "2. persisted in this Notebooks's workspace or from other sources (saved datasets).\n", + "\n", + "For this to work, the following requirements must be satisfied:\n", + "\n", + "* xcube version must be >= 0.13\n", + "* JupyterLab version must be 3.4.x\n", + "* The xcube JupyterLab extension [xcube-jl-ext](https://github.com/dcs4cop/xcube-jl-ext) \n", + " must be installed and enabled.\n", + "\n", + "If you run JupyterLab remotely, e.g., with JupyterHub, then also\n", + "\n", + "* the [jupyter-proxy](https://jupyter-server-proxy.readthedocs.io/en/latest/#) \n", + " server extension must be installed and enabled.\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "539dd106-ffb9-4ed7-99c4-7241a9798547", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import xarray as xr\n", + "\n", + "from xcube.webapi.viewer import Viewer\n", + "from xcube.core.store import new_data_store\n", + "from xcube.core.select import select_subset" + ] + }, + { + "cell_type": "markdown", + "id": "028285fc-7b3f-478f-98fe-17a2f8ed05ce", + "metadata": {}, + "source": [ + "We create some datasets so we have something to show. We use the xcube datastore framework here to open the dataset, but it could also be opened by other means, e.g., `xr.open_dataset()`, provided it has variables with dimensions [\"time\", \"y\", \"x\"] or [\"y\", \"x\"]. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "71a28392-d820-46df-9041-2f78d33113e7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\projects\\xcube\\xcube\\util\\plugin.py:186: UserWarning: Initializing xcube plugin 'xcube' took 294 ms, consider code optimization. (For example, avoid eager import of packages, consider lazy loading of resources, etc.)\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/plain": [ + "['ESACCI-BIOMASS-L4-AGB-MERGED-100m-2010-2018-fv2.0.zarr',\n", + " 'ESACCI-GHG-L2-CH4-SCIAMACHY-WFMD-2002-2011-fv1.zarr',\n", + " 'ESACCI-GHG-L2-CO2-SCIAMACHY-WFMD-2002-2012-fv1.zarr',\n", + " 'ESACCI-ICESHEETS_Antarctica_GMB-2002-2016-v1.1.zarr',\n", + " 'ESACCI-ICESHEETS_Greenland_GMB-2003-2016-v1.1.zarr',\n", + " 'ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_NOAA-1982-2016-fv3.0.zarr',\n", + " 'ESACCI-L3C_SNOW-SWE-1979-2018-fv1.0.zarr',\n", + " 'ESACCI-L4_GHRSST-SST-GMPE-GLOB_CDR2.0-1981-2016-v02.0-fv01.0.zarr',\n", + " 'ESACCI-LAKES-L3S-LK_PRODUCTS-MERGED-1992-09-fv2.0.1.zarr',\n", + " 'ESACCI-LC-L4-LCCS-Map-300m-P1Y-1992-2015-v2.0.7b.zarr',\n", + " 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1DAILY_DAY-2002-2018-fv3.00.zarr',\n", + " 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1DAILY_NIGHT-2002-2018-fv3.00.zarr',\n", + " 'ESACCI-OC-L3S-IOP-MERGED-1M_MONTHLY_4km_GEO_PML_OCx_QAA-1997-2020-fv5.0.zarr',\n", + " 'ESACCI-PERMAFROST-L4-ALT-MODISLST-AREA4_PP-1997-2018-fv02.0.zarr',\n", + " 'ESACCI-SEAICE-L3C-SITHICK-RA2_ENVISAT-NH25KMEASE2-2002-2012-fv2.0.zarr',\n", + " 'ESACCI-SEAICE-L3C-SITHICK-SIRAL_CRYOSAT2-NH25KMEASE2-2010-2017-fv2.0.zarr',\n", + " 'ESACCI-SEAICE-L4-SICONC-AMSR_50.0kmEASE2-NH-2002-2017-fv2.1.zarr',\n", + " 'ESACCI-SEALEVEL-IND-MSLTR-MERGED-1993-2016-fv02.zarr',\n", + " 'ESACCI-SEALEVEL-L4-MSLA-MERGED-1993-2015-fv02.zarr',\n", + " 'ESACCI-SOILMOISTURE-L3S-SSMV-COMBINED-1978-2020-fv05.3.zarr']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "store = new_data_store(\"ccizarr\")\n", + "store.list_data_ids()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "24b7759f-44b2-4638-91f1-8d218c8fc527", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", + "Dimensions: (time: 12784, lat: 720, lon: 1440, fields: 16,\n", + " field_name_length: 50, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 -89.88 -89.62 -89.38 ... 89.38 89.62 89.88\n", + " * lon (lon) float32 -179.9 -179.6 -179.4 ... 179.4 179.6 179.9\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " analysis_number (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " anomaly_fields (time, fields, lat, lon) float32 dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray>\n", + " field_name (fields, field_name_length) |S1 dask.array<chunksize=(16, 50), meta=np.ndarray>\n", + " gradient_fields (time, fieldsp1, lat, lon) float32 dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray>\n", + " median_type (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: Global SST Ensemble, L4 GMPE\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-8fd14352-a295-4522-9ca1-0c82fe60dcef' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-8fd14352-a295-4522-9ca1-0c82fe60dcef' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 12784</li><li><span class='xr-has-index'>lat</span>: 720</li><li><span class='xr-has-index'>lon</span>: 1440</li><li><span class='xr-has-index'>fields</span>: 16</li><li><span class='xr-has-index'>field_name_length</span>: 50</li><li><span class='xr-has-index'>fieldsp1</span>: 17</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-c04eb3c3-ed2d-458a-bb69-098c12517f92' class='xr-section-summary-in' type='checkbox' checked><label for='section-c04eb3c3-ed2d-458a-bb69-098c12517f92' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>field_name_length</span></div><div class='xr-var-dims'>(field_name_length)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 45 46 47 48 49 50</div><input id='attrs-3f9882ba-5edb-465b-8df3-33757cc05c53' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3f9882ba-5edb-465b-8df3-33757cc05c53' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-84096e3d-d105-424e-b6f6-80db13ed2d76' class='xr-var-data-in' type='checkbox'><label for='data-84096e3d-d105-424e-b6f6-80db13ed2d76' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Length of string array for names of inputs</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,\n", + " 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\n", + " 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fields</span></div><div class='xr-var-dims'>(fields)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 11 12 13 14 15 16</div><input id='attrs-98850c33-6958-471c-b961-e14f25c34ee8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-98850c33-6958-471c-b961-e14f25c34ee8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c94f6350-2319-42b0-9490-6974d142a903' class='xr-var-data-in' type='checkbox'><label for='data-c94f6350-2319-42b0-9490-6974d142a903' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fieldsp1</span></div><div class='xr-var-dims'>(fieldsp1)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 12 13 14 15 16 17</div><input id='attrs-543a1909-ab40-4d1a-b530-d64720bbc8f9' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-543a1909-ab40-4d1a-b530-d64720bbc8f9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8027cae1-72fd-47dd-b527-4ccbb537a7cf' class='xr-var-data-in' type='checkbox'><label for='data-8027cae1-72fd-47dd-b527-4ccbb537a7cf' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number plus one</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-89.88 -89.62 ... 89.62 89.88</div><input id='attrs-44053555-2231-4414-9d3c-7a20d93bbf6a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-44053555-2231-4414-9d3c-7a20d93bbf6a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-cd32d290-d981-4a4b-a950-cba67642731e' class='xr-var-data-in' type='checkbox'><label for='data-cd32d290-d981-4a4b-a950-cba67642731e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>valid_max :</span></dt><dd>90.0</dd><dt><span>valid_min :</span></dt><dd>-90.0</dd></dl></div><div class='xr-var-data'><pre>array([-89.875, -89.625, -89.375, ..., 89.375, 89.625, 89.875],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-179.9 -179.6 ... 179.6 179.9</div><input id='attrs-35bf0c91-0150-47e4-ae7d-6d402a2b7b9f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-35bf0c91-0150-47e4-ae7d-6d402a2b7b9f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-675f72c9-7f06-4d64-b803-7c85d68624d9' class='xr-var-data-in' type='checkbox'><label for='data-675f72c9-7f06-4d64-b803-7c85d68624d9' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>X</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>valid_max :</span></dt><dd>180.0</dd><dt><span>valid_min :</span></dt><dd>-180.0</dd></dl></div><div class='xr-var-data'><pre>array([-179.875, -179.625, -179.375, ..., 179.375, 179.625, 179.875],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1982-01-01T12:00:00 ... 2016-12-...</div><input id='attrs-fe49aa7f-7859-4b85-aa3e-120aa9480c60' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-fe49aa7f-7859-4b85-aa3e-120aa9480c60' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-20f9cf4f-12fb-4632-81ed-3ab1e3f2420a' class='xr-var-data-in' type='checkbox'><label for='data-20f9cf4f-12fb-4632-81ed-3ab1e3f2420a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-7f510dc0-3bc2-4351-b30b-cae8f294e15c' class='xr-section-summary-in' type='checkbox' checked><label for='section-7f510dc0-3bc2-4351-b30b-cae8f294e15c' class='xr-section-summary' >Data variables: <span>(7)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>analysed_sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-d4e2124b-7951-4bb8-bcb4-97a4154ebee8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d4e2124b-7951-4bb8-bcb4-97a4154ebee8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-026b3e25-36e8-4a6b-b7e0-e89e781540a1' class='xr-var-data-in' type='checkbox'><label for='data-026b3e25-36e8-4a6b-b7e0-e89e781540a1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>median SST from GMPE</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>standard_name :</span></dt><dd>sea_surface_foundation_temperature</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>4500</dd><dt><span>valid_min :</span></dt><dd>-300</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>analysis_number</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-d54a2d4e-99d6-460d-bf7f-6262a5a7b76f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d54a2d4e-99d6-460d-bf7f-6262a5a7b76f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a226491c-3c69-419f-81da-675799a3e4c3' class='xr-var-data-in' type='checkbox'><label for='data-a226491c-3c69-419f-81da-675799a3e4c3' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Number of contributing analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd></dd><dt><span>valid_max :</span></dt><dd>127</dd><dt><span>valid_min :</span></dt><dd>-127</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>anomaly_fields</span></div><div class='xr-var-dims'>(time, fields, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray></div><input id='attrs-de0d6872-38f9-42c0-b8f7-c34e95c86892' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-de0d6872-38f9-42c0-b8f7-c34e95c86892' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bdf2c67c-d417-4e4f-9593-2b89e71d68c1' class='xr-var-data-in' type='checkbox'><label for='data-bdf2c67c-d417-4e4f-9593-2b89e71d68c1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Anomaly of input analyses from the ensemble median</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 790.03 GiB </td>\n", + " <td> 506.25 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 16, 720, 1440) </td>\n", + " <td> (16, 16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"484\" height=\"100\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", + " <line x1=\"3\" y1=\"0\" x2=\"3\" y2=\"25\" />\n", + " <line x1=\"7\" y1=\"0\" x2=\"7\" y2=\"25\" />\n", + " <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", + " <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", + " <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", + " <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", + " <line x1=\"26\" y1=\"0\" x2=\"26\" y2=\"25\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"29\" y2=\"25\" />\n", + " <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n", + " <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", + " <line x1=\"41\" y1=\"0\" x2=\"41\" y2=\"25\" />\n", + " <line x1=\"44\" y1=\"0\" x2=\"44\" y2=\"25\" />\n", + " <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", + " <line x1=\"52\" y1=\"0\" x2=\"52\" y2=\"25\" />\n", + " <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", + " <line x1=\"59\" y1=\"0\" x2=\"59\" y2=\"25\" />\n", + " <line x1=\"63\" y1=\"0\" x2=\"63\" y2=\"25\" />\n", + " <line x1=\"67\" y1=\"0\" x2=\"67\" y2=\"25\" />\n", + " <line x1=\"71\" y1=\"0\" x2=\"71\" y2=\"25\" />\n", + " <line x1=\"74\" y1=\"0\" x2=\"74\" y2=\"25\" />\n", + " <line x1=\"78\" y1=\"0\" x2=\"78\" y2=\"25\" />\n", + " <line x1=\"82\" y1=\"0\" x2=\"82\" y2=\"25\" />\n", + " <line x1=\"86\" y1=\"0\" x2=\"86\" y2=\"25\" />\n", + " <line x1=\"89\" y1=\"0\" x2=\"89\" y2=\"25\" />\n", + " <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", + " <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"25\" />\n", + " <line x1=\"101\" y1=\"0\" x2=\"101\" y2=\"25\" />\n", + " <line x1=\"104\" y1=\"0\" x2=\"104\" y2=\"25\" />\n", + " <line x1=\"108\" y1=\"0\" x2=\"108\" y2=\"25\" />\n", + " <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", + " <line x1=\"116\" y1=\"0\" x2=\"116\" y2=\"25\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >12784</text>\n", + " <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", + "\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"190\" y1=\"35\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"190\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 204.9485979497544,14.948597949754403 204.9485979497544,50.176723267048196 190.0,35.228125317293795\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"229\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"209\" y1=\"0\" x2=\"224\" y2=\"14\" />\n", + " <line x1=\"229\" y1=\"0\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 229.24565621623074,0.0 244.19425416598514,14.948597949754403 204.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"50\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + " <line x1=\"224\" y1=\"14\" x2=\"224\" y2=\"50\" />\n", + " <line x1=\"244\" y1=\"14\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"204.9485979497544,14.948597949754403 244.19425416598514,14.948597949754403 244.19425416598514,50.176723267048196 204.9485979497544,50.176723267048196\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"224.571426\" y=\"70.176723\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"264.194254\" y=\"32.562661\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,264.194254,32.562661)\">720</text>\n", + " <text x=\"187.474299\" y=\"62.702424\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,187.474299,62.702424)\">16</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>field_name</span></div><div class='xr-var-dims'>(fields, field_name_length)</div><div class='xr-var-dtype'>|S1</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 50), meta=np.ndarray></div><input id='attrs-aa755e90-ac74-4fe1-bed9-c70c7f98e01f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-aa755e90-ac74-4fe1-bed9-c70c7f98e01f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c0dbcc22-7855-49c1-a257-b1a169782429' class='xr-var-data-in' type='checkbox'><label for='data-c0dbcc22-7855-49c1-a257-b1a169782429' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>name of the contributing L4 analyses</dd><dt><span>units :</span></dt><dd></dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 800 B </td>\n", + " <td> 800 B </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (16, 50) </td>\n", + " <td> (16, 50) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> |S1 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"170\" height=\"93\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"43\" x2=\"120\" y2=\"43\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"43\" style=\"stroke-width:2\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"43\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,43.75646913247805 0.0,43.75646913247805\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"63.756469\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >50</text>\n", + " <text x=\"140.000000\" y=\"21.878235\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,21.878235)\">16</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>gradient_fields</span></div><div class='xr-var-dims'>(time, fieldsp1, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray></div><input id='attrs-b5c644cf-1bf1-4469-9cea-d8b4c72527c2' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b5c644cf-1bf1-4469-9cea-d8b4c72527c2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-29cac7c4-f903-4147-af13-8a72afe7a082' class='xr-var-data-in' type='checkbox'><label for='data-29cac7c4-f903-4147-af13-8a72afe7a082' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Horizontal SST gradients of input analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST, GMPE median</dd><dt><span>units :</span></dt><dd>kelvin m-1</dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 839.40 GiB </td>\n", + " <td> 537.89 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 17, 720, 1440) </td>\n", + " <td> (16, 17, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"484\" height=\"100\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", + " <line x1=\"3\" y1=\"0\" x2=\"3\" y2=\"25\" />\n", + " <line x1=\"7\" y1=\"0\" x2=\"7\" y2=\"25\" />\n", + " <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", + " <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", + " <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", + " <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", + " <line x1=\"26\" y1=\"0\" x2=\"26\" y2=\"25\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"29\" y2=\"25\" />\n", + " <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n", + " <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", + " <line x1=\"41\" y1=\"0\" x2=\"41\" y2=\"25\" />\n", + " <line x1=\"44\" y1=\"0\" x2=\"44\" y2=\"25\" />\n", + " <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", + " <line x1=\"52\" y1=\"0\" x2=\"52\" y2=\"25\" />\n", + " <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", + " <line x1=\"59\" y1=\"0\" x2=\"59\" y2=\"25\" />\n", + " <line x1=\"63\" y1=\"0\" x2=\"63\" y2=\"25\" />\n", + " <line x1=\"67\" y1=\"0\" x2=\"67\" y2=\"25\" />\n", + " <line x1=\"71\" y1=\"0\" x2=\"71\" y2=\"25\" />\n", + " <line x1=\"74\" y1=\"0\" x2=\"74\" y2=\"25\" />\n", + " <line x1=\"78\" y1=\"0\" x2=\"78\" y2=\"25\" />\n", + " <line x1=\"82\" y1=\"0\" x2=\"82\" y2=\"25\" />\n", + " <line x1=\"86\" y1=\"0\" x2=\"86\" y2=\"25\" />\n", + " <line x1=\"89\" y1=\"0\" x2=\"89\" y2=\"25\" />\n", + " <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", + " <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"25\" />\n", + " <line x1=\"101\" y1=\"0\" x2=\"101\" y2=\"25\" />\n", + " <line x1=\"104\" y1=\"0\" x2=\"104\" y2=\"25\" />\n", + " <line x1=\"108\" y1=\"0\" x2=\"108\" y2=\"25\" />\n", + " <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", + " <line x1=\"116\" y1=\"0\" x2=\"116\" y2=\"25\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >12784</text>\n", + " <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", + "\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"190\" y1=\"35\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"190\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 204.9485979497544,14.948597949754403 204.9485979497544,50.176723267048196 190.0,35.228125317293795\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"229\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"204\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"209\" y1=\"0\" x2=\"224\" y2=\"14\" />\n", + " <line x1=\"229\" y1=\"0\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.0,0.0 229.24565621623074,0.0 244.19425416598514,14.948597949754403 204.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"244\" y2=\"14\" style=\"stroke-width:2\" />\n", + " <line x1=\"204\" y1=\"50\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"204\" y1=\"14\" x2=\"204\" y2=\"50\" style=\"stroke-width:2\" />\n", + " <line x1=\"224\" y1=\"14\" x2=\"224\" y2=\"50\" />\n", + " <line x1=\"244\" y1=\"14\" x2=\"244\" y2=\"50\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"204.9485979497544,14.948597949754403 244.19425416598514,14.948597949754403 244.19425416598514,50.176723267048196 204.9485979497544,50.176723267048196\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"224.571426\" y=\"70.176723\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"264.194254\" y=\"32.562661\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,264.194254,32.562661)\">720</text>\n", + " <text x=\"187.474299\" y=\"62.702424\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,187.474299,62.702424)\">17</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>median_type</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-e710d257-8cc9-43c6-85ea-a1671fda55c8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e710d257-8cc9-43c6-85ea-a1671fda55c8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d9c15639-d7b5-4d1a-9092-d24ed35f40ab' class='xr-var-data-in' type='checkbox'><label for='data-d9c15639-d7b5-4d1a-9092-d24ed35f40ab' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Index of analysis which is the ensemble median</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd></dd><dt><span>valid_max :</span></dt><dd>3000</dd><dt><span>valid_min :</span></dt><dd>-3000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>standard_deviation</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(16, 720, 720), meta=np.ndarray></div><input id='attrs-c8a98160-7b24-45ba-9ef0-1f417cbdc28d' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-c8a98160-7b24-45ba-9ef0-1f417cbdc28d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2ee980ae-5a2c-4419-a487-521260d8ff19' class='xr-var-data-in' type='checkbox'><label for='data-2ee980ae-5a2c-4419-a487-521260d8ff19' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>comment :</span></dt><dd></dd><dt><span>long_name :</span></dt><dd>Standard deviation of input analyses</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>32000</dd><dt><span>valid_min :</span></dt><dd>-32000</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 49.38 GiB </td>\n", + " <td> 31.64 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (12784, 720, 1440) </td>\n", + " <td> (16, 720, 720) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1598 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"169\" height=\"155\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"35\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"35\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"38\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"42\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"46\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"50\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"53\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"57\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"61\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"64\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"68\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"72\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"76\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"79\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"83\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"87\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"90\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"94\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"98\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"102\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,105.81636061141145 10.0,35.228125317293795\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"49\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"52\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"56\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"60\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"64\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"67\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"71\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"75\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"78\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"82\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"86\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"90\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"93\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"97\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"101\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"104\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"108\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"112\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"116\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"29\" y1=\"0\" x2=\"100\" y2=\"70\" />\n", + " <line x1=\"49\" y1=\"0\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 49.24565621623075,0.0 119.8338915103484,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"119\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"105\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"105\" style=\"stroke-width:2\" />\n", + " <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"105\" />\n", + " <line x1=\"119\" y1=\"70\" x2=\"119\" y2=\"105\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 119.8338915103484,70.58823529411765 119.8338915103484,105.81636061141145 80.58823529411765,105.81636061141145\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"100.211063\" y=\"125.816361\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1440</text>\n", + " <text x=\"139.833892\" y=\"88.202298\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.833892,88.202298)\">720</text>\n", + " <text x=\"35.294118\" y=\"90.522243\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,90.522243)\">12784</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-07f2ecb4-6de4-4bde-8af3-c47bff86aaac' class='xr-section-summary-in' type='checkbox' ><label for='section-07f2ecb4-6de4-4bde-8af3-c47bff86aaac' class='xr-section-summary' >Indexes: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>field_name_length</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-1d619d78-7ef4-40ac-8f6d-1b2a80503fe2' class='xr-index-data-in' type='checkbox'/><label for='index-1d619d78-7ef4-40ac-8f6d-1b2a80503fe2' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n", + " 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50],\n", + " dtype='int64', name='field_name_length'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fields</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-b63f0978-f19f-4102-83f4-76ebc5d3600e' class='xr-index-data-in' type='checkbox'/><label for='index-b63f0978-f19f-4102-83f4-76ebc5d3600e' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], dtype='int64', name='fields'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fieldsp1</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-4cf95d7a-b66b-4388-ad59-b5d8043bc797' class='xr-index-data-in' type='checkbox'/><label for='index-4cf95d7a-b66b-4388-ad59-b5d8043bc797' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64', name='fieldsp1'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-e4862a44-453f-484d-acbf-f9897ce2130d' class='xr-index-data-in' type='checkbox'/><label for='index-e4862a44-453f-484d-acbf-f9897ce2130d' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([-89.875, -89.625, -89.375, -89.125, -88.875, -88.625, -88.375,\n", + " -88.125, -87.875, -87.625,\n", + " ...\n", + " 87.625, 87.875, 88.125, 88.375, 88.625, 88.875, 89.125,\n", + " 89.375, 89.625, 89.875],\n", + " dtype='float64', name='lat', length=720))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-e2b35dd0-d7ee-418a-b29a-52d2c43f7965' class='xr-index-data-in' type='checkbox'/><label for='index-e2b35dd0-d7ee-418a-b29a-52d2c43f7965' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([-179.875, -179.625, -179.375, -179.125, -178.875, -178.625,\n", + " -178.375, -178.125, -177.875, -177.625,\n", + " ...\n", + " 177.625, 177.875, 178.125, 178.375, 178.625, 178.875,\n", + " 179.125, 179.375, 179.625, 179.875],\n", + " dtype='float64', name='lon', length=1440))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-70c72557-3516-4d70-9c7c-e77c6feca56f' class='xr-index-data-in' type='checkbox'/><label for='index-70c72557-3516-4d70-9c7c-e77c6feca56f' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['1982-01-01 12:00:00', '1982-01-02 12:00:00',\n", + " '1982-01-03 12:00:00', '1982-01-04 12:00:00',\n", + " '1982-01-05 12:00:00', '1982-01-06 12:00:00',\n", + " '1982-01-07 12:00:00', '1982-01-08 12:00:00',\n", + " '1982-01-09 12:00:00', '1982-01-10 12:00:00',\n", + " ...\n", + " '2016-12-22 12:00:00', '2016-12-23 12:00:00',\n", + " '2016-12-24 12:00:00', '2016-12-25 12:00:00',\n", + " '2016-12-26 12:00:00', '2016-12-27 12:00:00',\n", + " '2016-12-28 12:00:00', '2016-12-29 12:00:00',\n", + " '2016-12-30 12:00:00', '2016-12-31 12:00:00'],\n", + " dtype='datetime64[ns]', name='time', length=12784, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-bada5f02-4db2-4286-93c1-baaa0683fcfc' class='xr-section-summary-in' type='checkbox' ><label for='section-bada5f02-4db2-4286-93c1-baaa0683fcfc' class='xr-section-summary' >Attributes: <span>(47)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.4</dd><dt><span>acknowledgment :</span></dt><dd>Funded by ESA</dd><dt><span>cdm_data_type :</span></dt><dd>grid</dd><dt><span>comment :</span></dt><dd></dd><dt><span>creator_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>creator_name :</span></dt><dd>SST_cci</dd><dt><span>creator_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>date_created :</span></dt><dd>20180711T172223Z</dd><dt><span>easternmost_longitude :</span></dt><dd>180.0</dd><dt><span>file_quality_level :</span></dt><dd>3</dd><dt><span>gds_version_id :</span></dt><dd>2.0</dd><dt><span>geospatial_lat_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees north</dd><dt><span>geospatial_lon_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees east</dd><dt><span>history :</span></dt><dd>NULL</dd><dt><span>id :</span></dt><dd>UKMO-L4LRens-GLOB-GMPE</dd><dt><span>institution :</span></dt><dd>UKMO</dd><dt><span>keywords :</span></dt><dd>Oceans > Ocean Temperature > Sea Surface Temperature</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>license :</span></dt><dd>Creative Commons Licence by attribution (https://creativecommons.org/licenses/by/4.0/</dd><dt><span>metadata_conventions :</span></dt><dd>Unidata Observation Dataset v1.0</dd><dt><span>metadata_link :</span></dt><dd>not available</dd><dt><span>naming_authority :</span></dt><dd>org.ghrsst</dd><dt><span>netcdf_version_id :</span></dt><dd>3.6</dd><dt><span>northernmost_latitude :</span></dt><dd>90.0</dd><dt><span>platform :</span></dt><dd></dd><dt><span>processing_level :</span></dt><dd>GMPE</dd><dt><span>product_version :</span></dt><dd>3.0</dd><dt><span>project :</span></dt><dd>Climate Change Initiative - European Space Agency</dd><dt><span>publisher_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>publisher_name :</span></dt><dd>ESACCI</dd><dt><span>publisher_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>references :</span></dt><dd>Martin et al., Deep Sea Research II, 2011</dd><dt><span>sensor :</span></dt><dd></dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>southernmost_latitude :</span></dt><dd>-90.0</dd><dt><span>spatial_resolution :</span></dt><dd>0.25 degree</dd><dt><span>standard_name_vocabulary :</span></dt><dd>NetCDF Climate and Forecast (CF) Metadata Convention</dd><dt><span>start_time :</span></dt><dd>20161231T000000Z</dd><dt><span>stop_time :</span></dt><dd>20170101T000000Z</dd><dt><span>summary :</span></dt><dd>An ensemble product with input from a number of L4 SST analyses</dd><dt><span>time_coverage_end :</span></dt><dd>20170101T000000Z</dd><dt><span>time_coverage_start :</span></dt><dd>20161231T000000Z</dd><dt><span>title :</span></dt><dd>Global SST Ensemble, L4 GMPE</dd><dt><span>uuid :</span></dt><dd>dc0c5b25-93bf-4943-aba1-7f0de9109620</dd><dt><span>westernmost_longitude :</span></dt><dd>-180.0</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset>\n", + "Dimensions: (time: 12784, lat: 720, lon: 1440, fields: 16,\n", + " field_name_length: 50, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 -89.88 -89.62 -89.38 ... 89.38 89.62 89.88\n", + " * lon (lon) float32 -179.9 -179.6 -179.4 ... 179.4 179.6 179.9\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " analysis_number (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " anomaly_fields (time, fields, lat, lon) float32 dask.array<chunksize=(16, 16, 720, 720), meta=np.ndarray>\n", + " field_name (fields, field_name_length) |S1 dask.array<chunksize=(16, 50), meta=np.ndarray>\n", + " gradient_fields (time, fieldsp1, lat, lon) float32 dask.array<chunksize=(16, 17, 720, 720), meta=np.ndarray>\n", + " median_type (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + " standard_deviation (time, lat, lon) float32 dask.array<chunksize=(16, 720, 720), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: Global SST Ensemble, L4 GMPE\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = store.open_data('ESACCI-L4_GHRSST-SST-GMPE-GLOB_CDR2.0-1981-2016-v02.0-fv01.0.zarr')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6a2698fd-3a0f-45b7-9847-473d62d9db8c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'time' (time: 12784)>\n", + "array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12-31T12:00:00\n", + "Attributes:\n", + " axis: T\n", + " long_name: reference time of sst field\n", + " standard_name: time</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'time'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 12784</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-550fa740-4b18-4694-b7e3-9912f2c0b969' class='xr-array-in' type='checkbox' checked><label for='section-550fa740-4b18-4694-b7e3-9912f2c0b969' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>1982-01-01T12:00:00 1982-01-02T12:00:00 ... 2016-12-31T12:00:00</span></div><div class='xr-array-data'><pre>array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')</pre></div></div></li><li class='xr-section-item'><input id='section-76578562-ccd9-4bcf-8271-2595804f1aaf' class='xr-section-summary-in' type='checkbox' checked><label for='section-76578562-ccd9-4bcf-8271-2595804f1aaf' class='xr-section-summary' >Coordinates: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1982-01-01T12:00:00 ... 2016-12-...</div><input id='attrs-17ec6c24-9607-4ddb-a802-f197b34c55e8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-17ec6c24-9607-4ddb-a802-f197b34c55e8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a68cea22-f386-4ea5-9f6d-f4583a6bf8ea' class='xr-var-data-in' type='checkbox'><label for='data-a68cea22-f386-4ea5-9f6d-f4583a6bf8ea' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-973376c1-3d3d-4020-8c26-f3d46d9218b6' class='xr-section-summary-in' type='checkbox' ><label for='section-973376c1-3d3d-4020-8c26-f3d46d9218b6' class='xr-section-summary' >Indexes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-8bda3fb1-421f-4d49-9c6e-50145ad911a6' class='xr-index-data-in' type='checkbox'/><label for='index-8bda3fb1-421f-4d49-9c6e-50145ad911a6' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['1982-01-01 12:00:00', '1982-01-02 12:00:00',\n", + " '1982-01-03 12:00:00', '1982-01-04 12:00:00',\n", + " '1982-01-05 12:00:00', '1982-01-06 12:00:00',\n", + " '1982-01-07 12:00:00', '1982-01-08 12:00:00',\n", + " '1982-01-09 12:00:00', '1982-01-10 12:00:00',\n", + " ...\n", + " '2016-12-22 12:00:00', '2016-12-23 12:00:00',\n", + " '2016-12-24 12:00:00', '2016-12-25 12:00:00',\n", + " '2016-12-26 12:00:00', '2016-12-27 12:00:00',\n", + " '2016-12-28 12:00:00', '2016-12-29 12:00:00',\n", + " '2016-12-30 12:00:00', '2016-12-31 12:00:00'],\n", + " dtype='datetime64[ns]', name='time', length=12784, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8a5d4050-9f25-473d-a61f-0fe9daa4d7a4' class='xr-section-summary-in' type='checkbox' checked><label for='section-8a5d4050-9f25-473d-a61f-0fe9daa4d7a4' class='xr-section-summary' >Attributes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.DataArray 'time' (time: 12784)>\n", + "array(['1982-01-01T12:00:00.000000000', '1982-01-02T12:00:00.000000000',\n", + " '1982-01-03T12:00:00.000000000', ..., '2016-12-29T12:00:00.000000000',\n", + " '2016-12-30T12:00:00.000000000', '2016-12-31T12:00:00.000000000'],\n", + " dtype='datetime64[ns]')\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 1982-01-01T12:00:00 ... 2016-12-31T12:00:00\n", + "Attributes:\n", + " axis: T\n", + " long_name: reference time of sst field\n", + " standard_name: time" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset.time" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "243f088e-9bd8-4bef-8364-e08864d84554", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", + "Dimensions: (time: 61, lat: 45, lon: 60, field_name_length: 50,\n", + " fields: 16, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 52.62 52.88 53.12 ... 63.12 63.38 63.62\n", + " * lon (lon) float32 10.12 10.38 10.62 ... 24.38 24.62 24.88\n", + " * time (time) datetime64[ns] 2016-05-01T12:00:00 ... 2016-06-...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: SST Baltic May/June 2016\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-79000690-4f57-4a74-868b-94e58cb2e982' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-79000690-4f57-4a74-868b-94e58cb2e982' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 61</li><li><span class='xr-has-index'>lat</span>: 45</li><li><span class='xr-has-index'>lon</span>: 60</li><li><span class='xr-has-index'>field_name_length</span>: 50</li><li><span class='xr-has-index'>fields</span>: 16</li><li><span class='xr-has-index'>fieldsp1</span>: 17</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-f58ae3b5-7f2d-40c7-823b-981b4ffd9a05' class='xr-section-summary-in' type='checkbox' checked><label for='section-f58ae3b5-7f2d-40c7-823b-981b4ffd9a05' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>field_name_length</span></div><div class='xr-var-dims'>(field_name_length)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 45 46 47 48 49 50</div><input id='attrs-81d0a114-e45e-4712-89fe-eaba152f58a7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-81d0a114-e45e-4712-89fe-eaba152f58a7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6db2aac5-9291-4a75-9e18-db9fc780436b' class='xr-var-data-in' type='checkbox'><label for='data-6db2aac5-9291-4a75-9e18-db9fc780436b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Length of string array for names of inputs</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,\n", + " 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\n", + " 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fields</span></div><div class='xr-var-dims'>(fields)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 11 12 13 14 15 16</div><input id='attrs-658b3e84-277f-46d8-a5ff-abe9da9fd5cd' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-658b3e84-277f-46d8-a5ff-abe9da9fd5cd' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9115903b-a83b-41dc-a299-74808a89f1a1' class='xr-var-data-in' type='checkbox'><label for='data-9115903b-a83b-41dc-a299-74808a89f1a1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>fieldsp1</span></div><div class='xr-var-dims'>(fieldsp1)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>1 2 3 4 5 6 7 ... 12 13 14 15 16 17</div><input id='attrs-95d3b784-6f0f-4915-bb90-5539f82047f8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-95d3b784-6f0f-4915-bb90-5539f82047f8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2cf7057c-8af6-4ecd-afb1-235a8eca6a34' class='xr-var-data-in' type='checkbox'><label for='data-2cf7057c-8af6-4ecd-afb1-235a8eca6a34' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Fields number plus one</dd></dl></div><div class='xr-var-data'><pre>array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>52.62 52.88 53.12 ... 63.38 63.62</div><input id='attrs-1432bcab-f01e-4e18-b961-548311c6c63b' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1432bcab-f01e-4e18-b961-548311c6c63b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a4cd5fec-e982-4dc7-8d7b-37103102e55a' class='xr-var-data-in' type='checkbox'><label for='data-a4cd5fec-e982-4dc7-8d7b-37103102e55a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>valid_max :</span></dt><dd>90.0</dd><dt><span>valid_min :</span></dt><dd>-90.0</dd></dl></div><div class='xr-var-data'><pre>array([52.625, 52.875, 53.125, 53.375, 53.625, 53.875, 54.125, 54.375, 54.625,\n", + " 54.875, 55.125, 55.375, 55.625, 55.875, 56.125, 56.375, 56.625, 56.875,\n", + " 57.125, 57.375, 57.625, 57.875, 58.125, 58.375, 58.625, 58.875, 59.125,\n", + " 59.375, 59.625, 59.875, 60.125, 60.375, 60.625, 60.875, 61.125, 61.375,\n", + " 61.625, 61.875, 62.125, 62.375, 62.625, 62.875, 63.125, 63.375, 63.625],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>10.12 10.38 10.62 ... 24.62 24.88</div><input id='attrs-6f0f2987-3ce1-4962-84e8-5f91083b793f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-6f0f2987-3ce1-4962-84e8-5f91083b793f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e9d253ab-dc13-493f-acbf-bbf12929f0ef' class='xr-var-data-in' type='checkbox'><label for='data-e9d253ab-dc13-493f-acbf-bbf12929f0ef' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>X</dd><dt><span>reference_datum :</span></dt><dd>geographical coordinates, WGS84 projection</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>valid_max :</span></dt><dd>180.0</dd><dt><span>valid_min :</span></dt><dd>-180.0</dd></dl></div><div class='xr-var-data'><pre>array([10.125, 10.375, 10.625, 10.875, 11.125, 11.375, 11.625, 11.875, 12.125,\n", + " 12.375, 12.625, 12.875, 13.125, 13.375, 13.625, 13.875, 14.125, 14.375,\n", + " 14.625, 14.875, 15.125, 15.375, 15.625, 15.875, 16.125, 16.375, 16.625,\n", + " 16.875, 17.125, 17.375, 17.625, 17.875, 18.125, 18.375, 18.625, 18.875,\n", + " 19.125, 19.375, 19.625, 19.875, 20.125, 20.375, 20.625, 20.875, 21.125,\n", + " 21.375, 21.625, 21.875, 22.125, 22.375, 22.625, 22.875, 23.125, 23.375,\n", + " 23.625, 23.875, 24.125, 24.375, 24.625, 24.875], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2016-05-01T12:00:00 ... 2016-06-...</div><input id='attrs-7d5a0f62-1365-4de0-ba34-3de1bf969093' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7d5a0f62-1365-4de0-ba34-3de1bf969093' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5bf884db-4f9d-46aa-8b7c-54de379a388c' class='xr-var-data-in' type='checkbox'><label for='data-5bf884db-4f9d-46aa-8b7c-54de379a388c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>long_name :</span></dt><dd>reference time of sst field</dd><dt><span>standard_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['2016-05-01T12:00:00.000000000', '2016-05-02T12:00:00.000000000',\n", + " '2016-05-03T12:00:00.000000000', '2016-05-04T12:00:00.000000000',\n", + " '2016-05-05T12:00:00.000000000', '2016-05-06T12:00:00.000000000',\n", + " '2016-05-07T12:00:00.000000000', '2016-05-08T12:00:00.000000000',\n", + " '2016-05-09T12:00:00.000000000', '2016-05-10T12:00:00.000000000',\n", + " '2016-05-11T12:00:00.000000000', '2016-05-12T12:00:00.000000000',\n", + " '2016-05-13T12:00:00.000000000', '2016-05-14T12:00:00.000000000',\n", + " '2016-05-15T12:00:00.000000000', '2016-05-16T12:00:00.000000000',\n", + " '2016-05-17T12:00:00.000000000', '2016-05-18T12:00:00.000000000',\n", + " '2016-05-19T12:00:00.000000000', '2016-05-20T12:00:00.000000000',\n", + " '2016-05-21T12:00:00.000000000', '2016-05-22T12:00:00.000000000',\n", + " '2016-05-23T12:00:00.000000000', '2016-05-24T12:00:00.000000000',\n", + " '2016-05-25T12:00:00.000000000', '2016-05-26T12:00:00.000000000',\n", + " '2016-05-27T12:00:00.000000000', '2016-05-28T12:00:00.000000000',\n", + " '2016-05-29T12:00:00.000000000', '2016-05-30T12:00:00.000000000',\n", + " '2016-05-31T12:00:00.000000000', '2016-06-01T12:00:00.000000000',\n", + " '2016-06-02T12:00:00.000000000', '2016-06-03T12:00:00.000000000',\n", + " '2016-06-04T12:00:00.000000000', '2016-06-05T12:00:00.000000000',\n", + " '2016-06-06T12:00:00.000000000', '2016-06-07T12:00:00.000000000',\n", + " '2016-06-08T12:00:00.000000000', '2016-06-09T12:00:00.000000000',\n", + " '2016-06-10T12:00:00.000000000', '2016-06-11T12:00:00.000000000',\n", + " '2016-06-12T12:00:00.000000000', '2016-06-13T12:00:00.000000000',\n", + " '2016-06-14T12:00:00.000000000', '2016-06-15T12:00:00.000000000',\n", + " '2016-06-16T12:00:00.000000000', '2016-06-17T12:00:00.000000000',\n", + " '2016-06-18T12:00:00.000000000', '2016-06-19T12:00:00.000000000',\n", + " '2016-06-20T12:00:00.000000000', '2016-06-21T12:00:00.000000000',\n", + " '2016-06-22T12:00:00.000000000', '2016-06-23T12:00:00.000000000',\n", + " '2016-06-24T12:00:00.000000000', '2016-06-25T12:00:00.000000000',\n", + " '2016-06-26T12:00:00.000000000', '2016-06-27T12:00:00.000000000',\n", + " '2016-06-28T12:00:00.000000000', '2016-06-29T12:00:00.000000000',\n", + " '2016-06-30T12:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-c1a7d7ea-bf07-46db-92c8-11f0798c828f' class='xr-section-summary-in' type='checkbox' checked><label for='section-c1a7d7ea-bf07-46db-92c8-11f0798c828f' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>analysed_sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(5, 45, 60), meta=np.ndarray></div><input id='attrs-4d076092-efe7-4c8d-a123-cbf13e8a7b46' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4d076092-efe7-4c8d-a123-cbf13e8a7b46' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0f6237ae-f40f-44c1-b3c3-b15b0fd2f4d9' class='xr-var-data-in' type='checkbox'><label for='data-0f6237ae-f40f-44c1-b3c3-b15b0fd2f4d9' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>median SST from GMPE</dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>standard_name :</span></dt><dd>sea_surface_foundation_temperature</dd><dt><span>units :</span></dt><dd>kelvin</dd><dt><span>valid_max :</span></dt><dd>4500</dd><dt><span>valid_min :</span></dt><dd>-300</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 643.36 kiB </td>\n", + " <td> 168.75 kiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (61, 45, 60) </td>\n", + " <td> (16, 45, 60) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 5 chunks in 4 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"248\" height=\"209\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"88\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"88\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"94\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"112\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"131\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"149\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,159.11282545805207 10.0,88.52459016393442\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"128\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"15\" y1=\"5\" x2=\"133\" y2=\"5\" />\n", + " <line x1=\"34\" y1=\"24\" x2=\"152\" y2=\"24\" />\n", + " <line x1=\"52\" y1=\"42\" x2=\"170\" y2=\"42\" />\n", + " <line x1=\"71\" y1=\"61\" x2=\"189\" y2=\"61\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"128\" y1=\"0\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 128.0327868852459,0.0 198.62102217936356,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"198\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"159\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"159\" style=\"stroke-width:2\" />\n", + " <line x1=\"198\" y1=\"70\" x2=\"198\" y2=\"159\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 198.62102217936356,70.58823529411765 198.62102217936356,159.11282545805207 80.58823529411765,159.11282545805207\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"139.604629\" y=\"179.112825\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >60</text>\n", + " <text x=\"218.621022\" y=\"114.850530\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,218.621022,114.850530)\">45</text>\n", + " <text x=\"35.294118\" y=\"143.818708\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,143.818708)\">61</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-c9581d78-d781-4bb9-b65e-30e84ec363f2' class='xr-section-summary-in' type='checkbox' ><label for='section-c9581d78-d781-4bb9-b65e-30e84ec363f2' class='xr-section-summary' >Indexes: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>field_name_length</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-c0035e4a-00f6-471e-b6dd-8ef6348c6f2e' class='xr-index-data-in' type='checkbox'/><label for='index-c0035e4a-00f6-471e-b6dd-8ef6348c6f2e' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,\n", + " 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50],\n", + " dtype='int64', name='field_name_length'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fields</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-3f3d7411-1f61-4dde-9e18-47d73c6055b7' class='xr-index-data-in' type='checkbox'/><label for='index-3f3d7411-1f61-4dde-9e18-47d73c6055b7' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], dtype='int64', name='fields'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>fieldsp1</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-46149c37-9583-408e-ab4d-1b150a4b97d7' class='xr-index-data-in' type='checkbox'/><label for='index-46149c37-9583-408e-ab4d-1b150a4b97d7' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64', name='fieldsp1'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-68c5c81a-13e0-4e2c-9388-c7ffaa876645' class='xr-index-data-in' type='checkbox'/><label for='index-68c5c81a-13e0-4e2c-9388-c7ffaa876645' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([52.625, 52.875, 53.125, 53.375, 53.625, 53.875, 54.125, 54.375,\n", + " 54.625, 54.875, 55.125, 55.375, 55.625, 55.875, 56.125, 56.375,\n", + " 56.625, 56.875, 57.125, 57.375, 57.625, 57.875, 58.125, 58.375,\n", + " 58.625, 58.875, 59.125, 59.375, 59.625, 59.875, 60.125, 60.375,\n", + " 60.625, 60.875, 61.125, 61.375, 61.625, 61.875, 62.125, 62.375,\n", + " 62.625, 62.875, 63.125, 63.375, 63.625],\n", + " dtype='float64', name='lat'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-a480734c-2415-48d8-83e1-9a6eb9f35c4f' class='xr-index-data-in' type='checkbox'/><label for='index-a480734c-2415-48d8-83e1-9a6eb9f35c4f' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([10.125, 10.375, 10.625, 10.875, 11.125, 11.375, 11.625, 11.875,\n", + " 12.125, 12.375, 12.625, 12.875, 13.125, 13.375, 13.625, 13.875,\n", + " 14.125, 14.375, 14.625, 14.875, 15.125, 15.375, 15.625, 15.875,\n", + " 16.125, 16.375, 16.625, 16.875, 17.125, 17.375, 17.625, 17.875,\n", + " 18.125, 18.375, 18.625, 18.875, 19.125, 19.375, 19.625, 19.875,\n", + " 20.125, 20.375, 20.625, 20.875, 21.125, 21.375, 21.625, 21.875,\n", + " 22.125, 22.375, 22.625, 22.875, 23.125, 23.375, 23.625, 23.875,\n", + " 24.125, 24.375, 24.625, 24.875],\n", + " dtype='float64', name='lon'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-bc8a5bde-8277-47c7-bb46-c5772d257888' class='xr-index-data-in' type='checkbox'/><label for='index-bc8a5bde-8277-47c7-bb46-c5772d257888' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['2016-05-01 12:00:00', '2016-05-02 12:00:00',\n", + " '2016-05-03 12:00:00', '2016-05-04 12:00:00',\n", + " '2016-05-05 12:00:00', '2016-05-06 12:00:00',\n", + " '2016-05-07 12:00:00', '2016-05-08 12:00:00',\n", + " '2016-05-09 12:00:00', '2016-05-10 12:00:00',\n", + " '2016-05-11 12:00:00', '2016-05-12 12:00:00',\n", + " '2016-05-13 12:00:00', '2016-05-14 12:00:00',\n", + " '2016-05-15 12:00:00', '2016-05-16 12:00:00',\n", + " '2016-05-17 12:00:00', '2016-05-18 12:00:00',\n", + " '2016-05-19 12:00:00', '2016-05-20 12:00:00',\n", + " '2016-05-21 12:00:00', '2016-05-22 12:00:00',\n", + " '2016-05-23 12:00:00', '2016-05-24 12:00:00',\n", + " '2016-05-25 12:00:00', '2016-05-26 12:00:00',\n", + " '2016-05-27 12:00:00', '2016-05-28 12:00:00',\n", + " '2016-05-29 12:00:00', '2016-05-30 12:00:00',\n", + " '2016-05-31 12:00:00', '2016-06-01 12:00:00',\n", + " '2016-06-02 12:00:00', '2016-06-03 12:00:00',\n", + " '2016-06-04 12:00:00', '2016-06-05 12:00:00',\n", + " '2016-06-06 12:00:00', '2016-06-07 12:00:00',\n", + " '2016-06-08 12:00:00', '2016-06-09 12:00:00',\n", + " '2016-06-10 12:00:00', '2016-06-11 12:00:00',\n", + " '2016-06-12 12:00:00', '2016-06-13 12:00:00',\n", + " '2016-06-14 12:00:00', '2016-06-15 12:00:00',\n", + " '2016-06-16 12:00:00', '2016-06-17 12:00:00',\n", + " '2016-06-18 12:00:00', '2016-06-19 12:00:00',\n", + " '2016-06-20 12:00:00', '2016-06-21 12:00:00',\n", + " '2016-06-22 12:00:00', '2016-06-23 12:00:00',\n", + " '2016-06-24 12:00:00', '2016-06-25 12:00:00',\n", + " '2016-06-26 12:00:00', '2016-06-27 12:00:00',\n", + " '2016-06-28 12:00:00', '2016-06-29 12:00:00',\n", + " '2016-06-30 12:00:00'],\n", + " dtype='datetime64[ns]', name='time', freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8700afe0-a745-4fb2-98b3-1680c1d8900f' class='xr-section-summary-in' type='checkbox' ><label for='section-8700afe0-a745-4fb2-98b3-1680c1d8900f' class='xr-section-summary' >Attributes: <span>(47)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.4</dd><dt><span>acknowledgment :</span></dt><dd>Funded by ESA</dd><dt><span>cdm_data_type :</span></dt><dd>grid</dd><dt><span>comment :</span></dt><dd></dd><dt><span>creator_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>creator_name :</span></dt><dd>SST_cci</dd><dt><span>creator_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>date_created :</span></dt><dd>20180711T172223Z</dd><dt><span>easternmost_longitude :</span></dt><dd>180.0</dd><dt><span>file_quality_level :</span></dt><dd>3</dd><dt><span>gds_version_id :</span></dt><dd>2.0</dd><dt><span>geospatial_lat_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees north</dd><dt><span>geospatial_lon_resolution :</span></dt><dd>0.25 degree</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees east</dd><dt><span>history :</span></dt><dd>NULL</dd><dt><span>id :</span></dt><dd>UKMO-L4LRens-GLOB-GMPE</dd><dt><span>institution :</span></dt><dd>UKMO</dd><dt><span>keywords :</span></dt><dd>Oceans > Ocean Temperature > Sea Surface Temperature</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>license :</span></dt><dd>Creative Commons Licence by attribution (https://creativecommons.org/licenses/by/4.0/</dd><dt><span>metadata_conventions :</span></dt><dd>Unidata Observation Dataset v1.0</dd><dt><span>metadata_link :</span></dt><dd>not available</dd><dt><span>naming_authority :</span></dt><dd>org.ghrsst</dd><dt><span>netcdf_version_id :</span></dt><dd>3.6</dd><dt><span>northernmost_latitude :</span></dt><dd>90.0</dd><dt><span>platform :</span></dt><dd></dd><dt><span>processing_level :</span></dt><dd>GMPE</dd><dt><span>product_version :</span></dt><dd>3.0</dd><dt><span>project :</span></dt><dd>Climate Change Initiative - European Space Agency</dd><dt><span>publisher_email :</span></dt><dd>science.leader@esa-sst-cci.org</dd><dt><span>publisher_name :</span></dt><dd>ESACCI</dd><dt><span>publisher_url :</span></dt><dd>http://www.esa-sst-cci.org</dd><dt><span>references :</span></dt><dd>Martin et al., Deep Sea Research II, 2011</dd><dt><span>sensor :</span></dt><dd></dd><dt><span>source :</span></dt><dd>SST CCI V2, SST CCI V1.1, MyOcean, AVHRR_OI, CMC, HadISST.2.2.0.0_r0, HadISST.2.2.0.0_r1, HadISST.2.2.0.0_r2, HadISST.2.2.0.0_r3, HadISST.2.2.0.0_r4, HadISST.2.2.0.0_r5, HadISST.2.2.0.0_r6, HadISST.2.2.0.0_r7, HadISST.2.2.0.0_r8, HadISST.2.2.0.0_r9, MGDSST</dd><dt><span>southernmost_latitude :</span></dt><dd>-90.0</dd><dt><span>spatial_resolution :</span></dt><dd>0.25 degree</dd><dt><span>standard_name_vocabulary :</span></dt><dd>NetCDF Climate and Forecast (CF) Metadata Convention</dd><dt><span>start_time :</span></dt><dd>20161231T000000Z</dd><dt><span>stop_time :</span></dt><dd>20170101T000000Z</dd><dt><span>summary :</span></dt><dd>An ensemble product with input from a number of L4 SST analyses</dd><dt><span>time_coverage_end :</span></dt><dd>20170101T000000Z</dd><dt><span>time_coverage_start :</span></dt><dd>20161231T000000Z</dd><dt><span>title :</span></dt><dd>SST Baltic May/June 2016</dd><dt><span>uuid :</span></dt><dd>dc0c5b25-93bf-4943-aba1-7f0de9109620</dd><dt><span>westernmost_longitude :</span></dt><dd>-180.0</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset>\n", + "Dimensions: (time: 61, lat: 45, lon: 60, field_name_length: 50,\n", + " fields: 16, fieldsp1: 17)\n", + "Coordinates:\n", + " * field_name_length (field_name_length) int32 1 2 3 4 5 6 ... 46 47 48 49 50\n", + " * fields (fields) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * fieldsp1 (fieldsp1) int32 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17\n", + " * lat (lat) float32 52.62 52.88 53.12 ... 63.12 63.38 63.62\n", + " * lon (lon) float32 10.12 10.38 10.62 ... 24.38 24.62 24.88\n", + " * time (time) datetime64[ns] 2016-05-01T12:00:00 ... 2016-06-...\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array<chunksize=(5, 45, 60), meta=np.ndarray>\n", + "Attributes: (12/47)\n", + " Conventions: CF-1.4\n", + " acknowledgment: Funded by ESA\n", + " cdm_data_type: grid\n", + " comment: \n", + " creator_email: science.leader@esa-sst-cci.org\n", + " creator_name: SST_cci\n", + " ... ...\n", + " summary: An ensemble product with input from a number ...\n", + " time_coverage_end: 20170101T000000Z\n", + " time_coverage_start: 20161231T000000Z\n", + " title: SST Baltic May/June 2016\n", + " uuid: dc0c5b25-93bf-4943-aba1-7f0de9109620\n", + " westernmost_longitude: -180.0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset_baltic = select_subset(\n", + " dataset,\n", + " bbox=[10, 52.5, 25, 63.8],\n", + " time_range=['2016-05-01', '2016-06-30'],\n", + " var_names=['analysed_sst']\n", + ")\n", + "dataset_baltic.attrs[\"title\"] = \"SST Baltic May/June 2016\"\n", + "dataset_baltic" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d4c9a0e6-dbf2-43d9-bdab-d594d2986a19", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.image.AxesImage at 0x21eed88fd60>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 640x480 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dataset_baltic.analysed_sst.isel(time=0).plot.imshow(vmin=270, vmax=300, cmap=\"inferno\")" + ] + }, + { + "cell_type": "markdown", + "id": "8c705bbb-4fbb-4078-88c9-45d5605d9005", + "metadata": {}, + "source": [ + "---\n", + "**Scenario 1**: Open xcube Viewer for a dataset instances opened or otherwise created in this Notebook (in-memory datasets)." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0958f695-4332-486a-b546-04c0938c1fd3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "viewer = Viewer(server_config={\n", + " \"Styles\": [\n", + " {\n", + " \"Identifier\": \"SST\",\n", + " \"ColorMappings\": {\n", + " \"analysed_sst\": {\n", + " \"ValueRange\": [270, 300],\n", + " \"ColorBar\": \"inferno\"\n", + " }\n", + " }\n", + " }\n", + " ]\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "73136638-861e-491b-b079-de584a9c867b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'3abf2b30-c6aa-4ed9-a47b-b9f6b43674bc'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viewer.add_dataset(dataset, style=\"SST\")\n", + "viewer.add_dataset(dataset_baltic, style=\"SST\")" + ] + }, + { + "cell_type": "markdown", + "id": "cb5252fa-8748-439f-ba1d-6c5cb7671d48", + "metadata": {}, + "source": [ + "You can click on the viewer link to open xcube Viewer in a new browser tab:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "903fce9a-5cd5-4452-873d-e4fa56b38367", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Server: http://localhost:8888/proxy/8000\n", + "Viewer: http://localhost:8888/proxy/8000/viewer/?serverUrl=http://localhost:8888/proxy/8000\n" + ] + } + ], + "source": [ + "viewer.info()" + ] + }, + { + "cell_type": "markdown", + "id": "45907b06-e3bd-49af-915d-a4cce82b14e3", + "metadata": {}, + "source": [ + "You can also open xcube Viewer inlined here:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c03a6912-9879-4b7e-a2c9-25c141a548fb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<iframe src=\"http://localhost:8888/proxy/8000/viewer/?serverUrl=http://localhost:8888/proxy/8000&compact=1\" width=\"100%\" height=\"800\"/>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "580 GET /viewer/config/config.json (127.0.0.1): Missing entry 'Path' in 'Configuration' item of 'Viewer'\n", + "580 GET /viewer/config/config.json (127.0.0.1) 71.97ms\n" + ] + } + ], + "source": [ + "viewer.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4a665ce9-f537-49a5-927b-58045ecddec8", + "metadata": {}, + "source": [ + "---\n", + "**Scenario 2**: Open xcube Viewer for a dataset instances persisted in this Notebooks's workspace or from other sources (saved datasets)." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "508394d2-3a08-4da0-a73d-8056143d904d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<xarray.backends.zarr.ZarrStore at 0x21eee29d4a0>" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset_baltic.to_zarr(\"baltic.zarr\", mode=\"w\", safe_chunks=False)" + ] + }, + { + "cell_type": "markdown", + "id": "2c6cce1a-befa-4721-ae49-c7b6dd2268e0", + "metadata": {}, + "source": [ + "Now, open the JupyterLab Launcher, and select _xcube Viewer_. You should see the dataset titled \"SST Baltic May/June 2016\". " + ] + }, + { + "cell_type": "markdown", + "id": "a38b8ea5-f286-460d-a663-e8dc53aafca2", + "metadata": {}, + "source": [ + "You should now find two new files in your workspace, [xcube-server.yaml](./xcube-server.yaml) and [xcube-server.log](./xcube-server.log). \n", + "The first one is the configuration file used by xcube Server and therefore determines what datasets are shown in xcube Viewer. \n", + "The second is the server's log file which is useful for debugging, for example, you may find details here why a certain dataset is not displayed. \n", + "\n", + "Note, currently [xcube-server.yaml](./xcube-server.yaml) only applies to the server/viewer launched by the JupyterLab Launcher. It is independent from the server/viewer created from within Notebooks." + ] + }, + { + "cell_type": "markdown", + "id": "9ec537d6-aec3-41fb-aa21-30e2edd95f12", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/setup.py b/setup.py index 0d7310795..e51104f2c 100755 --- a/setup.py +++ b/setup.py @@ -47,6 +47,7 @@ author='Cate Development Team', packages=packages, package_data={ + 'cate.webapi': ['app/*', 'app/**/*'], 'cate.ds.data.countries': ['countries-10m.geojson', 'countries-50m.geojson', 'countries-110m.geojson', diff --git a/tests/cli/test_main.py b/tests/cli/test_main.py index 7752c4136..b58041e1c 100644 --- a/tests/cli/test_main.py +++ b/tests/cli/test_main.py @@ -451,47 +451,6 @@ def test_main_options(self): self.assert_main(['run', '--help']) -# Tests for "cate upd" may be skipped because they can be very slow - -@unittest.skipIf(os.environ.get('CATE_DISABLE_CLI_UPDATE_TESTS', None) == '1', - 'CATE_DISABLE_CLI_UPDATE_TESTS = 1') -class UpdateCommandTest(CliTestCase): - def test_upd_info(self): - self.assert_main(['upd', '--info'], - expected_status=0, - expected_stdout=['Latest version is ', 'Current version is', - 'Available versions'], - expected_stderr='') - self.assert_main(['upd', '--info', '1.0.0'], - expected_status=0, - expected_stdout=['Latest version is ', - 'Current version is', - 'Desired version is 1.0.0 (available)', - 'Available versions'], - expected_stderr='') - - @unittest.skip("Omitted due to version issue. " - "No suitable older version for testing compatible with python 3.7 available.") - def test_upd_to_older_version(self): - self.assert_main(['upd', '--dry-run', '1.0.0'], - expected_status=0, - expected_stdout=['The following NEW packages will be INSTALLED:', - 'cate-cli:'], - expected_stderr='') - - def test_upd(self): - self.assert_main(['upd', '--dry-run'], - expected_status=0, - expected_stdout=['Current cate version is'], - expected_stderr='') - self.assert_main(['upd', '--dry-run', '282.2.1'], - expected_status=1, - expected_stdout='', - expected_stderr=['cate upd: error: ' - 'desired cate version 282.2.1 is not available;', - 'type "cate upd --info" to show available versions']) - - class IOCommandTest(CliTestCase): IO_LIST_OUTPUT = "JSON (*.json) - JSON format (plain text, UTF8)\n" \ "NETCDF3 (*.nc) - netCDF 3 file format, which fully supports 2+ GB files.\n" \ diff --git a/tests/core/test_workspace.py b/tests/core/test_workspace.py index ece0a9e47..0bb58d840 100644 --- a/tests/core/test_workspace.py +++ b/tests/core/test_workspace.py @@ -11,15 +11,31 @@ from cate.core.types import ValidationError from cate.core.workflow import Workflow, OpStep -from cate.core.workspace import Workspace, mk_op_arg, mk_op_args, mk_op_kwargs +from cate.core.workspace import Workspace +from cate.core.workspace import mk_op_arg +from cate.core.workspace import mk_op_args +from cate.core.workspace import mk_op_kwargs from cate.util.opmetainf import OpMetaInfo from cate.util.undefined import UNDEFINED -NETCDF_TEST_FILE_1 = os.path.join(os.path.dirname(__file__), '..', 'data', 'precip_and_temp.nc') -NETCDF_TEST_FILE_2 = os.path.join(os.path.dirname(__file__), '..', 'data', 'precip_and_temp_2.nc') +NETCDF_TEST_FILE_1 = os.path.join(os.path.dirname(__file__), + '..', 'data', 'precip_and_temp.nc') +NETCDF_TEST_FILE_2 = os.path.join(os.path.dirname(__file__), + '..', 'data', 'precip_and_temp_2.nc') class WorkspaceTest(unittest.TestCase): + def test_id_codec(self): + base_dir = ".cate/workspaces/TEST-1" + ws_id = "2E636174652F776F726B7370616365732F544553542D31" + self.assertEqual(ws_id, Workspace.get_id_from_base_dir(base_dir)) + self.assertEqual(base_dir, Workspace.get_base_dir_from_id(ws_id)) + + base_dir = ".cate/scratch/345f-3ad6-99de" + ws_id = "2E636174652F736372617463682F333435662D336164362D39396465" + self.assertEqual(ws_id, Workspace.get_id_from_base_dir(base_dir)) + self.assertEqual(base_dir, Workspace.get_base_dir_from_id(ws_id)) + def test_utilities(self): self.assertEqual(mk_op_arg(1), {'value': 1}) self.assertEqual(mk_op_arg('2'), {'value': '2'}) @@ -28,10 +44,16 @@ def test_utilities(self): self.assertEqual(mk_op_args(), []) self.assertEqual(mk_op_args(1, '2', 'a', '@b'), - [{'value': 1}, {'value': '2'}, {'value': 'a'}, {'source': 'b'}]) + [{'value': 1}, + {'value': '2'}, + {'value': 'a'}, + {'source': 'b'}]) - self.assertEqual(mk_op_kwargs(a=1), OrderedDict([('a', {'value': 1})])) - self.assertEqual(mk_op_kwargs(a=1, b='@c'), OrderedDict([('a', {'value': 1}), ('b', {'source': 'c'})])) + self.assertEqual(mk_op_kwargs(a=1), + OrderedDict([('a', {'value': 1})])) + self.assertEqual(mk_op_kwargs(a=1, b='@c'), + OrderedDict([('a', {'value': 1}), + ('b', {'source': 'c'})])) def test_workspace_is_part_of_context(self): @@ -44,8 +66,14 @@ def some_op(ctx: dict) -> dict: op_reg = OP_REGISTRY.add_op(some_op) op_reg.op_meta_info.inputs['ctx']['context'] = True - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) - ws.set_resource(op_reg.op_meta_info.qualified_name, {}, res_name='new_ctx') + ws = Workspace('/path', + Workflow( + OpMetaInfo('workspace_workflow', + header=dict(description='Test!')) + )) + ws.set_resource(op_reg.op_meta_info.qualified_name, + {}, + res_name='new_ctx') ws.execute_workflow('new_ctx') self.assertTrue('new_ctx' in ws.resource_cache) @@ -56,10 +84,16 @@ def some_op(ctx: dict) -> dict: OP_REGISTRY.remove_op(some_op) def test_workspace_can_create_new_res_names(self): - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) - res_name_1 = ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value='A')) - res_name_2 = ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value='B')) - res_name_3 = ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value='C')) + ws = Workspace('/path', + Workflow( + OpMetaInfo('workspace_workflow', + header=dict(description='Test!')))) + res_name_1 = ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value='A')) + res_name_2 = ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value='B')) + res_name_3 = ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value='C')) self.assertEqual(res_name_1, 'res_1') self.assertEqual(res_name_2, 'res_2') self.assertEqual(res_name_3, 'res_3') @@ -71,14 +105,24 @@ def test_to_json_dict(self): def dataset_op() -> xr.Dataset: periods = 5 - temperature_data = (15 + 8 * np.random.randn(periods, 2, 2)).round(decimals=1) - temperature_attrs = {'a': np.array([1, 2, 3]), 'comment': 'hot', '_FillValue': np.nan} - precipitation_data = (10 * np.random.rand(periods, 2, 2)).round(decimals=1) - precipitation_attrs = {'x': True, 'comment': 'wet', '_FillValue': -1.0} + temperature_data = (15 + 8 * np.random.randn(periods, 2, 2)) \ + .round(decimals=1) + temperature_attrs = {'a': np.array([1, 2, 3]), + 'comment': 'hot', + '_FillValue': np.nan} + precipitation_data = (10 * np.random.rand(periods, 2, 2)) \ + .round(decimals=1) + precipitation_attrs = {'x': True, + 'comment': 'wet', + '_FillValue': -1.0} ds = xr.Dataset( data_vars={ - 'temperature': (('time', 'lat', 'lon'), temperature_data, temperature_attrs), - 'precipitation': (('time', 'lat', 'lon'), precipitation_data, precipitation_attrs) + 'temperature': (('time', 'lat', 'lon'), + temperature_data, + temperature_attrs), + 'precipitation': (('time', 'lat', 'lon'), + precipitation_data, + precipitation_attrs) }, coords={ 'lon': np.array([12, 13]), @@ -109,8 +153,12 @@ def scalar_dataset_op() -> xr.Dataset: def empty_dataset_op() -> xr.Dataset: ds = xr.Dataset( data_vars={ - 'temperature': (('time', 'lat', 'lon'), np.ndarray(shape=(0, 0, 0), dtype=np.float32)), - 'precipitation': (('time', 'lat', 'lon'), np.ndarray(shape=(0, 0, 0), dtype=np.float32)) + 'temperature': (('time', 'lat', 'lon'), + np.ndarray(shape=(0, 0, 0), + dtype=np.float32)), + 'precipitation': (('time', 'lat', 'lon'), + np.ndarray(shape=(0, 0, 0), + dtype=np.float32)) }, coords={ 'lon': np.ndarray(shape=(0,), dtype=np.float32), @@ -126,7 +174,10 @@ def data_frame_op() -> pd.DataFrame: data = {'A': [1, 2, 3, np.nan, 4, 9, np.nan, np.nan, 1, 0, 4, 6], 'B': [5, 6, 8, 7, 5, 5, 5, 9, 1, 2, 7, 6]} time = pd.date_range('2000-01-01', freq='MS', periods=12) - return pd.DataFrame(data=data, index=time, dtype=float, columns=['A', 'B']) + return pd.DataFrame(data=data, + index=time, + dtype=float, + columns=['A', 'B']) def scalar_data_frame_op() -> pd.DataFrame: data = {'A': [1.3], @@ -173,17 +224,28 @@ def str_op() -> str: OP_REGISTRY.add_op(empty_data_frame_op) OP_REGISTRY.add_op(int_op) OP_REGISTRY.add_op(str_op) - workflow = Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!'))) - workflow.add_step(OpStep(dataset_op, node_id='ds')) - workflow.add_step(OpStep(data_frame_op, node_id='df')) - workflow.add_step(OpStep(geo_data_frame_op, node_id='gdf')) - workflow.add_step(OpStep(scalar_dataset_op, node_id='scalar_ds')) - workflow.add_step(OpStep(scalar_data_frame_op, node_id='scalar_df')) - workflow.add_step(OpStep(scalar_geo_data_frame_op, node_id='scalar_gdf')) - workflow.add_step(OpStep(empty_dataset_op, node_id='empty_ds')) - workflow.add_step(OpStep(empty_data_frame_op, node_id='empty_df')) - workflow.add_step(OpStep(int_op, node_id='i')) - workflow.add_step(OpStep(str_op, node_id='s')) + workflow = Workflow(OpMetaInfo('workspace_workflow', + header=dict(description='Test!'))) + workflow.add_step(OpStep(dataset_op, + node_id='ds')) + workflow.add_step(OpStep(data_frame_op, + node_id='df')) + workflow.add_step(OpStep(geo_data_frame_op, + node_id='gdf')) + workflow.add_step(OpStep(scalar_dataset_op, + node_id='scalar_ds')) + workflow.add_step(OpStep(scalar_data_frame_op, + node_id='scalar_df')) + workflow.add_step(OpStep(scalar_geo_data_frame_op, + node_id='scalar_gdf')) + workflow.add_step(OpStep(empty_dataset_op, + node_id='empty_ds')) + workflow.add_step(OpStep(empty_data_frame_op, + node_id='empty_df')) + workflow.add_step(OpStep(int_op, + node_id='i')) + workflow.add_step(OpStep(str_op, + node_id='s')) ws = Workspace('/path', workflow) ws.execute_workflow() @@ -200,9 +262,12 @@ def str_op() -> str: res_ds = l_res[0] self.assertEqual(res_ds.get('name'), 'ds') - self.assertEqual(res_ds.get('dataType'), 'xarray.core.dataset.Dataset') - self.assertEqual(res_ds.get('dimSizes'), dict(lat=2, lon=2, time=5)) - self.assertEqual(res_ds.get('attributes'), {'history': 'a b c'}) + self.assertEqual(res_ds.get('dataType'), + 'xarray.core.dataset.Dataset') + self.assertEqual(res_ds.get('dimSizes'), + dict(lat=2, lon=2, time=5)) + self.assertEqual(res_ds.get('attributes'), + {'history': 'a b c'}) res_ds_vars = res_ds.get('variables') self.assertIsNotNone(res_ds_vars) self.assertEqual(len(res_ds_vars), 2) @@ -214,7 +279,8 @@ def str_op() -> str: self.assertEqual(res_ds_var_1.get('chunkSizes'), None) self.assertEqual(res_ds_var_1.get('isYFlipped'), True) self.assertEqual(res_ds_var_1.get('isFeatureAttribute'), None) - self.assertEqual(res_ds_var_1.get('attributes'), dict(x=True, comment='wet', _FillValue=-1.)) + self.assertEqual(res_ds_var_1.get('attributes'), + dict(x=True, comment='wet', _FillValue=-1.)) res_ds_var_2 = res_ds_vars[1] self.assertEqual(res_ds_var_2.get('name'), 'temperature') self.assertEqual(res_ds_var_2.get('dataType'), 'float64') @@ -223,12 +289,17 @@ def str_op() -> str: self.assertEqual(res_ds_var_2.get('chunkSizes'), None) self.assertEqual(res_ds_var_2.get('isYFlipped'), True) self.assertEqual(res_ds_var_2.get('isFeatureAttribute'), None) - self.assertEqual(res_ds_var_2.get('attributes'), dict(a=[1, 2, 3], comment='hot', _FillValue=np.nan)) + self.assertEqual(res_ds_var_2.get('attributes'), + dict(a=[1, 2, 3], + comment='hot', + _FillValue=np.nan)) res_df = l_res[1] self.assertEqual(res_df.get('name'), 'df') - self.assertEqual(res_df.get('dataType'), 'pandas.core.frame.DataFrame') - self.assertEqual(res_df.get('attributes'), {'num_rows': 12, 'num_columns': 2}) + self.assertEqual(res_df.get('dataType'), + 'pandas.core.frame.DataFrame') + self.assertEqual(res_df.get('attributes'), + {'num_rows': 12, 'num_columns': 2}) res_df_vars = res_df.get('variables') self.assertIsNotNone(res_df_vars) self.assertEqual(len(res_df_vars), 2) @@ -251,8 +322,12 @@ def str_op() -> str: res_gdf = l_res[2] self.assertEqual(res_gdf.get('name'), 'gdf') - self.assertEqual(res_gdf.get('dataType'), 'geopandas.geodataframe.GeoDataFrame') - self.assertEqual(res_gdf.get('attributes'), {'num_rows': 3, 'num_columns': 4, 'geom_type': 'Point'}) + self.assertEqual(res_gdf.get('dataType'), + 'geopandas.geodataframe.GeoDataFrame') + self.assertEqual(res_gdf.get('attributes'), + {'num_rows': 3, + 'num_columns': 4, + 'geom_type': 'Point'}) res_gdf_vars = res_gdf.get('variables') self.assertIsNotNone(res_gdf_vars) self.assertEqual(len(res_gdf_vars), 4) @@ -293,26 +368,41 @@ def str_op() -> str: res_scalar_ds_vars = res_scalar_ds.get('variables') self.assertIsNotNone(res_scalar_ds_vars) self.assertEqual(len(res_scalar_ds_vars), 2) - scalar_values = {res_scalar_ds_vars[0].get('name'): res_scalar_ds_vars[0].get('value'), - res_scalar_ds_vars[1].get('name'): res_scalar_ds_vars[1].get('value')} - self.assertEqual(scalar_values, {'temperature': 15.2, 'precipitation': 10.1}) + scalar_values = { + res_scalar_ds_vars[0].get('name'): + res_scalar_ds_vars[0].get('value'), + res_scalar_ds_vars[1].get('name'): + res_scalar_ds_vars[1].get('value') + } + self.assertEqual(scalar_values, {'temperature': 15.2, + 'precipitation': 10.1}) res_scalar_df = l_res[4] res_scalar_df_vars = res_scalar_df.get('variables') self.assertIsNotNone(res_scalar_df_vars) self.assertEqual(len(res_scalar_df_vars), 2) - scalar_values = {res_scalar_df_vars[0].get('name'): res_scalar_df_vars[0].get('value'), - res_scalar_df_vars[1].get('name'): res_scalar_df_vars[1].get('value')} + scalar_values = { + res_scalar_df_vars[0].get('name'): + res_scalar_df_vars[0].get('value'), + res_scalar_df_vars[1].get('name'): + res_scalar_df_vars[1].get('value') + } self.assertEqual(scalar_values, {'A': 1.3, 'B': 5.9}) res_scalar_gdf = l_res[5] res_scalar_gdf_vars = res_scalar_gdf.get('variables') self.assertIsNotNone(res_scalar_gdf_vars) self.assertEqual(len(res_scalar_gdf_vars), 4) - scalar_values = {res_scalar_gdf_vars[0].get('name'): res_scalar_gdf_vars[0].get('value'), - res_scalar_gdf_vars[1].get('name'): res_scalar_gdf_vars[1].get('value'), - res_scalar_gdf_vars[2].get('name'): res_scalar_gdf_vars[2].get('value'), - res_scalar_gdf_vars[3].get('name'): res_scalar_gdf_vars[3].get('value')} + scalar_values = { + res_scalar_gdf_vars[0].get('name'): + res_scalar_gdf_vars[0].get('value'), + res_scalar_gdf_vars[1].get('name'): + res_scalar_gdf_vars[1].get('value'), + res_scalar_gdf_vars[2].get('name'): + res_scalar_gdf_vars[2].get('value'), + res_scalar_gdf_vars[3].get('name'): + res_scalar_gdf_vars[3].get('value') + } self.assertEqual(scalar_values, {'name': (1000 * 'A') + '...', 'lat': 45, 'lon': -120, @@ -322,16 +412,25 @@ def str_op() -> str: res_empty_ds_vars = res_empty_ds.get('variables') self.assertIsNotNone(res_empty_ds_vars) self.assertEqual(len(res_empty_ds_vars), 2) - scalar_values = {res_empty_ds_vars[0].get('name'): res_empty_ds_vars[0].get('value'), - res_empty_ds_vars[1].get('name'): res_empty_ds_vars[1].get('value')} - self.assertEqual(scalar_values, {'temperature': None, 'precipitation': None}) + scalar_values = { + res_empty_ds_vars[0].get('name'): res_empty_ds_vars[0].get( + 'value'), + res_empty_ds_vars[1].get('name'): res_empty_ds_vars[1].get( + 'value') + } + self.assertEqual(scalar_values, + {'temperature': None, 'precipitation': None}) res_empty_df = l_res[7] res_empty_df_vars = res_empty_df.get('variables') self.assertIsNotNone(res_empty_df_vars) self.assertEqual(len(res_empty_df_vars), 2) - scalar_values = {res_empty_df_vars[0].get('name'): res_empty_df_vars[0].get('value'), - res_empty_df_vars[1].get('name'): res_empty_df_vars[1].get('value')} + scalar_values = { + res_empty_df_vars[0].get('name'): res_empty_df_vars[0].get( + 'value'), + res_empty_df_vars[1].get('name'): res_empty_df_vars[1].get( + 'value') + } self.assertEqual(scalar_values, {'A': None, 'B': None}) res_int = l_res[8] @@ -360,33 +459,55 @@ def str_op() -> str: # noinspection PyMethodMayBeStatic def test_execute_empty_workflow(self): - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) + ws = Workspace('/path', Workflow( + OpMetaInfo('workspace_workflow', + header=dict(description='Test!')) + )) ws.execute_workflow() def test_set_and_execute_step(self): - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) + ws = Workspace('/path', Workflow( + OpMetaInfo('workspace_workflow', + header=dict(description='Test!')) + )) with self.assertRaises(ValidationError) as we: ws.set_resource("not_existing_op", {}) - self.assertEqual('Unknown operation "not_existing_op"', str(we.exception)) + self.assertEqual('Unknown operation "not_existing_op"', + str(we.exception)) with self.assertRaises(ValidationError) as we: - ws.set_resource('cate.ops.io.read_netcdf', mk_op_kwargs(location=NETCDF_TEST_FILE_1), res_name='X') - self.assertEqual('"location" is not an input of operation "cate.ops.io.read_netcdf"', str(we.exception)) + ws.set_resource('cate.ops.io.read_netcdf', + mk_op_kwargs(location=NETCDF_TEST_FILE_1), + res_name='X') + self.assertEqual('"location" is not an input ' + 'of operation "cate.ops.io.read_netcdf"', + str(we.exception)) with self.assertRaises(ValidationError) as we: - ws.set_resource('cate.ops.io.read_netcdf', {'file': {'foo': 'bar'}}, res_name='X') - self.assertEqual('Illegal argument for input "file" of operation "cate.ops.io.read_netcdf', str(we.exception)) - - ws.set_resource('cate.ops.io.read_netcdf', mk_op_kwargs(file=NETCDF_TEST_FILE_1), res_name='X') - ws.set_resource('cate.ops.timeseries.tseries_mean', mk_op_kwargs(ds="@X", var="precipitation"), res_name='Y') + ws.set_resource('cate.ops.io.read_netcdf', + {'file': {'foo': 'bar'}}, + res_name='X') + self.assertEqual('Illegal argument for input "file"' + ' of operation "cate.ops.io.read_netcdf', + str(we.exception)) + + ws.set_resource('cate.ops.io.read_netcdf', + mk_op_kwargs(file=NETCDF_TEST_FILE_1), + res_name='X') + ws.set_resource('cate.ops.timeseries.tseries_mean', + mk_op_kwargs(ds="@X", + var="precipitation"), + res_name='Y') self.assertEqual(ws.resource_cache, {}) ws.execute_workflow('Y') self.assertIn('X', ws.resource_cache) self.assertIn('Y', ws.resource_cache) - ws.set_resource('cate.ops.timeseries.tseries_mean', mk_op_kwargs(ds="@X", var="temperature"), res_name='Y', + ws.set_resource('cate.ops.timeseries.tseries_mean', + mk_op_kwargs(ds="@X", var="temperature"), + res_name='Y', overwrite=True) self.assertIn('X', ws.resource_cache) self.assertIn('Y', ws.resource_cache) @@ -396,7 +517,10 @@ def test_set_and_execute_step(self): self.assertIn('X', ws.resource_cache) self.assertIn('Y', ws.resource_cache) - ws.set_resource('cate.ops.io.read_netcdf', mk_op_kwargs(file=NETCDF_TEST_FILE_2), res_name='X', overwrite=True) + ws.set_resource('cate.ops.io.read_netcdf', + mk_op_kwargs(file=NETCDF_TEST_FILE_2), + res_name='X', + overwrite=True) self.assertIn('X', ws.resource_cache) self.assertIs(ws.resource_cache['X'], UNDEFINED) self.assertIn('Y', ws.resource_cache) @@ -407,70 +531,83 @@ def test_set_and_execute_step(self): self.assertIn('Y', ws.resource_cache) def test_set_and_rename_and_execute_step(self): - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) - self.assertEqual(ws.user_data, {}) - - ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value=1), res_name='X') - ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value="@X"), res_name='Y') - ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value="@X"), res_name='Z') - self.assertEqual(len(ws.workflow.steps), 3) - self.assertEqual(ws.resource_cache, {}) + ws = Workspace('/path', + Workflow(OpMetaInfo('workspace_workflow', + header=dict(description='Test!')))) + self.assertEqual({}, ws.user_data) + + ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value=1), res_name='X') + ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value="@X"), res_name='Y') + ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value="@X"), res_name='Z') + self.assertEqual(3, len(ws.workflow.steps)) + self.assertEqual({}, ws.resource_cache) value = ws.execute_workflow('Y') - self.assertEqual(value, 1) - self.assertEqual(ws.resource_cache.get('X'), 1) - self.assertEqual(ws.resource_cache.get('Y'), 1) - self.assertEqual(ws.resource_cache.get('Z'), None) + self.assertEqual(1, value) + self.assertEqual(1, ws.resource_cache.get('X')) + self.assertEqual(1, ws.resource_cache.get('Y')) + self.assertEqual(None, ws.resource_cache.get('Z')) value = ws.execute_workflow('Z') - self.assertEqual(value, 1) - self.assertEqual(ws.resource_cache.get('X'), 1) - self.assertEqual(ws.resource_cache.get('Y'), 1) - self.assertEqual(ws.resource_cache.get('Z'), 1) - - ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value=9), res_name='X', overwrite=True) - self.assertEqual(len(ws.workflow.steps), 3) - self.assertEqual(ws.resource_cache.get('X'), UNDEFINED) - self.assertEqual(ws.resource_cache.get('Y'), UNDEFINED) - self.assertEqual(ws.resource_cache.get('Z'), UNDEFINED) + self.assertEqual(1, value) + self.assertEqual(1, ws.resource_cache.get('X')) + self.assertEqual(1, ws.resource_cache.get('Y')) + self.assertEqual(1, ws.resource_cache.get('Z')) + + ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value=9), res_name='X', overwrite=True) + self.assertEqual(3, len(ws.workflow.steps), 3) + self.assertEqual(UNDEFINED, ws.resource_cache.get('X')) + self.assertEqual(UNDEFINED, ws.resource_cache.get('Y')) + self.assertEqual(UNDEFINED, ws.resource_cache.get('Z')) ws.execute_workflow() - self.assertEqual(ws.resource_cache.get('X'), 9) - self.assertEqual(ws.resource_cache.get('Y'), 9) - self.assertEqual(ws.resource_cache.get('Z'), 9) + self.assertEqual(9, ws.resource_cache.get('X')) + self.assertEqual(9, ws.resource_cache.get('Y')) + self.assertEqual(9, ws.resource_cache.get('Z')) ws.rename_resource('X', 'A') self.assertIsNone(ws.workflow.find_node('X')) self.assertIsNotNone(ws.workflow.find_node('A')) - self.assertEqual(ws.resource_cache.get('X', '--'), '--') - self.assertEqual(ws.resource_cache.get('A'), 9) - self.assertEqual(ws.resource_cache.get('Y'), 9) - self.assertEqual(ws.resource_cache.get('Z'), 9) - - ws.set_resource('cate.ops.utility.identity', mk_op_kwargs(value=5), res_name='A', overwrite=True) - self.assertEqual(ws.resource_cache.get('X', '--'), '--') - self.assertEqual(ws.resource_cache.get('A'), UNDEFINED) - self.assertEqual(ws.resource_cache.get('Y'), UNDEFINED) - self.assertEqual(ws.resource_cache.get('Z'), UNDEFINED) + self.assertEqual('--', ws.resource_cache.get('X', '--')) + self.assertEqual(9, ws.resource_cache.get('A')) + self.assertEqual(9, ws.resource_cache.get('Y')) + self.assertEqual(9, ws.resource_cache.get('Z')) + + ws.set_resource('cate.ops.utility.identity', + mk_op_kwargs(value=5), res_name='A', overwrite=True) + self.assertEqual('--', ws.resource_cache.get('X', '--')) + self.assertEqual(UNDEFINED, ws.resource_cache.get('A')) + self.assertEqual(UNDEFINED, ws.resource_cache.get('Y')) + self.assertEqual(UNDEFINED, ws.resource_cache.get('Z')) ws.execute_workflow() - self.assertEqual(ws.resource_cache.get('X', '--'), '--') - self.assertEqual(ws.resource_cache.get('A'), 5) - self.assertEqual(ws.resource_cache.get('Y'), 5) - self.assertEqual(ws.resource_cache.get('Z'), 5) + self.assertEqual('--', ws.resource_cache.get('X', '--')) + self.assertEqual(5, ws.resource_cache.get('A')) + self.assertEqual(5, ws.resource_cache.get('Y')) + self.assertEqual(5, ws.resource_cache.get('Z')) @unittest.skip("_extract_point is not an operator anymore") def test_set_step_and_run_op(self): - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) + ws = Workspace('/path', + Workflow(OpMetaInfo('workspace_workflow', + header=dict(description='Test!')))) - ws.set_resource('cate.ops.io.read_netcdf', mk_op_kwargs(file=NETCDF_TEST_FILE_1), res_name='X') + ws.set_resource('cate.ops.io.read_netcdf', + mk_op_kwargs(file=NETCDF_TEST_FILE_1), res_name='X') ws.execute_workflow('X') self.assertIsNotNone(ws.workflow) self.assertEqual(len(ws.workflow.steps), 1) self.assertIn('X', ws.resource_cache) op_name = '_extract_point' - op_args = mk_op_kwargs(ds='@X', point='10.22, 34.52', indexers=dict(time='2014-09-11'), should_return=True) + op_args = mk_op_kwargs(ds='@X', + point='10.22, 34.52', + indexers=dict(time='2014-09-11'), + should_return=True) op_result = ws.run_op(op_name, op_args) self.assertEqual(len(op_result), 4) self.assertAlmostEqual(op_result['lat'], 34.5) @@ -479,25 +616,32 @@ def test_set_step_and_run_op(self): self.assertAlmostEqual(op_result['temperature'], 32.9) # without asking for return data - op_args = mk_op_kwargs(ds='@X', point='10.22, 34.52', indexers=dict(time='2014-09-11')) + op_args = mk_op_kwargs(ds='@X', + point='10.22, 34.52', + indexers=dict(time='2014-09-11')) op_result = ws.run_op(op_name, op_args) self.assertIsNone(op_result) # with a non existing operator name with self.assertRaises(ValidationError) as we: ws.run_op("not_existing_op", {}) - self.assertEqual('Unknown operation "not_existing_op"', str(we.exception)) + self.assertEqual('Unknown operation "not_existing_op"', + str(we.exception)) # TODO (forman): #391 def test_set_resource_is_reentrant(self): from concurrent.futures import ThreadPoolExecutor - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) + ws = Workspace('/path', + Workflow(OpMetaInfo('workspace_workflow', + header=dict(description='Test!')))) def set_resource_and_execute(): - res_name = ws.set_resource('cate.ops.utility.no_op', - op_kwargs=dict(num_steps=dict(value=10), - step_duration=dict(value=0.05))) + res_name = ws.set_resource( + 'cate.ops.utility.no_op', + op_kwargs=dict(num_steps=dict(value=10), + step_duration=dict(value=0.05)) + ) ws.execute_workflow(res_name=res_name) return res_name @@ -563,11 +707,17 @@ def test_example(self): expected_json_dict = json.loads(expected_json_text) - ws = Workspace('/path', Workflow(OpMetaInfo('workspace_workflow', header=dict(description='Test!')))) + ws = Workspace('/path', + Workflow(OpMetaInfo('workspace_workflow', + header=dict(description='Test!')))) # print("wf_1: " + json.dumps(ws.workflow.to_json_dict(), indent=' ')) - ws.set_resource('cate.ops.io.read_netcdf', mk_op_kwargs(file=NETCDF_TEST_FILE_1), res_name='p') + ws.set_resource('cate.ops.io.read_netcdf', + mk_op_kwargs(file=NETCDF_TEST_FILE_1), + res_name='p') # print("wf_2: " + json.dumps(ws.workflow.to_json_dict(), indent=' ')) - ws.set_resource('cate.ops.timeseries.tseries_mean', mk_op_kwargs(ds="@p", var="precipitation"), res_name='ts') + ws.set_resource('cate.ops.timeseries.tseries_mean', + mk_op_kwargs(ds="@p", var="precipitation"), + res_name='ts') # print("wf_3: " + json.dumps(ws.workflow.to_json_dict(), indent=' ')) self.maxDiff = None @@ -575,14 +725,19 @@ def test_example(self): with self.assertRaises(ValueError) as e: ws.set_resource('cate.ops.timeseries.tseries_point', - mk_op_kwargs(ds="@p", point="iih!", var="precipitation"), res_name='ts2', + mk_op_kwargs(ds="@p", + point="iih!", + var="precipitation"), + res_name='ts2', validate_args=True) self.assertEqual(str(e.exception), - "Input 'point' for operation 'cate.ops.timeseries.tseries_point': " + "Input 'point' for operation" + " 'cate.ops.timeseries.tseries_point': " "Value cannot be converted into a 'PointLike': " "Invalid geometry WKT format.") ws2 = Workspace.from_json_dict(ws.to_json_dict()) self.assertEqual(ws2.base_dir, ws.base_dir) - self.assertEqual(ws2.workflow.op_meta_info.qualified_name, ws.workflow.op_meta_info.qualified_name) + self.assertEqual(ws2.workflow.op_meta_info.qualified_name, + ws.workflow.op_meta_info.qualified_name) self.assertEqual(len(ws2.workflow.steps), len(ws.workflow.steps)) diff --git a/tests/core/test_wsmanag.py b/tests/core/test_wsmanag.py index 1c5e6b132..7c33b9b5b 100644 --- a/tests/core/test_wsmanag.py +++ b/tests/core/test_wsmanag.py @@ -393,9 +393,17 @@ def test_resolve_path_permits_access(self): def test_resolve_workspace_dir(self): ws_manag = self.new_workspace_manager() - self.assertEqual(os.path.join(ws_manag.root_path, 'workspaces', 'test-1'), + self.assertEqual(os.path.join(ws_manag.root_path, + '.cate', 'workspaces', 'test-1'), ws_manag.resolve_workspace_dir('test-1')) - self.assertEqual(os.path.join(ws_manag.root_path, 'my_workspaces', 'test-1'), - ws_manag.resolve_workspace_dir(os.path.join('my_workspaces', 'test-1'))) - self.assertEqual(os.path.join(ws_manag.root_path, 'my_workspaces', 'test-1'), - ws_manag.resolve_workspace_dir(os.path.join(os.path.sep, 'my_workspaces', 'test-1'))) + self.assertEqual(os.path.join(ws_manag.root_path, + 'my_workspaces', 'test-1'), + ws_manag.resolve_workspace_dir( + os.path.join('my_workspaces', 'test-1') + )) + self.assertEqual(os.path.join(ws_manag.root_path, + 'my_workspaces', 'test-1'), + ws_manag.resolve_workspace_dir( + os.path.join(os.path.sep, + 'my_workspaces', 'test-1') + )) diff --git a/tests/webapi/test_websocket.py b/tests/webapi/test_websocket.py index b9d9665d1..1a6339d1a 100644 --- a/tests/webapi/test_websocket.py +++ b/tests/webapi/test_websocket.py @@ -30,7 +30,8 @@ def setUp(self): DATA_STORE_POOL.remove_all_store_configs() self._store_root = './temp_local' config = DataStoreConfig(store_id='file', - store_params=dict(root=self._store_root)) + store_params=dict(root=self._store_root, + max_depth=2)) DATA_STORE_POOL.add_store_config( store_instance_id='local', store_config=config) @@ -98,6 +99,7 @@ def test_get_data_sources(self): def test_add_and_remove_local_data_source(self): data_source_id = 'locally_added_data_source_for_testing.zarr' + adjusted_data_source_id = f'cate-local/{data_source_id}' lds = self.service.get_data_sources(data_store_id='local', monitor=Monitor.NONE) @@ -111,23 +113,29 @@ def test_add_and_remove_local_data_source(self): monitor=Monitor.NONE) self.assertEqual(1, len(new_lds)) - self.assertEqual(new_lds[0]['id'], data_source_id) - self.assertEqual(new_lds[0]['title'], data_source_id) - self.assertEqual(str(new_lds[0]['data_type']), 'dataset') + self.assertEqual(adjusted_data_source_id, new_lds[0]['id']) + self.assertEqual(adjusted_data_source_id, new_lds[0]['title']) + self.assertEqual('dataset', str(new_lds[0]['data_type'])) lds = self.service.get_data_sources(data_store_id='local', monitor=Monitor.NONE) - self.assertIn(data_source_id, - [ds['id'] for ds in lds if ds['id'] == data_source_id]) + self.assertIn( + adjusted_data_source_id, + [ds['id'] for ds in lds if ds['id'] == adjusted_data_source_id] + ) - self.service.remove_local_data_source(data_source_id=data_source_id, - remove_files=True, - monitor=Monitor.NONE) + self.service.remove_local_data_source( + data_source_id=adjusted_data_source_id, + remove_files=True, + monitor=Monitor.NONE + ) lds = self.service.get_data_sources(data_store_id='local', monitor=Monitor.NONE) - self.assertNotIn(data_source_id, - [ds['id'] for ds in lds if ds['id'] == data_source_id]) + self.assertNotIn( + adjusted_data_source_id, + [ds['id'] for ds in lds if ds['id'] == adjusted_data_source_id] + ) def test_get_operations(self): ops = self.service.get_operations()

>>0){if(0|X(C,P,(R+1|0)==(0|P),2,0)){R=0|_e[p>>2];break}ce[e+296>>0]=1,R=0;break e}}while(0);ne((0|_e[C>>2])+(R<<1)|0,0,P-R<<1|0)}_e[p>>2]=P,O=13}}while(0);do{if(13==(0|O)){if(!A){_e[y>>2]=866,_e[y+4>>2]=910,_e[y+8>>2]=1497,Ce(N,812,y),be(N),R=1;break}for(r=4+S|0,t=8+S|0,n=12+S|0,i=16+S|0,a=20+S|0,o=24+S|0,u=28+S|0,f=32+S|0,l=36+S|0,s=40+S|0,c=44+S|0,_=48+S|0,d=52+S|0,E=56+S|0,T=60+S|0,R=(x=0)|_e[C>>2],P=0|_e[S>>2],p=0|_e[r>>2],C=0|_e[t>>2],e=0|_e[n>>2],N=0|_e[i>>2],y=0|_e[a>>2],O=0|_e[o>>2],v=0|_e[u>>2],k=0|_e[f>>2],g=0|_e[l>>2],L=0|_e[s>>2],I=0|_e[c>>2],F=G=D=w=0;U=0|Ae(b,B),P=P+(0|_e[M+(U<<2)>>2])&7,p=p+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),C=C+(0|_e[M+(U<<2)>>2])&7,e=e+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),N=N+(0|_e[M+(U<<2)>>2])&7,y=y+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),O=O+(0|_e[M+(U<<2)>>2])&7,v=v+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),k=k+(0|_e[M+(U<<2)>>2])&7,g=g+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),L=L+(0|_e[M+(U<<2)>>2])&7,I=I+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),w=w+(0|_e[M+(U<<2)>>2])&7,D=D+(0|_e[m+(U<<2)>>2])&7,U=0|Ae(b,B),G=G+(0|_e[M+(U<<2)>>2])&7,F=F+(0|_e[m+(U<<2)>>2])&7,U=0|de[1445+y>>0],W[R>>1]=(0|de[1445+p>>0])<<3|0|de[1445+P>>0]|(0|de[1445+C>>0])<<6|(0|de[1445+e>>0])<<9|(0|de[1445+N>>0])<<12|U<<15,h=0|de[1445+L>>0],W[R+2>>1]=(0|de[1445+O>>0])<<2|U>>>1|(0|de[1445+v>>0])<<5|(0|de[1445+k>>0])<<8|(0|de[1445+g>>0])<<11|h<<14,W[R+4>>1]=(0|de[1445+I>>0])<<1|h>>>2|(0|de[1445+w>>0])<<4|(0|de[1445+D>>0])<<7|(0|de[1445+G>>0])<<10|(0|de[1445+F>>0])<<13,!(A>>>0<=(x=x+1|0)>>>0);)R=R+6|0;_e[S>>2]=P,_e[r>>2]=p,_e[t>>2]=C,_e[n>>2]=e,_e[i>>2]=N,_e[a>>2]=y,_e[o>>2]=O,_e[u>>2]=v,_e[f>>2]=k,_e[l>>2]=g,_e[s>>2]=L,_e[c>>2]=I,_e[_>>2]=w,_e[d>>2]=D,_e[E>>2]=G,_e[T>>2]=F,R=1}}while(0)}else R=0;return re(B),Te=H,0|(U=R)}(e))return 0|(i=1)}return(i=0)|i}return _e[e+88>>2]=0,(i=0)|i}(f,e,r))return Te=_,0|(d=f);return U(f),Te=(7&f?(_e[s>>2]=866,_e[s+4>>2]=2506,_e[s+8>>2]=1232,Ce(u,812,s),be(u)):ue(f,0,0,1,0),_),(d=0)|d}(e,r),r=a+i|0;do{if(i>>>0>>0){if(!_){for(n=t;n=n+(0|ie(0|ie((l+3|0)>>>2,d),(s+3|0)>>>2))|0,(0|(i=i+1|0))!=(0|r);)s>>>=1,l>>>=1;_e[u>>2]=n;break}for(e=s,n=t;s=0|ie((l+3|0)>>>2,d),15>>0|(c=0|ie(s,(e+3|0)>>>2))>>>0<8||519686845!=(0|_e[_>>2])||(function(e,r,t,n,i){r|=0,t|=0,n|=0,i|=0;var a=0,o=0,u=0,f=0,l=0,s=0;Te=(s=Te)+528|0,f=(l=s)+16|0,o=0|_e[88+(e|=0)>>2],u=(0|de[70+o+(i<<2)+1>>0])<<16|(0|de[70+o+(i<<2)>>0])<<24|(0|de[70+o+(i<<2)+2>>0])<<8|0|de[70+o+(i<<2)+3>>0],a=(a=i+1|0)>>>0<(0|de[16+o>>0])>>>0?(0|de[70+o+(a<<2)+1>>0])<<16|(0|de[70+o+(a<<2)>>0])<<24|(0|de[70+o+(a<<2)+2>>0])<<8|0|de[70+o+(a<<2)+3>>0]:0|_e[e+8>>2];if(u>>>0>>0)return f=0|_e[(f=e+4|0)>>2],l=0|Y(e,f=f+u|0,l=a-u|0,r,t,n,i),Te=s;_e[l>>2]=866,_e[l+4>>2]=3694,_e[l+8>>2]=1508,Ce(f,812,l),be(f),f=0|_e[(f=e+4|0)>>2],l=0|Y(e,f=f+u|0,l=a-u|0,r,t,n,i),Te=s}(_,u,c,s,i),n=0|_e[u>>2]),n=n+c|0,_e[u>>2]=n,(0|(i=i+1|0))!=(0|r);)e>>>=1,l>>>=1}}while(0);if(_){if(519686845==(0|_e[_>>2]))return U(_),7&_?(_e[f>>2]=866,_e[4+f>>2]=2506,_e[8+f>>2]=1232,Ce(o,812,f),be(o)):ue(_,0,0,1,0),void(Te=E);Te=E}else Te=E},_memset:ne,_sbrk:me,_memcpy:K,stackAlloc:function(e){var r=Te;return Te=(Te=Te+(e|=0)|0)+15&-16,0|r},_crn_get_height:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+8>>2]},dynCall_vi:function(e,r){r|=0,Je[7&(e|=0)](0|r)},getTempRet0:function(){return 0|L},_crn_get_levels:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+12>>2]},_crn_get_uncompressed_size:function(e,r,t){e|=0,r|=0,t|=0;var n,i,a,o,u=0,f=Te;switch(Te=Te+576|0,a=f+40|0,i=f+56|0,_e[(o=f)>>2]=40,q(e,r,o),n=(3+((0|_e[o+4>>2])>>>t)|0)>>>2,r=(3+((0|_e[o+8>>2])>>>t)|0)>>>2,e=0|_e[(t=o+32|0)+4>>2],0|_e[t>>2]){case 0:e?u=14:e=8;break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:u=e?14:13;break;case 9:case 10:e?u=14:e=8;break;default:u=14}return 13==(0|u)?e=16:14==(0|u)&&(_e[a>>2]=866,_e[4+a>>2]=2672,_e[8+a>>2]=1251,Ce(i,812,a),be(i),e=0),o=0|ie(0|ie(r,n),e),Te=f,0|o},_i64Add:ge,dynCall_iiii:function(e,r,t,n){return r|=0,t|=0,n|=0,0|ze[7&(e|=0)](0|r,0|t,0|n)},_emscripten_get_global_libc:function(){return 5072},dynCall_ii:function(e,r){return r|=0,0|$e[1&(e|=0)](0|r)},___udivdi3:Fe,_llvm_bswap_i32:xe,dynCall_viiiii:function(e,r,t,n,i,a){r|=0,t|=0,n|=0,i|=0,a|=0,je[3&(e|=0)](0|r,0|t,0|n,0|i,0|a)},___cxa_can_catch:function(e,r,t){e|=0,r|=0,t|=0;var n,i=Te;return Te=Te+16|0,_e[(n=i)>>2]=_e[t>>2],(e=0|ze[7&_e[16+(0|_e[e>>2])>>2]](e,r,n))&&(_e[t>>2]=_e[n>>2]),Te=i,1&e|0},_free:F,runPostSets:function(){},dynCall_viiiiii:function(e,r,t,n,i,a,o){r|=0,t|=0,n|=0,i|=0,a|=0,o|=0,Qe[3&(e|=0)](0|r,0|t,0|n,0|i,0|a,0|o)},establishStackSpace:function(e,r){Te=e|=0,r|=0},___uremdi3:Pe,___cxa_is_pointer_type:function(e){return 1&(e=(e|=0)?0!=(0|J(e,32,88,0)):0)|0},stackRestore:function(e){Te=e|=0},_malloc:I,_emscripten_replace_memory:function(e){return!(16777215&c(e)||c(e)<=16777215||2147483648>2]=40,q(e,r,t),Te=n,0|_e[t+4>>2]},_crn_get_dxt_format:function(e,r){e|=0,r|=0;var t,n=Te;return Te=Te+48|0,_e[(t=n)>>2]=40,q(e,r,t),Te=n,0|_e[t+32>>2]}}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),stackSave=Module.stackSave=asm.stackSave,getTempRet0=Module.getTempRet0=asm.getTempRet0,_memset=Module._memset=asm._memset,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,setTempRet0=Module.setTempRet0=asm.setTempRet0,_crn_decompress=Module._crn_decompress=asm._crn_decompress,_crn_get_bytes_per_block=Module._crn_get_bytes_per_block=asm._crn_get_bytes_per_block,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,_crn_get_height=Module._crn_get_height=asm._crn_get_height,_i64Subtract=Module._i64Subtract=asm._i64Subtract,_crn_get_levels=Module._crn_get_levels=asm._crn_get_levels,_crn_get_uncompressed_size=Module._crn_get_uncompressed_size=asm._crn_get_uncompressed_size,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,___udivdi3=Module.___udivdi3=asm.___udivdi3,_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,___cxa_can_catch=Module.___cxa_can_catch=asm.___cxa_can_catch,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,___uremdi3=Module.___uremdi3=asm.___uremdi3,___cxa_is_pointer_type=Module.___cxa_is_pointer_type=asm.___cxa_is_pointer_type,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,_emscripten_replace_memory=Module._emscripten_replace_memory=asm._emscripten_replace_memory,_crn_get_width=Module._crn_get_width=asm._crn_get_width,_crn_get_dxt_format=Module._crn_get_dxt_format=asm._crn_get_dxt_format,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii,initialStackTop;function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function run(e){function r(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,0>c,l>>c);cachedDstSize=K.length||(X=S[1].initializeFromClipResult(K,X,O))>=K.length||(X=S[2].initializeFromClipResult(K,X,O),ke(o,a,p,d,f,l,Ce.clipTriangleAtAxisAlignedThreshold(Be,n,S[0].getV(),S[1].getV(),S[2].getV(),Ae),S,x),X>>0,i=Math.max(0,Math.min(p,o)),c=[],f=o-i+1,s=[],h=m();if(i)for(e=h.progress,t=function(n){s.push(n),--f||(r=t=w,h.reject(s))},r=function(n){c.push(n),--i||(r=t=w,h.resolve(c))},u=0;u>>0,o=[],i=m();if(u)for(t=function(n,r){j(n,c).then(function(n){o[r]=n,--u||i.resolve(o)},i.reject)},e=0;e>>0,o=arguments;if(o.length<=1)for(;;){if(t in e){r=e[t++];break}if(++t>=u)throw new TypeError}else r=o[1];for(;tCate App